cups-2.2.7/000775 000765 000024 00000000000 13256465407 013161 5ustar00msweetstaff000000 000000 cups-2.2.7/backend/000775 000765 000024 00000000000 13255074424 014542 5ustar00msweetstaff000000 000000 cups-2.2.7/berkeley/000775 000765 000024 00000000000 13255074424 014755 5ustar00msweetstaff000000 000000 cups-2.2.7/cgi-bin/000775 000765 000024 00000000000 13255074424 014463 5ustar00msweetstaff000000 000000 cups-2.2.7/CHANGES-1.0.txt000664 000765 000024 00000021772 13255074424 015271 0ustar00msweetstaff000000 000000 CHANGES-1.0.txt --------------- CHANGES IN CUPS v1.0.5 - The HP-GL/2 filter did not correctly set the pen color for pens other than #1. - The scheduler would only accept 26 simultaneous jobs under some OS releases (mkstemp() limitation.) It now handles up to 2^32 simultaneous jobs. - The PostScript filter loaded the printer's PPD file twice. - The PAM authentication code now uses pam_strerror() to provide a textual error message in the error_log file. - The scheduler now copies PPD and interface script files instead of moving them; this fixes installations with a separate requests directory. - The PostScript RIP did not generate correct 6-color output. - Several filters were marking PPD options twice when they didn't need to. - The scheduler did not save the printer or class state after an accept-jobs or reject-jobs operation. - The cupsGetDefault() function now ignores the PRINTER environment variable if it is set to "lp". - New ippErrorString() function to get textual error messages. - Better error reporting in the System V commands. - The lpadmin and lpstat commands always tried to connect to the default server. - The text filter didn't load the charset files from the correct location. - Wasn't sending a WWW-Authenticate: field to HTTP clients when authentication was required. - httpSeparate() didn't always set the default port number for known methods. - The HP-GL/2 filter now looks for "PSwidth,length" instead of (the correct) "PSlength,width" as documented by HP. It appears that many major CAD applications are broken and this change allows the auto-rotation to work with them. - The IPP "printer-resolution" option was not being translated. - The charset files did not include the Microsoft "standard" characters from 128 to 159 (unused by the ISO-8859-x charsets) - The scheduler was chunking the Content-Type field from CGI programs; this problem was most noticeable with Microsoft Internet Explorer 5. - By popular demand, the printers, jobs, and classes CGIs no longer force a reload of the page every 10/30 seconds. - The scheduler incorrectly required that the IPP client provide a document-format attribute for the validate-job operation. - Clients that sent bad IPP requests without the required attributes-natural-language and attributes-charset attributes would crash the scheduler. CHANGES IN CUPS v1.0.4 - Documentation updates. - Jobs would get stuck in the queue and wouldn't print until you enabled the queue. - The lp and lpr commands now catch SIGHUP and SIGINTR. - The lp and lpr commands now use sigaction or sigset when available. - CUPS library updates for WIN32/OS-2 CHANGES IN CUPS v1.0.3 - Documentation updates. - The lpq man page was missing. - The configure script was not properly detecting the image libraries. - The top-level makefile was calling "make" instead of "$(MAKE)". - PostScript filter fixes for number-up, OutputOrder, and %Trailer. - The imagetops filter didn't end the base-85 encoding properly if the image data was not a multiple of 4 bytes in length. - The imagetoraster filter didn't generate good banded RGB or CMY data (was dividing the line width by 4 instead of 3...) - The imagetoraster filter now records the bounding box of the image on the page. - The CUPS image library cache code wasn't working as designed; images larger than the maximum RIP cache would eventually thrash using the same cache tile. - The CUPS image library TIFF loading code didn't handle unknown resolution units properly; the fixed code uses a default resolution of 128 PPI. - cupsGetClasses() and cupsGetPrinters() did not free existing strings if they ran out of memory. - The scheduler logs incorrectly contained 3 digits for the timezone offset instead of 4. - The scheduler now does a lookup for the default user and group ID; the previous hardcoded values caused problems with the LPD backend. - The cancel-job operation now allows any user in the system group to cancel any job. - The cancel-job operation stopped the print queue if the job was being printed. - Now only stop printers if the backend fails. If the filter fails then the failure is noted in the error_log and printing continues with the next file in the queue. - Now log whether a filter fails because of a signal or because it returned a non-zero exit status. - The root user now always passes the system group test. - Printers with an interface script and remote printers and classes didn't have a printer-make-and-model attribute. - Added logging of lost/timed-out remote printers. - The HP-GL/2 filter was scaling the pen width twice. - Updated the HP-GL/2 filter to use a single SP (Set Pen) procedure. This makes the output smaller and is more appropriate since the filter keeps track of the pen states already. - The scheduler didn't handle passwords with spaces. - The IPP backend now does multiple copies and retries if the destination server requires it (e.g. HP JetDirect.) - The disable command didn't implement the "-c" option (cancel all jobs.) - Changed the CMYK generation function for the image file and PostScript RIPs. - The lp command didn't support the "-h" option as documented. - The AppSocket, IPP, and LPD backends now retry on all network errors. This should prevent stopped queues caused by a printer being disconnected from the network or powered off. - The scheduler now restarts a job if the corresponding printer is modified. - The image RIPs now rotate the image if needed to fit on the page. CHANGES IN CUPS v1.0.2 - The HP-GL/2 filter didn't always scale the output correctly. - The HP-GL/2 filter now supports changing the page size automatically when the "fitplot" option is not used. - The cancel-job operation was expecting a resource name of the form "/job/#" instead of "/jobs/#"; this prevented the cancel and lprm commands from working. - The backends didn't log pages when files were printed using the "-oraw" option. - The authorization code did not work with the Slackware long shadow password package because its crypt() can return NULL. - The chunking code didn't work for reading the response of a POST request. - cupsGetPPD() now does authentication as needed. - The N-up code in the PostScript filter didn't work with some printers (grestoreall would restore the default blank page and device settings). - The N-up code in the PostScript filter didn't scale the pages to fit within the imageable area of the page. - Wasn't doing an fchown() on the request files. This caused problems when the default root account group and CUPS group were not the same. CHANGES IN CUPS v1.0.1 - Documentation updates. - Fixed a bunch of possible buffer-overflow conditions. - The scheduler now supports authentication using PAM. - Updated the Italian message file. - httpEncode64() didn't add an extra "=" if there was only one byte in the last three-byte group. - Now drop any trailing character set from the locale string (e.g. "en_US.ISO_8859-1" becomes "en_US") - Fixed "timezone" vs "tm_gmtoff" usage for BSD-based operating systems. - Updated IPP security so that "get" operations can be done from any resource name; this allows the CGIs to work with printer authentication enabled so long as authentication isn't turned on for the whole "site". - The IPP code didn't properly handle the "unsupported" group; this caused problems with the HP JetDirect since it doesn't seem to support the "copies" attribute. - The HTTP chunking code was missing a CR LF pair at the end of a 0-length chunk. - The httpSeparate() function didn't handle embedded usernames and passwords in the URI properly. - Doing "lpadmin -p printer -E" didn't restart printing if there were pending jobs. - The cancel-job operation now requires either a requesting-user-name attribute or an authenticated username. - The add-printer code did not report errors if the interface script or PPD file could not be renamed. - Request files are now created without world read permissions. - Added a cupsLastError() function to the CUPS API to retrieve the IPP error code from the last request. - Options are now case-insensitive. - The lpq command now provides 10 characters for the username instead of the original (Berkeley standard) 7. - The cancel command needed a local CUPS server to work (or the appropriate ServerName in cupsd.conf) - The cancel and lprm commands didn't report the IPP error if the job could not be cancelled. - The lp and lpr commands didn't intercept SIGTERM to remove temporary files when printing from stdin. - The lp and lpr commands didn't report the IPP error if the job could not be printed. cups-2.2.7/CHANGES-1.1.txt000664 000765 000024 00000446735 13255074424 015304 0ustar00msweetstaff000000 000000 CHANGES-1.1.txt --------------- CHANGES IN CUPS V1.1.23 - Updated the Spanish man pages (STR #1041) - The lpstat man page contained a typo (STR #1040) - The scheduler's is_path_absolute() code could cause a DoS (STR #1042) - The scheduler's device loading code used the wrong size limits for the make/model and info parameters (STR #1035) - The PNG loading code did not use a "long unsigned integer" format specifier for the width and height (STR #1032) - The web interface only showed the first 4 or 8 characters of "{variable-name}" for undefined template variables (STR #1031) - The hpgltops filter did not handle a common PCL command to enter HP-GL/2 mode (STR #1037) CHANGES IN CUPS V1.1.23rc1 - The lpr man page did not document the "-U" option (STR #998) - The scheduler no longer sends the page-set option when printing banner pages (STR #995) - Fixed a debug message in the imagetops filter (STR #1012) - The lprm man page listed the "-" option in the wrong order (STR #911) - The hpgltops filter contained two buffer overflows that could potentially allow remote access to the "lp" account (STR #1024) - The lppasswd command did not protect against file descriptor or ulimit attacks (STR #1023) - The "lpc status" command used the wrong resource path when querying the list of printers and jobs, causing unnecessary authentication requests (STR #1018) - The httpWait() function did not handle signal interruptions (STR #1020) - The USB backend used the wrong size status variable when checking the printer status (STR #1017) - The scheduler did not delete classes from other classes or implicit classes, which could cause a crash (STR #1015) - The IPP backend now logs the remote print job ID at log level NOTICE instead of INFO (so it shows up in the error_log file...) CHANGES IN CUPS V1.1.22 - The lpstat man page incorrectly listed the "-s" option as using the equivalent of the "-p" option to list the printers; it uses the "-v" option to list the printers (STR #986) - Now allow 0-length reads in the CUPS file API (STR #985) - cupsDoFileRequest() now sets cupsLastError() to IPP_ERROR on network errors (STR #953) - The pdftops filter didn't scale small pages up to the output page size when the fitplot option was used (STR #984) - Fixed the ipptest program usage message (STR #959) - Added Spanish man pages (STR #963) - Fixed the order of comparisons in the client.conf reading code (STR #971) - cupsLangGet() incorrectly set the current locale (STR #970) CHANGES IN CUPS V1.1.22rc2 - The pdftops filter didn't check the range of all integer attributes (STR #972) - Documentation corrections (STR #944, STR #946) - Also sanitize device URI in argv[0] (STR #933) - cupsRasterReadHeader() didn't swap bytes for the numeric fields properly (STR #930) CHANGES IN CUPS V1.1.22rc1 - Now sanitize the device URI that is reported in the error_log file (STR #920) - Fixed some memory and file descriptor leaks in the job dispatch code (STR #921) - Deleting a printer could cause a crash with browsing enabled (STR #865, STR #881, STR #928) - Browsing would turn off if the scheduler got an EAGAIN error (STR #924) - The mime.types file didn't recognize PostScript as a PJL language name (STR #925) CHANGES IN CUPS V1.1.21 - The scheduler did not separate Digest authentication parameters with commas (STR #882) - Fixed some problems with image printing to custom page sizes (STR #891) - Removed the remaining scheduler code that did not use the "close-on-exec" file descriptor flag to speed up program invocations (STR #890) - The "lpr -r" command removed the print file even if it was not printed. It now only removes the file if the job is successfully created (STR #886) - Revamped the custom page size orientation fix (STR #127) - The lp, lpq, lpr, and lpstat commands now report when an environment variable is pointing to a non-existent printer instead of just saying "no default destination" (STR #879) - Queue names with 2 periods (e.g. "printer..2") were not supported (STR #866) CHANGES IN CUPS V1.1.21rc2 - Fixed a denial-of-service bug in the CUPS browse protocol support (STR #863) - The scheduler used a select() timeout of INT_MAX seconds when there was nothing to do, which doesn't work on IRIX (STR #864) - Updated the cupsaddsmb program to use the new Windows 2000 PostScript drivers instead of the Windows NT printer drivers (STR #390) - The gziptoany filter did not produce copies for raw print jobs (STR #808) - The cupsLangGet() function now uses nl_langinfo(), when available, to get the current encoding (STR #856) - Added a ReloadTimeout directive to control how long the scheduler waits for jobs to complete before restarting the scheduler (STR #861) - Added a note to the default cupsd.conf file which mentions that you must allow connections from localhost for the command-line and web interfaces to work (STR #850) - The IPP backend incorrectly used the local port when communicating with a remote server; this caused problems with some custom configurations (STR #852) - The cups-lpd mini-daemon wasn't using the right default banner option (STR #851) - Updated the new httpDecode64_2() and httpEncode64_2() functions to handle arbitrary binary data, not just text (STR #860) - String options with quotes in their values were not quoted properly by the scheduler (STR #839) - Configure script changes for GNU/Hurd (STR #838) - The lppasswd program was not installed properly by GNU install when the installer was not root (STR #836) - Updated the cups-lpd man page (STR #843) - Fixed a typo in the cupsd man page (STR #833) - The USB backend now defaults to using the newer /dev/usb/lpN filenames; this helps on systems which use the devfs filesystem type on Linux (STR #818) - The config.h file did not define the HAVE_USERSEC_H constant when the configure script detected the usersec.h header file. This caused authentication errors on AIX (STR #832) - The lp and lpr commands now report the temporary filename and error if they are unable to create a temporary file (STR #812) - Added ServerTokens directive to control the Server header in HTTP responses (STR #792) - Added new httpDecode64_2(), httpEncode64_2(), and httpSeparate2() functions which offer buffer size arguments (STR #797) - The cupsGetFile() and cupsPutFile() code did not support CDSA or GNUTLS (STR #794) - The httpSeparate() function did not decode all character escapes (STR #795) - The cupstestppd program now checks for invalid Duplex option choices and fails PPD files that use non-standard values (STR #791) - Updated the printer name error message to indicate that spaces are not allowed (STR #675) - The scheduler didn't handle HTTP GET form data properly (STR #744) - The pstops filter now makes sure that the prolog code is sent before the setup code (STR #776) - The pstops filter now handles print files that incorrectly start @PJL commands without a language escape (STR #734) - Miscellaneous build fixes for NetBSD (STR #788) - Added support for quoted system group names (STR #784) - Added "version" option to IPP backend to workaround serious bug in Linksys's IPP implementation (STR #767) - Added Spanish translation of web interface (STR #772, STR #802) - The LPD backend now uses geteuid() instead of getuid() when it is available (STR #752) - The IPP backend did not report the printer state if the wait option was set to "no" (STR #761) - The printer state was not updated for "STATE: foo,bar" messages (STR #745) - Added new CUPS API convenience functions which accept a HTTP connection to eliminate extra username/password prompts. This resolves a previous authentication caching issue (STR #729, STR #743) - The scheduler did not correctly throttle the browse broadcasts, resulting in missing printers on client machines (STR #754) - The scheduler did not pass the correct CUPS_ENCRYPTION setting to CGI programs which caused problems on systems which used non-standard encryption settings (STR #773) - The lpq command showed 11st, 12nd, and 13rd instead of 11th, 12th, and 13th for the rank (STR #769) - "make install" didn't work on some platforms due to an error in the man page makefiles (STR #775) - Changed some calls to snprintf() in the scheduler to SetStringf() (STR #740) CHANGES IN CUPS V1.1.21rc1 - Fixed some "type-punned" warnings produced by GCC when -fstrict-aliasing is specified (STR #679) - The PDF filter incorrectly calculated the bounding box of a page (STR #682) - The IPP backend did not use SSL when printing over a port other than 443 (STR #730) - The scheduler could crash when processing a Limit or LimitExcept directive (STR #728) - The lpq, lpr, and lp commands did not differentiate between the server being unresponsive and the lack of a default printer (STR #728) - The PAM checks in the configure script did not stop after the first match (STR #728) - The cups-config man page was incorrectly placed in section 3 (STR #728) - The cupstestppd utility did not show a warning message when a PPD file indicated BCP protocol support with PJL (STR #720) - The scheduler did not return the correct exit code when startup failed (STR #718) - The cupsRasterReadPixels() function checked for EAGAIN, which caused problems on FreeBSD (STR #723) - The cupsGetDests() function did not use the current encryption setting (STR #653) - The scheduler did not properly parse name-based BrowseRelay directives in the cupsd.conf file (STR #711) - The IPP backend now supports the following options in the device URI: encryption, waitjob, and waitprinter (STR #699) - The parallel, serial, socket, and USB backends did not return a non-zero exit status when a job failed to print in the middle of sending it (STR #715) - Location directives in the cupsd.conf file were case-sensitive for printer and class names, so queue-specific access control was not reliable (STR #700) - cupsDoFileRequest() did not handle HTTP continue status messages in all cases, causing sporatic problems with IPP printers from some vendors (STR #716) - The rastertodymo driver now supports the Zebra ZPL language (STR #713) - The test suite no longer generates a printcap file, which caused problems when testing as the root user (STR #693) - The scheduler now updates the accepting state of an implicit class based upon the accepting state of its member printers (STR #697) - The pstops filter didn't properly skip leading PJL commands (STR #664) - The reinterpret_cast keyword was not highlighted when printing C/C++ source files in prettyprint mode (STR #694) - Fixed a segfault problem with some of the client programs (STR #668) - When using RunAsUser, the scheduler did not correctly set the ownership of the log files, preventing log file rotation (STR #686) - The image filters did not correctly load 1-bit PNG files (STR #687) - The pdftops filter did not show all annotation objects in a PDF file (STR #674) - The pdftops filter did not print the contents of textual form elements, making it impossible to print a filled-in form (STR #663) - Integrated the MacOS X/Darwin USB backend into the CUPS baseline (STR #661) - The USB backend incorrectly reported "media tray empty" (STR #660) - The scheduler did not use a case-insensitive comparison when checking for group membership, which caused problems with Win9x clients printing via SAMBA (STR #647) - The scheduler did not report the addresses associated with certain network errors, making troubleshooting difficult (STR #648, #649) - The cupstestppd program did not allow a default choice of "Unknown" as required by the PPD spec (STR #651) - The select() buffers are now allocated to be at least as large as sizeof(fd_set) (STR #639) - The LPD backend now supports overriding the print job username via the device URI (STR #631) - The scheduler did not handle an unknown MIME type when checking for a CGI script (STR #603) - Added a timeout optimization to the scheduler's main loop to allow CUPS to sleep more of the time (STR #629) - The USB backend now retries printing to devices of the form "usb://make/model" if any USB port shows up as "busy" (STR #617) - The httpGetHostByName() function did not range check IP address values (STR #608) - The httpUpdate() function could return HTTP_ERROR instead of the HTTP status if the server closed the connection before the client received the whole response (STR #611) - The LPD mini-daemon did not allow the administrator to force banner pages on (STR #605) - Added PAM support for Darwin/MacOS X (STR #550) - The web interface now provides a "Set As Default" button to set the default printer or class on a server (STR #577) - The HTTP authentication cache was broken (STR #517) - The cupstestppd utility now fails PPD files that have a DefaultOption keyword for a non-existance option name (STR #476) - Optimized the scanning of new PPD files on scheduler startup (STR #424) - The EPM list file did not include the bin, lib, or sbin directories (STR #598) - The web interface did not redirect administration tasks to the primary server for a class or printer (STR #491, #652) - The cups-lpd mini-daemon did not reject print jobs to queues that were rejecting new print jobs (STR #515) - Some calls to the ctype functions did not account for platforms that use a signed char type by default (STR #518) - The scheduler could use excess amounts of CPU if a CGI program was sending data faster than the client could take it (STR #595) - Updated the Ghostscript 8.x integration stuff (STR #484) - The lpd backend used a source port of 732 by default, which is outside of the range defined by RFC 1179; also added a new (default) "reserve=any" option for any priviledged port from 1 to 1023 (STR #474) - The scheduler did not check for a valid Listen/Port configuration (STR #499) - The cupsPrintFiles() function did not always set the last IPP error message (STR #538) - The pstops filter did not write the PostScript header line if the file began with a PJL escape sequence (STR #574) - The printer-is-accepting-jobs status of remote printers was not sent to clients via browsing or polling (STR #571) - Browse packets did not indicate whether a printer was accepting or rejecting jobs. - The web interface did not show the printer state history information (STR #592) - The rastertoepson filter would crash under certain cirsumstances (STR #583) - The USB backend did not handle serial numbers using the (incorrect) SN keyword and did not terminate the make and model name strings properly (STR #471, STR #588) - The USB backend did not build on Solaris x86 (STR #585) - The cupsDoAuthentication() function did not use the method name for Digest authentication (STR #584) - The scheduler could crash if a print job could not be printed and the PreserveJobHistory option was turned off (STR #535) - cups-lpd now logs the temporary filenames that could not be opened in order to make troubleshooting easier (STR #565) - cupsGetJobs() now returns -1 on error (STR #569) - Added localization for Belarusian (STR #575) - The LPD backend used the full length of the hostname when creating the data and control filenames, which causes problems with older systems that can't handle long filenames (STR #560) - The scheduler did not refresh the common printer data after a fast reload; this prevented banner and other information from being updated (STR #562) - The scheduler did not send common or history data to the client when processing a CUPS-Get-Default request (STR #559) - The httpFlush() function did not always flush the remaining response data in requests (STR #558) - The scheduler could complete a job before it collected the exit status from all filters and the backend (STR #448) - The PPD conformance tests did not catch group translation strings that exceeded the maximum allowed size (STR #454) - Updated the client code in the scheduler to close the client connection on errors rather than shutting down the receive end of the socket; this caused resource problems on some systems (STR #434) - cups-polld didn't compile on Tru64 5.1B (STR #436) - "lpc stat" crashed if the device URI was empty (STR #548) - The scheduler did not compile without zlib (STR #433) - std:floor() cast needed on IRIX 6.5 with SGI C++ compiler (STR #497) - cupsRasterReadPixels() and cupsRasterWritePixels() did not handle EAGAIN and EINTR properly (STR #473) - RequiresPageRegion should not be consulted for Manual Feed (STR #514) - International characters were not substituted in banner files properly (STR #468) - Updated pdftops to Xpdf 2.03 code to fix printing bugs (STR #470) - The Digest authentication code did not include the (required) "uri" attribute in the Authorization response, preventing interoperation with Apache (STR #408) - The web interface could lockup when displaying certain URLs (STR #459) - The PostScript filters now convert underscores ("_") to spaces for custom classification names (STR #555) CHANGES IN CUPS V1.1.20 - The pstops filter didn't properly handle collated, duplexed copies of documents with an odd number of pages on printers that did not do their own collated copies (STR #389) - Tru64 doesn't define a prototype for hstrerror() (STR #430) - Updated the pdftops filter to use the annotation flags instead of the subtype to determine whether to print an annotation (STR #425) - The French web interface localization did not use absolute paths for the navigation bar (STR #428) - The CUPS test suite did not undefine the PRINTER and LPDEST environment variables. This could lead to bogus test results (STR #380) - The cupsLangDefault() function now works if you don't have the base OS localization installed (STR #418) - The pdftops filter no longer needs to create temporary files with tmpnam (STR #406) - The HTTP code did not use a case-insensitive comparison when checking for the Basic authentication method (STR #407) - The httpEncode() function always added a trailing "=" character, which is not required by the Base64 encoding specification (STR #407) - The signal handlers did not need to call sigset(); this caused a recursion problem on some versions of IRIX (STR #422) - Moved the scheduler termination code into the mainline to be consistent with the way other signals are handled (STR #423) - The cupsaddsmb program didn't export the new CUPS driver for Windows properly (STR #390) - The ppdOpen() functions did not issue an error when a translation string exceeded the maximum allowed by the Adobe PPD specification (STR #399) - The default landscape orientation was not the same as that defined in the PPD file (STR #397) - Updated the pstoraster patch files and CUPS driver to work with Ghostscript 8 (STR #402) - The hpgltops filter did not skip PJL commands (STR #379) CHANGES IN CUPS V1.1.20rc6 - "lp -i jobid -H restart" would often return an error even though the job restarted successfully (STR #362) - The scheduler did not check for invalid allow/deny addresses such as "11.22.33.44/24". It now masks off the extra address bits and logs a warning message in the error_log file (STR #337) - The cupstestppd utility now checks for missing ImageableArea and PaperDimension attributes for each defined PageSize (STR #365) - The IPP code did not wait for a reply indefinitely on HTTP connections in "blocking" mode (STR #377) - The web interfaces did not rewrite the default printer URI properly (STR #299 and #369) - The LPD backend passed the C and L commands in the wrong order (STR #378) - The Dymo label printer driver did not set the label length properly (STR #373) - The scheduler did not support job IDs higher than 99999 (STR #371) - The Visual C++ project files did not work (STR #366) - The scheduler's cupsLangSeek() function did not reset the "EOF" flag, preventing compressed files from being typed properly in some cases (STR #368) - The cupsLangGet() cache was only used if the locale name provided an explicit character set name (STR #354) - The CUPS API convenience functions did not call cupsLangFree() when they were done with the localization data (STR #354) - The scheduler did not return the job-hold-until-supported or job-hold-until-default attributes (STR #356) - The cupsaddsmb program did not support the new CUPS driver for Windows (STR #357) CHANGES IN CUPS V1.1.20rc5 - The scheduler did not initialize the browse socket file descriptor properly when only SLP browsing was enabled (STR #259) - The scheduler accessed the job attributes before they were set (STR #347, fix to STR #335) - The cupsCancelJob() function did not return 0 when the job could not be canceled (STR #340) CHANGES IN CUPS V1.1.20rc4 - The scheduler did not move the incoming job attributes in the operation group to the job group (STR #335) - The cupsDoFileRequest() function did not check for an early HTTP response while sending the file (STR #314) - The web interfaces did not quote #, ?, or . in printer names, which caused some problems with the generated URLs (STR #320) - CUPS couldn't be completely compiled with the -dDEBUG option (STR #331) CHANGES IN CUPS V1.1.20rc3 - More SLP changes (STR #259) - Revamped the child signal handling code to completely avoid deadlock issues on Solaris (STR #325) - The lpadmin command displayed an incorrect error message when the "-u" option was provided with no arguments (STR #313) - The web admin interface did not display an error message if the PPD file could not be loaded (STR #308) - The ppdEmit() functions did not use the correct orientation value position for custom page sizes (STR #292) CHANGES IN CUPS V1.1.20rc2 - The serial backend set the IXANY option on the port for XON/XOFF flow control; this caused problems with printers that returned status info but were not ready for more print data (STR #287) - The scheduler didn't support scripted index files (index.php, index.pl, etc. - STR #290) - The scheduler did not correctly localize script files with "GET" variables (STR #268) - Changes in job classification are now logged (STR #289) - Fixed a few more SLP-related bugs (STR #259) - Updated the user/group configure checks for MacOS X 10.3 (STR #270) - Fixed an offset bug in the PDF filter (STR #284) - The cupsDoRequest() and cupsDoFileRequest() functions did not map several HTTP status codes to their IPP counterparts. This made detecting certain conditions very difficult (STR #277) - Config, spool, and status files are now owned by the scheduler user (usually root) with read permission for the filter group (STR #283) - The HP-GL/2 filter did not support the SI command, some values for the AD and SD commands, and did not rotate labels properly via the DI command (STR #282) - The fax support did not update/set the job-hold-until attribute when a fax job fails (STR #269) - The cupsLangGet() function didn't support locales of the form "ll.charset" (STR #271) - The scheduler did not use the charset when getting the language localization for a request; this caused extra disk IO for every request (STR #271) - The scheduler did not support requests with more than one language specified (STR #267) CHANGES IN CUPS V1.1.20rc1 - The scheduler now waits up to 60 seconds before restarting to allow active jobs to complete printing and pending requests to be processed (STR #226) - The web interface did not work on systems where time_t is 64 bits (STR #262) - Added backend tweeks and content-length check from Red Hat (STR #253) - The USB backend now uses the 8255 constants instead of the standard constants when reporting printer status bits on Linux (STR #254) - Added new cupsDoAuthentication(), cupsGetFd(), cupsGetFile(), cupsPutFd(), and cupsPutFile() functions to the CUPS API (STR #112) - The PDF filter always scaled and offset pages; this caused problems under MacOS X, so now the "fitplot" option controls whether PDF files are scaled to fit within the printable area of the page (STR #250) - The LPD backend did not support the port number in a URI (STR #247) - Some filters didn't properly support boolean options (STR #249) - Landscape PDF files were not always offset by the correct amount when rotating (STR #243) - The scheduler could hang in a call to localtime() when logging messages from the signal handler (STR #242) - The PDF filter no longer prints form widgets; this duplicates the behavior of Acrobat Reader (STR #241) - cupsGetPPD() didn't handle a late termination of a HTTP connection with the server (STR #220) - ppdOpen() did not correctly check for "*PPD-Adobe-4." on the first line of a PPD file. This caused incorrect PASS results for some PPD files (STR #233) - cupsEncodeOptions() did not allow boolean options to use "yes" and "on" for true values (STR #227) - The pstops filter only sent the TBCP exit sequence if it was defined in the JCLEnd attribute in the PPD file (STR #224) - Support for more than 1024 files was broken on Solaris 9 (STR #217) - The setgroups() calls now pass in 1 group (the configured group) instead of 0 for compatibility with BSD and Darwin (STR #213) - The scheduler's built-in broadcast throttling was ineffective since incoming packets would cause the next group of outgoing packets to be sent immediately rather than waiting for the next time slot (STR #211) - Added a new ppdSetConformance() function to set the conformance requirements for PPD files. Currently only two levels are defined, PPD_CONFORM_RELAXED and PPD_CONFORM_STRICT, and the default is the relaxed level (STR #212) - The IPP backend did not correctly execute the pictwpstops filter on OSX (STR #210) - The LPD backend did not set the banner class when the "banner=yes" option was specified in the device URI (STR #209) - The imagetoraster filter did not support all of the page device attributes (STR #208) - The pdftops filter incorrectly auto-rotated pages when the user already had specified the proper orientation (STR #207) - Fixed AIX shared library support (STR #201) - Added support for live testing with Valgrind (STR #193) - The CGI programs now collect the list of needed attributes for the class, job, and printer template files (STR #192) - The scheduler now passes the first port that is bound to the local loopback or "any" addresses to the CGI programs rather than the port that the browser connected to (STR #103) - The cupstestppd program now checks for bad JobPatchFile attributes and incorrect versions of the Manufacturer attribute for HP printers (STR #155) - The filter makefile incorrectly installed libcupsimage.a in the filter directory (STR #180) - The scheduler did not verify that the job history files define the job-priority and job-originating-user-name attributes (STR #178) - The pstops filter didn't handle poorly-formed binary PostScript files that had CTRL-D's in them (STR #156) - The ppdOpen*() and cupsLangGet() functions did not make a copy of the old locale strings when using the POSIX locale when reading files, which apparently caused problems with some implementations of the standard C library. (STR #159) - The pdftops filter did not work properly with some embedded Type1C fonts (STR #177) - Updated the pdftops filter to be based upon Xpdf 2.02pl1 (STR #191) - The scheduler did not reset the group list when running CGI and filter processes (STR #185) - The scheduler no longer calls malloc and free from the signal handlers (STR #190) - The USB backend now uses the manufacturer and model strings if the description string is not available (STR #174) - The ppdOpen functions still supported the VariablePaperSize attribute, which was removed in v4.0 of the PPD spec. This caused problems with PPD files that relocated the PageSize option to a non-standard group (STR #158) - The cups.list file referenced MAN1EXT, MAN3EXT, and MAN5EXT, but none of those were actually defined (STR #147) - Chunked requests could cause a Denial of Service if the connection is terminated before the first byte of chunk data is sent/received (STR #143) - Printers with special characters in their names were not accessible from the web interface (STR #120) - The lpstat command now shows the correct interface script or PPD file, if any, for a print queue (STR #89) - The lpstat command now shows the printer-state-message and printer-state-reasons attributes whenever they are not blank (STR #152) - The French and German option-conflict.tmpl template files did not get installed (STR #148) - The cups.list.in file did not work when compiling without shared libraries (STR #149) - The DSOFLAGS included the LDFLAGS, which causes problems on at least HP-UX (STR #150) - The fax printer support did not keep track of the fax capability bit (STR #144) - The appleLangDefault() function could leak a small amount of memory (STR #145) - The ppdOpen() functions now mirror all normal attributes to the attribute list; previously only certain unassigned attributes would be added (STR #139) - The ppdEmitJCL() function wrote JCL commands to stdout instead of the passed file pointer (STR #142) - The httpGets() function could, in certain states, block waiting for data (STR #132) - The cupsEmitJCL() function not outputs an empty @PJL command after the PJL language escape to work around bugs in certain PJL implementations (STR #131) - The cupsEmit*() functions didn't set the orientation value properly (STR #127) - The cups.spec file didn't list the rc2.d init directory or the cupstestppd file (STR #134) CHANGES IN CUPS V1.1.19 - The GNU TLS code incorrectly used gnutls_check_pending() instead of gnutls_record_check_pending() (STR #128) - The ppdEmit() functions output "PageSize Custom" instead of "CustomPageSize True" in the DSC comments. Also, the custom page size code did not use the ParamCustomPageSize attributes (STR #127) - The cupstestppd command did not list the conflicting options (STR #123) - The lpq command did not ensure that there was whitespace between the fields in the job listing (STR #117) - The German web templates had errors (STR #119) - The configure script didn't specify the static libraries properly when configuring with the --disable-shared option (STR #104) - The cups.list file used file dependencies for package formats other than portable, RPM, and Debian (STR #98) - cupsLangGet() didn't use its language cache (STR #97) - "lpq -P" would segfault instead of showing a usage message (STR #94) - Fixed compiler warnings in pdftops filter (STR #96) CHANGES IN CUPS V1.1.19rc5 - Jobs with banner pages that were printed to implicit classes would get double banner pages for each file/banner in the job (STR #68) - The mime.convs file was missing the filter definition for Windows BMP (image/x-bitmap) files (STR #85) - The scheduler allowed some READ-ONLY job attributes to be set, which could cause the scheduler to fail on the next restart (STR #82) - The lp and lpr commands did not report when the scheduler was not responding; instead, the user would incorrectly see a "no default destination" error (STR #70) - cupsLangGet() could fail on OSX due to a corrupt language preference (STR #78) - Added more checks for HTTP request timeouts. - The scheduler dropped the first non-alpha character after an open brace when doing attribute substitutions in banner pages (STR #77) - The scheduler child might send SIGUSR1 to the parent before the signal handler was installed; this didn't prevent the scheduler from starting but produced an annoying error message (STR #45) CHANGES IN CUPS V1.1.19rc4 - The lp command did not accept "-" for printing from the standard input as required by POSIX 1003.1 (STR #59) - Added the job-originating-host-name information for the page_log file documentation in the SAM (STR #31) - The German web interface templates did not use the right paths for job operations (STR #54) - The scheduler would consume all available CPU if started with a pending job in the queue (STR #35) - The polling daemon allocated an extra localization buffer but did not free it, causing cups-polld to eventually use all available memory (STR #40) CHANGES IN CUPS V1.1.19rc3 - The scheduler could get in an infinite loop cancelling jobs using "cancel -u user dest" (STR #48) - The "cancel -u user" command did nothing (it should cancel all jobs on all printers owned by the named user - STR #48) - The scheduler would write 0-length job control files (STR #46) - Updated the French man pages (translation provided by Gilles QUERRET) - The scheduler would delete all printers from printers.conf if a job was active when a HUP signal was handled (STR #47) - The cups-polld program would leak memory if it was unable to send browse packets to the loopback interface (STR #40) - The scheduler did not put the job-originating-host-name attribute in the job attributes group. - The text filter did not default to wrapping text as defined by the IPP implementation document. - Scan backends first, PPDs second (STR #37) - Updated the Netatalk documentation in the SAM (STR #38 and #39) - The test suite sent text files to a non-PS print queue, which requires ESP Ghostscript (provided separately). Now send the JPEG test file (STR #33) - The test suite did not show the estimated disk space requirements (STR #33) - The test suite did not set the MaxLogSize directive to 0 to prevent log file rotation (STR #33) - The test suite still setup the old CUPS Ghostscript symlinks (STR #33) - The pstops filter did not report the correct number of copies for the page_log file when printing collated copies to a printer that doesn't support them in hardware (STR #32) - cupsLangGet() needs to set the CTYPE locale to "C" (POSIX) to avoid erroneous tolower/toupper values (fix suggested by Bjoern Jacke) - Fixed a typo in the cups.list.in file. - Updated all of the Western European locales to default to ISO-8859-15 (for Euro support, suggested by Bjoern Jacke) - Updated the German message catalog (update provided by Bjoern Jacke) CHANGES IN CUPS V1.1.19rc2 - cupsLangGet() now sets the encoding field based on the trailing charset in the locale name, and doesn't look for a message catalog in a specific locale.charset directory. This fixes STR #26 and is more in line with the CUPS 1.2 implementation. - The configure script now aborts if the "ar" command or compilers cannot be found. - The static cupsimage library was not built by default. - The path for the "ln" command was hardcoded in Makedefs.in instead of being checked at configure time (STR #28). - Banner pages containing unescaped { characters would not work. - The printer-state-time collection attribute was encoded as an enumeration instead of an integer. - The printer-is-accepting-jobs collection attribute was was not added to the collection value. - The printer-state-sequence-number collection attribute was not added to the collection value. - Fixed typo and const mismatch in IPP backend. - Updated the man pages for the new configuration directives. - Updated the SAM for MacOS 10.2, the CUPS drivers for windows, the available LPD backend options, and the new configuration directives. - The imagetops filter didn't position images properly on the page (STR #18) - The configure script didn't add CPPFLAGS to the compiler options or LDFLAGS to the DSO options (STR #13) - The scheduler would try to write a debug log message when starting a job that contained a NULL string. Since not all versions of snprintf() support NULL string pointers this caused some problems (STR #20) - The testipp program now supports reading of IPP message files such as those used for the job history in /var/spool/cups. CHANGES IN CUPS V1.1.19rc1 - Added CUPS support files for Java, Perl, and PHP (located in the "scripting" subdirectory...) - The scheduler now supports fast-reloads of the cupsd.conf file when it is updated via HTTP. - The scheduler always changed the ownership of log files; it now only does so if they are not in the /dev directory (i.e. don't want to change the ownership and permissions of /dev/null...) - Added libpaper support (patch from Jeff Licquia) - Added a new istring() rule for MIME types files that does a case-insensitive comparison of strings. - The cups-lpd mini-daemon now sends jobs to the default queue when an empty queue name (or "lp" and there is no "lp" queue) is sent. - The scheduler now supports fax queues identified by a "*cupsFax: True" attribute in the PPD file. When a job can't be sent, it is held for 5 minutes by default while other jobs are attempted. The FaxRetryLimit and FaxRetryInterval directives control the number of retries and the time between retries. - The scheduler now preserves the default options of PPD files when modifying/upgrading an existing PPD file. When installing a new printer, the scheduler sets the default media size to Letter or A4 as appropriate for your locale. - The scheduler no longer limits the number of BrowseAddress, BrowsePoll, BrowseRelay, Listen, Port, SSLListen, and SSLPort directives to 10. - The scheduler now supports print files that have been compressed using gzip. - The scheduler used the stdio functions to read any job ticket information in a PostScript print job. Since some platforms limit the number of stdio files to 256, job ticket information was ignored when the server had a large number of clients connected to the system. - Filters and backends may now report the total number of pages ("PAGE: total NNN") to the scheduler. - The LPD backend now supports timeout and sanitize_title options (default to 300 and yes, respectively) and has some additional changes to reduce the chances of multiple copies being printed when only one copy was requested. - Fixed a polygon drawing bug in the HP-GL/2 filter. - Added a robots.txt file to the standard install to prevent search engines from indexing the CUPS server. - Added support for STATE: messages (printer-state-reasons), printer-state-history, and printer-state-time to the scheduler. - When using RunAsUser, the scheduler would initially start any previously queued (pending) jobs with RunAsUser disabled - all backends would be running as root. - If a backend failed for a printer, CUPS would incorrectly requeue the job for printing again. - Added support for IPP collections and files. - Added experimental support for generic CGI scripts and programs, Java, Perl, PHP, and Python to the scheduler. See the file "CGI.txt" for more information. - The CUPS API now supports HTTP cookies and the Expect: field. - The cancel command now correctly supports the "-u user" option to cancel all jobs for the named user. - The Purge-Jobs operation now supports the my-jobs boolean attribute and a new purge-jobs boolean attribute to control whether job history data is purged from the scheduler; the default is false for my-jobs and true for purge-jobs to match the original implementation. - The scheduler would not timeout printers when only using SLP browsing. - If the scheduler was unable to execute a filter, it would try to restart the job indefinitely until the filter could be executed. - When writing BSD printcap files, the scheduler now includes the rm and rp attributes, allowing the file to be exported to LPD clients. [Patch from Dominic Kubla] - The scheduler optimization to reference IPP attribute data instead of performing a full copy caused problems when the referenced data was deleted before it was sent. It now only references attributes that change only when the scheduler is restarted. The change also reduced the memory footprint of a printer object to 2k. - The scheduler now holds signals while logging messages to avoid potential deadlock issues when handling signals on Solaris 8. - The lpadmin command now allows printer access control by group name as well as user name. - "lpoptions -l" got in an infinite loop if no default printer was available. - The scheduler now logs the job-originating-host-name attribute in the page_log file, and uses "-" for any empty fields (patch from Dominik Kubla). - The pdftops filter now scales PDF pages within the printable area of the page. - The pstops filter didn't include the page-label and classification boxes when printing EPS or non- conformant PS files. - The imagetops filter didn't always correctly position the image on the page when printing in landscape orientation. - The ppdEmit() functions now support the RequiresPageRegion attribute when sending InputSlot and ManualFeed commands. - The PPD loading code now supports standard options outside of OpenUI/CloseUI as required by the PPD spec. - The cupstestppd program has been upgraded to provide a concise PASS/FAIL report, additional detailed conformance testing, and support for gzip'd PPD files. - The PPD loading code is now much more strict when loading a PPD file, and tracks more format errors. - The scheduler ignored child signals when gathering the list of available devices, when it should have been using the default signal handler. - The cupsEncodeOptions() function could encode an option with a NULL last string. - The socket backend could report the wrong number of backchannel bytes if an error occurred on the link. - The cups-polld program now only sleeps after getting all printers and classes. This allows for longer intervals without excessive delays before classes show up... - Added a new httpWait() function to support waiting for data for a specific number of milliseconds. - httpGets() now times out after 1 second on non-blocking HTTP connections. - The scheduler no longer accepts rangeOfInteger values that are out of order (e.g. 5-1) - The sides attribute was incorrectly sent as a name value; it is a keyword value. - The IPP backend now detects if the destination queue has gone away and reports an error. - The scheduler and HTTP API now allocate their select() sets to support larger numbers of clients on systems that support it. - The scheduler now sets the CFProcessPath environment variable under MacOS X. - The cupsLangDefault() function now uses the CoreFoundation localization API under MacOS X. - The httpSeparate() function didn't handle file URIs of the form "file:///path" properly. - The lpadmin command now supports a "protocol" option for specifying the binary communications protocol to use when printing binary PostScript data. - The scheduler did not properly parse the SystemGroup directive, so only the first group would be used. - Revamped how strings are stored in the scheduler, providing a substantial improvement in memory usage for systems with large numbers of printers. - The PostScript filter now supports binary PostScript files and files beginning with the PJL language escape sequence. - The PPD API now provides additional information from the PPD file. - The USB backend didn't compile on Solaris Intel. - The cupstestppd utility now supports the "-q" option (quiet) for use in scripts, etc. - Merged several weight-reducing changes into the CUPS baseline donated by Apple. - Added preliminary support for CDSA; patch provided by Apple. - Implicit classes are now created from identical printer classes on the network. - The lp command now supports a "-H restart" option to restart previously printed jobs. This functionality only works if you have enabled the PreserveJobFiles option. - The scheduler now supports URIs in HTTP request lines to conform to the HTTP/1.1 specification. - The time-at-xyz attributes were not recognized in banner files if prefixed by a question mark, e.g. "{?time-at-creation}". - Added support for pre-filtering application/pictwps files on MacOS clients before sending them to a server via IPP. - The scheduler now allows file:/dev/null device URIs even if FileDevices is set to No. - CUPS uses strerror() for hostname resolution errors, when it should have used hstrerror(). - The USB backend no longer tries to guess the serial number of a device from the USB devices file; this means that printers that don't report their serial numbers in the device ID string will not be individually selectable. - The pstops filter didn't handle page ranges properly when a page contained an embedded document. - Added a translation of the web interface to German. - When printing using the OutputOrder=Reverse option with duplexing, the output order is now truly reversed; the order of sub-pages when printing N-up is the same. - The pstops filter did not always output the extra blank page when printing a document with an odd number of pages with duplexing enabled. - The ippAddXYZ functions no longer allow the application to add less than 1 value. - Fixed a URL rewrite bug in the web interface - local access was sometimes redirected away from localhost... - The ppdOpen() functions could get in an infinite loop if the PPD file contained a keyword or text that was too large for the buffer. - Added preliminary support for GNU TLS; patch provided by Jeff Licquia. - Now timeout IPP attribute reads after 1 second inside an attribute definition. - Now timeout connections that have been shutdown (due to errors) after 30 seconds instead of the Timeout setting (300 seconds by default). This provides faster recovery from DoS attacks. - A denial-of-service attack warning message was being written to the log files by the scheduler for every detection. This caused a DoS of its own in some situations. The warning message is now written no more than once per minute. - Fixed the CIE colorspace support code in the image and PS RIPs. - The job-quota-period, job-page-limit, and job-k-limit attributes were not flagged as integers, so setting quotas would not work. - Added an additional response check in the scheduler to more quickly recover from denial-of-service attacks. - The cupstestppd file was incorrectly installed in the /usr/sbin directory instead of /usr/bin. - The EPM list file did not include the cupstestppd program or man page files. CHANGES IN CUPS V1.1.18 - Fixed a bug in the Set-Job-Attributes code in the scheduler that would cause it to crash or continuously write a job control file. - SECURITY FIX: The scheduler now provides a FileDevice directive to control whether new printers can be added using device URIs of the form "file:/filename". The default is to not allow printers with these device URIs. - The scheduler did not compute the cost of filters properly, nor did it choose a multi-filter solution with a lower cost than a single filter solution. - Now install CUPS PPD file test utility (cupstestppd) to support basic conformance testing of PPD files. - The scheduler now logs an error message when it sees a non-conforming PPD file. - Upgraded pdftops filter to Xpdf 2.01 with fixes for TrueType fonts. - Added a MaxClientsPerHost configuration directive to provide limited protection against Denial of Service attacks. - SECURITY FIX: Potential underflow/overflow bug in web interface. - SECURITY FIX: Race condition in certificate creation. - SECURITY FIX: Bad URIs in browse packets could be used to exploint the web interface underflow/overflow bug. - SECURITY FIX: Some types of Denial of Service attacks were not handled properly, so once the attack was over the scheduler did not close the connections immediately on all platforms. - SECURITY FIXES: Added integer overflow/underflow checks for all image formats. - The pstops filter didn't reset the showpage operator back to its original at the end of a job; this prevented the concatenation of documents (used primarily for CUPS 1.2...) - The cupsGetPPD() function didn't always set the cupsLastError() value when an error occurred. - The IPP media, output-bin, and sides attributes took precedence over the corresponding PPD options, which caused inconsistent behavior under MacOS X with some PPD files. - The cupsaddsmb utility specified the wrong number of arguments to the adddriver command when adding the Win9x PostScript drivers. - The web interface did not always report the correct error message. - The scheduler did not clear the POSIX signal action structure when waiting for the child to send it a SIGUSR1 signal; this could cause the signal handler not to be called properly, preventing the parent process from returning. CHANGES IN CUPS V1.1.17 - The "manual_copies" option did not work when the LPD backend had to retry a print job. - The image filters did not convert GIF images properly. - The RunAsUser option was incompatible with the new daemon-mode code in 1.1.16. - Fixed a problem with the Set-Job-Attributes and PostScript job ticket code in the scheduler - the "last" attribute pointer was never updated, which could cause the scheduler to crash when applying job ticket data. - Fixed a problem in the scheduler that caused it to continue processing HTTP requests on a connection after it was shutdown. - The scheduler now allows accounts authenticated via PAM to not have a corresponding UNIX account, but group membership still requires the account name to be listed in the UNIX group file(s)... - The scheduler used a fixed-size (16k) buffer for encoding job options for filters; it now dynamically allocates and expands the buffer as needed depending on the options that are sent in a job. - The pdftops filter didn't support all of the MacOS characters for MacRoman encoded fonts. - The cupsEncodeOptions() and cupsParseOptions() functions now conform to the grammer defined by the current draft of the PAPI specification. The main difference is that option=yes and option=no are no longer treated as boolean options. - The IPP backend didn't honor the encryption settings in /etc/cups/client.conf. - Fixed a potential bug in the HTTP code which was caused by servers sending the status line and newline(s) in separate packets. - User-defined classification strings are now printed verbatim - previously the classification box would be empty. - Re-added Spanish to the list of PPD languages that CUPS supports. - CUPS API library user and temp file updates for Windows. - The image filters did not properly handle grayscale printing of Sun Raster images. - The scheduler never reset the NumJobs variable before loading the job list (previously this only happened on a full start, so the problem was never apparent...) - The HTTP and IPP read/write code didn't handle EINTR (interrupted system call) errors. - When under high load, the scheduler could abort due to the wrong errno value after a select() call. This was caused by the child signal handler. - Added new load tests to the test target to verify that cupsd can handle hundreds of simultaneous jobs without error. - The Solaris USB backend now supports the new device URI syntax. - The ppdOpen*() functions now reset the numeric locale settings while loading a PPD file. - Fixed the libtool build rules. - The manpage make rules didn't use $(MAKE) and $(MFLAGS) for the language subdirectories. - Now set the LC_TIME locale category to get the properly localized time string. - Fixed a problem in the scheduler that would cause the web interface problems when adding, modifying, or configuring a printer or class. - The backends now ignore SIGPIPE so that failed job filters will not stop a print queue. - The lpstat command did not allow for destination lists ("lpstat -v printer1,printer2") - Fixed parsing of long filter status messages in the scheduler. - Added some startup performance enhancements to the scheduler so that the printer object information is regenerated fewer times and the MIME type database is not filled with lots of empty filters for raw/direct queues. - The LPD backend now sends the job title as the print filename. - Added support for variable sizes in the EPSON dot matrix printer drivers. This allows for pages as short as 1/2" (1 row of labels) and does not do an automatic form feed. - French translation updates. - The filters did not quote the page label string when embedding it in PostScript output. - The serial backend now enumerates serial ports under MacOS X. - The pdftops filter contained font rasterizer code that wasn't being used and that depended on X11. This code has been removed. CHANGES IN CUPS V1.1.16 - The cancel and lprm commands now both display an error message and return a non-zero exit status if an attempt is made to cancel a job on a non-existent printer. - The lpoptions command incorrectly complained if a request to delete a non-existent printer was made. - If the client.conf file defines an alternate server name, the "configure printer" action in the web interface might not work. - The lpstat command now supports a "-W" option so that you can display completed jobs as well as not-completed (pending) jobs. - The lp and lpr commands did not return an error when one or more files in a set of files for printing could not be printed. - The lp, lpadmin, and lpstat commands now consistently return with a non-zero exit status when an error occurs. - The scheduler would not accept print jobs sent to a stopped remote printer. - The texttops filter incorrectly converted the page numbers in the prettyprint header to double-byte characters when printing a non-Unicode text file. This caused an extra space to appear between each digit in the page number. - The scheduler did not use a case-insensitive comparison when adding filters for a printer. - Upgraded the pdftops filter to Xpdf 1.01. - The scheduler no longer passes the page-border and number-up-layout attributes to filters when printing banner pages. - The LPD backend now uses a 30-second timeout when sending commands and control files, and a 30-second timeout when retrieving responses from an LPD server. If a timeout occurs, it retries indefinitely. This helps to make LPD printing over VPNs work more reliably. - The USB backend now supports device URIs based on the printer serial number and/or model number under Linux. This avoids the "wrong device filename" problem when using more than one USB printer. - Now just shutdown the receiving end of a client connection when sending an error that requires the server to disconnect from the client afterwards. This fixes a problem when doing remote administration with encryption enabled. - The scheduler did not send a printer-state-message attribute if the string was empty; it now always sends this attribute. This caused the printer message to be displayed for other printers in the web interface. - The LPD backend now supports a "manual_copies" option, e.g.: "lpd://server/queue?manual_copies=no", in order to handle copies for raw jobs to printers that don't implement the LPD protocol properly... - The "mirror" option was not being handled by the PostScript or image filters. - Updated the cupsaddsmb command to support the new CUPS driver for Windows NT/2k/XP. - Filter status lines longer than 1023 characters could cause the scheduler to get into an infinite loop. - The scheduler didn't reset the job state to pending when modifying an active printer. - Now limit the maximum number of recursion steps when searching for a filter for a job, in case a user defines a circular filter rule. - The PostScript filter would embed an invalid requirements comment in some cases. - Added support for embedded job tickets in PostScript files. - The PostScript filter now detects EPS files and should better handle printing EPS files. - The cancel command now ignores a trailing destination name when cancelling a specific job ID (Solaris compatibility). - The scheduler now rejects jobs with copies outside the range of 1 to MaxCopies, inclusive. - Added new MaxCopies directive to set the maximum number of copies that a user can request. - The scheduler didn't block signals while it processed others and when it forked processes. - The scheduler checked for new jobs to print when stopping a job. This caused jobs to restart before a shutdown. - Updated the CUPS startup script to better support different timezones and to support the RedHat/Mandrake init script functions, if available. - The scheduler did not properly handle backslashes in banner files; it incorrectly assumed that "\c" should always be replaced by "c", instead of only looking for "\{" and replacing it by "{". - The texttops filter didn't handle prettyprint=no. - The text and HP-GL/2 filters didn't check for other common duplex option names like cupsMarkOptions() did. - "lpoptions -x printer" no longer clears the "default printer" status of the printer. - cupsTempFd() now stops trying to create a temporary file after 1000 tries, and aborts on any error other than EEXIST. This should prevent lp/lpr hangs due to a bad or missing temporary directory. - The lpadmin command did not send the right URI to the scheduler when setting options on classes. This caused a client-error-bad-request error. - The CUPS API convenience functions would attempt to connect to the remote server name in a "printer@server" printer name instead of dealing with the default (usually local) server. Aside from causing user confusion, the remote server name might not be resolved properly, causing further problems. - "lp -q" would cause the "lp" command to segfault, as the program would try to print the option letter that caused the error using the wrong index into the command-line; bugfix from Debian. - Fixed a minor inconsistancy in the encoding of boolean attributes from printer options in cupsEncodeOptions(). - Added a FilterNice directive which sets the priority of job filter processes that are run by the scheduler. - Added Solaris x86 USB printer support. - The USB backend now reports both the ulpt and unlpt devices under *BSD. - The "lpstat -o" command would truncate the "printer-jobid" string if it was longer than 21 characters. - The PJL-based MIME type rules now look in the first 1024 bytes instead of just the first 512 bytes to find the language mode. - The image file types are now listed explicitly in the mime.convs file so that additional image file formats do not use the standard CUPS image filters by default. - Updated the Software Programmers Manual to include all of the CUPS API functions. - ppdOpen*() no longer sorts choices for an option. - The web interface now enforces constraints in PPD files when configuring a printer. - When stopping a printer, the scheduler didn't set the printer state before stopping the current job. - The cupsaddsmb utility now lists all data files for Win9x and WinMe clients when installing that Windows driver. - Jobs submitted to a class now bounce immediately to the next available printer rather than waiting until that printer is available. - Filters and backends now also get the CLASS environment variable set when a job is printed to a printer class instead of a normal printer. - Added French translations of the web interface, CUPS Overview, Software Administrators Manual, and Software Users Manual contributed by Marian REYT-LLABRES. - Added several "hint" messages for common configuration problems that are stored in the error_log file. - httpSeparate() now unquotes %xx characters in the username:password field of a URI. - When starting the scheduler in daemon mode, the parent process now waits for the child to signal it is ready to accept connections. - Added -F option to cupsd to run cupsd in the foreground but detach from the controlling terminal and current directory. - The scheduler did not reload jobs when receiving a HUP signal; this would cause problems since the pointers into the file type database would no longer be valid for existing jobs. - The scheduler did not save the network interface list update time, thus no caching of the network data was actually provided. - Updated the SuSE PAM configuration file. - The LPD backend now supports a "reserve" option and no longer reserves a priviledged port by default. - The cupsaddsmb command now continues past printers that do not have a PPD file to export. - The lpstat command didn't treat printer names as case-insensitive. - The lpstat command now reports the printer location attribute with "lpstat -l -p". - Fixed a bug in the vsnprintf() emulation function, which was used on old versions of HP-UX, IRIX, and Solaris. - The number-up option was incorrectly being used when printing banner pages. - Added support for Greek and Slovak PPD files. - CUPS now supports printer names containing any printable character, e.g. "123-abc", "foo-bar", etc. - The null filter was not supported in mime.convs due to a bug in the filter validation code. - Changes in the default printer and printer attributes were not always reflected in the generated printcap file. - Implicit classes did not inherit the location or description from member printers. - The httpGetHostByName() function did not handle hostnames that started with a number. - Updated the filters to use the %cupsRotation comment instead of %%Orientation to auto-rotate pages, since the use of %%Orientation is inconsistent. - Added the RootCertDuration directive to control how often the root authentication certificate is updated. - Increased the size of the IPP write buffer to 32k to allow for larger attribute values and to provide more efficient output of large numbers of attributes. - The polling daemon now retries the initial connection to the remote server; this fixes a problem when the remote server is unavailable when the scheduler starts up... - The scheduler didn't validate Digest users against the system group(s), so Digest and BasicDigest authentication didn't work for administration operations. - The scheduler now passes the SHLIB_PATH environment variable to child processes (HP-UX shared libraries) - The scheduler now maps accesses from the loopback interface to "localhost". - The cups-lpd mini-daemon sent a status code byte in response to queue state commands, but those commands only return textual data. CHANGES IN CUPS V1.1.15-1 - The lpc and lprm sources didn't include the CUPS string function header, which is required on systems that don't have their own snprintf() function. - The French manpage Makefile tried to install the language subdirectories when it (obviously) didn't have to. CHANGES IN CUPS V1.1.15 - Updated the CUPS license agreement for the new MacOS license exception. - The printer-info attribute now defaults to the printer name if no value has been set. - ppdOpen() and friends now add an "Auto" InputSlot option if none is provided to automatically select the correct tray. - Updated the ppdEmit() and ppdEmitFd() functions to (re)mark the correct PageSize or PageRegion option depending on the selected ManualFeed or InputSlot options. - ppdEmitFd() didn't handle custom page sizes. - Darwin uses instead of . - The jobs.cgi web interface now handles all job operations, allowing the administrator to allow "job administrators" or operators to manage jobs (but not queues) on the server. - The cupsDoFileRequest() function now checks if the filename passed into the function is a directory, and returns the IPP_NOT_POSSIBLE error if so. - New SCSI printer backend. - Cleaned up handling of locales with trailing character set definitions. - Fixed handling of invalid PPD attributes inside OpenUI/CloseUI. - Fixed a problem with SSL and the job, printer, and admin CGIs on ports other than 443. - The scheduler didn't handle AuthClass properly. - Added French translation of man pages. - Updated the text filter to support the const_cast, dynamic_cast, and static_cast keywords in ISO C++. - Now use strlcat() and strlcpy() (or emulation functions) for easier string/buffer protection. - The auto-generated printcap/printers.conf files now have a small comment header explaining where the file comes from... - The PostScript filter now supports 6, 9, and 16-up output, as well as new page-border and number-up-layout options. - The lpoptions command didn't set options properly when using the default printer. - Added ConfigFilePerm and LogFilePerm directives. - Increased maximum size of MIME types to IPP_MAX_NAME to allow for longer printer names. - No longer create remote printers when loading job history data. - The printer-make-and-model attribute wasn't set when the PPD file didn't contain a NickName attribute. - Now handle PPD files with translation strings longer than 80 bytes - they are truncated if they go over... - The scheduler didn't handle signals until after it loaded the configuration files the first time; this caused problems on some installations that would restart the scheduler as the system booted into run level 3. - Now throttle broadcasts like we do for polling. - Fixed a bug in the reading of PPD files using CR's instead of CR LF's or LF's. - The scheduler would crash if cupsd.conf contained a BrowseProtocols line with no protocols listed. - The HTML job operation templates now link back to the destination printer or class. - The serial backend now detects USB serial devices. - The LPD mini-daemon (cups-lpd) now passes the job-originating-host-name attribute to the scheduler (cupsd). - Updated the IPP backend to reconnect after downgrading from IPP/1.1 to 1.0, and when sending requests to HP JetDirect interfaces that don't support HTTP Keep-Alive like they should. - Now pass NLSPATH and DYLD_LIBRARY_PATH environment variables, if defined, to CGI and job processes. - Removed the pstoraster filter (based on GNU Ghostscript 5.50) and now provide the raster "driver" and patch file necessary to use the current GNU Ghostscript 7.05 release. - Removed unnecessary fonts and updated the Courier and Symbol fonts to the latest versions to better support non-ISOLatin1 text. - The text filter now always embeds the Courier and Symbol fonts to ensure that they contain the full set of glyphs. - The lp and lpr commands now only override the SIGINT handler if it is not being ignored (patch from Robert Ambrose for some interactive software that catches SIGINT and will gracefully cancel the print...) - The PostScript image filter (imagetops) now supports printing CMYK images using the CMYK colorspace. - The image filters now support CMYK JPEG files, and correctly handles the inverted files from Photoshop (which seems to save RGBW data, not CMYK...) - Added a "check" target to the top-level makefile to conform with GNU standards (same as "test"). - The IPP code didn't always map the POSIX locale "C" to the proper IPP language code. - The cupsaddsmb program was updated to use the setdriver command instead of addprinter. - Banner pages were not handled properly for implicit classes. - When tunneling to a remote system using SSH, the printer URIs for local printers on the remote system did not reflect the correct port number. - The Allow, Deny, BrowseAllow, BrowseDeny, and BrowseAddress directives now support the network interface names "@LOCAL" and "@IF(name)" for access control and browsing based on the current interface addresses instead of fixed names or IP addresses. - The texttops filter did not properly recognize the "nowrap" (wrap=false) option. - The InstallableOptions group name in a PPD file is now translated separately (CUPS_MSG_OPTIONS_INSTALLED) so that UIs can accurately detect the presence of this group. - The scheduler no longer keeps job history data for remote printers on the client (just on the server.) - The parallel and USB backends now retry if the backend detects that the printer is not connected to the system (rather than stopping the queue...) - The network backends now retry if the backend detects that the printer is not connected to the network or is unreachable (rather than stopping the queue...) - The cupsGetDests() function no longer lists options and instances for printers that no longer exist. - The scheduler now converts the document language to the correct LANG string. - The cupsaddsmb program now supports alternative CUPS and SAMBA server names. - The PostScript filter now supports the Orientation comment and rotates the page as needed automatically. - Revamped the makefiles slightly to use automatically generated dependencies. - Build fixes for OS X. - The TIFF reading code depended on the newest version of libtiff; now conditionally compile that portion of the loader. - The PPD code now decodes all JCL options in the JCLSetup group, not just those options that start with the prefix "JCL". - The backends now read print data using the read() system call to ensure that the current page is printed while the next page is being processed. - The pdftops filter did not support shading type 3 (radial fill) for the "sh" operator. - The cups-polld program now throttles the local broadcasts of polled printers and classes so that the local system is not overwhelmed with hundreds of printers and classes all at once. - Updated the serial backend to support 230,400 baud for the Linux PPC port. - The cupsGetJobs() function wouldn't report completed jobs that did not have a document-format attribute value. - The cupsEncodeOptions() function now maintains a table of known boolean and numeric options, and encodes all other options as strings. - Now add a newline before the end-of-page code in the PostScript filter; this fixes a problem with files that don't end with a newline. - The image filters looked for the "orientation" option instead of the correctly named "orientation-requested" option. - The cupsEncodeOptions() function now handles mixed integers and ranges. - New translation guide for developers to provide native language support for CUPS. CHANGES IN CUPS V1.1.14 - The ippRead() function did not verify that the attribute name length or string with language value was not larger than the read buffer. - The scheduler set the signal handlers before loading the configuration files the first time; this prevented the RunAsUser directive from blocking server reloads. - Added Swedish message catalog. - The parallel backend now recognizes the /dev/printers device directory under Linux 2.4.x. - MacOS X fixes. - The cupsaddsmb utility sent the server name after the user information when executing the rpcclient program. This caused problems with some versions of SAMBA 2.2.x. - The IPP backend did not pass the requesting user name when checking on the print job status. This prevented it from waiting for the job to complete when communicating with some IPP implementations that require it. CHANGES IN CUPS V1.1.13 - The lpstat command did not report jobs submitted to regular printer classes. - The texttops filter didn't use sufficient precision when positioning text with some values of cpi and lpi. This could cause the alignment of text to stray. - cupsGetDests() didn't merge the options from the /etc/cups/lpoptions file with ~/.lpoptions - options in ~/.lpoptions overrode them completely. - Added support for KOI8-R and KOI8-U character sets, and added several Russian message catalogs. - The scheduler put the wrong timezone offset in the log files (e.g. +0500 instead of -0500 for EST...) - The scheduler did not ignore trailing whitespace in *.convs files. - The scheduler now forces all processes to exit (kill -9) when it is stopped. This prevents parallel and USB devices from running in the background after cupsd goes away. - The cupsParseOptions() function didn't skip trailing whitespace after quoted values. - More changes to support CUPS on OS/2. - Added Simplified Chinese message catalog. - Added PAM support for IRIX. - The cupsGetPPD() function didn't remove the @server portion of the printer name, and since it would connect immediately to the remote server instead of the local server, the printer would not be found. - Classification and page labels were not rotated to match the page orientation. - Now set the TCP "no delay" option on network connections to improve performance/response time. - Improved the IRIX printing tools support with patches from Andrea Suatoni. - Added a new PrintcapGUI directive to specify the GUI option panel program to use for the IRIX printing tools support. - The cupsGetDests() function did not check to see if a user-defined default printer (set via lpoptions) still existed. - The pstops filter no longer assumes that the default dictionary is writable when doing N-up processing. - The pstops filter now supports printing N-up with the page-set option. - The imagetoraster filter now supports direct printing of CMYK image data without conversion/correction. - The IPP backend now reports printer state/error conditions when possible (toner low, media empty, etc.) - The lpstat command now supports the (undocumented) IRIX -l option ("-lprintername") for a compact job listing for a printer. - The lpstat command now includes printer date/time information in the output (always Jan 01 00:00) to make third-party tools happy. - The text filter now supports non-integer cpi and lpi values. - The Margins field in the CUPS raster header was not initialized by the pstoraster filter. - Added --with-optim="flags" option to configure script. - Updated the Italian message translations. - Updated the cups.list file to install the correct files. - The pstoraster filter accessed the third element of a 2 element array. - The scheduler did not setup a status pipe for polling processes, so error messages went to whatever file descriptor 2 was pointing to when they were started. - The httpMD5Final() function didn't put a colon between the password and nonce strings. - The pstops filter did not default to Binary data for "%%BeginData:". - The pstops filter did not stop processing when a line containing a CTRL-D is seen. - The scheduler no longer replaces the JobSheets values from the printers.conf and classes.conf files with the classification level, if set. This way the original banner settings are preserved when classification levels are changed or turned off. - The serial backend didn't drain the output queue, nor did it restore the original settings. - Updated the default system group under MacOS X. - If no SystemGroup was defined in cupsd.conf, the system default group was not used. - The cups-lpd mini-daemon now supports LPD clients that send multiple control files. - httpConnectEncrypt() now always uses encryption for connections on port 443, since port 443 is reserved for the "https" scheme. - Group authentication via certificates did not work from the web interface for accounts other than "root". - The serial port backend did not clear the OPOST option, which could cause problems with some printers. - The cups-lpd mini-daemon didn't lookup the client IP address properly. - The parallel backend now identifies the polled and interrupt-driven devices under *BSD. - The scheduler allowed the "always" encryption mode inside a Location, which is not valid. - The CUPS startup script now checks for the timezone information under Linux. - Now also map the sides attribute to the JCLDuplex option (if present) in PPD files. - Updated pdftops to Xpdf 0.93a. - Added support for MD5 passwords under Slackware. - Added new AuthType BasicDigest that does Basic authentication using the MD5 password file managed by the lppasswd command. - The banner page attribute substitution code now retains {name} sequences in banner files when the named attribute is undefined. Use {?name} to conditionally substitute an IPP attribute. - The scheduler now ensures that the ServerRoot directory and configuration files are owned by and writable by the User and Group in cupsd.conf. - The USB backend now lists all USB printer devices regardless of whether a printer is connected or not. This allows new USB printers to be connected without restarting cupsd. - Added some more minor performance tweeks to the IPP protocol code to reduce copying and array indexing. - The cupsaddsmb utility now uses the -c option with smbclient and rpcclient to avoid the read length limit for commands on the standard input. - Added an include file to the CRD handling code in pstoraster so that it would compile properly on 64-bit pointer platforms... CHANGES IN CUPS V1.1.12 - Added "Polish" to the list of known languages for PPD files. - Added missing directory definition to cups-config. - The CUPS-Move-Job operation did not set the destination type for the new destination. - The CUPS-Add-Printer operation did not support the allow=all or deny=none values to clear the per-user printer ACLs. - The SetPrinterAttrs() function did not handle invalid PPD files that were missing the required NickName attribute. It now looks for NickName, ModelName, and then substitutes the string "Bad PPD File" for the printer-make-and-model attribute. CHANGES IN CUPS V1.1.11 - Added support for embedded TrueType fonts in PDF files. - Added support for PostScript functions in PDF files. - Added new "cupsaddsmb" utility for exporting CUPS printer drivers to SAMBA/Windows clients. - Added preliminary support for Darwin/MacOS X. - The CUPS-Add-Printer operation no longer allows arbitrary scheme names in device URIs to be used - it now restricts the available schemes to those found in the device list (lpinfo -m). - The ippRead() and ipp_read_file() functions could not handle more than IPP_MAX_VALUES (100) values in a 1setOf attribute. These functions have been updated to dynamically allocate more memory as needed, and the IPP_MAX_VALUES constant now represents the allocation increment. [this caused some versions of the GIMP-print drivers to fail since the number of media options exceeded 100...] - The scheduler could crash when BrowseShortNames was set to "No". - The scheduler did not prevent MaxClients from being set to 0, which could cause the scheduler to go in an infinite loop when accepting a request. - Made some performance optimizations in the ippRead() functions to make IPP request/response processing faster. - The accept/reject/enable/disable command did not support properly support the "-h" or default server name. - The scheduler did not save the quota configuration when the job-quota-period attribute was set to 0. - The LPDEST and PRINTER environment variables did not support printer instances. - The text filter now handles more types of boldface and underline formatting. - The cupsTempFd() function did not fail if the temporary directory did not exist; this would cause it to loop indefinitely instead of returning an error (-1). - Stopping (disabling) a printer class did not stop jobs from printing to printers in that class. - The cupsGetDests() function was sending the requested-attributes attribute as a name instead of a keyword; this caused a serious performance problem on slower systems since more information had to be transferred from server to client. - The web interfaces did not always quote < and & in things like the job title. This had the potential for browser-based security violations (on the browser's machine); bug report from SuSE. - The scheduler now treats unauthenticated usernames as case-insensitive when doing quota and allow/deny processing. - The lp command sent the "request ID is ..." message to stderr instead of stdout... - The PostScript filter (pstops) now handles EPS files, adding a showpage command to the files as needed. - The configure script checked for the header file before the JPEG libraries; since the JPEG headers can define HAVE_STDLIB_H, the configure check would cause the JPEG check to fail on some systems. - The scheduler now supports localized banner files, using the subdirectory approach, e.g. the "es" subdirectory under /usr/share/cups/banners is used for the Spanish banner files. - Updated the scheduler so it knows the correct language abbreviation to use for all supported PPD LanguageVersion values. The new code also supports country codes as well, so "English-GB" maps to the "en_GB" locale. - The cups-lpd mini-daemon did not support anonymous printing (no username specified). While the username is REQUIRED by RFC-1179, MacOS clients do not send the REQUIRED username information when printing via LPD. - Added many warning and informational messages to cups-lpd where they were missing. - Added Czech message file contributed by SuSE. - The cups-lpd mini-daemon now returns a non-zero status if an invalid destination or job ID is provided. - The scheduler did not honor the KeepAlive setting in cupsd.conf. - Increased the size of the file read/write buffers to 32k. - *BSD static library creation fixes. - Use mkstemps() instead of tmpnam() in pdftops whenever possible. - Added httpGetHostByName() function as a wrapper around gethostbyname() - some implementations of this function do not support IP addresses (e.g. MacOS X.) - Added casts to all printf's of file lengths, since there is currently no standard way of formatting long long values. - The client filename field was not cleared in all instances, resulting in old form data being submitted to CGIs. - The httpConnect*() functions now try all available addresses for a host when connecting for the first time. - The pstoraster filter would "lose" all drawing commands when the PageSize was set but the printer bitmap was not reallocated. This was most noticeable with the output from StarOffice 6 beta and would result in a blank page being output... - The IPP backend was sending a PAGE comment even when printing the output from a filter (it should only send page comments when printing files directly...) - The pdftops filter didn't properly map glyph names of embedded Asian TrueType fonts. - Changed the CUPS startup script to look for a program named "cupsd", not just any program with "cupsd" in the name (this caused the apcupsd UPS monitoring daemon to be stopped/restarted...) - The CUPS-Move-Job operation did not change the internal destination name for held jobs, so moved (but held) jobs would still show up as queued on the original destination. - The cups-polld program didn't send the requested-attributes attribute in the CUPS-Get-Printers and CUPS-Get-Classes requests, which made it use more CPU and bandwidth than required. - The scheduler and CUPS API incorrectly added a job-sheets-default attribute for remote printers. This caused banner pages to be omitted from client system prints. CHANGES IN CUPS V1.1.10-1 - Minor fixes to the filter, systemv, and template makefiles to install files properly. CHANGES IN CUPS V1.1.10 - Added a driver for DYMO label printers. - Added new ClassifyOverride directive to allow users to override the classification of individual jobs. - Added new BrowseProtocols directive to control which browse protocols are used (currently CUPS and SLP). - Added SLPv2 support (thanks to Matt Peterson for contributing the initial implementation for CUPS.) - Adding a raw printer on a remote CUPS server now correctly redirects PPD file requests to the remote server. - The serial backend now limits writes to 1/10th second worth of data to avoid buffer overflows with some types of flow control. - The scheduler did not properly process PUT requests, so configuration files could not be uploaded to the server. - The scheduler did not strip trailing whitespace on lines in the configuration files. - The httpWrite() function did not transition the PUT request to the HTTP_STATUS state to get the status from the server. - The scheduler did not properly handle trailing null ("-") filters when testing a driver that sent data to the file: pseudo-backend. - The IPP backend now only sends a document-format of "application/vnd.cups-raw" when printing to another CUPS server using a local printer driver or interface script. Previously the job's document format was used, which was incorrect. - The lpadmin command didn't use the ppd-name attribute with the -m option; this prevented the use of the "raw" model from the command-line. - The pstoraster filter output draft (1-bit) 6-color output in the wrong order; this resulted in yellow being printed instead of black on Stylus Photo printers. - The pdftops filter did not have the Japanese and Chinese text support compiled into it. - The IPP and AppSocket backends did not clear the "waiting for print job to complete" status message, which caused some confusion... :) - The serial backend now opens the port in "no delay" mode to avoid DCD detection problems with some OS's. CHANGES IN CUPS V1.1.9-1 - The configure script did not substitute the correct user and group names. - The configure script did not use the full path to the install-sh script when it was used. - The pstoraster filter did not correctly support DuplexTumble mode for printers that used flip duplexing. - The cups.list.in file was missing from the distribution. - The New DeskJet series driver did not use the correct OrderDependency for the Duplex option. - Use read() instead of fread() to read piped print files in lpr/lp. This avoids a bug in the HP-UX 10.20 fread() function. - Updated the pstoraster filter to use the MIPS_FIXADE system call under IRIX to fix bus error problems on R12000 processors (Ghostscript is not 64-bit clean...) - Some Xerox PPD files (most notably the Phaser 790) have illegal whitespace in the option keyword in the OpenUI line. This caused the PageRegion option to not be recognized properly for the Phaser 790. CHANGES IN CUPS V1.1.9 - Revamped the configure script to use a modular approach for the various tests. - Added --with-openssl-* options to properly reference the OpenSSL libraries in DSOs. - Added --with-cups-user and --with-cups-group options to specify the default user and group for CUPS. - Added AIX shared library support. - Added AIX device discovery for the serial and parallel ports. - Now use install program or script to install directories, files, and symlinks. - Updated pstops filter to use strict handling of EPS files embedded in a PostScript document. The %%EOF handling in 1.1.8 caused some dvips files not to print. - Fixed yet another memory allocation bug in pstoraster that would cause it to crash. This fix also ensures that all memory allocations are done on (at least) a 64-bit boundary. - Fixed Digest authentication - httpGetSubField() didn't skip the Digest keyword. - The scheduler did not properly handle Digest authentication with the new multiple-group support. - The scheduler did not allow usernames that were not in the UNIX password file to be used for Digest authentication from passwd.md5. - The scheduler could not scan PPD files that only used a carriage return (i.e. MacOS PPD files); the new code is also about 40% faster, so servers with thousands of PPD files should start much faster now. - The scheduler now stores the PPD file size and modification times in the ppds.dat file, so it can now incrementally update the PPD database from the model directory, resulting in significantly faster startup times. - The lpinfo command did not return a non-zero status code if an error occurred. - Fixed a bug in the scheduler's UpdateJob() function. Basically, all jobs shared the same status buffer, and the "buffer start" pointer could point to 1 byte before the beginning of the buffer. The new implementation uses a separate buffer for each job and eliminates the buffer start bug. - The IPP backend would send N copies of a document if the receiving device didn't support the copies attribute, even if the upstream driver already added the necessary commands to generate the copies. This was most noticeable with HP printers where N * N copies would come out instead of N. - The PostScript filter (pstops) did not properly handle duplex printing on inkjet printers that provide this option. Copies would be put on the front and back sides of the duplexed page, and the filter did not output an even number of pages. - The backends always caught SIGTERM after they connected to the printer. This prevented raw jobs from being cancelled early. - The cupsSetDests() function now removes any printers, instances, and options that are not defined by the user or server. This should prevent old system-wide options from being used in individual user accounts. - Updated the EPSON printer driver and added PPDs for the newer EPSON Stylus printers that only support the "ESC i" graphics command. - The lpadmin command didn't allow you to add remote printers to a local class. - The lpadmin command didn't allow you to set the options (quotas, etc.) for a class. - The scheduler did not load or save the job-sheets-default attribute for classes. - The scheduler did not automatically recreate remote printers that were part of a class. - It was possible for a printer class to list the same printer more than once. - The scheduler now makes a backup copy of classes.conf and printers.conf before writing the new file. - The lppasswd program incorrectly asked for a new password when deleting an existing MD5 password account. - The scheduler did not match "/printers/name.ppd" against a location of "/printers/name". - The client code did not always handle HTTP encryption upgrades properly. - The client code now caches the last Digest password so it can retry using a new resource path or nonce value, which are included in the MD5 sum sent to the server. This should eliminate unnecessary password prompts when using Digest authentication. - The lppasswd command didn't have a man page. - Updated the PJL detection rules to allow the universal escape to occur anywhere in the first 128 bytes of the file. - The cups-polld program would poll servers continuously with no delay if there was an error contacting the server. - The IPP backend would send an empty job-name or requesting-user-name attribute if the corresponding job attribute was an empty string. While this is allowed by the IPP specification, some HP JetDirect implementations return a client-error-bad-request error if an empty name attribute value is received. The new code only sends these attributes if they are not the empty string. - At least some versions of the HP JetDirect firmware do not correctly implement IPP. Added additional checks to the IPP backend to eliminate extra, unsupported attributes which should normally be ignored by a compliant IPP device. - The scheduler did not copy the complete list of supported file types into the document-format-supported attribute. This caused clients to not send the local file type (such as application/vnd.cups-raw for raw print files) and the corresponding bad output in some cases. - The scheduler did not fully copy attributes from a set-job-attributes request - string attributes were only referenced, which could cause cupsd to crash or behave irratically. - The lp command didn't send the right value for the job-hold-until attribute when "-H resume" was specified. - The IPP backend now returns as soon as a job is completed or reported as "pending-held". - Added new ImplicitAnyClasses and HideImplicitMembers directives to the cupsd.conf file to make implicit classes more usable/transparent to the user. - Clients can now (with the appropriate authentication) retrieve and update the server configuration files using HTTP GET and PUT requests. - The web interface didn't allow you to modify the location or description of the printer. - The pdftops filter now uses its own temporary file function to work with PDF files using LZW compression (which use the uncompress program or gunzip) - The SystemGroup directive now supports specification of multiple groups. - Added new Include directive to cupsd.conf, a la Apache. - Added new pseudo-driver/PPD called "raw" that can be used to create/convert a raw queue. This also allows raw queues to be created in the web interface. - The pdftops filter didn't handle image objects that used JPEG and Flate compression together. - The pstops filter counted pages wrong when using the N-up and even/odd printing options. This prevented the page-ranges option from working properly. - Added another fix to pstoraster for a bus error condition caused by a lack of parenthesis in the Ghostscript code. - Added new "natural-scaling" option which scales the natural size of the image (percent of natural image size instead of percent of page size.) - The lppasswd program is now setuid to the CUPS user instead of root. - The PPD functions did not allow for PPD files that defined the page sizes and margins before the page size options. - The mime.types file now checks for the PJL "LANGUAGE = Postscript" command for PostScript files. - The scheduler did not truncate file: output files. - The PPD file reading code did not handle options with raw quotes (") in the human-readable names. - The pdftops filter now remaps the space character when (bad) PDF files contain a .notdef glyph for the space character. CHANGES IN CUPS V1.1.8 - Updated spec file to generate separate cups-pstoraster package for pstoraster. - The spec file wasn't setting LOGDIR in the install. - The scheduler might restart a stopped printer after stopping a print job. Thanks to Florent Guiliani for finding this bug! - The init script showed run level 0 for the Red Hat chkconfig program. This is incorrect because Red Hat doesn't use run level 0 for shutdown scripts. - The IPP backend did not handle the client-error-not-found error when checking the status of the job that was sent. This caused remote queues to stop on client machines when the server had job history disabled. - Added httpConnectEncrypt() function to avoid performance penalty for setting up encrypted connections initially. - Use httpConnectEncrypt() in all client apps and in the CUPS API to ensure consistent usage of encryption throughout. - Jobs weren't queued to remote classes (fix from Richard Begg.) - AIX changes from Richard Begg. - Fixed the pstops fix for GNOME output - no longer use the page numbers in the %%Page: comment since GNOME puts a filename instead (!?@!#?!). There is still an issue with N-up printing since GNOME defines its fonts in the first page instead of the document setup section (pages must be independent according to the DSC spec) People with GNOME printing problems should consult bug #54489... - The imagetops filter produced PAGE: messages when generating PostScript for a non-PostScript printer (only affects page-label and Classification options.) - The updated pdftops filter was looking for an options file called xpdf.conf instead of pdftops.conf. CHANGES IN CUPS V1.1.7 - Configuration script changes, including new "--with-docdir=/dir" option to relocate CUPS documentation and web content according to your favorite version of the FHS. - Documentation updates for encryption, SLP, etc. - New Software Test Plan and automated test script to test CUPS prior to installation. - All scheduler configuration files are now case insensitive to match Apache. - Added support for Apache ListenBackLog, Require, Satisfy, , , and LimitRequestSize directives. - Added support for all Apache log levels... - Added support for "double" HostNameLookups. - Added new "RunAsUser" directive to support non-root configurations on the standard (priviledged) ports. - Added support for non-root invocation of the lpd backend (does no reserve a priviledged port, which might not work with some LPD servers...) - Added new PrintcapFormat directive to control the output format of the printcap file (BSD or Solaris formats are supported at present.) - The CUPS directory service routines now handle ECONNREFUSED errors gracefully rather than shutting all browsing off. - ippErrorString() now returns the recommended error messages from the IPP/1.1 Model and Semantics document. - Fixed a minor IPP compliance issue with responses to requests without the attributes-charset or attributes-natural-language attributes. - Sun fix: need httpFlush() call for chunked IPP requests in cupsDoFileRequest(). - httpConnect() now looks up "localhost" by name and by address (127.0.0.1) for users the go to the trouble of removing the required localhost entry in /etc/hosts or on their DNS server... - Added support for Linux 2.4.x devfs parallel port filenames (/dev/parallel/N). - cupsDo[File]Request() and cupsGetPPD() no longer block trying to reconnect to a crashed or inaccessable server. - Added new ppdEmitJCL() function to better handle PJL commands from PPD files. - A bug in UpdateJob() would cause the scheduler to consume 100% CPU until another request was submitted. - The cancel command did not support the "-" option to cancel all jobs on all printers. - The cancel and lprm commands did not support cancelling the next/current job in the queue. - The pdftops and pstoraster filters were using unsafe temporary file functions; while this is not a problem in normal configurations (the CUPS temporary directory is restricted), they now use the cupsTempFd() function. - The mime.types file was missing the recognition rule for Sun Raster images. - The admin CGI was passing a printer make string to ippSetCGIVars() that was being replaced in that function. - "lpoptions -l" would resave the options... - The EPSON drivers now send the "end packet mode" command when printing to USB devices. - The scheduler initialized certificates before loading the cupsd.conf file. - The scheduler used /dev/random to collect random data, which could block if insufficient entropy information had been collected by the kernel. Now use /dev/urandom. - Fixed a bug in the whitespace skipping code in httpGetSubField(). - The LPD backend now supports a new "order" option: "lpd://server/queue?order=control,data" (default) and "lpd://server/queue?order=data,control". - The scheduler enforced a 30 second timeout on all clients regardless of the Timeout directive and if a CGI was currently running. - cupsParseOptions() now sets boolean options to option=true or option=false. - The "percent complete" calculations in the LPD backend could overflow on large files, causing the percentage to wrap to 0 every 40MB or so. - Fixed a memory reallocation bug in pstoraster that could cause it to crash. - The LPD backend now sanitizes the job title to avoid potential problems on remote LPD servers. - The lp command did not send the requesting-user-name attribute when altering a job. - The pstops filter did not handle PostScript files with lines longer than 8191 bytes. - The scheduler no longer uses inet_addr() to convert IP addresses in dot format (mmm.nnn.ooo.ppp) to the 32-bit format, since it will not work for IPv6 addresses. - New "Classification" directive to force labeling of the current classification on each page. - New "page-label" attribute to add per-page labels ("For Official Use Only", "Draft", etc.) - The scheduler now sets the HTTPS environment variable for CGI programs when a client connects using encryption. - Fixed a recursion bug in the scheduler that could cause cupsd to crash when a printer was removed. - The LPDEST and PRINTER environment variables didn't support instances. - Dropped the "file" backend from the device list that is reported, since it is only available for *testing* and should never be used in a production environment. The file: device can still be used, but it won't show up in the list of devices from lpinfo or the web interface. - Added support for /dev/lpa# parallel ports under *BSD. - Added META variables to the CGI header template to prevent caching of the results. - Fixed an unaligned memory buffer for the pstoraster clist states; this caused bus errors for some combinations of printers, drivers, and options. - Re-added black reduction for colorful colors; this helps to prevent dark colors from getting desaturated. (only used when converting RGB to CMYK) - Added two new directives - MaxJobsPerPrinter and MaxJobsPerUser - to allow an administrator to set the maximum number of pending jobs in a queue or submitted by a user. - The scheduler no longer stops a printer if it can't create the status pipe or run the filters or backend. This will allow heavily loaded servers to service clients or start print jobs as the load allows. - Fixed a bug in the Set-Job-Attributes code that could crash the scheduler (patch from Martin Zielinski) - cupsSetDests() did not quote option values with embedded spaces. - Added support for the Enable-Printer and Disable-Printer extension operations (same as CUPS-Accept-Jobs and CUPS-Reject-Jobs.) - The AppSocket and IPP backends now wait for the print job to be finished before exiting; this should prevent the loss of print jobs with older JetDirect firmware and make consecutive print jobs print faster. - The BMP loading code did not handle resolution values of 0. This is a problem with BMP image files produced by the GIMP. - The HTTP Upgrade code (upgrade to TLS encryption) bypassed the authentication checks. - The HTTP Upgrade code did not send a 426 status code to the client and end the current request. This caused a race condition between the client and server for the upgrade to TLS. - Fixed a bug in the EOF and Trailer detection code in the pstops filter. - The imagetoraster filter did not add the margins to the custom page size in the raster header. - The imagetops filter did not adjust the custom page size to the size of the printed image. - The imagetops filter did not include DSC comments which are required by some printers. - The imagetops filter did not insert newlines in Base85 encoded output, causing files to contain lines longer than 255 characters (violation of the DSC). - Added support for the DeskJet 900 series duplexer and CRET color modes in the HP driver. - Added support for PPD-defined margins in the HP driver. - Fixed the debugging output from pstoraster - the font list was not terminated by a newline. - Some versions of the HP-UX pam_unix authentication module apparently do not pass the appdata_ptr argument to the conversation function, preventing the scheduler from authenticating users using PAM under HP-UX. A workaround using a static variable has been added to address this problem. - Fixed a bug in the scheduler SortPrinters() function that could cause printers to disappear or the scheduler to crash when adding a printer. - Changed the pstops filter to not do per-page filtering if the file does not conform to at least version 3.0 of the document structuring conventions. This seems to "fix" printing with broken apps. - The image filters did not handle older TIFF files that lacked the samples-per-pixel and bits-per-pixel tags. - Added new cupsGetJobs() and cupsFreeJobs() functions to manage print jobs. - cupsEncodeOptions() would encode names of 0 length and cupsAddOption() and cupsParseOptions() would add names of 0 length. - The scheduler might block waiting for status messages after starting a new print job. Thanks to Florent Guiliani for finding this bug! CHANGES IN CUPS V1.1.6-3 - The configure script put the JPEG library before the TIFF library; this caused problems in some configurations since the TIFF library also supports JPEG compression of TIFF images. - Updated the configure script and makefiles to handle admin man pages with the "1m" extension (HP-UX, IRIX, Solaris, Tru64) and in odd directories (IRIX) - The updated cupsTempFile() function did not return the filename when called with a filename buffer of NULL (previously it used a static buffer.) - FreeBSD uses /dev/unlptN, but NetBSD and OpenBSD use /dev/ulptN. - DeletePrinter() didn't remove the printer from any classes it was a member of. - DeletePrinterFromClass() didn't preserve the implicit status of a class. - DeletePrinterFromClasses() didn't remove printers from implicit classes. - StartJob() didn't send the job-sheets, job-priority, and job-hold-until attributes to remote printers. - LoadAllJobs() was looking for job-sheets-completed instead of job-media-sheets-completed. This would prevent accumulation of page data after a restart of the scheduler. - The pstops and imagetops filters now generate copies using the appropriate method for a Level 1, 2, or 3 printer since some Level 2/3 printers don't support the /#copies variable anymore. - The man page for cups-lpd did not mention the "-o" option. - The IPP backend didn't handle version-not-supported errors and revert to IPP/1.0 (previously it only checked for a bad-request error) - Caldera fix: lpc now reports unimplemented commands as unimplemented, not invalid. - Caldera fix: lpq didn't recognize BSD lpq "-a" option. - Caldera fix: lpr didn't recognize BSD lpr "-1", "-2", "-3", "-4", "-q", or "-U" options. - RedHat fixes: patches to GNU Ghostscript - SuSE fix: temp file creation patch to GNU Ghostscript (pstoraster). - SuSE fix: remove cgi-bin/abort.c and cgi-bin/email.c, which are not used. - SuSE fix: missing NULL check in cgi_initialize_post(). - SuSE fix: potential buffer overflows in cgi_initialize_string(). - SuSE fix: potential buffer overflows in ippSetCGIVars() - SuSE fix: more NULL checks in ppdOpen(); also make sure that all memory is freed on error to avoid memory leaks. - SuSE fix: Exit from child if setgid() or setuid() fails. - SuSE fix: Added setgroups() calls after setgid() and setuid() calls. - SuSE fix: potential buffer overflows in httpEncode64() calls. - SuSE fix: potential buffer overflows in httpSeparate() - SuSE fix: potential buffer overflows in ippWrite() for bad input. - SuSE fix: potential nul skip in ppd_decode() for missing hex digits. CHANGES IN CUPS V1.1.6-2 - Added changes to support NetBSD startup scripts. - Added separate compiler options for pstoraster (Ghostscript) to avoid compiler-induced errors from Ghostscript's twisted code. - The mime.types file contained syntax errors. - Updated the *BSD USB device filenames to use the /dev/unlptN files so that the USB device is not reset prior to printing (causes print corruption on many printers) - Added new cupsTempFd() function to avoid serious security bug in glibc fopen() function. The glibc fopen() function unlinks a file before creating it, which opens up possible symlink attacks. - Now reject 0-length names in add-printer and add-class requests. - Fix for pstoraster when ZLIB is not available. - cupsGetPPD() didn't reconnect when a HTTP connection was lost. - SuSE fix: httpConnect() didn't check that the value from gethostbyname() was a valid IPv4 address. - SuSE fix: httpConnect() didn't allow file descriptor 0 to be used for a socket. - SuSE fix: ippRead() didn't confirm that all values in a set were numeric or string types. - SuSE fix: lppasswd race condition fixes. - SuSE fix: directive names could overflow buffer when reading *.conf files. - SuSE fix: HEAD requests for PPD files did not use the same logic as GET requests. - SuSE fix: possible buffer overflow when adding /index.html to requested directory name. - SuSE fix: possible buffer overflow when converting IPP attributes to string options for filters. - SuSE fix: creating file: device output with mode 0666 instead of mode 0600. - SuSE fix: creating job info files with mode 0640 instead of 0600. - SuSE fix: don't rely on snprintf() for including system name in log filenames. - SuSE fix: add bounds checking when copying quoted and hex strings. CHANGES IN CUPS V1.1.6-1 - Added configure check for getting the correct strftime() format string; %c is not Y2k safe, and %KC and NULL are not universally supported. 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 include "-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 , 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 - RPM spec file and EPM list file fixes - The cupsTempFile() function now uses a different algorithm for generating temp files and "reserves" them to avoid possible security exploitation. - Now use /dev/random (if available) to seed the random number generator for certificates. - The /var/spool/cups and /var/spool/cups/tmp directories were incorrectly owned by root; they are now owned by the filter user, typically "lp". - The scheduler now resets the permissions on the spool and temp directories as needed to match the filter user. - Now expose ppdCollect() as an externally callable function. - The image filters now support filtering from the standard input. - The imagetoraster filter now collects all printer options and job patch files and applies them to the page header as needed. - Added format and banner options to LPD backend. - The send-document operation didn't start a job immediately when last-document was true. - The set-job-attributes operation didn't correctly replace the current job-hold-until value. - Removed the option wrapper code from ppdEmit() and friends since it caused problems with Ghostscript and many PS printers. - Was setting TZ environment variable twice for job filters. - Added syslog logging in cups-lpd to aide in debugging problems. - The HP-UX parallel port backend did not list the available parallel ports on some systems (printf calling problem...) - The lp and lpr commands overrode user options if -d/-P were specified after -o. - The scheduler would crash with a */* filter. - Added support for a "default" filter for unknown file types. The example provided in the mime.types and mime.convs file prints unknown files as if "-oraw" was specified for the job. This functionality is disabled by default. - The "compatibility" mode fix for older backends did not work for smbspool. Added a workaround for it. - The HP-GL/2 filter didn't perform the right pen scaling with some files and the "fitplot" option. - New Software Performance Specification document that describes the memory, disk, and CPU usage of all the CUPS software. CHANGES IN CUPS v1.1.1 - The pstoraster Makefile still referenced one of the old PDF filter files. - The filter Makefile used INSTALL_DATA instead of INSTALL_LIB to install the CUPS image library. - The administration CGI didn't work properly with network devices. - The BrowseACL variable was not updated after the cupsd.conf file was loaded. - The lpd mini-daemon didn't support printer instances. - Now use a default umask of 077 for child processes. - Now put temp files in /var/spool/cups/tmp for child processes and the root user, unless TMPDIR or TempDir is defined otherwise. - cupsGetPPD() no longer uses easy-to-guess filenames. - The CUPS-Delete-Class and CUPS-Delete-Printer operations now save classes.conf file as needed. - The lppasswd command wouldn't add a user. - The ppdOpen() function could cause a segfault if a 0-length PPD file was read. - The image filters were not handling images with different X and Y resolutions properly. - The imagetoraster filter defaulted to RGB output instead of black output like pstoraster. - The pstops filter didn't handle binary data properly. - The pstops filter didn't handle copies properly for PS files lacking DSC comments. - The pstops filter now appends %%EOF to the end of documents if they don't have it. - The cupsGetPPD() function didn't work with remote printers lacking the @server in the name. - The configure script didn't work right when only --prefix was specified. - The ppdEmit() code now wraps all printer commands so that buggy PostScript printers will still print a file after receiving an option that isn't available. - Fixed the DeskJet margin bug, and disabled 600dpi color mode until it can be fixed. - The cupsAddDest() function didn't sort instances correctly in all cases. - The time-at-xyz attributes now expand to the date and time in banner files. CHANGES IN CUPS v1.1 - Documentation updates. - Configuration script updates. - Didn't map charset and language value strings to lowercase and _ to - as required by SLP and IPP. - ppdLoadXYZ() didn't add the list of available fonts to the ppd_file_t structure. - The text filter common code was freeing the PPD file data before it was used. - The text filter now embeds missing fonts. - The CGI interface now maps local access to the server to the localhost address. - The HP-GL/2 filter didn't use the specified (or default) color ranges, resulting in strange colors. - The HP-GL/2 filter didn't default to no input window, which caused unnecessary clipping of plots. - Integrated Xpdf's pdftops filter into CUPS, which is a lightweight and reliable replacement for Ghostscript's PDF support. - Removed all PDF support from Ghostscript. - Updated HP driver to set top margin; this seems to fix the offset problem seen on HP DeskJet printers. - Fixed dependencies on the ZLIB and JPEG libraries in pstoraster. - The lpr command wasn't using the lpoptions defined by the user. - The lpr command would segfault if the CUPS server was not running. - The top-level makefile was not installing the CUPS initialization script. It now does so if it sees there is an init.d directory in /sbin, /etc/rc.d, or /etc. - "lpstat -v all" didn't work. - pstoraster would crash on some platforms doing the setpagedevice operator. - The web administration interface now allows you to set the default banner pages. - Images can now be positioned on the page using the new "position" option. - The AccessLog, ErrorLog, and PageLog directives now support "%s" to insert the server name. - Added a new BrowseShortNames directive to allow for short remote printer names ("printer" instead of "printer@server") when possible. - The scheduler could crash if given an invalid PPD file with no PageSize attributes. - Updated the serial, parallel, and usb backends to do multiple writes and ignore ioctl() errors as needed; this should fix problems with serial printing on old serial drivers and with the UltraSPARC parallel port driver under Solaris 2.7. - Now propagate LD_LIBRARY_PATH to child processes from cupsd. - New DataDir directive for installing in alternate locations. - New CUPS_SERVERROOT and CUPS_DATADIR environment variables to specify installation directories as needed. - Queued remote jobs recreate remote printers as needed when the scheduler is started. - Deleting a printer also purges all jobs on that printer. - Old job and control files that don't belong to a printer are automatically deleted. - Wasn't updating time-at-processing and time-at-completed attributes in job. - Didn't send required multiple-operation-time-out attribute in response to a get-printer-attributes request. - cups-lpd now supports options set with lpoptions. - The job-hold-until attribute is now provided with all jobs. For jobs that are not currently held the value is "no-hold". - The scheduler was not sending "unknown" values in IPP responses. - The lpoptions command now accumulates options from previous runs rather than replacing all options for a printer. - The IPP backend now switches to IPP/1.0 if a 1.1 request fails. - The lpadmin and admin.cgi programs now validate new printer and class names. - The access_log file now includes the number of IPP bytes received in a POST request. CHANGES IN CUPS v1.1b5 - Documentation updates. - The pstoraster filter didn't compile without the JPEG library. - The cupsd server didn't support the HTTP OPTIONS request method. - Dropped the "CLOSE" method supported by the cupsd server. (not defined in HTTP specification) - Makefile/configure script fixes. - Missing the job-restart template. - Added IPP test suite for testing. - Missing IPP documentation from binary distributions. - Fixed multiple-document handling code when last-document not specified. - Added more checks to IPP requests to prevent bad requests from getting through. - Not all of the Ghostscript error output was being sent to stderr. - The PostScript filter now added PJL commands to set the job name and display string, if supported. - The scheduler would crash if the browse socket could not be bound. Now disables browsing if port 631 (reserved for IPP) is being used by a misbehaving daemon. - The USB backend now looks for the older Linux 2.2.x USB printer device filenames as well as the newer ones. - The IPP backend now uses the UTF-8 charset exclusively, since apparently only CUPS handles more than US-ASCII and UTF-8... - Wasn't quoting ( in PostScript banners... - Send-document requests with no document-format attribute could cause cupsd to crash. - Old jobs in the spool directory might cause cupsd to crash. - CUPS now supports all of the recommended job-hold-until keywords as well as name values of the form "HH:MM" and "HH:MM:SS". - Added placeholder pointer for TLS encryption to the HTTP connection structure. - Fixed the "fast poll" bug reported by DISA - the status pipe wasn't being closed for multi-file jobs. - Revamped put_params code in pstoraster to fix bitmap allocation bug with FrameMaker output. - Ripped out filename, etc. code from pstoraster as it is a potential security hole. - Added support for RIP_CACHE environment variable in the new pstoraster. - Fixed USB device filenames for Linux; now support new pre-2.4 devices (/dev/usb/lp#) and 2.2 devices (/dev/usblp#) - Fixed accept-jobs crash with classes. - Didn't include dot-matrix EPSON drivers in previous release. CHANGES IN CUPS v1.1b4 - Documentation updates. - Many makefile and configuration script fixes (should now compile better under *BSD.) - The MediaPosition attribute was being mishandled by GhostScript, causing the RIP to fail whenever a paper tray was selected. - The scheduler now logs the final line of log information from a filter, even if it doesn't end with a newline; this primarily affects GhostScript error output. - The scheduler was saving implicit classes, so after a few restarts you'll end up with AnyPrinter, AnyAnyPrinter, etc. - The JPEG autodetection didn't work with some JPEG files that came from digital cameras (JPEG but not JFIF); the new magic types should work with all images that the JPEG library can handle. - Fixed a bug in the new contains() MIME type rule that could cause cupsd to crash. - Switched to using strtol() in the MIME type code so that you can use hex, octal, or decimal constants as desired in the mime.types file. - Banner files are now treated as templates, allowing any type of file to be used as a banner. - Added a 30-second timeout to backend device reports so that a hung backend will not prevent the scheduler from starting. - Backends are once again terminated when jobs are stopped; the CUPS-supplied backends will stay alive until the downstream filters have had a chance to clear out old page data. - The charset lookup in the CUPS localization support was wrong (iso8859-x instead of iso-8859-x) - Changed the "cpNNNN" code page files to "windows-NNNN" to match the IANA registrations. - New PostScript banner pages. - Added Windows BMP and Alias PIX image file support to the image filter. - The PNG reading coded didn't free all of its buffers. - Added Digest authentication support to the client and server code. - Added Solaris options to System V commands. - Now support the output-bin job template attribute. - Now log the job-billing attribute in the page_log file, and keep track of the total number of pages in the job-media-sheets-completed attribute. - The penwidth option is now in micrometers to support more accurate width specification. - The image filters now support interlaced and transparent PNG files. - Didn't handle Keep-Alive for HTTP/1.0 clients. - The BrowsePoll support didn't handle when BrowseInterval was set to 0 (now uses 30 seconds if BrowseInterval is 0) - The DeskJet driver now supports 600 DPI color for printers that support it. - New lpinfo and lpmove commands. - The lpq command now supports the Digital UNIX output format. - The LPD mini-daemon now supports all required LPD operations. - Implemented timeouts for multi-file documents. - New cupsPrintFiles() function in the CUPS API library to print multiple files using create-job and send-document requests (1 job ID for multiple files) - The lp command now sends multiple files as a single job, matching the behavior of the System V command. - The "cancel -a" command now purges job history files. CHANGES IN CUPS v1.1b3 - Documentation updates. - The startup script redirected stderr before stdout, which caused problems with some versions of Bourne shell and Bash. - Fixed a bug in the scheduler's PPD language reading code. - Fixed a bug in the scheduler's check for the manufacturer in the PPD. - The pstoraster filter didn't allow some input and output attributes to be set. - Added banner page support. - Added missing PAM configuration file. - Configuration script fixes for Linux and *BSD. - The log file code was using the wrong sign for the timezone offset. - The default printcap file is now empty (no printcap file is generated). - The scheduler did not start jobs destined for remote printers when they became available. - The scheduler now sends jobs to remote printers immediately. (when sending jobs to a class, the remote printer is only used when it becomes available) - The scheduler now supports printing of banner pages via the job-sheets attribute (banner files go in /usr/share/cups/banners) - The cupsd process now forks itself into the background (override with -f) - Added several *BSD enhancements. - Added UNSUPPORTED libtool option to configuration script to allow the use of libtool. Note that this is UNSUPPORTED by us, but added by request of the *BSD folks. - The parallel, serial, and usb backends now retry the opening of their ports. This allows multiple print queues to be associated with a single physical port, and will allow CUPS to support several types of parallel port auto-switches in the near future. - Set-Job-Attributes now supports adding, changing, and deleting job template attributes, and no longer allows job-printer-uri to be set (see CUPS-Move-Job) - Added CUPS-Move-Job operation to support moving of jobs. - The CGI template functionality now supports multiple languages (still only have templates for English) - The CUPS-Get-Printers and CUPS-Get-Classes operations now support filtering as defined in the IDD. - The Get-Jobs, CUPS-Get-Printers, and CUPS-Get-Classes operations no longer limit themselves to 1000 jobs, printers, or classes (believe it or not, this is needed for some sites) - The web interfaces now support language-specific templates. - The web admin interface now supports class management. - The web admin interface now shows a list of manufacturers before selecting the PPD/driver for a specific printer. - The web admin interface now supports configuration of the default printer options in the PPD file. - The web interface now uses printer/class authentication for the test page instead of admin authentication. - Updated the RPM spec file for the current release. - Updated language support for Windows code pages. - 8-bit character set files can now use multiple fonts (needed for Arabic, Greek, Hebrew, etc.) - Added basic right-to-left text support in the text filter. - The POSIX locale now uses ISO-8859-1 instead of US-ASCII. - Fixed PDF printing problems. - Fixed PostScript RIP page device dictionary elements that weren't getting passed in cups_get_params(). - Added a new "contains" rule for the magic file typing. - The "printable" rule now accepts characters from 128 to 255 (needed for Microsoft character sets) - Added support for ~/.cupsrc as well as /etc/cups/client.conf so that the default server can be configured on a per-user basis without environment variables. - Added LPD mini-daemon to support incoming LPD jobs. CHANGES IN CUPS v1.1b2 - Documentation updates. - The lp command didn't always load the user-defined destinations, preventing it from seeing the default printer. - Many configure script and makefile fixes. - The Microsoft code page files were missing from the distribution. - Added a workaround for the HP IPP client (which is sending an invalid printer-uri in requests) - Fixed the encoding of text-with-language and name-with-language to match the IPP spec. - Added support for unknown value tags in the IPP routines (previously they would be ignored) - Integrated GNU GhostScript 5.50 into the pstoraster filter. - Client hostname resolution was broken on little-endian machines. - Now look at client.conf file for client's default server and printer. - The cupsServer() function did not close the client.conf file if it contained a ServerName directive. - Added BrowseAllow, BrowseDeny, BrowseOrder, BrowsePoll, and BrowseRelay directives. - BrowseInterval 0 disables advertising of local printers, but still receives information on remote printers. - New browse polling daemon (for polling servers on different networks) - New PPD cache file for faster startup times with large numbers of PPD files. - The Host: field was incorrectly required for HTTP/1.0 clients. - New set-job-attributes operation now supported. - The mime_load_types() and mime_load_convs() functions did not close their input files. CHANGES IN CUPS v1.1b1 - NEW web-based administration interface. - NEW EPSON printer drivers. - NEW user-defined printers and options. - NEW persistent jobs and job history - NEW IPP/1.1 support - NEW template-based web interfaces. - NEW CUPS-get-devices and CUPS-get-ppds operations. - NEW support for create-job and send-file operations. - NEW certificate-based authentication for local administration. - NEW USB backend. - The lpr command now produces human-readable error messages. - The lpq command now produces BSD standard format output instead of OSF/1 output. This should resolve the SAMBA print queue problems that have been reported. - The IPP backend did not always detect when the "raw" option was being used. - The "lpstat -p" command would stop after the first active printer. - The "lpstat -v" command would stop before the first remote printer. cups-2.2.7/CHANGES-1.2.txt000664 000765 000024 00000151743 13255074424 015275 0ustar00msweetstaff000000 000000 CHANGES-1.2.txt --------------- CHANGES IN CUPS V1.2.12 - The PHP cups_print_file() function crashed if the options array contained non-string option values (STR #2430) - The image/tiff file matching rule incorrectly identified some text files as TIFF files (STR #2431) - The filter(7) man page incorrectly documented the "PAGE: total #-pages" message (STR #2427) - PCL text files were mis-identified as HP-GL/2 and caused the HP-GL/2 filter to hang (STR #2423) - When printing to a queue with user ACLs, the scheduler incorrectly returned a quota error instead of a "not allowed to print" error (STR #2409) - cupsaddsmb could get in a loop if no printer drivers were installed (STR #2407) - cupsRasterReadHeader() did not byte-swap the header properly when compiled with certain versions of GCC. - The IPP backend did not send the document-format attribute for filtered jobs (STR #2411) - Some PPD files could cause a crash in ppdOpen2 (STR #2408) - The web admin interface incorrectly handled the "share printers" and "show remote printers" settings (STR #2393) - The scheduler's log messages about AuthClass and AuthGroupName advised using a replacement directive but had the wrong syntax (STR #2400) - Updated the PostScript/PJL and HP-GL/2 MIME rules to look in the first 4k of the file, not just the first 1k (STR #2386) - Updated the Italian localization (STR #2382) CHANGES IN CUPS V1.2.11 - Fixed the "relaying from" log message (STR #2376) - Updated the launchd support on Mac OS X to better support reconfiguration. - "make distclean" didn't remove all generated files (STR #2366) - Fixed a bug in the advertisement of classes (STR #2373) - The IPP backend now stays running until the job is actually printed by the remote server; previously it would stop monitoring the job if it was held or temporarily stopped (STR #2352) - PDF files were not always printed using the correct orientation (STR #2348) - The scheduler could crash if you specified a bad file: URI for a printer (STR #2351) - The Renew-Subscription operation now returns the notify-lease-duration value that was used (STR #2346) - The IPP backend sent job options to IPP printers, however some printers tried to override the options embedded in the PS/PCL stream with those job options (STR #2349) - ppdLocalize() now also tries a country-specific localization for when localizing to a generic locale name. - The cupstestppd program now allows for partial localizations to reduce the size of universal PPD files. - Chinese PPD files were incorrectly tagged with the "cn" locale (should have been "zh") - The backends now manage the printer-state-reasons attribute more accurately (STR #2345) - Java, PHP, Perl, and Python scripts did not work properly (STR #2342) - The scheduler would take forever to start if the maximum number of file descriptors was set to "unlimited" (STR #2329) - The page-ranges option was incorrectly applied to the banner pages (STR #2336) - Fixed some GCC compile warnings (STR #2340) - The DBUS notification code was broken for older versions of DBUS (STR #2327) - The IPv6 code did not compile on HP-UX 11.23 (STR #2331) - PPD constraints did not work properly with custom options. - Regular PPD options with the name "CustomFoo" did not work. - The USB backend did not work on NetBSD (STR #2324) - The printer-state-reasons attribute was incorrectly cleared after a job completed (STR #2323) - The scheduler did not set the printer operation policy on startup, only on soft reload (STR #2319) - The AP_FIRSTPAGE_InputSlot option did not clear any ManualFeed setting that was made, which caused problems with some PPD files (STR #2318) - cupsDoFileRequest() and cupsDoRequest() did not abort when getting an error in the response (STR #2315) - The scheduler did not schedule jobs properly to remote or nested classes (STR #2317) - Updated the mime.types and mime.convs headers to warn that the files are overwritten when CUPS is installed. Local changes should go in local.types or local.convs, respectively (STR #2310) - The scheduler could get in an infinite loop if a printer in an implicit class disappeared (STR #2311) - The pstops filter did not handle %%EndFeature comments properly (STR #2306) - Fixed a problem with the Polish web page printer icons (STR #2305) - ppdLocalize() now also localizes the cupsICCProfile attributes. - The scheduler still had a reference to the incorrect "notify-recipient" attribute (STR #2307) - The "make check" and "make test" subscription tests did not set the locale (STR #2307) - The "make check" and "make test" subscription tests incorrectly used the notify-recipient attribute instead of notify-recipient-uri (STR #2307) - cupsRasterInterpretPPD() incorrectly limited the cupsBorderlessScalingFactor when specified in the job options. CHANGES IN CUPS V1.2.10 - ppdLocalize() now supports localizing for Japanese using the "jp" locale name used by the ppdmerge program from the CUPS DDK 1.1.0 (STR #2301) - _cupsAdminSetServerSettings() did not support changing of top-level directives as designed. - The init script path check was broken. - CUPS incorrectly used the attribute "notify-recipient" instead of "notify-recicpient-uri" in several places (STR #2297) - Fixed a configure script bug on MirBSD (STR #2294) - The pdftops filter did not limit the amount of recursion of page sets (STR #2293) - Custom page sizes with fractional point sizes did not work (STR #2296) - The lpoptions command would crash when adding or removing options on a system with no printers (STR #2295) CHANGES IN CUPS V1.2.9 - The scheduler did not use the default job-sheets (banners) for implicit classes (STR #2284) - The scheduler could crash when listing complete jobs that had been unloaded from memory (STR #2288) - The French localization was doubled up (STR #2287) - Build system fixes for several platforms (STR #2260, STR #2275) - The scheduler's openssl certificate generation code was broken on some platforms (STR #2282) - The scheduler's log rotation check for devices was broken (STR #2278) - The LPD mini-daemon did not handle the document-format option correctly (STR #2266) - The pdftops filter ignored the "match" size option in the pdftops.conf file (STR #2285) - cupstestppd now validates UTF-8 text strings in globalized PPD files (STR #2283) - The outputorder=reverse option did not work with all printers (STR #2279) - Classes containing other classes did not always work (STR #2255) - Printer location and description information was lost if the corresponding string contained the "#" character (STR #2254) - cupsRemoveOption() did not work properly (STR #2264) - The USB backend did not work with some USB to parallel cables on Mac OS X. - The test page did not print the rulers properly on large media sizes (STR #2252) - The text filter could crash when pretty printing certain types of files (STR #2158) CHANGES IN CUPS V1.2.8 - Documentation fixes (STR #2141, STR #2157) - The HTTP upgrade redirection used by the scheduler did not work with Internet Explorer (STR #2235) - Members of a class with Unicode names did not appear correctly in the web interface (STR #2154) - Changing the "Save debugging information" setting in the web interface no longer affects the other server settings (STR #1993) - The scheduler did not choose SSL certificates correctly on Mac OS X (STR #2225) - The scheduler could get in an infinite loop when printing to a remote class (STR #2228) - The jobs web page did not have separating space after the number of pages column (STR #2230) - Added French localization (STR #2221) - Updated Spanish localization (STR #2223) - Updated Japanese localization (STR #2216) - cupsBorderlessScalingFacter was limited to a range of 0.9 to 1.1, but some printers need larger values (STR #2222) - Landscape printing of PDF files did not always work (STR #2149) - Fixed slow USB printing on Minolta printers (STR #2104, STR #2219) - The ZPL label printer driver could produce stretched output (PR #6448) - The IPP backend now clears the printer-state-message when there are no outstanding errors or warnings (STR #2126) - The CUPS Java scripting support did not work with recent versions of Java due to the use of Sun's private Base64 class (STR #2152) - The scheduler did not pass HTTP GET form variables to custom CGI programs (STR #2173) - The lpoptions command now displays the reason why a PPD file cannot be found (STR #2184) - The scheduler did not accept "none" as a browse protocol name (STR #2200) - The scheduler still loaded the remote printer cache, even when browsing was disabled (STR #2198) - The SNMP backend now shows OfficeJet printers with the "HP" manufacturer prefix (STR #2151) - Web interface HTML cleanup (STR #2153) - The parallel backend consumed 100% CPU on FreeBSD due to an apparently common parallel port driver bug (STR #2161) - ippReadIO() incorrectly returned IPP_IDLE when the initial IPP message header could not be read (STR #2179) - cupsRasterInterpretPPD() did not support custom options (STR #1960) - Collated output produced by the PostScript filter could lose some options (STR #2137) - job-hold-until with time values for the next day would be held for 60 days (STR #2144) - Some types of Sun raster files did not print correctly (STR #2107) - Raw PBM files did not print correctly (STR #2106) - The SNMP backend no longer uses IPP with HP printers, as some recent firmware versions appear to not work (STR #2055) - cupsMarkOptions() did not handle the multiple-document-handling option (STR #2135) - lpstat did not show the local job ID of active printers (STR #2125) - The backends incorrectly used STATUS: media-tray-empty-error messages for out-of-paper conditions (STR #2123, STR #2124) - cupsGetPPD2() returned the wrong error when the PPD file did not exist (STR #2122) - cupsDoAuthentication() did not translate the password prompt (STR #2121) - httpGetLength2() did not handle error messages without content correctly (STR #2133) - Added support for 32/64-bit libraries on HP-UX Itanium systems (STR #2115) - Fixed a configure script problem with the 32/64-bit library support (STR #2114) - The PostScript filter did not properly output document setup commands for reversed output (STR #2111) - The scheduler did not parse IPv6 netmasks properly (STR #2117) CHANGES IN CUPS V1.2.7 - Documentation updates (STR #2089) - Added an Italian translation (STR #2105) - The PostScript filter now rotates the bounding box values as needed (STR #2079) - The scheduler no longer loads the remote printer cache when browsing is disabled (STR #2084) - The scheduler no longer writes a new launchd configuration file if it doesn't have to (STR #2083) - Updated the USB and PAP backends for Mac OS X (STR #2086) - The scheduler now picks up on changes to IPv6 and DNS configuration on Mac OS X (STR #2085) - The lpstat program could still hang (STR #2098) - Fixed an inefficiency in the SNMP IPP detection code (STR #2100) - The SSL negotiation code did not implement short timeouts (STR #2091) CHANGES IN CUPS V1.2.6 - The web interface was not localized on Mac OS X (STR #2075) - "lpc status" did not show the number of queued jobs for disabled queues (STR #2069) - The lpstat program could hang (STR #2073) - The serial backend did not support the new USB serial filenames on Linux (STR #2061) - The parallel backend did not support bidirectional I/O properly (STR #2056) - The network backends now log the numeric address that is being used (STR #2046) - Fixed a compile error when using libpaper. - Fixed a compile error when compiling on Solaris with threading enabled (STR #2049, STR #2050) - Missing printer-state-changed event for printer-state-message updates (STR #2047) CHANGES IN CUPS V1.2.5 - Documentation updates (STR #2038) - The SNMP backend no longer uses IPP for Epson printers (STR #2028) - Updated the configure script for Tru64 UNIX 5.1 (STR #2033) - Tru64 5.1B's getaddrinfo() and getnameinfo() functions leak file descriptors (STR #2034) - cupsAddDest() didn't add the parent destination's options and attributes. - ppdConflicts() did not handle custom option constraints. - Raw printing of gzip'd files did not work (STR #2009) - The scheduler no longer preserves default option choices when the new PPD no longer provides the old default choice (STR #1929) - The Linux SCSI backend is now only built if the SCSI development headers are installed. - USB printing to Minolta printers did not work (STR #2019) - Windows clients could not monitor the queue status (STR #2006) - The scheduler didn't log the operation name in the access_log file for Create-Job and Print-Job requests. - The PostScript filter now separates collated copies with any required JCL commands so that JCL-based finishing options act on the individual copies and not all of the copies as a single document. - The PostScript filter now disables duplex printing when printing a 1-page document. - cups-lpd didn't pass the correct job-originating-host-name value (STR #2023) - Fixed some speling errors in the German message catalog (STR #2012) - cupstestppd did not catch PPD files with bad UIConstraints values (STR #2016) - The USB backend did not work with the current udev- created printers if the first printer was disconnected (STR #2017) - Mirrored and rotated printing did not work with some documents (STR #2004) - 2-sided printing with banners did not work properly on some printers (STR #2018) - Updated the raw type rule to handle PJL within the first 4k of a print job (STR #1969) - Added an Estonian translation (STR #1957) - Clarified the documentation for the cupsd.conf @LOCAL and @IF(name) allow/deny functionality (STR #1992) - The PostScript filters did not escape the Title and For comments in the print job header (STR #1988) - The scheduler would use 100% CPU if browsing was disabled and the cupsd.conf file contained BrowsePoll lines (STR #1994) - The cupsDirRead() function did not work properly on non-POSIX-compliant systems (STR #2001) - The cupsFile functions didn't handle read/write errors properly (STR #1996) - The DBUS support now works with older versions of the DBUS library. CHANGES IN CUPS V1.2.4 - The --with-printcap configure option did not work (STR #1984) - The character set reported by cupsLangGet() did not always reflect the default character set of a given locale (STR #1983) - Older Lexmark and Tektronix printers did not work with IPP (STR #1980) - Failsafe printing did not work (PR #6328) - Some web interface redirects did not work (STR #1978) - The web interface change settings button could introduce a "Port 0" line in cupsd.conf if there was no loopback connection available (STR #1979) - The web interface change settings and edit configuration file buttons would truncate the cupsd.conf file (STR #1976) - The German web interface used the wrong printer icon images (STR #1973) - The "All Documents" link in the on-line help was missing a trailing slash (STR #1971) - The Polish web interface translation used the wrong URLs for the job history (STR #1963) - The "reprint job" button did not work (STR #1956) - The scheduler did not always report printer or job events properly (STR #1955) - The scheduler always stopped the queue on error, regardless of the exit code, if the error policy was set to "stop-printer" (STR #1959) - ppdEmitJCL() included UTF-8 characters in the JCL job name, which caused problems on some printers (STR #1959) - Fixed a buffering problem that cause high CPU usage (STR #1968) - The command-line applications did not convert command-line strings to UTF-8 as needed (STR #1958) - cupsDirRead() incorrectly aborted when reading a symbolic link that pointed to a file/directory that did not exist (STR #1953) - The cupsInterpretRasterPPD() function did not handle custom page sizes properly. CHANGES IN CUPS V1.2.3 - The scheduler did not send job-state or job-config-changed events when a job was held, released, or changed (STR #1947) - The scheduler now aborts if the configuration file and directory checks fail (STR #1941) - Fixed a problem with ippPort() not using the port number that was set via the client.conf file or CUPS_SERVER environment variable (STR #1945) - HTTP headers were not buffered (STR #1899) - Some IPP printers (HP) did not like UTF-8 job names (STR #1837) - The CUPS desktop icon is now localized for Polish (STR #1920) - Printer options were not always honored when printing from Windows clients (STR #1839) - The openssl command would lock up the scheduler when generating an encryption certificate on some platforms due to a lack of entropy for the random number generator (STR #1876) - The web admin page did not recognize that "Listen 631" enabled remote access (STR #1908) - The web admin page did not check whether changes were made to the Basic Server Settings check boxes (STR #1908) - The IPP backend could generate N*N copies in certain edge cases. - The scheduler did not restore remote printers properly when BrowseShortNames was enabled (STR #1893) - Polling did not handle changes to the network environment on Mac OS X (STR #1896) - The "make test" subscription tests used invalid notify-recipient-uri values (STR #1910) - Printers could be left in an undefined state on system sleep (STR #1905) - The Berkeley and System V commands did not always use the expected character set (STR #1915) - Remote printing fixes (STR #1881) - The cupstestppd utility did not validate translation strings for custom options properly. - Multi-language PPD files were not properly localized in the web interface (STR #1913) - The admin page's simple settings options did not check for local domain socket or IPv6 addresses and did not use "localhost" as the listen address. - An empty BrowseProtocols, BrowseLocalProtocols, or BrowseRemoteProtocols line would crash the scheduler instead of disabling the corresponding browsing options. - The scheduler now logs IPP operation status as debug messages instead of info or error. - cupsFileRewind() didn't clear the end-of-file state. - cupstestppd didn't report the actual misspelling of the 1284DeviceID attribute (STR #1849) - BrowseRelay didn't work on Debian (STR #1887) - configure --without-languages didn't work (STR #1879) - Manually added remote printers did not work (STR #1881) - The header was not installed. - Updated the build files for Autoconf 2.60 (STR #1853) - The scheduler incorrectly terminated the polling processes after receiving a partial log line. - The cups-lpd mini-daemon reported "No printer-state attribute found" errors when reporting the queue status (PR #6250, STR #1821) - SNMP backend improvements (STR #1737, STR #1742, STR #1790, STR #1835, STR #1880) - The scheduler erroneously reported an error with the CGI pipe (STR #1860) - Fixed HP-UX compile problems (STR #1858, STR #1859) - cupstestppd crashed with some PPD files (STR #1864) - The and header files did not work with C++. CHANGES IN CUPS V1.2.2 - Documentation updates (STR #1765, STR #1780) - CUPS didn't know about alternate character set names for Asian text (STR #1819) - The lpoptions -o and -r options did not work unless you specified a printer. - The lpoptions command incorrectly allowed users to set printer attributes like printer-type (STR #1791) - httpWait() did not flush the write buffer, causing "bad request" errors when communicating with CUPS 1.1.x servers (STR #1717) - Polling did not sanitize the printer description, location, or make and model strings like broadcasts did. - Polled printers did not show the server's default job-sheets option value. - The Samba password prompt was not properly localized (STR #1814) - Added a German translation (STR #1842) - The scheduler now creates self-signed SSL certficates automatically when using OpenSSL and CDSA for encryption, just as for GNU TLS. - The SNMP backend sporatically reported some printers as "unknown" (STR #1774) - The scheduler now forces BrowseTimeout to be at least twice the BrowseInterval value and non-zero to avoid common configuration errors. - The scheduler incorrectly returned printer URIs of the form "ipp://server/printers/classname" for classes (STR #1813) - Updated Japanese localization (STR #1805) - The scheduler's SSL certificate/key directory was not created on installation (STR #1788) - Added a mailto.conf man page and help page (STR #1754) - The parallel and USB backends no longer wait for the printer to go on-line - this caused problems with certain printers that don't follow with the IEEE-1284 standard (STR #1738) - The scheduler could crash on a reload when implicit classes were present (STR #1828) - The IPP backend incorrectly used the CUPS_ENCRYPTION environment variable to determine the default encryption mode when printing (STR #1820) - USB printing did not work on Solaris (STR #1756) - The scheduler sorted job priorities in the wrong order (STR #1811) - The scheduler did not automatically restart notifiers that exited or crashed (STR #1793) - IPv6 support did not work on NetBSD (STR #1834) - The EPM packaging file did not work (STR #1804) - The scheduler used up the CPU if BrowseRemoteProtocols was empty (STR #1792) - Custom page sizes did not work (STR #1787) - The SNMP backend could crash on some systems when SNMP logging was enabled (STR #1789) - Browsing could produce some funny printer names when ServerName was set to an IP address (STR #1799) - Fixed the log message for BrowseRelay (STR #1798) - Fixes to allow CUPS to compile on MirBSD (STR #1796) - The scheduler incorrectly set the FINAL_CONTENT_TYPE environment variable (STR #1795) - The pdftops filter incorrectly embedded a "produced by" comment, causing PDF printing not to work on some operating systems (STR #1801) - Sending raw jobs from a client system could cause the client's scheduler to eventually crash (STR #1786) - The scheduler now checks that the notifier exists prior to accepting a new subscription request. - The scheduler now reports the supported notify-recipient schemes based on the contents of the ServerBin/notifier directory. - Event notifications did not include the notify-sequence-number or other required attributes (STR #1747) - Allow/Deny addresses of the form "11.22.33.*" did not work on Linux (STR #1769) - cupsGetPPD() did not work if the scheduler was only listening on a domain socket (STR #1766) - The scheduler could crash advertising a class (STR #1768) - The scheduler could crash if the default printer was deleted (STR #1776) - Added a new default CUPS raster format (v3) which does not compress the raster stream in order to provide the same cupsRasterReadPixels() and cupsRasterWritePixels() performance as CUPS 1.1.x. - The cupsaddsmb man page listed the wrong files for the CUPS driver. - Some configure --with options did not work (STR #1746) - "Allow @IF(name)" didn't work if "name" wasn't the first network interface (STR #1758) - The lpstat command did not use the correct character set when reporting the date and time (STR #1751) - The cupsaddsmb command and web interface did not update the Windows PPD files properly, resulting in corrupt PPD files for the Windows client to use (STR #1750) - The cupsd.conf man page didn't describe the Listen domain socket syntax (STR #1753) - The scheduler no longer tries to support more than FD_SETSIZE file descriptors. - CDSA (encryption) support fixes for MacOS X. - The lppasswd program needs to be setuid to root to create and update the /etc/cups/passwd.md5 file (STR #1735) - 32/64-bit library installation was broken (STR #1741) - The USB backend now reports a "no such device" error when using the old filename-based USB URIs instead of the "success" error. - Increased the HTTP and IPP read timeouts to 10 seconds, as 1 second was too short on congested networks (STR #1719) - The SNMP backend now uses the device description over the printer-make-and-model attribute when the attribute contains a generic name (STR #1728) - Fixed another file descriptor leak when printing raw files (STR #1736) - Raw queues were not shared via LDAP (STR #1739) - The pstops filter didn't always embed PageSetup commands from the PPD file (STR #1740) - "make install" didn't work if you disabled all of the localizations. - The scheduler didn't always choose the least costly filter. - Fixed parsing of IPv6 addresses in Allow, Deny, BrowseAllow, BrowseDeny, and BrowseRelay directives (STR #1713) - Printers that were shared via LDAP did not get added to the LDAP server properly (STR #1733) - LDAP browsing would crash the scheduler if a required value was missing (STR #1731) - Special cases for the "localhost" hostname did not work, causing printing to not work when the /etc/hosts file did not contain a localhost entry (STR #1723) - Updated the Spanish translation (STR #1720, STR #1770) - Reverse-order page output was broken when N-up or landscape orientations were used (STR #1725) - The parallel, serial, socket, and USB backends needed print data before they would report back-channel data, causing problems with several new drivers (STR #1724) CHANGES IN CUPS V1.2.1 - "lprm -h hostname" did not work (STR #1800) - The web interface did not handle reloads properly for MSIE (STR #1716) - The configure script no longer adds linker rpath options when they are unnecessary. - The scheduler could crash printing a debug message on Solaris (STR #1714) - The --enable-32bit and --enable-64bit configure options did not always work. - The password prompt showed the domain socket address instead of "localhost" for local authentication (STR #1706) - The web interface filtered the list of printers even if the user wasn't logged in (STR #1700) - The IPP backend did not work reliably with some Xerox printers (STR #1704) - Trailing banners were not added when printing a single file (STR #1698) - The web interface support programs crashed on Solaris (STR #1699) - cupstestppd incorrectly reported problems with *1284DeviceID attributes (STR #1710) - Browsing could get disabled after a restart (STR #1670) - Custom page sizes were not parsed properly (STR #1709) - The -U option wasn't supported by lpadmin (STR #1702) - The -u option didn't work with lpadmin (STR #1703) - The scheduler did not create non-blocking back-channel pipes, which caused problems when the printer driver did not read the back-channel data (STR #1705) - The scheduler no longer uses chunking in responses to clients - this caused problems with older versions of CUPS like 1.1.17 (PR #6143) - Automatic raw printing was broken (STR #1667) - 6-up printing was broken (STR #1697) - The pstops filter did not disable CTRL-D processing on the printer/RIP. - ppdOpen*() did not load custom options properly (STR #1680) - "Set Printer Options" in the web interface did not update the DefaultImageableArea or DefaultPaperDimension attributes in the PPD file (STR #1689) - Fixed compile errors (STR #1682, STR #1684, STR #1685, STR #1690) - The lpstat command displayed the wrong error message for a missing destination (STR #1683) - Revised and completed the Polish translation (STR #1669) - Stopped jobs did not show up in the list of active jobs (STR #1676) - The configure script did not use the GNU TLS "libgnutls-config" script to find the proper compiler and linker options. - The imagetoraster filter did not correctly generate several 1, 2, and 4-bit color modes. - cupsRasterWritePixels() could lose track of the current output row. - cupsRasterReadPixels() did not automatically swap 12/16-bit chunked pixel data. - Moved the private _cups_raster_s structure out of the public header. - Updated the CUPS raster format specification to include encoding rules and colorspace definitions. - The Zebra PPD files had the wrong PostScript code for the "default" option choices. - The imagetoraster filter did not generate correct CIE XYZ or Lab color data. - The cups-config script did not work when invoked from a source directory (STR #1673) - The SNMP backend did not compile on systems that used the getifaddrs emulation functions (STR #1668) CHANGES IN CUPS V1.2.0 - Documentation updates (STR #1618, STR #1620, STR #1622, STR #1637) - Static file copy buffers reduced from 64k to 32k to work around bogus MallocDebug library assumptions (STR #1660) - The scheduler did not decode the backend exit code properly (STR #1648) - The MacOS X USB backend did not report the 1284 device ID, nor did it fix device IDs returned by HP printers. - The scheduler started more slowly than 1.1.x with large numbers of printers (STR #1653) - cupsRasterInterpretPPD() didn't support the cupsPreferredBitsPerColor attribute, and imagetoraster didn't use the new API. - The "make test" script did not create all of the necessary subdirectories for testing (STR #1638) - The scheduler did not prevent rotation of logs redirected to /dev/null (STR #1651) - "make test" did not include the SNMP backend in the test environment (STR #1625) - The EPM packaging files did not work (STR #1621) - "Use Default Configuration" inserted a broken configuration file (STR #1624) - Redirects in the web interface did not always preserve the encrypted status of a connection (STR #1603) - Added the Apple "pap" backend. - Added CUPS library to CUPS Image shared library linkage to support Linux --as-needed linker option (STR #1606) - Fixed support for --enable-pie (STR #1609) - The pdftops filter did not validate the length of the encryption key (STR #1608) - Updated the Polish localization. - "Encryption Required" in the cupsd.conf file now only requires encryption when the connection is not over the loopback interface or domain socket. - Printer names containing "+" were not quoted properly in the web interface (STR #1600) - The SNMP backend now reports the make and model in the information string so that the auto-generated printer name is more useful than just an IP address. CHANGES IN CUPS V1.2rc3 - The cups-lpd program always did reverse lookups on the client address, which could be a performance problem. Added a "-n" option to disable lookups. - When configured with SSL support, require encryption by default when displaying the /admin location (STR #1592) - The next job ID was not computed correctly if the job cache file got out of sync with the spool directory (STR #1582) - The PNG image handling code used deprecated functions from libpng (STR #1587) - Added a Polish translation (STR #1584, STR #1586) - More changes to the scheduler to improve battery life on portable devices (STR #1583) - Changed the default log level for status messages back to "DEBUG" to be consistent with CUPS 1.1.x (STR #1579) - The error string was not set properly when cupsDoFileRequest() was given the name of a directory (STR #1578) - Fixed handling of job-hold-until (STR #1581) - Added explicit notes to the cupsaddsmb man page explaining that the driver filenames are case-sensitive under UNIX and that they must be all lowercase (Windows 2000) or all UPPERCASE (Windows 95/98/Me) to work (STR #1568) - The USB backend incorrectly split the manufacturer name if it contained spaces (STR #1566) - The scheduler would hang when listing PPD files for a manufacturer whose name contained spaces (STR #1567) - Added the SNMP backend for network printer discovery (STR #1555) - cupstestppd now fails PPD files with 1284DeviceId instead of 1284DeviceID, and cups-driverd uses a case-insensitive comparison when looking for it (STR #1573) - cupsDoFileRequest() and cupsDoRequest() now work properly with non-blocking HTTP connections. - Added Swedish translation (STR #1569) - "make install" now installs the MIME files with world read permissions (STR #1565) - More CDSA encryption support fixes (STR #1563) - Updated the default mime.types file to support printing of files that do not have a locally-recognized MIME media type to raw or System V queues. - Updated the serial port detection code on Linux (STR #1562) - Added some more error checking to httpGetHostname() (STR #1561) - The title of some administration pages was not localized (STR #1548) - The edit-config.tmpl file was not generated or installed for the Spanish or Japanese localizations (STR #1547) - The mimeDelete() function freed the types before the filters, but the filters needed the type data (STR #1558) - The scheduler didn't keep track of the status pipes properly, leading to a bad select() for multi-file jobs (STR #1559) - The cupstestdsc program didn't validate the ordinal page number value for %%Page: comments. CHANGES IN CUPS V1.2rc2 - The scheduler was not always using the string pool, causing random crashes. - The lpmove and the web interface's Move Job button did not work with stopped jobs (STR #1534) - The PostScript filter did not handle the page-set option properly with number-up printing (STR #1543) - The scheduler now only warns about unsupported ACLs once (STR #1532) - The "fitplot" option did not work with output from Mozilla (STR #1542) - The imagetops filter did not work with Level 2 or 3 printers (STR #1533) - The scheduler now recognizes PostScript files with PJL commands that do not include an ENTER LANGUAGE command. - Added --with-printcap configure option. - 64-bit SSL fixes for MacOS X. - The scheduler didn't send some printer state change events. - The scheduler didn't send jobs to busy remote printers. - Fixed some problems with the launchd support. - Added new USB printer backend for MacOS X. - The PostScript filter now handles files that start with an incomplete PJL header (PR #6076) - The web interface language selection code did not try the generic language localization (STR #1531) - The language cache, string pool, and transcoding caches are now process global instead of per-thread to avoid problems with GNOME and to allow for data sharing between threads (STR #1530) - Fixed a CUPS 1.1.x compatibility bug (STR #1528) - The web interface redirection after certain printer administration tasks was broken (STR #1516) - Web interface authorization could get stuck (STR #1512) - Localization updates (STR #1513, STR #1518, STR #1520) - The pstops filter didn't work with some files (STR #1523) - "./configure --enable-static" didn't work (STR #1522) - The scheduler was not using the configured default Group (STR #1521) - The web interface still did not show the localized time and date for some locales and systems (STR #1509) - httpAddrGetList() would crash on systems without getaddrinfo(). - Socket URIs without a trailing slash would cause the port number to not be accepted (STR #1519) - Local raw and System V printers were not advertised as such for printer browsing (STR #1502) - The RPM spec file incorrectly put duplicate copies of the Japanese and Spanish web interface templates in the main cups package (STR #1517) - cupsSetDests() did not explicitly set the permissions of the /etc/cups/lpoptions file (STR #1508) - The lpq command crashed with the -h option (STR #1515) CHANGES IN CUPS V1.2rc1 - Documentation updates (STR #1497, STR #1498) - The scheduler now redirects browsers to https: URLs when encryption is required. - The scheduler would crash when printing with a banner (STR #1500) - cups-driverd did not use the LanguageEncoding attribute in PPD files to convert the NickName to UTF-8 (STR #1503) - The lpadmin command could not set the printer-error-policy attribute (STR #1504) - The web interface did not show the time and date in the correct format for the locale (STR #1505) - CUPS no longer accepts print jobs if a printer does not support the file format (STR #1501) - Cleaned up the PostScript filter (pstops) so that it properly supports %%IncludeFeature and page scaling (STR #1453) - Fixed the cupsFileRewind() and cupsFileSeek() functions to work properly with uncompressed files. - Added cupsFileGetLine(), cupsFileStderr(), cupsFileStdin(), and cupsFileStdout() functions to the CUPS library. - Added a new cupstestdsc program to test the DSC conformance of PostScript files. - Added KDE/GNOME icons and a Manage Printers menu item. - Added --enable-image and --enable-pdftops configure options to control whether the image and PDF filters are built and installed (default = yes for all platforms but MacOS X) - Fixed a minor memory leak in the PPD API. - Fixed transcoding issues (STR #1493) - The scheduler now enforces a minimum job cost of 100 when doing FilterLimit checks. - The scheduler would leak file descriptors when printing to raw queues (STR #1491) - The IPv6 support did not compile on Tru64 UNIX (STR #1488) - ppdOpen2() now converts the NickName and all UI text to UTF-8 (STR #1475) - The Set Allowed Users web page did not work (STR #1486) - When the default policy was not set or set to a non- existing policy, the scheduler did not set the default policy name to "default" (STR #1484) - The Zebra CPCL driver did not use the correct righthand margin for the 4" wide label sizes. - Fixed a problem with the parsing of fractional real numbers in PPD files. - Added Spanish localization files (STR #1480) - Fixed localization of a few scheduler messages (STR #1478) - Fixed support for HEAD requests in the scheduler (STR #1481) CHANGES IN CUPS V1.2b2 - Updated the CUPS design description. - Added --enable-32bit and --enable-64bit configure options to allow building of separate 32/64-bit libraries on systems that support both environments (STR #1472) - Various compiler warning fixes. - Fixes for Solaris 10 builds against old GNU TLS and LDAP libraries. - Added a cupsArrayUserData() function to retrieve the user data pointer for an array (useful for typing arrays) - The ppdEmitString() function did not compute the required buffer size properly, leading to dropped characters on the end of the printer commands in pstops and imagetops (STR #1470) CHANGES IN CUPS V1.2b1 - The serial backend now supports Equinox 8-port serial hubs (STR #526) - The IPP backend now supports a compression option to compress print files as they are sent to the remote server (STR #956) - The CUPS browse protocol now supports passing of default options and browse timeout values from the server to the clients (STR #800) - Implicit classes that timed out could cause the scheduler to crash (STR #1439) - Added DragonFly support in local device backends (STR #1362) - Added LDAP printer browsing support (STR #338) - Added official support for printer maintenance commands via the CUPS Command file format and hooks in the printer-type and web interfaces (STR #932) - The HP-GL/2 filter could get in an infinite loop trying to convert HP-PCL files (STR #1415) - CUPS now implements the HTTP/1.1 Expect header (STR #1407) - Options in PPD files are no longer automatically put in an "Extra" group; rather, all options that are not inside an Open/CloseGroup will be placed in the "General" group (STR #1385) - The scheduler now creates a job-uuid attribute that uniquely identifies a job on a network (STR #1410) - The init script now unsets the TMPDIR environment variable to prevent user temporary directories from being used by cupsd accidentally (STR #1424) - Added support for launchd on MacOS X. - Added support for notify_post on MacOS X. - Added support for DBUS on Linux. - All of the Berkeley (except for lpc) and System V commands now support specification of user, host, and port (STR #1028, STR #1029, STR #1087) - The lpmove command now allows you to move all jobs for a given queue (STR #56) - The web interface now supports moving of a job or jobs to another queue (STR #56) - The web interface now provides searching, paging, and changing of the sort/display order of classes, jobs, and printers. - cupsaddsmb now accepts a password on the command-line and supports passwords with special characters (STR #822, STR #1236) - ppdLoad*() no longer tries to "fix" bad characters in UI text (STR #1101) - Printer names can now (reliably) contain Unicode characters (STR #896) - The lpstat command now shows the time and date of the last printer state change instead of the hardcoded "Jan 01 00:00" (STR #659) - The scheduler now adds a job-actual-printer-uri attribute to job objects when printing to a class (STR #116) - The scheduler now logs log file open errors to the system log (STR #1289) - The scheduler now sets the job-originating-user-name to the authenticated username, if available (STR #1318) - The scheduler now only updates the permissions of SSL keys and certificates when they are under the ServerRoot directory (STR #1324) - The rastertodymo driver has been renamed to rastertolabel (a symlink is installed so that existing queues continue to work) and now also supports Zebra's CPCL language. - The lpstat command could show the wrong active job for a printer (STR #1301) - Fixed a potential crash problem in the scheduler when aborting a CGI program (STR #1290) - Added a "cancel all jobs" button to the class and printer web interfaces (STR #1140) - The add-printer web page now shows the set-printer-options page after the printer has been added (STR #690) - The classes web page now provides links to each of the member printers (STR #307) - CUPS now handles HTTP request/response lines up to 32k in length; this is mainly for better cookie support (STR #1274) - Added support for the Apache PassEnv and SetEnv directives to cupsd.conf (STR #853) - Added large file (64-bit) support (STR #541) - Fixed a performance issue with the ippReadIO() implementation (STR #1284) - Fixed a performance issue with the scheduler's implicit class implementation (STR #1283) - The pdftops filter now adds the Title and Creator fields from the PDF file to the PostScript document comments section (STR #539, STR #830) - Added a new cups_array_t and cupsArray*() functions to the CUPS API to support sorted lists of data. - Made the CUPS API library thread-safe (STR #1276) - Added "media" option support for EFI EFMediaType option (STR #902) - Added write buffering to the HTTP code to improve performance (STR #547) - The scheduler now uses the attributes-natural-language attribute to localize banner pages (STR #386) - The scheduler now returns the address that was used to connect to it (STR #1076) - Fixed a problem with N-up printing and OpenOffice (STR #576) - Added support for the GCC position independent executable options (STR #1209) - Added new BrowseLocalProtocols and BrowseRemoteProtocols directives to cupsd.conf, allowing for different browse protocols for local and remote printers (STR #877) - PPD files can now contain strings up to 256k in length (STR #1215) - The pstops filter now supports the IncludeFeature DSC comment (STR #1212) - The pstops filter now disables the setpagedevice procedure when doing N-up printing (STR #1161) - The serial backend now supports "stop=1", "stop=2", "parity=space", and "parity=mark" options (STR #1155) - "make install" no longer overwrites an existing PAM configuration file (STR #1064) - The scheduler now closes all files on startup when run in daemon mode (STR #1009) - Added a new RGBW colorspace to the CUPS raster format (STR #1071) - The pdftops filter now sets the page size based on the media box when not scaling the output (STR #912) - The pdftops filter now supports masked images (STR #281) - The pdftops filter produced large output when rendering PDF files containing lot of repeated images (STR #327) - The pdftops filter now minimizes print processing of PDF files when using the page-ranges option (STR #273) - Updated pdftops filter to Xpdf 3.01. - Added new cupsBackchannelRead() and cupsBackchannelWrite() functions, as well as backchannel support to the parallel, serial, socket, and USB backends (STR #1252) - The parallel and USB backends now treat a "no space available" error as an out-of-paper condition (STR #1225) - The "lpc" command now supports the "status all" command (STR #1004) - ippReadIO() did not read collections properly (STR #1249) - The "make test" script now creates the test files in "/tmp/cups-$USER" instead of "/tmp/$USER" (STR #981) - All backends now abort on error when printing a job to a class - this allows the next printer in the class to print the job (STR #1084) - The scheduler now verifies that a printer supports Letter or A4 media sizes before setting them as the initial default (STR #1250) - The cupstestppd program now flags bad Resolution options (STR #1269) - The USB backend now retries printing when the printer is disconnected or turned off (STR #1267) - Added new httpGetHostname() function to CUPS API, and use it instead of gethostname() so that the web interface will work correctly on systems whose hostname is not the FQDN (STR #1266) - The scheduler now stops printers if the backend for the queue is missing on startup (STR #1265) - The configure script now supports "--disable-library" to disable particular image file format support libraries, even if they are available on the build system (STR #1248) - The IPP backend did not always report on the total number of pages that were printed (STR #1251) - The lpstat program could display garbage date and time values for locales whose date format exceeded 31 characters (STR #1263) - The cupstestppd program would segfault when testing certain broken PPD files (STR #1268) - Dramatically reduced the overhead of implicit classes. - Added new cupsDir*() functions to CUPS API. - Printers can now be published individually for sharing. - Fixed a bug in the scheduler's startup signalling code which caused cupsd to send the SIGUSR1 signal to the init process instead of the original parent process (STR #1258) - Added new on-line help CGI to web interface to provide searchable help. - Devices are now tracked dynamically, with each query doing a new device scan. This eliminates a previous startup delay caused by slow backends and allows new printers to be seen without restarting the server, however it limits the amount of device URI checking that can be done (basically now the scheduler only requires a URI with a method that is a listed backend) - Added new printer auto-detection, server configuration, and log file viewing to the administration web page. - Added new "set allowed users" web interface to set the list of allowed users for a printer or class. - The scheduler, command-line, and web interfaces now limit the list of printers and classes to those accessible by a user. - cupsMarkOptions() now handles more non-standard duplexing options and choices (STR #915) - cups-lpd now honors remote banner requests with the "standard" banner whenever a printer does not have one defined (STR #1220) - The scheduler's denial-of-service checks did not work properly with IPv6 addresses (STR #1134) - The lp and lpr commands did not error out properly when they were unable to write to a temporary file (STR #1129) - The pstops filter did not handle Adobe-specific comments in Windows NT driver output (STR #1085) - "lpstat -l -p" incorrectly reported the printer interface (STR #936) - The web interface now operates exclusively with the UTF-8 encoding, and sends the appropriate character set and header information to the web browser (STR #919, STR #1007) - Added a "set allowed users" interface to the web interface so that you can set the list of allowed or denied users/groups for a printer or class. - Disallow the "#" character in printer names, since it has special meaning in the shell, config files, and in URIs (STR #917, STR #1202) - Added a new application/x-csource MIME type, and support for it to the texttops filter so that you can pretty print plain text files without the C/C++ keywords being highlighted. - The pdftops filter did not compile with GCC 4.0 (STR #1226) - The texttops filter did not highlight preprocessor directives followed by a tab properly. - HP PJL output now uses both JOB DISPLAY and RDYMSG commands to show the current job on the printer's display (STR #1218) - Local authentication certificates are now stored in /var/run/cups/certs by default instead of /etc/cups/certs (STR #1211) - Backends now use "&" to separate options in device URIs; "+" is still recognized but is deprecated (STR #842) - The USB backend no longer supports the usb:/dev/foo format on systems that support device ID queries. - Forced classification markings did not work when the job-sheets parameters were "none,none". - "lpstat -l -p" incorrectly showed all users as allowed, even if the queue was restricted to certain users (STR #801) - The scheduler now automatically detects SSL/TLS clients without using the SSLPort/SSLListen directives. - The CUPS API and scheduler no longer support SSLv2- encrypted connections. - Updated the cupsaddsmb utility to correctly export the CUPS driver for Windows. - Fixed a signal-handling bug in httpRead() which ultimately caused the server to print multiple copies when it was busy (STR #1184) - The cupsFile API now uses the O_APPEND option when opening files in append mode (STR #990) - The md5.h header and md5_* functions are now officially private and have been renamed to avoid conflicts with other implementations with the same name. - The pdftops filter incorrectly embedded some Type1 fonts (STR #1093) - The scheduler didn't detect a closed connection in the middle of an IPP request (STR #1153) - The scheduler could block trying to read the job status if there was input pending and the job was cancelled in the same input cycle (STR #1157) - The scheduler could crash when deleting a class due to infinite recursion. - Updated the Zebra ZPL label printer driver to use the run-length encoding and support more options. - Updated serial backend to scan for /dev/ttyC* as well as /dev/ttyc* for Cyclades serial ports (STR #1049) - The scheduler could hang reading the job status under certain circumstances (STR #1068) - The USB backend termination signal code was inverted (STR #1046) - Moved enable and disable commands to sbindir to be consistent. - Added new cupsRasterInterpretPPD() function for RIP filters to setup the raster page header from PostScript commands in a PPD file. - The CUPS browsing protocol now offers a "delete" bit to remove printers as soon as they are deleted on the server or as soon as the server shuts down gracefully (STR #793) - The CUPS_SERVER and ServerName directives (client.conf and ~/.cupsrc) may now contain names of the form "server:port" and "/path/to/domain/socket". - The "cancel -u user" command now works for ordinary users (STR #751) - Added test run support to "make test" target (STR #64) - Added domain socket support (STR #656) - Added BrowseLocalOptions directive to allow the administrator to add printer URI options to the browse URI, e.g. "encryption=required" (STR #732) - Added BrowseRemoteOptions directive to allow the administrator to add standard URI options to the remote printer URI, e.g. "encryption=required" (STR #732) - Now put "-I.." compiler option in front of all others to ensure that local CUPS headers are used before installed headers (STR #437) - New cupsLangPrintf() and cupsLangPuts() for localized interfaces. - Now support custom attributes and extended options in PPD files. - Now provide functions to save PPD files. - New policy mechanism allows per-operation and per-printer control over what users and groups are allowed to do various IPP operations. - New error policy mechanism to control how aborted backend errors are handled by the scheduler (abort-job, retry-job, requeue-job, stop-printer) - Updated the printer test page with a better color wheel and a separate grayscale ramp. - A single backend process is now run to send all print data for a job. - Backends and filters can now send and receive backchannel data over file descriptor 3. - Updated the raster stream format to support more user-defined attributes and to do compression of the page data. cups-2.2.7/CHANGES-1.3.txt000664 000765 000024 00000112370 13255074424 015267 0ustar00msweetstaff000000 000000 CHANGES-1.3.txt --------------- CHANGES IN CUPS V1.3.11 - The scheduler did not prevent nested classes (STR #3211) - The scheduler did not reprint processing jobs that were moved to another destination (STR #3222) - The scheduler did not reset the current job file when stopping a printer (STR #3226) - The scheduler did not handle POSTs to custom CGIs properly (STR #3221) - The pdftops filter did not print landscape PDF pages properly (STR #2881) - The scheduler did not handle partial header lines properly from CGI programs (STR #3194) - The web interface could hang on OpenBSD (STR #3176, STR #3196) - The scheduler and cupsfilter utility did not handle rules starting with a negation operator properly (STR #3160) - The scheduler and cupsfilter utility would crash with certain MIME .types rules (STR #3159) - httpSetField wasn't bracketing IPv6 numeric addresses for the Host: field (STR #3164) - The ServerName, if specified, was not treated as a valid alias for the local system (STR #3167) - "make epm" did not work (STR #3166) - "lpstat -h server" showed non-shared printers (STR #3147) - "make check" did not work on Linux (STR #3161) CHANGES IN CUPS V1.3.10 - Documentation fixes (STR #2994, STR #2995, STR #3008, STR #3056, STR #3057) - SECURITY: The scheduler now protects against DNS rebinding attacks (STR #3118) - SECURITY: Fixed TIFF integer overflow in image filters (STR #3031) - The scheduler did not support the job-hold-until attribute with the Restart-Job operation (STR #3130) - SECURITY: The PNG image reading code did not validate the image size properly, leading to a potential buffer overflow (STR #2974) - The rastertohp driver did not set the 1-sided printing mode when needed (STR #3131) - Now use a wrapper program instead of our fork of the Xpdf code to support printing of PDF files. The new wrapper supports using Xpdf, poppler, or Ghostscript to convert PDF files to PostScript (STR #3129) - Long job names caused problems with some PJL printers (STR #3125) - The lpq command did not work when showing all destinations (STR #3117) - The scheduler used a codeset name of UTF8 which is not supported on Solaris (STR #3113) - cupsGetJobs() did not work with a NULL destination (STR #3107) - Fixed a localization problem for option choices (incorrectly) named "Custom" (STR #3106) - The fallback OpenSSL random number seeding would not work (STR #3079) - The scheduler might miss a child signal, causing high CPU usage. - The scheduler did not enforce quotas after the job history was unloaded (STR #3078) - The job-k-limit, job-page-limit, and job-quota-period attributes could not be set using the lpadmin command (STR #3077) - httpSeparateURI() did not error out on URIs with a missing port number after a colon. - Fixed a Valgrind-detected initialization error when creating a missing directory on startup. - The scheduler did not always read all of the HTTP headers from a CGI script/program. - The scheduler did not always set the "air" property in Bonjour/DNS-SD registrations. - The scheduler incorrectly compared Mac OS X UUIDs for access control, preventing access in certain configurations. - The IPP backend incorrectly reset the required authentication to Kerberos when authentication failed. - The scheduler no longer looks up the local hostname by default; turn on hostname lookups to restore the previous behavior. - The scheduler did not always load MIME type rules correctly (STR #3059) - The test page did not format correctly on A4 paper (STR #3060) - The web interface sometimes incorrectly redirected users to 127.0.0.1 (STR #3022) - cupsPrintFile*() did not send the document filename for single file submissions (STR #3055) - The scheduler did not update the member-names attribute when removing the last printer from a class. - The scheduler did not report PPD Products with parenthesis in them properly (STR #3046) - The wrong italic fonts were listed in the UTF-8 charset file for the text filter. - The backends did not return an OK status for the CUPS_SC_CMD_GET_BIDI side-channel command (STR #3029) - The scheduler did not purge jobs that were missing a time-at-creation attribute, indicating a bad job control file (STR #3030) - The "-o job-hold-until=week-end" option did not work properly (STR #3025) - The Solaris USB printer device does not support select or poll (STR #3028) - The scheduler would crash if you exceeded the MaxSubscriptions limit. - The lp "-H immediate" option did not specify that the job should not be held (STR #3013) - The scheduler did not support the "Connection: close" HTTP header (STR #3010) - The mailto notifier didn't terminate messages properly (STR #3011) - Backends could spin trying to read back-channel data (STR #3001) - The HP-GL/2 filter was using the wrong default colors (STR #2966) - The scheduler incorrectly allowed Get-Jobs operations without a printer-uri (STR #2996) - The compression option was not being encoded properly (STR #2997) - Added a missing character map for JIS-X0213/ShiftJIS. - The scheduler now rejects ATTR: messages with empty values. - The scheduler could consume all CPU handling closed connections (STR #2988) - Fixed some configure script bugs with rc/xinetd directories (STR #2970) - The Epson sample driver PPDs contained errors (STR #2979) CHANGES IN CUPS V1.3.9 - SECURITY: The HP-GL/2 filter did not range check pen numbers (STR #2911) - SECURITY: The SGI image file reader did not range check 16-bit run lengths (STR #2918) - SECURITY: The text filter did not range check cpi, lpi, or column values (STR #2919) - Documentation updates (STR #2904, STR #2944) - The French web admin page was never updated (STR #2963) - The IPP backend did not retry print jobs when the printer reported itself as busy or unavailable (STR #2951) - The "Set Allowed Users" web interface did not handle trailing whitespace correctly (STR #2956) - The PostScript filter did not work with Adobe applications using custom page sizes (STR #2968) - The Mac OS X USB backend did not work with some printers that reported a bad 1284 device ID. - The scheduler incorrectly resolved the client connection address when HostNameLookups was set to Off (STR #2946) - The IPP backend incorrectly stopped the local queue if the remote server reported the "paused" state. - The cupsGetDests() function did not catch all types of request errors. - The scheduler did not always log "job queued" messages (STR #2943) - The scheduler did not support destination filtering using the printer-location attribute properly (STR #2945) - The scheduler did not send the server-started, server-restarted, or server-stopped events (STR #2927) - The scheduler no longer enforces configuration file permissions on symlinked files (STR #2937) - CUPS now reinitializes the DNS resolver on failures (STR #2920) - The CUPS desktop menu item was broken (STR #2924) - The PPD parser was too strict about missing keyword values in "relaxed" mode. - The PostScript filter incorrectly mirrored landscape documents. - The scheduler did not correctly update the auth-info-required value(s) if the AuthType was Default. - The scheduler required Kerberos authentication for all operations on remote Kerberized printers instead of just for the operations that needed it. - The socket backend could wait indefinitely for back- channel data with some devices. - PJL panel messages were not reset correctly on older printers (STR #2909) - cupsfilter used the wrong default path (STR #2908) - Fixed address matching for "BrowseAddress @IF(name)" (STR #2910) - Fixed compiles on AIX. - Firefox 3 did not work with the CUPS web interface in SSL mode (STR #2892) - Custom options with multiple parameters were not emitted correctly. - Refined the cupstestppd utility. - ppdEmit*() did not support custom JCL options (STR #2889) - The cupstestppd utility incorrectly reported missing "en" base translations (STR #2887) CHANGES IN CUPS V1.3.8 - Documentation updates (STR #2785, STR #2861, STR #2862) - The scheduler did not add the ending job sheet when the job was released. - The IPP backend did not relay marker-* attributes. - The CUPS GNOME/KDE menu item was not localized for Chinese (STR #2880) - The CUPS GNOME/KDE menu item was not localized for Japanese (STR #2876) - The cupstestppd utility reported mixed line endings for Mac OS and Windows PPD files (STR #2874) - The pdftops filter did not print landscape orientation PDF pages correctly on all printers (STR #2850) - The scheduler did not handle expiring of implicit classes or their members properly, leading to a configuration where one of the members would have a short name (STR #2766) - The scheduler and cupstestppd utilities did not support cupsFilter and cupsPreFilter programs with spaces in their names (STR #2866) - Removed unused variables and assignments found by the LLVM "clang" tool. - Added NULL checks recommended by the LLVM "clang" tool. - The scheduler would crash if you started a printer that pointed to a backend that did not exist (STR #2865) - The ppdLocalize functions incorrectly mapped all generic locales to country-specific locales. - The cups-driverd program did not support Simplified Chinese or Traditional Chinese language version strings (STR #2851) - Added an Indonesian translation (STR #2792) - Fixed a timing issue in the backends that could cause data corruption with the CUPS_SC_CMD_DRAIN_OUTPUT side-channel command (STR #2858) - The scheduler did not support "HostNameLookups" with all of the boolean names (STR #2861) - Fixed a compile problem with glibc 2.8 (STR #2860) - The scheduler incorrectly filtered out queues with ACLs and authentication. - The PostScript filter did not support %%IncludeFeature lines in the page setup section of each page (STR #2831) - The scheduler did not generate printer-state events when the default printer was changed (STR #2764) - cupstestppd incorrectly reported a warning about the PPD format version in some locales (STR #2854) - cupsGetPPD() and friends incorrectly returned a PPD file for a class with no printers. - The member-uris values for local printers in a class returned by the scheduler did not reflect the connected hostname or port. - The CUPS PHP extension was not thread-safe (STR #2828) - The scheduler incorrectly added the document-format-default attribute to the list of "common" printer attributes, which over time would slow down the printing system (STR #2755, STR #2836) - The cups-deviced and cups-driverd helper programs did not set the CFProcessPath environment variable on Mac OS X (STR #2837) - "lpstat -p" could report the wrong job as printing (STR #2845) - The scheduler would crash when some cupsd.conf directives were missing values (STR #2849) - The web interface "move jobs" operation redirected users to the wrong URL (STR #2815) - The Polish web interface translation contained errors (STR #2815) - The scheduler did not report PostScript printer PPDs with filters as PostScript devices. - The scheduler did not set the job document-format attribute for jobs submitted using Create-Job and Send-Document. - cupsFileTell() did not work for log files opened in append mode (STR #2810) - The scheduler did not set QUERY_STRING all of the time for CGI scripts (STR #2781, STR #2816) - The scheduler now returns an error for bad job-sheets values (STR #2775) - Authenticated remote printing did not work over domain sockets (STR #2750) - The scheduler incorrectly logged errors for print filters when a job was canceled (STR #2806, #2808) - The scheduler no longer allows multiple RSS subscriptions with the same URI (STR #2789) - The scheduler now supports Kerberized printing with multiple server names (STR #2783) - "Satisfy any" did not work in IPP policies (STR #2782) - The CUPS imaging library would crash with very large images - more than 16Mx16M pixels (STR #2805) - The PNG image loading code would crash with large images (STR #2790) - The scheduler did not limit the total number of filters. - The scheduler now ensures that the RSS directory has the correct permissions. - The RSS notifier did not quote the feed URL in the RSS file it created (STR #2801) - The web interface allowed the creation and cancellation of RSS subscriptions without a username (STR #2774) - Increased the default MaxCopies value on Mac OS X to 9999 to match the limit imposed by the print dialog. - The scheduler did not reject requests with an empty Content-Length field (STR #2787) - The scheduler did not log the current date and time and did not escape special characters in request URIs when logging bad requests to the access_log file (STR #2788) CHANGES IN CUPS V1.3.7 - CVE-2008-0047: cgiCompileSearch buffer overflow (STR #2729) - CVE-2008-1373: CUPS GIF image filter overflow (STR #2765) - Updated the "make check" tests to do a more thorough automated test. - cups-driverd complained about missing directories (STR #2777) - cupsaddsmb would leave the Samba username and password on disk if no Windows drivers were installed (STR #2779) - The Linux USB backend used 100% CPU when a printer was disconnected (STR #2769) - The sample raster drivers did not properly handle SIGTERM (STR #2770) - The scheduler sent notify_post() messages too often on Mac OS X. - Kerberos access to the web interface did not work (STR #2748) - The scheduler did not support "AuthType Default" in IPP policies (STR #2749) - The scheduler did not support the "HideImplicitMembers" directive as documented (STR #2760) - "make check" didn't return a non-zero exit code on error (STR #2758) - The scheduler incorrectly logged AUTH_foo environment variables in debug mode (STR #2751) - The image filters inverted PBM files (STR #2746) - cupsctl would crash if the scheduler was not running (STR #2741) - The scheduler could crash when printing using a port monitor (STR #2742) - The scheduler would crash if PAM was broken (STR #2734) - The image filters did not work with some CMYK JPEG files produced by Adobe applications (STR #2727) - The Mac OS X USB backend did not work with printers that did not report a make or model. - The job-sheets option was not encoded properly (STR #2715) - The scheduler incorrectly complained about missing LSB PPD directories. CHANGES IN CUPS V1.3.6 - Documentation updates (STR #2646, STR #2647, STR #2649) - Fixed a problem with the web interface "Use Kerberos Authentication" check box (STR #2703) - The scheduler unconditionally overwrote the printer-state- message with "process-name failed" when a filter or backend failed, preventing a useful error message from being shown to the user. - Policies on CUPS-Move-Job didn't work as expected (STR #2699) - The configure script only supported D-BUS on Linux (STR #2702) - The scheduler did not support (STR #2701) - The scheduler did not reset the job-hold-until attribute after a job's hold time was reached. - The scheduler did not support printer supply attributes (STR #1307) - The Kerberos credentials provided by some Windows KDCs were still too large - now use a dynamic buffer to support credentials up to 64k in size (STR #2695) - Printing a test page from the web interface incorrectly defaulted to the "guest" user (STR #2688) - The cupsEncodeOptions2() function did not parse multiple- value attribute values properly (STR #2690) - The scheduler incorrectly sent printer-stopped events for status updates from the print filters (STR #2680) - The IPP backend could crash when handling printer errors (STR #2667) - Multi-file jobs did not print to remote CUPS servers (STR #2673) - The scheduler did not provide the Apple language ID to job filters. - Kerberos authentication did not work with the web interface (STR #2606, STR #2669) - The requesing-user-name-allowed and -denied functionality did not work for Kerberos-authenticated usernames (STR #2670) - CUPS didn't compile on HP-UX 11i (STR #2679) - cupsEncodeOptions2() did not handle option values like "What's up, doc?" properly. - Added lots of memory allocation checks (Fortify) - The scheduler would crash if it was unable to add a job file (Fortify) - ppdOpen*() did not check all memory allocations (Coverity) - ippReadIO() did not check all memory allocations (Coverity) - The PostScript filter did not detect read errors (Coverity) - The scheduler did not check for a missing job-sheets-completed attribute when sending an event notification (Coverity) - "Set Printer Options" might not work with raw queues (Coverity) - cupsRasterInterpretPPD() could crash on certain PostScript errors (Coverity) - The USB backend did not check for back-channel support properly on all systems (Coverity) - Fixed memory leaks in the GIF and PNM image loading code (Coverity) - Removed some dead code in the CUPS API and scheduler (Coverity) - Fixed two overflow bugs in the HP-GL/2 filter (Coverity) - Fixed another ASN1 string parsing bug (STR #2665) - The RSS notifier directory was not installed with the correct permissions. - The standard CUPS backends could use 100% CPU while waiting for print data (STR #2664) - Filename-based MIME rules did not work (STR #2659) - The cups-polld program did not exit if the scheduler crashed (STR #2640) - The scheduler would crash if you tried to set the port-monitor on a raw queue (STR #2639) - The scheduler could crash if a polled remote printer was converted to a class (STR #2656) - The web interface and cupsctl did not correctly reflect the "allow printing from the Internet" state (STR #2650) - The scheduler incorrectly treated MIME types as case- sensitive (STR #2657) - The Java support classes did not send UTF-8 strings to the scheduler (STR #2651) - The CGI code did not handle interrupted POST requests properly (STR #2652) - The PostScript filter incorrectly handled number-up when the number of pages was evenly divisible by the number-up value. - The PDF filter incorrectly filtered pages when page-ranges and number-up were both specified (STR #2643) - The IPP backend did not handle printing of pictwps files to a non-Mac CUPS server properly. - The scheduler did not detect network interface changes on operating systems other than Mac OS X (STR #2631) - The scheduler now logs the UNIX error message when it is unable to create a request file such as a print job. - Added support for --enable-pie on Mac OS X. CHANGES IN CUPS V1.3.5 - The SNMP backend did not check for negative string lengths (STR #2589) - The scheduler incorrectly removed auth-info attributes, potentially leading to a loss of all options for a job. - The scheduler stopped sending CUPS browse packets on a restart when using fixed addresses (STR #2618) - Fixed PDF filter security issues (CVE-2007-4352 CVE-2007-5392 CVE-2007-5393) - Changing settings would always change the DefaultAuthType and Allow lines (STR #2580) - The scheduler would crash when submitting an undefined format file from Samba with LogLevel debug2 (STR #2600) - The scheduler did not use poll() when epoll() was not supported by the running kernel (STR #2582) - Fixed a compile problem with Heimdal Kerberos (STR #2592) - The USB backend now retries connections to a printer indefinitely rather than stopping the queue. - Printers with untranslated JCL options were not exported to Samba correctly (STR #2570) - The USB backend did not work with some Minolta USB printers (STR #2604) - The strcasecmp() emulation code did not compile (STR #2612) - The scheduler would crash if a job was sent to an empty class (STR #2605) - The lpc command did not work in non-UTF-8 locales (STR #2595) - Subscriptions for printer-stopped events also received other state changes (STR #2572) - cupstestppd incorrectly reported translation errors for the "en" locale. - ppdOpen() did not handle custom options properly when the Custom attribute appeared before the OpenUI for that option. - The scheduler could crash when deleting a printer or listing old jobs. - The Mac OS X USB backend did not allow for requeuing of jobs submitted to a class. - lpmove didn't accept a job ID by itself. - The scheduler incorrectly removed job history information for remote print jobs. - The scheduler incorrectly sent the "com.apple.printerListChanged" message for printer state changes. - The PostScript filter drew the page borders (when enabled) outside the imageable area. - The LPD and IPP backends did not default to the correct port numbers when using alternate scheme names. - The scheduler incorrectly deleted hardwired remote printers on system sleep. - The scheduler would abort if a bad browse protocol name was listed in the cupsd.conf file. - The online cupsd.conf help file incorrectly showed "dns-sd" instead of "dnssd" for Bonjour sharing. - The scheduler could crash changing the port-monitor value. - The scheduler generated CoreFoundation errors when run as a background process. - When printing with number-up > 1, it was possible to get an extra blank page. CHANGES IN CUPS V1.3.4 - Documentation updates (STR #2560, STR #2563, STR #2569) - CUPS now maps the "nb" locale to "no" on all platforms (STR #2575) - CUPS did not work with a Windows 2003 R2 KDC (STR #2568) - ippReadIO() could read past the end of a buffer (STR #2561) - The scheduler would crash on shutdown if it was unable to create a Kerberos context. - Multiple AuthTypes in cupsd.conf did not work (STR #2545) - The snmp.conf file referenced the wrong man page (STR #2564) - The cupsaddsmb program didn't handle domain sockets properly (STR #2556) - The scheduler now validates device URIs when adding printers. - Updated httpSeparateURI() to support hostnames with the backslash character. - Updated the Japanese localization (STR #2546) - The parallel backend now gets the current IEEE-1284 device ID string on Linux (STR #2553) - The IPP backend now checks the job status at variable intervals (from 1 to 10 seconds) instead of every 10 seconds for faster remote printing (STR #2548) - "lpr -p" and "lpr -l" did not work (STR #2544) - Compilation failed when a previous version of CUPS was installed and was included in the SSL include path (STR #2538) - The scheduler did not reject requests with charsets other than US-ASCII or UTF-8, and the CUPS API incorrectly passed the locale charset to the scheduler instead of UTF-8 (STR #2537) - cups-deviced did not filter out duplicate devices. - The AppleTalk backend incorrectly added a scheme listing when AppleTalk was disabled or no printers were found. - The PostScript filter generated N^2 copies when the printer supported collated copies and user requested reverse-order output. - The scheduler did not reprint all of the files in a job that was held. - The scheduler did not update the printcap file after removing stale remote queues. - The cupsd.conf man page incorrectly referenced "AuthType Kerberos" instead of "AuthType Negotiate". CHANGES IN CUPS V1.3.3 - The scheduler did not use the attributes-natural-language attribute when passing the LANG environment variable to cups-deviced or cups-driverd. - The scheduler did not use the printer-op-policy when modifying classes or printers (STR #2525) - The auth-info-required attribute was not always updated for remote queues that required authentication. - The German web interface localization contained errors (STR #2523) - The Swedish localization contained errors (STR #2522) CHANGES IN CUPS V1.3.2 - The 1.3.1 release was incorrectly created from the 1.4.x source tree (STR #2519) - Added support for 32/64-bit libraries on HP-UX (STR #2520) - The scheduler incorrectly used portrait as the default orientation (STR #2513) - The scheduler no longer writes the printcap file for every remote printer update (STR #2512) - Remote raw printing with multiple copies did not work (STR #2518) - Updated the configure script to require at least autoconf 2.60 (STR #2515) - Some gzip'd PPD files were not read in their entirety (STR #2510) CHANGES IN CUPS V1.3.1 - Documentation updates. - The USB backend on Mac OS X could hang if the driver and printer did not match. - Delegated Kerberos credentials were not working. - "make distclean" incorrectly removed the edit-config.tmpl files (STR #2508) - Fix compile problem on HP-UX (STR #2501) - The cupstestppd utility now tests for resolutions greater than 99999 DPI to detect a missing "x" between the X and Y resolutions. - Fixed many problems in the various translations and added a new "checkpo" utility to validate them. - The cupstestppd utility now tests the custom page size code for CUPS raster drivers. - cupsLangDefault() did not attempt to return a language that was supported by the calling application. - If a remote printer stopped while a job was being sent, the local queue would also get stopped and the job re-queued, resulting in duplicate prints in some cases. - A few Apple-specific job options needed to be omitted when printing a banner page. - The new peer credential support did not compile on FreeBSD (STR #2495) - Direct links to help files did not set the current section so the table-of-contents was not shown. - The configure script did not support --localedir=foo (STR #2488) - The backends were not displaying their localized messages. - CUPS-Authenticate-Job did not require Kerberos authentication on queues protected by Kerberos. - The Zebra ZPL driver did not work with Brady label printers (STR #2487) - Norwegian wasn't localized on Mac OS X. - getnameinfo() returns an error on some systems when DNS is not available, leading to numerous problems (STR #2486) - The cupsfilter command did not work properly on Mac OS X. - The scheduler makefile contained a typo (STR #2483) - The TBCP and BCP port monitors did not handle the trailing CTRL-D in some PostScript output properly. - Fixed the localization instructions and German template for the "Find New Printers" button (STR #2478) - The web interface did not work with the Chinese localization (STR #2477) - The web interface home page did not work for languages that were only partially localized (STR #2472) - Updated the Spanish web interface localization (STR #2473) - ppdLocalize() did not work for country-specific localizations. CHANGES IN CUPS V1.3.0 - The scheduler did not handle out-of-file conditions gracefully when accepting new connections, leading to heavy CPU usage. - The scheduler did not detect ServerBin misconfigurations (STR #2470) - "AuthType Default" did not work as expected when the "DefaultAuthType foo" line appeared after it in the cupsd.conf file. - The on-line help did not describe many common printing options (STR #1846) - The IPP backend did not return the "auth required" status when printing to a Kerberos-protected queue. - The scheduler was not looking in the correct directories for LSB PPD files (STR #2464) - Changed references to ESP Ghostscript to GPL Ghostscript (STR #2463) - The PostScript filter did not cleanly terminate when the job was canceled or stopped. - Fixed generation of Kerberos credentials for remote printing. Note that this requires a recent version of MIT Kerberos with a working krb5_cc_new_unique() function or Heimdal Kerberos. - Added Portuguese and updated Italian message catalogs. CHANGES IN CUPS V1.3rc2 - Added more range checking to the pdftops filter. - The scheduler would crash if a remote IPP queue was stopped (STR #2460) - The scheduler did not allow "DefaultAuthType None". CHANGES IN CUPS V1.3rc1 - Updated the German localization (STR #2443) - cupsAdminGetServerSettings() did not handle properly. - When lprm and cancel are run with no job ID, they now will cancel the first stopped job if no pending or processing jobs are left in the queue. - The scheduler now logs successful print jobs, filter failures, and the job file types at the default log level (STR #2458) - The scheduler now logs the usernames it is using for authorization at LogLevel debug instead of debug2 (STR #2448) - Added Intellitech Intellibar and Zebra CPCL PPDs to the list of installed PPDs. - Added 6" and 8" wide label sizes for the Zebra ZPL Label Printer driver (STR #2442) - The cupsaddsmb program and web interface now support exporting of 64-bit Windows drivers, when available (STR #2439) - Moving a job that was printing did not stop the job on the original printer (STR #2262) - The cups-lpd mini-daemon did not work on Mac OS X server. - Added httpGetAuthString() and httpSetAuthString() APIs to get and set the current (cached) authorization string to use for HTTP requests. - Updated the default cupsd.conf policy to list the "administrative" operations separately from the "printer control" operations so that it is easier to define a group of users that are "printer operators". - The web interface now pulls the default cupsd.conf file from cupsd.conf.default in the CUPS config directory. - Added a help file for using Kerberos with CUPS. - The scheduler now strips the "@KDC" portion of Kerberos usernames since those usernames typically do not appear in the group membership lists used by CUPS. - cupsMarkOptions() could (incorrectly) leave multiple option choices marked. - Backends could (incorrectly) run as root during discovery (STR #2454) - Avahi is now supported for DNS-SD (Bonjour) printer sharing (STR #2455) - The default cupsd.conf file had typos and old operation names (STR #2450) - The scheduler now erases authentication cache files using the 7-pass US DoD algorithm. - Delegated Kerberos credentials (proxy authentication) did not work. - The filter makefile did not optimize the libcupsimage.2.dylib with a sectorder file. - The IPP backend incorrectly wrote an empty printer message when processing the "none" state reason. - The USB backend could deadlock on Mac OS X while performing a side-channel command. - The scheduler did not prevent remote queues from being shared/published. - The scheduler did not remove the temporary request file on authentication errors. - ppdLocalizeIPPReason() did not handle "scheme:" schemes or "file" URLs. - ppdLocalizeIPPReason() was not exported on Mac OS X. CHANGES IN CUPS V1.3b1 - Copyright updates - CUPS is now owned by Apple Inc. - Documentation updates (STR #1775, STR #2027, STR #2130, STR #2131, STR #2263, STR #2356, STR #2397) - Added new cupsfilter utility (STR #1734) - Added new job-printer-state-message and job-printer-state-reasons attributes to jobs (STR #2418) - Added LDAP+SSL support (STR #1967) - CUPS now supports authentication via peer credentials over domain sockets (STR #2242, STR #2277) - The CUPS sample driver PPDs are now generated by the PPD compiler and include all of the localized languages by default (STR #2164) - You can now specify "AuthType Default" in the cupsd.conf file to use the default authentication defined by the DefaultAuthType directive. - The SNMP backend no longer adds a default Address line when none is specified in the snmp.conf file; this allows the backend to be easily disabled as needed (STR #2434) - Added a new cupsctl command for doing basic changes to the cupsd.conf file (STR #1777) - Added a new ppdLocalizeIPPReason() function to get the localized text/URI for a given IPP reason keyword for a driver. - Removed the deskjet2.ppd driver, as it only worked with a very small subset of HP DeskJet printers and was confusing to users. The rastertohp driver still supports the deskjet2.ppd options for existing queues. - The scheduler did not add a trailing banner page if a client did not specify the last document in a job (STR #1711) - The scheduler did not report Bonjour shared printers as remote printers (STR #2384) - Added new -R and -W options to the cupstestppd program for greater control over the testing of PPDs. - Added a new cupsGetServerPPD() function for getting an available PPD from the server (STR #2334) - Added a new cupsDoIORequest() function for reading and writing files via IPP requests (STR #2334) - Added a new CUPS_GET_PPD operation for getting an available PPD file on the server (STR #2334) - CUPS_GET_PPDS now reports multiple ppd-product values based on the PPD ModelName and Product strings (STR #2334, STR #2383) - CUPS_GET_PPDS now reports the PSVersion attributes from a PPD file in the ppd-psversion attribute (STR #2334) - CUPS_GET_PPDS now reports the cupsModelNumber attribute from a PPD file in the ppd-model-number attribute (STR #2383) - CUPS_GET_PPDS now reports a driver type string in the ppd-type attribute based on the cupsFax and cupsFilter attributes in a PPD file (STR #2383) - Added a new printer attribute called "cups-version" which reports the version of CUPS that is running (STR #2240) - backendRunLoop() now aborts immediately on SIGTERM if no data has been written yet (STR #2103) - Due to poor IPP support from the vendors, the SNMP backend no longer tries IPP connections; instead, it now uses a lookup file with fallback to port 9100 (socket://address) and 515 (lpd://address) printing (STR #2035, STR #2354) - The scheduler now recreates the CUPS log directory as needed (STR #2353) - cupsLangDefault() now maps new-style Apple locale names to the traditional ll_CC form (STR #2357) - Add new cupsArrayNew2() API to support hashed lookups of array elements (STR #2358) - ppdConflicts() optimizations (STR #2358) - The cupstestppd program now tests for existing filters, icons, profiles, and dialog extensions (STR #2326) - The web interface no longer lists new printers on the main administration page. Instead, a new "List Available Printers" button is provided that shows a separate page with the list of printers. - The web interface now supports setting the banner and policy options on raw printers and classes (STR #2238) - The socket backend now reads any pending back-channel data before shutting down the socket (STR #2325) - Added a new ErrorPolicy directive in the cupsd.conf file (STR #1871) - Printers that use JCL options are now exported to Samba correctly (STR #1985) - The IPP backend now relays printer-state-message values from the server to the client (STR #2109) - Added support for the PWG printer-alert and printer-alert-description attributes (STR #2088) - Added support for LPD "stream" mode (STR #2036) - The scheduler now reports the PostScript product string from PPD files in CUPS-Get-PPDs responses (STR #1900) - Raw printing with queues pointing to the file pseudo- device and multiple files and/or banners now works (STR #1933) - Added new public cupsAdminGetServerSettings() and cupsAdminSetServerSettings() APIs. - Added new "makebuttons" script in the "tools" directory for creating web interface buttons (STR #2231) - Added support for DNS-SD (aka "Bonjour") printer sharing (STR #1171) - Job operations (cancel, hold, release, etc.) from the web interface now return back to the original page (STR #2239) - The classes or printers list is now shown after a successful deletion from the web interface (STR #1999) - The default configuration now allows browse packets from any address (STR #2008) - The web interface now provides an "allow printing from the Internet" check box (STR #1897) - The notify-events-default and notify-lease-duration-default attributes can now be set (STR #1671) - Server-side default options are now sent to clients when the "printer-defaults" attribute group is requested (STR #1923) - Added support for Linux "relro" linker option (STR #1614) - CUPS now validates the number-up option value (STR #1329) - The on-line help now provides better search capabilities (STR #1701) - The web interface "Add This Printer" button now allows you to change the printer name, description, and location (STR #1646) - Added support for Mac OS X authorization services (STR #2206) - Added support for driver-specific pre-filters (STR #2108) - Added a new side-channel API for drivers and backends for basic device control and information queries (STR #1898) - The scheduler now uses poll(), epoll(), or /dev/kqueue instead of select() when possible (STR #1261) - Added new cupsArrayGetIndex() and cupsArrayGetInsert() functions to get the current index and insertion positions of an array. - Added a new --with-max-copies configure option (STR #2090) - Added new cupsRemoveDest() and cupsSetDefaultDest() functions. - Added support for cupsPJLCharset attribute in PPD files which specifies the character set that is used in PJL strings (STR #1969) - Moved the definition of the (private) _http_s structure to http-private.h; code that directly accesses the http_t members will no longer compile! - Added support for setting the document-format-default attribute on a per-printer basis. - Added support for IntelliBar label printers. cups-2.2.7/CHANGES-1.4.txt000664 000765 000024 00000120423 13255074424 015266 0ustar00msweetstaff000000 000000 CHANGES-1.4.txt --------------- CHANGES IN CUPS V1.4.8 - The scheduler would delete job data files when restarted (STR #3880) - The network backends could crash if a printer returned a value of 0 for the maximum capacity for a supply (STR #3875) CHANGES IN CUPS V1.4.7 - Documentation changes (STR #3710, STR #3720, STR #3745, STR #3750, STR #3757, STR #3758, STR #3782, STR #3826, STR #3829, STR #3837) - Web interface fixes (STR #3412, STR #3345, STR #3455, STR #3707, STR #3755, STR #3769, STR #3783) - Configure script fixes (STR #3659, STR #3691) - Compilation fixes (STR #3718, STR #3771, STR #3774) - The imageto* filters could crash with bad GIF files (STR #3867) - The scheduler might leave old job data files in the spool directory (STR #3795) - CUPS did not work with locales using the ASCII character set (STR #3832) - httpAddrString() did not return a URI-style IPv6 numeric address (STR #3814) - Fixed an issue when reading compressed CUPS raster streams (STR #3812) - Fixed an issue with PostScript printer auto-configuration (STR #3443) - Fixed some compatibility issues with the libusb-based USB backend (STR #3799) - The network backends no longer try to collect SNMP supply and status information for raw queues (STR #3809) - The DBUS notifier did not report job state changes (STR #3805) - The scheduler did not always report that the "normal" print-quality value was supported (STR #3803) - The gziptoany filter did not report the correct error if it was unable to write the uncompressed document to the next filter or backend in the chain (STR #3797) - The Epson and Oki 9-pin drivers had a bad resolution option (STR #3798) - The scheduler did not always register the correct default ICC profile on Mac OS X. - The scheduler did not use the job owner when authorizing access for the CUPS-Get-Document operation, preventing non-admins from accessing their own jobs. - CUPS did not work with some printers that incorrectly implemented the HTTP/1.1 standard (STR #3778, STR #3791) - The scheduler did not retry fax jobs properly. - The scheduler now recognizes an empty cupsCommands PPD keyword as meaning that CUPS commands are not supported for a printer (STR #3773) - Fixed a crash bug in the scheduler when the application/octet-stream MIME type was not defined (STR #3690) - Polled printers were advertised more slowly than necessary (STR #3574) - cupsResolveConflicts() did not handle resolving multiple UIConstraints issues (STR #3705) - The SetEnv and PassEnv directives had no effect (STR #3664) - The libusb-based USB backend printed slowly to the LaserJet 1300 and other printers (STR #3405) - "lp" and "lpr" failed to print with Kerberos enabled (STR #3768) - The cupsctl program now displays an error if you try to directly set the Port or Listen directives (STR #3749) - PPD files with "*JobPatchFile: bla" no longer fail to load in relaxed conformance mode (STR #3747) - The scheduler generated a bad notify-text string for printer state change notifications (STR #3739) - The scheduler incorrectly updated printers.conf when it really needed to update classes.conf or remote.cache (STR #3726) - Hardwired remote printers with options did not work (STR #3717) - Accessing the CUPS web interface using a CNAME-based hostname would sometimes fail due to redirection to the actual hostname (STR #3701) - Subscription events had a misspelled attribute (STR #3693) - "make check" failed if LC_MESSAGES was set (STR #3765) - Fixed the configure script to always look for the pkg-config script (STR #3761) - The scheduler now only looks up interface hostnames if HostNameLookups are enabled (STR #3737) - Fixed a compilation problem on DragonFly BSD (STR #3738) - The default PageLogFormat value had the username and job ID swapped from CUPS 1.3.x (STR #3727) - The scheduler could crash if a browsed printer times out while a job is printing (STR #3754) - The scheduler incorrectly mapped custom page sizes to standard sizes (STR #3764) - cupsfilter and pstops did not map IPP attributes to PPD options due to a change in cupsMarkOptions (STR #3756) - The scheduler did not always show the most recent status message from the print filters (STR #3731) - The PostScript filter did not apply the mirror and number-up options properly, leading to offset and clipped output (STR #3732) - The network backends always reported "low toner" or "out of toner" states, even for inkjet printers (STR #3733) CHANGES IN CUPS V1.4.6 - Fixed a "make check" issue on Solaris (STR #3729) - Regression: The pstops filter did not support landscape printing of PostScript files (STR #3722) - The scheduler killed retried (fax) jobs after restarting them (STR #3697) - The cupsAdminSetServerSettings() function disabled sharing when debug logging was enabled (STR #3712) CHANGES IN CUPS V1.4.5 - Documentation fixes (STR #3542, STR #3650) - Localization fixes (STR #3635, STR #3636, STR #3647, STR #3666) - Security: Fixed a memory corruption bug reported in CVE-2010-2941 (STR #3648) - The CUPS API incorrectly mapped the HTTP_UNAUTHORIZED status to the IPP_NOT_AUTHORIZED status code, when IPP_NOT_AUTHENTICATED would be the correct mapping (STR #3684) - The scheduler would restart jobs while shutting down (STR #3679) - Fixed a PPD loader bug that could cause a crash in cupsd (STR #3680) - Improved the mapping of non-standard PPD and PWG names (STR #3671) - The scheduler did not initialize Kerberos in all cases (STR #3662) - cupsAdminSetServerSettings duplicated Listen and Order lines (STR #3645) - Added DeviceN colorspace support to the CUPS Raster format (STR #3419) - ppdMarkDefaults() did not clear the marked field of the previous choices (STR #3642) - The serial backend would not allow a raw job to be canceled (STR #3649) - The socket backend could go into an infinite loop with certain printers (STR #3622) - Setting the PRINTER or LPDEST environment variables to "name/instance" did not work (STR #3485) - The scheduler did not handle the JobRetryLimit setting properly (STR #3466) - The lpstat command always showed a remote job ID of 0 for shared printers (STR #3627) - Increased the write timeout for the libusb-based USB backend to 5 minutes (STR #3595) - The libusb-base USB backend did not check whether the printer has a serial number (STR #3590) - The lpadmin command did not support setting of custom option values (STR #3631) - The lpadmin command did not support setting of the location or description of a class (STR #3613) - The cupsaddsmb command did not give up after too many failed attempts (STR #3615) - The CUPS library no longer uses certain problematic ctype macros that change based on the locale's character set. - PJL value substitution of more than 9 values was broken (STR #3621) - Custom options with missing string values caused ppdEmit* to segfault (STR #3620) - Fixed an issue with the Italian version of the web interface (STR #3624) - Fixed the Solaris SMF configuration file for cups-lpd (STR #3611) - The scheduler did not set the notify-subscribed-event attribute when delivering printer-added or printer-modified events (STR #3608) - The mailto notifier could get into an infinite loop (STR #3609) - Date/time information was not shown in banner pages. - Relational operators were broken in #if/#elif/#else/#endif expressions for the PPD compiler. - Moving a job via the web interface failed without asking for authentication (STR #3559) - The scheduler now clears the printer-state-reasons when the driver is changed (STR #3570) - The web interface did not allow a user to change the driver (STR #3537, STR #3601) - The scheduler was not setting the PATH_INFO environment variable when needed (STR #3600) - The scheduler incorrectly set the CUPSD_AUTH_TYPE environment variable instead of AUTH_TYPE (STR #3599) - Fixed a buffer overrun in the PPD compiler (STR #3594) - Fixed some additional IPP job template attribute mapping issues in the scheduler. CHANGES IN CUPS V1.4.4 - Documentation updates (STR #3453, STR #3527, STR #3528, STR #3529) - Security: The fix for CVE-2009-3553 was incomplete (STR #3490) - Security: The texttops filter did not check the results of allocations (STR #3516) - Security: The web admin interface could disclose the contents of memory (STR #3577) - Security: CUPS could overwrite files as root in directories owned or writable by non-root users (STR #3510) - The cups-config utility did not return the correct linker options on AIX (STR #3587) - Fixed some IPP conformance issues with the scheduler's ippget-event-life, operations-supported, output-bin, and sides attributes (STR #3554) - The OpenSSL interfaces have been made thread-safe and the GNU TLS interface is explicitly forbidden when threading is enabled (STR #3461) - Fixed an IPP conformance issue with the scheduler's Send-Document implementation (STR #3514) - Added additional validation checks for the 1284 device ID (STR #3534) - Fixed a problem with the RPM spec file (STR #3544) - The lpstat command did not limit the job list to the specified printers (STR #3541) - The cupsfilter command did not set the RIP_MAX_CACHE environment variable (STR #3531) - Fixed support for media-col and page size variants (STR #3394) - The PostScript filter did not support all media selection options for the first page (STR #3525) - The scheduler did not always remove job control files (STR #3425) - The scheduler could crash on restart if classes were defined (STR #3524) - The scheduler no longer looks up network interface hostnames by default on Mac OS X (STR #3523) - ippWriteIO did not write collection (member) attributes properly in all cases (STR #3521) - The "cupsctl --remote-any" and corresponding web interface check box (allow printing from the Internet) did not work reliably (STR #3520) - The lpq and lpr commands would sometimes choose different default printers (STR #3503) - cupsDo*Request did not flush error text, leading to multiple issues (STR #3325, STR #3519) - cupsDoAuthentication did not cancel password authentication after 3 failures (STR #3518) - Fixed several LDAP browsing bugs (STR #3392) - The Dymo driver did not support copies (STR #3457) - The scheduler did not update the classes.conf file when deleting a printer belonging to a class (STR #3505) - The lppasswd command did not use localized password prompts (STR #3492) - The socket backend no longer waits for back-channel data on platforms other than Mac OS X (STR #3495) - The scheduler didn't send events when a printer started accepting or rejecting jobs (STR #3480) - The web interface now includes additional CSRF protection (STR #3498) CHANGES IN CUPS V1.4.3 - SECURITY: The scheduler could try responding on a closed client connection, leading to a crash (STR #3200) - SECURITY: The lppasswd program allowed the localization files to be overridden when running in setuid mode (STR #3482) - Localization updates (STR #3352, STR #3409, STR #3422, STR #3452, STR #3473, STR #3502) - Documentation updates (STR #3451, STR #3504) - The IPP backend now sets the printer-state-message to "Ready to print." at the end of a successful job (STR #3460) - The PPD compiler did not correctly add the manufacturer to the output filename when using the "-m" option (STR #3469) - The IPP backend did not handle authentication properly for the Get- Printer-Attributes operation (STR 3458) - Getting SNMP values larger than 127 bytes did not work. - IPP conformance: Get-Jobs has a default value for requested-attributes (STR #3383) - cupsPrintFiles() did not report all errors (STR #3449) - cupsAddDest() could read freed memory (STR #3448) - The DBUS notifier did not build (STR #3447) - The scheduler would crash when an active printer was deleted. - The snmp backend did not work with some printers (STR #3413) - The web interface did not show the conflicting values when setting options (STR #3440) - Setting options in the web interface did not always work (STR #3439) - The scheduler did not use the Get-Job-Attributes policy for a printer (STR #3431) - The scheduler added two job-name attributes to each job object (STR #3428) - CSS files would not print (STR #3442) - The scheduler did not clean out completed jobs when PreserveJobHistory was turned off (STR #3425) - The web interface did not show completed jobs for a printer (STR #3436) - Authenticated printing did not always work when printing directly to a remote server (STR #3435) - The USB backend did not work on Solaris (STR #3423) - cupstestppd didn't catch problems with JobPatchFile definitions (STR #3421) - The socket backend could crash if a SNMP string had a negative length. - Fixed some termination issues with the USB backend on Mac OS X. - The side-channel APIs did not handle interrupts properly. - The network backends incorrectly cleared the media-empty-warning state. - The web interface did not allow users to successfully add serial printers (STR #3391) - cupsTempFd() did not work in some situations (STR #3382) - Some C API headers were missing C++ wrapper logic. - The PPD compiler did not localize single-language PPD options properly (STR #3386) - Modifying a printer from the web interface sometimes caused the wrong driver to be selected (STR #3418) - The scheduler did not handle out-of-memory conditions properly when loading a job (STR #3407) - When adding printers from the web interface, the dynamic updates of the device list made it hard to pick a device (STR #3406) - Fixed a typo in the web interface admin page template (STR 3403) - The web interface did not preserve the "printer is shared" state when modifying a printer (STR #3390) - The PPD compiler incorrectly inserted translations of empty strings (STR #3411) - The scheduler did not reset the SIGPIPE handler of child processes (STR #3399) - cupsGetNamedDest() incorrectly returned the default printer if the named printer did not exist (STR #3397) - Fixed a GNU TLS error handling bug (STR #3381) CHANGES IN CUPS V1.4.2 - SECURITY: The CUPS web interface was vulnerable to several XSS and HTTP header/body attacks via attribute injection (STR #3367, STR #3401) - Fixed localization errors (STR #3359, STR #3372, STR #3380, STR #3387) - The documentation for classes.conf and printers.conf did not provide the correct instructions for manual changes (STR #3351) - The scheduler did not always rebuild printer cache files when the driver was changed (STR #3356) - The documentation makefile failed to install localizations when using newer versions of Bash (STR #3360) - The configure script did not use the --with-xinetd value for the default LPD configuration path (STR #3347) - The configure script incorrectly required glib for DBUS support (STR #3346) - The cupstestppd program incorrectly reported filters with bad permisssions as missing (STR #3363) - The cups.desktop file used the wrong locale names (STR #3358) - cupsSideChannelRead() did not return an error for short reads. - The installed PAM configuration file did not use the correct options with the pam_unix2 module (STR #3313) - The scheduler did not preserve default options that contained special characters (STR #3340) - The scheduler did not remove old pre-filters when updating a printer driver (STR #3342) - The HP/GL-2 filter did not check for early end-of-file (STR #3319) - The USB backend did not compile on some platforms (STR #3332) - cupsSideChannelSNMPWalk() could go into an infinite loop with broken SNMP implementations. CHANGES IN CUPS V1.4.1 - Documention fixes (STR #3296) - SNMP supply levels and states were wrong for some printers. - The IPP backend did not update the auth-info-required value. - The libusb-based USB backend would hang at the end of the job (STR #3315, STR #3318) - DNS-SD registrations for raw queues had an empty "ty" key (STR #3299) - The JPEG and BMP MIME type rules were broken (STR #3284) - cupsGetNamedDest returned the default printer when the named destination did not exist (STR #3285) - The JobKillDelay was not triggered for canceled jobs (STR #3292) - The PPD compiler could get in an infinite loop (STR #3293) - The configure check for dns-sd.h was broken (STR #3297) - The "Query Printer for Default Options" page did not go away if the query job was held (STR #3302) - Boolean options did not show up as selected in the web interface (STR #3303) - The scheduler did not cache or report driver information files correctly, leading to a variety of issues (STR #3283, STR #3297, STR #3305) - cupsDoIORequest() did not abort on permanent errors (STR #3311) - Modifying a class in the web interface did not work (STR #3312) - BrowseLocalProtocols could be cleared when changing the sharing setting (STR #3287) - The scheduler could return an empty supported document format (STR #3308) - The PPD compiler generated invalid PPD files when the locale used something other than "." for the decimal point (STR #3300) - The IPP backend did not handle some non-comforming IPP printer implementations (STR #3262) - The scheduler leaked three file descriptors to each job filter (STR #3263) - The scheduler now uses a default CUPS-Get-Devices timeout of 15 seconds (STR #3307) CHANGES IN CUPS V1.4.0 - Localization updates (STR #3223, STR #3246, STR #3248, STR #3250) - Documentation updates (STR #3225, STR #3230, STR #3242, STR #3260) - The --with-pdftops configure option did not accept a full path to the filter (STR #3278) - The banner filter did not position the back side image correctly (STR #3277) - The dnssd backend could crash (STR #3272) - The 1284 device ID sometimes contained trailing garbage (STR #3266) - The USB backend returned different URIs for some printers than in CUPS 1.3 (STR #3259) - The scheduler did not do local job-hold-until processing for remote queues (STR #3258) - The scheduler did not try all possible SSL certificates on Mac OS X. - The scheduler did not always remove a file descriptor when using the kqueue interface (STR #3256) - The scheduler did not protect against bad job control files in all cases (STR #3253) - The scheduler did not encode "+" in model names (STR #3254) - The web interface didn't show the default options (STR #3244) - The IPP and LPD backends needed print data before they would do an SNMP query. - Fixed a GNU TLS compatibility issue (STR #3231) - Fixed a HTML error in the add and modify printer web interface templates (STR #3229) - The scheduler did not minimize the number of printer state events that were generated by filter STATE: messages, which could lead to poor performance. - The USB backend on Mac OS X did not cleanly cancel a job. - The network backends now set the connecting-to-device printer-state- reasons value when looking up the address and copying the print data for consistency. - The scheduler now supports the com.apple.print.recoverable-warning reason on all platforms. CHANGES IN CUPS V1.4rc1 - The PPD compiler documentation was missing information on localization (STR #3212) - The IPP backend now reconnects after every request when talking to printers that claim IPP support but only use HTTP/1.0. - The PPD compiler crashed when both "Resolution" and "Group foo Option Resolution" were specified in the .drv file. - The PPD compiler's #if/#elif/#else/#endif did not work for undefined variables (STR #3210) - Static libraries could not be installed by a non-root user on systems needing a ranlib program (STR #3209) - The scheduler incorrectly always tried to copy Kerberos credentials for print jobs. - Updated the Spanish localization (STR #3204) - The scheduler crashed when getting the default paper size from libpaper (STR #3205, STR #3206) - The PPD compiler now defines six variables: CUPS_VERSION, CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR, CUPS_VERSION_PATCH, PLATFORM_NAME, and PLATFORM_ARCH (STR #3203) - Fixed a whitespace skipping bug in cupsRasterInterpretPPD. - The scheduler did not return HTTP 403 (Forbidden) for authenticated users that were not authorized to do IPP operations (STR #3193) - The scheduler did not report more than 8 Product strings from a PPD file. Some PPD files have as many as 24. - ppdOpen*() could crash if a keyword had no value string (something that cupstestppd looks for...) - cupsLangDefault() did not return the correct language on Mac OS X. - The Mac OS X USB backend did not handle aborted or stalled pipe conditions properly, which prevented drivers from ejecting partial pages when a job was canceled or held. CHANGES IN CUPS V1.4b3 - Documentation fixes (STR #3044, STR #3057, STR #3153, STR #3158, STR #3173) - Added complete localizations for German, Japanese, Polish, and Russian and partial localizations for Chinese, Danish, Finnish, French, Italian, Korean, Norwegian, Portuguese, and Swedish (STR #3096, STR #3098, STR #3109, STR #3111, STR #3141) - Updated the configure check for -fstack-protector (STR #3198) - The network backends now correctly convert SNMP supply descriptions to UTF-8 encoding as needed. - The scheduler could crash when deleting an attribute (STR #3197) - The cups-driverd program did not detect symlink loops (STR #3185) - The EPSON 24-pin series driver should now feed the correct amount (STR #2624) - The scheduler now automatically logs the last N debug messages for failed print jobs. - You can now modify a raw print queue (STR #3133) - Fixed a number of ppdi issues and added a unit test to validate that ppdc + ppdi can generate and import the same data (STR #3152) - Moving jobs in the web interface now shows an error if you only have one printer or class added (STR #3094) - Since classes have never truly supported the printer-error-policy stuff added in CUPS 1.2, update the code to reflect the current reality and support only the retry-current-job policy for now (STR #3171) - Revised the password callback support (STR #2953) - ppdEmit*() did not choose between PageSize and PageRegion properly. - Make some fairly substantial changes to the Kerberos support code so that CUPS can work in multi-realm environments and does not require delegatable credentials. Shared printing still requires delegation, however "delegation by policy" can be enabled in the KDC to make this all work. - "AccessLogLevel actions" did not hide client-error-not-found errors. - AP_FIRST_InputSlot did not work with number-up. - cupsBackChannelRead() and cupsBackChannelWrite() could fail due to a lack of kernel buffers. - The IPP and LPD backends did not respond to side-channel requests while copying print data to a temporary file. - cupsWriteRequestData() flushed the output buffer unnecessarily, causing reduced performance in some situations. - If a CGI process died before sending its MIME headers, the request would hang on the client. - The printer/class/job search feature on the web interface did not work (STR #3132) - The scheduler did not write the printers out for classes. - CUPS-Get-PPDs did not work properly when filtering by language, product, or psversion (STR #3136) - The scheduler now kills job filters when it takes more than 30 seconds (configurable) to cancel or hold the job. - The cupstestppd program did not validate the capitalization of filenames in the PPD file. - The cupstestppd program did not validate the PageSize and PageRegion values. - The cups-deviced helper program could miss reporting some backend devices (STR #3108) - The cupsSideChannelSNMP* functions did not work. - The scheduler could consume 100% CPU when jobs were canceled. - Clicking on "Select Another Make/Manufacturer" in the web interface incorrectly added the printer (STR #3095) - The scheduler no longer uses programs with insecure file permissions. - httpAssembleURI*() did not escape backslashes in hostnames. - The dnssd backend did not unquote "full names" before creating the device URI. - The scheduler now supports JobRetryInterval values less than 10 seconds. - Updated the Spanish localization (STR #3090) - The scheduler did not redo Bonjour/DNS-SD registrations when updating them failed. - The "authenticated" policy incorrectly required authentication for status operations. - ppdOpen*() incorrectly loaded PPDs with multiple JobPatchFile keywords. - The network backends no longer report the SNMP "offline" or maintenance status bits since they are inconsistently implemented and often unreliable. - The scheduler no longer logs child processes killed via SIGKILL as "crashed". - The printer link shown on the "job moved" template was bad (STR #3085) - Updated the HTML templates to use the final HTML 4 DOCTYPE (STR #3086) - The scheduler did not track the "paused" reason properly if a printer had other reasons associated with it. - cupsSendRequest() did not clear old local certificate auth data. - The PPD compiler did not search for localization files properly (STR #3084) - cupsGetNamedDest() did not use the fallback default like cupsGetDests*() (STR #3082) - The scheduler now provides a LogTimeFormat directive to enable microseconds in the date and time that are logged. - The scheduler now provides a MultipleOperationTimeout directive to control the timeout for multi-file print jobs. - The configure script incorrectly allowed Avahi to be used for DNS-SD printer discovery (STR #3065) - The web interface and scheduler did not support URIs up to 1024 bytes in length (STR #3072) - Fixed pdftops issues with page sizes (STR #3063) - Fixed pdftops issues with Ghostscript (STR #3062) - The scheduler incorrectly registered default profiles for PostScript printers with no specified colorspace. - The scheduler incorrectly created an empty org.cups.printers.plist file on Mac OS X. - cupsGetPPD3() did not look for local PPDs in the right directory. - SNMP lookups via side-channel did not work for NULL-VALUE and and OCTET-STRING OIDs containing nul characters. - The libusb-based USB backend did not work. - The scheduler did not set the printer-commands attribute correctly for some PPDs. - The ppdi utility did not work. - The web interface no longer uses multi-part output with old or broken web browsers (STR #3049) - CUPS now conforms to the draft IPP/2.0 and IPP/2.1 specification. - Added a new cupsGetConflicts() API to get a list of conflicting options. - The PPD compiler didn't localize options or choices that did not have associated translation text (STR #3045) - Updated the Spanish localization (STR #3043) - Fixed build problems (STR #3040, STR #3047) - cupsResolveConflicts() did not resolve using the default option choice in some cases due to the mirror UIConstraints that are present in most PPD files. - The scheduler did not honor MIME type priorities. - The commandtops filter incorrectly used the JCLBegin code to end its jobs. - The default BrowseLocalProtocols value was not set properly. - Since the commandtops filter does not actually support ReportLevels all on its own, don't list that printer command by default for PS printers. - The scheduler did not give filters a chance to log errors or update printer attributes when a job was canceled. - The scheduler did not clear the "connecting-to-device" reason keyword when a job finished. CHANGES IN CUPS V1.4b2 - Documentation updates (STR #2983, STR #2998, STR #3021) - The cupstestppd utility now validates the FileVersion and FormatVersion values in PPD files. - The default cupsd.conf file did not reflect the --with-local-protocols value set at compile-time (STR #3037) - The cupsGetPPD* APIs now create symlinks to local PPD files rather than copying them whenever possible. - Various performance optimizations in the string pool, dests, and options implementations. - The cupsGetDests* APIs now return the marker and printer-commands attributes. - Side-channel SNMP lookups would not work when cupsSNMPSupplies was set to False in the PPD file. - Localized the device descriptions for the SCSI, serial, and network backends (STR #3014) - Added a Spanish localization (STR #3015) - Added support for marker-low-levels and marker-high-levels attributes. - The scheduler could hang writing a long log line. - The cupsGetDevices() function now has an "include_schemes" parameter. - The lpinfo command now supports --include-schemes and --exclude-schemes options. - The CUPS-Get-PPDs operation now supports the include-schemes and exclude-schemes attributes. - The CUPS-Get-Devices operation now supports the include-schemes attribute. - The print filters now support a replacement for the fitplot option called "fit-to-page". - The LPD backend no longer tries to collect page accounting information since the LPD protocol does not allow us to prevent race conditions. - The scheduler did not save the last marker-change-time value. - Fixed a problem with printing to some IPP printers, including CUPS 1.1.x. - Fixed a redirection problem with the printer web page (STR #3012) - Fixed a PPD compiler problem with the loading of message catalogs (STR #2990) - Fixed a PPD compiler problem with the loading of .strings files (STR #2989) - The cupsfilter utility did not set the CONTENT_TYPE environment variable when running filters. - The scheduler now waits to allow system sleep until the jobs have all stopped. - The IPP, LPD, and socket backends used different "connecting" progress messages. CHANGES IN CUPS V1.4b1 - Documentation updates (STR #2567) - The PPD compiler now allows local message catalogs to override the standard CUPS translations (STR #2642) - The ppdmerge command did not merge custom option strings (STR #2863) - The scheduler now supports the Hold-New-Jobs and Release-Held-New-Jobs operations; these are exposed via the cupsdisable and cupsenable commands (STR #2332) - The lpstat command is now much faster when displaying the status of a single printer (STR #2843) - The scheduler now caches information from PPD files to provide significantly faster startup time with large numbers of PPDs (STR #1293) - CUPS-Get-Driver now provides much better driver matching based on the IEEE-1284 device ID and make/model strings (STR #2707) - Now support the cupsSNMPSupplies keyword to control whether the network backends query the SNMP Printer MIB for supply levels. - Now support and use a new banner file format for better text support and easier customization (STR #2490) - The scheduler now sets the PRINTER_INFO and PRINTER_LOCATION environment variables from the corresponding IPP attributes. - The ippRead*() and ippWrite*() functions no longer use a stack-based buffer (STR #2388) - The CUPS-Add-Modify-Printer operation now allows you to set the printer-state-reasons attribute. - The "set printer options" page now supports auto-configuration of printer options (STR #1440) - The web interface now provides an advanced server settings form. - The web interface's "modify printer" pages now make it easier to change just one setting (STR #1919) - The scheduler now supports a plist PrintcapFormat. - The scheduler now supports multiple addresses in Allow and Deny lines, just like Apache (STR #2947) - Added CUPS_JOBTYPE environment variable for job filters so they know whether they are printing a banner or document file (STR #2799) - Added support for printer filtering by the cupsfilter command (STR #2562) - Added a SSLOptions directive to allow Windows clients to talk to CUPS in FIPS mode (STR #2827) - Renamed the accept and reject commands to cupsaccept and cupsreject; the old names are still available (STR #2936) - The locale/translate utility needed an update to work with Google (STR #2882) - The lpstat command now supports a -H option to display the default server (STR #2833) - The scheduler now supports a FatalErrors directive to control which errors should cause the scheduler to exit (STR #2536) - The scheduler now uses the php-cgi program if it is available (STR #2923) - The scheduler now supports a DefaultPaperSize directive (STR #2848) - The scheduler now passes the job-originating-host-name value to filters in the options argument (STR #2558) - CUPS now supports job tickets in PDF files (STR #2903) - Added a DBUS notifier (STR #2529) - The LPD mini-daemon now passes the document name when queuing print jobs (STR #2482) - The IPP backend did not relay com.apple.print.recoverable-message values. - The scheduler now supports a job-media-progress attribute to track the progress of individual pages. - The sample HP driver now supports A5 (STR #2798) - The CUPS web interface menu item now uses the xdg-open command, when available (STR #2724) - The cups-lpd program now supports the -h option (STR #2794) - The scheduler now sets the PAM_TTY parameter and the PAM_ESTABLISH_CRED credential flag (STR #2745) - The scheduler now logs unsuccessful requests to the error_log file as errors (STR #2616) - Added support for a "retry-current-job" error policy that retries the current job immediately when the backend encounters an error (STR #2555) - The scheduler now returns a "forbidden" error when a user correctly authenticates but does not have permission to continue further (STR #2101) - The scheduler now loads both the server and CA certificates (if present) from the ServerCertificate file (STR #2146) - New RSS subscriptions now create their feed files immediately (STR #2853) - Added support for a device-location attribute which provides the physical location of a printer device. - Added a cupsBackendReport() API which handles quoting of the device data by a backend. - Added support for custom options in the web interface (STR #1729) - Added support for Mozilla LDAP, reconnection to LDAP servers, and improved LDAP performance (STR #1962) - Added Solaris SMF support (STR #1477) - Added optional support for using TCP wrappers to limit access to CUPS (STR #263) - Added ppdPageSizeLimits API. - Added support for new cupsMediaQualifier2, cupsMediaQualifier3, cupsMinSize, and cupsMaxSize attributes. - Added cupsResolveConflicts and ppdInstallableConflict APIs. - Added support for new cupsUIConstraints and cupsUIResolver attributes for better option conflict detection and resolution. - Increased the maximum size of 1284 device ID strings to 256 bytes (STR #2877) - Added an AccessLogLevel directive to cupsd.conf to control what is logged to the access_log file. - The default LogLevel is now "warn" instead of "info" to reduce the amount of logging that is done to disk by default. - The PPD compiler did not include OID query keywords in PPD files (STR #2871) - The cups-driverd helper program now directly supports driver information files. - The USB backend now uses libusb when available (STR #1575) - Added ppdLocalizeAttr function to get the localized version of an attribute. - MIME types now support a priority() attribute (STR #2719) - The standard MIME types are now installed in DataDir/mime (STR #2719) - The lpoptions command now describes custom options and the necessary parameters (STR #2660) - The ppdmerge program did not support Simplified Chinese or Traditional Chinese language version strings (STR #2851) - The PPD compiler now supports localizable attributes (STR #2738) - The ppdpo utility now includes cupsIPPReasons values in the message catalogs it generates (STR #2754) - The PPD compiler now supports conditional directives (STR #2636) - The ppdc utility now supports a "-t" option to test PPD files (STR #2739) - The ppdc utility now supports a "-m" option to use the ModelName value as the output filename. - The ppdc utility now supports a FileName directive to set an alternate output filename (STR #2740) - The side-channel API now supports SNMP queries for the standard network backends. - Added a PageLogFormat directive to the cupsd.conf file to control the format of lines in the page_log file. - Filters can now send PPD: messages to stderr to set PPD keywords like DefaultPageSize while a job is printing. - Added a mdns backend for discovery and printing to printers that advertise themselves via DNS-SD (Bonjour) - The ipp, lpd, and socket backends now support DNS-SD service name resolution. - The scheduler now uses a single shared file descriptor for all DNS-SD registrations (STR #2674) - The ipp, lpd, and socket backends now support SNMP-based page accounting and supply level monitoring (STR #1655) - Added support for cupsPJLDisplay attribute to control what PJL commands are used to display the job information. - Driver information files can now be installed in /Library/Printers/PPDs.drv on Mac OS X. - The CUPS image library now supports reading images larger than 2GB. - The scheduler now delays writing config and state files to reduce disk activity (STR #2684) - The CUPS-Get-Devices operation now supports the exclude-schemes and timeout attributes to control which backends are polled and for how long. - The cups-deviced helper application now runs backends in parallel to get the list of devices faster. - Added --enable-pap configure option. - The default cupsd.conf file now includes an "authenticated" policy which requires authentication for remote print jobs. - Added support for Czech and Hungarian in PPD files (STR #2735, STR #2736) - The PPD compiler tools now support Mac OS X .strings files for localization (STR #2737) - ppdOpen*() now default the colorspace member to PPD_CS_N when no DefaultColorSpace attribute is present in the PPD file. - The build system has been updated to support separate installation of data, program, header, and library files. - All support libraries are now built as shared libraries by default. - The scheduler now manages ICC color profiles on Mac OS X. - The network backends (ipp, lpd, socket) now support SNMP-based supply and page count monitoring (STR #1655) - The lppasswd program is no longer installed setuid to root to make the default installation more secure. - Added a new ppdLocalizeMarkerName() function to get the localized version of a marker-names value. - The scheduler now provides the printer-dns-sd-name attribute for printers shared via DNS-SD/Bonjour. - The pdftops filter now executes the Xpdf or poppler pdftops utility to convert PDF files (STR #1471) - Bonjour printer registrations now advertise as local or global based on the current access policies for the printer. - cupsGetDests*() and cupsSetDests*() now track the last used printer preference on Mac OS X. - Added a new streaming request API (STR #2261) - Added a new cupsGetNamedDest() function to the CUPS library for faster printing with lp and lpr (STR #2638) - The scheduler now sets the PAM RHOST value on systems that support it (STR #2637) - The scheduler now sandboxes child processes when possible. - The Cancel-Job operation now supports a purge-job attriibute to purge a specified job. - ppdEmit* and ppdCollect* now use the NonUIOrderDependency attributes for custom option selections. - The web interface now enables/disables the printer sharing (formerly publishing) controls based on the server-is-sharing-printers state (STR #2233) - The scheduler now tracks printer sharing via the server-is-sharing-printers attribute, and manages LPD and SMB sharing as well (STR #2233) - The web interface now allows you to go back to the make/ manufacturer page if there is no matching printer driver on the model page (STR #2436) - The printer list now shows the default media, banner, and duplex options as well as the color and duplex capabilities of printers (STR #1175) - The web interface look-n-feel has been updated (STR #2492) - The scheduler now supports a CUPS-Get-Document operation that returns the specified print job document (STR #118) - The cupsfilter utility now supports a "-J jobid" option to filter the document from the specified job. - The scheduler (cupsd) now supports a new option (-t) to do a syntax check of the cupsd.conf file (STR #2003) - Added new cupsGetPPD3() API to allow applications to cache PPDs safely (STR #1473) - Added generic PostScript and PCL printer driver PPDs. cups-2.2.7/CHANGES-1.5.txt000664 000765 000024 00000035367 13255074424 015303 0ustar00msweetstaff000000 000000 CHANGES-1.5.txt --------------- CHANGES IN CUPS V1.5.4 - Documentation updates (STR #4112, STR #4130, STR #4134) - Fixes for libusb-based USB backend (STR #4128) - The lpq command did not show the owner or title of jobs unless passed a username on the command-line (STR #4135) - Localized empty strings contained the message catalog metadata (STR #4119) - Fixed a crash in the libusb-based USB backend (STR #4099) - The cups-lpd mini-daemon no longer handled jobs with multiple copies (STR #4118) - Multiple libusb backend fixes (STR #4098, STR #4100) - The IPP backend no longer tries to get the job status for printers that do not implement the required operation (STR #4083) - Sending a document in an unsupported format to an IPP printer now automatically cancels the job (STR #4093) - Fix some error reporting issues when printing from /dev/null and other unusual situations (STR #4015) - The scheduler now sets the CUPS_MAX_MESSAGE environment variable for filters (STR #4074) - Fixed a build issue when using older versions of autoconf (STR #4084) - The IPP backend now treats the client-error-not-possible status code as a job history issue, allowing IPP printing to Windows to work (STR #4047) - The IPP backend incorrectly included the document-format and compression attributes in Create-Job requests (STR #4086) - The libusb-based USB backend did not work on non-Linux platforms (STR #4088) CHANGES IN CUPS V1.5.3 - httpReconnect() did not reset the read/write buffers (STR #4065) - Compiling without threading support failed (STR #4060) - Fixed compile problem with old versions of OpenSSL (STR #4036) - The network backends did not check SNMP supply levels regularly (STR #4040) - The online help always included the "help on help" text (STR #4042) - Fixed a SSL handshake issue on OS X (STR #4045) - The scheduler could crash if a PPD file contained an invalid paper size (STR #4049) - The CUPS polling daemon did not reinitialize its connection to the remote server on errors in all cases (STR #4031) - PostScript auto-configuration was slow and unreliable with some printers (STR #4028) - Missing localizations caused empty output (STR #4033) - The cups-driverd program could temporarily "forget" a PPD file if it was updated in place. - The dnssd backend now prefers IPPS over IPP. - The USB backend now uses and requires LIBUSB 1.0 or later (STR #3477) - The LIBUSB-based USB backend now supports the back-channel (STR #2890) - Changed how timeouts are implemented in the LPD backend (STR #4013) - Added more supported color names for SNMP supplies (STR #3981) - The default InputSlot setting was never used (STR #3957) - POSIX ACLs are now set properly on certificate files (STR #3970) - Supplies with commas in their names were not reported correctly (STR #4020) - The cupsGetPPD3() function created a temporary file when one was not needed (STR #4018) - The scheduler now ensures that job notifications contain a value for the notify-printer-uri attribute (STR #4014) - The lp and lpr commands did not cancel jobs queued from stdin on an error (STR #4015) - Fixed the IPP backend's handling of HTTP/1.0 compatibility (STR #3988) - The IPP backend did not always setup username/password authentication for printers (STR #3985) - The IPP backend no longer re-queues print jobs that are too large for the printer/server (STR #3977) - The RPM spec file did not work (STR #4021, STR #4057) - Encryption did not work when the server name ended with "." (STR #4011) - The multi-purpose tray is now mapped to the IPP "by-pass-tray" (STR #4009) - The correct media size was not always passed to IPP printers (STR #4001) - Finishing options were not passed to IPP printers (STR #3995) - Fixed iCloud-based Back to My Mac printing (STR #3996) CHANGES IN CUPS V1.5.2 - Reposted what should have been CUPS 1.5.1. CHANGES IN CUPS V1.5.1 - Documentation updates (STR #3885, STR #3886, STR #3946, STR #3969) - Localization updates (STR #3840, STR #3989, STR #3997) - Build fixes (STR #3956, STR #3999) - The SNMP backend did not validate the device URIs reported by printers (STR #4004) - cupsBackendReport() did not handle newlines in 1284 Device IDs (STR #4005) - USB backend fixes for libusb (STR #3965, STR #3978) - The DBUS notifier did not validate string parameters (STR #3984) - Group quota ACLs did not work with Kerberos (STR #3972) - The IPP backend did not retry when a printer responded with client-error-not-possible (STR #3963) - PostScript PPDs with filters used the wrong command filter (STR #3973) - The scheduler incorrectly used free() on a POSIX ACL value, which could cause a crash (STR #3970) - PPD files using the MacStandard encoding did not work. - The web interface did not work on some platforms (STR #3902) - The lpstat command would crash when then "-u" option was used by a non-administrator (STR #3953) - Japanese supply level reporting did not always work. - The DBUS notifier could crash (STR #3947) - Relaxed some of the page size checks in cupstestppd. - The ipptool program now reports attributes that are repeated within the same attribute group. - Updated the PWG raster support to match the current draft specification. - Fixed some IPP conformance issues in the scheduler. - Added ipptool support for repeating requests. - Added IPP/2.2 conformance tests and greatly improved the IPP/1.1, IPP/2.0, and IPP/2.1 conformance testing. - IPP messages containing mixed integer/rangeOfInteger values did not work (STR #3942) - The ipptool program now provides additional diagnostics for badly- formatted responses (STR #3857) - When possible, the IPP backend now stops sending job data early on a cancel. - cupsSendRequest and cupsWriteRequestData did not properly read all HTTP headers, preventing authentication and encryption upgrades from working in all cases. - The client.conf Server directive is no longer supported on Mac OS X 10.7 and later. - The IPP backend sent the wrong margins in media-col. - The scheduler did not save or restore large Kerberos credentials for jobs. - The dnssd backend did not properly browse for secure IPP printers. - httpAssembleURI* did not properly escape all special characters in the username/password field. - The scheduler now logs config file errors to stderr (STR #3936) - The configure script incorrectly used bundle-based localizations on Linux (STR #3938) - The cups-driverd helper program did not cache .drv files properly, sometimes leading to a crash (STR #3921) - CUPS did not build on stock Mac OS X installations. - Encryption was broken with OpenSSL. - ipptool's XML output used date/time values with timezone offsets, which are not supported by Mac OS X's NSDate class. - Several programs did not support the cupsFilter2 keyword in PPD files. - The IPP backend incorrectly reported spool-area-full states. - cupsMarkOptions() did not protect against a bad PPD that was missing one or more standard Duplex options. - The PostScript filter did not mirror N-up output properly. - The ipptool program did not validate UTF-8 strings in XML output. - Fixed supply level reporting for some printers. - The scheduler no longer automatically logs debug messages for jobs that were held or canceled. - The cupsSendRequest function did not flush remaining response data from a previous request, leading to apparent chunking issues. - The scheduler did not report the correct version in the Server: header (STR #3903) - The scheduler did not support 1284 device IDs reported by driver interface programs longer than 127 characters (STR #3871) - The image filters did not support loading images larger than the RIPCache setting (STR #3901) - "PAGE: total NNN" messages did not get logged properly (STR #3887) - Updated the PWG Raster support to conform to the current draft of the PWG Raster Format specification. - The PWG Raster filter did not always write the correct number of padding lines on the bottom of the page (STR #3904) - When reporting a denial-of-service attack from the domain socket, the address reported does not always contain the correct path (STR #3888) - Badly formed GIF files could cause the image filters to crash (STR #3914) - Jobs canceled at the printer were retried by the IPP backend. - "cupsfilter -u" deleted the input file instead of the PPD file. - The scheduler did not compute the cost of PPD filters defined using the cupsFilter2 keyword properly. - The scheduler did not correctly support the maxsize() attribute for PPD filters. CHANGES IN CUPS V1.5.0 - Documentation updates. - Localization update (STR #3865) - Needed to limit TLS to v1.0 on some versions of Mac OS X. - The snmp backend did not work with some printers. CHANGES IN CUPS V1.5rc1 - Compile fixes (STR #3849, STR #3850) - The scheduler didn't check for empty values for several configuration directives (STR #3861) - ipptool didn't generate valid XML when a test was skipped. - Added additional error checking to the 1284 device ID code (STR #3858) - Fixed some compatibility issues migrating from the old usblp backend to the libusb backend (STR #3860) - Fixed the wake-from-sleep printing behavior on Mac OS X. - The scheduler incorrectly allowed jobs to be held from a terminating state. - The cups-driverd program could crash when a PPD was renamed. - The dnssd backend took too long to discover printers on large or busy networks with the new default timeout used by lpinfo and the web interface. This resulted in "lost" printers. CHANGES IN CUPS V1.5b2 - Documentation updates. - Localization updates (STR #3845) - Compiler warning cleanup. - Fixed PIE support for Linux (STR #3846) - Made httpSetTimeout API public and use it in the IPP backend to avoid timeout errors. - The scheduler incorrectly set the "authenticated" printer-type bit for remote queues using authentication. CHANGES IN CUPS V1.5b1 - The CUPS library now supports per-connection HTTP timeouts and callbacks. - The CUPS library now supports (limited) SSL/TLS X.509 certificate validation and revocation (STR #1616) - Updated the PostScript filter to support IncludeFeature in more circumstances (STR #3417) - The schedule did not correctly parse some IPv6 addresses and masks in the cupsd.conf file (STR #3533) - Fixed a case-insensitive string comparison issue for locales that do not treat "I" and "i" as equivalent (STR #3800) - The scheduler reported an incorrect job-printer-uri value when sharing was not enabled (STR #3639) - The scheduler now allows the ServerAlias directive to contain multiple hostnames separated by spaces or commas (STR #3813) - The scheduler now sets the process group for child processes and manages the group (STR #2829) - Fixed some minor issues discovered by a Coverity scan (STR #3838) - The scheduler now more carefully creates and removes configuration, cache, and state files (STR #3715) - The lpadmin command now allows default option values to be deleted (STR #2959) - The lpadmin command now allows the cupsIPPSupplies and cupsSNMPSupplies keywords to be set in a PPD file (STR #3825) - Moving a held job no longer releases it (STR #3839) - Restored support for GNU TLS and OpenSSL with threading enabled (STR #3605) - Fixed a confusing error message from cups-polld (STR #3806) - Increased the default RIPCache value to 128MB (STR #3535) - MIME errors are now routed to the error_log file (STR #2410) - Updated PDF filter to support new Ghostscript ps2write device (STR #3766) - Updated PDF filter to support new Poppler option to preserve page sizes in PDF files when the user has not selected a particular media size (STR #3689) - Added new PWG Raster filter for IPP Everywhere printer support. - Added job-uuid, printer-uuid, and subscription-uuid attributes. - Added support for the cupsSingleFile PPD keyword. - Dropped support for the printer-state-history attribute (STR #3654) - Added support for a new cupsIPPSupplies keyword in PPD files to allow drivers to disable IPP supply level reporting. - Added support for a new cupsFilter2 keyword in PPD files to allow for the propagation of the actual MIME media type produced by a filter. - The scheduler did not always get the correct Kerberos username when authenticating (STR #3670) - Added new cupsRasterOpenIO function and CUPS_RASTER_WRITE_PWG to the CUPS imaging library to support printing to IPP Everywhere raster printers. - The scheduler now provides default values for the pages-per-minute and pages-per-minute-color attributes for PPD files that lack a Throughput keyword. - Email notifications did not work on Mac OS X. - The cupstestppd program now shows an error for files missing a CloseGroup keyword (STR #3668) - Name resolution errors no longer cause queues to stop (STR #3719, STR #3753) - Added a new cups-exec helper program that applies security profiles to filters, port monitors, backends, CGI programs, and mini-daemons. - The web interface can now be disabled using the WebInterface directive in cupsd.conf (STR #2625) - The scheduler now provides privacy controls for jobs and subscriptions (STR #2969) - Added new cupsArrayNew3 API which offers memory management of array elements. - Added several new color spaces to the CUPS raster format (STR #3419) - The Validate-Job operation now uses the same policy as Print-Job by default. - CUPS now uses iconv to implement all of its character encoding support (STR #3097) - The scheduler now implements the Cancel-Jobs, Cancel-My-Jobs, and Close-Job operations along with the job-ids operation attribute from PWG 5100.11. - The main CUPS header () no longer includes the PPD header (). - The scheduler and CUPS API now support the print-quality job template attribute. - The scheduler no longer supports the old Mac OS X Server quota plugin. - The scheduler now allows writing to /Users/Shared from print filters on Mac OS X. - CUPS no longer supports the old ~/.cupsrc or ~/.lpoptions files from CUPS 1.1.x. The ~/.cups/client.conf and ~/.cups/lpoptions files that were introduced in CUPS 1.2 must now be used. - The ipptest tool is now a first-class user program and has several improvements along with new documentation (STR #3484) - The cupstestppd tool now warns about non-unique filenames and provides a way to ignore all filename warnings. - Dropped support for the recoverable: and recovered: message prefixes. - The scheduler now requires that filters and backends have group write permissions disabled. - The PPD compiler now checks for overlapping filenames when writing PPD files. - The HP-GL/2 filter is no longer included with CUPS (STR #3322) - The SCSI backend is no longer included with CUPS (STR #3500) cups-2.2.7/CHANGES-1.6.txt000664 000765 000024 00000026770 13255074424 015302 0ustar00msweetstaff000000 000000 CHANGES-1.6.txt --------------- CHANGES IN CUPS V1.6.4 - Removed some duplicate size definitions for some ISO sizes that were causing problems () - The IPP backend did not add the "last-document" attribute () - Added a SyncOnClose directive to cups-files.conf to force cupsd to call fsync before closing any configuration/state files it writes () - Added USB quirk rule for Lexmark E238 () - Closed server connections were still not always detected () - The libusb-based USB backend now loads its list of quirks from files in /usr/share/cups/usb instead of using a hardcoded table () - The scheduler did not properly register ICC color profiles with colord () CHANGES IN CUPS V1.6.3 - The configure script now prefers Clang over GCC. - Fixed a compile problem on AIX (STR #4307) - The default IPP version did not always get set before creating a new IPP request message () - The lp, lpq, lpr, and lpstat now display an error message advising the use of the /version=1.1 ServerName option () - Added documentation about the /version=1.1 option to ServerName in client.conf () - httpStatus(HTTP_ERROR) did not return a useful error message () - The lp, lpq, lpr, and lpstat commands incorrectly ignored the default printer set in the lpoptions file () - Fixed a URI encoding issue for hostnames containing the ` (backquote) character () - Added support for RFC 6874's IPv6 link local address format in URIs () - The USB backend could crash on libusb-based systems if USB was disabled in the BIOS () - Fixed a rounding error in the PWG media size mapping code () - Fixed several ipptool test files that used old STATUS names. - Kerberos credentials could get truncated when printing to a shared printer. - Printing using "ipps" URIs was not encrypted. - Insecure ICC profiles prevented installation of user profiles for a printer on OS X. - Added more USB quirks for the libusb-based backend (STR #4311, ) - The Russian web interface templates were broken (STR #4310) - The scheduler no longer tries to do Kerberos authentication over the loopback interface. - The IPP backend could fail to pause a job for authentication (STR #4298) - Fixed a regression on the handling of auth keys on OS X if the cups-files.conf was not present or did not contain a SystemAuthKey value. - The scheduler incorrectly did a reverse lookup of the server address when HostNameLookups was turned off (STR #4302) - The scheduler incorrectly computed the final content type value when null filters were present. CHANGES IN CUPS V1.6.2 - Documentation fixes (STR #4229, STR #4239, STR #4234, STR #4248, STR #4259) - Security: All file, directory, user, and group settings are now stored in a separate cups-files.conf configuration file that cannot be set through the CUPS web interface or APIs (STR #4223) - Added a Czech localization (STR #4201) - Added a French localization (STR #4247) - Added a Russian localization (STR #4228, STR #4285) - Updated the Catalan localization (STR #4202) - Local certificate authentication did not guard against an empty certification file (STR #4293) - The scheduler did not reject device URIs with spaces. - Added USB quirk rule for Epson Stylus Photo 750 (STR #4286) - The IPP backend could crash if the printer disconnects early (STR #4284) - cupsGetPPD did not work with statically-configured CUPS shared queues (STR #4178) - The scheduler did not support long MIME media types (STR #4270) - The cupsfilter command did not set the CHARSET environment variable for the text filters (STR #4273) - The lp command did not show errors for unknown "--foo" (STR #4261) - Bad IPP responses could crash ipptool (STR #4262) - Updated USB quirk rules for Canon and Xerox printers (STR #4217, STR #4263) - Added USB blacklisting for printers that require a custom backend (STR #4218) - The PPD compiler did not correctly JCL options (STR #4115, STR #4203) - The ipptool program now supports DEFINE-MATCH and DEFINE-NO-MATCH predicates for STATUS directives. - Fixed a problem with local Kerberos authentication (STR #4140) - Coverity scan: fixed some minor issues (STR #4242) - The scheduler did not remove color profiles after deleting a printer (STR #4232, STR #4276) - The CUPS library did not always detect a timed out connection to the server which could cause temporary loss of printing from applications (STR #4187) - The ipptool program now supports variable substitution in OPERATION and DELAY directives (STR #4175) - The IPP backend now stops queues when the server configuration prevents successful job submission (STR #4125) - The XML output of ipptool contained empty dictionaries (STR #4136) - The scheduler did not delete job control backup files (STR #4244) - cupsGetPPD3 could return a local PPD instead of the correct remote PPD. - The scheduler incorrectly advertised auth-info-required for local queues needing local authentication (STR #4205) - CUPS 1.6 clients using the ServerName directive in client.conf did not work with CUPS 1.3.x or older servers (STR #4231, STR #4291) - The SNMP backend now tries to work around broken printers that use a newline to separate key/value pairs. - The IPP backend did not send a cancel request to printers when a job was canceled and the printer did not support Create-Job. - Fixed EPM packaging files (STR #4199) - OpenBSD build fix (STR #4195, STR #4196, STR #4197) - The scheduler could crash when using Avahi (STR #4183, STR #4192, STR #4200, STR #4213) - The IPP backend could get stuck in an endless loop on certain network errors (STR #4194) - 32-bit builds failed on Debian (STR #4133) - The scheduler no longer accepts or sends job description attributes. - The IPP backend now works around some conformance issues for broken printers (STR #4190) - cupsBackendReport() now filters out all control characters from the reported 1284 device IDs (STR #4124) - The scheduler no longer allows job-name values that are not valid network Unicode strings (STR #4072) - The web interface did not preserve the order of classes, jobs, or printers (STR #4170) - The network backends now support disabling of SNMP supply level queries via the "snmp" URI option (STR #4106) - The IPP backend did not specify the compression used (STR #4181) - ipptool did not support octetString values. - The scheduler did not recognize dnssd: or ipps: URIs as Bonjour shared queues (STR #4158) - Applications could not get the PPD file for statically-configured Bonjour-shared print queues (STR #4159) - The cupsd.conf file included obsolete browsing directives (STR #4157) - Fixed a USB backend compatibility issue on systems using libusb (STR #4155, STR #4191) - Some Bonjour features were not available on systems with Avahi (STR #4156) - CUPS now includes the port number in the Host: header for HTTP requests. - Fixed REPEAT-MATCH for STATUS and EXPECT - was incorrectly erroring out. CHANGES IN CUPS V1.6.1 - Documentation fix (STR #4149) - RPM packaging fixes (STR #4129, #4145) - The Japanese and English web interface headers were swapped (STR #4148) CHANGES IN CUPS V1.6.0 - Document changes (STR #4131) - Added new Catalan (STR #4107) and Spanish (STR #4137) localizations. CHANGES IN CUPS V1.6rc1 - Added a new Japanese localization (STR #4122) - The SNMP backend no longer exits if it is unable to obtain an IPv6 socket (STR #4109) - The LPD backend incorrectly used "localhost" in the control file instead of the current hostname. CHANGES IN CUPS V1.6b1 - Documentation updates (STR #3927, STR #3980, STR #4010, STR #4068) - The scheduler now consolidates all PPD updates from filters at the end of the job (STR #4075) - CUPS now supports color management using colord (STR #3808) - CUPS now supports Bonjour using Avahi (STR #3066) - The PreserveJobFiles and PreserveJobHistory directives now support specification of a time interval (STR #3143) - PPD files can now be archived in (gzip'd) tar files to further reduce the disk space used by PPD files (STR #3772) - The network backends now deal with printers that report their levels in percent but do not specify a maximum capacity of 100 (STR #3551) - The network backends now report full/almost-full waste bins in printers along with end-of-life for cleaning pads (STR #4017) - Added a configure option to set the permissions of the installed cupsd (STR #3459) - Added a new WITH-ALL-VALUES directive to ipptool EXPECT predicates (STR #3949) - CUPS now supports a User directive in client.conf and the CUPS_USER environment variable for overriding the default username (STR #3114) - Now set the PJL USERNAME variable as needed (STR #3100) - Added support for usernames and passwords longer than 32 characters (STR #2856) - Added a new MaxHoldTime directive to automatically cancel jobs that have been held indefinitely after a specific number of seconds (STR #2291) - The LPD backend now uses the originating host name when it is not the local system (STR #2053) - CUPS now prefers the suffix "dpcm" when reporting resolution in dots- per-centimeter (STR #4006) - The configure script and build system no longer support building of separate 32-bit and 64-bit libraries. - The "brightness", "columns", "fitplot", "gamma", "hue", "natural-scaling", "penwidth", "position", "ppi", "saturation", and "scaling" options are not longer supported (STR #4010) - The "page-bottom", "page-left", "page-right", "page-top", "prettyprint", and "wrap" options have been deprecated (STR #4010) - The scheduler now reports the standard "number-of-documents" attribute instead of the CUPS-specific "document-count" attribute in job objects. - Added new destination connection and enumeration functions (STR #3924) - Added new option, localization, and job submission functions that do not depend on PPD files (STR #3925) - Added a new MaxJobTime directive for cupsd that specifies the maximum amount of time allowed for a job to complete before it is canceled. - The default password callback now supports passwords up to 127 characters. - The scheduler now supports a DefaultAuthType of "auto" to automatically choose between Basic (username/password) and Negotiate (Kerberos) authentication. - cupsSideChannelSNMPGet/Walk now support OIDs and values up to 64k in length. - CUPS no longer supports automatic remote printers or implicit classes via the CUPS, LDAP, or SLP protocols (STR #3922, STR #3923) - The PPD APIs are now deprecated and will be removed in a future version of CUPS (STR #3927) - The default IPP version for requests is now 2.0 (STR #3929) - The IPP APIs no longer expose the ipp_t or ipp_attribute_t structures and instead provide accessor functions (STR #3928) - The scheduler will no longer run programs with group write permission. - The PHP module has been removed (STR #3932) - The bannertops, commandtoescpx, commandtopclx, imagetops, imagetoraster, pdftops, rastertoescpx, rastertopclx, and texttops filters have been removed (STR #3930) - The serial and parallel backends have been removed (STR 3935) cups-2.2.7/CHANGES-1.7.txt000664 000765 000024 00000027373 13255074424 015303 0ustar00msweetstaff000000 000000 CHANGES-1.7.txt --------------- CHANGES IN CUPS V1.7.5 - Security: Addressed some more situations where symlinked files would be served by the web interface (STR #4455) - The LPD backend did not work with some versions of glibc (STR #4452) - CGI scripts did not work (STR #4454) - The cupsd.conf man page did not list the ErrorPolicy directive (STR #4457) - Updated the Brazilian Portuguese translation (STR #4456) CHANGES IN CUPS V1.7.4 - Security: The web interface incorrectly served symlinked files and files that were not world-readable, potentially leading to a disclosure of information (STR #4450) - The CUPS headers incorrectly needed libdispatch for blocks support (STR #4397) - CUPS did not compile when Avahi or mDNSResponder was not present (STR #4402, STR #4424) - The "snmp" option did not work with the network backends (STR #4422) - The User directive in client.conf did not override the USER environment variable (STR #4426) - The web interface now properly shows a "Go" button for all text-based browsers (STR #4425) - The MaxJobTime directive now properly supports time values (STR #4434) - The RPM spec file did not work due to the new Brazilian Portuguese localization (STR #4436) - Fixed an "IPP read error" issue (STR #4440) - Fixed the --disable-libusb configure option (STR #4439) - Fixed the debug output from the DNS-SD backend when using Avahi (STR #4444) - Fixed a bug in the CUPS_SC_GET_DEVICE_ID handling by the network backends (STR #4447) - Added USB quirk rule for Lexmark E230 (STR #4448) CHANGES IN CUPS V1.7.3 - Added Brazilian Portuguese translation (STR #4409) - Fixed mapping of OutputBin values such as "Tray1" () - Several ippGet* functions incorrectly returned -1 instead of 0 on error. - The cupsGetResponse function did not work properly with CUPS_HTTP_DEFAULT () - The IPP backend did not abort a job when the printer did not validate the supplied options () - Fixed an authentication race condition in cupsSendRequest (STR #4403) - The scheduler did not add the "job-hold-until-specified" reason when holding a job using the lp command (STR #4405) - The configure script incorrectly added libgcrypt as a GNU TLS dependency (STR #4399) - cupsGetDestMediaCount did not work for CUPS_MEDIA_FLAGS DEFAULT (STR #4414) - Auto-typing of PWG Raster files did not work (STR #4417) - IPP queues using hardcoded credentials would ask for credentials (STR #4371) - Dates in non-UTF-8 locales did not display correctly (STR #4388) - The RPM spec file now looks for libusb-devel 1.0 or later. - Fixed the "create-printer-subscription.test" file for IPPTOOL (STR #4420) CHANGES IN CUPS V1.7.2 - Security: The scheduler now blocks URLs containing embedded HTML (STR #4356) - Documentation fixes (STR #3259, STR #4346, STR #4355) - Fixed the Japanese localization (STR #4385) - Added a German localization (STR #4363) - The cupsfilter command incorrectly read the cupsd.conf file; it now reads the cups-files.conf file instead. - Fixed OS X builds with Xcode 5.x () - Fixed SSL support on Windows (STR #4358) - Fixed documentation and naming of Create-Job/Printer-Subscriptions operations (STR #4389) - Phone numbers in fax jobs were not properly filtered for IPP FaxOut () - Updated Linux "relro" support (STR #4349) - Fixed a memory leak in the label printer driver (STR #4393) - cupsEnumDests did not set the "is_default" field (STR #4332) - cupsDoIORequest could miss the server status, causing failed lpadmin and other administrative commands (STR #4386) - cupsEnumDests didn't always call the callback function (STR #4380) - "lp -i job-id -H hold" did not work (STR #nnn) - CUPS didn't compile on older platforms (STR #4338) - Several libcups files did not have the Apple license exception notice (STR #4361) - Fixed a D-BUS threading issue that caused the scheduler to crash (STR #4347) - The scheduler now automatically reconnects to Avahi as needed (STR #4370, STR #4373) - The scheduler did not handle GET requests for the log files properly (STR #3265) - The dnssd backend did not always report all discovered printers using Avahi (STR #4365) - The Zebra printer driver did not properly handle negative "label top" values (STR #4354) - The scheduler did not always update the MakeModel value in printers.conf after updating the driver (STR #4264) - The LPD mini daemon did not support print jobs larger than 2GB (STR #4351) - Fixed a bug in the status reading code when sending a compressed data stream to an IPP printer/server () - The IPP backend might not include all job attributes in Validate-Job operations () - Fixed some clang-reported issues () CHANGES IN CUPS V1.7.1 - Security: the lppasswd program incorrectly used settings from ~/.cups/client.conf (STR #4319) - Auto debug logging was broken in 1.7.0 () - Some gzip'd PPD files could not be used () - Cleaned up some job logging in the scheduler () - ATTR messages could cause string pool memory corruption in the scheduler () - The RPM spec file did not list the build requirements; this was on purpose, but now we are listing the Red Hat package names (, STR #4322) - Printing to a raw queue could result in corrupt output due to opportunistic compression () - The GNU TLS support code triggered many compiler warnings due to the use of old GNU TLS compatibility type names () - The "make check" test suite did not work on Linux without the cups-filters package installed () - Japanese PPDs using with the Shift-JIS encoding did not work () - "tel:" URIs incorrectly had slashes () - The libusb-based USB backend incorrectly used write timeouts () - Shared printers could become inaccessible after a few days on OS X () - The IPP backend did not wait for a busy printer to become available before attempting to print () - CUPS did not support "auto-monochrome" or "process-monochrome" for the "print-color-mode" option () - Using "@IF(name)" in an Allow or Deny rule did not work (STR #4328) - lpq and lpstat did not list jobs in the correct order when priorities were specified (STR #4326) - The D-BUS notifier did not remove its lockfile (STR #4314) - CUPS incorrectly used the USER environment variable when the name did not match the user ID (STR #4327) CHANGES IN CUPS V1.7.0 - Updated the Japanese localization. - The lpadmin command did not send the PPD name from the "-m" option () - Network backends now use the prtMarkerSuppliesClass property to determine the direction of supply level values () - The scheduler did not remove backup PPD files when a printer was deleted () - The scheduler incorrectly responded to HEAD requests when the web interface was disabled () - The scheduler did not respond using the hostname specified by the client () - Fax queues did not work when shared via Bonjour () - Error messages from the scheduler were not localized using the language specified in the client's IPP request () - Added an Italian localization () - Fixed a couple memory leaks in ippfind that were reported by Clang. - Fixed a compile issue on 64-bit Linux with Clang - need to use the -pie option instead of -Wl,-pie now () - The ippfind utility reported the wrong port numbers when compiled against Avahi () - httpGetFd, httpGetFile, httpPutFd, and httpPutFile did not automatically reconnect if the server closed the connecion after the previous response. - Fixed a compile error in libcups () - The scheduler incorrectly did not pass a FINAL_CONTENT_TYPE environment variable to the filters or backend () - The cups-exec helper program could fail randomly on OS X due to sandbox violations when closing excess file descriptors () - The scheduler incorrectly did not use the kqueue interface on OS X. CHANGES IN CUPS V1.7rc1 - Printer xxx-default values were not reported by Get-Printer-Attributes or lpoptions () - Fixed deprecation warnings for many functions on OS X so they are tied to the deployment version when building () - Fixed a build issue on ARM-based Linux systems - unable to validate va_list arguments. - Added a new ippfind tool for finding IPP printers and other Bonjour services () - Fixed some issues with conversion of PWG media size names to hundredths of millimeters () - The IPP backend could crash on OS X when printing to a Kerberized printer () - The ipptool program now automatically extends timeouts when the output buffer is filled () - The ipptool program now supports the --help and --version options. - The ipptool program did not continue past include file errors by default () - The ipptool program now supports FILE-ID and TEST-ID directives and includes their values in its XML output () - The ipptool program now supports WITH-HOSTNAME, WITH-RESOURCE, and WITH-SCHEME expect predicates to compare the corresponding URI components () CHANGES IN CUPS V1.7b1 - The configure script now supports a --with-rundir option to change the transient run-time state directory from the default to other locations like /run/cups (STR #4306) - The scheduler now supports PPD lookups for classes (STR #4296) - The cupsfilter program did not set the FINAL_CONTENT_TYPE environment variable for filters. - Added a new "-x" option to the cancel command (STR #4103) - Made the PWG media handling APIs public (STR #4267) - Implemented ready media support for the cupsGetDestMediaXxx APIs (STR #4289) - Added new cupsFindDestDefault, cupsFindDestReady, and cupsFindDestSupported APIs (STR #4289) - Added new cupsGetDestMediaByIndex, cupsGetDestMediaCount, and cupsGetDestMediaDefault APIs (STR #4289) - Added new ippGet/SetOctetString APIs for getting and setting an octetString value (STR #4289) - Added new ippCreateRequestedArray API for generating a array of attributes from the requested-attributes attribute. - The ipptool utility now supports compression, conditional tests based on the presence of files, and new DEFINE predicates for STATUS. - Added new IPP APIs for checking values (STR #4167) - Added new IPP APis for adding and setting formatted strings. - Added new HTTP APIs to support basic server functionality via libcups. - The dnssd backend now generates a 1284 device ID as needed (STR #3702) - CUPS now supports compressing and decompressing streamed data (STR #4168) - CUPS now supports higher-level PIN printing, external accounting systems, and "print here" printing environments (STR #4169) - IRIX is no longer a supported operating system (STR #4092) - The PPD compiler now supports JCL options properly (STR #4115) - The web interface now checks whether the web browser has cookies enabled and displays a suitable error message (STR #4141) cups-2.2.7/CHANGES-2.0.txt000664 000765 000024 00000023510 13255074424 015262 0ustar00msweetstaff000000 000000 CHANGES-2.0.txt --------------- CHANGES IN CUPS V2.0.4 - Fixed a bug in cupsRasterWritePixels (STR #4650) - Fixed redirection in the web interface (STR #4538) - The IPP backend did not respond to side-channel requests (STR #4645) - The scheduler did not start all pending jobs at once (STR #4646) - The web search incorrectly searched time-at-xxx values (STR #4652) - Fixed an RPM spec file issue (STR #4657) - The scheduler incorrectly started jobs while canceling multiple jobs (STR #4648) - Fixed processing of server overrides without port numbers (STR #4675) - Documentation changes (STR #4651, STR #4674) CHANGES IN CUPS V2.0.3 - Security: Fixed CERT VU #810572 exploiting the dynamic linker (STR #4609) - Security: The scheduler could hang with malformed gzip data (STR #4602) - Restored missing generic printer icon file (STR #4587) - Fixed logging of configuration errors to show up as errors (STR #4582) - Fixed potential buffer overflows in raster code and filters (STR #4598, STR #4599, STR #4600, STR #4601) - Fixed a gzip processing bug (#4602) - Fixed inside (STR #4575) - Fixed lpadmin when both -m and -o are used (STR #4578) - The web interface always showed support for 2-sided printing (STR #4595) - cupsRasterReadHeader did not fully validate the raster header (STR #4596) - The rastertopwg filter did not check for truncated input (STR #4597) - The cups-lpd mini-daemon did not check for request parameters (STR #4603) - The scheduler could get caught in a busy loop (STR #4605) - The sample Epson driver could crash (STR #4616) - The IPP backend now correctly monitors jobs () - The ppdhtml and ppdpo utilities crashed when the -D option was used before a driver information file (STR #4627) - ippfind incorrectly substituted "=port" for service_port. - The IPP/1.1 test file did not handle the initial print job completing early (STR #4576) - Fixed a memory leak in cupsConnectDest (STR #4634) - PWG Raster Format output contained invalid ImageBox values () - Added Russian translation (STR #4577) - Added German translation (STR #4635) CHANGES IN CUPS V2.0.2 - Security: cupsRasterReadPixels buffer overflow with invalid page header and compressed raster data (STR #4551) - Command-line programs were not localized on Mac OS X () - The scheduler incorrectly cleared the MakeModel string in the printers.conf file after a restart () - CUPS did not compile with older versions of GNU TLS (STR #4527) - CUPS did not compile without Avahi or mDNSResponder (STR #4523) - ippLength() did not return the correct length for IPP_TAG_CONST string values. - The scheduler incorrectly aborted jobs after a job was restarted () - The cups-files.conf file contained the old ServerCertificate/Key directives instead of ServerKeychain. - Fixed builds when no SSL/TLS library is available, or when explicitly disabled (STR #4531) - Fixed an OpenBSD charset transcoding issue. - Fixed USB printing on OpenBSD (STR #4525) - The --without-xinetd configure option did not work (STR #4542) - Backends needing to load OS X kernel extensions did not work () - Mapping of PPD keywords to IPP keywords did not work if the PPD keyword was already an IPP keyword () - cupsGetPPD* sent bad requests (STR #4567) - ippserver used the wrong temporary directory on Windows (STR #4547) - ippserver did not handle Bonjour registrations properly (STR #4548) - The scheduler could crash during shutdown if Avahi was shutdown first (STR #4550) - Added a USB quirk rule for Intermec printers (STR #4553) - The scheduler did not always log which configuration file had the error (STR #4559) - The ippfind and ipptool programs now correctly match hostnames with trailing dots (STR #4563) - The ipptool timeout option did not work (STR #4515) - Fixed several issues with client.conf, CUPS_SERVER, and the "-h" option of most commands (STR #4528) - Another change for OpenBSD (STR #4526) - Added Japanese localization (STR #4524) - Documentation changes (STR #4569) CHANGES IN CUPS V2.0.1 - Security: SSLv3 is now disabled by default to protect against the POODLE attack (STR #4476) - Printer sharing did not work when systemd was being used (STR #4497) - cupsGetPPD* would return a symlink to the PPD in /etc/cups/ppd even if it was not readable by the user (STR #4500) - The web interface now protects against frame "click-jacking" attacks (STR #4492) - Fixed a crash in ippAttributeString () - Fixed a crash in the scheduler on Linux/*BSD if colord was not running (STR #4496) - Fixed a random crash in the scheduler when not using systemd (STR #4484) - Added systemd support for cups-lpd (STR #4493) - The scheduler did not honor the FatalErrors directive for mis- configured Group and SystemGroup values (STR #4495) - The network backends no longer report waste-receptacle conditions when using SNMP (STR #4499) - The IPP backend did not work with some configurations of Windows (STR #4503) - RPMs did not build (STR #4490) - Added a USB quirk rule for the Brother HL-1250 (STR #4519) - Fixed compiles on unsupported platforms (STR #4510) - "cancel -a" did not cancel all jobs on all destinations (STR #4513) - The web interface did not work on OpenBSD (STR #4496) CHANGES IN CUPS V2.0.0 - The scheduler did not preserve listener sockets from launchd or systemd after a restart () - Added some USB quirk rules for the libusb-based USB backend (STR #4482) - Spanish localization update (STR #4487) - Updated documentation for 2.0.0 release. CHANGES IN CUPS V2.0rc1 - Documentation updates (STR #4464) - The scheduler now monitors the AC power status on OS X, allowing for "sleep printing" when sharing printers () - The scheduler incorrectly called launch_activate_socket multiple times on OS X () - The ippserver test program now passes the IPP Everywhere self- certification tests (STR #4101) - Relaxed the new OS X filter sandbox slightly (STR #4471, ) - Dropped the old Epson Stylus Color/Photo sample drivers since they don't work with any current printers and there are free alternatives that produce much better output () - Log and configuration files that are not world-readable are again accessible via the web interface (STR #4461) - PPD files are now created using the permissions specified by the ConfigFilePerm directive. - Fixed RPM build issues (STR #4459) - Fixed the spinner image and restart page when reconfiguring the scheduler through the web interface (STR #4475) CHANGES IN CUPS V2.0b1 - Added a "--list-filters" option to the cupsfilter command (STR #4325) - Added systemd support (STR #3917) - Added support for re-sending a job as a raster file if a higher-level format such as PDF fails () - Added support for regular expression matching in the MIME type rules () - Added support for TLS certificate validation and policy enforcement (STR #1616) - Added support for simultaneous XML and test output from ipptool. - Added support for PAUSE directive in ipptool test files. - Added support for auto-typing of TIFF files by ipptool (STR #4418) - The scheduler now returns completed jobs in the correct newest-to- oldest order (STR #4396) - The configure script now supports target-specific tools for pkg-config and others (STR #4423) - The ipptool program now supports EXPECT statements for collection member attributes () - The ipptool program now supports collection attributes with multiple values () - The sample drivers now include all of the installed localizations by default () - Adopted Linux man page conventions and updated all man pages (STR #4372, STR #4329) - The scheduler now supports the "first-index" operation attribute for the Get-Jobs operation (STR #2913) - Changed the default AccessLogLevel and PageLogFormat to disable the access_log and page_log files by default () - cupsRasterInterpretPPD now supports the Orientation header in order to support long-edge feed raster printers () - The scheduler now allows run-as-root backends to have group read and execute permissions (STR #2935) - The ippFindAttribute and ippFindNextAttribute functions now support hierarchical searches (STR #4395) - Dropped OpenSSL support in favor of GNU TLS. - Dropped "dark wake" support on OS X, which was preventing portables from going to sleep when there was a stuck job. We now use a variation of the CUPS 1.4 sleep support to do a cleaner sleep () - Dropped support for AIX, HP-UX, and OSF/1 (aka Digital UNIX) - Dropped lppasswd and support for Digest authentication in in the scheduler (STR #4321) - The cupsGetClasses, cupsGetPrinters, and cupsTempFile functions are no longer supported. - The scheduler now caches more job history data and limits the number of completed jobs returned by Get-Jobs as needed in order to prevent a denial-of-service on busy servers (STR #2913) - The filter/backend sandbox on OS X now defaults to a more strict whitelist () - Increased the default idle exit timeout to 60 seconds on OS X () - Printer classes were not accessible on OS X () - The scheduler now uses to close the default printer definition in printers.conf (STR #4153) - Canceling all jobs in the web interface now just cancels the jobs (STR #1914) cups-2.2.7/CHANGES-2.1.txt000664 000765 000024 00000014515 13255074424 015270 0ustar00msweetstaff000000 000000 CHANGES-2.1.txt --------------- CHANGES IN CUPS V2.1.4 - Fixed reporting of 1284 Device IDs (Issue #3835, PR #3836) - Fixed printing of multiple files to raw queues (Issue #4782) - The scheduler did not implement the Hold-New-Jobs opertion correctly (Issue #4767) - The ipptool program truncated values at 8k (Issue #4786) - The ipptool program did not correctly report uriScheme values in plist output (Issue #4785) - The cups-lpd mini-daemon incorrectly included the document-name attribute when creating a job. It should only be included when sending a job (Issue #4790) - USB quirk updates (Issue #4778, Issue #4789) - Documentation update (Issue #4772) CHANGES IN CUPS V2.1.3 - The default password function did not work on some platforms (Issue #4750) - The scheduler should not exit under memory pressure () - The EPL2 and ZPL sample drivers did not properly support the CutMedia option. - Pending subscriptions would prevent the scheduler from idle exiting (Issue #4754) - Fixed some issues in ipptool for skipped tests () - The "lp -H resume" command did not reset the "job-state-reasons" attribute value (Issue #4752) - cupsEncodeOptions2 incorrectly handled escaped values () - The scheduler did not allow access to resource files (icons, etc.) when the web interface was disabled (Issue #4755) - Localization fix (Issue #4756) CHANGES IN CUPS V2.1.2 - Re-release of CUPS 2.1.1 as CUPS 2.1.2 due to error in tagging of the 2.1.1 release (pulled content from the 2.2.x tree instead) CHANGES IN CUPS V2.1.1 - Security hardening fixes (, , , , , , , , , , , , , , , , , , , ) - The cupsGetPPD* functions did not work with IPP printers (Issue #4725) - Some older HP LaserJet printers need a delayed close when printing using the libusb-based USB backend (Issue #4549) - The libusb-based USB backend did not unload the kernel usblp module if it was preventing the backend from accessing the printer (Issue #4707) - Current Primera printers were incorrectly reported as Fargo printers (Issue #4708) - The IPP backend did not always handle jobs getting canceled at the printer () - Scheduler logging change (Issue #4728) - Added USB quirk for Canon MP530 (Issue #4730) - The scheduler did not deliver job notifications for jobs submitted to classes (Issue #4733) - Changing the printer-is-shared value for a remote queue did not produce an error (Issue #4738) - The IPP backend incorrectly included the job-password attribute in Validate-Job requests () - Updated localizations (Issue #4709) CHANGES IN CUPS V2.1.0 - Fixed more scheduler crash bugs in the new logging code (Issue #4687, Issue #4690) - The scheduler did not use the ConfigFilePerm setting when copying PPD files or interface scripts attached to a request (Issue #4703) - Now support new Chinese locale IDs and their correct fallback locales (, ) - "make check" incorrectly reported an expectation of 18 warning messages when 8 were expected (Issue #4684) - The new PDF file type rule did not work (Issue #4692) - The scheduler did not update the jobs.cache file when job files were expired (Issue #4706) - Fixed some configure script issues (Issue #4694, Issue #4695, Issue #4698) - Documentation updates (Issue #4691, Issue #4693) CHANGES IN CUPS V2.1rc1 - Added support for 3D printers (basic types only, no built-in filters) based on PWG white paper. - Fixed bugs in the new journald support (Issue #4655, Issue #4658, Issue #4661) - Fixed domain socket support on Linux (Issue #4679) - Fixed signal handlers in the dnssd and usb backends (Issue #4671) - in sections now applies to all operations when used by itself (Issue #4659) - Configure script changes for systemd support (Issue #4669) - Updated autoconf sources to use newer form of AC_INIT (Issue #4664) CHANGES IN CUPS V2.1b1 - Improved speed of ppdMarkDefaults for complex/large PPDs () - The IPP backend now stops sending print data if the printer indicates the job has been aborted or canceled () - The IPP backend now sends the job-pages-per-set attribute when printing multiple copy jobs with finishings () - The IPP backend now updates the cupsMandatory values when the printer configuration changes () - No longer install banner files since third-party banner filters now supply their own (Issue #4518) - Added support for EXPECT-ALL directive in ipptool test files (Issue #4469) - Added support for WITH-VALUE-FROM predicate in ipptool test files (Issue #4470) - The scheduler no longer listens on the loopback interface unless the web interface or printer sharing are enabled () - Added a PPD generator for IPP Everywhere printers (Issue #4258) - Now install "default" versions of more configuration files () - The cupstestppd program did not handle "maxsize(nnn)" entries in cupsFilter/cupsFilter2 values () - The scheduler now checks the return value of rename() calls (Issue #4589) - The scheduler now validates ErrorPolicy values in config files (Issue #4591) - Long cookies caused the web interface to stop working (Issue #4619) - Added SSLOptions values to allow Diffie-Hellman key exchange and disable TLS/1.0 support. - Updated the scheduler to support more IPP Everywhere attributes (Issue #4630) - The scheduler now supports advanced ASL and journald logging when "syslog" output is configured (Issue #4474) - The scheduler now supports logging to stderr when running in the foreground (Issue #4505) cups-2.2.7/CHANGES.md000664 000765 000024 00000040050 13255074424 014544 0ustar00msweetstaff000000 000000 CHANGES - 2.2.7 - 2018-03-22 ============================ Changes in CUPS v2.2.7 ---------------------- - NOTICE: Raw print queues are now deprecated (Issue #5269) - Fixed an Avahi crash bug in the scheduler (Issue #5268) - The IPP Everywhere PPD generator did not include the `cupsJobPassword` keyword, when supported (Issue #5265) - Systemd did not restart cupsd when configuration changes were made that required a restart (Issue #5263) - The Lexmark Optra E310 printer needs the "no-reattach" USB quirk rule (Issue #5259) - The scheduler could crash while adding an IPP Everywhere printer (Issue #5258) - Label printers supported by the rastertolabel driver don't support SNMP, so don't delay printing to test it (Issue #5256) - Fixed a compile issue when PAM is not available (Issue #5253) - Documentation fixes (Issue #5252) - Star Micronics printers need the "unidir" USB quirk rule (Issue #5251) - The scheduler now supports using temporary print queues for older IPP/1.1 print queues like those shared by CUPS 1.3 and earlier (Issue #5241) - Fixed printing to some IPP Everywhere printers (Issue #5238) - Kerberized printing to another CUPS server did not work correctly (Issue #5233) - The `cupsRasterWritePixels` function did not correctly swap bytes for some formats (Issue #5225) - Added a USB quirk rule for Canon MP280 series printers (Issue #5221) - The `ppdInstallableConflict` tested too many constraints (Issue #5213) - More fixes for printing to old CUPS servers (Issue #5211) - The `cupsCopyDest` function now correctly copies the `is_default` value (Issue #5208) - The scheduler did not work with older versions of uClibc (Issue #5188) - The scheduler now substitutes default values for invalid job attributes when running in "relaxed conformance" mode (Issue #5186) - Fixed PAM module detection and added support for the common PAM definitions (Issue #5185) - Fixed a journald support bug in the scheduler (Issue #5181) - The cups-driverd program incorrectly stopped scanning PPDs as soon as a loop was seen (Issue #5170) - Fixed group validation on OpenBSD (Issue #5166) - Fixed the `ippserver` sample code when threading is disabled or unavailable (Issue #5154) - The `cupsEnumDests` function did not include options from the lpoptions files (Issue #5144) - The `SSLOptions` directive now supports `MinTLS` and `MaxTLS` options to control the minimum and maximum TLS versions that will be allowed, respectively (Issue #5119) - The scheduler did not write out dirty configuration and state files if there were open client connections (Issue #5118) - The `lpadmin` command now provides a better error message when an unsupported System V interface script is used (Issue #5111) - The `lp` and `lpr` commands now provide better error messages when the default printer cannot be found (Issue #5096) - No longer support backslash, question mark, or quotes in printer names (Issue #4966) - The CUPS library now supports the latest HTTP Digest authentication specification including support for SHA-256 (Issue #4862) - The `lpstat` command now reports when new jobs are being held (Issue #4761) - The `lpoptions` command incorrectly saved default options (Issue #4717) - The `ppdLocalizeIPPReason` function incorrectly returned a localized version of "none" (rdar://36566269) - TLS connections now properly timeout (rdar://34938533) - The IPP backend did not properly detect failed PDF prints (rdar://34055474) - Temporary files are now placed in the correct directory for sandboxed applications on macOS (rdar://problem/37789645) Changes in CUPS v2.2.6 ---------------------- - DBUS notifications could crash the scheduler (Issue #5143) - Added USB quirks rules for Canon MP540 and Samsung ML-2160 (Issue #5148) - Fixed TLS cipher suite selection with GNU TLS (Issue #5145, Issue #5150) - Localization updates (Issue #5152) Changes in CUPS v2.2.5 ---------------------- - The scheduler's `-t` option did not force all errors to the standard error file, making debugging of configuration problems hard (Issue #5041) - Fixed a typo in the CUPS Programming Manual (Issue #5042) - Fixed RPM packaging issue (Issue #5043, Issue #5044) - The `cupsGetDests` function incorrectly returned an empty list of printers if there was no default printer (Issue #5046) - The `cupsGetDests` function waited too long for network printers (Issue #5049) - Libtool support was completely broken with current libtool versions that use an incompatible command-line syntax (Issue #5050) - Fixed a build issue with `--enable-mallinfo` (Issue #5051) - The ippserver test program contained a deadlock issue (Issue #5054) - The `cupsLocalizeDest*` functions did not provide base localizations for all registered IPP attributes and values (Issue #5056) - The --enable-libtool configure option requires a path to the libtool program, but doesn't document or check for it (Issue #5062) - Fixed the `SSLOptions DenyCBC` option when using GNU TLS (Issue #5065) - Fixed the `ServerTokens None` option (Issue #5065) - Fixed the default `ServerAlias` value from `ServerName` (Issue #5072) - Fixed the adminurl field in the TXT record for fully-qualified `ServerName` values (Issue #5074) - The scheduler now creates a PID file when not running on demand with a modern service launcher (Issue #5080) - The web interface did not support newer language identifiers used by Microsoft web browsers (Issue #5803) - Updated the cups-files.conf and cupsd.conf file documentation for missing directives (Issue #5084) - Fixed an Avahi-related crash bug in the scheduler (Issue #5085, Issue #5086) - Fixed the interactions between the "print-quality" and "cupsPrintQuality" options (Issue #5090) - The IPP Everywhere PPD generator now sorts the supported resolutions before choosing them for draft, normal, and best quality modes (Issue #5091) - Fixed the localization unit test on Linux (Issue #5097) - The CUPS library did not reuse domain sockets (Issue #5098) - Fixed the "make check" target for some environments (Issue #5099) - The scheduler woke up once per second to remove old temporary queues (Issue #5100) - Added USB quirk rule for Kyocera printer (Issue #5102, Issue #5103) - Re-documented the limits of `file:///...` device URIs and moved the FileDevice directive in `cups-files.conf` to the list of deprecated configuration directives (Issue #5117) - Added USB quirk rule for HP LaserJet 1160 printer (Issue #5121) - Fixed the script interpreter detection in the configure script (Issue #5122) - The network backends now retry on more error conditions (Issue #5123) - Added a French translation of the web interface (Issue #5134) - `cupsGetDests2` was not using the supplied HTTP connection (Issue #5135) - `httpAddrConnect` leaked sockets in certain circumstances, causing some printers to hang (rdar://31965686) - Fixed an issue with Chinese localizations on macOS (rdar://32419311) - The IPP backend now always sends the "finishings" attribute for printers that support it because otherwise the client cannot override printer defaults (rdar://33169732) - The `cupsGetNamedDest` function did not use the local default printer (rdar://33228500) - The IPP backend incorrectly sent the "job-pages-per-set" attribute to PDF printers (rdar://33250434) - Fixed the `cups.strings` file that is used on macOS (rdar://33287650) - CUPS now sends the `Date` HTTP header in IPP requests (rdar://33302034) - The `ippCopyAttribute` function did not copy out-of-band values correctly (rdar://33688003) - Fixed the localization fallback code on macOS (rdar://33583699) - The scheduler did not run with a high enough priority, causing problems on busy systems (rdar://33789342) - Added support for Japanese Kaku 1 envelope size (rdar://34774110) - The `ipptool` program's `-P` option did not work correctly. - The `ipptool` program did not compare URI scheme or hostname components correctly for the WITH-ALL-HOSTNAMES, WITH-ALL-SCHEMES, WITH-HOSTNAME, or WITH-SCHEME predicates. Changes in CUPS v2.2.4 ---------------------- - The scheduler did not remove old job files (Issue #4987) - cupsEnumDests did not return early when all printers had been discovered (Issue #4989) - The CUPS build system now supports cross-compilation (Issue #4897) - Added a new CUPS Programming Manual to replace the aging API documentation. - Added the `cupsAddIntegerOption` and `cupsGetIntegerOption` functions (Issue #4992) - The `cupsGetDests` and `cupsCreateJob` functions now support Bonjour printers (Issue #4993) - Added a USB quirk rule for Lexmark E260dn printers (Issue #4994) - Fixed a potential buffer overflow in the `cupstestppd` utility (Issue #4996) - IPP Everywhere improvements (Issue #4998) - Fixed the "cancel all jobs" function in the web interface for several languages (Issue #4999) - Fixed issues with local queues (Issue #5003, Issue #5008, Issue #5009) - The `lpstat` command now supports a `-e` option to enumerate local printers (either previously added or on the network) that can be accessed (Issue #5005) - The `lp` and `lpr` commands now support printing to network printers that haven't yet been added (Issue #5006) - Fixed a typo in the mime.types file. - Fixed a bug in the Spanish web interface template (Issue #5016) - The `cupsEnumDests*` and `cupsGetDest*` functions now report the value of the "printer-is-temporary" Printer Status attribute (Issue #5028) - Added Chinese localization (Issue #5029) - The `cupsCheckDestSupported` function did not support `NULL` values (Issue #5031) - Fixed some issues in the RPM spec file (Issue #5032) - The `cupsConnectDest` function now supports the `CUPS_DEST_FLAGS_DEVICE` flag for explicitly connecting to the device (printer) associated with the destination. - The `SSLOptions` directive in "client.conf" and "cupsd.conf" now supports `DenyCBC` and `DenyTLS1.0` options (Issue #5037) Changes in CUPS v2.2.3 ---------------------- - The IPP backend could get into an infinite loop for certain errors, causing a hung queue () - The scheduler could pause responding to client requests in order to save state changes to disk () - Added support for PPD finishing keywords (Issue #4960, Issue #4961, Issue #4962) - The IPP backend did not send a media-col attribute for just the source or type (Issue #4963) - IPP Everywhere print queues did not always support all print qualities supported by the printer (Issue #4953) - IPP Everywhere print queues did not always support all media types supported by the printer (Issue #4953) - The IPP Everywhere PPD generator did not return useful error messages (Issue #4954) - The IPP Everywhere finishings support did not work correctly with common UI or command-line options (Issue #4976) - Fixed an error handling issue for the network backends (Issue #4979) - The default cupsd.conf file did not work on systems compiled without Kerberos support (Issue #4947) - The "reprint job" option was not available for some canceled jobs (Issue #4915) - Updated the job listing in the web interface (Issue #4978) - Fixed some localization issues on macOS () Changes in CUPS v2.2.2 ---------------------- - Fixed some issues with the Zebra ZPL printer driver (Issue #4898) - Fixed some issues with IPP Everywhere printer support (Issue #4893, Issue #4909, Issue #4916, Issue #4921, Issue #4923, Issue #4932, Issue #4933, Issue #4938) - The rastertopwg filter could crash with certain input (Issue #4942) - Optimized connection usage in the IPP backend () - The scheduler did not detect when an encrypted connection was closed by the client on Linux (Issue #4901) - The cups-lpd program did not catch all legacy usage of ISO-8859-1 (Issue #4899) - Fixed builds on systems without a working poll() implementation (Issue #4905) - Added a USB quirk rule for the Kyocera Ecosys P6026cdn (Issue #4900) - The scheduler no longer creates log files on startup () - The ippContainsString function now uses case-insensitive comparisons for mimeMediaType, name, and text values in conformance with RFC 2911. - The network backends now log the addresses that were found for a printer () - Let's Encrypt certificates did not work when the hostname contained uppercase letters (Issue #4919) - Fixed reporting of printed pages in the web interface (Issue #4924) - Updated systemd config files (Issue #4935) - Updated documentation (PR #4896) - Updated localizations (PR #4894, PR #4895, PR #4904, PR #4908, Issue #4946) - Updated packaging files (Issue #4940) Changes in CUPS v2.2.1 ---------------------- - Added "CreateSelfSignedCerts" directive for cups-files.conf to control whether the scheduler automatically creates its own self-signed X.509 certificates for TLS connections (Issue #4876) - http*Connect did not handle partial failures (Issue #4870) - Addressed some build warnings on Linux (Issue #4881) - cupsHashData did not use the correct hashing algorithm () - Updated man pages (PR #4885) - Updated localizations (PR #4877, PR #4886) Changes in CUPS v2.2.0 ---------------------- - Normalized the TLS certificate validation code and added additional error messages to aid troubleshooting. - The httpConnect functions did not work on Linux when cupsd was not running (Issue #4870) - The --no-remote-any option of cupsctl had no effect (Issue #4866) - http*Connect did not return early when all addresses failed (Issue #4870) Changes in CUPS v2.2rc1 ----------------------- - Updated the list of supported IPP Everywhere media types. - The IPP backend did not validate TLS credentials properly. - The printer-state-message attribute was not cleared after a print job with no errors (Issue #4851) - The CUPS-Add-Modify-Class and CUPS-Add-Modify-Printer operations did not always return an error for failed adds (Issue #4854) - PPD files with names longer than 127 bytes did not work (Issue #4860) - Updated localizations (Issue #4846, PR #4858) Changes in CUPS v2.2b2 ---------------------- - Added Upstart support (PR #4825) - CUPS now supports Let's Encrypt certificates on Linux. Changes in CUPS v2.2b1 ---------------------- - All CUPS commands now support POSIX options (Issue #4813) - The scheduler now restarts faster (Issue #4760) - Improved performance of web interface with large numbers of jobs (Issue #3819) - Encrypted printing can now be limited to only trusted printers and servers () - The scheduler now advertises PWG Raster attributes for IPP Everywhere clients (Issue #4428) - The scheduler now logs informational messages for jobs at LogLevel "info" (Issue #4815) - The scheduler now uses the getgrouplist function when available (Issue #4611) - The IPP backend no longer enables compression by default except for certain raster formats that generally benefit from it () - The scheduler did not handle out-of-disk situations gracefully (Issue #4742) - The LPD mini-daemon now detects invalid UTF-8 sequences in job, document, and user names (Issue #4748) - The IPP backend now continues on to the next job when the remote server/ printer puts the job on hold () - The scheduler did not cancel multi-document jobs immediately () - The scheduler did not return non-shared printers to local clients unless they connected to the domain socket () - The scheduler now reads the spool directory if one or more job cache entries point to deleted jobs () - Added support for disc media sizes () - The httpAddrConnect and httpConnect* APIs now try connecting to multiple addresses in parallel () - The cupsd domain socket is no longer world-accessible on macOS () - Interface scripts are no longer supported for security reasons () - Added a new cupsHashData API and support for hashed job passwords () - Localization fixes (, , Issue #4041, Issue #4796) - Documentation changes (Issue #4624, Issue #4781) - Packaging fixes (PR #4832) cups-2.2.7/conf/000775 000765 000024 00000000000 13255074424 014100 5ustar00msweetstaff000000 000000 cups-2.2.7/config-scripts/000775 000765 000024 00000000000 13255074424 016105 5ustar00msweetstaff000000 000000 cups-2.2.7/config.guess000775 000765 000024 00000131355 13255074424 015503 0ustar00msweetstaff000000 000000 #! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-11-29' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: cups-2.2.7/config.h.in000664 000765 000024 00000024142 13255074424 015201 0ustar00msweetstaff000000 000000 /* * Configuration file for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #ifndef _CUPS_CONFIG_H_ #define _CUPS_CONFIG_H_ /* * Version of software... */ #define CUPS_SVERSION "" #define CUPS_MINIMAL "" /* * Default user and groups... */ #define CUPS_DEFAULT_USER "lp" #define CUPS_DEFAULT_GROUP "sys" #define CUPS_DEFAULT_SYSTEM_GROUPS "sys root system" #define CUPS_DEFAULT_PRINTOPERATOR_AUTH "@SYSTEM" #define CUPS_DEFAULT_SYSTEM_AUTHKEY "system.print.admin" /* * Default file permissions... */ #define CUPS_DEFAULT_CONFIG_FILE_PERM 0640 #define CUPS_DEFAULT_LOG_FILE_PERM 0644 /* * Default logging settings... */ #define CUPS_DEFAULT_LOG_LEVEL "warn" #define CUPS_DEFAULT_ACCESS_LOG_LEVEL "actions" /* * Default fatal error settings... */ #define CUPS_DEFAULT_FATAL_ERRORS "config" /* * Default browsing settings... */ #define CUPS_DEFAULT_BROWSING 1 #define CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS "" #define CUPS_DEFAULT_DEFAULT_SHARED 1 /* * Default IPP port... */ #define CUPS_DEFAULT_IPP_PORT 631 /* * Default printcap file... */ #define CUPS_DEFAULT_PRINTCAP "/etc/printcap" /* * Default Samba and LPD config files... */ #define CUPS_DEFAULT_SMB_CONFIG_FILE "" #define CUPS_DEFAULT_LPD_CONFIG_FILE "" /* * Default MaxCopies value... */ #define CUPS_DEFAULT_MAX_COPIES 9999 /* * Do we have domain socket support, and if so what is the default one? */ #undef CUPS_DEFAULT_DOMAINSOCKET /* * Default WebInterface value... */ #undef CUPS_DEFAULT_WEBIF /* * Where are files stored? * * Note: These are defaults, which can be overridden by environment * variables at run-time... */ #define CUPS_BINDIR "/usr/bin" #define CUPS_CACHEDIR "/var/cache/cups" #define CUPS_DATADIR "/usr/share/cups" #define CUPS_DOCROOT "/usr/share/doc/cups" #define CUPS_FONTPATH "/usr/share/cups/fonts" #define CUPS_LOCALEDIR "/usr/share/locale" #define CUPS_LOGDIR "/var/logs/cups" #define CUPS_REQUESTS "/var/spool/cups" #define CUPS_SBINDIR "/usr/sbin" #define CUPS_SERVERBIN "/usr/lib/cups" #define CUPS_SERVERROOT "/etc/cups" #define CUPS_STATEDIR "/var/run/cups" /* * Do we have posix_spawn? */ #undef HAVE_POSIX_SPAWN /* * Do we have ZLIB? */ #undef HAVE_LIBZ #undef HAVE_INFLATECOPY /* * Do we have PAM stuff? */ #define HAVE_LIBPAM 0 #undef HAVE_PAM_PAM_APPL_H #undef HAVE_PAM_SET_ITEM #undef HAVE_PAM_SETCRED /* * Do we have ? */ #undef HAVE_SHADOW_H /* * Do we have ? */ #undef HAVE_CRYPT_H /* * Use ? */ #undef HAVE_STDINT_H /* * Use , , and/or ? */ #undef HAVE_STRING_H #undef HAVE_STRINGS_H #undef HAVE_BSTRING_H /* * Do we have the long long type? */ #undef HAVE_LONG_LONG #ifdef HAVE_LONG_LONG # define CUPS_LLFMT "%lld" # define CUPS_LLCAST (long long) #else # define CUPS_LLFMT "%ld" # define CUPS_LLCAST (long) #endif /* HAVE_LONG_LONG */ /* * Do we have the strtoll() function? */ #undef HAVE_STRTOLL #ifndef HAVE_STRTOLL # define strtoll(nptr,endptr,base) strtol((nptr), (endptr), (base)) #endif /* !HAVE_STRTOLL */ /* * Do we have the strXXX() functions? */ #undef HAVE_STRDUP #undef HAVE_STRLCAT #undef HAVE_STRLCPY /* * Do we have the geteuid() function? */ #undef HAVE_GETEUID /* * Do we have the setpgid() function? */ #undef HAVE_SETPGID /* * Do we have the vsyslog() function? */ #undef HAVE_VSYSLOG /* * Do we have the systemd journal functions? */ #undef HAVE_SYSTEMD_SD_JOURNAL_H /* * Do we have the (v)snprintf() functions? */ #undef HAVE_SNPRINTF #undef HAVE_VSNPRINTF /* * What signal functions to use? */ #undef HAVE_SIGSET #undef HAVE_SIGACTION /* * What wait functions to use? */ #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 POSIX ACL functions? */ #undef HAVE_ACL_INIT /* * Do we have the langinfo.h header file? */ #undef HAVE_LANGINFO_H /* * Which encryption libraries do we have? */ #undef HAVE_CDSASSL #undef HAVE_GNUTLS #undef HAVE_SSPISSL #undef HAVE_SSL /* * Do we have the gnutls_transport_set_pull_timeout_function function? */ #undef HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION /* * Do we have the gnutls_priority_set_direct function? */ #undef HAVE_GNUTLS_PRIORITY_SET_DIRECT /* * What Security framework headers do we have? */ #undef HAVE_AUTHORIZATION_H #undef HAVE_SECBASEPRIV_H #undef HAVE_SECCERTIFICATE_H #undef HAVE_SECIDENTITYSEARCHPRIV_H #undef HAVE_SECITEM_H #undef HAVE_SECITEMPRIV_H #undef HAVE_SECPOLICY_H #undef HAVE_SECPOLICYPRIV_H #undef HAVE_SECURETRANSPORTPRIV_H /* * Do we have the cssmErrorString function? */ #undef HAVE_CSSMERRORSTRING /* * Do we have the SecGenerateSelfSignedCertificate function? */ #undef HAVE_SECGENERATESELFSIGNEDCERTIFICATE /* * Do we have the SecKeychainOpen function? */ #undef HAVE_SECKEYCHAINOPEN /* * Do we have (a working) SSLSetEnabledCiphers function? */ #undef HAVE_SSLSETENABLEDCIPHERS /* * Do we have libpaper? */ #undef HAVE_LIBPAPER /* * Do we have mDNSResponder for DNS Service Discovery (aka Bonjour)? */ #undef HAVE_DNSSD /* * Do we have Avahi for DNS Service Discovery (aka Bonjour)? */ #undef HAVE_AVAHI /* * Do we have ? */ #undef HAVE_SYS_IOCTL_H /* * Does the "stat" structure contain the "st_gen" member? */ #undef HAVE_ST_GEN /* * Does the "tm" structure contain the "tm_gmtoff" member? */ #undef HAVE_TM_GMTOFF /* * Do we have rresvport_af()? */ #undef HAVE_RRESVPORT_AF /* * Do we have getaddrinfo()? */ #undef HAVE_GETADDRINFO /* * Do we have getnameinfo()? */ #undef HAVE_GETNAMEINFO /* * Do we have getifaddrs()? */ #undef HAVE_GETIFADDRS /* * Do we have hstrerror()? */ #undef HAVE_HSTRERROR /* * Do we have res_init()? */ #undef HAVE_RES_INIT /* * Do we have */ #undef HAVE_RESOLV_H /* * Do we have the header file? */ #undef HAVE_SYS_SOCKIO_H /* * Does the sockaddr structure contain an sa_len parameter? */ #undef HAVE_STRUCT_SOCKADDR_SA_LEN /* * Do we have pthread support? */ #undef HAVE_PTHREAD_H /* * Do we have on-demand support (launchd/systemd/upstart)? */ #undef HAVE_ONDEMAND /* * Do we have launchd support? */ #undef HAVE_LAUNCH_H #undef HAVE_LAUNCHD /* * Do we have systemd support? */ #undef HAVE_SYSTEMD /* * Do we have upstart support? */ #undef HAVE_UPSTART /* * Various scripting languages... */ #undef HAVE_JAVA #define CUPS_JAVA "/usr/bin/java" #undef HAVE_PERL #define CUPS_PERL "/usr/bin/perl" #undef HAVE_PHP #define CUPS_PHP "/usr/bin/php" #undef HAVE_PYTHON #define CUPS_PYTHON "/usr/bin/python" /* * Do we have CoreFoundation public and private headers? */ #undef HAVE_COREFOUNDATION_H #undef HAVE_CFPRIV_H #undef HAVE_CFBUNDLEPRIV_H /* * Do we have ApplicationServices public headers? */ #undef HAVE_APPLICATIONSERVICES_H /* * Do we have the SCDynamicStoreCopyComputerName function? */ #undef HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME /* * Do we have the getgrouplist() function? */ #undef HAVE_GETGROUPLIST /* * Do we have macOS 10.4's mbr_XXX functions? */ #undef HAVE_MEMBERSHIP_H #undef HAVE_MEMBERSHIPPRIV_H #undef HAVE_MBR_UID_TO_UUID /* * Do we have Darwin's notify_post header and function? */ #undef HAVE_NOTIFY_H #undef HAVE_NOTIFY_POST /* * Do we have DBUS? */ #undef HAVE_DBUS #undef HAVE_DBUS_MESSAGE_ITER_INIT_APPEND #undef HAVE_DBUS_THREADS_INIT /* * Do we have the GSSAPI support library (for Kerberos support)? */ #undef HAVE_GSS_ACQUIRE_CRED_EX_F #undef HAVE_GSS_C_NT_HOSTBASED_SERVICE #undef HAVE_GSS_GSSAPI_H #undef HAVE_GSS_GSSAPI_SPI_H #undef HAVE_GSSAPI #undef HAVE_GSSAPI_GSSAPI_H #undef HAVE_GSSAPI_H /* * Default GSS service name... */ #define CUPS_DEFAULT_GSSSERVICENAME "" /* * Select/poll interfaces... */ #undef HAVE_POLL #undef HAVE_EPOLL #undef HAVE_KQUEUE /* * Do we have the header? */ #undef HAVE_DLFCN_H /* * Do we have ? */ #undef HAVE_SYS_PARAM_H /* * Do we have ? */ #undef HAVE_SYS_UCRED_H /* * Do we have removefile()? */ #undef HAVE_REMOVEFILE /* * Do we have ? */ #undef HAVE_SANDBOX_H /* * Which random number generator function to use... */ #undef HAVE_ARC4RANDOM #undef HAVE_RANDOM #undef HAVE_LRAND48 #ifdef HAVE_ARC4RANDOM # define CUPS_RAND() arc4random() # define CUPS_SRAND(v) #elif defined(HAVE_RANDOM) # define CUPS_RAND() random() # define CUPS_SRAND(v) srandom(v) #elif defined(HAVE_LRAND48) # define CUPS_RAND() lrand48() # define CUPS_SRAND(v) srand48(v) #else # define CUPS_RAND() rand() # define CUPS_SRAND(v) srand(v) #endif /* HAVE_ARC4RANDOM */ /* * Do we have libusb? */ #undef HAVE_LIBUSB /* * Do we have libwrap and tcpd.h? */ #undef HAVE_TCPD_H /* * Do we have ? */ #undef HAVE_ICONV_H /* * Do we have statfs or statvfs and one of the corresponding headers? */ #undef HAVE_STATFS #undef HAVE_STATVFS #undef HAVE_SYS_MOUNT_H #undef HAVE_SYS_STATFS_H #undef HAVE_SYS_STATVFS_H #undef HAVE_SYS_VFS_H /* * Location of macOS localization bundle, if any. */ #undef CUPS_BUNDLEDIR /* * Do we have XPC? */ #undef HAVE_XPC #undef HAVE_XPC_PRIVATE_H /* * Do we have Mini-XML? */ #undef HAVE_MXML_H /* * Do we have the C99 abs() function? */ #undef HAVE_ABS #if !defined(HAVE_ABS) && !defined(abs) # if defined(__GNUC__) || __STDC_VERSION__ >= 199901L # define abs(x) _cups_abs(x) static inline int _cups_abs(int i) { return (i < 0 ? -i : i); } # elif defined(_MSC_VER) # define abs(x) _cups_abs(x) static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); } # else # define abs(x) ((x) < 0 ? -(x) : (x)) # endif /* __GNUC__ || __STDC_VERSION__ */ #endif /* !HAVE_ABS && !abs */ #endif /* !_CUPS_CONFIG_H_ */ cups-2.2.7/config.sub000775 000765 000024 00000105412 13255074424 015141 0ustar00msweetstaff000000 000000 #! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-10-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: cups-2.2.7/configure000775 000765 000024 00001142421 13255074424 015067 0ustar00msweetstaff000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for CUPS 2.2.7. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: https://github.com/apple/cups/issues about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='CUPS' PACKAGE_TARNAME='cups' PACKAGE_VERSION='2.2.7' PACKAGE_STRING='CUPS 2.2.7' PACKAGE_BUGREPORT='https://github.com/apple/cups/issues' PACKAGE_URL='https://www.cups.org/' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_default_prefix=/ ac_subst_vars='LTLIBOBJS LIBOBJS UNINSTALL_LANGUAGES INSTALL_LANGUAGES PYTHON PHP PHPCGI PERL JAVA CUPS_WEBIF DEFAULT_IPP_PORT CUPS_SNMP_COMMUNITY CUPS_SNMP_ADDRESS DEFAULT_RAW_PRINTING CUPS_MAX_COPIES CUPS_DEFAULT_SMB_CONFIG_FILE CUPS_DEFAULT_LPD_CONFIG_FILE CUPS_DEFAULT_PRINTCAP CUPS_PRIMARY_SYSTEM_GROUP CUPS_SYSTEM_GROUPS CUPS_GROUP CUPS_USER CUPS_DEFAULT_SHARED CUPS_BROWSE_LOCAL_PROTOCOLS CUPS_BROWSING CUPS_PAGE_LOG_FORMAT CUPS_ACCESS_LOG_LEVEL CUPS_LOG_LEVEL CUPS_FATAL_ERRORS CUPS_LOG_FILE_PERM CUPS_CUPSD_FILE_PERM CUPS_CONFIG_FILE_PERM CUPS_EXE_FILE_PERM CUPS_BUNDLEDIR LANGUAGES XINETD RCSTOP RCSTART RCLEVELS INITDDIR INITDIR SMFMANIFESTDIR SYSTEMD_DIR LAUNCHD_DIR ONDEMANDLIBS ONDEMANDFLAGS IPPFIND_MAN IPPFIND_BIN DNSSD_BACKEND DNSSDLIBS LARGEFILE PAMMODAUTH PAMMOD PAMLIBS PAMFILE PAMDIR EXPORT_SSLLIBS SSLLIBS SSLFLAGS IPPALIASES CUPS_SERVERKEYCHAIN LIBGNUTLSCONFIG PTHREAD_FLAGS CUPS_DEFAULT_GSSSERVICENAME KRB5CONFIG LIBGSSAPI CUPS_LISTEN_DOMAINSOCKET CUPS_DEFAULT_DOMAINSOCKET RELROFLAGS PIEFLAGS CXXLIBS LDARCHFLAGS ARCHFLAGS UNITTESTS OPTIM INSTALL_STRIP LIBTOOL_INSTALL LIBTOOL_CXX LIBTOOL_CC LIBTOOL LD_CXX LD_CC EXPORT_LDFLAGS IMGLIBS DSOLIBS LINKCUPSIMAGE LINKCUPS EXTLINKCUPSIMAGE EXTLINKCUPS LIBCUPSSTATIC LIBCUPSPPDC LIBCUPSMIME LIBCUPSIMAGE LIBCUPSCGI LIBCUPSBASE LIBCUPS DSOFLAGS DSOXX DSO MAN8DIR MAN8EXT MAN7EXT MAN5EXT MAN1EXT PMANDIR AMANDIR CUPS_STATEDIR CUPS_SERVERROOT INSTALL_SYSV CUPS_SERVERBIN CUPS_REQUESTS CUPS_LOGDIR CUPS_LOCALEDIR CUPS_FONTPATH CUPS_DOCROOT MENUDIR ICONDIR CUPS_DATADIR CUPS_CACHEDIR PRIVATEINCLUDE privateinclude BUILDDIRS INSTALLXPC CUPS_SYSTEM_AUTHKEY CUPS_DEFAULT_PRINTOPERATOR_AUTH DBUS_NOTIFIERLIBS DBUS_NOTIFIER DBUSDIR SERVERLIBS BACKLIBS ARFLAGS LIBZ INSTALL_GZIP LIBWRAP USBQUIRKS LIBUSB LIBMXML EGREP GREP LIBPAPER LIBMALLOC PKGCONFIG INSTALLSTATIC INSTALL CUPS_HTMLVIEW XDGOPEN SED RMDIR RM MV MKDIR LN LD GZIP CHMOD AR RANLIB ac_ct_CXX CXXFLAGS CXX CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AWK CUPS_BUILD CUPS_REVISION CUPS_VERSION LOCALTARGET host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_cups_build enable_static enable_mallinfo enable_libpaper enable_libusb enable_tcp_wrappers enable_acl enable_dbus with_dbusdir with_adminkey with_operkey with_components with_privateinclude with_lpdconfig with_smbconfig with_cachedir with_icondir with_menudir with_docdir with_fontpath with_logdir with_rundir enable_shared enable_libtool_unsupported with_optim enable_debug enable_debug_guards enable_debug_printfs enable_unit_tests with_archflags with_ldarchflags enable_relro with_domainsocket enable_gssapi with_gssservicename enable_threads enable_ssl enable_cdsassl enable_gnutls enable_pam with_pam_module enable_largefile enable_avahi enable_dnssd with_dnssd_libs with_dnssd_includes enable_launchd enable_systemd with_systemd enable_upstart with_smfmanifestdir with_rcdir with_rclevels with_rcstart with_rcstop with_xinetd with_languages with_bundledir with_exe_file_perm with_config_file_perm with_cupsd_file_perm with_log_file_perm with_fatal_errors with_log_level with_access_log_level enable_page_logging enable_browsing with_local_protocols enable_default_shared with_cups_user with_cups_group with_system_groups with_printcap with_lpdconfigfile with_smbconfigfile with_max_copies enable_raw_printing with_snmp_address with_snmp_community with_ipp_port enable_webif with_java with_perl with_php with_python ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures CUPS 2.2.7 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/cups] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of CUPS 2.2.7:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-static install static libraries --enable-mallinfo build with malloc debug logging --enable-libpaper build with libpaper support --enable-libusb use libusb for USB printing --enable-tcp-wrappers use libwrap for TCP wrappers support --enable-acl build with POSIX ACL support --disable-dbus build without DBUS support --disable-shared do not create shared libraries --enable-libtool-unsupported=/path/to/libtool build with libtool (UNSUPPORTED!) --enable-debug build with debugging symbols --enable-debug-guards build with memory allocation guards --enable-debug-printfs build with CUPS_DEBUG_LOG support --enable-unit-tests build and run unit tests --enable-relro build with the GCC relro option --disable-gssapi disable GSSAPI support --disable-threads disable multi-threading support --disable-ssl disable SSL/TLS support --enable-cdsassl use CDSA for SSL/TLS support, default=first --enable-gnutls use GNU TLS for SSL/TLS support, default=second --disable-pam disable PAM support --disable-largefile omit support for large files --disable-avahi disable DNS Service Discovery support using Avahi --disable-dnssd disable DNS Service Discovery support using mDNSResponder --disable-launchd disable launchd support --disable-systemd disable systemd support --enable-upstart enable upstart support --enable-page-logging enable page_log by default --disable-browsing disable Browsing by default --disable-default-shared disable DefaultShared by default --disable-raw-printing do not allow raw printing by default --enable-webif enable the web interface by default, default=no for macOS Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-cups-build set "cups-config --build" string --with-dbusdir set DBUS configuration directory --with-adminkey set the default SystemAuthKey value --with-operkey set the default operator @AUTHKEY value --with-components set components to build: - "all" (default) builds everything - "core" builds libcups and ipptool --with-privateinclude set path for private include files, default=none --with-lpdconfig set URI for LPD config file --with-smbconfig set URI for Samba config file --with-cachedir set path for cache files --with-icondir set path for application icons --with-menudir set path for application menus --with-docdir set path for documentation --with-fontpath set font path for pstoraster --with-logdir set path for log files --with-rundir set transient run-time state directory --with-optim set optimization flags --with-archflags set default architecture flags --with-ldarchflags set program architecture flags --with-domainsocket set unix domain socket name --with-gssservicename set default gss service name --with-pam-module set the PAM module to use --with-dnssd-libs set directory for DNS Service Discovery library --with-dnssd-includes set directory for DNS Service Discovery includes --with-systemd set directory for systemd service files --with-smfmanifestdir set path for Solaris SMF manifest --with-rcdir set path for rc scripts --with-rclevels set run levels for rc scripts --with-rcstart set start number for rc scripts --with-rcstop set stop number for rc scripts --with-xinetd set path for xinetd config files --with-languages set installed languages, default=all --with-bundledir set macOS localization bundle directory --with-exe-file-perm set default executable permissions value, default=0555 --with-config-file-perm set default ConfigFilePerm value, default=0640 --with-cupsd-file-perm set default cupsd permissions, default=0500 --with-log-file-perm set default LogFilePerm value, default=0644 --with-fatal-errors set default FatalErrors value, default=config --with-log-level set default LogLevel value, default=warn --with-access-log-level set default AccessLogLevel value, default=none --with-local-protocols set default BrowseLocalProtocols, default="" --with-cups-user set default user for CUPS --with-cups-group set default group for CUPS --with-system-groups set default system groups for CUPS --with-printcap set default printcap file --with-lpdconfigfile set default LPDConfigFile URI --with-smbconfigfile set default SMBConfigFile URI --with-max-copies set default max copies value, default=9999 --with-snmp-address set SNMP query address, default=auto --with-snmp-community set SNMP community, default=public --with-ipp-port set port number for IPP, default=631 --with-java set Java interpreter for web interfaces --with-perl set Perl interpreter for web interfaces --with-php set PHP interpreter for web interfaces --with-python set Python interpreter for web interfaces Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . CUPS home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF CUPS configure 2.2.7 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## --------------------------------------------------- ## ## Report this to https://github.com/apple/cups/issues ## ## --------------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 $as_echo_n "checking for $2.$3... " >&6; } if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by CUPS $as_me 2.2.7, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac host_os_name=`echo $host_os | sed -e '1,$s/[0-9.]*$//g'` host_os_version=`echo $host_os | sed -e '1,$s/^[^0-9.]*//g' | awk -F. '{print $1 $2}'` # Linux often does not yield an OS version we can use... if test "x$host_os_version" = x; then host_os_version="0" fi if test "$host_os_name" = darwin -a $host_os_version -lt 120; then as_fn_error $? "Sorry, this version of CUPS requires macOS 10.8 or higher." "$LINENO" 5 fi if test "$build" = "$host"; then # No, build local targets LOCALTARGET="local" else # Yes, don't build local targets LOCALTARGET="" fi ac_config_headers="$ac_config_headers config.h" CUPS_VERSION="2.2.7" CUPS_REVISION="" CUPS_BUILD="cups-$CUPS_VERSION" # Check whether --with-cups_build was given. if test "${with_cups_build+set}" = set; then : withval=$with_cups_build; CUPS_BUILD="$withval" fi cat >>confdefs.h <<_ACEOF #define CUPS_SVERSION "CUPS v$CUPS_VERSION$CUPS_REVISION" _ACEOF cat >>confdefs.h <<_ACEOF #define CUPS_MINIMAL "CUPS/$CUPS_VERSION$CUPS_REVISION" _ACEOF CFLAGS="${CFLAGS:=}" CPPFLAGS="${CPPFLAGS:=}" CXXFLAGS="${CXXFLAGS:=}" LDFLAGS="${LDFLAGS:=}" for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in clang cc gcc do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in clang cc gcc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in clang++ c++ g++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in clang++ c++ g++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_AR+:} false; then : $as_echo_n "(cached) " >&6 else case $AR in [\\/]* | ?:[\\/]*) ac_cv_path_AR="$AR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi AR=$ac_cv_path_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "chmod", so it can be a program name with args. set dummy chmod; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_CHMOD+:} false; then : $as_echo_n "(cached) " >&6 else case $CHMOD in [\\/]* | ?:[\\/]*) ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi CHMOD=$ac_cv_path_CHMOD if test -n "$CHMOD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5 $as_echo "$CHMOD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gzip", so it can be a program name with args. set dummy gzip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GZIP+:} false; then : $as_echo_n "(cached) " >&6 else case $GZIP in [\\/]* | ?:[\\/]*) ac_cv_path_GZIP="$GZIP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GZIP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GZIP=$ac_cv_path_GZIP if test -n "$GZIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GZIP" >&5 $as_echo "$GZIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "ld", so it can be a program name with args. set dummy ld; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else case $LD in [\\/]* | ?:[\\/]*) ac_cv_path_LD="$LD" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_LD="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LD=$ac_cv_path_LD if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "ln", so it can be a program name with args. set dummy ln; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_LN+:} false; then : $as_echo_n "(cached) " >&6 else case $LN in [\\/]* | ?:[\\/]*) ac_cv_path_LN="$LN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LN=$ac_cv_path_LN if test -n "$LN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5 $as_echo "$LN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "mkdir", so it can be a program name with args. set dummy mkdir; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MKDIR+:} false; then : $as_echo_n "(cached) " >&6 else case $MKDIR in [\\/]* | ?:[\\/]*) ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MKDIR=$ac_cv_path_MKDIR if test -n "$MKDIR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5 $as_echo "$MKDIR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "mv", so it can be a program name with args. set dummy mv; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MV+:} false; then : $as_echo_n "(cached) " >&6 else case $MV in [\\/]* | ?:[\\/]*) ac_cv_path_MV="$MV" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MV=$ac_cv_path_MV if test -n "$MV"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5 $as_echo "$MV" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "rm", so it can be a program name with args. set dummy rm; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_RM+:} false; then : $as_echo_n "(cached) " >&6 else case $RM in [\\/]* | ?:[\\/]*) ac_cv_path_RM="$RM" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi RM=$ac_cv_path_RM if test -n "$RM"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 $as_echo "$RM" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "rmdir", so it can be a program name with args. set dummy rmdir; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_RMDIR+:} false; then : $as_echo_n "(cached) " >&6 else case $RMDIR in [\\/]* | ?:[\\/]*) ac_cv_path_RMDIR="$RMDIR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_RMDIR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi RMDIR=$ac_cv_path_RMDIR if test -n "$RMDIR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RMDIR" >&5 $as_echo "$RMDIR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "sed", so it can be a program name with args. set dummy sed; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else case $SED in [\\/]* | ?:[\\/]*) ac_cv_path_SED="$SED" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SED=$ac_cv_path_SED if test -n "$SED"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5 $as_echo "$SED" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xdg-open", so it can be a program name with args. set dummy xdg-open; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XDGOPEN+:} false; then : $as_echo_n "(cached) " >&6 else case $XDGOPEN in [\\/]* | ?:[\\/]*) ac_cv_path_XDGOPEN="$XDGOPEN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XDGOPEN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XDGOPEN=$ac_cv_path_XDGOPEN if test -n "$XDGOPEN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XDGOPEN" >&5 $as_echo "$XDGOPEN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XDGOPEN" = x; then CUPS_HTMLVIEW="htmlview" else CUPS_HTMLVIEW="$XDGOPEN" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for install-sh script" >&5 $as_echo_n "checking for install-sh script... " >&6; } INSTALL="`pwd`/install-sh" { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $INSTALL" >&5 $as_echo "using $INSTALL" >&6; } if test "x$AR" = x; then as_fn_error $? "Unable to find required library archive command." "$LINENO" 5 fi if test "x$CC" = x; then as_fn_error $? "Unable to find required C compiler command." "$LINENO" 5 fi INSTALLSTATIC="" # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; fi if test x$enable_static = xyes; then echo Installing static libraries... INSTALLSTATIC="installstatic" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKGCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKGCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKGCONFIG=$ac_cv_path_PKGCONFIG if test -n "$PKGCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5 $as_echo "$PKGCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKGCONFIG"; then ac_pt_PKGCONFIG=$PKGCONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKGCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKGCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKGCONFIG="$ac_pt_PKGCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKGCONFIG=$ac_cv_path_ac_pt_PKGCONFIG if test -n "$ac_pt_PKGCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKGCONFIG" >&5 $as_echo "$ac_pt_PKGCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKGCONFIG" = x; then PKGCONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKGCONFIG=$ac_pt_PKGCONFIG fi else PKGCONFIG="$ac_cv_path_PKGCONFIG" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing abs" >&5 $as_echo_n "checking for library containing abs... " >&6; } if ${ac_cv_search_abs+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char abs (); int main () { return abs (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_abs=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_abs+:} false; then : break fi done if ${ac_cv_search_abs+:} false; then : else ac_cv_search_abs=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_abs" >&5 $as_echo "$ac_cv_search_abs" >&6; } ac_res=$ac_cv_search_abs if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_ABS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5 $as_echo_n "checking for library containing crypt... " >&6; } if ${ac_cv_search_crypt+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char crypt (); int main () { return crypt (); ; return 0; } _ACEOF for ac_lib in '' crypt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_crypt=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_crypt+:} false; then : break fi done if ${ac_cv_search_crypt+:} false; then : else ac_cv_search_crypt=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt" >&5 $as_echo "$ac_cv_search_crypt" >&6; } ac_res=$ac_cv_search_crypt if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing fmod" >&5 $as_echo_n "checking for library containing fmod... " >&6; } if ${ac_cv_search_fmod+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fmod (); int main () { return fmod (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_fmod=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_fmod+:} false; then : break fi done if ${ac_cv_search_fmod+:} false; then : else ac_cv_search_fmod=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_fmod" >&5 $as_echo "$ac_cv_search_fmod" >&6; } ac_res=$ac_cv_search_fmod if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getspent" >&5 $as_echo_n "checking for library containing getspent... " >&6; } if ${ac_cv_search_getspent+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getspent (); int main () { return getspent (); ; return 0; } _ACEOF for ac_lib in '' sec gen; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_getspent=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_getspent+:} false; then : break fi done if ${ac_cv_search_getspent+:} false; then : else ac_cv_search_getspent=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getspent" >&5 $as_echo "$ac_cv_search_getspent" >&6; } ac_res=$ac_cv_search_getspent if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi LIBMALLOC="" # Check whether --enable-mallinfo was given. if test "${enable_mallinfo+set}" = set; then : enableval=$enable_mallinfo; fi if test x$enable_mallinfo = xyes; then SAVELIBS="$LIBS" LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing mallinfo" >&5 $as_echo_n "checking for library containing mallinfo... " >&6; } if ${ac_cv_search_mallinfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char mallinfo (); int main () { return mallinfo (); ; return 0; } _ACEOF for ac_lib in '' malloc; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_mallinfo=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_mallinfo+:} false; then : break fi done if ${ac_cv_search_mallinfo+:} false; then : else ac_cv_search_mallinfo=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_mallinfo" >&5 $as_echo "$ac_cv_search_mallinfo" >&6; } ac_res=$ac_cv_search_mallinfo if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_MALLINFO 1" >>confdefs.h fi LIBMALLOC="$LIBS" LIBS="$SAVELIBS" fi # Check whether --enable-libpaper was given. if test "${enable_libpaper+set}" = set; then : enableval=$enable_libpaper; fi if test x$enable_libpaper = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systempapername in -lpaper" >&5 $as_echo_n "checking for systempapername in -lpaper... " >&6; } if ${ac_cv_lib_paper_systempapername+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpaper $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char systempapername (); int main () { return systempapername (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_paper_systempapername=yes else ac_cv_lib_paper_systempapername=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_paper_systempapername" >&5 $as_echo "$ac_cv_lib_paper_systempapername" >&6; } if test "x$ac_cv_lib_paper_systempapername" = xyes; then : $as_echo "#define HAVE_LIBPAPER 1" >>confdefs.h LIBPAPER="-lpaper" else LIBPAPER="" fi else LIBPAPER="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : $as_echo "#define HAVE_STDLIB_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "crypt.h" "ac_cv_header_crypt_h" "$ac_includes_default" if test "x$ac_cv_header_crypt_h" = xyes; then : $as_echo "#define HAVE_CRYPT_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default" if test "x$ac_cv_header_langinfo_h" = xyes; then : $as_echo "#define HAVE_LANGINFO_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default" if test "x$ac_cv_header_malloc_h" = xyes; then : $as_echo "#define HAVE_MALLOC_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "shadow.h" "ac_cv_header_shadow_h" "$ac_includes_default" if test "x$ac_cv_header_shadow_h" = xyes; then : $as_echo "#define HAVE_SHADOW_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes; then : $as_echo "#define HAVE_STDINT_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes; then : $as_echo "#define HAVE_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default" if test "x$ac_cv_header_strings_h" = xyes; then : $as_echo "#define HAVE_STRINGS_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "bstring.h" "ac_cv_header_bstring_h" "$ac_includes_default" if test "x$ac_cv_header_bstring_h" = xyes; then : $as_echo "#define HAVE_BSTRING_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : $as_echo "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" if test "x$ac_cv_header_sys_param_h" = xyes; then : $as_echo "#define HAVE_SYS_PARAM_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "sys/ucred.h" "ac_cv_header_sys_ucred_h" "$ac_includes_default" if test "x$ac_cv_header_sys_ucred_h" = xyes; then : $as_echo "#define HAVE_SYS_UCRED_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" if test "x$ac_cv_header_iconv_h" = xyes; then : SAVELIBS="$LIBS" LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing iconv_open" >&5 $as_echo_n "checking for library containing iconv_open... " >&6; } if ${ac_cv_search_iconv_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char iconv_open (); int main () { return iconv_open (); ; return 0; } _ACEOF for ac_lib in '' iconv; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_iconv_open=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_iconv_open+:} false; then : break fi done if ${ac_cv_search_iconv_open+:} false; then : else ac_cv_search_iconv_open=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_iconv_open" >&5 $as_echo "$ac_cv_search_iconv_open" >&6; } ac_res=$ac_cv_search_iconv_open if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_ICONV_H 1" >>confdefs.h SAVELIBS="$SAVELIBS $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing libiconv_open" >&5 $as_echo_n "checking for library containing libiconv_open... " >&6; } if ${ac_cv_search_libiconv_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char libiconv_open (); int main () { return libiconv_open (); ; return 0; } _ACEOF for ac_lib in '' iconv; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_libiconv_open=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_libiconv_open+:} false; then : break fi done if ${ac_cv_search_libiconv_open+:} false; then : else ac_cv_search_libiconv_open=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_libiconv_open" >&5 $as_echo "$ac_cv_search_libiconv_open" >&6; } ac_res=$ac_cv_search_libiconv_open if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_ICONV_H 1" >>confdefs.h SAVELIBS="$SAVELIBS $LIBS" fi LIBS="$SAVELIBS" fi LIBMXML="" ac_fn_c_check_header_mongrel "$LINENO" "mxml.h" "ac_cv_header_mxml_h" "$ac_includes_default" if test "x$ac_cv_header_mxml_h" = xyes; then : SAVELIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing mmxlNewElement" >&5 $as_echo_n "checking for library containing mmxlNewElement... " >&6; } if ${ac_cv_search_mmxlNewElement+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char mmxlNewElement (); int main () { return mmxlNewElement (); ; return 0; } _ACEOF for ac_lib in '' mxml; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_mmxlNewElement=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_mmxlNewElement+:} false; then : break fi done if ${ac_cv_search_mmxlNewElement+:} false; then : else ac_cv_search_mmxlNewElement=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_mmxlNewElement" >&5 $as_echo "$ac_cv_search_mmxlNewElement" >&6; } ac_res=$ac_cv_search_mmxlNewElement if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_MXML_H 1" >>confdefs.h LIBMXML="-lmxml" fi LIBS="$SAVELIBS" fi ac_fn_c_check_header_mongrel "$LINENO" "sys/mount.h" "ac_cv_header_sys_mount_h" "$ac_includes_default" if test "x$ac_cv_header_sys_mount_h" = xyes; then : $as_echo "#define HAVE_SYS_MOUNT_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "sys/statfs.h" "ac_cv_header_sys_statfs_h" "$ac_includes_default" if test "x$ac_cv_header_sys_statfs_h" = xyes; then : $as_echo "#define HAVE_SYS_STATFS_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "sys/statvfs.h" "ac_cv_header_sys_statvfs_h" "$ac_includes_default" if test "x$ac_cv_header_sys_statvfs_h" = xyes; then : $as_echo "#define HAVE_SYS_STATVFS_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "sys/vfs.h" "ac_cv_header_sys_vfs_h" "$ac_includes_default" if test "x$ac_cv_header_sys_vfs_h" = xyes; then : $as_echo "#define HAVE_SYS_VFS_H 1" >>confdefs.h fi for ac_func in statfs statvfs do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in strdup strlcat strlcpy do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "$host_os_name" = "hp-ux" -a "$host_os_version" = "1020"; then echo Forcing snprintf emulation for HP-UX. else for ac_func in snprintf vsnprintf do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done fi for ac_func in random lrand48 arc4random do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in geteuid do : ac_fn_c_check_func "$LINENO" "geteuid" "ac_cv_func_geteuid" if test "x$ac_cv_func_geteuid" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETEUID 1 _ACEOF fi done for ac_func in setpgid do : ac_fn_c_check_func "$LINENO" "setpgid" "ac_cv_func_setpgid" if test "x$ac_cv_func_setpgid" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETPGID 1 _ACEOF fi done for ac_func in vsyslog do : ac_fn_c_check_func "$LINENO" "vsyslog" "ac_cv_func_vsyslog" if test "x$ac_cv_func_vsyslog" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VSYSLOG 1 _ACEOF fi done case "$host_os_name" in linux* | gnu*) # Do not use sigset on Linux or GNU HURD ;; *) # Use sigset on other platforms, if available for ac_func in sigset do : ac_fn_c_check_func "$LINENO" "sigset" "ac_cv_func_sigset" if test "x$ac_cv_func_sigset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SIGSET 1 _ACEOF fi done ;; esac for ac_func in sigaction do : ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction" if test "x$ac_cv_func_sigaction" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SIGACTION 1 _ACEOF fi done for ac_func in waitpid wait3 do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in posix_spawn do : ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn" if test "x$ac_cv_func_posix_spawn" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_POSIX_SPAWN 1 _ACEOF fi done for ac_func in getgrouplist do : ac_fn_c_check_func "$LINENO" "getgrouplist" "ac_cv_func_getgrouplist" if test "x$ac_cv_func_getgrouplist" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETGROUPLIST 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tm_gmtoff member in tm structure" >&5 $as_echo_n "checking for tm_gmtoff member in tm structure... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct tm t; int o = t.tm_gmtoff; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_TM_GMTOFF 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking for st_gen member in stat structure" >&5 $as_echo_n "checking for st_gen member in stat structure... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct stat t; int o = t.st_gen; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_ST_GEN 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext for ac_func in removefile do : ac_fn_c_check_func "$LINENO" "removefile" "ac_cv_func_removefile" if test "x$ac_cv_func_removefile" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_REMOVEFILE 1 _ACEOF fi done # Check whether --enable-libusb was given. if test "${enable_libusb+set}" = set; then : enableval=$enable_libusb; fi LIBUSB="" USBQUIRKS="" if test "x$PKGCONFIG" != x; then if test x$enable_libusb != xno -a $host_os_name != darwin; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libusb-1.0" >&5 $as_echo_n "checking for libusb-1.0... " >&6; } if $PKGCONFIG --exists libusb-1.0; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBUSB 1" >>confdefs.h CFLAGS="$CFLAGS `$PKGCONFIG --cflags libusb-1.0`" LIBUSB="`$PKGCONFIG --libs libusb-1.0`" USBQUIRKS="\$(DATADIR)/usb" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test x$enable_libusb = xyes; then as_fn_error $? "libusb required for --enable-libusb." "$LINENO" 5 fi fi fi elif test x$enable_libusb = xyes; then as_fn_error $? "Need pkg-config to enable libusb support." "$LINENO" 5 fi # Check whether --enable-tcp_wrappers was given. if test "${enable_tcp_wrappers+set}" = set; then : enableval=$enable_tcp_wrappers; fi LIBWRAP="" if test x$enable_tcp_wrappers = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hosts_access in -lwrap" >&5 $as_echo_n "checking for hosts_access in -lwrap... " >&6; } if ${ac_cv_lib_wrap_hosts_access+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lwrap $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char hosts_access (); int main () { return hosts_access (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_wrap_hosts_access=yes else ac_cv_lib_wrap_hosts_access=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_wrap_hosts_access" >&5 $as_echo "$ac_cv_lib_wrap_hosts_access" >&6; } if test "x$ac_cv_lib_wrap_hosts_access" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "tcpd.h" "ac_cv_header_tcpd_h" "$ac_includes_default" if test "x$ac_cv_header_tcpd_h" = xyes; then : $as_echo "#define HAVE_TCPD_H 1" >>confdefs.h LIBWRAP="-lwrap" fi fi fi INSTALL_GZIP="" LIBZ="" ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" if test "x$ac_cv_header_zlib_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzgets in -lz" >&5 $as_echo_n "checking for gzgets in -lz... " >&6; } if ${ac_cv_lib_z_gzgets+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gzgets (); int main () { return gzgets (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_gzgets=yes else ac_cv_lib_z_gzgets=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzgets" >&5 $as_echo "$ac_cv_lib_z_gzgets" >&6; } if test "x$ac_cv_lib_z_gzgets" = xyes; then : $as_echo "#define HAVE_LIBZ 1" >>confdefs.h LIBZ="-lz" LIBS="$LIBS -lz" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflateCopy in -lz" >&5 $as_echo_n "checking for inflateCopy in -lz... " >&6; } if ${ac_cv_lib_z_inflateCopy+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inflateCopy (); int main () { return inflateCopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_inflateCopy=yes else ac_cv_lib_z_inflateCopy=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflateCopy" >&5 $as_echo "$ac_cv_lib_z_inflateCopy" >&6; } if test "x$ac_cv_lib_z_inflateCopy" = xyes; then : $as_echo "#define HAVE_INFLATECOPY 1" >>confdefs.h fi if test "x$GZIP" != z; then INSTALL_GZIP="-z" fi fi fi case $host_os_name in darwin* | *bsd*) ARFLAGS="-rcv" ;; *) ARFLAGS="crvs" ;; esac BACKLIBS="" SERVERLIBS="" SAVELIBS="$LIBS" LIBS="" # Check whether --enable-acl was given. if test "${enable_acl+set}" = set; then : enableval=$enable_acl; fi if test "x$enable_acl" != xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing acl_init" >&5 $as_echo_n "checking for library containing acl_init... " >&6; } if ${ac_cv_search_acl_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char acl_init (); int main () { return acl_init (); ; return 0; } _ACEOF for ac_lib in '' acl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_acl_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_acl_init+:} false; then : break fi done if ${ac_cv_search_acl_init+:} false; then : else ac_cv_search_acl_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_acl_init" >&5 $as_echo "$ac_cv_search_acl_init" >&6; } ac_res=$ac_cv_search_acl_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_ACL_INIT 1" >>confdefs.h fi SERVERLIBS="$SERVERLIBS $LIBS" fi LIBS="$SAVELIBS" # Check whether --enable-dbus was given. if test "${enable_dbus+set}" = set; then : enableval=$enable_dbus; fi # Check whether --with-dbusdir was given. if test "${with_dbusdir+set}" = set; then : withval=$with_dbusdir; DBUSDIR="$withval" fi DBUSDIR="" DBUS_NOTIFIER="" DBUS_NOTIFIERLIBS="" if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x -a "x$host_os_name" != xdarwin; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DBUS" >&5 $as_echo_n "checking for DBUS... " >&6; } if $PKGCONFIG --exists dbus-1; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_DBUS 1" >>confdefs.h CFLAGS="$CFLAGS `$PKGCONFIG --cflags dbus-1` -DDBUS_API_SUBJECT_TO_CHANGE" SERVERLIBS="$SERVERLIBS `$PKGCONFIG --libs dbus-1`" DBUS_NOTIFIER="dbus" DBUS_NOTIFIERLIBS="`$PKGCONFIG --libs dbus-1`" SAVELIBS="$LIBS" LIBS="$LIBS $DBUS_NOTIFIERLIBS" ac_fn_c_check_func "$LINENO" "dbus_message_iter_init_append" "ac_cv_func_dbus_message_iter_init_append" if test "x$ac_cv_func_dbus_message_iter_init_append" = xyes; then : $as_echo "#define HAVE_DBUS_MESSAGE_ITER_INIT_APPEND 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "dbus_threads_init" "ac_cv_func_dbus_threads_init" if test "x$ac_cv_func_dbus_threads_init" = xyes; then : $as_echo "#define HAVE_DBUS_THREADS_INIT 1" >>confdefs.h fi LIBS="$SAVELIBS" if test -d /etc/dbus-1; then DBUSDIR="/etc/dbus-1" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi CUPS_DEFAULT_PRINTOPERATOR_AUTH="@SYSTEM" CUPS_DEFAULT_SYSTEM_AUTHKEY="" CUPS_SYSTEM_AUTHKEY="" INSTALLXPC="" case $host_os_name in darwin*) BACKLIBS="$BACKLIBS -framework IOKit" SERVERLIBS="$SERVERLIBS -framework IOKit -weak_framework ApplicationServices" LIBS="-framework SystemConfiguration -framework CoreFoundation -framework Security $LIBS" ac_fn_c_check_header_mongrel "$LINENO" "ApplicationServices/ApplicationServices.h" "ac_cv_header_ApplicationServices_ApplicationServices_h" "$ac_includes_default" if test "x$ac_cv_header_ApplicationServices_ApplicationServices_h" = xyes; then : $as_echo "#define HAVE_APPLICATIONSERVICES_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "CoreFoundation/CoreFoundation.h" "ac_cv_header_CoreFoundation_CoreFoundation_h" "$ac_includes_default" if test "x$ac_cv_header_CoreFoundation_CoreFoundation_h" = xyes; then : $as_echo "#define HAVE_COREFOUNDATION_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "CoreFoundation/CFPriv.h" "ac_cv_header_CoreFoundation_CFPriv_h" "$ac_includes_default" if test "x$ac_cv_header_CoreFoundation_CFPriv_h" = xyes; then : $as_echo "#define HAVE_CFPRIV_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "CoreFoundation/CFBundlePriv.h" "ac_cv_header_CoreFoundation_CFBundlePriv_h" "$ac_includes_default" if test "x$ac_cv_header_CoreFoundation_CFBundlePriv_h" = xyes; then : $as_echo "#define HAVE_CFBUNDLEPRIV_H 1" >>confdefs.h fi for ac_func in SCDynamicStoreCopyComputerName do : ac_fn_c_check_func "$LINENO" "SCDynamicStoreCopyComputerName" "ac_cv_func_SCDynamicStoreCopyComputerName" if test "x$ac_cv_func_SCDynamicStoreCopyComputerName" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "membership.h" "ac_cv_header_membership_h" "$ac_includes_default" if test "x$ac_cv_header_membership_h" = xyes; then : $as_echo "#define HAVE_MEMBERSHIP_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "membershipPriv.h" "ac_cv_header_membershipPriv_h" "$ac_includes_default" if test "x$ac_cv_header_membershipPriv_h" = xyes; then : $as_echo "#define HAVE_MEMBERSHIPPRIV_H 1" >>confdefs.h fi for ac_func in mbr_uid_to_uuid do : ac_fn_c_check_func "$LINENO" "mbr_uid_to_uuid" "ac_cv_func_mbr_uid_to_uuid" if test "x$ac_cv_func_mbr_uid_to_uuid" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MBR_UID_TO_UUID 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" if test "x$ac_cv_header_dlfcn_h" = xyes; then : $as_echo "#define HAVE_DLFCN_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "notify.h" "ac_cv_header_notify_h" "$ac_includes_default" if test "x$ac_cv_header_notify_h" = xyes; then : $as_echo "#define HAVE_NOTIFY_H 1" >>confdefs.h fi for ac_func in notify_post do : ac_fn_c_check_func "$LINENO" "notify_post" "ac_cv_func_notify_post" if test "x$ac_cv_func_notify_post" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NOTIFY_POST 1 _ACEOF fi done # Check whether --with-adminkey was given. if test "${with_adminkey+set}" = set; then : withval=$with_adminkey; default_adminkey="$withval" else default_adminkey="default" fi # Check whether --with-operkey was given. if test "${with_operkey+set}" = set; then : withval=$with_operkey; default_operkey="$withval" else default_operkey="default" fi ac_fn_c_check_header_mongrel "$LINENO" "Security/Authorization.h" "ac_cv_header_Security_Authorization_h" "$ac_includes_default" if test "x$ac_cv_header_Security_Authorization_h" = xyes; then : $as_echo "#define HAVE_AUTHORIZATION_H 1" >>confdefs.h if test "x$default_adminkey" != xdefault; then CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey $default_adminkey" CUPS_DEFAULT_SYSTEM_AUTHKEY="$default_adminkey" else CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey system.print.admin" CUPS_DEFAULT_SYSTEM_AUTHKEY="system.print.admin" fi if test "x$default_operkey" != xdefault; then CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY($default_operkey) @admin @lpadmin" else CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY(system.print.operator) @admin @lpadmin" fi fi ac_fn_c_check_header_mongrel "$LINENO" "Security/SecBasePriv.h" "ac_cv_header_Security_SecBasePriv_h" "$ac_includes_default" if test "x$ac_cv_header_Security_SecBasePriv_h" = xyes; then : $as_echo "#define HAVE_SECBASEPRIV_H 1" >>confdefs.h fi if test $host_os_version -ge 100; then ac_fn_c_check_header_mongrel "$LINENO" "sandbox.h" "ac_cv_header_sandbox_h" "$ac_includes_default" if test "x$ac_cv_header_sandbox_h" = xyes; then : $as_echo "#define HAVE_SANDBOX_H 1" >>confdefs.h fi fi if test $host_os_version -ge 110 -a $host_os_version -lt 120; then # Broken public headers in 10.7.x... { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sandbox/private.h presence" >&5 $as_echo_n "checking for sandbox/private.h presence... " >&6; } if test -f /usr/local/include/sandbox/private.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Run 'sudo mkdir -p /usr/local/include/sandbox' and 'sudo touch /usr/local/include/sandbox/private.h' to build CUPS." "$LINENO" 5 fi fi ac_fn_c_check_header_mongrel "$LINENO" "xpc/xpc.h" "ac_cv_header_xpc_xpc_h" "$ac_includes_default" if test "x$ac_cv_header_xpc_xpc_h" = xyes; then : $as_echo "#define HAVE_XPC 1" >>confdefs.h INSTALLXPC="install-xpc" fi ac_fn_c_check_header_mongrel "$LINENO" "xpc/private.h" "ac_cv_header_xpc_private_h" "$ac_includes_default" if test "x$ac_cv_header_xpc_private_h" = xyes; then : $as_echo "#define HAVE_XPC_PRIVATE_H 1" >>confdefs.h fi ;; esac cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_PRINTOPERATOR_AUTH "$CUPS_DEFAULT_PRINTOPERATOR_AUTH" _ACEOF cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_SYSTEM_AUTHKEY "$CUPS_DEFAULT_SYSTEM_AUTHKEY" _ACEOF COMPONENTS="all" # Check whether --with-components was given. if test "${with_components+set}" = set; then : withval=$with_components; COMPONENTS="$withval" fi case "$COMPONENTS" in all) BUILDDIRS="filter backend berkeley cgi-bin monitor notifier ppdc scheduler systemv conf data desktop locale man doc examples templates" ;; core) BUILDDIRS="data locale" ;; *) as_fn_error $? "Bad build component \"$COMPONENT\" specified!" "$LINENO" 5 ;; esac if test "$prefix" = "NONE"; then prefix="/" fi if test "$exec_prefix" = "NONE"; then if test "$prefix" = "/"; then exec_prefix="/usr" else exec_prefix="$prefix" fi fi if test "$bindir" = "\${exec_prefix}/bin"; then bindir="$exec_prefix/bin" fi cat >>confdefs.h <<_ACEOF #define CUPS_BINDIR "$bindir" _ACEOF if test "$sbindir" = "\${exec_prefix}/sbin"; then sbindir="$exec_prefix/sbin" fi cat >>confdefs.h <<_ACEOF #define CUPS_SBINDIR "$sbindir" _ACEOF if test "$sharedstatedir" = "\${prefix}/com" -a "$prefix" = "/"; then sharedstatedir="/usr/com" fi if test "$datarootdir" = "\${prefix}/share"; then if test "$prefix" = "/"; then datarootdir="/usr/share" else datarootdir="$prefix/share" fi fi if test "$datadir" = "\${prefix}/share"; then if test "$prefix" = "/"; then datadir="/usr/share" else datadir="$prefix/share" fi elif test "$datadir" = "\${datarootdir}"; then datadir="$datarootdir" fi if test "$includedir" = "\${prefix}/include" -a "$prefix" = "/"; then includedir="/usr/include" fi if test "$localstatedir" = "\${prefix}/var"; then if test "$prefix" = "/"; then if test "$host_os_name" = darwin; then localstatedir="/private/var" else localstatedir="/var" fi else localstatedir="$prefix/var" fi fi if test "$sysconfdir" = "\${prefix}/etc"; then if test "$prefix" = "/"; then if test "$host_os_name" = darwin; then sysconfdir="/private/etc" else sysconfdir="/etc" fi else sysconfdir="$prefix/etc" fi fi if test "$libdir" = "\${exec_prefix}/lib"; then case "$host_os_name" in linux*) if test -d /usr/lib64 -a ! -d /usr/lib64/fakeroot; then libdir="$exec_prefix/lib64" fi ;; esac fi # Check whether --with-privateinclude was given. if test "${with_privateinclude+set}" = set; then : withval=$with_privateinclude; privateinclude="$withval" else privateinclude="" fi if test "x$privateinclude" != x -a "x$privateinclude" != xnone; then PRIVATEINCLUDE="$privateinclude/cups" else privateinclude="" PRIVATEINCLUDE="" fi # Check whether --with-lpdconfig was given. if test "${with_lpdconfig+set}" = set; then : withval=$with_lpdconfig; LPDCONFIG="$withval" else LPDCONFIG="" fi if test "x$LPDCONFIG" = x; then if test -f /System/Library/LaunchDaemons/org.cups.cups-lpd.plist; then LPDCONFIG="launchd:///System/Library/LaunchDaemons/org.cups.cups-lpd.plist" elif test "x$XINETD" != x; then LPDCONFIG="xinetd://$XINETD/cups-lpd" fi fi if test "x$LPDCONFIG" = xoff; then cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_LPD_CONFIG "" _ACEOF else cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_LPD_CONFIG "$LPDCONFIG" _ACEOF fi # Check whether --with-smbconfig was given. if test "${with_smbconfig+set}" = set; then : withval=$with_smbconfig; SMBCONFIG="$withval" else SMBCONFIG="" fi if test "x$SMBCONFIG" = x; then if test -f /System/Library/LaunchDaemons/smbd.plist; then SMBCONFIG="launchd:///System/Library/LaunchDaemons/smbd.plist" else for dir in /etc /etc/samba /usr/local/etc; do if test -f $dir/smb.conf; then SMBCONFIG="samba://$dir/smb.conf" break fi done fi fi if test "x$SMBCONFIG" = xoff; then cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_SMB_CONFIG "" _ACEOF else cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_SMB_CONFIG "$SMBCONFIG" _ACEOF fi # Cache data... # Check whether --with-cachedir was given. if test "${with_cachedir+set}" = set; then : withval=$with_cachedir; cachedir="$withval" else cachedir="" fi if test x$cachedir = x; then if test "x$host_os_name" = xdarwin; then CUPS_CACHEDIR="$localstatedir/spool/cups/cache" else CUPS_CACHEDIR="$localstatedir/cache/cups" fi else CUPS_CACHEDIR="$cachedir" fi cat >>confdefs.h <<_ACEOF #define CUPS_CACHEDIR "$CUPS_CACHEDIR" _ACEOF # Data files CUPS_DATADIR="$datadir/cups" cat >>confdefs.h <<_ACEOF #define CUPS_DATADIR "$datadir/cups" _ACEOF # Icon directory # Check whether --with-icondir was given. if test "${with_icondir+set}" = set; then : withval=$with_icondir; icondir="$withval" else icondir="" fi if test "x$icondir" = x -a -d /usr/share/icons; then ICONDIR="/usr/share/icons" else ICONDIR="$icondir" fi # Menu directory # Check whether --with-menudir was given. if test "${with_menudir+set}" = set; then : withval=$with_menudir; menudir="$withval" else menudir="" fi if test "x$menudir" = x -a -d /usr/share/applications; then MENUDIR="/usr/share/applications" else MENUDIR="$menudir" fi # Documentation files # Check whether --with-docdir was given. if test "${with_docdir+set}" = set; then : withval=$with_docdir; docdir="$withval" else docdir="" fi if test x$docdir = x; then CUPS_DOCROOT="$datadir/doc/cups" docdir="$datadir/doc/cups" else CUPS_DOCROOT="$docdir" fi cat >>confdefs.h <<_ACEOF #define CUPS_DOCROOT "$docdir" _ACEOF # Fonts # Check whether --with-fontpath was given. if test "${with_fontpath+set}" = set; then : withval=$with_fontpath; fontpath="$withval" else fontpath="" fi if test "x$fontpath" = "x"; then CUPS_FONTPATH="$datadir/cups/fonts" else CUPS_FONTPATH="$fontpath" fi cat >>confdefs.h <<_ACEOF #define CUPS_FONTPATH "$CUPS_FONTPATH" _ACEOF # Locale data if test "$localedir" = "\${datarootdir}/locale"; then case "$host_os_name" in linux* | gnu* | *bsd* | darwin*) CUPS_LOCALEDIR="$datarootdir/locale" ;; *) # This is the standard System V location... CUPS_LOCALEDIR="$exec_prefix/lib/locale" ;; esac else CUPS_LOCALEDIR="$localedir" fi cat >>confdefs.h <<_ACEOF #define CUPS_LOCALEDIR "$CUPS_LOCALEDIR" _ACEOF # Log files... # Check whether --with-logdir was given. if test "${with_logdir+set}" = set; then : withval=$with_logdir; logdir="$withval" else logdir="" fi if test x$logdir = x; then CUPS_LOGDIR="$localstatedir/log/cups" cat >>confdefs.h <<_ACEOF #define CUPS_LOGDIR "$localstatedir/log/cups" _ACEOF else CUPS_LOGDIR="$logdir" fi cat >>confdefs.h <<_ACEOF #define CUPS_LOGDIR "$CUPS_LOGDIR" _ACEOF # Longer-term spool data CUPS_REQUESTS="$localstatedir/spool/cups" cat >>confdefs.h <<_ACEOF #define CUPS_REQUESTS "$localstatedir/spool/cups" _ACEOF # Server executables... case "$host_os_name" in *bsd* | darwin*) # *BSD and Darwin (macOS) INSTALL_SYSV="" CUPS_SERVERBIN="$exec_prefix/libexec/cups" ;; *) # All others INSTALL_SYSV="install-sysv" CUPS_SERVERBIN="$exec_prefix/lib/cups" ;; esac cat >>confdefs.h <<_ACEOF #define CUPS_SERVERBIN "$CUPS_SERVERBIN" _ACEOF # Configuration files CUPS_SERVERROOT="$sysconfdir/cups" cat >>confdefs.h <<_ACEOF #define CUPS_SERVERROOT "$sysconfdir/cups" _ACEOF # Transient run-time state # Check whether --with-rundir was given. if test "${with_rundir+set}" = set; then : withval=$with_rundir; CUPS_STATEDIR="$withval" else case "$host_os_name" in darwin*) # Darwin (macOS) CUPS_STATEDIR="$CUPS_SERVERROOT" ;; *) # All others CUPS_STATEDIR="$localstatedir/run/cups" ;; esac fi cat >>confdefs.h <<_ACEOF #define CUPS_STATEDIR "$CUPS_STATEDIR" _ACEOF if test "$mandir" = "\${datarootdir}/man" -a "$prefix" = "/"; then # New GNU "standards" break previous ones, so make sure we use # the right default location for the operating system... mandir="\${prefix}/man" fi if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then case "$host_os_name" in darwin* | linux* | gnu* | *bsd*) # Darwin, macOS, Linux, GNU HURD, and *BSD mandir="/usr/share/man" AMANDIR="/usr/share/man" PMANDIR="/usr/share/man" ;; *) # All others mandir="/usr/man" AMANDIR="/usr/man" PMANDIR="/usr/man" ;; esac else AMANDIR="$mandir" PMANDIR="$mandir" fi case "$host_os_name" in sunos*) # Solaris MAN1EXT=1 MAN5EXT=5 MAN7EXT=7 MAN8EXT=1m MAN8DIR=1m ;; linux* | gnu* | darwin*) # Linux, GNU Hurd, and macOS MAN1EXT=1.gz MAN5EXT=5.gz MAN7EXT=7.gz MAN8EXT=8.gz MAN8DIR=8 ;; *) # All others MAN1EXT=1 MAN5EXT=5 MAN7EXT=7 MAN8EXT=8 MAN8DIR=8 ;; esac PICFLAG=1 DSOFLAGS="${DSOFLAGS:=}" # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; fi cupsbase="cups" LIBCUPSBASE="lib$cupsbase" LIBCUPSSTATIC="lib$cupsbase.a" if test x$enable_shared != xno; then case "$host_os_name" in sunos*) LIBCUPS="lib$cupsbase.so.2" LIBCUPSCGI="libcupscgi.so.1" LIBCUPSIMAGE="libcupsimage.so.2" LIBCUPSMIME="libcupsmime.so.1" LIBCUPSPPDC="libcupsppdc.so.1" DSO="\$(CC)" DSOXX="\$(CXX)" DSOFLAGS="$DSOFLAGS -Wl,-h\`basename \$@\` -G \$(OPTIM)" ;; linux* | gnu* | *bsd*) LIBCUPS="lib$cupsbase.so.2" LIBCUPSCGI="libcupscgi.so.1" LIBCUPSIMAGE="libcupsimage.so.2" LIBCUPSMIME="libcupsmime.so.1" LIBCUPSPPDC="libcupsppdc.so.1" DSO="\$(CC)" DSOXX="\$(CXX)" DSOFLAGS="$DSOFLAGS -Wl,-soname,\`basename \$@\` -shared \$(OPTIM)" ;; darwin*) LIBCUPS="lib$cupsbase.2.dylib" LIBCUPSCGI="libcupscgi.1.dylib" LIBCUPSIMAGE="libcupsimage.2.dylib" LIBCUPSMIME="libcupsmime.1.dylib" LIBCUPSPPDC="libcupsppdc.1.dylib" DSO="\$(CC)" DSOXX="\$(CXX)" DSOFLAGS="$DSOFLAGS -dynamiclib -single_module -lc" ;; *) echo "Warning: shared libraries may not be supported. Trying -shared" echo " option with compiler." LIBCUPS="lib$cupsbase.so.2" LIBCUPSCGI="libcupscgi.so.1" LIBCUPSIMAGE="libcupsimage.so.2" LIBCUPSMIME="libcupsmime.so.1" LIBCUPSPPDC="libcupsppdc.so.1" DSO="\$(CC)" DSOXX="\$(CXX)" DSOFLAGS="$DSOFLAGS -Wl,-soname,\`basename \$@\` -shared \$(OPTIM)" ;; esac else PICFLAG=0 LIBCUPS="lib$cupsbase.a" LIBCUPSCGI="libcupscgi.a" LIBCUPSIMAGE="libcupsimage.a" LIBCUPSMIME="libcupsmime.a" LIBCUPSPPDC="libcupsppdc.a" DSO=":" DSOXX=":" fi if test x$enable_shared = xno; then LINKCUPS="../cups/lib$cupsbase.a" LINKCUPSIMAGE="../filter/libcupsimage.a" EXTLINKCUPS="-lcups" EXTLINKCUPSIMAGE="-lcupsimage" else LINKCUPS="-l${cupsbase}" LINKCUPSIMAGE="-lcupsimage" EXTLINKCUPS="-lcups" EXTLINKCUPSIMAGE="-lcupsimage" fi EXPORT_LDFLAGS="" if test "$DSO" != ":"; then # When using DSOs the image libraries are linked to libcupsimage.so # rather than to the executables. This makes things smaller if you # are using any static libraries, and it also allows us to distribute # a single DSO rather than a bunch... DSOLIBS="\$(LIBZ)" IMGLIBS="" # Tell the run-time linkers where to find a DSO. Some platforms # need this option, even when the library is installed in a # standard location... case $host_os_name in sunos*) # Solaris... if test $exec_prefix != /usr; then DSOFLAGS="-R$libdir $DSOFLAGS" LDFLAGS="$LDFLAGS -R$libdir" EXPORT_LDFLAGS="-R$libdir" fi ;; *bsd*) # *BSD... if test $exec_prefix != /usr; then DSOFLAGS="-Wl,-R$libdir $DSOFLAGS" LDFLAGS="$LDFLAGS -Wl,-R$libdir" EXPORT_LDFLAGS="-Wl,-R$libdir" fi ;; linux* | gnu*) # Linux, and HURD... if test $exec_prefix != /usr; then DSOFLAGS="-Wl,-rpath,$libdir $DSOFLAGS" LDFLAGS="$LDFLAGS -Wl,-rpath,$libdir" EXPORT_LDFLAGS="-Wl,-rpath,$libdir" fi ;; esac else DSOLIBS="" IMGLIBS="\$(LIBZ)" fi # Check whether --enable-libtool_unsupported was given. if test "${enable_libtool_unsupported+set}" = set; then : enableval=$enable_libtool_unsupported; if test x$enable_libtool_unsupported != xno; then if test x$enable_libtool_unsupported == xyes; then as_fn_error $? "Use --enable-libtool-unsupported=/path/to/libtool." "$LINENO" 5 fi LIBTOOL="$enable_libtool_unsupported" enable_shared=no echo "WARNING: libtool is not supported or endorsed by Apple Inc." echo " WE DO NOT PROVIDE SUPPORT FOR LIBTOOL PROBLEMS." else LIBTOOL="" fi fi if test x$LIBTOOL != x; then DSO="\$(LIBTOOL) --mode=link --tag=CC ${CC}" DSOXX="\$(LIBTOOL) --mode=link --tag=CXX ${CXX}" LD_CC="\$(LIBTOOL) --mode=link --tag=CC ${CC}" LD_CXX="\$(LIBTOOL) --mode=link --tag=CXX ${CXX}" LIBCUPS="libcups.la" LIBCUPSSTATIC="libcups.la" LIBCUPSCGI="libcupscgi.la" LIBCUPSIMAGE="libcupsimage.la" LIBCUPSMIME="libcupsmime.la" LIBCUPSPPDC="libcupsppdc.la" LIBTOOL_CC="\$(LIBTOOL) --mode=compile --tag=CC" LIBTOOL_CXX="\$(LIBTOOL) --mode=compile --tag=CXX" LIBTOOL_INSTALL="\$(LIBTOOL) --mode=install" LINKCUPS="../cups/\$(LIBCUPS)" LINKCUPSIMAGE="../filter/\$(LIBCUPSIMAGE)" else LD_CC="\$(CC)" LD_CXX="\$(CXX)" LIBTOOL_CC="" LIBTOOL_CXX="" LIBTOOL_INSTALL="" fi INSTALL_STRIP="" OPTIM="" # Check whether --with-optim was given. if test "${with_optim+set}" = set; then : withval=$with_optim; fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; fi # Check whether --enable-debug_guards was given. if test "${enable_debug_guards+set}" = set; then : enableval=$enable_debug_guards; fi # Check whether --enable-debug_printfs was given. if test "${enable_debug_printfs+set}" = set; then : enableval=$enable_debug_printfs; fi # Check whether --enable-unit_tests was given. if test "${enable_unit_tests+set}" = set; then : enableval=$enable_unit_tests; fi if test x$enable_debug = xyes; then OPTIM="-g" else INSTALL_STRIP="-s" fi if test x$enable_debug_printfs = xyes; then CFLAGS="$CFLAGS -DDEBUG" CXXFLAGS="$CXXFLAGS -DDEBUG" fi if test x$enable_debug_guards = xyes; then CFLAGS="$CFLAGS -DDEBUG_GUARDS" CXXFLAGS="$CXXFLAGS -DDEBUG_GUARDS" fi if test x$enable_unit_tests = xyes; then if test "$build" != "$host"; then as_fn_error $? "Sorry, cannot build unit tests when cross-compiling." "$LINENO" 5 fi UNITTESTS="unittests" else UNITTESTS="" fi # Check whether --with-archflags was given. if test "${with_archflags+set}" = set; then : withval=$with_archflags; fi # Check whether --with-ldarchflags was given. if test "${with_ldarchflags+set}" = set; then : withval=$with_ldarchflags; fi if test -z "$with_archflags"; then ARCHFLAGS="" else ARCHFLAGS="$with_archflags" fi if test -z "$with_ldarchflags"; then if test "$host_os_name" = darwin; then # Only create Intel programs by default LDARCHFLAGS="`echo $ARCHFLAGS | sed -e '1,$s/-arch ppc64//'`" else LDARCHFLAGS="$ARCHFLAGS" fi else LDARCHFLAGS="$with_ldarchflags" fi # Check whether --enable-relro was given. if test "${enable_relro+set}" = set; then : enableval=$enable_relro; fi CXXLIBS="${CXXLIBS:=}" PIEFLAGS="" RELROFLAGS="" if test -n "$GCC"; then # Add GCC-specific compiler options... if test -z "$OPTIM"; then if test "x$with_optim" = x; then # Default to optimize-for-size and debug OPTIM="-Os -g" else OPTIM="$with_optim $OPTIM" fi fi # Generate position-independent code as needed... if test $PICFLAG = 1; then OPTIM="-fPIC $OPTIM" fi # The -fstack-protector option is available with some versions of # GCC and adds "stack canaries" which detect when the return address # has been overwritten, preventing many types of exploit attacks. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -fstack-protector" >&5 $as_echo_n "checking whether compiler supports -fstack-protector... " >&6; } OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fstack-protector" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if test "x$LSB_BUILD" = xy; then # Can't use stack-protector with LSB binaries... OPTIM="$OPTIM -fno-stack-protector" else OPTIM="$OPTIM -fstack-protector" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$OLDCFLAGS" if test "x$LSB_BUILD" != xy; then # The -fPIE option is available with some versions of GCC and # adds randomization of addresses, which avoids another class of # exploits that depend on a fixed address for common functions. # # Not available to LSB binaries... { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -fPIE" >&5 $as_echo_n "checking whether compiler supports -fPIE... " >&6; } OLDCFLAGS="$CFLAGS" case "$host_os_name" in darwin*) CFLAGS="$CFLAGS -fPIE -Wl,-pie" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : PIEFLAGS="-fPIE -Wl,-pie" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; *) CFLAGS="$CFLAGS -fPIE -pie" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : PIEFLAGS="-fPIE -pie" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; esac CFLAGS="$OLDCFLAGS" fi if test "x$with_optim" = x; then # Add useful warning options for tracking down problems... OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wno-unused-result" >&5 $as_echo_n "checking whether compiler supports -Wno-unused-result... " >&6; } OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wno-unused-result" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : OPTIM="$OPTIM -Wno-unused-result" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$OLDCFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wsign-conversion" >&5 $as_echo_n "checking whether compiler supports -Wsign-conversion... " >&6; } OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wsign-conversion" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : OPTIM="$OPTIM -Wsign-conversion" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$OLDCFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wno-tautological-compare" >&5 $as_echo_n "checking whether compiler supports -Wno-tautological-compare... " >&6; } OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wno-tautological-compare" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : OPTIM="$OPTIM -Wno-tautological-compare" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$OLDCFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wno-format-truncation" >&5 $as_echo_n "checking whether compiler supports -Wno-format-truncation... " >&6; } OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wno-format-truncation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : OPTIM="$OPTIM -Wno-format-truncation" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$OLDCFLAGS" # Additional warning options for development testing... if test -d .svn; then OPTIM="-Werror $OPTIM" fi fi case "$host_os_name" in darwin*) # -D_FORTIFY_SOURCE=2 adds additional object size # checking, basically wrapping all string functions # with buffer-limited ones. Not strictly needed for # CUPS since we already use buffer-limited calls, but # this will catch any additions that are broken. CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2" ;; linux*) # The -z relro option is provided by the Linux linker command to # make relocatable data read-only. if test x$enable_relro = xyes; then RELROFLAGS="-Wl,-z,relro,-z,now" fi ;; esac else # Add vendor-specific compiler options... case $host_os_name in sunos*) # Solaris if test -z "$OPTIM"; then if test "x$with_optim" = x; then OPTIM="-xO2" else OPTIM="$with_optim $OPTIM" fi fi if test $PICFLAG = 1; then OPTIM="-KPIC $OPTIM" fi ;; *) # Running some other operating system; inform the user they # should contribute the necessary options to # cups-support@cups.org... echo "Building CUPS with default compiler optimizations; contact" echo "cups-devel@cups.org with uname and compiler options needed" echo "for your platform, or set the CFLAGS and LDFLAGS environment" echo "variables before running configure." ;; esac fi # Add general compiler options per platform... case $host_os_name in linux*) # glibc 2.8 and higher breaks peer credentials unless you # define _GNU_SOURCE... OPTIM="$OPTIM -D_GNU_SOURCE" ;; esac ac_fn_c_check_header_compile "$LINENO" "resolv.h" "ac_cv_header_resolv_h" " #include #include #include #include #include " if test "x$ac_cv_header_resolv_h" = xyes; then : $as_echo "#define HAVE_RESOLV_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 $as_echo_n "checking for library containing socket... " >&6; } if ${ac_cv_search_socket+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char socket (); int main () { return socket (); ; return 0; } _ACEOF for ac_lib in '' socket; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_socket=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_socket+:} false; then : break fi done if ${ac_cv_search_socket+:} false; then : else ac_cv_search_socket=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 $as_echo "$ac_cv_search_socket" >&6; } ac_res=$ac_cv_search_socket if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyaddr" >&5 $as_echo_n "checking for library containing gethostbyaddr... " >&6; } if ${ac_cv_search_gethostbyaddr+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyaddr (); int main () { return gethostbyaddr (); ; return 0; } _ACEOF for ac_lib in '' nsl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gethostbyaddr=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gethostbyaddr+:} false; then : break fi done if ${ac_cv_search_gethostbyaddr+:} false; then : else ac_cv_search_gethostbyaddr=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyaddr" >&5 $as_echo "$ac_cv_search_gethostbyaddr" >&6; } ac_res=$ac_cv_search_gethostbyaddr if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getifaddrs" >&5 $as_echo_n "checking for library containing getifaddrs... " >&6; } if ${ac_cv_search_getifaddrs+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getifaddrs (); int main () { return getifaddrs (); ; return 0; } _ACEOF for ac_lib in '' nsl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_getifaddrs=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_getifaddrs+:} false; then : break fi done if ${ac_cv_search_getifaddrs+:} false; then : else ac_cv_search_getifaddrs=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getifaddrs" >&5 $as_echo "$ac_cv_search_getifaddrs" >&6; } ac_res=$ac_cv_search_getifaddrs if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_GETIFADDRS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing hstrerror" >&5 $as_echo_n "checking for library containing hstrerror... " >&6; } if ${ac_cv_search_hstrerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char hstrerror (); int main () { return hstrerror (); ; return 0; } _ACEOF for ac_lib in '' nsl socket resolv; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_hstrerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_hstrerror+:} false; then : break fi done if ${ac_cv_search_hstrerror+:} false; then : else ac_cv_search_hstrerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_hstrerror" >&5 $as_echo "$ac_cv_search_hstrerror" >&6; } ac_res=$ac_cv_search_hstrerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_HSTRERROR 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing rresvport_af" >&5 $as_echo_n "checking for library containing rresvport_af... " >&6; } if ${ac_cv_search_rresvport_af+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rresvport_af (); int main () { return rresvport_af (); ; return 0; } _ACEOF for ac_lib in '' nsl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_rresvport_af=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_rresvport_af+:} false; then : break fi done if ${ac_cv_search_rresvport_af+:} false; then : else ac_cv_search_rresvport_af=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_rresvport_af" >&5 $as_echo "$ac_cv_search_rresvport_af" >&6; } ac_res=$ac_cv_search_rresvport_af if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_RRESVPORT_AF 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing __res_init" >&5 $as_echo_n "checking for library containing __res_init... " >&6; } if ${ac_cv_search___res_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char __res_init (); int main () { return __res_init (); ; return 0; } _ACEOF for ac_lib in '' resolv bind; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search___res_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search___res_init+:} false; then : break fi done if ${ac_cv_search___res_init+:} false; then : else ac_cv_search___res_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search___res_init" >&5 $as_echo "$ac_cv_search___res_init" >&6; } ac_res=$ac_cv_search___res_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_RES_INIT 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing res_9_init" >&5 $as_echo_n "checking for library containing res_9_init... " >&6; } if ${ac_cv_search_res_9_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char res_9_init (); int main () { return res_9_init (); ; return 0; } _ACEOF for ac_lib in '' resolv bind; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_res_9_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_res_9_init+:} false; then : break fi done if ${ac_cv_search_res_9_init+:} false; then : else ac_cv_search_res_9_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_res_9_init" >&5 $as_echo "$ac_cv_search_res_9_init" >&6; } ac_res=$ac_cv_search_res_9_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_RES_INIT 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing res_init" >&5 $as_echo_n "checking for library containing res_init... " >&6; } if ${ac_cv_search_res_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char res_init (); int main () { return res_init (); ; return 0; } _ACEOF for ac_lib in '' resolv bind; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_res_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_res_init+:} false; then : break fi done if ${ac_cv_search_res_init+:} false; then : else ac_cv_search_res_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_res_init" >&5 $as_echo "$ac_cv_search_res_init" >&6; } ac_res=$ac_cv_search_res_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_RES_INIT 1" >>confdefs.h fi fi fi # Tru64 5.1b leaks file descriptors with these functions; disable until # we can come up with a test for this... if test "$host_os_name" != "osf1"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getaddrinfo" >&5 $as_echo_n "checking for library containing getaddrinfo... " >&6; } if ${ac_cv_search_getaddrinfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getaddrinfo (); int main () { return getaddrinfo (); ; return 0; } _ACEOF for ac_lib in '' nsl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_getaddrinfo=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_getaddrinfo+:} false; then : break fi done if ${ac_cv_search_getaddrinfo+:} false; then : else ac_cv_search_getaddrinfo=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getaddrinfo" >&5 $as_echo "$ac_cv_search_getaddrinfo" >&6; } ac_res=$ac_cv_search_getaddrinfo if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_GETADDRINFO 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getnameinfo" >&5 $as_echo_n "checking for library containing getnameinfo... " >&6; } if ${ac_cv_search_getnameinfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getnameinfo (); int main () { return getnameinfo (); ; return 0; } _ACEOF for ac_lib in '' nsl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_getnameinfo=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_getnameinfo+:} false; then : break fi done if ${ac_cv_search_getnameinfo+:} false; then : else ac_cv_search_getnameinfo=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getnameinfo" >&5 $as_echo "$ac_cv_search_getnameinfo" >&6; } ac_res=$ac_cv_search_getnameinfo if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_GETNAMEINFO 1" >>confdefs.h fi fi ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" "#include " if test "x$ac_cv_member_struct_sockaddr_sa_len" = xyes; then : fi ac_fn_c_check_header_mongrel "$LINENO" "sys/sockio.h" "ac_cv_header_sys_sockio_h" "$ac_includes_default" if test "x$ac_cv_header_sys_sockio_h" = xyes; then : $as_echo "#define HAVE_SYS_SOCKIO_H 1" >>confdefs.h fi CUPS_DEFAULT_DOMAINSOCKET="" # Check whether --with-domainsocket was given. if test "${with_domainsocket+set}" = set; then : withval=$with_domainsocket; default_domainsocket="$withval" else default_domainsocket="" fi if test x$enable_domainsocket != xno -a x$default_domainsocket != xno; then if test "x$default_domainsocket" = x; then case "$host_os_name" in darwin*) # Darwin and macOS do their own thing... CUPS_DEFAULT_DOMAINSOCKET="$localstatedir/run/cupsd" ;; *) # All others use FHS standard... CUPS_DEFAULT_DOMAINSOCKET="$CUPS_STATEDIR/cups.sock" ;; esac else CUPS_DEFAULT_DOMAINSOCKET="$default_domainsocket" fi CUPS_LISTEN_DOMAINSOCKET="Listen $CUPS_DEFAULT_DOMAINSOCKET" cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_DOMAINSOCKET "$CUPS_DEFAULT_DOMAINSOCKET" _ACEOF else CUPS_LISTEN_DOMAINSOCKET="" fi ac_fn_c_check_func "$LINENO" "poll" "ac_cv_func_poll" if test "x$ac_cv_func_poll" = xyes; then : $as_echo "#define HAVE_POLL 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "epoll_create" "ac_cv_func_epoll_create" if test "x$ac_cv_func_epoll_create" = xyes; then : $as_echo "#define HAVE_EPOLL 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "kqueue" "ac_cv_func_kqueue" if test "x$ac_cv_func_kqueue" = xyes; then : $as_echo "#define HAVE_KQUEUE 1" >>confdefs.h fi # Check whether --enable-gssapi was given. if test "${enable_gssapi+set}" = set; then : enableval=$enable_gssapi; fi LIBGSSAPI="" if test x$enable_gssapi != xno; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}krb5-config", so it can be a program name with args. set dummy ${ac_tool_prefix}krb5-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_KRB5CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $KRB5CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_KRB5CONFIG="$KRB5CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_KRB5CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi KRB5CONFIG=$ac_cv_path_KRB5CONFIG if test -n "$KRB5CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KRB5CONFIG" >&5 $as_echo "$KRB5CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_KRB5CONFIG"; then ac_pt_KRB5CONFIG=$KRB5CONFIG # Extract the first word of "krb5-config", so it can be a program name with args. set dummy krb5-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_KRB5CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_KRB5CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_KRB5CONFIG="$ac_pt_KRB5CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_KRB5CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_KRB5CONFIG=$ac_cv_path_ac_pt_KRB5CONFIG if test -n "$ac_pt_KRB5CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_KRB5CONFIG" >&5 $as_echo "$ac_pt_KRB5CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_KRB5CONFIG" = x; then KRB5CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac KRB5CONFIG=$ac_pt_KRB5CONFIG fi else KRB5CONFIG="$ac_cv_path_KRB5CONFIG" fi if test "x$KRB5CONFIG" != x; then case "$host_os_name" in darwin) # macOS weak-links to the Kerberos framework... LIBGSSAPI="-weak_framework Kerberos" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSS framework" >&5 $as_echo_n "checking for GSS framework... " >&6; } if test -d /System/Library/Frameworks/GSS.framework; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } LIBGSSAPI="$LIBGSSAPI -weak_framework GSS" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; sunos*) # Solaris has a non-standard krb5-config, don't use it! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_display_status in -lgss" >&5 $as_echo_n "checking for gss_display_status in -lgss... " >&6; } if ${ac_cv_lib_gss_gss_display_status+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgss $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gss_display_status (); int main () { return gss_display_status (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gss_gss_display_status=yes else ac_cv_lib_gss_gss_display_status=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gss_gss_display_status" >&5 $as_echo "$ac_cv_lib_gss_gss_display_status" >&6; } if test "x$ac_cv_lib_gss_gss_display_status" = xyes; then : $as_echo "#define HAVE_GSSAPI 1" >>confdefs.h CFLAGS="`$KRB5CONFIG --cflags` $CFLAGS" CPPFLAGS="`$KRB5CONFIG --cflags` $CPPFLAGS" LIBGSSAPI="-lgss `$KRB5CONFIG --libs`" fi ;; *) # Other platforms just ask for GSSAPI CFLAGS="`$KRB5CONFIG --cflags gssapi` $CFLAGS" CPPFLAGS="`$KRB5CONFIG --cflags gssapi` $CPPFLAGS" LIBGSSAPI="`$KRB5CONFIG --libs gssapi`" ;; esac $as_echo "#define HAVE_GSSAPI 1" >>confdefs.h else # Check for vendor-specific implementations... case "$host_os_name" in hp-ux*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_display_status in -lgss" >&5 $as_echo_n "checking for gss_display_status in -lgss... " >&6; } if ${ac_cv_lib_gss_gss_display_status+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgss $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gss_display_status (); int main () { return gss_display_status (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gss_gss_display_status=yes else ac_cv_lib_gss_gss_display_status=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gss_gss_display_status" >&5 $as_echo "$ac_cv_lib_gss_gss_display_status" >&6; } if test "x$ac_cv_lib_gss_gss_display_status" = xyes; then : $as_echo "#define HAVE_GSSAPI 1" >>confdefs.h LIBGSSAPI="-lgss -lgssapi_krb5" fi ;; sunos*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_display_status in -lgss" >&5 $as_echo_n "checking for gss_display_status in -lgss... " >&6; } if ${ac_cv_lib_gss_gss_display_status+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgss $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gss_display_status (); int main () { return gss_display_status (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gss_gss_display_status=yes else ac_cv_lib_gss_gss_display_status=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gss_gss_display_status" >&5 $as_echo "$ac_cv_lib_gss_gss_display_status" >&6; } if test "x$ac_cv_lib_gss_gss_display_status" = xyes; then : $as_echo "#define HAVE_GSSAPI 1" >>confdefs.h LIBGSSAPI="-lgss" fi ;; esac fi if test "x$LIBGSSAPI" != x; then ac_fn_c_check_header_mongrel "$LINENO" "krb5.h" "ac_cv_header_krb5_h" "$ac_includes_default" if test "x$ac_cv_header_krb5_h" = xyes; then : $as_echo "#define HAVE_KRB5_H 1" >>confdefs.h fi if test -d /System/Library/Frameworks/GSS.framework; then ac_fn_c_check_header_mongrel "$LINENO" "GSS/gssapi.h" "ac_cv_header_GSS_gssapi_h" "$ac_includes_default" if test "x$ac_cv_header_GSS_gssapi_h" = xyes; then : $as_echo "#define HAVE_GSS_GSSAPI_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "GSS/gssapi_generic.h" "ac_cv_header_GSS_gssapi_generic_h" "$ac_includes_default" if test "x$ac_cv_header_GSS_gssapi_generic_h" = xyes; then : $as_echo "#define HAVE_GSS_GSSAPI_GENERIC_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "GSS/gssapi_spi.h" "ac_cv_header_GSS_gssapi_spi_h" "$ac_includes_default" if test "x$ac_cv_header_GSS_gssapi_spi_h" = xyes; then : $as_echo "#define HAVE_GSS_GSSAPI_SPI_H 1" >>confdefs.h fi else ac_fn_c_check_header_mongrel "$LINENO" "gssapi.h" "ac_cv_header_gssapi_h" "$ac_includes_default" if test "x$ac_cv_header_gssapi_h" = xyes; then : $as_echo "#define HAVE_GSSAPI_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "gssapi/gssapi.h" "ac_cv_header_gssapi_gssapi_h" "$ac_includes_default" if test "x$ac_cv_header_gssapi_gssapi_h" = xyes; then : $as_echo "#define HAVE_GSSAPI_GSSAPI_H 1" >>confdefs.h fi fi SAVELIBS="$LIBS" LIBS="$LIBS $LIBGSSAPI" ac_fn_c_check_func "$LINENO" "__ApplePrivate_gss_acquire_cred_ex_f" "ac_cv_func___ApplePrivate_gss_acquire_cred_ex_f" if test "x$ac_cv_func___ApplePrivate_gss_acquire_cred_ex_f" = xyes; then : $as_echo "#define HAVE_GSS_ACQUIRE_CRED_EX_F 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSS_C_NT_HOSTBASED_SERVICE" >&5 $as_echo_n "checking for GSS_C_NT_HOSTBASED_SERVICE... " >&6; } if test x$ac_cv_header_gssapi_gssapi_h = xyes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { gss_OID foo = GSS_C_NT_HOSTBASED_SERVICE; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : $as_echo "#define HAVE_GSS_C_NT_HOSTBASED_SERVICE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext elif test x$ac_cv_header_gss_gssapi_h = xyes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { gss_OID foo = GSS_C_NT_HOSTBASED_SERVICE; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : $as_echo "#define HAVE_GSS_C_NT_HOSTBASED_SERVICE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { gss_OID foo = GSS_C_NT_HOSTBASED_SERVICE; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : $as_echo "#define HAVE_GSS_C_NT_HOSTBASED_SERVICE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi LIBS="$SAVELIBS" fi fi # Check whether --with-gssservicename was given. if test "${with_gssservicename+set}" = set; then : withval=$with_gssservicename; default_gssservicename="$withval" else default_gssservicename="default" fi if test x$default_gssservicename != xno; then if test "x$default_gssservicename" = "xdefault"; then CUPS_DEFAULT_GSSSERVICENAME="host" else CUPS_DEFAULT_GSSSERVICENAME="$default_gssservicename" fi else CUPS_DEFAULT_GSSSERVICENAME="" fi cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_GSSSERVICENAME "$CUPS_DEFAULT_GSSSERVICENAME" _ACEOF # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; fi have_pthread=no PTHREAD_FLAGS="" if test "x$enable_threads" != xno; then ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes; then : $as_echo "#define HAVE_PTHREAD_H 1" >>confdefs.h fi if test x$ac_cv_header_pthread_h = xyes; then for flag in -lpthreads -lpthread -pthread; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create using $flag" >&5 $as_echo_n "checking for pthread_create using $flag... " >&6; } SAVELIBS="$LIBS" LIBS="$flag $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_create(0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : have_pthread=yes else LIBS="$SAVELIBS" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_pthread" >&5 $as_echo "$have_pthread" >&6; } if test $have_pthread = yes; then PTHREAD_FLAGS="-D_THREAD_SAFE -D_REENTRANT" # Solaris requires -D_POSIX_PTHREAD_SEMANTICS to # be POSIX-compliant... :( if test $host_os_name = sunos; then PTHREAD_FLAGS="$PTHREAD_FLAGS -D_POSIX_PTHREAD_SEMANTICS" fi break fi done fi fi # Check whether --enable-ssl was given. if test "${enable_ssl+set}" = set; then : enableval=$enable_ssl; fi # Check whether --enable-cdsassl was given. if test "${enable_cdsassl+set}" = set; then : enableval=$enable_cdsassl; fi # Check whether --enable-gnutls was given. if test "${enable_gnutls+set}" = set; then : enableval=$enable_gnutls; fi SSLFLAGS="" SSLLIBS="" have_ssl=0 CUPS_SERVERKEYCHAIN="" if test x$enable_ssl != xno; then if test $have_ssl = 0 -a "x$enable_cdsassl" != "xno"; then if test $host_os_name = darwin; then ac_fn_c_check_header_mongrel "$LINENO" "Security/SecureTransport.h" "ac_cv_header_Security_SecureTransport_h" "$ac_includes_default" if test "x$ac_cv_header_Security_SecureTransport_h" = xyes; then : have_ssl=1 $as_echo "#define HAVE_SSL 1" >>confdefs.h $as_echo "#define HAVE_CDSASSL 1" >>confdefs.h CUPS_SERVERKEYCHAIN="/Library/Keychains/System.keychain" ac_fn_c_check_header_mongrel "$LINENO" "Security/SecureTransportPriv.h" "ac_cv_header_Security_SecureTransportPriv_h" "$ac_includes_default" if test "x$ac_cv_header_Security_SecureTransportPriv_h" = xyes; then : $as_echo "#define HAVE_SECURETRANSPORTPRIV_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "Security/SecCertificate.h" "ac_cv_header_Security_SecCertificate_h" "$ac_includes_default" if test "x$ac_cv_header_Security_SecCertificate_h" = xyes; then : $as_echo "#define HAVE_SECCERTIFICATE_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "Security/SecItem.h" "ac_cv_header_Security_SecItem_h" "$ac_includes_default" if test "x$ac_cv_header_Security_SecItem_h" = xyes; then : $as_echo "#define HAVE_SECITEM_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "Security/SecItemPriv.h" "ac_cv_header_Security_SecItemPriv_h" "#include " if test "x$ac_cv_header_Security_SecItemPriv_h" = xyes; then : $as_echo "#define HAVE_SECITEMPRIV_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "Security/SecPolicy.h" "ac_cv_header_Security_SecPolicy_h" "$ac_includes_default" if test "x$ac_cv_header_Security_SecPolicy_h" = xyes; then : $as_echo "#define HAVE_SECPOLICY_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "Security/SecPolicyPriv.h" "ac_cv_header_Security_SecPolicyPriv_h" "$ac_includes_default" if test "x$ac_cv_header_Security_SecPolicyPriv_h" = xyes; then : $as_echo "#define HAVE_SECPOLICYPRIV_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "Security/SecBasePriv.h" "ac_cv_header_Security_SecBasePriv_h" "$ac_includes_default" if test "x$ac_cv_header_Security_SecBasePriv_h" = xyes; then : $as_echo "#define HAVE_SECBASEPRIV_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "Security/SecIdentitySearchPriv.h" "ac_cv_header_Security_SecIdentitySearchPriv_h" "$ac_includes_default" if test "x$ac_cv_header_Security_SecIdentitySearchPriv_h" = xyes; then : $as_echo "#define HAVE_SECIDENTITYSEARCHPRIV_H 1" >>confdefs.h fi $as_echo "#define HAVE_CSSMERRORSTRING 1" >>confdefs.h $as_echo "#define HAVE_SECKEYCHAINOPEN 1" >>confdefs.h fi if test $host_os_version -ge 150; then $as_echo "#define HAVE_SSLSETENABLEDCIPHERS 1" >>confdefs.h fi fi fi if test $have_ssl = 0 -a "x$enable_gnutls" != "xno" -a "x$PKGCONFIG" != x; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}libgnutls-config", so it can be a program name with args. set dummy ${ac_tool_prefix}libgnutls-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_LIBGNUTLSCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $LIBGNUTLSCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_LIBGNUTLSCONFIG="$LIBGNUTLSCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_LIBGNUTLSCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LIBGNUTLSCONFIG=$ac_cv_path_LIBGNUTLSCONFIG if test -n "$LIBGNUTLSCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBGNUTLSCONFIG" >&5 $as_echo "$LIBGNUTLSCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_LIBGNUTLSCONFIG"; then ac_pt_LIBGNUTLSCONFIG=$LIBGNUTLSCONFIG # Extract the first word of "libgnutls-config", so it can be a program name with args. set dummy libgnutls-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_LIBGNUTLSCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_LIBGNUTLSCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_LIBGNUTLSCONFIG="$ac_pt_LIBGNUTLSCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_LIBGNUTLSCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_LIBGNUTLSCONFIG=$ac_cv_path_ac_pt_LIBGNUTLSCONFIG if test -n "$ac_pt_LIBGNUTLSCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LIBGNUTLSCONFIG" >&5 $as_echo "$ac_pt_LIBGNUTLSCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_LIBGNUTLSCONFIG" = x; then LIBGNUTLSCONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIBGNUTLSCONFIG=$ac_pt_LIBGNUTLSCONFIG fi else LIBGNUTLSCONFIG="$ac_cv_path_LIBGNUTLSCONFIG" fi if $PKGCONFIG --exists gnutls; then have_ssl=1 SSLLIBS=`$PKGCONFIG --libs gnutls` SSLFLAGS=`$PKGCONFIG --cflags gnutls` $as_echo "#define HAVE_SSL 1" >>confdefs.h $as_echo "#define HAVE_GNUTLS 1" >>confdefs.h elif test "x$LIBGNUTLSCONFIG" != x; then have_ssl=1 SSLLIBS=`$LIBGNUTLSCONFIG --libs` SSLFLAGS=`$LIBGNUTLSCONFIG --cflags` $as_echo "#define HAVE_SSL 1" >>confdefs.h $as_echo "#define HAVE_GNUTLS 1" >>confdefs.h fi if test $have_ssl = 1; then CUPS_SERVERKEYCHAIN="ssl" SAVELIBS="$LIBS" LIBS="$LIBS $SSLLIBS" ac_fn_c_check_func "$LINENO" "gnutls_transport_set_pull_timeout_function" "ac_cv_func_gnutls_transport_set_pull_timeout_function" if test "x$ac_cv_func_gnutls_transport_set_pull_timeout_function" = xyes; then : $as_echo "#define HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "gnutls_priority_set_direct" "ac_cv_func_gnutls_priority_set_direct" if test "x$ac_cv_func_gnutls_priority_set_direct" = xyes; then : $as_echo "#define HAVE_GNUTLS_PRIORITY_SET_DIRECT 1" >>confdefs.h fi LIBS="$SAVELIBS" fi fi fi IPPALIASES="http" if test $have_ssl = 1; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using SSLLIBS=\"$SSLLIBS\"" >&5 $as_echo " Using SSLLIBS=\"$SSLLIBS\"" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using SSLFLAGS=\"$SSLFLAGS\"" >&5 $as_echo " Using SSLFLAGS=\"$SSLFLAGS\"" >&6; } IPPALIASES="http https ipps" elif test x$enable_cdsa = xyes -o x$enable_gnutls = xyes; then as_fn_error $? "Unable to enable SSL support." "$LINENO" 5 fi EXPORT_SSLLIBS="$SSLLIBS" # Check whether --enable-pam was given. if test "${enable_pam+set}" = set; then : enableval=$enable_pam; fi # Check whether --with-pam_module was given. if test "${with_pam_module+set}" = set; then : withval=$with_pam_module; fi PAMDIR="" PAMFILE="pam.std" PAMLIBS="" PAMMOD="pam_unknown.so" PAMMODAUTH="pam_unknown.so" if test x$enable_pam != xno; then SAVELIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDL 1 _ACEOF LIBS="-ldl $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pam_start in -lpam" >&5 $as_echo_n "checking for pam_start in -lpam... " >&6; } if ${ac_cv_lib_pam_pam_start+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpam $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pam_start (); int main () { return pam_start (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pam_pam_start=yes else ac_cv_lib_pam_pam_start=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pam_pam_start" >&5 $as_echo "$ac_cv_lib_pam_pam_start" >&6; } if test "x$ac_cv_lib_pam_pam_start" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPAM 1 _ACEOF LIBS="-lpam $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pam_set_item in -lpam" >&5 $as_echo_n "checking for pam_set_item in -lpam... " >&6; } if ${ac_cv_lib_pam_pam_set_item+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpam $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pam_set_item (); int main () { return pam_set_item (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pam_pam_set_item=yes else ac_cv_lib_pam_pam_set_item=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pam_pam_set_item" >&5 $as_echo "$ac_cv_lib_pam_pam_set_item" >&6; } if test "x$ac_cv_lib_pam_pam_set_item" = xyes; then : $as_echo "#define HAVE_PAM_SET_ITEM 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pam_setcred in -lpam" >&5 $as_echo_n "checking for pam_setcred in -lpam... " >&6; } if ${ac_cv_lib_pam_pam_setcred+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpam $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pam_setcred (); int main () { return pam_setcred (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pam_pam_setcred=yes else ac_cv_lib_pam_pam_setcred=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pam_pam_setcred" >&5 $as_echo "$ac_cv_lib_pam_pam_setcred" >&6; } if test "x$ac_cv_lib_pam_pam_setcred" = xyes; then : $as_echo "#define HAVE_PAM_SETCRED 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "security/pam_appl.h" "ac_cv_header_security_pam_appl_h" "$ac_includes_default" if test "x$ac_cv_header_security_pam_appl_h" = xyes; then : fi if test x$ac_cv_header_security_pam_appl_h != xyes; then ac_fn_c_check_header_mongrel "$LINENO" "pam/pam_appl.h" "ac_cv_header_pam_pam_appl_h" "$ac_includes_default" if test "x$ac_cv_header_pam_pam_appl_h" = xyes; then : $as_echo "#define HAVE_PAM_PAM_APPL_H 1" >>confdefs.h fi fi if test x$ac_cv_lib_pam_pam_start != xno; then # Set the necessary libraries for PAM... if test x$ac_cv_lib_dl_dlopen != xno; then PAMLIBS="-lpam -ldl" else PAMLIBS="-lpam" fi # Find the PAM configuration directory, if any... for dir in /private/etc/pam.d /etc/pam.d; do if test -d $dir; then PAMDIR=$dir break; fi done fi LIBS="$SAVELIBS" case "$host_os_name" in darwin*) # Darwin/macOS if test "x$with_pam_module" != x; then PAMFILE="pam.$with_pam_module" elif test -f /usr/lib/pam/pam_opendirectory.so.2; then PAMFILE="pam.opendirectory" else PAMFILE="pam.securityserver" fi ;; *) # All others; this test might need to be updated # as Linux distributors move things around... if test "x$with_pam_module" != x; then PAMMOD="pam_${with_pam_module}.so" elif test -f /lib/security/pam_unix2.so; then PAMMOD="pam_unix2.so" elif test -f /lib/security/pam_unix.so; then PAMMOD="pam_unix.so" fi if test "x$PAMMOD" = xpam_unix.so; then PAMMODAUTH="$PAMMOD shadow nodelay" else PAMMODAUTH="$PAMMOD nodelay" fi ;; esac fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi LARGEFILE="" if test x$enable_largefile != xno; then LARGEFILE="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE" if test x$ac_cv_sys_large_files = x1; then LARGEFILE="$LARGEFILE -D_LARGE_FILES" fi if test x$ac_cv_sys_file_offset_bits = x64; then LARGEFILE="$LARGEFILE -D_FILE_OFFSET_BITS=64" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 $as_echo_n "checking for long long int... " >&6; } if ${ac_cv_c_long_long+:} false; then : $as_echo_n "(cached) " >&6 else if test "$GCC" = yes; then ac_cv_c_long_long=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { long long int i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_long_long=yes else ac_cv_c_long_long=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_long_long" >&5 $as_echo "$ac_cv_c_long_long" >&6; } if test $ac_cv_c_long_long = yes; then $as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strtoll" "ac_cv_func_strtoll" if test "x$ac_cv_func_strtoll" = xyes; then : $as_echo "#define HAVE_STRTOLL 1" >>confdefs.h fi # Check whether --enable-avahi was given. if test "${enable_avahi+set}" = set; then : enableval=$enable_avahi; fi # Check whether --enable-dnssd was given. if test "${enable_dnssd+set}" = set; then : enableval=$enable_dnssd; fi # Check whether --with-dnssd-libs was given. if test "${with_dnssd_libs+set}" = set; then : withval=$with_dnssd_libs; LDFLAGS="-L$withval $LDFLAGS" DSOFLAGS="-L$withval $DSOFLAGS" fi # Check whether --with-dnssd-includes was given. if test "${with_dnssd_includes+set}" = set; then : withval=$with_dnssd_includes; CFLAGS="-I$withval $CFLAGS" CPPFLAGS="-I$withval $CPPFLAGS" fi DNSSDLIBS="" DNSSD_BACKEND="" IPPFIND_BIN="" IPPFIND_MAN="" if test "x$PKGCONFIG" != x -a x$enable_avahi != xno -a x$host_os_name != xdarwin; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Avahi" >&5 $as_echo_n "checking for Avahi... " >&6; } if $PKGCONFIG --exists avahi-client; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } CFLAGS="$CFLAGS `$PKGCONFIG --cflags avahi-client`" DNSSDLIBS="`$PKGCONFIG --libs avahi-client`" DNSSD_BACKEND="dnssd" IPPFIND_BIN="ippfind" IPPFIND_MAN="ippfind.\$(MAN1EXT)" $as_echo "#define HAVE_AVAHI 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test "x$DNSSD_BACKEND" = x -a x$enable_dnssd != xno; then ac_fn_c_check_header_mongrel "$LINENO" "dns_sd.h" "ac_cv_header_dns_sd_h" "$ac_includes_default" if test "x$ac_cv_header_dns_sd_h" = xyes; then : case "$host_os_name" in darwin*) # Darwin and macOS... $as_echo "#define HAVE_DNSSD 1" >>confdefs.h DNSSDLIBS="-framework CoreFoundation -framework SystemConfiguration" DNSSD_BACKEND="dnssd" IPPFIND_BIN="ippfind" IPPFIND_MAN="ippfind.\$(MAN1EXT)" ;; *) # All others... { $as_echo "$as_me:${as_lineno-$LINENO}: checking for current version of dns_sd library" >&5 $as_echo_n "checking for current version of dns_sd library... " >&6; } SAVELIBS="$LIBS" LIBS="$LIBS -ldns_sd" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int constant = kDNSServiceFlagsShareConnection; unsigned char txtRecord[100]; uint8_t valueLen; TXTRecordGetValuePtr(sizeof(txtRecord), txtRecord, "value", &valueLen); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_DNSSD 1" >>confdefs.h DNSSDLIBS="-ldns_sd" DNSSD_BACKEND="dnssd" else IPPFIND_BIN="ippfind" IPPFIND_MAN="ippfind.\$(MAN1EXT)" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext LIBS="$SAVELIBS" ;; esac fi fi ONDEMANDFLAGS="" ONDEMANDLIBS="" # Check whether --enable-launchd was given. if test "${enable_launchd+set}" = set; then : enableval=$enable_launchd; fi LAUNCHD_DIR="" if test x$enable_launchd != xno; then ac_fn_c_check_func "$LINENO" "launch_activate_socket" "ac_cv_func_launch_activate_socket" if test "x$ac_cv_func_launch_activate_socket" = xyes; then : $as_echo "#define HAVE_LAUNCHD 1" >>confdefs.h $as_echo "#define HAVE_ONDEMAND 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "launch.h" "ac_cv_header_launch_h" "$ac_includes_default" if test "x$ac_cv_header_launch_h" = xyes; then : $as_echo "#define HAVE_LAUNCH_H 1" >>confdefs.h fi if test "$host_os_name" = darwin; then LAUNCHD_DIR="/System/Library/LaunchDaemons" # liblaunch is already part of libSystem fi fi # Check whether --enable-systemd was given. if test "${enable_systemd+set}" = set; then : enableval=$enable_systemd; fi # Check whether --with-systemd was given. if test "${with_systemd+set}" = set; then : withval=$with_systemd; SYSTEMD_DIR="$withval" else SYSTEMD_DIR="" fi if test x$enable_systemd != xno; then if test "x$PKGCONFIG" = x; then if test x$enable_systemd = xyes; then as_fn_error $? "Need pkg-config to enable systemd support." "$LINENO" 5 fi else have_systemd=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd" >&5 $as_echo_n "checking for libsystemd... " >&6; } if $PKGCONFIG --exists libsystemd; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_systemd=yes ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd` ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd` elif $PKGCONFIG --exists libsystemd-daemon; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes - legacy" >&5 $as_echo "yes - legacy" >&6; } have_systemd=yes ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd-daemon` ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd-daemon` if $PKGCONFIG --exists libsystemd-journal; then ONDEMANDFLAGS="$ONDEMANDFLAGS `$PKGCONFIG --cflags libsystemd-journal`" ONDEMANDLIBS="$ONDEMANDLIBS `$PKGCONFIG --libs libsystemd-journal`" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test $have_systemd = yes; then $as_echo "#define HAVE_SYSTEMD 1" >>confdefs.h $as_echo "#define HAVE_ONDEMAND 1" >>confdefs.h ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-journal.h" "ac_cv_header_systemd_sd_journal_h" "$ac_includes_default" if test "x$ac_cv_header_systemd_sd_journal_h" = xyes; then : $as_echo "#define HAVE_SYSTEMD_SD_JOURNAL_H 1" >>confdefs.h fi if test "x$SYSTEMD_DIR" = x; then SYSTEMD_DIR="`$PKGCONFIG --variable=systemdsystemunitdir systemd`" fi fi fi fi # Check whether --enable-upstart was given. if test "${enable_upstart+set}" = set; then : enableval=$enable_upstart; fi if test "x$enable_upstart" = "xyes"; then if test "x$have_systemd" = "xyes"; then as_fn_error $? "Cannot support both systemd and upstart." "$LINENO" 5 fi $as_echo "#define HAVE_UPSTART 1" >>confdefs.h $as_echo "#define HAVE_ONDEMAND 1" >>confdefs.h fi SMFMANIFESTDIR="" # Check whether --with-smfmanifestdir was given. if test "${with_smfmanifestdir+set}" = set; then : withval=$with_smfmanifestdir; SMFMANIFESTDIR="$withval" fi # Check whether --with-rcdir was given. if test "${with_rcdir+set}" = set; then : withval=$with_rcdir; rcdir="$withval" else rcdir="" fi # Check whether --with-rclevels was given. if test "${with_rclevels+set}" = set; then : withval=$with_rclevels; rclevels="$withval" else rclevels="2 3 5" fi # Check whether --with-rcstart was given. if test "${with_rcstart+set}" = set; then : withval=$with_rcstart; rcstart="$withval" else rcstart="" fi # Check whether --with-rcstop was given. if test "${with_rcstop+set}" = set; then : withval=$with_rcstop; rcstop="$withval" else rcstop="" fi if test x$rcdir = x; then if test x$LAUNCHD_DIR = x -a x$SYSTEMD_DIR = x -a x$SMFMANIFESTDIR = x; then # Fall back on "init", the original service startup interface... if test -d /sbin/init.d; then # SuSE rcdir="/sbin/init.d" elif test -d /etc/init.d; then # Others rcdir="/etc" else # RedHat, NetBSD rcdir="/etc/rc.d" fi else rcdir="no" fi fi if test "x$rcstart" = x; then case "$host_os_name" in linux* | gnu*) # Linux rcstart="81" ;; sunos*) # Solaris rcstart="81" ;; *) # Others rcstart="99" ;; esac fi if test "x$rcstop" = x; then case "$host_os_name" in linux* | gnu*) # Linux rcstop="36" ;; *) # Others rcstop="00" ;; esac fi INITDIR="" INITDDIR="" RCLEVELS="$rclevels" RCSTART="$rcstart" RCSTOP="$rcstop" if test "x$rcdir" != xno; then if test "x$rclevels" = x; then INITDDIR="$rcdir" else INITDIR="$rcdir" fi fi # Check whether --with-xinetd was given. if test "${with_xinetd+set}" = set; then : withval=$with_xinetd; xinetd="$withval" else xinetd="" fi XINETD="" if test "x$xinetd" = x; then if test ! -x /sbin/launchd; then for dir in /etc/xinetd.d /usr/local/etc/xinetd.d; do if test -d $dir; then XINETD="$dir" break fi done fi elif test "x$xinetd" != xno; then XINETD="$xinetd" fi LANGUAGES="`ls -1 locale/cups_*.po 2>/dev/null | sed -e '1,$s/locale\/cups_//' -e '1,$s/\.po//' | tr '\n' ' '`" # Check whether --with-languages was given. if test "${with_languages+set}" = set; then : withval=$with_languages; case "$withval" in none | no) LANGUAGES="" ;; all) ;; *) LANGUAGES="$withval" ;; esac fi # Check whether --with-bundledir was given. if test "${with_bundledir+set}" = set; then : withval=$with_bundledir; CUPS_BUNDLEDIR="$withval" else if test "x$host_os_name" = xdarwin -a $host_os_version -ge 100; then CUPS_BUNDLEDIR="/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A" LANGUAGES="" else CUPS_BUNDLEDIR="" fi fi if test "x$CUPS_BUNDLEDIR" != x; then cat >>confdefs.h <<_ACEOF #define CUPS_BUNDLEDIR "$CUPS_BUNDLEDIR" _ACEOF fi # Check whether --with-exe_file_perm was given. if test "${with_exe_file_perm+set}" = set; then : withval=$with_exe_file_perm; CUPS_EXE_FILE_PERM="$withval" else case "$host_os_name" in linux* | gnu*) CUPS_EXE_FILE_PERM="755" ;; *) CUPS_EXE_FILE_PERM="555" ;; esac fi # Check whether --with-config_file_perm was given. if test "${with_config_file_perm+set}" = set; then : withval=$with_config_file_perm; CUPS_CONFIG_FILE_PERM="$withval" else if test "x$host_os_name" = xdarwin; then CUPS_CONFIG_FILE_PERM="644" else CUPS_CONFIG_FILE_PERM="640" fi fi cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_CONFIG_FILE_PERM 0$CUPS_CONFIG_FILE_PERM _ACEOF # Check whether --with-cupsd_file_perm was given. if test "${with_cupsd_file_perm+set}" = set; then : withval=$with_cupsd_file_perm; CUPS_CUPSD_FILE_PERM="$withval" else case "$host_os_name" in linux* | gnu*) CUPS_CUPSD_FILE_PERM="700" ;; *) CUPS_CUPSD_FILE_PERM="500" ;; esac fi # Check whether --with-log_file_perm was given. if test "${with_log_file_perm+set}" = set; then : withval=$with_log_file_perm; CUPS_LOG_FILE_PERM="$withval" else CUPS_LOG_FILE_PERM="644" fi cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_LOG_FILE_PERM 0$CUPS_LOG_FILE_PERM _ACEOF # Check whether --with-fatal_errors was given. if test "${with_fatal_errors+set}" = set; then : withval=$with_fatal_errors; CUPS_FATAL_ERRORS="$withval" else CUPS_FATAL_ERRORS="config" fi cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_FATAL_ERRORS "$CUPS_FATAL_ERRORS" _ACEOF # Check whether --with-log_level was given. if test "${with_log_level+set}" = set; then : withval=$with_log_level; CUPS_LOG_LEVEL="$withval" else CUPS_LOG_LEVEL="warn" fi cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_LOG_LEVEL "$CUPS_LOG_LEVEL" _ACEOF # Check whether --with-access_log_level was given. if test "${with_access_log_level+set}" = set; then : withval=$with_access_log_level; CUPS_ACCESS_LOG_LEVEL="$withval" else CUPS_ACCESS_LOG_LEVEL="none" fi cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_ACCESS_LOG_LEVEL "$CUPS_ACCESS_LOG_LEVEL" _ACEOF # Check whether --enable-page_logging was given. if test "${enable_page_logging+set}" = set; then : enableval=$enable_page_logging; fi if test "x$enable_page_logging" = xyes; then CUPS_PAGE_LOG_FORMAT="" else CUPS_PAGE_LOG_FORMAT="PageLogFormat" fi # Check whether --enable-browsing was given. if test "${enable_browsing+set}" = set; then : enableval=$enable_browsing; fi if test "x$enable_browsing" = xno; then CUPS_BROWSING="No" cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_BROWSING 0 _ACEOF else CUPS_BROWSING="Yes" cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_BROWSING 1 _ACEOF fi # Check whether --with-local_protocols was given. if test "${with_local_protocols+set}" = set; then : withval=$with_local_protocols; default_local_protocols="$withval" else default_local_protocols="default" fi if test x$with_local_protocols != xno; then if test "x$default_local_protocols" = "xdefault"; then if test "x$DNSSD_BACKEND" != "x"; then CUPS_BROWSE_LOCAL_PROTOCOLS="dnssd" else CUPS_BROWSE_LOCAL_PROTOCOLS="" fi else CUPS_BROWSE_LOCAL_PROTOCOLS="$default_local_protocols" fi else CUPS_BROWSE_LOCAL_PROTOCOLS="" fi cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS "$CUPS_BROWSE_LOCAL_PROTOCOLS" _ACEOF # Check whether --enable-default_shared was given. if test "${enable_default_shared+set}" = set; then : enableval=$enable_default_shared; fi if test "x$enable_default_shared" = xno; then CUPS_DEFAULT_SHARED="No" cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_DEFAULT_SHARED 0 _ACEOF else CUPS_DEFAULT_SHARED="Yes" cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_DEFAULT_SHARED 1 _ACEOF fi # Check whether --with-cups_user was given. if test "${with_cups_user+set}" = set; then : withval=$with_cups_user; CUPS_USER="$withval" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for default print user" >&5 $as_echo_n "checking for default print user... " >&6; } if test x$host_os_name = xdarwin; then if test x`id -u _lp 2>/dev/null` = x; then CUPS_USER="lp"; else CUPS_USER="_lp"; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_USER" >&5 $as_echo "$CUPS_USER" >&6; } elif test -f /etc/passwd; then CUPS_USER="" for user in lp lpd guest daemon nobody; do if test "`grep \^${user}: /etc/passwd`" != ""; then CUPS_USER="$user" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $user" >&5 $as_echo "$user" >&6; } break; fi done if test x$CUPS_USER = x; then CUPS_USER="nobody" { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi else CUPS_USER="nobody" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no password file" >&5 $as_echo "no password file" >&6; } fi fi if test "x$CUPS_USER" = "xroot" -o "x$CUPS_USER" = "x0"; then as_fn_error $? "The default user for CUPS cannot be root!" "$LINENO" 5 fi # Check whether --with-cups_group was given. if test "${with_cups_group+set}" = set; then : withval=$with_cups_group; CUPS_GROUP="$withval" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for default print group" >&5 $as_echo_n "checking for default print group... " >&6; } if test x$host_os_name = xdarwin; then if test x`id -g _lp 2>/dev/null` = x; then CUPS_GROUP="lp"; else CUPS_GROUP="_lp"; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_GROUP" >&5 $as_echo "$CUPS_GROUP" >&6; } elif test -f /etc/group; then GROUP_LIST="_lp lp nobody" CUPS_GROUP="" for group in $GROUP_LIST; do if test "`grep \^${group}: /etc/group`" != ""; then CUPS_GROUP="$group" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $group" >&5 $as_echo "$group" >&6; } break; fi done if test x$CUPS_GROUP = x; then CUPS_GROUP="nobody" { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi else CUPS_GROUP="nobody" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no group file" >&5 $as_echo "no group file" >&6; } fi fi if test "x$CUPS_GROUP" = "xroot" -o "x$CUPS_GROUP" = "xwheel" -o "x$CUPS_GROUP" = "x0"; then as_fn_error $? "The default group for CUPS cannot be root!" "$LINENO" 5 fi # Check whether --with-system_groups was given. if test "${with_system_groups+set}" = set; then : withval=$with_system_groups; CUPS_SYSTEM_GROUPS="$withval" else if test x$host_os_name = xdarwin; then CUPS_SYSTEM_GROUPS="admin" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for default system groups" >&5 $as_echo_n "checking for default system groups... " >&6; } if test -f /etc/group; then CUPS_SYSTEM_GROUPS="" GROUP_LIST="lpadmin sys system root" for group in $GROUP_LIST; do if test "`grep \^${group}: /etc/group`" != ""; then if test "x$CUPS_SYSTEM_GROUPS" = x; then CUPS_SYSTEM_GROUPS="$group" else CUPS_SYSTEM_GROUPS="$CUPS_SYSTEM_GROUPS $group" fi fi done if test "x$CUPS_SYSTEM_GROUPS" = x; then CUPS_SYSTEM_GROUPS="$GROUP_LIST" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no groups found" >&5 $as_echo "no groups found" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$CUPS_SYSTEM_GROUPS\"" >&5 $as_echo "\"$CUPS_SYSTEM_GROUPS\"" >&6; } fi else CUPS_SYSTEM_GROUPS="$GROUP_LIST" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no group file" >&5 $as_echo "no group file" >&6; } fi fi fi CUPS_PRIMARY_SYSTEM_GROUP="`echo $CUPS_SYSTEM_GROUPS | awk '{print $1}'`" for group in $CUPS_SYSTEM_GROUPS; do if test "x$CUPS_GROUP" = "x$group"; then as_fn_error $? "The default system groups cannot contain the default CUPS group!" "$LINENO" 5 fi done cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_USER "$CUPS_USER" _ACEOF cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_GROUP "$CUPS_GROUP" _ACEOF cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_SYSTEM_GROUPS "$CUPS_SYSTEM_GROUPS" _ACEOF # Check whether --with-printcap was given. if test "${with_printcap+set}" = set; then : withval=$with_printcap; default_printcap="$withval" else default_printcap="default" fi if test x$default_printcap != xno; then if test "x$default_printcap" = "xdefault"; then case $host_os_name in darwin*) if test $host_os_version -ge 90; then CUPS_DEFAULT_PRINTCAP="/Library/Preferences/org.cups.printers.plist" else CUPS_DEFAULT_PRINTCAP="/etc/printcap" fi ;; sunos*) CUPS_DEFAULT_PRINTCAP="/etc/printers.conf" ;; *) CUPS_DEFAULT_PRINTCAP="/etc/printcap" ;; esac else CUPS_DEFAULT_PRINTCAP="$default_printcap" fi else CUPS_DEFAULT_PRINTCAP="" fi cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_PRINTCAP "$CUPS_DEFAULT_PRINTCAP" _ACEOF # Check whether --with-lpdconfigfile was given. if test "${with_lpdconfigfile+set}" = set; then : withval=$with_lpdconfigfile; default_lpdconfigfile="$withval" else default_lpdconfigfile="default" fi if test x$default_lpdconfigfile != xno; then if test "x$default_lpdconfigfile" = "xdefault"; then case $host_os_name in darwin*) CUPS_DEFAULT_LPD_CONFIG_FILE="launchd:///System/Library/LaunchDaemons/org.cups.cups-lpd.plist" ;; *) if test "x$XINETD" != x; then CUPS_DEFAULT_LPD_CONFIG_FILE="xinetd://$XINETD/cups-lpd" else CUPS_DEFAULT_LPD_CONFIG_FILE="" fi ;; esac else CUPS_DEFAULT_LPD_CONFIG_FILE="$default_lpdconfigfile" fi else CUPS_DEFAULT_LPD_CONFIG_FILE="" fi cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_LPD_CONFIG_FILE "$CUPS_DEFAULT_LPD_CONFIG_FILE" _ACEOF # Check whether --with-smbconfigfile was given. if test "${with_smbconfigfile+set}" = set; then : withval=$with_smbconfigfile; default_smbconfigfile="$withval" else default_smbconfigfile="default" fi if test x$default_smbconfigfile != xno; then if test "x$default_smbconfigfile" = "xdefault"; then if test -f /etc/smb.conf; then CUPS_DEFAULT_SMB_CONFIG_FILE="samba:///etc/smb.conf" else CUPS_DEFAULT_SMB_CONFIG_FILE="" fi else CUPS_DEFAULT_SMB_CONFIG_FILE="$default_smbconfigfile" fi else CUPS_DEFAULT_SMB_CONFIG_FILE="" fi cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_SMB_CONFIG_FILE "$CUPS_DEFAULT_SMB_CONFIG_FILE" _ACEOF # Check whether --with-max-copies was given. if test "${with_max_copies+set}" = set; then : withval=$with_max_copies; CUPS_MAX_COPIES="$withval" else CUPS_MAX_COPIES="9999" fi cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_MAX_COPIES $CUPS_MAX_COPIES _ACEOF # Check whether --enable-raw_printing was given. if test "${enable_raw_printing+set}" = set; then : enableval=$enable_raw_printing; fi if test "x$enable_raw_printing" != xno; then DEFAULT_RAW_PRINTING="" else DEFAULT_RAW_PRINTING="#" fi # Check whether --with-snmp-address was given. if test "${with_snmp_address+set}" = set; then : withval=$with_snmp_address; if test "x$withval" = x; then CUPS_SNMP_ADDRESS="" else CUPS_SNMP_ADDRESS="Address $withval" fi else if test "x$host_os_name" = xdarwin; then CUPS_SNMP_ADDRESS="" else CUPS_SNMP_ADDRESS="Address @LOCAL" fi fi # Check whether --with-snmp-community was given. if test "${with_snmp_community+set}" = set; then : withval=$with_snmp_community; CUPS_SNMP_COMMUNITY="Community $withval" else CUPS_SNMP_COMMUNITY="Community public" fi # Check whether --with-ipp-port was given. if test "${with_ipp_port+set}" = set; then : withval=$with_ipp_port; DEFAULT_IPP_PORT="$withval" else DEFAULT_IPP_PORT="631" fi cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_IPP_PORT $DEFAULT_IPP_PORT _ACEOF # Check whether --enable-webif was given. if test "${enable_webif+set}" = set; then : enableval=$enable_webif; fi case "x$enable_webif" in xno) CUPS_WEBIF=No CUPS_DEFAULT_WEBIF=0 ;; xyes) CUPS_WEBIF=Yes CUPS_DEFAULT_WEBIF=1 ;; *) if test $host_os_name = darwin; then CUPS_WEBIF=No CUPS_DEFAULT_WEBIF=0 else CUPS_WEBIF=Yes CUPS_DEFAULT_WEBIF=1 fi ;; esac cat >>confdefs.h <<_ACEOF #define CUPS_DEFAULT_WEBIF $CUPS_DEFAULT_WEBIF _ACEOF # Check whether --with-java was given. if test "${with_java+set}" = set; then : withval=$with_java; CUPS_JAVA="$withval" else CUPS_JAVA="auto" fi if test "x$CUPS_JAVA" = xauto; then # Extract the first word of "java", so it can be a program name with args. set dummy java; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_JAVA+:} false; then : $as_echo_n "(cached) " >&6 else case $JAVA in [\\/]* | ?:[\\/]*) ac_cv_path_JAVA="$JAVA" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_JAVA="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi JAVA=$ac_cv_path_JAVA if test -n "$JAVA"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5 $as_echo "$JAVA" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi CUPS_JAVA="$JAVA" elif test "x$CUPS_JAVA" = xno; then CUPS_JAVA="" fi cat >>confdefs.h <<_ACEOF #define CUPS_JAVA "$CUPS_JAVA" _ACEOF if test "x$CUPS_JAVA" != x; then $as_echo "#define HAVE_JAVA 1" >>confdefs.h fi # Check whether --with-perl was given. if test "${with_perl+set}" = set; then : withval=$with_perl; CUPS_PERL="$withval" else CUPS_PERL="auto" fi if test "x$CUPS_PERL" = xauto; then # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi CUPS_PERL="$PERL" elif test "x$CUPS_PERL" = xno; then CUPS_PERL="" fi cat >>confdefs.h <<_ACEOF #define CUPS_PERL "$CUPS_PERL" _ACEOF if test "x$CUPS_PERL" != x; then $as_echo "#define HAVE_PERL 1" >>confdefs.h fi # Check whether --with-php was given. if test "${with_php+set}" = set; then : withval=$with_php; CUPS_PHP="$withval" else CUPS_PHP="auto" fi if test "x$CUPS_PHP" = xauto; then # Extract the first word of "php-cgi", so it can be a program name with args. set dummy php-cgi; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PHPCGI+:} false; then : $as_echo_n "(cached) " >&6 else case $PHPCGI in [\\/]* | ?:[\\/]*) ac_cv_path_PHPCGI="$PHPCGI" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PHPCGI="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PHPCGI=$ac_cv_path_PHPCGI if test -n "$PHPCGI"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PHPCGI" >&5 $as_echo "$PHPCGI" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$PHPCGI" = x; then # Extract the first word of "php", so it can be a program name with args. set dummy php; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PHP+:} false; then : $as_echo_n "(cached) " >&6 else case $PHP in [\\/]* | ?:[\\/]*) ac_cv_path_PHP="$PHP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PHP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PHP=$ac_cv_path_PHP if test -n "$PHP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PHP" >&5 $as_echo "$PHP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi CUPS_PHP="$PHP" else CUPS_PHP="$PHPCGI" fi elif test "x$CUPS_PHP" = xno; then CUPS_PHP="" fi cat >>confdefs.h <<_ACEOF #define CUPS_PHP "$CUPS_PHP" _ACEOF if test "x$CUPS_PHP" = x; then CUPS_PHP="no" else $as_echo "#define HAVE_PHP 1" >>confdefs.h fi # Check whether --with-python was given. if test "${with_python+set}" = set; then : withval=$with_python; CUPS_PYTHON="$withval" else CUPS_PYTHON="auto" fi if test "x$CUPS_PYTHON" = xauto; then # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi CUPS_PYTHON="$PYTHON" elif test "x$CUPS_PYTHON" = xno; then CUPS_PYTHON="" fi cat >>confdefs.h <<_ACEOF #define CUPS_PYTHON "$CUPS_PYTHON" _ACEOF if test "x$CUPS_PYTHON" != x; then $as_echo "#define HAVE_PYTHON 1" >>confdefs.h fi INSTALL_LANGUAGES="" UNINSTALL_LANGUAGES="" LANGFILES="" if test "x$LANGUAGES" != x; then INSTALL_LANGUAGES="install-languages" UNINSTALL_LANGUAGES="uninstall-languages" for lang in $LANGUAGES; do if test -f doc/$lang/index.html.in; then LANGFILES="$LANGFILES doc/$lang/index.html" fi if test -f templates/$lang/header.tmpl.in; then LANGFILES="$LANGFILES templates/$lang/header.tmpl" fi done elif test "x$CUPS_BUNDLEDIR" != x; then INSTALL_LANGUAGES="install-langbundle" UNINSTALL_LANGUAGES="uninstall-langbundle" fi ac_config_files="$ac_config_files Makedefs conf/cups-files.conf conf/cupsd.conf conf/mime.convs conf/pam.std conf/snmp.conf cups-config desktop/cups.desktop doc/index.html man/client.conf.man man/cups-files.conf.man man/cups-lpd.man man/cups-snmp.man man/cupsaddsmb.man man/cupsd.conf.man man/cupsd.man man/lpoptions.man scheduler/cups-lpd.xinetd scheduler/cups.sh scheduler/cups.xml scheduler/org.cups.cups-lpd.plist scheduler/org.cups.cups-lpdAT.service scheduler/org.cups.cupsd.path scheduler/org.cups.cupsd.service scheduler/org.cups.cupsd.socket templates/header.tmpl packaging/cups.list $LANGFILES" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by CUPS $as_me 2.2.7, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to . CUPS home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ CUPS config.status 2.2.7 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makedefs") CONFIG_FILES="$CONFIG_FILES Makedefs" ;; "conf/cups-files.conf") CONFIG_FILES="$CONFIG_FILES conf/cups-files.conf" ;; "conf/cupsd.conf") CONFIG_FILES="$CONFIG_FILES conf/cupsd.conf" ;; "conf/mime.convs") CONFIG_FILES="$CONFIG_FILES conf/mime.convs" ;; "conf/pam.std") CONFIG_FILES="$CONFIG_FILES conf/pam.std" ;; "conf/snmp.conf") CONFIG_FILES="$CONFIG_FILES conf/snmp.conf" ;; "cups-config") CONFIG_FILES="$CONFIG_FILES cups-config" ;; "desktop/cups.desktop") CONFIG_FILES="$CONFIG_FILES desktop/cups.desktop" ;; "doc/index.html") CONFIG_FILES="$CONFIG_FILES doc/index.html" ;; "man/client.conf.man") CONFIG_FILES="$CONFIG_FILES man/client.conf.man" ;; "man/cups-files.conf.man") CONFIG_FILES="$CONFIG_FILES man/cups-files.conf.man" ;; "man/cups-lpd.man") CONFIG_FILES="$CONFIG_FILES man/cups-lpd.man" ;; "man/cups-snmp.man") CONFIG_FILES="$CONFIG_FILES man/cups-snmp.man" ;; "man/cupsaddsmb.man") CONFIG_FILES="$CONFIG_FILES man/cupsaddsmb.man" ;; "man/cupsd.conf.man") CONFIG_FILES="$CONFIG_FILES man/cupsd.conf.man" ;; "man/cupsd.man") CONFIG_FILES="$CONFIG_FILES man/cupsd.man" ;; "man/lpoptions.man") CONFIG_FILES="$CONFIG_FILES man/lpoptions.man" ;; "scheduler/cups-lpd.xinetd") CONFIG_FILES="$CONFIG_FILES scheduler/cups-lpd.xinetd" ;; "scheduler/cups.sh") CONFIG_FILES="$CONFIG_FILES scheduler/cups.sh" ;; "scheduler/cups.xml") CONFIG_FILES="$CONFIG_FILES scheduler/cups.xml" ;; "scheduler/org.cups.cups-lpd.plist") CONFIG_FILES="$CONFIG_FILES scheduler/org.cups.cups-lpd.plist" ;; "scheduler/org.cups.cups-lpdAT.service") CONFIG_FILES="$CONFIG_FILES scheduler/org.cups.cups-lpdAT.service" ;; "scheduler/org.cups.cupsd.path") CONFIG_FILES="$CONFIG_FILES scheduler/org.cups.cupsd.path" ;; "scheduler/org.cups.cupsd.service") CONFIG_FILES="$CONFIG_FILES scheduler/org.cups.cupsd.service" ;; "scheduler/org.cups.cupsd.socket") CONFIG_FILES="$CONFIG_FILES scheduler/org.cups.cupsd.socket" ;; "templates/header.tmpl") CONFIG_FILES="$CONFIG_FILES templates/header.tmpl" ;; "packaging/cups.list") CONFIG_FILES="$CONFIG_FILES packaging/cups.list" ;; "$LANGFILES") CONFIG_FILES="$CONFIG_FILES $LANGFILES" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi chmod +x cups-config cups-2.2.7/configure.ac000664 000765 000024 00000005247 13255074424 015451 0ustar00msweetstaff000000 000000 dnl dnl Configuration script for CUPS. dnl dnl Copyright 2007-2018 by Apple Inc. dnl Copyright 1997-2007 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl dnl We need at least autoconf 2.60... AC_PREREQ(2.60) dnl Package name and version... AC_INIT([CUPS], [2.2.7], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/]) sinclude(config-scripts/cups-opsys.m4) sinclude(config-scripts/cups-common.m4) sinclude(config-scripts/cups-directories.m4) sinclude(config-scripts/cups-manpages.m4) sinclude(config-scripts/cups-sharedlibs.m4) sinclude(config-scripts/cups-libtool.m4) sinclude(config-scripts/cups-compiler.m4) sinclude(config-scripts/cups-network.m4) sinclude(config-scripts/cups-poll.m4) sinclude(config-scripts/cups-gssapi.m4) sinclude(config-scripts/cups-threads.m4) sinclude(config-scripts/cups-ssl.m4) sinclude(config-scripts/cups-pam.m4) sinclude(config-scripts/cups-largefile.m4) sinclude(config-scripts/cups-dnssd.m4) sinclude(config-scripts/cups-startup.m4) sinclude(config-scripts/cups-defaults.m4) sinclude(config-scripts/cups-scripting.m4) INSTALL_LANGUAGES="" UNINSTALL_LANGUAGES="" LANGFILES="" if test "x$LANGUAGES" != x; then INSTALL_LANGUAGES="install-languages" UNINSTALL_LANGUAGES="uninstall-languages" for lang in $LANGUAGES; do if test -f doc/$lang/index.html.in; then LANGFILES="$LANGFILES doc/$lang/index.html" fi if test -f templates/$lang/header.tmpl.in; then LANGFILES="$LANGFILES templates/$lang/header.tmpl" fi done elif test "x$CUPS_BUNDLEDIR" != x; then INSTALL_LANGUAGES="install-langbundle" UNINSTALL_LANGUAGES="uninstall-langbundle" fi AC_SUBST(INSTALL_LANGUAGES) AC_SUBST(UNINSTALL_LANGUAGES) AC_OUTPUT(Makedefs conf/cups-files.conf conf/cupsd.conf conf/mime.convs conf/pam.std conf/snmp.conf cups-config desktop/cups.desktop doc/index.html man/client.conf.man man/cups-files.conf.man man/cups-lpd.man man/cups-snmp.man man/cupsaddsmb.man man/cupsd.conf.man man/cupsd.man man/lpoptions.man scheduler/cups-lpd.xinetd scheduler/cups.sh scheduler/cups.xml scheduler/org.cups.cups-lpd.plist scheduler/org.cups.cups-lpdAT.service scheduler/org.cups.cupsd.path scheduler/org.cups.cupsd.service scheduler/org.cups.cupsd.socket templates/header.tmpl packaging/cups.list $LANGFILES) chmod +x cups-config cups-2.2.7/CONTRIBUTING.md000664 000765 000024 00000055375 13255074424 015423 0ustar00msweetstaff000000 000000 # Contributing to CUPS CUPS is developed by Apple Inc. and distributed as open source software under a combination of GNU GPL2 and GNU LGPL2 licenses with exceptions to allow developers on Apple's operating systems to develop CUPS-based software under alternate license terms. Significant contributions to CUPS must be licensed to Apple using the Apple Contributor Agreement: https://www.cups.org/AppleContributorAgreement_2011-03-10.pdf Contributions should be submitted as attachments to bug reports on the CUPS web site. Changes to existing source files should be submitted as unified diffs (both Subversion and Git produce this format by default) while new source files should be provided as-is or in an archive. Github pull requests can also be used to submit changes. ## HOW TO CONTACT THE DEVELOPERS The CUPS mailing lists are the primary means of asking questions and informally discussing issues and feature requests with the CUPS developers and other experienced CUPS users and developers. The "cups" mailing list is intended for CUPS usage questions and new software announcements while the "cups-devel" mailing list provides a forum for CUPS developers and monitoring new bugs. ## INTERFACES CUPS interfaces, including the C APIs and command-line arguments, environment variables, configuration files, and output format, are stable across patch versions and are generally backwards-compatible with interfaces used in prior major and minor versions. However, program interfaces such as those used by the scheduler to run filter, port monitor, and backend processes for job processing should only be considered stable from the point of view of a filter, port monitor, or backend. Software that simulates the scheduler in order to run those programs outside of CUPS must necessarily be updated when the corresponding interface is changed in a subsequent CUPS release, otherwise undefined behavior can occur. CUPS C APIs starting with an underscore (_) are considered to be private to CUPS and are not subject to the normal guarantees of stability between CUPS releases and must never be used in non-CUPS source code. Similarly, configuration and state files written by CUPS are considered private if a corresponding man page is not provided with the CUPS release. Never rely on undocumented files or formats when developing software for CUPS. Always use a published C API to access data stored in a file to avoid compatibility problems in the future. ## BUILD SYSTEM The CUPS build system uses GNU autoconf to tailor the library to the local operating system. Project files for the current release of Microsoft Visual Studio are also provided for Microsoft Windows®. To improve portability, makefiles must not make use of features unique to GNU make. See the MAKEFILE GUIDELINES section for a description of the allowed make features and makefile guidelines. Additional GNU build programs such as GNU automake and GNU libtool must not be used. GNU automake produces non-portable makefiles which depend on GNU- specific extensions, and GNU libtool is not portable or reliable enough for CUPS. ## VERSION NUMBERING CUPS uses a three-part version number separated by periods to represent the major, minor, and patch release numbers. Major release numbers indicate large design changes or backwards-incompatible changes to the CUPS API or CUPS Imaging API. Minor release numbers indicate new features and other smaller changes which are backwards-compatible with previous CUPS releases. Patch numbers indicate bug fixes to the previous feature or patch release. > Note: > > When we talk about compatibility, we are talking about binary compatibility > for public APIs and output format compatibility for program interfaces. > Changes to configuration file formats or the default behavior of programs > are not generally considered incompatible as the upgrade process can > normally address such changes gracefully. Production releases use the plain version numbers: MAJOR.MINOR.PATCH 1.0.0 ... 1.1.0 ... 1.1.23 ... 2.0.0 ... 2.1.0 2.1.1 2.1.2 2.1.3 The first production release in a MAJOR.MINOR series (MAJOR.MINOR.0) is called a feature release. Feature releases are the only releases that may contain new features. Subsequent production releases in a MAJOR.MINOR series may only contain bug fixes. Beta-test releases are identified by appending the letter B to the major and minor version numbers followed by the beta release number: MAJOR.MINORbNUMBER 2.2b1 Release candidates are identified by appending the letters RC to the major and minor version numbers followed by the release candidate number: MAJOR.MINORrcNUMBER 2.2rc1 ## CODING GUIDELINES Contributed source code must follow the guidelines below. While the examples are for C and C++ source files, source code for other languages should conform to the same guidelines as allowed by the language. ### SOURCE FILES All source files names must be 16 characters or less in length to ensure compatibility with older UNIX filesystems. Source files containing functions have an extension of ".c" for C and ".cxx" for C++ source files. All other "include" files have an extension of ".h". Tabs are set to 8 characters or columns. > Note: > > The ".cxx" extension is used because it is the only common C++ extension > between Linux, macOS, UNIX, and Windows. The top of each source file contains a header giving the purpose or nature of the source file and the copyright and licensing notice: /* * Description of file contents. * * Copyright 2016 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * file is missing or damaged, see the license at "http://www.cups.org/". */ For source files that are subject to the Apple OS-Developed Software exception, the following additional comment appears after the contact information: * This file is subject to the Apple OS-Developed Software exception. ### HEADER FILES All public header files must include the "versioning.h" header file, or a header that does so. Function declarations are then "decorated" with the correct _CUPS_API_major_minor macro to define its availability based on the build environment, for example: extern int cupsDoThis(int foo, int bar) _CUPS_API_2_2; Private API header files must be named with the suffix "-private", for example the "cups.h" header file defines all of the public CUPS APIs while the "cups-private.h" header file defines all of the private CUPS APIs as well. Typically a private API header file will include the corresponding public API header file. ### COMMENTS All source code utilizes block comments within functions to describe the operations being performed by a group of statements; avoid putting a comment per line unless absolutely necessary, and then consider refactoring the code so that it is not necessary. C source files use the block comment format ("/* comment */") since many vendor C compilers still do not support C99/C++ comments ("// comment"): /* * Clear the state array before we begin... */ for (i = 0; i < (sizeof(array) / sizeof(sizeof(array[0])); i ++) array[i] = CUPS_STATE_IDLE; /* * Wait for state changes on another thread... */ do { for (i = 0; i < (sizeof(array) / sizeof(sizeof(array[0])); i ++) if (array[i] != CUPS_STATE_IDLE) break; if (i == (sizeof(array) / sizeof(array[0]))) sleep(1); } while (i == (sizeof(array) / sizeof(array[0]))); ### INDENTATION All code blocks enclosed by brackets begin with the opening brace on a new line. The code then follows starting on a new line after the brace and is indented 2 spaces. The closing brace is then placed on a new line following the code at the original indentation: { int i; /* Looping var */ /* * Process foobar values from 0 to 999... */ for (i = 0; i < 1000; i ++) { do_this(i); do_that(i); } } Single-line statements following "do", "else", "for", "if", and "while" are indented 2 spaces as well. Blocks of code in a "switch" block are indented 4 spaces after each "case" and "default" case: switch (array[i]) { case CUPS_STATE_IDLE : do_this(i); do_that(i); break; default : do_nothing(i); break; } ### SPACING A space follows each reserved word such as "if", "while", etc. Spaces are not inserted between a function name and the arguments in parenthesis. ### RETURN VALUES Parenthesis surround values returned from a function: return (CUPS_STATE_IDLE); ### FUNCTIONS Functions with a global scope have a lowercase prefix followed by capitalized words, e.g., "cupsDoThis", "cupsDoThat", "cupsDoSomethingElse", etc. Private global functions begin with a leading underscore, e.g., "\_cupsDoThis", "\_cupsDoThat", etc. Functions with a local scope are declared "static" with lowercase names and underscores between words, e.g., "do\_this", "do\_that", "do\_something\_else", etc. Each function begins with a comment header describing what the function does, the possible input limits (if any), the possible output values (if any), and any special information needed: /* * 'do_this()' - Compute y = this(x). * * Notes: none. */ static float /* O - Inverse power value, 0.0 <= y <= 1.1 */ do_this(float x) /* I - Power value (0.0 <= x <= 1.1) */ { ... return (y); } Return/output values are indicated using an "O" prefix, input values are indicated using the "I" prefix, and values that are both input and output use the "IO" prefix for the corresponding in-line comment. The Mini-XML documentation generator also understands the following special text in the function description comment: @deprecated@ - Marks the function as deprecated (not recommended for new development and scheduled for removal) @since CUPS version@ - Marks the function as new in the specified version of CUPS. @private@ - Marks the function as private (same as starting the function name with an underscore) ### VARIABLES Variables with a global scope are capitalized, e.g., "ThisVariable", "ThatVariable", "ThisStateVariable", etc. Globals in CUPS libraries are either part of the per-thread global values managed by the "\_cupsGlobals()" function or are suitably protected for concurrent access. Global variables should be replaced by function arguments whenever possible. Variables with a local scope are lowercase with underscores between words, e.g., "this\_variable", "that\_variable", etc. Any "local global" variables shared by functions within a source file are declared "static". As for global variables, local static variables are suitably protected for concurrent access. Each variable is declared on a separate line and is immediately followed by a comment block describing the variable: int ThisVariable; /* The current state of this */ static int that_variable; /* The current state of that */ ### TYPES All type names are lowercase with underscores between words and "\_t" appended to the end of the name, e.g., "cups\_this\_type\_t", "cups\_that\_type\_t", etc. Type names start with a prefix, typically "cups" or the name of the program, to avoid conflicts with system types. Private type names start with an underscore, e.g., "\_cups\_this\_t", "\_cups\_that\_t", etc. Each type has a comment block immediately after the typedef: typedef int cups_this_type_t; /* This type is for CUPS foobar options. */ ### STRUCTURES All structure names are lowercase with underscores between words and "\_s" appended to the end of the name, e.g., "cups\_this\_s", "cups\_that\_s", etc. Structure names start with a prefix, typically "cups" or the name of the program, to avoid conflicts with system types. Private structure names start with an underscore, e.g., "\_cups\_this\_s", "\_cups\_that\_s", etc. Each structure has a comment block immediately after the struct and each member is documented similar to the variable naming policy above: struct cups_this_struct_s /* This structure is for CUPS foobar options. */ { int this_member; /* Current state for this */ int that_member; /* Current state for that */ }; ### CONSTANTS All constant names are uppercase with underscores between words, e.g., "CUPS\_THIS\_CONSTANT", "CUPS\_THAT\_CONSTANT", etc. Constants begin with an uppercase prefix, typically "CUPS" or the program name. Private constants start with an underscore, e.g., "\_CUPS\_THIS\_CONSTANT", "\_CUPS\_THAT\_CONSTANT", etc. Typed enumerations should be used whenever possible to allow for type checking by the compiler. Comment blocks immediately follow each constant: typedef enum cups_tray_e /* Tray enumerations */ { CUPS_TRAY_THIS, /* This tray */ CUPS_TRAY_THAT /* That tray */ } cups_tray_t; ## MAKEFILE GUIDELINES The following is a guide to the makefile-based build system used by CUPS. These standards have been developed over the years to allow CUPS to be built on as many systems and environments as possible. ### GENERAL ORGANIZATION The CUPS source code is organized functionally into a top-level makefile, include file, and subdirectories each with their own makefile and dependencies files. The ".in" files are template files for the autoconf software and are used to generate a static version of the corresponding file. ### MAKEFILE DOCUMENTATION Each makefile starts with the standard CUPS header containing the description of the file, and CUPS copyright and license notice: # # Makefile for ... # # Copyright 2016 by Apple Inc. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # ### PORTABLE MAKEFILE CONSTRUCTION CUPS uses a common subset of make program syntax to ensure that the software can be compiled "out of the box" on as many systems as possible. The following is a list of assumptions we follow when constructing makefiles: - Targets; we assume that the make program supports the notion of simple targets of the form "name:" that perform tab-indented commands that follow the target, e.g.: target: TAB target commands - Dependencies; we assume that the make program supports recursive dependencies on targets, e.g.: target: foo bar TAB target commands foo: bla TAB foo commands bar: TAB bar commands bla: TAB bla commands - Variable Definition; we assume that the make program supports variable definition on the command-line or in the makefile using the following form: name=value - Variable Substitution; we assume that the make program supports variable substitution using the following forms: - $(name); substitutes the value of "name", - $(name:.old=.new); substitutes the value of "name" with the filename extension ".old" changed to ".new", - $(MAKEFLAGS); substitutes the command-line options passed to the program without the leading hyphen (-), - $$; substitutes a single $ character, - $<; substitutes the current source file or dependency, and - $@; substitutes the current target name. - Suffixes; we assume that the make program supports filename suffixes with assumed dependencies, e.g.: .SUFFIXES: .c .o .c.o: TAB $(CC) $(CFLAGS) -o $@ -c $< - Include Files; we assume that the make program supports the include directive, e.g.: include ../Makedefs include Dependencies - Comments; we assume that comments begin with a # character and proceed to the end of the current line. - Line Length; we assume that there is no practical limit to the length of lines. - Continuation of long lines; we assume that the \ character may be placed at the end of a line to concatenate two or more lines in a makefile to form a single long line. - Shell; we assume a POSIX-compatible shell is present on the build system. ### STANDARD VARIABLES The following variables are defined in the "Makedefs" file generated by the autoconf software: - ALL_CFLAGS; the combined C compiler options, - ALL_CXXFLAGS; the combined C++ compiler options, - AMANDIR; the administrative man page installation directory (section 8/1m depending on the platform), - AR; the library archiver command, - ARFLAGS; options for the library archiver command, - AWK; the local awk command, - BINDIR; the binary installation directory, - BUILDROOT; optional installation prefix (defaults to DSTROOT), - CC; the C compiler command, - CFLAGS; options for the C compiler command, - CHMOD; the chmod command, - CXX; the C++ compiler command, - CXXFLAGS; options for the C++ compiler command, - DATADIR; the data file installation directory, - DSO; the C shared library building command, - DSOXX; the C++ shared library building command, - DSOFLAGS; options for the shared library building command, - INCLUDEDIR; the public header file installation directory, - INSTALL; the install command, - INSTALL_BIN; the program installation command, - INSTALL_COMPDATA; the compressed data file installation command, - INSTALL_CONFIG; the configuration file installation command, - INSTALL_DATA; the data file installation command, - INSTALL_DIR; the directory installation command, - INSTALL_LIB; the library installation command, - INSTALL_MAN; the documentation installation command, - INSTALL_SCRIPT; the shell script installation command, - LD; the linker command, - LDFLAGS; options for the linker, - LIBDIR; the library installation directory, - LIBS; libraries for all programs, - LN; the ln command, - MAN1EXT; extension for man pages in section 1, - MAN3EXT; extension for man pages in section 3, - MAN5EXT; extension for man pages in section 5, - MAN7EXT; extension for man pages in section 7, - MAN8DIR; subdirectory for man pages in section 8, - MAN8EXT; extension for man pages in section 8, - MANDIR; the man page installation directory, - OPTIM; common compiler optimization options, - PRIVATEINCLUDE; the private header file installation directory, - RM; the rm command, - SHELL; the sh (POSIX shell) command, - STRIP; the strip command, - srcdir; the source directory. ### STANDARD TARGETS The following standard targets are defined in each makefile: - all; creates all target programs, libraries, and documentation files, - clean; removes all target programs libraries, documentation files, and object files, - depend; generates automatic dependencies for any C or C++ source files (also see "DEPENDENCIES"), - distclean; removes autoconf-generated files in addition to those removed by the "clean" target, - install; installs all distribution files in their corresponding locations (also see "INSTALL/UNINSTALL SUPPORT"), - install-data; installs all data files in their corresponding locations (also see "INSTALL/UNINSTALL SUPPORT"), - install-exec; installs all executable files in their corresponding locations (also see "INSTALL/UNINSTALL SUPPORT"), - install-headers; installs all include files in their corresponding locations (also see "INSTALL/UNINSTALL SUPPORT"), - install-libs; installs all library files in their corresponding locations (also see "INSTALL/UNINSTALL SUPPORT"), and - uninstall; removes all distribution files from their corresponding locations (also see "INSTALL/UNINSTALL SUPPORT"). ### OBJECT FILES Object files (the result of compiling a C or C++ source file) have the extension ".o". ### PROGRAMS Program files are the result of linking object files and libraries together to form an executable file. A typical program target looks like: program: $(OBJS) TAB echo Linking $@... TAB $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) ### STATIC LIBRARIES Static libraries have a prefix of "lib" and the extension ".a". A typical static library target looks like: libname.a: $(OBJECTS) TAB echo Creating $@... TAB $(RM) $@ TAB $(AR) $(ARFLAGS) $@ $(OBJECTS) TAB $(RANLIB) $@ ### SHARED LIBRARIES Shared libraries have a prefix of "lib" and the extension ".dylib" or ".so" depending on the operating system. A typical shared library is composed of several targets that look like: libname.so: $(OBJECTS) TAB echo $(DSOCOMMAND) libname.so.$(DSOVERSION) ... TAB $(DSOCOMMAND) libname.so.$(DSOVERSION) $(OBJECTS) TAB $(RM) libname.so libname.so.$(DSOMAJOR) TAB $(LN) libname.so.$(DSOVERSION) libname.so.$(DSOMAJOR) TAB $(LN) libname.so.$(DSOVERSION) libname.so libname.dylib: $(OBJECTS) TAB echo $(DSOCOMMAND) libname.$(DSOVERSION).dylib ... TAB $(DSOCOMMAND) libname.$(DSOVERSION).dylib \ TAB TAB -install_name $(libdir)/libname.$(DSOMAJOR).dylib \ TAB TAB -current_version libname.$(DSOVERSION).dylib \ TAB TAB -compatibility_version $(DSOMAJOR).0 \ TAB TAB $(OBJECTS) $(LIBS) TAB $(RM) libname.dylib TAB $(RM) libname.$(DSOMAJOR).dylib TAB $(LN) libname.$(DSOVERSION).dylib libname.$(DSOMAJOR).dylib TAB $(LN) libname.$(DSOVERSION).dylib libname.dylib ### DEPENDENCIES Static dependencies are expressed in each makefile following the target, for example: foo: bar Static dependencies are only used when it is not possible to automatically generate them. Automatic dependencies are stored in a file named "Dependencies" and included at the end of the makefile. The following "depend" target rule is used to create the automatic dependencies: depend: TAB $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies We regenerate the automatic dependencies on an macOS system and express any non-macOS dependencies statically in the makefile. ### INSTALL/UNINSTALL SUPPORT All makefiles contains install and uninstall rules which install or remove the corresponding software. These rules must use the $(BUILDROOT) variable as a prefix to any installation directory so that CUPS can be installed in a temporary location for packaging by programs like rpmbuild. The $(INSTALL\_BIN), $(INSTALL\_COMPDATA), $(INSTALL\_CONFIG), $(INSTALL\_DATA), $(INSTALL\_DIR), $(INSTALL\_LIB), $(INSTALL\_MAN), and $(INSTALL\_SCRIPT) variables must be used when installing files so that the proper ownership and permissions are set on the installed files. The $(RANLIB) command must be run on any static libraries after installation since the symbol table is invalidated when the library is copied on some platforms. cups-2.2.7/CREDITS.md000664 000765 000024 00000005731 13255074424 014600 0ustar00msweetstaff000000 000000 CREDITS - 2017-05-01 ==================== Few projects are completed by one person, and CUPS is no exception. We'd like to thank the following individuals for their contributions: Niklas 'Nille' Åkerström - Swedish localization. Nathaniel Barbour - Lots of testing and feedback. N. Becker - setsid(). Philippe Combes - French localization and buttons script. Jean-Eric Cuendet - GhostScript filters for CUPS. Van Dang - HTTP and IPP policeman. L. Peter Deutsch - MD5 code. Dr. ZP Han - setgid()/setuid(). Guy Harris - *BSD shared libraries and lots of other fixes. Bjoern Jacke - I18N stuff. Wang Jian - CUPS RPM corrections. Roderick Johnstone - Beta tester of the millenium. Till Kamppeter - Bug fixes, beta testing, evangelism. Tomohiro Kato - Japanese localization. Kiko - Bug fixes. Sergey V. Kovalyov - ESP Print Pro and CUPS beta tester. Marek Laane - Estonian translation. Iñaki Larrañaga - Basque localization. Mark Lawrence - Microsoft interoperability testing. Jeff Licquia - Bug fixes, beta testing, evangelism. Jason McMullan - Original CUPS RPM distributions. Àngel Mompó - Catalan localization. Wes Morgan - *BSD fixes. Kenshi Muto - Japanese localization, patches, and testing. Brian Norris - Upstart support. Daniel Nylander - Swedish localization. Naruiko Ogasawara - Japanese localization. Giulio Orsero - Bug fixes and testing. Michal Osowiecki - Polish localization. Citra Paska - Indonesian localization. Kurt Pfeifle - Bug fixes, beta testing, evangelism. Vincenzo Reale - Italian localization. Petter Reinholdtsen - HP-UX compiler stuff. Juan Pablo González Riopedre - Spanish localization. Giovanni Scafora - Italian localization. Joachim Schwender - German localization. Opher Shachar - Hebrew localization. Stuart Stevens - HP JetDirect IPP information. Andrea Suatoni - IRIX desktop integration and testing. Teppo Turliainen - Finnish localization. Tim Waugh - Lots of patches, testing, and Linux integration. Yugami - LDAP browsing support. If I've missed someone, please let me know by sending an email to "msweet@apple.com". cups-2.2.7/cups/000775 000765 000024 00000000000 13255074424 014125 5ustar00msweetstaff000000 000000 cups-2.2.7/cups-config.in000775 000765 000024 00000005633 13255074424 015732 0ustar00msweetstaff000000 000000 #!/bin/sh # # CUPS configuration utility. # # Copyright 2007-2016 by Apple Inc. # Copyright 2001-2006 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # VERSION="@CUPS_VERSION@" APIVERSION="2.2" BUILD="@CUPS_BUILD@" prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ includedir=@includedir@ libdir=@libdir@ imagelibdir=@libdir@ datarootdir=@datadir@ datadir=@datadir@ sysconfdir=@sysconfdir@ cups_datadir=@CUPS_DATADIR@ cups_serverbin=@CUPS_SERVERBIN@ cups_serverroot=@CUPS_SERVERROOT@ INSTALLSTATIC=@INSTALLSTATIC@ # flags for C++ compiler: CFLAGS="" LDFLAGS="@EXPORT_LDFLAGS@" LIBS="@LIBGSSAPI@ @EXPORT_SSLLIBS@ @LIBZ@ @LIBS@" # Check for local invocation... selfdir=`dirname $0` if test -f "$selfdir/cups/cups.h"; then CFLAGS="-I$selfdir" LDFLAGS="-L$selfdir/cups -L$selfdir/filter $LDFLAGS" libdir="$selfdir/cups" imagelibdir="$selfdir/filter" else if test $includedir != /usr/include; then CFLAGS="$CFLAGS -I$includedir" fi if test $libdir != /usr/lib -a $libdir != /usr/lib32 -a $libdir != /usr/lib64; then LDFLAGS="$LDFLAGS -L$libdir" fi fi usage () { echo "Usage: cups-config --api-version" echo " cups-config --build" echo " cups-config --cflags" echo " cups-config --datadir" echo " cups-config --help" echo " cups-config --ldflags" echo " cups-config [--image] [--static] --libs" echo " cups-config --serverbin" echo " cups-config --serverroot" echo " cups-config --version" exit $1 } if test $# -eq 0; then usage 1 fi # Parse command line options static=no image=no while test $# -gt 0; do case $1 in --api-version) echo $APIVERSION ;; --build) echo $BUILD ;; --cflags) echo $CFLAGS ;; --datadir) echo $cups_datadir ;; --help) usage 0 ;; --image) image=yes ;; --ldflags) echo $LDFLAGS ;; --libs) if test $static = no; then libs="@EXTLINKCUPS@ $LIBS"; if test $image = yes; then libs="@EXTLINKCUPSIMAGE@ $libs" fi else libs="$libdir/libcups.a $LIBS"; if test $image = yes; then libs="$libdir/libcupsimage.a $libs" fi fi echo $libs ;; --serverbin) echo $cups_serverbin ;; --serverroot) echo $cups_serverroot ;; --static) if test -z "$INSTALLSTATIC"; then echo "WARNING: Static libraries not installed!" >&2 else static=yes fi ;; --version) echo $VERSION ;; *) usage 1 ;; esac shift done cups-2.2.7/data/000775 000765 000024 00000000000 13255074424 014064 5ustar00msweetstaff000000 000000 cups-2.2.7/desktop/000775 000765 000024 00000000000 13255074424 014624 5ustar00msweetstaff000000 000000 cups-2.2.7/doc/000775 000765 000024 00000000000 13255074424 013720 5ustar00msweetstaff000000 000000 cups-2.2.7/examples/000775 000765 000024 00000000000 13255074424 014771 5ustar00msweetstaff000000 000000 cups-2.2.7/filter/000775 000765 000024 00000000000 13255074424 014440 5ustar00msweetstaff000000 000000 cups-2.2.7/install-sh000775 000765 000024 00000012704 13255074424 015163 0ustar00msweetstaff000000 000000 #!/bin/sh # # Install a program, script, or datafile. # # Copyright 2008-2012 by Apple Inc. # # This script is not compatible with BSD (or any other) install program, as it # allows owner and group changes to fail with a warning and makes sure that the # destination directory permissions are as specified - BSD install and the # original X11 install script did not change permissions of existing # directories. It also does not support the transform options since CUPS does # not use them... # # Original script from X11R5 (mit/util/scripts/install.sh) # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # Force umask to 022... umask 022 # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" gzipprog="${GZIPPROG-gzip}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" gzipcp() { # gzipcp from to $gzipprog -9 <"$1" >"$2" } while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue ;; -d) dir_arg=true shift continue ;; -m) chmodcmd="$chmodprog $2" shift shift continue ;; -o) chowncmd="$chownprog $2" shift shift continue ;; -g) chgrpcmd="$chgrpprog $2" shift shift continue ;; -s) stripcmd="$stripprog" shift continue ;; -z) instcmd="gzipcp" shift continue ;; *) if [ x"$src" = x ]; then src="$1" else dst="$1" fi shift continue ;; esac done if [ x"$src" = x ]; then echo "install-sh: No input file specified" exit 1 fi if [ x"$dir_arg" != x ]; then dst="$src" src="" if [ -d "$dst" ]; then instcmd=: else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ ! -f "$src" -a ! -d "$src" ]; then echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ]; then echo "install: No destination specified" exit 1 fi # If destination is a directory, append the input filename. if [ -d "$dst" ]; then dst="$dst/`basename $src`" fi fi ## this sed command emulates the dirname command dstdir="`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`" # Make sure that the destination directory exists. # This part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ]; then $doit $mkdirprog "${pathcomp}"; fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ]; then # Make a directory... $doit $instcmd $dst || exit 1 # Allow chown/chgrp to fail, but log a warning if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst || echo "warning: Unable to change owner of $dst!"; fi if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst || echo "warning: Unable to change group of $dst!"; fi if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst || exit 1; fi else # Install a file... dstfile="`basename $dst`" # Check the destination file - for libraries just use the "-x" option # to strip... case "$dstfile" in *.a | *.dylib | *.sl | *.sl.* | *.so | *.so.*) stripopt="-x" ;; *) stripopt="" ;; esac # Make a temp file name in the proper directory. dsttmp="$dstdir/#inst.$$#" # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp || exit 1 # Update permissions and strip as needed, then move to the final name. # If the chmod, strip, rm, or mv commands fail, remove the installed # file... if [ x"$stripcmd" != x ]; then $doit $stripcmd $stripopt "$dsttmp" || echo "warning: Unable to strip $dst!"; fi if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp" || echo "warning: Unable to change owner of $dst!"; fi if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp" || echo "warning: Unable to change group of $dst!"; fi trap "rm -f ${dsttmp}" 0 && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; fi && $doit $rmcmd -f "$dstdir/$dstfile" && $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" fi exit 0 cups-2.2.7/INSTALL.md000664 000765 000024 00000017236 13255074424 014614 0ustar00msweetstaff000000 000000 INSTALL - CUPS v2.2.7 - 2018-03-22 ================================== This file describes how to compile and install CUPS from source code. For more information on CUPS see the file called "README.md". A complete change log can be found in "CHANGES.md". Using CUPS requires additional third-party support software and printer drivers. These are typically included with your operating system distribution. Apple does not endorse or support third-party support software for CUPS. > Note: Current versions of macOS DO NOT allow installation to /usr with the > default System Integrity Protection (SIP) settings. In addition, we do not > recommend replacing the CUPS supplied with macOS because: > > a. not all versions of CUPS are compatible with every macOS release, > > b. code signing prevents replacement of system libraries and access to the > system keychain (needed for encrypted printer sharing), and > > c. software updates will often replace parts of your local installation, > potentially rendering your system unusable. > > Apple only supports using the Clang supplied with Xcode to build CUPS on > macOS. BEFORE YOU BEGIN ---------------- You'll need ANSI-compliant C and C++ compilers, plus a make program and POSIX- compliant shell (/bin/sh). The GNU compiler tools and Bash work well and we have tested the current CUPS code against several versions of GCC with excellent results. The makefiles used by the project should work with most versions of make. We've tested them with GNU make as well as the make programs shipped by Compaq, HP, SGI, and Sun. BSD users should use GNU make (gmake) since BSD make does not support "include". Besides these tools you'll want ZLIB library for compression support, the GNU TLS library for encryption support on platforms other than iOS, macOS, or Windows, and either MIT (1.6.3 or higher) or Heimdal Kerberos for Kerberos support. CUPS will compile and run without these, however you'll miss out on many of the features provided by CUPS. On a stock Ubuntu install, the following command will install the required prerequisites: sudo apt-get install autoconf build-essential libavahi-client-dev \ libgnutls28-dev libkrb5-dev libnss-mdns libpam-dev \ libsystemd-dev libusb-1.0-0-dev zlib1g-dev Also, please note that CUPS does not include print filters to support PDF or raster printing. You *must* download GPL Ghostscript and/or the Open Printing CUPS filters package separately to print on operating systems other than macOS. 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 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 > Note: Current versions of macOS DO NOT allow installation to /usr with the > default System Integrity Protection (SIP) settings. To see a complete list of configuration options, use the `--help` option: ./configure --help If any of the dependent libraries are not installed in a system default location (typically "/usr/include" and "/usr/lib") you'll need to set the CFLAGS, CPPFLAGS, CXXFLAGS, DSOFLAGS, and LDFLAGS environment variables prior to running configure: setenv CFLAGS "-I/some/directory" setenv CPPFLAGS "-I/some/directory" setenv CXXFLAGS "-I/some/directory" setenv DSOFLAGS "-L/some/directory" setenv LDFLAGS "-L/some/directory" ./configure ... or: CFLAGS="-I/some/directory" \ CPPFLAGS="-I/some/directory" \ CXXFLAGS="-I/some/directory" \ DSOFLAGS="-L/some/directory" \ LDFLAGS="-L/some/directory" \ ./configure ... The `--enable-debug` option compiles CUPS with debugging information enabled. Additional debug logging support can be enabled using the `--enable-debug-printfs` option - these debug messages are enabled using the `CUPS_DEBUG_xxx` environment variables at run-time. CUPS also includes an extensive set of unit tests that can be used to find and diagnose a variety of common problems - use the "--enable-unit-tests" configure option to run them at build time. On macOS, use the `--with-archflags` option to build with the correct set of architectures: ./configure --with-archflags="-arch i386 -arch x86_64" ... Once you have configured things, just type: make ENTER or if you have FreeBSD, NetBSD, or OpenBSD type: gmake ENTER to build the software. TESTING THE SOFTWARE -------------------- Aside from the built-in unit tests, CUPS includes an automated test framework for testing the entire printing system. To run the tests, just type: make check ENTER or if you have FreeBSD, NetBSD, or OpenBSD type: gmake check ENTER The test framework runs a copy of the CUPS scheduler (cupsd) on port 8631 in /tmp/cups-$USER and produces a nice HTML report of the results. 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, NetBSD, or OpenBSD: gmake install ENTER Use the BUILDROOT variable to install to an alternate root directory: make BUILDROOT=/some/other/root/directory install ENTER You can also build binary packages that can be installed on other machines using the RPM spec file ("packaging/cups.spec") or EPM list file ("packaging/cups.list"). The latter also supports building of binary RPMs, so it may be more convenient to use. You can find the RPM software at: http://www.rpm.org/ The EPM software is available at: https://michaelrsweet.github.io/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 ENTER or gmake ENTER for FreeBSD, NetBSD, and OpenBSD. The target is one of the following: - "epm": Builds a script + tarfile package - "bsd": Builds a *BSD package - "deb": Builds a Debian package - "pkg": Builds a Solaris package - "rpm": Builds a RPM package - "slackware": Build a Slackware package GETTING DEBUG LOGGING FROM CUPS ------------------------------- When configured with the `--enable-debug-printfs` option, CUPS compiles in additional debug logging support in the scheduler, CUPS API, and CUPS Imaging API. The following environment variables are used to enable and control debug logging: - `CUPS_DEBUG_FILTER`: Specifies a POSIX regular expression to control which messages are logged. - `CUPS_DEBUG_LEVEL`: Specifies a number from 0 to 9 to control the verbosity of the logging. The default level is 1. - `CUPS_DEBUG_LOG`: Specifies a log file to use. Specify the name "-" to send the messages to stderr. Prefix a filename with "+" to append to an existing file. You can include a single "%d" in the filename to embed the current process ID. REPORTING PROBLEMS ------------------ If you have problems, *read the documentation first*! If the documentation does not solve your problems, please post a message on the users forum at: https://www.cups.org/ Include your operating system and version, compiler and version, and any errors or problems you've run into. The "config.log" file and the output from the configure script and make 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. cups-2.2.7/LICENSE.txt000664 000765 000024 00000137314 13255074424 015007 0ustar00msweetstaff000000 000000 CUPS License Agreement Copyright 2007-2016 by Apple Inc. 1 Infinite Loop Cupertino, CA 95014 USA WWW: http://www.cups.org/ INTRODUCTION CUPS(tm) is provided under the GNU General Public License ("GPL") and GNU Library General Public License ("LGPL"), Version 2, with an exception for Apple operating systems. A copy of the exception and licenses follow this introduction. The GNU LGPL applies to the CUPS and CUPS Imaging libraries located in the "cups" and "filter" subdirectories of the CUPS source distribution and the files in the "test" subdirectory. The GNU GPL applies to the remainder of the CUPS distribution. For those not familiar with the GNU GPL, the license basically allows you to: - Use the CUPS software at no charge. - Distribute verbatim copies of the software in source or binary form. - Sell verbatim copies of the software for a media fee, or sell support for the software. What this license *does not* allow you to do is make changes or add features to CUPS and then sell a binary distribution without source code. You must provide source for any changes or additions to the software, and all code must be provided under the GPL or LGPL as appropriate. The only exceptions to this are the portions of the CUPS software covered by the Apple operating system license exceptions outlined later in this license agreement. The GNU LGPL relaxes the "link-to" restriction, allowing you to develop applications that use the CUPS and CUPS Imaging libraries under other licenses and/or conditions as appropriate for your application, driver, or filter. LICENSE EXCEPTIONS In addition, as the copyright holder of CUPS, Apple Inc. grants the following special exception: 1. Apple Operating System Development License Exception; a. Software that is developed by any person or entity for an Apple Operating System ("Apple OS-Developed Software"), including but not limited to Apple and third party printer drivers, filters, and backends for an Apple Operating System, that is linked to the CUPS imaging library or based on any sample filters or backends provided with CUPS shall not be considered to be a derivative work or collective work based on the CUPS program and is exempt from the mandatory source code release clauses of the GNU GPL. You may therefore distribute linked combinations of the CUPS imaging library with Apple OS-Developed Software without releasing the source code of the Apple OS-Developed Software. You may also use sample filters and backends provided with CUPS to develop Apple OS-Developed Software without releasing the source code of the Apple OS-Developed Software. b. An Apple Operating System means any operating system software developed and/or marketed by Apple Inc., including but not limited to all existing releases and versions of Apple's Darwin, iOS, macOS, macOS Server, and tvOS products and all follow-on releases and future versions thereof. c. This exception is only available for Apple OS-Developed Software and does not apply to software that is distributed for use on other operating systems. d. All CUPS software that falls under this license exception have the following text at the top of each source file: This file is subject to the Apple OS-Developed Software exception. No developer is required to provide this exception in a derived work. KERBEROS SUPPORT CODE The Kerberos support code ("KSC") is copyright 2006 by Jelmer Vernooij and is provided 'as-is', without any express or implied warranty. In no event will the author or Apple Inc. be held liable for any damages arising from the use of the KSC. Sources files containing KSC have the following text at the top of each source file: This file contains Kerberos support code, copyright 2006 by Jelmer Vernooij. The KSC copyright and license apply only to Kerberos-related feature code in CUPS. Such code is typically conditionally compiled based on the present of the HAVE_GSSAPI preprocessor definition. Permission is granted to anyone to use the KSC for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of the KSC must not be misrepresented; you must not claim that you wrote the original software. If you use the KSC in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. TRADEMARKS CUPS and the CUPS logo (the "CUPS Marks") are trademarks of Apple Inc. Apple grants you a non-exclusive and non-transferable right to use the CUPS Marks in any direct port or binary distribution incorporating CUPS software and in any promotional material therefor. You agree that your products will meet the highest levels of quality and integrity for similar goods, not be unlawful, and be developed, manufactured, and distributed in compliance with this license. You will not interfere with Apple's rights in the CUPS Marks, and all use of the CUPS Marks shall inure to the benefit of Apple. This license does not apply to use of the CUPS Marks in a derivative products, which requires prior written permission from Apple Inc. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) 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 invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable 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.) b) 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. c) 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. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) 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. b) 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. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! cups-2.2.7/locale/000775 000765 000024 00000000000 13255074424 014412 5ustar00msweetstaff000000 000000 cups-2.2.7/Makedefs.in000664 000765 000024 00000014765 13255074424 015237 0ustar00msweetstaff000000 000000 # # Common makefile definitions for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 1997-2007 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # # # CUPS version... # CUPS_VERSION = @CUPS_VERSION@ # # Programs... # AR = @AR@ AWK = @AWK@ CC = @LIBTOOL_CC@ @CC@ CHMOD = @CHMOD@ CXX = @LIBTOOL_CXX@ @CXX@ DSO = @DSO@ DSOXX = @DSOXX@ GZIP = @GZIP@ INSTALL = @INSTALL@ LD = @LD@ LD_CC = @LD_CC@ LD_CXX = @LD_CXX@ LIBTOOL = @LIBTOOL@ LN = @LN@ -sf MKDIR = @MKDIR@ -p MV = @MV@ RANLIB = @RANLIB@ RM = @RM@ -f RMDIR = @RMDIR@ SED = @SED@ SHELL = /bin/sh # # Installation programs... # INSTALL_BIN = @LIBTOOL_INSTALL@ $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ @INSTALL_STRIP@ INSTALL_COMPDATA = $(INSTALL) -c -m 444 @INSTALL_GZIP@ INSTALL_CONFIG = $(INSTALL) -c -m @CUPS_CONFIG_FILE_PERM@ INSTALL_DATA = $(INSTALL) -c -m 444 INSTALL_DIR = $(INSTALL) -d INSTALL_LIB = @LIBTOOL_INSTALL@ $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ @INSTALL_STRIP@ INSTALL_MAN = $(INSTALL) -c -m 444 INSTALL_SCRIPT = $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ # # Default user, group, and system groups for the scheduler... # CUPS_USER = @CUPS_USER@ CUPS_GROUP = @CUPS_GROUP@ CUPS_SYSTEM_GROUPS = @CUPS_SYSTEM_GROUPS@ CUPS_PRIMARY_SYSTEM_GROUP = @CUPS_PRIMARY_SYSTEM_GROUP@ # # Default permissions... # CUPS_CONFIG_FILE_PERM = @CUPS_CONFIG_FILE_PERM@ CUPS_CUPSD_FILE_PERM = @CUPS_CUPSD_FILE_PERM@ CUPS_LOG_FILE_PERM = @CUPS_LOG_FILE_PERM@ # # Languages to install... # LANGUAGES = @LANGUAGES@ INSTALL_LANGUAGES = @INSTALL_LANGUAGES@ UNINSTALL_LANGUAGES = @UNINSTALL_LANGUAGES@ # # Cross-compilation support: "local" target is used for any tools that are # built and run locally. # LOCALTARGET = @LOCALTARGET@ # # Libraries... # LIBCUPS = @LIBCUPS@ LIBCUPSCGI = @LIBCUPSCGI@ LIBCUPSIMAGE = @LIBCUPSIMAGE@ LIBCUPSMIME = @LIBCUPSMIME@ LIBCUPSPPDC = @LIBCUPSPPDC@ LIBCUPSSTATIC = @LIBCUPSSTATIC@ LIBGSSAPI = @LIBGSSAPI@ LIBMALLOC = @LIBMALLOC@ LIBMXML = @LIBMXML@ LIBPAPER = @LIBPAPER@ LIBUSB = @LIBUSB@ LIBWRAP = @LIBWRAP@ LIBZ = @LIBZ@ # # Install static libraries? # INSTALLSTATIC = @INSTALLSTATIC@ # # IPP backend aliases... # IPPALIASES = @IPPALIASES@ # # Install XPC backends? # INSTALLXPC = @INSTALLXPC@ # # Program options... # # ARCHFLAGS Defines the default architecture build options. # OPTIM Defines the common compiler optimization/debugging options # for all architectures. # OPTIONS Defines other compile-time options (currently only -DDEBUG # for extra debug info) # ALL_CFLAGS = -I.. -D_CUPS_SOURCE $(CFLAGS) $(SSLFLAGS) \ @LARGEFILE@ @PTHREAD_FLAGS@ $(ONDEMANDFLAGS) $(OPTIONS) ALL_CXXFLAGS = -I.. -D_CUPS_SOURCE $(CXXFLAGS) $(SSLFLAGS) \ @LARGEFILE@ @PTHREAD_FLAGS@ $(ONDEMANDFLAGS) $(OPTIONS) ARCHFLAGS = @ARCHFLAGS@ ARFLAGS = @ARFLAGS@ BACKLIBS = @BACKLIBS@ BUILDDIRS = @BUILDDIRS@ CFLAGS = @CPPFLAGS@ @CFLAGS@ COMMONLIBS = @LIBS@ CXXFLAGS = @CPPFLAGS@ @CXXFLAGS@ CXXLIBS = @CXXLIBS@ DBUS_NOTIFIER = @DBUS_NOTIFIER@ DBUS_NOTIFIERLIBS = @DBUS_NOTIFIERLIBS@ DNSSD_BACKEND = @DNSSD_BACKEND@ DSOFLAGS = -L../cups @DSOFLAGS@ DSOLIBS = @DSOLIBS@ $(COMMONLIBS) DNSSDLIBS = @DNSSDLIBS@ IPPFIND_BIN = @IPPFIND_BIN@ IPPFIND_MAN = @IPPFIND_MAN@ LDFLAGS = -L../cgi-bin -L../cups -L../filter -L../ppdc \ -L../scheduler @LDARCHFLAGS@ \ @LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM) LINKCUPS = @LINKCUPS@ $(LIBGSSAPI) $(DNSSDLIBS) $(SSLLIBS) $(LIBZ) LINKCUPSIMAGE = @LINKCUPSIMAGE@ LIBS = $(LINKCUPS) $(COMMONLIBS) ONDEMANDFLAGS = @ONDEMANDFLAGS@ ONDEMANDLIBS = @ONDEMANDLIBS@ OPTIM = @OPTIM@ OPTIONS = PAMLIBS = @PAMLIBS@ SERVERLIBS = @SERVERLIBS@ SSLFLAGS = @SSLFLAGS@ SSLLIBS = @SSLLIBS@ UNITTESTS = @UNITTESTS@ # # Directories... # # The first section uses the GNU names (which are *extremely* # difficult to find in a makefile because they are lowercase...) # We have to define these first because autoconf uses ${prefix} # and ${exec_prefix} for most of the other directories... # # The "datarootdir" variable may not get defined if you are using # a version of autoconf prior to 2.60. # # This is immediately followed by definition in ALL CAPS for the # needed directories... # bindir = @bindir@ datadir = @datadir@ datarootdir = @datarootdir@ exec_prefix = @exec_prefix@ includedir = @includedir@ infodir = @infodir@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ privateinclude = @privateinclude@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ top_srcdir = @top_srcdir@ BUILDROOT = $(DSTROOT) AMANDIR = $(BUILDROOT)@AMANDIR@ BINDIR = $(BUILDROOT)@bindir@ BUNDLEDIR = @CUPS_BUNDLEDIR@ CACHEDIR = $(BUILDROOT)@CUPS_CACHEDIR@ DATADIR = $(BUILDROOT)@CUPS_DATADIR@ DOCDIR = $(BUILDROOT)@CUPS_DOCROOT@ ICONDIR = @ICONDIR@ INCLUDEDIR = $(BUILDROOT)$(includedir) LIBDIR = $(BUILDROOT)$(libdir) LOCALEDIR = $(BUILDROOT)@CUPS_LOCALEDIR@ LOGDIR = $(BUILDROOT)@CUPS_LOGDIR@ MANDIR = $(BUILDROOT)@mandir@ MENUDIR = @MENUDIR@ PMANDIR = $(BUILDROOT)@PMANDIR@ PRIVATEINCLUDE = $(BUILDROOT)@PRIVATEINCLUDE@ RCLEVELS = @RCLEVELS@ RCSTART = @RCSTART@ RCSTOP = @RCSTOP@ REQUESTS = $(BUILDROOT)@CUPS_REQUESTS@ SBINDIR = $(BUILDROOT)@sbindir@ SERVERBIN = $(BUILDROOT)@CUPS_SERVERBIN@ SERVERROOT = $(BUILDROOT)@CUPS_SERVERROOT@ STATEDIR = $(BUILDROOT)@CUPS_STATEDIR@ MAN1EXT = @MAN1EXT@ MAN5EXT = @MAN5EXT@ MAN7EXT = @MAN7EXT@ MAN8EXT = @MAN8EXT@ MAN8DIR = @MAN8DIR@ PAMDIR = @PAMDIR@ PAMFILE = @PAMFILE@ DBUSDIR = @DBUSDIR@ INITDIR = @INITDIR@ INITDDIR = @INITDDIR@ LAUNCHD_DIR = @LAUNCHD_DIR@ SMFMANIFESTDIR = @SMFMANIFESTDIR@ SYSTEMD_DIR = @SYSTEMD_DIR@ XINETD = @XINETD@ USBQUIRKS = @USBQUIRKS@ # # Rules... # .SILENT: .SUFFIXES: .1 .1.gz .1m .1m.gz .3 .3.gz .5 .5.gz .7 .7.gz .8 .8.gz .a .c .cxx .h .man .o .gz .c.o: echo Compiling $<... $(CC) $(ARCHFLAGS) $(OPTIM) $(ALL_CFLAGS) -c -o $@ $< .cxx.o: echo Compiling $<... $(CXX) $(ARCHFLAGS) $(OPTIM) $(ALL_CXXFLAGS) -c -o $@ $< .man.1 .man.1m .man.3 .man.5 .man.7 .man.8: echo Linking $<... $(RM) $@ $(LN) $< $@ .man.1.gz .man.1m.gz .man.3.gz .man.5.gz .man.7.gz .man.8.gz .man.gz: echo -n Compressing $<... $(RM) $@ gzip -v9 <$< >$@ cups-2.2.7/Makefile000664 000765 000024 00000016516 13255074424 014624 0ustar00msweetstaff000000 000000 # # Top-level Makefile for CUPS. # # Copyright 2007-2016 by Apple Inc. # Copyright 1997-2007 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include Makedefs # # Directories to make... # DIRS = cups test $(BUILDDIRS) # # Make all targets... # all: chmod +x cups-config echo Using ARCHFLAGS="$(ARCHFLAGS)" echo Using ALL_CFLAGS="$(ALL_CFLAGS)" echo Using ALL_CXXFLAGS="$(ALL_CXXFLAGS)" echo Using CC="$(CC)" echo Using CXX="$(CC)" echo Using DSOFLAGS="$(DSOFLAGS)" echo Using LDFLAGS="$(LDFLAGS)" echo Using LIBS="$(LIBS)" for dir in $(DIRS); do\ echo Making all in $$dir... ;\ (cd $$dir ; $(MAKE) $(MFLAGS) all $(UNITTESTS)) || exit 1;\ done # # Make library targets... # libs: echo Using ARCHFLAGS="$(ARCHFLAGS)" echo Using ALL_CFLAGS="$(ALL_CFLAGS)" echo Using ALL_CXXFLAGS="$(ALL_CXXFLAGS)" echo Using CC="$(CC)" echo Using CXX="$(CC)" echo Using DSOFLAGS="$(DSOFLAGS)" echo Using LDFLAGS="$(LDFLAGS)" echo Using LIBS="$(LIBS)" for dir in $(DIRS); do\ echo Making libraries in $$dir... ;\ (cd $$dir ; $(MAKE) $(MFLAGS) libs) || exit 1;\ done # # Make unit test targets... # unittests: echo Using ARCHFLAGS="$(ARCHFLAGS)" echo Using ALL_CFLAGS="$(ALL_CFLAGS)" echo Using ALL_CXXFLAGS="$(ALL_CXXFLAGS)" echo Using CC="$(CC)" echo Using CXX="$(CC)" echo Using DSOFLAGS="$(DSOFLAGS)" echo Using LDFLAGS="$(LDFLAGS)" echo Using LIBS="$(LIBS)" for dir in $(DIRS); do\ echo Making all in $$dir... ;\ (cd $$dir ; $(MAKE) $(MFLAGS) unittests) || exit 1;\ done # # Remove object and target files... # clean: for dir in $(DIRS); do\ echo Cleaning in $$dir... ;\ (cd $$dir; $(MAKE) $(MFLAGS) clean) || exit 1;\ done # # Remove all non-distribution files... # distclean: clean $(RM) Makedefs config.h config.log config.status $(RM) conf/cups-files.conf conf/cupsd.conf conf/mime.convs conf/pam.std conf/snmp.conf $(RM) cups-config $(RM) data/testprint $(RM) desktop/cups.desktop $(RM) doc/index.html $(RM) man/client.conf.man man/cups-files.conf.man man/cups-lpd.man man/cups-snmp.man man/cupsaddsmb.man man/cupsd.conf.man man/cupsd.man man/lpoptions.man $(RM) packaging/cups.list $(RM) scheduler/cups-lpd.xinetd scheduler/cups.sh scheduler/cups.xml scheduler/org.cups.cups-lpd.plist scheduler/org.cups.cups-lpdAT.service scheduler/org.cups.cupsd.path scheduler/org.cups.cupsd.service scheduler/org.cups.cupsd.socket $(RM) templates/header.tmpl -$(RM) doc/*/index.html -$(RM) templates/*/header.tmpl -$(RM) -r autom4te*.cache clang cups/charmaps cups/locale # # Make dependencies # depend: for dir in $(DIRS); do\ echo Making dependencies in $$dir... ;\ (cd $$dir; $(MAKE) $(MFLAGS) depend) || exit 1;\ done # # Run the Clang static code analysis tool on the sources, available here: # # http://clang-analyzer.llvm.org # # At least checker-231 is required. # # Alternatively, use "--analyze -Xanalyzer -analyzer-output=text" for OPTIM (text # output instead of HTML...) # .PHONY: clang clang-changes clang: $(RM) -r clang scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) clean all clang-changes: scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) all # # Run the STACK tool on the sources, available here: # # http://css.csail.mit.edu/stack/ # # Do the following to pass options to configure: # # make CONFIGFLAGS="--foo --bar" stack # .PHONY: stack stack: stack-build ./configure $(CONFIGFLAGS) stack-build $(MAKE) $(MFLAGS) clean all poptck $(MAKE) $(MFLAGS) distclean $(RM) */*.ll $(RM) */*.ll.out # # Generate a ctags file... # ctags: ctags -R . # # Install everything... # install: install-data install-headers install-libs install-exec # # Install data files... # install-data: echo Making all in cups... (cd cups; $(MAKE) $(MFLAGS) all) for dir in $(DIRS); do\ echo Installing data files in $$dir... ;\ (cd $$dir; $(MAKE) $(MFLAGS) install-data) || exit 1;\ done echo Installing cups-config script... $(INSTALL_DIR) -m 755 $(BINDIR) $(INSTALL_SCRIPT) cups-config $(BINDIR)/cups-config # # Install header files... # install-headers: for dir in $(DIRS); do\ echo Installing header files in $$dir... ;\ (cd $$dir; $(MAKE) $(MFLAGS) install-headers) || exit 1;\ done if test "x$(privateinclude)" != x; then \ echo Installing config.h into $(PRIVATEINCLUDE)...; \ $(INSTALL_DIR) -m 755 $(PRIVATEINCLUDE); \ $(INSTALL_DATA) config.h $(PRIVATEINCLUDE)/config.h; \ fi # # Install programs... # install-exec: all for dir in $(DIRS); do\ echo Installing programs in $$dir... ;\ (cd $$dir; $(MAKE) $(MFLAGS) install-exec) || exit 1;\ done # # Install libraries... # install-libs: libs for dir in $(DIRS); do\ echo Installing libraries in $$dir... ;\ (cd $$dir; $(MAKE) $(MFLAGS) install-libs) || exit 1;\ done # # Uninstall object and target files... # uninstall: for dir in $(DIRS); do\ echo Uninstalling in $$dir... ;\ (cd $$dir; $(MAKE) $(MFLAGS) uninstall) || exit 1;\ done echo Uninstalling cups-config script... $(RM) $(BINDIR)/cups-config -$(RMDIR) $(BINDIR) # # Run the test suite... # test: all unittests echo Running CUPS test suite... cd test; ./run-stp-tests.sh check: all unittests echo Running CUPS test suite with defaults... cd test; ./run-stp-tests.sh 1 0 n n debugcheck: all unittests echo Running CUPS test suite with debug printfs... cd test; ./run-stp-tests.sh 1 0 n y # # Create HTML documentation using Mini-XML's mxmldoc (http://www.msweet.org/)... # apihelp: for dir in cups filter; do\ echo Generating API help in $$dir... ;\ (cd $$dir; $(MAKE) $(MFLAGS) apihelp) || exit 1;\ done # # Create an Xcode docset using Mini-XML's mxmldoc (http://www.msweet.org/)... # docset: apihelp echo Generating docset directory tree... $(RM) -r org.cups.docset mkdir -p org.cups.docset/Contents/Resources/Documentation/help mkdir -p org.cups.docset/Contents/Resources/Documentation/images cd man; $(MAKE) $(MFLAGS) html cd doc; $(MAKE) $(MFLAGS) docset cd cgi-bin; $(MAKE) $(MFLAGS) makedocset cgi-bin/makedocset org.cups.docset \ `svnversion . | sed -e '1,$$s/[a-zA-Z]//g'` \ doc/help/api-*.tokens $(RM) doc/help/api-*.tokens echo Indexing docset... /Applications/Xcode.app/Contents/Developer/usr/bin/docsetutil index org.cups.docset echo Generating docset archive and feed... $(RM) org.cups.docset.atom /Applications/Xcode.app/Contents/Developer/usr/bin/docsetutil package --output org.cups.docset.xar \ --atom org.cups.docset.atom \ --download-url http://www.cups.org/org.cups.docset.xar \ org.cups.docset # # Lines of code computation... # sloc: for dir in cups scheduler; do \ (cd $$dir; $(MAKE) $(MFLAGS) sloc) || exit 1;\ done # # Make software distributions using EPM (http://www.msweet.org/)... # EPMFLAGS = -v --output-dir dist $(EPMARCH) bsd deb epm pkg rpm slackware: epm $(EPMFLAGS) -f $@ cups packaging/cups.list .PHONY: dist dist: all $(RM) -r dist $(MAKE) $(MFLAGS) epm case `uname` in \ *BSD*) $(MAKE) $(MFLAGS) bsd;; \ Linux*) test ! -x /usr/bin/rpm || $(MAKE) $(MFLAGS) rpm;; \ SunOS*) $(MAKE) $(MFLAGS) pkg;; \ esac # # Don't run top-level build targets in parallel... # .NOTPARALLEL: cups-2.2.7/man/000775 000765 000024 00000000000 13255074424 013726 5ustar00msweetstaff000000 000000 cups-2.2.7/monitor/000775 000765 000024 00000000000 13255074424 014642 5ustar00msweetstaff000000 000000 cups-2.2.7/notifier/000775 000765 000024 00000000000 13255074424 014772 5ustar00msweetstaff000000 000000 cups-2.2.7/packaging/000775 000765 000024 00000000000 13256465407 015105 5ustar00msweetstaff000000 000000 cups-2.2.7/ppdc/000775 000765 000024 00000000000 13255074424 014101 5ustar00msweetstaff000000 000000 cups-2.2.7/README.md000664 000765 000024 00000014426 13255074424 014441 0ustar00msweetstaff000000 000000 README - CUPS v2.2.7 - 2018-03-22 ================================= Looking for compile instructions? Read the file `INSTALL.md` instead... INTRODUCTION ------------ CUPS is a standards-based, open source printing system developed by Apple Inc. for macOS® and other UNIX®-like operating systems. CUPS uses the Internet Printing Protocol ("IPP") and provides System V and Berkeley command-line interfaces, a web interface, and a C API to manage printers and print jobs. It supports printing to both local (parallel, serial, USB) and networked printers, and printers can be shared from one computer to another, even over the Internet! Internally, CUPS uses PostScript Printer Description ("PPD") files to describe printer capabilities and features and a wide variety of generic and device- specific programs to convert and print many types of files. Sample drivers are included with CUPS to support many Dymo, EPSON, HP, Intellitech, OKIDATA, and Zebra printers. Many more drivers are available online and (in some cases) on the driver CD-ROM that came with your printer. CUPS is licensed under the GNU General Public License and GNU Library General Public License versions 2. See the file "LICENSE.txt" for more information. READING THE DOCUMENTATION ------------------------- Once you have installed the software you can access the documentation (and a bunch of other stuff) online at . If you're having trouble getting that far, the documentation is located under the `doc/help` and `man` directories. Please read the documentation before asking questions. GETTING SUPPORT AND OTHER RESOURCES ----------------------------------- If you have problems, *read the documentation first!* We also provide two mailing lists which are available at . See the CUPS web site at for other resources. SETTING UP PRINTER QUEUES USING YOUR WEB BROWSER ------------------------------------------------ CUPS includes a web-based administration tool that allows you to manage printers, classes, and jobs on your server. Open in your browser to access the printer administration tools: *Do not* use the hostname for your machine - it will not work with the default CUPS configuration. To enable administration access on other addresses, check the `Allow Remote Administration` box and click on the `Change Settings button. You will be asked for the administration password (root or any other user in the sys/system/root/admin/lpadmin group on your system) when performing any administrative function. SETTING UP PRINTER QUEUES FROM THE COMMAND-LINE ----------------------------------------------- CUPS currently uses PPD (PostScript Printer Description) files that describe printer capabilities and driver programs needed for each printer. The `everywhere` PPD is used for nearly all modern networks printers sold since about 2009. For example, the following command creates a print queue for a printer at address 11.22.33.44: lpadmin -p printername -E -v ipp://11.22.33.44/ipp/print -m everywhere CUPS also includes several sample PPD files you can use for "legacy" printers: Driver PPD Name ----------------------------- ------------------------------ Dymo Label Printers drv:///sample.drv/dymo.ppd Intellitech Intellibar drv:///sample.drv/intelbar.ppd EPSON 9-pin Series drv:///sample.drv/epson9.ppd EPSON 24-pin Series drv:///sample.drv/epson24.ppd Generic PCL Laser Printer drv:///sample.drv/generpcl.ppd Generic PostScript Printer drv:///sample.drv/generic.ppd HP DeskJet Series drv:///sample.drv/deskjet.ppd HP LaserJet Series drv:///sample.drv/laserjet.ppd OKIDATA 9-Pin Series drv:///sample.drv/okidata9.ppd OKIDATA 24-Pin Series drv:///sample.drv/okidat24.ppd Zebra CPCL Label Printer drv:///sample.drv/zebracpl.ppd Zebra EPL1 Label Printer drv:///sample.drv/zebraep1.ppd Zebra EPL2 Label Printer drv:///sample.drv/zebraep2.ppd Zebra ZPL Label Printer drv:///sample.drv/zebra.ppd You can run the `lpinfo -m` command to list all of the available drivers: lpinfo -m Run the `lpinfo -v` command to list the available printers: lpinfo -v Then use the correct URI to add the printer using the `lpadmin` command: lpadmin -p printername -E -v device-uri -m ppd-name Current network printers typically use `ipp` or `ipps` URIS: lpadmin -p printername -E -v ipp://11.22.33.44/ipp/print -m everywhere lpadmin -p printername -E -v ipps://11.22.33.44/ipp/print -m everywhere Older network printers typically use `socket` or `lpd` URIs: lpadmin -p printername -E -v socket://11.22.33.44 -m ppd-name lpadmin -p printername -E -v lpd://11.22.33.44/ -m ppd-name The sample drivers provide basic printing capabilities, but generally do not exercise the full potential of the printers or CUPS. Other drivers provide greater printing capabilities. PRINTING FILES -------------- 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: lp -o media=A4 -o resolution=600dpi filename lpr -o media=A4 -o resolution=600dpi filename CUPS recognizes many types of images files as well as PDF, PostScript, 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: lp -o raw filename lpr -l filename This will prevent the filters from misinterpreting your print file. LEGAL STUFF ----------- CUPS is copyright © 2007-2018 by Apple Inc. CUPS and the CUPS logo are trademarks of Apple Inc. The MD5 Digest code is Copyright 1999 Aladdin Enterprises. CUPS is provided under the terms of version 2 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 `doc/help/license.html` or `LICENSE.txt` files for more information. cups-2.2.7/scheduler/000775 000765 000024 00000000000 13255074424 015131 5ustar00msweetstaff000000 000000 cups-2.2.7/systemv/000775 000765 000024 00000000000 13255074424 014665 5ustar00msweetstaff000000 000000 cups-2.2.7/templates/000775 000765 000024 00000000000 13255074424 015151 5ustar00msweetstaff000000 000000 cups-2.2.7/test/000775 000765 000024 00000000000 13255074424 014132 5ustar00msweetstaff000000 000000 cups-2.2.7/vcnet/000775 000765 000024 00000000000 13255074424 014272 5ustar00msweetstaff000000 000000 cups-2.2.7/xcode/000775 000765 000024 00000000000 13255074424 014255 5ustar00msweetstaff000000 000000 cups-2.2.7/xcode/config.h000664 000765 000024 00000026735 13255074424 015710 0ustar00msweetstaff000000 000000 /* * Configuration file for CUPS and Xcode. * * Copyright © 2007-2018 by Apple Inc. * Copyright © 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #ifndef _CUPS_CONFIG_H_ #define _CUPS_CONFIG_H_ #include #include /* * Version of software... */ #define CUPS_SVERSION "CUPS v2.2.7" #define CUPS_MINIMAL "CUPS/2.2.7" /* * Default user and groups... */ #define CUPS_DEFAULT_USER "_lp" #define CUPS_DEFAULT_GROUP "_lp" #define CUPS_DEFAULT_SYSTEM_GROUPS "admin" #define CUPS_DEFAULT_PRINTOPERATOR_AUTH "@AUTHKEY(system.print.operator) @admin @lpadmin" #define CUPS_DEFAULT_SYSTEM_AUTHKEY "system.print.admin" /* * Default file permissions... */ #define CUPS_DEFAULT_CONFIG_FILE_PERM 0644 #define CUPS_DEFAULT_LOG_FILE_PERM 0644 /* * Default logging settings... */ #define CUPS_DEFAULT_LOG_LEVEL "warn" #define CUPS_DEFAULT_ACCESS_LOG_LEVEL "none" /* * Default fatal error settings... */ #define CUPS_DEFAULT_FATAL_ERRORS "config" /* * Default browsing settings... */ #define CUPS_DEFAULT_BROWSING 1 #define CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS "dnssd" #define CUPS_DEFAULT_DEFAULT_SHARED 1 /* * Default IPP port... */ #define CUPS_DEFAULT_IPP_PORT 631 /* * Default printcap file... */ #define CUPS_DEFAULT_PRINTCAP "/Library/Preferences/org.cups.printers.plist" /* * Default Samba and LPD config files... */ #define CUPS_DEFAULT_SMB_CONFIG_FILE "" #define CUPS_DEFAULT_LPD_CONFIG_FILE "launchd:///System/Library/LaunchDaemons/org.cups.cups-lpd.plist" /* * Default MaxCopies value... */ #define CUPS_DEFAULT_MAX_COPIES 9999 /* * Do we have domain socket support, and if so what is the default one? */ #define CUPS_DEFAULT_DOMAINSOCKET "/private/var/run/cupsd" /* * Default WebInterface value... */ #define CUPS_DEFAULT_WEBIF 0 /* * Where are files stored? * * Note: These are defaults, which can be overridden by environment * variables at run-time... */ #define CUPS_BINDIR "/usr/bin" #define CUPS_CACHEDIR "/private/var/spool/cups/cache" #define CUPS_DATADIR "/usr/share/cups" #define CUPS_DOCROOT "/usr/share/doc/cups" #define CUPS_FONTPATH "/usr/share/cups/fonts" #define CUPS_LOCALEDIR "/usr/share/locale" #define CUPS_LOGDIR "/private/var/log/cups" #define CUPS_REQUESTS "/private/var/spool/cups" #define CUPS_SBINDIR "/usr/sbin" #define CUPS_SERVERBIN "/usr/libexec/cups" #define CUPS_SERVERROOT "/private/etc/cups" #define CUPS_STATEDIR "/private/etc/cups" /* * Do we have posix_spawn? */ #define HAVE_POSIX_SPAWN 1 /* * Do we have ZLIB? */ #define HAVE_LIBZ 1 #define HAVE_INFLATECOPY 1 /* * Do we have PAM stuff? */ #if TARGET_OS_OSX # define HAVE_LIBPAM 1 /* #undef HAVE_PAM_PAM_APPL_H */ # define HAVE_PAM_SET_ITEM 1 # define HAVE_PAM_SETCRED 1 #endif /* TARGET_OS_OSX */ /* * Do we have ? */ /* #undef HAVE_SHADOW_H */ /* * Do we have ? */ /* #undef HAVE_CRYPT_H */ /* * Use ? */ #define HAVE_STDINT_H 1 /* * Use , , and/or ? */ #define HAVE_STRING_H 1 #define HAVE_STRINGS_H 1 /* #undef HAVE_BSTRING_H */ /* * Do we have the long long type? */ #define HAVE_LONG_LONG 1 #ifdef HAVE_LONG_LONG # define CUPS_LLFMT "%lld" # define CUPS_LLCAST (long long) #else # define CUPS_LLFMT "%ld" # define CUPS_LLCAST (long) #endif /* HAVE_LONG_LONG */ /* * Do we have the strtoll() function? */ #define HAVE_STRTOLL 1 #ifndef HAVE_STRTOLL # define strtoll(nptr,endptr,base) strtol((nptr), (endptr), (base)) #endif /* !HAVE_STRTOLL */ /* * Do we have the strXXX() functions? */ #define HAVE_STRDUP 1 #define HAVE_STRLCAT 1 #define HAVE_STRLCPY 1 /* * Do we have the geteuid() function? */ #define HAVE_GETEUID 1 /* * Do we have the setpgid() function? */ #define HAVE_SETPGID 1 /* * Do we have the vsyslog() function? */ #define HAVE_VSYSLOG 1 /* * Do we have the systemd journal functions? */ /* #undef HAVE_SYSTEMD_SD_JOURNAL_H */ /* * Do we have the (v)snprintf() functions? */ #define HAVE_SNPRINTF 1 #define HAVE_VSNPRINTF 1 /* * What signal functions to use? */ #define HAVE_SIGSET 1 #define HAVE_SIGACTION 1 /* * What wait functions to use? */ #define HAVE_WAITPID 1 #define HAVE_WAIT3 1 /* * Do we have the mallinfo function and malloc.h? */ /* #undef HAVE_MALLINFO */ /* #undef HAVE_MALLOC_H */ /* * Do we have the POSIX ACL functions? */ #define HAVE_ACL_INIT 1 /* * Do we have the langinfo.h header file? */ #define HAVE_LANGINFO_H 1 /* * Which encryption libraries do we have? */ #define HAVE_CDSASSL 1 /* #undef HAVE_GNUTLS */ /* #undef HAVE_SSPISSL */ #define HAVE_SSL 1 /* * Do we have the gnutls_transport_set_pull_timeout_function function? */ /* #undef HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION */ /* * Do we have the gnutls_priority_set_direct function? */ /* #undef HAVE_GNUTLS_PRIORITY_SET_DIRECT */ /* * What Security framework headers do we have? */ #if !TARGET_OS_IOS # define HAVE_AUTHORIZATION_H 1 #endif /* !TARGET_OS_IOS */ /* #undef HAVE_SECBASEPRIV_H */ #define HAVE_SECCERTIFICATE_H 1 /* #undef HAVE_SECIDENTITYSEARCHPRIV_H */ #define HAVE_SECITEM_H 1 /* #undef HAVE_SECITEMPRIV_H */ #define HAVE_SECPOLICY_H 1 /* #undef HAVE_SECPOLICYPRIV_H */ /* #undef HAVE_SECURETRANSPORTPRIV_H */ /* * Do we have the cssmErrorString function? */ #if !TARGET_OS_IOS # define HAVE_CSSMERRORSTRING 1 #endif /* !TARGET_OS_IOS */ /* * Do we have the SecGenerateSelfSignedCertificate function? */ #if TARGET_OS_IOS # define HAVE_SECGENERATESELFSIGNEDCERTIFICATE 1 #endif /* TARGET_OS_IOS */ /* * Do we have the SecKeychainOpen function? */ #if !TARGET_OS_IOS # define HAVE_SECKEYCHAINOPEN 1 #endif /* !TARGET_OS_IOS */ /* * Do we have (a working) SSLSetEnabledCiphers function? */ #define HAVE_SSLSETENABLEDCIPHERS 1 /* * Do we have libpaper? */ /* #undef HAVE_LIBPAPER */ /* * Do we have mDNSResponder for DNS Service Discovery (aka Bonjour)? */ #define HAVE_DNSSD 1 /* * Do we have Avahi for DNS Service Discovery (aka Bonjour)? */ /* #undef HAVE_AVAHI */ /* * Do we have ? */ #define HAVE_SYS_IOCTL_H 1 /* * Does the "stat" structure contain the "st_gen" member? */ #define HAVE_ST_GEN 1 /* * Does the "tm" structure contain the "tm_gmtoff" member? */ #define HAVE_TM_GMTOFF 1 /* * Do we have rresvport_af()? */ #define HAVE_RRESVPORT_AF 1 /* * Do we have getaddrinfo()? */ #define HAVE_GETADDRINFO 1 /* * Do we have getnameinfo()? */ #define HAVE_GETNAMEINFO 1 /* * Do we have getifaddrs()? */ #define HAVE_GETIFADDRS 1 /* * Do we have hstrerror()? */ #define HAVE_HSTRERROR 1 /* * Do we have res_init()? */ #define HAVE_RES_INIT 1 /* * Do we have */ #define HAVE_RESOLV_H 1 /* * Do we have the header file? */ #define HAVE_SYS_SOCKIO_H 1 /* * Does the sockaddr structure contain an sa_len parameter? */ /* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */ /* * Do we have pthread support? */ #define HAVE_PTHREAD_H 1 /* * Do we have on-demand support (launchd/systemd/upstart)? */ #define HAVE_ONDEMAND 1 /* * Do we have launchd support? */ #define HAVE_LAUNCH_H 1 #define HAVE_LAUNCHD 1 /* * Do we have systemd support? */ /* #undef HAVE_SYSTEMD */ /* * Do we have upstart support? */ /* #undef HAVE_UPSTART */ /* * Various scripting languages... */ #if !TARGET_OS_IOS # define HAVE_JAVA 1 # define CUPS_JAVA "/usr/bin/java" # define HAVE_PERL 1 # define CUPS_PERL "/usr/bin/perl" # define HAVE_PHP 1 # define CUPS_PHP "/usr/bin/php" # define HAVE_PYTHON 1 # define CUPS_PYTHON "/usr/bin/python" #endif /* !TARGET_OS_IOS */ /* * Do we have CoreFoundation public and private headers? */ #define HAVE_COREFOUNDATION_H 1 /* #undef HAVE_CFPRIV_H */ /* #undef HAVE_CFBUNDLEPRIV_H */ /* * Do we have ApplicationServices public headers? */ #if !TARGET_OS_IOS # define HAVE_APPLICATIONSERVICES_H 1 #endif /* !TARGET_OS_IOS */ /* * Do we have the SCDynamicStoreCopyComputerName function? */ #if !TARGET_OS_IOS # define HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME 1 #endif /* !TARGET_OS_IOS */ /* * Do we have the getgrouplist() function? */ #define HAVE_GETGROUPLIST 1 /* * Do we have macOS 10.4's mbr_XXX functions? */ #define HAVE_MEMBERSHIP_H 1 /* #undef HAVE_MEMBERSHIPPRIV_H */ #define HAVE_MBR_UID_TO_UUID 1 /* * Do we have Darwin's notify_post header and function? */ #define HAVE_NOTIFY_H 1 #define HAVE_NOTIFY_POST 1 /* * Do we have DBUS? */ /* #undef HAVE_DBUS */ /* #undef HAVE_DBUS_MESSAGE_ITER_INIT_APPEND */ /* #undef HAVE_DBUS_THREADS_INIT */ /* * Do we have the GSSAPI support library (for Kerberos support)? */ #if !TARGET_OS_IOS # define HAVE_GSS_ACQUIRED_CRED_EX_F 1 # define HAVE_GSS_C_NT_HOSTBASED_SERVICE 1 # define HAVE_GSS_GSSAPI_H 1 /* #undef HAVE_GSS_GSSAPI_SPI_H */ # define HAVE_GSSAPI 1 /* #undef HAVE_GSSAPI_GSSAPI_H */ /* #undef HAVE_GSSAPI_H */ #endif /* !TARGET_OS_IOS */ /* * Default GSS service name... */ #define CUPS_DEFAULT_GSSSERVICENAME "host" /* * Select/poll interfaces... */ #define HAVE_POLL 1 /* #undef HAVE_EPOLL */ #define HAVE_KQUEUE 1 /* * Do we have the header? */ #define HAVE_DLFCN_H 1 /* * Do we have ? */ #define HAVE_SYS_PARAM_H 1 /* * Do we have ? */ #define HAVE_SYS_UCRED_H 1 /* * Do we have removefile()? */ #define HAVE_REMOVEFILE 1 /* * Do we have ? */ #define HAVE_SANDBOX_H 1 /* * Which random number generator function to use... */ #define HAVE_ARC4RANDOM 1 #define HAVE_RANDOM 1 #define HAVE_LRAND48 1 #ifdef HAVE_ARC4RANDOM # define CUPS_RAND() arc4random() # define CUPS_SRAND(v) #elif defined(HAVE_RANDOM) # define CUPS_RAND() random() # define CUPS_SRAND(v) srandom(v) #elif defined(HAVE_LRAND48) # define CUPS_RAND() lrand48() # define CUPS_SRAND(v) srand48(v) #else # define CUPS_RAND() rand() # define CUPS_SRAND(v) srand(v) #endif /* HAVE_ARC4RANDOM */ /* * Do we have libusb? */ /* #undef HAVE_LIBUSB */ /* * Do we have libwrap and tcpd.h? */ /* #undef HAVE_TCPD_H */ /* * Do we have ? */ #define HAVE_ICONV_H 1 /* * Do we have statfs or statvfs and one of the corresponding headers? */ #define HAVE_STATFS 1 #define HAVE_STATVFS 1 #define HAVE_SYS_MOUNT_H 1 /* #undef HAVE_SYS_STATFS_H */ #define HAVE_SYS_STATVFS_H 1 /* #undef HAVE_SYS_VFS_H */ /* * Location of macOS localization bundle, if any. */ #if !TARGET_OS_IOS # define CUPS_BUNDLEDIR "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A" #endif /* !TARGET_OS_IOS */ /* * Do we have XPC? */ #define HAVE_XPC 1 /* #undef HAVE_XPC_PRIVATE_H */ /* * Do we have Mini-XML? */ /* #undef HAVE_MXML_H */ /* * Do we have the C99 abs() function? */ #define HAVE_ABS 1 #if !defined(HAVE_ABS) && !defined(abs) # if defined(__GNUC__) || __STDC_VERSION__ >= 199901L # define abs(x) _cups_abs(x) static inline int _cups_abs(int i) { return (i < 0 ? -i : i); } # elif defined(_MSC_VER) # define abs(x) _cups_abs(x) static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); } # else # define abs(x) ((x) < 0 ? -(x) : (x)) # endif /* __GNUC__ || __STDC_VERSION__ */ #endif /* !HAVE_ABS && !abs */ #endif /* !_CUPS_CONFIG_H_ */ cups-2.2.7/xcode/CUPS.xcodeproj/000775 000765 000024 00000000000 13255074424 017023 5ustar00msweetstaff000000 000000 cups-2.2.7/xcode/README.txt000664 000765 000024 00000000264 13255074424 015755 0ustar00msweetstaff000000 000000 README - CUPS on macOS/iOS - 2016-08-08 --------------------------------------- This directory contains an Xcode project for building CUPS for macOS and the CUPS library for iOS. cups-2.2.7/xcode/CUPS.xcodeproj/project.pbxproj000664 000765 000024 00002203450 13255074424 022105 0ustar00msweetstaff000000 000000 // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXAggregateTarget section */ 273BF6D91333B6260022CAAB /* Tests */ = { isa = PBXAggregateTarget; buildConfigurationList = 273BF6DA1333B6270022CAAB /* Build configuration list for PBXAggregateTarget "Tests" */; buildPhases = ( ); dependencies = ( 270D02281D707E5100EA9403 /* PBXTargetDependency */, 271287361CC1411000E517C7 /* PBXTargetDependency */, 2712871C1CC13FFA00E517C7 /* PBXTargetDependency */, 271286DC1CC13EF400E517C7 /* PBXTargetDependency */, 271286DE1CC13EF400E517C7 /* PBXTargetDependency */, 271286E01CC13EF400E517C7 /* PBXTargetDependency */, 271284911CC11FA500E517C7 /* PBXTargetDependency */, 271284931CC11FA500E517C7 /* PBXTargetDependency */, 271284951CC11FA500E517C7 /* PBXTargetDependency */, 271284971CC11FA500E517C7 /* PBXTargetDependency */, 271284991CC11FA500E517C7 /* PBXTargetDependency */, 2712849B1CC11FA500E517C7 /* PBXTargetDependency */, 2712849D1CC11FA500E517C7 /* PBXTargetDependency */, 2712849F1CC11FA500E517C7 /* PBXTargetDependency */, 271284A11CC11FA500E517C7 /* PBXTargetDependency */, 271284A31CC11FA500E517C7 /* PBXTargetDependency */, 271284A51CC11FA500E517C7 /* PBXTargetDependency */, 271284A71CC11FA500E517C7 /* PBXTargetDependency */, 271284A91CC11FA500E517C7 /* PBXTargetDependency */, 271284AB1CC11FA500E517C7 /* PBXTargetDependency */, 271284AD1CC11FA500E517C7 /* PBXTargetDependency */, 271284AF1CC11FA500E517C7 /* PBXTargetDependency */, 271284B11CC11FA500E517C7 /* PBXTargetDependency */, 271284B31CC11FA500E517C7 /* PBXTargetDependency */, 271284B51CC11FA500E517C7 /* PBXTargetDependency */, 271284B71CC11FA500E517C7 /* PBXTargetDependency */, 271284B91CC11FA500E517C7 /* PBXTargetDependency */, 271284BB1CC11FA500E517C7 /* PBXTargetDependency */, 271284BD1CC11FA500E517C7 /* PBXTargetDependency */, 271284BF1CC11FA500E517C7 /* PBXTargetDependency */, 271284C11CC11FA500E517C7 /* PBXTargetDependency */, 271284C31CC11FA500E517C7 /* PBXTargetDependency */, 271284C51CC11FA500E517C7 /* PBXTargetDependency */, 271284C71CC11FA500E517C7 /* PBXTargetDependency */, 271284C91CC11FA500E517C7 /* PBXTargetDependency */, 726AD704135E8AA1002C930D /* PBXTargetDependency */, 2767FC5419267469000F61D3 /* PBXTargetDependency */, 273BF6DE1333B6370022CAAB /* PBXTargetDependency */, 2767FC5619267469000F61D3 /* PBXTargetDependency */, 278C58D6136B641D00836530 /* PBXTargetDependency */, 270CCDB2135E3CDE00007BE2 /* PBXTargetDependency */, ); name = Tests; productName = Tests; }; 274FF5DE13332D3000317ECB /* All */ = { isa = PBXAggregateTarget; buildConfigurationList = 274FF5DF13332D3100317ECB /* Build configuration list for PBXAggregateTarget "All" */; buildPhases = ( ); dependencies = ( 271287061CC13F8F00E517C7 /* PBXTargetDependency */, 271287081CC13F8F00E517C7 /* PBXTargetDependency */, 271286E21CC13F0100E517C7 /* PBXTargetDependency */, 271286E41CC13F0100E517C7 /* PBXTargetDependency */, 271286351CC12F9000E517C7 /* PBXTargetDependency */, 271286371CC12F9000E517C7 /* PBXTargetDependency */, 271286391CC12F9000E517C7 /* PBXTargetDependency */, 2712863B1CC12F9000E517C7 /* PBXTargetDependency */, 2712863D1CC12F9000E517C7 /* PBXTargetDependency */, 2712863F1CC12F9000E517C7 /* PBXTargetDependency */, 271286411CC12F9000E517C7 /* PBXTargetDependency */, 271286431CC12F9000E517C7 /* PBXTargetDependency */, 271286451CC12F9000E517C7 /* PBXTargetDependency */, 271286471CC12F9000E517C7 /* PBXTargetDependency */, 2712857E1CC1295A00E517C7 /* PBXTargetDependency */, 271285801CC1295A00E517C7 /* PBXTargetDependency */, 271285821CC1295A00E517C7 /* PBXTargetDependency */, 271285841CC1295A00E517C7 /* PBXTargetDependency */, 271285861CC1295A00E517C7 /* PBXTargetDependency */, 271285881CC1295A00E517C7 /* PBXTargetDependency */, 2712858A1CC1295A00E517C7 /* PBXTargetDependency */, 2712858C1CC1295A00E517C7 /* PBXTargetDependency */, 2712858E1CC1295A00E517C7 /* PBXTargetDependency */, 271285901CC1295A00E517C7 /* PBXTargetDependency */, 271285921CC1295A00E517C7 /* PBXTargetDependency */, 271285941CC1295A00E517C7 /* PBXTargetDependency */, 27A034871A8BDC6900650675 /* PBXTargetDependency */, 274FF5E313332D4300317ECB /* PBXTargetDependency */, 72BEA8D819AFA8BB0085F0F3 /* PBXTargetDependency */, 72F75A711336FACD004BB496 /* PBXTargetDependency */, 274FF5E513332D4300317ECB /* PBXTargetDependency */, 274FF622133331D300317ECB /* PBXTargetDependency */, 276684131337FA8D000D33D0 /* PBXTargetDependency */, 2766836B1337AA25000D33D0 /* PBXTargetDependency */, 274FF5E713332D4300317ECB /* PBXTargetDependency */, 274FF6E21333B33F00317ECB /* PBXTargetDependency */, 72F75A731336FACD004BB496 /* PBXTargetDependency */, 274FF6391333348400317ECB /* PBXTargetDependency */, 274FF5E913332D4300317ECB /* PBXTargetDependency */, 274FF648133335A300317ECB /* PBXTargetDependency */, 274FF65E13333A3400317ECB /* PBXTargetDependency */, 724379531333FECE009631B9 /* PBXTargetDependency */, 724379111333E4EA009631B9 /* PBXTargetDependency */, 72BEA8D619AFA8A00085F0F3 /* PBXTargetDependency */, 72BEA8D419AFA89C0085F0F3 /* PBXTargetDependency */, 276683FF1337F7C5000D33D0 /* PBXTargetDependency */, 7243792B1333E962009631B9 /* PBXTargetDependency */, 276683D71337B24A000D33D0 /* PBXTargetDependency */, 276683D91337B24A000D33D0 /* PBXTargetDependency */, 276683DB1337B24A000D33D0 /* PBXTargetDependency */, 276683DD1337B24A000D33D0 /* PBXTargetDependency */, 276683DF1337B24A000D33D0 /* PBXTargetDependency */, 7258EAEF13459ADA009286F1 /* PBXTargetDependency */, 720DD6D11358FDBE0064AA82 /* PBXTargetDependency */, 7243793F1333FD23009631B9 /* PBXTargetDependency */, 724379C31333FF7D009631B9 /* PBXTargetDependency */, ); name = All; productName = All; }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ 270696001CADF3E200FFE5FB /* array.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EB81333056300FCA411 /* array.c */; }; 270696021CADF3E200FFE5FB /* auth.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EBB1333056300FCA411 /* auth.c */; }; 270696071CADF3E200FFE5FB /* debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED1133305BB00FCA411 /* debug.c */; }; 270696081CADF3E200FFE5FB /* dest.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED2133305BB00FCA411 /* dest.c */; }; 270696091CADF3E200FFE5FB /* dir.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED3133305BB00FCA411 /* dir.c */; }; 2706960B1CADF3E200FFE5FB /* encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED6133305BB00FCA411 /* encode.c */; }; 2706960C1CADF3E200FFE5FB /* file.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED8133305BB00FCA411 /* file.c */; }; 2706960F1CADF3E200FFE5FB /* getputfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDC133305BB00FCA411 /* getputfile.c */; }; 270696101CADF3E200FFE5FB /* globals.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDD133305BB00FCA411 /* globals.c */; }; 270696111CADF3E200FFE5FB /* http-addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDE133305BB00FCA411 /* http-addr.c */; }; 270696121CADF3E200FFE5FB /* http-addrlist.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDF133305BB00FCA411 /* http-addrlist.c */; }; 270696131CADF3E200FFE5FB /* http-support.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE1133305BB00FCA411 /* http-support.c */; }; 270696141CADF3E200FFE5FB /* http.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE2133305BB00FCA411 /* http.c */; }; 270696161CADF3E200FFE5FB /* dest-options.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95E218A13543000FCAE4 /* dest-options.c */; }; 270696171CADF3E200FFE5FB /* ipp-support.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE5133305BB00FCA411 /* ipp-support.c */; }; 270696181CADF3E200FFE5FB /* ipp.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE6133305BB00FCA411 /* ipp.c */; }; 270696191CADF3E200FFE5FB /* langprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE8133305BB00FCA411 /* langprintf.c */; }; 2706961A1CADF3E200FFE5FB /* language.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EEA133305BB00FCA411 /* language.c */; }; 2706961D1CADF3E200FFE5FB /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EEF133305BB00FCA411 /* md5.c */; }; 2706961E1CADF3E200FFE5FB /* md5passwd.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF0133305BB00FCA411 /* md5passwd.c */; }; 2706961F1CADF3E200FFE5FB /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 7284F9EF1BFCCD940026F886 /* hash.c */; }; 270696201CADF3E200FFE5FB /* notify.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF1133305BB00FCA411 /* notify.c */; }; 270696211CADF3E200FFE5FB /* options.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF2133305BB00FCA411 /* options.c */; }; 270696221CADF3E200FFE5FB /* tls.c in Sources */ = {isa = PBXBuildFile; fileRef = 727AD5B619100A58009F6862 /* tls.c */; }; 270696251CADF3E200FFE5FB /* dest-job.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95E018A13543000FCAE4 /* dest-job.c */; }; 270696271CADF3E200FFE5FB /* pwg-media.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF8133305BB00FCA411 /* pwg-media.c */; }; 270696281CADF3E200FFE5FB /* dest-localization.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95E118A13543000FCAE4 /* dest-localization.c */; }; 270696291CADF3E200FFE5FB /* request.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EFB133305BB00FCA411 /* request.c */; }; 2706962C1CADF3E200FFE5FB /* snprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F00133305BB00FCA411 /* snprintf.c */; }; 2706962D1CADF3E200FFE5FB /* string.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F02133305BB00FCA411 /* string.c */; }; 2706962E1CADF3E200FFE5FB /* tempfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F03133305BB00FCA411 /* tempfile.c */; }; 2706962F1CADF3E200FFE5FB /* thread.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F05133305BB00FCA411 /* thread.c */; }; 270696301CADF3E200FFE5FB /* transcode.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F06133305BB00FCA411 /* transcode.c */; }; 270696311CADF3E200FFE5FB /* usersys.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F08133305BB00FCA411 /* usersys.c */; }; 270696341CADF3E200FFE5FB /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 270696351CADF3E200FFE5FB /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 270696381CADF3E200FFE5FB /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EF1536167A005426E1 /* libiconv.dylib */; }; 270696391CADF3E200FFE5FB /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7F01536167A005426E1 /* libresolv.dylib */; }; 2706963A1CADF3E200FFE5FB /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EC1536161C005426E1 /* libz.dylib */; }; 2706963B1CADF3E200FFE5FB /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 2706963D1CADF3E200FFE5FB /* adminutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EB71333056300FCA411 /* adminutil.h */; settings = {ATTRIBUTES = (); }; }; 2706963E1CADF3E200FFE5FB /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EB91333056300FCA411 /* array.h */; settings = {ATTRIBUTES = (); }; }; 2706963F1CADF3E200FFE5FB /* backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EBE1333056300FCA411 /* backend.h */; settings = {ATTRIBUTES = (); }; }; 270696401CADF3E200FFE5FB /* cups-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EC01333056300FCA411 /* cups-private.h */; settings = {ATTRIBUTES = (); }; }; 270696411CADF3E200FFE5FB /* debug-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EC31333056300FCA411 /* debug-private.h */; settings = {ATTRIBUTES = (); }; }; 270696421CADF3E200FFE5FB /* file-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220ED7133305BB00FCA411 /* file-private.h */; settings = {ATTRIBUTES = (); }; }; 270696431CADF3E200FFE5FB /* http-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE0133305BB00FCA411 /* http-private.h */; settings = {ATTRIBUTES = (); }; }; 270696441CADF3E200FFE5FB /* ipp-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE4133305BB00FCA411 /* ipp-private.h */; settings = {ATTRIBUTES = (); }; }; 270696451CADF3E200FFE5FB /* language-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE9133305BB00FCA411 /* language-private.h */; settings = {ATTRIBUTES = (); }; }; 270696461CADF3E200FFE5FB /* md5-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EEE133305BB00FCA411 /* md5-private.h */; settings = {ATTRIBUTES = (); }; }; 270696471CADF3E200FFE5FB /* ppd-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EF5133305BB00FCA411 /* ppd-private.h */; settings = {ATTRIBUTES = (); }; }; 270696481CADF3E200FFE5FB /* pwg-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EF9133305BB00FCA411 /* pwg-private.h */; settings = {ATTRIBUTES = (); }; }; 270696491CADF3E200FFE5FB /* snmp-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EFE133305BB00FCA411 /* snmp-private.h */; settings = {ATTRIBUTES = (); }; }; 2706964A1CADF3E200FFE5FB /* string-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F01133305BB00FCA411 /* string-private.h */; settings = {ATTRIBUTES = (); }; }; 2706964B1CADF3E200FFE5FB /* thread-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F04133305BB00FCA411 /* thread-private.h */; settings = {ATTRIBUTES = (); }; }; 2706964C1CADF3E200FFE5FB /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F471333063D00FCA411 /* config.h */; settings = {ATTRIBUTES = (); }; }; 2706964D1CADF3E200FFE5FB /* cups.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EC11333056300FCA411 /* cups.h */; settings = {ATTRIBUTES = (); }; }; 2706964E1CADF3E200FFE5FB /* dir.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220ED4133305BB00FCA411 /* dir.h */; settings = {ATTRIBUTES = (); }; }; 2706964F1CADF3E200FFE5FB /* file.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220ED9133305BB00FCA411 /* file.h */; settings = {ATTRIBUTES = (); }; }; 270696501CADF3E200FFE5FB /* http.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE3133305BB00FCA411 /* http.h */; settings = {ATTRIBUTES = (); }; }; 270696511CADF3E200FFE5FB /* ipp.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE7133305BB00FCA411 /* ipp.h */; settings = {ATTRIBUTES = (); }; }; 270696521CADF3E200FFE5FB /* language.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EEB133305BB00FCA411 /* language.h */; settings = {ATTRIBUTES = (); }; }; 270696531CADF3E200FFE5FB /* ppd.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EF7133305BB00FCA411 /* ppd.h */; settings = {ATTRIBUTES = (); }; }; 270696541CADF3E200FFE5FB /* sidechannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EFD133305BB00FCA411 /* sidechannel.h */; settings = {ATTRIBUTES = (); }; }; 270696551CADF3E200FFE5FB /* transcode.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F07133305BB00FCA411 /* transcode.h */; settings = {ATTRIBUTES = (); }; }; 270696561CADF3E200FFE5FB /* versioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F0A133305BB00FCA411 /* versioning.h */; settings = {ATTRIBUTES = (); }; }; 2706965B1CAE1A9A00FFE5FB /* util.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F09133305BB00FCA411 /* util.c */; }; 270CCDBC135E3D3E00007BE2 /* testmime.c in Sources */ = {isa = PBXBuildFile; fileRef = 270CCDBB135E3D3E00007BE2 /* testmime.c */; }; 270D02191D707E0200EA9403 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 270D021A1D707E0200EA9403 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 270D021B1D707E0200EA9403 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 270D021C1D707E0200EA9403 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EF1536167A005426E1 /* libiconv.dylib */; }; 270D021D1D707E0200EA9403 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7F01536167A005426E1 /* libresolv.dylib */; }; 270D021E1D707E0200EA9403 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EC1536161C005426E1 /* libz.dylib */; }; 270D021F1D707E0200EA9403 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 270D02261D707E3700EA9403 /* testcreds.c in Sources */ = {isa = PBXBuildFile; fileRef = 270D02251D707E3700EA9403 /* testcreds.c */; }; 271284D21CC1231300E517C7 /* snmp-supplies.c in Sources */ = {isa = PBXBuildFile; fileRef = 7243790C1333E4E3009631B9 /* snmp-supplies.c */; }; 271284D71CC124D700E517C7 /* libcupscgi_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 724FA76B1CC03AF60092477B /* libcupscgi_static.a */; }; 271284D81CC124E300E517C7 /* libcupscgi_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 724FA76B1CC03AF60092477B /* libcupscgi_static.a */; }; 271284D91CC124F000E517C7 /* libcupsppdc_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 724FA7401CC03AAF0092477B /* libcupsppdc_static.a */; }; 271284DA1CC1251400E517C7 /* libcupsimage_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 724FA70F1CC03A490092477B /* libcupsimage_static.a */; }; 271284DB1CC1251F00E517C7 /* libcupscgi_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 724FA76B1CC03AF60092477B /* libcupscgi_static.a */; }; 271284DC1CC1254C00E517C7 /* libcupsmime_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 724FA71F1CC03A990092477B /* libcupsmime_static.a */; }; 271284E71CC1261900E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271284ED1CC1262C00E517C7 /* cancel.c in Sources */ = {isa = PBXBuildFile; fileRef = 2732E089137A3F5200FAFEF6 /* cancel.c */; }; 271284F41CC1264B00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271284FA1CC1265800E517C7 /* cupsaccept.c in Sources */ = {isa = PBXBuildFile; fileRef = 2732E08A137A3F5200FAFEF6 /* cupsaccept.c */; }; 271285011CC1265D00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285071CC1267400E517C7 /* cupstestdsc.c in Sources */ = {isa = PBXBuildFile; fileRef = 2732E08B137A3F5200FAFEF6 /* cupstestdsc.c */; }; 2712850E1CC1267A00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285141CC1269400E517C7 /* lp.c in Sources */ = {isa = PBXBuildFile; fileRef = 2732E08C137A3F5200FAFEF6 /* lp.c */; }; 2712851B1CC1269700E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285211CC126A700E517C7 /* lpc.c in Sources */ = {isa = PBXBuildFile; fileRef = 271284DD1CC125FC00E517C7 /* lpc.c */; }; 271285281CC126AA00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 2712852E1CC126BC00E517C7 /* lpinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 2732E08E137A3F5200FAFEF6 /* lpinfo.c */; }; 271285351CC1270B00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 2712853B1CC1271B00E517C7 /* lpmove.c in Sources */ = {isa = PBXBuildFile; fileRef = 2732E08F137A3F5200FAFEF6 /* lpmove.c */; }; 271285421CC1271E00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285481CC1272900E517C7 /* lpoptions.c in Sources */ = {isa = PBXBuildFile; fileRef = 2732E090137A3F5200FAFEF6 /* lpoptions.c */; }; 2712854F1CC1272D00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285551CC1273C00E517C7 /* lpq.c in Sources */ = {isa = PBXBuildFile; fileRef = 271284DE1CC125FC00E517C7 /* lpq.c */; }; 2712855C1CC1274300E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285621CC1274F00E517C7 /* lpr.c in Sources */ = {isa = PBXBuildFile; fileRef = 271284DF1CC125FC00E517C7 /* lpr.c */; }; 271285691CC1275200E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 2712856F1CC1276000E517C7 /* lprm.c in Sources */ = {isa = PBXBuildFile; fileRef = 271284E01CC125FC00E517C7 /* lprm.c */; }; 271285761CC1276400E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 2712857C1CC1277000E517C7 /* lpstat.c in Sources */ = {isa = PBXBuildFile; fileRef = 2732E092137A3F5200FAFEF6 /* lpstat.c */; }; 2712859B1CC12D1300E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285A11CC12D2100E517C7 /* admin.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF02F192E3498001EF690 /* admin.c */; }; 271285A21CC12D2900E517C7 /* libcupscgi.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 724FA74F1CC03ACC0092477B /* libcupscgi.dylib */; }; 271285A91CC12D3A00E517C7 /* libcupscgi.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 724FA74F1CC03ACC0092477B /* libcupscgi.dylib */; }; 271285AA1CC12D3A00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285B01CC12D4A00E517C7 /* classes.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF032192E3498001EF690 /* classes.c */; }; 271285B71CC12D4E00E517C7 /* libcupscgi.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 724FA74F1CC03ACC0092477B /* libcupscgi.dylib */; }; 271285B81CC12D4E00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285BE1CC12D5C00E517C7 /* jobs.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF038192E3498001EF690 /* jobs.c */; }; 271285C51CC12D5E00E517C7 /* libcupscgi.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 724FA74F1CC03ACC0092477B /* libcupscgi.dylib */; }; 271285C61CC12D5E00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285CC1CC12D6D00E517C7 /* printers.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF03A192E3498001EF690 /* printers.c */; }; 271285D31CC12DBF00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285D91CC12DD000E517C7 /* commandtops.c in Sources */ = {isa = PBXBuildFile; fileRef = 7271881713746EA8001A2036 /* commandtops.c */; }; 271285E01CC12DDF00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285E61CC12DEF00E517C7 /* gziptoany.c in Sources */ = {isa = PBXBuildFile; fileRef = 7271881A13746EA8001A2036 /* gziptoany.c */; }; 271285ED1CC12E2D00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271285F31CC12E3C00E517C7 /* pstops.c in Sources */ = {isa = PBXBuildFile; fileRef = 7271882013746EA8001A2036 /* pstops.c */; }; 271285F41CC12E4200E517C7 /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = 7271881813746EA8001A2036 /* common.c */; }; 271285FB1CC12EEB00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271286011CC12EFA00E517C7 /* rastertoepson.c in Sources */ = {isa = PBXBuildFile; fileRef = 7271882113746EA8001A2036 /* rastertoepson.c */; }; 271286041CC12F0800E517C7 /* libcupsimage.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72F75A611336F9A3004BB496 /* libcupsimage.dylib */; }; 2712860D1CC12F0B00E517C7 /* libcupsimage.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72F75A611336F9A3004BB496 /* libcupsimage.dylib */; }; 2712860E1CC12F0B00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271286141CC12F1800E517C7 /* rastertohp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7271882213746EA8001A2036 /* rastertohp.c */; }; 2712861D1CC12F1A00E517C7 /* libcupsimage.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72F75A611336F9A3004BB496 /* libcupsimage.dylib */; }; 2712861E1CC12F1A00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271286241CC12F2600E517C7 /* rastertolabel.c in Sources */ = {isa = PBXBuildFile; fileRef = 7271882313746EA8001A2036 /* rastertolabel.c */; }; 2712865D1CC1309000E517C7 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 2712865E1CC1309000E517C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; 2712865F1CC1309000E517C7 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; 271286601CC1309000E517C7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; 271286611CC1309000E517C7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; 271286621CC1309000E517C7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; 271286691CC130C700E517C7 /* tlscheck.c in Sources */ = {isa = PBXBuildFile; fileRef = 271286681CC130BD00E517C7 /* tlscheck.c */; }; 271286731CC1310E00E517C7 /* libcupsimage_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 724FA70F1CC03A490092477B /* libcupsimage_static.a */; }; 271286741CC1310E00E517C7 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 271286751CC1310E00E517C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 271286761CC1310E00E517C7 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 271286771CC1310E00E517C7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 271286781CC1310E00E517C7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 2712867E1CC1311D00E517C7 /* rasterbench.c in Sources */ = {isa = PBXBuildFile; fileRef = 2712866A1CC130FF00E517C7 /* rasterbench.c */; }; 2712868D1CC13DC000E517C7 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 2712868E1CC13DC000E517C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 2712868F1CC13DC000E517C7 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 271286901CC13DC000E517C7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 271286911CC13DC000E517C7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 271286971CC13DEA00E517C7 /* checkpo.c in Sources */ = {isa = PBXBuildFile; fileRef = 271286831CC13D9600E517C7 /* checkpo.c */; }; 2712869E1CC13DF100E517C7 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 2712869F1CC13DF100E517C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 271286A01CC13DF100E517C7 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 271286A11CC13DF100E517C7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 271286A21CC13DF100E517C7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 271286A81CC13DFD00E517C7 /* po2strings.c in Sources */ = {isa = PBXBuildFile; fileRef = 271286851CC13D9600E517C7 /* po2strings.c */; }; 271286AF1CC13DFF00E517C7 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 271286B01CC13DFF00E517C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 271286B11CC13DFF00E517C7 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 271286B21CC13DFF00E517C7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 271286B31CC13DFF00E517C7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 271286B91CC13E1000E517C7 /* strings2po.c in Sources */ = {isa = PBXBuildFile; fileRef = 271286861CC13D9600E517C7 /* strings2po.c */; }; 271286C11CC13E2100E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271286C21CC13E2100E517C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 271286C31CC13E2100E517C7 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72D53A2C15B4913D003F877F /* IOKit.framework */; }; 271286C41CC13E2100E517C7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 271286CA1CC13E2E00E517C7 /* bcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 271286801CC1396100E517C7 /* bcp.c */; }; 271286D11CC13E5B00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271286D21CC13E5B00E517C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 271286D31CC13E5B00E517C7 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72D53A2C15B4913D003F877F /* IOKit.framework */; }; 271286D41CC13E5B00E517C7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 271286DA1CC13E6A00E517C7 /* tbcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 271286811CC1396100E517C7 /* tbcp.c */; }; 271286EB1CC13F2000E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271286EC1CC13F2000E517C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 271286ED1CC13F2000E517C7 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72D53A2C15B4913D003F877F /* IOKit.framework */; }; 271286EE1CC13F2000E517C7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 271286F41CC13F2F00E517C7 /* mailto.c in Sources */ = {isa = PBXBuildFile; fileRef = 724FA6D51CC039D00092477B /* mailto.c */; }; 271286FB1CC13F3F00E517C7 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 271286FC1CC13F3F00E517C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 271286FD1CC13F3F00E517C7 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72D53A2C15B4913D003F877F /* IOKit.framework */; }; 271286FE1CC13F3F00E517C7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 271287041CC13F4C00E517C7 /* rss.c in Sources */ = {isa = PBXBuildFile; fileRef = 724FA6D61CC039D00092477B /* rss.c */; }; 2712870F1CC13FAB00E517C7 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 271287101CC13FAB00E517C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 271287111CC13FAB00E517C7 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 271287121CC13FAB00E517C7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 271287131CC13FAB00E517C7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 2712871A1CC13FE800E517C7 /* mantohtml.c in Sources */ = {isa = PBXBuildFile; fileRef = 271287191CC13FDB00E517C7 /* mantohtml.c */; }; 2712872D1CC140D200E517C7 /* genstrings.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2712871D1CC140B400E517C7 /* genstrings.cxx */; }; 271287321CC140EB00E517C7 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 271287331CC140EB00E517C7 /* libcupsppdc_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 724FA7401CC03AAF0092477B /* libcupsppdc_static.a */; }; 271287341CC140F500E517C7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; 273BF6C71333B5370022CAAB /* testcups.c in Sources */ = {isa = PBXBuildFile; fileRef = 273BF6C61333B5370022CAAB /* testcups.c */; }; 274FF5D913332CC700317ECB /* cups-driverd.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5D613332CC700317ECB /* cups-driverd.cxx */; }; 274FF5DA13332CC700317ECB /* util.c in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5D713332CC700317ECB /* util.c */; }; 274FF5DD13332D0600317ECB /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 274FF60A1333315100317ECB /* ppdc-array.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5F51333315100317ECB /* ppdc-array.cxx */; }; 274FF60B1333315100317ECB /* ppdc-attr.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5F61333315100317ECB /* ppdc-attr.cxx */; }; 274FF60C1333315100317ECB /* ppdc-catalog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5F71333315100317ECB /* ppdc-catalog.cxx */; }; 274FF60D1333315100317ECB /* ppdc-choice.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5F81333315100317ECB /* ppdc-choice.cxx */; }; 274FF60E1333315100317ECB /* ppdc-constraint.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5F91333315100317ECB /* ppdc-constraint.cxx */; }; 274FF60F1333315100317ECB /* ppdc-driver.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5FA1333315100317ECB /* ppdc-driver.cxx */; }; 274FF6101333315100317ECB /* ppdc-file.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5FB1333315100317ECB /* ppdc-file.cxx */; }; 274FF6111333315100317ECB /* ppdc-filter.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5FC1333315100317ECB /* ppdc-filter.cxx */; }; 274FF6121333315100317ECB /* ppdc-font.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5FD1333315100317ECB /* ppdc-font.cxx */; }; 274FF6131333315100317ECB /* ppdc-group.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5FE1333315100317ECB /* ppdc-group.cxx */; }; 274FF6141333315100317ECB /* ppdc-import.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5FF1333315100317ECB /* ppdc-import.cxx */; }; 274FF6151333315100317ECB /* ppdc-mediasize.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6001333315100317ECB /* ppdc-mediasize.cxx */; }; 274FF6161333315100317ECB /* ppdc-message.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6011333315100317ECB /* ppdc-message.cxx */; }; 274FF6171333315100317ECB /* ppdc-option.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6021333315100317ECB /* ppdc-option.cxx */; }; 274FF6181333315100317ECB /* ppdc-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 274FF6031333315100317ECB /* ppdc-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 274FF6191333315100317ECB /* ppdc-profile.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6041333315100317ECB /* ppdc-profile.cxx */; }; 274FF61A1333315100317ECB /* ppdc-shared.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6051333315100317ECB /* ppdc-shared.cxx */; }; 274FF61B1333315100317ECB /* ppdc-source.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6061333315100317ECB /* ppdc-source.cxx */; }; 274FF61C1333315100317ECB /* ppdc-string.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6071333315100317ECB /* ppdc-string.cxx */; }; 274FF61D1333315100317ECB /* ppdc-variable.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6081333315100317ECB /* ppdc-variable.cxx */; }; 274FF61E1333315100317ECB /* ppdc.h in Headers */ = {isa = PBXBuildFile; fileRef = 274FF6091333315100317ECB /* ppdc.h */; settings = {ATTRIBUTES = (Private, ); }; }; 274FF6231333321400317ECB /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 274FF6241333323B00317ECB /* libcupsppdc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 274FF5EE133330C800317ECB /* libcupsppdc.dylib */; }; 274FF6321333334A00317ECB /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 274FF6361333344400317ECB /* cups-deviced.c in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6351333344400317ECB /* cups-deviced.c */; }; 274FF6371333345900317ECB /* util.c in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5D713332CC700317ECB /* util.c */; }; 274FF64A1333398D00317ECB /* cups-exec.c in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6491333398D00317ECB /* cups-exec.c */; }; 274FF658133339D300317ECB /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 274FF65C133339FC00317ECB /* cups-lpd.c in Sources */ = {isa = PBXBuildFile; fileRef = 274FF65B133339FC00317ECB /* cups-lpd.c */; }; 274FF68513333B4300317ECB /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 274FF68613333B4300317ECB /* libcupsmime.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220FAC13330B2200FCA411 /* libcupsmime.dylib */; }; 274FF68813333B6E00317ECB /* cupsfilter.c in Sources */ = {isa = PBXBuildFile; fileRef = 274FF68713333B6E00317ECB /* cupsfilter.c */; }; 274FF68B1333B1C400317ECB /* adminutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EB51333052D00FCA411 /* adminutil.c */; }; 274FF68C1333B1C400317ECB /* array.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EB81333056300FCA411 /* array.c */; }; 274FF68D1333B1C400317ECB /* ppd-attr.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EBA1333056300FCA411 /* ppd-attr.c */; }; 274FF68E1333B1C400317ECB /* auth.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EBB1333056300FCA411 /* auth.c */; }; 274FF68F1333B1C400317ECB /* backchannel.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EBC1333056300FCA411 /* backchannel.c */; }; 274FF6901333B1C400317ECB /* backend.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EBD1333056300FCA411 /* backend.c */; }; 274FF6911333B1C400317ECB /* ppd-conflicts.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EBF1333056300FCA411 /* ppd-conflicts.c */; }; 274FF6921333B1C400317ECB /* ppd-custom.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EC21333056300FCA411 /* ppd-custom.c */; }; 274FF6931333B1C400317ECB /* debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED1133305BB00FCA411 /* debug.c */; }; 274FF6941333B1C400317ECB /* dest.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED2133305BB00FCA411 /* dest.c */; }; 274FF6951333B1C400317ECB /* dir.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED3133305BB00FCA411 /* dir.c */; }; 274FF6961333B1C400317ECB /* ppd-emit.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED5133305BB00FCA411 /* ppd-emit.c */; }; 274FF6971333B1C400317ECB /* encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED6133305BB00FCA411 /* encode.c */; }; 274FF6981333B1C400317ECB /* file.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED8133305BB00FCA411 /* file.c */; }; 274FF6991333B1C400317ECB /* getdevices.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDA133305BB00FCA411 /* getdevices.c */; }; 274FF69A1333B1C400317ECB /* getifaddrs.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDB133305BB00FCA411 /* getifaddrs.c */; }; 274FF69B1333B1C400317ECB /* getputfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDC133305BB00FCA411 /* getputfile.c */; }; 274FF69C1333B1C400317ECB /* globals.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDD133305BB00FCA411 /* globals.c */; }; 274FF69D1333B1C400317ECB /* http-addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDE133305BB00FCA411 /* http-addr.c */; }; 274FF69E1333B1C400317ECB /* http-addrlist.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDF133305BB00FCA411 /* http-addrlist.c */; }; 274FF69F1333B1C400317ECB /* http-support.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE1133305BB00FCA411 /* http-support.c */; }; 274FF6A01333B1C400317ECB /* http.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE2133305BB00FCA411 /* http.c */; }; 274FF6A11333B1C400317ECB /* ipp-support.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE5133305BB00FCA411 /* ipp-support.c */; }; 274FF6A21333B1C400317ECB /* ipp.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE6133305BB00FCA411 /* ipp.c */; }; 274FF6A31333B1C400317ECB /* langprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE8133305BB00FCA411 /* langprintf.c */; }; 274FF6A41333B1C400317ECB /* language.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EEA133305BB00FCA411 /* language.c */; }; 274FF6A51333B1C400317ECB /* ppd-localize.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EEC133305BB00FCA411 /* ppd-localize.c */; }; 274FF6A61333B1C400317ECB /* ppd-mark.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EED133305BB00FCA411 /* ppd-mark.c */; }; 274FF6A71333B1C400317ECB /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EEF133305BB00FCA411 /* md5.c */; }; 274FF6A81333B1C400317ECB /* md5passwd.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF0133305BB00FCA411 /* md5passwd.c */; }; 274FF6A91333B1C400317ECB /* notify.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF1133305BB00FCA411 /* notify.c */; }; 274FF6AA1333B1C400317ECB /* options.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF2133305BB00FCA411 /* options.c */; }; 274FF6AB1333B1C400317ECB /* ppd-page.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF3133305BB00FCA411 /* ppd-page.c */; }; 274FF6AC1333B1C400317ECB /* ppd-cache.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF4133305BB00FCA411 /* ppd-cache.c */; }; 274FF6AD1333B1C400317ECB /* ppd.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF6133305BB00FCA411 /* ppd.c */; }; 274FF6AE1333B1C400317ECB /* pwg-media.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF8133305BB00FCA411 /* pwg-media.c */; }; 274FF6AF1333B1C400317ECB /* request.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EFB133305BB00FCA411 /* request.c */; }; 274FF6B01333B1C400317ECB /* sidechannel.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EFC133305BB00FCA411 /* sidechannel.c */; }; 274FF6B11333B1C400317ECB /* snmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EFF133305BB00FCA411 /* snmp.c */; }; 274FF6B21333B1C400317ECB /* snprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F00133305BB00FCA411 /* snprintf.c */; }; 274FF6B31333B1C400317ECB /* string.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F02133305BB00FCA411 /* string.c */; }; 274FF6B41333B1C400317ECB /* tempfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F03133305BB00FCA411 /* tempfile.c */; }; 274FF6B51333B1C400317ECB /* thread.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F05133305BB00FCA411 /* thread.c */; }; 274FF6B61333B1C400317ECB /* transcode.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F06133305BB00FCA411 /* transcode.c */; }; 274FF6B71333B1C400317ECB /* usersys.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F08133305BB00FCA411 /* usersys.c */; }; 274FF6B81333B1C400317ECB /* util.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F09133305BB00FCA411 /* util.c */; }; 274FF6C21333B1C400317ECB /* adminutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EB71333056300FCA411 /* adminutil.h */; settings = {ATTRIBUTES = (); }; }; 274FF6C31333B1C400317ECB /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EB91333056300FCA411 /* array.h */; settings = {ATTRIBUTES = (); }; }; 274FF6C41333B1C400317ECB /* backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EBE1333056300FCA411 /* backend.h */; settings = {ATTRIBUTES = (); }; }; 274FF6C51333B1C400317ECB /* cups.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EC11333056300FCA411 /* cups.h */; settings = {ATTRIBUTES = (); }; }; 274FF6C61333B1C400317ECB /* dir.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220ED4133305BB00FCA411 /* dir.h */; settings = {ATTRIBUTES = (); }; }; 274FF6C71333B1C400317ECB /* file.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220ED9133305BB00FCA411 /* file.h */; settings = {ATTRIBUTES = (); }; }; 274FF6C81333B1C400317ECB /* http.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE3133305BB00FCA411 /* http.h */; settings = {ATTRIBUTES = (); }; }; 274FF6C91333B1C400317ECB /* ipp.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE7133305BB00FCA411 /* ipp.h */; settings = {ATTRIBUTES = (); }; }; 274FF6CA1333B1C400317ECB /* language.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EEB133305BB00FCA411 /* language.h */; settings = {ATTRIBUTES = (); }; }; 274FF6CB1333B1C400317ECB /* ppd.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EF7133305BB00FCA411 /* ppd.h */; settings = {ATTRIBUTES = (); }; }; 274FF6CD1333B1C400317ECB /* sidechannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EFD133305BB00FCA411 /* sidechannel.h */; settings = {ATTRIBUTES = (); }; }; 274FF6CE1333B1C400317ECB /* transcode.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F07133305BB00FCA411 /* transcode.h */; settings = {ATTRIBUTES = (); }; }; 274FF6CF1333B1C400317ECB /* versioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F0A133305BB00FCA411 /* versioning.h */; settings = {ATTRIBUTES = (); }; }; 274FF6D01333B1C400317ECB /* cups-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EC01333056300FCA411 /* cups-private.h */; settings = {ATTRIBUTES = (); }; }; 274FF6D11333B1C400317ECB /* debug-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EC31333056300FCA411 /* debug-private.h */; settings = {ATTRIBUTES = (); }; }; 274FF6D21333B1C400317ECB /* file-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220ED7133305BB00FCA411 /* file-private.h */; settings = {ATTRIBUTES = (); }; }; 274FF6D31333B1C400317ECB /* http-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE0133305BB00FCA411 /* http-private.h */; settings = {ATTRIBUTES = (); }; }; 274FF6D41333B1C400317ECB /* ipp-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE4133305BB00FCA411 /* ipp-private.h */; settings = {ATTRIBUTES = (); }; }; 274FF6D51333B1C400317ECB /* language-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE9133305BB00FCA411 /* language-private.h */; settings = {ATTRIBUTES = (); }; }; 274FF6D61333B1C400317ECB /* md5-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EEE133305BB00FCA411 /* md5-private.h */; settings = {ATTRIBUTES = (); }; }; 274FF6D71333B1C400317ECB /* ppd-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EF5133305BB00FCA411 /* ppd-private.h */; settings = {ATTRIBUTES = (); }; }; 274FF6D81333B1C400317ECB /* pwg-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EF9133305BB00FCA411 /* pwg-private.h */; settings = {ATTRIBUTES = (); }; }; 274FF6D91333B1C400317ECB /* snmp-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EFE133305BB00FCA411 /* snmp-private.h */; settings = {ATTRIBUTES = (); }; }; 274FF6DA1333B1C400317ECB /* string-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F01133305BB00FCA411 /* string-private.h */; settings = {ATTRIBUTES = (); }; }; 274FF6DB1333B1C400317ECB /* thread-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F04133305BB00FCA411 /* thread-private.h */; settings = {ATTRIBUTES = (); }; }; 274FF6DC1333B1C400317ECB /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F471333063D00FCA411 /* config.h */; settings = {ATTRIBUTES = (); }; }; 276683671337A9E0000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 276683691337AA00000D33D0 /* cupsctl.c in Sources */ = {isa = PBXBuildFile; fileRef = 276683681337AA00000D33D0 /* cupsctl.c */; }; 276683B11337AD06000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 276683B21337AD06000D33D0 /* libcupsppdc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 274FF5EE133330C800317ECB /* libcupsppdc.dylib */; }; 276683B71337AD23000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 276683B81337AD23000D33D0 /* libcupsppdc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 274FF5EE133330C800317ECB /* libcupsppdc.dylib */; }; 276683B91337AD31000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 276683BA1337AD31000D33D0 /* libcupsppdc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 274FF5EE133330C800317ECB /* libcupsppdc.dylib */; }; 276683C31337B1B3000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 276683C41337B1B3000D33D0 /* libcupsppdc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 274FF5EE133330C800317ECB /* libcupsppdc.dylib */; }; 276683C91337B1C1000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 276683CA1337B1C1000D33D0 /* libcupsppdc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 274FF5EE133330C800317ECB /* libcupsppdc.dylib */; }; 276683CD1337B201000D33D0 /* ppdc.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 276683CC1337B201000D33D0 /* ppdc.cxx */; }; 276683CF1337B20D000D33D0 /* ppdhtml.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 276683CE1337B20D000D33D0 /* ppdhtml.cxx */; }; 276683D11337B21A000D33D0 /* ppdi.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 276683D01337B21A000D33D0 /* ppdi.cxx */; }; 276683D31337B228000D33D0 /* ppdmerge.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 276683D21337B228000D33D0 /* ppdmerge.cxx */; }; 276683D51337B237000D33D0 /* ppdpo.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 276683D41337B237000D33D0 /* ppdpo.cxx */; }; 276683E21337B29C000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 276683E51337B2BE000D33D0 /* libcupsimage.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72F75A611336F9A3004BB496 /* libcupsimage.dylib */; }; 276683FA1337F7A9000D33D0 /* ipptool.c in Sources */ = {isa = PBXBuildFile; fileRef = 276683F91337F7A9000D33D0 /* ipptool.c */; }; 276683FD1337F7B8000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 2766840F1337FA38000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 276684111337FA7C000D33D0 /* cupsaddsmb.c in Sources */ = {isa = PBXBuildFile; fileRef = 276684101337FA7C000D33D0 /* cupsaddsmb.c */; }; 2767FC5219266A36000F61D3 /* testdest.c in Sources */ = {isa = PBXBuildFile; fileRef = 2767FC5119266A36000F61D3 /* testdest.c */; }; 2767FC57192674C4000F61D3 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 2767FC58192674E0000F61D3 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 2767FC5F1926750C000F61D3 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; 2767FC601926750C000F61D3 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5A1926750C000F61D3 /* libiconv.dylib */; }; 2767FC611926750C000F61D3 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; 2767FC621926750C000F61D3 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; 2767FC631926750C000F61D3 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; 2767FC641926750C000F61D3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; 2767FC6519267538000F61D3 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 2767FC6619267538000F61D3 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; 2767FC6719267538000F61D3 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; 2767FC6819267538000F61D3 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; 2767FC6919267538000F61D3 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; 2767FC6A19267538000F61D3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; 2767FC6B192685E6000F61D3 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 2767FC6C192685E6000F61D3 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; 2767FC6D192685E6000F61D3 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5A1926750C000F61D3 /* libiconv.dylib */; }; 2767FC6E192685E6000F61D3 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; 2767FC6F192685E6000F61D3 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; 2767FC70192685E6000F61D3 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; 2767FC71192685E6000F61D3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; 2767FC7219268F06000F61D3 /* dest-job.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95E018A13543000FCAE4 /* dest-job.c */; }; 2767FC7319268F09000F61D3 /* dest-localization.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95E118A13543000FCAE4 /* dest-localization.c */; }; 2767FC7419268F0C000F61D3 /* dest-options.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95E218A13543000FCAE4 /* dest-options.c */; }; 278C58E3136B647200836530 /* testhttp.c in Sources */ = {isa = PBXBuildFile; fileRef = 278C58E2136B647200836530 /* testhttp.c */; }; 278C58E9136B64B000836530 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 278C58EA136B64B000836530 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 278C58EB136B64B000836530 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 278C58EC136B64B000836530 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 27A034821A8BDC3A00650675 /* lpadmin.c in Sources */ = {isa = PBXBuildFile; fileRef = 2732E08D137A3F5200FAFEF6 /* lpadmin.c */; }; 27A034851A8BDC5C00650675 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 7200511218F492F200E7B81B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 720DD6CD1358FD720064AA82 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 720DD6D31358FDDE0064AA82 /* snmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 720DD6D21358FDDE0064AA82 /* snmp.c */; }; 720DD6D413590AB90064AA82 /* ieee1284.c in Sources */ = {isa = PBXBuildFile; fileRef = 724379CA1334000E009631B9 /* ieee1284.c */; }; 72220EB61333052D00FCA411 /* adminutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EB51333052D00FCA411 /* adminutil.c */; }; 72220EC41333056300FCA411 /* adminutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EB71333056300FCA411 /* adminutil.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220EC51333056300FCA411 /* array.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EB81333056300FCA411 /* array.c */; }; 72220EC61333056300FCA411 /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EB91333056300FCA411 /* array.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220EC71333056300FCA411 /* ppd-attr.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EBA1333056300FCA411 /* ppd-attr.c */; }; 72220EC81333056300FCA411 /* auth.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EBB1333056300FCA411 /* auth.c */; }; 72220EC91333056300FCA411 /* backchannel.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EBC1333056300FCA411 /* backchannel.c */; }; 72220ECA1333056300FCA411 /* backend.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EBD1333056300FCA411 /* backend.c */; }; 72220ECB1333056300FCA411 /* backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EBE1333056300FCA411 /* backend.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220ECC1333056300FCA411 /* ppd-conflicts.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EBF1333056300FCA411 /* ppd-conflicts.c */; }; 72220ECD1333056300FCA411 /* cups-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EC01333056300FCA411 /* cups-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220ECE1333056300FCA411 /* cups.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EC11333056300FCA411 /* cups.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220ECF1333056300FCA411 /* ppd-custom.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EC21333056300FCA411 /* ppd-custom.c */; }; 72220ED01333056300FCA411 /* debug-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EC31333056300FCA411 /* debug-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220F0B133305BB00FCA411 /* debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED1133305BB00FCA411 /* debug.c */; }; 72220F0C133305BB00FCA411 /* dest.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED2133305BB00FCA411 /* dest.c */; }; 72220F0D133305BB00FCA411 /* dir.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED3133305BB00FCA411 /* dir.c */; }; 72220F0E133305BB00FCA411 /* dir.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220ED4133305BB00FCA411 /* dir.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220F0F133305BB00FCA411 /* ppd-emit.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED5133305BB00FCA411 /* ppd-emit.c */; }; 72220F10133305BB00FCA411 /* encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED6133305BB00FCA411 /* encode.c */; }; 72220F11133305BB00FCA411 /* file-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220ED7133305BB00FCA411 /* file-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220F12133305BB00FCA411 /* file.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220ED8133305BB00FCA411 /* file.c */; }; 72220F13133305BB00FCA411 /* file.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220ED9133305BB00FCA411 /* file.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220F14133305BB00FCA411 /* getdevices.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDA133305BB00FCA411 /* getdevices.c */; }; 72220F15133305BB00FCA411 /* getifaddrs.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDB133305BB00FCA411 /* getifaddrs.c */; }; 72220F16133305BB00FCA411 /* getputfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDC133305BB00FCA411 /* getputfile.c */; }; 72220F17133305BB00FCA411 /* globals.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDD133305BB00FCA411 /* globals.c */; }; 72220F18133305BB00FCA411 /* http-addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDE133305BB00FCA411 /* http-addr.c */; }; 72220F19133305BB00FCA411 /* http-addrlist.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EDF133305BB00FCA411 /* http-addrlist.c */; }; 72220F1A133305BB00FCA411 /* http-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE0133305BB00FCA411 /* http-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220F1B133305BB00FCA411 /* http-support.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE1133305BB00FCA411 /* http-support.c */; }; 72220F1C133305BB00FCA411 /* http.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE2133305BB00FCA411 /* http.c */; }; 72220F1D133305BB00FCA411 /* http.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE3133305BB00FCA411 /* http.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220F1E133305BB00FCA411 /* ipp-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE4133305BB00FCA411 /* ipp-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220F1F133305BB00FCA411 /* ipp-support.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE5133305BB00FCA411 /* ipp-support.c */; }; 72220F20133305BB00FCA411 /* ipp.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE6133305BB00FCA411 /* ipp.c */; }; 72220F21133305BB00FCA411 /* ipp.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE7133305BB00FCA411 /* ipp.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220F22133305BB00FCA411 /* langprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EE8133305BB00FCA411 /* langprintf.c */; }; 72220F23133305BB00FCA411 /* language-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EE9133305BB00FCA411 /* language-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220F24133305BB00FCA411 /* language.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EEA133305BB00FCA411 /* language.c */; }; 72220F25133305BB00FCA411 /* language.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EEB133305BB00FCA411 /* language.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220F26133305BB00FCA411 /* ppd-localize.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EEC133305BB00FCA411 /* ppd-localize.c */; }; 72220F27133305BB00FCA411 /* ppd-mark.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EED133305BB00FCA411 /* ppd-mark.c */; }; 72220F28133305BB00FCA411 /* md5-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EEE133305BB00FCA411 /* md5-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220F29133305BB00FCA411 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EEF133305BB00FCA411 /* md5.c */; }; 72220F2A133305BB00FCA411 /* md5passwd.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF0133305BB00FCA411 /* md5passwd.c */; }; 72220F2B133305BB00FCA411 /* notify.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF1133305BB00FCA411 /* notify.c */; }; 72220F2C133305BB00FCA411 /* options.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF2133305BB00FCA411 /* options.c */; }; 72220F2D133305BB00FCA411 /* ppd-page.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF3133305BB00FCA411 /* ppd-page.c */; }; 72220F2E133305BB00FCA411 /* ppd-cache.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF4133305BB00FCA411 /* ppd-cache.c */; }; 72220F2F133305BB00FCA411 /* ppd-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EF5133305BB00FCA411 /* ppd-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220F30133305BB00FCA411 /* ppd.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF6133305BB00FCA411 /* ppd.c */; }; 72220F31133305BB00FCA411 /* ppd.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EF7133305BB00FCA411 /* ppd.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220F32133305BB00FCA411 /* pwg-media.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EF8133305BB00FCA411 /* pwg-media.c */; }; 72220F33133305BB00FCA411 /* pwg-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EF9133305BB00FCA411 /* pwg-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220F35133305BB00FCA411 /* request.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EFB133305BB00FCA411 /* request.c */; }; 72220F36133305BB00FCA411 /* sidechannel.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EFC133305BB00FCA411 /* sidechannel.c */; }; 72220F37133305BB00FCA411 /* sidechannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EFD133305BB00FCA411 /* sidechannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220F38133305BB00FCA411 /* snmp-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EFE133305BB00FCA411 /* snmp-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220F39133305BB00FCA411 /* snmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220EFF133305BB00FCA411 /* snmp.c */; }; 72220F3A133305BB00FCA411 /* snprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F00133305BB00FCA411 /* snprintf.c */; }; 72220F3B133305BB00FCA411 /* string-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F01133305BB00FCA411 /* string-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220F3C133305BB00FCA411 /* string.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F02133305BB00FCA411 /* string.c */; }; 72220F3D133305BB00FCA411 /* tempfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F03133305BB00FCA411 /* tempfile.c */; }; 72220F3E133305BB00FCA411 /* thread-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F04133305BB00FCA411 /* thread-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220F3F133305BB00FCA411 /* thread.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F05133305BB00FCA411 /* thread.c */; }; 72220F40133305BB00FCA411 /* transcode.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F06133305BB00FCA411 /* transcode.c */; }; 72220F41133305BB00FCA411 /* transcode.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F07133305BB00FCA411 /* transcode.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220F42133305BB00FCA411 /* usersys.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F08133305BB00FCA411 /* usersys.c */; }; 72220F43133305BB00FCA411 /* util.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F09133305BB00FCA411 /* util.c */; }; 72220F44133305BB00FCA411 /* versioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F0A133305BB00FCA411 /* versioning.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72220F481333063D00FCA411 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220F471333063D00FCA411 /* config.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220F6613330A7000FCA411 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 72220F9013330B0C00FCA411 /* auth.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F6913330B0C00FCA411 /* auth.c */; }; 72220F9113330B0C00FCA411 /* banners.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F6B13330B0C00FCA411 /* banners.c */; }; 72220F9213330B0C00FCA411 /* cert.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F6D13330B0C00FCA411 /* cert.c */; }; 72220F9313330B0C00FCA411 /* classes.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F6F13330B0C00FCA411 /* classes.c */; }; 72220F9413330B0C00FCA411 /* client.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F7113330B0C00FCA411 /* client.c */; }; 72220F9513330B0C00FCA411 /* conf.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F7313330B0C00FCA411 /* conf.c */; }; 72220F9613330B0C00FCA411 /* dirsvc.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F7613330B0C00FCA411 /* dirsvc.c */; }; 72220F9713330B0C00FCA411 /* env.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F7813330B0C00FCA411 /* env.c */; }; 72220F9813330B0C00FCA411 /* ipp.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F7913330B0C00FCA411 /* ipp.c */; }; 72220F9913330B0C00FCA411 /* job.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F7A13330B0C00FCA411 /* job.c */; }; 72220F9A13330B0C00FCA411 /* listen.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F7C13330B0C00FCA411 /* listen.c */; }; 72220F9B13330B0C00FCA411 /* log.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F7D13330B0C00FCA411 /* log.c */; }; 72220F9C13330B0C00FCA411 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F7E13330B0C00FCA411 /* main.c */; }; 72220F9D13330B0C00FCA411 /* network.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F7F13330B0C00FCA411 /* network.c */; }; 72220F9E13330B0C00FCA411 /* policy.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F8113330B0C00FCA411 /* policy.c */; }; 72220F9F13330B0C00FCA411 /* printers.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F8313330B0C00FCA411 /* printers.c */; }; 72220FA013330B0C00FCA411 /* process.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F8513330B0C00FCA411 /* process.c */; }; 72220FA113330B0C00FCA411 /* quotas.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F8613330B0C00FCA411 /* quotas.c */; }; 72220FA313330B0C00FCA411 /* select.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F8813330B0C00FCA411 /* select.c */; }; 72220FA413330B0C00FCA411 /* server.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F8913330B0C00FCA411 /* server.c */; }; 72220FA513330B0C00FCA411 /* statbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F8A13330B0C00FCA411 /* statbuf.c */; }; 72220FA613330B0C00FCA411 /* subscriptions.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F8C13330B0C00FCA411 /* subscriptions.c */; }; 72220FA713330B0C00FCA411 /* sysman.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220F8E13330B0C00FCA411 /* sysman.c */; }; 72220FB613330BCE00FCA411 /* filter.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220FB213330BCE00FCA411 /* filter.c */; }; 72220FB713330BCE00FCA411 /* mime.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220FB313330BCE00FCA411 /* mime.c */; }; 72220FB813330BCE00FCA411 /* mime.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220FB413330BCE00FCA411 /* mime.h */; settings = {ATTRIBUTES = (Private, ); }; }; 72220FB913330BCE00FCA411 /* type.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220FB513330BCE00FCA411 /* type.c */; }; 72220FBA13330BEE00FCA411 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 72220FBF13330C1000FCA411 /* libcupsmime.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220FAC13330B2200FCA411 /* libcupsmime.dylib */; }; 7234F4201378A16F00D3E9C9 /* array-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7234F41F1378A16F00D3E9C9 /* array-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 724379081333E4A5009631B9 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 7243790D1333E4E3009631B9 /* ipp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7243790A1333E4E3009631B9 /* ipp.c */; }; 7243790E1333E4E3009631B9 /* network.c in Sources */ = {isa = PBXBuildFile; fileRef = 7243790B1333E4E3009631B9 /* network.c */; }; 7243790F1333E4E3009631B9 /* snmp-supplies.c in Sources */ = {isa = PBXBuildFile; fileRef = 7243790C1333E4E3009631B9 /* snmp-supplies.c */; }; 724379131333E516009631B9 /* runloop.c in Sources */ = {isa = PBXBuildFile; fileRef = 724379121333E516009631B9 /* runloop.c */; }; 724379221333E928009631B9 /* network.c in Sources */ = {isa = PBXBuildFile; fileRef = 7243790B1333E4E3009631B9 /* network.c */; }; 724379231333E928009631B9 /* runloop.c in Sources */ = {isa = PBXBuildFile; fileRef = 724379121333E516009631B9 /* runloop.c */; }; 724379241333E928009631B9 /* snmp-supplies.c in Sources */ = {isa = PBXBuildFile; fileRef = 7243790C1333E4E3009631B9 /* snmp-supplies.c */; }; 724379271333E93D009631B9 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 724379291333E952009631B9 /* lpd.c in Sources */ = {isa = PBXBuildFile; fileRef = 724379281333E952009631B9 /* lpd.c */; }; 7243793B1333FB9D009631B9 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 7243793D1333FD19009631B9 /* socket.c in Sources */ = {isa = PBXBuildFile; fileRef = 7243793C1333FD19009631B9 /* socket.c */; }; 724379401333FD4B009631B9 /* network.c in Sources */ = {isa = PBXBuildFile; fileRef = 7243790B1333E4E3009631B9 /* network.c */; }; 724379411333FD4B009631B9 /* runloop.c in Sources */ = {isa = PBXBuildFile; fileRef = 724379121333E516009631B9 /* runloop.c */; }; 724379421333FD4B009631B9 /* snmp-supplies.c in Sources */ = {isa = PBXBuildFile; fileRef = 7243790C1333E4E3009631B9 /* snmp-supplies.c */; }; 724379511333FEBB009631B9 /* dnssd.c in Sources */ = {isa = PBXBuildFile; fileRef = 724379501333FEBB009631B9 /* dnssd.c */; }; 724379561333FF04009631B9 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 724379661333FF3B009631B9 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 724379C71333FFC7009631B9 /* usb.c in Sources */ = {isa = PBXBuildFile; fileRef = 724379C51333FFC7009631B9 /* usb.c */; }; 724379CB1334000E009631B9 /* ieee1284.c in Sources */ = {isa = PBXBuildFile; fileRef = 724379CA1334000E009631B9 /* ieee1284.c */; }; 724FA52A1CC0370C0092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; 724FA52B1CC0370C0092477B /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5A1926750C000F61D3 /* libiconv.dylib */; }; 724FA52C1CC0370C0092477B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; 724FA52D1CC0370C0092477B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; 724FA52E1CC0370C0092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; 724FA52F1CC0370C0092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; 724FA5301CC0370C0092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA5361CC0372F0092477B /* testadmin.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF041192E3544001EF690 /* testadmin.c */; }; 724FA53D1CC037370092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; 724FA53E1CC037370092477B /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5A1926750C000F61D3 /* libiconv.dylib */; }; 724FA53F1CC037370092477B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; 724FA5401CC037370092477B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; 724FA5411CC037370092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; 724FA5421CC037370092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; 724FA5431CC037370092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA5491CC037460092477B /* testarray.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF042192E3544001EF690 /* testarray.c */; }; 724FA5501CC037500092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; 724FA5511CC037500092477B /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5A1926750C000F61D3 /* libiconv.dylib */; }; 724FA5521CC037500092477B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; 724FA5531CC037500092477B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; 724FA5541CC037500092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; 724FA5551CC037500092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; 724FA5561CC037500092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA55C1CC0375F0092477B /* testcache.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF043192E3544001EF690 /* testcache.c */; }; 724FA5631CC037670092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; 724FA5641CC037670092477B /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5A1926750C000F61D3 /* libiconv.dylib */; }; 724FA5651CC037670092477B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; 724FA5661CC037670092477B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; 724FA5671CC037670092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; 724FA5681CC037670092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; 724FA5691CC037670092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA56F1CC037760092477B /* testconflicts.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF044192E3544001EF690 /* testconflicts.c */; }; 724FA5761CC037810092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA5771CC037810092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; 724FA5781CC037810092477B /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5A1926750C000F61D3 /* libiconv.dylib */; }; 724FA5791CC037810092477B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; 724FA57A1CC037810092477B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; 724FA57B1CC037810092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; 724FA57C1CC037810092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; 724FA5821CC0378E0092477B /* testfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF045192E3544001EF690 /* testfile.c */; }; 724FA5891CC037980092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA58A1CC037980092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA58B1CC037980092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA58C1CC037980092477B /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EF1536167A005426E1 /* libiconv.dylib */; }; 724FA58D1CC037980092477B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7F01536167A005426E1 /* libresolv.dylib */; }; 724FA58E1CC037980092477B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EC1536161C005426E1 /* libz.dylib */; }; 724FA58F1CC037980092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA5951CC037A50092477B /* testi18n.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF046192E3544001EF690 /* testi18n.c */; }; 724FA59C1CC037AA0092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA59D1CC037AA0092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA59E1CC037AA0092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA59F1CC037AA0092477B /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EF1536167A005426E1 /* libiconv.dylib */; }; 724FA5A01CC037AA0092477B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7F01536167A005426E1 /* libresolv.dylib */; }; 724FA5A11CC037AA0092477B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EC1536161C005426E1 /* libz.dylib */; }; 724FA5A21CC037AA0092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA5A81CC037B70092477B /* testipp.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF047192E3544001EF690 /* testipp.c */; }; 724FA5AF1CC037C60092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA5B01CC037C60092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA5B11CC037C60092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA5B21CC037C60092477B /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EF1536167A005426E1 /* libiconv.dylib */; }; 724FA5B31CC037C60092477B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7F01536167A005426E1 /* libresolv.dylib */; }; 724FA5B41CC037C60092477B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EC1536161C005426E1 /* libz.dylib */; }; 724FA5B51CC037C60092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA5BB1CC037D30092477B /* testlang.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF048192E3544001EF690 /* testlang.c */; }; 724FA5C21CC037D90092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA5C31CC037D90092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA5C41CC037D90092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA5C51CC037D90092477B /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EF1536167A005426E1 /* libiconv.dylib */; }; 724FA5C61CC037D90092477B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7F01536167A005426E1 /* libresolv.dylib */; }; 724FA5C71CC037D90092477B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EC1536161C005426E1 /* libz.dylib */; }; 724FA5C81CC037D90092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA5CE1CC037E50092477B /* testlpd.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF04D192E3602001EF690 /* testlpd.c */; }; 724FA5D71CC037F00092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA5D81CC037F00092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA5D91CC037F00092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA5DA1CC037F00092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA5DB1CC037F00092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 724FA5E21CC037FD0092477B /* testoptions.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF049192E3544001EF690 /* testoptions.c */; }; 724FA5EB1CC038040092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA5EC1CC038040092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA5ED1CC038040092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA5EE1CC038040092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA5EF1CC038040092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 724FA5F61CC0380F0092477B /* testppd.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF04A192E3544001EF690 /* testppd.c */; }; 724FA5FF1CC038190092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA6001CC038190092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA6011CC038190092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA6021CC038190092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA6031CC038190092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 724FA60A1CC038250092477B /* testpwg.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF04B192E3544001EF690 /* testpwg.c */; }; 724FA6131CC0382B0092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA6141CC0382B0092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA6151CC0382B0092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA6161CC0382B0092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA6171CC0382B0092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 724FA61E1CC0383B0092477B /* testraster.c in Sources */ = {isa = PBXBuildFile; fileRef = 27F89DA21B3AC43B00E5A4B7 /* testraster.c */; }; 724FA6271CC038410092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA6281CC038410092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA6291CC038410092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA62A1CC038410092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA62B1CC038410092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 724FA6321CC038510092477B /* testsnmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF04C192E3544001EF690 /* testsnmp.c */; }; 724FA63B1CC038560092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA63C1CC038560092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA63D1CC038560092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA63E1CC038560092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA63F1CC038560092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 724FA6461CC038650092477B /* testspeed.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF04E192E3602001EF690 /* testspeed.c */; }; 724FA64F1CC0386E0092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA6501CC0386E0092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA6511CC0386E0092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA6521CC0386E0092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA6531CC0386E0092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 724FA65A1CC038790092477B /* testsub.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF04F192E3602001EF690 /* testsub.c */; }; 724FA6661CC038A50092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA6671CC038A50092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA6681CC038A50092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA6691CC038A50092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA66A1CC038A50092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 724FA66B1CC038A50092477B /* libcupsmime.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220FAC13330B2200FCA411 /* libcupsmime.dylib */; }; 724FA6711CC038B30092477B /* test1284.c in Sources */ = {isa = PBXBuildFile; fileRef = 724FA65B1CC0389F0092477B /* test1284.c */; }; 724FA6781CC038BD0092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; 724FA6791CC038BD0092477B /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5A1926750C000F61D3 /* libiconv.dylib */; }; 724FA67A1CC038BD0092477B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; 724FA67B1CC038BD0092477B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; 724FA67C1CC038BD0092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; 724FA67D1CC038BD0092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; 724FA67E1CC038BD0092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA6841CC038CA0092477B /* testbackend.c in Sources */ = {isa = PBXBuildFile; fileRef = 724FA65C1CC0389F0092477B /* testbackend.c */; }; 724FA68D1CC038D90092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA68E1CC038D90092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA68F1CC038D90092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA6901CC038D90092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA6911CC038D90092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 724FA6981CC038E70092477B /* testsupplies.c in Sources */ = {isa = PBXBuildFile; fileRef = 724FA65D1CC0389F0092477B /* testsupplies.c */; }; 724FA69F1CC039200092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; 724FA6A01CC039200092477B /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5A1926750C000F61D3 /* libiconv.dylib */; }; 724FA6A11CC039200092477B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; 724FA6A21CC039200092477B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; 724FA6A31CC039200092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; 724FA6A41CC039200092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; 724FA6A51CC039200092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA6AB1CC0392E0092477B /* testcgi.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF03D192E3498001EF690 /* testcgi.c */; }; 724FA6B21CC0393E0092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA6B31CC0393E0092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA6B41CC0393E0092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA6B51CC0393E0092477B /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EF1536167A005426E1 /* libiconv.dylib */; }; 724FA6B61CC0393E0092477B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7F01536167A005426E1 /* libresolv.dylib */; }; 724FA6B71CC0393E0092477B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EC1536161C005426E1 /* libz.dylib */; }; 724FA6B81CC0393E0092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA6BE1CC0394C0092477B /* testhi.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF03E192E3498001EF690 /* testhi.c */; }; 724FA6C71CC0395A0092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA6C81CC0395A0092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA6C91CC0395A0092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA6CA1CC0395A0092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA6CB1CC0395A0092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 724FA6D21CC039680092477B /* testtemplate.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF03F192E3498001EF690 /* testtemplate.c */; }; 724FA6E01CC039DE0092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA6E11CC039DE0092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA6E21CC039DE0092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA6E31CC039DE0092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA6E41CC039DE0092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 724FA6EB1CC039EB0092477B /* testnotify.c in Sources */ = {isa = PBXBuildFile; fileRef = 724FA6D71CC039D00092477B /* testnotify.c */; }; 724FA6F51CC03A210092477B /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 724FA6F61CC03A210092477B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 724FA6F71CC03A210092477B /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 724FA6F81CC03A210092477B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 724FA6F91CC03A210092477B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 724FA7001CC03A2F0092477B /* testcatalog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 724FA6EC1CC03A1D0092477B /* testcatalog.cxx */; }; 724FA7051CC03A490092477B /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 72F75A691336FA8A004BB496 /* error.c */; }; 724FA7061CC03A490092477B /* interpret.c in Sources */ = {isa = PBXBuildFile; fileRef = 72F75A6A1336FA8A004BB496 /* interpret.c */; }; 724FA7071CC03A490092477B /* raster.c in Sources */ = {isa = PBXBuildFile; fileRef = 72F75A6B1336FA8A004BB496 /* raster.c */; }; 724FA70B1CC03A490092477B /* raster.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EFA133305BB00FCA411 /* raster.h */; settings = {ATTRIBUTES = (Public, ); }; }; 724FA7141CC03A990092477B /* filter.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220FB213330BCE00FCA411 /* filter.c */; }; 724FA7151CC03A990092477B /* mime.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220FB313330BCE00FCA411 /* mime.c */; }; 724FA7161CC03A990092477B /* type.c in Sources */ = {isa = PBXBuildFile; fileRef = 72220FB513330BCE00FCA411 /* type.c */; }; 724FA71A1CC03A990092477B /* mime.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220FB413330BCE00FCA411 /* mime.h */; settings = {ATTRIBUTES = (Private, ); }; }; 724FA71B1CC03A990092477B /* mime-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7271883C1374AB14001A2036 /* mime-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 724FA7241CC03AAF0092477B /* ppdc-array.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5F51333315100317ECB /* ppdc-array.cxx */; }; 724FA7251CC03AAF0092477B /* ppdc-attr.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5F61333315100317ECB /* ppdc-attr.cxx */; }; 724FA7261CC03AAF0092477B /* ppdc-catalog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5F71333315100317ECB /* ppdc-catalog.cxx */; }; 724FA7271CC03AAF0092477B /* ppdc-choice.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5F81333315100317ECB /* ppdc-choice.cxx */; }; 724FA7281CC03AAF0092477B /* ppdc-constraint.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5F91333315100317ECB /* ppdc-constraint.cxx */; }; 724FA7291CC03AAF0092477B /* ppdc-driver.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5FA1333315100317ECB /* ppdc-driver.cxx */; }; 724FA72A1CC03AAF0092477B /* ppdc-file.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5FB1333315100317ECB /* ppdc-file.cxx */; }; 724FA72B1CC03AAF0092477B /* ppdc-filter.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5FC1333315100317ECB /* ppdc-filter.cxx */; }; 724FA72C1CC03AAF0092477B /* ppdc-font.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5FD1333315100317ECB /* ppdc-font.cxx */; }; 724FA72D1CC03AAF0092477B /* ppdc-group.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5FE1333315100317ECB /* ppdc-group.cxx */; }; 724FA72E1CC03AAF0092477B /* ppdc-import.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5FF1333315100317ECB /* ppdc-import.cxx */; }; 724FA72F1CC03AAF0092477B /* ppdc-mediasize.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6001333315100317ECB /* ppdc-mediasize.cxx */; }; 724FA7301CC03AAF0092477B /* ppdc-message.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6011333315100317ECB /* ppdc-message.cxx */; }; 724FA7311CC03AAF0092477B /* ppdc-option.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6021333315100317ECB /* ppdc-option.cxx */; }; 724FA7321CC03AAF0092477B /* ppdc-profile.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6041333315100317ECB /* ppdc-profile.cxx */; }; 724FA7331CC03AAF0092477B /* ppdc-shared.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6051333315100317ECB /* ppdc-shared.cxx */; }; 724FA7341CC03AAF0092477B /* ppdc-source.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6061333315100317ECB /* ppdc-source.cxx */; }; 724FA7351CC03AAF0092477B /* ppdc-string.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6071333315100317ECB /* ppdc-string.cxx */; }; 724FA7361CC03AAF0092477B /* ppdc-variable.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF6081333315100317ECB /* ppdc-variable.cxx */; }; 724FA73B1CC03AAF0092477B /* ppdc.h in Headers */ = {isa = PBXBuildFile; fileRef = 274FF6091333315100317ECB /* ppdc.h */; settings = {ATTRIBUTES = (Private, ); }; }; 724FA73C1CC03AAF0092477B /* ppdc-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 274FF6031333315100317ECB /* ppdc-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 724FA7491CC03ACC0092477B /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 724FA7511CC03AF20092477B /* help-index.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF033192E3498001EF690 /* help-index.c */; }; 724FA7521CC03AF20092477B /* help.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF035192E3498001EF690 /* help.c */; }; 724FA7531CC03AF20092477B /* html.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF036192E3498001EF690 /* html.c */; }; 724FA7541CC03AF20092477B /* ipp-var.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF037192E3498001EF690 /* ipp-var.c */; }; 724FA7551CC03AF20092477B /* search.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF03B192E3498001EF690 /* search.c */; }; 724FA7561CC03AF20092477B /* template.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF03C192E3498001EF690 /* template.c */; }; 724FA7571CC03AF20092477B /* var.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF040192E3498001EF690 /* var.c */; }; 724FA75D1CC03AF60092477B /* help-index.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF033192E3498001EF690 /* help-index.c */; }; 724FA75E1CC03AF60092477B /* help.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF035192E3498001EF690 /* help.c */; }; 724FA75F1CC03AF60092477B /* html.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF036192E3498001EF690 /* html.c */; }; 724FA7601CC03AF60092477B /* ipp-var.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF037192E3498001EF690 /* ipp-var.c */; }; 724FA7611CC03AF60092477B /* search.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF03B192E3498001EF690 /* search.c */; }; 724FA7621CC03AF60092477B /* template.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF03C192E3498001EF690 /* template.c */; }; 724FA7631CC03AF60092477B /* var.c in Sources */ = {isa = PBXBuildFile; fileRef = 727EF040192E3498001EF690 /* var.c */; }; 724FA76C1CC03B4D0092477B /* cgi-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 727EF030192E3498001EF690 /* cgi-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 724FA76D1CC03B4D0092477B /* cgi.h in Headers */ = {isa = PBXBuildFile; fileRef = 727EF031192E3498001EF690 /* cgi.h */; settings = {ATTRIBUTES = (Private, ); }; }; 724FA76E1CC03B640092477B /* raster-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2767FC76192696A0000F61D3 /* raster-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 724FA76F1CC03B820092477B /* cgi-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 727EF030192E3498001EF690 /* cgi-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 724FA7701CC03B820092477B /* cgi.h in Headers */ = {isa = PBXBuildFile; fileRef = 727EF031192E3498001EF690 /* cgi.h */; settings = {ATTRIBUTES = (Private, ); }; }; 724FA7711CC03B920092477B /* raster-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2767FC76192696A0000F61D3 /* raster-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 7258EAED134594EB009286F1 /* rastertopwg.c in Sources */ = {isa = PBXBuildFile; fileRef = 7258EAEC134594EB009286F1 /* rastertopwg.c */; }; 7258EAF413459B6D009286F1 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 7258EAF513459B6D009286F1 /* libcupsimage.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72F75A611336F9A3004BB496 /* libcupsimage.dylib */; }; 726AD702135E8A90002C930D /* ippserver.c in Sources */ = {isa = PBXBuildFile; fileRef = 726AD701135E8A90002C930D /* ippserver.c */; }; 7271883D1374AB14001A2036 /* mime-private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7271883C1374AB14001A2036 /* mime-private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 727AD5B719100A58009F6862 /* tls.c in Sources */ = {isa = PBXBuildFile; fileRef = 727AD5B619100A58009F6862 /* tls.c */; }; 727AD5B819100A58009F6862 /* tls.c in Sources */ = {isa = PBXBuildFile; fileRef = 727AD5B619100A58009F6862 /* tls.c */; }; 7284F9F01BFCCDB10026F886 /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 7284F9EF1BFCCD940026F886 /* hash.c */; }; 7284F9F11BFCCDB20026F886 /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 7284F9EF1BFCCD940026F886 /* hash.c */; }; 728FB7E91536161C005426E1 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 728FB7EA1536161C005426E1 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 728FB7EB1536161C005426E1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 728FB7ED1536161C005426E1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EC1536161C005426E1 /* libz.dylib */; }; 728FB7EE15361642005426E1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 728FB7F11536167A005426E1 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EF1536167A005426E1 /* libiconv.dylib */; }; 728FB7F21536167A005426E1 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7F01536167A005426E1 /* libresolv.dylib */; }; 72A8B3D71C188CB800A1A547 /* ppd-util.c in Sources */ = {isa = PBXBuildFile; fileRef = 72A8B3D61C188BDE00A1A547 /* ppd-util.c */; }; 72A8B3D81C188CB900A1A547 /* ppd-util.c in Sources */ = {isa = PBXBuildFile; fileRef = 72A8B3D61C188BDE00A1A547 /* ppd-util.c */; }; 72BFD5FB191AF0A30005DA37 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; 72BFD5FC191AF0A30005DA37 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 72BFD5FD191AF0A30005DA37 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 72BFD5FE191AF0A30005DA37 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EF1536167A005426E1 /* libiconv.dylib */; }; 72BFD5FF191AF0A30005DA37 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7F01536167A005426E1 /* libresolv.dylib */; }; 72BFD600191AF0A30005DA37 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EC1536161C005426E1 /* libz.dylib */; }; 72BFD601191AF0A30005DA37 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 72BFD602191AF1270005DA37 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 72BFD603191AF1270005DA37 /* GSS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72D53A2915B49110003F877F /* GSS.framework */; }; 72BFD604191AF1270005DA37 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 72BFD605191AF1270005DA37 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EF1536167A005426E1 /* libiconv.dylib */; }; 72BFD606191AF1270005DA37 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7F01536167A005426E1 /* libresolv.dylib */; }; 72BFD607191AF1270005DA37 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 728FB7EC1536161C005426E1 /* libz.dylib */; }; 72BFD608191AF1270005DA37 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 72BFD609191AF14C0005DA37 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 72C16CB9137B195D007E4BF4 /* file.c in Sources */ = {isa = PBXBuildFile; fileRef = 72C16CB8137B195D007E4BF4 /* file.c */; }; 72CEF95618A966E000FA9B81 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 72CF95E318A13543000FCAE4 /* dest-job.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95E018A13543000FCAE4 /* dest-job.c */; }; 72CF95E418A13543000FCAE4 /* dest-localization.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95E118A13543000FCAE4 /* dest-localization.c */; }; 72CF95E518A13543000FCAE4 /* dest-options.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95E218A13543000FCAE4 /* dest-options.c */; }; 72CF95EC18A19134000FCAE4 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 72CF95F318A19165000FCAE4 /* ippfind.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95F218A19165000FCAE4 /* ippfind.c */; }; 72D53A2A15B49110003F877F /* GSS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72D53A2915B49110003F877F /* GSS.framework */; }; 72D53A2D15B4913D003F877F /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72D53A2C15B4913D003F877F /* IOKit.framework */; }; 72D53A2E15B4915B003F877F /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 72D53A2F15B49174003F877F /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 72D53A3015B4923F003F877F /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 72D53A3115B4923F003F877F /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; }; 72D53A3215B4923F003F877F /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; }; 72D53A3415B4925B003F877F /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72D53A3315B4925B003F877F /* ApplicationServices.framework */; }; 72D53A3515B49270003F877F /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72D53A2C15B4913D003F877F /* IOKit.framework */; }; 72D53A3815B4929D003F877F /* colorman.c in Sources */ = {isa = PBXBuildFile; fileRef = 72D53A3615B4929D003F877F /* colorman.c */; }; 72D53A3A15B492FA003F877F /* libpam.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72D53A3915B492FA003F877F /* libpam.dylib */; }; 72D53A3B15B4930A003F877F /* GSS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72D53A2915B49110003F877F /* GSS.framework */; }; 72D53A3C15B4930A003F877F /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; 72F75A5C1336F988004BB496 /* cupstestppd.c in Sources */ = {isa = PBXBuildFile; fileRef = 72F75A5B1336F988004BB496 /* cupstestppd.c */; }; 72F75A671336FA38004BB496 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 72F75A6C1336FA8A004BB496 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 72F75A691336FA8A004BB496 /* error.c */; }; 72F75A6D1336FA8A004BB496 /* interpret.c in Sources */ = {isa = PBXBuildFile; fileRef = 72F75A6A1336FA8A004BB496 /* interpret.c */; }; 72F75A6E1336FA8A004BB496 /* raster.c in Sources */ = {isa = PBXBuildFile; fileRef = 72F75A6B1336FA8A004BB496 /* raster.c */; }; 72F75A6F1336FAB6004BB496 /* raster.h in Headers */ = {isa = PBXBuildFile; fileRef = 72220EFA133305BB00FCA411 /* raster.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 270CCDB1135E3CDE00007BE2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 270CCDA6135E3C9E00007BE2; remoteInfo = testmime; }; 270CCDB7135E3CFD00007BE2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 270D02151D707E0200EA9403 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 270D02271D707E5100EA9403 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 270D02131D707E0200EA9403; remoteInfo = testcreds; }; 271284901CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 271284921CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA7581CC03AF60092477B; remoteInfo = libcupscgi_static; }; 271284941CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA7011CC03A490092477B; remoteInfo = libcupsimage_static; }; 271284961CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA7101CC03A990092477B; remoteInfo = libcupsmime_static; }; 271284981CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA7201CC03AAF0092477B; remoteInfo = libcupsppdc_static; }; 2712849A1CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA65E1CC038A50092477B; remoteInfo = test1284; }; 2712849C1CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA5241CC0370C0092477B; remoteInfo = testadmin; }; 2712849E1CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA5371CC037370092477B; remoteInfo = testarray; }; 271284A01CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA6721CC038BD0092477B; remoteInfo = testbackend; }; 271284A21CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA54A1CC037500092477B; remoteInfo = testcache; }; 271284A41CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA6ED1CC03A210092477B; remoteInfo = testcatalog; }; 271284A61CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA6991CC039200092477B; remoteInfo = testcgi; }; 271284A81CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA55D1CC037670092477B; remoteInfo = testconflicts; }; 271284AA1CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA5701CC037810092477B; remoteInfo = testfile; }; 271284AC1CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA6AC1CC0393E0092477B; remoteInfo = testhi; }; 271284AE1CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA5831CC037980092477B; remoteInfo = testi18n; }; 271284B01CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA5961CC037AA0092477B; remoteInfo = testipp; }; 271284B21CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA5A91CC037C60092477B; remoteInfo = testlang; }; 271284B41CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA5BC1CC037D90092477B; remoteInfo = testlpd; }; 271284B61CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA6D81CC039DE0092477B; remoteInfo = testnotify; }; 271284B81CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA5CF1CC037F00092477B; remoteInfo = testoptions; }; 271284BA1CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA5E31CC038040092477B; remoteInfo = testppd; }; 271284BC1CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA5F71CC038190092477B; remoteInfo = testpwg; }; 271284BE1CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA60B1CC0382B0092477B; remoteInfo = testraster; }; 271284C01CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA61F1CC038410092477B; remoteInfo = testsnmp; }; 271284C21CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA6331CC038560092477B; remoteInfo = testspeed; }; 271284C41CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA6471CC0386E0092477B; remoteInfo = testsub; }; 271284C61CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA6851CC038D90092477B; remoteInfo = testsupplies; }; 271284C81CC11FA500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA6BF1CC0395A0092477B; remoteInfo = testtemplate; }; 271284CA1CC122D000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA7581CC03AF60092477B; remoteInfo = libcupscgi_static; }; 271284CC1CC122E400E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA7201CC03AAF0092477B; remoteInfo = libcupsppdc_static; }; 271284CE1CC122ED00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA7581CC03AF60092477B; remoteInfo = libcupscgi_static; }; 271284D01CC122F900E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA7011CC03A490092477B; remoteInfo = libcupsimage_static; }; 271284D31CC1232500E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA7581CC03AF60092477B; remoteInfo = libcupscgi_static; }; 271284D51CC1234D00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA7101CC03A990092477B; remoteInfo = libcupsmime_static; }; 271284E31CC1261900E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271284F01CC1264B00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271284FD1CC1265D00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 2712850A1CC1267A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285171CC1269700E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285241CC126AA00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285311CC1270B00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 2712853E1CC1271E00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 2712854B1CC1272D00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285581CC1274300E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285651CC1275200E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285721CC1276400E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 2712857D1CC1295A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271284E11CC1261900E517C7; remoteInfo = cancel; }; 2712857F1CC1295A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271284EE1CC1264B00E517C7; remoteInfo = cupsaccept; }; 271285811CC1295A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271284FB1CC1265D00E517C7; remoteInfo = cupstestdsc; }; 271285831CC1295A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285081CC1267A00E517C7; remoteInfo = lp; }; 271285851CC1295A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285151CC1269700E517C7; remoteInfo = lpc; }; 271285871CC1295A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285221CC126AA00E517C7; remoteInfo = lpinfo; }; 271285891CC1295A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 2712852F1CC1270B00E517C7; remoteInfo = lpmove; }; 2712858B1CC1295A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 2712853C1CC1271E00E517C7; remoteInfo = lpoptions; }; 2712858D1CC1295A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285491CC1272D00E517C7; remoteInfo = lpq; }; 2712858F1CC1295A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285561CC1274300E517C7; remoteInfo = lpr; }; 271285911CC1295A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285631CC1275200E517C7; remoteInfo = lprm; }; 271285931CC1295A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285701CC1276400E517C7; remoteInfo = lpstat; }; 271285971CC12D1300E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285A51CC12D3A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285B31CC12D4E00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285C11CC12D5E00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285CF1CC12DBF00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285DC1CC12DDF00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285E91CC12E2D00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271285F71CC12EEB00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271286021CC12F0100E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72F75A601336F9A3004BB496; remoteInfo = libcupsimage; }; 271286071CC12F0B00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72F75A601336F9A3004BB496; remoteInfo = libcupsimage; }; 271286091CC12F0B00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271286171CC12F1A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72F75A601336F9A3004BB496; remoteInfo = libcupsimage; }; 271286191CC12F1A00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271286341CC12F9000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285951CC12D1300E517C7; remoteInfo = admin.cgi; }; 271286361CC12F9000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285A31CC12D3A00E517C7; remoteInfo = classes.cgi; }; 271286381CC12F9000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285CD1CC12DBF00E517C7; remoteInfo = commandtops; }; 2712863A1CC12F9000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285DA1CC12DDF00E517C7; remoteInfo = gziptoany; }; 2712863C1CC12F9000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285B11CC12D4E00E517C7; remoteInfo = jobs.cgi; }; 2712863E1CC12F9000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285BF1CC12D5E00E517C7; remoteInfo = printers.cgi; }; 271286401CC12F9000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285E71CC12E2D00E517C7; remoteInfo = pstops; }; 271286421CC12F9000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271285F51CC12EEB00E517C7; remoteInfo = rastertoepson; }; 271286441CC12F9000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271286051CC12F0B00E517C7; remoteInfo = rastertohp; }; 271286461CC12F9000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271286151CC12F1A00E517C7; remoteInfo = rastertolabel; }; 271286591CC1309000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 2712866D1CC1310E00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA7011CC03A490092477B; remoteInfo = libcupsimage_static; }; 2712866F1CC1310E00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 271286891CC13DC000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 2712869A1CC13DF100E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 271286AB1CC13DFF00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 271286BC1CC13E2100E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271286CD1CC13E5B00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271286DB1CC13EF400E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271286981CC13DF100E517C7; remoteInfo = po2strings; }; 271286DD1CC13EF400E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271286A91CC13DFF00E517C7; remoteInfo = strings2po; }; 271286DF1CC13EF400E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271286571CC1309000E517C7; remoteInfo = tlscheck; }; 271286E11CC13F0100E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271286BA1CC13E2100E517C7; remoteInfo = bcp; }; 271286E31CC13F0100E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271286CB1CC13E5B00E517C7; remoteInfo = tbcp; }; 271286E71CC13F2000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271286F71CC13F3F00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 271287051CC13F8F00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271286E51CC13F2000E517C7; remoteInfo = mailto; }; 271287071CC13F8F00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271286F51CC13F3F00E517C7; remoteInfo = rss; }; 2712870B1CC13FAB00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 2712871B1CC13FFA00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 271287091CC13FAB00E517C7; remoteInfo = mantohtml; }; 2712872E1CC140DF00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 271287301CC140DF00E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724FA7201CC03AAF0092477B; remoteInfo = libcupsppdc_static; }; 271287351CC1411000E517C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 2712871E1CC140BE00E517C7; remoteInfo = genstrings; }; 273BF6C81333B5410022CAAB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 273BF6DD1333B6370022CAAB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 273BF6BC1333B5000022CAAB; remoteInfo = testcups; }; 274FF5DB13332CF900317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 274FF5E213332D4300317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 274FF5E413332D4300317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220FAB13330B2200FCA411; remoteInfo = libcupsmime; }; 274FF5E613332D4300317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220F5A13330A5A00FCA411; remoteInfo = cupsd; }; 274FF5E813332D4300317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF5CB13332B1F00317ECB; remoteInfo = "cups-driverd"; }; 274FF5F2133330FD00317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 274FF61F1333316200317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF5ED133330C800317ECB; remoteInfo = libcupsppdc; }; 274FF621133331D300317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF5ED133330C800317ECB; remoteInfo = libcupsppdc; }; 274FF6331333335200317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 274FF6381333348400317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6281333333600317ECB; remoteInfo = "cups-deviced"; }; 274FF647133335A300317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF63D1333358B00317ECB; remoteInfo = "cups-exec"; }; 274FF659133339D900317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 274FF65D13333A3400317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF64E133339C400317ECB; remoteInfo = "cups-lpd"; }; 274FF68113333B3C00317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 274FF68313333B3C00317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220FAB13330B2200FCA411; remoteInfo = libcupsmime; }; 274FF6E11333B33F00317ECB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF67713333B2F00317ECB; remoteInfo = cupsfilter; }; 276683651337A9D6000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 2766836A1337AA25000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 2766835B1337A9B6000D33D0; remoteInfo = cupsctl; }; 276683AD1337ACF9000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 276683AF1337ACF9000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF5ED133330C800317ECB; remoteInfo = libcupsppdc; }; 276683B31337AD18000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 276683B51337AD18000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF5ED133330C800317ECB; remoteInfo = libcupsppdc; }; 276683BB1337AE49000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 276683BD1337AE49000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF5ED133330C800317ECB; remoteInfo = libcupsppdc; }; 276683BF1337B1AD000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 276683C11337B1AD000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF5ED133330C800317ECB; remoteInfo = libcupsppdc; }; 276683C51337B1BC000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 276683C71337B1BC000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF5ED133330C800317ECB; remoteInfo = libcupsppdc; }; 276683D61337B24A000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 2766836F1337AC79000D33D0; remoteInfo = ppdc; }; 276683D81337B24A000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 2766837C1337AC8C000D33D0; remoteInfo = ppdhtml; }; 276683DA1337B24A000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 276683891337AC97000D33D0; remoteInfo = ppdi; }; 276683DC1337B24A000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 276683961337ACA2000D33D0; remoteInfo = ppdmerge; }; 276683DE1337B24A000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 276683A31337ACAB000D33D0; remoteInfo = ppdpo; }; 276683E01337B299000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 276683E31337B2BA000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72F75A601336F9A3004BB496; remoteInfo = libcupsimage; }; 276683FB1337F7B3000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 276683FE1337F7C5000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 276683EF1337F78E000D33D0; remoteInfo = ipptool; }; 2766840D1337FA31000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 276684121337FA8D000D33D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 276684031337FA1D000D33D0; remoteInfo = cupsaddsmb; }; 2767FC4819266A0D000F61D3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 2767FC5319267469000F61D3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 276683EF1337F78E000D33D0; remoteInfo = ipptool; }; 2767FC5519267469000F61D3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 2767FC4619266A0D000F61D3; remoteInfo = testdest; }; 278C58D5136B641D00836530 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 278C58CA136B640300836530; remoteInfo = testhttp; }; 278C58D7136B642F00836530 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 27A034831A8BDC4A00650675 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 27A034861A8BDC6900650675 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 27A0347A1A8BDB1200650675; remoteInfo = lpadmin; }; 720DD6CE1358FD790064AA82 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 720DD6D01358FDBE0064AA82 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 720DD6C11358FD5F0064AA82; remoteInfo = snmp; }; 72220F6413330A6500FCA411 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 72220FBB13330C0500FCA411 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 72220FBD13330C0B00FCA411 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220FAB13330B2200FCA411; remoteInfo = libcupsmime; }; 724379061333E49B009631B9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 724379101333E4EA009631B9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724378FC1333E43E009631B9; remoteInfo = ipp; }; 724379251333E932009631B9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 7243792A1333E962009631B9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724379171333E532009631B9; remoteInfo = lpd; }; 724379391333FB95009631B9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 7243793E1333FD23009631B9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 7243792F1333FB85009631B9; remoteInfo = socket; }; 724379521333FECE009631B9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 724379461333FEA9009631B9; remoteInfo = dnssd; }; 724379541333FEFE009631B9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 724379641333FF2E009631B9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 724379C21333FF7D009631B9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 7243795A1333FF1D009631B9; remoteInfo = usb; }; 724FA5261CC0370C0092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA5391CC037370092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA54C1CC037500092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA55F1CC037670092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA5721CC037810092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA5851CC037980092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA5981CC037AA0092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA5AB1CC037C60092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA5BE1CC037D90092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA5D11CC037F00092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA5E51CC038040092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA5F91CC038190092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA60D1CC0382B0092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA6211CC038410092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA6351CC038560092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA6491CC0386E0092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA6601CC038A50092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA6741CC038BD0092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA6871CC038D90092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA69B1CC039200092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA6AE1CC0393E0092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA6C11CC0395A0092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA6DA1CC039DE0092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA6EF1CC03A210092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 724FA7431CC03ACC0092477B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 7258EAEE13459ADA009286F1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 7258EAE1134594C4009286F1; remoteInfo = rastertopwg; }; 7258EAF013459B67009286F1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 7258EAF213459B67009286F1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72F75A601336F9A3004BB496; remoteInfo = libcupsimage; }; 726AD703135E8AA1002C930D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 726AD6F6135E88F0002C930D; remoteInfo = ippserver; }; 726AD705135E8AC5002C930D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 72BEA8D319AFA89C0085F0F3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 726AD6F6135E88F0002C930D; remoteInfo = ippserver; }; 72BEA8D519AFA8A00085F0F3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72CF95E618A19134000FCAE4; remoteInfo = ippfind; }; 72BEA8D719AFA8BB0085F0F3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 274FF6891333B1C400317ECB; remoteInfo = libcups_static; }; 72CF95E818A19134000FCAE4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 72F75A651336FA30004BB496 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72220EAD1333047D00FCA411; remoteInfo = libcups; }; 72F75A701336FACD004BB496 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72F75A601336F9A3004BB496; remoteInfo = libcupsimage; }; 72F75A721336FACD004BB496 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; proxyType = 1; remoteGlobalIDString = 72F75A511336F950004BB496; remoteInfo = cupstestppd; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ 270CCDA5135E3C9E00007BE2 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 270D02201D707E0200EA9403 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271284E81CC1261900E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271284F51CC1264B00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285021CC1265D00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 2712850F1CC1267A00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 2712851C1CC1269700E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285291CC126AA00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285361CC1270B00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285431CC1271E00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285501CC1272D00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 2712855D1CC1274300E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 2712856A1CC1275200E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285771CC1276400E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 2712859C1CC12D1300E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285AB1CC12D3A00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285B91CC12D4E00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285C71CC12D5E00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285D41CC12DBF00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285E11CC12DDF00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285EE1CC12E2D00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271285FC1CC12EEB00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 2712860F1CC12F0B00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 2712861F1CC12F1A00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271286631CC1309000E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271286791CC1310E00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271286921CC13DC000E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271286A31CC13DF100E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271286B41CC13DFF00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271286C51CC13E2100E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271286D51CC13E5B00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271286EF1CC13F2000E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271286FF1CC13F3F00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271287141CC13FAB00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 271287281CC140BE00E517C7 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 273BF6BB1333B5000022CAAB /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 274FF5CA13332B1F00317ECB /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 274FF6271333333600317ECB /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 274FF63C1333358B00317ECB /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 274FF64D133339C400317ECB /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 274FF67613333B2F00317ECB /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 2766835A1337A9B6000D33D0 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 2766836E1337AC79000D33D0 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 2766837B1337AC8C000D33D0 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 276683881337AC97000D33D0 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 276683951337ACA2000D33D0 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 276683A21337ACAB000D33D0 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 276683EE1337F78E000D33D0 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 276684021337FA1D000D33D0 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 2767FC4C19266A0D000F61D3 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 278C58C9136B640300836530 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 27A034791A8BDB1200650675 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 720DD6C01358FD5F0064AA82 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 72220F5913330A5A00FCA411 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724378FB1333E43E009631B9 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724379161333E532009631B9 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 7243792E1333FB85009631B9 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724379451333FEA9009631B9 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724379591333FF1D009631B9 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA5311CC0370C0092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA5441CC037370092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA5571CC037500092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA56A1CC037670092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA57D1CC037810092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA5901CC037980092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA5A31CC037AA0092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA5B61CC037C60092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA5C91CC037D90092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA5DD1CC037F00092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA5F11CC038040092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA6051CC038190092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA6191CC0382B0092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA62D1CC038410092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA6411CC038560092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA6551CC0386E0092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA66C1CC038A50092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA67F1CC038BD0092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA6931CC038D90092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA6A61CC039200092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA6B91CC0393E0092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA6CD1CC0395A0092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA6E61CC039DE0092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 724FA6FB1CC03A210092477B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 7258EAE0134594C4009286F1 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 726AD6F5135E88F0002C930D /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 72CF95ED18A19134000FCAE4 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 72F75A501336F950004BB496 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 2706965A1CADF3E200FFE5FB /* libcups_ios.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcups_ios.a; sourceTree = BUILT_PRODUCTS_DIR; }; 270B267D17F5C06700C8A3A9 /* tls-darwin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "tls-darwin.c"; path = "../cups/tls-darwin.c"; sourceTree = ""; }; 270B267E17F5C06700C8A3A9 /* tls-gnutls.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "tls-gnutls.c"; path = "../cups/tls-gnutls.c"; sourceTree = ""; }; 270B268117F5C5D600C8A3A9 /* tls-sspi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "tls-sspi.c"; path = "../cups/tls-sspi.c"; sourceTree = ""; }; 270CCDA7135E3C9E00007BE2 /* testmime */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testmime; sourceTree = BUILT_PRODUCTS_DIR; }; 270CCDBB135E3D3E00007BE2 /* testmime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testmime.c; path = ../scheduler/testmime.c; sourceTree = ""; }; 270D02241D707E0200EA9403 /* testcreds */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testcreds; sourceTree = BUILT_PRODUCTS_DIR; }; 270D02251D707E3700EA9403 /* testcreds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testcreds.c; path = ../cups/testcreds.c; sourceTree = ""; }; 271284DD1CC125FC00E517C7 /* lpc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lpc.c; path = ../berkeley/lpc.c; sourceTree = ""; }; 271284DE1CC125FC00E517C7 /* lpq.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lpq.c; path = ../berkeley/lpq.c; sourceTree = ""; }; 271284DF1CC125FC00E517C7 /* lpr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lpr.c; path = ../berkeley/lpr.c; sourceTree = ""; }; 271284E01CC125FC00E517C7 /* lprm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lprm.c; path = ../berkeley/lprm.c; sourceTree = ""; }; 271284EC1CC1261900E517C7 /* cancel */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cancel; sourceTree = BUILT_PRODUCTS_DIR; }; 271284F91CC1264B00E517C7 /* cupsaccept */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cupsaccept; sourceTree = BUILT_PRODUCTS_DIR; }; 271285061CC1265D00E517C7 /* cupstestdsc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cupstestdsc; sourceTree = BUILT_PRODUCTS_DIR; }; 271285131CC1267A00E517C7 /* lp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lp; sourceTree = BUILT_PRODUCTS_DIR; }; 271285201CC1269700E517C7 /* lpc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpc; sourceTree = BUILT_PRODUCTS_DIR; }; 2712852D1CC126AA00E517C7 /* lpinfo */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpinfo; sourceTree = BUILT_PRODUCTS_DIR; }; 2712853A1CC1270B00E517C7 /* lpmove */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpmove; sourceTree = BUILT_PRODUCTS_DIR; }; 271285471CC1271E00E517C7 /* lpoptions */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpoptions; sourceTree = BUILT_PRODUCTS_DIR; }; 271285541CC1272D00E517C7 /* lpq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpq; sourceTree = BUILT_PRODUCTS_DIR; }; 271285611CC1274300E517C7 /* lpr */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpr; sourceTree = BUILT_PRODUCTS_DIR; }; 2712856E1CC1275200E517C7 /* lprm */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lprm; sourceTree = BUILT_PRODUCTS_DIR; }; 2712857B1CC1276400E517C7 /* lpstat */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpstat; sourceTree = BUILT_PRODUCTS_DIR; }; 271285A01CC12D1300E517C7 /* admin.cgi */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = admin.cgi; sourceTree = BUILT_PRODUCTS_DIR; }; 271285AF1CC12D3A00E517C7 /* classes.cgi */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = classes.cgi; sourceTree = BUILT_PRODUCTS_DIR; }; 271285BD1CC12D4E00E517C7 /* jobs.cgi */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jobs.cgi; sourceTree = BUILT_PRODUCTS_DIR; }; 271285CB1CC12D5E00E517C7 /* printers.cgi */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = printers.cgi; sourceTree = BUILT_PRODUCTS_DIR; }; 271285D81CC12DBF00E517C7 /* commandtops */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = commandtops; sourceTree = BUILT_PRODUCTS_DIR; }; 271285E51CC12DDF00E517C7 /* gziptoany */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gziptoany; sourceTree = BUILT_PRODUCTS_DIR; }; 271285F21CC12E2E00E517C7 /* pstops */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = pstops; sourceTree = BUILT_PRODUCTS_DIR; }; 271286001CC12EEB00E517C7 /* rastertoepson */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = rastertoepson; sourceTree = BUILT_PRODUCTS_DIR; }; 271286131CC12F0B00E517C7 /* rastertohp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = rastertohp; sourceTree = BUILT_PRODUCTS_DIR; }; 271286231CC12F1A00E517C7 /* rastertolabel */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = rastertolabel; sourceTree = BUILT_PRODUCTS_DIR; }; 271286671CC1309000E517C7 /* tlscheck */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tlscheck; sourceTree = BUILT_PRODUCTS_DIR; }; 271286681CC130BD00E517C7 /* tlscheck.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tlscheck.c; path = ../cups/tlscheck.c; sourceTree = ""; }; 2712866A1CC130FF00E517C7 /* rasterbench.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rasterbench.c; path = ../filter/rasterbench.c; sourceTree = ""; }; 2712867D1CC1310E00E517C7 /* rasterbench */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = rasterbench; sourceTree = BUILT_PRODUCTS_DIR; }; 271286801CC1396100E517C7 /* bcp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bcp.c; path = ../monitor/bcp.c; sourceTree = ""; }; 271286811CC1396100E517C7 /* tbcp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tbcp.c; path = ../monitor/tbcp.c; sourceTree = ""; }; 271286831CC13D9600E517C7 /* checkpo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = checkpo.c; path = ../locale/checkpo.c; sourceTree = ""; }; 271286841CC13D9600E517C7 /* cups.pot */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = cups.pot; path = ../locale/cups.pot; sourceTree = ""; }; 271286851CC13D9600E517C7 /* po2strings.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = po2strings.c; path = ../locale/po2strings.c; sourceTree = ""; }; 271286861CC13D9600E517C7 /* strings2po.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = strings2po.c; path = ../locale/strings2po.c; sourceTree = ""; }; 271286961CC13DC000E517C7 /* checkpo */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = checkpo; sourceTree = BUILT_PRODUCTS_DIR; }; 271286A71CC13DF100E517C7 /* po2strings */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = po2strings; sourceTree = BUILT_PRODUCTS_DIR; }; 271286B81CC13DFF00E517C7 /* strings2po */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = strings2po; sourceTree = BUILT_PRODUCTS_DIR; }; 271286C91CC13E2100E517C7 /* bcp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = bcp; sourceTree = BUILT_PRODUCTS_DIR; }; 271286D91CC13E5B00E517C7 /* tbcp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tbcp; sourceTree = BUILT_PRODUCTS_DIR; }; 271286F31CC13F2000E517C7 /* mailto */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = mailto; sourceTree = BUILT_PRODUCTS_DIR; }; 271287031CC13F3F00E517C7 /* rss */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = rss; sourceTree = BUILT_PRODUCTS_DIR; }; 271287181CC13FAB00E517C7 /* mantohtml */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = mantohtml; sourceTree = BUILT_PRODUCTS_DIR; }; 271287191CC13FDB00E517C7 /* mantohtml.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mantohtml.c; path = ../man/mantohtml.c; sourceTree = ""; }; 2712871D1CC140B400E517C7 /* genstrings.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = genstrings.cxx; path = ../ppdc/genstrings.cxx; sourceTree = ""; }; 2712872C1CC140BE00E517C7 /* genstrings */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = genstrings; sourceTree = BUILT_PRODUCTS_DIR; }; 2732E089137A3F5200FAFEF6 /* cancel.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cancel.c; path = ../systemv/cancel.c; sourceTree = ""; }; 2732E08A137A3F5200FAFEF6 /* cupsaccept.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cupsaccept.c; path = ../systemv/cupsaccept.c; sourceTree = ""; }; 2732E08B137A3F5200FAFEF6 /* cupstestdsc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cupstestdsc.c; path = ../systemv/cupstestdsc.c; sourceTree = ""; }; 2732E08C137A3F5200FAFEF6 /* lp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lp.c; path = ../systemv/lp.c; sourceTree = ""; }; 2732E08D137A3F5200FAFEF6 /* lpadmin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lpadmin.c; path = ../systemv/lpadmin.c; sourceTree = ""; }; 2732E08E137A3F5200FAFEF6 /* lpinfo.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lpinfo.c; path = ../systemv/lpinfo.c; sourceTree = ""; }; 2732E08F137A3F5200FAFEF6 /* lpmove.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lpmove.c; path = ../systemv/lpmove.c; sourceTree = ""; }; 2732E090137A3F5200FAFEF6 /* lpoptions.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lpoptions.c; path = ../systemv/lpoptions.c; sourceTree = ""; }; 2732E092137A3F5200FAFEF6 /* lpstat.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lpstat.c; path = ../systemv/lpstat.c; sourceTree = ""; }; 273BF6BD1333B5000022CAAB /* testcups */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testcups; sourceTree = BUILT_PRODUCTS_DIR; }; 273BF6C61333B5370022CAAB /* testcups.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testcups.c; path = ../cups/testcups.c; sourceTree = ""; }; 274561471F545B2E000378E4 /* cupspm.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = cupspm.md; path = ../cups/cupspm.md; sourceTree = ""; }; 274561481F545B2E000378E4 /* api-admin.header */ = {isa = PBXFileReference; lastKnownFileType = text; name = "api-admin.header"; path = "../cups/api-admin.header"; sourceTree = ""; }; 274561491F545B2E000378E4 /* api-admin.shtml */ = {isa = PBXFileReference; lastKnownFileType = text.html.other; name = "api-admin.shtml"; path = "../cups/api-admin.shtml"; sourceTree = ""; }; 274FF5CC13332B1F00317ECB /* cups-driverd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "cups-driverd"; sourceTree = BUILT_PRODUCTS_DIR; }; 274FF5D613332CC700317ECB /* cups-driverd.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "cups-driverd.cxx"; path = "../scheduler/cups-driverd.cxx"; sourceTree = ""; }; 274FF5D713332CC700317ECB /* util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = util.c; path = ../scheduler/util.c; sourceTree = ""; }; 274FF5D813332CC700317ECB /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = util.h; path = ../scheduler/util.h; sourceTree = ""; }; 274FF5EE133330C800317ECB /* libcupsppdc.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcupsppdc.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 274FF5F51333315100317ECB /* ppdc-array.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-array.cxx"; path = "../ppdc/ppdc-array.cxx"; sourceTree = ""; }; 274FF5F61333315100317ECB /* ppdc-attr.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-attr.cxx"; path = "../ppdc/ppdc-attr.cxx"; sourceTree = ""; }; 274FF5F71333315100317ECB /* ppdc-catalog.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-catalog.cxx"; path = "../ppdc/ppdc-catalog.cxx"; sourceTree = ""; }; 274FF5F81333315100317ECB /* ppdc-choice.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-choice.cxx"; path = "../ppdc/ppdc-choice.cxx"; sourceTree = ""; }; 274FF5F91333315100317ECB /* ppdc-constraint.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-constraint.cxx"; path = "../ppdc/ppdc-constraint.cxx"; sourceTree = ""; }; 274FF5FA1333315100317ECB /* ppdc-driver.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-driver.cxx"; path = "../ppdc/ppdc-driver.cxx"; sourceTree = ""; }; 274FF5FB1333315100317ECB /* ppdc-file.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-file.cxx"; path = "../ppdc/ppdc-file.cxx"; sourceTree = ""; }; 274FF5FC1333315100317ECB /* ppdc-filter.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-filter.cxx"; path = "../ppdc/ppdc-filter.cxx"; sourceTree = ""; }; 274FF5FD1333315100317ECB /* ppdc-font.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-font.cxx"; path = "../ppdc/ppdc-font.cxx"; sourceTree = ""; }; 274FF5FE1333315100317ECB /* ppdc-group.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-group.cxx"; path = "../ppdc/ppdc-group.cxx"; sourceTree = ""; }; 274FF5FF1333315100317ECB /* ppdc-import.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-import.cxx"; path = "../ppdc/ppdc-import.cxx"; sourceTree = ""; }; 274FF6001333315100317ECB /* ppdc-mediasize.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-mediasize.cxx"; path = "../ppdc/ppdc-mediasize.cxx"; sourceTree = ""; }; 274FF6011333315100317ECB /* ppdc-message.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-message.cxx"; path = "../ppdc/ppdc-message.cxx"; sourceTree = ""; }; 274FF6021333315100317ECB /* ppdc-option.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-option.cxx"; path = "../ppdc/ppdc-option.cxx"; sourceTree = ""; }; 274FF6031333315100317ECB /* ppdc-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ppdc-private.h"; path = "../ppdc/ppdc-private.h"; sourceTree = ""; }; 274FF6041333315100317ECB /* ppdc-profile.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-profile.cxx"; path = "../ppdc/ppdc-profile.cxx"; sourceTree = ""; }; 274FF6051333315100317ECB /* ppdc-shared.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-shared.cxx"; path = "../ppdc/ppdc-shared.cxx"; sourceTree = ""; }; 274FF6061333315100317ECB /* ppdc-source.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-source.cxx"; path = "../ppdc/ppdc-source.cxx"; sourceTree = ""; }; 274FF6071333315100317ECB /* ppdc-string.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-string.cxx"; path = "../ppdc/ppdc-string.cxx"; sourceTree = ""; }; 274FF6081333315100317ECB /* ppdc-variable.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ppdc-variable.cxx"; path = "../ppdc/ppdc-variable.cxx"; sourceTree = ""; }; 274FF6091333315100317ECB /* ppdc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ppdc.h; path = ../ppdc/ppdc.h; sourceTree = ""; }; 274FF6291333333600317ECB /* cups-deviced */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "cups-deviced"; sourceTree = BUILT_PRODUCTS_DIR; }; 274FF6351333344400317ECB /* cups-deviced.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "cups-deviced.c"; path = "../scheduler/cups-deviced.c"; sourceTree = ""; }; 274FF63E1333358B00317ECB /* cups-exec */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "cups-exec"; sourceTree = BUILT_PRODUCTS_DIR; }; 274FF6491333398D00317ECB /* cups-exec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "cups-exec.c"; path = "../scheduler/cups-exec.c"; sourceTree = ""; }; 274FF64F133339C400317ECB /* cups-lpd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "cups-lpd"; sourceTree = BUILT_PRODUCTS_DIR; }; 274FF65B133339FC00317ECB /* cups-lpd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "cups-lpd.c"; path = "../scheduler/cups-lpd.c"; sourceTree = ""; }; 274FF67813333B2F00317ECB /* cupsfilter */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cupsfilter; sourceTree = BUILT_PRODUCTS_DIR; }; 274FF68713333B6E00317ECB /* cupsfilter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cupsfilter.c; path = ../scheduler/cupsfilter.c; sourceTree = ""; }; 276683561337A8C5000D33D0 /* cups.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = cups.strings; path = ../locale/cups.strings; sourceTree = ""; }; 2766835C1337A9B6000D33D0 /* cupsctl */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cupsctl; sourceTree = BUILT_PRODUCTS_DIR; }; 276683681337AA00000D33D0 /* cupsctl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cupsctl.c; path = ../systemv/cupsctl.c; sourceTree = ""; }; 276683701337AC79000D33D0 /* ppdc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ppdc; sourceTree = BUILT_PRODUCTS_DIR; }; 2766837D1337AC8C000D33D0 /* ppdhtml */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ppdhtml; sourceTree = BUILT_PRODUCTS_DIR; }; 2766838A1337AC97000D33D0 /* ppdi */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ppdi; sourceTree = BUILT_PRODUCTS_DIR; }; 276683971337ACA2000D33D0 /* ppdmerge */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ppdmerge; sourceTree = BUILT_PRODUCTS_DIR; }; 276683A41337ACAB000D33D0 /* ppdpo */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ppdpo; sourceTree = BUILT_PRODUCTS_DIR; }; 276683CC1337B201000D33D0 /* ppdc.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ppdc.cxx; path = ../ppdc/ppdc.cxx; sourceTree = ""; }; 276683CE1337B20D000D33D0 /* ppdhtml.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ppdhtml.cxx; path = ../ppdc/ppdhtml.cxx; sourceTree = ""; }; 276683D01337B21A000D33D0 /* ppdi.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ppdi.cxx; path = ../ppdc/ppdi.cxx; sourceTree = ""; }; 276683D21337B228000D33D0 /* ppdmerge.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ppdmerge.cxx; path = ../ppdc/ppdmerge.cxx; sourceTree = ""; }; 276683D41337B237000D33D0 /* ppdpo.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ppdpo.cxx; path = ../ppdc/ppdpo.cxx; sourceTree = ""; }; 276683F01337F78E000D33D0 /* ipptool */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ipptool; sourceTree = BUILT_PRODUCTS_DIR; }; 276683F91337F7A9000D33D0 /* ipptool.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ipptool.c; path = ../test/ipptool.c; sourceTree = ""; }; 276684041337FA1D000D33D0 /* cupsaddsmb */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cupsaddsmb; sourceTree = BUILT_PRODUCTS_DIR; }; 276684101337FA7C000D33D0 /* cupsaddsmb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cupsaddsmb.c; path = ../systemv/cupsaddsmb.c; sourceTree = ""; }; 2767FC5019266A0D000F61D3 /* testdest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testdest; sourceTree = BUILT_PRODUCTS_DIR; }; 2767FC5119266A36000F61D3 /* testdest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testdest.c; path = ../cups/testdest.c; sourceTree = ""; }; 2767FC591926750C000F61D3 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; 2767FC5A1926750C000F61D3 /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; }; 2767FC5B1926750C000F61D3 /* libresolv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libresolv.dylib; path = usr/lib/libresolv.dylib; sourceTree = SDKROOT; }; 2767FC5C1926750C000F61D3 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; 2767FC5D1926750C000F61D3 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; 2767FC7519269687000F61D3 /* pwg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pwg.h; path = ../cups/pwg.h; sourceTree = ""; }; 2767FC76192696A0000F61D3 /* raster-private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "raster-private.h"; path = "../cups/raster-private.h"; sourceTree = ""; }; 278C58CB136B640300836530 /* testhttp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testhttp; sourceTree = BUILT_PRODUCTS_DIR; }; 278C58E2136B647200836530 /* testhttp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testhttp.c; path = ../cups/testhttp.c; sourceTree = ""; }; 278C58E5136B64AF00836530 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 278C58E6136B64B000836530 /* Kerberos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kerberos.framework; path = /System/Library/Frameworks/Kerberos.framework; sourceTree = ""; }; 278C58E7136B64B000836530 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = ""; }; 278C58E8136B64B000836530 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = ""; }; 27A0347B1A8BDB1300650675 /* lpadmin */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpadmin; sourceTree = BUILT_PRODUCTS_DIR; }; 27D3037D134148CB00F022B1 /* libcups2.def */ = {isa = PBXFileReference; lastKnownFileType = text; name = libcups2.def; path = ../cups/libcups2.def; sourceTree = ""; }; 27F89DA21B3AC43B00E5A4B7 /* testraster.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testraster.c; path = ../filter/testraster.c; sourceTree = ""; }; 720DD6C21358FD5F0064AA82 /* snmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = snmp; sourceTree = BUILT_PRODUCTS_DIR; }; 720DD6D21358FDDE0064AA82 /* snmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = snmp.c; path = ../backend/snmp.c; sourceTree = ""; }; 72220EAE1333047D00FCA411 /* libcups.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcups.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 72220EB51333052D00FCA411 /* adminutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = adminutil.c; path = ../cups/adminutil.c; sourceTree = ""; }; 72220EB71333056300FCA411 /* adminutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = adminutil.h; path = ../cups/adminutil.h; sourceTree = ""; }; 72220EB81333056300FCA411 /* array.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = array.c; path = ../cups/array.c; sourceTree = ""; }; 72220EB91333056300FCA411 /* array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = array.h; path = ../cups/array.h; sourceTree = ""; }; 72220EBA1333056300FCA411 /* ppd-attr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ppd-attr.c"; path = "../cups/ppd-attr.c"; sourceTree = ""; }; 72220EBB1333056300FCA411 /* auth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = auth.c; path = ../cups/auth.c; sourceTree = ""; }; 72220EBC1333056300FCA411 /* backchannel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = backchannel.c; path = ../cups/backchannel.c; sourceTree = ""; }; 72220EBD1333056300FCA411 /* backend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = backend.c; path = ../cups/backend.c; sourceTree = ""; }; 72220EBE1333056300FCA411 /* backend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = backend.h; path = ../cups/backend.h; sourceTree = ""; }; 72220EBF1333056300FCA411 /* ppd-conflicts.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ppd-conflicts.c"; path = "../cups/ppd-conflicts.c"; sourceTree = ""; }; 72220EC01333056300FCA411 /* cups-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "cups-private.h"; path = "../cups/cups-private.h"; sourceTree = ""; }; 72220EC11333056300FCA411 /* cups.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cups.h; path = ../cups/cups.h; sourceTree = ""; }; 72220EC21333056300FCA411 /* ppd-custom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ppd-custom.c"; path = "../cups/ppd-custom.c"; sourceTree = ""; }; 72220EC31333056300FCA411 /* debug-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "debug-private.h"; path = "../cups/debug-private.h"; sourceTree = ""; }; 72220ED1133305BB00FCA411 /* debug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = debug.c; path = ../cups/debug.c; sourceTree = ""; }; 72220ED2133305BB00FCA411 /* dest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dest.c; path = ../cups/dest.c; sourceTree = ""; }; 72220ED3133305BB00FCA411 /* dir.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dir.c; path = ../cups/dir.c; sourceTree = ""; }; 72220ED4133305BB00FCA411 /* dir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dir.h; path = ../cups/dir.h; sourceTree = ""; }; 72220ED5133305BB00FCA411 /* ppd-emit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ppd-emit.c"; path = "../cups/ppd-emit.c"; sourceTree = ""; }; 72220ED6133305BB00FCA411 /* encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = encode.c; path = ../cups/encode.c; sourceTree = ""; }; 72220ED7133305BB00FCA411 /* file-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "file-private.h"; path = "../cups/file-private.h"; sourceTree = ""; }; 72220ED8133305BB00FCA411 /* file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = file.c; path = ../cups/file.c; sourceTree = ""; }; 72220ED9133305BB00FCA411 /* file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = file.h; path = ../cups/file.h; sourceTree = ""; }; 72220EDA133305BB00FCA411 /* getdevices.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = getdevices.c; path = ../cups/getdevices.c; sourceTree = ""; }; 72220EDB133305BB00FCA411 /* getifaddrs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = getifaddrs.c; path = ../cups/getifaddrs.c; sourceTree = ""; }; 72220EDC133305BB00FCA411 /* getputfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = getputfile.c; path = ../cups/getputfile.c; sourceTree = ""; }; 72220EDD133305BB00FCA411 /* globals.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = globals.c; path = ../cups/globals.c; sourceTree = ""; }; 72220EDE133305BB00FCA411 /* http-addr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "http-addr.c"; path = "../cups/http-addr.c"; sourceTree = ""; }; 72220EDF133305BB00FCA411 /* http-addrlist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "http-addrlist.c"; path = "../cups/http-addrlist.c"; sourceTree = ""; }; 72220EE0133305BB00FCA411 /* http-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "http-private.h"; path = "../cups/http-private.h"; sourceTree = ""; }; 72220EE1133305BB00FCA411 /* http-support.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "http-support.c"; path = "../cups/http-support.c"; sourceTree = ""; }; 72220EE2133305BB00FCA411 /* http.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = http.c; path = ../cups/http.c; sourceTree = ""; }; 72220EE3133305BB00FCA411 /* http.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = http.h; path = ../cups/http.h; sourceTree = ""; wrapsLines = 1; }; 72220EE4133305BB00FCA411 /* ipp-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ipp-private.h"; path = "../cups/ipp-private.h"; sourceTree = ""; }; 72220EE5133305BB00FCA411 /* ipp-support.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ipp-support.c"; path = "../cups/ipp-support.c"; sourceTree = ""; }; 72220EE6133305BB00FCA411 /* ipp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ipp.c; path = ../cups/ipp.c; sourceTree = ""; }; 72220EE7133305BB00FCA411 /* ipp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ipp.h; path = ../cups/ipp.h; sourceTree = ""; }; 72220EE8133305BB00FCA411 /* langprintf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = langprintf.c; path = ../cups/langprintf.c; sourceTree = ""; }; 72220EE9133305BB00FCA411 /* language-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "language-private.h"; path = "../cups/language-private.h"; sourceTree = ""; }; 72220EEA133305BB00FCA411 /* language.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = language.c; path = ../cups/language.c; sourceTree = ""; }; 72220EEB133305BB00FCA411 /* language.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = language.h; path = ../cups/language.h; sourceTree = ""; }; 72220EEC133305BB00FCA411 /* ppd-localize.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ppd-localize.c"; path = "../cups/ppd-localize.c"; sourceTree = ""; }; 72220EED133305BB00FCA411 /* ppd-mark.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ppd-mark.c"; path = "../cups/ppd-mark.c"; sourceTree = ""; }; 72220EEE133305BB00FCA411 /* md5-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "md5-private.h"; path = "../cups/md5-private.h"; sourceTree = ""; }; 72220EEF133305BB00FCA411 /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = md5.c; path = ../cups/md5.c; sourceTree = ""; }; 72220EF0133305BB00FCA411 /* md5passwd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = md5passwd.c; path = ../cups/md5passwd.c; sourceTree = ""; }; 72220EF1133305BB00FCA411 /* notify.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = notify.c; path = ../cups/notify.c; sourceTree = ""; }; 72220EF2133305BB00FCA411 /* options.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = options.c; path = ../cups/options.c; sourceTree = ""; }; 72220EF3133305BB00FCA411 /* ppd-page.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ppd-page.c"; path = "../cups/ppd-page.c"; sourceTree = ""; }; 72220EF4133305BB00FCA411 /* ppd-cache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ppd-cache.c"; path = "../cups/ppd-cache.c"; sourceTree = ""; }; 72220EF5133305BB00FCA411 /* ppd-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ppd-private.h"; path = "../cups/ppd-private.h"; sourceTree = ""; }; 72220EF6133305BB00FCA411 /* ppd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ppd.c; path = ../cups/ppd.c; sourceTree = ""; }; 72220EF7133305BB00FCA411 /* ppd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ppd.h; path = ../cups/ppd.h; sourceTree = ""; }; 72220EF8133305BB00FCA411 /* pwg-media.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "pwg-media.c"; path = "../cups/pwg-media.c"; sourceTree = ""; }; 72220EF9133305BB00FCA411 /* pwg-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "pwg-private.h"; path = "../cups/pwg-private.h"; sourceTree = ""; }; 72220EFA133305BB00FCA411 /* raster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = raster.h; path = ../cups/raster.h; sourceTree = ""; }; 72220EFB133305BB00FCA411 /* request.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = request.c; path = ../cups/request.c; sourceTree = ""; }; 72220EFC133305BB00FCA411 /* sidechannel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sidechannel.c; path = ../cups/sidechannel.c; sourceTree = ""; }; 72220EFD133305BB00FCA411 /* sidechannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sidechannel.h; path = ../cups/sidechannel.h; sourceTree = ""; }; 72220EFE133305BB00FCA411 /* snmp-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "snmp-private.h"; path = "../cups/snmp-private.h"; sourceTree = ""; }; 72220EFF133305BB00FCA411 /* snmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = snmp.c; path = ../cups/snmp.c; sourceTree = ""; }; 72220F00133305BB00FCA411 /* snprintf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = snprintf.c; path = ../cups/snprintf.c; sourceTree = ""; }; 72220F01133305BB00FCA411 /* string-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "string-private.h"; path = "../cups/string-private.h"; sourceTree = ""; }; 72220F02133305BB00FCA411 /* string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = string.c; path = ../cups/string.c; sourceTree = ""; }; 72220F03133305BB00FCA411 /* tempfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tempfile.c; path = ../cups/tempfile.c; sourceTree = ""; }; 72220F04133305BB00FCA411 /* thread-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "thread-private.h"; path = "../cups/thread-private.h"; sourceTree = ""; }; 72220F05133305BB00FCA411 /* thread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = thread.c; path = ../cups/thread.c; sourceTree = ""; }; 72220F06133305BB00FCA411 /* transcode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = transcode.c; path = ../cups/transcode.c; sourceTree = ""; }; 72220F07133305BB00FCA411 /* transcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = transcode.h; path = ../cups/transcode.h; sourceTree = ""; }; 72220F08133305BB00FCA411 /* usersys.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = usersys.c; path = ../cups/usersys.c; sourceTree = ""; }; 72220F09133305BB00FCA411 /* util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = util.c; path = ../cups/util.c; sourceTree = ""; }; 72220F0A133305BB00FCA411 /* versioning.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = versioning.h; path = ../cups/versioning.h; sourceTree = ""; }; 72220F471333063D00FCA411 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; 72220F5B13330A5A00FCA411 /* cupsd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cupsd; sourceTree = BUILT_PRODUCTS_DIR; }; 72220F6913330B0C00FCA411 /* auth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = auth.c; path = ../scheduler/auth.c; sourceTree = SOURCE_ROOT; }; 72220F6A13330B0C00FCA411 /* auth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = auth.h; path = ../scheduler/auth.h; sourceTree = SOURCE_ROOT; }; 72220F6B13330B0C00FCA411 /* banners.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = banners.c; path = ../scheduler/banners.c; sourceTree = SOURCE_ROOT; }; 72220F6C13330B0C00FCA411 /* banners.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = banners.h; path = ../scheduler/banners.h; sourceTree = SOURCE_ROOT; }; 72220F6D13330B0C00FCA411 /* cert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cert.c; path = ../scheduler/cert.c; sourceTree = SOURCE_ROOT; }; 72220F6E13330B0C00FCA411 /* cert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cert.h; path = ../scheduler/cert.h; sourceTree = SOURCE_ROOT; }; 72220F6F13330B0C00FCA411 /* classes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = classes.c; path = ../scheduler/classes.c; sourceTree = SOURCE_ROOT; }; 72220F7013330B0C00FCA411 /* classes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = classes.h; path = ../scheduler/classes.h; sourceTree = SOURCE_ROOT; }; 72220F7113330B0C00FCA411 /* client.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = client.c; path = ../scheduler/client.c; sourceTree = SOURCE_ROOT; }; 72220F7213330B0C00FCA411 /* client.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = client.h; path = ../scheduler/client.h; sourceTree = SOURCE_ROOT; }; 72220F7313330B0C00FCA411 /* conf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = conf.c; path = ../scheduler/conf.c; sourceTree = SOURCE_ROOT; }; 72220F7413330B0C00FCA411 /* conf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = conf.h; path = ../scheduler/conf.h; sourceTree = SOURCE_ROOT; }; 72220F7513330B0C00FCA411 /* cupsd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cupsd.h; path = ../scheduler/cupsd.h; sourceTree = SOURCE_ROOT; }; 72220F7613330B0C00FCA411 /* dirsvc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dirsvc.c; path = ../scheduler/dirsvc.c; sourceTree = SOURCE_ROOT; }; 72220F7713330B0C00FCA411 /* dirsvc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dirsvc.h; path = ../scheduler/dirsvc.h; sourceTree = SOURCE_ROOT; }; 72220F7813330B0C00FCA411 /* env.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = env.c; path = ../scheduler/env.c; sourceTree = SOURCE_ROOT; }; 72220F7913330B0C00FCA411 /* ipp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ipp.c; path = ../scheduler/ipp.c; sourceTree = SOURCE_ROOT; }; 72220F7A13330B0C00FCA411 /* job.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = job.c; path = ../scheduler/job.c; sourceTree = SOURCE_ROOT; }; 72220F7B13330B0C00FCA411 /* job.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = job.h; path = ../scheduler/job.h; sourceTree = SOURCE_ROOT; }; 72220F7C13330B0C00FCA411 /* listen.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = listen.c; path = ../scheduler/listen.c; sourceTree = SOURCE_ROOT; }; 72220F7D13330B0C00FCA411 /* log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = log.c; path = ../scheduler/log.c; sourceTree = SOURCE_ROOT; }; 72220F7E13330B0C00FCA411 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = main.c; path = ../scheduler/main.c; sourceTree = SOURCE_ROOT; }; 72220F7F13330B0C00FCA411 /* network.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = network.c; path = ../scheduler/network.c; sourceTree = SOURCE_ROOT; }; 72220F8013330B0C00FCA411 /* network.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = network.h; path = ../scheduler/network.h; sourceTree = SOURCE_ROOT; }; 72220F8113330B0C00FCA411 /* policy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = policy.c; path = ../scheduler/policy.c; sourceTree = SOURCE_ROOT; }; 72220F8213330B0C00FCA411 /* policy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = policy.h; path = ../scheduler/policy.h; sourceTree = SOURCE_ROOT; }; 72220F8313330B0C00FCA411 /* printers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = printers.c; path = ../scheduler/printers.c; sourceTree = SOURCE_ROOT; }; 72220F8413330B0C00FCA411 /* printers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = printers.h; path = ../scheduler/printers.h; sourceTree = SOURCE_ROOT; }; 72220F8513330B0C00FCA411 /* process.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = process.c; path = ../scheduler/process.c; sourceTree = SOURCE_ROOT; }; 72220F8613330B0C00FCA411 /* quotas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = quotas.c; path = ../scheduler/quotas.c; sourceTree = SOURCE_ROOT; }; 72220F8813330B0C00FCA411 /* select.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = select.c; path = ../scheduler/select.c; sourceTree = SOURCE_ROOT; }; 72220F8913330B0C00FCA411 /* server.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = server.c; path = ../scheduler/server.c; sourceTree = SOURCE_ROOT; }; 72220F8A13330B0C00FCA411 /* statbuf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = statbuf.c; path = ../scheduler/statbuf.c; sourceTree = SOURCE_ROOT; }; 72220F8B13330B0C00FCA411 /* statbuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = statbuf.h; path = ../scheduler/statbuf.h; sourceTree = SOURCE_ROOT; }; 72220F8C13330B0C00FCA411 /* subscriptions.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = subscriptions.c; path = ../scheduler/subscriptions.c; sourceTree = SOURCE_ROOT; }; 72220F8D13330B0C00FCA411 /* subscriptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = subscriptions.h; path = ../scheduler/subscriptions.h; sourceTree = SOURCE_ROOT; }; 72220F8E13330B0C00FCA411 /* sysman.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sysman.c; path = ../scheduler/sysman.c; sourceTree = SOURCE_ROOT; }; 72220F8F13330B0C00FCA411 /* sysman.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sysman.h; path = ../scheduler/sysman.h; sourceTree = SOURCE_ROOT; }; 72220FAC13330B2200FCA411 /* libcupsmime.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcupsmime.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 72220FB213330BCE00FCA411 /* filter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = filter.c; path = ../scheduler/filter.c; sourceTree = ""; }; 72220FB313330BCE00FCA411 /* mime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mime.c; path = ../scheduler/mime.c; sourceTree = ""; }; 72220FB413330BCE00FCA411 /* mime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mime.h; path = ../scheduler/mime.h; sourceTree = ""; }; 72220FB513330BCE00FCA411 /* type.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = type.c; path = ../scheduler/type.c; sourceTree = ""; }; 7226369B18AE6D19004ED309 /* org.cups.cups-lpd.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "org.cups.cups-lpd.plist"; path = "../scheduler/org.cups.cups-lpd.plist"; sourceTree = SOURCE_ROOT; }; 7226369C18AE6D19004ED309 /* org.cups.cupsd.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = org.cups.cupsd.plist; path = ../scheduler/org.cups.cupsd.plist; sourceTree = SOURCE_ROOT; }; 7226369D18AE73BB004ED309 /* config.h.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = config.h.in; path = ../config.h.in; sourceTree = ""; }; 7234F41F1378A16F00D3E9C9 /* array-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "array-private.h"; path = "../cups/array-private.h"; sourceTree = ""; }; 724378FD1333E43E009631B9 /* ipp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ipp; sourceTree = BUILT_PRODUCTS_DIR; }; 724379091333E4E3009631B9 /* backend-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "backend-private.h"; path = "../backend/backend-private.h"; sourceTree = ""; }; 7243790A1333E4E3009631B9 /* ipp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ipp.c; path = ../backend/ipp.c; sourceTree = ""; }; 7243790B1333E4E3009631B9 /* network.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = network.c; path = ../backend/network.c; sourceTree = ""; }; 7243790C1333E4E3009631B9 /* snmp-supplies.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "snmp-supplies.c"; path = "../backend/snmp-supplies.c"; sourceTree = ""; }; 724379121333E516009631B9 /* runloop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = runloop.c; path = ../backend/runloop.c; sourceTree = ""; }; 724379181333E532009631B9 /* lpd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpd; sourceTree = BUILT_PRODUCTS_DIR; }; 724379281333E952009631B9 /* lpd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lpd.c; path = ../backend/lpd.c; sourceTree = ""; }; 724379301333FB85009631B9 /* socket */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = socket; sourceTree = BUILT_PRODUCTS_DIR; }; 7243793C1333FD19009631B9 /* socket.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = socket.c; path = ../backend/socket.c; sourceTree = ""; }; 724379471333FEA9009631B9 /* dnssd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dnssd; sourceTree = BUILT_PRODUCTS_DIR; }; 724379501333FEBB009631B9 /* dnssd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dnssd.c; path = ../backend/dnssd.c; sourceTree = ""; }; 7243795B1333FF1D009631B9 /* usb */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = usb; sourceTree = BUILT_PRODUCTS_DIR; }; 724379C41333FFC7009631B9 /* usb-darwin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "usb-darwin.c"; path = "../backend/usb-darwin.c"; sourceTree = ""; }; 724379C51333FFC7009631B9 /* usb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = usb.c; path = ../backend/usb.c; sourceTree = ""; }; 724379CA1334000E009631B9 /* ieee1284.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ieee1284.c; path = ../backend/ieee1284.c; sourceTree = ""; }; 72496E161A13A03B0051899C /* org.cups.cups-lpd.socket */ = {isa = PBXFileReference; lastKnownFileType = text; name = "org.cups.cups-lpd.socket"; path = "../scheduler/org.cups.cups-lpd.socket"; sourceTree = SOURCE_ROOT; }; 72496E171A13A03B0051899C /* org.cups.cups-lpdAT.service.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = "org.cups.cups-lpdAT.service.in"; path = "../scheduler/org.cups.cups-lpdAT.service.in"; sourceTree = SOURCE_ROOT; }; 724FA5351CC0370C0092477B /* testadmin */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testadmin; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA5481CC037370092477B /* testarray */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testarray; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA55B1CC037500092477B /* testcache */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testcache; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA56E1CC037670092477B /* testconflicts */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testconflicts; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA5811CC037810092477B /* testfile */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testfile; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA5941CC037980092477B /* testi18n */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testi18n; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA5A71CC037AA0092477B /* testipp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testipp; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA5BA1CC037C60092477B /* testlang */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testlang; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA5CD1CC037D90092477B /* testlpd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testlpd; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA5E11CC037F00092477B /* testoptions */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testoptions; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA5F51CC038040092477B /* testppd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testppd; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA6091CC038190092477B /* testpwg */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testpwg; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA61D1CC0382B0092477B /* testraster */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testraster; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA6311CC038410092477B /* testsnmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testsnmp; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA6451CC038560092477B /* testspeed */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testspeed; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA6591CC0386E0092477B /* testsub */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testsub; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA65B1CC0389F0092477B /* test1284.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = test1284.c; path = ../backend/test1284.c; sourceTree = ""; }; 724FA65C1CC0389F0092477B /* testbackend.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testbackend.c; path = ../backend/testbackend.c; sourceTree = ""; }; 724FA65D1CC0389F0092477B /* testsupplies.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testsupplies.c; path = ../backend/testsupplies.c; sourceTree = ""; }; 724FA6701CC038A50092477B /* test1284 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test1284; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA6831CC038BD0092477B /* testbackend */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testbackend; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA6971CC038D90092477B /* testsupplies */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testsupplies; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA6AA1CC039200092477B /* testcgi */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testcgi; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA6BD1CC0393E0092477B /* testhi */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testhi; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA6D11CC0395A0092477B /* testtemplate */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testtemplate; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA6D41CC039D00092477B /* dbus.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = dbus.c; path = ../notifier/dbus.c; sourceTree = ""; }; 724FA6D51CC039D00092477B /* mailto.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = mailto.c; path = ../notifier/mailto.c; sourceTree = ""; }; 724FA6D61CC039D00092477B /* rss.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = rss.c; path = ../notifier/rss.c; sourceTree = ""; }; 724FA6D71CC039D00092477B /* testnotify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testnotify.c; path = ../notifier/testnotify.c; sourceTree = ""; }; 724FA6EA1CC039DE0092477B /* testnotify */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testnotify; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA6EC1CC03A1D0092477B /* testcatalog.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = testcatalog.cxx; path = ../ppdc/testcatalog.cxx; sourceTree = ""; }; 724FA6FF1CC03A210092477B /* testcatalog */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testcatalog; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA70F1CC03A490092477B /* libcupsimage_static.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcupsimage_static.a; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA71F1CC03A990092477B /* libcupsmime_static.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcupsmime_static.a; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA7401CC03AAF0092477B /* libcupsppdc_static.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcupsppdc_static.a; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA74F1CC03ACC0092477B /* libcupscgi.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcupscgi.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 724FA76B1CC03AF60092477B /* libcupscgi_static.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcupscgi_static.a; sourceTree = BUILT_PRODUCTS_DIR; }; 7258EAE2134594C4009286F1 /* rastertopwg */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = rastertopwg; sourceTree = BUILT_PRODUCTS_DIR; }; 7258EAEC134594EB009286F1 /* rastertopwg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rastertopwg.c; path = ../filter/rastertopwg.c; sourceTree = ""; }; 726AD6F7135E88F0002C930D /* ippserver */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ippserver; sourceTree = BUILT_PRODUCTS_DIR; }; 726AD701135E8A90002C930D /* ippserver.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ippserver.c; path = ../test/ippserver.c; sourceTree = ""; }; 7271881713746EA8001A2036 /* commandtops.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = commandtops.c; path = ../filter/commandtops.c; sourceTree = ""; }; 7271881813746EA8001A2036 /* common.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = common.c; path = ../filter/common.c; sourceTree = ""; }; 7271881913746EA8001A2036 /* common.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = common.h; path = ../filter/common.h; sourceTree = ""; }; 7271881A13746EA8001A2036 /* gziptoany.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gziptoany.c; path = ../filter/gziptoany.c; sourceTree = ""; }; 7271882013746EA8001A2036 /* pstops.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pstops.c; path = ../filter/pstops.c; sourceTree = ""; }; 7271882113746EA8001A2036 /* rastertoepson.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = rastertoepson.c; path = ../filter/rastertoepson.c; sourceTree = ""; }; 7271882213746EA8001A2036 /* rastertohp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = rastertohp.c; path = ../filter/rastertohp.c; sourceTree = ""; }; 7271882313746EA8001A2036 /* rastertolabel.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = rastertolabel.c; path = ../filter/rastertolabel.c; sourceTree = ""; }; 7271883C1374AB14001A2036 /* mime-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "mime-private.h"; path = "../scheduler/mime-private.h"; sourceTree = ""; }; 727AD5B619100A58009F6862 /* tls.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tls.c; path = ../cups/tls.c; sourceTree = ""; }; 727EF02F192E3498001EF690 /* admin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = admin.c; path = "../cgi-bin/admin.c"; sourceTree = ""; wrapsLines = 1; }; 727EF030192E3498001EF690 /* cgi-private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "cgi-private.h"; path = "../cgi-bin/cgi-private.h"; sourceTree = ""; }; 727EF031192E3498001EF690 /* cgi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cgi.h; path = "../cgi-bin/cgi.h"; sourceTree = ""; }; 727EF032192E3498001EF690 /* classes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = classes.c; path = "../cgi-bin/classes.c"; sourceTree = ""; }; 727EF033192E3498001EF690 /* help-index.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "help-index.c"; path = "../cgi-bin/help-index.c"; sourceTree = ""; }; 727EF034192E3498001EF690 /* help-index.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "help-index.h"; path = "../cgi-bin/help-index.h"; sourceTree = ""; }; 727EF035192E3498001EF690 /* help.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = help.c; path = "../cgi-bin/help.c"; sourceTree = ""; }; 727EF036192E3498001EF690 /* html.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = html.c; path = "../cgi-bin/html.c"; sourceTree = ""; }; 727EF037192E3498001EF690 /* ipp-var.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "ipp-var.c"; path = "../cgi-bin/ipp-var.c"; sourceTree = ""; }; 727EF038192E3498001EF690 /* jobs.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jobs.c; path = "../cgi-bin/jobs.c"; sourceTree = ""; }; 727EF039192E3498001EF690 /* makedocset.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = makedocset.c; path = "../cgi-bin/makedocset.c"; sourceTree = ""; }; 727EF03A192E3498001EF690 /* printers.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = printers.c; path = "../cgi-bin/printers.c"; sourceTree = ""; }; 727EF03B192E3498001EF690 /* search.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = search.c; path = "../cgi-bin/search.c"; sourceTree = ""; }; 727EF03C192E3498001EF690 /* template.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = template.c; path = "../cgi-bin/template.c"; sourceTree = ""; }; 727EF03D192E3498001EF690 /* testcgi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testcgi.c; path = "../cgi-bin/testcgi.c"; sourceTree = ""; }; 727EF03E192E3498001EF690 /* testhi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testhi.c; path = "../cgi-bin/testhi.c"; sourceTree = ""; }; 727EF03F192E3498001EF690 /* testtemplate.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testtemplate.c; path = "../cgi-bin/testtemplate.c"; sourceTree = ""; }; 727EF040192E3498001EF690 /* var.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = var.c; path = "../cgi-bin/var.c"; sourceTree = ""; }; 727EF041192E3544001EF690 /* testadmin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testadmin.c; path = ../cups/testadmin.c; sourceTree = ""; }; 727EF042192E3544001EF690 /* testarray.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testarray.c; path = ../cups/testarray.c; sourceTree = ""; }; 727EF043192E3544001EF690 /* testcache.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testcache.c; path = ../cups/testcache.c; sourceTree = ""; }; 727EF044192E3544001EF690 /* testconflicts.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testconflicts.c; path = ../cups/testconflicts.c; sourceTree = ""; }; 727EF045192E3544001EF690 /* testfile.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testfile.c; path = ../cups/testfile.c; sourceTree = ""; }; 727EF046192E3544001EF690 /* testi18n.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testi18n.c; path = ../cups/testi18n.c; sourceTree = ""; }; 727EF047192E3544001EF690 /* testipp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testipp.c; path = ../cups/testipp.c; sourceTree = ""; }; 727EF048192E3544001EF690 /* testlang.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testlang.c; path = ../cups/testlang.c; sourceTree = ""; }; 727EF049192E3544001EF690 /* testoptions.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testoptions.c; path = ../cups/testoptions.c; sourceTree = ""; }; 727EF04A192E3544001EF690 /* testppd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testppd.c; path = ../cups/testppd.c; sourceTree = ""; }; 727EF04B192E3544001EF690 /* testpwg.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testpwg.c; path = ../cups/testpwg.c; sourceTree = ""; }; 727EF04C192E3544001EF690 /* testsnmp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testsnmp.c; path = ../cups/testsnmp.c; sourceTree = ""; }; 727EF04D192E3602001EF690 /* testlpd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testlpd.c; path = ../scheduler/testlpd.c; sourceTree = ""; }; 727EF04E192E3602001EF690 /* testspeed.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testspeed.c; path = ../scheduler/testspeed.c; sourceTree = ""; }; 727EF04F192E3602001EF690 /* testsub.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testsub.c; path = ../scheduler/testsub.c; sourceTree = ""; }; 7284F9EF1BFCCD940026F886 /* hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hash.c; path = ../cups/hash.c; sourceTree = ""; }; 728FB7EC1536161C005426E1 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = ""; }; 728FB7EF1536167A005426E1 /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = /usr/lib/libiconv.dylib; sourceTree = ""; }; 728FB7F01536167A005426E1 /* libresolv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libresolv.dylib; path = /usr/lib/libresolv.dylib; sourceTree = ""; }; 729D4B561A2CB48700692B21 /* CHANGES-2.0.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "CHANGES-2.0.txt"; path = "../CHANGES-2.0.txt"; sourceTree = ""; }; 72A4332F155844CF002E172D /* libcups_static.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcups_static.a; sourceTree = BUILT_PRODUCTS_DIR; }; 72A8B3D61C188BDE00A1A547 /* ppd-util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ppd-util.c"; path = "../cups/ppd-util.c"; sourceTree = ""; }; 72C16CB8137B195D007E4BF4 /* file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = file.c; path = ../scheduler/file.c; sourceTree = SOURCE_ROOT; }; 72CF95E018A13543000FCAE4 /* dest-job.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "dest-job.c"; path = "../cups/dest-job.c"; sourceTree = ""; }; 72CF95E118A13543000FCAE4 /* dest-localization.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "dest-localization.c"; path = "../cups/dest-localization.c"; sourceTree = ""; }; 72CF95E218A13543000FCAE4 /* dest-options.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "dest-options.c"; path = "../cups/dest-options.c"; sourceTree = ""; }; 72CF95F118A19134000FCAE4 /* ipptool copy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "ipptool copy"; sourceTree = BUILT_PRODUCTS_DIR; }; 72CF95F218A19165000FCAE4 /* ippfind.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ippfind.c; path = ../test/ippfind.c; sourceTree = ""; }; 72D53A2915B49110003F877F /* GSS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GSS.framework; path = /System/Library/Frameworks/GSS.framework; sourceTree = ""; }; 72D53A2C15B4913D003F877F /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; 72D53A3315B4925B003F877F /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; 72D53A3615B4929D003F877F /* colorman.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = colorman.c; path = ../scheduler/colorman.c; sourceTree = ""; }; 72D53A3715B4929D003F877F /* colorman.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = colorman.h; path = ../scheduler/colorman.h; sourceTree = ""; }; 72D53A3915B492FA003F877F /* libpam.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpam.dylib; path = /usr/lib/libpam.dylib; sourceTree = ""; }; 72E65BA318DC797E00097E89 /* configure.ac */ = {isa = PBXFileReference; lastKnownFileType = text; name = configure.ac; path = ../configure.ac; sourceTree = ""; }; 72E65BA418DC799B00097E89 /* cups-common.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-common.m4"; path = "../config-scripts/cups-common.m4"; sourceTree = ""; }; 72E65BA518DC799B00097E89 /* cups-compiler.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-compiler.m4"; path = "../config-scripts/cups-compiler.m4"; sourceTree = ""; }; 72E65BA618DC799B00097E89 /* cups-defaults.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-defaults.m4"; path = "../config-scripts/cups-defaults.m4"; sourceTree = ""; }; 72E65BA718DC799B00097E89 /* cups-directories.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-directories.m4"; path = "../config-scripts/cups-directories.m4"; sourceTree = ""; }; 72E65BA818DC799B00097E89 /* cups-dnssd.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-dnssd.m4"; path = "../config-scripts/cups-dnssd.m4"; sourceTree = ""; }; 72E65BA918DC799B00097E89 /* cups-gssapi.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-gssapi.m4"; path = "../config-scripts/cups-gssapi.m4"; sourceTree = ""; }; 72E65BAA18DC799B00097E89 /* cups-largefile.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-largefile.m4"; path = "../config-scripts/cups-largefile.m4"; sourceTree = ""; }; 72E65BAB18DC799B00097E89 /* cups-startup.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-startup.m4"; path = "../config-scripts/cups-startup.m4"; sourceTree = ""; }; 72E65BAC18DC799B00097E89 /* cups-libtool.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-libtool.m4"; path = "../config-scripts/cups-libtool.m4"; sourceTree = ""; }; 72E65BAD18DC799B00097E89 /* cups-manpages.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-manpages.m4"; path = "../config-scripts/cups-manpages.m4"; sourceTree = ""; }; 72E65BAE18DC799B00097E89 /* cups-network.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-network.m4"; path = "../config-scripts/cups-network.m4"; sourceTree = ""; }; 72E65BAF18DC799B00097E89 /* cups-opsys.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-opsys.m4"; path = "../config-scripts/cups-opsys.m4"; sourceTree = ""; }; 72E65BB018DC799B00097E89 /* cups-pam.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-pam.m4"; path = "../config-scripts/cups-pam.m4"; sourceTree = ""; }; 72E65BB118DC799B00097E89 /* cups-poll.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-poll.m4"; path = "../config-scripts/cups-poll.m4"; sourceTree = ""; }; 72E65BB218DC799B00097E89 /* cups-scripting.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-scripting.m4"; path = "../config-scripts/cups-scripting.m4"; sourceTree = ""; }; 72E65BB318DC799B00097E89 /* cups-sharedlibs.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-sharedlibs.m4"; path = "../config-scripts/cups-sharedlibs.m4"; sourceTree = ""; }; 72E65BB418DC799B00097E89 /* cups-ssl.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-ssl.m4"; path = "../config-scripts/cups-ssl.m4"; sourceTree = ""; }; 72E65BB518DC799B00097E89 /* cups-threads.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; name = "cups-threads.m4"; path = "../config-scripts/cups-threads.m4"; sourceTree = ""; }; 72E65BB618DC79CC00097E89 /* cups-config.in */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = "cups-config.in"; path = "../cups-config.in"; sourceTree = ""; }; 72E65BB718DC79CC00097E89 /* Makedefs.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = Makedefs.in; path = ../Makedefs.in; sourceTree = ""; }; 72E65BB918DC7A3600097E89 /* doc */ = {isa = PBXFileReference; lastKnownFileType = folder; name = doc; path = ../doc; sourceTree = ""; }; 72E65BBA18DC7A3600097E89 /* man */ = {isa = PBXFileReference; lastKnownFileType = folder; name = man; path = ../man; sourceTree = ""; }; 72E65BC118DC7A6B00097E89 /* api-filter.header */ = {isa = PBXFileReference; lastKnownFileType = text; name = "api-filter.header"; path = "../cups/api-filter.header"; sourceTree = ""; }; 72E65BC218DC7A6B00097E89 /* api-filter.shtml */ = {isa = PBXFileReference; lastKnownFileType = text.html.other; name = "api-filter.shtml"; path = "../cups/api-filter.shtml"; sourceTree = ""; }; 72E65BC518DC7A6B00097E89 /* api-overview.header */ = {isa = PBXFileReference; lastKnownFileType = text; name = "api-overview.header"; path = "../cups/api-overview.header"; sourceTree = ""; }; 72E65BC618DC7A6B00097E89 /* api-overview.shtml */ = {isa = PBXFileReference; lastKnownFileType = text.html.other; name = "api-overview.shtml"; path = "../cups/api-overview.shtml"; sourceTree = ""; }; 72E65BC718DC7A6B00097E89 /* api-ppd.header */ = {isa = PBXFileReference; lastKnownFileType = text; name = "api-ppd.header"; path = "../cups/api-ppd.header"; sourceTree = ""; }; 72E65BC818DC7A6B00097E89 /* api-ppd.shtml */ = {isa = PBXFileReference; lastKnownFileType = text.html.other; name = "api-ppd.shtml"; path = "../cups/api-ppd.shtml"; sourceTree = ""; }; 72E65BCB18DC7A9800097E89 /* api-raster.header */ = {isa = PBXFileReference; lastKnownFileType = text; name = "api-raster.header"; path = "../filter/api-raster.header"; sourceTree = ""; }; 72E65BCC18DC7A9800097E89 /* api-raster.shtml */ = {isa = PBXFileReference; lastKnownFileType = text.html.other; name = "api-raster.shtml"; path = "../filter/api-raster.shtml"; sourceTree = ""; }; 72E65BCD18DC7A9800097E89 /* postscript-driver.header */ = {isa = PBXFileReference; lastKnownFileType = text; name = "postscript-driver.header"; path = "../filter/postscript-driver.header"; sourceTree = ""; }; 72E65BCE18DC7A9800097E89 /* postscript-driver.shtml */ = {isa = PBXFileReference; lastKnownFileType = text.html.other; name = "postscript-driver.shtml"; path = "../filter/postscript-driver.shtml"; sourceTree = ""; }; 72E65BCF18DC7A9800097E89 /* ppd-compiler.header */ = {isa = PBXFileReference; lastKnownFileType = text; name = "ppd-compiler.header"; path = "../filter/ppd-compiler.header"; sourceTree = ""; }; 72E65BD018DC7A9800097E89 /* ppd-compiler.shtml */ = {isa = PBXFileReference; lastKnownFileType = text.html.other; name = "ppd-compiler.shtml"; path = "../filter/ppd-compiler.shtml"; sourceTree = ""; }; 72E65BD118DC7A9800097E89 /* raster-driver.header */ = {isa = PBXFileReference; lastKnownFileType = text; name = "raster-driver.header"; path = "../filter/raster-driver.header"; sourceTree = ""; }; 72E65BD218DC7A9800097E89 /* raster-driver.shtml */ = {isa = PBXFileReference; lastKnownFileType = text.html.other; name = "raster-driver.shtml"; path = "../filter/raster-driver.shtml"; sourceTree = ""; }; 72E65BD318DC7A9800097E89 /* spec-ppd.header */ = {isa = PBXFileReference; lastKnownFileType = text; name = "spec-ppd.header"; path = "../filter/spec-ppd.header"; sourceTree = ""; }; 72E65BD418DC7A9800097E89 /* spec-ppd.shtml */ = {isa = PBXFileReference; lastKnownFileType = text.html.other; name = "spec-ppd.shtml"; path = "../filter/spec-ppd.shtml"; sourceTree = ""; }; 72E65BD518DC818400097E89 /* org.cups.cups-lpd.plist.in */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = "org.cups.cups-lpd.plist.in"; path = "../scheduler/org.cups.cups-lpd.plist.in"; sourceTree = SOURCE_ROOT; }; 72E65BD618DC818400097E89 /* org.cups.cupsd.path.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = org.cups.cupsd.path.in; path = ../scheduler/org.cups.cupsd.path.in; sourceTree = SOURCE_ROOT; }; 72E65BD718DC818400097E89 /* org.cups.cupsd.service.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = org.cups.cupsd.service.in; path = ../scheduler/org.cups.cupsd.service.in; sourceTree = SOURCE_ROOT; }; 72E65BD818DC818400097E89 /* org.cups.cupsd.socket.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = org.cups.cupsd.socket.in; path = ../scheduler/org.cups.cupsd.socket.in; sourceTree = SOURCE_ROOT; }; 72E65BD918DC850A00097E89 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; name = Makefile; path = ../Makefile; sourceTree = ""; }; 72E65BDC18DC852700097E89 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; name = Makefile; path = ../scheduler/Makefile; sourceTree = SOURCE_ROOT; }; 72E65BDD18DCA35700097E89 /* CHANGES-1.7.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "CHANGES-1.7.txt"; path = "../CHANGES-1.7.txt"; sourceTree = ""; }; 72E65BDE18DCA35700097E89 /* CHANGES.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = CHANGES.md; path = ../CHANGES.md; sourceTree = ""; xcLanguageSpecificationIdentifier = ""; }; 72E65BDF18DCA35700097E89 /* CREDITS.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = CREDITS.md; path = ../CREDITS.md; sourceTree = ""; }; 72E65BE018DCA35700097E89 /* INSTALL.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = INSTALL.md; path = ../INSTALL.md; sourceTree = ""; }; 72E65BE218DCA35700097E89 /* LICENSE.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = LICENSE.txt; path = ../LICENSE.txt; sourceTree = ""; }; 72E65BE318DCA35700097E89 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 72F75A521336F950004BB496 /* cupstestppd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cupstestppd; sourceTree = BUILT_PRODUCTS_DIR; }; 72F75A5B1336F988004BB496 /* cupstestppd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cupstestppd.c; path = ../systemv/cupstestppd.c; sourceTree = ""; }; 72F75A611336F9A3004BB496 /* libcupsimage.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcupsimage.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 72F75A691336FA8A004BB496 /* error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = error.c; path = ../filter/error.c; sourceTree = ""; }; 72F75A6A1336FA8A004BB496 /* interpret.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = interpret.c; path = ../filter/interpret.c; sourceTree = ""; }; 72F75A6B1336FA8A004BB496 /* raster.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = raster.c; path = ../filter/raster.c; sourceTree = ""; }; 72F7F1D719D1C0CC00870B09 /* org.cups.usb-quirks */ = {isa = PBXFileReference; lastKnownFileType = text; name = "org.cups.usb-quirks"; path = "../backend/org.cups.usb-quirks"; sourceTree = ""; }; 72FC29CF1A37A1CA00BDF935 /* usb-libusb.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "usb-libusb.c"; path = "../backend/usb-libusb.c"; sourceTree = ""; }; 72FC29D01A37A1CA00BDF935 /* usb-unix.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "usb-unix.c"; path = "../backend/usb-unix.c"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 270696331CADF3E200FFE5FB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 270696341CADF3E200FFE5FB /* SystemConfiguration.framework in Frameworks */, 270696351CADF3E200FFE5FB /* CoreFoundation.framework in Frameworks */, 270696381CADF3E200FFE5FB /* libiconv.dylib in Frameworks */, 270696391CADF3E200FFE5FB /* libresolv.dylib in Frameworks */, 2706963A1CADF3E200FFE5FB /* libz.dylib in Frameworks */, 2706963B1CADF3E200FFE5FB /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 270CCDA4135E3C9E00007BE2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271284DC1CC1254C00E517C7 /* libcupsmime_static.a in Frameworks */, 2767FC57192674C4000F61D3 /* libcups_static.a in Frameworks */, 278C58E9136B64B000836530 /* CoreFoundation.framework in Frameworks */, 278C58EA136B64B000836530 /* Kerberos.framework in Frameworks */, 278C58EB136B64B000836530 /* Security.framework in Frameworks */, 278C58EC136B64B000836530 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 270D02181D707E0200EA9403 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 270D02191D707E0200EA9403 /* libcups_static.a in Frameworks */, 270D021A1D707E0200EA9403 /* CoreFoundation.framework in Frameworks */, 270D021B1D707E0200EA9403 /* Kerberos.framework in Frameworks */, 270D021C1D707E0200EA9403 /* libiconv.dylib in Frameworks */, 270D021D1D707E0200EA9403 /* libresolv.dylib in Frameworks */, 270D021E1D707E0200EA9403 /* libz.dylib in Frameworks */, 270D021F1D707E0200EA9403 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271284E61CC1261900E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271284E71CC1261900E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271284F31CC1264B00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271284F41CC1264B00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285001CC1265D00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285011CC1265D00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712850D1CC1267A00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2712850E1CC1267A00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712851A1CC1269700E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2712851B1CC1269700E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285271CC126AA00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285281CC126AA00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285341CC1270B00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285351CC1270B00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285411CC1271E00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285421CC1271E00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712854E1CC1272D00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2712854F1CC1272D00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712855B1CC1274300E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2712855C1CC1274300E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285681CC1275200E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285691CC1275200E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285751CC1276400E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285761CC1276400E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712859A1CC12D1300E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285A21CC12D2900E517C7 /* libcupscgi.dylib in Frameworks */, 2712859B1CC12D1300E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285A81CC12D3A00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285A91CC12D3A00E517C7 /* libcupscgi.dylib in Frameworks */, 271285AA1CC12D3A00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285B61CC12D4E00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285B71CC12D4E00E517C7 /* libcupscgi.dylib in Frameworks */, 271285B81CC12D4E00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285C41CC12D5E00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285C51CC12D5E00E517C7 /* libcupscgi.dylib in Frameworks */, 271285C61CC12D5E00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285D21CC12DBF00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285D31CC12DBF00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285DF1CC12DDF00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285E01CC12DDF00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285EC1CC12E2D00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271285ED1CC12E2D00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285FA1CC12EEB00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271286041CC12F0800E517C7 /* libcupsimage.dylib in Frameworks */, 271285FB1CC12EEB00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712860C1CC12F0B00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2712860D1CC12F0B00E517C7 /* libcupsimage.dylib in Frameworks */, 2712860E1CC12F0B00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712861C1CC12F1A00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2712861D1CC12F1A00E517C7 /* libcupsimage.dylib in Frameworks */, 2712861E1CC12F1A00E517C7 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712865C1CC1309000E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2712865D1CC1309000E517C7 /* libcups_static.a in Frameworks */, 2712865E1CC1309000E517C7 /* CoreFoundation.framework in Frameworks */, 2712865F1CC1309000E517C7 /* libresolv.dylib in Frameworks */, 271286601CC1309000E517C7 /* libz.dylib in Frameworks */, 271286611CC1309000E517C7 /* Security.framework in Frameworks */, 271286621CC1309000E517C7 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271286721CC1310E00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271286731CC1310E00E517C7 /* libcupsimage_static.a in Frameworks */, 271286741CC1310E00E517C7 /* libcups_static.a in Frameworks */, 271286751CC1310E00E517C7 /* CoreFoundation.framework in Frameworks */, 271286761CC1310E00E517C7 /* Kerberos.framework in Frameworks */, 271286771CC1310E00E517C7 /* Security.framework in Frameworks */, 271286781CC1310E00E517C7 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712868C1CC13DC000E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2712868D1CC13DC000E517C7 /* libcups_static.a in Frameworks */, 2712868E1CC13DC000E517C7 /* CoreFoundation.framework in Frameworks */, 2712868F1CC13DC000E517C7 /* Kerberos.framework in Frameworks */, 271286901CC13DC000E517C7 /* Security.framework in Frameworks */, 271286911CC13DC000E517C7 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712869D1CC13DF100E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2712869E1CC13DF100E517C7 /* libcups_static.a in Frameworks */, 2712869F1CC13DF100E517C7 /* CoreFoundation.framework in Frameworks */, 271286A01CC13DF100E517C7 /* Kerberos.framework in Frameworks */, 271286A11CC13DF100E517C7 /* Security.framework in Frameworks */, 271286A21CC13DF100E517C7 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271286AE1CC13DFF00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271286AF1CC13DFF00E517C7 /* libcups_static.a in Frameworks */, 271286B01CC13DFF00E517C7 /* CoreFoundation.framework in Frameworks */, 271286B11CC13DFF00E517C7 /* Kerberos.framework in Frameworks */, 271286B21CC13DFF00E517C7 /* Security.framework in Frameworks */, 271286B31CC13DFF00E517C7 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271286C01CC13E2100E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271286C11CC13E2100E517C7 /* libcups.dylib in Frameworks */, 271286C21CC13E2100E517C7 /* CoreFoundation.framework in Frameworks */, 271286C31CC13E2100E517C7 /* IOKit.framework in Frameworks */, 271286C41CC13E2100E517C7 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271286D01CC13E5B00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271286D11CC13E5B00E517C7 /* libcups.dylib in Frameworks */, 271286D21CC13E5B00E517C7 /* CoreFoundation.framework in Frameworks */, 271286D31CC13E5B00E517C7 /* IOKit.framework in Frameworks */, 271286D41CC13E5B00E517C7 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271286EA1CC13F2000E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271286EB1CC13F2000E517C7 /* libcups.dylib in Frameworks */, 271286EC1CC13F2000E517C7 /* CoreFoundation.framework in Frameworks */, 271286ED1CC13F2000E517C7 /* IOKit.framework in Frameworks */, 271286EE1CC13F2000E517C7 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271286FA1CC13F3F00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271286FB1CC13F3F00E517C7 /* libcups.dylib in Frameworks */, 271286FC1CC13F3F00E517C7 /* CoreFoundation.framework in Frameworks */, 271286FD1CC13F3F00E517C7 /* IOKit.framework in Frameworks */, 271286FE1CC13F3F00E517C7 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712870E1CC13FAB00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2712870F1CC13FAB00E517C7 /* libcups_static.a in Frameworks */, 271287101CC13FAB00E517C7 /* CoreFoundation.framework in Frameworks */, 271287111CC13FAB00E517C7 /* Kerberos.framework in Frameworks */, 271287121CC13FAB00E517C7 /* Security.framework in Frameworks */, 271287131CC13FAB00E517C7 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 271287251CC140BE00E517C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271287341CC140F500E517C7 /* CoreFoundation.framework in Frameworks */, 271287321CC140EB00E517C7 /* libcups_static.a in Frameworks */, 271287331CC140EB00E517C7 /* libcupsppdc_static.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 273BF6BA1333B5000022CAAB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2767FC5F1926750C000F61D3 /* CoreFoundation.framework in Frameworks */, 2767FC601926750C000F61D3 /* libiconv.dylib in Frameworks */, 2767FC611926750C000F61D3 /* libresolv.dylib in Frameworks */, 2767FC621926750C000F61D3 /* libz.dylib in Frameworks */, 2767FC631926750C000F61D3 /* Security.framework in Frameworks */, 2767FC641926750C000F61D3 /* SystemConfiguration.framework in Frameworks */, 2767FC58192674E0000F61D3 /* libcups_static.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF5C913332B1F00317ECB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 274FF5DD13332D0600317ECB /* libcups.dylib in Frameworks */, 274FF6241333323B00317ECB /* libcupsppdc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF5EB133330C800317ECB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 7200511218F492F200E7B81B /* CoreFoundation.framework in Frameworks */, 274FF6231333321400317ECB /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF6261333333600317ECB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 274FF6321333334A00317ECB /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF63B1333358B00317ECB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 72CEF95618A966E000FA9B81 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF64C133339C400317ECB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 274FF658133339D300317ECB /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF67513333B2F00317ECB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 274FF68513333B4300317ECB /* libcups.dylib in Frameworks */, 274FF68613333B4300317ECB /* libcupsmime.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF6B91333B1C400317ECB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 72BFD609191AF14C0005DA37 /* SystemConfiguration.framework in Frameworks */, 72BFD602191AF1270005DA37 /* CoreFoundation.framework in Frameworks */, 72BFD603191AF1270005DA37 /* GSS.framework in Frameworks */, 72BFD604191AF1270005DA37 /* Kerberos.framework in Frameworks */, 72BFD605191AF1270005DA37 /* libiconv.dylib in Frameworks */, 72BFD606191AF1270005DA37 /* libresolv.dylib in Frameworks */, 72BFD607191AF1270005DA37 /* libz.dylib in Frameworks */, 72BFD608191AF1270005DA37 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 276683591337A9B6000D33D0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 276683671337A9E0000D33D0 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2766836D1337AC79000D33D0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 276683B11337AD06000D33D0 /* libcups.dylib in Frameworks */, 276683B21337AD06000D33D0 /* libcupsppdc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2766837A1337AC8C000D33D0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 276683B71337AD23000D33D0 /* libcups.dylib in Frameworks */, 276683B81337AD23000D33D0 /* libcupsppdc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 276683871337AC97000D33D0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 276683B91337AD31000D33D0 /* libcups.dylib in Frameworks */, 276683BA1337AD31000D33D0 /* libcupsppdc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 276683941337ACA2000D33D0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 276683C31337B1B3000D33D0 /* libcups.dylib in Frameworks */, 276683C41337B1B3000D33D0 /* libcupsppdc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 276683A11337ACAB000D33D0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 276683C91337B1C1000D33D0 /* libcups.dylib in Frameworks */, 276683CA1337B1C1000D33D0 /* libcupsppdc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 276683ED1337F78E000D33D0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 276683FD1337F7B8000D33D0 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 276684011337FA1D000D33D0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2766840F1337FA38000D33D0 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2767FC4B19266A0D000F61D3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2767FC6B192685E6000F61D3 /* libcups_static.a in Frameworks */, 2767FC6C192685E6000F61D3 /* CoreFoundation.framework in Frameworks */, 2767FC6D192685E6000F61D3 /* libiconv.dylib in Frameworks */, 2767FC6E192685E6000F61D3 /* libresolv.dylib in Frameworks */, 2767FC6F192685E6000F61D3 /* libz.dylib in Frameworks */, 2767FC70192685E6000F61D3 /* Security.framework in Frameworks */, 2767FC71192685E6000F61D3 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 278C58C8136B640300836530 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 72BFD5FB191AF0A30005DA37 /* libcups_static.a in Frameworks */, 72BFD5FC191AF0A30005DA37 /* CoreFoundation.framework in Frameworks */, 72BFD5FD191AF0A30005DA37 /* Kerberos.framework in Frameworks */, 72BFD5FE191AF0A30005DA37 /* libiconv.dylib in Frameworks */, 72BFD5FF191AF0A30005DA37 /* libresolv.dylib in Frameworks */, 72BFD600191AF0A30005DA37 /* libz.dylib in Frameworks */, 72BFD601191AF0A30005DA37 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 27A034781A8BDB1200650675 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 27A034851A8BDC5C00650675 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 720DD6BF1358FD5F0064AA82 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 720DD6CD1358FD720064AA82 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 72220EAB1333047D00FCA411 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 728FB7F11536167A005426E1 /* libiconv.dylib in Frameworks */, 728FB7F21536167A005426E1 /* libresolv.dylib in Frameworks */, 728FB7ED1536161C005426E1 /* libz.dylib in Frameworks */, 728FB7E91536161C005426E1 /* CoreFoundation.framework in Frameworks */, 72D53A2A15B49110003F877F /* GSS.framework in Frameworks */, 728FB7EA1536161C005426E1 /* Kerberos.framework in Frameworks */, 728FB7EB1536161C005426E1 /* Security.framework in Frameworks */, 728FB7EE15361642005426E1 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 72220F5813330A5A00FCA411 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 72D53A3A15B492FA003F877F /* libpam.dylib in Frameworks */, 72220F6613330A7000FCA411 /* libcups.dylib in Frameworks */, 72220FBF13330C1000FCA411 /* libcupsmime.dylib in Frameworks */, 72D53A3415B4925B003F877F /* ApplicationServices.framework in Frameworks */, 72D53A3015B4923F003F877F /* CoreFoundation.framework in Frameworks */, 72D53A3B15B4930A003F877F /* GSS.framework in Frameworks */, 72D53A3515B49270003F877F /* IOKit.framework in Frameworks */, 72D53A3C15B4930A003F877F /* Kerberos.framework in Frameworks */, 72D53A3115B4923F003F877F /* Security.framework in Frameworks */, 72D53A3215B4923F003F877F /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 72220FA913330B2200FCA411 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 72220FBA13330BEE00FCA411 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724378FA1333E43E009631B9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724379081333E4A5009631B9 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724379151333E532009631B9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724379271333E93D009631B9 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 7243792D1333FB85009631B9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 7243793B1333FB9D009631B9 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724379441333FEA9009631B9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724379561333FF04009631B9 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724379581333FF1D009631B9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724379661333FF3B009631B9 /* libcups.dylib in Frameworks */, 72D53A2F15B49174003F877F /* CoreFoundation.framework in Frameworks */, 72D53A2D15B4913D003F877F /* IOKit.framework in Frameworks */, 72D53A2E15B4915B003F877F /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5291CC0370C0092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA52A1CC0370C0092477B /* CoreFoundation.framework in Frameworks */, 724FA52B1CC0370C0092477B /* libiconv.dylib in Frameworks */, 724FA52C1CC0370C0092477B /* libresolv.dylib in Frameworks */, 724FA52D1CC0370C0092477B /* libz.dylib in Frameworks */, 724FA52E1CC0370C0092477B /* Security.framework in Frameworks */, 724FA52F1CC0370C0092477B /* SystemConfiguration.framework in Frameworks */, 724FA5301CC0370C0092477B /* libcups_static.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA53C1CC037370092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA53D1CC037370092477B /* CoreFoundation.framework in Frameworks */, 724FA53E1CC037370092477B /* libiconv.dylib in Frameworks */, 724FA53F1CC037370092477B /* libresolv.dylib in Frameworks */, 724FA5401CC037370092477B /* libz.dylib in Frameworks */, 724FA5411CC037370092477B /* Security.framework in Frameworks */, 724FA5421CC037370092477B /* SystemConfiguration.framework in Frameworks */, 724FA5431CC037370092477B /* libcups_static.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA54F1CC037500092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA5501CC037500092477B /* CoreFoundation.framework in Frameworks */, 724FA5511CC037500092477B /* libiconv.dylib in Frameworks */, 724FA5521CC037500092477B /* libresolv.dylib in Frameworks */, 724FA5531CC037500092477B /* libz.dylib in Frameworks */, 724FA5541CC037500092477B /* Security.framework in Frameworks */, 724FA5551CC037500092477B /* SystemConfiguration.framework in Frameworks */, 724FA5561CC037500092477B /* libcups_static.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5621CC037670092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA5631CC037670092477B /* CoreFoundation.framework in Frameworks */, 724FA5641CC037670092477B /* libiconv.dylib in Frameworks */, 724FA5651CC037670092477B /* libresolv.dylib in Frameworks */, 724FA5661CC037670092477B /* libz.dylib in Frameworks */, 724FA5671CC037670092477B /* Security.framework in Frameworks */, 724FA5681CC037670092477B /* SystemConfiguration.framework in Frameworks */, 724FA5691CC037670092477B /* libcups_static.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5751CC037810092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA5761CC037810092477B /* libcups_static.a in Frameworks */, 724FA5771CC037810092477B /* CoreFoundation.framework in Frameworks */, 724FA5781CC037810092477B /* libiconv.dylib in Frameworks */, 724FA5791CC037810092477B /* libresolv.dylib in Frameworks */, 724FA57A1CC037810092477B /* libz.dylib in Frameworks */, 724FA57B1CC037810092477B /* Security.framework in Frameworks */, 724FA57C1CC037810092477B /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5881CC037980092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA5891CC037980092477B /* libcups_static.a in Frameworks */, 724FA58A1CC037980092477B /* CoreFoundation.framework in Frameworks */, 724FA58B1CC037980092477B /* Kerberos.framework in Frameworks */, 724FA58C1CC037980092477B /* libiconv.dylib in Frameworks */, 724FA58D1CC037980092477B /* libresolv.dylib in Frameworks */, 724FA58E1CC037980092477B /* libz.dylib in Frameworks */, 724FA58F1CC037980092477B /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA59B1CC037AA0092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA59C1CC037AA0092477B /* libcups_static.a in Frameworks */, 724FA59D1CC037AA0092477B /* CoreFoundation.framework in Frameworks */, 724FA59E1CC037AA0092477B /* Kerberos.framework in Frameworks */, 724FA59F1CC037AA0092477B /* libiconv.dylib in Frameworks */, 724FA5A01CC037AA0092477B /* libresolv.dylib in Frameworks */, 724FA5A11CC037AA0092477B /* libz.dylib in Frameworks */, 724FA5A21CC037AA0092477B /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5AE1CC037C60092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA5AF1CC037C60092477B /* libcups_static.a in Frameworks */, 724FA5B01CC037C60092477B /* CoreFoundation.framework in Frameworks */, 724FA5B11CC037C60092477B /* Kerberos.framework in Frameworks */, 724FA5B21CC037C60092477B /* libiconv.dylib in Frameworks */, 724FA5B31CC037C60092477B /* libresolv.dylib in Frameworks */, 724FA5B41CC037C60092477B /* libz.dylib in Frameworks */, 724FA5B51CC037C60092477B /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5C11CC037D90092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA5C21CC037D90092477B /* libcups_static.a in Frameworks */, 724FA5C31CC037D90092477B /* CoreFoundation.framework in Frameworks */, 724FA5C41CC037D90092477B /* Kerberos.framework in Frameworks */, 724FA5C51CC037D90092477B /* libiconv.dylib in Frameworks */, 724FA5C61CC037D90092477B /* libresolv.dylib in Frameworks */, 724FA5C71CC037D90092477B /* libz.dylib in Frameworks */, 724FA5C81CC037D90092477B /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5D61CC037F00092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA5D71CC037F00092477B /* libcups_static.a in Frameworks */, 724FA5D81CC037F00092477B /* CoreFoundation.framework in Frameworks */, 724FA5D91CC037F00092477B /* Kerberos.framework in Frameworks */, 724FA5DA1CC037F00092477B /* Security.framework in Frameworks */, 724FA5DB1CC037F00092477B /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5EA1CC038040092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA5EB1CC038040092477B /* libcups_static.a in Frameworks */, 724FA5EC1CC038040092477B /* CoreFoundation.framework in Frameworks */, 724FA5ED1CC038040092477B /* Kerberos.framework in Frameworks */, 724FA5EE1CC038040092477B /* Security.framework in Frameworks */, 724FA5EF1CC038040092477B /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5FE1CC038190092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA5FF1CC038190092477B /* libcups_static.a in Frameworks */, 724FA6001CC038190092477B /* CoreFoundation.framework in Frameworks */, 724FA6011CC038190092477B /* Kerberos.framework in Frameworks */, 724FA6021CC038190092477B /* Security.framework in Frameworks */, 724FA6031CC038190092477B /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6121CC0382B0092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271284DA1CC1251400E517C7 /* libcupsimage_static.a in Frameworks */, 724FA6131CC0382B0092477B /* libcups_static.a in Frameworks */, 724FA6141CC0382B0092477B /* CoreFoundation.framework in Frameworks */, 724FA6151CC0382B0092477B /* Kerberos.framework in Frameworks */, 724FA6161CC0382B0092477B /* Security.framework in Frameworks */, 724FA6171CC0382B0092477B /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6261CC038410092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA6271CC038410092477B /* libcups_static.a in Frameworks */, 724FA6281CC038410092477B /* CoreFoundation.framework in Frameworks */, 724FA6291CC038410092477B /* Kerberos.framework in Frameworks */, 724FA62A1CC038410092477B /* Security.framework in Frameworks */, 724FA62B1CC038410092477B /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA63A1CC038560092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA63B1CC038560092477B /* libcups_static.a in Frameworks */, 724FA63C1CC038560092477B /* CoreFoundation.framework in Frameworks */, 724FA63D1CC038560092477B /* Kerberos.framework in Frameworks */, 724FA63E1CC038560092477B /* Security.framework in Frameworks */, 724FA63F1CC038560092477B /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA64E1CC0386E0092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA64F1CC0386E0092477B /* libcups_static.a in Frameworks */, 724FA6501CC0386E0092477B /* CoreFoundation.framework in Frameworks */, 724FA6511CC0386E0092477B /* Kerberos.framework in Frameworks */, 724FA6521CC0386E0092477B /* Security.framework in Frameworks */, 724FA6531CC0386E0092477B /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6651CC038A50092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA6661CC038A50092477B /* libcups_static.a in Frameworks */, 724FA6671CC038A50092477B /* CoreFoundation.framework in Frameworks */, 724FA6681CC038A50092477B /* Kerberos.framework in Frameworks */, 724FA6691CC038A50092477B /* Security.framework in Frameworks */, 724FA66A1CC038A50092477B /* SystemConfiguration.framework in Frameworks */, 724FA66B1CC038A50092477B /* libcupsmime.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6771CC038BD0092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA6781CC038BD0092477B /* CoreFoundation.framework in Frameworks */, 724FA6791CC038BD0092477B /* libiconv.dylib in Frameworks */, 724FA67A1CC038BD0092477B /* libresolv.dylib in Frameworks */, 724FA67B1CC038BD0092477B /* libz.dylib in Frameworks */, 724FA67C1CC038BD0092477B /* Security.framework in Frameworks */, 724FA67D1CC038BD0092477B /* SystemConfiguration.framework in Frameworks */, 724FA67E1CC038BD0092477B /* libcups_static.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA68C1CC038D90092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA68D1CC038D90092477B /* libcups_static.a in Frameworks */, 724FA68E1CC038D90092477B /* CoreFoundation.framework in Frameworks */, 724FA68F1CC038D90092477B /* Kerberos.framework in Frameworks */, 724FA6901CC038D90092477B /* Security.framework in Frameworks */, 724FA6911CC038D90092477B /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA69E1CC039200092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271284D71CC124D700E517C7 /* libcupscgi_static.a in Frameworks */, 724FA69F1CC039200092477B /* CoreFoundation.framework in Frameworks */, 724FA6A01CC039200092477B /* libiconv.dylib in Frameworks */, 724FA6A11CC039200092477B /* libresolv.dylib in Frameworks */, 724FA6A21CC039200092477B /* libz.dylib in Frameworks */, 724FA6A31CC039200092477B /* Security.framework in Frameworks */, 724FA6A41CC039200092477B /* SystemConfiguration.framework in Frameworks */, 724FA6A51CC039200092477B /* libcups_static.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6B11CC0393E0092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271284D81CC124E300E517C7 /* libcupscgi_static.a in Frameworks */, 724FA6B21CC0393E0092477B /* libcups_static.a in Frameworks */, 724FA6B31CC0393E0092477B /* CoreFoundation.framework in Frameworks */, 724FA6B41CC0393E0092477B /* Kerberos.framework in Frameworks */, 724FA6B51CC0393E0092477B /* libiconv.dylib in Frameworks */, 724FA6B61CC0393E0092477B /* libresolv.dylib in Frameworks */, 724FA6B71CC0393E0092477B /* libz.dylib in Frameworks */, 724FA6B81CC0393E0092477B /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6C61CC0395A0092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271284DB1CC1251F00E517C7 /* libcupscgi_static.a in Frameworks */, 724FA6C71CC0395A0092477B /* libcups_static.a in Frameworks */, 724FA6C81CC0395A0092477B /* CoreFoundation.framework in Frameworks */, 724FA6C91CC0395A0092477B /* Kerberos.framework in Frameworks */, 724FA6CA1CC0395A0092477B /* Security.framework in Frameworks */, 724FA6CB1CC0395A0092477B /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6DF1CC039DE0092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA6E01CC039DE0092477B /* libcups_static.a in Frameworks */, 724FA6E11CC039DE0092477B /* CoreFoundation.framework in Frameworks */, 724FA6E21CC039DE0092477B /* Kerberos.framework in Frameworks */, 724FA6E31CC039DE0092477B /* Security.framework in Frameworks */, 724FA6E41CC039DE0092477B /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6F41CC03A210092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 271284D91CC124F000E517C7 /* libcupsppdc_static.a in Frameworks */, 724FA6F51CC03A210092477B /* libcups_static.a in Frameworks */, 724FA6F61CC03A210092477B /* CoreFoundation.framework in Frameworks */, 724FA6F71CC03A210092477B /* Kerberos.framework in Frameworks */, 724FA6F81CC03A210092477B /* Security.framework in Frameworks */, 724FA6F91CC03A210092477B /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA7081CC03A490092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 724FA7171CC03A990092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 724FA7371CC03AAF0092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 724FA7481CC03ACC0092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 724FA7491CC03ACC0092477B /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA7641CC03AF60092477B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 7258EADF134594C4009286F1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 7258EAF413459B6D009286F1 /* libcups.dylib in Frameworks */, 7258EAF513459B6D009286F1 /* libcupsimage.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 726AD6F4135E88F0002C930D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2767FC6519267538000F61D3 /* libcups_static.a in Frameworks */, 2767FC6619267538000F61D3 /* CoreFoundation.framework in Frameworks */, 2767FC6719267538000F61D3 /* libresolv.dylib in Frameworks */, 2767FC6819267538000F61D3 /* libz.dylib in Frameworks */, 2767FC6919267538000F61D3 /* Security.framework in Frameworks */, 2767FC6A19267538000F61D3 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 72CF95EB18A19134000FCAE4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 72CF95EC18A19134000FCAE4 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 72F75A4F1336F950004BB496 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 276683E51337B2BE000D33D0 /* libcupsimage.dylib in Frameworks */, 276683E21337B29C000D33D0 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 72F75A5E1336F9A3004BB496 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 72F75A671336FA38004BB496 /* libcups.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 2712867F1CC1394100E517C7 /* monitors */ = { isa = PBXGroup; children = ( 271286801CC1396100E517C7 /* bcp.c */, 271286811CC1396100E517C7 /* tbcp.c */, ); name = monitors; sourceTree = ""; }; 271286821CC13D7600E517C7 /* tools */ = { isa = PBXGroup; children = ( 2712871D1CC140B400E517C7 /* genstrings.cxx */, 271286831CC13D9600E517C7 /* checkpo.c */, 271286841CC13D9600E517C7 /* cups.pot */, 271287191CC13FDB00E517C7 /* mantohtml.c */, 271286851CC13D9600E517C7 /* po2strings.c */, 271286861CC13D9600E517C7 /* strings2po.c */, ); name = tools; sourceTree = ""; }; 273BF6B81333B4A90022CAAB /* tests */ = { isa = PBXGroup; children = ( 270D02251D707E3700EA9403 /* testcreds.c */, 2712866A1CC130FF00E517C7 /* rasterbench.c */, 724FA65B1CC0389F0092477B /* test1284.c */, 727EF041192E3544001EF690 /* testadmin.c */, 727EF042192E3544001EF690 /* testarray.c */, 724FA65C1CC0389F0092477B /* testbackend.c */, 727EF043192E3544001EF690 /* testcache.c */, 724FA6EC1CC03A1D0092477B /* testcatalog.cxx */, 727EF03D192E3498001EF690 /* testcgi.c */, 727EF044192E3544001EF690 /* testconflicts.c */, 273BF6C61333B5370022CAAB /* testcups.c */, 2767FC5119266A36000F61D3 /* testdest.c */, 727EF045192E3544001EF690 /* testfile.c */, 727EF03E192E3498001EF690 /* testhi.c */, 278C58E2136B647200836530 /* testhttp.c */, 727EF046192E3544001EF690 /* testi18n.c */, 727EF047192E3544001EF690 /* testipp.c */, 727EF048192E3544001EF690 /* testlang.c */, 727EF04D192E3602001EF690 /* testlpd.c */, 270CCDBB135E3D3E00007BE2 /* testmime.c */, 724FA6D71CC039D00092477B /* testnotify.c */, 727EF049192E3544001EF690 /* testoptions.c */, 727EF04A192E3544001EF690 /* testppd.c */, 727EF04B192E3544001EF690 /* testpwg.c */, 27F89DA21B3AC43B00E5A4B7 /* testraster.c */, 727EF04C192E3544001EF690 /* testsnmp.c */, 727EF04E192E3602001EF690 /* testspeed.c */, 727EF04F192E3602001EF690 /* testsub.c */, 724FA65D1CC0389F0092477B /* testsupplies.c */, 727EF03F192E3498001EF690 /* testtemplate.c */, 271286681CC130BD00E517C7 /* tlscheck.c */, ); name = tests; sourceTree = ""; wrapsLines = 1; }; 274FF5D513332C2C00317ECB /* daemon */ = { isa = PBXGroup; children = ( 274FF6351333344400317ECB /* cups-deviced.c */, 274FF5D613332CC700317ECB /* cups-driverd.cxx */, 274FF6491333398D00317ECB /* cups-exec.c */, 274FF65B133339FC00317ECB /* cups-lpd.c */, 274FF5D713332CC700317ECB /* util.c */, 274FF5D813332CC700317ECB /* util.h */, ); name = daemon; sourceTree = ""; wrapsLines = 1; }; 274FF5F41333310400317ECB /* libcupsppdc */ = { isa = PBXGroup; children = ( 274FF5F51333315100317ECB /* ppdc-array.cxx */, 274FF5F61333315100317ECB /* ppdc-attr.cxx */, 274FF5F71333315100317ECB /* ppdc-catalog.cxx */, 274FF5F81333315100317ECB /* ppdc-choice.cxx */, 274FF5F91333315100317ECB /* ppdc-constraint.cxx */, 274FF5FA1333315100317ECB /* ppdc-driver.cxx */, 274FF5FB1333315100317ECB /* ppdc-file.cxx */, 274FF5FC1333315100317ECB /* ppdc-filter.cxx */, 274FF5FD1333315100317ECB /* ppdc-font.cxx */, 274FF5FE1333315100317ECB /* ppdc-group.cxx */, 274FF5FF1333315100317ECB /* ppdc-import.cxx */, 274FF6001333315100317ECB /* ppdc-mediasize.cxx */, 274FF6011333315100317ECB /* ppdc-message.cxx */, 274FF6021333315100317ECB /* ppdc-option.cxx */, 274FF6031333315100317ECB /* ppdc-private.h */, 274FF6041333315100317ECB /* ppdc-profile.cxx */, 274FF6051333315100317ECB /* ppdc-shared.cxx */, 274FF6061333315100317ECB /* ppdc-source.cxx */, 274FF6071333315100317ECB /* ppdc-string.cxx */, 274FF6081333315100317ECB /* ppdc-variable.cxx */, ); name = libcupsppdc; sourceTree = ""; wrapsLines = 1; }; 274FF67313333B0A00317ECB /* commands */ = { isa = PBXGroup; children = ( 2732E089137A3F5200FAFEF6 /* cancel.c */, 2732E08A137A3F5200FAFEF6 /* cupsaccept.c */, 276684101337FA7C000D33D0 /* cupsaddsmb.c */, 276683681337AA00000D33D0 /* cupsctl.c */, 274FF68713333B6E00317ECB /* cupsfilter.c */, 2732E08B137A3F5200FAFEF6 /* cupstestdsc.c */, 72F75A5B1336F988004BB496 /* cupstestppd.c */, 72CF95F218A19165000FCAE4 /* ippfind.c */, 726AD701135E8A90002C930D /* ippserver.c */, 276683F91337F7A9000D33D0 /* ipptool.c */, 2732E08C137A3F5200FAFEF6 /* lp.c */, 2732E08D137A3F5200FAFEF6 /* lpadmin.c */, 271284DD1CC125FC00E517C7 /* lpc.c */, 2732E08E137A3F5200FAFEF6 /* lpinfo.c */, 2732E08F137A3F5200FAFEF6 /* lpmove.c */, 2732E090137A3F5200FAFEF6 /* lpoptions.c */, 271284DE1CC125FC00E517C7 /* lpq.c */, 271284DF1CC125FC00E517C7 /* lpr.c */, 271284E01CC125FC00E517C7 /* lprm.c */, 2732E092137A3F5200FAFEF6 /* lpstat.c */, ); name = commands; sourceTree = ""; wrapsLines = 1; }; 276683CB1337B1CC000D33D0 /* ppdc tools */ = { isa = PBXGroup; children = ( 276683CC1337B201000D33D0 /* ppdc.cxx */, 276683CE1337B20D000D33D0 /* ppdhtml.cxx */, 276683D01337B21A000D33D0 /* ppdi.cxx */, 276683D21337B228000D33D0 /* ppdmerge.cxx */, 276683D41337B237000D33D0 /* ppdpo.cxx */, ); name = "ppdc tools"; sourceTree = ""; wrapsLines = 1; }; 72220EAF1333047D00FCA411 /* Products */ = { isa = PBXGroup; children = ( 72220F5B13330A5A00FCA411 /* cupsd */, 274FF5CC13332B1F00317ECB /* cups-driverd */, 274FF6291333333600317ECB /* cups-deviced */, 274FF63E1333358B00317ECB /* cups-exec */, 274FF64F133339C400317ECB /* cups-lpd */, 274FF67813333B2F00317ECB /* cupsfilter */, 273BF6BD1333B5000022CAAB /* testcups */, 724378FD1333E43E009631B9 /* ipp */, 724379181333E532009631B9 /* lpd */, 724379301333FB85009631B9 /* socket */, 724379471333FEA9009631B9 /* dnssd */, 7243795B1333FF1D009631B9 /* usb */, 72F75A521336F950004BB496 /* cupstestppd */, 2766835C1337A9B6000D33D0 /* cupsctl */, 276683701337AC79000D33D0 /* ppdc */, 2766837D1337AC8C000D33D0 /* ppdhtml */, 2766838A1337AC97000D33D0 /* ppdi */, 276683971337ACA2000D33D0 /* ppdmerge */, 276683A41337ACAB000D33D0 /* ppdpo */, 276683F01337F78E000D33D0 /* ipptool */, 276684041337FA1D000D33D0 /* cupsaddsmb */, 7258EAE2134594C4009286F1 /* rastertopwg */, 720DD6C21358FD5F0064AA82 /* snmp */, 270CCDA7135E3C9E00007BE2 /* testmime */, 726AD6F7135E88F0002C930D /* ippserver */, 278C58CB136B640300836530 /* testhttp */, 72A4332F155844CF002E172D /* libcups_static.a */, 72CF95F118A19134000FCAE4 /* ipptool copy */, 2767FC5019266A0D000F61D3 /* testdest */, 27A0347B1A8BDB1300650675 /* lpadmin */, 2706965A1CADF3E200FFE5FB /* libcups_ios.a */, 724FA5351CC0370C0092477B /* testadmin */, 724FA5481CC037370092477B /* testarray */, 724FA55B1CC037500092477B /* testcache */, 724FA56E1CC037670092477B /* testconflicts */, 724FA5811CC037810092477B /* testfile */, 724FA5941CC037980092477B /* testi18n */, 724FA5A71CC037AA0092477B /* testipp */, 724FA5BA1CC037C60092477B /* testlang */, 724FA5CD1CC037D90092477B /* testlpd */, 724FA5E11CC037F00092477B /* testoptions */, 724FA5F51CC038040092477B /* testppd */, 724FA6091CC038190092477B /* testpwg */, 724FA61D1CC0382B0092477B /* testraster */, 724FA6311CC038410092477B /* testsnmp */, 724FA6451CC038560092477B /* testspeed */, 724FA6591CC0386E0092477B /* testsub */, 724FA6701CC038A50092477B /* test1284 */, 724FA6831CC038BD0092477B /* testbackend */, 724FA6971CC038D90092477B /* testsupplies */, 724FA6AA1CC039200092477B /* testcgi */, 724FA6BD1CC0393E0092477B /* testhi */, 724FA6D11CC0395A0092477B /* testtemplate */, 724FA6EA1CC039DE0092477B /* testnotify */, 724FA6FF1CC03A210092477B /* testcatalog */, 724FA70F1CC03A490092477B /* libcupsimage_static.a */, 724FA71F1CC03A990092477B /* libcupsmime_static.a */, 724FA7401CC03AAF0092477B /* libcupsppdc_static.a */, 724FA74F1CC03ACC0092477B /* libcupscgi.dylib */, 724FA76B1CC03AF60092477B /* libcupscgi_static.a */, 271284EC1CC1261900E517C7 /* cancel */, 271284F91CC1264B00E517C7 /* cupsaccept */, 271285061CC1265D00E517C7 /* cupstestdsc */, 271285131CC1267A00E517C7 /* lp */, 271285201CC1269700E517C7 /* lpc */, 2712852D1CC126AA00E517C7 /* lpinfo */, 2712853A1CC1270B00E517C7 /* lpmove */, 271285471CC1271E00E517C7 /* lpoptions */, 271285541CC1272D00E517C7 /* lpq */, 271285611CC1274300E517C7 /* lpr */, 2712856E1CC1275200E517C7 /* lprm */, 2712857B1CC1276400E517C7 /* lpstat */, 271285A01CC12D1300E517C7 /* admin.cgi */, 271285AF1CC12D3A00E517C7 /* classes.cgi */, 271285BD1CC12D4E00E517C7 /* jobs.cgi */, 271285CB1CC12D5E00E517C7 /* printers.cgi */, 271285D81CC12DBF00E517C7 /* commandtops */, 271285E51CC12DDF00E517C7 /* gziptoany */, 271285F21CC12E2E00E517C7 /* pstops */, 271286001CC12EEB00E517C7 /* rastertoepson */, 271286131CC12F0B00E517C7 /* rastertohp */, 271286231CC12F1A00E517C7 /* rastertolabel */, 271286671CC1309000E517C7 /* tlscheck */, 2712867D1CC1310E00E517C7 /* rasterbench */, 271286961CC13DC000E517C7 /* checkpo */, 271286A71CC13DF100E517C7 /* po2strings */, 271286B81CC13DFF00E517C7 /* strings2po */, 271286C91CC13E2100E517C7 /* bcp */, 271286D91CC13E5B00E517C7 /* tbcp */, 271286F31CC13F2000E517C7 /* mailto */, 271287031CC13F3F00E517C7 /* rss */, 271287181CC13FAB00E517C7 /* mantohtml */, 2712872C1CC140BE00E517C7 /* genstrings */, 270D02241D707E0200EA9403 /* testcreds */, ); name = Products; sourceTree = ""; }; 72220EB41333050100FCA411 /* libcups */ = { isa = PBXGroup; children = ( 276683561337A8C5000D33D0 /* cups.strings */, 27D3037D134148CB00F022B1 /* libcups2.def */, 72220EB51333052D00FCA411 /* adminutil.c */, 72220EB81333056300FCA411 /* array.c */, 72220EBB1333056300FCA411 /* auth.c */, 72220EBC1333056300FCA411 /* backchannel.c */, 72220EBD1333056300FCA411 /* backend.c */, 72220ED1133305BB00FCA411 /* debug.c */, 72220ED2133305BB00FCA411 /* dest.c */, 72CF95E018A13543000FCAE4 /* dest-job.c */, 72CF95E118A13543000FCAE4 /* dest-localization.c */, 72CF95E218A13543000FCAE4 /* dest-options.c */, 72220ED3133305BB00FCA411 /* dir.c */, 72220ED4133305BB00FCA411 /* dir.h */, 72220ED6133305BB00FCA411 /* encode.c */, 72220ED8133305BB00FCA411 /* file.c */, 72220EDA133305BB00FCA411 /* getdevices.c */, 72220EDB133305BB00FCA411 /* getifaddrs.c */, 72220EDC133305BB00FCA411 /* getputfile.c */, 72220EDD133305BB00FCA411 /* globals.c */, 7284F9EF1BFCCD940026F886 /* hash.c */, 72220EE2133305BB00FCA411 /* http.c */, 72220EDE133305BB00FCA411 /* http-addr.c */, 72220EDF133305BB00FCA411 /* http-addrlist.c */, 72220EE1133305BB00FCA411 /* http-support.c */, 72220EE6133305BB00FCA411 /* ipp.c */, 72220EE5133305BB00FCA411 /* ipp-support.c */, 72220EE8133305BB00FCA411 /* langprintf.c */, 72220EEA133305BB00FCA411 /* language.c */, 72220EEF133305BB00FCA411 /* md5.c */, 72220EF0133305BB00FCA411 /* md5passwd.c */, 72220EF1133305BB00FCA411 /* notify.c */, 72220EF2133305BB00FCA411 /* options.c */, 72220EF6133305BB00FCA411 /* ppd.c */, 72220EBA1333056300FCA411 /* ppd-attr.c */, 72220EF4133305BB00FCA411 /* ppd-cache.c */, 72220EBF1333056300FCA411 /* ppd-conflicts.c */, 72220EC21333056300FCA411 /* ppd-custom.c */, 72220ED5133305BB00FCA411 /* ppd-emit.c */, 72220EEC133305BB00FCA411 /* ppd-localize.c */, 72220EED133305BB00FCA411 /* ppd-mark.c */, 72220EF3133305BB00FCA411 /* ppd-page.c */, 72A8B3D61C188BDE00A1A547 /* ppd-util.c */, 72220EF8133305BB00FCA411 /* pwg-media.c */, 72220EFB133305BB00FCA411 /* request.c */, 72220EFC133305BB00FCA411 /* sidechannel.c */, 72220EFF133305BB00FCA411 /* snmp.c */, 72220F00133305BB00FCA411 /* snprintf.c */, 72220F02133305BB00FCA411 /* string.c */, 72220F03133305BB00FCA411 /* tempfile.c */, 72220F05133305BB00FCA411 /* thread.c */, 727AD5B619100A58009F6862 /* tls.c */, 270B267D17F5C06700C8A3A9 /* tls-darwin.c */, 270B267E17F5C06700C8A3A9 /* tls-gnutls.c */, 270B268117F5C5D600C8A3A9 /* tls-sspi.c */, 72220F06133305BB00FCA411 /* transcode.c */, 72220F08133305BB00FCA411 /* usersys.c */, 72220F09133305BB00FCA411 /* util.c */, ); name = libcups; sourceTree = ""; wrapsLines = 1; }; 72220F45133305D000FCA411 /* Public Headers */ = { isa = PBXGroup; children = ( 72220EB71333056300FCA411 /* adminutil.h */, 72220EB91333056300FCA411 /* array.h */, 72220EBE1333056300FCA411 /* backend.h */, 72220EC11333056300FCA411 /* cups.h */, 72220ED9133305BB00FCA411 /* file.h */, 72220EE3133305BB00FCA411 /* http.h */, 72220EE7133305BB00FCA411 /* ipp.h */, 72220EEB133305BB00FCA411 /* language.h */, 72220EF7133305BB00FCA411 /* ppd.h */, 274FF6091333315100317ECB /* ppdc.h */, 2767FC7519269687000F61D3 /* pwg.h */, 72220EFA133305BB00FCA411 /* raster.h */, 72220EFD133305BB00FCA411 /* sidechannel.h */, 72220F07133305BB00FCA411 /* transcode.h */, 72220F0A133305BB00FCA411 /* versioning.h */, ); name = "Public Headers"; sourceTree = ""; wrapsLines = 1; }; 72220F461333060C00FCA411 /* Private Headers */ = { isa = PBXGroup; children = ( 72220F471333063D00FCA411 /* config.h */, 7234F41F1378A16F00D3E9C9 /* array-private.h */, 72220EC01333056300FCA411 /* cups-private.h */, 72220EC31333056300FCA411 /* debug-private.h */, 72220ED7133305BB00FCA411 /* file-private.h */, 72220EE0133305BB00FCA411 /* http-private.h */, 72220EE4133305BB00FCA411 /* ipp-private.h */, 72220EE9133305BB00FCA411 /* language-private.h */, 72220EEE133305BB00FCA411 /* md5-private.h */, 72220FB413330BCE00FCA411 /* mime.h */, 7271883C1374AB14001A2036 /* mime-private.h */, 72220EF5133305BB00FCA411 /* ppd-private.h */, 72220EF9133305BB00FCA411 /* pwg-private.h */, 2767FC76192696A0000F61D3 /* raster-private.h */, 72220EFE133305BB00FCA411 /* snmp-private.h */, 72220F01133305BB00FCA411 /* string-private.h */, 72220F04133305BB00FCA411 /* thread-private.h */, ); name = "Private Headers"; sourceTree = ""; wrapsLines = 1; }; 72220F5D13330A5A00FCA411 /* cupsd */ = { isa = PBXGroup; children = ( 72E65BDC18DC852700097E89 /* Makefile */, 7226369B18AE6D19004ED309 /* org.cups.cups-lpd.plist */, 72E65BD518DC818400097E89 /* org.cups.cups-lpd.plist.in */, 72496E171A13A03B0051899C /* org.cups.cups-lpdAT.service.in */, 72496E161A13A03B0051899C /* org.cups.cups-lpd.socket */, 72E65BD618DC818400097E89 /* org.cups.cupsd.path.in */, 7226369C18AE6D19004ED309 /* org.cups.cupsd.plist */, 72E65BD718DC818400097E89 /* org.cups.cupsd.service.in */, 72E65BD818DC818400097E89 /* org.cups.cupsd.socket.in */, 72220F6913330B0C00FCA411 /* auth.c */, 72220F6A13330B0C00FCA411 /* auth.h */, 72220F6B13330B0C00FCA411 /* banners.c */, 72220F6C13330B0C00FCA411 /* banners.h */, 72220F6D13330B0C00FCA411 /* cert.c */, 72220F6E13330B0C00FCA411 /* cert.h */, 72220F6F13330B0C00FCA411 /* classes.c */, 72220F7013330B0C00FCA411 /* classes.h */, 72220F7113330B0C00FCA411 /* client.c */, 72220F7213330B0C00FCA411 /* client.h */, 72D53A3615B4929D003F877F /* colorman.c */, 72D53A3715B4929D003F877F /* colorman.h */, 72220F7313330B0C00FCA411 /* conf.c */, 72220F7413330B0C00FCA411 /* conf.h */, 72220F7513330B0C00FCA411 /* cupsd.h */, 72220F7613330B0C00FCA411 /* dirsvc.c */, 72220F7713330B0C00FCA411 /* dirsvc.h */, 72220F7813330B0C00FCA411 /* env.c */, 72C16CB8137B195D007E4BF4 /* file.c */, 72220F7913330B0C00FCA411 /* ipp.c */, 72220F7A13330B0C00FCA411 /* job.c */, 72220F7B13330B0C00FCA411 /* job.h */, 72220F7C13330B0C00FCA411 /* listen.c */, 72220F7D13330B0C00FCA411 /* log.c */, 72220F7E13330B0C00FCA411 /* main.c */, 72220F7F13330B0C00FCA411 /* network.c */, 72220F8013330B0C00FCA411 /* network.h */, 72220F8113330B0C00FCA411 /* policy.c */, 72220F8213330B0C00FCA411 /* policy.h */, 72220F8313330B0C00FCA411 /* printers.c */, 72220F8413330B0C00FCA411 /* printers.h */, 72220F8513330B0C00FCA411 /* process.c */, 72220F8613330B0C00FCA411 /* quotas.c */, 72220F8813330B0C00FCA411 /* select.c */, 72220F8913330B0C00FCA411 /* server.c */, 72220F8A13330B0C00FCA411 /* statbuf.c */, 72220F8B13330B0C00FCA411 /* statbuf.h */, 72220F8C13330B0C00FCA411 /* subscriptions.c */, 72220F8D13330B0C00FCA411 /* subscriptions.h */, 72220F8E13330B0C00FCA411 /* sysman.c */, 72220F8F13330B0C00FCA411 /* sysman.h */, ); name = cupsd; path = .; sourceTree = ""; wrapsLines = 1; }; 72220FB013330B3400FCA411 /* libcupsmime */ = { isa = PBXGroup; children = ( 72220FB213330BCE00FCA411 /* filter.c */, 72220FB313330BCE00FCA411 /* mime.c */, 72220FB513330BCE00FCA411 /* type.c */, ); name = libcupsmime; sourceTree = ""; wrapsLines = 1; }; 72220FB113330B4A00FCA411 /* Frameworks */ = { isa = PBXGroup; children = ( 2767FC591926750C000F61D3 /* CoreFoundation.framework */, 2767FC5A1926750C000F61D3 /* libiconv.dylib */, 2767FC5B1926750C000F61D3 /* libresolv.dylib */, 2767FC5C1926750C000F61D3 /* libz.dylib */, 2767FC5D1926750C000F61D3 /* Security.framework */, 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */, 72D53A3915B492FA003F877F /* libpam.dylib */, 72D53A3315B4925B003F877F /* ApplicationServices.framework */, 72D53A2C15B4913D003F877F /* IOKit.framework */, 72D53A2915B49110003F877F /* GSS.framework */, 728FB7EF1536167A005426E1 /* libiconv.dylib */, 728FB7F01536167A005426E1 /* libresolv.dylib */, 728FB7EC1536161C005426E1 /* libz.dylib */, 278C58E5136B64AF00836530 /* CoreFoundation.framework */, 278C58E6136B64B000836530 /* Kerberos.framework */, 278C58E7136B64B000836530 /* Security.framework */, 278C58E8136B64B000836530 /* SystemConfiguration.framework */, 72220EAE1333047D00FCA411 /* libcups.dylib */, 72F75A611336F9A3004BB496 /* libcupsimage.dylib */, 72220FAC13330B2200FCA411 /* libcupsmime.dylib */, 274FF5EE133330C800317ECB /* libcupsppdc.dylib */, ); name = Frameworks; sourceTree = ""; }; 724378F71333E3CE009631B9 /* backends */ = { isa = PBXGroup; children = ( 724379091333E4E3009631B9 /* backend-private.h */, 724379501333FEBB009631B9 /* dnssd.c */, 724379CA1334000E009631B9 /* ieee1284.c */, 7243790A1333E4E3009631B9 /* ipp.c */, 724379281333E952009631B9 /* lpd.c */, 7243790B1333E4E3009631B9 /* network.c */, 724379121333E516009631B9 /* runloop.c */, 7243790C1333E4E3009631B9 /* snmp-supplies.c */, 720DD6D21358FDDE0064AA82 /* snmp.c */, 7243793C1333FD19009631B9 /* socket.c */, 724379C51333FFC7009631B9 /* usb.c */, 724379C41333FFC7009631B9 /* usb-darwin.c */, 72FC29CF1A37A1CA00BDF935 /* usb-libusb.c */, 72FC29D01A37A1CA00BDF935 /* usb-unix.c */, 72F7F1D719D1C0CC00870B09 /* org.cups.usb-quirks */, ); name = backends; sourceTree = ""; wrapsLines = 1; }; 724FA6D31CC0399D0092477B /* notifiers */ = { isa = PBXGroup; children = ( 724FA6D41CC039D00092477B /* dbus.c */, 724FA6D51CC039D00092477B /* mailto.c */, 724FA6D61CC039D00092477B /* rss.c */, ); name = notifiers; sourceTree = ""; }; 7258EADC134594A8009286F1 /* filters */ = { isa = PBXGroup; children = ( 7271881713746EA8001A2036 /* commandtops.c */, 7271881813746EA8001A2036 /* common.c */, 7271881913746EA8001A2036 /* common.h */, 7271881A13746EA8001A2036 /* gziptoany.c */, 7271882013746EA8001A2036 /* pstops.c */, 7271882113746EA8001A2036 /* rastertoepson.c */, 7271882213746EA8001A2036 /* rastertohp.c */, 7271882313746EA8001A2036 /* rastertolabel.c */, 7258EAEC134594EB009286F1 /* rastertopwg.c */, ); name = filters; sourceTree = ""; wrapsLines = 1; }; 727EF02E192E3461001EF690 /* cgi-bin */ = { isa = PBXGroup; children = ( 727EF02F192E3498001EF690 /* admin.c */, 727EF030192E3498001EF690 /* cgi-private.h */, 727EF031192E3498001EF690 /* cgi.h */, 727EF032192E3498001EF690 /* classes.c */, 727EF033192E3498001EF690 /* help-index.c */, 727EF034192E3498001EF690 /* help-index.h */, 727EF035192E3498001EF690 /* help.c */, 727EF036192E3498001EF690 /* html.c */, 727EF037192E3498001EF690 /* ipp-var.c */, 727EF038192E3498001EF690 /* jobs.c */, 727EF039192E3498001EF690 /* makedocset.c */, 727EF03A192E3498001EF690 /* printers.c */, 727EF03B192E3498001EF690 /* search.c */, 727EF03C192E3498001EF690 /* template.c */, 727EF040192E3498001EF690 /* var.c */, ); name = "cgi-bin"; sourceTree = ""; }; 72BF96351333042100B1EAD7 = { isa = PBXGroup; children = ( 72E65BA218DC796500097E89 /* Autoconf Files */, 72E65BB818DC79F800097E89 /* Documentation */, 72220F45133305D000FCA411 /* Public Headers */, 72220F461333060C00FCA411 /* Private Headers */, 72220EB41333050100FCA411 /* libcups */, 72F75A681336FA42004BB496 /* libcupsimage */, 72220FB013330B3400FCA411 /* libcupsmime */, 274FF5F41333310400317ECB /* libcupsppdc */, 724378F71333E3CE009631B9 /* backends */, 727EF02E192E3461001EF690 /* cgi-bin */, 274FF67313333B0A00317ECB /* commands */, 72220F5D13330A5A00FCA411 /* cupsd */, 274FF5D513332C2C00317ECB /* daemon */, 7258EADC134594A8009286F1 /* filters */, 2712867F1CC1394100E517C7 /* monitors */, 724FA6D31CC0399D0092477B /* notifiers */, 276683CB1337B1CC000D33D0 /* ppdc tools */, 273BF6B81333B4A90022CAAB /* tests */, 271286821CC13D7600E517C7 /* tools */, 72220FB113330B4A00FCA411 /* Frameworks */, 72220EAF1333047D00FCA411 /* Products */, ); indentWidth = 2; sourceTree = ""; tabWidth = 8; wrapsLines = 1; }; 72E65BA218DC796500097E89 /* Autoconf Files */ = { isa = PBXGroup; children = ( 72E65BD918DC850A00097E89 /* Makefile */, 72E65BB718DC79CC00097E89 /* Makedefs.in */, 72E65BA318DC797E00097E89 /* configure.ac */, 7226369D18AE73BB004ED309 /* config.h.in */, 72E65BB618DC79CC00097E89 /* cups-config.in */, 72E65BA418DC799B00097E89 /* cups-common.m4 */, 72E65BA518DC799B00097E89 /* cups-compiler.m4 */, 72E65BA618DC799B00097E89 /* cups-defaults.m4 */, 72E65BA718DC799B00097E89 /* cups-directories.m4 */, 72E65BA818DC799B00097E89 /* cups-dnssd.m4 */, 72E65BA918DC799B00097E89 /* cups-gssapi.m4 */, 72E65BAA18DC799B00097E89 /* cups-largefile.m4 */, 72E65BAB18DC799B00097E89 /* cups-startup.m4 */, 72E65BAC18DC799B00097E89 /* cups-libtool.m4 */, 72E65BAD18DC799B00097E89 /* cups-manpages.m4 */, 72E65BAE18DC799B00097E89 /* cups-network.m4 */, 72E65BAF18DC799B00097E89 /* cups-opsys.m4 */, 72E65BB018DC799B00097E89 /* cups-pam.m4 */, 72E65BB118DC799B00097E89 /* cups-poll.m4 */, 72E65BB218DC799B00097E89 /* cups-scripting.m4 */, 72E65BB318DC799B00097E89 /* cups-sharedlibs.m4 */, 72E65BB418DC799B00097E89 /* cups-ssl.m4 */, 72E65BB518DC799B00097E89 /* cups-threads.m4 */, ); name = "Autoconf Files"; sourceTree = ""; }; 72E65BB818DC79F800097E89 /* Documentation */ = { isa = PBXGroup; children = ( 274561481F545B2E000378E4 /* api-admin.header */, 274561491F545B2E000378E4 /* api-admin.shtml */, 72E65BC118DC7A6B00097E89 /* api-filter.header */, 72E65BC218DC7A6B00097E89 /* api-filter.shtml */, 72E65BC518DC7A6B00097E89 /* api-overview.header */, 72E65BC618DC7A6B00097E89 /* api-overview.shtml */, 72E65BC718DC7A6B00097E89 /* api-ppd.header */, 72E65BC818DC7A6B00097E89 /* api-ppd.shtml */, 72E65BCB18DC7A9800097E89 /* api-raster.header */, 72E65BCC18DC7A9800097E89 /* api-raster.shtml */, 72E65BDD18DCA35700097E89 /* CHANGES-1.7.txt */, 729D4B561A2CB48700692B21 /* CHANGES-2.0.txt */, 72E65BDE18DCA35700097E89 /* CHANGES.md */, 72E65BDF18DCA35700097E89 /* CREDITS.md */, 274561471F545B2E000378E4 /* cupspm.md */, 72E65BB918DC7A3600097E89 /* doc */, 72E65BE018DCA35700097E89 /* INSTALL.md */, 72E65BE218DCA35700097E89 /* LICENSE.txt */, 72E65BBA18DC7A3600097E89 /* man */, 72E65BCD18DC7A9800097E89 /* postscript-driver.header */, 72E65BCE18DC7A9800097E89 /* postscript-driver.shtml */, 72E65BCF18DC7A9800097E89 /* ppd-compiler.header */, 72E65BD018DC7A9800097E89 /* ppd-compiler.shtml */, 72E65BD118DC7A9800097E89 /* raster-driver.header */, 72E65BD218DC7A9800097E89 /* raster-driver.shtml */, 72E65BE318DCA35700097E89 /* README.md */, 72E65BD318DC7A9800097E89 /* spec-ppd.header */, 72E65BD418DC7A9800097E89 /* spec-ppd.shtml */, ); name = Documentation; sourceTree = ""; }; 72F75A681336FA42004BB496 /* libcupsimage */ = { isa = PBXGroup; children = ( 72F75A691336FA8A004BB496 /* error.c */, 72F75A6A1336FA8A004BB496 /* interpret.c */, 72F75A6B1336FA8A004BB496 /* raster.c */, ); name = libcupsimage; sourceTree = ""; wrapsLines = 1; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 2706963C1CADF3E200FFE5FB /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 2706963D1CADF3E200FFE5FB /* adminutil.h in Headers */, 2706963E1CADF3E200FFE5FB /* array.h in Headers */, 2706963F1CADF3E200FFE5FB /* backend.h in Headers */, 270696401CADF3E200FFE5FB /* cups-private.h in Headers */, 270696411CADF3E200FFE5FB /* debug-private.h in Headers */, 270696421CADF3E200FFE5FB /* file-private.h in Headers */, 270696431CADF3E200FFE5FB /* http-private.h in Headers */, 270696441CADF3E200FFE5FB /* ipp-private.h in Headers */, 270696451CADF3E200FFE5FB /* language-private.h in Headers */, 270696461CADF3E200FFE5FB /* md5-private.h in Headers */, 270696471CADF3E200FFE5FB /* ppd-private.h in Headers */, 270696481CADF3E200FFE5FB /* pwg-private.h in Headers */, 270696491CADF3E200FFE5FB /* snmp-private.h in Headers */, 2706964A1CADF3E200FFE5FB /* string-private.h in Headers */, 2706964B1CADF3E200FFE5FB /* thread-private.h in Headers */, 2706964C1CADF3E200FFE5FB /* config.h in Headers */, 2706964D1CADF3E200FFE5FB /* cups.h in Headers */, 2706964E1CADF3E200FFE5FB /* dir.h in Headers */, 2706964F1CADF3E200FFE5FB /* file.h in Headers */, 270696501CADF3E200FFE5FB /* http.h in Headers */, 270696511CADF3E200FFE5FB /* ipp.h in Headers */, 270696521CADF3E200FFE5FB /* language.h in Headers */, 270696531CADF3E200FFE5FB /* ppd.h in Headers */, 270696541CADF3E200FFE5FB /* sidechannel.h in Headers */, 270696551CADF3E200FFE5FB /* transcode.h in Headers */, 270696561CADF3E200FFE5FB /* versioning.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF5EC133330C800317ECB /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 274FF61E1333315100317ECB /* ppdc.h in Headers */, 274FF6181333315100317ECB /* ppdc-private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF6C11333B1C400317ECB /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 274FF6C21333B1C400317ECB /* adminutil.h in Headers */, 274FF6C31333B1C400317ECB /* array.h in Headers */, 274FF6C41333B1C400317ECB /* backend.h in Headers */, 274FF6D01333B1C400317ECB /* cups-private.h in Headers */, 274FF6D11333B1C400317ECB /* debug-private.h in Headers */, 274FF6D21333B1C400317ECB /* file-private.h in Headers */, 274FF6D31333B1C400317ECB /* http-private.h in Headers */, 274FF6D41333B1C400317ECB /* ipp-private.h in Headers */, 274FF6D51333B1C400317ECB /* language-private.h in Headers */, 274FF6D61333B1C400317ECB /* md5-private.h in Headers */, 274FF6D71333B1C400317ECB /* ppd-private.h in Headers */, 274FF6D81333B1C400317ECB /* pwg-private.h in Headers */, 274FF6D91333B1C400317ECB /* snmp-private.h in Headers */, 274FF6DA1333B1C400317ECB /* string-private.h in Headers */, 274FF6DB1333B1C400317ECB /* thread-private.h in Headers */, 274FF6DC1333B1C400317ECB /* config.h in Headers */, 274FF6C51333B1C400317ECB /* cups.h in Headers */, 274FF6C61333B1C400317ECB /* dir.h in Headers */, 274FF6C71333B1C400317ECB /* file.h in Headers */, 274FF6C81333B1C400317ECB /* http.h in Headers */, 274FF6C91333B1C400317ECB /* ipp.h in Headers */, 274FF6CA1333B1C400317ECB /* language.h in Headers */, 274FF6CB1333B1C400317ECB /* ppd.h in Headers */, 274FF6CD1333B1C400317ECB /* sidechannel.h in Headers */, 274FF6CE1333B1C400317ECB /* transcode.h in Headers */, 274FF6CF1333B1C400317ECB /* versioning.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 72220EAC1333047D00FCA411 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 72220EC41333056300FCA411 /* adminutil.h in Headers */, 72220EC61333056300FCA411 /* array.h in Headers */, 72220ECB1333056300FCA411 /* backend.h in Headers */, 72220ECE1333056300FCA411 /* cups.h in Headers */, 72220F0E133305BB00FCA411 /* dir.h in Headers */, 72220F13133305BB00FCA411 /* file.h in Headers */, 72220F1D133305BB00FCA411 /* http.h in Headers */, 72220F21133305BB00FCA411 /* ipp.h in Headers */, 72220F25133305BB00FCA411 /* language.h in Headers */, 72220F31133305BB00FCA411 /* ppd.h in Headers */, 72220F37133305BB00FCA411 /* sidechannel.h in Headers */, 72220F41133305BB00FCA411 /* transcode.h in Headers */, 72220F44133305BB00FCA411 /* versioning.h in Headers */, 7234F4201378A16F00D3E9C9 /* array-private.h in Headers */, 72220ECD1333056300FCA411 /* cups-private.h in Headers */, 72220ED01333056300FCA411 /* debug-private.h in Headers */, 72220F11133305BB00FCA411 /* file-private.h in Headers */, 72220F1A133305BB00FCA411 /* http-private.h in Headers */, 72220F1E133305BB00FCA411 /* ipp-private.h in Headers */, 72220F23133305BB00FCA411 /* language-private.h in Headers */, 72220F28133305BB00FCA411 /* md5-private.h in Headers */, 72220F2F133305BB00FCA411 /* ppd-private.h in Headers */, 72220F33133305BB00FCA411 /* pwg-private.h in Headers */, 72220F38133305BB00FCA411 /* snmp-private.h in Headers */, 72220F3B133305BB00FCA411 /* string-private.h in Headers */, 72220F3E133305BB00FCA411 /* thread-private.h in Headers */, 72220F481333063D00FCA411 /* config.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 72220FAA13330B2200FCA411 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 72220FB813330BCE00FCA411 /* mime.h in Headers */, 7271883D1374AB14001A2036 /* mime-private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA70A1CC03A490092477B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 724FA70B1CC03A490092477B /* raster.h in Headers */, 724FA7711CC03B920092477B /* raster-private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA7191CC03A990092477B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 724FA71A1CC03A990092477B /* mime.h in Headers */, 724FA71B1CC03A990092477B /* mime-private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA73A1CC03AAF0092477B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 724FA73B1CC03AAF0092477B /* ppdc.h in Headers */, 724FA73C1CC03AAF0092477B /* ppdc-private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA74A1CC03ACC0092477B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 724FA76D1CC03B4D0092477B /* cgi.h in Headers */, 724FA76C1CC03B4D0092477B /* cgi-private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA7661CC03AF60092477B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 724FA7701CC03B820092477B /* cgi.h in Headers */, 724FA76F1CC03B820092477B /* cgi-private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 72F75A5F1336F9A3004BB496 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 72F75A6F1336FAB6004BB496 /* raster.h in Headers */, 724FA76E1CC03B640092477B /* raster-private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 270695FD1CADF3E200FFE5FB /* libcups_ios */ = { isa = PBXNativeTarget; buildConfigurationList = 270696571CADF3E200FFE5FB /* Build configuration list for PBXNativeTarget "libcups_ios" */; buildPhases = ( 270695FE1CADF3E200FFE5FB /* Sources */, 270696331CADF3E200FFE5FB /* Frameworks */, 2706963C1CADF3E200FFE5FB /* Headers */, ); buildRules = ( ); dependencies = ( ); name = libcups_ios; productName = libcups; productReference = 2706965A1CADF3E200FFE5FB /* libcups_ios.a */; productType = "com.apple.product-type.library.dynamic"; }; 270CCDA6135E3C9E00007BE2 /* testmime */ = { isa = PBXNativeTarget; buildConfigurationList = 270CCDAF135E3C9E00007BE2 /* Build configuration list for PBXNativeTarget "testmime" */; buildPhases = ( 270CCDA3135E3C9E00007BE2 /* Sources */, 270CCDA4135E3C9E00007BE2 /* Frameworks */, 270CCDA5135E3C9E00007BE2 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271284D61CC1234D00E517C7 /* PBXTargetDependency */, 270CCDB8135E3CFD00007BE2 /* PBXTargetDependency */, ); name = testmime; productName = testmime; productReference = 270CCDA7135E3C9E00007BE2 /* testmime */; productType = "com.apple.product-type.tool"; }; 270D02131D707E0200EA9403 /* testcreds */ = { isa = PBXNativeTarget; buildConfigurationList = 270D02211D707E0200EA9403 /* Build configuration list for PBXNativeTarget "testcreds" */; buildPhases = ( 270D02161D707E0200EA9403 /* Sources */, 270D02181D707E0200EA9403 /* Frameworks */, 270D02201D707E0200EA9403 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 270D02141D707E0200EA9403 /* PBXTargetDependency */, ); name = testcreds; productName = testhttp; productReference = 270D02241D707E0200EA9403 /* testcreds */; productType = "com.apple.product-type.tool"; }; 271284E11CC1261900E517C7 /* cancel */ = { isa = PBXNativeTarget; buildConfigurationList = 271284E91CC1261900E517C7 /* Build configuration list for PBXNativeTarget "cancel" */; buildPhases = ( 271284E41CC1261900E517C7 /* Sources */, 271284E61CC1261900E517C7 /* Frameworks */, 271284E81CC1261900E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271284E21CC1261900E517C7 /* PBXTargetDependency */, ); name = cancel; productName = cupsaddsmb; productReference = 271284EC1CC1261900E517C7 /* cancel */; productType = "com.apple.product-type.tool"; }; 271284EE1CC1264B00E517C7 /* cupsaccept */ = { isa = PBXNativeTarget; buildConfigurationList = 271284F61CC1264B00E517C7 /* Build configuration list for PBXNativeTarget "cupsaccept" */; buildPhases = ( 271284F11CC1264B00E517C7 /* Sources */, 271284F31CC1264B00E517C7 /* Frameworks */, 271284F51CC1264B00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271284EF1CC1264B00E517C7 /* PBXTargetDependency */, ); name = cupsaccept; productName = cupsaddsmb; productReference = 271284F91CC1264B00E517C7 /* cupsaccept */; productType = "com.apple.product-type.tool"; }; 271284FB1CC1265D00E517C7 /* cupstestdsc */ = { isa = PBXNativeTarget; buildConfigurationList = 271285031CC1265D00E517C7 /* Build configuration list for PBXNativeTarget "cupstestdsc" */; buildPhases = ( 271284FE1CC1265D00E517C7 /* Sources */, 271285001CC1265D00E517C7 /* Frameworks */, 271285021CC1265D00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271284FC1CC1265D00E517C7 /* PBXTargetDependency */, ); name = cupstestdsc; productName = cupsaddsmb; productReference = 271285061CC1265D00E517C7 /* cupstestdsc */; productType = "com.apple.product-type.tool"; }; 271285081CC1267A00E517C7 /* lp */ = { isa = PBXNativeTarget; buildConfigurationList = 271285101CC1267A00E517C7 /* Build configuration list for PBXNativeTarget "lp" */; buildPhases = ( 2712850B1CC1267A00E517C7 /* Sources */, 2712850D1CC1267A00E517C7 /* Frameworks */, 2712850F1CC1267A00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285091CC1267A00E517C7 /* PBXTargetDependency */, ); name = lp; productName = cupsaddsmb; productReference = 271285131CC1267A00E517C7 /* lp */; productType = "com.apple.product-type.tool"; }; 271285151CC1269700E517C7 /* lpc */ = { isa = PBXNativeTarget; buildConfigurationList = 2712851D1CC1269700E517C7 /* Build configuration list for PBXNativeTarget "lpc" */; buildPhases = ( 271285181CC1269700E517C7 /* Sources */, 2712851A1CC1269700E517C7 /* Frameworks */, 2712851C1CC1269700E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285161CC1269700E517C7 /* PBXTargetDependency */, ); name = lpc; productName = cupsaddsmb; productReference = 271285201CC1269700E517C7 /* lpc */; productType = "com.apple.product-type.tool"; }; 271285221CC126AA00E517C7 /* lpinfo */ = { isa = PBXNativeTarget; buildConfigurationList = 2712852A1CC126AA00E517C7 /* Build configuration list for PBXNativeTarget "lpinfo" */; buildPhases = ( 271285251CC126AA00E517C7 /* Sources */, 271285271CC126AA00E517C7 /* Frameworks */, 271285291CC126AA00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285231CC126AA00E517C7 /* PBXTargetDependency */, ); name = lpinfo; productName = cupsaddsmb; productReference = 2712852D1CC126AA00E517C7 /* lpinfo */; productType = "com.apple.product-type.tool"; }; 2712852F1CC1270B00E517C7 /* lpmove */ = { isa = PBXNativeTarget; buildConfigurationList = 271285371CC1270B00E517C7 /* Build configuration list for PBXNativeTarget "lpmove" */; buildPhases = ( 271285321CC1270B00E517C7 /* Sources */, 271285341CC1270B00E517C7 /* Frameworks */, 271285361CC1270B00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285301CC1270B00E517C7 /* PBXTargetDependency */, ); name = lpmove; productName = cupsaddsmb; productReference = 2712853A1CC1270B00E517C7 /* lpmove */; productType = "com.apple.product-type.tool"; }; 2712853C1CC1271E00E517C7 /* lpoptions */ = { isa = PBXNativeTarget; buildConfigurationList = 271285441CC1271E00E517C7 /* Build configuration list for PBXNativeTarget "lpoptions" */; buildPhases = ( 2712853F1CC1271E00E517C7 /* Sources */, 271285411CC1271E00E517C7 /* Frameworks */, 271285431CC1271E00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 2712853D1CC1271E00E517C7 /* PBXTargetDependency */, ); name = lpoptions; productName = cupsaddsmb; productReference = 271285471CC1271E00E517C7 /* lpoptions */; productType = "com.apple.product-type.tool"; }; 271285491CC1272D00E517C7 /* lpq */ = { isa = PBXNativeTarget; buildConfigurationList = 271285511CC1272D00E517C7 /* Build configuration list for PBXNativeTarget "lpq" */; buildPhases = ( 2712854C1CC1272D00E517C7 /* Sources */, 2712854E1CC1272D00E517C7 /* Frameworks */, 271285501CC1272D00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 2712854A1CC1272D00E517C7 /* PBXTargetDependency */, ); name = lpq; productName = cupsaddsmb; productReference = 271285541CC1272D00E517C7 /* lpq */; productType = "com.apple.product-type.tool"; }; 271285561CC1274300E517C7 /* lpr */ = { isa = PBXNativeTarget; buildConfigurationList = 2712855E1CC1274300E517C7 /* Build configuration list for PBXNativeTarget "lpr" */; buildPhases = ( 271285591CC1274300E517C7 /* Sources */, 2712855B1CC1274300E517C7 /* Frameworks */, 2712855D1CC1274300E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285571CC1274300E517C7 /* PBXTargetDependency */, ); name = lpr; productName = cupsaddsmb; productReference = 271285611CC1274300E517C7 /* lpr */; productType = "com.apple.product-type.tool"; }; 271285631CC1275200E517C7 /* lprm */ = { isa = PBXNativeTarget; buildConfigurationList = 2712856B1CC1275200E517C7 /* Build configuration list for PBXNativeTarget "lprm" */; buildPhases = ( 271285661CC1275200E517C7 /* Sources */, 271285681CC1275200E517C7 /* Frameworks */, 2712856A1CC1275200E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285641CC1275200E517C7 /* PBXTargetDependency */, ); name = lprm; productName = cupsaddsmb; productReference = 2712856E1CC1275200E517C7 /* lprm */; productType = "com.apple.product-type.tool"; }; 271285701CC1276400E517C7 /* lpstat */ = { isa = PBXNativeTarget; buildConfigurationList = 271285781CC1276400E517C7 /* Build configuration list for PBXNativeTarget "lpstat" */; buildPhases = ( 271285731CC1276400E517C7 /* Sources */, 271285751CC1276400E517C7 /* Frameworks */, 271285771CC1276400E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285711CC1276400E517C7 /* PBXTargetDependency */, ); name = lpstat; productName = cupsaddsmb; productReference = 2712857B1CC1276400E517C7 /* lpstat */; productType = "com.apple.product-type.tool"; }; 271285951CC12D1300E517C7 /* admin.cgi */ = { isa = PBXNativeTarget; buildConfigurationList = 2712859D1CC12D1300E517C7 /* Build configuration list for PBXNativeTarget "admin.cgi" */; buildPhases = ( 271285981CC12D1300E517C7 /* Sources */, 2712859A1CC12D1300E517C7 /* Frameworks */, 2712859C1CC12D1300E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285961CC12D1300E517C7 /* PBXTargetDependency */, ); name = admin.cgi; productName = cupsaddsmb; productReference = 271285A01CC12D1300E517C7 /* admin.cgi */; productType = "com.apple.product-type.tool"; }; 271285A31CC12D3A00E517C7 /* classes.cgi */ = { isa = PBXNativeTarget; buildConfigurationList = 271285AC1CC12D3A00E517C7 /* Build configuration list for PBXNativeTarget "classes.cgi" */; buildPhases = ( 271285A61CC12D3A00E517C7 /* Sources */, 271285A81CC12D3A00E517C7 /* Frameworks */, 271285AB1CC12D3A00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285A41CC12D3A00E517C7 /* PBXTargetDependency */, ); name = classes.cgi; productName = cupsaddsmb; productReference = 271285AF1CC12D3A00E517C7 /* classes.cgi */; productType = "com.apple.product-type.tool"; }; 271285B11CC12D4E00E517C7 /* jobs.cgi */ = { isa = PBXNativeTarget; buildConfigurationList = 271285BA1CC12D4E00E517C7 /* Build configuration list for PBXNativeTarget "jobs.cgi" */; buildPhases = ( 271285B41CC12D4E00E517C7 /* Sources */, 271285B61CC12D4E00E517C7 /* Frameworks */, 271285B91CC12D4E00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285B21CC12D4E00E517C7 /* PBXTargetDependency */, ); name = jobs.cgi; productName = cupsaddsmb; productReference = 271285BD1CC12D4E00E517C7 /* jobs.cgi */; productType = "com.apple.product-type.tool"; }; 271285BF1CC12D5E00E517C7 /* printers.cgi */ = { isa = PBXNativeTarget; buildConfigurationList = 271285C81CC12D5E00E517C7 /* Build configuration list for PBXNativeTarget "printers.cgi" */; buildPhases = ( 271285C21CC12D5E00E517C7 /* Sources */, 271285C41CC12D5E00E517C7 /* Frameworks */, 271285C71CC12D5E00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285C01CC12D5E00E517C7 /* PBXTargetDependency */, ); name = printers.cgi; productName = cupsaddsmb; productReference = 271285CB1CC12D5E00E517C7 /* printers.cgi */; productType = "com.apple.product-type.tool"; }; 271285CD1CC12DBF00E517C7 /* commandtops */ = { isa = PBXNativeTarget; buildConfigurationList = 271285D51CC12DBF00E517C7 /* Build configuration list for PBXNativeTarget "commandtops" */; buildPhases = ( 271285D01CC12DBF00E517C7 /* Sources */, 271285D21CC12DBF00E517C7 /* Frameworks */, 271285D41CC12DBF00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285CE1CC12DBF00E517C7 /* PBXTargetDependency */, ); name = commandtops; productName = cupsaddsmb; productReference = 271285D81CC12DBF00E517C7 /* commandtops */; productType = "com.apple.product-type.tool"; }; 271285DA1CC12DDF00E517C7 /* gziptoany */ = { isa = PBXNativeTarget; buildConfigurationList = 271285E21CC12DDF00E517C7 /* Build configuration list for PBXNativeTarget "gziptoany" */; buildPhases = ( 271285DD1CC12DDF00E517C7 /* Sources */, 271285DF1CC12DDF00E517C7 /* Frameworks */, 271285E11CC12DDF00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285DB1CC12DDF00E517C7 /* PBXTargetDependency */, ); name = gziptoany; productName = cupsaddsmb; productReference = 271285E51CC12DDF00E517C7 /* gziptoany */; productType = "com.apple.product-type.tool"; }; 271285E71CC12E2D00E517C7 /* pstops */ = { isa = PBXNativeTarget; buildConfigurationList = 271285EF1CC12E2D00E517C7 /* Build configuration list for PBXNativeTarget "pstops" */; buildPhases = ( 271285EA1CC12E2D00E517C7 /* Sources */, 271285EC1CC12E2D00E517C7 /* Frameworks */, 271285EE1CC12E2D00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271285E81CC12E2D00E517C7 /* PBXTargetDependency */, ); name = pstops; productName = cupsaddsmb; productReference = 271285F21CC12E2E00E517C7 /* pstops */; productType = "com.apple.product-type.tool"; }; 271285F51CC12EEB00E517C7 /* rastertoepson */ = { isa = PBXNativeTarget; buildConfigurationList = 271285FD1CC12EEB00E517C7 /* Build configuration list for PBXNativeTarget "rastertoepson" */; buildPhases = ( 271285F81CC12EEB00E517C7 /* Sources */, 271285FA1CC12EEB00E517C7 /* Frameworks */, 271285FC1CC12EEB00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271286031CC12F0100E517C7 /* PBXTargetDependency */, 271285F61CC12EEB00E517C7 /* PBXTargetDependency */, ); name = rastertoepson; productName = cupsaddsmb; productReference = 271286001CC12EEB00E517C7 /* rastertoepson */; productType = "com.apple.product-type.tool"; }; 271286051CC12F0B00E517C7 /* rastertohp */ = { isa = PBXNativeTarget; buildConfigurationList = 271286101CC12F0B00E517C7 /* Build configuration list for PBXNativeTarget "rastertohp" */; buildPhases = ( 2712860A1CC12F0B00E517C7 /* Sources */, 2712860C1CC12F0B00E517C7 /* Frameworks */, 2712860F1CC12F0B00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271286061CC12F0B00E517C7 /* PBXTargetDependency */, 271286081CC12F0B00E517C7 /* PBXTargetDependency */, ); name = rastertohp; productName = cupsaddsmb; productReference = 271286131CC12F0B00E517C7 /* rastertohp */; productType = "com.apple.product-type.tool"; }; 271286151CC12F1A00E517C7 /* rastertolabel */ = { isa = PBXNativeTarget; buildConfigurationList = 271286201CC12F1A00E517C7 /* Build configuration list for PBXNativeTarget "rastertolabel" */; buildPhases = ( 2712861A1CC12F1A00E517C7 /* Sources */, 2712861C1CC12F1A00E517C7 /* Frameworks */, 2712861F1CC12F1A00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271286161CC12F1A00E517C7 /* PBXTargetDependency */, 271286181CC12F1A00E517C7 /* PBXTargetDependency */, ); name = rastertolabel; productName = cupsaddsmb; productReference = 271286231CC12F1A00E517C7 /* rastertolabel */; productType = "com.apple.product-type.tool"; }; 271286571CC1309000E517C7 /* tlscheck */ = { isa = PBXNativeTarget; buildConfigurationList = 271286641CC1309000E517C7 /* Build configuration list for PBXNativeTarget "tlscheck" */; buildPhases = ( 2712865A1CC1309000E517C7 /* Sources */, 2712865C1CC1309000E517C7 /* Frameworks */, 271286631CC1309000E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271286581CC1309000E517C7 /* PBXTargetDependency */, ); name = tlscheck; productName = ippserver; productReference = 271286671CC1309000E517C7 /* tlscheck */; productType = "com.apple.product-type.tool"; }; 2712866B1CC1310E00E517C7 /* rasterbench */ = { isa = PBXNativeTarget; buildConfigurationList = 2712867A1CC1310E00E517C7 /* Build configuration list for PBXNativeTarget "rasterbench" */; buildPhases = ( 271286701CC1310E00E517C7 /* Sources */, 271286721CC1310E00E517C7 /* Frameworks */, 271286791CC1310E00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 2712866C1CC1310E00E517C7 /* PBXTargetDependency */, 2712866E1CC1310E00E517C7 /* PBXTargetDependency */, ); name = rasterbench; productName = testmime; productReference = 2712867D1CC1310E00E517C7 /* rasterbench */; productType = "com.apple.product-type.tool"; }; 271286871CC13DC000E517C7 /* checkpo */ = { isa = PBXNativeTarget; buildConfigurationList = 271286931CC13DC000E517C7 /* Build configuration list for PBXNativeTarget "checkpo" */; buildPhases = ( 2712868A1CC13DC000E517C7 /* Sources */, 2712868C1CC13DC000E517C7 /* Frameworks */, 271286921CC13DC000E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271286881CC13DC000E517C7 /* PBXTargetDependency */, ); name = checkpo; productName = testmime; productReference = 271286961CC13DC000E517C7 /* checkpo */; productType = "com.apple.product-type.tool"; }; 271286981CC13DF100E517C7 /* po2strings */ = { isa = PBXNativeTarget; buildConfigurationList = 271286A41CC13DF100E517C7 /* Build configuration list for PBXNativeTarget "po2strings" */; buildPhases = ( 2712869B1CC13DF100E517C7 /* Sources */, 2712869D1CC13DF100E517C7 /* Frameworks */, 271286A31CC13DF100E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271286991CC13DF100E517C7 /* PBXTargetDependency */, ); name = po2strings; productName = testmime; productReference = 271286A71CC13DF100E517C7 /* po2strings */; productType = "com.apple.product-type.tool"; }; 271286A91CC13DFF00E517C7 /* strings2po */ = { isa = PBXNativeTarget; buildConfigurationList = 271286B51CC13DFF00E517C7 /* Build configuration list for PBXNativeTarget "strings2po" */; buildPhases = ( 271286AC1CC13DFF00E517C7 /* Sources */, 271286AE1CC13DFF00E517C7 /* Frameworks */, 271286B41CC13DFF00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271286AA1CC13DFF00E517C7 /* PBXTargetDependency */, ); name = strings2po; productName = testmime; productReference = 271286B81CC13DFF00E517C7 /* strings2po */; productType = "com.apple.product-type.tool"; }; 271286BA1CC13E2100E517C7 /* bcp */ = { isa = PBXNativeTarget; buildConfigurationList = 271286C61CC13E2100E517C7 /* Build configuration list for PBXNativeTarget "bcp" */; buildPhases = ( 271286BD1CC13E2100E517C7 /* Sources */, 271286C01CC13E2100E517C7 /* Frameworks */, 271286C51CC13E2100E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271286BB1CC13E2100E517C7 /* PBXTargetDependency */, ); name = bcp; productName = usb; productReference = 271286C91CC13E2100E517C7 /* bcp */; productType = "com.apple.product-type.tool"; }; 271286CB1CC13E5B00E517C7 /* tbcp */ = { isa = PBXNativeTarget; buildConfigurationList = 271286D61CC13E5B00E517C7 /* Build configuration list for PBXNativeTarget "tbcp" */; buildPhases = ( 271286CE1CC13E5B00E517C7 /* Sources */, 271286D01CC13E5B00E517C7 /* Frameworks */, 271286D51CC13E5B00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271286CC1CC13E5B00E517C7 /* PBXTargetDependency */, ); name = tbcp; productName = usb; productReference = 271286D91CC13E5B00E517C7 /* tbcp */; productType = "com.apple.product-type.tool"; }; 271286E51CC13F2000E517C7 /* mailto */ = { isa = PBXNativeTarget; buildConfigurationList = 271286F01CC13F2000E517C7 /* Build configuration list for PBXNativeTarget "mailto" */; buildPhases = ( 271286E81CC13F2000E517C7 /* Sources */, 271286EA1CC13F2000E517C7 /* Frameworks */, 271286EF1CC13F2000E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271286E61CC13F2000E517C7 /* PBXTargetDependency */, ); name = mailto; productName = usb; productReference = 271286F31CC13F2000E517C7 /* mailto */; productType = "com.apple.product-type.tool"; }; 271286F51CC13F3F00E517C7 /* rss */ = { isa = PBXNativeTarget; buildConfigurationList = 271287001CC13F3F00E517C7 /* Build configuration list for PBXNativeTarget "rss" */; buildPhases = ( 271286F81CC13F3F00E517C7 /* Sources */, 271286FA1CC13F3F00E517C7 /* Frameworks */, 271286FF1CC13F3F00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271286F61CC13F3F00E517C7 /* PBXTargetDependency */, ); name = rss; productName = usb; productReference = 271287031CC13F3F00E517C7 /* rss */; productType = "com.apple.product-type.tool"; }; 271287091CC13FAB00E517C7 /* mantohtml */ = { isa = PBXNativeTarget; buildConfigurationList = 271287151CC13FAB00E517C7 /* Build configuration list for PBXNativeTarget "mantohtml" */; buildPhases = ( 2712870C1CC13FAB00E517C7 /* Sources */, 2712870E1CC13FAB00E517C7 /* Frameworks */, 271287141CC13FAB00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 2712870A1CC13FAB00E517C7 /* PBXTargetDependency */, ); name = mantohtml; productName = testmime; productReference = 271287181CC13FAB00E517C7 /* mantohtml */; productType = "com.apple.product-type.tool"; }; 2712871E1CC140BE00E517C7 /* genstrings */ = { isa = PBXNativeTarget; buildConfigurationList = 271287291CC140BE00E517C7 /* Build configuration list for PBXNativeTarget "genstrings" */; buildPhases = ( 271287231CC140BE00E517C7 /* Sources */, 271287251CC140BE00E517C7 /* Frameworks */, 271287281CC140BE00E517C7 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 2712872F1CC140DF00E517C7 /* PBXTargetDependency */, 271287311CC140DF00E517C7 /* PBXTargetDependency */, ); name = genstrings; productName = ppdc; productReference = 2712872C1CC140BE00E517C7 /* genstrings */; productType = "com.apple.product-type.tool"; }; 273BF6BC1333B5000022CAAB /* testcups */ = { isa = PBXNativeTarget; buildConfigurationList = 273BF6C31333B5000022CAAB /* Build configuration list for PBXNativeTarget "testcups" */; buildPhases = ( 273BF6B91333B5000022CAAB /* Sources */, 273BF6BA1333B5000022CAAB /* Frameworks */, 273BF6BB1333B5000022CAAB /* CopyFiles */, ); buildRules = ( ); dependencies = ( 273BF6C91333B5410022CAAB /* PBXTargetDependency */, ); name = testcups; productName = testcups; productReference = 273BF6BD1333B5000022CAAB /* testcups */; productType = "com.apple.product-type.tool"; }; 274FF5CB13332B1F00317ECB /* cups-driverd */ = { isa = PBXNativeTarget; buildConfigurationList = 274FF5D213332B1F00317ECB /* Build configuration list for PBXNativeTarget "cups-driverd" */; buildPhases = ( 274FF5C813332B1F00317ECB /* Sources */, 274FF5C913332B1F00317ECB /* Frameworks */, 274FF5CA13332B1F00317ECB /* CopyFiles */, ); buildRules = ( ); dependencies = ( 274FF5DC13332CF900317ECB /* PBXTargetDependency */, 274FF6201333316200317ECB /* PBXTargetDependency */, ); name = "cups-driverd"; productName = "cups-driverd"; productReference = 274FF5CC13332B1F00317ECB /* cups-driverd */; productType = "com.apple.product-type.tool"; }; 274FF5ED133330C800317ECB /* libcupsppdc */ = { isa = PBXNativeTarget; buildConfigurationList = 274FF5EF133330C800317ECB /* Build configuration list for PBXNativeTarget "libcupsppdc" */; buildPhases = ( 274FF5EA133330C800317ECB /* Sources */, 274FF5EB133330C800317ECB /* Frameworks */, 274FF5EC133330C800317ECB /* Headers */, ); buildRules = ( ); dependencies = ( 274FF5F3133330FD00317ECB /* PBXTargetDependency */, ); name = libcupsppdc; productName = libcupsppdc; productReference = 274FF5EE133330C800317ECB /* libcupsppdc.dylib */; productType = "com.apple.product-type.library.dynamic"; }; 274FF6281333333600317ECB /* cups-deviced */ = { isa = PBXNativeTarget; buildConfigurationList = 274FF62F1333333600317ECB /* Build configuration list for PBXNativeTarget "cups-deviced" */; buildPhases = ( 274FF6251333333600317ECB /* Sources */, 274FF6261333333600317ECB /* Frameworks */, 274FF6271333333600317ECB /* CopyFiles */, ); buildRules = ( ); dependencies = ( 274FF6341333335200317ECB /* PBXTargetDependency */, ); name = "cups-deviced"; productName = "cups-deviced"; productReference = 274FF6291333333600317ECB /* cups-deviced */; productType = "com.apple.product-type.tool"; }; 274FF63D1333358B00317ECB /* cups-exec */ = { isa = PBXNativeTarget; buildConfigurationList = 274FF6441333358C00317ECB /* Build configuration list for PBXNativeTarget "cups-exec" */; buildPhases = ( 274FF63A1333358B00317ECB /* Sources */, 274FF63B1333358B00317ECB /* Frameworks */, 274FF63C1333358B00317ECB /* CopyFiles */, ); buildRules = ( ); dependencies = ( ); name = "cups-exec"; productName = "cups-exec"; productReference = 274FF63E1333358B00317ECB /* cups-exec */; productType = "com.apple.product-type.tool"; }; 274FF64E133339C400317ECB /* cups-lpd */ = { isa = PBXNativeTarget; buildConfigurationList = 274FF655133339C400317ECB /* Build configuration list for PBXNativeTarget "cups-lpd" */; buildPhases = ( 274FF64B133339C400317ECB /* Sources */, 274FF64C133339C400317ECB /* Frameworks */, 274FF64D133339C400317ECB /* CopyFiles */, ); buildRules = ( ); dependencies = ( 274FF65A133339D900317ECB /* PBXTargetDependency */, ); name = "cups-lpd"; productName = "cups-lpd"; productReference = 274FF64F133339C400317ECB /* cups-lpd */; productType = "com.apple.product-type.tool"; }; 274FF67713333B2F00317ECB /* cupsfilter */ = { isa = PBXNativeTarget; buildConfigurationList = 274FF67E13333B2F00317ECB /* Build configuration list for PBXNativeTarget "cupsfilter" */; buildPhases = ( 274FF67413333B2F00317ECB /* Sources */, 274FF67513333B2F00317ECB /* Frameworks */, 274FF67613333B2F00317ECB /* CopyFiles */, ); buildRules = ( ); dependencies = ( 274FF68213333B3C00317ECB /* PBXTargetDependency */, 274FF68413333B3C00317ECB /* PBXTargetDependency */, ); name = cupsfilter; productName = cupsfilter; productReference = 274FF67813333B2F00317ECB /* cupsfilter */; productType = "com.apple.product-type.tool"; }; 274FF6891333B1C400317ECB /* libcups_static */ = { isa = PBXNativeTarget; buildConfigurationList = 274FF6DD1333B1C400317ECB /* Build configuration list for PBXNativeTarget "libcups_static" */; buildPhases = ( 274FF68A1333B1C400317ECB /* Sources */, 274FF6B91333B1C400317ECB /* Frameworks */, 274FF6C11333B1C400317ECB /* Headers */, ); buildRules = ( ); dependencies = ( ); name = libcups_static; productName = libcups; productReference = 72A4332F155844CF002E172D /* libcups_static.a */; productType = "com.apple.product-type.library.dynamic"; }; 2766835B1337A9B6000D33D0 /* cupsctl */ = { isa = PBXNativeTarget; buildConfigurationList = 276683621337A9B6000D33D0 /* Build configuration list for PBXNativeTarget "cupsctl" */; buildPhases = ( 276683581337A9B6000D33D0 /* Sources */, 276683591337A9B6000D33D0 /* Frameworks */, 2766835A1337A9B6000D33D0 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 276683661337A9D6000D33D0 /* PBXTargetDependency */, ); name = cupsctl; productName = cupsctl; productReference = 2766835C1337A9B6000D33D0 /* cupsctl */; productType = "com.apple.product-type.tool"; }; 2766836F1337AC79000D33D0 /* ppdc */ = { isa = PBXNativeTarget; buildConfigurationList = 276683761337AC79000D33D0 /* Build configuration list for PBXNativeTarget "ppdc" */; buildPhases = ( 2766836C1337AC79000D33D0 /* Sources */, 2766836D1337AC79000D33D0 /* Frameworks */, 2766836E1337AC79000D33D0 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 276683AE1337ACF9000D33D0 /* PBXTargetDependency */, 276683B01337ACF9000D33D0 /* PBXTargetDependency */, ); name = ppdc; productName = ppdc; productReference = 276683701337AC79000D33D0 /* ppdc */; productType = "com.apple.product-type.tool"; }; 2766837C1337AC8C000D33D0 /* ppdhtml */ = { isa = PBXNativeTarget; buildConfigurationList = 276683831337AC8C000D33D0 /* Build configuration list for PBXNativeTarget "ppdhtml" */; buildPhases = ( 276683791337AC8C000D33D0 /* Sources */, 2766837A1337AC8C000D33D0 /* Frameworks */, 2766837B1337AC8C000D33D0 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 276683B41337AD18000D33D0 /* PBXTargetDependency */, 276683B61337AD18000D33D0 /* PBXTargetDependency */, ); name = ppdhtml; productName = ppdhtml; productReference = 2766837D1337AC8C000D33D0 /* ppdhtml */; productType = "com.apple.product-type.tool"; }; 276683891337AC97000D33D0 /* ppdi */ = { isa = PBXNativeTarget; buildConfigurationList = 276683901337AC97000D33D0 /* Build configuration list for PBXNativeTarget "ppdi" */; buildPhases = ( 276683861337AC97000D33D0 /* Sources */, 276683871337AC97000D33D0 /* Frameworks */, 276683881337AC97000D33D0 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 276683BC1337AE49000D33D0 /* PBXTargetDependency */, 276683BE1337AE49000D33D0 /* PBXTargetDependency */, ); name = ppdi; productName = ppdi; productReference = 2766838A1337AC97000D33D0 /* ppdi */; productType = "com.apple.product-type.tool"; }; 276683961337ACA2000D33D0 /* ppdmerge */ = { isa = PBXNativeTarget; buildConfigurationList = 2766839D1337ACA2000D33D0 /* Build configuration list for PBXNativeTarget "ppdmerge" */; buildPhases = ( 276683931337ACA2000D33D0 /* Sources */, 276683941337ACA2000D33D0 /* Frameworks */, 276683951337ACA2000D33D0 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 276683C01337B1AD000D33D0 /* PBXTargetDependency */, 276683C21337B1AD000D33D0 /* PBXTargetDependency */, ); name = ppdmerge; productName = ppdmerge; productReference = 276683971337ACA2000D33D0 /* ppdmerge */; productType = "com.apple.product-type.tool"; }; 276683A31337ACAB000D33D0 /* ppdpo */ = { isa = PBXNativeTarget; buildConfigurationList = 276683AA1337ACAB000D33D0 /* Build configuration list for PBXNativeTarget "ppdpo" */; buildPhases = ( 276683A01337ACAB000D33D0 /* Sources */, 276683A11337ACAB000D33D0 /* Frameworks */, 276683A21337ACAB000D33D0 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 276683C61337B1BC000D33D0 /* PBXTargetDependency */, 276683C81337B1BC000D33D0 /* PBXTargetDependency */, ); name = ppdpo; productName = ppdpo; productReference = 276683A41337ACAB000D33D0 /* ppdpo */; productType = "com.apple.product-type.tool"; }; 276683EF1337F78E000D33D0 /* ipptool */ = { isa = PBXNativeTarget; buildConfigurationList = 276683F61337F78F000D33D0 /* Build configuration list for PBXNativeTarget "ipptool" */; buildPhases = ( 276683EC1337F78E000D33D0 /* Sources */, 276683ED1337F78E000D33D0 /* Frameworks */, 276683EE1337F78E000D33D0 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 276683FC1337F7B3000D33D0 /* PBXTargetDependency */, ); name = ipptool; productName = ipptool; productReference = 276683F01337F78E000D33D0 /* ipptool */; productType = "com.apple.product-type.tool"; }; 276684031337FA1D000D33D0 /* cupsaddsmb */ = { isa = PBXNativeTarget; buildConfigurationList = 2766840A1337FA1E000D33D0 /* Build configuration list for PBXNativeTarget "cupsaddsmb" */; buildPhases = ( 276684001337FA1D000D33D0 /* Sources */, 276684011337FA1D000D33D0 /* Frameworks */, 276684021337FA1D000D33D0 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 2766840E1337FA31000D33D0 /* PBXTargetDependency */, ); name = cupsaddsmb; productName = cupsaddsmb; productReference = 276684041337FA1D000D33D0 /* cupsaddsmb */; productType = "com.apple.product-type.tool"; }; 2767FC4619266A0D000F61D3 /* testdest */ = { isa = PBXNativeTarget; buildConfigurationList = 2767FC4D19266A0D000F61D3 /* Build configuration list for PBXNativeTarget "testdest" */; buildPhases = ( 2767FC4919266A0D000F61D3 /* Sources */, 2767FC4B19266A0D000F61D3 /* Frameworks */, 2767FC4C19266A0D000F61D3 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 2767FC4719266A0D000F61D3 /* PBXTargetDependency */, ); name = testdest; productName = testcups; productReference = 2767FC5019266A0D000F61D3 /* testdest */; productType = "com.apple.product-type.tool"; }; 278C58CA136B640300836530 /* testhttp */ = { isa = PBXNativeTarget; buildConfigurationList = 278C58D3136B640300836530 /* Build configuration list for PBXNativeTarget "testhttp" */; buildPhases = ( 278C58C7136B640300836530 /* Sources */, 278C58C8136B640300836530 /* Frameworks */, 278C58C9136B640300836530 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 278C58D8136B642F00836530 /* PBXTargetDependency */, ); name = testhttp; productName = testhttp; productReference = 278C58CB136B640300836530 /* testhttp */; productType = "com.apple.product-type.tool"; }; 27A0347A1A8BDB1200650675 /* lpadmin */ = { isa = PBXNativeTarget; buildConfigurationList = 27A034811A8BDB1300650675 /* Build configuration list for PBXNativeTarget "lpadmin" */; buildPhases = ( 27A034771A8BDB1200650675 /* Sources */, 27A034781A8BDB1200650675 /* Frameworks */, 27A034791A8BDB1200650675 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 27A034841A8BDC4A00650675 /* PBXTargetDependency */, ); name = lpadmin; productName = lpadmin; productReference = 27A0347B1A8BDB1300650675 /* lpadmin */; productType = "com.apple.product-type.tool"; }; 720DD6C11358FD5F0064AA82 /* snmp */ = { isa = PBXNativeTarget; buildConfigurationList = 720DD6CB1358FD600064AA82 /* Build configuration list for PBXNativeTarget "snmp" */; buildPhases = ( 720DD6BE1358FD5F0064AA82 /* Sources */, 720DD6BF1358FD5F0064AA82 /* Frameworks */, 720DD6C01358FD5F0064AA82 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 720DD6CF1358FD790064AA82 /* PBXTargetDependency */, ); name = snmp; productName = snmp; productReference = 720DD6C21358FD5F0064AA82 /* snmp */; productType = "com.apple.product-type.tool"; }; 72220EAD1333047D00FCA411 /* libcups */ = { isa = PBXNativeTarget; buildConfigurationList = 72220EB21333047D00FCA411 /* Build configuration list for PBXNativeTarget "libcups" */; buildPhases = ( 72220EAA1333047D00FCA411 /* Sources */, 72220EAB1333047D00FCA411 /* Frameworks */, 72220EAC1333047D00FCA411 /* Headers */, ); buildRules = ( ); dependencies = ( ); name = libcups; productName = libcups; productReference = 72220EAE1333047D00FCA411 /* libcups.dylib */; productType = "com.apple.product-type.library.dynamic"; }; 72220F5A13330A5A00FCA411 /* cupsd */ = { isa = PBXNativeTarget; buildConfigurationList = 72220F6113330A5A00FCA411 /* Build configuration list for PBXNativeTarget "cupsd" */; buildPhases = ( 72220F5713330A5A00FCA411 /* Sources */, 72220F5813330A5A00FCA411 /* Frameworks */, 72220F5913330A5A00FCA411 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 72220FBE13330C0B00FCA411 /* PBXTargetDependency */, 72220F6513330A6500FCA411 /* PBXTargetDependency */, ); name = cupsd; productName = cupsd; productReference = 72220F5B13330A5A00FCA411 /* cupsd */; productType = "com.apple.product-type.tool"; }; 72220FAB13330B2200FCA411 /* libcupsmime */ = { isa = PBXNativeTarget; buildConfigurationList = 72220FAD13330B2300FCA411 /* Build configuration list for PBXNativeTarget "libcupsmime" */; buildPhases = ( 72220FA813330B2200FCA411 /* Sources */, 72220FA913330B2200FCA411 /* Frameworks */, 72220FAA13330B2200FCA411 /* Headers */, ); buildRules = ( ); dependencies = ( 72220FBC13330C0500FCA411 /* PBXTargetDependency */, ); name = libcupsmime; productName = libcupsmime; productReference = 72220FAC13330B2200FCA411 /* libcupsmime.dylib */; productType = "com.apple.product-type.library.dynamic"; }; 724378FC1333E43E009631B9 /* ipp */ = { isa = PBXNativeTarget; buildConfigurationList = 724379031333E43E009631B9 /* Build configuration list for PBXNativeTarget "ipp" */; buildPhases = ( 724378F91333E43E009631B9 /* Sources */, 724378FA1333E43E009631B9 /* Frameworks */, 724378FB1333E43E009631B9 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724379071333E49B009631B9 /* PBXTargetDependency */, ); name = ipp; productName = ipp; productReference = 724378FD1333E43E009631B9 /* ipp */; productType = "com.apple.product-type.tool"; }; 724379171333E532009631B9 /* lpd */ = { isa = PBXNativeTarget; buildConfigurationList = 7243791E1333E532009631B9 /* Build configuration list for PBXNativeTarget "lpd" */; buildPhases = ( 724379141333E532009631B9 /* Sources */, 724379151333E532009631B9 /* Frameworks */, 724379161333E532009631B9 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724379261333E932009631B9 /* PBXTargetDependency */, ); name = lpd; productName = lpd; productReference = 724379181333E532009631B9 /* lpd */; productType = "com.apple.product-type.tool"; }; 7243792F1333FB85009631B9 /* socket */ = { isa = PBXNativeTarget; buildConfigurationList = 724379361333FB85009631B9 /* Build configuration list for PBXNativeTarget "socket" */; buildPhases = ( 7243792C1333FB85009631B9 /* Sources */, 7243792D1333FB85009631B9 /* Frameworks */, 7243792E1333FB85009631B9 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 7243793A1333FB95009631B9 /* PBXTargetDependency */, ); name = socket; productName = socket; productReference = 724379301333FB85009631B9 /* socket */; productType = "com.apple.product-type.tool"; }; 724379461333FEA9009631B9 /* dnssd */ = { isa = PBXNativeTarget; buildConfigurationList = 7243794D1333FEA9009631B9 /* Build configuration list for PBXNativeTarget "dnssd" */; buildPhases = ( 724379431333FEA9009631B9 /* Sources */, 724379441333FEA9009631B9 /* Frameworks */, 724379451333FEA9009631B9 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724379551333FEFE009631B9 /* PBXTargetDependency */, ); name = dnssd; productName = dnssd; productReference = 724379471333FEA9009631B9 /* dnssd */; productType = "com.apple.product-type.tool"; }; 7243795A1333FF1D009631B9 /* usb */ = { isa = PBXNativeTarget; buildConfigurationList = 724379611333FF1D009631B9 /* Build configuration list for PBXNativeTarget "usb" */; buildPhases = ( 724379571333FF1D009631B9 /* Sources */, 724379581333FF1D009631B9 /* Frameworks */, 724379591333FF1D009631B9 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724379651333FF2E009631B9 /* PBXTargetDependency */, ); name = usb; productName = usb; productReference = 7243795B1333FF1D009631B9 /* usb */; productType = "com.apple.product-type.tool"; }; 724FA5241CC0370C0092477B /* testadmin */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA5321CC0370C0092477B /* Build configuration list for PBXNativeTarget "testadmin" */; buildPhases = ( 724FA5271CC0370C0092477B /* Sources */, 724FA5291CC0370C0092477B /* Frameworks */, 724FA5311CC0370C0092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA5251CC0370C0092477B /* PBXTargetDependency */, ); name = testadmin; productName = testcups; productReference = 724FA5351CC0370C0092477B /* testadmin */; productType = "com.apple.product-type.tool"; }; 724FA5371CC037370092477B /* testarray */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA5451CC037370092477B /* Build configuration list for PBXNativeTarget "testarray" */; buildPhases = ( 724FA53A1CC037370092477B /* Sources */, 724FA53C1CC037370092477B /* Frameworks */, 724FA5441CC037370092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA5381CC037370092477B /* PBXTargetDependency */, ); name = testarray; productName = testcups; productReference = 724FA5481CC037370092477B /* testarray */; productType = "com.apple.product-type.tool"; }; 724FA54A1CC037500092477B /* testcache */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA5581CC037500092477B /* Build configuration list for PBXNativeTarget "testcache" */; buildPhases = ( 724FA54D1CC037500092477B /* Sources */, 724FA54F1CC037500092477B /* Frameworks */, 724FA5571CC037500092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA54B1CC037500092477B /* PBXTargetDependency */, ); name = testcache; productName = testcups; productReference = 724FA55B1CC037500092477B /* testcache */; productType = "com.apple.product-type.tool"; }; 724FA55D1CC037670092477B /* testconflicts */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA56B1CC037670092477B /* Build configuration list for PBXNativeTarget "testconflicts" */; buildPhases = ( 724FA5601CC037670092477B /* Sources */, 724FA5621CC037670092477B /* Frameworks */, 724FA56A1CC037670092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA55E1CC037670092477B /* PBXTargetDependency */, ); name = testconflicts; productName = testcups; productReference = 724FA56E1CC037670092477B /* testconflicts */; productType = "com.apple.product-type.tool"; }; 724FA5701CC037810092477B /* testfile */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA57E1CC037810092477B /* Build configuration list for PBXNativeTarget "testfile" */; buildPhases = ( 724FA5731CC037810092477B /* Sources */, 724FA5751CC037810092477B /* Frameworks */, 724FA57D1CC037810092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA5711CC037810092477B /* PBXTargetDependency */, ); name = testfile; productName = testcups; productReference = 724FA5811CC037810092477B /* testfile */; productType = "com.apple.product-type.tool"; }; 724FA5831CC037980092477B /* testi18n */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA5911CC037980092477B /* Build configuration list for PBXNativeTarget "testi18n" */; buildPhases = ( 724FA5861CC037980092477B /* Sources */, 724FA5881CC037980092477B /* Frameworks */, 724FA5901CC037980092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA5841CC037980092477B /* PBXTargetDependency */, ); name = testi18n; productName = testhttp; productReference = 724FA5941CC037980092477B /* testi18n */; productType = "com.apple.product-type.tool"; }; 724FA5961CC037AA0092477B /* testipp */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA5A41CC037AA0092477B /* Build configuration list for PBXNativeTarget "testipp" */; buildPhases = ( 724FA5991CC037AA0092477B /* Sources */, 724FA59B1CC037AA0092477B /* Frameworks */, 724FA5A31CC037AA0092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA5971CC037AA0092477B /* PBXTargetDependency */, ); name = testipp; productName = testhttp; productReference = 724FA5A71CC037AA0092477B /* testipp */; productType = "com.apple.product-type.tool"; }; 724FA5A91CC037C60092477B /* testlang */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA5B71CC037C60092477B /* Build configuration list for PBXNativeTarget "testlang" */; buildPhases = ( 724FA5AC1CC037C60092477B /* Sources */, 724FA5AE1CC037C60092477B /* Frameworks */, 724FA5B61CC037C60092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA5AA1CC037C60092477B /* PBXTargetDependency */, ); name = testlang; productName = testhttp; productReference = 724FA5BA1CC037C60092477B /* testlang */; productType = "com.apple.product-type.tool"; }; 724FA5BC1CC037D90092477B /* testlpd */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA5CA1CC037D90092477B /* Build configuration list for PBXNativeTarget "testlpd" */; buildPhases = ( 724FA5BF1CC037D90092477B /* Sources */, 724FA5C11CC037D90092477B /* Frameworks */, 724FA5C91CC037D90092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA5BD1CC037D90092477B /* PBXTargetDependency */, ); name = testlpd; productName = testhttp; productReference = 724FA5CD1CC037D90092477B /* testlpd */; productType = "com.apple.product-type.tool"; }; 724FA5CF1CC037F00092477B /* testoptions */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA5DE1CC037F00092477B /* Build configuration list for PBXNativeTarget "testoptions" */; buildPhases = ( 724FA5D41CC037F00092477B /* Sources */, 724FA5D61CC037F00092477B /* Frameworks */, 724FA5DD1CC037F00092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA5D01CC037F00092477B /* PBXTargetDependency */, ); name = testoptions; productName = testmime; productReference = 724FA5E11CC037F00092477B /* testoptions */; productType = "com.apple.product-type.tool"; }; 724FA5E31CC038040092477B /* testppd */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA5F21CC038040092477B /* Build configuration list for PBXNativeTarget "testppd" */; buildPhases = ( 724FA5E81CC038040092477B /* Sources */, 724FA5EA1CC038040092477B /* Frameworks */, 724FA5F11CC038040092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA5E41CC038040092477B /* PBXTargetDependency */, ); name = testppd; productName = testmime; productReference = 724FA5F51CC038040092477B /* testppd */; productType = "com.apple.product-type.tool"; }; 724FA5F71CC038190092477B /* testpwg */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA6061CC038190092477B /* Build configuration list for PBXNativeTarget "testpwg" */; buildPhases = ( 724FA5FC1CC038190092477B /* Sources */, 724FA5FE1CC038190092477B /* Frameworks */, 724FA6051CC038190092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA5F81CC038190092477B /* PBXTargetDependency */, ); name = testpwg; productName = testmime; productReference = 724FA6091CC038190092477B /* testpwg */; productType = "com.apple.product-type.tool"; }; 724FA60B1CC0382B0092477B /* testraster */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA61A1CC0382B0092477B /* Build configuration list for PBXNativeTarget "testraster" */; buildPhases = ( 724FA6101CC0382B0092477B /* Sources */, 724FA6121CC0382B0092477B /* Frameworks */, 724FA6191CC0382B0092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271284D11CC122F900E517C7 /* PBXTargetDependency */, 724FA60C1CC0382B0092477B /* PBXTargetDependency */, ); name = testraster; productName = testmime; productReference = 724FA61D1CC0382B0092477B /* testraster */; productType = "com.apple.product-type.tool"; }; 724FA61F1CC038410092477B /* testsnmp */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA62E1CC038410092477B /* Build configuration list for PBXNativeTarget "testsnmp" */; buildPhases = ( 724FA6241CC038410092477B /* Sources */, 724FA6261CC038410092477B /* Frameworks */, 724FA62D1CC038410092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA6201CC038410092477B /* PBXTargetDependency */, ); name = testsnmp; productName = testmime; productReference = 724FA6311CC038410092477B /* testsnmp */; productType = "com.apple.product-type.tool"; }; 724FA6331CC038560092477B /* testspeed */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA6421CC038560092477B /* Build configuration list for PBXNativeTarget "testspeed" */; buildPhases = ( 724FA6381CC038560092477B /* Sources */, 724FA63A1CC038560092477B /* Frameworks */, 724FA6411CC038560092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA6341CC038560092477B /* PBXTargetDependency */, ); name = testspeed; productName = testmime; productReference = 724FA6451CC038560092477B /* testspeed */; productType = "com.apple.product-type.tool"; }; 724FA6471CC0386E0092477B /* testsub */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA6561CC0386E0092477B /* Build configuration list for PBXNativeTarget "testsub" */; buildPhases = ( 724FA64C1CC0386E0092477B /* Sources */, 724FA64E1CC0386E0092477B /* Frameworks */, 724FA6551CC0386E0092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA6481CC0386E0092477B /* PBXTargetDependency */, ); name = testsub; productName = testmime; productReference = 724FA6591CC0386E0092477B /* testsub */; productType = "com.apple.product-type.tool"; }; 724FA65E1CC038A50092477B /* test1284 */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA66D1CC038A50092477B /* Build configuration list for PBXNativeTarget "test1284" */; buildPhases = ( 724FA6631CC038A50092477B /* Sources */, 724FA6651CC038A50092477B /* Frameworks */, 724FA66C1CC038A50092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA65F1CC038A50092477B /* PBXTargetDependency */, ); name = test1284; productName = testmime; productReference = 724FA6701CC038A50092477B /* test1284 */; productType = "com.apple.product-type.tool"; }; 724FA6721CC038BD0092477B /* testbackend */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA6801CC038BD0092477B /* Build configuration list for PBXNativeTarget "testbackend" */; buildPhases = ( 724FA6751CC038BD0092477B /* Sources */, 724FA6771CC038BD0092477B /* Frameworks */, 724FA67F1CC038BD0092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA6731CC038BD0092477B /* PBXTargetDependency */, ); name = testbackend; productName = testcups; productReference = 724FA6831CC038BD0092477B /* testbackend */; productType = "com.apple.product-type.tool"; }; 724FA6851CC038D90092477B /* testsupplies */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA6941CC038D90092477B /* Build configuration list for PBXNativeTarget "testsupplies" */; buildPhases = ( 724FA68A1CC038D90092477B /* Sources */, 724FA68C1CC038D90092477B /* Frameworks */, 724FA6931CC038D90092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA6861CC038D90092477B /* PBXTargetDependency */, ); name = testsupplies; productName = testmime; productReference = 724FA6971CC038D90092477B /* testsupplies */; productType = "com.apple.product-type.tool"; }; 724FA6991CC039200092477B /* testcgi */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA6A71CC039200092477B /* Build configuration list for PBXNativeTarget "testcgi" */; buildPhases = ( 724FA69C1CC039200092477B /* Sources */, 724FA69E1CC039200092477B /* Frameworks */, 724FA6A61CC039200092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271284CB1CC122D000E517C7 /* PBXTargetDependency */, 724FA69A1CC039200092477B /* PBXTargetDependency */, ); name = testcgi; productName = testcups; productReference = 724FA6AA1CC039200092477B /* testcgi */; productType = "com.apple.product-type.tool"; }; 724FA6AC1CC0393E0092477B /* testhi */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA6BA1CC0393E0092477B /* Build configuration list for PBXNativeTarget "testhi" */; buildPhases = ( 724FA6AF1CC0393E0092477B /* Sources */, 724FA6B11CC0393E0092477B /* Frameworks */, 724FA6B91CC0393E0092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271284CF1CC122ED00E517C7 /* PBXTargetDependency */, 724FA6AD1CC0393E0092477B /* PBXTargetDependency */, ); name = testhi; productName = testhttp; productReference = 724FA6BD1CC0393E0092477B /* testhi */; productType = "com.apple.product-type.tool"; }; 724FA6BF1CC0395A0092477B /* testtemplate */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA6CE1CC0395A0092477B /* Build configuration list for PBXNativeTarget "testtemplate" */; buildPhases = ( 724FA6C41CC0395A0092477B /* Sources */, 724FA6C61CC0395A0092477B /* Frameworks */, 724FA6CD1CC0395A0092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271284D41CC1232500E517C7 /* PBXTargetDependency */, 724FA6C01CC0395A0092477B /* PBXTargetDependency */, ); name = testtemplate; productName = testmime; productReference = 724FA6D11CC0395A0092477B /* testtemplate */; productType = "com.apple.product-type.tool"; }; 724FA6D81CC039DE0092477B /* testnotify */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA6E71CC039DE0092477B /* Build configuration list for PBXNativeTarget "testnotify" */; buildPhases = ( 724FA6DD1CC039DE0092477B /* Sources */, 724FA6DF1CC039DE0092477B /* Frameworks */, 724FA6E61CC039DE0092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 724FA6D91CC039DE0092477B /* PBXTargetDependency */, ); name = testnotify; productName = testmime; productReference = 724FA6EA1CC039DE0092477B /* testnotify */; productType = "com.apple.product-type.tool"; }; 724FA6ED1CC03A210092477B /* testcatalog */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA6FC1CC03A210092477B /* Build configuration list for PBXNativeTarget "testcatalog" */; buildPhases = ( 724FA6F21CC03A210092477B /* Sources */, 724FA6F41CC03A210092477B /* Frameworks */, 724FA6FB1CC03A210092477B /* CopyFiles */, ); buildRules = ( ); dependencies = ( 271284CD1CC122E400E517C7 /* PBXTargetDependency */, 724FA6EE1CC03A210092477B /* PBXTargetDependency */, ); name = testcatalog; productName = testmime; productReference = 724FA6FF1CC03A210092477B /* testcatalog */; productType = "com.apple.product-type.tool"; }; 724FA7011CC03A490092477B /* libcupsimage_static */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA70C1CC03A490092477B /* Build configuration list for PBXNativeTarget "libcupsimage_static" */; buildPhases = ( 724FA7041CC03A490092477B /* Sources */, 724FA7081CC03A490092477B /* Frameworks */, 724FA70A1CC03A490092477B /* Headers */, ); buildRules = ( ); dependencies = ( ); name = libcupsimage_static; productName = libcupsimage; productReference = 724FA70F1CC03A490092477B /* libcupsimage_static.a */; productType = "com.apple.product-type.library.dynamic"; }; 724FA7101CC03A990092477B /* libcupsmime_static */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA71C1CC03A990092477B /* Build configuration list for PBXNativeTarget "libcupsmime_static" */; buildPhases = ( 724FA7131CC03A990092477B /* Sources */, 724FA7171CC03A990092477B /* Frameworks */, 724FA7191CC03A990092477B /* Headers */, ); buildRules = ( ); dependencies = ( ); name = libcupsmime_static; productName = libcupsmime; productReference = 724FA71F1CC03A990092477B /* libcupsmime_static.a */; productType = "com.apple.product-type.library.dynamic"; }; 724FA7201CC03AAF0092477B /* libcupsppdc_static */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA73D1CC03AAF0092477B /* Build configuration list for PBXNativeTarget "libcupsppdc_static" */; buildPhases = ( 724FA7231CC03AAF0092477B /* Sources */, 724FA7371CC03AAF0092477B /* Frameworks */, 724FA73A1CC03AAF0092477B /* Headers */, ); buildRules = ( ); dependencies = ( ); name = libcupsppdc_static; productName = libcupsppdc; productReference = 724FA7401CC03AAF0092477B /* libcupsppdc_static.a */; productType = "com.apple.product-type.library.dynamic"; }; 724FA7411CC03ACC0092477B /* libcupscgi */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA74C1CC03ACC0092477B /* Build configuration list for PBXNativeTarget "libcupscgi" */; buildPhases = ( 724FA7441CC03ACC0092477B /* Sources */, 724FA7481CC03ACC0092477B /* Frameworks */, 724FA74A1CC03ACC0092477B /* Headers */, ); buildRules = ( ); dependencies = ( 724FA7421CC03ACC0092477B /* PBXTargetDependency */, ); name = libcupscgi; productName = libcupsimage; productReference = 724FA74F1CC03ACC0092477B /* libcupscgi.dylib */; productType = "com.apple.product-type.library.dynamic"; }; 724FA7581CC03AF60092477B /* libcupscgi_static */ = { isa = PBXNativeTarget; buildConfigurationList = 724FA7681CC03AF60092477B /* Build configuration list for PBXNativeTarget "libcupscgi_static" */; buildPhases = ( 724FA75B1CC03AF60092477B /* Sources */, 724FA7641CC03AF60092477B /* Frameworks */, 724FA7661CC03AF60092477B /* Headers */, ); buildRules = ( ); dependencies = ( ); name = libcupscgi_static; productName = libcupsimage; productReference = 724FA76B1CC03AF60092477B /* libcupscgi_static.a */; productType = "com.apple.product-type.library.dynamic"; }; 7258EAE1134594C4009286F1 /* rastertopwg */ = { isa = PBXNativeTarget; buildConfigurationList = 7258EAE9134594C4009286F1 /* Build configuration list for PBXNativeTarget "rastertopwg" */; buildPhases = ( 7258EADE134594C4009286F1 /* Sources */, 7258EADF134594C4009286F1 /* Frameworks */, 7258EAE0134594C4009286F1 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 7258EAF113459B67009286F1 /* PBXTargetDependency */, 7258EAF313459B67009286F1 /* PBXTargetDependency */, ); name = rastertopwg; productName = rastertopwg; productReference = 7258EAE2134594C4009286F1 /* rastertopwg */; productType = "com.apple.product-type.tool"; }; 726AD6F6135E88F0002C930D /* ippserver */ = { isa = PBXNativeTarget; buildConfigurationList = 726AD6FE135E88F1002C930D /* Build configuration list for PBXNativeTarget "ippserver" */; buildPhases = ( 726AD6F3135E88F0002C930D /* Sources */, 726AD6F4135E88F0002C930D /* Frameworks */, 726AD6F5135E88F0002C930D /* CopyFiles */, ); buildRules = ( ); dependencies = ( 726AD706135E8AC5002C930D /* PBXTargetDependency */, ); name = ippserver; productName = ippserver; productReference = 726AD6F7135E88F0002C930D /* ippserver */; productType = "com.apple.product-type.tool"; }; 72CF95E618A19134000FCAE4 /* ippfind */ = { isa = PBXNativeTarget; buildConfigurationList = 72CF95EE18A19134000FCAE4 /* Build configuration list for PBXNativeTarget "ippfind" */; buildPhases = ( 72CF95E918A19134000FCAE4 /* Sources */, 72CF95EB18A19134000FCAE4 /* Frameworks */, 72CF95ED18A19134000FCAE4 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 72CF95E718A19134000FCAE4 /* PBXTargetDependency */, ); name = ippfind; productName = ipptool; productReference = 72CF95F118A19134000FCAE4 /* ipptool copy */; productType = "com.apple.product-type.tool"; }; 72F75A511336F950004BB496 /* cupstestppd */ = { isa = PBXNativeTarget; buildConfigurationList = 72F75A581336F951004BB496 /* Build configuration list for PBXNativeTarget "cupstestppd" */; buildPhases = ( 72F75A4E1336F950004BB496 /* Sources */, 72F75A4F1336F950004BB496 /* Frameworks */, 72F75A501336F950004BB496 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 276683E41337B2BA000D33D0 /* PBXTargetDependency */, 276683E11337B299000D33D0 /* PBXTargetDependency */, ); name = cupstestppd; productName = cupstestppd; productReference = 72F75A521336F950004BB496 /* cupstestppd */; productType = "com.apple.product-type.tool"; }; 72F75A601336F9A3004BB496 /* libcupsimage */ = { isa = PBXNativeTarget; buildConfigurationList = 72F75A621336F9A3004BB496 /* Build configuration list for PBXNativeTarget "libcupsimage" */; buildPhases = ( 72F75A5D1336F9A3004BB496 /* Sources */, 72F75A5E1336F9A3004BB496 /* Frameworks */, 72F75A5F1336F9A3004BB496 /* Headers */, ); buildRules = ( ); dependencies = ( 72F75A661336FA30004BB496 /* PBXTargetDependency */, ); name = libcupsimage; productName = libcupsimage; productReference = 72F75A611336F9A3004BB496 /* libcupsimage.dylib */; productType = "com.apple.product-type.library.dynamic"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 72BF96371333042100B1EAD7 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "Apple Inc."; TargetAttributes = { 270695FD1CADF3E200FFE5FB = { DevelopmentTeam = RU58A2256H; }; 27A0347A1A8BDB1200650675 = { CreatedOnToolsVersion = 6.1.1; }; }; }; buildConfigurationList = 72BF963A1333042100B1EAD7 /* Build configuration list for PBXProject "CUPS" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 72BF96351333042100B1EAD7; productRefGroup = 72220EAF1333047D00FCA411 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 274FF5DE13332D3000317ECB /* All */, 273BF6D91333B6260022CAAB /* Tests */, 72220EAD1333047D00FCA411 /* libcups */, 270695FD1CADF3E200FFE5FB /* libcups_ios */, 274FF6891333B1C400317ECB /* libcups_static */, 724FA7411CC03ACC0092477B /* libcupscgi */, 724FA7581CC03AF60092477B /* libcupscgi_static */, 72F75A601336F9A3004BB496 /* libcupsimage */, 724FA7011CC03A490092477B /* libcupsimage_static */, 72220FAB13330B2200FCA411 /* libcupsmime */, 724FA7101CC03A990092477B /* libcupsmime_static */, 274FF5ED133330C800317ECB /* libcupsppdc */, 724FA7201CC03AAF0092477B /* libcupsppdc_static */, 271285951CC12D1300E517C7 /* admin.cgi */, 271286BA1CC13E2100E517C7 /* bcp */, 271284E11CC1261900E517C7 /* cancel */, 271286871CC13DC000E517C7 /* checkpo */, 271285A31CC12D3A00E517C7 /* classes.cgi */, 271285CD1CC12DBF00E517C7 /* commandtops */, 276684031337FA1D000D33D0 /* cupsaddsmb */, 271284EE1CC1264B00E517C7 /* cupsaccept */, 2766835B1337A9B6000D33D0 /* cupsctl */, 72220F5A13330A5A00FCA411 /* cupsd */, 274FF5CB13332B1F00317ECB /* cups-driverd */, 274FF6281333333600317ECB /* cups-deviced */, 274FF63D1333358B00317ECB /* cups-exec */, 274FF64E133339C400317ECB /* cups-lpd */, 274FF67713333B2F00317ECB /* cupsfilter */, 271284FB1CC1265D00E517C7 /* cupstestdsc */, 72F75A511336F950004BB496 /* cupstestppd */, 724379461333FEA9009631B9 /* dnssd */, 2712871E1CC140BE00E517C7 /* genstrings */, 271285DA1CC12DDF00E517C7 /* gziptoany */, 724378FC1333E43E009631B9 /* ipp */, 72CF95E618A19134000FCAE4 /* ippfind */, 726AD6F6135E88F0002C930D /* ippserver */, 276683EF1337F78E000D33D0 /* ipptool */, 271285B11CC12D4E00E517C7 /* jobs.cgi */, 271285081CC1267A00E517C7 /* lp */, 27A0347A1A8BDB1200650675 /* lpadmin */, 271285151CC1269700E517C7 /* lpc */, 724379171333E532009631B9 /* lpd */, 271285221CC126AA00E517C7 /* lpinfo */, 2712852F1CC1270B00E517C7 /* lpmove */, 2712853C1CC1271E00E517C7 /* lpoptions */, 271285491CC1272D00E517C7 /* lpq */, 271285561CC1274300E517C7 /* lpr */, 271285631CC1275200E517C7 /* lprm */, 271285701CC1276400E517C7 /* lpstat */, 271286E51CC13F2000E517C7 /* mailto */, 271287091CC13FAB00E517C7 /* mantohtml */, 271286981CC13DF100E517C7 /* po2strings */, 2766836F1337AC79000D33D0 /* ppdc */, 2766837C1337AC8C000D33D0 /* ppdhtml */, 276683891337AC97000D33D0 /* ppdi */, 276683961337ACA2000D33D0 /* ppdmerge */, 276683A31337ACAB000D33D0 /* ppdpo */, 271285BF1CC12D5E00E517C7 /* printers.cgi */, 271285E71CC12E2D00E517C7 /* pstops */, 2712866B1CC1310E00E517C7 /* rasterbench */, 271285F51CC12EEB00E517C7 /* rastertoepson */, 271286051CC12F0B00E517C7 /* rastertohp */, 271286151CC12F1A00E517C7 /* rastertolabel */, 7258EAE1134594C4009286F1 /* rastertopwg */, 271286F51CC13F3F00E517C7 /* rss */, 720DD6C11358FD5F0064AA82 /* snmp */, 7243792F1333FB85009631B9 /* socket */, 271286A91CC13DFF00E517C7 /* strings2po */, 271286CB1CC13E5B00E517C7 /* tbcp */, 724FA65E1CC038A50092477B /* test1284 */, 724FA5241CC0370C0092477B /* testadmin */, 724FA5371CC037370092477B /* testarray */, 724FA6721CC038BD0092477B /* testbackend */, 724FA54A1CC037500092477B /* testcache */, 724FA6ED1CC03A210092477B /* testcatalog */, 724FA6991CC039200092477B /* testcgi */, 724FA55D1CC037670092477B /* testconflicts */, 270D02131D707E0200EA9403 /* testcreds */, 273BF6BC1333B5000022CAAB /* testcups */, 2767FC4619266A0D000F61D3 /* testdest */, 724FA5701CC037810092477B /* testfile */, 724FA6AC1CC0393E0092477B /* testhi */, 278C58CA136B640300836530 /* testhttp */, 724FA5831CC037980092477B /* testi18n */, 724FA5961CC037AA0092477B /* testipp */, 724FA5A91CC037C60092477B /* testlang */, 724FA5BC1CC037D90092477B /* testlpd */, 270CCDA6135E3C9E00007BE2 /* testmime */, 724FA6D81CC039DE0092477B /* testnotify */, 724FA5CF1CC037F00092477B /* testoptions */, 724FA5E31CC038040092477B /* testppd */, 724FA5F71CC038190092477B /* testpwg */, 724FA60B1CC0382B0092477B /* testraster */, 724FA61F1CC038410092477B /* testsnmp */, 724FA6331CC038560092477B /* testspeed */, 724FA6471CC0386E0092477B /* testsub */, 724FA6851CC038D90092477B /* testsupplies */, 724FA6BF1CC0395A0092477B /* testtemplate */, 271286571CC1309000E517C7 /* tlscheck */, 7243795A1333FF1D009631B9 /* usb */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ 270695FE1CADF3E200FFE5FB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 270696001CADF3E200FFE5FB /* array.c in Sources */, 270696021CADF3E200FFE5FB /* auth.c in Sources */, 270696071CADF3E200FFE5FB /* debug.c in Sources */, 270696081CADF3E200FFE5FB /* dest.c in Sources */, 270696091CADF3E200FFE5FB /* dir.c in Sources */, 2706960B1CADF3E200FFE5FB /* encode.c in Sources */, 2706960C1CADF3E200FFE5FB /* file.c in Sources */, 2706960F1CADF3E200FFE5FB /* getputfile.c in Sources */, 270696101CADF3E200FFE5FB /* globals.c in Sources */, 270696111CADF3E200FFE5FB /* http-addr.c in Sources */, 270696121CADF3E200FFE5FB /* http-addrlist.c in Sources */, 270696131CADF3E200FFE5FB /* http-support.c in Sources */, 270696141CADF3E200FFE5FB /* http.c in Sources */, 270696161CADF3E200FFE5FB /* dest-options.c in Sources */, 270696171CADF3E200FFE5FB /* ipp-support.c in Sources */, 270696181CADF3E200FFE5FB /* ipp.c in Sources */, 270696191CADF3E200FFE5FB /* langprintf.c in Sources */, 2706961A1CADF3E200FFE5FB /* language.c in Sources */, 2706961D1CADF3E200FFE5FB /* md5.c in Sources */, 2706961E1CADF3E200FFE5FB /* md5passwd.c in Sources */, 2706961F1CADF3E200FFE5FB /* hash.c in Sources */, 270696201CADF3E200FFE5FB /* notify.c in Sources */, 270696211CADF3E200FFE5FB /* options.c in Sources */, 270696221CADF3E200FFE5FB /* tls.c in Sources */, 270696251CADF3E200FFE5FB /* dest-job.c in Sources */, 270696271CADF3E200FFE5FB /* pwg-media.c in Sources */, 270696281CADF3E200FFE5FB /* dest-localization.c in Sources */, 270696291CADF3E200FFE5FB /* request.c in Sources */, 2706962C1CADF3E200FFE5FB /* snprintf.c in Sources */, 2706962D1CADF3E200FFE5FB /* string.c in Sources */, 2706965B1CAE1A9A00FFE5FB /* util.c in Sources */, 2706962E1CADF3E200FFE5FB /* tempfile.c in Sources */, 2706962F1CADF3E200FFE5FB /* thread.c in Sources */, 270696301CADF3E200FFE5FB /* transcode.c in Sources */, 270696311CADF3E200FFE5FB /* usersys.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 270CCDA3135E3C9E00007BE2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 270CCDBC135E3D3E00007BE2 /* testmime.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 270D02161D707E0200EA9403 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 270D02261D707E3700EA9403 /* testcreds.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271284E41CC1261900E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271284ED1CC1262C00E517C7 /* cancel.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271284F11CC1264B00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271284FA1CC1265800E517C7 /* cupsaccept.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271284FE1CC1265D00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285071CC1267400E517C7 /* cupstestdsc.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712850B1CC1267A00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285141CC1269400E517C7 /* lp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285181CC1269700E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285211CC126A700E517C7 /* lpc.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285251CC126AA00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2712852E1CC126BC00E517C7 /* lpinfo.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285321CC1270B00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2712853B1CC1271B00E517C7 /* lpmove.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712853F1CC1271E00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285481CC1272900E517C7 /* lpoptions.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712854C1CC1272D00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285551CC1273C00E517C7 /* lpq.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285591CC1274300E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285621CC1274F00E517C7 /* lpr.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285661CC1275200E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2712856F1CC1276000E517C7 /* lprm.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285731CC1276400E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2712857C1CC1277000E517C7 /* lpstat.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285981CC12D1300E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285A11CC12D2100E517C7 /* admin.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285A61CC12D3A00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285B01CC12D4A00E517C7 /* classes.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285B41CC12D4E00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285BE1CC12D5C00E517C7 /* jobs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285C21CC12D5E00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285CC1CC12D6D00E517C7 /* printers.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285D01CC12DBF00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285D91CC12DD000E517C7 /* commandtops.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285DD1CC12DDF00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285E61CC12DEF00E517C7 /* gziptoany.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285EA1CC12E2D00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271285F41CC12E4200E517C7 /* common.c in Sources */, 271285F31CC12E3C00E517C7 /* pstops.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271285F81CC12EEB00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271286011CC12EFA00E517C7 /* rastertoepson.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712860A1CC12F0B00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271286141CC12F1800E517C7 /* rastertohp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712861A1CC12F1A00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271286241CC12F2600E517C7 /* rastertolabel.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712865A1CC1309000E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271286691CC130C700E517C7 /* tlscheck.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271286701CC1310E00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2712867E1CC1311D00E517C7 /* rasterbench.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712868A1CC13DC000E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271286971CC13DEA00E517C7 /* checkpo.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712869B1CC13DF100E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271286A81CC13DFD00E517C7 /* po2strings.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271286AC1CC13DFF00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271286B91CC13E1000E517C7 /* strings2po.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271286BD1CC13E2100E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271286CA1CC13E2E00E517C7 /* bcp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271286CE1CC13E5B00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271286DA1CC13E6A00E517C7 /* tbcp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271286E81CC13F2000E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271286F41CC13F2F00E517C7 /* mailto.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271286F81CC13F3F00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271287041CC13F4C00E517C7 /* rss.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2712870C1CC13FAB00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2712871A1CC13FE800E517C7 /* mantohtml.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 271287231CC140BE00E517C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2712872D1CC140D200E517C7 /* genstrings.cxx in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 273BF6B91333B5000022CAAB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 273BF6C71333B5370022CAAB /* testcups.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF5C813332B1F00317ECB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 274FF5D913332CC700317ECB /* cups-driverd.cxx in Sources */, 274FF5DA13332CC700317ECB /* util.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF5EA133330C800317ECB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 274FF60A1333315100317ECB /* ppdc-array.cxx in Sources */, 274FF60B1333315100317ECB /* ppdc-attr.cxx in Sources */, 274FF60C1333315100317ECB /* ppdc-catalog.cxx in Sources */, 274FF60D1333315100317ECB /* ppdc-choice.cxx in Sources */, 274FF60E1333315100317ECB /* ppdc-constraint.cxx in Sources */, 274FF60F1333315100317ECB /* ppdc-driver.cxx in Sources */, 274FF6101333315100317ECB /* ppdc-file.cxx in Sources */, 274FF6111333315100317ECB /* ppdc-filter.cxx in Sources */, 274FF6121333315100317ECB /* ppdc-font.cxx in Sources */, 274FF6131333315100317ECB /* ppdc-group.cxx in Sources */, 274FF6141333315100317ECB /* ppdc-import.cxx in Sources */, 274FF6151333315100317ECB /* ppdc-mediasize.cxx in Sources */, 274FF6161333315100317ECB /* ppdc-message.cxx in Sources */, 274FF6171333315100317ECB /* ppdc-option.cxx in Sources */, 274FF6191333315100317ECB /* ppdc-profile.cxx in Sources */, 274FF61A1333315100317ECB /* ppdc-shared.cxx in Sources */, 274FF61B1333315100317ECB /* ppdc-source.cxx in Sources */, 274FF61C1333315100317ECB /* ppdc-string.cxx in Sources */, 274FF61D1333315100317ECB /* ppdc-variable.cxx in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF6251333333600317ECB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 274FF6361333344400317ECB /* cups-deviced.c in Sources */, 274FF6371333345900317ECB /* util.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF63A1333358B00317ECB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 274FF64A1333398D00317ECB /* cups-exec.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF64B133339C400317ECB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 274FF65C133339FC00317ECB /* cups-lpd.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF67413333B2F00317ECB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 274FF68813333B6E00317ECB /* cupsfilter.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 274FF68A1333B1C400317ECB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 274FF68B1333B1C400317ECB /* adminutil.c in Sources */, 274FF68C1333B1C400317ECB /* array.c in Sources */, 274FF68D1333B1C400317ECB /* ppd-attr.c in Sources */, 274FF68E1333B1C400317ECB /* auth.c in Sources */, 274FF68F1333B1C400317ECB /* backchannel.c in Sources */, 274FF6901333B1C400317ECB /* backend.c in Sources */, 274FF6911333B1C400317ECB /* ppd-conflicts.c in Sources */, 274FF6921333B1C400317ECB /* ppd-custom.c in Sources */, 274FF6931333B1C400317ECB /* debug.c in Sources */, 274FF6941333B1C400317ECB /* dest.c in Sources */, 274FF6951333B1C400317ECB /* dir.c in Sources */, 274FF6961333B1C400317ECB /* ppd-emit.c in Sources */, 274FF6971333B1C400317ECB /* encode.c in Sources */, 274FF6981333B1C400317ECB /* file.c in Sources */, 274FF6991333B1C400317ECB /* getdevices.c in Sources */, 274FF69A1333B1C400317ECB /* getifaddrs.c in Sources */, 274FF69B1333B1C400317ECB /* getputfile.c in Sources */, 274FF69C1333B1C400317ECB /* globals.c in Sources */, 274FF69D1333B1C400317ECB /* http-addr.c in Sources */, 274FF69E1333B1C400317ECB /* http-addrlist.c in Sources */, 274FF69F1333B1C400317ECB /* http-support.c in Sources */, 274FF6A01333B1C400317ECB /* http.c in Sources */, 72A8B3D81C188CB900A1A547 /* ppd-util.c in Sources */, 2767FC7419268F0C000F61D3 /* dest-options.c in Sources */, 274FF6A11333B1C400317ECB /* ipp-support.c in Sources */, 274FF6A21333B1C400317ECB /* ipp.c in Sources */, 274FF6A31333B1C400317ECB /* langprintf.c in Sources */, 274FF6A41333B1C400317ECB /* language.c in Sources */, 274FF6A51333B1C400317ECB /* ppd-localize.c in Sources */, 274FF6A61333B1C400317ECB /* ppd-mark.c in Sources */, 274FF6A71333B1C400317ECB /* md5.c in Sources */, 274FF6A81333B1C400317ECB /* md5passwd.c in Sources */, 7284F9F11BFCCDB20026F886 /* hash.c in Sources */, 274FF6A91333B1C400317ECB /* notify.c in Sources */, 274FF6AA1333B1C400317ECB /* options.c in Sources */, 727AD5B819100A58009F6862 /* tls.c in Sources */, 274FF6AB1333B1C400317ECB /* ppd-page.c in Sources */, 274FF6AC1333B1C400317ECB /* ppd-cache.c in Sources */, 2767FC7219268F06000F61D3 /* dest-job.c in Sources */, 274FF6AD1333B1C400317ECB /* ppd.c in Sources */, 274FF6AE1333B1C400317ECB /* pwg-media.c in Sources */, 2767FC7319268F09000F61D3 /* dest-localization.c in Sources */, 274FF6AF1333B1C400317ECB /* request.c in Sources */, 274FF6B01333B1C400317ECB /* sidechannel.c in Sources */, 274FF6B11333B1C400317ECB /* snmp.c in Sources */, 274FF6B21333B1C400317ECB /* snprintf.c in Sources */, 274FF6B31333B1C400317ECB /* string.c in Sources */, 274FF6B41333B1C400317ECB /* tempfile.c in Sources */, 274FF6B51333B1C400317ECB /* thread.c in Sources */, 274FF6B61333B1C400317ECB /* transcode.c in Sources */, 274FF6B71333B1C400317ECB /* usersys.c in Sources */, 274FF6B81333B1C400317ECB /* util.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 276683581337A9B6000D33D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 276683691337AA00000D33D0 /* cupsctl.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2766836C1337AC79000D33D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 276683CD1337B201000D33D0 /* ppdc.cxx in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 276683791337AC8C000D33D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 276683CF1337B20D000D33D0 /* ppdhtml.cxx in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 276683861337AC97000D33D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 276683D11337B21A000D33D0 /* ppdi.cxx in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 276683931337ACA2000D33D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 276683D31337B228000D33D0 /* ppdmerge.cxx in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 276683A01337ACAB000D33D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 276683D51337B237000D33D0 /* ppdpo.cxx in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 276683EC1337F78E000D33D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 276683FA1337F7A9000D33D0 /* ipptool.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 276684001337FA1D000D33D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 276684111337FA7C000D33D0 /* cupsaddsmb.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2767FC4919266A0D000F61D3 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2767FC5219266A36000F61D3 /* testdest.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 278C58C7136B640300836530 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 278C58E3136B647200836530 /* testhttp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 27A034771A8BDB1200650675 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 27A034821A8BDC3A00650675 /* lpadmin.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 720DD6BE1358FD5F0064AA82 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 720DD6D413590AB90064AA82 /* ieee1284.c in Sources */, 720DD6D31358FDDE0064AA82 /* snmp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 72220EAA1333047D00FCA411 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 72220EB61333052D00FCA411 /* adminutil.c in Sources */, 72220EC51333056300FCA411 /* array.c in Sources */, 72220EC71333056300FCA411 /* ppd-attr.c in Sources */, 727AD5B719100A58009F6862 /* tls.c in Sources */, 72220EC81333056300FCA411 /* auth.c in Sources */, 72220EC91333056300FCA411 /* backchannel.c in Sources */, 72220ECA1333056300FCA411 /* backend.c in Sources */, 72220ECC1333056300FCA411 /* ppd-conflicts.c in Sources */, 72220ECF1333056300FCA411 /* ppd-custom.c in Sources */, 72220F0B133305BB00FCA411 /* debug.c in Sources */, 72220F0C133305BB00FCA411 /* dest.c in Sources */, 72220F0D133305BB00FCA411 /* dir.c in Sources */, 72220F0F133305BB00FCA411 /* ppd-emit.c in Sources */, 72220F10133305BB00FCA411 /* encode.c in Sources */, 72220F12133305BB00FCA411 /* file.c in Sources */, 72220F14133305BB00FCA411 /* getdevices.c in Sources */, 72220F15133305BB00FCA411 /* getifaddrs.c in Sources */, 72220F16133305BB00FCA411 /* getputfile.c in Sources */, 72220F17133305BB00FCA411 /* globals.c in Sources */, 72220F18133305BB00FCA411 /* http-addr.c in Sources */, 72220F19133305BB00FCA411 /* http-addrlist.c in Sources */, 72220F1B133305BB00FCA411 /* http-support.c in Sources */, 72A8B3D71C188CB800A1A547 /* ppd-util.c in Sources */, 72220F1C133305BB00FCA411 /* http.c in Sources */, 72CF95E518A13543000FCAE4 /* dest-options.c in Sources */, 72220F1F133305BB00FCA411 /* ipp-support.c in Sources */, 72220F20133305BB00FCA411 /* ipp.c in Sources */, 72220F22133305BB00FCA411 /* langprintf.c in Sources */, 72220F24133305BB00FCA411 /* language.c in Sources */, 72220F26133305BB00FCA411 /* ppd-localize.c in Sources */, 72220F27133305BB00FCA411 /* ppd-mark.c in Sources */, 72220F29133305BB00FCA411 /* md5.c in Sources */, 7284F9F01BFCCDB10026F886 /* hash.c in Sources */, 72220F2A133305BB00FCA411 /* md5passwd.c in Sources */, 72220F2B133305BB00FCA411 /* notify.c in Sources */, 72220F2C133305BB00FCA411 /* options.c in Sources */, 72220F2D133305BB00FCA411 /* ppd-page.c in Sources */, 72220F2E133305BB00FCA411 /* ppd-cache.c in Sources */, 72220F30133305BB00FCA411 /* ppd.c in Sources */, 72220F32133305BB00FCA411 /* pwg-media.c in Sources */, 72220F35133305BB00FCA411 /* request.c in Sources */, 72220F36133305BB00FCA411 /* sidechannel.c in Sources */, 72220F39133305BB00FCA411 /* snmp.c in Sources */, 72220F3A133305BB00FCA411 /* snprintf.c in Sources */, 72220F3C133305BB00FCA411 /* string.c in Sources */, 72220F3D133305BB00FCA411 /* tempfile.c in Sources */, 72CF95E418A13543000FCAE4 /* dest-localization.c in Sources */, 72220F3F133305BB00FCA411 /* thread.c in Sources */, 72220F40133305BB00FCA411 /* transcode.c in Sources */, 72220F42133305BB00FCA411 /* usersys.c in Sources */, 72220F43133305BB00FCA411 /* util.c in Sources */, 72CF95E318A13543000FCAE4 /* dest-job.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 72220F5713330A5A00FCA411 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 72220F9013330B0C00FCA411 /* auth.c in Sources */, 72220F9113330B0C00FCA411 /* banners.c in Sources */, 72220F9213330B0C00FCA411 /* cert.c in Sources */, 72220F9313330B0C00FCA411 /* classes.c in Sources */, 72220F9413330B0C00FCA411 /* client.c in Sources */, 72220F9513330B0C00FCA411 /* conf.c in Sources */, 72220F9613330B0C00FCA411 /* dirsvc.c in Sources */, 72220F9713330B0C00FCA411 /* env.c in Sources */, 72220F9813330B0C00FCA411 /* ipp.c in Sources */, 72220F9913330B0C00FCA411 /* job.c in Sources */, 72220F9A13330B0C00FCA411 /* listen.c in Sources */, 72220F9B13330B0C00FCA411 /* log.c in Sources */, 72220F9C13330B0C00FCA411 /* main.c in Sources */, 72220F9D13330B0C00FCA411 /* network.c in Sources */, 72220F9E13330B0C00FCA411 /* policy.c in Sources */, 72220F9F13330B0C00FCA411 /* printers.c in Sources */, 72220FA013330B0C00FCA411 /* process.c in Sources */, 72220FA113330B0C00FCA411 /* quotas.c in Sources */, 72220FA313330B0C00FCA411 /* select.c in Sources */, 72220FA413330B0C00FCA411 /* server.c in Sources */, 72220FA513330B0C00FCA411 /* statbuf.c in Sources */, 72220FA613330B0C00FCA411 /* subscriptions.c in Sources */, 72220FA713330B0C00FCA411 /* sysman.c in Sources */, 72C16CB9137B195D007E4BF4 /* file.c in Sources */, 72D53A3815B4929D003F877F /* colorman.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 72220FA813330B2200FCA411 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 72220FB613330BCE00FCA411 /* filter.c in Sources */, 72220FB713330BCE00FCA411 /* mime.c in Sources */, 72220FB913330BCE00FCA411 /* type.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724378F91333E43E009631B9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 7243790D1333E4E3009631B9 /* ipp.c in Sources */, 7243790E1333E4E3009631B9 /* network.c in Sources */, 7243790F1333E4E3009631B9 /* snmp-supplies.c in Sources */, 724379131333E516009631B9 /* runloop.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724379141333E532009631B9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724379221333E928009631B9 /* network.c in Sources */, 724379231333E928009631B9 /* runloop.c in Sources */, 724379241333E928009631B9 /* snmp-supplies.c in Sources */, 724379291333E952009631B9 /* lpd.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 7243792C1333FB85009631B9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724379401333FD4B009631B9 /* network.c in Sources */, 724379411333FD4B009631B9 /* runloop.c in Sources */, 724379421333FD4B009631B9 /* snmp-supplies.c in Sources */, 7243793D1333FD19009631B9 /* socket.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724379431333FEA9009631B9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724379511333FEBB009631B9 /* dnssd.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724379571333FF1D009631B9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724379C71333FFC7009631B9 /* usb.c in Sources */, 724379CB1334000E009631B9 /* ieee1284.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5271CC0370C0092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA5361CC0372F0092477B /* testadmin.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA53A1CC037370092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA5491CC037460092477B /* testarray.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA54D1CC037500092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA55C1CC0375F0092477B /* testcache.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5601CC037670092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA56F1CC037760092477B /* testconflicts.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5731CC037810092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA5821CC0378E0092477B /* testfile.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5861CC037980092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA5951CC037A50092477B /* testi18n.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5991CC037AA0092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA5A81CC037B70092477B /* testipp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5AC1CC037C60092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA5BB1CC037D30092477B /* testlang.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5BF1CC037D90092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA5CE1CC037E50092477B /* testlpd.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5D41CC037F00092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA5E21CC037FD0092477B /* testoptions.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5E81CC038040092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA5F61CC0380F0092477B /* testppd.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA5FC1CC038190092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA60A1CC038250092477B /* testpwg.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6101CC0382B0092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA61E1CC0383B0092477B /* testraster.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6241CC038410092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA6321CC038510092477B /* testsnmp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6381CC038560092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA6461CC038650092477B /* testspeed.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA64C1CC0386E0092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA65A1CC038790092477B /* testsub.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6631CC038A50092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA6711CC038B30092477B /* test1284.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6751CC038BD0092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA6841CC038CA0092477B /* testbackend.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA68A1CC038D90092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 271284D21CC1231300E517C7 /* snmp-supplies.c in Sources */, 724FA6981CC038E70092477B /* testsupplies.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA69C1CC039200092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA6AB1CC0392E0092477B /* testcgi.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6AF1CC0393E0092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA6BE1CC0394C0092477B /* testhi.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6C41CC0395A0092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA6D21CC039680092477B /* testtemplate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6DD1CC039DE0092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA6EB1CC039EB0092477B /* testnotify.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA6F21CC03A210092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA7001CC03A2F0092477B /* testcatalog.cxx in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA7041CC03A490092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA7051CC03A490092477B /* error.c in Sources */, 724FA7061CC03A490092477B /* interpret.c in Sources */, 724FA7071CC03A490092477B /* raster.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA7131CC03A990092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA7141CC03A990092477B /* filter.c in Sources */, 724FA7151CC03A990092477B /* mime.c in Sources */, 724FA7161CC03A990092477B /* type.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA7231CC03AAF0092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA7241CC03AAF0092477B /* ppdc-array.cxx in Sources */, 724FA7251CC03AAF0092477B /* ppdc-attr.cxx in Sources */, 724FA7261CC03AAF0092477B /* ppdc-catalog.cxx in Sources */, 724FA7271CC03AAF0092477B /* ppdc-choice.cxx in Sources */, 724FA7281CC03AAF0092477B /* ppdc-constraint.cxx in Sources */, 724FA7291CC03AAF0092477B /* ppdc-driver.cxx in Sources */, 724FA72A1CC03AAF0092477B /* ppdc-file.cxx in Sources */, 724FA72B1CC03AAF0092477B /* ppdc-filter.cxx in Sources */, 724FA72C1CC03AAF0092477B /* ppdc-font.cxx in Sources */, 724FA72D1CC03AAF0092477B /* ppdc-group.cxx in Sources */, 724FA72E1CC03AAF0092477B /* ppdc-import.cxx in Sources */, 724FA72F1CC03AAF0092477B /* ppdc-mediasize.cxx in Sources */, 724FA7301CC03AAF0092477B /* ppdc-message.cxx in Sources */, 724FA7311CC03AAF0092477B /* ppdc-option.cxx in Sources */, 724FA7321CC03AAF0092477B /* ppdc-profile.cxx in Sources */, 724FA7331CC03AAF0092477B /* ppdc-shared.cxx in Sources */, 724FA7341CC03AAF0092477B /* ppdc-source.cxx in Sources */, 724FA7351CC03AAF0092477B /* ppdc-string.cxx in Sources */, 724FA7361CC03AAF0092477B /* ppdc-variable.cxx in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA7441CC03ACC0092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA7511CC03AF20092477B /* help-index.c in Sources */, 724FA7521CC03AF20092477B /* help.c in Sources */, 724FA7531CC03AF20092477B /* html.c in Sources */, 724FA7541CC03AF20092477B /* ipp-var.c in Sources */, 724FA7551CC03AF20092477B /* search.c in Sources */, 724FA7561CC03AF20092477B /* template.c in Sources */, 724FA7571CC03AF20092477B /* var.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 724FA75B1CC03AF60092477B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 724FA75D1CC03AF60092477B /* help-index.c in Sources */, 724FA75E1CC03AF60092477B /* help.c in Sources */, 724FA75F1CC03AF60092477B /* html.c in Sources */, 724FA7601CC03AF60092477B /* ipp-var.c in Sources */, 724FA7611CC03AF60092477B /* search.c in Sources */, 724FA7621CC03AF60092477B /* template.c in Sources */, 724FA7631CC03AF60092477B /* var.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 7258EADE134594C4009286F1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 7258EAED134594EB009286F1 /* rastertopwg.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 726AD6F3135E88F0002C930D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 726AD702135E8A90002C930D /* ippserver.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 72CF95E918A19134000FCAE4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 72CF95F318A19165000FCAE4 /* ippfind.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 72F75A4E1336F950004BB496 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 72F75A5C1336F988004BB496 /* cupstestppd.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 72F75A5D1336F9A3004BB496 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 72F75A6C1336FA8A004BB496 /* error.c in Sources */, 72F75A6D1336FA8A004BB496 /* interpret.c in Sources */, 72F75A6E1336FA8A004BB496 /* raster.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 270CCDB2135E3CDE00007BE2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 270CCDA6135E3C9E00007BE2 /* testmime */; targetProxy = 270CCDB1135E3CDE00007BE2 /* PBXContainerItemProxy */; }; 270CCDB8135E3CFD00007BE2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 270CCDB7135E3CFD00007BE2 /* PBXContainerItemProxy */; }; 270D02141D707E0200EA9403 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 270D02151D707E0200EA9403 /* PBXContainerItemProxy */; }; 270D02281D707E5100EA9403 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 270D02131D707E0200EA9403 /* testcreds */; targetProxy = 270D02271D707E5100EA9403 /* PBXContainerItemProxy */; }; 271284911CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 271284901CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284931CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA7581CC03AF60092477B /* libcupscgi_static */; targetProxy = 271284921CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284951CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA7011CC03A490092477B /* libcupsimage_static */; targetProxy = 271284941CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284971CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA7101CC03A990092477B /* libcupsmime_static */; targetProxy = 271284961CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284991CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA7201CC03AAF0092477B /* libcupsppdc_static */; targetProxy = 271284981CC11FA500E517C7 /* PBXContainerItemProxy */; }; 2712849B1CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA65E1CC038A50092477B /* test1284 */; targetProxy = 2712849A1CC11FA500E517C7 /* PBXContainerItemProxy */; }; 2712849D1CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA5241CC0370C0092477B /* testadmin */; targetProxy = 2712849C1CC11FA500E517C7 /* PBXContainerItemProxy */; }; 2712849F1CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA5371CC037370092477B /* testarray */; targetProxy = 2712849E1CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284A11CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA6721CC038BD0092477B /* testbackend */; targetProxy = 271284A01CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284A31CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA54A1CC037500092477B /* testcache */; targetProxy = 271284A21CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284A51CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA6ED1CC03A210092477B /* testcatalog */; targetProxy = 271284A41CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284A71CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA6991CC039200092477B /* testcgi */; targetProxy = 271284A61CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284A91CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA55D1CC037670092477B /* testconflicts */; targetProxy = 271284A81CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284AB1CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA5701CC037810092477B /* testfile */; targetProxy = 271284AA1CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284AD1CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA6AC1CC0393E0092477B /* testhi */; targetProxy = 271284AC1CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284AF1CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA5831CC037980092477B /* testi18n */; targetProxy = 271284AE1CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284B11CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA5961CC037AA0092477B /* testipp */; targetProxy = 271284B01CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284B31CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA5A91CC037C60092477B /* testlang */; targetProxy = 271284B21CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284B51CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA5BC1CC037D90092477B /* testlpd */; targetProxy = 271284B41CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284B71CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA6D81CC039DE0092477B /* testnotify */; targetProxy = 271284B61CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284B91CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA5CF1CC037F00092477B /* testoptions */; targetProxy = 271284B81CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284BB1CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA5E31CC038040092477B /* testppd */; targetProxy = 271284BA1CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284BD1CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA5F71CC038190092477B /* testpwg */; targetProxy = 271284BC1CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284BF1CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA60B1CC0382B0092477B /* testraster */; targetProxy = 271284BE1CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284C11CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA61F1CC038410092477B /* testsnmp */; targetProxy = 271284C01CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284C31CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA6331CC038560092477B /* testspeed */; targetProxy = 271284C21CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284C51CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA6471CC0386E0092477B /* testsub */; targetProxy = 271284C41CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284C71CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA6851CC038D90092477B /* testsupplies */; targetProxy = 271284C61CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284C91CC11FA500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA6BF1CC0395A0092477B /* testtemplate */; targetProxy = 271284C81CC11FA500E517C7 /* PBXContainerItemProxy */; }; 271284CB1CC122D000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA7581CC03AF60092477B /* libcupscgi_static */; targetProxy = 271284CA1CC122D000E517C7 /* PBXContainerItemProxy */; }; 271284CD1CC122E400E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA7201CC03AAF0092477B /* libcupsppdc_static */; targetProxy = 271284CC1CC122E400E517C7 /* PBXContainerItemProxy */; }; 271284CF1CC122ED00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA7581CC03AF60092477B /* libcupscgi_static */; targetProxy = 271284CE1CC122ED00E517C7 /* PBXContainerItemProxy */; }; 271284D11CC122F900E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA7011CC03A490092477B /* libcupsimage_static */; targetProxy = 271284D01CC122F900E517C7 /* PBXContainerItemProxy */; }; 271284D41CC1232500E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA7581CC03AF60092477B /* libcupscgi_static */; targetProxy = 271284D31CC1232500E517C7 /* PBXContainerItemProxy */; }; 271284D61CC1234D00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA7101CC03A990092477B /* libcupsmime_static */; targetProxy = 271284D51CC1234D00E517C7 /* PBXContainerItemProxy */; }; 271284E21CC1261900E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271284E31CC1261900E517C7 /* PBXContainerItemProxy */; }; 271284EF1CC1264B00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271284F01CC1264B00E517C7 /* PBXContainerItemProxy */; }; 271284FC1CC1265D00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271284FD1CC1265D00E517C7 /* PBXContainerItemProxy */; }; 271285091CC1267A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 2712850A1CC1267A00E517C7 /* PBXContainerItemProxy */; }; 271285161CC1269700E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285171CC1269700E517C7 /* PBXContainerItemProxy */; }; 271285231CC126AA00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285241CC126AA00E517C7 /* PBXContainerItemProxy */; }; 271285301CC1270B00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285311CC1270B00E517C7 /* PBXContainerItemProxy */; }; 2712853D1CC1271E00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 2712853E1CC1271E00E517C7 /* PBXContainerItemProxy */; }; 2712854A1CC1272D00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 2712854B1CC1272D00E517C7 /* PBXContainerItemProxy */; }; 271285571CC1274300E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285581CC1274300E517C7 /* PBXContainerItemProxy */; }; 271285641CC1275200E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285651CC1275200E517C7 /* PBXContainerItemProxy */; }; 271285711CC1276400E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285721CC1276400E517C7 /* PBXContainerItemProxy */; }; 2712857E1CC1295A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271284E11CC1261900E517C7 /* cancel */; targetProxy = 2712857D1CC1295A00E517C7 /* PBXContainerItemProxy */; }; 271285801CC1295A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271284EE1CC1264B00E517C7 /* cupsaccept */; targetProxy = 2712857F1CC1295A00E517C7 /* PBXContainerItemProxy */; }; 271285821CC1295A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271284FB1CC1265D00E517C7 /* cupstestdsc */; targetProxy = 271285811CC1295A00E517C7 /* PBXContainerItemProxy */; }; 271285841CC1295A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285081CC1267A00E517C7 /* lp */; targetProxy = 271285831CC1295A00E517C7 /* PBXContainerItemProxy */; }; 271285861CC1295A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285151CC1269700E517C7 /* lpc */; targetProxy = 271285851CC1295A00E517C7 /* PBXContainerItemProxy */; }; 271285881CC1295A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285221CC126AA00E517C7 /* lpinfo */; targetProxy = 271285871CC1295A00E517C7 /* PBXContainerItemProxy */; }; 2712858A1CC1295A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 2712852F1CC1270B00E517C7 /* lpmove */; targetProxy = 271285891CC1295A00E517C7 /* PBXContainerItemProxy */; }; 2712858C1CC1295A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 2712853C1CC1271E00E517C7 /* lpoptions */; targetProxy = 2712858B1CC1295A00E517C7 /* PBXContainerItemProxy */; }; 2712858E1CC1295A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285491CC1272D00E517C7 /* lpq */; targetProxy = 2712858D1CC1295A00E517C7 /* PBXContainerItemProxy */; }; 271285901CC1295A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285561CC1274300E517C7 /* lpr */; targetProxy = 2712858F1CC1295A00E517C7 /* PBXContainerItemProxy */; }; 271285921CC1295A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285631CC1275200E517C7 /* lprm */; targetProxy = 271285911CC1295A00E517C7 /* PBXContainerItemProxy */; }; 271285941CC1295A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285701CC1276400E517C7 /* lpstat */; targetProxy = 271285931CC1295A00E517C7 /* PBXContainerItemProxy */; }; 271285961CC12D1300E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285971CC12D1300E517C7 /* PBXContainerItemProxy */; }; 271285A41CC12D3A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285A51CC12D3A00E517C7 /* PBXContainerItemProxy */; }; 271285B21CC12D4E00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285B31CC12D4E00E517C7 /* PBXContainerItemProxy */; }; 271285C01CC12D5E00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285C11CC12D5E00E517C7 /* PBXContainerItemProxy */; }; 271285CE1CC12DBF00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285CF1CC12DBF00E517C7 /* PBXContainerItemProxy */; }; 271285DB1CC12DDF00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285DC1CC12DDF00E517C7 /* PBXContainerItemProxy */; }; 271285E81CC12E2D00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285E91CC12E2D00E517C7 /* PBXContainerItemProxy */; }; 271285F61CC12EEB00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271285F71CC12EEB00E517C7 /* PBXContainerItemProxy */; }; 271286031CC12F0100E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72F75A601336F9A3004BB496 /* libcupsimage */; targetProxy = 271286021CC12F0100E517C7 /* PBXContainerItemProxy */; }; 271286061CC12F0B00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72F75A601336F9A3004BB496 /* libcupsimage */; targetProxy = 271286071CC12F0B00E517C7 /* PBXContainerItemProxy */; }; 271286081CC12F0B00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271286091CC12F0B00E517C7 /* PBXContainerItemProxy */; }; 271286161CC12F1A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72F75A601336F9A3004BB496 /* libcupsimage */; targetProxy = 271286171CC12F1A00E517C7 /* PBXContainerItemProxy */; }; 271286181CC12F1A00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271286191CC12F1A00E517C7 /* PBXContainerItemProxy */; }; 271286351CC12F9000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285951CC12D1300E517C7 /* admin.cgi */; targetProxy = 271286341CC12F9000E517C7 /* PBXContainerItemProxy */; }; 271286371CC12F9000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285A31CC12D3A00E517C7 /* classes.cgi */; targetProxy = 271286361CC12F9000E517C7 /* PBXContainerItemProxy */; }; 271286391CC12F9000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285CD1CC12DBF00E517C7 /* commandtops */; targetProxy = 271286381CC12F9000E517C7 /* PBXContainerItemProxy */; }; 2712863B1CC12F9000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285DA1CC12DDF00E517C7 /* gziptoany */; targetProxy = 2712863A1CC12F9000E517C7 /* PBXContainerItemProxy */; }; 2712863D1CC12F9000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285B11CC12D4E00E517C7 /* jobs.cgi */; targetProxy = 2712863C1CC12F9000E517C7 /* PBXContainerItemProxy */; }; 2712863F1CC12F9000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285BF1CC12D5E00E517C7 /* printers.cgi */; targetProxy = 2712863E1CC12F9000E517C7 /* PBXContainerItemProxy */; }; 271286411CC12F9000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285E71CC12E2D00E517C7 /* pstops */; targetProxy = 271286401CC12F9000E517C7 /* PBXContainerItemProxy */; }; 271286431CC12F9000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271285F51CC12EEB00E517C7 /* rastertoepson */; targetProxy = 271286421CC12F9000E517C7 /* PBXContainerItemProxy */; }; 271286451CC12F9000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271286051CC12F0B00E517C7 /* rastertohp */; targetProxy = 271286441CC12F9000E517C7 /* PBXContainerItemProxy */; }; 271286471CC12F9000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271286151CC12F1A00E517C7 /* rastertolabel */; targetProxy = 271286461CC12F9000E517C7 /* PBXContainerItemProxy */; }; 271286581CC1309000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 271286591CC1309000E517C7 /* PBXContainerItemProxy */; }; 2712866C1CC1310E00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA7011CC03A490092477B /* libcupsimage_static */; targetProxy = 2712866D1CC1310E00E517C7 /* PBXContainerItemProxy */; }; 2712866E1CC1310E00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 2712866F1CC1310E00E517C7 /* PBXContainerItemProxy */; }; 271286881CC13DC000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 271286891CC13DC000E517C7 /* PBXContainerItemProxy */; }; 271286991CC13DF100E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 2712869A1CC13DF100E517C7 /* PBXContainerItemProxy */; }; 271286AA1CC13DFF00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 271286AB1CC13DFF00E517C7 /* PBXContainerItemProxy */; }; 271286BB1CC13E2100E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271286BC1CC13E2100E517C7 /* PBXContainerItemProxy */; }; 271286CC1CC13E5B00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271286CD1CC13E5B00E517C7 /* PBXContainerItemProxy */; }; 271286DC1CC13EF400E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271286981CC13DF100E517C7 /* po2strings */; targetProxy = 271286DB1CC13EF400E517C7 /* PBXContainerItemProxy */; }; 271286DE1CC13EF400E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271286A91CC13DFF00E517C7 /* strings2po */; targetProxy = 271286DD1CC13EF400E517C7 /* PBXContainerItemProxy */; }; 271286E01CC13EF400E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271286571CC1309000E517C7 /* tlscheck */; targetProxy = 271286DF1CC13EF400E517C7 /* PBXContainerItemProxy */; }; 271286E21CC13F0100E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271286BA1CC13E2100E517C7 /* bcp */; targetProxy = 271286E11CC13F0100E517C7 /* PBXContainerItemProxy */; }; 271286E41CC13F0100E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271286CB1CC13E5B00E517C7 /* tbcp */; targetProxy = 271286E31CC13F0100E517C7 /* PBXContainerItemProxy */; }; 271286E61CC13F2000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271286E71CC13F2000E517C7 /* PBXContainerItemProxy */; }; 271286F61CC13F3F00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 271286F71CC13F3F00E517C7 /* PBXContainerItemProxy */; }; 271287061CC13F8F00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271286E51CC13F2000E517C7 /* mailto */; targetProxy = 271287051CC13F8F00E517C7 /* PBXContainerItemProxy */; }; 271287081CC13F8F00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271286F51CC13F3F00E517C7 /* rss */; targetProxy = 271287071CC13F8F00E517C7 /* PBXContainerItemProxy */; }; 2712870A1CC13FAB00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 2712870B1CC13FAB00E517C7 /* PBXContainerItemProxy */; }; 2712871C1CC13FFA00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 271287091CC13FAB00E517C7 /* mantohtml */; targetProxy = 2712871B1CC13FFA00E517C7 /* PBXContainerItemProxy */; }; 2712872F1CC140DF00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 2712872E1CC140DF00E517C7 /* PBXContainerItemProxy */; }; 271287311CC140DF00E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724FA7201CC03AAF0092477B /* libcupsppdc_static */; targetProxy = 271287301CC140DF00E517C7 /* PBXContainerItemProxy */; }; 271287361CC1411000E517C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 2712871E1CC140BE00E517C7 /* genstrings */; targetProxy = 271287351CC1411000E517C7 /* PBXContainerItemProxy */; }; 273BF6C91333B5410022CAAB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 273BF6C81333B5410022CAAB /* PBXContainerItemProxy */; }; 273BF6DE1333B6370022CAAB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 273BF6BC1333B5000022CAAB /* testcups */; targetProxy = 273BF6DD1333B6370022CAAB /* PBXContainerItemProxy */; }; 274FF5DC13332CF900317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 274FF5DB13332CF900317ECB /* PBXContainerItemProxy */; }; 274FF5E313332D4300317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 274FF5E213332D4300317ECB /* PBXContainerItemProxy */; }; 274FF5E513332D4300317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220FAB13330B2200FCA411 /* libcupsmime */; targetProxy = 274FF5E413332D4300317ECB /* PBXContainerItemProxy */; }; 274FF5E713332D4300317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220F5A13330A5A00FCA411 /* cupsd */; targetProxy = 274FF5E613332D4300317ECB /* PBXContainerItemProxy */; }; 274FF5E913332D4300317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF5CB13332B1F00317ECB /* cups-driverd */; targetProxy = 274FF5E813332D4300317ECB /* PBXContainerItemProxy */; }; 274FF5F3133330FD00317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 274FF5F2133330FD00317ECB /* PBXContainerItemProxy */; }; 274FF6201333316200317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF5ED133330C800317ECB /* libcupsppdc */; targetProxy = 274FF61F1333316200317ECB /* PBXContainerItemProxy */; }; 274FF622133331D300317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF5ED133330C800317ECB /* libcupsppdc */; targetProxy = 274FF621133331D300317ECB /* PBXContainerItemProxy */; }; 274FF6341333335200317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 274FF6331333335200317ECB /* PBXContainerItemProxy */; }; 274FF6391333348400317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6281333333600317ECB /* cups-deviced */; targetProxy = 274FF6381333348400317ECB /* PBXContainerItemProxy */; }; 274FF648133335A300317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF63D1333358B00317ECB /* cups-exec */; targetProxy = 274FF647133335A300317ECB /* PBXContainerItemProxy */; }; 274FF65A133339D900317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 274FF659133339D900317ECB /* PBXContainerItemProxy */; }; 274FF65E13333A3400317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF64E133339C400317ECB /* cups-lpd */; targetProxy = 274FF65D13333A3400317ECB /* PBXContainerItemProxy */; }; 274FF68213333B3C00317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 274FF68113333B3C00317ECB /* PBXContainerItemProxy */; }; 274FF68413333B3C00317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220FAB13330B2200FCA411 /* libcupsmime */; targetProxy = 274FF68313333B3C00317ECB /* PBXContainerItemProxy */; }; 274FF6E21333B33F00317ECB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF67713333B2F00317ECB /* cupsfilter */; targetProxy = 274FF6E11333B33F00317ECB /* PBXContainerItemProxy */; }; 276683661337A9D6000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 276683651337A9D6000D33D0 /* PBXContainerItemProxy */; }; 2766836B1337AA25000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 2766835B1337A9B6000D33D0 /* cupsctl */; targetProxy = 2766836A1337AA25000D33D0 /* PBXContainerItemProxy */; }; 276683AE1337ACF9000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 276683AD1337ACF9000D33D0 /* PBXContainerItemProxy */; }; 276683B01337ACF9000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF5ED133330C800317ECB /* libcupsppdc */; targetProxy = 276683AF1337ACF9000D33D0 /* PBXContainerItemProxy */; }; 276683B41337AD18000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 276683B31337AD18000D33D0 /* PBXContainerItemProxy */; }; 276683B61337AD18000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF5ED133330C800317ECB /* libcupsppdc */; targetProxy = 276683B51337AD18000D33D0 /* PBXContainerItemProxy */; }; 276683BC1337AE49000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 276683BB1337AE49000D33D0 /* PBXContainerItemProxy */; }; 276683BE1337AE49000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF5ED133330C800317ECB /* libcupsppdc */; targetProxy = 276683BD1337AE49000D33D0 /* PBXContainerItemProxy */; }; 276683C01337B1AD000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 276683BF1337B1AD000D33D0 /* PBXContainerItemProxy */; }; 276683C21337B1AD000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF5ED133330C800317ECB /* libcupsppdc */; targetProxy = 276683C11337B1AD000D33D0 /* PBXContainerItemProxy */; }; 276683C61337B1BC000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 276683C51337B1BC000D33D0 /* PBXContainerItemProxy */; }; 276683C81337B1BC000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF5ED133330C800317ECB /* libcupsppdc */; targetProxy = 276683C71337B1BC000D33D0 /* PBXContainerItemProxy */; }; 276683D71337B24A000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 2766836F1337AC79000D33D0 /* ppdc */; targetProxy = 276683D61337B24A000D33D0 /* PBXContainerItemProxy */; }; 276683D91337B24A000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 2766837C1337AC8C000D33D0 /* ppdhtml */; targetProxy = 276683D81337B24A000D33D0 /* PBXContainerItemProxy */; }; 276683DB1337B24A000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 276683891337AC97000D33D0 /* ppdi */; targetProxy = 276683DA1337B24A000D33D0 /* PBXContainerItemProxy */; }; 276683DD1337B24A000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 276683961337ACA2000D33D0 /* ppdmerge */; targetProxy = 276683DC1337B24A000D33D0 /* PBXContainerItemProxy */; }; 276683DF1337B24A000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 276683A31337ACAB000D33D0 /* ppdpo */; targetProxy = 276683DE1337B24A000D33D0 /* PBXContainerItemProxy */; }; 276683E11337B299000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 276683E01337B299000D33D0 /* PBXContainerItemProxy */; }; 276683E41337B2BA000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72F75A601336F9A3004BB496 /* libcupsimage */; targetProxy = 276683E31337B2BA000D33D0 /* PBXContainerItemProxy */; }; 276683FC1337F7B3000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 276683FB1337F7B3000D33D0 /* PBXContainerItemProxy */; }; 276683FF1337F7C5000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 276683EF1337F78E000D33D0 /* ipptool */; targetProxy = 276683FE1337F7C5000D33D0 /* PBXContainerItemProxy */; }; 2766840E1337FA31000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 2766840D1337FA31000D33D0 /* PBXContainerItemProxy */; }; 276684131337FA8D000D33D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 276684031337FA1D000D33D0 /* cupsaddsmb */; targetProxy = 276684121337FA8D000D33D0 /* PBXContainerItemProxy */; }; 2767FC4719266A0D000F61D3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 2767FC4819266A0D000F61D3 /* PBXContainerItemProxy */; }; 2767FC5419267469000F61D3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 276683EF1337F78E000D33D0 /* ipptool */; targetProxy = 2767FC5319267469000F61D3 /* PBXContainerItemProxy */; }; 2767FC5619267469000F61D3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 2767FC4619266A0D000F61D3 /* testdest */; targetProxy = 2767FC5519267469000F61D3 /* PBXContainerItemProxy */; }; 278C58D6136B641D00836530 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 278C58CA136B640300836530 /* testhttp */; targetProxy = 278C58D5136B641D00836530 /* PBXContainerItemProxy */; }; 278C58D8136B642F00836530 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 278C58D7136B642F00836530 /* PBXContainerItemProxy */; }; 27A034841A8BDC4A00650675 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 27A034831A8BDC4A00650675 /* PBXContainerItemProxy */; }; 27A034871A8BDC6900650675 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 27A0347A1A8BDB1200650675 /* lpadmin */; targetProxy = 27A034861A8BDC6900650675 /* PBXContainerItemProxy */; }; 720DD6CF1358FD790064AA82 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 720DD6CE1358FD790064AA82 /* PBXContainerItemProxy */; }; 720DD6D11358FDBE0064AA82 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 720DD6C11358FD5F0064AA82 /* snmp */; targetProxy = 720DD6D01358FDBE0064AA82 /* PBXContainerItemProxy */; }; 72220F6513330A6500FCA411 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 72220F6413330A6500FCA411 /* PBXContainerItemProxy */; }; 72220FBC13330C0500FCA411 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 72220FBB13330C0500FCA411 /* PBXContainerItemProxy */; }; 72220FBE13330C0B00FCA411 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220FAB13330B2200FCA411 /* libcupsmime */; targetProxy = 72220FBD13330C0B00FCA411 /* PBXContainerItemProxy */; }; 724379071333E49B009631B9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 724379061333E49B009631B9 /* PBXContainerItemProxy */; }; 724379111333E4EA009631B9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724378FC1333E43E009631B9 /* ipp */; targetProxy = 724379101333E4EA009631B9 /* PBXContainerItemProxy */; }; 724379261333E932009631B9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 724379251333E932009631B9 /* PBXContainerItemProxy */; }; 7243792B1333E962009631B9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724379171333E532009631B9 /* lpd */; targetProxy = 7243792A1333E962009631B9 /* PBXContainerItemProxy */; }; 7243793A1333FB95009631B9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 724379391333FB95009631B9 /* PBXContainerItemProxy */; }; 7243793F1333FD23009631B9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 7243792F1333FB85009631B9 /* socket */; targetProxy = 7243793E1333FD23009631B9 /* PBXContainerItemProxy */; }; 724379531333FECE009631B9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 724379461333FEA9009631B9 /* dnssd */; targetProxy = 724379521333FECE009631B9 /* PBXContainerItemProxy */; }; 724379551333FEFE009631B9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 724379541333FEFE009631B9 /* PBXContainerItemProxy */; }; 724379651333FF2E009631B9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 724379641333FF2E009631B9 /* PBXContainerItemProxy */; }; 724379C31333FF7D009631B9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 7243795A1333FF1D009631B9 /* usb */; targetProxy = 724379C21333FF7D009631B9 /* PBXContainerItemProxy */; }; 724FA5251CC0370C0092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA5261CC0370C0092477B /* PBXContainerItemProxy */; }; 724FA5381CC037370092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA5391CC037370092477B /* PBXContainerItemProxy */; }; 724FA54B1CC037500092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA54C1CC037500092477B /* PBXContainerItemProxy */; }; 724FA55E1CC037670092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA55F1CC037670092477B /* PBXContainerItemProxy */; }; 724FA5711CC037810092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA5721CC037810092477B /* PBXContainerItemProxy */; }; 724FA5841CC037980092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA5851CC037980092477B /* PBXContainerItemProxy */; }; 724FA5971CC037AA0092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA5981CC037AA0092477B /* PBXContainerItemProxy */; }; 724FA5AA1CC037C60092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA5AB1CC037C60092477B /* PBXContainerItemProxy */; }; 724FA5BD1CC037D90092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA5BE1CC037D90092477B /* PBXContainerItemProxy */; }; 724FA5D01CC037F00092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA5D11CC037F00092477B /* PBXContainerItemProxy */; }; 724FA5E41CC038040092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA5E51CC038040092477B /* PBXContainerItemProxy */; }; 724FA5F81CC038190092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA5F91CC038190092477B /* PBXContainerItemProxy */; }; 724FA60C1CC0382B0092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA60D1CC0382B0092477B /* PBXContainerItemProxy */; }; 724FA6201CC038410092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA6211CC038410092477B /* PBXContainerItemProxy */; }; 724FA6341CC038560092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA6351CC038560092477B /* PBXContainerItemProxy */; }; 724FA6481CC0386E0092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA6491CC0386E0092477B /* PBXContainerItemProxy */; }; 724FA65F1CC038A50092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA6601CC038A50092477B /* PBXContainerItemProxy */; }; 724FA6731CC038BD0092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA6741CC038BD0092477B /* PBXContainerItemProxy */; }; 724FA6861CC038D90092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA6871CC038D90092477B /* PBXContainerItemProxy */; }; 724FA69A1CC039200092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA69B1CC039200092477B /* PBXContainerItemProxy */; }; 724FA6AD1CC0393E0092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA6AE1CC0393E0092477B /* PBXContainerItemProxy */; }; 724FA6C01CC0395A0092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA6C11CC0395A0092477B /* PBXContainerItemProxy */; }; 724FA6D91CC039DE0092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA6DA1CC039DE0092477B /* PBXContainerItemProxy */; }; 724FA6EE1CC03A210092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 724FA6EF1CC03A210092477B /* PBXContainerItemProxy */; }; 724FA7421CC03ACC0092477B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 724FA7431CC03ACC0092477B /* PBXContainerItemProxy */; }; 7258EAEF13459ADA009286F1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 7258EAE1134594C4009286F1 /* rastertopwg */; targetProxy = 7258EAEE13459ADA009286F1 /* PBXContainerItemProxy */; }; 7258EAF113459B67009286F1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 7258EAF013459B67009286F1 /* PBXContainerItemProxy */; }; 7258EAF313459B67009286F1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72F75A601336F9A3004BB496 /* libcupsimage */; targetProxy = 7258EAF213459B67009286F1 /* PBXContainerItemProxy */; }; 726AD704135E8AA1002C930D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 726AD6F6135E88F0002C930D /* ippserver */; targetProxy = 726AD703135E8AA1002C930D /* PBXContainerItemProxy */; }; 726AD706135E8AC5002C930D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 726AD705135E8AC5002C930D /* PBXContainerItemProxy */; }; 72BEA8D419AFA89C0085F0F3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 726AD6F6135E88F0002C930D /* ippserver */; targetProxy = 72BEA8D319AFA89C0085F0F3 /* PBXContainerItemProxy */; }; 72BEA8D619AFA8A00085F0F3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72CF95E618A19134000FCAE4 /* ippfind */; targetProxy = 72BEA8D519AFA8A00085F0F3 /* PBXContainerItemProxy */; }; 72BEA8D819AFA8BB0085F0F3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 274FF6891333B1C400317ECB /* libcups_static */; targetProxy = 72BEA8D719AFA8BB0085F0F3 /* PBXContainerItemProxy */; }; 72CF95E718A19134000FCAE4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 72CF95E818A19134000FCAE4 /* PBXContainerItemProxy */; }; 72F75A661336FA30004BB496 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72220EAD1333047D00FCA411 /* libcups */; targetProxy = 72F75A651336FA30004BB496 /* PBXContainerItemProxy */; }; 72F75A711336FACD004BB496 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72F75A601336F9A3004BB496 /* libcupsimage */; targetProxy = 72F75A701336FACD004BB496 /* PBXContainerItemProxy */; }; 72F75A731336FACD004BB496 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72F75A511336F950004BB496 /* cupstestppd */; targetProxy = 72F75A721336FACD004BB496 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 270696581CADF3E200FFE5FB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = ""; PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/cups; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups; SDKROOT = iphoneos; SKIP_INSTALL = YES; STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; }; name = Debug; }; 270696591CADF3E200FFE5FB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = ""; PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/cups; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups; SDKROOT = iphoneos; SKIP_INSTALL = YES; STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static; SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; }; name = Release; }; 270CCDAD135E3C9E00007BE2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 270CCDAE135E3C9E00007BE2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 270D02221D707E0200EA9403 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 270D02231D707E0200EA9403 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271284EA1CC1261900E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271284EB1CC1261900E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271284F71CC1264B00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/sbin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271284F81CC1264B00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/sbin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285041CC1265D00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285051CC1265D00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285111CC1267A00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285121CC1267A00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 2712851E1CC1269700E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/sbin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 2712851F1CC1269700E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/sbin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 2712852B1CC126AA00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/sbin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 2712852C1CC126AA00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/sbin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285381CC1270B00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285391CC1270B00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285451CC1271E00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285461CC1271E00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285521CC1272D00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285531CC1272D00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 2712855F1CC1274300E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285601CC1274300E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 2712856C1CC1275200E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 2712856D1CC1275200E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285791CC1276400E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 2712857A1CC1276400E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 2712859E1CC12D1300E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = "/usr/libexec/cups/cgi-bin"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 2712859F1CC12D1300E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = "/usr/libexec/cups/cgi-bin"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285AD1CC12D3A00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = "/usr/libexec/cups/cgi-bin"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285AE1CC12D3A00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = "/usr/libexec/cups/cgi-bin"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285BB1CC12D4E00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = "/usr/libexec/cups/cgi-bin"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285BC1CC12D4E00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = "/usr/libexec/cups/cgi-bin"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285C91CC12D5E00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = "/usr/libexec/cups/cgi-bin"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285CA1CC12D5E00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = "/usr/libexec/cups/cgi-bin"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285D61CC12DBF00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285D71CC12DBF00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285E31CC12DDF00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285E41CC12DDF00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285F01CC12E2D00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285F11CC12E2D00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271285FE1CC12EEB00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271285FF1CC12EEB00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271286111CC12F0B00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271286121CC12F0B00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271286211CC12F1A00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271286221CC12F1A00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271286651CC1309000E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271286661CC1309000E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 2712867B1CC1310E00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 2712867C1CC1310E00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271286941CC13DC000E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271286951CC13DC000E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271286A51CC13DF100E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271286A61CC13DF100E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271286B61CC13DFF00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271286B71CC13DFF00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271286C71CC13E2100E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/monitor; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271286C81CC13E2100E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/monitor; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271286D71CC13E5B00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/monitor; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271286D81CC13E5B00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/monitor; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271286F11CC13F2000E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/notifier; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271286F21CC13F2000E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/notifier; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271287011CC13F3F00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/notifier; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271287021CC13F3F00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/notifier; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 271287161CC13FAB00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 271287171CC13FAB00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 2712872A1CC140BE00E517C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 2712872B1CC140BE00E517C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 273BF6C41333B5000022CAAB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 273BF6C51333B5000022CAAB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 273BF6DB1333B6270022CAAB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 273BF6DC1333B6270022CAAB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 274FF5D313332B1F00317ECB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/daemon; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 274FF5D413332B1F00317ECB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/daemon; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 274FF5E013332D3100317ECB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; }; name = Debug; }; 274FF5E113332D3100317ECB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; }; name = Release; }; 274FF5F0133330C800317ECB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/cups; PRODUCT_NAME = "$(TARGET_NAME)"; PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups; }; name = Debug; }; 274FF5F1133330C800317ECB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/cups; PRODUCT_NAME = "$(TARGET_NAME)"; PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups; }; name = Release; }; 274FF6301333333600317ECB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/daemon; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 274FF6311333333600317ECB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/daemon; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 274FF6451333358C00317ECB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/daemon; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 274FF6461333358C00317ECB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/daemon; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 274FF656133339C400317ECB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/daemon; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 274FF657133339C400317ECB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/daemon; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 274FF67F13333B2F00317ECB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 274FF68013333B2F00317ECB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 274FF6DE1333B1C400317ECB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/lib; PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/cups; PRODUCT_NAME = libcups_static; PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups; STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static; }; name = Debug; }; 274FF6DF1333B1C400317ECB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/lib; PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/cups; PRODUCT_NAME = libcups_static; PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups; STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static; }; name = Release; }; 276683631337A9B6000D33D0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/sbin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 276683641337A9B6000D33D0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/sbin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 276683771337AC79000D33D0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 276683781337AC79000D33D0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 276683841337AC8C000D33D0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 276683851337AC8C000D33D0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 276683911337AC97000D33D0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 276683921337AC97000D33D0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 2766839E1337ACA2000D33D0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 2766839F1337ACA2000D33D0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 276683AB1337ACAB000D33D0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 276683AC1337ACAB000D33D0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 276683F71337F78F000D33D0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 276683F81337F78F000D33D0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 2766840B1337FA1E000D33D0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/sbin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 2766840C1337FA1E000D33D0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/sbin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 2767FC4E19266A0D000F61D3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = testdest; }; name = Debug; }; 2767FC4F19266A0D000F61D3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = testdest; }; name = Release; }; 278C58D1136B640300836530 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 278C58D2136B640300836530 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 27A0347F1A8BDB1300650675 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; INSTALL_PATH = /usr/sbin; MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; }; name = Debug; }; 27A034801A8BDB1300650675 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; INSTALL_PATH = /usr/sbin; MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; }; name = Release; }; 720DD6C91358FD5F0064AA82 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/backend; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 720DD6CA1358FD5F0064AA82 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/backend; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 72220EB01333047D00FCA411 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; DYLIB_COMPATIBILITY_VERSION = 2.0.0; DYLIB_CURRENT_VERSION = 2.12.0; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/cups; PRODUCT_NAME = "$(TARGET_NAME)"; PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups; }; name = Debug; }; 72220EB11333047D00FCA411 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; DYLIB_COMPATIBILITY_VERSION = 2.0.0; DYLIB_CURRENT_VERSION = 2.12.0; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/cups; PRODUCT_NAME = "$(TARGET_NAME)"; PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups; }; name = Release; }; 72220F6213330A5A00FCA411 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/sbin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 72220F6313330A5A00FCA411 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/sbin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 72220FAE13330B2300FCA411 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 72220FAF13330B2300FCA411 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724379041333E43E009631B9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_MODE_FLAG = "u+rwX,go-rwX"; INSTALL_PATH = /usr/libexec/cups/backend; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724379051333E43E009631B9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_MODE_FLAG = "u+rwX,go-rwX"; INSTALL_PATH = /usr/libexec/cups/backend; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 7243791F1333E532009631B9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/backend; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724379201333E532009631B9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/backend; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724379371333FB85009631B9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/backend; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724379381333FB85009631B9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/backend; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 7243794E1333FEA9009631B9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/backend; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 7243794F1333FEA9009631B9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/backend; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724379621333FF1D009631B9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/backend; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724379631333FF1D009631B9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/backend; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA5331CC0370C0092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA5341CC0370C0092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA5461CC037370092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA5471CC037370092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA5591CC037500092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA55A1CC037500092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA56C1CC037670092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA56D1CC037670092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA57F1CC037810092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA5801CC037810092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA5921CC037980092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA5931CC037980092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA5A51CC037AA0092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA5A61CC037AA0092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA5B81CC037C60092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA5B91CC037C60092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA5CB1CC037D90092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA5CC1CC037D90092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA5DF1CC037F00092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA5E01CC037F00092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA5F31CC038040092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA5F41CC038040092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA6071CC038190092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA6081CC038190092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA61B1CC0382B0092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA61C1CC0382B0092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA62F1CC038410092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA6301CC038410092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA6431CC038560092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA6441CC038560092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA6571CC0386E0092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA6581CC0386E0092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA66E1CC038A50092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA66F1CC038A50092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA6811CC038BD0092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA6821CC038BD0092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA6951CC038D90092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA6961CC038D90092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA6A81CC039200092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA6A91CC039200092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA6BB1CC0393E0092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA6BC1CC0393E0092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA6CF1CC0395A0092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA6D01CC0395A0092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA6E81CC039DE0092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA6E91CC039DE0092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA6FD1CC03A210092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA6FE1CC03A210092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA70D1CC03A490092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; MACH_O_TYPE = staticlib; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA70E1CC03A490092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; MACH_O_TYPE = staticlib; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA71D1CC03A990092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; MACH_O_TYPE = staticlib; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA71E1CC03A990092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; MACH_O_TYPE = staticlib; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA73E1CC03AAF0092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; MACH_O_TYPE = staticlib; PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/cups; PRODUCT_NAME = "$(TARGET_NAME)"; PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups; }; name = Debug; }; 724FA73F1CC03AAF0092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; MACH_O_TYPE = staticlib; PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/cups; PRODUCT_NAME = "$(TARGET_NAME)"; PUBLIC_HEADERS_FOLDER_PATH = /usr/include/cups; }; name = Release; }; 724FA74D1CC03ACC0092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA74E1CC03ACC0092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 724FA7691CC03AF60092477B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; MACH_O_TYPE = staticlib; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 724FA76A1CC03AF60092477B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; MACH_O_TYPE = staticlib; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 7258EAEA134594C4009286F1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 7258EAEB134594C4009286F1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/libexec/cups/filter; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 726AD6FF135E88F1002C930D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 726AD700135E88F1002C930D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 72BF963C1333042100B1EAD7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPRESSION = lossless; CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = NO; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = DEBUG; GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; GCC_TREAT_WARNINGS_AS_ERRORS = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_SHADOW = YES; GCC_WARN_SIGN_COMPARE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_PARAMETER = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( ., .., ); ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ( "-D_CUPS_SOURCE", "-Wno-shorten-64-to-32", ); }; name = Debug; }; 72BF963D1333042100B1EAD7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPRESSION = "respect-asset-catalog"; CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = NO; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; GCC_TREAT_WARNINGS_AS_ERRORS = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_SHADOW = YES; GCC_WARN_SIGN_COMPARE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_PARAMETER = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( ., .., ); OTHER_CFLAGS = ( "-D_CUPS_SOURCE", "-Wno-shorten-64-to-32", ); }; name = Release; }; 72CF95EF18A19134000FCAE4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "ipptool copy"; }; name = Debug; }; 72CF95F018A19134000FCAE4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "ipptool copy"; }; name = Release; }; 72F75A591336F951004BB496 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 72F75A5A1336F951004BB496 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; INSTALL_PATH = /usr/bin; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 72F75A631336F9A3004BB496 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 72F75A641336F9A3004BB496 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/lib; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 270696571CADF3E200FFE5FB /* Build configuration list for PBXNativeTarget "libcups_ios" */ = { isa = XCConfigurationList; buildConfigurations = ( 270696581CADF3E200FFE5FB /* Debug */, 270696591CADF3E200FFE5FB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 270CCDAF135E3C9E00007BE2 /* Build configuration list for PBXNativeTarget "testmime" */ = { isa = XCConfigurationList; buildConfigurations = ( 270CCDAD135E3C9E00007BE2 /* Debug */, 270CCDAE135E3C9E00007BE2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 270D02211D707E0200EA9403 /* Build configuration list for PBXNativeTarget "testcreds" */ = { isa = XCConfigurationList; buildConfigurations = ( 270D02221D707E0200EA9403 /* Debug */, 270D02231D707E0200EA9403 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271284E91CC1261900E517C7 /* Build configuration list for PBXNativeTarget "cancel" */ = { isa = XCConfigurationList; buildConfigurations = ( 271284EA1CC1261900E517C7 /* Debug */, 271284EB1CC1261900E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271284F61CC1264B00E517C7 /* Build configuration list for PBXNativeTarget "cupsaccept" */ = { isa = XCConfigurationList; buildConfigurations = ( 271284F71CC1264B00E517C7 /* Debug */, 271284F81CC1264B00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285031CC1265D00E517C7 /* Build configuration list for PBXNativeTarget "cupstestdsc" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285041CC1265D00E517C7 /* Debug */, 271285051CC1265D00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285101CC1267A00E517C7 /* Build configuration list for PBXNativeTarget "lp" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285111CC1267A00E517C7 /* Debug */, 271285121CC1267A00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2712851D1CC1269700E517C7 /* Build configuration list for PBXNativeTarget "lpc" */ = { isa = XCConfigurationList; buildConfigurations = ( 2712851E1CC1269700E517C7 /* Debug */, 2712851F1CC1269700E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2712852A1CC126AA00E517C7 /* Build configuration list for PBXNativeTarget "lpinfo" */ = { isa = XCConfigurationList; buildConfigurations = ( 2712852B1CC126AA00E517C7 /* Debug */, 2712852C1CC126AA00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285371CC1270B00E517C7 /* Build configuration list for PBXNativeTarget "lpmove" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285381CC1270B00E517C7 /* Debug */, 271285391CC1270B00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285441CC1271E00E517C7 /* Build configuration list for PBXNativeTarget "lpoptions" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285451CC1271E00E517C7 /* Debug */, 271285461CC1271E00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285511CC1272D00E517C7 /* Build configuration list for PBXNativeTarget "lpq" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285521CC1272D00E517C7 /* Debug */, 271285531CC1272D00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2712855E1CC1274300E517C7 /* Build configuration list for PBXNativeTarget "lpr" */ = { isa = XCConfigurationList; buildConfigurations = ( 2712855F1CC1274300E517C7 /* Debug */, 271285601CC1274300E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2712856B1CC1275200E517C7 /* Build configuration list for PBXNativeTarget "lprm" */ = { isa = XCConfigurationList; buildConfigurations = ( 2712856C1CC1275200E517C7 /* Debug */, 2712856D1CC1275200E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285781CC1276400E517C7 /* Build configuration list for PBXNativeTarget "lpstat" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285791CC1276400E517C7 /* Debug */, 2712857A1CC1276400E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2712859D1CC12D1300E517C7 /* Build configuration list for PBXNativeTarget "admin.cgi" */ = { isa = XCConfigurationList; buildConfigurations = ( 2712859E1CC12D1300E517C7 /* Debug */, 2712859F1CC12D1300E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285AC1CC12D3A00E517C7 /* Build configuration list for PBXNativeTarget "classes.cgi" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285AD1CC12D3A00E517C7 /* Debug */, 271285AE1CC12D3A00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285BA1CC12D4E00E517C7 /* Build configuration list for PBXNativeTarget "jobs.cgi" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285BB1CC12D4E00E517C7 /* Debug */, 271285BC1CC12D4E00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285C81CC12D5E00E517C7 /* Build configuration list for PBXNativeTarget "printers.cgi" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285C91CC12D5E00E517C7 /* Debug */, 271285CA1CC12D5E00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285D51CC12DBF00E517C7 /* Build configuration list for PBXNativeTarget "commandtops" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285D61CC12DBF00E517C7 /* Debug */, 271285D71CC12DBF00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285E21CC12DDF00E517C7 /* Build configuration list for PBXNativeTarget "gziptoany" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285E31CC12DDF00E517C7 /* Debug */, 271285E41CC12DDF00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285EF1CC12E2D00E517C7 /* Build configuration list for PBXNativeTarget "pstops" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285F01CC12E2D00E517C7 /* Debug */, 271285F11CC12E2D00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271285FD1CC12EEB00E517C7 /* Build configuration list for PBXNativeTarget "rastertoepson" */ = { isa = XCConfigurationList; buildConfigurations = ( 271285FE1CC12EEB00E517C7 /* Debug */, 271285FF1CC12EEB00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271286101CC12F0B00E517C7 /* Build configuration list for PBXNativeTarget "rastertohp" */ = { isa = XCConfigurationList; buildConfigurations = ( 271286111CC12F0B00E517C7 /* Debug */, 271286121CC12F0B00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271286201CC12F1A00E517C7 /* Build configuration list for PBXNativeTarget "rastertolabel" */ = { isa = XCConfigurationList; buildConfigurations = ( 271286211CC12F1A00E517C7 /* Debug */, 271286221CC12F1A00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271286641CC1309000E517C7 /* Build configuration list for PBXNativeTarget "tlscheck" */ = { isa = XCConfigurationList; buildConfigurations = ( 271286651CC1309000E517C7 /* Debug */, 271286661CC1309000E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2712867A1CC1310E00E517C7 /* Build configuration list for PBXNativeTarget "rasterbench" */ = { isa = XCConfigurationList; buildConfigurations = ( 2712867B1CC1310E00E517C7 /* Debug */, 2712867C1CC1310E00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271286931CC13DC000E517C7 /* Build configuration list for PBXNativeTarget "checkpo" */ = { isa = XCConfigurationList; buildConfigurations = ( 271286941CC13DC000E517C7 /* Debug */, 271286951CC13DC000E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271286A41CC13DF100E517C7 /* Build configuration list for PBXNativeTarget "po2strings" */ = { isa = XCConfigurationList; buildConfigurations = ( 271286A51CC13DF100E517C7 /* Debug */, 271286A61CC13DF100E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271286B51CC13DFF00E517C7 /* Build configuration list for PBXNativeTarget "strings2po" */ = { isa = XCConfigurationList; buildConfigurations = ( 271286B61CC13DFF00E517C7 /* Debug */, 271286B71CC13DFF00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271286C61CC13E2100E517C7 /* Build configuration list for PBXNativeTarget "bcp" */ = { isa = XCConfigurationList; buildConfigurations = ( 271286C71CC13E2100E517C7 /* Debug */, 271286C81CC13E2100E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271286D61CC13E5B00E517C7 /* Build configuration list for PBXNativeTarget "tbcp" */ = { isa = XCConfigurationList; buildConfigurations = ( 271286D71CC13E5B00E517C7 /* Debug */, 271286D81CC13E5B00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271286F01CC13F2000E517C7 /* Build configuration list for PBXNativeTarget "mailto" */ = { isa = XCConfigurationList; buildConfigurations = ( 271286F11CC13F2000E517C7 /* Debug */, 271286F21CC13F2000E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271287001CC13F3F00E517C7 /* Build configuration list for PBXNativeTarget "rss" */ = { isa = XCConfigurationList; buildConfigurations = ( 271287011CC13F3F00E517C7 /* Debug */, 271287021CC13F3F00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271287151CC13FAB00E517C7 /* Build configuration list for PBXNativeTarget "mantohtml" */ = { isa = XCConfigurationList; buildConfigurations = ( 271287161CC13FAB00E517C7 /* Debug */, 271287171CC13FAB00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 271287291CC140BE00E517C7 /* Build configuration list for PBXNativeTarget "genstrings" */ = { isa = XCConfigurationList; buildConfigurations = ( 2712872A1CC140BE00E517C7 /* Debug */, 2712872B1CC140BE00E517C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 273BF6C31333B5000022CAAB /* Build configuration list for PBXNativeTarget "testcups" */ = { isa = XCConfigurationList; buildConfigurations = ( 273BF6C41333B5000022CAAB /* Debug */, 273BF6C51333B5000022CAAB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 273BF6DA1333B6270022CAAB /* Build configuration list for PBXAggregateTarget "Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( 273BF6DB1333B6270022CAAB /* Debug */, 273BF6DC1333B6270022CAAB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 274FF5D213332B1F00317ECB /* Build configuration list for PBXNativeTarget "cups-driverd" */ = { isa = XCConfigurationList; buildConfigurations = ( 274FF5D313332B1F00317ECB /* Debug */, 274FF5D413332B1F00317ECB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 274FF5DF13332D3100317ECB /* Build configuration list for PBXAggregateTarget "All" */ = { isa = XCConfigurationList; buildConfigurations = ( 274FF5E013332D3100317ECB /* Debug */, 274FF5E113332D3100317ECB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 274FF5EF133330C800317ECB /* Build configuration list for PBXNativeTarget "libcupsppdc" */ = { isa = XCConfigurationList; buildConfigurations = ( 274FF5F0133330C800317ECB /* Debug */, 274FF5F1133330C800317ECB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 274FF62F1333333600317ECB /* Build configuration list for PBXNativeTarget "cups-deviced" */ = { isa = XCConfigurationList; buildConfigurations = ( 274FF6301333333600317ECB /* Debug */, 274FF6311333333600317ECB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 274FF6441333358C00317ECB /* Build configuration list for PBXNativeTarget "cups-exec" */ = { isa = XCConfigurationList; buildConfigurations = ( 274FF6451333358C00317ECB /* Debug */, 274FF6461333358C00317ECB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 274FF655133339C400317ECB /* Build configuration list for PBXNativeTarget "cups-lpd" */ = { isa = XCConfigurationList; buildConfigurations = ( 274FF656133339C400317ECB /* Debug */, 274FF657133339C400317ECB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 274FF67E13333B2F00317ECB /* Build configuration list for PBXNativeTarget "cupsfilter" */ = { isa = XCConfigurationList; buildConfigurations = ( 274FF67F13333B2F00317ECB /* Debug */, 274FF68013333B2F00317ECB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 274FF6DD1333B1C400317ECB /* Build configuration list for PBXNativeTarget "libcups_static" */ = { isa = XCConfigurationList; buildConfigurations = ( 274FF6DE1333B1C400317ECB /* Debug */, 274FF6DF1333B1C400317ECB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 276683621337A9B6000D33D0 /* Build configuration list for PBXNativeTarget "cupsctl" */ = { isa = XCConfigurationList; buildConfigurations = ( 276683631337A9B6000D33D0 /* Debug */, 276683641337A9B6000D33D0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 276683761337AC79000D33D0 /* Build configuration list for PBXNativeTarget "ppdc" */ = { isa = XCConfigurationList; buildConfigurations = ( 276683771337AC79000D33D0 /* Debug */, 276683781337AC79000D33D0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 276683831337AC8C000D33D0 /* Build configuration list for PBXNativeTarget "ppdhtml" */ = { isa = XCConfigurationList; buildConfigurations = ( 276683841337AC8C000D33D0 /* Debug */, 276683851337AC8C000D33D0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 276683901337AC97000D33D0 /* Build configuration list for PBXNativeTarget "ppdi" */ = { isa = XCConfigurationList; buildConfigurations = ( 276683911337AC97000D33D0 /* Debug */, 276683921337AC97000D33D0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2766839D1337ACA2000D33D0 /* Build configuration list for PBXNativeTarget "ppdmerge" */ = { isa = XCConfigurationList; buildConfigurations = ( 2766839E1337ACA2000D33D0 /* Debug */, 2766839F1337ACA2000D33D0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 276683AA1337ACAB000D33D0 /* Build configuration list for PBXNativeTarget "ppdpo" */ = { isa = XCConfigurationList; buildConfigurations = ( 276683AB1337ACAB000D33D0 /* Debug */, 276683AC1337ACAB000D33D0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 276683F61337F78F000D33D0 /* Build configuration list for PBXNativeTarget "ipptool" */ = { isa = XCConfigurationList; buildConfigurations = ( 276683F71337F78F000D33D0 /* Debug */, 276683F81337F78F000D33D0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2766840A1337FA1E000D33D0 /* Build configuration list for PBXNativeTarget "cupsaddsmb" */ = { isa = XCConfigurationList; buildConfigurations = ( 2766840B1337FA1E000D33D0 /* Debug */, 2766840C1337FA1E000D33D0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2767FC4D19266A0D000F61D3 /* Build configuration list for PBXNativeTarget "testdest" */ = { isa = XCConfigurationList; buildConfigurations = ( 2767FC4E19266A0D000F61D3 /* Debug */, 2767FC4F19266A0D000F61D3 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 278C58D3136B640300836530 /* Build configuration list for PBXNativeTarget "testhttp" */ = { isa = XCConfigurationList; buildConfigurations = ( 278C58D1136B640300836530 /* Debug */, 278C58D2136B640300836530 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 27A034811A8BDB1300650675 /* Build configuration list for PBXNativeTarget "lpadmin" */ = { isa = XCConfigurationList; buildConfigurations = ( 27A0347F1A8BDB1300650675 /* Debug */, 27A034801A8BDB1300650675 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 720DD6CB1358FD600064AA82 /* Build configuration list for PBXNativeTarget "snmp" */ = { isa = XCConfigurationList; buildConfigurations = ( 720DD6C91358FD5F0064AA82 /* Debug */, 720DD6CA1358FD5F0064AA82 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 72220EB21333047D00FCA411 /* Build configuration list for PBXNativeTarget "libcups" */ = { isa = XCConfigurationList; buildConfigurations = ( 72220EB01333047D00FCA411 /* Debug */, 72220EB11333047D00FCA411 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 72220F6113330A5A00FCA411 /* Build configuration list for PBXNativeTarget "cupsd" */ = { isa = XCConfigurationList; buildConfigurations = ( 72220F6213330A5A00FCA411 /* Debug */, 72220F6313330A5A00FCA411 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 72220FAD13330B2300FCA411 /* Build configuration list for PBXNativeTarget "libcupsmime" */ = { isa = XCConfigurationList; buildConfigurations = ( 72220FAE13330B2300FCA411 /* Debug */, 72220FAF13330B2300FCA411 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724379031333E43E009631B9 /* Build configuration list for PBXNativeTarget "ipp" */ = { isa = XCConfigurationList; buildConfigurations = ( 724379041333E43E009631B9 /* Debug */, 724379051333E43E009631B9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 7243791E1333E532009631B9 /* Build configuration list for PBXNativeTarget "lpd" */ = { isa = XCConfigurationList; buildConfigurations = ( 7243791F1333E532009631B9 /* Debug */, 724379201333E532009631B9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724379361333FB85009631B9 /* Build configuration list for PBXNativeTarget "socket" */ = { isa = XCConfigurationList; buildConfigurations = ( 724379371333FB85009631B9 /* Debug */, 724379381333FB85009631B9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 7243794D1333FEA9009631B9 /* Build configuration list for PBXNativeTarget "dnssd" */ = { isa = XCConfigurationList; buildConfigurations = ( 7243794E1333FEA9009631B9 /* Debug */, 7243794F1333FEA9009631B9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724379611333FF1D009631B9 /* Build configuration list for PBXNativeTarget "usb" */ = { isa = XCConfigurationList; buildConfigurations = ( 724379621333FF1D009631B9 /* Debug */, 724379631333FF1D009631B9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA5321CC0370C0092477B /* Build configuration list for PBXNativeTarget "testadmin" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA5331CC0370C0092477B /* Debug */, 724FA5341CC0370C0092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA5451CC037370092477B /* Build configuration list for PBXNativeTarget "testarray" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA5461CC037370092477B /* Debug */, 724FA5471CC037370092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA5581CC037500092477B /* Build configuration list for PBXNativeTarget "testcache" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA5591CC037500092477B /* Debug */, 724FA55A1CC037500092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA56B1CC037670092477B /* Build configuration list for PBXNativeTarget "testconflicts" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA56C1CC037670092477B /* Debug */, 724FA56D1CC037670092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA57E1CC037810092477B /* Build configuration list for PBXNativeTarget "testfile" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA57F1CC037810092477B /* Debug */, 724FA5801CC037810092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA5911CC037980092477B /* Build configuration list for PBXNativeTarget "testi18n" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA5921CC037980092477B /* Debug */, 724FA5931CC037980092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA5A41CC037AA0092477B /* Build configuration list for PBXNativeTarget "testipp" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA5A51CC037AA0092477B /* Debug */, 724FA5A61CC037AA0092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA5B71CC037C60092477B /* Build configuration list for PBXNativeTarget "testlang" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA5B81CC037C60092477B /* Debug */, 724FA5B91CC037C60092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA5CA1CC037D90092477B /* Build configuration list for PBXNativeTarget "testlpd" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA5CB1CC037D90092477B /* Debug */, 724FA5CC1CC037D90092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA5DE1CC037F00092477B /* Build configuration list for PBXNativeTarget "testoptions" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA5DF1CC037F00092477B /* Debug */, 724FA5E01CC037F00092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA5F21CC038040092477B /* Build configuration list for PBXNativeTarget "testppd" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA5F31CC038040092477B /* Debug */, 724FA5F41CC038040092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA6061CC038190092477B /* Build configuration list for PBXNativeTarget "testpwg" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA6071CC038190092477B /* Debug */, 724FA6081CC038190092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA61A1CC0382B0092477B /* Build configuration list for PBXNativeTarget "testraster" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA61B1CC0382B0092477B /* Debug */, 724FA61C1CC0382B0092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA62E1CC038410092477B /* Build configuration list for PBXNativeTarget "testsnmp" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA62F1CC038410092477B /* Debug */, 724FA6301CC038410092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA6421CC038560092477B /* Build configuration list for PBXNativeTarget "testspeed" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA6431CC038560092477B /* Debug */, 724FA6441CC038560092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA6561CC0386E0092477B /* Build configuration list for PBXNativeTarget "testsub" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA6571CC0386E0092477B /* Debug */, 724FA6581CC0386E0092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA66D1CC038A50092477B /* Build configuration list for PBXNativeTarget "test1284" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA66E1CC038A50092477B /* Debug */, 724FA66F1CC038A50092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA6801CC038BD0092477B /* Build configuration list for PBXNativeTarget "testbackend" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA6811CC038BD0092477B /* Debug */, 724FA6821CC038BD0092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA6941CC038D90092477B /* Build configuration list for PBXNativeTarget "testsupplies" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA6951CC038D90092477B /* Debug */, 724FA6961CC038D90092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA6A71CC039200092477B /* Build configuration list for PBXNativeTarget "testcgi" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA6A81CC039200092477B /* Debug */, 724FA6A91CC039200092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA6BA1CC0393E0092477B /* Build configuration list for PBXNativeTarget "testhi" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA6BB1CC0393E0092477B /* Debug */, 724FA6BC1CC0393E0092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA6CE1CC0395A0092477B /* Build configuration list for PBXNativeTarget "testtemplate" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA6CF1CC0395A0092477B /* Debug */, 724FA6D01CC0395A0092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA6E71CC039DE0092477B /* Build configuration list for PBXNativeTarget "testnotify" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA6E81CC039DE0092477B /* Debug */, 724FA6E91CC039DE0092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA6FC1CC03A210092477B /* Build configuration list for PBXNativeTarget "testcatalog" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA6FD1CC03A210092477B /* Debug */, 724FA6FE1CC03A210092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA70C1CC03A490092477B /* Build configuration list for PBXNativeTarget "libcupsimage_static" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA70D1CC03A490092477B /* Debug */, 724FA70E1CC03A490092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA71C1CC03A990092477B /* Build configuration list for PBXNativeTarget "libcupsmime_static" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA71D1CC03A990092477B /* Debug */, 724FA71E1CC03A990092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA73D1CC03AAF0092477B /* Build configuration list for PBXNativeTarget "libcupsppdc_static" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA73E1CC03AAF0092477B /* Debug */, 724FA73F1CC03AAF0092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA74C1CC03ACC0092477B /* Build configuration list for PBXNativeTarget "libcupscgi" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA74D1CC03ACC0092477B /* Debug */, 724FA74E1CC03ACC0092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 724FA7681CC03AF60092477B /* Build configuration list for PBXNativeTarget "libcupscgi_static" */ = { isa = XCConfigurationList; buildConfigurations = ( 724FA7691CC03AF60092477B /* Debug */, 724FA76A1CC03AF60092477B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 7258EAE9134594C4009286F1 /* Build configuration list for PBXNativeTarget "rastertopwg" */ = { isa = XCConfigurationList; buildConfigurations = ( 7258EAEA134594C4009286F1 /* Debug */, 7258EAEB134594C4009286F1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 726AD6FE135E88F1002C930D /* Build configuration list for PBXNativeTarget "ippserver" */ = { isa = XCConfigurationList; buildConfigurations = ( 726AD6FF135E88F1002C930D /* Debug */, 726AD700135E88F1002C930D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 72BF963A1333042100B1EAD7 /* Build configuration list for PBXProject "CUPS" */ = { isa = XCConfigurationList; buildConfigurations = ( 72BF963C1333042100B1EAD7 /* Debug */, 72BF963D1333042100B1EAD7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 72CF95EE18A19134000FCAE4 /* Build configuration list for PBXNativeTarget "ippfind" */ = { isa = XCConfigurationList; buildConfigurations = ( 72CF95EF18A19134000FCAE4 /* Debug */, 72CF95F018A19134000FCAE4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 72F75A581336F951004BB496 /* Build configuration list for PBXNativeTarget "cupstestppd" */ = { isa = XCConfigurationList; buildConfigurations = ( 72F75A591336F951004BB496 /* Debug */, 72F75A5A1336F951004BB496 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 72F75A621336F9A3004BB496 /* Build configuration list for PBXNativeTarget "libcupsimage" */ = { isa = XCConfigurationList; buildConfigurations = ( 72F75A631336F9A3004BB496 /* Debug */, 72F75A641336F9A3004BB496 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 72BF96371333042100B1EAD7 /* Project object */; } cups-2.2.7/vcnet/config.h000664 000765 000024 00000030322 13255074424 015710 0ustar00msweetstaff000000 000000 /* * Configuration file for CUPS on Windows. * * Copyright © 2007-2018 by Apple Inc. * Copyright © 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #ifndef _CUPS_CONFIG_H_ #define _CUPS_CONFIG_H_ /* * Include necessary headers... */ #include #include #include #include #include #include /* * Microsoft renames the POSIX functions to _name, and introduces * a broken compatibility layer using the original names. As a result, * random crashes can occur when, for example, strdup() allocates memory * from a different heap than used by malloc() and free(). * * To avoid moronic problems like this, we #define the POSIX function * names to the corresponding non-standard Microsoft names. */ #define access _access #define close _close #define fileno _fileno #define lseek _lseek #define mkdir(d,p) _mkdir(d) #define open _open #define read _read #define rmdir _rmdir #define snprintf _snprintf #define strdup _strdup #define unlink _unlink #define vsnprintf _vsnprintf #define write _write /* * Map the POSIX strcasecmp() and strncasecmp() functions to the Win32 stricmp() * and strnicmp() functions... */ #define strcasecmp _stricmp #define strncasecmp _strnicmp /* * Map the POSIX sleep() and usleep() functions to the Win32 Sleep() function... */ typedef unsigned long useconds_t; #define sleep(X) Sleep(1000 * (X)) #define usleep(X) Sleep((X)/1000) /* * Map various parameters to Posix style system calls */ # define F_OK 00 # define W_OK 02 # define R_OK 04 # define O_RDONLY _O_RDONLY # define O_WRONLY _O_WRONLY # define O_CREAT _O_CREAT # define O_TRUNC _O_TRUNC /* * Compiler stuff... */ #undef const #undef __CHAR_UNSIGNED__ /* * Version of software... */ #define CUPS_SVERSION "CUPS v2.2.7" #define CUPS_MINIMAL "CUPS/2.2.7" /* * Default user and groups... */ #define CUPS_DEFAULT_USER "" #define CUPS_DEFAULT_GROUP "" #define CUPS_DEFAULT_SYSTEM_GROUPS "" #define CUPS_DEFAULT_PRINTOPERATOR_AUTH "" #define CUPS_DEFAULT_SYSTEM_AUTHKEY "" /* * Default file permissions... */ #define CUPS_DEFAULT_CONFIG_FILE_PERM 0644 #define CUPS_DEFAULT_LOG_FILE_PERM 0644 /* * Default logging settings... */ #define CUPS_DEFAULT_LOG_LEVEL "warn" #define CUPS_DEFAULT_ACCESS_LOG_LEVEL "none" /* * Default fatal error settings... */ #define CUPS_DEFAULT_FATAL_ERRORS "config" /* * Default browsing settings... */ #define CUPS_DEFAULT_BROWSING 1 #define CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS "dnssd" #define CUPS_DEFAULT_DEFAULT_SHARED 1 /* * Default IPP port... */ #define CUPS_DEFAULT_IPP_PORT 631 /* * Default printcap file... */ #define CUPS_DEFAULT_PRINTCAP "" /* * Default Samba and LPD config files... */ #define CUPS_DEFAULT_SMB_CONFIG_FILE "" #define CUPS_DEFAULT_LPD_CONFIG_FILE "" /* * Default MaxCopies value... */ #define CUPS_DEFAULT_MAX_COPIES 9999 /* * Do we have domain socket support, and if so what is the default one? */ #undef CUPS_DEFAULT_DOMAINSOCKET /* * Default WebInterface value... */ #define CUPS_DEFAULT_WEBIF 0 /* * Where are files stored? * * Note: These are defaults, which can be overridden by environment * variables at run-time... */ #define CUPS_BINDIR "C:/CUPS/bin" #define CUPS_CACHEDIR "C:/CUPS/cache" #define CUPS_DATADIR "C:/CUPS/share" #define CUPS_DOCROOT "C:/CUPS/share/doc" #define CUPS_FONTPATH "C:/CUPS/share/fonts" #define CUPS_LOCALEDIR "C:/CUPS/locale" #define CUPS_LOGDIR "C:/CUPS/logs" #define CUPS_REQUESTS "C:/CUPS/spool" #define CUPS_SBINDIR "C:/CUPS/sbin" #define CUPS_SERVERBIN "C:/CUPS/lib" #define CUPS_SERVERROOT "C:/CUPS/etc" #define CUPS_STATEDIR "C:/CUPS/run" /* * Do we have posix_spawn? */ /* #undef HAVE_POSIX_SPAWN */ /* * Do we have ZLIB? */ #define HAVE_LIBZ 1 #define HAVE_INFLATECOPY 1 /* * Do we have PAM stuff? */ #define HAVE_LIBPAM 0 /* #undef HAVE_PAM_PAM_APPL_H */ /* #undef HAVE_PAM_SET_ITEM */ /* #undef HAVE_PAM_SETCRED */ /* * Do we have ? */ /* #undef HAVE_SHADOW_H */ /* * Do we have ? */ /* #undef HAVE_CRYPT_H */ /* * Use ? */ /* #undef HAVE_STDINT_H */ /* * Use , , and/or ? */ #define HAVE_STRING_H 1 /* #undef HAVE_STRINGS_H */ /* #undef HAVE_BSTRING_H */ /* * Do we have the long long type? */ /* #undef HAVE_LONG_LONG */ #ifdef HAVE_LONG_LONG # define CUPS_LLFMT "%lld" # define CUPS_LLCAST (long long) #else # define CUPS_LLFMT "%ld" # define CUPS_LLCAST (long) #endif /* HAVE_LONG_LONG */ /* * Do we have the strtoll() function? */ /* #undef HAVE_STRTOLL */ #ifndef HAVE_STRTOLL # define strtoll(nptr,endptr,base) strtol((nptr), (endptr), (base)) #endif /* !HAVE_STRTOLL */ /* * Do we have the strXXX() functions? */ #define HAVE_STRDUP 1 /* #undef HAVE_STRLCAT */ /* #undef HAVE_STRLCPY */ /* * Do we have the geteuid() function? */ /* #undef HAVE_GETEUID */ /* * Do we have the setpgid() function? */ /* #undef HAVE_SETPGID */ /* * Do we have the vsyslog() function? */ /* #undef HAVE_VSYSLOG */ /* * Do we have the systemd journal functions? */ /* #undef HAVE_SYSTEMD_SD_JOURNAL_H */ /* * Do we have the (v)snprintf() functions? */ #define HAVE_SNPRINTF 1 #define HAVE_VSNPRINTF 1 /* * What signal functions to use? */ /* #undef HAVE_SIGSET */ /* #undef HAVE_SIGACTION */ /* * What wait functions to use? */ /* #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 POSIX ACL functions? */ /* #undef HAVE_ACL_INIT */ /* * Do we have the langinfo.h header file? */ /* #undef HAVE_LANGINFO_H */ /* * Which encryption libraries do we have? */ /* #undef HAVE_CDSASSL */ /* #undef HAVE_GNUTLS */ #define HAVE_SSPISSL 1 #define HAVE_SSL 1 /* * Do we have the gnutls_transport_set_pull_timeout_function function? */ /* #undef HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION */ /* * Do we have the gnutls_priority_set_direct function? */ /* #undef HAVE_GNUTLS_PRIORITY_SET_DIRECT */ /* * What Security framework headers do we have? */ /* #undef HAVE_AUTHORIZATION_H */ /* #undef HAVE_SECBASEPRIV_H */ /* #undef HAVE_SECCERTIFICATE_H */ /* #undef HAVE_SECIDENTITYSEARCHPRIV_H */ /* #undef HAVE_SECITEM_H */ /* #undef HAVE_SECITEMPRIV_H */ /* #undef HAVE_SECPOLICY_H */ /* #undef HAVE_SECPOLICYPRIV_H */ /* #undef HAVE_SECURETRANSPORTPRIV_H */ /* * Do we have the cssmErrorString function? */ /* #undef HAVE_CSSMERRORSTRING */ /* * Do we have the SecGenerateSelfSignedCertificate function? */ /* #undef HAVE_SECGENERATESELFSIGNEDCERTIFICATE */ /* * Do we have the SecKeychainOpen function? */ /* #undef HAVE_SECKEYCHAINOPEN */ /* * Do we have (a working) SSLSetEnabledCiphers function? */ #define HAVE_SSLSETENABLEDCIPHERS 1 /* * Do we have libpaper? */ /* #undef HAVE_LIBPAPER */ /* * Do we have mDNSResponder for DNS Service Discovery (aka Bonjour)? */ #define HAVE_DNSSD 1 /* * Do we have Avahi for DNS Service Discovery (aka Bonjour)? */ #undef HAVE_AVAHI /* * Do we have ? */ #undef HAVE_SYS_IOCTL_H /* * Does the "stat" structure contain the "st_gen" member? */ /* #undef HAVE_ST_GEN */ /* * Does the "tm" structure contain the "tm_gmtoff" member? */ /* #undef HAVE_TM_GMTOFF */ /* * Do we have rresvport_af()? */ /* #undef HAVE_RRESVPORT_AF */ /* * Do we have getaddrinfo()? */ #define HAVE_GETADDRINFO 1 /* * Do we have getnameinfo()? */ #define HAVE_GETNAMEINFO 1 /* * Do we have getifaddrs()? */ /* #undef HAVE_GETIFADDRS */ /* * Do we have hstrerror()? */ /* #undef HAVE_HSTRERROR */ /* * Do we have res_init()? */ /* #undef HAVE_RES_INIT */ /* * Do we have */ /* #undef HAVE_RESOLV_H */ /* * Do we have the header file? */ /* #undef HAVE_SYS_SOCKIO_H */ /* * Does the sockaddr structure contain an sa_len parameter? */ /* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */ /* * Do we have pthread support? */ /* #undef HAVE_PTHREAD_H */ /* * Do we have on-demand support (launchd/systemd/upstart)? */ /* #undef HAVE_ONDEMAND */ /* * Do we have launchd support? */ /* #undef HAVE_LAUNCH_H */ /* #undef HAVE_LAUNCHD */ /* * Do we have systemd support? */ /* #undef HAVE_SYSTEMD */ /* * Do we have upstart support? */ /* #undef HAVE_UPSTART */ /* * Various scripting languages... */ /* #undef HAVE_JAVA */ #define CUPS_JAVA "" /* #undef HAVE_PERL */ #define CUPS_PERL "" /* #undef HAVE_PHP */ #define CUPS_PHP "" /* #undef HAVE_PYTHON */ #define CUPS_PYTHON "" /* * Do we have CoreFoundation public and private headers? */ /* #undef HAVE_COREFOUNDATION_H */ /* #undef HAVE_CFPRIV_H */ /* #undef HAVE_CFBUNDLEPRIV_H */ /* * Do we have ApplicationServices public headers? */ /* #undef HAVE_APPLICATIONSERVICES_H */ /* * Do we have the SCDynamicStoreCopyComputerName function? */ /* #undef HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME */ /* * Do we have the getgrouplist() function? */ #undef HAVE_GETGROUPLIST /* * Do we have macOS 10.4's mbr_XXX functions? */ /* #undef HAVE_MEMBERSHIP_H */ /* #undef HAVE_MEMBERSHIPPRIV_H */ /* #undef HAVE_MBR_UID_TO_UUID */ /* * Do we have Darwin's notify_post header and function? */ /* #undef HAVE_NOTIFY_H */ /* #undef HAVE_NOTIFY_POST */ /* * Do we have DBUS? */ /* #undef HAVE_DBUS */ /* #undef HAVE_DBUS_MESSAGE_ITER_INIT_APPEND */ /* #undef HAVE_DBUS_THREADS_INIT */ /* * Do we have the GSSAPI support library (for Kerberos support)? */ /* #undef HAVE_GSS_ACQUIRE_CRED_EX_F */ /* #undef HAVE_GSS_C_NT_HOSTBASED_SERVICE */ /* #undef HAVE_GSS_GSSAPI_H */ /* #undef HAVE_GSS_GSSAPI_SPI_H */ /* #undef HAVE_GSSAPI */ /* #undef HAVE_GSSAPI_GSSAPI_H */ /* #undef HAVE_GSSAPI_H */ /* * Default GSS service name... */ #define CUPS_DEFAULT_GSSSERVICENAME "host" /* * Select/poll interfaces... */ /* #undef HAVE_POLL */ /* #undef HAVE_EPOLL */ /* #undef HAVE_KQUEUE */ /* * Do we have the header? */ /* #undef HAVE_DLFCN_H */ /* * Do we have ? */ /* #undef HAVE_SYS_PARAM_H */ /* * Do we have ? */ /* #undef HAVE_SYS_UCRED_H */ /* * Do we have removefile()? */ /* #undef HAVE_REMOVEFILE */ /* * Do we have ? */ /* #undef HAVE_SANDBOX_H */ /* * Which random number generator function to use... */ /* #undef HAVE_ARC4RANDOM */ /* #undef HAVE_RANDOM */ /* #undef HAVE_LRAND48 */ #ifdef HAVE_ARC4RANDOM # define CUPS_RAND() arc4random() # define CUPS_SRAND(v) #elif defined(HAVE_RANDOM) # define CUPS_RAND() random() # define CUPS_SRAND(v) srandom(v) #elif defined(HAVE_LRAND48) # define CUPS_RAND() lrand48() # define CUPS_SRAND(v) srand48(v) #else # define CUPS_RAND() rand() # define CUPS_SRAND(v) srand(v) #endif /* HAVE_ARC4RANDOM */ /* * Do we have libusb? */ /* #undef HAVE_LIBUSB */ /* * Do we have libwrap and tcpd.h? */ /* #undef HAVE_TCPD_H */ /* * Do we have ? */ /* #undef HAVE_ICONV_H */ /* * Do we have statfs or statvfs and one of the corresponding headers? */ /* #undef HAVE_STATFS */ /* #undef HAVE_STATVFS */ /* #undef HAVE_SYS_MOUNT_H */ /* #undef HAVE_SYS_STATFS_H */ /* #undef HAVE_SYS_STATVFS_H */ /* #undef HAVE_SYS_VFS_H */ /* * Location of macOS localization bundle, if any. */ /* #undef CUPS_BUNDLEDIR */ /* * Do we have XPC? */ /* #undef HAVE_XPC */ /* #undef HAVE_XPC_PRIVATE_H */ /* * Do we have Mini-XML? */ /* #undef HAVE_MXML_H */ /* * Do we have the C99 abs() function? */ /* #undef HAVE_ABS */ #if !defined(HAVE_ABS) && !defined(abs) # if defined(__GNUC__) || __STDC_VERSION__ >= 199901L # define abs(x) _cups_abs(x) static inline int _cups_abs(int i) { return (i < 0 ? -i : i); } # elif defined(_MSC_VER) # define abs(x) _cups_abs(x) static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); } # else # define abs(x) ((x) < 0 ? -(x) : (x)) # endif /* __GNUC__ || __STDC_VERSION__ */ #endif /* !HAVE_ABS && !abs */ #endif /* !_CUPS_CONFIG_H_ */ cups-2.2.7/vcnet/cups.sln000664 000765 000024 00000015512 13255074424 015766 0ustar00msweetstaff000000 000000 Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0.40629.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcups2", "libcups2.vcxproj", "{CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcupsimage2", "libcupsimage2.vcxproj", "{CB4AA6F2-3E84-45BE-B505-95CD375E1234}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testfile", "testfile.vcxproj", "{CE75FC5F-E0CF-45DC-AD27-84666D3FBA30}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testhttp", "testhttp.vcxproj", "{90B0058C-8393-411F-BD3B-E2C831D4E883}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cupstestppd", "cupstestppd.vcxproj", "{6BE0CDD3-4ED7-409C-A80F-19DF73664B1F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ipptool", "ipptool.vcxproj", "{B246D91E-61F2-4433-BFD2-6C2A96FBD4D4}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regex", "regex.vcxproj", "{18950A1B-D37A-40C7-B2DF-C12986C0526E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ippfind", "ippfind.vcxproj", "{B484DA0C-62C8-4C32-83B6-CCEB58968B85}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ippserver", "ippserver.vcxproj", "{82A03BC7-0746-4B85-8908-3C7A3FAA58A9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}.Debug|Win32.ActiveCfg = Debug|Win32 {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}.Debug|Win32.Build.0 = Debug|Win32 {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}.Debug|x64.ActiveCfg = Debug|x64 {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}.Debug|x64.Build.0 = Debug|x64 {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}.Release|Win32.ActiveCfg = Release|Win32 {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}.Release|Win32.Build.0 = Release|Win32 {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}.Release|x64.ActiveCfg = Release|x64 {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}.Release|x64.Build.0 = Release|x64 {CB4AA6F2-3E84-45BE-B505-95CD375E1234}.Debug|Win32.ActiveCfg = Debug|Win32 {CB4AA6F2-3E84-45BE-B505-95CD375E1234}.Debug|Win32.Build.0 = Debug|Win32 {CB4AA6F2-3E84-45BE-B505-95CD375E1234}.Debug|x64.ActiveCfg = Debug|x64 {CB4AA6F2-3E84-45BE-B505-95CD375E1234}.Debug|x64.Build.0 = Debug|x64 {CB4AA6F2-3E84-45BE-B505-95CD375E1234}.Release|Win32.ActiveCfg = Release|Win32 {CB4AA6F2-3E84-45BE-B505-95CD375E1234}.Release|Win32.Build.0 = Release|Win32 {CB4AA6F2-3E84-45BE-B505-95CD375E1234}.Release|x64.ActiveCfg = Release|x64 {CB4AA6F2-3E84-45BE-B505-95CD375E1234}.Release|x64.Build.0 = Release|x64 {CE75FC5F-E0CF-45DC-AD27-84666D3FBA30}.Debug|Win32.ActiveCfg = Debug|Win32 {CE75FC5F-E0CF-45DC-AD27-84666D3FBA30}.Debug|Win32.Build.0 = Debug|Win32 {CE75FC5F-E0CF-45DC-AD27-84666D3FBA30}.Debug|x64.ActiveCfg = Debug|Win32 {CE75FC5F-E0CF-45DC-AD27-84666D3FBA30}.Release|Win32.ActiveCfg = Release|Win32 {CE75FC5F-E0CF-45DC-AD27-84666D3FBA30}.Release|Win32.Build.0 = Release|Win32 {CE75FC5F-E0CF-45DC-AD27-84666D3FBA30}.Release|x64.ActiveCfg = Release|Win32 {90B0058C-8393-411F-BD3B-E2C831D4E883}.Debug|Win32.ActiveCfg = Debug|Win32 {90B0058C-8393-411F-BD3B-E2C831D4E883}.Debug|Win32.Build.0 = Debug|Win32 {90B0058C-8393-411F-BD3B-E2C831D4E883}.Debug|x64.ActiveCfg = Debug|Win32 {90B0058C-8393-411F-BD3B-E2C831D4E883}.Release|Win32.ActiveCfg = Release|Win32 {90B0058C-8393-411F-BD3B-E2C831D4E883}.Release|Win32.Build.0 = Release|Win32 {90B0058C-8393-411F-BD3B-E2C831D4E883}.Release|x64.ActiveCfg = Release|Win32 {6BE0CDD3-4ED7-409C-A80F-19DF73664B1F}.Debug|Win32.ActiveCfg = Debug|Win32 {6BE0CDD3-4ED7-409C-A80F-19DF73664B1F}.Debug|Win32.Build.0 = Debug|Win32 {6BE0CDD3-4ED7-409C-A80F-19DF73664B1F}.Debug|x64.ActiveCfg = Debug|x64 {6BE0CDD3-4ED7-409C-A80F-19DF73664B1F}.Debug|x64.Build.0 = Debug|x64 {6BE0CDD3-4ED7-409C-A80F-19DF73664B1F}.Release|Win32.ActiveCfg = Release|Win32 {6BE0CDD3-4ED7-409C-A80F-19DF73664B1F}.Release|Win32.Build.0 = Release|Win32 {6BE0CDD3-4ED7-409C-A80F-19DF73664B1F}.Release|x64.ActiveCfg = Release|x64 {6BE0CDD3-4ED7-409C-A80F-19DF73664B1F}.Release|x64.Build.0 = Release|x64 {B246D91E-61F2-4433-BFD2-6C2A96FBD4D4}.Debug|Win32.ActiveCfg = Debug|Win32 {B246D91E-61F2-4433-BFD2-6C2A96FBD4D4}.Debug|Win32.Build.0 = Debug|Win32 {B246D91E-61F2-4433-BFD2-6C2A96FBD4D4}.Debug|x64.ActiveCfg = Debug|x64 {B246D91E-61F2-4433-BFD2-6C2A96FBD4D4}.Debug|x64.Build.0 = Debug|x64 {B246D91E-61F2-4433-BFD2-6C2A96FBD4D4}.Release|Win32.ActiveCfg = Release|Win32 {B246D91E-61F2-4433-BFD2-6C2A96FBD4D4}.Release|Win32.Build.0 = Release|Win32 {B246D91E-61F2-4433-BFD2-6C2A96FBD4D4}.Release|x64.ActiveCfg = Release|x64 {B246D91E-61F2-4433-BFD2-6C2A96FBD4D4}.Release|x64.Build.0 = Release|x64 {18950A1B-D37A-40C7-B2DF-C12986C0526E}.Debug|Win32.ActiveCfg = Debug|Win32 {18950A1B-D37A-40C7-B2DF-C12986C0526E}.Debug|Win32.Build.0 = Debug|Win32 {18950A1B-D37A-40C7-B2DF-C12986C0526E}.Debug|x64.ActiveCfg = Debug|x64 {18950A1B-D37A-40C7-B2DF-C12986C0526E}.Debug|x64.Build.0 = Debug|x64 {18950A1B-D37A-40C7-B2DF-C12986C0526E}.Release|Win32.ActiveCfg = Release|Win32 {18950A1B-D37A-40C7-B2DF-C12986C0526E}.Release|Win32.Build.0 = Release|Win32 {18950A1B-D37A-40C7-B2DF-C12986C0526E}.Release|x64.ActiveCfg = Release|x64 {B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Debug|Win32.ActiveCfg = Debug|Win32 {B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Debug|Win32.Build.0 = Debug|Win32 {B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Debug|x64.ActiveCfg = Debug|x64 {B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Debug|x64.Build.0 = Debug|x64 {B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Release|Win32.ActiveCfg = Release|Win32 {B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Release|Win32.Build.0 = Release|Win32 {B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Release|x64.ActiveCfg = Release|x64 {B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Release|x64.Build.0 = Release|x64 {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Debug|Win32.ActiveCfg = Debug|Win32 {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Debug|Win32.Build.0 = Debug|Win32 {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Debug|x64.ActiveCfg = Debug|x64 {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Debug|x64.Build.0 = Debug|x64 {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Release|Win32.ActiveCfg = Release|Win32 {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Release|Win32.Build.0 = Release|Win32 {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Release|x64.ActiveCfg = Release|x64 {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal cups-2.2.7/vcnet/cupstestppd.vcxproj000664 000765 000024 00000022312 13255074424 020265 0ustar00msweetstaff000000 000000  Debug Win32 Debug x64 Release Win32 Release x64 {6BE0CDD3-4ED7-409C-A80F-19DF73664B1F} cupstestppd Win32Proj 10.0.15063.0 Application v141 Unicode true Application v141 Unicode Application v141 Unicode true Application v141 Unicode <_ProjectFileVersion>12.0.30501.0 $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false Disabled ..;..\vcnet;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level1 EditAndContinue true Console false MachineX86 X64 Disabled ..;..\vcnet;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level1 ProgramDatabase true Console false MachineX64 ..;..\vcnet;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreadedDLL Level1 ProgramDatabase true Console true true false MachineX86 X64 ..;..\vcnet;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreadedDLL Level1 ProgramDatabase true Console true true false MachineX64 {cb4aa6f2-3e84-45be-b505-95cd375e8be3} false {cb4aa6f2-3e84-45be-b505-95cd375e1234} false cups-2.2.7/vcnet/cupstestppd.vcxproj.filters000664 000765 000024 00000001647 13255074424 021744 0ustar00msweetstaff000000 000000  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files cups-2.2.7/vcnet/ippfind.vcxproj000664 000765 000024 00000023213 13255074424 017341 0ustar00msweetstaff000000 000000  Debug Win32 Debug x64 Release Win32 Release x64 {B484DA0C-62C8-4C32-83B6-CCEB58968B85} ippfind Win32Proj 10.0.15063.0 Application v141 Unicode true Application v141 Unicode Application v141 Unicode true Application v141 Unicode <_ProjectFileVersion>12.0.30501.0 $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false Disabled ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level1 EditAndContinue dnssd.lib;ws2_32.lib;%(AdditionalDependencies) true Console false MachineX86 X64 Disabled ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level1 ProgramDatabase dnssd.lib;ws2_32.lib;%(AdditionalDependencies) true Console false MachineX64 ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreadedDLL Level1 ProgramDatabase dnssd.lib;ws2_32.lib;%(AdditionalDependencies) true Console true true false MachineX86 X64 ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreadedDLL Level1 ProgramDatabase dnssd.lib;ws2_32.lib;%(AdditionalDependencies) true Console true true false MachineX64 {cb4aa6f2-3e84-45be-b505-95cd375e8be3} false {18950a1b-d37a-40c7-b2df-c12986c0526e} false cups-2.2.7/vcnet/ippfind.vcxproj.filters000664 000765 000024 00000001640 13255074424 021010 0ustar00msweetstaff000000 000000  {8C1A7322-AFBD-4611-A001-CF18E3B0F00C} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {5807291C-0541-4D9C-9290-628F88CF9119} h;hpp;hxx;hm;inl;inc;xsd {7767CEF5-1BED-4C4C-82A7-37DF77126FE3} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files cups-2.2.7/vcnet/ippserver.vcxproj000664 000765 000024 00000022711 13255074424 017731 0ustar00msweetstaff000000 000000  Debug Win32 Debug x64 Release Win32 Release x64 {82A03BC7-0746-4B85-8908-3C7A3FAA58A9} ippserver Win32Proj 10.0.15063.0 Application v141 Unicode true Application v141 Unicode Application v141 Unicode true Application v141 Unicode <_ProjectFileVersion>12.0.30501.0 $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false Disabled ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level1 EditAndContinue dnssd.lib;ws2_32.lib;%(AdditionalDependencies) true Console false MachineX86 X64 Disabled ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level1 ProgramDatabase dnssd.lib;ws2_32.lib;%(AdditionalDependencies) true Console false MachineX64 ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreadedDLL Level1 ProgramDatabase dnssd.lib;ws2_32.lib;%(AdditionalDependencies) true Console true true false MachineX86 X64 ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreadedDLL Level1 ProgramDatabase dnssd.lib;ws2_32.lib;%(AdditionalDependencies) true Console true true false MachineX64 {cb4aa6f2-3e84-45be-b505-95cd375e8be3} false cups-2.2.7/vcnet/ippserver.vcxproj.filters000664 000765 000024 00000001642 13255074424 021400 0ustar00msweetstaff000000 000000  {5129820B-88C2-40AE-BE81-C7957F76540D} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {CAF4FFBF-7D66-4368-A03A-3FD0971B59A0} h;hpp;hxx;hm;inl;inc;xsd {17D3B9CD-53D2-47AF-9D2A-4516D777D695} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files cups-2.2.7/vcnet/ipptool.vcxproj000664 000765 000024 00000022363 13255074424 017403 0ustar00msweetstaff000000 000000  Debug Win32 Debug x64 Release Win32 Release x64 {B246D91E-61F2-4433-BFD2-6C2A96FBD4D4} ipptool Win32Proj 10.0.15063.0 Application v141 Unicode true Application v141 Unicode Application v141 Unicode true Application v141 Unicode <_ProjectFileVersion>12.0.30501.0 $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false Disabled ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level1 EditAndContinue true Console false MachineX86 X64 Disabled ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level1 ProgramDatabase true Console false MachineX64 ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreadedDLL Level1 ProgramDatabase true Console true true false MachineX86 X64 ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreadedDLL Level1 ProgramDatabase true Console true true false MachineX64 {cb4aa6f2-3e84-45be-b505-95cd375e8be3} false {18950a1b-d37a-40c7-b2df-c12986c0526e} false cups-2.2.7/vcnet/ipptool.vcxproj.filters000664 000765 000024 00000001640 13255074424 021045 0ustar00msweetstaff000000 000000  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files cups-2.2.7/vcnet/libcups2.vcxproj000664 000765 000024 00000076552 13255074424 017451 0ustar00msweetstaff000000 000000  Debug Win32 Debug x64 Release Win32 Release x64 {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3} libcups2 Win32Proj 10.0.15063.0 DynamicLibrary v141 MultiByte DynamicLibrary v141 MultiByte DynamicLibrary v141 MultiByte DynamicLibrary v141 MultiByte <_ProjectFileVersion>12.0.30501.0 $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false Disabled ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) ZLIB_WINAPI;WIN32;DEBUG;_DEBUG;_WINDOWS;_USRDLL;LIBCUPS2_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue /NODEFAULTLIB:libcmt %(AdditionalOptions) ws2_32.lib;advapi32.lib;zlibwapi.lib;%(AdditionalDependencies) $(OutDir)libcups2.dll ..\cups\libcups2.def true $(Platform)\$(Configuration)\libcups2.pdb Windows false $(OutDir)libcups2.lib MachineX86 X64 Disabled ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) ZLIB_WINAPI;WIN32;DEBUG;_DEBUG;_WINDOWS;_USRDLL;LIBCUPS2_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase ws2_32.lib;advapi32.lib;zlibwapi.lib;%(AdditionalDependencies) $(OutDir)libcups2.dll ..\cups\libcups2.def true $(Platform)\$(Configuration)\libcups2.pdb Windows $(OutDir)libcups2.lib MachineX64 MinSpace ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) ZLIB_WINAPI;WIN32;DEBUG;NDEBUG;_WINDOWS;_USRDLL;LIBCUPS2_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase /NODEFAULTLIB:libcmt %(AdditionalOptions) ws2_32.lib;advapi32.lib;zlibwapi.lib;%(AdditionalDependencies) $(OutDir)libcups2.dll ..\cups\libcups2.def true libcups2.pdb Windows true true false $(OutDir)libcups2.lib MachineX86 X64 MinSpace ..\vcnet;..;..\vcnet\regex;%(AdditionalIncludeDirectories) ZLIB_WINAPI;WIN32;DEBUG;NDEBUG;_WINDOWS;_USRDLL;LIBCUPS2_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase ws2_32.lib;advapi32.lib;zlibwapi.lib;%(AdditionalDependencies) $(OutDir)libcups2.dll ..\cups\libcups2.def true libcups2.pdb Windows true true $(OutDir)libcups2.lib MachineX64 if not "%25RC_XBS%25" == "YES" goto END if not exist "$(DSTROOT)\Program Files\Bonjour\$(Platform)" mkdir "$(DSTROOT)\Program Files\Bonjour\$(Platform)" xcopy /I/Y "$(TargetPath)" "$(DSTROOT)\Program Files\Bonjour\$(Platform)" :END WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) WIN32;%(PreprocessorDefinitions) {18950a1b-d37a-40c7-b2df-c12986c0526e} false This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. cups-2.2.7/vcnet/libcups2.vcxproj.filters000664 000765 000024 00000020173 13255074424 021104 0ustar00msweetstaff000000 000000  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files cups-2.2.7/vcnet/libcupsimage2.vcxproj000664 000765 000024 00000026622 13255074424 020445 0ustar00msweetstaff000000 000000  Debug Win32 Debug x64 Release Win32 Release x64 {CB4AA6F2-3E84-45BE-B505-95CD375E1234} Win32Proj 10.0.15063.0 DynamicLibrary v141 MultiByte DynamicLibrary v141 MultiByte DynamicLibrary v141 MultiByte DynamicLibrary v141 MultiByte <_ProjectFileVersion>12.0.30501.0 $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false Disabled ..\vcnet;..;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBCUPS2_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 EditAndContinue ws2_32.lib;%(AdditionalDependencies) $(OutDir)libcupsimage2.dll ..\filter\libcupsimage2.def true $(Platform)\$(Configuration)\libcupsimage2.pdb Windows false $(OutDir)libcupsimage2.lib MachineX86 X64 Disabled ..\vcnet;..;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBCUPS2_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL true Level3 ProgramDatabase ws2_32.lib;%(AdditionalDependencies) $(OutDir)libcupsimage2.dll ..\filter\libcupsimage2.def true $(Platform)\$(Configuration)\libcupsimage2.pdb Windows $(OutDir)libcupsimage2.lib MachineX64 MinSpace ..\vcnet;..;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBCUPS2_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase ws2_32.lib;%(AdditionalDependencies) $(OutDir)libcupsimage2.dll ..\filter\libcupsimage2.def true libcupsimage2.pdb Windows true true false $(OutDir)libcupsimage2.lib MachineX86 X64 MinSpace ..\vcnet;..;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBCUPS2_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase ws2_32.lib;%(AdditionalDependencies) $(OutDir)libcupsimage2.dll ..\filter\libcupsimage2.def true libcupsimage2.pdb Windows true true $(OutDir)libcupsimage2.lib MachineX64 if not "%25RC_XBS%25" == "YES" goto END if not exist "$(DSTROOT)\Program Files\Bonjour\$(Platform)" mkdir "$(DSTROOT)\Program Files\Bonjour\$(Platform)" xcopy /I/Y "$(TargetPath)" "$(DSTROOT)\Program Files\Bonjour\$(Platform)" :END {cb4aa6f2-3e84-45be-b505-95cd375e8be3} false cups-2.2.7/vcnet/libcupsimage2.vcxproj.filters000664 000765 000024 00000002320 13255074424 022101 0ustar00msweetstaff000000 000000  {4FC737F1-C7A5-4376-A066-2A32D7521234} cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE521234} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121A1234} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx Source Files Source Files Source Files Header Files cups-2.2.7/vcnet/README.txt000664 000765 000024 00000000363 13255074424 015772 0ustar00msweetstaff000000 000000 README - CUPS on Windows - 2016-08-08 ------------------------------------- This directory contains Visual Studio project and solution files for building the CUPS library and cupstestppd, ippfind, ippserver, and ipptool utilities on Windows. cups-2.2.7/vcnet/regex/000775 000765 000024 00000000000 13255074424 015404 5ustar00msweetstaff000000 000000 cups-2.2.7/vcnet/regex.vcxproj000664 000765 000024 00000022574 13255074424 017033 0ustar00msweetstaff000000 000000  Debug Win32 Debug x64 Release Win32 Release x64 {18950A1B-D37A-40C7-B2DF-C12986C0526E} regex Win32Proj 10.0.15063.0 DynamicLibrary v141 Unicode true DynamicLibrary v141 Unicode DynamicLibrary v141 Unicode true DynamicLibrary v141 Unicode <_ProjectFileVersion>12.0.30501.0 $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false Disabled regex;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;REGEX_EXPORTS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue regex/regex.def true Windows MachineX86 MaxSpeed true regex;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;REGEX_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase regex/regex.def true Windows true true MachineX86 X64 Disabled regex;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;REGEX_EXPORTS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase regex/regex.def true Windows MachineX64 X64 MaxSpeed true regex;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;REGEX_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase regex/regex.def true Windows true true MachineX64 cups-2.2.7/vcnet/regex.vcxproj.filters000664 000765 000024 00000003143 13255074424 020471 0ustar00msweetstaff000000 000000  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files cups-2.2.7/vcnet/setdebug.bat000664 000765 000024 00000000300 13255074424 016555 0ustar00msweetstaff000000 000000 @rem Script to enable debug logging for IPPTOOL set CUPS_DEBUG_LOG=ipptool.log set CUPS_DEBUG_LEVEL=6 set "CUPS_DEBUG_FILTER=^(http|_http|ipp|_ipp|cupsDo|cupsGetResponse|cupsSend|cupsWrite)" cups-2.2.7/vcnet/testfile.vcxproj000664 000765 000024 00000012350 13255074424 017527 0ustar00msweetstaff000000 000000  Debug Win32 Release Win32 {CE75FC5F-E0CF-45DC-AD27-84666D3FBA30} Win32Proj 10.0.15063.0 Application v141 MultiByte Application v141 MultiByte <_ProjectFileVersion>12.0.30501.0 $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false Disabled ..\vcnet;..;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue $(OutDir)testfile.exe true $(OutDir)testfile.pdb Console false MachineX86 ..\vcnet;..;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreaded Level3 $(OutDir)testfile.exe true Console true true false MachineX86 {cb4aa6f2-3e84-45be-b505-95cd375e8be3} false cups-2.2.7/vcnet/testfile.vcxproj.filters000664 000765 000024 00000001615 13255074424 021200 0ustar00msweetstaff000000 000000  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx Source Files cups-2.2.7/vcnet/testhttp.vcxproj000664 000765 000024 00000012350 13255074424 017567 0ustar00msweetstaff000000 000000  Debug Win32 Release Win32 {90B0058C-8393-411F-BD3B-E2C831D4E883} Win32Proj 10.0.15063.0 Application v141 MultiByte Application v141 MultiByte <_ProjectFileVersion>12.0.30501.0 $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false Disabled ..\vcnet;..;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue $(OutDir)testhttp.exe true $(OutDir)testhttp.pdb Console false MachineX86 ..\vcnet;..;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreaded Level3 $(OutDir)testhttp.exe true Console true true false MachineX86 {cb4aa6f2-3e84-45be-b505-95cd375e8be3} false cups-2.2.7/vcnet/testhttp.vcxproj.filters000664 000765 000024 00000001615 13255074424 021240 0ustar00msweetstaff000000 000000  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx Source Files cups-2.2.7/vcnet/regex/cclass.h000664 000765 000024 00000001625 13255074424 017031 0ustar00msweetstaff000000 000000 /* character-class table */ static struct cclass { char *name; char *chars; char *multis; } cclasses[] = { "alnum", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\ 0123456789", "", "alpha", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", "", "blank", " \t", "", "cntrl", "\007\b\t\n\v\f\r\1\2\3\4\5\6\16\17\20\21\22\23\24\ \25\26\27\30\31\32\33\34\35\36\37\177", "", "digit", "0123456789", "", "graph", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\ 0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", "", "lower", "abcdefghijklmnopqrstuvwxyz", "", "print", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\ 0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ ", "", "punct", "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", "", "space", "\t\n\v\f\r ", "", "upper", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", "xdigit", "0123456789ABCDEFabcdef", "", NULL, 0, "" }; cups-2.2.7/vcnet/regex/cname.h000664 000765 000024 00000003512 13255074424 016641 0ustar00msweetstaff000000 000000 /* character-name table */ static struct cname { char *name; char code; } cnames[] = { "NUL", '\0', "SOH", '\001', "STX", '\002', "ETX", '\003', "EOT", '\004', "ENQ", '\005', "ACK", '\006', "BEL", '\007', "alert", '\007', "BS", '\010', "backspace", '\b', "HT", '\011', "tab", '\t', "LF", '\012', "newline", '\n', "VT", '\013', "vertical-tab", '\v', "FF", '\014', "form-feed", '\f', "CR", '\015', "carriage-return", '\r', "SO", '\016', "SI", '\017', "DLE", '\020', "DC1", '\021', "DC2", '\022', "DC3", '\023', "DC4", '\024', "NAK", '\025', "SYN", '\026', "ETB", '\027', "CAN", '\030', "EM", '\031', "SUB", '\032', "ESC", '\033', "IS4", '\034', "FS", '\034', "IS3", '\035', "GS", '\035', "IS2", '\036', "RS", '\036', "IS1", '\037', "US", '\037', "space", ' ', "exclamation-mark", '!', "quotation-mark", '"', "number-sign", '#', "dollar-sign", '$', "percent-sign", '%', "ampersand", '&', "apostrophe", '\'', "left-parenthesis", '(', "right-parenthesis", ')', "asterisk", '*', "plus-sign", '+', "comma", ',', "hyphen", '-', "hyphen-minus", '-', "period", '.', "full-stop", '.', "slash", '/', "solidus", '/', "zero", '0', "one", '1', "two", '2', "three", '3', "four", '4', "five", '5', "six", '6', "seven", '7', "eight", '8', "nine", '9', "colon", ':', "semicolon", ';', "less-than-sign", '<', "equals-sign", '=', "greater-than-sign", '>', "question-mark", '?', "commercial-at", '@', "left-square-bracket", '[', "backslash", '\\', "reverse-solidus", '\\', "right-square-bracket", ']', "circumflex", '^', "circumflex-accent", '^', "underscore", '_', "low-line", '_', "grave-accent", '`', "left-brace", '{', "left-curly-bracket", '{', "vertical-line", '|', "right-brace", '}', "right-curly-bracket", '}', "tilde", '~', "DEL", '\177', NULL, 0, }; cups-2.2.7/vcnet/regex/COPYRIGHT000664 000765 000024 00000001674 13255074424 016707 0ustar00msweetstaff000000 000000 Copyright 1992, 1993, 1994, 1997 Henry Spencer. All rights reserved. This software is not subject to any license of the American Telephone and Telegraph Company or of the Regents of the University of California. Permission is granted to anyone to use this software for any purpose on any computer system, and to alter it and redistribute it, subject to the following restrictions: 1. The author is not responsible for the consequences of use of this software, no matter how awful, even if they arise from flaws in it. 2. The origin of this software must not be misrepresented, either by explicit claim or by omission. Since few users ever read sources, credits must appear in the documentation. 3. Altered versions must be plainly marked as such, and must not be misrepresented as being the original software. Since few users ever read sources, credits must appear in the documentation. 4. This notice may not be removed or altered. cups-2.2.7/vcnet/regex/debug.c000664 000765 000024 00000011744 13255074424 016645 0ustar00msweetstaff000000 000000 #include #include #include #include #include #include #include #include "utils.h" #include "regex2.h" #include "debug.ih" /* - regprint - print a regexp for debugging == void regprint(regex_t *r, FILE *d); */ void regprint(r, d) regex_t *r; FILE *d; { register struct re_guts *g = r->re_g; register int i; register int c; register int last; int nincat[NC]; fprintf(d, "%ld states, %d categories", (long)g->nstates, g->ncategories); fprintf(d, ", first %ld last %ld", (long)g->firststate, (long)g->laststate); if (g->iflags&USEBOL) fprintf(d, ", USEBOL"); if (g->iflags&USEEOL) fprintf(d, ", USEEOL"); if (g->iflags&BAD) fprintf(d, ", BAD"); if (g->nsub > 0) fprintf(d, ", nsub=%ld", (long)g->nsub); if (g->must != NULL) fprintf(d, ", must(%ld) `%*s'", (long)g->mlen, (int)g->mlen, g->must); if (g->backrefs) fprintf(d, ", backrefs"); if (g->nplus > 0) fprintf(d, ", nplus %ld", (long)g->nplus); fprintf(d, "\n"); s_print(g, d); for (i = 0; i < g->ncategories; i++) { nincat[i] = 0; for (c = CHAR_MIN; c <= CHAR_MAX; c++) if (g->categories[c] == i) nincat[i]++; } fprintf(d, "cc0#%d", nincat[0]); for (i = 1; i < g->ncategories; i++) if (nincat[i] == 1) { for (c = CHAR_MIN; c <= CHAR_MAX; c++) if (g->categories[c] == i) break; fprintf(d, ", %d=%s", i, regchar(c)); } fprintf(d, "\n"); for (i = 1; i < g->ncategories; i++) if (nincat[i] != 1) { fprintf(d, "cc%d\t", i); last = -1; for (c = CHAR_MIN; c <= CHAR_MAX+1; c++) /* +1 does flush */ if (c <= CHAR_MAX && g->categories[c] == i) { if (last < 0) { fprintf(d, "%s", regchar(c)); last = c; } } else { if (last >= 0) { if (last != c-1) fprintf(d, "-%s", regchar(c-1)); last = -1; } } fprintf(d, "\n"); } } /* - s_print - print the strip for debugging == static void s_print(register struct re_guts *g, FILE *d); */ static void s_print(g, d) register struct re_guts *g; FILE *d; { register sop *s; register cset *cs; register int i; register int done = 0; register sop opnd; register int col = 0; register int last; register sopno offset = 2; # define GAP() { if (offset % 5 == 0) { \ if (col > 40) { \ fprintf(d, "\n\t"); \ col = 0; \ } else { \ fprintf(d, " "); \ col++; \ } \ } else \ col++; \ offset++; \ } if (OP(g->strip[0]) != OEND) fprintf(d, "missing initial OEND!\n"); for (s = &g->strip[1]; !done; s++) { opnd = OPND(*s); switch (OP(*s)) { case OEND: fprintf(d, "\n"); done = 1; break; case OCHAR: if (strchr("\\|()^$.[+*?{}!<> ", (char)opnd) != NULL) fprintf(d, "\\%c", (char)opnd); else fprintf(d, "%s", regchar((char)opnd)); break; case OBOL: fprintf(d, "^"); break; case OEOL: fprintf(d, "$"); break; case OBOW: fprintf(d, "\\{"); break; case OEOW: fprintf(d, "\\}"); break; case OANY: fprintf(d, "."); break; case OANYOF: fprintf(d, "[(%ld)", (long)opnd); cs = &g->sets[opnd]; last = -1; for (i = 0; i < g->csetsize+1; i++) /* +1 flushes */ if (CHIN(cs, i) && i < g->csetsize) { if (last < 0) { fprintf(d, "%s", regchar(i)); last = i; } } else { if (last >= 0) { if (last != i-1) fprintf(d, "-%s", regchar(i-1)); last = -1; } } fprintf(d, "]"); break; case OBACK_: fprintf(d, "(\\<%ld>", (long)opnd); break; case O_BACK: fprintf(d, "<%ld>\\)", (long)opnd); break; case OPLUS_: fprintf(d, "(+"); if (OP(*(s+opnd)) != O_PLUS) fprintf(d, "<%ld>", (long)opnd); break; case O_PLUS: if (OP(*(s-opnd)) != OPLUS_) fprintf(d, "<%ld>", (long)opnd); fprintf(d, "+)"); break; case OQUEST_: fprintf(d, "(?"); if (OP(*(s+opnd)) != O_QUEST) fprintf(d, "<%ld>", (long)opnd); break; case O_QUEST: if (OP(*(s-opnd)) != OQUEST_) fprintf(d, "<%ld>", (long)opnd); fprintf(d, "?)"); break; case OLPAREN: fprintf(d, "((<%ld>", (long)opnd); break; case ORPAREN: fprintf(d, "<%ld>))", (long)opnd); break; case OCH_: fprintf(d, "<"); if (OP(*(s+opnd)) != OOR2) fprintf(d, "<%ld>", (long)opnd); break; case OOR1: if (OP(*(s-opnd)) != OOR1 && OP(*(s-opnd)) != OCH_) fprintf(d, "<%ld>", (long)opnd); fprintf(d, "|"); break; case OOR2: fprintf(d, "|"); if (OP(*(s+opnd)) != OOR2 && OP(*(s+opnd)) != O_CH) fprintf(d, "<%ld>", (long)opnd); break; case O_CH: if (OP(*(s-opnd)) != OOR1) fprintf(d, "<%ld>", (long)opnd); fprintf(d, ">"); break; default: fprintf(d, "!%d(%d)!", OP(*s), opnd); break; } if (!done) GAP(); } } /* - regchar - make a character printable == static char *regchar(int ch); */ static char * /* -> representation */ regchar(ch) int ch; { static char buf[10]; if (isprint(ch) || ch == ' ') sprintf(buf, "%c", ch); else sprintf(buf, "\\%o", ch); return(buf); } cups-2.2.7/vcnet/regex/debug.ih000664 000765 000024 00000000511 13255074424 017011 0ustar00msweetstaff000000 000000 /* ========= begin header generated by ./mkh ========= */ #ifdef __cplusplus extern "C" { #endif /* === debug.c === */ void regprint(regex_t *r, FILE *d); static void s_print(register struct re_guts *g, FILE *d); static char *regchar(int ch); #ifdef __cplusplus } #endif /* ========= end header generated by ./mkh ========= */ cups-2.2.7/vcnet/regex/engine.c000664 000765 000024 00000061715 13255074424 017027 0ustar00msweetstaff000000 000000 /* * The matching engine and friends. This file is #included by regexec.c * after suitable #defines of a variety of macros used herein, so that * different state representations can be used without duplicating masses * of code. */ #ifdef SNAMES #define matcher smatcher #define fast sfast #define slow sslow #define dissect sdissect #define backref sbackref #define step sstep #define print sprint #define at sat #define match smat #endif #ifdef LNAMES #define matcher lmatcher #define fast lfast #define slow lslow #define dissect ldissect #define backref lbackref #define step lstep #define print lprint #define at lat #define match lmat #endif /* another structure passed up and down to avoid zillions of parameters */ struct match { struct re_guts *g; int eflags; regmatch_t *pmatch; /* [nsub+1] (0 element unused) */ char *offp; /* offsets work from here */ char *beginp; /* start of string -- virtual NUL precedes */ char *endp; /* end of string -- virtual NUL here */ char *coldp; /* can be no match starting before here */ char **lastpos; /* [nplus+1] */ STATEVARS; states st; /* current states */ states fresh; /* states for a fresh start */ states tmp; /* temporary */ states empty; /* empty set of states */ }; #include "engine.ih" #ifdef REDEBUG #define SP(t, s, c) print(m, t, s, c, stdout) #define AT(t, p1, p2, s1, s2) at(m, t, p1, p2, s1, s2) #define NOTE(str) { if (m->eflags®_TRACE) printf("=%s\n", (str)); } #else #define SP(t, s, c) /* nothing */ #define AT(t, p1, p2, s1, s2) /* nothing */ #define NOTE(s) /* nothing */ #endif /* - matcher - the actual matching engine == static int matcher(register struct re_guts *g, char *string, \ == size_t nmatch, regmatch_t pmatch[], int eflags); */ static int /* 0 success, REG_NOMATCH failure */ matcher(g, string, nmatch, pmatch, eflags) register struct re_guts *g; char *string; size_t nmatch; regmatch_t pmatch[]; int eflags; { register char *endp; register size_t i; struct match mv; register struct match *m = &mv; register char *dp; const register sopno gf = g->firststate+1; /* +1 for OEND */ const register sopno gl = g->laststate; char *start; char *stop; /* simplify the situation where possible */ if (g->cflags®_NOSUB) nmatch = 0; if (eflags®_STARTEND) { start = string + pmatch[0].rm_so; stop = string + pmatch[0].rm_eo; } else { start = string; stop = start + strlen(start); } if (stop < start) return(REG_INVARG); /* prescreening; this does wonders for this rather slow code */ if (g->must != NULL) { for (dp = start; dp < stop; dp++) if (*dp == g->must[0] && stop - dp >= g->mlen && memcmp(dp, g->must, (size_t)g->mlen) == 0) break; if (dp == stop) /* we didn't find g->must */ return(REG_NOMATCH); } /* match struct setup */ m->g = g; m->eflags = eflags; m->pmatch = NULL; m->lastpos = NULL; m->offp = string; m->beginp = start; m->endp = stop; STATESETUP(m, 4); SETUP(m->st); SETUP(m->fresh); SETUP(m->tmp); SETUP(m->empty); CLEAR(m->empty); /* this loop does only one repetition except for backrefs */ for (;;) { endp = fast(m, start, stop, gf, gl); if (endp == NULL) { /* a miss */ STATETEARDOWN(m); return(REG_NOMATCH); } if (nmatch == 0 && !g->backrefs) break; /* no further info needed */ /* where? */ assert(m->coldp != NULL); for (;;) { NOTE("finding start"); endp = slow(m, m->coldp, stop, gf, gl); if (endp != NULL) break; assert(m->coldp < m->endp); m->coldp++; } if (nmatch == 1 && !g->backrefs) break; /* no further info needed */ /* oh my, he wants the subexpressions... */ if (m->pmatch == NULL) m->pmatch = (regmatch_t *)malloc((m->g->nsub + 1) * sizeof(regmatch_t)); if (m->pmatch == NULL) { STATETEARDOWN(m); return(REG_ESPACE); } for (i = 1; i <= m->g->nsub; i++) m->pmatch[i].rm_so = m->pmatch[i].rm_eo = -1; if (!g->backrefs && !(m->eflags®_BACKR)) { NOTE("dissecting"); dp = dissect(m, m->coldp, endp, gf, gl); } else { if (g->nplus > 0 && m->lastpos == NULL) m->lastpos = (char **)malloc((g->nplus+1) * sizeof(char *)); if (g->nplus > 0 && m->lastpos == NULL) { free(m->pmatch); STATETEARDOWN(m); return(REG_ESPACE); } NOTE("backref dissect"); dp = backref(m, m->coldp, endp, gf, gl, (sopno)0); } if (dp != NULL) break; /* uh-oh... we couldn't find a subexpression-level match */ assert(g->backrefs); /* must be back references doing it */ assert(g->nplus == 0 || m->lastpos != NULL); for (;;) { if (dp != NULL || endp <= m->coldp) break; /* defeat */ NOTE("backoff"); endp = slow(m, m->coldp, endp-1, gf, gl); if (endp == NULL) break; /* defeat */ /* try it on a shorter possibility */ #ifndef NDEBUG for (i = 1; i <= m->g->nsub; i++) { assert(m->pmatch[i].rm_so == -1); assert(m->pmatch[i].rm_eo == -1); } #endif NOTE("backoff dissect"); dp = backref(m, m->coldp, endp, gf, gl, (sopno)0); } assert(dp == NULL || dp == endp); if (dp != NULL) /* found a shorter one */ break; /* despite initial appearances, there is no match here */ NOTE("false alarm"); start = m->coldp + 1; /* recycle starting later */ assert(start <= stop); } /* fill in the details if requested */ if (nmatch > 0) { pmatch[0].rm_so = m->coldp - m->offp; pmatch[0].rm_eo = endp - m->offp; } if (nmatch > 1) { assert(m->pmatch != NULL); for (i = 1; i < nmatch; i++) if (i <= m->g->nsub) pmatch[i] = m->pmatch[i]; else { pmatch[i].rm_so = -1; pmatch[i].rm_eo = -1; } } if (m->pmatch != NULL) free((char *)m->pmatch); if (m->lastpos != NULL) free((char *)m->lastpos); STATETEARDOWN(m); return(0); } /* - dissect - figure out what matched what, no back references == static char *dissect(register struct match *m, char *start, \ == char *stop, sopno startst, sopno stopst); */ static char * /* == stop (success) always */ dissect(m, start, stop, startst, stopst) register struct match *m; char *start; char *stop; sopno startst; sopno stopst; { register int i; register sopno ss; /* start sop of current subRE */ register sopno es; /* end sop of current subRE */ register char *sp; /* start of string matched by it */ register char *stp; /* string matched by it cannot pass here */ register char *rest; /* start of rest of string */ register char *tail; /* string unmatched by rest of RE */ register sopno ssub; /* start sop of subsubRE */ register sopno esub; /* end sop of subsubRE */ register char *ssp; /* start of string matched by subsubRE */ register char *sep; /* end of string matched by subsubRE */ register char *oldssp; /* previous ssp */ register char *dp; AT("diss", start, stop, startst, stopst); sp = start; for (ss = startst; ss < stopst; ss = es) { /* identify end of subRE */ es = ss; switch (OP(m->g->strip[es])) { case OPLUS_: case OQUEST_: es += OPND(m->g->strip[es]); break; case OCH_: while (OP(m->g->strip[es]) != O_CH) es += OPND(m->g->strip[es]); break; } es++; /* figure out what it matched */ switch (OP(m->g->strip[ss])) { case OEND: assert(nope); break; case OCHAR: sp++; break; case OBOL: case OEOL: case OBOW: case OEOW: break; case OANY: case OANYOF: sp++; break; case OBACK_: case O_BACK: assert(nope); break; /* cases where length of match is hard to find */ case OQUEST_: stp = stop; for (;;) { /* how long could this one be? */ rest = slow(m, sp, stp, ss, es); assert(rest != NULL); /* it did match */ /* could the rest match the rest? */ tail = slow(m, rest, stop, es, stopst); if (tail == stop) break; /* yes! */ /* no -- try a shorter match for this one */ stp = rest - 1; assert(stp >= sp); /* it did work */ } ssub = ss + 1; esub = es - 1; /* did innards match? */ if (slow(m, sp, rest, ssub, esub) != NULL) { dp = dissect(m, sp, rest, ssub, esub); assert(dp == rest); } else /* no */ assert(sp == rest); sp = rest; break; case OPLUS_: stp = stop; for (;;) { /* how long could this one be? */ rest = slow(m, sp, stp, ss, es); assert(rest != NULL); /* it did match */ /* could the rest match the rest? */ tail = slow(m, rest, stop, es, stopst); if (tail == stop) break; /* yes! */ /* no -- try a shorter match for this one */ stp = rest - 1; assert(stp >= sp); /* it did work */ } ssub = ss + 1; esub = es - 1; ssp = sp; oldssp = ssp; for (;;) { /* find last match of innards */ sep = slow(m, ssp, rest, ssub, esub); if (sep == NULL || sep == ssp) break; /* failed or matched null */ oldssp = ssp; /* on to next try */ ssp = sep; } if (sep == NULL) { /* last successful match */ sep = ssp; ssp = oldssp; } assert(sep == rest); /* must exhaust substring */ assert(slow(m, ssp, sep, ssub, esub) == rest); dp = dissect(m, ssp, sep, ssub, esub); assert(dp == sep); sp = rest; break; case OCH_: stp = stop; for (;;) { /* how long could this one be? */ rest = slow(m, sp, stp, ss, es); assert(rest != NULL); /* it did match */ /* could the rest match the rest? */ tail = slow(m, rest, stop, es, stopst); if (tail == stop) break; /* yes! */ /* no -- try a shorter match for this one */ stp = rest - 1; assert(stp >= sp); /* it did work */ } ssub = ss + 1; esub = ss + OPND(m->g->strip[ss]) - 1; assert(OP(m->g->strip[esub]) == OOR1); for (;;) { /* find first matching branch */ if (slow(m, sp, rest, ssub, esub) == rest) break; /* it matched all of it */ /* that one missed, try next one */ assert(OP(m->g->strip[esub]) == OOR1); esub++; assert(OP(m->g->strip[esub]) == OOR2); ssub = esub + 1; esub += OPND(m->g->strip[esub]); if (OP(m->g->strip[esub]) == OOR2) esub--; else assert(OP(m->g->strip[esub]) == O_CH); } dp = dissect(m, sp, rest, ssub, esub); assert(dp == rest); sp = rest; break; case O_PLUS: case O_QUEST: case OOR1: case OOR2: case O_CH: assert(nope); break; case OLPAREN: i = OPND(m->g->strip[ss]); assert(0 < i && i <= m->g->nsub); m->pmatch[i].rm_so = sp - m->offp; break; case ORPAREN: i = OPND(m->g->strip[ss]); assert(0 < i && i <= m->g->nsub); m->pmatch[i].rm_eo = sp - m->offp; break; default: /* uh oh */ assert(nope); break; } } assert(sp == stop); return(sp); } /* - backref - figure out what matched what, figuring in back references == static char *backref(register struct match *m, char *start, \ == char *stop, sopno startst, sopno stopst, sopno lev); */ static char * /* == stop (success) or NULL (failure) */ backref(m, start, stop, startst, stopst, lev) register struct match *m; char *start; char *stop; sopno startst; sopno stopst; sopno lev; /* PLUS nesting level */ { register int i; register sopno ss; /* start sop of current subRE */ register char *sp; /* start of string matched by it */ register sopno ssub; /* start sop of subsubRE */ register sopno esub; /* end sop of subsubRE */ register char *ssp; /* start of string matched by subsubRE */ register char *dp; register size_t len; register int hard; register sop s; register regoff_t offsave; register cset *cs; AT("back", start, stop, startst, stopst); sp = start; /* get as far as we can with easy stuff */ hard = 0; for (ss = startst; !hard && ss < stopst; ss++) switch (OP(s = m->g->strip[ss])) { case OCHAR: if (sp == stop || *sp++ != (char)OPND(s)) return(NULL); break; case OANY: if (sp == stop) return(NULL); sp++; break; case OANYOF: cs = &m->g->sets[OPND(s)]; if (sp == stop || !CHIN(cs, *sp++)) return(NULL); break; case OBOL: if ( (sp == m->beginp && !(m->eflags®_NOTBOL)) || (sp < m->endp && *(sp-1) == '\n' && (m->g->cflags®_NEWLINE)) ) { /* yes */ } else return(NULL); break; case OEOL: if ( (sp == m->endp && !(m->eflags®_NOTEOL)) || (sp < m->endp && *sp == '\n' && (m->g->cflags®_NEWLINE)) ) { /* yes */ } else return(NULL); break; case OBOW: if (( (sp == m->beginp && !(m->eflags®_NOTBOL)) || (sp < m->endp && *(sp-1) == '\n' && (m->g->cflags®_NEWLINE)) || (sp > m->beginp && !ISWORD(*(sp-1))) ) && (sp < m->endp && ISWORD(*sp)) ) { /* yes */ } else return(NULL); break; case OEOW: if (( (sp == m->endp && !(m->eflags®_NOTEOL)) || (sp < m->endp && *sp == '\n' && (m->g->cflags®_NEWLINE)) || (sp < m->endp && !ISWORD(*sp)) ) && (sp > m->beginp && ISWORD(*(sp-1))) ) { /* yes */ } else return(NULL); break; case O_QUEST: break; case OOR1: /* matches null but needs to skip */ ss++; s = m->g->strip[ss]; do { assert(OP(s) == OOR2); ss += OPND(s); } while (OP(s = m->g->strip[ss]) != O_CH); /* note that the ss++ gets us past the O_CH */ break; default: /* have to make a choice */ hard = 1; break; } if (!hard) { /* that was it! */ if (sp != stop) return(NULL); return(sp); } ss--; /* adjust for the for's final increment */ /* the hard stuff */ AT("hard", sp, stop, ss, stopst); s = m->g->strip[ss]; switch (OP(s)) { case OBACK_: /* the vilest depths */ i = OPND(s); assert(0 < i && i <= m->g->nsub); if (m->pmatch[i].rm_eo == -1) return(NULL); assert(m->pmatch[i].rm_so != -1); len = m->pmatch[i].rm_eo - m->pmatch[i].rm_so; assert(stop - m->beginp >= len); if (sp > stop - len) return(NULL); /* not enough left to match */ ssp = m->offp + m->pmatch[i].rm_so; if (memcmp(sp, ssp, len) != 0) return(NULL); while (m->g->strip[ss] != SOP(O_BACK, i)) ss++; return(backref(m, sp+len, stop, ss+1, stopst, lev)); break; case OQUEST_: /* to null or not */ dp = backref(m, sp, stop, ss+1, stopst, lev); if (dp != NULL) return(dp); /* not */ return(backref(m, sp, stop, ss+OPND(s)+1, stopst, lev)); break; case OPLUS_: assert(m->lastpos != NULL); assert(lev+1 <= m->g->nplus); m->lastpos[lev+1] = sp; return(backref(m, sp, stop, ss+1, stopst, lev+1)); break; case O_PLUS: if (sp == m->lastpos[lev]) /* last pass matched null */ return(backref(m, sp, stop, ss+1, stopst, lev-1)); /* try another pass */ m->lastpos[lev] = sp; dp = backref(m, sp, stop, ss-OPND(s)+1, stopst, lev); if (dp == NULL) return(backref(m, sp, stop, ss+1, stopst, lev-1)); else return(dp); break; case OCH_: /* find the right one, if any */ ssub = ss + 1; esub = ss + OPND(s) - 1; assert(OP(m->g->strip[esub]) == OOR1); for (;;) { /* find first matching branch */ dp = backref(m, sp, stop, ssub, esub, lev); if (dp != NULL) return(dp); /* that one missed, try next one */ if (OP(m->g->strip[esub]) == O_CH) return(NULL); /* there is none */ esub++; assert(OP(m->g->strip[esub]) == OOR2); ssub = esub + 1; esub += OPND(m->g->strip[esub]); if (OP(m->g->strip[esub]) == OOR2) esub--; else assert(OP(m->g->strip[esub]) == O_CH); } break; case OLPAREN: /* must undo assignment if rest fails */ i = OPND(s); assert(0 < i && i <= m->g->nsub); offsave = m->pmatch[i].rm_so; m->pmatch[i].rm_so = sp - m->offp; dp = backref(m, sp, stop, ss+1, stopst, lev); if (dp != NULL) return(dp); m->pmatch[i].rm_so = offsave; return(NULL); break; case ORPAREN: /* must undo assignment if rest fails */ i = OPND(s); assert(0 < i && i <= m->g->nsub); offsave = m->pmatch[i].rm_eo; m->pmatch[i].rm_eo = sp - m->offp; dp = backref(m, sp, stop, ss+1, stopst, lev); if (dp != NULL) return(dp); m->pmatch[i].rm_eo = offsave; return(NULL); break; default: /* uh oh */ assert(nope); break; } /* "can't happen" */ assert(nope); /* NOTREACHED */ return((char *)NULL); /* dummy */ } /* - fast - step through the string at top speed == static char *fast(register struct match *m, char *start, \ == char *stop, sopno startst, sopno stopst); */ static char * /* where tentative match ended, or NULL */ fast(m, start, stop, startst, stopst) register struct match *m; char *start; char *stop; sopno startst; sopno stopst; { register states st = m->st; register states fresh = m->fresh; register states tmp = m->tmp; register char *p = start; register int c = (start == m->beginp) ? OUT : *(start-1); register int lastc; /* previous c */ register int flagch; register int i; register char *coldp; /* last p after which no match was underway */ CLEAR(st); SET1(st, startst); st = step(m->g, startst, stopst, st, NOTHING, st); ASSIGN(fresh, st); SP("start", st, *p); coldp = NULL; for (;;) { /* next character */ lastc = c; c = (p == m->endp) ? OUT : *p; if (EQ(st, fresh)) coldp = p; /* is there an EOL and/or BOL between lastc and c? */ flagch = '\0'; i = 0; if ( (lastc == '\n' && m->g->cflags®_NEWLINE) || (lastc == OUT && !(m->eflags®_NOTBOL)) ) { flagch = BOL; i = m->g->nbol; } if ( (c == '\n' && m->g->cflags®_NEWLINE) || (c == OUT && !(m->eflags®_NOTEOL)) ) { flagch = (flagch == BOL) ? BOLEOL : EOL; i += m->g->neol; } if (i != 0) { for (; i > 0; i--) st = step(m->g, startst, stopst, st, flagch, st); SP("boleol", st, c); } /* how about a word boundary? */ if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) && (c != OUT && ISWORD(c)) ) { flagch = BOW; } if ( (lastc != OUT && ISWORD(lastc)) && (flagch == EOL || (c != OUT && !ISWORD(c))) ) { flagch = EOW; } if (flagch == BOW || flagch == EOW) { st = step(m->g, startst, stopst, st, flagch, st); SP("boweow", st, c); } /* are we done? */ if (ISSET(st, stopst) || p == stop) break; /* NOTE BREAK OUT */ /* no, we must deal with this character */ ASSIGN(tmp, st); ASSIGN(st, fresh); assert(c != OUT); st = step(m->g, startst, stopst, tmp, c, st); SP("aft", st, c); assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st)); p++; } assert(coldp != NULL); m->coldp = coldp; if (ISSET(st, stopst)) return(p+1); else return(NULL); } /* - slow - step through the string more deliberately == static char *slow(register struct match *m, char *start, \ == char *stop, sopno startst, sopno stopst); */ static char * /* where it ended */ slow(m, start, stop, startst, stopst) register struct match *m; char *start; char *stop; sopno startst; sopno stopst; { register states st = m->st; register states empty = m->empty; register states tmp = m->tmp; register char *p = start; register int c = (start == m->beginp) ? OUT : *(start-1); register int lastc; /* previous c */ register int flagch; register int i; register char *matchp; /* last p at which a match ended */ AT("slow", start, stop, startst, stopst); CLEAR(st); SET1(st, startst); SP("sstart", st, *p); st = step(m->g, startst, stopst, st, NOTHING, st); matchp = NULL; for (;;) { /* next character */ lastc = c; c = (p == m->endp) ? OUT : *p; /* is there an EOL and/or BOL between lastc and c? */ flagch = '\0'; i = 0; if ( (lastc == '\n' && m->g->cflags®_NEWLINE) || (lastc == OUT && !(m->eflags®_NOTBOL)) ) { flagch = BOL; i = m->g->nbol; } if ( (c == '\n' && m->g->cflags®_NEWLINE) || (c == OUT && !(m->eflags®_NOTEOL)) ) { flagch = (flagch == BOL) ? BOLEOL : EOL; i += m->g->neol; } if (i != 0) { for (; i > 0; i--) st = step(m->g, startst, stopst, st, flagch, st); SP("sboleol", st, c); } /* how about a word boundary? */ if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) && (c != OUT && ISWORD(c)) ) { flagch = BOW; } if ( (lastc != OUT && ISWORD(lastc)) && (flagch == EOL || (c != OUT && !ISWORD(c))) ) { flagch = EOW; } if (flagch == BOW || flagch == EOW) { st = step(m->g, startst, stopst, st, flagch, st); SP("sboweow", st, c); } /* are we done? */ if (ISSET(st, stopst)) matchp = p; if (EQ(st, empty) || p == stop) break; /* NOTE BREAK OUT */ /* no, we must deal with this character */ ASSIGN(tmp, st); ASSIGN(st, empty); assert(c != OUT); st = step(m->g, startst, stopst, tmp, c, st); SP("saft", st, c); assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st)); p++; } return(matchp); } /* - step - map set of states reachable before char to set reachable after == static states step(register struct re_guts *g, sopno start, sopno stop, \ == register states bef, int ch, register states aft); == #define BOL (OUT+1) == #define EOL (BOL+1) == #define BOLEOL (BOL+2) == #define NOTHING (BOL+3) == #define BOW (BOL+4) == #define EOW (BOL+5) == #define CODEMAX (BOL+5) // highest code used == #define NONCHAR(c) ((c) > CHAR_MAX) == #define NNONCHAR (CODEMAX-CHAR_MAX) */ static states step(g, start, stop, bef, ch, aft) register struct re_guts *g; sopno start; /* start state within strip */ sopno stop; /* state after stop state within strip */ register states bef; /* states reachable before */ int ch; /* character or NONCHAR code */ register states aft; /* states already known reachable after */ { register cset *cs; register sop s; register sopno pc; register onestate here; /* note, macros know this name */ register sopno look; register long i; for (pc = start, INIT(here, pc); pc != stop; pc++, INC(here)) { s = g->strip[pc]; switch (OP(s)) { case OEND: assert(pc == stop-1); break; case OCHAR: /* only characters can match */ assert(!NONCHAR(ch) || ch != (char)OPND(s)); if (ch == (char)OPND(s)) FWD(aft, bef, 1); break; case OBOL: if (ch == BOL || ch == BOLEOL) FWD(aft, bef, 1); break; case OEOL: if (ch == EOL || ch == BOLEOL) FWD(aft, bef, 1); break; case OBOW: if (ch == BOW) FWD(aft, bef, 1); break; case OEOW: if (ch == EOW) FWD(aft, bef, 1); break; case OANY: if (!NONCHAR(ch)) FWD(aft, bef, 1); break; case OANYOF: cs = &g->sets[OPND(s)]; if (!NONCHAR(ch) && CHIN(cs, ch)) FWD(aft, bef, 1); break; case OBACK_: /* ignored here */ case O_BACK: FWD(aft, aft, 1); break; case OPLUS_: /* forward, this is just an empty */ FWD(aft, aft, 1); break; case O_PLUS: /* both forward and back */ FWD(aft, aft, 1); i = ISSETBACK(aft, OPND(s)); BACK(aft, aft, OPND(s)); if (!i && ISSETBACK(aft, OPND(s))) { /* oho, must reconsider loop body */ pc -= OPND(s) + 1; INIT(here, pc); } break; case OQUEST_: /* two branches, both forward */ FWD(aft, aft, 1); FWD(aft, aft, OPND(s)); break; case O_QUEST: /* just an empty */ FWD(aft, aft, 1); break; case OLPAREN: /* not significant here */ case ORPAREN: FWD(aft, aft, 1); break; case OCH_: /* mark the first two branches */ FWD(aft, aft, 1); assert(OP(g->strip[pc+OPND(s)]) == OOR2); FWD(aft, aft, OPND(s)); break; case OOR1: /* done a branch, find the O_CH */ if (ISSTATEIN(aft, here)) { for (look = 1; OP(s = g->strip[pc+look]) != O_CH; look += OPND(s)) assert(OP(s) == OOR2); FWD(aft, aft, look); } break; case OOR2: /* propagate OCH_'s marking */ FWD(aft, aft, 1); if (OP(g->strip[pc+OPND(s)]) != O_CH) { assert(OP(g->strip[pc+OPND(s)]) == OOR2); FWD(aft, aft, OPND(s)); } break; case O_CH: /* just empty */ FWD(aft, aft, 1); break; default: /* ooooops... */ assert(nope); break; } } return(aft); } #ifdef REDEBUG /* - print - print a set of states == #ifdef REDEBUG == static void print(struct match *m, char *caption, states st, \ == int ch, FILE *d); == #endif */ static void print(m, caption, st, ch, d) struct match *m; char *caption; states st; int ch; FILE *d; { register struct re_guts *g = m->g; register int i; register int first = 1; if (!(m->eflags®_TRACE)) return; fprintf(d, "%s", caption); if (ch != '\0') fprintf(d, " %s", pchar(ch)); for (i = 0; i < g->nstates; i++) if (ISSET(st, i)) { fprintf(d, "%s%d", (first) ? "\t" : ", ", i); first = 0; } fprintf(d, "\n"); } /* - at - print current situation == #ifdef REDEBUG == static void at(struct match *m, char *title, char *start, char *stop, \ == sopno startst, sopno stopst); == #endif */ static void at(m, title, start, stop, startst, stopst) struct match *m; char *title; char *start; char *stop; sopno startst; sopno stopst; { if (!(m->eflags®_TRACE)) return; printf("%s %s-", title, pchar(*start)); printf("%s ", pchar(*stop)); printf("%ld-%ld\n", (long)startst, (long)stopst); } #ifndef PCHARDONE #define PCHARDONE /* never again */ /* - pchar - make a character printable == #ifdef REDEBUG == static char *pchar(int ch); == #endif * * Is this identical to regchar() over in debug.c? Well, yes. But a * duplicate here avoids having a debugging-capable regexec.o tied to * a matching debug.o, and this is convenient. It all disappears in * the non-debug compilation anyway, so it doesn't matter much. */ static char * /* -> representation */ pchar(ch) int ch; { static char pbuf[10]; if (isprint(ch) || ch == ' ') sprintf(pbuf, "%c", ch); else sprintf(pbuf, "\\%o", ch); return(pbuf); } #endif #endif #undef matcher #undef fast #undef slow #undef dissect #undef backref #undef step #undef print #undef at #undef match cups-2.2.7/vcnet/regex/engine.ih000664 000765 000024 00000002535 13255074424 017200 0ustar00msweetstaff000000 000000 /* ========= begin header generated by ./mkh ========= */ #ifdef __cplusplus extern "C" { #endif /* === engine.c === */ static int matcher(register struct re_guts *g, char *string, size_t nmatch, regmatch_t pmatch[], int eflags); static char *dissect(register struct match *m, char *start, char *stop, sopno startst, sopno stopst); static char *backref(register struct match *m, char *start, char *stop, sopno startst, sopno stopst, sopno lev); static char *fast(register struct match *m, char *start, char *stop, sopno startst, sopno stopst); static char *slow(register struct match *m, char *start, char *stop, sopno startst, sopno stopst); static states step(register struct re_guts *g, sopno start, sopno stop, register states bef, int ch, register states aft); #define BOL (OUT+1) #define EOL (BOL+1) #define BOLEOL (BOL+2) #define NOTHING (BOL+3) #define BOW (BOL+4) #define EOW (BOL+5) #define CODEMAX (BOL+5) /* highest code used */ #define NONCHAR(c) ((c) > CHAR_MAX) #define NNONCHAR (CODEMAX-CHAR_MAX) #ifdef REDEBUG static void print(struct match *m, char *caption, states st, int ch, FILE *d); #endif #ifdef REDEBUG static void at(struct match *m, char *title, char *start, char *stop, sopno startst, sopno stopst); #endif #ifdef REDEBUG static char *pchar(int ch); #endif #ifdef __cplusplus } #endif /* ========= end header generated by ./mkh ========= */ cups-2.2.7/vcnet/regex/main.c000664 000765 000024 00000025621 13255074424 016502 0ustar00msweetstaff000000 000000 #include #include #include #include #include #include "main.ih" char *progname; int debug = 0; int line = 0; int status = 0; int copts = REG_EXTENDED; int eopts = 0; regoff_t startoff = 0; regoff_t endoff = 0; extern int split(); extern void regprint(); /* - main - do the simple case, hand off to regress() for regression */ main(argc, argv) int argc; char *argv[]; { regex_t re; # define NS 10 regmatch_t subs[NS]; char erbuf[100]; int err; size_t len; int c; int errflg = 0; register int i; extern int optind; extern char *optarg; progname = argv[0]; while ((c = getopt(argc, argv, "c:e:S:E:x")) != EOF) switch (c) { case 'c': /* compile options */ copts = options('c', optarg); break; case 'e': /* execute options */ eopts = options('e', optarg); break; case 'S': /* start offset */ startoff = (regoff_t)atoi(optarg); break; case 'E': /* end offset */ endoff = (regoff_t)atoi(optarg); break; case 'x': /* Debugging. */ debug++; break; case '?': default: errflg++; break; } if (errflg) { fprintf(stderr, "usage: %s ", progname); fprintf(stderr, "[-c copt][-C][-d] [re]\n"); exit(2); } if (optind >= argc) { regress(stdin); exit(status); } err = regcomp(&re, argv[optind++], copts); if (err) { len = regerror(err, &re, erbuf, sizeof(erbuf)); fprintf(stderr, "error %s, %d/%d `%s'\n", eprint(err), len, sizeof(erbuf), erbuf); exit(status); } regprint(&re, stdout); if (optind >= argc) { regfree(&re); exit(status); } if (eopts®_STARTEND) { subs[0].rm_so = startoff; subs[0].rm_eo = strlen(argv[optind]) - endoff; } err = regexec(&re, argv[optind], (size_t)NS, subs, eopts); if (err) { len = regerror(err, &re, erbuf, sizeof(erbuf)); fprintf(stderr, "error %s, %d/%d `%s'\n", eprint(err), len, sizeof(erbuf), erbuf); exit(status); } if (!(copts®_NOSUB)) { len = (int)(subs[0].rm_eo - subs[0].rm_so); if (subs[0].rm_so != -1) { if (len != 0) printf("match `%.*s'\n", len, argv[optind] + subs[0].rm_so); else printf("match `'@%.1s\n", argv[optind] + subs[0].rm_so); } for (i = 1; i < NS; i++) if (subs[i].rm_so != -1) printf("(%d) `%.*s'\n", i, (int)(subs[i].rm_eo - subs[i].rm_so), argv[optind] + subs[i].rm_so); } exit(status); } /* - regress - main loop of regression test == void regress(FILE *in); */ void regress(in) FILE *in; { char inbuf[1000]; # define MAXF 10 char *f[MAXF]; int nf; int i; char erbuf[100]; size_t ne; char *badpat = "invalid regular expression"; # define SHORT 10 char *bpname = "REG_BADPAT"; regex_t re; while (fgets(inbuf, sizeof(inbuf), in) != NULL) { line++; if (inbuf[0] == '#' || inbuf[0] == '\n') continue; /* NOTE CONTINUE */ inbuf[strlen(inbuf)-1] = '\0'; /* get rid of stupid \n */ if (debug) fprintf(stdout, "%d:\n", line); nf = split(inbuf, f, MAXF, "\t\t"); if (nf < 3) { fprintf(stderr, "bad input, line %d\n", line); exit(1); } for (i = 0; i < nf; i++) if (strcmp(f[i], "\"\"") == 0) f[i] = ""; if (nf <= 3) f[3] = NULL; if (nf <= 4) f[4] = NULL; try(f[0], f[1], f[2], f[3], f[4], options('c', f[1])); if (opt('&', f[1])) /* try with either type of RE */ try(f[0], f[1], f[2], f[3], f[4], options('c', f[1]) &~ REG_EXTENDED); } ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf)); if (strcmp(erbuf, badpat) != 0 || ne != strlen(badpat)+1) { fprintf(stderr, "end: regerror() test gave `%s' not `%s'\n", erbuf, badpat); status = 1; } ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, (size_t)SHORT); if (strncmp(erbuf, badpat, SHORT-1) != 0 || erbuf[SHORT-1] != '\0' || ne != strlen(badpat)+1) { fprintf(stderr, "end: regerror() short test gave `%s' not `%.*s'\n", erbuf, SHORT-1, badpat); status = 1; } ne = regerror(REG_ITOA|REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf)); if (strcmp(erbuf, bpname) != 0 || ne != strlen(bpname)+1) { fprintf(stderr, "end: regerror() ITOA test gave `%s' not `%s'\n", erbuf, bpname); status = 1; } re.re_endp = bpname; ne = regerror(REG_ATOI, &re, erbuf, sizeof(erbuf)); if (atoi(erbuf) != (int)REG_BADPAT) { fprintf(stderr, "end: regerror() ATOI test gave `%s' not `%ld'\n", erbuf, (long)REG_BADPAT); status = 1; } else if (ne != strlen(erbuf)+1) { fprintf(stderr, "end: regerror() ATOI test len(`%s') = %ld\n", erbuf, (long)REG_BADPAT); status = 1; } } /* - try - try it, and report on problems == void try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts); */ void try(f0, f1, f2, f3, f4, opts) char *f0; char *f1; char *f2; char *f3; char *f4; int opts; /* may not match f1 */ { regex_t re; # define NSUBS 10 regmatch_t subs[NSUBS]; # define NSHOULD 15 char *should[NSHOULD]; int nshould; char erbuf[100]; int err; int len; char *type = (opts & REG_EXTENDED) ? "ERE" : "BRE"; register int i; char *grump; char f0copy[1000]; char f2copy[1000]; strcpy(f0copy, f0); re.re_endp = (opts®_PEND) ? f0copy + strlen(f0copy) : NULL; fixstr(f0copy); err = regcomp(&re, f0copy, opts); if (err != 0 && (!opt('C', f1) || err != efind(f2))) { /* unexpected error or wrong error */ len = regerror(err, &re, erbuf, sizeof(erbuf)); fprintf(stderr, "%d: %s error %s, %d/%d `%s'\n", line, type, eprint(err), len, sizeof(erbuf), erbuf); status = 1; } else if (err == 0 && opt('C', f1)) { /* unexpected success */ fprintf(stderr, "%d: %s should have given REG_%s\n", line, type, f2); status = 1; err = 1; /* so we won't try regexec */ } if (err != 0) { regfree(&re); return; } strcpy(f2copy, f2); fixstr(f2copy); if (options('e', f1)®_STARTEND) { if (strchr(f2, '(') == NULL || strchr(f2, ')') == NULL) fprintf(stderr, "%d: bad STARTEND syntax\n", line); subs[0].rm_so = strchr(f2, '(') - f2 + 1; subs[0].rm_eo = strchr(f2, ')') - f2; } err = regexec(&re, f2copy, NSUBS, subs, options('e', f1)); if (err != 0 && (f3 != NULL || err != REG_NOMATCH)) { /* unexpected error or wrong error */ len = regerror(err, &re, erbuf, sizeof(erbuf)); fprintf(stderr, "%d: %s exec error %s, %d/%d `%s'\n", line, type, eprint(err), len, sizeof(erbuf), erbuf); status = 1; } else if (err != 0) { /* nothing more to check */ } else if (f3 == NULL) { /* unexpected success */ fprintf(stderr, "%d: %s exec should have failed\n", line, type); status = 1; err = 1; /* just on principle */ } else if (opts®_NOSUB) { /* nothing more to check */ } else if ((grump = check(f2, subs[0], f3)) != NULL) { fprintf(stderr, "%d: %s %s\n", line, type, grump); status = 1; err = 1; } if (err != 0 || f4 == NULL) { regfree(&re); return; } for (i = 1; i < NSHOULD; i++) should[i] = NULL; nshould = split(f4, should+1, NSHOULD-1, ","); if (nshould == 0) { nshould = 1; should[1] = ""; } for (i = 1; i < NSUBS; i++) { grump = check(f2, subs[i], should[i]); if (grump != NULL) { fprintf(stderr, "%d: %s $%d %s\n", line, type, i, grump); status = 1; err = 1; } } regfree(&re); } /* - options - pick options out of a regression-test string == int options(int type, char *s); */ int options(type, s) int type; /* 'c' compile, 'e' exec */ char *s; { register char *p; register int o = (type == 'c') ? copts : eopts; register char *legal = (type == 'c') ? "bisnmp" : "^$#tl"; for (p = s; *p != '\0'; p++) if (strchr(legal, *p) != NULL) switch (*p) { case 'b': o &= ~REG_EXTENDED; break; case 'i': o |= REG_ICASE; break; case 's': o |= REG_NOSUB; break; case 'n': o |= REG_NEWLINE; break; case 'm': o &= ~REG_EXTENDED; o |= REG_NOSPEC; break; case 'p': o |= REG_PEND; break; case '^': o |= REG_NOTBOL; break; case '$': o |= REG_NOTEOL; break; case '#': o |= REG_STARTEND; break; case 't': /* trace */ o |= REG_TRACE; break; case 'l': /* force long representation */ o |= REG_LARGE; break; case 'r': /* force backref use */ o |= REG_BACKR; break; } return(o); } /* - opt - is a particular option in a regression string? == int opt(int c, char *s); */ int /* predicate */ opt(c, s) int c; char *s; { return(strchr(s, c) != NULL); } /* - fixstr - transform magic characters in strings == void fixstr(register char *p); */ void fixstr(p) register char *p; { if (p == NULL) return; for (; *p != '\0'; p++) if (*p == 'N') *p = '\n'; else if (*p == 'T') *p = '\t'; else if (*p == 'S') *p = ' '; else if (*p == 'Z') *p = '\0'; } /* - check - check a substring match == char *check(char *str, regmatch_t sub, char *should); */ char * /* NULL or complaint */ check(str, sub, should) char *str; regmatch_t sub; char *should; { register int len; register int shlen; register char *p; static char grump[500]; register char *at = NULL; if (should != NULL && strcmp(should, "-") == 0) should = NULL; if (should != NULL && should[0] == '@') { at = should + 1; should = ""; } /* check rm_so and rm_eo for consistency */ if (sub.rm_so > sub.rm_eo || (sub.rm_so == -1 && sub.rm_eo != -1) || (sub.rm_so != -1 && sub.rm_eo == -1) || (sub.rm_so != -1 && sub.rm_so < 0) || (sub.rm_eo != -1 && sub.rm_eo < 0) ) { sprintf(grump, "start %ld end %ld", (long)sub.rm_so, (long)sub.rm_eo); return(grump); } /* check for no match */ if (sub.rm_so == -1 && should == NULL) return(NULL); if (sub.rm_so == -1) return("did not match"); /* check for in range */ if (sub.rm_eo > strlen(str)) { sprintf(grump, "start %ld end %ld, past end of string", (long)sub.rm_so, (long)sub.rm_eo); return(grump); } len = (int)(sub.rm_eo - sub.rm_so); shlen = (int)strlen(should); p = str + sub.rm_so; /* check for not supposed to match */ if (should == NULL) { sprintf(grump, "matched `%.*s'", len, p); return(grump); } /* check for wrong match */ if (len != shlen || strncmp(p, should, (size_t)shlen) != 0) { sprintf(grump, "matched `%.*s' instead", len, p); return(grump); } if (shlen > 0) return(NULL); /* check null match in right place */ if (at == NULL) return(NULL); shlen = strlen(at); if (shlen == 0) shlen = 1; /* force check for end-of-string */ if (strncmp(p, at, shlen) != 0) { sprintf(grump, "matched null at `%.20s'", p); return(grump); } return(NULL); } /* - eprint - convert error number to name == static char *eprint(int err); */ static char * eprint(err) int err; { static char epbuf[100]; size_t len; len = regerror(REG_ITOA|err, (regex_t *)NULL, epbuf, sizeof(epbuf)); assert(len <= sizeof(epbuf)); return(epbuf); } /* - efind - convert error name to number == static int efind(char *name); */ static int efind(name) char *name; { static char efbuf[100]; size_t n; regex_t re; sprintf(efbuf, "REG_%s", name); assert(strlen(efbuf) < sizeof(efbuf)); re.re_endp = efbuf; (void) regerror(REG_ATOI, &re, efbuf, sizeof(efbuf)); return(atoi(efbuf)); } cups-2.2.7/vcnet/regex/main.ih000664 000765 000024 00000000764 13255074424 016661 0ustar00msweetstaff000000 000000 /* ========= begin header generated by ./mkh ========= */ #ifdef __cplusplus extern "C" { #endif /* === main.c === */ void regress(FILE *in); void try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts); int options(int type, char *s); int opt(int c, char *s); void fixstr(register char *p); char *check(char *str, regmatch_t sub, char *should); static char *eprint(int err); static int efind(char *name); #ifdef __cplusplus } #endif /* ========= end header generated by ./mkh ========= */ cups-2.2.7/vcnet/regex/Makefile000664 000765 000024 00000006067 13255074424 017055 0ustar00msweetstaff000000 000000 # You probably want to take -DREDEBUG out of CFLAGS, and put something like # -O in, *after* testing (-DREDEBUG strengthens testing by enabling a lot of # internal assertion checking and some debugging facilities). # Put -Dconst= in for a pre-ANSI compiler. # Do not take -DPOSIX_MISTAKE out. # REGCFLAGS isn't important to you (it's for my use in some special contexts). CFLAGS=-I. -DPOSIX_MISTAKE -DREDEBUG $(REGCFLAGS) # If you have a pre-ANSI compiler, put -o into MKHFLAGS. If you want # the Berkeley __P macro, put -b in. MKHFLAGS= # Flags for linking but not compiling, if any. LDFLAGS= # Extra libraries for linking, if any. LIBS= # Internal stuff, should not need changing. OBJPRODN=regcomp.o regexec.o regerror.o regfree.o OBJS=$(OBJPRODN) split.o debug.o main.o H=cclass.h cname.h regex2.h utils.h REGSRC=regcomp.c regerror.c regexec.c regfree.c ALLSRC=$(REGSRC) engine.c debug.c main.c split.c # Stuff that matters only if you're trying to lint the package. LINTFLAGS=-I. -Dstatic= -Dconst= -DREDEBUG LINTC=regcomp.c regexec.c regerror.c regfree.c debug.c main.c JUNKLINT=possible pointer alignment|null effect # arrangements to build forward-reference header files .SUFFIXES: .ih .h .c.ih: sh ./mkh $(MKHFLAGS) -p $< >$@ default: r lib: purge $(OBJPRODN) rm -f libregex.a ar crv libregex.a $(OBJPRODN) purge: rm -f *.o # stuff to build regex.h REGEXH=regex.h REGEXHSRC=regex2.h $(REGSRC) $(REGEXH): $(REGEXHSRC) mkh sh ./mkh $(MKHFLAGS) -i _REGEX_H_ $(REGEXHSRC) >regex.tmp cmp -s regex.tmp regex.h 2>/dev/null || cp regex.tmp regex.h rm -f regex.tmp # dependencies $(OBJPRODN) debug.o: utils.h regex.h regex2.h regcomp.o: cclass.h cname.h regcomp.ih regexec.o: engine.c engine.ih regerror.o: regerror.ih debug.o: debug.ih main.o: main.ih # tester re: $(OBJS) $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ # regression test r: re tests ./re &1 | egrep -v '$(JUNKLINT)' | tee lint fullprint: ti README WHATSNEW notes todo | list ti *.h | list list *.c list regex.3 regex.7 print: ti README WHATSNEW notes todo | list ti *.h | list list reg*.c engine.c mf.tmp: Makefile sed '/^REGEXH=/s/=.*/=regex.h/' Makefile | sed '/#DEL$$/d' >$@ DTRH=cclass.h cname.h regex2.h utils.h PRE=COPYRIGHT README WHATSNEW POST=mkh regex.3 regex.7 tests $(DTRH) $(ALLSRC) fake/*.[ch] FILES=$(PRE) Makefile $(POST) DTR=$(PRE) Makefile=mf.tmp $(POST) dtr: $(FILES) mf.tmp makedtr $(DTR) >$@ rm mf.tmp cio: $(FILES) cio $(FILES) rdf: $(FILES) rcsdiff -c $(FILES) 2>&1 | p # various forms of cleanup tidy: rm -f junk* core core.* *.core dtr *.tmp lint clean: tidy rm -f *.o *.s *.ih re libregex.a # don't do this one unless you know what you're doing spotless: clean rm -f mkh regex.h cups-2.2.7/vcnet/regex/mkh000664 000765 000024 00000003441 13255074424 016110 0ustar00msweetstaff000000 000000 #! /bin/sh # mkh - pull headers out of C source PATH=/bin:/usr/bin ; export PATH # egrep pattern to pick out marked lines egrep='^ =([ ]|$)' # Sed program to process marked lines into lines for the header file. # The markers have already been removed. Two things are done here: removal # of backslashed newlines, and some fudging of comments. The first is done # because -o needs to have prototypes on one line to strip them down. # Getting comments into the output is tricky; we turn C++-style // comments # into /* */ comments, after altering any existing */'s to avoid trouble. peel=' /\\$/N /\\\n[ ]*/s///g /\/\//s;\*/;* /;g /\/\//s;//\(.*\);/*\1 */;' for a do case "$a" in -o) # old (pre-function-prototype) compiler # add code to comment out argument lists peel="$peel "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1(/*\2*/);' shift ;; -b) # funny Berkeley __P macro peel="$peel "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1 __P((\2));' shift ;; -s) # compiler doesn't like `static foo();' # add code to get rid of the `static' peel="$peel "'/^static[ ][^\/]*[a-zA-Z0-9_)](.*)/s;static.;;' shift ;; -p) # private declarations egrep='^ ==([ ]|$)' shift ;; -i) # wrap in #ifndef, argument is name ifndef="$2" shift ; shift ;; *) break ;; esac done if test " $ifndef" != " " then echo "#ifndef $ifndef" echo "#define $ifndef /* never again */" fi echo "/* ========= begin header generated by $0 ========= */" echo '#ifdef __cplusplus' echo 'extern "C" {' echo '#endif' for f do echo echo "/* === $f === */" egrep "$egrep" $f | sed 's/^ ==*[ ]//;s/^ ==*$//' | sed "$peel" echo done echo '#ifdef __cplusplus' echo '}' echo '#endif' echo "/* ========= end header generated by $0 ========= */" if test " $ifndef" != " " then echo "#endif" fi exit 0 cups-2.2.7/vcnet/regex/README000664 000765 000024 00000002343 13255074424 016266 0ustar00msweetstaff000000 000000 alpha3.8 release. Tue Aug 10 15:51:48 EDT 1999 henry@spsystems.net (formerly henry@zoo.toronto.edu) See WHATSNEW for change listing. installation notes: -------- Read the comments at the beginning of Makefile before running. Utils.h contains some things that just might have to be modified on some systems, as well as a nested include (ugh) of . The "fake" directory contains quick-and-dirty fakes for some header files and routines that old systems may not have. Note also that -DUSEBCOPY will make utils.h substitute bcopy() for memmove(). After that, "make r" will build regcomp.o, regexec.o, regfree.o, and regerror.o (the actual routines), bundle them together into a test program, and run regression tests on them. No output is good output. "make lib" builds just the .o files for the actual routines (when you're happy with testing and have adjusted CFLAGS for production), and puts them together into libregex.a. You can pick up either the library or *.o ("make lib" makes sure there are no other .o files left around to confuse things). Main.c, debug.c, split.c are used for regression testing but are not part of the RE routines themselves. Regex.h goes in /usr/include. All other .h files are internal only. -------- cups-2.2.7/vcnet/regex/regcomp.c000664 000765 000024 00000110663 13255074424 017213 0ustar00msweetstaff000000 000000 #include #include #include #include #include #include #include #include "utils.h" #include "regex2.h" #include "cclass.h" #include "cname.h" /* * parse structure, passed up and down to avoid global variables and * other clumsinesses */ struct parse { char *next; /* next character in RE */ char *end; /* end of string (-> NUL normally) */ int error; /* has an error been seen? */ sop *strip; /* malloced strip */ sopno ssize; /* malloced strip size (allocated) */ sopno slen; /* malloced strip length (used) */ int ncsalloc; /* number of csets allocated */ struct re_guts *g; # define NPAREN 10 /* we need to remember () 1-9 for back refs */ sopno pbegin[NPAREN]; /* -> ( ([0] unused) */ sopno pend[NPAREN]; /* -> ) ([0] unused) */ }; #include "regcomp.ih" static char nuls[10]; /* place to point scanner in event of error */ /* * macros for use with parse structure * BEWARE: these know that the parse structure is named `p' !!! */ #define PEEK() (*p->next) #define PEEK2() (*(p->next+1)) #define MORE() (p->next < p->end) #define MORE2() (p->next+1 < p->end) #define SEE(c) (MORE() && PEEK() == (c)) #define SEETWO(a, b) (MORE() && MORE2() && PEEK() == (a) && PEEK2() == (b)) #define EAT(c) ((SEE(c)) ? (NEXT(), 1) : 0) #define EATTWO(a, b) ((SEETWO(a, b)) ? (NEXT2(), 1) : 0) #define NEXT() (p->next++) #define NEXT2() (p->next += 2) #define NEXTn(n) (p->next += (n)) #define GETNEXT() (*p->next++) #define SETERROR(e) seterr(p, (e)) #define REQUIRE(co, e) ((co) || SETERROR(e)) #define MUSTSEE(c, e) (REQUIRE(MORE() && PEEK() == (c), e)) #define MUSTEAT(c, e) (REQUIRE(MORE() && GETNEXT() == (c), e)) #define MUSTNOTSEE(c, e) (REQUIRE(!MORE() || PEEK() != (c), e)) #define EMIT(op, sopnd) doemit(p, (sop)(op), (size_t)(sopnd)) #define INSERT(op, pos) doinsert(p, (sop)(op), HERE()-(pos)+1, pos) #define AHEAD(pos) dofwd(p, pos, HERE()-(pos)) #define ASTERN(sop, pos) EMIT(sop, HERE()-pos) #define HERE() (p->slen) #define THERE() (p->slen - 1) #define THERETHERE() (p->slen - 2) #define DROP(n) (p->slen -= (n)) #ifndef NDEBUG static int never = 0; /* for use in asserts; shuts lint up */ #else #define never 0 /* some s have bugs too */ #endif /* - regcomp - interface for parser and compilation = extern int regcomp(regex_t *, const char *, int); = #define REG_BASIC 0000 = #define REG_EXTENDED 0001 = #define REG_ICASE 0002 = #define REG_NOSUB 0004 = #define REG_NEWLINE 0010 = #define REG_NOSPEC 0020 = #define REG_PEND 0040 = #define REG_DUMP 0200 */ int /* 0 success, otherwise REG_something */ regcomp(preg, pattern, cflags) regex_t *preg; const char *pattern; int cflags; { struct parse pa; register struct re_guts *g; register struct parse *p = &pa; register int i; register size_t len; #ifdef REDEBUG # define GOODFLAGS(f) (f) #else # define GOODFLAGS(f) ((f)&~REG_DUMP) #endif cflags = GOODFLAGS(cflags); if ((cflags®_EXTENDED) && (cflags®_NOSPEC)) return(REG_INVARG); if (cflags®_PEND) { if (preg->re_endp < pattern) return(REG_INVARG); len = preg->re_endp - pattern; } else len = strlen((char *)pattern); /* do the mallocs early so failure handling is easy */ g = (struct re_guts *)malloc(sizeof(struct re_guts) + (NC-1)*sizeof(cat_t)); if (g == NULL) return(REG_ESPACE); p->ssize = len/(size_t)2*(size_t)3 + (size_t)1; /* ugh */ p->strip = (sop *)malloc(p->ssize * sizeof(sop)); p->slen = 0; if (p->strip == NULL) { free((char *)g); return(REG_ESPACE); } /* set things up */ p->g = g; p->next = (char *)pattern; /* convenience; we do not modify it */ p->end = p->next + len; p->error = 0; p->ncsalloc = 0; for (i = 0; i < NPAREN; i++) { p->pbegin[i] = 0; p->pend[i] = 0; } g->csetsize = NC; g->sets = NULL; g->setbits = NULL; g->ncsets = 0; g->cflags = cflags; g->iflags = 0; g->nbol = 0; g->neol = 0; g->must = NULL; g->mlen = 0; g->nsub = 0; g->ncategories = 1; /* category 0 is "everything else" */ g->categories = &g->catspace[-(CHAR_MIN)]; (void) memset((char *)g->catspace, 0, NC*sizeof(cat_t)); g->backrefs = 0; /* do it */ EMIT(OEND, 0); g->firststate = THERE(); if (cflags®_EXTENDED) p_ere(p, OUT); else if (cflags®_NOSPEC) p_str(p); else p_bre(p, OUT, OUT); EMIT(OEND, 0); g->laststate = THERE(); /* tidy up loose ends and fill things in */ categorize(p, g); stripsnug(p, g); findmust(p, g); g->nplus = pluscount(p, g); g->magic = MAGIC2; preg->re_nsub = g->nsub; preg->re_g = g; preg->re_magic = MAGIC1; #ifndef REDEBUG /* not debugging, so can't rely on the assert() in regexec() */ if (g->iflags&BAD) SETERROR(REG_ASSERT); #endif /* win or lose, we're done */ if (p->error != 0) /* lose */ regfree(preg); return(p->error); } /* - p_ere - ERE parser top level, concatenation and alternation == static void p_ere(register struct parse *p, int stop); */ static void p_ere(p, stop) register struct parse *p; int stop; /* character this ERE should end at */ { register char c; register sopno prevback; register sopno prevfwd; register sopno conc; register int first = 1; /* is this the first alternative? */ for (;;) { /* do a bunch of concatenated expressions */ conc = HERE(); while (MORE() && (c = PEEK()) != '|' && c != stop) p_ere_exp(p); REQUIRE(HERE() != conc, REG_EMPTY); /* require nonempty */ if (!EAT('|')) break; /* NOTE BREAK OUT */ if (first) { INSERT(OCH_, conc); /* offset is wrong */ prevfwd = conc; prevback = conc; first = 0; } ASTERN(OOR1, prevback); prevback = THERE(); AHEAD(prevfwd); /* fix previous offset */ prevfwd = HERE(); EMIT(OOR2, 0); /* offset is very wrong */ } if (!first) { /* tail-end fixups */ AHEAD(prevfwd); ASTERN(O_CH, prevback); } assert(!MORE() || SEE(stop)); } /* - p_ere_exp - parse one subERE, an atom possibly followed by a repetition op == static void p_ere_exp(register struct parse *p); */ static void p_ere_exp(p) register struct parse *p; { register char c; register sopno pos; register int count; register int count2; register sopno subno; int wascaret = 0; assert(MORE()); /* caller should have ensured this */ c = GETNEXT(); pos = HERE(); switch (c) { case '(': REQUIRE(MORE(), REG_EPAREN); p->g->nsub++; subno = p->g->nsub; if (subno < NPAREN) p->pbegin[subno] = HERE(); EMIT(OLPAREN, subno); if (!SEE(')')) p_ere(p, ')'); if (subno < NPAREN) { p->pend[subno] = HERE(); assert(p->pend[subno] != 0); } EMIT(ORPAREN, subno); MUSTEAT(')', REG_EPAREN); break; #ifndef POSIX_MISTAKE case ')': /* happens only if no current unmatched ( */ /* * You may ask, why the ifndef? Because I didn't notice * this until slightly too late for 1003.2, and none of the * other 1003.2 regular-expression reviewers noticed it at * all. So an unmatched ) is legal POSIX, at least until * we can get it fixed. */ SETERROR(REG_EPAREN); break; #endif case '^': EMIT(OBOL, 0); p->g->iflags |= USEBOL; p->g->nbol++; wascaret = 1; break; case '$': EMIT(OEOL, 0); p->g->iflags |= USEEOL; p->g->neol++; break; case '|': SETERROR(REG_EMPTY); break; case '*': case '+': case '?': SETERROR(REG_BADRPT); break; case '.': if (p->g->cflags®_NEWLINE) nonnewline(p); else EMIT(OANY, 0); break; case '[': p_bracket(p); break; case '\\': REQUIRE(MORE(), REG_EESCAPE); c = GETNEXT(); ordinary(p, c); break; case '{': /* okay as ordinary except if digit follows */ REQUIRE(!MORE() || !isdigit(PEEK()), REG_BADRPT); /* FALLTHROUGH */ default: ordinary(p, c); break; } if (!MORE()) return; c = PEEK(); /* we call { a repetition if followed by a digit */ if (!( c == '*' || c == '+' || c == '?' || (c == '{' && MORE2() && isdigit(PEEK2())) )) return; /* no repetition, we're done */ NEXT(); REQUIRE(!wascaret, REG_BADRPT); switch (c) { case '*': /* implemented as +? */ /* this case does not require the (y|) trick, noKLUDGE */ INSERT(OPLUS_, pos); ASTERN(O_PLUS, pos); INSERT(OQUEST_, pos); ASTERN(O_QUEST, pos); break; case '+': INSERT(OPLUS_, pos); ASTERN(O_PLUS, pos); break; case '?': /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */ INSERT(OCH_, pos); /* offset slightly wrong */ ASTERN(OOR1, pos); /* this one's right */ AHEAD(pos); /* fix the OCH_ */ EMIT(OOR2, 0); /* offset very wrong... */ AHEAD(THERE()); /* ...so fix it */ ASTERN(O_CH, THERETHERE()); break; case '{': count = p_count(p); if (EAT(',')) { if (isdigit(PEEK())) { count2 = p_count(p); REQUIRE(count <= count2, REG_BADBR); } else /* single number with comma */ count2 = INFINITY; } else /* just a single number */ count2 = count; repeat(p, pos, count, count2); if (!EAT('}')) { /* error heuristics */ while (MORE() && PEEK() != '}') NEXT(); REQUIRE(MORE(), REG_EBRACE); SETERROR(REG_BADBR); } break; } if (!MORE()) return; c = PEEK(); if (!( c == '*' || c == '+' || c == '?' || (c == '{' && MORE2() && isdigit(PEEK2())) ) ) return; SETERROR(REG_BADRPT); } /* - p_str - string (no metacharacters) "parser" == static void p_str(register struct parse *p); */ static void p_str(p) register struct parse *p; { REQUIRE(MORE(), REG_EMPTY); while (MORE()) ordinary(p, GETNEXT()); } /* - p_bre - BRE parser top level, anchoring and concatenation == static void p_bre(register struct parse *p, register int end1, \ == register int end2); * Giving end1 as OUT essentially eliminates the end1/end2 check. * * This implementation is a bit of a kludge, in that a trailing $ is first * taken as an ordinary character and then revised to be an anchor. The * only undesirable side effect is that '$' gets included as a character * category in such cases. This is fairly harmless; not worth fixing. * The amount of lookahead needed to avoid this kludge is excessive. */ static void p_bre(p, end1, end2) register struct parse *p; register int end1; /* first terminating character */ register int end2; /* second terminating character */ { register sopno start = HERE(); register int first = 1; /* first subexpression? */ register int wasdollar = 0; if (EAT('^')) { EMIT(OBOL, 0); p->g->iflags |= USEBOL; p->g->nbol++; } while (MORE() && !SEETWO(end1, end2)) { wasdollar = p_simp_re(p, first); first = 0; } if (wasdollar) { /* oops, that was a trailing anchor */ DROP(1); EMIT(OEOL, 0); p->g->iflags |= USEEOL; p->g->neol++; } REQUIRE(HERE() != start, REG_EMPTY); /* require nonempty */ } /* - p_simp_re - parse a simple RE, an atom possibly followed by a repetition == static int p_simp_re(register struct parse *p, int starordinary); */ static int /* was the simple RE an unbackslashed $? */ p_simp_re(p, starordinary) register struct parse *p; int starordinary; /* is a leading * an ordinary character? */ { register int c; register int count; register int count2; register sopno pos; register int i; register sopno subno; # define BACKSL (1<g->cflags®_NEWLINE) nonnewline(p); else EMIT(OANY, 0); break; case '[': p_bracket(p); break; case BACKSL|'{': SETERROR(REG_BADRPT); break; case BACKSL|'(': p->g->nsub++; subno = p->g->nsub; if (subno < NPAREN) p->pbegin[subno] = HERE(); EMIT(OLPAREN, subno); /* the MORE here is an error heuristic */ if (MORE() && !SEETWO('\\', ')')) p_bre(p, '\\', ')'); if (subno < NPAREN) { p->pend[subno] = HERE(); assert(p->pend[subno] != 0); } EMIT(ORPAREN, subno); REQUIRE(EATTWO('\\', ')'), REG_EPAREN); break; case BACKSL|')': /* should not get here -- must be user */ case BACKSL|'}': SETERROR(REG_EPAREN); break; case BACKSL|'1': case BACKSL|'2': case BACKSL|'3': case BACKSL|'4': case BACKSL|'5': case BACKSL|'6': case BACKSL|'7': case BACKSL|'8': case BACKSL|'9': i = (c&~BACKSL) - '0'; assert(i < NPAREN); if (p->pend[i] != 0) { assert(i <= p->g->nsub); EMIT(OBACK_, i); assert(p->pbegin[i] != 0); assert(OP(p->strip[p->pbegin[i]]) == OLPAREN); assert(OP(p->strip[p->pend[i]]) == ORPAREN); (void) dupl(p, p->pbegin[i]+1, p->pend[i]); EMIT(O_BACK, i); } else SETERROR(REG_ESUBREG); p->g->backrefs = 1; break; case '*': REQUIRE(starordinary, REG_BADRPT); /* FALLTHROUGH */ default: ordinary(p, (char)c); /* takes off BACKSL, if any */ break; } if (EAT('*')) { /* implemented as +? */ /* this case does not require the (y|) trick, noKLUDGE */ INSERT(OPLUS_, pos); ASTERN(O_PLUS, pos); INSERT(OQUEST_, pos); ASTERN(O_QUEST, pos); } else if (EATTWO('\\', '{')) { count = p_count(p); if (EAT(',')) { if (MORE() && isdigit(PEEK())) { count2 = p_count(p); REQUIRE(count <= count2, REG_BADBR); } else /* single number with comma */ count2 = INFINITY; } else /* just a single number */ count2 = count; repeat(p, pos, count, count2); if (!EATTWO('\\', '}')) { /* error heuristics */ while (MORE() && !SEETWO('\\', '}')) NEXT(); REQUIRE(MORE(), REG_EBRACE); SETERROR(REG_BADBR); } } else if (c == (unsigned char)'$') /* $ (but not \$) ends it */ return(1); return(0); } /* - p_count - parse a repetition count == static int p_count(register struct parse *p); */ static int /* the value */ p_count(p) register struct parse *p; { register int count = 0; register int ndigits = 0; while (MORE() && isdigit(PEEK()) && count <= DUPMAX) { count = count*10 + (GETNEXT() - '0'); ndigits++; } REQUIRE(ndigits > 0 && count <= DUPMAX, REG_BADBR); return(count); } /* - p_bracket - parse a bracketed character list == static void p_bracket(register struct parse *p); * * Note a significant property of this code: if the allocset() did SETERROR, * no set operations are done. */ static void p_bracket(p) register struct parse *p; { register cset *cs = allocset(p); register int invert = 0; /* Dept of Truly Sickening Special-Case Kludges */ if (p->next + 5 < p->end && strncmp(p->next, "[:<:]]", 6) == 0) { EMIT(OBOW, 0); NEXTn(6); return; } if (p->next + 5 < p->end && strncmp(p->next, "[:>:]]", 6) == 0) { EMIT(OEOW, 0); NEXTn(6); return; } if (EAT('^')) invert++; /* make note to invert set at end */ if (EAT(']')) CHadd(cs, ']'); else if (EAT('-')) CHadd(cs, '-'); while (MORE() && PEEK() != ']' && !SEETWO('-', ']')) p_b_term(p, cs); if (EAT('-')) CHadd(cs, '-'); MUSTEAT(']', REG_EBRACK); if (p->error != 0) /* don't mess things up further */ return; if (p->g->cflags®_ICASE) { register int i; register int ci; for (i = p->g->csetsize - 1; i >= 0; i--) if (CHIN(cs, i) && isalpha(i)) { ci = othercase(i); if (ci != i) CHadd(cs, ci); } if (cs->multis != NULL) mccase(p, cs); } if (invert) { register int i; for (i = p->g->csetsize - 1; i >= 0; i--) if (CHIN(cs, i)) CHsub(cs, i); else CHadd(cs, i); if (p->g->cflags®_NEWLINE) CHsub(cs, '\n'); if (cs->multis != NULL) mcinvert(p, cs); } assert(cs->multis == NULL); /* xxx */ if (nch(p, cs) == 1) { /* optimize singleton sets */ ordinary(p, firstch(p, cs)); freeset(p, cs); } else EMIT(OANYOF, freezeset(p, cs)); } /* - p_b_term - parse one term of a bracketed character list == static void p_b_term(register struct parse *p, register cset *cs); */ static void p_b_term(p, cs) register struct parse *p; register cset *cs; { register char c; register char start, finish; register int i; /* classify what we've got */ switch ((MORE()) ? PEEK() : '\0') { case '[': c = (MORE2()) ? PEEK2() : '\0'; break; case '-': SETERROR(REG_ERANGE); return; /* NOTE RETURN */ break; default: c = '\0'; break; } switch (c) { case ':': /* character class */ NEXT2(); REQUIRE(MORE(), REG_EBRACK); c = PEEK(); REQUIRE(c != '-' && c != ']', REG_ECTYPE); p_b_cclass(p, cs); REQUIRE(MORE(), REG_EBRACK); REQUIRE(EATTWO(':', ']'), REG_ECTYPE); break; case '=': /* equivalence class */ NEXT2(); REQUIRE(MORE(), REG_EBRACK); c = PEEK(); REQUIRE(c != '-' && c != ']', REG_ECOLLATE); p_b_eclass(p, cs); REQUIRE(MORE(), REG_EBRACK); REQUIRE(EATTWO('=', ']'), REG_ECOLLATE); break; default: /* symbol, ordinary character, or range */ /* xxx revision needed for multichar stuff */ start = p_b_symbol(p); if (SEE('-') && MORE2() && PEEK2() != ']') { /* range */ NEXT(); if (EAT('-')) finish = '-'; else finish = p_b_symbol(p); } else finish = start; /* xxx what about signed chars here... */ REQUIRE(start <= finish, REG_ERANGE); for (i = start; i <= finish; i++) CHadd(cs, i); break; } } /* - p_b_cclass - parse a character-class name and deal with it == static void p_b_cclass(register struct parse *p, register cset *cs); */ static void p_b_cclass(p, cs) register struct parse *p; register cset *cs; { register char *sp = p->next; register struct cclass *cp; register size_t len; register char *u; register char c; while (MORE() && isalpha(PEEK())) NEXT(); len = p->next - sp; for (cp = cclasses; cp->name != NULL; cp++) if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0') break; if (cp->name == NULL) { /* oops, didn't find it */ SETERROR(REG_ECTYPE); return; } u = cp->chars; while ((c = *u++) != '\0') CHadd(cs, c); for (u = cp->multis; *u != '\0'; u += strlen(u) + 1) MCadd(p, cs, u); } /* - p_b_eclass - parse an equivalence-class name and deal with it == static void p_b_eclass(register struct parse *p, register cset *cs); * * This implementation is incomplete. xxx */ static void p_b_eclass(p, cs) register struct parse *p; register cset *cs; { register char c; c = p_b_coll_elem(p, '='); CHadd(cs, c); } /* - p_b_symbol - parse a character or [..]ed multicharacter collating symbol == static char p_b_symbol(register struct parse *p); */ static char /* value of symbol */ p_b_symbol(p) register struct parse *p; { register char value; REQUIRE(MORE(), REG_EBRACK); if (!EATTWO('[', '.')) return(GETNEXT()); /* collating symbol */ value = p_b_coll_elem(p, '.'); REQUIRE(EATTWO('.', ']'), REG_ECOLLATE); return(value); } /* - p_b_coll_elem - parse a collating-element name and look it up == static char p_b_coll_elem(register struct parse *p, int endc); */ static char /* value of collating element */ p_b_coll_elem(p, endc) register struct parse *p; int endc; /* name ended by endc,']' */ { register char *sp = p->next; register struct cname *cp; register int len; while (MORE() && !SEETWO(endc, ']')) NEXT(); if (!MORE()) { SETERROR(REG_EBRACK); return(0); } len = p->next - sp; for (cp = cnames; cp->name != NULL; cp++) if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0') return(cp->code); /* known name */ if (len == 1) return(*sp); /* single character */ SETERROR(REG_ECOLLATE); /* neither */ return(0); } /* - othercase - return the case counterpart of an alphabetic == static char othercase(int ch); */ static char /* if no counterpart, return ch */ othercase(ch) int ch; { assert(isalpha(ch)); if (isupper(ch)) return(tolower(ch)); else if (islower(ch)) return(toupper(ch)); else /* peculiar, but could happen */ return(ch); } /* - bothcases - emit a dualcase version of a two-case character == static void bothcases(register struct parse *p, int ch); * * Boy, is this implementation ever a kludge... */ static void bothcases(p, ch) register struct parse *p; int ch; { register char *oldnext = p->next; register char *oldend = p->end; char bracket[3]; assert(othercase(ch) != ch); /* p_bracket() would recurse */ p->next = bracket; p->end = bracket+2; bracket[0] = ch; bracket[1] = ']'; bracket[2] = '\0'; p_bracket(p); assert(p->next == bracket+2); p->next = oldnext; p->end = oldend; } /* - ordinary - emit an ordinary character == static void ordinary(register struct parse *p, register int ch); */ static void ordinary(p, ch) register struct parse *p; register int ch; { register cat_t *cap = p->g->categories; if ((p->g->cflags®_ICASE) && isalpha(ch) && othercase(ch) != ch) bothcases(p, ch); else { EMIT(OCHAR, (unsigned char)ch); if (cap[ch] == 0) cap[ch] = p->g->ncategories++; } } /* - nonnewline - emit REG_NEWLINE version of OANY == static void nonnewline(register struct parse *p); * * Boy, is this implementation ever a kludge... */ static void nonnewline(p) register struct parse *p; { register char *oldnext = p->next; register char *oldend = p->end; char bracket[4]; p->next = bracket; p->end = bracket+3; bracket[0] = '^'; bracket[1] = '\n'; bracket[2] = ']'; bracket[3] = '\0'; p_bracket(p); assert(p->next == bracket+3); p->next = oldnext; p->end = oldend; } /* - repeat - generate code for a bounded repetition, recursively if needed == static void repeat(register struct parse *p, sopno start, int from, int to); */ static void repeat(p, start, from, to) register struct parse *p; sopno start; /* operand from here to end of strip */ int from; /* repeated from this number */ int to; /* to this number of times (maybe INFINITY) */ { register sopno finish = HERE(); # define N 2 # define INF 3 # define REP(f, t) ((f)*8 + (t)) # define MAP(n) (((n) <= 1) ? (n) : ((n) == INFINITY) ? INF : N) register sopno copy; if (p->error != 0) /* head off possible runaway recursion */ return; assert(from <= to); switch (REP(MAP(from), MAP(to))) { case REP(0, 0): /* must be user doing this */ DROP(finish-start); /* drop the operand */ break; case REP(0, 1): /* as x{1,1}? */ case REP(0, N): /* as x{1,n}? */ case REP(0, INF): /* as x{1,}? */ /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */ INSERT(OCH_, start); /* offset is wrong... */ repeat(p, start+1, 1, to); ASTERN(OOR1, start); AHEAD(start); /* ... fix it */ EMIT(OOR2, 0); AHEAD(THERE()); ASTERN(O_CH, THERETHERE()); break; case REP(1, 1): /* trivial case */ /* done */ break; case REP(1, N): /* as x?x{1,n-1} */ /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */ INSERT(OCH_, start); ASTERN(OOR1, start); AHEAD(start); EMIT(OOR2, 0); /* offset very wrong... */ AHEAD(THERE()); /* ...so fix it */ ASTERN(O_CH, THERETHERE()); copy = dupl(p, start+1, finish+1); assert(copy == finish+4); repeat(p, copy, 1, to-1); break; case REP(1, INF): /* as x+ */ INSERT(OPLUS_, start); ASTERN(O_PLUS, start); break; case REP(N, N): /* as xx{m-1,n-1} */ copy = dupl(p, start, finish); repeat(p, copy, from-1, to-1); break; case REP(N, INF): /* as xx{n-1,INF} */ copy = dupl(p, start, finish); repeat(p, copy, from-1, to); break; default: /* "can't happen" */ SETERROR(REG_ASSERT); /* just in case */ break; } } /* - seterr - set an error condition == static int seterr(register struct parse *p, int e); */ static int /* useless but makes type checking happy */ seterr(p, e) register struct parse *p; int e; { if (p->error == 0) /* keep earliest error condition */ p->error = e; p->next = nuls; /* try to bring things to a halt */ p->end = nuls; return(0); /* make the return value well-defined */ } /* - allocset - allocate a set of characters for [] == static cset *allocset(register struct parse *p); */ static cset * allocset(p) register struct parse *p; { register int no = p->g->ncsets++; register size_t nc; register size_t nbytes; register cset *cs; register size_t css = (size_t)p->g->csetsize; register int i; if (no >= p->ncsalloc) { /* need another column of space */ p->ncsalloc += CHAR_BIT; nc = p->ncsalloc; assert(nc % CHAR_BIT == 0); nbytes = nc / CHAR_BIT * css; if (p->g->sets == NULL) p->g->sets = (cset *)malloc(nc * sizeof(cset)); else p->g->sets = (cset *)realloc((char *)p->g->sets, nc * sizeof(cset)); if (p->g->setbits == NULL) p->g->setbits = (uch *)malloc(nbytes); else { p->g->setbits = (uch *)realloc((char *)p->g->setbits, nbytes); /* xxx this isn't right if setbits is now NULL */ for (i = 0; i < no; i++) p->g->sets[i].ptr = p->g->setbits + css*(i/CHAR_BIT); } if (p->g->sets != NULL && p->g->setbits != NULL) (void) memset((char *)p->g->setbits + (nbytes - css), 0, css); else { no = 0; SETERROR(REG_ESPACE); /* caller's responsibility not to do set ops */ } } assert(p->g->sets != NULL); /* xxx */ cs = &p->g->sets[no]; cs->ptr = p->g->setbits + css*((no)/CHAR_BIT); cs->mask = 1 << ((no) % CHAR_BIT); cs->hash = 0; cs->smultis = 0; cs->multis = NULL; return(cs); } /* - freeset - free a now-unused set == static void freeset(register struct parse *p, register cset *cs); */ static void freeset(p, cs) register struct parse *p; register cset *cs; { register size_t i; register cset *top = &p->g->sets[p->g->ncsets]; register size_t css = (size_t)p->g->csetsize; for (i = 0; i < css; i++) CHsub(cs, i); if (cs == top-1) /* recover only the easy case */ p->g->ncsets--; } /* - freezeset - final processing on a set of characters == static int freezeset(register struct parse *p, register cset *cs); * * The main task here is merging identical sets. This is usually a waste * of time (although the hash code minimizes the overhead), but can win * big if REG_ICASE is being used. REG_ICASE, by the way, is why the hash * is done using addition rather than xor -- all ASCII [aA] sets xor to * the same value! */ static int /* set number */ freezeset(p, cs) register struct parse *p; register cset *cs; { register uch h = cs->hash; register size_t i; register cset *top = &p->g->sets[p->g->ncsets]; register cset *cs2; register size_t css = (size_t)p->g->csetsize; /* look for an earlier one which is the same */ for (cs2 = &p->g->sets[0]; cs2 < top; cs2++) if (cs2->hash == h && cs2 != cs) { /* maybe */ for (i = 0; i < css; i++) if (!!CHIN(cs2, i) != !!CHIN(cs, i)) break; /* no */ if (i == css) break; /* yes */ } if (cs2 < top) { /* found one */ freeset(p, cs); cs = cs2; } return((int)(cs - p->g->sets)); } /* - firstch - return first character in a set (which must have at least one) == static int firstch(register struct parse *p, register cset *cs); */ static int /* character; there is no "none" value */ firstch(p, cs) register struct parse *p; register cset *cs; { register size_t i; register size_t css = (size_t)p->g->csetsize; for (i = 0; i < css; i++) if (CHIN(cs, i)) return((char)i); assert(never); return(0); /* arbitrary */ } /* - nch - number of characters in a set == static int nch(register struct parse *p, register cset *cs); */ static int nch(p, cs) register struct parse *p; register cset *cs; { register size_t i; register size_t css = (size_t)p->g->csetsize; register int n = 0; for (i = 0; i < css; i++) if (CHIN(cs, i)) n++; return(n); } /* - mcadd - add a collating element to a cset == static void mcadd(register struct parse *p, register cset *cs, \ == register char *cp); */ static void mcadd(p, cs, cp) register struct parse *p; register cset *cs; register char *cp; { register size_t oldend = cs->smultis; cs->smultis += strlen(cp) + 1; if (cs->multis == NULL) cs->multis = malloc(cs->smultis); else cs->multis = realloc(cs->multis, cs->smultis); if (cs->multis == NULL) { SETERROR(REG_ESPACE); return; } (void) strcpy(cs->multis + oldend - 1, cp); cs->multis[cs->smultis - 1] = '\0'; } /* - mcsub - subtract a collating element from a cset == static void mcsub(register cset *cs, register char *cp); */ static void mcsub(cs, cp) register cset *cs; register char *cp; { register char *fp = mcfind(cs, cp); register size_t len = strlen(fp); assert(fp != NULL); (void) memmove(fp, fp + len + 1, cs->smultis - (fp + len + 1 - cs->multis)); cs->smultis -= len; if (cs->smultis == 0) { free(cs->multis); cs->multis = NULL; return; } cs->multis = realloc(cs->multis, cs->smultis); assert(cs->multis != NULL); } /* - mcin - is a collating element in a cset? == static int mcin(register cset *cs, register char *cp); */ static int mcin(cs, cp) register cset *cs; register char *cp; { return(mcfind(cs, cp) != NULL); } /* - mcfind - find a collating element in a cset == static char *mcfind(register cset *cs, register char *cp); */ static char * mcfind(cs, cp) register cset *cs; register char *cp; { register char *p; if (cs->multis == NULL) return(NULL); for (p = cs->multis; *p != '\0'; p += strlen(p) + 1) if (strcmp(cp, p) == 0) return(p); return(NULL); } /* - mcinvert - invert the list of collating elements in a cset == static void mcinvert(register struct parse *p, register cset *cs); * * This would have to know the set of possibilities. Implementation * is deferred. */ static void mcinvert(p, cs) register struct parse *p; register cset *cs; { assert(cs->multis == NULL); /* xxx */ } /* - mccase - add case counterparts of the list of collating elements in a cset == static void mccase(register struct parse *p, register cset *cs); * * This would have to know the set of possibilities. Implementation * is deferred. */ static void mccase(p, cs) register struct parse *p; register cset *cs; { assert(cs->multis == NULL); /* xxx */ } /* - isinsets - is this character in any sets? == static int isinsets(register struct re_guts *g, int c); */ static int /* predicate */ isinsets(g, c) register struct re_guts *g; int c; { register uch *col; register int i; register int ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT; register unsigned uc = (unsigned char)c; for (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize) if (col[uc] != 0) return(1); return(0); } /* - samesets - are these two characters in exactly the same sets? == static int samesets(register struct re_guts *g, int c1, int c2); */ static int /* predicate */ samesets(g, c1, c2) register struct re_guts *g; int c1; int c2; { register uch *col; register int i; register int ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT; register unsigned uc1 = (unsigned char)c1; register unsigned uc2 = (unsigned char)c2; for (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize) if (col[uc1] != col[uc2]) return(0); return(1); } /* - categorize - sort out character categories == static void categorize(struct parse *p, register struct re_guts *g); */ static void categorize(p, g) struct parse *p; register struct re_guts *g; { register cat_t *cats = g->categories; register int c; register int c2; register cat_t cat; /* avoid making error situations worse */ if (p->error != 0) return; for (c = CHAR_MIN; c <= CHAR_MAX; c++) if (cats[c] == 0 && isinsets(g, c)) { cat = g->ncategories++; cats[c] = cat; for (c2 = c+1; c2 <= CHAR_MAX; c2++) if (cats[c2] == 0 && samesets(g, c, c2)) cats[c2] = cat; } } /* - dupl - emit a duplicate of a bunch of sops == static sopno dupl(register struct parse *p, sopno start, sopno finish); */ static sopno /* start of duplicate */ dupl(p, start, finish) register struct parse *p; sopno start; /* from here */ sopno finish; /* to this less one */ { register sopno ret = HERE(); register sopno len = finish - start; assert(finish >= start); if (len == 0) return(ret); enlarge(p, p->ssize + len); /* this many unexpected additions */ assert(p->ssize >= p->slen + len); (void) memmove((char *)(p->strip + p->slen), (char *)(p->strip + start), (size_t)len*sizeof(sop)); p->slen += len; return(ret); } /* - doemit - emit a strip operator == static void doemit(register struct parse *p, sop op, size_t opnd); * * It might seem better to implement this as a macro with a function as * hard-case backup, but it's just too big and messy unless there are * some changes to the data structures. Maybe later. */ static void doemit(p, op, opnd) register struct parse *p; sop op; size_t opnd; { /* avoid making error situations worse */ if (p->error != 0) return; /* deal with oversize operands ("can't happen", more or less) */ assert(opnd < 1<slen >= p->ssize) enlarge(p, (p->ssize+1) / 2 * 3); /* +50% */ assert(p->slen < p->ssize); /* finally, it's all reduced to the easy case */ p->strip[p->slen++] = SOP(op, opnd); } /* - doinsert - insert a sop into the strip == static void doinsert(register struct parse *p, sop op, size_t opnd, sopno pos); */ static void doinsert(p, op, opnd, pos) register struct parse *p; sop op; size_t opnd; sopno pos; { register sopno sn; register sop s; register int i; /* avoid making error situations worse */ if (p->error != 0) return; sn = HERE(); EMIT(op, opnd); /* do checks, ensure space */ assert(HERE() == sn+1); s = p->strip[sn]; /* adjust paren pointers */ assert(pos > 0); for (i = 1; i < NPAREN; i++) { if (p->pbegin[i] >= pos) { p->pbegin[i]++; } if (p->pend[i] >= pos) { p->pend[i]++; } } memmove((char *)&p->strip[pos+1], (char *)&p->strip[pos], (HERE()-pos-1)*sizeof(sop)); p->strip[pos] = s; } /* - dofwd - complete a forward reference == static void dofwd(register struct parse *p, sopno pos, sop value); */ static void dofwd(p, pos, value) register struct parse *p; register sopno pos; sop value; { /* avoid making error situations worse */ if (p->error != 0) return; assert(value < 1<strip[pos] = OP(p->strip[pos]) | value; } /* - enlarge - enlarge the strip == static void enlarge(register struct parse *p, sopno size); */ static void enlarge(p, size) register struct parse *p; register sopno size; { register sop *sp; if (p->ssize >= size) return; sp = (sop *)realloc(p->strip, size*sizeof(sop)); if (sp == NULL) { SETERROR(REG_ESPACE); return; } p->strip = sp; p->ssize = size; } /* - stripsnug - compact the strip == static void stripsnug(register struct parse *p, register struct re_guts *g); */ static void stripsnug(p, g) register struct parse *p; register struct re_guts *g; { g->nstates = p->slen; g->strip = (sop *)realloc((char *)p->strip, p->slen * sizeof(sop)); if (g->strip == NULL) { SETERROR(REG_ESPACE); g->strip = p->strip; } } /* - findmust - fill in must and mlen with longest mandatory literal string == static void findmust(register struct parse *p, register struct re_guts *g); * * This algorithm could do fancy things like analyzing the operands of | * for common subsequences. Someday. This code is simple and finds most * of the interesting cases. * * Note that must and mlen got initialized during setup. */ static void findmust(p, g) struct parse *p; register struct re_guts *g; { register sop *scan; sop *start; register sop *newstart; register sopno newlen; register sop s; register char *cp; register sopno i; /* avoid making error situations worse */ if (p->error != 0) return; /* find the longest OCHAR sequence in strip */ newlen = 0; scan = g->strip + 1; do { s = *scan++; switch (OP(s)) { case OCHAR: /* sequence member */ if (newlen == 0) /* new sequence */ newstart = scan - 1; newlen++; break; case OPLUS_: /* things that don't break one */ case OLPAREN: case ORPAREN: break; case OQUEST_: /* things that must be skipped */ case OCH_: scan--; do { scan += OPND(s); s = *scan; /* assert() interferes w debug printouts */ if (OP(s) != O_QUEST && OP(s) != O_CH && OP(s) != OOR2) { g->iflags |= BAD; return; } } while (OP(s) != O_QUEST && OP(s) != O_CH); /* fallthrough */ default: /* things that break a sequence */ if (newlen > g->mlen) { /* ends one */ start = newstart; g->mlen = newlen; } newlen = 0; break; } } while (OP(s) != OEND); if (g->mlen == 0) /* there isn't one */ return; /* turn it into a character string */ g->must = malloc((size_t)g->mlen + 1); if (g->must == NULL) { /* argh; just forget it */ g->mlen = 0; return; } cp = g->must; scan = start; for (i = g->mlen; i > 0; i--) { while (OP(s = *scan++) != OCHAR) continue; assert(cp < g->must + g->mlen); *cp++ = (char)OPND(s); } assert(cp == g->must + g->mlen); *cp++ = '\0'; /* just on general principles */ } /* - pluscount - count + nesting == static sopno pluscount(register struct parse *p, register struct re_guts *g); */ static sopno /* nesting depth */ pluscount(p, g) struct parse *p; register struct re_guts *g; { register sop *scan; register sop s; register sopno plusnest = 0; register sopno maxnest = 0; if (p->error != 0) return(0); /* there may not be an OEND */ scan = g->strip + 1; do { s = *scan++; switch (OP(s)) { case OPLUS_: plusnest++; break; case O_PLUS: if (plusnest > maxnest) maxnest = plusnest; plusnest--; break; } } while (OP(s) != OEND); if (plusnest != 0) g->iflags |= BAD; return(maxnest); } cups-2.2.7/vcnet/regex/regcomp.ih000664 000765 000024 00000005226 13255074424 017367 0ustar00msweetstaff000000 000000 /* ========= begin header generated by ./mkh ========= */ #ifdef __cplusplus extern "C" { #endif /* === regcomp.c === */ static void p_ere(register struct parse *p, int stop); static void p_ere_exp(register struct parse *p); static void p_str(register struct parse *p); static void p_bre(register struct parse *p, register int end1, register int end2); static int p_simp_re(register struct parse *p, int starordinary); static int p_count(register struct parse *p); static void p_bracket(register struct parse *p); static void p_b_term(register struct parse *p, register cset *cs); static void p_b_cclass(register struct parse *p, register cset *cs); static void p_b_eclass(register struct parse *p, register cset *cs); static char p_b_symbol(register struct parse *p); static char p_b_coll_elem(register struct parse *p, int endc); static char othercase(int ch); static void bothcases(register struct parse *p, int ch); static void ordinary(register struct parse *p, register int ch); static void nonnewline(register struct parse *p); static void repeat(register struct parse *p, sopno start, int from, int to); static int seterr(register struct parse *p, int e); static cset *allocset(register struct parse *p); static void freeset(register struct parse *p, register cset *cs); static int freezeset(register struct parse *p, register cset *cs); static int firstch(register struct parse *p, register cset *cs); static int nch(register struct parse *p, register cset *cs); static void mcadd(register struct parse *p, register cset *cs, register char *cp); static void mcsub(register cset *cs, register char *cp); static int mcin(register cset *cs, register char *cp); static char *mcfind(register cset *cs, register char *cp); static void mcinvert(register struct parse *p, register cset *cs); static void mccase(register struct parse *p, register cset *cs); static int isinsets(register struct re_guts *g, int c); static int samesets(register struct re_guts *g, int c1, int c2); static void categorize(struct parse *p, register struct re_guts *g); static sopno dupl(register struct parse *p, sopno start, sopno finish); static void doemit(register struct parse *p, sop op, size_t opnd); static void doinsert(register struct parse *p, sop op, size_t opnd, sopno pos); static void dofwd(register struct parse *p, sopno pos, sop value); static void enlarge(register struct parse *p, sopno size); static void stripsnug(register struct parse *p, register struct re_guts *g); static void findmust(register struct parse *p, register struct re_guts *g); static sopno pluscount(register struct parse *p, register struct re_guts *g); #ifdef __cplusplus } #endif /* ========= end header generated by ./mkh ========= */ cups-2.2.7/vcnet/regex/regerror.c000664 000765 000024 00000006106 13255074424 017402 0ustar00msweetstaff000000 000000 #include #include #include #include #include #include #include #include "utils.h" #include "regerror.ih" /* = #define REG_OKAY 0 = #define REG_NOMATCH 1 = #define REG_BADPAT 2 = #define REG_ECOLLATE 3 = #define REG_ECTYPE 4 = #define REG_EESCAPE 5 = #define REG_ESUBREG 6 = #define REG_EBRACK 7 = #define REG_EPAREN 8 = #define REG_EBRACE 9 = #define REG_BADBR 10 = #define REG_ERANGE 11 = #define REG_ESPACE 12 = #define REG_BADRPT 13 = #define REG_EMPTY 14 = #define REG_ASSERT 15 = #define REG_INVARG 16 = #define REG_ATOI 255 // convert name to number (!) = #define REG_ITOA 0400 // convert number to name (!) */ static struct rerr { int code; char *name; char *explain; } rerrs[] = { REG_OKAY, "REG_OKAY", "no errors detected", REG_NOMATCH, "REG_NOMATCH", "regexec() failed to match", REG_BADPAT, "REG_BADPAT", "invalid regular expression", REG_ECOLLATE, "REG_ECOLLATE", "invalid collating element", REG_ECTYPE, "REG_ECTYPE", "invalid character class", REG_EESCAPE, "REG_EESCAPE", "trailing backslash (\\)", REG_ESUBREG, "REG_ESUBREG", "invalid backreference number", REG_EBRACK, "REG_EBRACK", "brackets ([ ]) not balanced", REG_EPAREN, "REG_EPAREN", "parentheses not balanced", REG_EBRACE, "REG_EBRACE", "braces not balanced", REG_BADBR, "REG_BADBR", "invalid repetition count(s)", REG_ERANGE, "REG_ERANGE", "invalid character range", REG_ESPACE, "REG_ESPACE", "out of memory", REG_BADRPT, "REG_BADRPT", "repetition-operator operand invalid", REG_EMPTY, "REG_EMPTY", "empty (sub)expression", REG_ASSERT, "REG_ASSERT", "\"can't happen\" -- you found a bug", REG_INVARG, "REG_INVARG", "invalid argument to regex routine", -1, "", "*** unknown regexp error code ***", }; /* - regerror - the interface to error numbers = extern size_t regerror(int, const regex_t *, char *, size_t); */ /* ARGSUSED */ size_t regerror( int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size) { register struct rerr *r; register size_t len; register int target = errcode &~ REG_ITOA; register char *s; char convbuf[50]; if (errcode == REG_ATOI) s = regatoi(preg, convbuf); else { for (r = rerrs; r->code >= 0; r++) if (r->code == target) break; if (errcode®_ITOA) { if (r->code >= 0) (void) strcpy(convbuf, r->name); else sprintf(convbuf, "REG_0x%x", target); assert(strlen(convbuf) < sizeof(convbuf)); s = convbuf; } else s = r->explain; } len = strlen(s) + 1; if (errbuf_size > 0) { if (errbuf_size > len) (void) strcpy(errbuf, s); else { (void) strncpy(errbuf, s, errbuf_size-1); errbuf[errbuf_size-1] = '\0'; } } return(len); } /* - regatoi - internal routine to implement REG_ATOI == static char *regatoi(const regex_t *preg, char *localbuf); */ static char * regatoi(preg, localbuf) const regex_t *preg; char *localbuf; { register struct rerr *r; for (r = rerrs; r->code >= 0; r++) if (strcmp(r->name, preg->re_endp) == 0) break; if (r->code < 0) return("0"); sprintf(localbuf, "%d", r->code); return(localbuf); } cups-2.2.7/vcnet/regex/regerror.ih000664 000765 000024 00000000413 13255074424 017553 0ustar00msweetstaff000000 000000 /* ========= begin header generated by ./mkh ========= */ #ifdef __cplusplus extern "C" { #endif /* === regerror.c === */ static char *regatoi(const regex_t *preg, char *localbuf); #ifdef __cplusplus } #endif /* ========= end header generated by ./mkh ========= */ cups-2.2.7/vcnet/regex/regex.3000664 000765 000024 00000035151 13255074424 016607 0ustar00msweetstaff000000 000000 .TH REGEX 3 "25 Sept 1997" .BY "Henry Spencer" .de ZR .\" one other place knows this name: the SEE ALSO section .IR regex (7) \\$1 .. .SH NAME regcomp, regexec, regerror, regfree \- regular-expression library .SH SYNOPSIS .ft B .\".na #include .br #include .HP 10 int regcomp(regex_t\ *preg, const\ char\ *pattern, int\ cflags); .HP int\ regexec(const\ regex_t\ *preg, const\ char\ *string, size_t\ nmatch, regmatch_t\ pmatch[], int\ eflags); .HP size_t\ regerror(int\ errcode, const\ regex_t\ *preg, char\ *errbuf, size_t\ errbuf_size); .HP void\ regfree(regex_t\ *preg); .\".ad .ft .SH DESCRIPTION These routines implement POSIX 1003.2 regular expressions (``RE''s); see .ZR . .I Regcomp compiles an RE written as a string into an internal form, .I regexec matches that internal form against a string and reports results, .I regerror transforms error codes from either into human-readable messages, and .I regfree frees any dynamically-allocated storage used by the internal form of an RE. .PP The header .I declares two structure types, .I regex_t and .IR regmatch_t , the former for compiled internal forms and the latter for match reporting. It also declares the four functions, a type .IR regoff_t , and a number of constants with names starting with ``REG_''. .PP .I Regcomp compiles the regular expression contained in the .I pattern string, subject to the flags in .IR cflags , and places the results in the .I regex_t structure pointed to by .IR preg . .I Cflags is the bitwise OR of zero or more of the following flags: .IP REG_EXTENDED \w'REG_EXTENDED'u+2n Compile modern (``extended'') REs, rather than the obsolete (``basic'') REs that are the default. .IP REG_BASIC This is a synonym for 0, provided as a counterpart to REG_EXTENDED to improve readability. This is an extension, compatible with but not specified by POSIX 1003.2, and should be used with caution in software intended to be portable to other systems. .IP REG_NOSPEC Compile with recognition of all special characters turned off. All characters are thus considered ordinary, so the ``RE'' is a literal string. This is an extension, compatible with but not specified by POSIX 1003.2, and should be used with caution in software intended to be portable to other systems. REG_EXTENDED and REG_NOSPEC may not be used in the same call to .IR regcomp . .IP REG_ICASE Compile for matching that ignores upper/lower case distinctions. See .ZR . .IP REG_NOSUB Compile for matching that need only report success or failure, not what was matched. .IP REG_NEWLINE Compile for newline-sensitive matching. By default, newline is a completely ordinary character with no special meaning in either REs or strings. With this flag, `[^' bracket expressions and `.' never match newline, a `^' anchor matches the null string after any newline in the string in addition to its normal function, and the `$' anchor matches the null string before any newline in the string in addition to its normal function. .IP REG_PEND The regular expression ends, not at the first NUL, but just before the character pointed to by the .I re_endp member of the structure pointed to by .IR preg . The .I re_endp member is of type .IR const\ char\ * . This flag permits inclusion of NULs in the RE; they are considered ordinary characters. This is an extension, compatible with but not specified by POSIX 1003.2, and should be used with caution in software intended to be portable to other systems. .PP When successful, .I regcomp returns 0 and fills in the structure pointed to by .IR preg . One member of that structure (other than .IR re_endp ) is publicized: .IR re_nsub , of type .IR size_t , contains the number of parenthesized subexpressions within the RE (except that the value of this member is undefined if the REG_NOSUB flag was used). If .I regcomp fails, it returns a non-zero error code; see DIAGNOSTICS. .PP .I Regexec matches the compiled RE pointed to by .I preg against the .IR string , subject to the flags in .IR eflags , and reports results using .IR nmatch , .IR pmatch , and the returned value. The RE must have been compiled by a previous invocation of .IR regcomp . The compiled form is not altered during execution of .IR regexec , so a single compiled RE can be used simultaneously by multiple threads. .PP By default, the NUL-terminated string pointed to by .I string is considered to be the text of an entire line, with the NUL indicating the end of the line. (That is, any other end-of-line marker is considered to have been removed and replaced by the NUL.) The .I eflags argument is the bitwise OR of zero or more of the following flags: .IP REG_NOTBOL \w'REG_STARTEND'u+2n The first character of the string is not the beginning of a line, so the `^' anchor should not match before it. This does not affect the behavior of newlines under REG_NEWLINE. .IP REG_NOTEOL The NUL terminating the string does not end a line, so the `$' anchor should not match before it. This does not affect the behavior of newlines under REG_NEWLINE. .IP REG_STARTEND The string is considered to start at \fIstring\fR\ + \fIpmatch\fR[0].\fIrm_so\fR and to have a terminating NUL located at \fIstring\fR\ + \fIpmatch\fR[0].\fIrm_eo\fR (there need not actually be a NUL at that location), regardless of the value of .IR nmatch . See below for the definition of .IR pmatch and .IR nmatch . This is an extension, compatible with but not specified by POSIX 1003.2, and should be used with caution in software intended to be portable to other systems. Note that a non-zero \fIrm_so\fR does not imply REG_NOTBOL; REG_STARTEND affects only the location of the string, not how it is matched. .PP See .ZR for a discussion of what is matched in situations where an RE or a portion thereof could match any of several substrings of .IR string . .PP Normally, .I regexec returns 0 for success and the non-zero code REG_NOMATCH for failure. Other non-zero error codes may be returned in exceptional situations; see DIAGNOSTICS. .PP If REG_NOSUB was specified in the compilation of the RE, or if .I nmatch is 0, .I regexec ignores the .I pmatch argument (but see below for the case where REG_STARTEND is specified). Otherwise, .I pmatch points to an array of .I nmatch structures of type .IR regmatch_t . Such a structure has at least the members .I rm_so and .IR rm_eo , both of type .I regoff_t (a signed arithmetic type at least as large as an .I off_t and a .IR ssize_t ), containing respectively the offset of the first character of a substring and the offset of the first character after the end of the substring. Offsets are measured from the beginning of the .I string argument given to .IR regexec . An empty substring is denoted by equal offsets, both indicating the character following the empty substring. .PP The 0th member of the .I pmatch array is filled in to indicate what substring of .I string was matched by the entire RE. Remaining members report what substring was matched by parenthesized subexpressions within the RE; member .I i reports subexpression .IR i , with subexpressions counted (starting at 1) by the order of their opening parentheses in the RE, left to right. Unused entries in the array\(emcorresponding either to subexpressions that did not participate in the match at all, or to subexpressions that do not exist in the RE (that is, \fIi\fR\ > \fIpreg\fR\->\fIre_nsub\fR)\(emhave both .I rm_so and .I rm_eo set to \-1. If a subexpression participated in the match several times, the reported substring is the last one it matched. (Note, as an example in particular, that when the RE `(b*)+' matches `bbb', the parenthesized subexpression matches the three `b's and then an infinite number of empty strings following the last `b', so the reported substring is one of the empties.) .PP If REG_STARTEND is specified, .I pmatch must point to at least one .I regmatch_t (even if .I nmatch is 0 or REG_NOSUB was specified), to hold the input offsets for REG_STARTEND. Use for output is still entirely controlled by .IR nmatch ; if .I nmatch is 0 or REG_NOSUB was specified, the value of .IR pmatch [0] will not be changed by a successful .IR regexec . .PP .I Regerror maps a non-zero .I errcode from either .I regcomp or .I regexec to a human-readable, printable message. If .I preg is non-NULL, the error code should have arisen from use of the .I regex_t pointed to by .IR preg , and if the error code came from .IR regcomp , it should have been the result from the most recent .I regcomp using that .IR regex_t . .RI ( Regerror may be able to supply a more detailed message using information from the .IR regex_t .) .I Regerror places the NUL-terminated message into the buffer pointed to by .IR errbuf , limiting the length (including the NUL) to at most .I errbuf_size bytes. If the whole message won't fit, as much of it as will fit before the terminating NUL is supplied. In any case, the returned value is the size of buffer needed to hold the whole message (including terminating NUL). If .I errbuf_size is 0, .I errbuf is ignored but the return value is still correct. .PP If the .I errcode given to .I regerror is first ORed with REG_ITOA, the ``message'' that results is the printable name of the error code, e.g. ``REG_NOMATCH'', rather than an explanation thereof. If .I errcode is REG_ATOI, then .I preg shall be non-NULL and the .I re_endp member of the structure it points to must point to the printable name of an error code; in this case, the result in .I errbuf is the decimal digits of the numeric value of the error code (0 if the name is not recognized). REG_ITOA and REG_ATOI are intended primarily as debugging facilities; they are extensions, compatible with but not specified by POSIX 1003.2, and should be used with caution in software intended to be portable to other systems. Be warned also that they are considered experimental and changes are possible. .PP .I Regfree frees any dynamically-allocated storage associated with the compiled RE pointed to by .IR preg . The remaining .I regex_t is no longer a valid compiled RE and the effect of supplying it to .I regexec or .I regerror is undefined. .PP None of these functions references global variables except for tables of constants; all are safe for use from multiple threads if the arguments are safe. .SH IMPLEMENTATION CHOICES There are a number of decisions that 1003.2 leaves up to the implementor, either by explicitly saying ``undefined'' or by virtue of them being forbidden by the RE grammar. This implementation treats them as follows. .PP See .ZR for a discussion of the definition of case-independent matching. .PP There is no particular limit on the length of REs, except insofar as memory is limited. Memory usage is approximately linear in RE size, and largely insensitive to RE complexity, except for bounded repetitions. See BUGS for one short RE using them that will run almost any system out of memory. .PP A backslashed character other than one specifically given a magic meaning by 1003.2 (such magic meanings occur only in obsolete [``basic''] REs) is taken as an ordinary character. .PP Any unmatched [ is a REG_EBRACK error. .PP Equivalence classes cannot begin or end bracket-expression ranges. The endpoint of one range cannot begin another. .PP RE_DUP_MAX, the limit on repetition counts in bounded repetitions, is 255. .PP A repetition operator (?, *, +, or bounds) cannot follow another repetition operator. A repetition operator cannot begin an expression or subexpression or follow `^' or `|'. .PP `|' cannot appear first or last in a (sub)expression or after another `|', i.e. an operand of `|' cannot be an empty subexpression. An empty parenthesized subexpression, `()', is legal and matches an empty (sub)string. An empty string is not a legal RE. .PP A `{' followed by a digit is considered the beginning of bounds for a bounded repetition, which must then follow the syntax for bounds. A `{' \fInot\fR followed by a digit is considered an ordinary character. .PP `^' and `$' beginning and ending subexpressions in obsolete (``basic'') REs are anchors, not ordinary characters. .SH SEE ALSO grep(1), regex(7) .PP POSIX 1003.2, sections 2.8 (Regular Expression Notation) and B.5 (C Binding for Regular Expression Matching). .SH DIAGNOSTICS Non-zero error codes from .I regcomp and .I regexec include the following: .PP .nf .ta \w'REG_ECOLLATE'u+3n REG_NOMATCH regexec() failed to match REG_BADPAT invalid regular expression REG_ECOLLATE invalid collating element REG_ECTYPE invalid character class REG_EESCAPE \e applied to unescapable character REG_ESUBREG invalid backreference number REG_EBRACK brackets [ ] not balanced REG_EPAREN parentheses ( ) not balanced REG_EBRACE braces { } not balanced REG_BADBR invalid repetition count(s) in { } REG_ERANGE invalid character range in [ ] REG_ESPACE ran out of memory REG_BADRPT ?, *, or + operand invalid REG_EMPTY empty (sub)expression REG_ASSERT ``can't happen''\(emyou found a bug REG_INVARG invalid argument, e.g. negative-length string .fi .SH HISTORY Written by Henry Spencer, henry@zoo.toronto.edu. .SH BUGS This is an alpha release with known defects. Please report problems. .PP There is one known functionality bug. The implementation of internationalization is incomplete: the locale is always assumed to be the default one of 1003.2, and only the collating elements etc. of that locale are available. .PP The back-reference code is subtle and doubts linger about its correctness in complex cases. .PP .I Regexec performance is poor. This will improve with later releases. .I Nmatch exceeding 0 is expensive; .I nmatch exceeding 1 is worse. .I Regexec is largely insensitive to RE complexity \fIexcept\fR that back references are massively expensive. RE length does matter; in particular, there is a strong speed bonus for keeping RE length under about 30 characters, with most special characters counting roughly double. .PP .I Regcomp implements bounded repetitions by macro expansion, which is costly in time and space if counts are large or bounded repetitions are nested. An RE like, say, `((((a{1,100}){1,100}){1,100}){1,100}){1,100}' will (eventually) run almost any existing machine out of swap space. .PP There are suspected problems with response to obscure error conditions. Notably, certain kinds of internal overflow, produced only by truly enormous REs or by multiply nested bounded repetitions, are probably not handled well. .PP Due to a mistake in 1003.2, things like `a)b' are legal REs because `)' is a special character only in the presence of a previous unmatched `('. This can't be fixed until the spec is fixed. .PP The standard's definition of back references is vague. For example, does `a\e(\e(b\e)*\e2\e)*d' match `abbbd'? Until the standard is clarified, behavior in such cases should not be relied on. .PP The implementation of word-boundary matching is a bit of a kludge, and bugs may lurk in combinations of word-boundary matching and anchoring. cups-2.2.7/vcnet/regex/regex.7000664 000765 000024 00000023044 13255074424 016611 0ustar00msweetstaff000000 000000 .TH REGEX 7 "25 Oct 1995" .BY "Henry Spencer" .SH NAME regex \- POSIX 1003.2 regular expressions .SH DESCRIPTION Regular expressions (``RE''s), as defined in POSIX 1003.2, come in two forms: modern REs (roughly those of .IR egrep ; 1003.2 calls these ``extended'' REs) and obsolete REs (roughly those of .IR ed ; 1003.2 ``basic'' REs). Obsolete REs mostly exist for backward compatibility in some old programs; they will be discussed at the end. 1003.2 leaves some aspects of RE syntax and semantics open; `\(dg' marks decisions on these aspects that may not be fully portable to other 1003.2 implementations. .PP A (modern) RE is one\(dg or more non-empty\(dg \fIbranches\fR, separated by `|'. It matches anything that matches one of the branches. .PP A branch is one\(dg or more \fIpieces\fR, concatenated. It matches a match for the first, followed by a match for the second, etc. .PP A piece is an \fIatom\fR possibly followed by a single\(dg `*', `+', `?', or \fIbound\fR. An atom followed by `*' matches a sequence of 0 or more matches of the atom. An atom followed by `+' matches a sequence of 1 or more matches of the atom. An atom followed by `?' matches a sequence of 0 or 1 matches of the atom. .PP A \fIbound\fR is `{' followed by an unsigned decimal integer, possibly followed by `,' possibly followed by another unsigned decimal integer, always followed by `}'. The integers must lie between 0 and RE_DUP_MAX (255\(dg) inclusive, and if there are two of them, the first may not exceed the second. An atom followed by a bound containing one integer \fIi\fR and no comma matches a sequence of exactly \fIi\fR matches of the atom. An atom followed by a bound containing one integer \fIi\fR and a comma matches a sequence of \fIi\fR or more matches of the atom. An atom followed by a bound containing two integers \fIi\fR and \fIj\fR matches a sequence of \fIi\fR through \fIj\fR (inclusive) matches of the atom. .PP An atom is a regular expression enclosed in `()' (matching a match for the regular expression), an empty set of `()' (matching the null string)\(dg, a \fIbracket expression\fR (see below), `.' (matching any single character), `^' (matching the null string at the beginning of a line), `$' (matching the null string at the end of a line), a `\e' followed by one of the characters `^.[$()|*+?{\e' (matching that character taken as an ordinary character), a `\e' followed by any other character\(dg (matching that character taken as an ordinary character, as if the `\e' had not been present\(dg), or a single character with no other significance (matching that character). A `{' followed by a character other than a digit is an ordinary character, not the beginning of a bound\(dg. It is illegal to end an RE with `\e'. .PP A \fIbracket expression\fR is a list of characters enclosed in `[]'. It normally matches any single character from the list (but see below). If the list begins with `^', it matches any single character (but see below) \fInot\fR from the rest of the list. If two characters in the list are separated by `\-', this is shorthand for the full \fIrange\fR of characters between those two (inclusive) in the collating sequence, e.g. `[0\-9]' in ASCII matches any decimal digit. It is illegal\(dg for two ranges to share an endpoint, e.g. `a\-c\-e'. Ranges are very collating-sequence-dependent, and portable programs should avoid relying on them. .PP To include a literal `]' in the list, make it the first character (following a possible `^'). To include a literal `\-', make it the first or last character, or the second endpoint of a range. To use a literal `\-' as the first endpoint of a range, enclose it in `[.' and `.]' to make it a collating element (see below). With the exception of these and some combinations using `[' (see next paragraphs), all other special characters, including `\e', lose their special significance within a bracket expression. .PP Within a bracket expression, a collating element (a character, a multi-character sequence that collates as if it were a single character, or a collating-sequence name for either) enclosed in `[.' and `.]' stands for the sequence of characters of that collating element. The sequence is a single element of the bracket expression's list. A bracket expression containing a multi-character collating element can thus match more than one character, e.g. if the collating sequence includes a `ch' collating element, then the RE `[[.ch.]]*c' matches the first five characters of `chchcc'. .PP Within a bracket expression, a collating element enclosed in `[=' and `=]' is an equivalence class, standing for the sequences of characters of all collating elements equivalent to that one, including itself. (If there are no other equivalent collating elements, the treatment is as if the enclosing delimiters were `[.' and `.]'.) For example, if o and \o'o^' are the members of an equivalence class, then `[[=o=]]', `[[=\o'o^'=]]', and `[o\o'o^']' are all synonymous. An equivalence class may not\(dg be an endpoint of a range. .PP Within a bracket expression, the name of a \fIcharacter class\fR enclosed in `[:' and `:]' stands for the list of all characters belonging to that class. Standard character class names are: .PP .RS .nf .ta 3c 6c 9c alnum digit punct alpha graph space blank lower upper cntrl print xdigit .fi .RE .PP These stand for the character classes defined in .IR ctype (3). A locale may provide others. A character class may not be used as an endpoint of a range. .PP There are two special cases\(dg of bracket expressions: the bracket expressions `[[:<:]]' and `[[:>:]]' match the null string at the beginning and end of a word respectively. A word is defined as a sequence of word characters which is neither preceded nor followed by word characters. A word character is an .I alnum character (as defined by .IR ctype (3)) or an underscore. This is an extension, compatible with but not specified by POSIX 1003.2, and should be used with caution in software intended to be portable to other systems. .PP In the event that an RE could match more than one substring of a given string, the RE matches the one starting earliest in the string. If the RE could match more than one substring starting at that point, it matches the longest. Subexpressions also match the longest possible substrings, subject to the constraint that the whole match be as long as possible, with subexpressions starting earlier in the RE taking priority over ones starting later. Note that higher-level subexpressions thus take priority over their lower-level component subexpressions. .PP Match lengths are measured in characters, not collating elements. A null string is considered longer than no match at all. For example, `bb*' matches the three middle characters of `abbbc', `(wee|week)(knights|nights)' matches all ten characters of `weeknights', when `(.*).*' is matched against `abc' the parenthesized subexpression matches all three characters, and when `(a*)*' is matched against `bc' both the whole RE and the parenthesized subexpression match the null string. .PP If case-independent matching is specified, the effect is much as if all case distinctions had vanished from the alphabet. When an alphabetic that exists in multiple cases appears as an ordinary character outside a bracket expression, it is effectively transformed into a bracket expression containing both cases, e.g. `x' becomes `[xX]'. When it appears inside a bracket expression, all case counterparts of it are added to the bracket expression, so that (e.g.) `[x]' becomes `[xX]' and `[^x]' becomes `[^xX]'. .PP No particular limit is imposed on the length of REs\(dg. Programs intended to be portable should not employ REs longer than 256 bytes, as an implementation can refuse to accept such REs and remain POSIX-compliant. .PP Obsolete (``basic'') regular expressions differ in several respects. `|', `+', and `?' are ordinary characters and there is no equivalent for their functionality. The delimiters for bounds are `\e{' and `\e}', with `{' and `}' by themselves ordinary characters. The parentheses for nested subexpressions are `\e(' and `\e)', with `(' and `)' by themselves ordinary characters. `^' is an ordinary character except at the beginning of the RE or\(dg the beginning of a parenthesized subexpression, `$' is an ordinary character except at the end of the RE or\(dg the end of a parenthesized subexpression, and `*' is an ordinary character if it appears at the beginning of the RE or the beginning of a parenthesized subexpression (after a possible leading `^'). Finally, there is one new type of atom, a \fIback reference\fR: `\e' followed by a non-zero decimal digit \fId\fR matches the same sequence of characters matched by the \fId\fRth parenthesized subexpression (numbering subexpressions by the positions of their opening parentheses, left to right), so that (e.g.) `\e([bc]\e)\e1' matches `bb' or `cc' but not `bc'. .SH SEE ALSO regex(3) .PP POSIX 1003.2, section 2.8 (Regular Expression Notation). .SH HISTORY Written by Henry Spencer, based on the 1003.2 spec. .SH BUGS Having two kinds of REs is a botch. .PP The current 1003.2 spec says that `)' is an ordinary character in the absence of an unmatched `('; this was an unintentional result of a wording error, and change is likely. Avoid relying on it. .PP Back references are a dreadful botch, posing major problems for efficient implementations. They are also somewhat vaguely defined (does `a\e(\e(b\e)*\e2\e)*d' match `abbbd'?). Avoid using them. .PP 1003.2's specification of case-independent matching is vague. The ``one case implies all cases'' definition given above is current consensus among implementors as to the right interpretation. .PP The syntax for word boundaries is incredibly ugly. cups-2.2.7/vcnet/regex/regex.def000664 000765 000024 00000000112 13255074424 017170 0ustar00msweetstaff000000 000000 LIBRARY regex VERSION 1.0 EXPORTS regcomp regerror regexec regfree cups-2.2.7/vcnet/regex/regex.h000664 000765 000024 00000003474 13255074424 016677 0ustar00msweetstaff000000 000000 #ifndef _REGEX_H_ #define _REGEX_H_ /* never again */ /* ========= begin header generated by ./mkh ========= */ #ifdef __cplusplus extern "C" { #endif /* === regex2.h === */ typedef long regoff_t; typedef struct { int re_magic; size_t re_nsub; /* number of parenthesized subexpressions */ const char *re_endp; /* end pointer for REG_PEND */ struct re_guts *re_g; /* none of your business :-) */ } regex_t; typedef struct { regoff_t rm_so; /* start of match */ regoff_t rm_eo; /* end of match */ } regmatch_t; /* === regcomp.c === */ extern int regcomp(regex_t *, const char *, int); #define REG_BASIC 0000 #define REG_EXTENDED 0001 #define REG_ICASE 0002 #define REG_NOSUB 0004 #define REG_NEWLINE 0010 #define REG_NOSPEC 0020 #define REG_PEND 0040 #define REG_DUMP 0200 /* === regerror.c === */ #define REG_OKAY 0 #define REG_NOMATCH 1 #define REG_BADPAT 2 #define REG_ECOLLATE 3 #define REG_ECTYPE 4 #define REG_EESCAPE 5 #define REG_ESUBREG 6 #define REG_EBRACK 7 #define REG_EPAREN 8 #define REG_EBRACE 9 #define REG_BADBR 10 #define REG_ERANGE 11 #define REG_ESPACE 12 #define REG_BADRPT 13 #define REG_EMPTY 14 #define REG_ASSERT 15 #define REG_INVARG 16 #define REG_ATOI 255 /* convert name to number (!) */ #define REG_ITOA 0400 /* convert number to name (!) */ extern size_t regerror(int, const regex_t *, char *, size_t); /* === regexec.c === */ extern int regexec(const regex_t *, const char *, size_t, regmatch_t [], int); #define REG_NOTBOL 00001 #define REG_NOTEOL 00002 #define REG_STARTEND 00004 #define REG_TRACE 00400 /* tracing of execution */ #define REG_LARGE 01000 /* force large representation */ #define REG_BACKR 02000 /* force use of backref code */ /* === regfree.c === */ extern void regfree(regex_t *); #ifdef __cplusplus } #endif /* ========= end header generated by ./mkh ========= */ #endif cups-2.2.7/vcnet/regex/regex2.h000664 000765 000024 00000012365 13255074424 016760 0ustar00msweetstaff000000 000000 /* * First, the stuff that ends up in the outside-world include file = typedef off_t regoff_t; = typedef struct { = int re_magic; = size_t re_nsub; // number of parenthesized subexpressions = const char *re_endp; // end pointer for REG_PEND = struct re_guts *re_g; // none of your business :-) = } regex_t; = typedef struct { = regoff_t rm_so; // start of match = regoff_t rm_eo; // end of match = } regmatch_t; */ /* * internals of regex_t */ #define MAGIC1 ((('r'^0200)<<8) | 'e') /* * The internal representation is a *strip*, a sequence of * operators ending with an endmarker. (Some terminology etc. is a * historical relic of earlier versions which used multiple strips.) * Certain oddities in the representation are there to permit running * the machinery backwards; in particular, any deviation from sequential * flow must be marked at both its source and its destination. Some * fine points: * * - OPLUS_ and O_PLUS are *inside* the loop they create. * - OQUEST_ and O_QUEST are *outside* the bypass they create. * - OCH_ and O_CH are *outside* the multi-way branch they create, while * OOR1 and OOR2 are respectively the end and the beginning of one of * the branches. Note that there is an implicit OOR2 following OCH_ * and an implicit OOR1 preceding O_CH. * * In state representations, an operator's bit is on to signify a state * immediately *preceding* "execution" of that operator. */ typedef long sop; /* strip operator */ typedef long sopno; #define OPRMASK 0x7c000000 #define OPDMASK 0x03ffffff #define OPSHIFT (26) #define OP(n) ((n)&OPRMASK) #define OPND(n) ((n)&OPDMASK) #define SOP(op, opnd) ((op)|(opnd)) /* operators meaning operand */ /* (back, fwd are offsets) */ #define OEND (1< uch [csetsize] */ uch mask; /* bit within array */ uch hash; /* hash code */ size_t smultis; char *multis; /* -> char[smulti] ab\0cd\0ef\0\0 */ } cset; /* note that CHadd and CHsub are unsafe, and CHIN doesn't yield 0/1 */ #define CHadd(cs, c) ((cs)->ptr[(uch)(c)] |= (cs)->mask, (cs)->hash += (c)) #define CHsub(cs, c) ((cs)->ptr[(uch)(c)] &= ~(cs)->mask, (cs)->hash -= (c)) #define CHIN(cs, c) ((cs)->ptr[(uch)(c)] & (cs)->mask) #define MCadd(p, cs, cp) mcadd(p, cs, cp) /* regcomp() internal fns */ #define MCsub(p, cs, cp) mcsub(p, cs, cp) #define MCin(p, cs, cp) mcin(p, cs, cp) /* stuff for character categories */ typedef unsigned char cat_t; /* * main compiled-expression structure */ struct re_guts { int magic; # define MAGIC2 ((('R'^0200)<<8)|'E') sop *strip; /* malloced area for strip */ int csetsize; /* number of bits in a cset vector */ int ncsets; /* number of csets in use */ cset *sets; /* -> cset [ncsets] */ uch *setbits; /* -> uch[csetsize][ncsets/CHAR_BIT] */ int cflags; /* copy of regcomp() cflags argument */ sopno nstates; /* = number of sops */ sopno firststate; /* the initial OEND (normally 0) */ sopno laststate; /* the final OEND */ int iflags; /* internal flags */ # define USEBOL 01 /* used ^ */ # define USEEOL 02 /* used $ */ # define BAD 04 /* something wrong */ int nbol; /* number of ^ used */ int neol; /* number of $ used */ int ncategories; /* how many character categories */ cat_t *categories; /* ->catspace[-CHAR_MIN] */ char *must; /* match must contain this string */ int mlen; /* length of must */ size_t nsub; /* copy of re_nsub */ int backrefs; /* does it use back references? */ sopno nplus; /* how deep does it nest +s? */ /* catspace must be last */ cat_t catspace[1]; /* actually [NC] */ }; /* misc utilities */ #define OUT (CHAR_MAX+1) /* a non-character value */ #define ISWORD(c) (isalnum(c) || (c) == '_') cups-2.2.7/vcnet/regex/regexec.c000664 000765 000024 00000010216 13255074424 017172 0ustar00msweetstaff000000 000000 /* * the outer shell of regexec() * * This file includes engine.c *twice*, after muchos fiddling with the * macros that code uses. This lets the same code operate on two different * representations for state sets. */ #include #include #include #include #include #include #include #include "utils.h" #include "regex2.h" static int nope = 0; /* for use in asserts; shuts lint up */ /* macros for manipulating states, small version */ #define states unsigned #define states1 unsigned /* for later use in regexec() decision */ #define CLEAR(v) ((v) = 0) #define SET0(v, n) ((v) &= ~((unsigned)1 << (n))) #define SET1(v, n) ((v) |= (unsigned)1 << (n)) #define ISSET(v, n) ((v) & ((unsigned)1 << (n))) #define ASSIGN(d, s) ((d) = (s)) #define EQ(a, b) ((a) == (b)) #define STATEVARS int dummy /* dummy version */ #define STATESETUP(m, n) /* nothing */ #define STATETEARDOWN(m) /* nothing */ #define SETUP(v) ((v) = 0) #define onestate unsigned #define INIT(o, n) ((o) = (unsigned)1 << (n)) #define INC(o) ((o) <<= 1) #define ISSTATEIN(v, o) ((v) & (o)) /* some abbreviations; note that some of these know variable names! */ /* do "if I'm here, I can also be there" etc without branches */ #define FWD(dst, src, n) ((dst) |= ((unsigned)(src)&(here)) << (n)) #define BACK(dst, src, n) ((dst) |= ((unsigned)(src)&(here)) >> (n)) #define ISSETBACK(v, n) ((v) & ((unsigned)here >> (n))) /* function names */ #define SNAMES /* engine.c looks after details */ #include "engine.c" /* now undo things */ #undef states #undef CLEAR #undef SET0 #undef SET1 #undef ISSET #undef ASSIGN #undef EQ #undef STATEVARS #undef STATESETUP #undef STATETEARDOWN #undef SETUP #undef onestate #undef INIT #undef INC #undef ISSTATEIN #undef FWD #undef BACK #undef ISSETBACK #undef SNAMES /* macros for manipulating states, large version */ #define states char * #define CLEAR(v) memset(v, 0, m->g->nstates) #define SET0(v, n) ((v)[n] = 0) #define SET1(v, n) ((v)[n] = 1) #define ISSET(v, n) ((v)[n]) #define ASSIGN(d, s) memcpy(d, s, m->g->nstates) #define EQ(a, b) (memcmp(a, b, m->g->nstates) == 0) #define STATEVARS int vn; char *space #define STATESETUP(m, nv) { (m)->space = malloc((nv)*(m)->g->nstates); \ if ((m)->space == NULL) return(REG_ESPACE); \ (m)->vn = 0; } #define STATETEARDOWN(m) { free((m)->space); } #define SETUP(v) ((v) = &m->space[m->vn++ * m->g->nstates]) #define onestate int #define INIT(o, n) ((o) = (n)) #define INC(o) ((o)++) #define ISSTATEIN(v, o) ((v)[o]) /* some abbreviations; note that some of these know variable names! */ /* do "if I'm here, I can also be there" etc without branches */ #define FWD(dst, src, n) ((dst)[here+(n)] |= (src)[here]) #define BACK(dst, src, n) ((dst)[here-(n)] |= (src)[here]) #define ISSETBACK(v, n) ((v)[here - (n)]) /* function names */ #define LNAMES /* flag */ #include "engine.c" /* - regexec - interface for matching = extern int regexec(const regex_t *, const char *, size_t, \ = regmatch_t [], int); = #define REG_NOTBOL 00001 = #define REG_NOTEOL 00002 = #define REG_STARTEND 00004 = #define REG_TRACE 00400 // tracing of execution = #define REG_LARGE 01000 // force large representation = #define REG_BACKR 02000 // force use of backref code * * We put this here so we can exploit knowledge of the state representation * when choosing which matcher to call. Also, by this point the matchers * have been prototyped. */ int /* 0 success, REG_NOMATCH failure */ regexec(preg, string, nmatch, pmatch, eflags) const regex_t *preg; const char *string; size_t nmatch; regmatch_t pmatch[]; int eflags; { register struct re_guts *g = preg->re_g; #ifdef REDEBUG # define GOODFLAGS(f) (f) #else # define GOODFLAGS(f) ((f)&(REG_NOTBOL|REG_NOTEOL|REG_STARTEND)) #endif if (preg->re_magic != MAGIC1 || g->magic != MAGIC2) return(REG_BADPAT); assert(!(g->iflags&BAD)); if (g->iflags&BAD) /* backstop for no-debug case */ return(REG_BADPAT); eflags = GOODFLAGS(eflags); if (g->nstates <= CHAR_BIT*sizeof(states1) && !(eflags®_LARGE)) return(smatcher(g, (char *)string, nmatch, pmatch, eflags)); else return(lmatcher(g, (char *)string, nmatch, pmatch, eflags)); } cups-2.2.7/vcnet/regex/regfree.c000664 000765 000024 00000001321 13255074424 017164 0ustar00msweetstaff000000 000000 #include #include #include #include #include "utils.h" #include "regex2.h" /* - regfree - free everything = extern void regfree(regex_t *); */ void regfree(preg) regex_t *preg; { register struct re_guts *g; if (preg->re_magic != MAGIC1) /* oops */ return; /* nice to complain, but hard */ g = preg->re_g; if (g == NULL || g->magic != MAGIC2) /* oops again */ return; preg->re_magic = 0; /* mark it invalid */ g->magic = 0; /* mark it invalid */ if (g->strip != NULL) free((char *)g->strip); if (g->sets != NULL) free((char *)g->sets); if (g->setbits != NULL) free((char *)g->setbits); if (g->must != NULL) free(g->must); free((char *)g); } cups-2.2.7/vcnet/regex/split.c000664 000765 000024 00000015625 13255074424 016714 0ustar00msweetstaff000000 000000 #include #include /* - split - divide a string into fields, like awk split() = int split(char *string, char *fields[], int nfields, char *sep); */ int /* number of fields, including overflow */ split(string, fields, nfields, sep) char *string; char *fields[]; /* list is not NULL-terminated */ int nfields; /* number of entries available in fields[] */ char *sep; /* "" white, "c" single char, "ab" [ab]+ */ { register char *p = string; register char c; /* latest character */ register char sepc = sep[0]; register char sepc2; register int fn; register char **fp = fields; register char *sepp; register int trimtrail; /* white space */ if (sepc == '\0') { while ((c = *p++) == ' ' || c == '\t') continue; p--; trimtrail = 1; sep = " \t"; /* note, code below knows this is 2 long */ sepc = ' '; } else trimtrail = 0; sepc2 = sep[1]; /* now we can safely pick this up */ /* catch empties */ if (*p == '\0') return(0); /* single separator */ if (sepc2 == '\0') { fn = nfields; for (;;) { *fp++ = p; fn--; if (fn == 0) break; while ((c = *p++) != sepc) if (c == '\0') return(nfields - fn); *(p-1) = '\0'; } /* we have overflowed the fields vector -- just count them */ fn = nfields; for (;;) { while ((c = *p++) != sepc) if (c == '\0') return(fn); fn++; } /* not reached */ } /* two separators */ if (sep[2] == '\0') { fn = nfields; for (;;) { *fp++ = p; fn--; while ((c = *p++) != sepc && c != sepc2) if (c == '\0') { if (trimtrail && **(fp-1) == '\0') fn++; return(nfields - fn); } if (fn == 0) break; *(p-1) = '\0'; while ((c = *p++) == sepc || c == sepc2) continue; p--; } /* we have overflowed the fields vector -- just count them */ fn = nfields; while (c != '\0') { while ((c = *p++) == sepc || c == sepc2) continue; p--; fn++; while ((c = *p++) != '\0' && c != sepc && c != sepc2) continue; } /* might have to trim trailing white space */ if (trimtrail) { p--; while ((c = *--p) == sepc || c == sepc2) continue; p++; if (*p != '\0') { if (fn == nfields+1) *p = '\0'; fn--; } } return(fn); } /* n separators */ fn = 0; for (;;) { if (fn < nfields) *fp++ = p; fn++; for (;;) { c = *p++; if (c == '\0') return(fn); sepp = sep; while ((sepc = *sepp++) != '\0' && sepc != c) continue; if (sepc != '\0') /* it was a separator */ break; } if (fn < nfields) *(p-1) = '\0'; for (;;) { c = *p++; sepp = sep; while ((sepc = *sepp++) != '\0' && sepc != c) continue; if (sepc == '\0') /* it wasn't a separator */ break; } p--; } /* not reached */ } #ifdef TEST_SPLIT /* * test program * pgm runs regression * pgm sep splits stdin lines by sep * pgm str sep splits str by sep * pgm str sep n splits str by sep n times */ int main(argc, argv) int argc; char *argv[]; { char buf[512]; register int n; # define MNF 10 char *fields[MNF]; if (argc > 4) for (n = atoi(argv[3]); n > 0; n--) { (void) strcpy(buf, argv[1]); } else if (argc > 3) for (n = atoi(argv[3]); n > 0; n--) { (void) strcpy(buf, argv[1]); (void) split(buf, fields, MNF, argv[2]); } else if (argc > 2) dosplit(argv[1], argv[2]); else if (argc > 1) while (fgets(buf, sizeof(buf), stdin) != NULL) { buf[strlen(buf)-1] = '\0'; /* stomp newline */ dosplit(buf, argv[1]); } else regress(); exit(0); } dosplit(string, seps) char *string; char *seps; { # define NF 5 char *fields[NF]; register int nf; nf = split(string, fields, NF, seps); print(nf, NF, fields); } print(nf, nfp, fields) int nf; int nfp; char *fields[]; { register int fn; register int bound; bound = (nf > nfp) ? nfp : nf; printf("%d:\t", nf); for (fn = 0; fn < bound; fn++) printf("\"%s\"%s", fields[fn], (fn+1 < nf) ? ", " : "\n"); } #define RNF 5 /* some table entries know this */ struct { char *str; char *seps; int nf; char *fi[RNF]; } tests[] = { "", " ", 0, { "" }, " ", " ", 2, { "", "" }, "x", " ", 1, { "x" }, "xy", " ", 1, { "xy" }, "x y", " ", 2, { "x", "y" }, "abc def g ", " ", 5, { "abc", "def", "", "g", "" }, " a bcd", " ", 4, { "", "", "a", "bcd" }, "a b c d e f", " ", 6, { "a", "b", "c", "d", "e f" }, " a b c d ", " ", 6, { "", "a", "b", "c", "d " }, "", " _", 0, { "" }, " ", " _", 2, { "", "" }, "x", " _", 1, { "x" }, "x y", " _", 2, { "x", "y" }, "ab _ cd", " _", 2, { "ab", "cd" }, " a_b c ", " _", 5, { "", "a", "b", "c", "" }, "a b c_d e f", " _", 6, { "a", "b", "c", "d", "e f" }, " a b c d ", " _", 6, { "", "a", "b", "c", "d " }, "", " _~", 0, { "" }, " ", " _~", 2, { "", "" }, "x", " _~", 1, { "x" }, "x y", " _~", 2, { "x", "y" }, "ab _~ cd", " _~", 2, { "ab", "cd" }, " a_b c~", " _~", 5, { "", "a", "b", "c", "" }, "a b_c d~e f", " _~", 6, { "a", "b", "c", "d", "e f" }, "~a b c d ", " _~", 6, { "", "a", "b", "c", "d " }, "", " _~-", 0, { "" }, " ", " _~-", 2, { "", "" }, "x", " _~-", 1, { "x" }, "x y", " _~-", 2, { "x", "y" }, "ab _~- cd", " _~-", 2, { "ab", "cd" }, " a_b c~", " _~-", 5, { "", "a", "b", "c", "" }, "a b_c-d~e f", " _~-", 6, { "a", "b", "c", "d", "e f" }, "~a-b c d ", " _~-", 6, { "", "a", "b", "c", "d " }, "", " ", 0, { "" }, " ", " ", 2, { "", "" }, "x", " ", 1, { "x" }, "xy", " ", 1, { "xy" }, "x y", " ", 2, { "x", "y" }, "abc def g ", " ", 4, { "abc", "def", "g", "" }, " a bcd", " ", 3, { "", "a", "bcd" }, "a b c d e f", " ", 6, { "a", "b", "c", "d", "e f" }, " a b c d ", " ", 6, { "", "a", "b", "c", "d " }, "", "", 0, { "" }, " ", "", 0, { "" }, "x", "", 1, { "x" }, "xy", "", 1, { "xy" }, "x y", "", 2, { "x", "y" }, "abc def g ", "", 3, { "abc", "def", "g" }, "\t a bcd", "", 2, { "a", "bcd" }, " a \tb\t c ", "", 3, { "a", "b", "c" }, "a b c d e ", "", 5, { "a", "b", "c", "d", "e" }, "a b\tc d e f", "", 6, { "a", "b", "c", "d", "e f" }, " a b c d e f ", "", 6, { "a", "b", "c", "d", "e f " }, NULL, NULL, 0, { NULL }, }; regress() { char buf[512]; register int n; char *fields[RNF+1]; register int nf; register int i; register int printit; register char *f; for (n = 0; tests[n].str != NULL; n++) { (void) strcpy(buf, tests[n].str); fields[RNF] = NULL; nf = split(buf, fields, RNF, tests[n].seps); printit = 0; if (nf != tests[n].nf) { printf("split `%s' by `%s' gave %d fields, not %d\n", tests[n].str, tests[n].seps, nf, tests[n].nf); printit = 1; } else if (fields[RNF] != NULL) { printf("split() went beyond array end\n"); printit = 1; } else { for (i = 0; i < nf && i < RNF; i++) { f = fields[i]; if (f == NULL) f = "(NULL)"; if (strcmp(f, tests[n].fi[i]) != 0) { printf("split `%s' by `%s', field %d is `%s', not `%s'\n", tests[n].str, tests[n].seps, i, fields[i], tests[n].fi[i]); printit = 1; } } } if (printit) print(nf, RNF, fields); } } #endif cups-2.2.7/vcnet/regex/tests000664 000765 000024 00000030016 13255074424 016471 0ustar00msweetstaff000000 000000 # regular expression test set # Lines are at least three fields, separated by one or more tabs. "" stands # for an empty field. First field is an RE. Second field is flags. If # C flag given, regcomp() is expected to fail, and the third field is the # error name (minus the leading REG_). # # Otherwise it is expected to succeed, and the third field is the string to # try matching it against. If there is no fourth field, the match is # expected to fail. If there is a fourth field, it is the substring that # the RE is expected to match. If there is a fifth field, it is a comma- # separated list of what the subexpressions should match, with - indicating # no match for that one. In both the fourth and fifth fields, a (sub)field # starting with @ indicates that the (sub)expression is expected to match # a null string followed by the stuff after the @; this provides a way to # test where null strings match. The character `N' in REs and strings # is newline, `S' is space, `T' is tab, `Z' is NUL. # # The full list of flags: # - placeholder, does nothing # b RE is a BRE, not an ERE # & try it as both an ERE and a BRE # C regcomp() error expected, third field is error name # i REG_ICASE # m ("mundane") REG_NOSPEC # s REG_NOSUB (not really testable) # n REG_NEWLINE # ^ REG_NOTBOL # $ REG_NOTEOL # # REG_STARTEND (see below) # p REG_PEND # # For REG_STARTEND, the start/end offsets are those of the substring # enclosed in (). # basics a & a a abc & abc abc abc|de - abc abc a|b|c - abc a # parentheses and perversions thereof a(b)c - abc abc a\(b\)c b abc abc a( C EPAREN a( b a( a( a\( - a( a( a\( bC EPAREN a\(b bC EPAREN a(b C EPAREN a(b b a(b a(b # gag me with a right parenthesis -- 1003.2 goofed here (my fault, partly) a) - a) a) ) - ) ) # end gagging (in a just world, those *should* give EPAREN) a) b a) a) a\) bC EPAREN \) bC EPAREN a()b - ab ab a\(\)b b ab ab # anchoring and REG_NEWLINE ^abc$ & abc abc a^b - a^b a^b b a^b a^b a$b - a$b a$b b a$b a$b ^ & abc @abc $ & abc @ ^$ & "" @ $^ - "" @ \($\)\(^\) b "" @ # stop retching, those are legitimate (although disgusting) ^^ - "" @ $$ - "" @ b$ & abNc b$ &n abNc b ^b$ & aNbNc ^b$ &n aNbNc b ^$ &n aNNb @Nb ^$ n abc ^$ n abcN @ $^ n aNNb @Nb \($\)\(^\) bn aNNb @Nb ^^ n^ aNNb @Nb $$ n aNNb @NN ^a ^ a a$ $ a ^a ^n aNb ^b ^n aNb b a$ $n bNa b$ $n bNa b a*(^b$)c* - b b a*\(^b$\)c* b b b # certain syntax errors and non-errors | C EMPTY | b | | * C BADRPT * b * * + C BADRPT ? C BADRPT "" &C EMPTY () - abc @abc \(\) b abc @abc a||b C EMPTY |ab C EMPTY ab| C EMPTY (|a)b C EMPTY (a|)b C EMPTY (*a) C BADRPT (+a) C BADRPT (?a) C BADRPT ({1}a) C BADRPT \(\{1\}a\) bC BADRPT (a|*b) C BADRPT (a|+b) C BADRPT (a|?b) C BADRPT (a|{1}b) C BADRPT ^* C BADRPT ^* b * * ^+ C BADRPT ^? C BADRPT ^{1} C BADRPT ^\{1\} bC BADRPT # metacharacters, backslashes a.c & abc abc a[bc]d & abd abd a\*c & a*c a*c a\\b & a\b a\b a\\\*b & a\*b a\*b a\bc & abc abc a\ &C EESCAPE a\\bc & a\bc a\bc \{ bC BADRPT a\[b & a[b a[b a[b &C EBRACK # trailing $ is a peculiar special case for the BRE code a$ & a a a$ & a$ a\$ & a a\$ & a$ a$ a\\$ & a a\\$ & a$ a\\$ & a\$ a\\$ & a\ a\ # back references, ugh a\(b\)\2c bC ESUBREG a\(b\1\)c bC ESUBREG a\(b*\)c\1d b abbcbbd abbcbbd bb a\(b*\)c\1d b abbcbd a\(b*\)c\1d b abbcbbbd ^\(.\)\1 b abc a\([bc]\)\1d b abcdabbd abbd b a\(\([bc]\)\2\)*d b abbccd abbccd a\(\([bc]\)\2\)*d b abbcbd # actually, this next one probably ought to fail, but the spec is unclear a\(\(b\)*\2\)*d b abbbd abbbd # here is a case that no NFA implementation does right \(ab*\)[ab]*\1 b ababaaa ababaaa a # check out normal matching in the presence of back refs \(a\)\1bcd b aabcd aabcd \(a\)\1bc*d b aabcd aabcd \(a\)\1bc*d b aabd aabd \(a\)\1bc*d b aabcccd aabcccd \(a\)\1bc*[ce]d b aabcccd aabcccd ^\(a\)\1b\(c\)*cd$ b aabcccd aabcccd # ordinary repetitions ab*c & abc abc ab+c - abc abc ab?c - abc abc a\(*\)b b a*b a*b a\(**\)b b ab ab a\(***\)b bC BADRPT *a b *a *a **a b a a ***a bC BADRPT # the dreaded bounded repetitions { & { { {abc & {abc {abc {1 C BADRPT {1} C BADRPT a{b & a{b a{b a{1}b - ab ab a\{1\}b b ab ab a{1,}b - ab ab a\{1,\}b b ab ab a{1,2}b - aab aab a\{1,2\}b b aab aab a{1 C EBRACE a\{1 bC EBRACE a{1a C EBRACE a\{1a bC EBRACE a{1a} C BADBR a\{1a\} bC BADBR a{,2} - a{,2} a{,2} a\{,2\} bC BADBR a{,} - a{,} a{,} a\{,\} bC BADBR a{1,x} C BADBR a\{1,x\} bC BADBR a{1,x C EBRACE a\{1,x bC EBRACE a{300} C BADBR a\{300\} bC BADBR a{1,0} C BADBR a\{1,0\} bC BADBR ab{0,0}c - abcac ac ab\{0,0\}c b abcac ac ab{0,1}c - abcac abc ab\{0,1\}c b abcac abc ab{0,3}c - abbcac abbc ab\{0,3\}c b abbcac abbc ab{1,1}c - acabc abc ab\{1,1\}c b acabc abc ab{1,3}c - acabc abc ab\{1,3\}c b acabc abc ab{2,2}c - abcabbc abbc ab\{2,2\}c b abcabbc abbc ab{2,4}c - abcabbc abbc ab\{2,4\}c b abcabbc abbc ((a{1,10}){1,10}){1,10} - a a a,a # multiple repetitions a** &C BADRPT a++ C BADRPT a?? C BADRPT a*+ C BADRPT a*? C BADRPT a+* C BADRPT a+? C BADRPT a?* C BADRPT a?+ C BADRPT a{1}{1} C BADRPT a*{1} C BADRPT a+{1} C BADRPT a?{1} C BADRPT a{1}* C BADRPT a{1}+ C BADRPT a{1}? C BADRPT a*{b} - a{b} a{b} a\{1\}\{1\} bC BADRPT a*\{1\} bC BADRPT a\{1\}* bC BADRPT # brackets, and numerous perversions thereof a[b]c & abc abc a[ab]c & abc abc a[^ab]c & adc adc a[]b]c & a]c a]c a[[b]c & a[c a[c a[-b]c & a-c a-c a[^]b]c & adc adc a[^-b]c & adc adc a[b-]c & a-c a-c a[b &C EBRACK a[] &C EBRACK a[1-3]c & a2c a2c a[3-1]c &C ERANGE a[1-3-5]c &C ERANGE a[[.-.]--]c & a-c a-c a[1- &C ERANGE a[[. &C EBRACK a[[.x &C EBRACK a[[.x. &C EBRACK a[[.x.] &C EBRACK a[[.x.]] & ax ax a[[.x,.]] &C ECOLLATE a[[.one.]]b & a1b a1b a[[.notdef.]]b &C ECOLLATE a[[.].]]b & a]b a]b a[[:alpha:]]c & abc abc a[[:notdef:]]c &C ECTYPE a[[: &C EBRACK a[[:alpha &C EBRACK a[[:alpha:] &C EBRACK a[[:alpha,:] &C ECTYPE a[[:]:]]b &C ECTYPE a[[:-:]]b &C ECTYPE a[[:alph:]] &C ECTYPE a[[:alphabet:]] &C ECTYPE [[:alnum:]]+ - -%@a0X- a0X [[:alpha:]]+ - -%@aX0- aX [[:blank:]]+ - aSSTb SST [[:cntrl:]]+ - aNTb NT [[:digit:]]+ - a019b 019 [[:graph:]]+ - Sa%bS a%b [[:lower:]]+ - AabC ab [[:print:]]+ - NaSbN aSb [[:punct:]]+ - S%-&T %-& [[:space:]]+ - aSNTb SNT [[:upper:]]+ - aBCd BC [[:xdigit:]]+ - p0f3Cq 0f3C a[[=b=]]c & abc abc a[[= &C EBRACK a[[=b &C EBRACK a[[=b= &C EBRACK a[[=b=] &C EBRACK a[[=b,=]] &C ECOLLATE a[[=one=]]b & a1b a1b # complexities a(((b)))c - abc abc a(b|(c))d - abd abd a(b*|c)d - abbd abbd # just gotta have one DFA-buster, of course a[ab]{20} - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab # and an inline expansion in case somebody gets tricky a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab] - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab # and in case somebody just slips in an NFA... a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night) - aaaaabaaaabaaaabaaaabweeknights aaaaabaaaabaaaabaaaabweeknights # fish for anomalies as the number of states passes 32 12345678901234567890123456789 - a12345678901234567890123456789b 12345678901234567890123456789 123456789012345678901234567890 - a123456789012345678901234567890b 123456789012345678901234567890 1234567890123456789012345678901 - a1234567890123456789012345678901b 1234567890123456789012345678901 12345678901234567890123456789012 - a12345678901234567890123456789012b 12345678901234567890123456789012 123456789012345678901234567890123 - a123456789012345678901234567890123b 123456789012345678901234567890123 # and one really big one, beyond any plausible word width 1234567890123456789012345678901234567890123456789012345678901234567890 - a1234567890123456789012345678901234567890123456789012345678901234567890b 1234567890123456789012345678901234567890123456789012345678901234567890 # fish for problems as brackets go past 8 [ab][cd][ef][gh][ij][kl][mn] - xacegikmoq acegikm [ab][cd][ef][gh][ij][kl][mn][op] - xacegikmoq acegikmo [ab][cd][ef][gh][ij][kl][mn][op][qr] - xacegikmoqy acegikmoq [ab][cd][ef][gh][ij][kl][mn][op][q] - xacegikmoqy acegikmoq # subtleties of matching abc & xabcy abc a\(b\)?c\1d b acd aBc i Abc Abc a[Bc]*d i abBCcd abBCcd 0[[:upper:]]1 &i 0a1 0a1 0[[:lower:]]1 &i 0A1 0A1 a[^b]c &i abc a[^b]c &i aBc a[^b]c &i adc adc [a]b[c] - abc abc [a]b[a] - aba aba [abc]b[abc] - abc abc [abc]b[abd] - abd abd a(b?c)+d - accd accd (wee|week)(knights|night) - weeknights weeknights (we|wee|week|frob)(knights|night|day) - weeknights weeknights a[bc]d - xyzaaabcaababdacd abd a[ab]c - aaabc abc abc s abc abc a* & b @b # Let's have some fun -- try to match a C comment. # first the obvious, which looks okay at first glance... /\*.*\*/ - /*x*/ /*x*/ # but... /\*.*\*/ - /*x*/y/*z*/ /*x*/y/*z*/ # okay, we must not match */ inside; try to do that... /\*([^*]|\*[^/])*\*/ - /*x*/ /*x*/ /\*([^*]|\*[^/])*\*/ - /*x*/y/*z*/ /*x*/ # but... /\*([^*]|\*[^/])*\*/ - /*x**/y/*z*/ /*x**/y/*z*/ # and a still fancier version, which does it right (I think)... /\*([^*]|\*+[^*/])*\*+/ - /*x*/ /*x*/ /\*([^*]|\*+[^*/])*\*+/ - /*x*/y/*z*/ /*x*/ /\*([^*]|\*+[^*/])*\*+/ - /*x**/y/*z*/ /*x**/ /\*([^*]|\*+[^*/])*\*+/ - /*x****/y/*z*/ /*x****/ /\*([^*]|\*+[^*/])*\*+/ - /*x**x*/y/*z*/ /*x**x*/ /\*([^*]|\*+[^*/])*\*+/ - /*x***x/y/*z*/ /*x***x/y/*z*/ # subexpressions .* - abc abc - a(b)(c)d - abcd abcd b,c a(((b)))c - abc abc b,b,b a(b|(c))d - abd abd b,- a(b*|c|e)d - abbd abbd bb a(b*|c|e)d - acd acd c a(b*|c|e)d - ad ad @d a(b?)c - abc abc b a(b?)c - ac ac @c a(b+)c - abc abc b a(b+)c - abbbc abbbc bbb a(b*)c - ac ac @c (a|ab)(bc([de]+)f|cde) - abcdef abcdef a,bcdef,de # the regression tester only asks for 9 subexpressions a(b)(c)(d)(e)(f)(g)(h)(i)(j)k - abcdefghijk abcdefghijk b,c,d,e,f,g,h,i,j a(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l - abcdefghijkl abcdefghijkl b,c,d,e,f,g,h,i,j,k a([bc]?)c - abc abc b a([bc]?)c - ac ac @c a([bc]+)c - abc abc b a([bc]+)c - abcc abcc bc a([bc]+)bc - abcbc abcbc bc a(bb+|b)b - abb abb b a(bbb+|bb+|b)b - abb abb b a(bbb+|bb+|b)b - abbb abbb bb a(bbb+|bb+|b)bb - abbb abbb b (.*).* - abcdef abcdef abcdef (a*)* - bc @b @b # do we get the right subexpression when it is used more than once? a(b|c)*d - ad ad - a(b|c)*d - abcd abcd c a(b|c)+d - abd abd b a(b|c)+d - abcd abcd c a(b|c?)+d - ad ad @d a(b|c?)+d - abcd abcd @d a(b|c){0,0}d - ad ad - a(b|c){0,1}d - ad ad - a(b|c){0,1}d - abd abd b a(b|c){0,2}d - ad ad - a(b|c){0,2}d - abcd abcd c a(b|c){0,}d - ad ad - a(b|c){0,}d - abcd abcd c a(b|c){1,1}d - abd abd b a(b|c){1,1}d - acd acd c a(b|c){1,2}d - abd abd b a(b|c){1,2}d - abcd abcd c a(b|c){1,}d - abd abd b a(b|c){1,}d - abcd abcd c a(b|c){2,2}d - acbd acbd b a(b|c){2,2}d - abcd abcd c a(b|c){2,4}d - abcd abcd c a(b|c){2,4}d - abcbd abcbd b a(b|c){2,4}d - abcbcd abcbcd c a(b|c){2,}d - abcd abcd c a(b|c){2,}d - abcbd abcbd b a(b+|((c)*))+d - abd abd @d,@d,- a(b+|((c)*))+d - abcd abcd @d,@d,- # check out the STARTEND option [abc] &# a(b)c b [abc] &# a(d)c [abc] &# a(bc)d b [abc] &# a(dc)d c . &# a()c b.*c &# b(bc)c bc b.* &# b(bc)c bc .*c &# b(bc)c bc # plain strings, with the NOSPEC flag abc m abc abc abc m xabcy abc abc m xyz a*b m aba*b a*b a*b m ab "" mC EMPTY # cases involving NULs aZb & a a aZb &p a aZb &p# (aZb) aZb aZ*b &p# (ab) ab a.b &# (aZb) aZb a.* &# (aZb)c aZb # word boundaries (ick) [[:<:]]a & a a [[:<:]]a & ba [[:<:]]a & -a a a[[:>:]] & a a a[[:>:]] & ab a[[:>:]] & a- a [[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc abc [[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc-q abc [[:<:]]a.c[[:>:]] & axc-dayc-dazce-abc axc [[:<:]]b.c[[:>:]] & a_bxc-byc_d-bzc-q bzc [[:<:]].x..[[:>:]] & y_xa_-_xb_y-_xc_-axdc _xc_ [[:<:]]a_b[[:>:]] & x_a_b # past problems, and suspected problems (A[1])|(A[2])|(A[3])|(A[4])|(A[5])|(A[6])|(A[7])|(A[8])|(A[9])|(A[A]) - A1 A1 abcdefghijklmnop i abcdefghijklmnop abcdefghijklmnop abcdefghijklmnopqrstuv i abcdefghijklmnopqrstuv abcdefghijklmnopqrstuv (ALAK)|(ALT[AB])|(CC[123]1)|(CM[123]1)|(GAMC)|(LC[23][EO ])|(SEM[1234])|(SL[ES][12])|(SLWW)|(SLF )|(SLDT)|(VWH[12])|(WH[34][EW])|(WP1[ESN]) - CC11 CC11 CC[13]1|a{21}[23][EO][123][Es][12]a{15}aa[34][EW]aaaaaaa[X]a - CC11 CC11 Char \([a-z0-9_]*\)\[.* b Char xyz[k Char xyz[k xyz a?b - ab ab -\{0,1\}[0-9]*$ b -5 -5 a*a*a*a*a*a*a* & aaaaaa aaaaaa cups-2.2.7/vcnet/regex/utils.h000664 000765 000024 00000000764 13255074424 016724 0ustar00msweetstaff000000 000000 /* utility definitions */ #ifdef _POSIX2_RE_DUP_MAX #define DUPMAX _POSIX2_RE_DUP_MAX #else #define DUPMAX 255 #endif #define INFINITY (DUPMAX + 1) #define NC (CHAR_MAX - CHAR_MIN + 1) typedef unsigned char uch; /* switch off assertions (if not already off) if no REDEBUG */ #ifndef REDEBUG #ifndef NDEBUG #define NDEBUG /* no assertions please */ #endif #endif #include /* for old systems with bcopy() but no memmove() */ #ifdef USEBCOPY #define memmove(d, s, c) bcopy(s, d, c) #endif cups-2.2.7/vcnet/regex/WHATSNEW000664 000765 000024 00000013651 13255074424 016575 0ustar00msweetstaff000000 000000 New in alpha3.8: Bug fix for signed/unsigned mixup, found and fixed by the FreeBSD folks. New in alpha3.7: A bit of cleanup aimed at maximizing portability, possibly at slight cost in efficiency. "ul" suffixes and "unsigned long" no longer appear, in particular. New in alpha3.6: A couple more portability glitches fixed. New in alpha3.5: Active development of this code has been stopped -- I'm working on a complete reimplementation -- but folks have found some minor portability glitches and the like, hence this release to fix them. One penalty: slightly reduced compatibility with old compilers, because the ANSI C `unsigned long' type and `ul' constant suffix are used in a few places (I could avoid this but it would be considerably more work). New in alpha3.4: The complex bug alluded to below has been fixed (in a slightly kludgey temporary way that may hurt efficiency a bit; this is another "get it out the door for 4.4" release). The tests at the end of the tests file have accordingly been uncommented. The primary sign of the bug was that something like a?b matching ab matched b rather than ab. (The bug was essentially specific to this exact situation, else it would have shown up earlier.) New in alpha3.3: The definition of word boundaries has been altered slightly, to more closely match the usual programming notion that "_" is an alphabetic. Stuff used for pre-ANSI systems is now in a subdir, and the makefile no longer alludes to it in mysterious ways. The makefile has generally been cleaned up some. Fixes have been made (again!) so that the regression test will run without -DREDEBUG, at the cost of weaker checking. A workaround for a bug in some folks' has been added. And some more things have been added to tests, including a couple right at the end which are commented out because the code currently flunks them (complex bug; fix coming). Plus the usual minor cleanup. New in alpha3.2: Assorted bits of cleanup and portability improvement (the development base is now a BSDI system using GCC instead of an ancient Sun system, and the newer compiler exposed some glitches). Fix for a serious bug that affected REs using many [] (including REG_ICASE REs because of the way they are implemented), *sometimes*, depending on memory-allocation patterns. The header-file prototypes no longer name the parameters, avoiding possible name conflicts. The possibility that some clot has defined CHAR_MIN as (say) `-128' instead of `(-128)' is now handled gracefully. "uchar" is no longer used as an internal type name (too many people have the same idea). Still the same old lousy performance, alas. New in alpha3.1: Basically nothing, this release is just a bookkeeping convenience. Stay tuned. New in alpha3.0: Performance is no better, alas, but some fixes have been made and some functionality has been added. (This is basically the "get it out the door in time for 4.4" release.) One bug fix: regfree() didn't free the main internal structure (how embarrassing). It is now possible to put NULs in either the RE or the target string, using (resp.) a new REG_PEND flag and the old REG_STARTEND flag. The REG_NOSPEC flag to regcomp() makes all characters ordinary, so you can match a literal string easily (this will become more useful when performance improves!). There are now primitives to match beginnings and ends of words, although the syntax is disgusting and so is the implementation. The REG_ATOI debugging interface has changed a bit. And there has been considerable internal cleanup of various kinds. New in alpha2.3: Split change list out of README, and moved flags notes into Makefile. Macro-ized the name of regex(7) in regex(3), since it has to change for 4.4BSD. Cleanup work in engine.c, and some new regression tests to catch tricky cases thereof. New in alpha2.2: Out-of-date manpages updated. Regerror() acquires two small extensions -- REG_ITOA and REG_ATOI -- which avoid debugging kludges in my own test program and might be useful to others for similar purposes. The regression test will now compile (and run) without REDEBUG. The BRE \$ bug is fixed. Most uses of "uchar" are gone; it's all chars now. Char/uchar parameters are now written int/unsigned, to avoid possible portability problems with unpromoted parameters. Some unsigned casts have been introduced to minimize portability problems with shifting into sign bits. New in alpha2.1: Lots of little stuff, cleanup and fixes. The one big thing is that regex.h is now generated, using mkh, rather than being supplied in the distribution; due to circularities in dependencies, you have to build regex.h explicitly by "make h". The two known bugs have been fixed (and the regression test now checks for them), as has a problem with assertions not being suppressed in the absence of REDEBUG. No performance work yet. New in alpha2: Backslash-anything is an ordinary character, not an error (except, of course, for the handful of backslashed metacharacters in BREs), which should reduce script breakage. The regression test checks *where* null strings are supposed to match, and has generally been tightened up somewhat. Small bug fixes in parameter passing (not harmful, but technically errors) and some other areas. Debugging invoked by defining REDEBUG rather than not defining NDEBUG. New in alpha+3: full prototyping for internal routines, using a little helper program, mkh, which extracts prototypes given in stylized comments. More minor cleanup. Buglet fix: it's CHAR_BIT, not CHAR_BITS. Simple pre-screening of input when a literal string is known to be part of the RE; this does wonders for performance. New in alpha+2: minor bits of cleanup. Notably, the number "32" for the word width isn't hardwired into regexec.c any more, the public header file prototypes the functions if __STDC__ is defined, and some small typos in the manpages have been fixed. New in alpha+1: improvements to the manual pages, and an important extension, the REG_STARTEND option to regexec(). cups-2.2.7/test/4.1-requests.test000664 000765 000024 00000006207 13255074424 017213 0ustar00msweetstaff000000 000000 # # "$Id$" # # Verify that the server requires the following attributes: # # attributes-charset # attributes-natural-language # printer-uri/job-uri # { # The name of the test... NAME "No Attributes" # The operation to use OPERATION get-jobs # What statuses are OK? STATUS client-error-bad-request # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Charset Attribute" # The operation to use OPERATION get-jobs # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 # What statuses are OK? STATUS client-error-bad-request # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Language Attribute" # The operation to use OPERATION get-jobs # The attributes to send GROUP operation ATTR language attributes-natural-language en # What statuses are OK? STATUS client-error-bad-request # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Language + Charset Attributes" # The operation to use OPERATION get-jobs # The attributes to send GROUP operation ATTR language attributes-natural-language en ATTR charset attributes-charset utf-8 # What statuses are OK? STATUS client-error-bad-request # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Charset + Language Attributes" # The operation to use OPERATION get-jobs # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en # What statuses are OK? STATUS client-error-bad-request # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Charset + Language + Printer URI Attributes" # The operation to use OPERATION get-jobs # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Charset + Language + Job URI Attributes" # The operation to use OPERATION get-jobs # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri job-uri $scheme://$hostname:$port/jobs # What statuses are OK? STATUS client-error-bad-request # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Bad IPP Version" # The operation to use OPERATION get-jobs # The version number to use VERSION 0.0 # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri ipp://localhost/printers # What statuses are OK? STATUS server-error-version-not-supported } # # End of "$Id$" # cups-2.2.7/test/4.2-cups-printer-ops.test000664 000765 000024 00000016044 13255074424 020573 0ustar00msweetstaff000000 000000 # # "$Id$" # # Verify that the CUPS printer operations work. # { # The name of the test... NAME "Add Printer Test1" # The operation to use OPERATION cups-add-printer RESOURCE /admin/ # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 FILE testhp.ppd # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Verify Printer Test1 Added" # The operation to use OPERATION get-printer-attributes RESOURCE / # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Delete Printer Test1" # The operation to use OPERATION cups-delete-printer RESOURCE /admin/ # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Verify Printer Test1 Deleted" # The operation to use OPERATION get-printer-attributes RESOURCE / # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 # What statuses are OK? STATUS client-error-not-found # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Subscribe to Printer Events" # The operation to use OPERATION Create-Printer-Subscription RESOURCE / # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/ ATTR name requesting-user-name $user GROUP subscription ATTR uri notify-recipient-uri testnotify:// ATTR keyword notify-events printer-added,printer-modified,printer-deleted # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT notify-subscription-id } { # The name of the test... NAME "Add Printer Test2" # The operation to use OPERATION cups-add-printer RESOURCE /admin/ # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test2 FILE testhp.ppd # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Verify Printer Test2 Added" # The operation to use OPERATION get-printer-attributes RESOURCE / # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test2 # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Modify Printer Test2" # The operation to use OPERATION cups-add-printer RESOURCE /admin/ # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test2 GROUP printer ATTR uri device-uri file:/tmp/Test2 ATTR enum printer-state 3 ATTR boolean printer-is-accepting-jobs true # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Re-Add Printer Test1" # The operation to use OPERATION cups-add-printer RESOURCE /admin/ # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 GROUP printer ATTR uri device-uri file:/tmp/Test1 ATTR enum printer-state 3 ATTR boolean printer-is-accepting-jobs true ATTR text printer-info "Test Printer 1" FILE testps.ppd # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Verify Printer Test1 Re-Added" # The operation to use OPERATION get-printer-attributes RESOURCE / # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Get Default Printer with no default set" # The operation to use OPERATION cups-get-default RESOURCE / # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en # What statuses are OK? STATUS client-error-not-found # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Set Default Printer to Test1" # The operation to use OPERATION cups-set-default RESOURCE /admin/ # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Get Default Printer" # The operation to use OPERATION cups-get-default RESOURCE / # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT printer-name EXPECT printer-uri-supported } { # The name of the test... NAME "Get IPP/2.x Attributes for Printer Test1" # The operation to use OPERATION get-printer-attributes RESOURCE / # The IPP version to use VERSION 2.0 # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT media-col-default } # # End of "$Id$" # cups-2.2.7/test/4.3-job-ops.test000664 000765 000024 00000016055 13255074424 016715 0ustar00msweetstaff000000 000000 # # "$Id$" # # Verify that the IPP job operations work. # { # The name of the test... NAME "Print PostScript Job with bad job-sheets value to Test1" # The operation to use OPERATION print-job RESOURCE /printers/Test1 # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 ATTR name requesting-user-name $user ATTR name job-sheets "none\,none" FILE testfile.ps # What statuses are OK? STATUS client-error-bad-request } { # The name of the test... NAME "Print PostScript Job to Test1" # The operation to use OPERATION print-job RESOURCE /printers/Test1 # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 ATTR name requesting-user-name $user FILE testfile.ps # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT job-id } { # The name of the test... NAME "Get Job Attributes" # The operation to use OPERATION get-job-attributes RESOURCE /jobs # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 ATTR integer job-id $job-id # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT job-id EXPECT job-uri EXPECT job-state } { # The name of the test... NAME "Print JPEG Job to Test2" # The operation to use OPERATION print-job RESOURCE /printers/Test2 # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test2 ATTR name requesting-user-name $user GROUP subscription ATTR uri notify-recipient-uri testnotify:/// FILE testfile.jpg # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT job-id EXPECT notify-subscription-id } { # The name of the test... NAME "Get Job Attributes" # The operation to use OPERATION get-job-attributes RESOURCE /jobs # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test2 ATTR integer job-id $job-id # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT job-id EXPECT job-uri EXPECT job-state } { # The name of the test... NAME "Print Text Job to Test1" # The operation to use OPERATION print-job RESOURCE /printers/Test1 # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 ATTR name requesting-user-name $user FILE testfile.txt # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT job-id } { # The name of the test... NAME "Print PDF Job to Test1" # The operation to use OPERATION print-job RESOURCE /printers/Test1 # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 ATTR name requesting-user-name $user GROUP job ATTR keyword job-hold-until weekend FILE testfile.pdf # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT job-id } { # The name of the test... NAME "Hold Job on Test1" # The operation to use OPERATION hold-job RESOURCE /printers/Test1 # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 ATTR integer job-id $job-id ATTR name requesting-user-name $user # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Release Job on Test1" # The operation to use OPERATION release-job RESOURCE /printers/Test1 # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 ATTR integer job-id $job-id ATTR name requesting-user-name $user # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Print Held Image Job to Test1" # The operation to use OPERATION print-job RESOURCE /printers/Test1 # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 ATTR name requesting-user-name $user GROUP job ATTR keyword job-hold-until indefinite FILE testfile.jpg # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT job-id } { # The name of the test... NAME "Cancel Job" # The operation to use OPERATION cancel-job RESOURCE /jobs # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri job-uri $method://$hostname:$port/jobs/$job-id ATTR name requesting-user-name $user # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Get Job List on Test1" # The operation to use OPERATION get-jobs RESOURCE /printers/Test1 # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $method://$hostname:$port/printers/Test1 # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT !job-printer-uri } { # The name of the test... NAME "Get All Jobs" # The operation to use OPERATION get-jobs RESOURCE /jobs # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $scheme://$hostname:$port/ ATTR keyword requested-attributes all # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT job-uri EXPECT job-id EXPECT job-state EXPECT job-printer-uri } # # End of "$Id$" # cups-2.2.7/test/4.4-subscription-ops.test000664 000765 000024 00000007304 13255074424 020665 0ustar00msweetstaff000000 000000 # # "$Id$" # # Verify that the CUPS subscription operations work. # { # The name of the test... NAME "Add Printer Subscription w/Lease" # The operation to use OPERATION Create-Printer-Subscription RESOURCE / # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $scheme://$hostname:$port/printers/Test1 ATTR name requesting-user-name $user GROUP subscription ATTR uri notify-recipient-uri testnotify:// ATTR keyword notify-events printer-state-changed ATTR integer notify-lease-duration 5 # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT notify-subscription-id DISPLAY notify-subscription-id } { # The name of the test... NAME "Verify Subscription Expiration" # Delay test for 7 seconds to allow lease to expire... DELAY 7 # The operation to use OPERATION Get-Subscription-Attributes RESOURCE / # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $scheme://$hostname:$port/printers/Test1 ATTR integer notify-subscription-id $notify-subscription-id ATTR name requesting-user-name $user # What statuses are OK? STATUS client-error-not-found # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } { # The name of the test... NAME "Add 2 Printer Subscriptions w/Lease" # The operation to use OPERATION Create-Printer-Subscription RESOURCE / # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $scheme://$hostname:$port/printers/Test1 ATTR name requesting-user-name $user GROUP subscription ATTR uri notify-recipient-uri testnotify:// ATTR keyword notify-events printer-state-changed ATTR integer notify-lease-duration 5 GROUP subscription ATTR uri notify-recipient-uri testnotify:// ATTR keyword notify-events printer-config-changed ATTR integer notify-lease-duration 5 # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT notify-subscription-id DISPLAY notify-subscription-id } { # The name of the test... NAME "List Printer Subscriptions" # The operation to use OPERATION Get-Subscriptions RESOURCE / # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $scheme://$hostname:$port/printers/Test1 ATTR name requesting-user-name $user # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language EXPECT notify-subscription-id DISPLAY notify-subscription-id EXPECT notify-printer-uri DISPLAY notify-printer-uri EXPECT notify-events DISPLAY notify-events } { # The name of the test... NAME "Check MaxSubscriptions limits" # The operation to use OPERATION Create-Printer-Subscription RESOURCE / # The attributes to send GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $scheme://$hostname:$port/printers/Test1 ATTR name requesting-user-name $user GROUP subscription ATTR uri notify-recipient-uri testnotify:// ATTR keyword notify-events printer-state-changed ATTR integer notify-lease-duration 5 # What statuses are OK? STATUS client-error-too-many-subscriptions # What attributes do we expect? EXPECT attributes-charset EXPECT attributes-natural-language } # # End of "$Id$" # cups-2.2.7/test/5.1-lpadmin.sh000664 000765 000024 00000003160 13255074424 016413 0ustar00msweetstaff000000 000000 #!/bin/sh # # Test the lpadmin command. # # Copyright 2007-2013 by Apple Inc. # Copyright 1997-2005 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # echo "Add Printer Test" echo "" echo " lpadmin -p Test3 -v file:/dev/null -E -m drv:///sample.drv/deskjet.ppd" $VALGRIND ../systemv/lpadmin -p Test3 -v file:/dev/null -E -m drv:///sample.drv/deskjet.ppd 2>&1 if test $? != 0; then echo " FAILED" exit 1 else if test -f $CUPS_SERVERROOT/ppd/Test3.ppd; then echo " PASSED" else echo " FAILED (No PPD)" exit 1 fi fi echo "" echo "Modify Printer Test" echo "" echo " lpadmin -p Test3 -v file:/tmp/Test3 -o PageSize=A4" $VALGRIND ../systemv/lpadmin -p Test3 -v file:/tmp/Test3 -o PageSize=A4 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "Delete Printer Test" echo "" echo " lpadmin -x Test3" $VALGRIND ../systemv/lpadmin -x Test3 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "Add Shared Printer Test" echo "" echo " lpadmin -p Test3 -E -v ipp://localhost:$IPP_PORT/printers/Test2 -m raw" $VALGRIND ../systemv/lpadmin -p Test3 -E -v ipp://localhost:$IPP_PORT/printers/Test2 -m raw 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" cups-2.2.7/test/5.2-lpc.sh000664 000765 000024 00000001225 13255074424 015546 0ustar00msweetstaff000000 000000 #!/bin/sh # # Test the lpc command. # # Copyright 2007 by Apple Inc. # Copyright 1997-2005 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # echo "LPC Test" echo "" echo " lpc status" $VALGRIND ../berkeley/lpc status 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" cups-2.2.7/test/5.3-lpq.sh000664 000765 000024 00000001231 13255074424 015562 0ustar00msweetstaff000000 000000 #!/bin/sh # # Test the lpq command. # # Copyright 2007 by Apple Inc. # Copyright 1997-2005 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # echo "LPQ Test" echo "" echo " lpq -P Test1" $VALGRIND ../berkeley/lpq -P Test1 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" cups-2.2.7/test/5.4-lpstat.sh000664 000765 000024 00000002244 13255074424 016303 0ustar00msweetstaff000000 000000 #!/bin/sh # # Test the lpstat command. # # Copyright 2007-2017 by Apple Inc. # Copyright 1997-2005 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # echo "LPSTAT Basic Test" echo "" echo " lpstat -t" $VALGRIND ../systemv/lpstat -t 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "LPSTAT Enumeration Test" echo "" echo " lpstat -e" printers="`$VALGRIND ../systemv/lpstat -e 2>&1`" if test $? != 0 -o "x$printers" = x; then echo " FAILED" exit 1 else for printer in $printers; do echo $printer done echo " PASSED" fi echo "" echo "LPSTAT Get Host Test" echo "" echo " lpstat -H" server="`$VALGRIND ../systemv/lpstat -H 2>&1`" if test $? != 0 -o "x$server" != x$CUPS_SERVER; then echo " FAILED ($server)" exit 1 else echo " PASSED ($server)" fi echo "" cups-2.2.7/test/5.5-lp.sh000664 000765 000024 00000003764 13255074424 015420 0ustar00msweetstaff000000 000000 #!/bin/sh # # Test the lp command. # # Copyright 2007-2014 by Apple Inc. # Copyright 1997-2005 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # echo "LP Default Test" echo "" echo " lp testfile.pdf" $VALGRIND ../systemv/lp testfile.pdf 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "LP Destination Test" echo "" echo " lp -d Test3 -o fit-to-page testfile.jpg" $VALGRIND ../systemv/lp -d Test3 -o fit-to-page testfile.jpg 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "LP Options Test" echo "" echo " lp -d Test1 -P 1-4 -o job-sheets=classified,classified testfile.pdf" $VALGRIND ../systemv/lp -d Test1 -P 1-4 -o job-sheets=classified,classified testfile.pdf 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "LP Flood Test ($1 times in parallel)" echo "" echo " lp -d Test1 testfile.jpg" echo " lp -d Test2 testfile.jpg" i=0 pids="" while test $i -lt $1; do j=1 while test $j -le $2; do $VALGRIND ../systemv/lp -d test-$j testfile.jpg 2>&1 j=`expr $j + 1` done $VALGRIND ../systemv/lp -d Test1 testfile.jpg 2>&1 & pids="$pids $!" $VALGRIND ../systemv/lp -d Test2 testfile.jpg 2>&1 & pids="$pids $!" i=`expr $i + 1` done wait $pids if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" ./waitjobs.sh echo "LPSTAT Completed Jobs Order Test" echo "" echo " lpstat -W completed -o" $VALGRIND ../systemv/lpstat -W completed -o | tee $BASE/lpstat-completed.txt if test "`uniq -d $BASE/lpstat-completed.txt`" != ""; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" cups-2.2.7/test/5.6-lpr.sh000664 000765 000024 00000003361 13255074424 015574 0ustar00msweetstaff000000 000000 #!/bin/sh # # Test the lpr command. # # Copyright 2007-2014 by Apple Inc. # Copyright 1997-2005 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # echo "LPR Default Test" echo "" echo " lpr testfile.pdf" $VALGRIND ../berkeley/lpr testfile.pdf 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "LPR Destination Test" echo "" echo " lpr -P Test3 -o fit-to-page testfile.jpg" $VALGRIND ../berkeley/lpr -P Test3 -o fit-to-page testfile.jpg 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "LPR Options Test" echo "" echo " lpr -P Test1 -o number-up=4 -o job-sheets=standard,none testfile.pdf" $VALGRIND ../berkeley/lpr -P Test1 -o number-up=4 -o job-sheets=standard,none testfile.pdf 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "LPR Flood Test ($1 times in parallel)" echo "" echo " lpr -P Test1 testfile.jpg" echo " lpr -P Test2 testfile.jpg" i=0 pids="" while test $i -lt $1; do j=1 while test $j -le $2; do $VALGRIND ../berkeley/lpr -P test-$j testfile.jpg 2>&1 j=`expr $j + 1` done $VALGRIND ../berkeley/lpr -P Test1 testfile.jpg 2>&1 & pids="$pids $!" $VALGRIND ../berkeley/lpr -P Test2 testfile.jpg 2>&1 & pids="$pids $!" i=`expr $i + 1` done wait $pids if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" ./waitjobs.sh cups-2.2.7/test/5.7-lprm.sh000664 000765 000024 00000002144 13255074424 015750 0ustar00msweetstaff000000 000000 #!/bin/sh # # Test the lprm command. # # Copyright 2007-2011 by Apple Inc. # Copyright 1997-2005 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # echo "LPRM Current Test" echo "" echo " lpr -o job-hold-until=indefinite testfile.jpg" $VALGRIND ../berkeley/lpr -o job-hold-until=indefinite testfile.jpg 2>&1 echo " lprm" $VALGRIND ../berkeley/lprm 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "LPRM Destination Test" echo "" echo " lpr -P Test1 -o job-hold-until=indefinite testfile.jpg" $VALGRIND ../berkeley/lpr -P Test1 -o job-hold-until=indefinite testfile.jpg 2>&1 echo " lprm Test1" $VALGRIND ../berkeley/lprm Test1 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" cups-2.2.7/test/5.8-cancel.sh000664 000765 000024 00000002237 13255074424 016227 0ustar00msweetstaff000000 000000 #!/bin/sh # # Test the cancel command. # # Copyright 2007-2013 by Apple Inc. # Copyright 1997-2006 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # echo "Cancel Destination Test" echo "" echo " lp -d Test1 -o job-hold-until=indefinite testfile.jpg" $VALGRIND ../systemv/lp -d Test1 -o job-hold-until=indefinite testfile.jpg 2>&1 echo " cancel Test1" $VALGRIND ../systemv/cancel Test1 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "Cancel All Test" echo "" echo " cancel -a" $VALGRIND ../systemv/cancel -a 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "Purge All Test" echo "" echo " cancel -a -x" $VALGRIND ../systemv/cancel -a -x 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" cups-2.2.7/test/5.9-lpinfo.sh000664 000765 000024 00000002061 13255074424 016265 0ustar00msweetstaff000000 000000 #!/bin/sh # # Test the lpinfo command. # # Copyright 2007-2011 by Apple Inc. # Copyright 1997-2005 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # echo "LPINFO Devices Test" echo "" echo " lpinfo -v" $VALGRIND ../systemv/lpinfo -v 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "LPINFO Drivers Test" echo "" echo " lpinfo -m" $VALGRIND ../systemv/lpinfo -m 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" echo "LPINFO Drivers Test" echo "" echo " lpinfo -m | grep -q sample.drv" $VALGRIND ../systemv/lpinfo -m | grep -q sample.drv 2>&1 if test $? != 0; then echo " FAILED" exit 1 else echo " PASSED" fi echo "" cups-2.2.7/test/cancel-current-job.test000664 000765 000024 00000002756 13255074424 020522 0ustar00msweetstaff000000 000000 # # "$Id$" # # Cancel the currently printing job. # # Copyright 2007-2012 by Apple Inc. # Copyright 2001-2006 by Easy Software Products. All rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # Usage: # # ./ipptool printer-uri cancel-current-jobs.test # { # The name of the test... NAME "Get current job" # The operation to use OPERATION Get-Jobs # Attributes, starting in the operation group... GROUP operation-attributes-tag ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri ATTR integer limit 1 ATTR name requesting-user-name $user ATTR keyword requested-attributes job-id,job-state # What statuses are OK? STATUS successful-ok EXPECT job-id OF-TYPE integer COUNT 1 # What attributes to display DISPLAY job-id DISPLAY job-state } { SKIP-IF-NOT-DEFINED job-id NAME "Cancel current job" OPERATION Cancel-Job GROUP operation-attributes-tag ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri ATTR integer job-id $job-id ATTR name requesting-user-name $user # What statuses are OK? STATUS successful-ok } # # End of "$Id$". # cups-2.2.7/test/color.jpg000664 000765 000024 00000347400 13255074424 015762 0ustar00msweetstaff000000 000000 ÿØÿàJFIF´´ÿápExifMM*nt‚Š(2’‡i¦CanonCanon EOS D60´´2015:10:20 18:11:34‚šð‚øˆ'd0220‘‘(’ 0’8’ @’H’’ ’ P 0100   ¢X¢`¢¢¤¤¤¤^2003:09:24 10:22:352003:09:24 10:22:35׊WiñÂ%G;ÿâ XICC_PROFILE HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿÛC      ÿÛC  ÿÀÿÄ ÿÄK!1AQ"aq2‘#B¡±ÁRÑáð $3br‚ñC’%4DSc¢²&5ƒ“ÿÄ ÿÄ;!1"2A#QBa3qR‘$¡±ÁðCSÑábÿÚ ?âê´Éië^<~ÏÓ°—Ôt¿TšK2AKZÕkÚ«ê’à[\6Àlá*pŸÄD¸9½~§õ²èA¼ñf>r¹6Y’QK ÚôN½."J,‹.]#ë´ƒÕN•9G¤$ýr$¼ 5:yˆÄo–Hs/ie^¯ °ft4ªnh mÊ¨Ž É’ëXAs4±cKw†tVà{MfSXUä\>ÑÒ,«¹)E€± \í5iÈs$\Ë&™(ˆ.H-À©y¡•Öµ…´×p–LML—-‚&*LKµq´tK^œp-v"bžÍ>íÝHH:í–䢺”¹iœ'—¥ždþUÐÂëgcè…²EV©-E`¢T ŽƒxʴͰªž"„ûïU\+pÙÐE­Qñ# T©,«¢.±Ë´R•Bsˆ†ªh²50”Á¨ÛQN悉ó®stVð<1wlêõ×x‹Y1tCC÷_`cN!RØë$˜~š±á×ó‰&GÐ~Aâm®ÐhÈV^`¤L20©²¡©Œ”ˆ¶B›)¤£\‚&©TN HÎc5±z§7˜ï~Äl­öž{˜l7½¡ÚæYVÈíÈs˜âÂÑ‘!4ð›è!€ë³ÙÊ›&æ0Ø&q÷7¾‘„âðE5e’B£ÊFæ&Ô ?»@ȧ“k“§S¨Ò0‹†3bç^±5,kjÛ¹‰ùJ y©Œæ×#M"Jdëè×$…î4 ö[èìÃi-Üx¢¶èe5¬ ´´…¤f€ðv¢rÒ[oÂ6Ö3€7bLΔ/®8¶Ì¢3S<ÕYZˆm,V¾ÂC™ð‹_xÔ„x“ÙfÃXök ’‰,ÖÊ-x#0y3MÌc9â™§eÜ^ñ<”H¢ž/¨Ö&– (’åä÷°ˆe‘ñà\)½Ìg#F¥TTÚ¯š2Hãµb´è`@¦F\Þ}‰¹üáy‰ŠñÎÄB²ª6òi¼šæç0XD,"VóôåÏ̆å’JÔt‡”üK”Š[ÿmáä¶§‰êØ t‹€wŠvàõ/ŒJ›%ͱž7v³6¦¥”CCM6‚it˜í‹HI§9{}a¹ÙÇ¢)Ž49" WØA±¢ž›&Ö×ó…˜'# ³©°‰W ˜¤ šPé¼2 3[ aYa,ÒŸtnl RòK9dê½SÝ^mÄl70my¦!uvZeÞPŸ˜‹éšTH+#%J¨h¶Ñså*YW$Sœ~ášh3¿iR÷døòˆMC $+n ì‰Y—Èå®ÄA´ÍÍà<©vjøá'ÝÓ©íµè\½š†• U ôÅL¨Sxqi¡_°¾RékyË®ä÷=`ÝVjPG¦˜¢v¼o<Áø“7Óåysi~±"2¬k£0B²ˆ´ eÎ_[i¼)8Q7:@ ¹¹ŠÔogTä±XÐ[åI‚&å•’Ak$ †ï|Ð7Ø.&´¶9·¸€œAóê!D¤kˆÑ*]õ¢Ííέ½xŒ«ÈU#xŸ ëU“Sq´ßÜò$öHµ„sðÑù>¦rމ ¥,: 1-ãô™?¥$i—HÎ5Òv1Kj›O²…ÀÚì~ÃRŒÚÐh³Ry SQuë EdŒC*‘ h5´7šQ ªž%s8¡¨ÚcÀd°®0f™Zw¸‡tÕqˆÝ}Ä…HJ5ÖÜúÄ3"U>2-jBUmÁ?(º¥dé+‘ãS¤±0yÄ`•.þ{…Z5<)`É,‰üC ™¦¹~$˜G]§RŽDµ€¨5ka.ôÐùE~ƒPâÁQ<‡e¥ЛÑÒÁùãŽI •û½£dJJR®æ0”Qáld:ñ˜É¼#9µ!v¶ŸœGˆĘû÷@ÝxãÎNYG*‰1 ÐØ.vc¨&!4):5Ù¼îk©ïÂFù/ïÒ”cN¾`AÐt€J œŒ>îÀÚñž2y!#} D,fÆ)Á¤Þ3(NRÁ“ò¥WÐFœL1N9AëŒÁÌš†àöN}“RÕéE`›m±‰ò茤X©l£ Óò„íí Íe¾‹î7üâ“Q±×’3« üB)-Bv‰®ÿ¬F´,Ù½‰Þº E•k°!) Ñ{“h²¯Ð@59TÍ®öÐë Y‚ n-<›'¨ˆéëË‚ëÀ"ûyCÕ1ˆ®Ä¼Bê™sšÓ}8e Óõ©´<ƒ¸´C—™§±ÔÂ2ïZ N õ‡ê³šÉn¬ä²lLØm}àdj™t¸ FK WE)EiâH¾ÝaMf_ wG”r/ÑfKk(™ºVÙ±ŽK{¢n"YÂXšq*@S'Hì병d™ë¤GÒ %’\HY çÒ4‘‘0[ܳa}b2DÒÉ›c:nN&ò¼‘&PEúõˆä‹ŽH.ˉÊ4ŒO$ BšR.GôˆÈŠ6ËIåPÓ¬Q”Ô;´¡{Þ(‹Ê”ÆÊ\ß(IÖ5Åu!‚™UÊmªbIu Ô½XeÕQ4ª ¦ª“k{Æ4MiÁ%æ§[ëâR€4(‚OÊ7À*¥&XÌu0USA£JD5SʸLAŒF´¥Ò ll| é㎛&¢—‚—&ÚAµ€œœ†ƒHÀ‘ìžÌ˜Ì £m`™%éü=Dh’Y6) g³m- ±Œƒk&…Iæ´lŠõ1*½ÀùÆãæ“cr#N8%b)ܽÞ5„#0uˆ{àô´›a'“[¨l}#=“L‡3á¹7Ö2.|ª½âIÍ/O„“cxÍ"§enM£¾É¨¤üJ×ôŒçƒTÄðR,€b.@™MÍ[0¸Ú"hüÏŸç±à³$wžÌmzÂÎFœÈ陳„;ÀrÁNy&43§KFe‚ÆLšh©ZjLBR#7%‚Gˆ\Ɣȥ’3’ÙÍ€ôˆÎ}˜–H5)+µ¢|ú#$6Æ^Ðűè„àjuô“á1I¨‡bSgïmW"¶QÀ=٢Ƌ0( Ж¦·3ÊC˜Bt;>Ñ­Mqaé¹K ª•™Çhèãô¼¨c³AUÉï Œ’ÚV.®Ñ#‰_/AÔDIñ3KÝùÆÈÞÅ43#8™»N èk‘%S²+ao(Û!(’˜@i`ˆˆ´«JÎ¥´jFð4€J¦Lf´E”DЍ%'[èLMÄÒ¬žš§0èEÌbˆEY’æC‰¹1œBº™ u¬ééü¢\IƼ•+âÐD^LSùŠÔkD¸†¤©¾}H‚'’.8 Så/ 5‘ËAÙI´%ošì„Y>^L'¤IF)†]›×/”m´me¬0±JF)µì PƒËâ¢xµXzÆði¬™6..DI,Á™EǬf2LÍ2yõÿÌo‰†+“Ñ;Fq6¢E™’ðè=#8„H‚ô¦äÄZ%’$ÕÒ4?H£’|ïͨˆ´H„ìþ`uX’`éʈEìc 9¦*‡1±Ö#"ÆŠÀìz4ÈÌ%.x."6P¦mØÅK©)±:v0ºX?F¥@~Ÿ‰VÞê ùŸ äEiòJ{)ÖÎ[A#£u0•S€$‘MbUipëbmxqé¹ ò©1N[ܧ•/˜‚„˜å/OAjH¥ŸìφÔV€nc¬Ójµ&\Â| z–Ž{_ùC#–ðkôˆ¹ÍmËf]÷œ‰“¥e-©‘œ’C')ËÁŠF."Ûïk!“1OÃáÞ ¦i¼ž9tchšy#‚äéa7A±¤EE3L½L©CÄw‰¤FQ S§³ësÙ¥XU‰µ+-”o˜EY2Yå-`\ëäME,^jëëäcX0\†nšÁq‚)äÝ)OPÒ386‘•zÁSÁòb\$ßOHšž´‘u!Ý#9átiÇ•¼–Vê‚R7$Ø}a­6–Z†3T2jUI©„ÿ¥q. ´7Ö'«ÐݦPiPê4ªbû]:Òú¨¹ž†šÄ9Á±™‹ØÖ7È‹X%¡Ðm¬b‘&‰ ¨(]0Dò@ÏOŬlžQªe±†rM³©óík$rÀõ[HƒFù*s|´É‹NÔŠ µM¼æjJWÆcF› ™ÌêÞ÷ˆÈ‘ã“ùàT °Yp‘¶°EJK”ŠË`!dz«2þ+ØÛ¬@­²‘Š=ÊX¶È°•Q€1†¯ÖW6ýÔn/´ZÕZH›ŽB4ù’¦úÆÓÉ.'70SÜ^™žŒ©©½n`Õ… 5V¤U}~Põhb¯`I¹²ò­ÚHjÆEJ/ ã$b¤>`®°9k!¦²¨4Òº'ƒc–°öƒÅaOws)FÇH„{a±e5MM¥·Þ*w,¯†T[ev³O-WÔ‘å*hL©* úv1U¶Ý=ñdd—ù@4¶J¯¦È…›fÖ*úÇP¤¿·²ö*2ûY’ŽPbY÷}F¤£¹4€NŸ8™KmaSëôj/Ëœ W‚&–7ƒðYººÆ¤‰Eš3•Z‰,£[õñjXÏÍ…^ö·ã^˜KŸÚˆ¬¿e]'X"ÊYŸ£pÄ~æ¤M)vÓhoK¶juýÕiªëC £n–¹ˆB”×§áõñ½Â_L©Èôv½O¸¢r'=Á°ìݬuЂbÑ|q”scŽÅª—S](9jäˆzAÀ´cÝ$tŽo_µÝ¶Ùà±}%^«OeñÍtO Ûõ…ã—)ú’K¯Á믷-”(ŒÊ6ûÇI²|jíÑókè-4;EšžÚúB2Ρ©pãß ´k¤Zk~®Ñ¬Å&ýƒUB6® ÖU(:›ÝDôõŠhìùv¤:˜Ñ,d…5Tº÷Œ#È ?2— ¯hÃ9 õ—BPlIP?FEŠõ'o{x^o!κmm¢24æC%µØŸœ ‚rD•ªê0 C±„‰ý#%ŒhµÆQk ¡¢î0>J‚ÀgV@W— (Ò¶dà$âT†¯¼@BÈ óÌçn鯶€Ê J°K‡5ï¼1Ñ!iFÊS¤A<™ìž„’šDÓÉœ2CžB®wò†«öj>€³è%j¸ØÅ•hb¯`·e5‡ÀôºDÙ~(„Â鮂à+°‘Y ´£¦K›mCmÕbu¼MK£RŽ ™ao:”§(S†×&Ãæ`ôC“ \r3áþJOK¢rnnVyµ(¥<£™²Fþ.±íøUZiyuRSg¡ì¿Š\¬] ŽàêUVQ(¨S¥rÛ:¯-FÞ±×k¶ë´Ç øE¶£cÛõ/Š`é®3>Íð¼òóR—ÅÓéq¬q¿éµ2‹zgðsúŸŠÕ%;q&ŸÂSeºä²Ú9WºècÎwmƒQ´É©Gäå5zFâhäÈAzuŠ!òGv¤SpOÖ0„ž SÎúDÒÀ&ðoDè"Çå’%j›œ 7¾ñMà‚üþm"&¹¥é3•usi\¢«Uá@õ1w¶|wU¸ÉF¸å%–—A~½â(%1J§áÅg¨8åEIÜ$–›õ"=#nøžˆæùrÁ×i>)LVu,PÆ RÛ–—nRU¤†›'êIÔ˜éô-6‹ª– ­‹MWq@¶ks² —h;t=ã($ëåÙŒ;”°Z%Â7Tx”däÜjp†ÔâE€Ô+X—B/ û9Ù9qÁ…¼CvŹIw]R$§ZR9wðæV©$|Œr{öÝVº$¾¦TïZZ﯆>¢þÄlÒäüÍŠQm?ˆž‘æ¿Ùé­^O°âv]µîsVh‡QÅ‹—qHJOžǠ{¢šhkK§]¥¦¦ª «K¡ª{ 9F™£8Jöñ^þ¶‰8¿îM†²¨OѺv®*ÓÒÈRJS1âQÛQ­¢q†~ÚÁÆ¥íâZ‰§¨ÝHämß¼P‹îꄬY­t/HÕ×6ÿ¼Näz^4òÿ.Œ"ñù,,†¥š—˜x¥)&ùRuLd¥„“öÍ8pY1Üâ_n^fOT¥!µžÝ¯YýFÛÓqÔ/KÙÁ|‹Gà~dn´[¶c{õ¼yaÌ™­‚¯¿hà lU?ѵ# Òµn…ZATˆ·‚k3¹uÌ4‚¦G<˜¨ì`‰ä—" ÍD‚o×Î5Ȉ6rd›öœŒTæ‹—ð9ô`»TZŠú€ ÏAÉ%j9„Aƒ5ºÒ›ÀdG‰¡C µÌöAž´¾†ú O`„µ{ \M/GÊ|ÜFq5#î~c¯H€¼oÍÁ'HÖ9g& €Ûx’D$È%f÷Þ ¢E<œÙíÒ ›féf”áÓH”ߘÄ9M`¤iÒŸ°©ÂÊ“”‹zD&ú1¢Úqà•Øhi¢à2¬ÃÂ"$d ¨:¢Ú³o NV‰˜± \ˆ¾Q×.T΃S(` {+Lºî¡×¤/)`RPËÓÂOˆDc>ˆñÁ54û¤Äc>ÈIš')`§`;C•˲]jtð’tÖ.hŸCð@9ÚmîF‘aË#‘d@Ño¤ qÈeè)L|’6šˆÕG•$_[ÆšÉ'<Ù¥´€ ҃Ƶ$I>HÊbžÂÚ;Fà”˃0£ŠK-(%M–ÂvøN¶?´}ñygo¦,ö †.zj¥þô“÷s2ó#Tøý#§MH»ƒò¾!,;>)Õ ¸ 3› H¹r }\Ìõ2KH.N´Ã3 :R´êó…õZ8ê"QߥË(^5p:sg¨aðìÕ$›› ®_þ«tóù/祗š…˜ÿÁÂîÛ©Ÿ’¯EGP«rÍŠ£ƒð>x—¯ýNo6còBUxÞáWÖ%Àƒ™:KÝ¿—N&)šçqÍ® é—ý¡+iG›öÀ8}U×=ö ‘îl®ÙOþéíéÞ;‹|Wþ üÒÿLê¾?³Ë]/$—A|G]YœSRþ2»%  ÀG²ÓB¬ô} *¥€MYjœa+ÝDß)X<à¦>èRyN¾¹Ç%+wîÁþ 4"ŒJø×†aT•åÌ7ÈÀÛ~Hïh-‘è®ñý]ÇK)d3•\o ÚÑW©—EetÖ§*ÕdNJ‡¤ Fã{&Ö?œVûbþBíÁ¸Æv·)ïU×âM’? ôéú?…i)ñÄ—Jĉ¨bçy*R‚Uc ¶‚ÿ8°†&Ç*— ”ú°™ž.8´f'à"öéx$VÄVM®â¤.°«' ?ÿñŠìb5€q¥uUWËœêM·¼jÇÉÏÖ¤ÑR†š—Mœu@f'`|ÌI,!\fÑžAævºJSaßSü£YãQú˜Eê‚•Mu¢J¹=obc’ù…]®ã”ù-<´Ì«”ß[ÚÑà²<ØÐfV•ixȘfÝ]l(XÆ6ÛÌLsåì#)[7¨^ ”æ°Èæ$ï·‚P.«é„óþ¢3”Ÿ¶mn²—ñ_ÖÚþÉÌ,õS!Áá öˆÏ3x”Ũ/¸‡:þ[Üé²Î ŒHF|˜*qüàÚ&JL0ÉX!V±€J dW©Ö9‡H­!”Cš–úX˜Ò™$È6R¢|â|òLǘz8Î93ŽMâdò­P4ÖHŽÍ+?‡H*ˆ&Œ½ðÛ}L ÄX1÷œéñ^âÁ´b…/®ñНúˆÛG’¼~~ö°ög¦Ò¤^­`—”Oûsr¤«k—cyò?ŠÂqóiÖ%ü'¼üz1’¯g1‰“¥õ¼ywÍÜÌL¢þ+_ éœLSaÎ5¯1!$´¡O©Å|-$n£m[SÞ®0ü{.6­ÜnP^‹ªv˜Õ*—--HAL¼ºBv*#©õßçù ÐÇA§}«ÙìÚM,vúUqö(™2·æ ¤$ªá['·ë E9ŽÓåƒyu ”Z’›©m¾NK++ñÇ yzit0PR…µ¾·ü·¨•óާ+ÉvdI•)aEWì?ó’c諸…+‘o%*’ Nþ/ìÅ>®%}ðð¥=ãT›÷B¿õ* ¤ƒæ/׊F¬—œŒ‡Ù¸Qd[o™®×ÛX½®-Ä´rÇ@,5>™üË‹ Q9‡Ò ÆF?ä"Î(Coîxw_.Ír5Ò+®O)n«8oæGHÝVå‡vàe”•OÔýáÔæK@ò†÷=âp|™¿¬y¢Ò\ ]È^»éÚšÂ2+÷CŒÐ9¨)UÊŠî¢4ÿÄ¢ÁÝg3–T‰S‹+Û:G9ò¹pÚî9}þì险^xÐ\ùõ¯Áæ™f©‰Ò.7=ãü–ŸW¼nàºt±Ò3¦S&ê„™$€Ú>'Vr¡>§ùEÎÙñýVìÿlwG·ËRMVZ]*ŸšqçÙ±•úø6ž÷ç“§£âðþæh©ÉK²(ØS§@y„’hè!ñ]®µ…–kãš8¯©‰xÓ‹¿å µ0¹u¶ÞáJü¯Ï…èߊBü{CæRqzkôf&›ð¥öÂÀ=/O»é–Û«p^Ž3[RÒɨõ,é²³"’³&ÄLg+\À$òby1uà[·ö`Y#\ÛÅF Iä‡0s'Å^ÂFdbœûˆÍúÕÏPj”œ› i†®|kËâõé›~ǢѼÅz;Ý»ãúmÌò³&ZY…X™'m µ¢ú1/©©¡žUÎ\ªRÔ»&þÝýD14âF˜2ìûĵÖêu¤v= ž‡tÐR^1’‹ˆš|%æUiw,½ÌFB÷i”_ö4*4àô²y-ÿ‰?ÎjË+.§‹øñ?(Ï *S5¶%”gžÓ®h3 ‡ÏHSS.(RÃñ"§ÖêÏÎa¶ÖĬ³òU»+#Æ‘å{ÛÈLjü‡Ià±M}’ ¶¨håªÿœõ¿†hž›OÍþGiÉy¦]àák¤w1„b¿b ê~?äAŸJe*Óˆ±JŽ·'8‹öˆ(¢=)&~›0Pnâ•m{#ôYßZ•&º{FAÁpA+Ó­‡XöUçåIJP’,àH'­É·óˆÈ Ñ\ñZYK  ¨ø}, ó¼Vë#‘+¡„Gáu'/(:‚T•Y* j`eÄ›¦Yx¶O“‡ØR’¹…mØ ê"É¡µ S4×¥[2²¼²­zÚœ2BK$V%å¸ÚT Ž;#©ð# ˜Nšó“á e>6í„㓆%›m…"G1RS—m»ŸX±¦ŒxÔ;`ê*”Øð¨¨$ØÞ÷i¬ƒ‹ã2RA.¯ž€ìsÔÀ¡ÔòVkM1Ãn†¢FU €y’Ž3æÓã¶Ø¿“—ߥÃDà-É,¬{G†)pY‡ýŽK¾ú>š–Î-ª§wkßðc‹Ÿí 4ËLJ,©ñÏuÿ·Nß÷žƒËxôŸŽü;›Wj=[³|mꟓP|ª£Ëc<æPF­¶”Ù(ìF›G§ÓR¦ ý¨îj§À¼u‚jÕ=÷r„ÙD…+ø-ûÁ’æNPIЏ—®G;4Ð RnÂG;q>±9‰qJš–xªI È‹óŠT›—G5«”¬ŸE©Áìr¬=…å¤ñ+„²ÙCÇU `’:ùEëñ¸nqÌ…µ{D5ÐúÙi¥ÌΜ¢¶¼x–¿M=Ò¬óë"ê½¢Hp Zðƒ–%„°Ù¥ùœ©¹1„ùÜ| úÄ’3î"¼èUõ։ǣ¹™]„1¨Hð¤•xN‘ŽÌ’LùL›¦àƳ’IäÁÆîlzÆÕ†å_¸怑~Uj@y ȱ–ÆÚÚ›Deˆo:Gž°³Y!Œ¥š°Ý`3D¢‰+¶@A…ýkéõîH†c›RÉs:èu¼@šY6'H >QqÄÆëe*%jŒâB27¢·ÍEXÑ¢:]zé7¼/c#ÈœÛ$#HJL™ƒˆñÂÒ”ˆË˜½í N¼àxÍ@'­¡)Ä, d™Îb¯âÁêžÐA¡ÐÕ1ìÖµ•ÍáÊä‹2¼¤ƒÚ,«}Œ˜"c)Ò×eKÈ9¬eæì­uýáìŠÉcH8ÍG ËJË’Ê¢?ÏÊ=÷ãúXiöêbß³Ù6­ŽŠ3˜ŠºšØšy—’¤­¥„mÜEä+Pœãu5éêäg™™a¶\²’@µÿH:xI°‹¡§.é΄l ÖÝ ÊD,Ž/K¦JeJVPl?‘9ƒu>fÌʦ­Öu4ⴾɹÖ#ìbåÉyj3Š‘w;$¥ ;§oXÔ×bSæ/ñâÓÓõ™3F~ÒÍ5ï3Iøœ'@~WÒ9ÝÞÿ9íÆ~™p­XËO& ˜Úû%QÆê´±ÕÕ-4ÿèq›–n:wL¾åèl—%Ì.F±çº%¦ŸŽ_tNiY­þ=o„0øÃ<4£I›¨¢Q :l¢3ÌÇÐÒ=Û]Áï›- HÅåÙZ$VÚ/•~#}m¬Z$¹á–ÚŠódd…ž ÐRè[òé!A´¨žÂãCÞ!%ؼ¢à„úe²àaKIid$ŸÅx”‡\›¤&¡g]ËeY²Mô€¯bi*,<ÒÞOÂ’¦ÈÓÄ’ÍÏÊ# sBÍv†š£ö^Š X>™ C;á”IÁ¸Q2³Œ&àÝÂM‡NŸœBºR§«,fÅ”ó16†{uÿ¨ÿäx¯òGžzp)¹\í¤î»knÂ=kãŸZh+µðzÁñ¥RýF£Ñ b]ª|¡$„jµ^;÷/+ßðv5[ëÐ¥U\º¹`èïÂÖ ?HÉAýÐûŒœy/£Ø§ˆ±)²KJ\@X%YzùÛ¤G—3ƒÈ‡Šk <‰t„8µ­˜íå Yg!kªxä$æê¥)j[ÀÚ:­[’"²MG¶T.1ŽXíéÜAZæ¶¥"JAÐãMþàþgHÜíû îS¾Xƒ:zžñ˜–} *LÃHväïpëòÝ4´Û­•œ>ïWRÍîÌssqÚ–1’ŸL†¹å­ƒ¤E3&Mïo8xš¹¶:ª÷ëL‘÷¼YZ›Ä󀉛åÖTŸ 8&™¹ ë~±§f&z©lÂýâq'œ’¤P,3ZdÚ'„—¦…¦éßÊ•àøäÝîE-‘V‚’Á‹@ ‘Rä 3%9`@7ˆÊ9«3e´œ†Æª9"~yAFæàOT¹‹']bÅ<ƒ“ɰT”¥Ønñ$“éóK²MïÞ4i¼$—÷‚Æ+nd]˜ ‚T,5„ܰ ²<Ö€€Gh‹y105MÅ7¹´EýD°bê B·´ ÑÈ2ôL’¨óbaYTÐX ‹Ol÷ñh:3Ré ×Íä4Ÿ(°¬ÄðDuĈz–¦¿É .L}Û¨ux„?Ê+!\~¨–fn‰.ãK*W)+ÊEí}uôfÒœ4À÷®§ ˆ'Qôêß•HK¢ÎX†,ž[,ô†1—TÐ̤ÝV¨Ê«„+ÏÊ6¤=–ÂuÕ;2—–•%ಇS{ÿb ¦NØrCJ`Ì)·›XZO{ä#MGH<§‘h¬æRìœÃs²™­{8€vóˆ¦0¥‚Ã¥T‘9/,ëj!w )¶"7† ¥Á³óÓÚ7LW¸å‰¦ge{û© 씜 Èî}Üqúéò½‰ª@rÊH"ÿQsx|ÿ¼­pRXpŽ'Iu2Õ…YDx;#ç;Öë!Í}å³nò¼ºgÑ7F‘ä(¥.0‚:[ "=sBÿðÈö xÓ [m¸…ê¢nMÉê 0ý¡‹¡è×[gÝä.£˜iAC¥­’ìá’¼’e®Cè—ÓÄ’,5ßx”½ª7L‹ó³,\$‹jo¬I®§¤ÄúE( ‘Úû@ÁÂ9`Ùj@œ™/·…¼» kúí»D¬‰6Š–ÑSPJÈ9tI;Ä`»%T “m™©…;byiP&÷ÆÚÈ;V@åÕ ¬„¥V`ÚçS¥ã!žÓ¤}ÛU6n›ý"Q×J«ýNâu‹Rô*VgÌ·ó5J }|ãK¢q."Sn¨J¹™I¾uZù|½b2ž UàQuÞZp•¨’‚nIîax® l·‚4ÕfÛ£4¨ºêÆvš¹Ó!²ÜvÛÍ•î!©»Tª-ïÙ‚*ì–Jw ’htàÁB@±:Ö#Z5K³†X™l.$‘þõ$e*þ6Ôt?#¤y×õiwAk£ý¾Î{亨‚Ô/aG&ÊWs{yÇ•¨sš÷8ÇÔÒüž ¸ ±ÓSù\"æÐxÀÞ0l÷ìèÐëhÜá†F(Ý&éw~»Àì– ¼”¸Rnÿ”)9öm¥åIV»@ç>†«7»,PÕÇxÈL4e“k%Íõ¾Ñ©¼ŒF!Y)ô´’´-ÄßR§C¨ FÔPÄÒí’oŒ²/8ä‡38OÊ„r.Ö5)’âˆÞ®$dÁSg{_X`Ȱ*²wë¨àŠìÜÊŠ‰RMÀ‰e#A:TÅ•¾±F˜ËLIUˆ¹Škß`\rJ °Ú+§,l6ÖkÚÚF£,˜˜©,T“Üi­öm{ÎK-FÖ Ãõ¤z7HÊ-¾± Ò˜TÃr@3ý:¦LJBÆ×ý౨,^LW+ÌM!˜ÀÉ<æ˜)$t‚¤¡.KØEÓ!‡ðý¬™êÓj(IÌÓd|~dvXø‡Äü¿ø½_p;_ìKSõH`J*úÜ(-¦ÖˠΟOÊ=fŠÕqŒéšh¨Ô¢IªS•Q¤¢b@žz|;\ö>q.k2 Ç$*³7Èx‰¤ ©I'MAêŸX†0=‰Y’˜sšÊŠÚ˜P$§ðö7§ètÃË5 4¥¡—lºn»Ã0ìG!Év3øUÜø¼Çx/'Ðjâ•QvUöÈԅu#¡~QË4êç“‚} lñ¯±ŸqCçoÞ9=w3ˆÜ!Âö+˺ò+[üâ¦Úûò~Eq4ð…¤2QiàÉ©YT²kîþ`K¶VjìhHâ¿´S˜*jOpÙ„Tq<ÕÚ Ỉr¡ñ+Ì |ºÅv¢ÉMó¯ò' üª1_’ ÁNQ˜YÄF£VšQz~qZçYü(ì‘°M>†¨/$–l,4»}t¹JÄ|·+)bT–“r@ïÚŽ-uõû±MM +Vëµío„tùÀ°×mäpmþç¡TÜvS+JZVµx‡â§þcÉ‘gùªqÞQJÃ~%(ì‘Þÿ¼ qÈ­öñž©r&š u¤œÏ«o…g!K4+Í—ù«uÅ)jwu(j|‡”#9e•V® ‡0ÛTáåkz'ʼº7Ðæ—>ú›”,"Qx23ÀÕúçùoËÖJy,¾£ð©ØßË[ü ­ê:~ZÇÏš´WÏLýÅåÿ±æ—éüRoØ ù¥²²OX"€³d—ʸí¿h"ˆ6ns2€]À0+MK Ä¡ Úð­«(Òy Sæ†Pö{ ŒdÕ˜ƒÔÀ,}ƒ$:3¢ÛßX‚˜Ä ÆËK¿^Tò5ƒäMÛâŒU3 MM› —‰€›5ÎTìHOå…`X2j¡˜X›˜zèVÉ`‚µ…/Xn/$Í.·˜h:DœŒ‹ùêAjbÌ‘6ZqAhLFF))RÌ5&Ô]—ƒS|û, A~¶úPÒ íŽñ»CoYl=:Yk>œS\-Z%.â 6íÿVFSö_-ŠJ"†'ÃîR&HP tØíû’ÖÁ`çµ:7¥—`Е\Z.•œ=ŠÂ*^ˆNÒÊ”.œ·ïSdfIÁÄ“/ GŠÐä$ Òøå/h”)Ë7ÄÅ©ìĤÞ6ë|8‡àŸdÔ8V݆ñ“‚ª¼“ü"Ý^V›Ta™õ'š¿P¡`¡ÒñÙ|sãvj§ D×ÒtÛ&Ìõ²VYè³e§ÔÜ“NCÖ*)ØzõU¢¸ãí=OG§ÌUÚ}U ÌèMÓ{§¸0X–p†2F]m”ø:ô¿{Æ5yÃâì&ªƒ*ä($¹­û±“ˆÝÜ-ReŸCFVi. •„‚¤è‘ëÚÿ¬–Ûª®¯¸rÂT„¦MÔ·™!= µ'ö†—°NY ËJòÝCD”(êt¹þ±?F)`Û5ITä‘vVéSdk{+µ»F¸ò–MW,O'ûMQ_ÃÜf«7PAmSsÐN™öùÞ9-Î.«y®õÕœ„¶\%7;¢»9*£¢k‡ØPrãÃe}5…¦²¨ö~„2ØV¥;º•iWé¢GôBÒ¿Û;:+%Ui)œ¥‚Õˆn÷òÞ—ØK0P´)¿vx!Yu'ô€™OH^rE©*ûêS%KqÀÈþ‘(’Ïd‰fƒ57’BTØRO‘´ð)`>–Ùnºé^‰°"ãs¯òAvjÉ¡O"}Ĥ¸â­Ð*ê1"VC ™özÛœ}À …’‘k[HÀ±xDʳID¶fò«>QsýùF{óµ$™·%YB€[­—VLÆúÿ} „œxÜdJM+’,¤  (~ë§ÒŽÀY™ ¦”.LḼپ‚‹ZþšQdÉ2)² ¨Gâ1‰r^OÉY'™‹>ÑðêÖÊS” £Ò’”2+ârçÝJØ@تÀ‘ÿJèå”·¶Ù*‹8)ìýÙ )µÀï‚ ^RLL‡KkyA YÂ7?¯Ã þìH»mŒKF‘œ‘Vp¹t!Ã{’âE• #ùޕՏ~ª+îG½Ó-=žH§T ºG/£íä¡kÉè‚óYƶ‚µz@ÚUýÆúraq Ø ¼†YNVÀ;ö„l4K—B“b7>p¥c¬œÎÁgç 8ŒÄ))0—‹_” Õˆ£ Õ_@4‰Å$zº±Ó¤0»#.O’`©d¦G\ï6Ù¢pìäFqY×kï Æ"’‘èhåÓS‹äleÑcë³²"a“»ÆçC´[s%KÊØé†0ôŠæ&„¦åDaÝO œÉÆ?Wª=øQïL´\A9µ:GÎ?3ù,çk‚g ì{dcl¿§ø6ÛœÈlhžÑæ:mòR’y:Û4j+8ñ»®ViÔK èm Þ=Ÿâ;ëqÃ8mûnMå ÔN)Ö9³-ªçP´uŸ“rxEVbkÙaop½Ó–ß”_mŒµ $uº(Ò[ *ÇhîôòÉIÄÓ5*—mõ0äg†o 0ÑeûÛÖ†-íYH–&VÔ¹T³Ky{ \˜´Ø¶w»ßã.6­êŸcL¥2“ÄŒ"Ý'6†&åïîïì䲻߷q÷¦Ñצ©Wôž¯NT³_Ú(1UªpîurU=âM>°I)×·Q%jƒûK 5Þ7ÀãJÄóhjî¥Å¿ãjÚÞÚÀ¹^‡J!Là /(Ün6#Ê„+(öo[ ?6àJlF­¤’G˜/¨”gd}šÕI3,óTØo*®RMûü­èÉ«+…¿q6ŸGpÉ¡rn¶ÆU+M­±ôï Duõ&]y~ñrÇTÔ:Æ$ ÏµX¦:¦Žl‰Ê¶ÏÄ=b*xŽA¹u“™?ÄO¦k Ñ+rm¶_—™T«®¤jRSq˜O»Ð§W"«y§4ò9^Ÿ3œåwâHµûyG)s•K(—âh•£bm"RA"ðÏÐî :ºÿðÓ³?yžžÑ¸ëá±¼wZGûg_[ý±†M…6Úå– ¥¥%$n 4ÿÓ fq”TµaÆÜ ÊῘ¿H„†’Â#âIC#QeH¶„ Üo}~q( iö £|xæPÌÂyv?ˆ‹‹þp tØàÖÛ<ª‚pxJN»‘¬FµÙºHxQÆ]DÀÍ–Ï¥ö9‰ŒÂ'jË "M´KL9;klŸ=HÌ"J=ë¤Pe´Rmp{hcd#‰6’º’•tžChl¦ÚímÇ™&Ņ̼óyÒU­‡mâ1Y#s†Këanf»–úÔÁCw.Œø—³‚°µF§Ru)fI%a$بì Z‹<1çø*'ô²“à.gê‰{NÑ„]C@íT´ÞD¨\›y¬ÿ(–X,°è\“O¿TW1Õž‡§h ±3KÐŽñs˜´Û¦»ž÷íМf€Øð&µE^$ª2©Åd–¸¾Ÿïn¢²\ÀsÈN§$™ íI”—A¼?H9!b}îYSYAU³dÚÞ§¤R—@ µ'#®L ©»’øG—é I‹Êx'ž_‡Kªàþ/HVÇØ‘ŽO“–]•A'¹Œå„ sQ@ ­À¤¶»+Q¡ÛçÄãù*u:¿49Äfá\ÁRŽÊÍdœ–}Ae§.2«ºT6¼/­Ði÷(Å5èJN:ªþ¢É£qŒÖ†)íÌÓçÕ`–žq+mÛÿô±ò1Çn ª¸çFòVjvÞKöB¦˜ô¢òÍ´¶ÕÙB8MNQ¢–-Eôî‡û¦ùyl‡0ê! øIYÚ°’-M¡i üM­’ñD¦g}ÜZñS%ÈÉÚŽfîLb¡²J`ɹÿ×åŒÊd)‰þbu:Ã1¬»!š—kˆ=T¡iH“)1Íø¶éx;a)e‹.`\pg'ȵô×h ™ÄP½ž;ZðäÞ ¬ •%zy6ï¬Wk®ãPm<2˃ƒø5Š„û^ðÚU±#ù>öá[ÉØh¶Ï©3´¸“G–iiJ‡Q´|Óò=rÔØÏ@ÐP¡ ~Y¥Ò‚ Ú9==î%£­H§qŸ ›¯Í•d«­£­Ñoj•‚ºý6@ÿФÊH·l¢ûC”ü…NÌ ­×pZi2\Hõ¿†î\ç“–ßhÅe5÷/­*Þö¡ô3ä9šÃ!ÌM€ ´´YÖ»'Ë \ÌÀ.zÃXãÌ}fE±À|$ÅgNÌN!';ù£¾ƒa¹ð64“°ï>9ÚM®pòZji\Ä :¶*õ¶ñßT¸¾žæ­á¹S+RFnY»N”ü÷†\<ƒ‘µ°= IÊLÊåÕ.lŸÆ¥ üI´F©uõ4Z¬êÏc}cšêyD8BН¸;Z wô“”8¼¯C ü¨Ê”§Â¢-¼cˆ%Ñ섳ªZTÑRTwÌl4éh”eÄÇ#{M¹&µ©†ºÐ(F—D”ùªÒM,´óiûÅøÅˆ=Œd¤HÔšqanžCeV.£¿Ÿ¨ç26Ÿ) aÀ ñ_†ÕjZÈÎò9ßRÓ©ñ$[Z%«¯Ëˆk©òÄüñ­Ñß§Ô^mISo²²ÚÒwõŽê¶Gm.—Ù•6|:ñ­á_#Ÿí?Ac.hïŸbÜLŒQìëMiµÌÑT¹7×6S¥ýRAŽÃh»ÏI¤±5F\I¼‰†o­Òo¾~‘kž81y±‚Dâ_kRV“qøþ±¹K#2‰ S„Õ1dÙ$‹¢û‚;FFX2(L¤N‰fÛH¼‰P×]F¿¤hÔªÂ7=-ȩʅ(©×r:y[Ò2*é(¹f§CÖ hQ·P™°Ö åI•;OÊÝßæ°ÞÙ·ÃìfTðDZ¥Àl¹™D¥$[@4Òÿ8Ñœ0Ítb=æ óa*!ˆiòŒ7>‘äãùpìÐP ¼ ï­¾f7.Øj–XÅJ'P °³w &÷éšÂ#«XEíSÅÉìy)86VüëàŸýÕ•Y7·áM”£Û)ŽKxÝ_ž{ϳŒÔë]š•D}çðd·0-2ƒGZVÔ‹D:áÝå“w|Ô«˜ê´Ô*x¯àéh«ô‰cÙ•b°‰œpY,eIè”í î`Í„’ȼ™´Ì4©™ÄT"ý| mॱSWÃrÊÊ´„‹)C6ÝÄg£&»¤¨sÙµ¹6…”’•üöˆJ@çè•2ë8f\\FuªÞ.öý¡@&–@UÉÕ­’R\BU¾ce*ÿ¤L„ÒÀ±Z#ÝùrÁm¥CP7QïxRÙ¨! KT«>%–yŠ*)µ‰Ð‘åÊjeu¶‹ÕJÛ2MgN©ñ@'se}Ö8.…ùüG5¬dõ)ÈŸ±²g",ã™paˆÇ £6ˆÏ>J, 4䓱°Tôê“×xrºV»2Czx{þpzêYÞHˆœS¯é{C*ÖB¨™ÊÒuÔ@,ˆHôK”ªëâÖѰIr¤/~‘¯6…·³¶ÜA%Àiú á©•"yEõÔ£Ý#Šƒiå†tßp«³3 ¾¤Ý*±·a6|»rSƒHôÍ£÷NÒá½4±HlX‚#Áµö¹Ífš#Ia–8éh­®|†–Qƒ2ÄÜðK–"ðW”,ŒÊT¸¤¨€›xÞ“*Ô#;>†r´ÒÛ—çZÀ÷_ƒKëG%¾K5œ—RuSJ/`L}A¶¾+º]æeÜÈUP–H, 4ûŠid“·h~¿­¨š]Å¢æöJÆ2ê3ôz™±t‡[ºl?Ö=;àºîqžœì~+©ýEN’ÒÄxiµ‹,(…BЙb0 $¨ïx#YD9駨¹vMÛ\'[yÄãÙ(,vMq¶ò&n”›:fÿ/HÊìåÑ'>]¡í«ÀµPç—‹ðÓA2s«É<„ pì²;+k÷Š]×GŸÝ¢‹uÓ%èæé–TÒƒ¬ :é¼s6EOê‰C éðæã0ÿÞõu'ˆ‘fÁ:&aãÿ’n?íc³jü6xË=%Œìš­ËsÓby€©7ÖñÖ¼FY/´ý‹u)Q7NG»œªkB ’vüà‘ŽGdÈŽI®©@_;!Sb÷ëØ˜ÉGԊҬȤã†K·æÊ4êAþF!b›è1>J'‘7J\JÓmÒ›m€´=€ýâ]ªÜó -eâàZÓo Sqk|ï¢Y›k!‰é°%BHq©„¤›Úâ÷ý!•ö2q¬ÑZp5<ÞL •¨«Ð$‰¶Ãó…êSܔ劭ý÷Œ78eb¹Ñ/Ca€«¸óãDö¿òË ” Ž!Æ-ðÛÔª“hRùrĶ®IÛó´)¨µÅû¼Q[{ðÚb¿\©ñ#‚©…HRÐRn Þwæ£#Þ9¯èÚ‰kîï—£™Ú´\­òȾ*5ЖT²ñ`-è›þqÙ4ððuN8—'èX«UÓSt6ò‚‚Nu(w="-ä‚ñ®$jœI)  ÀÛ ° ¡á—jÊjr¹àeG;m+õWsås”²Â“µii&®ÂT M…†«þûÆ%’NBmvqڜ㼦›ç©%´)kÓ¹óYЕµ´-OÈÌ5t­Ó`ä¹Q}µ yEÄ5Õ\£† ê%”ðÁõåá,q#2Ò²ät%w:«BÖÿ(ëvoƒ_¡šoO­RgPRø”äáKnʇn€9‰X€òëü¤ëg±º›fùš«Oª]¬î*á*:òÿ¤2Ò’äS,0-X1‰”©ZŠ&Qª«e?>°H®”}EÆXAR“A(m!HÕ+¾ýÒ{Ò!:¼ƒ)y;ÔSJ¦´™„«’³`«”ÄÆ«‡ˆ7¦N³Q–å>”å o¯‘ó‰Ê\„®Ž çë&›0y©û€U^úv?Î4­yl:™o˜I*¿ÏÌÄ‹óƒu1²™wœ S ¸7F›3›°s³S&hݲôƒƒÄFɾäö¸ä4l6âŒ5+Š0ü̫̦nBu’•´N`â׿"R—(8áÎ$p8S7Á¼u3N™BÌ‹¤®UÓ¨qm{Œrí#ÓO™ÊëtoG'8ŠTʔ֬ÊÔ¨¦eCÍ,i•iVdŸ¨Š¾J¬Lލ¬¨¼)â$—8IFÄtŸ½°•>‹‚Zph´0 E£¶Ðê<Ô&‹m5î¶FœBdŸZT@jg1EÍ€=Gï)d»ÇÜàæ„¶GÞƒéÞ2Q"áÀ¬8¼ûŒN6øÕÙg’BÇm¢,j«é1œ«©R­Ì)IJÊEÀVŠ´Ž$­N3)‹Üx Ô˜]Ü‹çÎÄ!„Tò&äqN¥<çoÜAfò‰B ³^&¨…Í„2»¤¸£¯OˆÙ"­p´â¤­G5•1á);ˆÔ$I¦1{ÁéÊc@êNuø7þq'ÿ0j!ãŽD¾-×&8«ˆ¨Ø •¦æG=wØ[s䔂¯P"p³õ_ødsšÿÝ“H¾Ê$ð£áô¥©I&*ËaZ„$ZçÌïó‹š+ð¬étœP­_Äi}¤±,¥•mÕ]uü «¶U$ÅÊî!Dœ¥’r(jo¥þ}„AÌÒénU¦‘=ˆ´—IΔ+_™6+÷°ÌíEsé%•ÒŸ º F×F³Á*‹v}Õ6‡‰fÎe,nâ˜Ç!|ódC7.Ó©o%ÛÝ-$XwêL/9傳². ¥·6úžžæ%”$de:kÓ5 3ìY×dË÷@e ¬tü ^Lƒ}ªŽ2Ê)ÊS®+Uœ»ŸXÑò›§L?0‘6Ê H7 ‰Ûé ʬŠÏê@ú† ÷¬Ç Zsia ùâ*)ÓÈGÄ8U2Ó*9VU{ÐB’¯§NÍø}/H¼%DÏqOt‹€ïEŸå¼…rȾÊD;‚î2AÆ+aòç¼|7R­aäÙ'†g;;.–G%Jp èR›ßé|°¢¾äÉÕe þ â{uÇš¦Ê75* ¤·0°×½5k%G@ uóŽoqØ´{ÝêÛþäS_¢Òjlå$8Õ%\¦M¥ 8„ºß5g;Û)·_8óï”üWM²ÕÊúŽWsÛ«Òö™nÚ|£ÎàÜëúŽrM?Gœë§Çhz(×<˜< «íh<}!L7`Jt†%Ä;t¬ƒÖ –LâhmðU•}"x4–Ok81˜##œ-/} nQ6Ñ›Ó!BÀoQÖK `g+³69I´r[¶ðöú[/4:Gªö]<+àI–} i³©Ü£ÁþUòÿÔ&™Úí{R¨è¼Ú°=9$ÜXkxñ-lÿ],žš ,qí.ÍÒ|"ÝÕwÅ^­g” ¯ˆØlNJ-(›IÒÚ*; ·àü&ŸаÊçqÌ×ñ=›xœîi¯KÇO®øê¢¬`;×<6®¹;@A*µÒ:ÇŒî4F­B读ꈭÄÌ0ª´Ê—¸Ž»eÝ?CŒž·J®—b}7‡ªœtÙ²ûGTþYdW²·þ ú fA¸ê ù•©ûÿ„Ã…LkÂØ•Y}6Ó¶Ñw¶|ÒØÉ&ÅïÙ¢ªO:ñCš%MK”&ÀÞß8÷‹üõ)XÎ7]¦ý-ÊH´øYW‡ 0õ9Äç@³­¨xF‡húß`ÜÖí¥ò™¶nKW£6’Â^qHiÆÀ”UyÞ.bù××)rè…Z¦®~i q¢Úó$¤¾·´K‘a[Ê4T)É©°›x§@²4‚sâ»8 x‚„ü“!2aH ;ƒk˜ä,älÂ8ÄQæÚ”ª(ä’Nð .&§_!ް·^mI^¨#ðë”ywŠYª)ä]u‰…"d©!fÚ ©d;šˆrUµÉ©|çK‚É h“Ò4ã€rš³ÐZP55,¤M$:ÇÂè° _M¢ ‘JQô/­/`9²”æ™§)VJ¯ª×û1©G‹ÈÜ¿}æ"ßøOOã~ TªC9Ówe&Õ•Ûô; ê4ëX° Q§V,Hà¬]…çp ›¥â”Û²ë(X#OQäcˆÖi\'ã9=Fé¤tøkñÉ8gÍ`ŒFð4ÌD®l‰QÑ©¤§Tù¤}R{Å–Ñ­ñÏÂÇ´ÓN=u¨~\¤‹ zëc"ëOoea:ûÒu •œ©Y%*¶Äol´Œˆ[â\‚ª”g^P³…@éÔmc˜Ý1¥f½ë,8¢•_]Á@@8ý@YúÙMR–·ÀR€Sd‘½ 3xcŠA©ªª¤¶ä¥¬•…[Ì ¹Ê L2ȸºª¦gÛʤøî¥ûGò€ÎFãZfD†h´•¤”¬®÷øuÐF£"NŒ‘±62n™VLÜÖ^\« yvéä wݧþÝôTÙ3ØË¹Y˜®ãÚyr*X½…îê‡ÿµöžñ[µCõ½CüÞ–{^G¬cŠ˜ŸVCbA9º wކrËÁѬ!N¡ˆ[‘H~læ@i‡{ˆÕŸ¶²-:ÞAR$×ÔÆf“ªA¾—„¯•œÑ:¥Pä8¦ÞÛMGàOsûFøä>–n¦¦x'8Qj×J ¬š£Áþâ0¬LJ6…·JÌìÁFT„ %³ÜyzÀfÈÆ¾,Í=2’êp}ãä]k:% ðj9Nªe)–Ix(\ªÞ+Å=™ˆÍtFQH†å™©ž|ójp¨„ç6ù‘®„ Ä'l0dä«2,ÌÝYvi)ÒþÖ$«À\û*våM„®×üº†Ê ½”äIR±¾u\ýÂ9`ZRñ4ƒ³wSCâìúB¶!  ¤.x–6™s'S®¶…\D%ôž»Œ$©‰°}çV4~öŒ•œAËVÑô–?~}îU]çÔ? SšÞdÆ–¡‘Zö0ÒÕ_ÐÅ÷m9ùô‚)Øó%융N¾Mðßgñ+éTÚI²ÔâA·õŽgzù›`¡Êï¹”Ú­âHå¢Ï¢áFð½¹9º¦Ûׯ²­}Þ‚<_sß5;ÍÞIËé8ý^¾ÍS홺ÀГ ÂjÙb"‰8vÈγ•FÀC±ö† zX E#ÌÙ(ó´0½„ͲI$~Pdal]wÒñ¼šGÁ$Ú3$dzÔ²ÔuÝ r°‘°JèJ†¿¬iX Èè~È·7RJH(òo™ÁƶηeŸÖ޾áVcìô:o–úÇË?!½»=GGQ@n9×[ RÝ °:Âû]bL¹‚Áù¡í›Çy¹zƒŒÒfUac´}QðOW8)X…ïÔ(–âMR¡OºâïÜÇ}¬Û*­å U«äËÛÙÞ¦¤WZvqFä‚/yòz³ D¹¢ÞHî~q%¹zSc˜@ ÇÏ›®Ó'>X *óÚB¦1ÅÍ¢ŠèKN°UÎŽÇ\;€Ð¶‚ò bQ¸aðñ ¯ 6ÒlP˜]î@§¼âõ%¦dW`‡Hé¶MFd­«‚8ߎ/¢Zqă¡1ôÏÁêrŠgŸï¶¬€8ă1RòˆšPKâE8ú3â{óÙï^o²^Ê¿ïOn±i¥ö³© Zr]+i&Î#2^B®Ê=ßM¨„êRÎa/Lõ:ìJ*uþ@J rBÔ”‡ ’^TŸKõ†cÓJœˆl8éy-•, ”l ÿH#èvȸž¹ ÝC8Y*KƒÂƒøï$ŸÄ8òí’ØpfÌøw¸ó‰'‚UÛ–B£Ô]’Qf¢µ-Ù+ÚÞ½H„ëÀi.a…0Ó«ï„R¡½üã!."òú ‰ ¥ºz.)°ëcä KÙvÖ—½á›¥µïßø£8…O&É÷ÙE¶°—P¶B5H?ÞѵK…BNkM{Õ:îÉ‹)HI¿ÊÞP7èÏ%Ií[ÂFx³‡Õˆpr3ÔeQ™iJuut«þC¡ŠÝÃGúŠÝ¿‘f‹1g#Ò«“X^¶ÌÝ9ÅËÍH¾‡šXдâ OÈLÿbY~ÎmUúyv~¢ðc‹’žÐ<¥b,©™Z9S¬útZOÏP}#¹ÛµkW^ M<…\y(¦^R›(Y-úâÊSj ý'bœÄòg¤ßmõ3køtˆÉä~ªþ¾E_99öTüܹPÊ¥fOM÷”+'‚VRÜù UêÒØyhRÈÈç5ôx®Ô]‰Œp’«æ %N«)¸6èu¼9UÙˆÌa’&%®6üöe¯=ÛPM•kõ…uve“ñàƒ@÷€„ ÷ó¼B¾Ñ¯Bñ4ó†BJë~eIJ”ŰæH[»ê”$ ½³—Þõ ¥âGS5"Çø]EÃÒä'ìù46‶g–.â½I$Åæ‚¯AþG6\™^×ë¾öú’‘ñwËØúÃjÄ‹‰ÕÉr½V5Iô43Q¸À¦+ Có>!/¶ ))–PßÖѤ+Ç:™&ìÂJžñ§ãR–vó0Dðk‘œÎ"÷—½ ©HUÂ;+Óù@¥.F°Ï™aÅ|Å^Ã5ÆŠ\iG$\LT—¦””¶J5Êóó1> àIE0Rnæg¸IºÜ¸ü£8¶>B,Ói@*)-åÒè;ßϤGг‚ˆ1÷3îÉI;‘•?ž¦››Býi’Ûy‹ËqÅ.ÖleIì5Þ”£ý¢Öæk¢½Æµ,C"·QK£ÎìG5(ÛϼW[;óô¢—Q`úB|ËØ¦i¾tÛ3í4³Té 8Oø+¬²çø\ùÚ¼Ìõ½®ÌÁïµ66TýeL*Ç!‡¾!¡q¾*eìeÑùGÇ|BýSÌ&hªÈpXû ãºXU¦‹äæ·+œ_D|ú¤^×¾M|d+UØe»±I¢¸—ȶ֎/pÒyúeö›U„\¸'³Ì0̢ʊˆÇ ¸lŒ\¤‹j¯äŽÂözf´Ó ™*Ô‘âŸ$QÓI£:{ чÙé+›[Ö<·QfX­“$Veš“—Rœ°Ò'Ty!fòs×q#l2èiz Ç£ükAä¹"£]n"Î#âígíJÛ€›ŒÛGÖ?Ñ­=(ó=êÖØž‰.±”ÚñÙòœ`¥?oÙÎJj}Çî/Of¿h´Ñ]cãgsH<°‰wÖØ'd¨öóé“ñ˜GI¥æÓ;}ƒä.¨øl.üC‚ÍM§=ý NK8?Û"úwD{D,Éé•j•`Y +N”Sm)ô6@-¡Z¥›tIÞÞFì°Ž©XcT£="Q1*Ï0$Ü”ì{F'ÑýÄdäÓ~€°´ê:DcÆÈ~3:•; ¤æRl»'¯cåÈÈj›vg )m¬-öuÌ‚.í'h΄|¡zEI5‰r~ñ\§â±ôˆ²¾$¦ä’¥¶´‚®<à€âðo•-Ôórܵ…»öˆò .µlŒ<¶æW;ãHùˆÓy¡äIÄ4Õa©ç'0òó0âlã'P¯ëkü0›¦r—´ÿ X—œw`Ô)4¢f˜Nì/©#±ŽSzÛ|o̽Û®ßôÿ_iføCijBÆåø•ia£ᕘÑ-»äÂOý'¡Š«qzkÕeövoh¥RîrƨUÓmoçxô(MO éôÉGÏÕ ­IÄ(€«€1ÎQÐÁb8–©æfY##£*”:_úÚ¹à/×Ȭ±]D¥ãœÿ¸‚.Om£Ÿ×j8È_8 ÑêÜì$Úœ[eJÖUÔâ/Ó¼1¦Ôæ#”öˆ8Šp¥Ô­ÀlQáíÔÚò1$H¡NrfR|-£1‰Ów@@\%“—â'´½5Os—%J*¨LnYº~¼žqÍù^»sOðyýòýv¶)—Gø„ªµmÑ4é(d‚@ÞûéõŽîë¸IE~F®•E*(Fœ¬©´|Y{ÅkèžÂ+Õ[â\M&´ä³CSuê­:ÀÕ…jŽ> ®æ?͘w.@5ZÈ0ß2 @³ØUf„¤ŠÛ'¯âs×Ê5ä*TI-<‰d L+*ˆ{[¢GSŠÈ9W€…6˜¹éÄ{ÃvuÉ{ŸUÚ è^] KKRmåÅ7³™5>@t·xÌ¡>F–)ª[Y¥P.ˆ‘¿©ë” ¾ šÔ«æ[~e`¥µIïm­­„R’l(óØ”,ÛRlnUÊÕéýˆÅDVÈ)LáãTÙr´]K;¸½Vç}v¸Õ_àE2MÛ¬ kév}¹Þò„¯»Š8ãŽÜY.­ä%Ë“}ŽÑô/Ãþ3+1cG¼îQhçj³æ¥:·Usx÷Í ªUrµƒ_”&ÇéÁCðŠù>~ŒÊżûFN~‘䇢ðöwö‡œÂϳGÆÏ8ý%D!·IT·m‡ôBø—ËÿEbÓjÐÎëã¿$ñÍQt¾“§NcÈ"r–úUÍHR€ WëÙMÊiN3ÌYéP·)JÌè¤?LVGlµéà·X,Xõw¦`ºKS74°”¸;^%!¥%"´ÕJLÛ2™uJ½•ð¨~‘,äÉE°tûu’¦+I,:²@X>·Øˆ’dàÜEjŽM<ì‘Y囇–ñ7ß¡äÕÝHŸ‹ÄÑ´Ð7±;zF¸äÔ´©}¤Ù©O´û5{»7Ô訇"1“‡°=R¤ìE)ªXä;õ¼h°«žÁµ…%Ér‰t´— ó$›…z±¥èkO_ºÇØ6V½,ú©è »Ë-¼Ñ± ”:8 •ävPæq×øe5« ZRXZ‰rù^<ë{Û%\¼Ñüfé¶ODóZèí_aïi¶øõÃ_ò¶2˜Gù¦„ÀKn,øçåÒ,•ëºÓ¢Uò=bóãÛ´5ðÙø3nº3X—°_)nRëîºÈ²‚¬ Eµþ±Ó['œöò] ’õ:)åõÓ)Ý›Wt3Ó*,V”ûÊEAN!´/ÆR›:€;Ç#ºI¼ÚˆaäÛ…œjjL³Ot¹u/GR€ µúFºm mšÞQàObôg[QžRB”JSakúú»“|‹ö™} ‰ lúÔlo(èI‰ÂÔ£ÈS]j]˜û'³“Šk޶.ê"ÒÏK’µê"¯ãO7Û¨9_‹éÝú«5Zí\”æ`TéÎIÔ“’¹YõµÏÃ`¤Uîé/‡SÕ«/ÙJëÉ&M‡j©÷Ö„²…h~!ßÐD¨»›ã#AV'V]¶%¬¦³-âÞj=¡ªõÔýä¬í†éõ$0ëMÈ6]xÚàý{°¯/¤ ‘èd P ª3®‚ù¹X6;$t†#Û<yQ2ê¦5â¿Å¯Š&!'–›bI`Ô@_.úúuˆ¨‹¨Ê^źž3~fg“†ey$åËÑþG`<·‰ZdÂX{?R˜\î-³Ï P lÛCþ)ýÌnªð‰øPa–eÌÕ=òéØl=c°s­ œ† ™¬¸Òê¶Ù ßä")`¤ÇLÀí§–†eŽkÞçýF5!y^ÕNáÚÊžXCd» _ÖûF)¾ŸÚVÝ­áöé8™g–Al ì”_¹…¬¾¼»>’³Q¸Øý±?qZCË»%„[M ¤¿ø>]Ìy§Éþ{V’+Íòq›®ý8¥•5JiÙ÷ÖäÂÔã®ËQ:“9v¢ÝeŽÛ§õ³ˆºå¬–n`É©}I"Šãx­C&‡¤ï{ ôÒ%Ä"ŽîK©#X‘¼3àù@ê"QXAcÑ~héÔu‚U<0äQ›Ëp ü¡õ fÏ2ö´1\ð²E6êÛqº@$† T±Ý[BLY)’Éå^Ú˜FÆm¼e!»[HYöE¼ŠTšš›³¬“hè›å‡’JEÓ¹Æp‹h3kò¼yÊö—¨›gq³n1¢8.ZiK`!÷$÷WXðÝÛcÔÁôŽÿE®W0Oñ-³.QfIPmš}eEÓ“ÁËvÁòdºì‰hnXõßël›ÄŠ«íŒ¬ðŽMf´ÚM¼V>b:­fºUC!jŠHîeŽÊ˰ÂÙi èN›Ç€|Üó–1‚Gd`|2Ýž’@HHÖ<{Skµåµø‡Äé2k X‹-»lwÉ·X¢ŽS㯠åä¶îšÛXöÏŠ|eJ)³‘Ý7Ëøª¬ír¢âÝRˆ&>Ù¶èè)ÂGœêõR·ÙŠV{\E—&–J×'k”#Æ»\Áê¶Ë"…ûiò°êÙ`¿0Ó±°qH!üˆ´YW¡ÖZ³vªþâkb¥K–6vqúþâØ5—÷}E­;¶ÅŽ–¯ýªexr’«Lªv™q’É9åüÓÜyG£ü^ýËE¢9è[Žxõ1ÌN¬ÁõÚ_¨ÌÏaé‰Yéy”ßšÒ®mÔ)=#Ò!aÔòâM>ý5Ii'ªMÅû[q憀uºC²“ jp6´l°›å;| ©S©S§¤yèSs Üè«Øˆ",M¥ÍQ¥Ô–óÌ£u2¾£¸1%3&œ¾Ð O JÖÒó”²e¦/˜¶mqò‚© Qc«îËÍ?Is•ˆ¤ låü?Ò4ëÀÅÕ©ú<©Ï1Q– ›d8ÚM’à>$öµ€P¦Qô$âÙ7iÃ3JS­T½Ñ}ÚYy¥V®rÆg” ¾Ž§¯¬ È·Pâ„|uK“ÆŽJÕ’ÚTåÀ_Ezv0…ÕFø8H$è…ÐuÍvPµ5sÙÿI×°{îËLH¼–˜H½»‚:‚ u<ïrÛìÛ&ì­œí´Oo›²>Ž¯Ã¼^¦{PpüÖ(¼™:ä«a)n¤.Ú©#ª ®Ëxì¶mÙn5¶^ì{‡™vWüù‰W Bò’@¸ß¦½¢N×GV¤˜ÄÉ â×m3'™åx¨ÝRšhOW A±+b±kv-4â)R¹I&ã5»Ç£Õxµ&–Ï­¡–·ˆÛqK‘BÒ¤%§«)»{¡¸ÓXµ¾÷âä\JÌ@YÄx„š£7ŽeÒOµÙ«qÓd¤Ý5¨sÁ2ë¼ …¥HUeù™å(8ZBÃbéÝ'A¾â³j]5J òâqUiæÀÓÓ¼÷Ò¥­9màWúö‹ÈMÂ1_Éa¨½ÚÕDºt£5Ä’¥¶ï0¥HJ,ÙHÄ÷½ÇÎ3O›{^ˆC°¢&Õ0¥IÓBKBÁg-ïý?X±ŠçÔ}‡âKªUôËS¬·UñtO¯Ÿ”XòŒ¾ÀR‡aÜ8ÂiN•8 ®^Ûî}aÊS^ůxC½{Ûj\òCcþFÀüá·"ºpÈOüã/Ed·J [ eHåÏAŠÈOiÔ ¦6™U‹Ò’çN[gïê¡· ŒQ1¸þ\9C§áÖy²À›Ø%:›÷'¡‰yü—D›¨¯ýMÛmÂJNƒùÆF]YpæD¼˜÷6FtŸßÎ"»bWÉ¡žŸ†ËeÅ€U¥ÉÖÿ8¥‚®ÍCÀbBäTvY•5·áH=Ì žJë/yâl]AÀ´Àî#›kœ­Q,Ù̵Ÿ$ LSk÷JtQs¹ãüZ­k¤§xÅlAÄ"¶(ÒSÒ”àlm•Ýc¦soÊ<Ÿ|Þ·­ÞNjq_òršëµZ—ûlJ˜ ÔeßÈN¦ÛÝ•(ã£ñÍÒ Œ«Ïù)ÞÝ©^ Gq…³ÿܲógþh#õ€Ý±êkXqìZÍ¡}ÐÎ(XÛ]!^"ê8-âµÆ3‰4ðbÜÕֻĸ…âoÈ•Ž¦úÄM5€}A ‹åZD’Ê'.€óÏxoÖ2¸eÈö”네;’-”Q'5îz(ô䜵­x…èÉJ]ìb¶ó00Ó Þ±‚³ £,”·â…›a%Jk SÊÜ ¶ª;Ť5.þ…+¶h¨8¿ípò\nU쪾šëÿ…~£²ËK¨š)öý­ë­NJ<«§ˆÂwüCIgàívíÒê=†å=°k³>üâÊFä(Â+àÚVúE”þMlCÒœkšÅ¹<íÒ|õ1(|FªÒe"òtYq3•fƒ —R¼6Æü›G-"Â:]·^íí >Î 9I¦²©SáùGÌŸ#jûpŽž»Þ;,¼]ŦèjC‹°·x¥ÐlÓÔO¤)~¦¼¶sßøçïÀ—t×®±ë_ø¤¥%ÑÈª/,çLc‹¯M-N¬„“ÔǾì[7èb°¹s¬Ö½LŸ{†xY[Åvr•N|°wuÑÊl÷U´ôIÛ~-¸ëWWÄ.—f×ë:HwÜð1-N]°• ¢Ts}«ì¶ÿé„åõj¬:mÀí·»¥‚ÛÀÜ1ÂÔÁ§Ñ›™;=8²ò½m°ùGo·üWoÛ^j¬é´¿ÒhûCv"ÁôÌk†]¦b9»)02) Hmǘ‹÷Rk‰e(Ó_Hä^=ûT°DÛÓüâ¤é jToáluýã ÓØÓ⽪M†eùt©R‰Rœªñ-áþq{–W°‰3ÊyLÑAi’n§-ª¼à´Ï §ÿÛè“ Ê§0IyÓ ƒ‰N+ûÆZ]³‹–ÒÒØd~.¶òƒFMûÉËìhx:C„%E*˜WoÕêa„“ö TF_êôJÍQ2`6ʼuººFùäJ>ƒ”Z$¥iDÃÌ"÷Ï™Yˆ>›ýc~Å,²_€ä½r‹NUÞLÄڅȳvú˜ƒm‰J3Ÿ´m_›h¬S©À/‘Ne”AÅ€–‰ÌÖx«W™FJl½=„Øèµ•ò¶ð9éò íu"¸÷϶KõI¿„"Q>¢ñ¨éð íõ Vz«sªš–­K³0æªR$R•+Ô¨Þ!.ÇI~ S¸¶¸„ø± ˜P6²€Gè`ñ¥ Ž_‚œB©IÏNÉ~.q¿Ö6à€:[!Nñˆ¾ÉDÛ²¢ý/˜óë ÙR-+bv"Çò7YrY…ªùVJ$õøv1Q«ÙtZØâØwí:MZÂB·þ¡Pg¦‹-Ô™;54«$ÿÒ¿çåðnRÎ’x9-wÆeûL˜¤<›,¶µ'¢ÑãIù#Š¿a×ÕÜàP~ŠÕø6" [ÿvéø…¢¦ý%•u(0ÓÚ¿i¹ âIJ´×(uÄVRÿqv ~Î_cU5Ù­ÿ±íafÈ3.òÕtÚðx@#)GƒÎï±Kú8±ëWDz2éKÊR-Î¥TËÊJ¬“çâE wjÎMÒD­ïc¯h²ªµ;V–ðq¤¦~ÝpÍ-jº‰Þ/4óÂ-´º(?À¯M§ƒ`¨†£)7è5œ¡º%À ÐC*R_‚žsœ˜STS/45ÈAÞÛF:£/@•ž§ì!GcT[TÀ 9€¬|÷ýVÖ[¡ûOSø¬•ñY?G¨|=E ¶¶`?HùNÍkÔ[ÙÜÜ’ôPžÑ•Ç©­;ÊRH1êÿ ÑCS.ÑÃ|‚ÙÕéœûƒðÍkX¤Óè†Á>'Þ_ÀÊo¹î{±õ_Ãþÿ’ྒྷ‚ÓÓ~ï,I—Ö öp¥àiPçº „èµß›@QIî„ì˜ú#eø~ß´Å4¹Hî6݃O¤ŽnCgùFj}V¨K*a ¬ ê×ôº:Šš‚ú!¬®hJiÒ¨±¸ ñ[ëŸÛì<'\ŸîH?%†PäZlùhß’Pû¥\½“ÓEœqÂÊEµËq©ùÄ%?'©ÿMg³XuN%ÉvV¥\: m‹röcT²¯ã7±–â¢U99.Š}Ai°˜”ZRµŸù¦ÖT ÈGò “˜8£ìŒ°bW1‡—¬ËZùYXKÉ3 õô0…š<€5Ĥk˜b¥†fTÝ~NjžêMˆt“éxJTºÈÂ5™ál}XÀU!9„ª5 lâMòÏÏÌl~`Ä#}•¾ØxKÉ‚?Ä?aõdŬÓk­DAWe­~„ S.K‹LÛ—‘'’Ò”¢þ¡6¡U4ò[l‚Ú¿öœíë [<~›ËöЏšBBµŸÞƒ’Îé”î>¢+µ1ò?¯£|œQF©ÒäÊ›mŒ&ä-ØEN«ö—Ñي̕ޓ“qæj\º¢Ú™S€—4¾Ý¼ã”¿ZœåKû‘_©Ô&ðþïàXÂ|)¨ñ§ˆÔÊ Lb:“«D³jw’•-(S— ÖÚ ··xâ·}ßO¶Q-uqþ;ùÁóÓëDãu®uZ±%üuøÿ?üa?j•"mOÙë âÏnì‹0ÜíDqj˜¼A5-,œ²a™f’Â’««-o›(_5ˆ0ÆŸäÛ’øÖª¤¹Q…ÿ2Ïûv+㪉IGû„Ÿñ3àqã/k˜†¡O—¥Ö0ðnr’[y+z ã‹J&%J Uì SºU?Ó•OG¸W£•ÎjIóOûÈ]_–¨(ÁôqÇ=”±Ç³~¡Îñ–Í9UÅ-¡y¤¸ô²Ò€áK¨OÀ¢ƒqb¡¥¯xúKã?/Ño’ž›nže†Î‡iÖøÚŒ}‹ÔÚü½ Ë(Käß:ë=ÕØyG¢éõ±«éüew%Ð^ŠS"bª°¢A)AѰ´]iã)ýOÐYjQíAER¬¸ú/lÉZés¼\i /–ÿÓðE ´âf’÷§ó]VH #ÊçH±‡F¼mÿ¨<³÷ˆOÚ3¡¥(ص(4ÿ™°‚«½ãOý0.~Fš $ÐÈRṳ—oç} Š·/@g§“ûÂ'›¡3ó‚¶Z|€‰¨`´®'ÎbvQ£(RÎP×ò‰ñGòjN#˜}%<¤ pTM­ä‘©(~ VgË?v©D_sqšÞq¯"@%ø#¹Q™Z TóH Zå瘴kÈQƒMU–s%3j'-³¦äŸMb>L•p`õ­Íܙʠ/à$Ÿ=â›59Ëø=û,<ÍÄÓÁZžZGÔÞñ¾ÀýOðk^–ya\ù÷4%*Bl|´ˆ¬±~(5j…”l ZO^¢ÑE™„NðýjSÎN£r¤éù^«_‡‘{+„—Ò˜—„2uiGU—}Ô€âBµ¸ùíx ”){E}šhçêb²x@(m(Òf*l³¹L¼ËÍ„4…Zž‹/¸ þ†§ø6È·V£-+£×ji? KÎ%ÐSØ…ƒ–ß»‚=²§øÊâõM,#ËËÌçýT¢}ÝÔù”| üŒPë~+¤ÖÁù”ºßQ¨K³mRšì=™ÖV‰‰ ¥µ2ßÂ¥ ÒFéPþc»|{Q´Íòû_¶] —Õè;<–÷6Šh@¯2fh)ÍzÁýlÎAjæø(×DSÈ×FQK@«{ßH­º=’qÈÅMXÍá0¨L°J ¶ð“f’â‰lò.£Î,ŸÒ‹:ÌŽcã½4áZñžš|N¦šsV²t÷%ït›ÞÇÊ/êÔT‘Íjé”åÃ^ðß‹B;À¥z‹Ê"ô®Qì“!†œuáœmtë–¾0\rih\‘Ùßá½4ݵ–  ‘Ì7:G€ÿV©óSÊ'yñhF‡ÙúzqD«¸)>ìêIØ´—jÑÉ_kµèî-±(ñ97Õ1-\ÉR“Κ˜^FÐ:ŸØyÇÐÓ“Q¸ê!§„~¶p;Ä¿Q'Rø)Âïý+ÃH•VA55wæžÄêDöHØGèÅþ?ÿÑ*æÑ¢z8Í%„­OºâÊÆ¤ª÷=„tÊ.II–ð¯Ë#&±,½€I6º·1·^FNÙ!8Ñ€íšQÔ¤J4d$4¬ÛþemÕxH>+¨’{˜Ï úv‰Rµ–²'0º®n-h‹¨ ëhõŠô¸}IN¶Þ׈É6iUƒ ŠŠ k ñfR³\'Ö"“Ac„iœu·œÌëÍ8 ¹CmzkÃdWF% a¼OO2؆R™7pHçKƒè{Ä]Mš•P‘Oãc^bNa]%ŠzÖ ƒ’ÏÌhƒÒ6MV¥èª±øzÑ eÌ!‰æXQ’ÜÃhZSå˜X˜Z{ke¤¹ý¥5}“q>Jœ’,UZI¾iWn <ÐuS ÙµËA^Šçè«k4ùÜ3ROÚMÎÉL2«…- mmù… ê WÙM”ú@e^¢¯HvÀ>ÛØ×†®!¥W‘Y§ÿ U`Ø9p±ó& Ví*ŸhajÒüþÿŒ'ˆ2µÄlåþtªýî^ÿ@àúE­_!©®Ë wjë]– á>)4?ôö·Hª:@Yi·Áwæƒe'éÕnuk:Œÿî_éw ×÷q– ši¥K°QÓÃmbvBµÛÿÈèt¶Õq^TiBRcï["çP ÀÖÕCõ+¨ö;5 údš_ %1¢æœû2¨Km)e´LÛUøA·} pÛ¾éªÚ=Ç’+µ3ñz(^)ðʧ=\~RšÂ'f]RRÑi6RÊÔ‹õQX¬Þ5¶—¨¶^ÖتÝkŒ«²|»ÀãìÑì߯.ÔÝÄ353ÿg–gùò«frfT¶á @JTVʵ'"Ìï?üŸä;Nö££ýVrðâÿ?ûc?äòí¶ëxÙ-\2“úN²Ã Ò Uݸêv­´p·öííÇþo÷ÿ¹eû¬­p&)ÄVã†)®c©dTð\²sÓ%IJyM!:á#˜·M‰HE·±Åþ¶Û·UFâsõ?ÃÿÙ,cßþ)Ÿ'™‘8õ즯lNÉPR©áJµ>¤ºÌ´õVII[²¥²Ñm,-IZA:@¿h¾ø¯Ëeðýt“§Ÿ%ÚO¬ÿ¿kÿßãùmÒÆ*8‹üc|_«ázMvZ¾ŠbЇ'[l€¤…)¢”›€HÒçÈÇ×ÜmÜöúµ²¿ÁÚì°ž¢¤åÐo áÊp•æ­±:YRÞ?v“Ûµü£Õ«y¤ÿ?“¢T7j^ÃKɲ¡.Û+X \¤§Ðl!¯Õ?ÈâÒ¸™£ˆŽ;•¶^+*°ÊI×am!ˆk)_q¶¸þILñUTÖT„%9ìV«ªÆÛk >PXkôïí¶È/LÜÏåÞÏöyõ$l€m{h4OÕIý¢¶ê0º6JñqçQöd‹ÚlJÏx,n´õ„å1'¨¬{¼ƒÉRº{iÒì“–¢²I§âÉõ».ÒP×;çö‹ËT‘"_âÇ›*>çe · gbòÖ¤n ©RjH$g þQ¼9‹½Kg¯à¼K˜¥—éè ‹›,ŸÒ3Ù4Lá¬dÊú%PØ¡Ý#OºM4? Ç‹¿¯¤o®ºý23ìÉÏ¡µ+ÝÝB•¬é•[د´g@œ#?@zõÓ’,Ñi±²ÛUÀרÛRåÊ"òÎLh5Õ‰gi(™•˜ÑùakªÝGe†Õéã2Ü6õªˆRHR^—RÝ‘|žK¤Zän•vPþ±ã»ÎÉ=šî—ÒÏ)ݶ©m–òÇLï\Å‚­â…ׯ|Wä£åûž?à ÒÓ¨6€ÈœCòsYé[ †(ë$öŠù¢$¦"Éa.eØØ#kú…¢¿¼’†Ê”2ná®Ä|)ÅͶ쳨dªêZvLkv×èwÍ?lR¨KK6‘ØxS‰s¿åt%n,¤ oCnÍ\õ1I{}SÖ9RìpÚ³-Sâ-F~¦þEÉ6Ð$\•›_®Ñöôe¢»®ÔZ¾¸.н~®ç6(ñ7Û±Ãn(®›‰èlýž¤¡ÖÜJÖ_m*êz(iÓhú^­säâÎŽ»!ÞSÚ—‰¤X+ü·’—P®cdy¨ô"ñe§¹j Ò,¨¯‡dÅ*c%NK<ò¯àE­k„b˜9Þ!f˜Zâ’—5iEa$yÒ%`zª‘:[̆Á[.%:X»©üâN&åJ §Ôya/¸„5üA@|úÚ#„'eÑ7Œ½Õa_h )iñ`½ï’`?NnW›|· )B¢£Ó]¢2Iý+5¹ŽêmX¯dÖªPö-bgz=@·d©óͨkÎIX·Ìëq®ßÀe©SöŠ«ˆ~ĸ(™Z\œƒ„\ªYÂØú^Ð vÝ5ë Ž’›}" ÇáñM•MðÝu-¬ê3óŠ«~9þ’3Ù+—¢²ªûâŒ;<—hÓ2®¸Ú®ÛŒÌ)·؃º~F)®øÝ˵/û_±,ÂAª6=ãOЙTÔgjRŒ ¡‰Ò™¶ÈísâüâÃrÐõ_þc4m[/öØÃ)í@âNš)+B”ÕþFÿ¬6·=|:tô]ըܢû¬ˆ½¢+ ‘q# 3.â…Š½èè:€-zÍÂÇÚ£“}úù®ê*ŠŸµÜOÇ8n“XU? 7M™IUM’C‰(9Ò·t*Ì‘e¦£Îwgf§M9Â<ž1Áä:ÿ›ùµKItx¿Éú-ì?9Ч«Š¿ùß¿Dª Ó¦¦^¨¼Ê•Ž{E ä¬-+&Ç)>Uù~›KG.7§•ä²Õêc8/ëð*û3pcˆ>̘ñù7êËÅô\E,ëiÄLL:ã3–XÌÊ9”¡›ã¿BA´oåûÞÛ¿Ö•¿³ %~צ 6<™Á¬[ÀT¶'晚[ÒL7ï m~ö›äÌ’“•d“±:_hñ}ßUUúŽ4tßñø•±²XBÍCbi ~Ìæ1z·Z¢aéÐëÔú‚Ð XQRIË{ ‹±{žžzyB¸ñ”»Oÿßûšæ¥ûh±p]fªäÝEsÚ´¼ä©E9´%IvU¤‚2ó¯ªAJN£R­-:Ýd,ŒxE¼ôßÿ£^7/¡ß´]:£‹8ÃÕá™IJ5:nBjMÿui.8'Þ[O’Út På(­Â•´u›ç[ÛµJQæâÖ?Âïÿ^ˆB—JÍ€9¿hÚo¸ý;ƒK¬=‰de}Ö«Q%RsM¦Áħ?„ •nŸŠÊå&Ïß²ë4[|7‹lJÒÊÊ÷ÿëÿ™Y–›S%ˆ´Ïø_Vi˜ƒÖø(̼üšPíVbASemŒ¥ÂÓ#rM‰JUm÷ÑïÓêöj«n×C-ú:­ÿ "¡oG;Ä@öT¼»(œnhØm! ÙEˆQø‚´µ¬5¾±ô?üFZ›0Þ"ýD7D¤§Gd6\ŸŸR2¤´:•khèi…ÓPʲùiô— ’§f_[ˆX#–2ŽÆ-a£R_P9Bù~FŠU1H—-y.»ÎZVíÒ·-ñù[¬YS¡¦/¡YÕ4ûðý:qféilª]ÌZ×AtFk ±Ê™'>Â[ —m ÝAiQŠ’€ÅN3â]I{Ü›)ÔYuÿ«¤dœP¤”rÕ*¦d¥OÊ’FéË`#}”[KÏÍ-!.–(òÆtÔÙò•R™A.%7Ð¥ßètrP3¤b™Z¢UfØ*|\³ÉLƒž A¨³/ÊzY+ô*I·Ò5åD9TÍ_oL8JfU€Õ ZTKj.#Ni›ã[¿‰U"Ú=ñ„© îž½5Ln3X!ágÎâù)  ’Î «B¶Õœ[þ“¬j2Y3ÀÍSÌÐë (MËSžq&ØÈCÖÑI˜ Åê— p¼êÔE/Ü\:ó%סúFa0ʦÀ•IÏ•«ÕžBÎÈu ZSæv1¹TЕ›}‹¶Åš— 1Pÿfy–ל%§ Ó|§KÀW°uWLÐÐÛU‰z„…´O='—¾Á_ MÑÔNÅ5“Cx•—Uœ+àÙÆö'Îѯ+qv<àw¢ÔåñÞ]"qm­S ¼³©Ð¶ðI=ïb¬!¼ia¹hÜZú‘O¾hã¸iÇh¬%YC)…ÐÇŠ]ÓÍçÚÜ yÊ5jbEÌï34°œÁ IßÊàǦ|ä×î:ÅMçÿ#¹ø—É-ÝoñÚ»-¹Úr¥i J“{¡BÀv±[å“Ñê® í4·Oiö çP£® 7·hœP׎oÑ-š”ËÍ©—n/‘FÃ_ïh×3i³ì´©ðÚIÐ%^‰œ­7±@(ÕY[º¼%FÂþ¢31G9NK“•.-MX›9¢½"\°FK!Y'g œÇŸ7*¶R’@=u8£RI®eÇ>áÔ“d¶”^ÝÌG –%©·X!o„)¿‰ ô¼E¼ŒR>B'&Yp9:¦Ð–‘ëûƉ<æ[PU¦'çH RJô#Ȉ’l/&ØIË­«)ÇeåQ*‰¦ÆélZ©Í„¦Í¥¬¨µ‚ÓbDK‰e\^DlDêeÒçºÌ4Ù½ïûyDZÁoBiõU0·OÌ:UñeNƒç—ÕÙwLÞ®ÓT˜SÜ,OÈ@¥A”²ÍµÚ8UÉ&éì!׬U0æe8›*þ}Éê¶¹[©z¨ÏèRÈÎË]…[ÄŠ„´Ó¦jq†Pç‹–…åòµÌUDaä³8ì…ú‰Ê–™Mp+ áºÇ¶§âIÕisS… —S¨eKÈ¢„-N ¹ Šà ãÉ>Wmš-öég‡Ïð¿”|ç¾Q¥«{©F9OÙúqÃ>Q8±‚)8â§æð–›~¤ãE-º‡’UÉSŠ´Þ£)å µ„|§ºo7hµ–îzKü×%Œö±×û/úÿ?“¨uAVÝ=cÑbðVKÕU:™5L£Ó§Q'Hq§“2ÄÔ˜ Cbå)Hk©‘ÅüŠ(B6JÞW5õ€)ÊN“¢·3ˆpÜõ¥&˜¥L¡Ù§¥VRØûĪæÙH€/¼y¹¥ÅÓÓÿÌÞö!›¨LÉ{Ë©w–†[¡|–GÄÚmáQ$Y@$Äá{¡Æ?àQÆKÛ S*Jsר[Ôv=NKSO8Æ@•¥µ$·}´·ïžR‹ÿ&.?”UL¦;€¾ÁÇ”TNK%¹Q)+•!M&éHPÈnp%]:GC¶êm¹Ù¤’IK¿÷ÿrÊ<šíˆœmûSÙÛSO0Õ[½]!æå\S’m´I)…L¥$gJI cki¼u{&šç“Öj>ZMÇr Ï `¤O¼ÒYa*X°¼±Ê|ãyBS‚a¹O´Þw4­Rœúm²šµ¢oø&I¢¶›,.šáI¶Že'ÐÂ`gã‚csmŒÕJnuXŒÈpYG¡°´d“%’|ž!D’‰é)ùr îoì|â)´+*Â-bIz‚>é÷Ûh¿–±¨Äª$9*™ƒo°¢¤Û+‰'çâPÏá´?/v›MÈè/¤c­0ë( PÂ-8´£’àNžƒæ b¥W4.ÍaçØšCÒέ J†… ‘®ý SVaƒv}H=*ââž ÌTJÀ9n|­ÓGŒ8™§Ž3Ï¡v¨ÝÄRl‡ý¥РÓJŸ—RS2•Œ ÝÔƒäcidÉ‚krn»,ê*2ékÉRs\ZÛlc%ZhñSEoŠ8_Iœ—S”f(s fð]rë홇åÛ¦L¢¿C͈«8‹†ŽZy/Ë­ :—R )Âר_¨„.R£0eõN†à—Lk­Ð —r¹‚äå9óÌ}¶ì·$VªBÒ5Ërr¨ Z<ãwÙí…ÎêQç›®ÍeWy¢´Å) ¯¥«E 1¦Ž´9‡Q[ÈÚô4S&BS¡ŠùDŠˆfJh”D-(„Q+*–3| üâãÇ‚¹êS Ëc¯uvëY¸=á f“ÈAÝ’áàŸS)Sa3.éÓ]£Ä¾SñÙÙÙè›6瓹8ÆF§$Ù¼<[k;ï[Dé±àî´z®eíþwaÊ&t¸Ÿ‡¼rJ™7‚Î9{Eñ•Ì ¯A~±èŸÛ]¥Vå1ö8z§Pwï,›é¬}7°íÓi“’ìñ}ãp·U/¥ Ró\ÕnL_ñ¶¦”=²sqú™6NAÊ‹ÉjMµºêÏ…&Ð饮µUT~§è>ž‹5¢?{ðU%º"®Ú’f–~ùH!A ~nãéo‚üYìTó»ýIä{_Æv:öm:²Õõ±â^£.¶Áž2½@M£ÐbŽÖ2‚I´{¸ZÕ.ûˆPæÞ¡)þ rÒJ˜a©AVI¹½·´C‘9“©Ôù†Ò Ù¶‰üÌG‘dÂÒ´—Œ‘ hd¹ë׸‰g çf Rô§–ÙKï6ÍÑ¡HÓYå%±&¦XºæJʯVƒ®‚5†cžLL·+˜‰†Ö­ŠSšçä|¢,³ÉGØŒÂIÜåMÁùž°N&qf´×Ü”S$ ü f½Áîb\Æ—" ÔÌä²Ô&Ûa­ÊP‘_”b’‚L[ÄoL¾3Ì<ò,@Ë®—î"jHvB¤õ:n µr™q@‰J718²Ê dY¬R(¥} ûl\øsXx ’ÁiL–ªŒ˜º„»ë}H:õIôÚðºCe„lQ@z¼‹’ÔÙi·jRͪa×S˺ÑM¬T‘ÐÊ+§Á¨êAÕ i©ªVd¥2­Ïy_! EÅÂÒR›Ü\tŠý\£*T$±’2•Å•Æ0Åô|:äˬR%ÝL¹qM¡´grT­l6{G!»×*’ñ÷’§q•”èÝ…{ì“_¨q'Ûs .:œ=Zž¨!ŠtÃ,5È“^UT  åJG˜ü¦sÓíß….+´ÿì|õ~é=V祈sëpûNÕx‰…xш1W_¢aMäÒS:—š˜qÀžQ ¢ä¥ÚÀ¨\GÏú ´;Ðhq=M8_…ù_üììÖ®½*Êé/äégCþc¤3KáÔ­"QšE>]r³MÍ;Ëy× }Òº€7Ⱥǔ|«K -ªíGÜý¯äÖ—SWgGHͲü£íâ·¤Ô¤ äM•X‹(n‹2ªÇSi6¢“iúÿ/ƒ»¤KÅ|ÕUT”­3Í%²©ÉF­,ÐU‚ïð©VènE´jäåü2µ(þ5ÚÓn)ʱH‘mš‰"Ai. ¿ _3âø/ ½õ†'d~¨¯Â %é ÜiB*˜;ˆåjSoËM‡(ßdK)Ô6¾Xå 4 ÜøÁ#BN‘k´U)k¨ƒŽ9¬Íÿ óŒFµÓ*Ì ÏëeU$×)T©ö)¨.¤ÛÇßÞZÊPÃI KrÍ¡$•/Ä &Æýî¯Qµ] i¡e'ˆ¯ãýÿ–ÿè¿ïР§7Ò)/hJ~ö]öq—¸ƒ L½GÅÈ™itÇ3í½e+š—9<;•›©DÞ=àº=Óå›Ôõsy•Mgž?A¤®Ûåô³óÆ•J¬Ð ´ó PÊV‚¤æö=£ìݨ­/m5ëø;m&šÈÇêY KÔæƒa¹©©°“¥‰°úÚ: !(¿¸´ñ²t«¥J3³I¶º.öþQi $»‘ž&¦LNܪ^¡;jIÊEþü0ßÜ t0Õje䨻Yy.’2ýÚaçqB´ÿ"’Ó±š›#XZϺUð;ÿ§B¼íh}AˆÎ–‚2È®Ë$1 íŽÏÈ’Ií¡‰pbsƒA),CQ•¹~ƒHx j¶f\agäE£Sxdgè#-ÅA.€ª­¯,Ûcãmm̤ž±Ø%)Yü%xÕ‡Ÿl6åTI®þÏ´XÍ実H“Ô&Ë‘²‘Ž˜›`.›2ÌÂRwi七ô7‰FÔÍrÈMŠ>e£ïÈiN+U]WÊñ¸³mäÞ©9Y¦Ève¤,rŸ]à€Ü2hU*e*ë2’ ,S·ýIŒ” °ÈÓ5YÉ'.ó RµÛ!`úõŒŽQ5Rfÿ-0SÉl%VñÞþw4ß9ñ"£Ñ¢§†Ú¨´OSjQ7°ÑCåã‰à„_©áW˜YJÒFk„ïnã¬gŒ— {²^e.<ÂÂv+oÅcÜÄGÑžÉ2‹KÍ„2àRz‚nϤAdÔëh^Á,:Y@ X$Øïåm£RLR] s´†ØYeÖ9²ùühR|Hô:ãfá{#’ìgÁtÚ6"•z'&‡R¬ÉW&ÊùÇ” Êê•|’+5ZçREGˆ2˜¢¤ÞP‰·…†ÃÆN‘໕|%ƒÅmŽ*™0EµÚ+nê&/C:t©æÐ”¢bx H΀¡ei J!Á@N×”’Eý|âÊ':ÞO×T“|Úân5ÈΛÄ7(sˆq‡(U÷„õ{UzêÚa¨Öx¤u'³Ÿ´ÒƒL‡Þ>/¬xOË>õ¾ô}“{Œb“gL1íN„ÑRy)þ(òWðÛ]¿iÚÇt®O9*.-ñݺËõζ7FøÇÆl¦]£™ß÷X5„Ê>£‹„ˤç¾u_Ö=¦­/y-·&ɴаrÚê!{!Å›Rè½p§ë˜:Rz]×PšƒaÅ¥?‰'aqÓÊ>ˆþ|z­†7ýÖYížÓðí:*Pý°ôß %°sw”BBn¤•6ýcÓ¸Ç{*‰iUTÁt(TÛ¨U.L´³ µƒˆl¸¿P¥i”*º¸¾…z­ K”»6¥ª×$¸á°ÿ´i”rX©¦/>ÊqEmøopT2¦×òÔÂVSª)™Ë`j¶2–xÒÊeéå9Õ!yNÄnuï®ó»S·YUvÍå‹Î~7‘r£Áƒ9!2ìËjuH9-r?”+©ÝvèÙãsS“uêÕƒ–1F“¢cæPüÔÄŸ»¾K¯„›²Rn2åÖúoÐëðyXú½`ñ½ûh«G¬Mö¿'é¿*5i/ai4+Ó¸©‡ñ,Ì»³ª+6INjV ÉQXt”‡M΀ªÚGÊ›œc¤ùïºßÓÎî?å?öéúû¢wN­L!ëðt–¯R0Ÿ9'‡«4ÙɲÚf)ôò§Ú‘jù˜å åÈFŠQ‚¯xòíF†Ý]ž Uœãœ¿Oþ¦åQöRÜX•n•31\ª·/-JZj^ï0êRÜÚ…. H*n¡åt¶ë'gŽ˜÷'…/Èjæ¬ÿTh¦ã ʬÌÓØÍ¦áúë-®M¹rUŒëw/Kä#Kikë ]§Œ!\Ÿ÷dÜ4êH…WÅÕ ÑêØ†Z—X}f— ÒÛn+˜3Y´)#-Ò‚ $åÞÑè%©Rª-¦½§èŒixE}*é¬pZÆÕi !…éÌÌO“1:—\^d²—¯„(‚u'(1ÑGO¢ƒp¦vÍô£ßW]9C+ÙDñ"¿Ä<í3@c *Oa:ãI`Z¡Ëî’¦æÑ0»¤(„”ÙBÄ„3^;ÝÕ´Y ¹ks ¡ÚŸöÁJú¡Î]¢Šÿ\YЏS‹©?ˆ’ôе1/®«K©û¯&l4¯Øp\¤©%Bë ÐXǸÿFg¢¶×ékpoÚüéÿÏäí~=miýE{ÃN(ÉÖR઴Îivó(d %"Û»íQѸ×8¹z;K\d¾þ“‡pF8k*šn^cOy5ë¡ë¬\Ã…ÝG¡K\ëC0žöX’©¸ËÓŒ}›\C+G÷vZë`¾¥CÙ6µC^dI¸û`\¿ë¤oôʰñ*§ìÿç¨o朗™–RE¬¹rAdAaR‘¿Õ¯ìdêRýÞÄ.]J¿át$üÁÁ¢Ú99û 796ӡǘÊ?V-ò‰¹6+)ÂÉh¯>æR—eü6¸u Ó©1™9Ýœ\ûJ2í%Û Ë t,ÞÚ§)Ø©¿Í—Iš–æ#e¥HÌ€z¤d8±{$˜ ü+FrqJJ,° Í*ñiiöÚ2uFBn)››b«L]°î'œÊO…©ÔîÐÂѪȂtËðm^9ÇXpó’’¬²ƒrdÝ-¸mÝ&6çdA;í§Ñ:‹í|Ä”ÂÅò³”e¬+ÞÙ!$u²Æ‘¥¸J>ÈÏq”WeŸCâ…/RÐõ.a¹¤¨fJÚp,iÞÚÃ4k£?fôû¤sÙ˜Ä2µÇ¦2]0(ÔŸ-a˜ÏÈ^W(µôž©>ò„ªUÂU”èæ¤yÛx/‹#¥V¿¨ÌôËKUÒásTâÝúˆ‹È¬ôø1˜,M…sBÒíÑÓùƲÁqâ ™ÃYHzI³pn“¯Ï¼q çƒT×ú–‹saiRHv±ÀÔEç,‚*”³4‚—›©+¸Uì£ëùÆÔžR€|]Õ¦ÿÕ¿Ë5)ÉYÖž[2h.çAÖùn,zjEâ¯rÕGE§ž¥þ -ÂØÑ¥²÷ø+…2ªŒÓ޽u<êŠÖ{’nLxÖ+o‘6ŸCqFÉBµëhZmEvøÃôì)0áJ€>P¬¦‘Z¦à••úŽð¬­ ¬9²­I(Má˜Ø"à+ÕÒR/v¸‹SÊyOø/h±©×bèIÁÈyáEFrMϹRÅú_h¦Ü4TMýhO|¨^ËUÖy™T¥Å«nñÉôý\ý«y²+Ø¿Œ&f–â­æbÓEµ×M"¯S¯³RûbôÖ5T¼ËiZ‰ùÅé1¹û0–-åñk¼QêtÿPw,#¬}˜=¤dh¸lPñ»Ëe¦ûg÷JSü*íäcÓ~óŠöm*Ñkž"º‹=âÿ"®0ý-žÇ|_ŠiõW9´.cÑdªÚ,wǼéuPÖS®×³Øvë#}|Ÿ >¦ÃNå pn½<áŒà¶…å*2œåä$o¦ÿ´g0°³n&fa<Ä&É: ­.Û$ÎN&Xçi ¥) ZÚë‰8äÂ^¨ÂVoáµ£Mä$²Âò³âh© ‹•x¬Ghƒ@$Ú 7R(G %j .±ð/5ƒTýe_þ&a ­AÚþB7ÉÁjÕÝ)Uœ™Yž°NQú¥Fe! °Ûh·‰DqòÓåÀb1<û~²¶Ü\Ø(6 çIyyF•«ð@¨àéTgJÁmdü h»ù¨ÄÓÈJìoбE—§æ,4Ã.ÛRê‹«_íxœXõXç„ÍV]M6…¶­- OÊ2CÔºÿ ,M‡‘,‚©àÛŠ@øAÐùZ"ãºrÙ^â‰tÌ©|²±¿R`->‹ŠjmpeÇ›ytö欮bÖHmtöÖ9mqÜ#â”äÈ]£rŽGú}שÒÜ”uÂå!+„èT}E¯ùÇžèþ/U:©s‹äÊxéÚ–Söó ÊQ¨ëš§ÓØb~p¤R‘É|º5iôNîÏȵì½þ!8넼 ªpîf¹/)…\d¿*ŽKm®Q@•:´§2ù—º³t¸#hò¯”|KG»ÛT)Ìý<þO/øæ­h§'¸?§ðwo±…o1‡{ÔN ÄUé`ªdÅM£2¨h4³²’lo`¢téóßÊví·Mk•Pû’÷þù;[n†¡~ÙqûB{F9‚gpž«àDNTê­-5$JÈ{å6@©9ïÎRl+ÄrÜX,ôŽ_eøýºªušúìQ…_nqŸú,•6·SúÂkã5#ñÆ_ aéúr+BA•ThÒò®-·S™¦±¢TB’apzMvÃ~¯AÇSSqµæ3OóþWûUcŠÁ\QÃ|m¥ñOaÇZÅTFÕPqöç<–‹«PC)¹p¨.éBE’:E®ó³ê¶øé¯¾I×5……‡ÿÏò-fle]ïõßi™<‡8߇Ž/áÕ.ŸöÄ‹’7˜q¶Ô :…¿ Õq¡t:8hö£ÖèlTê[ã.K)¯ç¿÷ÿÉ…ñOº%_ìõ^ãG=žkU^az Áx6—3M’œ›Ÿ[“E–橹rêT\\¸O(ó2…g$#Ñw=¿ãÚ]ÖŸ×Ûå¶îÚK®ÿ8ügÿŸÈM¦sÓßâÕ¯¤çìyS­ñ޼ÝoˆŠüÔÌ»mƒ2B””†ÈÀf:o®±õGǾ3 Ú*Ui £Kü~O]ÓíšY/Ú@ò$Ý!ßxÃAN¡'ý¥üh>F.ÞÕ…9Qé•/NÆ\ ÄiŠcî·X–“u*NU"pxŽ¿€õ" äœ×ЩߒÉÀüG’eÔ6ÕJb–»póšW—tßò‹Í¢R_Ob¶iµ5¤²Z˜+ŒórÍ£ßÚmM¸rÛp{XÅÃ¥ÌOQµ«—í)â-2¸ãhŸ‘eM¨[Æ€rÿÜ"QÓÊcÛµwìTᮯ4¥ iRu* ƒûÆäÐuÕýÂüÿ³n™—Í#*'U0ê>GöŒRLšÖW/¸ ?ìÆÂUjEVq”¬ œJÅüó’ŽA»[T}žë2¬%2sì,¶,•)±r=RDU}‹µâª3ŠÌ̼ã+Ô¡—Êꀽ<¢u±nª')­-ªìE’ 9æe’û`Ô‘q’Å€ýÛßÜP”˜“æ7o k)¸óAs±Š9[gŠMc©k)VR© ®‡ö…¬ò0.ÉÏØ:«ˆ*m%¼E*ÔüºMò¼ØY ô*#_H Üg…æãlz)ŒU:pm}U.Ï¿L*x¤°Û¥2«f$$~€÷Ò*gdª}ö£•rèmÀ^×Õ ùq¤ºgç²—î¤ì~V†ëÝx2ÃE½J¸º¸qí)EÅ×Cu-˨å¯/ÏTÅÍŸ‘F—uz¯´¶°þ+LÚd_Jƒ¢Å ‹y³V¦[»9…9™ù_õHcñ_aä`©¦-4|ÞK2ÅJ}kM³ ~± Dà ™”ImÆgZJõøÀ½…·õˆqãÉ8éü‹’q/%½P´¤yz@îKšÇäòðÅE~@˜¯†S5'Ÿje¥5ïˆV °ZwIò"9íûn–«K:äåwÍ$­ÑN¥ùѸL–€.£^±óÚ‡[=­§_·ÑáyXI¹ôþÁª«W¤‹‹ü‹É|ÙξÉ*®ñzt‰ÿÊ`šÒd^VvùÎá^ öŒԾଆ-x¸°yÂl^ёґ.F¥4øK” +2BŽççk ¸¤0Q%ªŽºRZa m5W§¬ ¼‹Í ü¥÷Çú—6%$[ÏSæ‘(á„¢k2ù¹†‰Ì³—ÖÂ&ÙŸ¨7/ ¥Û¤–²X•£Uu;Æ&oõ “!M”‘Rƒ ól.M³)^Dì"-ä—ÊfÙé§Jy m„k{î=;Ä¢Í×þA/Iºó‰÷wßSŠM‚T2‹÷"7Ìa[Ä;@‘BU8¢ËgÁšâäÛ{F¹…®BõqT¼;Ìv¦¥Lº­ Wâ*ò°‰öXU\µ±¿‹gªÓÜœ:ÂMݧçMEÉ¢ê:¥v†õZ̺×]˜Sbö°:«^¢|29rAwÊшj˜ÊJ“ñ:£}}c^,Un å0Dæ%žCRì­d‰)µ‡{DU) Ÿ¨®µ™¾Éõ©I.ay™ŒNUÌMýÝ‘lï®Úiü1U«­E‰¹ËVð½Õćê›Q­Òjþ˜¹$ޏö@ÿYl!ìÇT§Õ±¼÷krvf^¢Ú”Ê’—Ž@Hå%Y’øQn‘ãŸ+þœËWºrÓGn)a·ÿ3þÜê´—Êø,ýo³®éØúC ÿ“ø“ŽðÕ“‹«´•K3Yœq9ª j]n¶ÂAPÿqI¾Âââ<ÍmZû#-¶·/Rõüg ?ú/û]u¹9C©?g3û>'‰Tßg./q+€ø¯ Ð~ßžz©\§ bšŸ™,§–¿v|»‘¶3P³¥ KOL½¡f­3‹pà ¨Si5æ“u³÷O$Ô@ÐÀ'X­šLÇÓ†qı]R^v…VBlžrl‡bHÖÔÅ”:úJTd‚R mëh¨pG=dôGG:AÀ¦¤¨j’ Š} Ò¤n«Ý^‡®ûE×°$Êï ˜dX«S Q­·LËí.ÿ$þ£¥xYíuNÄá”U Q4ÿ ôëòŽKºUrýìÒîUÞ²ÙtÐñÌ¥NUI¸ÜË.§ðþzö‹¨[ LvUÅ}‡êŒOI´ÃYVÚt %I7üþq¥ú”%ù5Ód¥Úp­…¨-µx¬l|ôŒj*¿£¡[mN~9ŒrÞëU’_¾,6‘bn¯Òœ9Ã¥’²Ú|V~ضû 32²ÅŠJŽSå-üŽ˜è· +‡¦xéN¥Ô`·›HðþQA 1ÉYÅE8æ§R‘{Û÷‰Y`ÉŠ+¹µ„9 «ÉHV°™RIR1YÞGeèDÄøh¶ ó‹M=Í¡iC"sô—tN—‹˜_’0}xœd khGSbl‡±­TžbÄW[nZ ¬aÌÍ@ÐF«Ô2¾Q+¼C…ów^úyŇꞨ„°ž)y:m¥Ä%uù ¢Z¸BD¶-Ú(µò”Zü¡¨ÃÇZ‹ö[8&uÆ2È#(’¯… ô±ôWô’»iÛ¦¬yäþƒÜ¾§¶;rºLab“-X LóÜ·tÑÁ]­´z%v½7ÜO¤`9œZ^3..à¤\’O¯hÀ“Õ»~Ñ–Wg(³dX.{$—YjÛ '0Ó!Ç[J¾Q穈©V¶”a¶”V„‘{÷õb Sr'Ó™<²•’GP”E¼”=©‡äÚˆ(^‰ ×6C™ãÔ¾k©[iuj:›Ão2c7ÈôQßJJy©He ÔXÆò6FdG‘–uH™q§]lî¡›(é¬J,—à]©ñÞk2jh­Wv‹ë¾§x"€õ:+×\š­¥hen‹Ú•|àŠ²Æ>‡-Œó‹uå(>ŒÄ÷Ì£úDù¦9cO¢bðûÙ^E2Y¬MÒ›óá2Nù[èõ*gý[S­jm–ôJ¯ÝQ&°:Œ¨Üz®›Ì£"øðú±& ½wo±-ØQ.Ì%*x‚—Ó›6¾êì‘Þ²çZ©YºXœG$qOq ™Êýܘ™Q ²Øì@"¶Ù;YÙÕLtU¤ýŠõI4ÌÌýœÒ®¢ždÊѦŸÃ8CQ[›ñD¦1µæGÕº;“²r”Å 6Û×^DE€¸é¦Ð 4qÇ¢uU[X4û,ÈÍ=Ik 2³Q©)õ-°’|( ;©W'Ðãw›t»F¦Êì‡Úû8ùi4š]D¼qI/fªŸ±f°&*®Vš–~‘!4órò¤‡‹´V«xn  S¼qZ½]ZÍg —mtŠ]÷n¯P¦èöÊÒ•RÆ8ß P(øÚ¹W~K ʸÕ!‡ŸRÓ$ÚˆVTt€·a ÓHwGñ5ÖÊÉA)OßBû7Å­U¹ê}°>-]{3#Nû^¦$jÎf™÷§Sy›Æ€¬ª‰V£}bZ͆á+!%éàó´Ïh·OâyR:KÐÛ«Q%fh¤eZµð µZÑhãËɥᵧqŠËXÉôÞ–¨­³> ,—ü:ƒååýaÙ×9Çõ(þØ£§–=äXÄX)§3€^k€’vÑ'·”V*a(cò)þª"àŒk5‚ª ‘ª3KZˆ (]"ûÛ²„)O=òß@c/,™6S:É™“t»&¥Y ëkÉB:¥(GíO˜f”Ûm&ÓM!䔨(z*ÿ·X*VOÐõ*4§âE&f—Íiö•`¶ÉKžšþÆ'ãLFV¸ÊÍÖp¼È—Ä,&~Y$$L„ëÿxÜzÆyfáos³-M8]‘y æ'ý²n’=`ОEu] iR/'÷k;¥GÂ|Çh/"¾M3s•÷é Maµ¹*¡¢œNd;ô€'‘YS ¤ÉÈ”“©%·é*]Å·Q¨9V%c_r"NÔg¤]R'ZDÒµíaëq¼k Š‹ôH¦âlÂQöÔš^ ð„(e"ýAÙ ùÚOÿ.S*«½ ©e.ÖçO+Ä£&Á­Uß܈5>Ïl’k—EŽN[¹H=ȼ…ZÅýÈS«ð¹Ét“6‡6ñfGî7µ’2»“ÁXq'„KÅtçå «kmР”üDn;B÷Õ”+¨¥XŽ<ÄøNgV&%_ iÙw T…‹chçlƒG~™Õì ²ów÷„g¿cŽDâÓö`\CÄX”Ÿ8ÒÏ÷ƒ•‘~².Ià¶”¦Ô5 I´FPŒ½¯Qd=2Åá¿´6 ÀO¤™/°H*mÅ\å ѯ^ÙÐh7ÉVþ²ûáÿµÍ7€ÕyJ“yVµÈ)'®½"ïK»çÙÓCsŽ¥t\8C™ÞmÙ)†Þi[/8QGÈoh~Ýt*¡ÝoQ@µÚÚ4õ~¦Á¹ÚŒ­+U>_ÙP–ìó1Ákÿ©:Uštk´pZïœéàœ -ÕqcHuJ+ÕFæ§m·“I æZ옚¬” «_büÖ=š¨'3*/eeB}h*Ó¨ÇIcP Éyêúœeµƒ,’âÆ€Û¹íXCõii_s%RðRt«–µ ka 10ÓÔ¨ ”ü6Äš šJ.¡—*X¤ïò•Mva!‰ùLŸˆ¨å§û1¨®fÝ™5?C3üš3AI±APÍêz˜›j³q± 8;…è–a.UÌR, øtܦ;¹»X¢¾wŒ‚¹j_gñoLbzÒ籫šzùI;'²@éé¶£¼ÐGô±Ãj’«ÃÒ)›HTÜצ†èò·ç (à,¯ç"¡9.§Tëjs–®dÂÈø”vMü p^5‚<» ÒiË™}Çæ‚‰”öHì#!S›É9ÏaᲪt©ÓZmM¥¦Þq¹Ug²ÚºTGB *ŽvÑѯÖYºe'†»¥!ƒ VÞv“Šéó.LIUd Bµ ª÷ë¼J¿Œéµ®ö»=N’¾09õê3Rõé s)° [.ºw¼Yj©©ŒŽ‚Pͬ®½ iªnZþSvÊ­ò×öŽwäu>‘Åüμº'ü1†©ê”’}²•15&Û­, ÂÀPõÖ;ý ÍJKòt»^«Ï¦V(…¦a«rß$m}Áý¢Î0çbÀÓ±ÝWR=ÎO ÕÙ™¤±79>–ÐÌÊɼ’R¢Tzæ¸ôG9¸ì—kuÚ{á,p^ŠY®Rq^ •žSÈû±"ÊU³“aã6ë{ü­ Co¾Ì×oY~Æ&¸Ä‰ª“Ø.¸‰jŠK‰Rˆ6Ô>;Û½£(oJø…˜,É97hOa°&eU~cx›òùEÕ^¹ó!· Ó›©I™Œ>úZ˜+ÞÛ…$ÄøšÕ—™}¡©9dMM©šó)”›ÑI¹ð*ûkýˆÎ]³Ib¯D:¿ Þ¡­S”erÏr”ºs¿¡%‚0×»:™¶‘Y(š÷z“%…¤epXä`Éd”£>ÐÚ–ô»wh…¶t)'2V?¾‘èE¸?¿Ù¯ìùIÆ”åÓ%4Ú¬ZRŽB}:@Ü2 ÊØÿ±¨â¨®¥8…“‘BÁÔjƒü£R@좻=LÓ¤ëKRÐ¥'=Ú7ôéhRR·Oþ˜¿?RŸÂŠÏ¬ÂPuR|Zy¤þÑ#ë´-BÄ âÛvƒ7î³…Bè ð,ù·¤EKöÂpÿL//ŒêT—‹u‹M%³ ·‹ó‰+®±góù­¶k‹ôLN" â'-X’L³ëÓ˜Ë*ý¯ût}~Mr‚úJ3Ú£Ù8Í·+xaù¦Sw[Pñ<;Üuýb¿_¦òú+õ:e5ÑÇÕ¬/1Mœq©Æ–ÚÛ%* O÷h¡²§AÎ_ RúÎQóÜ-6å‘9Ãi®Ë\K©GÈÄr)(dñ§œgýÆìGQ¡c e9ÀcÂM3>«¼à èœÙT`Ђ,4Ú¹%Ùrpgˆ À8ºœêf %Зêò%H:Nƒ{ßÊ^ZS~ËkõÏQ[ÓÚ_¸Û–O¸¬ºÃÉ iœOñ’A8ñÝûg†ÕsŒ–ry†é·~’Öâ$U1 Ãê¸QŠ/ ج bê‹Y9ÉqœCT°Ï4V~ðÜF°0dÓ¶:h˜D‹~µ)÷Jç°ö+&½L Q¸Öðì,ÀG€_¥¥ %@ް~nÉ Wäx‘ˆÑ-2¿ t°€BÇsÁg Ñ .Æ®RfÓeœ¤í¿NãÚ,uZh[[x-J°¬S³õ"æ3Op·iœli˜’ ˜$€H†'QÒ¥]MÒ-úB’1×’ÀÃT´-¤Øo òÊkþÀÔxI1¾G ¼’Ñ#C¯hë>9U¾i¤ŸKÙÒüYJΖƒSÊlL 3(¢5;ùÇØ‘GÐðnDºUI ”¡·uÌIßX"Få[i©†Ù‚³°°«úÆ¥X éÜIÓ8‰Ö\G»‹ êIWÂ<ÇXЬŒ"—²+øºe¼ÉewÕi˜wïP%?@“ŠžyKDâÕ‘BÉ$‘åÚ&«&èrôdþ"@jÒí¯˜½AÌG§HßÓm÷/õº=— LO›©µ¥+ñ+™­¼Äo8ŠòOÂó>é¾½ÉR|)óˆ9¶jWËò4·F•2èDË–iº€víybê}’XLÃD&Y¤òì,ñSÒ3Ø(Úí6„*žJæl—”tm*¹'ö‰qŒp‰òTÉšàlY(H9HúyD9xÍIàqÃØaº;hrp6”´“uŸ_圄ì½ÄLâÚfQÙ\"2®Lj£µ’:DáPæ“C(?¬æÞ!T—>ê–êÎUn½I=IîaŽ:½ cE}!@÷ç×;S?èØ9Ÿÿ0ÿ¤A¼–öÝø@:ì²§çÄál‰)–i[y*Ðu,¬ŸSéSdË*ºÔö‹¾ ¬õ>)W—‚R—d™é_òî˜}ð¢ë).eþ#Ð}`’‰¶}0—>„˜—'1Éœ“®B£röÔÅT¶¼¾xí¯O Ô˜ZZ]É%jkÂîo(_dø@Ûç N™UŽ+¦/tá'S5 ¼Y(„åHË¢ˆ9‡ôŠíLœd]ç6/ö}¡©!2BaE™R.1Ÿ!Ó§¦ŒŽKåK–‘OøgD{?¼ŒwìÓ…§Ù LÕ=…SÖ:©M(¤z˜µøî¡ê45I‰lZÞñFŒf[÷tøÐQ˜j/Ðzéª|Tßðt‘¹VȆ¶Ö¤›‡Äß1çdyÔóþEu³!~©…ÜaeÉt,&ýEìc<|×Õ,à“œ@•\kr…É$¤E”B™WB_N·„îÓ©ýH Þ>Ä+§Lr¦îÝA÷[;>žãÎ'§ž~\Øÿ-I5ÓQÁ&Zjßx‚tXê!Ñyj<·o¡¢‡W”Æ2¢Z°Ø–¨ËhR¡ª|Çq%m.ÜÚ—™˜Ãî4ÜÑSÌ^ÙU­Ç‘ýŒ r+îJß°‹YÃRuÙLÃ3«&ùF‹oþžÞ†% ¦r£î‘VÁó|—’¹ºr­s–ëlyˆ• ÍÕ¯aõKKWdÑ1Fs–µë¾Ÿ]þ°8ÌRRž™ý~,Õ&)Þ«)u ‚/qÐë4Ômû ›¢³P´Æ˜oð•x=-º`b¶NT{#W_å¨1Œå ³›šÕ+óó€©dQðŸØ'b|1(àŸÂ“ÏbP«^ÝÄFH ¶u{ aÞ+Mâ¬Dš<ú=Òµ, š ¹L¶¿RÑY¸jí¯Mæ¯þ¢ýEÓ~ª‹C O"¾„Ê×äÛeäj …³é=`;VõFãWÔKoÝ©ÜjÌ~áÂC‡>øÅ©ï8É&ö¾‡¶±oåä?ÜWeíEìU?[“v³„åäÚa‘nxóOEB:ºÊÝGoW ¹Nšq™ö”Ó­•%@‹ÖŠl¶ô r–…_:H'o8ÌàQvlG*•nt…6uöŽÎ6Ê”’=@‚F†cÐÙ4 «àÙê2ÁŸ–˜–Ît+AH'çu´W]E´1ÄX>gLÞ¨Î2Ø6!-'Nê:En¯S ¶ ÍýHrt(©Ù¨û‹Ö‘$Ö¢&BEÇ ºW̲â;›l/åcºîÖîwMf(㵚Éj­sþÓçT•I¹õŠŽBit@vÚ‘âùÆc$«]˜©ÐhÞ¯f§'JQn±ÑEñ+Pn½Hmöl¬éÔGœÙ/ãÞ@uZVbIë®YY ãÏÑ[ñJ²0í=`*Ê#Sx:›¸jŠZe-=R5×Tµ«5¡¸ÁÕì¼¢8Ddæ$ þâ#bÈõƒñÚX(fÿ…»B.§Tjô>QêœêU㱆"²rþÜ‹é kn°;+È)$3Ò±cT¶™PM¿8NUù-Ì‚×KçÐn—Æ~bÌ µï¬OA«ý§’-4´Ù¥³žïÖœHmahS$µ›çÈ ãí-£t†ó§®úešß³è ¿_-¿.}šÿÌR“N¨Ó®<‚@%:_¤Z;{yx‚ÒÛ8×âåì²ð­5Ù†¥Ì³!iMryÞ îä(ï©ý¤ú­>^˜´¢¥Pl©^ ”Œî+ä?{FEd’¿ÚEšDÂrI²¶J uG_K ЊE…<`¤a¶æ*YK¯'U(—xÜš7n©¯Cu+ K°¢œéM²æÐüŒÏ"R±È$j²òYuJÔ„ÛÒëÉÌYzbeL²9y••VHPHôKÇ€Ý/.]¢õAì+«‚ê"ßÃÞ2O&³ƒsî–Ü÷zpq-uqCSksÿ˜KÃa¦sÍ©+ 7$›Øw'öˆ9$wcí ÊÕ%°ì©Ô¼¤ÝHm]_?Â=u€J|€¿¬SÄØþjºØBÖ%Ù$$’?ãçç…y ^›%q^•jUüí2ÐV@7Qéÿ˜f¹­5>ôVR¯bŠ¡—W,2MÔ£®O/X7¢÷’ÐAM{ Öe[ñÊ’,ÈÌó—Óþ˜³P—9dK¡ý¡>äàJƒmŽ[BÅ#¿Î'ŽNåàÅ©¥óm®—ó%ƒNÅŒëÔ´Öê’´ô‹¥Jç¼;„Ÿù~P;IQ> &Þ/M„xJ‚-Ò ZÄFüÊRþO±D³R˜#¬ ˆ[-Éê>%8à-?H¬±fBpïWT‚Š«:§1ƒAý¦¶éxJع^ίªH_ã Sü,œ]L¸#±¾¤B;½ÊOò*¼šiGüø_W†$Á¸Ÿ :3».ò'Ø þŒªþä_çübÎâpZ+¼S/¥Xr¾…)»2 l6$+±ŽõWÎ:øÜ¯†õú¤æDÓM†`?c.¯€ZïòAÔlû1ºŒ±q°”¥Z›] éÒSJoO7\îbBeeöÀiûsè{y8Ÿs¿˜pÞ‘5H<™†@[/[¿Cäv=Œp2Ÿ/ϽPrͧ“Q—v\›¨>‡¬,Þ¦ k¡ÕÊ3ÂOšÚýÚq*²O…m(~<û4Y_\´Ïú5hIÔE3 2å¼ Â÷˜ÈËâíú©ôš –>MW#T¬Gý]ÄE{+ÿRóÅ{¸ÐŸ}MTð=7ßðÿ-¢Ny&çÃíb,7K³”ÇÈ@ø@ðߨRzƒìœuxûJƦm+”®#‘2›id¬y†5Ç0®-NUù”çÖ‡€Ì 쟊1¼ É8>‚ôl@‰Ô‰ÿ •{î¶®¹ôQ|göZÁœUÄoUªÔiÓ¼2Ž!-¬ÿII‚Ùò­g÷Ï!%¼ê¹•4ÿ±ÔÉ®LÏË'RËèJ ÿ¹‡t¿2p_\27Nÿ}èn‘Å22šÔ¤œ“MËË'*… #¥‡ÎtØú+.áò½»~³Pþˆ‹²³òÔYOw¡°Ü³[Ù"Àù˜å5:™ZÎjÉò4®¶µ|—`¢ŒMYK;“óˆq$ž ˆš H¹Ò4âK'‹™È/ôóˆÊ!#0mB¨’uÞ205+ {Ù÷}¹…Ú PQ)<ÿy£Å>ƒWõ"W±IÂ4u:Ù²·…jÒ°;¢¯É#˜ø…Ägñ`È Q'é]7–YB )waYõ†.Ž{ƒÂ=œš/ÀvŒ„x£Kêp-ÇßLË „¤ø`3JO:½B¤´èížJBµÒt¨œ\äÙ6jªÕ&]J˜Xl;Â7>,-Zo §WÅÎÔŸû•¨$l/·Ùäy‰Ôè¶Ôëò24­bb^a.!Õ…$ßxMËË-cUs†.¾qª˜í=ù|k7/.ê„°]6KÅö>ñí_Òï”Ó·ÂÍá.1i}±Þ¨«ÇËÐïP¨6äÃS’RκÀ@HK.§#‚ÛƒÖ=ïK};jêžcø:ª)ý\|œ½0§kN™FÛCZiZ¶“¹ZºCˆÝzXÇ´XUˆvî6yjH Z’.£çÞË*r¯ÐÃ/,Ä»¤ —›?Û1‰²”‘‹áš5Éæ9o[D¸¶3){5®³Êȧ‚”£¡MôN»yÆpÀE‚T¼>õEä¾–’lFtÜÛÊ3– 9¨†Ù–jI¶”Ò‰uK Ì ‡{DdðVœaS ƒRÏËNÂö¿”C¬¬f)›jŒÏ:yY,o(‘µ¾q’–H¹½OÚi’ÄSwOÙ¥¹f?ËŠG=|à'¼_q ~Óh"YkL°øÔ­çxÈÀ=U`\¨Îsßt:¦Û’a ”‘ª…õþ°Ì^\¸Uñ3‰êΙ»eË¥#øñÚ Xéš®9—³]RVS ÓÛ–¥ — Ëâ= òˆÉšó;å‡è]žÃ‚´ãR2iN@¼ÏªÝ{D”£g’mN™fƒ,6lx4òÜúôŒo£¨v<åèÆ^˜óÓ‰KH'Á~‰þïôŒhuÙÞxo‡ÄÌ¥B³4‚JÜåË’5Ê4œA¬†œø ì5¹gR¢“`œÊ;w6‚5ˆšþßðW¼Dæ9†¥˜•%i©Ô\u@JAÿóPŠÄ³ ût¼·Ù?ùJ¹ê7+)'Äeõ=¢/Ýl½VþüÑ£á3SÀUyqb¥4 ¥ãWÔ§SL[p~^qÀ¡þ¸çÿNý¦èÍÍ’†+Êc › ¬fA?÷"ß÷Gµ? Ê'š(ae QÁv¦¡A[¶tó$¥ãÑt¶å¤[mÚ–ºå¨Fb›*§FpE¯~–ÐÆÕ¾aïÔøeÈPzYÌ/‰-0€[u^­G—×hŒ—zÌ[(f{"q)]îJ´íü'Ì(Å"®`Ó!LKͦ ¤»+Ö㱌}™;9 ø›ºÂÓ?ANIÉSð êz Ÿ.† ëÁ*u^ÉT9ß´O½S”2EmfÅët=–" à•¼d¬ãAiò’”›e4¡úˆ­vKEôþ6>(²«ëxdªQÚeMüï9î“n>ÖêBãGŸë[†ÓF³LôÖÃý™MºíunT¸Ê?Xãü3XzRuÛ”ÙHXÙÄR¡äDx&ïµÙ¶Ý*,]~äzš v®…š—žu3ª¶Úªá'íŒcü‹¬Tã׺ξ{Ãý?žHGð)UêüÃu.ýá¥DÔ¬oÐnh¡† ¹{œç$þâæÉ&×í듌™gœââÜñ)G ¢|°k÷µ!BÇSq#’KS¥zu´k‰4òmr`㹈¸˜ ªÌ%i DãrcO±Æ,\í!„-D¦Úˆã¾K§Œ-Ê'¶Ýʽ§i+›Â«q ¢ñÍi¬úð]h-uO'(QœK“%D\+Q>¢)A4ZÅ&ú%Õf!,§ ‚D¸óšH%³p@-ˆˆ1 eZ9‰Wå—èå]9žº tt.Ãhbš´„¥H¨¦ )œö¿Rî}16;—¡]©2çKA®œÚ'¢ÑFb“ø™ú£™çMú_Hª²gK¦ÒB³c€€IÖ•x,ñ’G½u½Ïx®'NÛ9w´IC¼‚Ìyw³&™ª ž˜šq¶ bb\ƒrÁÍeeí¸6ïëý(ܾM½®ÑÑl—ù_ùáâ%ð³ëfœ‡fÝQÎãŠ\÷ïç\%ò::´î˜–^lÕ%œqJR â6¸ÝàɩْU\ù`ÅêƒÍ½fÞHlhŽäõ0E!ü(“¨´äj¥­næ?úùÄdÁNäƒt¹9I  wæN©‰¿{ékm¿!ÄR ¥sk-6¡|—´G–ÕĆ$Zeĵ.ÍÔ”f¾ÀùÄ97ö‹8Ë‹ÔJƒr4Òj•U ›»f;$_¬g¡ê4ž_¸Û‡è3µ‰´Îã—‚Ü?x%Û?tÑè<ϬjSÈÌø¥Ðßî ²ŸfY±s}ŸsK"FŸBõZ{ßßË)á–e7*ÚðX¼†Œøý"•b¶Ôë‹––B”Ñ”3‘ø•ÿùÁRÀåux¾£{òŒaÙ îWžRl Hñ¬ì?œjRÈnå.€=J•öUÉêÂBçf¼,¢ÝNÆÝ€ŒH=ò~ "Š 9„»“˜µ¬ü$÷óërÈ=EþI–3uK)Tꎥ)™ˆã#)òˆˆ/ §È …Í+”ÒGAÔý4‚'Å`Eÿç%0»|5N’  4ŽcŠî‚ÞºÀëéäÈYå»ÈÅî"J‡>ûÀ7Óqð…jÒ5dükóšãç±»HWÚò’¶Íö|ˆ*#øÖs+õHry,ôã Kþn„iÚ/ÿ߯ç;rÂã§•£% Ú?MÉÙ’U2€‘-6ÄÈ%"×Ò Ã7wÕ>G*Í!ìÄ·f)h´Å*|M0;©·Ò>v窷M©œ¢ œÖ:MNW‰X™]¤©.ÉÖéÍÍ6«ér]#°ÑÛå© 4Y†êÝ•SnÉ-êSëµ½ Y@µ…˜‰àóŠ)í>Â,ó>O¤BÆIªñK²” ¥òØ3-LfHq*¶Çþ^Gh©ÛµÓÔ¬ÚŠýfky=™§$¼\ZlÊÓt­ªúƒåûE§‘Íàmv¬®\V¹|§Zþ¿Ö6M®2ÈY£»D®.i¶”y€{¦aü@wœ`ú»”pK”|>….W"ÜphIÑð?EyÀøà¡ÁM j´›¬M—sR…üH=HíËð—d*{óXbe)žR‘* nbþ$öJÿœ`ÍÒW.‡'¨’˜ŠI*[‰CöºŠòŒâUYl¨}™yôËTµ#1¶–¶º{DS åòMÓÚ©gmËf‚é¸sʤI,åc NáJ¨œÂê¹mENJs¶¿O(„ 9<ßpk bIz³Ù™wÚ9T‹õùÀ¸àµñûB/Ï)/¡Mø•ø”7?Î"'.KÙ6Bª„ €¡•kNñ‚’­OÙ­o%¢«&ÈHÐH¿œk‚áäü°AB<…®5P]­`CT+Sô6—}Ü—&Êþ“cèLpŸ0Ú^áGêW¸œOʶîtùQF?‰”QñØúÇ’ø¹~Þs8€¸Oó15J‰@¹š‰p››[¼JQ!”D˜›½îzAkX>ÈÆjäø¯QÁ©K'žú¤’ Š&FX5®jê°6Œã‚-`Ÿ òPúÀä²Ó¾±‚̓&–]¾[ÜïŠ öEâ|¥Ö˜}À‚ÇHç·í§,²¯mÔñèên'T$ñTën%aH#NÖŽ¿Ù»Y¦šŸg»Oj™U˜-'1Þ:.r¶´ZÑØ£Äü^Ô¥9M4±˜ÅÖÑ¡vØ›Ü5j¥ƒf\<íg&e@”©W¿a›¼£ ZG)¦”ìŽ[/Þ2qVOaô°ÊÓÍËbÔ˜æ4ZG©L”&”°Ê q…‰×ÖôÚó)fú˜v͞æÒê*¬–Ç$É1{÷…ÞÏj[…M‡é˜Ñ©ö‚ÙX#Ê+íÛÜ:c°·&äâÕºöVÁ@?D’ɩۀ’*åÆü[Ú´øÏø JŒxŒ+â¸ÉT%”€yo$ æB´?ÏåÅ÷oø¾½bõa4:ÿÒK‘ÜX rµù6ߥ<Ë­<ÚT’“·¬}]¡Üc©§‘èÕë•Ñ‹îSÓîR(å–“eÊÁêmë©9,‘©®A &TÐmå–‘áH;¨úDã#©°òéJCA‰R<* Nç˼m³qnd©gä0Â0üÃR¤è®z’ýN‚#Ë&£@Ùn)JÖ&œF «,êÞŒ"ÝÜ:iåx‹YŽ›"Ǹ±=PA¥aµ¥êð8Sþ̵û«u*%Ê £¹øIÆðܲ§*ŠKóïxuÁuöˆÏ£/·Q&*-1,•8nÇáñ(Û§œd`VýIv qÙŒM3™’l+ÀÑ×nýâM`lIöÄ“þîÓ’ÙŠI$¬$]K=“„F©‡“ê4HÑ‘MAŸf@Yí.ýè"R–e/¤Á‡©-sõäavRt¹îLi!^Ùù"¡—1М} È’9Iü)ïý÷ŒrÀyO„x~Mõ§JÊÝÔ”«ïñž‚1t/\\»" bÙ°BÖBÔNÇû:FÓÀÌlÇ@œ‡Œñ«óóI –m|¶Ù)R=l~‘š‡Åà±²§¯Ä†\L„?50ê Þ|¨B]"4¾+lM>šõFBJh¨ é‚úÒ? iÔŸþ)·Î©ŽXÍŸDdÿåèúZ–'14ã„$æ•A±ïrbP^%þOQÇûˆŽI/ÿVfC#ÿdZéQïéØ=[q‡"lµ¹‰ÔÕ¬™†ˆ îAÒ .¦NW?Njö±Áq?šÊr·>ÞpFÙ’l«~QÇï®YG)ºË6+¹ÿ .)ŒmÀÉì)8èro >K)U³{³¤©6ò2í†6»ZXº>+Ëoá²™…”¤–Ö«‚4¸ëùþ±Ð×<×~^”6J,O]$ºk¡I,“¶\{B¦'“wVßT› „¾…7r çC±êœ i¡gÕRIjbG¢—'Ò´¬­az*æöÓ¨òý#jj?Oä®’T¼¤º…7È$¬£*?wß¿h‘•Ëʲd¹V§¥L´í„ÇàrÛö0‚›‹À‘[¡9‡9“-’ä±9žlj[ÿ»ýcR…¾dK˜“ûN]¹šb{&d”&<¿êý`2’àÈ¢'ÒãKHD©+N—Ø‚#|Œ„^Ïh•W°|ú†«’IJù]Áòì`‰‡Änö9¹0Î&’ B›P)ð.ß cˆ„¡â¦%féó‚]ÅÜ(Ý¡ùÀÚ [æBÎ&Êé<ôŸ Õ¦B¼¼âq—"mrûAU\ÅYjz”¯tœxl•Êþq·wø~à+•Éœ9YB@ú‘~®çÐ⃱˜Kâ®7qje¿´«Ìa9|J—a ©ømâQ>wX+­-4úWÓ{:H9:&ñ•J¥‰_@ÞjO©ÆIÂÙ9GÈCª¬5?Ó®1 âŒy918h<)m+åY·æP,††Å(èOéŠÀHǾRxyÄP¥ Õ ­W͠иó>q¡ ÙÈwKÅ)Zd¤§ú ™ )v»4œåi>«·xŒE-³ÈcSª‰ tËÊ£ïVlJ>#®ÃùĽ¦£ =4?>—§R—&5å$“§ï›È{e’BØŠ¨¹IgÊäXW2ed[œ®‚ÿÂ"1èÕhÑQgíiÎBJƒH°ðõ¿ýbMŒ)*Pz^Q-Ȥ°Ï,9d2Õ´@þõˆ»9K õ¥FGD±PZ· _â?-£n_€¸Êÿ`N2Ÿ —nJKÇ5:¾S}r x J—Æô‘Ëó¿Àß‚ðƒC6¥%J¸ÿ½ N|¬É«µ¨©Ä:Ÿ¹Ê©´Ù> ( T­¯òƒ×÷ò,të+I jx¢ja›J2™Kõ*^§ÿڟΜ¹0Ó–XBTû­nx!&ü‘•]€ÄVxÇ¡BBGí.!̤µûŒ ˜‹—aågd=-@L–!“[¶¦Ð£½É:Aè„­òÖT~ÛÜ=3xºÃκlÞB±Ñ ~qOºÓÊûk%wþ|bW }¦(‚qàÝ7Þ“7}âÕ²ï¸ÿ¾9½ü3y+u4àý$Äôõ*`ó²AÑ(ÚÇCü㱩ñ@¡fPUhÒë),øB!wü‰hË“§¶e]£"¹N+ζÀ ;[ÿ:ÞQ¨ý3â&SU¼Dˆ 6¢6®DµIÍreÚja ‡FR·ÜvþP',•.ÂnÜ«Æz@+Agàuq¸¼ŒUiɳZ“Ì„¤<…\uÌžþžQ<£rŸÔWÕÙ ŒRR儊×u6û¡_¤@±ƒ…±öyU”–ÄÌ«™g,#@íº8Œ€¨ðD)j™uÄÜâAK«¯‘î#"eo“ Qg—‡×v¡(çÆÙÔ§Òyþè~p³X’ aFÍ ¤ÂzÁ@pñ‹µIpÔÉ!6\ö·” pÁ5ÈË™÷E 8žc.Ÿ þ匰t¦eS Jby@ÅmA+7å̈€÷GØŒœ´Ïéšbg‡uJÏ¡e— À ¸ø`CQŠÕ/¬eÄŒÕ%Â*jÒÁü­bvSÑœã*—›eéb•!SK@Õkh Šû#ÅœéíU‡Æâ£órIJ%kí&¢ÐIÑ*>EºxÅíÿ(ò”hÞŸ])¿Éãÿ!Ò=6ªr’´SÄõÜÇ;÷q(}Å#ÔÌr cy12SfÞÖIåÈ´D4MÈ6ý|·‰åg¹r›€."-䔣“{n¢Æ4 DõS ë¸òŒ5?¨‘*èÜÛéd sæf)—’v'*…£{ôùG¢›gÓ;¦Ÿà°ñ5C*9Žh”‹Þ9=5R“=5BJ>Ê£ˆ8ÇßB›B¼£°Ût>7“—Þ7]! YœräLtŽGÙbð]ž-ñŸ@¬Î9%/PÎò o`}£§ønŽZ½Òší~ÇöÍ¿X¢×£¬°¯²_ðŠª2k¬>H)\é*J|ò‹'_Ê>›£n¦Š¥ÍäôÈQ+$”?:î)“£È*CJIS¤ ‡×.ÚP_·áIÂ4驆kÓI–šM:fxZ…öÓ¾ñR³Mü\¤Œ¶ü»Ã‹4–j ^,Ç/c)äÑðSrm€ÜÌÓw}2#÷Ti<šª8\¤9`\)ƒe OÜ ÐöÿÌI,‹Ùñˆì—Ó•<|  [“k-,ÔÝBT«¡ tW¤ZËx’§¦›e‚†TÍnÄž‚3Ѫë4Ðé*˜"j .Nš‹žÉ´FA\üfºûá¥û”¥ûú8¡þ!¤A<ƒRäE›•ˆ§ÒPž{ßî,ôýcc• Õ#³Mh*w€U­ÿ?(ÁEîOj•Dû¡}êt–¥’t°:)vòØzÆ£…’3tÖ¤¤,€žJv¾ç±ùÆ5‰©åñþA¼?¡+W—Trå¹U™¸¸VºŸ™Ò {áË¥úhøWä°ª³£F2åa€å‡K\Àk†aÈšœ,²§âÊRæˆ KH\ʵÜìŸÚþšòZQ,¼ &Ž É90Ο›TÊÉìtMÏʂﲞÃ-‡Ãõ*‚’‹„¶°«ÿ{C—dµNG–”\TYy(2NPü ˆ5Øâ½YNFQI/}Ÿ2Æ·˜¹±Ñ7&×@(Ôa1‡8kˆ©N(-S’Ê IÊréo0D+©ÅbÚ¾ëÉùψ¥¦pµ]I`ª^vœýЭ‹n¡WIù) Ç|xMà©”³ ¬\âÔ¿ø=@IJë $sÐMËOà#¸Tu:[< b°«ÓY[¤ÕÃÃ*”‘¥Æ€ßÏx~+ˆzmÃ1.í5§S1™)JŠTAø¼þbѶðËÊù øÎA)i3 (%(P·'Ïö‚Çê,+µX¸èõ±4‡|fÔ!̧Q}”!yCuº~!‰Y¢êƒn‘]/˜¶ˆÄ],ªƒì)„½.¯»Q&ßÃÚ$žF!ûÑÊ4VdZ®I‡Ú X»kn‘„a Å•ôü²èFæÒކìªúkü'§Ò2h²‡î#MvHM„Î2¥ÙKOQБŽ ¼Fí*ÍN•dü+¾–ýÇ錃ÓÐzC.š¶ŸbËaI y½Øý:ÃaçaöÌ´ó*,¦Vu¨ÜˆÉv-Å Jž©…²ƒ“c}AáiD„²ˆáE)wý¥#ÿÓ;ëäbPyœfû Ë5#‹$×!‰P XÊ• ÑI=#&€jbâ¾ày¬ 8 ¼Mƒ™µl—Gó€H„-惺ÅvS#Ç—e5øOŸhÔ¢¡öÓ,9†àNd·4S¸Îƒuó„¹Ó%ùG˜|ÓH5ù(Ô §âÞñÀ®£þNý64mi¬Æ"hÛV¶XÂI’š@;@ÆbIC“¯HÆðI¬© â#ëO$“ÉiÒÉ9c`äðGûDó/®°v'’s5D¡½:Ä)`¨1/'¸{Ž*lòá Ûh«ÿˆW¨­Æ,[iªZY¨²/ª¥ºA:‘Û*~LN¶ßŠN}ÕÍM¨¨êOXô£Åw¨Ÿ6l•fçÄDrì5+Øø7IÚ#nùy¥”@²÷1’ÓËÆjžh‰ÔÂ]È©èooÁrnœ ¼ŒF(›Mžu‡ËQ=àWC+±½<°Ë—…êrvM<ÂNLp»ºP—Gc¤†PéîyMƶóŠ'<¡™UÙq{Ê&_‹kª>FJL¢ÖF…k9Gä zOôãJõ:õ|½AÒÇÍ)#§qæjrËfYEQñ:’O§”}ž8„Üô)WÜ1ÂDÎLûå]ÛJ²søÍ‹n¥A+ŠÆe채¿J¸DóãçqõMTŒ\bœY‡!sBû lŸ-ûÄ–oxf¡^9 # ªšÊ*€ÚG„“²O”£Rä‹ CjœÚLû®9t‹’>#çå+Ô›döÜòSîä–›×ÃøÏhÓY1Y…ƒkÏ"M(iÀs(é”|G¿ŒKaW'“ JwÚ•¸Tã-ŒÄ ØØ©õŒo€IψNv®šQl‡îÐ uó¿¬ú€©jz‹/+ýé§ÿˆuÞß(ØhKˆZ‰AL™[À¶äÂŽ^b†·îè#\ð ëMërï{ªHH•©_‹©1œp-ÈXUb¬Ñ ¤4Ð#Âwó‰'€Ðxãל“iú*…Þ94×Ät7úþpJºCšhey‡\EnDL¾P”¶”‹º¿½`3í€Ô[æ|Œq{åRJB-Nœª=ÓÖ'c¢’âŽNI>†AJ§ 6Ù)?Î sÂ-a, ‚™Bji”–PStâ–|#@P”Ü}I…êåôð¥ŸÄµV”n‚Ñ:ΰI¹æ¡6£&OÞ ¡*æJ}¼ ¹ü¢*]Sgí„WÍ•L²@Im/$ .3fÄ–Q,æ%ž¦ëL¶¡÷‰ ÓæL-wÖÅ-—Gçï·G —þ4T’„ÚZ¤ëJµ’ ¯Šß?Ö9­Ò·­>Ë·ü%ø¦&éu¼Uwý•š„¢IÔx\ÑVWýÐMžü,0I™8Á¥-¥Klë¯Qý# ®n$ÓU¥Š©ì:mdýÛ—Ý'¥ÿH›y äÅ ¹KÌJ¯Dƒa}ÆðH Õkˆ‘:™Œ/Tº.¡˜GâI‚O²ÂåæCU©öªRã*u²J ôX;œ'8•VVëa/7'i¤‰ºA¶›b<Ø6øÌX–Z襹¥S©<²¡á]º8—69gïC\UMûY•?LJR’œªo¿pQ7Lå؆‰§hÊjp(É8¬©Y×–€öò1ø(+½18ÌI[7…JðŸáì"2èŒV¸g¹H}ùZ¡ÌÛgÃst¢ûåx”,âL|ÂÕ%I¤½.²©b@q².Rm½ ÐiœFJ¨3òrI9›·÷´NK°,M°©–‰Ì¥¥è´•|ý RF%ƒb¤]VOsUÔÐðŸâˆ¯`å,Ù©#Ñ̆$m%hF@¢u½ôþÄk²¶ÊŸQTãjßkŽLR3;, –Gã\…vPïÖ>bIY{Obßón.¦0Úr¢™Mm$«sïùd&ùŽ£õÚà¿°òO–_çÕ¼™•$ê7ŽAIÎ\ÎY¬Á™"^ÊñDŒk$–Ñ Œ å¥Ê—›ì"– H”È5뜺1Ë&Ë€tˆr ÙbL½{ê °˜ •-íó‚·“\Hé}i&Þ½bQFˆ~ÐüR–©Ïº¹p‹_HávM¾É>ÙÐYT`ù£žñ†;UH)¤#Ñ4ZRË(÷Úà(%eÇýL]7ÑÌÇêdÔ‹'XY.Ls—b¿º¯Š)`Û*Œé[@ìèrˆy jFà„ë¨jøöAJ:  í‹¾‰2ô÷&ˆä¤“•Š#tÔä¡ái™©Ä6«^ÔjÔQeF²ïÀtAL§ chóýÇQ周éc„2%[Å[é›Ã.e:rœr¦e—ãyHJšW Ʀ=Ÿúa"¿äè¾9D•r‘ÑÉaÙuT1Ûª–”lØ5ÿ¸³¸ ui‚ð8ÎGl­Ä#’åJ§Å¹¡#KdS¨í*ÈBlãºSúA\]Ï”Bòâó!ç`¶0´¢Ë!+G…K;«KÜCÃ\W³wê<ËŒG*2Õ³§D§2Gçf×PG)ãu3+·• bÎĉÎÌ7M—ä¶)¶Âç]íK$!RÀ:œÑÄu—”%e¼+X?î/ªGØÆ5‹_†#+s  4¥ÒV°H"Öó"žb\ÁŒ5ïO‡§œî]Bÿ„ ÔGŸAöÐM£ÊfRŸXq GáͰ;}cf¦ðOû_”ÂÜ)Ì-a¦·¼k†EŸÔ ŸNY~ZÀKîøŽ¡>±,äœ#“Íý—*¦¥Ó•kêG¬KˆÂ QÍb¬§œÄ3p“k[Î38CvOÀ¼%‹#"‰ d Ù"å^ÞöÊ举"Çç=Ö˜úÒ¥7àH'~ðXû,¨+™ºg3Óš›EÒÀ,´9¬cw>†å,ð\ÒçæU2H>÷4ú»ê§h–C0’н\êT•%*[øâSbö?Û Aû@ÌJ¶ÝÚU9HF¶ÈB” ¬1ˆG+ƒO§Å¬woùÃQ}‹úzÌG™»ß ¿kéé¤ß¡ˆXú9ÓüQ¸\fð]/K"Æœ³.è¶¼µì~ EVºµj+ÓìäÏeî(¯ƒ¼f¥VØQKR³3‰…ø\M~QÎÑ‚ÄÏÖ™ ùz¼‹r*B˜›i/6 tV—Oåœ&§Za•i ³Ï74G"p\(§o¡‚V&#bšjÙu\ÕYÖJ›Z{Ú'Êh]¬0š„°n`O}L=éíȉ6å>¨Ü£„¦×È¡¶½"3‰+ ¦3!·_˜ZšuJZ@%'LЊþ<û$U$Y®ÓÊ»[àP×*¢K¡>= ²Õ7)Óî±R*R›ØæÑiî="I䱞%è‰åÑ0…-9V‡“u'¡úÄe œ} “S‹ÃëZ*-r¯ %Jü>GÌDZȈ·_g2ë>5¦ÙH:9åë¶`N änÿÔÉü,‚Ë©-•Õq›2Nöô¹Ó¥£^L•™- Š“0§RãK@;~Ô}zC•K‘‹°åBŒ&¥ð‚”_–»\,Åý"SD²¦LšÚ˜šI2«]г»~PrY%Ï!*wÞ%ÜõHék±l8ý&©e±T˜D¥U¤<ÄÉ ­$|@ŸüÂ÷ô'vÕõ»ÆIö+ÜP®LSZ Ë&iL2Ñ Ù±? xnñ¨ç®ºOòx–äݺ–د¶ŠŠæ¢åà®qÄZ<2Ãq#|ãYmüÆrÁ>F^Íés ØðÍ5‚P’R“u_X^ÉtbY4ÎIò΂ä ¼Ÿ5"TÕÍî¯Ê'š×e‹Jפ5\²È2/~–0äQ3ž8…Œ]¨Î-"ö¼mѪÖGwMÆsúD×IuD¨bõ>'9:ÿ¹›d› "ý{ÄljkDöeA^ºˆQÌsôêFSY•¦Â22Á¹è²fØD»zî:F¥Êc4U ½›èR)«Orí{Àµ:#újÕï3ü2ñ%hM‡¤UGvÃÁiÿ XÈÁ†pS •¡9½"·S¸JH´§F 5ÉaÙyr@¼SOW&Ǽie(µ„!cÏdÛÉ=¡q´.ÂE~Ï\EO ¸¡!U›o˜Ëam­¬˜X_ÈG]ð½Þ;Vç\¬û%ÓÛïábOÑÔTšd÷+ªâÇÒãj7i¤*è@; õŽúo©ºæ¤Ÿ¤z WAVœe™†èmS™äÊ¡) ðÙ)°ùÃÎn•Ä„õÙó˜ZhËÈÍå6[ÿ„v6Ö±ô²u.6dÛLB¦šÌ¼ª'L×µ®hÎ!g>Dök<•™yV‰sA™ZÚ3ˆ/Mkyué¯u¦sUæ½²¦‡©·Ò3ÐvüaQ/+‡škܲ¡†ÁKHèM÷'¬BR²ÎgÈ]by.:æud/óôý`xÁªáÁ©’ ™»Ž )VÔ+¿”fpVá“P"ʈ@.(;žäÞ4ÖMcÈ«M© jÊm ²EôO™ó‰G£|ä’óÄsT2ÿÒ;ÄšÉ8wõƒª..bh¥ RVý…÷ð?Ê7‡jÜc¾ºkm‚›¹ãQØ:}H …"òƒ2‹´¹\ʳ\’”ÛKD}ŒrÅLf¤T†™ÆSwVmÚ–’À•YîÝV¤µeP—^Po¥Å€üâ2x±'½îRÒˆwOÇMsÞÃëˆÝ¾ä6a  jU’оW“nŸˆÆHJßí§Éí4„ œŽHïmÎS¬ O°µËÿ !Îzœµ°é‘@¸ tË©†è…v⨇()rZ°ë…%AæÐ¡-âŠÜò^ј®'ð¦¯D›BK“’ª “Ñ`]$yí ?e|g䜴‹´4%&ýD[BJ@/ƒha®Q¬²=פe]BÛçœJØI×!V~EêVd¾.ÊÈõNád¼§ø 5'å‘ÜÄŒaÆU>²Ú“.’°… ó€¦)wMÆ­•Í¿©{Þº}Ïlæ<[(·jO̺q†äÁ$¢¦›‹‹ßhC_ö1ý¾-ÛȺiTÖg¤¥¤FºG mι…oêÈBZŠÛ$dH…ìÔdj$æå,4ÒsÈdIe»Ø™ˆJCÃn³dÄT‚HÖÓŠCšu1'èVK €üâ6̽ RæúÔê•Dú–z6^uŠL½¾vK8(µ[º±`„Š€™;vŽ£MBª 3š¾åcÉÛÁ@ðAÁ¢TìëéÌMÉ×aåéð9sÚk=Ÿá•FÝ®¶ZÒ“4¤6àR9­´¾§Ò;ÅÔ¿n8A™wÑH`%-óg&GÜ RoñžÂ5Œžfùhôæp”‚ÌÒÂ^p—]_ñ“ú˜Ø mv® jÎ%¹Ô„¥Ä2ßİÂêcq† UƒÉвójB€Y“ò‰¸“]h‘P»È̹‰½ md…О[A¬Ó ­!"ÇQýö4 éðÛƒ*ð…X5¿ôýbA"T'Ü©HUùZäzD¢J(P“÷çS,Úlë¢êUî:’Xª_¤‡&ÃÔÄÉ·dxTHÜÛöˆÊB—–~P£)]Ju¶X_„{”d˜eÐÇQZÑI)h2$[c}Mþ°8‹[ lûškL!CE‚àì¥KF6n"®ö‡+gNòåˆ*òØŸÒ%;£}ˆvg-@.©C)ÌSs¬J¸ôXÍ ØUÓ/U˜ä‘÷„yæ‰(ö#8Š˜†¢ö—ÃËrÁ^ëË9{ë Yì&—ªì,ÙfœI™ ”¨(s§–°ÛûAÑ?ÛAYOþîQh çªÚ&â#øÎF—À~ŠC€‚Ø)¥»ÂØìÞ6öõáWùú‰=Q¥´£P¡(=á­¢)K¢¢[¦²pÄØ‰(Æc>›yE%‹Œ¼²öU×l\ó4%W0øÊ¬Ãq›É1F¥Då)ZyíÎBNI–—§H‚%€|Ó9ÕÖ2&5“+’H&àˆÆ²HÛ/3Ì^¦à@œÈ•ïÁ´êw€¸ä ­ÇˈÞ%È4A›l82›ðuœòh4pøðKídâz_æêŽg˜J‰:ëvî1«í.«ÚÞÁ· ªŠø èµkP#¯Ð~˜ Ûw_qd¬U™8ÀÌ2ƹ3R€ñÃ<P9, DÉ úÆšaÔÍ€… D"ì•/ "æ;8ãɪ4êƒ. ¥BÑK™ÌîñâHÆu_{[Bä‹…1†2‘ÃÉ2Ã0òP››éñ»DRÉÜ~ÇÒg ðRTM%CÞßqô¤nR¥hoÐG·|"¿ÑYï_ÒËK´VÙh»6œ;2©–Ù[‰rÁ €Iy]‡ŽÍYÈê´×y›L7A—S 9RÄ. M¾’´©Jÿhv¤NR mʈ/㩊åE´I€¦’–GUÍ]â*9 R\ˆ3µàêÑ),RGˆ¤ø”zÁ—¡˜P’'Q) ›œC“ R„“s”Šë¾–>a¹FÚ•m×3gI%Ezú‘æFsÈWÞ’úî‘“2n3koù i̺ÜÌ©fJPl”ªú¯ÏÊ$GÙ©´_}—@"Ç7M/sˆÌ¯ Êó]!w.&æç óùFJ@5Ö¹Kă>߃-‘µ…úK&Òðlj¿S¹×&ÞÑ–RVBñ“ )æ¦ B×à@æ®ÇáOhÈ‹Id‰°ëËç ñ.ïÒØgÒ+hy Î žt¬ôÖ .HúD¢Ãh¥ÙXHÔ‹t6Ý×ý;Bé×rL¹t]I X~u3ϼÊÔ€ý•h’—b“ˆ¿‹fÌŸðú–@û°°2ß7ŠÃ^›Â–{¥îÚ \Éš°@ZIîA†ßÚBˆæ´IngÝå%\ %¤»}:ïHŠô/LL©TÕfX²I±è­”.ÅîŽ ê¹Aj¡‹ç8ß5‡ÛB›[î/OèqÔ[:‰ÂþÕ¼_øœ¶åп²ªÞ%Um'TzƒùG1ª¥Q7"†èøš‘…1Lî Å’•l6ñ–œy.²âO zùˆóŠø[úyàŒ'ÁŸ¡œ㔇ðUI'ÍI«&vW7‰¥ ÈRu±Ž«I¨SŽGa.ckÊið/÷/xT¸ ÷õ‡É(Ù†U\eÁƒÔ”ü³d²¢Tžöê=b-d³¢Ì¡8U=г2—Šl‹Ûñ„úF“ÃPÈÊåhLË©û$‡@Α²ºj ,\JÓ¡Ü ZÔFÔ¹ÎR|›‘xÇ!fIØ•šŒ¨™¤’3xœOPG—xÈö”ªS:ƒºÕÁÔÛ¡¨ K³ ܃5Úqu l¬½ÇQë³ rX*¼{Cw ·éÅNÉ¿¶Ÿ‘’ï"—`†&[©Riâ‚,rf:yúí±ùÖÛn+„ôq5”¤K©S3a²¤‚mbµß^–§5üß©…59¯Â?@e)¨¤R%¤¤Eš•h4‘ä£Äõz™jnzòx¶¯Pî¹ê?æ`ŠÃ$ƒxY8~d,ù/ȧ[“ &,þ}nQï6!d%D¦Öç&Å*ܸ×HÞBxªL`qÞ“Y[Y7´dŒO Ù¹¬îX^ „g#Mru'åà-dÏ•SJޱU€Œ˜¨è’b)æfËœãqä ¬„eÁJFQ©Ò"ä å)M6mŠ ng¡Yv#ñ[™–TãI¹³ëx¼2¯Y§w®Š•7”úƒiQ öŽÍê!ìæã¥”‰2Vjre .×íž² {$ô‚æáî4ÊjC©ÖÑÂîzÅtú:m%^†„—*`µ„e<Ä”cÊDÎPJA¶¤BùÈw„xK6¾ƒxßÈ9¢m.[¹ëu´MXâ°nmÌɺwóˆ/¤.žM<’é•%Ì¥$ÛÊt2ˆ[rLʺÈ}°°’kK>²Ÿ_jNKԷ˺ŽÑÙiîX8{¢ëAì „Ö©¤­Ôh+·°:h9K'f{9VdÂÒ•U„= ×/&À¤|&ÑëŸ ß´ÚÒõáñýÝjt¢r- $“š©¦r½4Ú2·–]´‘÷i·ÿÈùÇgf便,ÍuþKÛ÷ èq„fEÅxºZ°â™aCÝÚHJFªq^~P}¿pÓkjáCÊÐjê²>Z½0lƒÙM™‡‰vøS¶Töíx´ƒƒú%ïù- ê®\¿µ‡)ôè#˜é YQ)½ôé‹ÁZ¬c&¤‰ÇóH¾t‚S}…ô>ѼŠê­I``¨Í7"ÝœüCÃmíóˆHZ+›ÇàÆMþk„8“˜\ƒ·¤d@ØüÏÅø%ÕªÉ\¢š¸ H² ¤÷ˆ¸Œ0Èn¶ì­Ku?}3e~"‰üÇåŒGø£khò¶[p’WcñyFšÉ[¦Ê\Ϫµ ®2Ë6% ©ZÜÜÆ%ÈE§äpÙ÷J"[ARQlî­¿½ |HÚ¸>"åF²ª\KËf)qÌËOUŸ(ÒxxW#|Ò~Ι˜Ê¢·.Inž@@½±TÜÒ*oivÔïf‚É@²9ŠßCaûĦ°†(n„W”G¹ˆ¦ ŠPÛdz_h5~Ž‚HjÂsérœâR@¹#k9±+B>ñƼ6BIRÛ9VOÅevé±vŽ›.E$Kµ3ŸU­ IùÁ£èo*DuN)Tä°ÛAf¿Kñ4º21ÄÇ) Ô;E|gUÒB“×[kò%صÐÍ‚sÓ«V"w!Ų•$¶Uÿ#c3\*{Kð%®?ðyéF„UiÊ2Ž‘®kROc´WßW"¦Tùb~râ*$Æ­ÌIÔÚ[S (¶´(X¥@ØÇ7ª­Òø•Vf# x§Sáv)–©a§T‡š6Z ¼'ª:ˆW~r5 °w×øË#ÆÜÜô…Ðó$¡ÆÄÚÀÔyŽÆ:M&ãUñÄÕüÓ©Žªx‹ú¿!œkGN$ÃδêùжtÄÌ;ÎS\WÛùC‘j©â¿úœ÷^‘]2 [}%jEý@í.¨±IalQVh)l(ªVâñ8ÈÜ«äÉUÙVœ+žš˜\ü'¸ƒ¶-O_¶Vu99îV Ül­œÅ*˨ZIÑB'‚ÁY׌lõä”!r[TùĹ”C/L‘îJ!…žÚ^4ÞH¥‚èlÖж'ÛK¸2ˆâemÇ’ôÈf<—²¨ÇÜ?¨aJÊe¤Aq™âÏ,_šz&ßÅ嚩դ^I¾Š]TêÒ/$ßeßì‘À)ÎÎMâ ~–EVx/-`¥I§©R¶Î­4òíó{zÇã¯í<×zÞ–±aÓÕ†|$k”'‡Æ'–»U§ÒG‰B'‚"Ízi*l„/kÄ@øKŠÖ ‘bf| ÀÀ$²JBjx!D¨Úñ¥Br¨¤º ƒõ‰¨‘ä MYKrÉÁc Êfç·Q¤¬€” Z‡1É™3—}BÀ^"È·Å-Àƒw{ýaGØJ〼›Ánir:@$ð6‘NLPÝ¥¼[šMŒr°µ]èí(³Êõ:2jrêmÄ‹ Ó¨t°°ŠÈC†2ìL•)°sÑcfí6±1ÓEåpD´«€†“q¦Ð”·¿É'\PQ¹˧+`XB^G7–BLÒÅ úÄÉD“yˆßʬQ]‰]gˆ•;‚'%̾›ˆÔn@¿PØn‹0§2«ÃûÃ1¾(n¯¬Û%†æTîT¥DD¥,ˆ]¸(Ë&èOK‘$.¥’§\¸äyáVf®ë®Ï4o¢†æ7Mnïe&á¬u°æ6ÀrBL„!)]´´jZGÐüAÉv(aü[™Q7RIúEžžç‚«WboÖÃ9]Q¢Oh?™š®jµ’Æ£ÈûºSZÝ¢Ô=4œÖc’ÃKs¦9„†JVbs(ܽ¡YêgÅÉM÷þBþªÉ¿$¦¡>SXiåŸ t#Ê;„üÃþªTê^j—Hê>3òègá·íe©‡i¢e³12G,¢öIøG󥨶Ô¿å—iž¥ #8cûY-¶òІҲyhNä“°‚7€Ñ—‘šY2Ø~I +ÆãcÆo|ªýío"ŽN×€¾.§PçM8¥4Ùº·Ån±(’”üKÅù&QZRÚvj|eæ„ë°’%qXü˜Ê5ïõK(„ʱ©6°Nš‘Þ—²Tîj»ˆuN«1U‘²R:FF@õ#[Í¥––_W0¡"粯O&£ˆ¿Ë»T¨^aI× Éü)íÞ¬šŒx ¸‚iÊU"\ÝÇÔ„Úù€ÊB®^WȆ~ÅiN™·Îu¸Hè ™«/丂ªeH®>³ËyZŸA´>ɦ¡‚¢ö¢ÝxMRRÝ*_1”¦ç»ƒC¹a Q%=B+ÊLÉmÙ,.”rÕ~úA+ô^¿CFš?fºÉNS{®Ýʯ©ùœ}‰Z Åis‹8Ng˜)–Y^»j`6{#\0ä\¦{›$²ŒÇÁaq§Ö‚è1êF¦ÔO|,êT’:Þ—Fg÷Jÿâ.õó¯)>Bл>ì§Teñ#e‚”¸Zp€bRè•’åPïBJçhÄ\N[ìEÿxZLB3㓽¿}–œ^lm‚[$Ø ƒ(Mö8?x¬Ü4êϨS[qû+-º€4 ø‡”s—GŸÒQùgD{*♼)ATå-•18°RN‹A.ù÷¨Ø÷xßSë=£ŽÜ·+¶íb¾§×äìl ‰©üEÂîOR”úEž—ümXè:G¶lß"§|¦6ÑÛ÷hnWUëòT¼jÁŽIO¥öIR s[q2: ì¬æåÒ'mª°Mï{ŸçRÁk IB ¼K#1,ø›–]’/bD1]œ}¿¸I”’ká·$ªÈ"vXÚ]DügøLNQɯ'ÿp¯¨SNajúØ[yRÉPPQ:ë¯Ì@‰ùò6ÈU‚–2ØË¸«„ÿíO!a,„½ñ×–åî–²€Û¾°N£ôµ»ŸØû¿K[¹ú°üì«*l¡ ©m|+PÌAêA;G‡|‡|·]{àþƒÆ7ýâÝuσèp§â¤‚¥æš—Ù›}>ͳ8™9 ´N*ˆÎw)kÀÝqÈÅŒBêYHQŽEô¢óAèZöH·]á×"ÎÏ`¥WHÈÈ$d{Êðø£È;$kxeGÎ uy¾+±ß†ôUbœ[e%}H‚PŸ6Ê-U‰°~E ¶R¡¨×¼]F”Ê¿#€?Ot© coGÈf‡Î–e2Éç¤(«Sq´7 :Em÷ä-þRb|0rßpFЩBõê\F¬5Ln!‘‘âêD2md…V“]Iâ5±€N\ȸ©˜W$¸ÊOq®B¶1¦…†=Ù¤’,O”3ÌŒ$•¥rÒ/°!¯*6·0P¼©Ú±’òŒf]* ¯x¬m»kÙ)N?}ŸpãN«½ Êš`…![…GªüWúƒ©ÙRÓk{Õì_/ž‹è·íèx™™@\R²?`„‹])Ô3±µP6ÍÖ~ ðƒ¹Ñü«A¸?:m¼Ó…¦˜VrïJzz˜íR’Y›ÿf^×l¢ð™’¥*ûIeÁÛÒ$È)6nÄ5t¥†Ø‘@[Ï&ÉOkÿwÖ%ºàŸ³Å-Êb=ÝIvaÝI:•yÚ R7²„ËS¹ÊqC!õܘÀ‘¢­<³M¸Ùg˜—çP‚/Á:,Œ×'÷0²ÚBÔôéC, ‚¥“`¹&¿Q^s“âj®ZU䵌ôyÙ|N·jÅË˶Œ²à’ëë¤/¦Õ­M±~D©Ô+•s_Áíb|½=/¡HÌ/òƒGÔнÿ¸¼â>äÂJ—’÷ÖÃX,c†1OÜSÞÖúSV+ÍK¬.jvŒ¾XC?Ý+Dñû*IÄ\ä-‹Ž„éûAj}ܲ6ѪˆMH4IÊ麆×9µÖ ؽÈ>£Tm®"ɽt$³-•:÷Qu:íµýFªôZTÚ‹ÒÂ.m›0¹:h<¯ %ô„Œ{6ÈÌ —Kiº²ªÅI¶ðL`^Kn‘™[Ρ!@!â/}N‚ÛÀf%kL¼‡q\¢[O1jKÁÏáølœN/£"²äÆÜ)T-HË‘¢.[UÁºIл]•Ñú”^f˜ÝbQÉI ‡Z{¦Ô.“q­Ç]áy#/úÏ¿le)žâÉŠ®akÃ󎜢þê½òžÉíÚí;™Gª¥ÈÓÀT–0 ÉøžšqVúðœÊ2Ü%ÍwØrÖOÅ Tø}WDö›rVa:§Â±ÙC¨Š½³w»hº¬[mÖËE4;»í!Ä:r™¯„SjÝ&÷eÓÖݽ {gÇþy¥Ü~Gí³ÐöŸ’iõ/¬ µ™p©º[jåÝiRMÂÓ´55KëŒÓ_àìjÔÂÅš&/MO)×ËÍ(¢f\ÛM ƒ¹óÚãZúd39ÊK² 1[‚®Ô以³Ì³ˆ‹h~»Äëº2S!L’}GÁèÅt*x}M(‚ ‘© kÖZ´±ãœ™e’¥ñhJõ¾ló,Ì¥DÍ’.uX"·ö¹(àšÔª&†š†'D‹ ¥<—ž'ïÝNòýcËþaòžOô”wyÏÉwïÕ¾0ô¡¼îPT£ÓHóºÒÏœ4ßÊ>Æ*ª—lÜ ¼j8Mu´g#âU:MÔb2žI¤œ¬•´ˆ§“ë5pP«÷Œ†¸‰•Ú¾Š¹ßòŒ}šk´üÙqd ÜùÁ#ÐÈÆMTÓ·:Ѽ€æ1SèÇ 6?= .Db‰íÒ•aqlôº—qÄÙV‹-6é­Ð/¢m/ò;§Öjjê6LWf%Ĺg±QÖ;]·çºŠÿÕÓiþUg÷ÛDÿ¿-ÆÔÖW,~#¿¤tPþ¡W/u–U|¾¨ýÃþâÔÞ¦"WÝå&”eXxž°…ÿ?vC0€­ÿ2»QÚBâ–­;1 ŸwJÖVÛiVnI;€£¯x¤×üÃ]­«—¶ï”êoúRáª@K£Kžýã“›“î^Ê%,,OØçOl2€7ƒ9®?GÜ ?C̽B Ú¤ UÏÖ0ÀEi”¹&#(àš@ ž"BE³^"º1¡v«]Ï{Ä\pJ(WªÏÐ`‘bÁ¢Y‚ó—PØÆÛÀœÐÃF(EÈ´L\b‘•²ä1'7#ÌEȵ£9Š"MËÔB†Ñ´òd£€UAYI ëK&â›Nej/R't‹¹¶¼F]’-úþ—ªT¹Ë@¿{Gžøº#¦¹¡‹˜%l"ÙGHUTÔ²‹zu%D¹‘|§B40ân»!¼¬×0X¬] œ¦êêœ åo¬9TrÎot½2ͯL™¶À·¦ y*Œ[RÜSR&ê'X°­p Ãk˜š {U(Þ'+ŒœKW ÐýÙ´§SÒ ’ÁbЩE©p¢?¬VÝfY²j¤Á7P…ÆãZCÂÚtŒ$Ö\9.°Hñ ¯ºddPcR"3×%UÌ ‹ƒÒ!ÈÄ…æ¤K³Ê+Ö>ÍJ!b¼‰²tJDº“$¢©U„« )0õdŒžêÎ6å­C9òÖ%eM |ÈÔ¼Zâ JÈÖú¢¹'5M…‡8ãV“§&Y×Òû)µ¹‰¹8í6ßêñµÇ‡<£«Ò|¦ú"ãlô㌪`2¤±›*Mí®ÿ¤<¿ª{¦š\Ô2Çjùü‰²ÞÔb˜’g)ÁÕ%$$¡ì _®ÑÐéªóK÷4ãëæÿį{YÌ©)é4¤ ¾½Í†°[?ªS›ý½8Eóf¿ûEqŠ8ÇSÅ3AUù¥8”|(!>‚8mçxÜ>@ó¨‘Ìë÷]Vã/¬×!‹y–)QÚ(Jà¸ÄQÖ᥽•±J+ØrP»%0W¾¶RtÒ=×ús¨Wè?NýÄô-†jÊ?òŽ&¤¶¦K‹¹B죥ɴz$$ùdëa<50MjunT%ÖÒŽgfË{Üm^ƪx‰YûI:‡pF&EÅÊ[I±q1 Ù:_e7Fš\¾›(]ÊYÉ?„¿(ÕK¢êÇAºÅuÆh>°B¥ïq{ç_hÇ>,ŒÖ;`G=Å.k‰.&^Z]±c›*ÖGæ 5<ØN™òY:a©%šÎ4uR ÞÛŵOÉ9( I–J®¤Þ䃬Nד9dgäL)©rRˬ<÷LªœÇ,+¬‰•}‰Ö%'¼±OªÛA›th€ÚAú«X€…2ü鳋[n©Ý`l~"`S\I\Ù-O¦vT8« 4Ö÷€ã‘[}˜8{„Îñb¹¯Á2QôGÎ0J{Ͷ#ÉwËšû&„‡&‹®i{±ÌF<«h¦®XFi{0²AŒhuLòå@ˆÜ^ dÖ”)H=r7°…¥"ýô‚©" ™-¥)[kRHÒy áš2æ P&#) ‰TÊ›l¦Ö+“ \‰ìÈ©*Ô"±0ÍäÝË(NÖ·å‹DAÕ…( ëx+™¬1Ω )X‹‘œ=>§¯(ÄòKŠ@zŒþPr“¬dQ °kIV¾PD°)9‡èR<ì¤ àRxo#u>–а;i JY7´”•k”‚Àše¹HÔ^4˜ÌA54„¨“{Á ¥‘z¨.« ÞöƒH€¶9<ãMàÙã2ŠHЉ‡A)²³âŽ=†q ª­@Ym²H:@25Lû9—Ò]¤ÕœC‰)6‰W, äXΫ'x+x d°Z|%¢ŠU o)>75&¥öpû…²>>Ä<¤–˜7R¢î—”'RÊ¥*mõ.bä`¶YÚbÃt‡Á ÛX|Œ¹à±°µ<—Q¥Á±Ú¶E|­,Zu8{°æ B2yak|SèX‰{…™º2L ½bkÐÂY°ƒ yäõƒB"Wv?ÊS”ä¸ò‰J<Šm›RÔ Æ€˜ ëÁ¨¡c’ ç(7q=ž mH¹õ5O"¾#l™uXúkújÊ9+šÔ¢œ˜ñßxgôêQ(`ö@E¯–éRa+ˆrBx¶-°¡¥ŒW®Æœž0H~¦®U®n`5ÆP}¾ƒñⲬTÖ¬£a«Mýì4bŸàYž®)7$õ‡èÓÂ_cWðŸÄ9ñ-b­4kêR„l·°®­©z,ÜyÆJp¡ÔˋٳŠç㔦i̲uò¹°¿á?Xê~º=»]á^¤_l:‡]íÌtr®Ã/0%Š‚\mD Û8÷hÉcýDÓÇšqþi˜³RjALúîuÞ ½G¨•w´\Ò‘ƒq‚|.¶,n¢s Qè–Ÿî*Œ…MJÔå‹f\ܵ¯ë¬kO,¢Ú_L°i«Ö9xMÇŸd ä¤ â{'¨|bBö|+^6KÎ8•¦aÄ+5õ#–Ýà:7› ѬÖÙ×ÍÊ…á´…9€ßÙ‹ŸSVµcDVRÄÊP»è›:kZå­ ¦Vx¤kb¢ üGKÚÐ tPE“Ÿn¡‰æÎnl¸¸ h.›‚”jL/q2­Ö]/K½OÒòaku‘¦_¼ÐwÔ½îdÙY’£t«¿ChÖ9¡Ë¬A|AU—Ã8RjzqÔ²Ô›jY UŽ‚ñY©µÒÊ eø?>1yX‡ÏO9ñÎ>·H혓ü£æÝËQú½LìgŒêovÊSf,Êir|ÄU7Á$A.¢onImŸo霃)“­SòLÊZü@ùFÕ¬‡"_ØvO„A•¦r%IÐBÔ ¾q“µ¢iXbŠ„Ì<šPSz¦ÚFù´N+‡¨ƒR‘çhf+(‡3FµÉCÞÙµ-~›ËdØ !¥6ÍáŽ2—!jËÒ&äJ¶"TØ-~Ñ8²3©¡b¯6y¥;ÜÃ0Y±ôgMñ„ò‰K¢ºÉö<á™PIí[, ÆÌ²RáI°ÓHYH›˜FNVÊØÀœ†àlG) 니·[šHt„ý;ð&iÀµ\ÁÀdˆª]×aÖ"Í{&KK•[KÄ¢ ¿c*ô8wèR2'³"‰™"‡’PÖý™)·8)-XRœCb稯hb­w»žö2Ç:JÅ Ñrc/r KÓ‡èe…n4‹jWSZò&ÏQ\Ÿœ[޾—‹8Y„F¾Œ\£r¨œ†âðOÃR \Á ÎB×ȳ006L-welzžžD›`\Bшx¼ŸDoˆå}ƒŸx.`y˜$_è!÷€™t©[õ†(]ØÇºSüÛeéP}’k’(~HÚÀ´ãXÁ\UÔ$_YI±¼-vG¿SÄ6¤æ‡©¯ ˆ©X!W1eƒé»<¢m¬™·‘9]ÓaxVÙäÜc‚t¨Vkïö ЬóeIëxYû„p®Ë¨¹ƒÆ]…PÀ§V‘s9ª}] õY5 ±ä'ŠG”IåË;g Ò7>ÈÊc$Ž åØ•ZÛBÜxII{^ùx4—¤t?xÐŒU‡˜§ÖJç¤ÁBs]IãÛ~#¾U¸i¼V?®?ùž™°îUk´ül}¡ÎS¥öéá”­ • «ÌtùGsSÇÇÁÒ%æNHNâ¼÷ÚØ?<¢¥7).›ÏCòÞÔOœ1ùFâÝ4¸²¸áó«û:} då©“Ì'{u¿Ò7§çô±g‰usÀ*Vd…:èJA€REámlˆê­Ä« {:$HâJsd’–Ô›“×À4üÄCoqã™{¢8†¼—©…ÑXSi%y>¶sÊ)f>Êõ3l[—¬>šÃyÙyƔڂÕk¯óŒr,)ŠUi¸•ö§ãèt ­iÍ`oàòÛP"<À[ŽÎ^j³592 Q<•x¶Êàê ˆOo.Y½ÆŸù"Ö¦^¦Ê: TJHIµÆÀß¿X.e8òüº*Ë£/ðÀk”¨æ–—¿1²z¬FN1šŒ¿­‰ðB¶'×P£5A •~9·:¢/ùÇŽüÓåÚjç=³IbåýÒ<ïåZéµâHæ©i®Ù]#ÌdÔ«Ê<æMɆiÔÌÂäa7/£1XAv)HøD-9oÆœöÐ@¹Ïæ)ÁI9àJnA)>-`‘™/´—+OW"5)ä,ÇB•j jX%.Æšs 61%4ÃEÒâ;A†"ˆÓŽ6Ò 0HHšˆŠêhPLÉ€±‰Zâs|×׬N/#8+Þ7‡ªx˜›<Ñv`Ÿ”=¢ùair¤›m¹ä¢¾Yc¦)Mïòë Y )t×ú¡Wa†œJEÉqÈì%Ef¦ÈÍ„G ²)VªNk½á¤‡b– ™*±¾»˜ÆŒŠY3mAKº´´`<“åŸáÔF:>bO.ãQLŠÈÈÖ—2iÔ@äd¤D›pºH:Ä:”° ­Y-ZÂã­ ÐÁ(}B. —TÓäe¸&„‰7Í 4IAòÉD‚ºJŸQð“R ä P„®¹u=bi‰Û!¾’ŽK~4عª«1¯‰{Fã\°MO”«“éq¢y>3nay¼JX°s;! Ãzv!chÕÀƒâ:yC‘l•PÅiê@éÖ7žŒäVø®²^qes‡²8ÈS­ú³Þ„‰¨ä=ˆSÌ!J´1äÌUB­®†-N Œrl3H]²i ORIljI¥  ÊÜ…­¥ÓÌdwúDSÈfða;OK‰©SȯCð“—xf» UÚH@!#Xv™äÞE‰ùrÂÉHÚös!}¤¤ªÙ¼¢-aø_ßùͧâ~Ðk b'éóìÌK,¥m,,Xïc{zÝ«vÛTëxkÿ2tkíÓÛšßGD𷈲¸²Y(™CR¯ ­m²• (ÞÉ'SÝñ¯”i÷j<1ÿPöOŽî_©¡6âD§ð3NO¤û)þG0±=ã¤ÕÍ8}qq¯µG ße“+Eš—åˆÐëÞñ”t2¾Ö ñ–`}% ÑÊâÔr~- tÚ+õÓì[],JÞV%°eug¥·7þ¶­¶ŸÔ[èr‹ÿJðcˆô¾+ðâŸZíÉ9¤Ùc*Û)QJ’¡Ñ@ô‹mº­ÊŸÔUè²ül©ª”ÓÊ”k*R ÔÞ±`Ômj£u ©)›iä$¨¨ý  1²ép>Ä8UªM!ÆdŠÙCÜ©'PI&ã·Xä£V8ö&ì•´ÉÿküÛ†d©’-98þrÊH+qÒmaÖ+·-ßC°é¼»…˜E£­¥‚Ñ¡û1bF_•™®¢RE€^@˜õ¿†ÀX›˜ùkåßÿ*6—£»I³®Vµ„ÿÇòJKšò1¼mç ZkÒ>gØþ_fªé[e®\ž_ûÿ3¹m°Ô?#G-ã4š ]` &úÑôŸ½m=žg¸è–˜ÓOP$iå2ŽW d=O@ºA¸´+4oÙ!ä¡jØ_ÓSÁœr{—"n»À¤‰ó$J':@ŒD¾âsm„ùZ6I0½%\´¾°9,]…Y™; ¿Xס´‰~ü¤´IÒ5äÀhƒjµ2¤«-âp³!ãR²á]ïmaŒä*ˆ“‰–!0ÝO!ä°„jãedæÚ‹·Ør7tØC>LZ™t¤Óü ¨l 3³%’ìb¥Ke…$ò,3*ï,vˆ ÄÊ~²AMüà•¬ŽA`X¬Wõ6:˜mGЖ®Ô ÎNæðT‚ÆOÐíÀóF4d$òf@c É"Vp'C©ý# i4Ò.«G¥’ƒ˜*aŒ·'O8Ÿ²|È/Ø_?®ñ“È*°€ê}c"¸€æé@ ©Cx"–BHT–J It†«ìŠè×' •h”ÞðHôÉeišh6‰»Y¶aá&Ù¾„,#jBÍv¿e’>pÜ(1¼ƒ˜¨ÝÜ@lˆÕ3ÀM/xRo 8ŽrAz,ë’ªð] Mäi‘Ä'&U›"·L¦*ªZ, 9¢NÜ‘o ÛœÂEα(¼™‘Rµ$ Æ×ƒÆ\G+B„Ô«®Í÷ï²á”M§Ó”´Šæ¦ÕiéÔ¿¼ÁqÖ¤”Rdh‰PºDCΙH’ä ðµ3Y2 •+[Ae,›r#TeBÚ!Cë­›ŒÄüCKÑe=:w‡ Á¹äL¬Hø•q`aØ2-d\š’Rð‹Ã.b¶<“)2ªÍìBÖH„^ †•”ÒæÛçwê=#œÔ]¨ÑM_CÄ×äèöM×ô/¢Ýâ>!›Çš¤áĵ90òÚR†p…© XR€èM„vÛõŠqŠÓnÐÆ?¸ôm.ï^µ}LÇ`ç Hi–[e)ZÝÈm¨·â´w›ÿõObØôÏPíç/ÄWäécªªO¦+{Eû:£HJÎ`ÇÜ5 %¥KK†È™HéÿÔ½cÂöïëΧWº»uPã§ü/à–¡+—Eí/']Ff›N’Z%ù‰zuÂs-Òd ÄUæmÚ;½wõMòúm3Ä?õ ]8!{{^ŽÔfhXùÇÓ†çÜç¥j’x f ”ªÂàuêcªøŸÈžÙ/¯5¿üÊ·½¿«ò¢Ü‡ž›¡ÒeßΩ½5:AÓ¾Fô¾S©ëmŒ¾GóFªYÑËŒŸÈµ×¦[üÿ9Z}©>/HM{Ù ;P•HZâSw¸;mx&ÏýI©AQ­Žüÿ‘+¯Áj/ÛObÙ‘+„¦f'¤„]L–Û¿{«[‚{C;ßõ_jÚ£)¬Ø¿žpoÙv{$Ô©8fL NL,­É’oøSü#Óxø'úÍýDÝ~c¨”$¸iÿ/)žGQÈòªò V‡0Ú>wò8L$½äªø×„1"ñB$év-ŠÞÄõKšÁÂÑYê=IN¥ )Í©¶ÑõOÀ÷HX±“̾C¦–rVRsá£ãV½#ÕæòŽ2Që 1%YH$‹í•XôG‘,Vó@83|T‰)©¥M§2€0/"‘±Šª²£ŽcÇ^ÍNR&yœè­¤{n×óÿ$VN7Sñ¯«¢´¯áçhKPñ]'[Ç í{¿êÞC¬Ú¼+ A]-,¡Ã¨Ž«Œq’‰ÁÁàÚÞ"*P¶º‘[5¥)VÎëA2Õ¢¤uëñ’ˆRV¶PÙ%Zô€Î´XÅe$x n„‡”‘%¬N§w:D]iRFÖ<'Äcj”IL V®4?œTŒv UúÚNlÇXj²õ€ “9ÕqrLÄÊÛõ“$T óŒ’(î»! ub6¼½‰>Ù7›•7=`N!È"·V,¤ÚUy &Ö*ä)DâÆiž*ÕZùA'ƒ$ÍæX~‘¤òH–™ƒ—C©©R2Lé Þ4˜H›äÖ©…Øk$ÙzÓ1)ÀfµÌr&Uã#lµsœÚBI?´/:ÂÁ`Þó¹EÉÊ€‰àV¨¥‰b«”1¶HSr¿ÎqAJØÄ¼FŒÉáMèlLIAsaœ?`ÙZúõˆÍä^]Õ&ršñ¸C %, Uµ—­Ö,)x5.Å¥XCœÍ%ƒé¥”€¼+(å†O –™ y!Fl:!ØÖÂaÔ„˜U¬‡RÀ×I¤•0.,OxÚ†HJfS2Y°´ô˜ôF} '(ér„{Oµ™ÃkDc65žÈI|]`6e“qÈbZ˜²ˆ¯¹vMDÍRYT,?¤-7„MDÉw:z›k$ÉfyƒH”fGjÄ‚ƒd iQob¶@]˜AmÃq¶ño]™Bm´Á5T5按ù2+âI\ͨÛÊ®A ò)&INM£[Ãq–)ô`¤lIÚd²h`£PÕ‘'Åö¼ÀÔfÚÀ倰‹•zšP Bsk¤r»îâ´Õv\mºiZú:ï€|#`Ë4\@#N‘óÊ7¯$ÏWÛ´ à`æh´rP›&<ñë–dè#J‰ÉžØ8’^‹NšRˆNPcÔ~¥–®ÕšGå—1âq#},P…›ÛÖ>¸øþÞô´Ç"Ú¼p•\%À¼Xêéè§à²Xte&i¼D^9›ó5Á4F©SÎ*e&àÜÁë²*%>¯O)"øö3Ÿ~B¼„¹›)P´yßΡ)è6ÛT ÏÕOgJz”ÆbuH“7Øñ¸éëŽ"]­2`ŽyÙõò–$-âÜ7.¦§R˜wC¨±Lb3rG8qÚJQ†^Ê’Ò=ã×NV ^°q‡êmJÌ;ËR@Ö>†ø¥S½&ÑÂo2Œ"ÖJRb·ï„ œ¤Ú=£O[®”yõ‰JY±5˜ ª5*ði<ä'­áy{&˜FMj ¹¾° œpOS„cc$ðCM\‡,I¸0y@4XNN¦rŒÊÞ(à0IÍ„L”†HH¸ˆ%“ ºCa'sâ òQ‚ßgRt‚% ¤“¥6*¹€É˜?Péjvd­7Ö9×0vC±²Mµ2= NF8ôcS+ ’okD ÁÉ`®ñÕML² £Ö,tÑÈ•“ÀµLuÉ«TSúÃ.¼Ž’B…ï¬ ôdÞCÍ­-X“xUÇ ÓÉfmj^PMÎHðÆ5I3km)þp)¼›Œ!ƒeR|â1X%ãÌ<¶ZVA¬XÖûb*Z“/1V@H#1ùCÇ(U—éÞé ÚøˆŠÙ¡šË(M%¹mHÚ†8£‹«ÂIµ+5­Þ ò3W3Øé/Ï(/ÞfŸ#pŽF >+í7š÷7ŠßP´pl²ÑÐõ/|ÃÄVe• ¨ˆòÍ_ÊÕSk'cNÌœrc‰¸M1C™,•w‹Ý«æPÕ!*w»Ù*C|ò0ÞÊ‚i‹òŒÈ7!…,¥†ð;~¨ää¥ç…*l-J²A¼r»þ…ßWEÆ×®ý;/®ñ1SHæè™¾U´¸žÍ´êÕ¨½—Xn½I³KI%;^<áéüo³£®]”_8Þ/–|­ ´¨ŽËaße·Ú†WR8#ÚSصºY™™¦5ÊP%Z GÑùÜ­j-ʯ4pr'ÃoaÚ£²Óiʶ½cÚôš¨ê+Ê)5:/ ¢™Wržàé¶®qƒK¡®‘ù—ùÅEûn{AÕ©_x²‰\`Â\s-Ô7Ž[ä<í¡àr»Ñúì‘Ä4OHK]ÍÀ;ÇÈ¿2ÛçU­´5ª8:Þ™<š•-*lþó×RÃ+¬ƒ„²T~—qºcù/{évL) ˆt~f{^Óæfë..êJRNãë_齑PG˜|š”|…0•«“Þ=® â£ØÑE”å€S67ŒÔeYásåØkˆß%,i:^ð£x3‰(ÑѨõ…yö £å>vˆy ‡²J‚¥42&ýaНH“'hJmJЈoʤJ zƒjbö½„K&ÛÀbc:ì®t²/9’%ÈÞzƸàNç’e=¬ÊºÍµÒ#) „ò“k“é„%\ jûŠA"C©/˜«§Hb1$ª ¬›ë EDˆqWVÝ£f™X$ ƒÚaç»ë¥ÄdQ8žšqpfXפI¡ˆ¬žû™Ë¶£¼m…’Á½„d6žqF¤x&ÑÇ9„³ØÆªT4Ä\Éô Ä”å3/dƒ´–+9¦.ÃO¹âSZH•—<³e+ ZHJv·ƒÊAâ eÕi zBò\‰´ŽRnÚtQ°:r¥)S3D­7Ë”ø‘\K‡yŸl”›(Y<™À·S„Ò¹@2Þã] Éô$ñ¡™7¤‚lzAëx`,E[ÂI Ø Š¹†m³¡7ì~Ã3)“—m;>“y®8 T1:eØ>+XkyOOÅ^"%–Ô”¸.¯8j4ƒÁVËc>dÍÖ½Íâ3«q°±ø?Œ ˜Ž]¶u)@i7Ìjp¥³¦Úp¦Ð¿g,$š5—/˜ Þ>Hùæô÷5“Ót´; ‹wð…*‰ n:ˆ§ÐüŽuÉ8±›t‘µ_8 ô¢–dÛ=H°dø×Í%\R›9mÏhL«çðäÕ1DM!WQëMæ[ÄNbí¾U‚t¡G6„iR}ĬšPd ™Ä¦äXv€¨`RÏ`÷jÁd‹x"@fºO¶‡ÔNçÖ§¡vA”¥!ÇTêöáúe†)8šgÖ†V #MáøöI²}*®ØH²…“ B9)æ1pZ¬ƒ òˆNŽbÍ;‹0T¢Úw*ÁD”“Ž@ƦÞ.áYéú»Sä¯À°n"“uÖWUmH¹Òè\Ñú7ìm^©ÊKJ¦d/Ãa0|ëOU’m Û?@øWˆ×1Nm3ê#À55q¹¤-ty,‘øÉ$Üå1үᾱgµæ2Bvv~wû]á¶É}l˜KÿOµ2ŒQç¿#¥3™Y’]”Ö>‹ƒ<ò¨i²á6í60ßÌ“YV-Óó…åè‡!× ŽkIIµío8­µàÎCC2hFâ”°Íáîf BҰצo^+cD‹Ú5åq ÖE¼G‚ùQ ×®ÝW¶J"%£ò´ÔEVåš’« yƒ¸ÅrÊ·Ùì“åI1)<ò³!i) Œ‹Jx J€õ²˜ƒöm{&©<´Øt‰E^ˆ³;ðT̓jrÊ#¸ƒ)@e‚Ú¼]bF]H±¤ Ãæe¼cC¬J!b°MjK2l–‚àf&ϳҡ±¾9dˆü¸MÇÎ7ÀȬ—ÅO+Äp1hÊÛ!-ê"?p ªSýå[^ûÁ*]‹YØ­^¡ø´HÐÅîô&á“*Ÿ¢’ƒ7‘ºkìlÁè |p6Y¾ˆÜ2‚–ÓcÒ© d¦­«:lL)`+Cç ¨á/$‘„JÛ#ÙnKS“ÊÐtÖ ‚XèMâ<˜,,Xh 1ÄNîÑ@b¹tÊO8R,J´Ù,‰ñÀ95ñ*Ö\À[¼n˜äv= øÃˆ¾æÊ¼`Xksšz[2SÁ@ãž&š­MÐWáõ‹G@8Þ-#©èt¾‘Ó±ˆêp]¾ÉõDVñ{ pÜ…ò¿Ÿ§$wŸ’²HýsöR§%ÊD¶ÃA|¢y¾G¬Ñ1:9ŠsnJ„¬#Žó¹0¹Å‹˜£‡lU²[I¸í:MÇÀ‰ò¾ÊŒ|&jI§\m ¤zgÇ>J”’+µšÁœ½Ž)7P´})±jÿ[¦Mq¸iüsbÊõEEÀ¨žÝ!ýMôè¥Û+êªZƒLÖš—AS ƒkÅ~Ÿv¦vû5nÝ(~îN&^é|ê"òŸÜYL¤»œ:dYÌ@†Ú³_”3USo¦)%ùbÅg(•/åUÆHŒ$¦C¦b79ª :yCIgØ ZNaÇ}|P•öe ³Ùä-ÄÜk3 m,N^äXÜØÆ:Tú¦ÇJ,®qxuô¡ç ï_È6©í–źxŸeó†8èy-¤=rtÞ<{_ñYAóÁézMÚè׎+oc9e†.¬ÂÑQ¢ÓGGoÔtúùvrGµ?³ýJ¥HqùVVµ^ÀkËñ’S q&tÒÄŠk pi‰{OË8•î˜îµŸ$ªrúd#f•H Ä> .˜s´Ù#[C»fú­X·O‰décþ³W¥Ë)æAÌÚ<»æÿ$zy¼1õ5`îÎû=7Ga a ôóÞóò7©é±+¤²_Ø ýœÐ±X⬚µå‰XȼVSÔ·9zœ¦-6ËxY†)bÏg{[Qßl>âRt&âÑô/À5pŒûg¿Òí]œã¡¹—3‹xŽñôæšpkègšÇ?ܤL…ÁÚϳm¥ö‡$ÅÖ ×ö…äÍ1³:P¤‘ÚÀµ‘î†ÊEúíȆŠU0:”‹! O°‘1‡³³u'K@å`u+ÂáR˺u‚×0Š%A0ÙmÅÙ;u‹ZgÙè¬q EÅé`"î›:*õ Ì©EžˑU5‚d¬¢×` `n@2“\³`Ûso$ÔÉjO.×]ü ¥’;Ë6±‚ ¦R\Uí¤J!#8Ð]ÉN¢ È¢hm‚J†ñœˆ%‚d¤¸Y°é¬dF!£ÙQ ƒ!…ÑëŒi¶›Áb° ,çÛ³‡¬Ž€¢£–³{G›M™lÂërÉ&úD¡Ø2"qÔÁ«öj@ºØB†ûEµ2肉æq¦ž"ðïÊWcœŒëhHMÅÈŒâYAtxü‚fŽcm?8‹€YEk’í B–@ZIù–›Ã|qÑËÉu%-yØ-i j0ýj/_P«ÌQZñ²Ž…ÓXPoÑs®h±îÃñÖ–£ˆyrÂÊS–õ‡Âw,ic“‚Þt¿[¸OŸ|–JœEÉ$‹Ç=ò¯”Æ6a2ÃlÚ#ÂØÿ† •§¬²ÍôíæÙò5)ç#šÝ¶+ðsŽ<ÂSìÕJeÙYפ{6ϼPá–Ï0ܶû9á óx>¨™U-L¬H¶£äºXO ˆY²_8åæ+TÍ5♀ G”tú-|uÏLé7àgW4ý×{y×åv…üne‡$ÊÀ*ScÈ]BlÊQmzÄc˜ ÌêŠÌQpHÍXðb™Õ%ð¤1;ªVG²Âð,¡¯â'×Qa¼ÄÜŽ±Çï[|#¥”°t^á)X–N³àv’]¥:›Ü›ÇÌ¿$Ö=$Û‰í;CåZe™‰½›%ëò|ÂTê#’ÑüžÝ%3£…Œ©ñDzô¥>YjnY)ÿ¶; ËmÔO¹ò²ˆâ³JªÈ[2í«é¤z&ÏòÏí‚vrì¹½¸2î•b^u»”Û[G óMñjæÚveàíL!‡Û”¦$mÚ†ÉzÂÆ÷0>h‰<èšl”îzBóx°dÁv’m­¶¦)V{ÕV› ¼¢ D_¡3¿ÿÓÝUí¤BS(œïŽäÌÛ„_S¤AH‰_â :ÃKÏ{¡ê®ìÛ­2¯Å˜`¼ùV[•^°b¤Z˜ q—Hf7‡TàQ¡d$”úC1¹‘•x ðyµS1Ì£‰ÓÆ#œù*vhä[l†©dý†öÄú<˜*Ý)†>}¥^Yû·bpGlQ&‡¹ •n#È¥A`Ö¦O ƒS­¨Ù+MÏœBLUÕ$….Ytgoo„žؗ$Ç(ê ã i…c“7O-cÛvÝÙi4©wQä›/ÎðÙ,R›t6Þw_5…ý4xÆ cÃVæåKaÄvŠÍ.ã♫©V”ç³c3ókZ™žÑÓÃ䓌JémÝñ‡³”µ.–³ËC¸†4¿$²R7-¿ãÿi.±EqâÊ'¦Ñï? ݼóGò=‰&O)Ã}{T§æ‚<ÚÏ¥Ž¾þΧÒP”²¨TÀA Á¤/LW–BUôŒŒ0µ‚]-ßy7XN]8I¼•f/Ј ßt’-vYâÔw_²‚’¦Ïc±þjš²G¾m•Hë }¹ŠeȈó92Wj]Vq+n&ÒåÒ•¤é\FÎ0äUòx š½cÄØ)>QÐÙ¯•Q#<…¡€xjÝ!i(@µ´Žo[­•ÌÉX«,–ä½ÞRéö´#_E[·ÈÅ\G8©U›:ˆ¶ÒG‘»%Á©¸­ÌÛÊð„3~‹hÊoÇB_ñ2Ò®¨);cCK“Á9Ëòr_14³èzå#{Ç®ükGl¤¸¢§]l#ÙÊXâªÔÅIa’¿”}9ñÝ4–™)žc»N3“À6NsÄ,tòé4£ÑN3Ðæ¹#±¼WÛ Ôƒ*nÞ‘GªŽÍ–î x:´­÷Š»:2 °%Ý–ð«cYV”¶‰E›äVØÍ›æ¹r§Ø­“*ÜQ!r ñkTº)5²Ѱÿ5`åþpiÚV5†Z†”#T€`^S\°y7IÊÙ6¶XØn…Ê”˜º€ùÃõLb¯bíVT´M†ðÜ{,kXM¾R¬£ÿÌ} ITvTci‘‚Áœ»÷ðžºÆÃ`1 °‘Ú D‚ÍÌ^àA!ìÓY!T&ÐŽÐÕo$ª¼ÐyÇxe~Ζ™—-†ÜåKK©K¬RÉ Ô¥¨4“°…e"ªo°²&Óg™òˆ)~…¼g3Ì“ZV~!”ÈÉ•nŸïJI˜ÈÈx± )³•  ×ìœ"؃‰pè-’”êzE…m‡àÄŠ½´²rò‡!`ÒYT©aI&Ðì&ˆÊ‡%¾ÍÄîöX„÷h«´rA4oǪX?K½ˆ8‚Ý>*§Wl  L|oóý©ÎÉ`÷=ŠîQG]ÌñþZ“IJ‹È°Oxñxì]<K¦2d;í=)PŸÌ ëüPΧãÕ™fž8 cž0ÊUè‹J^Iðîñ¿k•MdFÚUpx)ªMFVw%N­&ë¾¾±ÙÝ O§JSy:?Udئ#"Ñryγ« ·[Êfq>•u´$¥õƒàãìøI³¾Ah"o²½ãM™Zk¹²€Ϧ¬ÒÂ?>=««-Ì:ò:¨˜úú´qíž_ò­Ã1ÁEaä›'QshöÈÕãèó/’A¥<¢Ñò(¢®ÕL«J%]-P#'ÄW•¨ªbgUõŒœ0g,˜PgHQB6Ï#ŽW.¢ÚE¨Ý+礑e¶KÈì¯eŠð`2J¬òoÍô«É#Þ6;¿isIÆLýŠ9KI*M·"•]—Vh¼ÓäVøî¤ª”ú¹G0'éZº Ó&X*ŒDÎuXgW$ХIJiÊ ! \Eð™;>°’&ó ‚t0Т¯‰_q*|HgUì# Û#È…ë’)|aÄ¿±”\iËXž±Ýi6ÕG²¦Z®)Þ0ûAÓÜÒMXèv¯Š§,Õî<"q÷8å;Sœy¦TlI¾Ñô‡Æ>V޾RGžë÷™Éc"$œû“ŽóVr­ãÐ#§uñ‚9×|¯yaIWÅÓsçѵ1Ž‹;÷`ƒ [É©Ø>¥÷¨¹ùE² fË›TÂPzE Ý=3UŸŠç¬$ØÇ uNªÒ¬oå‹4ä'b9èR”mA‰Ý"¾Ä6\ÖQÞ„º)õ2É6IÐi¤FRbƒk¦ñÈ‚ë ò’n ðaaèT«¢Ê$ô‹*½ UìSÄ lèbʞǣ, Ó¨¬üŒ8K ÷'‹¯’£}l œ äo—™ñŽ–ð d-!6-¡Þ#_¢iä–üèi½N»bͪ•l×JU Æ8 _:eVnä“–?g_Ôe‡4ØZ<®1ì¨äFDªPn¡G¢$»Ã^Öé5›RÈ¥ˆï )ü&]Â`öiC!!7ì`®xÓÇ 1A£du*m`NâÞ òë”ñh­¢m’²Hõ–ÊÑwüà dFR R§½Õ@8t…['½[Câ×µ¡;{14À™B‚u´ Ù‰nSËËZí©ÒðÄ" Š•$¾reÜÚæëŽG#$°0`Ž#¨)öóæékÇœü‡äëE,3´Ú6wlrÅ^ÃÍTdIa…%D_A´pTÿRï®ï­5ŸItQÜEö0«PZäPµ¤t´z&ÕýL®mre«ãrO¤Tõ®NáÉ¢*Rî$¤îFÑÞéþE§×V댎fý”¾m'ø¸¼-Hmy 4"<¿ä›š×8þOAø®å¸H=ÅOlG©ôPËÇ6Sk+Ê)ö„BËÓÁêú]Dl,”¿ =·ªôìH¤Õ_QejðœÛkîíðJm¡(šzøÎ\rt‡¶W¿ÑRyù®/ñG™ÛðYBÌ´Tîz˜F>ɸGÚ™¹š’^SÀçÜ>#?0Tèµ1”½—^ öÈ—e” Í£OùGŸë~l¿´èÕÊEÑ¿i4bG}*¿œpû¯Æ¬Ðg(šY/V%:fdŸŽz6lŸE/í ]}™¹w:ôŸh¦Pîàà®1TU\®:‡/¢ˆ´}cñ]"¦“Ä·û¼–‰rôc&îQ¨í\ßÒs‘údOS!¶ ô…åì4W :¤6BªÚO’ÐeÖë©æçX,œ=*Za#[‘¬%.˜H¡×QUžm &úÇ?¼ë–ž¦¤[íºij,M7ÂI'è’Ì!¤œÖHù«åwCSky=«f©ÑZL½ðÍZaÉCÅV"<«URrÉÔFÎC*”jo(_Î$ä”pd¡ëAª*4µÆñ¸Vî)q6Iâ”97d«KÚ¾‡YfCæhò®H®…k™™ì¬8ÑX ɹuØÛHê6zs`¶¥ôq·¸†å6aÖÖ¥x‰´}ñ=—õQÁæ»Þäô¬¡8‰Œ—;,«,•—VÚ~3à–YÌ[¾ùQIb5)Ù¥~#s…§«Š*¾BE%œ©×´J~ÉF\ åÍ4…ߣ|‚ôy¢{¶È~Áî©kMŒPëz"çȵðdòTs—¼Šš¬©ÐÞOå"$õjÍ›2y)‹UªÕРI0ý"—Û”+«ýTé=/ ÖO±¦…/Ë@¸°áw&!'-¿”-šUeK©9AƒÂÌK"½fŠâ’¢¼= ð5ZÀ›_ÃNºNŸ(°¯S3dY¨áy„$ø4†–®?ÈÌc€,ÅÆ·ƒ~¥2f¬…µXßM-„ò ß):Sþá±¼3ÉÂ\ §*ŠZ²·rU]ŸîÒ°ûÕG„¨ÔµQµ[ó†x^¹´£3w>‘U¨Öá×K/ª“€;ÇÙÉä?Qå%Vé3i€*ÕдX‘qöm,ž{Þ×{íÞ›Á$ÌšœC„!6¸ÒdÆ¡fJO( ‹Ú±Ø^ÂV|$ÜÜÁ„%¨l-(ÚRÍ•­Å½"j@ùäŒóŲ¬Æöß]`.&ˆS5tFgb|ák `>f§Ï^‡x!)d38Ô²2„ß¼5\LK j…GýBN@|¢Z–¼lj‰q’.®â d­že…íxùïæ´»,x=SãÚ„ Ž“ó’u)4£+jÓ´x>½ß 2võf^Ìëœ&¦â)u]„\ŽÐ¥;źyûzxËÚ(.;{+ILJ¼¤²‹Xê±è¿ùmð’nL¨Öì•ߎ!ãO^áÅEÓ"lÉQÓ´}ñÝÕo1Jg¨ÛeµM¸”?êOÕ%Ô”(Ÿœzߢ…%îß½J+ŽJå-:ÜÝœºlwŽ…Ê3ŠC2×Jä7á|E3.ÀBœ]†À˜¥ÕéàÞpUêõóµ{$ñcìeÝRl.b®Ý'ÓBºML ÂRx¡œ)™—’F¿ðš }8›qsg[{ãùÚ‘m5GTJT$ï3óíºªûŠ:}5ÜÑúIÂy¡Q¤6T |#KÇÏ2«Ç`iýB·hzžö×±ë§Ç5n`çõôäà®2áÔÓñ"Ü×UÌ}Eñ=ËÏIã"Òx­_JV»~QÚ¹f99<}dyÔŽV—´Cò±$.` ë›Â’É·Q‡39 O&ǪE8’,¶‚²x^\Àeù†Üy¼xïÌ÷¦¢Ò=ãZ·–uÀÍ!HZ,¶‘óö묒o'§SJŠÂ¥4…¡)ùG?<Í Á`;/PnE¬­[A pra¹`XÆ÷®¢Ù61ÑhhKØž¦\@t<@ä¼êKê6&æð]f•HZ«×Ķ¥¤‚XÐiÔíØ9+R)n6qE¹„ºXÓÎ;ïlœ¬+5z¬­Å‰¿µÔ§Tno§”}/ñé ù£ÎʃÓ ÁË¿éñôs‚Š+4%®cTõ†UØC‘¯¾^Yh’-¤/æË$×#KÒ¥*1Ž`ùè²Ê[ˆÛë Y39^– ¡'­£œÖÛ°€ÿ†_ 'Ckô¾ñA|²Œá hzB’x!4 ªO(¶JNý`µ±I{fž\Ã¥7$Þ-*+m–MÒ2dM&âbi£",Fð I#8„˜•æªæ×ˆ+Ò%ÄØå)*7¶þP?ÔàbºòD™Ã‰| Gõ¸Uà5’éñ#_MãO^ÐÝpÈ6£Ã`ë?($w ”p-Ux\5û»ˆj«7( UÎ,©¤úmtî½Qg0jÙ'"uEÞŸ_È,aÌÝAÁn<ðç Ÿ”5=~ãOÓÀ\1÷Œ¥h·Ê+­×e ×J-ü%Ã$¥)nçÒ*mÔrcJµn¦ê³›íÖ*a<³Îë•RÛ„m8³§´H^›}N;u8°®\Q uZ¢¹6.÷;F+ÖLñäI™q>9…¢o¼ ¼†Oe¯dóS #¡©¤ªúĘ<“&1ŽK‰kÁ”š à5ŠÞ+%z()·`±‹â‚I¿”p+ ”Gœ¨å·Òà›Ë3ÈÛÀÕ!‡ŒÚF[†X'@•Ä:l䴚̦pGhê¶wDä²ÊR”QϘõú™šZfŠSßñí–È,³…ݵ3ƒô#Ôi.Ïÿ¹u>‘é:[G «³ÊÀ•\ÑÌL<·˜*ëÂçp(vfÙzîcñÆ$ˆ³ø'–‚R£_ñ ¡j©‡Óö ßH2Ü9”²L¥R9*M† Äe©ä±Öˆß*^êÓH¥º}®#5 vÖíSö2ß.ݯ$D›%ÔØ|à°²94KSÆä^- ð)(iÒ UŠÄdìÀ´« KÉ„X´åÑY2^\…õ„§rAT²’<Ñ¥¡[.®²s4LÃÂ7…ž¥!ž†ðï2Ú@?TÙ±ü0Ÿ#?T ]G%wðþQÔöoëX,þQeN«£|Ez— Ï!$¸ÓêðÆI¸{…™Ôc{Ú,ã¬Ê­Ž áøh !”Fz‘¸Ç³ƒ° ÊŸáêqÉÌU—3j"öy§ºÂ}YMÅâÒ™áK·‘šÄî ²¿£`úªTèMã)nL"–S)yçAÖ‡`òL¦M¬ g&ÃóˆÙÑ®lÞ¹§}9ëxÝrL×<‡éòëx úÛX,¤Í}“Ÿ¤æ—1¨Ï$œ@s8q~öRBNÐGè¢8`ú5œ@µ¢§p±éàÙc·Ô¯šEÉÃÌŠ¡NdcľOò )“Iž±³mPp]„-´T‘nÑã›—Èl±ã'q¦ÐƯÀÕDÀ’ò…>~‘Íjw)Í{…hk§P˜@²›úE5·Í¬ä>0Å.±î4·-q`v‹½’~IbC´Ç(ü×öÛâõc ϸĒֵHúŸà;5˜òh¶ª´âÚ8ëâÉüDúÕSyJ¿N‘íÚ-:N£‡Zåɤ.˸³6”•\ÞÑg(®'%­ÄÆšCjBtŸCÖ)íxe ±âJ[eNݽ?h –@F¼š Ë÷–½ r}‡KÊUÌØS› ˜Á áÎC5;*’íÛs*Qvi£Ú/+N¸ŽgŽu†&›jžò—nÄÀãàäâW_;ó„Ëo Îb²7ÓHõ}žÇq½©¡­‡R…½7e­ö›Ã \”‹úAã~EEÜCHhf6dÁ&¯B $„ïtÙ‚Ygé<¤’zE”-èŠXÎLw¼70Êy1¼³Uåø„jQÈ<i•³2¼·óYYœ²1H¸U`7ˆÇé3ŽCÔ†ÊH ‚ÊY4ÐÃ/• ^è DgfÒƒç/#&fs¬e„nƒ \ƒéà…hu„å[ ¦×ƒvBÒ­ŒÄ,Æ!%>âØH›S_¿Åt¶z7"¡Ï;ï¬d+x™šÓx5py £“u=´—y$|ã,|þ–AK‡a ;WL˜ ÌtóŽä_†§¼NϾ::,¬1Å÷ÐIsáëxñmÓáG8=#Eò xS‰¿hL%%g_8ómËd–•´tú]z¼³(!4ÂU{Ǩ«ƒÁiÉyµ5gH7€WV{$ç€. ÃÒ• !$‘¨Ž£lÛ5V˶Íz‡¢‚ã/éç›÷HZþ±ìÛl©.Lç÷ âKÓ9ãðÀÍTi(Mí pÛtîUöy÷ºÊéã wxB¬Ð×smâÎÏÚËBÙ;=•W¸;1K—qRìSå1ÝcäQG£lºydåÌmW~›Zr]Ô”©1ßh)ZšÔ‘ÜS Eøef±å¹iZ‚´ÐEVí¸W·³¦Ñé¹—w ½Š* û-¡a FñÃn¿=§Oöš¼GrpkÙ¬ÑèÍÈÌ”Ž‘óîûòw©›yè•Òò!±Hweð|1EN¡kÖRÜÛÃ~#±8¤58 4Ö+µº (í¼‹¡†d±%KJPJ‡HNm”ôRæsÏø[-&ër“¡$i–Í»ZßÅnÑ×>ðsî0ÇèÂo8Ò”£mzG£h4?¬\™•➊SŒ¾Ò+™•T¬³Ý,lvYøßÆcSäÎSsÖ»cƘún¡PYKŠ:Ç¢CG]k‹BºxK@Zv#ßRäÊÔ«£.ÒÇÁÒè¦ù8ì¼<¦¬â’këNíñøêÛèítvý(îcÏiOóråÛK‡K NñóßÍþ+ú4Þ,¥¢¼®•%¢NoŸµPTM£Üa‚ÄJAO‡hXçäÍ}ÚMí‰:ûWê^ìÙÔE¾ƒIä}‡•Š´VØ®¸]*¹GÚv~Hå·]Ñ×Ò+ê˦iÅíxô &Þ«8]^àìj’È*ÖÑm\8•6K˜¹Xe(IËm!˜Uƒ=‰¸€seùÆŠuv’«ÞŒpm,Š8‰A V]¡ú–Q,ýuò]ÒúEœPòDm+#R{bRà¡(¢b#'qèw¢#1IT-.ƒÅRHå ÿˆÜVA9²2‹kqä «Nr„ëbó2§OØX˜”¦j ÊL’¾P¬¨C0aI ¢ým J„;´¤Ø'Sóþ!¥zê oñFü(*ºZ¶Ðé ¨“åë sb"1¥d2x Óªi+VùÁ•xLf£VR’.tƒ(à*–FšU}Eˆ1¾&ð”Ä©BGˆkÄ–JÆÒí%¥5‹ç[8Gþ0m(qeÄ£[Þjšr8VÙÖ³öhLâ#¶Ñ4ðJ&•ϸ‚n£aÒðÔdFuž ª–,V,;˜›#!*µ2ÈÕBÐÝPÁ' iõ¢f–ÔOÎhÚE«±2åZFUt¼(ë `{“Æe ýŽ·ŒU’†Nb&gJÍ„dá€~LÖúáSK„¦ðk9 P'VÓ„%w±Ú+oÑÕtZÓê¼RCî «.Qô)NmAò¯ŽÆÙ6PØ·„¢²\˜_‰-JI¥+pÞ<†ÿ‹Êçèî«Ý"×°£œJ]µ[çgÂ¥Œà¯Õï5Wí‚jüHym),¬Üö1é»WÃÒyhãõÿ'ŒWLJ­Ì¿YYÎJ³G¤í»4,3‰×ïÒ¹ô—Àɘw2Ñ~æ/`³™}L)#€:-°>QWºÙ㨱ڪýáwˆÜ Evžâd+0=#Ä7}ïô·)Ù±i*8£ÚØ£SÄj›  ¢çÄwGø×õš)Q›:·¢­–¯²W² øvQ”ÕZ»‰¶éŽ7æ¿5Z–ø>‡¡ûgmðÏRò ¶^a7°¾‘໦ÿeá…òr. 7€š”– nÑÇê5nÞÈÊåC‹œ6Lü’ÊQ¨"ãgÜf´âœ˜YQQ½ï;• ÓSȇ;„Vï‰B×€-jÉw§ÒŸÃKbå 7LÎ]ÔéÌd›Uüão·’çHœÊÿÚlëÕ&ÔA • zG‡Sm®iÝCë¿¥jÎpmaî-KRÙÎëä¸`·Ùl†EÍô„x#—“4O4BHï ÖZØ—ŒÐ¤´³Ú:½š+’¬mÅ•/¨)·/Á³VœQæÛ«jLU¨ÚàôŽ™V™Ï¶©ÎÙJºº÷†aQ àX­TÅ•s Æœƒrêóám«Ä!êôæ) 5YŽrÈI¼3LNÅŽ)¶ÈFýaú ]ˆó *xç¾ðÙ#44I#éE¼“i2ê÷„“¥ü¢<:Ã蹚A´'é’Ê%Ò€¥¢q@¦ÈÓ·B‰}¡˜ @yåM‰ÔCPYd²Fbd°èëáKØvR¢CcX «¢!)ZH¹0´«­Ú«i¿Ò«Àì \©Ý7ÌOí•YkEX…\+~±%Q.! ÖEU¤KÂI ´®"JH9¾‘§˜RKu¬OôÁã,䱯ClúF=0e0‹\A ЯXŦ1¼”>6Å u•‚¡~‘}ãG8à©1Uzî+] Ð©ÍàS›¨q´ Öû#šª[lßKùDpJ$o}3$¤^ÆUà’–Aµ4.T+–¥[Ö®EÙ¼Bâ^å¼¢Gœ;ÚÈ_ ÊÇ‚ÁУDã^KsPÌÒÒ >/”ºð=*„¼€ }## . Ê”“”áe^æ7h8"¦qm “qÖ*í]™œäqB¤^ñ¬ØÀT#™Ë Êq,´øpvÐÂZͲ­Jíšm{Ó®‡œ!Ä15:¢/¥ïøÆ™<à¸ÿêYc¦X´ŒDÄÓiÌåôïÔlÚjV0UêwKo}0Ī'X±…tÖºEU³”ßl''Ckw5ïÄdú5ôÅv JÊ"ͨÖ#ž0'‰}ñ–žI*Å^ç_–¡í¶þ7 y©:’p¤˜ùÓåÚ&–QíŸÕA“æxSOÄ ÌZA'Ê<ž{•ÚIqLîëœ$J¢p¶WœÍ4„åÚÂÔî—êþæcúÃIÅÔa‘ MƄ‹MeÞÀNÇXņqÌ¼Ø ZÓoX º›˜N´©Z¤š‚”“q UÑ8¾';q÷˾î7—®½ãÑþ1¯–šåÊu S[hän â…àI§[x.m®Ñô®Ï¤«r¥JHóE¶i,i3Ÿ¸ÍíámhçH"׎§oøq–p7Fó&½œç]Åobj’ŒÂ”S{Çu¤Ñ­ p‘5¨z§Øz,… ^ÃH©ÖÚÛ.´­ Зmï»9naÉÁdµ«QÄõÜ6‡š>‚b Vã#¡Ñþá ‘Ã5Ö1-2“•j½!»·ET2tiS?I=„x/G”(lf°$Ú>Xþ¡oÓÔØÖIj'õñ?D¸m‡QM¦4€ <*Ôço#“Ü®jmÉJBF±8S’…¾Èó™B Q‹ ´¹A«l¯¸RBX :]¯Hã$ORÓ‰AãüH†_]•Ö=ge¢J(ó­á¥&#Mâ´¬ëŽÆº8÷`¯Œ£ñ aØéÈ;Z¶)æ¨Øêaêôý‘”€5 œIº­ÎU`ÈÈ 7Uȃ¬Á"-‹õ'9pEÄN3ÀHö/Ô©öº“¤O‘“èÕ%.Tå”/ÈÔC”Úo,¤Ö Ï(X¨a-µcm+íoÇêA»ƒéx$=›ÎÕBïsAä ~ Voµ¡ªÖM%’õ0:ê« Òê<Òö€ÉÇ ëY’ai!¸#p™P| -`bhqa7Y1(Ç! n=˜-bj’\ˆOÖ}Õ~5RI3Ôc Þ¥b´æÓÁ¹@JSbäi‰¦noˆIh_˜>±'¦&ÞÄô„œÎÚ1iŒS+ C ‰È¥\žñ`¢sz*Oåésš$Uݳ3BR¥ÁÊ,b3 …Úä¢å\°Z ÓH¢És‘{@‰J³k³ê•4¸‚•‚HÒ ZÀE*³†Ö' JM‡”€9´ÁËT„âíìNе¬Ünh¾xm2ÓR×"ÊT!(«r:}¦ÒH+PÒ£ƒÁÕg™©’LE¶ ¤Å¬Q:Šj˘ÂóMu¦,ÌTËñ¤Ñ%gÒ >ëÉËr jAʾ%…ƒ)3FrD Ý“8®’S  ¬•Œòké3.!6 ÌXfYO<‘p¨Ìšì‘î)#}{Æ%“8²,ä¢Ð“”ßÊ:“ ¢UÇhï_1tçÿ%øçêàðv;ú´ÒYpç=ÒÈuzí©ž7ÿ‰N™¾[Û7Èêb» Õ¸Ð Š²¯¦ÑÉÓ³IË ¾Z´ÑIq«¥Ï©ÂOxï¶Ÿ+bŠmf·ƒ5`ÿj–‘âDÊOMLXk¾$ºE^›yÂÃe½¬Ù²¦swTrÖü>Üú-(Üko-ño\ÆRª÷U©ACMbëgø½ªiàÖ«p­ÅáœãÇnÎâyËÛ@#è‹i%£‚LóýÖï$ž+ã^ ©a¹·=ñ.d¹ÜGªémL[K2¿¤¢ïYZõ‡-™u¼ Ò3K&û\ª·ê¯)åk qÀAÜë Μ Ð¹¦;aŒÓ²Y—r#ŸÕ5 Ãh›“°<ã4üJÑx æôŠ­|%m/gTø#ôkØæ³y)nY6˜~oF,lSQ.GlaŠØ÷Ííp#Ëë\fPjôü‚oâÖå‘s½£¦ÛhV<vÓÀ^¯ñ!•‘§œzßñ÷¨Y+5¨ÕÑRñˆœÔ©!Hì´?•o';®Ýy"‘ƘO•©Gxì´;g‰`ãµÚ§2·¯âÎKвÈ1kV%¤,Ô±qQÑwùõh…äò 8—;š˜jwqy3Ê}WqšÀÌQ¥öÊÓ{ìayQèŒòQk\ÂÒfëd©~fŠX’™¾2´¯:bjfpH²” gÒ6^‰‰œÄ嵄IG"²d:œésTŸHnŠÞäò ™Ÿðjv×Ö®³JÌÕú^Cˆ9u<îèEá¸@f0 Pª9lU®+b7à?'SÊ "áØP¬¬ò]#Ö#ã6ç“tÌèmŸ‚ÐxVbžH%É Wô‡#I? ¯‹à «[CÓ›æ.TqŸ, CHj6°$÷¹ ¿4CFIÞÈ®qX!Ö úL‘óƒ&ø¬àW…Ãå®ñŸ ÉžrJë ž˜JBœTµ‚ŠÉŒô:r¦BNLÞp&ĤòT±nX‡µ… 1ƒ7%âö‚nv¶°ýI’}p¤Êñ ö UO!Y¶[pim`Q–²ja¹¤° N6–ÌàЙĩ´õYa¥?áªréòÀ‹í «2Ç‚täË™4'X¬Á t ~®ä¡ñ¬AÞ€91/âÇš7$„ô‰+SìhÎ6t<´øoÖ6¤˜G÷âæJèüá{pN6ù [T%ž )U¯Þm¢Jy-L0Ë.2œ®$ÞÚDã"XLr¤SТ›(œHÖPÍO¦6@¹4òI`×[™nM¼¡@yÀl»‚§N¦Å‰Š²]t¥ SväàËXmªHÁêOÚ2ÅIP¼O«ýRÃ+u:¦í  Ĭʈ½½cù× {ÁÒl:É싸½M—RY£Ê%¶ÆXG­è[·¢‰ã13%Hqdç¾Å¡ÂX!¸h¹ÍO¿NZŒƒÊN¿ÅÝ[|nû‘É[¤àð‰xÕ±u¦Ñ2° ‡X†£l¢µöönTY”ÎÎà~rb˜ÊªgR€Þ£Ûª«ð'5b]²ÇÄ\;aúaR›I>±C~„lïÙÆÙœ;•n2R„ƒck £ ÐZÛÒÃ,â‰)$5<âÝ "-­›ÁÒQ§RC$Œˆg(ÜEDíqez4Ñ2Ÿ„zm9E“~ÛÀ-Ö( µíɱòK4ºjF›kí÷y-g_¡ÐªAlÎó `å9ÇÎu¯ Ésdýö(—˜v(V/áóÏšV1kaƒ¸p­9ÃJA7¹Håû…V¢ÅˆØ‚1’É?8è6­g¢¾Úù¢¸ÆLK­@÷ë“‚ÉÈîšg’´ÅwÌVIÞ=[N“8­\J·Ïf6‡#ú*-‚eI‹+e.(8«žðîšœ•¶V.š zç11c 0U“Ʀ>÷0&Ñ“‚H*«i*ˆU;õ„,]†QÀVX¥û[¨µá „ãÑóÔñøEú˜NlÔd)¦~öãÒ ‰œ´±$fë3‰#T‹ ïÏbÓfeMúC”Ç(Fqìƒ;Q³dtVøÀ•:Ð"×Ö®´MU3 ×¼E ñ„¬ß9Ñ®·‚¡˜Àd¥»f…Í»BÖ2Ià/$ùq@ ÞЫY#)à;KNqkßÊÈžIsLI×H<$cž*䩹 Þ®y˜¥[û°Hßô‹ÞPT&Ö§¼jÃðHZªºW|Ęr;Ï)k$ éÒ£‚H“I_ch"3‰bav‹ó`®æçHæfSY,— £óÚÝ;Bs‘‡ªøx{¹°×¼d%Øb«â<Ÿ¹´´«Î­‹ÌA£â,émÃkAìy Ô©ñ7”Üê!VÆ22É,%!+Aà›Y ReôÒl/tÉÅ”æjW+©Ås°3diúsFÇO(ZËA±z¹JFBo{ô€JÑa6£„AâH1ªQ â@‡ü±r’/åZÌ“P1§R—M™½·‚-Bf8XZ¬äºRsnð¼­d,JU Èæ8tˆ+D²2Ò¸ÜÜ®\ïXŽ„Ã¶S}›ŒœV<9ƤO Yáõˆj·é×e†ƒG-C$UñC•”ÚQÀIÛXáwo”ƘôwûOÇåkínj]w5½c‚»åŽÉtwo¨.ÉncTRÑ•J±ë†Á»+^kzÙ]QÉsˆ ?.«8œÇÎ:ÍZw,£˜ÑéürÃ)n6qbZ–ËŠS€e¾ Ç(ö9_bÁè»NµVrO8ôÔýUh•w5xô-£ã²ª´ÚÜ78¿È˜1ŸÚÊ*÷Ö/¿áþ#Ÿ®þl±ø9\E:¬Û®›‹ïÚ9ÍÖüJHí^ q:_Ü X¸¬U×ÔUÝV"ZU¾'3öVP»éÞ.«µ8•úŽCö»ÅÍOSæJ ’oåz G‘k  áª%š²Ô£¡Y1Óºã80Q°Uµ”— üãŸÖPð]i —Uc’›ÕÔË%öž)‘«x½ ´ •m¤M£qm¾(ÃzlÖ1Çr‚I$ 8 6ó†7¡·é›“ O¼Ÿ¬Ç1Úm*P8’„|wómbÔ\ð!}˜GbPåÃR µÆ‘æ¯î9ÍL¹HƧ.ÙÏÚÒË‹2(¬¸H¥e=KãZÅTkªre\U-NgÔk@ìÚ˜ÞpZèJ(¥xƒ‹Ûi+£©®¯ÉÎJXe)‹ñHuÕªñqE ÉdK­ç^ªüá¹Q’UÀ(ªÈ˱;ˆ‹•dÙ)줨ýa;¢c€ÃHªØ ÄiöÖÑ >ÕI6&÷„e”Dõ¢‡×snð²m>}Ðßà‰§“8‘_¨5&‚mœAóµ €u‹Jc„ƒëUrÛ„E­è‡åg9#5áÚãƒjS6V«Üí‹ÀhÃÊlÇ-@§é±äÛèb§M¤g Rr+Ô¹€-moÖœ€Jhd¥<7…ùs%NO! ÝDkùCfã!WÏ%9Š-oH±£#+ÌS]äç'ëzTÉNB åaS3 ¿RbÚªÍ;ÙLʬs\ÁÛQ%èø-S¾%¤‘ Ý« ÛNà£DÚûo ~°#§!îÐò’§S±ŠÙO'7Œ—FB$¥FP´–I(« $-Ò%Zì›X)Î*N™¥¯!‹*ãÐ¥[‰RjÞÚëqŽ4 ðËINºÂ–Dc->¢^pfúÀ%"p°£éæ'=µ¼#o°é`c›¨¤02IÄŽr ™¬‚¯´%b Ø*r¢f\Ê“åqÊS$HÊÙ¬Ê ï ÙO&º’›Ê¨E‡ˆL´ëöÒŠÁ’ ISBSfT;ëi0IdÕ[qùV¾îö¤N1AÈ«WijŒ•n<áúê‹@ù —¸‡4ãଠÚ9 ÿM)>Ž«b¶(è××6ãF`ß^±ã[ÝrÁì[MÑO¤Xõ –_‘*f9*£Æ]msv.Šxìáy7VË–P¹ûÇ¥üONåb*·}2º ¡µåÊÐûÊIó1íthT ²y½ú?Þ ßŒœq^!¥º–ÜÍœox±Ñí‘S] Eº—G;Ôª®½8¥8¢no{Çm]„)5ÚÙgØ[ ÖVôÂR ÞÖQÁÒks$\X%é„6Ú’…_¦‘ÆnsÙÖÕ¨N%ÅÃÜ{R¡­+,rÖÔ¡/¤STþ’Ó”âLÝbW* ó´qE,VdSþДº…J’õ’²T“Ò-6íæ›&’:­”ä|E$¹J‚ÚxxÖ=Kd,‚‘féÁ²‹Z]<€¢l-E ÁŠçÁ[Ç‹—M£¯œW=¹H~cF£ˆf*Ï„©fÄ÷ƒ-$k‹– Í5îÙ`ìÿa® µRrRmæó©D*äG†PwÙS\ ™ooíG'êWøxŠM-•!ðŽžQò®ç©z›rÊ-]œQo²Ÿw` ­Q†fQÉòdœÐ±*ÕqÁYñF¼Ý:QFãc–Écˆ®¢9GŒüMa¥:±}u¼{ïÅl“hà÷œB=±ÄŽ*¶fJ¹$éxö}¿IæŠ<çQ«ã"ºÄÆ}ìÙ¼âö4(‚…¹7R«,fQI`r%«¡IH$ZqèeHžÎ ²”5„§R`å0´t¥ ƒ8«ºµ€Rdùzå’ V¦+gOdb§×F]Á¼%:°‘ºj©™›ÞѸT0;ÕÀTEô‹ é tÕVým¨ñ…œG?™ÂÖ,ôưK䬿†³ƒ ’î ‘ <v`‰ÉÞçÖ'‘;.Á:TQP &߬/%Ы±ŒTÊ·, v…¤¹Œ4êðHª×ü Ms6NVŠÒEÁ¼1N2֦ˈ=‹*¬Hv¹äEÄÔô¬¢TI¿¤Ziµ k"œÌ¦Y‹6ŸÊ.!iµ“`Wjó RRl|¡MN©Äbºò\xc…E™tçl\ùEš¼F ª1<«†ö *ü„i! ¤H:í {9KVûLª¶†Fr6úÄxƒ”ðXª¼Û2ÊÈuµ·ƒWÈNeKŒêÂa*Ô^-*@9.Í38+&ºP§ÖŒ·ï YÑdqC©’mÐÚ’Ê ÄaÕ\¢÷Šû–$œ¯€ØË¼/(dÄ™­©ç›ï ʰ6vJ¦>]p\o_è VCÊ™ KØEk]†Bõ~°ÌIÚ®¦Ù9HO¯‡æŠÖ‹:ôïÒyÊVζPƒ:<`ú¥].·b«ÆãKFsÀ»UH}~=”a‡Cgo;2Át4‡R%²ƒx¬×ÇycÚ6ÝÇ °ÌËM ¨ß´x·È§\gÓ=kc®Èþ §O-S¾ñV6?vfÞŽæ‹%œý¢ðú*îóTIÖÚǤ|[Rá$JérGqFCìÚƒœ‚A¤{¶Ño’(æu ®ªî:’²}zÇO¦Ê›¬rˆrŠŸœCM\©fÚt‹8®(ã·œ|ð€Â§Êqö³c¨Žu»’Âbš}G“¥pß³ËMÈ‹4µöŽS_&[ÇupFS>û*d#&ÞPŒtí.LÛ¢³¤ZüáÚ¬%o7ª¶Žä»´t½dé¶Ý…8ÃÀ hN„³øOHãö¯çUìõ—Š?7}¢0IÂøéÖòeÌOMõ§~3¯ý^‘2Wéy1º+ÏÈmGÎÑ}+áÛ-$šôfŒ35Ì¿-WQ§¬„—°UèdÙ>—&©iæÃéRNa{è`YVø‡O*Ùúqþ2Hz‘$¤e± õ“ÿ©vbé&?¬m#ôˆ”ô·InÉÂ#çÆÎKr³°ÝQ®R¤N"4<ˆx×"ŠÂùºXox±ÓQ+º”Ò9¯Žüfe'š66ñmÎɳÙ.Ò+uz¸AvÎ ã«:Ü‹¥W¾Çhú_âuýLòOîªÉá|å^b¥8\™Y77P¢*IÂ+<–ä™"éâ¾g1šíÀI‰Û*ÂúérÈ'*úЛ¬`A£i1¹åó[é Mv TÉ¢¦F¤é÷‹'¢d[Cë c°ëÑòkFYÍŒ•¹>Þ3 eO]¢*œËçs”8r¸tG™ f­Ë¨Áëd%<€ê¼Õ•{C±ìßÚTøJîH÷‚8díÁ¹ªšVï ÈZr$K­Oáyä’_-[ü L^RÀI‰âÖ·6V`Ÿ-[²ô:Æ5ƒJD±X N§X”Fk™¡U.¤åØCKØìg‘v}k˜t‹‚ ;TÒŠÉ&ƒƒ NuEÁ‚ݯâ7R/Npå¹FÛ+lm{Ú+5Ÿ(Ík²×¦áäP"¾WF$Ùœ–Ùº’-I' œìÆPH(MÀò‹ˆÌâ®–YôÍ=É4›_ùC`$ò%q²eØR«ªß8r¤ÊÉù×&Ò¾iÜõ‡`ÌŠï:íx$v°8á9P–Â×m4„ì ’}r{P`)tH+†çA`œúÚ+µr7ÏTŠÜ A;@M>iòËp’³§ëÝn)0¤ƒá—¬:uë–O&ëFú…X%“cÒÖÆ %â^Rµ‹m-I°H_ ×]ºÉ×Xè+Ó¬O#u"xÌc¡Î´2Ða¹d¬(ëàˆ8dS™J&AÄü\%V$8p­ûWi#©ì#“ùMÿ¥§£©øî…jnìë~a–¾ÌB–¤ÞÝö—÷ÝÆÇgl÷m¯E¯F¾)¤Ri«[.¦à/Ú_ž}–Ž¨ÅœgǾ*¸ó.¸‰÷Žìë)à¡ÖêUHå!â!P›qHXUÌ{Õ¥ñ$ŽKQ­æÄY—wÖ::ãÙYn§Êzg±c)Xçc¾Îæµ\ÎíözÃL³,Æd¤hq:ÍC¤tîDIR˜fžÚ+±È—( Uj#Uzªm"÷ÖÑ[¹j–š–Èè©vÚ“/ïgÜž] Z4 #æ—nòºæ²{^Á£TÖ˜ßÆ£ü¼ñKc1I¶›Gµî-jrvô,#òßÛ3‚“xå –dýã–Ñ>qõÁ7Õ.…<Â<0öL÷Ú{&aˆu¶ïóW'†9(Å/C5{Øé²üÖeì@ÓüTéþm9<6-Êëˆ>È“ÎòæhòêÎ…X€7Ž£mù\\fú-`ã³=‚¸a;†)RmÎ!AIà£Ã?¨ÛÅ:ˈž¶Õƒô[‡,©ºsiUì>Qá纼0Íj_˜Ñ 4Ê͹-L|¦æÀÚÑÓí.i0Ú–àοilw;O©=. òcè¿…íuê`›G›o»œêmdç³ ©Ì­ÇîT£Ö=§OÐ7ÔY-Eƒ&)±áëårp)žËËò •úAÍ¥€Å2_HQc5ä#ö[ˆ#­ÿ(1È#{…§]ÿH äˆBMj—9I„-€^879SKJ Ÿ(YVg<¦*AV²…ÏX$+lÚy1r¹îm•ja…¦ÈeƒRq&dèuƒÂ•€dy©•;rU…K&)ä78¦Éï¤5poËTÌç1Ë úÁ0 }’iä›fÚ`' 䃇/O¬)(æiÜ‚ð7Y23Dõ¼AÀŽOQ>B…µˆÉ‚jg”½/¼E{ kWyG>·Æcðöl–¥s_ë¬mÜâ; OpÒTâ SÚ+­Ôócõ"óÁTDÙÃh õÁKÌ$Øÿ ÿ’]ô¹Æ³xgÁVpÉ-´]¬"W¯·]ÜÊÛõQEÃH’÷D ×g5©³ÈÉ3i(!ÿS Ó^@Æ¢®ã-.ZzAÐJu.ô\ ÆäóYùçíiÃÆ “2JI1îßÜidà>K¤vÀåéÊX—̸{¦JG•N` ˜KK¹‡©@æú"Ê ÎMxatN+éA¤–Ùë²CÕT𗡇HÓ]àcŠ&&†ô˜UjR)d$cR–H4,VÜä®É6ý£q†@·‚+]ɽ ‹!Ë™š €z÷‡aiØa,éZ¼úA¼h<(òü6Ö ‰E'YS©7ÖÚÁª2K µ2yÛ•‹&E`#( R/ùBN84“YIBÓŽE&‚Ì,-¿XUÀW,ÅIñ9ΆÀ@dŒ}’dÜ+PÚþp&·€Õ1œÇ¡€·Ú¤0Ò)ÁÅF°–aŽÕ2ÉÁ|¹$$( UÛ,Pì¶ðmI Êzo «°7ÒRh-½MÁ‰+r,ëÓ‰a‚¬ÃA ×"x+î­„u Q*~]µ¤éx!¬ç0Ûs-,¶°Ío8)LC†VÕEc.„év¶yL)Ï:¦öê`?©c.¼ª´5J(€ h]’qXë ,¹¤3_°s&áÉW)F ˜ªXBåF“÷Y`›G;wax›jH[Œȼ/d УPB¤žSŽo þ ¶A~ySBÃ[éé…IK'ÒT6ð+Mí¯¤6`’X JáâÓ¤XÙ5,KEµ„I³9 ø¦³ÉiH ÖÚk T²g!%Ê׺ςµ^æŒLsÀïHÆ>ï*’Ú²:B½oö?£Õº½Ÿãì“%,¬Û½ãœÔ|WO¨ú°_Ñò Mg±ÔÖ-œ =u\Ø›Ä5[-m<¢‚é7­N¶çÇÜ9ÃÅÏÈ£2£ë&¯rp}‘¤ÓþÇ&Çœç¬s[ðúo›ã)²·wŠ…@JÄ‚B€G˜ŽâÍKš<þo Ω€Ð‰bTqåZ­C‹.4¢}ê@ ¿CÝ,¬4©N%åÃ\B¹æšAQ½Ä"¯âÎ7p¥FGY{=áÔM̰§@ÒÑã2×¹¬¿Æ´Êó:ÛKµ)&œ¶ÐZÊçbpäÖD(bê(ò‚Ø9Þj„uá:jòË7 Ks@¸úÅ}ˆµPI LÉ%” ®ai<†„ 'J Ú¡’SŽºìú.²{D”M`¯1 O2ÔG¦Ýp›ìk +󃪰-9œ/¹}Ät ŽB4÷‚Ô6Ôõá“k!†Ð›¦Æ7†QW)»#x<: «¥¯¼ñÛ¼¬˜ë$!6µ„/8àNh’ÓÙ~(YÇ"³D–ç‚@±0¼¢*âf‰üÊÐïÞâ ¢Z˜B²F̪ÛBò6ž´gXó…¤òƒÕ1’—4Sa [Ú¤5aÙÒ—Rއ¬Vܺ-)³%‰†q—Br‘n°‡þct®;m™q™z8’è*· ,UÄ”)¥dXÛ¼7\°BRÉ ¾™‰q¨¹ÞñÉÈú7֊ГÊè#~0lH¯M-Ò¤¸:Äpm{ªÔ$N¨’›¨ëë”°5[5ÉaÓ$¬ t€9Œ€±u ´Ú€wí Ti¼ôÍ-J›9Æ—¼ZÖ OS H0 €´'ªyÄv¢Ñ\ž# ðÅT«d¦ò«Ñ'&@H ¶ðJë`¸Î+–%â”õ‹Já€>,©t{¸ 7…õâ5Ñ) ø’.tÚoD3öRCV@Ñ8È·‰%Ì»j- éRF}•†0SåÓkÃôĽM£½P¨¦à‘ÔÁåa¸Å¶5ý‚ì³@Ø›t¼žK «èSBȰ“­áäÔºC 0¹œ«6§ÒuW^±Áü»V«GWñ½?•EðãH•BJFÂΗáåi/K$(üC¼xFëB©ôz…O’&ªHe>5óЇ"jg´úò]U’¡õ‰E`• Ò&Í$ƒ¬Ïnf©‰Âo¹ÆY'ò#D†mBŒ2IÒL”¯·2Ùñ<àr¯ ´Ž,ŽæÐí!Ío¡ØÃU†5´Žö¸šd‰ Jv=cÙ>Ü.IÆü••6~xq‹¦EÉ„2u$íXíyYBgˆjþ›Z9ïÕ¨N(©D‹÷ŽÎºø•²2¢:y‰·N±«rn2Ái`jªÔâAº¢ºõ„YÒðËÃR\œÉš÷1ÎênâËHY„[, Η pSÔ´<b „K(%?”F–ÈÉ”Ç0Nnam6´[Q©äÄ,X(œdôɥ%ÀmÞÑyKä…ÀZx•XkfEä9I{:…õòH“ˆÕJxeNc¨…¦0è0Ìð½Ä%Qì’ÌÁ^æ4†Mâå7=bq0×0ß57H±‰FhRd'Úqµã%$%8ä†üÊ“{u5I£éiÛM­”A¥’s¡Þ@ÚÀJFkma)×Ù Ý:nèÞÐ…Á„´ÏI 1Ä”d|¬De®B­¤Kô܆a<eøˆ„Œ+¦ð9hr9 š"Ö1’V‚[p}b5h‡<¢­_ ªºõ‡jÒà—ì| ëo¶’T áÈOϱþˆ2¢Éµ¡ÈLƒ†BoI¦e£p!˜¼•XÖ¨-¾Ú“”fÇ$pWX¦”ª{äaÞ*,¯”Åù¹`èî`qF5ȼ2ª”ÝÂ<7úÃÕ ¸äzÂ8@J2 “kyD¬ŽLQÀR­(™vTú@ßdܲW8Ée!V†*ˆ9’ª™9EeJ0Ô£‚ y¥ìüâVíìÒ±,|2²†Ñ¦–„%anYC¹“|±iäõô–•a}Áˆ·ƒyÈ¿9@Tʈ ¼n2„pÎ%Û©6Ívd/¡â‚C2âèÔÀ%2kÑ›˜59®¤é¾¢å);‘ÃiGáÞPŽ®Ÿ"ÑÞéá献Tv;E}{o[[¹sC•"i-'9:÷¼\QB‚)î¿›&;?ÎN† 6*˜2 þAr@ªBÕ^ª”ß18Û­³À+íÄ)vÌ4ºðAË–çÒ´\;ÂwÅ9Rã“bÑNœH ß~ÑÉïÚh²éX.Hs/ÓŽBø²òl«¡ÙEÝ7¼Jšùȃ\QZcn!ý²3ÚÞqØè6Ç|z+-Ôª_`Œ/ÇVÐùJõ0î«ãÓ¥z!§×Æ_¦/âóQÕw©ï5í“OÐì­R8«ÚÇ&u™’ÊÁ$±ì_ÐOÌ›Gò=JmŸüTiÙÙ—Õrs˜ú—kýºR<[Q7+[+ šA $ˆ¼¹š7S$ Nh"R‘("Üàöryô¸à:="‹qÔ(!ÚÖN¢án Ý;Z8Ý^¥M–´Ã¢á¥PÓ =;E\®K$LC‡’ã ¸ÖÑq¿E=Äz̉Þâ-t—ö)lrs·0Ÿ5N*Û^:½ ÝÊfi*—~Ö:"Û–MÆ:T¹J…ǧ”BK$ÚÀÅNB­¥ûB³iL/&ŽÀÜéòRK4sØÀ¹`70„´±t€zvŒó$I<„åi'(;ô€ÊäE,›¿ËÁÔÈÞ"¯@-§ Šæû’¤ i Bå‘)ÕB}•È:Rà#Xv¹ršÁ²VwAn‘Ö #)?p-¬%8àÀÅ6 HÐÂ6@ƒy %jpâàÄð©©e&ÞZ×a#, •©Ç%”¢ ‹*á”MË Y¼^´'*ÔGœ5 C×v¿UÅŠZÎUCQÐ’Z¥“´°†;T§.îkG457‚âÀØõ©ä$-bæ§´d$9²ÁRT 5€’yÔq"s(fÙ‚ 915M3¹‚µ>P²É¥’©¹²Ø€G°‘CŽà PI)‹% QÈ×/FL£ ÄFLDZ#IKj¹€K¢ ²¨ÇSiFp“óƒWfÙÑSVääú‚þ ð ŽTzpPO)#hÜLzôgÊn,xâED?þ_R›¸¼  {'ER•I…§Ñ!J^ ¼´juÛx!ˆ1¢›…‘,àºFÐ(¼“ ûŠdÆLÂO#-›~°®,Ü$’T*-Ë ’GÖ ©šl…%^i/æR­cŒ2˜UŒjÚˆB,#n æ‰+â „¸/nð7@ZÇ[X ,F*Ér«|B Z…ô†#Zd]¹£“3ªîÙ^rÈÅ#‹‹Ì$%QO}MvjL3H©­² ×Ê>^™ª¦êyAx‡1$ÑQõ¼UÏb†¥ö‹Úw¹Ò½“0ÿ&'ŸBp€ºÇ9»|n¯GS´ï3¿Û:„xíÒh3 ‘±Þ6åÔôdt©ñšZ|.€:ëTí^OÁa;ø‘Ûö†—~\¤ŽSG¿Ë>É•ž6¾ü™qGCÖ9É|J—£¢†þðR¼XÅWùå^b;Ïl°ÒýIÖó»»ú(¼cF÷¤¨„(ô-5¸é„ÚöWµ<,CªðÛ]bÚ­@¬Ñí/ sf›_]bVjðJ¼¸SHL’´rúû]ˆ°¦×’”¶‘ÉêsÆ"Ì’}!”á9dn(…VW0)"Ö·XÔHÍ`¬ø,‚…ækÅ–Y”ePy€}#¬ÐäR¬~’™‡M†¤ÅÚ˜8Ï$¹|:¤€M„BVà”‚ôê’d›oÓ¿"üƒRt{¶.!#fr$µLÊv7JÆIÌ'N¥+ û@\Û©ä`’¦}ØÎÐ ÍAW*<#oÎäfO¢ó )!`k FƘ‘èCÆtt«1QÚ{:+ì¬MZŒ»„ âÅ>BoÑ:˜þexŒ-lHzi€©@ôŠùú7dbo˜¡9¼(`¡Oº )áƒk~ŒT£ýÞ,¨» ‘Y±5C7,ÅöšNLÒ] “”÷ƒä¨º…YF¡ ³©(Ø•If7é¬pî¢ÓÊ:aŽ!;IR«zÁ#Y%<–=Œ¢r@%N ÛkÃ\pJ &38Ñ/¤”¯_] 3 àEM`Ï, ÞúB³Y+24á*0ZÂÈ1X"–GªTd £mvƒ†Š%OO%¦í§hú$â"cŠê%™PJµ´/)䄊T}ýÕ ß­ jBÒŽDúÄ /•6 :¤mWÐÅ€©~ðBŸö¿X"d#Slµpî¥$Ú&–FUxÃHK{m”2d¢j8uë¥#x¯²$¥Ó’‚ºi 8‘O$é–н¢I`’˜"¥Wé61,‘”²+Wñ&R«*Æ"©!Ì@ÄØµÄ’6Ã0«¼‚ÜÖ:TºMÖoµ¡¿f2ñÅ‘J= s/LÑ‹˜UVºÆ”pO Ôõié‚A*ÄdñV&X!$ÜÁªÂ2U" 5—ËàºIÖ#sÉ^ü+,\É›Q· |‰9.[@ ê"µû3¯'•®âÐXõ2J9ˆ›=[r‡QK¨€°Æ§Gú˜è/ý4»hþÐeÈ¢îZÉïQº|ZË¥Œ§·oy¸í†¦R¶Øt©[ u‹ §àršËD7/“B“^ö…œª² ލæïþU')gɹ, ŸçYŠò˜Z²žñg£Û«ÓtQjµïRòe70—™71e@‹)GTÃàßCÒd‡ µÞ¢¡,JF¶ë®ö™«)L®± ÉZ’¦ïò‹*õ˜t`DÄÜ3-)JB>V‡iÖˆÙSdð©óG:,a™_ÌbÐû‚æ*JW¡LW_õ!Úe†[3&[(*6Ò(¯©ä±„Ö "‹Zq° ÿ8¯C\Ѻ±ˆ™jUD,^Ñ(Rr*ž ⤥µøÆÑmE"öXQ8ö¹ï¯©)$ƒ§¬tºXa 9äH‘ ÇÊÄr2IRR´Û.£ÊÆùei­ »AÉ„[£ÝX€»P&ÍÉå^£HÇ#‚T–Æ—×õ1®CuÌ:ËyZ¸€É–Uöjyv,b (äPWQ Åe‹Ít'â§ÆE\Å®`«¹v!Ï6U6w½âÞt‰´©lÊIïÞwdRéL„¨^±t!Šœ†mzEm‘5$O}¤)¿H 1G^®É‡M‚D9\€'†+Ôðç<Ÿ ïTM&5'0B¼ÅCÚ/¨Ô$†cYi±†, @µ£šo%®IÔ¤ßHÅ!š¡“É9§iîܨ„Þ1Y‘êë Ó± ÝZSÎ"ÞM[Ðý‚¥>âàb8ã‚×ò)—a:F`4•†¥ü&'ÐB®%¯¦H¹um ßÐ^%YŒ±*¦T¬ªß}aìŒà!ÍU¿Ô‘x$bB5d4þu£¡Ö uá!ô¡I`ƒÅ™UI²Î¡ÕÃl'*…ö‚ÂA¼c%2²—Û p  '×gÛCºó…­‡E|É T§ˆ„%FÙºˆ,øuŒkX½ZoÞ«âQY7Å Õ5EJºU¤!|BíG šRަ$Þ *Šóᥦ”¤…ZûAù‰—OqkÊnà˜U!–Ÿ‡J› Ù€Š!áþR µúÀ¼¹'ÄÇü°fu&1Ý‚1‹‘‚p¦GÀBt¿h½²~§ PÕ/–Ài×[“^!ÎN•Hé '“<@ŒO,RÙ µ¼ö ÃEe‹d”à]ï~ño¦»0s¬ªñ¥Vn’ÚÒ”FÑm^†½D½¯Y:ÿ%\=ö±\¼ÁQ¹¾ñq tˤ'ª¶wþK›†ÔÇ%ØAP°´S^£$¸dµ¨da:‘3„ƒP ³8 †c¬pÀÜÁCÈ´H·HNhz ¡†.ª² ü HŸožáâgPTP>‘žlbv#á9^l­“ÿldu|@ʤÊßðãÜQåG”9^¼¨‘U%ÒMƱa sûI”Üj©„¸±¿HÉФ7``•‗nåÁõ…%¡®l…Yã)UÀt“ë¯@FV±:¿œ©Ü©DX°®•rbÓ²«©>U©†”øK!š[dëhZwä3SèÊ7ëNãNAYQ; Ȱ–¹"„ÙBÐ N Å73 å‚)R>eŽB®4´oÝr±8“¡‚q,©¸Õ;0” ”‘¤0ò õz°m&Ç^íuörèLÄu»•uëºBËŠæ?­Íúþ„šÈZœ¶ÐöJ(/.ê BÓATBôÙ•xBqìq¢]gB +Ç“Ê5?Nç@6ï‚£–G~ˆ7åV¼Á§(€Jo•Zð;ZÏap¯öÀŠÉØjuƒªŸvA¸ü ^TdjóF\xFæ®}¬Á–ishÓU£j}”ò^ü9¢†eQœkaxÓy2%…"ß)Ò%& –—VcÏAàŠ¯âBãêKdé ÝØn%{Z[ÅDÞ¢Bq_ TÅÍì`Š&ë‰ë¡VêåÖF|C¬ f†R/«¢.±ž•Œyæ¸0Ý^9`d‘Æ$7fÍ´·¤{±ž/…:”o½÷]•¶<ŒJÇ:ÄÅlã€Q K¨ê`8 ÖMÒÔÿyUîc0 3¸d= @?´I¬„ ¿ƒÒÛ$å¼J1'”*â<‰”‘’ÄDœ° ÄRwgî„úÂVY‚q RpÊ€ØÂ’°"AÐÓ|¥7×S•¡É%ºH²SwÄ—+„R¥\¢ð7qœƒü4¡§å s2K!²’Û´g3QŽŒSKS‰]¾PHK³D\A‡îʳbΛ:àUXã•+2t;EÞ›S^"½‡Yª ¥»ëÔåœKB‰†Œ²BE¾P”çÈ•pÂ&—Œ)Q´ UÈÚ–ƒuesÓ¬Btt5Lû0ÝHÌ”¦ú·UÙe ôZ˜9¶ùiÑWkÀ\dy¦RÒòF‚ÛÂL,!“uC 6ä¹! ÜBŠ÷‚n[ÄŒ…!g–/n‘*õ"–VP\C ™aHµ£¢Ñ^¤ðVÝ "ÄÕÇ$XEü¼£§ÒÕ̬›À­5Žf¹™R¥i FFù±S¨š‹h”4‹xwŠÛm&ÖFY:Brƒo¤!;@Í„¥©ü¤í§éòå‚t´¨l]@ks3çšI&ÃúÄy‹‘a"úAS1thrZ÷µõò‚&9\° —'6áÚÖPýrUkkhÛ6°õdmL]©×3¤ŒXUYK"ÍFeo-W¹¤9ˆ[ìÓ),J±±ëìȰrIŽRmmw>ÉDzrmD ¬“‰"Vx €=!{+2L/#U6µõÚœDB²Ó<ãë¬/è”Ié`:‘¡$Ác<Ôy1KK€Ÿë ÂÁÊYk¦•ÊY^ð¬Û/@ªÍ -&ÀúÀ²+)`CÅ’@;” Sª} 7‚f¥L%jIðÁ#>ÌO%ǃ^ HH×b#’'Âñ„3 DNÆXŒ²…YVÐÚ''€õvVµ)¥Î<µ/]aiv:£<ë<ÌÖø`iàâ ˜—ÍH"x7šfSfHH×ô‚8`fL„'U,.".\A9©uµ»1{žÂ«Ñ_c1ˆÊÙ ~°EìYË$ªlÓ“3aJQß]cSyBî9¨ë–Ë©ŠÛŸf¸ô)ñ4žð3qY)ò¡HI3˜`¼8:›Ûx$%“ 5*o,‘à[©RAQ6ßxYɳM§0êñ'_Ö²91HÆZ”” % RQ&¤ok—L)%€ŠDÆpù@L*IK$¶drtˆ0Š9&K±”iúDpÍÅdÚó‘ûFa“qÀ ¹,•+²„ªì°tSò‡kfļEDK·¸õ¼X×n¯à Î)EÃa݈ƺhe«yi‡lœ} ØŽœ² €×¸‹:bšk±5xÒê<©²mç³K„B›\‰ÛZÒAÅ5ú~Ë(O¢ÞÀø&äG;¨Žc<–mª”„A뺂 ÜÅU(—7"ÊÁ!M·2Ú³[XÔ$²k%Å:z]åë{EæŠN,Bøts)DM.Àc´ÛïÂ)¬¯±tu¡§X½W6…”|1‡K–9no¤Wj.hjºÇº ”€V‘G}¹Uàb§Ê}ÓçÙ&Ì’ÀrFÀ$‘¤&ûá’pq)F‡X”b-8àÇÞIV‘·Y³Zß&ù‡ôˆðžÌsfÔö&l÷-“®Ö‚&ÖÌI¤=TÆá1BºÅŠ71i¦°?1R¢<}¢ÂÁ+ 8ÉY¶·ïòœÉÔù+‘Öа_ÃTû#¶ŸX1ˆ;*¤&öÞ'dÜMVÊ|B6ÖAÉ›å%Á¹Ö²"£-$])ܬ”F ßâÜi]Õèí‚;u‚&3[Ã/*õN½m «xò‹Ø‚“ÉaJkP7ŒoÊ o‘\Öi<ù‚U­ÌIÌÓ‹h+†©þî€?(œfF¨\å…ïÓ©ä“yWgÀͯØ6°*Õ Q0ÚôAËíQ¬ë7ë BX7ƒê+!”># Â@g„Ëc%ͼ¢Æ¹rdšq$òIÌD\PºÖJ‹¬LT\[fö†× N&¬5Š"òG0„Ž·„¯©Ìœ^ kq R3=½ºÇ9¬Ò¼ Wr±–öâC%”äs^÷ŽfêesP ?ĺ5óŠéÖÂÊÔÀUÜMÏI Uï„Z ¤WÙJJ·Ö,è– ;EQ‹p™šuD&þqF¡$WY ±UxEádu‹¯•LaÃøPÊeÌ¡[õ\‚× r´ðÛw)פWYfF‰-IæÔD#6 qɸ4¦“µ£idâ”v>PeiKö?ýH‹M ÉdÍä/säд¢È®( øt yfù›âúÆ$o‘t… Û¤3iŒ×б_o0U·1aUŒ,¤(Oµw ¯éuÈÇ22ñísÒ')r Ò¤A#Mõ;ÇØÅ)MÌØ9ŒEš'©å?¼5 ›‹LJ\ÚÄArŒ“6Óå>ó^ð½Ï(Zc]"Y% /xE’ƒ æ ÐÊdyé»#Cm"QAT޲š &¢Ç1‘©-F›‹ˆ‰èk—Î2èw]ËÄÍÕÙ]Vi¨jp„`­ Â9Dªti ´m„0²Ï4ƒ'‘•QNaK–PXn°ªÔÜšÉ9·ô†"ŽjaCX^ÞðzÂŽF›Ái°¥\ê#q‘(*­„w0ôCy¸€\HR`‘KÐ~˜ÐnY!wĽÍäŸNG2c[hc~\åØ(ddÜéx®èœ‚Øyµ963 Å]÷vj%§„¥îÐ'¦Œ¬#%Ò—$, Ò \ò !DJ X‘7jAZÁ¢Ði=âQ»$$…üÏ/2“§”g< ذ%Õ«I 9•¬/"­šhx„&hxô½¡ž$y–Nª¦a´Øß¼k‚aa!¥¥!æ5:Ðl€1+|„˜ ©ÌJŸ¨û´É Åeµà,$`íY<¢B¡e¹êõ^`7:“ WNYÍÏçV‡Xm@ìäÎwu7‚8àÒ‘“S `뤤FR4Õ±"PÉÊ@´[iëì‹‘^büSu¨kÒ.ëX@ÜÊú±[,©] 0k“[ÅJ•QSjËm`ЩHìÁñ’fRpRRšÂÚ»(w:ËkqܸÊŽ~qÌêvŒ½C’,\;ÄÏ´Ð \6>qI~‰Dj»[%ñPy±â½ÇX¬tñcJDiÙŸ{ú“Ò6£‚>ÁoÑDÉÚ­h× ˜Ëáº.ë¤MêZ#âFåc.o—çµY#Ãh¤”ioËxÏ:d lQ€7 oW$J+&Çé!Iºý ŠxëÉTæð§¬]€R£&_åײß!úFž¡&¹ŠbÙ4ÚíL š|’@œÅžœˆý¿”h8.z|â„rK‘Üt†ƒ(¶1r¡PÄã̉ŠèmÌË•¶$}b§W¢ìÃðÉ ¶—„Rú²Ú„‚’²@ü¡Ï d³· àÄ,׿9kÒÑaKÊ žÒD¹3¯Ao BévBò´c<‚2c É•«2ú˜æEHaa$íò¥³è3x0u,)Ä©Á¯˜ŠË%Ù‘™dPå,€ÔÀ¼½’ÄÐáHMÆâ±RU2¥ÄÜ D›ÈP}UÊ7ˆ©HAÆK÷t¨‘ýc€N%KŠê\W)D[¤;RÈœëS1š˜²‰~³‰gðû§2µïÞã“Pè²%qRØñ¬A éä_®·2Ò‚”‘YÁ[bšÐ–pØÞдäÔ%€[XžaR–H*™Ô¤›~‘•À@su’…L:¡’-äÂJwœJŒ0 ÍÅà‹Wª–«+a W[#7‘>½Š”ÊHR¢æŠðSkøŒ¼é%GÊ,DU‚ur®ãÊ:ØA“ ìȯR—rh«ÚðhÌY¿O--Y® ƒEä×M"qù)„†”£c}ö€Ø²l¶p/[im.¨Žg]¥©–• °N¤Z9­E©Ž4pBsêb®Å¸vnž’P…°†IrìÊÐ}:À]†› ûÂ.Sù@Üȸ‘&0îG5GåýF@ʤi4…4EÒ@ßh<-LŠ©%hå×îGÊ•¨, 1R0’f%;ïx™ þ0«¸1¶±@×ʬÁ«ˆpÅ–JQéV  Z™£dp‚ž½ ±°Ò™7‡Tïá½ü¢NÃ#¤$£¢åéú’_¥"U° q“™³¯[C0Ô‚ž@ļ>Sn»EÕ´Ä-Ó´ ’Ã…•ÙcPzˆuؤ.¢â—¢eNÐ åtÖ'„ˆ³v°JÖ {ϦæëÚO³D¹ÈìFr! Ì›Ÿv- I‘4Ô_å§S¬²MäW®ÖK!YÑ'yÒq3D)BÄ\@4ú–˜ìlÁB¯”{¤Å¬W™X­YPSŠZRLSk)Ioˆ vIiº¬TÆ~67V¡¢åy(Z®y,k*ªÉWô0¤XW ,âƪŸc°ìÂ3wú@õnX$N´ê"´VH RgÀHëA XNh²Ó¾Œo£E"\­Û mÖ#c쮽‡˜“/8‘m·…<‚²CED²Ún7€NdRÈI/xVs ûèwÃâ,/ NY d±pÝÕÊlôéß»QE¥;m¶ òô·OÞ¤Ž¶ƒéuÕ^Fý ´“TâC~`Z,ÔESV^o ˆÊ!Q]c‚ï¬A¬0l©±Œ½Öµ'hr‰t HK›Yaì×´YWÛœBØs{³é(Pt¼4¢+.‹Kˆ—V¶ñ2 ?ŽT´¨_Ö3‰)È=Q]U*0)R– tÙrºíÛNÂY>ªI-ÄìDACÀ³6ʹÄ.úCµÀ†Iò™){&×¶¦Œ 7€ j P¾ðõU‘o"f$Iq*±Ò©œZÄÐmÅ&×WxhKsUs±Œ4 izM(-£|°Kˆ*§$Iý ð°Ç|«a©¤nr ÖF¼;5ËRmùEF­61S,¬T)æoÖ®±Ú™gaºp$\ˆ£µV:ÓT„æ?3Êäm7Ø}a)GÃÔéPât…g,q%š:V6ÔBÜš`å©R‚ †!kDTY¦FšÁ¶ÐÒµÈb=!e"à_éy€‹®%äœÇúÀdðIëÒ-¸Ñ(¶±¸Iƒ’—HçL¨X•4½EÀé %“­«ï4ïœ@È+,ýšé´)$D\¨Y³c©!âŠÉl+X´ÓÄ‹x?ÿÙcups-2.2.7/test/create-job-format.test000664 000765 000024 00000002446 13255074424 020342 0ustar00msweetstaff000000 000000 # Print a test page using create-job + send-document, specifying the # document format. { # The name of the test... NAME "Print test page using create-job" # The resource to use for the POST # RESOURCE /admin # The operation to use OPERATION create-job # Attributes, starting in the operation group... GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri ATTR name requesting-user-name $user GROUP job ATTR integer copies 1 # What statuses are OK? STATUS successful-ok STATUS successful-ok-ignored-or-substituted-attributes # What attributes do we expect? EXPECT job-id EXPECT job-uri } { # The name of the test... NAME "... and send-document" # The resource to use for the POST # RESOURCE /admin # The operation to use OPERATION send-document # Attributes, starting in the operation group... GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri ATTR integer job-id $job-id ATTR name requesting-user-name $user ATTR mimetype document-format application/postscript ATTR boolean last-document true FILE ../data/testprint.ps # What statuses are OK? STATUS successful-ok STATUS successful-ok-ignored-or-substituted-attributes } cups-2.2.7/test/create-job-sheets.test000664 000765 000024 00000002363 13255074424 020343 0ustar00msweetstaff000000 000000 # Test create-job + send-document with job-sheets attribute { # The name of the test... NAME "Print test page using create-job" # The resource to use for the POST # RESOURCE /admin # The operation to use OPERATION create-job # Attributes, starting in the operation group... GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri ATTR name requesting-user-name $user GROUP job ATTR integer copies 1 ATTR name job-sheets standard # What statuses are OK? STATUS successful-ok STATUS successful-ok-ignored-or-substituted-attributes # What attributes do we expect? EXPECT job-id EXPECT job-uri } { # The name of the test... NAME "... and send-document" # The resource to use for the POST # RESOURCE /admin # The operation to use OPERATION send-document # Attributes, starting in the operation group... GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri ATTR integer job-id $job-id ATTR name requesting-user-name $user ATTR boolean last-document true FILE ../data/testprint.ps # What statuses are OK? STATUS successful-ok STATUS successful-ok-ignored-or-substituted-attributes } cups-2.2.7/test/create-job-timeout.test000664 000765 000024 00000002313 13255074424 020531 0ustar00msweetstaff000000 000000 # Print a test page using create-job + send-document, but don't send # last-document = true { # The name of the test... NAME "Print test page using create-job" # The resource to use for the POST # RESOURCE /admin # The operation to use OPERATION create-job # Attributes, starting in the operation group... GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri ATTR name requesting-user-name $user GROUP job ATTR integer copies 1 ATTR name job-sheets unclassified,unclassified # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT job-id EXPECT job-uri } { # The name of the test... NAME "... and send-document" # The resource to use for the POST # RESOURCE /admin # The operation to use OPERATION send-document # Attributes, starting in the operation group... GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri ATTR integer job-id $job-id ATTR name requesting-user-name $user ATTR mimetype document-format application/octet-stream FILE ../data/testprint.ps # What statuses are OK? STATUS successful-ok } cups-2.2.7/test/create-job.test000664 000765 000024 00000002200 13255074424 017040 0ustar00msweetstaff000000 000000 # Print a test page using create-job + send-document { # The name of the test... NAME "Print test page using create-job" # The resource to use for the POST # RESOURCE /admin # The operation to use OPERATION create-job # Attributes, starting in the operation group... GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri ATTR name requesting-user-name $user GROUP job ATTR integer copies 1 # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT job-id EXPECT job-uri } { # The name of the test... NAME "... and send-document" # The resource to use for the POST # RESOURCE /admin # The operation to use OPERATION send-document # Attributes, starting in the operation group... GROUP operation ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri ATTR integer job-id $job-id ATTR name requesting-user-name $user ATTR mimeMediaType document-format $filetype ATTR boolean last-document true FILE $filename # What statuses are OK? STATUS successful-ok } cups-2.2.7/test/create-printer-subscription.test000664 000765 000024 00000003643 13255074424 022507 0ustar00msweetstaff000000 000000 # # "$Id$" # # Create a printer subscription. # # Copyright 2007-2014 by Apple Inc. # Copyright 2001-2006 by Easy Software Products. All rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # Usage: # # ./ipptool [-d recipient=uri] printer-uri create-printer-subscription.test # { # The name of the test... NAME "Create a push printer subscription" SKIP-IF-NOT-DEFINED recipient # The operation to use OPERATION Create-Printer-Subscription # The attributes to send GROUP operation-attributes-tag ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri GROUP subscription-attributes-tag ATTR uri notify-recipient-uri $recipient ATTR keyword notify-events printer-config-changed,printer-state-changed # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT notify-subscription-id OF-TYPE integer WITH-VALUE >0 DISPLAY notify-subscription-id } { # The name of the test... NAME "Create a pull printer subscription" SKIP-IF-DEFINED recipient # The operation to use OPERATION Create-Printer-Subscription # The attributes to send GROUP operation-attributes-tag ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri GROUP subscription-attributes-tag ATTR keyword notify-pull-method ippget ATTR keyword notify-events printer-config-changed,printer-state-changed # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT notify-subscription-id OF-TYPE integer WITH-VALUE >0 DISPLAY notify-subscription-id } # # End of "$Id$" # cups-2.2.7/test/cups-create-local-printer.test000664 000765 000024 00000001534 13255074424 022022 0ustar00msweetstaff000000 000000 # Create a local (temporary) print queue # # Usage: # # ipptool -tv -d name=... -d device=ipp://... ipp://localhost:port/ cups-create-local-printer.test { # The name of the test... NAME "Create local print queue" # The operation to use OPERATION CUPS-Create-Local-Printer # Attributes, starting in the operation group... GROUP operation-attributes-tag ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri ATTR name requesting-user-name $user GROUP printer-attributes-tag ATTR name printer-name $name ATTR uri device-uri $device # What statuses are OK? STATUS successful-ok # What attributes do we expect? EXPECT printer-is-accepting-jobs OF-TYPE boolean EXPECT printer-state OF-TYPE enum EXPECT printer-state-reasons OF-TYPE keyword EXPECT printer-uri-supported OF-TYPE uri } cups-2.2.7/test/Dependencies000664 000765 000024 00000002161 13255074424 016443 0ustar00msweetstaff000000 000000 ippfind.o: ippfind.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ippserver.o: ippserver.c ../config.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h ../cups/string-private.h \ ../cups/thread-private.h ipptool.o: ipptool.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/file-private.h cups-2.2.7/test/document-a4.pdf000664 000765 000024 00004033035 13255074424 016755 0ustar00msweetstaff000000 000000 %PDF-1.4 %Çì¢ 1 0 obj << /Type /Catalog /Outlines 3 0 R /Pages 4 0 R /Dests 5 0 R /AcroForm 6 0 R /Names 7 0 R /Threads 8 0 R /PageLayout /SinglePage /ViewerPreferences << /PageDirection /L2R >> >> endobj 2 0 obj << /Creator (Scribus 1.4.0.rc5) /Producer (Scribus PDF Library 1.4.0.rc5) /Title <> /Author <> /Keywords <> /CreationDate (D:20110914144906) /ModDate (D:20110914144906) /Trapped /False >> endobj 9 0 obj << /Length 611 /Filter /FlateDecode >> stream xÚ•Mrä …÷>…׳PIè8OOMe“ûoçé¶SV:Ù¸¨dïIDÕ÷ù |«ÄþW¶ªTœâÔJ“²fP½“Vÿ‘=¶Œš©^Y âÚ©p£Šé†èŒz©+¦²Pxß=˜° £¨¤aCDgÔ»R§Aäúc ‹:¦1zfûØ2Z©²boo…ÆÀ¯LÂ8ƹ3z2kN¸™¹7ØÅL{ß©7¥‘8ï†sù8þ(> stream xÚm”KŽÜ0 D÷>…ÖBð#RÒy<²Éý·)Êr·gZ;ùY&‹UìŽ&…Kmå·h <4íåK7¦Z4Œ¤7çòoK£1 õ¢Ò „÷ì<¶7­Úö^„…Pµ[/µ®—ç±µ÷¥âIÙ0‚5#ÇÁì> stream xÚ…”MŽ#! …÷u Ö#µåà<fÓ÷ߎqH()VOVä+ öóÃzæ£}·:ö›.EƒîæÜØhtÃö]ÒÃdôéc”ìqU4®Äöö¸~Þ9¸¢s…î±oè`åÍ<+±a{Å,*ëÚêœ`´êÑ€QB:%ʃ‹Š Ê‘ÂXÉÜH2Q˜±ß"¸€$‘´J·6Vd,æ&䢨Ԫ€ÚaØŒìÙú>öÄ$W‘ò'|#í ”§M…žZ˜MÀ>²Ú’8®XW\¿ÆQÄ”¥¨O™ÏUT¡gÛ•»^EÙ鶬õIMB´¸ñ0†Xfæ«–üú¸*êÃÁvŒ/¯·ŽqN6ÞÂP¶Ë®¨¹‚ZcF ]±ðWµS'¬«—7e5Œ³=Y˜¾£ ªnÛ`Ž –š}»«v¨D5¶qclüz"Ùf—¢c¥é»c:$ß×aâ/%WEc¯Ac¡/ÏQ7@}ƒŠ !`jAÑÏmq¤íÝÃVÝŸTÃåœ7ÞX8q>oá¹rDÔ"_ÛŽ÷Ý‹ Ã9¦(\µžR_+èag¬Vì] àŸÙãúÛþüºþĨ'œ endstream endobj 12 0 obj << /Length 191 /Filter /FlateDecode >> stream xÚ…ÒA®!Ð=§pÝADpÎcÓtÓûo‹M¿3‰|ëbb^Ô”%Ëãã[ËšîŒÐm-ÒXéµÒË·Ìu›a¦£ü²‘J¶o ̆UFíÈ:DZ¥¢r½TŒ¬C¤>#d*c·5ÿímäâ"×Ì?Sïþ(Vi#vQU JŸcd×ÜS¥yßâ8ë­â3^¬ˆ¢¶k«tX©"Ùç>f‘ù«ØF®õÎSWûÿ]ŸYÏô¸Á®B›S endstream endobj 13 0 obj << /Length 476 /Filter /FlateDecode >> stream xÚ…”=rí0…{¯Bu †_!­ç¾É¤ÉþÛ YŽ˜çÜâŽæ³1p8ÈÉ —ñG§ZþÑælˆXpüÊç}'ƒÆ8C¯-â*n±×–Qí Ô~2S]¬ö &Äѵ8-ßÞ+«|d§ÎÔZDg´Zƒ:£Íã„]~°¨‡ë¨<£'SQˆ/Då•dW 1 ï}gÔª@áE¸ƒõ(­híà¢Q…D–£òŒÕU/·¶r›:Р°…’6žÕîÔB«:{`–£›¨Bú8‘t¨V§æ WGéí4Ï„QnÌ4:c{ £ÞßL#³NBÑG’²P*¡ÒdÕÁñ”G EBû1+\zÓ©TFE|g19§9/ê˧Üqf™ÞN(‡;‡ABûÞŽ§1Ý'{meò#÷#‹èÇ7ïäy»þ ^Ûßï$A—dJ8-ÿ™RaÇ1Èg²'T¹­Q]˜é±dLk(a˜„jCй˜*ÕǺi¥Ÿë¦×ÕZŽŒö5| ö%;™áe1zaa¼eÿ~ÔcUg¯#÷ªÓº ­UÐyQ¨TÀuUò²÷X”;Ujky¬ëqá„£-¼°Ð<¡çŸÙÕrÙ›çÄ2.*ïoÛG@Uê endstream endobj 14 0 obj << /Length 132 /Filter /FlateDecode >> stream xÚ…Ñ9 1 Ð^§PBh±ÇòyBšÜ¿'lEqaÄãðR;#£ÊÜê›xP3ò·"Ÿ _-©½P³bÚ€0)TüRšÝ$פ’«‹F´UÎK’}¦ÜäÉu˜ÈööRkNEÅý È“ß÷¿ÊÞ¼þÒoðÄÇ Þ5Ôe endstream endobj 15 0 obj << /Length 152 /Filter /FlateDecode >> stream xÚÑA 1 Ð}N‘µ0!I›´ž'ƒ¸ñþ[; Q˜¯ØE ¯-ù4™“•7[[®rXònä©2BUYEÅ`oijâéЊn&=çˆÕ3dú4HE-‡\ÿ°"¤­¥t·9¹7—ô8b+Bz΃¬i‚< “#íÚe¬"Ö7ªø:žÐŠ~ß| ð,Ÿ/Ïcþ.Ew¾]è Ëq‡ endstream endobj 16 0 obj << /Length 629 /Filter /FlateDecode >> stream xÚ•Kn%1Eço·dÀø³ž×jõ$ûŸöÅv}’BQgäœWPp¹¦L$å¤5}°$Ã?¦9ýæ·BÊbþ[&µ¡=}†´ ê uÙ§½_l™Ú¨9¬Sf«’X„r]I qÁ±妤E›yÉ$ž1 ê+ÂÈx±÷+¢Z+}‰.Ì;·åNV¼2ÔÐbõ¨§×£i×f)bºOˆhBµy=…YÙÅõX=4{Ò2xWÎÐÏ ³yôOfhŠnXÛs¨ƒ¬¡ü€–ÑËp%´goŽ!Ïa)Sö?D>™B¤Æ?“÷+zŠ÷ˆY0uÓ9­¼ˆ|BEÇ>–Œ©! Bk§ê&L¯ngPÙæûÏFd(OœŒPÎ,÷É^>û€gV+’g_ ±ei4<Ñ¡ÿ¶ìʳ‰†Ø'SÛ•7#É^ÑI¸0Õ¼¬À uÛÖ>e÷f]õ°µÙá f£Ò]ji}V‚»Pö»à—ÊòVB¤UÁgþŽ©r@U޽¡˜KfPo:\µŸ3ŠèÙº=d_¢£'ǩ♻`®Ëˆ¨r§> ]³š=H-ÛCßk–Í/–ÙÔ¯p¦>–«# Cm¥uÔ=‘hŸ¿Ã-ÿ¿ìýú{ÓM°ôWÅŸ!UxxÙNpsE—KÊÞUW¿{‡£ÂíØûðXŸ~â1¶Ç~ámýˆ2ÜØW0ÿÚæ7fF ЩǓޘTsºŒoÓ^WÙ6ów?éUo/û>]¢œ]?¡`K®Ïщ—rwŸÇåý€j){^ÛÆ½½fÀ¸Ém3#zMл÷y·áóÖF4œÀà ôç×ëò[ª\ endstream endobj 17 0 obj << /Length 388 /Filter /FlateDecode >> stream xÚ“MnÄ …÷9ëJµð/pžTU7sÿmmB†¨AQgåù‚áÙ~V))'Áô‰”Ôÿ´ô…›‡ÀÚ¸¦ 9~éµ`‚ a}"ûötª`‰`®™oȵÖ¢91Baá’Xš9K8]@ΞajäÅz·$Òɯ›lßV­‚(ã5³t 5YòçBô BÆx™€©"OD†@ýxÔ{ƒoÄ![hÂì‘ Ñ$~ÌF¯VM!K(Pv-Q’WÜF&‹Šï”ÅÀz«'ïfÈñHëPºït²‚ 5Ò—ìš=éôÚ3Û·ç“çìïdßþsj•÷³aÅ¡˜Jíõ¾–t27 h¿Ü ˜ãNÔ ÜrïáŠûë݇í… "¸ ϽÃðÿá ‰Jß—pÛX_”‰˜„ô¯¤ÇΞ,¶ƒ/³ûK'›ââÛöõVhõðûŠFαàB:ö‡šíç&‹ªï”|^¹t“áÙY®2ê^Ñ9-ö{lÌí>U÷@úþØ~àùI endstream endobj 18 0 obj << /Length 400 /Filter /FlateDecode >> stream xÚ“And! D÷œ‚õH±°±9ÏEÙäþÛ)ýÓ™¶4³ë~Œ«\6žµU•úÆR L[ýÍE]¨yò0j}DÔÏ”Z ò¹~qÇשn)»JF{ua°1(fR»™²X'Û¯]%:‚†  7fr”“P’†sOì*åî4í'ñƨX}œÊWyeŠãÚÕw XàOH̲ZÃÍÞH£“Ä’3'1¬ˆÚͺJþ Š`B‡É˜Ç”oµ Õ0ûy»›÷í¸)…­÷`tB‘‹3luH^ZÀÆéQðu©Z·3ÊÚ¿ÙUò“èBvä óŽõ¶4„£h•¥“o]ÐPQ§eE«³2뇯ÄÝh%ä*?ù4Ž#Œ(/“–ßÕ;Ë(ôb4c)É–çJWêÙU>pž6µéÉñgJÕ㬚}ä¢#i²£9û Œ*&òåÂZEÙk,HÃß ^&TThngž:;+:å^ôŒ²÷3E¤ãá5X|±[áJÐ+ͽxep³¾ÿ*SÖü= endstream endobj 19 0 obj << /Length 296 /Filter /FlateDecode >> stream xÚ}”½nÅ0…÷<…çˆÈ󤪺ôý×â{“ØU¨‡DèÀ‰(,Ô_¡±—OÚˆÀÈ­•FM¹aùÉ øŽ¡[¢c[æ5ƒNR4KŸyÊXÕ½†¹½GÚ°Æ¡Í(Q;ÛШå¢ µ¨cS04°KPÚªXøI q+\íìi°c˨ u83eèAäQÔn‡:£R¬.JõŒ2ê,3Ö÷>Q™Ogìxö5X8Oh<°{Ÿ™\=(:hÅ×Ô2ÊÜwéWg?ÒëL,vC±ïê„Nì¾=û£¾©°.Ö,¦¶Ì¬±‡w”±Y=èð³f³ó,_÷ôIfåÅîÏã_0}Uœq~‚&á€÷a‰Žm•7&ž cû._Û/ÑLæN endstream endobj 20 0 obj << /Length 586 /Filter /FlateDecode >> stream xÚ•M’Ý „÷>…ש² !‰Ÿó8•Êfî¿M cã7PIfÅ| hµdÓ¼‡]y?"‡ÝðŸIØòf•B.÷C”¸d û× F6*±1Š—ìÜÖ;+eQ)ûQYŠžQ„J ûjèˆ^Ј<ŠDˆæ`¤©¥¬XaŸ½!âWX´ãÌð³Q-×*‰U¬ÎmE¥*åB)8Ó $ý•J©itn+ª¡RÊíö’ qö`…bžû½ˆôK-ÐGä E ±ë° þ•¤¾ ÄšC©Úä»I)äÏh i‹s›™2F]w6Ü>xPL±#\u†’Éší2zZäMÜKn+Ê)‘µ{ÂÏäÊðoNžq0ëLÅPlóK ¦\HS5Ê5µ³Wt0Ãê2õн£5M]Ä¿³sûÇλÇè#vÞwHé‚ãnO_­¨qêpp¬Ý=ŠV‰MÛƒ!éµÄ³WØkW{3&¯¼‹žÚÏXߪ/°äpß³¬ë*!Pnõ{Ató s*½êoÈÒíqp²Ç5K ‹_m B,ƒÙ}$œá@*·÷æi{®Fðÿ¡sû½¹°©u„XWw}-é`ˆîñæÔåÓ€óÕ}+Ñ W)BÂm.GÒf•Á|,ÏT4vQ^,gòNd×ó¡—¯ówÏt¨öbº~J½?f :*æ3þ®Ý\Yø`ÿõcûþ Šý endstream endobj 21 0 obj << /Length 338 /Filter /FlateDecode >> stream xÚ}”¹n! †ûy ê–ñáyf¥Éû·±çXPÖ»SŒ¬_øT¸`±ê?uÓj+ºvPôÏB§^©ü¦t2Q‚&Ør¶o©§ 7´(#DB-Ü j7Å…í[F¥ ¨´ÞW¹Éë­†\£vFe X¤tK¡^«xöèõìªQ¥4¢¶‚ðÙYƒ0Ü ˆ…{D'ÔG ¢Ñû¢] ÐÕyF'»ûz%kä³{lÛÄÄgõÁ‹ŒaP]'lÍ endstream endobj 22 0 obj << /Length 139 /Filter /FlateDecode >> stream xÚÐ1Ã0ÐS0w@@K çqTuéý׺CbªP·,ë‰/}¬¼"£k¿´?]Ü\ÈCÔÐ"(ܘñYáA.F¡ýYQƒ•ƒÖ¸]ã‡5˜OŽ2•åtQ{J þ›+£fâ÷É?¸ÓˆJ-j%å"¦½¦öñÅä^å,9y*üúêx¿À å*t] endstream endobj 23 0 obj << /Length 94 /Filter /FlateDecode >> stream xڅα €@àݧpnµ.½ç¹ˆ–Þ͆"ð*ùùPø•+2šÆÒˆ&3.&d.Z‰ÏÁ=Ó &…\#ö¨A•ªO£ÿXƒïË«J–çg*ü 6\8‰—4ç endstream endobj 24 0 obj << /Length 331 /Filter /FlateDecode >> stream xÚ}”=ŽÄ0…ûœ"õÈüÙø‚5ÌCP–8"!}9Îh1W'”Lg½¦ 8,½/…-º:£D}ÎÍ'À®F=™Ê{â¥bP0|¢²fn~aòŒ.Vn~ë¤ï¬h£ÍGplÏ9}Äà3t.ˆÝæn|fÇö9S„€ÇÙgìª^”j,1-‰€Æ„¹ú¾Œ_,6ëNTF7‹)½ò¡ŽÍʨX‡vÖã[}v£Å÷…‡OsE;ÕU2àøKï¦ÎÝPÖ÷ö¿*suB×w¦Ï…Í­Îèý«r'Çö»ÿ|mÿPæåp endstream endobj 25 0 obj << /Length 370 /Filter /FlateDecode >> stream xÚ}“MnÄ …÷œ‚u¥ZþÃÀyRUÝÌý·5„Ži‹f6“|$¶ŸßK©%cVÌïĹøMÌ”ÕZËl†]Z~œà‰(tk^¡ TQ?“Þ 3ùá•°‚Î+5†ÖÑ8“u /â#uƒR›Ou¥eAèEÆÔ~ÅŽJ¯èÿˆ»Ò‰*+Œ‹ù€ã—µ´2ä]éD}OÀ8zKu 2& ƆàÄßð·4©€«žº:°“l¬Þ;;@e Ý/‚:–âªÐ4#ØPýŸ²ØRŒ*¯ç¡à=ö†[…—•OO‰Üû¦òËè€ÏŒo‹çIº^Æë%ºÒW¢†kG\úrôq¤Á¨ñJSý9UšÒ«W=QöŒ¨:ÉèRïÜÙ¬ìÎÝ_*F £äÎz…ºò½OTýÙþ˜<ØH¯Üh0ñÜ^F—HòÞ;hL®Ô@ç— ƒíºƒÆÖ6öÜîÞûDñ˜üä¬ç ¾¥o”kî® endstream endobj 26 0 obj << /Length 418 /Filter /FlateDecode >> stream xÚ”Knä0 D÷>…ÖBð«Ïyzd3÷ßNIVZN,tf§~M²ªÔQ1idQÈõ;{;ê^¨KÁ‚yÌñmFžÑÕ;Å&³Z¿¦x2ÍJ:öBõ†.&-ÐÜFoód†PgëÐ=SÓ¾‹Pé¢`ë<Õ[¬o}§&F^{çÅ´|¹d#ÐûÆÔrGpmŠ 0€û, î´©Ö.ÔCJÚ?³‡×ò ~Æöö8^Þ\±Ý Çñ÷¶¥Ÿ˜òp6WâùÞvt1©<££Vg§6¢ -6T‹R¦b?ÅCÎ$?Ì¿C+<?‘3âç0‚úõ¾ÍŽºùôEÞÚǺ0ÍB:ê ]ÌðøÏø: Ùùëùtô¾Sƒvgôðˆ§ú†¿¨=ë[ß©bm–„ ³LuܳjÄž§ÞwºÜ2÷¹ÍÎUd }¼ÿcþç endstream endobj 27 0 obj << /Length 250 /Filter /FlateDecode >> stream xÚ…’;nÄ0 D{BuŠ¿úœÇ‹ Mî߆ò:ÑËM\ƒgiŽd$•jkñ²®To\„,NT ´žú™°æ˜Âc¼Gy]ã<à-fèÁ¸!O…úÔÿØQþ®43 ,){to*Ò@})›ýRâ‚H%”³¢õõ·Gɨô=ûDÀX«2Ãu©ÍŽ’Qõ£ö‹1Æ}C2èŒÏáÎhlíëÜtzó,fg•êÜÆ¨CÔ¢·L»Îf³Ø;¡Ò˜Î$7³HrÆœª“¯œÃÐypØ8Ýlð{*æ¸f'tßW™òíþaܼ.Ær'ôù¶?“£|Ô÷·òÀ Ø endstream endobj 28 0 obj << /Length 332 /Filter /FlateDecode >> stream xÚ…”KnÃ0 D÷>…ÖBÔ:OŠ¢›Þ[JVL¡b\oâ;¾XOGºÝÏÙûÌü/¬~Z 2w¢ÊÙª¢+/†4Üëy픪®?ú,,噫®5ïÌò¥øŠé²>=©r‡RAzx!ól& ™ôÍ R õ“TáΪq?'"„˜› ‰ºÀ6Ì:ðBöš:h‘Ô}RíéFoêl0´H ^FnÑbØ©+: çh;h‘´á«zl¥÷sÙ:º^¥™ñتö>Y÷ìy|‡¯ãe ý“ endstream endobj 29 0 obj << /Length 341 /Filter /FlateDecode >> stream xÚ…”;nÄ0 D{Bu€üˆúœGA&÷oCjí•3Wôƒ†¦‡ck¡Œ¹ŽüNœÕn”Fþ TH‡4ÍèWþØ&­A-X%B3PzVµr– dÈ éPY­/10ŠM4Sy0”^¤ÛкõåBÀ«Úl¦ˆRï0ê/VõÞ†X¼õL$T IWbî døôM¡.2ÓÕ6°?‰Ú!Üh xáÊ>‘Ru+"t‘nÈXWõš™Q/OrGàN¬!»ª£“ÔÜ cƒc—¥>}Ž(36‘UÚº¯Ý—¹@h&Úæú¹â_”ë¹0KJ{ŒcÕ#³OdÚ;¶&þþ¤ÆŠYñp,¢Ò\bS ¬mÈÓ‡¦hAqóVDߌÇ8zÛçÐÍö#vUoªÁs­ÿ°™^Ÿ< wrUÞ“™¾òç[úëþäè endstream endobj 30 0 obj << /Length 197 /Filter /FlateDecode >> stream xÚ…ÒKŠƒ! à}Nẋ`ÌÓóXÊlæþÛ‰e†ŸÁ´„ð¡‰ݽõ&9=#¥Ùîd¢L£uì{´ïÂyv¹)Pmh% N#vô¾3½·• <Ð)\K[P)ÁñŒ®Œ•-¨TÔPÅ">XÞºP•ÓvÆë<•-¨ÔÒúäç©lA¥Ù\dùl *5êOûëý)Y÷0ñù½–|«Ã8&Ú.ݘõ¥e—ª•Ð7^ùɇ?ü”_íqƒ7µž8 endstream endobj 31 0 obj << /Length 310 /Filter /FlateDecode >> stream xÚ…“1n! E{NA Ë6ìó°ŠÒäþm î&ZK[Œø|û3M0c¹0an>idùA©ƒJͧ ­sÃü0j ÊJüÍQ®Ø¬ªŸA¨†C6SD« °Vÿ)Fl¦ˆz©€ÒU?°™"Z[óVxµK¹EÈoö±“zË@¶„#懣ؖ‡\ˆúYfµ³\ÈÍúw5-Â<*ÈvT¨ à„‡³”zzåæŠgTÈêydö„Œürbêú‚„ {Hl ;Öt›¿€ý’nÌz!ˆç¢Ý!. ¯4‹ Œ*þ¦4S‡Ëõ¶ÌàXLOY76SDI: n77¸šqÅáÁ\Ë^v@ÉèÙ 0O^3£áú- ›«è¾ÿ¸ïd¦Ÿüý•þsÍÈ… endstream endobj 32 0 obj [ 673 671 717 762 717 590 668 522 547 519 362 547 543 209 209 543 575 574 402 321 541 777 540 ] endobj 33 0 obj << /B 9 0 R /C 10 0 R /G 11 0 R /M 12 0 R /R 13 0 R /T 14 0 R /Y 15 0 R /a 16 0 R /d 17 0 R /e 18 0 R /f 19 0 R /g 20 0 R /h 21 0 R /i 22 0 R /l 23 0 R /n 24 0 R /o 25 0 R /p 26 0 R /r 27 0 R /t 28 0 R /u 29 0 R /w 30 0 R /y 31 0 R >> endobj 34 0 obj << /Type /Encoding /Differences [ 0 /B /C /G /M /R /T /Y /a /d /e /f /g /h /i /l /n /o /p /r /t /u /w /y ] >> endobj 35 0 obj << /Type /Font /Subtype /Type3 /Name /Fo0S0 /FirstChar 0 /LastChar 22 /Widths 32 0 R /CharProcs 33 0 R /FontBBox [-1 -210 777 728] /FontMatrix [0.001 0 0 0.001 0 0] /Encoding 34 0 R >> endobj 36 0 obj << /Length 189 /Filter /FlateDecode >> stream xÚ}‘1à E÷œÂs%,0`Ÿ'UÕ¥÷_k¢¦©&xòÃæs²B š q‚ݱ˜±õ{a‹^gôá°xéu†ÖeÌ›Ý%[—ëÊ}”3ù5ÏU©VF3¡9k\*”ÌÑÀ†;¡Pg—–ÃF.,Ú†.5‹"ApÛý¶P[&ºg8a‘Ø„Â6f¢äàî[÷¬{a³cø E霥 ˜êçi(Æm á'´ûÿí‡õ¤ÇmyûÙpÙ endstream endobj 37 0 obj << /Length 92 /Filter /FlateDecode >> stream xÚ…Î;À0ÐS0w@€ó»OªªKï¿–©Ê€Ò žlÉPge8»UF> stream xÚ3´4T0P†@ÒÐÀ@!ÅËÒ@ÏÂÈÂÐHÁ@Ïr1…à@=z–Ææ¦Ø„’¹°Å, -,ˆ%sáW s ¦²N ãHæÊPHÓâMŒ4† endstream endobj 39 0 obj << /Length 199 /Filter /FlateDecode >> stream xÚ}‘=n1…{Ÿ‚:Å“ÍóÌ*J³÷oO²Ú‘b }zÀÄ…:žõKÅ>’£‰3l²uêèëÑsÃ8ÓGÄ 9ÚÊf±³æŽ]s/Jc¤xEÆ ÁFÜ”—N3aïÎ:4‘«éL°¨DˆIMQË(v´ý0“üó³c×ì‹2+(ç.ð³7‹Ãs–ÇÉ‚®+*çÊYsÏp£Y—[~dòœ°–·ß¹wôs½{v´{åû†ÿÉÑ~èû«½ª³r™ endstream endobj 40 0 obj << /Length 448 /Filter /FlateDecode >> stream xÚ}”=në0„{‚õ+Üò<‚4¹›!EEÄ<¶ðYäÎÎéUK-ÒñåxLîåƒ<’ ·Vš‘EK/ß;x£Ju|6äu<™V’Æâƒ×ñ@ÒIz`eJ5Íb•\Ç+ÁTçÃëx2oä]¡–k'üb«ÞH{ )ìAâgÁ dmÄhÅÑX„uí"a³ìŽ*Z¨‰ŠF%…hOÈšjŒQe¼8zÝPc!(ÆK<åðïf.L}Î-oèK#M ¶Qξ‚ëúwÔ~RÕ$«£‡°¸ìϤáú;Cß:¼hÓ‹›q:ågÔ¤^O×v”Q;ÇäŠG§620™œ¬ r£öŽ¢àYÚ)™mo<{BLçÜÞåLc§–(]ÓÚQ†gf°ÙòSòJì͆cOªMHg§73“•¨@”cfº7ôî>ª‘¯sx1¤Oå;úæz¨6”Nx›y5uòÉP{C-rSív­– ÇÞZÔp~FÆê Õæ—Pqú'—2‘+÷pmC£ëó^a?ç …['2#ëôabÊP¾²YÛJ;»¬4ÿ^qXü„ÿ½ ß–~•ÏÇþQ Ÿ endstream endobj 41 0 obj << /Length 562 /Filter /FlateDecode >> stream xÚm•IrÜ0 E÷:ש2‹˜8œG©T6¹ÿ6Ÿ$Ô’-x%? †´¥’”ÓI2üÓh¤ßt(ç2ÿõžGíÍÒ¿ÜG©œ¸”u|­Ù}0¢¬¼ç+¢7#hoª°!öu?W–HW—®¿ˆ=®Ã§ðfS+oJÈ…×t=}ö¼¸ Ó7ü¨~ Ÿ»àÇñ<þ¦?¿ŽÿªÌmt endstream endobj 42 0 obj << /Length 194 /Filter /FlateDecode >> stream xÚÒ; Ã0 à]§ðÜAèÅñy\J–Ü­S(Dq›!„ý¶"d´*¬ãeã³òZž *ŠbDTé|Ê‘˜ WFm´jj2eÁJ:nžR‡Yc3eÉ(DUª5=Õp“íÆFω.ÌÈ ­òÃ:Ì+½ŸÌbÚÕ¨â8Åè‡u˜Wú3‹iWïgn±ó¬ò»9W‰Éë~ÝK‡ª²Ü’>§#U7«Ëg§r‹Ý¸¶†ç<ã uHpÞL ïåõ€7{¹ endstream endobj 43 0 obj << /Length 236 /Filter /FlateDecode >> stream xÚ’Án!E÷~ë&PTøžiš·éÿo‹/§Éð¦uç W/X ´Bf)À~klðÉIu4"V”V¹Àw_¨9j½4ŠÐ‘Èά;ýƒé¾r™‰Ø®lߢ#ý¯.”>–˜æÙ<Ñ 09²ê.´YpõuÏö¢ÊÓÊ•ìÊkUn yø¸Š?JÕýÚ€²ù}áJE’>å4PÊ|È·±Ÿú«‹Ø7ÀÉ™aÀ<±€2êôÙ‡=/rv]æÊu`¡9Ý,òÛWÅþ a íÂÞ}©ðõ‘~µV°I endstream endobj 44 0 obj << /Length 242 /Filter /FlateDecode >> stream xÚ…Ò=ŽD!àžSXo2P~<›Í6sÿvÑÍT’™W¼à5€˜E£öàüY†ÎÖ¾ŒÃµÒþÚó&ñŽ£»RR –ÒTšK1z|°•fª8´gôÊæ–·©j–odÁmÃ鈰¡ÏU¶ RNó¾+xo *Y4“x%sÁ‚‹®×º`Áç=Å¡_R$?¯=;ÎÓßg©cd5zfå­e× í95ÿScÏOe{BŠ=pùÂ!¨¬–7Š ØŽlÚiXž.´S Îœ¼¦Î¸ËÒ&ÑÑÎÝJ™#åÎ=Û…V½¨,»Ù~¾à‰ª­& endstream endobj 45 0 obj << /Length 461 /Filter /FlateDecode >> stream xÚm”1Î1…û9…ëHA€Ûç™_QšÜ¿ÍÃëÝ)–-Vžol ïÁÄì›sû-ÚCgû‘Ëç ¹8´©3­i}¶%©xä¦:ˆ-fÍî«ÜéJS'.aê¾ч“õ¤l|y_´5O$OÊ¬Ï í™×Ãî«¢:˜\µ©§>8Z@éNº/  N™UŒd¯bÚ‰|_UD\1Ýqêí¨mlÑ–BS[N²m˜Ç> stream xÚ…”M²Ü „÷>…×Y¨úƒó8•Ê&÷ߦ…±Šyóf1Å|ƒ@jµpï{Ù#ðåXûþ“·bój{¡’ŸýÏÝ Ø¨ÕÆu…Žm¥ …¨´oر­¨– ú?3&n`Å(¯+ˆ^QãJQ1Þ™´dff>stSªÝql+ê}®Š“Ú8G µ0H‚ŸÔ[fvl+êÞ¨µ ËÃÿaâL¨ed¾¢«­P–Ì´S5TŽÉòî7uA>Ö‘?Õ¦©³PŠ2¢Ô‚g 14øyË®J—ÈØ„¤£üª¤5»¡„ÿÊ9ëhF6ë¡2N»L'8ÿTý"ðÈ‹}íÕ'êû=‹ ßì4ÛÚPc‰ÙX@A±§Í>¡4ø{_·é)J> stream xÚÒ1à Ðݧ`î`aÀ6œ‡ªêÒû¯) HqÝfˆ¢§ÿ#“X(‡´›ŒG% wmH±å"Æy…וNPb¬©R²¨ƒÜ¥*ÇÖÁOJ&Ì%+›¶·—’æã=¾uð“…Òq.ËööR–ö—ÉÝdN)ñø –íí¥kßöÉ­d-Xæ7µhïž8Ö §°KÜÜg鮲/«ù:<Ãão2]” endstream endobj 48 0 obj << /Length 152 /Filter /FlateDecode >> stream xÚ…ÒK ! à}Nẋ`¢yÌy,¥›Þ[§Ð*Lª.$|懠ŠJÊɹoÒK#MwgÌ…¸a>Wz]éF‚ÎNQƒE+Å$o¬ÁºS a©½ mN%S4å5XwÖ| ¹‡6§‡ 1Úyë“/; ò§ŠlNó¬mž<êü>ÿUæäå“ü…Ïô¸Á7|¬ endstream endobj 49 0 obj << /Length 95 /Filter /FlateDecode >> stream xÚ…Î1 €0 Ð=§ÈìšÄ¶¿ç©ˆ‹÷_­ƒ"´j†?ðàÀÅÛÒvfM¼(K1 çðÞÓ Y£À 6¢JTd)˜?Vé;yUéåùÙ~…J¯±f5( endstream endobj 50 0 obj << /Length 113 /Filter /FlateDecode >> stream xÚ…Ð=€0àS0; RêyjŒ‹÷_ýIlš´Vòò…·`*ÈèáZvE—ˆ«€Rcfdâ{ðh©€‹QÒ$Ú£ ”è´ÄäöcÆ—i¦ù ª»M™L,ê2 ïÞ´R›7}B†· NGÌK¤ endstream endobj 51 0 obj << /Length 240 /Filter /FlateDecode >> stream xÚ…Ó½ŽÃ à§`¾Á² þáy¨N]úþë™ô®Iå2DÖ'ì€ML,c¶:^i¾Q² Ln’p<ù1Ó ŒœxE=-IÁšºÿc=­´¸—Z<3:4ÑÊzZiÅj©8Œa®ŒPQY2a,QO+­…!$ŽO•[‰sUq£%Læ¿Ù Unà-J^N³²žVóòŒ¶-ß®| p’k柩* ‰î$ö»Y%­=[Ù5÷Ôѽ÷z³<{ünÅd h#q/&#cÂ÷#¦úÁzÚ¯œë_íó?ufÝó÷Wúw³ endstream endobj 52 0 obj << /Length 155 /Filter /FlateDecode >> stream xÚ…Ò;à ÐSxî`aÀŸœ‡¨êÒû¯%•h¢b²žüAR"DPi—´PI`§ ‚¤dãqà=Ò”-%jp4c.YùÆj𔈙G ÎhßȳÖ™^ÇëlOÛŽJ”tc5¬3ûG¹Vvã’pk[˜ËñÞ#Ñž/ yjmÏË̱ß9u´ùO9«^ð|„„‚y* endstream endobj 53 0 obj << /Length 344 /Filter /FlateDecode >> stream xÚ…“Kn„0 †÷9ë.,'~…óPUÝÌý·µ ‘p(úâ·ÿhã3ÿ©­êò]‹TÑ& Æ·¼îè ¬ ôÖkËÐVHìÌjïØV2ʵ E¾‹‰z/ ;¬©»wFÅO¶jDD„†G˜ÉÜNM B‹{gTº·o‘Q¡û¥ßb="*ê᱕Œj£3Ž6ÀËÌÞ•¹wB/ÆÕ€÷nT€[̇„Á;ÅÈQA³jk=r“¸zó™'Ôwptû̶òlyŠçNfÏ›Äþ[ùl“8ýNÉ|3Ç0_)%Ñ:Ö÷ÌbpwÊìë£ás±nÐÆJWÐQ›‹5¡Ò䨇™ ‡Š&&è'YGîŒNÌŪ 9Ññ ¤70Ý—–Qv©ï2ÐÊ`CDQØ^Ý{š庞¢§ 4*1îðb1µ;½öðÌfÑd–×Ì3æ:X~¾ÊƇøl endstream endobj 54 0 obj << /Length 542 /Filter /FlateDecode >> stream xÚ”;Žä0 DsŸBñMˆ:‹Mæþé’²üÙ1ƒIêgH¢ªŠTÂR õòa)ê´ò7ÁÒ¸Ö¢¾,_c`³ÒâSS ¡)¬ í[;tÓ>Ì Š~HÆ|sB¥ ´NÝʧ)X3l…yk¬z[÷-¤†Í½è¬öøhtÄCn¶om&K…« Œ®Hét•@lÔbe¸tsÅu©E „ ¹H F°ÒæêBF ?ö-"é`SH¿`„¤®Y…P‡[¿Ã(ø8Dº‚®ÇÚ²P\¬£¯}Óf®@é±²S ¿E\,„~S2ã8çf,ÄQ…¸‚=J *DP§Ââò·ùšHëa'“§"\ôÝUÕáùÙž•ù†“uv—Þ½YÓ uV®µžžŽ±ªõÝ í+Ðõß­·§ýø#´o7BŒrýf]Ú¥”†ûyÄW] }üuKglãö!¡â+›«Vy©{³§’½CŸw‹kÖ§#ü˜0eW9«¼Z•}˜œš"Ô9¼ò„’7PlqæïZMeçØ¹Y¤÷M›Õ3u7óÊYéÊ@F݃eW„ñ=û=£7óY-Lwõè1©¯tF×¾iS[.‹­è?x¢ÿ^}BÿYq¿‘wä1U|Ø Jcë1éeNšî×àÑW'Ľošæ6ažüòç×öõ\Z2 endstream endobj 55 0 obj << /Length 679 /Filter /FlateDecode >> stream xÚm–Ë’d' D÷õ¬1 ôâñ=åpÌÆÿ¿u¢n{J;úp)RRJtc/µ˜—_,¥á.£üÍ/3šÂc‘Is˜ŽòoYd°xíÔg9{¿Ò/­R¯µð0ªÛ…›Òú Ì&5Çþ:P*cY˜D—Q'ë^¦†Ä÷+‚ûZ_±t¡µ¨9õªðAïWu"øº|“m4 ŸûÖÚ8ÊÕB‰W%ÞJX•Öæº7£.J+ ä 1ñúíŸlé§ú0‘A+$ßw=â÷¾s÷ŸÔ¯u§û ]…,¦“ÌWndz„аjŒ:o½ZÛ]±P­;¡ZIùÄQa»Õ-v¹Ã[v‚Á% eò?«u˜ý C®ÅˆËZ!|Ž >È¡¯ïÕû•À!s0{_5×È{S ·CsBWÍO‡´>I¶ÿx ø‘Z=&˨8Ó ±·Ò*è>^*†l'Ôêí´¬!që»*¤Ë«Ò uñXµÞ"îƒx+kÒB\–PŸ5êç½ïà†›I¶`8P‡Šãp¯=<š±åðojp+ïYäðÎɹùÍ.2û4vB‡7LIœøÅ‡­œS1¡U†ÿ±ú¹…õS±Œ®ÙèÛ7›ºíÉú0L[¾nIèÃlޏ›ç]†Ž:q-¯}S¸ç3±Ú3XõºÊÐ{ש5Ìò3]u6²= Ž>“Yûã–Œº{L'ÅÝ1W·í]]Sìz-¡ ¾9ÊÅg8õCž¯×2ú0Æ q^!Çt?Áеx{èˆúL6»blÜVÃKvꋘ¿¡Ém*¼×aRõJu·áÃî„ Œ;·í¶Q9´íˆ¾*ý YøÚÄ¢wÆ-(c°Þž@k¡žÑòÑXßÿI¼_¿Ë?½þž§q endstream endobj 56 0 obj << /Length 321 /Filter /FlateDecode >> stream xÚ…“;nÄ0 D{Bu€üˆúœÇA&÷o3ÒzmKl:ù‘”‡CªÍœÛÈŸ¢¹â£IÍ_’¼TêÍ1qêÚþ i-B•‡õØ‘Þg+)®æíÕQ¦ŒBV¬y®ÒH¦È,ÆÔ}FQPJ "PÓÈWÍ®ƒ¸ÔÞ³6Bî;RKu²Õ|#eÃɪм7v¤ˆ*˜BmߘŒFZT©ø£8€bF:¦GGÓ†,ì4A¤µDm@[ÚÕ;•>\h÷:€ºg ­ô†ÒìœÍ{Ío3§˜¶l‹Ø^e*Âq’ÁT,È‚1êÚ€éõ+UîÄ2ýâ5zØqZ‚áÈ*8RÛuZlgÌÜÈ×u‚¼ÂâÏß^ÈÑÑlÓV>Æfô~£‚µ«ã›í~E4zá;ÒOþþHF\Ò: endstream endobj 57 0 obj << /Length 179 /Filter /FlateDecode >> stream xÚ…ÑKŠ н§pÝEÈÇ|<¥tÓûo[˜i1PA'IŒ1ûÈmyr²~¥ÆAà2$:îÕ… ‰Æ¤yÍ…¬v¡ÁWüa«UÊ“aZ¸vš ¾¥­V©džñÊH"Ào5ÞU ³`(Ü"2ÖQò5bhìþ>+WšÉ@_ÿößKe«UšÃŠïŸ¨lµJ%{ØCпْ¯>ìœù)«ÝûíÒž­pý endstream endobj 58 0 obj << /Length 690 /Filter /FlateDecode >> stream xÚ–IŽÜ0 E÷>…×Bˆƒ¦ó8²éûoó%Qe7ÌYYõlJ>©Êlg:µœ?YÎŒYÓù‹KFÒKkgQ³æó+‚š3Ù\‰øB9ùW™´æ”Îëx3)™ØRœÌTynÁêoove©Ô|°&””$_\Ç›iñc+ìÚ7ÂXíCx£j4,’µƒOÅ㻎ÖDu.D«¯z£¶‘ 5Á~0 K¡žáú)5û[.Bœºb¿–©L§®#¢pœz³Á:ê³V†ZèbístDÕ H d9¯üõ²K/ÝÏCºª½nEX%F¿±ŒÒØÊXDof)S-ÑhÂþê_§·°¨êΤåJ™‡µÔ­Ð›!î€ Ôj3ç7ã–¨#¥øN³+9(gv½¥é£î2ˆáY÷ŠÆâÁ&*3‘‚ÊÞõ_µ6Ù¾´N 3¸þÑv™¡òé‰u¥±/X©®˜Œê¯ê•½©psg0=HæÉCƒ<÷¹²PE(«~/Væ0“ÜŸ¡“755Ê#XxÞ½Ç-›kÐÐ3:c½ŽˆZUcã]}ήzXÔÍÊäíÙƒÁ3ó¬EôfÂÕãŽØÓ:ú²›‹ÞúrQ‡àËœ¼4´Vš)C¯.dÌØ2;s2-Ë73a煮øþ*5×9Ôÿ¾J®è~ù?t#HJòH¿Bª†%sÌbèùÕ3¦¶Œ`>îÁQ†Ìį«î#“+Úgî-©ŠQÎÛù±Ïj96 ½q›=† ¬Ê(Ø÷°0íÞ\°èƒ!…«4xCy®pÈêB¿!7õó0=yPòšs„Œ½á£ç7R1½öOP‹ù`á´‡„âN_·/nãy#ë0è]{.º¬ è£iŸ¿  •0hïüýãø JàÍ endstream endobj 59 0 obj << /Length 408 /Filter /FlateDecode >> stream xÚ”ÍŽÝ …÷y Ö•ÆÂ¿Àó¤ͦï¿í„ävÂ5›Àvl;Ξr O,ɱ)é7olA-jÁ)åþ¤? N¦Åó{°oïïvªRñáz1¼!»’ŽÕÏlß~¾i‘É\ß°Wë›J®ÔªiM®™ú¡'iˆ1V7Û·US’ðWV}zä|®ömEM*î•·ÆTrÇ;ýIöín­ì¾†å±“Pê¡ÍùúNoÆÑ¨!¡š¸0éГÑ6¢YPa9•G»õR ŠÃõ…P¿'Tƒ;–Ð¥£3ýT}EM|2X‡½7™x£2f²/èͽpÌaŸŠCaË¢9¯¨šQÑ15^ÏS©eFv±žõ“Š´9sƒ“e¬æ?bAoµÔÁÆ?`¥*z }þÚþôVþ endstream endobj 60 0 obj << /Length 385 /Filter /FlateDecode >> stream xÚm”Í®ã0…÷y ¯G*â׆çÉÕÕlæý·ƒ]'©Tvîg œ®5líEÜ4˜`û¡CQ£»7ò€aØþ•Tak4|Ÿ*veäè`³N ñ¦äÀ(Ù88Í»Ìý† ¾2^D»…À¬÷ÁΣ¢ÔÔfÁ†) ±Ùإϣ€€«gâº\¸g”pv˜©¼‘(,½ƒÏîÚãîy0†è4¨˜Å²a#è¸L‹tt±ì¸ ŒSÎïl²>ò°iÖ7}¬~˜’ìÉ©0}÷]ѧ_U_>¨3(SÞJJåkC *Ñ!õÏ“ ̨ٴ»ˆôt­Û2Òn5×DUÒ)Z3» Â|1s@šux\ ø°éÚ7eJ5kíF¯ÁîÛœXA‰cÏAzvñ~u7ãœÈ[Wfôad—nê±Ý%ûAdvA“-';î!òˆv£©ú ÌLü@y’ùLZð½f”°Ë%Ö=¿êç<þ¶ß?Çm ë< endstream endobj 61 0 obj << /Length 421 /Filter /FlateDecode >> stream xÚ”MŽä …÷9ë‘Úò?pžzÓ÷ߎ!¤È(îÖdSÔ—ž´iÁ"Z>ˆ‹ÆŸJ^~Ó¡È *Õ ާ|%l7¿)z @!¶X™ R‹—l„[(Ùìud”ºÁ(Æ;SYŒÔbÅ ì´ˆ9¸¢sq†ýUèL­EeEa¬¨vàP/±5¨ÝgißHÄAçl.úÐ!½ƒ[ ǪOØ úimHj}&©às:íVÛÙkB©õÕ¶ ÂpqØ,KÂfÃæ'ŒÑÔcÑÀaÅÁf¢å„J°¹ÅÚqm’„²ˆ™´¢áMŸ£¨Nèf• Ú @ÆîÕ›j“åÕÏ,²ùã—ï¤?Ƚòy¾'¯ã¾Êê>b£HÅ-Y_)ÝŒ¬_©u_;CØ¡Y¤j¤&¡Œm±È£é˜ãäŽ`ÞPdæ …Øþ)¿r@XßIϨb8:Ï&™ByÛŒ@ý¼2º™Ä•q¦QÆ1žŽh¬Rñ¼2*L׊Q½üôërÙltý¤qM'6#¿ô(îžÑ½[s/’] ”?¿Ž¿c½ÿ endstream endobj 62 0 obj << /Length 410 /Filter /FlateDecode >> stream xÚ”KŽ1 D÷} ­ Á¯>çé ˜Mî¿MI­q7bb0^ÉÏ"E‹‰ÂÅZù-/a\~ËáÊ4¸j©x~Êß”†5é ,‚Zj);Œú`Rsë¥UüÚ‹›’h 5ºîŸG­9±¢ö¯ÄÚ*ü`ç‘Q©ƒ†Î÷ŒeA‰N(j'Ð*ÕU‹h'_I^HéOšÀ² b (ì[JÇ ,±b3 }ÈVL‰´ÏÞµuš~0tœPëúÆÜ;µ%¿Ç ¯[섆8MfžNuMêfZ‘qu3ÇüN,”¦ˆ“‹A•«²+ú*ÚvÌ÷ ªe7á›íÂvЯ­Á5¨¿Í脪ŒmP4ТÃd(qÙé…¦ÇÞ ááXƒ»Q­Û‰ÿX…N›¼Ag¦~U w^ÕgËw¦+ùSvŸÇ­Žñ žícÑ3 £ïš¾g³¦ä¦Ôíâ¹·—,·“œÛVr$ÔüK¢{´=­çÞdôžás—ålx¦_ogTशÿqêvE¦Ô,~ÿ-= endstream endobj 63 0 obj << /Length 299 /Filter /FlateDecode >> stream xÚ}”AnÄ0E÷>…×] ÀÆà󤪺éý·Ån&v&‘Y/|üÄ…JÆÜý.¾R¶üIÉt&³Œ€ãÊ?wt*Œ…8BG `6by$Gz%d ²t‹]Ñf5ŠÓZj±íÒ{œ'‚nõdêi›_L¿wHh`çfR›g¡Š`ó­b%)¢¤ &Ý÷óqÂèœd.žFecGŠ(7‰6æ9u%oïYsD¹w¯¦ò™'b¾w©}úiUOgì«¿Y,æê€2:#]»u„ÑHÏèµ¾ZQÒúòCåü„“Ö N…«º±ëÛ‰Ø?õEYÊœ÷3óº#ׯ±]½èòóÌvçQäë\¸“]y;=Þ‚#}ç¯ô p9ä; endstream endobj 64 0 obj << /Length 557 /Filter /FlateDecode >> stream xÚ”K’Ü †÷>ëTY%¡pžžJe3÷ßFÜ8c&I¯Ü ×/IjK˜8§3&ñʘ>蕲b:%C³Z4}î ±‚t¦ V¨Ö-{Û›‚`ÓÙü”ºES@1?=‰rxŒç;L­@6‰ý™rÊ*À -ßáëØb&á¢`©`2nÞ"Øb®5,¤³V¨LâÆ 6ê$ÐòÈGñSì§ÜÒdeŒÇÈ®Áˆãç‰på"‘õWF®¢tïi5,¥R€z‚¯ãÉØÝ¹%Í ™[(ñFÙükÖy߈٦om€%ìGf4[d«BëúˆÑ,¹‘¦aWšÆqo¯'õ~‚Vñwõ,Vd¶Ø(ÓWºô^L°ÎœÄ_ Á^ÇŽ.¦.­~Ëî¯o7kƒljÿbþú¯7‹÷}ƒîo7÷NE(#iÐ^ГÖënS°“ÔGÃ/¸ìÕeïëÂÛœ€"Êè”ff@êøJÑk¤ë˜“ÇH?0yÛ†Û;D™p’Õ÷NØb)3ì“òê©Çæ{íÖáÿ¡×ñë œ§ZÙ.Ý>·t12Cl> stream xÚ…“1rÄ0E{Bu Bâ<ÚɤÉýÛ ¯×–ÇìÆ…Í<â’Þ3fU‰›4?(i+4Î'ÿÞÑUè¥S‰ÐH¤Êàߊÿ°‘>{Jí`]¸‡l>iñ<¼å©Œ0š °]ÙHeUhÈ&îGm*¬Ø ê÷Æ×Ý.ž{.^vû¤'{MáNÖÈÛU~ FúÉß_éÖÎ endstream endobj 66 0 obj << /Length 137 /Filter /FlateDecode >> stream xÚÐ1Ã0ÐS0w@`LÏã*êÒû¯aIl%Ôíb¡'?ˆVd4‹G¢lbø0£ÊVM*5efüdxR%/.%£ ÆoTžæþÃ:¬;G˜Ìæé$ö’:üח޾Ç0óå‚ â¤Q¤48öZÛ|¬óˆr—yòø+Äê¸=`¿Õs” endstream endobj 67 0 obj << /Length 258 /Filter /FlateDecode >> stream xÚ“AŽ!E÷žÂõ$@A=ÉlúþÛFSSe't¥wÔÂçC‘äˆ1‰ #Ùg% *PrŒJªŠr|zðD•7rÑ´nWtÏF¸Ï¼Äxl¯vdߢ¾ËsKÿB*•ÅÜEªÔš¹èâĸ댈ж*>áC.ô¥!QÎÇ310f|cæ‡Cs‡©è­Z,O'3×ÿ›{ôœ?õ sü™ÂàîæO$Ô@–m¥¼özÏö ð2·#òØ^íf˜vŠÙÝ ðÚ&)Ál³º{¸+LëpýxPdîƒm…+ØØµ¦P­i~ƒÞ]ÙÆßŸðÂÚÀ¥ endstream endobj 68 0 obj << /Length 95 /Filter /FlateDecode >> stream xÚ…Î1 €0 Ð=§Èìú[“¦ç©ˆ‹÷_­ƒ"´j†?ð¡‘ÛÜÚ™a¼€,I1ÏÊAÂ9¼÷tC†ŠGGQ¥B!®%ùUúN^Uzy~v…_¡ÒÆëD·Ð51 endstream endobj 69 0 obj << /Length 466 /Filter /FlateDecode >> stream xÚ…•=’Û0 …{Bu Aüò<ÊdÒìýÛ)Ê¢#¬ãÂÃùÌGx²iÛË®_K¡²ÿÆMZE÷½@éŸýë‰^@ÐA´JŠŽ-È BXå?ìØ>ïd°¦qvÆVõ²SZ‡;;·¢u¯¥«[<¥s¤Pg4ž?¯‚êýl*¦QÛÂŽ-£$ Èä]Ý*1EŠB,l¨ÊD€¥c¯À£§ÌQSœÈÕŽ{[F%nóo=Z8 o•gT]@¸÷ïfV£+ƒ±ÛüõØ2jzyÇáˆwùÂHd:ê„Þìêý“¬ÊW@;ú@â¶vQUÐ±ÊØªMwZ¸=ò¥VAOçJ1wͨ*C9;U#±gïAÚ™€}1êN¨bìÖí,<³"îà#s7;¶Œ ŪÅqóËM4°þsÏWBYqÎ9EfboÓPGúBЛ].<ɪ¼YôkLøÏ$¦éÃ."½ªIتMw¶˜‹nwäµÎ´sŒãùþÊ(^¿ú\c¢Ïy_]Êh7Y?æMz²ððÊWF1Nœj”é!ªAï92žùÊ( ½îÐÀ‡Ç7«Ú扡NèÍ.ždU>þh~Çöwÿókû±%O÷ endstream endobj 70 0 obj << /Length 317 /Filter /FlateDecode >> stream xÚ…”KnÅ E笂qþ^OžªNºÿi äWÅ¯Í ²N|ë‹"½å’kõ—x©\ò SU0ÂÞs2žüýD'Pì •4D[ ŠBA¯ÿa[ú»SD SG Ù]}Q*éð iftSsí‹m)¢¬ŒÛofˆ…‡C™^]Pa•:*ÿªmœGÔϸªj»bK•&P‹Jº•á«Ó±v «sïˆzºÀ8Üp³S}2Ÿn76ÕOz±#þ'¹+ÆfûIÞ“1«÷]Œ 2'±»6ìôé¡ ¯ÜmÏMÁ»ÖÎåÖaŒÇ]ë˜8+A›i{gJeªP犢8ó"CÐ5µ“m)¢ä7díx149îŠç!Êën•¡¯äü¬êbÔ¨ìê€^ìHáIîÊÇà-ØÒWþüH?ë´Ú endstream endobj 71 0 obj << /Length 353 /Filter /FlateDecode >> stream xÚ}“In! D÷œ‚u¤oyd8OGQ6¹ÿ6†nQ¬¿£Øåj£ž1‹äq6ÿ0ÁüIIÅ[nÄ–"¸¢€ –‰äÙÔÊP¬øêJ¥†@•Z·>»\ H5ă])¢Ò¼c/ªÕèé¨eWЍ¿PGµtW¡XNÆ¥@Á.Í«#º9s]®L›3²"™°ƒ«qæwT­Ao:û@^¸}ô´fœç§îÿPTe”¾Èk©ÕÓ²ÍNË6¥RAÛßjBoè+WEÏ›¸&M\¡Î9ÈÃõ6$oÑ•¾±€ÉÌÁ‘»ˆnFÎÊœî˜Åí+î·”}¥£<{ ìîòk¡ÓÄEݹ»šÁ,Înß܈€*·5 ×2ÿ‚͸ðÎl@7ˈ¬Í»ïh(ú\쮎è> ù«`sw¿o³óÕÇÉåØfÛYŶ”GtOk(o}ümÑT=ùë#ý}-âp endstream endobj 72 0 obj << /Length 448 /Filter /FlateDecode >> stream xÚ”MŽÛ0 …÷>…Ö†%ÇE1›¹ÿvHEŽ\˜è4@ç³(‘ï‘R´R‹YùÀ1Šú?åZ~ãa ƒ°÷xÑ¡±p/_)}3Åj¤5Cç‘@ƒŸØyü{¥(¶Ø;c÷èÛÊ&ÀûȨà¨i¡:`¨S?¥‚ΈóÈ(‰‚Õáå»^@Ý7*4 xT£ó脲´aý-È Í=Ïvp‹èŒŠyæg‹áÒ4j iEtBÝcÀ™9s©32†"êÎèfØ=³W>½JTƒ8 –EtFE;Œù¨o3Ó‘*Úº|4]ðØ'd­«üÄË./¯Î#6 ÁŸ”ÄžÑxµ‚A"öÁ°P(WH—¨ }vŽ?\§&p£Û´¤ðžMÖì<þweý颠øªÒÛUB©¯”næ?@1 Þ ®î´ k_"yI %²ëЍ«;¨Ëê­7ržÅgfNÊF¾jåâƒùjËóȨÐå"ªÂtx³ho[WEF7ÛƒË]×U H·³Ÿ”E–Ò1®2å§ÞßÃ|±¨úI‰}Ä9”ØÌ¿«ÅÄ•}½ ½Ÿt»Åî–ÌK,sÕ{ üùu|Üè,À endstream endobj 73 0 obj << /Length 399 /Filter /FlateDecode >> stream xÚ”9rÃ0 E{‚uf‚ÁÊå<ÎdÒøþm>eÚ”#ÆI>Äö!¯ž8Y¤wi-9Naœ>d³– G«ýK¥bݼ®ñ„$EjY¡Ë¶ºW‚ÚŽ4Œd¬‘p*dZźç‰+)®3êož`*?Øe[QÉ•Ã2GöU`å{ÎNºGºl XYôxF£àÉIœ©î-sŒâҔ¬1’ÇtG` # X“¡Y jÁ„Þ—#sŽ»åt´zE' ©Ô«ç%;znV²xÍàýòæA­Kxô_*û/xÙþ÷—¾6Ô>>LÑ^—t2ËŽ‘Á*äy—²0Å>1èaA•Û`pïQlïM{ ¾:'hêc°Aß#+®Sþ :',ø”Ü×i2 ¥žÞ³&Ì"õ5¬Ê- G”^ï±ÏÔ¤QíîØ /j_4¶'Ö«>SEl.ÏÞ’jì—ßû}¦sZ–m¯[ÓjªÐ@ú|Û¾•´: endstream endobj 74 0 obj << /Length 248 /Filter /FlateDecode >> stream xÚ…’;nÄ0 D{Bu ‚_}ΣE&÷oCÚ¬3‰ cð¤ÉcŠöе™¿Ä¥ Ö•¦0¥VŒ§~ÞÑ70`-E«$Tµñ[åï*sggìt;»‚Päè4álúª9õS:†rwB™ ,‚¢)àáþÊÖ@ô'[%£‚ýRÓm\ý íóVɨPE¯ *ãVswBy(Е]è•ÈöÌ~±¸ù2 PÌ¿f'2á”î„RïE;CÝ Pë C}UüD¹qóŒ’1Œ(« w ‚ƒq§ípwB_ì9¸wr:oãý+X壾¿•/Ú~ [ endstream endobj 75 0 obj << /Length 640 /Filter /FlateDecode >> stream xÚm•IŽÜ0 E÷u ­4!NÎSAMî¿Í§Û€Õ›V=[ùõI[ᔓrúaI†®9ýæfªÅ‹&v£ÚX<ý;AæJ¥rk‰K#sE˜û~ŽoŠSŽ?ì)$Ü*":žjõœZ£øŸcórgj=I%“[A`q¦>_èû9@ü ÇÞȘjUs’@­L¹kä™;5ÇòÉL y¤|¢Ve쎓}WÞ:õQdý¦*•Ø(If*så¾ôîTÕtÖü¦!aiG̈-”caRi¬IÊV bhSê-ÂHíëê‹­xÊL2Ð÷s€¨$sT*këZ^2|?x!c§È§^añpk}€uke)åˆÆÙÖµ[ß  Ú½}é¸åšá~sÞ`÷r÷e4ÓÚ-Z†¦ò`¸§•^IGõ7î֭—=ßTá–é CØuá*Ê\_þƒÜjŠˆkµ…4Û}¦ÍFÿÇÙ'ªpÝt‹V8~öÕ!óã›ygÁºV*B9®qä³;úD¥ëŠhðù|*ðÛœ87ƒæÊM¶V7sL$¾ÐºÌƒèM÷4»Í0ãz]{1Åœâ<-~¢§æar¶ýTÃ_«AN”1Ýö)Ä£õqÂ6ˆuá¡Ú‰âýUƒª¬³ÅeZe»¦÷‰ÆŒš®¸nÍQ(éÃ7‚›:ãÆÔÐ/3¢x]™™e²‘™`Ö͆¯½)>U‹1úE†ÿ Ùª-Ÿèƒå¶G ¼´ЉUl~Cã¼&Ëõ9T„›à¥e³7SØÚ†Ø?h½:†û-ëÍžbß4.zÚäf½­Ùƒb5æ›]CŸœIßñïçoúóëóÑêŽÔ endstream endobj 76 0 obj << /Length 321 /Filter /FlateDecode >> stream xÚ…”KnÄ0†÷9ëJƒƒÏ3UÕMï¿-ÎLcKAî.ú†Ÿ—;< $¾>ù5t%0ÇF½üdPŒPY›a÷Z> stream xÚ}”Knî …çYã+ÕÂ/l¯ç¯ªNºÿi1¥It¡ÉÈ|Á8>ÇD\J-MÊR‘¾PŒòއTkÚ¨T¨ù”¯ »ˆ5@C÷zÈ¢@覽2‚ˆö:vC‘´Þ™*(f×à,¼2Dý­Æ lýˆh3ÐÞ—´ñÅ+3ƒ³~‡wž„…Ü3×ÿÆßäu|–Ç7N2å¶ endstream endobj 78 0 obj << /Length 175 /Filter /FlateDecode >> stream xÚ}‘M C! „÷ž"ë.B~ŒÆóXJ7½ÿ¶±<¡`x.D>fÆ ©î@ÀW§ñ€'¡£y7 ¤uà“0ì¤á5v´&–¢Y2Ö_Ø= sB…ö˜ÅAÈ‘8hÊfI•ZÑm¨[ÇÎ+;Rw)R´íN¨4¾<\+š²„Ûeçà’Ùr'TGDZLm26KFcC(¾~¼g³dT†\mv«“ÄÔ§êXüIfyÃëQ¾íœq^ endstream endobj 79 0 obj [ 189 302 191 373 503 511 508 189 668 683 669 613 565 188 521 757 640 624 741 615 642 659 514 515 491 484 515 313 489 488 154 153 152 769 487 519 516 484 347 461 271 484 488 ] endobj 80 0 obj << /comma 36 0 R /hyphen 37 0 R /period 38 0 R /one 39 0 R /two 40 0 R /three 41 0 R /four 42 0 R /semicolon 43 0 R /A 44 0 R /C 45 0 R /D 46 0 R /E 47 0 R /F 48 0 R /I 49 0 R /L 50 0 R /M 51 0 R /N 52 0 R /P 53 0 R /Q 54 0 R /S 55 0 R /U 56 0 R /V 57 0 R /a 58 0 R /b 59 0 R /c 60 0 R /d 61 0 R /e 62 0 R /f 63 0 R /g 64 0 R /h 65 0 R /i 66 0 R /j 67 0 R /l 68 0 R /m 69 0 R /n 70 0 R /o 71 0 R /p 72 0 R /q 73 0 R /r 74 0 R /s 75 0 R /t 76 0 R /u 77 0 R /v 78 0 R >> endobj 81 0 obj << /Type /Encoding /Differences [ 0 /comma /hyphen /period /one /two /three /four /semicolon /A /C /D /E /F /I /L /M /N /P /Q /S /U /V /a /b /c /d /e /f /g /h /i /j /l /m /n /o /p /q /r /s /t /u /v ] >> endobj 82 0 obj << /Type /Font /Subtype /Type3 /Name /Fo1S0 /FirstChar 0 /LastChar 42 /Widths 79 0 R /CharProcs 80 0 R /FontBBox [-46 -210 769 729] /FontMatrix [0.001 0 0 0.001 0 0] /Encoding 81 0 R >> endobj 83 0 obj << /Type /XObject /Subtype /Image /Width 512 /Height 768 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 84 0 R /Filter /FlateDecode >> stream xœŒ½‡rYÖeý3mª]•$:„÷žÞ;xÞ{ï½£—WUõ×3ÿÿûæI$AJÕ1+2.AŠP•Ö>çÜ›‰¼o%ç]ÉzDi÷FÊ)‰;¤1§<æ”Æ\×Zعr,ƒ€mÉw±t}¾ì¼»lnç’×ós ø÷DêŸÅÊ›fGÔIGõxª µ¶ªQ—•Šë™ôR2¹ R©•Lf-›cäò«…âj©,ªÔDÕú:£¹Qo‹ ®­Ž4Û€W@³+mwÍ–ŒCÑj*š e£®¨×м^–5«òV]ÖhHšMq«%i·Å Ó”têÒ6¾›—µRŠvRÙMh;qM3®˜¢U‚ZXU )+A#¬¬„å¥8}½s½ Ùþ¸ü[üê¯ ÇßS®&ÿŒ\ý#xþßé/¾“߉È&õŸ*|'òëc©÷Dì9Yw‹\‡ëŽýuÛîÚåÞÚÅžè|wítoíô€qr¸rr¸trôæøä—Ó³_.®Þ\Ùß]û~ñÞ†Â˱èZ2±‘Ll¦â@ˆ£AIØ/ x¤×N‰ërÃqÄöËÇժӶ沯ºk^׺ϳî÷nü¡ 8•&ŠdRžN+A&£ÊÔ¹¢&_ÒÊšbE[ªiËu¨4´<-¨¶õ ÜÑWº:PîhKmM±¥Î·T ×T²EC™«+²5y¦*IWÄYŽLyS_æªz=_‘ªRP¬ÉJuy¹¡¨4•Õ–ªÚÖÖ:ºzWßèš}ck`jÍÑVo²Óíöo÷7‡ƒÛ£áÝñèþdüp:y<Ó§óéÓÅìýå͇+pûÑ&pó/^ÎÞ_L?\ܾgÜ<ÏÏç`z6¹9ÓÙñxr8 {`ÐßíwöA¯½×­o·«ÖNÅÚ-[ÚK'oéd-팹“²´“ævÜÒŠ™›QS'bi…LÍ ±á7µüfÐX‰®›èvúÁ]€Å ´†á}kú1ìöý;`8g4…ÀoÀ/ìø¶Ú׿®ßÚ l,¬Û¡­Nx`Ñ ZmÐðYë×–š×\õ˜ªKÅm.»L è2œ¦¼Ã˜±@Ú¦©+]òR‹kæJ—ÆâL>U§NT y(Nˆ3â쾸t ®íKZÒî¡lx(JnÅ·G›÷Ç›OÇâ÷§›ÎÄ_.d_/åß®¿Ú”ßìÊ_ªßœj_]šß=:€Åon-ßÜ<_ÜúÏýg·ñ£Ûôä6>¸LwnÓ­Ûtã1ÍÜæ‰ÛÛôžŠˆû¡È~¸qu¸~Áq~´v~¼rv²t~ºtqöîêòþäq¯ø®E0$º‰RÉÍtJ’Nˆ“1q"*‰… ÿÍ€G|íÜtÛ`~çÿ üåÏý/ú¡ÿãq9ùògäùxåÿr]Cþ/7ù¥6/ò?(´ÕÿÝÿßGÀ÷¥¥ùQX»ãmø¿w³Ç˜,F¥ç`1˜Ÿ˜¼?‡ùIþ“û0ÅOáÇïŽÇ7G£éä?Œ†û¼ü{;½6£ÛÚíÔ¶ÈÿmÎÿíœùüß›YÌÚï·@7´ýluÎù¯ ù þ‡Ø¾mb0§÷’?ù¿ã³‚ÿ„ó“ü› ]›þ­?ö¿±à4äúœ]—qèHþ q¡A@þÉsuò”3ÿ±2q¤HIÿ÷7áÿÆDðÿôˆùÿáDòx*YôÿW›‚äOþÿÚwiç,ˆ¯.Æg—|rë>º \ÆG—áÞi¼uo\FÈŸüOÿ#¿y®}øÿ&jù˜ÿ&f]ŒøŸ€ÿ…ˆâ9|:¢ë׃^ÇwCúnØ Düó/BYF‰m0Œ[ˆQÂÊR e£40Îü¦~Êà|@þgSu£Jù?ñÚÿ)õ¢ÿ!FJCþÇfq5Èy×¹â=é%ìëQûˆ8DÇjȶì¿z ®/ÞxNß8Oߺà®ó·Ž«wמ¥ht&¯7!Ùx†Ê_Ó(QŸ—+’|6[JÄ߯co ÁÿTÿç kð±"*×6Hþ‚ÿ_ÿwô ¾UkJ~芴õ²´ÎE@½¹ÙlovÑ2´¥½¶¢ÛPtËŠVVÑN+ÛIø_ ÿϳ@ÍuºvLÛŠja ÖÈyÿZÒõøâÏQ®@ ˆ]ý+tþsðô]ä|3|! _(B—Šà…4p.ñ_lúÎ×=g›®“uç±È~¼®NÖl§¢«³UÛùªírÅn[v:–a~¿_‰lÆbVð'Å0&-Í$e¨ü!ÿxXõm†<ûšëjÍq±f?ëð¿ór¯¸m"}Ýã]»7àÿÀõfó$"áü?/þ³êWþ¯Tä‚"@HÒ¾À‹`Áÿ®Î„Eº´±h(ýÏh³€ä/ø¿3²´'Û)k„ ÿ¿Š€ñÙs.¸ÖàòTö?k?Žßss8š§ýñÞpÄ1Øíu·ºk§¹Ú k§fiUL«dnMð+kbþO›àÿVÜù þg´´CV2?è…÷À«j_pþ÷õ?‰½{½ÕñZA×céy­=n-оæiy-ðËk‹AZ~‹Ð€` š>sÓg}éSÅm¤XôÚ®)›$¯Ô u¡Jœ©à’üPÿ§%ðfo3·¿QÞÃÿiÁÿ÷œÿŸÎ¤ïÏ%Ÿ/_.•_¯Tßlê_íšßÚߺ»ô¿¹y~÷¿ºzÈÿ“Sóɉ«ö£SÿÞ©{pêÁÃpã4Ìœ†©ËÈÿS´o%Æ-ø1^Éÿ&²ncV)€/_F1 ¥ X=¤Ôt‡ ÎÿÆ~Ô4Š™Çq Àbµ!°¦aCR˜`˜0’æa ˜INûIC7¡gÌÍ:Qu'¢ XåÿG™ùÑÌ»)ä?J(ÇIÅ¢üçhæe¿jãÉzÅÏ&Šÿ„c-n_ÙV"àòÿŠUþž‹wÎÓ_'oàûÕψ1¼’ÍŠjuq·/L”éz0R7[²RYŒ×“ÉåXô HÄßAþ4ÿáý_åK¢By­T]‡ÿIþµÖ¦àÿRoIù¿Þ‘ÿ9بV’ÖJ4äÿVGÜïËýŽ|ÐV÷ëª^IÕͪ;)‹ÈŸ£—Ôpè(­¨ªSÓt¨ÚDg”pü¾üß‘«?Åì¡ nÿWäâ_á³·ÑKQìR¹’‚Ð¥$t%\­ïźç\ä:_#H×.ûªÇ¹êEÁï] ú×"¡xlæ‡ö³)i6%‡ù9ùËRI"$‰$¿Ï!r_¬â—Àÿ\ý/r^l ò÷:6®ë>×+þ9ÿ‡Qÿ‡¥äÿRYSæü_­é84Bÿ) üWþ/4™ÿ³ äOþÏÖ¤Ô0ÿ—¥™’$]ÃÿBP(°èÿjG]ëjê=íËù¥5~ýÛýÁÝàÿÅ.þ§+™_ÿøéŒ†ExÛhÁÿ4Ó}È¿7Ú wûƒ~o›É¿müß®šáÿVÙØ„ü‹¦VÎÿ·Ò&òþÈÿðÌ¿ú‘}@’EˆÅ5})´|aÉ{,-·t8hÝt™óF D€lOÚÀ+kSãÚòÿe—¡ä|öÖÆû_ò\™8S$O9ŽåñC)üO# ô>ïÿÚ¸Åùx(žIgÇæÿséÓ…ìý¹ìÓ¹ÿCþßœZ’ü+ùÿêÑ c’ÿG‡æƒSóÁ¡{rhïº;‡næÐƒ©C?qÁ˜‹æÿkËØ÷ÚÿÓÐdzÿIþ‚ÿïâ/‚€^¯R€‚`áS€‚xçD_ Ì¿a1_Éá4‚ò‚3 âÆ~‚àÍ)1¢êgÿÇXåÏù_ÿ³ˆ2ù÷BÁÿ£„òÿ±ÿä?‰*‰¬GžqËRÎMøòÙ–£WKaÛRøj9xµä¿\¼ÿÏ~q]¼õz~‡–3™õjMÖí©U¬ì•6“&³ÛÇb+‘лhøm2¾òìÿìZ&¿–+®Êë(þáÿJ}sQþTó eÿ«ù‹è½!cðòGý/kT”Õ¢¤\ÃÿÈ#ø¿Ý• FÊáP9ê«F]õ¤£7 ƒ²®—Ót2ênFÕO5#¥åÐ#:qÍU+¡hÄd¥ (ãyùSÄE¤¿$m?Ç®ÞÆ¯VbWëq›˜—IÂŽ tŠNqÀµ`fŸ[ðn„|¡ä¼ íÇ¢¼öÓ<¹´"Ÿ”çŠL ò—%‚¨üyù{.‘ +ð¿ûBäºÜ ¼W¢kÉ“Éß½ôJB>qÈ/‰„$1ü†˜<•€ÿÕð.§ÉçÕ XÔÂÿ•ªn.技WS rS  ýE$ÿyý/ƒüSåMÀÌÏ‘*lŠÁÿàu €ú¿£†ÿYôuBpþ·’ÿ©þçý8z8ZŒ2¼œ?çþç{®ø‡ÿ{“=ò?äßëoóÅ?ó¿¥Ý0·ê¦fÍÿ7KÐ*áÿfÆØLš)c+ih@þmÈŸ‹È¿ÙîF`þ]0ˆ€WÂãè!ñCÿ³ò~îÿ¶ËN#¨»xn¨Áán}Íc ÿÔÌ‹ò?‹øŸ"€üJN}Ñ¡Ë;´9»&kS§lªä•2q©H\ª¸â_‘8‘“ÿS'ŠÄ‘Lð?Zø¿t ®Jš‡ÒÞ‘tp$Kg'ÒÛSÉý¹ŒùÿRþáBþñRñÙ¦úêxö?9˜Ÿ&?‚üßÛµÿ“CÿßÚçò·ÆÃÐa!Üæ±Ç<ð˜(8̯üÿZþÑíÛ˜ÜÅ-‹Ü'¬É-\¾¤÷€›¸™R`5 )À" dÌ?™^1 ÿ䞨Ћ¼ùÛ1-`5¿À‚ÿ»!é¢ÿ)Øü'!§xå|I›l:Ä™Q€œWµà&"t¹ä¿à÷|]goì§ÿt\þâq¼‹FßAò§«DÍ?˜hÚ}9ä\€ ²kñøj4²Šî‰,%b«ñäJ"µšÊ¬â»\ñ¿Q¬l”ª›¬øoˆIþ h¿'-ŽÅ`ßmIkM £.øÓa~P­HëeEµ(+—$XÃÿͶ-Ép¬šL4ã±v2ÔM†›¾yÚ6ª†QÉ0,hyu?§adµÃ¬vÖÊt4 j§µ¨¸XK¸ŠØÿºú_Ôdœ?gœo2Ž¥„})i_Eß”öJÓ>YÒ'ŽûÑ $’r°1N"*AUŸNH3IVêç2ÒBN^Ì+ŠyY1#)¤Å…„2WäbÊLD‘„ü½â sÃÃ_2íïÕÆµm`á¶a½î³oø›š ›m„®¥a¿$”±?”ù_ÿgRê\F›Ïê ÿBAÿsÅÿ ÿ×êZð¼ÜÐV›¼ÿK œOP|çiª,aPx‚퀰 ÀZ€Ú³ÿYÌýù3ÿôð?ä?÷ÿ–Pü þÿ/ðJþŒÇc€÷ã§ðã£ÛƒÁl¯?Ý펷{#޾µÛ³´;¦G»õìÿfEß(ëE}« oæ Œ®‘Ò#˜ÿã:D@+näýµö¢;»ýØÞ º7ŒÁö“Ø‘°~åaþÿª šί9 ø²ê&˜ÿë^#ùŸ"€Ì/D­çòçùÞÿ àä# s¥J_rþ?“%Ïå¸&N¤D×#YâxÁÿ›åCIíHÖ:’uŽ¥ýcÙðD:=•ÞžÉï.dòÇKÅû ŇKå'›ú‹CûÕ©ûæÒÿê6üæ1Ò|õˆ/n=“¿K+ÈÿÑ®á䯅ÿ§vÉdדÿÑÿ‡^3EÀÄ¿5ñ[fÁ­›Ðö,L¼”?çÁù‹òR€Ú…0¿vþB§ð~üûÁ?èÿ÷"f2? Ž”ú#/dp~© ¬äŸ)祴¬”¢Ê\Xž Ê’×Ò¸Grm2ùsC$ïÅÆõå¦Ï.ñÙÅ€RÀoß@þä:qäšµ ±<V$"òdôü_ÒT+:P«2ê5=ùÿUÐ ¨ÔЀBS#DÀÂðŸÉîI¢øß"€ü_¨Ë@±!/5àÿÆÐÔ™¸Œ—{£Gä?‚ðsùöKf{½É;_4Þî ¬í¾¥Ó5Ãÿ­¶±Ý6¶š¦FÝШéü_/ië " ™×ÕÓÚZJÃ" ¡gþëZ É¿ÛêÅa~Nþñýal?Ðþ"ÓèÑ$ÂËŸü/´´ÿ+DùŸ*2աǵââüÿjÔ…öáÿy/@¯/ú?Rõ*=QvëJ.mÑ©É;Õ9‡*cS¤¯ä© æ"~,‰‰q‰9è2Çâü±¤t,­˚DzΉ¢w*žÊÆgò›sùí…âþRÿ¶k>»Ø©¨þ›×ø=xoøàb3AþwvíMÇä¥Ûô¿àÿ‘Û^ù°’ÿ‰ÛWònßÇ,q+xLlÑÎLm ,¦¸oÝrs¡YtkµŽ")ð=ã™vIþÏþ˜&1 x%4œù‚ù;!=#¬í£ÑrãhM3¢n…•<9h‡ )EcÁÿ¬ˆ¿Ž¾øW-ÊŸó¿"ã–$¢¸}eîÿ¥ÈÅJðbÕw¶ê=[ñ\¼óØÞx]¿ ªÏå6«õ56`*ä-“ü#±w ¸ä¼ ѬƢ¢xlóÿ ù?W\/Vı..5xÿÃðTü æ_„üO﬷ðÇÉÈÿ•*ïÿrQÿW+ì•zCÒéÉ#å¢ÿgC=óÿÀr×ßzì= ·°¸éZf-Ó¤n×Ì`R1! Æe#®ý’ ʺN^ÕHËJ©ÕtðçóÏ!ÇŸbŽ¿&]C¤Ý¿d½K9ßJ1²YMÊëYM5§©æµµ‚®\PWKZP)jÊEU­¨®—4t­Ôµ¼ªšSV²ÊRZ^JÈ 1i!¬Ì hܹ²omËMn+yþ÷]‰viÀ.ñÛľ«M\±†üƒNqòwI" çY2¤ð*¦LÇUÙ¤:ŸÖ2ºB^],hJÌÿºJYKP­há.ž©4‚ÿ‹u5à"@Sli_ùŸäOþÉ’øUdËR«ÈàŠø”[üˆvª=m‹€?jù3«/øŸä?‡—ÿ3ÿ¢ÿ›&qþÚS³ghw­Ž¾ÙÖ5Fö÷€@D,⯅÷¿–ó¿šü_Oêê1-óÒ0—ÿv?±ÓO@þœÿßûògþîƒqôõ\ˆ?ÿÃEMÿSÀÿ‚üänƒPùð?“¿×„èpþ§7ü±ÿµˆø¿àPçíª¬] ÿ'/¤‰s ]ÉÿB$OÄ },ΞHàÿ"çÿÚ‘´}ªèžÊûgŠÑ™|z¡œ]*î.•-ÀÓ•òƒ]ýÑÁûì`GÿÅkøzmüæ3,h?¹u?€ù_Èߦ]évýà¥ÿ!ÁÿÓÀ¶ ÿÛðælÝE·Èü‹<%·ß§v‚ÿ…¸ï7±mŠâU Àü“°…Ã$°8;"ÿS/ ÈŸüß ›2;¨ã iZa E@3¬á )„h†e­ þïF•äÿNPÒ ‰$ò?EÀKÿ«Éÿ4ùGxùCê¬Wœvo$k Çj̶ ù‡Ï—C—kÁs‘ÿ|ýú|õÚö.à~‹,çrëÕš¤7”õGòÞ@ÞîJªÍBy=•]‰Æ—Áw0¿Ï· ø_ÑÈ"€†?Lþ…|i#_!ùSåù£Î‡ó¼9T´FÊÖ@±Xÿã»xO­£¨¶åTÿWêˆ9 . VQWËŠJE†/›-EoÀä?½ÑÍnõ³™îf¢Ÿ uãžaÖ3ݶŸFãíÇÉxí> wîû»w½»ÞÞMggÖÞž¶¶¦- ˜4Íã†iÔ@M(+&Wb¾¿ Úþµÿ%ðü äË•øf3§j—´ª±]3¶ª†VÃÈU’:VY×,iEM#§®eÔ•”²œT•bŠ|Hž H3ײ¤[ul†m›¡«Ð•˜í&Û¤Á+ À"l—…œ² ƒ¥´qÈÂviØ!Žº¤,ê•Ç®e ¿"V‚LT©2 u.ùë‹YC© / ?¨–ôõоQ5ꈅ¡;ZjèŠu-dzÿqÍ7ÔÙšRð?œO槈6„úŸµäÿªj ªÿáÈ¿ÒÕ€¹ü ßµ;/¶€êÿçíàÿ3ís „wrPýßm÷&[ìˆÑÐ ÿ·úÆF—™¿ÑÒÖ›>9ùWË,©kEM-¯nä´ˆu´LþIZÈ´ã–NÂÚMîðþO2ùS ðz„Ê?|0Žì#á pL€€íðÎç?4óÇÚ/;õ\ño$ÿ/VþyñkÏoXt}üI!Ú ÿH˜¿âAý¯):Õ‡ äíJ¾¸”1Î¥É3IâT?ÙüŸ:•dN$¹SiáDZ:‘UNåõSEãDÞ=UΕà ÕäBÉE€êæJùx¥~o×~pè>:õà“ËðÙmüâ1}õš¿][¾ù­à«ÏòåÚüÙkúä1>¹ÜOvæ‡ýí:TþTümº¾Mÿ]Ïþæÿ\ý¿ý¢þïܱšG€j~êåÿ!½Kð"Éý‡ÄÞ]b—@ „.p5?/ÿiÄ:ƒó9ù/ž)ÅBð??GŠÎ‰o±úŸvBz:YJ‡H…h1í«Lû!Ÿy3(HVHÒˆ‹.ø-à…úŸ‹5ÏsñÏä? ªˆ¬w3í^K:Wýù£ø÷]¬ùl+!ïZ,²šÍŠª5îh ä?”aQ®£ž_ƒüc‰åPøüïó¿%ÿ‡àÿ_ÿ þÏ7² þç‹ÿž¼1P6‡ªXÔû2€ï‚jGQã¨4Õ†þGÍ_©¨*æÿzCÑî¨úcõh¦AñÏ"€óÿtd„ÿ§]#Õÿ÷0ÿt÷q¶÷avø~zð~z>ÌŽŸ&‡àq| €€¸î »,²‰¥˜ï!ç_ÂŽ¿DœE¤½ÿÌ…–ªÉfNÑ­h{uS¯ié6Ì݆¡SGè¡}2«€bRÃ|’ÖVªRTUŒ¨ò!UÖ'Oy$q§DmâÈÕfäJ¶IÂWÒˆM†+Ã.‹8ä¼óIûY„[Ãÿ1·,áU¤|ŠTP•©3açM>¡)$µ¥´¾œ1” úJÑ@Àÿµ²P+ëXpê#û þ/ÕØ=Ū¦Pc òDC««àÿtE’%i¢ˆâ_ç/B‰ðcÿו¥†ªØR–_ûß$øòÿÞÿÏ0÷ÿðáÿÝÿ»ð?ûœÿ[\ýÿ×ÚLþµ†º^×ÖjšjUÍþG*AþêjAÿ׳*ò?ZœÿÛ)ãÜÿ[œÿ÷án `ŸüO£&ÿðÕÿVÿS¼ h^žö1×<¦ùäò7½?Wí“íA?°EP €ŽßÜ XpmûЉº¿J*lþ£¦€ÿs6EæR–¹”ƒô‹øŸ"WÈdO¥¹3YþLV:“WÎ3eóTÑ9SöÏÕðÿøJ3»Rߨ4·víƒMýäТ¤ÿàÒƒn$ÕCøæ'žýï1=²»½Øvà“ö|ä/øŸ"`ì1O¼–éµuæÛß·‹þˆï¾YöCû¤ýÅY ¤(îã|P#@@ø€3ÿ6qÝ&NÂi"Z,úÿ™¨u6Ó†r7`à•ÎS€TCþ/üB| À®é³ÿƒ´ìv€˜|Wî¨ê™8ù_ ÿÂÌÿÀä¯Eìü¿k5å`-@ôj9x±¸X½>_\­D¼¢Tt½×²NOÚI!Vù×׳…åDz‰û0ù³Éƒ«$º‹¯ÇëÉôZ2·–.¬Ãÿ¹òæ¢ÿ+gÿ·FjÁÿóP€Z墂E@[Um)k\ÔÊZMªU9ù‹fKÕh‡S-ùÀÿ·SÓlhuõã–qÖ¶²R¼û0Ýœ<Ý~¼9ùt{úùîŒã‚_îÏ?=ð|¼?¹›n#êEi6ú.âý[ÐñçýÏQ×OÉëfƒoJ‰ÕFNÚ.©û5c¯næ0ukÆnEß.ê`þVN×Èhàj\Sލ‹!e> ÌùU¯*é’ÇÒ¸M vIÂ&‹Ú¤ˆ€(vyÌ¡À•-ØíØrh¼\Kn9üŸö«³AÈ_“¨sQM>¦Í'tÅ”Žü_ÊÊyãÜÿFø)P)jà¢V}¦ZÑ+ZP(kòŽª:WÓÙª:SQAþ©²Œü/ˆ£9Q,¿N,F›•%h²µ×þ/µU¯üù þÿþ(ïNþ Nþ¸¾„ɰ`~*þ{7;éÖ+ÿ×;ºjKSiª«uUu.ÿrYY))ËEù¿šS¡YüßH²ƒ@´‰äßKmã:HîrÀÿ{ýØ· p0ŽÂí»`ÞEÙ/øÿUP 7‚QpçüÙ  _Èñügg^ùÃópþп5n\ àED€þ"4¹ ¨yô5¯¶êÑ”š’ƒø?{%çPPP @@þé3&P8—ÃÿÕseí\Ù$x>&÷>¥ö?§ÀÇÌÁ‡ô>Àb‘OÙÙ£÷éCŠ–É=êh"tÛEwˆ›Cð?JŠçû ^ù±Àÿ€üO÷” 7ÿ(‹´8Èÿh$ º)`U€aL FqÖsùçòúÕE¯(ï^͸×ÒNQ±±­¯V—Ë!ä¿JòoÔݾb0²f›É?_XY”¿?ðe?†Ð ¬@þÑØäŸHn$²¢TžŠ&ÿBUù—šÒJ[^í² ’GÔ‡ªÆHÝ`)@þW’üÉÿ•6®Ìÿ•¦ò¯Öyù?û¿®hvÔýä¯Oÿn&ÆéÀ0në‡ ý¤iµ·ï¨ê÷PÞ£Ú?=ù0;ýxsöéöþÿrùõáêÛ£í×'û·6âýýáíd»ßÔ–³âdàMØõ7tðâúï™àÏ¥ØJ-³ÑÊ+»%]·lè–M½’¡[Ô·óz˜¿™f£˜¿Õ”ƒê¢_¿fîY2ãR¥ 8? ìr_Æìx-ð?÷´ËËÌüo3ŒíÆ¡cŽËÄñÚÿLþ»à.üÿÝO±ý‡Øþcb<%÷Á÷òø’9üœ;Ð>õÇÌ"]5€"€cÿ6¾‡·Qü¿x»™°éÌ%Å6ùñæ2îþ23(êÃÿ~}‡=DBÓõ/‚ü'¡áà"Y€Wv°€ÿ)ºÿ·®õõkµ,¨ °  ¦@DêRùgΙüóçròåBY»P5¯4ˆ€Î…†ü?¶éÙ‰+6ºsèîú—<ºÙ„ð?ròÿÿ=fÈŸ÷¿Óü#ù3Fnäÿ½ÿïÃ;‚ÿÁûøÞ‡ÄþùÚ'¾f¾åŽôå—ü1üO@¥"à>y@þ¿‹1ÿÏ»|¹}ÛÀ—óyÑ‹çKòï ô ø¿}­æ™§@sN=  ÿcÁ­åˆ€F@V÷K" åg)@×nHÞ Êû!€ê„šü?0ùƒ¢{½àe¢”ƒù?êX‰zV¢¾¥t|¥_o6¥ý¾r4bþït$õº¨PÜH§W£Q”ýo„?äOþFWB±Õhl%žXK¤V¹áÏzº°Žâÿ{ÿW:Ò ç’¿ÀÜÿJPîª8ÿs4•å“¥&g@þœÿñJ½¥ì´ƒ±n0Ñ Ç*îü¿n6ÖÑðþTƒŠiX5«[ÓúÎMsï®}ðÔ=úÐ?ù88ý4<û8:ÿ4¾ø<¹ü:³}½µ#~tþûÉõëÇ«/OçO7‡³îV³ Ì†V"î¿ޏþ‚ ü¥Yn$%í´ª“ÑvRì”`=¦­EtÕÓ~Á«.º5;k²veÖΜ?EÖ©Î8Tˆ€4§÷Œ[ÁãU¥h°p©ð-ö]—šE€ƒäϲ V§Î´ù ïÿrœùŸä_ËZ˜ü9à@þÿaP ”Jù“ÿ³% H—5©*e²¨ˆå VFóFn#’]'„^P ´ð®®˜û_MZô?äÿÚÿÜS€xîŽæþ?!ó#æœ.FÀâÎ/~ çÿò?‹Îÿµïü_(Ê €ÿË9E™;£Åû?¥oÐ]`iþvànÆ ÿ÷Az0ÿ'vàÿ!»`†ÿ#ÿS4Ðî0ùŸ" ÚEô{€«ÿŸ#€äϵšùÀü`Ø‚üg #¦qdW€"€)`éÌ ë3v® ßB¸´/#@‰xN+ä ÿEÿ£h\ªyÿ_h‡6Îÿv˜9´àÆ©»uéÉÿ$|!ÿ?\[ï½[àÎceþw[á0ršˆ—þQüïŠò?ø˜<€ùù Ú'`þ_ó'`ñ•OYž\=&R‡ˆ€ûø¾¥Åd~ñ  Y&sùsÏbw üû>FïZó·¼*Šöˆ9ŽùŸäÏG€_ó×|€EË/ƒü›>1E/¨”/QNþJø¿ïW²[\pmääÿ˜{%XÍÄVÊùFc³?ÆÊÁPÞí1ù—Jì1±ØRÉÿ äï÷¯kþ(^ FVÃñµpœíÃü©Œ(]ŸOþÅÜ} ¿Œ/þQØwe•?¬ÿUäÿJOÍf¼ÿÕ4³…óËU·í‹8P¡øou5ý‘~8ÑÃÿý¡‚ièæ¯q×8jšàÿ^ÉÐ/š&¥­iyû¦º{Wß¿o<4ŸÚÇà}çä}÷ôCïìÓàY€ øvcÿõÀå·ÇóO·§£ýaÃXMI¾ŸCö?‡N¸J_ÿ#ïÿ¥Z«G¥­¨ªÕTƒºJ@[ökŠ×ÎüÜAk»†n·„ÿ¹ €ÿh. "€伪œWèK†›{~K#d'5b"{Íû?Ö’ÿ…âþçëÿõðeñÿÇþ? ùJŸÓGàK¥þÉ·Ü)ñkþL@xåKþ|Î|ÊÀÿ2'à}ú˜R€A‮‹Y@®t'23Ð Æ#hÀq4áJò'ÿw½j¡üßZð?E@Í/gà“×®e䊀¦OÚ¸–dAÇ/G)ð=‹òïù”ðÉ…ØL;×S.QòZ”‹®³ëõºÎNäý‘¸ÓÝh4Eåòj>¿ŒÊ?zð¿Ïü×|AÞÿá˜(’«Ü™»á+¿(Y©.+5å$ÿzOÅMxäB ÐkZ­à.Ôäÿ*eÎÿìßì‚ÿiøÓéë†ãxfìÕ½²7‡êñ@;éë§]ã¸efþ/;9ý¤¸3-íÞTöï«à¡vîëGãÇæ ˂Π¥Àç‰íëÌñõáìË=Û#þ0;¾ëíuŠê\d9æþ«ÿÝ?¥ÜËz)ù–k¡ÍzHŽÿL%Ÿæ/yÔ¼üÚ‚ýêòNUÁ¥Ì{ ·¼ ÎüLþÜ6ü/çaÁÿ9q€ÀUðÖ¯aõˆüo¬&àjêyS-g¬ät”„p@¨\Ð :ÀÉŸùNþÊx^±hþpVÌȈBé5‚üO ø_hÈÿTüÓS¦Éÿœ™­‹þïLöÈÿÂäg®wÞüã§ó?ò¿pøÿü_ïê«\ñÿ‘Juåý_Ê*àÿJöÙÿlòŸ1ƒøŸk£8M8HÅœy¦Ìü‚ÿ…x…àÿ~p¿Ç§Àö 8ÿ‚$ÿ’?ùò¿IÍâ„“è ðÏojŒ€"€uÜq B¸)€î €ÿAîR^¸”/•Œ EéR)ø¿}©!ÿ£\h†—ZDü/DÀ+ÿ‚ùiòí“ÿï®·Pü“ÿ§ëÌ»…ëÄk…ö ¶öm½þþ§ÉÏ\þ‡?9ÿsò…ÿÁ+óÿV8_üòkAÀµ§EÀ"H˜A dµ¸þ@þs~ü°€ù‰®WÛ»Öt|<Âp“Õ÷?Ì_÷Š=Ÿ ¤À+øÖ`.毤àÙ̸גž5TþÙ¸•­¶ÞëKCñp$éõÙCõ«q.·™LŠÂÁ· èÿ¿ † EÞ„KáÄÛhj)–^ŽgV’¹µT~-S\çÏ|Ö¤$ÿr‹mæ–»l¼Ã×(ø5 1Ò6ǺÖDQêjm­ËËŸ{z_°qÏ.ÐWkºJUËŠÿŽv00ÇÖÑÈ2»=M»ÇIúÍ o˜´Ù}^£‚i”5sÖI~린s[Üw¥}p_>x¨>VNžª§à}ýäSëüK÷ê[ßþulûuêŸÆOý“IÝZKÊ2×oc¶Ÿ@Êñ÷´ó9÷›J@„ –ÖÚªOW¹Ö–½¨ÿáy5µ[m9¨/µåˆ¾5Tã¦ZÒØH›øßRË[à³ ^d (çо@1¯+ä´ ŸçÉ´™¼&™Q&²@ËÉ£YI$#§7C©pz#”Z&EŒÔ*R@Åò›‰¢$U–¥+òLU‘««èVîS Õž±Öç+&ÿñ.´Ï™ÿôf‡}˜ÿîŒÛö=ÝŸㇳñÃÅøñR`ôpÁ˜gzäZ†Þía—÷ÿmþGý_ÿ¹Ç\ÔêÚrEU,)Še©¨*”Åœ²˜‘ÓÌÿõ¬®ž14ÒÆfÆÔÊZ›™ùðŸƒæ?ðÿˆk ÿi‚3<„açÿ§Ñ£YäpÆ­Ÿ_‰Oã§“Ø G‡ÑS0ˆœôÃÇŒà¾À °ß÷ïž}(À °; î C;“Ð.˜EöÀmìð.~Ä8œÅ÷x;Óøö$ÆÝÄµÒ±îØ¡¹ã7¶}Úhx´u·¦æÑS þ/%ŠWŠ’M Øâ’PV/Uˆ€ú¥ºy¥é\i{Wº¾M?¼b‡v¦#˜9MàÆe4Ø¿óXz8á[ï}Œß.qëÛ¹¹Þž^ÃðÖÑ5S=g{Ô P(Ü\3n}ÛwþðÜ{ í?…ÞG?DÀÇØñ§øÉ—äøš:ÿ’:ùš>´ø–9û5{þ{þòß…+ð{ñþÀ—_óW_r—Ÿ³Ÿ2çÓgtý:}Ÿ<xJ¿§è!xŒ<„÷ïC{·a°sÚž¬ô:¾ á@[À(û»~í|XÕ ¨Øæo@E4üJ¢îSÔ®åU¯¬â‘âZõJ‰ºç™öµ²ãgt*Þü}ÿ+TDÁ³žw‹2QÆÇ*ÿrVܬÊ;Ùp¤ ¥ÝÞf³µ^­Š ùõTj-]&ÿ‡oä^€É?úþ$ßÁÿ"» ù§ "ÈŸ?óùÒÿ$ÿúWCc¤GÔ{šZWÃnm«ù3{܃Ëô(ãz‹íü‡fø×^_ßéª[]‹€šü?êp÷ùÍ㜙ü?Ëoßv#à®xîKGà¡|üX=úÐ8E |èž²^`xùqt ÿß4÷:ym5¶‘rý½úküê¯äÿ‚µÚ„ÿëA]Õ¯!ÿ¦wÎü¥y}ÅþM9ÕÜm˜sóƒÊµÚ€ÿ¡wÒ>©¿ þg0…K mÙ¯ƒÿ+!“Ìÿדø¾ª¶@#¿UÏYys£`!¸Y •rì˜h)¯+ òÏj(r9M6«NçÔ‚ÿãY4+üÏ›ŸA@]5äÿdIŠxå’}ÀWþ`.ÿ}æÿ›ÃûÿŸåÏàl¿è>æþG@Ã".„€ù¿=\˜ÿ´µä¡þgû¿ˆÎÿ¨ÿKÕ+ÿã/ó{ÿ³#@©mÁÿ¬þçŠ|ºù—žÿ°(žø)ÅN#`: †Áø_ˆÈŸüOòŸ†™üo¢û$ÿûÄñ}‚"`Ÿ‘Ü…ÿ…˜pOžG€Ð ˜€"þ§F€ü¿0Ù®”å+ ª]©ýßµé(àz\'EÀ+ù/úÿÞ·Mþ¿¿Þ! ò?üO_Âü$ò?äOþ¿ì þ_”ÿçÄ)à#€“¿üÿ[îbÁÿW‚ù‰o±B PŒñcJŠ€»È>{$Qpë{ÿ‚–aÀ< ðþïûž‘ÿ;5äO,Fäÿÿeßû¿é‘·¼Š¶Áß|ïªÿs®•Œ{%{½’ ‹*iI³ªèvÔƒj4Fñ,kw6«ÕÕbq5›YMÄ–#¡wäžð»Häm$ö._‚ùù's«‹ògg>ë²rƒ—?;ÏÙSÂüßËŸùŠ«Ðè#´Âž]µ©£šÿu}««éô0?+þ¦nWßj«›e³#GôúZÁÿ£’-ä?Íñþ'nó»wùâ¾pHA(š‡ï¹‰ÐÇþùûîé]soX4´RŠ‚9fû{ôâÏh2ž7YïR1°VoÖƒ´Ÿª^=Š|á¡+œÿÕÏþ÷¨ñöžkFÕge?Cˆb!&ô@èðSxs% ¯…Œµˆ©5Ö ÿ„™ù?ÅêÕfaÀÿ­ÜV3kmå-òGnd(gõ ˜Õ2º\F àÿ|V—Ëé²Ym&£I¦Õ‰´"žaÄÒÒpZJ‰9ù¯ûã« X¯R-@¼ ¦@ð?÷3’ÿ‹±?Éÿ†—?`•üÝÙ‹iÿ\þ“§+Ò>üz>¢ ò¿0¢[À„ó? þ×Ðþo‘Îÿÿùù¿ºšÓÀÿµ´žñÿSôçG€àÿ!mÇöÿ °h~TþÌ?Kœ 0ap<ˆqø`:ð¿|åÏä¿Ï™@þ·±’ÿC’¸OÜ‚Ô"àU ÐC †‘­AØ*¤ e{ó[Ä *JŠ ¨™ÿ¯Ô+M˦mÛu]v—–žÎê,¦.ö¡]¯äOþŸËŸçÎ˃úÌ|ÛÄ4°sãŸÉ™Ÿ“ÿöbñOþŠÈÿ{ÿCø‹ ø_ô?Eñï’ üVr€_‹v!Š!„ ø¡ÿÿKýÿÊÿ½kÞÿóÛÁ4탥@@Ûôk„âT®ee¯ Ps3êh¸,®\È" ç“/Vþäÿ¬g9ç[͇DåÔF£$ëµUƒf8Töz²NGÒh¬—Ë¢<|žZ‰G—Èÿ¸Òã£Ñw±ØäK¼‹¥—ÉŸ&?‚ü©ø¯4yù³#ýóÊ_˜öÿÛSCkjâ¡Ø#Âúìã¢àvÛfÛ€ ÇW¶ÚÆN_Ó†#" ß3´ÛÚfSÝh«jMRàÙÿ Ó¸lB ùsþß$ÿÛÜ>üO)p_=x¬=µNß·ÏÛ§wƒQÉÜM«ë1IÚý6vñSÜþôˆ€|`¹Z­Uµ€  ¨útœÿçÏÝrê‹ì—þp ù¿vm ù×üF‚á{Èÿ‹-{s@_›s#fiÆÍ¤¥™²¶Ò[Í4Ó~;·Õ‚ùŸ17s<µœ©š5V2úRFŠim.óÈ? ù§Tñ¤2ž’GS2IŠƒÉÍ@bƒc"À[¡ @„Ól.$´äÿ$ùwfÌÿTù³âÿþdxþ}µáOßÛýÏ"à;ÿ³cD ïÿÝî˜ÝÆŸÿd[zö¼ë†–k$ÕüPNþóùÿ ÿsó3þöèü'‹Ž~r @þýøö º ž€Òƒ€^Êÿ&~2 õÿb#@ã þ©\ PpìBûœüæò?àäÈÉÿ„üÏH±“*wé}DÀb 0ž7HÅ`÷,tø_”v‡… ¨Ú5 nÓ4ìÚ–]×qèû`wi9Œ|ýÏùÿÆÃûŸ®ìÏõœÿàßêÿ;ÿ.¸ ¼)@£! ¡ò_,þÿ“üÉü4ÿù5sù‚ùŸÌÿ?e;ø½ì"€R€ø¾àáäÿGþ§@ø„šúŸ"€üÏê¸OœÑòÀù¿~­ªy•U5?äÏpK„@ š^¥À<XG@ÚÝkÈV‹Q5½Ù.3ùú*ȿߗ7›õúFµ$*æV³ÉåTì],Â9Ÿk˜Äãï ÿx’*ÿ’?ÿùêF¡¶Iwû–›Ò*·í ù×{/äO’gflÏÌ<ˆ€±©92òÀ•m®¾Ñ1"ð/·ÑÔwºæî@ËNþŒL(þû]S§¥o6µõ¦ªR—!º=ü?î'Mö·qшʟcîÿÜþMv,¦À"·Å=¶;P=zªŸ<6OïëG“âN?kl'Õe¿(eÿ]Ûðü+x› ¾«äµ ‚R€m°!¿~þÑìÑëhœºYƒóuŸ@æõ€ §\`Ñ€Œ@Xø †Åoq?bh…Íͨ¥³¶@þ팴Җg¸ hdMõ üo(§õ¥»k˜´ŸMk2)u&¥I§˜ÿS)U,¡Ñ¤"’”†’P\ ùûãë„È_óŘÿ)¨`þÏlÆrÁÿù†zÑÿ(þÉÿlvº3—ÿ!™ŸŽúòŸ{ÞNLß;Æ6Aþ‹þ§1Ñðî„÷ÿì`îÿíÎh«5°4ûæz×Xë°*‚=òšf‰è^ú¿œQýÈÿìãÀØý_œü») ù¿Ïù¿#ÿ³….€žÍÇ´ÿФÿÈP>ö‰É³üçò?ääOÅÿÉcЇüÿÚ?ŒJWÛt_@Ýk"@8$,„¨:´5‡¶îÔ5º¶CßqºN&î.]Ó˜cÂÉ‘[¯,úŸàûvý{à>À¸ þ.üàc`÷ epï}hÿCøàcäðSô|ŽMœ~CÍŸ<û5uþ[úæÿ-{Eüž³ý;oÿŸ‚ƒ§hûOÉNòÿOÅñ?%§À¿‹ð{Áþ[Þökîê[ö|Í\|IŸNBý/D¸ÜEv…øÎÿFÁÿ}ïÿ^€üÏhu‚ÿ™ü=ŠŠ[^ö0JnYÙ5Ç-©ºxjnùb;@) ¥@ûZ º×ÊŽW‘®TÓë­’´×”{ìcSØØ§-†ükåõbV”M®@þ‰#[F½MÄßÅÙg{-Áü‰{ijü‹«™ÒZ®²¾(ÿJKÆàÆÉ¿ÑW þ%ÿî©sc!Ú3K{b¦&·ìC£P¿µ µ–×vßÒicÂÿ†®VSUjr¤@§«L“ž‰Û6ŽË/üOÅ?ùÿ&{p›;wù£ïS€m TOžêg‚Iqw”µôSúFX–ó®Äíÿ _ý%îü)åûWÒÿÏ¢_\ Hë!e=¨aœÿ«ùŸ`‰ÀÎüÏ?›…“ÃoäÿEíÓwY:\~sÝgâxþ‘FÐ ÿ·#ÌÿíøV;¹ÝN¢RÝ/Ì¿M³is=m®¥L¼ÿ“Ú|Z—Ki3 u:©N%TìÊ‘ˆ+™ÿãòp\FþÁØf0†úÿ4 zöA–*)2_ÿ· •ŽéEýÏü¿7—ÿÑó!O^þ6NõöEàÿùúêÕhüp6÷ÿ1ù¿?Ýçþ<÷³k¢.’êÿ2ÉŸ›ÿ,ø_Aç^ÎL¤±›2Áü„à´ì.0î(Ý Èÿÿ5Žg‰p›8EkØthap„˜Îüo¢G$ÁÿTüÃüOéÓÇôÑœ€øa#@AðýŽ0;:€E^ÅAÍ©«rþo¸ôm—ùßeìq ™ù-Âg5N¿‹ò¿0ÀO}â!¸ÿ:¸í <„QKàE| Ñ€+{'˜_?´O|‰ŸùIþ¿g.ÿ½Ìí$ÿÿÄÿ)¹þSv‘ù± °†ÿ… €ÿ)p}劀ü×Yð?Aþ§S@#¿Q`è{ð?ûôyÎÿÝ?ð?äÿÂÿ.Y…iÿ{ø  ‰@Ë«¨džå?ÊûI»³Y«­•Ë¢Rn=—ZMÇáÿådt )Ž/%s’ËÉÔR2³œÊ²ÊæOVù£ø-®ø‡üÁ÷cøò½»­ÞÝv÷v‹1³v¦ºy‡}JÑ76¹hLÝ‘…ùC#Âø=OQ”ÐG‚üùPàü7¿’?•ý0?“âì·äùï© ºþ;}ù^þ0¿ã NðŸ"$Û{þ¿ŠWXã[ÿ§Âó}P P € >§X#ð)y ƒà1~@°˜3ú_èº~=}²<ûÄá¹ÿÙ`\T¼*Pöð‹ªç5 Ô_Aý»\ÀºáU‚nC1ì©'C¶çÛíIZíJu¹PXʦÞeË0?üŸŠ¬¤"Tÿ¿K%ßfÒK YÊd—3yæÎü+dþlu-W¥CxÈ?ÿ¨7Îÿ‹“ŸÖÄØžšHþäÿÁÃ.èßïõow{7;ݱ•¶ðØÇ…ͽ±u0µŽn¶áÿÑ”mþÂÿýîV·emT ¥¢š{¦±¦ÙÖõûæÉÀ:éYÆ-c¿¢Cý?ΰ€Ã§éišü¸È‹H»ÌRà6wL)€¥Ðò[:qTŸr¿ ÙÿrþþO{ÙFp)°^Š«~E- åæ6Fᓸû’ßçÕ ŸßÝX‰VЊ WÆËöfßËŸûÒ"D@›ý‹€vd )Ћïv“{œÿ·˜Ÿä/l j s5n*Çrq}6¦ËDµéˆ&V&"Œ8®ˆ€ˆ,’›ÀdB¨ÿ×}aÉŸkD\lD’¼ÿ…ÿŸ±÷~nãÊÖv½õ39œ±¬dKbŽÈ$˜³˜9çœ3À,ÙrÎöxæ|÷½ïÚ«{£ Rž[õTW¢<K|Þµ×NãÁä„ô²8¯› ¼ò¿Ö[á5?\üžç嚟þÖèå qñöôâíñùJ–¿ðÿn÷r§}¾ÅþÇ€üßZ®5—¤ÿK5s¡bÌ•ô™‚8û:3‹‚AYü'ù'ÂcÉ 2¡éLp6ãŸù" äŸ§[ ÂoªúMâ"å.ÚX‘´«Ð~'°%üÏC;Ìehû*LOù"ƒ@|¸{عôo_ø¶`þÀ&ægù3ŠÿE¼‰mj¹Žn Œ¡J“ïŽzþ¥®ÏÊÀ3Â|d("Eh‡ìÿâ‰ù—O µS#hœš˜–ÍÌ‹ö»6 ¯ÞéÛhOÝJÿ_{V9uË 8‡Þ|áß—ÿçAEû’o"{0?çCþìÈŸýç3?fmü2H„ì)ø!gÃó»ÌÉ·iâàä›ÔÑ×ÉÃ/ãðÿëÏ£ˆŒvß…ÙÿJ/ˆ›BÊr àÚM`õNx,}·Y»)LÛjˆW„ ƒ)€¢c®`ŸÍ;fsö™¬mZ¾äN  #féÄ;>ä8ÈO‚ìá„LmmSêL»1ÛmÍ6¢íO‡<$¢#Ç\ü+ò÷< ù±ÿ£‘'òÅŸDˆ€Ç,ÿxö£xöY<ÿ$‹§Ë/ô?Ÿç,Žú|Àÿõù¿ynaÿ7¯Wš—Ë‹%ÀK8ÄNŽÈ¿Þ15{øŸäß1Âÿ(þ›•…zq¡˜3f’â@Ë,Í×jDƒð¿þïÄ-­° ÐZUÿ¯ö‚ýÐ 0"¸ oéÿ‹ø†Hõvx¹°`óLDmO=t;†áÓ¿Eí$Ξ#²g£¹³éÂ5ðÅMtwÞFÝêá8@jÿA¤ù«3#?ÄKÅi!í«C¼Ãÿt)¹oþgÄIõÃþ/úäü†ŒOŸöêR>…¸o>æ‹zf#î™°k:蚢;Åœã|¹¤×5îq¸¯8€ËùêÌý±Ãõƒwÿ_yC#þÈG@(ÿÏÄósÉ¢.ñB¿pc¡Ô²–ÛK•Î2møê¯5/¶ZÊšŸ×ÜöéÝž€þ›S˜ÿBå_¾9þÇË ùÿzŸÑø«ÝÛlu7šUÅÿ k¹¶ùß÷?êÿÉØ$]Ö‹Çáÿdp* 3?"`VD]ÿ>#(ûù.°¥fh´‚«@ú¿\aíwƒÛ ´Þ—‘½ëÈë»ìÞ¨qù3ˆN~¹ n]‡¶ÁMp›ýÿ&¼­D@dûMt›#Îßbnã[7"”@I#¡UÐ,st¼‹HæûGËá€@¹ƒ˜¯!¨ÛLæoÚÌM±nÀ) €Á®¨üyžôÖ7X´ÏÚç5œ’¡ ó¼²á/Ë~Tû,¼hýák+.þYûx22ˆœMÂÀ°ÿ¿JÈ€ÿ9TÈÿ< €ÿß ÿó(€RÀGôžàî½QŠ ·³üét¸3Ýà8Pb¾èœ/œÍAþüä(Øç5 "`(˜ôÑ„œ2ÈžLtšºn‹.ɪÕ&ŠÅWÙì‹tâY<ü,â#ÿ‹xö~ù#0(‡?ˆF?ŒÆƒxâi,ù4–zË<‰™?QøˆåŸ©¼|½£”Q9çGúŸ–úWzFéh¿uµÒ¾^Å(Ç9ö–Ä-Þt‘@å¯È¿o©wõð£ajÔšek½h­ä,¹´!“žOgfòüÿ2Áÿ횥U1Õsóð3lBt"‹†`¥XêW™}H,‡6.Bë2¤ÿ;¡åVÀZ÷›KžÙÔÙK <‡t4´ÿä/AÛßbŽÇˆ rΉÂuÄÏ~šÌ;öe—”ðãvfÆ%ï |Ã߃ Ÿ¨¡ D@ÅmáPÜ¢©a¿¥è7ƒ‚Ï”õ3CÊ£Iï|Â3âîys‘ÿCΩàÙ$üOàõœn—cœ¹^jýïô¼py_Âÿ?ð…GÁØX81É þŸKæôµ»RïoÀÿmTþW¯AïæbWUo»¸ëõýôòöäâæ¸uØ'ù¿î_îö.v:ý- ú½ÞZ­5WÿW-助T6Šú|AÇ_§S3©8ùŸîkMÄcñÀX"0™òOƒ´odüóðÁ§F€êŒ³„ÿWA;´ÆðXû½ÐÃæ¿Š¾7Ñ}-ˆ€«° x‘\wÁMho@xGí3o¢;J·±O⻟$¶ß(ìÞÆwnbÛMDÖçÁÞ5&R`©éYl¸ê. Ò–Tƒ€Æêí“ò$jЂöí–¶c¡ãXà­[m:Ÿ¡ï eüçÔí_RæpÝ+7(éáv¿ð¤ºh“#Où"S€?„ð‡ºý¼Úç‹ÒíaXþßÅö™ïG²ì— iþŸrví;}™·ký/GZÿE€šJ#HúÿÍ=ÿcÀþמ![@êAwü/o‡T.‹tëK.R€A  ¼ä3Ô“fµÈ±€”êp\Fè· tHfc¾Vž*fdzÉW©Ø‹DèyÔÿ,î{÷?¡ ðSç‡äOþÿŸXìQ,ñ!H¦Ÿ&2Oãé'(ûÙÿ‰Â3,>O—?†ü³Õ—|·o¡1.nx¤^Ä9ÿÿ£ø¯uÉÿ$áÈ¿s³†gûz¸Xmö—G@³·HmŸs<-ÍÆfÛÔhXÕEø¿QZªæò£8Íx?àÕª±Y·tê ­²¥–7´£–FÈØTýƒ¦o©#6ï/h=® ÖxP Ö‘ÿ{áõv`¥î_¨øô9÷TÜñÜwôw×þ=Ç Øþ²ÿƒ¶8>Â àœ¢?,üéPßÄÈ¿â^5÷"¨º†R@û¥T=ÛžÑ~Y±›ä¸€{Gô÷b°T X™²²¢¢>sÑk‚ÿó^cÎc@¤Ý"ܺ„kÿÏÑ2gäÿàÙxÀ1æµ·cäï´¿r:_HØÿnß+Ä”þ Æ&àÿXz:‘Mæté‚![2å+–bm±ÜX,µ–Ëí•jwMñÿåäß½>ìÝõoÙÿ÷¹zc—·ðÿ)ü~}„è]@þÝóm­ÿí5ö½¾\­-TÈÿæbÉÿÓÅÇÙyéÿÉð$Šò¿$}SIßtÊ‹˜ƒÿAÞ;Oà‡ùMbªÝZÃß! µß ¯ƒndCÊ¿¯–ý0ÿulŸý;›èáuä@fʸ 3¯Á›È>ÝcÞÆ^‹—·±ÝOâ{âI|šØ{›€à`Ô,ؾŽnQm¢¿áýÀªöø8>5H{‰ä½Ãt‘8‰Z1ÿÙ"èj€öåNnà߸W©Õ/äÿ6U6jqðÖ-¾–wªÿ¹ìgÿËuž_EHûŒ”ÿ÷ñ"qİÿeÛ‡m¯8_ýòç¼Cú_Û‚ü¥ÿï4£€Aÿ‡ýËþ÷[¥ÿå}rÀÅ?¨Ûõ5FºŠMW>Ç“Öe©æW.‹÷†" èÔy¬SÑ10R`ð.Ç÷ýŸ:…ÿ{Mc³:_-Î2“ÙÄD22¾ˆ?JŸ%ObÁ'ÑÀ£Hð*ÿHäQ$òxœäO>NfŸDæq"ÿ4ž{’æ©ÒG, ‘ÿ„ô¿zÈÃÀÿ\ü·.¥ÿ;7 w½Ñ¹\C´ÎW(„ü;ÖÎù¿Ñ5Q#¨mi6¬ÂÿËÒJ5o-æÌìü€Wʦ:†õÅVuýOõÄÜŽ.¶ÃÖVh çc9Ä(`YÅÚ¬ÑáZ"4³ÃëçøÇHß·Tõ‹î™´s4|òØsðW÷ñï¼'C€G dz´ýEþl¢è¤±[Ùi¨8±“ÿ]Öª{©î±ÊJ!ÿKóß¾ì•çò4lä¨úÔ. T¼……²ÇÂ;ðäÈÂÿ.]Ò9Ÿ8›#ÿ;ç@ìŒüvL†ìcð¿ß>Êà±½rÙhýïr½ôxF¼^ò¿70Š„ÇÑñP|2’¤«dâ™ø?•×Kÿ—êÖJs¹ÚZ©wÖš½­æùŽðÿÁûüuë\ÞØ…üO.¯O.®ŽÏ/ûŠÿEì´{Û­îV«µÑl®7›«äÿªþ/•MÅ’µð¿ž†Š‰Ùdl:Bñÿ³üc¾É„wRúŸ#@øßÿ—1þT ®(þ®·ëRþ½ð¡Êÿ<²§È?zxÛÇŽÞÄß&NøÉàA¤À!ÃéÞF™ðIìPy‰ï3Ÿ&>M¼Fà á’z­a¼Mâó×Ú8@\E6µÀí ¶g¡å¶ð@àÎU2êuÃ|)G*äßsZAW¼ôé e'£˜Ÿ'y…ü? ¢ZVviÑA="îg×ù²ìªüYþÒÿÜó‘òÿ!qøCòü˜:?¥Oeñ?äí'C! äTÂW±ý/£¯¿ˆì}~ÀÿÊD°êpã³^{9†ü?Xÿc#ùWOçÙüx–íäÖ>Sóè+݃þD€øßÀˆ1‚.gŸËÚf3§S©ã‰äѸ`$Gú-ÝRÖWrtYm66• '‚#éЋTèy*ô,z ~ ±ü¡øO$'R‚dö‰Ì/äóƒtå£líE®þ2ßxÅþç[½Ä ïâ’¯öÌCþ_`ÿ·®VØüŽ€v¥}¾$äOþ§â¿«o`DÐZþ_jUVšåÕzq¹”·ˆŸkq@DÙX«Z¨;TY¨L͘¥ö?ßÜA{ö+ê(@‰ÿªÿ—hPt‰ýÙ8m´«5Ÿ¥ìÕ‰!ÀÇ¡ã]Ç¿óœüÞ/†Ô²?ç!€¸âÙPuYTÉCøä–¿6´Hÿ?¨}­ÿ 6î/‰uAbÀ-&D#å/)¹y·!çÒgº´s>u6—tÌÆ±³Ù¨c&bŸ Û&‚¶Qÿûl#ÞÓWîÓ—®“xÒ üïx\g$·û•ðÿ¨ÏÇþƒÿCщH|*–œ‰¥g㙹TÞ˜.˜àÿ\Ù\¨.°ÿkíÕzgþoŸït/öQÆ£˜?¿>†ÛYûð<üCþ¿B\ÛTÿõ/áÿÞÅ^¿¿Ûëít:[íö¦êÿuÅÿ•EQÿ“ÿéÊã ]ˆÉþG&…ÿ'ÙÿÂ;RÞYöÚ«Ë{õÒÿåM²×C« Þ@Tþ7´ó÷EÙ¯•ÿmü˜ü¯j|’°·ñÓ7ñC‘G| >Iž‚w‰ÓOã'ŸÆ$ï’‡ÂüxïŠí?M€w™C†¿2Ô8Øãá€v gß# ï(7N¶t]×Iô\Kì|~^xV.©Ã¯¬äü¡ý·¾ ð‰“òÿThŸýÏ ùT5<ïçÒ:_»ÂSòMìõ¶Ë?qøcúø§ ™Ÿ‘=ŸûþêÉyaéÿÿýÏÀþWž…¡â_õ¿毜Ì¥òÅÍi„óµü†ÿ9¤üñmâ; øœV!RL§O&9`þøÁ+Я:]­ +¥ç Éù\|6΄Ƴ‘ÑlôE&ò,yœˆ>ŠG>€ù©çÿ •zœL©ÜS€â?ó ùÃü Sý˜åOÔßëžü­vØÿöûb¹{µÎÚïßlöo¶}y¹Þ½Xë^®t/—€ô½½Øl-5KÂÿkC€Jq±˜3bhŸñrÅÿ7kÖVu±^\h'¥ÿ[k;¼Œ2^úŸPŽðµvKþï‘ÿ—Éÿ+ü/†Tÿ_„7ûÁu j>SŠpEmÏÝ'¿<ˆÚ?ä!@Î1^tÌ”:Zbç²HÿÓ©ï®mH´½ ­üµs î\ I» Cr¹.ˆ×)þ÷,j©¸- -1uÒÆáþn8æé9ÇÝSÆþ·ÏöÈ68¿çä¥ûøüÏ€±€êÿ—nçKKñ?†~?ûBúŸ¯cÿgŠæ\y¡Pµ–êË•æj­½®ø¿¿×9-"@ñ?•÷·ù Búÿü|Ü÷£±vÏÿzøŸ/DNÅgPü ÿO±ÿ¹ø—þ§ðêÒâx½œŸü_.TDñù7ÂÈ!üß o)Åxc`þØ>ËÚgÞBéBûò¿üU-ñÓOS6æ³$sÂ|ž:¥—ÔÑçécðiêH«ýϲGÌ; ¾çnpð(@¤€2#€ày§Œ ]7©žA·|îY,|pá^»ô¬_û×o¨ ¢ÀÎÿ4°uÎþÿ<¼#S€ùâ=à;?{yy¿„üW{>Bþ?&áÿŸ³§ôÌØ~É>\ðÍÈQ€²(T0ä%îLk¦ò_fóƒK·å¡â_ÿ€ÿ…üë.Sݧ»çÿ;å=~ŠQáÓ,G€úKZÿÓŠ€ŽøŸåºU]«4WÍÌSsù¸.›…Øt.:–‹½ÈÅŸ¥ãSqhÿC”ýñÄÓdòÃtúI*C¤óÏ*ÿ4Ì_RÌÏhü?ò ÿyÛ×ôÿùí ¸\'®V{WËðû|¡Ù7jý߬­BþÊ:G@¹`.äõ…¢Aú¿]³6J‹¤µ5×#ªÿ£KÈJ;´*wk²ÿÅ‹ˆ vë¬)½ ð"EuÖØÿ ;Ä,À<†‰³žÓ?`à>úCàô¯²”±“EÇ\õÌ€¡´˜Ò] p.sÏΗ½ éîêCïtýÓ]ÿk§€ùûÔ)€!ù ÿ/°ÿiø[A‡1Ú°Ìæg¢ÿûŽ_ö?!êpfÿXõÿ+¯{Dõÿ(üŒùCãCþO猙¼)[0gK–|e±X[*7Vª­5ö«·{ßÿJÃο±_\Ûîùÿôüò¤qü>ÿ×뫵ڊô©lbÿç3ú»õ?ù?˜dÿÇ=DÒ3Cà™|¼^!`©„«¡åZò_kF6¥ÿIþ‘íóè3lŸ+ÅüyÚñ.5àÓ¤" y*᚟£¿ú.M|–q|‘flàËŒ^2'_fO?Ïž~–9í?ϳöñBï §ß <(@ÿïò\€6x ï”Ñ@Pð1p¾OlFS¹ömÞø·nÛ·ÁA‘ÿYhÂܾ×Ì÷üwšÒì~)^d©Ïç9|®Â5¿òÿ.q Ë~öÿO©c¥þWAhÿÜí¸àκPu ÀþD€:0ä6¿ÿ›ÿÂeCÅ?w~꧃æ/ƒÑÿk#þç!€ªwô?GÀÿËn#ç" s:%ýQ@7¿ØÊ˜k }9>_ŽÏ‚Rr¦˜˜,&Æs‰‘\òU&ùq:ñQ:ñ,x‚ H¥žrñŸÎ=É䟦 3ų¥Çé2‘)?ËU?Ê×^–j¯ÊõQPhÅæX©5 Êí¢E'zò‘ÿà‘çõŸ½G 9þ>ûkâìYçóÂÙXÙ1C³fv+qF·¾–Î@Ù¹x:€šBâ6@€Œ”Fˆ»bÏú%"P. ´"Hò/»Ìr‹+!Q­V.,ŽO„ƇcþƒQßá+ÏáKà:úP œ|Ä)€€Ï1ê?ç¨ß=ðŒ…|‘ÀT,4“ˆÐÉÒ™$*m}6«Ïå ù¼¹X\(•+•%˜Y(z³ÙÞnww;½½n¿w~€zþòúäêæ”¹¾u0l~‰¬ÿypÑßýî^¯³ÛmïtZÛíæV«±Ù¨­×«kµÊj¥´\..• ÖBn!ŸµdÓ†LJŸNêèâƒÈ\<<NÇýÓ1ßTÂ3’î9hŸ/VÈx ¯¥ì_¤¶h¹YmFÖ;ÑVx Ohˆâë<²w} .c‡×‰cp'ùÃêJŸqö9ø4mWPë|Éç);PξÌ8^>O9¾Ê* ’¯r¶/ò'³}ÎI±€Úâi‚·Ie pÞËÞâ|iõĉ5 ;äW¸l±$u[6öÙü,ðyxWvK^Eχê€/ð‰;ŸØð…¦·s§ÏÙ“K}´­~mÛ‡ÍÿsúäçôéO©€"c²$§´ÿO¹3ðcÖ~ÈØ¿OÛ¾K އ¦Ôlã£áè^€ÐÆupý*°vé_U®†‹ÿAÏe—¾u6ßÔΔóÿÅÉŸtøOÝ­kxôM¯4|FP÷ ÿª—({u%Ï<žüRtÏ\óLÑ=ˆ€¢sh‘ã%£™ÓÑÿ‹í¬¥™6=èÿ|r”ý/xÿg’Oeñùg O2Eða®ü$S!²Õ§Òÿ¥Úü/ꎥþ'š³Òÿ´·‹"ÀÊ ý²ÿâÍîå[<ñ¾Ñ¿]½ïÿv{¡Ó^m5—õeDü߬®·ÍâÊþo˜áÿjÜP Ûa+™<$¶ÛÖÈÿA«<Αf„ù ®{þ‡üÁUl‹ýO B«ÍÀ2Ô &l#Á£Çž½¿ºþà?ýcÐþç¨ãïIû£œýeÉ>]±*§æªm±ê°–Ö¢ÃJb, Ì¨¼Ïÿê\Àþço“ hâ€æ,Œ ‚!ÿ+ÇÊ©°ü“ÇS|=¥ô¿oÄ{ðÒ³ÿÂ}ðÂs¨øŸ†ÿ ^ÁÿAü?þ~ÿ›Øÿå2ªñ%”å$ÿæf»½ÝêìÀÿÞkö?”Ž)`PûÚâŸû?ýƒóÞÿCþ€å_-¯¼Ïÿ©˜.OÂÿò¿wFøNñ¿[ùg½ÆâCþoGÖ»±Í~t x¶WÈÚ¿Iž0\ös/‹ù!ÿ¿»kÿË ´öUÖùUÖ¥åëÜÙòvÉ—…ÓÀçy;¥€#¨Sûð&Áí«È–/4à:´)Q÷ m߆vÀ›ð.`çËUñäyaþ/"{Ü-‘ rų"ö¿<«M ÿN“GáZêsgÂWõ¿ˆÅÿZçÿ†ÿEص¨þ?~¸øìiýÿitG¹#&¼©úyÈÿ}·‘ýßvêZø¿bŸá3¤ü¥ÿ›~P"ÀGT|z–¿&tûß5]r+þìn%ŽÇÙÿÍ´¥‘¢ú¿×U`®œBLRð>5’MÑ)  ~²ÙgéìÓLîY¶ð,W|š-ÇùÊS˜Ÿä_{–¯} õWCþ/6§þ£ÿ;—½kÔüÛ—o÷®>A`°qþfí‚#@øŸ" ·„èvÖÄ`òø¿²Ñ*­ÖrVö­laÿƒFÆÿWC†Vh2G©C{íƒë4 ñÃk½ïmñ¯õ?G†ðjúlCïë¿;_ÿÁsô;D@Øöçøé?2öòtøÆw&aoÅÿRìJGè?ù_Ê¿bW~ÿÆ»A`æ…¦ê ²Y¦€˜}0ÓÆaqÊÿÊÊ}dÓÒÿÑ£‰Èáxèp,$üàÀ{ô‚SÀ{úŠf‡iÐK àÿ{<¢õŒ.—¤Hrc!g.*%ÅÿÕÿ­ÖV§³Óíîöº¯1 fþåÑÕå1¸¾²½«ËSpyqrq~„ü_÷:{Ýö®,þ›õ éÿjq¹RX*å K>mΦM™”1-.ÁIFuÉÐ\"8›ðÏ%½t™&ÌŸtë ö?€ÿK¾^öY¯´…ÿA7ºÍþ´Ô‡ÌPùÃü·)2¿èù œ¯åÊÐçZós}“w“÷|s3xÿ¶à¦xÆ| Jv-_m_ ²@¶‰DP ˆ•¢ ·ñ]BÝ_ Ùb@¼0{Ì'Ñ×Ì»ØÞ»Øó*Y›€>KèÔ“Ùäùœ_j„Ï}žÛ½”?ж}Tÿ“ùTLkÖi÷0>ò š?²ÿ/§€µÇAhý¯Ä•ñÞ%^üÉþ]7Eß O§½)æ—•]­üþ÷ðÕ¯«øæïF€žÌÏ(ó¿sÒÿ€Ç¼_€Z@öéÔ)GÀä_O¢þ7"j)C-¥«¤ÓÅôd!5–OæÒ/3™A6ûÈåžCþ(þsÅçÂÿQü³ÿIþõçÒÿ²ÿ#ŠÿÉ÷Õÿ²ÿÓ:_“þçúþ¿x»~ù¬IÿŸŸƒD@¯»Þi¯·š«Ñò'Êëõüü_Í›kåÅZ•†•ª¹‘3"æÊ!<ß ­ÑP7¸u¤-yˆS¼Äîwû?CÍéÿ.-ù^ÅïBuwΤ08øÐ½÷çþ{ÿGmOÙŸåì#4pEë~‘­^´-€’} èð÷ûŸ¯ç;Á¥ÿ95†üÏ@þrš îTi· ËúŸå¯õâH¹•>r8 ÿF©¤Žˆƒ¼j°ÿyPàlògÿÇ„ÿãáY”Öp¬Öÿåâ"ù¿d…–µuö?†ÝÎüßïíŸ÷àó«‹£ë‹Spsi{ªÿïù§ÕØjÕ6ð·¢^^­•Hþ œ·²ÿs)S.eÎ&Mé¸!Õ§#ºT˜ÂÓÓ†hjøÓÊXvAÎm*xÌÒÿ´áKõ?•ý0lOµòøÿMZ‘?Uø½ž=“|&PÞÕo`ùù_òmÁû]Ñ=Ä÷%Ï÷eó-S9û¦ì`¾æ\(ž!¾ÈŸðƒ±¯’ëE‘oc»’Oâ{’Oc`Ÿy?|žØgXï¼`ž{&ZøsñKûnæºú±;hå/g{µ•¿VþZÿ1ä¹ÚSu¾mHþÒÿÚ-‚ü¯FÀ߯]ÿî1±ÿA[ø¿áÒ!dÍ?d~­ÿ©þòWÑ32ØÿŠÏ, ÷<"@88ÆÇ£ì…´±žÖWÓºjf¾”™)e& ™±Bv$—{™Ë} ²y<ŸgóϹøÏ—žAþÂÿ³ÕǹÚò¿ˆ€Býü_lŒäš£ ßË·& íIÞüÊ-]¥m¨vŒ¼¥·Þµ6zKÍþÿŸßn]¼A l¢øgÿcpq½|~¹|y¹vq±z~¾Öënv;𳾆söGÀSÕ¬C€jÉ\)›ËS½`*'uŰ®0¶ƒK¨üù¬-ö+ \ä¤\áñPÿŸýOë?£›@ú¿X®yñ?ëC€ý¿¸÷~ç>üo1økÌöAÚö“SyÓ¸­áµ}~í O-Âÿùÿ¬VûCðCëäý¯üåæÏ¥àêvõòfåòzõêj]DÀ:û¿ÝÜh5Ö…ÿ7Zåõލÿ[ù•z†¦*9K¹`.—L V4•Òú|ˆNñjÐqè«´¼ß·Þó¯v|¼`Iú¿í]m©›Â†æµþïÅØ!@'@VÝ&Œ³ÒöÑÐá#Ïë?:÷ÿçè¿‚'ŒØþžp<É8^æE‡Nè×R¶™ïûŸ# †ùߪõ¿¶çÏþ§D°™ümЪ!u·NMýD.âibq0IªÞSFS¦ŽÿǧbäÿÐþ¸`”S xð „G|‡¯€ÿh$ó‹ÙÇ"αˆg"êŒù¦Øÿéè|&¦Ë©þGí CÅe9ÍÚ×ð'¸Õnn“ÿ;{¨áQÉ_ô®úÇ×ðÿùÉ üÏœÛ@þâWñm—½£‹î!äßoïÁÿZù7*ë½°RË/WsK•¬µœY,¦,…¤9Ÿ°äâæ\ÔùgÂt*á7Áÿ´-ÚeHŸéüŸqsNSÑe*¹Í/ù¿\ˆÈ_YöùÇv¹øgÿߦN¹ùÃí­ÿïGüÿeÞÛKî:Ÿ€ê(û¼ÿXòù ›ÿNJ離Oð}Õ¾»—2O p|&Öˆ¾KI?çSG€7ð;­5Mø"u¬å«ô‘„·Í¹~þ!”Ó˜H}Ÿ<Ôr_ïlø?WõXA£úÑü'ÚEžÃ ~ÄÉ`HþŸÅ©Óõ©*:ùGÜ©Þ ¼&å ó«ò¿ðš¥ÿ{cGD@ËCæm¿©0?H3`h„óêAC>¡PÇ‘óeï\ÙóÏf«¢e$&‹gŵÓ鳩¤}¢•\0Ó\@ÆTÏjY]%7WÎÏ”ó“ÅÂx±8š/¾ð¡øQ¾ðœý_(?åâæWýÿt(2õWYJ±\s°ÿü_jê(Z&ö¿:Xå)`1ØTü³ŠÊþ¿pu³v}½quµ ÿŸw·úÍ^{«ƒ ‘¾ÒüQýo-§-å´©œEÁi.ÍÕ‚‘üž-øç*H[ß" ë[骋?9Tÿ/k6߉€ž Šø_‰ßRݳXq!ùÄÉóÀÁßܯÿ[ ~±ÿ%æx”<{žqŒäÓ´YÏa‚·¹ÿ#ýÏίÝñ¿Uëÿ’fÊ@•ÿBé/ƒ1‚øÎÿµTlFe›"ÿ܉.{<2Gs,õp"v0ÝŸïÈkŠ>cG#þÃWxGƒ§# ÿŸMÄÜqù?˜IgS‘9ö>i,¤L¥Œ¥’[¬æ­µÂRƒü/‚»¶ cÃÛ°7“£˜‡ÕáöA häÝ·þUUþZùwª›øËÐ,­5Š«@+ÿRzþ/¥,ÅÄB>FþÏ…È_œ‰jâc1 }’ÿ™>ë4@þÂÿæ’ÛÂgk @ úrÙ§(þá˜ÿ&ydçç¾ÿ”¿¬óYûÒü\ä³ä¬$?•”/«AÿçZà凚Â÷UŸÀ£e^@ ^ ôYæ„S€‹JøKVý—éæ«Ì)ƒ÷¯Ó§_gŽ><“ÎÏL½Úœ›ðƒzçÕû*?%Ž~ŒZÒ)"@[ÿã+ÿÅn_-ïûßòüƒÈcøä‡/’Jw ò—þº’ÿVéä·àªðÿäùûÏ}fÂcè»õ=ÑõŸ¡€ü ­ ´C&Ð ›š!#P¾ ùK@ÎéA#ddD`\``Dˆ‘_D€o/rÖ€— åܳçdúl¢² ›i`if©C^Ïé«ùùJa¶R˜.'J¥±‚ˆø¿Xú˜"€äÿþÏWžÞ÷®Æ«@© ”Q"àÿCþ÷ýßê­¶ûkê* áÿ›õþõÊÅíûÿúvýæfóæf›ü¾ ÿø¿Û‚=6É!•Ny«SØ`ÿW’æbÂ1)£€ü££{=|³E¯¡î_èˆ;»»¾íþ¯ÁýÿذöÙüm:æw…7‘5¼Ö–g©â4Ãði;] ãݧYà€íÛŸBŽ¿ñŽàŒc,ï ›_èEÕÿû"¨Ú—Aͱr×ÿVéÿ‚ E»Yõÿ"à Þ-<à!$_·Y˜Ú©òç3«BþÿÒÿ¿€ý¯\UßŸŠ½žѽ È_eT‚!ÂG£¡“±ðéxÄ6=›ˆ»¦àÿ„—ÎÏÿÓáùlTŸ #þ8ÊÕìb-g…“af ÙxÖÆîÕ·û‹Ö>d öAáqÕ;•ò'š¯û½nm§SÝnW¶ZåÍFq½‘_õÜj5³\I/•SVPJ.‚r|¡5"¾ òÏ¿Y9Ãe„ùÿ»Œ(þ¥ÿëÈzßRÕ‚ýOMñÏþ—Ó¾Zÿ¿S›ÿp¾òÿªð€üe‡gÈülûŸ+èËZHC€ù±)ÀA04“@YDkDíàˬ²e@ɳüÙù_gmC|“dOäá™Ò±CE8>á9YZ™™=å]Z´J?} xG¶=7‚îvþ?ûhÄqßóÚâ¨ÉŸ å?dþO¢»o£Ûo"[\ó«Ð±Ïl~Á2ûŸ"Àoðßk`ù÷|ùwýÆnЄÐÊÈÿRþÍ¡&ÿã š‘ÿU0ÐQk(HTü3  ,³EŸ.ï™Éº¦ÍÄüßI[[+×ÿˆ€VÑÔ(j…9áÿ)D@PzÅþ§(sÿ‡š? SùòWyÆþgÒµ—"F‰Úx¶>Á—?sÅ ÄÅ.æj{#þ÷.7Aÿjãüz“ý!ËÜÞnÝÞî\_í\^l³ÿûmö?÷Ú¥Mø¿_od—*I œCÚI…¬®˜Öçbót¢¯{–†þEyø›ºù—üO‡·V¥ù{¢ÈÐÿ-uÔÀþ¯»,e§®àœJÙ>Сp¿wü—ß.¶8þ'fš²½ÌØÆ v:Tÿ.þ…üëg«ÿk×ühêÿE J ñb‚öLŠ8¶‘)žè%ìep8›:˜Éýix=ÅþA€çDto<úz4¶??£€âh4r<QûxÌ9 nŠ€”&šÏGàc9a(¼+ø©ž_nÂÿ¥5¦SÙ€º!phpÙ>€Ø’½S‰”ÿ Þ»GWCŠ ü®Æë~m·[Ù(ZÅfaÀÿÍìj#³RO/W“ÖJ‚ÌOÄ,¥¨™nÃ"@þE¿±à£óñ å| >©›;?|p_Íkäßj+°ÿkå¯õ¿²“K¤€6 ¤ÿ¡}òÿº8èóHÖ¾0<^~©†! ÍÿK=¬!ÿËà¦QõüPqK¾+9Á·Å³o ^JÊ{ ¾ÎÛ¿ÊÙ´ásv<¥üñå·yžà»œƒù6kÿ>c§SÔ4géü¤.ÂÜ{Ñ~¢¤­Û?ù%C/\üÿœ<<ÿð>_áyÚ›ræ[üPkþ¡ƒ µò—Ÿk§-¤ùÙù\ðCûà“Øä¯Ü¼Ú`ÔšÚ—ò¿ .Âü}¯ ˆ!€Q‰Ÿ¡ï7ö&)ÿ!ÿ3°Yõ¿¡6Qù“ÿEp H8#jÁ¹j`àEú¿ì+xgáÿœ{*ëšäúŸýßÊ,4³ ­œ¥U0× Æz‘…«Õ!@éþ×Öÿ(þ5ˆµ •猬ÿÁ}ÿëzö¥eáht–•!@ AнXã=¿¨ÿ©ò³Áò¿½Ù»¹Ü½:ß¾èð?µ€Ê_ú¿™!ÿ—â&Tžb`Égôáÿ™´gQX÷›­€UÊŸKzö¿<ˆ‹|­ÿeñ/åÏþoº­b`6ã‰?öþÅ}ø{ŸíÇŸÃg9ÅmÏÒöѬm²`ŸUŠyÑü)i"pÈ"Ÿ#`àõsüïDÏ °ÿ%Rþeq„{áXÇþçýû_ð?ˆïMªPÄ÷'‰ƒñÈ!EžÑ£±Øñxôd#ßï/=¢¸[ÞÓ õ½Oè¶—Ô¡¦æßý4¾ í³ÿ¹øçEžŒÐ¾Xí) ~¥ò,€søßgî!„ÿ¹òïqåï7BþÔÿæ'"f û_Œ Šÿùû¥)D¡ «‡æa~CBtо¹¼gšýßI/vjÐÎ.ø¿™75Éÿúzqþ¯ÿ3ÿÑÿ™êS­}Ä ŠQÿ‹˜ÊÖþ`’Ðh¯4;«­îR@ŒV{—¨ÿiýä?äÿ닽ëÞŽÖÿÝú¦ÒÿÇO=~ä3øa_€pŠ1#7hò1eÈÅôéÀLÊ;÷Í–üúšÏÔô[8Tù+üGÿË)cÈ¿îY„ü ÷†9ÇDòô…¸€Î…FÏþ9££¡ö3Ž1|ƒ\ÃOSºƒ)`5„ÿËJwˆªzä¡iÝ÷¿¤tjÒÈŸîiÒú¿óë *JÏñß™ýFŽ8¯'“ûS ÞㇱƒqzŠýbˆ€øÉDÂ>…HØ'¹g2^º<+ÒÂúRÔ*qs5a©§(< åì*ò@×6Ô}^ÙÕ](]Œ/ÛGŒ*|ñÞR¸lRXÔ÷.k{øø'°ÿ{ÅÍNŽheÖ›éµFjµ‘\©'–kñ¥jÌZ‰.Và L%$.Ê ˜t&]¦ì1•ÝFBÈ¿êY¨Ñ‘}KuþÐW[6ÿ«ËþÙÿÿ›ôÉ}ó³ü?W>l~)ÍL®ÒêW[úç*üjHÈ?,‘‡ÿ%j„ûÿá({µ‹ˆð/ƒ%m€oßáCõ¿ü>/9c~Ì)üœwþœw<ˆLmЈ }ò^ÿdž6ü~WüÏÂÿ6v Sïrß²h_,I•µ½²Uø_9Þ_]¿¸áù³ùYþ|Õ&^”M^*—ÁpX– ŸsÁ…ê’?^ü0?Š}ÇO´­ ¡M­¢CÎWàOò'ÿB´#¦fؤ tð\=4 àdè%?†3²ÿPÿ‹!€¹™5ªþ§!@¥0…¨µþÿøAÿgjŠÿ3Õç‚SÕ©ê+®¤«c S›ÌÔ¦ õÙB}®PÓ=è<ë­åz›¦àÿ‹Û ¥ø»Íò¿½y}sùúúbÿ¦¿{Õ…ÿ7»­MéÿVi­]Xþ_ÿË1*Ï|DO-è¤Àÿ©ÐlÒ7•ñMüs%ÿ|=hj,äÿà’”+xÇÿœ÷åßòZéî ×"¿T\Æ¢c.똈>÷þÍuø:Ôþ§ÐÙߣÎ4ü2çœÐ\ò² ðålO ¤á9 § Cþ¿›æÊ)Q>1UO @Ûöá‰`éÉÀÿG³ZÿƒôëiÀÀæOL+pD€gòx ÄO¦§“IÛá˜L;§³îÙœg.çׂ†bH_Ž˜QrWc µø"JñFzFˆ€N~t ½»Ðoì‹Æ ¤ð¯ÛÇ/7Í£ëÆáUýæG^\U÷/Ê{ç¥Ý~qtó[]ø?»Ñά·àÿäJ3¾ ±¥zÔ í×BªAºÉ±æ_ðÍg©zÍ|\’Ü@Ýð®–GTþ=Íïó¿Öü,ÿ/4=ŸoJÚ^”úAÁp·‡5®”÷ªð­G$2´ò×F€øí95<DzvT,. (Íæ‚‚‹T_t¯¾3?Ü’‡äï|_Ü÷¿È`ä0üÏ å¯Àݞؖo¢ÊFÝš] ƒðµþÿiß§-A3@þgd Hí Ú‘aó·cFI'Š!ƒÒò'ÿËÃÅÿÿ\Ñ7[ðM彃þ ù_1ÌþoäuµÂ\­0SCP.Œ‹/¤ÿåúÏLåÃtùH•ƒt噀N„KV^2”•QéêT®:¯ÍÞ󿕯ê«Ô˵<œß¬_ßnÞ¼Ùøÿjÿæò@úÿ¢Mþï56Èÿåõfqþ§ÂRÔÿ¨6‹C.¬Ë†æ³1ÕÁÿ©ÀdÊ7‘ñMæ}3• Ð . ”~>-íøŸ?l ºCùƒ–ê Ž£Y€ŠÓ\réPç‡O»þä>þÇö;¸þ‘p>M;_d\#tiã™I½ùKð@Å*׈Âíù3à(k"@ú¿rºí85 ™ŸW„âó¡(@þ‡sùÃY;˜ÑúŸ#OÑšÖBË„Ž&¥ÿí ³OÃÿxfTÿ‹;Sôå ±6 üŸ°6’KÍÔr+MÙHD@¿´u^Þ¾€ÿk¨ê÷ Ï«ß4O`þÛÆÑMýðºvíƒËÊë+Á%"þ/l÷„ÿ»éuÐI­µ+ ±åFd¹²ÖÃKx6‚ßäK÷9ú¬5ï" “4§g˜_[ù£ìg†ä/ýÏë|¤ùYþì) ™áeù£à ‚Ú–¡Ñ¾|ùW# ”ïÉ_Òÿ÷ŒDî¨KL5Û 4p 0Zÿÿ”wgé0ïó¿|¿#ÿ‡ü¯¬üTý?0ÿ]ÿÃù@Ñ á(øÄ6ecr|Â×ÂÎ'í£ìO¾~—ØÓVþúŸn†‡fóMšçþE «} 4yÄT/æozçÁƒþ×ÖÿªùM‚aówâ& äOé ¾AúŸäߊÌ7ñšm†¸¤ãFP)0SôO#DÿÇÚÍ,‰)€¹•3µòäÿF^ñ?¨àÿqé^ÿŸ-=Ζ)ò¯(þO•Ÿ žƒDùP"@ãÿl0“¯Î‹0ª°Xm,—ª‹ù’9W4ʦJc¡Ý_9¿Þ¼ºÙ€ÿ‰›í›kÕÿç‡ðÿuoç²³uÞÚRý/&óP IJÔH.V–RÔÿg‚séžVzGÈÿ‰ÀdÒ?–ò!JÁùZ@ßPÐùot‘7!ç…¥êÉöjÈOÚ" ÿº×³Ô ´ôl:nûÈwôw÷Ñ\'ÿåsü!äükÔùE€ëc±@\Ý«Žx @ɾ$ýÏÿ³öô?ËŸ‚žXJÇF {^Ê_ÙÀ A5] âñ|áH‘?û?w0KÚAYñeæh6}H)€'½ Xû‚ô)í.iÇLæl6ëÂHãMåÚôJÈT ›ëQò¿ŒN<@õŽ2þ¼²HìÂðPýuíHrƒ/ñ!~Ic~­ÿÏs[ý¬âÿnr­“XíøZ+¶ ÿCþ|oo#¸ øwÈ_Ác•'²ò;€ùµ•?·ýïw~Xþo3§ƒEžBûJå_pƒ¯„ü¿-û€fa§Vþwº=÷ý¯•¿ôÿoD€f B3"PzMü2èD•ü?–½?ïðsÁõ ÿ)¸Œ€_ ø¥39ОÏ&ý/×üS·_ñÿáZùy-ÏçWÎ ïJäésŸÅ_ËÝÊïâ¯á|˜ŸÏhÍ/›?l~é^N‹Ã…ÿ{EÀþïL4½«ÊŸVxúôlþ†gЋ_d õ("ƒô;¦ïÄ *÷ý¯“ü?+˜§ DM ³ÿ{ÙeÈ_eQLXØÿÍ‚¾Y˜oÀÿ…™ja þ¥ÒKD€Öÿ™â‡©Ò¿íŽø_0žªLfÊ“ÙÊt®2'"À€)`)V²c23ŸÌÌfòºRÍÜì.]\n\^‹!É÷új÷æòõÍÅùÿ|[ëÿNmƒý/êÅÿõµ€ò!ò¯Kuéð<üŒÅü£ ß+D@Þ7UòÏaÐ -¶BKÒÿÊŒ°ÚäÚ Y ýßð-®Å† @Çûó) ìO¼'†ÿ•!€óh"øìIÖ6›³Ïí5îÌh‡r¥¨ìÿÜkûÿKÇæâ‘©xdP"@½§[+ÿõ¥’??µ0"(¨óÂ0?¿dçR€áýb £Š'% rÂÿ9÷¬ô?†ð-bA0œìŽ€vfE;Jw\IÒîEyÝ~U>`®+‡·•ý›òkp]Úx¹(íâ媸{YعÈ+þï§7z©õ^jt“½øz'ºÚެ´ÂË­ðšr{—¸±½á_fš>¢á]bø<Ðõ¯Ó‘àÒüšÓ´m˜ÿ“¬íÓœ}°È3ïÒš|-äÿ]e°¤_Lï’ü®…Uî´}d“ç7üÿ¾Ð}ÿÿ³’¨£íòQ%€”DÀ¿X9ðSÅ7LÉ `~~ÿ9dçç}þÿ©@hÇ4P늀Ì`@Nû ÿk´;`Xûà«ðžÖù_†vùR Lÿó’ZÕ£á-<¯A¹OYåîjŸu­ÿéˆxÅÿ¨ùÍŸ‰ý/å?äÿš—¨û”ò7b!ÿsÍßMŽ€»þW!ç“üÛѹvT׉é[a½œ†ÿ+~ &û¹.þñìe­œ•NÍáÿvÁÐ*ê8„ÿ§jÅIøÜ÷?H–?H–><<ñÒÇ E@yþO–Ç¥qö¶<+"@˜ ÿDz.›ŒÄ§é™|ÙPo/õÏ×àÜl__í\]îpñOô·®ºÛÂÿ(þéð·ViõAÿÂúl€®8§Ó½‚³‰ÐL,0õ½Œ{_&½¯RžÑ‚w¦¤sáÚaêüð~Þ¶ZÛ7TdÃ_ëZ2*üß ÿ›nkÓ½Üò¬ b,»Y×dÂýqÀþ7ö¿ÿ졳¿ÓZPÇ£ôÉ4"€.ˆ?£Kå,€8ÿAñ¿\$AŒ¢ýSkéD“'äÿò‰©x¢\ØÍ×öIù‹P0°ÿ¿hýw¥/$¦”9âã¹ÜÉ<£¤À m£³#Pö‹ÈØf³vÚfžwÎq,áíIôë+Aã}ÿ7bäªü‰5ÿw²ƒ@(îÀíÅ×àªøú–äO°ü!|€hŸßÙÿDvKø)€—­óä¦ô?!®ëmÿ3íÀªºdM)ø}Ëÿ<´uÙ¹Šî‚‹Ø.›ŸŸZù¿Ë;À`…ç]óƒo„ü¶ÏÏe¿ô¿¬üi©çò?GÀoû_Ch1 ¸#„Ñ`M)¯/Â'#T|x*”•À !ü/lïÔÂþ—×ìJÿݽ"g¨þÏÞ™ÖÔÿwÌϰùa{0(õC;_w>(7hý/¶ní¼ oóAvŸàËè.½ÇFVþp>Ç;Ëþ0Ýå_èø,0?#;?,öÛ¯‡ÿëîÙªg–ýðrÀþW›?éh¿—ŽøŸQý¯ƒó¥ÿ»q tëÅDð¼X:SöMöÒ« ÙÁ2" “[C€F~®¡¶€àÿbyJ/@¾ôWx’.Iš:ù,c¼êó¢ç ²½OàÑóñ€ï*^Þ–ûC-Hësàüjô—Zì—Z‚ù±ÿ©ù©þ©áÿ©éý¥áùgÓûϦï×Fà×Fˆäß Ó‹Šjò°¶à×j_;RÐF†|¡ø eEJÄ ºO5e—Á *Áâ/”üÌ/Eâç‚ï§¼Wàþ9çþ)ëÂóþ\°(ø*²óÊðr'Ÿ$'v%l~Àª×Þ#)Ùü$¨ð&´ÉÛuy%öлà*²~Y¿n€7±M ¾¼¿t^ãûÑð$BK ´öè0ö?cjû¡ «‹5<ºFp¾œ©¦AÕ?Åð—Ô¢íú¶P7Êu¦ÓøÀóRûý”™åߎéµðÔCþ]I}'¡â”uA5ü›gXþýÌZ?3ð¿¶$ýÏ- ÷ùŸ)ð$Eùž>äÿ‰tȧ³¥™lq.WÒ#2y]<5ëΜÆí¾QOx*”œOåÅÊB½µÜé®ö{ëçýËþjþëÞÎuoïªûòWë¥ÿß©Ðüo+Oþ¯küʳè×ç½Fø?éš%<3â‚§‰¸w,îIøF³ÁÉBdþo$ôͤ¡46ÃÐ-@_ŸT½À\÷‹:ŸöŽYé²0¯Ï*ÇGÐÀa¡é1Õ<ú’{&礵@ÞÃÿqýÙeû“Ëñ{—ã¿¶’¶§Û«œ}жƒ©k;‹%(Ĉ h³ÂÿraçoøŸ85DÀ}ÿsñÏë‚û_Y&t¬Pø)TíF†®0À—'zFómó|i5û¿ì4”š«ˆTÿ×ÿ7ÿ[á0˜œM¬t“k?žÝô&"€Sà"»s™Ûf éØ^r«¢õÿez›PýßD€fŸ²Ñ;°ÆÀÿì|¦ï§«"¤ÿùJ/ºÕ+~ù¿I½M‘üߥOò'ÿ»5þ÷}Söƒo•Êß+Ìï—ò‡ê¡î}ôŸõ8û¥.š6 ÿ/ 2¿Vþ¿Ö£ùØù̯Í(ο?kpJ ­/d„Š6îûŸ#à—¼çu\ :BÊyû,ÿŸÒ(ø5Íqzk_næg/ïk›ü²á£•?«^ò Ý>©ð6°!ý/OiS&sסëð{^¦üþçûÑ^ØüRþm¯YÅ(NõÑ7Pðô žä˜û ÿ?͸xò?FšYnéÅt€žýO£€˜b~Ž€v|žsAú_˜_þç‰e olåÿ×óSÜzŸÿSù˜dá±à)“(<|”(¼Hä_% cÉÂx*OpP ç2…ùDf:w…'ìþ‡oÄžŒ&uð¡l©Ô[í•nGD@w㢷)´¿{ÙÙÓú¿_ßèÕhþ·]Xmæ–y³O=a­Æªa3->  >SÖ­OÍ$œ`*»Æ…ÿÇ’ÞÑ´<œ*EfQüÃÿ­ÖÚ1s#d”›¬«~ºˆ¡î7Š%£  ãWh¸oÀM!І¶ÏÒ ÔÐÜS ûËÀɇð¿óè÷g'¿CDNÿ=ýGÒö,k§.ðŽ`º†ê7©ÇDsŸÇÌn¿o~¹æ“1¡Ê_F€Òü9ÖKík‘ÂWÍœ¾ËÚ>ËÙ?Ï;Èÿž/Ë^6¿âÿJàûjÚךÿ§zìçFœþk3&S€^D»Fh`þ_ëqBÊ_3ù;ä6¿ÖÿC-£÷µ’ä'ÿnƆ¿6À?Kö¿"€ý/gäÁ›lþS6•;5¿v'/Ÿ½ÿíÝV?÷|4æßw ÛûÖµ¼ñt3{`CѶq§“¯ÿká¸ïÿ‹ð23dþ–Ç$0ðí-uŸþò¯ÿ9ð9ÐF€ô¿¤•0póG2èÿÜóÿ`ŽxÈÿ±9ø_Î1Ä–- ôr7³Ìþ´€r´ ¨žŸF€Ri¤X|%ýOSwýŸÈ(xÂÄr̳xþãxîe<7Ïö¿` ÎÏÄÓ¡Êþqg`ÄD¦c)=üŸ/-T«Ö&†íÕ^w½ß¡Pý¿sÕÙ—íÍóÆf¯¶Þ­ntDñßÌÐÚòFr‰Ö™D,•‰šÏÂÿJ èl&~ÆÛTÇ ÷DÂ3–öNd|5Úøï–2tR&üÇG ×£úZDWåó—Ķke§vÈÒ ÂË­Ð’`±¤é±³Ì‚°(yfÓgã1ûG¾“œ‡:;ùƒÇñ§°íÏaŠ€G)Ûˬm2o×ÓŽ`nõkŽzPÎ=YdùùŸ[ýìõ„7vþP hëÿ!´Ú°=´?àÌØp@Ý®g8¤ÿ«v=_] àÿªÛTu €q"€Ï*ij2c`U/‚FÄÊ4£K*+è*uéãA MÀ%½lïˆ"ܤÉùZÿ_ ÿSñŸÜ¹Œoƒ qwû_ܷΫøTÖ¥ÿç·˜ËÐöUxç:²{{ý&¾ÿ6qÄ=–ÿÿ¿(œ%×—e÷WßWÒþ·•ø®þ¾FÚWÍùÉ_[Á_QÒ“«cªä£‚ˆÆóâóZò_õÔƒEûÐÀoûŸ­. /Á'÷Q~Ið¯»)ÀÿsHàŽ¨ÓÁê‹Êyû?$O%ZçKäÅ+Zùs«_ÊŸo™ë#ó¿ñ®[ϪòâSxCÓð¿Üº{X“\…V%r,€q°®BËÜóaPò¡ÀkyÍæ+ð½}Í;/ü¯«¨óh–ðüÿÁô?üÓN\$å¯àþö…;?l~ùBþÎJÿ÷“k@“ËêB K[õSñ?EäÏHÿc@SÀªÿã¹G‚ÇL4Ë<å>Še_ F€¨A0•ÈŽG’¯Ñq_xÔŧcéùTÖ+Z*•ÅFc¥Õ¤è¶V{íµ~g5ÿE{æ­‹úÆym½W^‡ÿÛ9ò3µŒâ¿¥â¿ªú?ï5òÑ^iç,oSÛÆAÂ1wŽ%\ã)Ï8" ¢Y€Zr¾•œí¤ç»];­o&çA#A¨(Èx˜ÐN,ubV"²Úá¤@3¸Ð˜*>}Þ3“rކlO܇uýÁsúç ã÷A;E@ìôiÊ6’³Ïˆ«»´¾¼þG]áóŸüÏ«ýÅ}ñô×ÉÝ«Äsß¾RýO¨ûw´ògÿó kŸ¹ ïÜD÷TùÀü̧)Eþäu{/¯öù¢|öeÅùuÕûuÕÿ]5(Ì?Ô£?Ö¢²ìgùÿÒL ù+þÿWÿW D TãŒø’~©‘xPþCðý¯µ½|ÿßV G€*ÿ!ÿøæÿµäüRôrˆ u¡¼5L á`ÿ—’ò?r'—lòË+·dÃ_ÎðJù óo¼ñ®³ùÁ{寻 ¤ÿYþDèaÿó6.–¿ÜDV¥üÙÿý •;?€™Îmö¥öùòWðϳÿyÖ†ÿ ÿ‹ZsÜ·g‡7ãF– h'Í “²tÓ xé&ä.eæW³:”µßK ‚Còd¦ž¦þb•# Ÿ\aÿ÷ÒKbEÐB+kle TÿçfG@±8Jò/¼,>þ¿3ÊÈþe?d¢¹ïú„IäÇ’9þçé`¼$²£‘äd(>ŽMFÓ‰´.“7•J‹Õ*ÝðÛl¬´[+抈€ qìóÆU“Ùú ÿ£þ×ú¿è¥£½²N]Ê>›8ŽŸLÄŽÇ“ö‰¤c2åœH»&²ž‰¬PŽÍÔ“­ôL';Ú™ùNVGd L7kýìèe,DÖÚÏZ{™ÅóôR?eí'¬Ý¨UµDÌç=ÓqÇǾ£8÷ÿì:ü“ßñ_~ûï‚ö¿Flb§ÏÓ¶‰Â™N\àhÑœüÃG€Š!û_¨ç?´Õ‹ëÿ!ÿsÜ÷¿\Š’žÅΞgù·]J Ñ>3µÎ,€GÔ:3*ÿ7Üf™5¹îµÐ@4‚‹ˆE !R€nÞ³íMF…WA;²Ö‰®ƒnLIjã'7•ª^þ¿Mnƒ7©›Ôùƒ›ÄÎm¿J/ˆ€ëèÖUdSÜu>ë|ïùe`®8§Ko·®…ùoQöGva~Uþ‡Ð¾ä]úT9ØM#ÿ¯ŠÈÿ«ªë›šïÛzðÛzÚg~lÄä/ýÿ+dÞHý³SŠRqâßõûÿ«Ñÿ­Ed¨Í™Øûä¯0ðLýgl¯ñ?eÍ¿›~âÿ¶“ Þú¼1àßõ˜D ¦ZôߕȿÊá_K!¢”È`8Xþt:œæšEŽ€ýÿÖ]ÍTï@þ0ÿ­gM Ìï^¹v-kýíø !|I?°|/V$ÂÿÖËàb?¸Ð X€ÖÿTó{ôuÑöaùW}sìyû8ÓÜò›êÿÿ9ØÿxrˆúSÊß0Ôùaù÷ÓÆáúŸýšêÇW 5º)°Ô¥MÁ–vÚÔÌi]=3WÏÎPÿ #ìÿbq0)>‘þ'íg1‘ì£Hð4š}ͼ„ù£™WªÉÜh¦8‘¯Lª3¹òÞ“Ù™DæŸIfæ³Yc>ofÿ׫+ˆ€VsµÝXÝÖ:sÙX‡ÿ/›¿º¦õ#)v ÿ×Ât®KÉGòy·!s6ŸvÌ¥Ogè®Ûƒñ”8µ å 3±eä“•èG@;3ÛÌζrsíü|;§ïä  [0öŠ–‹âÂeiOñb½(â}ñ²°t•[¾Ì®\¤–Ï+øŒ@}³×Xäô‰÷ð\¯ÿì±ÿ?^ûÿ 8þ´ý-rú8aÉ:fhG˜8Ø¿rºPµ-ªç|Z¨5¤ú_q¾Œuÿoø¿|¤“)ð°üarö¥ü;n žLÇ©ùÎÀ)ÀßßÐ"ü/³`À†Ï Ĉ€â î_¨ù,xj¡û³@;´Ú ¯u#ëÝèj/¶Ö¯Ÿc,ߢN>êyTõ ªóáv©z)|ùÉ›Äîm|ç&¶-n9ßbÿ3ð¿èß¹â\ ÈÿMt|JWb¼#ùó=)§¼Ú vSäOÓ¾ÿ×57üÿ]#ô]#ü=k¿þü܈‚_T9S´ÿlÅÿšÉ7“ÿÛH"HþŠÿC¿Ö‚„˜ øW3øÛþ猠˜xÀÿqþ%6?Ãþÿ;©ÿ´÷~Ž+¹5›Ù÷fFvdÚÒ€ðå«à½ª”÷ÞÞ[ÞÁ{ï½áHÐ4»Év’º[ÒH/vcÿ«=™y+ë¢À½xñEÅEdƒlà;'OžŒ˜¨ÿ©üÝ ‘ÿà®o€ßá×ÿ“öƒùçÍ-s––YseÎÒL˜µµ N4®-§ýiG0eoÿOâgHÎÌ8Áüâÿq;¾œ…ÞÏŽk>¤ì“±R*:Šìóæwrÿß?æÈûðiC>@ëE|ÿ“ü?_ÿ÷Š‡Ý¢!—0ëÿ·š¦­ÀD   6ŒëáO*†ƒ²lH𠉳Œ0Ã"Ñ„t,þˆ»->ÿ í3xxýÐÍ~à†öûùŸŠ?[—„¢e ÿDV’’Æ3bxŽDÅለ Ã+ø_ŽüÏ]ØI7d3CéÆáLÓH¶yt¨^§†:ð¶oÛxºu4Ù<Ž:ÿ›‡#MCLC&X—öÕ¥¼µ(ÿw×%`~™ë1É#zyX'˜A1™f¨„(€B€©‚5—³¶J´ p”%Ý•¿ f‚"ø§f¥õÿd¢f*Y;“®¦Su„ÙdÃ\¢q6Þ4mžeQ˜ ²šF–?Æ {NFr•™þçBö?Ò2É´IÚäo?ÍÚAþ¨hÄþßø?·{ë» ñ¿¿Àÿ4Û§Kˆˆ‘ Ú'ä™Fô~Ö™áB@üÏÁk :ŒÛÐ1¼ þÇ!Àì1úÝn7 ù;Ám?ȿ˭$Û»ä0=ÏÅõðßMû óÖÖYs3&ïÿiËf¬ÍÓ6 =OÍ?ao·5ÿOæÞÇÎoùO;ê(“΀œíåüo—ç~§}»á'³×8È4ð|š'¾ÿS.QÚ-Îx$¨ùÜ'zŸÿï/h Ü $íçÀÿ#1‘?ò?üy['|Í„q㸿~4P‡ÿä*ðÿpû‡€!V”Œ•'¢eñHqYд¿®Gò/X€ÿi@i´ 8I¾§;”œÆcâL{ãnØþßgÑëNP»íSoùúM¯j㼯ý«ù€ùqÚßã‰pp{ èf.‡üŸuÈiΟ¶Ið]Ò÷!ÎÍäÑ(Â% b~€ô…pæúp낇àGîà'îàOð1„X€üÉÊXFg†eé!i2-‰%„ñ¸4“D‘ü‘ÿ£áêx´–ðšŒÕ¥uøQ€gþ¦áx#È?mÌD²lC:TþOxkÈtw¾ÿ¹ä_Ãù»Ç÷^!Ô ®‚1S%kD-¢˜UwHNiÂ)†@Q å'Q@ ‘°Œ,¦5Óx-@fâuàÿÙHà Óùÿ¤·qÌU7ê¬rT'-⨆ö¨>5 üãàÿ4kþÙ¦ÿ©ÃðK—]С^ ¸F†k;µ9ÿË£è앜Žk#w6vïnæ’>Ÿûò§ƒ ù™?ÈÕnø&Ï/ “ÿ;þ/´4Ì[ AæÉï`2zEJz‡Ò†jBÆA¡OÝ©§'¯ÇÞw3éá™q·Ï¢ó;4«§zîŸë'ï/æÏþtÛˆüáM`ÑÛÍÉ߯â.ÀÅ—!bÿk6"zÿVÌÐC¾äx/þßÏÚ‰ÿ¹œùßw<êóŸŒ8ÏFœç£®óa7é䇠@DàȽzûß;ç9íâ:pxç³î-òÍœO‡¼àÿ;»º…þ§[4ÿ¿OA9(¿0„^é àt^úŸ,¶š-¿š„ÿº»s'á¿ÛäÃÉÌOå?mlÄ4Lš8ˆù'Ì ˜ºIK=òçQË;´U;f¯ãã‚g2̇@Žôò!7ó’›Ù9ù£kâÓþ{ýŸp€¤SH¡! ëSQæ- ¨ü³^9öñ?¬H´ŸÇ‹üO™ö´S¾øüOBZhT…£Œ|„‘`DépþG!€} ?&! Áþg?ò3ÿ½Á¼Á\ß8ƒºBÈÿ®À§|ìã`´8–¬H¤‘üÁü@*#M$D± ‰Ee‘°$̲[…B@¤H P“Š×B ›j♿ùß÷?¹Ú)bW„mr|£SøŸÕrþgåÌŽƒøö[<Á&¤C÷#³FaÄ$šeq›,a—'ì¤)·4í•d|â¬_2@p„¼\LFk€) R;®™fj§‚ SþìÿÒÊÓWŸXfø©YýäãÏÆuë?ðjQ/PX-@Óp'ç7´Oæ!!€X½`¼^ïwýOäŸÕÞ)ûÌ6ÕWS üÏ«ÿߦ*L Ý).Ø2FU ,ù¡Ü3ù0­“s´²¤FJºRúª¤ÂA„€!s@«ŽXF¹€Ò³IG oú"zF5ü\ç)é(@y¢Y.wG»€ÛùáS°ùaáгìï] ô­•DþØüXþZ"ÿí¸‰@ý¿‹>íüïgœXþÂ1~ÌC䜣–~<8ùUþÑZàé˜Õö‡lçÃvx8ÍÚO³N¬tÈê}Çi/…䨴ÿ”wD—Œ—„¾ÿ ¢u~Ú'˺"xOÀk | º˜ì8å:âùWl1ë~ÔBü¿Ãê¹ä?ç’üÿßïí$¥²Ï›«ö£š1ÿ”¡aÂÔSÿó›êÇMµ„|1Ó\ ›«F,Õùá“fΑ\'ÿ¨µ @‡yñèUN!ƒÈìY‡Œ@ >¼šO¡öLþ|âNA®æ N{d¯œ„(4ä´¯ $ ³>É>º•;ÞË—?@g‘Ì›¿þ¾ÿ‡ïùŸ†€\Ú¯rþGàwªù±€véü„õ‹‚ùÕ€%¦GÏÀÿ° @KS- £–†1+*Ò’R- Óö  uî¹ î6zg™è¸ìïᕃzøÐ(À7?OþªÕ|Ú¯%¯[1=•?a'a&ãPòOøñý?êÆÉ¿“$ÿgÃXËYßÅè4"½ \ŽxQ…?kÿC8ÉØ°ÿAªÞ“”Ÿrœô¦ÀYÆI0ù üµõÿýp1â¿ ü]ÿSùó+B$ Ðí`Rh¢þ§QÅþÏÉß ì†M;¬q›Ñm…´ ¦g`ÍÕKXuöð7ylmà|œ©™WðióçäüŸ‡ó?6¿‘¿>Eß« ²…ð¡]^3§Y>bQ ó\èA–Mr“ƒÿqo§<ç OþâÜà} ?_þç#ÛÛ+jþ˜£ þ‡l%œ¹(PøËî}ÞZ€ Žö †Ïóÿ¬¯•0ço› ´ ‚MÓ¡F”µ2õSLí[=®šËQ<+Ά¶2ÃæC@ü~Åþ…ÀÿŸøƒ#ùû?vû>‚䟀åÿ y‰—ÄSåÉLe:#ÈdÅ©´8—Ä£’hXa$LH„‘°A@É£°`«ba!®JEªÓÑ: ãÌA•t«8S‡AcŸÑí®nÎÿ¤í|Ž‹?r?“?,r«V- k¤­,ª“GuŠ˜¾ g3)’8 àãKè096ìA—²yk0µc¾:„¿v܇ñÔN¸jƵã4)ä®’±A*[—6WÇtÒ¡õ©ÿùßôS‡å§nË/<¦ß ú’¨V×ȨüIþχ&öDþXì9ÿ£óYt\<“^}úiYø¿vØT—£†Vì Ãwwè.ðëòNa×è0¯àC‘¥!çWK’ƒâZÈp£'È`:´0俼3ñ=˜íÓáâ-Ú¡s¼ßÿñÿ¢§}ÉÛ_‘ÿÑhßø¼7ò’ç‡ú&‘?ò§þíS°ÿÑÍé ý¼ùsÿfGCÎãa×ÑÌ iÿ0®ü#ó?Í„.Rá§Iö:½ÎF®²Á‹´¬~ž…(`ÿŸdØ¥<ÿ'|Àûü€Ï?NÛßç7p1ì)ð?á¾ÿùοÏýUÍÿs·Rr!Vàÿƒ¸m?fÝ‹Zv#æ° ü¿Í€Í Ž“¿opÝÓŸ37¯óÛ }¬±‰ÊŸ—ù7ŒêÇ u„œÿë@þü²$FAK‘Q=êÞÄÐ5˲FñI ›¥CŽa+Š4ó§þççùTþ÷CÀ}ÿSùÿ'\BTmvI$H  ±€Â/ ûj†¼Õ rR5ãáþÓDþ£Þ¼ÿI'Ò¼¿ hG[gPó !ä_?ÍÖM‡k&#Õ“„€‰°À Òá²t¤„„€óa„BŸrþ÷!ù»¼:à„†ÈC6ñ$ž.MfË“é²Tº2•$âÂXDcÄÑ8‚`@ò& %! Œ2 BÄ™ª[ ×x«·a8ÒÀ˜?ªMÑõ‚)MÒSwU‘Ê?ø?l–GôàIþCj bPú%A"Ô/…@!¢ßÊcZjÅ!#ú(àÓ¬²´UdlŠ!Gõˆòs5  »iÔ ¯ð\L¸ê@þcö:œ²6áJE똭±6€ßÂzOýÄ6ð[³úgÿØ,ÿâ²ýÜgÿMÀø1«Õ â XþÀÝ¡ý2j~"Ü_Pÿçg5`ˆü‡t?&®Ò‚Š-æÚQK t՜Ϡ8ÿË€Q“Sàÿª‚í€aœöÀÿh|„F òOH)t¸ zÞô ЗD+·¸þœÿgñù.ÿÇ—qóý¿ìë\ñw­ºW‚Ý$‹^êy -øPHò¿Îôƒüiþ‹?:âÿ„ØMšöRf>‡i~°ƒö '¹s¾¨É?Ã^ebWéÔU:ó,™}–ÌqÐ'&!GI8$…èDƒÒXH! ÎÔ$ØÚl¨Ž€rþ`m:PCHúª“ž*,Úöµ)påù’êÿà 80 ùûUb  C`ú¥ì€,ŒBšœŒ†'ëqÀ3mÈLܵXEÛGs³@I¿"êTqBª_?ŽÇƒbÅ„½yÂÞ y’ö¶1[kÖØÕKÚr4Hýs“îŸ,¦rØ~êwüÚoù5<ŽhËãõL+/ð?¿¤Ã;]ðµO>›áƒÃ•?dׄ¼ÿ­ d¨)…þç~ d€1sõýMêÿ;É?8¿_W‰xH¢M n)FÎ#kÉdÜR7Ž£íßÀ}Í3özœç¾ÿð?È-سʳì£ð…OœO!ò'þçUþu¼äÉÿ¾ÿ¹ÛÕӖì @c<1§£øXãÀG&%Édy:QŽND*¢LY$PÆ"ó—Ü¥>g‰×Q øåWEÐ]ò`Eö‰8¼BÄ'ûe‰€œ*’AEÂ_•ôª1µ1wUÔYqTElÕ¤òOzþQÿ÷KÀùw@wÚŠBèf+ „‰Ø Œ\¡‚&ªk¸«`s'•ðxçÚ\iºÙ2×£ˆloiÛ#,ðá„¥77`ÇL À¸¦93XÍ T¸?1ª©Óý³ÑòOvÇÏ<Ž_ú-¿f ‡õO"šJ”ükjºÆÜ„È‹b±× éꆴ P‡û'eI“(ir»½\uµúànÏjÈùÁÿ(©†5²©~<×&q74PØ‚èfn ¿‹;í›;ð[8âîyüN¾jµôÓzaJ'Hè„°´èE¸‹&£ðªÃ+DZÝ ö§t.´Áo‡? Õru“Ö&ø×ƒWHû§­u³öºGÍœU¶lX´õ.ZqÑØÞ>ïì˜ó¶/š— [¡¶_×¶K¹íÓ®ú!ÕYˆ5-0}K dû½kÁ¾õBÃ2Û;îZŒö­„ûÖÕ£Údû7#ªµhßR¬w;2¸Vc´»Q=wzÔ‚¯JD·¥£X2ìgL»)ýVR{˜2$ öÓŽýŒs7ë<B{Š?MºŸÅ÷¡Ô3ûصvöi÷ÒEçúEËÚeëúUçÚ³þµ–ÅgþÌiÔu˜†ßn;LúÁ“˜ã4¡9Jõ¥õðæIÊzœ´p”0ß>ó4m£Å¢\ ¸3ä3?ð!×z1"\Ž2ÀÕ‹ äÿOÑùíüg šÿïÇl{Qð¿e'lÞbŒ›!ã_éíš_³êS/{]ª§rÞÙ3kïšµ¶ÏXÚf¬-Ó–æ)sÓ”žcÂÐ4®oÄÙ~-ÈDW;¬­†ô}Ÿ  ‡›LB~½„ŸS½0cQHm'm”Rèf ßó< FˆÒîêîö.‡„›íf¸”?ÆKŽqH{E¤½H¸„@Ü) †ð™SŸ˜]µ‰"V!¼RàMÔ‘n—€ää2w«€‡¼i'm”U˜Ÿ,šû"ÉRtAn%BäOùëax§}%ܶĶ.…›"óQ ~6Š–ÓaÈÿã1õš-M2%ÑГpàqÈÿ0è}þüÁCìƒpôq<^œH”¡„Ãå1¶Ë¿$ä)ÉËß^ês”$„Ü•ŒGÀz…êb>)õËà9îSÄ=rŒSMü¶+¸ìÏšd¬A þóˆÿIÎøûDÐ^°FJýŸÐçýO’?GÎÿ(U&… Ûÿƒ?±B‘ùA¶$ÿQcý¨®*«‘„Õ^õ#«úC£öFãO-–Ÿ¸l?óX~0þ‚Ñ}Ö>Šk°IhªsÝ’¤žOËþ59ªù Ê¹6|iõ'åbrâ0¤æ“  4øŸ›ùpwo—v¸p›ËÖ‘ä_’ÔŠyÿ YÂ*qXÅÝ>–@Õ¡^¿ ¿Ž^1¢—«H ‰¡“Öf=XgmMóŽr1<,¸š—<ü·.úÚ–ƒ-ËÁæµ`˺¯cË×·Òl„ú—`Áiù/‡ íïãüR®0ÊeV¹V­„Ukaå:Ûl°\òOj>[1ãN±³;Qó>w«‹ ßçžßÞë÷“†½´q?kÞ²î ÛÀÿ'i÷ÓDð&¿ dO5‰½ŽäQÛøQóìQÓÒIÃüiãÂyóÒyÇÒ…zæÆ=zfâø6ö„ç(æAƒ’àÿAY’v*|>‡qSÁ;$"@àïàpçyþ,ˆär0 ü1Aõ~/ßÿ$l³&ÄÿkÁ{òwôÍ9ºÁÿHþ–6"ÿIS#•?õ?ÈÌ?¤©ˆÿï ­ýÿÃ+÷óÊ F˜?æroõ? Øù$ù/ð?ÚçõH(i·0åæ“¿åóDû”ÿƒù ÄüäüB€ƒÈ?jÂ+–¿8i€ÿS¶J.Üñ¿œØù¾^a>(È€Ü{Xÿçjþõ¤“‡8“ú…¼Ã‹Š<–DÎÿ¨ÀŽëíÈü²¬NÕUø5%ŽÁ&õo!˜ô?±[ê¶þÔkþYÀø¯¬þÓ¸®4¥“ jF òÄõPzmVS¯Èüha+@°(ÒÔhš†›îFnÈnø¯%Å2À‡†žÿîƒD¹ßÂMþ¹7ôþ!j~¾°aumV]…r{µ,¦‡Õ"vPÈ ý¢p¿ˆ\@™À«€ø °ÌÒJ‡u²Qƒ=Àe%¼àB øž°´LÙÚf“®ê gÕ´³zÖ]7çnœw7.xš½Í«Áv`%жìÚ «@éË¡žU–Ëùnïi€5V½釜X l2ÚÝ y?èXeóãݶ“æ”e7m¶¤dÁ]@V º$=eÿo¥õÛÃÁå$ë~goÙ¡çöыу†ÌnÕðQÝìQýÂQýÒqÝÄqíÌq<ÏuL_™§®ƒ#'¡ÐqÄ{C‡§Žãúã„ö0¡‡gÐ)¨þÇxoàˆÐ6ñÝ3d^WÉÁê¾?#¢@û÷w~ ê?¹þŸBÿÃBßÿ+ÞAêÿ9{/’¿­ÉßÜJä:| wä?ŠÓ~0?|GCw7¹HÚ@:ùþ§¤ ñ}ÿÓVTêÇò§þχ€œÿI [À\“'>ÏKOõRù'â–Ô†¯Äcç C÷lˆùi8¨öˆY@ˆ[„@Â\‰B@¡ÿå÷ýi?È´¿Îvð°íÖ¢Àj¬ XŽ·,%Zãæb5³Ñj~ÿ£%îM2e‘`1ë/‚Àz >fBE@8ˆªý!_QÈó$àzò÷X‹Ü–ÇnË—¥Äm-õÚË©ÿƒ¹%[Üó?þ¸¥XþÒˆ“ ;d¬M²HCXþ!ƒ$¤“2I@ ò÷)EÔÿùó?«–’«o‰ÿ“†jÎÿøžwtí¹á%WüA!±ÿÉí9ÿ£èÀë´AÍöà4ÁP×Km…{ð±uà£ú—íO¬¦Ÿ;¬¿ðXå5~Ò=ˆêÊÁÿ ÁŒZž…|¾É5ù¬ž|Ÿ£¡Dþ°Ö4ðý?¬¯¨ÿ‡Œutów }u´ Ä÷?ù"ñ]öõ¼uü@-~}•޽3)ß04Xd«SøžJøçE—ÈBƒÌ"Ü_íÆU’„RÄDñAqZ#…UŒˆ1³bŠïÚ0×r]UÖ&à<ž¥aÆÙ kEWºìÛÝ·éë_(QÁŸiƒå-|ϯ3ªMF½Ã(7”᯲ªU¶Ì¿2 XhÉ?Ö¿Ñîì‡nÿ©3ºÅ¸¶ÃΈc7†ôŽœŸ2l§t;i-[IívB·“@'Â6£†Ã(¨Ï ‰:Y§½ç1æÒ—zn»ê¿nš»mZÕºwÓ¸u\³|T»xZ7z\=qR `é iîR½|ëZ¾ò#ÇaÇaT{<ˆëb惨m?bßbF°=¼R BÀÝ­ôº^®A¨ðȘ‡ŸºÓÁï[¼_ûü´Ÿ4ÿàþTü'æ'õÿjåÿ–Üý ùçò[;ÉÿùþGò×5Pùsþ¿ÛäFg’àÇ'¥Qÿ§tÄ=ÿ'M¢ªóˆïú_Bx¯ÿù!Á]°Ë 󹇄ȟú?l©YÊ!h€gü¾ d©$þà5Waä|ްI@‰™ 3ø_H–i›(÷åÉxþÇ!ûŸËùslFz¶bÝ„x×z¬}-Þ¾’h ,%šæãõ$LEåü%jeÿ£Þû‹oò¼¯(xðs± è}ð\}ŽÇ^[Q^þ¦bÀm.ñXÊa9@B@ÿ¹(€—ü(Ï‚S„Ö.elHþ©ÿƒ:iP+ ©ÅþA±ìùö iòOýÏE÷ù?©E-@d E;¤¨þC–øPR‡£™ÊÀ·àz#?ÿ§:E[Ʀú¤QÖVÔO\ƒZÕ¿0j~b6ü‹Õús§íWNËo=ú]QL_ ßÃCƒ(†¥®¦jX#8»®FõOm¯ˆµ("iÿ}ÿÓ¦úûþ§òGa‚Gn@D-ݸãÿ\ºÅ‡^C6|Ñž/:³€Ï¯!ùËÃrv@i?2ÿ@¨D»ÀHþŠd_utPS jIG½mõ¨®fL_=i®™²ÔŽ›ªa9€·€›&L“æ¦)SÛ´©kÆÔ?kV/š4kfݖɰm6oYM[ã«^‰t-DšWÃ[á­v—Um1Jˆ ÔØÏè7CF½ï„û·Âú½ ãÐ:5'/ #G®è‘;|ä ƒÇ¬ï8êDgš¦ý¤~?cÜKv’º­„âBÀA pÌ0'æ0žFc—áÌ¥+{¡Y“vñ§’ÉÅÊuÕúEÕÚ±bBÀyÝØIÕÔYÍÊyýæqÃòE÷ú+ãÞ+ׯ•oäŒñD4{±þ½˜n?b= [YË^DOBô™î. 8ÿ&d[ù(é ÍE\‹n4%òÇ·!xD ¡Îðm•ˆãŒû(í:H:û û^ܶµ¶#æ­°i“5n²h €úòÿÿÞÿ`~`Tßp5’ÿk¹kéøç\†Ð ÇÜsä8óßõ?­ÿß󿤀ó?—Tÿ=ÿÃê í@þÛ…$ÿàÖ\¯4 (`.gLe!c)ñ?c²Vz5£¹4d4 >k¬äû?nù‹°ÿEàøÚÐ…Ý/Ÿ»†’·pЏœ?ÒƒÌéÙŽöbº·ã=Ûñ|XM¶“ ‰~ÿDDÙœÿãÁ’°¿üB€‚ž‡~÷CŸëßùÈçxèµ?òXAû\f ýï2•ºÍe>K‘ßú$`+9Êgëª$äc[Ð@Ïa‚C °v1cüCVqÐ,AàäüЈƒƒ"*Èüiòÿcþg%|ÿã jþPRÿ¿ãti8ç"Ò„êBùºz¾º눬µ6eªŠjE¬ºÔ?øÀ¥þµM þÿG³õlŽÿá´ÿÄcý¥Ïô1kz7 †ÕõàTóùk¥#ë壺*œ !ù£`äy¤:Ïð‹?$ ð¦=ÔsƸô¾ž|Ú,æ1ô¾pGþ:®•šŸ8Ÿ´ú¢Z шà :(‰ ˆÃý"VUVVFT‚˜RSŠã* Œº<¬† M Ô 4Žô·Nö·OvÎj;çµóºvxÖv-êûVúm냞 MhCÞd¶U¡í>ßV¯w]é^78¶¼ÈêW"k‘έ° ü¿†gú7B8óguˆ°fƒ€è°Íî‡~÷‰+|fÊ\j§nÔ 7ú…g†…óôcòÚ3 ™üY€= ×QÌs”ðîG]{÷^Ô·óïEý§®ø¹'}æ:sŒ]ØgžYŸi¯»çvÅÉ›ÚÙÏ[Öok¯«o›6Ÿ7ï\7m]ÕOŸUÏ>­Û¸jÜ>«_{Ú¼~«:xc>øÌ»rвæí°z'bØeÍû¬é€Õí†u(!€Âs?Ž@…)hJÃ] œådÎÝJLcAöü>Ð>1ÿaÊI´OÌ 6?á¾ÿ—}(ùGÅžü§­mS–|ýgÌÐùSÿs½ <ÿÓK«étžÿ¹Ô¿ßÿö¿˜¯}úaÞÿ6QËŸ¿@ϼiϹjOÊ."þÙÑœÿsTSEÈX4”üƒ¦Êhß"„×€±"h€÷Ë#PC@cj ¨QPÿ§¬b’ü#ÿÛeØÿdZEÞÿ‘ÿN¬óçºwã½à`3ѹ‘Ú×R( ,'›–d@ª@ãÔ”e*3¡ŠT¨<*‹J¢(ã:ÏC¿óÏñ)6ÿ¿ÛúÀe~è4ù;Oîù¿”ï ìðC‰Äÿ¬Kˆåæ…¬B$‹ä0IDþZ‰_ æÒ²ÏùŸ|HöiþO¶€ÉP:”€×$_‡/ÇõNþÍØü͘ÆQki§¤m–d;uÄÔ„.ò¢‰—ð‡ÇÅ‘ÁòÐàCïà¯íÚ¶ëÿ/›ù\ööÚî³þ:`ù8bBîØÂ›¡¨¢>¢UŒiªqm äÆÃܶ/Ä)YJ/M¼Ïÿ<×ñwˆÏ©ù äÏäì0‚º‰ògÉq3î|ñ]ó“!@D+CòW Âê øË"ú+Àüa¥0Ü'!D”ÒˆJîD*Áÿì 0Ö_•V5öõMôhf» =Öå^Ûj¯usÀ±3èÚpn¸vUž¥÷¤gä\9ñ´î\9Ú=sÒ1~Ø’ÝmJ¬ÖÛœ«:Û¶„£Zg{6Y¤}´ `7-ÊùQÍgp=‚¶}·#ƒ{Aã‰Û÷Ô¿Ô^¨f®•Ë/¶Þ©ž¾|ú¥îô­ñàµióÆ0ûÔ0vjΜ:RgîÔ©7}äN{R§¾¡oöÀ™¾¶L\š&Ï53g}s—=k/zw^wï½nß|Õ²öUÏÎÞvoÀóËÖõËúÕ“ª¥ëúÅ‹º•«ú­ë¦Ë† àE×á;ÝÙ7¾“Á™“Ph‹1ƒ0·ÀühfþÀ„Ì., ¢ZÊ>¬rðßÙ‹øþ%€,¸) ²(“ÄêÇhî\.Ü=á{œr$ }b~~Úæ§òí@þŒÖVüê%/*þÏ;{ròï$òŸ4·Læü?nlâûkŸKþ‰ÿ“hF¢ŒÎIj¤Z1F˜£üO¸[ÿ“è¾ÿÉ;üüŸø4KLKžAï$Éh©ƒŽzÁ¯&mBäOüSý "üÀÿ~S…ÏXŽ´oBÀò×W¢›ª è²BX/ÿâF1ø?icÿKH{*õÿý°îíïÆ•˜7Š þv=Àvª{3Õ!XN6/%šbàÿ:XL‡¸T2 ¤’ÁŠ˜¿,â- {Љÿ±ù>ëCùS·éÛøÐexà2<ÜÆ'€ÇTì³”úÍEË“­û¿Œu•óGWo¿3ìC,xÙ¿~Û»òJµù²wýªyáyûÊ‹ŽÛ¶µÛæÕ—›Ÿ5Ý|Y½õª~ëUãÎMýÚEÝÒYí¾t¾ø§µË°8—¯<­Yùß¶ì¿jÝû¬u÷ëÞÓ?èn~g¹ý&øìyp}Ûìt›lïF¨{+Ø‹/øOà?Pȱh !VùŠ>¨‹Îj%m{);€P“vPÈMu =ÀQÜûTóþç—} Ò~l~Ýj@KüŸ“ÿ‚»ÊŸúÂÔŒÓþz`ÄÐ@¿Ÿï4¶½Oþu¹²Dþ¤DýÚ盟0 ˆÿûû¿YwÃ#Dï`~šç“:?…È?ná̰F.óèK1e@PÇAüi?É? |ùˆÕ cY/’$ÿCv9ñÿ¨«zÄ]5ìRÿƒù÷ã*Ì zöbàÿ¾ýdß^ªo'ÝC U `0­‰ épc òÿPù?髌yË#îÒ°«„q>BìÖ¼ÿa òwê?å…€"Ÿ¥¸Àÿ¬£Œ„?ßÿù@€“Jþ…8ùüŸú? • ÿˆHÃ?WüÁò÷÷I$!4‚ú¼½ïºŠáüOª@£Xþ…àüŸ&ÿãææ1c 0dl1µMÛ§uí³ý½+½ÆžðIÏÌ­úô ã›/LoŸ.Ÿ7-#+zÇ„²7£jÌ 4 ©Gô5fs …›BÉ.ðˆ¦n\SìÿÒygè¡°rk$‘?þ+CÂ_ŸÖ×åü_Ç­r‡Èdžûþ/Îÿ ­,O++“J!DH¯0ÔSè)ö–±ªòP_i¨§,Ü#bÚ%¡æêH[K¶§w²M³ÚçÚˆíw§7êÒ[òá-ñÈfùÐú“ÔÚ“øVIj¿røP8zP1|P1z,œºÌ\J¦.eSÒÉ‹ªÙËšÅÉø®(»Y]-ö,—¸¦ŸF+ú×ú-;>+$ü›ŒzÁ}þñÞµXäÿÛ¬éØºvŒÁ²âªiéR¾|!\¼’-ÝÖ¯¾hZ}Ù´òuïþ÷ê³·];ïz÷¾QŸ|Ö½ý¦wïwšó/UG_ö½íÚ×yøyó΋ÚÏw_6l¿nÚ…?oÞzݰ~[½ð¬jñeÝú‹ú­«êõ§ŠÕ3ÙòxþH:þG•Ÿšëºõ›Æ­­¯[ß´|ÝsòûÁËß^ýÞûùgÓ#ofݧ] uAåZ±T°¢áÇ‚‚¸@üÏÞZ€‹øj òÇþw¥!8 ü·ã³½6~ÂO^ 2¾ü1œü—¼ nÕ¼«w–nûbÿCòŸ«ùÔ·ÐofòËmªhÊîÀÿ¹-œü¿ßÿxq-¢ÝžÔüÃVé{û@ûìDÊ.Áˆ ü³ àWVQwlù3.óíûu¥ ÚRü™ŽŠBùkD\ò¯åàûdã‚„’ùƒü1ÈÿdÂ8ÿ ѯ‡1Žƒ¨ò Ö»ï;H(R{)äÿõt·‡%@ã|´Ž´ƒŽ³²1]“ ÁÿqOyÔþ/cìEà¿å¡Ïœ÷?–ÿCé‘×Xä3=ñ›‹‰üùþ'„Ýÿÿ§äOý0 yþ— â¿uþÿã !æ¿#ÿ;þ—²’ð 4‚CWùÇÅ"ÿ»“sji¸Ó<Ÿ“ÿ݉:œü!ùŸ0wŒ[jРrMËœ²w½ÏvÜ—¼U®¼UžÛûò;Õ—ÿ¦ýý _}k¼}k:}eÞ¼Ñ/쨫JÇ\·nºO5Ùß=:Ð2¢m†?jÈЄ®‰×5et èD€‚ÓWß÷n³¬ºàþ¯v>»4jˆù鄆´>8hñÿÇ´_ ÿh¿8®|ï+†ä?Ú'dzDÁ!ê1½¦£2Ü*JµÔµõ,t™·úØcuöZ;y58yÚ9¶¥H­TDw„CG¢±ÝÒÌfQbíQd£(²]ß*ŽÁÃNiêD4~,ž<OœÊÆŽÄÃÇÒñÙ,6*“ÛÑõ¢ÀòÏį ñ_õ,4Y÷îÍ€q#4ˆš¢+ñNðÿ&£=ô¯“/tW-ëO!-UÌ ¦ŸÉ^ׯ¼jXþªsç'Ÿµl¼ißúFyò¢yëeËî7ª‹¯{/¾êyú®ãô]ëÉç ¯kw¿n>y×|ú¦~þ k/Vž×/^WÏ_U-\)àO^<.œÂ«hñ\¶xY³|U»ô¼q¸mÚ~Õrð¦õømçñ·}'ß ^}o|ýëË/ý×Þ‰M·aÕßÙT+¾ÞU?ȇü¸@Ì_¶X ÃnÔX° ¯q+°Ÿ°QH@€'ÚØOåÿ¾VŸ¼ü©ÿ©üIò?É?ò?ùÏüëþw2õ?iBÀQ ×öyÏÿèà¡Nøc! a¦rò§þ‡‡¿ëÿ=ÿ££¸§´¨ü©ÿqå§œÈß§-áBòyPWAäïÕ•ûµ„ʺ©\ ÿkD¬FÐòÅIî s¡ÿ¹üß©FÖ ÿ“äŸ/ÎÿQå!öÿaR•ó?b+ö°ÿ[–bh#Í…¨šbÑ€èF2eü‚„WsWD u·?!0¶¢ í1Z˜yM=Æn=Âcxè3=óîxþ¸*".AÔ-„W<Ç<¸ˆçÆ&âûß«åü/Éù_Šè»ãÏñ?Èÿ¾ÿ3w›g üÉOàäon òG-CèóÀÿ`ìqCÛ¸¡}RÛ0§é\ìWo*}OU¯û·¾î=ÿ®çÙ»nÿÔñü/}/ÿ:ðâ{åÍwƒÏ0¼þ£ùÍ·–½·†õ—º¹+ýÈ¡.²6è˜êêíÑô¤5m}KÖØ„u¾cÅ(GWúÞ•?…Þ†Êiܤ£Ü3¹h_C_CüŸ{ȇr}Žœÿï8_-Å¥~®É‡£¿ŒU–0}¥Œ²‚Q ‚=•Á.Û!g›ª3­3mš•6ç~Gôª{üY×ÜUËôEÛÌ~ÍðFe|¥8²Yœ€<ÿ¸rd¯$µþ ¼ñÝ|^{Ä.Ê,~ZÛ+Þ(…Õ„‰ÍÊÌ–xxK:ºTž\,l–EW—>òŒÿÒùiïBµíÐܲY×ýëlßJ¤c%Ò¾Vîúmg–ÔsÍÚóŽý›š½sñê‰pþ¤rüL0v+Ÿ{×°ùEÃÚÍßví¿iÚ|Ûº÷¶ãà²jåEãöÛÎÓ/»ÏÏÛ_5î@ÚÿYóÞ×'ß´]}VwðL±Ÿv]³r]·|Y=÷T6{*˜:.›Î*gžŠça•qU ¿ºzS·ü¬aõEóÎg-GŸ·¼ë:ûýÀùºgð¿þ{ûÛoÜÏŸ{æöœ¶5wß’¯{Þ«\öö@¢]À+}“†èJrÀ€@G›M ¡ à倃T~¨ÿQcÿÝ&ºá{?ó_ñCæ¯áÉ%ÿÄÿ3ŽŽ{É¡ ìÃ÷?i`À R‘?ºTî®ÿ‘üµâ¸æÎ P#PÎÿþ0þ:@´Ï—? ô™˜ŸœÕ¢µ äŸ÷¿¶åùXþ÷KÚrŸ¦Ì§©ùÿùßõ%ðcþ²s% \BúIþâýDûðzUF”d pùB‰J@ n/€ø=цN ÿ7à%@-Þ–†Ð•XŸ(鮌ºÊÁÿû“J[qÀZä·<†Ú'xr™ ÀOþïù¿‚ÊŸø¸ïXÿCòÿÿÇÿüüŸìü¦x·eqÓ2¹P{gN²‰î ç“*ÿ K ‘ÿ˜±¤²m«CgºÑúµ¯´g¿ï¿ù®ûöÏ·ézþמ›¿ö]ÿ©çò‡ž«¿ ¼úwÍ»?)ßü§éåZ_þ»ýÅöëoì'¯ÌëÇÚ‘õЬÊ<ªRfÚ³ä´ckªM諸ӾØüt^y¦£Déý2d§?@¨"! ¦EÄu5¹ˆ€JatÉÀ¿nÿiœù‰ö©ùÃø`/êó¡Â~_%Àt•‡Ú‘VEª¹m¡Ç¾§Lœ÷M·Íœ×N?•O ÇNJ³ë‰Å'ì£ÐjQt«8æß+Io%V?a7Ç·ž¤W$>Š,~_yZ<¼ð(³ø8¹Xœ\,K¬ 3â¡…ÒØÂãðjQxé“Àüo#?׳?éœv‚ûæà¢_¹ÊªÐ)È@çn@îd.'®ÛÖnj÷¯ä»gâ¥cáıhø©dâV¾ðEíöÛú5ß¶ï¾mÙü²mûó– ùÜëæÍW-ëïº÷€—­ëWu 7 ‹o:·Þöì~Ñtòºîà¶nç¦f Vç_È.¥óG¥#§e£gåcç‚É ÉÌSÙü¹bá¼fé©bæ¦võuËÞí§_t€ÿO¾U~¯½ù£ñÍ÷æÏïxþƹvb ­Û½½s¾Þ%O7Q $"À+®àáÇB@žˆv;ª#þß‹›i(ðîù~{'ØÞl²Â£'äÏyášÏÝÌä¯ù#ÿ;;Áÿ¹ß¦qÔóYÏ÷?ž ßÿü£ˆôÔÉ{ýŸ¸·À!ùŸôÿœÿ-ð?9#L&%-"J‚Ž_À$p¶Ÿ¸'ZöÇÛ¾wü¯)#þG¯8 _Âúá—ÔÄÿø‚Bµ òèQ­ #•~ÿw„̲¶Ñ( vJG\²—Ìœ þóSH€%À>f7Þ@À@뉎µx+Y€ÿçÐ\ êIF1’ ùÅi¯üs”Eíe[ ø?dE¾ß\DÌï1<æU~°ÿmOBöâùóü_A—Ôÿa·üOêÿØÿâ\ý_ò^ÿ”Ò‚â'LÿÃ`0µô¾ÿéIXþ)ù9ùùÐÀÉŸ»¾ª ü*ÿúÖiK÷¢kð¥}ï¥iï­éô{ãíÕ/ÿÜ÷ê/}oþÚóê‡Î›º¯è»Á<ûsÿ«¿ |þåçÕ¾þÃç3~ñoú/þlþâÏŽ/þè~ñ­çìÒ0µ5œîÕ ÷vdU-]SÆÐ˜ÐsÛµDøtX(yN ænÎÉŸ€ˆZÕTÈô8 à ñ{w “?íýÚW Œ²6Ô#vJ™vI¤YžjjœnUovn4sÏzV¯›×žV- æJGЇNJ‡V+Ëå±åv¥(´VÞ.K씦 Õ_}Û.Þ+ŸØ(Zþ4¹ú0 è¹(µXŸ~Ì̳‹¥ììCßÜǾÅOàÿ™ì™_°?kO<ì]mõêÒ3¾EVµèÝr÷Ÿ¹œ×†äEûÔyõÊuõî¥lä¿W™<§Áÿ—â…kÉúÛÆõ¯Z6¿ó7ÁB`ýuãʵbêeÓÒóúùÏÛ×?ïܸmZ¼¨žºª›ý¼kómÏö«æý—M{oZŽÞ4ÜÈׯÄË7âå+áüiéøyÅøYåĹh -$³Gâé#Ù,<¿hØx×qúMÏÅ×='ﺾê=úFuñ‡ÁÛïõ¯¿³Ü¼³n_š³ëf˼£o6ØIü,º»4 PHà–xÒ]ð¶ Ôá;!€Â÷?<ðùöN¼Ï›—?Õ>@ˆüùþçÉ¿U~pò?m'ÅŸfÒóó÷üWþ¼CˆY|ìO~æCæ~ ÉMx“ð/y!Úçf~šÄTþ¾üïC¦1Äs#ˆù‰ü±ÿ+ïø'ù¹:üÒWñrÿ‡4•$íÇòQùƒùãzQÜ ùSÿs•EŽýÚAщ0§tØ)ù €öcýb*âÿ½XoÞÿÉêþ€ïÿŒW˜pUÄåØÿ¥¬n+!þç âœù—Í%AG1r–peg9!'ÿʘG„*?.aÜ-Šã#¤ÿüŸëÿ#,RÔüiûõRÜÿ/åÆ>ôË‚* wŠÿ9ÿÓ-`ÿãd €Ó]^Èû?ß”ƒúŸ„r:O…%m˸¡}ÞÑ¿á7|f<~Ñ¿÷nðìOºî{þoÝÏÿÖûúßz_üÐwû‡þçß©oоüAýòÊÛz_þûÀ;ðÀuoþbøò/ú¯ÿfüö?-ø/ÇïþÃùå·_˜·Ïµ£›¾•f´¿kXÓœÖÖs—gEÓÕKçUÓ¢ÄnEh¿2¶_>tP1&Þ¹©Ý|Ѹ{![9—,\È–N*'Ï„Ó×òÅWµë`ø/Þ6½¨Ú¹‘l½m|úuëõëî½gÍë·õë/åËÏËçnËf_”-<}2u\4qT6½W1½'œ=V,É@þDzøwxQ³ýEãá—­ûïÚ7>ï\{Ó¹ý¦ýø«Þëo•W_+O¾Ò~áܤÀ‡|¸@n@ö¡gºAÛ;è§·Û“ìD Ûa=zÅ›Äù yúÀ¯ðüäŸì†ùßô?Wüç–-d €WMÄÿml¸™™;‡NŽ Sxü¹`îNåG#ú»þG)4>ÿK§ýÓË_ÈCÞü8Óþßô?jò7”‡ôe´ç‡úŸ úJ®ì£«È! þmƒ»=¹š¿VæÈûŸ ^Øÿ¸øS äd¹ú8Lª“tÀ´5”; @`;Þ½ëXµ¯ÆZV¢hFô [3ÉTÑuó(é¬L8*b¶²¨µ”BAØZ²ñ*€œö"~ƒöÆYƸŠÖ]v'í÷TÄ}LFó b>!Àø*Yo%™‡fD8Œâ°MÊZehò§AÒË]UH«˜êPUP¥öÉ@¯Œš?Ô+B(}b¦5¢#@_¸ ÕÈãº*®ô­¯áWøÃÿs4ãùÏö–QGó¸«uÌÙ2æ„×Ö Gû„­cÂÜQ`ª_y¦MÞøµêùt¯¾R]ý®ïúû®›ï:¯ßuý§ÞÛïÿìošÏþ¬}ý}ÿ›ï{ßþEùÅŸ{?ûcß«xý7Ý›ÿ°¾û_®oÿoÿ÷u}ógçWvõgÿßyž¿6îw­×‡GUÍYUKr°%®mŒj«#t á鯎÷×…jÙAyH-  f{V)‹¨ªÃʪRÁ‡QU±ýÕEd°:ª®A;d- E5²°ºš¬gúëà3轿<ª*õ>ªÊ‚Ja [é’§»«SÍòÕÚäaûÔMÏÒóö¥ëÚùkùülñ¹tù¹bõRºøTºˆ*!¢‰½Š¡ÍâÄVIr_2z(ŸX+K.< ¯<‰oWí †? ¯?Jì”d+Ƕ‹3 ‡>eV‹bËE¨Ô¿X™yœ~äûØžüWmâ—ƒé_«Ç—¾‘Oµ¡Ÿ´ÅÕþiGòWªÝªèa_âT9tÞ5rÖ2zV;v*Ÿ<•N>UÌ]×-Ÿ+æD£;e™cáØ¥dêF2ýJ±ðºqõeÝê•lîYÕ2_ómÍê‹Úµ/šv¾lÝ}Û¼ý¦aã™| ÂÁgõ›ov¿¬Ýÿ²áàóºÝÛª•kéÜÓʉã’ìñ“¡Ó²Ñ㊉ƒÊ‰Éô‰|ñLºp&œ}*œ¹Ï¿¨^~ݼù¢V o[Ž>kÜy×¶ÿ¶óäÿeßþ›ÞÝw–“+ûì¼I3h˜su,xºæÝ³ÎöG뜫}ÞÝ1ëlƒð „egç,Ü]Ë$ k.UËÁÁå Ð’‡•¾æ22¸2ì1ÆÝ°a‡ÕäLÁfx¬6£†ˆq#lZgÍë¬u-d[ 9àu#dA³ýêÀÀFPµÁ­/Ôhçׯ_òë–üšßÀ’Wµèí¸¿‚§sÆÝ1íjŸr¶¡kò¸Ÿ ¦IT5m$GÔÉÑ c¬IЕLc> #'gÞSZ¿ó' ?¶¨-A’? ¦‘’ü^@.(¤Ðb …ÆþÊÐÍ¿fYÆ$ðizi\/¡$ r„I7J) “$nD‡°¢FQÌ$¢F1Ta}õ?c€U<£1(ÉÇ-d{«¾‚€O{qG½HÃ?@´ÏoøÏ}ñÛ“è±/€ÈŸÆ à(…f‰Ã€p?ÐÓÄÿ ÿ4®k3ÚNü¿iÿφk§™jêÿ”KPàôŒËAÄÿ°Z¹nŸ€ý i?äü¬»Sqÿ”½õwbÛ¶ïûÓ½ÇÖ–åRµÊ"$8Ä„ !n¸C\‰‡àÄÝÝ¥b•ªJ¹ë²-çw_kïßy}Ì3TÖÞçÞ×Ú·Í6¡¨$E‘Ï·÷>Æè=ó£°ßD#áßh¡5Z Væ•Qk±PƒhÕ‚t,ÔŽà?êü_žXU–X]šˆ- º åwªÿÛ¥lþü…ù__žùé*@GeÙÿOxìÕ @ðI/ì3ˆz !\{ B§>Ç©÷©s{•bOQðÿ¤pîL¶q^¼û°d÷iþÎÉÖCÉæyîÆ#éÖ‹¼½0ÿ÷JŽ^ÉŸJöŸHvž)v^•¼®8z§¹óÞxþRsçµñþËùkÛÙ«ªãgöí;š™BŸGZÚ#S´*² Sj‹ª !ÎçÖËóR䉵ŠD»‚B³åèß^-KĶHú#\±.€Æ¢! (J‚t-±j ¹ÕIø­ÉK¨“1keÔ):Øe‘ÅÙ¥ôZ §.;©-;+˜_´š\•VEþÕLïJ’k…íZgz6Ù np™¶wžÙ7MµOÄ;f“¬ŽiN×¥à×Ѹ–‘ØÖàõºëõ£Ñ-”¶á[Mkµý·ê†c›c›‚1õè:à¿ë–ø_ÿyAý犦o Ú¯–øâ Àÿê?‹ê¿’TýIXóç\xf„oɬJªa×MsÚ–œK nàÿZj`9É;Ãê§:¦©í‹ÌîMŽç0up/£'µ•ã^ãú6[ɃÀçÛ£@û£ÌQ€ÿnJÿ*Ë³Í ì'¥¦L§Mî§n%B‚ã^ŒïšŽjžºÑ<Õ:ß=Ïrü—“‚Ë ¶2 ø‹{©üÑ­Ôá=ÞÔQÖ ráô>üX<yânÎÈQÙÌšÆë«(u™3û@N ¼K›ùB£uÙ‚à5È,t"?ä #¡Ð¤{yÀ𰿇•7`Sàcqö’{éhé‹q‹$¸!æ Õ”D¨ ¬®¨®D[}Š •@•%;±Éž?`-þùA~K ’ÿ$üá×'4)5ÜV eÓD£BÜz‹à GE"[¨5Üó{>v‰ÿä¡°ÆOEN‡ÁCü¡¹0aþ×—°q°€ùõel,ÂX@cÑvþ¥ÔZü—"þ¢cþ“çy ÈS«KhX¡nÄŸV…|ØgbàoüoR²š"„ý†Éÿ;þë¸ àÿ|S ÿKF™„[CˆÇPƒèÁÿlà¿·&Ã]“üï±'vZ8mŸð?¾^ 7TbÌ%ªaþãZÚ꣉©ÒÆâ‚ ûÀbþz#|ˆÈ˜OŸüG²0ë«Øõ6V• ª3±kôìZ§N›P«ID“¿*“k*’kÊ’ªK“Áj S/YNlDçÌÿ ø‡ùgÁ“ƒÀZ"øg{uk³zt|P/|—^ rrA3Ú§á²äö™Å„$n“Ìmöé¤.ÔSZ0WÔtZ4’»|7óYÙÁóÂ=ûIþ?—ï¾,ÜQ´ÿTqðDzô*ïè…l^ð\¾ýªhÿ]Å1ðÿ­æì¥êìþüéü•éÞÛª³ ÷^×ì?2­.÷öKMm99@ûBDûÆ×ç¥ÖË’êQ›„ýD5Œk‘pˆ}Ps.Ds^À,ƒïHÀ_â5äþžÿ˜ü‘ETr>u[e ýd‚ÿþm•I ì!#øGüÿÄÂ'‚q.€šIL……ÙAþ¡†!…8ŒD¸ ÈAáž<4R˜ÿ ê’xaaø—ÒªJ™ùÈ–>Xöp“7;qΗ<êrœR&¹á§YÅn&°ß®BêP_*þDHËÁðð/šk,$ >—R€™ú‹úÏx­t´V<ŠĈ@ƒuÙh@LMžéªNë±%wYÛ¨ýi³†Ž°¯ŒoTaøÓð°KàµÅÿD€à_­C'ÅPÀo¢Öã°pÌO`ŸÑde6YéXÿ&;£ÑÆÄ"ù_geƒê‰q0µ:v½Ž €Æ¾P[P[”RS˜ ñ*¶$y"¹ æ?;’ÿ¤àí‘áÆ©àenïÐ1(Ô»Œ¹ QòšäðQ÷Y^‹Ìm ÉkÉó˜ånƒÜ¥—yÊ çŠŽ §rOd+ ·_ìAx.^?¯çn=‘í½(8xY|ð²àèeÞé‹Üýײƒ²Ý'’—ù;*N>hÎÞ(Oߨï¾Öœ¿Òž¿Ð¼³Ÿ½­:}m¿ýܶ¿[Ñ? Ó;rEõ²äÚ!A„„Dx. Kö ¯1;l‼ \Àg“ìò`U~À^°í%A{YÐZÚo+k»D¨_…hä÷WçÃëû«òúüQ*‚¿­Èä'àï Á_ ðÇüG)Ì'üÏŠ€¸¹–24q¯]™ ÂÌÇjW&cþG樞ó;þãûß ¹nJ†¯€7 á+Ù½öB¡"Ì… Ԗб0À#-„á_UGXí‚ÿa/À7¸™˜ÙäõùDA(øG}~ÊXŸîöDëñVŸÿŽÿZÉÿn}Bþ3õù KÅ|Œ þ1ÿGjHþ‹ÂüçyjѼx§=%’ÿˆüJZ£ŠÞ¤¦BÃŽUñ`µjÿWkbk´!øÌGƒÐÕëü$ü›mŒf; ©ŠÞ\Å$Än°³ª9 vd„8 dõ.ðŸþžT¯N®S¦ÔU¤)@bmIjMqȰ ”å%„ùÏ —€P)´ ŒÎ‚EòõÃ'º÷w~à·>ÕvL¹nŠð ø+@>s¾×œàÙäHÈò<&…Û˜ç©,ž/k>*˜@§G¥è éóüÝçÒ=þOÅ«§¢µ’í…·ß–¿)<~%=|‘»ûR²÷Rºó\¶õB±ý¦ä6XÀ;Õwêó÷Ú‡ïô^ë@"ðÖ|þÞvþÖv÷gûùKëþ¾zdPaïç5J3ä)uÒD°€jYJþ2šIÂ4åpM¢T`¾€O`¤1uB\A13ìëæFy‚YζI©U¹1U9Ñ6Å"¢£¯ æêL«€Û˜•Þ›©˜Õ¬çx×y¡åtß\‚kÓ·ÈèÔ/Pz—ãÜ ¥x7Áà éÀR|ßlt×LTûh\ À¿ÿV°îGc[!øþÏÄuÿ§)í#7ááPT¼&x³Ös£ øßýƒÖñmEÝŸómŸü¥ÕŸçVžìÿá®p_÷•¬ùJIÇ5eï ÿ–m"¾užÙ»Àr.°Ý‹\× ³âÐÅ1× ÑþVâÀ2«o‰é\a{Öü› ý xB}ˆÛ÷’þ«´¾M–w—;°—0¸Ÿ8²—0¼“0´Âô‚ƒÌAðí€ÈæVëb\ú iÃk©ƒHÉë AÈÀ5Ž2†ÿYfNßÎ?È?sô€7|$œ8ÌÝÏÛ‘Ž/z†+õÆÿ7üßïT‡üïÕq}=¯áõi3û´.»Î|F1g”øl"¿='h—l2¢FTˆª7æâK9hÐZ†„ÎóÙ ­Ä:o!’U®ù»=m%[1‚? ù,¹^³Èo‘ð]À_ÇGs44™x¾FxÊáè>Ô¡JöÛU‰mÊR—ùOlþ‰èÿ†VC‘?®E. SÀ ¢C»F[Âüo,æ4±ë YD÷Z&©Ú"idMÅB*½pPü_L#k;ð|$Þ#ú9Ó@Ø/È'É/*ø‡¼ði…0üÙx«?ÉÿH¡‚«[ËîÑq@—øOZ@äYàKüá‘h@X­0Äÿjæ÷?æ?ƒè†â?ÀŸØDø×éQ§ˆZó¿ÁDi4Ç5š¨ &3à? û[ªþ-Õ B¬¦Vc5³©šÓX….Ðdã6Z9M–„FSb£!±AŸ„ù_ü¥IÀl8"bZPuHÿ‡×,ÒHþ7—$GÿZ´° ðï5ŠúÌ—E á=0ñߘ €O¾[!·%Ïe–÷™d^eÉ|EËaþø]Ùò=ùÊiÎüsù.ªð(öîHׄ+gâ­…GïÊï¼)<|)Þ—wˆùÿV±÷¦`,àUÑþGÕÙÛ²ÓŸ´~Ö?{§yôFûàƒùñOÖÇïÍç gïÍ÷^ØNŽtsÍBEcvF£$µFšd“&[¤ &Ë ¡ÛÍÂSv²>f>\µÙt$C#¤ÃCx‘ 0ɾyzY¢QÊD=|r¢ì¢(«0Ö$¢ésÐW0 8öô”®ÌÂiIãšÈ³™1°—6¾ž5¸ä›a:gh=€Dàÿ|lÏ\T×Å‚,`æ[¥zWâ]óÑÝ ÑØæ›u ˆð‡£›ÿ÷š@¨:Díšïj‡Àðÿõê¾kfü_ѵ}W ü‡ø¿ös™í"¾õÏBý¿óì_äÔ~#­ÿNnû\Tóµ¬éë’Ϋ*ÏMËpl=j%DëÍ1zfþq-ðÁSo5ŽF;YÞUvà¿@GüÇämsûR†€ÿ» Áu†{‘Ò½Áôl³ƒ;¬À6#7,?ÿðÏ¿ÙÉš=H;æd €#fÿo Ç·Dc r×H¹Ù£F‘|„qÁŸ„¿SEèÂ0ü{µ|b­* , /„WŠs}Èo”, UŒdA¥¡€)oÚ ˜ ‚æÂ  ã wòAÛ{†¬%Ö’ak1ÖPø‚Öb¿µàï³Ê½VIè1 "áZù%ꨄð@]šŒ.M©mHíšäNBê¤H ¸X´ÅU ˆÿ—Œ§ ¬È¤€üÓ‹ƒÅ\þ Ôº¶€‰§WÔrpPWÌäõa NfQ± ÀGŠx’Dzu9#,9Ï[~žlï|‚ü—àÉÿP @¨CÅ!ÉߥaüCü׳þ—øO(ïÿ#êÿ`’ÿ‰1ÁjAˆÿU½ÖÔnsr‡5—Àîˆ14,Ü[^hÐQtp¯7Pë q c$3­Ùªù@ØOðŸÚRCkAãæ™ÍµLà?R5',n³ÐdAÐDX@£¥ ª°T$Õ•¦Ô•¦Ô§‚€€ÿ5ùI8 ¨!„ù…zÿsþ·«3;4ˆÿáà?óÂ{ó›ó1ÿÁ ÚG5K.aø;R·²t®¼ù0µù’¯ÞË]|"Þ„øÿyÁÁ½¼­ñúœÍ'yû¯Šßäß~#Ù¯8z%Ý%Ûþ¿Rì<“¢*Ðûò“7¥'ïUçÔÞ*¼QÝoxüÑôøƒñÑϦ‡L>Ú¿«¾{G·0•×ÜÃ/nÉή§[¥ z)G+ekÄ€z–1›ep€ö DŸ©Îf¨³iX```XÆ\H'á$ ³˜bF Ù1Z!E#¢h…ñ~B3O:$¬Ý” ìò'¶’†o§Žn¤.p=Ó4ç, â÷Âþ¾Å8çŹ×·Fó¬R!è[‰u-Fõ.E;'(­×kG£Qä‰j†ûÉDþ êDt+Äÿð<¸CÿúÞ«Æž+†Þ«ú®«šÆ/‹ªÿ$«ùBfýƒàäþöþŽëŵßÈA-_”@²ˆªž¤£ÎBSñ”6°€izÇ@Tó;#XÀ`TÓ8¥c™ã XbºPÝžI4m`ùÖ9À;ÀÎñ¯P3·ÚÖ©}›tïÕZ§{—©®ùøp+ø™G¯7ÿ—ã»·áõ)Cö/›V‚ûi£wÓwÒ'Nxãûiƒûc§ü¹£ôñ£ŒAàÿìX0×#áÔŽpb^â/·úT’ȵ]b ûwðIü±EnQÛœZQŸ.§O—ëÒK\z™Û€J”`8€¤€¬ÕxñÂÜ›¤>s|Ú °#á®ÄϬ ­"×VɯÛ*Áüw³½Ælrñó¿W/ó?³KÊèÔ¥ƒüµ) N]j‡6åBº$ÔÐ@ЮâgµB€7í •±Q•t.çûÍŸêþ‡÷5„ùq°·7ù¤„É|8—FŠàD»žPj@”z*˜$ù‰©Ž¡Ãbä"2¨¾<4Þ R»D~¼±¿SÍëþ*<É ?¨×€öFòºNiäP3BXâøï³gyª²\öôHþ£VØh%+Ü"•t´4 Âüo"° ø-ñÍÖ¸f+ÉBÇüÇ•ŸVˆù1üké àH5\¬–jð¿ÑÊþ7›šÍI͆Ä&]R£&¡A•X¯Lj¬Li¨H®/K ¨/I©+NÆ€²€|” ÍŠÄš  =ðÿ ÿQ# ŠtÌþÿM¢^sŽÓ"þçÑ/E˜ÿcžd’ó±AÀàßk¸++g‹›£g9³òVË× מIvŸåï?(ؾ+Û>ËÝ9ÏÝy"‡€ÿàCÞÑKÉâ¿tÿ…dûyîðÿEÞÎë‚ýŸU÷?TÞ}Sq÷òÞ[Õý·êóú`ï O?šž~4?øh½÷±úì©e{¹ØÝ“UÙ ÙÄɆ\¶ZÌV‹´®žÏ0dÑÔ|ºŠ¸äg¨t,’ÿ:1Dø ƒ˜®Íå ‡¢8 ¿^­ÍŽV o©E`ñöŒ$_½$öîföRgRÆö“‚ñ.qýÀÿªsŽêœ¥ôÌÅõ®ÐÜ`€} å:Õ½×·JXÀZœ?|½a2µ÷DqþMŠÏÄu!ÅvQQü½a,¦u’ÚáúÑÜý®ë{MǪúÏ þ¯û ,@ü¯úR¬û· óÿwF•7þPPÿ¢û;Mïÿõªñ¸Öyf7|—ñXÇdœc$¦žt~§ܨF¥§ØÖ%®—Ø¥Ù;Gí!‚ù.H^ÖØþ ±.Àpo0]‹”Ω›—c»áç_‹wÿWi} ”îY JUÀ¶F®5LGµn±}ðWЖ'މØLþŸòÆÿpÝMé¿9qG0Èþf¢á:\v”=³#œš—x&+«j9I~¼½“Üó±ð‰z4úx„?¨¾’^W‚}£PdcÏKäÇsðæ?a,’ÿN«Øÿ?ÝX0Y¯ ɉÿŸlþ¬“×åÖÈÈyÁýÕÿg£øoãõšÓ:Émº>!À¤e…ù, IOm2Ѐÿ „ÍqDäO h±ÑÀZ¬Œ;•}ÿùu R-u,BœæZvK5 ñ¿ŠÝbg7[Ù-.X@«‰°mb£:©YÔ¤Ln¨Hl,Oi(KóŸPa ¨¶ mkÌO…]ñ¯rVç£ÃPuù …I¸²£<wÑ@Úìn½¨Ç(vš%}Ö\üë€J@Dý •ú‰_§)·^i”övà©P/UtH‡ïŠçÈ–î e¯>m=’oÞ•¯Ÿ+öÎå÷r¶žæí¾/8x“³ý"wÿ¹xï¥dR€ç¹[Ϥ›¯»`oK xW~çmåÙíù[ÕÝת3°€Ÿ,¯Þé! xð÷ª'¯yú—ÚÇÏl·7•ƒ©ÉšžeÈJ2æ$üuBŽ–ÏÐðâ0í•|V… ¤ÊlºRÈP /\@›CG14ÙT ?^—¯ÉŽ­ܨ̾ªÎ¾eHkãËæäíkü¡ÝôÙÄÉ„ƒÔÀ–áMÇ÷Î1œhd|r ñÓ´Ü y@ž4xÁLl;`sžÖPëøOP:ào~ª·ÈbÚÔŽ1ŠÃ{£ªç{}Ï]û7 _Büü·ÿ ÁßøY–æ_Òp ¨ãVEÛ²¦+…î«Ûà­ºFç«ÈÇ(ÚeTíûÑâúÁè¹jî¿U;AkC{5Y.HPv@Ô£k.®{‘感|…Þ» IXÒ­Öé›-+”øù—c{Ñ9_J÷|,‚?^ª€ø1¾ % \´v°Ä¬%m¤Žl%Brt;eøœ>º“þeÍÜÎøï¥ÁÑ>ê ½›1¶ÉŸÏõŽ—VU rc?ÉüG,d"ªùcþw)³;•"¬vUv‡Zˆ?ÏÒ„£Q·NBHÜ£Ï_ÀáÔçBšÐ§“öie}Ú¼^¢WSЧ+rJº §Uá²æA Ôg»l—UÖg‘Ã3ð«á¶Kä  =*þ›d½ Q(§ÖË\:9„ObóZIß±dâ®hþdù¡d øÿ,gû±lãž|åêüvü²àô‘dç¡håµdëYÎÞÛ¼ãwŠ“—’Hžæl<ÍÝz!ß~Sxð²pÿ}ùñoúó_>èî¾UŸ¾V¼7Þÿh8ÿÕôì/æW¿šžü¥úÉ_Ÿ|l|ø¬æäqýÁ†v 7[eä&éÓØ:»4-®‚G+Ï¢“ÂP.`(El€9Ÿ ªă  kV\ef´žá1Ê3€ÿ>ÜTñ®i=¼âõïžxì0kò eh+Ñ¿Æõ¬%ÿ“ñ] ij÷ ­g‘Ñ·Êò,Æõ@ääßax÷Xþ]¶à¿ù³y2ª Âl`þDt¸o|7jGé»ÕJøBÛ¥m$¦%x½.p£Ú}ÅB¤š¶oÊš¾‚@lþ¬êÏsLàcþWžÛz¥à_û¥ÜýƒBý1Jó4½ø?EkþCü¦à½jô\1ø®›‡bê&h°€‘ØV0¼Fß<Ÿ¥tÌD·ÌÆ´NÞ¨Ÿ¼Þ0s«y&Ú1Ý1Ó9ƒø/˜¢´ŽE5‚i=ÛÜÀ.w²¡­„¡n?À3ed7mä„7y–ê?‡hpÌȱþ€˜ÿ¶`d_0 Úæ!þ¯fΉ=ceU5ä•9X“8,¸Ïq„„D¤p™Å¥ÉÄ‹ÀÿNæ¿À¡Êj®LshÒ:uéhiU™Ü^™Ô¥NíÕfö*Ž•’ž2Yw‘¼¯¸Ä_¦.·–×—¶Ì•w-)=Ë•þ¥2ÿB‰w®Ð;­p•4Vš‹tÁ"¥¿¨Ò_¢ Vª|ªr¯®ÐmÈí3 @½F!$]ZI·6 ¯ó‚ã€ïJk×¥uèÓ;ô© NCþ¡h_ŸØaHê4&#}Ê¢BÀÈCÀ¿)<Õä?êóÚç ò[H , åÓ¢ÐïÇØaáyÈ .ô{#ÀIîÕêØ±kˆ82€No¡òNåE³8²wŽùq¹f%½EÅøö ò³@]:6߇žÑ@œÏüg€ù-ó¢^1^—7þ;þ“@ŽÆc"ÿcµŠ‘jùPµd°*óßcå»ÌNcZ·.ø_µÈûÿ[uLÌÔ#BOEúdý—B ¾à?°þ#D•ƒjèX­Õ4GÔfcÿ&V«‘éгÐwDÓÙ8Í*v“’…ÏŒ´”¡a^áA'¡^ÇDCƒ”úˆ*(’ÿ¸~$ÿþ]jA·&»WGò?ïÿwA>¨Ï éÃØÇ5½ ž>•Ì©”÷UʇKk7‹½§’©3þÌ™pî~Î2„ô²WŸHWÏó–ïI׿î=“Ÿ<Ë;þŸ¥M=æo¾‘¾•½ÈÙCÊÝ}.Þy!Ù~¿‡O„}TÝùIwïÃùO†ûï4wÞiŽÀ ~1>ýÅðü£þñO–‡¿Ö=þµáчÚ?Õ?øØ|ïÄ8›«Rš4v%/¾,“ö‰øt,°¸–fÅ—eÅ—óãþpE7¼›™”²tZy]% ªyѺdJ]BÖŒÔq ˜º=½Ÿ6¼ŸâßIó¯'ûW’—¹nà'¤óÌ>ˆÿÿ+L÷Bl×:Õ½M÷öXAðŽvMÞh‚G,P{ÿ Àþ\á!x¤¨ót3ð0º¥ß꺿CüoþºÈþà¿ öË\Û³uÿ3ÍøoYµ_J?@j oú¦‚üaÀ{|+ðŽÕ=Çé§:‚׫Ý? øû¯™nÙ!þk†çÇâ[GbšÆ(-£ÑM ‰˜æ©˜–Ù¸¶™èæé¨¦‘«Õ£?ÖLÞl˜¼‰ŽwÍÄv‚âÚg(xåð­p5¶{‚vp/ax;qx3et;m|7câ7q‡7u/sò4mìòX0~š3š³x”=³Ÿ5r’;}˜ƒ´Ï‡|jC4¹ ÷MTT5yØÉkÎõš± „ž‰ì«àÆ;?ÃüÇðw¨ymžC…vÔwT¦vWf –;¥¼ÎbžSVà+¬.3O”×ÍW¶-+]kåþÕÂàªbh»hú hî nW>½;±!]Ë^É\ÈöLeµeÔ ¤™üizOºÖÅWûjy¹G#ƒ€bûn¿S/hÓ 1ó!× ”Ú¦%•Ü®Ku>)ûDò?<Ç0@!øvøG*ÿ‡¹šÈU€O- ¥0¡åÒCB—&Ù}bŸN¸ ] :ŸEzAu«ªAî"ùŽ Gðÿ“†ÒaþüAü[÷ÙÿP$ÿÃÀìP±"ÊÔL\",€ƒáOêûø!Ü1V/7ÈGkòþÃU²»¤ß–ã·‰¼€fŸ‰×kHïÒ&¡.£á¦yè=¨ÿüÿæ?ÞóOìù¼ÄÿìS±UÀZ›î°ÒÚ, ‡™ÙFðß¡c¢º“nf“Ç[Ê›J°àæöáþf‰¸r­â"þ‡4,þ`þCðáùïÔ燿HøcþCØt¯€¿ø¯ð¨ }꿺l¤ a« pO6ÆŸƒPù,{á¡pí‰hýAÎüCùâÓ¼­Çâ½ÂݧòÛO$ÇÉãç¼å7’ýy'o$·_Š÷Áž‹vñrÀKùÞÛ¢ÛïÊŽßUœ|Ô‚<ø ½÷V}üQ{î6µ eq!eF•óbáoUfÒ•4M½>…?˜m9(½-šv7ep'Å·™æƒà)a`‘ÝG jìYâxæÎ%¦gé[¢8·hÞšo+Þ³Çÿ·™~àÿR|ßLT;ðâàÿTlÇl|/hŽê\#z¯G9€ÿ”ŽñXæÿpt#лûkMç7ªöoË[¾)þÛÿ þÛÿ$ÔÿKºùßøu_H[¾+ªÿ\áø®4xÃ:Ji˜¦·O3;çØÎÅ÷­ÍwÍÞ÷øßÓ6]=U3[?ßüŠª‰i˜ƒ žŸŒþ;¦c[FnTþ`¸j½Q7v³aüV#¤›ÌSÚ&¢šFáÅ1ÍóôÎÍß^ÒæÿNÒènêøNúðÿ(sø? 4s̹#šº#^8ÉY:Î&N$3DzyБxæ gv;wf^á«´ù´cJ~ÿ ù,¸b @ü׊ÜÄŠ@:>ºíj>àïPg´«‰¥•]eY½ÅÙÎ"‰;_áÎ/—7-wo)ý{ªáýÊɃҩÅÔ–xr'gnW8·›=»›5½Ÿ5³—5‰ÉJbp3ef#et)Ñ7Ãj¡×¨U½qF¥¢7]íÍSú* œð­õ† ‡×ªËBÌW§€RIX! Ð_,õ¢ V†$Œ}òøïТ9ìDU<Äûø„¾iüßò?¬Öb.RQ"æ?N .ñ?äËÁ—/ÀB[FÉý¢aøã¾=‘Ø¿(û±ÚÕ 2æïÖ³ÂâBÏkÙÀþ‡@(dcµrÐ'f>y?VŸGYÀhM> þíRàÐ*òYÑ&^—‘ç4fôèÑ­uRä¬ÿ#þë©!ø›iþVÄÿÐæŸßñßQsÁÿ¶©Ž*z»Ön¥·Yhí&z›‘Ѧ±Ú´lțа6%«­"ÑQžà(K"fá©U‰D"ð ÿI Àp÷cÌÿPð_ÎëRòÑiB¡E1ƒ$2æÚƒz þ;ò½´W+íUç¹5…^e‰·¼ÄURÜ›fXà÷ÞË]¼'X<Ìœ>Ì=È^}&^œ»øP6÷2ç…ôð¡høÿ"oçö©` 핾•¾Î=x•sð’H^æî¾U|,9ýPzú¦äðmÙé{Õ½”ü¬GúUwþ‹þѯ¦g¿ÚŸþ¥úÉÿÓôü¿êŸý½úù{ãù3ËѱiÖ“«7²’0ÿ Ô3J2éX$ÿ‰\nâK2ãJ3c‘²¢J2o•eÅ*3©ªDº•›È6”ŒK&wSLjì#;©ýk)þµäåÄ%Žk†Ö5Kïþ/2Üklÿ6{`“æßŠ÷íÄù¶c<»ñþ=F?.þ/Pz)ݨ:Dw-3\3q=ó´>¸ÆFb?¸ð&®k<¶}$Ú† Þªþ÷|£íøZÙý½Êñuqõˆó¿_IìÌøƒÔ.oþº ñË‚ž«Jï'¨Í³ì.àÿ«g.Á5Fë@çÈ®Z½WÍàƒQU ŒPš@Qõƒ·ÀbnÖÞ¬ºU7Õ0Û8]øÞàÿNßÅF0z«¬a<ªeìV3¸ÃDTãDLÓ4µ}™Ý»•èÇñÿ~âÈnòØ~údˆÿ¼iàÿ9úpánö$ðÿD<,Z<ÎY8Ι¹#[8’ÎË%³·%ó»òÙÅÿ¨ÒŠF¥û0#ÉÌÇØÇ7`ÈE=IP›8tÆ ó¿M“‰ùßZ™ÞY™Õ[‘Ó[$ë“òÔS¥õ˪Îݢу҉ƒâÉ=Åä¶dlG<µ—3³/š;Èž=àÏîó§‰ãÛé`ñ[©s)ãË x?Gi­Á¸Æžh[Ó U­Ì)ªð”õTfwkQm§UŸÖ. IùTIŸðMªMŠœ] ÀÅüÄ ÉÿðÆËÁÿ%þ7†ùF€ú‡â1—„?Z ®ŠPå‡äÿ¥MA¿·þ8#À§†/ñ?rŽ¢¥ŠjãFü¾Ôô6½C)¸£×ÚÉ] ÇÀôè8x{Ø.Ö/Þ:R+a ó?d ˆÿ£urð¤Zþ÷ÛrƒV1Éþ»u©šÐq<òFü¹üÿ›õL¢øêÿhR€á‚ÿÍÖ8€?Éÿ&ûeþüÛjémµ¡ÊO{-•ÜÐ;kè`„DðŸÑ®Ão Z:ï('ø#âQ؈ñ%¿³äÄ1žEþ™A‡ùOôsC;"àWL†öEèõ¬ð Ô©Ësi‹¼šgia[®´.SÐÍÕN¥´ßÉžþC´|G¸x.Xy"Z}&[z"›.[)¹ýT|øÿL±óDºúJ¸ z“³û&gÿµpÿèàµø6¸XÀkÙÁÛ‚ã÷%'oKO^Ÿ¼)½óQóðWË£_L~ÑÞÿE}ï/º¿™ýjFOþ­êÙÿª{úÅüðaåÖ‰f~¥ÌÓÌ.%8ÏÀòóhèšÅ(ʢŠ+æQ@E¼hPqftqÖrÁÍÊŒX-7¡=­|Qâ>ËŸ?àÞN=áMeÍìfL®'¬¥¢ù†‰¾yf/¤KL`|‹3°Åêߢ¶b½Û1ÞÍ(÷.Å·KnÓ˜ÿKq=˜ÿ+L/Dþÿºk õaNSº1ÿ§â»FcÚ&âÛ‡cZP#ˆ›µÎïô_Uö^Ñ´|Yü‡€¿îË\Û¶Ï„ _Ê¿T€/´}Sâ¹eŽ©™¤µ IÁŒî)–s>Ñ;Jí \¯óþh÷ü`ñýhé¿âÿ@Tçª-x³ , p­*Hhðš}øFõÐ5«çkMðãà–¡ëUÀ\ n™¡´Bv0Km[`õ¬rû€ÿÿï% ¢¾)㇙3{¼©=Þ$åYæôÁ ðÿ¾húX4 ü?/Ÿæ.ÉOóOò–OK` ]ÅüR±LeóéÃûðô÷[¥ €MF>Œä?’.tƶC“Õ®Á®h«,»»@â),+­[¬pnTŒl–ïHÇveã{҉ܱmáðp‹?¼-ÙÉíòG6³†VÓý‹ÉîÅTÏ*/°ÄMõq;Í~jm¥ºõ†¹úG¥=ª°ƒ_á**ê.çwªS!°oÕ¦´èÒù­êD¬Mb«6 ñ_—ˆùOŒ, YÐþ’,‘üGmÐ"Ê>aðG}òKÙm?Ã)@Ó?ã¸Éÿ†<\ñ~!’ÿ—\à÷Á?YÂ}û#ù?39AÃÿÿQ»~5Šÿ1ÿ»uL§‘r¸"! @ ¸”´+ÿq9h¸F üGl°€Hþãàó´N:\…ú Údÿ€%ÇkÉv›øN=ïRðO*¼óÿ=„ùßb`Dòÿ¢þcû„ÿD·ZKhó?Zÿ%àøj¯a´ÕÄcuTÓÚ«¨ 6k|»™Šøo ¶ééíº þ·©˜À¬ö2<$® ¤ÓÏC#I@Fž~ºØùS΃` øy4À„áO¸€Ô Ø×äöhr»Õh×D—6·S—Ûmö@. •;Õne±·¼ÌUTÚ§(6.eºNùsw³æÿws–Ï…«…+O¥‹ÏKÀÿg9{ÀÿG’½Ç²ÍŠÍgüågYàÛ¯„»Oy›Ï³¶ß‰ßËNÀP9(w÷uÁÑû²»¯‹ü¬~ü›í!ðÿgõùoªóÿÔ?ú»éÁ¯¦»ÈLÏþ߯ßþj}þ‹éîÕÚí¢±ÍâáþÌv |’ÿ ¢0ÿ 3ã‹2âŠ2b/Dð¿(óÇ2ÁõŠôhsRº_P³!…˜à–5Ž´ æ÷x‹©Së)Ûéí”à "ù.¢òïÝænPýk1îMˆü£½;Qž½¸À IÁõàÿLTûltÇ"Í?Xø¿ÂöMDwÿ§ˆ¥dàÿ4½ µkˆnŠjpoîø²øßôy~Õgb`>¤ÖÏøÕÌiù6¿é«üöoK»~¨ÄZÇâê1ÿ'™Ý³\÷b²8®Ýs¥ PïúÎä¹b \· FÕ Å4Ë Fß5kð†ÝwÕæ½bõ]1~0÷_µú¾×ÿüoØ@cQuc±Mc1ͨøÓ°ÈìZâ8×\ÛIô‘£Ô±]îÄÿGeÍdMÃÅÿ™SçÙó÷ųÀÿ;’Å3ÙÚéÊ=Åê‰|á~ñæyÉÆYÁÊIÁò^þðTmñêBmð$ùƒv9?$ù–ˆž„.Ô™VЭáÿ‰à?ÿªŒ64f=>–ʺU­{K9±š?1'šØnІvDû⡜Á-Ap“­ñ¼Ké®Å´¾ùô¾¹T×tŠs.ݽ$ ¥öø9M.F•“féŽ37]×Z¿)S}!·ÜÊoË*wv•eu¨RÚˆ-ÙͪOàÿ{þ‡t1¸6 3Ÿ ûIEò/ÿŸóŸdþö#0ÿQHÁÆðÇv€·ƒ’›BI ™_¥`’BÏýSþ“Šä³’Ž6üè8@~‚ÿônâÜðÿÂÂBU 3þLLþ°Ø„B± àø?Œ÷Ë"áO¾ /ûöÛr|–Iè6f» §r:mªã©ñf$øWhø\‡>ÃÔb`µÙ¨A¨žYüÁj¶†Ž.@; ‚ÿrTSÛjh8àä﬊ï²ÇuÛ¨]Öø.s|§)®ÓHí0Ð: Œv=½MK‡·²'¸:Ðp–£µøn-c¶•²%,G Ç:뀎±cþÐÜó¢”–âTG)ÿYü%Z>CGfÔãó2 o¥Ê£. èÑ P_mN—NÚ©StJÚT=Ê …n¨À<£h\WômI}©C> gÓ>¯€å¬>•l<¯?ÏÝz)Ýyš»õD¼ùZqðD¾óP¸ñT°ñš¿ù2cíeæú+ñþ+éíòÃWù‡H~*½óSùÙ;4 æô7Ý“¿ŸÿjxüAsö^{ú«ùüoöDZ>üOû³¿YŸÀ¼àêèAáÊ®pd?g¬†W¤â¤U¤pK3ÙEYì¼$ŠV@«H½Vž•ǧäòé²,zqFlyZtYXµ0‹^~]ec&8†Ôþ“ô‰ÛéþíL÷žxâH´zÌ[>Nž8NÜM\OÞHžgy¦b;ˆ> ›,/\·¾mªw/οíÞŽrݦõï±VhntF,¦ø?uÓæ0=+´¾ –'a`>¾g&íÀ+™¦ti'ãÚ‘¨ƒÑ ÞmÞ-]ß)ëþ «û£¤þ ©ý3aÍŸÄù·}SÖõuEï7ÚàÛxtã$Œ£cŠÖ×åD×"»wðf­ïŠÕ„ÿÁ佊ÖGb«ƒ·,®+Zç÷*çUmß:×5=<ôü¨ï;0;¿Uõ}§^³ô_·ܨºU3S?ß:Nik™Œs¬2zvÙÞ}vàvâÐQêÄ~êøVÒÈnêøíô©£ôÉã´É{üùG9Kü?–¯åÌßÉ»—·p–7‹"ÿü­Ã¢ÝÃ’Í;•ëg… ‹Ö æVK]*Ó$êµe¹¬Ù~«dÀ’7dAíp§¿µ0`ÍC“-hæ‹Ç"î5‹º,9nu¦›h°Ó®ç;ôÙ¸])í-, HMkE®Ûù“à8'¢Å½´ñ]ÞÈ"ü1Ðt[0¶“= ÑþZFÿFfÿZšo1Á ZNò‚i.¦Ò‚3IÞ1F›'¦ºbïŒ3Ù¯«¿Ê­ü"»äßÓÕ_ò;9>¡Ö))î*’¶Vòj5Üj=£KÚªá6êXõzVƒÑØÙˆÖìšuIMº¤@½ÈB'¼´é—ÂþPåŸ8mtQB'fï¢ý3àJNC%›lËŒù__ªáž?‘ä˾‘@lb60°àÔRĺ8>†Ïˆ° 8x9¸F::Jˆ[•Ï­.Hh fÐ}DÑÐÔÆõíd{TàŸOV{˜-**YÀ=ñ z]@xòH½&6¾é60CðIñ Ïë#h«„‡p þ¿$Œzòß“þØQ?ÜÁÿWŸÁÿäVe˜ÿJ.®üüOøçü§E¾Ä¸‚šíñX-Uñ¤eÄÿ{\§ðï´Ä!ø‡ùß®§bþ·©¨‘ü‡þÿŽÿ! €˜ŸTxÛ?‚?æ—*‡ä?–S]äÔÈÑv t ^ìRË!ÚwWVº*Õ}eZ™’ëÙ‚Öå¼Þ ±o•çßÎÝáeÏÜË]<Éž9̘:ãÏÝ,Ü,>¯½l>­?®üŸI¶áúT¾üœµö*k#Äá.*þ(ŽüoòÞæ¾/:þXvç}ù÷g•çÀÿ¿šŸý¤»÷Awç7˃¿ÚýbºÿwÛSðÿ?«Ÿƒ)œ,Cj¿' TkÙ™% ì²,N>Õ*2âÊRo•ð¢ó³(²,j^­0R’*J£äó¨ðGªä¨ÆDÁlfóaÖø=þìþÈ.ß¿Ÿ3qœ³všµz’>uš6¼—:´‘<¼–<°ÀôÌÆw£3_tÞó¿NuoP\Û1ž­[}{ÑžCúæÿ<­øPùWé.p5†øáOôUèþ£~ÑñÓÔΉx48`0ºõ¶¯Êê?“5~.‡°ßúÙµÎEƒ`~Pöý °ç§(-ÀÿYf× £ïÿV¯UüÁ\ßêû¾Ó®[†¢«×Mð·z¿SAN€®ß«½× Àÿ5#ðßÍÒj:šŒ3Ïé[àºV’}k©¥ß|’o†ëg;”àW´±öÇr埅Eÿ‘^üYFñgi¥Ÿ¥Ú®å:Ó”¹ª;/¯­HàPóÕIíi.ù1ÿQcøõT÷8MÚD‚ÿ ˜ÿh{¿&-2æÇäÿïùð¯¯`Eò7ðñŸ°€KüǺ”`þGZÖ%þp±#( =‚?Á^$ÿÑù ‚ÿðßÊ× .¨ÕÈ%øÏl2„, É@ hˆ8Ö`ÁU )œ4ÙÀâZÃÉÿk,À¿ÃLé4â: ñm†¸6Ãeþ·VÒCü¯ ¦<”2ÀÚJ¹`D0@l *F§ðHø·–¥·Uð0ÿáŠù‹<¤ºô¢.úýriľʂ`iEP¡àª_bÌ­•8f$] ¾¾o=m`9¡à¿6r5‰¢>Á<ðÿ„7}¿z(X‚àÿiÎÆC:öB¶ûH´ùTºûH°þ„¿þF°õŠ·þ"}õyæú Ñö‡üã…§ïG/%{¯å{ï >”ž" (»û›æñßÑþÿG¿îùA?îþfB)À_-ÿfú÷ªG/•»{ÙÃóIÎ劾Ae7¡8ƒ‘ŸA)Í¢¦ÆBÀ_œSAÉO§)Òh©Ô´è’Ô›ŠôØr^œ’ïæWîæïˆæ—Îs¦ngÞM‹–O+g™³Çéˆÿ[Ƀë)ƒ+\Ô y™8óµËöo3½ëq®µçÆ­¾í›}±¾Æà£µ€CÝẀùKñ½h €Ö‡ù¿Å ÿiÎe†kî$N„uñ?ó#1Á›U_•7ýIáø¦°ê"ó¿f 4]ü‡Ðp=x³z"¦ M™avù8½üÅ4û~€ÈßüïûF‡ù)€÷ª€òƒz¾U‚øo˜ øwÿ þû®!ø'„ø?Ý0Eu€À_PÙŸ‹lÚ~Jögo<ÉÞx™³ó^¼ÿ&kóiÊÒ³Ôå×üͲß Nßå¾ï¼”î|(<úXr ú©üÞÏ÷ÿ¢{ô_¶gðÿ¬¿û^{Š6Ïÿn{.ð›åÑßì?ON¤SCqM‹¹³eúd~A2µ0“’Ÿ„/äá˜?ª$%º05./‘—Fþ—¦þX˜S‘L3sR&¥‡ù“§Ù ÷³—æÎ Føã‡ü…SÁÒìÙ“Ìуô!°øÇn$ö¯1Ü«4‰=ÄQ/ð#ƹyÓ¹s£ï8.x‡1t@ï_‹‡hß Á?Žÿ—©Nà?\×™>äÿ¦{‘чzAÄ£Ðx¬cšÞ5FqôߨŠ®…ˆ½õ‹âŽïKjÿ„ê?µŸË þï¾¢r_G;G¢ë€ÿ8þŸg÷¬&ºA”ÖàÕÿ~´ƒ ~´FÕoXÝ?@. ö\Ñá, ëë 0‘[Vð…ž¯Uîït®oµþ«&x=ð2‹á¨ú‰¸Ð«g=Á»ÍAÅŸ“äÑãäñ½¤‘¤Ñ”±ÝÔñ#ÞÌ=Á"Àÿ¡hùQîòCñÒÉ2ðâÿ3Ù܃•‡e;wKwOËöO þ?U휯ŸU,B¸PVÿûuyýƼ~³¢ßš°ËýÕyþj¹¯J!þ#-rŸY†Ût¤}¦<:ßWR4Z¨_.ulø6Ń+AøX®¥ù¶2ƒ;üà®hx#sp%}`/st+}h3 à?´–Ú¿”胗-&x—|ë)ýˉžYVï4»wœÙÕÛì¹Uï«ï޲š>WþôüKÍÿ,EñÉ¥̨üS¦îsAõUy7³<(0r´}9¥nyYG‰°¥4£®2±FÍiРsúxpy«ŽÛDÔÿõt‚ÿà Iÿ þ˜ÿ¡£²ü±0ÿ?ÿÀÿßïÅüløáÌÖbv¤Hˆt„È,ti;Pm!§¾8ä >•PÉÅÜðù…ÿÃ÷èaÿÉŸ=¨ìÏrÙ Ë çüΘ—àßQÁj/g¶•1ÚËYÌÏAÒãŽðI‘O/–ø,¨œè‚ÜÓ(t²q³îN5:-îP¥ðÇJp¨ þ£uü0ÿCYð?Âè8 ¡þÿa ìªlÍŸX@ð¿ÍN Y€™ÒnŠø_ðßH phIþÓÈ7Þx€ÿà­ää8âtqF81<ó7´çŸä?®ÿt¨s:5b,̇5³C/tVø 59–Á´šNÓ8³UJ¹ÞUŽÓ¿Â¬Ò‚»œñû¼åìI€ÿ1ö8sæ”ÐqÚÔÝŒÙGÙË…küÌ!žþ?¢¾ëO…›¯Ä»ï%ï„;ÀÿÇ óÏ’—>w’“Àÿ7²½EÇ¿–Üù¥øô—òû?•ÞùMuþ_–gÿ·ýù¯Æûµè€¤µ<øÿïUÏþj{ð‹åìqéÊ «Óo˜–´Ö¤æsYÅ<Š<ýF/&/ƒ–Ÿ_’S–U”LþËÓCü/M.cÅ;R Ö ü‡’Ù㬅»¹ˆ—ycécß‚#@R€g㞢ӬcÜàR|ßj\ï&Ý ÁÿͽïþoÜèݽéºßƾMë‡'—ãPÀOòYÀË¿BsÏFwü!€,U“ˆYÿÏкˆ‰ÕÀ×½ãË’ŽïÊê?—×ýYÖðE^Ë7Åÿÿ£ªFcêÇ)sŒ.@4DþkIž%ŽsŒ8¨5t³¾ÿ:rˆä‡cêÀ,™Ƀ« ÁmÞà&/¸–Ø mf ¬eôïò†6Sƒ›éý`K\ï Ó ü_M ¬$ú7Rà™QŠ#Õè»Uï»U 4ºãkÛnèu”þKZág©ŠÿH)¿h>Z¿‘×_-n½^ÚCSû’ ýæIY]_Ea{ENce ð¿^ÍmR%Ñ(ð_Ÿp‰ÿ­Ú„-‡T³† ‚h‹¬ù %àÊÐHÜÈø?äÿñú/ÞŠ- Ôð-rX<ù§„0ù‰Z1‡´€ÖBÖ§€„;á\wÆKÃÅ x” jLO%‡ùONl$ùêêF4v‹ä—މ—}þ}&N¤ ÐsÈã`&¹ù'2æï¨`£¸· ¡"ù&Ô ›~ˆ½Èr›s0ÿqïà‡*#ÌÿÌHÂü'”Á¶€p ø_gŠ%-€¸‰‘üÇj Y@lkºü#øüo3Æ„ùGðŸ üo×P;´4\#„,¬‘ &Q\‚ÿHØð´GbàWˆÿŽJ>¨M)hW‰€ÿX¤ ü»”yžbͰ¼~<»}<µsšÛ¿2ôâ^Á[œ]îð6{ð0qìûµìì/J´ùçÿ²>AÌOðÿ1èoÖ'¿Yüf¹ÿŸuÞhw—’zßäµÝ*ib«ÙéEi4iæMIÖÍÜ´XEr|Ib|YbLQrŒ" BüO»Q–zCÅ …¶ã¢¹#áÒIæÒÁƒœå;¼©“ô °³;´´-šþßÉþÃû°Û»Û½NE)ð“êY‹êY»Ö ñ?â?}è>°Ã@]€0ö1ù—â{áó‚Ø^|. â< Œ°€ÎÑè`8¤Îo5í_”´}UÜðgX¨é«ÂÎï+û~ÔAHâÿ¸¦Z`%ÁµžìgvùñÙ®5À^6p«:pÝÀÇí Àà ðþ`€àŸ,ûƒ`øC_ œe…íÚdû ÍÙg÷%ÿÿ?¾Þú»­,y÷þñÞ¹ÓÝIf£,¶dÉbYf1ے̶dffffffŒCÍ=3ß™{ß¿è­}¶¬(™žYëYg˲#+ö穪½wÕFPÿ:`C4‚øóÿ2zþ2vñ,fþ&q ø3yœ0u¦\sdžZLmÀüïHh·FµÙâ[€ð™‰hVJÞú³¢ðôFb-XÙ‚\<"®-Eß®5iìËÚæõØ®y~31­~9[xíkíËVCû–%]s¼¦e^Û¯,˜?ƨƒœ‹Ûšçu‚ŒÒk»| [<íÿ?G;¹°‘jÏi0~©ú«Tu_"ÿ^ øAh~f}ù(¡ÜÓTá™RùÖTO¶µdõðíÍj]µ&¶@+ÊÓÿ‹ŒAÅN‰)ÐÉ$ð)åOø±ïj˜€Òbøc¹œR2JD~,áñZÀŸŒ P|éúM *‘3@År†;ÿ‘`q«!ÉÑÖ#üüGét¬?åÿøßñ¿:•"â¶‹ÿ. p¥nðG+ée´é/øâM/ À>æ?¨ÑîÒ]Ï$üa}j(è|ŽÍ©z RmJ(‚¿ uŽÝñŸïâ?üWb ¸Zþã…`"`ºñŸîâÿü\Âð/ T˜áëâi&©$ï4ݯ<ݯ,Íó¿ÌB"ü§ü'cþWšèF— 0+uL—”i±ÜñŸÂðÇ‹µâ¤D|ghÍ%ì5†˜F•º;)o"¡q.ºg&¸sRØ>+ìXt®ðÛ›ØMkÜ®õ î Î=A÷¯°:‰×ü{ü¡ñø™tú]ÄÒ‡èÕ›ðÅëðåw‘«ÿŸJgoBÿ! ¸ ]D§‚—ÞM½c_³Ç?ŠÀ>F­~ŒYƒ/ü¹ò9rõ§„ßä{×ÿÝxòO+ªý+ý N=%,à•ƒ¬{dîÆwùçÙ…fü s¼ML§E©¸Ñb¯ˆà7‘B¯YDUù+¾@~¹È†÷"ƒÍ›Œ­>I^< _ÚžþÃs"w;•ENDO톡9æÂ¾-ÑÐ2·sµÇ¬ž§ÔA B¡¾wõÜ몕·u{þmûÔÎfÇf@Ç ³°šg4‚ðBð†Š\ lþã@ãÔªAßàÿ0©bÀ§xÀ·è ü¯~¢ƒ à~TúLU÷ÆÜìeƒâÿ1jõ?Ëišã6/òÛ&U]žv€?\;ÞäB $ð/B`÷Ì5½´ ¸Ôö: Â~ ·wn÷ÛlP×›œß‚aJÙµøša —ºDo;Ûdwïòv„ÃÀÿ-ÉÈ®tŒ(þLŸ‡Ï\Ç.^'®\Æ/½“¯\ÄÏŸ%̞ˀÿGÊ¥#Õê‘fíX³r¡_CüWΤLNË[ *ÃZ­a­¶H4]4=¾)#¡-#¾+3¶+=ª'3¦ ¼ 3¡%KÞœ¡lKWv¦)»lò~uú¸¶xNQ7Ö8ËkÁÃËÖƒ:WyíëÒ®i÷²¤gYÒÑþ"¿’—E”5À[4ÃigÖO²šgy3œ¶¹ ð‚>ÿò.Rq©°›RÜN.hôÍ­òMËz,7ýazax ÓÜ—=B,£2'ä>–WxZj¼lµÞi ²W†ZK]¢®"9¦@-´Øˆç‚Eÿ)hkPq É€z91¿+òÇØÇ=sœý3]ä'æ»òºDÄÿtH\ð5çîºöÅ#¾±€RtgtöWŽà:æš;†‚LWcR«LÏ.>ƒÐ¸vŽ‹ÿøu7JaãY„Ð /¼íße˜ÿ¸þS‘ÊûEY@~¼Ý¥än»#V±î‰–>ÕLLxwÕYB!ªÇWçLóÔ×gk­á.ÕXªSC+Ͳr£´Ü(Aü׋\ü¿Ë¸Æ.Áöÿ_øo%»à^@ØÁä?„ýE™~ÿâtßb›O)!«_‰Å·ÄâçLœüGPef þ¨  £JP®#`—iY¸O,aw€ša (Òˆhƒï, ÷NÄÂФëP˜Æ“*ÖåÃÛÉ“+Qƒ`Ó’VȲ7d«ÂæyNýRPë¿g“׵ÿ>Ĉþ‘CÑèv`ß‘pôD+äÉ–Ú¯’6.#×d³h+{ðرhìB<~.?‰œ8Œ™Þ˜Ü‘í zÿð³/Л'IUÈ€íô†YÿºYŸº™×UËžuÛ¤ÖJ;ð‹Õ¹жÀlB‹„ à6qK¬6bdpã*§‚àÿˆ_æ?šæ_ÕëYÐëåh™ÙôÜÚø•€Š*JÉ‹Ÿ(*^꛼líÞé¨íƒŸc’Qñù"·eŽÝ8Ø__8èWÔçßþ:rZÙ0µÔ• ´¾‚,íÿ‡8}óg¸éóÎëõÊí÷±÷y;z<ó†HÅã´ŠqFÕ«´Àl³[ 6®tnö@r·/Û@ð¿<~6s>{1{“°ò^±q-_þ_&Ì]ɯTË'Š…CÅâ‘zùPµtªY½1l]hÖÔ3û–ÑQ]Q³AÑHt{kN‹lΈj̈jÉ@«À]iñ¶¸žŒÄ®,´"Ð’)@§MÛ›j0[–4MÑ•#¢ŠI~ʨ{K<°%è[t¯ Û6Bz–¥`«’^€ÿª g]Ð iѽr‚Y‹FsZ¦8h`1\ÇûÉU½¤²>jy/­´‹VÜâï¨~cËyª´ücóˆÍxoº¢ÿNj}™ù4>ç©¢ð¥®ôµ¹ìMJ½VÙSÆñå^æÚ(myBL¡Z˜o p˜ï‡)L (HaƒÐ¦ hÏ,0± L¬‚¯ùïì“©ûŠÿNøßñß5“DÀŸî²€¯ÎÀ’åw¡éðŠ/Ë¥ :!dwüG^@<‰Ø^èT™Š…‡Ëg¸à”ÆS¿™Þ‹»:ÿk,\“ÿ©Õ)L—ÔZœð¯JeTZP¥¾²†b3À¿XÃ,Ñ"þ»æ ¸^O)¸Ö,«KA§BÐT¸;àß` Æ‚{ü¾K˜ÿU)!Ø€ÿ%:a±Žw'®“ÿ¦ ÷*ÎÿÙÄF lŒüºÃFù2þ‹ øbå§ùbþðûNòð/²z—*µú•~á?©4Õ¿,Å¿ÂLUš(Uf:gx}—ÈÐÊJ\ÿ5wóCþX*~¡š°”àh‰6ËÝZUуJÛ¢²é@5µ?µ“8¶Õ;%m™—4/‰7dm›ÒÎe^„ý;¢MNÇ·÷@2z&C3„ý@þ=îÀN`ßnàà™xêJ6w¶ðàµYê <Á?ðÿ,Ámðâϡ˿/]±FNèýïÄ3Ÿ¢×>Çmü’´óKÂ6ðÿÇØ­c7~NÜþC½ÿ7ýdÿc¹øÿ²nÁ  ÖOn´‹Ã¬ÒÊç:û÷±Ö§Ai÷„9÷Ãí¯lÔhE7Jä%~/öŽP þ«„oT‚×Àÿd Íø¢Z½¯¼‰Ù¼ ß< Ÿß“œ„L FŽ8'âÁ£ð±£Ø™ƒè™=É*€KF@Ëìö)R-•8é_;éW3íS;ý¦ mþ÷o]÷mZ#7¡.@hxb3æ?ÚÿIŒÖ]b¢ø?ˆv‡Rk‰…€Ú!¿Ò™€zà?ØÁOIÚÆck{›^óT_ñDSñL[þTSûÚÔð&µÍ+£Û7¯××>A/ìƒC  F0L*ï€CúÐëS0@*†H•ƒ|@:@ADû´¾JLJAý>ùƒ~…½^vðøZøðJИøÀÆyZhƒÕµÍé=ÿ÷Ä£;’ÑméèIÄìIèôUÔâ“´v“´z‘¼r“¼üN¾ôNµr­^9U.CØ¢[;Ñ._›6ß·ÿ—)«ãƒÚÜfCrSZê1žÕœÑœÖš‰v¥'v¦%w¤'vä$µæ 9,í6Å Å2®ÏKvL7Oˆê'yµóü¦Uqš)#ê]vƒ þ_·-ŠšÖ¤¨ì¿ÌëZâvC 3 vP;‘œÕ4¨¢Õü蕃ŒªRA+ÉÑà“UðX—ûL™î‘ý$)ýaŒù»ÐÔÂá&ÿ…²ð¥ø_æin f½5˜¾ ×ÿ%¤ÜßÔ“ZW¬äåëiyFÿ¢T–]M-62ÿùf¦Ã OE“dMŒ|3 Ë®gà!)ÎnÉù£²Ô´ÿÄÿã½÷Œú;þ;¥¤ UôB“húû®{LN¸ÞË” à‰œFˆQ|—¸à¶—%— - 0g@å:v…íœÒåìêéœÌrzAÊWãÚk,$¢ää¿Í=þwÂ5½1ÓÁtHh­Á9ÇùSÀ˃—ꚇæAÜ €À'ÄñˆÛj“ h…-Ã%4H ø/Ö Š´A ÿKŒ\g7"þþßà`þKn@ìu΂Çãàï,ÀaEü¥ùœäO'¡{›_‘Õ—`¾o)èŽÿ¥©~˜ÿåfÄÿÀÿJ­ÂHá€ØEs­Œ»ñŸ(Ýñ¿Dƒê?E‹ÿÅÈÅP….¬RÞ¬×eízÎUs¨mKÜÈZtÿœ¬}AÔºÄkX4­ ÛWyÝAý;‚¡Ý ÞmnßpøT:~Ïo^·¬IÛ6$@þ>¢ýª c‡_ÑàöõàÎ^ûl`Û·-d°ëçxhçÏ µj€R9D«¦×tú•tû—ôPKš}óê¼2*_YUyÏUÙOä¹O’ÒîE[ÿ‘íïx*/z©-z¥+|£w¼Öæ¼T˜D¨þ"Òþ )$«ëBŒUÑqÅÉ\»Î/ÏàWh¤ÙÕäB##ßDƒtÀnD¨k!æCŽ@Ãß%Wäïš“€•§¢æS×ÿC €”ºKòT7 @*R"¹“Ó?#«%ðY éŽÿ Rd å*f…:T© ¨Ò²ªæ#GqñdƯ:³¹óߌj8Ω.f¶‹ÿHÄèög矯öÿ¸øáVpNÜøèëu9³R/©Ð¡¾åp…{½„ ¹_±àAplØ€ùxè9†?ž†‚ÿ¯ùr‡?¨4…ë„ÿÿ‹@V§€œ»@ï:Bà‰ð+ àU`õ)´ù‚øó#/@7ˆüÅ©>¥˜ÿø>ÕÉÿR€¿™Ta$ƒÊ —Êô„œügÜñß™ ƒØxGâ¿ÓDEj X@‘:ØÅP™&ó¿I5c´Ÿ§Ž_Ê¢§bÆvb†WƒûÖE}kœÖuVÃ&·e3¨gƒÛ·Ø·Ø X8 Ï$ãÁSâ‰3áØ¥dò;xÈ>Œ_ÏÞ„/¾ZªƒD¡ƒˆÿaó¨\øò/á«ïE3çœÑ ÞøMðüÈ÷ÿ„öO>øM¾÷KÒÖ/òíß4( ø›áø_¶«ÿAõŸ³“„‰nr~ÑceÆ_C³î…ŸòÌœÔ f?M÷Õr„1|?°€X¡§œç§ä“Ô"•ØK%öQ‹ý2¤ˆ”Ó¤‘›ˆµ÷ë×ó§á“§Á'ü‘“ÀÁÁàaðÑÊxzO<<™8Ûæ÷­sº–XmÀðaßÊqrí¨WÕøÛÊyïºuRó’:€Fh‘ëqåáŽÿhr"«|M hÆmöÑZM¿gá( uŠ@ó¶üÊzÞä¢ÿÍ¯ÒšßØê_¡¡0olÝ~vÔÏÁÛ>N)›aÖ,sÛ—8mó¬fàÿèÅ3%‡ýK&è•ÀsHéô{Av¡>øßù:{À;„T<èS@ð¿4F.› U£ ŸüÎ96¼бÎêB•þàx_<ŠãÄÿÐi0Ê÷h‚Û*æÿ•båZ¾r™¼p%Ÿ¿P,$/¨VÎŒkïR6?¥î~6ÜšöÞemØÇúŒ™Ôü¿55¾ÕjI‹uö|ÈŠiΊiÉFæ›­ŠžÔ”1]îDLÑŒ¸|ŽWµŠ:N÷Bx¿Ò½!ëZ“töWy+A]¨1iPÛ ¯eEÐ2ÇkœâÖÍðgëÇUÿO6ŒÔÿAÀÿnߢ¯ü6o{³WNÝ«ôŠ)%Oÿíç>J´ý%<㻨âgÊò׆rOS™§ àoñˆQýUšôžâ;ÆCœáS#4ÕE'—$qóu¤<ƒCOrh(à#Õn¢æhvÞ#þ£‘¸€}ƒs6nކЕ«¥»&äºóa_IÉQApã²t#ÿVØ þÿ' *h„0Љú9_¿ˆªïøÏÀüwÂ_ǬÖêÙÕ†ÀjË%ܨŸØE"Vx‰eÜ@b°—óä/~üßtg‚¿…áä?±ˆð/Ô¢-¯®4lΑÌÈw"¿VT¦–j„eZqã…øŠoàAwwáα8AÀú7þsõwþCðÿøïA~w¡ÖÐv‹!ŸüTŸ aŒ}¸ÁàƒJÿKR|1ÿ!øwòßDªBü÷'„-àÛ #–XÎɡġ€•«$,T‰ 9-Tª–ÿ˵(h’'ÌèKÏŒ3籋çs§1SG±Së’¡mÞð.»k‹Ñ°ÍjÚåôü·™]»íûAG‚ácáÈ™pÌEHÀ¸B}Â;—LC p¹ü9nãÇøÍÑëï"W/BÐ)°ð…ë°…O+`e ·¢™Ñô»à¹Ÿc6€ü¿$löMÜ @ñòîïŠÝ?ÔûÿÐýÝpüÏ”óÿ›võ›å`QÜVöXSð81ó‡PÛ÷ÁÆGãc.X€õžR€\ÏÄzX‡#ôNx*x~*Y)ôƒà,@#ô±39s …çò HO>DnÿÑ9¦à‰sÁØyÐÈ…häX:´:º2±';ŒEÌ ÅnÁ a‚ÝËÜÎ1ÿšQRõ¤ý„W5ð•Ô ZôoÀûÿPƒè&Ì\ÿÁñ?êÁjò,é]8C­›¤Vù”ŒùWŒù”CR0N*ò*è}Kêo³Ú<³ZÞdÔ¿²Áu€\Üë›ßëå˜fT/²êzkÜŽevë,³Ò<« ø¹„ñ¸‡'1}¬nú¼ 1ÿ{ßæu¿Îìü‡‰)NøSªÀ‰æ[8­³¬&¸Y èÜ`wo²»ÿût²c/xí‰ ™< ›:™þJZ½MFä¿V®^;ãÿ…+Õê‘båP½zaÞxoÝü)uøÿÞ¼ÿ.ww?¤Û˜ÖhŒþ·¥F·ZbÛ,‰­–ä[RKF\SVdSV8Úÿo•wS†Ô±•3’še^Ý6¯y]н)éÛ‘ n‡l÷®Š;ÖDíë‚Îma/üw¬²;À”gY “ìšInå´°z2 ücÖ Ó«FÕ”òvOGóë¬NG‡w^ÝË´ÊgæòçæÒç†ÂÇšÜgràÖƒ8àîý¸Š×ºj¯”*sÑ[]ú“€Âÿâ&ÇW?i‰R^Êj¹©­q†²$~¡Îßað‚, @GDûÎzŽŽ–­¥fi(Ùj¤ Ë}Nº+òÿ†ÿØœ7ÿÆ,‡œúO€ù-ÀÅ—0ÿ•ýŽÿLÄþ *¸X5F61„Ë%&µî!ªú®fÎhOªóäïÝá¯?·€J RE*ó›à¿@€÷»äG;QíILBt,D~µ „Øß€™_ס+[¨œÈФ|)ö—PýG/,Òóq‹ A ×â/ªücY¸Åwü/rã!‡‚š=•jO¥ÜÉäHñ!þ#y»˜O|èS”ò.Nñ.¹³à?†¹Ñôoü',àÿ€r=‚ÿø\æRøƒpòY€&¤U®™ÕTŸ(çNÃP߆ó˜éãØ©éÄkh‡Ú¹E®ß¦Õï²;v{w˜»Œæ=nÿ©`tÌ‚ë…pìB8~)š¸–Ló†Agâ© é ¤cÖ@ŸbÑÿ Ù<*þG.£ÒPÄòûÐÅaK`$s‚ç‰\û%v²´ÿ?ùà—$þÑ. ?”H×þÓpò¯”ó¦ž}T¯TÜOÊ{“v?$õ¾Èð@hzÌ7= 2ßç¦ßÎ~“NŠÑ1%É\FrIü'A  ú¨„ÞþëJNÌ–¦ùZ1Æ„âÿ°¹+‚ÿ§¼‘ Þè¥xôD2t€û›‰'NÄ“GÁè€ð‰t|—߇Ç`MRëAÓ”Fàÿô›ªe߯ JÛ*­e‘Ö4M©2çûÿYj`‘æ@.°Ân…hÄ»lŽÞ€Bw¿2pï²ir Äÿ£¾¥ƒ>…=žè(V·£Ë×Ñî• ×zù Ú V[V9í •@”‰ û@Ã…+øðS«ð½‹Ð|1ß<}8?àœ¥ûu.¤ð}ûã”r°x  iz-`ñÿRPçf`ϧw›Ó YÞpä$dê(lú8ræ$bæ2zþ*|öCÌÂ/Š•ïÕÀÿÅ*Zü•Ï_*W€ÿGšµ óðÿ³yë³qÿSêñ­}'ÀÞhŽm°„·Z"1ÿ۬ʛ¼bþ Ô ´ÓšÜgLV8&¢jç¤Í«Â¶mAÇ¡¨kCÔ±%îAüZ— ¬‹zÖÅðඨs5°mÞºÀhGGT8MSAUãA(gÔL0ÿG€ÿôŠ>RQóËÌÖ×YÝÿ_Új_Xj^ZÊžŠkϨøó}TÖ1e/5µÞæj/S©§>ói¼ñ~¸â;qâÿR~/4< 1?–¥> ­H늳U&IŠ4$»Î;O뛯¥:tTàž‘b7Ð0üÿõTü3ÕäLĪKÀ—\e—ÿÝ,—€þ= åÊÉy Š]ùgüWÑ\*Vù!à§ÁÕݾ¬öºó_Ë øÏ@ú2{ßÁK¸¥ó]37ˆù™€t‚êßòßÕð¹Ò‚p÷Ì/ü/ÒüÈ“ƒ°Üà”—ÈÈK¤•(…Å A‘œº"¾*Ôˆ@pƒ*ľP©FLÔÀ®Ô‹(‰J HÅ>!ÿ#ÏþåÀ¿„†±5ó¿À%b#P~ Õey)$G Énö!䕟â *ºÜš*6û¸ËÅÿ2‚¥äÿ§ü',à ÿÁÜQ ×÷îÎ+Á øÇüøª‚‹•Á%*ÂÀTÁÉæyeýqÜì¹lñ2dæâ sÏøÈ€ÿWâÉ3þè |(ž¸ ™Á{AßG­ü¿ ¤½ ]º _ùµŠ-à*tþ]Øâû…ÒùâÙC–~Œ\ý½ö›rÿoªã_“÷ïø€RåÞÿhÀþ'åø2a¦Ë7/çû˜œGQi‚SŒ÷D¦‡Bã#žñ>ÛüC<˜õ66£gŠÔ¦2È_ä£âùªù~j·š÷¦E`:Ô÷ß(ßG¯ß†¯Aªr6s&Aõàÿ0_2tдÄiƒø‘Ûþosûv¸}ÀøÙ!÷9¿ãäðÿ6jøÿ“jó“nûzõrí2yî"iö4iá yùP·~žºþ.uí½nõ³áàGëé{ÇÁV~‡Ñü¯O k²F·Xb‰úObkzRKZ|›-±Ó¬êѤŒ$æM†W.ˆZÖø]»Â=qÿ®¨kGܳ'Ø Fs9%â^Ìÿ• 6°ZÔŽ›Ó³Èî„äe’U=Ê,ƒ·,øYÀ¿ß¿·¿FYÕk4"éuzÝËÔŠ§PáKmö£Ûw‘Oäµ>)u~æROm΋$Óƒ0å÷’俊þO?$íYlÆ“«GD9£+:³&)´HCuè}:2z•¯øS€ùàÀã¹:ÿl-Ã?C…øŸ¥qÂ?KEÉÈßÉü_–ˆ\Àݾ0?™ ú†ÿÕWü/üþX‚L×vú/[}Ü‚ÿk LêßÁ?àÕZÙ\ý<\`Ç;õîü¿ƒ?›Øöƒžæü»ñ?øÇÓØw*7^˜ÌÃ*;;ùóU,Tô Q âÛ`ßDþH_ÿÔÄw‡?’5¨”P‰5°˜ð“?ßÂÌ'VóSèÀ‡™Bˆl7ùÛÍ~y&ß<“·Ýèí0{ L ÏBç R‘Éô”þþ—éIez2!Ê7üw÷\ë;Äq?ÜøÞ"þ'àïä?È èŠ7ÍÅÕì‡]Ï_…LžFìGÄ/ì‰'7éëþÕk´šeZã*½k“Ö½Mmßfvpúþì¾ÃÀ~°€SÞð¥¥EO£—²éÛˆ…÷Q`ËÀÿÏ1›ÃW‰+@~¢AÜìuèìtÅÿâÙÏÁ ?†-ƒ;üœ¼ó»âð7ùQü/8ü›âIµYÀoºÝYÝs3ð?ûaDúÓà”‡óýà)X€Á#Pÿ€ò€Ÿù,"Ï'ÙF‰Ò³Š Š‚ç¥áyëù¾Z¾Šÿ¶Gj?Ô^+–>Äl¼ [½’-€ëÿψDæZ2y&= &ÚK!þŸ¸ >•Žïñúvxhèí<«âÿq¿ZàÿÄËrÌÿC¨¿?Qÿàb~ˆQWÙsT4,â|4 ø<Ÿ¤V~ѶRJíà›ˆÿáAŸSËHÅ@þ~¢ÛÛ09ê&ÊhÜätl z°ÌÒÐÞ!ˆÞ‘˜usìF´›”ÈðÄáq*ê5Ñ>ð¿Ÿò'•ü§(`@ðàkþ 96âÿø «k“XüÝã ‰G‘†O†O†N¢žo!73?Ë×?É×>ê6>è6€ÿ¨øOðÿP¹zjÚ¾´n^›WÞi–?ë÷²]Û·WsºZô†¦”8ÔÌÍ&M§G:ê[ã:LšuÚp|álD트e‹ß¹Ïï=íŠöûâ¡}éð¾tpG:°)éÙw¯ :ˆP­KAíh-8¨cš^?A©›¦7‚æYSŒZ°€QZE¿_ÞÛôÜÚò2 ®Í/,m¯Á¬µÏLUOÕÏLE¯t9’3ïÇ–¾ÔT{JÞ(í/“ÒžD=Bÿ"Hú?BH¬Obsž£5âŒ{1ÅžéÙò˜ £@O*0Ðñ0,"à'ƒ€ÿù:²“ÿ:Á§0ÿþ™J2\s”H¹wÑþ—ÊÏð#.@"Èï.€ÿŸñŸVø5ù‹ÕT§þãsU¸™ ä_óŸŽãÿ;þ3ö V#¡+³Ñ†>tíç À»z\…lõDØÏ¹L•‰,HîÁ¡u™C³&‰¡cˆÿI¬/Ã(é ‚¤ ¬üä <ëÄ®àÿ1ù^÷D|Ô_„-ËeE:ÈÅ'üÍ‚27øWXùÂ7ø;œð§;Ì4€¿Ý„àŸg$ðwòßnòÌ7b½%„îÿ ÿKL~Àÿ2ƒ/ð¿Jÿ-ÿqü»dü'þ—(p“(Ñ ÂÉÿ¥äâ‰Rêä´i2¼lSÔ{%™¹ =‹îÝé…¿åÓȈùW(Õ«ŒZˆl—iÝ›ÌÁF/d{=¬CVï gÀU:æ BR ™x>ÿ.bøÿ1fãSôÀþ ]<ž¹Eó€º2|”Ìý(™ÿ)dé§ð•‘+Ÿâ¶~JÜ…øÃÿŸšÐßUû¿Éwþ¦Ù¿[œbV—=PÛïǦݱ=–¤=[†¦>¥xˆMù†G,È2 9Â¥j†Q`øÃÓ^çz—ÿÕã¸þ **ïÃÓ€öKôÆí ÿWÛ¦)µ“þÕs  ™€zà?z&‘u«¦×¦õS€§ŒøAä?ì]a?ÀŸòt¸ßµÀnÁCj@¸þðß㣓q3Àÿ£°)àÿ¹lü]äìOÉkïßkÖ>ê7‰úÏ<¤çò¥Síæ¥eÿ:mûƸ üÿ‘ˆÿϳ×çÓš5Ú¦”ØfKDujb5º>=¤)SÔœ.mµÄ¶ë ½IùSÑ+!Ýû’¾Saß™¨ÿX<1ÿfÈè¾h|_<²+îßwmŠ;×DísÜÖIfÓ¿{‘ß±Ìk›e×ø•Mú×.2;Vú¦hu£¤ò~ï¢î·yí¯s:Þæ@Øßð4µåyjû+[·gfû›ôúgæªÇz°€šçfˆÿóž(r%–¼Ö¾Pd=ŒÎ|my¡óÅÿo®ò©éqtÖ+E棤ÜIyþ‹´öМfeð3_‡øïÐ €"þwç¿æ?`Ã àŸ¡ð‡k6°ýŽÿùl¹V2 ®.ìãÑ#r*Vv2%'É©ÿÎÿ¢/äwƒÿ×üÇmd\ü'R®ÿTji` æ?¿ÉÐlc€ÿXõ66:Ò›ÆÆPiû·hŸC´ƒÃb¹àïâ?püÿñÐ1×0L~PV­@.ÀÏs å%ñr“‘ì ÁöT,ÒðA…Z$\ùÇœS¬¨íO…WF‘×R9®›bâ8@I «ÈÄÌ7³P3X´õ‹Ê3Rˆ0€ÿû¹z_»ä…²EƒW¾Ñ«ÀäShôÁ.€Œ€À¿œˆÿK¾ 2£…ž„¤#ƒpüïZÿÅý1pSP CÃq¨ñÖ)âÄê ‰’]%ÎQKrTÁ¹jY¾:¤ˆ¨ÿT¨dí1ºáˆ‚íp€ö•¥G¡Qã‘Ó[¢a@Á³e•Ò°FnØ¥·¢%`tÖ®{¬.0‚}f7ðÿZ0v#œ¸9 < è;æŽÜϽX¾ _ü³ýKÂþ‡ÈÛðЕdîZ:û.xîCèâ;ñÌ•`ôN8ýQŠÚAüµõ‹|÷wÕÁoÊÝ¿«þïÿ‘¸ÿÿTÿOsþOÃÉAøpåƒýQ¼ížÌr_šù0<ã~¨õAŒåAhª‡ Ńe~`ö2yHÍ¢2<é~ i´°TÇÌ¥ù¾Ÿ^è7Zw¥š~F’ý¶ñ)lõF6ó.½$x%שKÉä±xô\6y:{"ž<Ž"wMžHÆ€ÿG’aˆHè­“~u^5“Þµ þÍÌ®ujÛ’_ã&­u=¨{‰Ù ‚˜Þ Á?ž ³ÌmÌγPû$¢;Ä©j‘ÖýÐÛâq?´tØ·@ÅjÅ$­ršZ=O¯[fµ¬³;ÖXí»üt #¨ `ø,‘ïÞGuZ5*Qk]=(F¼Š'üÊ'Iø ßm–^ –_a3¼¤5.z…ËŒ–EJã&»sƒÙ¾ÇEÅÿcÑ6k¸žI§Ïƒ§À/B¦€ÿâo¢f”¯ÿ¤Øø¬ØÔŸ©gåóWòÍšÃO†½[ýò{ýÚgãþ'7YS³¶üFc\uJLMJbezXµ-².%¶Å¨ìÓY†r&#ŠVÃ[¶$]nà%‡¢‘ÙÀ^XßVh×®¤w[Ô½-ìÝ÷Uëùw.óà¾m& yŠÑH¬ÈÔâÞc¤Âî—ÏloòßÚ{^æt>ËìzžÓõ2¯ëµ¡íMNãËŒª§©µ/Óßf•ù¤–z§¼Öe?S¤=Œ³<ˆ´zD@ü¯û«”êžþ4&íqlú“¸ìgɠʇ†Ž€¬¾¸ÌZE¤CC±›½rÍ~v´ŸŸ] ¡çküZ_»Æ×®&;Ôdø0GKÆÛ~ðúož|€üwBHÇÊJ¢f&R²ô;´¿Ã~n2='‰ÏÉN¦åÈÑ¢0<ž%wf DɈ‚þQ %_KE¯D,»@‰†V¦¦•i(  •€<¢½Kÿr5 >U¥¡Uë¨5zZ­^k €êM´ÆF³% ÅÊálÍélPSdÌZ Ã5ä«:…YEè®Úê°²+,œò/F€vþ”ñd<òÒ®B³&s œdVvR€û`š¬xF~2àŸ—ÀÍ!“„„]à¿§ _ñ_þé‹ çʯ…ëŠù]úwþ[¾ðßa pÂß@Ë5 ¼/Gë‹•§õ!äåX²ƒ7X@¡Ñ«Èè…ù_ Ì'âÌÐá¿«E†{/_ÃÎWÿQW@<‚à?×®â窅¹*IžZêPÉ (U"þ·EiF" 6Cû…3çü©KÙÄYäÈyâÌqÌÜ®tl‹Û½Áj[§5ÿ·(-{´öƒÀžmFû½ ø¿ËìÞ¥w‚œs‡þǬþ#€?{àˆ3x&˜€¸íŠA“¯d ç’ÙëEð…Û…[Ù<ðÿ½!÷Œ;zνL} ^ øM¾÷›rÿWÅÎßTûÀÿ_b·ÿ‘tŒù¿Âo/¸§È¾ Á¿õAH†Gâ¿G„Å#ÄòP”ú B¡"Ùùi„Í+*ne Í,†™G1 IF‘ßbDã•jò]ìÂÇЕO²ÕÛàE>èBˆ^É%âBE¯‚@’‚ir䛜.øïØâv®±Z!•¶Cüòϲ¦™uü##`5âóŒÆÅ€æqß2 Ð ¥zŽQB®Ð/^Z°f¶‚³ :·Ù]‡ü0;”ø„@¦6׫ÐytÖ”Ž_‡Oü!?}oܨ—Î5ógª•åî'ÕÞ{íúµføÿI¿ÿ“õä*szÒ’W«¬IªN­²„6Úb[ÌŠvµ~09{"®x>¢n#´ý(bè$tôX:t êß÷í‡ îÉ€ÿ -A6PÐ"·ø.ðŸf¢µ˜ J ¼ià§` =¯2þÏÓz^fw¿ÈêzžÐóÚÑëYÐþ:¯éEFëÛœ¯œ†7™MžÙM>¹ÌÜr_KÎS…í~œå~´Õ#ÊöY€é^Èú(2ãILæÓø¬g ¹/y/•eµþ¶¡ø¼6µâmÈñsL$´¥_Ít¨¨5)Oí“«ñÉÓ€ÿ…hÃÏݶO5 b~  wf29+ )3ÑàŸ‘Ò0ÿá³nÖ@샾á¿[½ˆ üÇðG‚7þCØù_®¥‚þ;ÿ+ÕˆÿUZ Xð¿ÎHýþù±¾á ±L¬8ù®n‰ÀÝ™_6®üÿ'þ»†‘ü3ãèþ¹ñœìx¶€ìį„íô͇yD¥¥ÿ 4<ÌÿBóßÙù5|Cœÿ†ÿîð/JeŠÍÀtœþþ9: d|Ù?B> øMÈQ{¹é-v”è<óõ^` "ƒËÿpSiðGÒS*õîûÿ¿sÕñ0ÿ}Âñ˜xB Ž]hWrìJnžò q¾òËBpk„f4²p+¬ïX4u)œ¹ ;<‰?]8™Øôïp»6Y-kÔÆMrã6µù8¨ŸÝ )ð¼àˆÝwY½ë4pøñÿwø4ؼ@Ó¾>EoÜ„.]H!òŸþ¿“ÍßHgÿ8곇.ƒÆß‹g?ËÑA0åþ/òmÄåÁÏ1[¿Åïþ_ÝÅïÚƒAÿ²œ¿Ä§}ðO½ .ù Ìö(ÄúPjñX=$à ¡ÑC ÷à›žK-Þ¡6ªÌ °rÙ%Uä»Õx­œ|K´ ^¹‘ÌãÍ«§¼‘“Àá QÅŽ‰F€ÀÿSñø¹tøè;KGÎd“{üÁJó¥e‘ܲLð›Ùµâ×´Bj–bò/Ñ›‘˜­ó´¦YZ#æ?þÑ jÝ,µø?O©™§ÔÿG¼J!@ÇÄX͸2?ìþù!€£nüœ.Â:×Ùmkœvp 4e  ÁÅÿQrZh€ïPÌÒêÑB¹rÊ¿L"ÿyð þ3`Mè4 ™ÔF`'À‹Õ¹Ø},Bbƒ§û׋Äÿá þü/#gnbæ¯cçoÕ«¨óX€jãjïƒróV³p£›yoÚøÑtFÔf éUšP 5ºÁÙlHìÔè‡ä9Sñ•sa«²ÎƒˆAˆ:N#†ŽÂz÷ƒ{d}‡²áCé:}&íƒø’xÿ%N¼æÅÀv¼ ïŒùý«ðƪ7E]/ÒAÿ®ç™O3:^dõ¼Éëñ´·¿Ìjy‘Ùð, ‚ÿÆ7™ù·úæ4ûåÔR3‹ÞÓ=R¿´ÝI ð7ÿW0‚4H$ŸÄd?O„ÈøŸÿJ]òDSåiŠ,èSKå\‡ž”g„xlWÓò»Ê?G囥ö†¿}Ä ~,'ÿUTÌÿ,¹?À°Ÿ‘@"Dv*‘@ˆ‚­Owaþ;ó¢@t·Yè[þh©wüGeŸ;øCIC £UêPŒ×|ÿ!øWÿ© ÿü 3óߥk`³Í©&[`£•Ý@4yv- »F½+컵&¿‹ÿîðÏW±þ³þ ÿ1üAYqØÜ៕ÀqÉÿ8ÀàPÜù_h,2rŠM%ÿKþ³ˆþ,¬Â'ÿ‘?Úîåä–Ú—w¶ÊËMž \gžÆÓ¹€Î[@¡ÞÿôßùOÿKðÿgüw› †Wþ£%rAœg—sì ¸ärC.ÊWH ”Ò¥¤+R7Sº>pF”e®Ã&ŽBöBÁ¦B& Ûtïr;6-ë”Æ-Jø«@Gܾsáð g`“Ô²Kí8bô\ C"p8xÌ®^‡ÎÛ~Öá ð¿’Ì\KgA—¢)œ|”-\ §À@7¢iøðsÜ‘ìþMsðÍñ/ » é/>&m4¿ÌÎú?ˆÿó÷Û=ð?ý±$í‘Äæ!S@B.ÀO}d|ÈÑ>äŸI¬>a™ÌðÌ@a:—žÆ'­F4\ÊÇ?Ä,üµùâÉü»`´qÉÃçÑ€ÿ'¢ÑCø¹DcÀÿ3áØ™døÀ˜– `´ÌQçèMÀ»¶‚0œÓäšjí¤Oð†R»Dl,C|>Cê3´šYjÍ<½n5ÕÖÚ79ÿ£%6ú> ì&„ý`h›µ x8N®òƒÀ_À>pÍÇ%à?| ^ šqÃn‡œeƒÕ‘ÿ6»gÛ{*¹™‚ô/ÖƒÀ€ÿh—,Äÿ‘3ÀH ÞÅ/Þ&,]«O GŠ•KÕîõÁGõÆ{íì­aú³eçSêùGÛù^Úx§:¥VŽá›#ÚÕòn¥~$){.®j-²}SÖwu6r6pÞ½ÖuÒw$#ŽžñÆ øÇçàºÉï^åu¢7½E𓂈Ùýoòû^;Þd÷¾ÊÁüožÙ Y±Ðø<½õ5š’\ÿ*ÿ”Wï•QðB“ûXžö àŸæþ0Æö "å^(ÀÈŸþ0*ãQlγĜ§É àñ+]éCgPÖ`|ZCrd’ù>!W @ÍQ‘25Þ𷟧 $³¾„ý*¢ÚWêÇQ=Árz¼¿‹ÿé ÔÌ$zf2äJ ÒãýàS˜ÿ„ÈȈàÿ®òCuV~t4$¸þkþ%Ì| !V¥žŽšIÿ‰šÊÔtgðïÿ7j42šLÌ–Vk*»ÙÂnJ…€¸±"5þã5bl5©L7 `ã²?Æ>>óU¤eßÁŸéüçÊÙÀW ÈÅÿœ¸@Pf,„-ÀE{¸fÆfıApC<øU ø,@ɵ«ƒ tü]’þ+þÿ ó‰eßÝ8[9ù_`þ7þkɘÿ™*P¶Ò'Káí®\•VžÚ[@¡Þø)èþ£S`_*?ä?ÿëš ü¥EêïÁ,È_ÁÏWí\;šõŒ}æ'æ'òò“„ {2ß®t‡›–⪢†/ƒg߇ÌÝ„Ÿ…†ÆBÆö%{‚n°€-v;ðR€%Rý½u‹Ù¾É@% ÞÀq`ï6¹eÅ«~˯å˜Ù{ÎG8â 9¯¤Sxçχ°%€ÿ…h à)Àµd àý:ÿ>dáJ0 ±7¶€Ûð¥_’vþP_šã߇¿$íýC{v½XóÈšý}¢í‡ˆ”‚S~Z¶}/³=ØŠm¡60Ë}™åØúo}ÌM}Ì1zð "ÓsYšOHC’ÍåäðK¡µWÉc·Qs?G¬”.¿Ï¡ŸZ:u#š¼âM€€ÿ§â1T‚È_2í¬Oü=¡³Ï¬®ufðà¿BmÛeõî2»×É­[ô¶ê‘ÿ ³ˆ½J‚@h_(»bW0‚Ebˆ0%LkXa6Nx—ƒÀ#ÕÍðàÈEV#*ÔÐkѶOV3ÄüŸƒàr€?:b€øQ1ŠÿÁ þò£M¡¤*üOk Àðd%ÿцÔ>¢q%¨cƒ‡5cgÙb!;ä€Ù]†Nÿ/Bç@g²b `ò\6 ßDÍ^ÿãß'.ß&¯œ«æŽÐÌÇ•kÍþgÝñš÷ºiàÿ'ëÎË釬³õ”ÞV¹¦Ñ]¥¯ÒÆ ÅeL'.&Ô¬„5oËzΦ¯#æ!×88 †Øc?´âÿéà¾xd_0¼ÉëZ#Î;ÀKÝô€ àK <^²›!¯¢×ù Á7˜üÝ/²º_çt¼Êµ½Êny•Õò&»õmvÃëŒ&¯L ›_v§­ø±6Ë#”é—~?Æz?Òz?äÏ|“ñ(:ûQ\ÞÓļ§É 0‹bOcÙ[cµ·¡KdëHÔ–&‰!¶·ëüjRœêÓ2U~i¯ µW®œ\˜Èþ÷Í<¸žùáï®´x¤`I"æ÷ÇüÇAX2¼LŒÃ~€¾–Žà¯§€ Ô"=µPG+Ö"üKPðH’Jˆª20Ð ‘¸ó¿ZK¯E¢‚êt´z=’ËšÍX`XhGP*ÀŸO4X™®­¡_Yq4 ø[ý`ø£m?ÿñ˜³/•9ÓÿîñF,Ó©zL{ ÿôØ@PF˜Bðÿë€kG+¡ü|-ßÿùÆÀ4¾-°(ÅÿV<ùѹí§4 A‰›ÿAßÖÿýAðkÊRø~£¥¶€|­o·°ßbÈôÞ%,¼þûgÍþœÿXå ‚ÿŠ@b($Ú…vÉ&sòs ¹ñAŽ„ {"'/9Ô!6¬ÄÕÄŒ^…̼™½ = <9; ŸDa˜°çPؿԷбEGkÁ ì²»@Î…FÇ!³kÝ·aÕ³~Ç¿íŒ3pÈê=æ^ˆQ{‡áË¿ÆmÁø!ž¸ž¾•ÍBÈö†ÎŽX‚¼ã$hôˆ3|Æ¿’Íý¿ù7Õ>¤¿«Ð´Hyt9[õÐ’õ]ð?õíƒ üEœrgy L{’ö0,í~°í¾ÐâÁ³> JñàXŸˆÍ$ºûÃa†¯ÄÁåò$•×Icï"¦~ Yù Z¼LÿßOÿ¯ùÈ.„ãð²Á ìG{¢d3ð‚/‰ò‚cáÐ`h•ѾJïø/ú7¯Qÿw]«¤æm*b>õO@ÃÓáŠ;ª¯À€cø€ê Áh^g5üA “Âô& 7à?b5¹jžRƒGñnvírÐâ/šA@1@Oà QSÂó%'(h b#¥v’T…ƒdxU–˜õà)Ót´ò N´ÆïBEz³3³èB›{yý¨³ÿcþŸ‡Ìž‡@.0{>{½ø.zî2r"€ÿ{ÅÆ•~åH¹p(_¾TmÔìÒ¬Ô/~L]þ`ÝùœuþÑq´ljjŠMª“GÖɛզ•è¦õèÖÈήÃàëðéÛÈEøÝC2ŽÚ…MʆўQ϶mšÚêÄ»§–‰÷ ŒÏÕ^’£Qï’¾—öÁ7Ž¡·ù½/r:Ÿe€Ðagïü®7¹ÍÏ3š^d@Øßì™Ýì•Óâ“Ýáoo!eW¿N-y¢±ßKÊ~”€•é¿ZÖïCm?„¥Ý ÏzäÉy›û$Áþ$äxªD}™À·ÊÃ“ß ÿ¤€¬D'üAiÑôôð?=–…~, ÌÿÌx.È•` ÈSòjð?_ËË×rz’ý-ÿïàa?æ‘…ý ÿñæOtôÛHqñ?KMrñ?Sîç®l…7!O°€<¥·ýÎ@EZ¤bo‰ÞTj ¡ý?wßþ­ùÃWõgóÿ£¡pÏ.Rá¡ÀD!(I*Làÿ 8 G"ÔÁ3,G×E K'ƒ—!#Ç!CûÒÁ“°©«¨Ù³Ñ=Aï¡xàX<|ÀíE{~;Aûœ.8µe—Þ~ÌêÙ£µ¯ûÔoú5ž°zÀŽØ}x_è¹pòlþ·„ÍŸc×¢p",Ìÿa ×’™sÁæÿǨÕßä;?%m‚~Wìÿ’ŒæBžDÍV>¶f|k¹a†Èþ{2Ë_¥æ{bË}©í¡4íQ0$iB,0<ò(Øx§ÀI}ÎËöåQÅSÜ"àÿûð©OÁ À`þH|€ÿ‰[á4ØÁjg„h¯øÜ!d¦0.°JkÃð_òkZ&5oÑ:·éþ-[”¶5V;hžÒ°ÌhÙätáúðrL~€6ÚÊFs„êÀÿiŸJÿÓæ‰¤à ´PKCüŸò-Ÿ#լЛ¶Xhqv‹Û‰fa²Ðî%N.†àÅeŒzÔ}Ú¿.` u^¼#÷¦ƒG@ÿuA÷<¬ˆm?›ôÈb€ÿ8þ¿ AÝPËŽˆÅwQX ŸWnbæ/£go—nåëˆÿÆ3í ZüUo~ÐlÔnýhÞø9c÷cúÞÇÜ£ã´Ùqy~Sd|}dLw’uHU~>¿]²óˆ±ËpÐÄMdóÒ¹ j Žs,›Ø•ôn ÚVøëÜŽ-~7ðÞ1gÒDœ­›¥ÖMùWŽù”BÌßÿ*ø?ðÚÞõ4Åÿ¯²qÍ¿õeQðO‡°àßAÍ老úçü‹«AET9r%æ<ŽÇü·|üÏx ðÙŸ$:ž&å=NÊœ\ü\SöJ_ðÆTüJUô$¡ü…¦SÓ™h.Oäª|ìr´!SN†”þð3ÀyZ^" ïÕòg%øƒ { ^í%à°o!9K… =Ž–OqÕ…\Ùá®m¢ˆÿ 'ÿð'éÉÀHJtHztn´Šî$\‰vu¢³½D @C»=5ÎʵšZ£¡€ê4Ôzíþ»,ÀUª7Ý)…Ù1¿9à+þ[u¨A·‰¨01 â ˆüøÀW¡–Y¨ ,P³qðïªü»ÿþÿ±ÿ]àθÁØwéŽÿAD"p—(‚püïÐÙu\».Юgÿó¬4Á!ð ùïà_š*IûÒö µ€&Š?芻@›iˆÿzÿ,ü•þ , ˜Ÿ‘ôEYÉ>Hr/p\…X€CíKX€_¡Æ÷þ—›Èد]ÍŸñB¨#Ÿ«ô—þ?N¡CEê°€B¿ YT,þç'ò (ŒçÅÆò cø}|ÛZdãž´ï€7t-™¼›¸?–„L^G/ÿá¯oO4x"? rzþ»ì¬Vçn@ç>³âЩi÷aŸÖ~Âî=ãô_ð‡®„è8ð©`z:±4ºJ§!ø‡øW°€Oáh-øF:{!œD Äa‹?%l|NXÿOlRþª:8Žœ©~š†ùoüNb¹/K»š~/Ôò Ôâ‚J@ ô‡‚tqº‡”X¶zˆ¬D)y¦©OùYoeÌܫ¸áÛ°ÉOÒyÌÿ[ÉôxøÿA<{+žº_J‘À+¿OÿQ¶"º’N"AŒ*þ/ùÿ‹Þ ”ö=F×6µ}—Þ‰ãÿYÔŒ`ÈOmD«ÀDÿÀ/Dæ(¦ lŒo°Ú¶¹í3~(þ‡¨ø¿ÂjG«±AÀ·Fýµø?ã[µJoÚ·e¶¯³ÛÀ)þðMœ%qN;`Â~ÄZ=ê/^Ð6Kô£Ã+Î𩢑³xÂj&¾¶w‘0©nâ?µ}ŸÕ <sðcþßD.}ˆ]¹^þJZøŸÇÌ^'-Ý(ÖAçÚÍ ÍÚ~õ³yë'óîgãîgËÞO™‡?å^e¬LÅÕtH]¡ªîPÃ\rõBbשhòHˆ¶×^G΀n¢fáÛ¢+xY€tîT2u(A¥A늠iGØ‹K@`p] hŽ\;O©ySØû‘Ä«‚ÿþ×¹=/²P¥W¨òƒW{^¤áÕÞz¯ JnùK“ýAr‡¢ô™¦è±2ça\î£x¸¦ÿiù+D²L(dz„¼'q9bþ…Ï’ÿþoŒŽúügÉe/ä…•môÜ‘x{MŒ´(™”¯ôƒPhœ£"™{u’H¹‰dPN‚â?7 |Zù+øÇl1Ô´XZ¸@Çüîð'‚ýïÎÿID àŠÿ:rÞó«TOLÅ£CŒÿäJâ?wþW©(U*PŠ üoÐÑ¿â?a®ŠPÚDÇüw©!õþ©èÔ@­ñ¿ÊDÌv$ZF—¡ñaÎe_-àïZöÅø»øï²€Ì¶[4ÝEƒkZ #-&àk±ÝåžàDÀ҆‡ùƒÿ|c`¾Ínþ£üKþil¬b „Ûþ Ha˜‰ùf&qò Åÿ¹2qÜãkþ£U~&z" ”‘è“™ä -÷Í‘c ðµ«| ´¤"­V±ŽT¢÷/5ËŒ7ì™éjþ|§À»þŸhÿ¾šö}( “QÁ,À‘ă€¿( Á¿(BXV?^¾ÞnûAƒç¢±«ô‡¹/E)øìyèÄ®p`›?p(= ñz·˜­üp»ÁÀŽØ=ÿïÓ;ö¨mÿïRZÏ9ýÀx𜇂Oy#×’)\íò£{Ù̇ð0ì×?„-Ašp-½ YþßF.~Š]E-@“v~NÚûY±w3_ÿ2Ãö—(ëýHàê½`Ë÷Ái?„XD¦ÞIõ€hŸ—ö8Yðÿd!`à éODÖǼTžå¡Èø=¿Ý+å$¢÷&døÿ^¸ð^<{#š¼•N½—LFýˆ®…gÂQ¢»ÝÄ;0£`”à¢Ðlú]È ¼K´v€ÿ¼wýœWð“Ú±ÏD‡£whŸ#’S€ÿhÑ8ZÀ!ð‚4ÃÍ.¤7oÁ»Ô‹V]¹íS>e“^å€50‹ n÷¯w[ÐCDøMÀÿÑ7…³~ÕÀÿuFÛ½¾'*±ÑP¸®u‚€êıâæ)rLÄÅíÃgqé àÙÀGÔ¯Œ ^ÉN`ï£sŸ8ÊÁÿYðÄ…lÑF‘ÿòmô ð(ý1nå]ìÂUÌÜ{ùêUòòjt¦Þ½Ô®¿7­ýbÛþ1uócÊί™'?ç^X—ÚšØÖVŽ~""g9®r3¦k#bòÁ30Ù°¹÷1𗮢."æp}é*læD2†ÏÙAÔ±Ô¶!ì‚pCäwÄ› ?;~ogHÕcžÅCo 1üû^æö¾Êôtt¼Èµ¿Ìjz–^ÿÔÚü:³ÃÏÑIv4údÕxZ‹Ÿêrï%Ú$•<Ó”>×7šOÉŠõeÇ‘1ù³hqÀ?5Ê7%Â/5’d‰ò·F“S#ý-Qd¸Oa Àrç?ÿ#—ÉQø þkýÝù_l ”©¥z V¹ü¯6QjÌTȉy"4â`æ?TE¨ZMøW+‘jÕÿëÉ z¹NëWtÜå8þ¯3#aþ×™iµ)„Ì BÌ*3Ã9ØÝ€Ç8ɯaä«é¸ìó¥ò#gfËY ¬ätãŠÿ ü±0ómÑLÐÝ=Ë%ÿ]¹æŽœ›§äÙÕAv57O˹‹ÿ&æ?&).û|á?óN¬¯-€ŽÛ>¸ø:~ÿ ø£SÞNþûùÓü@é >wà—¿3 ?‚ÿ~ùÿ|_‘†T¬õ/ÑwSÊ TBt¼uHn‘?îËí„¿ h#F€hx`©˜ÿ¨ÅŸ"°8™W„Ú%¡™Î‰Ìâ„À²(aUhT[„y4±x3®u'²÷P:ü¼ŸKÇÎC¦Îd3'Ò©ëp´Íû@2¼ÅÜŒ GOøÃ{Ýûœž#^?ÝpûþÆÞÂ9Îu[IäÜ}¶QhA²,hu«Å,µ°I -fffÉ ffff²$‹,ãÞûœ›ÌM&“šJ¦&S“šJ¥æ¯˜g}o«­½Ï¹3SõÔWŸÛ­V«eÿžµÖû¾kòǶ={Âö-^ÓºÑÛM³ÆC«NÀ®G§.#€?)ÿ"â?hO¼æ@~ðŸY÷Á•xîKÀêoaÛUìÿ%üüÿà¿Ðô"üOU—&<òHzì §=òIRƒÿÉî š¶Sš¶Kš–øÏÉñš¥)0MQü·­Ð=¯ö+ŸÉîTÿù칈w…Äçê–ÿ°¼aðÿÄuôƒÛ$Þ0[­@ðþC0‚-«Î%³¦yãú¹—og ߬›µìYv#øÿÁ¨ëfÀ|Á¢÷´]Ç®•jÿç,›mZuo:tí8öPIß±}Ò¸üÇó©däÐþÃàTñ¾7*Ÿ1­[ä¿[³h\¶ÐæOk%ü‰Šv­+öxYªäpƒÆ€}døŒÿ“õ¬%©²k¨à-ãÿ¦K/[ªÞ´ëÞ´éÂOtl7pê8Ì&;Üåÿ¥tþB2Gü/æÏç?*V/à þga+G!›—1[ ÿ·”µ«ø¥O)¿æ~H˜_òo«3I¨5‰ò®Þl;uЇ½ÇÏ<é0ñŸ}»¾0qâ;q"9ðìßví‚vÜz7zÖì»ñc²-—À[Aþaƒ2üzYŠø¿ßº[þÏsZt3šõ2¸a:é úéÍÙ-¯¨ì_û<©X;2O-¸P3¬T'*~ åifkøe<–f¨‰Áü\m?ÆÜäë ø/B  Vª§(ÓS”è„Á tB‹ôBKtÃk êy‰]ž‰­¡òâÓœƒ¬0ãÜ‹¢ ‹¼@ÓœÓÔ`cÀØÏ”›fÊyY~æ™|¦t?Äß” üçnˆÿÌ ¸Ò- ¨ÿÿü‡~Ïã?ƒÿ-ÿ-()ˆæô{þ#þÿ‘¼Ž6cÿIœ#ÄšÃÿC¯ãIÌ(ìO²ùÙëׯá[°ñµ–å1B6Þñÿo÷üüXù%Ù@̘¨V8þ “%H„Œü¸QÝû)R+ˆñŸY€Ê”U PG¤y û<…]n¤m^” ã?Wÿ!þ«à¯*û”¥Y11 (I²á/Ìòãy¬óøŸcö÷øÏãøÏK 4K 0åøoœI… å/1/Ü4_AûÇ`EQ¼âhs–¸1òÓ4ä8åpd𳯩:Ö®*ƶ2Úªˆ±«ˆv(²‡Ê"íh_k¤= ãæ¾•‡‚ÿì €]aˆ°$Ȫ*Àù\Þ)I“×-õ­ËÚ×=»öE#{Žûö}´õ¡¯çô{Ñä™7íô~ï3¾ã6¼nß¿ ÈÛõn[µï;Ð €=ûnñÿ™óà‰}âÿ Óð×]Aë>âI!¨Ø þŸ¤¢ñsIäguu.Ô'ø31 ø$^ºò˜§Ç¥ Ÿÿ­ÿO‘Gÿ>úý/a;ç‹í¯ Òþ,ÍP—þPººøŸøÐ+™ŽƒQ©'UÓ5][”®¿òÌÔôÎÐôHS§Ý¡´A”öyÆ?p)º']sk¼ð™¼rÿ?z̃ÿg®càÿhºt›À¦ÀiøÄyìÜ}Ь.DþÏiäÁ(>‡ó–%“ƹ—õÓ/êÖL›÷­zv¹Ópà3K+ÀŸäØØˆæÖvïòÛ®k×¹sʤjòUõw ÐÿWlÛY„O»CÊÌß®Z6!íZÐdvö-¯Ú·Qd»væ,ˆç'L_#¹Àƒ³‚F ࿃/à9ÌS¨+‘ ßb˹6ÁŠ?ëVt”ü?±D~ê5AÑ¸ï ø|-_ÿO½§N|§®–®ü_G¬}ŒÞºŠÚô¢×Áç%½Ï z_öôpݳsëµSÀÿvCš˜ÐjÓlùîyZµn\‰VdÞ£ œG…š¡%Oˆü 4ƒ µ‚ ´sÔåà?U{tÁ|Ÿ¹î t‚‹¸h(Àó5ýÀÿB½ˆbý°Zè ½ðvû´ÞИòaŽâEfè«ÂPÛB~žŸ!B»´`ÀŸìgÈÌ XÃ~ºœŸ&3‡n™¯„‚¯1øÏY‰ÊAü‰A¼tJ(ÌUüçèAü§c¿·ü‡XñGÅÿ ªÿÿ«ãÍkãÍjøÜ y!:NP ˆüyÕ‘<ÆÀŸñª‹2eRyWª‹á¿Ž@x¦×ñÊšÏ]øWsýŠË£,Ê¢,9ý€?7ìì_ä?»Q®‡¡¬` Æè.ÿÓ¤–iRë»üÿ[ `üÏ¡ 7ÜñA$ÅÿÊâ¼uq‚MI"WöI±Eœ7òWñðWñÿ÷ñ?//Μ, Úœ6ÿÜá?;åÇøq[yMï,âp+8áæìÈFq´ $Æ¢4VXgÉ„Œ ØW Øü9þÛCÄÿh•`Ô;‘‡Ù–1…ÚÓAàP›Ò`ëʇw~¾½AIs!oÖ‡6ÄS›’ÞM¾Úñˆˆ¶¸¸Žœrs{¹uÀQ¤ü§’ÙMÇÁUËD‰;Ö»6-›Vm{¶]Ð{‡¾S‡~ð‘ÿ¦qý¶iã¯a‡ßøï[µpe%ˆ°O>s›„ØA°kïyÀW0×Ï’ejÈà1sá3 €~ ØügÅ!²€Ë€Å.ã¢ôŸ¤éjR?ñ‘GššwʺIQ÷NQ÷J},JSóÈÔòÌÔ¥k¸áÊø«JIK®¹5_úN]¹Ï~t_¸pf«ÒWîÓŸnãÆÿcÇ¡cGd.üŸºŒ‚ÿWÞÓˆÿO¸:ضeײiÓŒÁÛ©çµ*þï;ü]—À Â=½åÒÍUþ›f¬š¥­Zÿwì»wœ:ÀDø€ÿšm»Šÿà8?mV7aTµ$¨ß°iݶiÛ°ÄsZÿ-GZ…°øl‹‚ùq“:¼8^ºOpB€ÇÙðCïÇw\û)º¶mßvìÛuèÛ´ìØ±ê>´áNð‰F?øL]øÎž‹gA~®ò3OõéìMÐÒuÐâuøÊ•bõSÜîuÜ·胰UÜ|OÞþž²v0¿Ð;hWZÿ<¦ô±¯eÑ^àèû€…#ϹsÑìµ×ô'ñÄ™lúT:u)»Âë{Má#½”L_H'Áÿ-¯îMÏ®m/:ó‹1Æ–°à,wVŸÆÿíèË ̨7}Ï‹{žæƒÿ]Ï ZŸf!æo}žÓð$¥íYV·qaIQ ௟Rû$¶L=¢D=¬X3¼X+¬@#$_#0O#0_3×® ¾&Éâ¿á #?`¢l Dñ¿*z$þF›G›Aw–Ì+âÌUü¯N0«UÁŸ)ÎüÉÁ¨6 ù<*Ñ#fu‘<¦×Qæ*᫘ð ô"°’8Á-ùi‹ƒ·_…Ž¡E !Õ˜û[ø oáOÊ ·Uñ?;Ô’ÁŸñ?Y&L’þ‘ÿ©«t™ ãÿ]ø§úýXø± |‡ÿ…ѶE1¿ã¿r“’ÿ·1:©4UÈø¯²UçO®óŸ-Óþ/#Ì4#L .0g~{ˆƒ§:ÄÇâ0/Œ²(Š´(Ž–D[rë#Vl•üüm!ðŸ“='ÇÊðwb*r.p¢ù/á\P¥ T†9U¸ÖÉÄ~q³!Õ;¡ý~3{^óÛj´µES]†ŽÝhâá‘Ûè±ë$Bô÷î@ÁØUÀì…ßâhbA>wò‹vYw¬ šÙ°C[ZíÝ·ìØ³hƒü“˜ÕïX4X·#T>v:rd;??úÎÞ=fn«=s,ògå ðÿ/;tRÀmìÚgºñYøÕã¯a{òùîWE’¤?’ øöSù$ß÷Le‰¼à‘gÊ# /X@†–[º¦k†¦{º†ˆ /ÀŽ¢æT£¹íÝy-›½ñ\øä±tîFoYÉ5¾»ç"âð„ï2øŸ:Žp›üa—TüG"CÖà<|`׿bÖ<ýâÍÔóתúãÿ¾[Í(½áÔ¹íÖ»æØ1oÛ:‚Ù´¬Øwïàÿ¶C7íªµo4®œá½¦…c»  ( ôáñi“ÚEþ»uënÍ¥{ÞZá•Ùz(e Ü|1Ötñ?£=ȯ:}¶D]ƒz6ì;‘bÌ èñ¾ÛÀ–c7øOC^ú`ëG¶ýþIžãâ™+É<ãÿÿò•láØ{òÒoá&dù2x‘Š?«7±;ÀþYÔú¡bñ4bñkâæuôª¸³Û¢ V'¢V3¼ß4gGÒs<,^:õXº-|Ï|õŸB,q.›£}¤¾S—ÞcÅãeH3G|F¶<û·½ö¼GÈžìh›Á¦°™5Seõÿi³7ã¯j 惆eý¥Ý/ ;žç·<Ëm~šÓø4³Í ‡©éiÆë' uÚñu:q5Ú1嚊Ê'Qe:àžzEòZÁà?à_ø$¨DJ:ªøŸñWª =–fkø‘;è…âieú…ºayzŠ‚g!%Ï‚+ô£« $­á!„ý0>© à•„˜æç ê³h´W)EbÆÝ þç1ìCJ#ð儌@f1þ«à¯äˆùø_aÊ ÈEQJ `.ð;þ'˜A?ÈÏÁŸã?¯6Ú¬6Úü–ÿDû?ðÿV<¶5zÅg=‚joÅí)UÅütЀ4«Œ¤D¥Üaä’ámÙGx;æøïðöÙMÖ-üÿ“¤–L,Ô‡’%–à?â–¨Šÿ€ŠÜ:Möc;¨j 'Ìö.ÿ‹c­K8þ'Z)Ïyqü/OÇÕ ä/Ë´.Ͱbp›XÝŽVuþä±U€œ(^v„ùÝú'>ûõ±>¬ƒ‡²¹7×ô»0JH]£-K¸úX)­’“Êãl+bl˜ˆÿq,ìü‰ÿJ93•Ç:×DºTE8W„ÿ¹)06%áÖH*Üj%²ViüTPívHßßÄ‘÷ä¡Çäºgߦ{ÿ†]Ïóà{w:ßþïÚ;ž{Ž]JÇÏåS§Ò€R‡î-A \àСü_ã7ÿ6Tê?°ê|oÛsb×{dÝ…àÃôÝ¿ñÿŽM7¢åCÇ×Qðÿn¨í½q}¡WX"ðEºþãžm½M~ñYüU¶†ÇÏ%S=F…™ÿ(M}à›ÈÕÿSz'?ðÊ|D»€Òù Hyà‘þØ+SÃ#SÃüç6¹q'¼ ë ñ¿Á0q_Þã7ÿÑkù“çÊ•Çü¹×쯩Þó_}W>y-"À·¦c¿N£gN'Ît"€v+ÝhêÍ‹Y3oEümðZÿ‘ >Gü¿éÐ!ò‡vÜû6œ»ìÚ ÿ©“mâÿ5›¦q£rÄùËV-Àþºâÿ^:kOÞþ#5X¶h@ü¿ïеïгjÓþï8wão7»X²°H_ÛµhÕ6mÞ°b‹÷Ðþã!WðŽƒ›néy×¥øoÓ¹eß³a݉\æ=ÿ 'jv})™ÿ/$ ôãÿ Ò%ÿÅÁKW!KŸ"ׯ"×.c¶.b·ÃWNãÏ£>Ƭlúö¶™ä³5Š~£¬SéÀEM 8ÆÇë¹ðÑkñ›ÿâ•|’ÛP4w%»OœûŒ\ŠGÎÅÃGý{¢þ}Ïá}ÏÑm·A¼ÕM;:r¸Â§S lŒÌkÖüÿ*hÒ„F'ô½(éz^ÔnPÐjßfXÐö²°Ý0äû$¹N3z«›ðN/±N'¦R;²\3¼T3¬X+¤a¼6íêÉÑ Dl_ªVö4„§h_KžÃíü„2Ô%i}o0þ—< /}¦¨}A9‚nPÁ³°½2ý¨R½¨AqYOHj…Ü­$Ä"?Ø4/È79þ¼¼@~†Ÿ@UíaäO‘ð”’)ùïcÌøOY€ ”äk’$5ÿSäÆªâÏm`FGnK@¹¡?,€vÞ±€¿ËÿÚxX¢,à–ÿu1$XEõ\œO¨çøÏ¶1±Ô€ŸzÄEÑa±Új]+dRñŸõªˆܶ%þ+,¸5_å€ûœpÁ-ü…Ôõè–ù*þã þC´.Ìm©ù%Bÿ(EL±µn/¨uš¿uªŸøÇl¹ÀüÏSØ1þs‡mJlÊmË­Ù>ðŸ«ÿÿAþ?ðÿw ÁÉ?šÿ³ 7Ú<7JÍÆýp]ž8)ÛzàÇÌ BœñY0D6þ«, 8ƪ$Öº4Ú¶,Æ®Œ¶Ë2øÛ3±È_ÅÿªX¦Š8ðÿu„S¹RÁ¥öE´Ô¦<Ä¡ÊÏ·Y7P»žù޼÷ÜwëÙsí=òÞsÄ[¢6tv«VÍ ê¡­´ALm̨zØ .€LgÀ°¬ó‚ÿÂ.£Ò.ã’ŽWÅíFEúé€ÿk­x¨^7¹éiJ½~R­VT•fø_¦^¦^ªþçjATÛçûü'AYÜB°ÏøCê²í€BýвçQ5/c õrôäùOC õ"‹ô"4;d÷½ ) ´Èyžj’hUào™ïoþ«,?#ÿm‘‡§*û°àŸDð7M†Üá?+©,à–ÿf´€DƒöÀLÀügp—ÿ•±ÿšDžŠÿuqfœ8ˆa@U}f*Ôs;BÿŽªo- &ڪƕÉΔù¹v£å ‚?Cø(ùá|6Ôð‡ü3þ3Ýÿ•„ZÐsB€?#’Xÿɾ¸Z¨øŸáos—ÿ,#`Ç„ïòŸ5 Î‰¶Üœ_›ŠtVùÿ+2lJÒ•ñ?®Åi¢T ÿ· Á´ù¼3üEÀõæƒÿÜÐg ®Ý“€Z¹r=ýˆüø¡Â…¹ Ë<®Ùµ ü#­T*в.޶a-éH1Ô"O¨:Ö¡&ι:Ö ö«ã\™*ã]aoN°€*…Sy„Sq¤mq¤5ǧwÁÁCaÅKá½›þ3û’Å’…+Éä¹WÿdÿI‘칺ö‹†\†i˜×±K߉Wÿ…öÿ ;÷ž¸òùà2 Xç·ÂX#8Äÿà?ìŸÚ÷ÁÎAHÛ.ZüµíܶîÿO\G3ƒêç¢iÄù_eë—žó,þg7_Ä« ÿWÉô©Ïì¹ûÄ•ûä'¹o>K¿ÊVND#íO³Áÿ”Ÿ½ï»ÓÀ=âÿŸŒûÞPúOÒCt5–€ÿijÎÀ~¶¶ÂMòC‡ ת³ÐñsñÌéÆ÷ê©ëÌ‘Ëí8õšÿ¿KÈkàS üÝà¡ÍÐ‰Ëø±óðÑÄ™û;€\æÀŽöµn »—M[æX÷þ6=ˆÌ! š6ÿ8v0þïx,;v.9t þÿYüÄ8÷oÚ·‚ÿ㯪êu‡®-g ½ŸŠ?v,þŸã½YÔ¯Y5þ´ùÖžò ŠÿíÛYUfþ¯ÙwÏ š–¬©¤8Ìg.@U A#ˆºbÙøÏñÞm;tІÿ¯ss~Áü8gN#àÿµ+múÿoä´çðÿ°rå¿t.›£™ïþsàÿ§èÍ/ñTüù”|p·s7¶äÛÚf˜÷V'½L=ænÒ–gû—€ÙÉ R‰÷>ã§>£×Ò©/òy|æ§þ Ÿ|éHµ÷Ô•tæB:ùÞwøÀ³ß­ïÈ}àØm ëAǹíö¡Å_ë&:íe\;iR7eúšÝô?/|YÙý¢¸ýYAqùˆðM·iY.ƒâÛ'‰üÓZž§5è%UkD€ÿÕ:Q5ú1•ú‘%:aà?w¤7”íð)|Ä6¥=¤#`H-™RùdjHót‚ŠŸ…—FUÅT<‹*ÒÈדåé…=K€äë–EôË+ÚCJýaúaÆÙ~VÅAöù~ÆìÔ*gVðaØWéGýß—ïmÊÁ9‚«ÿ€ÿ)þ&*þ³Â]þgßÝFøên Àø_Ë»Ëÿš8SÿkcMq}ÏgMž¡?ð¿.òïÁ?\)Ï s“Âÿ™°þrDþàÏøà¿˜›PIð£º÷ÿ;ÿU. ä˜…êi‰¾³e"p»ù‡Y®ÙR‡L±]ª„–’ý­Ò‚,3Bé5iݲ$BHsb¬ ¬ó“l 蜯eUš°:â&_›n^“a^f^žfQ–fY’fSœnGâ‚ÿÒday²Åí*€Ea‚e!µ²Ê³Ê‹µÌ¶Ê²Ì‰B¹ %Ç|ÛBXO”=íÕ¹mCMmèH6àQ”-wOsÛ{œ¸™•¢2(Öµ<Öž­ Àªc\êbD51žÕ1îð¤ÕQ ûšXײH*þ”G9—‰Þ„OEÔ¬vH†Ï%SײÙò™CùÔ^À,B;d÷g>Sç>3ïEã{Ž»ý‡.ÃÔï× ÂUƒ¥stÏ~’/^zLчcûþS§¡]‹¶5“ú=‹¶-^Ó¾°ýƒãÀ‘uשÝÀ©Ãà‘MïU÷®FÐ}l7ž_{Ípšc% sw®êŽ\Àgá³÷Øû‹týƉÀòl‘–}&¯=&?{Ìü*^úà2У“YògYæŸEÉ?»&þì–òÀ+õ$å‘'uú!J¸*•ýÕù{fk¸çizäkŠÒîÙ/:4Ü„Î_#þ/!øèµ|âBëϽfaLŸ}W¾ù®-ž:OÒD{çÁ=jzÂí_ÂÏN3Îlûñã9 "l^xU¿dÖ´lÖºkݿسéGHO«ºö½kÖˆð;܆=G¸=´+vÍó–ï¬êWìZi’‹SÏû \`Ô @Cp æïº ªg§ eAÓ¢Ù»UAÓ¦UÛ®]m¾uêÝwé§òõ‚îÆÙ‘1xÁŒYýŠUû¦}Ï¢ ßzYغhÞ´dÑD§ tá&kŽk.]TñsìÞ´éØ´í :NíÏì‡NG/);[‚^Êf®ƒg?†ÌûÑù¬/A4—ç*€ü^E¯^Ä,_'l~LܹˆÝZ n¬7‰¯Ô«W§·íÞýKøú¥d–ŽtyÑ:27héÇ‚îeóTÿ—ÒžÒS2ˆq¤¢ÇžCdj¶m[öÔrÖ†úQãÍ/Y ì;mV‡hÒìÍïí¨Im¿Ay×󒎧Ïò{_š”ô½ÊoÑK~­ìss¾RŸ¥5E P¤Z¦j¨Ò^ À_Kž®%Nx,йïÿÈ=þ¡ˆö˜©‰ón DO#k ãª^„•? C:þç? Î×—äéJóŸ)º¼k{CK+ý<ÊÂŒ‹B ‹ƒEr›‰m®¿0ÇÏ"[.È”ó3~¿ ÀyÙ¶ŸD•}8þ#þW®p§ØæOÚ4¬\üeðÏ 1¡ga&L°n!À¤8„E›±¾aU1¦Õ±f5q€?ïu‚éô&⽎3Ãõ-,€ÛÞ¯ÜáCF@'‚ÙÑà*…ù ”ºmÄZÉUFZB n :…ýá|DþJø‡*‹Þªx^9ìàöo·}†Zf†Yf… I 'š›–à#€þÖþÀÕ¡0À?]lÍñ_˜ê'Tñ?/œø_ÅÕÛã¹fn)V{Uº 6Cð:Sð.‹ÿ.‹WŸmþ&‹_—iQ•)¬È@À=Ž[@àÿí*€°(ÑŠ³Pk•-Ìã,B¨¯RA„5ƒ?á=ʉÆÝ ‡n]Àîv6cy´my”#7³Ò“KYŒCy´5[®vSñŸ[p|çVáPí\íPáPîR$ëM[ŽjÚ Øó>ö;“L!?”LP/—ÀŸñÿÌs’y9ÿ= ú/,Fª>Kò¥´bxÉ#§ÁCŽÿ‡¶Ýfë¦ ›fÛæÍ–HÿŸÙ»-‰ÿСM«¢ôž¥I+î´ÿðÿè=€ðÉkþ“×âW_ªÿÐ.P1•ˆá8¸“¹_ðË–¢kš¢î2ÈFÆ€ÿ«ö-€?„Ô€«áô!Ç“'_ÕΚ½Eüþo»ôÑ;‡.@~DZü_âÕS«=nÃ-®xìCpç^jÝl×ë,¯ðß°ë^²hY±lc¢®Î¶àêŠeÂéM—îUgÊDh­Áª üǯ ðçø?|!š¦ŠœdéSÀòMÈâÇàÄ `õ×àÍï¡Û—þKW¡«Ÿ¶.âV.ãW?&nmû· Ó«ô«u"*Õ"V]Z¾„-~ZBÁµžæ€®~ö_¹–.°²>ùÿ¥kùÒÚ*¦=ÆÈ(©qì‚OüM°j†`[³æoXäþ›Ô!ìïyVÒ®Ÿà¿ïeIùÊl|’Ô¤“ `ü‡êõSè­~â»§ €ÿ»IuÏâ*žD”k+Êu#¡b­°R]*åiú#ì½çõ³øŸ¤î™¤æ•¦!ÉÒ”ÿlÿg©ž¢òyt•ADÙ󈢧Š<½X@®Ž Êר·/ì .},/ 5+ yY(([—ÊíóýÍsý9~|n#?MƧ*T,á3%‰ÍÁ|VöIñùÿ“d?ø¯ìüð{þßʘ“†™ü8Lª0.‰2)‹2eÀz³Nò¯ú[½I0›`þ.‘á†ú<ÇñÙÆ~ÚÛO¹Ÿñ¿ö_à??Bp—ÿŒüP¹B ÿ".ò/ ã3þßÎ2³PN4`óþ†ÿY!Bð?3ÌüÏŽ°àDÓ3ã½IÌTº›ÜnRn üÓ|­RÄôÇTAjEzˆ^ÙD^¸EQ¤°8Ʋ$NPš((K Γaú.Ë´1Ç´%×´5Ϭ-Ÿ×œÇkÌ5“#¨Í²¨H–¤€ù‚’dà! (Ib!„¬#PQ¼uaY@~Œ5D.i­Ra¤ ƒ¿rå1Äw,À¹TiWéPá\éÆ ¯w¡­þÑ´ù¯v¯ö¨†8þWD;ÔÆ¸ûPe”KµÂåuW{€b"¸x^Ö¸êÛ·å=|à;v"Ÿ¤SüÈÇ%Ê0Œú½xSöÔƒ:ÞÑì'n¸÷ô©×k!mG‡DÄÆÌ¶-Z—Þ þ‡6ëO¬»?ØõÙö"8´ê<°î=´8qá¶ÐÐ0Dþ€?,€컈àÿ«t7מ *þ_Kæoü?û-Ñ‘1ç‰+—ñÇþƒÂÂ#ÍùÙ;íüOà, ù¡Gò}Qò}÷”"À?ã¹²€ÔGîYšÞà?”£)ÊQwÏUsÏzäŒøaí'ÿ%í_{.]xÌQýÇ—VŸ¿JÖ¾‹7>{­\Šæ.<§ŽÝFèà³Û(øOû‘¨SÜõ‹pÇOmZv®[´oYö9ŽÐ'|tƒþ7¬;7¸)º»Î{®ýàÿº#meüçoVmhÿ'§øß¦còeͼyýwWÅÄùòxõàÿ–u;µpè¡¶{N=4—#?bsV¬[Í;Nýø¾ˆüaÔ¤ÔŠ6mÙwÿ *ùŽkϲcûœ ­5¯YRÊ÷6}çxóC'CÈÈ`sŸäK_‚V?…®]-ŸËæÀêo!_‚Ö>‡n|‰Ýý¿}·~•´±<Ú+¬¬Ô «Ñ¬ÒT òKoóß«”]úLÑ’ºtákàÚ· õO~Ëà?„àŸü—Àü«;AÂñÿ½×ðòûvùã­‚ÿ¸²÷Œø†÷ðŸ6{3aúzĨÁ?õù炨M?«éIj£vJ³nJÛÓtUüßð”Ôø,¥É ­Õ(³Á0…ø¯W© `Wä%OeúùO‚Òû"æ}àóÀ5þ±(YÝ›5ÿÌÕ ÈR¬¦<ö<¦äyd¾~džnT®®"—NŠÉ t¯9Ã!5íŠÈÒ aqˆi~ /Àª0À6ßß ÊñçeËÿ•Y¼Jò$ùòR| ÓT_3eüÏÿbüO0g]€þ–ÿÔh‚;ÀÁŸâÆÿÂðWőƥ‘&Œÿ¬‡0sVóáÊ>?ø_ŸDþ©Éh¿ç<Àø?‚ÿyŠS^ ð_åú!ø_°k[±m_EZ!ì8±ígüGRCËÜ>“pÞ› ÕëÀµKÿ•K¿Eä¿€üÁË¿Díü–||³q‘°q9ÓkSQûD­ÖŠh5̸VÌ~ [¸”QœÀ­ðÎ’¬‚ù—â9è–ÿ Й÷ø‘ûøÏ"ÀŸ bÈn`šÌü/ ê‘üü›Ô¼ª4,0,|YNä×Ëiz’µè¦·êeà #`£Þ[žg´drJüÛ^e5¤¼y–P£Sõ$Š¥€©fXÑ ì ôB@{0?AÍ3î‘{Ì7Äÿx$G›ZåiÓ™ß'¡°€|Õüõ#sõb`y:!ù:EzoÍ3ǃ_÷*’Ke6%¡ü‚!×µÞ ñžÁ?KÆÏrü—ïî]ÿSIæ©Þ¼4_år€rÿÿÿÿU§ÀòÂM9ÿ¨(âUI„1K~Ïmøá–}Ù`/6Û…&|ÝŸ+þüow{þþ3ÚCJòG@þ²pAi‰Á¿Hÿ0ó?ðŸÕüUóÎî®ö2øßå?"Æ%ó9Á Hž|ˆ9ÂZÁ?I, È_̵ ’SÃ%ðŸÛCËÏ¢EX‹ü(A1,2þUmŠacÖË–<ÃÂgCÅÏÇÊ^L”=g+5.~ ;hË7®Ï1©ËàU§™W¦ñË“ùÈTüGQš „Jâ-`E±œb¸, Ú–“}~,7fÚ3ì—ǹ1±D€’‚H§âÕÀz—2…=·™ß±Œ–tioE$Y@U„su¤{M¤gU”7ø_Éøcø×ÄxÖEúÖ‡Ê[ýƒ{|£Ç"v à«ÿú×€Õo2¢tXÀ·ñeacÍÃȬãü'DøI\ã8þ-ÿq%ÿìœñ¸gu†)Õ/bÊtƒ+FÌ;Ô]ü‘K^q]Ø._º¹…?åøÇ#›g=?Ï}'‘œzì»Ð€Ñ]§n„ýHöÝ×t³£¾ó‚wÔí“ß4gÞ8a\;ø¼¬ïyñ aIÏó‚6 ¿YÁj½vò;­d¸@ëÓ¬Nƒ¼“¢®W/óÆÿæ O“ëŸ%¿Ö¯} qY€Ò µÃrµBùtM9M~×§=‘PSYuß -?ð?GSÙÿŸíÍÑ)Ð +xªÈ•§¯^  þUDµ:fõÈ2ÞH¥vùAÔçœÉñ·Íö³Ê’[fÊ„™‹L)ʘ3¥KÌÓÄ„ýh‡6u6cNÝh» boüϽÿgØi Ú(]¾/ru›ùÏ™ÓE“WnãÇö½t"@Øò³¦gëN¾#€$ví3ûE¶ôU¶ÊDá7Wÿaý`ßäk¿náæÊw(þ-dçß*~ Üù*Yû&]wêgåÿ$Kü×.)÷Ü9Ç=túüï‹”"pƒRﻂÿÙj¢œÇüg?pž¶ªû2ókØú/þàÿµ÷""Õ3/jGöQ¶üEºö«ßô]¶ñI¾tî=þŸŠ¦Ž\GàbŒÿªáeøÑAþMa7,àØit׺oÛ® é®S?"pê®à<sç­ˆÿÔ”ÿÏŽœhe…×0cX³Ä«_±hó\¨Âã:@m0zÀv<“†Î8’ÐŽ.G`üGþSS›îEÓ†CÇ}§DõŒÿì[Ã/ 5DþV-[Üa1ÀÕ®cÓ¾g×¶çÄ~àÌ~ñÿÊ“zt˜gü§à?` üÿ°ò5dåsèÒ_’ö>'llȇšy…åzÑ5Ï£Šµú_Zý¦X½”ÍPK®­ûÍÒ¯R<‡H´æËÁÙŠÿHðþA~èÀµ×=×^hÓVÕÄèàmƒÿ3fõã¯j† Ê(øQÔ©ŸÝ¤™Ü ÅéI bþýÌŽ¹Ý/ zJzM‹ÁÿvÃÜVƒœ»ü£—þ×éÄ@¯ucqe§œ­Aã½òŸ†æêfëdéú§jJhþ—†âYºEˆî»þßpü§ù)p ·!ŠN¿ºtoyö/»umzÀS(ræ!þùÁv˜Èg9 ïWU?q“),Ábð·ÿ~ø×`°ŸzMò«Ëî‡&ýƒKüŸî;Æ>´O¼çœüÀq>ãÚ=w\3z"øgüÏ|ì‘õØã¿gÖ=—q‹Š« )ðÿ¯!ð*7ÿ'SÔå^¶|#]ý.Û" ØFræ=yâNü÷íûYý‡µƒ-Yj³g;°aÑ 8s›¤À¶üßsزïÙqê‡܆wœ{!Xb]d1 ù¶Mp ÿsFukÍ@=øªÃæÀ:ˆáÜàïÙwéo·u®#5péƒÿ]¶­»¸î=]kæ-x5 }ÆøíŸø¿ç2m:õlskÄ«V­;\Ï7Zùµï^µjß¶ì|o×n?xb;pîL»³Î½§?ùÃåÁÿ«€ÕA›×þ«7þËßBÖ‰\ÿ³v¦˜é²,-׋­zSú$¬îyÔ™lò{ÄÚµßþµàw ø_Šæ~õÛBzõI²ÀñŽÕYým6üñ3²½LÜTå~’h?˜¿(lZ°l†æ,'^½7ª3ªzY>`PÜ­ŸÓú$­Q# ð§5_½ôŽ9½¯ŠúMJzŒK»ŒŠ‰ü/²[žg‘¸%€¦çéõúI¯ŸÄÕéÄ1ø3!¨ÖŠ,Ñ(Т–žz!YOü2µå¸2øg<–¦=”f?öc‚rÔüaš~%zEú9ºÚiZò mqžž8OWž§ðÚ:¾Å7öµÔ§Tn[d“háo–áO-€2¥fS%ü}H™¾üt_~š˜OÛd™Ä(áïÇçàÏÏ b}¸Ùa!¦Llý7È 3- 7»•Iq8ñ¿Xa áðg‚@ŒÿÕ¿ç¿j’ yw€¨Q˜*O{…óößòÿ_„^°)}ƒBÌ8Ñà³\n,ÚmÙ‡ÎóR[¤¿á?gÖL969Vg –·ûH—ÿìÿù·Á¿9àü§‘:Ü<ðŸ`ËSиä’X³ÚdãÖlƒáâ§€ÿf:àÿ¡þþeÓ£m¡›–G×-j—Mê'õš{uZ«ÕzÓåÏŠ:òÍr,ª3,J’)–t€_œÄ/O2£uäDÓ7ÉfÐÛdó·É‚º$Ëê! >ˆ·%Å9@•ñΕñ®•qî·üUÆyVÄzÐ&ÿh÷ÒHQI„;àÏTæVâ;qàZîZá^éF›‚"œ+"k£Ýjc\j£œ›ÇÂó6â;×úºx審zz‡IN¿dÚ®iÓmpßuøD4ví;õÁcðصë½ûð™;u¼?s=¥C¯tP—zõxS‡FÖû—íÜf.ÀÚu~æÖm¯Ü'¯ESpðÿš;!‹ÿ×§âÉß±]Ÿ¡ùø¶xøÌs48ÓÕö!XôÅo Âã”SÈVpu Ú‚¾nÿ²÷×°Ü€ÒøBÄ;n½Ù©ÿà‘ø'瘟lcØ%üì”úÈ=í±(åžKÊŸ•ðàþþx×ô.சGæ×~ã‚~cÿÃk6Éä+'^Ódm²å¯þ›¿øSüÿ— ]¼Zñ˜>t=ra6¶_çíÛQ €' þï4ºcßˉÚ´ëÞwܰëÿÙªî¶S¢Üuë– ëö}{‘Œܶh]2}·ÉÍväÁà ÛÀl'›°ëÚµ£¶ø+Àóvÿâ¼øó øæïÙô¬ó[ß“ .ðéH¯c ˆRÛ‚Ò¶C÷¦]'í;rDbŸ‚kаNëÞ#«^ðŸ8øÎÒ¯À•뀥›àµO!ë7A«ßB6¾¯}Üü»2ïÖX­S¦Q©£@ð¼ìÕð-”áÓz÷ügn×1åw7âyzA_åþá>S4>^<óÞs|—Û§D'ÑÜ™0Ëcuª%ëö~ã¤Ù» Ó·£¯êF_Õ ¼(ïyZØ­Ÿ×¡—Õ¬•Ò žØªŸÖù"«Ç0¿Ç¨ðâ•÷™–w¾,bä‡ÀÿsÁ*;Àeq •fD…z8¼ F;ŠAk‡ƒð9šþYêòL i–¦,GÛ÷Y¥™eÀ~–²ù\ XCV¨)Í×–fkKS5eiÚ~iO$)Ú^)> |òž‡5¸&5Ë•bQ¡¯CÔ%ÛÏ$ÇŸ—`ž+7Ï›dúšåHÙ"?‹1[ ڦ"ç+7ÿÈüwù¯ŠÿYÿÄØŒüˆÿ!ÀŸø¯0cüGðÏâ:Å©BaZA.Àª@ªž*)[ºÝö‚`eÿJŽÿ‘Ø5cåŸs >/ü7Ë 2¹•iv°)7þLeSäϵ÷‡XeÓ•t'þös#m!î†vK*- ‚À Ÿàì›Ý…?'WÁ_Ånžš›§–ħ÷ƒŒ)‚WcZoTŸö¢/_ºìÉzÚÑÛ‡¿´ÿü½ëÁ¯=~ë~ôkç£_ºÔ¾´?¾n! Ø}ód©ú)¥ùÆ9¼š óò^qí-I6¯L1«N5«KyUŸúª)Í„“Yc*ï]²ù›$‹Zn&µqŽwä¤äÿmýÇC%*æD{"°/ð,Sx)< î¡®Äda.€?%.ܡ׊h—êH׺(ב^ož}¾i“•›ýý'­êê_dÂÚŒòúLKg¬Þ­Ú·ì8uºö9w¿wí§*ë BGðŸvqÛuh!À{ú܇f?qàá5„”Ðù ZÝóœeãQد/’ÅkŸj)>ñØõÞÉ&]Çñ% 7Ø~á=æ#ÈgK´ßžã?žp廀+™‚lñ[àÚ¯ÁÛ¿íü¼ þãŠ/§Í9k—²™›w%÷ƒÿµKÌ?ÚGß·ÿÙ ñÊC õÓßw#ø?ðÈz¤,Ax)øŸõЭýYÆ©lä·ð_C6Áÿ+d1òühg>Óø1?Ë׿ɷ ßw¾­køIöC‡aö³A6¸aíLñ)ÁÀÿû!<íƒûÔ–U'k£JÇ-‡^æ>ȶëÿ­Ú jµÍm‹Ý¶-›ÕoYRoO0ÿ †nCþŽmç¡S~G¸Âö{÷¸Yl)û.;6Ýû¶½tÛº¿Að™×ôƒÿ°÷AÚ€ŠÌ±—ÃìðKÆdݹþÛôÿ§vƒç.ܼKïé~+0z:ð¼ô9d Fð9põcàò÷Èõ}ù`§i6‘_'´T=xHX|5ýkØ&>%pž[Í_ÿ¿JÖ~ñ[§ž~´þ;Ë‚ÿS¯ 6YàØc É °ë† p› èí¹­ÙtB›öÔÈð3~3 ½ªüƒÿ­O2Ô“ÀÿîçY=/saåƒ&%ý&Ŧ¥ƒfe½&eà?aŸëÿÖñ2¯ãeN«aVã³4ÄÿMÏSYý‡êÿÚQÜB@TµVD‰6+Ð *Ò¡^ÐY4×uy®†_žz@¾F`!Çê§é_¨&ÉSçiJ³´$©š’DMiœ†OäC·ØÇ^Q÷}û•™G·ú&5û+ª|¤%ž¾Åb›_«|‹<±0W"Ì–Xdˆ©¾fÜ&>SªT&£¥áÌ[þ³fAérš(È d¥Q’ˆ¨)¨¦±Â¸š!ð¾³äjöƒÿᦥœÊfwþCÊ*mRºÀfžÑæ¬×ÚŒmû¯3«#ò3•„RÍ×¢P>à_¬‚¿é]øsÃ.¹ygÁp1šá˜Ï);Ô:3LUíç­ü™ØžI–¨\à÷ü7cÌ‡Ø ü+ÉOð—™“ü(b™TV0Ÿ>º0“¢ˆWq/ß$?ïÈÖ/ÖY®Bäÿà²ùÞ×öûÿ¶ïç|ð†ý‡¡Çÿ~ðÑ?<þk¯Ú/]WÍjïëµ7kufÊž ¶d¿znR™jZ–fV‘jZ™jŒ?6d¼jÉ4îÈ6îÊ~Õ“eÒ•aÒ–fÜ’jÞ˜"x—DÓpj$:üÿœ<«c'f*þ#€pc]q‡ÿl«§û›pŸúPy}°ÿ˜KѼ¸~+hø8rñ<~}/xbÔîM«An‡QAç˂Ӓ aù²Ã›]×ö]Ç.„  ´g׋àÿÒc’mסvÓ'S¼gÙ¨Û9P+ßÂv>¬‘/ˆX 4ÿ«|ù—€µ/²%Л•yO¼&޼Æ/ä³ïÝ&NES€?8OÆ!šV|p#Û™§Àˆóò%pžÅÿ°€¿„îÓàà-<‡V„ƒ×޼‡›õR“þÁ=öOŽ?ÙÄýl H¼çLœèžñÀY€j €ª@?»<!þ§èÓOZ‚Öñߺ‘®~ò£lj¯’ÿ_e›þ oƒªÖÞó;ð~—ÿr­Üsüß¶íG@á:µnÑF…}ðߺsÛ¾‘6ˆ‡€àïÒÐÑr-×V‹×„WyÍ[Bš½Ž¯:r·Áçc· Ñmº¹Ö©Ôš¾ÄeH'ŠrüGü»6-¸bŽÓž³&hÝ´éÂ_í:ôö´M”[Jf‹øªÏñ=Çþ aû¾u÷1àoÝá4r…߸ç~qŸü7ÎÅó§âéë jøv°p„t`áˬ¡+ñ_JçøXäwŽŸn×y`œ·î€CánT?üWÀéÒ¢E Âþ~Ó¸é»a£ºÊÁ—´á¿S?·Y+µQ#¹M'}àeáYñˆyé¯ÿ¤ûŒ‹¡ž—Åí´òË, õE&„øj1Ho~‘V£ÃøàÝÓøj(¨\[Q \ Xü„º@d«I2ùf«ÉòÔý µèh0à_ÈÍ„;€ÿò\59ž¡.IV÷ÓGª‹Cx†Ü÷ˆ¸'‰ø³4E;¸Æ&¾Ù;¡Aß$O©—…¾•VúJó=\²=r$¶RK¶Ã3‰uxš¤KyÜÒ?G*L“ñÓåÖ/NÅÿÌÞ]þ³™ò—ÿEa&J 3JÿÆÊÃMT)‚¢yÔüÿVwÈOªÂÓ‚Êp>‹ùI!æÀ>TÂùüóCøyÁælÌeV ‰v̆Qþ(„2‚H,òù™n«@VªàŸÅÿyQvÜÕï,@a‰ðþ.ÿYµÿ¶ìc®ä?ÐÌ•’+',§ùÓJ6µË3.‰4¬KxÖ’¦;X µP¡¾ûúÁyã½o?ÿ»¾ûÿiø§ÿ<~ÿ›|ü_&ý¯ãÿÓècÁ?õ=þÚþø¢I}¯Nk±Bg´øYg®aC¦Q]šQ]º!TŸaÐ’ý²+ïå@ÑP¾áHžápîËþì—=™Fé&­i|•T'9ªœÈâÜkâ<˜jã=oï½ÀÿªZØ-Ep ' ( v) ÿÝñÇâH×’Hç²H§ª·×aÞ £_x³4rÊ®fÞ¥i]2°8±6{·r<5iÓ0hZÕýª¨Ó(»Ã(}È<Éö Í· Ú¢J»^Ðã’öóp;ÛÝÆNÜ'O=§Uü¿–/ƒ“_7¾†o} Zý ¥tàsàúgeõ†­á~Æ“½g¸¬–ÎLIèhÛ]¤“¯©~©:?ÓB°l…=Ö–^®F´þþ¿…mÿ²Ia¤‹_üW.ÄS}FEIÿ Jø“sä?ÚÅþ™”ð³Õy8þ3±]@xüOþÙ@ßw«}µëÑý)p/õ[àÖWÿMØÙÇÀ•Sñ ~ÒO~Êø©ì^†ŸëÄeüÐ~ˆÚÁqÄfè´7- ƒÿ»öƒ»6ý{¶GŽc 9b{@Þqèßwæöÿ¸ *k9õnp=ñˆê.£xÁ=®t¯ÂƒïÝG!€‘Uvmi‰–R3wddl*%¬=â|K2˜^ð‡_àžõÜä©üƒü4¯¿e:Ë@üßvÛöŸÙ @×ÈÑ<§.|¦oü—>ûoÀÜ?Hg¯üç¯f?ÍC'â‘E‡†7Obª´ÂÀÿJÍÐuæ_"—¿¯|’/^Kæig—ßúwùÚg®Í÷ñž¦ÿ’ÙS/¸üñæÞ¯X·®Û´øï=Föþ,ëE®ZwŒÕŽ¿ž±hBð?hXÓû¼˜šøo þÛ¼Úÿ1§ö¿O?þÏãÿã0²€GŸÛÔŽÞ<^¯Öœ.Óí/xÚ’õ¼!ýySÆÓ¶¬§]¹Ï ž¿˜,~>U¨?•¯7™÷l<÷ÅP¶Q_¦IgšYKª >Ùâm2øï ¨IpªŽs®Žs­‰1ø×%x©,€ñŸ‚Š"h!˜þP7‚°knÐ!:P«ð@äßäÞäßè–<%|3eõvÙ½{Ûol7`ì¾x,Ÿš³kÖõò Z “Z ’M‹æøõV};¶à?R6¨‹íl‡CT„·á6^:ôã¥íXü¿!hcü§Ç.ƒ@4,`—¸vì8H£Ç(5ÕÕã9'¢16UÀ‡¶­»`°¼âæø#M^pÇ—ÐÁá}»îCû~®ëÈž]øb?xn7ta?|ÍM@ÿ?Àå×)Ýó[¼Ï_.| _ù ]´}×þ"µJ#¼V'¼B#d€_p:ó[Øê'ß¹ÒyX3R?üf©æÏev4ßÓWYóäÁä,ˆöamÔ‰”ënÄüiåwש›køC],fÍßMš½™á7Žš¼0¬ê5¨ì1(‚:žæµêf·égu?Ëüñ~¦,kÇUÃfe\ ˆ è~Y@;ÿ_dÒù¯ç¸GäÏõÿŒa5Äÿož%þˆüÁÿª'‘ˆÿK4BÁÿ¼ÇØçªIóÔeùrð¿@3 àvFLÇÿ,MY’š8ñ¡<å±І4AÍ#RÍ3ì‘Øÿ¾OàCŸ0uIŒf`¢fh²VPŠ®<å©òÓÀ,ýø£äJ›Œ&q~K`f•,,×Ë=Gì˜æ#H“˜¥KMÿ/W ñó$ÆÖ2ל'óÜ@>cìøs¹ÙÝÅþò3ýXàús2qv@ªŠä3qðçÿ€ˆ2懊‚y…Afy¦ùAæLyA6æ8‡ÛcÑŸ /æQáÝß‚(„¨ð?Äú–ÿÖ*ø3þßÕþ+lð<“µÎ ²œTÕ¥nWÏÙê ”åo’áoB ”‚xÜèã¢Hƒš8ýŽŒ'£j«UŽÞýùcË?þÖóÓùù¿L<øïó?ý¥ÿ÷Ê£ÿ±ªößWÔþ¯%µÿ: xø?=ú¥óÁÙ»{;µ*´ÇŠtºstZ3õ;3Õûr´G t¦‹uçJt—Jt–Kt uæ ugòŸMä e¿êÎ4kK4¦Z6¤XÕ%9Ö&ÿkâ]jâÝTü¿'e!¨„â|×R… ø_‰ BDHèh€Â©RáLÁ@P£WLÃÿÃ×{@Å%gß㉜AD‘9Ç&gèÜM“sÎ9 $@€9眚œB$Íhíýìõë¼k{½^¿›wg6Îîê«ú_Ô£ûõ9ÏéÓ´„ô{ªêÖ­rI¹o“9`Q5fW7çÖºê×·2´ ˜=öŸy4N_~ÅZ…GRáþ_°W€ÿÀ¼ØE_ÂBC$ó>„ø¿ãŽ•£Àqp€ÿÛð­OÃ×/øË/Ù ¯xË—ÌåK† ½àø¨@’“"é› ã%å/㊓tJ’rƒhÿCþg(ø’ƒ`x“*¹‘ç£sþüÕý*þþ¿à ±× F_ÁøŸ½zÁÅß÷„Rtä5F­ƒ¹ºËŒ;ëƒ{X%óÂ3þ7û€ÿðc\±ÆÓ¹{— ·ë3@nì’_€køUøQo9õ®Û¶Î›>ÀňØ7ÝzpI®÷`|Ó±ó±çЉï<‚ACŽFb{jC ¦„ÿ%;X ²ÅDáïŠÚöì…àÅ®™ð-À¥gźeÙüážC7ðÿ™ÛÐ3ðz/\ûBñþÆáoö„9÷R°ô*jiÓ¿­Ç8»V-ü¶ ·Xž^£½Ïê?çÏžA:)[è dy`¦¯Øøw 1Yß/âüO¿Á}ÿ!µØ½ þž] ÀþŽWhË£kÕ¥uɾi͵mÖ¦~Üì.öü˜×öVößi×-ǪÎͼf­œvýünãbЀyŬcÝ”]͈uáï­R1ÿû ²Að¤A'íÁMœÿL5bÏÏmõ(€?ò_+‘?¨D…K ‚ƒøŸN@ÁŸ…äWŹê윌 µÐXÕàX%zœ"‚ÿhE7¼;W!€!ÈV d+zF(Å©²TYI7˜‰¬ø¬D¥ˆx¥°h%ô‚rǸ;>q%ž¬|¿/÷,Ç,»¬@<È ±Ê ±Ì¦[eÑ­³69,›l¦uöÿÊÒ`Iª1_ã?ßìÿäÿû[_‰8õ¼‚ºÉ‹X—‡YÞýoÂ?—æ”,ÅðÏf^…ýÒuðB1mSÔø5xòÿA9avGP^¸¥oZ€Øÿ¿67éÃs^P¨…øôüª{Ši•Å4Îf™d°q {ß,G`\­/Iƒÿŵ»²G$.Z¯»WâGe¿;)ÿ“y©Ÿ e±¢øs‘ò—•ÿï’ò÷g¿;®ðä>ë}Ú ³]£)ÀXéÞB­Î<­þl…‘Bå©Rµù²K7Dj •2 a©Ö|ñ͉ƒ¡Ü[ÝÙ-™6i6ïùï‚ æ?eWäÿ "B@.ÿK%<¯b¾O1ÏRŠÿî·5¼ ô°‡>)Í.…ì+‡ìïN:6L;>\t 3;>½ûÁÃǼÙmúļWç¸Ëƒ‡êaÛò^³Òý².ƒªY‹úeÛ‡ØaèØ)´|¸f×Q.6íÓ°„õŸ ^¥øOþ¿‹ïu’_þ?…ÿûAsÀ *èyÈ"<S°ŸÒAŸr×¾¶ ôÁs0ró‹\ø‚7@±ô¶wÄŠ°ŒÏ›ŸEl\ „/¹ó­2 øŽ©ÆQyìÿth[²}Ÿ¿´lóìlÈí@.xŽ ùÀßµ÷Öÿ÷Úô -›…fMØöãÔ÷Â}âð—§¡ÓÏ9ð·<< )À cá¥`ùojÆñNƒfT»B™^$:`W~³ð’=w8sé7KÅÿ˜L]€{M“ej8ÿT~|þð¸Nëà‹W~½»¾={¾=»>Ý;Þ]îm+ÎíÀ#ðÊòÞ¨9Nxë1¨è6ªl½YÜ¢— jÕÏ#äï7+‡ÇëêIÛša«ª>Sà)¦ÆEÆ…F-zY-†9Àÿz­”{êñ÷µtS Rën&ÞÕÆ°¿Z3úŽNln<ð¿P‘S¤Ä-Væ©r ÕØªŒ(‘%ÄÄF@˜ÿ!ÿáuò¶ù/NÄð§ìÆ2õ}þ%£ö-œ˜Í·ÈXäGšVÄ5fêöjÎV(nß—}Ñ,õ¶Kòo‡¤¿7¥ðý9¥_e>ɾ®ü«u•Ÿ¯©þT¤ú_ Êÿ>­)À_u˾l–9¬SX«Q›½­9\¦=Xª;]¢6_©±\¥¹V¥±^uc£JuëöÍ õõ íåR½é"Ãá|“Þ\«¶l›†t›û)¶ÿ ÿ¯ž¿ÿðv 6ö—Çx”GáðŸÒ0R¾w ßù)€{ ß­2Ìó7ä!#²3 wÈïÁ„o÷œOó¨Ãý)Û¦%*ÜpíÜñï_õëY^ôé†`ÂñÞ¨Mõ Õíž[•]·î ëßž4¾‹³%íÚfŒï/š7m9uxÁdÀÚ¾ÏØQÀÉê_†Î> œ¤4…=¢Ó/ÂSæ2ó}tÎ^?c­.¹›` âÞÀþg¼u°€¿l]RµbRZ¹²Þ‹¸<`7¸÷ÃóKŽèmÔÆ›HÑ9ñŒµð2xþø¿ãÑ»CëÞvéøy >¡¦XàÂJ›¶}Çž—SÑ÷¡CAàÿ3öüKæ<öýÏ?GfÍoúuweÝUfßUe–*ÕjGïó‡žó§_Ðg/ƒçÞøÏŸMBHð<Ï}ðÚˆßø‹`ì¥& â`gáÞµâÜüÇî#¿ÞŠü -ÏŽ5·–e§¦%‡†Yë{3Ö÷€ÿýF}FÝúåê¹´ µ2 ¶°¬Ä"q1ðÈò6ðÂæ.<ÁúLK©S€¢î[ÅÝ· Û s!ò§V$6ê¥îë$ÿ«4¢þê·5£jõ*5"‹”Ø¥ª<þQjlˆüs”CþEl²8Oƒ“¡ÆHQ qÔ¼Ù þ<ÿp9Z¸œ5OÎŽ#ë"ã,çÆVuf+8qeÜÃåýr~|¿Å(Uß8õàxõàµD5F"˜‹Ax=-«5´°14µ&$ª,$4?Ô3›î”Á²Ig[þç²mAò?cEÁß‚À¿ˆ—ÅKÒŠó!ÿÅxÄú€ðVbø“K»ßÐ{_°¦ÈoI‰:ê嘰QyW2Ïašö‰²é8àˆ"‡­SW˜±“jðQð·KãØÿÑx¶ïë?W ßÉsbâã€üç«uÀ<û\¾¢øh•H&¼Q5>“ü.8[/§m›æ°ŒsÙì[EÜ[Å|£²pݪhíÚ8Õæd¥¾,ù¹ùµÛÒOꮿn¹öÞ¿;þñç?þéòõ/Ö%»%ó‡…?ì(ýfKé—«Š?^’ÿÁ¬Â¿ŒÉ~gPæÓÉÓ¦ëGuïÕ^ߺsm£ê“ªwî\?ºwýä¾$èI­Ôñ=™£{òwåvªå×Ë—ŠU& µúòŒZ³-ëÓ­ªS«’*œ+h•‰ž• >(ª ƒÿXóþûª"=È)pa„<– ¼Kà Àv ²pßÛF3;mœW¿Àèw-µ­‡ö,´Ïº7M:ÖSÛFZÚÛDn}^{cÛ¾CóÍã–µðmʲfáV=ÕÒºjßNµéÖ{à; ±=ÿô=ô›8 „ÀâùÅ!Tµ„>GÆùâD/°ƒ¼æO bÇ.ýE<ºån^p6àbB¹ùuImò]°W©®N!ÉõRlþgâ pH@}G°ìÏ]zÉ\xËÝ|ËÚ|²z¼ Ÿxœ²º“'ÁÍ•b%)úÆËyÅÉzFJ¸F_wJ”sI–wJ•sÊ”£eÊúdËæÈ„dÉeÉùf*в”\ò%CGn?ÌœG­ñWþokð»@´É[}¼t´ü,DôþŒ1{:w̘Ÿvn(WfßÖd–Ý`f~,ôíºˆ> zÍÄ¥ g^¸©€ÁðÿÀgäIàäKÖâqÐÄ•õ`¯©÷€ˆÖ½ìÚ ^ý»Ô%AêÌ·oÕµKèØ6gópÒ¼~κiÂôþˆÑÝQãšaê.íâ6õüíâ>ÃâãÒÃ’AÓÊ1›ÚaË; x2aS;dv^„t³³²ÓÒÃ< ÿ}¤:ÍdR‚GHj5âï¨ÇÖjÅÿËT¨€Ÿ]¬Æ)Uçå©ðr”89Jì\e,õg«àÀ·\55ù‡~uìF(¶úÈûÇÈú†ÉÑø²n žœWžÆ’scʺ2äPLy7–­àF„¹€¢;KÙƒ­êýÀ¹ÄV f«ó”‚ŠA¹·bÊ­bk]ë¼ïùFUûrËý¥~!L³B†EÓ²n•O·Îcá=â ŽI^­5+åšW°Ae<„a„Õ7iÿ?µ}– ¾µëÊ8Ð;xW*áš‹ŸƒHÌØçšçsÌ®êv¥Oç.¢×/ëgÜ•×a«¯¢3ÎâWßóÓ`!ðÿ”±zÁ]ÛhLµžx~2‡žXíþåÀõÿÔ:cÐÇÄÿ`ÀðPà?öÿà]°^¼ÉKÍs¸ÚùîÖ½dûHhýà°i×µhú€ºÐ`þÏ[>‚Ÿ?¤ ›.mûž}„ÿ{ÎýÀÿükê$¥þM·œ¿GëÃ\ÀÛw±•Ȭa¿r¤ ‡8³nhÇ¥ÃGpï8uxÿ·ìZêÖ,š÷»»ôºb±¬ç”1sÁ[<çÏ>eL=eͽ¬,{wBð\¢\¢”qÝûÁÍ´Öø™`áYèècâÿ3ßÅ—¡sð÷‹ð÷‚3ðþ%@ð ÿ>Cxðí†ÍVÝ{Ö=û@Ô|T\m€gÁÎó¶ÍS€ÿã·îüûu+{uÊô* *{õ+ú *ÿ ~£²‹êQëЄÝ}4óª>ã2P¿ ÿ˜´ä7h¦‰ç’ƒàÚ©woÄV*ET©EV߈ªP /U +Sãü UX <.?K™¥ÌÌTb…ïÊÁ@þtÕTÕ`ˆù”ü£ä¼Ã¥=Rîyw€?GÆ…-íÂ’A1Þ Œ€E™rYW|ƒ”3]Ú•!ãÆõ•y…Êú`ú è¡©A´ªWœ–g¡-«.0¡.$¶Äƒ™è–ëk—çk[àïPà\@wÌãØdS•Ÿ"@4×´‚cZɱ,ãZ‡Ùÿ˾ºŠkþµÊÿ. >óü ÿ1}¸jæ1'ü'11Ï‚ÔùAþ¤Ô“ð$ðϤ›ö‘üt3uÞJ5[âEf„b°UBe\°e|ˆU|° Xð?•aGøu"ÌÄîL®(‹gÊæ;ˆùŸ§ìpG‚}òø!ÿÅñ?iò  JLvit›t:¤Q&ù,£B®AϨ:Âèn´a]¼î£´›Ý9ZãÅšK·ÕÖ«îI¿|(ñW×ÿqè“ÿœ•øÙ²Ôç«’_îÈþy_éݡʟT¾ÜUþí†ò/D ?]RøÁ´ÜwÇåþnP,à³éËV™—¤_4I½h–:k‘yÕ&û¶]ö³6™7­²—-òç-J§MŠO(ÞSÙ¬V[ªÐ+1éÌ3oʲ|ϧoðÿv<ÖˆP•Ÿ«[`‘îe^ÈÞÆSŠÿx5˜ë}‡Å‰®ÜI?ˆŸÝ ß \eôm±wØ#ÛŒ‘Í ¡ußÁ5Ÿ ïÁe·np‘W?ð7ptÝ»WèÒ6‹ Áëæm¬:µF¨-“ÇÞã=G!¦ÝõÆÁÓÀªÛqÍžsVÀ^0æqµ%œñBñÜázÁ  éô¥sÎ*–ÙÙKg¬ERá9g-CPý†¿ ºä¬á1+{åÃ+À¯¨óSä‘§ÁSð’àÿe°â@ñWxÄž|¤Ÿ—/ÉK•Çý/ÀJîÄJØ'H:¤H;cϧŒw–œ_¶¼–¼7NPöJÿȽË2ïIÄ䫸õËÈuøãœ¿„aû%o˜ÿa>|H^gK:³$œ@ìkŽ|)OÚ“/ãÅ“¥$ï¦è¦âËWö‰ÒWñbJ;„);çYrî{'7dÔÐãï†jC9÷èüª Vq€oA¨3®fÛq,K¹&<ã .Äÿ%ûâp«÷ã7-Äñ?a¾¸ èkü·,ް(Oæç‹û9I…; üó¯êü¦¤ÎŸÍ4'å²Å,ƒºžðÕR{ŠüTgŽ5„ýþñ±V ¸ k°€äP; ΙöLä?)Ôc›+Õ ".ðǽbø‹•Á·K¥SÅÿbVW Ÿt^õ¥S£–èæÙ þKø†U<ÚH½ú‡I:]š#ùêsêwÕë^4É|Ö&õ·}ß½þ_³’¿X–úbMê»rïß*½;Pþã®âï6ä?Éÿ|Iî¿feÿcJö»c²?(ý>™¿ê–~Û% Fði—ôÛ^éÿ¯_ýMü_v+|Ö¥ .ðò¡ÒÓÊ{5j¢ª›“eÆÝ…¦ÍÙf5)w’€ÿx ŒâE¼7á?’?ÖóvÌÿþ¥‘Þ„ÿÅ¿B/ÆüþPü÷)åøßg ¦bj÷S§â…1s{±àÛ¼±-Öð6st—9±ÇßÚû‚ Ý{–hÝðd7x|+`DäѳàܶàÒ´àÔˆ“ç]»H;޽{΃Gîc=0€°È)V‚ñÄÿ—¼UÐK–:ž>CÈüÇî}敬üñD€!øÃ¯Â'bm‡ŸÌv€,€ºçµB„È%_l#g.^p„ùã¸0ÿ1œ¼ô:tõuèÚú:5±aîwnÒ±þŽrB†¼_¦‚nÀ0Ñ×]bÐ%ÁÒåܳäÉÍ/ì ÍRðɖ𬿳Ç黌½ŽÞ$×ÙN™ oÂWÁÞÖH;Ó)sÝŠ‡Î—ÔTR2ªçüS³ìð2Bè¹È€` nƒkv¸žÖ¿`Ñ4kZ¿jß¶CÉÐÌ»w“¦w‘]`ù±çð†mû¼IÝ’Ùý Çà?|î’MÛÏðÝ¥c×½'ÑFáïeͺuÏ©“Ôÿ×;¶\ºAð„üáÿ‹¬šñV—+V~Ð\»Wm;°øCñÿ‰×ðc·þmÛvþºž¸ \Mþ§õûŽ>Âá?ô©Ã©mæø°gm¹.3SÙ1WÅ9ã×fÝ´Ö$îM Oœ†NœøãÁ Ø1Vû&ÿXâc-SSÁñþ‚'d=}›î½ðçÅ;kT-]€F][vî$Û‡q¶§qͤYÿÆw øïÔ(ìÕ-#ÛGÍTŽÞº=j^=i] ØÇ,ÀòÎÀ­ŠaÓÛ#fUðØoTÒ¡›×¦“Óª›Ó®Ÿ×b˜×nRØj”_¯“Z«‘xO3¡V+á®F Nû¤fþù‹ÕñÂo¾«Hƒ›£ÊÌVaÉð+%)ù%(ùÆ(zGP¡> OÀNEûbÈ3%ˆðdà=nÌëŽ@{®„k˜$-RÖ+FÁ²†Då€d¥Ðezš=] JÖWŽÑøGkFªûó”<ùŠñê&‚j»Äe ÁÙ­ŒŒVzNcPú]ÿˆòÀ@HŠ˜ÎÅlkŠÿFå|Ër¾#ò?ÂLÌbâšÏÿÿSïDø‡[ , ¿šØF:ùÅ–~ìê¤Âþl<Û5ÿŠü!–d‹=YdFô~[Ã?.À‹6I!¶„ÿé [)A žÆ²&M¡ZX@&ß!ƒg/V:÷ä?uÜ@7'ç¿Àÿ,†YË‚ÿÒ0ƒš0†H퇱šmI72U' •W*±ÿy“Âëv¹¿í—ýçéïOJþd^êW"©ßnȼۓ}ÏÅ?ï(üaCö ‘ô/…2?]þñ¬Ì&eþmL>冤Áþ~@ö;ÃR7*óÏ£2ÿ2*õ/øDþ†¿3 .ð¦]é¬Yù¨NmãŽÖL¹AO¾Is¦Qmðß®2,À¹2‘L½²€ŠXOãíIÉ» ùï‹'¿ï¢0ßB¾O1ß«8̽0̽@à^$ð.ç5°cçcRN’ÖŽ“„{IÓÁ"¦¶y;œñ=ÎÔkr>¹2¾GŸÚYñî_õÜ Ý @SXó\öir¨ŸwlÂeUö¶;ö}Ç´±¯É#¯±CŸñ#¿ÉßQ\8‰$g /¸"á?é ì“Qxq¼Î\Q™öŽø“,B}`þþ:u°Bܾ8ž#„`ÁøÁC= ™>ñŸ8ž /‚V€ÿ¯k8ƒ”5·2Üe\š%~šŒwŠ4Z@œ”{¬¤[¬„3¶I;¥Ê8gÈ»eÊÑ2dÝÁ²åýòd<Šå—šÎc…Àÿ·±{ç<Ñ){ñÓÈõKþò§k€©ðDƒµøšµzNñÿ4xàÂ%YÁx KßTÇ;äM‡#¸2».ûæM& jðN–k'0R€]ï~2å`͵kÞªiŶuÇkû›v„ÿ$þûÚ¶ïy ø ®Q“ßðwôþ¯Zµì¹©Aý¤bCŠ?Øk䨹ïÚ ü_µ~´EûÂfÛào´ãØ ü?¢íq/ç¦å£}»®Ç޽$þ?öz<„ÿSú $Œ3>­uVÉ1 )êf)²æ…2~ë^mg¬…3úÜKúôó`êŠ6w-ÁQü‡!sÙõØó\uê€ßï yô‘ÉW- ŽÛî}ðK ¶ÍóT嘪ù“âÀ¿G»dÄä΄y À4nV=c}oªø?A•}þƒ&àü÷uë€:õÀ²édQÃÿsêç4è¦ãØglþĶÜS£ ‘?À„”˜8Òù#[54Kç9dÜNS ŠWñRôÈ»_…ú²(†¬s¨´#˜’pb\s`~lÌçI8ó%ÜÂ%iQ8“Ö/U58K‘£ÉÊÕâ‚òÔà 4ÅÚá¥7#Ktà n†ei³ÀâÔƒ9 žti[ÞK à.ã)믭̉³Ð-1 ¯qHkòËnM¬f–†z–°ìK¹¦e|ã2¾eY˜mI¸Žwûz3ç7¦=|âE‘Ö…Wü/à›“)m_#?u™—´ôƒ2Y–L ²¿žb¾Õû±æïEZ1¯f/íù@þX <ù€ÿöXzÏÒ«IúBIk °í39 RcŸ<ŠùOàOmOÀƒf¼LwÕó9EÓ<ŸeTÌ3(è7„©?ŠÖèˆWïIVÍVZ(‘_¯’=¼/sÖ"ó—]2ÿ0"ó¯Ò?œ‘øÙ¢pþw›²ÿåß*¼ÛWøó®Ü—›²¿[“þõŠÔ/–$6/ýã9©ÿš’üþ„Ä¿OHýû„4è»SRÿ6#õýÉ€¦¥¿?-÷½ ù ÀÙ¯Z•ž5¨ìÔj.Ü6è/4jÉ6ºŸæx7Ù¾*ÁW$x-WS@£<(yQð÷.‰ð)‹ðÀ) a¾Å€ ‰†ø_ј+ÄùÁK/ýq3ïe°è3ÎÖs"ö—|áœcs±3SÊ?CÆ/]Ö, IΛX@ Z€C’´}ª¬}º¼s†¬ËûçÉ{d]§8—½ˆš½ˆ^ÿVÂÁeø|Ÿ¯¢—ÜùWáð›âu³çÔ¹Þc­¼a‹Èz²³9érŸk£ P[,½Ç·ûH±eѼiʰvÍ® ›ö=z!Àz5â ¸`ýðÿÀ}pשgÑ´Nh^·fßtà‹VlÚ·h}Àÿ ×N¬ÿûŽ{Mî¸ôCü¿ëÜyà†¸&íà UÛV²‹yݶuÙ¢ \àÀ}€:JÀËbkvíø-9tÿ!øìÒð_5m<´ÇË¿ÇÎý‡®ýO}FÏ1›þïú,xµ·Ødëú…)êÄßÐþD·Ç*ó%×t¾f,œã´Ÿ ýA_ƒž ià?¤¤ÿç1îJÀ[ "Çö÷' x”/’vd¢|cÀÿ9ë&Rù2¨лݯ[6¬7»;fzà?i}ʲ—¦Y×¢lï šVö—ù»õŠzô üû ‹»ôóÿÍÚ™ 73èd ¨ýïxÛW#ú¶zøè -A¡oõjpóÕ9YÊÌ Ez6àZ%(C%0M50U- IÅ/ZÁ“‡A>DøŽ )G¦´]Æ È"åÂ8_Ò™+á̽îÄ—t‰–õHTôOQ ¤–…1ò5¹…š¼"-¾X…Åá%šåZQÚÑðX¨–­ÎM¾Á —÷gJ¸³$=8Ò^iÂÿN²2+] í£Â8¾Á%¿É7¿6 ®28°ŒéPÂÅÃY$9Dø‘¦¸áë]ýæ$øÿFÙGÜð„[æ ÿÍ©Ñm€}×(‘Ö#r ‚jàÿðG}ЊùþþÖbòÇøZÄúYÆù[ÅX'’ú=UŸÇ=6…þãBLkqwèÕÁFÎýJ©ìÿ7ÿ) H Å"¤-…\#þ+Âõš7Úc4zTS”¦sä—KåvîHÔK¼n•øv¯Ä?º¥´ õ‹e©_¯Iÿÿ¸'ó§}Ùwûrïöäÿ´#Kñ_ê×+¿Zºþ«EÉŸ-Hþdîúf%þïŒÄf%Á~¸(õc¡ÔO–$~¶$ñ“%©/Éþ`Nþ_'þaXþoú?kW|Ѥ²W§%¬6.1ìÈ3ªÏp¬I¶«J°#GåñîW[`bÈz_òH÷¯pÇá|¿"®o§Àðiy¤eŒàvNÚNrÿËŒ­gÉ»G©«»és'I"°€½ð™½°ÙÇas(Þì!wæ€sÄ6üÇÖýF7|Ç·¦v‚‡i­‹.­KÎí"—Î]OþIŽ& G^ØñŽw]©úü)sù‚»†…q–€€íâhŸ4ˆ¾`-qWü_‡o¼¬ZáC"È®r cÈþyk/™ ¸+ÎC™>ƒøŸ þß„¯¾ áʘày\ (¸¤¯âpN¦ð‚¿²ë3Ô¨—’'š-)ë›*ã*—Âe½¨,À>AÒ6IÆ6UÖ1]ÆâÈ ”ܳ¤iÍFI‡üQàÿ›˜àÿKžè2LtÆ[¸,~-ºàá¬Qjåì}é5¤<Î\͸›„ŸizôáF:XÃô3ÿIæÁ=´€ô‹æ9£ºMûvà?P¤dÖ1„ÁFàÿ–Kþœ]z„æ–-ï‹lvݺwiýËÖmxïÕ¿íÖuè=@âÿ}Úž¸vy ÿ·±„:€ÿüï:w‹¬š—Ìÿ‘ä;Ô¡¿ ïàø¿aѼv«ñȱôÄë?O¼†!°Çµ_!k¾}S µ–q‘ʦ|0Ù9ÊN›Á.ào'`öUèÂ)åÑä>8÷ûƒ°˜ˆ ¾CÆP“ƒ Oß:ŠÛ8Híg,=I\=ŒîGÌÿx€ýiŒÿÃæŸ–žF,rç÷èSŒ¹½Ð¹-ÿÉuŸ±ƒ qùvFVÜ»œÛ¶|GS+vÍGÞƒO¼»<õ›À»Z³gÌU ÿ)VuD¯Ãp2U-§FqWž¨)ò¿ä,€¨UÈÂÖ.ëð:¼çGúœsVÎYË—XÖ(þC°}Æ‚4aásñ?è5å[x4GøÿÜgîÔoá3vâiú܈mu‰4·@*$W&‡ÿ+úÿÓ”ü㤰(VÒ.QÊ.EÆ!UÆ9]Æ#CÆ;_É=WγR•½Éì9]=Ú¼ŒÜ~ÉÃïð2lãÿ¨2ÖwP; ˜~M_|Å\: šþê!ÊGþ¤µ 'ç{ÑI;ö=»ŽÝ"à¿áý5›–§.Â<pÃù?»ž«N¸5×¢¹õ™—Ìî -î-[×o9·m»ö ­ HÆÙ;´nà?dûn#‡#»®}‡´Þ#Úü€³€qü7;W­ÁÙrèX³z´bùž`üOÍ¥ZƒºÖí; ;8¤õï:vþoš7cüoßýرwÇ JÏB&þÇ!£óÞ­¬³kíx|M¦œ2çšFŸkæsÞ(þÙ}¦ÎƒpÊ+µÌ—ÚDUþ1<˜Äý˜¸%ï ȃàCpø l8¶­;´î¸âÉõ²Í£9ËÆˆ)ªíg@¯¢S£pĨzƲ~ÖêÁ¤Y ÀÙùÀÚ¶~Á¾È?j^=fu·Û ¸I#«Y+§E+«ß¤tȬ› Amz¹MÚÍ7³¯Æþ§?ÐþÇÕjG×ÜŒª¹Q©É»}SP¦ÅËWcä(‡d*…¦+§+…$KyBÌ™c”¤›àš3ÿšO™'åÌ—váR"Ï#äÝcU|’”RU±R”¥œ{ƒQ¨ÎOÉW¡ß`•ªóÊ4ø d;¥oáÿá{Š–ï‹?â¡Í8½G  û¶bþc¹†j¼ÏÛß½¢ž¼ßÉègEøO$þ“m“ƒìÈÖã÷À·óÿý–Ư,É“t–<¦°þð˜Ì´Ãñ}Ps³Ñ‚Ì’ƒLƒ“©az©¡¦™tSŠÿ†üWEëµDªwÅjô%¨Œ¦*ÌçÈl”J<¾ûÉiÃ_|«ë“¿¾þo3ÀÿL$ý«u©ßl"ÿ·-ýû€ÿ¶e~ðß$ü}±Œ‚\€è7"Éß­I±%ù›MÉßmIü~[ò÷[²_¬ÉütYî‡ òÿ6U ¿îU¼lS9ª×X½«7QnÜ›oü¯I¶þãR˜X§ÒX·Ò8Ò”xÿî¹Úÿå] p+ ó*àü} Ùîbþçñ¼JAíü Q|ûYææYÆÁIÆÖnÚÂÓäõƒ˜¥ãØå£ˆ…}îô>Žy³Ï×O#EÏËÇÜ…cÎÒcÆâNà4Xiò9 ž\õ˜r|´èѱ8°áÝ)´o€ˆôȽç©×Ðmð‰÷ÔóÀŧKLüéK$˜Ò±ÎÃ_}JŸ'ðœ9Ê^|%X‡¯ƒ.Ã7H³%±€7‚ €?¹Œ.ÀÃakØç#n+eÎs— øÇ)ÍLÀïòYàÜeˆððmlCbbÛ¼bóp;eÕî‘кyæVÝ„É=ÿ~Ýò¾›eùÏÛ4üç¬ël–웚–.¹<šwlµ¨é3.k×+u–tz !Èo×ϵêãÚ—Œ¶}ÅBðW3ü޶à®Nxµ¿B›[¦Í)Ñà䪄¦Êû'Ëø§Èd)Ü`hâäçx)¯Èë´HI÷HiZ´¬G”Œ;(FÎ×+û¥©ej„æªã½j@tH®J0!Ù öm-~¡Rh…T¤Ê-× /U+ÓŒ,ÒŒ,¡TªS¡W©xû½jôSî%WÄ—ÅUš'”YÆÞŠ,0+6I¬0I­2©µŠºo•úÀ¡ Ù7»žÎ¨dÛ—ríKœ‹ÿ&퇹¼ƒÊ"­(Y”R)@y”%ˆ¼xe‘¨÷ü·üZðϱÊfš¿Ÿ5Aî_ñ?ƒc“ŽY€8þ·üï7pÉLfb_Áßí2‚+øۿ翘ùöí¨uí”BíH™ôa"ä¿‚ÿ{þ“øŸâ¿ð?)Ä„”€ÿs˜&…lýr.ò?J£#V£7Ai4Un1Wz«ìúIÍ'M»ëã½öï³’?\”ø™Høÿë )þ–±x¤ø/ýë5É߈$ˆ€à9Lá÷ëÒÜ’ûÝžôv¥ÿ¸'õnOú»r¿Û’ûÅšü„JߟUüç1…ïô+¿nS=~ ¾zWwªÂ¨¯À°>Ó¶&Åêv¼uYœmI¬}q¬sI¬{q øO-§‰7¿Qsþ Ã= ÿÞÏ-Ÿí–ÃuËá¹çð< Yõ̘Ÿ‡Ï3V^fîÿÒ…Àÿ'q+ÏâWŸÅ®œD.Aä¿ÏœØ¥=ÿ§‘«OÄO€ÿÌùÝ ™Ý€©§¾sûî£û~ã»Áó^Ýc.S´¦9׆QÓò«šC·Ž§žƒÀÿÇ´Ñ#ÏéÓ iÚ¼ð4d²Ñ%o•:BÿIå‚\È~¹ñ:zóUÔøÿ‚³ oþ¾ è&ã°ˆ#$Â’ Åÿ§!3ÏB¦ÏX ü_²°pºx¼DÖAž… _±V?ån€ã,:µÜS‰Ëý$¨ž)€ü—õ H”öH’rI–rÂ^ × Y·,×y÷\YßzIùã¯â·^Çí¾‰Ù;ß|ÎÁA÷çüÅWaBÈ;¨¥ËÀ=ˆÿ?㊠À•—xÑéØ"Rüï!Ezâ3†Û\Á6mÛ!þ_4©ÇÀ¥øg»^ý®ÝûÞCàÿ“i¢€ôU›ó·ª–Ìïn8bëæªmÏpiT¿¸ÿǦeß1þØ­à¿ïÚ ¨óݺEdñ!È?ö"ðMÈ Ûºà ÇîƒÇnÛÖ­+Fõ«& vÿ»ôaBá3ø‚9õ„9¶åßóÀ"³Âˆžc`ͼ.ÃúèÆ{É1gg¥‚S‡ÎÁû~s'Aÿ‰çÔÊ`܃à3zâ?n%†ÿ–SX´åÜü_Å]óW,gMë§Lë@ã·j òÇÓ^£êÛ& ÿŠcóªs Âß®à/tjþC"0iS×eXÖiPäÿÕ.ß+üA‰6òŸp^¼¢<·!¯ãÞó?•áJc:¥0 ÿɉ3vþP]@ÿÉ<¦†˜g„ÞÊ¢å³õJ7‘ÿ±7ÚãU{ÆÒd…R»åןÝÿäuËÇÝûÉ?_ÿþœÄÿ]–øùªÔçÀ ˆö³yÉ¿- F=ðÿ7` kXÞóŸÀÿO;²ïö¾<”ûócÙwåÞ‚ä¿ÜUü|Sé§"åÿ\Púî„Òß*¿iWþ¯Õè‰ù7Ù²2Þ²4Ö¦WÃ;þü‹£û®ÿÒp· áOõæ‡yäs½òÙl·|–kÛ-‹ãžÅ÷,âV‡r¦bî>Éœ»ÌÛ™³ó,wýYÊÆÓ„Õ‰ë/âW_ÄŠžG-Cðü?âÌ🇯ÿX Àÿ#úÜAðôé]·Ñ=Ÿ‰ýЙ•€Ái–Çû½f¥&%ó65ûn­ÿÝF{L…¬1…dQ*ÇŸsV¨šÏ2R¦øa?Äÿ ·Ñ[`ƒÞ&í·s¶†ýöÜp3öò‡% œÆÏ]†GÒ{ó$hê±Î$›€ÿoy«ðˆ#€¨)p§Á‹¸«—µzÉÙ€ptèVy™4;WÒ/KÎ7UÖ+EÎ'YÖ—’w’”{‚„S¢„¸@š¬k&Õ”¯'¸äÿð"Qô&q÷mâU½à.^„-ÿ!õÀéСBz_….¼a/ƒœ…,œPóͰ3Ök ²ƒ³ÐÅsúÒ9wRðÀc×!àÿ®Cï¼Qh:œÝ…Ÿ¡ïЮ'ö½!ŸÔ”\(v /Ú6ÌW®ÚÔÿáÍkv@lÝæÒyä5üÄsäØc|שOdÕ|èÚs‰m`ß¹ç±ûÀ¾>îpwîYµl†øŸð‡ü¸à@§5ªËtÓ®ÌøäÚ¿eÕ²¤âÿ}Û°€§ž7øÞž2ÆŽ˜Ã ´¦2=~Ž-IÍ0ä#ɲ›»Üg¬%ðAàÿ jâîIè d1§ã/ý'É~ÏC¯¡cßQqüO¦O›Ník6Íþ ·îO¢jG «!ì˜Ü™³n:<‰œp'ÅšKë²c3dóv à N§lê†L«»ÊûM+ÿ½fe šé &í lø×Îx ^¯^§•vO+µV+Ž,öªR‹þW«‡ÕhEÔêFÖÜŒ¸¯}çf8€º@™Y¡%¨Öò×ÄßÕ«Ö­Ò‹©Ð@]P¤ÎÇm_Ô1n±vX‘6²ƒä¿ØÿáI2Ã! ^üŠÿÖhæd]rbЭ¤`Ó”`3LB óXº%a:·£tÆ*µÇ+ö%ËMdʬIìU~ò¢î/Þ¶}ü7}ýËĵÿXøÑŠä/7¤¾Ø”Æ2Æÿ¿Û–þÿfóŠÿŸ‹®±| üÿæԟñ¦€ÒŸŽÞË¿;V@)þi_ù×Û*?]SùÏ%åïM*ÿ_w¨ø¢Ü°7ßø_lQgQkSm+æ?ÂÿŠÿ®„ÿÅa¸ð+?Œ–ÇwÏãºç³iWüg¹g±=ÿy<Ÿâ þÈ‚ýìÑó¼­Ë‚ƒË‚½i[`ϓ֟ljžÇ¬œÅ­Æ¬AðÀœ>dÍ<á-sþ³Çìùîâ1Ö{vßsjÏgj+`|#xl“>ºèÝ6`Y9bQ¹h_·ëÞqèÙ ñäSÙÓ@œñˆc~©Í/xÛ‹¾pƽâoàÎ2ðO=_þ¿‰X‡û—)‡ßN>„\à”»oxÉÿOéØ ü#ÀéÐTGè)ÒŠ ã;zì;F*-cÆÞp±DAÿAçt\ ³éÙóP;­Pš‘/”"å™*ã "çüO–òLpI¸îHY€#$Yòî9rXj½•þ"vîÓäí·I‡ŸÅ\Dlœ…­\†­¼ˆ>¬¾æàž2àÿYÈÜ%cñ-oý‚¾ð'ÀÈÊp}2 ß-öJ¹ “ТÉH6ìÚðr–gööãJ¯vþqΛ#¶åClÿؽgÓáá²eÍ­mÇ©‚6VlÜú¶Ûá'K6='á BxÿØ 1ñÿžS79X±|ˆ ÿŽ]À‘YӺ壇Η^Rþƒ•¬Y·b×|¢KðQ¯vËôác‡î#ÇžC—nˆ £ÆôÎ][ØEÖ‹Óª!CqîXwhþ‹¬š„ææŒk§ÍîTõê”üÇLkæl`‡šÿ ü' rl]´{IÐáÑŒõƒaÓêãÊa³;ƒæU½&å-z¹öƒofÖk¥Ý×L½§• º¯“@íöÕhÆÔhEQŠ€D \ º­V­U£[«wO?þq*ÎÒŽÝÖ‰¹ÒÍØÊ›QåÚ%Zü" Ü ƒØ¿ÁÈ¡*?éŠðO þ¥É¢2äýÀr•ƒ@ä, [!$W 'Hç«°ËTxEJlx’¯ÎÉ×ÄŽÐ|~©^DéÍÈJÝØj½„;º)wôÒ«õ2ª ²«ôsKKMâÊnÅ—ßJ-1LÏÕŒËÑ /2Œ®sËlI®a‡”p­p½WÞá-‹´"ä?ÕZñÿ¿²€p+ÒùCø_$°) ³. kÙ©ýŒbþãLJ„ÿÔô~Šÿ [ªoÇ–ªÞX~=°üwþ'Ú¦@üü´3ÿý®vë«Ñ{þ Kœ€à9ž ¿Ÿÿ“èþ'™ù ÿ15Í æ0tЏ:å:q2íI²C²³ùÒkeÕñòÁGßjÿèÿ |ôÝÉO~°xýG+×ÿ¿ÝÂjÿ—[ҿݾöû]‰ßïH|ÿÿ?~ ü·ƒüÿó±â»' ïž*½{¢øîXé‡*_ì¨þl]õ‡B•ïN«|gHùU»òჄÿ=yúu6UIæ¥qæÅ1ÖE1vâúOQ4ò¿$…=ÿï-€ð?—ëžËqËg»°h9,Ï,¶w*Û-ãšâÑÀ¥vœd-^äî¼ÊÝ?ËÞ;ÏÚ;KÛ~ž°ö,vå4ný2qû,nã oR€cîügþ1{î_x. xA_9ð›ÙòY÷ÞôÙ Û^õ윲þ‹-ÏŽ'A#O&žLúϽð›%ü'K[ð:KxÎYþŸs×Hüñ!Þ¨bãÞXH΢×ÎcÖß$b €÷­"ÒŠ7¨¯@ pâ¤GÏý§¨Taaâœ1ÿ)oåmØ*X6¢PÓæ!(E KZzÁœ›sj¨VŽÉ—¢g˧Ëú¤Ëù‚ÒHS¨”{¢¤k’¤s’$ºŽ†qÍ•õ.’ ^ iù4yýÓ¤ÝOö_Eí\„¯þ¾ö)O„3‹‹ôÈ8¾Å߀Ôwã~+°ÜkCÝ ¸`áOpò؉Çð´lÖ4kpãs¬Ñüß÷ ]ñ›n¸· §Æî=».Öíê{´ï8·l;vB¸¾ëÔsä1¸ãÔqè Ü:ñ˜€„ð~àÜ%æ?¼ üÙ¶ïþ¯Y ÿáq×¾~\øOµ uoضÒúŸx :÷nX4/èÖ\ñß¹Š=Z×ãÀ½àÞ%¯¦Æ›é‰r6éŠöÜ´ëùGáƒgaË/p«×Ò©ÿÔ±÷ÈsÜç> ©Ù‰ÿø‰÷ä»´>²ž ÈOn¥í¸ao*ðŒoñ ‹ÿ–Ë ‹¦u3†w üô*¦,ï-Ø7B¿èдîÖaÿªsËŠc3ټ†ëg,ëûõ+†«Gþ&·»ô‹Út Úõóñ¶¯~n›–ýßÏyN{ ›Þ —ü'K~¯êÿ`7"«Õ"ðñFd­Vlƒ~r£AJÝÍ„ûz‰ Sê R¨¹ Ñðx_/©N?ì F7ì B+¢L+üꎘj(Y ŒÄüãå¼ÈÔ©$9¯TEß %ÿ4¿,Å€Lÿ Y¸@*«D… ü/Ták„a6¡V¢^®]®{[/¾R'¾L#®B+ ø× çŽ~v¥Q\™Qd©qt…iF…I~áÍÔõˆ<͘ Ó´{é÷XÜÊ0‡²(à?®zÇP þhê©-À¦”\Õ| #-PWüòƒ 6ùaÖyÈ\ËžÍÃý¼Díüq2%¼´‹ü·#üàŠû?I`Tÿp-/|Q:j´Áq=6I6@ûõ•Mˆs„+}#€áÅoð?ÑŸJ@Ð̨DÀøŸj”ÅÐÍçh•„i?H¸Ö‘.=š/»T*½[uýé½_5}ôíÎþnð£ïM}üÃ¥k?I|NñàúÝÅÿ]̰´.=¢ë¿\¾ö«¥O~µô1X¤¿_“úó¶ì»}Å?öO”ß=SF 8Vùã‘*òSíË*ßQ~ϵå»Úãåz]y7kÓ­n'š•ÄšþÆ:ÅQñ?U*¢UD»_ üÄ™ÏX*xR)€k>Ç%Ÿé–ËðÊ`z&sÜ’¹ÎÙl·*{<æÎ^ÊøYææëì=àÿEîZ@ÊÖóصgÑ¢—±ëÏ£D'áËOÂ#þ¯œFŠÎ£ÖNÃWžñVè »~“›îÃë´þ-Ï¡}¿ÑÿÑe×öIëûËn­GÁcG£OüÆ^øMžÍž‡â^o²ä…li¹ä­ƒÈm/ˆí‰ Àãe˜âÈ>àw¿ŒÛ|›´÷6~÷uf ç¼D@n„êÉ,5rÿòr)˜ ˆ&ËhŽ}G_s/¹‹¯xK—\¼S ¼¥lhñ‚:À†R΀EU¾;OŽž!ã“.‹û¿€ÿ©ÔÕ°di°,I:c!HÆ9_É+óš[·UöËø¹ÏRv>K\°n„LºV=j|gȨ²›ZÙ¡[@¶t€Ú rZôpÎÏCƒ¬‡†ÙMYõºIu7©ÎÏØ»7¢kÔcêu›ôÓe=4H=2ÊÁ“F½Ð]x3|V£A*Õ2_­‰{ankF•k†ãMáìl5fºjHŠR`¼¼oŒ‚o¤¬W¸ -Rš!å.é)í'à .¦„ݤà¹J!ª2 T9 ’‚ ­(’\TêÄ‚îè'ß5L½cr[7± ¾ Ãô;i•7“*õ"+ "ðDøVF•i~¹az™^B…~J™~z­sÖý°j®Kyþp¾4ê*ø/úÿ) À°ÿðÇæO þWüXç†Ù ÿì³x6™Ä8¶TÁÇú½®àŸÎ°¥Ñ>°›÷í T0O±]¼#|R¥¹²€ÿÿWe"ê €Ü§ä 1qñç›ü5O A À#ºq6S¯§S®ÓôQOŽÔT©Œè¶ôa­ÄˆkoÛ>þëžþqô/¾?{í¿„×¶zý‹Méßoa·çŸpòçõ/w%¾Ü•üýöõßn^ÿõÚõ_­\û…ðã_,|ôóyÔ/ÿ,à·"‰?nJ¿Û•ÿò±âŸO”Þ=Uy÷DùÏÇÊ_>Vù|Wõ§ªÿ!Tþ§)Åo(^´+Ô« ïh•évæêÔ¤YV&˜þÇÚÇ»Ç{@ PçQëQãQI©"Ê, LàNµÿÝryWüÏ¡{¦3¼RyîI<û¬0עЀvvöz\ßÓᛌ½Óìí‹\L.2v_$n>½ˆ]{±zµúD°tÈ;[C/ý©¿ ó4G†9@üÁ]{ÉZ€tøVOðÿ<~ýEôêEìðÿ¯’ÞÆí@R@ê?d/0ŸðŸlψ{ÃY=‡ ÚgŒ”ž…L¾`L^pÞ„aS(¶Œâ…ÜÅWÁ‹çAÈä7›»Áã 7³r¥2~i2d¼7IÒÅY@"•¤J;äÈ»fKºÜVen1º>M{ÚÿVÂÁÛØ=<³Æú¦¯ØK/ƒÁòñè9dág­<œ¼@öݼÅü…Ì‘†ïã}§Ž=F]·ì:€ÿ ·êÉFÈ-Z÷‘ÿÈŽuì1€3|¨U GžÝ›ó·nOê—,šÕ`Iߦm˾8¿çÔ¹aÓzàÔûÄmlÇ®{Ǧí±S„ñðKvé×lZ€ÿûÎ=›¶mB“‹Fu€wàÿ¾c7˜Â–ÆÿJ€€‰ÀÛ6¬Z jt﬛6Úw0ü.‡V.¸Ui‚繑öâ ¿X”  "Þ‹jøÿû¨p€?(G`Cü'Êäþÿ„½t›Ùµ÷-CÌŽŽ™dA²Ì 133³d™™Af¦˜Ù²eË ™™1NšNáNo;ím§t;…)¼moùÝçyO:½ï÷­õ_Ïz"É’œÌüþ{ïsÎÞTÔ‹¹ÍËÉÓ(ÅÃ0ÅÃøY€áûBå.ø†# Àj;·Uýàßßñ_Æõ¿,¼ÿ?$?˜-øþoüøÇ **%yh0¼Us• ÂT½™Â¬Bq^©ÈSøE‹ð׺¿ÙKøþÿOبøÿOõü\ƒxô—MŒÿBÀÿ?®þ~Ià· |_pø~=CøÕ4XÀïæøþ° ø—eaxýŸv%oS€Ãßðç¿]ø ÞÃq|gâþG}÷¯Ú$·™8¥rùŠí©ò剺8ÿs#õs£Œrc,òbmÑÐ(ì p¤M1®p›ÂP«‚`ëì ÛŒ@ë´@à¿)ð?ÓÛ2ÍÓ>ÅË.ÁÏ2Æß 9À8ÍŦÂ!l.´m/‚u¿vÁظbl^Ò6¯il\Ĭ^Çm^D­žE,_ŬC4)ÀaÐìYè àì¹M\û³ÏÜÆÎ]Xè<¸5jtöt ~ÇM³Áu34¤_ðÅÇã{þѱ/ãÎeÃvþqþOª—+ÈçõÉæLhWÌÔó,Û—­:ÍZæŒê@ & 3d&›RáÔÎêÕ²HUÀÿqͪ ­j¸T)þ÷«ô©çhjƒÀò{4s:ÕÓÛ‰¨Û[‹F þ•’þÌת$6ªÓ€üÚY$PN»fV“*ãv(°Rr­Bb­B|½Rb£šNQ-[- *“ Ï„w ÊzâOìÿÐMûºo,nå'få-l~ÛüMÌÌGØÄOÌ$ô¾e„”uÜc{à?dðŸý¾cú#×li¯T™€l…Ðb¥¨RùèJ™ø¹ä¥´FÕŒ•´JU:„ý@øBè|õÐ|µÀb`¥r(¶_¬žPBJ(׎­ÔŠ©ÔL`êÒkL™NA~6…Á:y¡Z¹!”ŒãÂ~¼øÿ¥@äó?#H÷N8öq¥Sñ¡ºô }Z ô @.ðžÿ4Oà?(ÙóΨÿÑ 7&Ã÷ÙQmÿ.ì¿ã¬#Ž}l™àßâÿ÷üÿ_áãr»_4ÎIÈï¨ç ï¤뤉‚9ë$8餸’Ò=Õr}eË‚ÕD=Hàg¥‹, ïV ž7^w¾ÙGøîáÇ,¾ÿžøõ¢ÐïWDÿ¸!úg`þ¶ðßv„þ±ûðï;÷ÿº%ñçuaˆÿÿXð/ðË)_Œ |>Æÿ«qÁ/¦øÇæûÿßy÷ e@ý‚öýsïÑ_wþÏÖ“ÿ³*ýÅⓟÎ<ütôþÛg'-÷W˜YeJÏr‰©ª…ñzù1z¹Qº¹Ñ”¼£‚“¢X‹’X˲XËòëÊhëòH벫²p›’Pë¢`Ë¢@›‚Û?»,?k°†¿aªŸaº·y†·}Їm²u‚)Ýͪ10ŽÓ±>ý"aõ]êÎMÒæEìòˤíW©/w/c¶/¢6ŸÇn]Çn‡-îø³ö‚Ù'Üã(Þó˜Î/B–N}眧¶lFþ 4ÊÊfxͲ—cØÂ6h˜7iX4kâ˜Ô.šÖ¯Ùtì;ºOž{âE`à ÿµ—ë<Z}¾qÌE“‚}Ù—¡¼—Që/"מ‡£½ 7k7á«/C× \ÇÏŽáeT;Í\¸qöí&°@Ú·«àp÷¾=Z Þ¶8r™xá¿ð"pñUïuèò¥/jq‰í }áÆ}éµï0I©ÏôOq³’0Oxdü ÿÍtb=E“‚±î ñ‚ óL1»¼û®{A}7IÜ×I[¯ã·_En¿ Ùx¸þÚ÷Ö—÷ÊkþÜ‘õÒcþ•/÷…7Z¡†”?ò Wt㆖Bð}ªàVðmѶÞ0ìY$5L)•ÃhŒfoa3Q¯~³xBt5<¾nØ6«Q5*—ÏѬÞ2h[#·¬[Qg“¾ujצaÜot ¦=†íxr¯×ÈÖ­aé0Gˆ¥=r9ÏäsáÁß¼ ²¡e´4€ ½R§5M5hfë×O‘kÆuªFIÚe= ù}ÊÄâ1íò êùßCÌíÑÈïÑ*è×-y¦ß¥™Ó¡• lgÊÅÕëä’›•Ù½# g!GÈÄÕ¤”R'—ð‡|ÆfCØ_«ËTŒ®RˆªRŒ(‘ É“FÓòdüQwÐÇ^ŒÇ¨5h‚¤sœ8R´”C„„]ˆ¸U€¸%X€§ˆ‰‡¨©·„•Ÿ”mÐ}»)ûH)§ÄÇîi2>hÑÿ<™`|e¹H& YS-©V=¥^“Þ¤ÖHbÀ}µzr­VJfr…j<[ML­ÐL+Ódi$cKˆIåê™å:ùµÖÅ >i¥9úyaä¼`ƒl“¼JN^f hŸ¦“JÊ ÕÍ £¤ëAŸl€yÈŒ Ý´íôPŒ@ê{‚Ò @øhÜ0üáj¡û€hÞ¨c'&£…gîÞ¿ÛÛs·ŸóÖÞëÃÅß»Aw… [ x ànãFvÕrÑt~^ÀY?ÁIøï¨ðs&áüOrÑ¡{²|ˆEòÕáÒ ±Fi÷fsDWKDö™‚—-„·Ý„O ß'üŒÍÿ9Gà7\‘?¬AÌ/þ·Ñ¿ïŠþcWøÿíûÛDü‡øÿw‹¨òó+ÿÏÇùÿ{˜ïgC„ÏGø1JøÕáwlŸçþÌBAw¤þ¾óàÏ[RÚ|ô»åG¿šüc–Ôw†%^w‹5IðªN–(<ËR­§)% bÉù1äüXjAœQq¼yI‚Ey‚MyœUeœmUŒ X@E”My„mY¸mQ˜uqua ]®¿}¶?VBÿLÆ>Ø*€‡m’E‚I²›e‰³?;¬a/bê*–üKß¾N\‘¸õ"qû:a,à*fó<|õ°ŸÜµ[5ïCˆŸÍ5Oë×,˜B¶Þ¦2—L·í{OÜ&.¼ØXWÔÃÿ‹{¸ä¼ Ûþ?‡wóŸ‡ò4pÞ,Œ €goÂÖÑÔE¬/Þùóĉuì8 ä‡ä‡tíµpꂺÀíÙ £Æ;î,àÒë`Þ›°Ô Îu¾tŸ¿p™?wæ<÷\Üz:Ô¡žE»ç/b+n'i™$e“*õ”!î*â$a/ŠÖã éB¦iÂÖéÂöcf…Ïãæ^&¬¾IØù(îà]ÄΛà pŸCÖÞù-?w½ra¿ðZþƒð“k¨Áû,žþ 3WÖ™ó4šf5 ô^Ök™Qª˜S¯Y§¶£•\ŒÿhO¦*쯴oC¬nÞ»eÒÉÑbÿgUË7ô[€óðƒ;&϶{7 ºá üßÐo[ÖiDü·Þ1í_3èØ³èÇ;yâü_ÔdΩUàü‡`S¿cܰnÚ XÞ3ïÙ¢6ÿçä˸ÊÌUú-ýVp`øžãØ‚EkõãðÂN j¡¨ÿšSûEàÔ©çĉÛÔ…+û2«aô™÷¡%Çqô‹˜t­PÛ!Uá¡Yf+Fh¡Á¨‹GFÇõtf´j¦´*GÕË” ûóáf–RÏ5kþóLÛ š( ‹úpÕ­çY:µ“hL‹R äïU)x¦œß¯R<¡]…9Bêö‰µ}Ð)&—T ‹ÑÌ_…”™„™¸FÅdø§øwkåöêä£!§h"$£Q‘Ö¬œ üoV¦µméøhð‚ÕÄ¥˜*ùH|³P±Lp¡LP™Rhî¿ì'¾Ù²~ 4i_|:ý±wìC§HIû`Që@Q+_QKoÔößÒGÒÚ_ÒøúàiÔgà?ã‰7À,ø_ ŠŠÿ²á¥ò‘U*q5Äd¸©†/@L®#¥ÿËÑ’tbFjVS+£\“VFŒ+W‹«$¦Viå´Û”7:§Õx3Êü­ÊýŸVúºø™Zšeùdø¡ÚNV9=P'=¢}½Û8ã?#XY@õ½ q! 0J4Æ-ðrgÈ|ŒÞ[À—ð¿`øåÑ­;þÉ¿O ¾ÔmR'J”#:,üáZúYÌ;ðøÿ_ùOÅùŸäf˜èjäLMtB?ÀÉEøŸì¦“á¥çO¬‘oˆ‘nOzÄJZ,ݬ9®¿÷¢ƒÿã~ÂwG ŸMþ¿Zø-OøëâÛ–D{øwÅþ¹'‚wþüû¶ø_6DPýgU~>ŸàûÙßO~2ÀÿÓ~þŸ ~>Løõ$ßïÙ‚x!èoëbÞûÓ†äV¥~ÕúÅœÎÿ7=ÇÍ’ËÕpþ7¦Üò?/–\gP”`RšhQ–dU™lS™`SoÃŒ³¹³€’›¢0«’`›¢ ûÿ§9¶™–A¦&™¾–é^vt/ÄÿD_Sº§E¦ã°oázøÀaûyÜòËĵIk¯hÛ7)[× ›/¶_Äï\D¬]E¬¼ŒÙ¸‰ÝÀ7 aH®ã-Î<çœgö¦@;vh šâm?0K­[¶h_6o[±hGÕ§1Ô´ÛÀƒµñç¾ \Åø¿„¹þ"låBØ |qâm4¢Ñ›üÇ» <9qžxáÃyÄ{ÈEMû}篽–®ÜO‘œ{³yvU2ÑtQ'ÔT €o‰æ?JØ£Aâ–‰bÉb–‰‚&)‚¦ !+¿eù“Àý ¡›DÞÛÄ·ñ{¼_!ˆ÷QÈÊÇk7ž §N¬çœ´Î ¾pá¹€W~°ygl| (Z'ue;LžØOì[ íA”®ß1«RÅV®\Òn¸Ý–oÑ‹š6¶C„ Ú2êþïY<[Ò©›P,šV*þ¯SZ!Ø4D‘?ðŒøpIõÛÔ6àÿ¶é³ý6xÈö|’Wt–´j0þ3· ;÷MŸÁG¯RÚàM6°ˆÿú­ëÚM…ràÿŠzݹy›¼ë84N.+õ.~ä–.l2¤›€¿ðÿ þqÂÈü½„óur¤F;èe! ›pk® œÿ º‡!ÍÍ(ÅÕ0Ùsì0~ R€w4³¬8H…!Ûšð°‡þ`6[p¹Dl¯Fô¢ùÞÛþO†øþk‚Â/ø¿XüýŠpûï;ÿÜÿ'XÀ¾è?w%AÿØ‘þÿϲÐï8ü¿d~6JòöŒÿ‡=Ÿuó}ÖCøq/J¾˜ú­üOäX‰ß¯ˆ±tñæÁŽJ¾é•/Ð 1Ï 2ƒ\ ÓÇŽácŸèmšèkÌð±H·µouIæ5íúO…ΞFÌŸG->OX¹N\½Ž_»Žào¼ˆ^µù"rÈȇþèD„è‹×Á+¯ÃÖo‚Ö ˜‡,\àÄufÓvxÍ ÍòX³î…ÿgZvíúwlûvlöí‡Qg~lª#øèË»ö_~´ŒÚ¾…¬ÿAü×ñÛ—áËG/B pÌ»ä‚G\`}áð_@8ÅøOœ§®|¯ý¹/Pˆ7ÔoøfÛš®=g_û-¾[}°„a‘Ì£ðÛuä6Ê2ª*¼@ræÇ Y&ŠÛÒ8¢Aغ0]Ì&ùžEŠ€yê=Kš€9]ÀzÖ¡úû޾ý.i,àMäÖë°•·‘ˆÿ¯|¹hô°;ê ÷7¾ËøÖSÈVà _¸¡•h~*áôé$Z5Ø5íߢvΫ1§Ë95p‰ˆ: 1{Aî€óR€¹°€2…(`>â¹JbµrX@­zJ 7 &õ„FuZƒFzƒffFS-¡F%¼©˜/®ÒJ|fŸßd‘’«êÕ`˜8ê\Üá“ZçWíÍôŠ©ö-ñwÍõ3É &gk¤©3µzh“O95P'5þHÁ…W~nõ>þ¿«ÿÜÅÿò·œÿwÅŸ)ï¼Çû‡.€oþÿ ÿcœo-øÿÞô?,áØźPAðzœÿižÆ “Twcš‹Q²‹a‚ õnd¼›̓”ë¯Y¢\ý¤;Ij0M‚“+°^.t\/ò¢]èëýŸŽñAðÿsá׋¿]üÓšÈ_6Å!ÚÿÇŽÿ‹¢ÎŸÛbÿØùëšðŸx÷~;Çÿ‹q¾Ÿ ~ØÃ÷ýþïµ"}¿ï|?éø|Xèד„ßÌðÿ~^ðw‹‚¿ç ýnY øÿùüýMK}{Dâõ3‰£–ˆÿEò½Yª-tÕŠji2¥4™Zžb\I7«Jµd¦ZÕ¥ÚÖÑlRlê“­ë-kÁâ,+cÌË#ÍËÂn- (Èõ‚1Ï 2Ï °Éð¶Móøß4ÑÇ ÙÓ8ËѾÒ6dܯtË{bÇobÛw|ÃgxÓwd'`ü0xæ4œsÆ…8àÿ<|í2A˜êÇ9ð™ú-\ònBVo‚V€ºxqP¼ç8±f5°lÖ½nÕ·aÑ ™>:¸dÙ»k;„æÚ£óYøqü, ȶ_¡é*7ÑWÑk‘+Gþ ;ž3‡¾àÿUðò%$XGPtvØo uZðFÇÁаx×i|â<~ŽmõG#ñ9bˆÿV»Öƒ‡6ÃÇv£Ï]g®—€ÿçžl¿ñFÍ'ާ®ã[O{:U™B !ç$´ø›üÀ>Nš†Í‚I·§‹ ýŸ4Sº Y"Á¸^-ò$rì5mýmÿ£¤ÃëˆÕá˯£xïWßø/Ã;ã…ýoÞ Ï¥çî ÈkœØçÎq 6AG“¿@ó‘õ(À×Û±@¬aÉ—rˆÕ‹¤zø×;q!þë5su¥‡V}+”& ÷”BÑ:¥RžvÚ^+n{X—Î rëªNÓ‘I÷±õð¾y?<¾mܽ¬ƒÊ>À<þg«”A ñÿ–A˜Ë–Q7|(šón>°MnçªÖÌÊ–ðÔj¶ôZáËÔFžIý°fV¥d`é}ŸlA§!ƒÌç~¬c·Ñ3—ñK—©K§©‹}“^øàA§ÖCûà,h5¹k• )LWm@]7Då,°3ðF£z‚X6¬R4€Á"€? žkÔ´bÚ:§ß€Â~J=ØÎ–R¼ìüG“•óˆÅÚÓd& UŠ€Õ-Ö.ÂÖ Gô±ã`ZyøPøýÒArA1 ²€lQ¢}œü€ýNRÖ3½¼^r>¾â€µl\™Ldñã°Â‡AÀl@pD‰lx™bd©BD‰<ªÛ—(F+DæË…åɆÂ5]Ö, ù‰g¢´Gìc·È‡Ž!ÿá ü•´‹ºÿ4æ¾C‚¤sв€é@ZÀêÿŲá励¨ÈÁ¿bÜW(Åàù1¹M;µI‹Ñ ™Q§•QKB“ÏTKªT‹/¯Ö¡uYÕ馕*'4hgµÙä·ÙÔÛ唘ÇåÛ—ùúXgø‘²‚ÕÓƒ‰8ÿðƒô1þkÓÀ(©T#Ѐñÿdž¯qª· ˆîe z¿È0ÙÝ(ÉÍßÕ··óÃíwpwøëßùŠu ‚î²€/Sêùï^íDM÷2AànšêfFs3Mr3ºí,äAMôÐcøhçjV‡+µÄI÷Ñ$Ç3$x„í*¡ó&‘7]÷¾=tíùg~9Ï÷žÀVÿg]ø¯›¢ÝþÛ–ð?·Eþ¹# äý}CøÏ+÷þÁFk¾?êåÿ^;ßwšø?©ãýg#ßw›Á~Ò+ôóaÂ/Ç _LóS 3K"_,Jþ’óà3ÖýO†%_uKâüŸ*VèÏQídkLº~U*µ:Õ¨&ͬ6ݼ>Ͳ1ͪ)Õ²9Õ²‰nјl^ŸhZ›`ÆŒ3©Š1©Š4«·( ±* ±,±Ì6Í 2Íñ·Ìò±Éôµ¡ùš¡ž¨núY.öE6^Ã~yÛØÌ¯U·ažKß²kïºçà¶ïè¾ßäiç,"ð•ëÐõ3î¡×ì©ïÜUÐâ‘ßü'{Çuj‚=¯9Ô·9poÑ <C °n9°e9Ú4ï_¤´lš÷=Ã÷ƒŽÆñNȨ›çÊò æ¾[à"bí2rý4ˆ»ç=»ï= ^ð?öš;÷¹%ƒÃ/§ãcP]Èg³€YüXÀM 5ˆ·Íß1ë…èôÂ{îMÈ rÏÙW¾‹x—žc‡±—±eËÖÚGq©|ÎtaÇDQÛx ëX)+œÿ4࿘MØ*EÐ4õž)MÀ˜Æo¹àRw“Ì{´u“°r¥ÈÕ‹PΛ€•W~Èž{pÎ]f^yqA¯½y×nhWw@¹pL£|Z·fŽZ·@­ç4.5Ïê¡>hê´~ðÈÏ&×Í4Në×Mk4J»•óÕK¦ÈÕ,½êQÍÒQRÙ(©„¦À«fõ©ç z5rŸ©çÀÍέ jÃ9]jiíê©mD:À1?ÀÂ~ðw;ø×È'ÿËe£˜Jñµ*‰5¢@Uʱ5ÄÄ*•¸JeàsL‰bL¡\dl\³äÓeýiÒ>( xà)åvß!ì¾}胧p “°‹”´–|+é$åLè‘ñÀ’| _&´@:ø%rQŲÄT© D_nÐJ«ÓH­R§UjÐÊ5iåÄ䕸"å¨\9td>:C6¸É8wði}»QY£n~›qe·m]‡]už~Bºo±‡wQ€]v nFˆzÚ{þ#à#!þßÞ¿‡ÿ{½_ÿý·úÿ·œÿ‰®w»pÝ–÷ß×sâ°ó¿¸þe!; =ÎÑàÎ0Q>ôˆ;òG9ꃀÿ™^F˜˜2ÜÍéîfÉn¦‰nèh06ù‘œîC* R¯‰Pèˆ{8œ*>•%¶^L8¨¼jú¨çÞw†?c ü÷,ÿ¿ç þŸe?­ÞÃ$ðç?¯òÿeMà¯k÷@Y¾÷‡þß²ù~5Å÷³¾vñü¿ÉäÿZ9ôõ*·j |¯Uà³ÂOŸa[C翘þ%GìçlÉLJ|kPãÿ£Õê'3%Š£yÄÞLæ JS:¹)M¿1ð9Ë´5©-ô-ͤ3Ý´#ͤ#Õ¤nÜJ3iN6iL4jˆ7®‹5©4«Ž0-3.5. 6Îó7Íó³Îñ·¦û˜$yQÝ©é.6y¶n^´-4ð \´ë3~8u<}0y4sì?wĽ^þyÏùq€ÿÏCVÈ».S[Žã®,lÓþêë°u¼{?d{ŽSø¢ðj7¾fÜ·m9xb?q»ÑÑjhÏfBn4Ñ ƒb#\‡¡RÿuèòóˆuÐEè |ô±ÿx;Ûô‘ç,:#† …Á×ÑìHW6ÚmâÃAýÿý@ç>sx9°€çh8#nà8{–;æ}Vƒ`=¯¸o¹/}ç_øpÀ^zÏŸ:M^ºÍœ»±XäÊ ‰ˆ a÷d!»xQË)ë$qËdqà?MÔ–!a—"lJ6bˆš$ [Iñ§Q¬›„W‰;%ᅧۼ [ÄO" ÍH~³ë4 ÃÛ>@Ø|WE?sE}5Q;P¿0x+à?\ÿx©BýÞ‹WîshÞ–QϾÕ๠ëµ:®uí=wã·ðQÈ*êí6 ï9Œ kˆù3„“DlÅ­Å,R$lé÷’EmÓØÓÄÌ’„ôSE SELéÖ‹NÍ×qÜ’÷Þ%íAüÿ2 §AsjV> ^þÙN\»pþçO§ÏìY3ð÷p„µ¤Æ—ž;͜ڎ™íSŸíëwmšç+€ÿ\R=ÞœgÝ5ꇰà?¯Y‹FqwnRZf•ËÆerØÊÅˤº9•r¶R9¤[úÛÔNÌGê!nßÑmÞ5ìò/“6È­\Í®zõšv튓­P?ËÕªÞÒoÝsA‹ë”ÖMý¦}ƒ®]rךzÄÿKÊUËš5Ë:µ‹dæ¸FnÃÃbQ‡!» I¯m§î«€¹ Ö•Ó̱õð‰å²j×µóÀ°{Ç “«Yü‡àøñ?h…ÜÙW·ž§×üg©–Að?¦ZòL6{T½lš\;oÔ¼`Ô¸hаDmàèÕ°ˆ¥Àÿiíj© nP ˆÚ/שøi•“*ÆÉUüOhWŒi•i–Â?ß1P#¯—˜Ó¡ÄèTNÐÊÖ.'—MP*‡HÅšù£º%ƒZݪ=j™êŒ.4ð¿Y%¹ ;ê…öù`»}ð5_ü@£ |û@LÅÄj°€bµrRjJƒT«FƒAÅJ‘ŠáYrÁ i°€ÄGžñÜâºÆ>vIqO–õH|â–üÄ™.ë ðÏ•A]@AàE¨¹PT‰r4X@‘|¨X!ò \p_$›\$¯)R‹,"Æ¢ó¿Ä”|br†JMÉ+I§ ·Mxì] WgœÕo×>èÚ6ÐØâ‘^æXäëœék˜¨ 䧇èÁ:Xå,@ï=ÿ©wòcþ @`©~·5Ÿö2|LAÿ/þ¿/Q?à¿^̉zJ‰y x§B„Šw2Å9©XÃgƒù¯à‰Ãü߯ßò?ÃÇ0ý.ð4cx𢳠^ú4o¼íy°RcÄ“ž‰ †Ø\¶èN)ᤚð²Eðë=‚ŸßûéÔ½_Î þšÃÿ»ET±ÿí‚Àoçø~3Kø ›ÀýÓ¯Y„ÏGP`lÿ^3á&ß×Jønrׄ«4Âu&áeáuáã þo7þ«ƒÿ'}|ÿ=̇ÎL þŒ%ô“)ñï‹£OòE‡ÄaƒÔZÕ£…¹éåÉ<µ¡<Ò`®Ö`®öPžÎ`žÞPžÞp>y$<–§;ž‹4™"OäRƲÉ#™ºý™Úi:ýtò³$J{¹)Ž\M© 3¨2Î÷5ÌðA:’Ý .æ™ö…öÞlË&®CÏšÓð®'ëÐkfßsêÄuätÈ9‚ÜwáÈé à¶x¹ô¾Ì&€ÿ‹¤†­z¬„Œf…Ò´¨];£VÎV¯W.î•ÉV)šÖ­ÁöŒ5 ý:€?[³‚£]=¥U ‚_ÿÅš<” ª—@ä?¦[=I©Ó«Ó.‡àZ¯š¥[1J*ø¿W5 ÔOÌÖÊÓ)×-!k—€ú5 ðA`€ž‘2ût²ÛÕèµ21L™èz…x>Dûp h!2º´³A­êxËè5z“:£ ;>\«œ\£”BÝ„ˆôzõT`~¥bnp-U‰8C.ëOâ›üÄ3IÚ\ þ±KÜ#çø‡Î‰]“¤Ñ4ù¤G®™Ò~Ù2¨ù6~ì”'Ö” äÃoí@) S‰)UH)…¼ƒ]EŠeêѪuÓKIŒ¤lbh†š7CÙ®àþ’ðвÄÇîÉO‚³´Â+l£k¼C+ÜóüMÓÈé!dF(™ªG&ƒÐæŸ Ý´ ]°À~J€>®÷g~ÿi~Tº/õ6æÇw~büæã€Þ—€L>¬ÿàþÛoN œÿÑöH¸ Ü {¾[öýðñ÷«À.Ô»=B¸ D:SA龨+5ÃË0ÍÓÉ 2JºN¶ŸVn±4Xµ6B¡3^z8åþl¦87_t¿ŒpÆ$¼jæÿFà÷†Û·ðÍJ»"¾›lsá$‰pœH8KA.ð"‹ð®ÿ›L§-üŸu üd€€ÎLüdLð³qÑï ‰½WøÔ ¹Yõ`©ô §H~&_yº8•¯:Q@œ,TÇ5]¨Á.Ôœ-TŸ+Ò˜/¼ÕBi¶@s&O²†Éâx:q4UkˆFz–¬Ý¯Ó¥[F) ÐÍõÑax餸QRœÓímòŸº°lj¹Î]ënˆÿGÞsžÓG>3@ü:º´ë;·ã3{¼pɽ‰ã½ŽÚºD:ÿЃ½ã8ºí0ràÁV_`S]€ÿgÙ#ûiHv,Çv­Æ÷mñö­Fw̶Íú7Í{ÑNr»a4Ñc­ø¢ùŒ/±Ý>ö£¶ŸØ\H|d0ÀÿðéÄ!ÖK陋¿3²ƒ §Û#T` e, o‚F[Œ1,­^xröŒûöÌúNÑ@ÞÉsOÄ{î³ø&`íÆ›wí ¦ÀY·ëjQHÌrÍuò'ˆXÆ [ ÓÁ÷­è,h’&4q#šˆi†¨m*Ÿ×±õë´oÑ_Gm€ÞEn|±ñ6lLòøž'öSÀ|àÿ™íxÁ©ÝèØnüÄYÄÿ—¬c³¡cãj÷Šzý¢rõœb9GµjI«nA«n•Úü_$Õã'vˆ¨³An†³dó Œ¤¯cô^Óm†8à¿¥Ó²B¬å)Uí÷P:ÐÎ#Voh7,©V.©–sÕ*@l¹ЊFõ.¥yG¿ÞâüM½¦}Ö-ݦM­æU•ú¹òŲURõŠ~ͤf^Ãð!‡ü{¶e¢ÎÛNÍϽќåΜ+ûéS‹Tö7è> víëwÂw€/üßÔïìÿ—t›xä®^:z†þ“Ê%£Š…ÿ£"?VØþÏb‹¼sºµ Ê rˆÿñm?p?B,E{>uªg¨õ,jýµfB·r\§bR·|J§|‚„V~!þïUÉéSËÒ¼…ÿ˜Nñ¨v<ÖЯ–7 ž v0HÊþ÷jf´+§4)&ƒÐi/ùD|¢ý6ô.í\P 1à÷Ú¹ÍÄôzÕÔFbnêTèp¡F ŠÉxØä¡{¤rµ¸"ÅH 7n)½¹ÅJ9Ç=p‰{à”ðÈA¼”ý¡ã‰/¼,MÆnðûLÙ€ô'~ðãyJáùʸ T"A…б…J‘…Ê!…ÊA*áù*Qyª±yêÑ©Š^éÊž H+² !ÊéJ>ÑŠѪVIæ9®…Á¦Y!ä´í´0 =D¥ëcü×Åù¢ü[ýÇð6ðû·ú¶ø{—¼ç¿)~ø}ýç–ü·Y¶È‹a<&üÌï]uèC¡ÐeŸ/›aSÃîŠÿ‘Î|óÚÿãkéÞ™^ÔJž¿nA fY¨FE˜j]”R{¼Ü0Mz:]r)Od½Hø¸’pYOxÛÊÿ-ˆÿ~4"ø³IŸOñƒ€Õ?áûÉßø>{Æ÷þvþ«SàûüŸ¶¡ÀØþõ2¾7ù„éü)‚ûQ„pÂná ¹À9¦ðqá?îý ãÞzù:LøéÿGïý`ä–ÿ/Û%N$v™÷×*òJŸ,Ë.+€àš/V-”(.•(®”)¯–*‚Ö@eJke*«¥*ËÅJs%òó…òó9 s™ŠÓ™*`tõ®ÍöRm(©$@+Ã[‹æ¦›âbúÔ"ËÁnÐ*Ö¥aÉ­{Í}l×cvßc²€#ÖžïÄIèüY$ï$lù(„{²x±x³ø*r}À>zNCð¿ë4¶ç6¹ï6}ŒÞ>Khæ—ÛÜ1„µö,¸æ“»V£f}«Æ= uÓ4Л ¡ûµÿâ‹€%´o'„wæÇ9ö˜>õbƒ/àÃßqøïÙŽîÛŽÚ£=óN,ìØÔ¹#ëÔ µ÷Áz¡)è¡èüûæBHðÎoBWáza;üßµè?´9ug=÷Ÿ‡Ï½ X~¸þÆoõ¥7ê}éÃZ4¯¯{U äE±Kµ21K‘´ I™'IÑ$ÍR„MÒŬ æuòÑ×Ðv¿–°óqÂÞGQ›Ho‚×n|¹è ]gø`§6“‡£–£Ç6c C«‘#ëÑ Ö©íø±Åð¹ùȱQïšzÂRÕ¼rå¬rÅ<ð/C´Om‡\ñ_µrF± @ Á<„ýS2¹ÿC<¿®S·¦]¿©Û²®Ý´­ÛºAjÂù¿¥Q·£×B5|­ºy…bŽ|Ñ’rWµ”£P0ý${Y­øZ'Õ¯hÔÀuO¿iK»q]³aE¥f^¶~„GªàéW(ӊ﹋:§Ìµ’/|Ï]' »yé4weË:1>2î=4èíQ:ÖHëz-«º-\­†9õþ! Ø0è€_„£ÅìüAÿIÕÒYÔÃmN¿aš\ b“ÑŽ^ðZ½b’T<YÀ¸zü ‚cØ´hÖ6k؈ÖZ·dÒ8C®TÊéSÍïSÍ ÂOè•NQÊáŠÃ_Ö¼M ;èUÍìÓÊî&¦÷¨g´ªÐëdãÛÔCúEýúÅíšYm™@þfµ4 ‡Vv)ÔAÊi…ÇÕ3@MjiµÊ4À>X@µ$ɵj©@"Á?¨VV¡W¢•/–-œõ$0MÚ7å¡g¼” (íüDÁ?Áÿ¡3rûnI=Á#hÒ>to†œoº‚†b\3ƒ3‚²þ©2~ir™òrépU Ȇ€e¤<öMzì•$ãšðÄ>YΑ.ç‘"íŸ"œ*”¦ìÇPóˆ£X¦ZÙäzZd„¨3BTSC5áZ˜=Ä, 5Dª—ª— ¢¤2 ¾RüÇ‹?_Yüeø™€>äÿûЗüÇê?ÿ;ÿcÿU·üÿ×Ó^±ÿÞÈ™ãBÁ[=€¢]õ±“¿ˆÿÑ®èXz€X@†~¶/5Ï—\ [¢ÁŒPmŠSk‹WèI’J}2ù`1Wt½èÞn©àU-áU áãNÁo?ø´Ÿÿƒ|?æûñ?è³Aþöò¯“ÿ;­üÿÙÄÿIƒà'u߬üSàã*w¥|o PØEÙ­~²Wõd¯úñAÕãƒJt¿[)³].½^ùh½üñF±ôFÌr¾Ü|žâT¦âHªÊ@Šz[ ±&\#?@#ÃK›á¦Ow4Èp4ë¶£±¼*};–=×Ü&7œ§¶œÇv<Çw¼Çvý'CæÏ¢V.b6ŽÂ–öƒØ‡!ì‹îeÐÚ ê;wä5”>óž=÷™ÃWiOñª‹ï"XÀ‰ë,êxé4{ìÈ>r˜9|:µg=†úÀ˜ö®™ >›æýÛ–ýûö#¨†ï5ûÜwþœÅoÞíÄéå> Ù:$å8üß±ÚµƽÌï« !ô1¶—øêÆFÂü¹gžh/è6¥ýEŸ,ü*tåMøÚG>¼3ûIàÿžÍà‘ãØ±ë$¸^®yuºt›9s›8tž¦T0%"Sï9¤ ;ÐDmEÌÅL“$M“%MS$Ìibæ ËL{ÁrÞ¶æã¤Õÿ |-~÷]ÌÖ, x¾~W“‚=±<°Ú5í‡ë‘ÕÈ¡å0\Oí&àæÐløn6¸£Ó¶¤Â\PªœS©þCüŸØ…ë¢fíœZÕŒ\É¢Zå*©"ùÉÇÙ åÒeÍjxdC§Á?Ð{XÇ•¯XU©‚°[¯yU½4+[0-»¨P¸¤X4/—Ï–Î^U+ßÑmÜ$Õ­i0WˆHkZÕëhÔq+gåÁ,i•.PŠÚe#rìŠÄœrùŸn:4^zœ;ŒCFsm?sn5vj6æ…ÿ`7ëZ;”ŽUæõZà?ÄÿËzÍ+”&ž^‹X>¦T4¥V6¡R7ÿE}Ôö…ýä:ˆí'´*Ñ:¯^í”F[›9‹íù™z¿€N6s¨3”ºE“Ö%Ó–9ƒú9ÃZà?›R=¤œûL9wP½h\§ŒE©šÑ¯d‘ËÇHECêyjy#@~íÒQR ¸@§ã™JưV>dÏÐhȬn5Ô t€\4L-í$åùÿà Nt:¸oÌþƒàævv¼2 È.ФžÞLÊþù+â+bAX¡>ªP!"O6øÏxìG¶?òJzäžøÐ $i$ ?\i²ž©rþt9ŸTy_†‚_:DìÊ Eº‚7¢·’oЬw¢´( +"¡à¿^”«Îÿ…N®ègùëçK‚tªB5¢€üŠ}4¹!†ÌD†ôlÎCn¾øF±ÐA¥Àyí½›fÂGþ¿Ó‡øÿý~¾ÿê#üWß§=„ïtò}»™ðÍ:þ«?*¿÷¶DèM¡ÐMÐËü{ϳ/!æ§ œ$ D n‡où sÝø—\ù–=Àø6ƒ‘\Ñ„_À,À>¾ßIøq?ßO‡ù4$ðƒaàÿôK¼í¿n;o=®“ØcJìTIìVHn–‰ƒ¶+$w«¤öªÔ>8©{pVÿà¢þáE½ÔyÝýó:tV÷ð´öÁA½ÔQÍýã*©ãò‡{¥Òë%ÒK2s9ò“iŠýIŠ­±jå¡Ä\R†—nª3™á¤_kë?à•¶Ò²8¼áÃZwŸÞr›ÚóžÜ÷›ÜdóüÀÿ‹˜5È 8 à ù¢í@ ;þŸù¢]š¨hƒU€½—> ¨cëì‘ó Þ#bË|hÃtôžÿƒh¾íÐÁÓÑs·éWþKùãox ™ˆËä‘Ë$Ú)ä6{`?¾/¶†÷AB½”gÏÜ9h€Î=n§Œ¡¹0ذ0ܼÄüúaÛB–¿½õà7>\p]ëÁ-«þ]ÛAt*̓ýQÐÊ+_îµçüµçÜ©ÓıóèžÃЩ¼T*(SÈ•!lGµL@ã`LR$-“%ÐD†¸uš°%`Z%í>ñ ¥_OØ}½ñ6e¯CVn—ÜfÏ ˜࣭þ¦ýðŸZžÛŒ££²`æC§#æCÔîebðŸ£T´þ/c[hжR=‡ˆJCó*å«ÿ'e?Lç(£% &XÀ¦v3hM£ø¿$W¾¢P¾¡U¿£ Ô®ªWsd fg-È€ædrgŸäÿ75«WT+VÕ*׈U+*U\µ2ÄÍŽLÑäý,¶\G£`‚˜Z-áQ d—F0ïVK:óºöb]:L¾t˜yn=qf6|bÜwdس«×¹Ã¶N ÊAtZ¸Kê ËÚMð´°ŽCåD´à;®\<¢P.°@i@ý°úp~\ñ_«^ Yp~J— a? [X 6âî°bѾfÕÉ  Ö@ð?©Y2¤’=D,™Ð®`ëײ©Ì)½ €ÿˆfÁzÁ¤n9‹\ üïQÊj“IíRLPÏÒÌ{¦–Ý­’ êÓÌÐ-ê%åw¢6¡Ymêû=:}º…ýzE €?<…g @~Åà31Œâÿ5ª)UJ‰w[€*•ãË”ãÊ”Ñ@|x¶LPÆcÆcÌ<À’{$?ñÄE“õNŘÀ§)úÑ•üS•ýhŠ> r±O\ãd\b¤b¤]à®Ñ"î? —´÷“´´ »oûÀ%QÚ+YÞ'IÙ+IÕ#IÝ=YÍ›F `h†3H!)ÏtKç\çüP³ìƒŒPÍÌHbF´jz´:#B‹Nf„QÓ(iáºaºé!äÔJjðmÃFõV_Âßà®òü#aÁÿü7ûÿInFÀ\ïëÿضÿ»åà˾,þ`ä¿Ã>.À>(Ú ðÇ÷1î”ýhwj¤+%3Ä03È ?ZLf†é4Eªw'( ÒäÆÓÏdI-äß_-ß.>¬¼ªxÝ"ðÿz7á“>þïôó}·ï{} ÿw»Ÿ´¾ÑHø˜É÷¦Làe¡àuŽÐe†ðCø”.rœ"txo/Vp7Bp3DpÕWpÅChÑI˜mË϶åã8–\ +¾ð'Š]ç>*øv£Àÿ< ñ¿ð§C⟠H~­Gìu‡èu›ÈE³èi½èq­èAå½½JÁýª{‡Lá£ZxPü¼QüªIüE³øM³ÄM‹èU«øëÖû¯Ú¤nZï_6‹_7J¾¬—¸fJžUJî•I­•Üç>˜Íz4J{Ò“¨X©R¬‘ë§“æFb¸jç™[Ö9M•-‡nÏî,îûÌøOïùŽ…L…r°`íeÂöËÄ­ëØÕ‹¥cÿ¹}Ï©SßÙKȼبPã·ˆV~±¢˜Â¹ÿ<¾ýæe0ïÌsþÄ}·´)ÔztÛb\®  ³>ƒ‹-?÷š½ò‡øöÌ›}ŽÍö=Â,?0µg;Šôtr×~®‡.3ðαû,]ù¢NðÈÝA`Ô/Û„_ñòÇ¡Ûï‚Ö®<8§N¬}ÛáMóÞ=Ë“§£¯¼9ù£îm 4³À ™ä&ýy¥bi|öi"6É"X/hqË$1kš„mš„]Ø$GšÁg>iZø.iùôÝo¦¼‹Û €¯8ÝørÑA3¬1±ÍJ T6€°ùÒfbÏr,àÌz øñÿ¡AϪFW•É–/V*CõŒÿ+X?TR¬à(–rÕªUÊÆfŽJ1fåóá’‚%bÞ[ÚÍêõ›Äzž\ù²|ÎÿuÍ:Àû¼\!ÄüKò… ²ùsÒ9p]S--+•­ªT¬©V•üת^#VÌ>ΔÊà(åO«dv<+²Ï½g•A°âÙÕ]Î\»Ï¼pd½†, +[müáSÖ‰5›¤¦]Ývp1®Z=XÀªv+XÀV¥„­\8¤\8¬R4ªR<®V á="< öšÓoÂOëÖLëÖªWŒ¨”N¨W²Iµ£ZUÚL–^›ÜÀ!£#`àK†Íkæ\£¦YýZд^å¸VɈZî°jÎ8©’¥W3C©Áà_2ªU OMJ§)Up߯šÛ§’ÓWµì^Õ¬åôg*™ðO< ™üïÕÈí$fuiæ RP§¸ní|¸öb7íÄÌfÅT|-øß¤Ê#hTe4ÀÕàk¾ø±Übr­zR‰üGÇ"€ÿ¹r!`iÒ¾©¼S¥½hO¼è2Þ€}\ÛÓä|e½@ r^ñ²î€úðGOCØB¤lƒ¤l‚ï#¡Vr"f~¢æVl"eœ’½3T‚2UCÓTƒèÄ€ ¿$M_švƒÂ0H7÷ÉtrÎ °É°È‰BÍdrãu³cµÒ¢ˆü§EêdD’ÓÃ)adDþPRz¨#”œL¥eÝöüyò Ûöiø•ÍŸ_áÿ‡Á?Îÿ÷[€ŒÁp¸;ä÷~Ãÿ¿ì º«ýk# ;øãäu%ð£ÝtcÜüºèƒ?ÆJ¤«^V¨Qn°QQ¨AUµ)J·+Nm&?•ñ„“û`©@b£Tl¿Zì´Vèy?êóßÍÿÍ^Â'|ßøtÿŸöþ³“ð­„ë o« 7Å„ËÂq*á Q`'V`+‚o5Œ%˜À ,ù= Wû)ߌµÀ¤¹À¨1aÜ”oÒ‚À¶#pÝ[‚'±Wÿ?iàÿ ÿ¿;(öí~ñ¯÷нë}Ó%ú¢]øªEè¢Qè”):©<«ºl}Þ"zÓ*þª]ìm‡Ø×:‘>îA×.ñ»$>ê’xÓ)ñ®Mü]³øÛz±k¦èI%¸›èr¡('G|’q¿?Y¦!Z±,L-?P3ÓK3ÝC#ÛÞ°ØÞ±Ë‡ÁêX šÚ^Ü÷ŸßóÚñÙœ< a….œE¬^D­ŸG`ù£xÏ#¸§þsó×!¼K¿y,´^}ŽÁÿÔw×™zÁUÐâ¥/-xpðDàðéô¾ÍäžõÄ¾ÍøžåȦIïªqÏšI÷†Ù³]ë¼_-]Bfü÷f_xÏ{²]§ðÉYGά}‡) ÿDï“ûðˆçÔgñÜ Ÿræµpä6{èÂ:qGU Ð¥÷Üsßùþ‹oBV^/_ùp®ý^‡l¼ Þ€g!,Îï[ îš÷٠ؼòœ¸ñä@p…¶-ž»Î­Zuv+¥ {dà)€°Y¼°U‚ˆu’ˆ ]Ü"MÌ8ç¾Eši±”ûžÿ7;ßHÞ‡,øÿ&jýmÄú«àeø¯°³è„ýä©í8ðߨïÌr´o5|d=zf7÷çCÀÒu­¦õ:ˆó§Jø\FTÒk^Ô¬…øø?+_¼¨RÌ{6,IŸ‘ÍW*,`N¡~ð Á?ðŸ+[üß$5lëÀ#5Ë*åÿÏ>Füç<Ée?Êš—ÎYV(ZQ,æ)–®(—ÃŒ€§Z±¢^ÁS.™y˜9õ }N1oLŽÎv/¾g“F0lP 9òé0î8yýtòÚz‡ÿ¹}K³~M¹¡^»¥Ù¸¦Þ°¢Þ¸¦Ù¼¦…²Žjõ´Bñ¤\Þ„lö3ùÜA¥‚ rÀþœní¬N K³’öü4áþ“$æ°ZÙ˜Z9ðB­bX£b^FmšÓoþ/ê7.µ®š´ƒ °u«Y¤Š)­Ò1"xJÞ˜zþ´Né„vÕ¤Ú:N*ŸÔ.céVà냪yƒj…#%cØ!À>ðP#î‡5‹°}¡…}š½Z…Ï4 :ˆ9=Z½ÚEÿ—¯³ŒŠ3ËúýSŠKpw§ ‡¸‡àîRU¸Eánw«¢ (\!!@ âI[Ò6Ý=í3ÝýÎL¼c÷~¹ûÔCèL¿÷Þµþë¬SBQðá÷ßûÈÞýv¥½6Åífy͆٭†9í&¼¾4t ðo0JÇ·€¯™¥7Zd6Zeü+M Z‹d<þÇOì”ÆÆp "ðKal½à,½ D~€ªŽ’¦O¢ÖÕx+ø5áP¥S žò ç){(zø+¸ÃCˆù£4ÎÆë^Ê´ g[Få™GqM#¹&Ñ\³˜<ëxŽƒMKÈuŽãxDœ )ôó.Š>‘Ïrä¤Y²ã-€üy [vÈ.IϧeFÙæÆØ±£ms£­ßðŸÁF„ðÿ?,àMÙÏ_]þÊñÀõ6ÿßÞü=âÿ‘®ÉJ=°þ‡Þ¾ ððû æU`ÿm%ø:$ú9"ÉøâÆ¸F»–Ÿ\‹w¾ÁtìO¶àgH¹Z‹¥ÇÖ*T6ëP8ý¤Uñvê« ûGHŸ’?%1LþÖ#‹ü›±5Øã2ì»›†­&`‹‘ØL6å‹ ½1Á%ŒãŸÃÆÏ`c'°lØ¢cŽØ°6â‚{aÓ—°›AÄ{qJ{yd5’>oǾéþ¾"~9LùbHþ“A…û•ÞïU xÞ)ÿäõQ ùaùà:ùáu¹Ç- €}„÷nå÷z”_÷*Ô§ú°Wñu{•_õ(½êSÝ­úº]éýf…çŠ{õòUòË%rsòâ•ÁtÍ–D½ªX³âHë¼ dùW]8§¼®]Œö¯ Ù€ð>b~+Tr/\t7 Õ‚¸·°Ÿ°º¹p7tj+|z7RúŒ±ò8fØ.kΈ–Vöñ³:Ó2ò£ÖZ; ˜Èêö@”.€Ÿ †®ô¬ºõÎÒZ¥ö×—Ý:·Ïíø‰ÿ( @ÝÑõ®Tç|»:±uI äþ# ¸(ÞòžÚ˜þï…, 1p2ÔG UøÙ•mÀ¿ŒZ~7ææÃ Ô œ,àIÈ„åÏæö. îÞðìÛ@­Ò_•<˜A¥;Qц¹=ïÙûÞÂ)—ºF­XŽÂù,¥SiJ'ÿL¹S`d(:ç(:ç)Oüžå/R?HÙá)¾¦#óš©Ýó‚ƒK’ƒ‹â»îˆÿ'Gî{ mŸAÁ` Àÿ½#»îk¶­ÆÏ™Õ‰ôËðBèÚ—ÝõËz´"dT üÇOòðÕ³‡•ÓÅ:\€ÿ¤~±D·‡›VM˦õ«f Àÿ%=ÿ¯[7-™VÍ–Mjö!ì‡Q¢–’jæÍhç/è•.ê—ÍjÍë–̕ϙ”ÍŠÕÙµl‰^Þ ³‚p¾„z2£ñÝsŸÄ¿trï‚èÁ©Ñƒ#´Î»Ž·ío€Å,›Ö®[5®Y6ÍTÏÔ.™ÿÛÌ›&«€ÿ"]._“=`T4lZ*²©ÛÖâY€Ä®nʱaÆåÀȤlܺVb{ ,`بtĦFäØ8A¿ŽÇÿ Îm .­àbë¡u%ϼ‘ß¼Xl[9éX5áP)ƒ d»ê Zí$½\Áß´a̪¼Ï8¯×8gW*¤UŽ9”üûL¸CÖ%<‡Jà·EÁ€m)`5Ž·)î´È?”·Ã4Ôe•‡× Â÷…Û¬8­là?¤h·×(©L/¾D?˜ü¯0I(7bT˜2*͘0–ÅD ›¹¹úa¹ú!™ºè^p’ÆU ?KÝÕŠV½¦t6XáHÖ2À+PÉÈØ÷“wÁÃ(­sÉfþY¶a9ö9V±9fQã𣈳¸2›¤2Zz‰Kf‘{&Ç=1ïDx©OPEô¥ÂDÇœƒ¬ ÍÂÓ’hÍa8pرtˆüóâhy±¶œëÜh+°È²£²¢Ý²¢t†/éG±üaްÏð§ò_f Âhç’X§ÊxûkL«Ž4ÓÁL}Gk®ðØí µíåƒùg-”÷:Hõ>!ü–Güì@æwcrßÉÿ¶Wîóvùš¨ïU‘Ÿ“8ä­òÍhÊ”?‰ž<àEêu#·ÓT;è*ít¥6šü GJ‹=©Õ–ÜjKm³•o·‘o·%õÒ°Q/lâÚ ÞN¤pÐ]°HŸ·¾êDðí áÛa XÀçƒ ŸôËÔ+ÿº›úA'ñ½vì6ìvì¥l|¿{Õ}Ø‹}Ü}:Hütü›!ÊgÃTÐoF@dЧäOFˆ > ¿ßMyÒ ·SE½]L^âR¤9ò¼Tå–Fs¼~u”IAˆ9'Ð21Ø•yÅ‘{Á«Ç7q)¬y+Bt/rf'vr+A²/]˜Y žÙ}5Ï‹6Ã&¶#¦öbf! x5A>žM?Ýçün^ßöá-Ýïˎ⣶¿²¦í»—Å›çøgƶ/ÖOoœáožÜôœ¶o“Úݸ}btçoï’p÷’àÀoò>íªð¾¿×½«¢ÍËBˆð!Ø8/Ú@W¨¤Y VbAó tôÔ¾Æ Â{è"~M~)üjtÂ'òæ³°%ð…'! 0¶ð$`¢ýýKÂuÞ5—.t5À U­yæ-yá3 㻨W×$ <›’¥°Ryo.õ\&éx¦ÂiÕ#UÙ‹)OOQtÉQ=ž#œC=}/²óUÖÆ»)ëï2o¿ÇØ|/~㽸õƒ@YÊ€)Hö/Mï_˜Ù>.ºã<¸í:ppjtïøØÎ ´pï4oçôè–G?àtR“ºIÝ2‰aÙ¬íµ)«ZtgÊúÚŒiÕ¬qH»pÊ dάT¬ÍUIjfOéä¡õ|­¢%£Úeãú›¦ 0JµJçô*oAnR¿lRa¿P-C¤ž>§Çž8–&RMMkçLjdÎhå,èåK5ræuÁJÊÌ*$Z9Âcé£ɽš‰u*lÒ‰t¢+WîÌúåÖ—aÓûgE÷=Ç øßvmÛ¶kÛ´i…/¼lÞ¸`vmÅêú’Eã„vXÀ¼aÍŠÙ5HI&Œ*yÅ#FÅc&ÅãæeËÊ)›š)ëj©Uí´uüðJÌ«„&åËZ±Uß¼jÌ´‚gY-µoM;6‚fh óÎ\[Wˆ¬Ãþ1³"U™È¦,4fS1bU&ƒ½È¾†oQ¿Nh ¯V™•  Y”ŒØVðiµB·Æ1z-á#æÛ”õX¤|”V3ìPÕkU‚ºXv[v[çwYq;m¸Ývøe±VÓ´ë&©­–™-–Ùõ¦iµ¦©U¦)¥†Ì:iÈ(5f`Rd†Nf…qôƒØº9z~Yú~º>™ú~™†þi†~,+qç¢ÕN‡«œ S>á­|ÜÑÞ5HÁ-Xéx â)…W•=|Õ\ü”éA N *gÙá¥Ì+f±ub‰E,`¿Ü,±Æ2µÎ&«Æ.»Ê)­ìx"÷|@^Ð9nœ[Ë.7Ù2/É’Ë´)`80ì@ù‰¶ä1ì9‰väÄÛfÇÙåÈVÐ’;Ê%'ÒùþãÅ?)û|$··•ì•ä‰/ûùô†ÿø.€‹l/u„L¾êúvŸ_Õ=jì¨G«úH€zû8çùÌ:>ùþËž)Žu-‹w©Ntl`Ywe˜äI¸: Åšw«5vëUŸ4+¿Û&ÿºôK>å!õ!,àw|Êw#Ô¯{©ŸµQ>¼F~§‚ø‹íd×â±é ÿ¡Ç k²Åê̱J#b•1¡Æ „‚ê-°F b£9ùº©Å’Ðဠ{`’óˆÿ[ rû¹ØË2ìuñÓëØmØ—]ØW}ØWÄ/(ŸõÉ}ÒCý°GîUéƒNÿÀ~æo“-L¿¥þvLîKž<è·|è õóqòoÆ(Q_õʽl“{Ò$w¿–ºQJYΧâüïf»§wÄÿ„@zz€KΗšsW…A%·"FîFHï'ÌoÅMnÆK6ãf¶b·#–·Âæ·C§î…Šï†J¶Â'ï…OnOîO¢U °¹‡Á¨êÀ¿¥»é-ÀëðÈ,uøErðr=²fè¨W»Ì¶ÎÃD.°~|dÙµoÅ­­‡œ½w¿sqü¾·èŸd×G´y…ÏG¸ã#– µS”Uœß»2µqI´í ¦3Fä ÿÎⵦñ–‘0ì£ÝØtÚÿq0*Ñð"R€™GW'îŸço¼ãÑ·.+} °Ž÷ôŠøýÀÙ}Ô;òÖÙî~Ó¬2ªoå"WébåDªœWŠ¢KÎ9MÁ-SÉ#[Î+‹à5æšý2eåƒôÛgÞC­Á¢o= _z7få ü—PGȽ‹S{ç§ïnº¡“{'†ÿ÷<Ñ¡ ­SÃÀÿ{^ƒ[ôî;Ö-kæ¨ö&„Íøiù9ëúóši“Jàó¸W¨Å™6,DüWMWK# ȇð~Á°rÁ zѰÆ)Íà?$ËÆusú¥Ó:|åTàÿ´v–@™1®Ä(³þõt ÿ¬6gB Œ >Ö¸>>yXѦYF¹˜K>žŽ9·[Äßìê?±wF¸ïŇàÿ¶C#ÀtÛª­ù˜5Ì×NëWMéV,Õ.×Í›ÔJ *Çu Gu †õ úõóùf¥@cà¿Ø¢b²rÒ²,`ʲFdR>nT*0.[Ôˆ,kÇ-ª–5BÛú)»FH G€˜–Þˆî…ÙVüÇÍKø%ã–¥Bër€?Œà ¾]•бv‚~ à?fY6nY.[#ªøšŽZ—ÙWñkxNuƒv#Ž•ƒveCö• °àÿ uY—9¿¸ß¦^p(é±)þwÙæ÷:u[åvXäÜ0••†0J©ÖcV°€ÿç—3ÊMY%¦‰Å& E&qyú‘iêÙÚ~  -ïõ‹ Õs DÕsq*gÂŽG*ˆP>A¾¼G€¼;È_ÎÍGÑË_ÉËOÉ,F_%ϫʞ¾ªþÊ®!*î1ª§Óµý‹L*¬“+íSkhiõŽ Œz‡ìk޹×hœ:—ÌJ¯„²s!eW‹£Ï1¼ò“œ¹IöÜ$Û|Îüÿƒÿ9ñöÀY:@þçÄ8³£üOþU~~þ¿,yþŠÿo-þ:”¬)°3Îÿ·yŽzû6óBq>e:„ÿíñÉÿ˜+Щ(Σ,Á½šáÔ”lÛe9–k2Y¨¿\®µ]§µß¤þ²]ýÃ^åφ¿â+üN,ÿ{‰ÜOâè¨?ù»òW½„O[ ÔaO‹±lì › ÅÆ/bÝîXƒV¢ƒqT±leŒ­†åi`ùÚX¡.VªUaÕÆ„Z#B½ ¡Ñk³Cü_@[À›ñÔ}6ö¼˜ð~ñãzì7ÍȾèÀ~Û}ÖCú¤›üQùÃNèu'áu'ú°—øQé“ÒçC$ÀþWcä¯y”oøÔïò oE ¸¾ƒä¾Qa#ølTî£ùw;äž5ËíÕS·*äoÊKsxé*8ÿ+"M B,r­ÑU¾+ŽygÜo\ o\ï&.ïÆÏí1¥R槬î'Þ¹ys+baÝCÚ˜þß šx‚®îBðj/ 8P¿ã'ȼŒ\x¶¦°}Yù“@Ô‡,àî…q¬£hûjærçäØM÷U·Þ5÷¾Í³¼Í³£÷.C)‚ÿ]_‰L“G» ;ÞRàÿ–÷\Ï€ÿ¨²tð<„ýG-ƒñ«œÿðü#HfŸÏ<¼"Þ»(À-wHö/Œ?ó™ÄO„îzóç=šnh3 IÞòyÔ@þx2Õ5‰â’"ç–Nuƒø?‹èQ¦vånÈð«gn½J¾ûnüúÃà¹÷bW_F-= B{ ¨ÆÙ‰ûgÄ;^cÀÿþûž#ÛC·]z!ûØ•­ÝsîݰiÅù/Ô)œ2«B²U‚“ª)ƒ2ž:›§–ðë¥Y£J,¾jšD“=©™7oP¤_µ W)Õ(œ×-ø/UMëÍhç •Óþ³º9"UÖ¸R"ðâXðòXö´&ûÿúeRݾzÆ€RBjl½œ.v"‡ì•Ž¹Îœ):¶w‘÷à$oÏkô¾{ÿšm=Àÿ®u ¸ „ú ¿|ÿÕsÆ5Ó•BíbžV>ðÔ h̤T`Z*2/ø‹ÍË%À‰Yå¸aɨ^!ß°dܤLd^- °®ÛÔKl¯ü'íê ÙÕJlªQäo UÈ7+ìCÌóŸ íkDµ0ò¬ÊG-Jþ þðg]!p¨µ«¶) s¨†DÌüV¥0ö[–ŒØ!_ èµ–ÁÿMüßi™×l”Ùh˜ÑdœQoZ¥Ë¨Ðcà‹›ªáærÍ1§Ù…sÝ5·Å#·Õ…ÓêÌmv.jt-¨÷b×Kª½V|±*öTy¢g Ó3ŸáÎMtå2!þç² 8‚?⮌ÿ29°ãi¹qN€ÿs£‘üùïö+þ£³@‡‹ÿžÿ¹òã† ïø¸bÿŠ“ þHG¥þÊþ# ¸L{««#‚ÿó™~,GfÀ¡þ¸Žž‘ ‘?)È9%Èø_žèQÃt¾žâГmÅã˜JKôW«twµßÐx¿GýÓAÕ/yÊß •~˜ÿaBî“ÄŸD„ßcߎË5cïVc °ítìf6á‹ œ$6;Ê @þ2Æ¢`ÉòXš–­Šåj`\m¬HƒW+ 5&Äsì†6ñÿEl1»KÆo½[Bz]Mø´ði öé ì“vÂÇíÄÛɯÚü„»°z°Oz°Oû±Ï‰8ù¿W’¿Q@¿SA`XßOê»Iê·”o%Ô¯„”/xrŸɽßMyÞJÝ¿FÝ®’[-–›ÉSþw15âôË#L¹Á–Àÿ¤@û$?[T ïªKÁųA™‹‰C[‰‹–'Ï?KŸ}’¶ø(éökëcý~üÒNÌÜNÔìýÈٽȹû¡Òm ÐÁ_¶ÌÔEzƒPž½PTÒáI*- ÚQÿ÷§¡‹Àa¼2ä ‡Gƒîžæož¿u|pÙ­gÍk`ãô(*}UŒßxà7ïo]¡ø†‚ßôޝô¾ÿ Œ`0âg/à…©eíÆ¦ð¾óèjDþ¡ øîº/ì3õØæ™ÿ,¤`lŸ„P¼ï–+ê¢rïÔÈþÁ‹€éoѽs£wÏÎ:74¨Æ±±syr粨ÇÓÈn)$˜ÿs©^YD·AZÞ3ÖÔëôÕ×)w^³6^F¯> ›'zù)¤H~ˆÿ»g…hýäð¿wË¥sÇ}hË}ñß½ïÞñ¡]ÏÁ×ÞM»¶[M³F•À‘~É´EͬE­Ô¸lÖ¤Bª_"Ð`(§ò¥‰´3x*¬!ùø1å$jºøXö¬^ ¤Ë†ÀÿràÿŒVá’A5<œÖ,þ‹TSçôØszÙõdœÿœÿR°øq

NþjôPe×8¥³líð*‹´fÇü×â‚®œë.ì6zQ›kÉu÷¢:/vÕ9Vu@Xuôåªr&½„I+Jt)ˆwÍwÍKtâ0m9, œüœDÀ_&û_øOÃS€ÿÛü?tÙ^0;ÜWNØ¡ÿßœÿysíËó­k_ÿ±àWà?êsÔ øÿoÖùÑ|èI¾@~'–?T¶³i œóG“„‡£—’‚è ” 'Pj°sa¬gYðߥ1øo3Æ5›)3¼U§ÿàºö³Í4¾UÿF òã„ʤŠÿ5%÷§Iðÿw<·ƒØgØ«ìE9¶ÏÁn'a ÿ2¡ÓTcAá#¦‰ ŒOÄ)X’<–ªŒ¥C:p ãja…:È€ÿ„6{ÄÑEl![&ßKƲ/òIï—’>®!Aðá5ìõ5ì£ëØëfìu+áUöºû¨ Áÿ7}ØçƒØ—#Äox¤ïäß‹)?HÈ?N@?MRœ:Ô裡¿›"áú~‚úˆü¥€ )À«^ÊË6ÊA#e³š²Z*?¯<–©ÚÉÒºkPnüÏ ´Iñ·búX'ÑÒƒP„R_^lÅ:K°—´øˆ¹xÀ>H˜:`-?N½{rç>sMv `~7zø¿4u÷ÊøÆEÄöøJ ^Õ•b ž¾0q×G(+È?£nt2'øðj¾4ñüæEÁ­Ócgø;ÄÛç„·OŒ®¸õß>9¼}~üpèªó@—ÇáGð0»ë?µ< Ÿ³í#¹ç;Oâ=‡. E!_øb³xDZGA OÂPC^TD.5çÚëôûÍ<º:õÄg,`Ý£wÝ­°ubèáe”\ïœáo ³J!$x.‡t‚¦¸§’P_° ²{Å=ƒä\¨è}Ë¿íÃ̕ש믘·?LÚBˆÂž‡Î?ö—â§@÷Ï œþßujßtîÛvØpéÛ”ÕmÞuØsØ¡uݱn¹i^?©_ŠR“ÊY³JÙ Ÿ’)½b‘âó¨j²@+…§ÊRˆSfò”’DêYÓ:‹úe+F•0ó§5ò—ô*V +f4¹á+%MifLj¤ ”|Å„q%¦P%LA¢– ðŸÒÈ™×+˜Õ.«³û˜(øWôáÜ3 . ̾Ç6i?dè‰ïø}¯Aø†÷zo[5oØ6oX5Ý4®Y2@w æu+fµËæô*!ø‡<¾¼@»`L“;¦7¨ÉÑÉ“˜•OYV‰LJù…|£"|ã2 ?Dþ@~\ãæ yµÈ²Vb]?ï|]¶æS#¶®3)2Èøó'íª%6•0S€—¦ìë@à|ëŠóà?L`2-Âç²ê@5(þ·«ÓëE´:à?0φ¬ËЦ€c ž²)°.´)²/´GðïÚ›e£=_ó¼V3N‡Ma·}Q«Un£izIr•Qb‰Qt®v`ªÚÅåÓ‘rîaTç`*-ì@rA¨ïû&àGë< îè$²g€Š—¿ª‡ŸŠ;.˜GÈy…"þŸòQ?î£åî¯é¢î£|¾]%²Œz&sL%8¤`N3g*?¾4éÉ}Z×®cç-³zˆü—Mjõ+ ÅXÖ¯œÕ,žÓ*#˜Ñ+ƒÈ_¨“?¢™;¬Á Ëáér&LK&òFÅã†Eàøš?Ï ˜o\ ø‹ÌéU ‘U5¾ì3Okœ°Bä6,ÔçŽBÌ?ÐLAdU ‚ îãæe"›UˆgY9bV#Þ/fÒ© u p”M\›Åô¾]Ͱe9^ABÖ2í øËVF*lK{¬ò;-óÚÍsoX°ÑE`n¯cI—]a§m~»uÞu³Œ:ÃäJýÄr½Øƒ˜lu_¦Ü™(’GF÷Çì0Ç@Â!ÿÉnþ·@9`¯å ÙÁ¯ e¯@ÕãÈd^ó(…SJ¨Ad Ú‰ cžÁª®‘J^L¥‹¥ú¬v‡²áã×ú<«:] {\Kܪ†Ýz½»ÎT¶zgÕ‡WD_(d¸qYŽy,›‚$»"¦}Q¢]1Ã&\¦›iŸðƒÿ¯øŸ Bü§¿ÅN„Ûò‡¿;Àçj,èñ?ùÿoÃñÿÊaé¶·;Âàüø'û8¡þ,~tÔ¬$éíY!ô”P.Vˆ#ˆ쀋do@äuNsI uÆU¢$Á«"Ñ¥!™ÖmÇ+´œ©0Åùÿ²Gó“¯Ç~œPûyFõ¯³Ê™UøyRéGåw#äßv>jÂ^V à#›ÇÞ„O¬Æš§CLRÀâ ¤ŒE&ÅÊ‘Šd– 1YËPÇØZ®.¡Ø€XeFi°"ÿûÜ0Þilʇ°JÞˆÃvX¤ƒ ê³ò»ùäwŠïaï•aïTbïÖ€À>jÅ>íÀ¾èEûÂßb?Œ“þ ¡@bòçiÒ_æÈ§ÀøóýqŽü‡Y"è§9Ⳅ§ÈßIH_ Ñ)ÖW}Äçí$àÿÝÊr‰Âdžòpºú †NM´aAˆyV€eº¯MêU»T?§D_z¬¿3#Ä þá\ÿÝ ·2ºöSçž&ß~̺uÀœ;HšÙOž{´¸—°ô0ñæ£ø•½ÈytÔ_ÖÒµ\¿$îû õ–Y=7¼3<Ä÷a‚€?âÈÜãÈå‡á¨$<Ä7ˆï]Þ9=ŽJ¡khSxýÄÐÖ9þî%XÀž_þo]‚ðà7˜ùÁ6½EÈ|¦€üO–qAðüº¼ã3%ÛXÄ{Pâýâá›?ò›~´ð<`,àÑ•Éݳãk®½‹m·¯ßuîÚ?-|xnrç”pûôȼsc»£„|‰È$@Ìï–NvÍ ¸¤Òåh9dw®üÙ™sÕï¥Ì¿J¹õNÜ*ðÿ˜õèÒÙ£«¯NÿwO ?8>tϵwƒÖ¹åÜs—ÞµéÔ “—¾®ý÷;!þ_5¯Ÿ3¨i@ÌøK Š&´ò&´rÇÕÒ‡F”âF•c‡£‡ä¢ÁÐN®&{V‡» [4«•?¥ž;¥ÊžÕàÎkLË™RË)±„Ê ±*S¨œÈ“WL þüASlˆÿçu …j™rÑJHmˆvL̪ìØå;ÞmOüDû'Gwé=»ömw-oV¯Õ¢[úe‹z¥ ÚÅóZE0ÎéOÁ‡hqGeðÐÈÔÌø‹ ' ‹ú… ‘a1ð_h\Â3,Ó/3D🰪™´®²©›uhœslš±oš—ðM ÇŒò‡õ9 Y1ØÄÞY5i]ÏÑâ]½Øº†oVüÇK†‚ð­ªüi 8ögÝoH]šaÏðmªyÖU蘨* À³­ÄáßoY2d[ÚežßnÂi3c£îð¶…½E=ö…Ýv¶ìVËÌëfiÍæé ãäzCÖ5V¥A|±N$W+$G#0Míj’ÊåxųÑÔ“¡¤ãᔓ‘r§£ÎF)‹T<.2Dîx˜ÂI\íƒBO‚`£p6Fñ\”ÊÙ(•ÓÑ*ððdªªO¡N\·SÕ°GÓȉ†UÃ'ÊÇNÖó·Œ{vô]ºÖá]ÐWu¡„áÌM²ÍM¶ÏM¢qYN‰ôB†]1ÓºiÉaXd'Úf%:ä0l@0áüGAþœGà?'–þÿiGüÏ wþÏàÿ‡ñ¿lÛ÷W×¾~Åûo¯ó£†/o|ŽZCäúû;¥8'ÒS‚éÕ'‡8&…ÒÂ’Ãq±Bí%{L!5Œž~X­:#Üü/Ž÷,‹w©Krèb;ò m¦+M×êôw[µ^ô"þËâÕ?J•ÿ2£òg©ÂŸ&”âË?Dý¢“üúáY ¶“‰­%&±¡³„ët¬Ô ËÒÄä°h"E¢DS)± ”De S•”¬FH;†åhcyz„b#rµ9¹Ñ†Üâ€õ¸`Ã'1ÉeÂ|ÜZv7Ž¸Ã¢ , ‹ü(›ð${–½(!¾S*K¼n ~ØBþÙMü¦Ÿøû1Tqôç âÏRâ_fH›C@'ýyôó<ñOó`$™`?ÍaÀÿßÉøÿ›Q½„gíØƒë¤Êb±‚„£2¦Ñ’¨[mÄ 6Ïð·LñµMG¾,;=äüOvÉ t.ö;9—y;mðyÎݧ)[™7Ÿ¤,Ñ·r|`óÿê$~m uø}ÓíÈzõ®É6ˆQYžˆ¥ƒ°…GQˆÿO¢VÀðÆ.ðÎ{W¦ÀîžEç‚¶du’Á6ÏòÈ‚îËvþ›Þ‚{¾b€?ü8¤ø°€?h×oz/pN¶°ò2úÖ³ˆ›x°OÎïùÍÀ\ôÈÏ÷•¢Ž½¾ÓÏügÁö/¢¶Œ·ÜúÖšWíZ Dß;%xt~êñ•Éí³C“Ž•õ*áùØÙÌ3›äžND‘Á>™dǦº¥aNVŒÇñ‚W)+ï³n¿Œ]“ñýgü¦žùIœÛ9>,½ï1äìßqìØpèØ¤uí8õ`!ø¿k{ã¦YݼAÅ\§P¢É™ÔæNéäÿ'µ9Âc™ÀÿAù襘!…¨>rè¨büı4àÿœ6>­Î™TÉ‘(eÁ8¥–-QNøËÇó¨1ÅX¾BÌ% ,€/Ÿˆâµ4‘J:¾þ?¯“?®–Ú®Q%1‹ä˜&g“€™ß°ˆy0øÌW²ï6|àÔ{¶hP¹¨S¶¤WµbT¹lX1«¿‘»¤U¼¨S$Õ̃o;®ÁÑÈòãüp§Œ Ez^ȹ_7D'oT—  0)š•üqö—œ[ÁÀ†ôruÙÀ0€?xØ¢bÊÞV#XJÌ*$–Õ ˜ƒ Ëev¨qŒu ®Ú×ûÓ®-"‡zœücVè¦À½È)‚½nÔ¾ øßoUÔkUÔc]ÔcSðï²)è´Î‡à¿Ã†Ûj™j±H»a•qÃ"³^ŸY«›ØjžÑe›Ûn“sÃ&»Ù:ëšuF½MF•yr‘A|QL‘i|™%³Ò&¹Â: ælÝð4Í †ò•D¥Ë Š—`LT¹’ |9^éRœâÅê…8ù ð§¨^JU¾œ¡ä[ªÃh³+;ÞÂ;Ñ:vªw¦^x¡Ar±uâb×ôÅÁî–àäš0_TÒ‡aôÈaÙrX.\¦{A¢ka¢cÓº€i™Ë°ÈbXgA À°Ãáÿÿæ¿ãÿsÿ!pbG8ËøïÌsA uûÕú~ì·€7—¿<Þ”}–]ø•5^üUcwœÿøñþ7ü§¡C¡~t€?ZÀ—-æ¤ÈÈ3?)Ì.%”n^€ó&)´´ðC¥‡Ñ2Âé™N ¢ÄSE ÇË]ë“èY£…¶Ó–7ë î]×zÚyìõ€úc*?HÔ~žRýÓ”ÒŸ&þ(QþÛOý´•ô^5ñqq3…°A¿B„à¿ÞŽÈÕÇ’T°9,‚ŒEQ‰Qr¤Xr‚ ‰©Fd©c©X–ï)5%WY¬I-„.glè8&Ö©WdqýìÑfz  +Ø-=؉è\tAÀ(ÚΔ<ËÚz?{ïô»`ÏÒç3WŸ°ÖÇ­<‹»ù(raëŠ`õäÐ ­mÞ©ãþeñSÙñüÒÖY{G|±Þ½‹ˆ\FØ^ /x [ܜٽ:qßgfëÒÄ­Óüµã£wNó¶/ˆ þ¿u|,`ëü8¤xï½ÔêkÇOx´Ž0Ü€ÿ¸ h?t \àYØ ¢}Ð>¢ƒ~’Ìã.ð4hqß…xè= ðÔgúÁy!*ÑéÖ{›Ö¾j׺Nハ÷ð’:ÝǷ̯”óÏÆ<Ùd÷l²SÅ)CΙA°K'¡ ‹à5±îýÔ…’מG/¿wyP°ìÆïÔþÁ¶çÀ–kïŽâÿûv€ÿ–cç†]Û]Û¶m‡ÎM;;Ö­ÐêŠT»p\9[ªPkäÊŒ€ÃWM‹†ÈD9ªÒK Qˆª$Mkç 3<ÇØ3¹@~±RºT%kF-{Z-C¬ðçÉEƨ‘#”ž|¬@¶ ,PNþOiäÿg´9 ñÍ Eäã)+Ñ”‰Yнòðá?÷âïÛuîX^[Ó+…hÿ¦~Íœn!ØÍ̱µÏ†U¿¨þ$Qû/±â‰~R£~ÝKþ¸™ù‡|‡Iž "œ%7Ó eæX¶6–¨ˆEÉaá,ŒJˆV Ä*âU Ìc„dM,]ËÖŸ†X‰©ÒœPkEh²ÃÚiX¯;6z \ Mù J+¡¤ÕÂíhl#ÛLÀî%a²ˆ¹¤ç¥Äwª¯®¡s§_v’¾ üÀÃþ Âþ2EüÛ4 þÿ±DþÇ2åïËDÿ{…ò·e*r%9ÐÏ ”?Î~’Ê}+&É'}È_ʪÛÏYx–¹ùNƽw³d ÁÿúØŽ°Ù‡óÏ¢–‡Ìn]®Ÿ–gãÿñb ÷®Š‚¦Ÿ†/=]ÀOããzñfa8ÿF¢Deèm¨nOÀ¿¹{ÞRt(è‚ñÿ¼pãÌ|þª×Œ¨çHêêï—E}!e¥ÞqÀïøJwñÓA²€'aË€ž„,ø@~”Èö@ÏC–!Ø»2upeê©ßÌs¿Y¼3ã®çà¦{ß­mÉöúºSçƒÓüƒ‹âÝsc+nÍ}zÉ%¤ó¹˜[–FtL!Ñ“)N)˜-[Þ#£]Ó Û‹ù uåÃÔçÑèW? ]|4ÿÌúÑeñî‰ám×-§M§îÛvmwlolÚµü7lÐàºmÝ´jR‹6dU³Ñ]Z¦@-[t,{L9 ø?(9¬ÙG ê& PÃÊŒI t˜N+oÌB)}R)cZ5kF=sJ%E(Ï#GŒQÃùò‘<¹ˆ_ø¯ÈÄ7‚ÑE0¶@5µW1º–z9‡@K&šÅc9òÎË窮 ï{?¤ Ü3oÚ6©ZÕ-š?Æ]Ð.øKq&T2!ËÓëËjæŒkgheigŽêå 8ý\‘$ÔÉãiçBj0ª™ËÓáâ AHÿ[VÎÚ×/Ò›æ€ÛæåÿÇ §¬+%e0™•€MàNù‚À´È?išHâÛ0Ÿ¦7P™8çfМGHç×ë'œÑ.N~¥.ÍnM@~´ l[‘eáˆcå(­jС¼ß®ôç´²»¢V3v£aÞ¸Ù(­ÝœÝgS0b_:jW:lSÚoQ8hU Ÿ­†ï\/poä{Ô{Ö;WöÚ÷: ÐKÊ@c5£îÕ<ÏZÐKžùèÉzÑ™ÉézÉÉZ‰×µ‰­’“í¢“m“ç;g.wÏ{÷Î^é›ñí™ n„Ö•Ç_(‰9]ãÁuâ&Øsì8 ösN@g'8d%Ø"þ'XfÄÿ!ø?\ö½y¿c^œÿ ÿXúÿñ 7œŽ[@^˜«Lî¸pBÜù´ð¦ø¾þƒj>¿Yüyþ8ÿñøÿÍOšìÌ-ÅäðO•ÿ)¡øšýQðÿ¶R#AiQ4Pf]VÂÔéHÀÿÆñR†G]’ks½?×VXl=Wat§Aïà†ö»ÝÇ>PûzLõûq•ßó•~à+þžOüfÈ݈=/%<È!ÝŒ#Nø{“jmP`Ÿ¢& þ©X0 ¡b‘ŠX´2¯Š15±dm,MËÖÇ8FX±)̢ʫ·ÅZ0Hú= Ã'Iã0‰7&õÅæüщХìf8¶ƒÝe`ò ÏKÑ^ð'Í*ÔOþAÖ)øoÓäÌQ!øÿ× õ_«Ð?VådRøÛÊ¡Àþ4OþiJá[1å >ù£AÒ³Nƒë´øS¦8ÉUÊÐhMЭŠÔÏ6É °Lñ·IöwHõ³#Hó±¥ÈÎÖÊÎPÑÒh9ÞnMa3Œ¦ƒì¥çY[/3·ÞÍÙ|ÄX–íÿ.îEÎ=Š^xwâÛç‘K/"— z‡\àî…ñ§²bûxCFÔ„·€·Êr>’1×~èfJ3mN'wN‹3£ÁžPL˧JUÓAJÌqþÉãÔ¾|ø5t”ÆWˆ9Ü–O*±&Ž¥Aú0¬’С\JðJÃ,S(f‘˜V­î•]ÿ®û§z÷è½»Vmwô+×õŠ–µ¸óðÍj剕3ר¡K“ÿc™|õŒÑcé#š`£ÚYcÚY<ÍL¾F&ïXÆð±¬!õÌÕt˜Œë手@"£Â ó2©Uå¼}Ý‚Cý¤E9OŸ;¢“ £Ø´DbV*0*MZULYW MK!e˜#òOXÕöñ‚ÒRÛú9GÔ#^dW7ãÒ²r¢{Î -øƒ€ö1½aÒåú”k3Î õ‘§× X• œêù´Zûþý6ÅÀÿzß­†çR ósn³av£^FVÊ “ÜÛR­ŠO¯F[ÆÖ¨é¼Ð¾—ÀáñkÆì+øŽU0ŽØ—Ük%î ÒãÍ0Nx4Ny]‡QàZ?áu}öLûü¹Î™ ³çÛfÏÞ˜;ÝŠž¹Ð7s±gúRׂoÏ’oß²ïð‚ßèLH¿0¢¡'<ûZp7Ñ GìÜX7Îg—o0‡H>7Ήïœà”ï˜o“‘` üÏŒ·É‰·ÅýçÆÛɶ}ð÷ËøOGVë”#Kpø¿á^®ÿà?‡ÿÑFpf +¾Œøïëšìƒøÿ+øÆÿoJ÷3¼þ8ÿ“ýè‡Á0ýmþËB}°»ÔH{\iQéÑŽ Œ(K¦lÙV\ÅÌ“ÅÌãeLÏê$—ëiN=9ö¼ki™éZþn³öÓvõW=ª¿PýjXù›aÅï†üû±ß´aï×ËNþd—¢Hã—É]îdˆçs41†IÁB)X ”#ÿ£”°UŒ¡%ic©ºX¦Æ6ÂòM ÅfX¹Vc5:`7œÝîÄ^OòàiŒw^$‰.cWP½¸Y?ä·â°­T´×ü¬ñÿÓì«nâï)?Éÿÿ>KýÇ"àÿï5êÿº%÷¯[rÿ\“ýcMñï«Jÿ}Sñ¿o*ýeIþçêÓJߊä>£|0@zÚN<\ü)RæëKÕnŠÕ- 7Ì 2C‹ÿ(àwH 4Lõ·H÷uH÷q„, 9À†hÇþ‡¹fø:q.¹µFÏ'µìfÏ_6øƒ H­ª'-*ÿ©uðà?jPüŸ²©ÃïˆMÑ›$×f][—Nt͸µäñ“? ‰Sã‘À À@cÕBçk"×zà3ŸçT#¤öe]–¦ymƹ7ŒØ-Ù×õ2­+xŽu|Z=Ͼvܾ–g[=n[ƒZÒÃ/¢5‚¦œ&è×ð~ô¨©M϶rܾZâtmÚ½yÆ£eÖ³uáD;>Ÿöj9~cþTÇò¹žÕ‹ýk—V½‡–ÎõÌŸi_8ß³t¹Á{`ÉoðfèðZøðÍ Á•€á¥°iTç`tActDEÌ96Ó!7­Û# ˆ¡çEѸ1öù±Èéè<¼SN=+žžGˈµÏŒ±ÉŠ•U{ˆ·gÇ!qb‘pþ#‘Áç?mÈv8ÈþœP'N¨ nœP·Ü`¤œCñ·€4WY¿u×·ÏüüÒ½åªÞŸpÙ/évÿû tLÂwuÑâí§EØ¥½á?Àç??3ý ìØCÁ_ÍŽ¥0½ŠÿW±\Ré]Y£\[I±éb¹Þ†ì ð³J¯:•>éQü¬›úE¯ü½¨àçëìjìa¶•N\Œ$ó/‘Ú]H¥ÆXº:/V~B(D21JWÀ"düOÐ ÿSô° ,Û㚊̰R ¬Ê†Po‡]§[чty`ý''‰Ã§£àgÀ 0©¶m¦ þCüÿªûìöM/áÇQêDØŸ¦›£üsIîß«òÿ{]þßëòÿB ðÏu…ÞRúÇšòßW•qþÿižò£Tík¡âoFåÞï£<¼AÞn[­Tš)Tçeku'éÕÇè—†s‚-€ÿI~¶¬‡ä ½ä‹_zª3ð?ÉßœhÅrL rNöwÌò£úx5„K“šv¹s{¹kÏRW'-?I^Ý_¸3û0ni/zþqÜÊ~øÜ³¸›ï1oƒÞO¼ónüØÁ‹˜•§1ØÛ!öž?”¨QMž´ ëÏ‚ø[¾Œÿ8zåEÂ:èqäMð0Àøž \o]o_@—Å6ÏŒß;/½}î]øE­g¤øÕ€G¡(@—ÂdÕðÒðæÇ³øyÔ§¡‹/¢n>\ÏÂ/ £—üÑ]€ƒKþŸùL¿ô™{î-}tQpÿôЦ{÷mZû-»öuÛöM§Þ]÷þÛ.-<£ìZ9?v2  paai$ ³Î¤Ð’0ÛnÛħ,ᇫï2V!Kz"»qì?ýè‚Ýüu¼KïDÅ3-®ß2iذhÆùË iÓ¦ù¶yÝ¢N ðŸGEÇûEYãjé£J¬Qå„A…ð.’OåjŸœo;v±›xµŸ4*%TNœÑLŸÖÈÉ3Ä I“ŠISÊ,‰BÂ85ŠÌ— áQ‚†Hþ2þG£Ñv€\ â¿zòä±”.µÈNàrU¦‡ir諪6OÞØr¸qßêÆ†^åM¼Eõ̬-ö¼vžD!U¢Œ¦4rÆÕRÇÔRFÔ’ûUÃÉ<­ÔQäA™€”™Ã(@ÑÈäke usÅúy YóR©I‘@3ª™5¦“#4䊌ÀòÆ!0.š2/M˜W€ÀæìE¦|Ã’1Ãbˆü! [×Þól_ðêò“ùøú¤ÀgôŒk³Ô­²œÿ"Úµq§šIÏ&±Û5ˆÌ!žG‹?ôŠ1§Ê«ü.ó| «~V‹^f‡Q¤ <Çš ç&°ChÒ¹EêƒáÙøÎŒëuYIêZ±CµÄ±_hB/¹ß€ï6íÞ š?Þ±x²kùtÏͳ}ë‡î\Y»8tóüÀê…Áų½óçz/ô.z@´¿ì?´4t3tp%d`)¤1¢:¦c$¦¬9*®"îBI’g.ˑàqè8ÿ9‘Ž`y1Ž\Äó7G:ãèÀCŒ3£á,Rn .ø‘7Âãçÿà øÊ“Y@^¨7Ô„øâÊva¹f*+ÈÁ?Ð5=àþC ðåìe;ÐQÝ~¼¤[r ó¯ø:ä8Rz„ãQðà ü±¨Ñå3Ü Ü \Ëéu,Zkš]?Ûf<ÏDZ¤»Z¡±%+÷²Uáƒò¯Û(Ÿ´Ë}ÜàÿÞ5ìy9¶ŸGØL%.Dø—ÈÀ`)*X4 ƒÈŸBþÈQCŠ„hUbÜ1"C‹ÀÒÅÒ YÆÇŒ˜oN,²ÄÊ­°*[b­=vÍkpÄZœ mnÄN7R·;Öç zaü³ØäUl9’p7YÆÿ2tìóvìÛ~ì§1Ò&°Ÿ¥Äÿž§þsEþÿßFñÿ¿nËÿë¶â¿Ö•ÿyKøÿ·Å?/(üq–úý„ê—ã Q_vS÷Z(wêäË”&¹ÇÓ5;úµ‘Å¡f¹–iþÖÀ¦¿=3Ј`“ìçœäëÂòµcù™1Àìýì!KrÌðµÉóvmŸHiØ-›}‘¹z}÷ÝœÍé·±VÄ/îÅ-îÇ£KÑ‹¢ŸÆ®¾Œ_GŠ]{™°v´FôJ£Ë¾SøUÜã;2þã=…ŸÄÜ|‡qç=ÖÝçñ·À G¯‚ì‡.Éï]Äù¿}]Ø8Î[sº}røþe1~™÷°ù£¬ùÎðŽûþ30G7Åd{àý¦QŠÀÙ'! ¨W{ä j,»˜üõ™Æù¿Aôð’äñeéÓ«Ò§—%ûgù»'†€ùw;×,ZnY¶nØvÀÃ[.Íý:)%¤‹lÌ+sN!Ñ1ëT’] Á"ƒìA KÏ–¾ÎX|•²ú2v­ŒA~FsQ„*ç» oÐ:PÛ‹¦5ãk·Íš6,[Ö-›×,›€ÿèv•åµ5ý²9õ“ÊK”ñ?Ö™ó×㱇=('Ö!;uxÏŒtÈŒ¶ËޱÇÅŽ>TnÔ¡8Ñ´7¢ãúÿ¹`aÎ\\¡®y!.Àܲƒ]²‚œqþ£^ðˆÿ.2þ» ø_vá÷mþÇŸwÅ\²ÅùTÞ ç?ÀÁÿÍúÌÐúÏÿ3Þþ!ìOpå$ÒA¹ ¿ˆï’‡¼Œ^ëX•àÐÈ´íL³Ê0çiÏ©Þ*U¸WM}ÐD~·‰üª™üÁu» Ø‹jìI1vŸm$“çÃH¼‹$àv¡ŒÿrX-þø’ ¾r”`9B¨"1B…«NŒ×$0´±d}B¦11Ç”È1'XŠ­eÖÈ*­!Àêí±&GB‹#±NèvAWÆÎ`S¾Ä•(òf2 çEöQ* ôÝö_|ÿ™!ý}‰ŠÿÿëÒ¿7äÿ}Gáßw”€ÿÿãÁ?ÀÿÇ)â×B¥OG¨ï÷“ŸuPv›Èøâ€­ÞŸ¢Ý¯_nTdưJõ³ÂãF€-Ã߯¤”àk—èk äoÉð³I¦'ú[±üM³­³/;Õ„Ís[_l¿ÈYœ¾ú<ûÿðõ@qmWºÿén24Q „@‰ÐÐ䤈DÎ9tN49gP ) 9dž&ç 49 ”Ó½’}mÏó›™ç¿ÏŒgœ=¯þk÷A\ùÚó¯úêÔ¡¨®nÕïûÖÚ{¯-y´ò"~é ja‡3½AßeM?ãÎí3§w"&ãÏi³h›XÀ[Öü[ÆÜkÈö!ã±w½!†N†O„AÈŸØ›|>…NЦ÷é3̹CÖ<<Ÿ1fhsÈÆà«n²Û${Öoö¬]ï^v꘷oX¾Ñ¾á* Ø÷EÍP àšÿ°üjÚä=ˆ;Úíé7 À‡äðGGtCP{ ø¿ …kÏömñŽLÈÜû\ûv»w¯µo;¶¬[Ö,•Í<š>÷xÙ´Fj];`”ÿT›‘#3ñߊƒó—b˜a4f’¥ê¼Òð1fögÝD8úÜgø¿}­,`ŪFB)_¸ðòÿ¼~ɼáù èöFÐÂå‡ËK$úw'Odh$ˆT¢ ÿwyídà?½A%°RνBîV•ÂíJ¢sáVæ>¢Ë›1LìVet«°5ø¤È^e6äÿ~UN—b8ð¿•èÛJôiƼZåý;•ƒ;•BÑB€Rd¯:»O?õ@Í'h…éñHÚtL³Ú(péÖ£ã"éÅR©^á˜Jü9zLC8¬Ó£Æ)±û•£‡5´â:È‚&5Dþz N“&¯ò¿&àߪÁk&sÁàÈlÄ­ùõ!ðžÏ1Ì:›Ù¡Û¦Ó¡¦ èÒKé5È0ÌõäÿÅg³á):›Ór2 òÿqñ0åA¿Q!ÿ‹‡cVl Ÿ—ôY=\~ÃøD x ÷R‹áCv¥ƒO@ö¥½6%]ð¾ZÚnžßSw1 Ýv1³Å8WD¹ÛcQŒHnƒ?bõ`ÈúÁˆí£ÛÒAëG aÛR :ÞS‚‚žP#À'£ŽåãŽOêã×jà‰ã4íÜ0ïÞ Zòî\ôꀗ÷–i·fм"ÿRXÏRdÏB„h.¬}>¬}!¬SÞ½ÀO Ú!ƒUs…,\žc–À&ƒg‘Å£¦³Pó'…fiƒ&¶´ifÇð‡wPºÒÑ4Ýóhú5üáäpS ?}j;|l;|~É+ÞÒ Žä9c$[ßòÙòÚtغݿu«oý†xéJ‹Ä± rØÑ©Þ°©À‘5¯(B§Ÿ… h/hb[f=xË?&›V1ŠJÙh8ð¦-÷Þ[][·º÷d- í[Ý[hbƒxïfÏþõ®‡– «ÚMjõâù'SºÆuM],£”t^Lz é—ŒÙp0*ŸhÂ']ä`zB’a,Ñ8 £ÖǾ⎾eϼ¦ƒ¢üÿ£ÿV×ΕŽuÛúy“'ÀÿdzzEÓg‹f Lœ/ž8W8s¾htîÞô©ì”%~—fl»:óÛFެW¨ ¹”o–o”c×ʰkõò^-Š­ !½œ~ ~§|¤HÖ£Ä$ó‡Ô¹=*´ù 6’_ Á» ó„* C)¨C1¤U\ ²Oƒ R¦ÝUpKÆÌ¹ØIAŽ©wÚq¥Î¥Ó—Š– .¹;¬=¬"CéSåv«p»”9JµX±T%\ˆ÷uj¬Z2«Q‹× Áj&³ZÔÙ­d.ð¿I ñLøß¨ üë¥ ŸÏø÷œLn# ;4bºuº!ùŸˆué&#ø_Ȇüß«Ÿ5x>oðüÑ™Œí¤N½ìK— ñ%t^ŒRð·. 9–á„¶´ºÿÿ~ˀ뇲ѫ øÎ‡'b«¢~»‡}¶º,ä4›dWž…ÌŸÔp1½Í4¿ÏªxÐ'ÿ£AËÇF¬‹A“§®<³/¶Ô—Âß䇂bÀ®lо|ؾBþÄÕêéu³. S·êÆoTO:×λ7K<[iPÔw*{ø\þ´IIŸ^f)F‹%Ý`¶\̘‹ã`'ù„“B9ý‚ɘ[îǸÑל‰—`ˆ‘ÓûCÛÞÝ›ž×ÄRjíüÅÇs†%3z÷æõî//B! _Ž 9ÿhÁ°xF/o\'eˆÓ¯Âï"3ÛT¨ÿ£J¯”÷}Bty"w­”h_FtxŠ]oRòoWïQ2³ÚåQo¿G5ª_MЯÊêV m'ù6<ê1·:ÌŒ S. ‹+Göh²Ú5Yõjw0‡Xº‚vA-3ž·½»gY%Ñ+X4¸3¤+Rbô¨°úÉìåH±RÄ€2³…Õ‚vYMdüxjh½ZX“½IÙ¢ ±ŸY§ÂhPc5¨Ðë•ið=]j©ÊIݚɃzYƒzé]'càgëU"Ûµ¹]'…ð¥¬átZïÙ¼þs÷ PƒÈ J€®3iMš ­§Rû.܆í˽—î÷\FâÌ Y K!ÇmË' rÛ—A8µ{ɼ_¶ å@¿õã1§JáÀg ôè•*xv¬ux8êðhÈö!” Ù5º¹"“¢~ËR|áxض -"Ⱥ7vüÒá™kÕ IǪQÛò!›' ø6xŽØ•O8UL]­š†o¸^3ç\3}ûéÌíê™Ûõ÷Ù°ÄžeÖ%·F‰Ký­¦%·ÎeÏ©OßZÈÐZøàbp÷\øàlx¯„Þ+å €–ËÑÃ’øÞ‘¸ª&Nb Íë.ûJ^”]z”]¢À11êf:Ç6m“ʲNaZ%3,q%Ñ-Ž_pɦúPÐ æ²ZÀ,!øêÀ~B(‚R¸ù×J 3ᎀàa‘a+3üHà_Ah! Ñß:ÁÏt´þëgãk%ô¶xšsÝ)\wsŽ›nGü¿M¥»š3ÜÐí½P0½(,oS|˜çÑ3ÀœˆF=ÈŽý¢}þ1áPl„Y\¤YšÄ”‰e†æW°ÍSù|jª=“yæ ü­¢#¨àð›B3Ía˜Üg_*œ«‰>Õ™¨3’©¾§²vW~§€°_„=»G8„ð/ã?žÿÇýž¤:'"„öt],J£Yö—“PÆUÁj„PuB¸øÏ>IþÇèô‰)Xª!RÚù# H‘Y@Ž V@ÅÛª¯bÀâ"Ÿ°“‚¦@|zŒý¼ûE;:öõŸC ¿™Àþ0#‡:?e€ÿŸ¥êÿ½¢Ï?.©ý^¢òÛ9•ÿ˜Vù¿ãÊ¿Tùy¯òç¹oëÉ/+”·+I‹T'î¨öei´$k>ž(fêæ‡ŸO 4‰õ¡ÈøoÆC[}.ó}¸H&öötoc<}L¡1}MÙ>¦ðG$žÏå7Ç»>þmŒ,i|ÛaÂô«ø¥1Ëÿ_%J_¡¥Þü3æÜ}f—9ûŒ'yΞ;d! # xÏ_úÀ_ùV°ú–%yÃD»"þèª\&’¬S$ò±‘Â&žEÂοå-ƒ^²_1_Ó%éóëh9`ÇE6TùvÏÚ-tRaM¶áç0l¾ 2?hÿËâ2Úz*þ€6ÿ{ my l¹äÑžÿO´çÿ¥ïè3íÛâ]×^xAƒ \»6owï¸ô rÀY ü߻ڹmߺaU·mÛ¸J­7,è×Eóy†€'’ÓäÝb0f*À.ð‰z|Òx °KyZ.ÛôæÑÓï8³oé3¯B'ü·=Ä×{6m›QCɰdN¿ø¿p¶@Æÿâ¹s%ó%sç gÏÞ:•1¬Û§ÌëVgµ«2[TèuŠ¡r>er·qþ—“˱+ Þ­JÁíŠê^2·M>¬K ²:¿W™!’îók%y5< ^ír~] Abùn¹`à¿XƒÙªÎ¨V É#ØÅ/D4B0r¾öµ§â-³r‰Þ½É“i}ê|±2³_•3Hæô©ÒÁày”íUjôFµÈrd£zð¿M?Ÿ^¯J¯QЍ–«SŠlRcŠÔ:Uã{uRõ2zN%ÀÏ‚5Àç:щhщXñ©¤^ÝŒ^ݬ½ÜA £»`¬m:‰ ÎÓébƒÜþK}Â&Eü‡ÌRâWÃŒØ B;Àï“Wª!ƒÆ¯TáÇ{òðåäÕ²a»"Ó; úéõz— -ŸŒÚV Y• [?Áá?æP1áT¿´à\?³à?áP ß0‡Í|•þtîfƒävã¼s=‚ÿͺE—¦ºEÏFˆýË>Ý«~«~}Rïn©·hÅ·´(Z¯†÷l27YCË´ÞEÆÀ{h•?¶,[Ž.' Ï%‰†âʹI¥Ì{Œ›y\‡ì(Û4u"Ï&‰o÷5ÿq»À×vpìhc?¼Ë,lÿÂóÿ‰ÿ)á *(]–ÿ¿”Hé¡–øZ¾ðäEûXÿ£¼¨<3œÿP°\pø›ÑoQþšÿlÊ—‘Îf2þ›áüÇ×ü2ø›ã;|Žúüls¤}à?ÀX(:ÂRnqt.8ÔþKÓÂri ˜zeÜM1Z}©êS9*Kw7 H»…Dàÿ³{$Äÿ l=‰°Mše’FåÛn‘*¬ P$ŸBç*M‰®HQÃ@¡d,L‹ÐÂh:ëv´ |–%XîÈ.`©ç±ŒKX® VdIxêDj¸EûÇ# ÒhÂ^á]ö]9á‘ üÿfDáw3rüù—È^Öüo©çÿïæU=«áÿŸ†Uþ¾_õ».¥Í¤×Õ*û¥J+EhÛÏP¹3E«6Vû÷ä=šnv(øüò1ò3çûSxF|3®LðÏÎò6cx›Ñ}h¾ S0º¯ Ý×Äð½ºÛƹ9äxy5Ðçâö’'_ÄKßÄ­¾Ž“¾I”yÀœyƘ†'ðô–³ô­pý£`\j>n$úÞ zAŸ; Íì…O‚é³àÏs¯Y’wÜ•w¬åW‘ó»c«}›®k·zW»7À\ûÖ]{×\zÖÜû 䣙Ÿù'ðÍÿøAàƒ©ÃÐéÃ`4øß¿~»Q’?hŠç®}·¾Þàg^ý{½`Àÿ½›Ý{×DÀÿ‡¶§Î}ÇÖmÛ†E³§c÷Ñõ‹ºY GZ‘Ù$—XÌ* 3âô9„3\¢®ì­QUø^8ô ê[öÜ»ðéï¡-ñþ5ÑŽCË’iù¬A!ðN÷ÎÌé<‰~áÂ9 ñ¬~Ñ´Þ½½;“g2G4{£DjŒvåÈFÅà•‚O)Ñù!fÿ„dÿ³,Çëä][•ÅêŒNešH™Ö¡†Zôj<±"­è‡ó¿si"¢þH>àœÿ[5h• YDëh‚A$Q+ Ó¨¹¼áôpåBÑ‚^þˆVü€:ZG€R?Ò¥Þ­ѬÆhT¡Õ)G@† h"ÓÕiÀÿVmÔuªáuÊa¤ JRH£* ÌB¬Ó­Ý{"àß®Áþ·jð€üÚÑâÓ }º©g3øâÓ=g³‡/ôŸÍjÕNhÖŒë<“Úg×ñ.À¿çâ½aÊü.à »§c6eÿ«Rôb[Šós(ÇÑ={£~ܱ4uµžøŠ0 {À²°å|fÕ©øÆs}æ&ª§jÆì*Çí«€ðð§¯ÔÌ]¯°ã‚üw(±)CGÌd«ÀÓ×jç%·›—ÝÚ¤îí‹nÍ .Kî-k>Ëޭ뢠ž•€¾%ßžï‰Oïrð¤ý•°®•ÈöuVç·g7fd;f|•?².Z[‹™YŸ“¦N-dˆ{“TñxE,”üyv¹[à†À:g‰†üp¿·\?pÔ/ÂÉ¿$Ën{GlG­¡#Ôÿ5üAÇðÇ¿ôÿ‘¾ðß"U¶#åÿ«8«X?Ë_‹hªÐÛðÈøÏó Ê,€Ê໘ãü§¹€˜1Ü) OÓcþCæäøR¸hª3šíÆ ¦àû?…á´…é{ø[¥°-‘pòs-Òx(ü§EYâ‚÷èPK0D¶ŽH‰ 2N1J =Ÿ¡WÌ8Q#Ð%jŒf©/ÜQ^/PÞ*’V@íß%îf¶Ó‰ëI¤å(Ò,Cq YÀS[b–¡‡NÇè`BMŒ­ƒ1µÚS‰}ê ÿõ‰ÀÿTÒ± ­Ü5ÅXª®“ÚÜIAÄ6q-;ÈAã¦Z…ýŸVâ¿t“þ}Pþ7ãJ¿Ÿ•ÿ£Dàÿ§% àÿ¥šXÖøÝ"ù·5ü•9ªòƒª?ëQýÔ¡ü¦^îÙåµŹ»Ê£9Ý©ZMñ'Ë£N²ts"ôÓC.%ú›Fû˜ }©Q~TA€ßß Öþê25¦ÎÿHJ¤ XÍׄægDó»D÷¿ Šò¶‰öµ‰ö°Nõt®Žˆ6ÄÏ~Œ_½ò>qùeòüAòÂAŠôYüò>~Ÿ1»>òŒ5sÈ™{É]x#XzÉšŒ¿ã.ƒ|ŠÞø&jMfóo˜s¨  Mƒ¼d̃õÀ|4#(\¶šÌ˜xNCzÃXüÀA.ð"|ö™ßĦûàš AßŽÇ äy¨6n‰êð¾ï=‚Nuáó?Æ€ÿÏ‚ÑI„çaSAãø-®âÕ["ür^€ÿÆÎ­ë{·Ä‡.}/ÜöÜ{@ðû¯‹¶Û6í[Ö­¯w\i Ø´kX2/Ÿº\2¤Ÿ'>™ÞtJøX9( »Yr±ó L—IÔcËã/GaC×s>ò‡>sg>„O½ ˜:pyv½s×±ꈅ %³çîMÉ›:™0®pÞ hV¿ø?©›7q*kD#¥W9ºS•Þ¦ѤÖ¬V«äû»VJrhҺݨu³œäP%wJ€nˆ.5Z»B¨ŒÿLà¶X)ø/Rðk“óÄùß!ïüÛ‰€ñ^-v‹­\Á?•`ÆÇÎ2ˆ:4ì„Èœ»bY🇿]S8¬ÁRe÷Ce¡@) £Ä­ ! *¡õÊ!õJa¸4¨ÒŽ µjEÿ*¿JyßJ¹Àz¥ˆV¨GÔ]šl‘«SƒÓBf6©2ZÔ¹@~$­Øþ3iCg3ûu3ûÎdôœIëeôêgµhŃºuÓ/ܸt¯ïº2‡ß €Ãÿ¸q(sz uD­˜™ëug°À8hܾ¾­RÜoV"6.h3ÌmÐM®;Øj5dñÈ?c_3mW3ëP;ëT7ãX;ãT=­NâÜš¹Z Ž0f_¿4j[>bWð‡¿à¿âѱäÞ’zv¬zwùq-yŠÖzÖ‚{¤AÝ‹bIpÿrØÈcf•9!e .2ÅR¾x=f`;ab#nfY8¹;²;º™8³š>=›.îIzXÅ»ËrÎåZçFYä mröÙ<ûlŽ]6Ç&‡cqÌÿXÀ×äÿ þÓ,ð¯÷ù$GPÿÇüö7øÌÏCÂùŸ²J ´Lð·üÿ£¼Ìø^¾§¹,ÿS ÿ³Ü(ˆÿ®f?à?Óøo"ã?ž¿ùþSd‡|Qò§Ãß:•cþ§Ézþxò?æ?Èàd‰Æ‡P¦±AƉAçÓCÎÞ¥.çé´&h ehÌæ“W Ô¶ŠÕ‹ˆÏ‹I‡…„ý»Ø~¶“AØHĤBâKn4X®Ë]¾áª\©%Vd‚Ý¿„ÆA$’âÏb1º˜Pãë¢Å_.‚ÌY¢ŒÿrÀÿTC±d^ÄòŒ°ûì±-Vw“Ðé„„T«»Ø§Rìïj±_´þ¥—ôëùßM*ÿvVñY‡ÿŸV´pþÿçœê¿M*ýrLé•þ?ê$¿oT=¨’_{¨´p_i²Oüï ùw)ú·Ë{5n·È{ŠTEŠmß6‚—J¤X›ÙH}DðH \da'˜vfÐG‰Z4Ê_8=¥4Hæ ª3†T ôùÈN¥ð6¥°&Åð :%ÿ:¥`¨GjÂkq«S ªRð~Jt¯’ónR ‡2¡EÓ¡)l'‡¶k„‰´èà8`jìu~ 9ª['±÷TH|"E|2µûTj牄­ØÎS)ݺ™çïŒ ˜>ÀÃÿ0õŽ}\p(û“ת¦oÔ¡†S¤ýÙkuÝvOÁ(%øó]†ùͧÓëu’[õÓŗﯷ.›¶«žs¬—\mZ¼Ö¼t½yñZ“äZ½äF\`Ò¾bØú \`Ê©ä‡ÌÕ[´èÖŠøïÙ±âÓµê'Zñí”út,{·¯ ­®†ô,…BÚïæKYRöô gf…?½ÂŸ G×b'Ö⦗c¦…3Û c뉃+É}SIõÂÜ2í>Ç%‡k›E͉¶ÎÚesÐ@3æ•|¦ã†Ý×ü?¶€ãÁ­ãý¸Ž÷yþ5ÿqÿj‘ú•ÒC©2þSSB¨ÉÁæIÔÄ‹êø/ð6ãyšr=L8n¦ ü)Ä ñßÍô+þ›üÿØhýŸó@ù+þ[âüGK½ÀYçÿ‡üBZ]@¤Ä]J 6ÈÔ-åžjŠÓîOÓšÉU_)Pß.Öxùzñ€ð­c‡w°ý,l;–p“¤_RûmBìÚ{j˜+äÒ/bI†X‚oˆÅô‰ úÄd}ð?ݘnHÈ8Oå]Âî™bÅT¬ÜkºõúcSLl5;Ì!¼/ƾ«À~Þ€ý¢“ø¯}Ä_Éÿnuøÿ A ÿŸVtþ´vâ+Ú¿]ÒøYÕT>êüˆÔÞ·ŸW«l•Ê-«Mæ«ögjµ&ž¬ŒÒ{À6ȧ]È»t).Ð(ÆÏTèkðÿÂsøÆ…ÿƒËö‚"/`úRX~GbøãbB½@aús(Â`ë8?Ç|oïöˆŒõÑ›øÅÏIûŸS>¦nHßü˜±õ!eç}ÂÞ›ø•w‰k¯b—ù Ï’çÜy(Þ Wßñ¥ï+ø+Àÿ‚åQÒoøËyKoðStÔêþ¿a/ÂËkÎ"[#;Ác/dîð"bî5]‚,€½ö2|a×o|ÇkdÏktßc­ÜƒÖ®v®\í@÷m¹õ£S½ÞÃ{>ß_ Œ_ó"íü< ;ðyæ5¸u«{ó¦øQ÷j'ðïV×ÎÍNd·znŠÁö®vnÙµH©µ«–õ4®ßº<êá\|8x2½K;¾žÌ.RðIƘ)‡xAÐE+^äaÊ ‚#[>±Ç?Óæ^ûN¼rëÛqjY·©[7{*¹P4¯wwN7oòDæ¸vúÔ™œƒ{ çïƒLœÊÕLVO©0ÁZÃëH~5rhó§ÒÕ*ûrËbÌDtÆ«û”½‚[›ŠFd79¼M>¤G…†/þvÈù´’Ü€ÿÍrnʾíò>­˜O»\`79²K›Q£â_ˆÝŒ!Ð1-P¦’å¨I‚Ä Gr:{\]دF"G «Ð"{Сf`¾R`µ‚'ØP­b@B`›Ýg7r¹`Ĥ4föhÜ¢ÿƒf ƃþ@þqÛr@ô䵚™›õ³7ê!öO^A”\áq P>Ȇ‹ö\¼×¨“ê6È5£>ž²®Xtj\½ÑZ¾Ú¼r£eùFËÒÆ…«uÓŽU`¨Ñd÷bÿ¤cÕÜuÙê­këªgçºo7hÞµeÙ«sÝ¿gÕ_¼äÝ.ñl•úv®‰7ÂF¶[Ì‘uÆÀ «OÊ\á®EMmDÏmÅ.¬ÇίFO¯ÆNIã¦Vâ§7’ç¥é³I-1Eõܨ‡t¯û¬kw9«Ì(›¬(û¬(§LžS6ûJ.û*X@à çÿ, i•βƅÞ_Ë,××üÿÁnÿï+‚P3$€ü_ðß<%Ä ž ä`JR™ŒÿæÀ€ÿ1ÿþþüÝeð7aº3]M¿Èìü‡`‰Ã(„C‰h&ÛüIÁ7üÇFPdü7ÿšÿÿÿþ£ñÑþèüRȨ˘@jl€Qrðùüˆ³¥Ü3ͱ'Rufr5× ´vJ4_?R|Sªðö±ü›ÇÄ·±7Åè ðóÉ3³L¹€êI6I—O2àcE61/";?±'>FL¾òìß½Ö¶f]‹fþ\~¼x®hþÌÙÓ9'Ò¦NeÌœÍY0¼3îîÌé¼qíÌ1­¬5n§2³M!²I>ø_!çü˜`[„?$šcÆ¥$‹r’C£ª›H+¸ÿ£W“Ö&Ô­Ò …É·èÑBtm"¹4+¸µ+yµÝ›0Oà—zd«FX¹¢×ìŠ@N—iBþ/=é2KI[8“± 2¦ÎëQ P R”è– m‘¬W¨Rð«Sô¨Sðª•÷®!ùÖÉ6(„¢y¤òþͪAÊþM*~ZáÀ‘&»Ìî ó”|”üZÔ‚[5hP4«1EÚ1½§R:5ãÄZI ‘Vb»z\ YùÐ ³[/«ß0’ÿˆIɰIÉ(å!°„ÏyÆù?åP9wõáço4@àò¨ÁF­Ÿ€Sôš÷^ºß¦—Õr*½ë\ü¶I‹'“VeSÖåóµËךV®·J¯µ€àeξ4eWuü†1›2ð¼‰ä_ñèòÃsÅ«䇨¿гØ+ /úv,ùu®…öîЇWÂû¶Ø£;‚ÉMÞø†`lS8º7¾—8µ0±“0µ?ÚIÙJ›ZOÙHH­h‰Î*cE1oÝc[߉²ÌZf þŽQNéÇLcß!‡ç˜Ã»’ùšÉ³ øÚŽÉÊ`é˜ÿè:H†5®ÔG’mõ9êù„Sþ_‡Hû2™öá J 2M ¤ !þ›ÅúYÄøR£|ÌÞ¾—éQøw7f{á¿ñ—*À”áb‚Ÿÿ¥»3=Œÿü9~&8ü!üËv~šÉöüPdüÇ·ýXâüÇ·úÍÿ¯áò¿,ëâ7Hò¬„6±AVÀÿ´à‹w# Ê8ºÍ1§€ÿó¹Z÷µöJ´ß÷,Cn+A^*ŸgÊM„ý°.ÕFgù§X±v\€‚¶wf‘rŒ3.Bò'drÎò.î@ò7"–˜aOl°š«X›+6ŒÍ°±Í$‹|"ü-?©$üC3ÿÿ1*÷›I…ßÏ£Mþ–ªÿ¿m©æï—üÿ}Få—c ÿ8¤$Ûó£öºAu¯‚¼úHuî¾bžfGšfmì‰Ržþ}úåì“pÏ@£è@€¿± À4*Ðüh°¯dΤp‚̸ÁhŸZm—Ÿïg);…aÅ÷³q}­@$9ç`¶,’› ÍÁN5Ÿ^2ËžÕNž&ÇŽ’™ÝJ~}*CŠ!ý¤NB@T ¾UJ¾*ÞõJžÕ$÷j’W‚o£‚>ñªWôm'‡t¨‡µ«…wi2»µ8ÍŠ‘ Š àz¥°VuVï™Ø~ÝäNÍX|´Q»ª°I™ßFŽî>™Ô¯Ÿ1|>gàü½¾ ÷/ ´!ü™Ý ¼íÂùüµ:éí–Å› ×ëg¯ÔÀ'£–¥P&À–!2Èk>Þ¡Ÿ3d\¦¬þ8wýÛ¬é›oSÖ^%®¾IX…ràcòÖó¨Å=¶lQ˜/y#Xz'”ÿ?Å®ŽÛøƒÿáÝŸNŸ‘^øÈYþÀ^zÏZ„÷W‘³h7d-æO=™~1ÿ-ý†»ú޹ô"|ö hr×o|Ãm`Õ¹gùwûvÿ¶sßÎÞ=çþ}÷þï¡—þcÏÆ ðãóèðÁqP @°îÒ-½Ö¶äؼv½cëjÇæ•vxî\A;W¬ê×l7lšöìÛ¶¬›VÍj–M öW®™Vnš×lQkWMK. uÛ Ý<±VB­rd!É5 ³Š#^fc§ÿP°°s r–‹þÞ ECG_zõ¢»À,j¤—Ë6.?]Ò/™;™;*kæTÆ„NÒì™ôyÝìyÝÉÙ;3:Ùã'’zÉ‚NEF§JD«R@%Ñù1fûˆ`QD0¹ƒ/À.W¨ØÕ«9×+»ˆÔáZ½{ÔC»Uüå=Z\úNøœò h Ý®ÇÜšå}ÛÔCjÕ¼ïaŽÙ˜5_é #Çbúã¶ÂÅKiSj1Sª‚>Åà.%¯^eß~…àRp+æWCôª”÷®Tôü_Er ’àZEtæW<êä|êå}›”€ü" šX›Ù£Ãé Ój‰þ­ÊôfeZ‹ ½C#ÒtŸˆ‰µcÑì tˆŒ€j“©ýg³† ó†/\*è¿xt|æ ø©Ø>fõRúÂÕ:ɵúù+µ Ž5 Û üú00 üŒpË™ P÷ù;ãe³vÕ3¶UïQæwn[½Õ¾æÜØß¸…züçìjþc–åã¶å`+‹·š—\[¥îík^Ý;ƒ[½ÿUoѺÏVP?‚ØàzHÿjHÏjxh9´gƒ>t ˜~=·%œØŒߎžÞOœ“Áb+vd;~x?eê0S²—µ°=¹ugD’×Ü›_LjÊç;çóoäñòøŽù|{P’c¾À)/Ê!W`›…zAVKÜ2y¸Ò9»L6w“ư†—L–íqÚ?¦}ÍW&Ýžé‘6øû×_â/iÖH_Ö|ñäóÿ¯àoŒóícá_–üÿ‚ÿ\Èö”¯øoBs5Št¹  s¿à?ߟ‚$kþO{ò£áß÷,ÐÊï—£^h·ÿß┟l¯‹Ïÿclâ­’‚̲B " ËÙg[„§µg35×ò5w ´^>Ô|õ˜ü¾Œ üÿ®Zå»j¹ŸV‘*Hß•É}z¨ð¾@áUžÂ³t…õxÂR6©0Hy¡f~ÅUì¡-VhP ÷(¤û¦r÷I÷Œ ÷/cEÆh èKbݬͅÐçGš¤“V¢I»é¨¿„w~þ¡û¥˜ôor¿UøÝ´ ÿ *^RøÿqIíòoÈ¿žQøÿóˆòÿîSø±HñC³ÒóZÕ'ê ÅêãwÔ2TëRN–Çž,äèåÒ.¤…š&[ÄRó‚ JT°)ZI 6“¹€Yt0ª­ŽÈds,n5z† ±‚­ÙÀüp;n„=ˆzEêbfn ðFXÇDØ¥„]+ î`嬯u½M]þ¸þ1aù'髟r÷¾ÉD+ïÓ6 ø&mô!yãuìÊKáÒ‹(´(ü>våCÌÊûhé;áòw [ŸbÖ>FI¿‹ÝøIÜægáêgÁ :;,ƒ?è# ½¼¦ÍáWìùŒà79öß0ß±–_Ó%/"æ^FÎïLnºnºì¸ ñÿfß¾[ßž[ß®{ßž7º¶]Oã?ŒŒÃgA€ ë,Ýz¤7;–o´¯;¶®Ø5ÖíšÑÄ~«z)µvɬzÝ¢~Ó²aâ~ìvÅøéòå2©Q9¼¬QžHJ ‹§uÌî×J¬Sޏ‹ÝHÁÌ…˜!‡ GÇNrå xØùB}·•ÈŸ™ãïBw[¶ìá7H/>Y1|´pêî쉌i4imúT2XÀ™¬EÝÜÌÉ“iƒê1]ʬňyÿjâ­RÌáfU€ÝÇ..bFeò6-êî#瘃§-Šî}ZÁš¡-DwÔü'ÞlR¸Þs»MÍ¥–x£siRðn"T¨¸åcÖ™˜“¨ÎÀÔ2•M†LY³ú±“*übØZ,v)zv}Ú1ŸÌ«šäY)ïU¡àÕªî/Ò ©$ÞÕ*¸Wb·ª nurÞŠþ"5H¬Á>Õ«ÍlSéT mUâ€ÚT9ê|‘†W—fT³³E>çuªG£µàÓéÀÿ!ƒüÁ 2ò_* ÊJ€ã# ÀWÁ&lÊg«çœjà)±¯ž¶*7 1}ÐsþnëéŒzd‘Á~£bþ’«Rü7[áeívHöÞ´èÔ¸àP🱯pª†jBꊶt.{´¯xv­úö¬y‹×ü öo‡î„ m…mÓ†6#Ö"ú×"@Ëá½ëŒ¡áÌóø…½É^Âü^ÂìnÒÔvÂØVüèNâø^êÜ^šd/{y+O²”3<”ZÝ H~È /aûæEYäó­óyŽùÜ«w9×‘à…‹n0A[€@|›¾l¨uŽÐæ˜ÿøì#þ§3m~<çãü?†ü×üÇßÀô¥ìÀWz¸ÕÑä·+à?äç¤P³ÄJB°i|I\€é×üzϼÿúºÿ#k½ãùŸánò5ÿA‚YQ1¡f±a”¸p³ø³xøŸx´þûÿyæI2þ§,RÐÿAõâ?ºSÀñ?>Èþr#ÌŠé—+8†­Ñºý‰§¦3´Wò´·îŸ8| þò±Æ»§êßV©ý¨Fé§õò?«'œÿ®†øwU¤Ÿ”Ë~,ÿ¾HþåÒ^¶™ŒI¸Š4b_ Öá…ÕÝÆÊ¯b%6ho¡9©B,2#Aæ/1Ř¡ÅâZGb‡+Öï/7ÅP åvRI/òÑE?«& ø‹H¿ê—ÿÏQÿ¿ŸAðÇw~¢£^²9o¿ž!Ùí¯ü“nå-•­§j’É{ÚýÙÚíÉêOâÏ”ðuséúia—àPlÐ÷w(C(²Ç¥!c„Y+*ÜFnóæ†#q"¬™ F$-‚nÎuþ ÃlãÃÐyó8šCÃ>ŽeO·O‹¸q/4¸•™µœØþ6cîsêò—ߦ­~ÌÚüœ·û]þÁóžÉ¼`ûsæè›Ô­÷IëïâWßÄJß u%0‚OP8W>–ÁðZàGQ«À$†äsñwå3oõ[Žô}áuÄ,°ïçÆ÷ƒ'ŸÓæ_±—Þp¥oØËÏÃg÷ü'ö|ÆÐ¢ð­þÍ«ÝëN¢­ë]ÛÎ=»®ýûžhÔ”ø­Äx €¦OÈ&…®¹to^ëXqh–Ú6‚€ÿþW-ë—M« óCøß¢ÖƒÖ)Uhtó…Ç’ó$F–.?^z$5x¸ [8y"[¬.¬R ¾G¸–„™ ± LK<Ë%è³±³ŒÜ‚[ßFö¼ôí^oZ§VC Ñ-þOi¥Oj%NhÅLŸˆGÒIœ?9{2}âDÚˆV|¯ øß,çWGt}J¸ú³)ÀL(˜>T2xD2kÑr;Ï:CoSõ‘}»ÔüZˆ®Ã§Â‡Î×ìkê•®VcWj ·=ëT½)ÝÈÆÌS°Ëy-:¦úà´Ý”ü${H.¢ŸÔ£ä#RöèTòì$z7c^5˜ûS¢k¥‚G•‚w³šo»f`¼ T"O±ëàG5D÷&yßÕ°NÕÈ.2S¬Áî"ÓÛU€ümÊA-мN5a—zL§znè{UV‹½M…ÝA/ˆŸHê×Íø_¼ü?¶€!Yÿg”òØ>dZ2nQ 94móNZ=0}8I-7{Ôwá^û™L€¿H?·ïbáõ þ¥« W–®7¯»tnºu­ºtl¸Š ˜wªæÏ9ÖÏ;5Ì:ÔÍ:Ô"¸Ý²æÑ¹áÓ i~ßžuÿ¾UßîõÀÞ ¾Íà~ ÿVøÀVäàcx3¾ÉìƒVƒœQ4#+qq?ii/ia7qz;yb7ub?cv?[ò,wy7i=oj6[$N,)ãòï2¼sY7sxŽy£<)X@×1s‰ëÏ·½#°¹#°Ë8 B€ï˜+°Ïþ ,³¹¸²8öß[Ó‡?¾Î{ ÿ´HKò8ç_~ÀüË£2!Ò&Sæi¡HÀÿ¤jb°9°ç?²€@J\€Y¬?%ÆÏ ç¿ÀÓ”ïqÄ\Çë¿ #œÿG_ºSdú!ÿeÝ ”Qc!ü#þS€ÿ 4 ~翬ÿƒš?@þïù/„à{ÅXÆø£.?6Ð6>Ð.)ؼ,ŸF-f™TŒZâ û’õ'2t%ygVîén—Ÿ=Òx^F~óTù}•ÜçâkÐD蟀*Q—æÛÇØ»"Âó»Ø^¶™†Ic”f¸Ä0Lä5ºc×Q¨Ø+¢bEf„3ì‘9öˆŠ=±Àj°Ö[Šý¾ØdiY ¸,ÿ<—ø¾zþ‡FÂ?wÕCúõ°âoÆ•~7­òÇ9U€?šö°¨.òFþiµ_“ÿiHõ÷©ü¤KõÛ6Õ—µªÿ¥‡÷uúsOu¤ª‹Ó*ž»ÃÑψ¼j’bll%;ñý褘0‹ãJÑ–èˆ.šˆiÁ‰¤ ˜–•E3cDRXtsӂ˲ä°- {Í>šæy%‘æØgX'°mÁ’Ù×Ò"oß hd$-ÄÕ¼Hû$y¼ø>}ícæÆ§œíïîìÊÞý˜±õ9gïcÆXÀ²ö?gì~LÙ|Ÿ°Fð6ÕP¼ uá·²yß ¤9‹ €?XÀ7ìe°¼À'¯C§_…L½Eí tóKðØ~ÄÌ ¦ä-GúFvëâ›°¹WA³Ï½ÇwolÞèYsj_¿&Ú¹Õ»ï>øÌkøÀwì0]~› ØÁÑ hÙ° í[Ý«WÛ¤öMKÖõKµR˺‹:)¥zɸÒþªIÀÊÓJ„îóf îÏž»·x¾díBé²^ñŒvîˆFŠXKX£|Ÿx=3‹ÅŒ¸˜¾€tŽérgê.°ž…Õ¿ nÝwmÚvhXº\ºtþñÌÉüÙYÀÿ1 á˜vô¤6r™Ihð¾VʘV ™ß¥Ù*ïß(ïUI¼ù³¹™Ü#^*T¸xŸ`PD¼üTÞJ€UïAÝÀ>Àn²_=v«O+¨Wǧ³ª’³®–·{ŠÙUoÖ+¹W)»É;¦cÆI˜!Scaäz#×íÛéSgXbÌgH1 KÉ£CÅ£UÁ£™àQ‹¹W\+äÿnUò^µ ®@~ø%Ý'Cêä]ë<š”|[•:ÕÂ!üÿÛ•#ˆMrA­JÁMò~J‘ŠPDŽîRŠÔùjÜVeF³" , “ÌëÒŒkÇ÷œLГ…ÿówú ú ïÿ‡‹GM‹ÇÌŒSNPKg¬ŸÎÛUf¬+§,ŸŽ›?1}ü5*î=—ßz*Ôw¾`Ò¢|ζzñJ¨ðàÿ×ÝDî]Ë·šáÃûà?”K×[¯¡ŸÒ[mëî›ÞÝ›¾âMÿHûëýk}@þPÔð!òGnÐüÏÛœ‘uöÐ&wd“?º%@mÿýøÙíøÉ½¤™géóY’üåÃü•½ÜÅõœ i^ßpòã&aì#®ß–JõÑÖé³<¡qžÐ4_HÍXå|D}´,°Ë8f œÐ3Ê>ÌZesrxWà™ÅqÌd;d±2™ö »tºmÍ&5Ò„'y<Ò?ÃAö#Éú?SY6 T„Ùà »•8üáø_YÿÇ‹rÄ÷/ü?Úüÿuÿÿ ÿÝÌ6~Yÿåúš|Éÿæ_åÿïù23ÌÑØŽeÈo‘tœÿ£¨ÀPºÐüO ±…ÀddlŸìj—n{‡a]±¨ˆ2kŠ7êJ¹0a0‘«?wné¾új!yóêÞC¥ƒÇÄWeØ»2ìC)ö¹ àÿ¾ulò±LÄÿå…Ù(Ò‡bm~¤B©Vb…[ ÍÐÌçÇX™ Vi‡5^ÇD £!Ø<›¸‘ p˜%÷¾øã2ìçuØ?µaÿÒMø¹ÿSüý”êfÕþ¼@ÆÏüþ~A]u€ÿ?«ÿ}ù;‘Ú·mä×õäݧd€ÿÔ}-€{†n]’^yô©;¼‹ÙŒ‹©a—B)ñ!V1!ÖþWs“,AÑT|t*<£iGÒ‘ø4*/Ò\& ŸfŰ è6|šu4Ë6†îG¿ž@wN¡ßLe\Ë`^Ig_Íà:gò\²¸nù ¯¡¡õ!q¬ŠýÄ‘«ßd­¿K“¾I‘¾ÏXÿ6gûSîÔ` o³v¾Ißü6cë»ì=Чô­Oé;à¯c–_ $¯ù‹h] -|ÃEmÈüÇzK›‡ç{ |äú„)yI› ØðÚ }1‡öˆÒàÛ$ï"^Ͻð<ðݾ޳~­{õŠhíz÷¶kß÷XÀ?ºükËc`Ó½Ý&ã*ÞrïÝóíºönË…,RkÍ«WÌj¤¦k¦•¨ísé `ŒÀø©Tv{ËÂùÂ)½ü©3wÐÌœ³Å‹gîÏžÊ?•Ш~»–‰Y%`Fì,;#×`F­TÎnpÕ¾wýîºmÛºåK¥KÅóº9£šñÀùa ÞĉØÙS PŒ©Çi¢»W†5¢ÄJÀÿŸj¹Û1ÛB%3Ì#œÍÃÎ`%˜q¥œc½âíþÓ~bmHãÞ5ØzâÍZÒ•rŒZ!gz‚YU¯Õ*»•+ݾG²N#^ŒÇÎršL»öâÍ)*}H+°—è-–ó)¹¶(ºÖoWa.O1—J9×e÷j÷*̵ZîVáFÉyÊHÐs2¼^ÞKDíP þ÷j±;”É-òÁ- !ÍòÁð¡˜#R‰êRÿÛU9 r‘ rám*L X;¶÷Dbï™Ô^Ý ü¦à®ÓYÝz9Àó¡‹÷ÆŒ‹ÆÍŒQJÀþS–exŸÈ?fV:t¹h/6Èo;䟻;jò|à/q¨[¾Ö´àXZ¾ÑðÇ{>ðŽNx]©]YƒŒüÍø7¬º¶mzж}{vúv‚ú·‚7‚€ÿkÁ}á€ýáúè.{l‡5ºÉÜ`n±‡ü€ýáÄ–pbC0ÚŽžÜNÚK›<Èš?È]z–/ݽ» ±1·«7án%;´(Ò±cvO`œ'0ÉP²xf9<Ë\>RŽ€šÍ7ÏXdò-3vYQNY‚«ÙQ7„W²…NÙB‡ìh;€.÷JÇ)›íðÇùÃÿ˜ÿÇ™Åûp[ 9^dFM·ËþøŸiû5ÿeùßòˆÿ2ýEø÷E³e€ÿ™ÀŽøïÿGò €ðµàcþãÀò4‘ñŸ‚ó„J€JL¨é‘DšͲñ?‘mŽÄ= ÿÇüO‹¶ÄùJ µN¶þ'†Ø%„8$…8¦F8eÒî²Køvå±Öõ‰Ô¶dÓ®Ô‹½™ç³ 'rµgïh/ÜÓÞWÝ,TØ+"=/Á^£Þß^Ý%æv³°­4ÂF &‰'MGǸÄ~ºœ(D¡ÑSáéuÒC;"X@‘9VbŽ•ZbOí°Z'ÔöïñUœ¢£{^vSH¯ï??& 9Ÿ-Ø¿üûHÿ5,ÿ‡ •?Îü5þ[¢þç% °€ßÎjüzFãWãÿèWÿ™ˆüM«ÚëzõýJõÕÇš³…ZCy'Ez Éç*b òõ³YFitãÄ0J|¨El¨ Îÿã‰yhh^„UL¤U,Í2†NeXÄ2àIcZÄ1-c™Ö1 «†M,Ý.Žáéá”~59üFJ¸sjRZÄ ô uÏ óÎõÎ ñ¼âu/Ìçn¨ï`¤ÂÀŸÐ.ŒZ·´¾À'ûÑ3×~rwïGyÛ³6zAwzÿÅÏ ^‚€€~šðóû/A?Ë·†ÞÆ­¼ŽZÄ—†?Ç®à.¾g!È¿e,¼¡Ï¿¦Ûçàýká-}ôõˆ_„Oïøoú à·}=™~¹ð¶ø>Rò*dî¹?:r …ÀÆuñÊUd[·Q#èÐgt_vó#:>æÖ»y»uA'ÂÐJGÿž[ßæµ©UýµFjV¹d\±ͤB*kû,>\0|°pá¡ä⣥ Åsú÷&OçOÌ›9}gI¿hI¿`þÌÉ“éÿ_oÝÖºê.‘Af¦813£ÌÌl™-É2ȶ,23sÌL’-333Sl‡öÎÞzÚž××ö¶}·oÜûîxÿ²’œÝÓÛ;Æ7ÖXvl'c'û›sþ0ç¸xR‡¾ ²Ï†LS u"ìÿ1l2R‹kžtæ×øÌ}ë8°§]·«^ 7üO™–H˜'ÏJÄÏKQæ$)óbÉÀÿK’Ôi±x.ÜÏÙødàµ(ë2¤A.¤œ‡PÈdJ«ÚMh‹N§NAÛ.~ûnŒs;±娂°lB×BÚu(½ZÈ aÕ,àR±Í†t™(Õ„)‚3 œÖ èAØLðy!]ú1Nà'ta<:0>Í>ç>§VŒK½cÛˆ¶o€ìØA±>¡ ÿ!шañ¨A¡°t@7Ê¿/ÐÏÆK“Hg Æt ðÿùJQF$’G$RG¥hòtøþ—, û_>{D){B¥øI¯jɰfÑ zÙ¨~V§^Ò¨˜ÑªÏaå¢>™¬NIf¿|6¼à£ŸðY5mÞ°hÛnÇu‚'¼ákß J`ûuëXû¶;ݼí€Çþ}‡¾C§wî‘ûÔ›{0~2u:uOþ<ÿßçÿ:ñžº÷è“=õyò¿ï§û#bÜ `<ôxþÿí0o 1X')D„€ßúÿ~®™5VøŸ—ü3â Èÿ?ø?Ø85Ø”Àÿ4¼5#Ü&3Ú.h_šàP•„«O±h¦·§év¥©õДûiÊc ™q¦ôtºÄB¦èj¦Àv&j? :ÍA\dC×ÙÈËLäuœ†:LEí&£v(¨¥dh>š$B£Q¨`L§7ƒ¦Æ]eЬ4‚ª :c¨Ñj·‡<£k±ÐA2t‰xY‚øüñ‡.ÄŸ9ˆEþÛæ¿Ï ü%áÿ¹&úÿmŠÿ¯-1Püûºà÷Ì_ø£"_‡Dß÷‰ïäÿó/î¹úRtóKÙ³_ËŸÿRòôç¢[À×â»ŸŠŸ~ȹ¼až€*¾,¿ BÀ}ãЭ7ÄÀ¼¿‹ŸÙz³þ2z æ~Sà6hžà7w´xºJ€WÑÛàyºöÜoå©ÏÒçü™ËÄ‘ÃàÔè}‚wkÞp‡9s>vÿ_Ô­\Ö¯!`F»ÈLµäü0ÊÅ\…üA9x©F§zÑðñ’I#¼ÕkÝÁ“ÿ®|¥ –?0¿eï—À‡‡®@õàyâ:xæÎOøÅ‹{á3rî;r8ú?s1w>1±xAX¼$.ç9qþмtAž?›;%Ï“§/( §”ùòÔaâÌI2,ÿæÖeúÊUÖÊUþÊiþÜFÆÀhbich|±·o¡{y°gEˆWywy_UHpu(¾QF®ÅjB£«C"ªBÂ*ƒñø²ÀÐò |ip(H®JñþÅa¾Å‘^%QÞ%QžÀü?’ ÿÿ¼øó[ÿõÀ½óÉëÿÌpsPðBÀÓAå^á@5þ+ÿÿÕÊ?Ïÿ÷è}Ç á[ÿŸoüˆ$O½XCOýXOÝù?ïüÏoü¯ òÞú/ùçù–?Ñà/Û¾<óSŒa¾ûŸd”hh üOñ"írŽE n%‰ÎI¶µÉֵɆõIZ ‰›’´Rz¥{â%؉¢ÃÁ z:Z¢@)Ð>nz˜ŒÜKDl‘›qÈ5z•ˆšI€&ˆÐp$ÔuûA­î¨ÇöèZ+LµªÚYk‚xl5YAŽÇ =,°A„Ž©Ðm.òM9êç&äßô @òÿ¯“èŸãÿÿç2ìÿÿµ%üÿ?Ö…ÿm…ÈÿÏ3ÂÇþ2,ôa@èe'öº {Z‹Ý*Å.eI 0eZRäk”æF+3#á¶NT¼Q Þ €| RÁ'#Œ¨‘¦àÿÔh³{ù§M`ù“,¨DK ÿ”5ÜžîÌÂ{D…ÔÄ‘Z’R›I©ÕÁÄ|×ÐLÿ#ÿl#ß,C¯Ÿ\½Àíðbͨ2Íè2U|­VD½fl­F\µFb•FR¥vR•^B:½×²t=”}¼ò2cïcÁÙOÅO>\~.¼zŸ{ñ!ï_KŸ~-¹ü¾âÙ—’go²Îßfž¿K?{Ã8~C;z•´÷&qw5ì-yï]ÜÞ[ÒîÞ“w?%Àg„îCÀ{ÂÖ»˜í×ë/ð+7‹çÞÓ'ÞS—ów÷kAO#Ö_m¼ \QàÎg ^rçÍ‘9ràž:ŽÀûncO<'/\á½çްÿ\FÏ\FN‡Žq§VýÇ&¼•Ÿ=õú=øY· Oo¬XR*YP(º_ð)XVÈ_VÊ›•ɘgÎId¬Jå­Kæí)¯H³¦d)­"…|–t´vR9#N@H!ÅtÈ|B—uíÜuc×{bظ¡R¸¨ÀXR¤­(R—RWi Ò) RÔqê’TÊœyD0Œ èã÷mÇðò=žÿÓ!‘H¶zTé6£¬º…m;ì:1N-]Òäÿ5v¤ViTB:Àÿùì ã4è!¡HAJ“!ÉB)Uר%C|7ÊbLÀ•´ëFÛµ@¶Ík#Ê£åZ±¯AÛ6"Ú —z¤E5dÚ‚vê ê îåŠF Gvcüúøý;ž´?,BИa@ß… îÁ„ö D‚*`X4~Rš:!™6,žÂ‡ÿ‡e˜<ÿ?ÈæŸT)˜Õ(YÐ.Ÿ×.!`Z½xRµpüQþ¨JáØÃ‚a¥|Ž\6GĈ’y­š£Ç€eÓ& wí@J”r{ð ý «öáȘ¿ïÔsèÜ{øÒkôÂs|å©ÛеÏèmÐÔ…ßè©äÿO£ŸÆ®ÞVïb×Îbæÿ/ã–¯ã—oW¯—€üOâ¦Oâg.“Ï’ápÍX»Mß¼fn^16Îè+'ô¥Í”áÑØšæ€”JŸÐêÀ¦ØˆÎxr'9¥‹˜Î‰/›¤6N¥<§TO¥VÍS›fS¦’ê&j&ÉÕã¤òBÑ`lÞ !{ –ÙCmŠoŒŒ­ ¨Á‡VáC² 8@V¬ufŒ€÷’eÁŠ4gF˜ᦼ?üÿð!ð?¯ þÏúîÿ¬h‹ë?™÷‹E<ÿó€Íô—äÿ‡ÿ)÷Üý$^ÿO¸è=?àXà¥Oð4‚¹Ÿüò}ýÿ‡ü¿mSBõxçÒ¢ôàõÿßøÞÿ7d%˜”ïò§g$} „ cb0|š1oF¶N'Ûç&9æ&Ùç§ØåQ¬ó“Ìò ãõó‰Zy1jyQª¥¢åaBUxÁºþ¦`þ®` ;Œo4B`2Zp*š0Å7Ž CrC!'3€Çô£»üÑ­žÈzD•¢‡*6‡J,åPÞîrF|Q³a‚[d脆¾ËC½¯Dý®õ÷}èæû¦±ÿ>/ôß—±ÿ}Uøß×…à5ÿU±Yù§Yјùã¨à/CؽBß2ÿZ‰µ Éé"inž|'K¡!íQ%E½ N+3Vú†Wc…i§‡ÜOj6c[1B­i¡ð`ˆ(“Ôh8á§@òoäO3g%¦“Œ@Îæì]Õgr£Ê7RØG´©Úü5k°Õ×i[X¢™Pª(V‹*R /R(Ö€)Ô/P+ÕŠ.ÓŽ)V.V)Ó Vj+ÔãjuI•š1õú ƒNEÛÑýO™«ïóŽ>žÿ\r÷>÷êcÞ à]ö¼|-yñûһϹçoXo™G2N?f^¼gž¾¡dœ½K;~•¼7‘#mÜן“6_Åï¼"n×@HØý°ý1~û}Üæ'òÖËÈÅøÅg! ·ó—Þ3gÓ—Þó·+OÏVž®>÷_}â9l?ºk>°oÎ>2ç\Ú^;Œß8?q™¸pàÿ9 ó;qNìŽp½Gæ]G¦Ç&í[šu[ê5€=Íú]­úMµjüÃ%€|Ö’lÆ¢kI:}U:kE*{I<{Q,gMºpC¡ÔËŠÙÓÒ©ýáG%d“ˆTM@)% e 0©Ü«¶ëR}âÐyjÙ¹®Z¸ ›¸ ¹£J:ÔL^•KœM’ŽŸ‘MžM˜â‹A‡ôòùÁN†·LK!LH†I1 )ðRRmçÓnçsé@;wñ¹ÖCVµH‹R´nZ6—_$)Vi—" ìie2Ô¢BòH¶«3©ä:ŽuA8 àå£:¤M=¿S¿u-¿I-ʲáYùÖ@Æu|òÍD–^>¯!‘P6dP(lH8$ü}|­{ääÏŽ™ÿ¨hÒ„µS0¢ Ò†™ì HW$aPˆ ž\±¤aq G<™-‘Ì‘¦ɳ¸ŠYƒJY3*Å åËÚU‹êås‹gN+L)æ+äËe Ȥ÷ËgrUòÆtK§îGq­š¶¬™µn[wíÚôìÛôž8rNl{·-;ÖM[6ÍÛömzŽN]Ï\9§.ì+ßÉ3ÏÑS¯ÑsŸ±cï‘/î‘ïèqàØièäIØÔYÔô%iáI à2~éöá“B„Í÷q;ocàYc¯#7žãáKÁÏñ·A+ç^sW^Ó€'ÞóOý—Axæ·rã9å$ˆ”I€äh(­~-â±kã¹}Ûž~åÊæ¼L²|üŠyNœ0+7%7/Ÿ4/7!ˆâþoE{5bœ+QF¹KƒÄhl6òAZ£‰O·Ïº2kGÙ5¡­jPÆÍL„r&Rž‰gAòEl~- $™Â'– I¦cÔÓ ùj!½>ëA´m7dÑY¶ñÙV#,ëùê16õà‡@Ö5c-äÒþ½v„}'ʹOÀ“ `cƒ†„ñlÁÐȧå߉ð€+5&Nž”JKà#ôðGú±1ƒ¢ä!±xŽp|¿ ÀMƒ§€ÿÉÒÆ3'åO©Î>*œS)šW-Ï™‡Š9#²CRélIæ\Öø£BøPnÕ¼!|ÉwѬaÓ²ÈÿÀ¶ïØ 8´ëß±ê\5nZ1jþßÃu;±Oœ9çnÜ+ïçŸyžxŸúŽ]N]Á\‡Í\GÌ=#­Þ—¯cç¯óWq‹€Ë¸Å‹¸¹ó¤Eç_§._¥,Éw´ÕgŒÕÛ´¥§ô•;Ú2xÞ¦­œ'ÎÇMaHC;1œ­ˆ~À^û0š{3|3v9|1|>|€Ú Ú äl°œ­ ¡íáP¸eÜVèÐfÈàF0g3lp;‚»9´1¸ÉÞˆæ¬E€ÿ%§Ã›GCëƒÊzsÛƒ™-ø”Z<¡Ðß?Ûß=3Ð1#Ä6o“n G0sÞ ‚ôP\z°53ÈœÏm! o‘u/˜ð{óÃ;&€œ°o‹ÿ ¼ øvÞˆ%5Ø€dÀkû@ ÐÛ>Ü—0°ÿ þ³üyÀ{z0ßýOô2æÉŸÏÿ€ÿìXþáz@þ¼Ã?ßz>“8ÿ·Çþd @ˆÅ£LSHÖôDû ŠCVŠSÅ1#É–o H‹1¢Fê¦â5ü• îÒÑŽb[‚5–`Ž!›¢’L©&ÓÊ0ƒrÌ¡/Ý~U|ð&ÿä9sïuú1ÜÉuð‚¹ó*}ç–ººÎu­lÔO+RŽ-S…3ü‚‡‘ùÃÊ´Àÿp9 âB¥&l¹z 5Ñ•ª‘•*Ñ5ê¤*rZbŸEá’_çSêê§œ“_‹o¾ÞüZ|÷SþõÖÑûÌÓwéð¹ÐÏ9×_rŸ|ʼzÏ:Ç8|a]f^}¹øH;}Ÿ|_HØ}·õ‚´ùŒ°þš´ó.øïEôÖ«èÝwÄ×Q;ÏÂ7_Dnƒ—çO‚—ÎýfÏï7y/Ü¿…€g÷ AO}–žy,€p†ã[rÎpƒ#ð|^ö©ýà1nàÀ²pdÝüŽë‡§›tìè6nÜ—ð¡Mµo»«Še+ %K2ðÐö9qú¢sYо NK›¥N‹Qg¥³²ô99Ú´lÊ plµ€WdA‡´ y$!`@3zϾìܦáÈ zãQÁ²,sF+¸ @Ø×A6ÕedR…0m´ãˆzwó»ub\ú±Þlaÿ^ß.´O'ʧŸùÄFKÄOH&މÇaIý˜hŽ@W˜># Áæï t ÄØ’IƒR©\øüϤR6°=ÿŒrîôƒœ©9“J¹cŠÙ\ÙôiF¿«˜3©Z¼¨[½fôxͨ°aÒ¼eÖ r~íƒ$¨~׺kË¢BÀ¡]ßžmϾ]ï¡ÓÀ©ÛÐ…÷صßä¥Ïø™ÌyàäUÈÌUÈÔMÄÜóØåg„•7 [/È«·¤¥ââ]Üò³ÄµçIë/(kwI+€ÛÄ嫸ÙsÂÔeÜôiê(jpÁÝ eo÷o³7û×ý{×ýû—|Û¼[æÜ'jÇm«Gq•㸪IÛÚIëê)\Í´Mý¬]üCÓ¢cÛ²sÇŠKç¢g÷’WÏŠOßšßÀš?›Çj@ÿ}ànà9+A}‹Ý€…ÀŽß–I׆YŸ¶Y¿Ö1ŸÇÃ~µÜ Êâ.|VShjy`dŽgºŸ]F.3ÜœaOø 4c[°B-2B-yÓy€w¼9 #Ì"=œw^(3 —Ž·d…šÝÏy1dë1‚tiAðÉÏ” Ýä@=J^r € Gßtþÿ/ýïnðƒß¬ÿ<ïýïmð¿ÍÿaùÃÿ¿ù>ÿO4€{>“tûÿ1ù…IÒçkg’’hA§Ø0’mYÉvLŠ-=G‹³LŽ1‰Ó#iÅú¨FºÈ‡ØJø[ ûˆzéziðùª¢T¡*P„ ¥E«B±êQ"j#H:È8]L¼¡@’‰P²±@Љ`š –j, ›³ÌÅ2,%²,ų-±…8j'¾&T·r01…^N€ö™ð|—ÕЗVÄúÐÏåûÇqì?Oaÿi ûOcÿ¯I¿ŸÀþiDèCB¿ô ½ê»k¾h>¨^+/ŸÈ–á¤ËµÓäëSËÈÊyDµÌXmF”~Z¤qZ„yrôýIžhcJ”Qr”)5Æü~¦-Úœ…K³Ï u/ ¬ 'u#)%ǬÙËÌå»Ü­y{¯rö_fì=£ïÜQ6Ÿ§î¼¢î½¡|È8~Ÿqð6c÷Cöþ+ææ%ev%¸»Û¢ J#¹L…\ª ©Å©EªF‚Š D¦T5ªD%P­U¥B@•jLÅ£˜²„Їq5j”!Ûòþ·¬_ Ï¿\ü®ø§¾ÐΩG/ÉÛ׋×áË/ˆûïÈ'oHGo‰'ïH§/¢öŸEl?Ü~¹qƒ_¹ ž‡ûEøÁËAçžp³Ðk¯¹k¯ù¯…;ïŧž wnsO]gž8N€üÿÔvhߢgϼûÄbàÌŠsj=pdÑ{`ß>±ê?ñ̻ŒÛAØÔ¨ƒ‡¶+ÃᡪWJdïK)ø¬þœ¼nÚMNœIIš•M[VfNË$÷‰ÚDðyy*¤BA( )"$ =êÖݰÎ;µn8ÒmØ|P ~δxì˜p0ÿ˜iX(nLœ4.ÁòoC¸ÔAVe­t„#H@ð‘Q"©(‰tH¶QƸEX§©^ ©—AÊ ág €çS ‰xˆ/âOå—/V0¢cid&¿ù R­å7pjGštñYÔ!MK £JÓ Œ^5dü²­ƒpÕA¤^…Ôoräˆúö¸wñ¹öa=û…¼Ú‘®- ð/_ $Ò~`þþ(¶@4l~l̸aT„4$Dèçéæî"õ‰ÅH$r¤(à óW`N)eçÏ(æN+äL(¤Ë³FåÒGdYƒÒt x³ Sµ¤W³jذaÔ´cܲkÒz`ÚqhÖyhÓ³´oÖºiÚ²ÌoÑÁ™ó 0?Hû/c0Á!“OÂgo#çŸF/¾"­½ß|EÞxI^}NZ¾‹]¸‰ž»Žš\EÎ\„O]ELŸ…ŽŸ†Œïùlzt®¹¶-;5ÏÙÖO[׌˜”rMJÆ-«æå0Vå\˲a‹rÀˆeŘEïW'-kSVõ3¸ÓV3ÖMãvÍ?˜thvjŸqmŸuëÏ÷6À¬g+`Ò½yÜ­0 ‡SˬSë„CÓ°Ýã>\e—Mi·KIoQ{@fcprePDž¿GºŽÛþÇèÞ{™xáXjÁ ±0ñ0 d0ð8F¨%3Äœl”d¤Ç Ò! 5H;9ø[?åÞÿ÷ùÿé Øÿîqnú¢›<øÞÿ±žúDýßú?Þ”ºI÷û¿¼+<ÿß_þúî‚óþþ/üVþ ¢oþ{R¢a ÅŒšbAK±Ð)Ö´$5—H0#…Eh‡{i;?ôÃɹ›ˆ¹ê Ù«áðãäQ¶²ƒ4ä" ¹IAîÒ'@òV€¼!%”ïCL š`°†P¸–p„¶H´¶p¬®(I_<ÑP"ÅT†f!Ë´”K·’ȵ)wÄ>öàkóƒ7ˆG"‘ ‰Ðnòªý¢ñ©ù»>ÌßñÿÃ8ðçqìß üq˜ÿ×!ÁŸ„>u ¿ëºi•8{,¼WË6Ot$K¦Ÿ¥ÐFS®M|TJVË#hfÄh1cthÑðLœ”hƒäJ´nJ”!5Ò4-ÜŠ†·aá³C=³ü=J‚BëCãúb²¦Éµë”‰›Œ•[êú“¤åËø…'‰Kw”õgÉ ÏÙÎËäõ·iÛ¯Ò¶Þ¥ï~Ì:æÍÚz—³ÿ:cÿ&m}3bˆc_U£K/UK,Q/Q'«K5±ßA8¨`â+Ô£ÅÊဠ5B¥ ±X!ºD1¶T‰Ôk‘·6ð,mõ}ÖÞ§Üß áü˜ÿCæåǬ+ÿκþ’yø5ûé×ÌÛŸX×ÀÿŸ¨g^øÊ¼Ï—äÝÛ¨§1;/¯‰‡oI§€÷q ¿Š+‚ÑÏ"Wî—^…m< ^QøŽîÓWî³O<殜§nÝf^{/½ÀeòÜ~xϼwÛ¤ãÐ°ëØ¬ïÌ’ Á‘Eÿ¡y/.€Xp`Úµgؾ­Ó°¡R½ú |M©|CÚ¸¬X²¬P¸$÷ðœO›O]¢-JÓA 0¥Œb㇈“‰+ )ã’)1âc´G!dÊ€4 %B6’ @¼¦´¨Ûz¥ûÚr—”(ãRacâä1‘äalÒ @  ìÁx7-£²!¹d¤h„ PqhA*J4 )]É”£UÊj(eR’‚J@$ ÑqL KRj0ò*Òe"¤™()Z.Rk±ésè4›zäÆQr©6ËCh¡ÕÊ5! R¯D<ªAi· Ûµó¹ô¹÷ {tð;·£ÚQ p¸v ½9BQcðQO6?± üþ'fB$fT0zˆ?ªŸ/¢/²W ¦_4ž+’àüó¿BÖ„læ˜tútÚ •#™Ê‘¦²eèCò¬ñGùsZe+ukõ›ÆÍûfíÇݧ=' X›vî[¶ïš·ÿïZvœØ÷@9pìÄ>tèiÿ¹×(ðÿ¡Ûà±÷ÈuðÌ-~þ.jhäü<^VžÅ,]‡Mž ù øpv=û·ÜzÖœ:xÍEWmÛ×ìÛ–mš—mWl›Vì›—íšVZëNm»î}{ý{^à{·ývüÙ»œƒÀÁ£`îaàð¾ÿÜ~íø n{s6<ú—»æíÛæìZÇp £ÖÁ0nÓ8jÓ8fÛ¶~þÕÁÄîèÌ™äÇKI­ }‰#‰ð†óˆ…süÂYÔäEÌôMܳ¤%À]xY|™¶öe\Q·N“–· ¾mMæy%ɪ¤|uR¡&©H‹X¬I(Òˆ¾'²P=¢T¦L-²B#š·(T¦]®N(S%V¨Çå+FeJáëRg¼ÜgŒå9s¯?ç\÷X§ï˜gÓ/>e\~Ízüÿ5ã„€ŸW€/´‹/Ôó¯Ìë_ÓoÀû»ÄÃ×äƒWqû¯»/cwÀð†Ÿúß {x»÷&jûY(<8ìG8w™:³»t¿sŸ}á1ÿÜ}æÖyâÈš BÀ±aï‘A×¾~ǾQבY߉DÓî]ã®}“Î}£Ž=½Öm­ÆmµÚ åJù/)­*­<È_˘•fÎIÒç$óŒe™ŒIæ´Hê„P"—?f=#7-I˜” 1ŽHD¶xäÃ!@‡ =ˆCÉG@¢ b‘€ù rÔ¶qΉyÑ®aÆ¢Zü¸DKàòF \p_pƯ‡Ï­ ÒÏG('@bQH¡~l$ EF`¨l¿tZ5Re@(hHà òDB ’JI(i*$š!( ¾€ÉÕ‰™?æ7oÇš±åq=JÖµRfÙ(Õ\”J!R¹ñ¨zT=¬Aª5bôºD¬ºÝÿ»]›‘6 ø¿ëË• ýXóaóó†„àžuàÏÜ éE…ô¢ÃúAQ H%J§I%¸RÔÚ¨,cD†É•dI0`íK¥åècÊÙ3ê…‹:ëú5;&Mûæ­G–]§V=Ç]‡&à/¨ °gÑBÀ¡M׉}ï™cÿ±cß©óÀ•çðµÏø•÷Ø…÷/í¿ š¾ [¸ _€Ïvâ§A p8vä7 w{ðÜvíÛréÝv¾Ç¥{ǵg×­<7:wúöœ@Ùwíœx ]ø ŸøúqÏü‡ç#A€³€±óÀñ£Ð1ÀI|qø `dÏ æÏm¿¡-ßÁmßáMï¡5ö²kß’[ߊÇÀ²{?x,ºö\»Sö-3Žm“ŽÍcv ãö''FljÙÖ%l벋’>³â³2ŽiYQI·aa£vzVZ•nJ½Í5»Ë/¿Õ/ó±-Ç×=ÛÇ-ËÛ%ÝÛ>Ã×.Ã×&×îkÉò3O÷7K4AV}¨Qz˜az˜=˜nL3!€b|?çË„zOJ qr€Ñ_ð3¼oþü×þçÿ= ÷þ7ü–üƒànÀã¯üŸà§û?@ÿ·þ‡'¿DÂçÿá—÷ÿX$“ô8Ó¿ôD%óAòþ§ÓÌtsÝ’I³bQ­iK É,>ÆÈ?Ô[Ó×IÕÃú“¡Œ†˜ÅCAs3I”©8ÂL2…¬E Q[1ÈV6’i´ ÆV–''px(ì¢"æ¡!á«-¨+¦¯eø€h¢oª”l.Ï´’Ê·-wâoôD à1DÁMtR€¸«B½j@~ì@þÒ‡ù=[àƒØ?q…ÿ0$ôó€àûmØëFá“¡ƒr¡Íbñ•|‘Ù±Ñ éºl3U©Šò¨¬žIÔbÄêÂæ6L‹6¢ÂÃa˜¾¶Lo‡—šJF±¥P#>O”§›§ ÈQ‰Ì¾ßª…¨†pP¦S® žeZ„ R¥n|©f\ᣘ,ùðRuò[ùqú:yíMæÑOù—?<ù’sùŽuü:íðn+ýsúÿw·àù ãúDËÏ©gŸRN¦žÞ·ŒÛû°û†´ù,jð–´ý1aÿ=y÷=yÿsÒñÂ>„€§!+O–àa^s¼¡§v# ÓH9) ÅC9Ú<Œ×MÒt)³’Dð]Ã|A“BÑ“X—/šñï°¯Fkçñ+ÇB‚aÁ " ¥ˆó‘0P2F˜…~È„´|ªd~Á(>(‚‚(×N9@ à‡’øÅÒB ”¡$œ+-•-(U. ^/ [=Ì…YH:¤ÈD>ÈD*å!òAAxøcÐŽ±ètìñlÃ86#íš¶­»~®xè˜DÔˆ<§¤ýÁ˜Q?è€@HÚ¿ È;üÉÁÆ Ç ‹ÆÜþGK¤ I¦Â ¿DGŠ1$ÃRd?H{”3­V°¬]¶mX»gÒx`ÒtlÞ~jÙybѱoÒ¶mд¡ß°ex¿dÙr€ëæ¿pfóŸ»rn}Æ^Í\zÁ!à6ppá;~ê5râ3 Ø÷äì¸õï¸ôm9õÀžzÀû®sïžKÐûÞýûKÿ‘ûØsè:pàÌ9vãžz {pg>Ã~£G^C¼ŸÀ›sà‚wßshǽæÒ³å1|‡;Áòß÷%ÀèŽwËkpÝ“äÏóÿª'{Í‹³éß\uá`ѹgÁ©{Þ©cα}×·®±y~ÕˆU5€kQÙe]Òf^Ðf’×fœÛ¢—Ù¤ÅjP§?V£Õ«¦U=L*RŒËUŒÍW!–ë¥<Æeµ;U‚Z ¡Ä›ï†Ïq ÈvñÌvwÏõtÍòrÌò²ÍòÅeû›g˜ddëgë1‚Mh!&ôPSÞ”j’bšl’äo’âoJõóHñ7úßùß'ÿx/#žüã<Œ`ÿ»\ ±nú<îz Äy~_ÿ7Hô‡—•’‚õïýß`úî#z´ñ÷`ú#d|÷ÿqÀà%i™Å´ÊdXe¤Y1“-©ñæ ÑFÄ0í`7u/ke œº¨™’ ‰,¿±Æ\2†Ì… +a'ŒÀ C6"ÒF …Gã$162‚6rBk9¬•¬õ!ÛG¢Njânâžš’~:2¡úŠQFIÆÊIfJ +¹{ñJÁôp´àr²Ä!HþKÏk1oš_ºÐ¿öóýn€ÿw¿çe èÁ>o¸l<¬…·z— Eó¤¦3%‡™2½irMÉJ•‰*ñª$u&Q“« /…ÿá–ô`#ЖáïPç—Ô=M©_Ké>¤Ž^¦-\Æ/EL†NOLŽOžMžO\†ÍGÏž¯È+Wä%^ÇÂg´½gŒý;æþ }÷iÆá«œ‹§™'O˜ϲNÀÿwŒÃæà kç‚¶¶Kž\Œd·Ûך°Š4òÕâòÔˆ¹ª„\Õ˜|uB®ZDŽj8 W- ­š­’£š¯ž¯v_#D‚¢@‹ÕØ*5j§YÁœoûEü̻̽¯?çŸÎ:}Ç8úÈ<þÌ8ûÌ9ÿ%?ìÖ“¯ô'?¥]ý”zöSêÉ×´ÓŸR>%í~IÞýBÙù@ÞzCX{½ú*fýuÌÖ[ÂÎ;âþ»˜ÝÄP¼ŠØ|¶þ2|ë.påÊcæÂeòÌ~ôÌnäÜføÒnôÆiüÚaô‰ãØõàÜœBÀºzÓ†FóŽNû¾~סaϱ1Ì¡Aûžn `W³qSµfíQż|þ”TÆ´kJŠ6)N‘H]¡ÏKÐçÄi@þÓ¢IS¢ñÃü‘ƒ˜ÐAL0ÀFrC†EÇe¢û¤B«øsFTè‹…°aЉVH[ h†Žj—dˆ3bAã>£è14iB”8 âR‰VÌÇH¦¡%È|â1X!wÊ7’zZ±GÃ% ‰Ð„d“bDH ‚Ê’.úÃZÛY¶ËEc)o$D,I¡í—§Õ!{©ŽY²P–” æ@29e*$“‚M…ähù „\6$W†Voâ·êB»°Ñ^í|5Èü›öh×!± 1ÉÈ nTà PİpÌ6Š+9(ˆïCö¢ýZ>]AýBál‘h®iT40"’8(DæÃÍß%R`ÿKцä3F䌩æÍh—,ëW¯Öî7›·^Xu\Zw›6Û6nèÕ­èT¯èÕn˜4îX·ÿïYµ;ö\y Þx>óŸ|8}ç78sç8öó®úòÚ>À€ÒÿƒÞټC§ýû{ÁÇ.œ×Aø¾€Ëà®ÓàÀuðÐmèÈ}èÈkpà1´ç1xâ7v0±ïÅÝõÜ÷Þóäz@8Øu† ?ïÙpî[vì^´ï\rèZp蜷YÛ–›æi\Ó”uã„åãQ³Ú!£JŽA9׏Э_ÆÖ/4,cõhçô {mªëçÔ뤷嵿6j³µè š´êG‰åÊä|¹–xpŠo²°/M*˜¥Q`•PîZïIoôc6úÓ꼫=‰å‘åžae^Á%>EÞ^ù^®¹ŽÙž6¦§-ÓdžîoM ²H1ãÍRO 6¤øƒlß(ÕׄêcFõ1 Õ÷/“¿~ ÈÿÞÿÿAþÞ,H/€öÿ} ðÿÿ¸inÈ Œ˜ûI—ÿ± ø­ÿYDC&Á ›aC³Ê¡á²SqÌx *Á$!Ìà¯î¡áƒSt6²Óµ| `"ƒ6–D›ˆ£Ì°åwùÛˆ mDж¢Q NœÏF k+#Œ“¶–ÁɉÚÈ‹¬l Ù©ˆ8ªŠ¹«KúëÈã ”¦*IÊLkùBñÇ^Býa‚sñÂ[t±Ë<èeæm#úK'ß/} ðÿ/ü@þŸz±¯;…®[÷k±ë¢óE’9£érý4™ŽùúÄ•‰j… ÌXZŒZZ¬=F‡m”·Î tÎó ¨OH*:dL]d,\1—AÂßLŒž;ÁÏ…L„Lã'Ï"fΣgŽ£&#FŽ£ÆN “× O7o)Û7)»·©{7©{·Ôý'iû¯².ž§Ÿ¾È8þ{ù<óÄ‚çYÇïrÎAtx’ºÄ-c犺qE[¿H[>Lœ™ ìh2Ï)RK(P!—h&kăÄùê1¼Z _#"O=ø?W Ÿ§£‚¿'¼P5²X=¶DƒP¡J.~@Ôj¦rlŠ7BzŸ¥®|Í;ý9÷ì§ÌÓ÷ô÷©{ÒŽ?QO>ÛÓÏϸýJ½ú•~õÆÕ¯´³_R¾¦~NÚþ)qû+eÿçă÷„­×‘o¢6ùßÅì"ÿ¿Þy½ Ïq'o"vîü–n½æ/&.Æ®Æ/lGÎp\^¸µ{‚¹²âžšìëvîéthwìi¶í¨·è´ëwžvŸwuîê4®«ÕlªÂÛÁK …3ÒéÔ1 7aÒ„yJ,aV"é~#îê3†%Œ ÄŽòEŽ y•»Ðð´”¹ðqÿ~‡B¤q*¤L@ˆ‡!‚ t$$JEhÔÉyL*FNHûM yObÂácŠ‹¶k½æ4¬T,$æ AÙÆâƒ±ªoš>4Y(E£ L(] GCùÚ²¡zÏÊL¾Ù®›¤š(xAbÉX¹T,tWìð§‰À?p¼ž—›ß2ÍWŒÓùøèÙ„4ˆDIhñT„$ ’ÍC«— ô1ÖÝWÆ·²¨…ÌCÖ@þlaÿ!‘ÐÁ@øØ¿`ð°HWÏÚïÚGxƒgž-Åf‹Æ KÄI$üŸ+’J€!QÊ …#žÂ;ÿ?ñ(F£dÕ°vÅ fÓäñ¾yó¾iÓ‘YË©yë¡qã¦vÕªfŪvå†Aí†qýšéã-Ëæ=»Ž 7öµçÐ÷0àÒJ€#ǾC‡Þ]›Îc'ö‘ãÀ®M÷¾¼#dÄ~èÐÞO]'Îðö}ð~¿k08vÌíÞ%Ä(9ÔäÿÀü@ûð)—HcZ”É} ÀËÿÍ€ü °âŒxdħ“Œ@ÈMÃå¦ÚÀPlÒã,À7&éÅzi„Ø+{K9hŠà”,eѦâS8óGù[ œ ´o'Æg/Îo/!`'%d+-ä̰’µVÀ)J¬‰áŠÙ<µWwTwÕ”òÑQÒSŒ2VN0SbÙÈ•¹I´‰ŒÄ¬¤¦ Ý•@ïë1?µñýÚƒù#›ïwlxýçW¶ÀOýØ÷Ýð ¯óáÍ*‘¹bñÑ|éþ ÉvšbSŠBE¹4þQ^œzA3-Z“«—?x“ôëR|@oø” /Ë|Ì>}Ÿyü)çì]öÉ«ôƒ×û/Y»¯2÷Ÿ26ˆãîMY媔R¨RŠÕ‰%¤"5Bþ£ÈµÈb͘µðÜG¡¹  xœ£”£œ÷(´àQxþðùú™xø6r÷9~dþÀÿ¼BàsÜÑ»¨ç«o‚7ž{/Þ¹Ï~?4ze?_³»´¾°â^X ž›²ÏúOôº÷Õ[wU›Áó@«õXn ü ß²£Û¸«Þ²­Ú°¦\¾ Ÿ;+͘Oâbc‡c&Dã&ÅÈ ÌIR¦Å@˜Ž!€‹òg#|;ï›*·¡Ý„|àS4|N5\Ú0¡ƒ’ ‚°ÁH $ )IXiùsÄÜÆEÂEƒë¤T¦¾6»]2Üâ!LFÉ‚ØQ†gÕ–»Ù’_ÚÔÖéféjÐ|¬àu®^¿4Kb»‹^çÈýiÔðàS™‹¢/„L•ˆGCc|¿Žâþ´ë;²ï?vOð~b{}ÿ©=plÛdÓwh×âÈ9s:w¾p€—SøàžPzß–mÏ® ^Ömº–-ÛV¬Ú–qí€E«ÖEëöe›Î«¶)“†yýšEúƒÚ9ƒšEãzo*Ù¤AÕ¼Ùã%˦E‹Æ9ó†)ãÚqƒ*À¨iÕ°qÅ A)[¯x@·ЯSèÓ.èÑÌëÕÊïRÏêTËìÖÈôiçtj2ÛT-h-jŒVÍôFuf*­F5­R…Z­A«ÒH­ÐL.ÕH(T!¦Ë…Ð¥)¢ B®D>‡X´MÃgKàw$bļ’e‚Òðtåˆ,-R¹9­Ñ1»Å½ '´ 7"¿O/ö§;;Q=l¨¾–I>pG½D_ýÔ Óäc^žBÀoòÿÿ ²§1Ïÿ±®ßàùŸ·øóÝÿÙHô!@?)À0%ø›ÿS ¨FôcÀ_üküÏËÿáð]þ?üßóM²‰Çe,éaF‰~ÚÑΪ–rzbŽ*¶Š+)ÈBÎù¿gþ¼5´½8Æ^’ÏNJÐNk+/j£ j%/b© °VÇ=€Q–Ä=”!ÀNUÒQMÚECÖCSÖWKo¨g*Ç´•ªô닞Mäßgaž𽯆~møc·ÀŸØüÇøÓ ß‡~ÇüÒ+ô¶Sð¶Uè°^x©\t¬P¢7K¦%M²*åaY¡0þQQ•©ÆŠÑgD‹oi~6…øÀBÊ8¥|'}ð*k äᧉë—äµ+ò ÿ%qé&aå)|¤gíEêÆûŒƒ7ÌÝ—ôÝW´Ý—i{ÏSwž'o¿HÙyËÚûqü9ûìKÎ姬sÞ•+À—¬«Ï™çŸ2O>±>0w>0·?±¶>§ý~É8ú’}òÏY§ÒÀócæÉkÆÎ‡ÌCð»Ü$-n…°GëÚ sjT©åªñj êñ%bs•"ò•#Šî‰«EÀ7ˆUË…=Ä*‡(†æ+„*‡(>)S‰ªT­xS(ž+Zý(¾]5îP½Êy–´ô޶ó‘~ð‰qø%õà#e÷CÂîÇĽω?SN¿&ž±çÿwú‰pô>zÿc,~—pö ùäa÷éÛÀëÈ-8 ÄîŠÙ{ß~°öÒgé¹ûÜÓ$àÖy ‚‡‰ Üð¹åÐ¥åеÙà• û ïL» p¤Þ²¯Ò¸«úxO£q_»q_¯ùȰíP³u_½qëQÕÚƒ¢¥ì9æ¤e\,~Lˆ4"H"O‰Æ&„Icؘ(®@@?Êè±áÞ96B6M\3Ú¶QÀ¶œß¢HÈ4õ()„ð€Dì!A?AŠ”j¥œe“¸{)Æ„k£¿ž,õ®Yã6ß"GF0âKÄ¢{}ŒÆ Î%@ïdÄݔ˽¨”ù¹Mý¦èA·Ôlm“ÄíÐ}ß­Ù•˜ K5“¡•Dñ?MXþ͸ü/ýJ7¥¢šuÖR”R” PˆüÒD$ìÿ!”y• ®IÔ¼­UiÖ@MH«!w¹z|Aò?">!ÉÁúu!]Ú!Ǥsʽ_ `X4|Tª—­D— ÎÄа>8ß ¼ ç.å•*å™(æ/æ'â#â!ð4˜Ï>\È1VÂ…¢â•­Pi“ÐìDipI*~Dyð$ÒÆ4â¡>z¤ƒ½&úºÆÇª¡Otˆàyæþ_æ±?íÜùñ½§ý?üÿkýÿ뀌G@¿ùŸq”¥vzˆv¬;]’öÿþG_yŸø‹ÿÑ£ òÿ5h¡féÁ&éAè)yI¤'Ъ>–rNz’Ô…îÉñXJq˜ˆ¢‹¼füˆ)b$€ "&Œ_3aV16# NSi^c,¿–ßËá˜cE)`*'j® n¥(yWIÊNEÒIKÚ(g"œ÷€÷¹çTä] ržËöµ’õ÷Í\ÿÐÁýÇ®Ÿû¸ÿÐÃù»nž:xþç}]Å·^Ì?–-Ø•&^› Q!žªäKò“KðVŒóP‹s!Å=5M¶TîÕY²@îÙJß‹žÚ ™y0sà?³8õ2` üÿ*hê8|þ$bá$j´µ|±ø&tñ8té,xé"xé2hémÐòUìâuÜÒÛøå·ñ«ïãÖÛ„í‰;P`Ÿâ6?Ä®ÞÆ¬|Ž[ý’°ú9~å]Ì⧤õ¯É;ߥìBÀýŸÈ;“¶?'£ó3på]ÂÚ{Ä,ìx÷O?jhÒ£”(GæÉçËåÊæÈdËùÒ d<2eݳe=ôÑPi—,¬kŽŒÿ,ï”%ë’-çš-ç–#ë–+ëY à—'ã›!é‘*è”&äV$ÞN¢MÙÕl¸vû޼›ý>~ó7‰»ßÅì~ Û¼ Ü|ç³~ë¿þ>ømÝú®ï¼—ÞºÏ XGA›ààÊ}ñÚmáÚiî­ãüõ“Ù‹0`)phÞÇôÿ~çK¿Në+­ÖW-‡š­{ªuò«r%Krè›_– WTJvT+¶UK×ó—èËŠYó²Ô L zùº8»8ý»¹üº¸¼:9];9œÚÙž´ò ±€…häs“ȈJ ‚óà²ã´âæVF‚¸ a¢„5‚ÌŠ×£Ë âM¹ìiŽb¾ÊаÈz°ö;[rV.öC—ÂE‘Äu¾äûm9ßÛb™AGöJ]ä Iú÷ݪ¯Š¹ ”7c4­‘íÌu=æCÛŸútéøùXŽëZ­ÑH¥‡èz1¯"*ˆ§ ëä šæ PYñ4D"Á— „:óþûèóŸw¬[y`ð´•ëQ bY˜‚ü[¹<ç}Ò)àÒ#Œž ôœÇ¹‰Ë¹‰Û­UзS<¬S"²C<¢M"ªY$¬M4¢W:ä?­œ9«”½ œ³¢^°¨˜?/Ÿ;«;(çÏk®’*Öj6Mê6Më¡]3¬\Ñ/_%•1Y&U­ê׬×o˜4ÌÈõ?TõŒjä¿gÚºcܼkÒ²mдAª_'Öm4n6­‘ê–ˆ5ˤÚe½ºEbͱzA¯vN¯f†XÅdŽXÅÜS6Oªž!VÎ’ª¦ ºè«g¦I•3zUÄŠqB90¦[6¢]¶Õ-Ò)á÷kæôiçöëä  úuó¡íÓɃΈ~ɰ^1t^hç鎛TL™WO˜V“fUÓ5\6(aP4bX ôr_èÂ/„ÔÈèÑÊèÑÉì!dws:õr; òZõè-¤ÌF"­N'­F+µÍˆ^¡–X®_¤‹ËÁÁ!EŠáEŠ¡… !… aè¤ò¡@¾R8Ôléxo Ö“&ëK–rL”tL’rÉT ª0Nn}’]gaafkfOz¢×üX#è*ü_åò@÷×iTþ÷P˜þÿf~6ꀈ€_ýh‡nqÐ wÔŽtÒ…ˆrщqƒúŸçAÿÇ{þßüŸ@d û?üO 2K 0Ió3Nñ6Ht!Æ<Õ ³Sõ·’s5À<ѲSà±ÁrXˆ°˜ æ|ˆ9/b"„˜ #f"ˆ¹(‹©‹©8+ãQc,·1´Ïgˆã5bt˜}ð? ^ÄDFÔD^ÜLQÒFk§†¦-íMŒ6Ê}ÌÓîË>‹¼Ì@Þßù±žõçžìE7|ýÓ/DÀO½Ë·~«ï|–Qÿ»-œ9Ïž:NÚOœ=š„úŸñüçèåÃI"à¥I×®AÛ¾~Ç>©}_÷ùžvË®Fÿûjõ;Ê5ÛJ•À†|ɲLþ6XÆg¯ÈЗe³Våé›Êù늹ó2èq £bÉ}üÑÝ<¡\íìî­¬OZî?(|mVÛL’yMU»*ÇV »4äUd1L´Ý9,–8ªÖWcsDØ£°áwxâØR¸ñ‰¬˜tN©D<]µ†×´’˨šÓ¤–˼ŽÓ’± À Ì_…˜W#–Mœ¶­ü-¼ŽÂîPù·ð¹5s»<çsïòm l l j Z„B»1±£òÿ´mR†:OŸÂ§‹'OáhËj…;zÕ{Fõ»Æõ;&õ{fËzK¤r4 ô«¶ j€ƒÚ]ú5½ê ƒZ&ëú5«úuë† [&ÍLíCgC¿~˰qÛ¨ :«ÄšêÆãCK0Ð T/èVÎëT@»ªgœ1K¨@òØüæ_Ы~€9½êEÚ#ôíóúsUÌ“ÆS&•FåãFåÆ(¦•às;H~ܼjʪvî^ãœu=\5*ƒvƲ>20S:CúŃzEýÄ‚A½ˆ‰R>´/´ {uòû…/ˆE=Ä| ‹”Û¥Ÿ×©OÚô²[‰™Ï æÅÍÚéš”ÝÔZ­ÄJµØråˆ2¥ðRÅ0h+Õ¢áJ™rT©Rd™j4dA|p®|P¾bHª/zä‹b8M:˜,H“‹,3¦ÔÛS‹ÂRíB­ ƒluÑx å_=ô1ñWùÛýmÚ'à¾.ºæûwò÷²ÖøÅÿ¿FÃÿZ¿ú?è¡F¨ý7ÿƒühW]†üÿüO$üêæáØ©>†)žzèË žh†?P ¶Qð2Â:ëˆ=Vâ·ÅqÙˆ²Z "–üˆ%ú¨§™b.ŒúßB”Õ\œÍL’ÓTŠÇË þ7–á¾ùÇkˆåA—¤ ±B0 0’5V·PÆÞSÃ?ÖÀº$¢L…òìy;ý9çâ‘×™èëÃ~ßtçŸz¹ÿ<Èû—Q¾¿Œóÿi˜÷úx~Ûúÿª}ìs%_`$C´-Eª"GÂÄúËGyÊŹkÄ:XºøöEmP¶¦wc÷#VßDmœÆnžF­½›}6ý*bá0rñUØüAè´¯ÐÅ£ðåÓ¨õ³Èõ³¨5ôe»áË×áóïÂn#æÏ¢–Σ—¯ãÖ˜39ó`rhÜÀp€üò6 =ŠícÊæ—´{7IPío0 ø’öò‡Œ×ße Oì¤n¾'¯]',GLŸÇÌEÏnùö ÛV6êSKT£³d³düaàIÁ¸C dËødËzÑñž2.(ŒY té§iRO Í~FÅ<¥I9f`3Y%å–-å–‹óÌwÎuÊvÊ•ôjP4Ê]¶«ß}Öyæ3vé;uí7÷ÖþÆé½ßâµ÷Ü…Ç4  €+yà­çò;¯•wKg“GvÃVèÌÿ¡eÿ¹Ý8øÿôÞØ‘YïaÇ.©u[§iG«yW»eG³iC¹vS±j ¥bG±l[¡t]¦` ›·Š¥/`¨À,†2'•¶$“¹"—½(Gd³§¥©c‰B]<>­ìŽM¬ê{U,÷*ï˜Õ²ëw‰ZwˆÛVóX•p™å²éd²Èe"¸D:ƒU=_3“¿ÜV3÷‘„*‚9‘8K…8‚°+€ ©ÂÈ~´üOÝÚßwánj1ŸÊnóäŸßGæ£Ù~²ù©Cw%J Ïù¡VçzT>5‹ŠN!'9bèTúó0馚ªŽ,'`þ0 þ¥óÎ9Ë߉—˜ GÎ+D?u˜Õ=ÂÙ#ˆ7RNYñ3jËÅG8‡W­W¿’ǰŒAPÅaX‚JÐå`ƒ ó6›&nûf>Çf¾gm"žâ~­BžÂÞmÞM|^õÜ5ìî ܾ­‚¡Ï…ÂzÄc±äQYÊ>uXš<,•4*:†¥¬iìÊö «Œëö kÖuJæÕóÔ 7ˆ•kºåkº•›¤šmý:`K¯~[¿aƒXû7Hu›z³=´ëzuàùeÝ*0?´ ZåðÚY-tñ"¡j™T³bP·jX¿Hª^Ö¯]1j`ž#±dX³dT»l\·jR`ͬqâ™É¦eËŠYâq-˜ŠXíŒaÅ”~Ù8±xT¿ä¥c†ePêƒÆG K¡6(Ò‡Néˆa9ô1ãÊ1ãr‚J}†ðK€R1’gúÿ…nЫ“ ð‚XÒK(î&  uhç¶kewhÓ;ôvÝìbÖsZ“Vh¿Ë üý:í¤&¹…”mFl…J$A…rt©BT™"„B|¹rB©b\±|4ŒJ”bË5#‹U#JÕâªÔS‹”’²p1™rQÙ‘5viUOâ²zÆXÚ@ „Ùé‡<"AÁÏ4?ÀØê…Îù@ÙÏ|à‡)0?ài¥-Èßóîß"€9„úÿ¾f0„Èc­0íHGBøßI›9`Ìÿ™þOðúþGÍÿ+Éþºz2¶—>Š)Ñ™ç¨ýH#ôž’¿™¬Qò©šð#Þ{¬6B,wXlxX@±X³Yˆ²[ˆs[Hò™Iñ›Jó›â„MeDLðÂÆ8!c,ÿ7¤… ¤øõ¥ùõpú2†râÆ ’æJÒ÷U¥œ´ÅÃMDríùÛý¹çãï¼ÉB>V°þC;ëŸûyþm”ç?¦øþcZðŸÇø~àû©Gàk+ïÛ:Þƒ2Þ•|Áaªès²ty4ž„…â?ÒU’+ÉÞ2ç‰ûHLÙAÖÔëÔ…×ñ‹Ç «§ñëçñç‰ë'q+¯c—ŽâWÞÄ-ŸÆ¯žÅ£Ç8\Ư¼MZ—¸ù޼õ>y÷yç*iû2iã:X?ß$¯}¤~ ¼¼MÝ¿MÝý@Ùu¥í}ŸùòKÆÞgÚî'êÎêÞçÌÃ/Ùo¾ÒOÐãú³^_3¾Ï:üB{ù™zð]æë¯‡Ðþ}ôcÎÑos“sø9sÿ–ºõ޲ ü*ø‘›´­‹Äåý°±9×¶ʪHÉÅš±tÅàlÅÀº¼_¦¬'@Ź4œÓ/<2¤³ñÎY8'èdI?ËÁ»äà]é8´ÍÂ<£K;çH9eK8e‰9Ò¨üö9Ân ‘½:isV•/».}'ÞÍÃxçÚoáÖ{ùƒŒ–™£€ë}×o=WnÜ–®žNÛŽ¾²èƒxc=xrwôÈzøÜràØ´÷•AÇŽnó–vãžN+°¥^·¡\½¥T½©P¾.Sæ_Çæmas5|þ*.oA2cJ,uZ"eJ’Œ"² G›“¥ÎÉ¥Oá‡%Âû…ýºø\šÙ·q;7pX×ð»ä,žãAþÆ¥¦eœz¹wä2ÉTD:‘MPôgGÖâ­ŠÍÃ Ä ¤ÕYé˜n5á#^l€DK"#ÞⲟÄþ4¢þÛ>­ûÇ¥2íŽÈv´ê|$Òxyáȱ—,ý}«ÊÇ6ìYµäVÏQÿÛ ÁwåøÙ)_ad“¦ûÏ“¦ßõrŸå±ýØ ûÛFÙÛJîßtâ¾o·h¶—öáC¦ƒ5.‹u/ŠÔ~ßìÙsŸð—KšæsŠXuK؉eœÄV1BшNÁNþ(±! tóû´s_hçÀ·úec††•“FUãcúåSÆÕPçC:€ü!ÆM ì¯‚P€2˜4ƒC Dà =>¢G¿°ß xÀ°€Î ½ÂnB^§NN—nn¯AQ¯AA·A~»~n‡AN£.µN‹R«™Ú “Þ¨›Þ M©ÓL©Q'Wª$”ÊÇ–ÈÅ”+&V*“+U“+TÈåÊÌG‰ c‹”Qòä#ÕøRõÄ\¥èLÅJsJ‡{^kb²C¸•i°­êí¿“?s‡—5ʯ>LùîÖ¨ó=î}ó¿ç] ¯_–€lµÀÿ¡öèÛ{Ñ·7>Óÿ3‰q#Ì%€xOÝ¿÷?ê|ô-™LtSuP| ¿½ÈÒƒDvEO1ŠsÐ ·U ´÷ГrVµ—ã·Å°ßa½'xç.b)pÇRˆÕJˆÃZ˜ÓJ”ÇJŒ×#h)%d*%d†5—3Á‹€ó¥M¥ͰB&X!Ci_ý¯'+f °VÂ<Õ1Êy,ÐæÇ5Çr”|©æø¹“õ/C<ÿ>ÁÿŸ3ÿ1‡òü§!?ô ~÷œï]=ßë2¨ÿGhbmÉØoþ÷•‰óPŽqÐM³Ø–µ™Ö:{NY{KÙz—ºñ.yõ*yå"uí,eý(iã0ióR¶nS6nSÑ‹WÉ[pÃyêÆeÚÖÛŒíw™ ÷£GèëW2AÚàíÏY{Ÿ³v¾Ï}ù%gïSöÎmÖî-}ÿCÎËy¯?}¡|ÊÚÿ±ÿ…~ø9ëõÚÁ§ÌChoÒ÷¡ý˜ù¸¡n¿¥¬7´ FFì£4®l\RÖæb§}»Æœë:îåW$¨‡gÈù¤á<ÒpnYr^Yr2n4ì¯)ðŒŠuÌÂA< “…}š!ådc:Î9÷,ïT(ã’+õ4OÒ±çž#â˜ÍïHçu.“êÖ¤­Ük©ý%¡mG»"`Kµêÿ5|Á †¾&IßÀd¯Kf­JÃ@ IŠÎLJ$Ž‹ÅIÄŠÇNH'ÎÉQæåSgå’¦ebG0!=üÏY›¹ï•ói‹(Ñy”ÒÕô‰J­|D–†ˆ%±HF²à¼>_ð„Î fs9÷Ëîñ7›"'ñ’а7õÄ‘H\¾²'ò†Ê{T(øq@ëM—‡~ã•hÅL1d,YŒévàX‹‘úÔ¬ú»Í˜4:©•ÙÎB>5iR.³F<ÛzŸÿ\pú·µ?´)\°ü¶…í7Ï‘Ó"d1F´È˜§Õÿ}‹Ío_ȼ)e¹©Ñq1Hà’*6.äÒ/åÔËgѦ#J™ˆQ(º£^ÁN(»£_ÁjVËñ ŽûI¯KŸ{=¯[-¯k=¿{‡c‡c‹ï .nÚ'I%I&J$Žˆ'LâRWTs¶%[ÄÒUÝ’âiõŒYͬµ¬EuúŠFÞ² }I‘¾¡Z´$Ÿ³ª\´¦Rº¢R²¢V¾¢U,hT®«—oiUmjW¯ª—C.L+Ì«A|T,j¢¥>¨ó™“<+zµ‹¤J¦ó¡ýµ3GªX4¨†šÚýŠ%êãše£êy½òiRéŒ^Ù¬>Ú™Ô+…"T?ª[8¬-ê|B!pþ©x\§îà+Rñ(±d„PÉí×M¢‡•¢kù"£4áçd‘²©Üpy²&ÉY%íÁ½VOÚFüèiòÚÛ”m¨ç?Ñ^ߤž§ì¦nž§m^¤o\P6OÀ±©;HþŒ¼q™ºy¶ ¼MßyGÝ½ÉØOÛ»¥í¢?eÆ>g¿ú>÷ä#íàõ%øZ>Þ¦ï¤í¿§lŒúÿàS*v¸ÿ6óõû´—·ÔWŸ2ß òÏxõ%ë5| ž‡ˆ¹MÞù’~ð¾¥ìLÙý”òò;úÜóž² \Cú$¬]Àh%vñ,~ùMÌü«È™íÐÑ·önÛò:£¬rþÕÊĦIø¤Ix¥Kzg`|20^éâî’™w CÒ%CâY†ÄS¨ü©gÙÒϲ¤ždb2$í3$™˜Çp%KÂ>[üI–°=…˨Àúôë§l=iyãùâ:xò}Øì»¹wA‹ç>³o\Æ/Üç.\çߺ.¼u^¼~:wñxêêÑÔ{ûÙSë™ËÉc³‘c“Áã¾×z퇄–#ý–]­ÊmÒ-õ’Í’mâÅœy™Œ9ú·eÆüÐ#ø¶ë°c3“{4 Bf¢¹ÞäI½¯Áœ}©4zñ@.š‹“"‚KMæçŠEØ’áLD>=eÔ¼±-GÖ²Ø5²[7q[ÖóÜ­`PÎâPÅâØÀú¬K0|P,u>€‰GB… ˜„™Ôê¦rÖšm]1cS‰¾*—±,C—¥,ʧ/)d¬ªÒ×ÕòV”ékªù«*›jÅðÁ†jÉšrѺJñ²bÑ¢|Á‚\þ¬b° R¸¨ òÏ›U)ZÖªXfŒ˜s>èä~ zF¡b™TµaP½ ¶×)A÷h-hÏiN«åÍéÏjMkLªçM3vŸA;®š3¡U4®Yˆ¾€^»`R·`Ê{Íì!Ì-´ÒÊ#€ç‡´ò†´ S2jX8fT4n\ aýÂb“ƒ¢Ab!sø—å`¸RÜOÈe^"Áè`Ô@Á?lP4fR ÃÿIÏtì5ìT¢­ðaF~Z|XÖG∭rOõ¿êVc1I>¨íÁíæ8~†ÿ¿aŠç7A×ñ<&8¡šàÍäøm”ù«sùésPr´p€ÿßä#_Xÿùó¨ðObÿ:+ú×Y®ŸäúÓˆðozÄ>uŠ^5 ï— .åÒÄ:R%*b¤éÁ8Z jìCµg·é¸†W”¨ó¯È›èÜNâº+nåuâÊIÊ”ô§É'‰—äÍë”mÆkÖwÁù3ÀüàÿHê.Tï( Õߤ홡çCû1mø@ÙûB{-z…¶þ‡€Èø˜ú@«}Œ¿f~Í8€"üÿ‘‚úø˜ºþÿ’ö~Û§tˆ†]à&eçmÒ&z[ô·nÒÐÉ¥Ôœ'-¿ŒšZ ˜wj}PÙmž×DJ/S‰Í• ‚ ˆºÒ$=30žYXO:Ö+KÊ&ù ÈÀ8QÅš„UÂ!]Üž"öHPÅQÅí3Äì³ÄždˆØSxìÙ¬)l¥’}Ä̵GMo<.ý¦¯æß,¹M¹L_9ϽƒQ€ËÂÛ§3W&ÎíFOí&ŽmFÞXžZ ]Z\˜vë·Ÿt¼ÑkyEhxM¨{¥Sµ«^º©”·®³!]¶"YõÿœTÊŽ<‡__WI^”K éæöîâñíáóïᕌáïô®çXÉo]ÄaH¿£EFpaˆ;Âå‚ðø° sq9 :à]x¯òt.rð>üeÈM)éÏcú?*ž‰WX"¦È„?û^:Ïy‘èf*ß?²K•x/õ2“õ»õ7ùø\s¤é˜\|Àe"9­à>oà8oÂì©Ó­*d7_ê¼^à÷Ò?öÊæ‹­¤ˆlR% ±geسb™ƒL‰åØ;«qÈïšL7#õ‚Ø‘h „T$ [üÁ“Å¢˜ƒ¨²K9Ì+ØîWß¹_XWݱªa·«árnäõê “Šž–M™À% KÆ32)‹ŠÔeE°(KXÀ§ÍaÑv ÿôRç¥)ó¸´iLò†¼$Ÿ½¡^¸®V°©QÀXVÈ…À¢BΜlÖœ\ö¬lÖŒ|ö¬}N9w^%oN)‚`I³tY«lXµ¤]6«V8¥š?£^8«Q4«QÀ oF=wR%{\)UÎV¤ ʧ(e0VÎUÍšÐÈW§¨d(ÓU³!5ú zƒ `@3Ô¤C jæöiЭü]ú !€NŸ6½W3«G#€þ ­ _'¯O;·W“Þ£‘ !Ißü?jPÊœ 3†(5.š0+ÿ/Ú5  à|`Ȩtظ :}z…/HÐöó+ÂèV²zÅLzÌŠ»L »M‹zLŠ: ò:HèóB]úh§È<>(£A‹ÚL̪ÕLÏתPªT’«Õ’ÀÿEŠ¡ÅJ%ŠQ*äj5jµ­B3½Œ˜ZeEit¢•8DBø[êÚ<î©ÿѹ #S-om÷»ªn6*VªžžZnV.6“¿ck£þGBýÿX7Ì=Y(ÂQÿ£üú?5P” “oòÿÅÿdGð¿zâÕX+™(cLŽ 2· žý‰ËC!ÄNù7b5f7ç5Ä k»Ò‚FRæ8A ¿5ŽÏF†×JÍ ¼ Lð\0€t̰0.@G üv*üêÜ~$vªçs®ù¤;'¨ÿÿØwç_G…ÿkB⯳"ãÿ·Iþ? ‹ÿÐ-ü¡Cञ{§„w1W|„†i%KVDaòÃðé®нYWxÚnÆðyþuüòiÜJÂò›¸å×ñ«ÇIèäø þóÄM¨±ÁüïÓönÒ÷o© ê½k¤¢¯ÜúÀô?CõLÛ£?CõXúW>S …¯ÐEêK(à?2lVû™G·iß~ýê%SþÐ~¡î3OrþŽvø)=´"àŒ(ûèDâ&|¼%oS¶oS¶>¤n£?B{ù™¶û%c¹@p·p5s1u2¶éÕ;û´aðnI»qvµVB¡B¤@š˜kª¸sŠ˜SªÄ3ФS΂€"ê&ö$M þ8MÂ>UìQ²ˆ-Yø>YØ.YÈ.Uä!¤C¦”c® kûã$Ä–Æõ¬1bT°ÿ¬ë]àÜÇàåþËï=ç/žM==4zå0õþÉÌñƒ‘ÓGcÆ.lG/l†NÍûNM{¯,N »OôÚ^ë6jÕjÔ¼R­ÚW.ÝS(Þ—­ÞÄ•®K.cr–¤3Àc‹øäù¤UÅØmMò–fÂ$.pã7 y!êÓÂã:(ê×Îÿ¤†Ç¢‚Û¬œÇº˜Ë,M5ˆEð)‚X ˆ§¸ ŸR©#0l+Ö@D¶ƒµŽÓeš¬RòÛzÛŸ»õOŠ9çã‘{$—ˆ4?B¶Ò„Þ×Êø#Õ÷‘éH¾wõJ›Å¿ï”U(2‰T?FÊm‘nod•ÂrTvg·yYÆuX!ùª³W$x^+~Õ€ù¡wP(ÙêÄI'!¹úÈ&Eð§^¥Ÿ_hÒD7â7xþØi~J7ôáB|9¸=‰‰D¸RYñY,ÊùjEÜš¥\Ä"ôD«º;›¹]Z½»%B‡¤ã§ qÉ#˜¨Q©h‚)ˆEÅ”ùäi\â„TzD†XÌ”dØ~V*mZ2u\4yR­W&¥OŽôB«> D Ó-ŸÞ£@íU¤õ(¦u1èV¦ô¨¤½êÔ^µŒN¥´v…Ô6y ð\.µM)¥]9µC…Ò©šÖ©JíPIoWNkS¢eU9bR Åÿ°1 “f3–ÕSæÕ£¦è9ÒF¥ÌP€A3ºus!˜„^£Â~Ó’ÆE]¤ÜÂ/+Åz›N€>;JÊë0(è4,l%æ4hg6ëä ÊéRk´R*ÔcKU¢Šä#Šä¢!*”SÐEaõ„­È2Ë„ªÇIù÷¢̭Í |m 4]­Õ<­4½- Þº^–Ú z75WkU7+5?À”ÿ¯þgLþó?ºþË„90Κxªõ-~ñœáøÿ×`@d’æcP¼Œ(ž†©®¨ÿ“«Cýg-m"FöWáu—aw”¸óXy(ˆX £Û¾LE¸Œ%øŒ% 0BàciAð¿5Nà.žÿž ÀH^t.Çiã†8@£Ïo-+pW^ྒàcG5n"g¦O»?ï™ý$Ÿõk ë{Yÿ2"ôŸ“âÿ=+ö_3Âÿ:.ò ‰ÿÐ%ô¶…ó¸Žc«”w6G| ]º9Aº< — ›öвÞ?|!µy;y|+jê jþ8nñм óyòúeû¤ìŒ-``ìƒÏi¨ÿ¡zG³€áf0§‰˜ÃFR0Ž®£-³óÜ™ºs“´€ó¿¦Ü$m¼O\‡‹“6oâ×nÖ?$o1ƒà DIê6úŠ„Õ˸åw +—1 ÑóL΢ç^‡Žïøöï .»µ=¬ê±Îo5ΨÖM(P ÍÄù¦‰ºPÅݲ¥ÑGC³qéN±'Ì“tiÇTIû‰ÇÌ㉇ñ"÷â„ï&ŠÝËyš%ü$CОÂõ ±I@îç¸×ÊD-ØTïØwœ¹ÞxÏ~ðž»qŸ½vž¼|2væ0yí8sýd"àÔ¦ÿi×kã¶SÓÎ7­‡Ä¦—šõ»*ÕûJUû Õ/åªvñåû2%»¸¢|á.›½.“±ŠOYWHÜVMØT< Åî#Wµ‚fU¼pŽx§!—.»ZV³JV£BD?!f²i„²ˆßGXŒXÙ XX¹Y’Å‘FM–*UäÅ]Ù“d…Yožj#dÚWj-Zf.‚w—†›‹§i#9Þ×kWIµ8#÷ÑٞñO’?tk•Ê•(ŸU*Vâ߯ÿ]—êqßë2޳Zí\Öü;—B7­¢?¼ýÔ«0ÅëÄ…DI#‹¤«R¥ëJöï[„_Ó¸·/ äþeèî÷­tä!‚ø"Åú| ŽX„?“U…΢ZÊ¥“‹¨V°š5q<íäõé îÇ„÷c#‡±qct)dH,x >‰šÆÇLac'$#‡…CGD"ÆÅ£Ñ™1ñ„Q‘¸¡øaÁ¸aÁðÿ”Xú>e‰ô mCK“d’<Ž!OâRgåÒgÓçU3–5é3ªé“¸”Ù´q|ʈ4y ‡¶ƒò°tJ¿y@:yT6}TŽ:€MéÇ& â“ûñän¹Ÿ ¶‡úíÒ‰Ï1ñ-±Íâ1-˜8 Y2–I&¶Q2¦F"ªS/ -è7HÇ5ã[RZä“ë°q5R1ÐÕ˜è*±ˆjñH¸­ß„KêqñµÒ±ð-tð M²IM²É@«¥C…Ö®šÞ©NëP£vªevifwkÑô9"½Ÿ”ÓO¢wéfôéåBý-:ÿcX Ñ0aZ!ýÂaƒ":cfå#&E½Dðs¼)1AÐMÈë!æ÷’ ºts;ur€6z'1ï¹vv«Nv³Vf!§K¿ •PØ S¯“Y«M©ÒN©ÖL*UŽ)Qˆ©TF‹a P¦–T ›­VhÓð8#÷A@Œñƒ@SOKmˆ»›©º¯ÑÃL×ÃBËÕJÃÙF€hð°Ô`†Âÿ‹ÿuÁÿ!µ Ч@¿ù_‡éÿ7†ÿ ^„ÿáÿ_ 0I÷5Ò¼Ó Üô“ŸÀÿäÊ 6rq¦Ø’h¿—,§3æÎÄ^õ¿D€—™$¯1†ß@’ßÃo*ý­ø¿‹ç½/Ãk+ËwŸÁ]Y^k<· Ž®C(Àõ ‚”AþBöÊ.ª|žŒû|m¾üó‰\G¹w>V³ÿÔuç_†þcBì¿f%þsZìŸGEÿØ/þ]»ÐU#×›ZîÕbþ±L¡©çIò•¡*9î*Õ®áS •ëÉëÑûÑè©;äµËäճĥËÔÍË´ÓäÓ¤u?˜ÿ*ax›´ \'n1;ïÈ; zôŠ){ï“v˜/Õ½IÜ>&Ü&íïâ·Þ'l ïAçmÜæÇd4)ðê3õðSú«ˆŒ´ƒ鯘¡À2 xTøàp& yp;`l^ÿš¾Ï¼-|ü¸ñ9yûkêî—”HŠßdþñ îal(Fo»Š]>‹œ?˜ƒúWñ+gÑ Ç³± WñK§1³¯BÇ6}^Ì=k}PùÂ$·A31˜)î%é•%éI“p§Š»Ð0.TÉg©’d‰É’vd©d)[ª°]ºmšà}ªÐà ‘Ç4áÇTþGi¼b›Lžgu2ÃzôM»Æc×¾KÏáKÑûÑsû±ÓÃg¶C—F.mO,»!Ž;ßè·è4½T¯ÛW®}©Xþß“©ØÁålIgïâs·pY›XÚ:Žº†KÙKÙS#o«Ål¨‡ìë…^>ˆ?¼<¥i7ªa='ç?$êÖÁõø9—] ‹Q9BÊcÕ C$ \D„MAî"H*Ž'_IF¬äãtý„×ÂÄ;³Q•^gÉ-2©á`¢²ŸEüý°ÑrÒê…´ypÌ$H¬e ÜvÈíÒqín¬7 &ž6ÿ§Yïûð—õ’»y< )ÈzËm£Ìi™èFrVËñã Øë*™&w$EÉ3àž V:Êdz|¬çþ¡IîUä(OòÇN­÷ Ê[tìz–âFŽúzšìBˆn½¦õŽB1»A ¡ŠÍ¸•ëQ¿OŸ`ÈxØ TP¿´ÿ ñ€~á°a¡è ‰`\¾R"¨’Œ‚,€\@A2ªB<¢B2²\"¢T,¬D4´H8¸P(Zè—J„–ÃW(ÑUÒqLjpq5ø˜ù„&r­|\‹jj—Nf«Z:СNëÖÊ Ãì÷hgwifB ê@ôr!úõ úôòH…@!¿ŸˆNuj£gÊ¡»ts»õ z ŠÚusZµ²Õ¨Ì8hÖ-¨Ó̮֠•«KUË5’ÊU*UKbªUÉècBšä|µ¸<õ˜2JÝ£´BÛˆHƒû>Æú>wuÐû­5ÜL4=LtÝÍu],5mTm”œ¬UPÿ›ëüýϘÿ' þÿ胠̉ ('Íhg­XW87ÝxwB¢! üïCJö%¥øé¥ú“¾@`‚Öÿ †ÿÓÜ Rœu“4“ªmäÍp1ú¡šBþ <îRlNb,ÏDQV+1V+qv —© †ÛÃmŽå³”æ±ÆrßÃóØá¹Êò>’ãy b'Ç<á‹åyŸ(ó=UáœÕ„<ÔCˆ|wù[¼øfâ¸él·Uì¿mcûÇ>¡ÿ÷‰ûÓ°è^ˆ~.|Õ °_Á»Ï?’-Ü*Y!WíoPçg?ݰ‘Ô¿0}°~”°už¸}ºyš°xž²ŠÎù¤l'¬Ÿ%l õÀ·‘+çÑë—±›—±ë1kWqÀuüæ»Ämøö]üÎuìÖUÌæ»˜í·Ñ[×Q›7q»÷ßÇnÐùL>¸ß…þòK¸ù}Â.ŒÐAÁ/ñ’w>¦î}HÙev€OtÚ5Ú.%ýûÄMæ¾€/i/¿R_ý˜}Ì\†¼øLÙ‡áàc™Úïi‡ßQ_Ý’·/cW¯âÖàï|³~µz½³ˆåóð…·1«ïb×."OCg€“ ©CßÑ]מÍg‹GÌŠ[5(åøð|q_º˜'MØ…&âDw¤JkU:X–N[—¡­ËRVe—ä÷‰áoíÉ_}“Ïý–Í­÷Á3x¿.^çœOZÙ­š9s•XvÌcVÄ[U$ÁLå1âË…ÐUE$^ ©7+ÖEú]‘µXÉÖGlU–,¥–H¨4Rb…¼o4ýÜ£tÒÀ¾[³›/ßÀ5ʱ“/µ•-÷Âk=Mò/³&ÿ¹ªó¹GôUÏZw_02Ž|jÐü±Sã´‚çwÃÒÿ¼ ·«Þ⎴{rVÚ!è’q:Çeßyß.w4Y&#4äM÷ïF´ÿ0¡Õ"ó¡]íw­ŽÖú4¥Z^ë*ĸ׮Óþ§7zÒ©hP—ˆk·„ó ´ï¸Tjx¡`TÀôæóàöäñäöâ „8@ʃ;ûø‚˜Çe … „@š¼ éDß)Ó)Ô+Ö'm·hp—xH&¼G:â¹hàsaô@‰V¡àfo›ËZ„BŸ‹„×ó×ñÕ †4 ‡5‰„·ˆE¶HF·HF=—NèÀ“;åRºäS{•ÒûU3úÕ³4²_¨fôidõkfjç èæò†ˆùä‚IÓÒqãbtõ–”?¤WÀ|ªZæö.èë·ãÆÌÛ ˜ëC ß©ŠÎlWËhS¥=W¡¶*§7+Rêä“«e+°1eRQ¥˜ÈɈ"‘±0h „B …C¡¥ Òü DCòE‹ÄC€2©ˆ*<ú#ðƒ•RÑÕØØZ||LB£<¹U™4)¢GC@û\5µS“Ú¡‘m·6ºGø…vn&F½:¹èÔãaÑB.ؾG¿üßEÊg~üÖ!· šˆ¹Õé%*Ie* ¥Êqàÿb¹¨JŸZUr­zJ•ZJ¹zJ±J2]>®Â0µæ.%Ç:8ÜÈÆÓè›ÞÝMµPÿ›ê:[h9Ú¨:Ø(>³Vq7×ô1#ü?ýÏXÿÕeÔÿ¦ÿ™£ÔÿèZ°V´³ÎÿÑÿŒ ~Ã_—銗Óÿ逇~ª !å‰VêCUð’9>Ω%¨Äã‰cs•`qGHݹ/‰ØH²Ü•b·ÆrYb9-¤9ÑW½à¸ïc9mq\e¸ËñØËóÚËs?Và¶Wàxž*p;*r9«p»ªñBåï®!è«-®/H»ÇßàÎ;ɶIEÎJî|­gÿ}‡ÀûDÀü? þ4 øcȇf‘³±µB¡ÉÁl‘ÖD±ÊÅÖ§‰xú^òÄ«ä…7É›§IûÇñ;§ñ›I§ Ë)¨üOÉ;§‰Û Û—q[`ËsôHŸÕ‹¨õóÈ5è@ËìÀ•ˈ5àí¬çÊÉ5¸ˆBQŸ ¾gT¾'i’ùî'óÝK~ÀoN²J±J4ã3A0Ž0æ6Œå5Žç3‹å1‹ä0 ¿cD±›”‹;õhF.Zæï=¨?rè:ufìž:º7~b=vn5ri9pnÒqBª?Ò©<Ö)¥Q¾§R¼«\´!—»ŠÏ^Áe-Ie­`éðq“<‡]ÕŒZÔñÞ»ëÿ90þ½_ð¶®ë¢Zà0>¼•Ï©ïþ ñ{EªÍúþ†Éĵ,Ã…8õ¥HÙWT‘o„ŒcIWE¢EŽ dV“ùçbyÆBØAÔýìsI\'uüï:9?öŠ~éÖÚÍUltBÚ}‘‰x¶ÕtΙ8d+ƒí»n…·-¢[ÈB:rP€»(S;-Æ~j’øÔÎ÷ó$î·ÃÒÞ¼]þl]þH²F»sÓ"ý]‡Ü@ ’cŒŒ#é[9Èm›Ðoúä~Û§õ»>½ßt¥Óx 9t«Ø-Z¸­XŒ:8íz9]úxýºù<Ûøžv‹?›”õ›Ã‡N‰Ž øòùq{ ryB;Àå ózŽ ø óy ðzÀöp»÷òxts»÷ øô¸ö {vñ»¶ó¹¶ð8£G x?ç÷jðmðkäò¨çöhàõ©ãõ®åñªàt¯áõꄃ„BšEßKÅ´Iǵcã»å’û”ÒúTÒÔhƒê£Úô)RÁ8±ÉíOèO•Í—O•N—Á¿N³–ÕóÖµLæÐ¶zΪfÆ¢jÒ´œ¹“wʼv´zé~ë¼MÓŒe-\™µª;¡²(_¸ß:w·yƺqÒ¢nÜ¢v̼jÔ¬€ÎˆiŰIù€a X=Õ_¯”Û­K:´²Ñc”iõò” l\)&ºX"Í*0v ¡§IrÛ‰¹ÍZ™­:è´O“&µÝ¦“Õ¢Ië&æôtèF%Ïõòêu2«5(eJñeJqeб%2‘5*‰š”jÕ”j5j½\V¢šRJ ×Û¦eßõ22ó4×q±Ps·Òv3Ñvcøÿ©µ øßÑJüïmò7ÿ{ß×fÊŸ1ÿCÿ›ú»søöPŒ‹.Óÿ Ä_"%Ù—ÀüÏŒ€oÅÿ/þ§¸Sžj¤ÆsÙËp:Èr1yªÄë¤Ìç¬Âë¬ÌáªÂî®Æá©Áå©Åí¡Áí§ËaÈO»Ç[éÊÙ‚Ì‘‘Ýä]ǧzïŸ ýØ#ôÛ~þß¼àýÚ!ð®Aä Lr¥3’-Ú–Â_%Þl:•²žÜ÷:qé"}çíÍQÜö›¨‹ÄÝÓøõÓ¤õ“Ä5¨üO¶/÷ÏbwNÂWÏB—¯"VN‚— s²@‡ÉEèÊYðòiÐÒ83på*hí2põ*hã}ØÎûð«à•·¡kïÂ7®ím¤ÀÖm, vPön“^‚!®ã·a¡±r†¾ ø:b@( s;´·ÉûLŸŸÄ ï‘‡á pÁ˜žz—´w»yÚ_½ˆÙ€ËQØz0Qø2\ÿ!§kÀqèòqÐ"óï|ä=sä1uꉞäá1sê:yê?—ý±K÷%]t7‡ÿ¢N༑å»~áŸÆÕ®•RĦ’8_q—#ç<‡yB=ÞÈ™IGÖsÙµøÔ¤±˜ˆ\T!ÿ8ùïmíß ã»ÿ4ÙÉå¿iQøÜ©xV%vX(ñ±Éð§÷ÿ4jyX±’Ž|iÅÿÔmô¶Tû"Û°ÇR&“S²šÛ¼žÝª‰Ë´…Û¨•Û²ãaò¸•Ýqã=£0…órçyÒÏéú‚ݹ‡õY‡ÓÈßåû³^Ç.V‡VûNΧœ\ÜOºùƤüú%]Zø6rÛõbÜ{¤¼êyŸT±Û×q;5òº7ðxT³»Ôóx?ilÛ‹„µb¢\|·lR>œß¯œÞ§BÖ¤èä kçiåŒ ÆõŠ& JæL+ÍjLkfŒ+§ ËiÓªYóš9‹Úi³êèX×/Ümæm¦­ë¦¬jï5,Ýo\¶mYºß¼b×¶ö°cÕ®sñîsô<³úq“ªI3ð0mQ5e^9mÓüw4NÞýÆ„M0fU7bU;dQ9lYŒXUOXÖLZÕB a1iUÿË3œÅ}úE½zyàä6­Œfµ´5Z£rZ96¡H<"_$ÆY|þÙü~9‚ù"Á…b¡£ÿmÔP T"V&[(Q !›X*_$ƒnû‚ÉWH¨PJê5*ìÒÏ«UJ®S$ßÅ|.¨‚À  M?¿™@‡›! þ/-Ć•16ŽÕ¨R›tÑÉ¢j Z±2¹ÎˆÖæ˜M»çíe¨ïf©óÌLÍÙLÓÍLõ¿¥²½µ’£•Š‹¹–§)É Ýù«Å?øßÇVÇßVÿyHø5ÐSækÁ̈pÔüÅÿÄ¿÷’7dÝ_#€Qÿ›P}MÁÿT#ª§ÅU7ÍI;õ±ZŠr’¥l¼‘T I2LKØ_ËwÇ]y&‹â$‡‘åt”çvRä…‚ßCƒ×[‹×GƒÛGÍW“ÕO›ÝO›ÓO›Û_‡+LŸ›bÃ[òŒ£Å‰C–Ò‘WÙì%¼ïê„n[ èúØÆý¶ë´Zôen:Kr0S¢9Q´Üßã½Bny¾s™º{EÙƒ²ÿ8fã0|ù(jíMôêyâæyë"yï QÛÇá›GÁ+ÇA 'A3oüæ^ûÎGþó Ofµb‹¢ø-ø,œzÏŸû,_û¯½ ܸô_~´ö.xý*`åÂoáÌá<`ñ"p ‚(Ñ[oãv®b¶ˆƒ‹¨ÓðÕ“°Hˆf"0Ó|~»ù­zZ·ŸÇl\Åoƒó™\'ì\ÆlE®¿^D ºü&xñUÀÜ¡ïü+Ÿ¹ïÙ7þ‹GKÐßsŸÜwxí5{ä5wä1³ûxðÀ~øõ“QàøÉÿæë- âJ³¶íEá Xpwwwww N€àÜÝÝ¡ °BÊ(\ACB´;í6Ó:Ò=þNÏô·OtfÞï[ÿ¿ÖµözêœSÂZÉ}ïý(é©÷pí¹r ×]gOœ'3(öÓmÇÑm­Gö,ûiF­ “òyý’éÍQø€v—{8Ç4Ä:±HALSãDD?ÑŽG4ãX4ãY5À¢YÔ"Y”(V•(8v­86ÍD5QŒA” ¬ú4",s÷<›oB'žÎ<óœyæ<÷ØrêXoèL»õ\§ã‘fë‘rÓ¾BãCÅæ‡òMG²5‡²åGòŽ‹¶2 w·Ô“74–åƒiJÁkÊa3r>ã ö=âúB`7xr”õÃíå(d= åEÿWSR\6ørÔ”¦QéÀ›g€4»!‡Õ‚ŸOH}9!ûI¿Âuèy5Ïi5rV|8Îûõ‚Ô_7 ¿]ÔüxRåG²æ?64þ¼¢ÿù ín£9ká9ªçúíœöwDÕÇÍȳNä'šâ¹¯×$?œR • _µ?3˜ŠB¶ …vK¹ž´KükÛ÷4ïßÌèï—"›yȧƒ²¿4Xf5ç­Ä5rª´±ZrºŒ 8õqšrÛöãG¹}g„Bˆ·ƒ—$ƒ‰üî˼.‹lvSì^“xÏqœ;ÆÞc ï6Æá>Äî sº÷±9 q¹.H„.Ȇ¶á­ó%¥XªvfŸ€_;‡×`؈p̨pܯGgeòd‹ˆrE¨Ú+Í«–’´ªW´k–@íµjWuÞ.Ë5j©'›¶‘Œ!½oß²ØsÙwÝuÞvÞsÛsßqÝvyßqÛtÅrxŒב_c>q|×y’a7°6ìöƒ[Ž(›ëvTÇaºó(Ãuƒæ4²f?HwßöžbxŒt·Q²Ó °hÕ¹bݹn×NYÆŠuï²e7øÅºãÀºcߊ]÷¢Uû’uv(ؼE;”` :U*ÅXoR»tÔ þàe<‘å¼QP#À˦Û)­’éMwî5HeÔJ¥ÖÞIª¤R*%“!VK§B£^6­¹_Dó4 Wé~§|ú€FÁ¤!:5´_»¬OëA—zq·za›Rv“|z½LJƒLZ“ܽ6¥¼.õÒ~êAƒª~ÊãÚ çúNÏüT ×sÃ`;Ý@m Ku[u°Õ+ s=t޳óÓÿX½8W}¬`¢ó® À¦ƒ&y«C €éÿ» ;L÷¿,àéQ„EI”Uq¤yq”)X@qˆ~Q n·F¾+:m!•a$–¤#£Ê®À*ǢĄ*³†«lÐR@Àî`°ȲÊáƒ8B”¸ÂTxBÕ9Aùc´¸â´8â5ññZl Ú¸xm|¼gœW¢WŽw…;¾=™HD–²Ý|üi%Ïu3ïÓNž½É¸IÜ}–¸û$~öÆãHúUí"Œr²~† þEù,`å‘ßò™éÔwùÄsá‘û<Šë‰Ópê2æ<ÿÈqîÈiæ¡Ãô‘ýplO8¶9´šÜ³Ù1Ú³@Ù2éÝ04£æy£šI­ÒÙÌ‘¨R¿|¼k«M&b‘3KÃ'ã ’XõîâôâYµÀ€pœZ¢‚ÈG°ÉÇq(ưÉD ·ÃÑ8D®@Ь]1hR7}Õ¤|ǺãØ~ø‘ãø¹aû•IÏcÓþ ƒÞsíž ížKÍÎ õæsÕº¥²C…Â=ùÜ¥û[Ê÷©rY‹âIó’¾Û / WÜëD”&²qW© .‡È‘DhÁ²ÓÎ쇹‚¿_ÒþÃ|= 1DwA$U‹»ÀéD^uI|: ÈHc£ÜEŽ 8ž4r=ïàzÒÆúþ÷_7•ÿ}¤ñªWâ° ¹ixTÌOKå\OEž´ |µ øá„ìïWõ¾YPø3EåOëšgÿÈPûpŽãoÇú_­Üù÷±ý÷KNmÎÈE•áa±Øiÿ?Ö£[~0 ±]„µKù^»ü½6ùìv(¨•óÁº4 ;ÕóÚUsZ”î5È¥×ɤ7Èf5+ÜïP/7j˜2m¶mq¯-sL 32 ²Ò ´Ñô·Rý°VóµVõµVý°Ò ´U qøßù¿‹êÌãâ\°´Pܵ=u“¼5¡`èe…ü¿úÿß]@˜þGZ¢ý?¨þ‡é¡úﮚ笔m#“n*~W_8N›?Z“;R3J9|¬&h8ªä,±jHœ £„¥Ä­ÌТЋQc‹Ó`Õd×丫ő¦Ë¡Ç™®‹OÓçèq$ëq'êrßÕãÊ4ã*²ã¨óbí gO`[¿Ç¶UÄqTÅ}ZÇuÙÌuÙÊ}ÒȽ_/D«™+Ío‹UŠ ¢ft?̤Ÿ¦=»¿ó8“ö(iåñ^¼ò!{Î?tžÚ¶X5jœQ/”É蔌¯*ãñ,bwÊÅÛf³Y¡vÀb$pj%°k&phÄáU¢Yå£q²qì ñŠ‘ˆl"…(@]Œèñ:´É†k§Òµ+· êŒ[€C£ÖGÆí—¦W¦§zÇ:5GZG:•õ«ÅËòY³’)#wœ)F'î©Ë>u2ð]·$–©WF†LùÕ8ËZ’ÂË.Í?3VrcñæIPáÏ5Dzý‘‡„^µÊ‰¸#GyOjù/ëX7±|4Âÿ‡5ÉŸ¨b;ø_„”€,Å saÈZ2òÁˆÈŸ6Tÿu`ñÅ䢉ûË)™_öm~9vøËŽÖ§‹<¿ßUÿŸ3½_Î,>Ó)ÕGÎKL63Ŧ#—ü¿_VùYõ¢ä›®‹Zäa1ò¦Sì³½%g¾2Ndð¶Þ Ý¯ë÷¤@Ð$ŸÏ(·ã„  Aܾ—ÇpËtŒÛ|gÔÍa‰Ñ…·êÀY´±V­,Ö öÍ,¶Mˆ]3Ρݭ•Í¥ çÔÁåÑÁéÝ/2p+¼_(b@8zôvâ”TúŒd&A*”áNá²Üƒ…ÊUŪ%”E¥Êe•êµZ`U½aE£qM«™¬ÓJÖkC÷ê4ê¤wa:× ;È&èÑ-k¦èé-dó`Ý¢gͼ"źŸn7Äp¡9@þ>ºé2N·íh6}4›ªu?Ù²—lÑG±ì¨Vp‘n;@€=†]wØvÇNˀƆý0|ÙªoÍ¢gÕ¢“n?°å<²hŽ.Ý]³EóÿuðxØu|ÓmbË =/~Ã}Œê2 µˆÿ²uï’UϪMÔ þ``P8ÀKŠ]?ͱŸbß»nÛ½bÕÎöÔ­QvТ˜ B]!‘R|+¶P$¶T<±L2 b‘hL¹Dètr­TräÝfÙ´VÙôN…¤ù¤nÅônåœN¥Üv…œFÙ¬Fù{-J9­ª9íêèt &¥Ìzù´:¹´ZÙÔåôAýòQÝúq£æI§–¡Àª4kŸ SCÈÿ¬5@üÁüÌUý­4ýmt}­´AÿƒÑ͘뿘úŽ8ic€n"íª禕ࡃMź€@ÿQñÕÏ ÕaöýGÿ±Q`fÿ%èa8: ´4ʤ$Ü 8D¯ÀW3ÏS­ÀMõ¾£Bº•T’©X‚‘p‚‘`¼¡@¼g¼{²!{š1þž1[–1’c„Ü7BrXòŒYóŒÙrMØî㲌XQŒ‘t}¶t]\¦..GŸ=×€=G5K% .ê³§èq%ës¥qg[°?pdo àˆæ_Hç äqm?à>¨à<®á~XdzWÃO«$U‰N õßëŒ1$&çïf-g<Íyxyº3=l]Ña7ãÐLöÝž=ˆ"$¬¡]ë÷Ÿ$ï]Åï<ŽÝ~ÇxOÃô€ëÏyÃx ¢°z⽺ú4|D{ì·~éµrá½.pá½ B iö©÷ê¡T¨ G Z; \…ä²ôËpêY8Äü:v`çáô³0pÅS¸Ša€#‡¬G\Ç3 ^xANƒ¢ã2xý1JýxJ*Ž›p8ѹïê‰çÒ#÷Å3Ïeø1'.óÇÎD4«w&»Ì‚æŸz,€ÂÃo;óYÐé» ?| €Ÿ •˳0Æóðç!4øë®ýÉWÞ«ž¤s·E&óg®D—®+—n$ʇ‡`%–ƒ “.ªaÓš~í¢fÙ„RvŸôÝÖ[\¾…,Î9ˆ]‹~*¢1“U/ÑJA´SqºwY5ïâ´ØÔãqª@,‹b4"ƒÈ@Qƒ˜–²Ù5 ywK„ ÉEO)%Î*§•Ò rÉsòéDÅ´y¥T¢ròèˆ.Q¯Q’ÚUF¹\ªÙ‚j‘bk(R«ÌÛ©ÅÚ¦<¸ƒ”*± {7Ú#»å·¶ky=nñÛq Iê÷u‘&„šÊ·Ÿk;ƒm#™ãYâ‡=ŠÝ~¯ó¦“åÃÎß“n=mõæ^!ÛAðVÖ­ù8äEß¿u¢hœÕó¬f"ô|ä¢ù’xûÏ›J/Gq¯ b¨þ_€5f)!sÁ¼Ç…’Ô d3ùjZúûåïæ•>?¯eyÖÂûªCø“¾Û×%·©~3úòòýbFÃ"ŽSÂ^£ÜÎcÜ–]¬jKŠŽT=¿fv&œ^§y+»q‡I»Y ›I#‹Q=bRy`Q‡X7±8¶à\Zñ]ܾÝ<}üÁC¢‘£"‰ÃÂñ·“'%3&%ïÝNË HæÎJåÍI0)"JÏK—ÌË”.È>X)_VªYU­')×.)V/(V-*ÖóJ5‹*u‹jõ ªµ‹ju$ÍF’v0¯Õ° Ý¸¤Û¼lØF2jÇX6FY5ëe}Æ Ú Ðl)½ ùà<°bÚ €_@„—o¯@dB‚‹&+Æà/TË>ºõͪâ¦Ý0ÃvhË~d›Ùé„=¿i7mÿeËN¬ÛgÞ´íü±í_µéCUÝa€á:ºã9ɬFQƒ°Á X³íevõ¯Ûô®ZuCÄz«ŽCPÈ@¤Úö17Žk'Ú´ÏX4Öôi—uk”´*߯’J)Ž;(Š( [y;¡B,¾ñNj»bV¯Zf·Jzê½N¥ÌVùÌfÙôú;é ÿ öŠ Ê™*Mª™@½RZ•ìÝF•´6•œnåÒ!­šAãBP{ƒ÷½Hë@K]? ¨­4|ÍÔ|-Ô}­4},QG²Õµ× wÔ‰pÒvÒ‹vÒÁ@÷uÂÄÿ?úù?X@š¿î@þÿÿ¯ÿhÿ´YiŒiI”X@a v¾XÀ}• ;™dK‰$‹ÛÉVbÉV"ÉV¼)–Ü™Ö\÷mðE¶¬l‘j¤Îitamucmõ`oó·zá[<Ùš=Y›#p6‹ÿhŠíi²S‡ü¸­ðGšÜF>Òáˆ,Dà¯kž&H?nAÞ ß¹iWÚ+9«‘|Ñ~ç£~Ù/Æ>%|1&÷^Úv”̼­d‹$o¿xŸv'›N'¢Ù„Ȭj¹1,Cë8µ*X4Ë­:D·U¿gÔÀjÔ€7 æÍ¬Öíxç.N^nŸ>¾€þ!Áˆþˆ~¾ðAÈ!Þ„A¾„Q¡”ᔡ´Qáô!´AþÔaþ´aþŒ¾ŒQÁ{cBY“"÷§Åó ’…‰â%¹Ê5å:Lÿ—k–”j—•ë0ý'©7¬é´Ðº6M{i†«˜ò뵬´­¶à˜\c…jOñ·î‡€nƒ’ƒà“-»!ÃgؾÍó­àÉnÐØ·;v‚˜w$“¶%£–EÃæeãV=ä×=ùwɧež®mݬ“fÕK6ï‚ö¢s÷‹Îeó®yã¶“ö%³N¢Qó‚ ºÏÜ%Y¶¯XvÈSìÎcT‡>Hò×lº Aw€ö²ºk¶‰ü6fÁE/˜: ɶ‡9ݳ`Ý>e\?bPÝ­^Ø(›Y. ÊŸX&[$Q~+¦úvB­dlƒôÝ6…ôVù´VùŒf…Œz™”:™”™ä*Yàn•|RrZ³¸@zbr£Zj³Ú½Nµ¢~­ªNÒ!Ûê¡ÀÊl»€ #Èöým5Ñ) fj~æêþVê¾Öª˜þ‡üªÿQŽÿeX àúVÿÑC=tîziüªÿú™Az`X ðÿ¥ÿaÅ‘Öoû¢M@ÿ‹# ‹‚uóý´À²ÝT3åRí¤“í$RÄÓœ$Óùï¹ðåºp•¸á+Ý‘O¤Ëíh c™ g!ÄàfbÙñ¸™t¦D,€d ÃãFpÃ~,¾,=¾,à5®¸b{– äž)’g…Ôzà:CyG’ðÄlJ>£µ€­Üä ¥’EÒy·[Eº"ÍÉéMç¹{çi{'wI‹=Dÿ¶~›‚*ÕØR¹èBÉèjù´>ÃÒu¯’kë¢Cë’C7ÅelÃ}vÇgþ8tåQÐ*p¸râOzè·pèC<òš;ôœ=p›9ò˜=t›ÙwœÕÅ4öÄuM’=–1ÀH¶¡¸ð[yL¡>ó#aÙ;T×ôÇá4p–g1[X/ýUâEõ<íºG—£à8#(gÁ+ðí øÇ^ n³ÛŽ“[ï8ò ‚ì;Ï9ÀtÀû®@¼"cÀ·ƒì?^I¿ ^¹ Y}N~M{E…ø,vãY<¸‰¤>‹¢½@Ë”çqŒ— [¯ïî|´÷æîݗьgáÔ§!T( ^„ÒŸP_Ò^øSÑác÷Õ'®+×΋WŽóè®KÀ3×ùKÇéc«‘}Óþ]ãn†NY­fM©œ¤P<#™ ¹h¯@D—PH¯g-—Ë6«"ĤˆÅ¸gZÌjTˆä±jç³iå³iäáTsYUòYÔò”BD³Ñ-B´ Ѷb«l.r; öã²A8Í>m„CA´Ù\KéAåµp•i7þµÉÇ%†/ ¿š´øtJçÏ›6ßP\^ŽéNÇ# ÖH‘ 2áÃEMCÎkÃ9 yTÇûz˜ïËÁo–…?åºnA.›‘ç]ì'õ¬çÍèjßãÖýRä´¹iÃßt°}0*ø¼å»UÁ/çX¿"ô›iþ³Väëe¿Ðå^uŠM‡ ëÉõÜÏúY>&ˆìT uûâJŒf'„”̾_„ûbTêÛu©¯çå?è–yR!µŸ&v•gtžä’Ë‚+g‘j«V"R58™8™Rœb9N«ŒE»Ñ­GO 6ia1oA,Ûqö=x×.ïažÀA®À!¾ÈaÞÈ®°>ŽA®ØQ¾Ä1¾¤!ÞÄÞ„Ô1¡tTüySGøÒÆîM çL‰æÎHÌIÏÞ)!H—.ÈW‚ø/«Ô.)×TëV5›Öµ[PtÑ^ ªQ;ìÛ·™nÒI³èÆ ˜u®›´“M; Í°îÛ°D½d€6€é纚ê£û6›u€àS¬º²e'Í® Ø ’ ú¼fÝ·nƒvÂ`Ó°»ëVØÉ/˦èª`^¿~Ѱqͼ[>0oˆîùÀ<ç =â’I+s;ÐV¸ˆ-ݚѩ&èÖÍ6¼“ízV­;øüM§Á ‡~ì[Þž5`€î)޳jÒ.†9¶¡(xͲyǪMׂeÛœYó¸AÕ°NYŸzQ‹ì½j‰ä·â #Š…"ÊDcˆDVÜŽ©•N¬’Š­”Н’N¨¸“Pv'¨M¬V¸[¯”Ò œZ§œÔª•Õ©™‡î¤QÒ¡S8âYSç™jdák®ãc­ék£åg©ÁÔU?•k´(¶ÓµÓ sЈtЈrÔþu9€Öÿ•ÿ§øj§è½Ót@˜Á»Y Ì…zïV䇚EX¡û?  # P Ó/ ÒÍóÕÎöTÏtSJs‘Ku¾“ê*áq'ÇG ×—¯ÄŸ§&ˆ£%„µ?ùùDd%¡d°Ð³X÷Y7òXù,y=¡ä#Ô\„–…PÓY¨©¬äTts­Å$ÖéÜ` [[0k­RéT{!-,]áìÉl„lÞµ|Á¾.ƮաÙbÙÁ\ùžl©Æ¸[ÝÑfkÉÕÇô“$ÆqÂ"#qz#a|À¡°X>¤R%îl\áíȪ;q½ºÙ$—Æ ß>’}'Ñ¢kÙfxÅnt LÇqºÓĆóä¦óÃy|ÃilÃ~„n7¼a;¼ç2uâE|ä1wä4uè8‰Š¿ûdÅWÞ«¯}×ßâOf’N{¾ 0{Zžª‡AA¿#? §@¾ý8”r´`ÝDP&œú“Ž}<ûî3І+Ø-xæ´¦°éZ²h#š·Ì˜6NVëW ó|T jeÒËÄâryƒ³¹}òüKDBªîÄT܉+—Žñ W*["õ@2®”ËÄÕ)§-*Y=ZÅmªyý¶=þ%q¦Î~憞–š>¶Z¾Všè\ +Uk%æ j!¶¨„Ú£;Å1-=/ìÿÕHþ±í ÿ[ÿßÍýWþCþ_i†éQ¤ai´qi„aI¨A~€nŽ—F¶§ê=¥tw¹ Ù,_ùÜà[E!B•áü­1<}ñìSɸåL-·S€;(f;.g{T‰?«Æ_Ôá.pçõ¬'uÈYËi5ë#¸UŠ{TŠ?,Áo±­çâæ³ðã)øÁxŽžXöÞh|_ {_ [ ~&G`=_˜Q(ˆêçJ©Ðl‘ÒP®zW¦Lm”PW„ÑlT.-b†2¿EØI›?¹¿¸ÚZ¥ó@!¢R1¡V!©Vü7¢O7cÑ®fÝ¥›ì<²j?F²…8²b5°f3D±¥;Œÿ·þo9Œí8Žï:Mì9ŒïÚŽnY íZ ïÛŒ;:ͽ^žº-^`}/Á”gaôg`LÑ^e*ü<À¾ûì®ó4ÉüŽÓÔ¾+á¡ç<¤úÇ^ó/¢ø-@ÞŽ™Å“(V`\…“Á®BÖž†Qn©Ï#h/£6^Çl¾‰Ùz‘°û:é]˜–zøAÚÑG™?H?|?u÷ã{G¦íºñ£ôˆL Øý8eø(uïã´ýÓw7é[ï§m>'c^ð:ñ"šþ,’zF£9X¸ X¼ô›?÷$ž»Í¡£ÃNóçvèiï—Ösç–„Só釯ã#ûúÃt»ôhwíª¶î«µ¨¶*·>TmßWlÚ‘­Ù”.ß’*Þ–*Ú”ÈÛÏÝ˦ˆæPEsÉb÷É"÷V…RIü ËüÑó\AD΀YNßIœÇ(‹û âÚƒ8Æ¢»#j"ÆŠH²sÞA8Õ¼‚8³#ùjüuFH¿rXÇ»QÉ2—,¤ñvº ›÷¹¾'*K=}À~Q&|Ó qYÏÿɤÌgóÒÚWúaKø[ ß¿5¿œ•øbòÎ/Ç ?è}4#ýtˆó;ªä7kâ_LßzÚ†¼îG>ŸAþ°*óÅŒÌË~Ζ…~$Ýú~êÖgøog‘¯gÿ¡¨}Ô­Ùçƒ\´ˆÿ¸cô|Jq&S¤;P!G‡gÀ_ò²Võ·SÒß¹·,ÿºÞ«Á÷‡Å¾^ÕþbÉü÷kq'ÅaµJiÈí"¼l§L5¯lj=^­Ã ï<€wdwâðåôEáðgœä e g掜⌜䈘áŽ&òÇã‰ÂÉ3‚‰ ‹YàKÒ¹KRyd…²u¥r²rE¹š¢Z5Y³`wÒ Û©mͰ€„ŸfÜA5E• šwlXuTó¶5³–u£6¸E3ëÂîÒ-{ÀÞE (À ¶íw˜ú¿å8¼ë2và>~ä9yè9¶ï1ºç>xŽøLøL‡>`ßgfÓ{tËg "Ýcˆî6l¸T—þUÛŽ›öe«V’uÛš]'8º-(v Ù¢mݼudܼD{”_·– U1§ƒ®Dþu1rý¢Aâ~Óœ~ 0«W=÷+PP {‡5­˜´ çNB4jV [HÍk:­«Ú-$­fŒs5s°žžu›ÞeËv(0 ˜2k7®3o6­3­Ð+iRLñÏáõÊáó. ) +ý(•Š.,•ˆ*¼^$U.W¯”Ö®z¿Y1»Û¤¤ß¯<ÕÒ7ÀÂÄÝJÓÓFôßÏ\ÕÏBÑßJÄd­l£b§n§õßúõÿ€øcó°]€°þ¦ø£S€Þ-~§ÿïzòÂ,ò#ÌAÿ "M ¢Œ ¢ ß®Ÿª›¤•駖᧜᧘鯄Þ.‹«ìIæ›ÌâXÊe¡"{eÈY-rUÜ4!/Û‘÷»{‘Oú‘OúO Ñƒ|Ôƒ¼é@^µ#/[‘çÍÈM#rQ‰œ<@ F6BÉDVÓRËb*+!‹m!¿^ÈI+æÞ( –ÞZ.½5S"8/Ø”.R­X`UçìWoÑ©Ÿ4j’EK&oe/­§õ7ڥ檄–«&×)e4+¥·*'7+ÞmWO›°,£úô‘œº×m‡7æFW]§ÖݦלÇ)Λ®Ó §Iª èÿĶã$ÃftÃzdÓvŒn5J6¤Z oY»¶ã;6c ‹¡MËa¬W¦: L€xè8 <µwg8Œ»Î“ þð™{.3 üÌŽýµ‹€õË@òU0õ2ˆò8dã&bûuì(ü³Ú‹¨ h k¸¢7 ±‡:âqè:XÃËØÍgQt¯â¶žÄo?KÜ}™|€’¸vð<~ëdøI{ÀûÉóƒòƒA¼NÚ{™¸óaÂÁG‰‡ß$ìïÇjÙnB7Ð ®”g´çÔKåGŽsL—n Ý/\ˆgN³ç„3ÛiàÈdø!`4 ÿ#á3ƒ¡sÃá ƒáKí¡SõžcÅöc…–S¥ÖsÅÖGr GÒuûÕ{âUÛâ•;{RUûÒ•{Òe»RŽ„‹vnç0ä×”|HJnkrÁ$‘ØUÁ”Eî˜eÎðe|$‰-r 0ÅæÜÏbÙŽXÄã¤<>#„Cž…]Ǫijå²B8mYزt„gâDÎjEöËxz½($Aêí'Mz¯{å^÷p=ïBÞôq}6*ññĭψ‘oh\?íHþc_áÏtɆ‘ßøbˆþrªóˉÁÇÓ|¯Ç9Kºó{šÖ«1o©R?íÉ^ mÈ×t±=Vÿë‰òÓ1üu-û—ãÜ¿™äz¿]|>”õ´TòçMÿÐvJò=Î\>Z.ËY½È'#Ú¨~3¯úÔØo†¶³¹¨™Èuë-¸NI”iT竽pÔá%[pòm¬*­ˆV?§õ—ë(»Ç0›Û›ç»Ï(›ÿ(Gð8gÄ8gÔ$WÜwâ4O@àO% ¡ûü+byË"÷hn,‹å/ß.Z“z°&S¾*S¹.WMQj *7•FšZ+U£¢^O×jbèµúm ƒvª~+E¯…¢ßJ5êÜ0íÙ0ïcXôcl03|ëð¡[CcI?6“Ÿi¼]?Ä §á-×±møÇo;D³ê6ì†Ðž›^3Û‡Љ:î“À¦ÇÔ¶a×gn×wê €p4Ìíùvüf¶|¦ nûNoxŽ“]ŠÇ0Ù}hŹoͶ›lß»ÎìÕGXµn_³l[6m"™7’LjôkAÿ%Ãz’qãŠY3”èÁúèN¡SzeS†EtÏÖ»Ê ãâ1½Ãz¢Që‚AË‚^#¸6<ž8iØLÔk êÔÃõeÃ0°( v€ ;†Ý}T¿¬„¨‡î#4gT7¬]Ò¡”]$‘Áí›Éç›.è—!+ž#š%r_!<].ø®¤ï=™ÐùØ"™¸2ù»Í†9C¾å¹!Fƾ6ZN¶ò®J®–Ê~æúÆÆ~–jÌu? [´#ˆ9À<À =,ÞE3ÞE=ÞMãí.¾Ú) ÿzéØAYa†hþfp?ܹ„!mÄ冚煛äG˜æGçEäGyú÷Ãt³C´35ÒTÒ”2•3ƒTŠ"Ä«ân·$‰ fòÏæq¯—°íT°<ªg¹nf}ÞÎú^/ÛǃlŸ°}5Žûv ÷ÝË·lßLâ¿™àøíÇWc\_Žr}6Äþq?þMîE+ËuËI9²_‚lâèyxJ.çJˆ?½ˆs£˜ÕÿÑÅbá‰"áÎûué¢U‰ª%A¦ zºÞ¼rÚŪ®­ž÷zBr¢2Êý³õìóu< Õ|KU+Ô+Tý+TZõ“V¼Û¾ õ„}×ešÇ,Õ@u™¦ºLÒ]§¶Üf¶]g¶§@¥1¹ ]ßr˜bØMlÚO8NoY;¶ã›V# ÐP~Çéwì;LíÚMÀÅ=æÃ»®SÛÎ þû®ÓóÃGðá‡îsG ÀCÏÅcïåÒ#ßp´vX®‚Ö“¯CÖ±[|lܺSýžÆo¿ãYÜ6ºx9ÊpW‰;Ì!tð÷I4ý4¤àÃ/× Âù‘ÀŒÎ|V˜Ã¤K¯•3×…cÇÙS'"$üO¼HO½Wžx._{,]».\9¯çϬ&MG N@üG@ÿuú޵zªt*¶íË4È4É6Ë4HÖìˆU`â¿)V¾!RB¿UL¿UHÉv„ri©t¹¸mƒˆKÇ»gæ)+â |á ©»+‚¡D6¿YÄgqF¬»³Ä"/ŒX"¬ê,¬Jìì꬈§0ËP€Ùxf’,ò¤YáïdË÷zÕf¢Û…K5¸fØ.êå¶‹XwŠ‘ó:亙íÍÀ­/fE³Äÿ» Ñ?nJýϑƿjüaýöu+òåÄ­ßmŠ@ÚÿÁŒÀE7òɼÀç‹âŸ/Ê|¶(ñ_®u? pLäÿùTí—Çš¿<3„>ùãŠü‹.6z62Ž<*çÿÃ’ú?·ôÏj9—’‘bŽ£JüIý²÷f€û£^®ßŽ*}>¤»]ÈsÓ!wQ£R¦‰ˆ±–•²‰T"wêµfD¯ƒÍ¸ 1èâ°ñFñ^“\þÓÜ¡³|Q³qþ¸yáäá´%‘Œ%‘{Ë¢Y$ñ·¬Ü¾Är–E³—D³—År—Åó–o¤ŠWdJ×d+ÖªÈJu4ÕF€¬\¿ª\MV«Cõ_§…¢ÙHÕjbZ@绎 Ša͸ ,`ÓrزîÇØ´êƒ¸k7´ï0ìØB¿Åô´ ˆÙ烦ý®Sû.“;ŽcàTë^t\Õ® Ûö`;žÓÃuœî:¾å9½é9¶å5@ƒáqbÛ{ Óÿ½€Yˆ›ÞãÀ–ÏĆÏ8¸6™Ÿæ4@q裢ôíºÐuÄÖdæ¦$ðÓ&(VM›—–M—P}n˜Ö†B nZ¿|B¿`Á¦bű–`V6aP1cPGÐoB‰×¨žR/Ÿ7lZ0j^6mƒœÕ¬d,€ Y3£Y U¨=|Xz6=v%³”@©1¨ŸÑ¯žÐ­˜4®ê×.nSË)—IÈôOàvMàuOòJóË È’M“H¸å•$â›+™-Q¢?ê_Sç•æ§¦çc¦éi¯æd-ïa£æg­ëo¢ëk¡ € `€£gÁ8jF;jaúŸàª•à®É<XÓÿT]ÐÿŒ`=Tÿ™³@Ñ!€0ÐÿÿË䆙æ†31ĸ¦d‡éÞ ÑÊRKTÍ QÍ S-©MëJ¿/¸ ]ØÀvÝŽÕÇþá×çãÜ¿âþv–ë"ç‹?-±ÿ´Ä ü¸Èõ‡Ež?.ñÿaÿ‡9¾o¦¹¾çøtÿ^ëÓfÜy-ëQ%Ûîüv žQ½Y 0ŠxÅBë%¢ó…·‡ D›²„ÊRÄòãäá'%»ę餚9Ûä¸溛ùXÝw1ÌtÐʱ×Ï47Î2µºgdgl—o`W¬í9î\Lóf¸Lí»-ìz/n»ÏAÚ¿íNØq#€òo:‚Î35Ÿ9öê4¹í4ì86gÜf1k€[¶£à äÏCy‡ëðFlèÓù=—)ì"´á½¨ì»Í=t'¸ÞŠ¿×Ò‰÷2X¦ÿØò±×V#ÀËËàul(@‡•ý—.‚V ¸ '_†­cë˜SX)aë¡kgÁ+Àã ÜE`>v²zDzˆ"§¾‹|ЩJ~Ëg+`47áô'¡Ô«€µ+_tæÏ™ûÒ©Ëü¹Ûâ¥ÛÒcÒc%(®ÜPñ¿tš{â²€é?äÿ§Æ#ÿh÷ì©uûŠ­Û²›R5[’Õ;’Õ»%ª@öÐÿm‰*`K¢|ëvé¶øƒÉÒ‡wÐE^§Fyvé¯ýòž:e­É„®Š‡¨§R%#æyýf9|잣x§6›6ÛVÕ4v)VNS¯ÃΡ… ùz\ L>l²ØÏü¸[þsOë•:<*d»LýE¯2£ˆo»ˆw¯”k·”õ¤ X‰\µ!Ïpµ,ò#Cõ—3³_.@ÿŸu"_¤ÿr"ÿršã¸ yMàþۉƷÔ;gP5Ì}O“úqçΧDþÏæÿ¾'ÿóC…Ÿ>á}Tà»zo†…vËíB丒xÑ)øá äf>²[Œîÿµð}üŸ‹þ~NùªéÖq¥ä§cޝûM?5¦e‰Õè#ƒf ãzÆåìÒõ¬Zí8›^—nvÛa!Ça;toNßižÀYþ°yÁh’èÝÕÛ©$‘ÐÿE‘Ô%Ñ4ˆ ·R¸BJ" ¦Ì ¥s©DáôEÑ{ ¢YÄ[™ÓBi³·²fE³ "9±ÜyÉB¢D4ÆEr¦oÎß)[)Ÿ‘*™–,ž¹S:-]B+_P®YP­%*WUk–µWtš!®j7®h54ëhS ÚèF]ÆÝà`t“ntÔÀ¼…Ù)´nÖ 5è?` ûn½föÜ'vÝÆ7]FÑ5bèüÌ© —1°€]¯™}Ÿ)`×k´é6Js¡º “¡A÷£¹R\‡©nCž£oÀeÓ Þ>ºá2Dýu?Ýi`Þe×»jÑÊ ½jÖÆÌü뱑Ђn èÿ”AÉ¢m5ÁüÁ¤Qé;ý'ê5Až¿¨[‡mC‘ ö¡CL°“hÐ4+ à+ÞŽ83 °ô» Ð-£ëF ʇ ÊŒËz ‹jUS³D‚â¹\â¸]ùÝãÝRÄ}ã…Ý£ù]“Eý„¼RÅ›ìr=³£õü õ½,5]ÍäÝ-½,T|LU}Ìѹ XÀP¶COŽpÐøoý·ÿÏÿÒÿ ƒ_»€Þ.€àívp¿æù9ÁfÙ!€iv¨1CìùwG÷B´Óƒ5Ò‚”3B•³"ÔÊ¢„êïÞê¹'2](¸Vλ]‹ÔÌvÓÍöfˆýÓqÎßÌò~;Ïóû%žW¸ÿ²ÎóW2ÏßÖ9ÿNæ‚Æ_ɼ%ó葾‹¨A|=Åþé0îý>ÜóüE3þ¤Žý¨¿]νSƽYÊÅ(ᥠ“ŠnOçKôß—¨Ë{.“ Ÿ®–¢†s¬• ’¬˜ê§”꫚ê§uJ²—jš§~¢“^º«Q–“IŽ©u›}²w+ÅidÇ Íö7§v\¦÷Ýg<þ£á` ïà».³[.` s{ó»îDˆ‡Þ ˜Å–Ëô.¼Ëk~ß“/1v±ÏqŸÝs#GDý}´Ö  NáNýGgr:Ï{Ì?ò!ú®˜ùÿE ìÚ þðÆG>K˜DcÁ þÐ~è»t´vΜ_„¼²…`š+.ƒWÑQãÕK¦/p «Ð+"Ñ5nW!k`%/b¯âv^Ål?ß@ „€õ+ҙǹçâµçÊ•ûò™ó<Ô§sÇvS'6“çv3§–èh¯ñð#£á‡zý»;*mÀ®bëžBËž\ã¾lÃLýþºƒ;uûÒµáå!óâžtíŽTå®dåžTŶDɾRé™IÉ®Aò–nC#–(°$¾*½p+˜Àë?ËHä žâ áóíðjá·+Æ«ÄãDñ·4¼«$~£ÀúeùI¦Ò£ûjï7é;`rS©¸‘ÁÖ$ó Ùð¦[n.·ž)uY«ÿ¤Eõ¸†ÿ ’å² ÷Á8ÿ‹AÜëÒÙTø×‘â_7EXåûýšÈö¥þ~ªþÞ,Ïk×ïv¤¿ß”¹Ľ!ð½™áøÍšÐ‡3Ü×P¸¾[øa]øƒqö÷'xÚR€+Ïû‘§í,Ï:xV°çPn» ë.ûHA·4¹àv¯ÂZŸôP]3O@k]oKewSy?+%l-€Ÿ¥Æ;ýùUÿ£˜Á»è$2÷ÿaž¦û¶ÿô?@/“©ÿ˜¼Û â~¨An¸>d›bÜ 2Æ€wqdf†è3ÏCõ?5P‰©ÿª•1BMI·ú³„…”JÞÝzöÓVÜMîƒüg“¿ãúa‰ïÇuþ¿Ñøÿ¹!øó¦À?Ü?oòük‹ÚÌ—üÿCø;•ï§ÎßÍsüvÿéþÍdzNüe ûi#ûv Ïf%­œk½”o¥Dd¶@bø¾dû=ÉŠ‰Â»ÒYqŠé±ê)ÑIQÊÉQ²iqwRB•’ÃÔS#´“Ã4‚ãâ‚”‚5ct£}´“} Ò+½g|Ð<úAÿw]Q@ÿ!cÍǺýw&±DûÈsñÀ}þÐ4éÀk⑈0éØo{s˜` ¼s¸€æc€òŸx.ïôÌ^ "–í£y¡(;8÷_» D÷¸ ¦žƒCdZ(ÿUõ&Ý›â"„ü8œv²z…Îó¤?‹eÜÄl€ ¼ë#@á¯#©pëUâÎË„mx.¾ŒÝ|¿ /_Äoao;@}!¼Fçü`‹ÂüVŸuÈÿAÿωçNó'v„cë©GÖÓ6„3‹©“‘Ã!ÈÿO ´zvUÛÑCÞÕÚÕ:ŽUÚ•Zä1@öw¥j (دD‘€Š â†Tá¾fɆJæº\2]>c]"y]:.wŸ*—³&™±,|wž?~†/fT d@À¿[À³šC/‘°CDU+q¤=Xz1RªËŒ»AŸsÊGx>9ºÇ÷eŸæŸ(F_,ÝÞ-œŽæ½¯ŽŒ‰¼îµ8®¼lá}oHô¦›ý ù|†ãOt±¿m‰}³Êö=÷çÞ/×ø¿¥IÞŒ²|NâÿŒÄór’å³%áß®‹8Ëõ·#ůVDžô#Ïq³.ô¹/æù>™á/øÍ2ë·ËÜ/ºp¯»…Ϫ9–#¿[Rþy×äÏ4½ëV¡Í<ÞÑ|’#‡$ >¢èªäö㙟¶Uÿ¸¤G“-çìä6ærÁ¹³úŒ²x #ö\öýˆ÷KÀ([ð[è[ø{ô4WÜG<ûî oÒ,ʯ$Í $CÚ¿$r; ~áÖ½y(r–$ò%󗤊–¥‹±Y@ëŠÕT•:šZÓ²|Õ¢lI¡zE±fY©fM­¬Õ¼¦Ñ‘¢Û¶aØÅ0é ò|&Ͱ¬×²¦Ó„…À‚z0¯V Ì©ÕΪÖáŠfâNQRâfæJ±VŠº €lÙ½nÕMµEû‚@ŸéŽCÛnã‡>„‡~sÁö½¦÷<¡ ˜bºê‚=ß¹}?â¾ÿì®/:°é= åÔ þÌA„Ïi¨#ÀÞ-ìÅùbË¡¾ 8 ­Ú Ó8Ñãà™‹ÎÖ,»ˆÆõS&õ‹§MÊfL+‰¦u衺³: sÚuD­Z´FЮšÒªñ'0G–ßA2n^5meîh.X4ný‡¿tN»aF£vJ£jL­|D­|R·vB¿fH»¼[½°W»dĨbÒ²nܪ¶K·°R&©@"*EÀ+^Ð#VØ%\À!\È1\Ðb–Fxopi±Sd˜ž™¿v ¹äüÞfŠØZ€_õ_©ÿèŽpöšLýG”OtÕE7ÿñÔ{{°¯¦ÿÌ)@o-]¬—‚ê?f˜þß 223Œ€ô@£´ =Ð*ˆÔ ÝÔ`Í” õä ¥ÔPÅÌHÕšÁ¶dÑÁ,ab¡ µ‚wòÿ֧ݬÿÑÿOd¿Ó„þ¹)ô3CèßÛ|¿ì 0ú÷®à/;‚ÿÞ#ø;™çËìßͲ5ÉþÑç‹nжÓF6F?µ†wµ’o¡LˆPr{4Oª3S²>Uº"Y&/æNz„lF¤jz´zr”|b„Db”ÈÝPíäpí¤­øpÍØPuŒ˜Põ¨0ÍИ =°€lG‹^÷»«îí;ÎÄCâC¿…#¯¹-§qºÝ0Xšù[lÙoÛOì;Ϲͺ÷\f÷œ‰»NsûnD¬¯뱇œù£³:O|—޼æAÃ1z/û,¢"ï 2Ùþ©÷Ò¹/éÒÝD[™‹ÕØ:/°¨þ[üŸ†m<¡OÃC)—¡üg1[Ïc·Aÿ±•e¨¤GÓo˜½“tÈóQIgîeâÿúîîûÉûá.j ÌÑÌÐEaÌZ ›pæ¾F!Ô› èÿÿµÇ¾+—nK®‹ üÀ•ëÒ•ó¹Ýì™-ôÿÒšpf>yj[@~ÜåýëŽüGÓ\/†WãÈÇDü§‹\¿Y½õbŒåËUá¿)G“~6ŠÿrUä/Gr¿Üèþi_îU?òÙ$îïV„7"WuìÊ96r÷ú„~ydò]e¿ ßå‹tyÔ˜ój³f˜ Éš\ö¬H›ÔÍ ÒœZÔùªÖoBÙ¤“ÝjïDàöœ`u'pø“¢&Ùü¦8# <1‹BÉ+¢™Ø_dñ¼5‰<’hî[Är0Vnç¬I䮉¬ˆç¯I’¥‹É‚‰¢é’Õ;¥$éÀ²LÙŠ: @QiØÐhÙÐj]W©_S®£¨5’UVUë)šÍú› û £î-“Þ³þmóþ]ËÁCÛÑÛÁ=ûa`×nÚ›Öƒ «-›¡mÛá tåïºY7Õ¬gÅ ¤ß ú¿dкlØ.€fàú – ™«èJ[‹NÈÏ!K§Øô¢¾à0©;˜Âžç è?€xÀüç‰AÄ]h>܃ F€%8‚àS‡Éöƒ4§‘M×É-·)ªóØšýÍvpÃ~˜lÕ·jŽ.=X¶hY²h˜3­"šUÏVÎÖÌ5@&¿`Ðiüœ&$ÿeÌ3bÐ~Íöµ«9šEæ‰Ã«fTëÞÿ¬ÖiœÕª'h׃ƒÌh×OiÖŽiT¨”ö©–ö«•ôk”öhz¥`P´iÔ(gÈF¥ˆû&Jx$JyƉ¹ÆŠºA»Ê2¥Ý/·È1šáûjYúÇmÕ¿1%?¤‰ÞÀ>œùûŽÊ'z?ï©=jþ˜”>Û18ÛÖú’"z§ۺ±˜‡øÿ§uÕwÉü7°F_¬Ö›» ¼^ªJJ"Ç©·¸‹m\ÕýtÜüåê/£î²}ûäÌ„½Æ„‚&Dƒf¥ÃÆøüIÑSbé“¢©“¢i4‰Lº4AvœŸG?G‡À^â<öÓbùS¢y“b¹SâyÓâhg¥.Óe æä rWgå®Xêåóªetå²Y¥Rºê9õ &¡r^£j^«š©YÅÒ°¿~A·n^§­zus:5 ]Ôÿ € C¿aÁ¸eÙ5|­ØwãgûoŠÿwÙž €-wâïÄ1ü;  îûM ²Ïñ]÷±7":ÿwa[:ôá ¶yâÕ5@¹°ÎÛw‚@ˆtŠ*ˆÜGÖ<‘›jÝE¶oˆäABQi¨ÀQÔ p>¨Ã~ÈÔkøKàaûüáÛ½FW}HÀÿ°g9ô­¸ ÁŠz!h·k]pn[pmŸwi…àÊÅÿð'aX¡ú4Þ¢nƲ~Ú¼‚ÿ ƒJ< ÀKLÑ%¯Y=j³ëÄ»ØÐj×I·l›1o¡™5O›5ÓÌ[Æj4K´K‰•C7zµ‹:5 º´®"w í«}F=¦euzç/)FçÈd+øeÊùä)SµÊ.k0¦´1ìÜy§ hc›pcsÈpkÐHg½(48ÎU?ÑÃø?ÙÃ8ÍË$w È 6ÁÁ䇙ƒ\ˆ0\Œ|-Wb,_Çÿq–×â,¯Ç[½!ÿ¼PDû¹¡–0g›g†˜f„g„f…ëgFheFªçÄhœKÔªMlϔʗš¸$B/ä[)áܯÅî·s<ï…€ûÓIþ¯g…`ŠüºˆR€oHþ¾-þÇŽÄŸ;Òg»2gûrg{rgÛÒnHü¾,úó¼à·ÓŸQ„?"Š<íºÛÂÜÀ»T#ɬ€È_fäšBו† ù+gª^KU/HÔ¸«}1VïB¬Á¹8½s ºùIºy‰º¹IZYIªÙÉjY‰™±ÚYqz€ôx½”D½Ä(œHËëA>ýÁYý{>Œ-ôëDìNî"þG7¼^”#ïIä«ã9uÛ›v/`î®ïÜ-`×… /‚(¸SaƒûªÝ ˜»å3ƒÊ>½¨øÞcŸ©Ûþ3wƒ¨¨&dâAä2hd¯¥íê+›óÅ¢RŸÑÈJ^6~š°ŽAä´¸½p7vé<™¸òVæÎ‹ì=À3vmÏ#v¨ Ë ïÓ6á-öƒMxö“Pð?¬Àÿðáð#péŸû7x1¨ô¨^î¸@öF«ºLOkEI|G% )~NSøtZö³¥ ?°¤[“ùc“ð¤óÃa±³Cƒ?oi=±ýl^ ƒ™úpJàK–ø,Ѷd¾^‘þÿm_ó=ªà3"Ï»B¯˜ÒϹ$õœ„Îü˜W;»izvKïìHïA#çæel¯ˆó¦Ö¯ëšŸÑÕ~Xt}Ög4w™ãA¯ôGÓª½‚UúØl4ßF.ïþEîÓk ·³ Ë„±j^µ1×N>×n§.;ª|ЄlQ,‚,‰ þ"'„ãÆãHüñdÁ$Šh*E$}B8,”JJ‡u\0…$ŒVÁ ²pE4A"oRêUòܸXî¬BM±€*{y\ê„̥)…«T…‚q™‹ãòdØ+¦TJi„rE¹xJ£œ¡W;oØ0§_GÓ®Ðõjç êéÆ “F¦Yó‚E+Þü‹×üãõÿ¨È“] <¿á:²Ín¢Ùð™€u׋„«À–çÈ¾ßøaÀ¬Û^Äuˆö=†Ö܆—€?ÐŒPÜP$°íG~Cï¸Õ'¬ÈÚ¼4y<+à0dö @þèÔ(x"ÿ ŸqHÖ½I+Äe·aàÿEÇ~ø¡,ÇN– ¢kÝ¡eÖ¶µ[4ÓÍ[¦-Sf5¸̘CHT€Ÿù³Q?mÚÏX¢d¤_vøPXçlÛvÓ–Í @þ$ãša½ò­ë(Ð+íÖ¼Ú®v©]³¸Uój‡áµÓËåºiBÓE=2D¼²Ä|ÎËçÈ–™¤DTôÇ•Uúg_tŒŠ¶3‹¶7‰v4‰t2øòª§ ’öDx²€F&(5?fq>Üì/0c§–WcÌ c- ¯Ã~ ÿtT’d–h H2N 2L ÒO ÖN ṎPËŠRÏ#ÔÄK´¤JõåHå‹L]äe]ÃPýgö¸‡ó!Η|_Ò¿cý¼ òe±ß×$ÿgSüß»ÒîË"æß“=Û‘ùsKêß«âÿZù™)üÝŒð+²ð»ƒÂº„o7 í×ò/•KÎK®Êö^Tn<§^‘£^”­~5Sýb²Ú¥DÂ…8Ísq:çã óò’Œr s“Õs’Ôò’Î%©å&r´³õ #ÈHÔΊѿlW?V¿BÞöšÚ €¼rj'€ ¿';þ”Tó‰Û,Ãï»QP¤ÏÌ©/·A;ñ£ßöÅÛ¾`9-ÀÉÙ¯ùN rÆ÷a™ž&<ŽYƒ˜÷g†•Mû‹À½Àù¨È3n$8¨•â-Ç-á•ÿ¨w8aùQÒ*°úiÜâ½ø¥û ˰™ßeáëIô<¼¢À—¸)þ ¼xž±ývÖ.’‰Ø•ÑK¸ û§/AÌxž°õf>“fÓv>‹ %¿9h²RY,ˆ*:-I“‰¡ÉÄMKÇSÅcÇ…£É"1¢ñT±äIñŠhÒ„Hâ”Dê¬L&].&=#“ÃP:ÏT¹8§|¡|i^­€I¸:§^@S¹<­|‰A(djá˜×­fêT1´*óz5KF ‹†õsú5LƒZÀœa-Ó¨Vº~õ¬^Õ¬n M·0­S˜Õ¯7iX´j]¶i_wèÝtêßvA-À¨OÖ¶Ö §ÁÇM7â®×8äÈ©ƒëšà3~àO9 œ<š: œ< š:†ÜþU_{±Ý>ûœú ØðÃÏùqù/{7<ˆ;>ãh¦Œçðûa?ˆòúú €ꀄþ]PÛþ”5ðÿªë0(˪ÛÛðmo+žwêDfA¨’§âÿ9Ëv–px+ÃTEû¸ãÄ´i/"þÇûKçÃÃL»6àäáÜ;϶Œ˜µi7© Ô)Ô),`ĨbP¿¬Cýr;¡°Mój—þõ^“¢vã˵:Ù7Ô“KUKÕ’Š”ŠT Õ¯JͲ;JIIMyÞA¦ºqNæq.¦Nˆü£\tâÙSƒÑù§Yš—)ðšñë€]džbžòÿI® W"Í ¢,®F[âlš‚l‚hßµ’¥ø%ù$ùê%ùi'h$©§„¨¤…)gF©Üˆ­IkOÈâÏã¦_æX/à 8mÇžôbïŽrÿÊóå ß÷LÁ_XÂÿ\ùç†ØïÛ’ÿÙ•=ñ-ýï ‰­ŠýÊþ‘.ôÕ¤àÇc‚Ïzï´ Ö nUò3‹Å&¯J œ—kÉU«ÌÖ¼ž©}!]3?•€ó|N‚zn‚fn’NN’nV²~f²afªzN²F^¢Î…Dí I„üµì$ÍÌÝì4=È.„VùC‹èþÝ,H]}' ìßšÚö›Øò%ïùQðúàÿŸé}Äÿ Àðè‡×4°=‚cŸ×~›oþ{!L¡ÑùyÄâýÐù“`æí ¹»¡¯ëùñ’ûÛ!ŒÓ(>\à4jp?†äθ1Ì€/Å/ã‘üýxTí *Ü~'vp7ná~âÒ½„Å7Š€›W£YlàvÖùàuþ!@A"²EþŸI›Ïâ7ŸÆmžÅ¬?Ž\yºx?xá®ýØ}úÈuò¦û4‚#ù–ý80?Nþ‡–£¨Ï×lä`2|Ódð–ñà‘AϾvàX·k_«ñ@MrÙSmØQ¬ß’¯ÞV¨ÙS®þßR*ßU­ØP(Y¿º¥pcC¦ °¦x)yŽ)qÆ›3Å•IL¡òùÏÉ…S¥ÃF„|YêqóŠa“â>3Š!ÓZÁDMw’®sŽC²€¬†™q`2BÄ8“êÐWÔˆ'ݦ”xî^wÎf ¬Ý› çXÅ&B±Ãk²ï÷¨¿•~Ò…ÝoÆ^ô ½$Šþ±®òë¢ÄëŠîi~Á~Š='c_¬J=¶þýžÑ7ÛŠŸ,ˆ¼Zÿn[á‹eqƒÏ楿˜—ÿlVúì¦ñ?·µ>ãûš.õ9MèìÔîß':ïOa¯<_ÌÊÝ©çØ.ƶþ}ÁæÓq˽)f.çá ©W¦¿.Û>hç¿"‰MùKÞº¢ø¤Jê‹AíÏ{­öÓõ.òbÅ|REÒ70™Z•:L§ 3nç2íä5éã¶äst# y½G|†ø¼û¹¼yüú¹üú8üú9ý¹ƒ‡xBü¡cB1£‚±cBq$±D²Dò„d E:cJ.›,“A•Ï¡ÈçPr§•ÏÑÔ.Í®0µ¯1´nÌi—3u*æu+çõ« ªYuˆùÙÀ2m\±lE“ ¬Û×m;·zÖ­»¯ïMÿLs¦ ,Ë–U»î Ǿ-çmçá]÷Ñ}OÿºËðšó¤¸Û?Ûðÿµ¥3HÀü»ó%ïú’÷ý) ìù¢‘(Aœ< Â[[^c‹ +è8hÙcwøÄ=Ÿ!†ÇÇŠmyq €WV\û_Ï#ð›€Ýe>¨ÀnuÝs|Ós >ž•Yw„'ë^#+îÈnɹ’t¥‹[›Ú¶.8t¥á !`›!“:ˆüAfÌ›ðøÖªµ€Y5A1çÐŽ ÍÙw¢º#»ö 3€òa½2Ãòaò½âÝ«š€~ƒëƒ&¥}ÆEWZõ/õZ·v[–;×ö9TvØ•Žø7Î%] ·0Žq0q2ŽvÒ‹u7ˆvÕuÕþOt3Nö0Mõ0ƒ Õûu ðº ]›åƒ ˜½Vÿ§ÄXAÀÇü&@ûÉ~†Àü‰>úñ^ºqÞÚqÞZñ¾„ÕÄåä`ÅÔPåÂpÁ’(Áš8þÖ$ÞLNêlá:ÇfvÔˆ$àéöþ8ç«Iž¯gyÿÎø•%øÛšÈ¿¶$P °ÃÆ–Ôëâ  ¿,}K|5!ðÞ°àƒN¾ã&Íj¥2^êuÑ‘Kâm9²Uê×ÓuΧjg¥hd¤Ò“Õ3’ªYIª™ÉjðbfŠVzªNZº.°}^‚þÅ8ý‹ñºüg$k§¥ie$kžÑ/ tì LŸ lFó àÕwùûOîûRü¨·‚éÀÌx•í {^“»žTÒ6¶ÜH‡¾SÇþ´›3øa¬onxñJXQé&|T0ýNªçGeüì~+t˜³„—tÞ‹^Üd@€ùo†Ì€<ˆ]þ¿³€Wlâx’²ö8uíIÚúÃä`þIËøŠŸü#KýH×þ Wâ‡ø}ûךôÙ‰ÞO«JŸ2Äž’°÷œ_¯+ÿz¬ùÕºÌËyÑï6”^-ˆ¿MÁ¾]“ûi[ãëE¥'…?™y6€ÝïÄ>Ÿ•øÏ¾æÙ«_vÔŸ `_Òeÿs`ò=Sñ¸[¿Ê³”/Ýé‡=hQÿzÆþn½æf‡CfO»%W²Å7Ή>oÖünÒâ[ªéWDë[Œ/ a\â¥<ò•¼’µ\Ò˜f3fÚ‚™v€ `f˜y'fÕ‰Ywav=N½œ®½œn ý\>}œ¾ €^ 6ýœÝXA€.Žà®Ð^žÈ>Þ¨.ΰ.žÈnÞ¨þ˜>Á„þ¸n>4¸“?µ[0½W8sPð?dÇAÔ›¡ìŒ € oÁŠŸðlú–݆XίùÅ.ðˆÏ=†qlj׃i<ˆøˆm/ÐøLžh°ßÞ`ÿtè HÀš{?2r@ÆÔL«NüV¹ƒZ·(çã>ó¶ð ˾ ï Æ{ÄP›°uãœm3þ €Ž’ìZAæ»fíZ§¬3¶-TëF’YÍˆÑ àÿa“¢>ýÂí‚!ÝR¤†hdXŸqé°MÍ UÕˆm=É©Á£y:¨›3Temcgã`å¨çªËæØ$¸%¹›¤¸›¦xàFІé¾Fo! 2 È 6ý_p)Üôr„.i&©Æ`þD?ƒx½8oÝXO½Oíh­(/ÍhoBŒ¯j¬ŸJ\€RBÊù +¡ü%|5±<íÉ\ÄÚ®Ål«;lÂN»°·F8>&s~>Íó-ƒ$à—¡¬‹B ðï-66$þgEtá§9¡¯§ø_’ø!C?iåÝ­å[¾ÁǸÎ3X(Öq^²*SáZŠÆyãSôÒR´““4S’iIjé‰*ÉJ™)ÊY©*™©j  )éz 9ü'è]H@‡BiºZÙñÚ×#íz#S!U‹îT®ºW<ˆ“Bfºï3~;ˆò¿Ä8 ‡õÀ¶ï; ë¡ÿ ޝ ¼žó(€†×ö#¯Nï‰]_*^ð8˜>ž½Ê€ ÿùá߉˜?e—îߎ˜?†wÙ¯¢£çñ¾­›áô7œÿ¦hÀîábƳ¥¬âÌ*Á?Òö]0n%ý0uóAÊÆãômܘ÷µFÖÖ k8€üOÃX’N¯Ç2ñŸ»>Œ;ÞtÀ‰Ç ?Hªót¢€ Àf?ùA0Ù7ØÕíÚÓé:Ðë:Öï9Ô h9Ðn:ÐD)À±fë±jÞVªÝT¨ØT¹±¡\²,wuUñ*Kúò’Ô•%©«‹âW¶µ‹÷ ª×ToìkÕïjToжt¯žØW®\™’O‘O˜•‹ Jû•½H¾ªÖIÒ2nf‚a†Ü˜(g®‰J¡ÿ¨Øý½ÅÉ.[žz}ÑLQ¬ÏOl*ž—‘‚±Îc X>i5\»Äù¬Cøºú³Þ­+Ø[ßL ÿgGâÿèýçØà—妹?¦ }2+ðþ$ço„?n~·¦øþ÷‡4þ—³âψ<N ?Âîõ`O‡9Þ%ó}³,óÛ¦äIv«û}ÝøìŽþÙ]íß–ç2E/h`¬sÊ/ fò°‹Ø`% Í3}Ü*tP†}<¬ü¢Ká°Hào½6ÿ e>>Ÿx-åV­âQ¬á”kÄ]@ø–ýÜöÜŽ€A—!^÷>ïQ¿1Á@¢@Ш`è˜`ø¨@‘?|„/bT Š$CL 'Æ„$¡¤1‘äQá”aÁ¤!dÀ¨x&UöEæ ¬ºõ¡ÓûžÛž×þV­ÀÿÀö@ûè´÷µë„W@à-ØÃ< ä¿àÐļ};dè6Ù¾ ,9uÒA@q(Ūaܼšh\N4¿6l|}HïúvÙ€fY¿VÙ AѲ~Ī~Ô¦Ö~“š³ê1§Fªwû„wóõˆ˜hK‹X;ËXGSàÿg6ù»éáüR7œÿS½ Ò|õAP€Ï‚d«.ÿ¿ƒ ‹KQ( ˆ÷3ÄùÆúD{éEyêF¸kÂÝ´Â\5ÃÝ4Â=Õ#¼Ô"¼T"¼¢|•Ò}s.‡‡óWÇpw¤pŽåqMp°J±õjì¨{Ћ½á|9Áóå4ÿ7³?²ø@þ¹.þû†Äï쓟ß…~b |?#ðj‚ïýaÞ‡]¼‡ |«üÌ"É+<ÍWÄkò¥®¥)œO"ä$éf$ë$'i%%j¤$i¦%j¦'ªe%©d§(@2STSÓ5ÒRUsST.$k]L6:—b’›l—dp)ܼ>8ŒZ¼äׯ¶ûëG>?^[î£;ž$¶Û3í/bG¶ ·ß žÃ÷ìž,Ì£*}vm'0üQÐ cÜŒ`âîÓwc—&­ãcÈ@N¢˜wÙUý¸À‹h*Y Rù4m6øœJü§ ò‡oþG3ÂùÏÂ~Ð…;Q,˜v¢q'œ…JUƒ‘¹4^¡2w7ˆñ lñQØ25 d¢ __ú]ŸÙû¾Œ»^ôÛî´;ž³w©·ìÇ­‰û–l˜àç?ÇæÄcÓ‘Cã#£ÞcÃÞÛÆ7 »ÿušuÚnêtÜÒê -8Ь_S.fÉ^9Ò¯Ü×¹1/saMñúŠüµu¥âw½ºßóÜÔ¸±¢R¼¦rmEõ2S)"“2!›N•MŽœ œ”ñ&©¸ôj8äñ(¸sbžü‚–ÜÂê A!ÎT¢Ä‘s·PëèšF­vE +Pà:'‡…‹N' Qc¹gÏs0Î Œ%`‰ØýF±¥÷‹°{µØ‹nì#"×—Sb¿­¨žÝ6ø÷!áìŽî?vÔ~^—?;Õýš%òéŒÐëj?oþFþl^òSz£{JÄ~ÚSþãÄàç]­Ïe¿[—=;’ülBìQßÏ JgÇ’¿ïJœí¹Ý­²¨uÄhYâ;åR-ØÊUé¯fü?·˜¿‚ݪàxÖÎûAŸÐÍRl÷¼ØQ®Þ£K>û1þÅ|r%˜z¦]Ë©]i7bzmœ&Üf½N}œÎƒÜü^üÞhà/ÿ0Oà˜@Øk/8h²P,E$ž"’˜J¦Š¤ÈÂÉd¡TªhƤDU<›"‘7.šMË¥É]f©—,n0UŠ µ²åbšRÑŒj ]½l†PF×,ghWÎj–ÏhWдʩê%êÅB Y­ˆ¤r­OîrÌÅvñ¼fÑL@«Tv»\^§Â¹•Kƒ…DýÒqãŠi«Fd°ì‰†jív|‰›^Cžƒ  °.9wÏÙ¶â®Îlæ‘-o":aßÃðüA âÿý2à0pÂõ78 ¥Ð%/ûx?üßó%Cl+ùšë*Ètì]²ï^´ëZvèc_Fã@ÖŽ^c €Ðly n{Œlº¢#_Ô°IÙòÛðF®¤.}ì!e(¿ b!HØ@£ ºðš%šî#ÔÌҺô…Ô  °àÐ.—;!þgWuÌ9v@ü?iÓ4eÛ +ɬjÔªtÌìÆ¨Ña}„’nõ¢~ýDËZ¢uÉ®™l×F²j9µ©wi˜ôk+ ‹±²Ž±µŠs2‹vÐrÔþ¿ùßô/þ7Äùÿÿ‘°ï^óÿ_×Álþ·¼mímˆòÖ‹ôÒðÔ s× uÓ qÑ»!®ê!®ª!nJ!n ¡îŠqžÂ©>¢9þ"…ŠBxëbxºÒx‰ù\´«œ eØv=vÒÁù°ëÅ×'d¾Ï§¿eðþ¸ øe±®ˆ#,‹ý2/òìàW“ü/ÇøÞîã»×Æ¿[#À*¤ ’ÎóW_*É–½’¢œ—¨•¨“™¤´Ÿš îsã4³â5³Ô²UrØ?ÙIȲR•rÓóÓÔÎ%뜋7¼c^æÐ=teÆ«~Þ¥ƒíÝ7Àr'.úNnzŽm{ãÍ¿x/Øÿ NûxÀ„îpg!/ÀMÞôsáw¸ lÇf„›! 4´†ÍâüBƒ€÷s>Yº»ŒõÆ,²Á  ý4qMlO\{š¶³7> Ö·³öø½í;9°GSéßýËÉ ^¸‚nxÙQ=ž°G˜¡éÀðƒÊ„/àí ËóÒï„ÌŸ„Ρ¡–á x ê“(Ôí‹®ª}gAØVx«Z&ŽìIû6Ä#›ÑcÛq< ÀOnZŒÜ4>1ºc1|j9tÇ|àŽiß›áSÓžcÝö–¶]µæMåšUÅ2 ÷9™ íZÿ4~`P¾¬R°­QºM¸qdx}_§tIá S:V"mV:eZ:užpnIûU"‰ÄNæõ'ò9¶ðé—ð«'aâÞ˜#†™c‚q‚ˆ"†u&Ë¿Gt>©5n󼪋hbí®9†o"VrÀ_f¾Hy»Fo¥H‰yžë´Qâ3²ú‡C¢¬Îö4^ŽqíÝÀ>åýcOõ?‡òÿ>PøÏ>áìÑÙ#ݳGú_,H<æzNäzIúi[íçMH>e Ÿ=Ð;{j~vjvv×þÏžÔ/,Õ·»ù>àúm‹ëï+"wÄÇã¸f²D vi¬‰¼š´?»ñ?®¯¨kÔž6‰~Ô'ü²Cå0‹P,‰]äÀ®qr6©Wc5˜e#fÙ„7az­ÆÜ®˜Û ‡û§Ç0—÷0—/Û .x”'xŒ7þ~ã|Qdþhvƒ0 a‚9‚’øÆ©"é“bÙ€)ñ¼Iñ¼)‰s³2—˜JE†Â5X,ÊEͪMTÊ TÌiTÎiUÓaÕ©aêÖÎé×ͳ­æúu ÃFºAÝŒ^Í”^å¤nY»d˜PØ«r¡M6»U.»I:£^<½Q2³U!¿[­ —P8¢WB6©œ¶ªŸsh]tQè[÷XóBF=ð%rlcó$hž @ø b)Ž_t\Øö&á× à÷ÅiØ•ÛSÇASGè Øñ¶ògÙv³¬:,;­»VìzW\†PÀï=²í9°éŽ*ÞpC-~èâx?˜¼ç?†’·‘UW"{Bý0䋎}ø2Ô8àÐ xÓó5iZO5ª…¼yóãüÏv–f9¢Z¦yÇn¶_4š;†&;¶Ó: 3­1/1)3ª3¨Ò­èÒ*j×¹ÚiP8`Y>bU=fÙ@¶j·n³­#¹5Ò‚ÚoĤÄ[ÛÇXYÄ9˜Å8D;éùǸèàüŸàjòßüŸê£‡TÀÇ0ï~Ýf–û×-Àÿ}€$ ÜS?ÜS/ÌC7Ô]'ÄM;ØU+ÈE3ÐYÖ'‚¿£º¿£j€³Š¿“¢¿“B€‹|¸«X¬»x²§x–·ðE_þâ`ž†ÞîT®ÑsHV*8v9oµa»9ÞâyIøl’ãÛÞ¿3QEÐ/,ÑŸ™¢@þ_Sù_‘øÞäyÚÅw«Ip£RˆY$L¹,<’'t#_îz¦Âå$¹œxm üŒxÕô8µŒŒÌh¬XPBv¢zv’fV².ªüIQÏMUÏN%ä&i]Š7¹ãÕžJ¬¦ûµ1]Ñ$ –ëÓmî>L÷&£’0÷Ñuoò†ÏÄŠÇØšyËg¹ýxQw½'÷½§ÞÔsyQ<&ØWÓ §l#ãÀé›A´Û!³¸©B8ãn$“]]Éz»øÚö?féõ¨6?ßMXA¦=©›€{Ik°”¶õ8}h?®Çå¾|”¼žg×|â ÿ4u€A²p?nØ·ƒ€õAü*»S`å~4ÂiÄ"$2ìöT€úVÜæÛ)›o%o sQø4¶Ûd·ýh€ûŒ{ôûþtàÿÛžÓ‡Nä›®Tàÿ›Žäc‡qØÜq>uA¸ç<}ÏqêÄnüÄzìŽ5ñÔ T`à–IÏMãî;f=‡ú­;ê Ûj ûšmZ­»„Æ õªíʵÂ[æ5Ÿ†’a•ÉYV.\T,XJgˆä°¤¯,Ë_ZWÍßÔÈŸ•M¥+eÒäÓPdË1Šùa¶œú×¹´R1e?LØCSݵ@„¥ä0¬?ÇàÕç ªëß(«…š çÅ·éŒ'ñäha±R¼íq›u–´‹RC ؽVÑß– >§ˆÿº,{¶§úû–ÊG£|/É‚ŸMñþÀâÿ†ÎõÛŠìo‡ŠgµÎîk¾Cáz4Èñá´ÿ?l(ŸšÿcOû:ÿÏ;²)ü°¢ôý²üOk²¿­«ü¹köù¤ÊpœçPÓ0J*¶W)rÚ!ðt@âV½À;ýjn¹}EÕÿ†jôé€ã‹6Ùo'Ô¿²^Õ«’ê1’·nç7íáuîáô蜻9ì{0ûnÌ¡sÄÜ0×~Ì¥sëG{ÏaŸ1ž "W‰7˜ÌFâ ãŒó†Â—|± E0qJ$…&šÎn"È ¦PE³&År§%òÙÁ—rW”®±Ô*—Õ‹š5¯¡]»¤S·¨[ÀЬbhW£¹0ºõÈ ˆ øt®[3§_³`Ò°hÑÈ4«g˜VO•S oL@ü¯[LÔ.P/èVº©A­D* ^*½U!·_³€dT6eY3kÛ°èÚ±äÖ¹ìÞŠXvïc¹tCü—ô@j°á9ü:5`ÑãÑ>¬¯åÀ„Z,ƒföý©Åmy‘v¼^çGþTÜzîÀk|ÛudÕ¾øѺ{Þ¦{Ñ¡wÕ¥wݵgÍ¥{͹Í£lxŒ¢Ž³ ñÝ@ôÉì$o{’¶<Æ GX5qÄë‘p! Xf7¬L›6L×ÁÊ´nyí#mÎ…Ð5»Óy™myÇæÿnœÿa…`Ȥz@¿rP¯rÔ°†h\ÝoTÜeXÐnt¡Ïâúˆeùiù a<Z0â\=îÝP˜™dëce üëdã¬ï®ó¼‹!ð’«q2j3LñÒÿ_üÿ¦)~€„ Ìôºj#¸i¸jú»hø9|Ô}Õüœ4|Ô½ìU>vJ>ö >ör>ö²báN1.âÉ®BÙî|—}¸+B¹c8ú29ÆÏcŒ"l­Û«Ãn7cº9Þäýx ûœÂù ï»Yïé‚ßÏ}EåýŒÄór„çí^žûm<‡µ|+e³…"ãD³г䮦*^LPÏÓʉÑ̈VMVJRɈ&dDé@2c53ãµ2“ô²’ /Ä«KÔÊMÑÍJÖÉIÖºžbÝ–DOi z´NX´Ð¬Úçì»gºç<‡&f¼‰+>äEÏ1Üüs 6ã «.c[øÍïž;yß|ä>qìA9ö ùOLNBfï„ÒoÑî†1îGÎÃz'ŒqŠùD³ÞWä±¶‰ó9ø˜¼ŽKÀƒ” àØC"8‰[ÂÏsÞDò8ÿߊœ‡”$6x:Õaw£Žö+èlô%‚ÿÕ¿ ¥W‘¹tÄÒ“ØuÄüñ[¤¼HÝÂ¥D-ÀŸùA8{ºqäÒÓ¨ågKHüf1O}Ñ´ßÏÉSvç×=Ú¯Ù‡Þs€Ç^sO<ç¸ÎÜwž¼g?qb5r`й¡Ñ¸A¨ßÖjZW«Ü$Ôçïk¶ÿ£U§õP¿yG·jY½`AåŠÆå9E  lšdμܥ5¹ ër×ÖåK$ò¶ÕóO-Š×4òI"Ñc‚á‚Q$,Œ„ùŽs»µq›–ñçqsË{aN\˜—¦¨œ †]w“~Ñeûë¼ãç3f[UœO%ž+vEbᲘ·âeW¬7Er,[h¾ç~ÿÓ2_LŠ~EüqAøçeÉoæ$YQýeYþ»9§ÝØ'cØ«¡¯¶„>˜Ã¾Z—ûÏ=Ë_÷õ>™û~]é×=í¿o¨}³(úëSßývìcÏ4þïµ>§i¾7*ûç±ÙŽõ>£©|B1ƒ€ÿ º<ÿ>™ëý1‘Wãj¯F5ïW ܯäÖªóNÜ÷“:?ŽxÍy™—rjôJzŠ{’¥Šq³R±S"a³bTþ0g•7vŒ×ç ˆÜ^Ã^Cl åð1ØøsQøB'xC`3Î  ÄÐDétÉôñô)áTÈ(Âiì–tŠH&IÈ.ÎÈÍÊÓJæ”ÊXÕëúM†mk†­›&KÍ‹úMËÆ­KF-LöhøeÓvxkÅ ‘¥WÏÒ¯]4¬g×ÍWÓ +F•3Ft“*¦eÝ‚uìnR¿|\«¸_» Wór7áb«bN•Xb1_d©@4lšd³:”Ï jR̪évÍLGtHŽåúk.X'^E ä¹â‚zÁ6<ˆÀùø]0¬6½'¶}©;¯¯Þ(( œ†D`Ï{RÀ¡7°çAÚq¬¹ ;hˆÌ—Úÿo{Œm¸€ÿ!ÚGÆÔì¹›>£ì´2ýÉ?ê¾/2r  ®4ö¥ðÿ¼}'~µ±ìÔ‹ßÌ×ΚÔ1ØÑèܾ ÝØw"òwF£$Àü8hö­SŽÝ$³–aþõ«†+LKzÌ º-.õ˜_¶,…ìÀ¨bÈ´rмbÈ©ŠìßXŸ•lçgcàdçlô&þuÑûoþOö4þOñÖIõ6zsôæGnI®¡&¸\ ~Îj¾Nª@û@þ œö=í”Ým¶ žvhu·‘÷¶“÷²•ñµ—t’uŽöàÏä¿Í_‘ÌÛžÃ3r‘“Vˆ-ßÀöj°“FìQ;ç;}œóüm‚ÿ³I¾WS|ŸRø>ãû`ˆ÷Eïã6Þ“¾jAf‰©@´ï¼TK¶ÄÕ sIjYqÊY j™ š)±êIÑjl¨¦Æ¨¥Å¢\ =N’‚¬DõÌdͬ8“ütüTùÂhÓŽ¨ì™ˆŽ¯všUé„Q!Õ¸|ʤžiÓ ">ï:8ç=BóÑg_ýŒAº·â2²ä4´ì<¼î:úÚÿÓ´é:¾í‚°ãJÞsØó™Út'Ãz3ˆq0‹ÛAœ„-ü·/~ê¸1ë¯3œÀáïÄ/Ÿ°q;n ¾¼»x3zgxÝ= Dý_yÈ~>W7øïS~¶ð$Œ…»@?ð™¹ãJ¹e~˜ìvlê´li5ïé¶éwj³9_³eO£iC¹fU¡rU±°,_Â’)\”½Æ’-X/XT,ò_¿¼$w}A®ˆ%_Ê”+ØÑ+92.eÊäPùÓ&yÓi‚)džaN¢€W?¯[ fÓˆY&s©crœRV—%ÆaËÁa…açÌUû"µ‡yöΉ>o”|1 ÷°_ß“ âÅúc1Z¾èÚ5ŇmŸQ àÿlƒÀãg†üo,å®Éþ±'~v_ãç ¥Ç<ß°4ØþvMä“9ìß·äÎêœ=4þ|^ôƒ)®W ‚ÞÕ={æðë¶á­Fì­ÁoÒ‘°O‡ßáá8ÛQ?;2ø‚*õƒð]÷s²æGCJou‰>ïà{Ü„}Ø/üqŸÔ[Í¢÷›„oWp¿]/ÿ²ÎaÖA³žWuTÒ‡$ÀTŒß äo¨][»¶¤t}•puY=Ÿ¥š9+—COO§²mŸÇyã'y“iüÉSÜ g ‡, œ?bˆ+x„3œÈ1·:Åð¹`ã©$¡²HºÉþ§ gÒ¥Î-È^dJŸŸ—/bÈÒe ™J% ªóê• µKº+F­«Æm°‚`³nÚ†ÏØ4ïX1j^4l\5m]6n^0l^c;E,·0 Í[—-ÛçŒhºÕ3z5 ³Æ•s¦utÓÚ ý£ZEj…íòùµéÕb©UâÉ¢‰UâIMÊY}zW†Œ®Ql*'íªgç\[™ní —VºSÛ¬cëœcÓÕa.:t¢ùbnÈtâÐk gõ?ôž€8mÇ•tÛŸ~ÌÜõœ`{íNî±ûÎ ‡nß…tì Ø‘¯;p¾ÓЪmߺmï–ÃÀ®óð¾ûaæ>ŒŠ”œúœú–\ȼÝwbLJ ›m¿‰u¯±%סUâ†7 Vƒ`ŒÁ§ÁeÇÛ —ó¶ÿC=>ÅxÁ®}Å4²€^HsæÙÁ³v­üÏ8´Í¹uÎÚtÌšwL™6[6ô—ö™TšÖºŒK†í+H.Õ#öÕC¶5CŽõ£>­eñQ NV±ö¦ñΦÿÇ» æw×GWn ú ®(þ÷0Ng#Í øß˜] ŠL!2Íñ~.ÔÕË®óÏ 5Ë …Õ47Ì,?Â'G }€·ƒ*Îü¶JÀünÖ lÈápµ’u·’xZKúÚIØ‹„:òÇ{òåòFq×$qugqÎaô«Øj)¶_…ÝnàxÜŠ=ïæxoˆëýQNÀ{DŽýØóÎ×¶ÏUÜë7øf® /‰µçŠÕ¥‰^JÑÈ‹W͈QΈž'ó'Dª$F©&F©¤ PÁ% #^=3‘¤‘Ÿ¢“ |!V£:Ư'¤€èRE±¨œ2»A3¯eXw2¬»çlºPâBïG\ð„üùÝš qÕydÙq{€5§‘5§Ñ-g0?‚óø¶iÝylÕ‘°ï; *°íEÝõ™ÚóÆ=âögaÅ/ðúT6w3l AÔŠácX@ø@ûøðZ¢‘½Ûƒ˜…Gq‹ˆÀVÙ|Ž0.¹mUµ¥[¶¡]²¦YÄT¼ÈϧAÞ$•9%–6+‘1+–>-œ2-ëŒh¬ÁÄQîh#Ü1Ã\ÑDÞ¼G˜"–ÿŒÔyt – ¦ìåy¹+L…k,%¶;J)Cå²ÒªYÔi `é!; ¦vS»fQ·ÂþUCЂàÿMËN|R H˸iżmɬ¿#˜7iÿ3 ké5óutãšY£êcd˜<Ín›¥W“ +‡u‹û4®¶)ç×I§”‹Æ DTJÅ×Ê¥¶ªåöê^1-%YVPlk§í¦íšè- {¦] ú‘iÝ´âÔ‰ >ÝFØå=£ÀêÀùGS[è0xBwÀ¡Êâw\ÆÝ(» x“¼ ©'m;ùo;îCäoÛ»æ€ÆÙà¥Dkl› È;€Þ×݉‚LîøS@þ{P ~.ô†ÿç¬;æm»øðzv±h#1É>Ô¹æ»í«ªuã”}ÓŒu;Óº‹iÛ=iÓ2hVü?dV×gTÕcZÖcQ4dWNqmshè±­ètª¼æüÁ?Îÿ‰nÆèäÇ]oòÓœê «1ÿþÏ0Ë0Áù?#ØG&’„¼psàoeÿMû°ºZÉ\,åœ-dÙÆáj.ëj.íj!éa)éi)æc-ê(ïÆ—ãÏs=œ«.³'#åc³—±•bl§‚ó¤»×Œ=îÄ÷ <é‚’ؽFìv5vp[/áX¸ÆK¹"8pN´)S¬B5.\%!R->BùI@Z‚zz"!/Q&?Fµ8Ò¹%$kнœd];cUË´mFÿ=&×Ü©ëîc›û>Äã ‰ƒÀqô»ÁvûÙtƒuÃe6?ÀÈÝü¿ë6‘?ð?`Ë Ù"¬;”mOøu‚ôö†ÿéÈ)4€9<‡-Ü gÝŽ`D.â'ùxÙÏ› >#?º¿ô,Y4´Û®è hÿÈŠxË–têHÜw r¢œÚŽÝ±¼iܳ­Ñ´¿¦X ØT©ÛQoÜV«ìwu›ªÕ@üXQ¼¾®RŒÜÞ4Êw´®oª²/ÍHgѤ“§¤â¨bÑÓbñ3b SÂѪP‰/…,œEËìˆÉçÑMÅÔC0IoLЕ‹Ë…“Óâ¸8‹T„jô0r0×{z?1-]wüšåùj.èCæs†Æƒ.ñgƒ/§?¦ª¿?¢ùÁ¨ÚËI‰/çÄžõ`_N©}6¡´SŠ}9Ëõç¾ô˜½W~«_üÛyå–äÛT{Eû†%óSäo3ü/FQKË¿ö¿®)ÿ±£ýí”Ùq9ö)Iâ½^éýëÂóy\/†4‰ï4`{õâ‡5vX£#¶w•ð¬EóN ?-Z–äÇs+OÿeIà»1d% Š„C:jA*uUþ†bá–Úõmk{†E{F7MjNÌÛîÛtŸÚtš5ZÔoš”/ë]_кÌT;ÏP:G—ϕə•Ê¥Kä͈æM çL §#ˆFdBœ˜É" e"k ‰ü)‰|ªXÞ„H¬Ó2é 4¹ºâ5¦Jñœj$@­œI¨œÓ¨œQ-£©”þ7èª7à-†fÕ²aÓ’QÓ‚~=¤@þ8ÿ³LšQG˜Y ðhŸaR?oÞ`˜ÔÿOëWLêWNTQ‘N{üJõ¨A92ƒ2¢~éÞõ~í«Ý„‹Õ2‰å±E"×…ÃKDcªd’›Uóº´/ ¯šÞ@ý–Õ‹ª)ë†c’Ç64w òÞð&®y°?Ùó|ÆÑ ¯qdØâ?yìKEð¦íoÚ÷oØõm:¢éfNƒÀÿKö½‹v=«N[.ëö}@ìk.Ãë®#nÄ-/=¿ À’¤¨˜ÜeP ¼^ˆ}Ä„ŠEq§;¼)Ýt»t³\{ÝzA€í)VMã6uSVÍxP éÀ¸MѲ~̺¹ß¸ºß¢¢×¼dȲ|¡‘hW7âVÛåQ–îéäŸìj•àbï‚¾í»£Dßù§°û¿P ¨çkò¤ù™¤û›âüŸôšÿ3CM²ÂL³ÃÍr"Ìó¢,ÏÅXzÚ)â·P§}ØüEû²Næ2¦RG3iØ;™Éâ3)731oK‘[¡x\?þ¢0žúXÎîTl,›¹Œ±Š¸vʰÃ*ìfv» ƒ<úvv\ƒU`;¥k×°…+\SyGÎ uæˆÕ¤I•ÄŠgƨ¥E*'G('E¨ùÇ„©F‡ªÄ†« ü/ HG+S’`Ó›5T7éÒÎtê\uí†_Œmÿéíæv }?hêÀŸ|à=vì=qË ëÚt"®Ø¬Ú °åYÿ#ªì? ˆ½GøzNù›¥OÇE¾Ÿþ‰)ðãªä?6 îÔñ/]¾gJÿk[êìTëçÙ÷F¸Þ%ò}>#ÿѸÄ;#‚_Ò応‘<»cñ5Írå2v¯^p·Pp Û/UýaÙëý)ƒ‡#„¹ëBã‚E–XŒ0Vf‚–˜½w½Sb\®‹åñc³ŽºTóNÍQºDM(x^"qI:{EñÜŠZþ–îÕm½Òmƒš›ÆM§V÷íºï;÷<ñ<õè:rn9viݶ¬^7¾±¬[²¤YÌR+ž“/œ•¹2#UÀ½±=þÒÐß›ì¥Å«óòWçd¯ÌH_œ–›ùQðÌŸbžj–fþ†öó£-€ù/ÄY_J°u·S¸ÙÊ»Ú(¸XË;[Éœ,eÍ_ÃÁ\ÚÎT‡½™”½©´‰”‰ ÀÞXÆÁHÒÙDÂÃT4ØF8ÁE8ß—ÿZO] WW 1‡ƒz‘g¡[)âØ¸Á±QŽ!”bkÅØZ!çRã<'%—k8‡¯+S¸!M¼4QêJ´dj¤ZR˜rB˜J\˜ZL˜zt¨ZT’ÀK@JâÀù0Bml9±v5ÛõlLDÌG/G1nEÌQ<Æ\)Ž”GâºÍÀ²Eϲu߆Ãðºý¬;®¤C¯)ûAöÝ(tòï:qà‰$å¦ïÌIwE•ÁÌ7ä:ÏvïœÇí@Ù­ÄŒ»¡ ÷ÂO# ’_~·ÎööAfn¨3+~õl·££{Ë'¯>Jz=ùýqòÚótÔ·ûy—\Dð /ûA'E™;ä½ÇÒyì»9ÃWLžË?PyA2ødÆòÝqÂÃ~$Þ(\?ÌKýH—ùjBüÓ!ÁÆ‘SÐÍJìV5öýœèö¤~[=Û×øfVêy/ö¨{Ú#r»žûa»àß( ïEŽkV 0FFKæ Æc’ô¿åöî´ÎûÓÖÌë¢}±X_(w®2–*‰¥Êasù*ê¾Ód2èÀw‰+Çäë0­vLŸ,`OâvšàñˆXM]RÊX×:¿­_rhÖt¨WuÛ´ñÄ¢ùŽmûC×¾{î}'.Ý÷<ï{¸ô;tØtîZ¶­ýÔ/ë×±ÔË ˜‡~SöÒœ|ÁÖÅ»wÿ— þç¯ÿ±ËnèáOjãŒý›iû7S”úi‡ÆzÓ$µÖQF0ÿrŒôjÔºr”ôª_Ù‹¯°¯m³.}c”Ýd˜ßfPÔF(èr/*b„Óð¡t|8“üøCüÊ0…€°αâ¯|þ;[EºZF¹a<ÚÒÁŠó&Æñ ~Ö‰þ¨’‰É!ä”P›Ô0ÛŒpÛ¬H Ë-ï;ÿ‡ü`>pžb¥Â€oc.ûY2d3¢™,ÑTžhªhm¬@2–±3• ð´yBsÎñ*¬lz"<”$0–"4•ùp:K`:óÁTºÀtªÐÄÓ‡#‰Â½1B­QBu¢á ‚e3üå“|€ü^jþê€}ž§–·»ÈÇCÃÏS^ôV æ©„ñ-ôÌݲ.8f6ªm?læ,xâ4`øÈâ `î$lù*zù*bê<`ìÌ{tË>tÛ£öìPº¶l;Àöé}»´žMûžmZ|¬ùó±ã¬X«O0…gôÛ1ø_z£csþü>hßf@=ºE˳ 7Þ ×^óXèkt¼ïʵß™ÏÌØGû¼a•¬˜ó)Ú‹ ëðùMÜ.ÚÀ?îà›'û߯þ$~{݆<¾\G›<ó‹<` X.þÏãö» qþçcŸ¡¨Ðž³ð›‘b}J]'€ÿ·nÓï=ç>zÌÝ»LÝs'?¸ÎÿïcçvýGøŽm“Æ Ã·›FèºkÙºmÞ¼eÖûøÖ=ó¦m“†mãúýê]\ ¸žwÐvp5»hGè+ÊÅKŠùór¹ ò9+Êùªù;šÅkÏÑMÏYÕÄÝ=bÈ‘]ì–EʼVî‚zÁ‚fÖ¢~âšé“eãðqM¿~EÏNqzµ>ÑE¹ˆWX(^[9SO¶Ô\ä 9,T¹z¥ÕìTÓ<7FJð§#MD"‡%b˜5ùئ4ƒ Ç Ü5~Û¯Ý$r݈ü´Wøï§$þeIå?ßWI× ¿èúu¯ÌÏÛ%~Ñüa\â_•Ø6úÇ…?LKýn\üÏK:ÿ8gvS#}V)~òBd99.—9(TÜÉ–¾|õè/Ú?Ü™ÿï3ÛÛwþI—ùLX’HG.I©u”ˆ•þ¦Sø7½†×Ïñ¥*‚yB2/…ô^#ºoÃ6r'Âèpyì=¥è·Ž{²ª÷t^3eC'}ϸàÀ´øÈâÅ™uõµ}ó%¥å¾ýŽÙ{Ãì»fô^1»ÏYÝ'¬®VÇ §óÀ®u׿í–õ›u‹×‹ºNi挪¤+§)e@´?®š;©ž7© x/šÖ*Òʃ÷ÌëÏéÎh£saû àÿ„Vþ¸fÞˆæóQ­¼QíüqÝÂq\ñÿv¸À‚ÅëyóW3&•Ó&•s/g-^N›AÌ_ÿQá aÁ€áó~ƒÜƒ|0‚QÓ²Aâ>ÃÂ>ƒâƒ¢ƒ’!ó—ƒf•èjþ¢Ï¤4`Vë ¾¸ß²°×<¿Ï¼°ß¢hÀ²¸ßªx_2D.ï!µ™åÖáRKU£²¥Rļ]â0„Óy(UhGW'52Ûmóºé%}¬ŠÇêv͈Ãë FûuŽÑ¶BiX§¡­êVlÑ¡ÆèµcŦ¢>е{ŸÖ»KéÚ·ë:¢ôœRzwi]ö¶­Ø4/Þ‚ ¬9´£÷Èø;è6¿ìƒ55‚‡Ej+dhs9z;Á,´ JäÝЄmñ?ð„þf„Z;bózÒöõ8¹jÔºjÈêU?ñõ°C]ŸCUµ~zµZF³^~£UÖKzl¢;„a‰ þÃYæaL³HŽ%úÌ瘓e8×2ÜÅ"ÒÍ*ÊÃ2ÆÃ Ã~¼5Fþ¤òÓ@rr°-†ýôÛŒH»Ì(JV´}N,IV¦[+:hy ÿgø[ÉñƒüÏìóI¦Ò ksi‚©”•‰´•‰¬¥±œ…¡¼¥¡,ÁHÊÖä1/ái+LNpÉö. xX"Ú)Ô+Ò•(Ò“(ˆ*^¨+V¸#Z¤-B¤>DøUpI hnÀã4_Ùxo¥H7E_7Už»º›š—›º§«†»‹:ž}=4|=Ôü=•½UP ðW PÔÈð²îNÈÚN=‹ž¿Šœ½Š™?\=ŽØ:‹Ü¸‰]½ Ÿ9÷Ÿ:ó™<÷ž‚ø|Ÿ=¼kß :pè;b B„O€€Èè8 ¡>€ê2‰ …??æÇøö˜®|1AD}° ü‡‡[ŸEŒÿ|_X @{AøÌÞ.A€Æçë_‚ó¯Ñk_è%¯o°{^ð%Ö· ðé@ÌÖ‡èÍüÁîØä—ÛÐe,SSøiâøVêGùµõ“èmXû·ð g.ЪsجXÁž®|Ðnÿï|ßyÏ¿óœÝ»ÏÜr§Î™#Çöýû6Ý;ø¶=bÇ‘MÖütj;:$÷î:·,[0íZµíâ[ÀM@GfoaÝ5¬þoé¾ZÓ¬XU-[V. XV*XU)‚\`U)oY!wJæÙ”Lò¦~îUÊ¡mÀ¥#KŽ\3Mž×{º`½n¼Aä­ãy‹&þZ¾Ã’žU1Q B$y\á "ž¢<´º«ü¢u_oðî­Ùn¡~_àÃÁ`¡tÕ_µØ||£yùZôªFr:Aà­²–#uU/~Ù€œV Ý5<únXöß6´þyÎl=õá‡&äïÇäÿ}÷ÃŽÙ÷#2_×#¿ë•ýÓ˜æWßO>þ— ÙN ~¸cÜ7È_T)üežþM§æ·Ú?iS?(F¾jø}íÿ:5ÿÏ}úO»,þ2Ëú®Ýd2™ W«¦ •›ÿvŽò·“â; ùU%aÜ —Š<¨Ó,BT„ÌImB¬V„Ñ%Ìê—â¬áÂ4Ãûó&åÂgUbÔŸ®ëgokÏÉWvmgäÖ ÛÎKjϽç‚Õ}Éé½vé¿ó¾óš¸v½t:áÊšwí÷(õ[äšEÓ²9£â½Béj9#*¹ÃÊ9ÃJhü?­•7¯W´ W ZÔ/[•/”C6š7†8¿tL¿hX¯`P'¯O+wHÕˆnÑ8®tÒ°|ʸbƬà?eúbÊ¢rÚ²b†ðržôzž\5/2-5+0.ì7*õvãò;õòÛtŸ÷›–aê5.é1*Æž!è1*Ć-Â;a…/ûM‹†-Ë,KðeCäÃv•ÝÖÅÍæ¹µ¸Ôr¸çò~©nIÂNO„ر‚¬§\³U ´Ã«,l²zXeNUýŒÊA:µf€R5N¨˜&¿š³©'Õ-“íÛö¶í‹ø¦URÛ®}ï‘Ãà1màˆÚ ü? #t0zO‡`]&7-Z¿]³oÛ u¬ ­M[0 ÀŠÿ+(ü[øD»VXhÏê5ÚShÁ¡yžÖ4C}‹ñÌî3ÿч·#ô†{ô.À4¥fÖí5:A~3J©a½äÔÔeÕif7ë=o$fÒ"©äP–(„iÊ2ÃJýQŽV H'TÎøHB¤!Âå…ö&öã}I‰þ$>öm’‚mž…Ú%‡QR#P¥EÙeÄØgÆR@9±ö¹O¨Ø©€?/go%ko…Âô?? 9’©¬µ‰ Ñ…¿¥ÉcsÃÇfFR¦Ò¦²&8)SÜc¼‘Å\‚Cõ² c‹'ºŠ§{‰çøJ¼ð~"R!V!\þ°6T¸&Dôu xU€x©¯hO<‹'ñÌK2ÆC>ÌUÙÏIÉÓYÙËYÕÓU °ïÊUwqRsåªz¸©y»«óÜU}=T¼”ƒ|TCüTCüÕBÔS¼ú’ӳƯŸ®¿ºýþÙÞeÒÁͳ‹Ë¸ýÛèõ«`ô´ü™ßÌ¡÷Сz„‚€?˜þ!mõ|ÂÅþ3×)òøûN£ c×ÉǸÌ^ó!ÔÇ û@{X?_³â}ñ‚ÏýÁbàïÁœ¾ ãÿmÀVê¿A÷g¿}² B#v€?zókƒ<ÖÆó]Ìæ‡'Ûïc·î¢Öo"V±fž˜`ïüš?íå#ß°É/h¿hôÞÙµßÜ•ïìçûüS—>Ó×¼ùÏG:}~¶õ󨽟„n~¼~ŸÐmæŒ3v@íßµëÙ³íÞ!wnZáùоïŒ1|É?§žP‡Ž({äž-BÇžMï1uè”6ˆõ8´î:¶h94k˜6î¾ÙÒ«YÓªZò«—ó7…_n¨—¯ª”€,*ä-É=_Q-šWÈ:0Ë» $_2ýï<|νv©¼m»Ð9s·%"gÛ³IanÚ9oÙ,˜ùŽ+‡T> >CÔ£…DÚyè!,ÄDÁuøáW³Œ¿é²úÃ2ý«£ý2ɽ|¡» ÍŸÖ›ý¶›°‘\¼þó$óÛ³wov˯;ÿ¬[{1¹ª=®BÖŸ#aÈÍ+Ù¿Ì™ý÷–é®kÿª ù~Xâo»Å~ÞôøÃk‰_w«üy^ç¿Lþ´ˆ›N…ïRú‡Ê·}ê¿Vúå ø;H%º~x«°œ®Ôá#Õä,òwÝŽ´ÝLDÖâÄVÍ%#Ÿºäÿ4§üýˆéo›]W|(Y¥‹ê” âÊýšæõHu±Iжõ!eZÕgV=pBÎwJ>lD:dH:tJ%~R5i^'kÕ°p×¢ê_{Jnº¤´SÚÎìZ!#¸eõ¾w¼ñž¸õ™|ç7óÞúÖwìÆgèÊkàÔµûÄ©ã˜Ý¶K{»A®[Ã× 8 +¦uKÆÔr‡”2Ò‡•³FUÁÐdè•ÎU@„?c ±ýËqÓŠaÃÒ)£eŸGëáJGpEýÚÏûõòô Ú‡ÈÔ¢d–\š$¼Ç—š [O“_N+ÍKúLPÈwæ·áž7éd5h¦¿ÕÊh7ȃWšu³»ô ø"4M§èÐ̓WÀ8ÌJ»Œó»ÍÐýß~R¸À0õe/¹´Ù"½Îøiaâ ­¨4)Ï8Ç(f¨ -RœùTÉ£Ø$¦†”ÞDyÞÍ,t|Ý˨ê²(€„b˜ðb‚P5c]»bÓ´i×¶EéÜ´éܲímX·ƒ(½'ƒ`@42d ìÓûÀ& Øeôì0{vY½ëôÎeûÖ»fÐ ­}Ñ…]Xg¡µ&þ1!X»—™ËìvÐ<½y–Ö8E{;íÐ8Em³­Ÿ´oœ`¶Œc'Bm^ÍSjgÈèxeÔñM³òiv«IQ«Q~-§ÐÑ7˜aÌ6 á ðe›‚"ÑQÄ(.>Æ…ífëAŽõ"Çøb|­cýˆq$`~r°]j¨}J8ªÔjz5=†–cʈ¥f=±Ç”Gɉ·gèÖòXüYÅRÎÎ]¿DþÀ€?ùxCI #`_°oˆ“Æd¬/ifðˆ`,N±u"‰{SÅÃØcœ¥\%3=Dr¼Åòõþ"…~"E<ÑBo‰ç^âÏ=e{>Nõ’Lð”Œr— r–ç9*{±Õ\]T€ù@~'GGŽ2—£ââ¤âî¬âå¢äã¦äë©äï­à£ì§¨ç­ô6>d#£÷&}÷CêÉ]ò!ðÿêéñÅ“«ðsß•C…}ÑŸ}ïþ]·l—ó„5tæ4:åN@„:tnï9ŽÀzê>½ï<†•÷±á,7þ‹Xcìœ'6¥½ç뇂S¸ñ_Æa?&”ÿþË·+wËüÈí}Øç=vP;±¶÷‰ÞÀÚxöþŸâw?Æí|¸ß$À`ôMü²ƒ?Nûº B­ »}ŒŽàòù²ò1tõëˆ x¸öý*híg;߆m ì¿öœù°rã9–·OØ¡ÂOûÀ kä”9rÆ=gÁÿxeÓ¦{‹Ü½oÛwHÀtd?xλqœ¾ãÎ^2Gm{÷­;ˆ–-Gø¶#«Ö]Ó·›†u›ú5k:¯–Õ+Ö5«ÖÑàŠ5µ2à?$°n¨ÀújUµtI3yÝ(ü–sét@÷ÝgøŸ:œº¹8S®}YW^Î×îþ×®›6>ËVOúô=Š%ÌÒtŸ"ÚO%ô ` Ò„†2ŸEúãªßïæh¿™¦|j0\I\~‚¤K-ÅN…"ûÙ’ßãÿyÁâwãªg¯‹š‡ÿkÅö»ܧÅ­bà¿X£Òâ‰Ü×(üiZó¾y_‡üqBðÿ}Qç—­ºû9²'e Ç¢;¥èÖÕm£Â}‹ü‡NÉßN«ýܟçå~Ù%Óé…0x-`ˆ6ü¶i´k¢ Ž ‘? ’ӣѧ”Õ§’Ý«–Ó§ñ¼_;P·Àìê—`ã`¦L+ÇÊq…ÿQÓ² ‹òA“¢>Ã|`>¸À˜eé YA¿IÞ€iþ(¡t‚T1J(ë·(ê·(!V A‚€/‡ÀÀÞªŸÝ¨^¯‘R¯žÑ¤Ó¤ ízy­:¹ÍZ™mº9ðxg§ÉóVãþ¹Ðò>›²AjY?¥¤Ï®¸ŸýÊ0¡D;"S‰#Á ²÷ Û…?f%(zæéGÖ’2{¹•Ý6¥„ÂNË‚^‹â!‹òq˪9|Ý*©iÔ ¡à¶]÷šuhƒÜ±EîܱëÄ*@ ЩãÈ•ëä©óس‡Ñ·ÇØfõ¯ÑºìÀZ)m‹Tô°(æX Àï) üïä£lE[@0Ûçmãv £6oFÈu6uàsÔFˆüG­ÊÇñ/'m /¨bUw³*›ù­æE]„âzJr&Û%€eêh s²w6v±|âNˆó Æ{’ã½m|ìýì(‰Á”¤»¤0»§á`~Z$-#šžMËŒqÈ|BÏŠseÇÓ³h˜r©¹ ŸüÿÑä~ä¿ f¶f²6¦2_‚‚¡ŒNÊÜ@Î 1¿Œ‘ž4NWê³ô$ô%ÌpbD#Qª…—ô؇*È” e+Äq%]=ó|”â)‘æ)‘êþ(ÅM2ÙE*ÑY*ÞE*ÚY*ÔY2ÀIÖ‹£èÊTvf¨92YJ 6S™ÅPbÒáÁ‰­ìê¤äÆUòrQày(úz*ú{+ò”ƒÔ"yŠCIU')K×I{wÉÇ·©Gg ç1KWákþ[Ç^+G^3'¼ñC¯1ôö{tÂ>r†Ytô¡çÜ‘ ºo À‡ ÿÄc°mì¢Eÿ…ë€E~ßæ¹cþÁþ3ß9l2#Úá!dØ~¸ º Z{¼ŽŽ}Akþhäò?ío{Çoˉî…Ûð½ [æ•°Øæcäÿ˜°û)qï'ÉG@~ì°à]äú=ì/z³8bí:mýcÓ‰ì"v¼óË /X´ÂÈÈÚeôaãl`»LApé2©Ðµo‡Ò³mß³KëÛ§ îQކ¯9S·N3°^²&.˜ã\0ÆÎì ò? t€ŽIGÖ‡V­;¦M›õ¸7ìÖï5lëÖlj¢€5ˆ^W+ÛP)]Vz9/Ÿ?¥0¯¾O|²MˆØÀ‡lS‚÷YÞ?‹{ì|Åã| ½õŒ<ã„ݹÇï9'ÎÙøöá8òŒ·ŠÜ|)DŽ%$f ¾8åÞÇ›vŸßNøÿ¤‘¾• ×Ã÷DF\‘~gd=öñAæãoÕ~7¤÷ý¤á_–ð_u*|?¯÷¿¶-þ´bùÛœ¿&|j1úÐ`ø]?îû ÍË—ÈÇú‡ßu?üû‘ÿ¾ªù»~ã.¤Û™OG¾éÒøãáÛ­ƒWï;e?´¨ý¬÷‡1“ßÎ>NÖD‹QžÂH›¯Ô¯úÈ×U2»éÂ×HyŸe~®{dt@Å[—è·Ê:·Êx¼aU ’_"æUˆQ5bòVˆÔ&Bïãô>r’r~8"4©9¥»l–ºO)ܶ-XÂgŽé% ©Ç ¬l•XÕßÙvÞ;Ϙ]玽—.7žC@û÷aÓï§nÃ'ï"§?ÄÌ}Š]ü:záSøüÇà¹w~S·ž£gÜ¡#vß!«ûѵGkß¡´lÚ4nëW,kL«¦ *FuK5 ûÔòºTr:•³»T²@Ýê9½š¨) éAR0(71Cx5¯6+á×|òz sÌózŒ³; ²º ³»MŸ÷˜åuç´á²:ŒsÛrzÌ  ¥ÃÖå#ÄòaBÙ UI›q¨Y/§N=µF5Ô ™Ú¢—Õ¬ŸU­šP«õì­~Z.¥Ù8£Ñ$ã­qj½ajƒQZ±`ú¢“œÿÆ<¥Æ2¹†œ«ðç Yû½ƒ%èQ²NIª>u„Ìbn3áy¾`_2N¬œ%×,X×-ë—‰oAë6mØFð:¥c‰Ô ¦À÷…Î]ûn ðÿÂyü€=üÿA›¬¾uFÏ2µcžÒ Z°o[¢µ¡÷I™‹ô¶%Fû«cѶÂ逴Èî#³kš´};Ciœµ«ƒ–4Œ¯¥Õaü‡ÚjYØC.}e—hÏp4 w±ˆàoìb'y⼉ åHFqQÔCFÕŽv’‰t” åȆpdý9ÒÞl)w– —!Ϧ©0©êL]‘å ÌpP¢Ó¨ ðÀf(pÙŠÎyw'y°w°_e_å0ÿÇI<ã·á1[©½×i7O÷Á®’6nWîâ6oÂwÎxë'žs'ãù]ö`0ˆéÈi„?±qúÈe ë“vî=>¶]{î3é‹rk¹pî‡^×Âú0Éß…o€øí–¾´_xº ðìóËþèùÏx3Ÿÿ£¶ßG y¿‰Ûý*v›Õû‰Øö±°hÿîÉæû¸-Xïc7ïb6À@@~tÔKÚ;kû¸„9Ë}ºË ë§Ð vwøÆ{îÚköÆ}û>sÝg ÀOò¹Ûô÷:€?æÊ}\Ýòf 0OÇnÜg?x/½÷XºwžøcãÀûçÔá3û¡ ûáKÈȽGøŽ#Ëö#ë®CÈûøö=ó–]“¦C³–ËV°€½ÚmíªW{:¯·µ*·ÔÊÿkê%Ë*Ï—ÕÒ×õR,Ów-“ÖÍ£—-‚7l|ßùE|vîæÌÛ¶ ß"GSãV™A;ŒCûˆi¿uÿbI;oDÎ4°–QÐE®"²žÅY´ª3h6yÔa#Ôaû°‚¬Åˆ^IÞU) †"CáÈ÷Ó”ÿsjûÇ5?®êß5+|ÝŽ»oT}ߢðÝ ÞÏû~;ªñý¨Å|<²— )€úoþeÆôçFœ!ÿÛ6ù‡3»?.›_ÔKo— ÖÈ®ekVØ![išßuüfw[k²’…ß)ã´E)^6R÷KLz<…¾«ð!k¼éW!ԋઽº¦Mí:%¸Òþ½R-"n Bôĺ!¾ ´ 3»ÄÝŒAqŸ>Q¯!¿1¥àYÝØ]›ÜCjá9wÉ2cÙ<{—1®6©•=¥»hP¾oÝpf×zJi=wè¸àt]¸öÝøßOÜ„Mÿï£fï"gîÂg߇Ï}¹üuÔÊבË÷Á‹7~³—>SãÇÎCÇNƒç΃ÜÁSvï1£÷”Ñ{Îê?cöØwl‘šÖðõÓf/'Œ_Œ”öêä·«eajVIuhæôàòûŠ@ô¡ê3þçÿ;p™@þ>‹‚~ËÂn³¼íä:¤z­g-¸Œ6ìv£ì£ìvì&“œ³çͦ¹o²êõÓªµž‚êt“ëõS_kÆWk%Ti=©ÖMh2Km2O{cô´J+ñ¥fBµî30‚ܳ׸ÄZógõ¤´—V IJÎbv~¢dŸ‡Öž‰Þ"$oa› Vª²¥Iâ‹ôËœ«Bð1ü‹aþ`÷QóÊ)Bí¹aÞ¦qÑ®yŽb˶cÜ Ú¶ï:`ô±!þ‡ß´3 uÀÃÚ¬:ô`ü_v@ÛÇA.€òŸÑ>OoŲ€UÇî ç>l6ñ àß2Az;cÃogWiѱrÐîõ¨ã›A§êV»¢vbÑ0ýe#íÕ)ÊÅ&ÚƒëMˆãYóÏð|.滑PÒÃii‘éQôŒXFæff<#+ÊI``Ìå'³ RØ©œüv~*SA ªüd:(ï™ÇFÄ&˳Hr ¢ ëð£üÈi>ÿe Òø/ü×–ÃiÉèkJcÂiIêÈëJ™ã¤Á)h– kU[u7Šº—ƒ´/S&€#Ä‘áK6ˆ-ïÏRòc+ù°=Y².LY'º‹¦D·W¦SÔéö ª"¦D³W°·U°·“£ñ_a;È;2e]9ò\9/W9/w/Ô‚d¢¼ÕŸûÚ>É:ɸÉܹHÚ¾MÛ½K^¿KÚ¼Ú¼ Z?÷YDàs§Nœ¦ŽFöÙƒ|øï9Ž]ѦÍÿO¼¦€ÿXß~XÑ6ÎüîýX‡‡S¿9¬‡óeÐÚ®'xåG_X<óž]óK@`¨ ð7|±3üØm/4eøÜhý:d ô¥·óuøÊ}ôƇ'[÷±·ÑkWËב+ »¨uxãÿuÈ 0ã?;Øó> ïu€^Ãö Ñ“¨®§.ãØzë1sí6uç9{ç3ë6v¸ã-| \þßú,^¸Ï€@ôŽ·üÁoõ½ïÊWþkŸx+ï=n]f à?¶倞ROlúAvC×ôRÀ¾óIJ}תmßFpLèDíÝñÿaáA õŠuå’UÅ¢9tþךZþ†Fá–vîIæ1>mŸ¿b¼Š8åÄÜû$°c×ñO–Mbv Ï6haÇÔ''V1 ê-RœLQ /DÊ0x ¦Ž<2“4G§ºâõ&ñj5"E¤Xv”š BÎ Ä÷r$Ç#¤^±ÙÔ‡¿Uÿç}Í?,]Öh•i”KïW §µÈOûÄ?µŠß½V\}&þ–‹|×­ó‡ ½ß|lTú¦CéÿœþóÈü– 1h¸”ýp=_´?X.Z)0A¶2¥¿m“ûõˆöφì&³"M‘ JGÕD5dÄ×e¨_'®?$ê9)í3*éØ/f×!@è ˆú>Š“N næÖ#”:Ä®¡4 QÛE¨â®="Ü~q÷ÞG==†ƒ¦5cpIKÆi[„‚-bé*¾x_2i’?j˜7eYºoZ½kV}Dl8¶m< 42ÛÎÝúϽ‡>„Ï݇Î\Ožù_ø_N݇Î}[º …€d½uº|íF0qé5vá>rå6.pé4|íJ;_¨hÝX‚üG›C:ƒ€ÿ;ŽÃ|è…\´ÁîÛvêßál8õ¡cËí èØ2àÿ&^é^á#ž²i™&5O[£×fhu3ôúI‡úû7ƒôºN]µ¢Å*¿ö¢Ë­°À18ÁÙ‘¿™kó,È6%Ä.5”’n—iÕv²béYqŒìxfv"#'‰™ áý3fÞ3ægìóaMcýµ ÓÙ…é¬BÔ˜ð»º)9Ú*‚ ð-@³š¥,VþC ü'Êðù/g¢'c¤#c %õ#ÿe 4e@ÆÚ2æ8Ykcô^ƒ ìh£ÎµÓt¥*¸Ó¼™ŠÞ,/¦¼CÁ‹¡äAWö`ª¸2ѰŸ.ˤÊÓíìÔh¶j4;yš"ߎ¬`c-²#ËQmåöàr\jnÎ ® ÞÊÞ^J~¾²¡¾òO¼5‹9£O‹ösÆÎ³/ÓW.SWÎã—Ï"ѮˊŸºLBÀÑï‰ó:ê;еwþ¹™Ò»ï: €Mlü¼¥ûcÙ»º{â;‹5ðGû¶ñáÙDþX¿}°€ÿÅ/Â>b.oFû¶ñÛûcð¿ ]ÆšüóپįÿoÞE­öÿ ›ˆ•›tÔ×g›ß@3ˆˆÍá˜þX›ø¨W>sØt¨Ë86žâÿkÏ™+i€ÿ;¿¥÷`O¾ ^3×¼yx?¶C Fvð)høŽp¹äNž³Ç.Ùcù_2ǯèc þOmŽÉ}'$´ è)¡ëßyNè:"u“{ŽIÝ`Xƒhàÿžá[€ÿ‰qã¡~-ÀM©xC©´®X¼¢˜µ*_¸*_²ª¿©‘zf•rKK½¦=;´}²k}ãœvå”rÊHÙµ~ºeñ수sî}h™²£¿Ž{Ò¡ì’(¨ãŠˆ[#N1xôXõCÄKI•Gj Ä+Ô|%ÉlE¤ÞéuGNòå~Ñbþ7Ýô­lÍ&dµùnJæW#º³Ï\ÅÆã$g3ãjä7ã*¿ìS¾­•þy›þ‡Z¥“²‡w5R3IHw Ò‚ܽUùýœÁ¿ï’~;n6“Œ¬d!󉊯©‰ªÈs ä°XöïÇl‡¢Ä=%Wq„õPˆ-€<ÓEâ#¯TÄ»ÔñýBÎ}&$<'»O|YoœaüKíx`><€^é%½ÖúR7®Rç à½R'æ…VT™Fx©zX±jH©Zt±rà*R -R )ÑŽ(Ô )1‰ÈÆù‡IÑ|D‰ 7! o1¢·(M„H<R¨ˆý3Y×Bíà×Fq­„LH(šLÓ{‰ÅvU6/lj•“¤ª%ÒÛUÛæMjû½{Û¡k“Ú±aßë&µkË¡½(ŠNÓøÌÿ=îè\`hÇq?S`èÐ}ôÀ / ÀþÏÚ7ö±&B€5 ó(™ýË”ö›† ûš)Ö›IVã¸CÓ}ݳa„QÝŠ/h#õ¹UÔz¦åº? ¢¤„P!ÚOr@±KÍŠ§f'Ðr“èŸk;ÀüdÖÔ¦²ŠÒØÅéXöE<¤1QòóU”ö?àb¯ìLQ9Ù|±4 þS-ä(f_J@rÀHLqR&ú’F:’†Ú’`ùÀÔ¥ÿV89”ÿ–ŠD%¶­ª“½—œWÚ{0•ÜŠî e75º—®Ê¡«°èŠ À_Á¢ä`£æ`£AµQ²'+Ú‘•ÈDyk¼,ÑJ†D±µ–¡ÙÈÑ)²š X€3fnÊžî*¾>ò¾<™0?Åx_ã|nGlÊbúëÔæÝ§[‘#›~Cû^èè.ø‡Ûfto1ÚÁÁA€ý]Î Ö6 =ïö9€Jþ ÇøÌø}õgPþóPòŸùÏcãW ž‡hüœ?Õø黈µ}ƒÀAàÛÑ¡üY¾s7_ºwÌa^Ðá¼Ñ›àXaâüûhHÐÈRtø¯`ïü½ù!r çÈ¿8|‚n+ 7 gñ@§˜aã)Açn“îS—Óÿ[p%gt`1¼˜ 6ÿ!xíSèÖ×![Àÿ{Ÿ¥+÷Ù3gþ8—iþß¹Î~ôXøÊcùž;{N=³Â&ó…¢À?µî>'÷^SGohc—”ás2z_ìŒØ üßÁÕàÞê¿9ÐAÇm©”íª½ØQ-ßP,\–Í\•-Þ¹£Rµ§™wažñÑ!÷gÎ¥ïYyÇvÉ·N÷ÎÇÔ„m|Ü®Eò¡UÎyÖ¶!z^hŸÖ©ë(pa‚˜ F‚ˆ¥B@ÎC$Ó@ªÈH:[S$F‰•Bš9nÈvºÂßtZýË<í§-¸‹J¥÷rŸ:¯ä<È#"ŠHƒ»èx òÓ~¹Z"ÿ¬Óx'Ob/_à—Ý*?ëP8.™‰ WV}ã‚,g þË&é»!…4d”ò¨ÉùA„<Òë/¶›«ùu­m…5$Œ$¨Ò„'œ¿´ùMç«Ç#ýaÖˆ”ËØ#Þ¼lä’\ì„pð„pèøÃÐqÑÉÇSr!SrQ#RÑ=b!­‚®èM½aµ=`w:ŽÉøÎ©„OÊMÊ…ŒËKO*ÇÎh¥ÌèelZW2ë·ìkÖu^¬i—oé¿Ü3©90«?°x{Dh>"µ’ZO(gt´ªsÈè9a÷_ºŽÞ{Oß.Ü ÌÝÎÿß…ÌÝN¿™{Œ¾xç7 ®z‡çØÏÌ-oæÎwöÖîŠ7}ê1:÷š8óœ8q=rÞç`ÚuìAG«0Ú·Ù]ëtð…¦9Ûú Âë“’ýçmº9 jÉÕʉ ZÕ§õÏšuÓ{ŒŸ÷›tYtZ淙嶘ç¶Yæ5›ç¾5Éj0Îl0ͨ7I¯Æ=«6HzK|¥ AT©Vä ¾/”kF—«G•¨„*ç«e*ñÒ”=œòLƒŸj¹º ˜û>²öû‹â=EðÞ"a¼· ÞG$LŽ” åhúæk–ëD½1zÚ…Ï J&H/f‰5ó¤º%Û†u :ÔøGubÝD!npG@|øbs`±»ÿèp@×apÈ6¹ýöQòó[Æa¢]g¾k8m°»ç9MSN SŽÍ3ì¾Úg[†¨¯;I%½œÊ.^Yovf$3+Š‘Ë̉cæ&0Pì?ux¡;VÌù«À¾øG•dp@Å™¨J²a-Ê@Ã~X??üÈ+U„¹j¤Ï… +9ª… ðßîÿå¿™¡¸)NÂTÎ#cm)`¾±–ÈL[ÞBWž`¨@6U°Ç+2l”9öª\ºš CË­åÁÖrg«ƒ¸2Ô]˜N M6]MWeÒ•é4E~ð¯ü§‘4íÉÊ’’µ’µ•Þ\D°”&YIÛe¨62tŠ4“&ÍaÈ à¢ìîªÂóVòö–÷P Ôô6ÎðÅ׆;vGF ?Ÿð­Ÿ÷@on±{·Yƒh'@çÞ/0¡c œ†¶9}X#)xØãÂ|yâ?íã@þ#¯)L˜ œóG:büGÇ;úÎ]ù-]ð¾ÜÆdƆžé;‡m`}û¯CVnBWцÏa+ÿaà_†.óïc7Þ¡Å4ÀfÁÛÀ;Ð}gÿå»ÀÏ[ÌðŸû|HÉkîÎå]àóWžsh=ÇoåCÀÚ½’ö>h˜ÿ>dí«ˆ­¡ë_Emµó)|m4¸ÂŸ³tëµzï³ôÑwåoåçÂ5wêÚqâÆiò’5qB>²Ü·í;°í;¶ï¿  ]R‡.ø}î“wô‰[êè•ÝÐ%yà‚Ø}lÖº‡k@GÃëÔ@ð¿¥R¾­R¶­X²!—¿&ó|M1uW¥èPíÕ¹V݉vé9.ïÒ,ÿ–TvK)¿£_3s.©gÔ”#ëô=óÌ ë’#³¬cBñžMÑQèKeRŒ°¥ ˆÙ?´D( ¡ "þjÒaš2\$Bir‘Ÿ‰—™ßH“»©ûî•òß÷›ýÓ´Í?Ï[Cÿ’ðÄ/1¤œ…,=úóŠæo†¬[ÝEži#MÎè‘Ñ‹J‘• d(ôÁH°V§›~†rQ©óÃûWƒê§/¦‹,D?® #Gåÿ4Cû»NÒ¸—T†ú©²Õ½­eþnÒú‡C— wÁÕ šÏéL*† ŠÍÉÄ,ËÆ,<Ž˜“ˆ˜}2õ(`Z*xV>~V>uB6yH*j@Ò¿[Ô«UÀ¥qjp”òžV šPô“ñ•ô™U ŸSŒ†¬a\öÉ”bò‚Zκ~ñ:îÕ&îÕ¶aõ¾qÝIý¾aÝ‘IùUûµu÷5¹çÒ¦ç„ÜuDî<¶ë´ç'shÛqxËu`‹Ù·Fƒ¥s›Ý»Éì^££óàû˜°Ö ;´MÜ>wðÈuäËÐÞ/±Jö€tGùï35‚ƒc÷ ˆÉ1au¤K,M\ºB7pÑù¼üù7hÿôDdèïü¿‹Yò×çÁógþ³ó5À£%&ÔÐCü÷èßߥ[¿å÷þ«X1­ç vÿ6fïcØŠý˜]H`ý$zþ æ3ºó™øò[þß{-`U 3Öè‰Ã ÀÿŒ>zÂ= ØõÃ+×ìqt:kü†9öŽ9)À¥í Äÿ§„žc‹¶C“æC£¦=½Ú å˲+2«rë²[ …û*¥‡Ú©Eç:gÚUGê%§Ú%Zź¥[ºùë¸Ô}|Ê™]ê¶yÂ)ïõõ±òkú‹;ö«rV£·LÍ4OÓÈ yÌF¤éˆ¢#‚tDÂyh…  éàY|ÓÆ»xmpT*?†Ô: s‘«ÔÿiÜêßGEâzó‰=Aøµb‹¥R±\“úí%Sá!H§³ÊR¢ÔzƃŸwÌ%Šâ‘xe$Mùe—Íûvÿ²jùý8aÖòz°‘¬¹W¢q×,÷oëºÿµl´'ØFHG¶Ÿþ{×ç÷ :^5ÿ‡!N3Sìå«!5ÿ µ¨)ŨñdzRÁŠ1 ñ+2O¤"g%#æå”2g³f”SgU‡¥#zÄýûùw‰{5 ²›¢ì~I— YŸ )Þ¸„ߘHàèÃðIѸyÉÔ%éœ9ÍÒ5ýª“ºcóFt§~¤]Wæ—fíWׄžkr¸À™mÏ¥÷‚ÚîØÆé;w¸p¸pºò½à{ zóFNýÇ/‚¦nÂænïCçÏø3—>S@~:óÂkòÒg…ä=õ¥y8º›ì= :óDÓÏ+ÏÈ@¸ChãMîÀëоK?:‘Õ¾Âh^ 6 Gñ•½ÆMšiMZ) êO«â*åbkÔž6êg5å6™<ï%½èµ)ï$ÃÚM,©7L¯Ã¥‚^šÅ¿6úÚ$±Ú8©Îøé+ý¸ZQ/t£óTžÊp£9ˆýDˆþâ$oQ+—„•»¨¹«°©«ˆ‰›¨©»˜™›ˆ™»°©—ˆ%ï!ÑÁ!ä§ÂœbÙ€j•è¸.½çÆÅÓø*ÈmêWí›Ö©m[ôN¬ïôžÓÀ¾Ó0V:Þb÷o2úÁŽ\ÆP¹»AüµÝrìþ¯£3ˆ{0ÌSšW©ð]›Ü¾5ïžµ€Þuÿ¡M¯ñŸùÏñ-Ïá¿áE×ÎNý¨wã€}ñS÷â§®…Ï\ŠRœŠÒùõvA&³0‹*ÊvÄÀÌ/Ër*Ïæ–d²J³Ø%Ù¨þe9\Ìþ:øëú¿]ÙÝAŦìb¯ˆ¥,’ðŸAP YÊÛ›ËþÕ0ºZËXI›ã¤­p2 ¼¾œ•ž¬No ke$cm.G!*ÑíTÐàߥ½GÍÓQäÁÑpƒ€¥æÄTsd¨rTYj ª ¢ Á?ÍV"€¿µµ*W27—36–21’25–67“¶²”!àeÑ½ŠœM†Éå°åœ½Ü¼}”}x*~jAêÊÑjþíþÑ[»ž³Ûnó»nsuº n¹ ÿ!þǶ€؃ûô¾-Jçµ›½ô±íгåЃîõó]þÜ{ ææüëóç>óíê\àŸ{ »ü…ÍØ…¼àm% Y€ïzv›êËoÚðEè+üCûØf1zG ½)|å3‡Ni \¹ó_:ó˜ºæÍ¢aåoìλNÞóPb£ |¼g¯!‘[ìà*lù. ,cý}ìÎǸ½O±»_=Ùû:nÿ›'‡_Eî~ ßþÄ××á;ŸB·¾ Þ¡ ‚ßê;ÞòGÿ5< X‡õkÞê{… §‰#~+ŒS—É#§1¬3Ò gL2‚Ü™ON3˜÷£ïlúo­{® ]gæ­‡Fo!þÜÔ©ÚÒz¹¤T¼(_ZS*`W½òHëõ™^Ý®îÜàÍ™á›#½ê=­—;å{š/µ*÷ÔKtÊôÊ.L«®Õg„ª#âËâ‹[›úkûŠJÚ;®çP,gƒ(ú#2¾ˆ‚ "å&¤HAÄÈÄ,…( Ud.Óú3¼ßOpŽË9éf*bH;ùîµÉ]9n(Rt( ùY“ÎÍØÿÇ$å7mÊ?­Gþ8-õ댡 }aBúÕ$±ßuëÿ÷&u½H1Ì1B’â߯p8'þphûÝ ÍkdÄ 9J’ú¾Ãä×íòßõÉþë‚ŇR¥.¤ÛT¸M_ìë Úÿvÿ§>Î×¥.ù*bE4d­Ûd™#Êþsªñ’ñ³’ÏÖå²wUò–¤’g=™‘Œ]”¶¬˜6/Ÿ¶¦–;«’2&÷dX:jD&Œ CØ«KÔ§EÀ¥]È­OÜoäqÈØãð5´]œY™¸Ù¤y¹ìåüm­¸šCãz0ß}ã–m£¦m“æ|:µ“Ô}n×{A鹤ö¼c_;]:œ9ž: ž:Ÿº aºæoÃzÅ›D7…}'¯¦! ¸˜¾ôŸºð›<÷¿ð¿áMÞûNCîëÊô¾á¹ÿì‰ïì¾ÏÔ®÷äçØ—qØð{‡Íp<öE§t9õ‚`åto9´­Ø¾'ÖNã_›¾èÐ~Þ¬‘Q§ü \à¥bl™|ÔkÍÄ7†é­øü~‡—ƒÌ×í6%Íä¢vJY¹¤Ùòy¡ Ãº Î4ýYF£UNq*?Ë‘-¨$e¦½š ­ó¸±µ|5¼œPy:jºó-€ËR àó_å ÿ©6*’’-QHT!”--LL¤ <26”45‘´´Æ[ÉH2öv²4ª4ÝAšÍ’år<\å<½|xÊþ<µ°@Ð0ňÅô@‹Áˆ´½=¯¹=÷™#‰cç¡C—¡uÇžmz/†wô@/[Û¾ëK/ 0xq?l5Žæ~>)ô¥ù'hßy ­þ¹¢´PCxâ6LFǬó¯Œ̱6žyˆÞѲ?ßà—ûòÒò‚YþaÑð  wøÒðØÅ/Ú|]¿BÃx´#´ïzª“¥^ù¹ñ)f ½·ƒéëÄCÀ,àëØ½OÑ{ïC7?„mݯc7—áo€d+ }@‹?÷¾‹w¼<£¹€Û,@P:åN\zÌ^{ÝÌ¿÷]ùÀ[¾w›ƒÈÿІ½´E þøŽ#Ó¦}£†\*½Úõòåâ…•Ò-Ê#½š\Ý©>ªsý7—&o¯L/ŒŽu«÷5_‚PUiWh¿8ÆUÞàë®IuÇøªÒ« JÝ9þõŽIÖ‚nÈ”Ç[9b¾ ^2¢•  †¨D>ÒöQf!Ò¶ˆ8Uè1SJÚú!2ÃýÕXôûv®Hó$ reoÒŒ‡=¤Óu‘ñЇYÈŸ† ~ØqúË4þCðïÄ=jøU?}ð‰ÌxÌÃ5jÿµnûÑã·6y ¤!ÊúË‘ÿ½ÎýÅ[£É‰)žøRˆôzÄ£ß6Yÿ®ÿîµê/šMÞŒ³õ›)å=@ Ä‘ ýžN'Q£DZ%Q+Bô^ º¥ÜÔã×4Ò—åÓ—eÓ·•s¶UŸo(gÎJÅÏJ'¬*g,)e.*fÌ«e,¨gΫ¥M+' @:0&FàÛ&àÞúÀ­WØ,`EíÙ®Nö‚|"XÀœ\ÆœlÖ¼ÂóUÕÒm½×ÆoÌ[,Û,;@;hŽr× ¹ãĦ,àÖuâÆeüÊeôÒuôä6|æŽêÄu„YÀ¹×Ø©×è™÷Ä©÷Ä9À?`•ßäo‚_‚È Œ]ýЭl2ZáDKŸuΛ>òÛw„øÿÄs tè6Œíìpº·Ù]èøzÛ*¥eɶaŠP=nUÙgTÔ¦›jÔN(‘È}P(^¥•X­—Ü`œÙlžÛM*é³-eVÓ_‚´ó»ÈE`ÀÿZ³ô *‘N~©À_1 ðßGÜÚCŒüwµâ [¸ˆYÿ]b‰€¹¯ˆ…Ÿ°9X@°EÒCûŒGœB9Ï—j¡ú‰Ý¦ÏG­ÊgHÕkö­h#þ^ð¶C×.í,ºÏêÝåŽî8|¡Á©ç ¬{Üaàÿ‰Çø]0dýóà‰ÀÿUVï†ãÀ&»}ÑÆï/Ý·Jï]eõ¯9÷¯y mM¬/Œ-ù®ø­ú¬xu¯yw6$>«J ~‘Æ-Ëd¢A~¦GyŽWñsna>£ À¡8 þüw.Èå–ärÿ?Øÿk|á^: øïÍTõb¨¸;(ýu €Ý€,íñ£€ˆf²xi¢‘,ÐÞÆD‰l¬ˆÊDžd"oc.oGPt°UfÓÔœênlMGm_®–³–7WÓ›«íÁ·g¶X‡¡†Öÿiªt{e>ÿ•¾ð þŒ$q8 }}q°ãÇæf’––‰D)ª½”MŠÅ”qr’wåJ{xÊúðýyAÁár‘rA–ƒQÙÛÁC;Ó»üÝeÁ”×X­`â €<º¡OëFoöÑ{±W°?‚,à„3|ê8‚éÐq„ >uG'ªŸºOc½@aå_›øCð¶VsŸä¿gúËm‚ _Tð»äÇfø¢7væÐ, `~M>×…á×çÒoþ>äóÕ`L#6ß…®Ýðú_ù/`ç<ÁSЦÐñáïbW†¿JÚÿIò¬_%ì}Šßø£;Å‘[w¡kð×Þ-÷Ÿù ÛÙØppð,¬a $ìèMï¹3׉s.ª çÉ+wôÈè;ßÅè%²¯ýVÞyÌÞ9M\чPž;ά;O­Úv Þlëׂ6u«×µ_–Õ+VÕ+7µ_ÔŸ›4_šµ^›5_š4^6œáÞëמÖŸÔŸêÖkWŸéÔœh½F-@«ê@çå‘QÕ•uý¹þÒ¦îšZI©Û7,™QŒêav“úeèm’Õ”ÓŒÇÆ)І^dœ)&"å„Ⱥ IË*¹X'YËz¨!Ö‚èÖp¤ªD“ƒJA*Y‰E¦‚¤.ò~Õ)÷›ãŸ÷XìJœ• ¿Ôÿìݿ®°ÿaÌòW}šY²üã4ñ´P¿ÈZÀYé‰çœUód_VŠÄ˜äB˜ÜR¤Ô„¿Èö3ý›BÊß¾áݧÑ;Läš”Të¥t+„ŠDJ…%J…TÊÃRý9J­0©Q˜>&¸¬–¸£=/“¸$—²«™w¤W¼®šµ(Ÿ¶¤¾ ±¢’³®]¼¦U´ª•¿¬õ|F9uR1aR1~P2¬O<¨CÈ»K˜×%ÈžSˆ›•Ÿ‘‹[PÈš Ï^T-ÜЮÜÒ½mP·m\`Ñ|`Ù‚ÝÎ>$¶ZŽH­öÝgŒþ Çá;·É÷Þ3ïy³·ÞÓ×^ãüÄã'ΜrûœÑJ>¼â9vä=zꋺÚGËoÓÿåê­ƒãÚ²5Ï´˜-f–ÙbLa2“2•bf–,Yd’™A–%‹™™R©äKf†KUÕÕ]]=13ÿtÏDLÄL¼Y;¯ßëŽøâÄΓ'%]Y÷÷­µ÷ÚkCFp˜4vð"qö%æoúoö5îþ­hñ]ÒÒ{ñ¿w AG׉á«í Nì£cRÑÔ]s#¡«#‚H{&ôÎtÈíñÀ«Ý~ =ÇÏ?õ¨¼çT|Ý:ç’Yè²yú%»œ;žåþ=¡—¢®Œ'Ü /ˆ¼ô4¼ñÆ™Ò×䜣ôd“¸D£µ ‰¦\ã0žI8[—€ À€ax–¡†cà/0$œ9ŠóÏÑ +2Š©2'5Ùòoºf=ñ+ï9Õ0te.ì.XäëQòØ^ˆw)Ò¨– Áᄆ:¹IŸÞå æÀ»Ü´ÎË„lR!‚>*!öËÀÈ#2긂>© Ëhƒrú ’7´•<©I›Q¤ÍÊÒæäéóòÔ)HdÉC]•Þ®áßh ]ob^oþó®63¯^¤\¹Him¡_obÝhä\o`ù/µÐ 5hýÓþŒù)?êÈ€ýß PC’]ÀøgÞ @«?, Ü Í…:þ´ð?üŒ (ê¬Þß1úŒ(ê¬zhæHˆv¡Å»°Hî€z>ÝKÌô‰XÞB¦¼ `QÝÁhÝHBœKB¬k,ÞIWðéêlïïo{úôQ ?XÀ‰f§ÿäh¨UdÔÑè+Œÿ4*ðß–Ï·&Ù‹“ºmP? z±\@©ƒ?þYwÈ£û”ñêÄe|:ºü§ ë!{æuøÙgÍî2¦·i“[Ô v^<|—=&š„LAEFõ`ŒÂ9-wû3€`Âö‘aú˜ƒŠ|ÞgK±9¢·™l¶ÝÆðŠê 5è°ø**T|.Õ|¯ÜøÃ¼à}¾-.èVÀM€üØ6¬ •Œ¦¯£’$áâ#f„K¶`óN`ÅkØéÀ€}¤¤µÏÂÕ/ÂÕœ…Wä‰ñ#ømÀ3õ™6¬áφÏ]™/bŽòøCű0G€Œà0°ëUHï»°þ7A=à‡'Û÷·í{²éûpûØãýcOüž¼ð}òÒ]µíŸx|pöéApûaxÛÛ˜Ž_éC¿2vCn-Ú•Oš¥ ë“GõãWl³ÖÂA+î=“èKþÅÆ.‰8³DœC¦Á‰Lœ_žg¹‰{,N/ò.‡;…3òÇñíMóÝôr팸8CñÜ×þïí¾ïs•7 ¥ãîÆã†„¸¿uùý·ñ“ÿc.à÷NçÃ;&9¾ÝbSï†{m]ì‚cšâ¨¸L+\«®ÙwO=")±XȰ.4ÃÝ?å0Œé=åÃØížÞñ;¸“OôÚºÌ#Úô"Ÿàbîè ¹ÐŸšàŸêÅ YpÆ-ÅR2­o£Ô¥ZâX+smÜô½²éÓºîx~ŶVîÚ¬ô¾!õ¼*q¿. ñh^v©_tª™°.š¶-³Ì6Ëì1=?"4J·Èž·/^ã€ÄÁµyÝã²Ôóʆ÷u™ßmåñûò÷Õgoµo?ƒëfª ÚÇ÷ìÄöíÆ쑆÷©£/ãox3ï„  HHœ?`MìÒG÷cûì ¬¼GMÚæNìò§ö…S{¢éݤéýäÙƒ”9è&…ö w`Œ0Æà«½bL¼`N¾äμ̃Þ&.`v^Fp ˜ÝçÏì­ü˜S3†µŒQ•Á”º¦ú Rœô\÷t&äö\ØíqÿÖ¡“úü;=jŸ8•ßµ.h6Om²Hm4OÔàŠcî}ßʧ§Ïµû×C"Ћ¿Òs¹3¦åQTýÿ¢ a–5)Å,:É /4‰˜„ÿ9F¡,£Ç®A,Ã@¦AÇ gÀ7  q§ÅúþÉzþizAyÆQå¤F;îU—´'~¥à£þW¦ƒî,‡·Ébz4ñCš¸mÂ0qTEÕÆ·3[Lt&Ô&{RÞÜäMªá?“=x©fMù•Ìš=§åÍÂ[Zöð®`lK0º•<½™º É\Ñæ®ªsäŠôÑ‘Êûíe5w«Å7ó-Œ´ob^m¡ü¯µ°®7rn4²n4Ñuw¨ÀL—Îùü$?Z;n©&6W@0 Q\uàŒY;Î ËhøŸû‚X¶@×~ÌY{Pô;¼bî@Žv¦'¸p(î<º;„ýÉ,Žÿ^¦'X›æÁ¢{Ð! »‘‰®Äg°€¸hG¬à?8Ì10Äþl ÍÙ³G!8yÒtæ¬E€¿åä\ÂQ"Ù†B³ç0í€ÿ‰";q’[ZªWj¶Cfžueúé{¢Ü9a»\0¿aTð?ªL@fXû5؆n ,¶W×W´Ñ#®_Ý£ŠîÕÆöoÅôk¢z4q½ eL¯*¶O›0ˆ}þ¹ÕÄôãÑy1¤alAA‹‘GK̨ʈԯ¦ oq&ög!æc«|ÈÙÀô)Oþ±Pý6WÄ~—-û«Àv¼Õ}ÊWèv~¡ûó”À|4«S¶ þ»ùÛ|ÙÇb՗ʭϛpyA±žD[tØÿ¢+ýZ€Òð°˜÷Y²7éë‡âe,)@I‡ 2‚iÒOéŸ3d_Óe_Ò6þ_“׿ˆÖ> –?0çÞ&ö£v#z·ƒŸ+N>¨O>„hSqâɆßCåÉ6íÙŽÝàž—á‡¡}/Cû_… ¼ z6ø2 gÿTÇÞÉg ýãí‡þû§Ú޵ø==ôi{áûìÕÉÎ÷AýoBz_†uï…={Õù‰Ü÷öØgÂó ïæ³ü £¤ }Æ’)oÍ"eRO8h˜Ømɼlp²g•³ÌÃyÖšD\±Œ¿gIÿÇКjl…7µ9säèqœQˆ.FG4Ò£Û'àpSéÿùyì×GÇ!¼ïçÝ Ä=$à´_Ú~¹g½Ûlüâ†í}þ{ nmþ¸®@Óª£ª%t½é´¼&èyœm½®W„S6Z¾¾áò²éÌ7\Îì®iÐcüscJ.®ýüHÄó#aí¸ðn#BüÄ ¢Ë4þ1.üÙ‘¸sΤµXî]©9Ö°æRµ`[±áÖ¼}âÆ–ïu¹ë…uÇF‰ó™ûõ ÷V ËkçªgìË&mŠ'l F­r{R»ôÅ0˜w¨YqmX÷lAOz^’z·Ê|¯É}oÊÝR x¤9ûXðd+¸ø¿Ö¹Õ½‰ïÖâ»ÕÑÝÚø>p—ìIpO`üÙWœ)  ³öX;ì‰}v9;ܱmÁÄŽhjO<³›2 ×ÃTÈjQ™Ð¡` Í 1GöhÐÇ÷™ =Æ8|‘}öäw ,àÅ¿[ÄEðHÃD•óp;Ð0†•Ô>4C‚&I:"îCÔ ×ÙÐ;£gZ{|Û}븕]µÎn0×êó+pꌅl3[óïø–=ö¯k kxŠoxUÛr&§Ô•Ÿa 2%šDrXÛ8”c†‰mF€‰cxšot–gxF ZdàŸf’o]aEj²çÝñÈíÈu¨WÄ÷CÌטx "”Ä(ñ=ŠÈ.eT·2üùFp;üo¢Šé–GuÊ#»À@`ýhî(nàÿ'ÿG7)ã`ÀÿMúø.gr—;µ AäÅÉKoRW“±n?ïuÅœ?û9Àøÿ&Gö*K . Û€z>`½ Pç·ûZLïòï TŸJÔ `þûÕÇ2ÍÛ"ÅaŽäu ’]¿Ú)–§þ£úRÌhreð±}gØwG=ˆRWÐ!2h­aùCÚÚçLtî<èc²‹ü?ó–ÞP§^Ä cM~v‚;¶ƒžmžy²íÿt7ðÙN@ûNHÏfàs¸¾Œú?ù‰0ý.zôMÔð{üèÛÈá—Á}{g»÷N=ß?ÝõâLÏ˳½/ü»Nwœxvx¼óàXÇ‹Ï_ôŒû=†&”"º>Q†cŒ}ˆëÔž¸2mY€û†Ä3Ö€)oÝ»BsºYq¬EâVüßñ½¡r»´æxAêruÌö¸Úp¿Œ}Õ½IâÙ²à|öe_5a[ÚošÓkœ5l^8iS¾är~Ãç’âÀ¿UâyqÅí‚òøMå‰;šÓ÷U§*NÞWžy)¸ÀfX×VDϾo+¦w+¾—Œä¹û´±Wìé÷‚Ý!†toÓG!°‡¤`›:¼IÚdŒlóÆv'AÛÂÉ=ñÔ‹ÔÙÔ™âéä©}Áøw>µËÁg·h# 4`Žðgöy,Líp&1aUÖ;bü×è–zQ; ¤rƒXë'¾ø. x¾×RÇö€ €;€À)à#~Âþ‰úÔsë }˜8‡5aFk»:º¾Ó‘öUú*Ø£ ¿yÔ«?k?ªêXÃ`8ÆŠ”ÞÃÑuÚü^¾ó¡@7?—jàþË<)`ÿUþð¡OéÚG£ùÿB 6ÿ­;¼×uòcÛ;ª¾©AßŠÔØ¹3Öÿ¨e\º®pT$ùÀ_yÜ?$ŒîDöjƒ;wC»÷B»÷ƒ»vQ{Ÿý°®‘½ ·qã¯cF?¦>‘æ¾’>çÞÅN~ˆ™ü7ý.jìEÈÀA@ï¾Ï ÿÞWý¯ƒöOwžíÁxù>büsüÌÒüÊÜ;âÄâè/Œ‰Ï }›'®­ØUM›Ìd¬˜e­Yf-še‚Ì™ÏÙ ZñoâZqÇÛlczù½öÉ#.™Sî©Ý–ÄC+:‹ÃEè‡âpD=c†‘ÃÌb¤OÑÇUùXUºã’ôqýôÓ³¼ð{Ç,úïœþû¸ÿÿ>Mx#x:Ãâ·Gч §îœÀµØã)ºý?ªÐÿONúûòÝ“¸—u¡ÿïdÞ¿—|.å=4óž°âŒá—ŒsL fMs‡õ£ÆŒ\Ü ­CŸØiJ¶ätR:õ-ÿG8|§©Ûˆ1l•$?Q»xY}òXÀºãy­gëŽï-¹Ç%©kËšS£Âó²Ê»UârAêvIÙÏ5@ºÄëÊœcÌù9—†§úa«ò>ã\Шeñ¢sýº×©÷E\S¸¡8vCuò.X€Ôï¶Äç¦ìä}ÕÙÇÛaÝ»Q}»ø~Ìvƒ{”à?l‹0°C:¤M¾dͼáοæ/¼äν€ž9¾Cþk)¨€¦ÊÖ²7ù#Û‰c[‰c;¢ ð¦wy“ÛœqL›¬QTÊ Ýfí°Ç!§Øfƒ#hé#Ú°Z'Ì Øda,Ê)ýÀt–bô“¥¸ö™È‡Sá÷AKøG‹øûs‘wÁ†/÷žjzêSsǵ¤Ù<圩¨Òˆ[fÌ®°âU;kÜ’jÝE™6d±9Šÿ…¦Qã$³(¾i$ß ø¯ƒŒÀ,® ÓP†i0Ó8Œ\€cx†£*ÑàlšqpŽQd±i\ýQæU§”{ùm^¥O½+F_X¾ƒÎ‹EGƬã»6€!th¸œ0„êüÑîàqu ´ÅšÖÐQ›P }x7³.œ—%ÎÊøã Ö°Š5¤áªÀmæÒfÖ’6}V“2=žÝÖßü¿Ú̺ÐB¼ØL¾ÖD»ÑÀ¸~ž~í<ãJ tU{’.5$\j bäýœóÁà¯#ü¿“¿ŒÐTšÊb»g0]ÓQà"¦8é,À,€Gp `Ä:€ñÄH;°ä¨(ÔîOþÛÅþÛ‚à>¤ ¼3-Þ™Cvƒàà/æzbüsÀ¼„lOÇ“Ïöà±=8lw6˃Át§3<(t7Å-è—àˆs Ç;‡Û†Úø=`á`‰Á?$Ì",Âò'ÿI[à?íÄá; …)Éöé.™™^YÙ>…¹Þi'îå$Žf^™<“²{Tì>%mHAž’&ô­Ç÷Âu-ºKÝ é7À+aHÕ½ŠÃB¨¢ý¨nd1ݘtC 6P`»ŒI´.¬Ûú‡-o3§±#P´/š½N_ò¿ÕÛŸ ”ºP_ áý›)â‘òêö£ø\²ù¥t `‡—?É<ÿɸ ã_*÷À)೯s¥¯rÖÌÿ”i±ÏbIÖAm%ûsÁç|Ôt þ±È~ŒoÅšß+vÊ·ÿZ¾ókú]êêÛäeÐ×Tù»ÄUÔ”6sH߉Ø ï;Œ< xÞäל}ºØqÙÿ.~ìyê+u‘Ÿºø¶ô…²ð‰0‹ø?ý&rôEèàapÿËÐÁ×!Ã/ƒúüû^u¿ƒ;áƒ/Æ^ÇŒ¥/ÿ!ý!”c-ÿÎ[þΘùÛ»}êæª}í¢eéŠeɪiÞŠYβeÞœEÞìÑâYû²E÷òa[ñ]\h5qÁ/uÌ1yÄ.mÂ>}Ü^ôT/&Eφ‹3`Á‘q8Î" w4[ϦÀÄ&íˆq2N? ‡âpY&¸Lc\ƒ·Ãyë!Á±¿ôqÿ/¥øÿÞÈzÑJ(´Å%:‚nçã6 "w/ûòÄóÌ1¾]¡Ýñ³xêi÷¥ õ—‚¼¯ˆ±£´eË´¹#â5³Ü«ÂU‡ò)˼ “ôQaÿv¿±°ÛH8dÊ1çõлõ¨ù?×'?ÄE?Ó'uPÇì’%~å»!—·N]Z´«\µ;§ñ¸²åתñ¾´áÜ(÷¸ ö¹  ô¾&ó¾ªð½¹á}]qü6 }ÙóʼÛÅe¯ÖEËs®õ#–%½F¹CæE“ÖóŽç”ǯ¾Ž|¶ôPuâ<¼øDëÿD~â>šµ;óHq¶ Uáû÷¢¶£û·c6ã´±ýÛ C[èPŒá=ò˜®;ú$XÀ{ÁÒë¤ÅWð÷,@t`ò€ŠÒ§$÷*)ÝFÿ&gh‡?º+ÛO™ÜKžØ´ü1-wt‹?¾ÃײÑQ‰H”5u„¤~±OIèmBTLì‡4’t-}<Ø öèÞí–’º4¬!ˆ‘D?™z¤[¸;zsÔÿÊh@ëtä­Éð=§›:Nžä[}íè‚Cf¥?לcDÌ3§¦ÛDºÈøÏ7 ‡È_` â›F,¢@<³Zû!Óp–IÝ0Ä2 bùC"hÈ×?#ÔH×Î3Ž*3K¨·a\vI¼å•ÞîQÖí{w~GýT‘У;> MlDw£‰°’4’G5´©氌ԻLê[bŒ,q&×ørÁ¸œ3$gö©8Ãr?¥/‚`°ÁH¿Õ™_¿&³µ™ÕÜB¸ÐDºÚH½VO¹ŠvøÒ.Õ3.5Ðÿ@~ÝŽjK=ù'üüM5:òëàßTŽÔ\Á¿±$¾©(.—ç‘ÍñÈd¹¥3\RéÎÉTgÕIHvâ“PßV<ȉãDÆÛ"lAÀù¸@; |€}üY» °'„8R"œi1®,‚ Á¿·˜ãÌõIåø¥q}SxHbžç™Èõð<¸7Ï“ÍE@e¸"  º)αw|œK8Þ!8Ü& ÄÊ?Ø20ȃxäÑÈh+|´eLœeñ(…fOc8PyŽœDW‘Ð9MlŸ•á‘å——ïUšëy>3¨=;2åγ}ƒ5 åNH¨/‡Œ6ˆšµÆu)záKñLÕ©Œz®ˆì”†·oD<“EuJñÑÏ•ñ½›„Hwéc[”a¬HEF;¾YSàìºßg°ŠPÐ`€ÿ£¼_𣭻ÙÒ×Ù?:¹A„ÿuø‘¾+V~®ØÀ1ÈÃãÿ—2Í·ŠMÐ×r-ÜΣF Å(òG3<ºèý{‰›úZª}þýè# ßëeæÚ‹ ÉKH=òÐ11ð#}ÈÙø˜'ìÿQ¹‹4†j‡rÑy?މL[{/^FeœåêÌvüÚê=ò:aê}Âô‹ˆÁÝà àGœúH™ýD›ÿ@™}›0ýŽ0ó‘8 ‚'ßÅO½‰ßØ ì}6ü?ñ>jâmÄØË¡Áƒ ƒo"^GÁÇMÚøE,û,”|­ý*”üU¸úò©·$õËGËü-KäÖ¥«fóæ…ÿû²Y×ò1ÇìNcV»>aÊ1iÑ-kûtÑ)wÒ6mØ’ÿ[hp,g“Œ³ÌÄÙàÜÊq^— O6ἚŽxVàœ ô¬³ô rŒ Ò $ë'šB.°TNø×bÑî-Ò¹ã¸R\îÒ‹KNÉz¸ë¾w#¬ç³üd%!ÍÎ ¦6#vñËÇøË~âI{Þ¢MšôhþŠIöŠeÞšcé¢sÕœ}͸IÑ´iÞ„QƸQö AÎ1wÚ:uÜRÜ£Çê1äôóžâÈp±Oôž›Ò<²·‚¶ü[”> . »ó ÷F•çµ×E…[ $ndWäž×Т°G«Ôç&óÒc7×Ý”øÝXò¹ºâu„r‹Ò~“|p9§zåñë;Avm<Þò´ЦõoSŸy Þ­ hÛ j×µ«CŸA p@݃ßyü ¸\^ÿwI£;äÑ=êø.êP4÷B§þ4ðy“1 ¦öo2 š•‘žK‰íJz÷ø@4¾“<µ-ߌn%Nl &4´é^ÅÐ0Pâ°ÇŸØaʉÝëq2BHMèCåô¤€¿€Ëì0F·á[z¤H7ày mž\Oè-E=œ¿7|k"è¤Óa·ÆCoŒ]í÷¿Ð}¶¹; åyPËãe ÉÅæÌ4\,0àW]äÉ3 ò'šG°—˜tAá,£P®)²Ìt+ÅÈ8Æ\ÃA€@Ï?I/ E?(Ç8¼Ô*®ÆÒêzÓ5ë‘Oé`@ó"þîZlÛFÌ3el—:5‘SÅö RÃøAi\¿4~h#È¡Mú¸Œ>¶DZ¤/P{Wé=Jö€”Ú¥bh¸SJÞœ‚3'cÍÈØÓjÞìDñÎÒªUâ ô–ò…fjkøßZO¾RO½P€ßRO¼P¢\¬cÂÔrŽü3ìoªDØo,‹k,Ag¾œ/Šm,Œm(@ç?ÖçÅä ¼òøž9\÷,¶k:Ë9é”BsJ¢9'’0 `'82ãixJ¤, ÄMõ‚üí(ÐâDt¡Çº±‰î|š'ð?•ãä¥óüRù~©Ÿd¾·ˆï%äy$ò=ø|w.߃ÃsgqÜé,WÓBw!ÓœãH.1§ÈX»°(Ûàð£@þàPóÐpKˆüþÑ1ÖÿØx ÉšB³Cü8q…nbt"˜cvšcN†kN–W^¡wq©{U¾ßÍ ê@RÝ<§c=¡àLlÐe¬9cXBBü—Æwç%¡më!m«–ý¬=ÚˆìSXî\î&ôhÉ#Xm–6¶Å˜ØdN¨i£¨Ghkìƒê*… ðr_°ˆZF§­ i–é«,É‹ŒU@1`Âr;Ðàÿ2O z[¤øX¦ùP¦ùZ¾ ‡¤{@ú©DðG- PhùÏhË ˜ÿV¤ÆÎ‚ù^ª}kÈG½#ÞçË~ž £Ó&Ú Pˆ>ò[ÙÖ;©ÜÁÇ?åÉߦ¡Tû?¦¡9ÿ×ðÃsfÙ3{ÄI€ÿaòyæ5öy;¨;xÿB[ú•-ù…³ú•½ü¹€vëøÿ4ˆç_âGA/"†! Àô?þ*|¼àuÄèÛ¨ñ÷Q_ãð×þš¦ø% -4ÏTü–!ûG¶êytóÔ]}׎VI¬*Ö­Ë¥Ve²£%ë–¥Èk]ªÇìszÌϘs.9€ýç­ãuR·¢qSa¿« GnÆáל­=r¢wò²~ð \È}\Ä#ýè«ÁU8ç<œI¾¾~¶¡‡#âpTœ1Ëבt5Ö‘ÃUXXè[šfY&áô³ô,2õ Òq.‡;oì5e’¼d“³h—µl—¡r+Ô8–­[–/š¯:U/ºÔNÛÖÌÛÔÎ[Í[äLeM›ü‡GMÅÃ&Éý {ŒxOžÛCÖì9×´UÏâÍSÍ{g®ù×ê¥N 2—&¹k3ÀÝù‚Ôåâ†ûå5·Ër]«©Ïuåé;²S·Öü®JNÜø^]ói]õ¾´äÑ2aWÓkRš°®YrmQ¼½ܶÔ¾Ò±ÖµÒ¹ôl+°ø¯ hS¶©#:wã‡Àv‰#”q€¿&¦å„á}Ê8òbìÄsÐw£-œ}™4Ö+Ù#ZF?ð¤¦u+)Ï1iù#ÀÿݤÉ]ÑÄ–`t›7²ÅÆÒ„½Äñä©Ñ$º !U²úµT$ =«É½ x©¡ômÑ7i B×F\»4ö©$úÉbÄ£eü£%ü£…È3á·1þ…\‡ë`à°€çÍíþõwO”·¸¤Sþ@~žaXâ¼qˆo†Ä3 åš„`u¡Ø[£P>¼«{Æh]XW,„‹ByFÁ|£ÀDÃ@¡¡’¡ŠIP¦yh©%¥Â’ZoÍ»æšÙuªv<[’¨‡òè§Q g²˜.E|¿,ap=¾-n[7Ü ­‘—ˆôlÐEÒ‡´Ì)5sVÉ^Pñ‚YEâ¤:ir ¬áiyÁõ~K­¹™Ö܈öð"ø×‘ Èo©£4Õ“›ë¨¶çíB-§¹vbE>M• @þ†ÒXÐù¢èúB`~t}°_Ÿ}.+ª6_(ô*HôÌxäòÜr¸®™gpd†sÍQHqyDG°F¬-ÚŽŠ·%…9CAHÄ@GBºƒ)a.t¼;ÞƒKF¥þ)lߟð¥%ú‚R½“^I‰¢DÄDwOàÆâ¹18.àT†sÅ5Žäàku44Íù„GZ…GY`‘\ÂQþI*Öβ§%ÚóDîÉ" ±sNºC^¦SnŽGN¡wa…GE¡Û•ŒÐ.aá,·c…>³FtIƒëôÁuJ?ÚšM@ñ¿"ºK‚,"óSÑö=%mh“=ŽEøümöÚGÆŸÝâLìA8”¼ò:MÂA¼LYÅÎ…æc‡ya¦z°{`8ÿu [º}W¢z[¢À¦}°é €?Æÿï•[üëâx¥ xrtL¼îü¯Oy²ÏùrÀÿCÞÆ§9\?( ø^¾õ§v~)A棉 Ý1Ápý˜±ñZŒ¶cÍ^óX耀C:á øB™E ?cFcÆ^ÇMÛ?S¿1V~ãIÿÊ¿ ¤_y’ìxòeáiÒ° 0‹7ñSŸÉóßhKX:®¦×·q“`" Ï¤‰_9‹ÿÌÕþ£pëSêÚûÔÕßrËQ~åÎlž½¿æÔ¸a[·~´Zf]%·¯–ÚTH,ŠÀ ÖljŒ+Ε#)½&œQ+ñŠKÉœMáüÑB™kå²M΄Q⤱pÌ€ßk’Üm!xfÅh³¦Ü·Š¿cs_/î¹½ÇõØ8®Eß»Zß²‡«¶´)°µ# 0c™$šáòlrôôËq6uÆž¸£™8ƒ|œi…¡S¥¥W¦™‡KÁ™3ñš4Ì^°(X±ÉW{íù•jœÊeGk—ÍkVlkuµšu+uKÖEË6Y V™«¶%ËNyÿI‹¬iëüÓŒã´Aó”>3°0êý¸N£„3ú°•PâU¾к{úªÌý"üVÎö­2·Ë` °¥ß õÉÛ²cW¥Ç®n‡>:ˆjSÜÞ ~¤<{ì@zâ8Â’×¥)§óƒVCG+g›×ýn(O=Ðú?øÿ2ªï0¢{7¬SøTðDüTÕ1ÿ!u´OÃ&‚vˆ#( Ž °œ<¨&õë&ÿ‡·9ã`õÿ»‚ »†Ñ¯¤ö(È]*j—–Ñ+£t)h=Jz¯ŠÑïóøûBô$¶^î°'žz³ü¡pýMþêAò4Ü#Ø uÃ7Èh{”œÜ³‘ðâÈ24”5¹{“Ö§%÷ÈbÛ—ðOÐdQæ"ïÎDÝŽ¼3q{o2òö`ðÕÞ ‹þmgënù•ÔÙÅæÑ‰:þ#éÎ6 ìsŒƒ µ‰†¤À4ã D“`¾1ê§³€P–ÑO¡;º†rA|#ÀØ?Í(<ÓŸg[nAk¶ÞvÍé:V5pa6øêrøí•ð{ËVðíËøg‹øŽ•Ø®u|×rXûrd‡$®g- œ‘ûþJú´”2¹J•pF$ÂÕäεôöŽŠ¢•©­ç8Í´ÆjS=íb-éò9âÅsñÍu¤†sHºPŸØREm©d5UË He ¥ñõÅè´ßº‚èÚ¼¨s9‘µÙÀüÈšŒ(PUZDejxQ’W¡È³@葟èž'pËæ¹è,À1™á(¦;‰¨N`( ˆs`DÛÒñv”HG°R¨R°ãAðá̈qå$¸ È^I Œÿé|Ÿ /(]è—.ôMz%‹@â$¡Ð ĺóÝÀØ\W°ˉHw§8Åícâmñ±ÖóGà-#ðæQx‹èX ˆüã VD²5…nðgqè"[È-Uè‘™ì†øŸe—Ÿã’[ä“WæU^ìy-'¤O”7M{2K˜X$®ÒŸ,ºÀseô! sTCGÝ<¶QyÃMò yH´… ’æw…³üÝÄù=á¶n°+ZØNœÙƒH¼ð*}t¼ü*]ò:cý0eå]¶ ò!h‡+€›ÆÇŠ3±ûh­¶\û±Lý¾Dù¾LFwÐtP©Àÿ÷Ú½Ÿ€MùAß*¶¾©±CßçJ?æn€À¾))Ó‚Ààײ-Ý.0TA„ÊAse¨Â'SwYºí&N‘¼â/¼OZ}›¸äG+}œ…WÌ9ÐkÖüæèqj'fä5qúcé3sô³†Ä_}æ®}â¬ÿß0ßSÞg_C@šûÊ\ù…Ùr¬/(Ç[âÌ{òÜGê¼û½ö÷äf©ÿY¸õ{ŽâKºä÷|ù_rd_3òÓ7ל›$¶çöõJ»Z•ý9àÿÚѲe³‰uµÔ¾Nb_³hS4f–4a)^v*X°+^´._¶®Ø—-˜gΙˆ×,3–LÓ–¬J&¦O¹§-ûçõºqnF>3§ š³GÌØÝæqlÏ>õ9sÍÖm<–:Ìá°qC}–±©èˆY¡õ9C§ >Wq>õ8‡&œÝCÏò#Î\œ9Mߘ‡3¨2w7ˆcÝ©hïdÕÁñJS¥Æ®Ifu~ÕªRáV¯õ¹,q¨_µ«X¶Í•¹¨¼ÊÖÜKfmsglòf¬ §Œ›ç š¦Y$õš±Ûõ OÁ›Œ)½&¬Q«äUò³—wO>¹µ.Ú4¬Ø7Êݯh¼®a.¾ ó¸¤:v]æ{yÕ³y+øÞËØvuà­í§[Ám›AO”gîKNÜÚ8}´âw}ØöÜMí˜mݼÛEéñ[Š“¨h+ðéAx×^hçvÈ3mè3mx'ð3ºg3n,à%}ê k®lêÊA؉0Û ýZBŸ*¡WCØÑíØÍbû‚w…SákÙƒjf¿‚Ò-'wm;מI  Ý– ñm¿š3¨å ¢3X‡µI£»™3/ó—Þ­¾.\y‘·¸>£«Gäœ)³WÎRzÖÁ tÂ×ÁæšÖãÛ¥¤®ubÇZBûbÜ“…ØÇ ±çcÍâÌ¡uï†^ï ¸üìT}Û©Ú‡'*®¸fçØRRÌbÅ&Qà|ÃP®®ÔÎ4ÁìPÈ.`žh(4 J4…;Áð¶: ðg…0ucŽI×4T—>ƒÀ,’ÍÂÒL#3£ L*M©-Ö‚ÛΙ¾e#þÁ—¦B®-F?XŠy¬[ÈÄ<Gà;ÐdBŸ”<¸J쓱'%¬ñ%æÐ§g9ùùRÖãùü[sE­«RoÖ.Ÿc6§7Ö3škhè—š„Æê¸†jB]5ñ|±Q7·ßXJ<_B=_œP_ô?a¿:'ª&+²:3¢*#˜¯Ã~duJdUrD¥8¼XìY”ä*¹ÝruÅuIe;¦0ÀÐ)-$N‚=+Ö,€ý£A9Ìž îDreƺq ‰TÏ$†W*ÇÁŸ‡øŸ™è—!BJOòIIò%‹ÝÅInIb7‘ÈèýÓ˜lgÓ…Duˆ'ÚÅlcl¢ãŽâc­¢ḇiŸ¸ é(‰z”N·f³íy<'–È&Iäš.òDüÏ´ÏͶþçù”«.HWZ#}™¶ö1ïǪ. þ•®{ÿÏRŸ÷ù¨¶ÍüÈòJüÊÏÚ¥X%'«ÞþR¹ ƒ¯U[`ðÀÿ×êðô]ŽHשúV¦ýµ|ó{©æ[‰®0Æ\àÊÝßÊ·Ñ$¿îøÈº“bþóL“~N•~HZ}ŞŘúù0çß±ßs–Þ²^3æÞPg^S¦_‘gÀ~ÉAˆùé÷ÄŸWà?Àÿ=séeö5y.ð³þ7±êW¾ôeîeÂ䋸 |f.~a-}b/}á®üž$û{ºæù›ÿ*Úþ[žê× éÊWþ×bõgÞ”ÊÿÎ’s½Ä¾næVasÁß®vźbÁ²tíh•Ü¡^éÚ°f[6eš1cž¶d—»b_\?}gÁ§uÄ®®ßªjʱqÕçÚÆñò“·4þ7C °‡ï9ˆë߉ëׯöjbzv‰CØ,Ð Úäub‡4´™Ð¯‰ë}E|Aèߊ~®‰éÖBjLÜa =¼›ì±Äéý¤™Ÿ;¶Ç¬~5½ÒpÌÖâž‚€Ø@¯æi…#ш*qH)Ö¦ŒoçÎ-¿(\>È_>È]ÚÉœÛL™Ñˆ§¶’§UüÑ ÖÀ:µgܹNy¾Fê௟£LÙ'cô®S»VI x ,`"ìöPൡ ÖÞÔPºÃÿü=¿òrGn–!Ã,>Í,Fçá`?ù‰cŒ‰«Ì7 àš`lç@š€mÐ- ƒÀt.йÍ#SèºÉ…¤GåEÅ—­¹×]Òîyæuœ¨ ¿2sg{&ú –ã,G=Y {²Þ¾ól‰Ö+ ¯¥ ­f .çô,å·Íß(½ÐWZÕU^r³–Áÿ…zzS£©†Ñ\Ik)‡P?î|eLmeBM9é\)QG{|]Alm~Bm0?º&ØGÊŒ¨L+O )OÕ)˜ªHB*…•¥ú”¦xƒJ’½À ’Üó„®à`éצKÍY¨« Å,€ãH‰FG†Q#쩎Ô0¤Gf´+;ÞGDü3Ñä?À?“ïðÏúe&ËLòÍ{ƒÒ’=ÑFÝd÷一P쑘ä‰,€ïY…á@¤Ú&lã‰6qëX‚e\ZðM Zað§ÑŽ2™¶® щŸd*rÍyd¥8geÙæäØäºù––ŸªË¼ŸÄ"—NGÝ\!ôn°G$LT$§ @Ú¥` oò&wg¶ÓZîÄ ®` 0€ÈO4÷·Q_¾EÐ^òêŽxq[¼¸Ÿ¶ºŸ¾|±r˜‰Èÿ*K‚­í¾É”¼H]Æâ¬Œàÿs"èçX7„Vx±‰ U€R5Æÿï5;ù?•kÀ@ð®`o e&À“_*Ñp„ßjv¯ÞýµrÈú£j Jµ`ßu­!~¬h>ç(Þ§¡!QcFöü[ÞÄù¯è³¯¨Ó/)S¯i3@rˆç?°–ßÒÞ3æ?q—¿ Ö¾%J¾‰¤_%Ÿø« ïIòo"ÙWáÆ'>šùÁóoÐéÀ‹ïK O¬Õ/ܵהÙÝØÑ½¸±Ì…œ%ø:¿&mü–¢ø#Mõ— %è|õï9JþÿQ¨ùWæ+{Ruæöªóù5›ÿ6Hà‹ås–eKv5 ç¥K“ÜùÜœEÞ¨AòœU®Ä ¢kx·dÙ¶zénÕ®lÞ4gÆ cͪHe_¥°¿2픫%UnÒKŸXGÌœb-ÒçNWŽ“§<¢§OGlq¹*KÃO–Ò³,Rp†…8ûó¸c—qgîà; cû̆ŒN=Ê >iÈ0þ–¾:Ξ¥oÉÃYT›yY§ÏÙå-ÙËœj5.-[î—P S—ó*»J­cµÊ±^í~YêveÍíâªû9ù±sËeó.E¯êU×Ê)«üy[T¿:fž1d–2b•ÜmÄy‚#uлMØ}f‚q»4‰K³ÂëŠöØ ï5ó»´(Ý/lú´nû]Sy·ª}¯iOÞR¸%ó».?vCyâ–&à‘Úÿ¡6¤m7²k;â¹:´]Ü&|¼Õ¡~´äwmÜùüˆ]í¸ý¹%Å©›ª3÷ÿà»øçû±}Þþ;„Á͸>lGÀml2Ð!R€~m4:&XùLý|K×÷f‹6 .°ÅØMm‹§wSfÒö'5¬!9µÍá»$ñí é9DìÂ3À¸’= åCœß·ÁêQðd¢!múä^ÎÜ~Îâ‹üÐ˼µWù¤ÜÕÙË{éójḌ;°Áê[gôH(Ï¥´nÈ~ Œ„ÕˆN†ß™Žº?qk(´u ôò³³õu®Â|3R¶É H¶ˆAóß8¦Â‚tΊqÁ>ñžW~û©Êž€óCa—Ã/ÌDß^Œ~„NœŒ{>Oîœæ?›Í}6]ú`ªêÖXÕÅ¡Êúîòò'e¹·KÄ×ËD—j-µÔ†s”†*Zc½©„Ú\ßP†¯-ÅW–$TªójrbjsÂj²C+³"ª3£ª2"+Ó#*ÒÂAå©aeâQN!eBPè%†ƒª2WføV¤û”§y—¥z§xŠ= Dž9|×¾Ûÿb¼z¼#-…bm"h‘ô(g+Æ…“àÆ'» ib¦g*× àŸ%ðÍe‰ý²“e&ûd¦x¥§x¥¥z¢½ZiH˜ ˆÅžp®L®+å@¢Ù(6ñ$4ÛO$ÛÉÖ ,òø³9¶¨ì_è,J:š!vÍ{f¥9gåÚæä9åçyû•—lÎ~ÌI©[޾¹Ay*eöKèãj]“gÔ—›Ü‡ÚrÇA*Á¤F8­äOÈX#*ö˜3ÝÖÝÝ”UÐa†t?Mð™%}™-Ø®/²Öì?¦ú³ÖQ—æÔex Mòènþ¹ ö ý¼èGÝ?ÿàÿ—ªí/Õ[Ÿ«6¿ÖlÿR·c€ÿ×*íç 5fðsÈ~«;ø~nž„ÇÀÀ~©Ú ø­bë/à¥ÚOy²wYºjŸ\&¬}êD$X:`ÎîR&^P§_'ßÒfu¡þì[òì{Æâg¢7\?r¾ V¾%Iж_þÒ×$é÷Tù±;òSâú.r xMk@.À“¼g.ƒ€}&‰S ü&–}€þÈPþ£`ç_ÅûÏßú=SùK¡ú[®âošÿZ¨ùƙҜ¹½æt^îÔ ·®UZŸÓØ×©íϯXV̘/ØTIÝ›U.—å.MKÖÅ£†)cF©‹ö¥—º‡s«Žuj¯WÓ‚UñŒIÞœYÔ¶Rå\§p|8íQ¶ž·+j³ ž Iãé2"YMÓÄ%jiÜuj´Šÿ25UÅÍ®3ò®Ç¹_9rü¡QÈSƒ°G¸ >ã„1KDãC&‰3&¢•£IO ¢òpŽÿDœq½‰ç„uÆ’c¾Ô±Lf_§°¿¨v½ºís}Ïûê–s üðR›2¹[ýºÇÅ5÷«KNMën‹î¥ ®ÅëÞ5kn³¶…s6… vÅóöÅ`cVƒæâ熜§8Ú3}Z· sÀ’7y´R!µ_ëî™[Û'®«Ó„=S…?ÓDvÂUÖ¦ }¤ ~¸~êú¬kìkýú±Ëºà>¤ šÐ6uDÇv\ïihŸ<Ñ>h‹0°Î‹„øŸ:z@ß¡í³F·iƒš„nàÿzX›ß©Šé‚\`‹2tÀAm‚¶¹*ΨZ0.p˜:¿)W0d´>­OFé‘‘ºAØŒº’:Ñ^u¬*Ó\, 4í‡ä%ºç%zdòÜSY®É ×$ª‹ìÀ$83œ˜qŽLÝ‘1 <3Ú™ëÊ%¸ (ÿÓ¹Þÿs’Žƒþ ¬߬TïŒ4¯tÒÒ½€ÿ)©HÉÉ^h.Hñ¿3íDe:éÀk,æ'Smÿ)VTêøsyöü‹’\’“f‹Ý€ÿÙNYyv¹ùÎù>%ÅÇÊ‹_Î%´³ò§¢.Éâïɨ÷!O\!MËã{”ä B/üþ%ä¾5jÿ c@.@;ïT¢i0°­./x‘´ð6eå }àÿ:Gqµ±—±ö"Íác59`¨¤3O¨GM˜ÑZÀ"˜Ælæ5çÔÿÃm*ÐZm‘òšÉQýVµ0ÿV»üÇô¾Lõ¶Dö¹Jó©R W€<`ÿ—Ú]d0þ^·÷íÜîgeÀË_«wà‹€|¯™'{•¶|˜¼ð6Sò>[ú&cíu::ƒ~—7¯A%LÓ{ôé}Êäæü[ÆÜKÒ$ÿeî=uþ3sùÞú¯Bàð9qå{²ô×TÙ¯érÐg€¿XŠ\ IúY€æÿ¿ ¤¿‰ä¿'ÊÞsV? à&d Ho˜‹ïØËíÿ5C×ßÓUËÖü£h÷¿•¿øWÅ‹–Â/á·bí_ Ôï¸S§o¯¸4É æß´oPÛÔnÚ×+mëfMŠg-J%®Þ厗Öê§Ì² EÓÖ¹+ÎÕ+NõKö¨U¦Ê³Yíyø¿hY¼|´|Ý¡VéÖ¨rê\>ѰBÈž‹å‹=ßñ?§&‰—#¨’8¢Œ…ÿZšø{Yá3ÿ†yÄ#}V±ƒæøçzA¸a3Ò¨%kähbŸ1É:{Ã62‚2œ‹gš‰3«Ó³›³Í•8*]Êåvµð³i+θehɱZsüòþÙ›;ǯ©½.B  t¿´ésCí}SísG{5Ü“ûÜSx¢:û@züÖ*äO žßŽéøÕwâû6ñÊðÇšÐÇ[áµAw7N^•ø]\t¿ =v]åOøPòXƒ¾׋69&ôcäÇŒ³€-â –=!ý¡`êr6¢ŽíVDvÈBÛaÏàS{h{1¬áŒiùjþ„B)Áä¦`^j8# ¨éXK¥‹:àŠÖˆ` fœÑ-£Ã OÅTq†µü1H%6E“›I3;©³Ûis€ýý¬%È ^䮾Ê]~™³t9¿“:­MBK`RZï¹k•Љñ!þÑbÂÃUZû2åÉ@ÂÅKéåÖìàhÙ(à?Ç<˜c H4 š¥š‡¦g‡˜FÇUë,˜-Ö‚kyw½ËûδNG<žŒ{:ÊyПsíiyÕÍš¤kçéWë㯋k=GºXC¯«f×Tókªâª+c«Jã« ‰çrIõÙ ç²#ªrBJsC ²ðiñÅɱåÉáâ³¥âÓ%ɧûÅIAÅÂ@À>¦~@>Ï¿ˆPÌÂT ÁTÊ ?—{²6çDu¶oU–Oe¦wyºgiª{q²kI²GA’;dY\çT¶£˜î ¢:)ö<‚+?Á•ïȳçÅÙðcAvü8G^¼‹€à!¤x'3|ÓØ~<¿,È7?Ù”—ⓓꓓîƒñ?#݃”T¤TWA²WdÏæ»£…`†0ŸD±¡PŽótLVL†›eÍçÚ%&Ú‹DŽb±³8Õ3=Õ5;Ý6?Ó¦ Ó©(Ó·0ïtaÙñ²r¿–¼ð6nò$ùÒRBç*q@FÞˆX'ô`’$tc‡rÊhƒ æÈ&jK0»8·)œÓ&ÎîˆÒVÓ×ta¿.òÏ\½ñ&Gö>È160lì^¬¯šf×êˆv{åÉÑÛbnº^ýc'/ZùÕ¼+Q½*½.–ÆßUk?ŸÛù¢ éçØjïo5»Ø£%`ÿüØÔ¤TjþV³õךß*´ßKU_K5M|-ÕÂÏÚOY;L[—«y.×rç•ÌéCÊ,è%y+ì¡c›óÏ[þ¸Œº½¥J?¦Iß§H°†Ÿ¿ç(ÿš¯ù#Wõ{žê·\åç4É{ñ2êë¨{÷{ºò·,ͯiêÉ{¡ôcÒÆ—$ þ×TÅGÁò·äµÿ”¯þ/%Û(~Ë“ý¥XýŸ+¶ÿYµûŠí¿«ÿY¤ýWžú;cjóÔ]¹s‹Ò¾Im{^eS¯¶oP96Ê­*,+dNÍ — *·KëÎU³…#úY¦Å«Ž «MË6õR‡F…k³ÊµYéÚ u¨^¶®X³«–»5)=ZÖ¼š—N”mDÌøó§ý9óA¬YÅ¿—Vòs7Â3Ô9ûôôßʲÿ~¾è@œóÐ6v—6m˜1f"ì6"uéG ’fÌE3æi“Æâ%Óä‹äJ ÎK„³HÆW:Ž;d/8i¼Îkë5v ¯}oïz]Û?~wÏïÁŽÇMûÖM»æ=·­ÇE™Ç•u¯›kuR¯K®g<Ò&¼#ýÉ3>™CÖ%ÓN5cÖ™½Æ¢iÛ’I›ò^£Ôö#Œ.#Ψ­xØR~kçÔßm°¹û…G«ÊëÚÖ±»»'mŸx´uü±öÔ}õñ;rŸŠã··CžîÆõlQñ¤šÜ »ß¡ ºÞWUøSuÔ3Å©»K—Ü/mœ¸­ðYþ{?a@չ߿C„`“0ä×@( ¡~¨WÃÔ®pv“=¶AìYîáÛU1[ =;ľbÏ.¥ï1¤ej!‚âO(y#rÞ°Œ?Úà ¯Ò{V(ÑÈ⟩â:ÔqšØHd”.à?hƒÑ%c÷ʸ}r^ÿ ó¹„ÙµÆèÞ`õ)yC` ;¢)tAªâ]šüCºôC:ÛîP¸º“´º¶¨J“ž/0ÎQÍSž.P;iÏèOçY]ÏB/·¸å—YqÿºÞÂ+®lkû¥=†Kpw î®”!EyQ…»$$!N‚‰A 8Á­Ð‚rÅãIGÚN÷9ݧûœWÆwï_p窓·Ï;¾;Æ3öØE%Ý#üžg®½ÖœÌobG#èºáy'‚)zA¹º9ºÁÙÇ‚ÉG³Ž†ä Íú:8óH((ã›ôoÐjê×þÉ_ú%|éó±(8ê—zÜ?åD¦äãþÚóÂHØzÔÄÁd½PÒ ôɹǂ)GCiÇÂÙ'¢¸º±úñ§õ‰Æ9­6Ü;.w=ëÆ^¢]{Xvº¹’zµ.ý|mÂÙª„ó•)çÊ’ÎE. «+ˆ«áÆT³£*™•´0ˆúåyHÅ”à¢Ü ¢¬€B²É¿„ä_JD"úƒJ§@Åx¿¢Lß Ÿ‚to¸¥ûgœ*ìgú—â0.p¯ãºÖæ»Ôpœ«ÙNàåt»RªM Å«Àh™æØ³`°b¼51΂kFŒ1‘¢‰Ñ¦Ä蓤8kR‚Mv²#%͉–áÌ 8³HNl²s~Ž=ˆ“kügQ´üGØgÐ0ÿ¡ È¡Ús- 9æéíSàTÓÄdc ?(%Å—f„K3HÇf¤â3‰Dc þ¹¹¹4[:ÕŠM;™Ï4.`š1йE%®eå®AòPlÝlLÇJâ#AâðFx?`ÿÓ86¤Ä­”aQ: Â=–dLÊðÓà ;oY»ðߥ¯À=\ÿØR6“ñc̦¢qÀX—Nl ¶òƒø`GtÑ&Ï‚-ôl·Rþ²\ú¢Lò²B†­ç`üÇžÿ¢¨_ƒJ`>èÓ"χ29ÿ}©äxGz ü‚·…j zú¼O…¿üMÏiB aI”4!O9L]8H™ßOž;LBø?K…ˆ¾ˆgrPª•»ö&oãCø-Søš¾ xÿŽ%Äô—B9ðàzšµïùKòŽøÿž.~K#þV¿ÍÙ½¥ bá{†è—BÅßË4¯ØþK‰ìçRùß*Tpócè'žè—"é/Lá+ܤâT·Ð±IluYbv^jÚ 0?¯ÚŸ<»jXüG0ÍÏK¬/ÿ Íš<Âå›Ô®™ŸEOEMÏnZœ—Ø\˜Ö¯U®Wü×OÖÿ…ÖçÖí.ó*çÜh®™|ß\¾_ÖN:ï9¥DIå»å­{²$¡”g¹ô%%9•­ðó_0øº¼Éc”Þ¯âz?ý:a^/w^—Žöù¥,Ïë=’T¦ãý™.EçHÅ—¦ãf,¾M©ÜéœÒò¬Ì¤aßþƶÃõ×Ö]×N]«Æê:ð_~ò¬ÂîÒ¦ÍUàÿ¦Ãù«+Çk¤í„¬§xæº7{Öº|Ò¸pÚ”½hQ4eX4eP2¦Çøßû"±ï~H7{\Ÿ5eT¼`V³iYãÙ®ñì;4¡^@Ö—„vWÁTn;^w·=ïÉÝÛäíb·;DzQ`·4²g'yd;iXýPþ@ùPÑ+ ¾# ½ ¬V‡<ì/;5-Ú_Yrº¶áÑ& ¸+ 푇õª£1þóÑ™ÇÄQy*ÀÀäI#òTÔÉG‰×dN*’GÄ1ýáw׃»6Bº·ÂïIczä‰ýÚi_Ú.7i(ÌKˆãbÒ¸0 ×´å¸+ÑÚ'ÂÑw×#º×B;W"»—#ºø‘]KÑÝ«ñ÷7ÓŠðƒ2ò¨„<üŸ»³˜po%¥w9¹~\Fž¦ÏÀo¨&kî w´KYÚ¦ñ·™Ë«û|5cJLdôo¤?ZN{8Ÿ|w2®k,¶½Ãût½Y^‰>.ÿDõhíD]?,W78çDPÖqu(E7D>L8 Á‚aÏ|S¿>•ø•/(ákï¤#¾àIÇNaJ;ˆ;„;ŒÓ L?÷ pÂñ d'Â(ǨÇÃiÇ"˜Ç"YÇ£Jtk 3Î’.æ\³â´úVôg]êáÕÝ*¦]«Â_¬Á5VâΕ§Õ$¡ï¼È*NT%;²‚^F -£—äg‚ ²xYþÿÒ©BlUGK{ ûØ=L`Àÿ¢t?¸À'#þ×óÜþlP€”Qí‹(v¼,[­XQÓ-rSÍ‘$Z“,²âÌÉq¦ŸDŠ7‡×³’ìrRòpŽXøç9dGN¶’–ÿÿY GæŸü/ ¢% ›œ\+r–9:€Î˜¤¦§¤aðògfù xÑ ƒ?…b™—gEaX1hÖ†}²0ߢˆãPÂs/.õ(-sk, l%§¤VÌâÚÖ2°á_ëÑ×¢zá*ˆôi.”â´Ç²Œ)9aªy~'—Rg-ìÑ×0#Àø@[Ù§.ïjg¸ÃÍ!À_ÛQM;Ãwëe¾Ûö‰Äݶý`'Á Pf­ÿ1΃ ꃰ¨r~­úm­úÃé÷õÛïê4ð%öœ÷Ç õO%¨Qv4 {Ê€-=¡9´õí,4•l—´´OZÙÇóUIÓòøÉý´Å'i‹˜€àæ)náaåMÖú{ÊÖ{ìVÞÆ[úÖ÷éw\Ù{Žäçùù,ù` ß17ßÐP;¸7T¼ççBÕù2à?è-Uø"kí%qå]î&Àÿ;ºð—BÕï•»ÔüV³ ú{ýîõ{¿×ìüV¡ú­Lù[±ü—|ÑAâ˜"èÀJâxSjsUjqAi~QeyAj~nÓì $ÿãÚ-ËF¡Õ±Í%Èù3ÇyþgõÊ6,ÏòMê êà»ÛËÀÿ£ê%½Ò5“êMózþ­…¶Ö­n,ÚÖ™‘&H¢ bip‰"ªPÃq–Ù|öŠcž2†ý†zæùÊ”ø¿aX:«G9Ž>7þuâ’eQŸù‰ÿ}ÇR*>wÊýÌ OçhégF£ìE»²MÛ:™Å9…Ù9à¿Æé†ÂñÆŽ[§Ú¡uϱUfz^brZiE{h·YìvuݶIàt‰ïBûk®þGéù Ʋcù”iþ²]á²Má¤÷±^þ´iþˆ~Nï78¨úŽÆ Ù†¼ÇúE|‹Óbç¦m¯Û TPX^@}A-/InÿA*Ï®S÷U÷å÷ÅA÷Ö¼ÛW½Ú¤÷v£÷b†vã†Õ1ò¨~%JòCÒ˜~°ExØÄªW ßåæ’ó5V±ÿyØCµv;4¢O3€š%ƒ$ލP³AYÌØ*yt7±ú¹MíEI6¢Q÷þÍèÂXlN":) O–ãF™crü8¤w%yRХܷwo1ªk>¢c.¨•Þ‰=XŽê^Џ½w )aHBÖçïMÆtNÅvÍ'õ,ÂϦô­ãÀS$ä1IΘŒ:¡¤Ïªé ‡œõç¼ù«OX ;´yÎÔs‰æ’ïG5ßr+«2&ê&ñ â9±4½pŠn(G7”|,$ëx(°®D´4F8 Â\@»ùçãsÌ¿ñHÐ*ñ¨Ò1¨‚RuƒÓôBRu¡.H;.„?B<𥑧Å4ˆåÆs“y1¥&ÉÕ&éçLr.Z²ÎZÓî$Ö pη²ó› sÎfÔ¤ÔóÒ긩Õì¤*v|)-¬”ŠÒ~aN ¤} =èÊ'!q ¾èK¼o!þcÎÿ3ó? {ƒÿŸ-üÿ—¸Ôæ,ÐBm žsˆÖôL«<í¹0J’un’…¶Yœ™V¨YDV¢ev2Úö™‹sÐ.þ8°ˆŽl’—lÏ&[³³mع¶,Š‹jϤ;ü›ÿ©v´<Û<ŠMnŽUv–e&Ñ23Ó<=Ý ‡3¥ãŒ3Ò0øñ&d¢Y6Ù,;û$$ÿ¼< *Õ2iÁdÚrYöù6E<«Ò‡ÒB·’¯’·3E¾-´„!Jé<õÖrN0 ÑE’<‚Æ'Á4e5J ¥Ž+ð3JÂ,¸€4s säjÌ öòðw¨ü]Ú2¶íÛÒƒmõÇöü }þÅ·ôò6?õóì["}W&_®Àz;¼.‘`ëÔÅ™g®º±e§*•UŠrupص|òxݶ^yžvíuFç²SÝÂlQÙ¬sÚ(kÊ7þuò¢nÞŠoú(ø¿r‚:pWÿ¥ís#ÆgºE:úCÖ¬%çše«š­“ r³Æ]Û¦mç›2û&µ[‡Ê©mǹMiu ™í±ÝMMó¦Sãºý5¾uƒÐ·ì·üËï²jø®ôKžÔ«^P7w’±dY üGÕg?ø‚pï3ÂРƸ~þcý‚“Ê«¹{óî©N™Û-¡ã Û«KfV,.‹Ze®·Q!üîQ„?Ô‹Cî¯{¶myÝÖõ(ï«Ãûv€ä)cmEâ°4n@q_Õ#‹~¨ˆ~$ ï]ñn[t½)ð¾- ¸§Œwx$ { ŒÂZƒÊ‡•)¨;(z=R‚¡Ä hp·‰Ó;9óš¬YiÆèfbßjÔ=~x÷ZP·0¢;5¦HR¤¨2ÇQ# Ì1p9ñ±”ôXDYË@ù|)¥g1´s>¸m!¤ª¨ ຄvËß^Šîe €Ÿ÷ù_âfúdú|Zçë'}âÿŸáÿç ¡Èt¦\À­žçŠY@ í*ͳ+ε+ȶã’mÙF†eÎ’šj•—bII¶ÈMBÍ‚²“Ís’-³S¬sÒP«Jº=-Ó‘AþÛsˆ¶¼ö4Ñ’•eÉεfåÙ°¨¶LºÓ‰îÀ Ùÿ©¹¶”lë²%‰dI ˜gfšóAZøùIS2Ñ$‹dš“u2'Ç,7÷$Æ:ˌŲËg»ðJŠ¬Ê‹í*ŠÿKKÝëJ¼›8=lÆD~ãýö&ùjB’:†ºjw„ ƒ›q6âúEð ’1ð‡B@š>©$Íü5Ù‹PÐPÛL,öïÑWž°7ž † ‚'ùh3?ÖÏáIÁí-a ;Ï‹EÏŠþB@ýûJåûr¤·¥òweŠï*Õ ªï«4@~0Ðw•Ø“\¼ó-C­Ðé`¨#8ÂgØ6ž¬EU6—º¾Oìå­mg¯jÈËÂ’&cá¸rˆ_>H[ØI˜ÞO˜y–¼ø*…ÿ:uòù Â2è9qù%yqÌÙ€<ÿв±Èÿ!_ú=OþS±âÇbÔÿŸ d¸âoY›€ý电ç”÷Ù_Š·¿ç)¿ã*~ÈW¼c_çmÀ'ÀçüÀØú…+øÿQµû{Ýþ/öÿyùÅ/g÷þR¿ ðŸgŸü^¡~›»²;$ ¸«ì‘ywË=:”.íÀ±Å©Å%¡ùùeƒÚU“Ó[6…v—Ev—V †5³ÇËgO”üWOž^2®ø¯™ŸE-q,ήšÖBþ_7­Û²h@Gí.#øÛ]X6O™” røöTs‘Ô»FáW«ô«Õxž–ÙÕ)œÏ©ý/Ä´¼J¾/pk\þ†·eR5§ËžÔ#?ÖKý2yI*0-š9–·t”ºr‚6tßð•ó3cæçz\lY‚SNç…Ò“*ë+;.Í*çfµ[»Æ½sÛ¥ Ê©õ%˜šC«È®eÃá܆ÃÕ5Ç«[žõîºwÍ¥födévà%µý¬ uݦ|δxÚ¤hÆ´zÎìü¨aþƒ/²z¾Ì8J¿•aÑüɪM§‹ [Û¾Û¾ÝR—¶ ›&àÿŠÕÕ »j÷Nà¿2è<¬W;¨‰P…ô‚=ÚÁà8àzG;ÒíÛ‡ó hä¤teÒÈnʸ4âáªOûŠgëºO‡(ðž4¤GÚ«ˆèWÆ ^@Š˜aYʨ8n@«­FåQd‘}Àø()ÚA=¡ÎžÕäÌ)‰S¤ÁÕèžÍ°û‚Ð{!wáFÓ«HT¥€  ~é#ÿ·ð#[¤`²€<²B\Ox¸yg.¤m6¸ŒÊùÌ–c»7ÓŠIÃâܱ5Âà<®w”Þ>r{"áöDR×LJ÷"®{%óÞZF¯ˆðX˜1!Êœ”“§Õ”i5uf‡±ˆ¶êqVvX|iîø¾÷qBK«GYµ)±Ä µÐ0•¥GÓ¢êGçDå„g„“õB1þc€¹þXpæñ`ó ôÁà©GÀ¿öKøÊø)®GOÅóO8J†Z@/4C/ŒdC1I`œLaÄå›§;Êȶ9ÕvÔjj ­Á™Ù_;SÜÞÇk¼Éà6äá+s‹r"xYaE¹‘YA .)€GôçNåãý8™¾˜Ø>˜ò3|yé¾…é~HÿÎÿðïðÿ3ÿÏ»kå .U@ Ç U '¬(Îu(ȶÏ'Ù±ðÖÌL+Î õ Mµ jûÅQÒ¬rÓ¬sÓmò2°3_üÁ/X,œ3͘™aÌ&šq²-ò)ÚítÖʹc±  ° `æÙÑsm󲬲È$âIÞ„|´±ŸD0þüMs³Í(9')s€?fEg›ÿ¹Wϱ¸Øº¢Ä¾²Ø½¬Ä»¬Ì£¦Üó/ …“ò Ÿ7Sp]Èè&?Æˆá ØmÅ€l%‹SÆä铚4¿KY†,WMö<ÖÒmï¡ò÷èËPf>CÍö‡<ÁÓBÀ¾àIÑÖ m3ŸWåhUÿu¥üU… n>nÝ,ÖvlÖvfÀús‚üP½ ¨k@»@‹¥ßjÛò¼fo‚^±¯óÅ€ýæÆ.MÛ̹îws í¯ì–A»Äå]ÿ€¼ú"Gð2[ð ¿ü?HAÏy_âøo ëßg _kçöùŸcðhkŸó¾Ë—|àɾ/TüP$ù?ð$ï¹âwœ­\Ñû|ð=  1øÿX¨þ¡@üË_€¢à-{ë-CðW‚­öCÎÿǹ'œò÷‹Oÿváɯ‡¿?üãìᯕÛoóV÷G5ah-ê ísWåÖ)u¸%²jY^Ù2¿´fܰlt’¿Ú£EéÖ °r²aòXéÄ‘²êu‹¾IíŒnß ¢qÃòìÆÉ3ë'ëÁà*0o@‹Ev×ÄM[¶×Öl® êÑçœišèR…±Ô«\ásZê]§ò©Ûö:-±©R8ŸWúÜØ ¹ý"þþ–kãêÑb‘iÝ’~ÁøqÒè‘ä±/S—õèkF¼¹£´…£ÔU]æÈ Ò…¯üY:¦ìÏõ9:'XÓ„MB¯«`Ur«+j›«|à¿Æ³c×§[íÖºçÞ®t¸!²¸¦tl“9t/l:ݹ·¯;_\v®Z´¯Y²¹°bsYètÈ¿lQ¼bQÉ·¬ž?Y3crvÞüƼuõ°>÷ájÿ7ÔÁãôq.ØÙ‚yõªÍ9…WÛ^Àým¿{ Ï®-Ç[+VW@çVïÝýÐþÝÈlÁ|v;ò‘èT·,èþVàuÿ.Itßnb/c öÒn×D-}RFÔPÀ¿üˆÞÍ »ë¾k>«^í~]ÒÐ^UÔ&fD?¦Ä=†¼$…0Ÿ8¢NUÆü¡ŽÇÁ¯Ò#Iʰ?¹—=¿›5§&L)2ƒ­@ø„?X ê^ìZ»#Œî‘$ôcËA’ônp#}P@Ú ­d>d m¤ ¬'õñcî̵Œù\÷¾6yª ,€Ù°žÚ+"m’‡ÖÖ‰«Y÷–ð÷æq÷æÒîϧܛOîžï˜éXL¸ÇOêå§Ÿ±Šúj2Wÿ‹„(Û—ˆÑÞ2  íÛ/—ƒ°ÍüÈÐy^ÕÛrêüÆ0×Р^­@€r~1êÿ†žäo¡GÉyËO)˯hhæ;2?”;yk»ôÖÖ{k›±q€_ÙËàƒàæ aõ)qíeöæ·y¢—¤õ'üý´…§ü—ĵ·9[ßQ%ßç‰^g¯¾‚´¯ üÀó·,Ñ[š ó]‘âC¡ü»"Ù÷ÅèŠÈŸ/BW®ð5kã-G÷ß²E?©«~òkåÓïxê·é·l ü8xÇ…²¿”(~*–ÿµRäÿ{ýîï ÿuùå6½þÇ•?ŸÛÿýÒ³ßÎ=ý¹Bý"—¯ŠR…=D#ÈzÔž÷v¼î«]»¥ö-›BËkë¦|ã³ë–„ŽMjïÛ*¯vÝ•9ƒÚ‰c峺ÕÈüóÕsÕ›¶bÇË›ÖçÁgÀ0ø m®H¯Kš¶×®æ  ÷“j¶ÃËw‚êwƒ.(|¤žµÀÿM˱cƒÌã†&¸óy|ϺKÃÚ±‘q :\|"gô›´‰o2WôX+ú¼…㌥ãÌ5î„^ƒ¹:æÜ¯LØ:º·ŒÓ…1MRÿ‘ý5•ýûëJûkJ§›J·6ç;ÞÞ;®í2›f…]›Ê¾S`ß„Fdº´£]—>7.×çN^]·i]·¾¶ny~Ëöü‡¯Y7ò-ÏΚœŸ;y}ɶaÖ¢ö±Iñ°>gàcX—9¥YÙ‚Eýºý™gûö©;þ=*Ÿ»b·6ãÍ5›&¡S‹Ú÷ÞAØÀAÔð“„ñƒ¤ÇªøáäquÂjipGþPÕè>$Ìíç,«wɳÀmÔ–?yD‘ˆ.‰ìÞå{·¯zßÞ ¸+ y¨ˆØÿ8 „µë×–ÏÃ1êÛ+ŠîS&¡™/`Êô uæ”¶ÃÿcøXaLßJÈÅÀöåÎõˆ»Ñ$)ƒPl¥ Rm¦mf®¥õ­ã‡ØÚÝA–ãîÍGtLœº1äqaÔûòtàÍ…°¶¥èε¤û›éýàòœq©5³‡»¿”ö€?•ÔÏOèYŒ»;wŒ`:¡k"¡{*ñþ®_@e É)s’ìI9eFAçŽlå ΦuÞñ?}ΆQaF.0Hã&Ó b  E懣ýÈ\½P–n8ˆ¬NÒ a€ª€ã…;Œ\@«¤ch Hþþ±GN% LÓ 'Çæš%2,p«Ì|k|‘)‰kŒgšâY–D¦E&Ï–\éDo8;HèxHnn'ÖœK'W¤GO} ³|¹$ÿA˜ Ò|>Áÿ“”àË=ʼΗz‚œ.p9ïRÏq®a:Vѵ§ƒ‹rì Èv\¢M>Á–‹·ågZ"€roK'Øö‘HvØ|7ÕàŸs$/ü jô×ì¤ãÜ ÃB’iaŽYÕœG·ÈgZ£FmlÛY€ƒbK˱ÎÉ: ´æùÉ™FYxãl‚I.‰üÏ1øƒ¨y'µÝþ­˜sÇŽËu*(v*)u¬*w©+ó¬,u¯®ñªªô8SéÓXî¡ ô^1k½ C’9 ä×à§áª$y¿(yX’:áàÿiñÈ¿³WÞÀmÐ}YC]ø?/Øz^,zR° ±,àÓ)ÝwÕ*þKíy^¬±3›ÉŽíz–¿ ɘÿ¡B…%¬“êÁDmùÑØ_Ê ímÓ®öR7ö©ë{Àê:H•Í—æ4ñÓ‡iK¯ˆ¯I‚—„uÈüö÷Ò÷Òç2!ç¿¥‹~ä*ß3%OÉ+Ø£Ûw !äö÷\)`ô®Pþ¡XùV;ÿå}±ìC¡ô-W‚*àû"é%¨ø®@úsÙö/å{ߪ>pUßr䯘¢·ù²ŸÊ4?—©*Uü\®úµZó׆?.>ùýÂ!èËOÿ¸üøÿKÏkØÿP"{Fáï@ —Fî…=v=ñëS¹t‰m[äŽmJçÛË«|ãóë–—¤®-2©û-‰[ó²Åù±ce³ú5«æçEv—WO6,× ¬/¨=›•î7¶ì. Àòì¦ÅY‘õE‰}“ÔÁ_ìÔ²eö#cŠ2æÌ^Òiyp©* FåVèV»j[ªô¨ß²©º\yÝT…t¿Hè[w9'ЯØ2¨Y3(›Ñ¥ɘþ†¸¦Ç/颮ÎFE3Œæ¯#‹t¬ ¿6çèè;±{UÙ-qmQ;5kì›d6—·]Û%Ž7U^û~Ýû>]ûžwÔŽrë6•]»Ä¥cÓ±}Ë©EäqkÃ岨³mË¥{Õ²eùäM«[+¦×7,n®Z]Z±>»dy~ÞâÊ’Íù%Û³³Õ¦EÀÿþãyÓæ%|ûzð…9‹3kŽM ß»`£»Á};A½2ï®M—ÖU›¦M‡f•÷½À‡‡±£û)Õɇ¤yHì›!÷ÁÄa½¢ð^eÜÐ^Öœ†0üBYÚ!Í€ éx ƒÜcy°0¼uA º·áwGè_žùÂëà€wyúcqʈ(=ÞU§CYo〕ÅaO  ²Pf.JX¸¿Ü1Ø×õ˜¨¥l”á*Âc5qBŒ^ËZI’/&?XJ¼HÑ1Ü2èuqÈûÒ¸ïÕÙà[óí ‘·×ï+I£``k¸ËÉ=ÿ•ÄG ÕäÞå”®ù”öùÔîÙÔS‰=ã±Ýàüô;ëøQaÖc­Æ”ŒisJ50Ÿ~÷¶_ýû|°€"“ÌÓT Ú$†jN7Œ¡Drl­À²ô#IúÝ0<:5J@v€”©œ¡Aê±ÀäãI'‘  Ä”|,$íxhƉp"|¦i"Ó2­ÂœTa›Sd—ͲÅ3¬qL«Ž¾ØŠÒàZr'¥©—~í*‘Q‹.#•eððˆÿDÄ$-ÿAù™þŸ8éHÿóS¼>1ÿÏ*øw ÀÈéb¥×… OÌÀλ7ðÜÀêØ`Ε4‡r * ³Q›PPÉŠG° àà­ "`lD&É–N²a‘í8ÚƒÃ,œ=QŸ}„ö%=ô3ZØç¬¨¯óàô ˆEÓB†yۚͲd²¬˜Lk&Ó–N·¥R¬(9VòÉ\’0ÈàO4ÂÈŸ—mFÍ1¥SN‚þ4ª9ƒnÁbZås­x\ûÂBç¢R—’r—ªr·º2÷Ú ·ª×êÓµ> µÞÕ§ÚJ2'h¶2†5Älä¨0iþ1KRÑh6ÿ ü ¶Hµ€=ùUç.i(ü=æ*jõÀ\ÝÏß8Юù Ÿ‚M¬/@U@‰›Ãòq{v, Kû ¸ àÃý žëçyÀlSWvhPV¬07 êk1¯Òן06hšl¾Š¼¸“½¼—µªÎXPâæ4 Ï3Vž¤-¦.>Å-â÷SçQæÇ/â—ûò¥ß2…Ûß°„ÏòÖ²ùo[ù?ðd?”¨¾/U_¦ü¾\õ¾Dþm¡ä Oô®HŠU?–*©Üþ¾XöK¥æoÕ»?•©¾/V~_¤}(P¾aK¾+Tý\±ós…æÇ õßêÐjè×+¿_{þëå'¿_}öÏ«Ïü ¿ŸÙÿ¡D~5¿6ñ7}7ª~¨ö©uÛý®Â©Cîx\@æÐºaymÍê* [éÕ¡òµnØ][8Ù0mPÃ7m;4A¶_6iX29#²¿²íÕö‘ÿÖç„¶V"Û«…k«Ìµà/qm›4/5Ï—G4j¢Ï©‚ª·ÏhüÏ«ü.+¼.)Ü¥gîWe^·Ô¡wžÅ>\wnèU‰ŒêÖ +'Žæ }›úš´¦ËÙ4)™?Á^<ÎÞ0,Y0ä´~]¡cWøÅI®Žqåg^+‘çvâï©ýºŽ7¶oBþ?ðêV¸´ÿïìùvíyÜÙs½¯¶ïTÛßVzÞ;ß¹¶Šõvú$XÃi\jmÒŒ2s-æ§¢q’¨þõÀ;«Þk^ß;PáÑ. ´q~ Þ)A#záÍRT5 ÑHP\È¢Éc¡Ä@5Eúø§–ÑrÜØfbßF|ïbx×rÄÕ¨{ 0qâ#%nt‡0)ÊÛÀbÏ‚ÿóqw¦£:¦ÂÛ§Â[Q37F0‚Iÿë3Á7Â[6îqCªÜ©­ŒGðN~RïRÂÃÅ„ë™W3î¬î­ûVñC‹©3 =Ó‰s©í‹i}üôG 5 8çñVöˆ€<´™;ü8±½ãÔé+F™ ±È4g’Ä1Žg™ÄüÁF±4#mQ` þgDõÂÿ,Œÿ˜¤þ§hþ&é§è‡ÿŽ$ŸM=.J× gèE°Lâ™'“XÖ)…Nøb'B±5¾Ì*·ÐœÂ<‰¯ cÜb] ˈa%ÄàbBHAVH!)ƒ?&ŒÿùÚBYîò?ð®™ÿ¯½uÁŸø_œ†T”êþ²€?ó¿žã‚••T'°€’l{¬Sh1Ùºh O´Ê'XsˆÖøYd€¿ 'ËõÊ0c&ÒcÑ¿¦ÎÔaé0C?çD}ÉKø¦w¢dXkRÀ4ç0-˜, ÛŠÁ²¦Ó­ÑfÎ Œÿ9DS°¸RH&Ô,3ZöIzŽŸ‘gΤZ V K6 U\žma}q‘#À¿¬Ò£ºÜët…g]•kMKM­g}o}½{Cû­ò„Qú¨4±&? 1n ®Ÿ2¿7!J—gNcÏ|Q«·œeŠº¼ËÚÀží>Aá_ Àòc‹ÿX‹þOÝÞIáà ÷o Ä/óµ‡Å8hÂï>¶€Àgn<álíÒ×ä@HÆšš¶Š&oyssŸ.€´ðWçé3šÌÅCâÊsÂê³Ìe`>Â~ê`ÿ@»Ôóœ¸ü"kíU΄|´,Ͻåßp¶^0Ö±SÀß²· ÞcxnÿP®Âº}(UÀ_ïUþX”ð†JðžŸ+ÔZiþR®þ±T –ðÇ•W¢ïø¹jïouû?×îüµ~çOÿϵ7¿5?ÿíÆ‹¿^>ü£éÅ]/þR£yÏ=ÍZ8ÀÏ>MŸ9Lz¼þh;¨/°ûTïŽëà¿Ì¡]êØ.´½¹fu ²«Ò«kÒ¦o—Ð¥yɼqÖøÌÒÉóB»&¹KËŠéùEãTØ_;7I]oÈ]›à~Óæ¢Àò"¼Gæ| jþ›Å.­¦…ƒFœuÏEÐÅýKÏîî\Uz_Ñø6+Ý®ŠmÏI¯H=oì†Ý{×·é| ø¿©ù¿j^3q,kæ›ìåcûÀÿÙcìUýÒEÃÂŽ¯+ux:'¹Ÿ›•ê8.FÔí¥>ÔÝW{´ízÜÚq½¥vnÕxtÉÝ[vü:ýïî{ßâùpÏåžÒ¶EáÞB}›]›¶Ü® =Z%žJŸîM‡ëh¤‹Õµuëkk¶VíέÙ_„x¿`…ŽèÎYÖÏY×ÎZW æ÷¥ésç¬ëùöV®.Û7­;7Ë|»wBÿUa}²€ûb¯ÎMÇ[àbMXÿn<¾›9}@œÃ,ø,‹ìWE @ ~¤NßÃOCþW¦Ôä™=Ê¢Pœ<´•ðb<|+¸gͧ ,`Ý»k+à.8¼ˆûfL@¼×nûDó¼ÐPà„!ø@(à“јԸGèѰv˜ðƒ$LAÚ¥ ­Çõ€ ,¢=ÿw1=[q…ñ}RüˆŒ<ÚÊä'=˜‹íž‰îœŠémð½Üçuá‘×…~÷³Ã>çÃnñ£ï­'õŠ #+¸¾ñ¨Ö±èæ™Ôö…ÌŽB÷fVZóÏž‘f6cË™=‹™wpý‹é–2ûÿëÄ¡U|??½w%³ïHºÝÐÐ`C/1Ê(2J)0IÊ7ŽÏ7IøcUäÿýHàŽV`dƒHLP €Àðú!xÃPN?íÿÔIÖ J<”¬×øc Çá®IǃRtÃpGÜ º~dýàlƒpºq,˜Ï$¥Ä_î˜ÃqHçú§V§gÖd'—“£K%™‘Xøçþ‹üŸÄN÷Ö€þÌLÿüÇôgø¦x_ªòþÄÿ ¥îÀÿ³…®g¸®ÀÿZ–S5à , "ϱ,×¾$Û\ 4ÛYɪdƒ‘ù³­¹YV‚3Õ€wœñM^ÈyŸ1üttØÁ:œˆ/òã¾â¥ç‘ô¸6Í”É0‡€Á°þS©Öy¹–ÀÌ(Zý þæ¬<‹¢Y°é–ùLkÛ¶€cWXàXZäX^b_^áRQíU]åÓPå}ºÆõL½[}½÷éz¿3 g\nVG1k—q} â´’4£"ÏÊñ“ÀÀþVò(ðËÿJÒ‚2kI•ÍWæ,¨Ù›ûÀp.$ÿ­§…BdÚq½hÃ'ÚŸƒæ¹?Ó~Î|œùE_ÅÂüS&|¹‰ö‘RW  çÑ™2ÚªšÂW°7”¬ K°ËÙ:䊟°„»”U~n—Ìß!.ngÎï¥Ï?Éà¿Ä£–˨3súü~Æè sñiåE€mÅA§·˜´n_ ù6_¨m$xÃCó¿¾+U€0ìcG’þÿQw¸")š&£-õüŸ´!þ ÈÿïxÒoyÒPÀ·ª¶ÿVð뙃¿ž9øýÂÓÿnzúëÍ´¼ù¯Ö·ÿOëwÿyõÕÏÕêw\á‹\þaÆÌ³ŒÙ')“»Q#šG»Ávü*½ïAìW:wü7­?Â_áÕ½سð@áݵéÔÌ·¸ðß´G`¼/㛞۲½¶åpmÃö¢ÄåºÂãÖ–í%ía¨+"ûë*·ÿ"ç‘ë­-ç›3Æhµ\àÖ¨ò»vàßtè{yÛã‚Ô傯ë–Êù†Ôö¢ÒµIéÓ|yïyTÏŠÕmÓ¹º ƒêEý‚i]ÊÜѼ•ãàÿ¢oþ8wU¿|Ù¨äþ\­Ž+WÇœ÷•9Wçäx@á3âàAì#µ_'Ô#{žm ç–¯;2·[*¯V-ÿ{<ûÀT­RÇ¥‡ö”®û-©w›È³ ,@îÛ&r»¶åtyÃþÀ_Ëÿ ËvW–m›η Øœ[´=;cYÍw8=e^ÞsŒ1b\6owvÝíÆšëÍe§ën-2ÿ»;áýêèAMô ¸€Øïκó-ô ®­PìÅî¥Nü÷Hsû„Y(ÄÔ #ÊH4Ìâº$ºO?^ºÎìPæ”äiQÚˆ ¾_œ8¤I}¼4&x$8uWàÕ°áÛ) ¼‡ºÃ%¨’G•¸q¨PÛŸ”aaâ€0þ‘(º_ñY@tŸL»ùs´D˜Rk²¦¥£‚¤þµØKÝ !Ka]PˆRú•øQù±Œ€:9¬¥õ-$ÝŸ‰ëžˆîxÙ:rãQÀÕ>Ÿ‹÷ÝN?p?3ìwi>êöLXûäy|ÿpì¾ØsƒÉçGÒ.ÎÛ׈%äÇð«­Ê™WäN‹rÇ6²׳GWÉÃkZ-ú—3bZHïYÄ÷L¤vv9gUÀG àš&²â ¢³M&qTã8šI|žI\®Q (Ç8&Ûè씩J7Ë0 ‡kš>R*܆'†%„&èÇéÅêbJ8ᚢë“~uœÎý&”öMëxÇ(ŽgŸTˆ+OL+#&”çÄBy¸à2|,¶òSð'aU'ãfØú÷iµÇïOÒ¾¢å?& ûù ’½@—«}>YÀÅ2ÆsEnPœ€å\Çtªa:ƒ”çÙ”æØ•åØ”fÛgÙgÙ (Ðʦ0Ûª€d–ŸaÄJ:Áˆþ†ö-ðsÚ©Ïé¾:˜˜þÿ²€„¯9éÇ9$}v®jÚÃ°ÄøOËÃøo¤…ù$-Ûàÿ‰ÿlª%›fÁÑòÁ?ß¾¨Ð©¼È¡ªÌ±ªÊ¥ªÚ»¶ÆïLϹZ÷óg<Ïñ;&èÜyï³çÜšëb†ókVð½bü„œ0 ÑÂù°%nÐ<ÄouÖÒNz»ÇX‡Äþ4_ˆ®ÿÅ…ú9³´MžY›OØ8þ^ÞÊ.e®´5À>ö%ö@>PA^ÄœE“»²C[Wð¶ù›jÎæ6ÚÒ/8È[?È^Ù#.=!-£;äÕçxþ“ttnëYúâËŒ¥òòÓ´'ó%u=)¦ °ý<ÿwù"À8¤ý×\á»"É÷eŠ÷ÚÕ§oKdè$[>õŠ+ ÀÂÿÛÙ{í³€ïŠ€z€?~\ëðŠ›ÕÁO•ø‘¿TïùÿÖpøkãá\{õß7^ÿ~õٯןÿWëûÿÓöÝ6½þKÍöøSr—_’—^‘—^¤ÏïÅïD í„ îõ«}(¼î"þ»v‰í[W-ÑöE€ÿNÐCÒï®Ð¥E`cÃîºÀ­çÛ—LÎòMV×$Ž7…ŽM›öW!ÿK]›×¬/nÚ\ÚÞ9µª½ºžR·v‰{ë²õ¥ÉãÜ«z©Û5µçÍ=Ϧ=׋j—F…ë¥ëu…ã ¹ÝÕmÏf•ïõ§‘]!óF•[ÆubãÓëúÕ“ß0G¾$MÉ]Ó-¯/mÕ¬W=+ ýï¯y´­º· üº$¡ä1TÚ]ýð~i iÚ(X€0 M<†=Ø »/Žz(ŽéÆôAÅ‚UÜ£ð©ÉS*Ò¤0up)êîlhh9üözìar¯8}j qt3s²ý\â½é¸îÇÑm#áÍ‚®õø\¸çÙpßëì`À…^ïs#¡·¦â;§ÞêM¬kÊïJ*ëÃŒk[Éx(&Œ¡SYãbʸˆ>!fLnQÑ„>¹EäŒlæŽnd/e>œÏ¸?~g4¹µ3¸¾ÁžQjšQjŠcÅ# ˜&2Œãþ`@~°Šql® ÜüÒ(†lM4Š$F¢ðÆQ†8½œA$Dýýð$ýðý0PœAH¬~pŒ^PŒ‘O‚þ©Ôcä£áÌñÅF)UV¸*×´º0\mJ*¿€R”RD)—Â!ÿƒ ÿ$Ì€ÿ˜ ÅíþÏÿÿµJñòsS¼@€}L@~^’'èJï' ¸Tîy¡Ôø®À½ëzšíü¯e8ÖÐЃ°Š-æX-ð/Ù–äXg[M¸8]NÂ1fä׌à/éþ_Ð|?£yNóÑaú|ÆòÕaè°‚?ãD}ÉJüš…;Æ 0óN²h– š5‹jË XÓsmò²,©dË<’ˆšeügf›ƒØ¹–-ÿþ .ÓºcWÌu€ð_QìX[æT[åZ]ãUW{êl_c½ç…³Þ—ü¯œ ¾Øèwî¼ç­ú¸^Ý*¹W˜1.!LB NG_¬Ýö£ê…Æ{)3§Ád3òÌY%a^“ÍßþçÀ!É žr¶ž°7‘À´÷hU‡º `‡’a7‡ÿ”¾/jw.ÂøîÉ *₆¼©^‚›gØÎY† iËê²‚ŠºŒîd/ï“øO|ŒùÏ2—°­ûO23ž—ßä 6þ¯›oXh‘ÿ55ByN]I_Ë´!´C˜GË”¿ÔíþX¥ÆF¡žu¬u´µPòš'zŽd áú–+ùP(ÿ©Ló—òm°øòO ‚"ŒàC‰ ˆ¯TØÿZ¿÷sýÞ¯çÐÆžKÏþ~åéM/þyãÕÝ|ûk¯ÀÀk^0ÖÐyÒÂSüÂóÌ…§©3»±c»‘ÃÀMÀC_”n™S›Àö$¹g×v`ïn0Ú$óîZ·¿¾nÛ$qn‰í›ûþWO^‚{±s3ä±ó ‰ fM›v7°Pï»*ïn¥O§Ø­ù±QÍÜñ"±ýE…ÛuHû;.×÷\®m»\–»\V¸ÞT97+nîxµ(¼¯=ìØn[4­šÕ‰Í6 j&¿aAž>BøKL«VŒKøFe&õëÆµdzÏéøðt¬ò¿´*ÔÑmÔ–á:÷qÃñý;a]¿ÛP€ìùÜÚ»ë[í}[ãÕ³íÝwxªo߯{×µOãÚ£ö| ö»+ó»-ö»%ökÞôº)ön•xvˆÜo Ûm‡€öªýu¾ÍUàÿ¦Û­5çk|ûKÓVg¦­ê§­ê ‹J¦mN ¼nŠüÚ×=nA ôꔇ=TE (cQ7Èö÷îí›.­.-Rÿ{»ñ£Pˆ eÎ<ÉœÕî þ«SÐ\]A\¯(e@CšTüI“{Y3ûÙóšÌIÔí!a ݤ Eô|÷–%·æU¯6aè]uÒΘ> <‡`, uD” 5”ˆž»[áDÑ}›hÄvŸ8qPœ<$Å ËÒGÀ°S``7«É}ó1wçCZæBZÃÛWâîl¤ô`Ý~$ä1aªõ¹¤;±·‡Ânöú_¾çÓxÇ»¡Õ¥ø–}Y‡s]ß©Ëo âε%ä·¦ñZSKOk^Áßß"ôm sFþbÆc1m\ÁžÖðæUù³JÎŒ‚= ^ ÈŸÛÈ™'ôLgÞNnn ¬ (3#pM¡Hâ˜%±LèFqtÓ •&±ÿáJ5a@6Š&Dô£² cAdýh¸'èÇàõc2 bÒ £R "’ "’ #â Ãã ¢ŒƒŒÂH¦ñ\+|­cN£'ír0ýR,¹1_CŒ+"sˆ¾¼,ÿ¢¬€"R`1mû/ àË"¼?Š›éÌÇÖÿ9ÈüòÓ|óS|@ÿ þÜT_ÄÿßüdOà?–ù1øs=@WkýÀþÌÿóÅîÀÿ³*Àª¨v•y¶•yöÀ¤»Ò,{ºÉ¶.ɲ(Î:Y€7ÌO9ÎŽýšñ%#a?ÏS‡âõYžçgT¯ÏÀ˜>: FÈgôÈÏéIGºÌ,&²½›Š3³­éÙ6´,+°Ü0³-Y9V¬ à>Õ’K³âÒ,‘þ‡ÿöUÅŽu宵Uî5µžuµ> õû}.5ø]ih:r¹ñÔ…ó¾-õÉ£…µk9¤Ä)9yò¿8]»Û3eL”<  O›PeLÿé3ÊŒYUæ@{;‹¿Mäï–ÐjLöò^.ê±³·¬Ì^Ø¥­üY¸ž«ÈüÕ'ŒÍgùÂêŠ"kuÓȯ&-bügQe.  üÙ«ÛY+*â’”´(#.ªIü=ÒÊaù2sÊÌnâÔa*šÆäJ\~–µ ™ÿEžà5]ð @{„hÏòÖžRVŸÓ7^³7ØØ_lþ×ûrå‡*õ» å³"ÑK4n!C  į¸â×ùb´ªS(ÿ¡Däÿ¹b’ÿûÙk¶|ÈžT¨ü?Woÿµvæ=øû…§ÿ¸òeþK‡¿úì?n¡eŸÿ¾òæou{ï ÄÏ©«ü_å®üÒfö’'÷§öâ&v£Æ¶C‡¶ƒú·û€ÿj¯;B‡[û›ü÷BúwCûUh.í–kÛªí5Èÿ ÷ˆÓí7,¯®[\ÚÞT¸´K\ÐÑWÔ÷ÞñÚ†Ý5´àãØ"séT@´öêÆø¿îtmèDɪQ½ÆµYãÞ†öä;¶ì9·¨œ®Iœ®ÈÝ›•nmj·Èç Ÿæg±wÂ:—ÌëD'ëE¦gõ zE“Gé³Çè[F¥*«ÓËF%‹Àÿ3ÓÓÃ'ò.èøèX³¾°æ}v¬ú+ׄû„‘½ÔGq=ÛA¨Ùñ½ÿ2¢?°SáÕ¶ãׇæÝôît=ñÜs{¸çÝ¿ã׋zõŸj“uJü»¶þ]b.¡k—ЩkÓ¡ø¿ît}ÙîÊ*8Çmt€Ë½…ïxmÙéê‚ý¹ÇÕÃ&e Y»† Ï"¿gûŠË­M¯ypä¬c'\Ñé­Ð‡kn­ Ñ©;»q#OpÓàèqLÖ"¸kà¯L–$ ˆ‰“úTéc müÄ>y¤Éœ Å>’Å(ãG¥‘ëw=[f]o,yßÚê’ÇõË’ä©ÃàŠÌ1eæ„|nL?̉bû·¢nD<Dö€ ‘ñ)ƒ¨(¸~LFF›óeÙ“[¸^~\÷lDh>êöbt÷r⃴~!a ôh8½¢þpxs_HÓƒ€Ë-¾¥× ¯›´Y–õxI¹4˜w¶=§°9›s#“Û‘R:œ~‘Oîæˆ¨cÀ)ó1HÁ™Róf· çw‹–öŠùÛEZ•¬È f×èÃs9=címÁuu6Ô"‹4žY2ðò?Ó$=¨5OÆhÿå?Ý4‰jœ«OÑ‹Ëû×5W?1Ç 1Ë Œ ]?:M? °€d£ÈãØã˜ló$®}F™ ¡Æ—ÔE<‚«H,!—ä„”æ†BàçNQÏOüü?ñ„6‚BîÇÅ}ä?'Ù€ÿ¿•ìÊOò À2?^‚7Þã?V\®ð¹XæÕXâq¾Ðãc Àq þWÓìÁ@å´#¨,×±,ÛIËÿÒ,óB‚wœÿ3ê <ÍO'ÏK'Ï]'ÇóË\ÏÁè^ 0z€5ô3ZÜ7ôÔ ¢±6Û[ççÙççÚ±È6Zþ[SÉÈèÙÖø. ÿ+Œÿ<:R!Ó¦˜ ü·+-²­.v©/s¯¯ò¨­u¯¯÷>{úTã™Sþ¯ž ¸ÑÒt>ðrc@ÛÜXQÝZî]1~Ya Â?ðÛü ð'ÂU–úXš2¡ÀA< Ò4 »>:iEZ#G€¢€Â=dnakÑ—p¥¬ªr—Ô>„yMî êÆIYEÛxˆ `(jü¢†°¤ÎXP¥ÏÒ:·{˜¾t¶°—2·—4»Ÿ<äFà?#­<Ï^{–»þœ*xͽf‰_2„ظöç-ù©ë¨ÐÆø7<ZÞ/A½@¿-CP_”HÐdÉbñë ÅÛ*´;eö®PŽžä¢<;«ÜûkÅîÅ*øX˜Â÷ÅòŸ+4¿ÖìØþ¿Þûç…g¿_8üçÕçÿuýÕמüÿÙüôëÕ§«Ð¼ãßÐÖ_å­¾ÉÛx“³v˜FIî$MmÇOìÆOìEkÿ PxÝ•¹wH\Ûeü"ÿŠS÷Ä^@¿-Ç[vµ{§Ì©uËæ:HæØ¢p¹ v ui“º¶H\[ÐvzûJ.¥û•Ç]5j€€VWø¶#z@ì‹jçvµÇmËímÇÎ}×»*§6¹{‹Ü£]áÙïß ìQøß~–зÚ5gZ³iR³e\¿¡_7¯[üŸ9Ê€ü/7¯þÏ诛œ‘X]|¬Ïºôyp¡Žós+îg_•èØN‡œÙÏßÅ lÇÝׄÝÝ x°íwÿIðƒý .•ÏíÿþÃà±ý ¾ýî—~½O}{ö¼nû>Tø=Þ—?=ûÝûtK¼;¡ð‘zÞºÞ8· \n‚¬Ø_8ßÚrþ·‹}»$~KN—§mkGÌJÁflÎBþßôº½êÚ²æÒ"ôé‚*ØV%©SÆÕ‰£’çm¨$¾wv£‡öS&vÓ§¶µM{öH³;„ieÊ(6f]–Ð'OìÅÝæSyÝŒÛtœsÓ€ÛpzŒÖÔÍ*k汯³òš³™wåÉ××òzEŒ}LÉšT±§ÔœIMþÌ^áÂ~)ÿ°lõiÕ†²`ñ°fëéi±¦|YR4+àŽOº:£ÎÕ¹ä[â°õ¶YÃ,‘f–€|Ìâ1QLãòÐÐG1’óS¹&é<ãt®.ß0cÊÖOÉ7Æ1Óè&i“$¢a¸Î0&Ó$gœœ¢nžeFµ Ï÷‰)‹KªÀ'“ Hh…RŒ/$„ÿy$÷ÿPaæÿä,üÿ‘þûX9Âøâ%yŠýHñî ku§þ¯üA €ñ= ;€€*©N Š<çòG€EŽ}yŽð¿ C—“|„ý5L‡¨CõÕ¡zèPÝ0þIñøœêŽ^S žÒ¡ëÐb¿¦¥gd2Èf@x.µ eÿÿ­´ü·Ñòßã¿Ö, ÖÿK8¶Àÿà©'ð¿®Î£¾ÞóÜÿ (üŸ¸Ùü¿ÒÚ~ü_Íí’&eøIiæÄfÒø/IFü& Ë’ÇÑ¿óøIòcyÚ”,m )3 uúüv‡$¿Ÿ.íä­a]—áF•Í—çòÕ´5MÞªŒ¼ #Îoç,ƒ@íðG¥ÌW¤ÍªpsÛ™‹;ø¥'IsÏ´Çu_jÇo¡éK/H+/s7Þ0Dß²%¯˜"´ñ^ËçW¬­W4´ÏÓ{ŽÐ nCžW¬xU(}š/|Q,{U®|Z$Ùãm½,“ÿ_£¶Òòª*¶Ôþ_k~)ßù¡Hù]ü]¾ä[¶èOŠ•ÿ]ïáÕæ™­}ËN23™d'qï•Þ{Uï…*è zïÅ6¸mŠé½ˆŽè ª$$ê ª»;N2gæ”·}ÿ·oÉöä̼ïZ×z–x$„Œíßuí»í·)*ÈÿÀÿ/ÚAgø”ÿWùþÿ¾÷ô¿îìüÿgÕóÿýèåU={_¾ý¢`ã§ð šy*~É[>„B†>¹Çš…*F‹Ù"ŽmÆ4}*§NµS;ð_r¥ p½åÚ‰V°{t™ù¿jQ½zý1â³mÓÆõÉùûþ—ꬴÖpGq½zÓºViU³v-òþëíÛMÃ,›ÖM›v ¶u3çJFŽg)Î>Þ¼V –¡±h4ÜhÛ±ìT^©UXÔl:4¡ÙgÛ°! ê±WçÑ4þÊÿë§Ke?O}•<ô'þô×±²Ò§s§ÿ%yõd™úÊý‰ã‚;G=’1—!ÿ§þñKæt»e’!dÈÀnú5ÿ·<ºôNm[ÎM»žàM§.£çðŽwßžûkÖg.-:›¦ «VµS¯Ê­OéÚµéÞ³áÖ©tnÜt®Ñ¸5h]Ú7ì:äVMûÿàKW*eÖuŽÍέ›j™Ããe›{óecçsú¾O8‘9uéÖ²U5„ðøíIíê×ÜZ~ݨŸ5íÕÒÔ^] Ô#­õïÓÑGUì1}ÐÈF0 À_'t¯:5ä^U. $ölR…ˆÿœ1-g\4 ‰þHˆÂeÿN3ÒW=›–œëíÊ\Ÿ¨üÚ5Ä>¨#€ÿ2ö€”=$c l‰”ìó¼°×#óë\óí¡ÃBýZeà5t¡”…‚ +"G6£Ç6"FVzg‰M"ïêqÏs?_pybë½kjFû ­u„ð¤…\Öáw³éJví±äÊ/ÑYú}AwÚS *S£jò"›2­‘™Ý¥ãu‹aÝÒáFä .^dL'wRgébcÚÂnÖ²1kø¿“/Û.l®êòÖÒDó1½5þYEVá‰gé‚3´øÓÔÈDàä)ÿ1â4)ò ™ ,öàq’ÀϺÀ½m#¨rͬõÈ=vÍ©t̸cŸzÛ!¥Ä.!Ç*:þb@ðDÖ1,û<û;ë>ì,>ÁššêFKÇÓÓäÄïxÈù!n‰÷D†OŸÌöŠcÚÆZ$°íMrLdýCó²ŸXŸÙ‘ÉïMlQ† ô‘ ꘜ8­ ÍÂ%­{Þ U€Œ0¼ŽïSù¡Õ 숌(’LK(c æÔgV4¯ Còß≢Í}µÄÆÐÙ]îRðŒ1pj7pVÇ›6„Ím‡ÏoÏnΆ,½à®,î3çuˆÄ" QKBê("cÒ€fu·ƒL ~‚¦·¹ó楛Ïe/“åÏÒ牒שrÐ3Áê³$ù‡Ä©ªŸÒ5o3´oR5ÏÀÿ ÊéylÇ<’ÿ"Nжt%)NASÍÖÿ–kø%[÷.C z“¢|™(G „>Nø¢1ÿ´Í·ê_ ¶ÿV¶÷·›;½¹ówÓPÿßïíþǃýÿSýâÿ«~ w~*P½ÎU¾ÉUm…No‡Nïñæ_„/ì³Ñà‘9m`Lé©ãðÇÔãGô^ýZÇNµE³öz“Ò©MåÚ©ñìÑx£ÓÆ€QkNMbåÖOÐîÇVùñ™{«W«Û4Îh‹ÓºmÔ ëhe½Üâ‰ÜºAißo²îØºîØ¬thÒ:µlZ=™ø&oõl…Ò²ZoÛ¤µlظþDkÕºmÝ©»Ö¤²hþo:6¨ìª7ªåžu{œAkÝì—iòãkgo­\(˜ø:fø3Þì7‚ÅY˧ò–¿Ë™ùcòâw9ò‹¥3§Sj?'¥cnĽ”úÙ9æÜÃsŒÍÀúíÐöˆß‹Î^0YÀ®k¯ÑµOãбíÝû”:²Cì3x÷n{ölÙ·ê-¶mšwœ: î›hCn׺Ô³mûKçÛ»áÚ¦tióW­jW,k–­jäÎÍJÏŽ%û' ¶µKubëÇóV&.ÜêùKæÈñ<´¡ØæñºK£Ä¡vÙ¾fÕ­AîÓ&ÇvoûuÌQ$:Ú ¾°b[·æÐV{€Ú¢#±ÆœÉ-΄–öê*IB=k m#÷+½JBŸ–6Œæ §Uìq5gBÞ€Y‚í5ŸÿMVÜ[–Ý›¤Þmð1á½mß­"ö*èBtà{Š‚uJŸŒÐµŠm—àºÖˆ½«ø.±O˲_;øü5m~¢"H$U…Mèø“ŠÀþj«˜Ð0ã_;íW3á]mj˜[3‡kX¡¶K]KÔöAví½ºÝ­ô[ßDü™×êyk9CØ\^“™ø¨„÷ð§æVhCQLKFš0÷ÖpîɼÊùÜÇ«yµòü'k¹õ’¼yQ¿¼pL]<½U6»_6¹[4j,ÛΟÝÎ[\ˆ6ã*ò¯F¥ž J9Ïœ¥Çœ!FŸÅƒ¢Îà@Ñgˆ1§ÉѧPuwŠ’vÇ9¹Z!dT 2Ó«Ghµ£´ú~Âã.ÜýzïÒnY)—¹¡ß¸'ˆ”«V ›P7 ›HÎ"$ú Õ> 7³âÙ®ŸÖy Øn ,WP<Ó”Àp6+ŽæOwú(‡8š½YñTÇÂ~ÕÖ¼ø'žbKDŠ#Ù‚¢‰ÖQ«9Ž`Àÿ{9, ݦ<Õª<Éâv¢%ð¿4îZQìu³äF_É¿‘Í¿fæ6÷|fðéTæ÷I䯸/ã}ÿëñY”ó‘{Œ™ÿV`GÂ,0\K Ïê×õńÙcÂMüÇ~Oú2žþuBÀ ¡'ãBOóüfEñÎÿcùãÃ/&ð/ÿ#/%D]ÿ“â.ÿÓv)ÖÙ–ÙÙ×òs¯–äYÜʳ-Ïw,/t¨(qþß¿íü¨Ì·¡ÞžÖ³NB§À)hƒ2ꈜ2‚Ö<“;Wɽrú¸„0$óG[Z”¾Ý2ß>±×"µw:¾ÁžÖÍkƒÅîš[0†C¤Ÿ3 ÈçÀv¸s@{CÐÌv:z'ba¿°Ã£e<óŸ–î›ù¯'Oh#Zò@¤eMÁËvBvyKüåýˆå=þðÿU’âY‚ à x‘$ 0oÝz‘(‘ˆÿij¸>_ß‹”ƬíG­‚žÅ­™fuÕæƒà ËÒÿßgiߦ«€ü/kæÅÿðåÏ™¦MahªWûS–æ]Žî¯E;ÿ~ëà?Ê÷ÿãÎá˜|þóÿ}©àÿ¶Pý"s}'~q7lî0béEô*ê"~,>œƒÀ@›Ð‘Æ4¸aÿÁ{`Û­Ooß©³Fð7ó_ï×§õéQºµÉì$Öuy­c«Ê¶QzõÑê¥GëV ÀT284ƒÀ6là¦ÒºQi×¼áкéÒR:µ05’¯TÍ/Y¿R¥¶«ß²oÑY5~â¿Á²UkÛªsmW;7霞¬;¡ ©¸à}«ÌŽilý¤_*¼ƒÌø?™Ç7.“ZE¬æ)fó8±ºáZfÁ眲o²¿"+öåß®ÍJ¨/Žj¼ÓzSÐ}3«»$Ô_V(–îdV Í÷Q±T‡Oðñæ'þ°4æ™ßd 8²5À?†` 2Ã?oy/ËY@¾óý\Gà?|y7ÓîNºME²åíÄ7n€›,  Ödü »˜r.ƒs"‰òM<îËŸÏ£=Fº`"1|; ê·ÁDZÿƒÿ P+L¨ â˜&Êó³hß/b°Œ!ý9žy , .èD|ðÉHîéˆPó²O4óvÁ óøŸuY}11ö¢yþ7=Þ2#É"+ýzNÖÕÜì«EÙ–¥9ö·roç9Ý.r(/Cü¯,óª-"5çµgñ¡¢\ v-ÒºÑJV—ŒÞ±Jî^¥ É“RÊ0üóÞ ö«Èh h‰Ô¹Ìéаf¶‚¶L«ñ·BÄ»áˆÿPlŽ«ƒ'uÜHûæN mèì6w^ó"›ö2Bv²‚Îg MoQ¦5x‘–(Ò‘'ÔäqˆÇ¡KOy+Û!PD€Y,î…->Fƒù@oÀ2­ØŒ_}ºþcúX<ø9[ó.SƒúH½äÏ HûOceÑ2cø²þðå‹Å«Då©oÑñö_3µÀ( çCȇÒàe<Úð:Ù´È'Cý>[÷k®ô[¡ñM†êm¶òÿßË÷Qþ¯Øý•Ïþ×ëØ}_¢ø¿ÉÞx™¡8L–cįã¤Ï£V^ÆH^F®rCžrwÙ³Û” HþjŸ~W¿ÎS¨wíÕ8uA0Öyöüuè°²~€„4|íܪvjÕ9µAø_¾ør>:&ιCåÔ®rlÑ8·™÷£å£ö­p_ã‚LDí†P©96ÏŸAÛ´6Oô.-FÇ6à¿Ú²QoÓnþÛ´o9vêÝ:¶ÜÚö¼Ú€ÿJÿ¦]ö+Çr•'Ê¥§Ë–ÏæMþ%vìü™¿$ˆÈX:ž·ømÖâ_2ÁÀ Äg2:¿ .Â8Æa.'9“Œ¹œŠ±ÃW<r'öÙ¢}ÊÐSòè®p×sÀè6 uîÞöÿÈC{xѾÿðžWÿžK϶C›Ö¹•Á¿OGØÀö¨ðB´»JÿM¯%>½:ïž5Ç–5—6øRîÞ¶îÓ¥ðµ¬{µ¯:7,Û×Aà è=–9~M@ €º½»5.»‹öú¾1÷ÇXòW±ôoã˜ß% 9eÒ™èг±¡çâ¸hj$‡ü91òÊþÇ\Jнœ9=îz†àZfÊÕ¬ŒË¹™W 2-K2íof8ÞÌqº™g«Àúv!zëY“MiÌጳ¦™3´Îirý ±jûpÛ¶BY£‰äÔ~t\9mx“&’‘ÿWÙæävÐwåSó]øœ†7óqÂI.~-ø¿Ž]%?ä®î,ì²ÄFÆh‹6c`ÌX³zæÌvÐÂa„äEŒü0jt¹Éÿ0F ð7ä+Í}$_&) í¿ISü?iM> /F+NMßh6x`^ÕÏšÉÿ[žñ×Üí_³·Þ™š G0­í4Ÿùðÿ1 GýKþÖ/…Ûï ¶~ÎÕýVlüûÍý+3þR²ðÿŸ•Ïþǃ§¿”êÑ€OöúO¹ªç)2côâNÌÒ‹¤µ_Êðø‹O#–ö¸ ‡á¨­Àa€ØH×{¨Ýz´®=jç®uÇv¥s§ŒÀ§×àÛgð¢A÷ö5Ôµ¼UïѵíÙù_zíñê•ÇÀy½[·ÖµkÓ¥KãÚ®uA‚Z@ëØð×¹véܺþ& èкu¬YÕÿ×oÔl;6ëÝÛ Ž­›fƒM+ª8ìºtvÛ.ÝÛžÝFŽŸ…Óã \ËgPaý@v¼pãd…ätñ©쉯c ÿO• þ.sñ‡Üù¯Ó—¿Í–Ï_>U°p&«÷·ã–|ÄøŸþùõ$ŒE¿sæ^ÔÐaøø~ h>ò‚>q€ÙñÔ» Uð {#/hãû„É]ìè®÷X€Ñµ}êÔ²å×g$ iÐûýëþhC––0 Ã *½º5¾BµO\åîkní ïnà?ÊðP™zw*¼;  :ׯ8ÔŸ)î?‘?{¹\j_«toV¸7¯¹7I<š ‡C °N샼ÁSØdHˆ=B7äùUlç®{Ù³eÚ¡fʾzÞ­aѳYêÛ¡" Ñ.l7”$r,ðA D Ý2R﹌ °¸)§õÉYB)G¸2€ú¹DOlFMJB§I-þõ³þãFïMºUNÁòn^$¶MãjÛíò‹¾ Ìûš™ò9áö…ˆY^£"gp*íÉ@ÆaaQÏ­ÌΊ¤Æ‡‚–ꤖ¨£&¥³:½ëqº°6]X—ØS'è®Iî®Îé{\Ôÿøæ`UÉpeþ@eÎÐÃ<¸vW¤u”&¶ sâêRbî…‡V—˜9^ÔWF‰Gð\l--­Ÿzoþ4ĨfV ±+9÷‚î¶Ðòê™™˜I÷X1·9á N’É ¥2piL| ›Äð0Üè.ê£(öQ4‡Hª}$Õ!Š‚Iv4+ݱÿWÅPìcÿo^ðá1Å,;P,ÙC²1ëcò·øóñV%‚é6•¹NUùŽ÷sìîe[ßͰ¬H»Qžjq'ÅâÃ(ÀÂlÅq7Š¢/E]-Œ¸œÃýþcýÿa>ÜMì¢i_;L”IѶG‘Ø…B Ìñÿ€P pÄlðQ>Pü)÷e,ékã»è “ ˜ 3±ÁgãBÎŇžç]þ'ò¯&ò/›- !ê’ ú²ÙÒb¯¤Ç]IK¼”™z9;ýj~ºMaª}qŠcI²}QŠeAÚ•‚ô‹…)—K“-+RÜ*Ó|‡CL„´Î°z& ã>wD÷æýÛ×iëÔáuj—ŠÖ³AP†WpÂYßÖy\»ŒØá ï„Lƒt¡hx/zÙ½„zo™Žñ1D.bVvkOS7žEHŸò%û¼ec€ØÀ˜ÙfÍ,!¯ì-ï.ùõó†àHì{‘ó:|¸‚€áÀ|3ù!ÿùJW™Ó>Ü|'AŠ^9ŒZ~³Š*…)Àÿ Z–ñ.]û:iÞÁ¼¼Èÿ×¼­ÿ(Þû[ÉÁ_ówÞeêà>xÀ°ÿ>]ýsšêµi#ð¯[üŸòu _Êvûfýý:ÒçU= ò$-&¯¼L“üâVöc—ÍG¼‹–=[<àΡö ™û{!1R' ~C[žý:—•C‡Ò¾mÝ¥Sí7°E‡ØoÄêýúÖ][eŽg÷¶w¯Ñ«wæaíFÀAÞ­WãÞ«rík €ü°ïÚ¥ué„ðð׸w+]Ú¡šþ‹/Þ_¹R©±oÚrjÓ{tšùo´ïÚrìÖÚwi;·Ýz|…;î·F…KµŽÒõµŸPã߯ÅÈ<:@pGéÛ«Â ¨#¨3—_Ü«}Ù¹AæÙ¼âT7t¾tèxÞ’U¥Ü©n͹~ç}Û%ñj†@ŽNf £†GÖÐ[Ëé8ã›ôa¹s³Ä©qÅ¥iͧ¾ìÿ÷¢Á¶¹3º  5gl3`l3­‘“2‡Ö‰BHûàÀÿMÖ¨œ1Ò†Lê¹Óª@¸`\JìAÃû¾í@þY§:p9ÇZÀ¾Ž<¨&ÑùÒ^­è”Qr?¼LžBC‡È­ºg½šÄði}›—pm+ä[¨àŽÈ¹#k¼yب6n~3bj‰Õ5ûŒÿ“qª ÷ÊIçÚi÷zÔ8 _7I¬ét-|p1²àfòBÖY5VÙƒô‡#¼‡#‚{£9·Eee9÷Ò[*ÍÕ -µ‰àí’{k’{jb{jbºjb;k’:«3{åôTe÷ÝÏê”Õó ­û~joejσ”λ‰å ·»o%w–$¶çÅ7¦ÆÔÅGÖFò«ùüê°ˆNJ + TËNUs«9 U±åtn)=mé¢âSèþõlwA€G2ÃW@õЧ¸ÅÓœã!êÓì")6dëŠIöÀü’CÑ EpŠ$Ãû’Ýïd úW øT Ęž™-àÌÿ¤(‚MÁ:g ÃZäE_*K²¼Ÿíù¿2ÇöAŽõ½,Ë;é`i–wR °6ÏC!€†ƒb¯”D_*æ_Ì >•ÎüA@ø:ÆmõE£úv˜0Ûü±;жE;¿ 7YÀ ™,ª€§£Q®G¡pˆôþ\ ‘üM4çxLÀ‰¸ðÿb÷X€ ü È4 p9>òòG ¸’s% \ áBF⥬ä+9Iy VyqÖ¹Ñ×sc.åÆžÉ‹;•{27æ/e ¶üÄ!î)v‡˜Ü½H€xM«¸^ad ׳†m‘a¡°…;+øÞ9ï¶YÏöU¨aFu¼iês:¥çÏïÇK^¦*Ÿ%ÉÖò)/S7÷b×КOö´ž3³ÅžœÚ \< YÝ \2rv·Å´(T¼¾´Í_6Ô€ºÉêo¦=\_šNf€$„ÎCÔG¨—¡³}øKævóp}+û1iãM¢ò'Óñn¿dþ-ûï¨ ×Þß Œ?çn½ÍоJÞ0/û•„¶ ˜ÖökßçhþÿVºûK‰ñmþ]ñÖ_o£ÿŸ‹ôïŠ4+ßþÿV¢¥ø?MZy–,}™ ¥8ÑêkšV€ëü•à٠ià¿‘'F[‚æt¸aW?„Þ]÷~C„ïÀ6mÒÈž5’†Ajß Ô¡AãÙµí+D«€š%7j׬êÑ6÷>­G jw„÷M§– ‡VÈü^´Ø÷èQ:µÁƒuÇæ™ów6O ®íÛ®zïn½SÛ¶]û®c϶SÆ©GïÚ»ãÝ¿ëÕctoÕ8Õ)=êŒLáaàðâ…›ê3åÀÉÉ¢¹ã£Šùœ?ÿu2„ÿ¥ïóþ«ßä¬|—·zºXr¡XtBpï(.cü7ÿ}‰[¥Õ<‹›z5û4dú3õ”1½‡ê·½ÀûÁþŒÞƒ{„#v|Ë\Àè7¨wëÔ8´hœ[•ÎÍ:ß࿎ŽöÛ‚hÉ#jüà†¿Ð@à+ýúäÞÝ2ÏNx ðé;[´Q¹O§ÂIâÑ"ój›w¨?[2v¶,`ãiëMCèÕ’„KnõhÕ ®Ûæ!´ë‚&P¨ŒoQF ŽXpª_ti\óïÖ1Ñ‚#ov+lÖ>«çÏéÂg7C&ÌËäTAJꀂ,hChW2†4ÁcrÖ¼Ø)#RÉ¥¤^öäÅ® 3޵“6glÇTúwç•z¶®ã{7)èìhÓ[IÉÝkÔ^¸.úµÿç|ç±MRz¹vª¤r¬ìvïí¼¶{©-[%µ?Lêy˜Ò[%è}ßý(¶ëQ|×ä®Ê´î{Ý÷²º ößIi¯Hn¯Hl¯Hh.i*j®ˆl, C* ¯/âÕå…ÖdW¥°ï ˜·#Ky¬.³„Ë*¢Ò 8”6)‹‰Ï`ú§0¼“híÕeÙG2­¨î±ç²ðÙL~¸‚ ðɶ|²"ÿïà23ŸO´ý'™}áêoðe4ÙîÓS1$»>DD~Èü@~žÿ?¤ ÞycEªíƒl»Ù6ÀÿûÙVw3-ÀÐ(PšµÙ  ¸`*¿r3æbqø¹œÀ“i´ïâqŽôøœçˆöCMƒ<ÀyÈüÿOþ["¡Q ð‹#`᎘gL„&ÚëóDÜW‘¬ï£9'ÿè(9t¬ÐEP÷"XÚ#~9ÅÄÿ+ÀP(æRZÜÅ´¸óès)#âJVøåLÞù,îÉœðr#Že#Ï‹:_{ýI ©‡Ÿ$â<þÛ%ÄÞyïÎ)׿y·Æy׺Y×j‘ËãißF(0ÅØV±oÛ »_É×DΩ#fAÚ¨ù¸åÃ$ÔÞýuú& õ¹@a«&7ØH;\€üX€!`~›3¿´¸¼´¸ eÍè9s:Μ†3 ðßá¯ìFILG­˜ 2ó€)(ÁT Qý4/|µŠP/P<‹ZÙ Cóf €›¯ë ÷™z ?`ÿ?Köÿ¿åL„æMª øÿ2I ‚j¼Âçç\:É¡lÂ?ÿ}éÖ/eÛ?—€üÿvÛäG>YŠW™ò7Ùëo2@~´ú(^ò"$}‡6 F¬¼ [Ú œFkŸx  ­ÀMüßòÜó4º ¡Ðxô¡½Ì =gÊHÑáú•žk®-›ß>i ¨Ôò‰Ä¢nÝ®YïÞcðûÐz#)Z-€züè /x}/ÚPìÑcžX±¬_~°éÐdpïÜñì†\mpéØuì:pî¸ èÝûáÝöü†Œ]Ûn-*§º ï†ý á-rÏôñ|í¹;ÇËÍüùc$ðá›Tÿ‹ßåJ¾Ïþ/}_°rªDr¾têLZõé9§ä#€ÿéŸÙ¦b\D>eqã¯į¢ž†Ì¾^8¤ÏlcǶ}F^¨ØõÝ'Îî‘çvˆSFâÄ.n Šøxz'4 ¬óéÔúõŒQ=K¤¢©ÈÃzꘊ0¿@ a¼È/qo_óê# ØcOnâúä¾]ZÊ ¤ëE÷¦Uï6©cÍè¹âé«å2×'2—µ×cDMè]rk„@¾IB£:lˆô"(]µ¡Ó»Ü9øqëþ=+nÍèlOï y@ÏB=\´a3ºˆ9ø®åϪ¹Óê  m Z,ª¤±eä¾uúàgt5 ‰H<°µ ›Q°‡Á$”¾UrïŠOû’Gó´C͸Uå”õç'«îÍkÞír¿Nó¡@rRZJîÙ` ¬Ó„R×2±þ¯Íù7.Z—Hí2†p3T¤áM¯Œ¬²„² áp‘‚;´ÈlŸ"ÖÏú?œ#ÀÖúÖ÷{>ê÷º/ãv¬6ÌSЉ5S¾µÃ.Ú­ïT^Ht#cp"öþTF•¨è^ÏÍ¢ö»-•ImU‰•‰Ý»ï ºîÅvÞµßo»›ÔZ‘ÒUŽÔ~[Ð\ÝPÊo,ã×ß «»ZSX]ð°õ y/‡~7›QžA½™J*I$Æâ bðyQØlžo×/+Ø/•í Ø%3ÝáO5gr[PÑ!šäM‚HoË'Y€ÿ‘Tûp’ ìö|‚#(rý+ùAŸj°óx¼!òò‡á#su.Š‚bJ‚õ'øs±–@þ ŸkÞWS‚ÏæF^¹•du7Ãú~–uU¶åƒ(,>Z€ÍÝTkàE¢ÕËŠx‹òØË7£.òÎdsŽ'“¿‰óý2Üùhˆ5&Èl µ@{¾€ÿ±öŸÇÚ#@{~íÿÃmŽð¬r­Ž þ[1;Ϥp{4vãþ¹Àï«HÆQì±§ãƒÎÿA±!‘¸—@Àÿ¸ü7+=òZZôUÀ~jôùÔˆ³É¼3©!gÒƒNgžÈ 8–øMnÈ× œÐcyá§Š¢/VÆ[µÆ²C‹') søn1®{Û6ãÓ<éV?íÖ0î^?àòpØïá ­^LmZ ·Îå‘“ê¸yA°ˆÚ;šZz¡®î±«Ûa *ö¸y™–3mšÛ [†+Œ`—·´ºh F±ß,†;Û!bCð¼1|’üA¬´½P5¯Ã4í›—å|˜ Ž‘BÔß _4ò°zÀ_}'%ð—ϣ¥¨Þ$*€öÀ|sìÿkþö»Ly¥Ð»t-| ŒàÇLÔ_òMÒë5dþ÷ÅÛ¿”lýVf ¼ÉUÿߪM“¼ëÀÿw¹› Ÿ2”Oã–!ù¿J¡óEcP™—Ѳƒ°¥§\ñ!O|º°*Þ š3Â/2®Çý†üjÇN§p;¤#hhc:ö¤ž4´áÝ%sm 0ø£¾Àöe‹Z™mã¦Kðbÿ¶ß°ÁoHå-„ªžÝpnGK†>ò_ë…fÕh©L<5wùÁªE58ˆÁ³kϽ!dì=—ž§îƒ{žÃˆâþÃ{¸¡_á¶{ë†ë“ ߯—¼)¶cêXÎæYÄé©Ò¹“™Ã_F}µø}Öê‰Â•ï Ö¾+Zù6åxÑÊ©²Õs¥³g²›Ð)@ɘ‹iŸÝÈúƒC2Æ¡×1}'zðuÒÂOIÒýÐÙ#¤¯BVö(ÓõõžCø>c¤¹CÚÂ}~—2½OšØÃìzöáz÷ªÝÛU>]›„>sLCQà„`ÛŒ 5q\`?`¶€×V¨6±ý` ;¬ ÔŠˆöy-{·.yµ(½š%ε¢Ë7G/–®€»ù´«ñ=œqypÅ«uѳ,À< %€‚9  çÍî„ÍoL*|»mk—ìjžmè3pDPÞùUü¸nóÅ[¡3¶È2…ú…1†d(,õÈ©ýÌa¨ ¼™Í€1Mè$X” Š€Q kp™.”zWQç—æǺ)ÛG“VU³vÕËîMëØn%¡5Ž!tÉI=ë”>%^Ü%gô¯Ñ…è\8bÛ"¡uί¼@Fë[猀Å@%" \ *†ü¡ÕÞJí ¥aÌÿɨW½È§qÒ¯~–ðÈ’2Ú—È­s„¶)lk¿ÇÃvDzÚ™Í^IcÜ»s™ ¢‚êž²›íw²šïÇ7Þi½×~'®µ<¦µ<²µ"¬¹‚ßXñ¢~I¨ È_ÞPÊ{Rú¸0àa>û~.t/‡Y‘I»™N+I!&óc±…Ñ~yÞ¹|ïlžwFgz WÇ+‘æ’L÷H »Ä“\.q8§X¬c< {ŠS$ÙÑDr›H2Jþ\¼eÑ&œ`Žw0+÷Aax[tÿ£þÉÌUÀï7‘˜æŽáÍ!óƒÌüøópVÿP à Ï Ž×µÖ™ Þåâ¸å©VUÙ6s¬*³,ÀÐ@P&˜‚íýtÛû©vwVwâ,*boÜŠ¼Pv&?ødã;×Ý> µÇ„Xa¯c‚®aBn 5ÿ6hð?M˜ àÛAùÁÿ(ˆgù™iE(²€0T€Äyþ!û—Ɖ(Ö)ÔD è\LÐyóÉÒÑàÜK1a—A±-À¬ÔðkiWSù€ü‰Á?$pŽ%²¾Ma|›Îø&ƒú§LÊçY´Ï2@Œ?d~[~úfü…'¿èä1Öýyz·˜Ö;Ok™$ÖÍâ›—©³¤ÞqbÓ­VĬ™a5 v¬Î™€IĘ!ee+ye;iy7Yª ŸYəë¤þ5Ê >pz»°²`˜Õ… mñÄæ!š½ð•ýðà¶1Åc4<ÂG‚ÜnùøWüèËè€ùóX4Èo>ä ßµÃï…-FHÌí· x›Oø‡B^ÿ>]ýo9àÿß Œÿ^´ ðŸ­3ÃÿU2ÚÒõ>] ¥Á/9[¨õLŽö·²½wÅ[ïKp}[¤{_lýR¤ÿµX÷÷²íŸ 6^dÉžgJÿ?æ(ßælü˜.øƒ ù¿OU½MRš{ ÀLÍÜ&r?D¼Í™øoÓÆ „ÑmìȦk·ÊµÛà3¸ƒÛ&nÑÇáYà¿i»CéÕ©Çõoaû7Ü:¥v+ÖOÖÛ€êøÑë cZ¿Aÿà¦î«Ü»ÌÀG ‡¼ÿáΦ['Æý¹´žÉ¢–®¢²–›ÉõQu|¸Öߊ„8_Zw3øq§¦ ¨¶0®óÙòXs™•Ùô{”;©”òdÒM±4žPK,Ž!DâsÃqù¡Þ¹ÁžÙž™÷t¦{Ã=…æžLuùc Π¼K4ÎÙ$ÈöÎ ¼ ì6á$[`ÍÃ٘Ɇ³çaíøX{³àe xôÉ P™`RÉá÷Á§q¡O_¢ñQaxk3ÿCü­‚|-¼¯ÿch§Sƒ/Dݸl]™e ü¯Ê¹Q™k…‚²¬Mü·¿›lð¿eBø¥î©‚ÀÙÌïSÉß$øþ™ïòY¨5&ø&àêþ‡Y`øVÿ˜ùÿiüm°8úA–è•æuA<´"(ÎãOIØoùtàÿé(ÄÿóÑAçcC.Ç„"Eó®|âÿÃD(™‡Ú“%ŸüÇøK<õËÊIH!~žŠ;’†Ãd`1pMÃ;Èa›uúa‚c[s00wšÝ4Ïî›ã´-µÎ1[WƒFçXýƒÄ'=„J!ùѽa’Ñ ü_ PDM¨ãgUÑ3šh4 $eI™C›ãÚ)}ð ðÀ™H¨çÏ£ý_üÅݨó$y0‚­Ð9#˜:´añi¤yW ‚@{`þaÔò~„é©(Ô~ÑÜÒ|ÔótòÏËhù›8%ð„:y%®›íG[·ÒU¿dë~ÉÑÿškøçÍ­gàúsšæ— ÝO©êŸ³´ïòô?æéû?—_çkß–èßëÊ×üZløÏÛ»ÿusç·| ÿüßd*^§Ê^$1‹üß‚›$o¼I¿l¼‰S ðÏ—¼ŽW “ˆ€ÿì)-j>8¾KžÐx ‘|¶ˆc‡œÙgAâý€Ù-Ö$B^ Æ ä±-ü0ð_æÐ¼æØ¢öììÃ÷¢ýb¦ÃÀ¥W/`h¯þ{öè}ûA:!Ú>wܺ p©Ý:þO)¢Cò˜7lðúŽ<õÙ÷í'·I¢Òèž_¯Æ­IæZ«&v¾Él­ž½½~îžêä=ÄÿS9#ߦþ’²r²@~öÖÚÉ›’ï ÿ+'JOßZ»|oùbiϱØÛBê‹ÌÌ/ì³?s.þ3~-àÉëtñÏYkQbø‹{·þ4paŸ>½ƒ›Øñ›ØñmùPçóÀÿ]êäqìqônĈN=íP¹·C5‘^CÖÒFŒœI¸ÂcUJ¬Ð<òF°æÕ%€–<¢£ «ÈƒÀÿMÊàmHî׎VÝc»VÝ'-ïÏÚ>\ólSxw¨q}ÀÿM\/¢®§š9 ufáMBzAÓ¾AS»¬q~`͵eÁ¶vÅ­YmHÅÛæÎ Ð6áàIeHÁ­Ñ @ƒü¸.´±—,Dícx3àk#›áÓú¸EmìÂF€h•Ü·Œë’P£ùUßv±{ã”c͸ݣY—'P°H|ÚÁÌÇD¯cQ €5b·œÒ«¤÷)¨=` \Û<%ùz¯"xd7 ’ó†d¡+Ü‘•áeNßµc× ü³XÆv,øµÍû·‰á{ œöù ¦é ºQÖ}IhÍùЯr”Þ<Ÿ œÎmîÎ+ªÍz\Ê{XRUú(?¬¶ ¬6?äa.ýqíA t?›y7“~7 دH&Ýào'àoÆâoFáJ#üKøØb¶0Ô/?Ø/?À+ãÃòÌøÓ]Sh®ÉTÕ9–äŠ&9F" ˆÕ2<Þ% DpâáíM²qq6\[À~Α‡u€ p$ô”IŸ,À¬ß»ÀïþáÁ‡á_øoеþÈ Ž×0ÂIûB.ÿz™ÀêAÊÿs-ªò¬+sm€ÿ÷2íðð/ =Wp*›y,úM ákÿ—Ñ w8l‰àϹ‚ ºŠ ¹Ž¨Ž¶ýZ£ÅÿQèØþÃm ÿ#ì‡Þ8b‚ÿ 4^á?Ì>ãýe"î[í$Ÿy&ŠsÞÜV È˽ð7éRï²y-ñ/$…\N €ÂwFŠvïF,çŸÇÊ Q  í¨ÅÝØóî³xéNÄÝ{ü…ƒÈ% üóèÕ1ïðˆüpó0bÉì ðè é°¿Ï[ €žòWàæóh) ×ÔÉQijѵ6 Öïo3Uï²Ôo³Ñ8¹Ñ$ÿ·,Ýû,-o2Tï ¶^çj_åi€ÿoËŒïJ Àÿw…º÷…š÷9›?¦­=,?OCð—»ùcÖú«éÓ„Hþ¯¥oS”?CA'C»½¢¤ðaàƒý¿þ&QyÀ_6Ì éK?!„íÒ¸Ò£è½C›Úã̼à¢îûìiÈ®À45¡_Ü¢ŒíRÇõØA¹k»Ì¹^Àl°æ´ø nx‹<¾é7 ôê}7Ý{@*oá~T И†€äŽ-â«Ö[÷£ÿÌ)Ôý;´‹>ĉüDøÉ}ê ü §´q£O÷¦{Ó²Kµ–Ú³OŸ¿%¿ô@qþžúÔ}ù¹Š¹³¢c©SÇÒ¤gJçïÈOÝ’~_²ú}ñòÉÒ¥3·W«V/•~ŸôCKÇXe±ÎúÌ.ÿîé—|ùË´™_òÖbÅO£—ß%)Ÿ‡-C p@›ÝÅM}Ç ~#ðàÏuÈžßeÀç™xɘyIßõ¢ƒO=º”P`ûÌTß ˜2°ÇízƘŽ.R~½àªð[÷í]÷ïƒ_ Z·IUQ‡ÌüWÓ†ïJBŸ†< v¬½vWl_ üÐà…[´‘ |ïŠW«‹¦z l´Ù»:5Ñ³Æ ´ÑMÿÞ%û'sV—œä>ðæh_°i (H0ºÆ”³†´ˆý€} ú®\`6 ƒÿ¼iÔS܉͈}üÒV䂜3ºBFsàkä> ¡{É·mÚõɘý£I‡jð£5ß©w›Ô³UéÛ%÷ë„Z@NèZ§ö ೄRz˜Ô6G-Ý%ì~yР"xh=dP<(ኤ¡#’Á•ÀÞÚ6!Æw,:ç°mÓØÆbý£QزÚ:Ü´Ô8K®ùÖ {7ˆ(ó1ÂñÌúÆ´ÌY¼ÛY¬Š\öL΃Œ ªô€{‰¤ª4By t+…r;‰|S€¿™€»‡-ñ+‹ò½é_Ê÷-åù‡z{zxä°Ü3YnL×T†s2 ¶œ@C²¢(öæ%=ad;É6”dcçÂÃ9ƒ¸8.ÎîBüwøÄs`µí?‰‹µ6{Áú`1a&ýÎ>]˜ÉhLü· òµbûX°¼oû¡_Èà^+޳¸—fU•mý‰ÿ²íÿSl+â-ÊxòXdz(_'ã¿JÄ~çó‡h/"œ>‡ðx Áÿ¿ó­ùGû¿lÑÉŸfþ›Ã¿þ<ÿCMâBuàüy”Ç—±~ßÄã¿ãÑNó™ç".F^Š †ä5š{ ‰wŒ –kZ v ”Ä;/=k‚ÿ©êwÂW‰¸/’üùý1I~&æû`²|0™Þ˜ oLºß‘LìI”/J¿¾Ë>ÕÂ&O…-aÈà7´áÖ-wí4W`_¡Ö»ø/±®_¼^­óì}N›zÁ˜yÊœD‹‹üŸ’§@{Øñ=üÄerŸ>ùŠ=³‹nz6/{ÔÙƒÛØÎñc¹›W®]¼¯:u_qñîüùbÑ÷iÓÇ2%gÊÖ/ÜUœ½»v¼ ø¿tê–¹=¥üÊý±ÕG2Úf±kÑWç.ûä§Iã?ç¬=,C•ù&F ÅÎSÖÜ.~Òè75AσÄ{¬i°€ì9°€Âض—Í}{ Ñ°M\Ÿù¼ecàj¶K‚Z 5eŒUOÓQFÁ6ˆƒf>ƒMÀËÐÊ|Ö˜’:(Ç÷¢©Ul÷´Ýã ËJ™Gë¦φ_·–4°Mý‡ÐG”ìs®›¬‘ Æ8ü\À>ÀÖò߯§Žhè#:Së.9søC§<ư‚‚Ö­{ÍW©i:µãÏixÓ›ÜI¨¶cÁd¬!)½_BA{»à5èD8ŠpÆ£aÔîá´Sí"1ڪвîƒv4 &’~íkøv9¹CNë’³{åBY@?:ù‡ÚzÄÓº$´n9K¨ä ȹc²¡Õ`áRpÏB0jã5Íh›¡´Í‚ˆM³„ú|Ý4¡n–Ò´Àì†Ì¶Ø>GCysØ–Q¯† ZÇLBÏhnÝãäIJ$VY­4•R–H½“H¯ˆ'Þ‰Ã#æ›°_-‹õÝŒFð/æ{•„û‡yr½òC< ‚ÜóÜs9né,çT¶s Ë)™éhêÀˆ6áÆÐíÍü7ßK¶%Ù…mAÿÿ, kêgg"ÿ!þCì7±ú_ê÷±^ø]9`&<À?üÿZüƒÿ¶ð~&þ{Y²½ND’/¤…\+Œ¶¸“bU•i%À£\ÄÿÊûûYhðçvô¢à3Y”oRý¾ˆñúÈíŠàϵÁÞø(‚¯™ƒýÑü·>bâÿQsøGcþ&þó> ¡%CŽG#Üþåûu4þX,ñû0ú9>ëb$çrTÀ•¨ «1!×c¹×@q¼«q¡WâB/ x—SÂ/§ð.$†œM8Ïø!žr,ÿU’ÿ’}>Kõ9’äƒIôÅ$ùbRLÉ?Ë“éeâ¿/&ÃïH “OÔ>L±Ÿæ—¬ðæÙ¢)úÀµsŠÑ5MíS:ç‰íÓ¾ÍSþMÓØf‘Gm¿ÃШ[5 ДOÄÀþV8êQ…Nix3ø÷Òg) à¿ùÁ¡@†æˆ?vƒ*ày:]ùE:·ß4™ ä_Ú™ƒ«ù0ÿƒ°%@ýwá½]>žöö”Å+P7Æ$4¥ûs†Î¼†uõJQüš§7“ÿM– üÿ9‚½ámáe::ùí§°‚ºò¿Ê\–*;¬ìÅ/¾Þe)ÿ^løk1êíøSØŠôU’ìM’ìÇ$Àÿ§$„ð©]Þü^˜Øìe/ãåûËúÀé ÒÛHFƒÿ ]úôKÞêë(9üYŒÁs;³ÛŒ Pßl7Ò'vèè¤uÏ…G·Êp‹úáÈ iTCî6pýhÄ›<ªñ®»w¯¹t˜…àGhýú ~zá’e-X€Á·pú†#>¤Oi÷pc/ésÏhs»„‰ü8#À( öˆë^Í+¾ ‡!"wËÄ×Ùª«dWjÎT).W.\,û>còXæêé›ë(ÏßWœ¾½òCÉÊ¹Š•KÐé£×*gÎä7þ!,û3ç Œm&ƦèK÷ü/<î~ÏÒGôü˜¹üc† j¥Sð‹z¶ˆvÀ‘&„i#yd—:vÈ™~ññp¤ð|©mÿA-JîÝ Ôœ5í¥ê8ã†ÀI $sö¸ŽiºÒE -mLE6·bß˜Ü ž—©™£rê€.`BIZC=ÜG¸Þ»šI«ª lÒ¿®zÊÐc ‰o«Ô¯MÅV3QGpu\ÕQüPæÑ°àðÌh“„Úk8cðþ ´óË$øArr?þå”+?78£†p´|T:©CF  AŒF˜ƒ2Æ\ágÉhýbßV‘Ãã1›ªy§º·&©;ÚÔ W…o»Ì¿uÛ$!6¯[ÖX]õ×8}«Œž%jç2¹c•Ú%£÷Hiè\hYpÿ·_Âë‡öLuÌt‰ƒzf-bFÓ£y‘Ö(&4@9°HX$ 3›gÙ­ ÌæEjó<±uœØ2Ò¹”Ûß›U^ZO*IÂ&ø—%ÐðN40ß·4Ƨ$ÚTåUéSá ð/ ó*àyæ…xä{f{dz¦sÜÓØnÉ,—¶+\Næƒ×Ì‹0£Iæqx>Á1Œà„|LØGäÇ:!à#}ˆô!þv!¾¶`\G®¿½I¶ P«ßc?ØÏÚ¬ß[€Yàæ’á÷áÿ÷B˜i É x‡_¶·ðŸá~œO¼x-?Ò¢<éü¯Ê³EüÏt¼“d[q5Ÿ}* ÷e¢û‘§£|Ç#aöGþAF~Ðàÿõ#!×ïò&þþƒÂm>CðÿïáŸ{Ý Ó^`×?Dú|‰ý&’ø}$ù‡0Æ…6ÀÿjTÐ5âè àïF<÷j÷rà)%ôœ€s<–q,šôçX— ~_¤x}žîy4Ý “êù`>°ƒ ï#™^pýhDL“ƒÅÜÆ ‹œç?˜ icÕŒT1àOø6Ìy·LºÖ:=p¬tª ˜ñiœönšòjœôl˜õm]£Ã¿ç‘ÍÀqÔæMÛ1K{ «†±9ùïÅ­‚)£—Ì­!Ñ™l‰Ê Šç±²ƒH´€Ó´`ø/Þ_Aðç/C¨Þ ™`6á°Í3¼æî½ïÓÕ¨—©#5óÍÔ à ’WiÊ7›?f«?(Ok‚¿þuŽúY¦„&|‹·¡(S¼H]{‘dZÌŸ(9Œ_~ž¸ò6sý·"ÝßJ·Þe¡Õ>@~л´õ÷é*È´ïÀe⥯ã×ø‹ÆÐYs¯Ôì2fükƒ:€ÚeÏHèÌç]æÌÓàÅga«û<ô'Úš5°&ÕÄ Š–0U”[äqÀþºwŸþè¼ÖŒ5½AÓÒEêè&~œí{õêmx÷íP&à»v©“:Ü ;¸áÚ!¾þØ<øócÀÂÁK;øÅ!NôŒ6ƒNR%M‚ ÿƒ/Pƶ±½+îOdĶCî„Ê©ná»B͵Dzkt«7®=_º5z¼Ï= œyÅ[x<·ÅšÜ œE¿Ÿ€…}Ò„ÁJ€^¹c“Ô¥YKA'ð™Ñäl˜XÅѲEy ½†6»IPCiî°Kkd·NE´-äw4ÅgÝ gÇ ãüòc|Šbü‹¢üùE‘ž…&yå‡{ðÜs¹ œP F{FgZGJ€[â¿[Ó$ ;ÇSÑñ ±$¤h‚ùÇ;FàœÐ˜?Î9 ë‚Ì´ÿÀpì' ‚¿c(k/3?õÿâ¿ùÛÍ6ñqîñÿà "Â?JÞǹƒOðòµáøX›ùOqúë.‘}5'üÆ-ŃtKàÿã<àU®Ã½ ‡ru ïR.í‡dŸ/bÐpM¨ Zðl‰Âà5¤àGC,>øäÿgÀtೕyͰró þ L¤óQÿ?[oÁÝÖµ­ˤmÚ@ÛB 8ffÙ’Å,˶Ìl'—ù4M“†ÍÌL’l1³™)q 9çÜ;Æû1Þ¹övÜœ{þcÌ¡±-Ë’-Û¿ç™kÍ5gÌÁÜÄÃ9)þÙäE´Ó{üÏázäò.ÿóžÀÿBþ¹"ÞEÜ%ìÏ iç¦ÊI=˜•äš›àZãRéRár1’PçRïRçAEŒ’€Xˆ²D—‹).%í¿wðûijwãjÒí¬’^aõà›!ÊïÒÔUr›"¡¼Êpôã¡èûh+ l?IB=¤ÃVÎüט˜ý&ìŒ ÚðÍ’LgIf²¥øDH€ÿL¶lA üÿ¯Ú(F'¹Vó4‹ÙªyáÔœ`åLåb$ T,ŠB†šÈñ%oV{´ø`|t;êáPi{Vn_^²ïTZ@hVŠÔ›å|ÍçÅUnò!@€ÿÛ7¯¾™GÕ>ÀÿjÛV‰n­@±’#[ÍÜ(P²^V[^]³þuÝöòºlÿF‘ Á¿ÜôW•õu•õU…ùY±ø¿™§FüN ŠÓ2ãRŽ|V$q2G€N344°ð¢ŒÜVxSs\é ýÓ¬Q`ˆ)©Í˜ÐâLí†Ç8Rû-IÝ@~[RÏ4ipž>¶È–γ%vú„ƒ1l!õÚR{œ¤Ð [\§3±g6u`Ž<<Ÿ>ü·Ä´*}Ƚï9£Û¶hã/yŠm¶l.­ß™Ú»–4¸B™%,FI£Ëé£èXVJ5¦^z×Dk]äök=oéÿì¸pWïýçì¹û– w¤g¿ï;V=øáeåñMgn›Nÿn9ùõgß©Îüªö¸mðºgò¾«òø±ã£²ëû£ª]ƒ¯¸^ßôíÁØjBXOø§US¯®™·«tÛåš2Í x‡y’†l‘<>›Þ¹ÆÚLlgL®âs&ø“+ù:_¾Á.§ ÎF·Ckÿ€k3ñš;¼1ac  þ<Àî(hÚ™¥öB˜)=¸4ÌpFlœQ#µÏL€,ÌNõ´’º5ñM@WEäÔx!©ÅHlq2zgÙVJ§6®NŸÐ`&¡áìh,#£ÏÈDG½Œ ¬ÃÚMh ¸;ð'䎴.øE’;à7h$õ p¬A45›Þ«¡t¡jÿÔ5vìK™ØhHmqÒzpþãä7cr eõj˜=*z—’Ò©FªÑ.©ð»=àùÛ¦5“aåuñµÊ¸ûºäÇNf›6å±*å‘&­ÖÌh·pz@´Ì.«[ËîÖR[!PU´v «KÍì”ÓÛ§hm^·ŠÛ®`7O2$ ´­y"½IÆhN«%×HõRZ-uƒéUÅ#e÷¿P¾ÌNºšu5+æjVìµìØk™1WEÑx\FVó" .ñ#.ò«¸aœðrvX ;´˜…F±S"ŠÒà É!¤àü´ Œüþâd¿ìlÕ°œ„–zƒ1çöæÆ£"|+ö Ìv€IÆÿìSþXàÜö†ØãÿÞZÄ^ €W¡xC~A¢Š„=ø{ïÁŸå™â˜w¼€zæ¢àÜ×ùç­ð¼Uíüÿýš?Îÿï ½¿œ®&-ŠrÍÁJ=Áö#òc¶àÏ÷rç]pßã¿ã?d"/ÏÓ…{íÞ„Ô!À5'òÝü„ÃyÄÅ©þYéÇD´3YŒs9ì (¸`þ=þ|Ïâ?÷T!ó³|ÚG9ä²SÞEC¹q„¢(BEábáR¸ JbÝþ%qû@³ /À$­U ¤à’øƒÅ1*ãÝ.Fº^ :XíóÉ€ ¿%Ä53rÆ8¿BÊ©NéTÄ7Ë“Z¤I­ã µÃ1:oõ„Þ™Ln„;o-‡Âÿ x*ÎS06“9É/êü,_+D“v±áïÒ±b%_ü_óœ§øÏfLÍ'A2”+Y*À>H– V¢ `þü`ûñ.=h†{¥åy•u«Ô„wþ„·J Ë…ê2ýÎ%ë«ëÓݘù뫹—7gž^±mU[€ÿ_:7o:6®Ù ت2m—P¥JÎäªX¶‘‡6vŸ•ëqþï\1­_Ôn—jþ;¦×m/AwÞ˜€ÿzŽr-W¹(žó?£‰5ठͱÐûðßvúÖÿõžÿµ^ÿèù´êëƒ ×öE^u ºæøÍ{1W]"žÉ_.úç—–WÌO+´ÀÿVš×3&7ùŠ%šÔžÖ¼ÎÞM€ÿ‡;ÑúȽP¾Ê—?å)6)s1v¬Ïà?®k¡÷Âí¼`ø?Ã…-°¢¶l(p À[:8YCð·dcŽ¢YEÌaÄú“>`OïUÇ5ûÿ1rø¯KiÒ›í´n'©SùH[o£÷Y1ìüUÔ.³ÏʼÃ3ƒ|ŒúÝÁ÷‘! C‡ðìƒÚoÁr^oDËèÕÑ»uÔ.=•¡ªãëtñõ†ÄF Àý?JøC¨^‚Ý0In“¥¶hÒ;µ©í“Q5ƒ¾·û<~íóúm,èÞpÀïªèGª˜{fbíVæ°X£I~$Ox "ÖêéíFÖ.ü•ÌN=­Hi@={áÕi=H‰( j‚Ó!çµË¸ÍRN£„S7Ì|,§´ORÛÇHMÃiuj½„òDJ~,g4JÙ æêÞöœï¾c°¾¯e ÚWgD]ÅW c/ b«…¨¤ÿ/ 3ü•œP€%/¬œRÊ zÓ–? Q@ ÍOà ~s‰ø1[Ôc!Åv¦øð’}¹)¾œ$?ˆ]æ'zò“¼ 0þ{£¥žÄœü¼ø@|ò\àâÿÉ^œÏÿ›ÿØÂ.ÿáùãwáÏÆà¿Çÿ耣ä¨O²È'/ Î|“wþ×RÛU>·«ýn_ ¾u%øç*¿ï Îßœ¸L:Z¾?Ç ÁŸ~ž@;G`^påøxØÉ_¾K&Vü#Â:? <ݱe7Þù}Üsû¹çܹç]ÐÊ*øÏ w)ˆ/?ù¨8õ˜˜üi&íó,æ >Ë3ƒå•ÉöÌáxær<ò¹…°ýgK8§‹™' ¨Ç HGò“Þ/ˆ'/f_~”{yáïˆ$”FÊ¢åÑ„ÊXWTöM¨€Ô Æ.à~ˆÊ(BºÝ/UE»]ŒÚYCEáJà¡:g„ÿË(ãáåñ@âÝqRM[ÊãGa¿Ô†ýØŸò§œÑlàXãvÞ¤S„&¿Ø„cÎŒ‘YÑØ|ÆàUæäÑ,ø…,åªX³–£ÝÈÕmæéW³Õ€w`;VÌ-þˆ¤‹™²u18 øêþ˜êM¼óó›>ÿÏ.ZñÓ[À|€ÿ\¡r¾HµR¢Y/×oTðÛí‹fðöÿ~³Îó²h¿Reع9ý?Wæ^_t‚ˆì”Á·Ï ǧy#˹“O+ô[eÚ*ã¿®;ÿ÷ËÙ×>T_VñW|uÉþW•í%¨L1jºQ¤E‡” Õ׬äCv€æÅ,r%³Œ‘µ,õkø¿Ä•¬&W³‘öYø#hC$k!‹Ü3CéwÐÐ<kxž4¤n5%uY©Cš ±”%—‹šH0‡g©‹4LÁ@ê@ÇW‰]hj-s£Û“ûçzM¾ Þ÷gâÛ–Y#+™²Õ¬©9Úð*u|#]^çI6ÙÒµ´‘eâÐ2}¾ISb«1ªVùh‘Õ?MlU|ñ À. ÎÒ`÷yâ ¬Q{ücèØÕ±Ï¯«Ïþd9Ë~þOý‰ß´hHñ?”^¿iî(=þûôÇŸ? ^u‹¿äu娛ïEy òÛw-üÇ/oj^^7ƒ¼¾(6ÿUd~Y _ML Q=üP+É2s|-YgO®0$O3ÔÛ"õV¦f?9Cê7G·XÂêáóÍvò ÊÀ,o ~S6ÖÀ4o¼½ƒ1ŠwqÒÆ,¤~cz¯•9ÔÁÉqp†ÌC¹Ó˜Þ ‚«ª—úÞ•>0'´ÚS»Ðt0b§Õ§'Cz[§Nn´Q»l”Ô)(½ËJë5¤£¤ž$òßñЃþc¦‰6b‡9¥ lcöƒjØyƒ6î„™Õ«KoS¥4³!•InÒ%·À/ÎÁÀÍÀ÷obö9ø#Fl¡ à¯Lkƒ[ì˜@ópø£1¯[Cž¿Œøü6p{,øöTüc©Y•Ú0™ò)"j ¤Ko1Ñ;¬¬nh­ îÁïWSZ´4Ô;NžÞ$§6Ë­jn—VØ«öÈ8ícô& µmŒV/e×I8¨3ç8½n’Ù<Áhg´«òGeewXeרIhm'+:Ÿv‘[ÅA'¹°Ã\áxT°Â Ê!¥ôàZD15´ˆ‚J}È¡x?‡œÔ1Ñl?‚²/Vu¹[ÞÃK ä&pq c ûÞo/ìü½€?~7Ø >»ï÷v°â|ÙH°U ¤¿W{²“ü!2“üD‰Ø²O¢?îüáað*ìX/VŒ'Ü‚ 0£½è‘"|Ž#Ž ˆÇKÙ§nfŸý©èü­ ¯ÛÕ¿_ úíj ÎÿüãÕiGöøÏ8ù-4Ò ³ôh¼£<ÿÎ5þõ*ãÆEܳyÉ þ«zæE¹y#W¯â`ÚÙƒËÙ“; åºWðÙ/gþºîx~ÑrüuÉ‚ªF/££Àÿg%tÚ7_½†•6Á·ogo¢šŸÆÈ _¶À‘.re‹ltM%ËW/cûè)‘†>l_ ŒÀ×aŒï0{Œáþ%¼]‹™Sæà"o|ž5ü_æMÀµ [¦^ ¡ö•ì1;sÔANrFw}™/¦ö¬qÇ7°é ´Ô³I‘® ¤ké&S²‘r0¼þ›“Zu‘OŒ15+œAkBƒæü-Äÿ zàÿ´#à‰òÜ/ý_ýìšöü/ö wÿ†“·t_ÜRŸûMíý‡>è%ä±Þ÷âÌí?>â}¹/éòþ˜«ïFÿ¿={Ã5ZIùýÅ5ðÿY¥éi¡áe¡é¯Óªxj.s| ~F)Žd•-AU@ìÉ ž|C øogi7DŠEú¨#©Ã…u: ªÌZ°† ³üQk5a€¿–9¾ÌBœe‚ŒÚhƒ(ÝH8#‹Òù Xwà¿\=äänÐ\'©GödÌçuD-š Œ….µÅJC“ßU u†Ô–æ ¼–>­$?ÛeÈ3 ËPÅ7Žß“úÝÑE×[SÚ­©fÚ6R»Í¬~@::/̶²z ÔMj3^É·ª¤&#„fÀñß@ï 01ûÿ:j7zx¹Ô6EróTèÃ~_zÎ~?äó!ÿ[#Á¿+“j-ôNyr­"¥F‘R  èŒXz³†Ú ò´|kXMG;ÅÀÿIZó£UÉíÔz@”‚îqJÓ8¥NªŸä6IY2vË«e‚Ñ8”Þ vJ‹ÚZs¾½ž–v‘–tx‘åL<Â!°Ý`ŒùAx”ÒC÷àVûÓ‚rÓ‚!°: þù!2“|°’{?¬¼Çç?;L¾7‚¼×Þb>Â2FxìÚo×óÇùá;Â{ðàïè‹öpqáÀùïóf%úAü!öœ?®2`þþo›å ü¾p4!ècVâñ|Ú‰jÁÉoòÎþZáý{uÀ­+ÿ¸ðs•Ï·…gQ·ÒÑâ÷l_´àÃ:‹øÏöpçzºñðÓ[XO¶¯{–[&~ªöuã{!ÃÏ:C`ž&°¾pcŸqgŸsáy¢‚ÿܨý`þ‹ˆG ÉŸÂKç1¿ÈåžÍáÏl?çB!Ç£˜u¶ˆqª€òYù˜8éq»Ù1îÙ‘®9ᄼ—‚Bq„Ki¡,Üâm¨ˆúoþ»@”G»V ø»âü¯Â¢2­<Ì¥"`_é¹ Jë¥ü:BzÒ·Æûú“°_"þÑô§”V§e£Î$‘t:SnLZØ‘9:=îÌ›JöNþÞ– ?Ó" LÎp%Vú0ðš7ŽÆ{eN­æ¨Ör•+yJÀ2ˆº]jXÇÚ~âå6*Œëå†ÕRÝr±¨»Z¬EÓÛËáVm}q¡ ÿôŠíé5ûöUòü•ˆË6´Œ•ƒ¾(5ÐÒ.µ{†7²ž«x^®QeæùÿysúùeËf…n«Rÿâ’ùÕe´Að×\ìT˜¶ Ñad@ú:Ö‰²’ulj jF$’¯‹àù´H–3Ððšµ\5Þ›3“1,ÏïTnf©Ö²”Øùß6gêÐ2ÖÑn½@‡Þ+îè²@²À±þƒÿþ;YCë|)Ü9Ï·¥N“Ѫ¾9´IïûÈÞ°F~š%ßÉ×l‰•K¬qàÿ3†|+K lèã[´ñm†lƒ+›Nï3&4«ÃÚRš×xƒºˆ‡Fﻳ¾Bšm¡Ó öÀÕù߆>½þ_çñ«Ãç¾ÃãžéÌú/n«Ïý®ñþÌ¿%¤ÆèÿHçy¿æDî7û‰×$\{7ö˃1?N¼B뉸²]-yý•e§ÚŒ:¬þ§Ò¾]¨YÉ‘­C&È[æIÁêê—™’m¡j™;¹.Rm‹uÏr´pÿ\z¿3¾ÍÑh «Ó%Þ7¦=±Ó[m¬ÎYáˆS0jb ÎcgÆíÌaxÁœ;ÙÃsüqx{®&ÀïrIHÐê ­¡ ‚t´àfIl Ý×Ç59H¨|H•Ô`¦t:è=æiéøv°+ïþkR[Í´cMbóTà=Yà=Ud…Ø¥€‡¡ÎÜ!üñ Gá/®uÔ.ÔÉí4NÆ× –Îä¥ Í…g¡ãà x €‚Ò­Ikþ£}ä¤Yø£!¿Û=ž?µŸý¶ÃãûÑÛê”z]Z“žÜ‚ŸþO¦Ô‚á‡àãÎ_AB¥A“¤0ÿF;ð_’Þ ¥4NaY€šß Ž 0šdÌ)½QJožd¶ÿ%̦¡ôºVãXvÓpéý_™å©Q”à"nD)=lWP\DÙ­Û~l©­ö¿9ᵇ}DþDoa’÷^?fþý‘cóáÆzã+9øbàï"½¸ÿ¹o‘Ç>¾zó†ÿ~ÿÍ F‚J4°Ý½½Üÿ3£/àæÂ÷쑨€iqdzÓOVpO}•sö—2œÿØDŸïŠÎÝ}v‰z´(z¦?Î<áÆ9¿íùzíò?ËÎÿ]øû¸^.œ nì³ú)õ$ܺ1N»#áðvÉvË;˜Ÿt¨ íã|êñÖ°úyX‘¿}¶ˆy¦ˆv©CòÑÜ„÷3£Ü³"\²#\üÃ…a„âpÀ¿$ôm pÝ“À{E$ÚÆhÿ÷5¨~Ï.üáþpײP×Ò—Ò BeÀÁê Þu UàôÅüÚøp åÑxz­‚Ù¤çvÿͼagÔÌŸ0ðG»x|&Gæ¡3¿ó™ªѤ“;fc ;8£àoüx; Y¾lNˆÆÇ fnbåßm?sè,p‘õÿ)Ñãç¶þkezˆå2~PЂ­*óÓKVðüxy糫ö­+VÿköÍ+Öj3rþø‹KÖ§e†g@ì9àëßÞ»(œØÌU¾(3þ³Úúú²íŸ×¯®Ùw® a.Ï.›Ñ^¶ü!ž_´l”hWòðM"øëž•›Øs•ð#€ùß)4îäé€qö88ÿ­|ÝF¡~1G‰ÚV—! “Äé„N ×2äæT4pž5’±šÜ¡&H9*ÐÄ%‘ <ÿs-1†¬é=6JïR†ø‰ÊG™£vò Ú_&èƒêõ5³ [܉¿ t•×D“+¬‰M¦ì5_B˜]£mÑ'¶XÒužÄNêÒÇÕ+ÃïÏR;VX}ªÀ;&¿{óÁ a­Î°V{@-°FësGrúÛñ“_ë½~wú?tx>°œ»k8wGsþöÿÍOL¾ÛÏ–ÿ¸Ÿüå;)ÀÿïÇ}$ñ†{ÔÇù‹ÝÿþÖöâše»Üð¼ÄøÏJ¼Õ«bÙ²Hº¶*˜ÜÊ™cóô±M¡ø¿ÌŸZÏV=ËÕmf*ÃÓ)]Ó m³ íòïvúC½Æ@i°ñúf2'¬ÜQ3{MÈ”šé½€_°ÖÌ Æ­h˜ûH'¼Ïð!H$ øN: ŒúKw™“Úäa5–t¾Hn1§vÌд>ü$Þ ­ÕÐz´im x™(<À–Ü}ÜÿŽ"ò +@ê#Tž[¸ƒhÏ «|° FtÌ^Tç“Ú4•T§!¡}aeJ3˜P+gã?Àe(¨VD*¯®Nn–ÇÔúßî8÷H@Ÿ÷/ã!¨âžèRô¤f©YCjR’ÑšOj=0 ?ŠÜ(K«‡þõ’Þª µ@€ LÑ[äŒV³ BÃoG€ö‚[ ¤ôV)«YÂl€ršFyuuíyß_JJ+"EåÓÞ!€ó{¨Ç«z HÁxàäÏ%ùÁù¿?ZrÁÉŸ‘àï€àóÃ{€“wøoó_ùçüùñx³þã¿Ëÿ7{¾™ ¾ó7ÿq>{ü#ÈüãþßóôÑPßcäè"ò‰Rö©Ùg,õúí"*þ¹u-à×˾ߕž»‘}üã£Âø™dþ¿ 0¿Øüç{îx»ˆÿ]Å~Àÿý"_7tÔ +byº2λÁƒÉÇ iŸÁ­ ù¤å¬+Ó×]~ 'áPñhù“úÉBιBWÐ+WèQÌó(‚_PޤËK:"Ž9˜±O„zÄerC ù!„ÂBñ›À$Àµ,Ü W<Úïæù1ip+ÚWŽWŠbõB•á0ÿ¥!®¥¡nþ„ò B¹ÇÇ÷£³FiOF“kT9R°EEf»’Ú¤ 4+©mjZ·†Ñ¯f h¸†Œá™|Ù|‘r>W¾œÀ4Öfyø:„ƒ5Bþvkã¹€Áµ}ÃÚ~¢žŸÅ:|ÚŠ2ÃöE @~½Ê´X¢Y)ׯUáMo¿d·æÿù;Ø~0üÀü ¸çÉ‚" Ôà_¬[ËžšçŒ¨âäñ¨ äjÖäsäKµ¯*Œÿ¾bþü_^·ï\³=½bÙ¾l†¯Myu}úõU'˜€ØJr)O¾Z¨ÚÀÓ=+1<-ÔÍ ¤Ó¬Ñ ±z+W;Ï“€]"Žm!C™Ë“£uªB Ø~;V¾¾tE,ß*Ô?Í×ϱƬÄn\/ÖÄ*0ÿ bÅR® t’…¡ܾ“>€àOB‡[ç9£ëbÅræ$ª ¥ üçICö˜]P1¬a‰2¸Á—¼*Ôÿ—¸ãë\Ùs¡úŸ:tâŒ1¶Iþo‚ë†_AZ‡1¾Nûh•;°@éPùÞ6ù=Xˆl™‹@SÉÐ`âàZ­ï]É™¤_|gôùcÚÿ‰ øïñÀäñ§îÂÏ=Kð#GX½3¤ÞX7àqù·̯¯½í`ì×Ä}ÿ~ÒM÷x=çá¿¿3½ºayzÑâû¢ÜüºÊº.–/ %«™h2¼Qk<ÙK²·?:èIä;ÔþÙ´î¹ÔîeÁŸk™Oæu6vƒ…ÓîÚ™)1Õ£ób™7¨¥´›ݳ‚±ù ‰ƒƒÒV&×NîÈ  nñ)]Nj¿ Ÿ/“Ð2úHöÈF»ãhFXjŒ´ÂÉÿÁ·)]¦tvjï HFRËdØCÔÕ?ä>š Ií Àv†±oob6wr&Ê–=¡çêè*R‹ŽÚ¡LkÕR:û h¬:DÖ /¾–=ˆvŸ©=Ê”ÉMŠ„IøC€÷¹ïû=–ߌ¼¯N¬ 0¤·êÒ[T€ý´&Üÿ+©-€ý‰”š±¤ÇÒÔº)J“”T ewB€ À=p ÿ¶SŒú)zÓTzÛ$©c’Ú!c´M0ÇéuRvïYÂnåÕÈ*þÁ(.NŽÏ#…¼ú=Úç¥ã;¼¸Û;Þ_rñÞã¿ Ñ /¼y›ÿøŠÍŠüßZÕÁcO8±þìXöÁ>d¿ˆÿàRÀü…ñÞ{æ_ùǃçæç?Ĺ“G½>N‰<ÎK=^Ì>u%ëÌ÷Å^¿Vúüv9à÷ëøýPqþ«Ü—9%½+ AþNž}öð_èãŽVþ±Åˆ=þs|ô .@û´S„¤O ljÇIŸ»¦žqgD'“>Ê£}VV_p¡8çPä‰øÏ¹é@^ú‰œ”ÅñG²¢Þ…îËv¢ábâ Bn!/˜PL( "»à·Àˆò0´’óV.°Ë|¸Ý»³$r_Y”ÊÂ]«BѲy(<ƒ[A°k!º {ø5”4˜þ‡”ÔˆÖÉmÀ|©y"±B–Ò('·«é}N¿šÓ¯áØrÆg äóùŠåýj¾q3O v ÿÅ&OóÆqø/f+æD“À:0É@þ…<~L`«Mrߪ°üñÕžù"Õlb¡D³Zi‡¿}Õöw\~ÿKæÕ*ÃJ•a½ÚŒÌÿe <ù½l^fœç¡F‹ñèX¥“Õ¿.ž|Q¢øÃí¿«mÿsÕ±SeÜ©6ÿŸ_·cð·þõÕÜë¯ç_ÞDõÿÏ*M«Åš…<ùRr½T·…µ¤FÅŸSÀpDï ù cÄF\È_;Åhf:õ\‚–ª¦…ã6ò¥ó‚ €ÿf‘a§Ô )ƒ9­ÇAê›åŽ®fƒ"hÁÍÎbû â©ù,€ ¾dš1褢NÈ´!xxÅÅLTw.PFç’ú !u†Ðzk|ë_º&”>/Ð>ƒoŒ=öT¨x•©Ùá)ç¸h›•2ºÁÛΘ\åŒØ‰-†¸'–ÔÆŒ'±Iç÷§ÙÿáBlçldÇtx‡3¢ÍV¯ð¾=vê[éÙï-÷œ5V¯GvŸ'ïÇ&ŸFßû– 'ÎðÆéÐ&k@ý¸ç—w ¾=@ºþ^ÒÕ÷bo~ÿÓ‡©— ‘Ñ_¾¼®|ý­õÙ5óv¥i§ÂôïjÇÓ ø¼?ÞW²!R¬ ‹\Ô*p9C÷ŒÚÈQ¢Ñ™ü‰yÚÀ ©gS|'¿~#§y1³ÃÊn3±{§³¤öÌ #oÐ*š[¹½&fÏ4o¬þ_b§öáu¡À|ðÿèmäA:€WŒê“ZA”1õ’ЇŠè:¶ŒÊq[-iÓŒðùФF±E“Ö†/Ú˜¨zrÞ¥ÓJêÉ0ÛåQ5ÀYäcH@ìAü¿M8jKf å΂)‹x¾IT™Im×Ò:Té­ŠÔ&5¹È´ò£&éð¡5—]Т:Ò6uj›žÔ ´Ò°‡^ÿ ñ»5ø‡,â&©}3émÊ´f9™< kAàV’V7‘Z+#7€ù€PÑP¨émRêc9ýÏN¥uMQ»ÿc´úQzíý±ŒY«ä4õ¼¨«³ðNy"97% _ÕÀÈzøäƒrˆ!h êÉ„·åß#¿(Áç-¾êþwÉ%Vêó¦bßwøXÂ;[ÀÙóöo;Æí‹z¸}„}ß½ÀÆÙ]ÿ þÿ]ÿƒñà/Œó}›ÿ{+ÿH>Þâÿéïû^8šþ)'åx!óÄåÌ/¾+òü¹ÜëÕ¾·¯ܾî÷óEÏo N_åZL|?+ÂíáJ?C žreœqãz¸ ¼Ñ‚O¶ŸK¶¯k–ÜB:ügy(ç©' ±Ÿ¢>&„E}Ì%ùì>zàûü¸ÃÙiåR?ÍgŸ,äŸ+Éð*Éô.ÊðDG}égr)§2S>Æ懿à Ú'pÍðwÍ pÍp¹æ¢Èt+rhÿq ( ÁÖpB\ÊB]ËB ÿGðkЂâ÷Òw|Á¿2„QìüÏr)Ž$”†J|]¿ò ê!‹Æ§´N¥6O¥4ÇÕŒE=’Á¿ ©]Þ­fôèxƒ^¿Š×cÊ™.˜Z·œ¯[ÈÕ,‰d`eáwþxÛ·,¦3¤h(Á¿X¨Úo”™ – µ³¹SÎÜIœüËåzþ;7œÏ®;öùqEç¿\¡[©ÔÃ5zÌ58ÿÍRÝRΔٯŒ«—…?2§´<ËœÜÌWüUiúçEË‹2ýóRÝ«*Ó«KtÈ«Úüüªü?`àÿúæìÎeÛf±z½Xµ\¨Z,T®–j7+›åF°ôðsóbërÔŒÜþ’€ÿË ËZ¡~¢å2üVî0 ࿞£çðß,ÐٙæÔntLL$E=N 5óÙ“‹ù /ú•|ðV0¾˜!E'ÅÈ}´@$œZàLÌg£CdØöî°#¦M\kk™KïßMmç(_éáb'Ù©^d¨¶XÈWo ä«äáuæØÓ,ù<£Ì¿:ò¾“Ö±.¶Æ×î[ƒkæºçc»g":gb»Q­ ï;C'¾ž<ÿ3X}gpÍ·Æáßàð¯³ø=2øÜ3>þ;CM¾5“^ßÕÉû~?íæÁÔËcoJøáHÊWâïžÌX(êù÷¶—_ƒL›_VÛþuÉþ¢ÄxGY _6χ$`#]àOâÀÿ ¬O ´›Ùr€%öÈŠàÏ-qÝfvó<¿ÅÂj5²º€¨Ž¬ t¨–ß?—+Ƀ,õÞ‘åŽÏ²†ñŠPT,ŠÃM û1 ÷@v`!wS;P“‡Ä:iÕdJDå@èD^r;Â;½ÏLë™JlP$7©HmzJ;šÆHjÕ§µ‚É?Ú(=hñ?¥UñÂ@lC“ÅX¨ÿ¡…?bŽZ³&lb©E,qŠÇõÜ^ £µâ$·ÿÛ&´1Ì?ˆ h=­GMF Ab›:¹ÄES7xwÈçV¯×σ~¿É¢ª“5©Íê´f eJR£<µ~’X K«ÿ?N¬Á%. ø£áô¦Iz’.®}2­]NéÐZ†©µCôšêC í¡ŠÓŒÚDdöÈ.v~Ï(ÈÊ%ì~† 'fbÞ;Ò….pÚ#þ£Ó[¾üï=ì㛼| þoÖùýðSWìÿ\Ãß[ØA­þòôhf”®pâ}Ö*xNP–½óÂ{ðçÅùà±›h`ð§Ç\€b¾'ôñ8ú3é³<Æñê̳8ÿoaüÿã†ÿo—<¿/:s#ãxéHVô>¦—+å t’~šÀ:Îv ±V?øi_ìÀ/ZügzH§ ÉŸBŽ‚>$ø&ø"„|ìšpö]Zè^‡™äOÄôÏòy§‹…¥"oˆB¾Gç‹,ò ñS~ìQNØ»ìÀ}\W¡Ÿ›øïçšå$ 7ÐlÄ€{a ¤®Åˆá(J‚ ¸ @”„¢ ‚7áZ 9B„;ð¿$Ò·Êת`ÎÿÂP÷œ@´²T@¸ê{¦#½j4õ±œØ7•Ø!‰­—Å6hÓzŒô!#$לA §OÃëÕúly‹edÝ µÓ™rkµÇÁº½Á­“?ae˜XCÁÄt‚?ødœÿs…ÊÅ Ät®Â.–ÎäËKµ@þõ‹fþs¬QçÎÍiœüë—L«U:°úÏ0Eÿ¿^e|yÍù×°ý›ÅÚ‘DGj »?õÄNéZb=ËžÚ)Ó=/×Ãí‹ ÃëK–—ÍÏÊõÏ/š^@¾pÕú↑ÿëùW[U DúµÅZ‘rµ•˜®U¢MTö“«˜a­ðe›B9 ü9€ïMñ¬ÜðG§Þ ”3oØÈìwðGÁù¿,3¿(µlè„2 ¥ò…iÖ(šnP¬Ï"ˆ×8ÿ!e€· ò+uÀBê· ðfÎrÆÄè|Ä G²H´†7Ck§SºV¹+™²ý_å–5¡lK8 üßæNn°$à«_diVHCì±ç9Šj—6úáTØívç"·ß]czèˆh\HîEÓX¢ºg⺧ã:T~÷FN};åñ Zê ®s6âaö{bð¾o |<Õ2Ñbò¯SyÿÒr¬ì§ý̯’.¿ÿÕ‘¤¯ÞÿåhÚM÷D÷Ñ¿°¼úÚôêšýE¹éy±a+O½–-_ÍÍa»+‚I5|P2îÿ1þk6s•¨)[6G½»Ê¯]â5™Ò™éÍv~¯‰ÝmæXEÃvÑÈ\¶t&c|÷\mpŽ=yÚ®¥õÁß^T<'œ€¿=¸ 0:ä.4ÕšÔ¥MBc_4Ñõ6b§=­RÈÐþ/øpR»œˆì4DZ#ÍÂþƒ]7®)]vFÿ sø }2ªFŸ€ÆŠÁïýÒyC¦ŒQKÖð–9¢evÿGAjA1P;Œ´N|!ø/€uÖ¡áíŠÄ&Yl6k²]ß0t·Çë×nÏ_F‚ÿÅ<žŠ«‘Ç×*“”Éuª”zUjƒ’XFë@¦ÈÀ ?p8™Þø†ÿm“i­ Z›”ÞÌ™‰AIA{m€´8ÿáC|™}7ðÚž8O:áõöjÏ®“ÇQÇÛK:´(ï7lß…?܉‰ƒ? ¾‡ÿÞNñ›ðòCb}Þæ?¾òƒø½.žPàqòÄ?¯C1aÑ“Žå2ÿ¿*ðø¹Üøÿç »×ýoU{ýXrSÕŒOÅ1ï2|¤sˆí”³èßÇ%Ão·Õ– Vo|ot@€x‚÷ Áû#WÏÃ.¼¹Ûwþ`z؇¼¤cb:êð\$<[*òø—ð/ä³ÎdQ?Ë"~Æ>Ì~‡áïÆòsãúº¼Ñì±J. Äþ»‘ëïü/ @€ `„â ¨@QðîÖD1¶_PêQæRæVâZD¨DQŽ)HA¨‹8­,¸Tz®IâJ™'S‡Q'ÛÔ ±KK—5leŒ™ÃFΰŽ7 å÷YrÆy’…b ¥v­D7—5ÿ¸CgccØÄ ØþY±àÌÇ7sWÊõ‹%àÿl¾ °1_¤Z*Ó­U™¶¯ØŸß˜Wÿêë9P ?\o]1¯]Ô?»n{þ R„—_Í¢¡WìÏ*ÌhFd¾ü¶.µ ÒsyL­1µ}I0ú¼PýªD·S´7¼¸dü÷5ç¿®:žVèwªŒˆN×l¯®O£óÂXSˆMø–ŠÔ%ZxøÿµR5^YºQa\.T/eM.ð¥;¹º5žÌAê›g­f¢žÏË,ðU, "Õ"­=cÜÄrfJ@Ð^v‘ø¿ž­íp2G¦9chZY±f­H Î;¹/ª™Ë’ÍdL e¡’&`>à^ò‹åŒ©ùlt>z…51ŸÜ ðŸIìX ,ñÇ· Ñàƒí|Í2ob“?õT¨Øà¢jŸÍ,Í6_¹Dz–1µÆ3'7êbibîÏsûfh3IÍFÿ‡ÎèP“ÙDÔ z>¹ß×!÷¾#9÷‹Êû–-¬ÆÖ0Ý5Ò6Úbñ¯Ñ{Ýs†ÔÏE·ÚC-Áz¿Û§¯ß~_øíAʵRnIúúHÒGSo¸Åu†]yõ¥êÞ¾nܹbù«Úþ²Ô¸S¤_Éœ„$`-CŽ7ă\~Æ%!êþ·‘«zV¤ßÎW¯fM"à¶;H53Ô¬ ¨eNØ`åõÙ2†g²¥fã¿øuê:ÍžçÏrGM”œÿNî¾€²þÚ‹aÚ°¢ Ô54±CþDÛˆ0§¢U5±ÅÁÒ‘;À®C¨R›Ài›¨&j;vƪ}¡vƒçG3“[A&B€š˜Ò»ÍÔ^`øtÆüöÑà€,l; GfŽê˜½ZZ— j‡ ½ËÊê…€  ³ÇÊDã) ”nuJ«<¡²=©]'6Œ…?èñý b(øîDø½ÉèGª„:Eb2©v*á‰4öádâH”ä¦]·OmࣾÐé ciµ#Ä'p;D¼'%ÕÊÓ!h™¢4Ș¨_Ð0³a˜úxœr_A«Ñ°:&¹=òâ‘ê†êDž(ÎSœä›ä+NÅû€·«7ÛÙë´îÁúpîÝÿ÷fkìßÛ»8u±’›Ý%œÀ4ìbþ{Þ~/pÔS#½û{ü‡!ð/d¿YÿAë ±ÛA(Ö‡ã ßÃÛæ_ÿA+ÿX®±x’S'øx¿z„šðQã³*Ñ7 Ð,˜ß«î^þÿqÅç×RoÅ_\a}žÿ>+€@¾@H;CH?üwáû ±¿™þó?Uþ¨gùùˆpîC·3‡\O¿ïzþ°{àgïÅ]8”þ7ùX6ãDÿ‹’L²L¯’ ¯BÎ91œÿ1~ÔaVÈ»4_º7ããŠå¨›\¶ bì"×Mãá À—† ‚ ùA»xÇöŽ]J‚Üûn%® ð©œ`´²äïRæûÎoQQCô_$éCÊ”f}z—žÜ§# ˜i£VƸ™9bâŽh¹ý欑ù’©¹bùl|.ƒŸIPg]šoçZ8COg¡¦syò¥"5JÊvc©T °P¬˜Î—Ï©Àù?»æ|õÕüëoÀáƒíÏñôŠíÙUëÓ+–k¶•jäÿünœÿV™þi±~3W&Œœ"ºN]kIë\L<+T¿®0½®Bmœÿºîx}ÃùÏ›Óÿ¾1ýê²9ÿjxù2ýRrµPµ¯4€ù_-ÖÀýO/¡]‰¥\ÅœPº§ï:ÇøÃÚÎ×mé–‹ÕÛ•èXñ¢x ôµB-PjlU˜ž–š×²”`ãÁú:Ãh N.ZY‚ׂòCÀ;ƒJcýQQÛy."Úa€¾´Á˜gô[‰ÍÊð? IµÀÿ9zÏ\R›)àÑt\Û2udž4´LšMAüWøÜûâG¹Ço¶°º¹˜Žµ”¡éÈÎéð6[`ðßðü¿3¢ÅÞb <áùýýÃâ¯ß¥Üü íæÑä¯'~w(é›wïœ.—üï/ö×?8^~‰6Ùÿª´¼(1Õÿx€ûÿyl5úËš‚OmhQoÕùªxj[(YföÏÓ»l¤f¥ùi¡ìE¹zF0ha÷˜½&Ö€™9dgÌñ%h[œ5 ¶ðr`c àWð6¢~>¨9ÿø\&* …{@À®[i¨±’1±]t_Uð7$·[Ë7s62º§R)à®ÕÄ´ñJGÍBµ”ÎÝD€Üi!w™ˆí²ðG“OÔ MºÔvcz÷4©xži±ø?+–93'¬‚ Uþ€‚¨HmZr«žÒØ73ºA àݦuà )=p«"¶¢½`Ô;í¨S['ãë†Bÿìóÿ}Àï÷á@´-¼§N¬Õ¦6‚LÆ?V¤Ô)I¨.ˆÒŒNÐ[§(M€ýÁ¤‡‰FSkFÒ‡hQ(½í³ÿCŒÆ VÃõ‘„ô@NmœdwJs{%Ûîp¯ £=³â}÷ªèÿàðßæÿêñØ3Þ{U¸ÙþOø_ÀùJ.1øÿþã„ÿoþC¼Í,ðÄáÿ6ÿ÷ü?ÎøNþ›ÿh øM))ž‰àOrüä~/Ï÷"B¥ÅR?-~q=ÿÂe¨ùókw®ùݽæw«Âëûܳ×8'ŠSŽòÂ]é¾²zÁ…éEÀù/òCüÇávt„ØOáG§Žîûü—ãï»y|øNÐÉCñÞG¨‘ǸÄOsX§ŠEç+r|Ë2}Šyž¹´3¢”Ï8±GY¨>®” ÆTA*ðtEe<±cÅ^„¬7B€_ˆ±Œ ÇÏ 7†"χÀ… 7€ã¿;ƒ "'mƒºöË\ËüÝ‹Üà‘9„Üwqàx¶b·+¾'SË)Í R£–Ö¡MïѦ˜ã6¶Ôƒ„WÏíµåŒ.•+ÿŽ)ذgÓ"0Àƒà|"ðB£¨5¨h|6í ½Ñ2nûùp 1_¤ì/–j—Ëõ+ðÿx߆kŽõ*ãZ¥a㢠8üüªõåuû³Ëæí«TùSêsVsäÀ%î¸)©Müþ£-Äö%îØ³BTçóªÊôú’¾äõ—Ó¨àçª /òÃÆ¾ß˜“¿R¢YÂJ}à ·JÐA0ÿ @u€?ˆÚ|– ç?NrT홫}^béYÏSÁw¸Yi\Ì‘Ûy#ðï¿’¯‚<5-7nÁš‚6¡3P‚ <<Ûb!ŠÕb”.üA/Àÿ¯ä)Ts €Õ’%€X̘ÜÈÕ¬‹õK¼Isb—6¬f.µ{3¾ž!{^jø÷et¨ø¹)”?Ï/T¬q¤Ù³Lý"ul:¼Â&wÙÓZ§Âî8isœþzÿBr—1ðñt|ç2c ¶DY ϦôjŒŸùIzægSÐc{dË\|Ïllïtd»-¤Aë}Oïû`:ªy&¶ÃÕîˆnPýÑðyù·ïоŸß@F‚ÿûs*®FÜ8•P+‹{ߪ4±VInQÑÚ!´6¥e,µ~0ùÉPJÍñá`ÒýáÄûipþKØÍ#Œ¦ V“„^;Fz8A®•0[FÍ¥íí⻢XßÌ8¿ÌÿŒ8 þñohÿ¦yÚ^×°¸÷æÄø¼1ÕžoÃ#? F”Îþ8ÿ™o–bv/Þ,õüþïI¾b¿·òó_‹?+ÑÿYüß«2Å·›ß^ÿùüÄ>÷B?HŒ9Ê%£ùKâ _ûü|1ð·Ë~w®Ü»pû¢÷ùçoòO•“?ÊŒÞÇ FæœîíÊöFþ?Ãñ? v¯ЦžsI:áþ‘kà!·Ïîÿä}×Ïßw»ðñ{!§'ú~ȈùLD>žÏ=Sšuø_$ô3Îg¤æÄ£„~~Á•tž~–@=‹jÐyás.üó7Ê@ŠàŠ&x¸dzº½7€í>ïf.¸ é3>»Í(ðY“"_B¶?H ý]‹ü\‹ü÷ø»Ã=Yqð>qÀ»b?·<B‘ÇÁ_¢(-é?ÊhOTÌ&ø£R¤w™˜cvžÌ ¼å9r&¦ $sÅ“Î|©5km Fmüa{æ8X [öÄL¾§ýjܼ^eÛ?_¤ÂÚ8(ç ø‚¸}À>°˜ðvÕÌ_/×C‡Ÿ]´·w.Y·*ŒKÅŠù<Ùr¾âY‰8¿ÀÓÅ5Iƒî+#j _äŒn‰;%hÁoì†j{n:_\³í\AÇÁàvÀ—Þ˜ù×WóðB Ū…xòÈMà¶@¹V®Á_%¹ €ÿr¶b5Gµ D]©Ñ021š‰ÎcçÂàûÃoã€ùG ®K v¬+2‚¡dž3Š(§ÎÃ#! ‚X/Õ£zÑ,ð7ÿ`Váb9{j-µ3¹Þ8G¹.ÒÌÒ' qí†Ø¦yJÿ†pb#[ö×Eóÿwc~§Ø°–!ß)_dk™ë|é¶H¾ÅSM“ÑI+ÖÈ ¹Ë’Ô¨Œz¸*›aõ/C’ÒczâHè\aŽÃcæÒgˆýÓIÝÚÀ‡gž<÷«%¤Í—éœïsDvÚÚþ:Ÿû3Ñ-óI=ŽØN{\£1úI¯Ç—?ä|}ˆzãpêµC ßNþõÃô›® ]¡W6.Ž¿þÞòòK47ùÕ%ËËJãsPöìÉ<4ôÞŠ‘|3KJ ‰\lå©ÑFy¾æ)*²Õ?Aè£sÔ9jÿ4¥ÛBjµRÐ äði½N.**C#G3¤À|Ýiì,jÁF¥ö‡ &l#Þ[t";k$>  Ëm¦ô·¥5‰ÍúÔÏßLéFÀîC@íÀS©üšÜ®Ik3RÑcTIè„/~|Lùx"ì¡>¥ oL Á˜C8ŠŽ FPuhƤ:l€´8¥ µŒÆvrµi-Ø.3.Mh‹=¤§õȉ-SÄuz§š ¯Ûa  á›J¨ ½7tg8äN¯ß?àV_;_#‰y ŦO¥6â* auÉéíãi ÃÄÚáÔG}ñwûbþNús"ý±”V;Á¨øRë¤ôÆñô'ð€Áô'C¬:iA瀸.7)<36(3>Pí+ˆõÛÝH}Ó?aÏK£ë8üÙoA÷Õ8Õß,ûü=è‘ç!öøÏ|‹ÿøWíióÍÊþþ¬Ý•Ÿ¿+Hñþ?{™ÈÛæÿMÔüGùè›×…§úüä³çøy„JüDD?Q$<{9×ë‡ÊÀ_/ûß¾pÿfàjߟ Î})ãÊÙ;à&ò܇õuÏòrÍövƒ”Aä‰5=¿Ûk5)Âä ÛƒE¾Ÿ{¾ßþ\wH €ÿ™®Yû³Üž„|ïw/xßIÍeÜ–skìf9½Sϲ$€zKÆÐtþ„=wÌœ5bγdŽ[3Æ€ÿöŒñé‚)gþ¤#OfÏ•¢º ¬˜÷ö—,[—mkà–1ç6XËtk»¥ûWQa'Zê©¶‚-Vã~Za|ä/ÓÏfILì~'opY,ü²Ô¸,˜Ð&4ËB*Ÿü—ÙcÛÙŠ"ÝKÔ/ΰSeÃÖùo ê l4ܾ¸ê|u}ôÏD–JÑ·Ìß,7@À5$p±^¤n¬åª±Aêî8Ú¬,Ðë~UiÅú<Èw*L€q|Âj¾j»Ô€^/Òω&ç3P_#¼¤a.[º˜¯X)Ñ.£îF«H@_û31pªpÍDF;øäužÊNÐǶM“{˜CÿÍ|Å¿.Ûþ÷ê š’™!ßÉÖ¼ë¶2`þ73åk4©#µfΦuj#ê“ÖÅ“Nzÿ*}d‰Øk k˜NéYaM,Á(ý³©ÎÄ.ðÿ¹Çoö¨Æ™øNGl÷LBŸ=ªÓÑb x¬÷8ÓºÒçHèv$·ZÆþýˆèëƒéׯNüæHÊ/GÉ?L»ó©Ð™Óñú[ã__[_\3½¬6½¾l{QeZÍ—¯å*¶°2*´æ“­ÂW62•L¡ypùjtp¸Ò²-6lfiXKJüÈ pë £9_NÌá[ý¨ÂMu‡wÛ&ŸÒB0ÍÿO©€÷~• ­ð…¨As„ÀBíUÆ5€ˆm¦ô. ½×HAKôÑ-'6Ê’ê©MZJ»ŠÔŠ KoCmŸS[!ÔÉÍ IšÄ¦ñÐûò˜Z}R«!¹ÍAéÃkPñ/4/É•7¤gôà€ÏòC€èÓ°,k"jD'ËúÁóC * ×ÂTDÁ@ïJiŠ|0u¿?äö`È#áBÿ! ˜ˆ~8ý¬@I€’Þ>Ei‘¦7£YÀÉ@†î$ß!>#?–2êÇhcéõ}Ä=Ä?è•ù½òüžr¢0* 3>Dí/ˆEcY81^»uß4ÏÙÝÌÅìúÛ^úM¡æî&ï[e–»ügDœÿÂÿ¿Uƒùfxþoñ/ÅØí÷7ÿ}@°pþãñöÄœ{ë}¶ïäéw<=ß z?9î#&éS1û‹ÒÌó_–úþxÑïÖU¿?oü^íõSÁ™›‚Ï+ÒæÆì†¸p}]¸>û¾î¾n{ãù^î ÒYBÜIBÈ'.^‡÷?xࣟr=ûÑ;þÇßñ8J >ÆO:žË8 *S,:Ÿ/ðÑÏ3OCŽE{ :áö1!ücT2{Ì5þ—„O]“>!@$ê’ø™KâçHR>GA<î’vÜDž‡›ÐÃ]ˆnÝ2.¸#ìŸ#pÎXgì³x“jÔŒ%¾{ûÅ~²üÝàCQJd@Dþøvó¬ ‡¯ÆvÓ¾–fü©ÎjVó;u‚A³h ܾ#wÌ‘?jÍÒ Œ¢à¿]$øÏdËly΂©¹ÕR…n¥Ê°\iXªÐ£(Ó-aK@«Xß6€í|‰jµBva€Z7 &<Ø1R°ëeúù,©…= §¡7 "ÉVÎÔ‹"ÍS±ÒIíÓÄÖ+#k -3”þöèzæÔÓÍ‹2ãëKtÂë²õùeÓÓ*ó‹Ëv¸…xyÅñêêôÎeû¨Iå& Aèpê „7Ž€køÆP:¯oåëV³•Óœ±Yd9Gõ¢Òþ⢠н’§Ø,ÖByà?³†5¯þ?-5C¾6ßDCóU‹¹S\ 5+ìŒJÀ”æ &Hxï‚Y‘†R€\.øLäu¶ÂßmJè\ƒÞm(Ÿ—kÿ}ÅþªÂ¼.Vlf*_æêŸ‹µÀÿ5¡l…/YJq¦¡SÉó´AgBóTà]µkQ4o×:ct9uÀÕ<—Ö¿ÆXåNÌ2Whã³Änà¿ìì/ ¶Èà¿3®øïˆîrF·YC댜±­ó©ý3Ä^ÈAl)ÍSa·}šÿõ»”‡I7Ž¿:’üã¡Ô_¥í–,#Þzõ¥ö_ßÛŸß0>¿lx}Õúü¢i«L»V€Þ1”àˆÑpTÿÓ‚~¡qo¹¨ÉÆF‘v»ÌI ‘b†2lMîq¤ôÍ‘‡m)Ý–4tËÆì·0úPS š½ï’M4ŽÎž‹$xÍç,wt[ ‚ lç‚Àíl¦t;gaá ”ÁÆBGÆlô~L)ãê-ä.'kÐÊèÈ›ÝÓ³G’PPÅsyr=øvø¬–Üj tá³ñqSÑ5Ø™²NHR¦9#{€fäeJð½p/j'ð_ ðoì›)¨qPj³šØ¤&BFºÐ®‡Ì‚Ö‹N¤w¡~q¨âºSMëVQ»é‰5áw{‚ï þ½7èÁxÔPiìc|-r–¿×‚èciOF’ %<Œ¿?ÿç0ñÞ8å¡„^7LnLkèO{ÒögùîTf»¾`ø"#&Œ ÆñâØÑ»ÈÅë'w½:‚?ÿIò··wiojìq `Fzÿÿ»žO%ÞZDú[Gvë?߈Â^ÿ^&òÖN„ÏÛ‹ÿoóŸçµWnúøäã}Ÿ|¾ÿäéý^ž"BÞ'Æå>ËᜮÌ>{³ÈãÇ*Ïß/{ÿZyþû¼“7øŸ”’ÞÏvø>.|ï}Xñ¿+Zó÷B½Yç ä/ ' ¡ŸüŽÎ~°ÿÔ»ï|ô>áó#.Ÿ¼úÅ‘$ŸY‘dzÓN°ÿóx§EŒÓt≔ð#.¼ï|¿çÇŸ\üü»v 9â~„r„zt7Â>Dñ!!ò#Bô1Wâ1BÚ§(A`žvE*pÖ΂{†ÀAç”±ÀøÏöpá\pxïCÝêð‘ô¾D~ïˆü]üX¢é~.ð)øé #=ˆ+ìb~+Éx8ÅoÑ {M™£V1‚ÿBÙäl‰Ô”=bŽ3ÆmY2«pÂ!’šrÆ,y3¥ª•jÓúUëò%ã":¨e\»d^,ÕΫþè0o• uï,ÕáíÚ€º(*ÀÞ-Ìð/åÉáònEr“–Ô>+Û.Ò‚±¯ÙÎÚS;ÕQµºØ°ýxÃÌ,´ð¬Hÿ¢Üôò¢ù¯+6´øS©C)/YwªÌ &øhø2*@-VÏ*á[Z¿hÞ¨6£³×O¯ÙWÊu¨>'W¦Rb3ˆìÑålÅv‰éUõ4ÚÈÚ,Õ=-3ÌeŽFÐé]1ÚþƳmäkñc¨©i¦t%-.ó_/Ö¬b;à…êù\9š˜™ûX¼§4(ËbŽ| €ܹLž°ÆuO“—¸ã[yŠ2Í_—ÍÀÿýf¶â©Xó*Ïð,K½-Rnˆ¦yã‹ÉCs”1°ÖŽ´nCX2èÞ·Ï!pf ³W:³¥hÌ6`À ðGesüñ™½"<È@o²M8†F—‚3Ç& €¦HÃJBìêB ”vwÀ)€?¿VER½,î  u*©N•Ú„,#01ûTDÔäÁZÒ)€*¶$@Kl3S{A€PWRŒÿ OX 1$é*¬Ë‰Úí`ö©Ó›AY ÀÓ ©²PT ÷`ð—S:äô.=HMïM|òÿSö^m®Kÿ÷ÁµÔ(V¥¸k„‚„àî-uow»Ý­ÞB[Š;Á-B,hp-µ½»<ëùýïÌ}Q6gŸsÖ³ÞµfeÝ@hÒ|¾3sÔ¸ÿXíò=ð¿òèW5'¾•ºýÜî}Ÿd„:u…ÉÂJäìÜìŠxÖ.xÚú )èa£ßÿ_ƒ~j ý¡%ìa¯¸–ó¬šû´Vp¯<økiÄ#øð^Oˆ‹>y<ÁÇ#Þûd¬8ÿG£¼{í…Þvëy{tÈ ÿExÚ‹>úóNûŸÙþë§ž(ÿ þp±n¾‡7õ|­óÓCþ…ÿóÿIÂç/eŸö×þ²MÇÇ–Ûô·îÔßµ‡}КqÔIÏËÕ˜ç¿%–¿#-z×™”}7ó¬?+´ý,ÿà­ô=—b·åq2½XIÎ àò_È/q Ävèc bͧÏ.êøVÊÎŒÚgÄÚ­üß³…:¼ÛØÃv+÷Än‰ÿþô0ëìèƒÙâI¢=Qœ!^[Ý›Ù˶ÛÊ8dÉ8dHÙQF GÊɘ:B\8™¬ÛaS´£&Ô1SÊÙŒákJZRœíTø”€¨ƒ ±5“¶Mü·Æ£„{Xœ£>ð?þ(6©Å;Ä1Œ?ʈ?†{mÿcPÉΉnjR]õ³|˜ŸÝ*¨~Ñy¯GR¦InLiÏ_—ß6™ß_*$õÀÿ‰LÅDZÏxj÷pN‡6·SwF±pyhþÒàô95Áò•‘å‹Ã‹ç—Î ¾ºˆSHŽSúçû ûæO+Á¦³{ÁM’…—ws_Ô{ü ^Ö¸D:Ôþ*G ïJ–ümbç·¼×íÒëÉ¿ à?!j˜Oèx•ŽmDoóûß^¯ðþã8zðÿÏáP²\tÀ/ΔƒÐ#WQ öŸë}uôíõñÕKÃÀÜ\™Þ3ßAŠ0qé|ŽúíÙ‘ÕÂx8Èög‚Báx7ÌØg+à9 úsTÓI]“b¬NœˆÅ^ZЇ9òå\ä?<¹.¥œüå,øÃ¸EøgÊ |˜Íè ˜§›@>tA ÃþUsQí3’Ö7 :§. ý¡Jžj5Mö&Cü•$[M‘ã8IëLPÃtDÛdTó`piûÜÌ&¶Bè4&¬[¶L‡Öø–ÿçcZæ$­bàãdp…Æå¡Âé;™æ¦Cj¦¸ !õµº€Êbàÿ°×3ˆæ£Z§£‡BŸsŠoß1^1þónX†Þ1 ùÒ˜û•‰à¦>¿?îÙïŸ üqO!{}^óþ2–]aymþÕ˜íÏT`ýò.çöáÑy¶âu¡l-¿w:¾u%I1Ù¥ã¶Ì„µOò›ÇõÂ*ÿň¸j4¾øÁð(¹;/èÓs× ÿ ‚À&ÄÄ6à?Nõm"€ñB|3Ø Ž_¨ÌŽGÖkêZNþÒêv0>$ªÑÆÔFVá5¢Ê ˆv…•]~Phþ“&\@+) –±ç>žôø>Á¢ Ÿ"eH6#Э#qøë†â¤ð{˜>áÀuÀÜ—¤§ Oø$ž„¦'¨XÍ+ùsx$Q&)é ~ÞÃ})‹¨ìUv Ë»"+µÉÒ¾˜ªÖ'µ?Ô:Wuìëª#_Õø®Ãç,¨žþT¬bâ=‡¿SSÒù¬3¬¸5´¸9ði£ÿý†€ïê¾lâÞ• JªBŸ—=þ—}ÕÀ¿¯Ílû,=#úä‰xow‰çÉ(·#‘žëݲá^‡Àh°“j°£QÞÇ#<ÁH–žTæo¶MÒ`åEKÀÇþºýþoØfþÓßqühöbGIàŸC~HñÿF:hsåÏÆp 2;úãàÜ2feehe¥¿m»Á®½ÆûÛ9YœtÛæ°+\°/)Ö¶ ÅáBºýµ4ë뉻/ˆLóC™Éz±Çqì?™ùoÇ۲íÙ܃z~û \vêÞªoc¡·Ï„½Û€µÓPo»±¾•‰ó>³@;3Ñqóo«œ]YÜ}©¼‘û\vºÞátÀêàvÓ=f»ŒØ»ô™ðÀ=FLb» `pjBl¿!Ú#¶‘ž­±>Á sÊ}+Ó';d/›¿qiÍ€XÓ>ônJ4;lIŽvÂÁDz<ùû7¦U'ÐS¬cQÑǩ蓌XOýä ó4ÞÖlþîܰƒç…ž_Ƥ•¥~«(x9VX?‘ß:sjh$µ_Ù4[7•Ú>ØhVoV'@uö”jáL?Òþ²È?qhîâÀü…ÅK+—W.jVÏ©^U®Q€”h“ëU%^?78}VºërÉŽ‹5¶·•~O¦bS»—2zþorUïrÔàâªC_vz=”=ƒÏ± ê0›Þ äÚé $[®Mm‡çÄ)CY¸] €Àd àd嬠uØ·j<´v&²i-3?.ü~qìݹñµ‚áµÍ«tÙ»lÅûLå›dÅë$ÕLDל i1²u2¬Víÿ¬íäOZ^ÙR|ó¿|<¼j6ªIË©Ðø•ŒóäKâä9¯q<¸JãúTvønãOèç‡TŽú•i}^ŽûV,„4 »>—¾¯ö(ç:²i6¼a4¤l8ôe‹Ëwß[¥ß4ݲÜ´äݶ ¹mð­ÿ åÛìsûýUÙÿ|5ùêFÿÛKªµs}¿]|´WòT"‘•@ Ù}ð:ŒÑn9.zËî[ÍRÂk…ç>™ò¹x:Ù>Åo„ EÖ4Þ„›qDu‚ó¯Ëè˜ÉîÖ&´€žBð>öhJÛDz'–Ð«è´ ÍêHÜö>,n€ø‘tX“"+ˆ@ú"kTQµýQuQM³Çý.¿'½Åsˆ4áXóƒY&Úiï .–ú<®ÒXE${ßöRAŸ ÈC_ ÒÛä»ýŸöx>”û!¶%Ûáqv(癜î>Ãiot¬¡/U‰ªzåœÜ’^A¥BÒ¨Œ­‡X@ô´Þó^íÉ«W{äÛ ‡Ïªœ¾hpý±-àQ;牔óHÊÒ‰ƒàdÑeò˜ò.QI ÿi}胺»µœ{5¡w›["Šj¸¿–ýVË»«L©ªI}”í,ˆñ8p(ÜÇš8ðažv‡c¤«c¤fòÃcŸÓÉcK†÷V<,àìfö±„û˜ àÐéÉÿ;¬&ýÈÿxºIw­¯*À/qµå †Äïièo–ÊÙš!Ø™'²ÎÚN\àó¿ŽÈ)K¼)ËÿeôB¥*³VžÐ¨ˆ­N®Ok€ÞHNÏè)ÅìiÅü™¾ùsªÅ š¥ËƒÀüÅ+ƒ+ׇæ/ªV¯ ¬\RMåuÀC”Q/Ú‚ïV»õôÈ­_œÿÂ$íKýä'ÛÏI¥ò}¤ÖÌÇJ“Û—Òz–3ep»šÖ»œÔ=̯’“ùêð‰ެ…ÏטÊÈ‚00ÌÀŸêKo^Å"ùþ·gßÒEþ9Øk ü›;£Y(ZÅÝ‘#‹§Ô@ ÿb†b!]PÂ✌nˆS€ÿÿÜž¹<"Ÿ ;à³ Ï üÇù¥YŠ¥´^¤-¾e1£w¥@¿€†I-za|9‹“…z°;¬@Cæ`ÀO_Ö,åȳ{gsz0úÈW!—å3a-cAµ€¾EIûëÅû3jˆD€ÿoó? |ÈW¿I“½Jè]–Èt‚öé°à¿NP§ xÞáúË„°zNÜ4V1!iÔ†””ê Ø,Ó>!ŵÂ4ÿåÇîÊüªõ~áÀH@9ðÔ§|.× ¨O ú”ÿ§DÓau#¡#ܲ^ß{öúÄ8ê–…øË2äs˯-¹7Xþ­3frë?|:ôîŽöï·´® ¿½8á¼ àᯠùg3äð"ÌgÉÇè³oˆ¡ÖrTXÑTÐ/8îÜw<¾{!¦s6¢uJ 6 ¥Àï)nþO¦·ƒŒ§t€ïeº™Ý#É(“]p«KïZ +¢j'éb€ÿLrç}^<™ÜÚü×DÖŽÆ5kÂ*;|µ{?„(œpuX9.¯ø½ûÂ+º‹°ÌÆ÷IJȠ {•ü©¡J¿¢^Ÿ'r¿" §t÷ Å7ã‰mä´hP„K„á7âNya9M…®W‡âìPP~ iF“ ʰ‰,¼T '¬¢]P€<>A5 #WŸ€(à‡ §/Jí?-sú¼ÖåûÖÀàðí8»"^q `ÂçðM)ÿQsØc€³ð)ð¿>ì~ÿ^5ç°ñóÎÂÊ!éüÇ„¾6BßC@òp÷C/û0oû0w{‘‹ð_èð·Aþ»ã7ÿDðÂÃŽÌU&y¡ÿ_üß0Â"¯Ãê÷ø“ôþ_ø¿Ñz–H׬n”­®OŸ <":*ZMæÅ‘MÁæ–z¬­[Ø»¶³÷îf[ïc9Úé8jèáf`É·ŠlMlÉåYäexQ‰®zëüwĵ¿Ñ¶,ÁAVð^†ÇvêØêµß„ÚiÈØfÀتÇܪÇÞmbh»ÅøøNc¯½ú}¡£AäQÃð£F~vzÎØv;Ù·êí¶ÐÛaÄØÊ¦¬XÔ6&@TŒ\oØNöºíb 0öè1íX”£>u̘r5§¼,©€mLÎ#|7S¸—µsc‹:çÀŽwÄÕqNŒøÃÌ8úØ‚X,ÝÈ 9ÁŒwÓOò1I ²JåíÈß“±/#Â&;ÊîT̉B‘ïE~è'|Þ‘O£²ÊÅŸ¼ û²1êyüSUbÉ@rƒ6·[wN½p®wñ¼lù²ríºÜ¿¹ ²ñS­c-ª¤Šváã*¿oŸ½þÝžœOLânèÇÜ6Ž»i˜øÃŽÓÏÝ”º|ßôtLP>UUŽIíËéÝàÿ¯dÈ^e)¦c¤*,õÁ]{ÁÏU\üpM'¶Í§u¯d+VòúÞÓë€Áá'8pK´àõéþµSše̺˶ºÙTžà?¶œÿ ÿ•±×—GWÎ à™l– œÿÙ”ž™T¬ØX‹°_àÒÐÂ)….«xpé'’ÛàC’ô®È’c2'©s<¦i&¡þ°wg1é„•¥y ÒJŒ­ù}€)pû!‡/§…MÀÿAã(§RË)à>+?rës ðÿ†÷ºYàg[8wŒ?5 ½eÀ뉸»vMùÇWãÿ¼3ñ[c¯ÏkÈ`=xIá=¢C¼`S)dˆžV@ò2ä%Ñi" ÈÁJŠ|%A¶,é™lÓE4…7 òª™¸~%^:‘Ö6ž´ïOë˜ÎÆr2âüÃ+ 6•Õ3—#ŸHí€kDÕàÉ“¡8–$¹ƒÌßíÀé=1 Àä±X©2´¤Íý˜Ì¿¨óT ÜrA™ÞÝÁ!Em>÷[¼îv<DoówwBPP:Q3ÈÅÖâ¥À3€‹²~×LàUIQõ šð*ÒÿK2B´a](v„½„çï~ÚÃyê£Õô «äaå­¼-Üç=¢Ê¸&UL]'÷E“ïƒןê\¨<þuéáÏË~ÙàõSç)º1®7ªT!®è‰*íˆ(n Ú&, hà?¬ãÞo< ¨ ý.:ó*§Ü?îu§å¸Û \íõ|/;@}ÄI{‘«}¸» ÏÝšçnËw³#î¶®þÿ&°Û,›ù×1žö´¬;ù°q" üÿ(Ž`„ÿ›‹<7ócþÃÆð·¿l'Ë6/‹þƒÿ¿}«þþ6{ ì°Ú8Õw9¡çånâg`"0Iô3Iõ2HueÇŸ`Iè_€¤-ðçìeúì Ž[Röæ4ü(€ÿ}¦¥ËR_o·±µ™Áá-z.Û˜~»˜Áû`¾û¨“»(‡mÔ~Kj·)k» s«>ŸØV6c“QĶé­+ÂÂ=Øn}¦ “:Ħœ h 0exZP~[ÁVLÎ6&* ÚÏdKl™ëuAŽÌ8'ÙJë€ä‡K ÿ87ýd_óÔà­éü=á@~ëÌ(ÛŒh§,±CnÜÑ‚¸“§£] …Ç/†¸Åñ»æÎ»êõÍñŒ»n§»])ñýª2ä—Ú°‡Ñºbw‹ŸôJžt‹Õp¿-r»vï蹯÷g_7—\5Žþ|kò·;Ò¿°HüÊ"ñç]YeG>k󹫿¿UêÄ 3±M3qÒÙøæùävÀ>ð.¾m"ª¡ÛëQã‘ïzܪøø©„X»š£\ÅÅJpïßžzCûÿàW/åö­‚W\8ˆß¤‹ˆ€*³t¸Ö3}XzF·àü¯]Y=;8—£pÎ?ðOc³äðTd‰ øÿ‹§•ËgTˆÔ‘ÕÎüá·À}ÈÎp,g;R{æR:Ò{þ@õY<ïVa]ë9ìYƒ/áá¼93D&b¡ÂÔ¸ÇyÊù\zNšÜ]-·v.¶k1¡û]¾àÿk£\ÿ­`ð X®üÿÕ”žùØðÿiþ·Îêg"ÇøU=À1ï‡3Ñuc‚J¨v.Z:-Bÿ$¨b6¼i9ºÂ ÂåÉŠã÷T®†ü^Œ—q«ÆyµÌpÆ|+†½KÆ‚*áiÿóÀanÍ`ðË‘ðòVïï¿ß™vË\tÝœwÕ$ðŽEÈ-¿¯ÌÃ.R¾ÅÇÏÏmùý í‡Úß® ­žS­ë ¯I†H3NUÍï#K–±J6›£á›¸ñ9_³š¥ZJ•/&Êæ%Ý“¢–1:ÿC˜9šÐ üŸÈhøêÁt9½Óyò‰¬Î±ŒöÙ9k³y½ ¿ ÃAàm§î¦Óºué #8º™Œ£x"jÏÚ\ïv¸ã‚`UHI?· ûvåtefÍ€°<€6¿ $Eƒÿ‹Àÿùçd§LT€óüï ,VrJ!`ùs*&È„Šˆ:Mx iXÀþß°rà¿<ôD8ð“®Ås.°´Œ,ƒ( “[Ò-(SDVCÐ['U6ø?¬öø¥Úí‡*º(B©×Ï]A¼gM÷ýïJƒt ž)£ËI"¨]Xü‡(‹?ƒ©åÝ…(nAŠj îfzñm°žÇÝØÎu³áyBλ¬óŸüwµá»Ùó\ €HaÃ6«À_øO$€\|ä¿Éül¨ÀŸü÷v$ûÑ0ÿóQ6ó£l3ÿ7/#ñ™b‘€ÓL-Øàÿï°Ò?¸ËÐi¿Ñ1kCC÷c†.'Xî.lowv ;‹ç¦y’笗x\/þ(’SìȈ¶c†[3¹û˜þ»˜.V”“9uð#ü- ˜z,s}¶…ÞnÖ=söqK¦ûVÊg;ÖvÂýͨôý·RV +6ƒCÀ¶|´M¢ðgh@Tà“aÍfÒg:0QÇMnfLP *h ƒ»!ØÃB °Æ¢ ¸CL²¡TþâöcÄ9³< SüÌÒC·g„íÍÌÙfFÊŒ±ÏŠ=žë”ë甸 þð¹Øã×#üλ…œ³»a{ó øÚîØ;û2nïM¿µ+éÆVÉ]IŸîNþdGÂÍmq`ŸîJújúg;“¾Ý›ñþ,€ÿ7[Sïï;Uëò©,äîdLý´¤i*¶q<¦~*NºÒ±˜Ú¹€¹t9ØrJ÷ˆ°>’uŽ_·û©Ï·‚剸æ™äðü_åö÷nIí=DÖµ¼;; ü'ƒ}È0Ï…BÍF—1\,žX½0Œ[f²åà—ÎÑûhtI] ™¸äk6£÷ÕiÍ›óÃË…x,6 C˜pZ3šÔ <™Iï)ÈMŽr!½ 6ŸÒ Qv%c{¯’L[>7@ÚÙàKüngùÓé]óÙ˜ùG ÈÇ;¯De+^e«gbÛyµºÈÖ•tLŒÿqaøŸ×Çþßí©Þ˜üãÊ8JÛ©¡wùý¿åiV“pþçJ\÷\Tç8O ”ÆÍвv—ŸCKtѵ„ÿó1ͳ¢&mH¥6°\Ç«[µþOrkÿò÷À4îµ%üšÉð:]xã¿n†ß@Î@&àá³QÒÅèNˆ†BÊÆE5²à¿îË»euÝœÃ<ä³ ðÿ¿²ä_eÞÙ=œYþþsÍÛkƒk—Ö.hð åÜ(¼p /,pÿù=F]\ë| öÌeáËN‚¸•\ &âºç{§bÚ'£šq>ª°üç±øf;øùtamS¹ Ý 3ù2¸&ù:øupO’Ÿ ;50ߌ%^¹Š1P‡øæ±DÜ {çë5!/qÌ‚Û=Üö\ž¹*¬7yáVz” ‹Ï=©Ï½Îà§r~ nc,ê ~ðà“ÀAÃ/W†¾ì |& z‚…å@Ñ8³(®eTÜŒ{‘$­C‘ ᵄÿ~<žD á-N%*ŠÓðB 9§þ¥ BÆ/“…W€tJ•’ºþ$©,¦ºÚ÷^¥ûU®ßC Pëü]ͱoZÜ~”ªÀæX`‹¹›ÍÚ¯Ç:¨Ï´5 ì °Xb“¦”‡9ågE…n§{ `DÛP1¶T¬ÍÇÊÅ¡âŽ3]õ’¼ÒÌÓC·f öd dŠl2"m³¢²ÄNÙbçɱ‰Svœcv‚X^Ìñ³<ÿücAí"oÙÅß¶IüÄ:é«C™ßØe|u þ‹}i_îOÿ|oêûS¾µÍüÎ&óó]É·¬$ŸmKüyö#Û3Åvkœ?Srëâj“›—;çéBđȺñØ&œ“­X°çôøƒ3Ö|üÇ.÷û Ÿ¢ÁàRðÓ€XH î:íùÿWòp} Iª£OþÑù8ÏäÈ&3º&²ºg ”€}2\tõ¢v‘nF^ÆQÿJ¬ö¡Kî'“Ú@È>¬E§yX^;?ôþÊøóã)íÃñR¬ÿ¤÷|Áoy•‹3ˆpnݱ5•Ò^~ñHÉâ•óƒ‹gð/)y{A O«KïÂ@ „F¶˜‹º0{ºo„ bŠ,åJ²l˜_3À­YH–Ó¿Hýû%íÿÜœøŸÛº¿_ÿíâ¨ÛZŽê}ÁÀo9šµäÞ•„®¥ØN]xË8¿i*¢œµQ·Ç=€ÿD$&6ø?\9P6Z='”þëx5ã¡•…3ò$¸tZÔ~¾.¢aRÐwƒ(œÿIn5<|>¦e)¦k.²eŒ_­‹jì¼xbwá ñM á sÎ-ÓàOÍ‚?7ãÜ2 =Ë hþøöÓ¾ß?}u÷,œÓΉÛ~;‚žÿ[üt…ÿ{Cžþ“N^Ô¼r°>N©"¤„@Å- ¯&3ÁÿµÑMƒøoi Ps+áÎ}ô$"P5牢_ ·ŠgÀÿNÿ'ð+°A€a AE¯°¢#¼¬'ºZؤI’v‰ÊÿkN~ü¯=úuýÑoZ\~ø·Ü'* ¼ûŠÛy»"žÉÄ¥ a ¨áþ ð‡Û:áciFÑÔ›âãÎÎvÀ«ÏÝ–·|ôóï<·ƒ´ÏïDÈOÛ!° øKðgÈÓî¿óßa³üÅÿÿ‹ ‰qøÿbU ›G¥ÀÉ¥4ÿŽ%76c›Y°‘ÿ{N2ót2ó?näfâaìaäªt‚r„Áw Döìhýx{J|Ë)ÁùÞËðÙÁt¶bÚ™RûŒÑ“ø›é1MôÁX`¦xŒ<ŒöÆ 'SÆaÊÑ„²5¦ö2àG[ FÐc›³Y¦LÊŒI™ƒ«Ïfà[°Ñ@ÈÅÇïÀÿLÚèÔ‹×;õX»õ™»õ©ýú”µ!uÈr0¤Ž™Pî”ï6*t%؇à âCŒX; ³@G˜¸YÀ…䩟âoœ²%ƒ üß•±/+Âüÿ¬Hûì(‡‚hçÓbçüØ#Ù±ŽY‡œ¸ãù‘g‚C ìyWmboˆ»}0éŽuògÖÉ_î—|¶'üó½i_ÌúÆ:.>Ý™üÙÎäd?r<_vòfç—]Á÷ú…%£ÑÕàöƒÏ?#nžŽ‘NF6LD5LÆJçR:þ¯r”+²•ÔžÑðšN·{õŽßʼžŒò«Ç„us’6z'c/`sg{bJy|æ\I&ƒßø†$‚NŸž¸› ,§ çØ_¹0¼vy”xþóùô¬ºñІ?žÌ—‹9ÊÕÂlÎS®œéÏÐ ´é§Wþ-äÈáÉÁà·®—3äØÖŠsº§Ò:çižcƒó©>²°`él?¨|øáò8üðTp»˜Ý ôó‰\9þ…™¸qFÔÜT6)]ÊT‚”¬žÁvÿüdòo7Æ@ð_§~«þýôÐëtÅrR÷«¤ž¹¨Öq~ÃD˜tBP£å”üÁ­¨G}:ª~.Z òƒÿý¿BéRTvšÿwÿj·GÀP ]Tؤ°qVÔŒ1BhÍXH…NP·ÓºÓ9ÕÒoܸ¸¶Úí‹Ï·&Þ´]3á\7Æ)@`·L€ÿ~÷žš¿ØôÇgºßn½¿9úê"Îb%ÅÓðBÕ› ƒ ùràÿRŽb9 œüv\¦“¦X²Xù|–|!¯oõìàJáÐ|®j>CÑÄDÓ1­ã‘ ZQ¦ÐÅõ@õÑô6€ñìN`þHF\Lå÷Â5ØXVÄ(Ä™Ý #‰-Šˆ*p8CêOÃÜà?¨ ĸ¥Kˆ›eþEôx?ê’íðå¢J¥ œ©ß}0ìÁüá¿"ôeéV©ÁDPY_p‰"ðy?§rW­€@@Jö"A @ø?Q¯ «î -™€‡ž2=Í- €[:x܈…F*^9.Ž$MÂòî¨J("«ZŸÔºýXsâ[ðÿëÛxü»:¤¾¿¶> *·-Á[9q(¨è9DíÅ ü‡„ÿU¼_«Bî5%ÕÞ+ðãñl"Ü€í˜ÿþ»[ÿÁççÓüCip¤³@¶ð'öïüß8&]D¢=ì6øÿ üü8 ¼?¹ŽÝ” "°Y°íËÇñ/†Íƒ…xz®QâG32Õ35ÓÛf¥g³Ï踽¹×1Ë s®‡9ÏÓ„çnÈwas2¹ïnËÒ‹µ¥ÄÖ8¿Ÿá¿‹Bçß’uÀ˜ÚeÄ´2`˜³™4ÿYü·Ò£¶ëS{ ÖF ¸5 ê3öê3vÐT7e3Môôðžl|,ȇ‹fÎdÛø’¨À†@ÀŠE@@±MŸµÍ…Úe@í5 R¶†”£1ålNymÅd¼}Øžiƒ]À`8¶ú3Þ™çÊLôb§ø¦…˜¦s,3yÛ2Ãvf‡ïÏZg mr„vù‡Ó‡ D޹Q‡rÄöy±'N…yŸñä\´~bwk·ø³I_ؤãí¾ØÏv†}º+ìó½?:õôÄÕ*ï/Û¸¿ª£^ô Ÿõ…=ë/ªÕ!ó¥ãÍÃü*øDÏ%uE—Òe‹i½dP¤6¬ºýäÝ6ç_ûèÍÝSÑÒ¹øvœ!FçLV Toξ;?¼†'§*4:ÿöì0]3 _’’ÓйBÕü5é>þ¯]!¾ÀœíŸÑ«Ké$~ûŒ<:ÿt½Pz¡ ï·«ão.j±ª$©œÿÉ”vðÛ!¸ÀÀ2¬ÙäŽ/ЩKí€GA¼0“¯àùɆbðÿáKPœ5}vp(®i"½sþ°Œ®Õ\õ4݉¦ËVÌ¥ËÁù ­ ®XJ•/e«–ΪéõdãÿûùÜ×Ç‘ÿ§û_ç«;=ôÇíbRל¤c5±wJ$åÖM °Ôgˆó²ÕùGuHñ2àQX1Y;#‹nž‹”Nðë ˜àÔ,ˆZVb:€ÿcÜ*`;ð_yò~ŸËmÐËq (ò ø¨³‘-³áMSܺaÿ à?v"ˆZ'ÂÿxFÓt÷ÛÝ™7-¢®šro˜„|bò¹øÉ 躥 ?½èçã¿ß™þ¿½ /û0îÜ¡w.¸6*@rêÂ+öqS¥;ã– Ô+tiÖòéA,ÊPÎJ:fcÛut€#£ê'’ÚÁùȃçðà“ ]^øÿp ?Âszæ¼æ¸º:²šð ò›ámÀ‰é$³7…-Æàó÷·zÞ‡[pé‰ÿ19O·Èù%mAÿ;÷Ûýöþ«Â*þXÛCŒ[®-U• p*5¡¸Ü'² $`\Ü2Ó: l6 ‹š@ÔüªÍü'ÐVFz„iþ? ²ž¸/¼B)ÄP+ïE¿¤;¢\SÓ/i€]‹ß£ªßTÿ¦î$vTœø¦Öý{€f¿»Þ?×yþ@[ècið½Þ£VÁZ"Šêøš„êÂÔ†>ª=ªÏyx“Àµµy8ÒLøŸŸïf>¿ëÁ0W›pG®  Ä6üKEÇ¡ ø ÿ Ì7{øøá¿ä?ñCÖ;ÿMÿÉÑÀfþ›˜ÿ-,X»wè±3õu± õ´ä¹™=Œ#Ü Dάˆ#Œp\æ%°¡„6,1]Q)<À݃Îÿ‰­L;sÆ^cæ#ÖC–¹>ËXIƒŽ锕!µÃ€Úmˆ Ÿ=XÀ  F¯ÞŒ­gÌfëëÓ 0Ó§6˜¿Ù,Ùl°Í°®úÀTœüUô3E±-ð.LˆšæÅíóQ­ >Ï@&DÒ)QËLTðFÜ2ŸÜ©©,:zõ†Yô óðë¦Ü;€[¦Á7Ì9y”gïλ[Úßn¾½®…($àÍ-áÿû«#p;—Û;›ÙC‡Š¹dܹ”†è:xUOiæN©±tjp>K¹˜&_I‘ÿçbÚ@†„5ØÀ×Büÿá”æ± Lþ€ÿ¯MoJm&þ?|g*W6žÙE*‚Àá'ÓxFèµ £)mÈÿ¬î± ”€Áø¦Ø†œ7‚ÓÞÂÊÛ½’íÊÐ: À‚Ͼð²þȪ¾ˆr€zŸ[|îuú?êò{Òíÿ´+°—Hb2¿`>ˆ»#Ë4!¥êà²An•:¤¢:Ô:&nBò7ÿû5À¸¯VóÊI‘i7 å¦òÐgp QhÏ‚+ºB±) ƒóL)ªVG×Â_ÐÃ{^ëñÓËc_Vº|WéümÙ±¯*œ¿€Xnë½~jô¿ÛðkSÐݶ°uþ7 7 Ÿ4‹ž4pWò4¦=ùIr^èhîjÇu±#üÇÓ^ÂLò»:møüFbü¥h³ÿFà¿™ÿ±›2<Ä$Þö`q>Äà:ÖË /|ìÅÞv`pñ§ù&?±ÍõB` ÀÀ~RÀ1Â3s#S3ssæÎl;[#g‹‹0wãHWƒg¶ø3Ú ›§Âm(ÁA”€è”h?ƒ·—°›ÎÿÑ-LkSÆ.cØRŸm†Gøä?H'pÆò~}¬ %iðüô6øAþ³„óá?^°7¢„?1ºÊ”Iàþ?¨ À߯Ï—YPî[©€w/:ÿ$ÿã€?xì{œŠ;I%º1=I>¬d_vŠŸ^ªŸaš¿Iz€yVà–ìÀmÙ; B­òƒ·å†nÏãoËßYfwÎÏóÒ‘ÐÏb¾ÜõÕ~É·¶™?8{êñiïÇNÑÝ¡´Z]~ëXVãl~ûû+š·ç•ÃÑJ^‘.®a"ºn_1Ä«øqkGš´üÆ‰ØæµxþSñm³‰Ó±-ðaøw¹ÞWùk9“Âú)qótB;ø„ÀCR4nÿ«ÓXÕ ü'ù`>þ¢ß®¦Ço*à டŒžþ/Àµò/Å^àyÒSà9ÿ«ùªµ³ƒt•¾XýêÜ °z,µœC]zöðæ÷ÑåFƒ«9}3ɤ•¤ñq¨Ñ ÿë«£Ëþàü^pUÙµqˆ ÆS:Àçijà<ÙBNïRŽ èÉt–b*]1ŸªJG8Õs’¶W¹ª÷—FßÜrþãÓ™ÞžýÛu݇‹£¿Ÿþpvøogµ¯sT‹‰=¯R°Rø?!iä•v{ßëõ}0ŸØ 6Q5Y³ß¾’Ð5Ù<)À¬þ”°i øß9%jœ’΋ÕžO4î7ó)¹{2ª`;+jþ÷û< .Ÿhšnþ…ÕME·Ì'´O%I뽿½i.¾i`·-xŸZB tÍ4äËçGÇ´¹s=¿ÝѾ½1´vÞ5ðÿ·k£k@@–NÁ{¤€·r®L%n„LÂ¥03iÝð’6í¹fØ^&xÔÞÛàüÛ[0ö™062ÿ¦lbëð3þ([hwSúôé0M~þ4ÿMõè{~Lû¯gþ?:ÿëqý#B~ƒ•}Uê}­)ìgUFÓÈ©ž±üι3ÝSm³§;–Îô¼¾ œÎ*xEÝA†E“1õ‘µš—ƒ\”ø,LG·O‹;æÓz¤˜üIÃñr¿b€§Ë½>ßbÜÓÊ­ÔÅH!:O›¤å‰·Oà¿H£éAgrÀc¹Þ;6Ûüç 5À€ÿÊù¡1¤ÃÞ+Úüɸ¹ß.â:°<Öí` }à4""RÚçrädŽÀB€ÅŒÞIl\êÁÈ žÿÒùœe}inA–Îö/ªÁùø¿¾<„Á­÷tGØRaßr¾øº³œ§ÂÕ0iŠé„îá°zp¼±û)Wùþ²öý-íw&Áÿÿû©?.O¼;;üÛ™¡\ûãÌð+Òû^¥©à•œ6.JÚ碛5¡Ïº¼îª9ÏVÓ;g“š‡#ªt↥䮕äžé˜Ö)tॠ‹ ð1¾e>J:àS<àùTåvœS¶×¾˜€x¦bZç$sQ­“aõCþ¥À,nç_Ë­†‹¹øö¹´ŽÞ°'_îL»eýÉÑm‹°O·„ÿ¯š_4 :g N®üðÙÈ»›ƒ«—Õ«5Àÿ÷×Ç–ÏiϨ~¿>¶tOXPÍéu6+Ù*ú4xIåðÖÀ›ð‡W â¸Å Ùrºìu†j>®~5¸Ô‚€“öSÚAÆÓÛ¦rø]ÉMƒ)ÒÑÌvà¿.§ø¯<9€pc#–ÐOnÃÝ£]9=ÚôöÁ”€¾èEd•"¢r(¢xÛêýÜ{LïpKèA=Hc•°\QÑË}Þ@OÝ¡§ñ·ù>ëð{L‚ÏþÏÔ/‚KC*8•Ê€¹ÿ‹~>DÍ1m†áH)š¨†Å-d‘ —£Oz‚Ÿaßqh1™-ç”ô†`Å 4”¼²î g¸;˜ž‡Y=q_j‹\\Uxà_íöCûU®ß–;Vãþ}“ï¯ÒÀûÀÿÞ#ÂÿVQqKd±4âisØã:^QkréCÉ-ñ‘£aÀW[Lõ» ÿ¹®v<·ÃÀžÛ~›µÀÕñ¿Á_àa'øHþÍ) ?ùýüÿ3½ó¯þ? 6l3ù£¼¡}\ïé‰öç¯û7 eBÆ&úFÆLÊj u`uÜ–é„-8ÆŽ>ÆŒ;B%8 3£¬ñð”🻇² ¸Ê<¹•áhI4c줒ùDzöz&‡ðßÄ€25¤Ì麠u°°M Xëä7À4æÿõ(0;­Œ XOþ|ôÿI-Ð:ÿ±ˆIú…þ{ ¨ƒ†ÌCÆ,'ÖIK=·-z~;Ø¡»õ€ÿQY¤þó#ÿJ€3•p-Ñ…Jre$¹²R]Ùéî†Ä2¼©toVº¿QFQ–¿é9‡_øÉµ‘_ÊbŸ §— ¥WjsÚæ. OŸÒfwã.°éü©Žåž©ô&yX1À_Í1U=À}IZc†x#‚šÑˆºÅ¤®Õ4zz©¸¿¾À‡¿owþUíÿ\¦1aÝl\€'!Ó^:pr=ÛCÓþÁVNkÀÕÏO÷ØÎä+ÉÆpûqÂøÿç‡qènæ‚{’¦Ñõ®À}nè·ËH¤Õ³¯±#X ×$iü§—<ö¡FœÇ <øüº„Vì>ÎÁ”– êÏj€üo®ƒ­\ÿ~0x¶·WǦóäøó– û±É«vWOõ”îÒå³I½ãÑ퀅¹äžW¹ qª7úßÝþû§º×'?\ÿýüø»Óƒ¿ÿïUÝï§q MLÖE¶ÒWºtÂ:uH1ð8¼l5«{:¡I+ªÖIšá¥^NérΈ1y2Ý_®dÈàGtµOŸ÷Sú\Œs*–$mvˆÅt±m_,J:!² *׆”ÏD6ÁÃÇ#Gx5 ð´³Émšè²>ÙwÛ*òKÁKþMÓàk¦A×·ð²)×êàoÞÝÒ¼»9°zQùú ®cx}yxõÂi‹€ ^d,*üýÂè›ÂAˆšÒ Àþ“ néeš8b5SAvÇLDJµ‚†±ÎßX¹’ÞÀ Lj"\÷ždx¦3{Èr.-½œKKËÇP‚t$­³@Y]Ãim¨$õª˜Zut­Z€3™»ž6ºýÒáóˆÎ•‘.- ±:¼¬/ìeOH º;ðI›ÏýVŸ‡àÿƒ^´{?Ä~ð ™oY7© Ä@TÚã]„À©‹’Ž‹Û&%£Ñ-Cx<ÕüÑÁŠPA…:¬\}"8&ŽV°Î€§ 2²Ðš°J%§Tü¢; B•ˆ [¢ªAÅÓš{b«š‚Öxý\éþÜÖzüPqòk0¸¨÷ý¥ÁïçÆ{­\Ðý¢C\Òý¼Yð°†óD*)}{;öè1,õq§kû„ÑüçÿÝìùî0øWþo&?X¸§}øGìÿ;ÿÿrÔ‹©žÉç¯ÛGøÇû:‚ýEÐá÷:äô²yÚü¹h {Zìÿ‰ü¥RÈÌÜÐÄ”maFí´¢í¦N¤üᇙ1GèVY;Jlƒ#Ô€ÿáûñ5p—Àßu+ãˆ%ÃÖ‚±Ç”aeDY®Ãƒÿ`Æz˜© î€FøO_›2ÉÌ èo²14@°ëaQ(#bn¨ÀFÐ_òÿVz„ÿLÂÿ=zÔ†­ÓјyÌœíjÉöÙÆÞ©Çß§qm«'¶e‹í±øëÿi ÀУhñÇpþ[â ´$gFŠ‹±tw*ŃJpg§ø¤¸Þ ríÌÿaæb×üÅT^ÛÌéî™3yº¼þ9<÷”Må´Ìæ¶iãkdü¢>ÞsXèsMè‹—`ÃÜò1aítlólbû|rçR›ü62ÿâ§ïÚþ´³4^;“ÐqÁrvW!!³pDð"ݺžó)PüÁu§;§úÀáGw1mö”Š”z’R´³ƒ‹8ácìö¢3 8à–s8ÿy 5Ð Ðd;Ìt6ÎX¦ÏpšÜ™A`>œ¬ùÉìY-Ä eàù¿º2‚Û꯾½1A2?¤ïà:pøµ©m“Ù=óyjúè¹oñ´rå,Æ5™KîZJUNÅt…7Í$â Qš+Ão/jÞßþÇíI¦ßÎ}87öþÔðßÎŽü¿+º7ùê¥tð!Y9Ù6ݺסå”ÊüvûÞŸŒ©}•Ý3ßLø//d÷îDLËdlóbzÏJ–|2®i,\z©Ê¯XãSÔçþø?Û2%nÖŵêâÚñ :Aâ2\îëtdÜy6âˆÆåøÎWéò…´nm\]…ç—_ìN½m}Ç*âsî-3ÎU“À«œ|–ç7²¦NIßÜP­\P¼¾Òü_»!À¼8 Á— Ê¯Ï “}â%´ÎfôbQ.݉5ˆûh Yç»'£Z'"[tÑmØ?Io{Ll¥OuGSÚfr{È¡HÀX‚Ý{:oé] à(é¸&\Ôßwƒ`a8¥aP‚Ô‚ ð«E5àÒ·xÜþ“ú| Œ4êâü‡¢Î@ !@»ÿÃf¯ûm Þ›Ýïvz=”ãDˆ§ Ÿ"ø º üïözÚëS¬(Á³€èmdc¿  T®G£Iü2~€Pœ ·¸ª>¨T@R‚“BCJdAÏ{ƒžC8 VõEVkâR¥šäFyte+çiÏ/µÞ¿Ôùü\íö]Ù‰/Áª<¾¯tÿ÷ÂpîƒÿßSÒ%) hŽxPË}Ú(.}sGrì8Ÿæ˜‹ðäÁü?Jø/p;@jþÝí߀ÿ†mä6Ò2›Ýþ?+<ÿµ˜ƒ}ì%¾`›ÉOŒäÿ7Ã?ÂÃzCh0èp· yàÞ? Š`¹ÅÈÜœ½ÅœÚcE9î¦\÷SA¶”ÀAïÞeÆÒƒ=#PûY‚},În†Ïv=W+ÖQ ûš1·3,f†lr컑ÿÙà¿ùGø[ ê-!0ühú|¹EÛ{I'ÀŸNæãÙîÇXàO ø[2–Lêc/]ÿɦ ýàQ'SÆ s–ë¦Ï6fà.wΩÚèEÙP1‡@@ÝØÀ§õí0Zx‚I,Í™J=ÉŠ=ÉJò4L8ƾîã¢È»7S(Æb­u¡bþÌðTî€.£<«™ÌÖÙœŽaI­2؄ة ) -'TŸÖcÝHBûbj÷|jÇBZ'd*¡Uô¼îð·­Î?«üŸƒ§4"¬þ@\0—Ñ (ò£ÿŸ&[H•-䬧küÁ€@ ¤zžr:[6õqݹ°WtÚçÕ¹!,&r)[ʑ钱#i*®UôBã÷¬Ïóñ·øSôã;¦;—3TKIò™˜ŽN%ø®>LD5,Ä·ÏÅ´,ͽÎT®åöÍd´·ñîÿ`sK ðÿ†ï¦÷ ÿ9oxšÍíŠzðæšâíu ðÿíÕø§½»6ñþ†úÍÕqxƒàƒ×dµpTÄq<¥C—Þ AÙ½” nç²°5ԢťL%ߤ¸$l,¦ ¼eð{Gãš'“Ú ncÈ–Ñ0” Ž}+Dx ° (§‹\O¦uŽá к(Œ À (ÀZд0<îÃÓƒÑõ½Ü—C‘µC >€çŠ "pi P‡•‚ @€yàc" í¾š=±ºýÚìòK‡ûýï' ð€Èh_àK@@ Âê´ `ƒ‚Ú¡p¼ÆÓáhlsSó+ÈF€öØe†ä/&Mа2: xLVÆ+CÊ è ,–óqae_tMBÃPjó`ŠT)®náÕùÝ­õþ‰H@éñ/JN|Qzò«jïï!hâ=l> è‰/ïˆ}">o•T<ý ùïnÍó°s>$r±ºìþ‡ºåy8ðÝ÷ÿùnöä߀ÿfì“m/䚸åÿîÿoð½¼gsI¿ŸcœŸ=±x§?§ÍQÀÿþüß8qX¯>r;*án»^qºiôù3¶í4µ´do5£ö[QÇvQ^û¨PJhGÅ ŸÌ"~"­YÂz¼]Œà­”«•ŸÌù¡á>¼‰!fr°’SO„¤ =¶¥>{‹!VÑ@ÛbHßà¹ðâÀ3÷b'EŒðŸÎó`ÎS/ØFG0€jè±!dØ®ÏØ¥G× 8šPÇͰÈs+å·“ ÜC…ìc÷R¢ý¸/FŒ½Àìv`, ¢SCëBbv,Å‘J:Ê–7Lô0L>¦wÓýD{â7c™­c]º¼.mfË`rûXŠl<±c2¡~)K:‘Ü¢–)ðÓQ®áW p«´Üj¥o‰Ú¯t„W7%’Έ[À±'CæÒ:†#k;}×ù®åÄOš€çCœ²þÐ2ÂГóqI:²:©k>©çM¦ðK uÖNiÀIx’Z’öÇ]“tÿüY@º€µ÷à^."À‘08«‡^Ô‚ ¿4ü×ÎùÁ]¾0ˆE;—†Hvz2]Á‘äÖ™ìWzEgþAwæ2zfè‚O€ÿÛSý€÷wׯ׮Œ,]òƒ,^-ÐåÉ2kàÆ_[.Ô€Ï j2“¯X,\,À¾³å3ª•óýÀÌh¥Ëb:ÇxÓâ®å<¬P}smäýÕÁ×ÿ¸®ýçñ·g†ÞŸù£pòog&þq~ìM®j)£w5Kµš90/Ÿ‰í^M‘ÏEKûƒŠdO´ÂÊ•´®ÙÄÖ I£6ªø¿’©€;ùÇÅ-$ÁŽ›Ž ”Si­¸¼ ¾­/ð¹Òçi¯ÛmHöÇ4é:à5_þ§*çã{´‚ºá°ZÜ€Mº6šg£›Áÿƒcdš¸ò"çkŸl½eqӜ˒wÕ4øÉ<$ |rââl¡ô÷O†Ö.kÞ]¥·í ÿqïçåÑåóC¸(Ã7xƒ R×b*«w‰Nôas\¶l&£Þ/\»²•'ÅSñ]#"騰i<ºf2b2 7PãÙnr‘€ÑÔà½X/òÌÆsa<)NïšHlÕF׃o*@fÊáëä6†©´ÎI“6¶qHܨÕ¨•Ú¨º>ÎËÏð ËŸ‚ ¨yèဠøw<";­ÞÿŸÛ¼´¸þÚxâÇv·{2ß"܆^Pù0§Jéû¼Çã Ü*‚KûùÕ@~°Q#À$`8¢lô *úøeôã,ˆ.Nq7ÇPãôi΋¿Ç=ÁÏû¸ŠÐ2ðÿAàË^þË^AHD@À”IM+¯¸!à~½ï/5^?–»~óìè§/Ž^éùmCð݆Ð{Ü­¢â΄§­1e µE’/ÄÇóܭüÃ]ì#]m"\€çÏñ8Fø) ìø¿ù¿yçããÜÇRÏõþN4üãý6ÙÿÍÿÍ3(°ÉÕ$@èf@JO×ÇP´]{-·nÓßnAÙXQλ™~û\–È üÿØÑvìH}á~}ÎF€%uÜ‚íhFYS{Œ¨­F˜Ø76`"ü ôMõṈ̃ ˆejÀ‚ À܈µÅ@Ìʈ F«ƒðßÊp½(h‡íøÐgo7Ä>2Z0½óñœÝþ þ[maÎfYèÑ£C„¶ÑB÷ltã²€”ÛVÊ{廋â碌?J€-;ÖŽEK;Öûšþä€@|„¥bŽP©TÊa£¸ã¦qÎzINÌkÎG"o§KqÖnnÛXNëhzçdrÏTb›.¾z:çeu„@”Zÿuáÿ³Ò¿TáýRã_pµO ¥ºhäÿlržŸ&Há3Rwô»V—_ûü‹µœò ðü£š€QðyŸÌèÃÿ‰ŸÔ5›Ðõ:½lÝ"*€¿*\Ú›§œ’ù™9­š>Õ7{®ñÒ0©óiÀ¡j§4dº>)EÏÿ¼ö÷k“,=×ÿæÚØ»cKçÁuïMo#uƒ8½¹ë‚Àù‡Ðc6½{.µ üç×ùjÜ5@Ö–]ø/]^¾6ü×åËÁÕ‡þ~eüÍùa@ ˆ¸¸éìÜèLâÛ Î÷ãúƒùjšl:¼yŒÓ°š¬z]8òöÚÄïwtà-ÿóöè?nŒüÏõÉ÷…C¿ŽýýìÔÿžŸþŸ ºWô¬¹•̾¥4õ´¤ø¿–¦œŠ¨WÓhšˆ®[‘Jh™Nl™HÇc›R{^e«g“ºA¦q%:öMªÇS›A[!ÎR‡¾ìó-BþsÊgcqsÁXlËX\ÛBšr,E1.jÖC1—Т‹j˜·.§ô¬f+€ÿcé õÁß}¹'øË" øþÿã@ðÿ/ñîlë‹/~{]µrVñöò0½ñg`õâèë+ÀÿW—F@ï 53ô rR3ƒǢ žÙ3Mó\?ÈRÎ¥Ëg{´M#áRø«à¿™ŠW >0Ä2 ëOm×euÿûãê´ÉÒÉÌ’ÊÊlÏíÂ1A  8ö|{œóY3SMhÆ&¾Ì^ˆFþàù‹û#kœ’!au?·¬Ùõ§¿Gݾ±E‹Ñ –ƒÉ8Ï0 ð„å:¡Ïºü5¹þ$=ù3„àÞ´¹ÞS¿TøɽŸ…V‚ ü{=Ÿöø«‚ËÀMy‹h„פa@P¥Õi#ëÉdi2#£n€Û^ †ÁϺƒ@Jä!¥ À—œðÓž°Ò¾˜*MrãpFëHF›JR‹‰ ¯+ܾç¿èðígÇïTùþü‡€”€¶Æ=l‰.þ?ý<úèQ®ÛA·S„›c´«­Èí ÏÍñ_ùÿWÿÿ/iŸÍð'!7ÿü7þãÉ, ž–‰¯Ý¿ØÇ ÿÈáGþoöÿéÀv³à2ÏuÛï`°}7µ}+e½ql§¾÷nÎA£H;C1"Kå£íBw¯žß6=3Ö!K£fú; ±ëÊœnò"Ǹ&ô‘.IæoѧHò=@cÆ.šóV˜ ¢Ì`&Lˆ@€ö» { ™à·ï×_¿óvpþiøÓçÉŒ¬˜háxþVliÛÁfng1èãÖ.}6hÊ>¶µ!û±ž“‰ÞQ3½–ú^V”ßg;l?[dà íÀØlÏ@Ã@€pA«@Üa”€ÈÃF¢# 'Mí™×Û“~·2³e:½~*I:ß=œÜ^Ö ¸V-¨n+i Á³ª~ÎóÀ"¥û]µçmHùTTÛ„¸s<¾{$¶m*¥s-W1SÝîñ}ÛáŸe.4~%ÚЪQ>~&Å­S‰XZ™Ú5‘Ô>žØ†¹úLz!KJ'ÖÏdáT„µ<õ«\Õr–PLB@îÌ)å|¡fáLÿÖá«?V‡â©íóϤËp´ržf)WýúÜð»Ëc﯌„Áá_»2øö:î¦ÁîÝtìö‚§]ÍWÿ~üRV™Ð ZCRo®Œ­]ž=­X¾ÐÿúªöÕå!ø∹BÕìé> 4˜?­!‡˜¶€Í ò©ì®ù3êå‹Ãk—Çó^ç M‹;´aµÓ±-¯óTo/h?Üšüp[÷ú*V~þýÖô‡ë“ #¿]ùýÒè?®êþ8?º”®&¯¦öaÖ(¢y)®k9¾s äeà‹îàÇs)­¯2ºfâ¤`cÑ8y‚©µ¦Ž‘ÎÆµ½ÊR¾)ÐбeËY PUÈKMЋ÷ãa5 ñä€u2ªy!¾ëuŠb9¾þሚÅôž…d唤s&¾S'i^Êè~{ºïÕ)Ù\vk¯¨øûƒ·¶$ܲ’ÜØqÍŒ{Í<ø¢‘Ï%ó SlߪÀÛ ç»Ö®öcCôù¡Wµ ¹ï¯½¾2ÁûëÍ -ä Q†` 4l6O¦3{€É“É3iݤZ œ ,v­¿BË©äÔôsªÂkG%8Þm$39ƒIÍÀùñÌul•6¹q!¿w*³}"Ó;#iícÚÔ¶¡ämÂÿGØ{x5™vmß à(Ø»c§wE¥÷Þ{ïEE±ÒìÓgœbo‚ô^¡…@BBB/"Ò¬Sîû~ÞïÏøŽ}!¢s¿Ï»Ö^× PBòÛåÜûØM"ßY@%Bn O\äh’P‘(Æ6Â)È#j‘ °åïò€²~Ÿâû{­Ö·¨äAšo¸¿ÇÑø³¯gmÈÝ `´5Æá²€ZËu~‚Áq²¨û32·’N‡Â.Ç¢NGšèt)ð¹\¦QWÜ0G Ô4ÞH§º>¥¬#¨Ë£&ò*îñ¦sÜ#ò,j¶»KM¡ÜZÉnÏ"¸ d´bÀ¿¼?¢–*ZÂÞ„šöÈÒºÀGÏ\nÚÿTbÿó“ß<0¾\`ñu¥ý/õwê½î6øÞúÝ„–6¦W_Èö3Ûêøe€ÍßÃæþGøÛXï „Ñ% 8CokCu½å³âÿ'Ìg«I½_¥äOð·5T·q.uõ¨«ù¨±é  w\fNF°0GÃPÚ/lG?Wý;|FFþb£ ó·Õcƶذª¾ÒÀ|ÍŽÝüm[xû¶ðÀ[ŽÿA+à 5 Cõy$õ°SÓ~³æ‘µû×~±K‡†m7¬à/çÿš%þoX©±q©†¿m%i2¨Îé¼±â?sjþoÿoüß̹ðŸõ|®Óäs•þ?ù¿YSs©Có9cqÜ¡°iDïYÁß¿RCßH›oºšx-Ïv#Ïm›†÷N~Ð^¦Ä­‰7âÖñU‰€ÑÇpÓU¡æë£-VÅéi~këØ™tIôpbãHLÅpTÍh|‡2Q(‰©ê  Wf³ç£V÷G9Üí¶¹Ûc}wÀ¥h<°v2¬9ûxLûH … åÍG~©5ÿNtø¡Ø®@ê\Œ h( ÙÁX”`4Z äÄÒÙònðŸ,&w°¢ ‰3dJÞdJ™Øéíp½÷ÔlsR̺}@]ÄØ3lë7&0Ëm˜"áÇÄŽ±„väàÌ›óÊ|ý \€ïtP€Óçy“ÕOâBG{`p@ã‰Bd¬jô.äý…Q$ /Oõ <|!GÎøÏ² $ ÜøÑî!:Dè¡Ôi½yyB4{¦þ¼böôÀ‹ô¾¹Ô¾‰ðÖ‘ z„ÓÀò{pþòè‡Ë#ÈD>\ÿÿuyâï $ûöWîðß9Ôþ/¦I“û^FuŒ‡´N~¤ Tq.Ï¥µ¿Jn]ÎDøÀ&i,D’ ˜Ké~w²>KJÇÓi´~·ß»üÙ=D1§RÚÁu&º“6KF·¿ˆl ¯ŸOÁïLÅt€ÿÈ,Àÿ7'zæ3;_¤7ËbËZ\¼º)îòÆÈ‹ó×ûä­qÍÑq<·ÚüÿÕ0cäXíB®Ž’³,fËßæÀÞ_TÂKÎQ¼š½:#›9%eC^5UìÓ»˜ûºiÉlf;jÃi å)éÂyjJ|›§œ;KH7Æ8|[®5]2“N2•“)íp4¬Ûç]Î 86sJ2}JLL»0ˆà7Ø!ŒMþâWâºJ:¨àOmŸÔöO5ÿsò¹³ò`r²h[úáòwÐÿ:WFð'þQ (K6“Eü‡k†œ£ŠÕÐpÅ?—jhH9€tf*¡c2VZ*½«Á™g%ñß§¢Ï¯¢?¤¯|(Q0œÜþã*‹©&&OmK!§ÀÄB¹/x‘Ö)áDÞäýœÔ³’› Àÿn2­ /ET½$¨¢“hîñxÚëñ.ñ<^ÆéÙ¬®Ø«¤×ûy—ûSÃ}n^€øßdý{ýÁŸk85žJÓï«LÄC„vD.O%¥pàk!œB›ÃÃn×gø †6F¶‚ÿpg\ PO^%Lÿ louz„k·»je<®Œÿâ%þ á\ à=!ʤæ¤I|8¾²=¢¸ÙÿÉs‡›%¶?•ØÜ(8øí=“Ë,®>·¿QåúKƒ×o­Ñ%µGŸrŽ<¸7È~‡¿íþ@[Ë ®ŸÍþ#zà?>ôµ5þŒÿÿ„?­n\‚ÿ'ñ?õ||ÚÛo²ü«Êþà¿úü7ÂÉ`¹…;0þ«7˰õÄìP¹ŽùŒÿÞtx±åËVíìw˜kïÝÁÛ·•g¸™gµï¼{…÷>P}Íp>,X—ç³—ï´h­âÝ¡MǬÀîWg…Æ*-¾6wÚ‹×sŸbÅÀŸâÿUjþkl^¥às?ëVÒÙÜÁfíüçŒÚxþÉüÄÿÄ„ýjòoýoüß­ÉÛ«ÉÓÕ"p`Ïz-·&æKþrþÇ›hÀbLøKF!aq&´# Ö|UŒÁºÛŸú¤uÇ=é¤1sEH¹"¤º/°BèWØä}¿Ñõv‹Ãýv×».÷ÛìîmîIÜ‹ýkÙr+›)zLéDÐR{ð—z‹›m‡îô9=•¸+¼*ùÔR-7´ð‡OQD6Ð’ôônveºñT·çæ¼8m7NxŸÂ{„²éLl™ÁŸõù3 —œ˜3®`‹ þç•o9Â/¯Ï ¼ËfǾ/NˆØA!Nj å†ËLp‚/9áJä g8Iç\勬ÞWg%¯óÙ´ï '4£^Ð\%¼ÀäqÑPJ®xÈ̉^ lá¼ Žƒ>ân縀§§"·â~ÿš z¸8yP=\€"´^\#ñ-ër+yw{Ò^`¡Óãvç',æ§²G!ÞYlX§ûS¡{A›[A«ë“÷'Bï¢ÞðŠÞ¨Š¾˜*ò±ÕÂg ¢2‡_ ÿPlsã‘ÅW· r[^)³ÿ±ÒågAlÑóä[I‡ÜèÌ×n7ÕLlÌlMpƒøo­·ŒÿŸÄÿËá¯Þüûq±¯½‰ZáŸ*ÿKÒ ¬·_uUùš¨|] Õ‡¿‘Ά°ò_ж‡Gøm õœ P{&[íwXWmÞî»l­3ÑÓ0ÜÉ3ÚÆ³ÜÎsܭṬ¯¦O›ƒöó¼Hç“6¼é€ÕKÅ-UðÏâÿÏŠ?,ª‡Á_Ð.Hmþ6mMð“¶ÆmMŽÿ|Öü¹‰;ðå\À’Fª¤’÷ X§ÉWë‚.ã?5©WƒmûÌ4ødœ Ø©ÁÛ¥ÁÛ§ÅÓ[Á³\É;²šç¼™ï½¸‡ÇñŸgÄK0 ‹3&ø«- ŽÀ˜—`±"^oÕ9cÓªàÒ0Ý2“Ü1ÝÐãUPs€Ö•¶ZÝÙ>‘»•#¦/ ®W†Ô˃k†¢ZFA*RQîc ¯H–a€- aǸ¬‡ A'8DŸè£5»Y}¤íÄ:I8ñ‚Û´û±eFüµñŸ‘ü\NC[ 9hCº=Ç{p††s¹yÞE®ásæ¨ðgC^0Zæu~`!G>Ÿ-܇͞—¿<#…Ñ*yþÌÀAþ$þ™E[àñX¤ `Ýë3rjjMHÛÁÿÁðÆ—©´ L~“-ÿãÒÈÿùvðÿëM~ýyaôÜaÀÿ1×p‚âw™òù”¾Éˆ¶‘`*ÑÔ~•÷g2¢©ÁëLÑPhõDtãHxýx ­a vÁxað:^ˆø?‹¶gt3þ‹œžˆ úWNÇà&ÿG ¦"…“a$¹6ÞþOŵ!õ`z§TÿIïœ?Ú=ŸÙ={R4s²[_ýÈòÒ¥QW6‡å®õÊ]í’£ãxZÛúü§s:î×÷&¤”/äö¾Éx‰Î\æÏKþoóá‚ñ¿`U;áÿJžå â¿Ë&¾Ï~ð~”?Þˆø'šÂø K¶ä ˆÿ¸&˜ñö­¾féÒú]gècü"ß¼[íï·8Þnrù­Î™DE„ÎDŽwD÷z] e>e2¿*y`ÍhdËLRçxLc‹ÝïÕæß7¸Ñrè–Ⱦ@îQ1äSßï[IÏAµˆå€Aîü®}"•:?ÿ'³+"yÿ3…ZÚrœ:ç#D\<+ù§‹IÞ!“:ü©² qœÖã±´u=½‹Ñ{öŒö6OIºôç@fd;J˧À| )ùp«ð³SÈ9C Ò<§Æ‰Ÿ9'y}Zýç²^œêƒþ3gûóß^ÿÿ©“bªM&M‰7)Ö}V9ŸF…„ÙÃáM œþ„÷¹Cïr]ÿÿ¸2ªâÞ~ú_¹Ãž'åÿÅc}ïO ¼Jì m™o}×9Ñ,÷.ÿ|Ÿ/œÍet(B*Áÿ¡ÐZð2¾m"Q8¼ÐF`?BõŸw'ûßrå/¦;&–•‹Ý º(ýË^Å á)¦âÚ'£Û^Dµ# ሰfePøæ˜d!]dM³xÙzGëÒù;^$`H‚ð$(üjÁ¹O%øŠöù”*BkeA•´ö+ºa(¡ )â|Eb8þOŽmJkLmV&7Â5 ÇÕÅÔ*Ã+ûüŸ‰} ‘U£ñ òˆjixí@t£"¦‰Ž¢uÒ€r¦Ì#r/dûÂêÍ~j;|[êR(q~ÊôBIºÍµ Íáž\À-æðâ/5¼Veö;h>|«ÓñÒänÇÇ$í]Š· âü }>å‡8i8š†á}D¡>å½Þe4æý\ìUw€,€­ž”ú—©–Èãwó)îñ{ÞíSÒáYÔàú°Ùí1ñß·Hä_$ /—FUJc«Áÿ¾¸ÚZïGOm,8üý‹+÷Lò×?×úZiøÍ+îI!f5®joþÛéØíÿƒm C­i¢ ü°7Y¶çÝ(xYØÏi/ósÅRõç49ü UÎ&±.¦Ìó?å¿!³HgX„ Låȸ³Xˆ“ªlg vÌ €üÞ‡÷2µRVùa% ´ˆýQ>Û|Ö¸X}ak̳ÞÏsÜOüÔü5Böóýwó]wðlá™®§%/›Wi!Èç¦}9ç•Z°uÚ+6púŸ›˜ÇüoæÚD7sÅÀŸuRšÀõ‚2þ3°M›Œ;à},­`›_4–ÿÿUÓl_0í‚ù”ÿ þÄ-Í/µø»4y{Wðô¾Ð8¸’g»†çºYÃ÷KÐ}š1š€Š)–dÆLCmp ,þG"°gÝ ëúÀÿû-^÷ñrÿ;¶»Þmõ¸Ýèz»ÑáŽÀþÈî>ÂHÒù ¨Ä‹H‰j «E",°ù­ÎâzµÑwíÖweî¥ýUJßzîu^‹ wä£wôxbÇdšüÞ™1‰~ãbxn2TÄ€MŸ U}þ¸_<žÐ6ÔT¾>A;DXÙÿ5už(@þ©“"UÑ>[>}²—-dRÜAmëùœ#WBÅ%ŠÛÏõÏžê}uº™Aþ…¼×—†–ó†àŸF€sþ'2EãÇ»©çÿ´”«xËiRàÒ~„ú¯3z_F Çiü³¿áës ê#Í Iíç«IÆÿ¿/ƒÿr‡¿Î*ÞdÉÞžè{\6“  kýÀÿ‘º~ïçRïg#ÁUoNõŽÅÖKüJ&¸Ã߉ؖ &§ ×:ÑÈñ_H“ g(þ?Ö3¼g0¬ZâU$r~4RµFjÌÓ àÿttÇll7\À8§·C#Ç¥*þÇ·‚ÿ¯2ºÞ"‡:Kã /O‰ÚC nì˼°.äÒÆ€‹ë¼rtœÏ®µ;¥m—³Þ3g­ï#«œ‰“ͯó%oö_¤ãr×ÿ3Œ+R€…óT%ÃoÅ\!žüh¹€cTšˆmB 0š$NŽ ‰NÇu½ˆíDŽI«á}«¤KkÜ˯JZ£ˆªWÆ6±*ÐHZø?_?‘ÑÆ"¸€¡Ôæáä&e\\ÀH\=‚&ì ˆ¨‘##­ÑêöØ–‘8ëó+¥Vׂ^÷"‰Ga›ÍíF‹Ÿ„‡~;ã?®Ý.ÀÀ_h^ Áê§JÓoË¿VŸ7ÛÜ‚ûh·½ßåðüWøWöz‘ÿêp)”TãíÃÍ7RjXÃîÁ›7ÀfHÔ•17)ø#6CžÒã_&ò+íð/x=mñx$ô|ÒXÜVÞZ*Ž,ﮆ•65<)´Cpíéá¯odÿn}µ(â»,ïðƒ4$bgæ`Aã´öûö]mÂlHT¨t0Uë-,ç?+øÃ–“?ÒÖ$ÊÎTÍÿ'#"yöäMcÜ̘}„¿›Á’0úÿ?z2g㥎 c˜úPXíTÁKaÿÒ€Á™ø½é![£½Ö:j{Xi¹ó\ x^º¼Nä?x¯–Ï.MÚð¸EÃxƒÆ>ð_‡PÏuþhè,‹ÿ¹ _Õ<sÌ þ›¸s^þŸð_uÏÊ.`»×Ò)°:`#Ë7©õ–¶FªS⿦Åÿšš°íšZà?KèxåGþûÿù±ü$c^² /Ù”®\À[â?·ãM´bp§9/eß–ßë|~nðºÕèñ{­Ý¯-v÷;ï ~¸ýÞâv§ÕéQ«Ý“ÇLjg¤ÜÚSeXíXLó@pU“õï ~®5ù¡Éüf›Õ­N8ˆRePÃhx¢_Öä€x*© ql<¥‹2=7ÖºIš)ÃÔ¿'œHïbB:|ªÉËY͹À«£â)°¹ôðÞämãS¤ê“GØyuV‚~öœ”É…þS4D@ކ6‚‘ŽDËØïÛl¤ Ô&Ä:|f³ûçr¤ æ/Èó†æs”l›üĉž—g¤ð/OKœ "Æÿ… tj<“.z“&žŽj£‰ª˜VªVeS*1Ÿ- Á\ÿYóÏ¿.Žÿ7òî´œà¢ÿõQ)âÿÑpÁ\BÏl|×pp- «ú—NF5¼ÎË‚KEžO'cšF£Aéɤv~âXLËHxƒ2¸†ñÿ=·Úr2½1üPx ãÿhXÍ›£½Sñ4#<%ÿ©Ët2¬Ué_ó*‘ëƒMëžJh£ èT|ÛN|¸€ÎT™ÚðèàÅüõa—7ç¬ñ<¿ÊñÜ:Gðÿìj×Ü ¾_}+M(YÌëE ð&ŸŽË_žî}“¯|wqW¸ê¢½<½w®‘¥¶3îh^€ø$±m(^0Û:#˜ŒÂUE´(kñ"x”ʼ+Äž `ƒ]´ðÁZÛXb“<ºÀIiV$5 scÂJNAt0¾q"¹u<¡¥?¨Lä] .W†ÕÉ‚ªÂëØövED½2²~0¼®?°¢Çëh/Áò)ÚÞ h·¾Ýáü~6ÿº"¥ÿ[¬‰ÿ-Ö¿"¨2û®Xïr­åu|Xnö- ð‡µÚÜE*!÷-ç¶@R`ßãù´WßӅ ¢‹—ðÙN×§"g”8?8ܧÁt:L£—d¥½’àªöÀçBßgmÞà·ïS‘_a·_¡$²J_'.®ö{ÜZTëw¿Øñ§gvßß6ÎýÕöZAÔ×iVö‘6ÆTT·1 s8@TwÐ…«¡`¸­)¹{ã {Su‡šÿjø²Ò×öþ“Ã'ð7Žq3Y⿉Šÿ€ÿÿÕñÑÞàS3Œt5‚1G ®!s ¢‰=uçzI øDÀûnè_LÝu&v{ZІhí »Þ–|Câ¿ß~~À ÿݤŸé¸]ëÀ&-½õüÝkxu´Ö#æç´ý—:?iÔ‹‹ÿ?s–f¸x›Àªùð—Ls™‘S Ô€ËØ£öhkìæÚAÿ+ÿUÁ¿ïã €%Sse›–l‡ÖŠeñ?_w•æá•<ûu<Ï­»h)°Šÿ¦K¶äÔmüE¼%/Ú—®»£ÀóL£ßízÏߟÛ}]a{½îðomvw¬¯7ÚÿÔâr·Þún‡S1S5!U™8Áx\“Ø÷Yý‘_©ÿÁäÇF³ŸÛ­îˆlŸô¹•ÈýkúÆUðþp4GŒà3­çã/·‘"ÿäÚÒ•ÚcάÓõÕ°saÚy¬—Ä"Òº©ã1¾ ߊî<ÉÅð¼s¨E1<®3gú&OtOçØÂiA¨E„¨0’%üAHþ´Áµ÷ÏçÊù3øã:“=0sV¦š8;%¡S€ÓÈ/ÄcǺÀPÁ?ÎÆÄàà#HP"½g.±óEd+ø?›FN‡ãsȳ†ÔÿsiäßßLýçÛ—àÿ¿/‘!þ“Õÿî¤ ø«d‚^„¾¯S$“n%VµÔ·d:^þwz<’–G5 þ¥üOqU†"üƒÿs)]Nq£Ó™â‘¤ÿ#Xír~ˆø1½{<¶e*A8Ýú2¾{!AŒø ž:¨~ÇŽ·Ö¸ÿzicÔ¥!Öûåê¸]þ;œÑqÉÛèwnµo±Ãµù<ÑBnïb®ìý¥áWgéÿãÊ8ž[8ešzΣqi<óÌóâ;³]¬@7‘Ú þ+bšpÿ‘M“ñíxñLÄ´ÁŒs â=J‘àu*CjÃiçKDíP¢.„ÇŸÌÎv‰M̆“[pÿdJÛdMþÒ‚Ÿ‰˜áð†ÁÐ:ÜÀ·‚Á§€ÿ!Õ$Âì]L?îtl¯Þò')…"/ît|Ôëñ”¹d¾~ó‘_êüXmþýsƒ«e¦ßT˜k<ð+¾ÎW‰Ïsüñ?êó)Er-ö*aÛÁ¨)"¤q8¼e H%Ķà þÇ·:>h¶¿×æüHäõ ¿9 ü”ƒÿÝ¡]¥~E48ìYÐåSÐPÜü\R‚à¿9¬¤.ðIsXaKpA¥Û/÷,.Üó¸þ0êRҡöúaަaöVa¶ÃìMTü§¹-SfH Àjïá$7—7ùÃ"íMaŸñÆàO«]L–°Oën [úИÌÝñŸ°ïª‹tуEp‰] Õåf ƒPÏ9èØé²†v¬þ&j û*uG^Ü–cA«ãœ’?Éxrq/Ù÷„¶@,¹cö„dñ´œ«I€_Š3/Qh àLïœ<.bõj=%cÁ?ë9‘¤ó™~Úáž§ þ_P.æ+p}syxá‚6}N6EǾÒWçä³ç¨ççDÏHFÇhz¾3 þáwÞä’î ~šPC–Áñ&¦}6I´Is€ÿ\ÞÀ›‹ƒ.€ÿ]ûóêÄß_Mýu‘ þ/Œý™3„øÿ}–ü§eX±íàÿBªd"ªH¬TU¼9Ö½p¬«Íé¾< l"ºq0¤‘­ãxj•SÎzïìµ¾¿™d*3ªær{Þ^P¼¿4J¢Üçï.Œr'æT‘ûóÂ(øÏRê³:G§3L·“Nghc‹<ªAÕ8ÝþFRÃðh´ÙÊHXÓP`Ý€Oe¿gYŸûsj-à–ÅK‚*¥¡UÑ ±C Ôð/ª—FÖöGÕIcêûcšáFi:l<©m8¦IZ-á„d>´ÃEæ_A˼ü+Bjð4rWs7ÝnÔÚj{»áà¯Í‡o ¬ï ¤Gv,r} ¯*°¡âÕ?üXiú-¬Øðê3ƒ+µV7ýRm~>g’ÑŠj¸€±=·J²YÀòĨ6y`Ô¯÷0§@A^%à§[€sB—ÇþûCH´7¨¼/¨²'¼ª;¨ üGüëð~ŠÛÅ bÄÿm᥈ÿ[‹„‘EM«Ü)޼û$é«4û#‘vzÜ®U¸!ÝAA5§Ûfikakfoì`ÆøÏ\Àò&O¶Æ÷s/`oªas2bü_î–"ÿeðÿÔȸê«ù¡òQnF0xÜs1 u6qÒ_âÿÇžO5ÿ½ëyÒõ°ÚëשÛò£7f¬Jpû"ÌFÃÏ‚çiÀóØÏsÛEeÇ­Ö›µ,7®0X§ÉtþêøÚ_ð‰ÿœÁ¬[ùI%¦®ùsØW›æGc% •äÔç¿;tøàÿÞ•ü]˺€ÔRÿj͇Ëë?t.Ìg] ªžŸ¥â?G~ :üåFhlµ†ýZžëfžÿNM*þëk$ñÿÿÿ$R]iNÓagÌMoÙ+´ù¦Ìé‡:¯ŸjœoÔØÜl8r³Éæ'ã¯B÷‚>ß*e`ód\÷‹„îáÈÆ.Ï‚Ú#?WX~‹ §ÖüÇV«Û}ŽÅÃ>õ#Íá‚‘ÈÖÁ¸ÖØ&¼m™ÔØxlÛx|ûtŠèU:¢ýÞœò›Jó9S‚ªþ%aÒv>7ÀäfŽã ¨ìó*£çerçX|ëhœ`8¶…Ü7uE…î¬>Äá€? 0Gäÿ"«Á?“…¤AîàxŽô1þÓÊøS…ËQž'®yˆÿáÿAì—çe¬ógžûUÙÿhYžìÁ|dtv|ºñ6õ4âïJÎ$t½>Ú÷Íä’gùó«ñ?¯ŽÁ=q% QÆ_ÿÏåIÆÿ?Î)?œÀCÿœÏ§ˆÿAU#‘už–Τ¶ î–OE7Â)LÆ ^pmó4¹Ùˆ8_<Ÿ.zŸEº©´“=K þ+B*Á.nkLË»}SÜé ² ü†oÓúg¢éŒUæWE+zÓ{fÓhæz<¡u"Q0{\4—ÕKÝ9jˆzu¶Wýü–ñ™‹ëÁÿàœÕ>ç׺Ÿ]í þg¯óº°9àòÖð¿›³9]ï.+Þ^z›?ò:wèMÞðÛ Ã,/û#„þY™”‚üÌ Oi‡ € '´‚ÿ²Èzî@¶™Zý£Z†£if†GH?¡nÀ»ZêYÖëV"ñ&ÿþÀJip¥<¢–v{EÖþH$aÕ¤ðQ/ Œo¦Émpäâ[‡cšûCª»}H½°ÏíY¿w)©ñø•Ãâi¤²Rhm`¹z±_‘{A§Ë£¦C¿×˜ÿTgy7à¸<·õo4¾I3–×ü—]õÒâ{À¿Òüzã‘ßÿJeRëßà¾[ïÑËcêù÷*¥¹¶ z6&®•øW2™P¦Jí@œF4øßdw·Ó«üg.€ñ_\Þî_ÄJ@ÈÚ} ñak@‘ °¨5¤¤%¤¨9¤ =êYGä³îØ’¦“Ï$^L±·ŠtÐgü²?n‡;’9Órv;óH;‹p{‹Gsʘý£Ï“­qÿ¯üt6þ,þWó_üs.@/ÖÆÛQà¿›A¤›®Ê–9‚h|¥;â£Où¯ þûÛªæiZÍZÏûˆ®÷}5ÿaWâ6e‡¬ÍðЊ±ã‡¤àßeÏy'ÏaÏn ÿÐF óõš†k5÷®ÑØÎžtûWj€ÿ̸=_QzWµŒ‡µ … áÍÊX2¾ðŸŒ%ø# Àwx™Ú3“&F 0ž(d3_T½áv²³.&¼@UzÝ¢ÊÏôQ|œM/»„ÊÈ|1«à ÿTfhü:GùŽSæGä?’!ÄýõHZ;5‘!ì§eëgd¯hvŒâOšÒ=Gd~Ãò2›9Û+uø‚ÙìþésýlÅ$ñ?{`úTëWAØÏé|Ò¢É×ç@øZ:“Nó¶\û: \̤t½>Ùÿî<-ýÞ]þû›ñ?¿…  á¯Ëã°_™ÿ™þÃ_ÙCà?ÉeÇwLÇuÌ$ˆæ’{ˆÿ!µƒaµ±MïOöâÚæpo0¨b"²üŸˆmA*4ÉõÌF7‡7 …Ö.¿;ÙtÏŸ!Eë…£bäM‡ÚÞšŽm~Rò2¹ƒ–š%u⛿Ií›Oè~Ó.÷¯Æ‡sG%ø¨›(¹}<¡åÕ±îÙ“â·¤êLõüWçû”©uÅvß\Úuq}hþºÀsë½Î¬u;©íGpy[@ÎzŸûOOœjz{Y†4êÝ¥1ÀYrükXs,žvÚ–)fõ·÷¹C¸=–ÚÎ\ÀxJ‡2|ƒ"¦i ºy(†l$¦ü§¥º! C ƒõRÏ ð¿×“à)  ¡°ðZæ1Ì0w@!¦ã¿ÿ2š$ÄËo0º‰–j¹?ëu-’z=WøWÂP(´n0¼^TëõU¥`u—ûÓN—']N­~ƒ @"þwØßër|Ðnwq~ýÁŸÁÿÆC?W¸^jòu¹Ù·Ï¿*5þoÜSnþ¬Øè¬Æêçû;mN;\ ôz—õû×(‚ikä`X3Þ_ýÕ² š:›`ZHFü“ô4òŸb¼%AýaÕ=!à—ÿsJ|žªÌ¯Pà[$ð/$ |Úàÿ°5´ =²PšRÕžSùCȱ¨C4ébáp¨¶7‹r0aM;$×cgeoá`îd¦2Sµ©Ã~Ƶ `Ÿý¬øëNãaí®.qFØ7 ó4†ÅxE{èG¹ëÁ>º7]xÀŸ¥/ aîfæjì¨h¯çg·ß—àOüçàÿ ÿqÍ ]ÒgU¢ƒfÄA^€ EþN_òl¶òoæ[nÐ0Y«¡·†¿GGs;WÞÙ°’·z•¦þËøOzžŒÿꆟ¥Ó^ÿ7êœÚ˜"ô&Õ˜0uþïZÅß­­¡»J“•€ÀÕ+þü“ÿZdKÊ?tòËÎyY·çn6ö¥ÁÛ¯ÉÓÓâ­à™¯æY­ÓpßÌóù’¼O#JŠ?É&üTSøÏgü_ÿd ^ŒÙÊ„Zif«¯¶¾g“Qát½Êùf¥ËÏÕ.¿4»Ü:?â6b?SDվʠÙÞ>¿²Úÿ—š]¯<ðsõ¡Ÿëm~ëp}"ö,–úTpò¶ #‚!„1¡”¿Å·QðÓÆÔ&Iá9M ’O¥p´ÏÁ&Óº˜±AR‰<#gC^tþ›)Eä¿p¼ÿUjÏÛã²—‰]C #±-øÊ·ÙƒÈ¥™3¤Æóò´1<µer-%ìJ‚üÈ ÎÈh*Sü&[ÎzAqçjò×yƒôÀìRøäø‹œà'°?q¢gò¤wγo¾ÔðÏš‘˜ÍQ¥…ò”ÉŒnDïÀ>€<ÚE²öYÔ‡ÉM+ÿº6ú××c0d]ÿŸo^þëÚé?\Ÿ=øá¼ü·_Ä G#[ÿþ³I":úDPQ;غx¼[\Ùîô`(¸r,¬~8¸ñÿXL ˆŸÈâÿá°º7Çû>œ’ÏdŠæN÷½ÉêŸKÉÊÞ„ ‡T¼ÎM'·½HN'´‡6.&‹E3±ŠÀZ$k Ç唣ÑqL;ÕÿáéÿgËñûÏž“ÎfK¦Nu²R€ ëBήó<½Æü?½Ö9o«wÞFï¯wEˆbÏç‰óåo/Ž,äÎe+ È–½Ë†áŸÂžFü ðä¼&E¸îÑáDz'^àó`\ óHs¢ñZj¢, ²y( Ù%²€&ð¬{<ïqG]N²£[E\-á6 Æ‘øóLð)ÀUhüI<‹Ü·Œv¸8?aÊ$ÈÉe¸+nÓïb¶–·Ý鑈kŠCð_oq³Ùê÷Ö#wÚlnà ´XÿÎ ‚ýTcñC“ þé_FPañ=Ã~ÕRÓož\~´?¿òàuÓ=n§Øc® T&ñ­û׎„µà½ÓP  oÄÿï8±Ïs‰Y·gQ«ÓÃF‡{-ÎÛ=žÂÈB«Eeâà XOpiW@1ø ½‹Ú}žµùµú´ú4ù>=„>–$WÖz”ãqÚ2£\-#€ö1æÌD8‘·„>ál øG8~b øŒü°å®ÆäݸnVóÿÈöaœ‡iœ§1,ÁÃçeB.ÀË0ÆÓ€¹Fþ×ý¸;ñ)æ ˜E¸“ qÑrÒ pدæ? þ=ì÷ÿè{Öó€ 8¤{ÂkušÓÊØÃÁ¦<}Iü­6ðÍÖi¯ÑܯM¥x&Ý\¯[É×YÉû”ÿ¼¥NþeðçÎ| þ:ZK•Šÿù×rË_Xü7±M[“Óãƒù{ˆÿTÚEŠ ª)àÍZŸÀÿ3þsÊ?*ø³Q_êóáLW‹ÈoðÏx%Ï\›wh-Ïn“†×v^ÀnZjcÈç:8ø«øŸdòk‚ÿIX&ŽuO§Å²Ã©Bd8gNev/fËÎËØ¨)ã?õídÐ$ï9í‘<#óq›9„ý€ÿ<Ë)>ÄWΜWꥪ·µ–ý¶l%;V†½Ëè#ù¶}&KŠ_|û7üÇ…¡=þ÷WcHþúzâ¯k“ÿßw¯þýÕô®Ný•?úî¼’ÅÿoOHÁºˆÿÓúàF"åA•#‘u¯Ò„à¿Ì¿´ÛåÑhHõdx#\ÀdLËHT‡ë:» ®AüÿúX/ã?í 9Þ‹P¿ß¯¬Éê—:‹r¿çàÿLjû4·6»W–Xy×,çâúˆÜÕÁˆÿO¯q=µÆ)kµ}ö&× Û½ó7ù;^¤àÒRð>GùæÂðû+#œßÈŸW'¸MŒdŠÍt¿É„# *PñzNjLÈ¢úIð¿a9ÿ‡Bš`Jÿ:…_-âÿNçÂN×"‰o™2¬Oøàv¾Œ&Æ[‡8 æ?®°±d!)Å%¶Ž„×K}K…Ž;œ³#€^ïçRîžL9§Òßç]Âþiÿ»ý:̵Ø`ICî~…€ ØÜjµ½, Êì<@U ¸J­n]-·üöÌøÊgž_k°ýü‡[a½@pRŸ*¸¶¡(Ò…Àû¨Ï¯BZþ˃«9Pª@Ì èò~ÖX.,£BPhU_X…(¤´#àã§Ï³o:nó~Üâû°Ùï~SЃÞÄò‚¤Ž[{ÆÙ˜ÇºÐAmŒ“hë`J.ÀÑ”œõ¸qÝ‘N–à?c~¤“9ŒÁŸY´£9®Ëý+©Ö/º|ÂfD~ÓxO³x/“DO˜,ÞÇ8ÎÛh9ÿ™ ÿñ!îW}–ƒ?A¤§I¸»Q¨«A°³~ £®¿½®Ÿ­øïm£çe­ ìÖó?Ùþ‹ØCZaf¼}’ÇwØJ‚ùæk5 uøû92sC¸yíó%þó>㿺ø³œÿ€ÿmU“'9.þW¯ýZCRñ§¶ãÿÞ•üý¤ÞÏÿŒÿê&• à61cÍÿLóyÏ<&õf¸JÃx•¦±6ßL›g¡Ã³ZÃ;²Žç°‰ï²m…ß.Úei kÄK4RóŸÏñ©óßâ#ÿ“j¤Xh5ZóÃaûRç¬F—ŸëïÖ¹=”tù—âuH D’[¥QåMwKÿ€x¦öÐOÕoÖ¹Õ‰ÜÙ¿º?¸~8¶Ѿ2ª±?´1Õh¼/ãÑØÎ‘H e9µÏ:ˆo‘Ü þ%ÓrZæBY]Àõ$!Z ìÓQéiíù:*š¦É,1y¤®¹TñTŒp0¸~2¾íÍ)ùâÙ™ÓÔ¦ÏôÌåÈó 9´¢‹&íÁ÷a‚œ¬Ã„ËÄor/NÚ ì›=Óì0a0ú´äÅ) ;ä¥sÞsò)d ™bø‚…\%‚ÀjòU™èÈ KÂÎÔûèiÑüÑÞéc} ‰]/¨C§gåoò†?\ýóâð¿.þçÚØ¿à8þÿymòï«“ÿº<ù?×^ü™7‚øŸÍ½É”¼L$gnùcÿ«ÄîÑÈ&¸àј†ù£0™oI§Óƒñ°Ú騖ñÐú‰èfƯCj2zöƒÿ/OP$?(”z•´þ ñ?øÿîxï\F×LJçËdÒùÿ级"[GšðÏz™ÚË\ø?Þ1Bôú,ñ.æÊ@o„ôàÿè±æ2§®nŠËÑQñÁÖj»ó›œò·y^Øâ}C/Iódñ‚ü?´˜7„çn_À‡ï/Á°N*ª§sýWC¬X‡ÿG .i„)bš¸ù¬fEx£2´i0”ø?Ü8P/ñ®dCµb®!Ï•<¶&‹ªˆ¬ŽkOjƒ ávG*ã›Ù.`nG€ƒˆnR„T‹<‹€b‘Ç3ÐÆzï«`}¸íUÒëU þwº<é°{Ðã\ rzÒf}. ÎüçZ³Ÿp…{E ÐÂÉ•™|Cü_nù}½ÍÏeß”˜^Ãõ©ÁÅ[;NÝßs)@³Ãfn•X—[a¿oeŸWþE8þÌæþàZ–'i:‰Tp»€KØvàV×ÇHÚÜžtzõø=û— þï~ÞX þƒüž…øÊN¯§mÛ¼6zÝi¸/N(»u!ÅÒ!Ééî`L{rí8þ[rü׋vÞãhíhÉñßx9ÿa ûŒÿj§ †ÿå?˜Ï® ‚—9™·i’—1クÉ?\À~f,øÇ§Øg‘)À¢¼#<ŒÃ(0àR=ðßÇV×ÇVÿ3þ»Ö…EÔ7'ø{ïá9oçÙlàY®¦R9âðÝ+™ÔmæUïóý_ø¯†¿Zçá3þ¯ç\Àmåüß¡­µ“ëùöaû8Œï^¡â?~ÎP…_í6¯ ©昨òÃm~ÇcuWiÒò_’z¶X÷ŵZVë´¬7hÙnÐtܬáºc…÷.íÀ}¼P]^”¡fœ1_Ýùó¿ð?ÁŒ—n¡uÌpÍU“O¥ÔØ~/ð(è­”Æ4(bZF£ÚF¢Z$!åµÎ¿þºÜæûºC?‚ÿ­Ž÷h-‘o• ïÄ(á`¬P+ÀÛj ¶‘t×ãˆÿÇcÀÿv  ô&%„8áhlø?Ö3žBݘ@ôhJûhz§šÿ3§¤tò›E«¾X#ÐTzX4—Þ J¼ËGÛ_—̳[gåÓ§¥@ʻ˃o."  \*Î÷¾Ì’#ì[QÀŒø?sªwêEþp ì¼dF8:Ã…ý¬ÃØŸËVÌѶ/ù ä Y’ÙløEüøëbg¾ˆÿá€OËçNJÙXàTåU¦t1¾s6¡ƒ:T³$ˆ{ß_ÿëÊÿ—Çþueä?ßNrGãàÿ»üá?òGÁÿ?r‡ÿߟX8*ÿ'bÚÞ—¿;&{ß9ÿBãD|3à?“Ú&ñ*B´9Z3Ó:R7Õ4+ ½™=!5²€Jð>]þÏžSüŸ!~‘ÐÖë^$8ò{ËÁ_dÞÅà? v¥v½HlŸŒ,$ш[9V?›![8.‡ÏOh}u¬{ñ -)~+{{AñǕᷗ”¯Î‹§²„M~·¿Ýžœ·:üÌZS«]N­q8¡msn£cΗK_ú^ÜXåñÃËs ø´.íl?ùè<Ù\完Ã#žçUá‚ÿ¼<>y\„”m,£k(E8D ÿm±æ›Éà"›ÂH3y8¼e4\þ+ëû}«‘p¢´üWÄ7Àäѵ²ðªÁ˜ú±øfd¯ãIYd4²vé €´CéP8A0Q÷* ¬èö(¤j§g1‚·oQê[þ‹=‹©¼éõœIõºRðßíøXìò´õÈÓ•F?”é‹ ? . Îê&\@±ÁW ‡­8ð]±ÉÕʃßWYý€÷vŸ{°7×Ǻí~Ãûˆ\r 罞åà¿Øï)ÒÈ¢÷K´€Ë¬ëú+ûU.@ÌI@3€+-Žñ*"àsm?°ßb|ˆLüy¶ºÝÿîħTæm ‹ö1‰ô2B  æ¿¯Ý'ügõ÷#Ä×Cûc ¾ˆØ§å¿SÃ}«†Ý& ‹ušú:š»WkmáèÍN{U­ž0¦öCÆg#Àl¥/8LÍŸ+U- —ÜÁÞæÕ¼M:¼ Ú¼µKƼÇ Æÿ}«4üï^ÅÍqË|a»Ø.¼g¶ƒ+õP©­ŒÑÓâé¯àAžƒ«¹8=uxºo&óÜÂóÚÊóÞÆóÝÁ ØÅÜ­¹Ÿ­Ç‹3¤‘^Òü1å´Ìh –dÆSUþ—,ÉŒŸa¹"Ý\ó¸éêó¦z¼Ž¶'=•¦7ÈÓkG7Œ¤4wúVU¾_nñSíámê´úUäðHìS&iFµ+âEƒq]ðC‰eR³,¡I/G "šÇâ„@ œÆ Æâ['’Úéô-™~çIú“ÑV—½0’ôçD!Æ’ÛgIæIá;fÓĸJü+‘O§ˆp?!÷8% ³gd¯//“¬>Ú˜Ö9sœ¾¿¦ÆÑ~ÖgÎN¨-ÿ‰0PçÿI:/@¾0Ÿ+ŸÏW¼Ê‘MŸ“à:Ÿ?Ú#üÙŠap~Ž&K2z¬{äh'‚Uj\<)y}ªÿm¶!ë`ŠÎköXïB:¤ÒþÙcÝœƒûÿçë)\ÿ¼2ü×Õ‘?¯ŽüýÕÄ¿¿™"Ù‡+c°?.!/ÿ?ä ý7òá¼gç¹ï³äðtS Âáð`m&©óC–l2N q,|Æ"Iüg"¢i*‚¶ýò3)]ƒ¡uCA¤oOÛ8el’6E&•ÚÑçûjÇá[ ÏâÙäö©tZyŒÇdxËb|÷B¢¹l,¢eñ˜tᨄ1â[g‹‘㜕.æôƒäï¯(.Ê^_ÍœëE>ÿ]?çš„sk³Þ5SÇæäz‡ó[½ò¶äo ½ezJ™V>›ÝþæbïlNžÛ©lù˼¡¹)§:ò6O ŒÿK©Þå,œWàŠx€ ò ‘ŽmQƵ*b1-ð²hê bå EDý@x‚ä>Ÿr¤Î…r¥ÝHTãp$m~—†× émèªÃ %‹{ÂkGb[Æ…#‰m̳p5¥FE05^âû´;ÒÞ^Ð^ìVÔëþLî[ÞïWŽøY€êÀýi§[øí#“ü[{OÞÛùtÿéZ“ËG~ê±ù½óÈíëû=NÅJüt‘[ñ@@ ·ÊG8CCâiDƒ4ºIZÕáÿ¼Ë·Ìïæ“DîE]Þů¿"aPQ»ÿ“v¿‡­^Zý š}7y?ìð{Úå÷Dàs¯5´ 3±ìû£‰Qvñ·`qNýXG‹' ÚÉÂÑ[½?—ä.·(g3nàSê*µÖöïlÌé<'¸›%z˜'zšqÔ›ø°S2_càOæg–äkšàmïe”èeKðÔOðÔƒ%y$ûâšàÙ·a¼—A´A”·a„§~¨›^“®ŸÃ>_»ýÞöz^¶úž6nÖz0×#ºÎÖºNGöÃÂuWíÑôÜÁsÜÂ?´o²†¿_›¿“Ë]¿Šz;U¡>‡}m-¾6-öUñŸ[拯d²Ì>=ÖáoÓáÁàÿÕ›7hó—ü)éàø¿‡Ëö¬àïý‚:‚`º:øÅ`{—>‹Oí_¥eºŠg®Ã?°FãÈzM»ZçoÕt߯óÞṄùÉ ØÉ ÚÍ Ù«¶_ ðÑç-iþð—àÏgüWc?Å‚K³à§Zj¥šidXh0_}Â`ÇöaíIƒÇÛ¦ÏvJãž7¹ßª<üÛsó_*,n°ý½Íå^?1–!“EµöG 屃ñCñTVLn‘'6à•Ð>+œLìdðG€J¡fR;'¹lNheC¾ˆðO„ý$I1¹„Ïdô,ž”#Y –Ѥ.H ­ŸHèx}B>ŸÙ/ eRàðyÅL¶œg€b¢ýQŒ û°>ªÕŸä”ÙÎÊ9!UÃ?à¿Ãµú_\¸ |q¶ð§ÙÞ3ÒInËÌ«32\©¹ôŒ ü;.ÏQ½ŸÊì%ùˆS´x”Nhœa&©ûU\'S3À{Ÿ;ôï«ã_ý?øÇå¡¿¯~¸<Äf~©ÿçê8Sø×Åq&þð¯|Ú<ËM7ÏP§|6FzÁsðÿeRû»R$r×g"§'$ûV7ÙÌéö7¼JíÆÃS תùOr¦4òL %þtþÛvðWâ*yIò•I´/~!®k1©‡7èàú?{ç3úðŸ'ç2{áFÏõ¿É“ƒÿ®¾¾<0Ÿ+™Ëé9ÚRbsýÒº¤ìuÞY:®YkœN¬¶=µÑ){›ç…A—wD^Ù#¼õê¼üŸÏëÍ럿0<;¸˜O¢o/ ¾Ëœ?× ž.RÏÃ?(gÿP<Ÿ„e®KœŒoÿqÏ`‚Y€4¼VV«ˆlPˆÿýþUHĮŽn¥RÏ yP%í| «é ­’DÔ°)––Ò"øðZ<ù)ILpG ˆ±ÃÙ–̯ªË¥¨ÓñqŸG13‰g ø/¨”ø<§A˜gQ—ûSÚà At8ò[•ÙÏõ®=7øªÌè› “ïª,~Dä, ÔøÛr£ïëýRwø—‹oŸš^yhœwgoÖoÛÒîÊ|®›]orM`ù£ðÐï6DŽÏz\èÿ¹¾ÖZW‰i‰kïlì ­ˆo•Ŷô…×t”‘w1~iñ$è6Òë (ú¥€*\ ÓÂ_AREGÅSqí3 ]*þŸ“ÿyaÁÿû<%âšöº<ú&_ CèKâÿWÇ|“}fË_Þœ’ãûþóÇûþ8­ÕÁÿñè–©øÖ¹´î·™’¡ð:™Kø?RCâ?MàÿhD#ã?ÈÏâÒ|;)aü‘Ñ wÐXQgq£Ùü§gàÿx:­G™NízÕ6Ó1Ÿ(š„¿†Å^¥öÌrüŽifüGüþ¿É§:ÛÛ«Jð!O:{^ ¤|³õhöZßS«Ý3µíO®±ËÚàx~«Gþvÿ+_Fämyx0{2«ü_¼Ð7—/›¿84{qôÝåáÅ|Å|¶ŒžÜAuï.žáùóŠ×¹CH”ÔÀCB õP¼·að4†g ¬v0ªq(ºi(‚Ôµrÿjêr}„²¡`–H¨ÿ_]ÏJ=ÃqÍp0¼\'R;ñ ¤^ hÁPDÓ@é° …4 Îïrz‚˜Èå)eRßR¦ÃÉ¢îVÇþÁÚíb·Áêf­ùU&ß#(5ü×Úƒ?ûf?À#”#)8üsÅ¡^x ŸóPÿÜoÛÞýòØã]YÏöœ¯Ô¿Ôdñc»õÝ.‡‚.GR†;ÿ‘À»ÿã‰]ƒñí}‘ €L3ò IX íz<%gäQØáY pCÌÿ¤ÛïY—/õÿ¼´ø>ìfCÁÔ ÔìÿH˜P(<þ47&0ÙÝ&ÉÍ:ÞÙ .üs²dðg¶òŸ‘?ÚÅœ™ú6c>×íiÊ~ÿ€²733?ÍÏäO0c†Û0ð†Ï.K ùSýŒÿÉÿâ¿~¤—A˜»~°³^R{]ðßËN.ÀÍz¿ë‘}.‡÷Âïq8´Û}·–ãvþ¡M<Óuüµ à¿àí ü->3Íù)ò_¡¹žÖ2R)~IêŸÖøªm»6ïËÕ°]:d;99¸m+?ŽãC*ûh#ª×äàÏ3XI¶›Kÿ}ÄžoºVÃ|­†ÕM« üƒëyÖñ,ÖP3'®–k5¬×óì6ðö»mÓòÚ±äØø“¶[Ø~šðÒ£VÏh}ÍXC-ÀŸñ?Θ„=Õõ5üÿÓ–,Å÷h¤X‘q€Ÿf¬uÅúPCÜ1¥UNw+Ž|_uè[¼të­ï œ »*‡ö†T"鋪“Æ6" J †jZã•,KmL¥vަuO¤ô¼Híâ¶½ŒÅ '’:aÔü“Fç¿/2ÄÓÇú˜½<.yq´w,¥k4¹sö˜äŸ;*¡1än5üߟz5ð*SÊŽi(øt?Û\³!ßÑá ‡>Ä·” °Zý):˜;/_Ìf«iI"þçšG޲ÑT¦ê†/¦¾ä#§¤S'z™±³öpVMb‚ÿ*ÒŒžin…ñ«dúMð΀ÿÿº2ö6gà¯K#àÿ‡‹Ã‹¹€‚Dþ°ÿùjò?¸.m~Að¿IÂAsÇzOHß”½LîDê4ßö"¡m ÑQ±,°BâXÐã\0Z  ­gõnb‹ø?Híëà?Òð–$/ÄøP\þ7™Ý{5ÿXßj³¹D hÿe¸€jóïiøëÀõ‹KM¾.3û¶Üòûgfמæ?Ð;{gæ½Ý™w¿Ì|°#óÉ®³eWüÜf}·Ãî!¼Ok¡Øã¹Ø«´Ï§\Ò0Ý:+NìT$´ÿãi¬RXÞåË©€ú•tû>ºÞEnN{a< Û}Š; >÷zƒ »¼ ;<ž7»ÖúݯK¼SÿMf€Kš—]ª§m¢ëáDW+ÿñ.ª¼Kky éÎ*GÀîu6‡Å¹X¨Ìœ7‡á 1?»ÁÝÿ‘ÿ)>–)>æ0à=Ýß‚a?#Ð\mj/À2Î1ò3ÃíDßü‡Åú€ÿá!®º,€  Ч.ÀùÐ'«Ýö;4­¶ðLÖñö­áíÔ!ø¯ç༃ÿjcØg^€"ÿ%øoæŽh|À|çJõU3ÿͽœíR­wá³u0ܶ>«ùëikÀVÒrýô@Vÿ!¹Î•<ŸVÏØoÕpØÂ‡Ùm¢Ž6pÅm §M´ÌËc;é9ûïÖ âbþ%òó£¹ÝŽ1†üCÒù5"yÎxŸñÿ³â¿šÿ‰ð –š°$s^ªïìÁw=’Š\(´ºQjy½öÐÍfÛ{mNÏD~„}Ú ÓüåÜú$6S9š ‚Œî‘´Žá´Ž‘Ô®±¤î‰ÑXdû`t rÄüù‡„©Ýðˆäqc<¥ WÜ?šÔ+‚O`ŸþÓ{ñÞ”…Õãû_ŸQÎ$ý7Öx \ÕáŒZý'3¨ Èð'âq«oI–ù´„Õùali#Èγà?7ŽDbÑêì€ò…,êüa†°×i—PÏŽ1á¸ÿŸ²÷ðj:íö¾@gÆ™±K»tP¤÷žNï%!´Ð{Qìcï]D¤Wé%H UD°M»Ë9ÏûW¼{ÿ®¹gÎyÞõ®õ]Y!FÅ0óù}í ¹ÆÕäAûblÿ»81Ïðב9Ÿ–ÌýZ8 ñ?ò¿døÿ¹gSüëìü¿Ï-À#À â¿OÍÿWÉü? ç¾fMc\pàÿjâÈúcû—âú¿ˆd„CRæK™K¹Ì«‚H Úô øOöô&Ø ý’úϼ W§¥É>ˆFÿ­–W;Ì/ÿ?߉†pliâð|¶±’UÁ·áU>|HÖf#»–¨-íËiÃï³F€ÿ«cŸŠÇ‘ÿùRˆÿg:k¯æo ÈÚâ—þ£GÆ6—äŸì³v»çjûêpJtKvVØÍ$5~,Æ^ÐÒ¹•Â)ˆÿÿKÙRHÀ|É&<NÁš¹) ßéá À8?ìü  0‚`¼™5ʬ£îjMp[P¬&5ÿˆÝ+ÇXux׿Q­³_‚dAMc!-$þWbO)v„Îñûñ @`3˜YÂ%gÖ*˜u£/þROx„àY¯óc²~È!7ÙɈ-C®O»íî÷Àÿ x `ÐùQû±ëåûŠË÷Ö™œC 0Åp-ÖWkÍ/¼0:ùÒül¥éÉûû3ïè%ƒÜÑMº½'á®NJ™a6X@û±«ð‡tÛ=ès|<àölÈ£,@ʪhŸï`*nRih;žƒ„µÉ‚š%¬š~VÕ«BìýXìùw“¹Wty¿èaUôø=b>•øUˆ}kÛ}*šƒžÔ ®_ã% }Î`±Ö HWsÂõ|þõͦ$°'¯¬³™íiŠñ²$OÔ.ðü÷1§øä·À°Ÿiþòo´"B{Â?že0! 8Ã8¼®£ÑŒ£‘L#b¡Þ˜ø»æ¸b9R[€—Ýþuþ€¬wk˜o§ÜÿŸ7ÓHyg+µx‹Hm?iÐ~Ö¤«ùðÇ%XÆÑ è6PÅðØÌýü[´ Â'·zÉëja·Ïzåthvì£;P缄ÿ¦?Ò¬·#óÝt ÂÎÓ<µi{ù ÷=tï=xŸëüú8Òà|€ä…¦E¡´ÿ¿ð?jýü—ÔÿÕülà,Äÿ–ôX 8+ZÂqZ¢Ùw%ÇîØŠžÛ¯³»ÑáòxÈ»NÊn“´A*=V/î‘EvË£»€ÿŠØW8b1×)RC›‡!†‡àm2®g2û?gCáÿ¯®¹ÜÉ ØæêgbúÞ%öAð"¼s*ª‡Ì…†ìº;ø6f`2¤CܯÃïZMW¬eN–Kœ G•t ‚U‰ïC°ÿ. #Þrx–ï2e¤s9{ŒÌpX¥V7~,ÀAý+Yc8(MJ6’€«IØD…ýsà˜Gà%_¼˜†çÔxk Þ€Á?oÔ!J_"e«,H%°çóSoþžÄ,à÷âi2ÜüEEþÿ,ûGÉì¿ýWáÜ?òg?§üñjCªœÌ¸{†2$¿g( n—±ªÇÜ*äÞU¼FðŸÄÿóѽË1_ɪWòš€Ûùˆœ[f§Å¹GÙ{AÿRª‡ ‡£z?òG>&Êæ¢ð€§jó‡ þ‡¿ý5<¾§6ZRc±•ŸŠ¿ÿ`Kâ>nùÝèÌY[}2¶º%ýhGñß»@›Y¢ë_²ÛÿŒN¨4úÙ¯¥Ò#ŸOͼÏÇ‘k…Ê•< zirºÎü\£ÕÅjÓÓe Ê>7*º·/ã–~òM½¤[:‰àôÓžÈk09Ûyü d 8?t/ÇB£N NX·<è•2¢GÚ1‚ÁÀÿñÐ6i`Ó¯f”W=Ê,“ù>KþwzUöøU 0xßû”õ3*[8å ÑŸÅ*f$1RØ. ~qž'b=üÁÔkY6FòÄ"]QQnfÑîæ1 XOKPœ—žÀ+Ñ(7”§I´—)ð‚ˆü7ßìïJk`™ ™&ñ ãxæQ!Ë(m¬æ,S¥Ö‘XöÑ(–-À׈XÏõÐF ð¶?àacèvb/á¿åN:ÿ¶`Ñfµ“QÍõÖEÜÀµÞú?ñŸFÎp ¾±¶ŸÒpäÚÁï5|§ADs ùU ŸßS¯o¦ð µhà&:›èº›°ôð÷Xä±ÛAw٣᭫ÁЧ3 h xâ«‹'¼Þº=ä ÜGƒÈ?ü°ÆFøÿ'ÿ¿icýãùoüÆúÏ1ä?ßr“à8-øoIÏ45¼x‚õÂ;¯q­U™æh@³Ä¿~(°^Ñ"ê“FôÈ"ºÆ¢:ÆcÚÇãÚ&ø¯pÆNÂðb¼Ø>Õ9ùj,ôÕtDï\8Õx§b{x,`)YJª@ÛƒA²ƒwÂaˆ¢bÆZ¥œÆ·q€¯qxó‡t¹^¢N]!ò‡¿1é Ü‚2Cl…Ê€êþïsÆñ`—ìX¡î|¡r•dÛãZäã¸>€: &iˆùAopì¿þ^´ž4œGwÓ(-§Œ~H^ŽœìÁi ¸Ñ΂=Ÿ%¯¿æO©ùOÆà“c_pxñŸ'_ÿQ4ýGîôï9S¿eOâæÇÄa€?1‚>Ò{‰š+¡ϩ£o#;Fü^(<*ÿJnÃT@ó$§a. m:°þvHÆ9 ã ¼» ß p{!~`9aˆ*RI þo;~ý•Åe©ûÓ%AÏ‚hh6>+ñbtð-Aº(\¤.þHÅYÔ‡¹š%ƒüèS¡â×Rlà_+”/gKÀV²‡'âZï™æfýÀÉÞÊÈØê‘´Å>c—[ίü=¾'õ¸¥ºy?3êÜO/ew­äKð÷O/ç-åÊþðS¯„¹|7—2ô:Yü!Wñµh~ca¥ã„JˆèVÐ8¯AÍ» 4Åi™æ¶û5»W¹×Œº¢Œúà¥ZH( ¨aGPXiûÇã`êŽðTT—r ü+šñÂ/£FêŸð¨G… ì„~±Îïþ ¢k¬ü¸•‘Ñmd4h—Ãà‡Í-€?8,6Ùž¸Qy ,àÅÁ’£3ÀÿGJÀ,/”,|v¨R€2£‚»ûÓnŠníM#¸§ŸòØ0³ò`~ñ©V«PPóEŸB v!ñ©•qÁÈÚÇB;å!àA0ð?¼] ÿI„4ÕÉ9/䬊Fu—gå+ïÊ.Ÿò>߇=î·û|t°ÕÜyyþRˆ ‡éÊsIá8%2í>'øÞÖ1V€wõf–HwÄðßäflñ0‹õ4'Šó²à{[Ásx~D\àãmFñÂ~K„?ÛȟȵHäšÿ¢àü§°O”È1rŽ X‡Aq¬£|¶<üã8Fql“X–qË, Ìçh°÷Qê. ðqØïi»×ÃÆÀÍFdµCÓä'Úþÿ$þÇÍŒ›4×á7mÿƒÿ¤þCü’U¿{6ãï%eŸõÈŸføƒŠÿG~Ð8¼რÚWyI 6kl¦SÒéoÒØ½YsÏfM°ÂËŸi»4=´5{µØ†¼ý(î>:Û¼@Ø'âêÑü÷Ò‚öcðqDSÍRùQó_­¿Õèä€ÿ…–”h€}x]`õ½ÀR+Öœ–tŒ–d²%ÏòÈu¿*NZ{àÅ®À{’° Ih¥$¨þÛSÆ ÊÃ{ÆB»á?B%¿[!ìP&tN ûæ†ßÆ Ì!,ÈMÜ<Þ39üW„u€/@´¯®ù'€w ÿtD7n‹ÀÞ΄Q€ÿLh§"°m6¢ç}’t-C à] +Y¸C °?Åí‚ÇÉÈN²/—ÈCÄ›$ÁÅŽYXÞ_Ìüßç+ßç¯O~:9ÁgÁ$p'¿eŽ}ÂN~ÜüHÖÁई´QrjðV$yƒk¿dØ¡D5¦â95 8™R—4òY$ÿ zëwñ8MFFÉýãôü—ÂéϹ¿LÿQ2óµýä·’RùSþÍT~ÉPüš5ñ1 7Z~Íš/ÀQ Cï%`ÿ¯& }Ì„µÿ'¼ªÇ}_Nú7½iŸ`×O²”ÜFÒa«à6*˜uáÿb²d)eh<°áÕ‰ëVWeÿ û€ÿ3 ý¸!v`5^‚.–8ü!EJMd&£¹á²ùcÎØJ– øÿû™Y`øçð1mâÿw¢þ—N—ò~ ÌÝÎÉÚî“ò“cæn÷lm¯\mß¼Ý~g ‚Šw²Ù9 )€r‡¯˜Œ/dBü¿œ#ì“Ô ~Ld½ÎLâÀ\²˜X3¤rN†¶)ƒ[Ʊužà^ƒœS7ʬ!ÃƘ Ü–)ÿW F“Ä­JêR%u«–zàš€§”U‹µ£°WÒÀFà? ð&®w6ºKÒ"n_•ùã¹éàVø`ex£d^•`8ÛŠšÛÙï^Öëú¤Ûå ÙÌ+ñy/ö¹<é¶Ãó_\ü5dãj‹Å¥Ú£gÀ*à×[œ¯1E#h>~é¥Ù™ÇrÊMŠÉ»s0ý†aÒ ý„Ûz ÷t“ë§>3̨:XÚa}Sì‚W ÀúœŸ z¼e4€Œ‡ ÿeÁm\ü¯ä¡­£¡-òF™Õ¸µÔ¿¶›YÙîSñÊói§Ç½N÷¬›µ¼ËOCÎ\ åqØyÞiþ®ÉlÇ$–CÃ.Þךï )€ˆ_ ÿhO3•(øçÕØøXýÝÐ&¼P|3¯¹a™À´H`A„ožÄ±Hâ˜ÿ]ÈÿoØ7Iâšü‰âÙGÐÀ8”pŒø\c>Ç”X‚üŒÕ)×å ›: ðu<àegH,d½MÓâ'<~5ÜL,€NVîîØ0fðÿ§M4õù/| RñŸ:ÌÕ]ŸáC²uèÐw4Uy‡zr„ªöÀ{¾›éz›5@º›µt6!ùw~·i5ÌÍßç¼ÿ{êh2ô48{þþûh*0Äj?ϰ—îo€ð0Dþ‡¤ê?‡U‹Ý7Vþÿƒü&ªúÏÆ#Â* ü¬0þç[iÄ[nX|'´ÐÂ-4’Ì7ƒ ˆŒô/8x—1j¹9Á—Ä¡ÏGB_)»'Âû&#^ó‡§ÄŠäÞ‰´qaÏTÜà»xÙÛ1¶çEQ·lbúf"”]ãaÓ1}|°Hˆgæùbr.0Óð'Àã\D’j{ÃSàTœ±ìÅ«aÔ,¹.DûL z'¢:ÞÆã( 2;n™*þ€¿£v5.厃¨Æ~åjÑÀg•šö!úJ.D¯àN1\þ»š.ÿ€WÆp.1XÞöMÇú*þO“ã2²”QP€ËjûWS¤+,¡€àHjˆØÓ¤`+_Šg>åOâ0Òü©ß‹f¿äM~ÊQBL‹?KfÔÅŸÿ:ýö×ü‰_³'ù€\"øòcºü=uh ü}Hþ¿¼Žh—ø<ŸeÔO0ëf‚Z±Ćçõc¬:ê˜``2 Eɪ‡¨"y¼•Œ“Ÿ±Iõ}úÈtx¨´¸<êöd!¶ø?-ì[LzϯðÅkI£dó&nI ö)‰¬à§`ˆÀÿÕœ±_ONý^:)À§b¼ ü>‹²€ÔÁ€guø9?r3~öýì’¾ÓøOu1NéóNëlc”Û̉Ú>ŒüynޏðÛŒáwY£¤(÷õäkòCy#’Ì& B ΋g1¢Hüq'Khø?Ê©…Wdìº!ŸJp òYh£>uCÕ„ÿ :>ïµ2à^1Æm˜ï£à?Љ¤Àÿ¹Øž‰0,¡È¨Ùq_L‚ü›ÌZ…_ h ‚qnÿ€[™Ä«›¼žù;v9=ÄÑ Ô"0°„ÿ‰›Ôèëdt§íÍ&‹_ ¸«›þì@AÅábà?Þ<~©Ê¤´Ü¸ø©QÁ½Ã™·ˆn$ÞÔK¸­#¼«“Pf˜ñ|ÁËÃ¥D€ ¹” xWËXMÃìÆQÿViP+ü% i!)v4c@F°”€›ÉÂßEêÖR¦ € šO‘ü!ò‡øp–ß ¬ƒp—tR»ƒ±'sA4<Ÿ:¼œ§Àà¿PÌþ¿Ë‘ÿ?O¾Ï•*œ¢ÖcüOšùþX8Âyn£äøMÊóÏ”ƒõàHÒT@•ðÿ Ù&õ“åØå¸A²¹¾Op4—,,+áØŸÂ2øÿ[Éë?NaüðýëÔÄÿæS?"\y¿F-íú™HÊž½¦ŒÀ×D8®á¿âÿ!ïò1÷r%£v.ôá¿Âg×/ Ä`ØÁÂi„øÃxj¥æJÞzþOE´µX]n5½(q~ø&ªýM„Ù¸û2^²&Æ_ɸ‚2)øq\, È—|å‡l9¹ÿ‹W€©Y«¹²÷Y#2G”Q-÷Œó²~àälc¦móHÝî’¹Ûƒð¿DUªË=µ‡{qoTïÞjáȯ¥“_Jgág)ÀbæI>Ï€ÿþ øäIŸnj’ú×C Ž{©Ó[\ûØ4®bT‹½_€ ù QŸša§*¹{XÀ€CyÝãN»GîåØ/ÚŽ¡T!žLE¼‚ø6²‹?Ôù/¤ãÜz§^άgÔŒù½”ûVK½+G<+ò(o´€nçGŽxi·Ýîn§ý}œêþ¬Óþn³åà‡ ®h·¾Öãp\ ÖøìÃÜÇ{sàñ٢ʣ¥µfg«MO?9œÿܬäÖÞ”›û’ïH½¡+¼©ß ù±ajùþÜò}ùõÆgºmo »—zà}„ǧbïªï*1£FÌ®øCäü‡üH ÿ¿ÄôA¸5Þ0úr0¬¶/ º—ó¼Ñýzóbcô¹‡±éç¢BŠ¢Y¹a^…‘Þ™An`".¤vÄâ}A0a¼ª†ãaãi ‚0I¾ùÉODL,à› x›ó},þÂÊþþÃãFø'óLRüMáD¾$ðOð7R^ à ¨ †iåw4Ì÷0¤!^GÁüÝÖ;Böû9zÛï¹ìÖtÜA³ÙF·ÚJ7û g¾Ü¢µî8`ׯSí@*ò«µÁvPYéÿßCÍm ÒìðÄNžï°“óà¤cŸNéõ §EÓÙDw àOÈ<7ø¥£Týßžâ?S_“â¿Fà!MPÐa-êɦ ƒš 0… ýt€?á?9ÆžOü5"5×µ!øÿ[ü¯êµ@þçã!ÿá1ÞJ3d¹)ÞjS¼5-ΖaC‹v ÅØnбÔ_™ìº`ãÙ|^R¦ˆlÄÝLa}ŠØAybßhr÷dÚ"¦g:¼&ïìÌ {§Ýd…ßLlÿR$ØVJ& :Æ©a¤£¤á2ŽÕd9N´ ï}‡]:X}",ëÎBVÜ‚ÈÉò—Bj5âßTç?N„(™ý³hîKÎ$ö5‰¤Ÿ²”_r&po¯ht!AŒüO•®‰¤+ànÔB.àÏýƒqß—oÃ;TSÜFÂÒ)„Ã߸Mþͪ٪‚A\—C ¾˜‰zÕb}µÕì—!§Èÿä>à?ÖÊC„ÿXíÁšx:ºw120£éƒOæk.ÇüT0Nøÿ©P±š''ü_É~ß[çp5s3'w;+c‡—h›+ò_Ç7_—Q¬ËþŸÑ,ÞÉ}h™=—ÚñµtüËééEã‹ÙÒ…Œa°€ùt ™¶ ü›:LŽÈœ üA$ «Gy8è˜ð¸ ^‡,@Ê­þƒF|U»Ádžõ>Ícžµ—J‰kZ€ýœäß4ÐnB(Gv’{Ä H䬺qNN£,ø#úU{¿€ÁÀ^Ùß èqzÔãôà•ímP«õvëd#dŸÓ=0‚Ó3O÷<Þ›z¨ŸóüðÉó³e‡óŸÍp ãî~ÑmÃdˆÿ¯ëÄßÐ<0L»§+zl˜YkrªõØ%°€§‡TjÅ Ç‹~¯Êßê^߃œ Y NþõoŸŒê™àwËùmã í£qM=¯X›˜7_úŸy›w}2ŽY,ô+Œõþg‡¸e¹¤ù;¦pì’Ù¶I,›D扆5¸ßÛ+ü^ê`€o.ôµØ¨?K"ò%¼a£Àï"ü'ÅŸD–¥šÿø„ÿÄà‘Ô|ùEf xBɽ À4Éß”`J,@È3çšÖS€ŸÃ{ òÀa8ÔM•€€¼t5€®ÎØW©a»]ëØ6-“Á°3_û{ÚöÍHxu;èÏšçÿ¶Í* ص.ÈH_HïÛd6ÿÓŒD‘ŒƒjõÄ©Ô$ø8É‚-Uó§õÏ8·ÍK‡ÎЧs q%qÐ!zà!zÐa ¢Ð£Z!G4ƒk€à—B‚0þøþü ÿ£L´@dìC´)]%3šZßn­óÄ·"F@KÿKÞÔZîÄJÖ8Ù« Á?„âÿ'Qð€8œ§Ú…'8à—ßïüA¦l¥hòóéÙ•‰üñžWŽœ4ŸÃ‹Û[¨Õ8¢9g’ãŒü‡¿øOÒ 0ê€XAÏ'—-Å/ññÎÔBDßR,î#Ã-Æ™cï¨Ë¸ŒÚ)Œ‘–â#5”Ì=&3ÿÿ}náÿœ_Ä{aEÓ¿ÌöÁïÀb Y Å"Ò´³’6²–&CþãB±¡¹ˆNì?·½§`TÏGt±jg!àgaýG}þKú?Ñ©ø?ðV$ ˜no³¹Þf~iØõÁ|LÇ»tpÒA¼+7Høû—q·˜ŒfZw:18ÎS¨K@Àœ—?¶’=º”*~— îõ{RøSpÎOÌœ~©ÛÝ2vyÿótüH pJ‡sV/è¬nDóÆ§’Ñ¯gfÖJ”ï äKÙ#KÙÒwY£ägn¤âå;jÎ^£À!«’éènˆØ‡Á‚±h2¼Œ`„[+ãÕãfÄ—šÿÌ®§fÕ)™­ ßæ·ê—J™ûK°€^ÊÄžrN2¸ Aþ AL†¶QÃ"Ú§‚Û@ã¼FÒSŠÇ Ôä< †,í ç?xWJ¼^ŒøUõ¹=… Ëé!d­6¸Õøßçò²xÞåp¯ÃîN»Í­nG°†­'®U~~¨ä±aþ]̧û _šynTôø@v…qA¹Qνɷôoê%]ÑŽ‡Œà®~Ê=ý”§r^)j²¸yD¿óCÈ2 ‹ðy1èWüÇi~Ï{X•}œê^ÛHp«$´I.hŸNï¶u>kãÞo ¾QZp+6ጠ $q*…YÌ÷)ˆðÊ ÷È uKr qí‰ €À„~DZªOaÉïg%dÎ'2¬ÔRù7 0ã{™¢ˆkøY$0­þIl+ªøcñwþƒDþVÉ<ðü©æD¢Jh` ”@3b þfBžy<׌Ï6‰fþ‡­ó-`ý,çB8îùÐ}ô°\rûíšV[5¢ïÿïpmäÿ6MÍ­ßnü ÿ©Gí$óÙÖ¥C¥úXíÁ°oŠW·è SjÐÜ‘ïi©o8ómÍpµ®e3Íè{œDg·æ¶›Øt„÷‡èÁ‡é!Gûš à£aFZä9^'ØG©Úþé‘G5@QFšÑÆ1&šÑê ¿æ‡?¨¤â?ö|ªÈTçК&´¡ÅÛhðí´¢èÀÿ`G »M¼´0Z”#-â˜V”ùîsN!õÁ†#^ÎÄ.§L¼M—O¦ö G7MÄv½š™ˆ§…}3 ½=âØ7ª·Â~ÈæùbYY<'·½ÀÆ[•áàr”8 ÛÂ1öÎU¼ÏƆO`µ*,O“‹Ãä¾°z‰åc[)„ýHò,BzäÞä×¢™œžý×ùEr5/äO¯­{ÄŸ%s$_ø)ÅÑýÙcŸ3Ç?¦Êð —öнžCü?ÁªþCŒ:ãß<ÅÆ•ÿ…˜>þIÝÿR×À˜fñ´w*º @Ôj~Aìr!¶s)CöÊÆõÿ?‹ð´h¿(¤Žf(?]"w‡©úÿ'ü¸d_K&Iüw‹”`21C‘×]?šµ…™½Ý/}‡({_ž3o‘£x7óÜÞà“{‚nM™LlütJùñäć|ùb¦RbêÍ; éÒyÑÈê£&ó´áÛm“pëÈ.)É€ÿÿóp0²w%†îl´Â)ÿN¹O£Ä­ Çé¸UŽ{ÕÀc§õÝ.‡‡ð6¼ºˆü‡\`2¨e:g+áÜ ˆ=¸ðÂ#™ÿ ÏÁÀ ÀÈPàÿ¨We¯ë£§ .§ûm¶·ZNÜ€ÇWöw:îö¸<$j·Ãp`Àÿ¶7›¬®Ö˜]|vðä=ýÜû9e‡ Ë”Ì}~8·Ê´¨ìPæ½¢;ûRo¦]5H¹e˜pCWxG/ùáÞŒ*£’ÖWÀJ ÑèvyÜëYüdU÷øU¼òyÖá[ÖÍ®sy ½/%QãÂ)¿y0¢º?®¼&êâýèô«Â˜sÉ'“Å Œb¾_qŒ_^$Z@fˆ+±€TžqH æ«•À<žÄ²Lf[à (Bz¦EóØÆ,€ðŸX9/€Á#’YÇS8ÇR8– d¶E ÇBĵT+•g"W“]¦”ˆ˜üEAæð˜ìoñ¿šÿ±T (ÒÇ„ T­8ˆ«œö£ ì§1 i~{i~ºt/mMWÌpç×>Âÿï±í‡"¼æMÍt­—Âü‰°LD‰òæN-ø-d.žãY0üùýL·ÙF?±•vl+BÞl Òþu@`ôÍä{Õ07Ûm4ø~à»"‡¿8Æá-ô0^é =JW+ÌHƒâüÿ¨ùSý?äÂoôQZŒ=nÿcÍþÊ2ö3Î’Nà:F‹·V áoKØÑcí5"íéAv4ž­V ã6žý6޽V€“†¿Ãf›í1V·¹)’øª…é{àÊ茨OÝ8×ù:Vü:V2%+â{1…/Ça©äu4^ä' ¿ÞÄü{ȪGrÎOÆBZApŒ„ p×b†b~Ò¥¹˜Ž#ý—Ò¥äØ×A’s€C Žß$ðÇrSlÏ\¢ø-µ±åCáä§“³ÀÿÕ¢‰%SØù™æèûL)„²ó$þ_bç(qŽDê(™D‡wŠ©‰4ä"ðçt< €tcJÐ7›0¸˜4Šû+cÅKý+ÑâÅès”„‡‹iRp®_‹g-˜ÆÊO.ò2‹_óÐ ‰€øÿ_gÿûÂ2Äÿÿ,û½x§ÌÀwßÉp0E¶|2—ŒÑ/¹Š¯ÙJ,i‹è‚ –ð!²âêü·NÉm\ˆßFõ(yM³­€2,F Åx ž #†`2ªµÅúj³é¹§»ÿÿÒ$ü˜ÞÕxÉWÑ®`ƒÔ70©%' “fZ\þEµÿ!ØÈÿµléÇTùtdkµíùì-œÌ­~;}Ó¶{"ÿuYÀÿBm¿m°öYýÐSÚ¡µîs$ŸK'Ö å Cs¢þw#‹™#d½™Âú6exŽš ˆ?_<—Ÿí h¡6ùñöV0žã&\NݵŸ   +œ è’ù5I½j!v~¡ôªô©;<é8q·Ûñ$ Øçܪðo‚€_‰×¨qó;.‘dÕ¡8õRV­Œ]‡;Å8õª ŒÔ8ÐÏÀÿ>·ÇŸçþð8ß`u¥Þò2¸$``ÝÎÀÀàxC‡Í­Nûûð†J“söÞÕ˺£›~_?ýɾ¬gû2Ë÷g•È*;œóà`öµ½¢kûÒ¯í\3ˆ'}¡`•Ƨ]ît¼×áˆ3ÿ{|žñjû¹/ü¯üÊ:™åý̺>nMO`eOPÕ`X­$¢ISÛ-|Z!8uK˜ø‹(ü|ZPi ïT<ûŸ*ˆö Ès ÈvIp"‰€º”ÄF%²¬þÃSGmtµüÝÖùoµÿð{-@„ùá?|Z…þð|£T.ü°þ“®Q5ÿ£}Uü§ª@G@ëp§ƒºd¢Ø†4¶&CGÓ}—„Üæ[±#t#ÿ·iiìÔÐÜMßô—‚5éáÿVxE“®¾5)ÃŽÍ䚀Å“Ÿð ,Æa§†ã|´ß_ÒŽoCYmÅ‚ø™ê°-øÞx†XÞ¡øO,€4ö„«´~±k½ÉçèFò«ãLèjøm„´…ºþùük`Ùç]`GãÛÓ¢íi‘ö´G žµÛzÃz·ŸÝn?‡í~N;Ø®ú¼c†Å^þ]ñ0Å)ÍÓ J~ót\çl @X¬ŒËâºf° %v˜Àáy"µ¦ömlŽ8K€àÅɰWàÁÿãÆcÙ§xú}¾’ôíã@jQyVØO†·c†:}+”Éî0ù¿`¹!]-šúR:·vrŠð%o P³š‡ÓÌH@ ÈÅý/{—ұÓŒú!ÍŸï2°ÿ<èÏìÉUj±#áÿBâ®°à?¼o9r`>Œ wVBÔJ®¯þQüšDûdª3ÿ_s§>çÿqÿÔÚ—·¿S÷@|<ëÌ”“âÏ@ÚŠÿŸsðVÂr®â‚6¬cÀ½œÔ";'ý›”¬ºIV=‰ÿßDvCäüŸ l%ü‡OþCòèlrÿ|*ÆÿÍëü‡ø9søMÊ Ð~>ª{?ô%E¾*’Á_´@-â!ü§ŽƒIýGÍÿ?NÏÂãçBÿjÖèÇd雸î.¿û§v‡ÿ3wù¥m÷ÎÞÃþ豋u™ ÂÌ3z!¥:a¿ì GÕ¯•ŒÿZ: )ÀBš+rÔ¥ ªhøÿ:apVˆãaá{ø&‡ÇéˆÎ±@<ü±òü÷­aT2ª‡<Ÿ“1¿—cœ6³qÌ·ø/qx&uy¡ð¬u}Þmsÿ•í½n§ÇÃ~ÕþÔPeÜù(cÔÈ©VRþϪÁp§0»Lÿùº—¹•{T y—üÁÄ^ÏÀìu—]…'ÀÀ~§ãƒ~÷²‡ûÍÖ7[mpGp·ãÃWö÷ê­®=;zúþ¾¼Û:i·v%ÝÝóžè§>ÖO}nTøàHîeÑí£¹wÓnìO ¸ª#¸£'*;œ_cv¾ÙæF‹ýí6çín»}Ÿöÿìg ^VM§ ùXÑP=TßYÕs³<©øFªà|ZðùŒ³)¡g‚NÇóNÆ1‹býˆ@.ìšè .°±”̱!.Ä>®æ¿Ú6ŠÚ(©Îˆ!GHa[‹¸Ç ÿ!PóŸ$*/ ‚ÿ¿0ÿïüO ´$üOâá=‚Î7þGø÷ÆëÀ¡ÞF ² Àåïv„mDã¡qàxd?šÇNšíÏ4ÓŸhû¾ÿÆÿŸ)°ïÔØüÇ»ÀäÕ"… reàÛ뾎…}ýïh·hÿoEì;ïÒpÛ¥é¾GÓu–ËnM§ÝŽ»µP»è 2ÆÓK{Sÿ;ÎÞME<-è%û 854A<Ÿ0 zŸ&#WÀ@¥#7R‡Wñžé¦¥3¿}ƒgrdï³±ì([£ìÙ ?u¾ âÿû̱÷Yãd4{ì· ÅZš çu¢âRÂÿwá}óÁ]‹¡=„ÿ¸ª&Mº’­Àm/…“¤˜óâ9°*˜€×W°ƒ¢ªøÿŽZþ> )ÀoESk¹JÒnô¥xæ·SsŸ‹&É< ø>!ðþuüÀ›\×}—㣛»c¾•ÀÿÙà¶IwÙ c¬:Ñ5áß<Åm‚,¯n%Jàq5E ü‡PøßtüÊ:ÿ_½ÏÁú¿pp1ª‡ð'E'bÃ'Žà[¯ÿÿ!)'‚of9cÈÿÏsoþ<óú×’Ià?ÀÿCæÈZÒè’p`8¨âêÁ„Üìì]ÌÔm^™{êsJôÙœÖãïæœ3ˆÊý‰Wårm.½Ÿš#¤x—!þÈÅåkÔ)nŠ'‰ïŸâãOw¨%|J‡Xb"´]æß8­•ú׳^J¹8_âóBήö~ŒÅáüžrv«’צ`·Œy×Ëݪ䮕ð8îY%v.ë²½ßb}»Ýþþ 6…‚áÇXá£Ö>b¨ï[5ĨÆ[cM#Œ—ØbŠç¿/ñÖ¥Lìú¬ßõ1XÀ gÀŸ<æƒ@0àUÖëþ¸Íî.YÔÞj{ÔqâN»Ív»»Í'nUš](;zò¡aÎíÝÉ·· k'?ß›ñtoúãÙŽäÝ:’sÛ¨àEÆ­#)7ö'^×ÞÐM¼¿7ãÉüJ“3õÖ×ín×Úݪsº]çr§QÖÍ}ÞP üïbÁ“ŠÁàª΋nNUWXE£àÖ“ä¼ë™üóÙ¡ÀÿsIag…a`%|fq£0Æ—X@n„gN(X€;X€º„âÙ¥pmA"Ήü'°ñKÿæB?3ž%2ŽCð¿øOY–€RyÇ6òŸžhœO¶ý_ø/ÚÿÿS´†q”ßÑ(?Ü æc ñ6 òT)œê–áí×ðݫ颫u|–ñ6Íý?kêa?}§]Éÿ¬©R×yvPky‰vüûy)íѤïÂûw}ãàüD·Ø†„÷ÖÕðÑ£ùèÓ¼ h^ú4xî㻺4&uŸ—c@ÍmÞO 8@ úÈŸ®¾Õn¢ ûq¤§±F¬1-ÎèVŒE5ü 3­3Xsï÷  ¬°ç“O‰À?Ï|µi$žÐˆ·¥ þ´HGz˜“VˆóžÓV¦ã_û]Þ:ÞNº¾.{}Ü ½¼uO˜]ñÊèx9&è™J—LeÉ„Ò𶉨NÅêÓa]oc þ”`«gTïLD'ÖüùƒÓüÐl¼oõÆã’;¿Úùè^>‘½9ù3GÈùìr†ìµ „±wL÷,¿”ýឃï¨÷ãá ˆè”¡yˆÿÁ>ò•ŸNNCð¿”Û!×ò© æY2>6gR-:ð„”•–¨]TðKó&¨7 p$uÊÈ‘Ï%“‡æø}Ëñjœx%¼÷]p7XÀ›è~el÷DBÿBÿ×2ÆÿÈ&‡×HûÜ)ÄÿŸ3ÇA¿NþŸ ïþûÜdx;¸dö#µY¼ÒÈ þqò .,ËûüÏS 5ˆ°7âø'ý›»í ¸%È>%ޮċ?á›aräAªjðÙ’¹Ùà˜_ žžý£tê3uü!W¶˜>ŽÃ‚” 6¿œÚ‘¹›º›%Úí›­ÃÀ){X Â=lP‘6Tª5S±vrô뙩Å\ÙBŽüm¦l)O¹=¶…-[ @ª¥Œéš@ЇG08#.u²?¼ÀØ‘¿Ø»G!±j†!ð« ÀÑ7Nû=žÉ½«A Fƒ’Ù(õ­ñ®—ú5É™- ±guû‰‡/.7˜^;?U2_B&x—³ê€ÿðIR{¾ª¤Þ(ð³Nâþ˜O‚!ÀBs™Äµœ¬ îqz©‡Øëy›ífëë ǯB Þãö¨Ãé^‹íÍ.§û VÛK-6—Úín·ÙA p³Öêæ“C¥`÷ D7uâ®ëEÝ?(|t4íÞáô;‡²îδ?ëæÑ£ÄK†ñWõ×öÅ^8yõhòsÓ3”È{ÄÊ|[ø"ålCîå†Ü í‚;mq÷Úcž¶ÅÂ)òN Oñ9'ãØÅ1ÌÂ(Ÿ‚HïüHÏœ0·Ì`GPz }ª¿mZ€]º¿]Ï6•k" OãOe‰XilËtŽ<‚à˦e2Ã"ÉÏ]ÀמƒàEÃ2•eAÞ)bš§q-‰ÿS¸f"žyŠ?‚(-Èj£¤£DAæD¤øŸÄ3S]Ã9¢d|¨ u`î‹×Á"üLA¡¾èD¡‘ÿœ}šžt «]G¶Ò ÄŠ=á?0K:Ôá/FõãÿÍÿe?ï:ÿqû&œÿ¬ÿ“æÁŸ5¬pV³†¾–ß^ž>PbîÓ`h²õ4! !‹Zx†tž!-`?=ð Â?ø°j˜[؆+½ê‹]Q&ÿhˆí7ð¢}¢uþÓTüW0ÕŒ6¥ÇP ¿ÿU=?Tå‡oüÓ×bñ‡Î·§øï¤æü]ˆëÏþÎÛÿ~ö{(þëû8x»îõöÚö8rÑ=YÛ8“24&™H‹ï–G¾R†w’™½Àÿבý³Qý³T]b:¼{~àyâð¢H6­æR\lÐ:Ö…é@ò^°Íưp ¬ ,“‘ž`+ÊȲ`—„ú`¯q‰ ^F½ô£ß$ãº^ˆ$Iç'Äÿd°3ü8䓚c@à@Wx$¥þ7)Cí«‰L™XN•âJwªï§: Å+B á?Dþ€Í7±x(0—6²œ§|G]þ5Kù1[ Ñ>ÄüŸày&ð«©Ràÿo“ÿ(™%üÿç™…œ]øõäë5rû5{ìSáÔ¿Î.þQüš[V©j0#@7.pld’ÛØis¯×ñî§v)ªkŠÛ(ÃÕ´Õ n#ðâ…#élyÓý<‚Až±(]6Ãïjq¸Iø?Òô!EŒ󸏔þ!kñ£«ñ’eþX¹ AøK-“‡!AåŒ})RþQ:ók‰òcÁ8h5OüZêø¢`p2¸©ÏûÁƒ¢Œm¼”~)»|!þÇA »ÑŠ´Y…:œbn‰.¯pWÈ3‡“ïòþ¸0³R4¾˜;¶œ?‚=ˆ h‚ÇDl÷$dŽlå%cWçâûÇ©“_à?nÂò­ €Gò^×'=®O†\ž´Ç|ëì&™_ƒÄ»fØ»~Ô·QÉ}5â[×ëTÞzün³ÅõN›»·§rŸxƒ˜â?¦Œ5ÿG½*å¾/á üiü“ó_à? ’¸—c[޵Þíi«ÍMàÿ ã³õÇ®ÿ[ínA^Ðíü ËùFãñ_àÅÆã7ŽÝª?~»îøõ²C…wõSné nèDßЋ½³?ñî¡´û‡sîÉ}d˜uó@ÊÕC‰W÷%ÝÚ›tmÿüþHøòÁÁ¼ç&%õŒsÍ)ëóÏ5”üÒrújCñ¹ÖÌ+ÍiW›D7›“ïÖ'Þ©Š¿ö<ñBYêɇ™·²ù×rÂ~Éòÿ%ÝÿBJÀ9aÐ9~P©€ PË(ŠöE ˆòÊ‹ðÈu ÈrÈ t BàYÿ‰þ¥"üÍ üA$þ‡'È?Têú›ÿ©ð~Ž‘šÿ 5ÿ) økÍŸÿüÕü§ Øf|–i Ó8šaðd˜D2Ì€ÿa~&a¾f¡>¦ Àx—ÖÏ@ÃE‡~bÝtÛú ª““0|»XjÿÕúßàO~iõþßãDèÃ?Ó(þÓ½õé C:ë ûÄ9¨é¿SÀþMxÃ÷€&[ýh¨~BÖûy6ŸøOz{âLèjþöFô¿„&*þS A¹VøÔ¨gÿØc¸±6|k-xw‚mK‹²£E8PÁ¿ËA.[yÎ;™NÚ¾=/GO§½^ΆÀŽÅ‘Ë"y|ëÑðTÊ "¹wŒß…cIÂ:È´Þ©ð®×Ѹ n`6‚jõäâE€äѵœ©åôñ7ñCŠàö‰Ðõ)Â-äºî<ĽEØù£žç¯ˆÀ«îsñ¸ce!q~#þ™TüÀŒƒüŸK/PExRL þÈÇŽùŠÏE“@TªùïöRHáÇ`B¢‘4‡/I»)ðA¤Ú玣ÉR0ZÆ©I£+|ñR$ÎÉG­0žKzyD®O ’‡¿d)>å`7ÿjº‡Ñ‰F?g+!øÿw)vþÿV‚U Gž¦æÑå);…÷~-˜&å)<¤ÈÃV¢ð$ˆÿsá(à·ýíInÝrt·’U‡)¾ÕþÍàXÿ lÆ÷€Æ™¨ÎÅx¬ÿS]b0Âÿ:£Ójþ¿I¢Ò¨(ìbZ‰“¼ç‹ÿï¸CGµ:A4Jš¬>àì#9ðÿ÷SÓÀÿO…ðy¢ ,eŽâIq¼x2°QXSc{¡`gHÊÏLÑNà?ø_¸‡IÁŸðŸW¢ë_´'ð”nxwЃµ“²¯ç¦ß*ÞNÀ ~ô øa­RÛ|¦}`À¼§œŠk–SGgc{Æ‚ðæ×Þüª CØH 0ÊÀý,ÝÎpx¦óS@÷·EÁnõ«ñ,©IÁi—1‡}jûœŸµ¿Õby½×áá¨gù8»^NYi’ùTùÕû¿È—ˆ=žÃ§ F óªÂ‰@®eø¾×ù1 ×éx¯ÑúZù‘ÒJ“sÿv‡;À<ÿu¼Þáx‡?¯·¾ j±¿Ûpüò=ƒ´[ºÂ«»¢.¦Ç¿m˜|ç ¦O sïîO'½µ?õÎÞ´kñç ¢.íÞÞŸñÔª°“­÷ü­Æ çë/žoøåBõ™âš3Å/OW•T”Våž~–Uü4«àQn朤›9ÑÀÿË™Á—Ò‚/']޾|Fè:žwŠÏ (Žñ+Žõ¥,À-'Ì%+Ä , +ÈøŸ`ŸéoÊàHçZƒÿÕð'ü°«ã¢dßo‚@ýN|3Ûœ(™mþí À‚ˆ²€o-@¤#É`JàŸÈ5EQð§J@æ„ÿ±,“X–YÓ4ÍAL³p†)ïÀ&Æ^Mw]ºínšÙ6Úa€ÿ÷ªÅë;7m,òÐÕ³àþÎÿÿü©íÛ©Äà&zßÓýD³ÜNsÜEóÒ£ÿ‘üG¨ˆÃ4¼ÕuPS}½+ˆjé_ïöÄ>Ÿ¿Ïð!Š‚¨~ü‘ü¦t1M@­÷ÝÈŠÿF§nþŒ¶¤E£ÅXkFÛhÅØn"Q¶á¶ôP;z°==Ðqs€ÓžÓ6–ãnþ½ìu=ô=í <÷z:z¹ï8ntÓ'MÛ€Óžú'{•q]]€}eNl†'xÝ?×ðÇ{^·ß%K?æN/¥ÈÈF¿©¨žÅD Y°ˆ«À3$üƒ¨ïmòÐdt×X Ão|Íœˆ‰¨Ûă8¿=¦‡Ìþ“=ò¸´1-à}Î8Ù ¹œƒÅŸ¯%Ó_ 'WsÆöIó@ÀB.—áFHªË”* ©–Ñ SÑVReŸÓÇq&sìÀ"ü‹¢z°Æž<Œ{ :ÇÉÂñÈÿ,%á?ÄÒx…*wòÏâ™Q“¨Ap³ÿ“âÏ µ†‚xñkÁ„:ø‡ïö3¤0ò7‚~àÿtp«Ôïe·ÝƒnÛ;Àÿ%HXu€&ˆK'y­Àÿ×á“A­Š < ï€oïM,^¬f.$ MƼúÆÿ°æ"ÜS€+xb–ã†VÃ+8yup)®ò2àÒøçSk”qž&&ùc¿–L¢œœúZ2‰üÏ–âäøÁ‰€†© †Aæ“k‡ÒÒ·ñ2wss´Yy:ÌBF!U*ÐfisKvûëj^5NŽ­úõÜÄZ ÞË[Ê•/fb#ÐB.Ö|fñ–uÐÉéÔ…s:²ƒœüŠ©Û¸„ÿê'Õ{œC Ž£á¸ÍrVhŒÓ"e6ޱ›Ç9-bÏÊv›»`Ýv÷œŸÆ!b f‰ù‰È/¼Ÿs¿kNcóxðòáþ/×§=.ûÝË=Ë;îBœ_ez¾ÚìÀ¿Ëé~ÓñkÍ'.w:Ýj¶¹Vi|¡Òì—j‹ËÍv·:œîàPѵÝqWöÄ\Ó‰»ª#¸fÌb˜æÝCw Ó)þ'\0ˆ½²?éúÔgÎ…Y×_]»\y)¿âr~å¥ÂŠ‹¹Ï.§•]L+;—úìlzYiúã’´‡EÉ÷‹’n®çÇ\ɉ¼’~5=ìZJØ5aèU~ðÙ„ÐéxXÀÉ8æI>ƒ²bÙÁN °€œ Çì@‡,t°ð?}|#ÿUÀ°$ ªüø©ü')€ þèæ),3ÐFþ§ø›ÿÅþó˜y2¥uþ«æˆ&r-â)þSð7‰c›ÇP ˆfYD²ÌÕbìÛ䩯鸇X6ú ç¶á þ¤øó— ÿÿoþƒ¨?m#ÿvSü߯Á9¬Á3ÑýÒƒŽjÅ+]ÁG4QG5¨°_ÿ0ã£Û6Ìp¦NØŽü§˜/4Õˆ7¡ƒT‹Ý)øÿäŒ9-Ê‚ ²¢…׌°Ýí°%ÒñP˜ãæ{-{-®Çn3Ëá'†Ãv_û]^öÚžvzvúî*þ»ºüȵøÿMÒüï‘ÿTTxǵ†Ÿ¬‰½¦DJ‚Gàp|ÿ›d IH%´V0ù¹húc³€‚‰ÏxäJvÁ ´©/‡¯ÿ§6Òb©úŠ˜Ô‡)ÿó/Æâù5^NšáŒÐwéÔN™lªÕ3g°ÿ9{‚ªüà4!°€OY \ï[<ƒŸOáæÇ?N¿C-S;(!ø¯óKØ8Z8‰IY²OùJHðÀ"]üÛ;ØŒÓÆwÙÜgV/„u*Yõ+ßZŠÿ}¯C;p%J޲œï˜Çmkýó|ñtt¤Qʨ6Âÿ>›oC›VS±Ÿ >1à?ÀU8º?þÀBLï|¢x·^âžr°ü‡|cr¤Ÿ œž})žX-P੺ht9ah* yœ]3ÜðÒáRÑžÈ̼m6^Ðe€àIž6§hÉîÀb=Þ)ƒ " rçSo³z>‚mä}.ÞXÎ’.¤Iæ’ñÎÚ[êØ” OÝ1×½ ÆûtÙÊ…øHp†UC>/©…\€}²™ ¼+zœu9<VSBåœF€ÿ8·u”Ñ g7+xm2f}Ÿkù+;lj;q»Ëá!¾Ù»j̯øO,"RùÈŸœ@äßçò\ ßé1_ŠwpþX¤]Náðx̯5ÿ¥üÐ)x$·šN\®±¸Ðj‡ <åFgªÌ/6ÚÜÀ/m¯¾0)¹¿7ý¶nÒ5mÁå=q—tøWõ…wõ2€ÿgà€Ð½é7 Ó®&bEè@b%«´£ôZýÍSÏoeWÞέ¸–S~-çÉÕ´Ç—’_L|r!ñÉÙÄG§…÷N ï”Äß,Š¿ZÈ¿šÇ¿’{53æjZZ@RÐyX, TÀ>%`–ÄùÅxD¸ç…¹æ†ºä‡ºä…8ç;倨‚À0 `WWþÉd;Ó ø¯¶°"âäà¯â?eI”ó_ üF ‘W’yfÔÕ0|žÂ³$m?„ÿ!ÅþãØ( ,dzn”,Aîß9hkZí «—?nÆ \ݪÎßøÿÎï¢âüÿ;ÿ±è{Ì/¬¶ÒìvÒÜõh~ûèÿé<#Z€1-Ȉ|”†Ø7Ò¤D!üTžÿ m"5ù üAü¿ðŸX@Üú›£Ô Bë"ü'ð· …XÒ‚k†Ûo‰vÞᎠuÛèü#Çq ÃîÛ|ì¶zÙîð°Ýíaðw³ÿÆŸY憗\…£Q5³ü^2„"ÉEþðdH—"ðÎsŽ˜ˆìþÏ& ÍÄb"° Äan‹‰#&È‚ÛÀð C¾”5¶.]H’ ÀŠ˜®iàUL—4¸y<¬r\.Ý Àǰ_(þÃoŸ$/RƒˆͰ ‘(&¿ÏÂñÂÿ*Â}"dÈ0.|¤.ç~)œ&‡¿ð%ÀDxà?ÙEŽCçpƒ ÒÀ5Eº YLTÏ|\ÿr ~çóiß6BbyOüT}k†Ýžƒ þt)ƒGpÿ˜8?ty  ÃÃâJRêt|ÐçöRxæ×˜]|qô ã›kF¥µ–;\ï5Ù]¯?q¥Êâ|£õ•WŽ·›N\}a|êþÞŒë: W´ù—µc.jG]ÑK¸s0å¡QÆÝCi·ö¥ß:qm¯èæ>Ñ}‹¬þ•Î+7^Þ.|q/«ú.ð?,àù¥¼g¿d•_H/;/*;›ô¸Tø€âÿ­âÄk…‰—ó.å ®äÆ]ÎŽº’z)-ðbJˆXÀ™Îi!±Ÿâh¯¢(O°€‚0WTˆK~°sn $öÙvY<›Lî‰ Žu÷_í„ÿ*àS._’WÔüÇç 3ž˜%±ÌIG(Þ SC~ö¿‰º/ŒÃ‚x K ÏR¨æ?Çl#üÕŠãZªe·g³ÕM€ÿ-8±ªüh¨ùO 8„ÿÄvüòøÿ÷7`å_‹¾K‹¦½‰éƒû¼p—›Íg/uÆ=JóßÀö5Bi¡ë½ýá&ôp“¿’?Ê䯑? þûÀ¡)d´x3¿ó?ÆH•5Dmˆÿ£Ìé‘t€°ÍßœpL3ØþÇ(·a^Ú¡ÞÚ!^{xn;YNÛüž¶[Ýl¶»ZïpµÙíb«ãj§Gøïî´×ÃÙÐÍk+Ëbße·YLð:¶{ZЋ'‰Ñƒã„ÿÓQý ‰˜~àÿt Äí’÷)ãˉ²éˆnÈÀÞ%K—3X6Ï”EçÓFþoR†°Ž×0Ú9™D+S[†ã°ø‰ÃDd·"¼Á Ð] ’*)½#1yö`Ÿ¬ÁðžºG Ø'~ò±Ï'g|>u˜¬‰!å 5ÿIô †²*’}JÃàŸÚe—jÓ¤K¹Š·ð §¼ËÀa¡¸$=cìS6^+ ÅŸÕtœ& /bå¿`æß¥oþuúÍïÔüÿ?ϼà†o¬×ÍCð¹ÀgjM0ö|â22ÈY&?äb×ý»”aàÿ\Dç¨oU—í=ä¿wðâÿq¿zà¿’Ó<Öý:´ ‚\‰ˆü‡ÀþMtÿRüð¿~Lò°&ÂÿN«ËÓþ5ï“®Uôˆ˜ÕD4¸÷‰’•¤á7ˆÿA¤þÿ–:>Àq`L¹¸økÉ$^(Á} ÿ§, ¦³Þµ¯q8[µã•è<À|=.Â߀•§ÏÎ×ãëÿK ¹zì"ý€BíÀ{VÙÒ˜ªå\ñ»Lñ;r%-MB‚ÿå,9ÿ“ˆížŒë™âNaJ•Î ú'ÃÛqþ„Ü`OûÜÃã°oX<éu}ü‡_ö«ã6L¶!ó9ÍF=XÛß–X@&ï8±€¿ó_­üßXJò3ý•ÿ\ µ’¸¦ÔügjÜú¼ þ–Dÿ ¹VñK>Ç‚èïðçó¬þÇ@ðÄr×f“Ÿ5þßáõÎõ¸}¥I¨¤à/eŸÿ ÿ·oÒÄ)›pÔç2ÒGµÏkÿ‡‘ÿÁÆ*…¡üC¿µ÷‡›üùqhÛ:ÿñÀ—”úM0øG  ­óE, nƒ¨ AQÔP þÍéæ´0sZ  ²Ò ´ÿ9ÂC;ØW?Øgo ×CÏ×YÛÃn§«ÍN—»­w;Øãl£ãl§ëb¯ëê çæ¨ïîdàà¾ÅÏjßeϤ‘˜ÚÉèÎñ¨WS|\æ>Ú…üî i î@ ˆéSF÷ü—“Ç@“aÝR^¸ÃøO5|*–³Ç!þ#’@¤7Û5…ëM¥¡íätDMŠO…÷LFôâBt?üÎ?ëþC"€wÖ-+ö¢‘wÔÞ é7LÜêqàgŽgËP1?®¥†üÆIü?Ÿ"YHÔú¡¬&Ë?¥Œ}ˆ—ÿƒØ†”![ÌWÎfI糩…’éØáð%›dȘhuðüÿ­`òßgÞþ³t¨ŽË¿ÎÍÿyvâÿ/%³kÅÓd’\Ћç TýÏåSð,G$å)þ_Š”_Š'P'§?R½µ«Y£ ü^Ü;Ïh|Íë˜ íàU_>œQ V ï_ Ï!üÏÓåðOî+2äœÜ˜§Í.Ö ,Ú\á|z2¡y5d9à/^LG;&íXKÀ^» ×Àp½BæøbâÐTÄ+Üíˬð*ëqÚ?êw)Àw¹Ø§¼ÏzÝž‚ÈØu𙌴ʸM£ì†V=<ÊÁ­Û†™uÎO[­n6[\‡Ç.Ûû€z™WhĽàßuâ¸Àˆç pìõ©Æåìxà)Îds{6è^> Y†¤åàä ¬§Ùúz½ååJ£³Ïž¬0:óÒòR¹qé3£’»KÕÇÎR[€O¾0>ûÒìRý±+uV¿<=RpC?áŠNÌý˜"ý 3{vHxãpê̓Y·÷e?:œ[áVò*ëz˵+U· «og×^Ïk¼ZR{ñä˳%/Ͻ{Ÿ»Öý·ê}„L»Ï>ë®Uë]/Bö¯ÂSõ¯óÖœl/8Û¸`ãú7/SÕ[nì™è¶å¸1€ö2k 2ô¥°‘•ˆ±¹Àa jxnÅcÙ+aægù E¼;½2<з1z˜,<æ,`}þò›¼E`õN:^g…9²?.ƒ°};af'~ûˆb¦àÅW£'W¢&–¢Æ!/õ‰C_Ãs 8J v à„±ë,*3gKÞç/…2ÌFê<ó“hŸ¨É!d¨Ç1ÚÌ¡V†e"îPí9{á-„—}›Šj?¨“Ÿ‚Ë(òÉ]Þå.ìHÞ ¢qeŠ6ç-“¦¤ÍÀ•[d›Ø”mÿÉxþÿ]µókåáÿÇŠ­ÿ¬ÚýX´rœ#þµdÔÈœðÛV ³æ€ÿ‡,Þ¢_‰ÿ—½;#ǰøïÞ.À§g+lt=tx3|x9¸Þ¯ ²€?¸€ƒ>ð;‰·=0ìðtÐô6ÄÿË~-o3”ªêo¿Iüœ¹ü.M´7.`3™‡=Q™âŸòW€·ð~Sûtˆ ܧ’åߨóße¸Rí¸šÎ˜Û \ñìÝ Ø„öôy>½¦‘R¢€)@±r`b ÷|PñÙ°òóÑÀÿ"ŒÿƒI pU™5âÿô}¡ð§øK¡@)þìspí&ØNš`-qj3e†,ú1où}ÎÂzìØRø€À¯}Ö«iÖ£qÜñńà p8“åÕ$ök›v{9îP 5#ܱ…Ž ¼€Ð§ þB– ¶24íÙ1bö¼[çîéc°a³'ùÏ»µˆ\š„N<›š1ógÓöõàpòË®AäÚ¶äÓ .—8Ô Pº\À’5#Ü)¶ý[>ê6º ñÿ+kÚU//•¿Ô)k2¨h3¹Òlˆü‡5«šµ¯u›ßi1¨¬ÑÊ{~‰sG!®R=ò²bÄM•˜Ûª OôrŸi×h”Ôê5ºÞýàvçÓÒŽÇÜ®{…ýw+»¯UtÝ*í¼YÒ~Ûv=¯åjNó•ìÊÔ”g¼(KVÂ~Zœú´(é17þaóa^ÔÝì(ÿ¯§“àJ2¸oÂÿŠ8÷ògà?¤¥öE6…áÖÜ0«‚PËü Y!Ï‚ýL‘ù''¼ÒCa?Sò¸Ìø£Q BR!?ãÓêpD#Tÿ}Ù¾`\F‘Ÿ?á©Ê!?Ÿ\Ù¡¦iafpUÿ+’YIu˜ÁÔ g¨e¾g(q~yä<l§Sü—“û3óÁÎÉI“…/*;/¯&§y†aðWšÅ?v?È9—sS”óRfÿƒ5ixò«Kÿ?ò?æ”Éä: ÿ‘ÛúÒ°_üËàÚ P7ôÓü—YÒ‰æ?ˈkŒü6Dþ{1|,¿ vüÁßS#Ð[ÛÏCÓÓIÍÙNÉÖü‚µé9³óp/`g‰fouÖÑæ<ÀÌÞýFª7œS±˜¯$ŒKb‡ç£‡Ì!C‚À^QÈÀrÔèFÌÄ UÞ¦-@ô. è‡ÿwðp?‘ÿ&U´—Êßaóä®~,Z‡ÿÔ«±cËQÃ1c@rˆíIÁÂþmæôzäüW…ä3‹ðÑ…ˆQ ??¸o.ìõs|5~j;ÒCƉ×4!Äíï©Á^ïÎ@~¸!^>„Ç óIäO²þÑPý?ú0ÎÄŠ ‘­îo“¸“7mˆ´Ï]Ú/Z:(^FqÑÒߊ6~-XÅõ1¹Ø\À§šçq1®•É•@Tÿ¿¯îü+ßüµbó÷ËÛÿŸJÖñ`º 7‚A¾ãª„ãÃE‹(°Y¼‚ƒ±¹âý´™Ö8ÄÿÀÿ1Ëgc ÿ=;$„ÿÿo„ o„ -ànDH¶£'¶p cj'£'%ÑcÎÕ#÷¦¬®´Aü›tÒ…$þÿ)}á8Uü?N¥ÚnÙÀ|ñûÜ¿€;"ÙBøí µÁ‘ä’å_Ë×p@ Uÿ/Z9Ìâ¿Kl‡ÿ÷Ãx{̦#Új-ËÊ•bJ”B¸ ùçý‹C¹gƒ+¢ËUCJ•ƒ /”(_VŽ,;ñP/kÕ)ÀÛ‚9ü}3ç°û7]°Ë™ƒø_fà°àoDt¡W¢‡%!½s~à¦\êH 7\z^²€ Ç:œðlY êÛŒY àL<üŸóï›°­ï1x)@ŸÁ½×Æö|‡—Çà?\§¬k&­^…¼3ö|Ç&²âÿ)Ûš)‡z¡{ éy¶Q2AxÎhÄ'ÂúLïµÜz¥s¥N«¬V«°^»¸A·¼@‹ÁÕzÍŠzÍËMº×[ ¯5V6êW_Êz¢™^®Yz.ô†Bì}õÔ‡ZÙO5¸Àÿ:n{`ÅPùþ‡7;—u>,ì¾Ãþ÷\¯l»“×z+¯åfnóœWײ¯f¿¬Ê¬¿ÌÁ*PYJuiòóâÄgE Ϲ¬§ùqs™÷r¢ÁÜÎŒ¸ÉAþC ü¿šP•ä.à2Ëø_Át‘Æÿ‘ÿÿ?»?£Óöü¥ä? þÁR}pRŒHCÿéÞ–Œ^op}ä)“•}HÏ”ÿ'‘??%Ø85ÄDÆyš²ܨ~ES;ƒ+5©¥ê”D¿2är˜ íÿÈx\$§MZA’zü’‹òrjgº‘3û†aûO9Çs · t/e9oUº¿:#X“v‰Ž'¿â´ÚøOâÿ¸!‘|ÂÿÌÿ;á¿®w—mx—.y4AÁÏxz” =ĈægH÷4’ó2ÿk ý>îZ~žÚÞnZnêŽÖ*¶æ Vf¬Í/Zšžµ6?kkYÀ2þc àqÖ×TëŽ{¦Ù½;º7"a /±Æ×XdE#yœLþ¢dUùÇ'dÌaÄ›ƒó¼8?›0sÏ;¦vûyòö €ÿ‡E8bð±hí—¢uÜ+ý¦„ÿÄÀbæÿ¬ÜþÿÇå_J×.[þCüÿ¡hø7ðøJêáç¢*ÀéZ°ßs%Ø| ð+nt?nRâ×9jýø¿âÛq1Šü÷l°àÙðß Gþ¯õÏûtÿ!â݈/€õŸÄÉ…˜×#ŽÏzô¯Ž˜ÜÆøŸªÿcDÈ?dÍ~`Ï¿eÏ$N¿OQ}¡<ªtž’€ãC„¹”$¥ü†¹IÉÊ[.Žkÿ!þß‹_öîÙ ›Øg À³/% ÖÞÓá”\ /¼\p!ˆ{1˜{>ÊŸ%¢ ‡9ó@þÔäºØüäiªÙŒ’†ÎžßM™ êø´‘šÄÿè\êÀÌù´Àƒ#v(Å€gÄž­«¡¯qÃ{`?–€0 z ÿ¨}{Á ˜>êнի'ìlk„.¯Èòw#dµÓ¶u<»º)›z°IûZˆó…îÍÓN “65p{µ/P2¡à°#S€ú1»ç¤´Ûì^‹þõzíÒMnfxWú•õZe/µ*Á5¼Ô®h5®j³¨z¡›÷\;ëªj|Å‘·.&>ÖàÜUáM‡)S8dÁæãþØé÷É(ãÁÿÇ ­­ð&þã©J øÿ!gþ˜#„Ÿð#ÿ®|*]#C(U‘½p;µê׿>±?ûŒ™Å¤N×ÛW”âK"J#rÏúõ\%ºL% ¬T9„{Á¿èBÀeµÈr…°+J±½ž÷×3FÞä ‰èA¶x=yjŸZ°“!ØdϬ§ðàŠ½ÁÈxç·§æCQ\ÀDÝŽuX~w©›t®øCIÁ¤#ä`á ˜þCä/ôë½^ z´[½hÓ¾Ñzéz¯þ2>¤Äÿ',kÀ¦¬ë€ÿÓN/q¼Ë«Ü\KÆÍæ)™¸gj)¤Ç+¢ ?ÀˆCu·Å]>ÄÿÏ5 žkæÃîë.•@RP©nšŒ/·[]¯Ó/z žqK#åê¹ø›çS«gÝWæK.[üfýš ÊoÒ-¿¥QÊÌêT @øž*IáÏ@¿pª#.àœU2¢dßàCeyšö×4³¿ÑíÿAs?K÷¾ˆ“¿¾ª4,þ«KWº ÿuä"ô‘§È¦ÏˆÑgúÿŸùÏ2 üÿ£ 0 ‘ ÿtñ_f_ÀŸmBK5Å /If´XSz¸©”ÿnÆ_yZ}ëå¬îë¦åå¬ál«bo©dc¦hmzÁÆì¢µé9k³lÌ \À9ë Î6Šnö*ÞΙæf5^Åóѽ¸,~LûZÀìŸ]NžÅ͆õ@ °;Áü|`V\ƒúñD af‡ªŸƒm¥àö–Mæ¸$¨˜«7¨ã¹ùÈÓÇv™S›áã8­ã7°0¸8´6üÇ1Q£xþ3†‚©³›)3› “ûlìQ!Â>XÀÉAáhRü“‹]å@~0¢« ŸÚC‰;Â(•iÙÑ0žÿ²ùÿ“ÀìáOî'Lã @–x?_a?J¢ࣈµ,îqp5 7Hb䟉k(?äIþûÊÞ]Ý'‚o¿Unað_± ‰ |ùÏå[¿Wí} ê*?æ/PʰŸÉhm¾èC1n«ÙÏàï &缚ûMþo¿¹4‰][æ\›!Ø ø¯ö­÷-tÿ÷㦶£ñþÃßh>ªÄéyŸáõY›'K¾Í;¬QÒÿ‰g'ü—"øY@šàµ—…Dxr«£þ#Ð>sHÈzJVÁ‘üqÈ®`ñCæüAÊS€ÇÁ¥ÏìÙÝláVæ”8¶³Æ¤¨BY¬^p!¤X)¬T%¢B5ªðb`áE<(V (Q ¨P /»zC#y4¨z'{ê¸`n?[¸—%€¿ÓdÎm¥Í‚nΆ¿)žã“*Ð|pз}ÚµøÏsÆøŒ´‰¼[¨î ìÌx4Ugà?dÀÿ¯ÎYß eÓÎM}&!h½t­]ëZŸÁÝ ëêiÛZÈø “V/ÆÌ« ÿü@ø ;œ2¹µÌ:6LX¿8¿‚{à?6¹5Íy¡L4¥ý|Æ«aÔ¹ºËâVnÉ3ü§ê¹Ï4òà\•Áã/ Ë›L/7˜VÞWËþ_WH¾~6 ‚ÿ‡ªœÇªÙ/ ¹]‘×F¯ÜxPÙû ¬ç~y×ý’–­÷ Úï´Ý.j»UÒr£¨éFñ«ëE× ë®ÔWåÖ]Ϊ½œö¢"õYEòÓò¤Çå‰JX÷‹ñ€ðÿVfŠBœÄÿx œ,å9 ù_Æt,‰¶/‰²“¹€tÖ_ð?ë¤èDÂ4ÝÇ$ÍÛ€ä—?Ê„z£%ùH-ÁÇÍ×è”|a'ŽÀøO¾¨™/ìüò#üO ’òŸÿõ¿¦ÿ•fþ Ê~Úÿ“æôÍíšÇtµã¿ðApZ$`ÐÏÉɧrÓvAþ.€¤²ºÐª¬¤÷5ÍúšË?iÞçh~Š4Uš¿:Z¥íªò>ÿ£ hhèÑ¥vÒ*íÕ×§Ÿæ¼>ýÄh²rq$8 4iÙ‡ðO3¥ÉŒMI}Æ™Ò"1þ§{Ò]ä=Ìþæá¤ìå¢êá¨êd­dg¦ð·2Áâ¿•é÷`ÖfßS.àœƒ¥‚‹š»½¦¿ƒÛÚ®Å÷òjÔëÍè IÄ/¼}6ºW’8¶4Ž€Õ»’0½À§çÞT‡\`/Y°ËÆ\)š%ÞN]‹_¢–î­ᜦȧKìÛ½:´1º>º<¼èÛ¿äÝ·ìÓ^`9pp%xXÆÿ帱 jÔkÇĦ6“y{é\æE¹yã.’fB”¦dÞd‹ÞQsU´U[(!!:ÿdø‹L¿’U¿óV>対MD!}ðY»Ù¢­Ñ^áâq1Δ>qq±‹TGº`å- {G%Ô Â<ÿ?­ü÷µƒÿ}ý‚ˆóÿãÊî^Ýû¹Œ‚Ùæ¯Ûp‘?Åÿ…óçÁ þÿP¸pÂÿyˆÿ÷Rx„ÿƒæ§lžnõn‡ôCh:çÜÁ§Ð¥ e?ûæ½Û—{ÿa¯b§¶¢FwÀí²&×& þ¦ê?3Ö%^Ûñ#²ùߣøÙ)(ã|œ4 F¶j¢óÂÅâxܰ|œ&üµ`ù}¶˜Hg*Fþ£È*¥Þeˆ€ÿzlÇN€_^Måÿw3gv2ÆÇü«¯«&üR¢™w1¨P9¤\%²D)¤X1ø_¦XpÁ«T9¨R5Ò„zYSá o‹Eï %‡ÙsdÞöíL!\ÁÖÓfÀ¤Oy ¤ ´ñZèß1ëÕÂsi¶yÁ?ÙÏA8òß¹~®  ü{wþC˜! èŸöìàyu <Ûçýz„^c¶5½Æ€ÿMU—®wëÞ6{•IRþ—Æ!ÿKcdüçþÏü?œ†Ї1ÿ)ø›$ù %zÇ{ýÁ¼ ÀX>†,ýxo=bpægÀ×àgï« öÿþ`)Rþ§Ÿð?#È‚|ˆö¿£»üÀð8Çð½ xQ.HQÎÿ<Ýë, \dúA†_D¤3þïðÇàüW<ƒ›Á‰ØKóüp%=!ìÔ¢i@ðÿGþëÊGêÓÁùOÈæce ¼ð€Fís‘òŸt„Js}´ÏeÊp(Œ þSMèi& À~eéf´4sZª9-ÞŒeÊ6ax1ÿÝí.x9*{Ø+;X^°5;om|ÞÒøœ•ÉYK“ïÀ¬L¿ÃF ó J®¶šžŽzÁv*%n¾Ca÷WÃú w÷L†¶ ˜½s CÂøaAükQü „9$èšöhžõj] ÜeÍs2Åéü ÁzÚìrü¸(%v!ò_ è_ôï“P]ykãë¡Ã+A¯!ìò/zõÂuÍS€µ°áµˆQÈ#V˜Xö‡Èà)Àv*o3yr/}ö8G ö6už{Ô–‡{xð(Kºö ²€}j;‘Ü$Õ!ì â.“ú)}ø5ܲ—Þ% Þ°qïðF–p#ùÿ¾l§‰s%?å¢>?ŠHs±‘7ÅS25¤Tÿwù&á?ÀŸðâøZàÿo•;ÀHR€ü¤ø‘ÿ‡<1xªÀ¾x”7'ã?ÄÿÛ±£³n Àží3€?˜Ð©QèôjʶBPìõëº7/ùwÿ×Bÿ#Û‘£›ñ[)ÓËqïí·j–™Ü¸Ô@ü˜‰KmöY³Ç ‚ŸRæL½I˜ÛNâAtœ!Âðtñ~"NX$Ï|¢J@?å-À ü‡€’ëÇòðÿ(az=|p‡5‰}¼©¼¬9à³fÖ’,ËË™ÅJ9çý K•ÂñˆS9¤PÁ§TůDÄ*ÔB+U£Š/DÔX”ŠYÝGyj€¿Åæü÷rÄ`ðš[øÇ3³™Á'Aø{³†_¤³îM#¶ÕµTÁç%v„º6L9ÔP{¸j©²Ló¼†à þþOyv̺·‚ €+Ï¥qÈòY»ÎfÍ+´¨WuéÜ1}LÁÿϦø?hô¸Ïø¾TöÓµ á¿l5Ù, äO €çiçiD™¡Ô¼ô‰1½tÀb½uÁâ|ôâ}õÿ`q>:§]€ þXü¡øŸbJøðÏ 1søAÞõÜWÎx_üÊ_á«¥3á*_G©ž Qd€ €\¼ƒá7ÈpůååHÍç4üäé`_ð_üEWþ ýäßÒ]¿Ã VB=g ˆ-XSÊÜÛ®I;)ÑÀdýÿ„ÿdøDí&Cý©ºt±¯ž4 Mþ§ú‚èd"øsðoÂH7£sÀÌi™´ sÛ‚Î2§G›É…šÉ{“úù7®¶?x:(¸Û)8Y ÿmLÏY›œ…ë ÿ!þ?koqÑÑRÕÍNÛÛÉ0ÌFå–/æÙrP/Pz)rp&²“Ý%d Î% /eL-¥M #û§ýÚçƒz7¢G·b&÷Q·y#uf1il>~”ÚËóm[ € qÁ§GìݵØðߊáOYôí%Áÿ¼{\·‚Gw"&±¶=±;‰r ÔŒð6›¿ž<µÃžƒð‚|\jψá˜ü<Ì’ÜÿQu:~%á¢U¢ü¼“<™Øÿñÿ1{î{îm:– Ö3[ó‡%(+ /õ©`écyá@ádÀvÖt!À¢b€ÿ]ÝþÃõ§B ûµb®ï àûþ» MÈ;È>ܱž'~—3÷©p‘ôÿˆßrçr»i3ÿo1G žì6¸5iñh#°ŒªN7ñìêøN«þ¸¬·è×µàßµÒ¿3±Š»ÀÖãÇ·SgVâGíŸthWNšß'ü?àÌ¡¤vüÌ[–àC’è}²ðBýxl@Í/,ÿߤ wY¼ý¤é÷ðH6®¤ü•q±½ê(=| ‡ÍÈá½DÞN:-}f;w»¿Éîs&Çkîéfp/†æ] ગ«DsÏCðX¢ì_¤ìS®Ñ£T%’‚r¥˜›©u—çb:ö2yÿ'7Òg÷sçIp˜¿7Àÿ#J²âìJå/C à‹Šp“Nõ(çŒa“ö/þ`ã¶Ï‡-O;Gh˜÷éÄ•Á>]B¿Þ¯NàÿŒGÏ­…ïÑ®ïÖÜoö°C÷&Ÿ¸€ní›Ã&Ç-žüq°yu¿Éƒ!‹'ÿO;5€ó…7Î¥uʦ~Ô¼Õ¹Ež­`|÷FªôT3èð‚ÿ1×çCÎO»¬oÕë•b䯕 ð¨’×gZ¹Àÿ¥5Qÿÿ¶Qb…jl… «R%þ¦VÂ#Ý”®Àª™«ÏzU¶=ÎéP2x³ªçöåöG¥ÀÿîûEwó:îä¶ßÎi½Ý|3³é§ñZz㕌†ªŒÆJNCEÆËòôú²Ôê’¤§Å¬Ç…qÿ{¹Q_ÄÿU)þ„ÿÿ!(‹wþÿÉõÖO÷Öû¿ÿþ@~0Ö ðc=df 5O=&1Ê/ sÀâ¾à?Ÿÿ„ÿN°iV¨yèEZ¨"-L‰¦J‹ÔÀí*ÑZ4¦&#Z¦éÝå_4Ëoh¡iÉÓÕ¨N!E:M†WEš¡"'¯È`€)ÉÉ)ÈË]”c\``¾ p†qé+þé6ßÑÝΣž¸-Z¿Q¤& ;iÐÁÀ„jÑ"´?ù_È;3µiÒeŽ:Ÿ÷¼éN\Ýb@ÕÿÉü¯?J dgĉºôd][G>Cç«}FªÛXUýM1ìOø[ÒØ–´ Ë‚cF 5Åù/oywyà?¤î6],/8™œµ7>gk|\€¥ñ–¦g-M¿·2ûÁÎò¼«µ¢ƒzË¥$såÚ &?ìá¢WëºßàBhÏDTãD|£$u¥zÙâ­Ø Ap›(¬}'eê-\fwldŽ<×áS ­¨ÑåÀŽ9Ÿ¦ùоæØLp?·,u,víÅ¢RôŠ_D³¨Ê(£æt6£§À/ìÆà¤ê~Ü4ªDî᪗鵤IH+ÀȦxàÍ™§(m$¸Þ1{áÇ,dÔQÁÒNáâ:Wr\ yŒ-]ýD-…Äý³9"È žÿ%i7aê0iæçœ¥ß Ö“ùï3æ·2ç6¨à?_ò†»„»Ý!èÍÂå\ðU¨ÞYºŽÚÅ™¢3>qÀïÀã ÿûÊÞÿ{ó \±ø_±ù[Õö'j ه¥ßK·~/\ÿÄ‘ü”&¢:?—9|°÷ØùSñÒ… ïàEò$×l¥Oo¦NI»'žöhUŽ›=XóéØôï86ˆ\šÁˆ][€ÿ‹ÞóÞíË=ó¾€ýý¸)Ò L[e Ú?kÖ¹ÜgxsÖ©f'êõqê,¾‡¬É-æøÛDþÇ´ùã$þnüÔ~Þ„7é"ÔåË\ÄygÖ4d?g.ü”[i~)ßÀ_„Êž i:ÊšOq”Ìwó½$>8 <…GŒª>‚mÎx·ûýâóq% q™¥Ê¡ÅŠÁE Apå^ +V.Rþb qY-ò©y/ª~+g þå³§Þç  D{¸)`q‡-ÙK£úµ¸âíáNþÒaîÆnÒ’$phÖ£‘ïUCú øìX<š°yƳ1iûÁ¤cÀ³Eâß%ôíùwÍx¶ŒxµŒ¹7óºR#¶Ø â^@JgqÙÐÝŠÞûÝòºr»”ö>¸Üs¿²€ž;åw¹`íw ZoåŠÿ9õW2êªÒk/§‘Ðó²ä'Å ãïÄÈêÿÿ¯³®¥ú_Mñ»’â]•ìu9ɳ2Ñ­,Á¥$Þ©(Ö\@a´]A¤M^¸Xn˜eN¨…Œÿ_¬€IöÒOôԣ̀¡=í‹õ2Šõ2dzÄxèG»ëÅxD»Ã>Ü0=áqC¸‰rÓ£/`€Ïô6$ÆôAm·hýÈ |õüñh8ùdL °Ï¡Lº\>Ô43Ì,R™¥†LòÇ\¢‹Ò¤‡«ÒýîgéÖÿ ™ü•$×?Å$?1†2C àO Èü‡¤@錜îšÉßößËy]ÀÊO„:8üFQZ¨íLÁŸ!ã䉼ÛRo±:èˆhÛü—NèK[@‰%PÕ¡“OÑõÈ=¹4])ÿSþòifréæ €?ÇŠžfEKµ¤%ZИæ´03º¿ øïeò•³õw®6çܬ/8[œw8Å,™~om~ÖÆâœ½Õy7%_G`WíT{ãç!ÉSaÏD^í¯QhßLlÇtRÇ|òà!c)âù°Á™ Î…ØaTHKo°ûw³&w³ÅÛi ¸2dpÑhß±1 ˜öížõí[ ÞŽߊØ•”2 N[ Âa1LX‚½xþAO3£Æq¸•…{a6’°?ä8w-«Çy d‹±‡0{{Å©&|ÀÑAÞÂ.wq§xü±lí—ÊÍŸ+6H#<ó }ö(ÿ!sþ0eöC†ø÷‚µ_òV!øþ¯g ·sŇ\\O€KÁ2çÞsæ>äà™áÿø¾Ybàÿ$6d?r—þ³rûÿ¡‚ìü¯Üþ“~ÎE+¿­ƒWz—6‡PEÁÑaÚôÛl!ðÿ}¡øc *-qpñ¼ÚvÆ ð_Ú9n÷¸ûRå„ùï6p³öõ@~pón­2þ¯áù/¼“íÕÐ×ÀÿÖävüÄRÔÀk»§-ºUÆ·ùεۑ‡I¼Ý¤éí„©¸ÉwI‚OéÂÿÝx|þQÚÜûœÅ£4ñ. Û_ì3æß§ ³æ …·î-™­Ë[|›…g%¸ ä5<í[üGG ï?–°$?•IĬîûº¹…çcŠ.ÆRÍ?¡ÀÿB…B… "ðJA\?âÊUÃ*Ô"®¨Ç=3/œŒ¨ßÉ›8`ó2gQ#tiÏ‚…GÙ‹8–#ÞÉíàøöÂ.[¼5*ðkñªŸt®p¢ö°Û¿ø#ùíªÁF¬ž [?ƒÔ`λmίs>°lÖ«ø? ôF†·Ìyv@ 0dý¼ÃàN«ö ˆÿÿ]êW{µnL˜?þOØÕŒÙ¼¶|6dù w±¹¼‚çƒ{€?¼þŒkã¬ÕJñ·À ÿžŽ8>ƒk—ÙÍzíâÚùOµsîh±oi¥>Ðå<ÒÉ|¨Áy¤–ù\;놫B1²X=ì¶SROÎåÑ7ïUôÝ/êyÀí~XÔó°¬÷Að¿û^EÏÒŽ»EÔ)p>á?5€üy]ÀüÈþ“þOrþ ü—Â?Ù÷þÿ»Êø_cüϰ>óÿ þIžz º”郱<Á Ñ<ŒNê<# òˆwÊþüæÿáCxZ”§~´—1ô¾Dê?ÎÏ@ÆÙŒ0Ñ Bø›d†˜‚Åj0дäâ.1³2©Žåïó Çïè§ëÿ]Àü'ñ¿”ÿtñ ”)ÉÑTÏ0 q°øÃ鼜¯¢\ˆr1¸–7Z›¦ÅÁB=T“v ùzŸ‹”ü§¶:žÖÿ‘ñŸÌ° 0 öÆéIáOš…€ÿIzŒT]´$¬¥Ê‘S€Ts:ÛáŸnMg[Ñ’,iñô3F  Ã×ä+Ó3NVÿrµþÞÍúœ‹å9GÓsöÆ?Ø™œÃó_³s–g­,ÏÙYŸw²UðtP pÕ óÐMt²¾éŸ4þDÔ-ò-Ž%¿žKé_ao¦ÌˆB&|Ú…1ƒké3[¢õdÁa8¹Ï™_e Â'$ÁƒË}kÁ½ë!}¸kÏ·g)t|=bf5htÁ³gÍ»{Á·k9 w) Õl"Ç6£'vãP\h?vv/–@ƒa7iæ 5¢©Lœ#׃ \°R(éœ%>àÌታÐNžä xžƒ¢påë(_ðž»x”5·›ÊÛO~ç ?å.ý»p`þ.— odÍmfãÌ×ÛÜQ‚ÒéØÞ‰uü%2ÆIÇujŒ“L„$óAµŸË;¤ò.",qW!+9JåÿËA‘‡Ã,þgö]ÎÜÛ0ùmúÜ/ù+Ÿr–ߦ‰ ¬…o´–%Ü̯~(Ý8¦z‡P#âD;úcÉ:n«Iî¥ã€î+§ŠäÙÀïÏeëÿSzÎØê™+9d ’gÞsÄ¿ä.£„~Áü…ð[Ào$üPŒ{÷93’ÿQ9K°’2ümu¯OÿÚ˜éýE÷æußN±ó+à¿À±âÿÍàר‹~âÿFØ@›HŸmÄŒÿ7âG'Ý_ÿûM‘ÿ›ý» {É3¸&>aú}²PÆÿ=ÖîkNàA üÇ~þè±½˜‰ŸÒDðÓÂo.ì—ò­ŸË6Q1›ƒ¿òAÒìQò7zø¿;F¥f‚7ù"øÕ>Íÿ\¾8×UcQ^®˜XªS¦Â,QŽþç+ÿ•€ÿp-T.R ­P®Ôˆ)W‹¹®\mS8Ñ´–2²•2 ¨Ç AùâÝ\®Š` ¨YBÁvúÄ^o'sBÂ|Íè™öhsª)ÄÞ2þƒ/µÆ=¼à¦0 hi&ϧcÚ§ƒçÑ:áüjÚµYàÙ $Ÿr|Ùmpøß©}£Sëú+¥ò6õ+}wG,ÿI 0håé¨Í ¬ù¸·=Z)%ÒF€?ÕZKlÂþ%¼ü$C–†¬ïO¹Tó¼êƽjÛ,nÖê•<ÕÈ~¤šþ@™}O)íŽrÚ-¥ô+—X%áÉçìŠÌ=z󋇯WöÝ(ÆQ/þ}bE`ØüO•}dðo¾‘üÇ-W²HýGÿÿŸ–$>*Œÿ3ÿ¯¥|Á<üe¹‘à¿iOŠ?§øëÀdü‡Èk>@~7½x8gmÀ~¬›ÓU›é ÷z1nzLw0À>1RÛø‡»éÈBý?ó?›/]®zþ³þÈ©  ¤„€ÿþÈÿKr`,mz‚#A.k­ðB”¡A RÁŽ}LþF3þš¦yFN]^8¯Î`PFÓ”£k0h0yÚ¥¯ézß|eóOšóYš#X•©‰e¢º…RorRµm²Þ‹ªðè|yžûçÈò‚h=ˆüÉh€ôæ³(¨>IMâ?Î öµOÖÁ-ðFÒ=ïÉæ´TK:ÿÓ¢Íéa¦Œ S9pnVÿð°þÞÓæ¬‡õ9g‹³æÿ- øÿÁÚ꜃íy{Ogþ5Â=u¢}°æ–ãíT–6ÿH×´Ø¿’6º˜4 ¾@Ô! î^N]æL.gMlLïåÏHË×ÑüÀNQÄÀjüÔJôØB@ŸÈ­eÕ·g-x`9tD4,ñ\÷Ùñ_ÚbŽïäQÛ·ØÇøz+j|5|d/~æ0™¿“ŒÁ¸2 €ªüPRryÒNvfÒQÏ9a'o~3{n÷ËHÞä,Ѳó…hD`ç?G„_1y†è×ü5ˆäkG¢íÄÙ•,òžV´JúEñù']C?R›¿p=Áà~ã®a…¿b‡pòßU”àsé&™¢ú^)eì=g|ÁÛ¢¥Ÿ+PQá8wîm¾O~óDÁ{•ß8ü-Îìrò¸ ¬cÐîá°ù]à¿ÄõÕšO‡ÄµøÏwÀS€uÿ>ÜãÖ Žu9¨(µ²Þ±„iˆç#^Ú?kÑ­þ ]ë7Âûö“¦öRgRð„·É‚ióogá=“8ƒU ï u ‡øbÆ1°Oþœ³ôõ®%¿V€kÛþ©p‚\4œ8¯Ng;rô]šh#%a·ÓùÇàaE¸âß+WÞäÍòBë^VK,S‰)@b`¡J`ž’O¾’ÎEŸBÕBÕP®xðµÈ2ÕÈ˚̧V“ k)c[ðÓfŠóç D1¥óñÜ™#ÜÏšÞÏ›ÙΚ\JG¾žõižr{‰U õ3R›q¬…‡,½¶xé^7åûrĽºÍìF&÷¹jÎÎ}öõ´[šì¼KAéªne6þ-éÙ£×+{®æ÷Ý-é¸]Üy¯´ó^1ÂÿAaç}nǽüÿOüϪ«âàŸdó_Àÿ»y_òàOø/mþŒw-Žuøscì ø'ÅÿÜ0<ù•ÿ¤øÁ¢§Äüq®:±.ÚLçKöµc\.E;kG:kG¹èD¹èF»êÉŠü„ÿvÀ{„ûgàŸvð©pWÝpꆘÌ@ðOVýÆûê'% 4)þ§Õ¸ÏõŸPã$-à?ÚE*çñR­§´þJrçöÿ Yý…v錼¦<ƒ@^Kž®-‡¦óM›ñÙtä1SÀ²oå\ÎÒ°ò¯"¦‰ ¼¤ÂË(é†"ÏDí?R[¾ºú ÿ¿„¿ ûÑÔD¹Á{ÆÉt, ÈOÿ¬'-I—‚%œ¬`‹⶯xjò7Á‹ÿ`ñÔ@¸)=Ä”hJó°ø‡‡Õ?=­¿÷°þÁÙâ{óïí¨š˜­í9'û‹îΊ¾.*¡šQÞ:±¾†‰!ÚY~¦wCBºcK¦âŸÎ%u-$ /Ä‚ºæqòk`>aPÈ\È]-³;…]Âä6aL“8¢u)¦w>êõlPïŒO÷µ¡u9 g1°g>¨w1xh3lj+ˆ ïY<¸îÄOíP.´AÁ®@ÖVÊ Nïæã¾È÷ùË”Úÿ ð‡ƒ8(¼‘-ò"mîâVžx#gn?Íü˜·ü±h¬“ɾÁ—ì³ùð%GiÂÙK?¬½ÏBýç¶h3iv=W´/9Ä]-YP{ê)É ÒA /a?îÉeSËb2æÞ§#ÿ-Ä%_ÀÿOÀÿ+ûà >qWøïÒXE”%óÞdpÕKåðÈ”-€h ²€ã¬¹Ã´Ù÷Y¨‰½‘> üGõ¼¶}0hqwÒâ‘Èé%¤ó.M ®­Àÿ9ç¦x?!vun\ ì…øBqjäëÍÈ1ð¤ë1#„ÿMÚ•½Æ·æÜ^nE€¢F½°½ÈýŸ‰³ðd¸&Í‚SØ…t ‰¿ËÛ‹å'ÌþÈžû N†ø¾ìSñ:¥Æ,Á¿ð?‘ÈaC¨#”ˆB ;²ÒåWòïòÕÅ »œ‰Ÿ·t²Ë”X%JÌ"ÅÐ|…ûs½ó•}s|¹*ÁÊÁyŠp-V -Q +Ó «ÐŽ|d•;V·Ááífã‚°wùâƒô©7ÓÇœ,”å wsÐKn¤L.ÅñÚÀðÜÆQ„‡¸€QËÇãÖOG¬ž¼6{0`zÈ ]3ëÒˆš¾Ý|ŸNàÿ¨ë«Ç—£ŽuÓÎdóã°Ùã.ýÛ·[u®¾T)­S(lV-0º?dúhÜêù¤Í‹+ÈÃ8¯†}§Î ¨MEþpŽ;ÔŽÙÖ6]¾Sã”Sí¸Ë‹1÷SÞõSžµ}Vwë4‹*gÞ×J¿¥“\¡¡ïqÙ-¼3¿xäFÀ¿ëznç-nÛÍ‚Ž»óù;ïçwÜËk¿›ßv¬ˆÀÿ¤ø“CôÀj/gPýÿéüËøOÎeü§æ®¤RÅÿ$üø1¸ÑQö‘vù¶yá6¤íG6ÀßÇ8ÉË|dü¤°átIf‘Î:.:§ùåaI¹€È“:ÌöÃ\tÈÍi/@r,þPAÈj48ÅψÈÄQ:r$ÀÍÂÁF`‰Ú ÿe“S,CZ‚Bh¥ÅQ“ó»Èpÿžæô-Íà¯òºgèÚò4]€üW4Ã34£¯é&_ÓŒáæ &&¡™ReÖÿdØÿpÆç"-@…FÁŸNàRŸÁJê_>JGžðŸyâ ¤ È)òÈCœÀÇu`:'7Ô^àX´6íäiRáèXÊ%žêÿ'ð!²Ò¨ù‰ÛͰó'Á’–hEK°¢ÇZÒ"̱ (Șæiþ—Åß=-ѸX}çdù½ƒõ9G» @~Ç‹.J>nªAj‘^ÚäÀ=!T33ØàrˆóóðØ®Øòñ„Ó¬6^LÛX@8¶]œÒÁKnJ|9œZ?ùr’]Ý—}g ùîXÌC~d(¼e:¨e̯e*  5<ý{W‚ûVB»CzÃú)Õhþvo7i÷ÈÇOnÅNàâøè‰åСµÜiu”6ÁÿNš 8‹ ùiÉ@í‚ýìlÙMãïg‰¶sþؽ“+ìÌ[AÖ»¿¡Ä"ö3„ÿÔÙC¶hö[Ñ&îm²e-í²çÀv ÷ óñ”ù(k¿·•IÞ¡ÊêüCŒ+ìS‘ÿÑ'Žä·üÕߊ6’¿@œ|y÷×ʤeêd¾M™9Nž~“2s”:ǾÐËëËV³Àð0ß³¨º?ð5urÙßo}¯×øÆ”åc¡C¤bçWÀc#ÄÿI ]šfêIÿçJPÿvôÄÿkaëCk¸Fml­¾YçrÑM‘{Ãs~€ÃtTÌÛÁ˜ù”0ü?ˆçÏÁ)P»uf!á:ˆþCüÿ>Uˆº¦¹‹¤W·ä@–”̇/Ú٠†ï ¾c?µÚö2q­ÃÛ\ˆþ½dõ·Òå÷¢Í”Ñfç»×Ô9eJqEŠá\Šÿ®ª¾jpŽR`®rW²€"µàÍà2Í RÀ‡9S©-«Ù#»™¼9¢·Ó‡é{9³{9s[!ŠÅeÖÆÄá=àxžXµ}6nûlÌêɈţaËǃæÁ a§Bt¾SƒÄ¿WèÓ5åÕ6âújбvÄ¡–‡»}›—}»….¯Fm«{MtÝj¾TU¯XÔ XÜ®u­Gï6¸€1Ëg£ÖÏþ`pCj>T_èK¸Ê>œpª³{1a[Ïwlá»´Á‹ã„²{ ˜( yÚóe»Åõ':97u¯šÄ\³‰yÄJj/,¸^ÙZžÛ|9«÷^Iû-.UäÏæwÜËk¿›Mɾ´Þ,†°ŸDþÒö_W™ä{Q‘ö¼,õiI2?Äÿ÷ò£ïäFÞÌ’ ÿúW¥øåŸ –gÙ ü cþùüÁHð/=óõ§t{|M’½ ø'ð—ñŸ0?ÜQKjà¨þ4ü£= £¨âdA>±Óä—Âß]3*þ'„ÿd45‚P8Ú€¥øïo˜hðÏ 1þS&]›K”þ`dºŠ !º†\°Ã÷,ÍãŸ4³oäŒÿ"E½ù_±(dó Ãö[ºÍßi¶ßÐì¾¥Ašà@æˆÏÉ{)ü%P™®Žµ}ˆíQ®Õ;QÀø0§ö¼ ÉÉbwÂj°‹§/=ü%ål Õ“#؇”!ânŽÔüìdËÂdûbdã8@m¦F†i1´CZŒ1„úŒX zœe ä§%Ù0lqÖôH Z˜-Ø”æivÆËü¯Þ–ßzZÿËÝê;›ï]ìλ9)ù=]}ÝU‚¼Ô#¼µ˜¾: þúØj©cTf^äü,*¾-±¢‡u«—y«;âò@|Ug|iKbiSrYCbasb~Grþ‹œä6§#¦h(äÖd@5ϯÔ1Ù/ˆèŸ é…Ðt5t`9¬%a-'ãÇÝ”Y€<8¬$ÄŒ­D m2Ç,ð©Íäé#ªÉs8P²z‡½XÿÏS3MÓ¬‰öì…ph+K¸™‰b’¨ MiZ¢²MàWSrðÿU±ÿ–3ü“µ¸“6w)Ù/ZÞǶ"ÈPü?}½Ut‚Wø6€ÀÆ \=ðköÒ/¹Ë¿oþ\²ðÿ¯oP矋•“YóïÙüýøñý„I þ .[‡øøÿ6OÑ,Àÿ碕öÌ» ѧÜ%øÁ¶3°†¶Âþw\%ü_pk‚ø_â‚õ¬ÿà ’}ħl9°ø¿¹@î€7ù4ÿÅ_ð~ÂÿíØ‰¨±½ØIx··b§pp#¿Ïä0'Á¼KÁóqÜ#]y†§$ð¿MÅOÿ—z÷ ­þƒÁïø.GüïÒµÿªÜú —Åðù1=όˮ¨¥”)Çp/) ð+Tìg+ä*…¨…æ+‚S(Öô/½ä_|)$÷’O™uXCL/«f-§ï}ÿ§ìùÝTÞfÚävöìvöÜ&{vŸƒP2é,î˜ô¢øoÿ|ÂáÅ”cõ„ý³a«‡£6‰ ¦ÒIÛçÓ5bßN‘×´OÛˆ[C¿]õ -<¹Nàü ·Àûtð=š_Û<ë1¿.à•zE‹Z6…jßè7¼.€`ÜöŰ%$x: À¸I÷Âçðü×±zܾfÜ®~ʾ™çÐ2íø ž ònšõ¨›ö¬™ð©ôyô¾°X/¸Ü6¨!!«ãrA×5ncy&J:ß,lºŠlo¿SÐr+§íVvû,0¸¡¦½ š¯ÊÂ~€?‘ý¬)O{QÆòW—³þÏJSž'=*LxP †ÁNÄLÙ䯟Tö…+Àdð'ÁþIðü‡à"ÿ43 ?Dþà€ÿ ú²à?‚ü“ÈÈæ$…¿¬¼#ƒÿi¤Ø á äÉM¸›ŽìAü£½ daD‚壟äC‰…úêS.À€ÀŸÄÿÙ¡&,mjŠÎÉœ”¡4 % ŒÃu1—ä"ÔäC.Òü¿§ÙÿSPoõ7Ôs°ÿ8OwýŽîþƒdžgi^çèžçh^çi¾ ôeù Õ3Qšxæ /‚Exʳ5ë±” ˆ°SõœHÏã]ŸÏy)A >Qzrà)¨r2ø‡iR£Ô4x²)^мῬ/”,…ÁoMI ü£ÍéÑ–rL¹xû3ÉŽ_§8ìt&ÑAžiC‹²¦…YÐBÌh¾fg¼MÏxšýÅÓê[OÛï¼Î{8]ôrQôvUòõPòR‹ðÖŒö½ë§“hj’ÄÔOgÄ•1-¯D»ÜŒ ¼ý$:ú93ây|Г¤À{ÉAwR‚籠áS{sGÔî-2â.¾)Z–J±e/ ^A"î ÙËĆŸ½\É&G¸’ÂÛJC©²á ^yŸ-‡ø.p…8àÿŸe»¿o½Í’€SØMíeˆ÷³$»ù {9¸PõEÓE·T  D¶(€‘?kì-{Ç~¶ôü^°üÇ}¾•;¿Wí}*_ÇÁä̹÷é£Ä)àÿqÿÇ\ñOE‹d‘ÖÇ’eþßdòÌŸþ¿ÍaðÏ™Ïã|kêô{j™9Ðkv«K·jÂü¡Èéåœc½È©qÞ¹”¸4ÿ¼:¦lkDž­ËÔùoô8ð! ÄÿÌÑaÇjRÿYök;ŒŸ8HæQŽoå’øï“…äü÷ ݶ]±fÞ¥K€ÿ;Q{1ð„ŸÒÅǨ°-‚W¤qæ ÿߥ ÿÁï@ã3Åd¡óÇ¢5àÿ¯E«à~ÊÃ\ÜÙ°ýÍìÒóQ¥Já…ŠJþíç*øCðü‡kr@¡Z@‘†_‘†OÉ¥ÈLM÷BGÏGqÌúÄ´IνüÁw9so2$‡9‹àÙ! ÀáŒ9pÙx^“0ЇMAíàïF_Œ9<·6n÷”¸€1Û'àúMî ™=þOØ<ÃÖï6¾Oû„Wó°s=ð{ Jöß³uÞ¯“çÙ4`û×xé^ïÔ¹Ö¢QùJµ¬Mûjámx+,%ñœ_Zb)Q#kˆ1pÆþžKã´kó´sˬs3$B׆i×îÏÆŸö†Ý®*zÆ®OËl/æ6]IkªÊxu%Èÿê¾ùfvóuNËÌö9`-7rš¯å6]χÏÊŸ!æÿ ÿ2¶ þ²àà?ŸIøñ¿lò‹šùõ"û¿Šc]eÁ„ýá6‘vÀÿì`kNez€9‰üÿ²âO¬›ÓUàåt)’ øÃœ.E¸èPð'M>zØðyÒÆI:9±™ÇSŸ ÈÚAOߟ6xžë…Ò2Q lþô5þ'z#ÿÁؾú¸\8@?+Ð0'Ø07ÄHº<‘RN#òhÄX”0>ÎOéÉÅkË15å"é!çigå]¿§9ÿ‹æößç<Íï"#@Q.H‘9Bˆ2¶ŒÂ5\©)}é ©çø'£% Ñ㌱†ŒC© €p=êÛ¾¢õ¤*@'ƒÀ ŠÿxXLȪ¡N*HÐ".‘ ’ÒyaæÉjø“½hqóƒ™Ò˜–r±v_³œ¿IñøWºÏÙtŸï3|þ•îýÏTo]¾Žu°¥…ZÑüÌ¿ò6û ²Ë¿yÙýËÛ霯«¢»R §j—J˜¯zŒŸVœ¿vb nj¨!'Â45Þ,=Á$7ш›h\’`YÉr¾Âò¸™è~;ÅñÛêF†ÕÕL»+YÎ׳]nç8ÝÏq¼Qh/ßõYZp}tRW@Ù¸_Í\P$â5À!þõsd!ll5 ×;®$ˆ’z—ãÇ×&!È'ü'… ôÑÃðøn:ûP]= ÿ}îâQnòÂì i·À§ÌìçJ¶rÄÛY¢õ´ÙµdÞuL¤~°_ZkE”HqÃ/„ôiÂ_¸ë`²1$fóqs1|–#ÆsÜ #>J›àôà Øí™½@f£00NÿÑP-=¿¬þZ¼õÿŠí_*©™ß< ü‡)Óû‰ãÇìéŸqÛ×ÒE‹ÿŸJ—ßs%‡3GœÙ÷¹¢ã,Á1GˆäOá&Íì³ù)¼õä IdO§Ñµn]ìÿ;7€ÿÅNM|Ûú9禀~jMÖ6B_¯‡nEŒÌûuIü©6Ú¨àÿˆCõ+Íò.ƒë ÞÍ»1#{‰“xþ›&„ßâm2®€ÇÑ­¸)@ýAjÿ(?õØ-Vvr°nZ¸!'Ê$=Þ6+Á*7ɼ0Ù¼(ɪ4ѱ"Ù¹2Åá2Û¦2Ý´‚cVžm]™c5ÏñfžÃ­<Û›\û[ùv÷²œž&6…¥ Üv-‡.ÅŽÿçc%á#+‘3Û,]Mz¯%Nm$ñ¶yóü!ì_G©g !iò<È“.¿+^ÝÏßÎc.:O7üG•¹¼…ÍlÑz:à/ X~—‡[`Àqü]@þí¤iÀ eˆÞrÄ¿®¿ÏZ8HÅ#QãáÇXO™Ý户Òf©í0¸ˆG*H¸r¸É˜q€ÿûT<@Áç¬y€ÿÏ«¿­µÿÅËÇyóGYsûi¼½ÄñÔ©O¹ó *YüP4ÿ©|ù§â%ˆùá³Gé3ˆÇ >ðÿÇ,ÜÆ¸Çâa9 ò6o!¢§]¿ªK§ø?ïÒHø/r|5kS'pl\óëþ ]^-ùwc P`¤ÿîÅÀ~²r+n‚á&­Šn½k󞯶"ÿ»Tž…íï’æÀ‘ÿ÷™“àÔ¶b&÷À¯¥/&ÎíÅò€ÿ@øw)(…DÖÃûð.]ü.Mô&Uô&¾Vpǃo ?3¼¥¨Î‘Χê?¸Î^Êÿ<È¿æ¨í Ó!¯ëä•_Œ)<½œ¯€ð?áPŽ’_®¢wªw±¦o‰Æÿ¹6Uð/my-Õ©“>“S³›7{œµ¾›¶¸—»xP"Ù/HàÏ´0"‰„wóüšG\_ Ù?¶}ˆ—ÈÏÚ ÿÅi¿à¿:ÛO“ã ü7¢½‡¨ ãÀ|à¿+ˆÓNÜŸzà»ïçlì£v+8䯴£n¬ãû8îû Aàzºñ¼ö—pBAܺò;@ÌÛÜqþ»æñ|8ðŸM y¦û!òSýà™áïÆ p£ºÂ;¾;ÚY „÷ †GØGrG* –Èçy»åûì+€¯òßÇðÛwý?? ÿ07vänÌï„)•çÒ0Nh™î ㄎ~TSxX™ÿ­4û+nê ¿¥Fÿ>—üÛ,òï2£ÿ˜ÿUnÊÁüŒÃÔ¬£´¬c fÖQnî Až‡˜ê-£(YÁY/ˆ0‹Âþ61Ù.ŠuˆJ¥ 9Å®ˆt(Évut™&®R_«­5Pê qµô¡Ê¨K<ê#ªµ¿ eŠÖ ~~”ñl„ùR€EÞàª`t]‚ªë`Ѧq?ðÕ}kÄç%i?ð°Ãj>ÖYà9Jÿƒ žyn×"¿gYêǾfœœW ÍHúæD½kh;º«…úvôÈù㵆(Rˆúá›ü?f@o#ÀÔÓ¨›„?Ʋ|¾ÕªÌ‰WüV¢åb?fàËѹ§dh‰Õ ü÷ûVŠúù7eCôS@þŸ¬³è’¯Mûß6M®«Wå½kÒžuYï{íÈ¿Šgþé˜}oýT2‹ùü¿b^7ÎwÚQøÃlËG6DÎUbé |‡æsàÿƒãE½aMÄáïõáè–aÊõˆ+ƒÑ×gÒ³Èn¢ Y'3/¶Wœ^Le=Y¤µ¯r»`·=Ê]üMüÝ×ÅNT± ½޼áâVÏM¾ÿÿ[¢Ñ×Üþ×ì>À;Z‚#GÓP/1èƒbò­l øÿF8´Ås¢‹ð3Ì º n®)‡ÐÂebÀé?‹æûè8X&ˆ®+{Û3.ÖWX¾FÛ ßæ¾Cç¿Èü£ƒàLÍÁTÝ¡Tˉìât{’–Œøo×[Õ5Êä›rí˜îÎê/_7M½.žX/Þ´Œ¬kœ³²ž)aÇ(ëyνŽä+mÑÍÀlwÇžï¿ø*êìËÐÆöˆ³äsíág€ÿ¯¢Î½ˆhj‹:ß—thßßò2ò„›;c¯f=œ¡½œÈ}?À'ÄÆö[ž¥w¼ËïúTÜö*{à_û<ô4ºnw¥Œøÿ2´ B@ùðžè›ˆÿÑç[£ÎÀŸÂP{ä…ö˜ómM/Ùõd¶Ë*q³‘Óda7Ùxç‹E‹Å—ì’+%²«¥òkåò– ÙõJéJéí õ­2ÃÍ èF™ùz™öj™är)ï 1ÞíB‘tÞ&Dä·ðA˜ü¸æó3üÕ„óWæUÈsʤþiØù•Ÿx‚ü1Fz´FÑQ#´áW净žáƒá擟ç…ú|bùqåÇ5½8<ø`¼ïB>pW;ÀÇãÝ\úù}Bx4´03o„q­ÛËY†6ÿÀ]®Ÿ!?ÀD rI¨*"pñÿ€4à3W!àþ¯}7®Çgìh†`˜O\pùì,Xïn×r-Ø’¡;V¢ ½æ‡ÿzXþˆÿ;ðp£¹1ƒQYžv€ú9“t€´èFóG±óUx<Ñ2:öu«Çùs|Ürüöåø£éA ƒ÷3÷³ƒös÷ÃoäêóDüwãD}΋ÿIöwj¦§–ã§aûj8ÞZ¶·†å¡aWÑŽÊò¿dþòô„?RãÿÿǼĿå¦~“—~šu˜ž{‚‘sŒ•}ŒsœŸï!*ô–Ð}å¬7ØÀ'$‹ˆT,µ‹#KÄ1%ÒX‡,®DíPRJT1eªØJªÿ ÿoŒ®Õ%U¢ªŒÁõR“"á_ø’U=Ⱥ5B üŸ`?Ÿá¿Zö®‡^K'Þȧ±ÿ‡wPý‡ß \—:E½ ’>Àþû¢ùMóØ~TÿÑŽm% 伨O„Æ•ÿUíØ¬´m%ön ¥`@žIà?šL¬5þcÿßü½fâ_ÖE<·ÿAø÷Ä…bTùÑ¡u`h³ŒÝüƒ†pÓ;ØæevׯÁ–tðµÄ Æø'ËüOÄx4ZõX²üÞ4¾¦èþ¯+ûßè*žþ¯²…Ÿ3`þ(ÿ©túÇ¢™OæIÂù@€XW8·˜ÆY ë¦ U¢0ÿgY/îy•Þ;jí ?ü‰¹æ$_Šjþ;)-“É÷áu0öúhÊÝÉŒ‡ÓÙè ðݳH½?Omþ÷Æ_½ëQñÔ¯f2íö £mMл&B :·DÃïÅ£D£ð:â?‰Ý³&|«˜z#ß ‚ÿ‡¼€X‚†ŠÿŸLsø²óÊ©7Šq”‡ |à\c]JÌåS½&. 푬³ïÍÛ¦q44Õ„fÜ­*»&œ¬:.+>Ä1,Üå®áhžîp–æ»tÝ¡tóñ뉭G’&<ªŒWª·è½‹TÁõ’ŒGŠâIÃÃâ‘­’éÒÉ×Å#kfçš®oY?¼ ì‡,R€žôëtÄ]ìŒ;ß¡#¶¹|¦5¢„fòE¡‘g‘Ʂœ„D`0åf*]xvîIhÓÓÐ&Ýñ×'óžÎÑZ!AxÞô ¨ö–Úç{ÍÝ~Ó»ì¶oÅ]¿šçágÛ"!Ñh†Wà?Îðùo'åZojF…ß±+¦¹ƒÒô<ºñEêéGy5w¸ÅW¤Šsjö9+ë\ðŸÓ\$¼h“\*’¢P*Â_-É«½L}£DwÝn¸æ0´”Pµ§T|±”‹Ûû!pàj`G&î#ç´Ý¨gý¼óQIøW*rÁü—J2K„év~*†?6ÿ.øë QÙG“Êþ»æŸ$Iþ Spå›Äü=rÝáÂΟàÿÏÞ~/á™èuÏ>,<êÿ—vàÂëÀöò_’þkþkrüõÈüûÿ…7a$Ñú Äv“ìøcþc€c˜£¸à‹êçŸ覘×ÎâuâÔýª4^ "Á·Â{%$$qð^ø#þ£sXÌÂê3Hn̰¬ÈϹ@fÊ|Êï@¼¨ß²#>g…îg̃öA^@' DL|Ï‹P¡ÿg ¼€¹²‚ä>Ï ý¼ ô zø̰/8 ÐÏ9ÁûØAnjìg‡º±ÃÜXQ_ðRþ¢(8¦ãúkÁj^ †¤å@,P³½Œãêa~η쌯˜©¦§ü¹0å¯Ôô¯ó3¿ÍÏþ¾0ï3ÿˆ•w‚›\Hõ3¼¥,_7@Á'DfqMB²KBâ°Ix‰,Â.p¨"JTQeª˜Julµ:®F æ¿ÆY¥«4DUCkÌ! †Èsê´[RI« º—}m’÷@1/êZw¯*×åãk¢ñ^׿z–…½Ë¨Ô»(éCÍ„ÖÙ7ÖTïÕ¡µPŠAÄdù2ÿ¢ž%åЊf„&¶•ŸY~7¤¨c_?…»ýárH ¹þãm/@¤ZÞëѼ8ºSŒö@p1 îˆžÈ> â æOÅ0߇NKEÎ-9ê ‚ïóÉ4û_v4ä „îü:–@oõ#+²ï hÅù–/ügÅâ%S €ÿ'Ç$ðÿGËÔ¶ndKå„Ï\U ÀïõÑ8³%Aëw•#K²U•sŠþô®gÉÃÅàÿÇão G_ˆ¼ üwF^òO$݃,`ˆ>9–züÿLÎ3xÿ?šrÝÌewõ%\{à]ý"°~:íøˆË|T[[ç ºßñ‡¶8kÌðù¼´‚S8¼%›Ønò†ÖY½ëœâŒc¢!J‚TãÛŠ ðÿ[ÿ7ƒ&€ÿ‹Ìôã• €ÿ­†ôâGbqüEÓlS?š¦Ñ°këÔ¶‰)Ñ‹kQ%GæƒtÝÁí÷9ºÃ9ú#ÙˆÿßgÀ«ñX¾ñDžÚ#EUÁM¬ÐE|Šô~%Jr û®Ü6b»½U5ô¡næMÉØªi`Ùзj…0'ía>ë˹ÝÖÒ™tåU\sGüùöè¦6ÊYdÀa qWô¹çäÆAÕàêσI7œI·:⮾ \zÖ„CÀ+ò¥áÔ»Sùφ³¼Š¿ö8ôäÝ€êë^¥—Ýð.»T ò‚ǤS­M¯¢Î·†7Ch ;×A¾ˆæQ.÷Ä^ë¡\EÍ¢‘Í/)OêæVÝãØ¯Š4M2Þ-óŒ‰yÖÌ‚×& ÷¼ErÁ*¾Y€C|¹D„ËA \u¨@Wìê+våe‡ívÄ»½vÉ >¸ÚÚ!?1êäøðÇæ¿DŒÍ vþ¸òã‚¿ŽJÆ•Ev˜<+T–‚á¿·òƒÌ,âaŒÈÅÜðƒ?Ø~Ì€?_˜¯{…÷9înøúY¿\ˆ—¿€Ð¦à½ð'ø´‡ÿÚ_Ì+5P‘ü¹,þ3iÔ~I¨†€ø¿_ø9~à~À8&9à]ÑÁï:•Š:0ïR‘Ÿä†×)‚û.þ‹Hn"Hvt¢ö{6xò°ýüèßã¾%þAšøG—Äñ¿ÆþŽKþ 7âs”„|†ü¼ÿ>¼ž8S>@'}A ù"?a?7ò7yäßP¾¤EÿAù’õ%'êwœÈß—sÂ?ã„ïgE ÞNväNôo…i_+鞀}¤„À+‚å-¡¹ Žps²³¾e¥ÿ•žþzÆßhÙßÑóÓò2¨ÇY4O6õ»à8Ÿê.¢{üe¼¹ H)"¤aFI˜EQ,tHþavÉ® .V“ìšð25¹JS£‰­ÑSªä sD™!¢ÜUa¢Às¥5¤ÁqÁ˜zG!}%jœ>_’{]å=«Zçªrx^èÄç¿ó‚îª~Ïs;çø]`ò·msàüWu£ËbˆjuxŠÑpKH ;XP ΪѸÕð’làŠû7ÕcÌsïv/|¡©J´}w™[N&Ál£¥½rÔÜþž ŸyÀÓ8õI7ñN‹æH¬jF ïÀ“6Åhl:>F[#µc@¹Ú°Ïÿ³lù_¥Ëð ”W¿*éÞÒ:´Oÿ³lþ?«*Ÿ}_<üÿGÙÌG;Úöõƒeò½~ôvÒ„eE?¾bŒ¢ qº(í‡7Ç Þt/~änï"mþƒÿ‰¾!`˜r-‚L¼;’pk$­ ŸÊz‚,`&ïåXêýÙÜçËŒW=qW€ÿ­ “)·ærŸ,³;¹Äñ »w“ÝÿŽãþužàÿ ·oU0ôZ<º¯ç  ¿Wóô4ãxq3ð[6Žúpd£¯ùÎM¾s&ïù«ò#ÈY l­©ßÆÿQ¼ðÉ6ýcñ쎹³?™Q-­¼/šÞ2tÓo µåêåjçhg‚àAw$W4_ï^¨òLQ‡‘kx‰5j²Cão7økCŠåQu’‚ûÚ¢)Ç·Û¥ëæÑÝÀ¢~hÅ0²¨˜äµ R8sîô¤¶ÿÛcÏ^D~ÙØ…²€—á§:£ÏµÅ4=©{PÕÚØ{e ézoòÍÎä›Ï(ŸD4ƒÿܟpÓ™zÇ™y0ç!|þ½ * ?ÞÞ±BÀÝ€Ú‡A  ´G^h#B¼v‘/½Š9ß}¥'ª¥;üZ{èÅQ§ž¤WÝcØ.s§Eœ“rFƒŠÑ ¦ÒÒÏÙÍÎy“ Ù,¼`^(¢í½¨$»dW\,–£¼ X|¡˜j.4‹Ï‰\E~W©ÿ¤ž‰D0¿^SˆåÚöÎÃß.L#̲“äªüüþ¹¡¿‚¿ yþˆÿñ>ô8/ ÌTÚ5ÿ¸Úï‚??Óq>‡~VK¢,?qvàÿ$ ~áùwù¿SùÉ@ð—f¸ø¯Îöþãâð_ù[Uêo䱤‘Ôh02Òÿ]NØ.$B‘1â€4€ˆ An Ò>e§ ä—ï^¥!û~†ÿ/ù­8Ü7!å7@{yÚ_”SeüE™þgyêÈSþ,Kþ“8á àE~Á ÿœú?r‡ýè`:à€$à3føï¿+Œü5êË‚èßÄý‘ÿ'Vâ_˜qäÄþ‘ý{^ôïw² Ê\Ê¢è/ ÖàâŠé­á«„¡ j~ˆ’(cúˆh'øG9¹‡XÙ9™_13ÿFÏúŠ‘÷ƒzŒIwg1<ØtÝ“GóÒ<þr~ R¬‡¨daZi´^c–ÆZe1vY”CîP…k‚lšÀ"Mh‰:ø_«¯1ÆóK%æ 2Sd¹!®Ü[n ©vøŸ* »¢Í{!­á=šãõ/ЇV”}ËÚ¾EEÿ¬°›ÿ^®üÌq:Àÿ*^óäŸS:áuI9ˆVÊQ]h׳*ìƒ甃“Šþ9õЪ C··$Npò­ h,?q;ßxþã¶@Þá#Ce<ØmC5‚z~ŒS[¦éÚñ-Úÿ²¢Ù0¡ù¢ðåÈö!ÐQ£¡@Z4óU9ìsÿ¬XýÏ ´íýãøkyè£uœÿÿQµü_5KŸJ{Cïl£Èÿÿ?˜'€ÿ ckJÔê‰;g6T£krt:+AAa(ïÞµ£–Ç‹^ž‰¹¢\¹ ð‡×Éäû ´µí%¹¹PÐ ÌþOd=þÃô^vP.Üó¬|á_7m<íî"óðUØÿF8´-~ÏCþù|dõûÀÿ¯ð!¬òœk\ç*«ÝP¡QŸoÕè©('ßIÇ0ÿÑ51ÞÀtî3à?DÕú¿zpK7 þܧ¢™%ˆÿŸŒSø|ä“âàô’¾÷eÁå•éÝp$_s([õ}ºúPðà¯;’§÷d+{áεýÄyÿïü'ÎmwàfõäŠsƒ~þ£Õ]„‚ˆyA{…i/ËÂ’f¢«^®¶ÔüŸæ·×ÿ»Šÿ–‚[añ¥2gŸ4ÙMë&ŽD“pbïÃryxyˆvø2üº+98ÿÀ}Š ý ¼QK†µkûá¢;¤ý’ÏŤ/DÁŸ#óOÚÇ%¹qˆ£X~ôg’ä?È3þ®È:(Í:,Í>"É:Œ”yH”~Pô /á+~üWü˜¿r£þȉø=7ü·¼0$AØo„á¿eRþbÄü••ð ;é[fòAzÒwŒäC´ô@Kú†žø #á+fü_qþTôWZê×ììÃBª»‚í¯á‡è„a:A‚?7XÆö3¼„ô<êQvÞAfη¬Ü¿³ó¾åäÇ)<Ì£å1Nòà3=,/9€¿Vb†e&ÂüÛd¬"eT±ŠâP’KÕ”2mT¹ŽR¡®4PEê4¤]H¥1¼Ìæ°‡––†Ö–RNÛÓZ,‡êÒNi˸¤{Y2¾.B«Y/§Ïf„sç¼txJÐ;/ëß²€Ÿ\×N.JP[>:Š•÷mÊïä`;‡fÝK2´|ò¢Â¹¬A€À£Þ˜Q³‚¹nò‹IÿÅÈš¨™ßƒW=‚€Wh„rxYÒg‡âÀ 4áA?¶©ÜÔC:0öÖ2ƒÞ— æyQ÷2¯uUÒ‰Îv•N4kZ3ñÉ0ÿ±dæÿ®Üú?ï-sØ‹¾Óÿ«dîÇòé5ó+×>•,¿3¼3l›‡´-ü³tnÛ2¶eZ×ô/I»á¯¶­}G´¤B„B‹2E uŽäÝ¿rÄ|ÇÃÑÐ0D¹‹»9H¾ÖvÉIi™Jy0þh ºà?šzÕòžOf?e²Èë›çô ÜŒž÷ò‰NZІ~þ“,he0JŽÊ–?:–þa™†H™Ñ?K !zk›Wv=ϺT~TQü½Ðr­ý–ª;”¯9š+?”ªvÏ,:N“žˆQŠʼn%Úh‡šT¢ ´¨|-Ê`»"Ê!Š­â'_ӪάŸêØ®_³õ.ê;ç5]óŠž1þ«úóî¼í™·[S¯¼L¾ÐšÔÜwöEäɶˆÆNò¹îÈóý @ø³/BÕ= 9ó,ìÜ Ê¥î”»¯’o?¦\xyîAdÓÃð³/(ûRn¡EÃY·:“®=9s׿á¶Oíµ%×½wƒJ„W>ˆ¨ºTþ0¤¶r®-üÌ R}{ÈÉþˆÆ>2 "/®?μòu¶…o=ÅcT‹ÒªIUÊ”ev½ŠzJEkTÒšÔôS:f£žuÆÈ9kâ6™yø0Ïð®êãÂþ®¸zÎ)û¤–qRC‡T¢A]ß°V‘U#ÏÃK~‰ ¿™DÃ'*ûÛyiÅÜÔ"NŠ…™h¤Å ´•¢É'»~P·Z 8‘ŸŸäÇOôç&úqü™ ~ô8ŸŸkþÄÌz¼;#Áƒ‘âÍLõa¥ù²Óý8þ ÿÿ½Îäç`á€'9 eÉs‚Aû®gdõ‰‚?Â>1z^¥é¾ E†¯*ËŸhþÙiþ4QƒL¬?hò¾¥¸Iãþþ» 8ÀóŸù¼ûLðÃÿWüÇ_%!F«a¹ø/ ÚùÏ uã‘ÝDq¿ç¯Ê>¨Ê9$Ï9ú3ÿ³ŽJ2ŽS¿&}‡¢@Ü߸”?sÈÿÁü/â÷¼ˆß "¾FþžýWÿ¸¯¹ÉßñÓŽðÒs3Žs²N°2Ž1ÒŽ0S¾g¤@Pø;;ùﬤ¯Ø‰_üY™ßñóK>*n ðKÍ#)8A`æEtOí8æ?+÷;€?·à ¿ðŸqLÈ:!d{ò‰¹¾RþjqˆV†à/4KíòHÀ>Àß®Ž94.þGíŠ ªÖ’ªõˆÿÖÈr{DeID}YÔiGâ%õ¶^ù\UÛ'¿9%o[”ô- zÑU/^ïŠx20ÍîY ¿3O¾Ö£²Ï¢bpE1´®YW[±¤ÎQߌ¸wAî\ÌIû Xàý€x],D ö;Óôkͪç¨ÇPw°´†Ðá]ÛhÄøŠt„Ž«†AðžbÁbƒZ%ŒuNÃozfDÎMñ šŸ,XAüïßÒŒà¾OeSÿWåëŸ, n¦•½ëæqàESðþÕs*–~°/¾5»øÿ’ÙwæÑ sUÕ» î\“ö¼U¡6›·Äõ€?xéEQ÷XÁCàÿ­¶6ÿúÁ¨‹ƒQ—Gco`þ÷“¯Ž%Ü™L}€vQ%ßM»7‘ñh*ç)mÕÌ~6Cì…þ?õ«ékœÍº¿Zør±àåraûJaç[Þ „àÿkz'È¿Êè½f÷€ÿk¬þUf¤ vàÿ¶bì“a–X‘ŒvÜÿ7eÃ+Bç²``<¿m–ÚñƒrjC:² êƒ@¼eB»˜ ¶ÆÿßÍÿdžúdF§mÓl[æ‘-ë謪ãNâ©Ò£RÝWtÓ÷Pÿª£šãYEÇÒ ¢¨à?ü?fW;ÔAVuð¿XN.Ç”ñâª9i—…âýéùÒço“K†9U÷œ¢sŒ÷¬/ÿvOÎþüÛí)—Ú’Ï·%_lK8ÿ,êô³ÈS/£š^ÅœE9ÙßÔwîYøÉ{Õ‚žDœ{F¹ÐšxíEü•;¡'ï†4<9ý(ät;åRoâÁœ¼Š½ô,â܃À“-î¥W=ŠnøØü÷H5×}Ëïø×½@æÿÌËS­Á'»C»¢šÛc.¾L¿Úʼz‹YÙH×rò+)’äJij¥$Ý  6( N«iãZ„`;Ž{±¿÷HŸêžÔ²4Ìz5­NØ/¬S¸°ª–åVI]ëÝ3KE¸çøÌ?'ÅÆN63ü cwá‰Ï|w~Rü1üy‰¾œ$Vœ/ÀŸëðýø3=1ÿ÷†L~¬_–wüÿÿ2—þÿò?ó߯û³žú;EÚþ½ü—öüáÕ…qÌ9±0KNÚ÷‹°þH¤} iÈ¿óÿ€˜ô˜‚ÿ¨éˆæ& ì“&~©ÊüJó=ð_–}Hžï.Ë;!Ï=!Ë9!@˜~HrŸü/þnìW\Ê_9QâFý ü'~ÔŸéÀÿè¯Ù ßñR 2ÝÙ^üo^®77Ç‹“íÎÎ<ÎL?ÌJ;ÈN}ÇMýŽ•ù=/÷¨˜æ©ähøÁZA(†¿Š éQ¡‡€zŒ_p”›÷='÷ †¿~DÄvs<Ä\ï]ùJùþ QJBÒJCu²0ƒøÍÿøGÿJx³m’.²TO&Yf —ƒËŒ!æˆ*+¹¦ˆ\_Bi,%Ÿ-‹i.I¼\”wÓ$zªstªšGd÷'…mÓÜÎy¶sC2±ÄunŠ‡ßªÇÆ‹ÊÞYeü£^PöUæK²yIç’¼kN6° \P:ç³²¾Y „ƒ0ÿàüÑMí^³…¦ýŒÏñ»ç8«â~d\ ò¿ÓŒ£j¿b/‘ìãcåMíð¶ô“ëD‚€ri'7Ðl4çºhd]‚JL«ÄüùMíжqì½~ôGËÔOµÓÿU±øA?RýЇ²ùÿ,[ú§cùÿê¹÷å‹Ä¾˜¡w¦ÁmóèGËšüiC{Õ˲ž E?ø4Ù’8§˜vÿ—Ä=ãÔGÀÿ›Ç­/}kä ÀÿáèÜÿÓqy8ö&ÞEŽëÿÃÉw!Œg>™+hCW€ó^Ìä>þ¿¬ï>üŸÍz¸”÷óRkÔΕ‚¶Mf÷2­sÕ ü‡@@Ä‚Þ îàknÿ;ñæÿ–d-|‘ C&?Æ÷ tónU4¸&š¤¾š+ìü¨š~£‡Pëâÿ .þÃO y˜'€ÿïlãÛöÉ×Ö¡1ñóKåE‡¦ƒLÝ!ªöp®úH„ÛQ¶ìx’”B.'—¨¢ÊH¬Š@«2þW´‹#K乂šxžÁ(.™1vÎ;ç´³ò¶iáóQúý¬–ž´ËÝ©—:’š;Rη§\x{ú~Ôɇ”3O㚟FÔµFŸîLhFûy«ïÕ<Œ8u/âäÓØs­I—n’jnÖÜ :yÓ§ú1éLWôUgvËhÁþŒëñWžEœ½á]vé¸å’»í†_Ù£S÷îúÕ?#m oî@×ÍвÈMÏμ,8ûSÝT(«Ìϯâd–óR*„ ´Jaf$@ ЮWåÉ4t;N\>ž]<ð ø Z%T£(¨‘çcàcæã©ÎÄ`ç¬rÑùÁùÿ ¢òca%˜èñÀ}a´¶ J•¡ÌAæv'üìå?;Þ‡ï ðgÄû¢âºíå^çAóŸèÉJòr‘ß—è*û£úÏÏåàùñêv¼½qþÿÄWP¤ûüþksôùAFj]ø7Cá—ÊôÏÿÉIȨh¿ŸŒ@º×ð1ÿ$7Eè>;EÌÿàŸ%#ø_"%Ö©KB‘~Å4l“à?7ÜMs@–òuÖךÜC„ÿ?¬,ðRä{ÊóÜnöqvæQnæa/瘨ÀCÁôSó‚´¢¼vÜ|Ë£è…OÍ@äyàÿ`ÔUà_䕞ðKx ÀXÒñä»qׇo§?„°Tت@™Ç3ÿÛC±'ÓnO¦Ý]ιDmþƒóßdô®t¬Ó:6 æ»ø¿LëÆüßà ¼—Žÿ7DCh#¼Ø‰V0(Ð}··Òax†ÿL›ò±©Âà?øÿ×’á% JÄ6 c7mª‡·ˆÅaדּŸÌÓ?Y§ß›Æÿ?:fÞO¾±½6 ­šú8÷šÃì¦o™š¿˜ŽÑôGóÔGr¬‡˜Ày ¥D’T¢ 8¡vð?Ø,TÔ&wˆÃJ…¡erMaR}nv ÝÔ*;9¤¿1¥y:#kg½ȸדÔÒ—|íUÜÙ¶„Ó¯’›ž%œyÝx/ºé~Ü…'Qgøðú<æÜ£ÈÆ{¡õwÃ@÷#O=‰iºZw+¨öv@ý š‡~g:È-=©W!Î}Лq«-áâíàªËÞ¶K^–Kðÿ>Üñ­½ëW÷,ää+ÊéW”ÆgáŸç4>åTž/Våe•1RKØÉ¥¼är~z¥ ƒà‚¶2§Vƒøÿ«°Çêï¿ZžU%Ë«”bæ#UJ²wöy‰ÒAe´RA:ÃÏy(æ%íÀŸg¤Çh1pþ¢á‡„Í¿(Õ_˜€ù>濾çEàï‰àŸìÍNAðÇØçgvÚ{rA{ªúõxcËÏ•b{¯‹ÿøŠ\~ØV 1wt‡ÿþ{ù¯Ì@üaþ ‚í¯ÿŠ´Ï¤qû\üÇ!€ØµŸˆÿeÈ>Ìÿ½!`/ÿwÍÿ>üÉÿý˜ÿüÔÉ‹pÆ~!OýUÎ7šüêü#ªüc‚ÿ^²\Oiއ8ë„0ã?íž•ø=3î;#ö:å+ZÔßÐkÌwŒÄÃÜ4^†'Ó‹“åÃÉñåäûs ø…Zˆ  úò½ž¢/”æ«dùk¸AZ^0àR°ýä,_)Ã[LwÑNìꘄ}LÆq—ñ=Bo¹Ð$øI„~2q€R¢S„T‘F5Ù¬Ž²h(Vmt‘š Ìw ‘_"¢@”]K.Ö„ƒìºp‡>Td-µ„VZÃêmá§íä³%”3å1U±uq'ë¢OÕÆ7•§_.fÜ2¨ªìO¥µÒS=ò¦AÅ…9ý£5cϼ¬V<0/w.@F¯îXÒ÷,éœ3òiqÿ‚Ü œ_P£=¦É%íÈ‘@.°¢F½š†IbKøéß„Ý9Çê@s¡ óº:Q\ç‚ðü¸þ¾Ê0‰'XΩF Ül©§·SoÄc[¢ÑUÁÐ"¯ÝP“ô/ »Ö¤}o5#À··¦‰ŸÊ–7ëº×,]@ò·–©UKŸªÿQ:÷±hòƒcüCåÌ;ÇܶejSçÄþÿƒiøÿÞ: )ðC3¸©Ü”;7%¨­ô5Ñü¿(éY•÷NÑÿoœ°>ó­élvF_鋼ì¤\óßzOþO¤ÜsÆßJ¼5žö`uþ¼œÌ~2’v8åš{|²‡Ü4œpm.ûøÿ¹¬§‹9­¯i½ë…]ôž·¬Þ•¼V\üÀ*?LTÿY'F@o ߈Ѱ ðÿ`ø!à›ðZ¦šþ羜ÊkÛ–¯‹‡D}‹ '*Á™Ðµß×ÊÁ¶ùlóÀÿÏ}$Öœ}²ÏnM€Þ;¦¶ŠÆ— }/r/Öúi-‡Øæ£ óq:d–ï²ã êĘRiR‰’\ªuÈ‚m²`³”þ¿HfÚDþÅ‚€RVX)•\šUO˼Ė<× «î _8óŸôgõ÷üN·…C¹5œót$ï¹3ïQgæµûѵׂ­— Mª›AŽÛAå7}K[|JîW<‰ª}]õ8ö⣴3OYµ7¸šªüÔbj”ƒkaF—p“*þW‹²jeÙÕŠœ e^¥¦ÀÕ±Ó ¥áÖMW'>Ï%–ví”ô±*¤Ù`òw•…ÉOÀ?µ„ŸBðóðç$‚l¬x #ÖD‹篣Rˆ²2ÿDà þ~;Îù‰óÆðß%¿'qÕË‹‘è ðÇ­>nf_ž?7H¼GÒÜ`,„9…÷¶cøÿŠÿÿÿŽÿøZRŠ¿(Å„C€<Íø¿›%  bÁWzêïwø‰p½Ë7 ¿< §ÄžtÄÄÂDH;gDj°Ã'd„íÃð—†îT$¡û€ÿÒ> õü0InàüoäiRç|§-8¢¡ž©¨¾ÊE¾·$ÏS”í)Ìòà¥ç¤g§c&ÔÓÑâ¿ìF *ˆ9HO<ÊIódgx±2¼˜™>Ìl?vn3Ï—C þ  ÍOL÷—2ýå 3@ÅRs‚!€ÔÜ‚å-gzÉžš;¢€„á!ezJ9ÇåžÍkþoHGæ=‹×ÑxøQOn¨†Þ›g>-üh™Áüÿ±·M~°OýX1ÿ¡dzÝ28©h}ž!@müŽa:B×.´|O“»ÇkS¢Ëäñ`þËä!IP‘4¸Hn“F€ÿ·I‚Lb/ßÝÂñ+a‡Xø^ÆB_sNXm~Þ-¾­]|¾“s£›z{€ú°+ýv{â•ÖØómqͯ›ÛÎ=n|~îQXÓÝ SCÏ´Æ\~J9w‡T{+¤úzPÙ%Ÿ¢û‘ È'q pÛ·î©éeäÍÞ”ÇC9χiOºò['×ݤX¯†jš}e-¦ÿ¢k~ö«>ŽkŽ{Q•b«å4?ažnajó²‹óÉ6f˜QĉÁü¯¦×ˆÓëäYÿó+Õ¨K ‡€_‘whóNIßu¤[&ÌÀ´w °UÂOAð硚7¾ˆgcÇüÍôc!E_@ÖæE¨s"TÙÈüÝž;ð$ûâ{^xȾäëâ?†?¾çëºÞÅÍôãeùó³D·$/XšO’„Ø'ÉóƒAÊ]© vÞÁRüwüw…à¿$3à×üOöí¦þ8À!@›¤Ë þÿÛ€wþ#¡õˆ¡ûÀü+‰m¹XŠÐ=¹iÇù+B0ü‘ø˜ÿ»¹À>aˆæ?;ÔêÆ£$ý^™ýµ&ÿ{4§Ð]]xBKPúAçxü™žœô¬Ôc¬”Ìäã€z-áHaüá‚Øï ¢%e¤º3Ò<iˆÿŒ,_FŽ#ׇ•ïÇ¡úóhDð1€ÿ f’ü3ÿyÿý€ÿ –§œé!c¸‚g/xîJ§Rä­–ø©¤~j)?P%Ò(CþFÙ¤²è¬zŠÍ]¤.Úc±¦¸RS„Ìÿ"m8’.¬Xn7D€J Qeæpà=°¶4¸¾,²¾2±¾2³®*¯¶&«¶&½®–5©Í•Y*s/T^¬¦Ÿ¯ _.çݲ+Ÿ˜ÝÚsNÑi°Áª™õÌ”t`RÒ³¨@x×M,ëˆ!ÿDñgó_5ü_­CƒšWeƒsüîYvDZÖù|õè;4ÏyâµrxEŠ. ûªŠA|ìûÖ8Eü¥ýÓÊ^ø-ÖtÓ¯Õ³+Òñ5Å8ú|~û ¿mCÔ½%ì}§z«Y·8—Jz§KÚZõµƒš–צwES*æ>VÏþ£bnÛ:²eþoOcþ¿5îðÛ4¹e[× ­£Ùh#xó ðՔ˒¾)~û‚¸s†õøš‡øÿÄ·òUèé>Ê…žˆó#q7{Â/¶ž…Dø¯ƒ±×û¢®ô’/&ÜB7¿rŸ§Þ#øçypÃË ºá„+ƒq—†â[f2-ç·®Q;ÿ(€Z÷&µø¿˜ß1›Ý Vè¨#è5·à›6eÃ`øQÇ,1ô½r|UØ¿Èï™cuå<[¤u|¡ÅÁ3¼®iôŸiþvL…Ñmâò×¶¹÷¦qÔZ<óÁ>óƒcöDz…e³olcæ´2ÏTy+ŠñM‡™–Ã…JÏ}ZT©<Ê! ,•”H‚Jä!vyD‘$Ò&ްIBÍ_½ÀÝÈõ²pT\-×ËÈ 0„:rãOS™-Lã}zåsú¹ÖüË/3¯j¶—Šå R2= @,P²}T_µÈ[#öÑHýtò@­I­Ö(IzMÀßl XŒÑ ?‚¿1ð¿WvS´MO¡®l¤0›>¼ÈªÐGU#+l!URU©º"ªº2©¶*»¾ºB@CuFCMrCMÂÉÚĆú¤†úäúšÌ“ 9õõé'ëÓšër®9hMêÕÉaÉã9ÅèŒtbR:¸ ^Ô¬hÀ9¯éÑz_|þ ´YT8q Њbø¿"wÎ {gEœŽ©sKƒè®k©Ñ`Ÿa…˜Tƒù¿®ø¿!ŠÿÀÿ9QϬ²kI7´¬[×O-+!( £z¿sß½…®€õ½V ¬[{Ê^8K®<ЖÝQ™ºUçÖ­ý?”ÌýP=÷®b|Û>öZ×÷¶hôCù4°€ùÿÎ4ò]LƒÜaM=ü‡ç7Z´‰rUØ÷-ƒ?ðNøjŠõ¨ÅÓzý¸ù±OEéT¯Kº¨o: ‰ð¿Ÿ|Rðÿˆÿ±×GïLf<I»ïLº5Ðüæ_ÝÖØÚ8–|ø¿Rж˜Óºœ×±Åx]Ø!`›Ù±Þ™Éz9ŸÛ¾Lí oEÃë¼4)N61ø¿.Eõt€"\ävCl]àôLç·ÿßKÇÞ©&¥8"oÆ~*šG™Õ£( zAßÇ>Ú¦ß['(šþX2÷ÏÊeïSæá×VȹÚï§‚,Àz˜k;ÊTz'2È%èÊ¡o™ øP&uHÃr±ˆl„¾z¾·žëmdù©8þrš—šák`èóüMYÁ%9ñµ¹ùçòE× -w *n§—ßI¬xšÚКvêI\õóØÆaÕwI÷Bª@ÃkG5Ü ¯¹R~Ñ×vÑÏr-ØÞTr5À~#°ôfPÙ«æÎȋδã…÷ú ®væžíÎ?û*³ñJ€éªoñußÊ›uç½ÊN¹›®D–=Ê8Õ/r¤å˜SãlùQ6z¸‰baEØyq¥ÂäJQj•8¥Z’Z£ÈB; z’ÝþÿÂ<´·ñ€\áç2~R)/±”‡ŽvៈÈÏJaøã­.x¶?aþÀÿŠL’,=H’ŠÆ»ÿü|\üßYì¿cû]cù‰až?×ü±íßÁ~a¼Ê©$ yUa¨æ—ÒÒÂp©wCÎ 0üÿßð‡xÞMv²5ÙA6ÞWº‚/å©0ÿÔ;ö>ü€,0Ž" >T…@À@«ÒqP†!í„"ìF Ä1!PÄ!hÁ¢€Ø®È Gð—§þ‡&ûCá!#ýð_Kçï¡exëè~ª|Y®§$ÛøÏÏðàf¸sÒ<è)ÇþÔD$`~^Ü!ðàOƒ¼¢CÊ :dž¬,oF¶7+×—çË¥úüGä—0þÿÕœ@=/È(2üA`Š4O5Û¤áxƒt<_ô¾ÄW'õÓËüuò2øð7hÃͲÅe5ÅØÌ± b’Ýã°Ä—X@ð`7ÇŠŒ+ñ?àoц‚P0„‚*t‘ˆÿÖð GxyYdEetUUBMUj]EFCeúɪô†ª¤Úš„ÚÚÄšºÄʺ„úÚ¼ÚºÌêú´Ú†øSõ1ÍÕI7J¨ÚÍé~ùý y÷¼fhÙ8²j^5Ž®FÀêó礨ڌª‡á÷ÿoBý3‚®yqï’´S;öFü_–NI{ç”h?×¶õY¡|Á4¹Gl:þdŸÅ)ÀOå‹ÑÇ ÿY—Œ}SêÖvÚµ†@„­_†%;Î. sÈýK$~%B¿rY¨CfEñ#,¼#?PÏ÷ÓsýÁök™$#²lm¡¿Žêo ú›¨A–¼[.Ù‘T™™ÝÎ<“">Ÿ¢¹œlnI)z’Tý ®üvDÉP0ÿÄ‚Èú{ä†ë¤ÊËþ%Í^¶ >Å-å ëþ( h lè;ÓŸxy0熳ຳ°¥+÷üÓ„†Ûa•—<í×ý«®Vžõ¶œòS_‹7ß̰™3“ÌYñæì(K~„•QÌDõ0ÿe¢” IZ•,Á_™]/ÏoPÐäŒ:eA½ŠÚ .Ä‚gWKgµ,·R’ûyPK (ìï8|,‚ü‰%ÜJvàŸ€Èψ™wW: " ùáºÜPmNˆ&›¤&Ì?‚òÏ ?À—ùÇþøk>®…,ìt?\ðæ’@âÜi>ð?XQRÒBû 5- h¯£‡k‰,]a˜+àŒÈ¿£üP rÄÒɽ¨á ð$ú€€ÿ® Ë ª@™lü¯5Ô/åéŸIö#þG¸É æGìƒ<È æïå¿Kªð}DpÃüßmûهݾh7"ìð? ù ¢>'~©Íù;‚?ë„‘í©gzè˜^$š¯ªÀ ó_鎊ÿé'Àÿ3“cÛáŸû=Èåÿÿt‚ÿÌtÄv¶775ÿ¨~DåßÈ/eù¢)=ü‘ùç$à¿Q`äû‚;Òq¼´lOxÕñvà¿ä7ÈŒŠ@½"Ш"éUÁU¨I 𷙣‹­±ÅÖxâ5¶Ä·WK,"‚‹ÿVCÈ¢#b5„‚Êõ¡å¦ðr[x…\^UY]][Wòƒê+ë*“kjRªkR*kSªòê+³k«Òk«“jãNÖÄ«L¹l§Þ6)Ûôµ#úÛ †W¦ÑMë̺yv¾r`^Ò=#ìÔ£Õ† ÐŒ í輬F܃Îð¾xýnï_– ¸øº=uãàö׉ô9jT>Â_»"íȯkœ+š¾5õºz \ãƒEw.(º¦ŒOº-çî-—Mœ3æŒ3¶¤ zN»©vÁÔöÖ6¹]>õ®bt³h>sYÛ·mŸ|_< üÿ¿et?&ÞÆÿ«*çã8øÿMõðŠ w]<ðV=ü‡d‚Û:'j›å>½ék?ûü¾wÙóທ!hóÐÜ~;©©/ 1¿ri,ùÖP|‹3m6œL½?‘þp(ånZ;ÛM9ÿ"°R€6Rƒ3öòlæãùìg`õAÀH–!d¿\Îé\Îy5†~iÑ -ÕÇPhÎ µfSŠÒ©¥É•)Œ+ Ú«qºKÑú‹‘¦ËÅ-‘å×#«[Âë.U7û–:ak—lÈ4åGبäb¹„]Ê‹ü/—dTÊrÀÕÛ§”ÔÓ * Ã/ÿÑM.¢½‡€2aƯø_²£ƒïà$‚ìþñVf‚?=n/üõyaÀþÁÊŒ`9ºêåOÕ‘?Þ„¯úbþ3vO{üþ.ç/È æeŸ@à?òü»ðòƒ4ôpÝ^"øëi;á`oÀQ@]†C†¿­ úwþãú%ÿä™þЬev •÷Õ.ÿÝÄQÿ#ÿ¥áè>”FºÉw=ÿ¯ø¯ŽØÂ!€xÝùO{1ÿÑ;aˆÿhÁn¸›€r@’ð¥*ó¯FÚa€¿‰ãeàxéYÞ–šé­bxi }öòŸ›vŒ²Süçk>¹1‡³)߃r¢Qïü‰;+Ó““íÍËõäû |„…¾bš”á#cúÊYh3—’åáoà›„Á&Q I€øoàù@Á|ˆ$ô3‹Lò@³"Ȭ 6+I&uˆQbÒ„»àï(Š/)NÀ*+J(/NÄÏð¾ÝŸPdÙå?«!ÜfŒù!€¦àRKH)ÁÿÊRJuytM%¥¶*ª®2º¾*à_[‘T[‘AMuZuUjCYæÉÒô†’´úÒ”ºrx?±¦:þdErSQÖ]“¸S[9¡º(Þ2ήêçf•ãsÂNt_XÜúµv_ûÅü‡D`VÒ Ç( ˆ| ?ºT+êA£õåN¼©Ï«|¶½Œ@ú |!|9šî87ÔNÔœ#Þ¡­a3²Ö~uË3CÕU£¬Ñ”]gM¬¶F×;b›Ì…ÏMeÓ†g˜ÿ[¥Cë¶U÷ŠÖ üÿ`›€oµü7¼3£½0Æqäü þÁÿ/p:ÿÛÄzbH^F˜Ï¦m ‚÷‚ÊÏTßó){RßÚ)À`ÂõþØ–¶à³ÝÁö÷F]„ˆ0œp½‹|¡/æž7œzw0éV_ÜUøüGÞå —AuƒqW€ÿ³9Ï– :Áä¿a97ýóY­³éO—²; L§<…,à5³·ƒn Ðj0¼~b€q‡N޾£9rç"­c6÷åÉðQ:0-ë›Q¢ZÜ&Z»€G óbþ?d=Û–‰¶)Ð;Û$óR-øA­›‡7ŠG6c¯íý¼ç§SÍŽüÜi¬EàWÈ#ìÂàbQp±€TÌ ±°ƒœ@;@Ïò7Ðý øü5ù¾À|M!8. ÝGMóVú¨ ýÔªœ@€ž.;̘Y›Xx2‘y**Ft*Jqš¬;f:l:K*>`kð26¸ëÏx™ÏûB"`»äStÑÏt/ºêYú™§Ùgž4½`7·‹š;$Í/ù§.¦è*I¬Ê°ÂJJvURJyjtYz˜¦€¤§†Yh‘vzT)#ºœ[ÉK¨&¡æLIV…,¿ZN­UœTœVæžUæü/üÇ)ºÏµËÿ½!ÀA¸},Œ}P1+¾˜€¿™c¢¡n5òWÎ_“¬Ê øËR$`þ}xñþì8/$¼Û‹ÍöD柀ÿNŸÿÞnªù?&?†¿žá’äw Ç‚½¹Š¿ä¿bgïp žö†ùï:ÿÝ9øÿÿ ‹àkíòÌÏ1ÿQ P‚¿$bGˆÿ»!€–2ÒM¹„CŽøÚnøB·ÀBÝ„Ävu~ä>Üð©ÍÿNÏ8f`y øs}u?-ÛWÅôU2|TToE¾7æ??ã'õ83å(>ù-Œ'Ê>±GÿÉßeE~ ¯91!ÀæŸ‘ŽøÏÍñáçù üDÔƒ?Ç_ÅñWs´ü€¿Yd™~f¾¯‰çcây# }‘àM¡¿Uü·ªH.þ›5¡fm Ø„wíÈ_aOªt$—9’@¥öD€ÿV…(Aʉáo3†a󲫿ÝXRVሬ)‰ª+‹ª¯ ׂª¢k+ãª+“ªÊS@ ¨­L¨/M«w¤6Ø‘jJS+Ê“K«ãK«¢Ê.ÙòŸjõƒÊó«ê®·ú™ Íô¼|hVôj^Ò üÜмւִÃhFœ~lFÚ;-é™u-(û·m3[¦‰EE?ÑQÓ…$ìw½¢@kâqv°¡[V A°M‹ºAðá¦|âµMÝP87d[ŠÁueÿ”ôI—¬ù®Âج¥×˜ã+‹#«Ë(ÕöèZ{Bƒ%ý‘©hÒðÕ*g6ÊÿÁü¿6ŽÿßšFÖT½:'º÷d™x§Gí1›ðgVBðÚÒBº1ÇmÇÓ¤7T#S¼ŽaÖsÄ~ëÃêËGô÷|J^†¡ñ¯"Î%Þˆ»ö’trxè¡\‚ˆ‚ñ"Z´j65öÇ_{Üpߣøß\ê?Yg²ž/æ#“ÿ†;´ÁÃ?Ÿõb9óÕbÖ«Ù´—ðá½w•Ö…–¿Ñš˜u4ïn­wõÓSÑúHø£® QÒÀÿyj;|Oÿ§äˆÿó t«þ:Ûj4mé½qú£eîƒeóü?Àžq!hÓ4ºŠø ­Y†_ ¿-›\1O¾R_o‰mü+x~IX±0dÚxv‰Îþ}é˜~zšq¾†þ•©‘¼0ÿµ _ äÝt_%ÍGQè ¿Š?ÌXq:¥43¾<#µ,9³<.·2†^If•…°+HüÊ`a©/·Ô‹]åůóÕª á5%hΧ›N§hÓ”§³d9ÂÓ‚+<å©<–-.ÅšX”kÏ¶æ†Ø ÑB ôp+\̤”1c*ØqUü„*Q2êÒ”äTÊ kôZyáIEÞieÖeš‹ÿ.ÿ±þ§*.á‚?†?“¿ˆgcÄZü£…5 ’}^„.7à¯Í"©3‚TéÊ´ÿ‡±÷po³J×½SöÌž3{ ! ÅE½[’{/’Õ{ï½K–d¹×4`€¡%ÕIÜ;ŽíÄq Ãì}¾æ{Ö»dÅd8sÎuÝ×{½Iì˜øwßϳÖzÍÓDwB„®'›kK–ÿíÞ•^úÆü ßBÛÃðÇáÿ™ä_€TÃß/øâì·€§µÀ>þàO„ÌÊ3üϯ4‘ ü‡”²Œhÿàkÿ³áy[Ňð€KxÀ)@OôRN¼x@üç½üç ðßÇÿ å?¶\ ÿÑë‚çmÕÿáiùcHùjXw4b(øGL´°‰4Ðü:ŠG]ê•“œ²»¤ˆhþÓ7økê¨jßW–V µ _i+;ØÊ{ žâÊWdµ¯« ÿ·×¶éE%&I)„›œäP’\jŠGKñêѲZÌ5R&jÐLA÷3ÚÿiÀyà?!RÂBNZ) ¸’°SSNþÿI/øŸôsÁ2óéX‘üë÷”ç_gcO®±»³¡`˜ÿ@þdLJÄÊâQ^<ÊÁJFY‰4%ÕAϤ٘ÿƒ¹r°€¨zªúzêz{{»šòüï©î®æfë‡2õƒéºþÎú®îºloU¦WØÓ]q2ÙòIÈ1>±»ô8:·ëÛ°O¬»‘¶ý3ïGÆ–à¹î™ÞÜXuNÜuA†Ÿ¸ç¿ñÏôÚÃÈ­UûøóuÝ>ò?/£áÒ±;PàµÀ>„ª&Ü·Ð(9÷ü}çºÃÅ?±ünÒûÖGv/¶XEg­3CíÎp{R•ɦÞXõgÑèJäàÿ=wänì&g6ƒ³ð§ú>‰æüÿï‡ç'¿Ýú>„n­zÁKÀÀÉùmÇÔ†ùÚ#:¤pÏ=Ô%ÓàÿmÃùÏéÝç^ }V’þñO•AóŠk>þ_á /˜©ú~ºVvì`®îo³µÏ7~Fäÿ÷¾¥õUœÃýŸùšn·}}§íüºìê}ÝÌcãÍGú9Ôí‘_Ýj»Ûpa½õÊ®lüžì:: lš{l™}hÂÏ ÎÛgñh¾Ç^4¡à¿c¾oŸ»gœ^“^^k¿ôßÎ¥wPþ÷ÌÜõ¡uùû>tRì:@ üÿï$â?”?ÀÀþ?:nÿ˜\ýOçZˆ->L.=H-ÞOÞ|’[Þ‰,/$¿:ërÇ Â¤øŠ˜ 3+j¦Æ”¨ŽÑRZŠ_CÈ꽚ºØ£,A„WR‚J*ZPS  ª€bŸ²È#/òÈŠ½ ii¸½8.£'¤ìd¯£Y˜iªÍÔ7fjšR¦´ %ÁnˆÐª“ô† «¹‹-êæˆãUÍͲ\‹¼£IÜÑÚ–nkN´Õ$DÑ6~BZ•G%•©0¡B%Q1£š²¸FÒÿõþkú-uÀÿgk¿K áóÄ+õ¶òý;þc Øß*`]¦æœ±©þ÷Ã?N?,„öàsü"¶¿•åkazš¨îFŠ« áóßX½ÿê§w{aþï]Å‹ø_8á áÃߎ6ü0Ü ¦OÅö«9X 7¬ @O|AbZ~AQT<µ€ýüý”ÿÌŸòŸŒ6ÿÿ ÿ %€«•J;Åô HÿÓÕø Ìw9’¯êyOÕ«â©x‘(ègøÏù·ü/ÿ…­ö7®Ö?ú¯DôÇBþÅ&ZÈH'và“ê—íüGð7¶¢m?uÝþ+Cææ·p6³_jå¾,æ¿Zà?êüáÁ_F±+ÈN™Øê¶÷Lt4ÞßL Û(;5ê %tˆ÷Àÿ$äü¼()µÃNð§v¸hI3íçvø¹ ;à¦ÂÿÉêî4@¾”Ë4€pøïÏ5® €ùŸŠW¤âBP2ÎÇüEØÿY‰;ž¡§2¬l†×ôu–vVúsU}¹šž®ºî®úî.°€†î†¡\õ`®,¦·³®'[Û“­Ée«;³ÕÙÎÊlV˜ë(ï‰Ö ª¾Š&fâïÜ~¹ê¼°f¹|×5¾üÌBn¼œ{½°é›]sO¶¼³Û>´ ´Ùñͬ˜.­ZÆþ›Ä€b4ZŸhûÃóadÈ¿ážÅí#Ìt¾Œ¸øqpùa`á^pb5øÕ¸÷äÇï)·´×/슳ÿSŒž$¯;ZÞ­ÍÅ…G|7C_ýб üßÍÎÞKN£ÝJÁùÇqÄÿ‡ÁÙ‘ã £ha•-Áxþæÿ–uü¡ó¾ù}ÅxuÑpiÙxqIûÍŒž÷Å ÿü¯ Ï\áž«ûmìaœ8O…ØÌŸ­y\àšàmü35fëþïï|^Üùù±Ìzß{t®öƒ¥æ/o‹Îo*®ü°,=6Í?ÐάKÆÖ›.-W ü¿/ŸØlÛV\{b¾ülGSO‰“¿þ§‰ct·Ð„:Ë”ðó[úÉuÙ•uÉåÿq-ÿwèî&Ç=·æG£9pþÇüÿ!¼òcíz…§Àdé;hhçÚ£ø-àÿ£ôðÿqç ØÁlèÃ3VKÊ$ŒÛ8 +7fæF̬ ÊjRX‡°Ÿ¯¬ðJÚÛ†ø_êQ’ýJZPÉ *é`ðKe±_Qä“÷É‹}’RŸ„h§ûGŠc!YIXJŽJèq'.â%[ñfA²YoFêñ:aª¾ª£¡:ÓPiÆ€óùö xI(Êã ^TÁ ÈèÀ±¢Ì'ãy¥Ü R4ƒŸéЖ§4 Œ¶*g¬îAð¯ïs4 ºZú]b€ù Q}Ø#ñŠF|-xý÷gUà?îíU¢.k[·ñ¿ÓИÕ7ì'BUS£r`? áùÛ¹Áv.†?ßÛÌ€Øïn¤9ë)Ž:2Ȋ‰¡ªäþëˆü¯«#éÑ`4Ò?üÑ9/ ä³= ¦WÉ*ðÿÀ ÿ¸NðT~ µƒ¸Ïtþ%ÿ£#ÉÄæÿŸò¿‘ôt ÐÓ³ÀOùŸq¿š4ý%¨ø½§ù—ŽªÎʾš_j~¬G ÔýÂWóœ§ñßM4‚|‚ç@Œý‚ð*°{oìCÁ°ÌûøïlCüë‹P¿ÝDÃ;ð½:ªK ‰½Ä¥ Ø¥¥SÚù£i:¦¬?¢¨{£½âp+ÿeÀ~ëÅFæ_àÙÆ}Y"8,ªzERûš²é˜¦uþÍRŠMAµË©N:êåÓ3ò›<-̈µ³bN:VÒÉþƒ:ÐIZ‡DMÛhi° À?ãatø8Ù :´€püU]µ=ÿîÎ&Po È üïën.XÔéd¿#Q¾ÿà?aˆÿÉ43•ád2e¹leogm_ ^º:kºsµX=¹úþ®HûýiÀ~-ª,2µéL(ÓQ‘M©¼;QÙ«ê‹ÔŸŠ(ÿŒùFn:¾XµŽÝñ^_ LîÄoÞ/n‡oÜ/=L®l…æ!ùƒ @òF£¶=SkÖ«wL—Ñ–ç šNLìö, E¨'6ŽBæþãirh!À;·Z|]z›[‹\÷žþÐæ²ˆúµ™7açbÜÞ(¿?*è• Eɲ÷‚Î9ßgÀÿÿéYþo'¦Ð,²üF›Fçw¢7D~Œß~¹ Æt?0‡—}³[öIà?Þ]¿é˜^Ò_™×ž_Ô}üÿŠÕ÷þÑøçäΫ‚“ÀÿËÜSäÿúcô;ÚÈTÅ{à7ê?œª:üŸ¨87Qñ>ðª~æýë³½‘üäÔyZïUΉ…†–[¾Zm¿¸­šxbZüÞ| ñ_?»Ú~y­ñâíÚo7[Pþß’\E" 3Ì3ó'ѽmë1=oé1Lª¨ 65ãò1Èÿ?Úÿ'¼¶í[ø¯úQþßõ¢K–Ÿxnþ3xûûÐ2Ê]þG5ûP}Ÿ\þg&? øÿ+!ÿï&e—LÝœö¿sÒ¨N™ø33ldÇ,ü ‰‰ª]} ZSS“Ü2|syÔ¨½ïU!¡>¿’Päó@AóË©~9 I‰ùRr¤äS–xÅ>yI@FIéàA1ˆáÑCVXÊI8ÄRiY¸‘‚j†_ÆôËX€SÒa)7"g£ßSÅ(Ù(¾*øþ ±ÁžŸÖT‚þ}5Ú“c­ëq4¸šÝÍ`CnЋ4äkôµãœÿïù-à§üo…ð௭Ë7|Âùqà÷ŠØ _+ÇÛÂFÚ½–²¢ð_ ü×Uƒ ý$þ†Ja¤?Ñù¡í‡?èøµ¼ˆ¶¬ ÿ„^ˆ…ÞµÈö—ù…à}ü‡ðÿ³ü·ïYnþïç?Þêô¾–²ŒjþäÿÆ]ûœ·ö¹Pï"Mÿkù-(Úü›pã¯ýµ¿ôV>ç>%€_ø<æ¿÷ä?Þ´¿ 0±ÐÎOð¿þ·.ÑŸüªW£Fÿ$̈èÀü¯Ô­¤ÿ¢b=„ÿ–"à?^ömjâ"ò70^ÁK+ç`;ÿÕ¶ÊC˜ÿÚ¶ÿV9Í®Dr©iþý4á€?;æ`'\Ü„›•tÒSæÚÁHÛè„0ÿ)Ïð?,ÃüÏÆ+sÉjHûÿÁzrÍý¹–¾Îf¼ü,ÿþÏð[ððO¥¹™L9„y¨ °ä³Õà]]U`¨³”iìN5vgjþÉtm<]OUÂs¡ò\XÐdâèrùQŸìSgbÜò×EÃàÿªo|+2{/¶°¹±›X܉..;®¯{¦wB »Áà 0vÕ|å¶ñÒºíŽýøtØ÷ÑÛèî`Ç4„‡B!€ßñ(éõà ¸ÉVhn=4¾àÿÛ—öô)³ª×U _´T“ ñ»ƒ•½þŠ>?¿ÏÏ 3;“Ü·½ÖIçGß§îüïÞ ÌÿÝØMø!ðÿ~`÷îEæî‡ç!ÿ÷ ~ñÍ€6¬ã÷ì“@T|øwÙ0¶ »pKøÿ­ëôAïߊ;.ò†/óNœgŽàkÇ/°Nžgž/w¾áo·Z>©Ú¿pMðîLíÇ×…`çÆËßþøHêÓ£IÌÿùú7d7W·”ã;ÚYÀ,ʦK`[­c;Òë;òqàÿ®vò¡iú‘mî‰sáÚíƒøÿȳðà º¡ŒU±mžZW]þ¯Š.<6ÍAþßòÎßñ̬x¦ï8ÐÝÍè¢ÇÜÞ%|'üÅLÞ!Â?ú(¶FxœXz¸õ µü‡üÿ8698{Ú¨LY3=¨gõlø—ï1<ºbêö”·•SCò¨((ó˹g }@YPG‚-€(-H…A©€;9"9iÝ£ z¤H9+Ÿ(axÅ4¯„Ž$c¸åHiÑéT9ǯ*ók(, $çá.:xD@Ê )9ð)€,¿¼ MÑ—¡5ß”šŸQUujj:õuheÖ‚¶ýô:›úþ„†Ý-ÃÞÖaO²Ÿt0 +´zþßùßcië2µtÿ;4µIU5Äþ}}~.Jûm,»•éifÜML ?ÈÕ@ÅáßVS ²Ô”˜÷øóaÚ¿‘€¿‘¸“ønoÜkûcò?à Ìÿ¨Ž…áŸ4”ƒ0ÿ“:!ð?ºo-øþš? ´Cµ•ü¯ó FP°€ÂPЮÀñŒëHÔpÐ/ÿƒOü;¿èw!ñïãÒÿJÈþ+%ÿ}Bú»˜èW¡ÆÚžÊ!Ñ"ypGˆ0¨ ðfQ<öÁ™"·wó#ñßÀyÎ ü•¥áné«~íñ ÁþņMŒ î×Q½jª[IvÊKm’"SÛ1¼í_[wTQùºTø*¤}`~=ýÏuÌØ/6r^jæU¼*©yUÑð†¶µÈ .6KIþ!ùƒ ›<þû‰q(줇Õáf‚R.F øO€Ê8Yžø‡ðÞéfÒ~.šØd‚‚LXدéé@ä'?0¿ 4€úóMC½Mh£NosOÄõ¾\}og]Wºº3U™Ž ³ÉŠŽ?æFì§á?ÉMwp;³üî\ew®º·³º'[…Õ©ìJWt¥á¥ì ;]×ÕQŸK5€:“õÙD]G¼6¯BgˆmEñ'd¦‚¬t˜“ ñ:¼Ñò¡dÝÿðdüƒåôåõÔÍíÈú–gsͶºf_ºç»µåŸy”¸ñ89ËtqI?¶fž_3,Þ \_lGçïú§6B7$–8Ñ7S[©{¡™íàô†obÓ? ï[¶Õ-ßâð•‰ÐÙÝþa[[ÎÎG_I#ëevy¹97¯Û-èö {|å=>AW°ìm§fÂsúûΛOr·W;f6rs»©›?$ÑÉ_øý×ChKÝGócèö“ø Pžìz¦@bGײ{æúomØPþ_P}»¬;¿f¼ø9«÷ôáÀ§¥™‹œ¡ ìዬљŠ÷nÖ¡mŸWX§fª>/¸ÙòÙÆ¿]¯xw¼òÜdÕ_¯ Ï]dŸ¸*8}]pêÝCþ‡/1†®qß\iúêžêêºìÒ–rì¾~|W?†|6dSwDc  Ùø¶r ìÝlš…üß<ýÀ:ûÈ…n%xà¼ùÀsëQ`åqðöCÿíÎ[;†é é•»â‹«Ò h>¶ÿÖ&«{nË5·eŸÙuÌ=p¡ù{»îùÿ/vç¿ÃËÿÝB Á©õ&×~ˆ¯€GÿïÌúÿ¤×~H­@-ð$ ÿGnîÆæï'oB•tÕ÷V§®9`¡ø-%-5‚ö³PA­%Ö¿tŸœéSPѪ®²È/%A’G›ä,üÃ=Q÷D÷Ki> h§bü}ítà?(aà'$Âþð×—E5¨ô´ ¤(ƒ¯'¾°{ù­ÿ]Ž÷ <ÿcÿø;šhÎf:¨7DÊùŠRö×bº—ÂÊ¿D•Ž+_H©_Èjþ’Õþ9£úcJò»H˯õ¼U\åyæcìT8,ð¯üG×¾ü×sŸC·.6þóm°7œéA3# §ù´È'. øom/þ£±ÇTÕ¯ËÊ·óµ°_‚ØüGáàÏ{©UxH\y˜àÿkÚÖc˜ÿ¸óáŸð‚ß¶ßCyé79à"EÜ”˜›Ø¶ NçãôYù'] ïz”ŸúÝß…S—‚½—ƒW‚C×b#c‘±ØàXdèkgÏE×ÐußÙéÀ{+ž¯n{¿Y \^ó_[óMìÆn=Lܹ¼¹êœÚôÍŸÑÐ`ëwK–¯M_Ìë?ýÔ{OïU)sʺ”¶,n¢Çl”˜·£Ý³i;'måflé¹½™žßÎÞÜŽßØ ݸžGù?0¾šÙ Î=ðÏÿ^yÊÇÔ†uü¶öâšáRXþßÒ]¾©þø×pòÿ;ÇbŸ“;ÿNï9Ï:Ï/;;%|÷2ãôyúèµ²³çn4~¼ys \àªðíïX#cüSß2zϼàüª$sw ,ãnÛ·[ò«þCþþï¨gÿwÛ¯Ö$× ØRŽ£ë Óÿp, ûîA¶Y×üCïÀÿoiÛI\…`œÙT\…`S5†¦Ãùá/µ¸ƒS,n;ç ùÿ¾gß¹ó$¸ô8´ôCìÎP%nƒþ‘ZýïÌú?3«ß§Vž¤o?ÎÜF- Ô­­ÐÜ·öÑU£×HvëTä ‚íU2ÐjšºuËiD£†æ’{äEDŸŸúŒìÁñ[ñ‚øáïm–ÿyIûùá_à?`ÊOXÿ15‡¡"k®ÉYëºlõ½¶†>{ãÀ¿…ÿ¨§ý„O\€ÿ ¿ÃªL~Hþ à¿£­×ÖÒcmFÛ~ˆmŸèœ—¦ mõ‘ñ {ûóð'Zý¸Û_à¿£®Ãßòþǵ•E d¸ç_SR€?^óÅá?¿æ+g8•,—ŠíVCìç`ù1üCü£F~Ì$H@ȇð¿þærà?|}0ÿcZ´ðt`ÿ}í,¯˜‰ù`/A¡ÀÀ¶ùOÀñ?Fï‰P»ü¥Y×ñŒýx§ýhÎv´Ç~¤Ïy¤ßùF¯õpVÿRJñLjè·þúçÝÕø ÀäßÇÿüî±±ÿ ¬èîõêß9Dýê£AcIÈBÅü‡”N4ÿ!·½IVY©¹½ÔØŠü*ª!ùlaÿàßÈøëÏ-ÜEü—ćðÉ/€?„£¨Ø"-±+ȸí¿?üÇÜùÁüÏzÙØ@ìï+ïÿsaAw¤²7QÓ×Q‡àŸiêϵ v· ø÷‰þ'E'áÙUÀ`Oã3ü‡ŸM–wÄøÀ´í?ÆÅðÏt𠱟üyø÷¤‰Oì¨Í¥jr©:ûõ©X}"RWEƒ!Ÿ èå½e/Ççfx]T‹ìu”ø%~giØEºh1#MoiÎKív³\ÂSîÆ³žö·=Šs~í¹ônP÷N@û¶[ý®[÷Çô‘×ö'sÁÛq=rz*þþBæó›Ù¯fcŸN?˜ ½Íö‚cø;{ÿ7Ö®Ï É¿ÊYUUZ%H¨¹jº …´”Â3b¡&-ì 7eæÀ³ÃÆ/H9X9'sÐPû¹-ºž=ÿ¸{ù^zq7»üßߨ Ínù&×ÿ¿æ¬þ, ;Dëò“»¼¤^©ÏKî÷”ö{‹=Ç{oäL¯thþ“üÞ×ô+gužöþó Œ}xzË~™ŸüóSþÛÑU/Ï™tÀþ¯Lu¿w¶BÍ"ü!ü›8üü§À!ÛÄ%º–"ÿÒŠC"ދͬ?51ÿ‚—VÎ Iù˲ÊWu¯«ŽèÛŽÅÇ1ü‰Îwþñžÿ…äßáƒ']äe?Ãü.w^9 —þ]^N·øßôÄ*0ÿ2 ÿ‰=}¢á¶‘AÑÉ!ñÉ!æÿPoSW}o'Ú¢ äÏuT‚ üG‡¿â¼Ž$àŸM  üžtV7‚†6NÀ?\ ÖFå¿›çus=.ŽÇÅv9èNÙn)v؊ݶ"¯½8`'äˆY@4P’ R:üÔ¬—ÞãçôùËúüü`E°¢7„Ô €¼AwÈÇr×:àð¤[~Ê­>í1œr™Fíú!‹fت´(z m]š†NUmZQ‘”–´tv[GòJ° ˆ ´ž׳“z^RÏIšØà  Ôcgõê«Îms±v:gbÓwî%nn†gÐj‚orÃsmÃw (†nÞóßXwMmº¦v<³P@þ_Ö^þ? ,®Û§µ—ÿ—€ÿŸÐ»Î%¾¤v}Všû–1pž9üŸ®üëyúÉ¿“†.³O_á¾Êsªêðÿ"÷äyöè×ôÁOH¹±ŠÓŸ‘2§þdý;%ù¾æÃ•Ö¯!ÿCøGÉß0ñÀˆ&|n+Qóÿ._9 ÚRMm«'·Ô×wt“ÿ¿w.<°Î¢£¾64ügǹðß°ÍÞsÌ?ö,í˜fÖäWVÛ/®©® «aK÷CK[>Ôa[³Mí¸n<,üw‰]£ßûá}ó¿ÿÝðü“ä2„ ÿG™ÕŽ•{©å;¡ñõ]áö´È«.ò(É(í+éu©]UlW”:¥‡„êQ\2²[AòÉ(ûDú‰ÐžO2¨`?Ãø‚ü^ ?ÿ/ü—2 ‚ºÃ?®á§ôåÿ¬¹:g¯ërÔ÷:ûˆ=?Cž´æënñ´p·Á4êòÉÿY„,À#r·ÿûì­ÀÿnKS—±!g¨ÏêjӚꤲ"&+ ·s »ˆn?mÿR/îüCøÇð/„må1 ¿¦â¸¦*Ïÿü±_âbà¿©…Zÿ蜯’åVs<®GÃ)0øØÏËÀÛÏÿ$Äþ=òcø#?Ëÿ°¢,$çaøû‰cÿøï -õ:šI…ð¿Ÿÿ½Iv_œÕ¦÷€´>?½?@ І‚Ô¡©Ïs¬ÛöZF0&û“·ù7ÎÚç ­þ==§Ã=ÿÿÑ´OÖ5ç€NøkSãÜòÃC1ð?`¡üñÅ[Dó‡æPRPó§lh+Q7á_x°ûÈÿ Dþ²¿´ ^’ü«^VÖ¾ªix]Û|ÔÔ^d–[eÅuPµ«Aw»ø´°•Etþ™I7'íç¦ýðDð ùŸ?æ¡.Àüïòçù߯éO!þ÷w6âæÏh¿à…ù?Òß‚Kl¨ŸÓQÕ•BüOÇ©hYGŒ—Ið³IA6]žËV>íùtÔ‚ÐâBGCwª¾+YGÌ‘Cðïˆ7$# ±`}ØWð }n¾ÛÁuÙ9N;ÓacØ,T«™d1·YŽ»¬`%k‰ßV´SÂNšßK‹ø™Q?=á§¥CÌLêŒr:cÜlŒÕggcô\œ’‹•ôÄ‹»#G;ÃÌt€–ò2 bJºyI/nãÆ­ea“ƒ8¬G)ŒÈó¨^=Å©)à85·†îUÓ}*fHÅŠ¨ØP$Ôl4Ô×ÀŒšXQ3g¤wë#:Å¥ÐÈVçä£ô‡©»Û±ÅµÐÄFpbÛ?µéþ¯Æ7}Ó›ž™-ïìšsåïÜ–}òŽîæÿÿM çMÍÅyõ·wL—Wõç!ÿ¿_’þÿÖw3r‘}b¬ì­‰Š÷/0N}Q܉ujŒwú2÷ÔDåÙɪ·/ñN|Ëü´¤ëJçÕÊ3%ß|Éù5µ ÝH^ñÞbã×ïi'vMS÷ÍS­³-7v´³k’ëëòq ÿ=Í ‚¿jbSu >ì‘yæîҶ9<êaÛ: ‘ø¿iŸ»ï^üÞ·üßP^]“_ÚÒ]‡üÿ$´áÓ;ü»±?|ø…j‡¾ÅGÁ[ÿˆ£žÿ“øÊƒÈ½àÜãÄÒ“ôíï3w¾ï\}œ½»›¾}/½²;§íŠªPù¬*vË))Ý¥ Ø”Å ‡Œð·µSìR²SN†_õJÉ?U)¨`ÄÉû« ?Àñ_FóJ©öøIìödú?x:ÙÏzAPÁ «¸ÿ¤N˜6V"ø[k»]u=îú~O〷iÄ×2âÚï—¨‚ÿbürÒ'í¹€ „-ó݃òS·¥¡ÛÔˆùß¡®J(Q)óŸêÅi?ÿqçÇVWR€¿¾ò8ȯ.?¦®Dü×V¾aþCøÇð‡ðÎyHþ^-Tà?¼„ $cÃ?n&Íü«”¶T€öóà7íƒ?í­"øäßßÿù9þSöißÏïõz¬¾8§'Êê 1Ñ]ä!æ@D0†C´iëX§ùpBõR í÷Îú_»Ï£¹œ…ÑÐè:˜½É?ÏòŸ}@Ï> ePsŸ×UüÆÚú¢Gý†ßT‚ö*Xi~ ¾x‹îÒ¢[ð É .Õ4“×¾á_,x ˜ßÆ{¡÷IÙ‹2ÁAYÅAyåËŠšWÔõ¯ê›ß0µ³H‹þ(çð÷hÑQ_4Þgü3¼ÀéûÕíAÚÏP¡ÿƒ>&Àëð{C¾(â_²ø?ð'š?Àÿ{üÇý¼ €‚»úru½¨™S B‚¤ãeÿΔ°+]ѩĿړFü‡Øß›nþ#øÇk²‰ºL¼6«KFë⡺ˆ¿6è©ñº'ßiãÚ-l«‰n1ÒÌF²ÉPj6YMÈœ–"·¥,Àg'ƒøô ›rÓÃ^jÜGM(É 5f&£¬x˜ Gè©(5.ÎD‹Ó¡cP)€’ðÁ.:(±S±BVrÀ\ê7’|†R¯¾_—ã×мJšKAsɉÁ&xD­„lg†e¬˜œU0Ð1O-;ªç„õœ¬šÞ¥ã÷h?óv¬uŽ=ÉÞ}”Dü¿_M@æßñͬ{Ç×ü×ïz'WÛ¾9Èÿ÷¼³÷Ühóç2‘ÿ!ß÷-¬Ù&çUçg_Ö_Àùÿý’ä”Ü7Œ œï/ñÎÿ/sßú¼¨òÿ¸Ý9 ðŸª~øöѱŽÏ˜=—+Nž;:wØÿ£÷ kdJøî͆Ï×eWìhWeú‰cþû͆ù-ÅÔšrbC=µ¥¹§™ÚTŽokÐüÿû†Iø”ÿMS[¦É-Ëð¨¾ãF ÀÿmÃÔ†úú¦ö|À×ü÷áÛ¨ù㿹á¹q×1½ã]x\¾ïY@#':5üÈf±þ˜¸ûÏÔê£èÒýð<:ÁY N~­<ÊÞ†ð¿•Z݈œSõ´–÷M^ä–ÓœRô­dU€ÿv d“Qœr**¤$, ñÿ™`Ï žÖð1 ‰øHb4ŒV`m U°ˆùL¿‚P²Að‚Þå?|À †ào*ÏZ*»ì5ÝŽÚ>o}¿¯aÀß8h ¶ Šüm >ÖI¿8¯`ûIÿž xÆFÜ’a—hÈÙ6`oé³6õZ1ÿ3Úª”ª<.çcþ‡ÄlþqÚßÏ{mIþÄVÏ"}e1$•ð¨ªñ?™ûÞ´7U}±¶‰´¿ó³×ögAò÷éx |ÃÇÀC™ßÄ/ˆ€??a`øüǪxÚÿ!6‚ÂDùóüÇT÷ˆž<ۡТîûÃÈ«êOpÿý1î`”;æ …X ák$L PúÜ%]–#)í¡ øOîÆÿt å({ÞÆÍ[ø¯ Þ§§GÀtþ5ü_j~goÙ§;î7“6*æ¿ÏLð_Cw¨Ð?Qs{©®µDÙpTRõ*„ÿE࿘ÿ¢”ÿ’Lð¢\ø’²âeEÕAUÍ!MÃacëQ‹øÀþÙ£ƒcjõà7R‚VzÄÁˆ¹Ð(:…äügƒº}Ü‚ üǀ¿“‰Ÿ'Ú»’ópzüyþ÷Ç*{cÕ˜ÿÐHŸèÄ@;hÿ[”ÀÿþÎ:|ž U@.Y‘EAüsåÿ'þCøÏ%ê³±Z€: Ÿú·6à®vÙyü¹#ˤ§ôT½ŽdЕtdžcfÃQp'â)º°ÌFBU@~„)5 ƒÀbF2ÄØhi‹FRûé °sÒ ùÇ] >‘‡c"Aæ÷iK½Pd©©óÝJjPÎÈpdxÄL$–ÓBí´ˆ”•Ó£ VT͉³MrJV§Ž Iì«s1õÕ£ôÒ“ÄÝû©•ÛÁ‰ÐônèÆ®ÿƦwjÝ?¹˜AòÝÓ뎉mºGø®é*ðÿ¶~ Ý>OðNñí¤äóEÍ·+šo>¦vž+ŠZšüÿwÚè"÷4Úä)x÷Ó¢^àÿdÅ;×ø§'Ê߯xëwè[VÿßJ3Ѳç œ:èüàÐöà5îɹªn·}üßÖMîš§ï[§Ñ­Ž¶…ûúÙMùð´©™ÞÔLÿwt“M³÷ `3÷Œ“[úñuýõuãø¶cøä^|ä¾…†?k®Â¯¢Ž9 =šÂDü¿m›\sÎìzv\(üï]þÞ¿zDÁòã/¢7á+ó zþíX~^¾—ºðßÉÜžŠ}uRp·Ñ™wi±KF…À¢”ü8æ¿SFÙåÄ¡H9°_WNùhà§ü'Kh[Àÿ©…cb褘‚P2A@{Ìÿ Š*¸Æ>(¤ä zPÉëËkþ=κ>7¿~0Ð4j µž·ŒˆN…ÚN…õ¢S‚ÚA§ƒ¬S ðžH~Xn ÁsÄ-~†ÿ]f4ð3­©L*…1YYDÂý9þS0ÿ [içä,Gü/ÀÈG}ªJþ“óÝ¡`üqøøϯ‡Îü?åÀ? Ø·•ce¬H þ§Œ…üU=åXQ¶ŸÿÞV:È/bÿá ¬#&üà!oû-¾=ÑǃˆónÀÿ8ï§ügÀ ©ýžÒNë‘´þµ¨ìEÄÿŠ_ÚùÏÛyÏð­.nî/ö®‰|®pwdáð—®ìy5÷€Zð+Sã\Ê× ü­Ô€îµð7ÒÜ:ðߦ@m}+šá)«}½½òà?’ O~EÅ‹ eåKªÚƒšúCÚÆW­oXÛ[eÇíŠbÄM)òc¢øÍÔ°wÍØÀŸ«7PÖäÃ\à_øŸu0;P@EÀþÃGöø=AAo¤ó(Ó8ÒÕ6Ò#†ðrPrjHzrHLð?¿ ‚ó¿ €<¶€¼:*‰½ýþDP“oûãÎO¼®ÀÿŽH],XöÕ@ø÷;ÿ|‡•g5rÍz¶QËÔª)Z I§.Ñk‹Á̆b‹±Èa*qšKÝÈo) X‹ÃRÔMŠyÈq-á `&ühœ] ͵(Cr󮲸“üE4àØF ZHù}Æb¯¡È£G7£¡éè˜Ù¥ @ì¶—ÛÉh ˆŠ;žЧ•ìm#ùEè—Â:¸@D†N‰Fdü¬œ“T³*~¯Z~Åÿæ£Î…‡‰;»Éeàÿj`b'0ü_wO¬ù¦€ÿkî™MÏ ðÓ5µé˜þ¯è.­¯Aþþß1_Çü¿¥ýøÿ9«÷ýãñ¯hÝh ¸4÷5kx¬ü1þ;Wï~EFýÿ©Êw/±G@ׄ§.•|JîÄü¿4>úËo¾£æ®±OÌ×|x·ýüšü $ö{–étÝØóÜŽvzUruU1~W9±¥Bü×LBø @óÿ ï· ÿ7Í“ó‡þ[¨Ïï^ܵ£ ‘×t×ÖÔcàh·©ZÜð/¬8¦À xè[¼g›ùÁ·òijøÐ½üGæ»ñC]Œ6DEž$—Ÿ¤o?̬삤—¶³Ëcñsb½»MàPЬíÀD{«œdQÙä%ˆÿRšMF³Ê)˜ÿ8ù?Ã|é*Z VP Â«ÃØð{žÿJZ^ †Ï ",€•W21ö£ZnLÇ‹ë¹)ø–³Uv;ªûÜuý€ÃP°q$Ü<i9i=½mÇ:Ÿ ‹Î„Ú*éž ä-¼5…öV° 8šúí}¶<í?­Ëçÿˆ”jgÅ O3ù§ûüóã}°àðo¬.ÕUáÎð_Y‰à2?ºä¥˜€?IÝ‘•b{~ ò‚*˜HþDøç`òe!ÜãÔ\ÂáóçÌl˜ÿûóLÍ þg(Ðú/ÚREŒ§àcáwlà üÇ/yòïÉ'æ ÄÿþCà?o(Ì!ÄA 0a øÉÝŽâ¬ñ¸â ¯õÞª_;ÏÙÊ@ @Ìö9€É¿¿ ÀáßJŒýÔðžS—=§­üµí¯æÀ¿à¿ÛLwCø×Ñ ü[ddC[‘¶ù¨¢þˆ´ú°¸âe€¿)uåAUÕ‹êê—Ôu/k^Ñ56µ±IŠpøGƒƒ´$ ðHþ +å㤃Ül¸¬3Ä-¨'Äí·€/Rÿ,l=þ2$‚ÿý±êþð¿óÿDŸøŸað$6‚¢¡C݃]  \}ÿ]©JÌxÙÏÿÞ ±òK4ÿ»’ ÀÿL´&ƒà_“ ÕDuþþ^{¥Ë*p˜Ë,®IÇ6h˜:M«¤êÔ$½¦ª“®Äb,q˜HN3Ùe"»Íðâµ$b§D(Û£}AÄîИ—B£­ÝLðÊ„‹spã6nÄQ ÛJáæ¿)O~íQ§ú˜S]äR;ÅNy)È':êó´w5Û›JìM¥„J-Åî–p€ˆ–0cv\ÊKH)/©âF”ÜŒ¼é3kz5~ñ~òæv|a%0~78y/8¿íž»m½vÇqmÍ=µêœZsNn8'!ÿcþß1\Y3£!ÕΙ%ÓÕ9õùiÙ—8ÿÁî{ûõÞÿù9©ëSrÏyîék•ïO×|ô5uäÊиðìî‰1ÞIàÿeþè´îÏh]g‹#ïGÿç{¿&e®²Fj?B“?•ã÷ŒÓÄz.²€ÖY`þ†bbU=¹¦šÜÔM­k&6ÔÛÄå¿;ÿ×ÕcðqÿçàÿCïâ¿yrÃ4qW{´cŸ}軉¦ª†o­n»gVÑÌYøÄ¨ˆ$Ü ÑÐQT üüOÝB“:ïuÜ\O̓¾‰žI‰UÎ6䛄Tà¿YŽÅœR jAøWÒÀ P›NFF] 9Å­x ÿüÀO% mU‘Cj <‰¹”ý*<8BEÇ ªy©XX!5û©4̈†Õ²c:Hþܤ‘Ûa.ËÚ„9GE¯«ºßS;à­ ÕDG£M'bÍÿ3qñ[{z3&z Œ "^Þ K°œŠ åv,ð‚OÛ«[@>ÿ몒jA\Á+ðß×J-XðŸØêOòÃÂ?tÎ’?À_U~\)Þ^ Àòï/º¼ð¨Ô® ø_üíaþŸAþG%ƒb.Nô·ö¡ ¼†{š»ˆB SÓ·gðíu~€ÿµ}ÙºÞLý^ó¿Èÿ`µ©pm2T—Ô‡}uW×^í4 ìÆ2«¾Ì¤ã4l ,€®WÓ ZšAK2ëIÙa¢8ÍT— |ÈB [i3â`¢NfÔIº(ùŠÀMÎ÷ùmô°•µG¬E!sQÐXŒ»=>M‰WUêQ–¸Å.yÈ)+rIŽ;Û¹$Å.ÑgÛ{ëQkóqkS‰¥¡4¯Æb[c‰«¹Ô×J µÑ¢"f¼lç%ÄÜ8üV²ÒŠS*˸çíÔÔv|v3qc3zc+„æK¯ÚÇöÝÓÄ”éëhóÍ2øƒîZÆ·‰ +–ëóÚ‹Àÿyåß—Õ_Ééëpà³’4ðòÿGÅ_3GÇ«ÿ:WÿÉ·ô_–ôñN±G‘ðO\ä~Éìý„Þuâuï[Çü#/¢üÿ 9;ÆY¨þðNÛù-ÕÄŽu€¼iCÃ|ÈDàŸ^ÓNÞÕLøO?Ú5ÎÀøùÿã$|Üÿ‡`×=µÀ†ujÍp}UwŒàëüž;Þù{Á›w}sËΩeûä²ùú]Ó8º5ÌŽ&HƒïþÓ1ù}{Ç1£œBçÃ8ÂŽp0ÿG¢ìá£ÏMê²ëм–¼húOwÕ/¬ü<ÿqþ/ð½ãË¿¸hà?HÉN[õkKóܪÃ&6²ÏNu[©. óߦ"™¥¨óð—×¾*©zø/)YZyPQuPSs°¯«y¤¯;¨¯Y×xÈÐü„³ä8T¸6eÚç¬-uêK<&²ßJ Ú)13`w„ üssѲî(ÔôÅ Æ A=ÿÑÚ.ÁdDh?ÿóðsü‡ü²·óÿô üô´ ì'ÚOì¹uÙÚ‚ÈßCløïEË ‚ÿM]ÉÆÎx=(©O‡R¡Æd°)æk9ë¼öZ·©Ünÿ-:¾IÃ3¨¹z5 £–iÒÒÍ:šÝ@s©èkk¢A…(`f¬¬ ²s".6ð?â¤F\¥1WIÌEŠ9Qu²Ð£RÄD HAPj|ŸœŽ†ÀH(îv2È%&9E¥ÎÖUTdk-¶4›KÍds#ÕTO5ÖQÌõù‘³®& |¯…ÁÄŒ¸˜ó¢2NHÁŒÉÊzÚEŸÓwbßlDÇQ¦MÜÜŽÞÜô¡ ˶ÜÓùïÚ®ƒlë¿kÖë+ºK˜ÿx0é²ùÚ¬ê»IÉç³²/nÊ¿øŠ;ùøÿ%¹óÓÒÌ'¤î¯Ù' ÿOÔ|ø-ãäW¥ýcì“郗Ø#—y#À4/´$uâˆçÍ£¾Áô=ü–ÒyÒ£âõöKw×¶LÓ[hsþì/Z™ÝÒOB pW7 °i˜ÙÐN‚ ùüZn<0ÏmëÇ!ÿïÚfãÀÿ‡E`‚=°}Õx}Í#°ƒ<ö ܸ‘ƒ•4±ñ€§CÐå*ïõVõûkƒ(üCòßÿ³ío§%ï¤Úßí %ÛßIˆ±Þ‹@ØÀµŸ ‹Ï†% ·‚R¸ÀiŸø”øß2ìh´5ôXêºL5‚ÿI9êÐÿ}Mdo#©Ð À+¿æüžŸb]EÀ%á1à¿¢ ñ_Q“‡?–¦µT/¦ þËé6%Ó¡bº4Là¿ÏÀö94óB,°³ðâÖ²øü;B ?(ë('ø/ÄðßÏÿ„ò?¿Àb¶ççøOß ÿ?á?èßòŸ3AýŸá§àüGc¢D… k<W µü/WÍ/í§ü'Ž}=·?ÿÛöñ_-ü…¡ö·vñ ^Íëˆÿv´(é¶’]ŠÓHqhIVE‰A|\ÓtDQwXZ}ø’U½¬¨:ð×ÕÒ×Bä¯;h¨ÙÐpHßôбåu³è(ÞùcS;u$—žì6’<*˜KÐE‹úXqÌÿ(¯+ÆïŽ zãBP\ØÍó¿+ˆfäü{ËÁùUæÿÓ Ïø¬Êþhí@²åÿ®öS½²“ýr€ÿ™!Å›ÃÊ7Gäg†eH#ÊSCr‚ÿH`#]MC¹úÿ{;ªúÒ…¶šíÓ ðïDgŠ{ÓÍ=͈ÿ1¤L¤±ƒ€"Ðó6…œ ~[½Ç\á2V8ôB‹VhÖŒª2“YË5ëX=Ón`8ŒL—‘å22Ü&¦¹T[ ¯•é³±NØÁ* Œ†`ƒÈĪzЊNd ¡F*À? ¥ûÕ ŸŠ·ô¸%t§˜êl£¸Dèéh%Û[H 4ç°™‚&_ÕQ µTc ÕPM™kh–Zº½Žêl¤zš¨ðíÑ£bZD"·sˆ­AœT[Åi¹aÂ÷ÖràüFhz+6¿¿¹îŸ¾m[5_…ÀF’Ú®¯üø¯ÇÖ¬h*©gnAwi\ò%æÿœäãÏY=ˆÿÅÉÏK3Àÿ/h½ßrO]­:pžuø‰1ü¿Ì½Ä>Ïþ-÷æ‘ðéãþwŠCÃ/>xÃ÷uiú©w¡êc4«GqmM?±å@Ã9‘sÛæˆýÀÿuÃô–qÞ÷ó-›§7u×7 ãëÆñ-û4Dwtu²wÂÿ-õ¥UÓø¦m’ÿ#϶cfÓ9s/|k=´°à˜˜3ͪ/,(/ÜÕ^EâPwÀGNïz€ÿKOâw'V&—vÜz˜[ºŸ[Øîš[ËNLú¾J©ö6¾MF·HK€ÿÙ*£ä$š¦BñÉ™è,˜ŠêP£Ã•n9±‚…ùOXÒ¿ò½hÐÅXø%=-l ‡Ñmbôˆ‘¹Oì°…UÀ~ÂÄM˜ØID~:nãeíe].a§¢ÏW5¨ Õ ‡ÿ'ãÍg­o&ÛÎvˆßÉHÎ¥‘ÞËH߃—ŽvÐû©ö÷’bй„{ÁÛqÑ;Q1!ÉÛ‘ö·#RÐÙ ,àŒ¿,à„»ó]%f®Íé*3jaJQ–p  ·ÒC-´@…°Š·pæ«ö)ÿü˩ǂ£2áQ࿼ò¸¬ªH°þQþo#iŃ”nU0ì*¦CÍrkYóþ‡­ü°U² ðßÏ ÿ3üO™ø §ý4.¿ø”Ǩ øøhcDôÀSþÌ'îy/ðŸ€?ãßð?oQÞpŒ;eFâ¬Ñ8 J€~J€¤æp´ý¿¼¿vT=o ¼[÷ñ¿Ðüþ#wà¡ µU¿45þÞ%}ɧ}#`.òÛJ=ÖR—5¨²M]b’×¶QÖ¿&«yE^},@Qó HYý²¶öeCÝ+û„Œ ‡Œ¯šÑÊïÞÎ’]Sð+q™È+Ùï üg&‚œT˜×+ø÷$òðAµ@Wñ?Gð[Þ ´Ÿÿ9«ËÉîFûÿ=Áò¾hÕ`¼~0Õ8’薜éWœR½5¢z;/ø¦€úB¨#$9Õ×6Úîj,Àë©ð'†ˆ¶ö¦[zR­]‰æ\¼¥3Öœ¶d­Á–d 5îk »š¶F¯©Šà…][aÖMjŒÊ‹ŽgÓ±íz–ÓÀx ,…î¶0°¼6–ßÎÚX!++leóc„à=DœÅ ˜™A3ŸÈFW'hƒhS²M\jo#9Dd{ÙÖD¶6R@ÆFš¡~C5ÉXE1U’‘Ê)æJš¥šj­¡€¸šh¾ô3(¦‡%‚ ˆ/1)-.fõ‰[¾2§<ŸÝñ]] ÍlFgïx¯/.ÜÖ_^·\_5]¼e»c¹ºáœ\·ß5]…ŸÜ°OÝóÜXwÍÿ'¤_ÝP}sSýÍŒøÃ©Ù·>9ÿ‚”ýœÜ üÿ†3:Q÷×ñê¿^`Ÿù¼¨çPPOF7ˆíñ5áÏŠÀ>°JåÏ}#ògíÜœ³¬Û-èõ–÷û+ƒÕÿ‘HÃÉhÓ©âÿ[)ðÿݬ‘?#}?+{ž„>èƒÞO‰ÞK¶`#8—€§øÝXû»1)¸À;QÙ~ À%À½qÀÚÐkªíÒVfU´²,%å@m£GÛaÂüÈ<Ä™/̼ç_[~\%<ªä•óÈ„ÇååEþËk h$©šJ5"²®j”ÓÌJħ–éÒý„ÿÿ µ,dã‡íå ü÷ø_Öáàgì|€ÿ>þó1ÿ;Œ|´þ‹Âaç1C‰ þzJâ†JÌ?jøçù¶a*\õ^à?>5†Ç1 ê !ì?Œ±1ÿO&9'c°€^W)”)Å aÑÿòÖÿÊUù<^~†ÿù›ÿeÏ µÿamù£[ñ²ßp4`Eùßcø—Ú¥Vm‰Yq\/>¢nzM^ûjûµ¯ªê«ê^Q×¾á˜oj|ÅT¿÷Òôª±­üBøø£}šbþTÄÚîò2¢À?ãåâ|€ÿ~þƒ`þw†~žÿ¨dg‚€ÿÝ.NÎÇþ÷†*pøN7vŠ!üüßPžR¿3¢}÷„ëQõ™5˜® PG¨¿ø%@ºöþ#G@ΈÝÚ›i…ðßlÁðvFEÙˆ(wÄ ¯(âj 9Zý–:¯©Æ©¯rè*mšJ³¹€E[å€M üç€8tà¿[OÈÂ*Èce£ÀÊ‚œ&#YXhn°™FðŸ0²ü¦_K÷ihˆjŠ%NY‘³ý˜]tÄ.:æh+±·”Z‰{%,uS=ÝTK1ÕöK,åÅA¡bkE©­‚b­¢ÚëhÎ4lÊÓÆ"¶ðmì0ÔrLJéU¼-µ]3¾uÇ3¶ê_ O,»/ßÒŸ_Õ_Þ0Ý6œŸ×^þCþ¿k¹†­×ñ­ÄÀÿ%ÓÕiÅ7 šï–tç§Ú>øœ>ûZñ¿´ã JîKzßw¼“ÓOÔ|ùøÿ-¹ÿ2st\øæyÎàŒžÈ铯û^¶ÿß~Ýýyiì­ë*cø¿Òò-ðË<·ãFÀn¶ì3[¦éÓܦikU=¾¦ÇüÇUðÛ0±kC˸ÿøoÿÁ àsg$_Oˆ¿¼¥½´n™€üÏ9»¨½´â˜\õÏÝtOݰ\½i[Ñ£Õá +²9ð¸Mø/ºævË»¡àÿýØÊýäòÎÿÏØ{·¹¥é™wÆÓã陾·»o᪎  ‚9瀜sÎ$˜sPN¤r$ER¢Ä Šb’(‰bP¾Ý=ãñØ.»\.ÛëÝïºv«6Œ{Ç3Þïü€ ÝÛ3®z믟¤*ç}¿ïœÿ;-ˆÿ¿éÝ|ÙõpÃ?}ž? oàjéª&’º)Ußœ¥n$#þ ÉZ4J—‚&¿ñ¨À£„„çÿÃoýr¥dU’ØÇ²K£ð÷ÈÉq! PAn%Ë£¢z”4€¿OÍðk˜„XqùÔøs¢ä׿ù[ œˆ1Èê0åvYòzlüK‡½å#¾ŠDø£ð߯Cäµ5Gη"kia# ¼ ‘PÓÙ`ãXÀ?ï´-w¢%€¦¢GYÚ)+jçµ 8­ÍìP#PG ÔÑ=PTSœPT þ›ÊHÆÿѶŸ<"üs’ ÿüyÀÿ‚tþÀ~9⿸:SÜ%mBü׈è: øO|ïèVe,ÿkÿÝz.¡(ÿºÜ@ þ-FnÄÀm3æµ âü«¹QþÇç?G“?ó?JþXøòcá ?Ê€¿½‰n?ˆ­#ÿ>þùYƒÖHu¤…s$œsØÏ°S;ôi­ÒoüÍ¿pVÿÔZò÷ôÄ#ÀñæOüØ_Ì]îªÊª¯ÿ…UôS•ìÔe8 Y˜ÿZyºZœ¦ä%Kj+öñJ¿‰Ã_\¾OZ¾_Rþ­¢b0_]µOàÿ­¦z¿¦æ€ªöÿèÈ9Ò €?J¹ZŠ Â¿™î±3ü.V‹7·ÕÏéá?˜ÿÿýÜ8ÿÛ~?ÿQøOàŸ¯ …ÿÖºÑþþÇûE'%§‡egF¥X`'†¥Ç‡$PœâÇùß×Z–Øÿû¾Hi[%Ý©é W·ß'$O]«»®ÅY²×ûÍõCðß¡-·©K- dziX€FZ¨• pµ¶½Y€IÊ‚¢IÅÔ`¬òßüG#¸©N5™x(› %¼SFCÍ Ù)&ÛE$« ÕÜ”dl8h¬;d¨=d¨I5Ve Å²R2Ä{eI–²8S]DÒ䧪¹‡ÔœƒÚœƒ:N²>?C—OÒeéJ³õ•4c5ÃXË0Õ1­õlà¿§ænL÷ñ2ƒµÌžÒ¦ ]›ºéç–…m×ýMãuÑÄSÑôž|vG1µ.¹½£]xm\~®¼÷Tr\±Ñ¸²£ü_æOBþß”Lÿ/QÛÆþiÁ«éÁ«™­“Œþ;Ü£+U— Ǧé‡o’zoeöܦ@þŸbô^¥vŒe†ÿ]_©Ng8~§¿’îü;³ûqñ¥íº™]ÁÂ[í$ðwÄ^S`ø ŃwšWÚu€?TÛ¢Eà?ë·Äð/¥ ÿ_(ïï(ˆÝ›ÐÎíòýÚkÀÿõ"Ôæ<¬?•ß{¦_Ú²¯nZnhž¨vÕhïè3é-Ù,±À½¾g\ycÝþÿÆ¿ýÛÐÎoÂÏ_7Þ¶?~Ñöp30;k:7Xâ×Ö±5Í4ECª²)E×”©i¢`þ$T¨ÝˆG±hf š ÀwŠ©˜ÿvË/Ê(íqÈÇØ÷*( ¨̇I\ð™‰Ã? eÅÄÆŠÃ2-ÿÜ8ÿ;-œn‡ÿ!OðÔ_‡ÿÉ–FÿÀÿñ6>‚{ó¹6¤ $ìç[ê±^Ð4n ø!ÿ¡þšk‡ÕÀÿ^UY—¬øß.ÈðrÂÌ`=Ý_›í«ÉöT!þÛ+)ÈÊ2Á4Ä´Ÿò¿J€ð_R“…ù¯|Ì›ŠeW³A˜ÿDþGüê¹qaø·š€üyí¦ü8ÿ[µÜè€27zþ‹'¸«‰‡"ÿm¨Õóð“Ãß-à ò†¹ƒ~N\CÎp€3Ì掄9£-¹‡[¹pí÷1Ú™íúC!å·Á/­µ?5–ÿ‘¡ätŸhò>A+¹Ÿh8Hêâ†û‰.ÿ¤Õªiú¥E¼Ï¥NsëH.}–M•i”gè%(üËꈪ÷ÿ!ðƒ$û¥߀d•¨ÕR% ‡ÿúƒªÆ$ ?U'L׋24Š,ŠlÐP­úìxøº™þ1ÿ;ƒy„ ºHþüNo^»;·ÍÅŽ8YíNV›ƒ‰], ÍŒ×™ 6¨X 9Žœ.'·Ç]Øï/׎´5éàíæŸèìŸ@™•ò³£Š±ÃÊ“#òS£ Ðéaù‰ÉÑ^áhWóP{Ã@[MoKyW°¤;TÚ.ëm©ìk­êo­%zþU„ª‰æO-¿Å]…;?!GuÐV°VûÌ•c¥K_îÐTØTeÀ“ J€b,0½´@'É×J¸:1G/É1ÈØfYÈ¢faÙT ]Ítj.-Ó£eÀ𨡧C¨óþ»ätà¿ML± Ð.qô¸(^ó­CSD¢gIàgdòCò)òÓeÜT'Ež›*ÏMWpÓTùð:z8…-S-54C= êSO àéÎætO33R×pMÙ¹n8ÿÚzû¥áîºtbU>õXwgY~í‰èÌ®frO?÷L=÷LygK=½­A3H KÕ÷×ø³+/o5\Ýl¼x#§ûhº÷")x.ºIë½—{t£æêbÙ…+ÔÁë”ÁiêÐ ¥ÿ6gè·ÿx¦ûTºcä+uÛ¯„GSM§’-W2}7)‘ÛŒÞõŠñçüÉ]Ž·æ•׿‡/LËè@Ãê÷ºõ_k6^ên+Þ*¼ÜÝk¾óçʇ¿V¼Sn¼Ð®Ì7^›­>¿­œýÞŠ&ZÛ_H_K—÷T+Oõ«ÆåGºÅ'êùÍýGªùu(ôßš×^¼1ßÿÞ¾ú—ă`zøWáùWÞ{ÛÁ9×½¡Ç^_®k éɺF´ÿ\ÝDA A¦NHÂÓMª6K·‹iv ,£‚\òlBT$"áƒ0öãäÇ÷n5Ù£¡xµT/Ö0 èhA=ÖØXÀ|B숩ÝÀê0²;M9]fv•Ógçö9 ÜECÞ’aÙh°âX¨êx¸údkí©HÝé¶úñöÆsMç;›Ï·ó°.¶ñ>°€„rà\K3¹@7äšÏx›O¹;êŽZ«GMCúÒ!Má€"¯WÊé‘ät ™mÇiฌ¹c^]‘Â&n‹91ç·š ZõÑgBªèä7Üüñ ÙËÕÄÀ'¯9hp<Ç«ºhŸg=Å^Gqà{T¼ïÿcøÃ_q6ç543 Žˆ ø?ÌýÐrüC\ ÿ‘HÞѶ|¸†rz|Ù=ÖôvCX€Wø¹³ñSkõŸ˜c.Òæ#/Pç"økóþ@[ð‡²š?Ó6n•ì'øŸåÔFù¯AøO’Öíþ‹*Ñ<ÿÊòªï@Šê}@{:&ü#濺)9Ê óߨͶhÍm£ûœLà?À?ÈýùωòŸ€?šÿüÿ; ·ØÙÀÿ^OÑ@ "ÿ‚÷ü’bþŸ‘ƒœUŽVÎŒ(NJõ‰wóF:›ÛkûZ+Ðøh‚ÿ=á Po¸é…TêTCøoõT‡Õ-®÷ð÷[ª¼¦*·¡"‘ÿfy1”¸„¥—åë%yzI.ðß$Åüg›UL,(HùïÖ0ш$5IICE½"Û‹Z»Qþ£¬($[ùdôÄPøo¨Íþ£E+ÞOÇþc PdÈóÒþ`X`` ¨/TŒü=bSE…>“ÎZª«–b¯'Ù2]ôPmÙh½zF<°e˜xi\xª¸ýH>½©½³*Ÿ|"¾ðL>±§¿¿­{°)},ÚRÝ~ª½³©Ÿ_“Ï-5L,•^Üj¼ñ¬ùêõÜž¡ëxºï|Fè2¹ís`Ž{lµòÒBéùŒÑDþO䞢ø ö©Œ|Î;’¤?qÈt%30Aé˜Îî[+;·#˜Ù‘Íá]¦ÿ·&Ôÿy§]ûµfm[¹¸-Eûü_òï¾h¾ókÙÒ÷ò%<ØábiWxª€WDð½yJ•wÊE¨YîÔŒßo¸°«†`ÿà­}ý¥ae[pï{åÚKÍÚÝòCÍÜŠòî¦jnC4³!Ÿ]N?S ÐkãøÅo‰A@ÿÜ¿ùW¡ÕÞºþÛÖÍ­ÐÚã©p£ê)}c&ð†B@çj…Yzš……&¢³­Bðß!ß)…XÃ…_1¸< ÿÒ‘TÔ¸|J$Lþè}Œü~=-ÿþ# @S¾õ,L~øÿm†œ6cþœnKN¯-øßï*ôûJGå?äÿX[¶€ Í:ø à?v€GXï\¨9Ê_ãÇüWô˹Àÿn1ó¿µ Y@œÿ®jJœÿæRÒïã?¿0wþÿþ«Å4­”†,@I‡oœEÍ H„ŒÿQ š¸Ø€ÿÿc~‹Ž˜¡Ž}“spóÇËGüwüG}~‚çpµÄ€ÉßVK ˆþ³€øì‰ÃjŠÁüOó4œ‡á¬½4É s<”©Ã˜Ü¢Ùï—}…€£ág¶šŸš*~2”ýD_úGº’¢+ù H_úÇÊúÏô¼¯¬²qþ[•$ƒ,]#JV4”Ôîþ‹«öI+÷ɪö˪á±45¢ªÞRRÕˆóÂ?Ú>¤$ëÕ“Žf7ÒãÍŸ‡…ù‡?¨#äËëðpcüGý$ë#þ·é™(ü9ðGˆÿ¾âÁ`åHKÝh{#æÿñ^!²€A (ÿÊñ#êsG5ㇵgGÔ§‡”ïK€ŽºþH%A~ÿîPyw°²+€vû·ù«Þïù±W"øÛ«0ü!ücþ;uevM™M]jU–b 0)б…yAÊ5H9 à¿IŠZ@h ˜濃à?ÀߥøGÃ?Îÿ˜ÿ¼‘/ÆÿLb ÙXOtë«HºÊ ࿆Ø&Tœ‰«eA:ð— iN²47~Tä§€Yh˳ô•SÙ\e©Î°ÖdNôyöÖ²Âe¥gêíKŠsÏuwŸÊî<ßÚRÍ>QÞ}"º÷{ºå]ýú†ðÞ:ú™òî#ÅÌšjfEz{±îÚBé¥' “Ïø7np»‡ÓÌciÞ‹™-W(퓌þ»œ#K%ãw ÏN²ÿ§(ƒ“äÞiöÀ¼“dïÑTkßçÒö_5>¤9™d¹Bj™$wOfõ¯•]ÚÝÛß{£_kyŒdzôš˜íö½íäy&š…7@øßmœy'^ø­bòÿ6ÿÀ«yæ­tqW8»%¼ó½aõ¥öÁKéÔSéÄTù±UÁµª{éã~úÚ´öLp ¦ZÚÔ,Þ—ÏÜÝzªš$šƒ[nšXçß~®œGü·¯ÿ9:mç/ƒOþYèÑoÃÏÞ¶ï,º'…G=×МŽf»5Q ø3´<ºJ6ˆþ$³0Ë"¢áŸü'’?ïØñª>uLDw±â xÏ èXøÈlLþAˆ;Ü!§Íĉ 5ü͘ü¹þœùƒžÂa_ñþ‡*þ'Zjù-€à?Ò¥v~¢àB„OXï|åÿ³þ¦ÓÞ†“îºãöê#–Šcé¾xP™ü‡ðùßΧGšéqþûj¨x óßD|¤Ñæ‚ÿbn æ???EP”Æ+Am^e:¯2•WÆ«Kþ IY)ÌÆü×H²u2:ä“úGøï6qý¦<†"ÿþþQò×ü9ѱÿ²€?ÿøÉ5¼ÈkA>k Ù^å¨!ÿü'zGïK¼•t( T‡lÏrùJäÿB`ƒAj¿7«Û™ÞaIn5©¿ñ˾ðˆéâýÜÙü™£éS{Ãg¶úO­u?3׃>Ó5i~k“t£Q34(X/Mþ+›ÿAÒš}Ššƒ y5jï«ë‚´µHï]€èüÇùf›ˆIÀ€?„‹‘æ43ÝV¦ÏÉ ¸Ùa‚[ÛBüì·ûóÚ}ùmÞ¼6O”üx(À?bcµj·°>ä?J/mVv§#·Ï_2ªBüokŠñ_ü?1 Æü?5üWDùDÕœVTà`¸³·€pòþwú‘€ümþòˆ·ðoqW…œ¨2Fþ €´ù£-ò_UbQƒÌŠ"“¼Ë(Ëûþÿ±ÿí˜ÿª(ü½¦W…€_E÷@ìëÎŽó߯ƒðŸin$¡ ÿ5ÀÿŒ(ÿË3ÔÄhtì¸ÔðûN²8' ®p/ÏKk@ï,CçP›*(¦J’±* J S ´]KÏ­§‚Õ_#ºÆïY‘_"žÙÜz*¹ýD:»ÁŸz$¼½£YÞQ¯­5ß]mš}*,¿³¦˜^“Þš«¾4_r~³áÖ3áÄDaßH¦ñ<)pÜz>«õ ¥sŠ5|/ïä ÷äMö‘kÔÁ rÿDVÏ$«ïz^ïá çÀ~]×/Å=ßާN§Ø.g´ü'³×J/¿Ü}.š{­Ûxg~òβõÖ´ùJ»úV³üJµük€7üŸWO¼ Z@¿U-ó÷DwwšgÞHæá~³qò~eO}O0¹Î¿q§zì‘hj[6‹ö…z·ÞØ6ž‹fám;ò»Oõ dSó¼k›²ÛϤwžJ§×šo­6ÎÀÿªž·–ï;îÙù‹ÀÖ¯ƒOÞµ>{ºA×lª27¡…]m3EÛL…ä¯å15|ºV@3ˆ²2Úí#"ÛDÙü™N)7|ázøZz‚ø@~ nüµtõ ÎÓ6ÒÃF&¨ÅÄÂäo7ç‚â7ÿN §Ëš äáðüòÿG¥£¡²DþüÏFbü4œoo]loº”`—Û?*øÈˆÿcFàÿ)OýIgí1[Õasù°¡dPWôcüÏ&øOÆüw×D—€!ü›ˆ±ˆÿùDÿ?/–ÿ‰æÏ{þüø/nÎ’ ) q¶FB‡üv_«™ÿÿÍùÿÑüi1@øò ü#ø«sßÃ_ʎÿ»ž…3zr¾ ³P_ƒ6²Ú«É˜ÿ‰Ûþ1ü‘øÿІ[ò1ÿA¸ôQþ?Ü–$ÆÐH„9¦õ(=R§3­Í’Ô¢ßÒ~çS~P|ã—í‘å–}í”|鲈÷Ù¤ÊÌ»šd–§ÿÕÂ$ÈÿÒº}ÒºýŠúƒª˜41éië€4µû᪪ݯ¬Û¯ª? nNB}IIFY¦AC5ëéþ]–ÇÆò»ØAON‹ÁóÿÍÇx¹9±qplÌ ÿxóIÏŒèÐø± üù?©óÿXÀ~¼_ ÿä`”ÿ À>æÜà Gz¸Dlò¯$&.½ü¼úæ[ :# eþæéÍšðw_¢üßVÌïñï­áÿ‚èÞÁmàÿ¯=Oß96À ¶šo½T/욬*oßç]_n¼¶ÁŸÜ•Îo g7x·7ų;šû/L«ïì[¿qí½sï¼õ?yÙ¾|Ûyd@*ñòŒ¼lƒ¡çgëø4”üyL-Ÿ¥Òb1ˆ;ËŠöíSùeh>‘üi¸Ü‹Ã? c`òã®¶º!z>8ðÇ€U‹‰ÑjfbƒÚLè”gŒ}BpŸÓAÀ¿Ûöþý޼AWðÄ_ü?, 8ª8ÑRu²µút[íÙH-æÿ¹¶F¬‹ZÀð…ÿæs¡æ³þ†ÓÞºS®šŽª£ÖòQSɾp@›?¨âö+8½2vœÿ­MT¢ÿÿÿQóÇŸÒþãÉïwþ˾üª €?¿&ó_Ô”ç¿JŠÂ?ðŸÈÿt̼·€8ÿA!søßåþá_ÂFÛ>cÉ?þØš½šjGÇÖPl5ÙöXøò¿Šü£ðíüù øˆÿ„ þ£æK>ÀóÿhG!•ì‘vÖ`+½/Díñeu¸ÒÛí)kR‹))l<2 ’‚úC~íŸf¿Gµß¥LFb ðߦÊ0ÉR ’•à¢i¿¼á¸€ªé ]Û„¤oJÆÒ5&“ô ‡°¨ë .€ð@ÙxPÃOÑ‹Ðc_fÙ¤£Y "ü³½vvÀCÌØÏm äcEø·ºsA-.N‹# …~ßüŸþé-Δÿ]ðÿp§àH—,àh/²ÌÿÓÃr@ýÙ50ü°–à¿aü°^99 ‡·ÿûÛëcü¯"†<”£!ˆüe!'RÐQð÷Yʼæ2‚üå€}ÜöÇð·©‹íÊ"›¢Ð¦@äÇ2ÉócâZ8ˆü2vŒül,þ,€¿[Étü÷©„ÿ~Ý%€„âRð04¸1ÓÒeªÍŠ[^À. ŠY|qâ‚"¾GÒ|4A]Q’®,Í0£µuy¦º’@K‘‰%³TÑÃåãõ®Eþi ácáÔšàÚlÕµùúk+ü›+Í7ª.ݯ¸Ùø±èΆljUxe¢`ønÉ©'ü[[òéëE=Ɇ1’<+|1»ý2µkŠ=r¯àÔÝâ±[¹Ç/gõÜÌêAçÂäß,J³t~-ïýJ:|@r6Ó|ò ùbJàZzÛ mp½ôÂvó­-þÔžbá•îákÃ:Àÿ¥j X½-™ÙäO?ãMo7M?­¾±Q|ñiÅµÝæ°ƒ' “ëÕWÖ*.>k¸ù´qb­æÊ®mXÚnœ_®šz®\y&YÜäϼ1=|ëÙøÞ³¶­¼½+žùÞ°ºk\YUÜ}(œ^ª»¾Ñtë¥xù•lé©dÊ-Íü óÒ;Çcàÿ[×ÞŽçáFxlÌ ñ™ Ë"dëùHûz!MÇg ø Øzøo–P,R²]FqÉén9Ë£`{U¬ø¯Ã? eáÕÛxo'ÞáÇäÇ ë³[ ´ÖØDÜ: µIáû•9'by/tÄ3¡Nþ €?àŸÈ€?èH¨ø<\ ü?ÓZCð¿t®½óÿ‡€øOüð¿üomøÇþ§Ýµÿc¶Š#–2ÄCÁ€.ø? Ìþw‰Fÿ©¿ÿJâá/øÐJ Ðäaaš ¾í¿‚üø j3þ‚† €¿„ÿžÿÿuòl½‚ü7k?\ö%ð?hB ‘BIJ/ÿüþ¨í/ʉ·ýþþò¶*JœÿDÛ7Șÿ‰Û~âÏüÆvþG•hCÀÿ–üÁ˜Ê …¹#­ùïÃg!èpGÁHWîp'g°Ýaö¶Ð{ÔNoV»›ÔæÊE¤V{F‹-=l͘RýÆ¿!˧ÏôêHn]ðߪLÇüתù‡T¼ƒÞ!-?I Hç¥ø©F’¡9.€-@Ûp*u!"ücø[”ÿV#“ÿ9>GÁÿ\à?š´Lj°'7èÊ!sB6V†±±A@øH"ü ôVm6\ ÃˆÎìtåýÿêáÖàÿh[¤z°(€ð§‡”˜ÿçþˆÿþÿµ§ðžáîf‚ÿ5"üW`ø™¿,`/ñÛJ}Ö€¿ÇTê6–¸ e.})`äЖ‚þø øZ割Èò-1øÊYå‰ðÏ!àÏø{T,‚“?ã?V@ÉÀ%€K›Iœ hkÊ2×g‚khWa#@.€-@«ˆø” "š¨Éð="ŽÌN Ðg¨J2UeYªŠ uEª¦2MSA Ž Ž(²•ew—5œ« ÌÔ[\^“^›ªº0Uqv©éü:ÿÊbåøBéùÕºÉ þô*ïærÓ…›yó'Ÿ‰'Ÿ)n]-ìN2ŸÉð%1ÿg8‡çKÇæËǯç9ŸÙu“Ò;EïŸäô_âvö¦#_‰;¿”%Yï7\&ù¯e´Ü¦÷­Ÿ~ÞtýoÒþK-z’wO}ÿ…rñµæÁ®ìîcÞÔ£ÆIùÿþ; S{¼éÁ øÅ“¦‰gM“/ijp}Xsù‰pê‘àÖfÝÌ|ŵ=ÝÊ–bnK2ýƲôÊóà¥{iK9óB1÷kãú¶~m]¾¸&º÷°ñÖcÞô^óÃ7ŠåçŠ;›²[Ï43»Æ{ßÛWß96_»6;.Ì8¬G´ì°4Õ¯ 9¥,«ˆ‰N¡±czS/Ì1Â+:ðííDÛ{²=J&ÀŸà|Ç~þ!+22°°Äþøàù#üh$vÜ"HþmÖ(ù;m9]ÄIs ^u~\y Awþ·pÄ_|8Xz$ü/;.?®8ÕRyºµ ,4©o«CŠ4\ ,»À¥6¤‹‘FÐ…Öÿ–ÆñPýYý_ÝiOÍIWÕqGÅQ[ÙaKÉacѰ.Pƒàÿ?ÌÿtÜÿ!øŠV4ü­ñ?þ‚jÀñŸ—)å"ªRBÅXâüaþ'–^#ô¾ 0æ…  ‚ ?¯ Ht X ø¶ôx/šYd!d­&vûí«³0ÿ¡ 0×Qði/‰cßâÂFÈÿáÖ¶€¡¨¸ á–¼÷ü'àù?ÔÉ%Ä ´³ûZÝ¡ìÎ¥ÓŸÝᣂڽÙmj«‹²g¬¤™0’=úLžœÈ½8Y'JÒ “õÂ,£ÉDÈÈO6ð’ô͇tMµÿ‘4‚JAÃK†ðo’gYUhˆœ5ÖüñÚ9 üç¶ø¹­põr1üýŽŸÆ[XÑãà­øÓËBÙÃ_Oû}üj©ÇüGÐ%íï“Æø¯Ú#øêÇGtp‚ÿû¤ÃݼŽÌþ[¼åaOYÀY ðò{-Å^s©ÇTâ2;u%üK0ùê‡ %@=ÎÿñY@ŒÿVÇ቉-¢J€?Nþ~ +¨abŒ ¨`ät¿Œæ•P=bŠ[Dv (N>™8%•hXP hÊÓT¥iÊØyxv JPD ü‡¯ðŸP†¢„…€ª,]Y–‚Tž.¯ É+Rµ5†òtO1§»”ºÊ=ÉO7Œ]+]h*»ù j|±dl½~âQóÔzÓåÚó7rú«Nm«¦vt·¯uì7eNføÏ’Ã)mÀÿûçç*Î]¢\Èê¾E˜fö]eveµt%ëÂ_ Û~Å?|@ ü?¶O{¸–ž¡÷,Ûj¼¶Å›Ø‘Þ~­]xc\ÚS/¼PÍ¿Ñ.ƒ <—Ï=åϼ’οàßÙkšù^6ÿZr÷…ôî3áôãæ p׊ù]ñ¼~±)™Yo¸z·âìŽaa[uw[9ýÊ<·ãœÛ²Ý[—ÞØSν֭í6«<äÏ,7ÞXk¾ù¼a.ÊùÄSõô¶~þ­uõuá…ëÂC§ãŠ%ï˜9¥Ï˜Ú¦%TYnY²U’i“ *X€AÈŠóßÍÿÙD燙ØóO„ÈÄÄÂü²A>Ë«Ÿü០8ÿ¡ˆæ€Ð°þÝŽ\ÀkÀ•Èÿ£áò¡(ÿ£ÐRu–°Ð¹ÖÚó‘ºó‘,‚ùï…ž7ŒëÎújÎx«O¹«O8+ÙËYJ˜ G ùÃ:î †3¤È”sú¥ì£‹à¤íÿ ÖÅ×ÉÀk9‰àûOðöX”&þ§ ˆ~ÿþÂ:a# $"ø¯SÞóõÿéFÕÇ%æ¿Ç Š[€ß èòÐ,P%×+ËÊÎ-Bðwñ™N­Ò61ÐêmŸY€e®¦Xj¨è´—j¸Ï@ªÌÄØO´€D¡ýBò$RˆuD~ ÿÑHÁh{áh{~\Àÿá®<àÿ`Gî@;§¿-§/Âîiav‡„X]!fgÑîcD<´Vw6¨ÍÁ Yi>ddÜÿ1ËSÒd°ìQTfq È"Ja ˆ»2B­ =̨¤ tt›­üBø÷Þÿ. ÿ<¸‚À 0ü½6–Ï XX  )lf¹…3&æGüGO;8xò[ñ(Ò4ÜÖ<Ò΀* [t¬Wr¢_vjPuzH òƒÆFuþð ü)ØðòwK5ÞðÓBÌö 8‹ƒŽRHþs‘ÛTè29õ…N}‘CKX\ òcøÿhò·ÁU–o•q-Ò\‹4ào…ðOðà²+˜ Dþcø#Ôk˜!- ·ô£’ *èà>ivÔ„T—ˆêP‰Ó@( K#ÕTO&v„’b‹Âé¸ ÀüÏNG}Ô|v:ACV."+J–¥¢´ËÒÅ%‡ä•)ò²$TP”¬ÌpIÝ`©éBSÏ…êþ‹%ýK‚Këüs%g—+.lÔ][o¸°}PuñNÁñ…ÊSÏ•·žk¦Ïsº»YOgúO‘|ãÔV(nsG—«/Ì–ž½Ê¾Dé½IëdôÞÈé>Ë õ¤€ÿÝßHÒ%Ùî׎¥Ú'h‘[ÙÝ«¥ãOëooH›; Î”ç ÈØ}ÁZÚÿImiÌN俽*ÓR–ð7§âþ?šÿP˜"-N£ŸéˆÿéQmÀÂ?^öI…©(K&F ’R4òl-À•ùoÑ2ÿØâüwë9 Ÿ‘ òê¸n Ç«æz•¹·$•#ŒÂßÞD³óÚÝÄ~~ª© T„c %á÷,´§Ž(ðëø¨¯ôþä—øüç&æP[!V´hÍ GòA#mïù?Ü4Ò ù?°#o  êoËí‹pº[Ø]a\{[sz[r{œ®`N»ñÐA­ üwêÿ-Š4°¨L²4£4Õ(N1IR±, QšY˜¯@z°BZ~’N®‘fRlêl€¿]ψ­ü"þûœ ›‹ó?"¿‡å¼ä¶¢ðä73‰¡÷Là«™,ÀÄÆýà‹Žà¿>»ÝH'ò?·Ç[„&¿…j[‘ ü—'ú'”ØûqüW€G u5÷µÕCøÇŸ7$ÿb¿£àÉàï4äüº‡®Ð©)@ð×9Ô…@~»¢„Qo!7¶(ü¹1¡äoSÄùÏIJÉ„Ð] †‹XDCZâi?Á¢R1°JºOží•e{¤T¼Œ-€8 ‹ #,@_CÒUG÷à*@V”ÂGfcøc5—$ K’¤…I¨@( ‰‹3E%©¢’}ŠòCRpÒTYyЦ‚d*ax ª6¹/ zÇ+zî5]ZãÍÜ/»¶Ryu½öêZÍ¥µš+«ÕW—+.-×^~"›ØTݼ”ß5n;žæþŸ§µÿ§rG0ÿ/2.Ózod÷ܤu_fuœ`ø;S4Á¯ø_ Fh.мGé0^…üϼ_0¶ÝtçIýôŽðî+å}Hé{š9(öÔ÷ŸËç÷4Т€j JHþo ¯Õ` ³Ø‹&7Å·àÍ`oL÷Œž¨ï=QL,‰¯<ÒÞÛT̽Ô=Ü1.ÝWNLðÎܬ]ã_zg^Ü3Ýß6,l*§W…—×E—ž 'v¥sÏ6%K¥Ÿ+Wwu·^ºZ_u•?éùb±óO'[??çûö”kÿaÛ·ƒ†¯BšT¯"Õ)ʰ`1-ðß!§ÿ]Ä}8ÿ'6€ÿ¡ÿÑW€àÄF€*â…ÓèÞÿ{ÅÈŽó+þˆÿN.染 ü‡üçÿ‘pÉÑ–Ò!¤(ÿÃïu®µf¼¥:n1ì×àëx¨zÀ©ÀIiš°,MPž&¬ÌÖdüqø5eJøYb~À?Ê)9Ê%U§ÊNÌÿ‰%ߥCW/Tú< €…Qp\2ŽKÌøã#5!¢CV·6ÑðÄE‚ó}U–¡:zo„k-Õ@œçiøoŽñ?ÑÄn/Š Uùãü', ,  ?¨7Âõ´æW¸þçÿ;ü¬67½ÕIo±3‚–ì8ÿíš °«2\Y–—Uš‚«³0Ù$H2 “pS¤@…CºY™iÓ dìz(¶òËÁáñß“W¸aø{l,ð,·™å5£È> â þü·˜X­&BÔˆ†Ž³±¡èööøË èƒ4´6ÇJ€‘náá^éÑ~ù±ÅñA5¸6‚øõxŸ|´G4ÐÑØÓZ‹;?h°¿³Äo+ôY‹âð·ë¸vm¾S“ïP#Eá¯Îçb ?§ýDÙû2Ž]žk—s±m2:šC%§€ÿ1 G~PŸ?f˜ÿØ!53¬aÁàWÐÀðаGB p ³ ȶ¡ñ,hìÚª uy†²4CQ’®(!É‹3À ˆÆäj,ÙÇ/Ú!/]”Gâ¦ Š ŠöÉJIŠ’D¥É‚ŠCÒÚIiŠ*ÖÑ$œ²œoî™l8»P?u¿üÖjíÄFãµÍ¦«+ϯV^]©¼¹Rwã‰|æ™~êJiw_šþXªëLVà"£ã2½sš;ú°æâ\Źˬ¡‹ÔnÈÿ·sop»Ñ¼‘ƒ àëW¼“$Ûé,Ç჆Éöóᙜѹü³OfÖknm î½R.í)0ü_é–w”‹ï¬ÞšÖßh—_+ß*î¯YzQ_3ñþ‘M¢{¡[xex€Ž­7/?3,néïlç¶mk[šµ=õúsãÃÕ­›Í'§jÿç¾·.¾µ>Ü5=ØÒ,nÊn£'ähSè®zé™|é‰tñ©rrËÐû6"ú͑̽ò1øGóÝŸM¶~q-ðõy÷·§­ûúÌ)mÚ¿4Å)Êtˆ²m†]Šò¿MN…_7úCѧÄ?B:V@ÏrBælvà ÷ð"ú^Xؘü±ß(ùV>æg û‰"ø,à‡ü?,þŸ •ªÀþüã:Gh<\:®>ª Tœõ#ö–üO9KO؋ۊŽZ Ž˜óGÜQ}î°6gHƒø%@"ÿÛˆþÿGü·Vd˜ÊÒŒ¥©ÚÒtÔÉ,IE%jIš¤,]Tž.¬HV¥ k2Dõ™¸í#æeJd†¿\BAü—SÈ4w+a#ÀËÉ_› á£Èø;$l§ˆ…Fvð¶fº¥=Þej¤ eÕPªÉÀdøG°ƒÚè‘8êõcc¾`üø ø¨  ãYø?ÒQŒ…, £p¨½có~„1ù‡Úó@mù þH^_ þÿ9˜ÿH!Ng€ò¿‹‘È·!3Êu:X@ÜâÇKY/°U@ÔbBä§!øËIV5qv¼žæ0ÐAéVvtñ—à"ücüÏ÷Äùï21ÝF†×ˆ-€è‚-z¤ÿ© V}6X@‹…_ŠvW~—·¤7PÙªé×÷·4 Fš:xCü‘nñ‘>æ?®@€}б^¼‡ÿÕþÑ©^î‽Èg-ð˜ ܦ| ‡&סÎÙU\»*ϡ̳+¸6y.‚¼$×*ͱHØHDŸ'.xŸ1 ØJ2¿U† @ˆ(9ðÃþrªW‘í#,»?¬cǹ´hÙXภˆ¹@ÔˆB€† ÂÞO‡Ð×d‚ Æ~)v’´8=ÚDΤ€‹¿j*<ÀÏOä’xy©¼‚C<ø±à€¨ ø/(;ÔX~ ¹:IXZCöºœ!¾¯Â|¾zðnÃ¥Úéµú[ëM×6š.ÿ—Ë.-—__i¸õTuï¹åΕò®Ž$äÿ3” ðÿ*³{šèÿ,TŸ»Á½”Ý3ÉèŸÍþÎv…ÈBß"þË0¦8¥ÙN¤¸Î¤Ð’Aé8›“»â»/¨çWuÿ…fé¥~ù{ç“·tž×žlþ­jéÊ¥íÜSõìºôXÀž~á•iø¿cYÞ2/mÛæwÝ«¯|ÏöŒ›;êàÿ²~j^uiŽj•7þV¿ðÒ°ò\³òLµòL¾ Àß’Oï¨'^™'wt×6¤Ç×]Ÿðßœ.üg÷â³#Ÿ>ül±ëwZ¿¸éßwÅqèˆ=©Ïp¨M‘¤£qý:ð?núPñ¡í^ˆÿlbDâ?NØ”ƒ ÿQ%‰µ÷±Z-Œ¸"V&zj†èùÄÛ>?€¯+D´€òù8TŒò t2XJ¨ü?¬8ªÄ#°ƒûPå¹PÅx°’àù_Ù)Oé)gñIG Àÿ˜µàĘðÑq€ÿƒjÖˆ2wHž3ðcü÷Õ’]Õ™ŽÊLÌsy:XÞϦþ—¦JËR%å©¢òTAeª :]XŸ.N€?êü £÷È8ü+eµ" ^ý{ùïÔ²] ¿ƒ–ç¤9v1Ë&bÚLŸŽÒnÌÆ±_[—¥«ÍÔÕõÕdbèn&\áÈe>±ƒ"ÿDáz!‘ÿq wƒ¢€P,4Ø–o!òCò‡ÿDøw¶²A]‘\ÿqþwx™ÿÁÂ6ºßBõ³\z’CKÂü·«IXÈ”éñãeAViZ¢à{#ÜK¡X YTYþ­ÿF†ÃĈñŸõÿñÕïäú¹PÄ-êø‹ ¨˜è :’…ÿ°–jÑ“[ ”°™ŽÖˆÜwQ—¯¼'PÕªë ×U@²€á.Ñh,àh¿òHŸ„ Šx¬àoƒðßªŠøJ[<%!W„¯%øï4p]º\»šcSå )sm ÔÆ!ÈÏy} Û,f!Iß‹8f”a•2­(ç3¡/>Æ>–E–e•“Av1éKFÁ£]|Jª_•ÔÐñØ ÿ .:°¿ˆ×ˆMAôø¾Pl¸ °ñÈø|plPèªIP¨ÊÐ ¯¼” Oä???™Wô 0¿9/ÔXÔXø]sÁ~ô|%7•—Wv ¾|}ù~Uš´:MY‘¤Ëg{ jŽUº§ŽÍÕ_Xn¼¶Òty¥áüråØƒÒ «olî<ÓÎ?1N_(iïL–ŸÌðŽe‡ÿ×Ù½3y‡ËÇæ*Çnæ¾Á¸Åì›`tÓBCY¶ÐIä€8òMóÀ!Å8Ý{<Ãu4ÙsŽÜzÑ5_2ò¸ù̃ª#›‚K/•³/”‹oôëÀÿ-ÅÜkãò+ËúžnyK6·-¾ûZµôVÿL ¹·¥½÷X1³!›þ¿0-¿²­n[—Ÿ[—w½‹/+{¾G{¦U°=óÒšezÙxm^pöaý¹ò…P(W··•‹ÏU ²‘Mmû†Ú¶¡1>5«_†jþå æ¿¿žò¯/û—cß½=þíî‘Ï|¶ÜõŽ–ïnùöqï;j9Ы9‘¥¤d·”ÿ$Àr[€¢%‘ÿÿØZÌ"öç‚0ü…ò¿5j± ÿÌøß†Ȉ­ùv9¹]’ à"þEüGKÀ¢#Áâ2Ðq)(n§ƒ¥gBeXgÃåãá ÐX¨ül°l(;ã+9í-=å)9íø°ü!ü5å6p1ÿQø×°G”9Qþ‹è?Êÿxþþƒ4åiê²TeY ÑŠL“V¤‰*S„U)ÂÚ4±æ+j&¡¶OŒü2i‡࿆à?Àß ¡ÿÿ §† ªdájÝ_p!Ã*`šytK3ÍÜ„àØÐÔ’µÕY ,}5UWCóWF¢@øQþ?ä?^í.é*AÐYJ´ìØâðóÿ+åw,ª€® »ÃÏj÷0þÓBŽl¿•ì5áüŸü ƒ 5èq`*ÃN¸€UŠº@ûà 3!«’øCø·é²Qø7ámÿHèÉ/¢ùŸ¨€+óßíà8ml‡%É„\º[O÷ê>âáÇ€ŽÒÒB:*!JPKé²@AcvØÌh ÃSÚí¯ì Öö†ê è‹4‚  u õ#ÝRHû„Ä` x} ½¹·µàO„ÿÿAg!þó üü ìA]Ô·a#¶Ë€ù,“ˆXѼzºSL3Iè&Í$¦‚¬b žÕŒ‡úZ@²,,À¾Yš‰ïmRžåŽgü&ò?ãHföb…uhi qƒhtk¨Œ‘hÄrª€8ÿáó‰º@å$EY&ð­ À/Lá$ óÑiùÉõ… ¿k(ø–——$ÈMä“êó6–ìo®<ÔPzˆ_‘"©I—«­¤º*òz+xcÖ[u½÷ygW——.>¨:¿Rua½áúùç¦ù ýÔé‚ÖŽåéLÿyFä »{’;x;ÿÈ\ÉéÙ²Ó×sG®³ú§Xý7é§²¼$Kp¿Ì¢ó€h E5ÎôÌòNvŸ%‡or#s•‘;eîÞ¯«&ò¼¯µ“/Tó»Ê/5+;êÅ=íü3ÕÒ3Å<:ÏE2÷Nûð8˜F?¿kºÿL{oSy{׸øÒüðc}×¾²ëXÝó/í…€ÿ«/,h˜ÛŽéîºyrÙpcIpq©òÂŽpîµzm©¹ñTufS3úÈ"ø«Í<+ÿ_ÏóÿúBÍ__Íýßn§ýOS¿üw¿ú——¾þgc_ÿúä织?}<ð‹¥Ž/fƒ_\ô~}Æþ͈a—*-$ÍòH©À"Ь ^úw+Ùï[@ïû?`là«Á¿ÍʉïáÇ÷­f6z¶™ «Åòþ[Ù˜ÿñž?æWbòwçãk"ÿG‘ Áâðóÿt‚âüÇð?(=(>ã/:åAøŸrü ŽÛ ŽYó™ÿ!ÿƒàüüV°‡ä¬~ ñŸ—ÝÞœi¤|Ôÿ±W¡ÀBX€¶Y€ª°ì˜ÿ¨çÓÎMä?ÿÿ®‹¸F +Ìê²:üLà?À¿Õ™ üØ(>3J°— ¸!»tHàNM¦3æ`vyšM–Jî3д„ìjð ²C—í$:?(Ûñ¶¤øâo| n¼.®Ç™ë²ç`øÛÍl›‰e7ÒíF¦ÃÀt陸<ß§¡5ÙA-…™P&ð߯§øMÙ!+³Õž×æ*îô–w«À èi©°Àhç. †r€^×Aðž®Pm¬óSá?à(ˆóß©åØÕl«ÍŒE“c¥ “„ 2‹™ƒ€†ól¦Æ¥d¡/" :ÔI˜‰u¡Ñî„HVI&È,ÍYd$PüÆ;ÈOwüQþ#2;ÑþļáýÒ0Zf‚ Ä-À%B3"ˆF*p ‚ |\U™Êò,($„ MtE©À1'»97­.ÿ›ê’/jŠ¿¨Ïû®™›‚zAù Éõ%IMåɼòƒüòƒ¢ªC YÕASeF¨„1\\y©Ò4ÛØ¿Ø#5hA%@ÄYÔá)ë   ;€Îêê×}h"(@ðJok¨§¥Áß_…öüxŠC®Bÿ~{¾ßœO< ÍÿQþKÿ!Û3pò×ñ¨ú& 1à—¬mÈix$-?S/ ùáj¤ƒLÂt³(d§ƒL$\7ù­òLá¤xßü‰ób?X$CÔ&ºa‰_ F+vHÍ (Xq pˆ(hL\Œÿ¸h…rU]™ +Ë”€6Ñ¡@ÊäðrÒk UQú³ªâ_Öq÷ñrRùœŒºÜ”Æ¢ôº¢”Æâ$^Ù>Aùw¢ŠƒPz‹ª¾¶Ô U¦÷1ŽæÕž+´OW^ª¿ô°îÒSáõmùÍ-ÝÔ–möæúaV¸å öÉw‰Ýq5§ç:»w‚=8[xânùàÿ5fß,wä:½}4ÙÜ•¢q}Ù9$þŸ [.åµ1Û“g³½7‹ÝûèúO~âúé/ŒŸ|y«À»§šÞQ,íiV·s˜ÿÏ‹O%wÿo5˯µ÷ÿoì+o«/­Ë¨0,½¶®¾ón¾öÛþùR÷g“¡¯®x¾>iÞׯIjûÇùÏÂäçÿ8ÿqòÇØÇS}Ð`+/ Ç$í9 \àù?ÊÿnWÞüwô8òA¸þ†ù_|$X|ÌW‚É…ùïü€0üÏK€ÿ§|…§ ôäÿ‘Äò?ÿ<œÿãýÔ’³¤Œå ž ü‡ø¶€üîd®HSU¦)*Ód5éÒštImš¤!CÚLÀ_[ð¥" Â?ðÃ_§¦ébü7ª¨ÑU`Õ{ °«ÐoGJC%¼ˆFÀ?[ßDøëêQþ>ˆüUé ô˜d% Ã_Sކhi˳âü7ÔÑ€êÀ±/ȃ?~%ºRs=±|Œßöžÿý‡ûÊG{Ë¢ê.w„†:ŠÛ Ú @ƒíq¡Wú#ù}m ¼Þµ}"¹Ým\ÜÿþCþoóFù±ÓZ¬Ô°…°A~s–לé1‘À ¡ShÑ\8‚ÿ.É %€ É¡Îp@i ¥8t»–]ð%z>X˜ÿ.;Ëí`{œhý/à¶·ý]Dòø›õt4,BK·B;H•T›ŠìPQ\ª,bÎy–OGyµä¸<ºl¯m‡ZÙ-޼ˆ§°ÝWÜæ/k”w+»ÂÕÝ-5¸€+˜B\Ä©.•y«¯,ì) ºŠüþíù+×mæ8l‡Mæ·*ÑWÕ,¥™Å¨±‘„>ÍèÔEm}–®1UÝ”ŒÆŸ6§hy©:’QÝ%%L2QXÅÉq9d §<Ý¥Èp+IU¦WòiÈxÌ žýÇ>žâ‹'ú.Àˆ ^ÁM!´SHAΈˆ‰¶ð²ŒÍ™úÆLm}†²&$¯JÀ+’Eå©Â²~IRsÑÁ¦‚ÔüÉOÕæÕ"t ¶è`]ñú’ƒM¥šË Ê“DUÉ‚Ú$EÃ3ï[?ï›®¦ƒG˜—›D³Í‘áØ#ÑÌSùÜ–fñ¹ùÞšöú`¶£-Ms*#|#Mø¼Êé›(.9r»txº°çváÀ­ÜK´ŽÃÉæÎýBÿ—uÎÏë[éŽQgÙÁTÏHšýZ~ÇIªRýÉ/LÿôÌüºO~6|°æ‰èÌkÍ—Ê{Ûâ»/ä‹/¤vÄË;²ùçŠ;Ûêé—Æ;O7¶ÔSo¬ /M÷žk¦_Zïý¹í/‚Þ¸Wxò·õ»ý&°·ãÜ|ë²ç\|b¸¹mž¼ßtr¦lðAóЖ6òÚ#ýOgJÿþ>õ¿o|ñ÷k_üÝÆ—÷ø‹ÿöèW¿ÛøüoÖ>ÿ—õßÿÕÿµðËÿrçÏþ—[?ýwWÿä_œûÓw§?Ý9üËõÞOç#_Mú~5nûrX¿¯]™ê•f¡%` Û*e;d,§íû¡¹OÄA„Ñ翈Š-÷ÀïÚ̵Zòà²p‚æ$+ ?&ÙbgÃîü-̨ 7ø!úvtL*§­ÿ溜ùèÈTL~"ÿ÷»‹ÜEÀ<ÿ-þÀq!”ÿOùËNÊÏÑú/ûQÏg,Ubç礻ð¸3‡ÐI[!æ?†?¡¼amî :gX•3 göŠÝBZ'?»ƒGÅüÇ#@ ø“ìUV"ÿ+Ò!xu• š €¿¸:à/m$ð'áÝ>2HþDÛ óŸÈÿ4­Š®W1@f ˤFà“¸£‡q+ѹ`Ã$C'Å@™oÑÑø&¨ë›éꪪž¢ª¡È+3AŠª,¸JË‘dYÑ«I eIU©®ÉÒÔ’áŠV  ¨!£6QuîaøG]甆꫑ 5Ùq¨üÈFzJ‡»ßó?.¼ó' ÿÖ<à?À¿§57μþ‹ùßîcû?³ÛôV[6X@ÐJÁBµ€%Ëk‚B>NAs¡‰®.U"¿:ê‚hHOµ¨ñž&|ÛðàEløá~¸æËqm‚ÿ “ŽnÖÐ,šYmUQ­ ŠU™eW’ÿ àÿ{ìk¢?ºµÔ¨˜™ðu;óZÝ­Þl¡*l˜öõAÁš¨BU‰ð¹‹ÎB€¿×–ç¶äºL9 øoW31ÿ!°aþ›…ÙF>à,ÕÔ¥kêRÕµ)êº$M}²ª1 ¤mJÖ5'ã‰~2=: ð&[DI€}›$Å.MuÈÒû˜üqøä'ûµBñ³<¢™?~~ÇGüÇïÁüG ŠZ€K‚J›€bâešH˜ÿê:’ª6CµsU*²€ÿyŇš “ ’ €ÿ‡ê 0ÿþ„öƒÿy凸IÂÊ$Aí~YÝ>cãw>Þ¾nAòå¼°ä&O² iYSœ|¦ÞÒÍ=7->T\ï#™;ÒÔc™¡›yÓÅÃ…}7ò»¦ŠîUœœ/‡Z`¾|äJŽm0¹ªã`±ç‹"ÛÏ+ÂTCéæ“ÙÞ#$×™lïl]{à—tý~jú§¬ÿƒOìò™ú“Ïo—ú^ªoîÉg7›§v$sÛ¢¥-Áü–xöyqGwåf©·7©úb¾nU6ø\wyW?»g\yç|öíïýk¿.ïz¼ ¬¼ ¯ï8ç^¸î¿v­ ¥aÝâŠàòLEÇÏö}PÿŸÏK7[ô»ûûÿvùÓÿ¾þåß?úøÿwõÿ! øâw«_üÍÃ/þŸû¿ü?ï}öŸgþô?NüÙ¿¾ô³ßŽÿüå±ÏŸô¶ØþÕTà‹sö¯F ßu¨R}²LÌ‹„Eì>üG£_Õ9^ Uy1þ«À¹1¡í@ \ `ÉÁüÇŠó?QØðÃ_Äþϼ¸ºíy=ŽBl}®Â~Wa‚DwÅáóœÿ(ÿ Ôó÷#k¾Åþ'\À ÿã¶üÖ€"ÿGt\Ìÿ~%«OÎî–Dùߎ†"þ‡©1þgÙª2Aæ*’ Â?ÑxÁü—×fHþuéòæ,%ÿ8ÿãäÇðW)£ðש5 ठcþcü¡Òø$4€¿^HÓòÐÁ=Ú&À_QKQV“e$ÿŒù_••ÈÜÄùWŠ£ëÕÑoÒUQ°°Äul°*nX؆ºŠAƒEàñBȯDþ ÈëiÏòcaþw‰þOtÿ ø%X@ØŽ²!#À+`Ÿ‘JXÙí‘ @Ò‘ÝzŠÛHuiNÍe¦#!ì¿_óEváßëâ€>„.†¿µ}üÚxQF5*)f”È·:3ÃË¥¡D-ÀH÷›Ù'äàÁ¼%_)®ðé-è—`e»¿ )êáßâ+ {‹ƒîÂxø÷ÄøïÔ²±ØLÜ4G®ÿuM™ÿ£ðÇü×4¢9þ üˆñ¸\Ò𗥸åi^e0?šù5™>m–_Gè)ëÃYîè™ÐÂùÅo Jbkšå'–ƒña‘6Q¶™OŽæÿF’¦!CSŸ €KqEÚDWšL”)`?àÿãÿ!Ae’¨îkiý·ºúý.Þ¡6aÒ°$õ”,ý‚ŒqUT~[¦_Ñ <1_ÝuÌ-I/u%ëzÓµ—ém“ÜÉ‚¡[E½Ó%=³å£ c³Egï Þ«rÎ57ߪçöd0ÿl¿ç˲–ýŠÿŸ±÷€Ž³ºöößõ.KîEeFÒô"iFÕr•ÕËôÞ{ŸÑŒºd¹WªéÅ€é`°1ƒÁô’r“››| é•›JrC àoŸsf^Mî÷ÿ¯õ¬Y¯&6 px~{ïsÞs7yoÇnÙ‘¼µeÔD9r l9LE¹r™V*w¢‚ûüðÞW÷¡;ñØÿŠúñ×t]1ßñ@Ë[¼ÎYTè_QyTºù‰¡øŽS_ñ½ü~øÝ¯G_ÿjìÂWbÏ|)~á½É _Ky3øèëÞÇßõ¿øUÿ•+¦çžî;òx¿óÍÐøÏoíýÃ)þŸXù·gK?y¾üó‹UàÿÏ/#>½\ý)4—V}úÒ꟯úèLÅŸ.ûÍce–¬¾+¸ò¨kü™þ÷£Í¯ª>}!‰€AŠ"À˜>÷;ŽÆ}­Y Árò:À9ÈöE(Ü’ 4í¼/4²Gí ūƾ/µ“°àC,ú»H ì.E@WvOlhÿ“- $Ð (±õ–øÂͱDÆÿ¤øù÷v⟠ÿÉð‡ö?ÈIײ¨ižWIè߉ü£‚P¿ Ð…\Àµ‹cëçÒþ7 pôƒMú!ŽaŒ¯çë”é­þz­ð:ù›Miùv˲ÿF|¨ADƒ®dÕIAþv•ĪYF… óˆÈ4,ùëvñ´½\ÕöFͶF¿zkƒf @BAß ÿY5‘  °õ ­»`~²d`é…v ½R ð‹ôß¿óؾG÷n'Ùƒºâ„}sÝ{gÑ,>¡øß;‹Xšë„ )Ùÿ)#þ'[€fƒÐˆ &bH ¿0áAÄœü¸KDBÐ ¤± "aÄ%ЏùÃ)­}b~-ÿh¨ÈŒ}üÑäÇÑBÌo7‹m&´;×aØ |‚çÒó<®ÏÀ¥G@ÈÄÿa»(â£÷¼2ˆ€¸¿-êN…7Ó-|t¤s†éĶ©øV" Ùœ!ÿÇ|ÄÿAg+ø?˜ÙàÅ-©ÿm#MÖÁä|D-`ª³ £#R£éƒ’ÜJ6hß«@øTu + ©B:6È?nFÎ_Ö¾]0áI§±|œ{¶ç[²Xþžþ_ÉîФ¥5ajŽ$ä¾`4sV c\[Øÿ†]Ù-0ÖÃÙÌÆñÿ¦Œÿ7ƒ[7Žn«Éòÿ*ð¿ux“w´6>¾q^½þ°iÝ GÍ=ÎÖö'œªsÎØ%Ï¡G†gg6)ˆÜÊŸÚrìñ®£µï¬çðSÛ>³ãÐSÛg/Œû/ÛF^õK_ò×]•¨-õV6Nm=γßÑê»Cn½o³&X¾ÆDQ¶ÊÎDX)ÊÏ0Sù‡XÛÏ í¿¢?õÒØ©×T¼ª½ï¢êð‰…-·Ì]‘\à ¯Íw—íæÈоêºókñ³ï†Î¼>óåØs_ ½ö^â•/EϽzò-ÿco¹Ÿü’÷ôö;Ï*/Øv}{ë¯î¯ùåC¹¿{Œúë™Âÿy®ò“+ÿõÒŠ«—«>¿\uõÕêÏ^[õùåUŸ½¼ú“«þ~¾ü/gJÿTéÏ.ý¯ûV¼¢ê£å/,­<=]}_dåqϺEKm\ÛPñˆÿÑëÀj:Z'$oõé7¢æÖ˜µÀAÐB…öæë€ ˆ9$ Wó„;-rXÐu@Þ ÏÐ6ãm'ÌyóÞHˆ€%ÙS àX| ‰”Ë@/ÜG‹Dþ7E7gü¿üOäwþt\ë$ÿù^Së’A¶ê]˼ºeF!™ƒü“Ãâþ ƒøÚÏ.t~­^õqPÐÏ5 ñŒÃ\ãÏ€nøèU™±¿VHÌO ýOGÈŸLˆÿFÁnÚu¨ø'òG75ðÁüHþƒBmO³“£ÞѤÜõzïl| ü'?6©¶sp#í@ét; ;éàÓ¡A؉v_˜wB#ÀGŸ;–!€raWÚÿÇö=°óÈþ„Ãû¶Ú»íàž­¯÷?‰<öï$ßìúŸÌ‚v§ÿ-ó±–ù°ÿ  +$оP0îB»kp °ìÿˆ½,Lüõ?Dø?’-ÿºç…@û?lKãkó‡Üò€³ÕãhuZ¥HþF‰ENgù6=Ï®ç¡CDu<Ò3÷œÒòOc†liÿ£·†=­1Ÿ<»€T¸k2ÒAg1?h õ¶ÿÃn9Dy0l“AoŽöšýZ‰G%‘Ú‡›¬C¬,ù×â3±k\£užq–WÁö)|J–_Åö«ëP›&¬gE 'nã&ì<`ÂÁO:)—0ƒ˜¤ÈÏûÐæ'Ë‚äEsk øZ Xo@n%[Ñõ?øZÝN¶·ÀØVÖè–ú‘žºÁîš®MDþØÿÉðhÛ¦áíàÿ¿²·êÝÐzÓÈרFßø†„zÝnó¨uOø7ݬ8,zÔ×õ”süŽ]É »Gïk?7pâ™7?ØqðT×Çw,œ ½l׿Üü¥Iî•Dù !Æ…@Ù•ɺªÔFáaNÿ Yÿí=»Y›<Å w>2¿3—²1Ò`ÏɵQåÇyC/(¼iyä²î¶'z§ö²zly%žÊ|{9婦‚kŠ"ë˃«Ë'Ùµ7tö<®òœ5-½ì½÷Ø™·‚/mâò»‘gßžz;|ç%ûžçáóFí%ÏÖw¦ß<\ý·P?=Iýî êÃ'óÿòlå?ž/ûôb%øÿêk+®^Ï•W_]…zKUÿx¡ü£s¥>SòËÇKø@ù·î¨øÒ %/\yn±úTrå-u{m5ºú Š íЍÿUÄÿè  ¾™2´DL2ˆ¹ÂÚLVÿã6iCÖƒ€¨]J 7š‘6<,¿AvÍÆ!9)à»:H .À×….Ïšà:Àÿíô.È?¾í¦ØVàÆèà¦pÈÿ† ]üwÿsuÒ‹¿ ÿƒøðŸeÿkeØÿÍØÿâø(: øØ4b~gm`ƒ Ÿkä[ 2å›Fùt×РFòGèD1¿ÑÀ7dñ—Yÿ•šÓ–Ž‰Ý l©U-1+EÆq$ýfP¨ëç«{9ªMÊíÅÖF¢}(–”[9Äÿ:È'R}–öõø|ƒŽÕ½`éfCûÌO þ?°´eÿâ–} =4{ç7#fIý†?¨æÏTþi²ü¿iÿÏ…$ ‚ÌË]~/8[þA —øÿZù‹ÂqÔ'ø¥`~"ÿx¨•@ÿ`þp@ö·½r¿[æuÊ@þ.k+d1üX b‹^bÖ‰Íz¾Upm:®]Ï%-DøJýÒ /mÄÿ’ˆC þº[ ¢^´$’¡NœÝSÑ͘-Àdl3ŒtM„; hþù·Gñü‡øÌ±Ë‘ÿ-èˆ6ˆ€€NêU œã|»_=ÔüäøSÛH}´Ö9Rë­ñŒ×¡‚_É‚šŸ6?Ôü!]=!b`ÇÌ섵1açnÒÉK¹ø“nÁ”GLºEI"À%¡É®ö‘ð3Å^ú H’x¿PŠ^)˜Z ¤ôkEpŽÈ1Æ'# óÇØ×˜šíìñméÆ@Æ>}ÝP埑ÿÈŽšÑµHþ»XÊMšÁ úáuÖÑõņ fSÒX7oٸϹúæÐê»c«OFÖ?Þo’íkç/ %wÉÃO,=±ká­©'‡“çõîKÞþ·'%ïÌ®½c\N2.Å©³^ê´½ô­•·ÈE7·±n”¯ÙÓ”?¹žŠUåx (ùßòg0­ ¦¥@ÕMå#;’·ËTjž*r•–8Êò‚kJ+rýkKüëò|ë(ÿF*°‘ÜTg7î=99k=|Îzà¡ñÈÝ}ú{ïé~X-:ãl¼^ûÆLù{ ¾~„úî ê§÷S¿z˜úãé¢Î}|¡ì³WV`ÿWÒ𯗫>~±ü£çKÿx®ô×Opªì{÷”~í–â+‡V¼¸§ê‰éª;ë8×OêkCªtq›JäS¥o~'/Ãÿ¯ô¶‘¾5`…Ì„–}œåÐ 2Žfˆz@tݤ(A€™tÉ´ ìl›rµ œ§sÞÛµèí¼6z€£1D:âÛ€Û². 7ŶÝÝzCd p<ÜæŽºèmÿÇ<éÊ?³óû¹ÿ{Œ-‹Ù‚^>§mQ7O*¤É1qù_…ÿÄÿô= ûäo ÿcã¸À¤5HþF,ÚÿfÃ5òÏÞ”ž9ÄRZTb"ý(_;Ä× ò´ý|@½‹«ÜÉEòßÖ„.šÁŒbÿ«¶qÁüêÜL F@³ ͈ ÀóDþºm=N;øÆø4] D€1‹#·>°íÐþ­‡Àü×úÿÀî­t €ü÷Ìuïà “Rù/NÊÉáo»ÁÿñÖÅhÚÿó ÏôDˆøÿCýþؙ⟟ûg†?Q·8â•€üióãe‰0ºç >£‘6 Œå‚Êß×ðÈAþn{KFþÍÄü&­0j¹- @î@-€Y°¼×ÔÄ#Ï!›äp^ëÿ@šDP>jK†ÛS‘ŽÉ(x¾+í&Ðþ'¨øt€ÿ‰ü#NŸŸh„'´´í·’çotŒâ«Æê<ç¯ù»ÇjÉ´'Ûüa}ÔüC]ÄX5±â–äGㄳ)éâLzxS^þ´O€ðŠ€I¯pÒ+N¹%©¬ »¾±ùq¸¥˜L¤ýßþ[Zƒ¦æÌKǨp)øhå€p¤»íD€b;k|[ýØÖº‘­µÃ[jÀù¤ìÏ’-È|W½¢¥î¯W Ö©k´CMcmÊõ¦ nc̸~ιn¿wÕå‰àŠ“Ñ F9:¹·«Ù÷ ª5>0¢}T­zÞ3ör¢çÕ©ÆW¦Ê_Nå\ŒS—Ì‹ÑÜçüŒ3îܧ­èsO­¾··äö-y·o)<$d.±ó“«r|…”'/üo¦(EY˜L3£Ø@UÚr7Yrò¬…î²r{I‰»ªÜRšçªÎ÷­ËCÚ¯¡BµT˜Åô×åú늽u•žÚÊ(¯.Á¯‰ ÖNIW,¶—ÝØWrÇxî#–üsÁ‚ æsyïÈûÖ Ôïfþâ!Ôüù™Â¿?WòÉK埿Zyõµ äðåß_,ûóùÒßž.ùÙce?—*·Mæ´È°ü›‘ö5bƒZ¤W `Ö@ pH @üའ<š´ÿÉ›Âø¼ˆÌü§eC§yû,í&–ìÆþïˆûÓþºä@¶ÿ¡ƒÿÑ:NìQs½*®[шnÃÁ+¼ÎñÚô ¯¢Æ«¬%æhêñ¨§ª}„±ž5ÕÅ-¬„•p4L8Snð?wÚþçÏø3~!¤À”O„·f‰S`ûkÚìÿ 4‰WúHã?áÄÌè*yP‡ß€^8õh…nÈ©ÍK¶a>™¡­iÿ³ÀÿÀØöúÑm(†²ÉÿDþÊ~¶rüÏRÕë†ê £µVÅ:fmȰ:¢_™2¯Z°­=âÝtÜ»æVßÊâëî U=ì–>èh~ØÕv:,?7Ñt~jÕŹŠç“ùÏÇs_™.z!ʸb\Œœ÷æœqA@=e¤×R§Frîíeܱ…qSKÎVÎܺ¢Pi®+²çQFHf¾Q¤cêùÖ"Ê\HÙJr¬e¹ŽÊ<{Ó½šéYKùÖ£Êß¿‰dåúê© '×ßD¹(gCž½Žòr¨x3•”Sû¶SÇú©»ÕÔ)óŒ¿ð¥Dá•™¼÷|ïówP¿y”ùǧŠ?:[òÏÊ?½TñÙåŠôèÊ*ðÿÇ—Àÿ%>_üá3%¿z¢äƒJ¾{WÁ×n){óHñ…¥Ò'gVÝ[ĵqÆPW³ýŠŸ‚ƒÅë2.…œ @Rõøœ(rB,©=èó‚"4¸;ˆY[Ȥ(smtsöý¡Ùýt…6YÒ.O9Ú¦íSö6€Y'Š€O×nßfˆÚNàP°ëp¨û¤Ú óÁüÛx8ì9êß|Ä×}Ô×™†ø@äüð±ÏûÌm ÿ=Føä?«i™RJ øGþÿ£C¾uÚÛÇs£›,ðŦ}ôîUÆÿæa¾yLåºECJG -ÿ´ÿõâëüO¿@ž-Fø"“žÈOÆÅºQ¡zÌÏ%òWöñÇ{¹c;9XþðÉÙÒŒnmÙ‚/Æ€ØÒ4ÞÓHO‡à"€Øžv>|’%c¼^Ì#ÚPk°O£Û‘fÿžÍ`{p>mþ}»{hÿöíÞ²wqëž…-ÀRÆÿ»Ñ@ûdäß¶˜Dþ_LÈ£²…Hë|¥Ý @ýOÞ N/xŤþ:EHø!©üñžO~Ø)Œyüc~)hJ}B,²L<*ƒâË_ô·üý^¹Š‡Üeo³[ZAþÄü•X§jÇ:%Ǩj2©9¨Ðrìz´ Œ®3áÀ" Xø~3¼nŒ†?ŽtåOÀõ3ír§LÌß 5’%Ãr°=–æ<ŠN´7 ÉÌ/#þG`ùG¬2(¤Q3nôB¿Nà×ð|êF²Â‹÷ö°<×®ðâ>ibf6Ôü`þ,ùÃ'+é`¥œìiOÓ”—3ãçüg¹ h.(†ÿOûÅÓ~é”OBz)´ÇOŠiNz›ÁüÚâ&Ç£ýÐj0j¡ý/"-Ž1¾m„K6‚’@·“ (¶×ã;ꮉ€m› ì'@ñ?Ö[—Ž€zÅ`-´ša–~¸Þ<^kS®wªWºÔUÝê°~}ÒX?ga-ÙkºWó—Ý*¼+\ztÕCñ $Ö<™*?=]xvºàüdñùdÑ…DÞ…u1A½ϹÎ{!˜ó‚ñ¼‡:k§N©'U̇©»·Rš ¦×çD*(w1eÉ¡ ÃÀ(Ð3óôùLs!ÓRLYË)û ʹšr¯¡@þž59 MùÁZ¨ü)o=媧œ,ÊYOYŠ,ì|{#åæRA5ÑJ-m¡Ž÷Sw©ó³ž ½œÌg)÷ý£ÌÜÆüé}¹¿{¬ðOÏ”þÏùòO^¬¸z93ÿÿ¿Výéåÿx©ì/Šÿx®ô÷O—ýò‘2ˆ€ïÜQò•‹/(~naÅÃÉÕwF6ñ°,줮!¬nô³=cnR5 ‘O-€P@ cC ²ø´@rjšõ(‚ZŒ~ù9²ˆŒÎÅ|âãd%ø.9<'¬r„­-eELÚÚðÿL&H#A½À>OÇ~o'p²À×uØß}$°9›£þ-À_á°»3›C®.¢}à  ŠÿŽý–ö=–¶Ý&žü¤ý?­’¦‡?#B´ò;( õ?ñ¿ƒ.³Àc0Zþhø#4)Pý¢_ç“­ù‚ä±ê¯OeùëÑoL¿/<&Ò óUƒ\E?fä?º£idbl[hŸ˜?=(ð<²™"`KZ lk")·2)È78xHøÛxø1°ýÞÅÍÑ>ù„OÈøñÿÒ|‘f üß¾8 þo#òG$d qù|ìßøŸ0’ÒóÚÿ$Òþw èâ?BÍO> üëÈÿÈÿ Ÿ»–¿ÕØjÒIõê´ù‘üBƒ’c #@ÓdE]ºGÞeH.)@‚ h…fD´‹³ëÿeÿ{[hùÁV¸øOD;€x¤>3ç‘âÈ|rðÌ–̉·ÿ£âŠø? å#ÿkšÀÿ^5ÌOvu’„ ¡!ddGÌ3|²cÖÆ¨•EˆÙXq;ªüðÿ¤«ü?ãåÌ!ÿóf|ìDÞEöèJÞfBʇHz3þ‡ Àƒÿñæ@YÔŽü²6ÌŸqÙÿ.µüoCS 2¢[ð¿rG= ØY0º­†@Æ>Xþu ÚÿŠþºñÊ¡õP­n¸Æ8ºÉªØèP®w(׺Uëýêš¶.ª«›0ÔΘ×/:Ö,¹W äÝ*º=Rvw¼òÁDùc©Ò§§ žÌ9?•óüd΋)æÅõ 0A]Žå^޾¡^ôSç]ÔY3õ”šùð óîÆMÍÔÞ*µ– VRÎ"Ê”G™  CA®¥¤ÐRʰURö•”s åZGyÖ3|ë üë }sü5ÿÈÿu”£&×QSh¨ËLõùÖ†gS~PÀLÉ™{¶2nfÜ«ÏyÊÿB4ïõÙܯîg~÷Fæî,øõÃ…xªìogËÿùBÅ篬¸új5íÿ½Zõ—Ë?z±ôOÏ•|øLÙ¯/ûùƒ%?¸§ø›·¼}´ðÒ¾²3s+O%×ߪ9æ©Ûm­›†NPSãWÔøõÐøU¿’T6¢gE<ûÔ<j‘G#u«%ø8Á¯¶Õ¯i…@V ÈÂ1t¦z§Œ„B†HV¿€šk[dÀ„‘´È¶Ži{Ûu)°ÏÙ±ßÕ pwzºy7þwòt„_¿ØÕyЉ8àèØoïöÙ:€½–Ž%SÛn£›¿eNÛL&ÿPÿCñOû?<ÀâúŸìùDõ?–¿}€k^+‘Q‰åý¯Ç›ÄÿXþâë" ÛÿxòŒÖô*¡N)ÐŽˆÔCåo¼3ÞÇÛ…*0ÿðÖF`hKÃmþLÀ'‘? üHGyíƒíU[éþ†KÏÓÏô7„Ý‹Ý óÀÒ|מ…ÍÙì]ìÁ°øä¿{nóÞÄuòGe?öÿÂD‘ÿ\´u6,›ËÒS ôZp30”’áOÚÿn@G˜Ÿ,ûf&ÿ(þÉ´'»–h=üñydPü»ì2‡Uf1´˜¡ø×JµJ!¹©G3ÆÿëM$ ÊFH³º‘D¹^3@÷ Xä¬!?}Üеþ'÷Èà;Ť¸IA-ºb„ëHÐþGï&øÛ¢^ÈŸwµ!ÿÛäØÿ-ÄÿPS Èÿם帵ÐË\€_ÏY@Èܶ4F¬ `~ noˆù3òg%Pñ_?ébM{f}Màÿù!(˜ ð?îÄx®7âI¿4C ‰€ osÂ#»%qwsÌ%%;ÃðØšö¿ß$ö„Ùþ·+xÖQ´tUt¤ÃNDnj¯ƒø?-Ìø@ ÔÿÚÁZýPq¸Ýþ‰^|¨CK!Š·j£WµÞ§^ÒnŒj¦ú몽Žê£Þê[‚+ï‰TC<9•ûÌ u~Žº8—i®ðòlΕyê9ê­ê­éÂ7S¹¯Æ©Ëaꢇ:oÎ=­*<ÕŸs×f긔Z¨§’k©À Ê^JYK)C!¥/̵”æXʶ”ûß½Žòn`ú7äø70ü)-¨£üµy®šû†r=›Ò³(#+Ç\@!Š c²ƒÚ·“ºuœzÐL=ãϽ”Ìyg7ã[G)h~vÁï+ùË3eР(®¬¹úúš]©þçåÊ¿¿Tú× ¥:Sþ»'K~ópÉ(üÏ; ¾~sÁÛGJ.í]qv~Õ#©uwG7Üä¯9èÜ4gZŸÒ®›ÐlŒkjcªº¨š•€Oe}DUR5U(÷˜ÛÁÿ ƶ9½lV×:£mùÓÅÿĨ(6,‚â?Ô/ð£;ÓÃ{‡ÈßÖÏ1 Ð{¸Ã|Ó¨mÑQŠL*<:þ‚ÿI åÿå@þOý‘üÉäY«àƒ‚hùƒùG{9‘?h°‡ lfÁg¶ÿ³ÉŽ4Ú’†ŒƒÆ·à«*É€h+´i@øêk$ò×ìàÏÏuÎÍvð°8‹Ø=×µ4߉Tü¤ø'þß3ݽ4Õµ{²s1Õ±€6ü  ¿v§:“í‹ ìÿhÛ\D@Ѓ ZþD5ÿ‹ˆÿc.1€"À%"þÏ.þÑRïµÚ'Ä#r8Ø´ù¼r[îrÊí¶›¥Õdh6éš¡ø×(ÊQ.º¯'ãÿL\ï§‘ï2ñÜf>àÉœ2Mn ¢# ê–8¤¤þÿ#pÍO×ÿ@,ŒN%ŠÚ ø§ýw¥ý³Ë¢¶VðXÃ&qØ B5ããz‚z¼Æ Ml0?‘ÔÖ³7qZçÅ4óO8Ù„i{ÆÝ0ëiœó‚ÿ9 AÞbHÌ™-¿¦h¦IZ’þæ Ÿ"üò:%äÞ j—†,’ E €ÿq ÄþçÿC €Î,Â`ØÕíÔàA¼ð }²—¥Ú… þWö³ÕCl4ÿ'·?²ì£Ž1®KÁu)]ªZ—z#ôh]-…4&u s&ö>{íqφۃÕ'ãÅàÿgg©s^Ù]øÚžÂ7÷ä¾½—zwõ¥=ÔW–r¾²PðÎ ãõ$õ*D€‹:gÌ}j4÷äNÆmíÌýUú·s¥Ÿ^¬üüåê«—W]}}-øÿ³×W~òê hþþbÙ_ÏWüétù‡ÿâ‘â,øî…߸¹äí#e/ï«|n¡ú‰©ÕÄ×Ü]{£wía×Ú}¶õK– Æõsúõsº³ÚMSšš¤¦.¦bC;ào¯o‹\ãÀ‰Ž#“z”Íä·Rép^5ÚVtM:Hè6s½>Ó)`”'Mm¨°uLÙä“VÙ¢¥m·µfÉqÐ ìµÑtÄö ÿtR /Ó¿`µcÉÒ¾dév›;Míó9‘ÿ”¦uRÙœRH' ò•ÄGÄÑ!q(½í3½çX…ÎØçXÆ!iíÌ4Œ¥ýoP‰õØÿ:H¯£Ãð+`Äÿ¨ÂÇ'?d“µæ ò ù   ©ùŠ~îØ®¦‘ˆá¨ì'Úφd„Âp Ã& ØÌ®,ÿ±öràÖ@µ¥‰8_…ŸéQ"`ÿÏδÓÌMu 3]ày2í–'ÿó=í$ÿd;üó 9@üêÿX;øG@;°‘C0j2òGÓfâÿ„[÷`Ü(ø dÏ'øIO~Hñ?o›ˆµÓæ@­iùûdw«Û%s:dv«Ìj–™-F}³N%RóUcéúþ ãM£‚cT4šUì.D€ÃÀ£#À“¹bŒTþDþÁÌB˜?â’ÿ“)Pºø¶ÆÂ }(þ»ˆùhÝMõ#ù_ëøŸD^b“FÌ’º³I2ð°‘—CZqÙßµq°ù9 'wÂÙ„iLºš&MSîF?íÿygÁÏ…ÀÿC/ ÆHH© ºµ-ã)ñ?©ÿ‰ÿ#ŽôÕ9ð²‰CVäÒdûß¡äÿ[F ›æÿë°ü‰ÿÉB½@ÈöšFÝ`“~¸Ñ0ŒÎ¾@§7A¸ UfÇ¥áà£Â뼚š ®&¤¯ÐÕNéë—Ìì#Ž ·y+OF ŸLž›)~i¡èµ}of|åõÞQêëGß8’÷õCyïÊ}oóKs9o%¯©ÔMî£ý…wwQ‹ Ô¸½šrT ÿJ(c øŸa«ÌwT¹×ùÖåù‡k©|u9áúü +ß[Çp×PVeª£Lµ”¥.×Ì*°°óœ†W@ÅeÔÂê†ê>#uÚO½”¤Þ^¢Þ?FýŸ;rù`ñž(ýèLÙ?_¨øìRíÿÏßXEZ€/UþãBåGg*þôtÙož*ûù£Å?>Yü½»ŠÞ¿µäKGË®¨¸¸´âÌüŠ'¦«NM¬º/¶æÎðšu7ºÖ³¯:h^·Ï´n·~Ýœ®fR]W°BcM¾1®gT€ÎŸÐY”8 Ä×£$|*‰W)& · –ƒ" %¤k ëeè6sm+|B $Œí ƒ " en‡€ Hšd³P®›ÚiAà8à“€ÝÞ’ííiPR /»híCÙ?¯oŸÓµMkeÈüê–”ª9©lIŒKãc’؈42$Š|ýé=Ÿ´ü-xÿ Šÿ~ŽaXèG„zp”‹J8„È?ƒ »þ7$b~”zÑå¯婇xdìÅ?*û±ü‡¶7ù÷uÕõw××Èhs=2AÐÍ¢ýO–hÿgGJtqÓudûz²˜ÅL'åDÀâl7±ýÙ3Ý“.þ³ä â¢s!ѱïÀÐAü´ü[ÿ¤WLöœÐþOx%`´Úë“Oâ$U²Ï3#ÿ,ÿ·µ2¿_îñ´¸]-NG‹ÃÞ Å¿ÅÔ þ7èÐðäùcÿs³ýoR6™5M-Ǭm´èšl®ÃÄwšyn«Àçûr_IÒ àµ1ñ?Y ûð ñ?˜eÿ“ú½AìmO¸ÛðÂÙwÈiÿ#L’ˆI˜OCÎm Û8Øü\b~ éâ¤Üèä?åâL{š3nÄœ§qüm̸¤ X‹æÑ§„0·fM‡ÐÍT¨…öÜ+ÅÑŒRþÙÁÿí€ö¿W'rk.µüoG«–.øß8ÈÑõ5hÀí½õtñ=;ë3þgƒùÕ}l@;Ńq¸É8Ü`e[ÇíŠF›²Ñ®jr¨‘ÿÝÚ&¯–åÓÖ†ô#† ÆÓÆ5{,:ÖÞî-{(œz¢ðÂté+‹%oÊùêMÔû'¨ïœ ¾w[þwo-ùîÍ¥ÿq#õþ!æ{K¹_ša¼£.û¨çMŒ§F îÛZxC3µKMÕP¡U gEøäo*É5—æY+òìÕyÎÕ ï:F°†ŠÔ!ÿƒü#µ9‘Ú¼H}n¨žò³(O=å¬-²o*°lȳÔXêò­õy66ÃÑD%ÔTu —º]E=â P 0-@ÞÞ–ó³û ?|¬ô/Ï”|ò<½²rÙÿoTýëÊŠO/¯øä¥ÿx¾âÎT~x¦ü7O•@|ð@É÷ï,úÖ­ÅïÝPüö¡â×ö—^\*;;_vzºòñTÕ©xõýÁª»½•7Û×µ¬:`X¹¤[;§Ù”TÔÅÆÙÁQ.ºÐŸ?lÂgQŽ^sê8µ ( @û…È=ŽÖ”qHhH B: 0È €H™¡€8h6´3Æö£œ@adŽY0˺MX²víágXÄæG5¿1«o›ÑɉüÁü@l¼%:Ö‘‡ÄA‘@èÞ%põòäœÌ>¾¥Ÿoêçû¸zŒnX€Eþ×)„ „F¤U ‰ÿiùL8,Féä6ü ·ÆÝ?³æÛD&?×É´¿«³–DÑ>Éøf §¾sÝ`7a9®ó?Ù2 Œnf‘ (6³›á³AÙ³œÄÿ íNAjB65!›L´à‚Zˆè¢}x€oP.Lm^JuïNv]ç0?a>Þ>uÌFÛá¶Ù€ŒÈªJŸí6ÄLx$ÙþÉ€ü°GL^øÂïyáÝž ÿ,ÿÓòe¤øw»›]Îf‡½Ùnk±š[ÀÿF½T§AÃâ"⣂‡åŸö¿QÕ`R7š4 Ùà¶Š¼v|SÀüŸÙt½ÿÉþO"âr$€†?¶¸1áoKz;€ J W;D@ºô>~zC]Ì"Žâ#©ib!!îà 'ÂÅÐ+]ÚÛæwsY‡˜€çy" ö?Ý€ÿw‡E ÉbD ,à+ÛfÂÍÓ‘fðÿd°9é—$ü×ûŸ\þG¯EØÐ5 !³4`Lûy P¦ þ×÷7jAìYóÿòØÿèÄuìÝà&Ãp­q„…ü?Òhã€ùíš&»¶Á©e»ÐµÑõ~ ½ò¦¯‹릭e ¶Êî•'ü«ˆT>1QôÜtáË‹o(üêñ‚oÞ–óݻ߿ñ£“?º·ô‡w•ý׉œÿ¸ñþAÆ{ Ì·“Ôkê+uZIÜIÝ,£òófë #« \å9Æ"ÊTL™J™æ²KeŽ­šr®¢<ë¨À¦´ÿ£5T¬&/Z—Oü`S~6å«ÏuoʱodÚ7åXjsÌuLK=ÃÖ@yT¬…ZèaÞ0œó€9ïÙ@Î婼w÷|ç&Æ÷äýöá¢?=]ôñs¥ÿz±€®€ü×\}sõço­üüêÏ®¬øì•êÏ^¬þçù8_õ»3å¿}ºôW•þä¢ÿsOÑ÷o/þæ-E(Ž”@ ¼´Tva¾âÙ©Ê'be„Jîñ®>ᨾÁ\}P¿zI·aV]›g…G9þQ¾>ÎÆ íÃÛ°Ã'ØG®10¿äOC§ÈŸÐ4‡5PÿË1(âzy¥ê€„$>©“e3¥—Óâ`Î §S˜·td÷ óÆ`Î6?®üå“jYBÙW4‘±–Ј40$ö ½ý"¿½—gÛ‘¾BÅ܇ÏÛìã#úˆZ;"Ò£R¨U_ïÿå-@×ø_ŠW{…(þM*ø_Ÿ)þ•zìOä?°•E*?ñ?Ý ù§ÏE¬#Àó@W:FÐ\ˆMo ÂYðoüØÿlÚÿ$Àÿhþ¿S ëNÆåÉ(ÔØ-𙊷@Ì¤Úæ§;é ýßÀ÷iùãR1ÑF›?ãÿNÚÿ3áö™ü?ãoEŸf¨ü“n!@ûÉ?ËÿDþô;_àÿdTžL´ÓþˆÿÉ™Ÿ´ÿ)øßfm¶˜š¡ø×kÅð§RðÑð?SÿC ƒüMJ¾IÉÀÿUŠ üoÕsìFžË"ôØÄéûÂ2@.ޤýOæ?ÙþüÑðçzÿǃí‰"hOù:”žö¤»#ãÿæ´ÿÑe4á²ö35có ÀüI7@ïózùÀŒ‡7ëåÏùó>Þœ—›¡iÁ˃˜÷¢F`žeZ€Ý¸þ®óÿL´"à‹þÏDþ7€ý±5Äÿ~¹q8kx\p½ÿ{ë¿èÿkÈò¿¦¿A?¼Î0²Ñ4Zò7r­ã|›ŠëÐrœz–ÓPë6nôé7ôµ=+nhJx‹Îªžª›‚Õ÷ÇW?žZyv¶ôå¥ü7R_½!÷}(øïªø¯ûJþσy?}8÷gpéï*þþ­Ì±‡ñn*çõ óE;õŒ†z°ŸºµqXP:Ï*ÿ;˘†BÊX˜k@@™+¶*&øß½– lD“Ÿh-«¥âµ¹Äÿa#Ü@©›òÖQ®ÊQCYk(Ó&4 ²²)hbj²-ç`oþ=Ú‚§Ü¹/N0ßÚÿÍãhôë‡ þðdÑÿœ-þô…r4ºò_ þ¿úöª«oU]}£- ¿TýÙ…ª?¿X ðßg*ÿtů-ýÅC¥?¹¿ô‡w—|÷Déû·”~å†ò·¯¸²¿êÒBåÙTÉÓ±ÂCkîö¬ºÅVuÌ´z¿a㢦.¥lˆq‚#Èÿô0Ä:ȵ á³ÇñfHË °ñÒ0"p¦SÉß5&€Oð?h?3’úTÍ!u+D±t´fh&4²¤VŽiMa2YÐ2¥o%@š‚Y4,’Í™ÛLw°,¨ùqÙ/K©ZqÙ/ŽI€ðhspXâ{úPåoß)ù›·sÑI8ÿúÁüàP?($þW¢q=TÙþÀ*ôβ«óó?ÿàÿtñÆþ\eW±kyò3¸=¸%]ù÷vÔÐþ_NŒö—Б‰u´ÿI €ýÏìtdF@Yõ?;» ÿkÐkb|¿~—(–‘—jÑq 9Ø5•èœJuͦºç§zgz–f·,NoÞ=Ù ,Mu-$ÛS‹)x蜟 ·8èç/Ä€.`>ڹÏQñ?ík![ '=Rò’*ûñ±oq¼ìwK2;L$øÜ¶ôñα€l""OÅÚ'ãÉxG¦ø—Dzhü´âÓZ=Žf—½Åikµ[@þR(þáOM£*ÇyŠ1.‰õ8_ƒqâFD“AɦÑ*tªF½¶Ñ¨çX \›™ë¶ ¼vAÀÕBä•¿ß.F'Q;Eä<ºˆíÿA/àKgÑpW,ÒÇG=$Á®T +éïŒû;È“Ánø†øZrâzÜ)‹9ÐŽúåÈ2¿]˜p¤I:Eøô>~Ÿ1íãÎùy³>.ñ?€žÑ—üB iÞß8çoœ‡‡@<ÌØ AÎbˆ»;Ì#,E„4óÉ\X<J¿¦— HÉü‡,yG\Íé·!œ­øÛF2o ‡õ€È­KwdêÀDzÉqpšíõêmð‰…H¿Ì¾­Þ‘>/ZÓËBçîöÃ'Ë0Xgj°7:F8α&×xƒKÉö¨ÝÚ&4üÑðZ~ÄЕÿ¤yÜmÃaGÅ-þŠûåMœ[Ê»t ç#Ì/ßÈüæm¹ß»;÷G'ór*ïþúñ(˜ùpéî+üþí¹ß9N}m/õÎõjˆzÞ†êÿz©[äÔAAÎ\mndÓ e>Ø—þ7”R¦rÊ‚¶€2\k˜Þ ÌÀFf¸† õ?¯c$ê©+M„Mj)÷Fä{ e®¡Œõ”©²41]‚ÜhkÞÒ¶‚ÛùÚ"Ôs9_;Âüþm??Yøáã?Sô¯ ¥W/Uâ-@«®¾¾êê›+!>{³ú³×«þu¥úÓ×V~z±úã •®ì¯Ï–þùtù?^ñÛG*~õ`åOî+ÿÁ]Åß½­ð7½{¨è¥²K³åç¥Æ*ð—Ý媀8bX¹G·vF½.:¾Î;ZënÉúEú~1 ÆŒùÓ»âÑÁtSNÞ1q<"@;TICjhZQ<¢–¢š¶˜¶=¦n£‰ªäq•,¡†,hOiÚ'µmÀ”ôÞÌ:ásÞØEÈ7ÀŒ®}ZÛFHªÛâŠÖØx+”ý`~¨üý#è–[÷€ݙۋN¿1ãSÐÙ½Ý.L?ÀÀGK´#\ZþàüoÐI@þ€Q+ç§“´Í]‹EÞ35ë¤äUSôΑJ¬WŠ ìTðCÜñAÞh?g¤¯idÚÖ8°…Ý·™ÝÛþ¯ïëbõv@~Îü#¢¿›MØÜ0´¥ixs#YÎ~A€¬÷4Žmníf#]¬‘®†Ñv¶üÑøßÔ'óC™>Z'Ô j%0“LGÀÂT7ÂÇÚOò'àF ‹DÀb¼k1ÞMü?éÀò—ƒü‰ö ó‹ ±Œÿñò"ÚÿCäO.v¯&£màÿÔòäçù‡ü-ÙþwX¥´ÿÑðG%„úÿßú_Ÿö£^Á"€ÿµà üoÖsÀÿNò?Y¸ÎÿA—˜ø?–¹wŒ¼ä…“H÷¿õ?ÏÉPw¶ÿq '/Uÿ“ ¯Rù£šß!šp¦ùOºEè t˜yŸíê„ òGÀ3bÙÿÀñ€=lX5fÉŸŸíÿ…¨”DÀü/!þO“ñ?Èêÿ°U þ÷E^ƒö¿G+¦[ð?Y&†Wo«[ö?>ˆö?m‚n øß8ÄÿÛGÑHNò¿KÓˆ¯¶äA=/fhJ¢ÉφEçÆ›}+îŠVŸšªxf¡ôâÁ¢7ŽçåæüoÝ^ðŸ÷ýèdÁÏ)ú壿y¢ø·O–ýöñò_=RöÓ“%?¸3ÿ»72¿¾ñî4…–€­ÔÓ ð?óVãŸ9³‰ª¦\% SeÈeê‹ÒKÀ–J&ñ¿o}íh@þ,F’ÍŒ³)ü¬£<›(gmÚÿ†:ð?"ÀÁc†$9ó›snÍ9e¦Î‡¨+39_=D}ïÖ<´ ôѼž)øôù’Ï_*C»@Áÿo¬¾úÖª«ïà.àÍ•Ÿ½¬þì•êO/­øøÅò¿?_úѹò??SùßOTýþÑê_=\õ““?¸»äÛ'ŠÞ;VôÎ²Ë /¤ÊžœXq*\q§’øI»fZµ62¶Þ3Rãb›ú9àCí.!*û„º]ð§ÆH    §CCà‹@~…8 ¼&hù‡U­µ¡”eS¶’˜Ð ™§4rˆ0< 1?@CÌ?¥‘O©Û'Tr<ðo!cTù£»Î]ýHþPóƒüMøÜƒô± ½|ôÏÛÇpðÈ.4.P¢á?”‘ÚÌÎ\ü§ßNËû´OC5@Þ9‚>B9ÌS ñǸàÿÑ>Þðö&€öÿ®n‰€lÿ“qP¦#`‘/¯ó?½At|k í:hÿu± hÿCýÿø`þ°OòŠá=šA°`Ý©DçôJ¹d÷üdWFøídÛTþ¨øÏøÿñ.ºþŸ ·OåSPÀã·‡–…ïÅœéÝþ@zÛçò`Aœ¹Õí ^Í–?oØÿòpH ¶-Ìçjÿ;íð¿Í,%þ§ç?Yþç¡‹›•œëü¯¯×(ØhÔM]“ÉÀ±™øØÿ"|_°„Lþ¯ó?)þ—oF{>»âÑÍ@õ Â'þ§ùgû?…ÿ“wÉ*q|%=ü/DçsºÒLyÄÓ^É´W„^ÝB'9È–~´«ß/Dø¸ÄÿY4€üÓþp²ü"`OTìŽJ¢b¡ôIM>qÜ'ÁK3¨H_¾‰#½È Å?^˜Åä-ìZtC½C!„À6Ì'ÇÁáƒà®÷?A·³Q×רïo2 4† ú¡:Ó0Ë2Ú„üõ?ºé²!ãÿ&¯¦)¨çD ì”yÓ‚cÃ>ïÆ»B+LV?=_yaé7”|õDñ·î,úÁý¥?y°ô•üöɒߟ.ýïÓeÀïŸ,ÿí#¥?°äÇwå列oìgbÿ3ž7QOŽ2NneÞ(eìk`¦ÖQþrÊ^Hs†¾ï-¥¬L{ÓµŠá]Ç ¬Ï‰ld€ÿµŒ$‹‘b3SŒd5Á¦¢ 9aÃ_Çt×å8jàS-eb1L,ÊÚHùÔt;ãØ ã¤‘: .O2¿|€ú›s~roÞoÉÿëéüOÎv±4í2ÿyg%âmü㛫?‡FàµÊ½RþÉKå¿Xñ÷óU=Sõ‡ÓÕ>¹òW®øà²ïßYô‹¿|¸üÊRåÅéÒÓ©ŠGÂå÷yÊOXW€ÿwkVO)Ö…G×¹‡7ÙÐyÝ;Ѷ´8Ø‹n›2öqMý| Î‚Ì d€že/ xFÞ1¡o\DüOG- ¤D„òи,4ÞVÀ3ªÛ£ã­@B)Ÿ'Õ2HÐ;]äÓLáï hò£”Ão‰Ž5GF›ÃXþ!1)þ}Hþ–Æ9óÑæ]ÌÃ=õŒz9•óå}Ôwnb~pOÞïNåýåé¼>W”öÿkhå—øÿówÁÿøù­5Ÿ¿YùÙÿz­ì“Ë¥ÿ|¹‚DÀŸÏVý÷ÓU¿~¬â§ã„‹¾r´ôõ½å/Í”<›,4\|¿»ôVKå!]Õ‚rUjlMpxk¨ÆÚÏ‚?ívtÔ>L†CüO" ;®é®0?‘?ñv €# íÿ²…øäkH $¢Š–¸‚Ž€6:²…Ÿ û+dPüGF¥ ÿ–¿PDŠÇ.>íC¦þ‡¤ÿkw 4}< ö¿n@ AÒ¦ýN@þ—ÿÉ)@Z ‘¶ÿÓÇKjÐØíEõ¿þRPüƒü‡{9C;›Ëò¯§ý¿££6;z;jÈŠ@–ÿ—×…ÿþíi åOû¸“ Œw³•=à,)þоÏ!$øÁlnIzðéñNÇQLÇ;fms‰vt  o²ü?—ñ?ÿ [Ô) ÛEèêv|Š>:áÍÚ…ðv.דô+ª-31”íÿxDÈÒòG>È>t·£Ç•ö¿Ý"!þ7$ÙþùCñ䯢#8°ÿqñŸåÿñF² üOF@à‡Eèv,ûÈì“K8¡:AûÉøæ4±-ÉÄÖT|ëõþuN…»ˆüö?ºY ­9ᔢÈÀž‘¿ŠtݶG:ímfý­³þæ¹€t! ƈƒbäø$ ~>‘ÿî7CÓu,…±ÿ£Ü=1˜oLHØ“,ÅÅ‹hD³!teO2 B—õxé­¹ˆ?úˆ°£Ù›ƒ6iߪì1 Ý× ÿ;³V³o€"€øŸÈK†ƒ*ÌaôÊÚ5:Š0³,Š&»Š )·FàÑòÑuöFŽÏÀñêѽÆq{ÊZ»äÜò¿-¹é驊ó»+_9\ùÎM¥ß¾«äÿ³‡¡ì¯ùƒó?:‡ŽÐÿÛse=[ö§§K>|ùÿGwå|÷´þûöãwî³êœ‡væÞÚÌØË¢¦ÖP¡2Ê‘N22(C¥Ë¡ yè]`s e-g8V0Ý«~øek©È*YËHÕQS,j¦9ÕH¥ØÈÿ1vn¸>7PŸGZ Ž+‹éh ü<*%£ŽôR÷h¨§=ÔK‰Üw÷Pß9Îüà®Üß>”û×eÿW~öZ5øÿó·ª>{§êów«Q F`õÕw*?³ü³7Ê>½Röé«_ªüû U}®ú¿O—ÿæ±’Ÿ=TüÃ{‹¾}¢è«ÇÊÞ܃ü&Yüx¸øÿ ü¿fbt]`pƒ£¿ÖÜËÒ¡µò®(:gÝ0²‹˜úæ~!ñ¿e¢\®ÿñèÿÿ3-@z9âÌm!çð(Ú´CRü]LªÚ ÎÛè_ÿ4ÐG`ù‘üѲ/ÈÝŠÞ‹n?1oçÿƒýèâŸøä¯¸þOŸCüòLjiÿ“i?=ó¿¦øÇc"͘P5"DþïãÿîhÜÚ€'?õ»ºë@þÀÎÎ:ðÿÎöt`jèùý@o M¿FÌÏ‹Slã,·ØüYò¯‡úÈþÓÃã.оª\Mq^xmK@„Û'£ˆéHûTD>k‡H}2ë¿×øÌ™ ƒâÚ ¬;Ñ‘ U„Õ± ɉ òL­° ¾ê‘ö?™ÿã=?è…¯lùû|-^o+Èß픂ÿ61ñ¿Õ$ÿëµB­š¯VòÁüéÉ: ñ?j íXƒP ÿkUð?´Ïn¸Ð 4d9/OÈЮžH'h„?™Ø65±}*µ#5± ~LE{&#=©ðfZþËþÇòŸò#ÿä*mˆð?߯dä/‚â?ãÿ_˼¯uÁß²l^ J0âÝ! K! °;(İìP=²}Fû{"éoÈóÞ(ooœæß{ˆè ¦Ã¢É€0}_›WLüÈäõýï5 !P @ý¯‘ÀŠ/…¡ƒ&S àGø’¼}ƒÞFþç¢%cø-c£’mU5:4|—VA¯Nà7òýF.04†Œì¤…µè¨=ìÛp"¾öÞéõÏÍ—¿¼¿ü­ʾ~[ñ÷ï/úé©bÐàŸ.ûË™ò¿=Wñ?Êþñ|é?ž/ûûse>] þÿŃy?¼ƒúÎ1ê½Eêó¢-÷É‘¼{»óŽó™së©x%å- l¹”™I(JÇ ´Lº|Ü”P¶ ÊUÍô®¤«©è:jb#YKMÖSÓ ÔL#5ÙH%˜qvN¤žªËAS z†³Ž²×QNÃÝÀòS­Ô‘Œ»ÔSêbŒùî"õícŒß™ó›sþüdÎÇç ÿõbÉç¯T|þzÚùùN5–?ùÿÝ5Wß]põ­ è>»²â“Wªþq¡êoç®÷ÿ{ÇËÁÿ/O—<;QôX¨à>WÉ-æÊýÚ•sе±‘Þ–›ôÛêÕd‹x¹bkƒ~G#¶ò:p €ÿÉrðÿ§ÿé ëÚÿ!5<Èü£2ßH«o¨Å7,õ4B#iÿÇ2´•à¢zøDA ”“¤Æh3‘`ÉßÛ/Bûü{yÖíDþËþ'Å?ø_½‹¯ìãªúyÈÿÃB,$pTƫŠ_J>‰üM:)hßjhùú_LˬŸøŸ;´“CüOŠâ(þ‰ÿ逸ÿºAÙï…Ñþ'çÅmK_Þÿs­ü¡òùmNñEÿ{lb·Uä²x€ÁoQrÅÞÓ8jŸ ɧÂmÓÑ6ˆzå7ãÿÎYÒDÛg#È*Øž=ºÐA"‰GÎÕ !/ØfƒÆìxwM÷ ´þK¿ð‹ŽúÿÛÐØÇ/Gò÷´ùCñOæ?äD>tRŸUûZ@û_§Fò×*št〣VpÜp!L®ÍÄw ] Ë,H/O„ÐV(þ³ä¿sz²RøÎGt/X¸ü?êš £Ï©`¦òOû_>í“cÿgnÖ˺l=e“LÚ¥SŽæigË´K:ãnžõ´ÌyAþ²Å@+°;Ô²;$ó/…¥{#Í`þ=a)°Aìò±ùyÄùÄÿDø{"ð ßÀMÄÿûbüýqp !ÜŸ8$‹1tw™¡ûÚ|¢¨‡\Ç#È (³2"¼V±Ç‚üï5Á§È£´]™]@äR˜ìaˆü±öÉ:#ò?ÿh½€ à™Õ v Çæ7ˆŸQ0 Ð5 nØÔÅÿŒ½ßSsShÝÝÉ5§f×¾¸XôÚ¡Ò¯ÜTò;‹~ü@á/-øðÉÂ??[ÂÿøBù?_@||ø¿ø÷åÿìdÎÝF}ó0õåYêÕ`ÎYCΩޜÛZóöÖ3’+¨@!åÈ¡, ÊÌ ô¥ÈÿÚÜôˆ´žjâFb#5QCA þŸmb hb&ÙÌ‹©gàAÓϦ<,Ê˦M9q!sAÎ<¶ƒºûÿÅHÎ; Ô·0?¸=÷7'‘ÿÿq¶àÓŠÁÿWéâÿK+¤xw¦úê[+>søÿŸ—ÿ?:[õǧËýhñ' ¾Wþû7~ùHéë»Ë^˜,~*^ø¿ðnGÙqSÕ’jUjl}hp££w“a[ª§U‰ ÿ.šlaë¶7ТH A‰€/.xG>0ÿ˜Ðæ°üiÿgÌÅ íïp‹g¨ð"H„G[é¸f9@!£…OæâdìŸ%OŸlø$Å¿q;Çñ?-âåO=„üÞÿë•â¬}ÚÿRâ3Ž‚U+%X4³ZbBç #Ô£"å°€Èdò?È`{c–ÿñäûŸY®Éö?=óA'Bla†¶²‡·5£[Ó ÿd芿b —Ü @äO־ɟ)‘¿Ó, ¸ÍBø9ì–‘˜ð·¥‚(ÿ#í3Q¨ÿ»Ð>Ì¡ÑΈP€Š¯<êl†â?`z<·žCŸ®FŸ±F:_$ÿñh­«föü$¢±h{ÚÿÁvðú̇ÌðŸö?iÌ ÙSX‰ÿ5ùk\ÕxŠ%W£æ@u<«‘Zø—c9mÀezœb¿§9ä—¡Q´TÌØAü?“Ú9?Æñ‘-3¡ÿld3í<ù—ùèíôÕŠéë'ìÍ)bÒÞ’ö¿³åZÿËweàÿ¥póžP3È_´>iÿc{B<`)¸\í¨Úr³üßp‰ÿAþÈÿ˜„xDÀ\_Ù’LøÄ¨ð W³¡Aƒ?&kÜäÏk‚ÿépPÅNVíãTÕ§ýß ïEò‡€ÊäîZD'ÅY‡Ð©qh½Pòð5MNüÿGä3Jü&´Ë(d…­Â¸]³r&mK.öÑ@ííѵM®zbaÕËK…o.þÚ-ÅÿyOÁO.üÍã…<]ô·s¨æór± Àþ/ùÓÓE¿{4ï§÷3¿‚úÆ´ùó%/ó´:÷Þ-yÇE¹óë¡bÊo3R”‰ÉÐeühp @‚í•9î*†o^Ljo`$6QÐL³àÿÙ&jº ­$YhSê™ÑF*Ø@…¨9%ÎÝÛž{ÓNæý ê;õR”ùîü²ÿÿôxî¿õÿg™H·x;Z~µê“‹Õé%à§*~ùpñïÍÿÛrß;žÿöþâWæKÏ' ÑðßW|ÂVqP¿rv|]tx“»¯Æ¸}“vK­²›­è†âŸ(7£Ã$ѾÜÂütÿ,DÀÄvÿlF0êF5°R`:Ð9åo›òÊÓt}*Ž€Ì=zö”£uÚ)›q¶ÌºZçܲy|ÁÛò–‚²¥`ËžPëÞp˾Hëþ¨Œ<ü_ÂÞ:®êzß¾3£.Y¶åÞ‹êô*F½wiTFš¢é½Wuɲ-÷^0`À\Û˜bjL!~!„$$R „Þ)´oŸsf®ÇNøk½ë®«qÁçÝ{Ÿ}ö#Øêoñ ¶úù[ýÜ$±‰æœ­Aø‘ `ò³çB{„ÚEÚl‹ÿ›‚ü)?,`ÄÍ‹y®ôA@âÇâØà¯‹dqþ£ƒ°ëK!ÿàºÖ"r¥ˆÜ*‚'¿¥/‘Àå#´ äw‹=:tÑÌoL‚‰3q¦,%Û…½ëo ­83ºèÂô¢§·eÿdß¼_ÍþÝ-=ñî]ãZüõÈ‚¯~0ÿßÌûçCó>¿/çûÒß¾=åÇ™¿:@ýt õt”zȺ³7ýXyê¶BVl1åL¥Œñ`L-Åø«°úÔ“H¡± ƒàù”s Ó³ŒX͈¬AG¤0YHâ¹@+¤¢T¸ŠSc\Ö”ˆµ]Î8ÒÈ8ÙKÝc¢ó12MýrëÍÃ)oßÂüìÎÔ/ïIûσ™ß\ÎEõŸgqåÃÿ»çó¾û 9XþÝ–£vÐ'q#èC ÿqï‚O/,x÷lö_nËzýxÚ+‡X?ÞÉzrsÆ#ãóî eŸðä³ÎÛ©ž?Õ»8ܵÒѼVW·FU½¶·r=j¯b÷Uq{+ ÿÑ`y²%„5Mlšÿÿ›;y¤ÿ3q Ÿæ?ŸÈ‹ëÿX’$!þ»{J]R ¿µMˆ[@§”X€¢zr" #Püe¸ÉÍv ðG ÿ þüüþ|K#—Ÿ4IÅþ„ÿÊv6„ëÀˆÿþš~–@;@Gþ˜ÿùA1Ýó ü7©% ãÄÂwîª{øCÝ‚þNAo;¯§•ÛÝÂÁügÿ± 1ÿó*7ÔW¬§ùO΂qR°DW~€üþè²pBð%áwCbeXZÖUµ‘Ÿ¨»²0üsü]ñ¿Pà?Ù‡ä7á•èÀ§Qä3£Ö¾ ­ó¿ YÀ¨¯ø?T€&Cä¾ðydð}¢n9üÚo%óšÄÎa]Íø[TÅ ¸h8v-7Ù’3R`ÇýŸhf&žãCð•ƒÐ´7'Šüþdà›Èo'È/Læ?Y¾ â&Kƒ“d ý°!ò (ÙÀÿ>%»OYB,@3ÈÑ©9؈ @"ü÷@jãQ„ýè´"ÿ‰‘æÿÛ@Ó#-‘ÆñPýd°nÒø?ø_ Ø÷ øþ“àÜQJöe“Ý© >`Ÿ†ÿ„¥”À4m+±—mrJgÝe›½¥[|²­þR€?Ñö`éö lÎ/™ó‹æ‚¹ÈÏ„8DÛBHs؈ˆüwDÈbÂÿ­!>ðÚ‡ø?îÆ½ I~+ßcå%ÿDvdåñSÛªÛ[ÿ{ŠQWOG‰¦ eøÉ<"Ró1÷¢®! ?$ö!!üS+ø{ R¿ÊCëhE ÔÊ™±—ìtñ­¿5²ò®ñE÷Í,zf{Öóûs^¹.ëõ¨Õÿ½óéŸ\Ìüâœ#ø/üúrÞ]@øÿÁ¹Ì¿Ýžòæ¬W÷SÏÏRO©KÖéδC²ÔÍYÁ\ʤð È•¢f¤ààŸAøÄ¢T©”:ƒzAsÖ…”c1å]Î ®¤H 0ºeS…Ôtˆ1*¦&±ÆK¨IcšÇš1wË©cŒS½Ô½FêI?ëˆÿ·3ÿïÜÄúôŽ”Ý“öU‚ÿß%×À þÿÑ¢ïž]F‚ÿok›ÿå¥ÜOïž÷á9»-óÍ›Suëgû¨§¶2™N¿'šu§7ã¨mánýÂéþ¼PÇR{Ó*míêª5ÊŠu=zÊŠb€?V Y5…£ÅR䀛:ÐÈ8ºóÓÞ+tô‰€öÉa?Í¢køïî“Ðüòþ£D MD[v1µ)ÅAtÈ‹ÀاßüþíBö[›På'¹ìïüiB‘?iûIÿˆÿ½œþ.ðŸÿ„ÿÚ1Ÿ„÷‰/ã.0(òø£ø¿_ ü×(Eê¡*‰ÿMà{C Çÿ…„ÿDtäŸÐ:|4€ÔR½¾µf(þˆÿuùÿÍÿ®ÄÿäÊO2ÿIý'žà³H‚àïÔ¨æ" r *6<-Z®K/ôš$~‹ $žGñ*Иh¯ ò££a_&?ÊPä–›ÈÀAàçÁ Ç¢*1à±-xr Y¹kM,ÞBÒ–;@ƒ÷Í"tåÖ.óº|îR¿§ ÏyÆK^âð·Z¤³Äd Býp|í&¿A?HìßA"“Zµê¤£Þÿ£brSXÙ]Œú…z‹É)ÊÔè,X¯ã 0òíV1üü^À$\O‚ûgFAíÓ#mð2mš7Lë§õ“ þC €ÉŽ}iø#YKó×èøù üü/þoñ•mõËçe í9hG¨ °- Þn òûð$Úlñ@Û‚\ÂZĶGx;¢|â à?ª34&n‹¦CÇ\¨µƒ:ð˜V3×iâ:Œ»±Oëjþ«8h²Dß]4Ü Y@ iòø[zøHJ.`ŸÈ¦âöj‘S#vi%.½À£ùŒ²€¹,d-Ûä›,‚ö Çí¼Y'g·§èX`ýíÑ•&–<°iѳ;s~v ÷W7Ì{ãdö;wf}xw ¢âÿ<ŠàŸàîg÷Î{ÿ®Œ·nKyýã{¨OQ?ðR5Ô‰fæ>kf-Ó—M™(Ê@1ÿÚÿÅÿ¾D  Íf 0ó)[õ„ò/§B«Ð)ÀÈð: ÝTHÍQ›‹³lj–CÍrAŒ-|Öœˆ±§Œº¡‘:ÓîC=ée¾0Iýr[Ê!þr–Eøÿícèl÷Û.üî¹¼o~¼à üAÏ,ÂðŸ÷ïG³¿| óÓ‹éÜ™ñÎíi¸%å7ǘ/ žÙN=2ø8’zÆŸq³-cN—75h[h©[¢®X®”¯ê”¯í”¯ë(_ºÄE=Šeó &‹I¸8Ü*øÚhF\gíàžÿ8üÑ̇«™O§ñQÛ§„îÿ÷ôJ ›ð_CŸ ô± üû{0ü»ØÝ…=]EÄû‹Éut#²Äü×}EÐ_ ÕE!øÇäGðmAÏéXót¸q:ØüŸòÕM&¥¨áÇ^"e$ŒzTç±–‘‚??^ö±ÿ¥ Y› 4ã”cþË·xËÿÛüåÛŠ8ÿƒå;Ãà¥;BÒ]!1hg˜/Ø&ÄÅ] ÄIÖö0wG„·3‰ÿÛüßàÏøÓ><ÚÉ:yhq³C°ò|fŽË€àoÓ—ümäˆGÇgGÅÿ6ÚËÆ)›txº¹&%€ª=}|k¿=xB~ϰÌc(ÅýEÒ E¶)"öЍCÑHÏ™t ¶¸y{¼Å×7ÿïž\úàìâgwæþìÐÂ_߸àÍÛrÞ¾+磋hTþ¿ÎÃñ¤$C:ðÉÅìwÏfüõó·G¿ØI=7I]vS†¨[Y{ùŒ©ÕLRü7R #m˜JÕ1XÀÿ¡¤🤚Læp6Ó˜CYç3œ‹¾¥ŒÀ *¼šŠ­gŽndNm¤Àÿ·” måPs\j+ŸÚΧöɨãuÔÙnêaê)7ë… Äÿ?L}û8óÓ3¬Þüÿî2ZLó5ü<—‡à"ÿ_?™ûÕåì/Êøü¾´Î§½s*õO7§¼v=륃ÔwRn¢.Œ2NÒo°eÐ¥ôæùÛ™kó†ËzÊV¶—®i-]×V¶Ô%ߨ#/T–á, s£˜Ü"ð×·ñ m|c;ÏÜ)°t ü{„@~wŸGõ×òÿªƒ€üéû_î^™K)ut‹‰ÿÍ-hVX@¼Ô!ÀF y»DÉ"CH«?òƒ~ð‡àŸ^€KøO>ÿ[yÂþ¯á?.þÇùOÒÒþòƒ ø×õIpð/ê ´ úZÿ»[x`„ÿ¤ Ð\S@ó¿¾b=(þˆüÕñPÿûø"-@¤ ˆLJð5üCðOàŸP‚ÿ %IüçèЇû‘€ÿh²–ŠƒÏÚø8èÌÒM uÊFÜèx7æ)Ç}ŒûtØtIýv©Ï&ñX$n³Äe”: «VdPq }l}o -2rM×W¹ÚÀÎ&‚ÔÃ6Ì'üwÙdn{)¸DûDx·;Þð…á§ýˆ!Ú7èEúa!ÀD° ÿ¯±FHÏnR«¸ƒ}\²  ·›ÓÓYÒÙY܉, °·§w„&n„©9_XLB—£Ôï­'‚ÿMcm³£ ÄÿXÛt´u:Ô<lšö×#yk§<Õ“îªQW?’­4f㟸Œ[¥Éš°ŠA“6ÉøÛ¥ ÌÿràÿVoù6†¿bG°´3¤íÉ÷„å{"¥{"ÒÝaÑΈKDD[a>Á>yAïðM!­maÁ\Pˆ.…ù I ¯ Ž9…dwðßmä:õlÇ0¤oÅðÄBË”íZ.¶u6¤~ÀS Ú£,Á½ýþ\ \è°"€¿[/óËüær¼.¡,ðwTFUQW*H:%#.É„K¸ÙÃßëã ÿWcþ/ýáŽy?=¸àW7Ìÿý­9»3âÿOïÏ…øŸ¤ñâÏýYŸ\Èúûé´¿ÜÂøí!æË;¨ŸŒSy¨‹CŒ ¬=åÉ£|‹©àr*²ŠŠ­aNn H °¹¹¥ˆ±µ„šc#mã²@Û¹Ô^)Z:|¦‹z@G=åLùÉõ‹­Ì7ö³Þ¾ññ)ÖçSÿs)ë»ä~ûÄàÿ·?B€áŸGÁáË¿9ÿz$ãóK©ŸÜúÞÙ´¿Üšòú ©/`üh‚ÿÝcÌÛ‚éÇÙ»uó6õæ¸Û–XU,øw”®o•巔淖n€÷nùz¥¢ _QØW‰[@q¬HÊþúVž…ýB?"¿Rrõ"üiþ“†ŸxÁ?‰ÿÈzÅxò™Qêë—‘*S) °u iþÓ$Øö¸ àéé“»½´þɳ=ãeŸ:¶¶ÕüÉm_rŠMÿÀÿ6ÀŸð¿¿‹§ê¨”Bšÿ Â0‚Ä'ükø¯’¤†~Â)þŃ]BU‡ð¿§•ü‘ ™ÿפ¤ø%ò¯Ž“Ÿ<¯…mˆæ?Y–à©ü\ ÿ²,’æÂØ4ÿAÉüw ½J¬°€ˆC )X_éA./ðbÏ´øãV@±Ë$v„½Ø¦›†øÃýdÞ~Ibê2›¿?ÜÏ¡¼cmâÕ\³–oÓ‹ìv‹ÌaEq> õ6Z8ò·ˆüþ¨Î?,„àŸˆÀ>¤K@ɵ "à¿ïk Ш„ÿ}Ýþ ÿ;: º; zºòû•´ v ~mngYÀWA=Ÿ¨òäGðÇüß2Ò±9v ÿü¯™pUŽ;ÿGl¥#¸à5‹’›<ãä·‰A€ýIôOÛ%3éf‡ K2kÏ:ËA[ÜsÞ àÿŽ`&%hW¸jo¤roD±7R¾¤|_¬toT.Ú‰AØÄHÀOwH ä'þo ¶ø…›|è¢Ù„›7Çw7Ì\‰)á?±€?)èÿ̓¤ôW2þ÷p Jž±—O“ß6 D5ŸA û üC¶Ê°£<℘¿*æªE<•ôoO:ê•M¢Þ'áÞ÷ºPþm±Õç'—]Ú´ìé¹y/ì_ðêõ ^?‘ý׳Ù\@W½¾|`á?\ð¯‡ÑõØ/œ÷û²>>Ÿ üëÆëS^ÙNus!þŸl`ìãQÓ+(_ee:f04¾@1@t5¥2´i”!ƒaÉb8æ1Ü )ß"*°„ /§¢+™ë¨ÉõÔôFj¶€I[h‡ ÚÎeì—P7VSg;¨KZàês1ê•Í šÿ_žOýúRÖ·ÎCüÇGÈž]HàŸüç±ÿy4÷˳>½7ýƒs©oŸJ{ãxꯧ¿°+õñͬ{ÇYgÂþ»†L÷/Ž´åë—iª–õÊWtÈÖµÊ [dE-¥ð\ß)_×S¾¾_‘?PQ0XU¤ªAE¹ºfÎp Â~ ¿¥KŒÉ/¶+%Ž^±«WŒ øWÈ/Á]bú¶Wüýêúá@UèG‚? üT`ö.‘µCÌøÓÂÀ ˆ«O2ôlãa¡nrÉרX’€1ÀD®zþÓÁ?á? þiþãø_”ÌÿÄ)°H£ Â~¼(t¥þCø-@†ù/Eüïþ÷· •m¸©’ùO Œt ÿ¯)ø'“ÔQW"»#iø£¡ •…tÙ—}þGüO¤j,üƒ }ÅÀ»šïÒ €ÿ½ø°ˆq  €, âDäŸó:P„ý^«8Ñ.´é„†ÿ`w‰ª«žC=lÐ`w‘ZYBö0êØúA®aˆgÖ ­ÃB3$&á#áÞÎdÑMž(ò'}þjTù!ü'a?0¾?ùKª×‘Ñ"à¿z€Oó¿»"vGGQ{{ag{~Wǰ€¾ž|°€Áþbšk€1yœŠP :Šþ&G[fÇÛg1ÿ·Œ¶þOGÛ ÿ§S¾†_†ÀÌ¡±ÉcVYÌ"š%ñ&O£p[À¨E8fáV"¿C:íorJf]Ò­.hÎ)ÛêÎ:+6»qþû*ÿ;CÕ»Â5þájÂÿ}QðÿHÙ¾˜\ ¼`wL‚]@íŠ hþ“Ô€&ÿ5ü‡øÙ†-€Ìñ —»iþƒlÚ"ÒåEâ|úƒâc_±A .À7õ ,«JhÙU"Ç ˜ü ü½úRŸI°(þ~Ô[óÖÆå«Šú+bþ²Qé„_¿°=AÄÿ["«î[vßô’'·d?¿'÷•ër{sö_Ne¾w.›ÜüúâRî¿DúòRöç÷f~z>ó½SˆÿoJýå6êùqêIu¿†qº%õˆÚ²ŽŠÌ£œ)(0b Ð3(Eé`ˆÿƒ‰*±u 5œÆ0gRö4,ȳY@p)YÁˆ­¡F±Ìl` ˜+blÁÚZÌÜÁfîRÇ*¨S-Ô½CÔ¶ÔE©_ÌRoìeþízæG·3¿8—òÕý™ß>:Ÿæ?†ÿÂïžYˆ¾|bÑ¿/£áoŸßŸùÑ…ôwÏfüùdæo®Kûù¾ŒgæÒšH;J½Ñ™¹gxÞTߢPëRgíÒ¡ªe}åÿÕ-Ò-²’æRPa[ÙÆ®òõ}Š ªŠüÁÊuU±¦6Þ"ð'Á?ÀßÚ-ø;z¥Î>éÞÁ’®Nr·Ë§Š[Ío²0ÿý²à@2ÿ‘• è‘ Y@ÿ!/àÇÕÊ H!?¹ä ð·z’àŸ :NŒúAüoáHðüLJ¿œÞv^_ KØß}UüÒõ‰pU?þ‚ÞÄä\8~þ‹áÒõI®æ¿øßÛWÂJÿ[j ÁhÀ³µº ùW_[ðé¨/@Â̧ÕY_Døn„á¥0]èþW ÂÒÿùÿæ¿¶·P£,@íØ4ÿIüO–ý…lbba‡,"ÿdøCðï0œF¡]/°jýÁ¿«p ³¸¿£¨¿^ŠÀà‰_ ‡zŠAàÚþ°€a¤|°ÂmáƒÌF‘ÉÀ'C(Ž;üùÚ¡ø"NÒã<4ÿ­)’ ­ƒ·¥X¥fc©É à ÂÄ@ü?ÔÏC;b”¼Î¶Âööb€[[AKËúöÖõ`Ê® }½ªb­†g2Š +ñ¹+úX¤~,Ú85Öºy¢c3¶ÄÿѶÍÑ6Ìÿö+ü÷6ÿÇ•þQKiwøÓMþ1ƒ[€`ÄŒ4jŒY…VÑŒKøovKæ<Òm^Ù6·t>Aü¯þoõ(€ÿÛùWƒvGjÿÿKáI^H:°;&"BF€ùàŸÄÿ¹„øÑüßìÌúD›¼"d.á¨SH–¸ùͯ‘çfÿK®á?†¿‘HLDŽzéš?Dþÿ µàsð«Gü5£þúQ㈯]¬V†±€ø¿9€ø8XpsxåÙ±¥§—<¶)ã¹Ù??œýë3þx2í;2><Ÿõé=9_Ü?ïŸÌÃ7³>»'ã“sÀÿ¿ÝÌøãÑŒ_í`¾8A=ãe=lH;ß•y¼zJQÁßZ¶Wøzê'}Mqš'“ÁºñPÍx¸j2T5PÌ;²Aî±Ð†±Ug'V<¼)çéy?=°ð—Çæ¿q˼·Ne½gÖ§3!æÿâþì//!#øÇŬÏÎe~pšõî êGR³›ú¿YêÙõ¨“ºGCn¥ŽË©=Ôìj4› §Q^e§˜V*ÃDå á@¸(…0ãY€13Åš•æÈMu/Hñ,dA@ A#k˜kY“ë™`3R@›7¤Ïå§ï,I;,f¯¤Îu±Õg?íO{q,óµmé>”úþ-)ŸMù×ÅŒ¯žÿõå¼oŸZúÝ—ûìR4(Þö3ÿ?.øÇƒó>¾7çÝs9>•ý»[²^>’ñ£élʼ+šuÌ‘=§É täéë—*+VµÉ×t”­m/]Ó&]‹µ¾]¶¡K^Ð#/ìU÷U”¨*ØCU\M-w¸Žol˜š„¦V¡¥]ŒÊ2íB[§íîC­›>¢}`¨,YèµÄ?$&"ï¾A½>¾ ~P„¾u Lô…‚ÀÏ ü·wA ÿœ¹M`j%YÈOZÚÈ»RjâŒM\4Ø¿"n|¼s]É Ÿ/˜@j*þ·ñUíü~o ÔׯíoçÁ‡CÝ¢Á^¤¡>ñ•â¾@ ×PÁß ’‚Èá¯~Õ4JÑP·`L¤ õ‚ Ð… ¾VAO·«ÝQWL«½¶ˆ¨­¦Tuü Û íù®ÐUûë‹»ëÙÊ:¤ø²úªð×Dþ=5HÊÚxðO, 1‚«iâ™z‹iþ£æÌ»–—Ìÿ@â:¾]ÂKÌý)éÍðÅÀùëx& Âx­Š§R²{;ŠzÚŠ:ZÖw¶nèjÛØ¥lÝØÛ–ü'éª)ÙhÚFbÔÁ;]ÆODû|(©Ÿ3ÞÆ üתÏ“ïü‡¬"ƒþ>{9Èc-÷˜å §¹Ên¬°êËMÚRà¿F%&üïêäµ·qþ ùס, =¿§+ø^éƒÛQAø?iþ>þo ·Ìàâ?ÿÿqwý¨³zÌ^5­¹-ùÕ Ã|z·oD#Œhù'üwÒÌ™µswºy@þCþ‘ ïhˆ{}˜Gt (ßç/Ûå)Ýî.ÛîUìðVîTï ÖìVï Uí Ví Wî +€ÿ¢•Fªö*\‘ÈÚ-=0"ÛªCÒ½1) %øÏŸÿb üÇ šÅ³†’ùï·pÿ.CÉÿä¿YÆTðO ào$cÜp?ÞÞ™à?©ùÓeЄŸ¿y*Ø2lš×O„k'"Õ àÿŒ¿|[@º7À=ÜxstÕéñ—frß¾àÇû¼|xÞïnÌþóÉÌ¿ŸIÿè\XÀ?îËø~oöçwgCüOøÿçci¯`¼²z~’z:@=beÞ3zGsÆÍe)‹¨í«¨MK¨Ø<ʟư3RLTª†…¦À©Ì!*uñŸIø‚Ïu©”1-Åœ‘bÍf:sS\ó¾E”1E\`d%5¶š¹ÀäZÆÄæôÖì:Ö¶BÖ~>ã˜ùÎ¥¡ôÇÝÌ磩¿Üœúæ>Æ;7RÝN}q>õßä|óƒ¼ož\’Ì´÷üñšhú÷»²ÿt{Ök7eüß¡´gw¤=2~G8ã¨-sV•ãiÉÕTçuÉ—·”®j“­FÂüo—­ë(ݘÌÿÁJŽº†£­ãéë4ÿÍmþ k‡ø| ÿƒjùUÒH“E,À;$ì{/Éü÷CšOPM‰¤Žn)q°Â"ÂZd¤?¾ä…šüQ«gÿUu…hÁŽuQñGþää—h þvñUJ!:î‘1É'¿I‡¿’ö%‰æ)iþ!üGð¿Â\jáþwÖ—€’áO¼à𨾫¡øûøUBó?i$™ÿ\œlHuÅWqÿ?¹ÓG,øoT镅ýhÐéÃÁüG«½I I€ü´p‡?šúÁ?ð?ük8†!Ž~]­êï.în/êl-hm\ÛÞ¼¾£eCg3Rwóe+ð¿…Š G@Ó¶ñpNõd@u.éÕOôðÀ;¤SsùÑ®¤›¼ÀþÃ’DÍ_d7Kqi©ÇQæw(‚®Ê€³Âï¨ôÛ*@.K5X¤–a¹A+ÓJ€ÿ½Ý‚Ìÿæ&ÄÿúúuõõkššÖ¶¶nèî,à€¿ØÌr¯«&ì«…þŸüøC¼:áiø8j¢¶ª˜¥2j®A|«û4¯šçâzÔl¿šâÕü††\€;¦gO£;­ì}öÑûÆçæ(ç–öm£\ЭcÜG$Ç¢’ÃAá>Ÿh·GF°Ë§Øí¯í TîVì Uþï!þ©L’â@¬ñ?&=8  Ù7"í wðA»b¼ÝÁnr@Œ‚ ÿqHDø¿U„“´€`ÔÉ Y¹A Çgæx ìx/è0Ǫc[õ°‹¶ó¿X¯*ø›ØVÜÞŸù{õ¥¨ÏÓ$'Á? ÿ1oø¯q¿íÉúôîyŸžËþðLÚ»·1ß9žñæê×8øÉ(õ´ŸyÙ’~i0ëB[æÉÊ”cjµu55¶ˆ d£Á†4 t˜ÁÐR)dè^ð#.°€aÃÊ0§3¬YIÇyT` #´Œ]NÅV #]AM¬dL®bl^OídSGdÔ­ Ô…Þ”G¬ÔC¬—g˜¯ï¦Þ:†K@h \Ö×.üú‰Åß>ƒ¶À£AÐÀÿ'}}yâÿ¥Ü.Î#üÿÍñÌ—¦?³-åá©´;‚éGÍ™3ýYÎÆìAÅÂî²e­Ò•M’•­ÒU˜üë;ËPðß]^üOþuµˆÿ†>Íà0ÍrìKøÀiʉÂZ(¤•ºRyi%øŸ½žä% F !Å]­‰/%)€K)A `ë£ÿ(.ûÐñ?‰ü“á#v2ü‡þÿIñ窶ÏV޲…MøO†ÿÿzDªžø, lüäàÿjþËhø«{„(ƒÀüì‘BªCLó¿»‘C,€æ?¼À'XÅtØOv„ÅÕX„„¿•æOmœÿJxIÚÿ‚WÀnTÿ!.@à¥þƒ¯Ó`î+2õz Œ}…¤-àïæ{ôBÂÿx `l’+ü·I®á?ÿF5[?ÈÖ  Kµ½]Å]m…-ùÀÿ¶¦uÈšÖÿ{Z þ/@äÇ@øe8³ Bz±€äîMú×5ð‡Y€^K"ÿøÁÂzG½NyÀYrW…=Õ »&ä¬:ª<ö·­Úaª„À¨+þ«úDÿw£úÄÿÅMõuÀ hn^ü‡_•Q/uX>w-áÿd´ ø?‹·}m޵ÏFÛ6…Úf‚­ÀÿqOè£>j­ ™*Cȯ‘BðãRñœ\w?Û3Àñr¼*®oY@XÇѱ' E[¬E»]G|7…òOÆ ÎŒåß9^xn*®Ó3ÜÛ'9·Œrnˆp}âý¾Ò~ù~¿"®`ùáÅ‘ÊÃÑšÃѪ#±ê##U‡c•‡cŠCѲC1ÙÁQé1†?ß»+ÆþC"p¥4,Úÿ‰ Ys>Ñ”·ƒº¹7lã¬È<&Ô¿f`[†‹1ÿ% uà£^šÿñVO\ùI†?ÿãÁƉPËd¸u*Ò6i™Š6MEë'cõÑ:H&•›üesÁî`ÁáȺc#kî›i&ïòÖÏîÌyé`ækÇÒÿx"ýíSiïß™õñÝ9ŸÞƒ®Ç~r!çÓsó>:“ùÞm©ïÈøë1Öë©WwR/m¢žc<ëO}Üšö:ýbgÊ™:êf9u„GíØ@M-¥"¹”=²²È\¦] c¡aE»€–6€M˜ðq€\#‡ážÏð.d` Âðó,CŠ.¥F—R“«¨¹jŸ:^CíJ¹d¢žôR/NP¯í þ|„zïõéŒÞ›ùõÃó¿ylÑ·O-Æ[ —~÷ÌÒoŸZúÕ㋾zd!ðÿã{rß»+÷Ï·eÿöÆÌ—ö§==—úÐdêÙ@ÚSðßÕ”£®\¤,_Ñ&[Õ"[ÝZº¦­lm—|cwy>À_Y^Áÿ@௮æAð?\Ç××ó’ãÂ[§ðŸÄÿüÓØ'Šè*‚ÃÒȰ,ª/ÁKX'…ô2øœ( Cv¦ÖHÈ àg C2œ$ÚâgBºóA‡\ûoþ£߫ᯪ#"ü§Gýcøãk¿Âˆü ü“ù? ä%Ynþøÿw凾öEšÿÁ†ºÄ ÁN ð´ ”Í<’ÐOxSÀÖP’Œ}ø2®&´28þŽ*?IÅïÙ}õ% 2šŸ!?]ÿIž·p­}E pó@±uMà%øø›DþøÁ·ƒÂ“æ¿Û€Šÿ5Õ\í ­ <ïé(lø7å·5m êhÚØÙœßÝZ˜ü“U›d>óàâ¿zˆ£ŸGÃ#-ýß 0 ,´‹ó5¡ÊDþr¯Sáw+ûQ_mÌ_‡ä­zê"îÚ ³Þë¨ °+Ìzù°Z6Ø/îWŠÿ[[Jš ÿuukq h£²»H3$4å.{¥~áÿt4Îÿ-#qÿ7EZþÓ– oó˜»qÄ^±Ô •~m¹W#s ˆì½|kÛÞÃv(Kœ½lWÇ3Àóªø„Ô옶hZŸ¿Ýºñ {Ãþµ·EVß5ºöâäÚ{§×=°iÝC›7€îË¿gKþ…Ùâ³S%'F97†¹×‡ÄGƒ²#þÒÃùÁ@ùÿ÷EQ p$R:«Æª:UŽÉÿ‡b’ý¨ì#Lðÿ;Gþÿþä x.( lö‹güq ˆ¹ø à pšØÄlúbÀrÑâ‰q‹ÏóÑK¼©×(ùͨÉ?æªq׌zj‘üõÿñpˆæÿd¤¥1d(ÕL[’AÎÞpþÁ‘õ§GòîžZüàæ¼Ç·å@ ðê‘Ìßߘö×[ÑÙ(²€ ¹Ÿ`ÿ?<‹øÿÁÉŒwnJýÓ1ê÷‡¨_í¢^ÞÂxqœõ\€õŒ3õò0ëR?u¡º­šº^Lí* fW¢¾ o*ê "·ƒõTªŽbjè÷ˆjP¿(²c*eI§¬”=‹éÌaA.àžOyRÞ<Ê¿)°€ /¦¦ÖPÛÙÔQu{KúÝêêÇ#Ô/·Ro Þ9N}ršúòBÚ¿È-~/‚|fùwO/ûúñ%_?š÷åó?»w>ðÿ/·çüîxÖÿ€ø?íÁ‰”3þTàÿ¬*Ç×¶ÀP·´¿ruG"{â¶/¹ð ‘¼òSÍÓÔð1üQð ÿ­¢dþ“âO2ÿ#ºr È3”ˆ #0–ÁçaCiÂÄa8¢‡µ"pˆV  €,· ]éuô]½“²uðÀ¹@ܳ=¯)û”$TLΓgþ΀?<ûÑÎwÿ¡n0¼ßCU ^4 ‚¶€ø€ïῘæ?ÿÿà#?í³ ù ü±ØW˜Ÿ¬$þ÷4qzë9Ä0ü9ý Üþìð¯å€ÈÀ0>D% ìô8nîjâþ[úÑ*m»šãÔòÜÂxç'†Ð,F²JäþCR€-ñß®XPüøayOIWGA[óÆ–Æ-õZ6¶6Bü¿±«¥ §­HÙ^ ÐKÿ þÌÑ’…ÿ‰äç“j? ’/¨âgÁæa±E/±™$N+DþŠ€§*â­ìÆB¨†0h $ OSÈÕà²VY ƒ¶L3 Uv :;xÀÿƆ‚ºÚõÀÿ¦¦õmªô²u±Õ¬p;ªÞúˆ¿ ×Z§£í4ÿü$øŸ ·Lù!øoAðwÖÇlõ!SµoXáU—9$6¥MJì(±v²­]ÅŽn¶³‡cï…\€ëSqƒ…£êüýº=öµ×yW®¸#ºìÞ‰¥Î,{dóòÇçV<±sõ“»Ö<¶kååkÞ¶þÞ-ÏMœ+¹5ƽ9"<–Þ*;,;ƒì +öE«@Gþ`ð«¢ùx¤,×Ä{í@¤#hOTHøOÓ°-$! JÁ¦}B°€1oÄÁ Û9è:€•çµpÀ\fŽÃXBR«ŽmÑrÌ|¿O'æ_%ÌŸ©ø¶WüéVOàÿD¨i4Ò0ižŒ¶ÿ'ÃÍ„ÿüOÆ'¢ áú©`ÕL@¶%ÈÛ*ÚÙx"²èìØÒ»§=¼)ç‡;²_ÚŸñ›ëÒß8ž ð÷3YÜ•óñ¹ÜOÎÏÿìüüïÌùàLƇ·e¿{ ºlûçëo¦^ÛÃxu+ë¥IÆ QֳƓfê‘!êžNêL-ãF1u ˆÚ¼”Ë¡Ü dŠaBÓÿÕL,d 3Q¥È˜Ê0¥1Íé,k&Ë–Å´e£¢#—räPÎy¨SÈ“KE–RÓ¨½æÍõ™wöSš©†ÿ7Mý—€>¼ñù]iÿ¼7뫇r¿}láwO.Æ» W|÷Ôò¯_öÍÐþ÷Ïï[ðþ¹ù4ÿŸKyh<åêuæô­ƒ9á®Z¯ ‘?|ÿ~žV%ЫùF­Áß(ÕyÈ]a?ÅÀ Û&B-`#þÖ¨·9ànðØk¦J³^¡WË5ƒeý=âžnaG;·¥¹¸¡~cCÃú––‚ŽŽ"ÈJ Ã2›¥Âm¯!ü BDŠp̧5n›µNø[Æ=M£®†¨½>lEÁ¿[#wH­J!ÀßÐ^bl-6µ™ÛЬ%¶ÎbK7Ç¡ä¸ûŠýù#ƒkg‡Wí³­ºÑ»ìöТó±ùL.øÁì‚§æòžÝ¹ø¹}Ër`åO.{îÀŠgö­z|çÚ·®¿¸)ÿ®‰¢³cÜÛF„·D%7F¤GC¥CTî‹Ô€G*AÀÿ#ÑJ,)ÑÁ¤5´;&Û•Òõàÿ•‹qþ', ,ÙA €†Bxù£.NÄÁ Ú¸è,ØÂñš¹´XQÀF£Åõ4ZÐ(y b'üÿ9ð?깊ÿð÷u ÿ'ˆù@~Äÿd 㡚É`ùt@„6Z6^ç[tsd d'²°%óÇ;Ò_>ú›#©@ù÷Ó9ïÝ‘óáÿç~r×¼îÈúèöœ÷oMïDÚßnfý忝c¾~€õëm¬_Ì0_aüÄG=ceþ@üԕvG ë&1upCÖ–%ŒH:å¦(â?Ci¯ÆJÜG  c2†YLCjŠ1 Ä4e UÂæ,ÊœAY³Pj`Ë¢¼ó©ØJt#ìpyÖíÔ½:æÖ £Ô¯·Q÷­S9oÜ”óÊ¡ôç¶§=2™r.”vƒ-c‡67¦\ähY®©[­¬XƒÉ¿¡«b£²2Á¿²¨¿ª‚à¿¶&©òùoiFð7·iþ;:E®n Í€?`Ÿà?¢¯ˆ™ËA£&¤1³4j;€@5•b @®cF)’à/1HG&HI½(¤•ѹ€·OâéÇ\=BWÂèãC3›æ??]ô¾rîÙÈþ'ƾAðωýG)Wݯÿÿ”¼ä}/`¸_œ\ü×õÅ;?ÿ(òOÿ×ò¿Yü]öCR@Dú‘ˆˆ \‰ÿ¯†¿²‘Û×€ÔßÈS5ñ¯¨¬ãá/äá‰~ã ñ?"òM {_‘£¿Ø9Èvj¸nõü›QÁ'Îü„ÂVB~t K°" w~ ÿÕ*¶ª¯DÙ]‘sSÓFiS-Šÿ;š {ÚÐUžö\jPŒXä1sÈ?n) ˆ™K‰¢&0ÙXÀˆAVIÄ&‹ÚKá‰.«’íäXô-°ˆ£,€tÿéøh ¤¿ÐimÍolÚXß°±µ¡ £¹¸»íª ÛdÈö•S•€ìS@‹Ô¨±Ÿ¯WFä7‰AdÉŽ®ŸOÿð£ÌZ¾uXh7ˆ ÿýÿ ?iÎÙ2ÞC.€bÈHÇX°5æk")€ÓZm3Ut º| _–HŠ€ÿ`aJ%W«™r§½Úçª÷{ꂞzø±@6ÂM)qÿÑy¥¯yÄÝ¶× øë.u™¥Oð×µk †ê7jê7hÐs¸qƒ¡9\ÀÜVàhßàí\=Ú¿r‹véë¢Þ…gƒY÷Œf<2úÄ–”ïÍyñpîϯ[øÊ ‹wËÒßݼì×ÇW¼rýŠŸ]õÜ~HV?¼uí}³ÏMžçÝ:&¾!Zv8¤8ªÞ¬9© WÐB§Ã ¨´7,í‹€(à¹+$¡âOèJðä¿ê „D6Åã5ÁÜäÛx ·Ø Å`xµ¨Øm‘†¬eäÚ`?™ÿ>«<`W„]Uw5:©ñÖÅü #Æ‘p=ð_©nÅ]@ÍÀÿÑ@ÍX¸n,T Áw«‰xÊÃ.QØYväïp.Þç^|,w2:ÿÂxÖÃ3OÏ¥q0íÕìß]ŸöæMi¼s{Æû§3>8“ùÑéÜÏft&óÃ3iïŸJxë&æ_®cþá ëw»(°€Ÿ0Ÿw±žÒ¥>Øz¡ž:%Î>’ÏœÃW¼ÌøaàÿP|5 óŸE²€øÊ0lªÄì¸A&*iÈBa|R`N£\ÙTlc®dÞõ•Ô™Ž´KÃO¹Y?£~µRÆ;7¦||{ú?Î¥ÿûþlœ,ÀU eß>¹ì»Ç— ÐyŸ^\ð÷;rÿxköo®KiÆS[Rï˸͛uÈœ;3˜çëZjn^©®]Õ]µñ ÿ« !øWUV•àµý'‚šÿôd~:þwõ ›¼¨þ£!Pä7UŽ+€ÿ£Öò1›bŠ4i«˜´+&lå£Vø\ž<ç<>íÐ$7ˈð,¬Rä YdXÒJpƒ¨„\ Wèîá“D\ÀÖÁ3·s€ÿè›8„ÿý5…„ÿh JM!>-ŽW?š øç ò·Ä+?À [YûÎ#õrþK”Ìú ˜®OBDÈOŠ?4ÿŠÿãý?üîÍb8òç£ê†r šÿ½Mû üù‡Z„ u³p¨I@øO_ÑAÈO¿Gð ±=j, Ç«çÍbÿ˜Cà JFìh;ºÿç¿”æ?$õÚ‡‡ÕÌvWWæACc~{SQw§—Œ×Cãµ…ôx=ºŸv8±RI'6é$ £VlÖÄ×+à Wø /Õâdø{¬eAW娿~*Òäß:Ñ=7Ù»mªhë„rv´kf¤,`<Ô ´=>WƒËVg1VëµCƒe}½’î.~[kIKKÿ}}Üa­„ðßë¬ ¸ëBÞàÿˆ¿y<Ø üŸ BØß6hÅ#wCÄQ0Wû .Ü: 1tó´í%héy݆šuªÚõêºõCµëÀt`M…æ–|[ë:OǪ¨rÙ¦¡…û nrçœ ¦Ý;šòè&æSÛX/ìÏxùXÎ//øÍ­y¼uÑN.}ãä²×nYöêñå??¶ì'‡–?³oÕåk.mÙp÷¦â;¦x'F%×GJ‘*0ù¯q„¸D*ÿ„Ë@ûC¥ä.Ø•ø?QùIX@œÿ[0ügüÿs’ùª@6”`þ—@ à4qñZ©ÏQŠç¹•âÌY‘×RFó?ì©ÑüGs6¢(ÛÂÞÚ8éo˜ÔÿG‚5‘@MØ_ôVÝå§(`gû­›lK·ÚïóäÝœ:šs÷xæÃ›Ò†ÏïNq_ê/§½v,ýãé¼}[æ{·g~ˆ¬ïÈøøŽ”β>8ÍzçVêo7R9F½¹ŸúívêÕiêgAƬ)—U)÷·1î”gÞÀfîZIMæRþTÊNQ&CÏŒ—€ñ<P]%&V|ƒÊÐZÈXFeÏ ByŒ™õ™G¤ÔÉú´{ú3`Iàç3Ôïv3þz”õÁ‰ôOϦýëbÆWdûèã2~´ Í8ȼΖ»E“R.µµ.×Ö-SÖôTüóÑz—jP Àâºø“àþtäOøOâ·Rq@U ðÇeŸr ÿ¸I1f,±!øÛ+ù§qþ¡™·Hxá…tÌ.›°a%v‘%¶20…¸ è¥èŒµ IƒC’À€Èׇ†ˆºÑ¡dNwwq[{qKkqsKqWk1À?~«Á?>X•ÑThišíP@œ7k¤­Ì¢—Ù†eV~WKAæ! Ȩ B}¿Ã_`R‹,Z‰}XäЋ]F©ÇŒj=N„š6´üù;fvnRÁ´}ºn²ó˜,`*Ú9n ùZ|®&»¥Î¤¯Ö(T²^¥¨³“ÝÞ^ØÓS¢RáâIá²U{œÕ~W-ð?êmD)²€8ö!æ󴌺›cÎÆˆ½>d­õ+ÝÚrû Ì¨hÛ8ƒMEýµz«×õV®î«Z‚L|°f-ÁpÝFSÃFkÓZWëòP×â©þy»‡³®·§Ÿ°îc>¶™ñ£]Ì—Ž¤ÿòxæoOæ¾q:ï­SyoYôÖ™%:µøÍÛ–¾vËÒ_Þ¸äÅcK|pÅ»W=4·ážÍÅg'¹'FE×G¤‡Òƒ`ÁJ¢C¡ªC¡âB•À ÂåÀ|,éþ°x_H„fD þ‹wà‚ÝüCàï Š6cø“úÄÿcnn|4´-ˆ ÙyÄ\f¶ËÌq[ÐÊ`¿SpÉã·K"Pÿ°å ÿƒ.Ü©ë® ˆúPªA>j 6ƒ·ŽzǼuc¾<¨*è­ð{+|®r¯³Ìcº,Å.cþ˜yÙ¤uéVGÞÏÂãÜSÑ,°€‡¦ÓŸ˜KÿáöÔö¤ýü`> È|ûdö{g2?¸3ãÓ󙟞Oýì|Ê'w±Þ?E øÓQê÷{©_o¡^aüÔ“úŒ>íÑ^Æ=µY'…Œýë¨Í‹©H&åf¢51&`•úG¬ÁDä¯b\Ë>&V3˜˜ÿ,=Å23)[*˜GM®LÛÇ¡Ž+Xwu¤> c=é¢^¥^ÝÊxóóíã)ÜÆúǹÔÝ—ñÕCYß\^ðíã‹¿Kðÿß-üü¾œ_ð·Óó~<óÕ#™?Ù™qy&ó\$ëFwîN}ÞHÿgÛR}ýb„Çšà$Ú^S‰/ð娧tÄ-‘U_ú¿ØkEõÿ8ÿ5hƒªŸ«Tr;»8í .Šü{C}bߪ&(ÈÞãÄ4(È[52›¶Ô®+sêËÃrxA_ªe¶!©uP2ˆLýBcŸ@?À3 Ìþ`§Að€1o- þþ@þÝ›‡@»fAØ‘Œ÷n홎u†;Àž&‡µÖl¨2è*!èïõô€…±!øWkDf}™ÍŒš?½ŽjŸ³&ì®xbÞÆlc–qo+ÄÕDà´ÔúMÕîa…]]j†'<€_]AWåšîŠÕ]ŠU=ŠÕÊŠU ¾êÕµkÕUëôµLõkìKýí‹Æ”9;4é×YSÏS.M¢àÿùýÌWŽ¥¾vKú›§²ÿr×ü¿ß5ÿ½s‹@ïÜ•÷×;òþtzÑïOæýú¦Å¿¸~Éó‡–?½gõ#Û7Ü3[pÇ4ûä8ïx”{4P:,;RU ¨:B7ö‡äIð€ðÔhÉΠh{"òøoñÓ÷¿D³þS^áÿ¸‡‡v»¨Ô)À;Âx;,Àcåúì‚€St–†ð¿à?Ùüw›¯ðßg¯8«¸êÈŸsØ×AþH þ´£ðÇj#žÊGô•û½ ¯»Üí,sÙ¤N3Ïn(²ê× Ë#&dsÎEÄ 8?–}ÿtö#³éOÍ¥=·;í¥ýi¿>šöÆñ̿ܒýö©´wÏf|t.ã³ iÿ¸;í³ó©¼w;ã›Q ðÆê7Û©W&¨ŸXÏZX—©KÍégJ©£…ÔŽÔø<Ê—BÙxM0ÞK:Œ$aþ3®ðŸ”†4x¡0Šü)†…Át¦0<éèrÁôrÆÞBêzãt3óÞê²z.L½¼ §ÇRÞ=ÁüôŽ”^D¡¿y$÷ÛË‹ÿ_òÝcK¾Âk?¾°ð³óß¼9ûWG3РÍY÷ŽæÜê_°Ç´hbp‰§c±¡~!®£8YUSDø¯©FňüQÏþ¸æù®}‰ÐL,{—(qLìSÉ‚jtÏ+ª—šÊÇ-¨ÚïPL¸*§\U„ü3.°ѤKN4å.#š9KgÝòÍžr¼€¦]¥SNÙ$Î&,¥ØdQ-²€Ð © =}hÅ$X€¤­%ºf”¨ê®ŠÿA5ñ9ɨs÷Rÿ»[‹ ÿ•e€üýÊÄå/Òüƒ•¼àêÊÏUüOîÿIâ¿àûøO×ÿ ÿûÛ¾×úš¹ ñû[*à[Ä `;_Û*%ҵɒ¥ÅÒ´JÉ÷$ðWcþ 鸠À07˜þ ü'¼ ДW>é/ŸðÉAcÞ2½çøï·KÿNÌÓ°€LãRñûû=J~W7¿»ݤV÷K4Rí dxPª’Ô¥ÆA™I-5¡ð^fÕ”ê]:¹{¸Ü£Wx ð„wøÄ¥-s¨eö!)Ȫ[Dæ~¾i€oD#F­Z‘M‡FOC ¤z0h€àn²h¿g‹zÿ6ݾ9íÞ­О-ZÐÎMCÛ§UsS[&ú&GzÆ"¸íõVSq¸B£)S©$}}|€ÿà@7,5dÀ·­Òc¯ :kMÀÀ@iÄÛó4G\agcÈѰÕùŒ5}•CSnw !Ó¬/è®Zß^¾ºM¾ª£lU‡|EgùÊîò黅 UlÔU­×׬¶Ö/õ´,ˆvflL;jI9f=8Í|v'ó¥CŒßÜÄúÃmi=›þî…y]œÿñ= >¾oáG÷,|ÿ‚¿Ÿ_ðÖÙù<•÷ú‰E¯B"pxù÷¯¾¼cÝýsf ÎŒm¸%*º9">F­A7†K¯+® W)ÈM}Á2Âÿ½ñž°)„à¿# Ü–óÇÉïA›å7yxèéã“þO€?áÿˆ›—ÌH°àe‘NQÈ- {JÃn9ÿ5ü'öíµ)üŽJdÎÚ€µ@¶ôV=èÏ<ä¨9kCÎꀳ-†ó”y½eÜé”Ù,"³¡Ä<œoÒ®sèVºu+BúeãæÅs¶…{ ŽùæŸæœåÜ=žõàLÆ[3´UÈs4ó÷7dÿéÖ”·N§½J>?ŸñÙ9TfùèTê;'X¾úÃ!ê·;©Wf¨#ŒçìÔcêÁ¶”;Ê©ØÔ޵̙¬`*å½ q ÀËâµ øÓ÷p.ðgBj EÇÐw61fŠádR~€5¾Úº‚ÚW€îÜ^OÝÝK=jA#)~6Eýj'õ§Ã¬·Sf|qž¤¹öûØ2Âÿÿ<²ä‹ûtwÞ»w.üÓ‰y¯]—õâÞŒ§¶dÞ?žs{`á뢙¡%þÎ%–Fà?þ«ÿÕ5% m [WË¡áOóàOÈrâ{º“åìAãú¯æ)æù„U1î¬ üŸAª µÉ­˜ö€ä o9Ѭa‹W±ÕW/ŠY¯|Œ€$S6ù„E>fÅt’ˆ]ö«Þ~±{ÇÜŽø?Ü‚R€Áú"’àaÀ2*™\ª%üïÂüGj+éig#ur”]ÜÞn^_?ÞÿIÿOT¯þÿárˆ¸½ Qäç%÷|&:€ü‚køO'Á?ÎÿÁ Šx¨Uòÿ1öÐqUWÿöI–Õ{·zMQuzïezïEšªÞ{·Ü» `ÓllŒ+°15J^H„„4 „ªm}ûÜ+…Éûþ¿µžu×µ#BVÀÏoï}Î=¬Nˆð?²ýšÿŵY¢Ÿƒÿ$ àUfò+¼ò äo£ƒÈ¬ò›*½[ËB•G6hŸ`ÈœG¼ à¬ÝùˆN&.üÒ+24ÒT¥}„%¦ ùiNZk[ZKk ःùE¼L1™_.Ì@È_+È^•¿8·C’×)Íà~iæÙ:KËÍÔp2Ôíèè`5?̯£áAšÖ!Ï0«²ˆÝãC–ŠÉÞúÙÁV(ûÁü[fÄžb`iRÌñgGyÓÜ‘þæîF»¹¦CW®Q)el‘(—ÏÏärSAþBQ†TÆRˆ35òUÿwª MT‚üíP êËqó—ù-šR“ªØ(+2ˆØ:AŠ“#iÊäW3[K“ ck󢪲Â+Ya•¬VhMVðj äGprcùÑÂüp);@[êi­Ù0Öî´CAyÐJ~j»±€½¹“ôþ!ÊG:|ÊåóÓn_œÙøÕY÷ožôþúœ×—g| >{Ä÷ã‡ÐPèƒ#þÿs øõ]!hQx!üütÄ㣡'hÇû¨Çz’Ñg]L‚½VÖ.KÎ6 ø?gÙœ °dËZ´²ÀüÀ¼üŸ1kNŸ6§¯—?Ò¾1b Ð] Âÿ½ `ÕÿºTüv0&ZÖ ¬ºT«!ÃÞÁ²wdƒÿmZá“’þ7ÈYe–Q• ÿ'CŸeÒC”†‚N]! _€Á¨Í6è2 † ‘¥Õg)Õér9]&N” cÀÿrá&¥0\/ ±ˆƒú¥þã ŸÏ6ƒç³×ývÏGú=θC¼8çúæ·wwz¾ÐåÏGÝ>>îþÙIôQð—'=¾:îñÅÙðÑ>Ê;°ß-bob¯w“^БŸcOÕ’*À0±íqN”nWÌHÂÔØj÷ÅãWÆA€öùë¼|ŒÌG_ PDøÀOBã %£E„nwlÈ› Ä#±íIØþLìÁ2ì±Vì‚»fÂðÁ°÷·‘þ¶ôÙ1òW')ÿylÃç<~ºà{ûRàËw.þÿü1ÿOòûËïßíñøÕæÏNºð|Àæ»C8! ²4ª+}¡B†ùs‹“ò—Бü×¾ù"Šÿõ•?ñ¢mDçó8üßÑž þ·‹Ñnb·ÃÿÃ6 ýœ¼1c>´33åág÷S¦‚isᬵhÆRH0m.˜2¡,€\€t€Öä*rz%™Ý¢t;?ºs;ŠC ZU=jÄUIhT–ÔZ’HøŸ¨ÿïú¿<±¾" 6¢7àþGÔ%x0[SVAÍ ‡ÿw¡¿~î¾cþψߘñ‹ JzÆzÖ†?«þ¿g€˜ü€ùÛª„ÿð?ÈßáÁZÙœ¿®æÇµŸã@P …" "Óøäo•2»2Å®IëÑg‚ü¡Úí¯gp â ø>SžÝ˜kE-@–A‰·èB®LühåL€Åáfq¸Ùa~‰ K*ÌFæå*DÙ*µ0['ÌÑ‹VÍO@øß$Éïç!9F^–Ë‚ÐpÒÐ]!Ü­0Ý A·ŒèªJE¦EÝ¥Ïïë(±UMõ5Ì·/O¶N‰¶ÎJÖm™‘.OKèæÇcƒ¨è²Ôvê+ôšRµ¢X,Îÿñ|~º@˜.– ÿ+%,ð¿^•С*;™µEx!Z ©ES5?˜¿SQb²µ¢| äŸ'mfñázyrCa\MnTUö¦²´òôÐòŒ²ôàÊô ªŒ`HÚìÖ¬è¶ìHNN¨0ÏOQìÑYé2ÚFúÿîÿ°ßìÆ>­»#üõ?êîÊ¿'T‘¡“f !ž< Ð*Ï5*óñV«˜À ÍשóuÊ­"ß (Ð)st–V›®Ö¥ªô© mªL‘"“Ѥä™0J,ˆ‘ð7)ùa:~YÐ'ò“zÍ(<¶ê¼öuzÜow‡.àü°ë3“^^p{c‹û{{]ß?àö—#îÿ<æù¯<Ñv û=??æýÏûÜ?ÚçòÁvòoç‘ÿ_í&ßÐcW¥Ø…:ÒÃlìp:¶;Ée>Ôµßb¢`zìn ªžL‘PÈrô!0~^Tþ ' F’á?©£ ù÷xÆÈsaØrüwbûS°c¹¤‡ªHOð°+ÒóVì•aìíYÒûÛ(Ý‹ýë(åËä¯qþîŒûOOúÞºüðTÐ7gü¡þÿä¤?øÿ·»Ýß@þw=7àqÜê»S0) în ÑWðËМä/(AÇãƒÿÉzÿãÅ¿ãÌ7Çäg½ÿñO€3ˆúüß-Íî•g»}Àÿƒ†Bðÿ°™ÌX8ÞQ@Ú7ÖU&mÈüóö’y{1ÁBWÉ|{οφ €¦`ܘ"ºy6Nª©éh”u4 ÞðË©m¥hDøýéÃOÔ¬-K¬+Gþ¯¯JlÀ# ¾&©¡– 4ÖÑê LhP4щø…ÿ3~Vÿ79º€4‡üïò‹p4÷pÿ‰pÔÿ ÿ5V‡?„ü…Õãò—Ôe‹î|q]®¿°&EÀ:ÿ ÊXv)Ý*¥Ûd ð—6½×À"ü?lÉ_Ïΰµ`КôY º;󡜳è mG U²Ô â€ýl‘(›/Èå òøü0¿L”#ç*$yJqžJ’«–æi¥y:Ižê|iA§¬Ð$+XE’o‘:°J ,â|tx?R@ÇËÐrÑqñz1únȨÈBst6i–]—×ÛÁ4—w×Î6/ŽrAþÛg$;f¥ÛçeÛç;”ðÜ6'‡€F`qR47Æjîké±Õ›m™ZÁ&ü/dˆÄ™i¦T–¡’BýŸÚAÕ)á Û¤.´h‹Ìêb“ª¨CÁ òù«ø9ж¿ .­­‚VÏŽ«Î‰,ÏŒ(Ë/N *IÁI ,Iõ/KD)ØÑ”ÑÊ âeûÈØnÎcíλTÎ'm”‹£ØKKØ»»±Ž?=Iúâ1ÊwO¸|wÉõǫA¢ÛÌ/øÞÿÛ³_>ø¯SÁÿ<ö§ûÃÞ=úæðW÷F¾°#üêb⥹„'§K<5L;>z¤7óPoÎ[Þ6 :/h³9oÑ’7oÉ3çÌ™³f;ÓfLˆÉÎUóCå ëiÃÚäa-}PK´´>­_Oï1Ò» ´.ºÿ[5 „Ži7¤þù›uùwÈÓ øæ1ü¶¸Tµ$ÐH² muÊ<½ª@£ÌÖ(s5ò<­¼Ol*C¥JQj˜r C¢¤‹4©4ü/Ç‚ÿ…‚X7RÊ Wq‚ \ ϧWà1*Ú8+wÛªÝx s㉮§ûœ/8]Ÿryy~ãÛÛ]ÞÝíŠÖºþíàFÐþ§÷y|rÐóïÜÿ¼Ûå[É¿™ÃÞÁ^é"]ב.‹±‹õØ#ÅØý™ØºÛÒ¦ƒÎV úL‹G”ô*2Eåä¬vvQmÀÙHQl H)t‰0’?EN"ƒüá';œ0»iÄÏy1Âu{œË^*åHŠËÑ,ÊÉbçÓõ.ˆœ¯œ_è"ÿjŒüî¢óÛþ¶r×ÿ§Ý~<çóÓSHþ·/ãþø÷£Ÿðûóa¯÷v¹þ?Ûïþߥ ˜‡ô´jýåh«<—? ÿ“ÅÅ4)>ÿ!ŠÂÿkgþcÿ bþchÍ Žý7óÐ ov1«G–þÖþ1tâògƒù': d~K!8˜²³ @þ ]¥‹Ýkô ÝEÀœ­Zˆ€ È]>=âÌ.!¾ÐÆ$Zm#h$Õ4a%­½,µÅ«þ¯*Ž«.‰¯)M¨-K ü__™P¿àœäºZáhÐr@# "`½ÿ‰‹€ïñ¿¨9óÿòÿÏ# K>ÅÁÿÿƒöÛ«™œšx¶W§Å¿ –EøŠ|ášü¥õ9(Ö9_RŸçxù¯ó?<³„åYàÿn9°ÃS™Ú£I0d­ÿkµŽÚ ŒØ †¬yý&´@u& ]Ô«fiU9ðGU%ÕçH„Ù8¹ ¨ùU’|­¤@/cdÈù’“´Ð,ɳ»%=Ê’nE1<{U¥=ð‚Ó-/ê•uKòí¢\›0gõ,qAšY”a•eZY€?›ÔªÂ‹ÿ΢A[åx_ýìHëâÛ´ü¿sFºkV¶{N¾g^±{A±sN¶sN±}F¶<%[M ñ†{[ûºmæ:£¾T¥*”Js$Ò,Tù‹3dÒt¹,C)MƒÖ´u)øß¨,ìP :•lÀ(/ÔK ub¨ü‹T¼BY[®¤¹[“Õ\ά+¢V䯖eF§…³!…ôàBF`#¨˜ ÏzP3¤<%´2-¼6=´1Í›á¦Êsî*ÃæÚ°CJìq+öôöêfì½=Ø_Ž‘>>EþêŒË÷\Ñ9ðWýÐöïçÐ!×¼¼êõÓ%ïïÎ{~ó„'~¤'¾"àó»û¼ÞÙïñÆž€W¶ù=¿pu*øÂxøÙ‘èSqö&êfî¶el5ç,™òL…óæ|ðÿ¬‰5ß‘ÌtÒg:˜S)ãÆ´Q]Ú°.}P—ÎïÕ%ôêâÐS›Ü«IéÓdô©˜ýê~Ù«IëV§vMªUƒîˆ‡â߮ϰ–¿*”89É_š¦¥A+§¤*øir™ÝѤJ™¥VeèÖüÊøÇ¡§+iJeªRÉT*é€BI•É¥²‰4^"Ž‹bEâ?RÈ “´‡ÉÛ•m¡N¨‘n—lP„ÍèÃwZBŽö=6àwiÌï¹)ÿW=ߨâù›¿Ýåö‡Ý®Üãöá>Oà{Üßßåúîò[ÓèB–—íØu ö´ê·ÇK)da騖(lÜëuÂl˜s'©C%½Å ³xbf/„ݳºaFLí„))hÁŠF†ÈèÛ€Mùb›#°=TìP”ý؉bìÑìL3vQ„]Ób/ÚÐßú7ÓØï—°ö`;ˆ}|û÷ Ò×¹|vãܺè±rÙÿÖE¿žòûê ´ô÷ã>ö}o—×KîÏO¸>Ùïü Åu§ÆkRÐÝa¬ —WÆ ‹#ìhaq<ºçÍб?’òÔÕcªRUUiêêtMM ­gº†Lm}¾‘ehau´e›¸èðg³0×*Îí’åõ* 4ŃºB´øk`ƒÿG:Ù#¦‚Qsá˜eµìŸî*šéfÏuÝe±·d©¯ts¢¯x¹¿ž‹=ì¥Þ"hÐDÈ”?aÈѰ•éýòÌIšŸbæÐ;ÛhÆf𮉠¨M–Ö$ «¨¼JtÎCkiRsiRcq˜—bmER]%µ¾ŠZW½ h¿´Ô8V„ÑΟuÅ?q# uK† •E naA   €^` A#j D éÂú4A]*¿6•W“BÀ­MçÔÜÝ„¾ ¨f:®‰l¬º»"°êˆ€¿÷š°6­i5äHsÅ 9↠®»‹°&WX•#¨ÌùóÊY¼ò nY:qíT—"üß«Íÿ3Bþ#¶Â1;{Ì^Hàðÿ€9§·3»«3 üo1d›tÙº½&Zu"_%˃‚_*Ê‘‰ó¡ìù«¥¸üå¨Z6ÉÙy‘UQlSÛ•%}ê²~M9ñД÷˺¬OU: ,í“÷H С"Ââ,Y$ Ë®ÈêRfÛ”ÙV% RÀ¦ÎéÑô›ÐΟ‰þ†¹Ñ¶å ÈŸ0?!ÿ½ Ê=‹Ê]óòÝ ª³ò-Óò¥ Éô0´¿} §Ùn­í4–k4EryžT–-•­ 9G’ª’¡é„A‘‡FÊB£¼ÐKQÿ]ŒF˜§ä+yùHþ-Ù¼úœæŠ´:6­27¡$3º0-¬’G , å'…´ BZÀ¦B@ T¥5¤úrÒ7‚ÿ{ÊIKí¤ûT¤3vìÚöúfìwû±î'ò0åë³Î?\Üxû ~Øó+×W®û¯<ç p럯ø|Ñ÷›sþŸŸöûôÑÀ¿Ÿ üËqÿŽù¾{_ð›û‚^Ý|c1üÙ¹¨KS±gFãO S÷Ñ÷wen³fCýïðÿLgæ|GÆœ1uÚ˜2e`NR'ô©#ÚôAMê †Ù¯IîÓÄã$öh’{ÔÌUZ·ŠÖ£¦#´)Ä`v Ó¦ÅWõ)vCªÕ˜j5¤›ui&m:ÚªJÇ埪§h)j>SÅKQðSˆ V#]Ü)ÏDHYðK©$ ISòT…"E¡`(4@®H"ü/–Ä­ú_Íçm´‡‹ÛBÅ-!²æEs°¶-Ä$ï–„Œ©B–Áû­þ'º}Î z_õ½1åöÒ¼ûëK®omq}g«ó{Û6ü~ûFàw;6þv›óÛ‹ØëØkƒØK6ìy-vùãé2òñìp ¶=›òCþ·bd3æd!¹XœÉPÒw{c½~X?¢ß‡ÔëM²x:6’u(¨;ÀHzŒdq&x’Â(»ȇÓÉÇó±Gʱ'ê)¹èïòœ†ô¢…ü«~òÛh⃭Øßö‘þqû×”/¢|óø†ιýxÁóÿðÿ¯7{\ŸÚ@ø‡Úù¿=¬£>BZ'(Žæÿ…ÅT|øÏ„ù;?×ù?C[{Wû†¦Läÿvø]û"Ìvø¿_]4¨+Xï\þlð?Ȫý™îâÙž¢ùnÄ”úkòß2PŽSJ),õ– FÀ^Yд:h[‡ß}ŸS=¾g|/ »>3îzcÚõ¥9×׿œßXpysÉxgiÃ[‹”7f°WGÑ&ü›fää«ìRƒÓÙ ´|,Û“€Íbƒ°. ³cä.'J¯›Ó€e8€4‚J &Qúý)vo²Ùƒ¢Û@ÒPÐW½nØt Óö8—ûR*t:]M¾ÐJyZèò¼štSOyÍæüë§wÆÑê÷’þ²ûç!Ò'ÇHŸŸpúú—oÏlüñI¿×­KÞ+—üÿ/ø|}Îç³G½ÿqÂ÷ÃÃ>ïíò€úßáÿí* _wKHG]¸´*IPËgÇ:ü/)¡«óŸr¦¢"ü¯ªIW×fhê2‰ÿ Tü¯ùŸ8šð¿]šÛ£(èS±ÁÿáÿQSÈÜZLÚ ¡øùÏõßcþ­ƒÛ†Ê ¶Wð²u°lkéroéæž’Å®ˆ€IcDÀ*{5„iV^Š©ih¡¡  y]\CãWQ9•TtÎC´ÈüõHþŽXó?um *bþC ˆà·;"—ÿšÿ_úß÷øŸ€ð?@\I@ÜOøß!ÿ5˜DñOøàþ׳Äëä/oÌ#6åþ—5þ¤ …¿ô?}ª4âæñ^uz¿žEøØ’?j+$ü?ÞUäð?þ­ùýæ\ðWg޽3ÏÞY`6æwêó:¶^ÍÖ* U2á½¼À€f&E ÿ.uY7˜__5¨Cæë¨ï¬s0i¨ÆuÕcÚªQuÙ¢¸_ZØ+ÎïçâŒäô)Ðwåýšü>u^Ÿ:· ‚@›ßßQ4l+Ÿè©›nÙ<ކ?Pêƒö÷/©ÿêËfõÏýÏäõµöØê­æj£¾T£*P)ò”òlÂÿ1º’þîhZ‚>LЈrÔÂl• KÅÏùËÚ³„-™¼ô´¥2µ®,µ,?©““‘Me%#’‚2ýÓã}3â|€Ìx_V‚_V¼_v‚n¢_Õ§ŠîÙ–îª)plåQŽiIçºIÏO`onÁÞ?€ýýåóÇœ¿=ïzëŠÇíç¼ï<ï³rÓåÅÄK~èyu(®B|!øÛó!_>ôïÇýÿñpÐG'‚>8ò?ûC½+üÅåȧg#ŸœŒ}h8þH?c¯-}‹™µ¹3w±3g¶#kÆæÏ™Ðek3ÀüÚ”qMê˜:eDÉVRGTIÃê8`P“0¨NîW1û©VM¢UdÓPmà|-j~ü˜õ«˜tŒ ÍH|,cj$tNܯà¢Kaäítik²¨•&lI“ÃóбÞ8) †DL—Jé2M"§ ÿõþ‰‘ü…‚h7RÈÙ$jß$nµ„ËÚ7)yÑjþ&ƒ Â&V/hvýXýOö>ÑçþÔ û•÷kãî×'\oNlxijã+Ó_uyušòò8vs{¡»Aø_FºÚìôT-vº;‘‹b`ËáØ˜'6àŒõ»Ý(ã¾NSÁ”™Êì&òLe6Úi>š4E ÃHÝ~d“fÜ€™\°Aol!‚¼îü`.Èßébùš„ô¢ÖåU öëòo†ß›¢üa‘ü§mä¿î%ÿŸü|ö ù«‡¿}|ã÷gÝ:ïuë¢ïíK~xýïû#´~Oúþû1ð?Ôÿ^Èÿ›7^ŸrA·X7ìT»O|º›;jBÄUɼÒx^Qšÿ#ùMØØøÀº«ðÿªüJ¶ •ç ç;F*wŽV FÊw Ul,‡ØÒW)]ÀŒ¹"`Dƒ" O–ö R-\fG­41 tIm2øŸ[•Ü^Im-§6•£#4qÿã“ÿ*jCu2€þwëÿUó¯í¢Žá?øAìcoÏ$æ?ÿÕÿŽâ_Üøÿð?êÖ>&ˆøùrÀªÿñ±O áAm†€¨üë2% Y¿”? kΗ6òÇ)$€.EÀóÿ*š ðÿPþÿ?ý?d+°äõ˜óP˜òñ1 Lh«^‘?TZˆ-õÊòÁÿ ¶EYl×”õh+út•Æšc !ÿIsôi•cý´¡nJ_;¡­×VŒ)KGäÅCRv¿4å * †4«ôkòº5y}úÂASɨ­j²·~~¸uˤpûŒŠ‡ö›5ÀþeÍÞ%Í®95áÿÙQÃÿ6KM‡ù_­ÌU)rä² ÂÿJQŠJœŽeªDY«ædÉ9,Y{¦¤%hF7>Ã?©¦rfm)£¬ 9?3†Å O§…¤&¤Å¤Æû1c}˜ÑÞ@JŒë °â¼ó½Ê’ÝZÓ6€ÿª¶ñԒσs&°··b$}|‚üåiçï/¸ÞyÆóöu¯;7¼ï¼è‹Ìÿ²?p‡ˆ€ð‰ÐsA·Ÿ ¼u5ø§+!ß]ÀÇAŸ>ø·ã<ôÛ!oì ¹¾zi6â±±è“öÛÛMiKFÖ¼1k΀®˜Óåérǵ¬ mÚ¸–1¡¦Oª€ä Uü¤:nR3¡×Åé¨#jú€’IÿVu²UðiSÑnO]*Úó¯YÝÿ¹v¸`í^0üDhÂÿmTYK²¤)IÔDå7% š©ÂVüp'^€.€@7AÐÅ"ÚzÿK÷Öÿ„ÿü7ZØ%h‡ s¢åÜX/FÍ‹êlꑆ)B5‡ÌÁ'm^t{?Ñïóä ×ÅA˃îÏ »=7êö¸ë cN7F°ýØ.ìº{VG¾¦$?Ç#?ÝŠ=U©ÀŽç `>õ@)0åKš ¦,E’·Ä’·$·&R¶%ºlOƶ&’æb±‰Mèó®^?ÌæÙ=ÐåÂ[ãHG2)£@åMŠÝ4~e£¼3ˆývœôÁåOËäv’ÿq€òéò§÷“Aþ_žrúÏc®ßŸqƒâÿö?ú }ÿë÷Ó%¿ïžD›?>éý磞¿Ýíþëå7¦/ޏœêrݧõ˜ûö5tV «Ð9 œâx~1º$üò—°©²bŠRjªR•Ué¸ÿ³óòÇIGþ_½Òáÿ,ð—,¯G™þGÿ®ùä?i/šDòÇ'ÿ½Åó}E‹}E ÿåÁҭèæÇµ_Úß5V¹g¼ Ø=V¹k´bÇpDÀ¶hÊ—»J,ìÙÎüq=Šhz$i«-þ9ø_ÙÈÖÑÕɼj*·šÐR™Œ6ü;vþTÞãÿÄuû_ÐZ›èmÍ Nk Ñ A']ÈaA OY[2‰pøýðX'ÿ”õþ'¦@¥¯}#Æ\øOk5ƒX,?ÉÇý/¬ËD•=ËáÿõòGþo, ø¯þUç‚ÿ×€ú¡ì'Ðf²Öù¿`´«Àµ_D0fgØñ%ÚÔkÉG`.è6³»:Ù–¶IÏîÔ•5Ez%[+Gò7Ê Mªb›ºä•ÿ€¡z´£Îaþs㬥‰`®³q¶£"`F_;¥­œP—CŒ*JFäì!{XY8¬fh ‡µ…(´ùè{s{ØT>ÞU3Ý߸0Âÿþ?°¤>ˆ›ÿಀ—}KúÝóšm³Jðÿܘpr„7ÒßÚ×Õ`7Wƒÿµê|ð?Ôÿ2i:ÈP™ aªB€#R Ñ J> Ê~q[:~é’Kmjce È¿ªˆ^•ÀJ‰L¥†0ƒèñ#!ëO‹ñ¡Fy%EzÒ"½0¢}Òb¼²âÜK’66¥8«ó*)Û¸¤ãì©.ìæöÎ6ìÃCØ'')_qùáâÆ•g½ïÜð\yÁkå%Ÿ•W|o¯‚R`å¥@4ZK;ׂðqß7Oz‰NðC»CûÿÏ^ÿW¶\[ >;-ÀÁ.ÚŽNæ¢!c^ÏšÕgMéX£¸ÿ't™:椆:­NœÓ$,hãu±K†èEcäœqÓ¬1zÆ?¡OUSûÔÉÝjª]•lU1-ª‹*ͬN3©RM*¦In„é”Ó 2º^ÊЊ*]&¢)D4¹€&ç'Ë9èF`iK"È_ܘ(lL4$¢hA‡»Bà÷& 4‘0ù_Pe2*1ü!¸w$ˆñcE"N¬˜'Ä+ù±zAŒEÕ' Ÿ‡,ªC¶êÃw5œ´>ÜíÿhÏénÏ'û<.ö»_t}f€rm{®»Þ…ݰžï <§§¼ Å®‹±gùØåfÊ™ròÑtl{46„-a‹ahEx{<¶‹Ší¡aûä½ òþTlw ¶5›Ã¦¢ÈÃÁXŸúÔk* ÛI'?Xàt¦Ž|UH¾©Å~eÇÞÂÞŸÁ>\"}´ü÷½”O‘ÿ}?åóèTŠ/OQ¾yÔå»Ó<ëqë)4öó#®B ܺìÿýyß/N{zÊû¯Ç<¿ÏíÍ-®7çœ/:?Ú»ñ ÑcIâ=Ôêo©öV€üc¹ì~qZÿe£@†H–”Ф¥¨@»€ªÓ•5ÿ;äÿ ÿ³ÀÿÄ'À]òðÈY—‹û?ÔŒO~ìì©uò_è/¾+ÿ‘ŠÃHõ„ö÷NTÞ;ï•D ì.ß5T±£¿bkOé’=o.œê(„R± €@-E€¾•¡j¢Ëêi¢ºda_Gk¯¡µVáG=T¢3ÿ“óò¯«£Ö×'74ÐéMM 0?!^{·-•ˆxÐwLÜ,ˆhx­™ü6äIkÖ=KÀùÜSÿ;‚ «„ÿ×ùå?áîÚ_+ÀÇ>`~xJë³~Yüþ—7DÈÙø ‚jóÁÿªÜ_úŠÿþ £Ÿy#Ö|BþcÝlà^ÿÛ ÿZ û¬}v¯µ¸Ç\l3[ŒèËMêb½æ‡Ê¿SYòïÖ”÷ê*AþPüOt6LYöç¬Íó¶–E[+°`mÙliY45Íw4Ì®EÀ¤¦R`B]:ª.Uj‹Gul€ˆ€]Ñ€±dÄ\1Ñ];3ÐBìüÿï]Pï[ÔXÔ\ÒZÖÚ¢#ü¿³açòÿò”Œðÿè@ᓱD§Aõ¿B–Eÿ€\Èx©ø¤è´ âêâÆˆïæš”† f]³’M+ÎMÌN‹MM§ÅQc’büäX¿¤hŸÄ(ï„H/ q"!žI‘ÞôH÷ô·Â—zº“2ש¯’¼KyP]èFþÿŸ­ÈÿŸž¤|}Æå§‹n+×¼Wn¸¯ÜôXïÿ[¯®‹€—ð@)€®ˆEë½¾;ïõ2ƒï_ðùÝAï7vú¼°ìa:äÑ‘èÃ= ;:KúôY-kZ“5¥fhóFµY㺔)mò¬.nɳ­#nGgô.SÔkä.køvsèSø’9f¾#~Z?¨NêWS»‰6y²YÁè”3;å©2ºØ ¡éÅt¿RHW ˜]̧‰xÉbUÔš(nN6&ëãE ¸üëx‰üf*?] ?yWþh«'ø_¡¤:ü$ ¤ü817"óKxñ"^¢\˜,ç'ªx±~ŒUÕ/Ž—…O+"¶kƒvëƒt„Üg >f8nöyÄæ}¦ÇãÉ^× =”+½Ø3½Ønì….ò‹Vç›çWõØ+:ìEùº”r¹ÍùtùX¶?ÛOÅ$“ö3°ƒ)Ø}騑Lì ÍÆga{Ó°ítÒR¢Ót$y$Âæ¢°½©äS¥.ç[Èר+fì-¨ü'±?/cÿØIúäù³#”/Ž£@ûß<êôíã ÿ ?<±ñ§s¨ø'Ì„ûßïû§¼¿>ã…–Ž{ÿñÇovº¾´à|uœr¦ßõ¨Ùc›Âk¢Ý§»ÖSR#(‰ä±#Eq|v<Ÿ(`Sù…IŽÁVÏÿ©J#"`]ýä¿:ÿùoþÇ¿ËëUgõksÖüŸ?f)@Å÷?俈ä_¼u¸tÛHÙŽ±ŠÝxÍ¿o²fÿâÀt-Tûàüd½8 Љ¨Zt#<ƒè¤VïñlO´&A©l_Ÿ@À«‹çÔÇspÿÓˆëÞDªDD“ŠÁütBþPü+U«õ?‘ y’\–(“&(I2ðÿªücù ¹ 2~2ºƒ’¯åƹÑVÞ¦>á¦!Iäœ"xQºU¶SºW|Ðà¿Éç!›Ç™.×s]N—»I×ú°}ØK}”Wz)¯ö8¿ÝEzÓ†½nÆ^5PnÈÈ—Û(§+I§ŠÈ¢eÜ“…ØI6öPvª{ˆ8ÁÆŽŽd“ö§;íb:oާL‡c“aØR冖ôzöî8ö‡yìï;±÷cŸqúê¸ÓvFÎ?»áû'\àùã9tøçOç=V.ù =`Ï çšÿ¸àýÍž_<æ ÿ”?<âñÛ½è"°ggœÎo8iwß«ñœç{Ž4¸©«Â¤eÁ¢¢`aq„€Í+Œã$r ’øE4A1]þ[ÆVÜ=ÿ‡8ó N~FòG‡fß­óáÿ ü?lÌÿ˜òÖû¶§ù°hËP øûh9øŸ?hÿàLÁéꃓ5‡¦já¹¼šˆ€ƒåÐl¶ÍYЦ; Æõ9#šl"ºÄéVAj'7EׯTµ0dM I3CÐDç5$·Õ‚ÿ„ÿ›Ö|h¬KjªGÎ' ÌßÒÂhme¶·§r8i<^ŸŸÉã¥q¹ðËð¿—I$‚ =XmZÀüi€ 1•û¬þðˆë3Duéø‚€ˆTÏ×¥ñêÒˆ@;üלï˜ùsjVýžÕ)à?˜ü/oÌqÈ_Ù\à̯hfx  P]¸æ¿û¿ð?þdÅ?ù }Âÿ(Àÿx€ÿGílôi€­`Ø)Àî·ØŠ ÿ÷Zн]å6C¹Y‹"°(‹bÙ·W[AL~&MPù7Ï!ó·-ÙÁüœ­Ý<`Kü¿lm]27/t6BÌáËÓÆœªIcå„¡lÌP:ª/ ÿY«¦zçÛðÅ_)øϼ "ÿ›õ‡¶ ÿ\Öï_Rï^Òþ_š’΋¦‡9àÿÁžð¿¥³D¯ÉSÉY i†LœFDÀšüщӢ¶As ¯1…SÏh«EÈ¿º˜ZÎN‚ÊäÏbnJNMˆ ŒÛäî D‡yÄFøÄ„{Ña@L(R !ÂîšåT–HdºÊÈ‹-Ø1vÞŽêÿw·‘þrˆr×ÿ×<‘ÿo€ÿ}Àÿx àûµäÿ×@)€‚À•þß?åÅá¿ñúÛƒÞ¿?äõ«Þ׿ýŸ  7v¯üŸ:¥HWdL(³ÆÕ¬IuꌎºÜ·7ÿýÝá'{COõ‡ê9Ñø@_àáÞ }]a;Í[ aS†ÈMD¯b“MÝ!ŽÕ‰´âD@#JP ã¥(Q!¢ÊDt±€òG×w¶Óx­ÉœædNCR{mÀ©ŽÚjâÛëâÚëã9ÍIü6*ÄüÇ:=OY]Ÿèr¾ØC‚úÿ…ìµaòÔ·Æ\ÞÃÞ%¿7Dz»‡üš‰|SåtMä|™ãr©eÃÅf—§šHç1à\=v¦{¼{¬{¤œt²ØéXÁ†¶Óœc±Ù(l ;”Kz¬ÞåŠÄé%åì½iìÃ-$ÿ¿¾>áüÝ£®¨ÚrãOçÝ€[O¹ãOÏ;ñ+`ÐùÏD# /úüçœÇ—{üó¤Û_ï÷øà û›;\nÌS.;=Ò³áh‡Û™ûL»‹µ!@Wé£,õ‘ Ù!ÜüMœÂضÂt L _Ê•Ò%åLtþg%SUEþ‰äï(þ;Z3;Ûî.þÚ„9à›(sõÚ_e&´ºlÈÿùhþÓ]8Ó]€êÿöÒP1øŠÿã»'AþÕPðƒöï›k¸o®îÈ\ÝáÙZྙ»°o¬j÷påÎþ²í½%ó¶¢YK!±hþF Þ¤šù).SÛÎT¶2¥-LQ ƒ×Dã4PÛë’[kÀü‰Ð>nþ–F8‡ÚÜœÜÒBkm¥·q˜íÜ>ŸŸ.f éë R`Íÿè[qK†¨9÷*žøæÿuòGÔ¥;üOD€#Ö«‚€ˆÇK{5ýdu ¯Š)¨IÕe®Uþ9Ц\‡üU-…¼ ßY“?þR  h`Ëê! ×Gá0?Qü³MøðÇ^@ÿ£=«þóãŒþÇ‹ÂÿPÿÚKl¥÷øZ³æwìù!–}Ç:ë ÿ/€çqùƒöïúßÚ,[ÚÌ-ÄZ/3¦:`º³z¢£rÜX6ªG-Àžðù˜µü¿0Ô¾ƒ>ò"æ?à[ˆúß°Y·ÞÿscüµS€j»ÌåfC‘N‹N±X“¿XÀ”òhSbSØÊä71yŒö:zk šÊú jMiRE!È?¡€›•™F §Æ%Dùã¶Gþ õüßX͈€0×ÔMÎì8Œ“†™‹IsM¤Ã2ÒY+éÆ(é7[H }rÜé«ÓÎ?=åºò´ÇÊ5÷•ë^+7}P¼äþ_­ÿ_ "`åµ@"î¼ê¬¼èçYŸ.{{Îí9éõÇÞoîö~~ÑïüD؉þØÚV}ÊŒ"e\–Ž"@‘:£fn6Pw[âwGìßôØPøÙáгÃÁgG‚Î >:pr äþ¾°ƒ¶°Ý¡3ƈQmx¯2Ì,Û¤G©Eq aœB ÚGÀ;Ȉ’@ãBƒÇgBaË? äßV—ÐV“ÐZ4WÆ6WÆ4WǶA4ÅãþO†È ä/—Ò”r†Rž§ƒê‘ö5tÂü5ÀýŸ,“&)x à$ÿUÿÇJù R~ªÿ¹49'IÙž¨jÓA´Ç˜ø±=‚Ð~q4#ÒM“²ˆyyðvµÏA£ÇI«Û=.—û(Ïb/¢¯Þ™$½7Gyû`{ûüÎ öféÕ§µ.7UÎ/(]®ËÉÏI±g%ØÓBì2»ØŽo¢<Ñ@z¬šr²Ì"º€m4l)ÛÎÀŽb·PžV:½b§¼=нŸóÿÙQTþ ÿÏzÜ>ú¿äåxÞ•?áÿk~w@þWî\ñý ú<¿>ãñï‡=ÿyÂëÏGÑѯ.S xrØé!û†Ãº»¤Îc<ŸÞ&wK›±ÒWU ) GsÙqœ¢$n1 üõ¿¬‚©¨`€ü5U«‡ÿóÂÿÆfD€™“ýsÿgÙÅ,‡ÿûµYC†ÜáÎ\ð?Úü³æ(þ7—àßR‡ÿ¡ø?4[xq‡Hˆðÿ äÿ½ÃU»ÊÁÿ‹Ý¥Ó¦|¼`A Ð+M·‹ÒÀÿüT'EÙε1Àÿüf¯ ÝêÕRGm®Eæo®OljHlnL"´O˜¿¹•ÖÒFkmÿ38¼¨ùÑçÿ"ñO< ÿ]@[øä¿Vÿßõ?Qÿ¯ÿwýw´„ÿ¹ÕÌõòç×§óð¦€ÈøøKÀÿxñŸ&®]õ?È_Ùœç0¿º• ¬F®}¢ì'ü¯h,Âå_þ—ÔÂÊ|AE¿<—ð?¾ó÷¿ ÿ#Ýù£=àÿ‘îBD›0?ïƒÖü_ú¿ßZÚoAöGõâgã Ðn|òO FŒµhòÿ/Ûÿ‹ÿEK뼩y®³iÞÔ4oiæ, 3æú)Šh†ôŃº¢A})áÿéÞ¦…!.áÿ]óJð?šÿlÖPùƒün5آߵ¨Ý1öÿ,NJÀÿSCícýý]5à‹±Ø Fõ¿\’î𿈠•?CÐB‡r‚Û@o«E—5URëÊ“@þ•ìÄ’üøÂ¬Øœ´ÈôäzB0ÈßQüþ ñ6»Ä;°>bB60"œó¢IM ÌP€MÖ“H(›)Ïc¿^"½¿ûç䯥üð¤ËÊÜÿÏy®¼à‹À·°êÿ_®ÃXy)`åºß­§ý¾»àóÅiïOòúð¨çoöz¾¸ì{q*ä¡èCVêvsFÁ—2Çd©sJæ²–¶Û”t¸+î¡È'†ÃŸ ½2|u2¸4ðäXÀã#AÐ ë9h™ëŒ˜Ð…÷©ÂÁÿZq´B+Ä#„±rA¬Œƒ¦ñ‚!?‰Ë£µsh¼æ8nS|{ClkmlK8?¶©"¦±<h¨ˆnªŠi©‰ikŒãµ%ˆxIA²\LWH*9C¥`ªU €þ=¨t…”ŠNã%H8q÷ø_ÆKBßödyUÑš¨l‰WµDC ãÆtrÃ-‚È.at(jP¼i\´ òÝ­÷xÀâ þ¿2H¹>B~m{{}‡õÇ­”?oÃþ²ñçÍ(~?IzwÄé—wz\ÞêryÃJú•{µ{Q‡]WbÏʰ«Ê%.ù|‹Óéú §*\æ;íÍÀv0±ر2ì éY½ó¯ú)ïN“Ð=_{]¾x€üÍ© ?žvGW=^òAW}]õ¹sŽ\ñC\]ã_ðÿÊ3Á+OCøÝºäýÃy¯oÏz}ñ˜ç¿òBt}s'åæùéIʹAç‡mΜv©½„ÇÚ6ö5º›k|µ•AòÒpaQ4¯(–WÏ+J”P%ety9E@8ÿß±ù üOÜÿkág¡ý?ti/´]Š |”…ÎyîÈ5çþŸí)D;Vý_²}´l×Dåž©Õâÿð|ã‘…†£‹÷/6[hˆX?Ú=X±}#\ºÐZ€©ÎÕ _žÞ-I³ŠR;)F>:LÁaHÚÂV¼Òh¢µ5P[’0Kµ©9©¥5¹µmUû„ùÛ¹L?—Ÿ*¦‹Ä™b €bq–X˜)ä§Z¢Àýï¿Bû„ÿAþÿ#óפ®/þAþÜê»ÛûAûÂút«1AÈ¿:UT“&©c“¿¦9_ÛÂ&̯i+rD€ª¹DÙ„œï`­øGþ'Ô°EUà^YNŸ.ÿ÷Yàÿ!kÞpâÿŒÚ‹AûÄ@Ãö"‡ÿÑ}¬¶²5ÿ—¡ã1õå`~›º¼K]Ñ­©ìÓVèkGŒõMÓͳæÖKû’»lç[ºø«¬ùZˆèÖÕÕáYKô©÷ùˆnÕÿCã¶Ú™¾Ö…Þ–IñŽY9á´þ»æBþPÿï\ÐnŸS-ÏÈ&ij£¼©áVðÿ`WU—¥ÔÒÁ6hrÔò …$üäÏg9 ~ƒÛ‚ÿ[TGmªA»êÊkJ*‹âËòãØ91yQ™ŒfBHrL@|„o\¸Ol˜7AtˆgT°Gd;¼ßCú·ä0ç¬H¬–Š©r°‘jÒn±Ó#NW°×À0»I?Fþò§ïÏ9ß¹ä¶òŒÇÊsÞ+7|ÀÿhèËþPêòÿ…ÿo¿¸ò2Z¾ý,Ú ôÕYïOöüË1÷÷ö{¾²ÕçòtУ›ŽØv¨óŠä u\Fߪ¡í1ÒŽÚ!ž ½4tm*àùé€fnÌ<7ãwuÒÿüXÀé¡ÀãÝG-~KáÓ†ðe¸UºI'ŠV!íÇ`~?ZÉ‹†§Œ'á%ò¹ ¼vª i¿!’[·©½zSsÕ¦¦Šè†²( ¾< üßX þ‡t´&H¸¨h—K’•2Ð;S£LѪ˜5@×jP ¬ÖÿJÈ_)ƒŸL’ŠêÅÜ8mÂ剿©àR«þ§Ê[”-±ª¶u{¬–ÑÁêäÇZø1ÝÂÈAQèŒÂo§Îó˜iÃãÝÎàÿ›cä_Ïbï-¡³ ?ÚCúÇ>ìŸûÑ”æ{Ѭþ£­Ø‡K”?ÎRþ0åô» ò{cØo†°·ú±×»°—MØMö¼šòŒ »$ ow:ÓèôPù(;˜‹,ÄNÔaçÅØõNÒ¯‡I¿›Ç øÿôË—'Èß>²Š(õ‘öŸöE\ÅþDÍÖ|ýn]ö¹}Å÷ö3þÈÿÏÁïß¾ìóãÏïÎy~õ˜Çg§<ÿþ ÛŸ»¾·üúvÒ "à әnÊq‹Ç!ëvÙ†yÛH«gwƒogu°ª,TR¼IÀŽâ±£EqâRª¬Œ÷ݳÿߨB\Ï2£OÀX&^º™Ÿ)€¦@Š hÐõ^ºì_úi¨üÅÿޱrÂÿDñOÈÿØR@DÑÜ7]‡G@-DÀž‘*ˆ€åþ²%4Â…0®µ² »$Ý,Jë¦hð/Êe\*ÛÚéø“ÛDmEæOjm¦6·P ù#ísií<:Àá3¸&_”*§IDHþRY¶Dš%‘fâÏ,"„¢ hD<älj÷È7¦‰3þÕ¥­÷ÿúÊÿU x:–ˆ1Ñj^T¥àqm:áUc.ÈŸð¿#Vå¿æÿõ@ø_R›OÿÜÿPüsKsÁü@¯!³¿#kÀ þϲç¢è-†º ‡îú¿w~q(ÈÐZè¨ÿÁÿ@Ÿ]ÛÝÝQÞ­+ïÒ–Ù5«þïÑVýoþߌCDÀVØbå.[8¼l¶µ/YÛÂÿs¸ÿ';«Àÿ£ú²])áÿ {øq”Oøç¬j÷¼fß"Èßà(þAþ{—4Û øŸSmž–þŸi#üo7—˜ :U:ÈZÄ”ð¡ò§ ¸4~ äßÞ˜ŒË?±¡*qMþ±e1EÙQy™›²RÂÓ’Ci±IQ~ áÞña^q¡ž@lˆGL°{txþ—D„xC $†º¦G*0) ë«$o8?dt¹ØG~e†üîNÒ_??Eþî åZÿ{¡âÿæjý¿6íYÅ‘·~¬¼pç¦ÿë?^ øúœÏ¿ñüè·ßpm›ç33þ„Ýo‹ÙmLXPÄMËf”É{uñ‡Í §zc¡ò¿<x}.àå%ÿ×7ûÿjÉxqÁûú¬ÏÕ)ï'G}éó9a÷Úf ›7„ŒªC»¤a¢H RÅ´¼M:^˜‘ªç‡ëùj^”‚-ãÄHšÃD!üÚNMH[ehsyxCYd})Š€¨æêhNcœ°%AÊMB߈ñëã‘ÿà:nþd•œFÈ_!¢Ê…Ib>-øòℼ˜Uÿóã¼y["È_Þ’Dø_Þ/k‹UpâíZnŒŽgäÆšyÑ=‚àq™ïV­ûQ‹ëé—«Cä—')ï,’?Øýu/öñ}ØgGIÿ>Fþü~ÒçǰÏcŸÄ>ÙKþÇNÊß¶’>ZÆ>„aûÃ4öîé­>¤ÀK&Ò vM…]•‘. ÉgÛÈÖc'j°“õØ|슻iÇÞžÀÞ_^½ä÷«‡¾;½ñ§ó·/{!óC…Š|_tè±áóJÀí+þ?]òýñŠÏOW}Ñ0xýa-ÀOOzÿçŒ÷—zzÒý£\?8âüîʯw_^¢\Ÿ&?=B:Û¿ñQ»ËýÎÔ·ŠÝ¦Ú=û}m5ÆŠUI˜¤(B\-.I–&Ë*˜øY Ìu—ÿ®›¡ÈèlË4q2pÒ ÐYpP£Pæÿæÿå‘RÂÿ»'«öN×8üÌ¿¹ùž8¿<ü?`Èê3¬ÎìAKî -ä?Ø}×ÿÃ=ìáž"‡ÿÑ៦ˆ$K±þKø¿ßZ þïë(ë5Þõ?ÈßQÿ÷ëj† uãSM«þ·r-íD!ÿmVÞV ïv>Ñ)€zð¿¹iÆT7ÕQ3n¬ "`ÈP6lªœ°5Ìö·þß>­Ø1£Ü5§Þ³ Ý¿¤G-À=òß¹¨ÚŠŠ4ü!Ž€†ú´¯ÕÿÅëý/æÓà_A{r{sru‰«ò¯ˆ¯.A‡ –F—äE²6备g2B™‰APüƒÿ©>‰a^ k@< îÆAàF "Ô/*Ä+1tcj(©8ã§b¶l3Çé˹nòÍ)ô À_‘>;Aúö´Óí§\o]s_yÞ ÕÿÈÿh(1ç_ãn  uáׂV^ D_‡Ý¼u-ð?ç}¾x U†ïp{c»ûs³¾gÛ#÷¢—”Q‹Ê¸eõhgÔÉ®¨'#.@À—sãe­ ²æD"Þ¥-ñÒ¶x'NΉTñbÕh_P¼‘m„Éü·h=àþz˜òê4å·Ë”?ï!ýóöÙýØWÇÉßÞƒýs'ö·mhçûÐ2ŒSÞ"¿ÞÎŽ{ÁŒA <«F)ð”{R€*ÿu :\èÝYìOÛ!\È_G[=8»áöTü?ã½ò¬ïʳh Ú¿äpë²ÿ—}¯øÝ‚vàé@¼/ðY¹ì{û‚Ïg½¿~Üû³Sÿ8áúÑ.:æüÛýäwv’_ßLzi»:êôÔ‡L.•vˆ\gÛ=F|»kü;*‚Õ%aŠâHi1jˆ@òJ¿¼~5ÚÓð¿…—a°¬ÒTˆb ÷þÿíbåM~67?°ÜBDÀÝ`¶€zhöÕ@ þGÄuÎY ¦:óÆ Ù¨P£»ãmÒŒNQªNÈÔ Ñg›PÂÁan;DüÔ6ø³Ì¡­ižÉmGÄàŠ™q !±,]&ÉDÇ¿(² §ƒÿ¥b–TÈ’ð2DœÕ‹à×íÿ¹ëÇʯÃÿ„Ï¡’_Ýù‰Wþí•t‡ÿ‰i±@à0¿Ãÿøð'CQŸíð¿¶¥ä¯k-ÿ;"ûß„ÿë¿ëü_È+Ëã”äàòÏ‚â¿ß´ê?0Ô“XóÿP7{° ø Ãÿïõ¿µÉßRÒÓYÒk,í1”uéJðâ¿Ä®*P¨*z5Uƒºš}Ý„¡aÆÔ2gj]0·Í›Zçñ—e X•¿… A°Ý†üA€ZK+øÖÔ8ÝY;i¬ž0TŒëˇ #¦š‰®Æ¹vÂÿ[¦åà¢Ø·YK°kI½cA¹íü\þÌŒp'‡ZFzkûmöŽB³.W«Ä‡?B†ˆ— ò緡α¹>¡±6¾±:¡¾2¡¦4¾²(ä_šY”³)/=,+54-9ˆïGöÿ'oò…p@AR¸wºŽ`} €ÿ#ƒ=ãCÜ!XA$ÖJÇ: ±™fÒ}JÊ+:è­eìOû±OÀ¾yŒ|ëü†Ÿq»æÿ>w^ô¾óòݯV^õ#XA·îÿï.ø|uÚóãã?8´áÍínPÉŸ <ÙqÀ¸i«:r‹&vg'í¤-ìt?È?ÒáåÍoý”½XÓçúÿÈH8QÙ{oÂÞ;„ ‹öÞâÞ{ï½p¯ª­¶j{jÇiO‡uÔÖ¶j[m­u¿ûù×§zZ8}½ïõÜÏb£¯–3¿^bÀËK™×³®Ì7zwÐèdëP}k3wM­Ù ³þRNG‘yKese{EG§;ŸÝ_hÊ æÇ*P:½PŽÔE*q–d;HQ €ȲlêÇøB'΄vy";Y–½"kz¾Ä® Û¡ ˾4Û¦&ǪCi9_mº¾’~ òNõ£Ê· ©wW<Ühð¸ðnê³½Ô—ûɯ ÁËË=äg;(l"=Ú@úm-éÁ*4Àÿý<ò~Cdݤ[I6  r \R\TSÊ Þ¯5¼ÚBú¤‡ôõ<±ÛßàÉ.*dy/ŽÒ_4=Ãþœ79–;œAa?ÿ%qÚ÷Ù ü6A/N)ðPv€ðÕ#œ¿rïgßßÅüi'ý‡m´[ ¿]Mùb ùú<Òå>Êù.ò©fÃÃ5äjêZm±”9 4êH1«M0/‹žP5Ue›á ‰rˉöRĺb À"ÚÈÒ½ð-ðeBÏòLt'c¥Ø]Ô.ó¨VxéZeÿŸü':¿¨òðÇz#H Ïÿ…­hMÜÜz”ôArQØQìßZäߘïW£ð­”y•æz”äzä¡ÿŠ!È»öAðØá€°Ê–yHäžR…GžÂS¦ô’«¼UJß|•_A¾¿jLJ•NÀþûÊ%¾`²,/4.ðÔ[~þ¿Yü éP1—}ÆîsAü=áŸà¡ç? ø]Ì|o–éÑ6ó]µ“W—O]X8ua©Í ­Ëžº‰C­“ÎöZ^žmz}1#ÿn-ó»ÕŒÛ«ÑóÛUÌ/V0?^jte!û<ÊŒö¶›mm6]]g¶HËUÁë×L¨˜8X1qnLai…ÉòJ“e•ì…妳KŒû YuʉU9–¥"sUOšh.гÄ)þq6âDûœ4GE†ó?ù…៯pÊ_ó_™ã¨:I¤n˜ÿÙÙv„Xç‰ldB[•ÐáŸüÏÛçeMSeÛ«ÄŽùYŽ¥bÛ*éT̈ÿ6Ñ.v3®Ï¦·„zo-å÷­†Ow“_` bŒÑGÒFRFÐFQ‡÷QŸï$ÿ½üd‹Áã †¿®&ÿ´„rgõFí«Ò¿{HŸ´‘ ¸VGú°šzµ†~µ–q­žþq+íÓÊ—ƒ¤[K !ø´ü÷^úó#´WÇ™#gŒGßaž7½À½À=†|^¡!O΋ã<ÿé1Ó'ÇØe??núêÑ#>Ö ã=â>9ÄùmŸÉƒ=ŒŸw1Àno¤ßXEýr ù£yŒ÷û©ç;È'(û+(ÛKèk䬅bã¾tvK²¹6~¢:nz~´}n¤#ð_í)Aã@àz# ÚèxÂe Û±Tæ¹C P—ï‹ùß^Ü¥å÷ÔòÿþoD•Ÿ­ó… ·S‚ÿëûR‰@ÒŠŽ„ÅíqÈ#g׆ëK@mÅMþµ*Ÿ*¹w™Ì óWqÅÈœ‘ÆÈ/ÉEØ—*¼@9JÏ\•ȯÈ÷aø£Åãc À… ´Œà¿Bê {ƒÈÆéù/Möü_üÁ_é®ç?Ê âÝA¸Úß™ï‘GDþÿ©~ÀÐøúÿ?ãÿ"aô[üÇ"ZhòGÏþ…a~M@~߯J¿¦ªÀFmPSuHS-«™ {CDg}„®\ÃoÖ¢âCU>ù üoÐF ó¿Uáuáuš°Ú²ðuÑüEÃÿÀB1Õʸ:e|C~RKajGQzw‰ W-òÏ,€f• gkD`óª Èœ¯éë? ùµ’¹Õâ9Ú¬YUýU‚¾Êô™i]å)e‰mšäΪ´îZÁÌFѬVÄÿù}ò…Ê%ª¥³Ð¶O xÁWÀèîéÎAÅŸVQWs:þ©T‡«‹ ÌE•ˆüňÿÉ‚${þ“ãmcl㣬c"­£Âfð§ùMò÷žˆøïÈqµã8Û˜‚\¬Íôr›aæ:ã2ÍÌÙÊ»Îì'šÚM`ƒÐËDÈvÓaÃk-ÆÑPHiI0\žCÞWfðN‹!j¯4¼·…ôû^Òó££gºÐKØ_±½j9|•è_E'ÐÌÿUóÑkF¯M|h†lâÝpÜäÉAÖÃŒ[kÿMŽwpw×ñ6k8ëËx4Üíµ“Ž6³Îv_šÅ‚á›ÕÌ[ëèw×Óïmfü¸‰ º»™zs#åëu´OWÒ¯.¢¾7›|b¦ÑP'c_yWƒá®zÊÎ:2R½Á®:ioá¾zò.ø¤†º­Š²^MZRD™#'uK šDÔ²T†"‘-‰³Èˆš˜i•e-ˆµ%9HN2‘“R‚ÖÉÜ‹å% Ï•W±Ò³PéY ð€g¾ÒC¥pWÊ å¹)r]å9. ‰’Ø>Gì—å ËrÈËtÉ€ù9BÛÜL»ÜLÛÜ,€¿-!k…ÔA)q‚@-±­–NíTXÌ/fo®fj¢]è¦\ŸK¹±‚|o½áo; þ>D{~Œñòkø”1BôY“‘3¬‘“¬WÇÏCèN}º‡öÇòï›ÉÖ~\Fº³ˆôÝlò׳H_ô’>í$]'ôq7ézéÓ>Ò—Äbç;KI?¯%ý¶‰ô×. ˜ üQhÊë¬)üsG/Z‚†Ï›¿<Ç}qšûü$ÈüùIË¿YþuÄòÏÃa?9búœX„º§8£ÇM_eÿ=dòç£ß÷²îï2º·ñÃfü*¿^aðÉÚÕò…Nòé&Ê¡jÊî2ê†|Ú’\ú È¤+ݼ>ijE¼uq¬­<Ú.7z†4jz^”‹,Ú•°w¢#àFt„Ý! (Lv+IóÀ)€:à ,ø_%ñ¨ÍónPù6ø¶–øµk{ªCfÖ†ÿñùßù­‘‹:PówEoÂÊ™‰hæ00ÿ·ÎMmžòº @ ÇÑj¸…-‘óšÂgׇͬê© êÒµ”ú×ùÖxW¨¼J•^Å /•Â#Wæ*ÉAÌׇý’\×™{®Â $Wz(TžÊ|/Uw~¡¨ È¤* äù`b €,7‚åyþDÈ/7ËG&ò!VÁxA" ¥{ËÒ¼rS;À:ÞMê¤î ‰z¤:Ônx´|¬ƒ6ÔF;ÜAßQM^WÁZZLTÒ;s˜5"“’t®Ü§Çx12dñÇa‹ÇC¦1ûë¨XÀ«¨þ3r‚óê˜é³#ì??‚`·ñOÛŒ€ÿ·×3€ÿŸ.¤_›E¹ÔM>ÛB9RMÝSNÛX@]&£ÏÉ6éZ6¥L­J´-wÌuŨ寨üAŒ%î8 Àü/Nu‡ø_ÏÔÇÿf‚ÿÝÚàñüŸÛöšÿ«ú’0ÿ_׿§ož‡ø¿eNê[ƒ@ÄA€¸·øß[….þ7ûÔúTæ{«UÞ*`þKsqÀOˆ€¿ÜC¦òç{* _c¿°Ø¯¨Ä+_í_PPXPH,²¥Ê°4¤(rýå°¼ øŸ—á%ÏðÂüÏKõþç&ÁÓS?É#Ix]öÇ•€?ªùŒÁ Wû1üAò$oÐxþc š¿oð¿H‰ƒÿ±Àü—'…ÿsÂÞâs%ÒÿâK-²P{mÀÔDðŸ¿ABä¯ ÓÁ¿<\«¯*¯(/S†ªåae²Ð²¼ðrPndEn´6/¦N_¯HhQ%·¤t¥t¥ÿ!è'ø?[#œS)@–žÿ¸þóþ§bþ·–'uiÓf6d´dÏnÏþáÁ€ÿذàà?žÿýcüoªŽ¯®ˆÐ”†çû)óÛÃx²ƒñh3íÁ:òÏ« ¾_B¿½ˆzcžÁ×³Ñ ‚óÈ·Rn-¡Ü^F¾·ŠòóCÔVØA†ÄáÅAÚÈJ+³@äÏÕÝòó&ÿõ™=>Ìy|˜÷øù£!Þï‡Í2ûë°Ù󣜗ÇuzvÄìσlÌÿ{[Yw71o®¡C ñÙúG³¨—{(ˆÿ5ä=ʦ"Êr9c¶˜Õ-0oH𬉛Qc§ˆ´Ë²Í‰ÖñgãkA$¹§z”¦ü=p hŒÿ>õJ?àS±o[y@WUPo ²tþ«9’˜ÿD‡ÿ«û“ßâ?À´inêÛüïKÔóÁÿûj‚1ÿ[Õ%¾µE¾U>eù>E*¯|¥gžÜ-'ÏÈO´wùQ‘_å¡(ðRù”ø‚ KýŠÔþÅez–‚ŠË‹ÔE% °\Råíà@Ì…ÔO! Pˆ‘@ ðÿQäð'paí!àŹŒþÑxÿù³cÝ0ÿÇKNþDñ?Xozþe-]䯷€ñü—%†å%„ÿþÙ±!YÑA™‘á~­ÚÀf-‚ÿÿƒõü×[qà ñ<¥ÿ1ük+BkÊC«ËøZuheI¨¦ÝX*)Î )‘ò …•JÂÕÙáåÒ誜ؚ¼ØFyB‹2Y@A2X@oIzŸ:,`N¹p®&s~e‘HAx ý“ÿmš¤îêô¾FQ³xV›xvwμ™è¶÷ÅýÊÅýr|á#æ?|<‚à¿hŒÿ±`[ÅÁE*_E®»<Û%/Ë)'Ó![`›•f 8ÊH´$ؤÇ#¥ÅÚ&DYdžO‹ ±Ššæ;9ØÓ2ÀÕÂßÅÜÏ™çëdîçÄõuäøØsõò¶ãùÚò°¸C.0Ýä:.à4•í4…å8Å,Àq2âÿp;ƒl/RM8i~ik>éd­áû]_.$ã ¿RÿÃgx·ÿ¯²uð¿Jhl×…F>0G[ Þ1q‚óôÙÃÆ·7 þ_šmt²Ëø@3,`#^Žvr/Ïd|2ßèë•&w6"øƒY<Úcüç~“'Ø ÇûY÷2±ÜÚÈúfóßkXŸ¬ ÿk)åÃ%Ô—ÐA-e|´”v}9íãeTп–Ю-¤¾?vq–á™nÒP«ÉŽúšrÆü"ã®<“j§ •'Ÿ(Œž$Œ™!ŒµÎL´Óó??ǵ@æ†@DþžùrÀ>âÞ‘n¶37?;ÓV,´ÉXÃoàùŸ“f ’fØ`þÅb5œÄFÏÿR‰­vŒÿªX©ãøOþsõå:ðÑàÙ|ôÒe²ƒsìÑ“ìá!£ûXOw±þØÊx¸‘úËZò÷Ëé·—Ro,4øf>ªöÜ^lðã êÏkh¿¬¥Â7ü¶Ýçûd/íÙ!Ú‹!ÚÈq&d#Àÿ‹Ä?èŠ7‹‘ ¨þs†£ç?Äü¿äüv zxÈüל‡ûÍà“'Cè2èǸ §0ùu¯ñý]Æ?naÞÙÀ¼±ŠúÅbÒ's(Wû /uRÎ5“‡ª w•n,$/—ÓæJŒ{„<à?ªÿD;(£e‘N¹‘Žy‘®h/\”‹Þ þ'ª@nÀÿ¢÷’4RûxþWçz×)|óÑb™µ_GE@WupoJôü_ܳ¼7aÍ:óûšÿDððmœ“²avòÿÁÿÁ>ð’ Äÿ2ÿ¦R¿ºb?m¡oyoq¾wÊK¦p‡ 'ÏM¥ûü½ó‹}ôä/),ÕàT¤ *®.) (Q—"À)Ñ FüWÊ”yÊdÊld™>2¡÷ç¼^à0Žÿ.Yñ®ø¤X7½p üÿßüÇõ®ÿðìëS¢þ¯ã¿"9‚ûÑôü‡ø¿µÍü4kƒþ7Öëɯ—Þškøð ÕHõU!õU¡ÿjbùeYH…š_YRQÌ//+Uò‹òB r‚ $ÁùÙ!…b>¨(+¬T¡ÉŽª”Dks¢ëe±ÍŠ„VUXNÀf—eÎ)Í«ϯD]àyUÙs+Åà1!à?Ñ@üï)Güï¨Lé©`þ´fØ!¼Ÿß‡.ÿÅ@·À÷)À@ó{òæôH»²ÿ3[ÿ)˜ÿ𢠥¯*ñ_&vÆü§ÛˆSíEɶ™I6Â[X@J´uB¸U\¨UtðÔH¿É¡^–!–An殼ó gn 'À‘ëïÀÏÏžëkÇñ±ázÍ0#öÿsÀ\§±]¬Lœ§2§9NeÁ‹×4ð_ìIÒ†‘f§“6+ ŽkÉ—: ¿˜O¾³†òëVÊóýÌ'Ãgõ# ÀBl,ÿ‰.QB"øo¡çÿ¯»Lÿ—1/Ïaî5j5:Ôlt¸Åx¨•yº‡ý¯AÚ—KŒn¯3¹·Eûì3~rÐøï!Sˆ'Ÿaÿ5düÇAæ¯ûv³îm7úa«Ñ­ÌoÖÓ¾ZKýÏZêWëX߬§ßØÈøvý»õtxÿrý³eÔ’/’ÎvC\½MK_¡fõ)ŒÅfêtž,ÑR=A3U7~Úÿ•Ù®˜ÿù¹nyî…2ˆü‘0ùÇjþn ¼SàŸ+rÄðÏʰF¿»t ?–4I"° Àüøcþ+sURÇ©£ZjGðßrn Á"þÿxù»ådàÿ»)€èáÓF(>¿DìVºF¬Úø3d §LGš¼:`ülñÛ™6Ñ~^O¹»švg%åæ2ƒï“n-%Ý]I¾¿Žöë&Ú£­ô?¶ÓÿÜIÁŸ¯Ž2†O0Gõ÷û¼ÇÓ­òÆü?Ç{ƒÿ‡9¿â<8ȹ€{¿å/û,ìãýºûè ,àï#\¤÷?„|müÃïeåÓ¤Í"¿ßCºØfp²ÁðP¥áÎRòúÊ2âÿÎ óº¤Iå±3 £ì‘Nyι‘h)(Þ ª·þ‰Y W°\ÂP&ôD-`‰—6Ç«VîÓ òm(ôn.õm×øwjƒzjƒõü_Ð…ù¿zVÚù@œüB-€ð/…€aM_âÊž¸å]q‹Ûc¶FÍoŽ˜Ý iEOuä­å:þû•xÿóó=åJTê—¹B"^€ þž]Ø_æ[\îW¢ñ/­PWêU\ü×ÙAiYh¼àqP•"P%{ƒÿè*1þ£âªÿ{êùɯS’$Á]'"ìǸÂSJ(RÂþYÿQ¥½Ùy=:ÿãçXÿñàÊççÆ‡ý“ÿmµÁ`ÿäK}س ÿZm¡ÐšÊ0­&”¸ü+HSR^Ì/+ -ÉçʃþÊì@…8H! ” •ÁùÂÂÌð’¬È²¬ˆŠìˆ©ÎÚò»ŠSq#xP-š]–5§\æócŒá3&h,ä=.1ŠN ïã„7¿¡.°Åÿuñ?`øg#ðŸþþÆ;}ÌãÌ#­ô£môS´ ÌÏo®dÞÛÄz°ƒõÇ~ÖÓÃÆÏŽ˜¼øü‡oÿ;’›´QÕe|̈3U9®òl'Y–C®Ða¬{è€]Ð$L´Æ+ ’"¦&…Nš0)ÚoR¤Ï„p/KpP7ß•âÂá;sBœ¸XAŽ<Â̱ @. Ë¦{LcC.à6ímÍ ³£Š< Êø¤™É¤µy‡* η>M¾µÜðþ&2Ú €JÐlt&ô"wô]Š<‘Øc2Óé21tÅåpßä¿ñí Làÿ•y þ™nÿl7å|>ùv)ù‡uÌû[™¿ï¡ÿuˆÀy‚=|Ê ëÕI“çÇX¡?9Ìúã€Ñ£}F#üº›õpPóp ‡ø¾úp§®?|½’üÙ"Òµ~Ê;íë 6i¨ ˜9&Ufª$ž8†—7 øŸ•b?ð\‘³<Û -_Íqàüîã~,D~±k.^(á™n-L›‘™2]˜ÞGvÔ€O,㢠gÍ õxyLñ÷ÆÓÃFO²ž4þc¡¦4{rÈ”ÉßC¦2¯>Þk‚vlBõç/!}¡œ,—¼,—œL'ø»²ö‚äéIÓ‰Ó°„‰ÓA`oñ?O<žÿNÀ•Ôø_•7£U9q°˜³ºÒx_#ó\í£YÔo–’Ú@~¼‹±:âÿ;:þ¿ü—ŋў Tm»€ø?Çó!øÏŽÌŽÆð×ÿá~-íׄ4Taÿëkƒëá“Z>»@CmX}M(–þÚÊЪ BšðÊò°òÒP¾ÿñ?/“çŠ%~Yi¾™)ÞYI¾ÙI¹)AòT´¶2u&_#¯–FŽU’; Sg" Í„'Ai&‚Iº>þÇüï)OìÒ$vW$uÕüoÎèoöµe‚ tdÿAÀy ½^àØüÛý­i=-)ÿ#ªÕÁšbÿÒ|ï"…Gaž[Á8 ÈÙƒÆ,À[d‚èéi‘ÓR§&‡Ya ,À2ÖkbŒç„(w‹H7óW^„‹(ÜÙ2ÔÅ’ïlì`³;s?[¸€ï ŽÑùX›„ÚÓÒÝ ƒI‰¤e9¤ÝjÒ™FÒµ>Ò%¤ûë žì M‡÷‘3¬áÓF„˜ÃgY£ï°Fßø÷Å\d½_7&ÿ¼ƒys#ísàÿ|ê{ƒ´ ýè–Ký†Wgü{ íǵ”[èü?9È|qÜhø”ñðS´^à,ó5(Ï.`üü(ûÅûÙ6Ñ0{v”z~Ôôâ˜é«£fàî7!Ö‘ß\Cÿr™!æÿPikuq³+Ï´*“£Læ‰ãÿ…‰cüÏtÍ¡^€z\äA’¸çe£Cûø ä—·ÆÃ3+Õ>#Å6-qF:x4(Á 4æV`â´éÙk X@–À°‚™³*×%?Ç¥$ש*ϺY5yv‰ùš*Ó=Ì3]ôk³¨_/¡ºÿÏ1GO`þ›_EÅŸáëPp™‹êž0ª?ÝÅ€ÿ—M(ø¿ü_Çøn-,àûõ”Ÿ6Ñ~ÛÎøs7ëÙ>æða“á£h«3êœ1#:sð4r™°Äÿ º =‰øÿé1ÎC¨íûËs€ÿ÷»¹wwL¸µ…ws3tcûæ&“;ÛØw·šü¸ÍøûŒÛë߬¢ü?œK~¯Ÿt¦t ‘´»š´©ÌpM!s±ÌlPbÞ%´lHX3± rJ^ètI­8Äà/³…ÙKÂ@äDº t€h èK@˜ÿºPº§Z€ùï­ÍñÑʈ€àK¹oGU °º¿ÅÿóÚ#—tÅBü¿²?AyxÑ“ û  Õýñ«ûWÎŒGðï@‹Cÿð‡ 4ògÖó»ê‚;ªƒÛªCš*êËý«Ëü+K}Õ%¾Àÿü"OU±§²À^ K<‹ÕÞ%_u¥oY•À¿¢&°¼ö¿*¤©BQTVXZîü'J@º R…¾ Y€.þÏöÕÇÿ2"þ'‚|O y,¼Ã_? ŸdF;ƒ²¢]þø‰³ ñ J@cY@¢ïxþY@ <ÇŠB¡ù)aÊ$þتOtÛÚóaÀ_€üFbááA˜os~=ÿëj‚ÆóŸ‚]5 ñEþºààOð?¢¢,\£Žþ«‹Â‹óà äarið?[è'z“ÿ²tm.^OZUI`Ýù©=i½…é °€þ!Àu‡Õi}e©3ËAþÿã»+ºj’{ëÓ€ÿ ™­`ýíB¸p~¼`þÏéÊìÈhKïkIíiIîhˆþ×”…ÿÕ>è„‘Ü,¢AE¶HNH&vDåå ûì4;ÄZgÄÌÀ:5!dr\ÐD°€xŸIqÞÈ¢=,‘ ¸ZbE¸Lq´ ² °ÀàgÍõ™ÁõšÁó€tÀÆ4Äž‘æN)6hŠ#-“¶— ‹ ¯ô’þ³to­Áã­ägû ^¦gŽždŒž¤œ¢ Ÿ¤¾:†ôòíÅñ[NÃü¿8@{w€rer}>ùëÌŸ6P€Q÷1Ÿ1!ø'¶pÐ=#HSÿÏÁŸf _>Ð#ÖŽ5^àÀ_bÁ—Àž`ÿ¾‡ýÓ6 á–“ÿŽÓe0Ô`¸¥’¾¨È¤=×L#4—'¡ƒÀ™ “Ô¢T›ìtGà9Xrø@~, ´šOäŠ<Š3œ@øNaªÀ?%~Zj¬•^iñSÁ2’¬2S¦g¥Yÿ¥BÛñü‡ø_1ÆÿŠ<ÛfåÔY%«*Mw7êd|0@ûbåî:Êo;Ðõ»#ÇYèpÖ%ÔUA'¬?šðêšÅ«÷8¯Î±_3y¶ñd îlþSn®cÁ¿8>F÷ófúï;Œžì1ú{¿ñË!“‘cf£'ÍFNûüÏAþy‹áK<¬‘Ë–¨þù]õ…ù‹ÿ?ïçÝÝûµ“{{«ù·›9_o4}¹ÎôÍzö·ëo¬e~³ŠöÕrÚç‹©×æ‚¿Ÿ†{#iKµÁº2Ò²|Ú|™i¿Ø¢-cJmÒuô”üˆ©y¡3ÄÁ¶¢ {QˆCf(‚V„]v˜3[^Àòb\e±nº@¢;ðRlå"oØ«"mc«VxÕxbþ·WÿÇâÿˆ…]1Ëzc!ÀÇü×ivÂÚÁx=üWõÅ­œ‹ƒÿ%èìðüÖHà#¿§ñ¿­:¨U‹Æ4Õe¾µ¯ºÔ[ÏU±{~‰G¡Eþ¥üûü5Õ嵚º@BAX˜ÿšº=ÿ5UÀµ& ´,°¸Ôÿ¿ñßÇÿ˜ÿò1þ£ýÏI¯g>±ð´>òÇð‰b\þcüwI¢‘rb=sã¼0ÿAÀER¶üÄ… ÂBòSùªäPàÿùƒñU/Ò¸@ ÿ¬HQ„®æƒ#€z¨æ?1Õ3B@þú:¤ºÚÐÚ>È_£ ÕjùÕÕ¡ÕÕá5ÚˆêÊHmED•&DX@dyIdYqdiad¡*B‘š' ‘dúg |D©>¢¿ì)ð?-D‘œ/Æü¯GÔäD5ä¡ E™Ø¥JÁ€]EþÀÿ’”ÞÒÔuroÀ?¹»,u~ þwV'õÔ¥Îlô4 z[Ò{Û`}íéÀyÐìNáÜnð°+ ©#ƒþSg6'w7'µ×Çüª(ñÃüK\Ár\A ‰3²¡ƒT`‡ÛÁY‰6™q6`éQÓ‰ZX@|ð¤D¿) ¾“õífí6°€‰„L sš@¸À„@; $Ž¿ ÏÛÚÜÓÚÜÇÖ,Äž•ìNU’bIsE¤-EGˆ‹À¾˜Gº» zº‹ô|¿áðaê«!òËÆ ‡ ž0_ø{áÓÝèùl¿á³Ã/‚5¼8M†t`ä´Éðqö³CÆ¿ï6úa íÛµÔO–RÞŸGþ¿;‹~ivmåóE”ïV³~ÙD{´“õôëÙQü#ÖÇþH§MˆÕô\dgØ#§Ñ²bÈ G >g£ÿÅSlÈ ãþÿ¼}k½ÑVÐ>džï¢l o¬4žWÈiÍ1/˘—4A?)#a*ªØ§ÙÏ%™˜ÿî˜öØø»ã¼ B·à]à(Jw¥; SÒ“l“ã¦'ÅNKŒ±"4%9z XÁÿézþçd¢Í )¾žÿð[.Îsþ7©¬úK,WTr¶×›kg^ê£}¶€zk5õáVÚ“}ŒácLô¯ü.õg¯XŒ\³~Ÿ7|ÁìÕiö‹Ã¬¿vÓo£=ÜL¿·‘z{=åæz*ðþÅï¬gý¸‘ùËÖo»ŒÿÚgúü ûÕÓÑãœÑS<\[CÞÞAzõ4ò.wô= TüyÏRÇÿsæzþ?ÜϽ·—wgïæv³ï¶š#ò¯7û÷Z³OWš^_nòé ögËŒ>[Êøt!õú|€?íÂLÊéNÊÁFÃÕ¤ejê|¹_ÂìÌä4¦MªJ˜Ze•ËŸ*´Ê ²Î´M´9dð2ÃíEv¢0§¬pg|;$¶àn´ ð_çªLpW%º${ŒY€gY¦X@¹Ä³"dzRæQ“ïÕPìÓ¬ök«ð彩ˆ} )tNkø‚Îè¥=¨lÂc @òϊÂÏWôAšß†ÌbIwô⮨mh‚Ló¿³ñO°×UøkËÿÞÀÿ‚b‚ü^ÿ‚RÏ¢2Ï·þ5þ€ýŠú ¬Ê†`ü‚] ¢žPQƒ,ø_^ðÿó ýÆó¿ ×??GWÿþçeøàåŸxŸÏë!ϱùO4ãØF92£Á\E1𡆿žÿÒdñc€½`a Àü¡à?“?XÉÀŸ ¿_f¸¯0̘/ó¥‡zÒøž­ aØôä×IÿÌ ‚ÿaþÕ‘ ZmtMUŒ¶"а€è×ü/Š*ÊTÊ€ÿ9Y( ü³Ó¥i¹i!òt¾][6ŽÿÒè†Ü¸&YB‹"é þçJS»KR€ÿÝeI]êÄŽ²xÐxþ÷6¦÷4§!µ‚¤ÍlKëïçA|ˆùÁ»3Áf5ÀW[QðßÕ”Ø^Ó¤ ¯ÑÿË ½KTè5—! @ÊsGó'RÈò2q#@’b‹.«M°ÅÛ cm ˜Ž³€ä+°œÄzLˆq·.ð–@"`là °5÷µ5÷²±ðµåÛ'ºÑó ëb … U¾ÛIþt¶Á­¥¿¬%?Þ‚ÖNþ½ééÒ_»Iî =ÞFz´™ôûF¤G› à/Ÿì$=ÝKz~ÐðïÃè☗CFÀœ'{Ù¿îD¥øoVÓ¯/þÓ.ÍfÿߟEû×*ðÿÖ*ÖýÍôÇ»Œž0F÷ÌÿÞÍt[è‘LtŸ#p±‘΢ 6*bŸ3ÅŸ`þCÆñçAcâÞI6D¤_,£½?hr¦›µ¯Ñxm…Ù`¡E£tb‰pª4yŠ0!:#Å`T'øîÜÌÉBW0ö±ˆ‹8ÝÀ¤ÎÒ W´š;Ý)3Í$H¶KM°NŒž–=uœ&'ÇY¥&X¡¦@Ê´Ìtk±ÐF"B—ˤNò×ñ?rù’˜ÿèø”q7¼ŒEþðB‚Üø‘Î a” æ¿Þ²¢uÂüGJÐÍ‚êù-?ÇR€er0ÀŸà¿î†GIl@vŒ?Dþzøü÷ÆØÇ‚÷æÆ°¦†Ð†º·ùO?¤¶&ü!ìùùk¢êjcëªãjµ±Õ•±ÚŠ=ÿËK¢ÔÅÑÅQ*y¸,'$';P* ¥ÂÀ\Apž X!À-`>nÿ«%Qõ9±˜ÿÉ]…)Xø\Àñ¿4iŒÿñí긎²ØÎŠø®JTÿé®OîmL㪞ÿm€útœ€Ìê¦úZRº›:ãÚꢫÃk+BÆñ5€žcüWJœåYΨœî“f/I²ËN´eÅÙeÆØ¤GÌH µJ ™’859`J¢ß$°€x¯‰qž° ` ˆrAá2 , ÔÑ’ï`Á·ã†Ø›ûÛ[úØMðu°´7‰seHý(U‘†3Ó W+({+ÐQýk}†_Í3¼»Œü`-‚<¸è·M¤_7’¬!ý¼’ôó2´vôËrt;Ƀõ¤ß7“o7øsõÉ^ú_»Xî0~´ÝøÁfã;k‡¼˜zy.í½9À&ðÿã¹´/Qo¯6"øoò÷Aÿ!Î?e:zÚ é úsÆHȈÚŘ# ¤€¨¡Iøsl\ zv„ýx?ûÁ.Ó€TkŒ?]Bwçx§éŽÓ–3ó'ÕJ­ 2¦e'£k_ z¤Ø‹2 þ»ç?ȯ‡Žâ·ñüÏH±OM´IŽŸ‘e9„ùR€8«´Äi à¿0mFV†5ÁÇ·øŸŸëøŸçX¯œÑS4q‘†·¥–=Ôjt¾‡q}ýÛ•´{›i¿íb=;ÈxuÌHW±xÇŒ€¿ñ«#ÆÏbþÓ~ÞHý~íÖ:úÍuô[ë™w6üïm5~¸“ýx¯é_Ñá\ÄÿãÜ"þ}™/-|ãŒ\àpG ÜAÏÿû8?îâÞÞÆýnç?xŸ­áük%çÚr‹Ë yçrÎrÎ÷±/ôŸë6:Óit¼•µ¯Ž±µŠ±º”¶HiØ"1«Ig—Åqò#'Hƒ'gLK÷Ÿžì7=ÉÏ:)Ð69Ð!EÇÇŒP€¿ý?øï ü—F»J‰€à¿â²ðT"ð,ÉôÄü¯ÈóÔ*=ê ½êK}š5~UþD 8d°9t^{øÂ®( úòžhÌÿÕ³ô䃆?hIwäÂŽ°ùmaàüëøßÒÕÒ^ÔZÔX@ðßø_Rê¡çA¹g¡Æ«¸Ò§¤ÊG]íW^€á¯mâcU7‡Â[¡°€ÊÚ ÿÊtøMþð÷UJ|ÙÄ. ‚ÿ’Tt{¯~É¿8á þöN°€(½D¹ƒDQîYÑ I´§4ÆKï@,…ðA÷?&úc ÐׂˆrP°")Hž ù•}þ;ÿÓC=@-MáÀÿÆzþ›ðòðÒ"øWU…`þëá__—P__WPS§ç¿¦4 óâÌÿ\I¤ \Q°LÈ— ùÊ ~º³,´43 ø_™þOþù±€ü3Õi½ TùIþCäüo/×ñ¿».IÏÿî–4ÿöô¾öôññ?ðÁ¿Žÿí)½­IÀÿކØÖÚ¨mð¿²Ô¿¼È§4ß³XéNX€+$¨ ó Àae¶«Rä,:ËÒ¥ÉöÒdGI’Cv‚X@F”MZøt°€Ôà)Àÿ$ÿÉ ¾|&€ÄzXŽ%±@"îlædnÏá;ð,ý'ø9Z9°c]˜ÙÞ”ò0ÃÎdƒ¥9Ôjê©Úû]äÏ o,¤Þ[Fúe%ùáZʃ5äŸWÞ[føýBƒÛs nÎ2¼Ù.¢º5H¾=Ÿ|w‘áO+ ¬¥ü¾…òh3í÷Œ‡XÖÝ[˺±œþÙ"ʵyDñóâãr?âà?Äÿ¿ld<ÞaütŸÑ‹Ã,Të>a„p­8@Mç3F„°ÇóÿzS@ðÿò¸ÙÓ!ÓG{Í~ÙÁ¹³‰ûõJÓë ™gû,µq6Õš/*ŸÔ¡˜R™=C‘êiÿ´$»ôT{‘ÀY,tÍ"Èëùk>„xw1ëøŸ%pÖU~’í“ã­c§ùã"¦`ÅGM‰žšo•’ˆ”–l•üÏ´‘ˆñå’N ñü/’y”ÉœjÖ]…“”›o¨fh6>×Ãüp.ý«å´;¨÷·3Ÿî§¡ŸÌ‰1O„ŸÌ ÔÉ}yÐèlÇ;·2îm¤ÿo¯g È#ëî&#€ÿÏÛÛÍþc?:‚üq õJ€ÿð3DÒY€î´ù ø?ΆÏñ^œæŽñŸ÷ÃNÎÍM¦ß¬g¾–KÀŸwy‰Åùy–§g™ŸœÉ‡=Ñaz¤Åäp“ñÞZ£Í£•%¬ùJfŸÄ°:cBi‚¹2ÂR<5b~k ¼ßŒ„›Dà°cj°S*Á!u„¡Ž¢pç¬ô$Œø•㚯+½¶G±ÐCå©‘zaþWzÖ{5•û¶-€™õÁ³šøsÛÂtF.쎶äWôé°ÉZÖ ZÚAÿ ÚCçµ"ïxƒÿ|às-âm¥E¹w™Ú‹à¿ü{ü‹*¼Kª|þeDð#Àþxa/ \€Pm*ñ¿¤Ì¯­ƒx›ÿª<_Ì^é“á-MóÎNñÌJD«>õ—¼ ÅB„ïA>?à?!WPF”H‰¤·q âvœ+²”xƒÈü°è«@D.$O ”Åü‰‹ÇÃó?#T_ùAä„yf„{µ6G` €@ŸÔñ?¶€êêÂø×„ÕÕF××Å5ÔÇ7Ô'6Ô&ÿõñeYL…:øë?Ày.?O —,ó¢0¥(,?3¬í¬û'ÿ[•:øã¥pþ}º±Ÿ4bì'¹³<YÀã¿.ø'ø?Ð äÌîDðÇ€?ò…¶dð¿«)¾½>¦¹6²¾*¤FXYê‹&‡ó=!Àð/Í÷.Vx (”¸ç‹]•B¹À%/Å1/Å97ÙIšè˜o/Š¶Ëˆ°„ÏHç[¥…LM šœ0²lú,,»€Þ"9ð rœàï4ÑßiBƒY´3+Ó‹¬æ£-  Ä”-…´#Õô ͆vü»ßð»9¤; (wQ¾_H¾5ÏðÛY_ö>o#}ÚLú´‘üYåóVÃ/; ¿ê#ݘcxgù‡e¤—“î-§þ¸Œzw)íæRÚ ?šCzo–á;3 ÎÍ$†?{ÈW >™KúvíÇ5ä‡ìD‘<;Dyu˜B{iŽ`;`œdŒžB'U1ÿÑìâiTö-tàˆC[ˆwqïm5¿¹ŽûùRÓk³™Ç{-ö´ðÖV›Ï-™Ø,³R£ÁìE)iI©IèzîÌ ÿïD €áïäÇ‚wø¾*Áª“ Å!5ÑÁ?Ú*.Â*6|jtø¤˜ˆÉqÿã¦&'LMMšöÿ¥Ny9Hhþ'Ïõ-þwLš§æ®«6ÝÛÄ:Ýż:Hû~tk)<Úiø×>*XšÞ9fægCH[m`SM`ƒÖ¿¦Âø¯.õ,.q'øïüøCð_ªõö·„€jZÂ@oº@hU#¿ª.ø_¡ ÏÿâRÝ:¸Â‚€BUà[üÏyædxJÒ=Å©žâd, Qœkf¬‹0b~·ô—´pùá„ù¯·}  ŽuA€N{òâ}±àö€^\`nlOû¼E~ ô ÇòFxgFúˆ¢|ÛZ"Ášà ÀB.€ÄÇü'Z[^WA?¾±!àR­6øð×ó_S­ç¿"/R°™$D! Se‡å‹# ³"г"K²ÂÕ¢ðò¬0=ÿ›å‰mª”îâdÜíÅðGÇ~+„èÌ/qì ŸùÏÿ®ÚDÌÿî¦Tà?‚‡ÿ]@þŒ9]ùgàžoÎ Ú’g¶%÷´$ââOSMD]e0ð¿Jí§)öVxaþ ç=Ô>% ¯b¹'¡8dzHêQ˜í¦ÊtU¤»ÈÓœe©àÎ9INÀÿ¬ûÌ([¤kaø Aè4ìÉþ“!𞄳ÂDAcüç;Y8OzÍOjQ0¥)Öpn&y£’z@C>]gp©…ô¯NÒ=$`û7¤¯ûI_ö’>m'}ÜHº¢%]R#].#}PIºVƒ¶ÍÚ‰Ö5@úv6éæ\Òws ¾køåÒǤ÷ûHçg’Nw‘Nužl'm']ê!}8@úbéÖ24hô`3é÷¤¿ö &Âßû ž ¾8ˆ¼àåQ èÕq4Oô|9˜]#ø€¡áÓ(¬ø?âB¸{'÷î&Þ·«x×°ßïcuYîh䮨´,š\ŸkU,²ÎMw¦8¦%;¦À3ÍQ$tþ‹3\Æøïä—‹½Æó?;ÝY”æ /þb¦ÅDAØo>%*l"æBŒÁÿiÀÿô”iÂtk±ÈVší€ù/Ëuþ'ÿkä3: 'Í-å­Õšíi F€éŸ/¦~»Š|g#ùþfÒoÛIhiÃú«ƒÌ—/÷Ñ_ì§?ÝM}¼Ñþe:@ñãF£»ïn6òƒ ø¸ÿFËžå¼:ÁÅÁ?üÇøÏ~Ým³½0ÿÿ:Êýý çþnÎ÷[L¾YgôÅ æµeìË‹Øæ››cq¼Ïâ@‡ù¾fî®Zö®“mF›ËXkŠX‹Ltç{£>•Rœ8C>Y8E`›âçäëçgãgë?,@ŸC\2ùÎb¾Ëxþësq„Hå )ð_žè  L&,€àI¦{I–›ZâZ!s­Êwþ×—z5-€žÚÀ™ AƒÍ!Õ1ÞA|À¾þ@þE¡ ;ø¨ìÓ6¯#ø?§-r‡ñüï¨n® €àó_Sæõ&ÿ=ˆÊ þqÙ_ÿšV>Ò›ü',ñ_[)@ˆžÿúÐÿÅø&ð_*ðÈNóÈJñ%yø€ý±K~uð†°ßàÂäÇ/ÿä¿Þ²bœ‘ Õ@žÀÿÜ8lÀ€?¼Bäωñéá¯Ç¾^è“_À>&¿¾96 µ5´¥…ßÔÜØÔÐØÐŒTϯ«©­ ©­ %„È__ jªO5ÖÅÅŸ8]ýGWU[QS®Ž.+*-Ž(*U)‚äèˆtH•RR( )–„”JùI¨&›ÒJª¥áµ¹áõ¹ÍŠ˜ŽÂD€?1ê™a¿mûõT¤õV¥uW¦vU¤tU&uV$¶ê¨Lj«Mê¨OéjLëióŸ™™ƒí™sº°„ ÁδYÉíI þ¶Ä¾Ö„Þæ¸îƘֺˆ¦êÐºŠ êòm™?1äEß«¬Ðü×ȼËå¾e2ŸÒ<ßÂ\ß|‰¯Rì-ËôPdº)„ŽÊtÛüT«‚”IEIæ%‰Ü’³Â˜É1TQµ2Ž4Sd°JNÞQD>¢¡ŸÓ².Ô_o4ü´Ùð³ˆó?i }¨5¼RJ;ŸG=%dœJ39#0=—evQÆ~¿ˆyECù¸–úI#ã³fÆgmôϺ¨wS®t\h78ÛB9ÙÂ8Ñdt¬y¼žvºÞðB3éj—á'ýT° È~ZA¸ŽùÛú·’ÿØA~²‹òt:µ Ü{yˆ9ÞîÖiëë¬æjf´Ù«óbõ1Ã)Ni.™7±ÐC"tG# Bi–('ÛO¢ÁÙnò,÷Ü ¢þŸæœI\Í™kÁ?0"€tøÄØÈÉñ1“b§$ÆMNŠŸðÏHŸ&ZggÚÅg¼5®@â’Ÿðw+”¡¾‰Ì±RaÛ˜?­¯tÒÊj‹ÍfÇ:YïöӮϧ~¹”òíJ äG¿l þ¶ ¥HDo…òÇ^êãÝÔG»¿î4º¿­Ë¾·™ñÓúOÛ?ï ?ÜnŸÿ¾ÛWþÿ>Ì{~­h{uœxÂmô´â¿):bpŽMtRˆÑÐ3#§Ìá{À84ùe—ñí-¦_­5ý|9ûÊbÞÅ9¼Ó–GgNÞ×9mGÛôÍ ÓÖUOZSa¹²Œ·¤˜;/Ÿ×'³lÏžX/˜¬M™"u„ÙdMK œ‘`àgûÿ({ à8Ï«oÿ^³d˶`w»Ú•VÌÌ +i™™Y,³cŒ™Ifv’6PH›´M›¾IÃ̉8sû}ó?÷óÈŠ›ö{gþ3×<³†Ñ¤ª|ýÎ9Ï ÜÕuÜUMüô~F{QzgQÿ}%²ìÿ7*3æ`-s¨Ž5\ÏiÌmf [sÄíyàyWø_=˜­Îÿ›ÅÐäBýïÒqüÞ¤¹`ÖQ´Ö] -(}ÛdÉö©ÒÓeüÀö ´XûwÙéâ-@™ÎV¢µ”’‡B¨õ%J-> T&/ÿˤ…Rb˜PÀ#.…îgö²û:ózÛsº[0=M˜ÅÛ^ºê˜µŒÅú¿£2 è¬b,|¨Î$—õÕd÷V³à9P QÛßÀé¯cƒõA}þH]¾°®@ÜÀ—6K‹Æpå/h,n,hà÷6,”ýD‘_°HW–_5w°š;T›?TËÔrF8cù~D€ÇSJF€ËU þw8±ÿíö Àá¨ó;u€ÇÙ ,ú¡þ×ÕC@ýþרªUŠJ¹´ ü/ãcù–IGË£åÊ‘rÍH…v¤Â0\a*7ƒüË­‚ ûh•s´Ú+®_ô?Þêu×ÿkŒàÿi0?¤À¤©ù“þ··N:¡þïœõv[ÀzîõÿÆ©Nðÿ½òŸó6‚ÿ§œµ¤ÿwëò°ZÊíëØÿRžAÈÕ qhÆ £2W2Ä‘ôçA éÉ”÷¬Vu§ê»ͽ ¶ÞåÎÞVøÜ¹ÂØ«kP7…KkÃÆÊ#†‹£ú cº¸±­ì˜¦¼è†Ü8"j²“k²ãªðfáeåÙ‰eÙ‰åÙËkrc›8AÃ¥úzÊT7u§S.)iiè肞4¢?›)1¡§Ì¸Ú\ŠF×Úйjtª„rº,à\uàµÖ€‡CË)Oj𵃱Pÿâ@OºÐïè×vtʮۯY‚¯˜¯é˜Ð£6ôG/zj’òâzu=z{ íý´öÐnîE@ŸFŸCŸ |9Oýú ýÛsäñÿ÷Føÿ}oXˆ€G¢¡¦­ýôÀ²ï¯.ûêÒ’OÎÆ½"ö•qÿsÿÒ'7-{d:öŒ'e¿5i£6Í-ÍPC>ÀÿCßÝžÕÝÎ$ýß× þÇ‹ÿ{³l`t0”ÿ½þêbõ·3ÀÿM-u+ë«qÙ_]¾¨©X^WßPOD@<øŸþþÇWà 1@þ–¿¯òÂGLekDL³$Ã'O]¯Y±Ïºìœ'üÿøš€¿o¦=¿öÊ.Ú»{©ø‡cŸž¢~všúÅ9|/Àg§éŸŸ úôtèíS៽u2ôãS!ŸÌ‡||&ø³³á¤ü¿¹ûÝÕØ®Ã7óχââ¬Nò]ŽüÝÕVøLib=U Èrþ’â»ëQŸ]Œ¸y6âíã‘/íxfWø·Ä<º>êٸ˓+Nû“Žºð·w—aùNÍ’íª%›¤1k„±SÃK]½+L Ú–„Ѻ¬Š•ÝÅi„ÿW7òV-ú¿¹ð®ÿK2Áÿý¥ÌÿÅÿýÕŒø_ÐÀ"ý?Ö’  íÈ‘uf+{rT,¨ÿõ£,“(üoW±Z¶OÏ0ñ¦m…sNþzwÉF_ÉÖ‰b`!ð´§bÛ4fËd®ù 6—‘ò_ï-†àùO;‹¦ìEäâ—µÈj曌zö¿B³ ….ü¯6²µæ|ƒ­üò·ºKHùßëÒü6_å½þ'v”h,E१Ðü\ÿK@y!W4R°è¨[úà§·#·§-»§5··%§·ßöEF@×Bý‡ÿ?S¹¹"¯ ªb’€_»Ô³ûjó€EÿÕòÈk(%f>à |¨äûë {ky÷¾ê…€‚CÈ –7ÒP€Û‡ž°‰+náÊ[ &&ªÆÇ+ïF@øÿ”;• §³ÆåªÜî†{ýo3דþù/ø_U£QT©dx °LT"KÇÊÙX¹JX©VéÆªô#•Æ‘r“•?)·°Ö'­›T6-ú} =¤ÿ§õíºÖI}+øÒÔ>enÈðY›[":×ø»ñæ/â/þàâ¿}Qþk½Øÿ3îú_øß¨æÿu .hä¯Wêä…Øÿbž^ÄÕ‹ ´ÂBh Ã\ù[9˜­ÈÒ¬6¦¸†“ÆG¦…‰s¢„u¢eð/nv4|Râ vu™[‚5õ¡ÒŠ°Ñ²ð~h7´•ÖÌŽnÊ…v !7¦&'oίÊK¨æÄ×p–4凔„(khžvÚ¦>ÊÞ!tb ]£kRô¨œú˜‚ú˜Œò[)å‘Qô`/ºÜŒN”¢ÝÙh[:ÚšŽîg¡ƒ|t¦žv© ]ï£<<‚¡ß(Ðo4èQz@‡®hÐ :§¡ŸQžQœUÐ.*Ð -zÌŠw §=èÙ <8‚xc>²øííèè½]èÃ}ø¦ªÛGpGÖãóH¯EüëFäÿy(’ˆ\üƒÜ~¸¾ì›+Ë ø¿9÷ÖÑØç÷Æ=µmÉïÖ-}p<æ„+u—)yN™j§+†£ý¬¡ÞœþîìÞNfogvOg6éÿAbò=?È!äÏÿ‹‡óý/èÉÁ󟶬®–ŒöÆô¦º¨ü«Ê–‘þ¯¯YþomJøyøß—¾èqÅ^å;–ƒßøˆX:q–M–>¡Lݤ]qжì¼7ö¡‰ÐßÏþeõ™ûÐ ÛñAïìA¢Ü:†/eþôº3O¹3O»s*è¾%'ød>üöé°;gÃ?#îMøêb4!ÿ%ß_[ þÿñÆÒ\öãƒK~x î{rßôŸ#OÏðk,¼Ûš¸ö_ûû«%?>ûÍÕ¨;Â?:ùæÑÈöD<½=ì·›¢š‹¼4uÚ·ü°+q-e»1i³:~ƒbÙ:Ù²YÑ’‰‘eîæ®$mk’¼1i¨6£·bUg1.þ[ Aþ+ëóWÕóVþϼ×ÿ½eLÌÿÃÿDdA °è2ÄíÙ’N–¼'[Ù—­diF˜zË$ͱ)óš<Z€üI oÎ^¸ÖU¸ÞStŸŸl/"S´O²y¼´OšŸ”ÿoÑœ‡?ç,†öaÒ^8açƒü=6¾Ã\h1‚ÿuú|(þïõ¿ÿ…Kø¿Àäæ[¼Å6©}¼Œ|Bƒ œ þÇ/‚ÉU@Zk±ÚÌWñÑÐJíÂ+`…¼P&åÿÅcùb|~J‰ú?w +·¿G@[N}Í9½MÙ=¬ÞzfO£«& RAMÖ/ äŸ,ú÷Ä¢ €| u» –;RÇ­/u…õƒuýu<O ·§’tW°Éh¿¿†òǃ£–i[¢½@ÕÉ×tONV“þ÷z+<žr—»Ìé*'¨À8«\®ZÌqáÉ?à°7ج VK½üoj° ÿ×ã—¿òJÒÿrq)FT)VjQ…VT‰ïÃþ7TXF+ícNQ•[Tí•ÔŽËÀÿÓÊÖYu;éÿõÆ^røCú‚8í™ðé² ¦@s¾.ÜLcÿNBþm Òÿk<äðgÒQ3n»×ÿxþ£WòÀü€AÅÿkeF Ž˜«%ZÕW%`«‡su‚l³ Ë1ºÊ/Lž'n”'lS-¿_@~@ºO¸GKß©¢m‘ÐÖ è“ÎŽ KK°º.HT ( à÷„wåG´r£›óc8qõœåuùñuÜuÜ%M¼È®¢ae€¹9`º‹¶µíïC'ÐÙ!tu(ÓO¹ÞG»ÒA=WG9QBÝÍBkÐx,òÅ Éehã*´'Ÿv¤Œ:_G¿Ø†®t£ëƒ”ë#è²¢“Btd ¥ 84B?Ú;‚ÏO½À…Ю„ýóH¼šý×x¬~ûþꊯ.®¸}fÉ'—¾~0îÙû—üióÒGf—^ñ͝ܦM™’¥Y„òaÖ˜¼ Õþ`7Nþî\OüS"×|Žrù³…Ãyb|(Ð=þ'ogk¬M†â¿²t)ÈêÿÚÊ‹þonHhkNîlKéíZ5Øå?2˜þù‹‡YÒÑlé(S6ÆùkÄ “8Ý­X5£NÚª_~ľô’/æW“a¿Ÿ úózÚß7¢l¥¾º½¹½³½Ýꧧ蟞 üôdÈÿÓùˆ;§#?;ƒÍÿÅň¯/E}{%Ž”?ðÁ÷×—ýpcùw×ã¾½Mù=¾ÆGÀ¿Æ/PðšÒÇ0ð™”ÿO-…¼øòjäí žŽxóhôó»#ÿº5ô± ±×§£ÎøcºWì¶'m1¦­Ó­œR$OÈ’'$)¾±$— Ù2¦í\)kY)lXÙW•Þ]¾º£¯ö$‡?õùðLo*Èÿß]ÿ™Ù]Æè)ÿïþï)Ïê©Èÿ÷Ue‚ÿ‡ë‰hb¢6–Z€n–¢—¥Zð¿Q’mUä:U¹n ´œ 3wÆÊ[ã,XçæoòlöBlòó7öI6ŽÄÀ§d­¯˜”ÿŒ«Wþþ„½pÜVè³ò]–»©Àl,0xZçÞá\ÏVó5VŽÖ–¯wðŒ®Bð¿ÙSdõ•€üïú¿ŒlÈŽ€œ-.%7ãÀÌWðMä*P¥¢@!çÉÄ\‰#ã‰F¹£CùÐ¥÷á¾"`°#g G@Kv_3«·‰ÙÓÈè­Ï 2 ºkAû™$ð # §*kÑÿÝU˜žêòu0±(tÁÿ‚z)p{oM~OU~7!ÿEz«òûk¸ð†êä/mãË;øê®"M7_ßÃ7öOVùÇ«½¾J·Âí)w㨠¨t¹ª jÉÊäÿÿò¿ÉÐp¯ÿ•Òr"PI*•⠕ߦ¿ëÓh™u¬Â&¬ù»ÄUqµOZ;¡ÿ7þ/þ‡úÜÐJFÀbò'ý?áh™t¶N»Ûq 0Þ¹Ö‡7yaˆ? ò'ýïÂÅÿ„½Úo­ü¯þù”Ez0I ôì¨@3ÆÕŒækyú‘ó(Ã%̘”¤­W&oÓÄï7,?b]vܶì‚~ÉI¿ì¦žw¡36tÒŒë({•[DëG‚¦ú4°ºª–.-–ô”Dtñ#Ú "[y1ͼ%¼¥MKšù±mü°ÁòuC°»5pmu{Ú߉Žv¡mô“@#e¾Žz¼‚zˆKÝÅ ®O¤¸Ã‘1ééÈ„œÑh6ÝǤîæ.C'ªÑ©&ÊÉ6ʱ.t¨ íéBðÕ¶uP¶vÒwtÜßM=ÐC=1ˆÎP®ˆ¨¿–¡Gè·Zô#z‚þdCO¹Ðß< qðâôÚôöVôÁ.ô ¾µ–úå™`ˆ€¯†ÿóFÔÿy0îŸ.ýñúŠo¯Äq1þãÓËß?¾üÕƒËþ¾céã–?8¹ü‚3n9mƒ*Å+I3Ž1äø<Ž`€;ÜË€ j¨3ÐËìÏÂ+?óîõ?˜_"`/´yàÿ¡.^üÓ‚_þ’þ¯([J æÿéÿö–”®öÔ¾îÕÃýY‹þÇ{:°ÿ™€|Œ¡eéÅVÙÊqeêMâý¦e'K®ø¢ž ýÝLà“k¨Ý€ž½öÊNôúnÊÛûÐ{‡ÐGÐÍã”Û'i„ÿƒÁÿÐ|v üþŹ(¢ìþîjì÷×â !¾»¶ìÛ«K¡3úêê’o®ãç×—c¿&Îj&#à§_Åüó×1PðÿóÑìx>JÿËÀÿß߈ýâ2>ÛíÃù¨×Dÿcwô_·†?¼.îòdôIOì>{ÂSʬn•O™î”¦ÛD«­c«-£éÆ¡ M_¦´3s´)s°.£»*£³<½­d5áÿ 0^”Ÿ[øY¤ÿ;ʲ°ü+XðÛÿRþ÷ø †1X›5TÇ42Hÿµ³„Ù’–¬ï¿ú?×g`ÿÂÿ¼}…‹lð­÷ñá ¬õóÿ]þ¼»ò/ðÙ ÜÖB‡…g6r z®ÞÀUé~þȈâ¯ùÿÙÿ<“»Àâå[}E6ñ=þ/%å¿ào©ÙS²¸# ü¯µòuæ"|d(ñ"X£á«Õ…J%O!ãÊ$‰‹»€®p7ªðC;Ò›7Œ‡“ÙCí9ƒmÙ­¬þæ@3£¿)«¯1³§.“  »6£«&€dô]~PÍ"éªÄ,ú 6€ÀÔbóƒáûªó{*ÙÝUlÂÿl ·Š¿IÈŸ»XöËÚ ÁüºÞbоi È:\b.Ÿ¨ùwÿWXþ þÿ·âÿþ·˜ëHùõõ€AS·Xÿ“€ÿ5âJ²ø'î®0‰*Ìcå6Q…]\é–T{¤5^Yí¸¢vRU?¥n ÿÌi;ïþOÚ'õm¤ü1æv`ÒҌۛIÀÿÀ”« /ò¶³îŒ§iÎÛ<çm\ÀÝ0ã\(þïñ‰IÃ'"€UÅ‹˜ä|D€¸Ð/‚ucl³0×)bLJ36¨Rwèš—´ÅwE_öÆ<ê£þv’ö›iÊcÓè×èºâF §Lô#º€ÝŠ€-"êÚaÚxÕÑŠ, H\:VìóÓá_žüæBô÷—c~¼ æÇ3ÿ»ò_þÕ•e_\Â|yyùgbï\ˆúìbÔç—"¿ºö͵0ˆ€þßóx¯ÿzx)ÈÿÇ—A¿ðÅå˜ÏF¾2òµÃQÏÜõÔ}¿š[zŠgÜNKüœ6š‹”¡24càÞlµ G9˜-íÍkÏhħÍtV1Ú+2ÛJ3›‹2 3x¤ÿ› ³Àÿ ÿöø¿«‚Ù æ©`vUdý72º+3{ª3{k²új3ûë²²†›˜ìÿlìÿîy6éƒ8Û$Íÿ;”9¤ÿ'Mœ[>áÿ‚õÞ"HÖû Öyyë¼…À_᜷˜uN» ¦\¼ G>)¯•ë²pfžÍ”o2äëuù:}>øQþPüÿ»ÿóÁÿfO!)ûx ñü/þùcÿ»‹ÞlŇ…ââ 8t:¾V[¨QñT ˆ€|…„'se¢|É(¤~Pá‡SØÇíÉ]Ù#˜á6æP+c°GÀ"½ =õéÑ@ AFÀÂéĨ»šÙUÅ€ —\TÃÿƒÕÁü¤üAõXþy!ÿܾj6üµ!"&Fð®a<ðÁÓ¾¡¿ØKøßi,·JIÿÕEFm‰Q[J\gVbДY”ÅFi‘AÂ7HŠ âBƒ°À$ÌwŠóÆeÌ5ÊôíºÔƒ¦øSö%—=‘G>:ñÔ\ÈßÖ?½1ÊÅ?¯GZ‡þ0G}l’ökàuo ÁI3õ°–¶[NÝ2†6 "wo˜¹#PÛ(­ «( í*o/‰l)ï( ® SÖ†[ë‚ü5”¹j´¡ m.§ÝWF»¯mÉC›ÒÑšD4G±Q4ªÑÅ(p Q$4¤A–(ä_0ŠÖdR7åmä¬ãÓfKèã%Tw1ÕÎGÎbª»”>QN_[E¿¯–¶³žº»‘r¸m£žè¢ê¡í£]¤]ЮŽÐnˆhÈ©¶£gü8  Àp˜òÙ© ¯Ï…~{ " º×¿¹œøÙùÄ›ó‰ïKxiÂS;~»!éɤóÎø†ŒYªml•ZÀ²Áÿ#ƒ¼Ñžh¸@8Äâ †ò!ÇþØü Òÿäügaóo³³5£¥!­®&±¦jEu%–?éÿÅÅÿí-i]í+{»Òz3ý/Z8Ù ü/cAño¤;å+§ÔÉ[LIl óîåWýq¿žŠüÍLÈçþ´Žúô&êsÛé¯ì¢¼¾öÖAú»‡(ï¦|p üO»uÏÀÿŸŸûòlÄ‚ü¯Åüó^íþÿþÚR¨ü ù¯¸saÙísKÏÄÞ:uûqcÂÅÐÏ/‡~{=œl~z$ú§G#ñ²€þ|cÉ·×b!,nžçhÄKû#žÞþçMÍ.½à‹;äXºÅ˜0¡LµHÒ5c ¾1-áH@G}ì±.ö`»·1¯»>¯½šÑVÅl-c4e5d‚ÿ ˆâŸý_šIúÊÎÎÿÿþicuâ=2Ò~–bˆ¥e‘þ·ÈsÀÿ.uŽWŸ7adO[9sŽüµ.Þ:7€ócÖz¸Xû0íæ.ÊÜÎñÙx §…ã0q¬FŽÉÀ68 µ~aø#½ë¥1üò×Ù¹gÁ½Å?áÿÒ»/æ?äðg¡þw“-€ÉQl$"Àh)2˜‹Æ"ƒ¯×êµ|­º@­äªå*|ã$oæÃ·]&È“³¡¶‘äJØ’þ¿þüv¼häÙ­ô¿n¢ÿi=ýñ5NS§\õPÎYÑq=:¤D÷ÉCÖŽŒ÷QTc3]V ¨ ê-m/ÅÀQe˜¶:ÔVà-Ceh²Í ™\4›‰¦’o rF - IeÑ(pÑFÑ‘2™"‘-¹éþô`?#ГàæÐ­ù4#‡¦ÎE6ÕÀ¥Û ¼EÓ%´ueÔ åÔ-e”m”û«(»k({ë©iGZéÇ[igz/ >$¢ÿVCyÒŠž'– mE·RÈ3í¿¾öÝ¥èï¯.ûþjøÿóó)·N'aÿLüëŽäßoJyp:íœ+q»)kV¾Ê:ºJ5ÌÿCÍ?:æ/”Œð!Hÿàÿ1zjÉpþw‹ÿ±|òç`ÏÏþo®O­«Iÿµ•+ÈáÿÝ_)m«z:W÷÷dõeâ;"ïÿøf±Qìù(K+bX$«üŠ´uÚÄ]–„ã®å Õ‡&c› {|MП×ÑŸÚHyv+õ¥ÝA¯í£½yªÿîQÚûG¨§‚ü?>pûDÀSA_œ ýú<>á¢äÿ¯bÁÿß_‹ûæJÜ×——BÙÿÙÅ·Ï-¿uXúá©Øç£ >>~û\(DÀ—WÃ|( üÿ¯‡‰å‰þ×ñěß%PüÃ~áÃSáo }aWø_·†?±.ì¡™å}Ë;VÜgLöÉÓŒ¢,ÅX®H/À7³`¤Ÿ+èÎìàôµpºØ]õœŽšì¶Êìæ2Fs1£©G@#Ñüù‹ðçÿæÛj|–*¯¹Ì·ƒÿK‹®Ôª+·é+lú*‹¶üoVUXÔ•Ve•Y^a—‚ÿmâ”=§ÊÙ¢OßoNžw,¿1÷û¹è§6F<³5ò¥±¯îŠ}sô[Ãß:üÆÀ×ö¾º'äùÿØð·Í´'×ã½WNRô¢«vtÊxHO‡v`óšé§¸»ô­A¢ú Áê î²À޲ъ0iy°¶4Ð\Lµ"¹ÙÈÍ@îUȵÙ¢.)¨Ê~ÿ è£ô#4ŒÐ(‰< ib>žnL 4¬¦©3¨*MΤ‰YTI6M–MWçP ¹;|Í|äã¡eš¦9h.­á¡u<´™¶• =Õ´c-ôó}ô…´ßéÐSôÜz}#å½]èöúçóÁ_ï}weé·—W|{%é‹‹ÉŸI|ïDÒˇ’žÞ•üøæÔ‡fS/y’v[˜kU«qý?”)Ì…úЍü¥£øB=l-od¿Pf“õÿ/ýOœ„ýß…W áú¿ieC]D@mu<˜qøÓÒ˜ÜѺ²»cU_wøŠ|YØ`ÖØ@–h˜!Å•?>âI9ÊЉÒÝòô9mê6s¸ô¼oÙ©ØÇæ¢þ°.ôÉu ÿg¶PžßI}u_àio |ïxÐ'ß?N‡úÿ£´OÒnÏã-ß\ ÿîr$Èÿ§ë à·á×@þqŸ]XrçüÒOÎ.ûh~éû'–¼{rÉ[Ç¢ ’ïDø‡§Bož ùälÈg— €X¸mçÜ üø`ìÄAñ7Ó ÿxø#žÛñ—Í‘O¬‹x`*þ‚wÅ!{âf}ŠW±Z/bÊÇ8âÑ‘!þÈ@ÑpyûR>ø¿§àvÔæ´Wå´”3[J˜Í|ø¿ “AžüòÇþ¯ÈÄÔþï®d€ó;Ë3ï’NÒ]…_%ôT§þϨÏ$[ð¿°‹%éÍ– 0•¦ïÿÊÿÛä,»‚éT³|ºœIsÞ¬;kçÌÚóÖ898<ÜEósà9íáL:9¶ß‘ò÷Úò<Ö\ð¿ÃÌù[ ¹ .O£Íùã•?º<Ù]pýo檭\½@ï($ê¼øgQþäägÑöäúO ¹"Ô]B€#Àæ*³:K‰ýP%V[±ÕRl1™M|£¡À ç™µ…ÄÒq®^Átr¶^š§—rt¶N”hÇØˆA¤¡lÇ¢¤)îeàcdº£]Y‚ެ¡¶ h úêq)ÐWÇì­fà‚ˆwÁàÿ<wÕœ´ Vå×ðµcù¢f”ýÊv¾º³XßSj(· •»F+}ªIiͬ¢vªv½¶n³¾~‹±Ñ?U뛬ñNT{Æ«Üþj§·Xô?ùò åo·Õ‚ùI þ'ýOÊ_«®ÈâŸô?Yÿk¥¸øWVåUY¥IV…´YZ þ·+Ê<ªJ¯ºÊ¯­™Ô5€ÿ ˆ[Ýu-¤ùýú0?ɸ¹”?˜ÆÑŸý¶¦EHóßµÑg«÷Zë<–Àk­| }[ Èß¿$äï4âáÈßf(Åæ×—ùí†J»¡€°ê*mÚZÀª©±*jprIJR¾WÆY£ÎÝjÈ8hM=ãZþÐDìãk¢þ¶)üù푯î‰yã@ô;G£àßéû'‚÷Ž¿{$ä­A¯ïxeõ…èÙm”§7¡?¯¡ü~ Ýðã+9ÎZÑ1Ú#¥l¥÷ÑŒm4EcàHuÀ`]P$* –jùAš‚#r)™S‘q)ÒF"y £ ¢‚ù{(ôn ½‡‚z)h‚FhHˆFÃ8–*§I’iâ4ÊX:m,“>šIdÑÇ4qUÎ@&2²9Y3‘=ã pg"_šd¡ \ÊÎrÚÑæ€ ýô‡e”?šÑÿøÐËk¨ïÞ>>D½s2ðË3¡ß\ˆüöò’ï®Äw5ùËK)·Ï&¾2ñÕÉÏìJúã–´‡çR/{÷Ù²6iWyD+õ‚,žäà*ù(¾M¯¦&æ GòE‚…ùøÿßÿôÿÂÿiõÉõµ‰u5?¿ömªO$‹ÿÞ®t?9üùãúû_2‚W~*…9š1†Yœ>®\¹AŸ¼Ç?ï^~m2îÑ5ÑOlˆ|jSÈß6@åÿÂý´W ò?ôÎÑ,ÿ“! þðdàÍ“ô[§>9Eÿì,NÀo/…}%‚x²à\ü_ŽýâBìí³1·NÇ~xjÉ;Ç—¼utɇc_;ùÚ¡°·„¿{< ¾à­3aŸ^ŒüöjØø-nð èW1x™èõe ŸŸ¹y*â#¡/ï {f{Ä“ë#7u}<á¬;a¿5a“n¥O™ Ŷ|Œ+åÿ½|AWÁPw %¿¯)¿§ÝIø¿µ‚ÕZÊj€ŸÙ\¤w,L~2€ÎÊ,ìÿ*ñ!³³2££"ýtUeXSu™ ¬þ|Öp c´ƒ!êÎËÉYj‹\üi½ë—ŠåÕfs¦,¹36öŒ-wÎÁ†XãÎÇx8ÀŒ›=íÊ›v±']yÎÜq;È?*,s¶Í”g5æšõ9FCŽ^Ÿ«Õæª59¤ü•z6hŸô?þ[ò56È0ºŠÌž’ÿôÿ‚íï®ÿ´û«œþ Àî-ŒËqcŽb|6޵ØfÁ›,¦B›ï;¶êx-׬ɷ¨9fÛ¢d›yf90Éò ’~ÌXêQ¦r8‚@>È„|”ö3D}™Âž¬±îLÈh p 4e4f 4fý Œþ:&¦–ÕWÃì­%§@xæªò¡j¼(”ØP ká)Ú ¡ì×u—zˬA¥g¤rBR;-­SÖmP×oÖ7l55m·´ì´µüWÿ;=UNOÃWþ“Û¾HùÛ¬5fk-‰Å\g2Ô{~ ó«ªÕÊ*•âçÉÏÂüGZ¡UT‚ÿ Š*£¢Â /ŃˆY±MYæRWz´Õ>}턾nÒÐLè›üú&Ÿ®? ¿±ÙonÆ-­PðƒóAþs®¾Yg/¹þsqÐbx- „ÿk ÿׂÿ=–**÷]ù; e¤üm†rÀn¬p«jˆ¨µék°ÿ5õVuE^m”–™ÄÅvI¡‡ðÿ6cæA[ÚY÷Чâ°ÿ7G½¸3ú呯Ž|çdÄóÁž üètàÍùàN}x2èæ‰ ŽÒß>D{óíµ=´·ÓÿqåÏëÑãsø†ntÖ„k¨ÛÅ´™!š«7PÛLW£±rÚhMÄó%ùAª\ª’EU®Fêd¤ZŠäHˆ†¨XøÝˆÖA!¡tQPõ¨/ F¢Á84¼œ2œDJ£¬¢õ¯¦¤Ó†2è‚têÈ*$Z…d«b5Ò¤b´iH Ïd¤OF¦dKCÞt´&í,§œì _R¡ø«½0K{º¹Ÿòéñ /N‡€ÿ¸‚þp=åë+)wÎ'~t&éÍãIÏïOúËöÔ߬KYqfì0®ž’¯²3àßÞÒ5˜/Üë ðHÿ/ÿ‹Ãÿ‘ÿ÷wg÷t0Hÿ75¤4Ô%Ô×.îùÂÅ{Kÿ ÿÁ>1ù_þÜ•?Ð ™zQ–K¶Šÿ¦¤£Že—Æ—þj6ö¢Ÿº/âï[BžÙðâ.ú«ûñaþ`~òj{þo>žüätЧ§¿8úÕ¥Ðï.‡“þÿñZ¾½÷Õ…˜;g£nÍGxŸƒæõ`ìËû£_ÚñÒþ°W†¾u$äãðeÃ>9ñÕÅðo¯F|ÿ@äQ ÿï®-ýæÊ’Ï/.½}6îýãdñÿÔ}Q¯‰yt*æ¢/ñ¤#a1q½v¥OÅ4IØ !O4R$.,!ý/èà ¶rúšØ= ¹]u¹ÄÙmåÌÖ’¬~ÐZœŽg>DyOÎö‰…èL"°ÿÿ#VwV¦wU¯ÿƒü Vßõ¦¨ËM±°ø‡i‘²ˆáÓ©d¹ÕÙà¿!{Òœ3mÍú€˜sq0nö!ÿ)gî¤#Ëß‘CÈ?—”¿ÃÈ´rL:–ž@§Ëù«ÔÙ ÞêKúŸDiÌWßõ¿ÁÉ'ýOx¾ô?XØ 8&*]ãå€Ó_æô•n/Æã)%wȺÅ.Gà´ó¶B»µÀaá9͇‰ëÐsì:¶ƒÀ®ÅûjŽM qk’g¤Ùz K/ÌžˆÌÕ Z$2$ h Æ:³FÚ3FÚ³m |¶dsÆP#l`6×Dâ·Àøtˆª<`°Š=\íáˆò%MÉ¢ü óCÙ_•?)§©š”?˜ß®ÃXTµfeIQ­‡FF\¢ò-bžSœ;­ÊÞbÈÚoO;íI¸1¹äwk¢ÿ²)êùK^Üòêá7O¿s*àýyêGg¨7OÓ?š§%€çé·NÐoøàhà;߀Øž½=µ=>‰~åB—-”“:Ún9}ÓX ¿—flBÊ*$.¦ŒñF9#yAâì@ƒ.^ N-¥ER‡‚)}tÔME ý6 µ…Bm¥QÚ©”ê v†RºÂ¨Ý‘¨'–Ò¿œÚ—HíI¡ô¤Q{VS{ÓiéôÕÔÁ44œ†ÆÒ(ÉRé²Tª2¢J¥¨S: i“)YS?m*DñáG5xCñsÓ´7·¡÷÷Qn úb>ìÛ‹1?^Åë~ºž -À?9—øîɤ—&?}êã’šJ8å^µÇ’ºV½Ò%É?H†rÀêRW>Z qG Hÿ‹ØÿðG˜Îâügt0"€Ü5FúûÜÒXŸp÷̇¤¶æÔζ4âµoÖÐÝÉ^öOȯùe:a¦E’îSáâ¯-~Þ÷Àtìo×Eýesäÿl v{ð ÷ò÷X ȪtàcLè­Óx“ï§gCpñ1üëËaß\Áö^_Ž|!æ‹s1·ç£>:õÞÑè7Gò}~_ôóûðÞ—„C¼y8ø½á·ÎDá-c#¾ºñÕµ(ÌÕ¸/.-ùì²Ûg–àcôG½¸;âémÑO¬}d:öA_ìgÒkÒNcê:m†_c–ç+EÄË”bá`‰°¯x¬›?ÖY hË'#î­ÃçÌtV0;Êm¥ø…/È¿­d5È›aª“Ù[ÍXÜŽ´éöÕ*Âÿ«{ëðùçT­‚V|4.xL1ÀR 3µc “ˆEúßýÏt«™>]Ôÿ¤ÿ¡þ_ð¿ƒ=ëÊ#!å`ùÛ³Aþ^[ŽÛ’ò·FC¶AOÊŸ¥Õfƒÿšl¨ÿÉ£~ö¿‰­ùyøÃ¿·þ'µO~pø0Øöþ2ÒüîÉ2ÏD™{¼ðúK=¾¯ã#ðzŠŸ‹x…GÇÎ#ñZ¹K¾Çļ&ŽÛGâÒå9t¹6M¶EÅ4+9ž†™¤,ƒ˜¥3µ"´Ÿª†b˜!`Hú²DÐteŒB´¥/29ÜÄnÊ4à;‚krˆƒ¸sFjrÇêØ¢¶¬‰«l+ùk» =|s‰}¸Ì3Z1.®™‘ÕAÙ¿QÓpŸ¡q»©ù~kÛnG˜¿§ã ¯ë¿úŸ¥ÝUesV[Uv{ Tþ “±Âh¨$1è«ôÚj¿ZY Ú_”?é‚á"ÊJt˜"ƒ¼Ø¨(ÿ;4•.]µ×Pë'Ì1ƒð½FƒÛÔà2‚Æ ±·‚ü'øÒÿð¼–¦Eà—nS@Ôÿ¤ü«]¦*§±’øe?aþ’EÿÛ • «®Ò¢^À¤¬Äm‹¬R')׉ŠÁÿF1×.ÎW06ê3öXÓNºâ¯ŒÇ=2óäÆ˜ÿÙ¾ô…½Á¯ ~ýXàÛ'éï¢|xšró4´ûLà³À§g¨Ÿž¡r ‚ ðÃ#ô÷¡7v£·¡¿oÀ÷|ýÆO»á 5RжŒP¦:‘­¢,£ˆ è#œàÁ¼Ðf° 3H°2P4¼,p ŠÖJë¢tÒÁù¨™‚š(¨™ŠZ éÁ­¡”¶0J{$¥#u-£v'P»’(íɨ "`è]IéOEƒ©h„`4…*J¡‰R¨â$OAʤIÆ`LB®Uh–öÔ óÔ‡•Ô'ìèÙ Úk›Ñ»»iŸ þb>üÛ‹±àÿŸ®Æÿx=éûkÉ_^Jøô\Âû§âÉЛ’™YqÞ› ¾Ú¬MõËWã—•‚lép®l4ªVéXdŒ/+„rÅ#Ðþ/üO\™ ÷åôäôv2;ZÒ±ÿëÆ¼Û·¹!¡µ)‰Xóy·øÇ•?é|ç#)…©±L¢UNYÚ´&OþË.úc™‹zbCøÿl‹|ngøK»‚_ÙôÖ¡`¨ü?ùŸír6ìö¹px‚üoŸ½s.ô‹óá‹þ‡'æRðå…0ÿggb>9ýÁ±¨·D¿v0š”ÿs{bžÛµûC_?üα°NE}z&òÎYbEÐ…È;£ï\\‚W ^þÁÉ¥oŽ{iOôßwDýiSôc³Kð/¹ä\rÔ–ºß’¶Í¸zŽé×ä™å<•¸P:Z$”H†J%%’Þ"aWÁH{þp+»¿%·¿>ï*ÂS}&ÔüÄÀŠÿÕ¤ü‰Wº}µxìOHîjè2»ªÌÿ3wýÅ?È×ÿÍP¸2E]™ÒÞ,åK-`Ƙ&1Ã"eØdYvy–CÁp©^“ôÿ”%XŒ€g. øž Œ;²Áÿ^Ëma‘Å?é,-S‹É&†?xþòwQ™9¿ð?9ÿì¾"‡¿pŽ—¸&J0?ཋŸd¼÷û}E¾¢q/¿§Ðçæú]˜qg>€—§6θ•í·äÝ…ã3³Ý¦\—1Ç©Ïuksìêl›ŠeQ0Ìò,“Œaeé% 2 Ô£YJA–|(KÚ—)éÍ÷¤‹ºÂάѶ,a+SØŠwX6fã“·Éûwês%lY3[ÙÆÕtòtÝ…ÆÞË@‘KPæVLIjHóoÖ5m7µì´´‚ù÷¹;x;Áü‡Ç»ŽNö€ÿIù._1ò‚g…ÝUasVZìå{¥ÅVmµBåÚ/7èË ú ½®\§­Ðª+5ªÅš¿|¥£R”aà—Ò2hTRÈ‚bü¯WU¥u¹M‹ýï1ÔƒóÇMM€×Òu;¨Ûe¬ù;Œu.sƒÇÚä³·Œ;:&ù“)@ø±X €lÀÿns ˜ßa¨î©ùK,ºbä'ÿòµo…E[ÿa&e¹QQ g‘•餥q±ZT¤òôBŽYÄòÈ2×jVí0%²/?ç{`*êwëbŸÚ²ô¹Ý!мv8è­£ôwNÐ>8EÿèTÀÇó·ç±ü??C#OŒùâ,ýó3wænŸ¤}t½³ŸòÚNês›è xÜGÈN½ £–¢mCh¦ƒj­¡ÉŠè£ù!àÿAfè@fhÿªþäà¾Á½K‚z" Âï Fm¨™F€šQK0µ=,¨15…¡æHÔ‹:–Q:â)‰¨- At¤Q ºS)Ð ¤Q†S©C)”Ád$H¦R $•‚{*t†däX…¦rÑÎJtºŸú‚òG+åïô—7ÿéŸ ýb>ò»Kq?][þÏk ÿºž -À·W’>¿ps>þÍ#‰ÏïM~jKòo×Ä_ñ%œ°Ço×'N+WÙÄÐãÅŠ‚<ùü/ãü1äðçnýO΄wý?2À"üõGËê–†TÒÿ¤ü[‰ _+‹ð?Tþ¤ÿñäglAþ*q¶]–ìS¥n0¦ì¶ÇŸòÆ]›Šþíºˆ¿lÿÇŽˆ—w‡½º/ôÁï ýðDÈÍùì|Bþ„ÿñ!Ÿž û ïñÕÅHÒùÀ——ðæßÏ/„ƒü?=s‹(þß:ýêþ˜öÇ€üŸÝ @¼°'âÅ}¡¯{ëpÄ{Ç£nžŒ¾5}ót$f>ú£Ó1`þ÷Ž-{ãв—÷Æüÿ¼~Òâ~=µì²gÅ9ÛŠý–•»L«7³æôÙ^ ×,+ÿËÆŠ¥Ã%²¡2é`©´¯XÔ]¸p)a;g¨!w .{aUI%caæS™~×ü™äzžz½5䎤,2ùwפ“Åf )}¸5 ¯üìÎõgAñ¯a þ3¬’ÿô?ëþÇ8ü'?„ÿýv–ÏÆòX™à§‰q¯ÿµ†FÃHÿ«tlµ1PóAþxå§™£]þ/¬ÿ±¸øVO¡ÍË'äÏwø‹œã ÿb×D‰{²Ô3UFâ*ñM—ŽOL”ŒOMLúù‹Løxã^î¤7Ow>0_^p¦]ì)gÞŒ3åä“6„‚߯öYóüÆŸ!Û£c:u ‡–iSgYU ³2Ë(Ï$ƒw£™Êátùà*ù@:|3%=™âî,I'CÒÉ’´gKZXâ¦lI#+mÊ‘·ä©Úò´}7äo,pó}²)iÕœ²f£¶n‹±i‡¹e—½u³}Ÿ»}ÑüǧûNÎÜ[ü“þ·»ËIÿ[à³­Âl­2Y*¡øùëu¥:m™VSªV•†' þr¹´lBþ¤ÿÁüø¬T1_.)THù*Y¡ZÎ×*‹ Ê“ºÌª© " ª}ˆŸ©Ùcmp[ê]æ:§©Öa¬Àÿ^[3øßïhw¶MÜ•?É„£ðÛ]ZHÿC×€_@šXj]¦j‡¡Ò¦+³jKIçfm‘Q‡1‘o~ åV]9^ó£*#åo—¥ þ×JJÿ“[ÀØðƒí¬žQ­¼OŸ°×²ô¤+æŠ?òáÙÈ?nˆýû–ìyqoð«ûéo¢¾wŒþÑq|uà'§ñ)ag©_œ£|y}uöåy:¤Àgh7ÐßßôÚŽ 6ýu:àwnʯÌèœ C÷õѽÚ² !üÖÏëÍ ëYÖ›Ú“Ú³<¤'.°;šÞNéAmA¨%5ÁÌßNo §4EPš£)­q¨})j_Ú°ÿ" u&£îdÔŸBH¦$QRÐPu8•½€8 ÉVR”i4M MŸ‚ì«ÑtÚQM™ï¥Þ¢ß›ÐÓã´7 ·wÒo ýüTÄ·–@ñÿÏkIÿçFÊ?o¤}wûÿÖ™ø·&¾¸7éoÛ’¿.áÆøò3®ø]¦ÄYeªC’¡c-€t$ ~(ûæÿ þÏ]œÿ‹îúŸ¸ògÿ·7¯Zô?)⪲øOìËù ™äio Å¿0›”¿FšëQ¥ÌèS·ÚRyÎM,yh.ú‰MßÅÿ«{#Þ<ñöa|{×ÍSa·N‡‚íýÿé™ÈC~ pµ>ô³ó! }lþswΆߙ½}2æÖñ˜÷ż}8æÕƒ±àÿìÿãç?öF=·7â…½a/ï {ã`DÀûG£ß?õþñˆw‡¿}$ü­ÃQ¯ŠyuÜ »cŸÙó§M‘¿_õðÌ’kþåçìñ'͉÷Wm3fl40¦uyn5Ï$/T‰ŠcÅò‘2ùp©|üÏ÷»¸#]¼áŽü±f¶ !w¨.{°–Õ_Íè©"N¸»Œs >“XɃOuªc Ô0È}©÷žTÐY½À›•êV÷Ô§÷5¦÷7e ¶d Ú™c]9øPĆfüŸÿLÌ¢L«4Ó&ËtʲÜÊ,¯šé×2ýæ„){ÒÌÿ/Nfì9ÓÖ¸á·2}6€åýoþ×þWkYm®ZŸ§1äkL\Ú’Å?Tþ&GÙ¹ Âÿ… À9ŽqMîÉbÏT‰wºÌï*Ÿ*^›¿˜/œžàOMð¦Ç13Àô8—€7ëçÍø¸³>3ëÁ¬YÄ?ëÁLã%¬x-Ó”-gÒš=aa›³½f–ÇÄtéq,ÙH2uÂLÍhºz$C9ÄP fÁ·TÑÇPô0•9Š|Õ²²5ók:غ®|Co¾y€k*pòýÂ’)iÅœ²Š#”ý ÿ½®¶îŽÃþΣÝǧzOÎõŸ^7tvƒÀ7U器ùßëÀæ,ÿ›me&k9Èßh®ÐË ù—hÔ%jU±RQLLx°ðe’Ò{ý¿I´¥ BþäA©RO&.PHxà²À ì5v][_GŽúáx:­õnÂÿ àè˜ü÷í{ÌÍ€×õ+˜Ÿô?YÿCa×WXµefu±IUdÒðÁü¤ü Z>érÙ§E[‘dR–’þ7ɰÿÍò2â…|¨@'ʃl»xÕ„2uƒ6~—1ö˜=ò‚'ìÁ‰ðÇæ¢žÚúôæçw½¼+àµ}´·Ñ><tóø?ø®ÿÑWÑש__ÄGu.à³S4|iÈ¡wv…¾¶%äÙµöÓ~cõ¡ô©Ö`ce¨¸ üßÒ•Úµ:´3-¤;9´'>¸{i@O,­'ŠÒŽ ÚCQKjÅþÇò¢6GÓZb¨àÿ–¥¨m9j‹ÇòoMÄþÇô³ÿ{ž­¤¯¤ Vâ7Ò4$O£©Riú4Š#“:á쬡žê¡\¡Ç è)/z~zcåÃýÁŸ ÿêlÌ——ÿt5êÿ]Oýï[~k~Å[GV¼°7áo[_‹O8ç^¶×œ°F•â”¦ë„Øÿ¼Áÿdýwþ“Gú_:ÂÁ*`ß[ÿ÷wgw·gÿ›ëSÈ™?1ùIhkN\8ê¿7Š? °ð!ÿ£ÙÄÍnø¨7µ$G'Ï×&¯5¥íp¥õ'\œ^úȺè?ÝùÌöˆï{}Ä;‡#ß;ùÑÉÈ[Ä‘n tròÚ‡_õø³ŸŸÂÿsx"„Í–ˆS1àÿOàKÞ9ûÚ¡¸÷/yn_ìsûâˆg,nö†½´7z×ö‡½u0òíC!¯\xqwÄó»£ÿg[äŸ7Eü~M诧¯G_t-;iŽ?¢ßa\}Ÿ>}Ž9©cþç«ÅÅàÅh9áÿb𿤷"€¼šPÜ’/l€ÇÈĪbÚƒ ~r ? XCuø„Ïÿ8©ŸW€ý_·šðÿ*ðÿ@ó=þïÍÀþÎÂþf’þw¸™¨ÿÕYm¦OÏ72ÈÿcîúÊÎÿ{ÍY^+üï#æ?à¿MŸõŸþר:Ok^@M@Àÿ ìwÁ½þwø Iÿ;' \“…žI>hß7] €ö'fŠ&g‹'§‹0“|`fªƒµòçÍNÀ繩µ$kÆyký¼µãùƹþÁœÒ7³®<èqðÿR{.dßÊòYp)À²kX6˪dZ,b†f„©0 TLU_¶¦7WÓ§éâ@ÁÚ‡šÌoêçù#…ÎQþ„ä_òߤÃòßam&¦ým‡¼]GÆ»ŽMöœ˜îŸ8»nøü¦ÑK[DÞ©*÷DùÄá+ìîR«³Ôæ*³ØK‰Ë¿ðÍ¿&S¹ÑX¦×—htÅ*M‘BU$WËä%i‘DZ"‘•Šá)/^@VJ"”•H%\‘-ɱ¥¢|™„£q5ŠBª0hJÌšR¯M¿ðúÕn­YÄf©¶š«ì–:—½Ñãh¼Îf² ˜t¶PüOXf>„ð ã°™ª¬ÆJ0¼^]¤Uj”\âxŸH|á‹&Ÿ€gÐMþ/Áóbå?d$”^UmįJŒ²B£O~lÂL—0}\²rFž|ŸŸµ{ØwÚuÅýÀdÌïÖ¢'6ÑŸÚð÷ûéÏ諒|€öÆaê{'èï§~|’öé\óuŽþÝ€úÝôùÀoæi_œ ~r˜öînÊë[Ñók¡®¦ ÕE£úTCmZBš—¢–e”–å¨uû?ºbOéL ]‰4>à H¥á`%ud%M´’ -€*™V!/‹²–GÙUNtQ.¡G4Ô'Á/O£76Ð?¼?쓟ŸŒùæ|DÀW~¼œüí¹ÔÏN¥Þ<–ööÁ´—v'?½%þë☎;ë‰Ýk‰[«]æ”%kD«%# ¡  ~ñÈœ/òǾqD#øÀm¼›’¬ÿGØ£#y‚¡¼áÁÜ¡¼ÞnVGÛÏ/›Z[››ÓÛ[Ó»:ÒûºWö®îOJÇcÿѱ0W*ÌSˆò´â˜igÚåŒMÚ÷ƒHñçÆ—Bñÿ‡ aOo }agð«{BÞ8€/püàDÄGóŸŽÀŸs`õ¨Û§#ˆãCÉùÏ»ò¥ðÇø7ñßǯ‰OGÝš¼y2úÃãÑ8Ǽ¹?úõýQ¯í‹„þâÅ=aÏï àÃËû"^9…¿?øÅ}¡ÿØþÌwDýekÌ÷Åýv}ܯ×,»6οß÷©m7Ư3ä¯Ñs§t<šg•sµR®ZR ÊE|™°H6R(.ñd\q/GÜÍ–væ‰Ûs„­,A c¸9s°1€‚–,’¡–LbåÉj’þ†L ¯Wû]µiÝu+âCZOýʾ¦•ðw†ZV ZWu¤‹»³Äi²ÁUÊ‘tõ.b¡”5K2ÌÒt›,Ý¡Lw©ÓAþ^]†OŸ þŸ01'm,`ÊžMÊým,²øÿ»- §c33,ÆL£1C¯cZ-SG¬ÿÑësõ`4qõfŒÁÂÓ[y×hçáâßŵz ÈšŸ4?–¿¿Ð=ñ3¾ÉÿTáø4˜˜*˜œ.¦f §gÞì4fîÖ̬-àÃÆiÞ"¦¸$ðyñG›§0›&¹' 8ëýìuþœµ¾ì5^Öœ‡9ëbÍ8™Sö¬IcÂÊ73}Æ,>Ë­e¸4L»2Ó¦ÈpH³lâ ÓèjÃðjýPº~(Ã0Ä0²Œƒ9ÆþÓ@®}ˆãÎw s}cüIIé´¼l­²ä¿ÕÔ´“ÿ>w;ÈÊþc“Ý'gúæ×öŸÛ8|ñ¾ÑË[G¯lûÿ{ à8®¬ûö̈%‹%‹™yfDưc³†™Y4bf´$[’–™bÇv q‡™6°afæÝ;s»¥‰’}ÿõU=ÕÕKŽ“ŠŸß9§oß[×¼…ò¿¹aƒ©>×T¿ÑX“ þtÆ\Ÿü«ÑäªÕ”Ê…"Ûv¦P”-æðøYàø_˜½.?‡ÃË®æfUW¥TV$U–%Bp«RñßA^šD€#@!É‚ÐHsl`Ro¡œ¿ð-é Á„Ÿ¬]óC |j4·YÔ·&õ-$747éÕ›µÊjy–¿˜-³àªâ·ö”2&éÿ,ÈøNè Ê-A¾U/Û¤—äDl£0Í"L¬Ä5ð£Z„á]¢ A™ÿ¤Úg^ïq̼ît½ë¹F×û:Ѓ½´Gˆ'FÐ “ÄËûˆ×gÑÛóˆ|Q”öÕaú7GéàÿŸNÐ:A?e|ˆöõ"íÓYâ½ ôêz¡=Ù€СKâxmncèVFK®>!Cåá%!öAôüFA }þz›ÿwzÛ=Ð6wt»†ô?ºÝ ÝáÀÿ;üi¤üi+þ_O€±¥P„ ƒQQ0* Eåa'œ„Ó$áHMÔ%aÿÝD,ì&NV¢Krú&‡ç­è•âí!û÷'>™sùbÙã›c^ßóýþDàׇƒ>[ yÿ@èkÓ!Ï=>°þþϳVßÃfßIo§,¨F®¨Žƒšœ‹õ¾ºÎ³Œ|É«,ü¡ €â¿œ\ùYžZ]‘ZY‘RQž þ/-J,ÜŸ·#rç¡Ûo ¼ó6ÿ;ïðÛqçúÛ#©5ÿøœ—âèêÒèêŠX|Î{u2Ÿ›*äâó¼D5~.[+KVLƒëN7û]éôz¸×õéa§—'œÖúŸ:À dŽmA÷‡\ H??ì´êªA€Œ€àÀþ?„×ÿ|¸èùÞ¼ç;soͬƒæâµi—N:½4éøò”ÔÿP꿺ßõÕ—Wö»¼8åüÜ^×§Æ\¡¹Ñë~­Ëãb‹×¹fß ~Ë5³¦ ICȨ:tPÚ¡Hm•¥6ÊÒk$z1S%b+„YRA¶„ŸC‚2%Õ™ÒJ¶¸Œ-*a ŠÒ…y©üÝɼ]IÔéu•;â+wÄV팫ÞOiG.>Œ%·Æ”n[9áJýU"ö܆å_xGxñ‘ ÿòQ•;#)ÿóK#DeQ¤ÿ£×úß ˆ2‰£,Ò¨ZyL"üoUÇÿÁ{¶hY•?ò·ù߬£ü¯S¯ø¯ÿT%üÕêT&C­Éÿƒù 樱¾–e›ù3ÿ¬ Û&ÿú&øßØümY”üÛÚ³:ÚØ@'†IÑÓÆzÛÙÜô·1×ÒךAÝ v°‡;ØCí,`°9Ÿ·¤“¤õ5§ö4&ÿµIí5Émü¯ßlHjÔ%Yµ‰õªDH‹,¾Vœ`ÆC誣µ•1ÚÊ8mE¢®<ÙP™j¬H7UfÔU³ë9YVN6È¿]²¹Gv%ÿ1›ü­ù ÿƒ­E‡Ú‹v•œèùW€ùÏqÏOðAþÔzW¿±.‡zñzåò?)ÿ¨üAþòù³"6_ Å?øŸŒ€lêžÃgqø™@5]Éa–W2+ÊËË€êŠdÊÿø¯!?]&bÿo€~u›) ,¦[kÌ·Õšî¨1ÞN ˆ0ø1\oÇÎWÞlTܤWlµ¡UnÖ(6A¿¿L’ æ—ˆ˜€LÄÂH˜rÈy¦J‘þש6éT[Œ*¼È͈fkö¦Ŧyn4³VšÞ In–&¶I¢ÛExËAYÀ„ÂwFãqPïv¢ÆélÃù‡k­èF'z¤=1ˆž'^žD¯N£·fÑ x¯H|hÈaâÛ£´ŽÒ8F|ý@ÿ_ }4M¼=‚·Y~¡o¹yC….ññJ›;iÃ[-™ S2M‰ÊBŠèù~´åÿdìDùxiÄ ø??¡âìÿêBI—F m ­.‘ÞÁ¢ o!fv¢£e輈vŸÖá±Zô\ í•>‡×GÞÙçúá·O—ð¸ã‹Cë?Yð.ðéÀÇñðç¡ÿ+­îgêC›‚÷ª‚:$a^ ´·‚òê%/¼Ï[i ·$‘SšX]ž¶ði;äæoàÿªò($ð<§8±´ ®dOtáöÐü;óo÷Ï»Ý'ÿßüí¾;B‹v…—æETFU•DqÊb8•qœªDð?"A†”Ÿª$j1I\³:q\8g>j >ßê5öcýnÏ;¾2áðú”Ã[ûߟÇø‚ÿ)áƒÏ?]^Ÿð…±ÿtÙœÿÙa{ ÜþÿâˆóŠÿâ¶øhÉëýH·fÜÞÜïúÚ>GàõýN$øqó?g\_ÙïöÂÔºg&Ö=>ìq£×íj‡;ô•gê=Õø.×Ïèƒ'´¡Ãêè^et·"¦EšÒ(M©“¤X$ K#¡ö-Ïä‚L?[ÉÍRp2Uliy†¸4MR”".Äû3ó yù Ôò¸Â='?/>Ü TR d{”ú | [xÞaðeñá¥;"+vaªvEqöDñ b%¢òÈÿs£)ÿkùQà£(Ò,‰„ V-øZ€F}¼-€&Rþ úø:}œÍÿ&]¬AGù_­JT«’:Y£IÓjÓu:––D§gk™Z0¿™­·PÓž,(þÁÿ`~’LmSöªüYõ$¤ÿ™ÖVc+Ì€ùöŽÌN(ò;X]í¬î6€µßÁìëÈ´1ÐÁìdÙ°}9Ü9ÚµÂH'd jg¶¥ ´¦ö·¤@ ô6¥üuɵøñw«)…|@ŒS@oU$5È’©0ñãÜ#7ÉÄI6sÓ,œŒZ«I˜Ý,ÊiåvH7u+¶¨nÖÞ>nÜ>Y³ƒ\á¹›šùé,=Ö]zj üÌPå¹QÎÝœ‹SüKû„frí“ÙšCÊ?'&yJŽÞœ«5ä'`æ(ÔÙ”üeÒ,¿PÌ¢üÏã³×øÉå±—YÍɨ¨L/-K)-‰ÀÿxÄI±ù_,dJ…,*T²µF+p­úO4ª pÕk7C `6ÞbÖßlÒݲºD¿Ÿ ª×É·h¤›l¨e›•t“Rš+—äHÅløgÁ_|!?  à³@Â’JÙ2Y&ü«©¹Z5Èü¶fRûõÚ›ô[­º­Mêœfef³"½M‘Ò¥ˆïUÄ*#G¡`°}*¿Z¯eúãfç»jí/60.72®· ;Hÿ÷£FÑK{±ÿßœAï@- ÏAõ‰¯¡oßÂu}³D|q}2ƒ÷Õc¼òlzT‡Ol9_‰Žå¡ÙÛˆá\ZkÍKS†¢ŠõŒb_zÊóB»½h };½ð"ˆ€íÞp‡7m›–?Åv<ü§üó‚èxøˆÍŸ€ç…Áø°RÿGиQtA´8Š®Že˜“hÍL¢#šº-¡StQfwÄm¤?Ûéð€ÓËcÎoìs}{ÖýÝY÷æ¼ßšö}mÂÿű€'î]o‡ßÝÇ-‘ úÈQyx›0ÒT+/K–¦ò¨>KÓ8ÅIœâNi<ø¿ G@²Íÿxñ'|X–XU[][•U¹;¼bgp厀Ší~•Û½«wzsvùTìªÊ ªÎæ†r‹Ã¸åÑܪxü?7](À6Ê)*atÖ ŠèN}ÂŒ!`¹.øLsॿ‡û¼ŸpûǰëŽoM9¾»ßéÃy—O–Ö}zpýtÉéÓ%‡Éã(ÿÿEþ«àúÿˆ3ÅG©,ø7Ÿ,{)àñþ<~²üÖ¬ðöœãÛsÎoÍ:½1ãøêŒç?÷ãÕ¡ÏŒ{=>ìy£ÇûR»×ÝM¾Çk}šfµAãªÐEd<¾CšØ ò—¥Z¥)µÒT³Œi”²µR¼‡->ÃBœ¥giEYxnÉgã3,ªÒ•iÊŠTy>œKRœ ,ŠÆp#*N­~B.AáäGWçEUØU¶3¢d{Xñ¡w†Pí+Ý^¾+²rwDÕžÈê=Üü(~aŒ 4ü/­ŠQTǨ j%‹ RÏ4#LⲈ²µà*l€ü)ÿàÿ]ö¿&VO¢Q“æW'k5): È?C¯gêõl‰ÁDš¿&ËX›iªË2×gcù×gY²1+þÿKÙæ§äOM~V+6@ÉŸ4?³¯“ÕßÅþ_†º˜Àp7k-#=ìñžLcÝl`´‹Œt¥w¦ u¤¶§ü5RºR©h¯Im5¯<&nÕ¦¶hRšT)VyJ½4‚¾^œV'LêV«U’Ó.ÛÐ%ßÔ£ÜÒ¯¹yÔpû¸éö©Úí3õPùï™oÎ#þEÇzŠOö—Ý5\q÷Xõùñê{&yWö ïƒÿM¹ØÿõY¤ü±ÿ!K­Ë¢Ž?–*ØäÁlJþBq&øŸ”ÿŠÿáû_Àäò38¼ôjnZeuJiYRqIBqQLIq,ø¿ª×`”ÿ¡ƒÀÅP¢Û"@£ÊÔÊ\Êr\™“°2ÒlÑ«7ƒ¨Égµ¹€Z²Q%Þ@¾V+å*Ä(dâ\©(K"Ì Ø~:›Êå¤p±RáK‘(ïà-eKåÙ yŽJ A³ ~s­î¦FýMMº--ºMÍÚ ÝZf¯6£_›2¨ÕÆîÕEìÓ…Ð-èý½™ÝOÕ8Ÿ«s¸§vµ‘¸ÞŒhEtOöОîGÿA/O W'ÑÛûñvñŸÌŸí—h_-á#´àúå<>QëÃ)ôÞzký³½`EOу2t•ƒÎ¢#w¢ÙÍh‰Úè5a„v=ªða”zÒ ÝQþ:´Ûíô a¼´Þh§ÚîCÃø+ø#jþOù?—úD>®üÉ‚?Š‚VüÅ?åÿª(/š!ŠÆˆ†t¢;—˜¸ƒ6—G.£æ3.ªÑ½fôP£ýcŽO÷:½0ìòò¸Û+cy¼8äùü€×“}¾vúÞÛæw¾Ñ÷dǼ&bRÞ' käFê+bd¥‰‚’ìÿÒ4nI2–Iéÿ„*2lþ'OþJ„_åÅðŠ¢áü=ÁÂÝëÅ»ý¥»}ä{¼y^ªB/YÑziÑzqq€¨8HPʯˆâsù¼4¾ÿ þ—‹’u’¸Yd«:ªß·dö?Öx¡5ð¾.ŸÇú<žt~iÄþõ ‡·§Þ›qÿ¼èöé¢Û' ý§Oç>ZpÂ,:P‡ü~¶ìð9ü‡ìm|qØáË#Ž_uúò˜Ý—Ǩ'Â_]÷Åa÷Ïá^øè  ¹7ˆ\ß_p~wÞéޝð„xqÚë¹½>OŽú>Ðï{¹Ý÷\“ÿñº€%SÈ4TþŠÈnYl‡4¹U–Ñ$eZå© ŠŒz%«FÁ6ÊY:9Ž =†M^ÌÔ ˜^ºš›¦©Æ§W(Êe¥xa €Ÿ-–'P¬¬6)‹”Äð‹£¹…‘ÕQUù‘{ÂËv…í .Ü)ÚR²; >Ï«ó"N^87?‚_µêÿ¨µþùÛü_#ެ“EBø6ªb›ÔqVÝ_" ‘”?ö¿6öoþÇ@ NÖ«StÚT@¯ÍÀ`ÿ“Yà“…m®¡ä¿¢ýkNmc.9öÁÅCSV}cæêÌ‡ÕØÌjlaM­¬æ6vkkEþPöw²{:Y@_'s ›M1ØÃZËHo:0Ú—±–±~æDßßïͰ1ÚŒt¥®dA[Z ¦¯1µ·!­».­«6µÃ‚×ÄvšR; imº2ÒZTéP‹6+˜-r6Ð.ÏîTæöª7õk· o5ß6Y³m_ÝöYë.0ÿbkÞr[Á‘®Âã½%'ûKÎ •ß=Vua‚sÏçÊ~þµ9Ñý Rss®©)ÇØ˜MöJ™¶P³ð®×êL™2S"g‘òg­õ?Uð“S l~¼ ÑÀ±ÕUI• e¥ñ`þ’âè²ÒØŠòxøSÌ%ýOEø_‚G1™ ÙŠÿ1J¨Æ³”rø0K.Í >'MÕFµoË ßL=>†ÞaÅöä›a6 d‘Ç4³ø¼ üº:ÿ©ªñŸþþ]$²,™"G¡Ú VAÄl1kñÛÁú-m†Íí†ÜNCv—!kDŸ2¦O˜0ÄM#gŒ! †€ÃæõG->'̧kÜÏ×»]²:]±ÒîkÂæ¸=Þ…žê¥?ÛO;äôé²#ðñ2~ÅàÃ%Ç·<Þ˜s'[¯§Ç}ô½Úå{¾Õÿ¤5`Ù²_>ªŠîU%t*ÓZ”¬&›”FŠ]£Ê4+3 J¶Q• ÀIÉ2+X&9Ó$Í0ˆÓô¢4­ EÇKÖpUUñÊÊ8EE¬¼*NQ¯â&*9øu]øUÆJ*bDeQ‚’^I$§(¼¢0´,?¸dO`ñ®  dwpY^hE^he~§  å!(Š–EÀsyþhy+Ã/B/ÌÂp‹(¢VQ/²*c µF|Y¯‹ÿ×ê€8ð¿EoÔÆQ4)MªQ›tL࣑m2±°ÿkÙ–ºÌšú¬Ú†L0]sNC¦¾ËßÚœÍßĶ™¿±%hnc’ògRæïîÊìíb6íõ°†{™#},ŠÑ¾´±þt`| ƒbb99ðwöög¬e¢/}¼7m¬'•JÑÎôáöÔ¡¶´Á–ôæôÕH 赤÷˜Ó»Mi]Æô.³SÏêб.]V—6§G›Ó§ß0¨ß2bºy¼æ¶éúmûëî˜oÞ½Ô–¿Ü‘ò?ÑW|j ô®áòs£•'«/ïã]Üw@xcQòàA™¥eåƒ5Ë:K6ø_¥Ï’kX2%K,[‚ö™ä䇹Rÿƒó)ÿ Y>–¿@ѸÜ䪪>h¿´$¦¼,î¡ø·ùŸÂ6ÿË¥ ú,> [.Åóy¨Ï¡JÇ…º˜-—á*bbå;%hðøˆô?Tþ1??S(ÈÀÇùC3RQ•\Q•Pþç 3ÀPüË•¹õ&¿I·•”ÿ¦vÃÆncö€)sÈÌ1gì7ÇΘ¢X—,Á‡jÖŸ¬õ9Sëuwýº‹V·+VçkMN7Zíj§=ÖI<ÕƒðƒÄ‹Ãô—F诌¯MoM”ümÅ?˜ÿ³9Ú§ûˆ&Ñø •×zÐKmèùâI=ía)ãz5ýb!qj:´íg£‘DÔŽê£M傪\håΨÄ:AÐw»Ñw­#È.a¼°ü÷øy~´=þ›ù×Ê?Õÿ”ö±ùˆâ@†| 4 ¿FE@U ]ËÄÒ• „>Õ3QÇF4x+šØŽfòí–«Ð !:£ Ý­³¿ht¸Zç|ŸÕå~«+p­~Ý•: 5Þ§ Þ‡u¾ ¿}rï^ih‡0¤¢¯ —cÃÄàOJ“@þ6 ÎÇsžÒäʲ䵭—|)R\./ Õ }-…^Öb÷ÖÒue®½•nýÕë:ù^m|ï&ž_=7ÀÀ Vs"¥¼x‘ U*É”É2eÒt,¡^Ó¡ 2OÕ…ž®÷¾Øâ{­Ãëán÷gúœŸïg¼4D¼6JkÒîí)ûw÷9B ¼·ßáƒýöìg|8c÷Áœý‡Öúÿ‹ƒv_.Ûÿ©ý£x#PŠï@û'ßž´ûî”Ã÷§¿;éB¾&àNñ͉u_Ÿ BÁ•|²ŒŸ|poøÆu/L{=5æó@¿÷•.¼ò§)t¡6|Ú5bHèÓ§vh2ZÔVuF½†U§eÕj3kµÙ–Uj4ìZ5»VìUeXifyªQ’j§EÉzA¢–¯áÆ*¸ò´‚D¸ªyø%'ªw¨áÁäŠHnYxuIheQpyAPi^@Y~`yA$BU†[Pò•D‹ÊÃ¥‘ðã¤ÿ£IùGi¹á:~øß$ƒ¨‘„S-D€U P)`äPKbÑÆ‚ÿñúOüOÉߤK7ë3Ìz–ц‘i6³-5ìšÚLK«¦ž þ'¿"\ö7e56g’°Vjþ–Œ¦æôæ–´–ÖôÖ¶ŒŽÿ3¡ìïífÙ þUígŒö3)ÆXÀø˜?}b0cï“bz˜E±o„MA}95Ĥ˜„oH &zÓÆ{RÇ»ÓǺ2 F:2†Û˜¶賦60êXýµÌ¾€ ôš3ûLÙýæ ÀyÓ°eóXÍÖ‰º[§ëoß×pÇ\ãöùæKm{wí.ùŸ,ùŸ¯ù_æÝ7ÿq@ôТô‘ƒòÇË--9æælÊÿT€ÿµf¶ÚÈVêÙà‰’)’fDÐ&éÖŠÿWÀe?È_(LRx¼$NU|ey\EYl9YùC/@ù•* VF1B&tÔÃYü|Š4 K Y#ÄB}þË+ÍÁˆ³m($9€\‚G=ä´'ÿ“eÿŠüÉÇ©å•IDÄ„üæhry–J•‹Ÿ/g4ê6´ê²»õìcú˜9uª&e_mâÁúˆCua‡kNÔùÞÕàu¡Ñýr£ëÕ&Çë­N´Ù?ÔÎx¼‹þdíÙ0?úÇ0zmœöÆ$íõ½èÍ)ôî,탖ÿæóE„ëÿtRþ´÷F‰wÑ«èÅfô\ zBKP̸¯Òîž|ûÓwÐo¢Í±‰±DÔ‰×#“MíB“Ú¡jZ…=*a b"ωØãBƒ »´ËíöF{|Pž?Ê÷§Sìbì ¤ã5?þðA½0˜FÍ| à_Ñ>”ýA¿ÿENþÁÿE¡¨0¿PMãÅ1$ vŠº&™SQc&Ž€›iãÛíöå£eh™cwXèpLêxJírFëzVëv·Þã¬ÎóŒÖçˆÆgAî»O¶~\ì?È÷µòƒj8ºÊ eYˆ°$œ[?UÛÛü_]’P]’„÷yÃMA*§8‰W”Ä-ŒçÆ ¢ä…áê¢ S‘_]¡gs±kW‰Ó`…óhµÓßy¿ÈmBê9&ó’ùuKš$!Q”Vœ —¤SÏúÕ²4£"¾YÙ« š0Ì5œmXw¹ÕóþNG»]žéux¡xi½:B{} woNØCïN2Þ›f¼¿)]À§óŸ/ù¿8èðÕ!Ð>ØÌ|wÜøþæÇNßf|Úá‡3N?Þåüã]®?žYGA½,¼úÊðºoO¸~}Ìù«£.Ÿrûð Û» noλ¿:ã ðä¨÷ƒ>8ÚA4DN×ÅŽX{ IºÄf=˪g6h™õ:v½>³Î˜UkÈÄ7zø„‰·£Ñ¤ÕªS-Êd³<Ù(O2K¢xƒ0N/ˆðÃYa¬NG¾y h1€Š¥àDȪ„ÕáüÊPnyhuipe1˜SYRU ‰R]Â- å… ŠÃ…%â²(I9üT„‚¥âÅ€ÿµü((þ5œ0ð¿Žbä‡BPþ¯§ž¨W" A»B åÿ,ÿØ]°’ÚTÌŠü3,&`2bÌ&–ÙÂ"ýϪ­c×Ö1ëêYuÖ,ÒüÙõ ìk¦µ‘ò?9íoaµ´2,ÿ¶ÔÖö´¶ŽôŽöô®öŒîfO³¿ üÏìÍ åŸNÉl0ƒb|ˆ91̲™r˜5¹êüý£™ÀÌX¾ÉÜ?ÌVBaˆ5=Ȧ ;€Ž — Lô°&z2':YãíìÑVæH s¸9c¤)s¸‘=de Ö³ë3¡ºìÁÚœáºMcõ›Çê¶NÔß4i½e_Ãm3w -»–ÚwîÌ;ÖSHÊ¿ôìHøOq®Lq¯íçÝ?'|pAòȲäÿøøßÔ”elÌÔ7à—#ôµl] ^=¥2à—)¤ª ±"C(Ãòç Òð?hŸËOãðR¹üTJþBa²@Äç%€ÿ«*b!P=È"` Iå‰U•x C 䩸 3 hø|å—øLüäN” HÄY`~©(K,`K„Pÿã{Êÿ¶ÿƒüyä3èªêôòŠ”²òdìÿê”JN*—¿?D Tƒ*E–VkÖn¨3llÒç¶²zŒ¬aSê^sÂlMì|]ÌR}äñzh½ýÏ6ú]höºÒêv_« ¥ýÇ:Oö0žéc<7@ó¿4Š^›çÓÞÝO¼7ƒÞŸ%>œ§}´@|¼ˆ>[Â|±Œýÿåöÿ'ÓŒ'ïÑ_ïF/7Ñž1£ÇUÄCBƽ¥öwï´?q“ýR¶ÝþTÚD­75 ‹'¡q¡‰í>"*ixcçR:*±§8Òv;»œÐN7ü,üòÏ÷CþDA­0ØvR«ýó°ÿ©9”úô’ :eþ² ( D¥Ôð'‘@ PEpbhàY¡ŠGÚDTCF@{.­smð4²MØM—8M—»ÌT¹à»/м–ÄÞ bŸbß}"ÿqaà7°³* ¹Ü__¬) ‘—„±7¢¸¥ñxª_šŒ7ÅE>A¾)M¦öy[•"· Ž›%Ü*Í Òåûוø¶”¸u•:UØOVÛÍ –ÄNGd΋*÷yç¬ÆwBد‰hQÅÖÈ“ÔÒd¥,]%ÏÐ+SëÕñšˆCÀl­ÿ²5àž&×k­ëèp}¸Ãî‰NÚó½èÅ~Ì?‡é¯¯£w ²§iÐ|·ŽbíýOw¹C"¬¤ÀñuŸ]÷ñ²ëKnïÌ{@ücÊëÙ½~ù]ë]¾3ðx[ØRs來豚˜aKL‡™ÕjÌh10›ŒÌF#»ÑœÙdɬ&¶Õ˜Ñ`H¯×§ÕkSkµ)u’Y•h‘Å›¥qÔÚrßÈâ( Òx½$ŽB+ŠQ ¢TüH/B ãUqÊ‚ªJªJ‚  ¨*áEXþ”ÿE¥‘àieøªÿ£È'¿xø£æSþô‚Pƒ0Ä$«‘Eâ…@*@½&¦N ×Z¸çkcjð5ÖVÿS˜ui€EŸn1`ùÿ™fv…][“Y[³Fþ$”ù)ù[›ÈÉO#³¥%ü•SsjkKJ[kjG{ZgGzWGzwgÐÓ•n“ÿJÙ?°2ç™\)õ÷ްà:>)üµÎŸ›ÈfdzçÆV˜ÍfFXä5"`6¤ÀT?{º7sª‡=Ù9Ñ‘ 0Þž9ÖÆoÎ$ÉkÊmÌiȵæŒZ7L6mlº˜j¼yºé¶Ùæ;´Þ9ß¶ýPÇž#]ù”üO ”P•?5ð¿:û>+x`^üðA Èÿ‰£Jü_Ó„WF™ðB)Cö?Ôÿ๖)Q¦‹äé"iš@œ¶êÿ•^€ô*‡—€öAªÉBQ¢@˜Àã%p9qÕ•qUñU‰å• eñ6JˈȂ•‰73S$JþÕÜ”*NrnÒ8\&X‹²WëüL0¿|M;@5qŽ­þ‡Ÿÿãú¿"…òGŒH”!•²•òL2ۨΩÓå4êr: YýFæ¨)eÊ 6úp}ø±Æ“M!ç›}.´z]nu¿¯ÝõLJ»OtÓŸ‚‚¿Ÿx~½8L{yŒö u&ì~\ð<>]ÄK=?;„W{~u˜øú(€¾9‚—ý|A0GÿxŠþþý­>ú+í赌'4èAíj ýì6»£›ìç3ì§âí†"iÝÁ4«/>áEå„$ö4ÁEô*‚(G¨„@E T`Oì¶GàÿÝnŽ”ïò|q®Ã3ŠƒíòƒÔ‹]yXþx©mÚe?åÐþßü_²âÿRªþ¦‰ã²8º2iâ‘)ŸAÓÀDlZÓFÔº…Öy«S×6×®ín=»×õç{–ø —ù •û Vø÷UtU·”‡Ô—›‹ƒ”%á²¢pžG᥆EPðãsÞN1®ö©gØÿEÉ•…ʯ-Ï‹ï Qæó½­EëÚ‹Ê{«h |ú1ã”Üî.•ã ËqƒÇa“ϼ1`Ê> ‹iÕ$Ô¨R r ”Á-ê¸>}ø¤)`±ÎïX“ïåFçk-®´:>ÜJ¬=Û‰žïF/ô ô˜~Ú‹Ä˃ÄkÃèÍqôî^ÚûˆgŸ/عäðÕAÇo;~{ÄáÛ#v«Ú·ûñ$˜ßáçÓŽÿ:ãü|·Ó¿Î;ÿû¼É:Šÿ\p_Ë¿Ï{@P)@àñõqÏŽxRûE¿1ëýÏ}¾ÏOú?>ê}`ýÅîÀÓ!Ë-asÖÐ}õa½5©ÝæäN~…ï6SòAm84šR ÉuºäZmÄ_*®Fc‘G5rü¶¹MÜZ Òh­(BÅ•óäÜ0QU0¯2[È) ¨. „^à–¡¼âP~I´r¢R¨ÿ#ÁÿòêHè”ÜH\ü à¡á†PþùÛüo‘Fà…@JÈŸ¢–Œ‹&úý]€Y—BùfùC0kŒ,‹™EúŸUWË®«cbÿ7d [åOÎü3É-X ’ŒÖ–4{ö?еi}éýÝiƒÝéPù£Ô„eÔCUûTÁ¶ÏSWJûÀ½¹˜ñœµAI’M¥y͚ʜÈÚߟ¹¯/kº7{ª'ko'‚`ok6ÅDK¤ÀxsîxÓ†‰æÍÓ-[§[nÞßrËþ–ÛæZnŸo۶رs©s)ÿ‚}E ÿ3Ce¶™ÿ½³Âûï_?¼${ô *ÿ'©ž:®®kÉÿ[³lþ‡ü¯Ô§Ë4ibeªHš"”¤òE©”n§†üÔH¾ŠBš Ø"€¡æ?@eUäH5oeåB–¥Vdé•YfM–U—ÙfÈì3³ÆÌ©Ó5 ‹uQGÂÎ4^h[©}ýµ.ëÝîô¸>ÜãøDŸÝ3ô†i”öÿ9G=oMÓßÙOoŽ*øéŸ/£/ÀóG¹Õý»´ïN Nߟ@ßC ,Ó¾<Àød’þÞ0ãÍ.ÚËMèãa1ºZŠÎÞIÎAûˆ‘PÔå‹Z¼P­Ò:"™ÓŸFã!F5r¨$Ïö*A¨ˆFä1°ÿ÷8Ñòݻס=žØÿ+-‚ ¿$„Q²2íYYç¹~…ÂõÏüIù¯úß”“ò'_ƒðUCC C(b:éã‘!“#“aÎr¨ÉuµlXgÙänÙêYw›u›oãvŸ¦ÞÖ]>Ö=¾uyþ–ü }^ fw tO¤dO¤hOow ^v^Ì+LããcjIù§‘ಢ¡ªŸ”ò‡¤àçE öDI÷„ª÷¬7åy6¹t—ØWÒp‰Ãbüâ‚Æî²Îþ¼Ñù‚eÝÙïã5‹µa“æ˜>CB«6¹N™4*ã;µQ£†°9Kà‘:¿SVŸ«V§û›o4Û?ÔD¬ =ÕJ<×Nž¡è¤?ßM¼Ð‹^@oŒ w&ˆ÷§Ñ'sô/¾^v¢äÿÝQ{›ùIí;üû.Çÿœuú÷9§ÿÜíüï Nÿ¹èúË=n¿\t'ñøï=žÿ½Çã×Kž¿’Gý’xýr÷¿/xþë<>,þç³>?œñþö¤×—Ç}>;ìóÁ¢÷;|_›õ{aÊõ7†/õÞÕt´5h¹)p¼>a¤.qÀ’Ð[“ØS“ÚUŸÑaRÛÎÛ‘¥R©à½”‰V]\ƒ6Ûª˜Ze4\5(7–$¾N›W³2F/ЈB•‚P?X UB ð«‚ àU„@;À+ ø%!‚ÒPaI¨¸,\R!­“W‡ƒü•<ˆ, /”*þmõ¿Qj–„ã@ P«Z¡FÑbÿ[41æâ(ùã)>•‚ò?Pcdâ}˜Í¸øù××eÖCÍÉhh`Ö[1 ,ªò§äifbù7g´µ¦··¥ÿ1íÉí)]©=í©½)¤ÿS‡zÒ†ûR×ÊŸò?”ýSä¨çoÚŸŸÜ@]öþ…ù‰\àÀx…­/˜Í>0’=7œ57”33³¿?{oξžÜéîLgÎtdž©ö\’Sí›÷µmÞß¾˜i¿e®ýöw,vl[êܱܽëPÏîã½…'ûñØ?ð+¿°·ÊöÀäÿàA,jòþú„æýë SeÈ«ñ©j«þO¦äOíy&ñÀùØüñ_þçp⪪â*+ãÒòXÐ~LQItQI,@¥tÐeVü/H††¨â¥Tr“+Èç¶ nð?—ÇÿCa-é\üƒÿñ* Y¶R¶Â|3Õ\>ô,L±ˆ%•d*åxÿ£*³N“Ù¢Ïì60GÌi“–Äùº˜cÖð»šïi÷½¯ËçF÷£x7ȧž¶ÿÇÔ>®öAûoæ§0Oÿx‘5ÿ§i ÿ/#(øÉ}Þhߟ$~8~<…ùáúî0íëƧSŒ†ÀÿŒ—ÑS*Æ .º°Ø‚æ’ÐpjwGõÈl‡´t¤ !14Ä#ˆjdW…ì+­à|à íp$ò\éùëP¾'ÈŸ(ô]ñÿÊzžUÿÛÌÀ¯’=* ÀþG”ÿ)óÛü_ޤ bè¢($‰Bòh¤ŒFšhBCÓźXº<ÑNžì(Oq‘¥­“¦¯“1=äYžª žº­ž†›=Ì·{Z¶y›vøvùêwûkvù«v…+wG)vÇHöĈ÷Ä ó……©‚¢T~qª $$ee!( ö^,gO oO¤†|w¨f¿%Ï£­ÐŠÿéj´$@'¥è‚ŠvEG»n°»fqºZëz¹Þë\ƒß±úùº¨1sl¯1º€u|‡:v@5e ]´ø¯õ9Sïyo½Ó} N7¬öÔÓ©'žh ž´Ò€ÇÀMtHh ^ìA¯ ¢wLj§ðyg_/9|wÈñûÃXþ?œ°_­ùíÁü”ö9ïòß ®˜K˜_/»cHçc®xPüvÕó·«ÞÀ/W¼ÿsÙøåÿÿ\ôû×Ý~?õýîŒÿ×'ý>?âûÑAßwç}^ŸñûÇ$D€ßƒCWúÏu­?Ýá )v¦1z²>f¬.v¸>q !¹·! ï3ÐÞÑ´×§­µÉM–ÄFsR“!®QÛ þ;zrËÕµ7U”Q®—†ªqËyR^¤ ® TaÊC„$¢²qy¨¤" ûŸ‹ÍO®á…kùa^¨– ¬¶Áà“4Ü,‹¨‘GÔ(#¿…BCùÿOùÛü_«O¶`(ÿ§YŒi ÿZ«Þ’‰wã'åßÕ>†I±Öÿñ?Èÿÿô?%ÿ¾®ÔþîìÿÞð?9ùùÿñ?¥} Êù‹“m¬A0?‘ ,Œg-Œåó£9†s åÌ äÎöo˜éËÝß»R`¶kÃ*›0[溶ÎuÝ<×uË|×­ Ýw,öl[îÞq¨gçáÞ]GûvŸ(<=T|×H)ÈÿüDåÅéªË3Üks‚ë󢋢‡–¥“Ÿ')ž:®|ú„ ü_Ûœþ'G@øu9½…¥335F¦B“.U¦‰å)1È?Ù|I}BÉŸ'Šç ãHùÇry±ÕÕ±••±xåϪÿc¡þ'ýmk0ÐT%Tp+¹IUüDnàK>/…ø¨H,¯J¶ùŸªÿÉ™?%ÿÜ5 G7¨›¨K6P]5àÇñ:%[$Áo±á× T9fM6ÿV¿)}Üœ4[{¸>üLsð=mþ×»¼í÷zbÈóùQׯ\^žpÂû¹MÑßšÆsžwfüÀdÍÿÉý³CÄËèËCèë#èÛcXþߟ¤ÿpŠöãiúgˆŸÏ?A G?¡}³Dÿ8l÷F'ñ’=©dÜW‰îº-g¡½‘¨×5Ú#Bz„ÔÉ\ü éÔÿÕˆ^…ˆVŠˆb„òÊ#Ð.Úe‡·}Ã'¼¸£/þ/òdž/ G=EA˜Â@|O™¿,þ±ÿþŸþ/ "_ F•a7‚&Ц‹#‘ ü‰T‘ Ž¢i¢ê;I¬ƒ8ÎQçÂsåĹðÜø)ë$®ÊlWÝFÓM.5·»ÔípoØíÕïS_àcÎ 2ç‡óõyáʼHyAŒ¬0N' K’%IüâD^QÂêaÙñ¼ü?wW4oW¤hW¸|W°f—Ÿe[G‘ÓH}–Káò.k‰ûMô‡,ö5¸¾[Û§‰Õ…ÏšB›×Ÿ´xž­õ¸d²¿j¶»Ïl‡ÜD{ØL„¼yÈÄxÐB¸–þ˜•xº½Ð^ëCoíCŸ sÐþ»Cöß±ûñ˜ÝO§ð¨›Ëßá?w;þrÞ鿜»Çõ÷Kn¿]Y·ŠÇo«Ú~¿æñë}¿]÷üí>oà×k>¿ÞëKâÿë½ÿ½ºþ?—ÖÿëâúŸîøþ”ß—Ç|?Y†FÀçYß—öù=3á÷èÈúë~Wz|N´Gi _lŠ˜±Fìmˆ³Æ[“¬)ýMi½M©@OcJ§5µ£!¥­.©µ6±ÕÛbŽi6E7£¸ÁcM±Vc I\ƒ!¶NmQG¡:I¨F¬*øA¶WA„ˆ*‚qy°¤"DZ*­•sÕ«þ'# TÍ Qó‚4ü`@+Ñ ƒ âP£$ üo–‡[ó?°*ÿÛä§VŸˆOÑ%àÿS:Pga6Ô²­Pöƒü볬ÖLE½5½¡1ü€ÿÉ`QóŸÖfŽ€–4rþŸ²êÿ¤žŽäµþùô§­õ?%ÿéÑÌéñ•™5íÁÚŸÚHA9ij“ÕO rH¥½9‹Ù‹ã¹DÀÂHζüßÀ6Õekÿô¿R›!S¥â³5e©BI2td#ÄI¾cùóD±\a À¬ø¥þ¯H æ?¶¥ýâUÀÿ yÊÿ•¼ ‚”W'”UÅcÿïV§TsÓðû"¶X”IÉŸZÿ÷ŽPoQï+7Ú"€ê Y ðxͪPœ)‘n)6¨”ôš µÚìf»ÛȂ⟚üœ°†]h ¼ÖéýHŸçSÃî/Œ»¿:éôú´ó[ûß›uxÿãƒ9Ú‡ó"ŸíBÍO‡šŸõ“3ÿQôÝ1âûã4Òÿ ðÿOwÑÀÿ?ß…~: þGß.ŸMÓ?¢½ÙA¼Ø°âÿÓw &…âßÕÓ!#¢ÿ剮ÿ‹)(þÁÿyíAkü ˆô?¾`eÔ¿BQàŠù©¥žTñO þÏúä_‚ªÂi|ð$MI€ü•äÑøtHš<ÂNi/‹vÆ8‰£øÑ®œ(n¬›0ÉM–æªÍt6mtl¸Å©åNÇÎÝÎ=…ëzJÖõ–ºw–ùu”­o) h( ´”‹CUÅáòâHi1Þ7XPŒÁ+B‹ã8…1ÕÑà¨ü¹»#;#E;ä;µ;½Í;Ú íG+i |tB†.¨Ñu#í‘:û'êot}¬Ùý‘f¯ë-~÷´j?Ø5]3lˆÔÆ i"'´¡ôA‡ ¾§ŒîçLëîÑ0.éèW5ôkZÚýZú ý~5íºŠ~Ÿš~]C{@ÏxÄB{²oÊñz/ñÎýãiôù,úz‰þÿá¨ýÏ'@þÿ9ëôË9çÿžw¢Ìÿë=N¿]rþõ2–ÿïWÝ~¿êþǽXø¿ÝëNñßkî¿]wÿý~?nxþ~Ãû÷¾¿ßðÇÜ¿þ·þ¿ÝXÿÛuÿÿ^óÿå^2¨Ã{~ÄûÃ%Ÿ7ç|^Þïûܤÿ££>7½îé ;×r¢5ø`sèlcÄtSìDSühsòpKê@sZSêš}’:ð†3qu±m5Ñ«ÄR4Y¢›-±6¬Æ¨Zm˜Yj…é$!QJD¥€Œ ) å†í@¨¤*V…ȪC5þW "Ô\üƒü)lþ׋BÀÿT þ7+#Aþf5ö¿YmRcþêò0}å‹1ä_kΰùË¿!»±1‹„MAÊ…ÆF&…Íÿ-Mé-Í©-ÍÉ­-Éÿãÿäµþ'ûþ]þû&@þYó“9 S¹‹Ó–öaÉSœÞؾÄLç,NeK{³Ü]Àâ(KEÀüÐÆùÁ ˜Mó½HòfóBß–Åþ›ƒý·-Ü~hàΣ;€cƒ;O î99”wf¸àìhÑÝã%ç'Ë.NW\ž©¾:ǽ6ϽqPøÀ²èáÃ’ÇŽÉž<©|ö”šâOù׳@þ†JþéjC†B› þ‡@"Oƒ€.?–$Úù“þµùº?®š_ɉ'ûx¶_~õ‚KÊlþ½C¶Ç5?iþ2^l\1‰¥ø%ˆ†äj^:õþ&µþG.Ͳ•ýä¾mXþäî=›´ÊÍv² ù&™t9ÊÄÒl©b‹B‰²1h7ÖérZô™½&æ˜9u¶6a¹!òLSè¥öõ7z¼Ÿòù¿<éþöŒÓ;³ŽpÂK¾—ì@øŸ,ØüËôÏÓp嘔ÿ1Jþx‡O¼·3ÕPõÿôã‰ÿ1M|8L³ÿŸR1®sÐÙíè ‘þ·¨Ù‘½Ñ)ÿ‹È.û¾µà÷ÊœÿsS¾yÝ ½Ö|¡+äd[Èr[ø|[Ìþ¶„©öäñ¶´Ñ¶Tœ-)x“äÞ¦$MñÝq]ÖØÎ†˜ŽúhÈmõñ@k]\K-ŽƒzCx6Ä¢3ËCõ²`­8X-R‹ƒUÂ…0X.ÁðB7DÎÁ(¸Xþ ^ „“¦âÿÝÿZAq8ИÉ0©"!Lš(£*j­ÿÉH§€ÿCr)µÖœò¯¯aüÿ"ÿ¬ÕQO¦µ‰ic­ÿ›š™-M̵þ§Z€Ž¶Äîö$ÊÿÀ@wÒPoŠÍÿ¶±ÏÔÈ?g?.û³)íÿŸþ·ÿÊÍTöÂdÖâD&È® ãìù1¸f‘þÇ-°8¼aah#ÅâÀ¦…þ˜¾Í‹ý[–n:8xóÁÁ[Ý~xhÛ‘á;ï<1²ëÔðžÓ#ygFóϯʿìòLåÕ¹jÿ} ¼ :Å¿ôñãrðÿ3'UÏQ=—äo±f®‘†Æ˜¦6¤©ôé6ÿÛ"ø›üI⨠‰ç â9ü„j67…$¹ŠC=áM"×%Ùü7¤ü©Íÿåü¸r^PÁIªâ¥€ÿ©ê]*ɦÞ&7‹ÀPþש6êÕ›©­!Àÿ*ùF@Y ÚªRn  ^Ër媛ê­ZÍV£nS=¹æ³Ï̯I™­‹;dº«%äJ‡ÿC½^Pü¿8áþÚ´ûœ?œw¦äÿùãóƒ`{¼¶çÓeWÿ燱ü±ÿ¡ò?Ž(ùÿpÂîoþÿñôŠÿ¿;ˆ¾ÚOÿxŒþv7ñr#zJkƒG\ØM;šCŸ #º\‰&£ÙƒÿµÈNA 9 ‰i8„ñ*£ÓKi´"‚ž|λ­ÐÅ®ÄÝ¡ÄӾě^æÇ(ñ§Qþ§žÿý)¼ÔsUþký¿¶þ_ëÿÊ0üO ÇARÇKÁüH€„„0&BB ˜Æe#äñnºtws¦kÓf·žÛ]Æö8Ï”º,r\‹ÜË;êûÁ!ÿ7— žŸöy|4ìÁ¡+}!g»BNtF-wÆÍw%Ív¥Mu¦ïíÈkOnO†ÚÒ†¨ÇZúZâ{›ãzšb©  ² ÛšÐaÿǶÖÅPþo0FÔéÃjUaEˆA€V¢‘„¨Ä¡JQˆR¦„*ø+) ä…”üü0àoþ·ÍHÿ‡êEaÀJ 7‘þŒêHƒ2r5âV#  üo1&‘òOùSÅ¿ÍÿM+'vaù77gá÷¼šYÿëÿƦŒæF m­ÿÊÿ=‰½Iký?Ї?̽C¬ÉaöähæZÿSõ?\©j¼ó§ðW§=+ŸOùÙÀÁÉl[,g/Œf.ŒdÛüO² XÜ @±4°õààMËC·¼åÈðGG¶Ýqrt÷©±=wœ/<7Qt~oñ…Éÿ¥ýWf«@þ×ù÷ä¯ñ¿ô‰²§OÊŸ=­ÿSò×פë,iZs*È_kHTÚ$¥:I¡H ZÀÈdqRi¬D+’D Å1¾ Eq"q¼P” %bÈWð[üd/ Òx<¼’“j*ª’Ë*“J+áJš?‰šüTq k8ü$ ¸¯ââV‚+Hä‹’¥R&…\ŠŸÞ®Ìüå¹:E¶^¹Á¨ÞdVo6©H”[ª­zÅf¸š5747á¦@¾š­b«^½Õ¤»¥FSƒ~s›>gÀ”9iNY¬9e ½Øâ{»Ûã½ÎxȽŽoκ}4ÏødÑþ³e‡/—í¿<Äøò À5ÿ\ùS‹<¿>Dÿî0ã‡Ãv?aüp¯öÁœ ÿx’ñÓiúÏghÿ:Eüû ×¢oÑ3´O'ïöÓ_kG/\3®£S·¢ih(µ»!«ª'ÑLÈÞ€”ÈA†ìÅÈA€ì8Uó|à»=û{¢_T²•¯k„¡¼P|…û²TÆ(eKýíJåt "ˆV„*‚1eø²*ˆVˆO~¬„²?qC  1`{p>ÔüÒ`B€Dþ‰?û!®¿ߟÁ_Oêš15¤¹hðf4µÍ£#ÕèŒW÷hÑý²‘~É„ß>§w<¥u:¤v™—¯›”y ½;¸ëk+‚´%!òâHqQ¯ ‘S$-ÀË~¸»¢+wFWÞY}Gˆh›¿v›k{¡ã¾jÆIí^ñh-ñ¬•x¾™x±ñB»ë³mnO¶y<Úî{£mýÅæÀSõ!Ë5³ÆÈ uؘ,h¯xý”À{–ë¶Èu^¬v8SÉ8UN;YJ?UfºÔád±Ãñ‡£yv§ çÊí/rè×Ä´Gt´gêè/·1Þìsz }:¾<@ûn™þ¯“ÿ=ëðÛÝ¿]túã’Ë—±ü¿º2áùõº÷¯7|~»ß øýYä“üþ †t¾ïcÕÿñHÀŸ<ø—/ôÿí>ß_®zýrÉóß ¼¿9åýù1Ÿù½½àóƬ÷s{ƒŸzp(àÞàó½a§º#ŽtE/wÇ/ö$Ív'Mw'ïíJïLíJéJìJlOh‹ïk‰ímŽ!‰£ B¡»1âú‚¶ÚÈKx“)´^Z«±(ƒŒŠ`£"‚@' ÕJC5â0@- W ÃHɇ۠‚@ - ~ Œ¤>‡° 5 ‰€×JÂõ²H4B/7("ŒÊHƒ"£Š ¨"Àæ''ÿfuJ6­V—ZoH·š˜ – |ün]Fyc³•MÕÕÚ”´5çRA@Í‚VÿSï53É×ÿ­MÉ­ÍIÍÉ-Ií)Ô ¼´+u '}¨¯ÿðÛ¾xþõæôhÖ¾±ìýã9³{7s“…ÉM¶ù?ù`% à·qh2çàDÖÒxæÁ‰œƒã–Ær¡ì‡+)Ð lÄŒl^Ä@ Ú²Y²l ß§ÃòŒòý&ª<¦*œfÊìçJþ?¾Îº­+kÛçÞ+É̉™™™‡™ÍÌÌlÉ–effŽ1Ž9Ô04Ôp!å”Û”’2·Ó™¦ÿ>÷ÈŠÓ™ï_ëYZŠ'éšæ›ïy÷>°3 ÿ%÷c¦÷Ó‡ö1“»èñÔØvth'š÷¥Ž£³1èjº[ˆ^ÑïÖò>jE_ô¢¯†ñ>þ¯s¼Áðä9é'§e±ÿ¡æ¿ˆyž°ÎǪ—˜Ÿ_ êbùßÔxFøbtXtÿ~Aç﫚_õçéÕ¿ŸPÿñÈêo4¾<¬ùɤƇ£êo ¼Ügp³Sïr»áÙ6ããÍæ Í–3M¶“¶ìlûêm{ëí»êí:êmÛêí ÚjlZ«­I,c-é  ¨˜T•s I¤ëç§éå§€ŸA×Äÿ™ FàRç³°žÒ'E!ø!éVú?#^ŸDþ™,˜4¤þ'-~ü‘€ÂLû¢,;AŽö£ÄÿXþ+ü_Yæò—øŸDÀÿåÿòRâ¬ÿI°[À’+`Øÿ-®ÿð?0Ôí@ ìö–œÿañ$§}0Ëþ‡²/þtyà²ìîü`ó/ÿÒëþù‡Z7δbÿϵo]êØu¤s÷Ñ.ÿþã}þ'úŽ`~‰ü/ŽE>? ò¿6wýP<øÿöá¤ø?«Ð!#ß.-×&5Ç:5Û HÉ´NΰJJ·LN³HJ±€‚ŸÀšßTb~1ñ ‰V‰I¶,v˜D‡eœÉ |«7ÖIre˜d¹;Œ¯•açÛìá"r×À²äÀãí““]€”WzªgFšxÃWüt;ÔÿY늲7‚ÕÉã_üœ-‚Ü­Ey[AõÐ@dg¬r³6çeo)ÈÝR”·¹$ocEþºÆBÏî"ǾŬPÿ¹ ‹ÕÊ·›ïw)¼Õ__ýrŠƒ_oŸá𿥿CÀwó@¾ÃůúÎbVú þÿuIìÿ_gчÐ÷£œ¯¹_vq>i¦”1¯ ›©èJ40·ž:èD÷š¡&MT­Œ„²¨‡²i”N³ AÅ0(Š‹Â¥Qˆ"7X¬É Õc Q˜) 1§‚,9V¼K®¿'Àù#ødƒ€ 2 BØ‚Ÿ?JŸŽÖ§£ô¨H]Äè1]n”>­ÇDëÒ1ÚT¬b[Mñ, êtâ**QIʘxø²¥hââ Í‘È5zÓ›©¡=Ôd½EŸHÆò¿ÂçÝòî–Kß­“n×É¿P­p¥RéB¹ÒI¡ò_m*Om8[³3]»)I·"R@7/D'3P+ÍW'qŸnÌ.È: ÿˆ-êñ[U²v€ÿ9½bÿ_/¢ï 9/—q_­”ù¿T©r·BíF¥úóeÚ§JtçŠôÆs úÒ ÚâtZ"5šCUÛä:ðº÷Q½{ÐÐv4Qµ †6£þ ¨o-êóA#ÑÔN´pOᾜ„nå WŠÑƒ ÎÍè³.ô¸ŸùvŸ-ÀŸG¥ÿ:!#nÀÿ—”ñ:Ï?œÏÚsCCò],ÿøÿ–î²üuþ¾ÉúÿšÖßÏkþ}Aó¯sšÿ:©ùËqíï—´¾šÓùlZû£ Í·¿:hx§×àZ·ÑÅ.óS–GÚlæÛì¦[Æ›íGš›ú›ì{›»›:í!€ö:›¶Zk‚€dÖ+"À¤’o Ê3.Í5*É6ägeâCAiFÙÉËêŽ72ãÄ)k$ñ?È?9B DËè’H‹ÕeSÀði$áÎ"+Ù ;•ñùòP¼þò‡âü_’çþ/ÿó‰ÿË…®OåOxêv/Àuv!HäT*r(ÙÿËEÖU"6*1Äÿ Õàhñð‡f²$‰ò)É‚áN|ç÷é‰ÐåÓþ9óI|ȶ¯dÍŸø…ü½&Ú×°øŒ·®gå?Õº‘-þ7Ïwl[h߯Êϱn¿ïs'ƒž ÀüçFÂ$ò¿<Cä@ psæŸþO˳J͵LÎ6OÊ´3Ì1i ©æñ)f±I¦hŸ—`‡‰7ÅÄ™ÿ'%Û%§Ø'§8ˆIvJNr$$$88âðÙûØxç˜8ð­DC¢#>t xˆ„xŽDŒ5¾JÌ.þ@”ù³³ú=3Ó½3Ó׉ýDþ¸øÏÚògÁ¯ÃçmÛ!ò³7ådn“µ5/wkaÞö¢üm%[* 6Ôó×tð]‡Š­‹LŽ•k]¨V½Ù¤ür»ü›}r +}6É|1Í|u˜ùfN,Öÿøó›y1ä'ßÏbðÀüSÿÿ²H¯ôÿoóè§iê‡qêÛî£>ÎÃvê½ôz9z©ÝÌ@ÏÇ ÓþôÒ6æðfÌ‘î3G-z¨F•(¡B9|,•ƒdPœ,ŠV¦"Wó"u¥£Œ¥#Í¥"­8‘¶œp{nˆ=/À^ÆßNÚßFÊÏ’ö5C(Ð úbŒB ¡¶‡:Ÿíƒücôèh] ˆÕ¡ât™xL´R V/é@m»ŠŽS£ãUB‚ “¤Ì$+Q©Êtº€’•Q†:ÊÕE|öuøFOªk#ÚEMàÇ+O$ÐgÓ™ËùÌæn÷•îýf™W[d_m“¥Yþ^“üzùËU ç*”Ž •æªùêÝéê-‰ê51«ÊÃUò43¨'îR‹Ý¾*b«ZÔ&å¤m ¹»dª|¹}‘œù©3ÙÌ•Î->çN çEïžHñ^¹Ê­rµëeKužèÎÓ?˜aРÛ¡Y´ªÁW¹a·lÓv¦u jÛˆÚסŽõ¨k¦Ãµ¹¡VWÔæ‚z=ÑÁ hf:€.Å ièå|ôF ý^-ú¤þ²—ûõ0ïÇI©_f¹¿/rÉ*nÎ+ü}Q /ò“]@¢} 7ÿmÌ-‚.ðä&öÿ“´±ü¯h=¹¤ñä>úÇiíŸOhD÷ñ‚îg3:Ò~{ÜøÕa£;}†/ôš<ßc~¦ËòX‡Íb‡ÝL»ÃT»ãh›ÃH«ãP«C_«co‹CW³cgƒ ÐQo @ h­±’tõ"óZ¡iu±q•À¨¼À¸,ß" 8ÇHùéÆl¡nˆ—n’Œ²! ˆ3dS/ø¬ôR¤nr”Þ ð "BJ,nðgÞPHOÐÏHÔËd# 'ÕHâÿå° 3mÅõž=ñ?Yü!ò¯|Fþ˜ÿéÿ’R'Ëþ•Z“¨Â[öO—€Ø[À@k½ÔÙä¼<‚Ý `³€Ä0ØÎ²<‚Ì|$7G;]Fñ§Ûh¾ùEüYÄþŸh÷baåß¶–Tþ¤øÿϵoÿ/vlgå¿÷xÏçúüžð?5|z8ä̈XþF#.Gÿ_™zZÿ“ýß;óOýŸ˜mže—a›nŸf Ä¥šÄ¦˜Æ$›Ä$G'b¾<Ìùz¹øÿ~9þ‰ÿñ…ß9üÏFöÿG¨ßØ# ?NQÐ|5HÞ‡?¿Ó€^«@/ñÑí,t5žºÆœ9ÀÝÆ™ñaF©~[ºÕUë ájT ŒÒUPêj¼oÈ‹3—³‘uv–Žv•‰p— v— p•óu’õu”òµçùÙ16(À [¢P3fŒ Sˆ2@ÑúPð#bþxHТµèM*V›¯-«ÉeåωUeâ”é8EHP`˜$y&EžJ“GYŠtŽ"“«ŠÚ¨ÜÕÙ VwÔ»ÜIò§Â9'â9gR9³¨k…Ômz¹†z½‘óF;çí.™wzäô(¼Ù¥ðZ»ü½9H«5Jç+•!ù*‡ ÔÆ³UR•ºâå*#Ô‹ƒTsö)¦ìRŒÛ*»I&u«TÁ^mw šþ?•Åy>ŸÕ¿YÄÜ)æÝ*Þ*Ý(U»R¢yN {4_ïP¦Þ@’Ak„v­¿zÅÕªí U¥ª}¨:oTç‰êÝ ãJ×;ѵv¨ÖÕÛ 6GÔï…&· #ûѹ0t-ÝË@¯0o•£ëéO;xúxߌpœÂWþXâýç¸4nαK@Ï+cÿ¿° #‘ü-ͧüó‡ÚO¹­Güÿ× í¿®k=¹ªõ䲿.©ÿuQóßç´ŸúQïÓYݧuÞ™4}ý Ñ½AÃ&—ûÍÏöY?×m»Øm?Ûå0Ýé8Þá8Úî8ØîØßæÐÓæØÝêÐÝdCèj´îj´%Y ˆ€¦ ‹†23Ò@Tš(É#`$Ž€TL^ŠQn²an²1¤Ž€x}hHýO䟡@È ²¤(=|‚”‰­/΂8]ˆð?b¸f’·Ù6ü[ðI¾Ci¡CÿÿW=ëÉAPö,¨ \ –: KíEB{Q©m™PÄÿl8"oÔâY­õdÚ?›.$$Yô·>Ï‚cǾ µ»FÚ]v¸lwgñíð\+åÿŒÿ§ÚÖƒÿ·oÿ/tn_êÜAêðÿ‰^ß•þ?{0ìüXÄÅ ±ü‰ÿë‡ñúÿ­Ùdâÿ» i÷Ó_\ÊHÈ6‰Ï4ùǤÑ©ÆQ)FÑI†Q‰F‘ †ñ†áqðgÚ1 ‹6àKDŒITœYl¢e|²5[ü@þÉIöI‰vI‰@b¼#ñb¼3yo €/))î óÔT7 %ÅYÒ2ˆÿT‚=I¸8{Rü³¿Ó#- ¿DIüO^‡\öÿ†ÂÜM@QÞf~þ6¢}ø,)Ú Ÿ úüœÍ$rr·çæí(ÈÛYT¸“_¸µ´hK}#ß«[à4*´šœ¨Ô¾Ü°êv‹òýNÅ·ú”?e>c>Ÿâ=žæ|}xy˜Ï,ú†0÷O ~\@?ÎcÀÿl _‰ÿñn&iüø ;ÿÿƒ6üìã›Ux…áÅPx¯Oáínù×;^nU¸Ó¨xµJñB¹ÂéRåc|Åù\Ù© ©ždõæ•ò…"_¹Ì]¼ô­œìLñ^NsˆÔH¬øÿd&÷|÷r>÷Z÷…"©|¹åkÅjùš' tç²õF“t»¢õê´Êv¯nV®W(ñä ](‘9"‘=SjG‹l‘5]jA—š"‘ ª4AÖ¨Ëù ùø-†+‘èV"z9“s_€Þ©d>nä|ÚÁy4Àýv”ùé~ÍùÏ£¼ÿœ”~ê¨üo¬þûæêÿ!–'75žüOÿßÒùc^Ð~‚´ÙëZ]Ôþó¬Öo§´~:¡ûÝ1½/—ôÎé4­÷`Òôµ1ã‡_2½í¥  ø ™zPƒÞQ¯Q/gSwSéë1ô¥Pæ”/3»>èƒú‡s9—{%Wöj¾â¥|ÕÓ¹êKš“É:=‘Ú:å{4ø›Wå{+å»Éç8HåYÓù–(ßå›r1Æœ|C:Wåh¡BmT¢‡jM©v[zÈ>´Û…ÎAD ;ñÔÝlôz1z· ßú¼›&î»qþ¯IZñÀe¶òWûÿ¿äÿÿóÿòþ¯ÄÿO.kƒÿÿs^ç_çt~;¥þÿö¸øÿðÿŒþS&÷Çï4yaØìùa‹³V'úmô;,ô:Ìô:Lõ8Œ÷8ìvêrìïtèëph³ío·ík³‘¤€¤€À-@µår `P]lZ%0€F€Dt‚lc6Œ!ȹ}ˆ€œ$ƒgý¯ •?6˜|Æ…iÄü±Ú@L¸VL8|ÇAB4^ÊH4‚ÈI5òRMâVþVÅ9v˜<[¿°À^âÉú¿¸ù—º•—Š/ãAÅXûübG›¬ÿJKp”‰ì*Dä,¨PU.îê«pà¨vhªaœuNíõÎ+‚w=M˜ÞfWòotékr•Ðßâ<Ôâ:Üê6Üâ€ÿG—Y>ö‰™l] òÇþoÙ0ÅB6çÚ·.´ãõ²ÿ+ñÿéÁ@²í þ×ÿS1‘?ÿøÿæ\ò­ùgüŸ˜k·"$þKû?$Z78J'(B70\' L—co›h ðtÿ7é©ü%þ'Ó×ñc^ÉîàðÌÌ5,øqyüÚcº[Zª @üO–  ù/ÿøbüLŠgJ²>ÆŸ )€oûŠ72}r³×Küù»ÄÿÐ@À'+ÿ=E»މm¢¢MU…ëšùž½%.l `-À…:õë ªwZÕ^ë–~³Oæ½!ùGd>Ã?qq3l0äÉ' {"ô›;ùG,v"þȈß*ÆŸg˜ï§Ð·cR†8x"h'ýa3õAõn5ýV)õzz1½Œ.FÓÇéÙ}ôÄÎÈNËFÙú òå•ù›Õr·kdíÒLÛ£ž¼O=vZÄîÕ;VùnUóݺÚëªÀÍ*ƒÖÊyK‡xJ…ºJ…9p"l˜(s&Æ„gÄÖ¥£5éh *f5hŨbÿG© ,ÿ%£€ˆüc¥PÅsP"ƒ·¡Ói”ÃE%r¨RUªÝ Ø1“žœÙMx©äd(:‹.¦R—3èò¥nKÝrÉW¡ÇiEï÷p>êç>’þlDöóƒr_Ž)_Œ©|2¨ôá€ê{½jouªÞoQ¹W§t«JáZ¹üÉ¥Å|ù‰t™¡D™öH^]ÕÄ´‡ãÅÿÉxÞ|"ïh2s2•s6{.{!CêB¦ô…l…³Ù*ÇÓWNÖŽÑn Ò©Ú«%ج‘³F-ÍY)ÕN.Ùœ—lÌ$³×ÙRt9©:7EƒNVÅÛ™ª¨PZ-ºÙ‚éu¤Ç=©¹Mèø.tÞ] E7’Ћ¹èM!ó^ ó°"}=„Ïtý6Çàƒ@§e—ýe¿&Þá•8ÿ¶ð×mMÂniäû3þ_ÞfÿµŸ\ÕÂò¿¤ýçyí?ÎèürJ÷‡_3üüˆáGó†ïϾqÈü•I³;cæ7F-.X²>9d{lÐa¾ßq¶ÏñP¿ÓD¯Óh¯ãHÓC¶Cöƒív$H;À6vЈ[€* Ò@kb$  åÿÏÈOÿCý¯›g˜£Ÿ¥ ©KüÚ …ÀªgË?:B+:L›Düú‚ä8ýôÃÿËÿ‚lë’\[ +@Täøßþ'`ÿ ]%òÇÚ8ñàó¿#@$´ÇÁø.€ÛÊ2»ê ‡šJGˆœ•Žl 4W;$H/€S Á¥³Ñµ»Ìï&¡·ñŸô5;C;0Ôì>ÔŒ§½´zãÛ¾,c­^,k@þdÍóŒÿ7“Ã? m;$û¿ÿ“_ÉúÏ¥ÉhÜн6/ñÿÙ$ðÿí…Ô;‹iw—ÒïÉH-°LÉ·HʱHÈ2c‚L£SÁÿ‘ÉÆ8b±üƒ"µ#´üCµüB4ýÂu„jû‡Bèƒÿ#ã-È-0hâlÈ-€ø8ÀHˆ·‹µ'þOMÆ#—¡Úççä¬ÍÍõÉÎ^Ã>õ‹ë€øû?Á ä°{®ó'%z$&¸Ã'>äéöœ¬uy9 ò6 ¶’šÌ_*Ø-*ÞŸÅËP”¿£(o&¿`7¿`'üþÒ‚Íåùëëùk¡è/±Ÿš/”ž¬Ô<_»úJýª;­2¯tʿѣø Oþý™y‡ñø/2dà'™ñ˜Í‚¯§¹ß#óßð*n@þì Þ€PøiŽÆÃ"&¥¾—úf„ûxÏý¬¬B}PT¢×Ù·€¯¤Sg8G#¥æBd¦dúüVwP¯Û¯!Ú¯S觛㧛ê¯ä¯ã«¶_#`¯zÀ>íÀý:¡ûuCv«oW ݪºI9ÔG!ÌS6ÂE*ÒŽeɉ6åÄr£õ¸‘ZœÈUL”*©BE*#Œ"ŠQDÑŠXþqò(E R(‘‡’8T…’Ê P.‰”è&mù+4áÆYÜÄ;±‡>Œ.Æ Ë)èZ&º‘ÏÜâs°üË¥îUÑ/Õ"?(ûå˜üã ů&•¿Wþ|Tõ“µV½ß·êí.µW›•^¬“¿V©p®Dúx>o.‹7šÄˆå ÄòcxPüN”ZLâMäOdN%sÏ$óN'ILäL–;ž¬<› 6¥Ñ¤Y³WäŸå­–â¢g­e*i ©ÃÐd¢4¨ØÕÜh5&J…ŠRBÑòø_9E e«¢R]N­1ÓnÅ 8  O4»Û†ÎîEÏG¡[)è~õ¦z¯=lE{Ñ7#èçCÔŸKR’ûû¬">ÿsm5Þê]Ö>æ®6áÉ-@ÿ?¹©ˆ÷ˆ_ÐüûYü×ùÿû‚οÎêþzZç‡çô¾9¦ÿÅ’á'‹ÆïÍ?˜5¾?csoÊâָŵ1«‹£¶§GìŽÛv\ržt><è4Õï4Þï<Úç2Üç<Ôã<Òm?Üe7 AÀ¦€x9¨ÅZ¶þ·„ú_Ò@ýOîˆáà›±{¦ì‰ Œ0ÛDé&à2)‚…ê\ö‡j±Dõxˆh˜fT¸fL¤vT†üüŸ<Á03É8+Ù(;Å87Åd¥ÿ‹³­‹sl„yxÙù ÿŠb²þ#ñ?|)º–/O+vó…EŽ|L~‘C!ß¾Hà°2èÈ¥0<Hd@#P[áÔ³@ 4U9µÔ`Ø—ß,õÎ]õnÝ î@ϳô6zÐ 4º6y 5{·¬¶¬eñ]f‚=ð?ѼÀ+?-›‡[6A̵m_öÿ>²ÿ‹×‚VÖÿÆ#%þ¿2GÖ@þ¤þ'þ'¤ؤæ['çZ’ˆË0#[dý?<Îê(þ±ÿÃ4|ƒ5ö‡ház!QÆa1¦qæxø[¼ut¾&^·µÀÿ’õ¨ÿSSÅþÏÊòùÃgF†ØÿDþ’cøýìÙQ<«Ÿ ŠwIHrKHÂæ'#}ðC‰xÂCZ ÞÆYëòs7Bý%}qáÐ>ñ?Y¥>Øùóó÷òqñ¿§¸`^&*Ø"ÊßP‘¿¶¡À£ï4(°™,1™/ç«5¯ÖËßhV¼×¦t¿SñÍn¹·{¤ßéå}ÐÏùp`_{FŸ¤>cÇþ?ÆcÿñºÐ·ì‰PRÿ“ à|€Mš|4èçê×ÃÌ/Ó Ùøj¿ ùYõIõnz£½XŠgš]È‘=•¦°”¨<«4©Û¡Û¢W¬_b˜b¢Ÿ¬¢¬dlldá¯~@3r·VäNð-ª>ŠQžr‘޼(kh¸QFÜ(]^„&7\¦B‡+QaŠ(TEÊÒ‘r(ZÅÊ¡x9”(’åP² J•¦Ò¤è4J£ð`Ò"iT¥F·*Œ» …õÔÉ=ÜóAÔó1èz º™n¢Û|êN s·Œw¯’þ¿WK½Ô€î7£·ÛÑ{ÝÔÇÜO‡ñCº&ä¾>„_Eÿæ°ê×Óª&Ô>S{xp¤ÀÛ]ʯµÊ½Ü({³‚wIÈœ.à,f2‡S˜é$î¡DΡf6ž³Ï]Šç‰ããá‹æ-ÅH/ÅÊÍF+…«viÔïÓ(Þ¼:Ë{u²³Z¬J¸©Rˆž\¦LÀj^ 7@•ªÄ V ƒeQ° “FÑÒ(IžÊT¦øêÜJ=n£1Óe‰И+š]‹Žn¢Nùá½€;© D´iÔ¢ÏÚÑ×è‡ ôû<ï¯rOÎ(àQר2þ–˜Ÿ_âÿ¿îj‰‘øÿ¶Ž$pãð‚Øÿ_â_äÿç9½ßÎèþtJÿ»†Ž>\2yÞäÁœÙ³f/¶»}Èöê„õó¶çÆìOŽØq:2ì¼8ì2?ì:3ä<=è21à2Öï:Òï2Òçz°Çér$0ÐÆF@‹ÝÊúådXøŸ´eù&$Àÿ%YÆ‚ c²LüOn@ýŸ®•lˆ¢¬ D†hF…j‘!ê@T¨ñ? ñ*®ÿ²’Mþá¼ø“m¹råç¿‹‰ÿËŸúßä/`+,ÿB§ü"L^¡=‰¶p()q\NGì‘#¡BäXYæPSæ@Ô•C86VBýïÜRã´×8:j]:ë\®zî:žzÏ•ôÕ‰éopëoðhôl\ 7­iöð¨Ÿe$òŸhÞ0Õ¼ þŸiÙ òŸo߱عëHç^ð?©ÿŸë ÿ‹¯}±õÿJÿƒüI ð dÙeÚ¦ç[§åÚ¤d[%eZħ™Æ¦˜F'CDÄC  -@@¸¦ˆú¾`M"À7T/(Â08Ò(4Ú$"ÚˆŒ±ˆí?=ºƒoÿ1ì2>ñ?8Ÿ¬üÀøeZyíÝ•¬ù@X€öÉÝ1òLt¬ct¬sLœ yqOòŒv‰võLŒ÷NIôLKÆ“?³3ÖçeoZé"âÿ’ÂÝ`{Aá.?k~Vþð“‚í%ù[Kò6—åm¨ÂàÖYä0(°šÌŠ + NU)œ«UºÒ¨z³Eén«âKí²¯¶K½ÖÁy«›óv7z§z¿}8ˆØ`ßyœDlP$$þÇS Pw” üz„óË÷÷ôÛõË õãõÝ$~þñ0÷óA©;¹o·J¿Z/§Jùjéªs|c9šó#ÉF½ F 1Æ¥QÆù‘¦™¦©‘&É‘Æñ‘F±Ñæ1ÑÑÑVÑQ–Ñ‘¦±áFq¡úq~úñûucw©ÇnVŠY+ãʶa"ÍèHCjàÐUœe:H‘’§‚dÊ£ÃyT”Š•A r(Me)Šúä+ròäQŽ4*ABEÔ MõYÉϬC'vQ—‚™ë1Ì­4ú^.z±½$„äB/•S/Vr^¬âÞ©¢ïTSw먨W›Ð[è½^ú£Aî§¥¾˜þjZþ›ùïæ”¿›Åï¿:¬öxZý‹‰Õ+¿×'÷n‡Ü« ÜÛ•ÌÕRæl!}"‡>šÁYJå,$sæ8 qœÅXÞb´Ôb„Ô|w.„w8Tf2T~$H±ÛOµa÷ªÒÍêÙ^j Nª–ÊÁ&Šþ:òÔe÷©JíUäî–göÈ3¾Ò”/ùrƒ8(Œ‹âd¨4E&O•#ÔäVé2†t§ê³F£ŽhÚƒ^Ú†Îø¢«QÌí$ê~zPŠ>j@ºÐ·CrüÏ#²ÿ9¥ðä‚êßWÕÅþÿGÙWëÉ=m¾üçÎÿáÿëbùÿç²Ö¿/éþqN÷÷³z ÿïŸ3z|ÌèÓ#¦ï/š¾½`ùêœùË3æ7;\›²ùŸw85æxâ ó‘ƒ.‹£n #nóÝf†Ý¹N ¹`ö»õºŒö8ìvb#Àq°Ý¾¿Õ¾¯ÕüÏnØ®<T/2%ó‚$SãH ÀF€IiŽ)ñ??ýÿ“õÿÄ\ùƒüƒÕ‰ü£‚4ÿíhÀÿ‰1ú)ñFàhVú¿0?YœkU’o¬\ù;‹®å%î@…У¼ò•¸€ÿÉ[¬ÿ]@þy…޹ø€W„ص âbq KÙp*9W”:W–95eÎ8ÊëÊpT85U:7W¹´V9·UC ¸vÔºuÖ¹]µ@w'¡·öúêÝq Ô{õ×{4¬¬_3Ô°v¸Ñç`ÓSÆ›Ö7­gÙ8Ù´iªy3p¨eËtëÖÙÖmóí»;÷K]{ÙÀïD¯ÿÉþ@âÿ•G€ È0‰€¤ ‚¾Sv‘#¹–žg›šc›œa•j—l“hok£¥®¦Iü¿/Hün€ýem¶<½Á*&Æ– €OâpüØ.~uE|Œ'%Ý=5Ã󧤸ÂñP(øãâcÅ·†Ù‚Ýò!öé–H'—ðgøŒŽt%À¾ü…# 3͇õ?È[IÑvÉúY"þg#àùðG¹›!Dùëªò½!: íû–£%¦¥Ð¨­Xõ\õªsuj—Ô®6*Þh’½Õ,õR»ô+ÌkÔ›ÝèA/ú`G;GÀWÓøšð·ìF°Äÿ8–ÐþoG¥€_ð€ßÑï‹Ôo ôOsœK}{HJâ/F?P|·Gõõ¶Õ÷µ®Õè-2˜ËÕÈ0ëH1©7-‰3Ï‹Å/w§ÇY¥Æ[¥Ä[%%â-˜ø$‡øog–k’j’¤Ÿ²_#y‡JÒFÙDnœ=Š1ǧ@õ¨ *@ùËRþÒ´ŸåÏC!4Áab¤¨Y*]媢ÂUT±:#Òä•kóʵ˜r T¡êuQw“9¾?^óB,s7y¥€z­½&B¯•£ûUè~5>óùb5–ÿ­*êf5îÖ¢WšÙç2{é‡yÇx¦ d¿UønNñûy•æW}?·úÛ™U&T>‘ÿ¤Oæí6Îýúv%uUH_(dNg3'Ò™ã©ÜÅxÎ\3É —ž’:äÇ›ò•ö•í÷•ïÜ«\·]¥dƒjާZ’“j”õª`ce?=¥}«ew«ðv*pwÊ2;dèíÒÌ^ÏPÝKãyþ4 å øwO‘ãd+rùª<‘:·Z‹iÔC­F¨Ç Ùq¦½ÐÒúÌî•pæN õZ>z¿}Ú‚¾îC?NÐÌKÿZ€ó*_^kø›Úÿ“ÊŸÈù?õ¿dýþÈuuÜ;\Õ$òÿ×y½_Îèÿ|Ú*"ÿ–,,Z½:oóâ¬ÝÛ+ÓΗ¦œÏN8w:1îzlÌmiÌ}qÌcaÔ}î Çìˆû¡awðÿÄ ;øtÀ}¼Ïu¬×u´Çe¤Ë‰õ¿#ö³CO3D€Cg¾ ,ñ?Tj]'´ª-±ÿ³-€yE¡¦¢\3âÿ¢4C²þ/ñr”YüÁþÒ$Ÿ1!xýäÿ¬ÿñY ýä8CÉPNª‰øðO¦™ Ç’ø_X`+)þñá+PVìˆJÄ”Cñï*°ÁðÓ…EÎàÿܧœ|Çì<𿉀¾ãŠpÂÀ":••:“ªEN@M©ëç†rçÆ —¦J×Ö*—¶jW ½Æ­³Ú³«Æ‹Ð]ëÝ»LO—„ÞZqÔx÷×®¨[;Xï C °Œ4úc8H jÙ6ݺ}¶uÇ\ÛÎ…ŽÝ‹û–ºöí:ðL Àn\¸8¹ò¾°œ$2ù-§Ð™L~KϱKͲHL³ˆK6ÃÇþc #£õ#¢ôÂ"tBõ„jƒü‰ÿ¡þ‰4YévŒ5 yÒ‘¼·ç—àŸè’윔ê Ÿ‰)ø—dG¢}ñðñÔ8‚]X¸æHpŠp‹‰òˆ?™šäEü_”·•ø¿T°³ŒÿÔÿ¢=N¢½ÅE»‰üÁüðû YŠò6 ò6 s×–å¹×å;µØvñ-{–Bí)¡Öl™öb¹æñ*õÓ5«Ïת\ªW¸Ò({£IúV ç^zµ½Ùƒ#àc6¾gçÍÐl ÀFÀ"¿°Äeµ/ý³„EÿdIæ§Eùïçñ2È£C«?×øpXóAŸÎýNƒ;-F—LÏTZ,›Í˜ôåXµfXT¥Z•$Û$;æ¦8å¤:礻d¦¹d¤»¤§»¥f¸¥gÀ‡¬4»¬T«¼hÓÜpƒì@ͬ}*YÛdÒ×r’Q‚Š6@a(PB¸?íËPaøŸŽ“¢SPž*ÑDzø„g£·Í‚×fI·[¢.[4脦|ÐÒ6Î…PôBz)‹~½yPƼ[ç¤=¨Co×£7ðžïKµèvz¡]/GWÊÑJt»½Œ#€z§—ðé¸Ô—Ó2_–ûnNá‡埖T^\õãüªo¦•+|1,ûa7ï­VæÕzÎrúj1u1Ÿs*ƒ9‘Ê,ÄÒ‡ÃÑ¡ÎTwl?ox7gh·}§BËvÅÚÍJ%>*™nÊ öª‘Vj!f«üõTh(îQ‘Ë_ŠÚΣ·q©=4µ›zêÿ`ŠäRð¯Ÿ"Kg+pŠ”9Bª|ªÑDMºT‡wÐMºR‹èSû˜k‘Ì‹éèíbôqzÜ~åü6Ëû×1¹¿Î)?¹¬Š¯ýÞÔXé‰üÿYÿ/Ÿüaý‹ÿ¿®hþçy?.êýzNï'ÿIãÇÇL>;jöÑ’åƒë׿í_œw¸5çôŒӅi÷³“n§ÆÝŽ»ð\÷\óæG=çG½gG<§G< yNyL bÆû܈ÿv»w:ƒÿZXÿã ÂõöàÿÖjkÉ]`‰ÿI P]dQY`V‘oVž·ÒÿÆìc1øüOzŒaJ´>Ùù•ø?:’úŸø?6”M`u"ˆƒ˜p­eÿëÿ·ÿ‹²ÌÁÿ%yÖÄÿ 0?†ïÿÿÃü@ ß¹˜}€õ¿k~3h?›q)ßó ó‹œ Ⱦ°€}5Œ<½øG€S-r©*u®)u©+s©/wm(wm¬pkªto¯ô”ÐQåA" ÷Yù÷V‹é©òì­öXþåš¾šµ@­NÚµCÐ Ô¯Á)P¿n¤aýHÃF`¼a0Ѹy²i °»æÛ÷ÉoGºàÉo½'û‚N„œ =;vn8üüHÄ…ƒ‘G£ÄSà&bÉhµC €@èYTì^Àw…¿ ò—ƒ‡ÿdؤ¦['§ZÆ'šÆÄI" Cø!°Ãi~`oÿƒê‰öZóâÜKŠ?QýaIóÛy¯fõ?Ÿ6útÒô£Qó·‡,^î±¼Ñfõ|£Í©jÛ…Rëi¾U_¡}kž]u–Ci¦« Û³ Ë»0{MAîZ /wMNŽwV®wnžW~¾Ga®³ ÇI˜dVg ×à(î•.ØÄdy  {oŒ¢4Q <ÚÏÅïÈ짨F(‚A‰2(Sñ5P¥>¾wÐnúè!Wfă[ƒoD‹;ÐsÐÅúf z…=ón%óqói3ó°}܆>jCï¶ágï7 »5Øÿ—ËÐó¥Ô•Rt­7/5Ò¯µ3zy K6!ûÕ´<´?-¨ü²¤öÛ’Ú¯ «~œQþîÂã1ùO¤Þëâ¾ÕÂ}¹š¹%â\)¤Ïdâ±àÿ©`4æGìã îâönãtmbj7)V®W*öVÊrQ‰·Q·P 2^`¸z¿–Ò>5…] ÒDþ;¸h;³›¢½ð¯Oã% @…Ñ(’ƇҤè:O–È#‘ªP¥jÕ™VmÔk‚Æiˆ€s~Ì­xæõ|úÃJô¨ú~˜óë4ÿ9«„çÿ\SýûÆê•+ÿ+ýO"@¼5p[‡Œ}cýýüuY÷_—ô¿`ðóYÃïO™|óœ)Èÿã#Vï-ؼ±àðÒ¼ó­y×ksnÏϸ™ö:5éubÂëØ„÷‘‰5‹ãkçÆ×fǼgF½xÿOyâ`çÏö¸ÿG:݆Ú]Àÿý-Îx@D£ã²ÿ¡°iª°bý¨-±®)¶ªXVš?õ6~8Lârþ?5ÆüŸ¡Cÿ‰ü‰ÿcƒµbB âq„iˆÿ wÀw ØõÓÜ4Ó¼ô§þ‡ú_P`SRd'–¿€þÃú¿´Ø}™å²¿øiñÏ/r+(tÿçä9eç:få8då;Á÷ÿ¼dD^‘BçêR×*¡ ë·úr÷ú2ˆð[…‡6¼zª×¡kߥ®À½¼`mIá:~ÁF ¸h£€¿‘_¸©¨hS¡`£ xƒ°x]©À«¬È­>Ûª&Õ¸2^»*B­"@A´›W¼Ž.tgÒ-P¼.Þðõåàw æâú"©„"¼ç[ Ž* P“êu@Ãîè=·™YÚAߋ΢Kèz<º“†^.@o‹èj8›¸:y_÷ð÷RúÑ}øjÛûèVôbºQ…ýIH]€¾A ÀOîÕÓ¯¶Ñà/mHêó1™¯¦ä~œUüeAå÷EµßVý6«úó´Òã ÅÏFd?ê“y§ƒ-ÀÝ2ÎÕ"ê|&þ_Œ¡'ƒÐÐ^Ô»um¡Û6ÐMkÈ[©Ð]!ÃQ>ÎJ>ÜT)ÀPÕWOu¿¶êžÕÊ»•ewÉñvIQ»¸h'GÌnÄÿïaSó¥ñ`Uøˆ P Ï;¥qP&åIQÒH ƒ„òT•jÖ@}¦è;ur's5‚~%“~OD}ÞL}ÛOÿ<ÅûcQúßgñ„ÿeÿ‹#àžÎß/bžIòŸÞÒ~ê|æSçÏËz\Ôÿõ¼ágŒ¿9iòø¸ùÃ#,Ú¼½`ÎñμÛõ9ÏK3ž{:´öøäš£“ÞG&×.N­›_7;îÌùÌŽ®9¸fzØ‹õ¿'©ÿÁÿäýAö Zâ—¾f§Þ&'ðG]{­}[ÝûäÅ¿Äÿe¹&Ïú߈¼þOŽÒû„¿ìø¢ªCN‘ë€Dþ+ëÿeÿƒÿÉÍßøŸÌü‘Ôÿ+äï.d…/`MŽaå_TÈÿ¹bùgfÛgæ9’(($àÂç;ÁŸ"H² …xgü_Yâ\-t©¹âaš*<[ËÅ´Uxu”{uVxwU®é®Z‹ ß««Âè,÷XIW¹wwÅB/A¥ø‘ßþjoÈ‚ÁÚuƒµ†ê6²>n }>Húùî ñ4˜Êþ7Šè·DèÃZ泩GÒßõËþ8,ûý0÷‡î×#Ì—ƒÔG½èíú•&êV }¥ŒÁþpÏóiHˆh îÖ¡×Z©·»é‡xŸJ;%ÿó¬Òïs*̯ú}Fõ×iå¯&•¾•8$û~·Ìë¼{Ìus1›9–ˆ¢èñÔ·ulF­ëQ£7ªuG. ö2±æ¼P#i}ùºJ»µ”w«+ïUSÚ­(·K† þßÍC»9böPÜ=4³—b ò¥°ÿCÙ «ÑJ ©d ¥R(›A9 Êcð£Ì"ªQBzhÌÙD]Dw“ñÐÃôu/ýãç÷)ü øÿºÚß7Wýu[óÿò?©ÿÅ÷¿Xùÿu]äÿï+Úÿz^÷·‹zPüwÊðë&_·øhÉR\üÏ9Ýšw»2çò?{Øû¹C>Ǧ|ŽN®=2¹nqrÃüäúYëfưüIñ?EV~Ü1ì,z"ÿá<—Šâÿ®‰ÿ¡h®´–øŸÿ+ý/Ê1.Í2)Î4ùoÿKê¾$às¥ÿñ¥b~ 6B›õ¿îÿßÿÅ…¶ÿ“•¶àw“À ßÚ\Àwÿ¸äAÁŸ#–zŽ}F®øâ@²D"þ ñ¿Pˆ—’ –ýï¾ì7ð]©+ø¿±Ü£YäÞRæA"€ø_Õw”¹ÚEnþ.òì,óºÊ×tC`<ž 6ÖôWCG°®Ù@üO"€¤ÀDÃÖ©&ˆ€3ÍÏDp¤ãi ¬ìHœ‡‰€OòåâÁÈÚÚíÕÕ[ËË7ŠDë…BÀ» Àu9ìSR¬-âãÍââLcbL££M¢LB"ŒÂôÁÿ$à;éÈZPH¸qP¨q`ˆ|â/¡æṖ[FVþá–€_˜…?þ‰û—GP¨)bâlêløšûXð·Üïg±ï€% D€ ŽI#aí”ïžž‚Ÿ€)ÈÙXœ·¥´p;ø¹ ØUV²WT¼>Ë„ûÄÛÁì\<êÿ¼M@~îÆ¼œõ9Y>D¹¡—·® ßþÇS\„{Ìê·F‘[[©cw©í Ðl¼TV´úx¹â™Jî•:ên3ºßN½Ó> ?岃£rè›9ôõ,z:dúÑ´åÓö¦œÞœp}eÔíæ€ûÕ>Ïs^ÇÛÖÎ6ûL5®©]ß_½®¡zOMå®Ê²Ýe¥;r|ßYY±£¼|gYåžòª½UU{ê«vµTlé*÷éyˆû–úCÙjƒI²‘T§/jÜ‚*ÜPŠ]…‚xø)y_ìi?$…Pª¯Î«1æv8¢á5hz:æ‡ÎE çãеd<§î^!zµ½^Þ®ÅK=Ÿuã‘øß £ŸÆÑ¯Sè·iôó4úa };¾<ˆÞïÅ-À=h*pÙ¡„>ËGgŠ|ž‡F Œ¹UÇyµ•÷ [ê£é/Æå¿:¤øÍŒâ׳*_Í©<:¬ò͸âãQðÿ{]R÷軕Ôuu1‹~.žž ¦F÷ ž­tóznÍi‘¯È™m«f¶:POÙOKÑW]ñ€š¢¯ª‚Ÿšâ^E©=rÜ=2Ô.)þßËoûⲟ¢1ˆñGL â!&ŒbÂ)*’¦bp °WÞ(* 1@ƒ*ä¨V-tÐ -­§/po'óîó™÷8_ôÐ?Qÿžgþ>)ý÷<ùù†Ö_·Õÿ¾«ù÷‹Z+GÀ]Ý'wtžÜÖÃ3nê=yAç¯ë¸øÿë².^ùg‹ÿ¯Oš~ò?nýöQÛW—œï.ºÞ˜÷¸<ç}~víéiŸSkN­@þK>„ù‰µ3£^Pü³ò‡âßkjÐ{rÀ ¯ü`ù{Cñ?Üå6Øá2ÐîÜßæÒÛâÔÝäÅ?ëÖÿ-Uì«a"›ÚR»:¡mM±uß²²È¢<ß?œc*Ì6+É2/Ê0-HÃGtr’3ŒRãôS" ’ÂõBu€øí8(ûƒµà @~(þ–‰ ×`ÑZ±þc˜Š×ÿ ³S W¼fÎϱ.γe7íÈÌ@-»àÏy®”?Æ ` \óòœsrœ³rœÒs1ÙÎ@FŽ ™çœ•ï’Wà–_è^Èw/xž%Å^¢b¯²b¯ We±'PUâU%ô¨.ñ¨zÖ ½…Þ@s©Ð"òn+õn­iùtŠÖ¥>Ñ MèÕ&ô tˆð÷Öw¾´—zÃoè,[K>áÿgîŠu½ëû«6ToªÞ ×@# ~ó}¼~ëDÃ¶ÉÆíÓ;€ÃM;g›vÍ5ïžoٳкw©õÀ‘6ߣí~ø!°nÿSÝbú‚NCô³‰œÄÔ×﬩ÙVY¹" ´t]qñš¢"Ïü|·ìl'ðjªMR’eB‚y\œùÿôÿÊ.€¤@P¨!È_ësŒo`XÆ/ÔÜ?̪}0@°1€Íd ø˜ð7Çò÷5ùïÞk¶gŸÅÞý–ûö[|­  ÂÃl££b]S“¼ð8èÌuüœM‚m€8Ȱ`w©ä8ÐÓaÛHHüŸ¹6+kmvöˆ ?×(Ês).p-ç»×”¸5»´ l{f#ÅÓB­ÅRåçÊe.VÓÐÜkf$'[H<:Ä<ž¦¿:Ì|y˜þò0çói©Ï¦eN+}2­öÉ!õi~0iúþ¸é»ãfoÛ¼1fwÿ ã½!—ýnWz=ÎwyŸhó^h^w¨iÃXÖÚͽ՛köÖVí®®ÜWU±€/µU{kª÷ÖÕó­©÷«¯÷m©ßßY·þÇ3\í3^á2.²(6ž*МÊTç„Ò½{PózªÜ‰ÉÖG±Š(„Áu/«>©X„2å™R]^³ wЛ3µ aå5‘¾•Á¼˜GßçSo”ÓïÔRï7Ñ·Ó_ô¢Ç軃Ìôo‡èÍ0Ì£ßçÐ/³è§ôõz8Œ3ñ~3º]M]/C„Øü§ ÑÉ"tŠ€«ôíZú•fúÍ·\üÔæ¸üSŠÀç“ G•¾–ÿ¸_öÝN©ûd ¸ˆ:—F‹¡¦ýÑÿ¨zoºÜƒ ò϶¥‚MÕüôhÊí_-{`•ü>UÙýÊ2Eé½ œ½²ô^ünÎ>.ÚÇ`üh ð§ñ“šˆDt¢ #«@~y º€4öì„ÊdPãj4dŽæ×Rg}雉œWŠè÷ê™Ï»©GÑ¿f©''xŸWÀϾ¼ ùŸ[«ŸÜÑxrOXö¿Îÿßÿdç÷—sß³þxÜüã6o-ÙÝ_tº³à‚—ýg½Îöyn¯ü™Ü,M¬__K˜ó‘Tþ“Yó'ƒèG»½vyuâ•í®}­Îxç—•g½#ëGìÿJâÿ¡mm‰MµÀ üߎϷ嚕昃ÿØÿfàÿÜ“ì$ü@Z,~81L—ŸÈ_ÿÓÿ±šä:0©ÿ%þg7ñDþEÙ‚\öä¿­¨ÈþÿòÿJùºü|W?TqÄÿ™ÙXþiYN‰’¹ù®Ð,@ËÀ÷(x– ¼DÏr¾'D@…Àƒ¤ø¨-ñl(ñVú¿­t-Ð.Ä´•¬Á½ZK=å8ú*7ÿKR`¤zóhíÖ±ºmãõÛ'ë¶OÕï8Ô°sºq×LãîÙ¦=sÍ{š,¶ì—¤À±ñ£ÝA˜Þ`ÂɾçúÂöÔÕí‚" ¬l´|¾WA;ÎÊ,Ç´4Ûäd«ÄD«øx ðd”1ñ`¸?»Dð Ò…  þ&~A&¾ÆŒöí29l ,Áÿ)àdDð 0ø›î÷3Ùçkº÷€Ùžý¦{ö™ïÚcºkÙî½æ{ö˜ïÝg.‰€Ðëˆp»Øgñ) Ôµ¹™–gA³S É¸¢%ü]€P°—]ÿßµÒÿ€Äÿ ÿ¬,orC ÈÍñÌÉvÏËñ(ÊõzUò½kùîENE6ýEfc½Ãūޔ*œ.—¾R+u£Qê•VêõNî»ýÒŽÈ>“ýlBöóI§“²'>šPý`|Õ{cÚoŽX¾>byØæåa{bþË=î`þ“ÞGZ×Ͳ=lØ>X¿³§vWGÍ®¦Ú½ µûêkýXêü›êýšü››šš‚[‚[[‚ºZüšöŽ6n›jØ<_ë6_é°Xf~´D÷HžòRºì|,÷P{Tf-¯ÜšÉÖ@q2xŃ/‰‡ V¡j3¦ÛžØJ/ùQg"Еdt'›‚*÷uý šóaça;óyç«!î7Ãx–éÏSœßf¸Ìqþ\äü{‰ùóýûúužùþ0ýhŒóÑ ÷­NîË ôÍ*tIDŸ+F§ Ð –ç ÑiºXŠnÔÐ÷©×;8ïôò>ì—ÂÓFdË}>¨ô°OþƒÙ·Ú¤_®åÞqžÏ£O&Q‹áh|?êÞŒš×RÕÜbg^–5“hŠökËîÑÙ­ÆÛ«&½_M怊ìe)ÀO‰ç«È= ÏEäÌ¿ÀE€ fðÛÊ‘ÿJÿ'!”‚ø?ш*á¢ZeÔo‚f½Ñ©}èzõr!õnýE'úá úc=9!õ÷9yâÿßTÇK@Ëk>Xþ/éˆåÜÖÃþ¿¥/öÿ5Ýÿ\Õûó²Þï—ô:gôÝi“GÏ™=çž)¢Ϥ.ÄšèØÔVgL¹¯Ç„k1ÑZ´æ³Áë÷Åf#°“éäg ±gyèô“Wª±7›H:Iïô‘?Б?Ç>Ÿ!}s€ eÿ‡hÿ9fôË ãßNÓŸ¥=9‡øå zÇùÛÔ/}8‡”þÖ åå.ìV l•?Èÿ¬ {J…­$]¨"_o Üj¡Þï2z­öæñ?†˜ÿÒ­ýÇàš7ûL_ë4~©‰öB5íª„r¦;œ…MÄaý!X;›\Ç0RxU8ò̱øíÆñ[h ›iI›Ò¶˜¦m6ÎØdœ¹Å(c#5c#9c=zß!s –mJÊ6ÆrŒ±}&Xž1)×Ë£‘ó)$îÿ| +°Rüäe†v½a$ FQaäj2:£sÔ;€]HBþ'êÂÿ?%?>gôäʆ'Ïm[¼½íósçäÿ²ù“K,_²zrüä<¹m‰ûßú×g­ºf þÿú’Ã'O;¿{ÆåÑ×Oy¾|‚þâ1Æs‡™W\8|æ@ðéùàSóaÀɹг!GgÁÿA¸ÿ ùãþ„ʘfO ±&üÇûýÆúÐNeÃ=h³ßþeùÓûš}{}ºê½:VüßTåÖPéB4êÎ+þw&ü/ç9@ñO<ù5ø5†vÐòÇ< ðÿÊÃßå­Ê‹¬VûŠBþÕ W¼ù³üÚ/±ç?¢†ò¯­ýƒÿ‰âä¯Vý.üá/^ÿËè„ÿÿRŠ˜¨Tþ ÀªJ¶¶’Y£fÖW²ê+™D 4AT1[ª ØíUìŽjV—–MЫ €@)  «ÿ.y$fO•†õGz+ú4ýUAÕÁƒÚ¡šP]]¸¾>b¬!oŒ&š"'›÷L7GÍ´ÄL7GsÍ1ó-± ­qÀö„C퉇;Rw$G:“u¥ïN=Ñ“œìMNõeœêÏ\òwgbg{|[KLscT]]xuu°F¨T2e2†Xì#xr¸e宫ýŸSˆ¦Dþ‡q9²,Vû?3Ó&-Ó:5à AD@†MR¦M2Ò¾]Jú˜šŽ€ÀqRÒìÿ“líâìq€øx‡¸8û¸x»ø{béž—ëYTè[R̨(eò*DÜ`1/D*“ Ãeâ¹$PÈÁðÑjeœJ (ètGµgá…"ŒhûàÀ  (!jeXuex½&" ³*` Š1¦õœ«q:RkùTÃ΋-;.·™½Ð½önÿƇÛ_Ùò×±-oMl]f|Ûã;_7uÜæ•qû£./¹Þu»9æ÷܈ÿµÖ%}ÐÓúð§†#ŽFêYè›éKžèKéÍêÉîïÎííÉëéÎïïMèÍìïÝ×ß› öæäë‡òuƒÃº¡Â‘á¼i]Î~]Úñá„ÓÃ1WûXWzè7ºÜžk³ºY¿åùjÓçÔk|ò¥ʹ}&Gâǃi½ÞX‹#Ò~“5q0DGò?‘F‚ïÜa÷ðÓÏßhÆucï‘>%:Eúräv1ýñõ?'¨¿ž6~|ÆÕ½M–ž1~»@ýåí‡Ó´oŽ}vmõðö(å­AÒvÚóMh p^ƒ=¥ÄN*('UÔÓ•Fçµ&—êLžm2¾Ófú ÓäÕnã×{Œßè3z½gÍ+ÆÚLî4ÐnVQ¯)¨çyäcù¤™$l(kÀüh•>¦gãBKrÚv ä·™¿‰Šü¿™æÏÚLÍÞBËÞLÞ· íÛˆå¯'å¯Å Ö`¦$ M±¬È+6Šh¤B2ªüAþÅ$äÿ2lÙÿÜÿjŒþoÝ€õ zýá¯Uä·;H뱯çÿËÿ÷P©¶_æe«Å‡–„ÿ—XC€ÿŸÜÿ[ƒÿ_°üíyë_ž#üo÷Õ%§O/¸üû¬Ë?O{¼~Òûáq_ðÿìËŸÞôÔªöWËÿøLð±é \þÁ‡¦‚ŒŽ  ÂÛ>ˆ©¡€ÉAöx?s¬Ïä¯ëe u1pù£ ж͈žzWOg­wkg‹Öƒð½Ú¹Nåþ¯!/ûßü/ãÚ‹ÊlùÅVÿ?þç€ð‰yî| ÷?þä×¢¬ÐùsJløå¶B޽”gÿ'ÿ¶}X~ø»,FC-³®Ž °ªÿãO<ó%ü¯\ö?üúÿ¸í ó ü(”Lä³ZÍÒªXu*všY‡§@ƒšÙXÉjÒ°ÁÿøE@³³š6è©zµA}ÕˆÞª@â‚HÕÂïQ³WþÇ# ¸¿*¨µaõººÈ‘ºðÑúˆQ‘ã{€ÉÆè©¦˜‰†½p1Ý=Ó3Û Ì5ÇÍ·ÄhMÂI<Ø–t¨=âàHgê±Î´eºÓã=8™@OWJwgrg{b[Kø¿¾ù¿²2ù_ê/úòø^¸ÿÝŠKœ ‹ þ‡)@VžMÆ>+ƒÿa$üo˜þÏȰ PàþON·†—? ~¢íd¤;d¤;¥§9âþ·GþÇíÇÙÇÆÚÀ˜€ÿ32Ýrs¼ óéèà?N‹Ï Dü± T" ĉ(R&‰’K÷J¤Q¤²= JÅ¥"B!'U뾿ÎáxƒõSÍç[ͯwmz¾wó‹ƒÛï m0¼íðòðŽ‡Ã»è¬^ÒÙÞÕ;ÝÖ{ÜÒyÝÔù<§§ƒö/êƒÏéÂN ‡Þ{p0v~ nº?qb u¬?]?=Ô¿ ûž¾üî¾ÂÎþ⡬ÁìÁþ¼¡B@7P46T4>\<ª+ÑŽMŽÎäI?5’xVóìûÆýù~—Û=VwÚ7ßk2¹_CyQMº%!_çP/ÐN¦ÑDS¦CIcØ ›ÆöGã•1ùy1ù¾{­{«{Ô‹½§'4A&޾ýî0Ú³â?'È?Ÿ¤üúåÉ9£Å§Mü/›,]1]ºbüä’ñoÿsÖèûSF_5þl¿Ñû“ä·õØ+½F/¶‘a p¡;­&UPËŽ(L©Öž¬\{¾fýÕ†uÏ7­»Ó¼æ^‹ hÿ~ëšnÕßÐP/Ë©O ©'ŠÉû³H#ÑXW0ÖàOÖÒM$î¦ev¦Ù»¨I[°øÍF ›@þ©[hÛh9Û¨¹8y[I[ÉE[ÈÅÀ&Rɬt=¹|¹d=Úé¨d Úï¢ÌítZJE‡lãÍùù¿ŽFêÜ‚M8c'ÃоÐ÷øä7jÈït“?Á¾Y€ÿ'Ôßž6~|uÙÿOî›#Õ?´B¼¼ DÀÒË6„ÿ—î[ãSëÅ­ ß²ùõ¦Í7l¾¿jÿõegðÿ{g]=åIøÿöQúõCLðÿùTüƒó ùƒùqù‡æGL†àþGàÅàŒÿ ÿ‰Ö²ü{üAþƒ~ ÿþv?äÿôNko#£§Á¯«ŽÞQãòo®voÔ¸Ö«]Aþ@-¨XA8kÄÎ*¾ø_\n‡êÿ•‡¿ÿ£þ_iø”ã×à"Vö¶,/´®(²á–ÚòËíE\bñ?ø¥øw#vûùü_‡"ÿàÿ-E@5ÓPÿ£e?+þùÄ_@$óJ ÄC"õ“Êü PŸZɪR²ÁÿµJD’U¯b6¨Y•lˆ€f »µ’ݦ :4lüß½2¼& »’jûª@.ºÔ,ÝTݪ KɆ>öVà) T‡ jÇj" ô5#µ‘FëöŒÕF×í¨¦ëc€™†ØÙƸ¹¦øù椹¦D`¾9aK"dÁÁ¶dàP{Êj·§€ü»:’:ÚZ›c›öÖÕDTkBÔª@…œ%•øáþGû ,û¿Ð9·ÀÈ)°Ëη%üO´}ùüo +Ëöa ¥>ø?6)iPùÛ=0?–ê’䔀<gkc DGÛp÷“S“ÓÒÝöe{ççúP^Ââ–nˆˆ&„‹áB~Œaä*Â…¢‘8R,‰KÃpBˆ]©WšÿPùH¥l…" H® ”•¡M¸¶:²VÞ¢ íÔö×øÖzM×;ïo°;ÖdsªÅêRû–+Û®w›=Û½ýfïŽÛý»}æ/ôÛÝp.Ôù:]Ɉ®l\_>©/¦FÊ&F’é±¢…±Ü£cigFÎÆÜ ¸©£¿¨s½?dý°wë+Ýk^k§½Ò@z©†tWEyNL½Â¡=]D=C=žN>žB:•A9ŸK»RF»)¤Ü¯$üßìÄ `>š&1Oû ä„òÓq ÈÌÿëSäÇçi‹ æ7]–ÿ5“¥«ÆO®ÿvÙøç xœ4þêˆÑÇs¤÷&±7uF/÷’^hÁ®Ö‘ÎVQ)d¦ó²õs’ û©7Ÿ©Þz¡fã%íºkZÓ5¦×kÖ\Õ_R=-5zŠK>^BÞŸCOÀzñF&VåC•{˜r×äZ˜¦˜ÑðÎQâã´­&™Ûr¶Óòvš‘‹vPŠwJÍHåfdüc g ™»‰ÄÛHânÂ8ëñmN×¢·¸¦$®1©‚¶ÜùYí!êÿSª1róêÀnÒœ7éì^Òsyä‡ÒßêÉïõQ> }wˆüóiê“Kk¯oZ¼¹}éEóßýÿòŸüoEDÀjÿ£xÁö·çm¾aûÃ5‡o¯8}vÑüÿöSoœô|êÿ#ôý.8¿xj.èÄLøŸ(û ùœDmŸƒÁÿ#ùòùë{™ÃÝ~ùCÙô4£= ºé]~ ŒÎZF»Ö·©Ê£QãÞPéFÈ¿NéþÇ#ÀµZêºâGäÿb[~‘Íêç¿ËOñeŸ†žÈ’¾\žoQQ`ÉàùÃ?^l+,³WØKør±£Jæ¤QºV©ÜªÕîÚJ¯·áÍ/CóŸX«ä_ìÖ"ÿkªü+5~êJ†Zí§ÂŸüò‡âÅÿþà"@þ|±¯HLKPûÔÊ‚U­d×(ص &P¯bФfàÿ5«UÅj¯ èTtUÝ8]ðQÐýûGV§Š €óÿ›n$äD@0Ч 5¡ÃÕá:mÄj Æj£Çëb¦êb§ëãpˆ‹™†x`¶1a¾1XhJ"X}½¿9µ§=¹»-©³%¡¥1¶±noMU¸F¬R‚ÿÙR‰¿@èËåyÇò»þG+1Þ>.Æ&:Æ:*Êj51{­ãcí’Àÿé©®9Y^yû| òEh_8NYÀç x¡¢eÿGðøá—Æ…‡/ƒC¾0H ˆ|{:–( ø#U°ê uUhUu˜¶:¬¡&¤UÔ]ã?\ë3^ç>Óà´¿Éþ`³Íéf³3­;Ï·îºÐ¶ó™ŽÝW;­®uY_é²»Úãt¹ÏýbŸÏÓþçÙ§‚N † ;0½0fv0vj(a|0yd(M7”5<”30˜=ãp^ÿPnßp~¿® O_Ø?R¢×åêuyz}ñèhùÄwjŒ;3V1=Z>;ΙžÊç&KLäŸÈ87žxa<îæûùqÆq÷—Fm_Ño}hí[Fovc¯·c¯6‘îk1˜ TLÛGM"õíÁZ±*_LêFá9™ä[§î0‚Ê?z“QÜF¼ó³Õ(ËŒ–k¶¼Ésñ¬|'‰³‹ÌÝIæï óÍHü­3B°¼ ˜`=&Zε­¡LÈ Æ!‘*VËŸDj(XÇ&êˆ-ù ?v>»ULzMIúGöÁ é‹iÊG)¿œ3~reÝâs›–^رtÇbÙÿ/ÿ—ÿ_±Fþh³ø’µ¡„"àwÿÛƒÿ¿|ÆåÃsà··Nx¾zÌûÎaßgø]ÞÏ:?pzùÿØ\Ñí_îùL€öÁÿ0ÎÍŽ ƒÈQÛ‡EM;:Àù*ÿFo£»Å·«mkÓÙàÛQOÚk­Zßæ*ïeù¯h.pÜknàÿJ¡‹’çþ—TØ KìÀÿ«×eÿoÿƒüQXZq‹¬Aûü;Q¹ƒ„ã 8‚ÿÕrgƒÿAþPùÿñÉïòöžh‡7­?ø_[Ãÿ#ù«—QªrårçG*[–?ø_ fðEt°œPþ÷“Hý ÿWÊÙUò-‚U+gø€Ý hT¡hQá(Qmjv‡Š йâüNøˆC×JV»Ì¿CÎìT°@û0v*Ø]J˜À\ ¨OÔ¯Æ ˆ8 fCUÀpu$ ÓîÑWïÑF!ª£Gµ1c5±Ækã&kã¦êâ ¹A€â >~¦.˜­Oæ’zÚR»[S:šã[bêköh5a•J´èE"ö‹ÐɌڜ§¤Ä£ mΰ/ß!'Ï>+Ï.3×6cŸMzŽ5AZ¶Uj–%žµ¼ø'#Û]¯ÿ~ žç[&$YÄ'š IV‰ÉÖÉIÖI‰6‰ ÖÉ vˆx‡¤8û„8;ð?Ø~ï˨H‹=æ\øÛ„8û¤Gðv¦'Lrs` àGì WQÀãó¹!Pùƒü¾`/œÃ #à Byü`€Ëà Ø\>À·§ó ýD"@"¥ãøIL¹*PYŒ"@ZSÒ¬ jÓ²º«éÕ£5®õNSuv‡ê,ŽÕ[h´N7Ûiq<׿|®Ýãl—ÏÙÿ§@ûýaÇöŒ:0»(vv0yz(uj(}|8K?œ µý°.´?¤/ÔåÀõðH!ÁØhÁØháØXÙÄwzR0;)˜ŸäÍMpaœâÍLVþ?6ž~f<é™É„ç§oM3ïOy½9°ò¨—MTþhÁÏXàüXÈn4äÿ§¾#},ÿ`'½¿Ý§¯Í·§Í‡?ÐÑèÛVïÝVëÓ^çÛVCGò¯ô¬S»¯¦Vå^£tÓ*\« ø—¸¨E.*¡³‚ë$«p—Ú ‹m‰“¹ù朼݀á=/ÃAË'ç£"ÑÁ…(ó£í ËÄŽR®#ø_!q2øíË0È¿¶Ú ŠôÂ/ªüý •?Qö£5?ÊßýOü]íƒü…?@$fqÿp  ùÉ%L•”U)eUIYÕ–VÊ®‘±ˆhP²UÍJ€ÕòGÚ•èTüo,ð?ì9ijMê#áf·<Ð@"¨Gb O‰0P VFiöè4Q€¾j/@\ë4Ñ€¾*î¹0®™¨‰ý“Úx`¢:®§5¥³9©½1¡¥.¶Q»W«‰P+‚ÒâL.QQáSZêYXìIlæò'üo?˜0\€öWû´o(þÓÓmÒÒ¬SSAø–q »cãwÅÇ™ãXq±±1æqàv(ï£m€Øh$ÿè(«Õþ‡‹˜=Vq{m’âRœÒR\r2"A$æ'¦Ü0œP€ÃAp9û@•ëpµËt•ý\ÓBË:×C žGš¼¶Ð´øm:Òv¤7jì|‚AûSÃû&†óÆuù£ºB®hHWò;ú"®)-+&Æ‹'ÆK'&*¦¦ø3S‚¹)áÂaŠ ÌNqf¦9³Óe¦  þ?;‘|q*éæLðíYöýYú«3ÎoM[>šÜüÎÄš÷&h`õ߯þÙý­û[öf:qàÍfê[mÔvSßî'ÿŸ{o½Ãõé~Ò‡È_Eëy¾?…¶-…*wꯌž\2]º²vñÚ:Ä ðÿÚ¥g׋×Ö<¾²æñ3¦¿ž7ùá$õ›£è¬œw¦°·t؃>Ò³­” õ¦G5ëg[ô¢m}¼}|‹¡Õ°ÐZ/°ã›rvMTl-Ý /X7eÒ•Hm¦5†R+™±'‰ãLη!g™Ó’Íh±[Pñ¿w“IòãômÆPüïÛA)ØI*Ù•™c»1¾ZRĉ9E¼›,Þ‰‰Í0‰Y¼ “nÅä[IÊ­$Å&L±“¯¥HM(R#ŠˆB¢•Ÿ˜ÃddLcDîÚŒémHýÉgãÑA¥Ø?°÷ûHŸ“¾=HùùŒÉo—Ö¿—?Ú/QÀà‡§PI„ …Ø_)aª%,˜U%f‚ÿk¥u2v½< AHø¿IÁn–³[„ü[Uì?ù¿ܾq'оƒÿÑ(e´IX0vJÙ]²€.Eneh¯"´OÖ¯ 'PG ©£ ªö‡+÷x"3ªù‘Êh½zoWSJGCRkm|SMl}Õ­*L) ”‰D¦€çÇáø–•ùäoÈæ˜ë±Ï.=Ç6-Û&5Ëš€? ‚,„üÓ2- çÚ'Æ”d«ä$ËÄó„x ?hŸ f¯Et”ùÞ‹Õ€í ÿ‡íŽ 77ø?-Á9=yÙÿù9¾EùôÒ"ÿ ´)t˜_,Œ ÿS€ÕþGS$ÿà N@9ÌÏĘA»’â{“ú ãìù˜ ¡­5¥,âÕ0µ*¤JT« ª“3ä¾­ ïv¥g§ÊcH馯ô×úNÖúO׳f‚æ›ÂæšÂç;¢çºãçzSgúÓ'²'‡rÁùÀ„®dLW6ª/Ñ—ëF8À0 ¯Ö—éõ¥£ú’±‘Òñ±’ɱҩñ²é‰òé©2üÌ vV4?+^˜˜˜áÏÏðfg¸ÀÜLùÂTÁщ¬3“©¦Rn΄ޞ |iÎÿ/sîÿ˜µ}gfÇû3>š1ýdÖèÓiÊÇ“”&ÈŒ‘ß×cïaÿÄþ=DyWG~”ôá8öá4öÉöùtØñ—GСfߟ¢[˜çÿ9kô3¤ÀÅ5¿]Z‡½\[¿x}ÃÒ³ÿ£¹$Âåµ/®7B|~„òÁéí)ÒzÊÝnêµ&“3µ¨·ŒIÍú;;9æ\ë.ŽmO…}O¹Mg‰eOþÖÎ}›Ú264&®­‰2Ñ„)XÆ/j‰)׆œ¶ K2#Çn¥Do¢‚ÿc6™¦n7Î43ÎÙi”·‹R¸+µ@ÛqÌ1¾I`IZQEVT‰%UjI›c’]˜lYº“¤0#©v`•fäÊm¤ÊÍdÍ&ªz-MiJSÐÈ2 2¿œ„ihXÃÊ96댠\Í&Ýå¡âÿßíØ':Ò73´ŸŽÁLçñÕuOnmzr{+ÚØá%K$*ø óãØHþȸg¿x×Xºm¿xËþ·çìºfÿÝ3vŸŸ·'üÿ÷c.¯q{ñ€Ç³ ^ÏÌùœ¦Ÿœdg,L0çÇXs£L6@ô|¦ô“:6Èl…z>}h©ZêIô|Ú}qóût6ù´7xù[j= ó7U{6VyÕWzÔ«ÜQÛGé‰vÝ\?ÿj‘“JèˆäÏw”sì ÿ‹Km%Å(@쨶_9ÿ·ßêÇàn!’?Äúf !Ôö øÿËùÎr‘³Jæþ'ŠÆ?5xåOø—?Ú· *¥zUñ/÷1tþ¡òÿ‹Ätªüÿxì ×b]&d(Eþj¡¿FȬ±´bV„]' $ü€ü ÿÿŽ‚Ù¦`€ðÛdÌV©?m2È‚«å¿ìÜö­b¦‘‹ˆÕ*† h—èݲP‚yЫï•G}«èWDÊ=ÊH"àb…=C Ä <h¯ODò¯ŽiÐì­ÓDU+ÃÒ ‰…dáø•—û–”xy渻údå8f¢÷sñWº²¬S2­Vƒ‚ Ó-øÏ´LͰRÒ¬‰†RŠerªuj "OëÄË„x+TüÇXÅF[þÃç#CwÎ'nÂi·Ç:1Ú.%Î1#É53Å57Ó« Ç·pŸO þüÉŸ&FHðe?ž{ˆ‰X~ð»ÿ+¸¬rŽø¿‚G‡óWð|.×q =S,D/K`–¤’TŠ˜Ub?­Ä·^Fo”ù¶Ë=Jæ€&p¨:X_¡¯ß3Ö3Þ’0Ùž:Ñ•9Ù·o¼?ol ptÜÚ/ÓqÆôÜÑ> áëF…ºQþÈolàLŒq¦Æ+¦'83“\`vŠ77Ë™Ÿã/,ˆ¤ s’…YáÂ,ßàÿóÓE‡&sNM¥ŸŸJ}n*ì…éà—fÙóùçœÓ»sÍmûtnýç ¦_Î1OûrŽòÅ,ZÕóÙ$éÓ ìã)Ä'ÓØgsØgû±/b_F|} íb‡¶°;øæ…à»ÓÆß?eòãÙ5??½þ—gÖÿvyãâõMK76.ÞXRàúzðÿÒ•u‹—ÖÿúôÚŸÎuÂø“C”wç)ÿG;&Ýj7y¦qíñêÍsªC¢ÝË–r›¦RÛ¦û¦Bûú<›ú¬5i[µ‰›Õ{7ÊBÖ‰˜k8>&E.FY6¤sJ¼)f ½ù?f³qÜVÜÿ;h9»¨y»IEæX™%Va‰ñ,‘ÿùVÈÿxEV˜Ø¡°¤Éw“»H•»°ª]˜ÖŒ¤ÝF®ÙJ­ÙH«^O«ZC©2!Uaj*V·ëÚa<é„e“.&QŸ/!?T`oD›ÿ1Fúñ€Ñ¯§ÖüúÌÚ_o¬ü–ŻÛÑ™ð†?ÈÿU›¥×Hû¯Ù-½j¿øŠÝâ+Kí—8.=p^ºï´tÏyñ®ÓÒm§Å[N¿ÞpøñŠý·?;çðái§pþÛQ×W¹¿¸à~}Îë™iŸ3¸ü2@þ³#þ3z¿=sj„9¥gƒöñ!ö²ù{™Ã½þƒÝŒ.:ÐÛÆèi¥ƒüÁüDÙßRçÕ\ëݨõlÔzƒù4ž ¼ÕÂw­QxhåîÕ27 RJTþ üÍ_¿ -·•”ÙHK¬ GÀp Áö ýeù;Ê vp wà>ü¾Jma™-˜Ÿ@Êuÿ+Ä.ÿíkVAìð†ìETÚÄX…À÷ù¤ þ±Ô—¿>—§«ÏœÅ&g¸ !ÏOÂcHù~rC%ð«øW ™Õ"&D€a ЈÓ$cý‰«UÎl‘ùæo‘øáì?Fr¾¡Ô'ª}l€ö›…L.ˆh´Š ÚÄÁ@‡(¸StIB»$áºÅˆIA¯4²GtKÃz€•ûðÍÖÚÄfm|ƒ&¦N Å„FŠŠ‹Ïõç”ÓKK½‹ òwÍÊqÉȲˆ—¶ˆ•œË‹9W"€XçI¬ùOI·$žó&&[àO{‰°Åýoükü¿×"ùß**Ü22Ô<å\ot6 —¾r1l‘(@, óÙ€”Ï”ñý”ºZD׈µbÿz)«YÒ¦ïÐDöÔÄô5& 6§·gèºrô½ú¾"Ý@±~¨\¯«F†+FuAýòå‹ãˆÏŽS¾Õ“¿›5úåÈšÇg×?¾¼ñ·ç6?~q+ÚÕÿ%‹¥‡xŸçU;Äkv„ùqAþ‹¯8-=tYzè¶ô’ëÒ}×¥».‹wœ—^p[|Þå×Î?\vú üÖå½SN޹¼uÄíá·[óî×f½ÏOùœ§¡Ô3¦GY ýI½ÿÄ0sRÇ‚‚b8ä¯ïg`þ¡æ@—_'£¯ƒàÏy} 0S˜¿¡Ú«¾ »‡hû ‚_îY-ó ̯‘¹‚üÕg•ØI!$äo+åØÈ86 ƒÿ Gó‹-xEæ…»ùü/(²€ïˆÊ¬Ee¶¢r; Ç@Æs’  þÇû?ž+æGmdþJ/ð–實;؃ù òG«ý%^d~o¢‘+‚üQ©äÏóíó9t¸séRýæ3Ô|?Üÿ,ÂÿD4à4JÙ„óa$¦­r6ÈÿOþÿ£üƒâ€GC B°"ÿ€f!»IÀà‚ ‰¿L³ `…  MLÐ. ûüÐAA§0¼C„h†à,îÀwZ«ã›*Aþè Äjy„Z*¹Ln£¼Ô·¸È« ß=7ß#'×-3Û9=Ë)=Ó½Ÿ‹¿ºEÈŸ 1Õ2)Í*)Ýœ´Ÿf$¥š'$[Ç'Y% ,<l@þi©v)É6Ä3ß„Xëxð”Ut¤…Aþ¡;ˆÀÿ1– ÿÔX‡ôx§ÌD—œ÷¼t÷¢lï’}¾ey ni€ƒÞüRˆ#Ò=JY”R (¤{å’(@&‰‹£‘8 "ü_Á ÿƒüq„ÿ˹¾å|zÏ·”ëE|,ãø)Àãù ù0EbBJ 8þðÇFÄñErt…©³5² ­2,_ÝZŸÐÙœÖÓ–ÙÓ‘Óß×ß›?Ð[4Ô_2^ØöÙ_ZóÍÓoýpŒöÃ1ê8ÈóÇH?ž ? ;”ïOо9Fýêùó#”OS?:D>ao5bïöa_Ž“Úoòäĺ¥§7=¹ºùÉó[ßÅ}AË~ìVüoo0?Ž3Èñe\þÝ—^òXºï¾t×cñŽûâ-Ç7Ý~¾îöý3._=íúé×wO¸þó¨Û_yÜ_ð¸9ãqyÒóì¸Ï±ßCÃô…!_ÐþøÿØ ßØ Œþ#Pð÷³t}LÐ>0ØÅêïð'jþ®V_`¹Ï_çÕR³ÊüÈ¿Vo°†³Üí‘yTIÝ52„AþJ‘£\`/çÙü" Â•þ‚œ¢ÝV×ÿðq¹ 娡g¾8àÞüWË] þ_©ùé0j5ÞUjÏÊJOµÚK…ð–öR,ƒ>xå/{"ü½qùû ¾DÙ/\‘?¯Â—®á/²„K—qè ]ÅchþàÿZjPÚý·ÿ õÿjÿ¯ô þZ¶=N«4€ MÜ* j"ù Àó<ÐÀe®Àþ/ 4sBþD+' Á %hY~ÔT ¾ÙRÚ\Ò¨ŽnPíÕ*"5Ò0µ8D. ”@ñ_áWQæ[VâSX€6Xùã•¿Sj†Sjº-`xu _Æo æOH±P ¤X&¦ì’wÅ'íŒK´4@,õ1ø?5Å>9É69Á.)Þ" n¯uÌKƒÿCÌ‚ÙÛa„ 2 Þ±'dø? ÷?ÿ9In¹)ù„ÿËóý¥~¨\¡”ì©”G«±*yŒ¥<^!‹“H£…¢=<~èrÿ¼ÿ#ÌOø¿„ãMh¿´Â»¤Ü£¸Ì8฼ÜÍÊéðiotÆ=ÏW ð ™Ri z_XYUU«mjHjiJmoÍèlÏêîÌééÚ‡R ¯`°¿p°¿`h px¸X¯/)Ó–Žs&&*&'˧§*ˆ–þì¬`vV43'ž™“ áÏ áÎÌŒ=€ŸN•ÏL•NM—MLWŒM—“Å3cûŒdM;3þôhÈ•1ö ô“noNÙ=šÙõîÜ–÷oøôÐÚ/Ž˜|uÜ軓´NRñÊøÇŸN ߥ~s„öåAê§ûI-?˜§ü{ŽüÎxwžòþ~Ú‡?;lúåñ5ßœZûÙ5?[û󅵿\Äû!ˆõÀÏO¯‡ Âg7zrÝG‡M?\0þ¿ ÚƒÔ{Æ×שÙ6¯Ü1$°h+µ®Þg-Oµ%Zòb-Š÷Xä‡ìÚÇ2ËôÝžâ¼!Îf]´ùÚH3ÓÐ-ÆÁ›hA©!ëIá(àÿøMÔÄM´T3rærÎ. ü_d‰•Zc€Äµ¥rmŒ8Ö´ +*Ç âØcbLnKVØ+mHZ¬Îk°Äwc-»IÍfäv3JÛV”ý[±Ø„õçús‘صtÒ]õ•JÒßÛ°‡HßLS>h²tzãÒÅ-K×·?¾eö„xç÷%륇v¨Ãÿ²Ýªšß0?ðä¡ëÒ7$ÿ{ž‹w=žÜöxü‚û㛿>ëñÓ·¯/¸|~Îý£Ónïs}ëë« nwfÝoLº?=îqzÄûð°ÏÜ€÷L¿Ïèc¤Ÿ¡ë§÷2€¡¿Án(øûÚ`þ®Vzg‹o{“7hŸèó£&•'¡}ô^•Ú‹½f«ô$Ú>Póƒü+¥n€Zâ •?È_Æ·“ómÀÿ€|¥˜@KQp‹Í! €üaRÅ?’©µ¤€_iâ ç;Å¿Rä¼Úÿ`{p>Ž/!ÊC­¼J…ÒK©ò&NõZÞÛ_æ…>Ro¨üAþ‘‡@èàò÷ÿ£n?×—0?·Ü‡SæÍ+õå—Ñå a…¨ÂGZá+¯ +¹ôJ¾ŸVÀ¬2!êÄì: "0ø¿QÊ$üß,e6Ký€•ÊŸ ¬jû,ûlO·÷p‹8¨YØ$ hàƒùÙõV]³¶Ü¿¦Ì¯¶œõ'jJÙêJ€€Õ4•6–h( ª/ ¬/…±k‹ÿ@M ¨WFÕÊ—å¯ ù +ü¸et(þKˆâŸ[ö>W(þÓ2SÒ‰7¶Vû?) ùÌO@øŸÿjÿǯÈ?9ÉÿÏþ±%ü¿7ÜfO¨•Áÿpý?ýŸ—êY”åU’ãCø_T¨†Cñ¯’FþÇ7ùâ*¨T%©•‰ Y¬T¼—/Ã[@\bý³œç‡Xñ?˜¿´Â“Q©K ~À½~`:ã¢Áeɧs„~)[" ‘)ªµ&ªº&¶®.¾±1©¥%µµ5­£-£«#«§+§·{__öàÀ>´uƒ®_Õ_:Ž–÷”MâJŸž)Ÿžæ“3¼‰‡yÁä$&0NALL”‚ð'&‹G'ŠG&Kõ%£c“ú¬ùáÔCúä£ÃA§tAôÌë£>/Ž:¿2nóÖÔÎG3›ßß¿ñ£ƒk tÿò¸Ñ7'iøS]*~0=:›ø§ÓF?6ùù”ÉNšüx"Àø‹”OæHLcïNaïL‘þ5IþÇ8ùïäGØÛS¤wfIÌS?>`ôÙt´üÂïÏýp–öÓycÓϯýáÜÚïΘ~zzÃ''Öþ{œòæù~õFÚ3ÚûåÛ†x;ÛŠÍ+³,$I»yÑ»J#ÍrÃ,2v¦únKtÛc».Ò|MÄÓÐm&Á›M‚6m4 Ù@ØHÞDMØLÿ§l'e˜‘Àÿy»±B ¬Ä M*P PÀüå–Ô2 2z(`ñí0¡#î[Lc‡ÕÚa ¶hŒf ¬ÕœÜ¾“ҵ˨ӌڹ ø2bEžw1:Fßpa/ö\6å¾€ö—jì_]¤G)ßÏÿzxÍÒS›–.m]|Öìwÿ?°^z@<äµ_1¿Ã“—¿ìøä¡3Èÿ .ÿÅûžàÿ'w<¿àñÛ-÷_n¸ÿxÍýÛK._žwâÿƒ“n;¿qÀõá¬ëí)·+ãîçF<Ž{ù÷zOöxƒù‡z}»}º|ºèý¾}tbIw˲ù[<[ê=šµ>MÕÞ„üW þí¯\T+󻢞ă¿Jì•?ÈÇFƳ†Pð;@ɱ•—[’r+@Tf)(1çïâí$F€W´‹_¼[Xb..³„ïÀôù£çÈ|gÔù:¡‘=ÿUËñ%@*êJ¯êJ/ð?.ÿeÿËžÈ_"÷ÄÍï‰_åEÈŸ€ð?.ß—¿AþÜ`%¼…åÞ’rY¹¯’ã þ¯æûkþË aþoYUÿ£µ@+õ?a~\þ,ôÀWüÉÿ¨àGþn“†ÀòÇýÔÀ¨ã²j9HþÚRÿê¿?P̪ŠüM¡Ÿ¦Fÿê, .Ÿ Ô°k j ˜ÚB&ñSâË•~UùS“ç_™ëh%{4’Hµ(\)•ó‚El^‰_y‘_i£°À'/×3;Ç=#Û55Û%1Ó1!Ã!9Í.%ÝHÅ7êI…‹[ %Ù†€èêHˆ³IŒ·MÉ'¢nOJ2˜ß =Õ9-Å)5Ñ)9Þ11Ö>>Ú>6Ê6*Ì62Ä:,Ð"4À"˜µ;ˆ¹ ƶ9܉¶Š·IØkŸãD4ÿsÓ<в<г=Ër}øÅL7þCª¤{ªå‘µª½5ʨjÅ^@«Œ®UÇjñŸUò½rI¤D&ñy\‹XJ¼P!`àþ÷.åzU”{–—y”áÂÉø©ôù…€¢À((dùû—–û•s˜2Æ!çŽMð ÀGâÎÈÇ€~¼Зú1 X?V8Š(ÉÙ§×çÌÆîÜ{t(üœŽ}Eïó¨ÓËcÖoL˜ýßÌ–÷ç7|rpÍ燿>JûŽˆ€Ó0ÿž2^ÁôÇSÆß£~q­Û|o–¶k{COzMGyUG}Ugôòˆñ«c¦oŒ›¾5aúö´éûóë>:åýÚÏN­ÿôäšO™|~zÍgL¿|Êô‹“´/OP??jòé!˜2¼=E{k„ü°Ÿ|«ƒ|µ‰vRCÝ/_£ç¬oÉßT™¶UgòÏ Ùžá¿+Ù{k¼Ûæ8Ç{­×Eí2ݳÝ$|“QøZÄ:jäZjÔ*ÿ@ÌjÜ6£”Fi;3veî6Ê1§äYÐ ­ŠmMŠlŒ ¬)…–ä"+J‰5¥ÔŠRfM†PÙIì(J¬Ê«sÀíH-VÔVKj»9©ÓëÜuíÂú-0½6ï‰À.&`Ïæ’^ßÒbÿîÂ>þÞOYÒã§×-^ݸô즥[Û—îì^¼gùäžÍâ|yŒNOî» Õ¿ä³tßwéž?â.kéâÉmÖo·X?ßdýô¬ÿ÷—ß=Cÿò㣳ôwNûýíýÕCŒûûéÏÏø^¤Ÿ¡Ÿ¦ô›ë÷Ÿêñëôꡃùû:|zÚ¼zÚ|ˆ>Og‹O{“Wk³WK“gS½GC½g]g­Ö£VëU£ñÐVºW«Ý«T¥—VáS£ô­Q2´ø¡Uï*©gµÌ € ¢ì¯»./õç£Ý>цÿ{¹mѬ€E€µ’k3P:öb<„¥ |~±…˜ˆÊ¬‰ÎL઄ŽËà§½ .’?Ôÿn•Jwð?8 äûßK©ð’˼¤R/‰dYû"‰8•ýb°=_à-úÎáy`~o!Ç Š|ð¼ Ô‡_âÍ+öáy Š|a1]\L—”0deþò2†²Â_ÃõÇýϬø× ™u"ÿz1³A‚üOZ¥¬e–#G?j“µ+‚Û¡@‡<´] ¶o#Z%¡qÝ, š!@#?¸ŽPS -cW•0+‹ü4Åþd{?Bàš<¡îÊ}LuŽ¿:‡µŠ%Žj_  Î ˆk¸©ÈaòlY–ŸJA˜šªà‡€ü¥œ@Q‹ðqoažwî>¬l7ðJ–sRò*NZ¦#c†Czš=^Ì/GÀrK_ÕC<Û5øª}¨ù‘ùÓÑñª/îÿ¤8‡„‡¸½v{Ãí"Ãl‚-C,‚X»™»`„kðx%L b#m£RãÀÿyéžÅÙÞ%9^ùta)þ*ÅÕ²(´¿ìU ÚZ ÿ«Q i„T* ø>[(à ÙOèŸPì]Æñùþ/-q#).,tÏ/tǶ<€¼|o<| ‹èÅ¥ô² Ì#x¶P$–Ë•á•U{kjbëëþäÿîÞ¼ž¾ü¾ÂÁá’a}D~´Â#cÈöcå„ü—ïàþ×#£}þ¦pîÌ`ÜÂ`Ì¡Áðƒì§½¯9¾¨³|Yoöæø¦GSëÞƒ:œöéAÚG©ß§ߟB›ö|½êõ»üg°coè°W°—z±{½Ø‹=ä;½”¨w A¼5jühjÍ;³¦ïÌ›¾{Àøƒ´wRß=Býð(õãc´P?9Di¿çÈ0}€_u·»ÑŒ=SK9®2š—¬ªXß”»A™¼‰³­8|[Nà–TÆöx÷±Në£íÖEZ˜Fî0ŽÜf þ[O _K1øêÿØ­´øíÆÉf´T4äÿÝ´\sj¾%µÀŠÀEž¥À‚TdA.²$•X’K­Hk#‘ In‡i°Z{Üÿ6”V+r‡%Öeüß½²ÆÆ°>Øé`ªÁÿoVcïtbb_-aŠôÛùµ¸ÿ·,=¿méÅ]Kw-žÜµ~r-ì_ºü¿xÏåÉ=Å{>K÷Kwýïø/½È\|õøöoÏü|3àÇÌï¯úû ó« ÌOÎ1Þ=Íxt‚ñ×Ãô—|nÏ1nLÑ/ÓÏèéÇéüg{ý'º™úN†Aþ]-^MÞ^mžm^Pê7Ö¹7ÔºÕÕº×h]µUnÕw2¿ ¯*üŒKôˆæEÞ%ÅÞe¥¾œ ?>Ÿ)²%’ ¹íWYQ]UW þoiIýoÿ÷A éJ †õ¥Ã£e€Aøÿ}g˜Œ– êõ…:}žù19”4=?ß¿çp_àÉ>ß ý.7mní~¨Ûö—± ›\óö´ñ»+§•}v[Î,;Lí~ôÙò‡ó”÷¦IF±7†°‡½Øì¹Vìz3@ºÞB½ÔF½Öaôl§ÑíÚ½>ãW‡M^1~cŒöæ$åÍ)ò[Ӥ̒ޞ#½3G~gŒüh‚ô1Ò›ÃØ«}ØK]Ø­VìJ=élåˆÂxF´n°l}cî&UÚAü¶¢È­9Á›S|¶Æ¹­ßkoie¶Ë(l5| -tü¿ºþÙL#üŸ´šbFÿgì¢ÿa €CÚgAFãnR®99ºCÅVä ߊ$±ÅT˜¯ÿ[m©í6ÔN+R7D€9ÖkélI“.Ø~_ÒÉ`êÓ‰Øò}ùu ö¯ìöÅöýQê¯çÖ-]Þ°tcóÒÍ­K·w¢ßn[>¹c»t×né®ãÒ=祻n‹w½ïø.Þa<¹íÿø&Ôü`þ_oýçÙ ï¯}s%ðËËìÏÎ|t–ùîiÖ£ãÌ×û?ØÏxa–ò¿<ſ߉!Æá~Æ|¯ÿ#]Ìá6ÿ¾:”ý]Í>Èüõ¨ÏÓ\ëÙ¨u¯¯q¯ÓºÕV/›¿ªÒ]£vC=¥‹ZávUËÜq<+å^HûRo RâU)ò¬»ƒùQçGìN´}Àü«ýO€Š¡ø_%lÕxÈp¤\+À ƒü¥;¢ø'ä_)vÖÈ\ ù«qÿPYI<óù»+îr™ø_,ö‰Ü‰&ÿênï±ìÐ>Ï ´ð*1ÖsÁù@'ˆU ÈŸ©.ôSæÓù~ò<†,—.ßG—åøJ³éÒL_i&CœîKø\ >÷å%û|p{ŠßŸà'3N‚AE‚gYœ»i[RÊ—0%þ¼"Ò¥y>…û¼ r<ór< þíƒÿ\þ.0#€û@F¦KV¦Kf†3±içʾ=àÛ¸.ãWäŸêœ‘撙î òÏ€)®x¸@$Ç;CÄE;Gíq³ ± ²$ ¶„@x¸UT„ULÚü!-Å5'ó Ç»8Î-b‰9AJQD¥4ªJŽ >ªTÑ }ð?×àµ|R¡„ËÅ!Rq°D$"“ÏeT”{â?r¾¢Bç§‚<çü\§¼}Žyûœ—S ×9/×µ°À£ È³¤Ä«¬Ì‡ËEþ‰V‡WUí©©‰nhˆonNjmMioÏèêÊÆýŸÛÓ—×ÛPÐ?XØ?\4 +õ%C#Ë`p>TûÄ,àÅ¿a:0ZŽG@1Š]Áðp>0:˜662Ù;×v¸—uºEÀ•~›ç‡vßÞúòÈÆ7Æ×þmÒäíi£wf(ïÍ’?X }¸ÌaïÏ’Àüo“þ>Búë ö°»Ý†]oÂ.Õbç´Ø¹jêY-íT½ñéFãóMÆ›¯µÝăàÅ^Êý!ÊK:ÒC˜/豿è±×õhîÚ}ˆô—Ò+½ØýNìv+éFå™ZÚSÓÊuÓâMƒœ­­…fÚœ²4óŠØ]f™þfI^›cÖFÙ˜D줆m£„mù“ ÿïYOYöÿTÿÇm£&n£$£ ¤ï¤fìBòÏÞMÎ܉eí"p äì²w¢0(³ p¬0îÿG¬ÉžÜfGë°¥tY“{ ,ÿ‡l)ÿ_ï×ykŸ™H‰E‰ì$êô‚ÞÑËTLï½wôÞ{oH‚$@ì½K¢$Kr‹Krm'ñï8‰oœÄ‰nû*îŽDñßß9À–s³Ö³Î:‚Eõ¼{u™FZM&ßȾ_ƒ=W’¿á ÿ¯FìǃØOg°[ÁþóJÔïïíxñôõ—ÏßÀ[€˜—zñÑÑ_Cç9¼üzÂËoÐ^~ùâkœ_Mù죴ÿú0ó÷ï9¿}ž÷ëwòÿóíŸ?+øøqá¿<Ìÿ邟ÜÎûÑõÜï_ÉþΥ쯭f½¿’õöé¬û ·f3®Ng®MfžËZÍšΚHG>Hþ<´‡«3¹·ÛÝÊîheµ7³ÂüM i}=´Y¤×™á¨÷³êý Ñ‡ äßèa`~ ÑË$ŠÂÿntÚQÿ£'!oB£gÃÿŽ¡M‚öã@Àv ¦|–càË =6ôÇųŸÞb@{Bø¿!Düá™ }ø!ä•?º¦ÜÇqyXšçŧz¡øw9¹NݪI1«x%G«`jK©`’ǯâÝð?’¿’©P²äø*p @ï¸ÿ“@ø5Uñ~J:¨M$ âgµÑ@þ )ü/“ÐAþ8Ì:!C"`Škè¢jZu£¢œZr2~# Ž@/P´ø¿´ôDyy\UU¼PH¯“²4rŽAb5dzìAOq½¿´9XÞ,ŒùƒíõU`þ¦pÈ¿!XÔŠÂþBˆ€ 7?èÍ xr=® ‡-ÅbâD„Á ¥ê5I:u¢NMÕª’ ˆ P«“´Z´F# ~¢Ýš âñdúý9h§p#:5´½½¬««º·—ò×ÿÇÆ”#ªÑIõØ”f|Z;1£›œýŸ"€ðÿ©e;°xÚ,,Û ÐŒ1FtÊŠæŒè4‰YÝܬraZvjJxf²âüDÑúDÖ͉ä»´'“ñϧ|8³ï›³»¿;¿ãû‹Û~x*úGKQ{û»³hJ÷ïÎ|Q«o ÕêèÐÎ.ìQ+ùvùjˆr9µÜ~¡içZóŽË-;n´í¸ÛùêÃîWžön{ÖGyw(ê½ÒWF°G°@õÃØ7F°?FÚ‡ÌÿA/ùÝîè·;_}вóFãë—Ã{ÎλÙŽ÷ã›UñQ¬¹úˆ6ÿ˜<}¿ýFu⎲#ÛOÆDï¡€ÿOâàþ'oþGÕì†ú_¸Ÿ þÇë’‡¢@øu1É| @(@Ð ’­ÇIž8¬êÿ$¬'‰<˜@‰=AÿÀé¤ùDì,»š}¯{[Aùºò ØúÐõÇŸÁÐÉ·_ýìÞ@|eÿË~þá‘—ùAìË^~˜øâÚg°ÿðÞïßKûÝóÌ_¿õËg9Ÿ<ÍûùãâüÙƒÒŸÞ=ù“[Ås³ä¯¯ŸüÞ•¢o],úêjáû+ÏN<:•ws6çÚLÎÅ©¬sãÙ§GsçG²§³&ú³ˆsÛºRð•üÉÝ-¼öfN[»µüP9#y™Á+àgüìŸ }Œ —"ð°ë=ì/§—ƒ›€ù›½¬&OMŠwb=.Äfñß`?þßú€£±F-µ£)ãzò?8Ç ¸x¸ÿ¹;a~.ð…ùqùƒùm:0?Ç®ÙÀ¡x.5×£MöéS!¦ôKz³ ÑbO :œ("ôx³^_NO — 7ˆäßÊï}Á‚Þ’Ÿ¯ Ç“×í.ìr€üÛí¹mÖ\Ð~ 8ß”ÕdÌ Y úÌz]VX›T§Ti^e¦G‘á’¥9¥©IªSœâ%Û)8i |KMª¹:ÅXb¨B˜*70V$†rž¾Œ èJ9š“,U#‚².ϧºté€C“jQ'›”\ƒœ­“ƒTYjS%g*pù×I‘ü!™’.W1”øˆ‡JÃRªPÈ¥Lp»DDÇýŸõù¦ÿÑ)m„ÿ¥¦¢ŽMøž21S&bÈ„L ŽÏ”Ô2 jkX•x €"àd\Qq쎟,‰-);QZŽŽ€æó©b C`u²Ùá´åùœ@¬ÿùSøóOn²!ÉGþwd:¬É#Û¨c´t­&Q§MÀüz ÌoP!ðHDq€ÿ¨ÒÁ€ÖÙmð/ÙëIø³Ð­aõù-ÍÅmm¥==Õýý|ÿÐü?2-€lxEá"ÿÏHl­ÿAþK§¿˜>uƹ|Ƶù¥E‘ ƹ9ý̼~vV37£€Xš¬\™(^˼<Ê»9F¿7ÿxüð»û>š|ý›Ó¯~gö•ïÍmûÁ<^«/bWìPö£Z}˜ôQö¼‹ü¸…|+L¹ì§œsQ–íQËömsžó¾K×Î…w®5î\ozõZË+·Ú¶Ý툾ßõ ›ô¨ {Ú‰½Õ…€øx»{»{«3êYç+Û_{ØöÆ–½×^ª?v.¿HšòÐÌ.#+¬¤:Eqö²]Þayê>󪯖Œ.Ùƒêÿâ×H%¯‘Ò]¤ò7Èèäç˜m€ —ÿäp¾ü Ev8 ´/ŽÁD0ø\rˆLä‚êh”þÅt #üßNCþJŒŽ'ÇÆŽ£)€±#ØÄqÒt<¶ÄÂ.fl»]Iz&£|d‹úóÒû±ÿ=‰}|šôŸ—£{sûg÷_{ùl×Ë·w¿|-zñþ¡—ûüÝcŸ¿ûù{ Ÿ½KýÃsæïÞaÿúí”_>MÿäIÖ/åýۃ¹_úOwË~r§òÇ7+~x½âתÿ|½êÏ.V|x¡ìݳ'Ÿ,Ÿ¼¿X|{¾p}:ïÒTþùñ¼³cy‹ÃysCy}9£½ÙC=i Âü]ÍÉmMÜ–zns˜ÓTÏi ³ÁœõP*ûÙ~ËçE8?¢ý *3 Ìð+Ò¡àwÊÒÒ4›$Å&Jµ S,‚d3?ÅT›lÜt¾¾2Y[ÎÕ–'«Ëx€ª„³e1WQÄ!°êòÄ94Q6Ìo‡úYÉ3*8:)S[ÇÐH*)CYGWÊPa/ÇýÀ+…š©ÚëFO-G«ájÔh¦@!cáÁóB>u#*7ýO“€êëXJ)G%ãn<ëØr1S.bR "X55tˆèÊË’JËKJ6‰C ÿ/¯Œ­á' Åt¥œ­QñLút»%Çí@w¾„¼'‰% ÂRt˜¯(è-àeTüAàse»léV#Ϩe4L€(ò!“†jÔѺÉH³X™6;Ûíù§üáPvC}nsSA[kqgGiOwEoo îaDþccò‘qùؤrbZ=9£!†€fæŒÄùos æy|GQØojß±|Æyú¬ ÇMpfÅ@¤ÀiøøNø~fˆˆ€™õì´|nB°0^¹4Ztf8ëâXÚúãÆp샑COGö>Ùõձߘxõ[“Ø·§°ïNcß™D>ßþ9ˆ}ÔGB—6¶Rî5D_õGwF/˜¢¦u” ]T¿á•ãöË«SŽóž§¼¯žöo_ n»Œ^ ‘/ÕSÖë)W¤«aÒ0ùf=åF=v»‘r§eÇÝÖ×ï¶î»ÛväVë‰k- ëÍôµfö™Æä…pê¤?sÈ™Önâ5ªÙ!ÛU‘`*8¦J;(¦ï®9¶£Ï•G(ºÃdÂÿ IX륒†)# ”ÑÈÿ#G°áÃ(&O` 4ì\ åFö¨.ú3å;aÒ_÷b?™ÀþuûäRÔo®EzoçËÇ»ðxóå;û>çÀ‹wöΑÏÞ9öé;±x;á7Ϩ¿zÊüä1ïçSÿãaÖÇ÷òÿéNñOo—ýý­ªÝäÿÕ5þ÷¯ð¿uYøµÚÏW¿s¦êÉRÅÝ…²›³¥WgJ/N]˜(Z+ZÉ_ÊŸÈëËéÎèJëëHùw4æç59à| `…ýœ ®}¯›Ãõ:™€ÇÁ¼v†ÏÁô;YA+äd×»Àü¨þoDþgGüOTþÿ­ÿñÁÿ ÿ7:NÄ,0±(l?²…'Âv¼Þ~¢ÁÛèŒ#hrÅ7»QýOTþMøÎß ùHûAöF dáÓ¾hª_Û™Œ;ù8ìl0¿ËŽj~›™Mü }›´Ïíæ·ªX6%€ RÀ©âyÕ)>mr@Ÿ4¤ÖÓ!Ì)MÖ´&k DÀF#@Œ9ÒÛ]™@‡;«Ó“Ýåͺy=Á|üYHÈÌOÈ¿Ãæo±å6Y² ó‡ ™!]VP›ÐdøÕ™>U†Ožá•ùÓ=Ò4h_’f§š…É&Bû5Póõ!¨üI_é"¿ÕBzØH¹оè‰>mžÒ’‡¤A©¹.ªEFéPlëÕ½2hxuÔôê¸yû¤uû¬}Û¼#zѱmÑuÊNY²‘–íäÓÊ9/y-øÊ•†7®6Å\o>v½5ñzãJ÷J{ÆÅö¬ ­¹§›òæ &ùƒ®œKf§&£±Žã«¢Ú bÕ¼Iâîš#¯Vì‰&†}*v‘Ëwa•»H5où{É‚}ñ~ È_~d;ªü7ý/!!ÿïÃDûI’?ñ¿åæÇ©X'¤SF¨”ÑDòxiü’ÿàA<ŽaÓ‰Ø2‡r¥{ Šzßõíù/»±¿Çþe‰ô×¢}uÛ§ww|þèµÏŸ¢Q oíyñÖ^ˆ€ÏÞ:ôéÛGÿëÙñß?ûÍãÄÿ|LÿÅCî¿ßOýøNÖ?ßÎûÉ¢_/ÿáõš\üùeÑ·/оzAüÁ9á;gøONÕÜ[¨¾5WyuºâòTÙ…ñÒsã%gG‹—‡‹ç §ûòÆzr‡»rû;ÒzZ“;›xmõܦ·1È«÷sB>6Ôù *|Ÿ‹ás±¼6à±³Ü6&à²2éµ³|vÐÁ;Aþ(¶úcÈCoõ0€7½Ù„GÀ—ýßäŽ7ºb‰óG²>A1±é"à—‚ÊŸ8M^ˆõ?ÄâÏÈ<Üü<Àf@¿Uˈ²ÌoU0­ ¶EÎlr¶]Ás(“] ®G• þ÷ëRBúˆÿ¡ H¶FÀF¸6ˆvx³N_N—?üßå‡(€èöuü½íî‚Vg^³-¿Ñ’[oÊ2ƒú Äü^e¦[žNŒó.|´Ç"L3 R¸ùAûº .æW—²Qy¿i~I>ƒ0e9JqÆ’ƒIX ëf`C ò(•2ž@‹Eõ?˜è iøÉ8ì‹r±»/¤¼oÚö­å]Øßaÿ¼ˆýû9Ò¯®Dÿáö+/îCì Zðÿ‹·öúìàžþýÓÿytü—â~q/ñÿÜ¡ÿëmîÏn¦ÿôFîß_/þÿ®•ÿàJÍw/AÙ/úÚªèý3uo/‹žž>XÜš­½6]{eºfm²òÂxùÊhéé¡“‹…³}ù“=y#¹CíÙi½­ÉPü·†ÑnØÇºYÄØ˜£ÔßÐ>pYY3“Àmaùmˆ°ƒ&Zç†ÿ7a¶øØ`þf hõÒÚ|ô&/µÉ›ØàŽGË>ÝqM“¿ÇÀÿÍžX É ò? íÀ†ù·?ä€â߇îÞ¸P?_í2öSÃ>zÈ0‰™ ¿…F±ü,ŸÃ%ü†zhÀ‡XÞ‰ŠËÖšÃü ˬfö-J&5?!«Œ€c“s#þ÷kÓ þéÓ ÂÆ¢Àýº4"äHZœhX»'‹ˆ€Í ȃótz‹þÔÿ]¦_›áÓlÈߣÈpË2œuiv1í!ù›¶È_[ÎÁÍÏ"ä¯(Ú?*ìAøYÔêlDM €—ª¬¤ÊLjEFÒéÔò´$ ,5±4%¡$9ÞPÇ´u,µ˜¡ÑåÂD©0Q&J’סú_©`¢%çG Ýu ò7Y’ `Naô¨ F¶¶@u ð¿DÂÿ«pùëT©ºÍÐÈ’ÕR 1W&æuBôD,øE J › îç× ER ú÷¿›Mék¶Û‘¹ùžhm§ >É#ù;`ø¬øžßìV{¦É’¦Õs‰ó.d  '¨•4@¥ jÐÐõj†IǶ™¹[ŠÓþº ñ¦ú7ýߨKø¿³£¤» êÿŠþê¡A>òÿ¸ÌLM)§§”³3ê¹YÍüœvaΰ8oD>Ÿ²œY¶=m'Ž:¿âðS€<««Þµ Þ‹«>?ü̓N‡;í8¿l=·d9wÊ|î”qeѰ²¨?» ;3¯]<¥[XÔÎ/hææÕ3øµb“S’ÉqÁÔhÅÌPÁBúé^æj÷‰«=‡ovï½Ý½ûIOô³ž¨·{¢ž÷Pžw‘Ÿw`o·`ϱAì¶|ÕE9g¦ÌiIÃ2¬K€µVc¡*J ‚ä+Çü¤`%XMÕPµQõ5äÆr}4Tc5X‹€Ô-{eи}ÂþƼïÈr(áB3÷RG&˜ÿZ_éµÞò«}5Wûø—{«]‚ó‚Ó-5 õ•ÓÞÒak^:½‰Ïö%šÓŽÊ“Þ¬=ðjÕ(ûQåÿ:…ÿ:I°ï%Iö‘AõŠƒÍ!Šöp<5ɪ$e Oøœ}yÓ"éœÇ¢|qd(þ;èX¦“Ç’6ü?~mÿ Cq°À ¯æcwù”w ÛþÌOþ~'òÿϰŸŸ#ÿr=ê÷·¶voû‹‡¯"ÿ¿õÆgÏö|ölßžìûÝ“˜ß=9ôëGGþóþñŸßû?·v“ù×x?¹šñ7ëùyù䟯V~sµæÃsü¯¬Þ]–<[?^ÞŸÞœá_›æ¯OòWÇ«ÏV® —./ôÍõLvåŽ¶ç µdö´ðºyíanK þyØÛçØäqÛé›Õ> Tï¶°]f?Ëibn#Ócfz!,Ìr°êlä" Ù…ÿ·zXm^&TþÈhñ ÿ£Ìï‰oöăð›]ˆw,/ ö£ðÄ9A€÷ˆfWÐâÆë<€&bÿ×Vÿæ'¦0¼p@þ^OŠÛ…þ׃ê _á™ì´ñðE><|œŸ‹õp­ZŽEÃ&F{ÀüfÃ,Û¬ü¥L0¿EÊìRŽSÎÛ¨ÿ5©A‚ð?PoJ%"h°¦6ÚRšìÈÿδ&WzóÆI¡Ym¾ ù´û Ú¼…-îüfW^“5ïOýïUgxˆy^i:øß!I·‹Óˆb´ßPÍ%ü¯)cƒÿ•'™Šb–¼ˆ)+ø¢òà¥>á|‚ÊÌÄ/ÌŸ‘TžžH˜?"´¨Dt¥&ã'Iø‰~¼D˜ “På2dW5^öGÖ·Cñæ7[S+D€ÉÈÓë¸hhs÷"¿&ü_Ëg DL±ZNÄÿzœø"8r [.á*êxò:žL•Š9uD_ ¤Ã¯,ä'‰hû0dJÉÐjØ&}ªÕ”AøZœïq渜YNG&ÔövÚœKœö¹åÌ7ø0^Œæd­P3ëäT‰,ic›º’8Ö%ʤI€B–ˆR@E7èXð?:NÊ‹Îù‡Béõõ™MM9­­ùíí…]]'»»Kúz+j†kG†…ãu“Ò©I˜Ÿÿ¼nqAjѰt ]ïò˜óü7Øþ®ýKkþËçÝWœ«§m–Í«§L«KÆ úóóšó ªósJàܬlyA,Î+æÕós*ˆ€©iÙä¤xb¼fz¤tf çT/ïlõbÏñ+݇ntÇÜïØþ°cû£ömOÛ¢žµF=kƇ±ìž»åÂ.[Igt¤Y%6"ƺk°ÖJ¬¾<*XJöŸ${N’Ü%$gÉQˆN‚<Ì–‡9 0gæ-ÃøÛ;U;Mû¦Ü'N…˜ç[2/w‚ùo ÕÞݕޑޒ^^î“®v‰WÚøK ÕSžâ!cn§,¥¡’éÊ×1bÄGvÖì‰ùWï" v“… ÿ71é>Š|Ü®>HÖ¢è‘ ´0‚P ©`ª}˜:3Ä,ø0áxJ+ë¡ctl”Š%‘&âɱØÄ òèQtÄ@ ©o6|›K"]ÈÆnUcϵQßðbßëÀþvùÿ?VðË_6ü¿}Óÿo~úÖžß?~ó·OöþæÑ¾_=<øÉýÃÿ~çø¿ÞˆýçëÔ¸Êú»ËÉ?¼˜õ½ yß>_òµ³_9Sõîrõ;§$Oæ…æE÷fE7§W§àÿ‹cÕçF*Ε- œ\è-œéÊ›lÏiÍjÎè¬çt„Ù­Av³Ûàå„]¿Ç†p[QäGÌï1qÜF¶ËÀrD€Ï þg¬¬ñÿ†üÌfƒð›‡tøàèš}àíÄ&oÐàÚowǵzâÿc[ý‘?á"šˆý_øD0Ñ„¼´—ðÒ¦ÏË$毽æÆDÆæ~^Ð>í±ñàIÈßiän–ý¢æ`Q°Aþ&)ŠsóÛêà‡ŒëVòÀÿ^uJ@›Bø?dHðH†¨· ðHk²§ƒÿ·Fø¿ÝŸƒ@ò'ø#ÿ7Ør–¬™ð:îÿtð¿W•õ%ÿã³½©àÿ?-þ7ä_ÈÀåO'Šb¨g‹ùÊÓã‘ó·ð%ù ÌOÈ¿®&AT/µŠ¥uþGÃ>Tþÿõ?ÿÈÿ–TÂÿ-—Ø/¼eMTÖâþ²ÁÿRÜÿHþê´ˆÿQÈS T2žRº9/2žZž¬–§*e)d‡¬Ž-•° ¹@@þu •œ©U±à·¶Smf¨ÿ3ÝŽœˆö®lwDþö4› mÎÌÖTÀdûƒ%Ykä(µ ©2I,‹Jüºx¡øDäðj¾ðºªRŒ.¬WBhèÛlæX­<D€]* e†ë3³›šs[ÀÿEàÿžžÒþþ \þ‚±Q!ÿé)ù쌕ý[ä®z9mY9k;·b‡Â~õœ*ü‹¸ùAøë8ðî]¿àYÿŸµ]\¶¬2^\Ô¯.¨×櫳òÕéꌸ0->;'^™—œ—žžWœZPá  "`z¬zf¨p¡/ãL/ûBOâåžW»ÞëØu·uç½–W6o{Üõ$L~äÇî»±»Nì† »¤ÇÎ(±™:Òë­Â:ʱ¦Òmõ%Qþ"Ч€ì, Ør1KfÎÄ,Sš‰RÀSU_»£C±{ÈtxÆC=]Ÿ¶Öž¿Þ[q­ä/¹7.¿?©º?©¹3¦¼5¢¼1¨$"à t’1k~¯*£•Ï ÒÌÜCŠã»{£¡ò¯Ý…‰vSêÞ Ëö•û(ªýQšØ´o:L²&›‘L1Àx3 é`ºL¿3Å K!èüRK<¥›Šä?LÅF“°ñŒð?^ÿCñOØGêÛ‹ ÂfÈç2±Û•Ø;Ê7ÜØ÷Û° -`ÿ~_z+ú³¯¼xò*ºïàÝŸ½½ùÿÉîß>yó7÷üêÑþOîø[‡>¾qôg×âz•þ“Ëœ®¥}ÿ|ö·Ï~m¥ôƒåòw—+·úÿÖ”àÚ´ðÊ”èÒ8e¸òÌ`éR_ñ|OÁLGþD[Îhsæ`S:È¿-Ànñ±ñ¥›h$ßo#Jý/y<&–×ÌóG€pëYn=ÃcØô¿™´°Âvh ˜MBþ¬7ªÿÛ½Lð?m>j‹Hjó'µxAæ± ý­þGs_ÈÿËþó·zh%ˆ1¥FšÞ8bÔK zèøj%†ÏÅð¸kÚÒ‹Ë72Ò>¾« UþjTó£=0¿œEÈßXGó›$ðdòøêj®O›ü%ÿ‡ÍÉáÿ%%lM­·¥58¸ÿ‰úäßÈEøó#þoõå·x šÝùàÿzkvÈœ4eõÐløZ|ü€ Âÿ¨ø¯I5V§ò‡âäOÿ i>“(þ…yLA.üDä“1?ñ^––òßêYm¢œŸ‘?á© ]š"2쿹¿UoDwL\ˆ³ þã?fCʆÿ•\𿬎…/¥þ¯â3ø–H²á­ùÿK-®zÂçˆ5Š­2•@­LŸ¨”C@pˆ¤È_£dtl‹g7§:­é.[–Ç‘ãí£g6ÈÃÿÎ ‡#ð?´-^ Л¹ñ®5²U:F:I(ãKck$Ç«ÅǪDè’⪚C•Õ+j•µ‡ªGjEÇ #¤ÊD¥š¦5àËþ-lž " ¾!ë ÿw—ôô–õTŽŒÔâò¯›™–ã Û~æ5‹ Zt¥/.(þÏâ'^8ïD÷¼l1ÿ•KAÿµ‹þ+«ÞõóÎõ³ö˧-——Œë§ —Tçä—fë.M‹.NóKS5ÀÅÙÚÕYÁÚ¼äÂ)ÙÊ)åé5ÑLO×ÍLðgGÊòN÷¥\èe^êIºÜw¯}ÏÖ×ï6í¸ßðÊÃúm‚ä‡nì¾»mÆ®°U¶T‡ÍH#U¤¾2R×IrSat(ŸìÏ%yrHŽ,’%lJ%™’1#3s13ó0k:æÌ%K¶·ßèUÇLØNùyçš³×»Ênô×ޒܓݟP>œR?œÖ<˜ÒÞ›ÐÞSßR¡h,×W̸ŠFt9]â”úR†#õ˜.q¯xÿv¨ü»H’ÝÙåŠz_ ÛécðÑ…ïø¿€ýzá[àó˜ Ì]þŒ%µˆêN$ÒI£ lŒŠ'b Ød Šÿ±c$4ø³Ÿ<°Ò¿4—@>Ÿüÿ®†òMöƒö-Ààÿ_®“ÿp{Ûç^ùüétñÁstô§Ï÷~úÖ›ÿõì ˆ€_?ÜûŸ÷÷ýâ6DÀ‘ÿs#îgW“þaùã‹Éy!ý»çr¿y¶è£Ó%ÏEÏæ…ç6ü}RpeBxq¬öÜ`Åé2ðÿBwQÄÿÙÝ!^‡ŸÛìå@Ýr° Œ÷Z ÈÿÈù^#ÏcàOùž^ð¿‘é7±ÿ­ ÔXé 6Dáÿ67‹(þv/E@€Þî§µ¨ø¿ÕOÈhó¢wbˆˆxâ/'"•ÄÿmÞDh%€ÍHD€wàÿ°‡ þ ùÓ‰¹ `s.›ëuðˆc|\–dbªwëÂþћо ª}ÜüHè€QL³ˆ™V ÿ;ê8Néù-ÅÇ‚†dBþ@Мúcÿƒü›Üè²°Ö-òï æu P€Â6ÿF49s°µð¨ÒÑ€<üõ¿M”Š/õäkSõÕÉ‘‘Ÿ/Šÿ"61òOÈŸŸC¯ÉaTgÓ«2¨@ezR„Š´ÄòÔx/eàÿäøÒjd~Iu¼¸*NXNã”à§4Èñ?[GþAþSJdÚ—¿Åœf6¥šôÉmò¦ÿ¡P‡*)ÐÀÿåµ4ˆ€jS(fÕÕ±årtQ;ÿßâÜöhQгÃÊÔ#¨Ó š &Ш ’  ä¿£þs›Rpùg¸í™ }d~GÈßíÌÿÛí)6[2ºËäÌ5Z8€ÞÂÖ™Y:3PéiRM¢X ò?V#ó©*笨Š)¯Ü_Z¹8Yµ¿¤:¦œ¨RxB ‹…Ph“4zªÑÈ€°ÛØÏíO… Z€¶öÂή“ÝPÿãþOMJgg舆Eí©%ýò’áô²ñÌiÈÝá{Îä¿ê¾¸æA£=Póƒù/‡€ë—àÿ««î++Žõ3V\þºõEõåYù噺KSü˓՗'«Ö§*¯L¡¥#Wf*Ög«¯Ì ÖOÕ­-©Î/kÏBÖ,jæT 3u 5K#%+C9“/õ³Ö{é÷:ößmÛ{·éõ{á÷Ûz)÷Ø} v[]Uc«RlI€MW‘GË(ýÅQÝ”¦\r8›äÏÄÜ™$G:Å–B6sIf.ÅÄ"™Y`å`® ÌŸÕTùZo]̨îĬ“q6”~©µðzOåAá½éãIÕ£iõÓ9ýÓyÓ9ý£=¤ÀÍQÕÕAÙ¥náJsõ‚¯tœ×S—ÖPÆt¥Ÿ0P÷Kî¾A¾†Õ½N’¿Aÿk÷Fi÷‘¡¶7Ä`æÌvC¾!¹’ à´ïÁÍ8†5ÄbÍ ”¾ømÃIQã l’‰Mѱ©$l*÷ÿqÒèal0ëßK÷¡ƒ€æ)«YؽjÒû:Ê·|ä¿îÀ~2ŠýË"öó󨝮P>½ûÊËÇèä— >{wϧïíûüùoíÁ#`ÿ/ïÅ|r÷ð/nÇ~|=þ¯Ðÿþû‡R¾w.ë;g ¾¾\ôÑRÑ; §sµfù÷§…7'ù×&ø—Çø«#Õàÿ³ýe§zOÎwN·çM´d4e 5dt‡RÀÿ-nv½ƒ ‡bÞkd¹L|„g\ø\·žãÖñ<:Î&,ü¿ ˆ€™„-4ˆ€F;³ÙÉnq2Z]ÌV7 üßégvQti@;Š0y|‡g”®ØVç  ÅqÀ_àø<ž ÝÐáIìô&µyh›-dAR³/‰˜øcÿƒüéþßXÈÄñà'ùDäO,ì'¦zmêÍ¡(øqù5?ADþfÀ "À&fÿ]2ᯆGø?hHù‡Œ)!˜x„ÿAþa{€.~r§5yÒ[|™ÄeñøM1¹]¡|ˆ€Ž`NDø¿Ù—‡¦œ¹ öì°%+¼Ñ¤á|È!IøßP“¢«âi*¸ª2¶²”…/õdÉŠ˜ q!S”ÏÿóóXµ¹L?áÿ­òÿcÿ'•§&‚ÿ·F€¸*UÆ ªb­þ‡â-øÑòtp>”ÍifkºÅ†qiI·Y3xÿ› i¸ÿS4*î6øêÿÚª¤²*D´h  Ž%CSÀßõòýÝ/?xóÅWö½øJÌË÷ö@|þ|DÀžìûÍ£¿~pô—÷b~+áãk´XgÿÍïç3¾{6çëK¹-濽À:Sóp¦öþ ÿÆDíÕñÚKcÕ†«¾äÿñæ(þÂiÝä/D]oeÌl$=Ë©eصtÀ©…w–KÇvk¹›° ¶ú߯gŒt h¢á@D@“Öì ·¸hàÿ7´4¨ÿ;ýô­þo$vø»|àó„ˆÿ‰Øô!Ð~„ˆÿ7#à ÿã— CÐÿûŒÈ¶ä;Ëce»-À—¦z9ø"&1É‹´¿Yö$4@/¦ÂÌDT“ CXELÀ.aƒÿrŽ[Å!üï×!zD@ÐÈüFîFØÿëèâ?üßì͈ø¿,ù¿ž¡Bˆäÿ@îÿœ&g6ø¿Þ–U-€1"Z4¤Lÿ’ÿ­µ<}uж’§.ç ù—0 ùKŠX€¸€ þä³Áÿ5¹Ìªlz%¾Î3D/P•A«L§Ë>·¦!aE¿òáÿSÚpÿ«5hÌßhN%ÌO,˜çKh¬søß¨ƒHÕ¨RÿKD a-½¦2±¤*"Z€!C$aB ß ’q‰2^£äÚ‡O6ü¯NçƒùúÌ­ ×¦É„ü-ÆT§9ÅcK÷;³®ì +—€èÀÿ^w6D€Ë•N\ãˆNuÃOõÄýÏ0˜éZUmHT锺x‰:V ?ZSwä_)ÿ(ÄTÖì/¯ÙWV½·¤zqõ>DML ÿ`™¾º€#Bé1‰ì˜\§Ó'šŒ4“au²ÞdO " \ŸÙØ”ÓÒš¿•Cƒhhb\²ÑÌ©ææÕD)pö¬mÝðàË]ÀšäùœãÒ ÈmNµ:#[›”¬Mð×F«ÖFÊ.Ÿ¼4R¼>Zte¬èêxñõ‰¢ë3•ׄW–ä„ÿW– g5gçeçfj×&Ë/å_ɸ:œr¯ë𽎃w[öÞ ¿~Û}ÇNºmÂîè±*슻ÀÇ˱Ébò`>¹';ª#ƒJÃɘ›‡9y˜‹™Ùd#“l¤‘Í4²Nq20 ¤“› _é®yc\qxÖ˜tÖÍ»\Ÿ{­µäVWõ~Áƒaé“IÕÓiÍ[ ðÿÛK&ˆ€Góú»Sš›cŠ­þ¶”3=™±fúÕá]„ÿë^Ãä»0ÕnLó&™ð¿ifÞÙ`îC˜ÿœáîqeÌŒ™zÆ›|±!ûZ[á­îÒ{ýÕGÄO¦•OçtÏŒï,ÙÞZr¼µh{LÀ¢d Êü/eè% ™ß fèEt€ªãÓõ†IÈ4 ºª¾–fD_Ò-bºU°Ë9Ó©`¹”lˆšëÕ|Ñ1ù½F€å3±ýVnÐÁ 9“î”zwrƒ'¥Ñ›ÚäKkö§73šC™-á¬Öp.AK(·-˜ÛÈkñç îìzWVÈž´dÌYc¦OŸéÕA åUe9vY¦µ.Ó"É23tü ¨ÿU›ò'Ì/)äˆò9â®(Ÿ+ÈeÂl Èbò3ÕYœê 6sSþh]1G@Ìã;¨•™‰@my\MY,¢"¶¶:-­Äý¯Tq5Z:ÐÞ„†z@þĆ)Ÿ;?²¨ÞãÌwÙsí–ð¿É%:ø_¥Jý’ÿK+©åÕô*>‹/` DL‘ˆ%£F@.åÈ¥l"€?õ?¼ã¤ ©DåòwÚ3@þWfØ›òo6† ëƒùá@^Зø}é>o~ãÀîæâþ§›l4Âÿ:SDø_¦9*QÊòëbjÅ1Ub”`øja P%ØÏÁ> š¿—x©îçKˆd‡%Š£2õ h"ÔÆ%Ñh§Y\L<8Þp D@}KFc[VkW^GoaWq$úGC£¢±qñäDt‘A¡ùS†…%ã©ÓÖ¥3›wAžµ®žµ®-ÖNáK}f¡ì­ŽT® ¯ä®ö¤¯õ$_êá\éa_ëaÞîaÞíEÜâÜáÝ˸=‘cªìÊtÍåñÚlݹ9é <§«ÓÕ—áó‰âõ‘œõ¡Œ;=´Ûíq·[ŽÜ ¿qÃ¹íº »®Æ®I±ËBìB¶x›ÈÃú3Hm)¤F)Ì&ƒùíl˜ßÊ Yè˜1 3& ¬‰$•ä áÿ^ÁëcŠýSÆÄe7g5œq¥%ïfçÉ;½å÷‡ù'd¦Õg!ÌϬOæÌ§ wGÕ7¥kÝÂ3-Õ ¾“Æì~Ir{ò¿¶_³C¼+Jð*&ÞAïÀ¤;1å.Ôþ·î'9cH¾ƒXðІÿ;ã±îDR?•4HÅ×ùБü'äiÆFå?—Dš‹š}eöø¶‰£ƒÿàÿî×±î×H}»°‰òyÚ®%ØÛ²¨o:¢ÿ²‰ô“aìãyì“óØooDvÿµÏžìÂÏÿ$ü¿÷Å×Ð]Ÿoú] ö|?áÿß=>òë‡Ç~q?î_o'þÃUúß\âüàBÊŸŸIÿæ©ôwçJŸM|4Q þ¿5ZñÿJ_ø¾³x¦­`ª¥`¬!w(ÝïÍù7Ûya3'``Ûj¦MÁ°Èh)×é`z”l`#"þW"ü*A@Íôiè~= g ô‘þo¶Ò[tˆ€­þ'„ÿ%Àÿ]þøo,1L<¡Ô1?šü…Dð$-žD‚Ã%<4ðØEÛê¿ßògxÌL—AÈÚÂüPöã•? UþÔü„öEIè)¤iùIÚZD€äO¨ÿ³ˆö?ûM—Ø’?ü«¶ñÿãÀƒØê?ÐVŸ·Õÿ‘hòf7zrê9a[6D@Дå7dAxTé.yºM–j‘¤™ÅéFaºŽŸ¦®NÕVò”¥,éIV]1“óÁ‡}8ÂZ¸>˜s¹?ãVíz[Üõ¦£×‚{®Ú_]ד.)°U!v®[*Å&s±ÁtR«ga>æ¦cf 0Ð0•¤OÂô ˜>3Ä£À’ˆÙihü'”En-ÙÖ+xmD¶gZ¿ì`­Ó/7åÜè(ºÝSvg úÁ¨øþ„âá´æñ¬ùß›€â_~½_r¡Sx¦±rÞU8®ËîqÛKôXkRŒ|ÿNÑkQüídÑ+dÉ+$高â5Šöõ(ý̸ùßCòÆÿ·ž u%z’È4ò4B#Ó)à:iІMS±™$4ì?5s,zâHôØ!ÿ½{±î7±ŽXÇ«XÏNl<;O{õV9ö\õ-wô_µ û_>^Äþï*òÿ‹‡;?¶ûå»o¾üàÍ?õ? z?æÅ»1Ÿ¿sèÓ·ÿáÙ‘ß>>ñÉø»ð7è»ÎùëÕÔ¿8›þeðɳ颇ã%÷ÇÊnŽT^®¾D…þEþ'"À©†fŠãBCgl4uŽ/—"Šÿ€ñÈÉ…€üߨðk}v[C.ÿðk8ð³/‡ðØ™²BýŸ©ÿÊ4»<Å*M1K’M¢4½ MS“¢ªJQ–spó3ÐloC”Ïù ò¿?áüÔdn~™Ãä¢Ãê Ðd±¬uÄR]]T@æSð?Ȩ­Dƒ?è”f)C&g©ÔèN+ƒÍùÚY¨ò÷ø¼y¡@!Â_ }h­Û‘ç´åYÍÙÈÕÚtµ: ü/’ ÿWV'•'•Æ—%”T$TVQ«k©5|š@@‰ üOþW(yQÿë´èH"ÀüÈÿ¦t‹1ð¿ÓžîvfÝ!Ofƒ?§9”æon(à¥!”e‡‚@ ê÷§ø|É.ÏéåBØÜ ‹“fvP¶DˆñGešÃRõ! Nu€8@Ȉe‘4Ö ËÕ)ŽHÕǺX¥þ˜ÚxBg5ØãMÎD‹›ê€ð1¼!ˆ^¨)µ¡5£©=«¥R ·­;¯½¯°£¿¨{àdß@Iÿ`ùÀPÁà¨`xL<2.ÃgŠçfd§f¤gfd+3Ò 3|¨ØW'*ÖF‹/ å¬÷%_î¢_n½Ö~ìfÛá[m1÷Úö?hßÿ¤sÿ[]žw|Òûd ññëþpò­á̫×FJ.ŒU­ŒUãT^«¸8Vz >ïÏZëI½ÖN[oŽ»>zÙ»oͲó‚&ú|ét vªŒ<]HÁåO®§“ÜI˜ $iÈšD²:„ˆÃm,¦%Hÿ3±æâ¨žêW‡¤¯OjŽ-Ú¨ç|ÜKõéW[sovßì-»3Ts¬"àÁ”_ÿ©¾=ªù_éžo­]—Í; F5™}|Nk1-rÜšp@¾g‡hG4?š"ŠŽE“%ÛHÊQê×¶évc†7I–½dç>2îrã12ø¿3ŽÜ›@H¢ RÉàÿ1yœJžH¦’È“‰hÍÏT,6uœ ò=5CîÇåßù:Öú Ö¶ëy ›<„­±·ßªÄž«ÉßöPþ² ûé8öoKØ'k¤ßßÚþâ1Úó…†ú?Dòùµ}Äøøÿóÿ_~åÀçï‡>{çȽuôwOÿêaìÜKøÙMúO®r~x1å{+)ß=úÞBÑ[3E&‹î•Ü.[¬¼Ø_½ÒWµÜ]¾ÐU6ÓV<Ñ\0Ú;Ìùw9R­¼°‰Ð1AþNH Éß J$Ö·lŒlÔ1ÁÿË+G-À¦ðÑ‹G΄§_Áö+¾ðPËéa=½ÞÀ!ÍTˆb"ïh8IàC:Hþ,|‚ që,r'¶¸<6ü_4ðGþùûÌHþNÍ¡¡ÚTT«’f‘ÓÍwR(ø©`~½8€šЂö‘ù"þ×Õ$þ¿üZ<+­27S2*øì9Ú+þgzÍlŸ…ã·q¶Dêÿ°7¥Áÿ…ÿ‰ÀåOÛÌiñgþopg†AK†ß”îÓ§{´©nMšC™l“%[ê’MbžA”ªã§ª«“••ɲ¶¸E;ÈŸŸ‡@¾¹ìZÐ>.bˆa6‹Ð>IæÛ+N¢…Cª–º”…v”±% ùIº¬˜.-¢U—oø¿fËà¿\ÁF3¿z´æ‡¸ÍÌð…õ¡b‚pà$~V±×UàvØ­¹f#Š€Mÿ3 ÿ–ŔƖėŕV&BGPU“T[›„"@L—Ô1ÿÖÿ›-@úfdlú?•ù‡âßëÌÿ‡½Yàÿ†Ph^òùõáìp(+FrƒÁ´@ Ùïç¹\Àåç8}l»‡iuQMö£-^g>¡1SŽ* GúÃ_ =A®9 (T‡™âI„:Å!¹ú¨Bs ~ºÚtLk9a°Ç™œ w’ "ÀGuÞ0+ÐÈ 5'×·¢hlËlnËlhÏlê̆,hïÉïì.èê)îì-íê«èî¯ì„¦€?6R3=Z³8V{f¼úÜxÍêDÉêXᥑÜõ¡Œ«ýìë=I7:ŽÝnݯõÍ­»·¼ö´uç[­;ž·í|¯mÇûí;ßî>øV÷‘§=ñ{i·ú8WûÒÖúsÏ Ÿ(9=T œ*Y,ZíËYíÊXíH¹ÔÂX 'œó=gß¿¬{mI¶m‘5óÿ³õÐufç½þþÎ9²˜Y‡™Ä²-fÆÃÌÌ ¶$Kæ{˜âÉPf2ÌãÉ0„±p›{ÓþoÒ6i{›´ 4M2ãÿ»¿-Ѥ]ëYß:rÛË?¿÷}÷þöž`Þ0È:wŒµÕÌÈʨ°yxÈÉA62ò&># Ì|Œ•O9 ð@‚ç?xý·­ö£Ý©#ç–J®5ÕÝâæß–?”lùòj×c›½Oì =yzò«¾z­ö«û¯ŸÑ~ywáKÛ³÷­MÞ»5ØÑÚyjNµ9$Nµr‚¢Se¶ðÀÿ,JÏb˜ XŽRà­d„ªP¢Žþ_g37¹Œm>ßí(a\#Å'üà—|%ýªëú¨7|Ô?üÏ×bùŸ¦å¿]‚ý¿]ˆÎU¢[ùèñ®ü–лê»æ_ވþþOýþ«ØÿoT^}§¯ü~Xsõ£Ú«×öaÃgôZ=ª¿úvøÿÓ·šþøç÷¯qó2ÿ_ŸýüiÙÿ}Bõã/·ýèÁöïÝ×þîÝÃWn|õÆ¡ç.ù¿ùõLáŸ^¡ùêð?îÀÿï×´ÄÿM¿ý›—y¿zAð‹g¤?ûŠú'µþõí?¸¿õÃ{ß¹½ïõ›ú^¸nð© Ã_>3öàÞä;c·oÝ´9zim–7È+ضåß’GY È—çäºÛŸoÏ+¼ Êà’2¬UGtÍ1]KÒÔœ80L¯Œêð„IUØÿfö¿Už±É!€e· ÿ¯ùÀÿŠÜvÐͨ”†®Ûç°ã}ÁÿIánJDäŸÛz°@ŒåO¶­‡÷Y ‹VC’• x9,ˆ䙀<íWDþ@Ô‰ýÅ¿ß,óá9?žty´Rhy\KPêKhá‹ñ´g^b›•:f…ÄüŽY1àš•ä8ì¯FB"ÀkÀ?mÀ¬ ZÄÿy™Ÿ•AŸ¡wA$ÃÍ´ÿ[ˆÿW’í+éŽÕLçZGÀZæøs¥oc¹w=ݽš<¾’8Oÿräh&t4í;šôt%œ]1{GÄÚÅ¿O×âÑ€ü[ls-–éäZ;ªZTÎ÷Éhóãíý³½ª¹>5¦§ùÕÂ~# ^êo¦§=JÓˆÚBWûΩV÷l«w¦Ù7ÛâŸoöÍ©½³*‚gF霔ü§'ù³ÓÂ…9ÉÒ‚”øßli!Ãð(ÒKôAåò_YÝX›X_p dÇé…ˆG‡ChŽc9ÿƒêG¦$c¼¾ÎÀŽ€áqÞø¤`rZ0=+š_ø<ÈÐ rä¿ïÿ?‹OW®ø'ßxôX*Þ ò_Nwÿï³Ü@ñŸ“6ۙɴüiÿ·þW¢Rð¿7,py®×éç8ýM®›àîéñ³Ý¾&—·Ñéir¸VGI‹­a¿Mp5Z=lâøi}a &†€ ’’“HfT@"­L¤Õðe<«ŠgšÙ–D¶5¹Ü‘Z> dV¯®?±yüÌöñK;Go9Ùuç^û}§Ú/ŸR|ù”ü‰ÓÒ¯î ^Ømxu·êÊnÙ»»Eîå}´Çøø$ú„æÛÔ×·Ð7¶ÐûÛÅïn•¾¹YþòzÍ3œÇ6$mªîÙh»óÄÑÛ¶ºoÛê½}»ç®­î{6Þ³ÞqïZûÝåíQñM~ö öÚk4eg&óOöç­µSi%Šˆ(˜¿i«ÑB5š«F35hºÍÖQó Ì…Æ„›iæ°l\¦KÀô PHJÅT(ÙŠ–¢~j‡ž]ÔWÝlk¼Íø?¡|(ÛùðFÏåÁË»ã—÷¦¾´;ýÐÎä›ã÷®Ü“¼=Ö{“¿ë¢­åœF~rB¸ÑËI¨j<œbS9S_ÈÐAÚ<´ÄDZ&ÒçaÌÈZ„\¥Œ@#RɈW£tc¥­7¢mÚå¡3tN@]R× ¨kyèÚ¦¼ Ô¹zt¶«!e?µSB($•?µ[L¯A· ÑåôÒä‘·]è›)æ_dýíEêçwR¿üã×O°þëùâO_-ûôJ9¾ü÷ƒÏý÷ÿà/ëè`tõJÃßć‚þîî¯^àý˳¢xJñÿ=®þñå–¿|°ù“{{ß»£û­[z_¾¾ÿé ž}pwì®­Ñ›7†®[=$ÿ@Ǻ§eʼn7óÄÌj?¸ Tò§]'Åû[fî9¥oNXPÕMKTÛ×C ¨á‰ÑªcUL«HèUIƒ*…ÝÈ÷#À&Ï:åY—§€O¶‚[zGhXºÓ`i¯…¹×{ɆDøŸ€A4;àøŸàÂB`3,Øaà'Y å€h9 _È2^iÚƒ7¦’NE üo—ÍR¿QêÕKióãýœÄüöy‘mNh›¬3ûŒ€˜ß9ƒ!æÏ} %‰gIìÅ3ü³ÿû,²€M÷ÐÒ¯Q„Ê[ö(#Þýó”ðéÙ!ü&r*ÖœŽ·d­Ë©v «é£tt¯¤Ž-Çfc]˜pW&Ô™ t&= w'ÿ ÿ¹öÿöùfël³qªY7¦^V,(fûä3½²Ù^åLb¦GIû¿e¶w_þ˜^åB¯ ä•¿qDaSYió{ð½mÁ…öàbkh¡%¼Ø ç›sjòôÍ(AþPüÓÃéÂ"Þüc0ªÈðßã뤇?=‰ÔÈ*ÿµ1ð?GÀò}‹úžÅFÂÁA¯¯üo2µò¿ˆø¿˜38ÊåŒâàMÍçæÅàH2tÊù_þ´ÿ÷#ÀÕá0rw€ÿýÞö ¿üŸˆK'zû%ÛMXÎvg³G——­¬¥‹ÿ6úÀð–4m~ZþªHRŠË±ÿ#BÀâ‚íišºÅ~r»éÙíÚ—¶Ê ìïdþG»¬of~ç4úö)ô=ôí]ô­ôí-ÌG'޼·žwe¥ð¥•²¯.×>¶Ì}(+¾+«¼5ÛrórÇM+]ÀÍË]·e;nË´Ý‘n»9*½ÎÇ¿ÖÞxÞX³;[zb¸`¹‹U"¹£i«Ðlš*Ccåh´‚©¤Æ*ÑD5cªŽ1S‹æê¶‘eääY9,áåSA^#NµPËhý8u¢Ÿµ3Á:;_|ÑPy“­þ6÷®°äž„êÞlûkÝ÷oö?pbè¾ÍáûÖGî^¼+Ýw{¢ûæÐ±K®öszù©9ÑÎo­»)®¨p5˺þ cÌ#þgù˘¡rF¤%ªP¦­Ô¡µt¢ ípÐi.:Ë¥Îs¨slt®áÈÙZêt5^í=EË»mQ›èD>:YB­d^ÏfÞ§FO 7YïÐwW©Ÿaþô ïü”õÛ¯æÿé•ò?½^þÙz©÷CšððûùÿÓ—Ôÿ×k ¿{…ý/rÿßsŸ?-ûéÊŸ<¢ú_«¿yßÑîìúÚ-]¯ÞÐóÌ5ýŸ|pwäÎ#7® \\î?›êÙ‹Ý u®ûZ—]ê´]ù•Pùƒüé)‡ äoŸ–9hœ3rÏŒÂ;«„ìÄ:ªÅ@B× €ÿ!Àÿû`RB4Ë“fiÊ"2 ¤@f?d«ùj@ U:Ôêk!ÑjOCl„¸äÍ_ûK‡ þóŸ N„ö嬰üW@þ>qÖHAþ)·4é’$]2 áQ‡ OmkÂÐÄ4­Ñ%\ @=^j>ä<üRœ ÈÊo8ÚOög3à ÿõõq`s}’@üO·ãÐ$ã£Ñð0øÏÌàÿæ¹9ñÿà8¿” þ§#€ø_þŸ™‘3üé%`¼éúø¥mô…b9ðZ0~Û‹ö?–g(õg2v<›ê[Îáï×ü ýÌq²à þ§ÇþôØßOO©ÁüPn0&ƒâäì óˆÿAû¾×eþ'˜à…ã˜PŒŒB°ýA¶/Ðäõáp{]nÜØ]MŸãáà,ÿˆ-†?" Çd |ìü˜,‘ÃÒ@HBð¥>¿ ðú䞀€Ï¡ $Æ'ëî%8—2M·.7ݹÒð¥µÚGÖjžÚ¨|~³ì•Í‚77Yì0¾yŠñýsÌžcüè,úÁ)ô½]ôÝ“Xþß:>Ù Þ[Foe˜/g ¾š(½«¹'ÒtKHpCXzmTqM´ùÚXË¥XëõÑÖë#êëƒÊëüÒkœ‚³¦¦½Åê­©ÊÕþ’H3Ã%DæF¤©BÓeh¢” Ô_Šú+Ðp©DcÕÔd-…zJ×Ȱ°™vÓËg†%¬¸Œ™T¢L3Zíbnöä¥ðBÀB DÀ ¶ú[½¼;"²;ê»3w/wݵÒÜ™í½=Ý}[âèÍÑŽëÜ×Z›Ïhå'§›œåŽÚ°¤ÌQwÄTJé ±ü—èúü¿@at ¶B†»„ ”0B¥T´%«©L •­Ã)°Ñ€¶ÐÉ´[9]“¿WÍÜ­B;h«m¡|´~mäáú¯„º¶ž‰}è@ÏO¢w­ÌO’èG[Ôÿ>~v+õ/Pÿñ8ó÷Ïý×ËeŸ¾Yùéת÷ýÿQ-øÿêGW?bã/‰üiÿã-@xhÝï_­ÿíË ÿñ"ç—Ïóñ”øgOHÿîËò¿yHö½:>¹«íÝ›Û_»ÔõÌùcžê}pgàŽõWúϧºAþ;‘£þ¶UOKÆ¡L˜å!ƒÚ¯Åû¡ìÝY'1¶)™mBjŸ”9¦äîitú¾©úB‹jøçˆišè|©’5øCûº’i;ÉRNYÚ%Íx$Ë>)Ôç´¢…Ë~>°ä"`#ÄÈ™dó'açÛñÿf¿„Àš_ò²^QÚ+N¹ Rl~§Ì·Ë€°M9ÓÅ?øÙq¾mZhÀ“F ا„€cZtØÿnZû À± $þwi1ƒÈi»L·YêµÊAþ^À!ü.ˆyÈ«ú•¡€"REÃêXDª“ñ–T¢5}(@þÙtW&Õ™Nve]Äÿ‰p®ü}] ogÜÓwuEí]asçAñòWBño˜TiFå‹Cò¥aø®_€ÿiöç?óýÍDþó}ŠÅ>¼;H?Òló}×L‹w¾5´ØÕu&ô]IÃÑ”©+c:š5wicGÊОԷAúǵ-Äÿó³"Rü“ÿPü{}ÇȶŸtjýWÇסìߘ ò'õ?ÈŸÔÿ©ø(Ôÿ‘ÐÇÛc³uL­KZõì¼lrZtØÿ}ClxŽŒqÇ&ø“Óðÿü¼”¬“úüo±6ÓÍ´Ù­4´ÿ]ö6³Íëj§W~éáOä(=üéû¼ø§W{‰ÿÓ)¼à{°æÛB.Œˆ§Tqºì êÆòJAþPŸƒÿipÁÚĹ@0Á %y‘&çB„"œ`øÏ"€ àô‚ÃËœ>¾'æƒù‰üƒàÿ()òe´ðž€Äãy¼Àí»=R—[êtIöq ÚAß9Eýà,õÃsè/ΡžFß;M}g—ñ­Æ7¶Ð××Ñ{Yt%…^Nä}%Rø°¿üNoÍî¦ NÞi§à”SrÊ­8ëQžóªÎ¹åçœÒ³Á)#wg©~s¦fu´"q¼Ä#g™8h±M—£‘"4P„z‹Ðñ"ÔU‚Ž–¢¾r4Xކ*ö#º€¥z|Ç:ö?åÅ¥¬¤‚™if¬¶3×åoà…€½éüs‹¥×*¯·7ÜäãÝ–ÜSßšh¹%Ù~s¢m»1Ür½_uÑÖvÞ :½ Ýlô6e[k¢RgMí†6iXÔaÿk)¤g"óä,¤ÜEÈ_L‘ˆU(U…²5hµ­×¢Í´Y…6ËYë ý´^ŒV ÐJÊ2Ñ mA;Eè\º…Çz°%ï‰Aôª}ìg|‡\û~þüê2ó×OùÃK¥|µâ³+5Ÿ½]ƒçüÑ|ˆ‡ÿŸ}ØôyñOûÿjÎÿ¯Õþîåúß¼ÄþåóÜ_<ÍÿÙâ¿ý²ôoç^õ'·)Þ¹QõÚÅÖgÎu<ºwìþ­ÞÛÖz.eðnÏíP;È?ënNÚUxæozµÍ®E¥}Nf‘™§$æq‘y\l™XÆÄÖqH¹sRæ¢S"À?«.¨"‹Í$pˆý§@ ]3Ý(FU¨ )7É’VYÊ&ƒ ý/'ñIÒ^! ?ëd}<’ÀzÐ  _øŽ0ÿ!ù 6|Ð>°êPùãâß+_â°üã –¿M „¬’°YÐK|Z<·Áÿ¢ü ¹8, ^ e°Ï 0‹BǒСV½Àf:Lb§YⲈ·Uⱋ݉Ç)õyd~¯<àƒ‡ƒJ:”¹H&[S©6B:ÝIË_•Jt¦cÉH;ø?8÷ƒÿ»b®.\üÛ:ƒæýâß± ¶Î*,3jã”Z7®\V€ÿ‡”‹Cê…Aóýjšæ²Ÿü $[ƒô#*˸Ú6Ùâ›m Ì·E´qÃÑ´éxÖz|ÅÚ½j;¬Ù+Ö®e ΂Œ©²`z’73ŧ¯S‘ãëTLÍ[»ÇÝ â·}“ zÏÏòè¾ÿ ðpfŒÿàÿxt8t»{¬ÖN½±mQ£š™“NLЇ'…Äÿ ÿÞÁ¦AöÐ0Z€éiqÎÿd 87p#`i°ÿmødQ·£•ø?èŠ…Ž‘áÏrz“îålÏÊ2Ùí‰åŸ‚?ð$˜¿“ÞóÙFߤŽ'ÕdêJ*€`BîI½±7"ô„žßáC@ñO›Ÿ€üÃ)~4‰‰F J"€qü®ÏÏ¡S€ãò²Ý>ŽÛÇœ>¡Ë/p„´ü%>Tû¤æ‡RßëƒùÝ^¡ÓÍwºÄ§Èá„§Øn—X­"‹Eh¶ðÌ&ŽÍÚàµUÇ+®’“¾‚kù×… î‹æ?Ï4uä™lÞ+«Ì+Øÿß:M}ÿöÿÎCÀúÁÖ÷N±¾}’ùŒOÖÐûiôV½e>éË{ÀQx«¥ìCÕž¶vKÛ´¥ãÐ · ¢m£xÇ ‚/·9'æצj³#UÉÞ²`{¡MÄÔ4Òò‡š¿õRÇŠ¨ŽbÔ^‚:JQ7Mo¨D#Õh¢†ž5Pи¸ ¿0´)%#ÝÂ\îÈ[>ŽÖzÑæ0cg2oo¾è¬®ü‚µöû’_x]Pz1(»T—üÊ‹ù5n1Èÿì’loF´=Ì]?^ŸVW†xEŽJ–©˜a(`êŽ05L惵HQ ÁSKG€lùˆD@°Œ —¡p9Š–£DJU L9ÊÒ,13(]€RGPŠ…RJSh™6óЩ2tCã^Å‘'z¼0ËxÛ¾“¤~ˆÏ|£þþ6Æ¿<ÀüÇó~÷LÁ^)ÿãëPü×~ön-V=Tþà|<üiüôƒ¦/ Þ®Ëùÿ¯Õýç+ ¿y©ñßžãþâ+œ¿\ø·—Eÿë~Þwî”||‹øë¥¯^T=sºå‘“÷l½y¹ëB²k'ܶîkùÇmêˆY4(|Z©cQe›W˜g¤æ)©qBlÆ$¦1‰qTl…ÚÇdŽ é¡Pá.`¡R€‹€˜VA/Óåû˜Ä ‹4n•%ò¤CšrJ€¤K”t “n~Ê#H{x/?³‚U?X @H^ç%3ÿ!!ÈÝÏ[óq‰ùW¼‚e0ƒƒüÓn1ûùÇlÒ˜UD-â°Y2IÀÿ^ؽHkœ6?‘¿e’Ž ô€@ä‡EóÛ–¿]ƒùÛt"‹Ž`7ŠhV“Àn9m"^·Ô‹ù’û}Š@@ )Ãa‰(c1u ¢@ñýýM̺›ùo—üî©üß¿PŒïy¹Rýé;ux‡çµ´üëèáãÕ÷›pGðþüÿé›5Â÷BÖAýÿë~õ\ÓÏŸdÿôQîÿ~˜û—÷°¿y;ÿýøo]¼|NöÔ®âá­Ö;×ڮϴŸŠµm°ü“N|¤ƒ×€_nµ/Hͳró´Ì8)ÓKtcb݈Њ #¢Ã]y§d½@h^^PFUá%F#Ãhå=&jPD ’˜Q£#€®ÀÅq‡(î —€¤@Ú-È‘ñr¡Xõñ!Öƒ|’‡Ø—ÿF@¸ßãã¯xE`þ,ü”Kæ'ƒk~b~Zþ`~ b…L¢ Qì׉Áÿ®ìóÃæ7OðGIÚÿ¹²ŸÈß¶$°j…‹NhÒó³AXŒBð¿Í,tXÅ»Èé»]RÏáð+!B!ùáˆÇ[ ±XK,Ú´æ.¦ šcGÄÓrµ…ííAk{ÀÔ þ÷èš]Dtd "ºÝ¨J;¢\T.( ÚŸïS¼€_Ó)ˆüí“*÷l³o¡-¦kK;¡ì_sbóoyú¶}½»¾>`Ïßœôöîx º!Öǧ'9³Ó¼Åy‘^+ÇÅ¿½Šÿ€ÿ8ø?íO'°ÿWèmŸdϘXËŽÿÓ‹¿cIzøðõ;Ç÷ý¿¨žš“OãýÿCcÂÁQAÿ0o` õÿðo|\85%š™‘@ýph#(Ž’Ff£"Àam!õ¿ÏÕîw·½8róŸLú8‰úU¯ã©äÑD¼bß ÿ Ô@4®Ü'¡ð%dÞ¸ÔÓæ€#ÀáùbâÿP’OþùÓõ?Ÿø?äÑþçÿqÈßú#ò¤¨ e?T¬½5±îªPW™·µØ¡,0 Y h² •â±OWÕVˆZ ‘º)K²µ–0ZéFàXê©BƒÐÔ¡ùF¤o‚¹L¿˜–1¢J¼4Þ‚m(Ñ…# Ó‹²ƒhuœ¹1[°±X¼m¨:i®ßµ±O9¸g¼sÞ紹鼮éìbãÙ™†½ÑšÍãe«-ÅqAž¯9Ë(k!ØGéL bæü¯£°ÿu·$ìù”£9‹«gà-DÞ|äËG#(ÄDA& 0P¡0B1ÄL#j•Δ¡›Øè5ó©þ#//ä½ã¤¾•BAøüOwäýòÁ¼ß>‘ÿ_ÏÿOþ«ñTÿ|ÚÛõxÛçGÄÿ Îük?/þiÿÿáÕÚß½\ þÿå³ÿðDÃß]núñý ?¼³î“›Øï^l|ýûÙ]Þ£›¢{×d·dT’Í[AuÖ£Œ9TA‹Ê­WØ—–9¹aJ¢Ÿ”ê&$Úq±fT¢¥Ñ`ôC_ˆÛA à™’“ÀÌ)€À¼2¸ B‹r ¸$BYP'é±ÿÃFIÄ$š÷%µ‰¢6AÔÆ‹Ùù$ÀÛ4|€´¹‰Ix©7(¿`Í+\õ–Ýâ¬K”vÒaÒ)L:Ä4Ò˜]í[%‘óÀÿƒÈ§y–D´ÿÅ9ÿƒü æ:8)ðÖ ì0?`]øæ%¾E#0iø£ŽGÀA)`â[-BÀnŽWx}r¿_ *p „Uለ‚öã­ðóäJz"ÿ¿eÿª|CMkÈÖ´¶â›(-^½Ú£S¹µj—¦Ù>-€Ò8©0Lªôcjˆ ½ˆ¼@Ê~í~)Ø4ª´Œ«Sjº¦=¦ïÌXºVìG¡àßööŸ ôï΄φ‡€s‘ax—§ƒ§ð¿B4€üçgšE øÖnkq9Û¡øù»cáÞdl “ɯdÆrÛþÁü´ÿÇW øOâ? úý¯¿·Ïáè6›;uúöœÿG&ðû¿àÿþà‚ÿ'&D¤Xœ—.-ÈÈÒ3í¿¦WÂo G’€ ø'þxÚÀÿ±pø?“ìM§ æó÷¹Ó~@þ8y£Í@8ª¤‘<1 Èß9ÃBÀ€ÿéF@à‹Š Q0) 'E‘´0œ„*ÿp\‚\ '?Dþ9ÿ{¼xìþÇò‰rÚÆä@.z"1ü6 üA)ñ¿üoãmØÿF‹À`æëMŽ?¿ÈžoÄGÌÍVèæKíÚâ¡0e>²aÏßsÞècÜdÝc>’b>•e¼¸J]ÙBìRŸœÞ€ïgYàÿïîPßÜDŸ¬2ßKRo„Ñóæ£fæ=óÌkG'Ž¡t3Úz$ØZàk+ñw–ùº*iÊýíåÖ2¯ºØ)/0‰ò´\¼±g´/øv3: ©ÖBJ]ˆEHQ‚eHYL©‹(hÚËÑÑJÔ[FëÑL#Zb##¿ Œƒ“£ …›ñYÐñ”ÿC™”éGÙ|ƒäÊláÚbɆ¶ò„©vÛܰgm:mec,õU4åæÊÎŽ—žìÉßlge%Œp#òU#g)žóƒçµˆÒ"&AG1àKݘÈÌÄ)`ÉGÖŠÇ=9Y y™ÈKa#ˆ˜QÄÊP¬u:Wn G;XϲÞ4âÿ{ëxòÿÓѿܛ÷ïäÿçÓz© Šÿ«_«Ã»:ß…j¿ñSâ2ùŸöÿþá5x@DËŸ¾¾ü/…|¾þ_Ÿ®ÿÙcu?y°ö¯î®ùþ-U^ßðÖùú—öê¾r¢ñÎmiÁ¥„ôTD¾êÅ«Ÿ‹ÜmÀöéçdš)é¸daTLXš1 k†Dû0,2ˆ-cb²"ìš’‘ðѽ€oVøçdy¹AX”|K¿FÐÊ"ziÈ †E“0lD¬Âˆ•°ß8ø„¤S€SÀÍ=œËô8ˆ …Öüz©WDf>+n>”ýØü6~ÜÎÛ„4b?hŸ¦µ]š Qè× ½¡kAà˜ãçÆþ_ô?7æieFhÄÿDþ¶%¨ü… ¢}ƒ†¯_âa´ÜFhŒB‹YØmbˆ»j.±Ë-q{¤ü[öùe "R’'‰€H´9Åò‡Zðµ ´üƒ¾æGM.¦'×Sâ[)雈÷/&Ó©  °/(IO‡Ûº1hØÿƒ2â2ð‡Êß8¢°N¨ÓÍÞùæ°¦-aìÌXo¸Žmy{@û§Âƒg¢ÃçcCâÃ×$F€k“£ð„//ÄFÏÆFNG†öB sÂ¥±^'µZÔNG›×Óô{sþÇõ €š53B?Ç–S#Ù½ó?2 —¿zl¶c&S‡V×¶¸Ô<=¯š˜‘NJrþÆäü?3)™ŸÁwDBàs‡–ä:"F=¾JÞjj¶[p¸éùñÈ×þOÆŽC$øÏT*ÿãä´Or%4$o8Ò¡Œ7U†åôøòÇÚÀ—d!À“âPJN‹#)1Díá¾ü£<ˆ”ý"ŽËË Hýï KG˜ž*’ð›ñä^ˆ—Ðáà›B“]`´ VøIÏŸ×pf§fkff+4óeVMY@_’0®ÙŠvœE7ø˜·ó¾”b=™e>·†Þ8ÞÛEžBŸFß<…¾C¯ÿ~úöúæúx™õn‚z=H=ç .kñéÍúÐF;Š+QPÁt˘Ù›,ߦ( Ø%›8ß,`éxxWÿT5)Gý%Œî"Vg!³­ˆÂùËKiŠXò"¤@kÕ-@ ®GÓàePN Ó'§*jÆDÇ;ñYÐÙnÆJ/cu€¹2ÄXe.OYž)XY(^[*_×Wmk 8ei{—KŠZþ5¸ò£úO¯Õ¿¹ú·/Týû³µÿüdÍO/Wÿø¾ªÝQùíKÞ¹¦ö•SUÏlU_^­½+YwC´éLwÂ+J8~žQ…‹3¢9øç3*™Ï ‹æ†ÅÀìh~"@²A0$\Bè†úa!BzEXâ˜8'¡¹'1ži©wF曕zçbÀ=/ö,H¼‹Rß’,¨tâ ^)2`‡3?dæÒ€Ü Ð`‡Û9 7é䤗L„V¼x(„çBôj/øgÝ0?° ¢>³Š¢ý0®öñ/4 B4A?`øt÷"ß9Ï·ÏòlÓûž?ä@"ÿ íË ŸD€eN`ç (ûÁÿF¢ý%žNƒÑ.±uþ7@#`âƒÿ­V‘Õ†§µ¹8H1‰üÓ†ÀÚ 7c‚j0 ùÕ  àUàÿ€ _Uþ÷™•~“ÒkÀ/2{uø¨:û‚Ü2+3MI“’ÿËÈq=€fPŽå?Œ|Aþ¾zàoêZ¶÷¬»zOúÀü ÷óI,ü‹©‘KéÑë³ã×eÆàI˜¸63œOŒÁ·i–DZØhCñïvu[Ô£¡¾Ïëðz”8>d“ƒð#XþÉáL|„>ÿgüï÷öz\ÝVëQ£±ý°ÿǦ¤Ð€ÿ‰ü‘aÁبhrR<;%ÿÏÏŠé@`–ƒéCAÕàrÕ—ÓªöàP«ßÝ þ†:Q¼ u%âGI À‡X´“–?>ð™øŸLÝýA1½åFä ‹Aûö€ ÇÿÅÄÿtˆÀÿPÿñæŸ}ÿÂüœÿ÷ÇþxóÏþ¶ˆ€ƒù¿üOEdPö“âÿ  Pá. $D€Ñ) ýÏÿëÌØÿsKlðÿô\íÌLÕâ|…U[î7”%L%«¶’mWùu~æÍÁ¼»¢GJy,Ãxv½²‰¾¶ƒÞ‡ØCŸì¡oîâýÿßÙAß>¾¾†>HSoÇЫ~ô´Ÿávó:s ­5£¸ÑéRf>QëùГÃ0p™|Ð4âÉÿx,ÁßcEÌŽ"fK1¶=ñ¿¤ÉŠÁÿ,E Õ\NµW¢î4Ô@M³‘VÈ´HYe^°åH¤•ë`$23ݬåî¼ÕÞüõ¡‚áüµ±üµ‰#«ÓPÿ¯.–¬j+rþ?cc_pò®qñosßæ(¾ÍR|“¦àº©¼k†X§2·TÌ…ª‘½™þ§!þ7PLƒÊý …7Ásÿ2Ó8h ¼êÿü*ÿo²ÐÅt?~á7ïÍł݅ßÍäýõ)êo¯Gÿ|ã×ýþ©’Ï^,¿ú&È¿–®óÙW?ä@Í ÿzðÿgï±±ÿñä§æsÿ¿^ òÿã«Õ¿{±ò×ÏUüòéª_<^õwUüõÝåß¿µì×¾~ºüùíÒ'VKHWÜ©¼Æ_·íjÌØÙaסaëçØ‹Sœ©Îøo|H86 šàO g…Óxâ/ ÀÿøŸŽ¾qX`á.`LdC ìÁ¤Ø5%ñÌÈÜ3bÞ!C㢷Çû>0 ÿ`ã ‰@„-¼ˆžœˆ…µrišb66¤@Ò…I¹Ùi"`ÙÃ=ˆ€ƒÕ^?íä%¬¼¸…3ó"è@þdÚ/ øØüzÆ ðjù®žcŽg›áZ§öþÿ“ÿ¹ÿ£ÿ-s<Ë0-ò ‹\@»ÀÁ,qÍâçòÿÜÿ!ÆÊ?ûÐ;÷ÄdŸ×'R@µã÷©‰ùù_MûŸ>¹Ô¨Ø?ÅB+wj¤ö©uNjž‘B˜&T†1…~D¡’öÝðþnûT‹w¾=¤íJšŽü7=ýÛþ¡3±AlþÌøÅìØþ†å‰W&o^Ë1}ÓêÔ k3ׯN_Zž„o3-I,Z™Õ Ä3×þQÿDþéø`–ö?ÔüxàOŸù°’†/!èó?÷O~Üî§³‡ö§NÛ±¸Ð27«š™VNLÊÆÆ%#£¢‘aáðMŒŠ¦Æ%“Ò©)ÉÌŒlvV:3'[/iÕô6$Õ¡C¡›íjñ¸Z|ž¶ ¿#슆»âÑc±ÈQRÌ C.´îþª~%ùë G=;<"‡OL#tøñ)m® ÀÂ;üQ^ †G=±”ˆ'…±„ çG£‚H„ó!ÎÁ†Ÿ&·Þêéf[]|æüœøä瀌à Ê}!…?¬ D PÑý R)Rûü ¯GævI¼6¼ÇÌléÍY¼h,è4u3óUs‹5‹Úz‘mµr<vÄݘô7m+OG+.%ËnÏ=°räѵ#Ïm¼º]pådÑ;{ïÊûàëƒ]æ;Ì÷7Yï®0ßÌæ½c~ÕËxÄ̸s]B»G©Õf”¡€¹8ÈÖˆŒ ÈPÇÔÕÁÔikó—ªóªXsUÌ©Jj¬Œ ÐÑFg øŸÿË‹ÁüHR‚øÅHX†¤HUƒ:P/‰Ð¼Z)kåê¢üÝŒH3ÚψP‰A*9ž—š`e¦Ždfò3³©ùâÔRiR[žÐW¤ŒUk–êm{åYˆ9oÙ­¾’»EûŠöä=ìF_²£´è¾tۺ؎óO× @!²Q sÊ„˜ t=Tõh ­w@QfN=ãóéö?|3¹h<ùEÌ$b¬1»ôiÏJÆ3è -úzýh_õû·Sÿúúí“ø´¼çóí:¼É磦O?á>û˜ýé‡ìÏ>d ½À{Ÿ¾ÛpõkMW¿Æùìkì?]iüã› x£ïü|¥ú×/TýÛ³•ÿúTõ?>Zõ“ûËxGù7n,~ï|þ;øòå‡3…·ÄJÎø+6Üu)”k_hgùSÜÑQöàpÓÀ@Óp_Óh?{´7ÖÏŸèÃLõóçpÌ÷ !H Oí°X?*ÕŠµÃBÓ˜ˆ@¶‰Ú&ðÒ€mRB^sLKìSx¢NÞ™µÏœKB·VìÕBŸÛ~3#—ŽNÐÀ9M`ï°‰1³#LÔʉÛyû½€‹Ï´[õŠèíâ¤Oà¢!8Ÿ”÷û#&£7ô“–?=ð7H|ý¯ܵ„Oõ™›§yÄÿõ?ç0àë4Ç4C3Ç¥á@€ºy¶a‘­_h:DA«itÚƒ¾Éh`›Œ³‰ €ü VßfØÂýðHr8½R—OF¿¼³ß§À+Ť¡o«ÁëýVyîØj—NNŽ­ƒúß:'ÇþŸ–F•àãˆÜ0,3ÉL#RÛ¨Ü>¦pN«¼óÍm{ÒܱâèÜôÝ ÷œKô_ÌŽ]ZçƒçAø·¬Oݺ1}Íís·mîsëÆü-ës7¯ÍZur›^a7©ñ]ºî®€ÿh8ÔàÅßLbèóâ?;NæÿË©!<ùO¤âƒ ÿxt8øú\®n‡£û‹þWOO)Æ'¤£cbpþŸù|L<1.ÿOOKgf$Ó³ðÿÂ’R§QõêC÷Â`ÿÛ¬Íô. |Û»×Ýðµ“WÀ ˆÿ±ü÷ýßNV[BUäï•Ó+5’Ü9ÿÿÝÿž°à°ÿ£IŽZþ‘ø?ââmÿ´ÿqÙïe;èã€,N€cvr¬nžÍ#´{En¿”‹à %Ä€üý¥×'w{d.·üï°~Áÿ‹ú&Ð>9YZkh2Zxv;ÏëäD=MI?{Ó_¹®¸(»%]tßr>øÿ™/m¾¹[ôµSïžÎ{ï4ãý=ê½Æ;›ÔÛ«èõ4õB}ѾdF·Ï¢KÃhêÿ”V¢°„òð¥ ꑦ–Z¬B ÕŒ…мù Æ\c¶œš.GãehøÀÿ]ÅT{1C]Œ‡ÿ q1!A %©d(k¨¶FF/Ÿ5"Ë›Uç:ómÝ…îžÂà@al¤$9^œž(JOd& ³3E˳Å+óE+ ÅÙÅÒ´¦,£«ógÌ5ËÖÚM{Íž»ú¢¯êÖ`ù½‘ŠbeEË<b=îE_¶¢/iÐ=ãŒ[Ž3Î*©õ&-§Üy”1-ËDái?˜ )@ùûþ'€ÇD82…ÂþwRÈÃÀóÿ bÄP^1WÚ9‚ýÿŠùìó-úf ýåúɵèï`ýÛeôû§óÿôRÙ§¯W]½ľ Úÿ:—ø>ÿ_ý€½ïÿ·1Wš°ü_oįý¾\ òÿÕ3ÿò•ÒŸ?Zú.ý›»K¿wkÉG ß:Åxy³äñìèï®õn9KÒ–ê ®Þ1ß`˜aÏNpF‡†ûê{{ë{šFz9Ã=œ‘^.¤Àxw²]Ž€~a® )æ4ÐŒ #㨤€u\ا¤4bë”tJöLâwiøÎ%¾[+ôè”ßPû ðÀˆåOüOyà:8$b6.û«ô–¿ fãá~áÿIñy£¡Ç¿œ_OüqI=ºýC~ìó"\ÏO‘Q?77ÿ1³ † ¶q’cšâ§ÙðGgœåDþÄÿºùÆ/ROÈù_¯kÌE€ÉÌÅ[²-<:x‡ÀêÚ\"»[L8ð¯›þÁwÂÒþ÷¹å·œ¾¤X *|~µUNË_æ6ÈœZ™cIÅ¿m^–ó?ÔÿÆq%}b§Ì<*³ŒÉ ÷”*°ÐÒv¤ÌGWœÝ'|={á>ÿ¥ôðõ«ã7¬Mìksæö³wnÍîÚžîÜ^îØZ¸ýÄ<Ý tUs³ÛÖõÀ{ŒÔÿPÿÿ¯%àå |àääO<ü‰ AñïñâcìöãË1ð¿VÓþŸQMMʉÿAþ9ÿÃðÿä˜"`rRLG€ü?;/ÿëµJ¨üÉ]0ÄÿÖƒÛÞVµË¡†Àï%-ž‘ÀD°üÃÖOÛàÜë‘{ÜR—[À_Íþß”WD#Àå:íúˆ>Þöÿchù‡£\"ÿ`s òÎ/þco4Ùñ±oF;DÏê@ÀøÏÀí—çÚp>Wþ´ü.‰Ã)öØÅ6«Èh–h-’%ÚÿK¶Fßæ‡Ê_oá›m‡Sàsñ"^øÍWµª:+»9U|ßrÁ—× žÞ,|q«à½¢·Nyû ëÝÓŒwOQÞÞ¤ÞZE¯eÐóQô”=bEw/Q7N ³}èD'¾º%*§|ú Ï´Tƒæ*Ñlš*AÓ¥˜ÉRüªïh þäüßVDÑà *Q B T0µGÚšò»……£ªâÙ¶ýñrû`¥o´*4^˜®NÏ×./V¯,UÑT¬hÊWµÀж"««ù§MÕiKMÖV·j¯ßvמÔÝ­½7Q}9]õøråóÙòçÒEϧòžQO{ГfÆå9æÝy×µ1wT¦†áÏgØDe¦è©>í; ]ö?béâß„ö¿Ó‡ÿ”b„+NI!Ö*EÌG762ja>7ÊzÛÄøVœùÛèÿ\¤~~Ç‘_?Jýá™ÂÏ^©¸úfÍÕ÷¯~̹úuîÕoð>ý—¤Àgq¾àÿ+ ‡ýÿûWëób5®üŸ.ÿÅc%?}¸è'÷ÿèöâoßXÅÿk;è««%Åónô³öùSq@Sᘫю×ÍŽÔŽ ÖöõÕt÷Öt÷Ôuw×öoênêf÷°!Æz9ÐÌö fûyàÿKƒ|0ÿ>Ã<@;‡ ÈEÝ ÐL iø¹3Ö9®c‘çÒÜZ¾GÏóëù~x8ÐäüôgS@ÚÒ x½X·óAþôRŸÌöAøA½( ÒðŸŽçù#   xß>žäÌðsþÏÍLã\0ˆýtö¿v®á‹Ôò?<ë?ö?Álá­\“g¶ãÈ¥áp ÕaèñÁB`~Àë’Äü~»ÒgSxAþf)-©S'qhŶ‘uNl™•øŽ©eJežTZ'å– ÙÄåùÓ•¿© Ëßß¿<—¼˜¹quŒhÿþÎÜ]'çïÞ™¿çä½»‹‡Xºgwéî“‹À]; .£ÚiRÿ{œ~ÏÑ` ;êÿçÖÉ •åq€Þó?š;ó'ôúÝxå·Ëbé2šºtúÎ%MÛüBËôŒrrÿÄÿã#BÒäü-©ÿ :¾ ØÜF"À þ§¡#@å´« ðyZƒÞö¿-h‡ ð‡@+Yañ{TðGíqËÜ.)­YQîïMÃÇàçãSzè—¿Àÿáÿ“­þäm¯p˜ò÷¸dò““¿ÅÖ`´5¬ K“ÁÆ69ø—ÐêÙ]B® @`| —WîôÈì´üív‰¿ó%1XüoÆwÐkMl½‰ò7Ú„§ÄéÓïsöF þd¨ö|¬âæté½+Å®~õDÑ [¯í]9säísyïžg¼w–‚x{ ]Ù@¯¯ èézÔE=`dÜ6˺v˜µÛÍ\mc$TŒ€9x”©×ÿóUhü_FM’ÿp1(F½Åèx ê,¡ZKª†¼„—"Q9%ª`ÈjóZš ŠJ•SUšÞËPw²!<×[dgtÜwÝÌݰr6¬Më–Æus-°j®Y1ÖdÕs]ÆRŸ¶5d @Ý¥XÝ]éºË«µOmT>»YñÚFÙëëEo®å½žA¯„Ñó.êIëKy·cœ•Qk T¸rbáC ;ýÁAQèóF"Ï‚ )è!ò÷3XAŠÿ£¼žÿP§ŠÐMMÔí¬çFWLÔ7âüÿ“KŒ_Ü]ð›Ç|¶èê«•Wߪ½úAÓÕO°ö?û&ö?¤þüç*@ûÿOô ¿Ÿ¾Ñ•ÿ¾R÷Û—êþý¹jÿ?=^ú÷—K~rá_ßYø½›‹?¾„ãûÅ ôHºøŽpÁבUsAh©Ø>[©Ÿ¨ªë«è©êî®<Ö]u¼»¶ûx=í6tC½Øÿ#´ÿñrÀoªŸ;?(˜ß÷?oqˆ, €Å!nÎÿú1¡a<7¢™˜ÆùÆI`šÂÃsð¿} þwixn×kØ÷?ûþØð?4pú&A¬péE^¼ÚKŒÈ‰‡{ =¶½_+ €ö½Z®WË û\‘s‰~ikŽoÙŸüùsÉäß0ÁÕsðs‚«›hÒO² SÝTc.t³M€v® ü¯™­ç0Kóu€f¡ òÏù_oÀþ'À?Iƒ€±ó³CˆÁàþ¹ Hå °ŽœRü±C òó{,2·YŠš0H]zZþKBë¼Ð¯ æç¥BÜíûT´ébªî¶åªÖËž8QòÌNÉ ' Þ8Ståü‘w®É{÷"º€·Oâ­¡o¬R/¥ÐÓaô˜=haܹȼnœyºŸ±ÑI¥Z¨9ùȦ4õôyžh²‚1^†ÆJ÷ÁGýÐþ?VDu–0[KYª2¦´”–!a%CZ{¤™]Ü%ªèWVwÖ-ö5šF9®np‰׋ÒñŠCºî‘múä[ù‰€dÓ/>áánº9k®¦{SÆÎNNNÆÅ^v7ð7ž5Ý–m|x³á©íš—v+_;UñÞnÙû'‹ÞÛa¼·¾–Bo©lŒ'çóîb^jÆGzÆK—g@%Aà¢Xðp#ä¢×vá Þó_º”‡ÂÛ~‚ fˆÉ‚â?ŠýÏJ!´Ê@»…xóÿÃmÔs㌷ÌÔ7Ô_œDwãŸï-üõãŒ?<[ôÙkþ§‹ÿ«ßâCøóÇÜÃþ§¯}Ç»ý¡ìÿç¡ò¯ú_©øÅce?{¸äÿÜWðWw|÷¦‚¯)øÚ™ü—·ò¾’EwGË®÷ïX ãš"ÛT‰f´bv°v¬¯v §º§§êXwEø>w7 ÐÅÿ`{¸3ÒÏ…çh?{|;5ˆý?3Èæ¹ÀüXæàÿ%hFøZÚÿ$h„ð1\–y6øß¹Ä'þ§[žOÏþŸüç?´Éñ7àïÑÑÐ߉ LPísâ|z™Oäà~îƒG­î>à7àXÄ‹ xÏçlnåw_þÄüº1¶öÍ8F;ýOÐÎ4ig5³û,ÌÖùÿï˱˜£Çò7ÙîÄiÿëÍløÇN0ظ²ÛŽ·p@ÀApÐÐ{„¤P…à"ü±]á±É])>_Â$qŃĩƒÿ틟ûäO°ÍÊú4W|lQ`QÑ)¦æeGç†ï8ÈÿT|ð|zøº•±›OLüï:9 æ¿goþÞS ÷ŸžàÌðàÙŇÎ-Ÿ×ðáÁ3’à çz àx(Ø ãë}“1¼È›NfÒc©ôX"9’JŽ$ø´g0Ôïõõ:Ç­ö.“¥Ó`ì$ÅÿÂbë윚øŸÿ ýÃà-@ô. ‰ ¢Ü»À&œOäoÖ7&½°•‹ÊeSy¡€ðbü‡ð¹Õ^—ÊãTº §CêØ¯®ñÆ-3 D€ÙÉËE€Ãû¹ÿC´ÿI ;ð-f“ÝþDþN×¾üÁüô-` øþ/C#­køo@dv@I/Àí`x» «žàô(ÈøAZþ2‹] æŒV©Î&ÓØ¤9ÿ“Êßd—˜œ2»/âTX´ž‰ñ¯Món^n¼g£ö‘­Š§N–¾¸WöÚéâ+çŠÞ¹PðÞż÷/2ß»–ñÎYæÛ{Œ+;èõuôb=COø¨‡¬Œ»–7LQ燘[Ç©åV*,G.!øåü?QNÿGéâ”öÿ`1ê+¦Ž3ºJYàeŠ~)Ö°¤…m‚ÒyõhGÃlO“~ ¿eã×H¢fYÖ©ZóªO„Z¶ÿ¾Î<Ê*ýÛgJÒ{2½fR ½¥Oï½Ï¤÷„!ôÐ  X°Ð”ªv{Å^Öu×uu›e×Uwumä{Î{&ct÷ÿ]×}½×d’`¹ÏyNk-n_2Ú‰^Ÿ?Ø*h–ö4H6× ÉŽ!r†@O=o¸…3½‘s¨sj8ãž±”KSIOlO|q*þ…m‹.OОFÏlAOt ‡jiç\Ìãú•h\LëJÄ{¸ê½Ñê­1à5¼ «ú1 LÍê´˜Ÿ¡VjC´õˆ¾16!ÔCCËðm_àÿ»µôǃôWºhïŽÑ>ÜKûô¦¨büp>vŸëîÜ‹¼¹—øs/‹®¾,„Àþ^öÿO±¼”ùýE<áûåù”Ü‘òé™ä?ß–ðÇ#ñ¿;òu6úù]QPùß;uÇæ±´§)q¼2v“;¶ÖoUÄkËR”Å¥ëÒ‹×âÎϪ¢d ΂ ð¿| ·¼„T”rå%ð¿º\ )…àéJÆPʃ  "€o‘ ¬ ìÀ¡;B)ð³ÿ*CŃ*Ú C#'`Áþ¯²ò«í<*øu5à„+?!䨳óð *,æ#ƒ†ø¿Á#ªw ëæý†Ò¾þ£B0ÀŒ×m†ä¯ã…ýOä,4?`Qs­žMi×°¬ZŒMǶêY€0d°šXÄÿ ‡•ò¿“Müï¤Ú°ÄÿðÏ<,ûà²çx]ù~W^ЛWåÏ« RPSÕ~]Ma˜š*äcùs‚~à' ·|b¼Á–¤@Èÿ‚àÿ7¶›ÛÄá «ýÉ™Ï Âºz>‘°Š‹Û>^,0¿Åži²g˜l« *v‘Ë/q¤~6ä²ÊJ°}n˜@”ý9¾ªl¨êÁí }ÀÈv~ö¿Ù#²z„¯`Þÿ¹ÄÿmM²M­’þé® ¢½›7ôrfžN¾0ÿÐDü#SñOìˆ}rWÔÓ»"±ÿ·Óžœÿ3¤ƒÿï݄έG§Ða?ºÁNß§gì3×Ò»—¡ÿò?^íC´O¨ˆ ûŸ¹"–YÇȧCñ/J¢eeFå ãWÉÊ–¦k×áªÒgȪsd·ûó7Öni\:к|¸cõHçªÑ®UãÝ«'¶¬Û¼bhÃâ­‹{[s»š²;dÀ††¬M âÁ¶þ5=¼cCœscé§’žÞðâžÄ×§ã^ÝõÚÚ«“èåAô|7z¢•ñ@qÆÂöa3 u#ÔOC#QhOºµÝ­¦=QI{ezw}¸}v3ó_§™ßßwõbêÜãésÏq°ü+ìÿ—Es—…Øÿ0XàÿïÊø×}i_œKùìlÊ_nOúÃá¸ßŠ}ó`ô+ûbžÝý趘»#O÷D팼¾W%u»c›Ìqu‚¾,I^’^^Ä.YÇáƒÿW§¬*I'åvÅjNY1›DþW–ñ•å\u9OSÊp”q´¥l}9×PÁ#ò·)Ev•C¥ ¨Åó°ÿ=¶ßÌ Z¿ò¸ÂotòBuì`þZw!$ ¨áC¨à÷ˆÂò‡a™_žoõ‹IâTZðÈoøŒ¯OäïÓr]ücÿó­JžMÅ·¨ùfÏ"0«30šL³6èÍ0é2Ãþ·˜XaùcÿÛ9!8ì.™‰ùl>.hž§¿<"§@OÞ…xÁÛÇ_VÀ+ˆÿñ)CNiÀ!¡Î “Áÿ¡}jx«r¾¼ÌŠ/¦i´Ëš]²oÎæê‚Þú¥[›WŽ®_7ÙUòŸîQîߪ£Ú>†›&pÍO•ú–£Û絿Óvr·85í<µÛur—Þ„P€h¨÷uÂÚÊ%µUKñ1û”ÿI´µ–-­%­m¥-í­eÍ-¥M¥Xþuë‚U«½þånïr›k™Å±Äd[¢7€üqñ¯ÎU*³IñO̦¼L@ü¯SKõš,£.ËbÌqØòœö|RüØüð¦5×iËö:ò|ÎÜ€'·Ò—[,¨­Ä¥>D@mõbÈ¿º2¿*˜Gù|Y^¯ÄëáÕÒ"þ§Šñ}ÓÏþ'ù×7sëš8õ ¼É«†¬æøƒøæG‡—ýf[†Ñ–i°²Œ6¶Å!°¹D^ÃãõÈŸ7”þ`îB¼ÁœOäïòe9Ù {0×È!þ·¸¡4¯©Ì Ôà%dmÒÍ­¢õâ}¹»¹‡ûY'‡RÎ$<0yr{ôÓ;¢ŸÙùìwÒŸž¢=9Ntˆöp?ýÁÚ=Ñ]m¸þ¿Õ‡®·Ñöêh”ÿQØÿ>±Í”J7$ÓÁÿáù—ã?iű ðÿòÆâX:ø_–H—¦2s¹1K³RÖ-NQ¬á+„.­´Ú–Ûì_ÜY³´»yù@ÛªáÎu㛋'º‹¶m)žì/™(žè[7²eõঽ–nn+ÜÐZ°±9¿«9gK‹d¤C<½YxÓVÞéQÖ½S)¼/îµkâß=ÿîlÔ;{éoïB¯£+´ç62mˆ8ïdQ0ö23Q{j¦1Àü͈ÙN£¯§Ó6DлÑ6E£Í±¨;mŽöÖ•€ºâQwL† À C3Ûf ­ü$ò·ÙØ€ÕÁ!+1ì.Áêçƒüy‡@>„÷ɧì~¾#š [û=Ô®~ ˜ßï‘æýÂÇY„”ÿ…~ã…Ô9E’*‹¤Î–ÕèÌnqgwød]•¹=u…MK‡ÛVOl(Þ¹Ëo¿ŠÿFŒ%3ÈŠüã;í'vaˆùOϸðÞ„h þo .m¬ZV_ Åÿ²Úšeä¦-ðSãÚæ¦uM„ÖR ¹¥¼©™šó­[WY;?”ü—˜í…Ëb­1OkÈ'Å?–¿<ë¿ýOêe…H£”Rþ—€ÿ­¦\ð¿ËQÚ'm¯³ÐeËÇò·æº¬¹n[Ž×‘ãseCÀ€ø·zªB@ä_È‚þ¿WæóHˆÿñÑjDþðWP#Âk51¼`-Þ´ÕÐ,jj56á³ÝZÚ¨C¨ _ÀÿÕõ™uõšZ>nûã;Cò‡²ß`ÍЙ3t&–ÁÂ5Û‡Ðæ”:Ü2· ãqg‡RÀ—ãõÙ¾~RÎǸñëlO ÇÌq°ü)ÿË,‰Ý-ÿ;½Røoêr:%½­‚ñ âƒ]·ô¤ŸJ?7šôàxìcSØü/쌾¼;úÅ]‘/îŽx~'ãémô§Ç˜O 1éeÜ·‰v¾#Ôÿ¿ÅK»ÖJ›Ñ ‰2„€X‚š²Q•ˆò&ÜÆÐ§2” ´pý/Êãh¥qtâ¨ÿ‰ÿ³“9‘…¢Ä9©¥+Ót¥<»V°äÔ{ ÖW/ënZÙ¿~ÍXWɶîò©Þòýò;å;Ë·o-ÛZ2Ò_2г¶§kõæÎ]í…Ýmù}íÒÉMYûû„GFxwMf>¼3ùù}ñoÄ #?¸>îw×Eýî ýýYôîNôÆ(í¥ÆSí÷øéÇ5hÿrÚmŠ¥µ3h͈ÖFcn¤£-‹èñCÉÌáúh:eÑ€6åЇYh0 ¦¡‘4ÚX}<1™A›H¡ Ç¡~&–BC44‰ö¤¢[óè”Oø/w¢wF°ÿ?¹‰ö¯3tìÿGRçžÊœ{žKŠÿ¹×DW_Ͻ"¦†¢¹„sÏò¨þ?û?gþûÁŒ¯îÍøì\úÇ'RÞ?œøÖõñ—÷E?¹#òÁ±H,ÿ¾˜[6Æíoªò1ÚìI5Æx»*N+O’—g–•qÁÿÅ%Ü¢bÖÚÒ´5%)kÊ’×–¦§•e”­Í$þ/-e••±AþŠr®¢‚­ª€`«Ë9ð?È_/çÿ-*!ÈŸ£j €åoW‚óE•€ò?ß©¼ö¿‰¥8™¨qð°Ã‰ªÕϯ§Š|RüW[8ÿ „™DÆÚw kÀüá³ÀkÂû¶ÜžK?N%¢ýùž€ªl Èùº È;,@[‘ª“cÿ:UÈ_§ÿg€ÿC`ÆþE€…æ'ÿ[]\¼GR=‡øßäaˆÿß%ðó¼€/„Ç#ôPGI€ü½./ÂPélx¼´à=•¼óäßèÌù·y³7Tåv×äõ5 ·.ïX5µ¹hgOéž~ùì ÿºëÇ 7o3ß2‰ÍO*ÿÛ§'fœXû{=wìóÞ±ÇÞ„P8±Óqû{sͲ–ÚåÍõ+šV4bV54­nlÆSÀXþ kH´”Ô7Õ5®«­/"TÕàοǷÂâX òײ•Z™B“O?Ùö«PJ•åRy©¸¢DTZÂ'üÊÿ&½ 7,¹n;ÿ…aÿÇð¦Í”M!ƒÀàÈöÂÀ—C5yr(òHåOj~b~¯[êv‹ògŽÿðç—ìâ½ZÕäŠ.!un'>Æ­¾Ÿê^ꃗú7òàSÕuܪ*Õöçx¼»þÇÈùk Jmš\›!ײÔ:ŽÎ(4˜Å&«Ôb—9lÙN{Î|äÎGÈ?ïò àW ÏÈ·ûó¬Þ«;Ëî–8áç÷æPß•SÌj©–t×óÆ[Ø3œã›cÏôÅÞ=óȶ¨gwD\ÙÍ|mšùÆ4óÍ™ˆ×w3®ì¤]ž¢?3‚ž =Öͼ؉.´1Ï6 ã•èf:`F»Õ´±2Zÿ´a)jÍCÕRäå#—fÉ Cñ¯MfÈiÔž¯Šxzy½,žQ‡ý¿*6ü_ÇÈO ç¥0 9Ñk³S*–±µ¥,»N´f×{óÖ×,ÙܼrkçºÑÍ¥Dþ3Ú½£º™QÝž1=<§GÕÛÆ5㣪‘!åÖþò¾Ík{6.ÛÚ•?Ñ%íß<Ⱦc"ý¡IPü¿y]Üïo‰ûèpìߎ'þåHô_3ÿ|íヌöD¼9ñüfú#MŒ;èæ2´+mMG]Ѹ¿)Š6šˆ¦2Ð Ÿ¾_J¿6‡vÃbtãRtã Ú¡UèÐjÆ«×-G ÑÁ|t0]›ƒnÈ¡_/c\#ŠØ“1Oe"`rÚ—N?œAù?òJ'ã7c´?ÍÒ>¿™ùï³ ðÿO“~z< ûÿeøÿ§×„W_Äs/ ¯>Ëûé)ÞOOp¾}„óÕ™ÿ¸'ãow¥ÿáD껇“¯\—ðätô}ã‘§"oꊜm‹ÞVÛˆït'4[cý†»:I¯LR*R+”™ N¹œ[^Îוg”V¤ËSJÊÁÿ©åÅiÅiÄÿáPÌG€RÎVË9W«àê”Øü&•À¬™ß¬ÿ;p#($ÿy(ùkp± %7ñ¿ßȧ"€ £€*ìö_xžDõ!¯Ú†w(¸Dþ•&VÐO@~Êùü€ç³püV>î{XC²,R¿ä/r›!óë¹”ùy 3ßêŸGh¥äo®€âüσ‘éw©ÊY€¦ñÐ-"- ˆ€ ]iˆ‘ÚsWçÄ—´x¥ë²®šÜÞ†üæ‚ÑöeÛ6¬ÚÙ]4ÓW±o«òÀ0ÿº›&L·NQ•ÿNëñ]6"ÿ“{påǾwîõ Àÿ'w9!ÚV´Õ¯liXÙܸ²©qesÓ*SËÚæVÜùi¦Šÿ¦æ"¨ü‰ÿ¡òªkC(þM¶|)W©•’£>•*©J-#ò—+$ÄÿåÅB ì²@£ÿÛL¹PêÿÊÿ.[¾Ýœc5Ê,†,xB8¬2ð¿ÏôçÿW²I·Š(ûÁü'äø÷xñb]Jþ•0P‡åO5xÔ¹mø$7ržçü©ÎÔñ>”üñÝŽUÜ…mƒ5CcL“ëÒÊÕ@F…†­Ðq5:¡Þ(1š³ÌÖl»G@8¨ȃðû°ö}|À,à 8|y6o¾Õ #»Sêpe9!>¼ù~_Nm@Ö^#ê¯ãL5§èÈ8Õ½è®EG==ñÒ.Æ›3Œwö2~³óÖ íõÝ´W¶ÓŸAOõÓÙD ÝÑÀÄòw¡k­hFKÛ&g 3»W1Z£úš_‚œ|daÓôétM2CÄ'1+–(NˆX“¹*>ri<³ û??•±Œ»¨('Y±œe,gyt¢j{v“/Cí’žÖ•#жm)%òß7¦ß;nØ7afÆõÓcº‰1íø¨ftXC€žµ[7/ï.˜îÍ‚âÿØpڅɤG§c_¾&î77ÅþñHì_nKøìDâ§·EzŒùÉaæ_1>Üñζˆ{Ðc­è¼Q¢½…h”zâQ÷"Ôv²Ñ>º.—vóRÚá•èØ:t[:QN(Ñ 5º]I;VŽ–¢£EèÖÕèæèÈrtdãðâ¨e‹öq;!>âÐŽt ݶŒyŸ6ꩪ¨Wºï£fiŸQþÿážØŸýÿÿ à5 ŽÊÿsÏñÁÿ?>É%þÿûÝé½3øÿòÁøÇ§cî:ÖqmgÄöÆè¾@t‡;oõ2%9µifuªF•¢T§+Ô™rK®¥³àöŒ yF™<R ¬<­¼4µ¢45,H‡òŠLø2øbñ¿^ÅBò׈¬A»Z`ÿ…ù!ók…¸ÓBáÕñÀÿTà… ØÞ”ÛAõDþ5óâÞŽ•´°€påæX=§ÒÈàWXø¸±cå{Í\‰>:Ç,Ü&à2 CÏì:Tþ€ŸÙ¦Âó¼ }k¨ì€üúä¯.e)KYª26ñ¿º"] ÈÔ‚ÿ5,½.øŸ`vp Äÿó)À_èÿ_gÁ‚ÎLá)²|ˆ‚ïröy'XàQ¥[p *‚ ÆD Ú!¬sŠ<⯤͟ÕY)Û\—Ûט7ÔR8Þ¹|jÓêÝ=%{úË÷)¯Q_?®»y›áðvó±Öc»-ǧ­'fì'÷8NíužÝëÂæŸõ`öº)Bþ'- ŽæÕíͫ׷¬io]ÓÖ Ú_ÓÒ¶¶¥­ˆÐÖZÒÜRö?†jþ€ÿ©ÎÿR«³Ð`ÉÕ²I…J¤PþÂÿ ë€ôÂ[€µ*‰AKŠÿ|°ýBÿ{‹á¨üAþf½žÿ—ÿ6ü¡ì@þ¤óƒ×Ãóú@þ|l~ªí_Y' üOo½×Ôr‰ÿAûóg{âƒ=!ÈRÒùq{pçÇlËЙÓT MJ©2­L•Y®âT¨¹j­P«LYF³ÌjÆg™†üïÈ…Qåÿü€qÀŸ T« ƒ•KÉMÇþ@¡Çþ/°yò¬î\«#Ëî9œøÛჾüº€¬³J0X“>ÓœrhCÚ[ðZÁǶ-zagÄk3ôwöÒ;KÿÝ,ã·û˜oÏ0_ßqyœñôã‘ôûšÑ©êÈ[Üè íÑ£)9m¨˜¾e5³c³¡€Y™Cw‰ñA6]“ÆP&ÓIôò$P–H/Á0‹k˜«#WÄG,‰g.N`ä'Ñ ÒèËyQ¥¹Iª,kE†O/$Ë~6×/h[5Úµnª··}F´Xþ“&`Ϥqf›a÷¸nrT=1¬”” ö®Ù²d{oîþÉ-CœÓc©lOxv6ö­b?¸ä÷é©„/N'üãţ¢þq{ħ·0ÿt-ó½ôWÑÓÐýÕè”]¿í’ ‘t4˜„ÆÓiû¥è†tt5íD íŒÝ©EçMè¼Ýã@w;Ñ휕vÎL»Ã€N«ÐíøV÷SÅèä:Æm«"oɸF„örÐ^º))¦_rD=ßùf/ãý)røOÄ7w0¼7nîRÊÕ'Ò¯>Ǿú2ŠÿŸÞÿ¸Ðÿ—EsÏ ~zGÀòþý ë÷¤áúÿdò»‡_¼6î‘ÝÑçÆ#ôFìi©Úài´'M)nCªUË2ªÒ5ê4•&M©É€P)ÓÔ p[£d«,H<.gÈËÓåéòòLBØü*€¸øWò jQC™_+¶é$6­Æk€S+":uª….ÀÚ× !Í¡ì4ø¼Ê U=´q` /~…´°ƒv¸ìÇþ×s‚.>®Í„ñc„^“j{‡!t8¨„ï2ЧAD!ûß¡†`«ZDÆ/&ߤX`þr /ãëÊ8 ¦,CUž¡®Èÿk”àå¶F¿Œ‚ÉÆ3Ûù˜_F€) –<;ŒÙzñ+ÿÛÜ‚}~)ñ?‘?åžÏ͸„Äÿ@•SXåäW»5NL[ÔòHÖWJºj²Aþƒ­‹G×/ìZµs˺龒}ƒF”׎©o˜ÐÜ2¥?ºËx|—é¶ˉ½¶“ûì§÷9ÎÌ:;g]< Øã‚D ýŸÿ[×v¶­ëh_×ÑQ´­S‚i/km+…hh^4“æøßåYB5rT:,ÿr¥P®SþÏ" Rf©*²eˆ<  V’#€Èä¯Q—m7ç9­ p¾Ïñ³ÿaDe?Èߤ“À3ìÿ…ýð?”ýaù»bKBНW‚›?^¼Y䬆Ë~?ò'þ¯­Ã—ùÖÕqêáIîs©TÕR ~*Y¸óãc9]™G†ÁšÅ…䟂‡áŠô2%»\ÅUªùDgÈÒÃhÅ”@eýïÌû}”ÿ…•Á%U•K •ÔM÷^_Ë[àpçÙœ96{6ßxÝAoü?°!À©N™mN<Ú•z¾7ê¡‘è§·Ç\™Žzsã7³ôßï§p€ñÁˆ÷g#~3ñætÔËÛ"žŒx¤‹qo º½jÑM.ƬíT£áÚ–ÕôŽåŒÆ%Ìê<¦WÆ´‰èF]Ǧ«ÓòFE2³$d~:˜-%ÿ•‰Œå‰DþÌ‚DFA2}q:c¥0ª¢ E¿ŠíVdV„ÍΜÎ`~OòÁö•›Šwôƒÿ3£º½ÛŒ{§L{§,3S–]“¦âÿÑÁ²‘þ¢áÞå½…ÓÙ× ‹Ž²îÚ–øÈ¯‰âÿ££±ŸœŒÿül—wÄygô×wD}yšù÷£Ì¿ÞÀüý ãQÚ ›Ñ¥tÎ‰Ž”¡Ù\´ƒ‹&3ÑŒ€vh :º•Ó/è÷XÐNô°]ªBW£‡jÐCÕèÁ*ÚƒÚý^ú;ºÓ„îÑ£ Z|·ûyãlóè tsº1ݶÝ­EOT2^î ¿=„~?þr=úâ8óÛ;#~º/~î‘TâÿŸ^âýøªüüìÿ—DW_\}GÀÕÇyß^d}uoƧw¥ýádâ;‡ã_¸6úá]wEÜÒÃØÝʨŽlqFW™@þMšIÍÑ«Øu†J—•†J“ªU§éT%K§ähT<¥Š+Wrä ~†BžF ~faàâ_-0ifÐÎ׋p©Ë(õ¤n½ŒJÌïÑáÕæÔ9™â…§e•Fá<ìûß’?±=0qäCÜê¡ÌOÁ£âCàÇà8=¡K‡«z›–kÓ±á ¯í:ö¼^lÓ ‡ŸwÀ›b»VâP‹-±Y-2+… €hŸ˜Ë¿”§-áªK8aÿÏËŸ…¡ü¯ÓrÀÿÈ_odL£c±pð8,€üO™ì,`A(d‚ÿ­.vØÿ¼PýïÉ€ÿÝü GPéTy„`~,·°Ö-¨óë½¢F?¾j­³ZÒÝ=М?¼~ñxçÒí›Wíî]·g dv¨üÚ1åuê'Õ‡whOoŸ1ܾÇ|b¯åÔ¬íÌ~;áŽYŠ}Nàì^Ç™=ÎÓ3ŽSÓv²"tÃúµ˜Žâ J:7–åÀúÎ2-­%-xP7¿ìÓã[æp-¶àæO6ñ¿\ñ ÿƒüÕ*™Z.ƒ!Dÿà­* üoÒç€ÿ]¶ÅØÿ¶¯̃€4ÿ¡ìùµbxZ R›Yê´e¹œx%Y`ï÷g…{þ`~ð?Æ-!Ó¾ÔyM_%.û‰ÿIåÀçvr‚Õ,âÿšZ6Ȩ­áRrë=}–×Ïvy2ìŽt£5UkJUê’ËÔÉÅò¤¢ŠÔyf™’(TµV¬ÕK³^BβvØr¡†ÇþwÌ×ÿ¿ð?‘?¼ ŸuºòlŽ<‹-Ç‚;H9N;u†+ßïΩ÷ˆ»‚ìm5)[nïJ¾»?úâh ñÿÛ{ïï§}p ò?¼f¼»Ï¼4Á„úÿÒFú=Íèx æz+}Z×üô®AKQÃbT•KsKéV1ÝÀGZMÉ¢W¤1ÊRè¥IŒâZQ"fM}u"ä¿,¹41$ÿü$Êÿ´U‚(ùâdã®_É®3‰Ú\xÃWã²á¶•ã]k‰ÿqý¿Í8³Ý4½Ý²{ʼ}Ò89¡Ÿÿ)FJGz׌ö.›ê+˜’Ý<&89‘qÏö„§öƾ~}ÌïÇþùö¸ÏÎÄqWÒ¿ÎÇ}s.æ›óQ_Ÿøâ6ú'‡˜îc¾»v¥=цÀä§5´W¢YÚ'A7äE/FgUè^KÄE7ó?ýñôTz¦öd;zj=zªƒþdóñfæcõô‹UèzÔƒ.ºÑEzØù -òn-ýNºCŽsáz¾ßùøÛIôÑ~ôÉ-蟧èß‹ºzÂÜ£øV—¹ç9¤þ‡âŸH~š÷?ÕB€ÿ¿»Èþ×™Ÿ_HûøTò»G._ýÈtÔ]‘‡û"¦×G ÔD7»b–d‡/P‡r]‡G”™àµ!U«MÑkRðªEE†AÁzü¯ üCð?þE@& à×1hù½Èj; §Q ¸M¯Qâ3Iáé1ˆÁü^|= Þj4Oè’,²¥Ê$æý/ C€J*Àó~S¦ßÈ|Vc†ßjûøulŸ–ã×ñz~@'„Xñêps‰jæð­`Q³ÐkÀªˆüçý/Æc­Ä¦[µð¿I%4*D¹˜žÄüšbŽºˆ¡"€ÌÿÃJ«âèÔl­ŠŽAÏÑ8óþçš,\³•,ôÿ/˜ï ý “C#Àà dXœ,ð?ÁædS‹Hy \ÿ»8Êÿ äOÀò÷ ë|"Jþ¢æ ¤£Z´¡V²¥Q¶µ5o¤£`bÃ’Ý+§ûŠön-=0"?8®ºa›êДêÈ. Èÿä^#Èÿä>+øÿôë™ý€ýì>Ï3{ì§glóþ·]EÀ¦%›6•wm®ØÔ-ïÚ,߸©bã&EçÆ Ô¶/Hæ6ˆÒüÁÅ¿Ó]hµçá{~MÙ¤ÿ£T‰çû?PùK• ø†„_ùŸÔÿàÜÿ±æCP{¾ HóÊ~?`ЉMÊ«V‰Ó!õ¸³|>,ŸOJüOŠ—C„‡ –ý‚"Òù!ò¯ÄÍ\ÿûª3U™Õ5,âÿÚZvM5§ªš]UÍ­¬â}¾^¦Û›ét§›í©zs²Ú,×$–(‹* ÒJ,ì¯B%PiDm–V'ƒŸ¢ †ÿÓÿá òÇþ÷xܹ'¾äo¶Èæ³ïz8³<â-•Üíu)×µ$ܶ!þBߢ‡=±-ê¥]oÎÐÞÛ‡ÞŸÅüv½»½9®lGÏ £Ç{ЃëÑùt«;ê€M–£­kÑÆå¨)Uå Y„HÏG6¾®KžN/O¥—&Ó¨²Ëm Šÿ…þ/LŒXœÄÿç&£‚t´’þ7­ãUìz£¨Ý™½)˜××°t¨uÅØÆ5S½¥;å»FU3Û ÓSFÿŽ)Óä6ÃĸnÛ°rlkÙpߺផc½Kv \3œ}ë„àìT滞?ÿöÍqÿÛ©øÜ™øÕ…ÔïïIúï.Dÿç®È¯NF|~KÄŸ¯‰|'ãaÚ‹ÕEÞm[t[ 󦥌C‹#ޝN¸SC¿Ïù¨/ègê#Ÿk¡¿ÐÁ¸¼‰þâfÆK½‘/÷E_ÞýBWô3QO5G<Þ@¦=QM{¦&úéêØÇ|‹.¹£u3ÒŸod¼ÚE{wýa7úË èÇÑ×g?\ˆž{0 ûÿ©L¼ù÷á¯üÿÓ•ðöÿÜc¼ï/±¾y€õ÷»Óÿt&ù½c /ßûøÞEç'Þµ§3zk}l›7!hMqÙ&Ǥƒ´5ZŽÆAù?É M5«ÓMÊL£’«Sñ5*¾RɃP(Y*e†ZÉ 7|ˆù à:½†ÅXþ.S–Ç,óÿ Ôü|àhŸD@¥YVeÉ"€üñD“ô×þŸ@µÖ¾G—áÖgx ™ððê3}Z–WæàPGt ¼:‘G+táyÐ>ÞŸkVqÌ*£æ XÈ@øYþPùƒÿU“RLü¯+çÿù«Ö±€°ÿÊÿlìg¡ÿuZ–VÏÖ~1ÀWïÙy€ÑÁÂò'¡0¯zÌBÿml£-“D€Þži´¥›™á þ·9¹N'ø?óþ¯ô «½¢ÿ=,¿¸Þ/l ˆ[*¥5®zIOSöP{Þhçâm—îܲj¦ݾÁ’#åÇ ü¯ÿŸœ5ŸÚo9s 8{sǬ•b¡ÿmà`þÍ]¥Ý›Ê¶l©èéQÝ=*`óeW·jÃ&EÛFysGYÓúÒ†¶Òº(þKð²ÿ ·{‰Ã™oµåMR^¤ÑÕjJ%T(E¸ÿ¯–)Ô9¹$tÚ\¬¬)¨•ÿääÒü·™óìVÐ]>ùÃk¨A¡f£Ô¨ù‹ôZ!¼€í–,2ðd<2¿GâqÊÜŽ,·ÿÔÝÍ8[}NÀÇ© rªªx@u5¿¦F@Ö‰üµŸøã=©ø˜ý‡R~z GÀ]Ñ_œˆüôVÆŸ®cþnšñÖýòôt+ºTƒî÷¡¼èá`äcèÙõ´—63^é¡¿±ŸÛwýf ½¿“öþ.æ{;˜ïL2ÞÅV/ PÑC{½ñÖÖÈ·£Þˆ|»Ÿ¼5ˆÞ§°“þñ~ú'7ÒþyœùÍÙÈïŽùñÁä«—¨æøÿrÈÿ ·€ÿç®dͽ,ýé²øÇ%WŸ‘|ÿ˜ð?yÿº—K]õ›öî­ /Œ}tWäùæÑnÆþ¶E£5±ë½ñ•ö$§9ÉbL73Ãþ7ؘyÿë4éZžÇ$þWª¸¿ò?<©e?<)€ÿÍ:\üãž%+`‘,Ò* >O¦Ò,¥*|i¨È·Jk)êlYõv¹ù—›ð©œ"ø?`â…ýOäïT§ØüZ¶ä¯Î ûߥæ‚üCK7Õ€ŸÏ ¤öêþšŸ—*ùSþ—ÚµR›F‚å¯aùËEF…ü¯+kKÅê21ñ?%ÿÿÓÿ!T|àùŸþ_Xÿ‡ýÿ?GÄÿb~ƒƒEüGd"€  O“ã`ÿcGñ‚,ÿj¯°Æ'ùׄµ~½ŸßàµmU¢Ž*ñÆZ^w£ü?¼!Ÿøgß²™•û†Ö-ÂþŸªùávªþ ö[ÃþŸOœÚg½}OÈÿGw™{º+@þý½Êõà vpPß¿U׿UßÛ¯ÝÒ§#°~“²½KÐÐF&×øË=Þ%.÷b»#ÏbÍ6™dz½D«…ª^¤R‰©ú_J"@» ˆÿ©•Ÿ¡É_⇯ÿ¤È ïù²³@¤¤ø×i ®Suu–Ó– 5¿Ïƒ{>—Äe‡D†üÃ+7þ`ý^nu¥ ê—þ¯®TVã»ZøAñÏr¨2ìÊt‡:°ÃkU†C™‰Q³påOùŸ:“/=%þá¼0Dþ‹OõZµ‘?€g~å¢_ù€Qð«ú_[ û~ýÿéÃ/ü/0ØùÈßä„!q€ßü¯ / @¨ùÏÒÍgÁ‘ö¿mÞÿ¡ú?ìß/ä_4Vò›+­Õ¢öQgxS½ §Y2О=¼!wbSÁÔ–Â]ý˱ÿ‡W[ þ?´]~ëåÑÝšã3zàÄ>ãɽÆSûL§gÍgö[΀û¶“{-ÄÿÇv›Žì4ÿûz[û±ü‡†tCC†­C†AýÀ ¡oPO"`Óug·ºm£wš‹kêת–{ýËÂ`µæYƒŒŠ DîÿSaÿ üOVþçXM ú<»ïÿ Cäõ°I'¦ä/Ôªð»†[@Õóÿ;Hç_þ÷zø~|a¯ªJ@äOüOä¨äù»üN_Ž€Êt‚/H½ rúl¦Ý“ns§-i:cªJŸ"W'—+RÀÿE©Å™¥ v¨í¯“P÷HŒf£øÿ㌷ßhæ[æuºV{Å’c†°£äö? ¼ðïÔ.ms û+ySuûÓnhO»}cÜÝ ÷÷Å=²5ò‰AÚÓÃè©!ôäVôXzl ºØîiBg«i·zûŒ´mJÔ·–¶Šÿ\T“‚2ä•!—Ù%4›„a1ŒIP@[ÆX™F_‘ªg¬HZ‘±hefôJVÔŠÌș̕™´5,´–…JÁÿb†9/Ú_S¯Lm7±»ü-~ñ@l°)wt}áèÆe#Ý+ÆúVM —n.ŸªÀË~¶ ö®êY<ÞŸ»gHzÓ(ÿÌ$ëÁí)Oï‰õz(þã>>÷·;㿼ðÝ}És¦â“v.¥\}8ù‡¾»'æßw.úâóó#¹žñá,ý½í´wFAø¸†­—ñæ@$|øþã»">š‰üóläŸfišEºýùZô·ëéŸÜñ·ë#ÿt-ŽßÏÐÞƒh˜BØŽ>Ú…þ²}²ŸþéÚ§Ð'×¢O¢Ïn@¿…•?Èÿûs1xÙÏC XþO²æžeϽÀ%‡ÿà)`ÊÿxóïËbªøÏš{IvõEéO/d]}>ëǧ` úÏEÁ—ws?¹3ãƒÛSÞº5þÅkã.íŠ>?s¤'nïú¤ÁúävRµ+_AhaÙðŽT.`1ó,&®y>Àÿ:5^ÄBä„ä/Ïœoþ`ÿã _!TΤùCÉ_Viͪ²ösZ;¾j·Îì&W@´ßâÊ Óä‚€¯‘ÕÛ³H€ü«LøR@ýþwQÕ¾M™nU¤óÃk›žð²€OãWóçå µ}æµÏ×Ëyäl £Ì/Äs»Êÿ-j)`Ua,JI¨óCùß ƒÿõ]™$aÿkŠñt0ž(cýÏ+å æýÚRü"Ž ”öÃþ×ÏÂÿã°g.h±É€ø¿Ò+¨ö‡üò¯¯6W [j„m5¢Ž:Ig½ŠÿÞéÖõ9 ü¿tfërðÿ5£k¯›(¾qªì–íGv©MkÏèNìÁ³ÀÿW€ÿOìµPÅ¿ùÈNíÛu=[Êúz+4 ÿáa=…q+N#D@ïVD@w¯"`ý&yKgis[I}ÓÚªÚU>®B»=ßl†Èj4Rˆ€0Pçÿj ’ ÁÿÔåï96S.ÁaÊ!àî·If¥äoÔŠð_“J È֩šZÍ&ÚwÚEóñeÍ.¾ÏËø å¯h¯áäôN¿3a÷¥9¼©®@ª;˜"8}évo†Í“nq¥›©x·¯1M©K–«SÀÿ%ŠÔEz©‚U®âª4JþPü‹)ù‹©IŠ_û~ X~ÏbŠ%Äÿ[>Œžð·kEШQ‹ð–7%»Ê‘Õâ÷ùãµ¬Ý éZÓv$žÜ˜x¡;þ-‹.õÐíEÀ¥ntqz ]hÆW=ñѯµÒ¶kÐp)Ú´ µ-Ey¨.Õ ê|ÈE¾šKFsfQsšžÇP±iòLZimMfÄê æJŠUìÈ5ÜEkøÑkøQkyQkxŒu|z1•ðP…i¥ K^”wMDMy|‹6µÓ’¹ÅÍïŠë¤Ã­¹#à Gº—R06XLüS4Ü¿z°o)ÿÛ·Ê ‹ŽsÏM¥]ÚôÂlÌ›‡bþp{ÿŸŸ‹ýúž„ïLž»˜ŠgZG`ðãýñß^XôõÙÈÞñù­Ì¿Þ@ÿh–öá4íw;Ðû“èw“´¶3>œFÞOÿÛµÌÏ®øû!€ñÉè³›0 óÜñ÷[˜PÒÃ÷~|-úp?úË^ô×}èÓkÐ?®G_¢}y+úê0úúúúúê6Ú×'éßœüîB,–ÿÅä¹K©øÎ¯§9áâŸøÿÇ+Âü_Í]–Ì]Κ»œ}õEˆÙÜ ²Ÿž–þð¸ø»‡…_ßÇýìë§Sß;–ôò ±Oí½o"ööøƒÆ›’ºªܱ;Ûmå8¬\€ºŽœo5óBþ×q ZöBÿ+”Ü’g.ô¿–ÚóEäÅÿBùWÛ³kíyuŽ|0£#jû&Êð`þVw>¼’DhrÔÙÄ5aØÿ~#ߣãâÞùéódÌGÛ†áZ•œùžÌBÆ?ªïØ"Çaÿ+Ådn׬’ù/ðþ'@ü‡¿ô¿º„\… þçSþÇ'à‘ˆÑ)øaÿãQ彎«[zøAú?< Y@üåÿ_þ×ÛÓ©ó±ÿñ]®”ÿAþ©ÿý^\ÿWû!5A~m¥ ¡JÐX-l­µ× ;ëÅÿ}­Yàÿ‘yÛ6cÿïì[2=°lïÐò#«ŽÃ èæí¥‡w*ŽM«ÏhNìÕܧNÍNï7ž9`Âàv…LœÀõ¿™øÿ¦íZðŸ|p« Ì?2b ˜q û‡pôôë!6nVvl¬hë(mj]W׸¦ªv‰·{‰Ó¹Øj¥"@‡tЪp#H£ð!D•0Àò‡'ñ¿Y—c5æØ¹Ù€Ãšµè%¦yùk•|µB U‰tj1€]í6©Ý&¶Yv›Ðn8í|—“‡›?^~0( þ'¾Pùÿãâ?Èù;üé6oªÕ“b÷¤„RÀŸ8é8¼Vw%ÿt-UgÆË0¨ÿSÊT©ám_r Ÿlûš÷?îüæiþÿOÿà +Ÿb1ÈßiÏ3™rôú,=þÍ á7 O£VjÖËÀÿn[ø¿É-«ySµ¬éÆŒ›Z’Ž®O:½1þüÆE÷o¤?´‰öPz`ºäߊÎÔÑŽÐõNÚŒž6&GýE¨}jYŽš–¢æe¨y9­q)ª+DÕ‹iÁ<äÏAî,dãv†‡”Z9‹¶š¹šÍÄp"Öñ‰bŠ%À¢RIT©4¢L”‹é R‰‘> ™s™žå¨º(¢YßiHív²û}¼Já`½x¨E6¼>"`x˲ផ#½«†û׃½Ë‡{ 'úr¦¥× nß–yßΔ'gâ_9÷Þ­±ŸŒÿ䮄/îNøæþÄ/¦à;K§€!@âÅoì·çðDðÇ™ŸßJÿÛ ¸°ÿó~ôçYÌ_¡t¿}~#í‹›™_üú¶È¯Ž3þy”öåqÀkàËcÌ/ŽÐ! àÛÿ~6ÿ?oÄÚÿæ8í?'hÿ9…¾=CûîÆww2¿?¿èû»c~¼?OC\JŸ{4_øûºó…öÿÕ—…Ôùÿ¢«/Šç^‚ó)r€«Ïgÿìÿ{ùŸŸg|6ýýÛR^¿)îÙÙØ‡¦bÎÆÚœ¸«-¹¯6±Íãwp½‰ð¿Ý*°RC€…þר±ÿ©U xÁÞPÁ"þÇGýP»}:)Èßg’Ͳ*kN ÌŸ4ØóÁüMÎ| è}^õíÞ‚6oî¯hwç„"À%krf58¤Äÿ¤ÿƒ7sQþ§ŠÿPµOäoU`¨7YV ‡Èߨà²̯©àjÁÉå|‚¾B`ãU$ˆÿ­šl›cUÉd@E€Ä¨Èôå¡×ÿê"ìáƒï$¶€Â 7ð FÎÊýŸ@}ø«ú?ä#‘¿­³²~ž¶e,ô?®ÿÉ®^®ÛÃõx±©>Êü!ò¯«â×W šj…muÂõõ¢ÎFÉÆF1È¿¿M6ØAú?ùS[ vôîê[¼gpÙþ‘å׌­<8±úÐdñ­;ËN+ŽÍ(oߣ>±WsrŸöÔ¬îÌ>ÝÙY#¤*NíùÿÈ´é–ú'ÕPüô+††4##ºÑQãØ˜ ³@P)`‚èÔ÷ h»ûÔ][›ÊÛ7”@Ô6¬†Q@°r¥×»Œ,¶™ó̆lƒé À Ü×Ê ø´%nþèT"b9›!‡àÐç€ü»^ ˜Á¨¡Aå¯QðÔr>ø€_ÖD­®´Y%V‹ÐbX­<ð?ÿ·ÀçüÂÊJauµ0äÿ:!ñe5ÏW…ýïðe‚ü-îd³+ °z’í¾T‡? üéø³žL³'Ãè„¿¾4­5UkÌTëÓåºÔrMJ¹äŸ^®fÉ5<µV Õ‹ôF‰Þ ÀüLDþ¤øw:daÿ“À¸ @þ`~—#¯ù±`ùkµàÀo€ß¯^ )$£Û–°ËêœâNŸ¨¿’7RÅž¬a¨O¼±)áhkü©¶¨;Ûw¯GÚѹVtg:Y‡ŽV¢ëÝhMhÐÖ2ÔS„ÚÖÐZW! c h_EoYšWÒHäÑ|2d— “®Ðä|Ú:^FU,Š.‘Æ–gÇUäÄVäF+òc”ù‹4¹‘š†6éeȘƒlyt÷RT¹†ÞP¶¨M·É”ÖëdõyÙ}AîÖzñ@³t°#w°«ppó’ÁîåC[V@ õ,¦ŠÿœÃÒ[ÇywN¥_šN}þ@ü[‡â?8ÅÂßÏ'|uoÂÈ4ë#éWO°ÿI‚!ÀÆ}wOÌ7w-úúóËÛ?Bûüôù¡_Ü„þq«þ_'ßžŽüþŽEÿ9ùïÓÌoÎD„Ÿÿ:Éüúv:ô/à‹oa_f|{ã{ø–;™?ž‹üñ|ÔÕ{c~¼7F?>˜üÓé?=š>÷8{î ê¯Ð_¿ÿÕËB|ìÏ ¢¹ç%sÏeÍ=+›{6øñÙOJ¾{TüíC¯îáAýÿÑ™´ßOÿ?·?æÒöèsÃñ‡·ÄïëHnHØXtñüŒœ¶Püì=‹ø_­ÊÄì ù‚eÿTñ¯SòÌj¡M#v$^cVXþ@½ wò‰ü›]@‹+¯ÍSæ6ø :}ùÞ9Èç¯ð* UûüU^_5Z7wÈ­V Ñ1B£'þ7D¥ÿ›ÀŸ£2ì’%Üâá€h*Ì_ˆ°—c¬âÅ7§JN§‹¿“¾î¡ÌÎÇv<–!=ÒGz IúN”t{`ûI×¶uó¶%iZAšì"e»vd;¶ç:vLtíœîÞ5ѱ}´ƒ”ëØ6ÒNjÞ–©#¥ªHAÉ)ÞfnÓñ·)Dû¢ë”â}ˆüUEÚš"]h¿©ñ€¹aŸ­~¯­n·½z»½’äª"yj¶‡jIñfRoûŽA垉žâYeÎC XŒ³úùKYéÒhÅÒxÍâDÍÒTaÕës•'—¥w­ 9ÌzþzÊ…›J?9]ü÷÷ÿëcÅÿùLɧ/”þÏùÒ¯_'ûõò…ò¼Þ.ÃðÍùý`_>·ï‹s{æ˜?²í³‡Iÿsé³ÇIŸ?µãËs»¾yîºK/ì‡çWÏìþú»{ÁûÞ/žÞ Fðù“»?bØÄÏîýãÙÝ_<ºû«§÷^|vÿå\~¹èò+%—^E™<èâ[´Kï2.¿Ïºü!çò÷‰ñ…ûyþ÷?ÿ‰ðOÀÿÒ‡Ò‹ï˾yOúÕ{’/ß~þºàçŸ>ËùÍ9Ö¿fÐÅð»›üg›ÿûÕ4ð'?üAIÇáߪãü!ü,â°Uwù+z›ð÷Ê1ü³þšAô¬ÖŒ…kA㑸@AØ€ÿØ ÿ#þoæÿ„]üš8>Óc``ø;44 »º½#þç“¿Eƒšð=*4“Ó bé•L¼ s»j^A`À ?v§,@O÷¦0ÿ ü:<­*‰E)6+ èæƒL ¾ÿþ褘-+R,z>’‘I€ùo5óá»x+ÿ¯X€[p5ÿó Äÿÿñ*0vÌ^F@‚ â†ÃÌÿDŒ—ŒóSI^:ÅÏôñ²ýàÿèâÿlVLX€x)'Y—ž¯OÉŽLIÍVܸX}ËJýíkM§7Z¿s´ãþºAŸPƒîü`ÿà n0ÆöG˜žÓé§Ø‚€ ð·xhhßE3:(À½Ig¡izh*šùi4sMV¾Ù_0›]ÊÃß!$à/Çäìoæ¿×W‰VÌ]r¼i à¯×óuj–žp:¨• ’ò8*B®Š„Wšö‰†ýü‰ w*Ä9!Ž–]/:•Ø[jïéäÎÓñíwƶßÙychçïîƒöÝó=;'´;F¤l'i {Ûˆrç¤rçœj÷¼j×¼jǬ YÃT7iŒ ™4POJVm÷É·[¤Û b’ZºOSq@[Y¤¯)Ò×÷4•˜[J,mÅŽöbg{‘§m¿§e¯¯i—·a‡¯n›¯–©#Eáwh&e:wލ÷@žóÑfƒ´Ùk>¶.ƒ,ŒV-ŒW¯Ì4¬ÎÊ-Uݺ‚Îü¢•ßã”ïßVö“{‹ÿùlé/Ÿ,ùí³e¿¡ìóóezƒ/Zl¥`þ£*àí²‹o–@ €bùKÅ_¿pàëg÷Ò¿<·ç«§w!Ûñõs»A_¼îòù—ÏÌQŒéÀ¥‹/¾Pô§çö.p|r?è«sû/>Wr¯8¿^~ù êåw ÿ¥÷˜—>d£¶ÏG´æûcâ’‚ÿøÎ"üóˆ±ÏÂËß^þ@ré}ÉŸ.H¾~WúåÛâÿyKøÙ¢Ï^üîyþ<ÃýÅÌ|˜ú×÷S>¹³äƒSEo-zî`ðÿö\éF¦x!¾¿/ÌÅüzXP ‰Ä6–ÝÊ´[Y…õ_½ ÿQª(JMÙMU)h]õ¢áØô›âÌgDPÀÎåds£•ËSu‡çd'—ä§WůqŸ»žþöäï,ýëûJ~þXÙ¯ž.ûôòg/•ù*õ›7éˆÀïÒ/ò?èd—ß$_|½ôÒ«e_)ýÓ‹Eß<¨þÍ û.>Úû§—®ûæå}—^9€–kß _~ ýʼΗ]|>¥ø›ç᳊.>‡ôÍó%z>R?El7¢.ûò{œËïs€ü—¾Çò_ú!ûòǬË3ðU¿[E\ûK„ÿÐnÏKï‹/BìGòù›âÿy]øék‚ßüöþ¯Ïqÿí1Î?>Ìüé}ÔOî.×{÷DÉ+ëEß].ypªì–‘²té|b„õ3Bº¿ÀÚjµ0-&z>ük©j%E¡¤‚¶òj×ñ½FQøoÇ,Ò„MÚk—÷»äø òׄêÇBuãáz‚üõ ©hÝVJà?Z º@ÿÅÀÿ8qMUÿþVˬ X”TYÍõ¨èþ˜ü[ùà¯dÁ¯ÿâ-@vâœWþ’£Èc¸¢¼èòí þ’ÿ-ÝBxZB,›Rü·ª…HÄyaxâÀjl)ıMdð­m¶ñðw7ἂLNva Ð*Tß¶€køþc †Øa‚ÿÄb%êWÿûzùé~þ`Z0”æçð' ©¬`nX¸8"^¯MHPþŸ“_Èó—wm ¸ïúΠ 8‰AXàgOéAŸ4ÜÂpæÝ=G4§7Tÿ[Vº0ÿWVÌkk¶üq66Ü o–ùÅžéYýø¤v$§ì‚ žhD›‚þZ¢§-s;$ —]ì² ¡Ë*òØ% ¯C ò9e xA±Šÿ^3­ Ú÷%ØÊ=¤bO§æÿQ6&,›à?äusý>n8$ŒEE‰¸8™%“Bþ b ^(Î D8¾Ë`:|t›‡juSÌnŠ^¼4BtL~T¸m®æ@ø7Ú™8ÿƒz¬ “•m¶q¬žÍÉ·9…þN—ØåFs;½ <ç7ùðßä?øÀÏy€ðo2Aòçbø+•L¥žl•Š£Õò z‰Å‚6Çz•A§Ûq “NnÊÁís³2fÖËöÑG}åãž’1çþQÇaÛþ[i¯µ,a.J£ÚëbªÝ åÎA5i\³}Á°kU¿cM·ížt¨‡´ÒCZ6êH‹*dC-ÛÍ;Í»=-û,M¥Öæ2k[¹½£‘_Iõh¨^-Õ§-jJÂÚ’¨ê@\q]¢sW¼}G¢u{o +Ó„ÖFºwk÷N˜öM8Ч|åÓ1Ælwv@0›ÎŽH—&ª6æ%§–%÷®‰žX眿þáÍ俺›ü÷•ýâIò›Ägû,Rìßâ?óDð󌭕‡\¿—O4D[ø, •Âàá?„b<ø ÷‘Ã?ºÀÑsxÕ°OˆÕã`¢Å_¼˜lL³eA¹èÂG·ät ]Èã“ ¡ý~)Îüy ðK± üw¹exÈÕ*ééèt†ÌW(X n$ŽJÍ×êDÆYÞrø[ ÛEù»AHhˆº·3JÂ\5•„zÈ>#Åm¤» 4—–ìUí©vÇÕ»†µ¤)öƒ=;7L;®ï!3“ŽÚHGì¤u iÍDZ PnïÜ‘éØëÞRyº)^Õ£¢!!òÓ|:š_O (=œ%©/îÕîïSíMuíèíÜžnÞžn$€ÿƒ-¤áÒ¨rט~Ϙeÿ„»d2D™N2ç2¼™AÁìˆxi¢âè<ïÖƒ¢û×øÏa½y‚öƒÛÈ?ýùŸ)ÿŹòÿzžò‡—h_¾Bþ_~“óÿå 44láÝüB0ê½UŽøÿ&…°Â¡ÀÿzÙ¥7‰_ð`œ‰t("Þ¦Û/¾AÙt ÒËå Ë¯‘¡4(,ò^º@'¶wr/Ä»ôÞÅbø³.ÿ˜y鯥¿ øñG<Àé<4íçþ7„_¿#úâ á^üç‹Ü_?Çú×g¹?šó²ÿö~öOîa|'ëý›o¤¿|}ùskåO-•?ÈÀwÓøæUèÿ@ógø¯Ç’xõ2,·VâTIì `¾0Oþ®ü á"°«ZlÓH€ÿ[- Àl[J!îënêŠXìyþçå`aÿÿŒ\Íÿ­€ûÌÀÈ¢À¢àö+¦zyPlµ(Æ2üñAà¿ø¿­Mˆ6¦Q pb±êÆåšSko^­¿u­ñŽ–Ómwí¸÷X×ý7(8®„'!ÕwŽ)ï½^q÷Ň»o;ÔyóÁö[ŽÏ5þø-`+ÿ²¯r åàEÓÌ\ÏÄ”—}ýmÉTs4RÐAvI ¹E…=âˆWõI£>yÌ_ñÊB`N‰Ÿ°¯EÚÚÿÿßùÏ·Ûø· Á?ÄÂâDTœþÇ…©Äþƒ€ÿÑþžýa.”].?ßæƒ‡µ~ ûyò›l >ˆ ?Ãlø3-–Õ‰nûuzXn¯0] @žˆúÞ@Èã—’nJîö¡»]n©Õ.±ØÄ&‹Ho䩵ÀðÈßÕÍìì‚'»KÅUhø:½ØØƒŽÔ9­¨W†æw£Ññ\\—™ç4qF–+î†jÑPb€šfT”Ùº÷ù”;£š]ãÒ\éyû æm'­hkÐI7éBǤ#&Ò!ÝŽ9ížœf¿®$f Gô¬¨6"…zXÄüFfØLšiq35e¦ô›J3Æâݾ´zWZ±#Ûºs y{òiJ€VR®‹4ªÞ9fÚ;á(š ”NÆ©3ý¬™J/òc œ;Vx¯óž?ʼpŠöÉåó@ùÏž üûw©ÿõõ³ó´¯^e\|øÿ6 ñŸÐ¥w(Hÿ/¾Svñírø!Z~‹ŠŒíB¦™ÿâ»4Äp¼Kë}&|>~ñ-$ò_GF€º=¯æÏƒk ßð=ÚåèÄÙ.û1Þ9—>a_ú„àÿ–ü…ÿ?@fõÂ¥þü/ÞäöšàÓ—üyŽùO²ÿææOîc|rã£[™ïÜÈxåýÅ#ôsk´Ç–)ÿ{'i7ÐÖésý´ÑXy*Âø9Á+ះ%M\½MxS+iŠ.JW;¥­ÜÖFio§v·ÑT M˨àÚT<—Fˆù3ÉRfYŸµø?è®òVøQçõ|þÑÆéXða‹°`þkFÕ9þY¯|Ð-O»e)»…#×g`{tl"ü³òá¿‹ÞÓI;¨ºо“ ÒuQ1óáYPÞ”L€?Z v飩þ:~þû‘òðù RŸAî%¿G#q©$…ÈÞ-´w‰ Âüw(% àÁˆ#WZ@›üGH!º hmÑlA«kÞ®®8 £µ•ÿ›ðgøeó1Ñ·ò)p)çÆ<Ð àâU`Ìðj*èÿ%P–A €\`©ö敆[5á¡wi¸çúNx‚îÚè<½Þqçáö۵߼Òrj©åäBÓ±™ú©ÌÿƒMþíû×Àÿða'æÿ¡UÇÊAÇÒ¢uvÞ45c›Ð t] Öd¢1BÓ,^¹ß#óCÎ÷J#QØ‹ñ‰£~I<(K„äÉPe"Xȱ`"lxÿ”6=Xÿåµ<ƒš„úÿḂ]ð÷ù„áºR9‘lå*±…ÿ !äÿHTˆ@ ÀõîßîãâiÞðÌïqÐv ü„ø¨ÕC~â†w„},»›ëôòÝ~¡Û/òÄX^ Pò‡*0ÿ È®á¿Ý…á/4š:W¥aøßÙÅhëb¶v2Ú»YJŽJ'Ô$&“Ýl–:LèL„݄ơØàoÀ€¾†Ñf6 ÷WõJ¦ZÁìîf*»©Ú®Rkמ rgJ»c²‡´h&±m;eß~»kÛÞí·I7H§‚¤½ÛŽÛwµì:hÚ?ÕS’5“{-åI 'eå'm|Ò?æàNÒÎêµ3ûmÔkyÖ\2dÜ?¨Û= Ú1Ò±g¨mÇ „ÿfR¶ m4…`DµmÔ¸sÔ¶wÜS4)î¥Mg˜sÃ܃âK¬Ó«ìG×Ù/£x3å¯î*û»‡Ê~þåߟ£\Åÿ·hÀÄ|ˆîïÐP2'ø_X Î;Âåê=FþxÑö{ÌK2€ê/Ðó.ð6² ´Â»)¼ÑUïCø'nuAÝ~jìK½„ÐnÿË?f_YóÍoû!øõÂ÷„ß|õ6ÿó׿…áàÿó§hÿ÷£¬¿¼ŸöûhÜB}ëí¥#ÔgÓŸX¥Ÿ]fÜðŸ¦ß6Ƽaˆ±’aMõ2ãÔdHöqˆðÏuØ9hGº™§7 Ÿ*CÙEø··”·4S@m­ô®Vº²©ëD{ÝmJð? …õ’h4i’ÿ3ÎJàÿ°¯&¨Ë… ðŸ‰7ÏD›€ù³á†¹H#×pl¦ncªúИ|+ÿ×Öl€zÌü­ðßÊÿÕ'ðyɶ0ožž5¢U€Qev¸+=ÐÖ×ÛÕFÂUá@EÈ/ÁKÌ'Áò'éHeo´ª/V /ภ»d!§4`C!PØÿ %ü™´ü¿G+D"öûNßëb€?þ¥É˜$•ð'øŸÀ«¨OˆcqQ4& E…¾°È:7-þ±ø3@D·ŸA0%³•iµ#æoä÷DÞ Ø’€®\æ® ·úúCyaGØ´9Àß鑨œþ†>„ŽK\íÊQ(Ùþ;:™-ôæv<Á ÐhÁDF#:Oa1ŠÌ¡I®mµÁ×­N!&­ê£bC…VÉêîbCÑ U¶‚ìTìƒð? ß1g%rl;éÙy‡g×ÝÞw·ßÝ~G|ûm±·†wÜâß{Òu݆½xÞNuÐ\´´S˜q‰ÒqÚ‹îžîõŠSQŸGÐçâö;Ù=ë  [ËFÌû‡ »³Ú£]{rí»†Û¶ · ³fí¤‘NÒˆ‚4¢ß>jÙ5êºn,T<™¤Ì¤óCˆÿ§–wb=±Áxõ8í£[(?¹‡ü÷gË~þ4øÿ›Èÿý2õËWè_'Rú›Èù8´_Íÿ2Tºt¸‡=ËÑN¡÷(?`bìçõ}â¬î÷˜? _zJêÅw)Øöߤ¢B#¿Ñˆ°‰ÿôK?dÇ{ òÿXxE?`þçõcÁåùDó‡{ùCæÿ_ãÿþ<ÿ7ϳÿõiú?=Fù‹‡è?¼·üýÛÊÞ¿ ̓ݜõíðr\~؇?‚àˆöeÁh(« E«±á¼ (ð¿Ã-¶»D;$>$Ž ðWªYJþþ!ù7µQ[)MíôÖ&îiuh˜’Q'ÄÇßÀ íDF[ø÷hÏÐÍÒv3Õ]¬Îf{ŠˆFE™G¹/©Ù>dܱè mxvçï ì9Ú}_t÷w’»ïéÛ}:µë®äu§£n ”Üà)[vS&¼Œa+ëù$Ù€4¬¥²~¿8ò <œ¬›5ì¢åìå£Ö¢‘ž½Ãú]¹Îݘÿ#­ÈFÚH¹NRNIÊéH9óΜsïX`ÿD¢lºŸ:?Ì>8)þß³Æz’ØùùÑ­äŸÜSŠùÿËgËý|Ù§/Q>…ö§W)ß¼^~ñ2¤·˜ÿ¨çƒú?¥ oÞ-¹x¡´ÀüËïS!·_þrù{ÔK²0ùQŒÿ>óòG  ý2Pý{¨½ƒüŠ…·iy½Ã½ü6 íBUñkàSÐVœÿ—$&$EúXrü þ£æÁÿKø8ÿÿ÷˼_?Çú—'Ñ9ßï+ÿðtÙ[§ŠÏ-~f¥øì\ñ½S%wN–Þ:Vvj¨ôø@ùFº|)E™ˆÓb´D˜ò²}¦ËŽ6|šMlcG«ç(Tô®.Z{;µ¥…ÜÜPÖTWÖP_ÖØ@in¢u6øÏ·oáÒ$ïµÈûm•®ª!o-æ?äÌÿ¼ˆ†NþþÓÁ:€ÿx ÿ_4è’ÿûíâ¤M%¿_ÇBðWÑqçw~PÛ§µ\ÛBV6—b)ZJ•­e U»@ÿÿ­ü7)8ø/«šOø‚¸7-ø-ÃÂ?ðߣìç- À'Ñrl–65: ¶•ÿ6ðÿÌÿM àÂ_>èjþç- àÿÿøïް0ÿN4Æ'àÏ!þ£ ¨ÀüàÐF ,j•`K9ÁʨpuL°ÕŽÍWƒ° r`±tb¡úø|Õñùšëg*NW™ª\Ÿ¯IWG¤KC¢ùþâ‚eyɲrжºb_;äÜX÷€Ö»Ñóˆ÷ð†gmÝ}è°ku͹r( OÅ3¢Ç'Õ¹1Åh®{d¸3;ÐÚßÛЗ¨ëצÂUÀvP*TÑ®õE*Ò±ªD ^2ñjxöG«á§’à^yØ% :D»Ôcý éVÒæ!2b7)ÀßÎ÷y„¡€$–§Â¢Þˆ¸7&éÛä*)àc¥zåy¥* y<. Ä+|Q¹;$qú%v/ äÀd“•Oz¸ÖcáŸas°î<ù>.‚P‹ƒ ~†¢ÒH¬2¯"T‰U…ãU‘p(B»ýÑQ¯@•ÛWa÷ʬn‰Ù!1Z…:Omà(4ì.»SÉêèæ´u²šÛè-Ô†f XÊÿŒnD>´:Lœ cƒòçå @m15à¯Sò5ÝTü÷Òß¿…üê±Òï®S^¦žž¦Ý˜cldQÃg¾Ÿ=ÛÇìã 'y1n"Ä {i~'ÇieÙÍLKÓ¨géth{|=´´Òšš)õõåuµ% †Úâ¦úÒ–F²¢‘ªj¦ëÚ™æ.®]Íwk~ƒ(`›ä½vyÚUùØW7l óAS¨ÕÓ0j*h&Òω@ÃüJ?Òˆ·fÈ]5èªpÖ¤íUð»ÅL’pÈoxu§†ëPsl*¶EÁ2u1Œ4û•-Ô®JgsyGS)¨³¹ ÔÕBV´QÔmTM;MÛAÇW´˜ºXftW#ë °*ÑļàÐçwz "ŸAì'„:ÿDò‡§O  ñt‹Aî.ŒÀÙ%´u °8”[Ã?¦F€t"Q-ñ‰T¢¾`þATéÍHðm‹^,Ü-b¬ùå`“cë¹Î•^ÚŠîvxó{AѶ7Äõ†9¾×aû£œ@ŒN 3ªˆÿ}èþqâRr~&-Ȧ9#i”ÿG¸ãC<°€éþlN°0.\­L‰V'EkÓ’Ã3Ò#32¢#„™©82†EÀs˜?%­MHVrbÈüKCâ…ñl¿hºW1Â<¤úC«ŽÃk.Àþ‘ oÞþo…ÿò Úü3¿høÏ̦ft[ù?4Ø6nÎô6ö'ëûcµï‘ùç1ü³©:v°ø8ül*T÷UDÜR̯E„ç~cþÛŒhR꣩hh[©Ç)Äá?–^ÃÿÞ¤øß›’õöÉûú+úÓUHý5}}Õ`ñ8ÊêˆÜ”¸}ÜÁü7šÁ幘ÿDþgÚá;уÈïð=A$`~8&‹ÄåøMTÄÕñd ^À3R ü†+¯â¿§Ââ”öØDð%¤1r”:V—ŠÙ¡`¶w3 ê·´3šZiˆÿ-åÿÿt±4(LÍ2¨Xø¼<ÀߨÅðçè•\­‚‡ù¯è`+Ú階rsW‘W¹;¡Ý>bÞ6ëÜuÒKº-´ãžÄŽûRÛØþøàödz¤'†w>2¼ûᢻ³ä›2”#}Ì•{.Ιˆ²³QéH¢2—ªÎõÕŒ¤kGÒõÙÞšdE&*ÍDÄ™`0ÀÍz™Y'5c-I÷Àüî¾Âÿ±n”ÿGõÛÆÌ;ÿ¡"àÿ4ð„ø¿@Ãüé$ã½;˜q/óodüÓYÚ/ž`üêó¿žc~ú"û³—™A~ÑÒ`aP0—áÏô '“‚ñ8o~δÉ×á5À¾ïȆ»@ÿ[“ÿü¢'Ðä´v+ÿ‡³í`ÙtË@_Ó@²!“¨õG+qÚLÖù‡û@C½õðÉÄk ¨Nª¢YÿÄ€ÝõÖ#q˜€ü2§UNLE–º"¯Kð‰#!Y,"KE¤¬T\ÚKÀ¿¯WžÎT Ö fë²Cõƒƒ étmoo ð"z0Š:3¸'“ç¿Eˆó?q°‹kurpøwûxû1üQÄüd%<㩪Dou²¯&Ù[—HÕ.PKÔÄ¢UP„"U`•/X üwy*mn¹É.†ð¯íáªôìn5«CAo뢷vÒ ùƒÿ[)ÀÈÿ­ŒÎ.†RÅQ«¹ü‘0ÿц(-‰ Â?æ?Jþ¼îvä]W¹UQPïî3l‡ð¿ìÛ}K`Ûéø®3½;Êì||h×S#;žÎí|j|ïcãûÎŽ•Ý›£Þ2Ä<6È=”,¤„S Áhªj´¯z"]?1Ð0žmlÉ4 ¥‘ &dÙ¨x8,öC @´—¥-ÅÃÚÝÃêÊm`hçO7i\¹}T³m̰}̺{·o*R2•$Ϥ©‹9Îê´èŽyÆ™UöãGØ/žd¿{+ëã»?¹öwÒö(ã—O2ó]öoŸgýþEæ^¢ýÏË”ÏÏ—ùZéW¯—ýé52Ñ¢€8ÿßüÚ_ ÌÔ Â Äðì_`"½áŸN{}¸ù‰˜ÿ?\ÿÿ?låÿåïs1ÿÿt÷ùœßŸ#cüâIÊ?>Tüã»Jß;uàå#ûž:T|ß\é͹²õþÒ¹Xéd„:¢YýAVÜÇ ¹ÑÌ7·•†áߣGó|º:È­­å8ö×Ô««Ë*+Kª*Jª«ŠëªJkÉ- [Ìö&ÿEyþ›åDþ¯Äë¿›- Æ ¢Ãƒi¿•ü€ýq=hÔ[;ì©ÆðÏØeð›$,2ƒ0 "ø«¹v 7«üu­åšærEcYwCigC¨£¾´­ [Š( T­4u]ÛÆÀ€\` ÿqÿmݲŒùïÕ‹<èOàeß«ø¯º»^*ðZZVбØUBÐVÀ«Àùð—‘äGM"ø¹ ƒß³ ˆmøEkbca (¬c „;BùY67.®lŧÀzÊËŽy8AÛçàºí\‡…c1 kjõj´«­™ÜØ@†Ø_UUZYY&—•ɤ¥²’JyiMEI}5¹¹¶¼»‘¦lœ¢þ¿M)Øä¿„Øÿ_öÚ«œ5ƒ. zmÎWÙ~ÔPQ¿ùqìGŸMøg]Õ{E¿ý&1“ àïÓðWrþ@þžNºÞFÃðïª/é¬+n¯+µÕƒà¥µ¾P(šóÒ´b`ê:Y Üÿ1)8h`s#:¦€Üz!ÀJ·†ïшpþøøò/˜ÿØòûBÕü‚¬„ð.P´°¨ÅÛK¸XF=× ãè Hh¶v^Á_m`Ã3¯¶ƒ‰c°nÙDìÅüG³@ À÷ÊÏ‚Cƒ ß¶v(ÎÉ[@’ U¸@¦Wéã.€óðvÐÉAÞT–?7,œæ/ G„ ô’åcÔƒæ íϦö§û8@þ‰w,ÆògCœkvƸ0oÞÊÿ£G–ÿ KÖ¹óÌ\ÏÔŒabJ7>©›ÐŒŽ+GF»ÿ¹‘®Üpæ?(7Ð:œnÌöÕä‡új‡ûë€ücƒM ÑF¤L3aP`þÇ}h àù€óh ñÁß"÷Ø*ј8«Œ8DŒ‘…ýÒXHžˆÊ7á/ïMTð¯ÈÔü‡‡F†G†›‡‡š†›3ý½õ)çZ çÿmv X€Õ&´ÙEè<¯Kàððž|ò÷†„ùðŸ@ا ùW$z+“}UþH}õ M@U¸L0T üwû*.¹Ù!Ùlþp·ðŸ7ü€0ÿ[ÉmíÔnK£áét<ãfeж«ÁW,a„ÿùˆÿ ¾¦›‹ù¯êæhºhfÙ«-JöŒ™·to¿>¸ó®éLïö‡2ÛËî|*·ó™‰]ßÜýÌ̧gÉÎÐÏLqoÏI×F*—‡ª²5³¹¤±¶¹ñŽÙ‰Ž©ñö‰ÑÖñ\ËØü«Õ¦krIùhL<âù™ƒnÚ˜íÀ¨yßhÏÞQøCõ{Æ{&M×Mš÷M:öOyK¦£”™m6Üâ.‹Vgå7Ïsî^ž]œ;Æ{åJ€î`~r7ó'gXóóŸaÿü Æ¿?MûÍ3Ôß>[þé äÿy©è‹—‹¿<_€Žn]ÃbçÏ•ý?ˆ ü˜ÿxb ó¼­ü¿ô=bª þ6Â>ÿ×ò¿pøë[UÀUüG³€òû?Ap/¿Ç»ø6÷óWYx‰õŸç¨?´ø§÷•ýàöýoܰ÷™µ}÷Ïî?•+^í-“3^JÜM ;™Ïcå9-|»M$èÑqt*¦²‹ÞÑJ©¯CÝ ¿TR"—ˆEÅ ©¸¸RRZ-+m¨¢4×Ò»¨Àm+Dh±ÿSìÓI‚zqØ(%Ž ÈØ!Ì× ¹ë†=õ€÷oMÁ@8öcø¸«³®ÊA'üú*àŸE uD¤G„ø’?àoébbòÚéºV¨>þåÝ äκRP[-RkM ¼·×A9@îjDênºâØ´LXÀ•UàMþãƒ`¨ Тu-ü¹ÕBoA›€ B®n½›ïP@ßæ?aHþ¨ ÎË cƒð­ h¶¶Ž 6`± üÇC 1ÿ± Ø™›ç˜W,€¸ l+ÿ¡þ;‰A„° ` ˆÄXÑ8rüq€$¯?ÉGsሹ øP0râPðä z7“åÏ"Mg¸³iîL?PÔËàO&9 ‰{,ÆÌE˜CaV6Äò§½¬>7kfÚ€ù¿ºâÜä´q$´¾\;ì_=ä]Yõ,t-.9æl˜ÿÌÿܘ àù?:%@G.Û>’måšÁ0íûC-“í xg›ÇZFú›“õéXm*\“VÅhÜߎnÁÓáÜÖ €¿×^EÀMð»¤A¯4ÆÃÉR*^ ðïOUeú€üõCÙz ÿh®kd¨•àsº¯¡/U—ˆ7Ä¢u¡`•ß[éqÉ\™Ó.Ew ; an!q¶ % ÿ|øOVl…oº†P¨/Sß—nìíoH¤êÀÀeBáœÿ ü7X„ÚžRËÁÍ´Û¿ƒITÔæv ¨µá_­fëõ|¼ç­zÅv½²]¥boòŸXüUp¶ðŸ¥í¦[TeA]Q¦g÷”mûaéÆÈÎ{¤úIg³;ÚöôØÿé=ÏÎ?=G}d–ufZpû”ääDÕúxÍÊhÃÒXãÂdçüD<¦»çg³S]S“Óà#M“Ù†ñtõxJ6‚@0é)w•ŒÛ‹Ð_ËþIëi{Ñ”³xÚGž Sgô¹4{v‹ö­MHVg+OÍ O¯JX—>~TôÜqþ«§8nfïÖÇw³þò;¬¿~ý°~ö8ýOR~óLù>Wþ‡ŠþøBñ/•~õJ)ð sÀç7·€D4ó‰› 6ð}.†? êñ€ÿ?Ä­øù± üLJ‘ ü/èÞUæ?è{ØP¸—Þá}ùë³—™¿ý.ý—•üÍýÅ?ºcßÛÇw?»v݃ón-]ë'OE)ý^ZÔÅôÛ¹‡Y`3 -F¤P½š£ìbv´Ò ù×T—TT”Bæ ‹ü">ï€W$ÉE%UÒ²ú js ³³ž¦h¢«[Y†žU!tªE^­4 “@ 1H‰]@•i[%X@ÖUKXâ¡ (Àó·}U¥½VÄÿ°QâÕ ð7u0üûu-tU3uþäŽÚ²öDþ–êâ‚¶Z@gCyW#¥»‰ºÕÔmtÔê@ð]…qùYpZžCƒÎ5»4|à?[@ÿ>X€€ˆØ„øáïT *.ȦâØT<±¿„'‚â²í¬ à¯×²@Z-[£aa©µHh«ž>/°,­©3" Ð[˜Xy°3 1 `l½ p)$:ìG£&„ à³È"Ìá‘o Eç‚c¼$1m %\`¸Ÿ‡„¦yã>h*ÃM¦¹“ð{Ù“)ÖD’9g!àÇÙ#1Öp” ʆézÆÏÈø™ýf¯‹™°3f&õó3=Ä€ëЪgý°ÿÈF[ðÿðzàКoõeÕ·|г°èœ³LϘ&& [ø¯Äü#A- ÜP+h,Û:J`45Ò63Š4kA?#lÍ´‹ý±úd¨ñßSpWùœùÁ€ü Ÿ£½;ä>§ øòÉPó'\ÑEüïMTõ§jú볃 öùc£mãcí ±\Gn¸ ·¤úšú“õÉXS<Ò Ö¼èºa·S€åpJÐ$ÈåºýB€?’?(—=ÿ<ÿSýÕþ#øo , Àÿp¤6®Åý«KFlþéL|µž§Ðp‰=ÿìÎ.v[«£“Þ¥ àOLÏ–8ÍH¨2¢›¯á{!_´%@~ýW‰Å1¨™N-%j,Κ÷Ì:HGý¤›cÛÏô’ =–%=1B:7¾ãÙ©ÝßÙûÌ\éS ´GæÙgæDw“gëŽN7žn]é88«\šU,Ï)—æÕ …yÕܬF0;Ñ>k™ªŸÊÔNöUŒ'Ź˜`&ĘÒ'½ä w锫tÆU6ã!Ïø)s!ú\œ9ßÏEuèˆh.'^œ”¯ÌVŸXÞ¾"¿÷°ì¡uÉ“× Ÿ¿÷ÊIîÛ7ñ>¸÷ÑiÎ'ßáþä~´#蟧þÛÓÔ_=Cùô»ÅÿýX@é—/—]Ãÿ-€–ЮN°€÷hùc¼Äz.êölFzbD›5ê?ä^ú ¯<ÿ?Ü, 0ÿ ŸÂGƒ=A?ÚÜùócîµü@% ˆþ¿ËùêuöççÙŸ>OÿÕeÿð@É_Þ¹÷½÷¼´¾÷ìâ;&ÊÖÈÓ1jÚG¸X^’?†?züÙmô–†r€¿\Z É2?ŸÇÝÏ㠸Ȥ‚¢ qi­¬¼¡’ÖVOíj «ZØúv®¹K`W@6û®:PÑo©ÚR\áÿX ¾`¨óïG+¿ùæ¿»2ã”÷Ù$QkEÈ$þ;Õ<›‚mîÌÇ~u ÿ«¾“¿­º¤µª¸µ²¤¥¢¸Y^ÔTÔ\ù¿º€¢™¦Áí vÞŠªâ8Xa"èVþƒÜ„xÕü­ü‡'È£¸•|° ?È¥aþÛ•<̼Āo ¾‰Øxs^‹Å*À¿À,(Û7]I«g£3kSŒ¼Ø„è„ Ð‘œT4a€ÙM%ö‚n±â8>ŒG…#ÜH]e‹¡ØúÜþ$/“âfS¼‘>^®Ÿ?–æ&úyã}ܱ^ÎX’9š`Äü¡#b€}‚ü4H}Z¯‹žtÐã6t¨j\;7m\š·\t¬®¸¯ù6ÖØެ‡¯‡­€ÿ ƒ+ÞÅ%×â‚mnÖ<9e ׎iÇFU ”ÿsÝc9Ôø·´O íÛø€ýÙ±öùÑöÙ‘VÐt®>>‘mþC ímÊ$¡ˆªCÞª §Úïªô9 öWÀàß1ÿnÁ9qšLžŠU÷%j3}uƒ™F(:Ð:Ú99Ö…5ÿIÃ#ƒíC™ÖLos_¢!oND#ú€§Úçªô8äX`n§qCóDž€È–Bìüà 9^ð-„ÿtº¶¿YÀUüO#ø- :à0RãÕ¸½UPØR‹MÜcæO~©Á¸Ý Ng7 äïVâäÏÅ×\¢ÅâN4/q-š×œ‘jÑç'ÂW¯‹¡S ˆáx<«Žíí¡%­%ö] NÒ Òíñí÷§Hg3¤Ç†òüfz÷33ûžY({z‰õè"ÿþEùÝK ·,¶[hÛ˜ïZ_PZÒ®.jV–µ«ËúÕÃÁeÝò’FåÀÜdÇÌXóìpãô`ÍTåD¯|.Á‰±§ÂŒ©mÊGA“Ÿ³aæ\œ5×Ë, ‰çr’¹1éÒTåÊlÍñ…Ê[VjO¯U9,xCúäQñ³7^¾QøúM‚wn|p'ïã{Øÿ×}Œ¿}ˆ ð¯OQ~{®øwÏ”|ö\)”ß¼JÎóÿí2t#Ì&ù¿y§ü ÿ¡¸@X^äžc øi“ÿXWø_h mÂ?¯ (¸ÀÇ‚+A· &F@pòpûõ¬/^aýþEúož.ûÙÃ¥?½ûºïß´÷µ£ûž\Þ÷TéÑMþ‡L•c3sÑ2ߠ᪻ímŒ¦Fj]mY…¬H$< àïø³Y{þ >§ø/áƒT‰ËÀZkií 4e3KÛÊ5uòQ  BíqÌÿ¸‘à?ÑÂùàù?¼VWÎüúj²žªWEÚ!‹Ù*ÿ yþ›ºPÃ_ÝBø+›(Ý HþíÕeìã'â¿ì@£ü@ÞªJZ«Qi€-»QP üÇ;‚ àsÁJ&Xæ?Àóß©â‚0ü=*ˆp>ð? ƒ`þÃÞ¡Rp©NµÀ¡âƒ®±à?ѨŽ&öWcþë4[ùOÌæÒ°±ÔZÎ;`,@kb€\`s\¤ÞJ#\€–—ƒBJ›ãÀa¹tw†ó™ 0‚`èZÀ@\ÆíOp“Üá^þp/w$ÅÍõòà9”`çâL€?0Dæ§}T‚ùÔ^7”rQ’jÜFZ¨5ÜCƒü?;Õ³0k XYr®­%ÀzøèFž‡C`k‡Ã«‡‚WüË}K ÎÅyÇü¬mfÊ<5i˜œÐiGsj°Ô"VF‡:€Ã„ZgF;þ ÿ c‹ãàs¹Ž™aÄÿ±¶\ºe¨¯y Ù%@*\É<ä«õ»«À®jßYE¸@%úˆ»"ä­ˆ*€ÿ‰Heo¼¦¿·~ Ý”h7næOO(f&• éqÕä¨bl¸‹à{žÿ±Öx¸)쯃?Âë¬Ä#€ZÀç©ðyeÄ0±/$þƒ€ü hª2¿Û‡€ÿÀ@}&SêËÔöû@˜ÿÄ*@^þJ°»S@L~àku­F¨Q *&H©F_r:ÇdäÛ,"·](à@òƒ  ù¨HÎÔÄ`^~÷ºGÒiâÍô>[Ù¸cïAïö!ÒmqÒ}}¤ þ?5ºý© àÿžssûÏ-ŸXbŸ]Þ¿\y÷ÁÆ[WÚO.+Ž­¨­êÖ×z@‡Më‡Í‡×L‡ÖzVóF° Ò5ˆÆZò0P=Û+œM f’üÙ8o6Ê sfcìùw¾O°AW—.æä‹ã•ËS5gëVæêÎW߈&Öa 8{¤â‰cò§®—<{\üÒM¢7o¾š÷ñ½ÌŸ<@ÿûG¨?{‚öOÿö\ÉgÏ’¿x‰Œò?º„‘‚øÿn9ž ‡FÃm?x8Ï‹, ŸêûhD'¡‚ n’ÿ⬋¨dØÒÚR ä½à#^~ìÏæðO<݃[@¢UàoÞâ|þ*ë¿_ ÿþPñÿsÏu?¼iïG÷>µ´ïÞ©’²ä¹D9„±°‹á¶²ìžµGУãh•Œîvrs­¾–RUQ"“ ûyÜ븜}Ö~—}€O”bÞ~२¤FJn®¦´ÕÑ»…ÀÖr¯_+jE1ƒJ€^³,mC]ý!w͈¿i?qÕüçü,ÐÉHÃx¸~4X;ä­tËc6yÈ"óEN ×¢`õt¢ð¯l"ðG=û ™_VÜ(-Á ð?oD!j«)+Ø”-ÔÂŽ ¼)¨p4¬GÅÊoRsqŒ‡ð±ÿmárÈUx/XðߪÄ—ÂðM*>±ˆFl®Ópõ.ÀIÍR©XJ%ÿðMªÒ0±ˆ¾â?^ Ðô0@ ÐYhZ3žøH©ÁF%ÆËÐQGÈE `¸Á»ÓÏÀëÂø‚¬@/@ó¢Ã,0‚x”›ˆ°z£œ¾8'çfâìÁ)ƈ2²QZ6ÂÑ2Az:ÀèóÑz=´”›šp–Ç䨱–‡Í”‰0Rü†ò©1ÍÌ„nnò* ØX bþY‚6G ppɽ¼è ˜›±‚LOš&Ç㨠РFZ@ ã#]㹈â³cyü±0ÿgGÚ'‡ÚÇÛQ ¨¿%ÛÛ’Žœëbáz°€ ·òyÐ]€äBÝ¡ˆ¿*¬Œ‡+!ù÷'ëÒ}ƒðHûScÊ™ 5Á%ÁÿΡtg&ÕÚoþ'#ÍÑ@=üÎØY ¨@Žã­ àÑ~)ðŸð Ç+A[øz>˜ÿ¸¸&ÿ'Rµ›«ÀuÑX}(Z‹J_…Ë+wzdV»Äd|ƒA × uàZ.Îüy6“Ðe“eºü%ì® »*BŽÊ ½"`“ûñÉ&q~Dša.°öw☄n 7d£§ec®=+¾Ç#ÛnOl;ÓøÿäÿÑOMî:7}ݹùÒ§éO,sÏ.Kï;Xs÷jó­«7®ªŽÒ_3ݰ€ŽlXAë–ÃëæµÃÈ­¡"X^T£ÖÐLçâDÛ|®y.×0Ÿ•- HÒ’…~ñ|Ÿh!%\ìÁûÒ€laH¾8R¹8V.ÿš®[ž©?8Ûpd¡þ†¥4¨d¥öÎCÕßÙ¨yàHÕƒ²G®—>}\òÂ)Ñ·ñß¿“õ£{? 8KÿÕc¥ÿùdÙ§ß-ûüÅò?½‚fµ¡üÿf)¾mEGƒÑéàoÞ"燢³ãÞC··@¿ø1Òù[üG°øß²øD,4ZðÍ8ȽøCÞʼnpè›Ïÿ˜ÿïs¾~‹ýÇWѦ_?Uüo—üÝ=û~|óž7î~fùºû§ŠOdK“åÙ5ê¢{ll»…c6‚Xª.JgKq]M9À_*>€áÏaïa1÷°×±™ûþï/ð_.B Á•d(:ëŠ&¦®%€¥“ïT¢ÆH@# Äq£8…ø/tV ¹«€ÿ9tÛc-&ÿT´n:V?o˜M4bM'¦âÑzøeÃþʤ«"j—L"Â3亶Â9æ?‚=€½¹²ÿ^zÔ Ë»¶\ä«€j´@\h)š)ÿ1ÿ íIJróÿÊF Ç®ääÿ’C^¸×ðó]°U¨ Рڔ̓‚×£DÒ+¹ Š¥Q"þkUllˆÿ*`>jó‚(ÕŒ-ÀV™a Кè MÏ5@Ï[q/$^(T]±€'/t_$Ó@#‡9‘'dÆÃìd” .ŽqÓ1¢œþ0+¦õ‡è}AZÊOKziq7%æ¢F”ˆ£k—ù‹+Y?¼%õ?ÎÿÂæ±GÇ/ÛS÷2ýòB•ð?ºÕ½M•ÝÜȉHvJM¹¢,ƒÿqNöqì 7çáÿ”¢üÔÒ‚Ôò¢ôÊ’ôúr·ÉØÙJ~®Z˜Û.ÊÓKó &ea¿ªx¨­Ä¢-ì(›5VAIŸÿPm¤lï²°ÝãÏ×;ÉÜ\×8Çiá¯.Õ.ôWM™k,ÆŠA}©¹­ K•§kÌnÓ”B¼àó„ü38 ýúÒT NÃò%1;@tÄŠ Ä\p¦0’þ‡ã°ÿ¡øÇþï$è’ç$Á)ðYpØÿ ‚ƒí€Hú¿UNÈ_žÛ 4¿‚l¥œÕL¤ÐÔ”‹ïãh$Žgp)ÀL¦@“*»±…4©™ â–Xú?‹&ž ÀsÁÉC!ƒ"ÀœIÞ ô˜Xº;ÞœÓkbö™YC½9#ýyc¹–Á<`b0ÇÒÏïcŽ÷2,&Æh7mÄHê¤è©ý:J¯†dn'›ÚH=­¤nÙØB1(IM$0¤cµn{«×¡ z:£„ÿ7cÃ[ë#[£[c›ñQˆ€õèP,2 ÷‡ƒ}ŸÉçéö¸º\އM·¶Ún]Q[—›­Ë ÄJ#üï\–üÝVö?ÈãZ’:%ØÿKÓÂ…Iáô8orŒcáàê¯ìm@)Ð]‡hºkzk‡êF‡êÆGÙPùÏÍf%Ë rBþ çZ³ËÖ¸­Í®Uð3üé¬óM„ÿeþŽò‡ú88Yý…±ü# áÿ¾ŠÞÁ ó0Ú/Œý?2†¶zÿÁü‡ý‚ϧ¦8“ÄD0òÿHÝàP=ŽbÅi ¾)²S_ª×–hÚ Û[ ÚÐ5÷¹ÚV´Ш/1J ù— u—÷T ÷T˜Áîjè Ð*©Î è*7ËLÆ’žb‹9®—a3gûOlÙ=rãÄ¿\š9rÇâ±+«©÷Ú2îsRîófß(¸'Xqg°þ–ÿ|Dz&ªØ‹©w7t»›'·º€í®í-Nk½@¤=nT¿2ìm‚9eA;?hãW9¡N`©!¸PÀ‹¹Á·ÊöY9>×oçù]‚€[ôˆ"^þºOð6¼ w7ÂÞ°O…ëÎÅjoŽWß¹UñànÉ3§ó¾|!÷?.å|ïöÜ_\¡¾~/ýÍéo?J}ï)tàÿá)øügtzq˜ÈÿcÌó”Ä'/¡û\ >úâÁ¾_=8®ç`Øç@þÉÙxGÀÇ_ÈþþÅ´°ÿï_ÊÁAŒ&á5BÄÐ!ÿW²ñðß>ŸûÞsÙ~’þ»‡H¿¸Bþþ-iàÿ/n{Ôô.[ê©ùô …4ßKÿ7»´,m[ŽJÁj’ÒÄüL^݉ª rYIFaAJ^îñDñÏ:Å?ö^nJAî ˆ€âÂÔÒbäÿº2h¨üZ´MÜì~¶Z˜£‘äþ/èo-Ñ”X:J'»ÊæM•‹½Õ«ƒµkÃµŽ±ð¼gŠãŸæfø^p–ïŸåùfxÞi.|ng¯ŽÔ.UÏö×Nš*G %ýºBSk~gsŽFÆTIè\´žüÏ«NçT ‚´_W’‚I¦»4J=¢Z4„§äœ„ÿÕ‡ü6³ÀZ´ËÉ_/ÏÑ˲;¥ÙY"rGÀ¡øGÿ£àSþ¿VÿËòG4¢¥t y¾•"@Þ˜#‘2qjP(à_œ’‰Á)ШbA@Ǿ:P…na D¸ Hý¸)†Ø5œÝÕú™Ænfw adöt1Í=¬^Sö€)gМ;Ò‡îÍ33FMÌ‘TŒ>=ͬ¡šÚ)=mäîV’QÕ¥"ZÈJ•gÙ›@’ JÏšÚg×Üa_W,hÞˆôƒÿ·ã£;c;ë#¸€úÍ~/4F·Ó€ÝÚf[U­­´¬­( ÿ7"ÿ¯ÈÝ«x•ÒÿŽƒúü??-š™àC `ãŽrFÙ¨ Àþ7%†ƒàú‚Ñ¡†ñQîäo~לÚ ha ¿ …Áþ÷¬!ÿßrͶ¨$üßþŸ—NŽŠÆ† ÿ›úzê P ôÔ¡á&ˆs qE{%>ÌÙ4X]Ààpõðh-öÿø$;éè9Þšåð¿Dü*gbœmcãª1Ã4•õt—tK»»ÐiÚ}{½!î!íÔvé ø/Aæ7UŒ˜*QsÕaÆz«GÌuÃæjH„Ac|'Ðo*ï7W ö–ö—M /d;(Á´á{£ÇÎO½qæÄ­‹é—WIwÚ©w9w{ò¯øKî ÖÜâÞ‘Üi<UíÇ5HþÛ†½pr§ØÞ2nmváFž›q]<¦Ùˆ´ÇÃêxH 4G|а[vŠB6ApZå…V¸@p…ë_åú×x~;?àø¿St‹C ¤@Ä#Œùþz€ñ6CÜ­g7Òp&Zss¼òîíÒÇö _>—û¯7å~ûÖœŸÞAýåÝ´ß]¥½õ0•BzG×{½ˆæ‚ñ¡ÄÅ.0ÿGÏgý¸Ìñ<´”¿Á¯~žþÑË 4„æyóÐîÿ/ÿ›Ÿ ßÿÑË,€HÜ^Îàåã—óq.|ü¥œC E.±ù+‡ØG€ÂâÃsþú,ëOÑ{5ó§WH¯Þ’ú¯§¾?òˆïȶ§çÒcY fäC; Š…œ%Ñ쬆ê”òÒÌâ‚4|Rþ¸ø‡ÿù9ÇáW‹ RJ‹SËKþçÕPEµt9"€©d#ÿ7åu7 ´èŠ' ¥ÓÝåó}•Kƒ5¶‘:‡¥Î=ÉÕæø¡ah^D–„ð„wø‚À5Ͷ×[Gkæ‡jfú«Ç{ʆ:‹ú´Ý­yÊì69³YDmäSDõ™àvyj²ø¯)M9œ %©ìÒ”d ¬Îÿ‹ë } @`ÿ·ðòOú_#cZy¶®1Ëè°:¥¬ÿ/ÿw6€ù1J´àà^ø¢ÈQ5" ð?˜¿QÊ‚óËd, Z›'cap ¹€¦lðÿ¡^à ˆ üÏÄcAxR¯ "ަãu¡‡Z|ùlâ¤8b@öÁÁAÙ†nD§‘tu˜€±‹Õm@˜‰Û¢û{r€¡næ ‘1Ÿt0zõt“–ÞÝNíj%ƒö»T”ÎfС ë›ÈYf»4˾€üïZm!üßtéÁÿÑ€)îÛŒaÿŸÜ ¶ã(P/…‡#ÁÁp` àíõ¹M8 pÚ4޵V»UMD€ûE¼,IxÁïŸòÿì$±Dgœ0:†¸Ö˜Ð¤0¼Ã‡c‚©I!Èa^º´(OÌ_ØÔøSþW¡¦†ðÿꬂðã´E21"<ìÿ~S=tƒ¦" jÑ_¥·¶·Õê=½Äé•Ð U @ýöùNLq¦§¹’¿æÿé9.03ƒ€ïÁ0nጎÔ Öô÷UöšK!z{ÊÌÝå=]è £N]Q‡¦Rì¯-2u÷u• ö”öVcèô¼ªñêýµuム€¥¯~uŒ8aod͆Œ¡Sµ«fGË—G CŒÀpV|4í¤%õÌTÚ ³é7-‘/­Òn·1ïpåÝé-ºì¯º#ľÜ‘Ÿ‹4ŸŠµîmêw·»'»OíöîŸ4»'Q ìlwãFžÛ›(¶×u[±öÍH+DÀz°%êoŠzä—4â„íâÈš(lׄA»(äb¿3AÀ% º¥(¼âˆ_ øÑ0l„¡h8«¹¼YþÐÉ¢ÎäÿŸ ùß¼9÷Ç·Q~'õûio>H}û1ÒûOe~ôTOÝ|p€?ºÕ‹ü·ç2?~6óƒ§>“@à{äÿö¬N\옋"à+ÄBÄoÌ¿cˆã >þ"¾™H &A6ð·r’üýEôÉÇ/!Ï'…ˆñ"Âÿ_Ìýûò>|>û¯O³Þz”öƯ]¡|ï–ôOù?4š5o"èé­,•"[&f¹4NmfMù‰Ò¢Œ¢üÔüœ”œìãhð‡?ö?Žè òó°ÿÓ±ÿÙ•n5MPM•4Ð9 ð¿VšgPä›TEýš¢±ŽÒ c錹|q¨je´Ö9^òÃùÁùÑeQtE$¼Ÿó}ó\Ï,Û1Yo¯]©™¬ž4—K zµFu®®9[-¥+„4 ›Ä¯Éÿãâ¿¶øDu ^Å)D¤$[aM&ö¿¤ž þWriÍ<ºJHo2ÚDÌv1ò?&‘R–NÊùcÿDÀ?÷ÿáY`Âÿhâþit*ó±ÿ[ˆU m¹¬5êì0¿*ÂÿÐ`ðR½ÄÔ@S¶¼‰#§€¼ùÿxÀÁºP|:´W$.?ˆ&qþpW¶ÞÀ: ¹è>h=«Cw€–Þ©ctu°ŒÙ݆œ~ƒ0?Ó¬c˜´Ìî6f—šnPÑ:š)z%Y§ i›HšÆ¬v©UBR‰2KÎ%¥gUåµµúí!wG”ðÿz¨w#2¸½>‚ý¿»5ÙÙ@lÅÇ7bc둜!ЇG„Œ^§ÁíÐ9mm¶Õf÷ªÂµÒä\nü”ÿ‹;žÿ.ψfÄsSBh °‡€ 1 ÔÇíð22ÀåOOJæf¥ óòÅ寫ÒimuÛ[=Ž6þDøŸ¨ÿ[°ÿ¦ås“rðÿøptX02ÄîçB ö²ÁüØÿ¨Ñ0×™ÌhkpW:´ÙØWÞ;PuÈÿhŸ×Ì Gn$|ðÿ,˜åø{¦&¡OáŒÖ¡C*ûûÊû{Ë Vï3¡4tÓYÖ¥+5hK øïÑ•ôJ¡ž‡²ÿÀüÉ£óê€é‘ú™Ñ†™1þô(Þ‰k'GhÔXýŒ¥fq¢Új)qeF©–Ì“ãûÓ™çæ(—h·XY·:rowÞî­¸Ã_{{ˆ)"½i:Qí¯·ïm•ÿ®ü9;Û];›Èÿ[zðÿöºf;͸ˆy1wSÌÙu¢ @Yà”„]Rp>€åŸð¿W„|’`@ ‚â`HŠ#ЄÙÐܺQqu§èÙSy_9Ÿ÷ï7æþðõg—i¯ßKÿÃç(~˜ô×'ÛÑ ¿‡nõýÛ³däü§Ò€÷ŸH{ïÉtàý§2>x"€>¿¯ä\íIúÿh˜ÉkÂàû?|NÀüàyÆûÏ2ß{†ùèY‚çQ4üýå܃"hˆC¤¿ó÷—r?xŽõîSLhXÞ¸/ýGw‘¿sSê×ö¾»þ!ÏõwXíϤ@:ÏI}Zš¶…©1Å|¯^_Mª.Í()Ì,ÌKÿã5?XûxüçÀÿ)ù)E…©%Åée%iµ¥™ dˆ~E\Oÿ«…è 5csaokÑ ®dÔP2ÕS>×W &_‡Ê¿Á7Ãùƒù×W%ñ51pÝ*ˆ­ò#Ë|ˆ€À"×;ÇqM×;&k­–Ú¥áê™þò Sé(¦ö¼Nu^;SJ—ó¨Âº,n%šöáWO‚#à°ÿq ¨FpØÿ "@ŧ©8èh€Þ5fÒÿi2ÿG@rP2z ;¹‡ü@;‹‰]ÀE~»"£&.Ñ@÷h4åü¯ù_’¸V#ér93Á¡á áÿkÓŸŽ€äD@²@—ÏBåof÷_»ŽŸ¡ëb¡+H:stÄ¡”Z}¶NËÒj˜ímtm;CÓFoo¥ÚVš¾µ4 «ÞÕÎ4´1:Ôt] U¯¤`í·É2Z%™jq˜¿Y®ägØåÎå&ð¿o-áÿˆ×óõÄ‚æxx`+6 e?öÿÞö$°»5ìlNBl®OlÄÆ×#c¨À#Bn£×Õávh  ðX•à,ÿÿÅÿ¸˜š„ Q a6îç`ù ñ',ÂÙiÙâBãâ’byUaµ+—쯳€þûÚ™Oú¿ivB65zÈÿƒ¼Ã@È¿ZsOMwO¥¡« ÝíÞUÜi*3÷W Õ$ý?9Í=ð?÷þ'ä,Ì¡ÀC@à`ÜÒ0:R‹#` ¯ÿ÷v—š»Êzå=Äfg]1ºä·»bÔ\…k~BûµÓ#u3£õ³c sÎÂoa’??!˜çÏsç,l~iÆÒ0ei˜gÏO¢óÖ&Ë\ãyÁ1ÚÆ8yg’tjš|vŽvq9û浜[ù·ºŠo÷VÞ¨¿5$¸9"?QžŽ¨÷Öµ{[] ÿÝݾ¤ü“þGl%üìÄõ;q-DÀV´m3¢Â@Üß÷*×= yĉ»ä |l~,ÿGðˆŸWì÷‰}~±7 ôE¾  à­Ù{‘šKñòû·‹ŸÞËûÒÙì½!çû7Sr;íW÷Ð÷å­3ßy ‰ý#´˜ ÚÿðÒOg½÷dÆ{§þõ±ãï>zìÝGO¼ýè‰wKy>y*ýýg²ÞŽüÁóÄ@ÐË â¨ŸC 5ŸÄ~áÄí0Èÿ(,^¤}ð åƒgàI{ÿiú{OÑÞy’úΓtàƒ'È>Iùà)ê‡Ï¢t &eú˜¸MæãX>Ë|çIáÿÌÿ¾#ó›¿ròú§ÃŸyÀñ™KKןœ<æéO›2dšZ©mP=Š™B.ƒSK¯¯¢U•få§䦿eŸÈM˜?-›™J<þÏÏKMú¿´$ûàVDuTð«íuíQ÷·— w”XŒePü/ V®ŽÕØ ùæøPùƒü7l’M»tÓ.6l"œÐ„–ùþ´¶‰ú•ÑjøíÓ}eãæÒ‘®’>]aW[žN™ÛÚÈRŠ˜RUP“ÕP™V[– •Òÿ5EÇq €åðËÓÐT¡€ä/cS›Ø ÿ·ð¨@ƒh'Àq •0õ¿„IDªÿ“€SàSþÇ›‚ ÊÚSŸ8V%·U™­F×§æ_ó¿4¤6?n¤RºLÆHðÉ™’ù© ÉÝÉG@{7MÓCDá‘F,eâÐvf£û‰I4:V»–©igµµ2ZÕtD MÝBZU”65µ­…¢WgéUd] …€ªQPÛ›(­r‚0‹00š‚—ÞÈIõ,5{—[¼Vµß¦ :ta—!ê1Æ<¦x o#Ø¿ÞYÛÝßÛœÚßšÞÛN€R`sæäÆôöúäft<µ@ ¬‡‡£¾ ×)àqtzìÞµµüo_”HÀüŽ%©mA¼6/²Î‰—‰Ã‚æ§sSüÙ)áÔ8  sG ä ry##B˸xfJ¾0×´¼¤°®¶àË~»áÐúœ:Àëкmí;¶U•u¹ye±yq®ivºqjB:>&Cã?¢ÑAáÈ€`¸ºþP¯ßÄîí®ïí®5kº»* ez-ºbÒÐYÔm,5õ–öVÖŽZê-¨þŸšáÍ‚ê¯M ÕO¹ŸÏÏ à ïþÍÖŒŒTW T öW .ÀTÚÛ]l6™ ¥@¯¡¸ßX:dB7câs³§Fë¦ÇêÁð Ü¥)îò4³6%\ä.OràÃhF&¦'f¦ØósœÅ9öÊlÃÚlcªÂ=U˜, MìÌæî-œ^-;ï¨>ïª;çn8çãÝ Ëφ›öÃÍ{PÿÇ´§7 ç¶{Ρú¿þ‡Ž`Û@:œÜè@¬ë˜n;ªÝŠh<°REÍ¿2äm z¨óeIàË$^_£×/ó} ôq¿Ÿ þ¹Ûá†s±Ú;╟Û.yþTé—o(ýÖ´WocüZÄøÝýÔ·®RÞyˆüþc”§¾ÿ$ x÷ Ê_ÍøÓÃizèÄ[ÿýÃ)x(å͇Oüéá”·…H{ÿ©LtvÑ ;åq|‘™8ÿÿËøšxúß_&v|žòá‹”÷ŸC×мý ãí§ÑI>z<ç­GXˆ‡™o>JýÃ#”·¥ýå æ_ŸÊù𙼞Ëûû ù=—ûñ 9?Ÿ÷Ás9ï>ÍúóãŒß>Hþå½i?¾”õŸçR¿ºuä™Àõ÷ÛŽÜ8Ÿ²1–n3gYt$c ­YB•ðéB6SC©)ˬ,DË;±ÿñøÀ:Þqýæ ÒÊ‹2*Š3kJIu$v%‰[C6åB:hYÛœÛÕV¢é*†º}v°ly´|m¢Ò=[\hˆ,s×­ü ›pÓ.ÚvJ¶]¢$›Áú7ºÂ,±ƒóu¾™jçtÕ:ô¯l~ t²·Èb*ê*2ks ­Ù³EJ#fH¼ª vYfmQjMa /uÅiuð,Jm(Iç—epŠSá)¬L ªÊÖ’äõ”ƆkÐÌ£ãžøÓ.dê$9€VœÝ‚€yh(ûSXöy° mhFgVczZ Mª¢nU¡±%ÏÐ’k@§LçëUùU^{Kn[sb;pKK)g@kÈ%t™˜!— ƒ¸)øÅÁÄæM"˜FÍ4Ó- ¥ŠÙ¬f5«@K+Pkè­Zq½l⌈çC 800µ†DÙäO|‰î‡ß‚äÏhoc‚ùÕ*†ª…Þ¬@(›hÊ&tZx“‚ÑÒLS)ij­MAkm¢¶Ê)jh“”Br?«‘—)çf6²3ä é²ú4÷¢üï_UìÚSqwƼÝë¾ÿfh`':‚ýòǜڞöwfö¶f“°›€؈Xâ‘"úC>Ôøœ¿] à^UŽÒÿ+s¨ ¦ˆ˜MOðÑ,À(ŸˆÞðä?>.œ’ÍÏ*–›Aþv[+ÈßëҀߥÇ|ÊÿË ÊÅY%øzR>a‘XÐü/ò?§À€™þ7uU HþºÿÁÃ%æ¾²¤ÿñø?øúÀÿÄú6Žìü¹9‚CmÇb©Ãþ¬Ä0`FÐ×SÒ×S½È°§|¤Ér¸€ª~n‚³8 ÎGeÖ9´cÎÏ>°2Ã_†vc–Çâ¼`i‘¿²È³.r õîùÿlEh¶$2[²3_°»X´¿Z~ÆVuÖQwÚÍ>ëœ ˆOåûÁ¦ýPË^¤ûÿôv÷™žý“}<¼KÈwÓô?–ÒÿñpÛz¨5lÁþûŸŠ¬}¿[‚_<^¹Ç'õz¯ù?àåø|<ð8ÈÝ ³ÏFên‹W<°UúônñçO}ã<õ;·0p;ó§wÑs7õ÷÷Þº/óíIo?BþòùÏ“þø¹Œ?\MùÝýÇwï‘_ßwô7÷{㣸zô­‡ Hùëéï=ùás‰¹"ˆbè¾ø—‰û ùü"ú…wŸ&½ýõÏOÒÿôë²þð0ówÒw•öÛ¨¿¾J~ýòo?G}ó!ÆŸg½óDÎOç~ø “ýþ³häÿ/OÐÿøõ²~vWênJÿæéã_Œö)ßõw[¯»0{<6’jíÉiÏêTR"²ˆKå5PjÈÕ¥å…Èíà4þCÌöb² ’ëŠòSñ)@•%YàÿÚò¬úÊ,ð¿ˆMiÑÚš²u-9Ýš‚ACÑXw)Ôí #«–JÇT¥o¡>²Ìùcó︤'=’]¯Øq‹-§p÷ˆ­°Ã‹ ¹Zˆ ûdÅÊXÙâPùT_ñ¸¹2¥W—×Õ–£kfªA’Bš¸­êçTd€óÁü˜Ãþç•"ÀÿPÿòÏWg‚ÿeudˆ€&6 üŸè¨HŽaÚDL0ÿÿîÿdý§€±ÿÑúE^RþÈ߬†(èQt«òê|ƒº°³¡U)ÐŒÀÐÜÈTÊÑY|21 û_,¦ãKX˜äæýd$üÿ‰¸æU;í ®uÉ¡ÿ‹ÿÛá·hZj äªó+©Mr o¤ÉäÔ¦F’²‘¬l¤6Ë©*µEBÆæWH /SÂI—4¤‰ëÒ%µiâšTׂµVð{ØÕõüfÿVxp':¼»>¶êÿ‰ý­IðÿéY Jí9Hˆ€ø¤ ‚uËfl,Š…"~sÐÓpj|v5´®…cIþ·-HÁüØÿkó’Õy"ИŸC 0=!œ°!ÆFãc¢ÉqéÌTãÜLÓÒB‹uEm_kwÙÛAþ>·6èéî ´xè‰ð¿êÓþ‘Œ Š3ÔÏï3±Mƺ®ÎŠN=TþÅ:MÈZ€OùÏÿ¢õ?„ÿá9IÔöIÿ'[ü$z„„ÿÇÇë¡®B0Üö/ö–fÈ‚Šas%–ÿÔHýÌ{vœ½0Ѷhuí’ƒÄLrðÏMd]@¬,Š–Ñ1GÄ‘GÛ2ß¹Äv/ÕªB‹•á…ò­…’íÅÒ“«Uû¶Ú}{ßÅ=å€ü÷{!%–ÿ©ÎýÍ®S[=§¶Áù½˜Ýíà$!´4ˆð?ü9(þ7Ãí!5±(´%)Àï’%pKŸKŒ_Ü™Û+ñã?àÿ€—ò÷z¹ð„,X¢µ ·Äªî‰—>¼UôäNÁ+ghÿv‘õÝK¬ÞÆøÙeÊ/ïÌ|ýJÆîËúÙo^ÍúýÕ¬ß=ùú½i¿ºûدï:ú«;?ûó»Žüâî#¿¾çÈoï;ð'"Þy,Ÿ šŒ€¤ðñåbÄ—ÄÍ2ÈÿÔ·Ÿ&ÿù ê[Óÿ(ó‡è¿¹JÿÕýô_ÝCÿåÝ´ŸÞC~~åõûi¿ûó³þühöÛÌwŸBÀË[2~ÿ9Ú¯îÍ|írÊ«ÒþmïØË±ëó\×êõ禅†N,ÓZÓµMYrIÈ¡pë)xðün'"Íó&ÉÉMÉC ™_¼þÿ°ÿ¡q¨«Èäב¤|ªRÊÔ(s:ÛrÍú‘޲¹¡òÕ±jû:Ü5¸ÌŽ­ò òùcóïùd˜]¯€q°±Æ#" Î·Pçš©†Þ:ˆÙÁÒ©ÞÒ±žâþŽ|“&§C•ÝÞÄh£5ü¢:2¿š-@r"¸¾8 Ã)NÈþWgaùcÿ¢à£Q àÀütbF˜¥•~¢þ?É…@ÿtS°Q™Ë~¢ò/ù÷¶aL­…=mˆn´•¦¨«½ÐÐV¤k- Ú”èÞ%¢`A $ýˆÄLùÿ`Fø:Ž”„ÿq(Uôƒ ·´Q! ’§C$÷…iºXŸò¿¦“@³Ðª¥·¶¨éª*È*£Œ*—R$R²XB‹ÉR1I&!7J(MT]4 ÉrBû€”“%n@çr jÓù5iüªT^eŠc©Ñµœô¿.æíŠû»7ƒ½[¡>ðÿvdèdlt/n8µ9qzkòìö,†HùSÛsûD#Hø8¤ÀFx(èøzCnD€×ÖêZUÂ_ëÀÿ¿Xˆ˜C ˜•`ÿON &,â© $ÿùYåâ|óêr«ÍÚæ´k½.ßÓÎ,òƒžÎ$>·ÞãÔB:$ý¿0£˜nššJG‡DŸ”¿°ßÌCòï¨êЕê4ÅÚöBûÿ˜û*ÀÿxüZð?h?ÄRÿÃþÇeÿLbŒÉÚ„‰‰º±±Ú±‘DŒ  E;øŠLû€üg-0ÿâ4ÔöBøÇ‚†ËPaœ«RNJľ,¬Ë"ĪX³JÖ¬"›Uè\å{VØþåºÀrMh©jc©*¾\µe­Ý²Õï8¸;Nú?Ý/ß (wÃ꽨f?Þ±·aØßê!0ïncÀüÝÀΦa‡(þ‰abò÷ü7Bmñ`ëz@õµàƒƒî&p¾Ï)MâuH·SâqI·§"Àãù¼¢€W€üïx¼|" ìgï„êÎGªn–Þ/†xiù•s9ÿv1ç;71~p+ý'·’~zkæ/.g@üòJƯîFÏŸß™öÚíÇrëÑŸ\ºþ'w\ÿ?—Q üêî£Ð¼ùÀqˆ€??œòöcé}Ý#ð:A(¡ú¿¿HÆþ'î—Ä[ hï?‡®žyëq*’ÿƒÌ_]eüü^ÆkWè?¹Lÿñ´ï_¦þà€ü?wÑ~qã7÷A_ÀøÃƒŒ?>ÄøÓ#ˆ7¦ü_¿ü³;3~téøžKýúÉ£/F¯{Ø}ÝmKŸÝ›<ê81gH3«ÒÛÀÿBt™;»ù¿ª,­¢èDqajQAJaþ   ?„4òŸŸZ\†÷ÿV– # ÀÿõPT³©Mb¦ª‰©Wåöhóû»Š,½¥Óå‹£•¶É(ãý‹õ+Ê{0üü%û~é©€ žøä¤GtÒ%ÜvðãVvt¹!°Ôà™«ÞaÕR-Àt‰ÅT4ÔY-€Q­U²Ze Ÿ*çÐĵd^E&·<ƒ]šÖP’XùÉ-Aü3ÿƒü)àBþ4Ü`ÿC @øŸFÈŸŽçµRF'ebô2€ýo$ö…Á³»)Ó£È7) Ìhä'¯§%›É¿­èk/z ÌšÂ^m‘IWÒ£-îF7Ovµw´áv µ9Gt8>åÿÄŒ€Œ)pt¢ Ž"èD#@À÷…7:‚Þñ°?ö!äšÂÿê6Z‹šÖ|PüCÙ5?’¿˜,‚ZB˜ˆd ”O–qIRº‹MÈÎÔ“xµ™œêtvUzCe±j—ðÿŠÂgSšˆ[óvþ7m‡û0ød/>vÍÿ[Sg¶fR`þZlL'ãS'ã;ëã[ѱxh" êë AYnos­¶8–›l‹rÐ>6?~Áþ_“@IÿO ¦'ÄÓ“2¨ÞAþË‹jBþ·½Ãçî x»Bþ®pÀöuÃKÐg€,>íÿùð?ÄǤE>6 Î ‰ÁAÑÀ€p —oîfƒüõš2m[‰þ¥ò—¡ØÔSNø¿zh¤·– vr·ð%úäõÿäd½ÅRcE06T ŒVYªAûðÄc>ӣĀÏù¡¶·-I['ÖäI\öFÀi“:Ö$»M8ìr>wÛ$^+ßgåW€èr]l¥:zøÃ)ÜtI6ݲM_ãv¨e;Ü 2߉éOÆ»v7Œ'·Lt–ÿöF'ö?±òG·ÓnF¯ùäó«"Þæ°Gr§C8å^‡ 㱋]Ž€Ë-w»¥n·Øãx=|Ìïõ \^žÇË úÙñ`ý~ êÆ0q@èVÙ“ÛÙ/ìç~éLî×Ïeëý»Hÿu1ó7¥ÿè–ÌÞšñ£ÛÐóû—R_½ùØ«¼zñúïÝô™ïß|Ýn»þg—¯ýîc¼ŠæþòHê»g¼÷ ]"ó<±_ày šD&¶  Ï#>xžö×§Áÿô7¥Cåòíæî¤ÿ÷íŒï]¢}÷fú·nf|û&ú·o¢Â—ß¿¡ðÓ»¨¿º‡úú}Ôß>€óÿúò/î$ýøÖôW/û÷ýã_ÙüìsÁëp\óüg·-Ç\½)éFUF[#Y.¦yT›ZWC®.O¯(I)+L).„@+< ˆ À¤"ÿ¢Í¿ ÿ—gœ’ŒÏh‘3µÍÙ]šÜÞÎü‘ž¢É¾ÒùáòeK¥s¦Ö·PZáÄm¼m— µœJ1§`ß/Þ÷‰ö¼Bˆ€Mw}µ!´Òà¯vNWB °4R63P2a*1B ÐÓžmhÉÖ4e«$tŸ.cS…ÕYüÊ,XûÉ‘Œ <û_Ãuy=5é<þýFD‰ÀþÇ€ÿ±ö1òìÎÆCS.€_>%tg ®ùœ?Іl‡/óÚ„®0ë‹Mº¢n"p; oCƒB­Í9Ð(XþÐE €Hzruè¡øD`-4@©¢BÞü©HÚÉBò'Ž’Nú_­¡«Z©ØÿÊfZ“ùHe‰„þB-! ñùd@ÀE}¥€M6ðBáÕ“à?’†š¬ºªŒºŠôÚòŒš²ôš’4û¢<ágQÿƒÿ»ÿ÷îDNF÷b£ûëc§7ÆÏl"ùcÎmÍÞ°=wng€À°·9“Œ€í˜e32  t‡}]>§Î³¦&6ä6B¬-"íÃ"`.ønZ43)šÏMËÀÞ‹ ÿù–µåvûªÖeÓ{BþÝá@ø?„#Žè /8ÿi=ð¿ü?1&#ü/”ƒ’þ~ÙÌíêªÓë«tí¥šÖbM–È¿CWÔÕYúIÿ×øŸ‹[€ÄPBòœé)œö=˜@;Ð4ÁxÝ„¥v|¬n/×$˜®çôXý,Z½Ãù¯Ì‰àˆ}Š|™ËÚè]SøìM‡q9ånÂe—¹ˆ#úÑ»³ÉíR §Cî±K½v±ß&DÛ¯Ö¸hOÖ*/²&ˆÙEQ§4æ’­{×}Ê­P|+¢ÝŽuäÁö=ÀöF°³i$0àã –ýè“þ'¦}Û€¨äßö4‡ÜÊ  üßäuÈ ó£$rØÄ§]â´‹ œ.‰ !r»ø7hŸïö ]^>'â«ÛôWŸ ”Ý-¿¼QõàFÞ' ŸÝËy?ç˧™_?MùÆ™Ìÿ8—ù­ó™ß¾õíߺö7ÿæ¹#À·Îæ;þ"àn?òË+G߸÷èî?]jM{ïɬŸ!ýíY´vècèÐÍbY>G" ø,Šðÿ_ž ÿžöÊÿGw2ÿë6ÆwnaþûEú7ÎÓ¾zŽõ•³Ì¯¥ãÆ·.2¾w3u%·Óþç2ùçwQ~q=_»#ëÇ—²^½òŸgŽ}}ûØË±Ï>é½îžµë/ÌÝKµõ¦YôFUf›‚Ò(¡ t.‡Â®%ÕVf¢ $¥¼(µ¤(…@ Â{Tþ øË¿ª4«®‚ÔPE‚ÿÁ¡øoUfw´æôèóŒ–Þ™¡ÒÅÑrÛd•w¾üX9›ÞŽ[E>¶=hÿLHv&,9Jp&(>åBìz[NnÜÖ]­÷-V¹gÑôÁÊXÙü`ñT_ñXOá!߬Í€ØÌj¡»Ð-ÕY‚Šô¤ùhŸ@Xž)ª$Iÿ76ÐÀÿxüç°ÿUB*øE€˜Ö.¡c4R†VÆügþÏîRä`ŒÊ\ÀÔœgnÉzUÉ‚@[8¤A憴ùƒšx–ôÁ3”÷ža¼ó$ýOÑ÷ ý×0~rUþPóã´ÿ¥ÓÌvs_<™ýùævé_9EÿúYt%ß¹‘üêͤÜBúá%2<_½1ã»ç3¿y:åëÛG¾¼~ì¹àgv^yéÈ™éãÑÑ4«9sLO2´dµ)hMRšDHriÄ@&f•¥©@4%i¥Åh‘g1‘ÅEð‚.)-NOÊ¿¦”T_™Å«£HPügkT9FmNWþ˜¹`j xa´de¢Ì9[å_¬®²7ì\ÿIŠ|Tó‡Ä`{pþ¹°4 |y: ‚Øó v<ÜMgCÌZ\¬öÌU¹fª¬ãe‹Ã¥¨0Žóûuy¦¶ì.Uq.S%`ÊØdi-Š(òÑToyfBûY€¸’$©"‹«È ø6¢ø§É9ˆF.ä+ÿùÓ þoùKðÔȘZ9Kߘ}fG«S‘mPæoκ[rsKn¯*¯Oëü~MÁ°¶hXW€ÕŽè 0ÃE˜¡NÄ@Gñ`gI¿¡¤·eA·®°£½@«Î…@]€œ%•¢‰há'R 1Œ÷$u§á@)pò–k€O‡HF@Òù7£{äáûŸˆä4|ÔÊTªÐü² ü/§I$4ð?]MbsÈl6µ¡ž\_Õ>¹¾šT_E©­¦€ù++Èø ѲÒ̲bDiQÆò´¬ë\nò®µ­QODÀV¨·»±¡Ó±±³qðÿp~ûúÂöÜ ˆûÿôæìÞúÔnlr76¾·>Ï“QËF¤" âï ¸;eÀߌÎç÷*ƒp7ùœ·"€8ð‰K†NisÈ}v™×&õÙåàg5üh@õ·­5aÝF¬cs½ ؈âÑÎøzÇF¼ R #Á†~3®Ã€ÿ¡øùÉ ‘uÈÝp*¡7ñØ]Vžž°.‹V—„+‹<Ä2uE°ºÂ·® ¬VžÍÆs8x.7’?àpsÖÜl+àj°9ëœÎj¿§:ê­ØTì‡*oŽ”Ü+»+¾w=ÿÁuÖÃ1ê£1ò“ä§·ÈÏlSžß!¿°Mz~;íó[)/miëØ+»Ÿù?ûŸùÖ ×ÿ¦#¯Ýqô7WÀÿ' øÓÕyðÄ;§þõÑô÷ËHòÎc)E[ÆÐÐÐ{OQÞy’úçǨo>L{ã(þé?¼Ìøî%$ÿWÎf¿¼Ïz~—ùÄfácñÜ'â9Oo²^Øb¾|’ñʺ’?Gúöòw/þó†ÌoÍü·½ô¯m¥|)vôùà±Ç]Gîµ¹yîøÎø ß`Æb7iHK1´Áÿ °„ˆ.âÓø dNmfCUfuy:tå¥h{oYIŽ€’â ø¿(CÓ¾ ù×–‘Ù [U!aµ*r ø7uæ ™ Æû g† —,%¶©r(݃ËõëkìMäbóŸ$„CDz>*à8‹Bü߯?éåm¹Øq{]h© ·¶‰ò¥‘¢(3 täöjrzZs:”è.xµˆ¡àPÁêàvIØ´ŸA…´e?á,ÿƒÁd~9&ªК…ôf¤}TöcÚ¤Ôv £mdè,>hs ÐÕŒ^ŒÍÌîV*»W•Óßšôµçökò ÎÑ#çëòGucúBÀÒQ4ÖYd1£] † ÅC]ˆACQ_'4…Fm¾-_ך‡ÎèV°šdL©” þ‡Æ É_À ™"!ã`:ø`§${"hŸò?Ž€d Bc>ÎÇ/‡ýO<ÑòQUCÕ†Ö”*ZÐò¿Œ.’PÁÿn’¥ü_K©«!×T‘ÁüÕ•0i9©¤,«¸4³¨8«¤8«¸(³¤0s~œ»2#ñâ.§D´xù}ûÿ†ÍIð‚­YàÜÖ<äjcf?> €å¿ÛnD×CýØÿ¸ ŽeãQ 4Öf„eÉ ̯X[j¶-«í+­N«ÖmÓ{~§1èî y{"~Ð~_<<÷¡æ"b‚ÀC@‡ýo·¶­­¨?é騰ŠÿÞ>aw· äo¨Õë«´Ú2ìÿ]©¡£ŒÈmªîëG¸ŒrÆ,<Ë8ß2Á˜âON ÀüØù‡ÿ£რâ¹9Áü<ƒö…Ms@þ3“¨àG7cNóVf„芜%´é\•‚B}Žf(ûÁüa¯:âkEøUQ_‚PP ´€ÿÃ>EÔ¯D'ðx Gh ¹•ð{hE’?´hPHæµ7>‡"ènÁ?6h_èâQýz¤ˆ…õÀzLŸŒ€ÍTüÇ! ô1::ª]h¢¡¶p@öµ„¼¨7ŸéMÈ¿šÛ’ßþ°¼À_\àpðuÌËK¼••«•c³qN®ÝÂoXsÔ¯:ë—u{õª½Ü*¢¾Ê`ÍÙ`Ù¹`ÉÅ`á¥PÁ¡Ü»ÂÌ»Ãô{BÔ«QúÕ(õ¡uê#qÊcñ¬'b©OÅRŸYOyyë3_Ù½îßÎ~ö{7ùÉ­Ç~qç±7î9-À¯ž@ŸKùÓƒ©y8ýÝG2Þy8ýí‡ÒÞy/J÷ tÄ4Èÿ ÁŸ_ÞG{í ýÕÛèÿ~‘þÊ9æçOå<¹Ã|dƒy´äÞPþ}Ü«¡ìG#¬Ç£Œgã´·È_Þ¥¼²“õÕ½¬¯žÌüòVÚâ©/ESŸ ÔuâêÚ±;L‰¤;z3§ äA-­³…ªiF#öºLHq©‚z2·&º€šŠ4Ü €Žz(É€ù1 ÿº ÔãKøtUcŽF•×¥Éí3äAñ?Ù_0?V²2Yꜭ€â?l­ÛvÜ|ÿ~@þOškÿ†¨ø\D„KÀÿ§Pÿów<œMgýº­6²Zå_ª„À1Uaµ”. •Ìö› F»òôùæöIt3É8»9w:ž?˜Wþ;Ñ‘­ðöØ×pÀÿžµOúÍ'ü±.*×–T`~Çj›kM—¿« äöš“ò‡ D@,ü ÿû]zè2\kmŽU5®ÿ‰õŸÈÿÄøê(þÝ ÿŽŽj(þÁÿZm‰^æ¯èîªzŒUæž$s ø`°ad”‡ý?>!ùOÍggD¸ò?„hfZ˜œü%ä/\X`ð5Äó3Ü…Yüx´Ç¾(q¬ŠœV±kMâ^“ƒBÑ€»•ý¾V(ÑAѱ`ë!ÔÑpk$„Ö[¢SÍë>eÌ«ˆ¢@£CðÛ¸Ðh €ÍŒÁþ‡ŒúÚBþöHP éba- iD´±¨R_‡AÎÇæ…Û±üC~UÀÛŒîˆt4{íJ÷Z“sUò·.KV$Ë ÂÅ9>üyçf¸s³ìó ‹œ¥¥:"Öl@ݪ­œ,9‹öª[Åš½Âí¬ð{*ÃÞê-O鎷dÏWrÆ_tÞŸ1{“u£—~«Ÿu›Ÿy9H¿¢Ý̺/ú` íÑPÚóñÏ|qûº¯Ÿ>úŸŽþð–c?¿œòÆ=©¿¿/å÷÷ÿÃýМxó”7HûãÕtx  â?>˜öæC™o>Hþýƒ”7®RsõgWhPüçú×ÎÓ_:ýôÉÜ7rî2o”^òÝâʻÓ{—/û>?ë¡ ý±ýéuÚ³ëäçâ¤çcYÏ„3Ÿ ¦?îK{ØuüþµÔ;—R/̤îXÒƒ¤ÕÒDm@Ã0¶2õ-¬¶&V³ŒÑ$¦KùTa™_—õ|]UFuy*4•åè HeY˜ê2@¬ù‡âý®Fн*þXú ¦óÇŠ­¥®¹JÿRuØZ eü¶›³ëãþGžOVþ¢à†°8ž NáÛ'½Üm7{ÃQ[« ,Wy*]3UÉíë.ê(0·ç[rˆs¡Ñ轂C«£µ5$Y §Žø²±ŽŠü†ýñU2d…€ŒÍä/¥`ù·5RÛ›h£U2½"ARþÍ È_Å2ª@·šðk =¡ËÿòÏíƒüÇ ðÌ›2L 1Ý…ãÆx–îâÑî¢#Ú:7l„FE€©#Ñ´«ÐÖ±"5n"85ØÿÉÀ-ÔCþg$ý߬¦ÉÕíÌV-£]f{ÑV_CáÿlÌÁŠ Vr"].ÓÎ@íƒŠŽ‡€à/ü/¦…Tð=‡ õmmVuu¾?º¬4«¨$£ 83¿(#¯03/?(ÈCL ÔÌŒ6@°4ÅG«ÍdŽå&ˆ€ Köèãþî­š8%"`äŸMÌ ÿ3³§Ö§÷cS»ËÉð°Þ mã¾u¿)â1†Ü~Âÿıühغ€ÎNšß1/s.È¡ì'̯ñ®éýö΀ÃvwG<¦˜¯wÝß‹w¥m…·bÛÑ4¸éKLøºB^î2аU5äÚÿ‹ý?æýý“‰c8$®èì¬è2Všº«Bþµý½õQÿ³ ÿ °ÿ§§Àü¢¹Yq’ybÚz~FŒ6/ÌÉ_´¸(\Z!„K‹|(‰Á‡‡zÜ6©—¨Ò\öcó¯5@<¤‡Ûãh™=oGCîávt?W(qüZÜߌýr+P àjN@øßíh"Ö É]vàv(½®–€·G@8 Á„ü­áˆ½-ND~/èäÐ~$ߣúà·«|îfbº¡Éik²[åÉ«6—çÅè¶ehަ¸ShÖM| ]rµÓÓõ³³ìùùêÅÅÚååÚ•ÕÚekõÒjÕ‚µb~-Á‚­|q­|ÅV¶æ(wºª<®Ê³,ê*[w—¢ pîº N:òvÙ{Öi묛uÑøÙEºÕ™~—;ý^_ÚÓ‘yqãú¯îýæÙcÿ}ãñ×n?ñë;S^¿ûøoï>¼qâõ»á“”ß\9ñ›»R߸r}roÚë÷gþæ~ò¯ï¥üüÚOï¦ýä2ÿŒÿ¸ù?³—óÐfî•hþmÜsîŠ3öâÓÖ¼³kym97;²/»³ïñe?àg~ÎO}(@}ÐOùœ;ëª+ë>{ú•ÕÔ[Ó/ÎfìM¤G†3fÒ¼‘:ÚÁìÓ°ºÛXªl’¥–3š%4¹*æ’Ñ ½z»&-Ҩʨ­ÌÄPYNÂÔ”gÕV€ºŠLv5™_OÇkþµÍ¹m¹=ºœ!cÞD_áôPÁ’¥dm²Ì={Øÿì]Ä>øÿ°ü/ƤIÿƒüOàÛxðÍð[â®ú¨­6´Zsxxq¸µ=EÃù½šÜnU.TãÄÕT%—¬Þ@”÷uy- Töׂü)MõTEXðCÁ{¾Àü€RHÆe?–?˜ÿ@þT­’¦k¦cô-Œç³Ð»Š‰élEy €ü{Z™ ÿÞölÿ &w@—3¢ÏƒšŸ0ÿDWòŸ6æÏtL÷“Æü‰n p²§h¼§G" ¿«" [—ß©IŒቹ„‰"àSþ&gèhiŠ€C-€‚ýê>Ø@Çþ×td'ý¯7fëüàM8ˆ ¡é¢€Ÿ ?_,¥ˆÅT€+¤±ù6‡Œ[€ª*TÿCñ_TœþùçdþÏ*ÈËÊÏÍï­œ¬…˜³ Ý¦hÏÑœ"À³Öâw´‡=ИPD†‰?·>€ÿ‰éà™sÓ§ãS§Ö'÷¢ã ÿÐ(h›3Ð÷õF½ÝHþ.CÐ…NiHl ‚¢e?³bÍAÏIAþ®ÅFÇ*Tï:Ÿ­ÌrAþQ¯iÝ߇Ϳv¢Ã'cC[±ÁD„zcÁžˆß&Öšœ:4Ѱª¶-·$Ϙ—ŽŒy½½¼îŽÊdåòïè(7tU@Ùÿþä óFÇø–qáø„ˆ8z$/çϳÕIˆikÉܬËX\ƒù——Å+Kâå%°º$´.'F{ föØ>§<àV¡€÷$ä†eó£Áy± !R­·Aþ'Þ7Âjð?ÔÿQOð?1„ý× ùAÑŽ5ˆ€¦¤ÿý5)€9øRô©CA-¤@8ÔŽ Û~5à÷©|Þ<Ñ ™âX“Ù­‰K–—Ä sHûsÓü™)Þä8Ûb!v= ª-–š‰‰š©©º™™ª¹¹šùÅš…¥ê…媅効 lf¥tvµlÎZ þ_²UXU6G¥ÝYåv”ûe~GYÐQv”„mÅAka`µ ´šYÍÝXËÞ]c¶RÏ[3/92îòü˳±#_Ú>ñÓ)ß9üG7Ÿøém'~yÇqH_ß…žÐüôöã¯ÝŠAï?»=åg—Ó_»+ëµ;)?¹“úÃË´ÜÎüÞ%Ú7ob~õë…ÝœG·òîY/¼*:ï-زWmZKãKE›K…;Ky§VóϯåßlÏ»:ë.7óNãõ6+ùÒ ùâ|úéé¬Ý‰ÌØ(É3HY1ѧŒÌ‘Žœ>mnwkN§m¡mkb¨dt¥LN†à7@d±k3j²ê«3«+1håFM1WMj¨B3b­QDimdêZrºÚrLúÜaðX_áìеÁð?Øûýõÿ…ÿç#bäÿ ÉßÏÝõq þßr5€ÿcö:ø ðsˆ! Jë´esýÄBPCAŸ6¯G‡W©E´fZ¼¤QOMj_ɦ+9TåÁV_h0³ˆr¨ì§€ùñ©5ðÄÎ?¬ú„ðÕ,Œ¡‰éjgõ˜Û³û49ýÚì!mò‡Êßb(´t!ùOuöÙžB`ÆTþŸê†â?²§°  pÌX0Ú]€ü=NWD€©#"©sñ¦t4„˜–pþ!ÿ „ôƒ©ašH‚*sìÿƒMaÔƒ… ×üߦa ã}>錮;çp ´u¢‘"ˆ€f š>À-’%ñÅ4¾€ÆåQØ$"(•d4øSB*,"åeå°ü ss´SÃuDÀ™Ÿà-N%"ÀmU±ÁÞÛ¡ÁÝèèé˜ä]þÇòßM€üQÍ%´?løû@þë^sÔc ƒüº€]ë³·áú?áâðç•Dö¿{©Éc½&ÿˆ§'ê5Ç}}ðáooF8R`p;2@L˜ÖÝQ_±ã¸Ímmÿ//4ÍÏȧ'eñȨüo6³ÆZ½¾̯ÑÃó`·û`úÌuHþ} ƒCÜáþè˜pr\45!ž™’ÎÍJççdKó²åyøA0/†²ƒý¿²"Y]–¬® Z¶U 8œŒ‡bÐhGö5‡Ñþ©–ˆ_•”?öÿfD¿Õ~ÒÿZìÿx°5q¿·)äi ºšð°?üLøÉh6vMî¶Êìk6«€‡­Éiov;U—:‰Û Ÿ4{\-^·ÊA‰àkà„ïq+·Kát4:ìèG­­Ê¬+RøsaóÏÍ çOOBÍO½n­C§Þ WTŒŒTB ŒWOMVMMWÎÌVÏÎWÍ-TN/”Ï,•Í,•L/—@ÌY¡þ¯\²U­Úª­öš5G­ÍVa_+·¯•ÙWKÇJ‰}©Ä¶Xl[(t,øó"‹¬Í%úÞ2éÂùVõ!ÏõO…Ž~a3åë{iß>›òý‹'~rKÊO/ûYBøÇ|éøn<öß޽zñØ«Žÿ×…£èycêÝ”õÝ›Èß¹™ò훨ߺ‘öó´¯a¾´Ç|bëÿöN’'Ù}ßÜzw»³ÓÓÝå½wí½«ê.ï½÷Þ{_Õ~üÎìîÝG':t€y‚D(@" B”(J …ôÏèefuMïÜŠøÆ/ª{jfºÇ|¾ß÷2ó%ý_ܰë‚ÿÓ±àuŸ?mHÇѨÈx—EÞM™÷¢Ê{Sã|ßàü´Áü&ãg ú÷UÊw¥¥7…Ç/3o__ÆF‘Åf`¹è¡% ´lŠç'¾,§TƒzIw´¤Þ_:ÚY<ØZØ^ûzsØþpMõ¸X€Bþ•Rþްªø>¹†ôåöÊ£ý¥ÓýEp°—‰î·Ò£NV:À͇xÕ˜`žÿÞ×3þ¯½¿åÿÏvA¿Žÿ¤ÿsÓUÂÏ… ‚ð>øŸöòcNÀÌòèXöSáÿÉæ¹\`n@~  y[:Å›<ïöy.©w¿Öì=:Ý_8;|¤=ZÐ?2¨5 æ³E‹vɪ[&²é)ï`ßn ‚à?Åi¤zŒ4Ÿ‰ê7Ó öü#fjû@òw¢ØŸv¢´OÈ_ðÀ“õ e°Òn(˜PÔþ ˆ:9a';èäúll·…íÀ%€ñŒ %:¶·´»ûnàžñ—d#ЯòÿôlY«_ÖÐ`4ÛÇL1[ñœg2óy6ÿŸ¯-÷,@g]"@ö‚Â/pt¼Dö‚níÁðxcóñÚúÂÊÊ‚BñHŠñ¸¼GlÎ#à?‡õÄe"Å=¢t@– ÉÓaE^-$×K¹íjq¯Y=ŠŽÛ–‹¾`©þåe,ªvYòŸÁy2†ÌÈÿdླྀnúÎ˾ã¼kCðo† m¿6;†¶ýßñ¿™Ûí ü«§£–mÜøÏz>þ`+P€¼ºŠ~s{uŠ€æðì"ðä×ðÿ ñ¿pTÈ·“ñÀ8ÀÜç^q9¤6‹Ð ±‰oÍ—´ýþ¡Àj(° oÄ£[`ø$ÚA1T.­ÔÊ'õÊñì²3xQ9®—@ó‰€ÀI|8w¯ÕÜo·þýÎ1jÂ÷OÑRìøôzªÅ#à©›íɹ0¿åÿ¥å®@ü¿¹Dû[2xó Õìb{Ç³ÕØ&ºy³[Û#”5ë`ÇíæI§¥ ‚×DØ ÌE|+@ÌoÀ×؇_ •3eÔÑ*·È17ÂüD\­Ä¢ªhD ‡¤Á€8…BâPH8s„(™§3ÒlNšÍ‹Óa¦(Ì–`P”b€?–œ¨Ñ’Ô›âj]X­Š@•²¸\’”ŠâB^XÎñ›yö À¸(,?/.~W{üóÖÒ¿è¼ÿ‹Ñ'ÿöæó¿|ñÅß¼ùì¿üäS°€ÿççÿ¿ïxþß¿ùÑÿõ³þ÷ï?úß¾ýèo^ð7¯?úß|ø?¿þø¯ß|ú×ß~ù×ß}ýWß?ú«ïÿûïÿÝëÇþjùOŸÑþà†ñ;WüŸOÅo†Òg]I¯¦èVd¢¤W ŠâiI|UÝ”OËü§%öó2ëe‰õ,O}š£Ýf(—‰Çãèã~d©¤”ýt LÄÁöZYNÓª£Z´óÙ²Q³ ü×.í=>Øy¼·õhgãáÖêÃÕ¯ÖW®)®¨f‚×hS÷Êà ՗à{_ƒehMêe»Žæ51‚v& +ãçÂ|à#)ìåÐÖiMvÕR<é+_ŒÿÛÀÿïÑðÞOgÚùÍ‹Ýß8ßùÉùöw“MÂ(ð uÈÿ7ÕßÁÿ …íÕ³íð_·K™óÝêµ¾8ìv¶¹Œ5›ó<ßázð5!ÿþFÍ"ßtúx„ý;ÔÏÉ?ûŒ‘BðyÍþ =da@òG;%êógpçàáù‹^.XáÖËÁßNÂø?·Ìðä·Ïþâlzš¡¡ŸRÔû³ãh-xåØÚDñ„K€Åy ø¿²t žñŸÀÿLKþëÔ9ÿM<äßA#7¿`1° *€L‚O@]#(4³ã`ËÄසߗè\¡J± —-J%ÂÃ]`³¸ìkAÀ\Eœ|(ÈÀùTX‘Ž(S1U6¹VÈl–ó{²ºWÓ›–óŽãfès}}{s#x}“ ð>>‡Õ×ïUß}Ós_÷ «®ý²c9o!øêg<è¨OÏùßÊïAøÖÔãºà?í: üÁMpò¿¸@ð}s ¿iüþ?=÷ßN¼Àÿë¡ã¢…†aØÒuk`r%˜ÏìBtÅþ«àªÏ£t;e›°?ÀäqÉîÃ͈mDÿBî¸T8®”Ô˜üjP£ªiÕ5m¬VMMÔ¨êÕ"&ÊÞøˆ.„g`é ‹6j޳M8¨“OÀŽ:üú·ÌÇ.pŸÿO. Ô“G˵z´÷Ï[›јaÿè¡aM<&¢ºÛ*oPCJ¯UöÉ—4û kGµê!Q½~ØhµZ'í¶²=)à+'‚²Š—ZýRüÒÝÂn>»‘Ë  HèÊã_ ËÂ!y(( €üR¿Oìó @~?ˆð‘ Dù±¸0‘¥Ò¢dN˜ÌñSy~ºÈ ÈWÅ:äÙ þMe¹¡¨6$ J]Z®IJUi±,Í–¤™‚ Q)ËkeY£<í¦°ôª¼ø“Úâ?kø‡ÃOþ»‹ÏÿÇÛOÿóOþ—Wÿç7üß}ð~ÿÁùþýÿüí{ÿéõ{ýòýÿð콿|òà/nü×ïþüöÃ?úÙŸ?ÿñÿâá/ŸýËgþìé£?½YüÃkÊï]0ÿá„ûÝPò¬+»lÉÚõ•VMÕ,+ÚeE·¨”£‚”LÛ;Ïr/ Üë<û"Ã§é£ør/Jm‡i•-ëcÅÝH’x10B²ßL§K:õÒéÑòÉXÀÒáîÂþö×`ÛèçæÚ£Õ¯×V¿^Ç/@@þ­µ/w6¾<Ü~ü1/BÕ„ß 9Ðoü/†x•(øßÍJ†%ɤ*½lÊo{ŠgÕף-b? ÀúÙtàÏ·üGËÄ?àÿeS üïçÑ8ÐFR\Ž éÿüoS3M‡4ÄÿíebD3øoQô;4ý…ˆŒ÷'7¼öõ' w‘`ÿ9öF‘žÄ0ü&*Èi¦¹Ít·™ê³ øC…±¡Ø?kûàÆ~ÖÍ#ðÇâÌùŸÃðA ô°à›BàA €?æ?ó>ÿí¦U‹†…jišƒåùqà?Àÿ>ÿ!‡“ÙºwŒ,à>ÿµ:ª5Ð<Ð<ÿÛœô;øÓì&X¹l6 α4;#l^Ö—Ðq|ìD½t|µÆòî*=¶6—6Ö—ÖV(*%E!§JÅ¡ˆÂç/ xKÎ2HÌ¡€‚6X@Ä#ŒzEdºZ=¦Ê$Vóé­rî YÔt«°€‹® ðþbz9 ¿:€¼ºŠÍáî?zÙsƒS\vl ‹¶Èš4 £š®WÕ ÕNºÕãNå-ÿIó§_9ÕΦM=Àÿ¢Û>“·ð‡º’?9†öæIì›Û(ˆX„ÿÿGΫý¼k·ôPhà›ÑÍï¹ôN:µmC+þ€rÎÈüs9íBrÚkÎÿpp=ÞŒE¶ÒÉýLj?Ÿ=*ÔÿjÍ” ø7¡–™Ý;y/ˆÚMu«qa›@Šº.#Р¯ Oü ó±îrjÀË»zv²Î{ÿVòâÙ••´€fü¿´^ÑœÉ)™·Œ†jööÑh…Î>™ ðoUvš¥­zaƒ¤ôRYÔ#åR¥¼ÏRq—^W«ûµÚA”#?k®{ÌGðY¶•TBŠ%”Ѹ2‘ÃÒ@HæJ}‰×/öøD.Àéæº<<¯Éçã‚ „BüHDH, ž&²‚dŽ—*p3%þ] %ðÇRÁ‡Åº¤X“ªÒ|Ež-+ÒEE2'Ofdà ¹¯šfö2Ô«ÜÒóÂã7¥…ÖúøúŸþéôó_^~ü×þÕ“ýÇçþÓËÿë«óòÁ_?ðWOüO€ýË¿œ>ø³Ñƒ?<ø“áƒ??øãÉ¿8ÿøÏ?ýãËÏ~qñù{ñã?<ÿúŸO—~kDý>çeWxÕkÒz}µ^]i”W›åÕvIÕ) ñh½´¸ŸæÒÜq†3ΰGiÖ8Å%™ÿn‚ш0ŠAfÚlj{ùAßmç:,,»™ 4ˆA!`<£j5ÔR>¤‚ €ìm¡).»[± ,üá¹¹†ŠxÃñÞ¸†ñuÈŠÀÿ°‘5íãƒˆè„ø¡}\‘\4d7]9ðÿ›á&XÀ·“íï¡ À.ðÿQømü_6^ Öæù¯ÿ"þ×¢R˜OøOÖQÿó_¿Gþo!þƒ €Ð©®Íeí6Õ°Ç0îÑ@h†Ï d:¤‚þà€PaÍ?<-ºE›až`ßD'rað öA. ä±Ñ½VÔCá߯cJ:¸iàŸñðr>·èåù üAÿ9ÿS^6ÁßÍŠ»˜Q'#âø#c 88>ÛefþϘÀ(–ññ«Å­­¤MBþ¥ûü'- àÿÞñâ‘zø‰„à¿Ñ@5–Í&ªÅB5Û(þmN*ºóÑC9¼,°x`ñÐÌnê¼ Às!(ZøOJÍÉÒá1º¤J€í­å­MÊÆmu…¶¢b(dt©Œ!Ñĺ˜O“òä<¦ß&ØgW“ gS>y& Ì…V ‘Rr§šÙoÔ½ªnÜ2Ÿwmç›±ÿéy] @z>£ÐÍ pÑñ€Aœwœ“–}Ü´¢qÕUôýòi¯¤i—Ž[Å£fá°^8>ƒZeu§zÚ¯ÆmËyÏ~Ùsn†Þ§“À‹Iðª8ÐÒ3ÚƒzÊ|{}szyx1õ‚žÝO†ö›¾òÿmWŽÐ4‰Ü62PÎÄ£ŠHHJÐ ™Ç)vÙ….«`&»Ðë’à ÿˆÿAÿJ$´žˆl¥b;ùÔA1sTÎÔóšFá´UҶ˺vQÛ«5Ó a6M£–yÔ6[†AS?l‘Ûç;“nSMV]] dþÉð °Oð'/ï¥}+ÑÓs¤ç—ögWö§—6øÑÛ+ Þ¥o$›.Ïü'#õxx2CìuÉ©[|öj¿YÞ­w+¹­Rf#ŸÝ,äÐTm¢bn×@÷ìd3³# ùÜV±€,ÐÊ5¼~VzþÜÐu é\j“þ!€Òñ•TL™ˆÈAx¢ þ`C~iÀvÌzÝr·S ÂU•Ðéà;\—“ãusý^~ ÈGxј ž $Óüt–ŸÍ ó%Q±"Q¿Ö”×[ ¼¨Ö•U¨jòrE\.‰ EQ® üŸÌËii*)Î&¹•$«›b\åOËÌÿªþð÷º~ô蓯þõùg~ùÑ_\½÷—W?ú÷W?úË«÷ÿÝÅÿfòÁŸŒ>üoúþËÎGÿ´õÁo7‘þIëÃÒýøwûŸÿ×ï~wøè·GKÿxÂüûcÎOFü—ámG2iIui·&íÔÖ@íêj»ºÞ)¯µŠ+üJ#«ª¥õ”¬–”ÖRbHȽ›)Q3-„ÏTSÒR\”Ó!^ÌÏ {Ø~'Ëç`»íl§• F€Wiz U{²|zòX†:>:Ø{´†z-̇ºll|ÚÞüroçáÑÞ¼íôdÉp†€é2£™?+êf§|Ü\[Œòê A;+îç!ÿËàW-ÕmwíÕ`ý›áZ8ßúþbkôÝùÆ·oÐÎÏWÓ-ЋñÆÓþÚMgýªµŠ¦•彂¬™•TBô½øyè.Çkd¹tÌÙ½ðÛO6) õÖ2H³M9Å·úÞ]æˆðš)XK³œÀ|,ë]«gÖÏ1ÓìDÊ}¹,T"§™‚µDä³Ó@-h§‡í Èíq'Êð?ïåü¼’o&âDy–—‡—ƒy7íD;B¡vˆÛÁJ±†¬ì€•í6±F–EFÑÑ'‡t4÷ÿ!rƒ6ѹ0 eÂááÒTyjŠZCÕœÒNϨgZšNO3èfÝb¦Ùlt»š?tá¯ÃMGO/Ãéc"yð| 0º’LÕÛhZ3PkOÔÔ0šÃÇà;ÛøòÆÆòúêòªjyEA]‘RUšBD“ @ •å6q¼¸@Ð! 9‘ˆûÉ€*Y/ÄwÊ©ýzî¸S> J£æ<äó›Qðvò_÷ý—]ï´åš4£†uX· jf`c¿jHË:P¿¬íÕ wøß,ÿ»µ3é¤cþ_<ÿ'cÿ³iðå4ôê<ü-:Ä¿½‰ü¿Ÿ[À›ëÿŸO<ÀÿÛí²o™vŒ£ÖTÍÒA-¿[ÌnåRëÀ+ÂPЯô{d@{·í-ÿ6døÌ—œ4b‘Ít|7›ÜŸÃÔ,žü¡BßWÝEê¨þ£>Ú0IøO¶YB†¿¹4ƒ Þ£„8ÿëÖ@ÞIöÞ_]è.¦gÓ±†ÀÐ;ìw ö·ê;ˆýh(ta ]©“^/¤Ö2ÉljžDð”N¬'c«©øZ*‰Z÷é^„ίe׳Éák ¨ “Q%(QÄBdŠ)RØ/úEø^K ÔP.‡J*»Uh³Ð$ ×ae;í,‹ãóðn(Ìó?•dr‚\AT(‹•ÿÕ† ø_©Ëßá:/Mf¥ñ”Šˆtœ[ˆ2š1ê(E½ÊÓ^úâ·_ÿ^÷áï÷>ÿ£ÁG:|ÿߎürôàß üYÿÁ¿î=øEç½ÕBrÿq彿—ð}öG?ɽ÷³Â¿Yùøï×?û­¯þA{áçÅŸuio:¬-îMS0­ 5I·*oUewð_øßç=#'ü¯&E^ÂÿVFTOK@Õ„¤æ¢3 ˆx9!7àâúðÞr²°hÓ3,ZšAKÕ.kÐhÇ…£ƒÇxSÇâîîãím2àë«Ýí‡` '‡ ðž3õ2ðßb ü*ÿ n-޶€v³"²pÝ^yÞ]yÙ_#ðf²ñít“mû?ßÂüGð9Ù|>ܸí¯ü/›+“ŠrP’urð½ˆÊqA.,Hz917hã¸õ û) €XFû?ïÈOà¶KÑî£Vù½ÇªFó‚ÈNrn a_»dò߃?Éö Ýa¥¾#§"¯]–å¹o»!öÑ¿n×lÊéNÆnY9¹[<%êNš…c ?ˆÔ®œ ðßÐA„Fáà¼A~|þ üçüG§žÄ1ÿgùøÿÍ%á¿ëéÈAÂÿ¤£ƒðßÁá˜O¯g@0U,"‡˜ŠJ€€*%€[êuˆÁˆfàA @Â2ºƒäŸ=®åÔ$ùøƒ©ù¡®™´lç袆h¿è;@èÅÀ4í&]ý¨Òæ;-§#-Ú`?5øC¤Ç³lXŽç×üsaò£r`~> oÅÔ’øãzˆÇþôÚæÀ¿^ÙUKۥ̩Æxõ$¿• ŠâqE†WUÏ:`«¤ x=Úœ[À›™¶üÇ[/F›(ü÷V.ê³ðßÍK1|ƒù?àÆ\xUÔáŸÌ ê÷füG'y±ÿ÷–tý!×¥ÍÎêžÑgT¢»Ý›XwÍ|ÜÕ™¡Þe§ß•<6ŠÃº ò»­$Ë2ð?ä`þ×wsRÀ?ëEÙþ ’ç-ÿQ#ïýUþüAA ‹ðÞÿÑÐ5GàÿÁîò߯|l™Ü‰Âÿ õ.üÓ ÿ!üÿ-fÍjyË ?Ð àïg¹}HÓí†*€ ²¹XfÓäd‚ kå ør-åDCC×УIÔûøþâ½]Úî6s‹½»ÁÞYgo¯r¶UÜMwKÁßV ìz¶ÃÀq™x+Ïgø€S ¹da·<æSÅý+©ÀF6¼]ŒïWRGµìY³ è׬Ú °žUë°b”̓²±_2€zE]· mçN[¹“v^Ý,¨ù#"’ü[åc€?$ÿ6ºÆ ÁäF{‡î…ÿo."Àÿ7hë)Iþ1Bþ×WA€ÿ« ï‹©{ÎÿóžaþËûÕüv c0˜†€Fø ©ÂEÐ#õ9%~»ØgÍ\À!ò8Å> "ÙÊ$ö éÃRöxû;=‰ý@þ)AÇ%ÔA}7èz躹ÉI‡«‘ ,¹ÀÐ4@ä¤Õ¶šÁm๲öñŒ»Ák?´€;ø[®ÎÍðSà'N':¼ _3ª}4´Û9h·öÈúlµ´Y)nüç–G„Áw=W$¨„?_ d‘ êä Í …ÏÿP‘€,ìGä'—×öÑ6n(è¿S³À†áo6°,F¶ÝÄvXXN+Óãàø\˜ÿAÞœÿéŒò|±,Åð—ð üm%Y@CUk*kuE­* ¨”¥Å¢$_ÿiií@Qðèäè±Fý–ÿfý²ÝŒ&ÿþ'|˜ÿ!õZ‚×Ló»y1^F] 'íÕ§Ý•½µWƒ™ŒÑrÄ~¢W“màÿóáÖmý²­šÔT£Š¢_”7sâZJXŠñ³!>XLÄÅ Ù9^Í;¡(ºÝ%´ÿŸwÈá¿l8¢O(f ÍrJÔÕÒÈq-$¼oä2Í›ùT·•"Ìw;h'}.øð.€¿ÇFùì4¿ƒN,øŸð RàŸõþ üøþ—<³…€ÙvÐÿ?þ»ŒL‡þ-ÿÏŽfù‡‚·€.“ÐüÑD¸ý»û‚IþøãðÏøt ÜüaÞç¿ÃáAà™Ÿäõ"àB€…ö9™x@ÄŒÿgzt¿ŒæŒA,àè„vtD?<`ì3w™‡»ìý-îþˆ¿·&Ø]åï® ÷ÖDfÓ¢gY ðÿ”ë´ðáÿ¯×*ƒNiØ­ŒxTQïJÜ¿– me";¹èA)yB\ ]0tŠF¤¼Ô-ºÀ¾®“ÇäÏjšu=wd€îˆ‹p1=N&p\Àb¢B-€ï{ZRŸ,à›þNŽÁëS Àÿ±îtѨ]þÛLL†Ï†¿ÿ!ŸçÂhþ')ÚYa¯  ˜Ö× åMS.ð¬·ú¼¿öb€¶úƒ¾£Ñþ;/FÛO‡›×õ‹æÊ¨¢ÿjçe¨ó“¢þ=þz::ÂpD…Ì'3|0üµûKûçä·žÑȹ-‡hO›cßi\v™( ·™JÈï±Ñ±¨sò{] ,èW-^#ø;è~$(h#îfÿ“xa7‡á*ûùˆÿ>NÉËFOÌÿ¢›S¼;s¡bsþ'íˆÿ1++leÿ}f¦Çðwó‰ÌÂá({»(~Pþ‡‡€?äÿ»ðügÿqóñào³20ÿ™¿Ê ¿ÏǾgl£ƒŽ–,ÂdZÆé)C£¡«ÕŒ“æñ1ãä€u¼Ï>9àïòŽwGÛ‚ã-ÑѦðhC ‚oĤe™ul« ÿm!¼a€T,ö: $Ëü.yÈ¥ »ÁVc¾µ„+Þ+ÄOÊ©ÓZZ[Ïèš™³FúÔJŸµ3§ À~#}BTÉ–ÓðDÊî hg˾8üŸwmW8ü?™xþè¬ÙùŒÿ(ùcþ{ùö*ôúb–üAÏ&ö§cÛÍÀ|ÑÑ›š^í¸Y܃ð_H­å“«Yþg+•!i$ Ž”aŸ<ŒùeÎÜZø€JÇN„¯ž‡?·rC˜Gmò!R=|&ìA×SÂ>¼û <ðD‚.´r° ý6Ä·™O.Ñ@ø[ÐŽG¯íwpƒn^ÂX “ q:%Éf%ÀÿrYFøO˜Oøßj«ÿ‘ÿ`Àÿr žó?Fœˆ—÷ÐS^fÓ÷e/ôp}8|qþø6ôþÓàûOü?ºò¼7¶¿ß6P6|œÖ~>ùÄ}ð±}÷#óáWvõ×ÃrÐJ‹¹É+áäc¼lœ“Kps)^!#Êg¥Å¼ø_-¯5JJP³¬òÏû?„ÿïÛyä|fHþã²ê¢ªº¬¡. n¤¬Mj«à](%æ‹a$ê´Ÿaåj?;äe܈{à6 ªî®|Å·þ©á¹@à¯?[2ê—€ÿV#Õa¡{í (%ÀJ’~.”…0¿å4ÓB°¨%ÙyE~YS‚ ܶVH-@\àåpãÅhbÿ³Áæ“þÖMwàá¿_†¯yV%%‚¯6惿@øG¥Š ] „ÎCÔò«·ççyñ‡%ÌÊ þ¸Éo×/“´5#?"?"¹×N˜ƒð|Úw~صØ0¾_Ô}˜T<úÄuð™içÓ³ÍO5›Ÿì~©=Z0jQ Åí`¼ìH‹pâQn2ÎM'ùÙ´0ŸÃïX*@  ªX*DþâJ³€àßȾ…?$|üû¯êªëÆÚMsý ë²±1­¯+«ðNT¤Äåâj>Â'F sâ`g~r¾$‡•j5SQ-`X6h—ù„üðŸ´(|ý(9û,(â^4:âæÃœBÍj¤Ðq`Ò•¥ènÐúlSÐu{妳zÛ]{Ò[‡'Äþ«öÚEsmXSöʲ,yy5%%ðgÁðg¸Í »Žl7/CÔGáç1äÿÿ÷Íxž,aþãs»?àÿ ûÒ½Ç= ?‚¿“Š„iï÷0¾™|^:Èã¦Ü.ªËI™éžø]ˆÿaÏÿ½ì_á?wÿ²çü/¸Øy'âÖÁyË›ð?`fùŒ,·že×1,g £…ÍÁ2Ùÿs?ÿüww¨ð!ðÿ`Ÿ~xHÃáŸvª¦ièÚÓüÈ🔘ÿ¬9ÿï“ßç/Ðɹà?)ÀôfŠÞDÓØ:=Ë cëµ,Ý)[«aéÔš§;æiøgýX·/Òî‰ÏvE †A,À¨eƒÀˆ€œV±Ç&õÚeðôØä~›ä³*ƒŽÕ¨k#æÞL{wrýBp¯Ú/GKáƒbh·Þ«ÄöA¥è^1²[Hìg;¹än!½_Ì€ÿç˾Sþß?Ã?þýuD,àõEäõEàÿjê{>v>9àyÛ7]÷çmí°vÒ+¢ðŸÝ(&Wþ™˜<–óA„ÿ`qŸ,æ•F=h;ê”D3 €Z âQ$ƒk™È&ÙòÔÌw š~I?ªš.š¶Ë–ýºíºízž üχ£àË1‚?q°¬ á?ètî¼>·#]Úïó ‹ù™ÿùS7ˆXÀ}þ_ÜKþ£vÐ;EðoŸt:šVë„ÀŸìá/ä·ÉéÔÆüøm8$øe^x¶ÙÉ!rÙ…¨ïì&.ä4¢ÛîîøŸá?`?ê“‚î,à.öø{EQ¬»€ªü«¥bñð/È#ðø„á/$c¢LJ’ËH 9Y¹(¯Vä€÷VSÙn©æê´W:íÎZ«¹Òl¨Z5e£"¯¥…œ$Ÿ•§SÒD ݧ ˆ¾ÏÅõ:91ûrÊIÉ»—ó®GEÇWeë%ógã'©³#G»ö?1o}rºñÙÁúç;k?ÞÙx¸·óðøpA{¶l6Ñí6øÏÅòû9¡0'ã&ütZCù_\ÊIÊyi¥ «” F^‰ÈÿzV ðï”þۨþü!óùo[ ë™¶.šÈFåÈÕdE\Òu9!FÛDc¼\ô­ =¨õ.à´2H-ß [„'ào6"ÿm&¡}&˜`Ä U;ä‚ä"œRŒPM YQ''èÅàdQxn—­UÐyC5n¬`ø+ZyI=#¯¥eÅ„$ ø{9~;Óm¦; èü²Q³<›_´ûtº³¬Ù{:;x¬=\ÔŸ,ÂàmV:®E¶÷à^Êý>¦7Éð$öû½t`?èg°ü~šÏGõzÞZÀ;.?ø¥SÐE @&èçþç1ÿKAÁ}þ—ÜœÒøôCþs0ÿјSÿ>²ÓUË4ŸÒ ÿÕûKê#ÆÑ>øOJŒ}*ZrÝAýþiÇ”“Cªæ„Šùϸ ÿ,Ä=ÓbdZM,›™i»ÇМÿÀ|÷N.Ùô.ÿ $£žM€tÆ1œòŒ§<ƒš¯?áŽÆ#1ÒD¿'þƒYÀ›ñˆ\ ‰ù_ì²I<Ùœÿ>+’×"ù-ò]s®&]ëiÏfÖ·ónÛ…àRh)¼üÏÄwïó¿”=¬NåÓnU7hÇmË<ü?Ÿø^Lв/iû£=Ÿ×‰ï®¾½Œ¿¹Œ¾ž†_Nü/ÆÿéÐþd`¹é/ZÚqMݯuË{­Âv%³^H¨2Y:,Mʼn€ä¾€ÿ 4î–'ð?lὯâx@™od#›ÅÄn=}ØÎžtóšaÙ0©™ÿWmðÿIÏ ü' x5 ¿œÎ.€M} àÿÕÄ…ó¿ãêÈTw`ÙæÔðŸ=ñÌõôÖýäÆoÃfa»˜Z¦cÓxh ôƒž¶ÛÖ´ÇÍÆI£~\«VÊûwðGs§3éÍTr=_þÇÂJ²Èô¡ððwXù`è6Ü–·¸6#\àï6ó½6>iÝ`zó ±IŸ‡°´úÄ„öq¿d®D@ ‚1øQ·\þYÄ>‚.>* ö{øa¯ äF‚üX˜ŸŠ‹ÿ¸¯"ø×kŠ9ÿ ö»Õ^w žî:R{­Û\m×Uÿ+I ó?“”ÆcâHH ˆý^×%p;xøø'-b¡D-‹ óBÂô0®ûqXó¹ïø ûî§ÚµUo«>]S~¶ºòp}cakç«ýÃÇê3ŠÖ@3Ùèv7Ûãçú‚ìH”‹óR)!ð¿ˆù_ÍËÐ*ðÿë9øßÊ«þ@ò^­óKªqYEÂÿ[þw¶@Àÿ«æ&è²µIªÒ]içeœ L¤š—S¢bB‹r3an"ÄŽùÙa+èfùtR ç­F É<û>ï´A~f@ t1‰̪€¿CËÁ`Í4ÚÔÎ ÁzÁ $MjŠqUޯȻ%i§(CäÏŠkð½'$ù¨8$|p–ü4›žf>£N(Àyà¿foøÏ9ÿÁþ¦S ðÞ<;Àk¢ÎÎjÙ ôâû¨{ã~Ëü™‚ P(4{Ð}~†×G÷xi.7ÅéZ¹]"¯›êóÿ¡þ3¢>xhÆÏÿó÷[@w‹¿ó%ÂPÚÉK9¸ PÄÊõ›Ø„ÿÖ3† ˜yL==¤üü?Ø¥Þã?eþŽÐ¼hõÊÿ Ý„ø†dÔ1ð6 pºÕÄþßë! €´OàïÃùß{—ÿᇠ°ÌZ@4£•Føo5£ëkÑ%¶@rϬ皵<³V`Ñ -§B³Zh>™Ž„&°€ChN~3¾øo·Š€ÿn;_ê¶Jt`ø›.ÛºiãtP>êw›ù­Zf½œ\ÉÅÿT¼'}oE°øO—8êÿ‘\’d@• ¯ÿËñÝFê°“9éå4£’aZ5_6l×-ÇMÛùòßGDJ€w,àÉ4€ø?ñ^M<³àÂu}é¸ã¿ã>üAÀ|ÀÿÉ7èæÆy}í¸º²_^ÚÎÏ-ã±ñþüëµ£jå‡ÿ}4€:»“Ïl“]ý©øZ"º¬ÆÂ+Ä ÿ#þã=™¨¿7Â?ÊÿfÚ÷eE·Ýùm<à?ÉÿsìÏ>|Ì'M¥ÄLÑ |‹}Ì/!q_¨Lð ócñ£~A<(Jü£ÂlB\HËJY€¹¬^–C°¶w[ª^{¥ßY ºkÃÞ:<{Ýnñ¿ÓX·Íù_HKÒ I" ü!þ{Dnßaç¸M,·™á1Ò¼úe¿~ѯ}ìSí:üʼó…fýÓ}ÅÇòUÒOå²ÏeÊ/k_oï>|Ë+Óîæx||_Žðâ1a:)Χ¤ð{•2ÒjFVËÊ«9¨Ž„øá,ø›?ˆÿãò ÿymíª¶Ì¿iobmƒ ÿƒ®Ú[`PŒëë£ÚÚ ²Ò-+;%E»(oä$@ÝJJ.€–!"ØŸöm·]ÓuÛpÞ8WOúåýv~»‘Ù¨¤V 1E."Ë„$é >°Ë#„gÒ#%Ü"B~PÌ)þGì¨b.iÚ¯ÊWóáÍJl·™Düä4âvR1\Ô­WMûmÓñ¤åºí¸Á@Ïq @\à‡üÿñõ”¸ 4ã¿óo±Šýþ··®9ÿ/.¬Ó©™ðØ×aþχK׫³¡£åÂ>9Ò‹ym¥›©ø¸Úówì‡üJ¯Kâ´ àŸÄ~ ?^ÌùïÆë³sþÏWxà|œóáù¶Œæ§B2¢tXNºj¨±†ûl?(µÐOÆHþ‚dX”޲1Q!)¢VrÒZAÚ¬ÈÛ5e·¡ì·VíÕag 4ê®{ð ;èµ~Àÿr^šKŠÀDQa,,ÅŸð•6¦]ǰŸRlê%ëÉ‚iÿkýÎÓµ/öŸ­I>Vˆ?–J>•Ê>—ª¾T®?ÚÙ{tp´¨>¥i “•mwrÝ^¾ß/[â"‡ßHZHÊŠ)y%¥¨¦••¬²–UÖg šñ?‡A`þJ(üÏà_ߘcŸ¼¸íìÌ>ìî\w¶ÁÎÛ›“æú¸±6¨­ô«ªnIÞ.H9ñÌ’¼û.ñ2Cn†ß…VHÑ+Úo·üíÊü„ÐÕç`‚YàBµÁ!½#ÈG¹ BŒSJðÊI>üsÁ‡„ù¹(~Çtý”ˆ‡vs–×ʼö@xþÿ p(àC2Ï4Ìg˳ðá_$|yPÈÌ7shÏ»=¨Õ ƒóƒðŒ0‚a:ˆðßbxƒtO€æöS¡ ; «ä×þ‡¼Œ° ßð?äÿçp·”_òðüó.Þ<ùøÇm\€Є®öêÙn=˦eZ4L£šNÕ‡ËÿÀ¢Ý;íïÑ üüïó_«~—ÿ-[d6ÐÀ,?´—‹ò` Âüg‘üåªÍŲ:™V'Ëæ`Ùl|Ü’k·pì÷{ùß¡Úu"û™Ð~&vhD˜Èf€î†a’äça¢ü/øþ#™D ¿Iì3Šÿ ¢ Q2I"YªHÚ” ‡ \ éÆò¬¦¼k`©Ðf&²ï•R‡åôQ5{Ò*iûuÓ¨evWýÙ†ÿ¿#üüßœG_O#ÀÿçÏÓ¾Ãßð¿lêþÃòQ¯°ÛÊlÖRk¥˜2•gÃR€* Bðw °„@þ¤ àŸÆ‚¸C³ £6X(î–Íø\«Fÿ»éãaV3*œMJºËšéºn»iØA·M'è¦íšÕx9€¬ ÐyóßùËu9u€À°ìw²’Uà?È?‡?$Ð}þ†AO×ëœuZšnSÓ®Ÿ4«Gdâh• ΃½îæS;Hé-<«a# .]‰†Vƒ>Yùu˜yv—^ü1ÿÙó%ZÒ®‰x„„ü„öXb(¦@PUÁŸ-Øë\©ˆœ¬­$Ã’ù{ˆRaQ2$%‚¼HGÄ™¨0—Ó’rVR´Y”aþË{M†ÿʨ»Jà?éo ;€ºàŽÿ¨ÿüϧ¡ˆ¦c"ð”hHô ½nžË޾/°³ŽiÒÐÐÒäÁcÍÎÂñæ×;Š/6d?VŠ>•‰>•ˆ?•É¿P¬!y&"ËFåù¨”¨“A‘> üOGg‚÷ ·Åfo(Æáýâ\Dʆ… xQˆIŠ Q))®¤Åµœ¸Q¶J²NEÖ­Ê Õ¸³2é®N{kÓîÆyo/Æ=T €5ôš«xýWü¯æeÅ´(Ÿ›$#¨²ûѰÇÅ%•º§IC?;¦hö6v×£«u%_Ê…ŸK…ŸIÄŸËd_*W¿^Ýx¼»¿ptB9Ó2 FŽÍÂs9~(è“DƒˆÿˆIU!µRJ«@å ¼@U@-£BÊ*ÿhóOÁ4ÄýŸ‹Ê]øolÎ_Ü6·ž´7Ÿv¶žu·Ÿ÷v^ ÷Ÿö@φH·ÃÝ›ÁÎuûº³~ÙZ4U£ºbP•õÊl¢Z²:¿çæ",p„ŸóR#n´âéuPüB/jãív~òÎRð´óã6á?äÿ„[’ö*3>U>°Z‹lµbûÄá(­åN'íEÙpU5]׬Dÿë:.H/èÎ@·“ÀÍØ=ò]Œ<#æÿå¹ ËJ4·ÜB­¡yÛ‡ÿÿMÀ(†]Ý £'ÃåðšÇÍÒQ£ˆÎÓÿá9W#PËîU2[¥ÔF*¾¬F‚ÊWp˼!þ'Á9­l„²9Áß/"­ÒÛ!ؤçâˆç¥„D^À ¨ÏÆe þ!¨—UòRLZŒ‰A…(:ëTŠK*I¿š‘Ôó’fQ†á¯èÕýºrÔVøŸ÷×üý-rþ:|•xýø_+É€ÿ¥Œ¸fã‚T˜Ÿóc~ÐÇó»yn‡Ê^³áêô˜z´KÙÝXÜ^]Z“/¬Hbt…¢Lò•JùõúÆã­í僣Å U§g™Ì‡çu¡AFa¿8”ÄòLLžK€( P¤UE줄\ ¥¬g”4ÚüßÍ¡þÿ°°2©¬^Vׯjû—µ•«úêucí¶µAàÿ¢¿ûj¸ÿzŒôÍôô ëÅxïéx÷épó¶¿~Ý]½l«Î›ŠI]6¨IzQ» læøÕ·˜`壬LˆžôSãÞeº7Ú3 .@øº@:±€¹ˆ€ ؃NvÈÅÁ^€DöÍΙOú¢ü÷—çùwk‰^ì.þ«¨ùsDÃðG#ƒP pB׫ Ã]þ¿Ï¤;þ;ì¨Ï3ç¿Ïá*ÀÃþ»<\à?Èåá<ðßÅ…*R’“„Îøˆð–l1xQâ5ˆ½z)¸€çLê>•øÝJ"ŸKB ¸fòcò ]¶ÉÃVqÈ" ™„a3"?ðŸX@Ô$‰¢^4l•Â;çüO7³áíB ptÜ,ž‘ð?nÛ ü£›~Èÿùætì wþß¼mþ„^ö}OÚö›¦ùª®¿¨KǽÂ~/ ðßj&ÖjQU)¢(„füOzPøG—8C‡þN¹@{bx‡è“V©â.qÊ£ þWÛÍè^7v0L ³'£œšXÀeÅxY1_U-×UÛU ×-'è\àn_Ð5ºòÒ{9ðL.,ÇtdŸŽ¬çcÛùÄ‚e¾˜Z@w‡fuÁý¶ ÿ„ÿã¾aÔ3»†Q[;hž’;Ô:å2O€Ïûj÷ëùÝjv;ŸÙÍ$·Ð¢ph…|ö»Ä>':üå¶s=ž×Éõ»qÛÇ'ŒÁŸ[PŠÉ¯ÈÅò y!‰°_N¢8^àת™ “Š» zP±–VÔ’òjBV‰KAå˜ÖSŠFNÖÌK[Y§$ïU”ýšbØPšÊI{å¼»vÙß] ¶‰.û[—}ä“Îz/4«¨T+ÈËY ”…¸0ãƒ@ ññCøg/tX¹#Û¨eÁÿ¸ã=êþegƒ¶¡¢¬+©«òåºc}mqg›²¿G?Ö,iiFÛjãο_ÕâD’ŒIÒ Y&)ͦd¹´<—‘‘F–¢šTTSrôM¥åmlÀ’ÿçpU]¹®­ÞÔמ¶6_tw¾ì¿î½í79üvzøÝùÑ·—‡ß]½¹:|}yðÍÅþ‹ÉÎóñæÓáúmõ¦·rÕQ^´äÓ†tXƒ ´ ¼ZšSN0ó1F&LM–¢6±(€±[4'ÓL³[!ÿÓ!~ãmB²AÍÉ·2<6¦×Žpaðéóù.­̇œOš<¦S ¹xפFÍ|’ü ùïÃÿÐ"¹«Ñ¬_"äÝoõÏ3?^á¥Ïû< tþÑ7’à…l¢Pœ ÿãt,Ëw× #Ð/Ř­ RDül¢YÉãå¤}\PÎ7›öI”qñï6üp üCFfPàï>c8O™v ÀŸiÒ0 wáÁwqÞüäð‡çßÉ&¿~ óWùOZ@÷ùowBÚ‡ÌÏæÏøïE¯Ý>À>—Èí僼,/Ïçá ¹>—À‹¸úl¨‡ò›¤>ƒ ,À‹- è]ÁRäÚÙNr«_øWÂþù ô~øÚ¹á»RþfV±€9ÿÑ_·M±òÿI·, ç_™ó<î§™c¨¦EÝyI?-.Ê&°€‹Š,à²a¿j:ˆÜâB€Àÿ¢ïžôãžcܳú–Qß4Z€äXÆéØD\ ‹©uVÜu~ÞÂÿ×ñÚÕÛÚaótÐРûtªp>|HnØ!P. p²‰­Tt=^ Ð? 'Ÿöåa( FçÄC¢xD”ŠKÓ I&%I§ÐiµlFVN*ï$‡*p:ø›)Y'+äU¨ÿ_Z9/¯øþ?ko½êï};>òƒ~r~üÓË£Ÿ^ÿìúä§·êŸÜœ|wsüí5Áþë˽Wç;/§Û/¦›Ï'OGk·dàýª°]ä7rœJ’UŒÑsaZ<ľ³„Y›µ‘ÍF :  _†@"d&7ªÌwc: »ɲéÐNÓ)º„Å žEú³ã%ÃñÂL¸ç3‹ý‡‹óV?^äÝÆ•Â<ö“ž|I>7sv˜ëþw{{è `ˆ=ëöÜñ?çÿ£).(’ä€ã,á?2,bˆü~‘Y82æüyiA+ŒEÖÁÿÄ2t) ™ö€üòÐn+ È’¿‰…áÏÀð§ÿmj¦Y:ÿz´òK#ðßßy<ïü ˜ÃÞÿ!ü?=¦þøOYHgL,€?øoÖý` €ðßjgØÐ*0²Rÿ‘ø€ù< Þ[ø{ø>ßïåû3Ãß üŸv7MëeÍ0)iþÝÌn'½ÝLlÔck•°ªR䲬_šò¢}>d‘7jãÍù·pA ‹(i¦ìè3s¢&6<áó)» ã”ä=ò’oµÚªEvš±ÃVü¨›<ê¥Ôý´f”ÕMò¦iÁ|^´]”¬“¢ù¢b»¬;‘š®ë¶ç¦ã¿jû.:žiÇ u£®}еôºÆ~ÏÔï}ýp`‡;±<Þííœr÷îÏ‹›Â‹‘þbx§¾î¼§þcéÆí³aSÓ¯ŸôjǃÚa¿rtOÇ ^ù¨[:D½ ü>YÈÅ×Ó‘•dHÈÑŽMtzWJø©€(ƒrQ>*.ü”½sÚY¶·û îi[9ç„ "‹œsÎ9 Bˆ œ£C§éž™ž|Îyßy×ÚþÆrÏÔ½UOQØÓíîš¶ŸßZk§ðrª÷xgÖ]N®¤×áÇ)6o¼R+¤¤_ªY6å€Üu¤–jz8̰€zaù¸¸r\b5Ê«Í ÌOÇþPäŸ7¸—­íëÖÎM›ŸWÍí«c|BG­4Ð)à%ÌyÖAŽUJã©_ÎD—Sá¥DW™ÃžYˆ3èhl&Üæ„ï´JÆdÂÉÎÈ.w¿5°½Ñ·³Ù·Ãíî `y½¼fR§Ÿ1C›l_öºVüîå —ò­„ý¬H€ ®ÆÃkÉØ™qð3Ò,‚°r!èqX•(»_«%8$§]?Éq€³Üú9é®Ê¼ÛêÎc}÷©…ÓžçPóK¸” ÿŸo¿ÜÊÿp#~¹“ü|#úùZòÓ•ø‡‹ÝïÏ‘';Ï-îÃñÆMs~°ÒÜŸ?ÊÎ`ÄÇ!’Áñ¸×üί ÐÚCô\˜^‹ÇÄÔ*`QŽvWªÆ÷”cx™QíïÉÁT¸§ØÓýí*ñ0 –8ð×HÞ«%ÿ¥‘~§•½ôŠ>£²ß¤´è­úÀitvocpvöäã¹-×°Ç3êóRíý“@(0MP|á ,øã“bÊŸôÆ&zñDÇ]Ñ1gdÔÆ:MA÷ù˜-£$ÈIêñî¡ài â˜Û§è#@ Ê~<ç5C«AŸ~š.ø:ÉÌß®œ¶íMYSFé¸N2¡‘Œƒü廣Á°˜?$ÚnÞÐõ?ÿ%»#’Ý!©h˜ÿHgìßYüEhèU“¤¹Šm0éÆÌ† žøÃ-ö)‹cš|NÙ\3v÷¬Í=åðÎÀ'`÷L;=3ÐP<žyóˆc®{sÑg§]—üßÙë’áf»—ÞÀ‰ðsk@-Ï:ß³«½åØõüÚqÓ,­¶Êìve ÌJ‡²ÿ´¾ æ¿hò¨üoO€›æÎÿ—؇…ÕJv™ú¿˜XÉÇV2Ñ•d÷E¼s>ô¼³vó´Y‡¬ Ü‚?°Øò]þ üÙ܃–\5­3ÌšÌs6;^ýê÷¬ù¯‚üÿÇBìD„“BØ”Îd ÄW³Á•BhµfÄÖãkGɵV# ]ƒ€FZ€ëÊö}Mðt,zm‹_ÏÄ ÿÏW`~ÅO×{(ÿ;å¯w²_ïä|AP ˜ øxÆ=á>5!ØgUŒ€Z~¶œš‚H‡'!¢Þ‘Ôºd-üo6 üušª_¥ì£÷ˆîÉñ}(©lˆ"‘ ‰Åø(‰H4  È$CRñ tw€""RÝÒ?¨ bÍOüÚ×É߃ù‰ü q°hÀü{ø©ù=öQ}¤»·sü+³Þêÿ@`<œ`xœˆNc“ÁÄT(9 ’Ó4h¸cãîÈX— ÈßKèNÑ´€o‚ú?àžù!Ç@_õí¼ðn Y¦˜P?ò÷h§ÿƒü­ŠI³|Òò)wG@þøÛI0 òßÝ æ§ògêª ø=Ö»óçßùŸF@¯ÿÚQ< FNÌ“¸½‡øŸü­®IÐ>ãFþÈŸñ?ôõôÎ.²©{™Üx³â³.ûÍ8¥ Œ'íÛNú·>^Ü¿ó±7£>NÌ¿ŸøÅËÿÇÝÛW  ˜Y>ãŠG¿äÒÒã(·~Îeœ§þ:9ÏVÜÏËFwÉÊ/yä‹<"ò¿jv‹ÿSÜü‰cDÀóIx%)ðr‚ÅÿÓ±ûîÐÅÿù¾®Û;N‰k þA”ÇÈ?çEù'ÝËqÇR̾òYçhñ­ÿeÆY bœ£väÿ¶þ÷òH+ÁÝJP@ƒ ‘ÕcÊFBÝJé!ÚY=D@;oDЦӒådßÚ,˜Š¦ú¾±Q6×+Æ£Š¾ZÒ”Õ‡U@Y;TÕT4ÚMì€óñvЖþ¼mxëÿ†–úÿ¢¥§\6õ ÝuÛtÙ4@ ÀwB‚àìPur°œV•§Uåä@Ù®ìÑÑQQ)@!É'û‚6R!N2ÈNVãþå¤ÌŸ.“­;_äO÷·€ù>PËmå7¹Ä )¬SêÅz‘êghìƒö×[åve³}°zRe#‡k§5Îy}ãâxó¢¹uÕæ]ŸlßžìÜòïÏðyw²sÛÆD¸lð¨ÿ[kòZ­°þ/g–K)<“UL¬â,øw†Î%á[èl²N㋚)ø“Ewk(Dcô-€U™tL£šÄÓŽæ9«mäïs³^6‘?›È;€]@x-bSèÿu¸Ö¿’ ¬æƒØDØÐ4Ó˜'¹ ð?)þùG—–èÉäÓ™„”ýŠŸo” ÿ?Üîýñ^õÇ{øTüéQþ—§½??H{”ýùAþ§{ÄÁ¯÷Ò?ÜŠ¼~¾ÜþxÎ}hq ΗÛåEˆ€Jz2›Ê„&¡ˆ¸ñÜ+¸—ñ¿VݯT¼SÈßã­q²A™¤_¼Û'Ðeøü>ò Ì;Š`û½p§o—oÐï—>Ñ6‚¯ po?õ?îíQôöúé‹] «–ÜáF/ð!7ðxCXt…—ÌäÑü”ŽüC“"(Žò§f€‰€·)øÒt™:C¡®ÿI‹1AýòwOø]èÜkÇ÷|ñUGËxÐŒÏãÝž† ¯n£tk&¨üqì¿7‰cù„Y:Å¿^<®Ž(#rþ°”ü.êøŸ¬ùöÈ„þÃo3yÏÊïïûÿËR`"À ÃÐQtÆq½i"€¦@gçcÌ)`/ðÿ½nœdú\ äªFzŠ%èb…œ¬ g8AórÈÄ ›WsAÞÒà§CÛ© /ÜŒ6¾à[‹ûÖ!ÿÃXWˆÿ—éY§fÎ¥wèæâh1¬XÿCC‘lçãâJv¯VTáßš‰žùºn})þ{ëÆÿ/(þŸŽ=u×Í•ÿÍŒü(±[m—Ã[Tþy;ëYM»VNôÔ†“²½ýæè¦CÄÿ ý˜‰êg Ó ÓBʲ”µ³óNNÞ½Uðp‹Þ}Aq5$«Eõ˜ú8©n¤4Í´¶‘Ñ!9}3ohäMõ¬¡V0Ö ú£¢¡VÒW‹ÚJQ]ÞWT”ÕUo4»@=O#àMåOþ²m¸:1×mäæÄ pÕ2B ÐDèôG.ë:àâH{^ÓœUµ­u³¢¢)½@%#*¦vŠÉílt s 6³«, .£î'‰ü3 ý ¨öAûüñþ&ª>¿~\Øh7÷×FiãkÖ›p>ÕþÉÁÖi•{vÈ;=\;í­ƒùËÆÖU“{Ýâ1æ8ðå~xÊ¿ioÃ_Cý-ހЬjvå )°RN“3¹I6ükCr¥ ßbê[çEˆ£»€N à0v˜Ã7èf,¦¨ü]|¹2è[ ûðÄyïfµëÿÕÞËŽ…ÖÁ5è›bþU NHxWR^€R˜]ެBÔœãÄZ3-ÀúY‹ðÿc}—úÿó9N~~º–ƒù_ï” ÿ?=ìýö¨ùÿõYñ×å/OrÈ‚?>Hþp»ûÃ%ïÓÅÖëéú}síúh嬺„ƒ Üô~r" šˆùFƒn<*¦þרúòïdÒïÈÅÑ"!ÿ;úL-ÛÏ%Ï o’Çå)Û[};Ü÷ pûvyý~trѹϧ×y‰üIÙ?Dåï4âI^wçúQzüŠnÂAHÁßýÚ‡§(Tþá(‘ÿƒéi šüÉI†ß ‘Õî!°óÏ®o‚ú—ÈN'ú˜{Ð:å7OøLã~ã8Èߣóƒó¡æ§Pùcå/7ŠÇ@þÚÝQ¥`ä/Û’ð‡èðüÏlû$KƒTþÌÎÿÿO|ëÿÞ…€îA€q@§þ²Hk `£Ç{ÉQ/„¾ L#÷¹¦ÿ{<ó>Ïàw3'ññ GðØ…‡>leE,H!" äÃüL˜—qTx n$ë@ÊÇIz¡X‘_!èX ØYÐG@ïÔ/صs€M3k×Í ÿM¸Üìµ.“ú3â“R(þöÉ#_Gæ‹c+ÈŸñ?ÝüÓ1?á ~Øöwhxëîûšãªl¾(êÚÅqBR‹ ÂÜýàF1°^ð®ü3nVʹ þÇ^_ü?0΂ÿÆÿqýbúéˆnŠú?nœOš3¶Õœc­àÜ,º¶Š.Þ¾{»äß)ùˆOXö‹+I5¼W‹ª£¤º–R¥5HF_Këª9ýAVWʪbv¯˜Uó{¥â^¥¼wPQ@ÕÔºº… :ÆÿÆü½ò¿>5Ýžš»X€n t">ë†áêXQÓŸêÚUMoÔŠ¸5¨’“¼br«Ø,ÄÖÈN¬ùq‘—˜¿œæ0æ‡j¿^Ø¢Ú‡Ot~Sϯ5Šë­Ò&5üï¥~u89uožÖÀá\àòx¸"Úc~*ÿÇ‹]R€Dt×M.$ÅÙ‹ ŽKlhs¸ˆ\ͲéU<𯃠ÐR,°ˆ{AÓnëôÂvø#¦VÀŸÁ1 üYÓ@s=k³,xÜ+>ïjÈω9±Ðz"ˆÐ—.Áü@78ˆ¨@î>JxYY?»ZÛ­BT£¸POqšÙͳ<üw( þÿx*&þ—RÿÿÒ‘¿’Êÿo/{UþýƒüÀß?(þö*‡ øíIòëýîO7Û?\q?žo<·Ù·•«ÚòIeá¸0}™)&&²‘‰D[Ÿ}Ôiú@¯íרú¡ø—JÞíŠÞ ø|$÷ÝæV°¾ñ޳þÝÚÚ; gí¿€õwÜõ÷Üw¼õwÛBêaŸBÜß)þ÷ú Xù0òwF\øöʰ×Få?âwÜ(ÿ€o,è'?DÀ(|¡Ð8%žˆD&CÑñplÅ'Ã8üA©éPf†úœÏ¤Ôÿ½³ ¦ÿû»;…‚áÉ@hZ þÑ>OÇÿ~⟠Ÿ-¨ÿ½ =ÈŒîóí[ã€E>†•¿lÜ$ÊT'ƒâ_)¥þï ùáDq"`ÌOÿƒüé…oôØoÿÉæŸ¯ýÿ…ž½@äP0Ý4¦Ñ¿‰€Ðwá›sò[ÿû½‹xÝ–k±{U#ø9äX+b[A,¬Rt— (Fù@>¶‹ò€l„›‰l¤Ãë©'XKúV6ñ?^žIGIPçñ¿¯pçAþ·cÜk?7”ÒÒÃ^øÓîNþñ¯¶ówü þjyŸZ¾ÇfGþXüïOsêFRZ‹î„·ËÁÍ}?Ê?ç^ͺXPüƒÿ“døCä¿Ð9Ûeœ£òïõÂ0OÿGÁÿº©˜n~˜2-f,¬œ³¯ç'!÷‚¢o·ä—VBÒrXV‰È«1|õ8H*«IÍaJ[ÉhK)u>©Ì%äÙ¤ȧe…œìM©št!àÿ³ÿïÎ,÷çÖ»3ëý¹ `R€/”»6‚wb7ÌWuãå‘á´¦;9$]Ý2T–íã-Ù•¬ ’Ý)g¹åÔf)ÉéœiMâÍf3ê9.rÑù¥­f™ …=–úEéà<Yg89Ø €ð àmÜÀн×ÍM঵uÝÞº9áÞžòîζïÏw.ø—àùRøt!Ïùg;·ímÈ‹ èŽÖÉ*" ^\;*°É9øo[NâVœ|d9Zˆp/ß9]€Ë<`Õá Gx(XE¯[™4flÖ9—sÉïc… ærâádʇ¼zÌ¡eÒÔð¡Lÿ:ò®‘¥±UÄÍŠ{V’VÚ·š ¬lèº ëàÿ“ÂWþÿp"ÿÿx%£þÿ㽪+Õß^Tÿú€ü÷'ùÿ|VüÏ'åÜ#) ýíIüëÿwÛß_o~8[h¯Þ/Ÿ,´ŠÓ‡¹2šH‡ÆâPñºp ÀbÔiúÔÊ>¹ìDô^ |òçrßmm}·¾>Àáô³ÙïWWßõ²Æþ޳önóÝæÚw[ëßÿܨoÅ;ï©ÿ•¸Õg寡•ÿ M7ÄÈßcèñ;Gž‘ w4DÌçcÁOÌ …Ç‘q>3ó²Ì!æïš¦tå?R|ñ%Æ~ßÿ4t5™ú#À7å÷NRÿûºþ÷['}– r¥ÿ¸[7îÔŒÛÉ&OÛÞ”Y6 ˜¤cˆdÜ Bù“âtÃÉΈx{˜ÊŸúŸ‘?NÏtÙ·sçNþÇi¨“jÙDo ð•ÿ»ò§ÐÀ+ 4H àã¿ÐÐû° pLôøÆã™õyæ°pÍx‹—›\äKÞvÇ•\; ±­”cÂq~‰’Ø.&·s±­lt“F@Çÿ^V̽ö°à× 8Wü|?Ña˜£7ÉÐËd\æ9·wœz¬w=â y­¨:.ké¶zÛsgøC†ÿÔÿ/§A¼K ~Øù{ñ´W£#ÿë²ù,¯ig”õ¸¸”ƒÜR`£èã0þÏ8;þOØ–£¶%êÿˆ wFý³Qý|̰ÔÏ÷’ÐÍüš )Ó2D@Öº–³qò¶M ãÚȺ¸^Öµ“só QÁ/ÚJ€RDVŽÊËqP‰«€bÌ¿—‰ÉÓQI*ˆ2 q.#+æåûEY¹¤¨ìáèPÝ S “¯#àwåsÖ‘ÿÃ…íñÒñpah @ÐD _ðû™ãîÔ~{b»jš/ø,Úe]Gw¶ªJ’ò㲬VÜ=,«…jv 8ÈnPóWsë‡ùNÍOµßªðZ•­ö·Y† Ø`¦:ÝÁNWøÕMÂúÙáÀ8Ÿnédª}0ÿm› Üðùƒù¨ÿÚÜ´xÐ8À¯LÎÆâÆÑã}\h +ÎéµR‚UŒ-'#‹‰ðâ›pšð¦ ‹~ʬ›Ä÷(M3ë¼×µð¯1ò'=ï:WÉ;—é­‡ëÝw3éÖ6ø>éC¤X…ÈúYÐT¢œjœSCÿsÁÿÌüŸžù"ó¬ÿAÿïýùQòÿë³òŸ¯ |å¿>ìÿÿ÷û½ÿóƒò?«h ü ÉoO»|ü|Ëû|µñzÊyl²®ŽÏfŹjvj[Ü òŒºmx„¾Çÿ|>NøÁÿ›ïÀÿkk}««},Ö{ õ?‡ÝGüÿ~‹óZ€Í>(þ¡Ê•ÞËvû÷$*yÿFõ€YÛ•?yr—Êßkà HA÷õ?h?¥>Ì€ùRê÷ò&¦"Éi ‘ÿd0Pç÷òïüЭ¡ô¤Xo„3Aÿ´ß3pMc `Ÿöù{M“ã„KÿEþVÿ“ÔüFÉ(û ü5Â5¿ãÙn$Ààˆv†‰ÿû¨öÅÂAJgÛ‘?ã¿FŽ€ÿ™xã<FšSD9 µŠF?®ÖؘðžO½y"`" ûRÌÿÏù=sôöÅýö€½ñd(ã£Î•¨c9f_>ˆïÄ•D‡rr‡RL‚º¹¹Ø&б`'}ð[}…^ö­úߺ@ÞûמlÆ»iÖaÆgÄÿËÿf2²³Ÿ’ÐáO£¢;;2^6,WM+õ?ÊŸøÿ©ë€úŸÊÿ®îÄeߊ…ÿÍ”ŠÿÃÿ À-û6K^ξg-ïa‰+i_‰[—b–Ũy¡¤€a!Fˆó§ ŒÍL\ °4.A¤Í« SÀº‘rpRö´c3íØJ;xçvÆ-Ìy…Å€¸Dð훘(Ç”@:*Ri2,ЇwãaD@6)Ég¥ØìË«eEí@Éø¿M" · tfþ§&¦øù?]9ž®œLÀ çN DÀMÛzݲ@/pÝ0\ƒ'55Ý/Ô<—%G%am_pTØ>*òj.}Íð¨¸uTܨïoRó·¶Oª¼ÓÃmâÿfw˜ß£ýuJGûµMàâÌ¿y ÆnlóQûm\ÛÅQÏ ïþt€ÚÃêí¿\í½@Z€m\nâìZøgáö¡ Æ´!äæLN5‹ûQ÷ã+éÈR:²L·…\s~;^m@8Œ3ôw©Ó¶àq.}k‘ >—Õ~2º‘j'º™%Ÿ™(/PŠnEC›ä&U$àÙð»×^ôpÝÝÑQÏ*Aäƒìýȶ Îqf«]ع,qI À<¼´„OÅß_H øÃ üO‹ÿ<“Êÿ£ò¿_¿øÿÿ|¯† þùAú—gÑŸŸ àþpµùá|í¹Í¾?^¹>\h•æêù©rj¢ƒ êñÚ‡ì¦Îúr|,ž pà“Ÿõ!gÍîïÊ¿¾C;°¾ÖòÇY ò d»ïiñ¯Ùëÿfí€U×o7 :MÃŒü}Žah= }ž¡ w˜ú?B"a4$:0ÂGçÇ'¿òj%'Zð3|d8>þÆÿþ؈â&Ò`x’!šƒÿû:-À4=æì6£ÿº1»z̪³ì›åfù¤Q:fŒDþ#Pù«Ã`~ð¿B0‚Ãÿ)T*£ ä¿ û$¢Ü=EöSÁ§L2DoûDÈæOp>5üö?ùŸ:`  ™PëÆTZ|Þ—‚ð†Sÿíø°Å>þ­ÿý„g>ì]Šø–ñh¿w…îúƒ2>Šû$Wâ.V5!DÿÇø•ÄN5%ÒüJ "`»”àc[…èf.¼ž ®A¤üøŠbØÏ zñÝXð<^#@þXËŒË6xìKð§#ÜLÇ¥Œø€¼ö‚O}êÏë&ˆ€ë–í¾íù?Ÿ¿ÝùòhyÀÿ ¬ü+–«²ù¼ …â¿™Ô‚jWño•¼  àZ¥þϺØiç*D´à ú߸!槤õóÃB¾S¤ÿàÿ„n1,&+) RHØØIÛ:·à5§ ;7í¤=üŒW€ßE…°¤‘…,”‚ü“aI,°K@$£»é8‰€Œ¤˜“”‹òƒ’# ¦ÄU€º" ·ì¿ø¦òï)þí$0€çk×Ë€/È•çéÒMy¼pѸ?±Ü4МÕ5çÇZº_¨}¨hUåͪä¸"l”Ç¥ ¾Ïù—F™ÛùWwÀüÀYmç¤Ê¥t¦ú¤à?;ÜúÊùõ f¼ÏhÍO†±š­Ka÷|À1ç³á£·mŠ¿gÄzù§ã[¹8ÈwÉÆx™Ä6=7òo½›Tþ~÷†Ï³æ'@dƒôjܽšò³3~v.Ä.†Ù•ç0½YÏq…í³}ÞE…wSãß žÚ_üÿË­ü×;ÅŸöþò´÷—½¾*@þÿóqäOÿÓ€.à_eÿ€àYðLJíŸn¸ß_Ò`õöhéü`¡¹?{”›.%'³‘‰¸ Šp—uˆŒ€ö}RqŸW~é‚o­ÿ™ù‹õ|çpú7Öû@þ¼Í÷;Ü~·O¸ý^,蓉±ò— Pù“âÀ¦€Êäï4 ºÌCë0È'?®að?È?ä Áÿ£]ÿF¢cÑØx" –œf`ü&Ðâ¿×ÿXùw˜øñq¦ð‘Ä'qil2E0B¡éPp6]€R`üï±á+˹ébܦ·j&èÅžùõ¿^<òW‹†UÂ:ùWîŽí qç'Ýü#&KÀ¸ ¨+º™¶óÈ»l„Þö¾e_ÝÞ$5¼V9ùoç? fiý¯V:þ¥]€Z?¤1 Ó. 3²OZíS6Ç4= æñL{½s~ï<õØ‹;"èݼ4b>â^Ž»–îêÿƒøN5Áù¦ˆ€rŠ[Jní'6óñl”“wö¼E¸/:äÓ2nûá0Ù‘-#<Ìñ+i°ŸâÒ]"Ý`ÅÂ,ú–zÀ³”œ¶9zã(|Âw·sÎã\ xV"5øã“Kâ½dyIm_Þ¬¨NµgGúË®NÞµì'NhžN<ϧ^FþPüß;AþWUëžñ¬ '˾òã(ÿíŠw({6Jîu€¶ygÇÿi2‚’ði]Š™ÀüIórÊ´ VÏ–2¦•´qœÓÌàÿ˜ )DLËaà 0¬„ŒøÞMÔÆÙ·â.^½ $=;1÷vÜ#b^AÔÃyv<ˆ€X`'¦c»ÙÄ.}þ¸”WŠÒò¬V‘×äÍú^ëXyÒTçMÍe[wu¢¿=5Þ™îÏÍàñÒúte{¾¶¿Ü¸(¯·îwÞ^^o|M¦xÀýBæë¶±»YHœ«Oë ‚ìäHÚ®‰ÛÕÝvUpr(¤Ú?;ž×w‘cA B‡Ú¯óÈå ÛtÎCÇûtÂOË~:Þ3ê!À—§ þ3ü/W„O7¢×»ýá륀B»øEèqº@[h@Ú•Ífi¾¢UËbPH²I°H,Ó O„ÜôE›åoþ1n&¹“Ilü²! W¾ ñ\|;ÛIEùàÿhp;ìçÿozëvûªÃÆœV–ÛŽw¤„Ýx@†F´É…g?Æ9HmÕ²Üz~ûdŸ{^Ú¾ªîÜÕ…M¼ðíó¹—®$ºWüö¨øû³âŸÏò½ÊÁÿÿóYñ¿Ÿ”ÿ糊Â,üýEŒK÷ü_n·¼æ}:ßxi­=4X7µÅ“Òìqnªšš,D'ÒÁ‰Þjï½\ò·ýïôñy¸íscóýúFgÛ˜Ÿ,ûâΟ­Í÷¼Íïv¸ßíû¾Œ}èžO²á“Êßm¤æ|Öá€}8ä%ÅÿpØ;ò@þ”XxäMЈŧätotäêN =~°æ§KÀðéRá¿õ?u“)üBn“£þ÷y§¼®)·cZòŒÎ¸Í€÷`X´fõ¤Q‰w;:ù˜F:¢–Œ(ECÈ ;þ'kÿÉý¢>‘¸_,H©lH®¡GªÁáZå—{ž;ÐkÿI üÿkT“ÔÿJÍØžz”úŸw×wýßiÞÔÿàh|Dþ•?ñÿ}§C÷­Ä= ÿ% –vóùåô!E œÙ.¥q£ tôü{<² -@лÌ<ºò‡O—c~ïN‡_?¼4èŽñ£¬lW5Œÿo›h Àÿ4¨ÿï®ë#"ÿŠå_Àeߣ#.˜ŸÂøZðÎþ_I;–!Rö D@Ò¼ˆ{ûM‹@¯ÿAþ@Ê°Äø?ªý  D®¹óéñ¥;dæD¬[øð¥“ D]< âä¶£®ˆ›€ÿ¡þOEvÁÿ™¸ú?'*Dûˆ€ú¡ŒF@»¡:k¨/ZZÿ͉üOåægäOüïx½uù{>Þ{?Þû>=ø)ïný¸vÑ•øE GàWƒ_󪥻ljáœ5”ÀyCœC H(í£Ý“ºÌq,êÐ’à_4HGûÛô–ž^çw¦=dÎßkþùó©üÿøÆÿo" ëþ¿ñ?ž2 # ò"›^Ë'b«äDžkŽù–ˆº"XMF·à÷g.Å/¤x@1½½ŸvJiþ~ïÊÈD·Ñÿa~,´ l‡|Û~÷–×¹a·¯Ùll»eÕff9,+n+Fvn6€lˆPНWÓÜZv»UàB\àƒ/tôá\‚-ï•þz  ûë£ìïÒ¾È0>ÉAø¤ÀÿùÿóUÅÿßžEy‚ÿÿpÃûñz üÿÚæ<5VoVÎËsüt-5UŽMåÂqïhÀ>è2ZtýZeßžì½LÜ·+x/Ø~@÷ü¯s æÿŽnû„/dæxÿ%¼—‹úö:w»}9äkÕ:õ(ª}úé· ÿƒŽ!(þƒî!Œ€nñÏø?OÿÇc(ÿxbºãÿøt$Ö1?…úèlõïªþ÷kþo¿ã@^Ÿ´ñ¦S«nܬÁWÝ {ôZfâ¼øüüîË„CˆhìIðæÏA¡p€‘?=U-“+ö òÇwÞÁÞ:U÷¯Î!ß íþCñOýtýߙх"ÿ±ÞúüòǧëÐÿ³ÔÿAßBüßú?æFÿ×3¢ÙÝ#?|ÿ×òì²;èÿ4H›¹ÄF6¾žˆ² "Áå ]rá»Äÿ¶iê¿ÿ|%"›èÿ´ œVr»µ¢¤QQ´UguíeÓÐõ¿ [€v'ÛnZü_Õl—–³’ñ$§mçTÍ”¢†ø?¯ìÙzãÿ²—Óë Ôÿõ?6²€Œi€/I=©ÿuó=òŸÂÚiJ@7ï×,x4óøØa5hZ š7BÖõˆ}3ÔCرvð€ »¸ø?êÙNv2‘Ýlt7Ç+ú i|±¥”߭ŵÉQUÚ8R@ þ‡úÿ[ÿƒü»Å¿ƒúÿà äÿéäïûü `Üû° ¡îJ±~€F4”‹ü³THkwÞC œÖ¥ àôX|Öœ5D— 1ÒÜ…¸l2ðë–èu~g…\}ÊÿÖütWgïÌ¿wì|º}ºSè oB»õž`üOç?Ì*p×ÿ,ºµ”Z-&VéÛµä\ ÀYÿ$Cœt|+›äÿ÷3;”Rå—¦ÿçâøhu""ˆ…øÔÿ÷¶ßÅsØ·lÖ ³yÕlXìfDÞ‘èÀµà„‡¬aD7+In5½ÝÈmBœ•·/«;7õÚ|:áÍ?×Ò_n $¿ÝKþz/þdzüÿ¯2€F­üÿñ"ƒâäÿÛÃί÷¼Ÿ¯q ý²þ¿«³.*óíüÌQzº’˜ÌGðjèsØm°ûuê÷*ù;lï…Ûß x¸ ˆFÀÆ:DÈÿ¿¸±OŸ'?ïd»ÌÅž}Zù{‹rÀª´- ȟñ?™ÿ aø¾Š€Xh<žHD&ð"> þÇgb‰êzì«S®ûÈå?T逇àýÂ(Õþïfõ?ð•ÿÃx¹^4çò¸'<ÎIð?y}lœ¼¤9F[ƒ¯bÓ(FÔòa•lD)Þ“ )Dd¢Azá3Ê_4 êòFþPüSÿÓøÀGÞ5“tû1ý™=õÿÿ3Pÿ÷¶¸È8Âø/…øªþŸyãÿ®ü¿D@§þ'-@3/mä$ÀqNÔ¼üôú¿Ú¢гã‘ð?´w/¸É£ '¹z~&à[ŽÙ¸¡‚ÔW¥Œ€úÿ¸,oU•§GxƒÍMÓþ¿ká*ÀCËæ'òwÝ5Pü_T-çeÓIQßÊ*›™½ã„Œ,ûîâýOç?e×:Pò¬íÿSèBtÔÿië[ÿ§ +Ôÿð ßÁÿqýRÿg"ºŽüCš)À§™u«ç¯vÑ«[˜ÖÁÿ‚¶ ’\ĹtlÂ'•Ì»“ òÿ’Âý´°”Ù¥±X-ŠJ‚ÃÊnýPÒ8’ÔP“_¶Ô×'ÚÛ3ýý…ññÊütm¡<ßX_nmÔÿïÝŸ<ŸýÀ÷OAJoÐEáGŒ+ Apsf¼>5@¾´—m ¤ÀE[‰0Ð1¿ä¼)=oŠ/Zàª%"ì^·E!ps²{{*º=ãwçz€‹9Àûˆ|1?æOW_üÿ•ù/EŸ¯ÄÀ÷×’^ÿ¿\‰ŸºÇÁþƒÿ¿<¤Þõÿ~’Uˆ/Cd#x©Q"¸,âód!V&¶‘Kñòé ”å—s$ƒòðé„„þKe»©Øn""Œa?ôà'ÏjÛ4×ôºƒvÙ¬[¶ñl<ðng1 oc[åäv-³^‡(qÏ+¼«ÚÎ][€—Sagt-ùåFü§[Ñ_îD’@ ðÏRSàƒ‚‘ÿ_Ÿvÿ|¿ òÿÃíÖO×ß_n|<[{i³Ÿš¬»ÚÊEyñ¤0_ÏÌPÿ§ãϰÇ6è0öÕïÔŠw{Òw’]pûwày°=oó;ÌÏÈ_¸ý'?|º¹çÁøFþÆ!¿eØo X‡€  Ì?BèÔÿ@Ø7ñD£1p,þµÿ±ˆMTþ#ê^ÿ3;<=ñîÙðY!S ±× 07ÈÑùÞ)šèúÒë™t»ÆÉ}¤vËy(g̤Ãë7U£ê½•bX)Ú“+$Crñ ½øÌÓþÝþŽüŃßÊO‰òת'µêqú¼/Èߤ¢€?£žêÐÿÎÿTþÔÿ„!:¢ÇÁ¾ÿƒü¯{üwØvëÿ¯ºïrÂÛµ‹òVA†Ç@a·^ÜÅP^pƒ?ðgd{?ÃË¥·²©Ítb ZÆÿ8"/À§Û ¹³ ¬ÄÜTl3›„?_øóUÉ kEq½$m(NjªócÝuÃ@#à" i'8Aþ7uÛå¡õüÀ Å» k¤(ÿ¨äßþ ÿ<›@Åò/ºV ]:ÇÁÐÿKÔÿ)Ë–ýæ%Ox×Ò6Býo\I ¨ÿAþÔÿ!ÍT{TÓ.Õ,àÑ,€ÿ}z–ßÈÿû-JOtüOÿƒü~A*$è­ÿÁÿ$0 »•}~µ,<ªŠkÒö‘üôªqÕU[Óë0?•ÿë>Iñïþüèýþ)üð~| Ã'/·žghp d£pwa¾=ïD@MËšÄüÈEKò¿lK¯Nd—mñ͉äö¹;“Þ‰ïÏ%ÀÃå.ðx%BÈÑݧK_¬ùAã Ôÿ4ÀðŒÿ©ü©ÿá“Fð þ¿Ä_™^ D®ƒà׿ÌÀÿt €¶ÕøµœfÑÛá˜H…—’¡E|Ë&ºe üÅ,?'à÷'’0þßOâ©\R”MˆS1Q""‚ˆøN'ßf㙌ëZͲV¹¨W-5‹Ý¢Ó¸ä6/‰ÿ:‰n5µp\Øh—·.ª¼ë£íûÆÎckçã)ÞíùÓ•˜úÿÏw»{Ä௒/¼ÈèØç·Áo¹ ÿŸo6¼ZÿtÎ~=Y}n­>6Vn—Áÿ§Å…ãì,õ&8óŒømNÓ€Ió^¯|§”}'¡ÛÅüwd!à½çÎ|@þ»Û">õ•‹ðbg­ïü7«‡¬Ú§vÈ¥ö†}&0ÿ05?²„£!'e8â y°y‡Àÿ_äOéF@,:%àä': |‘t¢×ÿ4ÿwˆöúô[ÿãaáøD¯ÿý‘I_˜úßðL’#€ø_L6ëGzý ÿeƒ]ÿSð~< ¹+åÿÍØ‡‘¿R…•?ÊŸœ4¨ÿ;@F;cÐLHè•SʽòGÿ«Æª:¢À,÷úŸ©ÿ½Þ¹ÿìæ‘nðÔµx²¯`üß,H@Qt¼/ÂúŸpP€? |ˆ€|† Ir’±Õ®ÿñ–9hèä~ð-…ƒ,RüsAþ…Œ°Lþ|õúÿ¬®½:î¶@ÃFpÜÛ¯¬PüŸUL§û†V^[Où‡w+~ã(þ«Þ-êäÏø¿èf3þ§ Û øŸÊȘ–²&D@J¿J”‰@ýÑ}å?õ¿S9ÃÔÿŒÿ}æ5Fþ?™ÿ`ýPÿ'}‚T€Ÿ óQã¨ÿÑÿya¯ÿ›‡¿ïFþÔÿÀ‡{ÿß?ùˆüƒ?¾ üz€ÿ¡  þ…€Dü½4î/1ðys¦0¨ÿÛÊ«¶ê¢©@Z²7þ¿>•ÞœÉÀü÷粇 ùÃ…ôñR<]KŸ®ÅÏ7¿\u¹„½òÇyÎõnïð‡N{í30S ëÿ#܃ԮnPÿ7Šëô®¹Za"€Ü ´B# ]Ì„³ä\@:Å?:Y¨gJya¹°Kýÿ!ˆÿKi>ø¿”Qÿç’’LÏñÑ=½Øá˜MZ K³· QÌë” Õ¼M‹à5ãÕ(Q'F@&È(ÇñuÈ£þ O˛խ›:ï¾Á{iñ?žð¸Øýõè7»àÿ¿>` ð·g!8Ÿäÿç{þŸîx¿Þ€ü×¼ZûþbíãÙêK›õØXº¯/ÝT—.»þ?ˆOÃèÿ/Kú÷Õ{µâýž—t¥B<¬@×(ÌV© _%Òʆ Ša“räïÒ¹õ#è×8â7m£Póƒùá3⋺Æ#îñ° w…½ca/ÙÿÓõÿùw#ˆF&2Ýõÿ4½ä/Ýù½öjß›˜~Ïÿ£Tþž¶tÕ ˜À&ÈUÒèÿq<£þ‡üO[ò\Â0>—€þ1jñ~²Ó ÿ¥`~™h“]ýRñÀ¬ö2k¾ŒÿAþ*5®Û‚üõàyÝ¢™dZú3&ý´I7k¤ Dtª©ÎÖ ÕäÿwëÿÎ= Ìø/…îÊßéžóùæÿ÷Îÿá3XÿÇÜKçÂé¡ì¤*mUÄͲ¤µ/k‘KƒzArXA PÉo— ÜýÂf.ÇÎfWÓ‰õxd5X -F׌ÛIÞ¦qϸ}s¾àb$ÂNÄÖ3‰­Br»˜Úö¤V5*àYûPq^S_Öµ×uÝmÝpwl|¨›û#Ë]Í|{`´Wµý£ÿ¸"lVEíšäìX~ÝTÞ¶Õw纇KÃã•ñù"Àürk¡|¸·œŸŸÜ?<û| `|ÿüüøôäÿøè^ï=/wîç[ðxmy¸2ß^™n.7—fàú ÿOÕ”ëÕek睊¸ní—m9pu¢¸>Ý»9SÜžï÷—{OWÊçkÕËúõVýáNór³<_+^Ùëøp _¤/×’ž½ýPð 醟×ëÝ7¢W áÇëÝNÜH(ðýÃMÈÈ h.ð‚ Û|ઉKÏçuÞé!¯}°Õªl6ÀÿÐàqàµZqí0Ï¡-½ Z€|l»€ðr&ºRH®á­9üÆj9¯EʈÊé]‚¸œ––’²ý„4—d#’tH’ ˆþÝ[àµqí†5£jY§XÐÊç så¢Y»ä4à{©~Û tIïDÀ~h•«gÖ›ûx Þy Ï2<´yϧۯçÛß_íüt-øåf÷·{Ñ_ĽCüv?ÄÝ>¿Þíür»ýó-®ùþpµùùbóãÙú‡“õç&û¡¾rW[¹:`—–Úù¹£ôt51þOÆãî°´×2dÓÕ}º½÷Ð($ÿ\ü_ЈøïD|øùïvá‡ð“Â>¹¤ŸÙêoV÷Ût¸É´°Œó¯ D\#Q÷(¾>é¡e?Á;„}“ß(õÅã@š‘ÐPþá œŒ„¦¢aÜ¥|•„PbÖŸ˜|ñi_|Ö›¡¸#cxÚ÷«qºGˆî¥?ãupG¦oxÊšô&<Þ ·gœF€Ó1n³ŒYÍ£fó˜Ñ0ª× k5ƒå zo@¥èWÊödýð‹L2È ‘BåßH¤ïeò~‰|€"Wc¡®Rª†ÕšQ­nÜ ‡_vÜdœð2gÄÅ8i2N™ 3Fý´ttÔ».ñÑÙü¯Ä4LQªÀüxŠ•qXcÁÍÿö1æò0°Ë…‡¿ÈÍ?P‡/ý‹@¨6 ‚°wyƒî…ó#ÙYMÐ>µ@ÑäyðÿqQE;©ÿw¨ÿóù5ð*Ρþ‡pÿCÐ`¸g ïðáåXŒ“Jlf“\ÜS‘ÆÆÚ‡ÃýÝzI þoUåg‡*Œ€šæº¦»9ÒßïjÆÛCÓõ᪢§òoæT´â(&:À ÿè*êÿj`ü_ñ­÷FÀÿÓaê&¾õBÏêõX=EÇþÔÿ€G3ëÕ.P|†¥ ™þÇ7îmäŸàä²o2þGùûz‡?_üÿ·¤w*ÙêÿzY@åZ—7P„ßœj¨ÿŸ®MŒü_ï¬@×ÿöO.&Að?@ýÿáÁýzï~ÏÿÈ·þ‡î%1ÿM[yƒ½€äOý}*ùß](®”ùk>Üi?Þë>Þ«w*àãÝ^—n çEÝS]B ˜ŸB¿3Ó~:ðé=Ðë(þÿ_o£ÿ¡þ'þo–7¾òMý_N­à¥8baDV²1V1Å)g7©üá÷öQ^La"€ aü_ˆIrQi&,%þSÿÛôì7þŒ{sV͂ðà6-ø¬‹!çrÌÅÊù– ö£«•D§ hWÖ/7o›­­×î§ó.w~ºäÿz-„Fà·ÛÝ?Ý þxÃ~¹ÅÝ>?ÝpAþß_n|¾Xù¿ž¬½´ÖY÷GËXüWVÎö[¹ÙZj êÿBh,å£þ÷Y‡Æ‹fÀ ê§°'ý/¹ ¾X€ëÂðEºÛ/÷A¹«VôÓC¾Ví Ã8ä1uä²…£Pó3ò¢^„Tþãÿ¿ñÿT„ò§þ¨ÿi0þÆg€®ü§½±)O¼³@Ë~ íÞ„ýŸè=þ#þ§þ·ÛF©ÿM¦¯ü¯”÷üRüÿDöÿ)RYø_ª¤€ÿ÷Ôà •zD££þïÈß4 æ·˜Æô7° ƒ ¯S€ñ?î#úÚÿPü«M#ßúŸÊ*Üùßãÿà7þ'æŸ@þ×üE]œ)H# ÇÀDäõ’Œ u{µÈ/yèÿÜz.Ë¡þ—C~è/æÞYŸä?}G °¯ÄblêÿBЇUnnü_- ö±€¹£^y^U]V5W‡Ú«CýMUO^õÕ]”´í}”äŸF„•àNÅÏ«ú·ßø¿7h Pÿ#nðÿ×ÿ¤øŸ}ã¿fÒ«óéæ¿qä¶²#¶5ü´shPù3õÜEðò¾m:ùùçb"ºøK‹9³ ò¯:ÅëP|r$…âÿ²¥¼;Ñ<œéî/ô½þ§æGíß[‘;Œ€gO7°øþÅÿéÉ þ§¼Ü[ÁÿO7Vˆ€»kŒšßúÿò¤ãÿ+*ÿ¶’˜Šåí¹ ä©z¼ÖÝ+!>Ý+h 0•|ç`ïµðå¦#êæØ×·þ'ýîã¥àþ|‡úŸ>Àøÿ¤Êý]ÿdñ¡að?½üß!¶ºŸ^¯ä¶*.ÈŸø_Dåßé²âßñ˜©ÿÅaßgÝzãlN#›ÕËgLÊY ¹×eœõZB¶Å„k!ã[ÉVŠ>ŸÃ×Î*œ«£»ãÍç÷Ã)ï3DÀùö;À¯×ü_®v~¹ÚþéŠüx¹Ù5ÿÚ‡SöK›c"ÿÛÃÅëƒÅóÒÂiq¡™9LNVbÄÿ#àÿ°s8`u™‡ì|œË¨€PÉß)¥ý{’>…Ï`e+Ʋ,ºùëTô1/ø»àïõY Gƨü£®ñ˜g,î{ßø# âû‘^ùÑ e2JœÏÀÜÿOoiÿã½ Pöóÿÿw×ÆÝ±1WtpGG{‚àkÿ“ˆÿ':„ùÆñ¥xôÿ˜Ó1Šþ·ŽY,£èýV; U A@ýOý/—tbä/• Èäƒ do+Qþš¨üQþúQ¡Süƒüñ%GóÅlšh˜ºð&´êžPOÆzý¯µŒÒ+@­.¼öÁé™qyɲ¯wÌOù]ÿã'ñ?•¿Ï1 ΡœÖä@¨Jôö¡jõƸ^ÕJÂÊþö~~«ÝÈgÖéþŸhh)\ìD€Ÿ˜…#V"¶–J¬SÿC Йÿ±þïøÿPqv .Ñÿ—UÝõ*ÿù¾¦]Ð4²Ê£”¼—àUoíÿàÿò×þÇ ò/zV™ÈõDYÀ3_)à ¢_MêX ÝøäO‡?´ìh§@þ•?>vo^[YQ;‡±wÌOåsnFÝ[@ܵ™po¥¼øê}&$Ȇ…ù˜°ò Š ~1I÷™sK™­ƒüvµÀ;*íW­CÑi]zÙCá}wª~8×>]ê¯ÀÿÆçÓË­ùõÎòáÞúñÁö¹‡ï?<:¿výðâ~|õðºƒNàõÁ†pga"€¦õÿÕ¹¾c~²pÞÂáÿ%‰€ë@̯¾¿Ô€ü®ÔO7Úç[Ý뽎Êÿû'ã/&ÊÏzƒ€¤á«èÖó褧`äÏøÿÍE@g;¤øß&Ã=ƒö¦þ¯—8GûèÿZž]ͲÀÿ•n @Ÿ‰ÙO²©ÿò܃"¯º¿MüæßífþSŒK Qø?”¤ü’¸ODýï þ×ï-Ò`üoPL›TÓVõŒC?ë6ÍAu,$=䙘«” kì“確q]Ûxll½´yN¸!N·ŸÎ¹ßŸo6?Ÿm@ÁOÍ ¾möc“õØXaäYž?ÛŸ?)Ì72ÓÔÿÅðxÖ?šðb•rŽB à4¡ÌÍZé•}:EŸZA ’÷)eï÷dï¡ÖÝiö@þ†®üáïùC‚€ùiåOåŸðÿǽ#1e´[óO¾õÿd$0ÑÑ>yó+š‡g:'s¿ñ(1K $géû/¸´»@?¡  òï¥7ºòGÜÌÃñÁ1w`”´£à—sÔî±ZGˆÿ‡µ†µv@§î¶ y¿B6ÈDhÿ­ü‰ÿAþ Õø‡óº*½åo1#Vˤ­‹Õ2k1ÏÐ0Ó þgR»ÍÙ>DR@3 þWk¨üÇ;·ÀYÇ ö Æÿ œ½ûæ±ï1ÿà'} èÊßïœCÿ79$'GA%”ÖÒ¨J ªe~©À-æ6ÁÿéÄZ2¶ b„ðË·‚ a”ÿr<ÆJÆ9™äF!µULsKiSü—%àè/ ¨ÿÏ«jhÀÿW-yÕ]sZPÿ3{PüW£á.þúx8ög óêÚà]^6hŸýïZ¡þ§±.öø‰F@¯ÿ¡ø§ò§æ‡¼úYŸa.`Z"ògÇk„õH7@þŒÿcnÒ»™òme¼\h'æç¢‚|ŒÏÈŸÞº_Lm”2ÕìV-Ï;.í´„§5ñű jïÛÕý™æñB÷|e^®¯7¦·æw(ûÑùði!ÀwûOŽŸ\?=»)?¼tøüò·CËðÅÿ·fàþÆÒãÝ噆YüùŸ5åç yoÜœkî@þWZàñZò¹Ó¿Þ>?˜~x²üølýéÕLéMáóIóý£RàË,èZ<] îù_º.@¾ï27ÿ0÷ÿ0çoÛÜ›¯»øË¥×P€ÿ››ÊÆq¹ãrúÿ ³ÚiºS ú®M%C꘿a×ÿ»´8Ì|åÿ|Dš ‰ÓqÒ'Ž{vCÎê‹jÅ´·þWKgu2`Ð˧L{SNÜǼè·ÏE]KqÏr*°‚WCÄÙÕôj#·vºÏ9¯pnªë÷õÇúÆ3A“ûÚÞúÐæP^ÛZíOÿCc宾|SëÈÿ¢4wR˜måf{ýŸ w" `v[†hXtý&Í{Hƒ 7i•}š½÷|Ñ©úÁüF]çGøëÝäbøÛ{f>c â(þ‡¾Ñ¸¿ÃWÂëÿIÆÿøÚ£2œ¢æGù§¾õ˜ú¿û ä·ðïü8##ùÝÁóX¤'<ŠG <¾ð¿Ë=ât¡ÿmöa‹eØ`Ô5ú~z@­$/föï)èÓiÔù=þï—*‰¼¯+ÿÁÎÎLÝ•¿Á4Fp·Y§(vë”Ã6m³âÅãÄÿS¿Û€ÿ4Ú)”¿fœÈ¢s ´müÃò0ÿþy¿èÕþ—^ \·íñ?­ýÎ[{'ÇÒv´/Èwi³&nŠj¸M}?ÏËg63I´©+^I„–cÁùHp>ZˆF–cÑ•D|5•\£þùÓ)Ça¡ã Y–@œVö€óŠêâ@}^Ñ\”ÔùçöÚ9ÕqJNäßþ”}ÜŠ—ûUùWºþJ>ô/LäDøÈš—é±ßŽÿñü×R\û;þ÷C  ùûóAóbÔΊ;Ùq'ˆ¹81ç…ñÜ…þO{·²þŽü ‘€ø‡Þ-@ý_JnTÒ‡ù­£"¯Y´«»çuéUSqÓVÐzûáJût£¹Öƒü)Ôÿ?Sß^h!®u7úç[ÈÿÃñÓ“ùûëO/¶?|D~þ`ýùƒ…É‚Ÿ^Ðü€½€úÓ½òíâõFþr-ž®„”G<ÛÛ9Ü{"˜üPðæ л¼8úºÉ¥oSùoåßõÿanëúŸNö“,ú¨Y9»ñ•ÿ)FýOç?Ìð‡ÿ"Ì- :¶½–M»n•úߨXÔËæuÒ9­t†0¥•Nèfå´];çÔ/¸Ìs~Çbȵõ.§ƒ¬|x¥[­¥V›9v+¿z¾Ï¾,³¯«ìÛç¾¾þp¼ñxÌžx¶ë¡Áº?^¹?^¦ÜÕ—n–®®ªó•ù³Ò,ÐÎÏ4³3G™)âÿ±bd4MF“$BN<¢ 2w™‡Æ»¡ß¦ï3ëÞ™µ}Ä_ l†A0¿ÃŒæ÷ƒ½AÇnììÊ~5âÿÑ^ÿ'c”xp‚˜¿×ÿÑ®üé˼ ý@p†Bïg…g¾Ôÿ”ž`¶1Åÿ·þ§æáaGx߈§sù»C#Äÿ#èï0ñÿ°Ý1Œþ·ÿ÷C @üßOý¯Ü”+:æ§Ÿ¸ÚÛGýÈ•ý ÕÈÿËÎ|ã(`4CåÚ·wpÚ§»m€èF@w DÖ‚^ùc# ›Ôh'­n·ý@²XÆÁÿFÇd¯ÿ¡þù¿#ÀOî‚`äïsÍûðuà9·}†JàüDuÚVœ´äí¦¬Õ7E­†´y,iÔÅÇ5qýPrXÙ-ø…,üŸ¯¥c+©èr2²-±ð"€Ÿ‰­BƒO® ÄMó2ÛÕ¼€ú×Ë’VE œ”ÀYY pVù«ÎŠê“¼²•U4ÒŠZ\R ƒü;ßnýÿ;þ¯à—õ²Ÿó­ÿßDÓPÿ3# ^ÿÓùOgìCüÐMûM³àÿe©ëvÇÿ݈: X§þO¸¹ßfÖ¿•òŠa”1ÊßíÐWJ ^‰È¿œZ?ÈnÔ Üú>·uÀ?­í^K@þw§Ê‡s¶€ÿÑ´7>Ü?Þ™ÀÿXð1¿ øéÉþÓ“óçg@8€¾þbÈ‹×;ËË­ùÍoù?\ÁÿTþÀÅ©üOÿÓƒü!ôOŽe§ 9í=ˆð?i@þƧ[ÃóñÃùã£åó³íûûœÔÿ 4~x6ÒqЧÍÇ;ÕëÍõÿyäx¸à?íôR 7Yð»÷BñZÃ7ÅpçguãÿkE6ã2ZîmÀÿå4›¾tÐã~½¸Kéõ)%)Æ%ù¨Š*ÿ¨Kv`ñï2rlZ–Y¹ @ä àd þŸÒÉ&é È¢™µègæ9¯mÑ“Þ…l`q?º|_®%—Ž3Ë­ÂÊÉþÊYyå¼Âº¬B¬Ü²nkx±ÃM K}jþ˃¹óò˜ÿtæ´ˆ7?ç:þ?ˆïGÇ ¡±Lp,À»àbž‘° hA%ﳻ̸)ÔipûÁnpZÈ»í–!z“35?îêtô˜Ÿ2ú|t€0AI„&ÈâïT×ÿSü$4 „Âs`~J82 Ð%`ÁÄ…y˜9@"`ŒBåO´Ï€þ§xIñògüïò¿õ¿‰ø_o€ þßSõ)”ýò½>âÿ~2ðA¤ŠA×ÿïeð¨ÞïiúUºA@­“¹ÆQ(þM–q«uÂf›t8¦)NçŒË1ã°ÏõF€Å PÿçN?AßÿCñorNÑÇíœÿÓùøÿÿåì=›Kº´ÝïïtwùƒFH !@€ðÞ[aä½÷È{„‡²í73q&Îσ õæ‚þïfþ÷l‰ð?p­rþÕù¿0ÿkV‰ÿu›BÃv'çË>è7«ûªTý/·(ì‡ÄÿÝ Ï0 ÿþÿ=ä‚•tp˜ùÿ45UÎN_äg+Åy6i¿+¯0 ðx¹ùár‹¿RåËÕî×ë½/7 âÿ¯·¿ÞâÏ,Àýå6"þ¯EÀúeiõìt¹t²tZ\<)TsŸE??ŸDß—'-Àþ«ÀÏÁO.—V.ÏáÿÛË­û«ÇëmÈÿãÝüÿùaüú fPÿo}ºåÆAëOW«÷ l›(`ï‹]RùWïü"‡Bsç±,`ß<ÏrÅ?;üþ§“3¨Ó“?ˆ…ú£Á¾ãÀþï©úßÞƒ.€ùÿðÞø?êŽy•\Ä<ª¨[uì$ë¿~Û¸Ï2á1;u*ÛÑ“¿~gèpS®^ëcÅ?ƒùAÕ±0Þ¾8ÑÁR€‚ø«3d»±"ÀÿãHÍŽÀ°+´]Z‘O/ [gÜÑ•tw¥|]iw&ГuƒB¸§îy¨¥~XTŒtV˜üýdòR^üŸpóbÎöˆ½-hiE à1’ph‰®ÉBíA3L®Û}¯Ýy§Ù~´õl¿Ûßz ðp´Ûjæofò¯/ûíÚV‡®ÍNA|²‡ê³¾Õahçp;€B# ƒEäoÔ“±?9_/ …F“ˆF€Éÿós#À¥@õ¥`Ò<ËÿGÿÓ. ÀàäÿWþoÞV7n}ãÿ÷‹Ëï–ÞÕûŸÁülìÃäÊþŸ_~Wïÿµ ÿÄÿ›Ûm(û™ùÕêêͽ]Dw‡÷Ml7×ܾPš팕UÒâÿ[ÿoîó¶Õ<Îÿ܈E™ÕÉŸù_{ÔÅ.;R‹ ÿƒ]z›wq¶}^Ú(WQ æssùü Èf§2™ÉTjþ¯FÀñd,8öŽø]2DäÏá4õ H"X{ñCð¿ßÑp0ÿCþì.D@:0‘ N2òh‚3¹Àl!0Kå?“rN'ìDþdÏ¿a„¼ó« k”ßµ!Íû°úŸÊŸùŸ™„´R@ý/öôÐú¿‡ú¿ pþw­v;Wzˤø''.U7ÿë–Ûü´Bü¯YçÃÿÆ.‹Zl;0ÿ›ÕëA_µ  Xd¿S3 ù£ø‡ÿY0ù¬C!»’ù?ä Ã7½`+0”‹ŽªRzò,3už›¹:»:[¸./Þœ/ÝŸ¯>\¬ÇËu®àgÚÿõFÍøívŸøÎ×[5ÌÏäŽàcÂî§«=”ëw—è&®Ë«•³5ÈÅ<ó?ä_ÈÍÕš¾©jÇŸL'¦2Éélj&—žE M(Ÿ®Âÿ•‹šÿoö> _n÷Áç‡ý/àëH|¹Û46?\Ãÿk—ËôM…ëÒÜUiüòdì¼0RÎ+ÏóCìò/¦}¿žê•ùa*rÄôIBήÎDd™šüYÙó3¢>ÿ‹™ÿYÿ‘õ# øŸF©Ràÿc×XÈ© :Æ}VŠ—~Ü®5ï+™üµ;ƒÿî²t{±—‹€õÙ.RÿOð³ªöYU˜kÅçüDÇìlËâ|Ûê"iðwV;ÔëmÚ-žig;à95|¯Q4 ÂVAÈ.Œ8…Ç.QÂCHz…)Ÿ( düF6ÀÏ„€ûNÆÃƒÿ!ÿjýoo YÉÈmhv雜ºf‡¶‰MlÌÀ´ß·“ãzvß“CöÈ—ì;&š ¶ÃóÛ²ŸE@«S߆O ä‚Sßî2t¸<‰ï6ó\¦— Ÿ<Åfâ[<`2ð«EH€‡o0 ž±ðÕ‚hè?îð¤+¿û¦&µ°olÞ¯ÉÿÈÐ Øú/ü¯>jÞ=hÜ=hÞÙoÚÜiXßj`þgKÀðÿübµ )0KVx§çÞÕÌÿæ'•ÿü[2ö_~ W!ÿ÷Kkð#ó?`þçÌÏ88î«…ê= !MáÀùŸF@[êÿõí¶õ½øgŸùsóøŸ[`azØÑ€":ܨÕv—g{ˆ€òéæéÉj±°X„ ³¹Ü4@$“*6‚ÿã!i<>g¿ÇJŽØõš ä”-s¾tÓâŸÊ_FçŠ{” ïXÒ§)?ñ?È&äŸ Lçý3 ç͸§“Ž©„u"n‹G£ÔÿǺQDIt-`€ùŸQó¿”“?uþï†ÿY¶»é¨Û±Öú¿ð?;ö­]¿B@ñÿ£ÿ­ûìê4IÍÿ$ `~`;”W—}µrŸ^á3úMCópÐB"ÀoäŠÿ ½?â”Å<ФõÕÿ™ñrnò¢0Íùÿî|én³ü?T6>]o}¾ÞE©ÏäÏ´Oœÿɺ婲õpAüu¶R)‘IþùÉbédá¤0WÌ“ŽÉæçÆ}ä_w-ò™9ˆ€óÒÚ%:ˆ‹­»ÊÎÃõÞãúÃÝþ§»æÿ¯O‡ <#>Ý£;Øùp»ýx½ù@ü¿‚¿Ûòâui¾r:qy2~^#þÏ)¹«*DõCUŠÄüH™ü 0ùâ(þaþt¸?úfìñKÇž>²ùÓ-¹zêýOZ4Ni½ÿŠ ‘Ä3FÏØ'¼æq·QåÐŽYGûúÝ!ͶÅÿÞJ“ÿæ|ÌPÿCþ‹ã<Èf¬mz´uj¤eRÙ<1Ò<9Ú2>Þ41AnƒŸn^šmZ›obïÕêvÚL{í¶£§žyzL<ŸEà· ƒ6’a‡€Ä[sñânr¼?Šü”——öñ)ˆ>¹â?ê"òÛZáÿ€ùû°kmGMÖÃFÀ‚€Á¶qþWóSZ˜öËÐþWtpò÷š^«Àc!)à6ã“Ï"Ànä³0ß`šM ‹Iø 0[<–€ï@ÐZX41¾O*5­ù9ù×ûï°‰ø_ÝÌùŸ­ÿRÿ¿åü_mjþçäÏùv…øaåüù³ËIý¿_¹ew·“?yC–lÑ‘Ø h @@ºÂjÛ•ÿêZ;þo¶oì´3ÿsõÿþg{ªTßÒ2Øq ð¿zG¸·-¨”÷R༴U:];=Y>).æ ³,Òé â´ÑñDd,‹ø‡BÏo%GìèÎj¯M‚oÂüAYÜŒ¸bîaæ)¯*íÏø'9ßešà™É¸¦’¶É˜Yõ,Zÿ³ t4Ì‚¿ñ?­üYµÏÁE@½ÿ=ê.øß§“APÍÿu-@'½üE@ë0¬v0ÿ“áÏ_»!Ðo‰L»ÝfµØBýϨó°ö;4r—NÁüÏÉ?Håï5 ¬ƒÛ@À&«ù_Žâ?&W+ž$F™ÿ/‹Ó¨¯Ïn.È«µ(›ÉËÊÚÇ«ÍÏ7Û¿Þî‚ßoÔÜîÿ~wðýdpAÐ &¸øpµýx¹yW^ƒü/©üËÅ…Óâ|!7Ãf}*9™LL$h¯?VÅ¢„xl<™˜Ì¤gò¹y¥ÓD@å|ó¦²sµKýðñþðóýá—‡£¯š_Ÿ´€Eøx·ÿ?Ýl=\mÜ]®Ýœ¯\-UJ‹§SåâD9?z–9ËUo£wÄÎóƒô|³œ<Ë*Ø…/Tþ2ZüË!²Û¿*ÿ~¶áÿØ+aà’p/ÿÝA@Þ«"%§ÃQÿ“·À< r²w”u5ÆÿôYG½–1—Üa9RBþú½aÈÿ`C¦^íßY’°±?[ù…üñ9?Á›ï€üaþñáÕPó¨¢qd ŸCÃï†‡Þ “øéZä:­Õ¹÷;+MêõfÝN‹q¿Í|ØfÕ´ÙuN¿&R>â `åm¼ƒœíuvÄÜP= YPüà›ø!&æÿ …®›|†–Z 4² 4×óó*|â| “?S=—n# ¬oáûL¿Y°‰b,(§™Ïp˜H»YlF"y«Yôöñ}ü‚E¬V!;,Ž;/ŽM# h-ÍsÓ‘©ùÐÈ>«k¾5ù71ÿi›5Ml èÞa «ÿ7¶\ýæßPÿ¿®¶óïYÐÝžÕ5ß9ÄÄò»¹UüâŸÝɲ¾Ýº¾…_¶ek·uo¯{3—½ŸÈ)Í$X#ÀA»;"Òü«mëkíÿ*þÔüOæÿßÎX0ù“·qª;Béïȯù¿z\“ÿîÿ¦|t{®¹¾8¬”ÕåòÙÆii¥x²X(’F ›%•!õ¿*M„Fc%ºfHCøÍ’€EÊvÖá;ø>Ì¢.zÿ…[ ’žò޲Èz“ 癢̤“(þÙõ¾œÿYýÏùŸ¢øßü/ök £žçú¿Û§îfþwïp-Yv®tÁÿäÚ¯er ¼e•g^å!žý¿)Ôowšöz˜ÿ­ä²?Û¡´z‡rí›øŽCÓïÒɽ:™ß00-C>³Âk’û­ ?`ë :ÈeåÄÿAü_ˆ)©ÿUçùÉÊÉ õÿÜÍÅ<üÿXYùp ù¯ºÞøz³óÛÝ€üÿ¼;øóN ~¿Wÿñ°ð€Â'@ÀÐ/|ºÚùpµ‰â®Lô{yºP>™;+ÎóÓùì$‘f’D<õ<ç«¢ÇãŒXß™L%g²™ùB~ íáYi½r¾}}¹{w¹÷pµÿtsøñNóùþè˃†ó?‰€Gòå§{5"àéfçáj‹ ªæÿR^UÊ*)CDòYMAÊ'ÿRfà„ÌüåùX?]ö¥czó;ÝíCäÏù?âéÕ7™ÿi|çÿ ›ù€¡‡ÜÒÃF%¹üŬtGíú«fĸ?¨ßÔî ²±ÿÎr/·í‡ý!ÿ¥iaMþmÿØ`ÓÈ@Ó¼aPö^ÑÿN.ÛßÿšÞ±ò’°?üzrìíìÄÛ¥Ù†õ…÷Û«Mû-‡Û-š]6-8jMßÂC „­¼ˆxí@ÌÑâNˆÑh?ú-@ x ^}³G×Ä@ )pé[j4!#XLÔ@j´r8 -.ck=nSð˜Û½–„ ieæû-‚ M´w.jA ¨ !@ !‹|ŸÂsXø ›•O΋®j¶µ“µÕ`#è­- ¥hÍMZS‹ÆØ Žhñ¯Õ7®‰Qõ-ÔûÍ[»,ª[€Vê[€9x~á™óSí'ÿ…•÷ókVüÿoXñÏ®ååüÏÌÉ„Lü¿ÿÜÀÿ€-Tßfû‚ÖÚ×™ü¿õ}ý_ÛJ¨÷?ƒû½Xâÿ{»®KºÛsÝÍ…þúBS¹8¸<ß-—7Kg«'§Kˆ²žL'áÿÑDD™'Bª¨†'¶·öAþø2ä±ÊŸÉ?^ó?H{F@Æ£bÀÿ9Ï$…ø?ëž&þ·©àÿ„q,n1ýHL?ÕUS æ Ýüù½ÿ{ó¿OÓó]PÿwÓ…`²ȳ%®÷?md´Ò€Ôÿ+mÌÿº-ó­ì'ª·õÕûŸ}Ç©•¹õ¿ß¤ þ'Ì ¿EÁä¸$)éD\’˜·?eŠB õÿüQ 'ªÝœÍBþ·— —‹ôÕÚµO×ëŸo6½Ýfþ‡öÿv¿¨ÿwÿxØx`Ï,¾Þí~¹ÝAËð±‚âýþ|þ¿)Uý_*ÌrS¹ÌD6=NäŸgòEǢǣ0ÿqDX$âS™ô\>·X,,£=¼,o]]ì î+êÇ냷Gð?øúóë(Õ@_ðéîàà ~Úö}e“  Ð€\œÎ”‹SðÿIvô43|š!·†¦åì²Èz |Ÿ–ýý0?[öEñù'kæ–¿›¾óë’@ïW¯ß)fç¿«cŸ^ö ÿ\Ò€“*þ:‡‚äž»êÍ_n 䯴ë•6Ò|ˆÊP³-?ÚØ[ïß^‘l,öÔ¿öµ8% “üYUû¤²™É_© òïo”õ½ï“kÖ{z^vwÿ,îùI*ù) |^€·³4÷)°µÒ¸»ÚÈ‚@»×ªS“ °j:Ð ¼&žÏLîv Û z°ýwÚçàæ?õ^ ²}ߨ0µá‡ð“"ÃknSÁØòŒ¹µ¯¥ ЇŸ•ç·ñж*drtBÎj H@|ÀM³ÀeAðV€Û*¬ý¾ËZÅaáÙ¬v}ŒÅÚÆAƒ ™a´´0 æf½©Egl®bhù!Y PÿW·mï4ln½[_'KÀK+ï©ÿßPÿ×"à¯äOXoXÜ ò¬l6¬n5‚zÿoïµ}çÍ¡ë˜ÿwöøÛ»øn³€¾ö|@ÄZ+`þ_£‹¿ßø¿n €ùŸ+ûÙA TþdÑ®Aóë×¶·xø½®Oô7gú»sãí¥á¦¢»®]^îŸo!NKËd9 G" W¥ŽG’‘!æÿc·¶çü²õ‡íUù“ך܃Ìÿq×pÊ­dÿ{G‰ü)ÌÿY7!ïšÎ:&Ó¶ñ¤e?}z8|ºU?\ïÞU¶¯Ï7èÒóþg…ÉÓÜx13r’RSƒÅÔÀIJÛÖ °Êÿ4¥@ñÏÊþìq?`òOøIåÏÖy£Þ~6ðgòDï.)üïsô.~§ÄO–¨È Òï¢72†¼vrÿ;¹ö×ä6öMrÃÊvµòë;Uùÿèr>=-§&g»j B0ÿ³÷6Ö;à²)ô¯ü¿¹Kü¿uÀÿv ˜ÏüÏ" Vù³ugä¿·Çcûިĉ4ë•‚îæÔpwn¾«ãíµöúúèêjÿâb»|¾^:]>)Ì¡\̧dzñÑtTÉüõ GòzÿãKÀä÷ %­ü9ÿgÜ#YÏh¶ÎÿY÷•ÿdÎ9ÅüŸ²N¤Ì〥çÕ¡~èX¯  —ÓèßÿÀ{Ô ùSÄœÿ½{]Õw¨ÿkÝéÝró¿~Cˆúß°ÓÅÉÿy t(æüo×H8ÿûÍ2ó‡l @ÍOfþlòC÷Ÿ1EÜ'…ÍPÐBþ§ÉÑrvŒùÿö|ææböörîñjþÿt»ÿ½Ý„Õ‰ðo÷˜üÿö° ˜ü\üv¿Mý¿õézãérþ¿§þ¿.Í_žÎ• Ó'¹‰\V•NŽ¥£ñøh4ª<>Ž„•áÐp(8(ýþa Ž„ÃcHD@’NXœ—6èH}_9x¼&gM|$]€ðåIËøüHžáÿwûõþ??YÆà,?u’UÒ£Åäp!©È'd(ò Ôü€}ðýlL–‰ö§ûR¨­öVË~¶Ôë’ÔC ï”ø½^{7`)@ÍÏøìôŽ`GÁ.óØnë€Ë &…Ý °hM‡äÍžü`[¶»Ö·µÜK+ÿîµyRùse?ÌÏÖ|'†›F`x QÑÿ®_úòïíyÓÝù¿ ^ ø? ¿ :;îéù¥Wò“¬ÿÅÀÀ‹‘arßâ´êõüÄë¥éw+³ k ¯7—ß©759`Ù¦isjÛÚ®…•îõÿ÷“‡ÌÏ„--€ý…Lû¤p~OÄÑ ‚öÖ€­…ÒìûkkÐÑÁ;yÿØ-ˆ:ù 숳“Á"°89ºh ؃ß% âûøQô§ 8N¾ÏÉ÷Ø;\öv§­ Øl­õX­- ‹¥™|²¾ÀÒj2·A=ä;–6ƒ¹Mí ZÑpïÓx»¶ÙHwVG@”÷Ìü K `‘¼äÛ°²Föùãæ«;Í»-ŒÍ½ªù›ÿpÅ?©ÿ¿õ?ØÛ~çÿj °N‰¦'È"ÿoýÿà >àÆ>\ñO7 UåOßDæ£òçR†úßxaÿï¯L÷7ÆÛÝÍÍáÕÕÞÅåæYiå´8_ÌO³“ùäh6Nü Œ2ÿCûAÈßÚ‡âŸÈßY›üx†’ÞáªÿÃi—Ôû?Gç?ðÎÉxöÖ6•±N²Hš&@Ü8˜ÿéêÀpÔ0H"@/§ÿK˜üÿÿI àßïùKÿÛV:9ÿ[Wxõþׯò ›døcÜífΞùô@û?À3­ÿ%.=¹øÏoîA«,lÌÿ¤WªÉ?ì{{QÇf"²|LÁù¿r2ENQþÁÿ_n7½Ûúý~þ'߇ݿ?îæÿ¿}¨òÇãöŸO;5ÿoá¯bþ¼XC°½7'³œÿ!ÿDLE"C¡"¿Âçòx^ï ‚ñøT:5Kr+g'—åæÿ‡«C´n>Þi>ÝísPÿÁÿ7{õþ?+N—r“ð>5RH å¹x>Ö_Hôb² ØÌ?í«Ê?"¥ò—@þQ>ûØÌ‡›ösÀüTþbæ5ùWýïµI6öùWç:+û¹_¶æ«l  ø’±**ÿBþkï•€ÿtðâ ~ˆ~êêú?âÞÿJ~RÈ~R*~C Œ¼˜£woM¿X³µò ÙjÒﵘšm‡äH·–Œñ½zò†¯ÏØÄf;ÌöÏ¥>q{m¾Ñ>ˆX[ë‰:Úâ.¶ Üs·ÕÑuµ‡m!GR ho :[AÀÑâ·Hü¨«ýGÿ;xLþÇ®.À¥ˆº»ñè=âîâ8ötûº¢þn÷÷€˜¯D½ø¡NöˆBn!Àamýw@üOïš§tXÌí&c+Ít-¬;°X;XÍí€\ ©oÕhɹ {ê¦í÷Û͈€Ú*£€Ov¶Ïòj#´¿¶Ñ²¾Iy€ùDûê¶í}òZ.3?ã;ÿòÀ!A@åÏê:ÿÙlÕùs­ƒ¼VçÿõÍöõí6øk·¡þ~ èþpò¯÷?{ þß&ñØä‡´kíWãuÑtS²Ü_Xï+öûkûý­íöÎr}k@#pq±‹–ŸîŸ+f¦³É±Ll8Šä!O?œÆ–}áÿcç ÙðéN°âŸ0w+R®Ñ´{ T'ÿ”‚gÝ„‚k¢àÏÛÇs6UÖ:V°L¼ydã)£*iKÆFÆX̨Œ‡"FEÄ$ûX° ŸÌü>MðuÒ‡žo‚É»Þn÷V—s½Ë±FW~WÙý¿ÕÍ?0?a­C·É(þµÍ?¦‚q_ L‡=†}ò^¿é°Ûªíµë¥N£Ôkî÷Yd~«¼¶Õ“¬’ãŸÝvHìq‰Ýâ˜W’ õå"rz¼ªœ¿ÌO]§nOgîÏæʳçs+‹_¯–½^ùývã»Mèüþ°ó÷õ34À?žÔ,þ¼ß¿ßnýv½õµ²ñùbíceõñ|é®4}2{Uœ¹ÌOŸeÉ}¾éèPêx8ŒC€Oæ÷Ê}™×5àvÉ=î¯{ÈçC/0«B‘©h|.•ZÌfWN kåÒVå|p{EZ€§͇[í§{=EûùAÇÀ3¢áájÿþr禼yy²ZÎ/ó³'¹©Bf"—"åD:6˜¡oòæcŒ~B!ë‰ãÞDDKb¡Þh°ºÉ3Ⓠ<Ò [üî^†Ï%ö:{¼ˆ]â¶õº¬bÝ–FÎ|¶>ŸȨóeN›Ìaí·›evƒØôÄüÚAáB·Ê_q¸#ßß”ï­Ë¶–%ë =lÁ—lõœFý/šŸ̪xS£íÊvÕPëèP˰¼™ÍüQüK{ßõt¿îê|Ù)z„‚Ÿù¼ÿd $|ABAð3~ˆÅ¯ðóe}oå²7Cƒ c£­“ªW ³«‹›K»ëM‡ÛMšÝfÝ>9cßBŽ\h±j›í:²h‹^À£o 7Æ75â|ksÄÖŽí­ì„í-(ìc¶fFÜÞ’t¶¥ÝO[ÊÛžô´„§ÄÝMŒˆ«=ä‚íÛX p‚î6ööð"^ØÝ޽|êyDy‰s ânaÂ%Ly„I·€"J{»2¾nFÊÏO™ 0å¹pw&ØÉ^|Hø…1/¿8²Æïhe¸-N{ÁÖÖf›àp´ÛímäÁúŒÝÒä°"2Ú–v‡¹ àØÌ­dY^Fc4´tmZmËÑQÓÁAÃÞnËöVãúzÃÚK÷ìÊÝ¥Urñ üOÎvXk^_oÚÚhÙÙjá´Ï½»wÐNá‘“ÙØÎO5ïp¿º‡Èÿ‰@/L¡õÿÁ¾h_-ÜÛ% 6·›üõ ÞÚzÇ7°ÅßmŠøl«y»È¨5 úÏ’…,.¨ øùø É»[ë[üµMÁÊš`y•Oäb¾=³ÞŸÛáÿ‡çý­ãáÎ~wkF#puuxq¾uVZ%¯‹æf é©l|ÞˆÂ^YÈIåæ@­+CåÏüÊŸ)ð¿ù²Þÿ€™Ÿ‘3MÔ"`¼cqÓü3 FLý j”dlĆÿ~m7`)P¿ ÀmeoÐúÿÙÿ¦%7ù?úÖÿÜð¿Þÿƃnær“ñ/üï6÷Óiµì'3Ÿšÿƒ1ŠÕˆ§ògÅ11tšR’?Ù âÿÓéÛ³Ù»òÜýùüÃÅÂÇÊòçëÕ¯·ë¤ø§³}6ÞùÇãþ3OÏÀüÏ"à»íßn6áÿ/—ë.Wž.–ïÏnOçàÿ‹Üó?rœü{ +"~"Ÿ§Ïã"¸2§£ß唹 ·{ÐëFƒãÇÇÓ±Øl:½„ t²qq¶ÍüϦ@,ÀÇ;ztÔÿ{·ç[•ÓµóÂr!7ƒB‚Œi-‘:†ÿéˆ,C^éíg æÏD¥éc ˆGÄÔüâã@oÄ/†üC^qÈÓ ó³u^hŸù{Ýœü¿ñ¿lWöÚ@¿Ë"uYÈ1æ6S¿ÕØgÕõ[´}­Ì¨‘ëåºjå/WoÈèØ_º±(f3Tþ+SBNþÓDþ­DþŠf¥¢ òGåO'?Õâ¿ÞÿþOBÁ/Ï"dR@ô³¸û¥DüRÚûŠEÀøÈ«Ù©wK³ kóïX@ŽeØ%ìš[M“MÛèÒ·  pkÙz.óÈÜÊ ~f~€"Ÿ=°gp´2 rµCþ ëëH3üm)_+#ém£Þ1Üîi »[#ž¶~;>½¼cjiõ bž®¨»“Eó?„ù§½Ð¾(KÉûz ~q1Ð{”ä#]…ãîb´ç$&>÷žÄ$Åho>Òƒ H‡ºjÐAˆ&ŽÏÕæu¶z-ÀíhsÙ[xæ¾Äƒ_âØÚ.k Ï<—µƒ,+ÐÅe»™g1w˜Œmzm«ö¨r&÷ÂT¥9x¹þ`·­­Övõ.ÉŸ™Ÿ•â{GêC¿ºí“ÈŸt@nHįX•Õÿÿ_úÿû þ‡½Éð‡D@G½ÿŸ#àÏàüÏ ü «m«+ë¼¥ÞârÇ͉õöÔv{f§þw>ܸo]÷.t÷w–û[ýuåð¢¼s^Z+—‹ùù\J•«’e4  /Ñ»åa×óð'A'?Œ´‡ÿ?G€{Œù?ïV½ÌÿEçøKÿ×EÀƒ® ŒÄMÃq3"@vl–ýàÎüUþÒÿ¬þ·¯ŠàÿêÍ/äÎwòæ—f¹µÞÿ(þ™ÿÿRþ†ýNr™²Nâ0H\¦>EFå?@wûôï2ù‘Ä}ép.:p’>ËŒžeÇÎóãÜâïmyîî|þþbáéjõÓõú—ÛͯùÃîOjÊÁ?)œÿÿ2àÒ\müZÙ`þ(/¢¨¦/r“õþ†Â>yÀMÌïrHœö^r¸°÷9ír§sÀåRxh¿ÂC:ЀÀ'?æĽ݈øægò‡ö3¾Î¼¿ ÝÅ`ÏIH\ŠHÎŽ¥åh_)Ö{—”ÒódÀ¾,Ť,É€(îD}|–8AW{ÀÙÆzDõ^g;{`øÏýžÎÀ=Ðgð:;ßcºlÕØnÒµèŽxšƒö}u i¶[67[ |ùz°9Ïy›½Û»ûù©yà@ÃgÓ˜ç±}ýöGÿso°=9[;üÍmçÿç`Ãê6ÿÿÑÿôÀc}úŸ™¿*ÿ-²ƒteœ#º¸Ò6¿Ø6·ÐÆüWv<\¸î+îÇkïãïéÎûtç~ºs=ÞYï® W—øŸýìdí$¿LŠ·Ôd:6– ÆÃǾÁ¨Wqì8vÉá²çÓ3DÍO6|’•ßãZÿ“âò/8ªþÏ[Æ |F½ÿ3†gÿ'M£I³2nVÄÍrPó?]¨Uþµáõ¿¦‹ú¿«æÿ.øßµÝåXÚV„´òzç =ù¡Îÿú-q¯Ó¤î‚ð9 }=ã€Ü¡fш¹âßK·ú0ù“ÝžÕ5ßçeߨOšö§ÙäŸø_yV+U—¥É«ò4ÛùO÷ÿ,Áÿo6>ßm}¹‡ÿ‰ùÿüp˜ùI |¨ú¿Æóº™Ýnÿ~½ùkeýóå*ó?©ÿ Óè5ÎÒª“ÔX>®¬öqÔÿ^‡”•Í6s/`çx;l2‡CN#@¨ÂáÉht&•XÈeVNóç¥-üWq{¡¾»ÜçR ¾Ü'•?“?½€ìòt£\X-dçɉ òŸP"¢Œ‡ø3Äé~~ü“¡HëaÅ?*ÿ·›ÈßÓCåßͪ}*ün†ÓÒæn"ÀmAHhÙ/¥o¬K]f‰ÝH`ò7hz¨ù{5jÉÑžô`[²·%ÙÝìÝ^ë…ü×—zVæ»–fE‹3Â…i›ùOuL>ïóox?(# ô½EåÏùU}O× ¤@7R]€ð€‡.áKø’kº;bÐ'}9$ÿY¥|3­z;?þveöÝÆÂ»êU\tdP7Ó3Ùšìšfçh¬úߨÊü±¶ÂÿœüY‘_>J}wGÒÕ8óh?àçüíù@È;r!ÀÈøyé/åïHúÚAÂÛ÷·ƒ˜¯­ ^œ’ð’^!ñ¿Ww ÉØÇC*&ÿb°û$ÔSŠôžÃü˜ÿ"Nξ¾LJ*)éUº’HÓ¨ÝA–FkŽÉ”©½6ŒÂg[ &y¾dË!W;›MÍ)2­rñAÈÉ º à"Ð8Ì=_¯åiÉñˆ€Rêolµ®o˜üQùWôTwpµ÷¾–t‚*t5¶~A–ÂÀÆòÿ‹ÿ!ùdæ¿Ùþì:ÿö]ÓQå¯üO¶Œn“µcÈiµ•Év¾ez¶ù¦d¡Å¿þ¼ô~¸ò?]>Üú?Þ>Þyo÷7ÖÛ+ýÕåa¹´sRX+’âÉIÑì°xP™ ÇýC1$<ßø?íRÖϾ•ÿóðþ/ÚÆ‰üÍ£yÈß8ðÀ þWÑP‘YõÒ<˜° tQcÿ±¡/¢—†õâ®Ç¯ë>m'ùüÆÿµþwït9·Dö ¡uUHï|ävò9ùùƒÇü¯WwBøœüõuòÆ£n‹®>XP^úì² Uö,{ÈÙO·£ôÝäíTX.–g£…ÄÐifø,7rQ½(©*剫óÉkºø[Ýÿ ÿ¯Ãÿ¨ÿ½ßùýqÿÏǃ¿=rÃø¿Ž=øŸEÀ?öþ~¿ËüàóåòÇóÅÇÒÜÍÉ,üâ?9ZŒd£CéðÜñɃ.™ÏÙÿ;-b«Il1ö«YÊ®òq8.i¤ˆÍ¥“‹…Ìj©°yQÚ½.Cï{,8j·=Ë¿RÚ¼8Y?˯ÿ§gSñÉäñX<˜è˜o‡üUÊ–Ñ¡&¥‚ÈHþ޽çEýÿþ¯Ú¼@° ¢W,X"P~]¢ÿ@HÄ/}/F¯'”o§ÆÞ,N½]y·¹ø~wµ‘‚µ;ä0OÓ>¹áËvÔ„@ àÑ5Õû?jogþç´Ïɰ²Ÿù?ëkã´ A^1Ä? (üB„óY°Ž hKÛBºŠ 키·“Áf>Tþ…@äî=?–^ÀüѾËXÿurà&¥¸ÉÊnsrp—À'¾¼Îô# .½h Š‘î|¨3¥ü.qˆÏV¨#”°ó"®~~£O^~=hU(¢c0â&{‚>š§Yh7òÍ:žá¨ÀÁ>z”ú¤ÚgÚ¯çÆöÕó뵨>£Ôq/d±+º¾y X-üÿåÿvæÿºîã{ÿ£5`cü|æÿËk-‹+ä*±¹…VÈj¦éöÌzW¶Qù»Ÿ*¾§Kÿ‡JàãUðómðáí€pSÑ]”Õ¥“m´…ìb65Cn‡‰ªðq"<œ %ƒIÿ`ÊÇM~F2´àgþÿqøâ™bÃÈ¿ÞÿLþYÆ(xVeôcð?R€®0ÿ'-)«"a–“0I’ˆ¡7¬ï éºY€ t“8ê„ÿ ´þÿwþ‡ü‰ÿW[µ¿nþ±Qϳü©ùYñoÒtÙ ½S¯ËB6“ørò6tMþlòCw$’©ü õ'e¹˜¢˜.e•煱ʉ²r:z}¦º)ß]Lß_ÎYØ+#þ·KaK§‰˜ß¤ïfƒØb’ ìV9‹¯w$?OÅ£³™ÔÒIn½|² r¾{u±G–.¾éÀäÏŠÿRn9ŸYȦ撱‰Xd,ûAOÀU]Ì yzñO‰îí—0ØØù»»}Ž.¯³‹ÈßÞÅäOßlÆNÀ$·ñý'­ÿa~&4hS?äoÕ¡ø—4bíA)û©üw7{¶×{6V{Ö–»V—º—ç»gEóÓ‚ÙIÞÌDÇôxû´ªmj¬U¥lnl¬óÿ[:üyÿ×x‹` h/ðŠ¥üÏ"€ôæÿNáÿa-€\úbXþzlðÍ„òõœêÍÒäÛÕÙ7[K ;+ ôBÞÍv£~§Ñ¬&à8 GýWýongþÙ˜ü;ˆó]íwGÆÝöŒæoxøAþÿ›í´øo^Xnž_jAñùOL5Ü–Í÷Ö‡ G½ÿY|º ¢xºqÝ_Ûo¯Ì—ÚòÙþiq½˜_ÅÿÅ™$;.x"KGGÓae&¤Lû•ˆ€Œ—ìödþÿnñ7ç§þŸ¬÷ÿ‰}¢`UAþYÓ“F?ð@ŸÇÒ:òIôÔÿÆaøòI‹,aî›úhôF b}7>"€ùßw(ò=»îó¿eE@¯}áëyœÿWZŽÖPÿwè¶ùþ§€. “3?•¿ÈxÔI‹±Ó,!þ·K}ÎjåOßó"“ú:R/3[Ä_õ&®(¦áÿr~´zîqiô¶<~1ùx9ûT™ûx½¾Ü¬üz·Áöÿüín b'ÔäÿŸŸëaþÿç#óÿv½ÿ?],=ÍߟÌÜä'Ï3cÌÿéÐ@Â/?ö°µ‰>TÈÌÿäN¹ÖÜm›½Vs?‰Û€Û9äóŒýªHhM/#ÎOwÐ\ží± €ð•Ò6¸<Ý:/n€ra½”[=É,CþéÄLüxâ8Dî•yü®~¯£ %é?+²¼Ë‚Õ^:öñCþ®îäß]Ó¾ˆ‚#]ìß Ñ>5?pšev²à+µhQüKu‡â#uä¿¿#AåOåßù¯,v-Í‹f„ÿÜòŸRµM޵NŒ¶€e£r¸ax¨qh°aPñ^1ðn@NvïÈúÞ"dÕ^àå KD@5hTã€ô??/ô¾’K_ É^(Þª†^O¼žW½Zš|½6÷]Àö2¹Æ  ÝzoÜm°ì7Âÿ-9±,›ÚBf²±3ng“Ÿ&ÿ¬§ý;ÿTþ€jŸ½×Ëÿ,**Ç:JQ>8=æD:ò‘ö\¸@³ŸÕÖÀÏ£°CJ;9è̇˜ÿ,Òù_FÅWqÉM²ï.-{È<å?†>OOH¼ü!'»Ï" ¤äœ„ø<.>‹vŸF:ó!!R€,Rxxˆ6–ÜÒ'üŒ‡‹šõòÙùØù¿C2riÈsý;^›œ¶ t¥ýèY„ ì"ï¯ùí·™g3´[ô|“–Oè¾¶“ç°zÙ.yÓVOÐ:µ&Q=£ ¯¦‹€ºF@TïöNîw-@½ü©ÿ[ÈÉÏ$ZáÒÐû_˜ü9ÿù²âŸÇŠNþ¬øŸ_jš]hšžmšœnŸl¼>7Ü^Z+ö§Šë©âùpéûpáÿx Ÿ×O7ð¿çþÚqse­\.Î5g§;'…|v9—ž']@j*›¨¾–‰Œ¤ƒÃˆøŸ«ÿŸåïÏQÈðÇ;U¿óÅ?üùgŒÊ¼IÅüŸÕ*sºÊXV[MÐ+áÿTÍÿiº9M¾˜Y5IX 0ùsðìÿ=!üïØÚÖÉo¤ò_àý…ÿ·xDþ;¨ÿ †}aÍüÂ*ô>M¨†ÿVrö)ó?ÛmÈfþ;œV-ký}LþéØ@61PHæFHý_P^GnNÇîÎÆΧŸ.g?]/|¾Yü|½üõvõ»uðçÝúßî7þñ¸½sòÿ¯ÏGŒšÿÉr@ÿ7¿^ÿíj þÿ|¹ü¡¼ðp: ÿ—Ó£ð¡êÿþc·”þ9ÉQ~“Øm$ÚÄß”YKüoÒ÷Ð. E€Ó>èq)ýÞ± ]Àt2¾€.à4¿Q*lž·Ð 0.N6A½öA1·RÈBþ éÔl">=ª—Š’}GdÓYÉõ:{h ôp)ôŠDþUØä§6ðïae?Ѿ^ÄÀŸ~«¾›Ëe—¥Mþ¦~È߬é…ü 2ö?Üí†üÕÛ½;Ý[kÝTþ"È•ÿìŒ`fš?=Å›œhgòimªùÿ=ç"ÿþ×øè{­èÃ-È$¯\ò®_ü¦¯çµ¤ëuoç+À´Ï- Ðùÿ/âî_ª»€¤¯†åo”oÆ_M)_ÏŒ¾Z¹2óz}ðv{åíþÚ»£·ºwfuƒíó[ÍÿíÌÿi'ÊŸÿ3 òéiÎz[²>ÿð;äÏ´Ï™ÿ<Þu‘ìä8OÀYŒWŠv£í5xà$*…ˆ æCÎ àç‚]¹ ¹•ƒ¬ì?öTb½œü¡wx¶‡ü?“›î‡¿œ)¿ž}Fäår²Ç¼ì.#74.bÝìâ¤@E]¹ ã¬Úh‹s~Þ/Å€è$؉¾ƒiMB¤|Œ$"Wg’zÏEz•Bâ\ ;ëïJø»â>²)`§ÇP˜<³ŽgÔ ôòö.C«V¨5uFЛ:uæo¨¦@­ 8Òu"˜ü¹S@éÎ~½ÿY ÀüOß2ø¿ùŸ¶m?úÅ?¶áòËt ä?·Ø<3×L‹ÿ&ÕDCåLs}®»«˜Ÿ®ì®Ü.iPР)x¸rÝ]Ùo+Ôÿe]ùT}ZÜ*äÖr™¥\v!—ALd“cˆ€\t$Í„FÓ~rÔ[ðeÇ>d}cðÞ7ÈÎï‘Íÿ\ñÿ?ÿZe£ÍHJKÑ+Ó†!ø?cÌØ‡àÿ´Mž²Ê’–þ¸¥ù¿¾ # ´þ£gÿ£þ‡ÿYýùëص_­Ìÿ‡«­šÍŽZñOäOý/Ôí ÚC¡A+B‘l693õ/$æuHCÎ~vÈ0ÛóÏä¢Á>®øÏ%ð?­ÿ•—¹±ëâÄÍÉä]iúébþÃåÂÇÊ"*Èü~»ö·‡Í¿?nýíaüýqžgÚg“&öLÕtþÿìÿ¯—+ŸÏ—Øüç:7q™+%•ÅØp6< È¢ž¾°C´Uýï2;=!OÝ`1Ý2ˆ›…D€Û9ìu£ Ff1²(Ÿ]E#À@œ!rëìó4»RL/åÒ‹0&9ŸNÌAþ±èD$< Žø} Ÿ[îvJ]‰ÃFæùp;"u>ó?>ƒÞÞ€ †üñC¤ò·uÖþÝð?'˜ŸÊ~ü]ôÚ§¹Ïm•—EN&?ú>TþfÔ¨é×J5jñá®ò¯Žý׺×WºQü/Î !ùOŒ·«ZUc-ßùhðT¼E°”½e°‰ ±Dx7 }/ë}KSà­´û ‚€eA­#ø¥§ë“? É«oýÿziêåê,"àõÖòõêÛƒ7Úí·ÆÝwhlG ˆ¯¾•Åèú/ó?Wÿã3çíÈûxyhßßV´aþZÍ_•LPŽ Ï"hÿ2ÕŸHògI^)ÑQ%%8MòO“¸à4&B I80랆D¥p'äÊþ¿NöÞ¦aõ>Tø? ~˜ÿ÷òèogÊ_KÃð?ƒKûlßmZr“êE\ÆÑA M„§!A1@¶*e} ˜0ó¨öO‚Bö[3á“?@¿ˆŸ ú,­$úðyëc”¢}§ÇÒ|Xœ v'½$‚rx‘ÛÌ·ùVƒÀ¢uøÚç½N ×탹Ëhé6Ùzk§Î"Ò[ºIƒ°æm:" vþñ?=”»Œ«ÿ[Ÿ‡ÿÿ›ÿ}&‹´ø¯úŸíùü,þÇT—çûWçG·Ýý•ðtåøpéB ó_¸ÀÝ¥ã¶â¸¹„ÿMeÃyé°TÜ-æÑ¬ÿgÙ"“¹”*—ËEÇXdÄù$`~JίÊQÿÓø¦þg“æÿzùg4à K>G)í0A?ÿ§- DäÏüê[ð£ÿ}ûâÿ]c“_ó?ïÙÿtçÿÑj+êø_³Ã×í |`<èøº} Gøß¤±93ÙjHåïs²­>Uù“·Sé#â—Àÿñp_**ÏÄåÅÔ ]ü&þ/Î\—æoKó÷åŧKrgî§+"ÿ_ïÖ(¿?l±—¿èÛ¾ê|:ø×—£ÿþ¢aÚgõÿwþÿÛÝÎ7Õúÿb™›ÿ£þ¯dTå„ò$®ÌEé€<æígþ÷›%^£Ø²ÙÐcÓw[udiÐõšõ«‘øßn`à󌆃“ˆ€trˬ2« ˜]'xHÃü+…Ôr6¹”I,¦ã Éè\âxò?Ž¨Â¡Ñ`@é÷ yÜ2—³ì;µ‰ö—CLýO„ÏÌO?%€íð‡ÿÙ‚o}åO»•*ð?]‘!ûfú?ääóŸ ðü—“AÈŸùŸEÀ—ÓÏ'òOEÙÇBÿ‡|ßc¦W‰t,N‚ü‚/ÜÎ%{@kÀ´OÌ&¿/rç"&fÂ'·*'èA×)¸JÈA%)¿LÈ/â²RLz‘ HùÈ‹ a‡(`y­ôÀR£)`2Ñ  "‚‰`2wÂüf{Ãhïk7I" “ ‚Õ)Pgµ¨Íê念ÙÁñ£ÿ×¶Z˜ÿÙüŸùŸÿ4:8ÿ³ ÿµÉOÓÂróÜbãÌ|ãÔL#Šÿ±ñ÷£c å½ËsõÕå!‹€§ Ìï¸?·ßœÛÀõ…íêÜ\)ÃÿÆó’¦TTs[ùl­ NeÓã,ò1U.:ž ©²Á±Œ_… øUùÀ8(ø'Y PðL’ þWe­£93ä?L þO놲º¡Œv0KýŸ="òO)“š¡”v°Þÿ›¨ÿütÀüÿŸ_5ÌüäóãÑ¿>ÐxÚg›¨ÿ·˜ÿ?]¬|(/=œÎrþ?OŽœÄ‡òǃ™à@ÜÓAfÁÿ–Þzÿ[PKq 6jÅÄÿ&‹‡Máq)>" v<“ŒÏ#H$—¹Äb6¾R±yÀÌL‡§Âáñ`pÌïñù†¼…Ç=ÿ;ì;ñ¯ÛÙëq‘Wz!üšÿ¥ êú¬6ö§þï¿“¾ºZÁ°èPù÷AøÌüDþ&¹Ã(CñoÖ÷sò×ô‘•ßÞý­Þ½ ºò»Ò¹¾Ôµ¼ÐÉüÿ¼ìKaþS6Ôû_©xfxàmÏq0,{7Ôÿ^!%ã ï"@Òõþ:üüû¥oˆÿå¨ÿ_ÁÿãÊ—Sʳª—ó/&_ 6_m¯¼Þ_«ÙzcØykV7XÉ©þN]3ZD@ÐDÞ‹’UàÖ¤¬ÿÂÿ9/ùûx(žúlþ¨¨\ÄE5ùWÍ_õNPÏy–O–3p–DÀ)" ÆG œF„¥c€«ÁE´ ò¿Jˆï’’‡tßSVù3óÃöLûÏœ*¾ž 0X ÈJè ¨·ïƯƵˆú÷"@µÏ€üÙl‡™¿/:ÎöÕÑSFÎxÈk÷³T#`_ÄÖ™ÿ™ü77ÚðeÿÛjþ'-@]ýßÁµx òßo§ÅýžŸïäß šh}?4úîülû¢¼ƒ¨\Ü\jï*F4÷W¶»KÛí…õºl½:³TJæË3ÂEÉt~ª+й|fU_63ŸÍÌfÒÓhj0ž“ÈDÆ2Á±l\œø&¹€óÖ¤¤þ¯’¥Põ?Z€C%üŸ:LjðÒ¤øÆÿ´þçü8ÿW—ƒ©ÿýB6rn àó*þ7,ñµh–;˜ÿIñ¿Õv´Ýùëöøúývã!Ït„€§?ìF ߬ZHñOF(þÙìò÷»¤ÌÿœüQü“K ƒ}:BN3+$'iÅYfè<§¼,Œ^,Àÿwg‹åÅ•å/•¥¯•…ß®—þ¼[þónõÏû Rù?íAþ|Üÿóãçÿ}Öü×'BÕÿàéà[ÿ“õßšÿço S×¹‰ïüŸðö;%!»$`%õ¿ÇÐãÔWëøŸF@áHlÖK-†>‹©ßj°[¶asÔçgï…Å£³‰Ø<ÏlŸ:žMFf@,< ¢¡©Hh2úUÔüJ¯wØãr»].…ÃÑï°÷Ùm½H·S ÿ{ÝRêbþ §Ÿlr÷áŸ-üÎtø/†ÿ-5ÿ›ô=lµ­ŠU/ÿ]9@ @þH.üÉ!“VV“¿L»ßÏ6üWý¿Ú ÿ¯-v®Ìïÿ)U˜mQ)›F‡ß5€‘Á÷œùñ\ÿ%Ë‚|Ÿ2Ôÿ(¤¯$o@môòçö¼è¿$‹ÒW}/²—Ãò—£Š—ªáÌÿsã/æÆ^œ~`kù•zíÍÑÆ[ýö;Ò4 dP óØÒ¥«ÀIgGÆÅ§õ?&âÿ€óÿyLÿ_&:+ɪü¯2]WÑu¶ó:'¬ä…WÏ—yáEN@Ñ •SÂR‚l¬#Ä:Áe¬ò‡‡ÿwÿŸ þVDüz*ÿz"ûr*û|ÒÏ"€ ‚Ð\ƺðf-@ÝßHuÐÄz f~ü¦·‰^tixÌÈŸ²r ð1?>‡ …ð¡0ú”yÌ)ïk)€8;–B’Œ¿7éGÝ݈€€£ËcërYD‹Ðaî´YVK7JX§Ø=6—Øæ’€j X« 7uÃÿÜý¼MóýþÏzÿ³øÆÿ›í«›-õ# îÜ j~ÄA+;€?„ŸPÛðÏöü4Í.4LÏ5LL½Ÿ|¯T½ƒüÊwg¥õòÙRàül÷ò|ÿúR{{e¼«˜o/-7ç–«3‘ÿ©éâÄÌ þ/s{ð&½’N/¤ÒÓ©ôT:=2ðJ•MŒ³MA$B£Ùàèwþôýßgÿg,Äÿƒ’ó?­ÿ3GC }0œ:ƒ‰£¤Nÿ§Ìˆ˜Ÿù3ÿÇMÒ¿\ÿ{ö.Zÿ[7È?ßùŸÌÖÚŽ6[™ÿµj¾á æg@þ†#žI+€ü­D‹ÿê+¨djáêe'¼±»Hˆÿ}½Ôÿ&ÿ\\^L(NSŠrvø"?ÿ³3žÎf?–§~«Ìþq5ógeê7³ÿ¼û×Ýâ¿îWþñ¸ö§mrÈÛÇÿÿóó!ä_ïÿ>Ôü¯þû=™ÿpï}çÿËôX9¡,ƉÿCrø?ê’†Røßgêeþwèˆÿ-šnUÿ4èzaQ³AÆ"Àav:”>ïX00 MÃóDø„hhúØ7öW úÇÑ,ø½c^÷ˆÇ£t»‡]®!@Nç€Ã!·Ûûœ)z¯»ßç‘ù½Dûßù K#€œð`3÷Pÿwb~*³žìíw˜ú‰üMr4,œükÅ¿ •?ä¯Ùë?Ü!þ?¤þßYëÚZéÚXêZ]-Ï‘¾¸?lòO·}6Ž ½ãü_Ï7ß©™Ÿ1,ÿö½A  @Èi   ÀKÿ5ÿ¿„ÿåÒÌÿ#ƒ/Ç_Lÿ23†øeVõÓÂÔ/«³/7—^ï.¿>X{M[€÷æý÷¬pkɹpc+óÂÑA¶¹Ù~AÖ+ÌùDdBîç?·Ï ¨E€ð*ÕyMÍ“ë"äEà¶ º.V¹*Y,ÈŠ.2Âó´à,) Àc‹à"ÞP´_'Å7)"ÿï†?,ž'ÿ%E-ªþ§ ÿXèÈ‘µ`ü:d í,£Å Nƒ||ž……g¡Np!e%Ö{—ÜÄ9ù÷1óÊ ~Î+¾Á×âÐ×¢òד‘ßNGÁ¯'c_)Ÿ cs#ù‘ûìðMJq™—eŰ4$ý’þvõÝ^{§Ç&"‹PV°Û»N±ËÕëvKœ®^àrK‰ÝÝkwKë#À`&³ ½¾»æÿoZ€Ú]À|æîØ·zÿ“£ªþoã–¸Uæöü()þ7[¾-þßOμ›z72ñvxì­BùF>ôæädõôt­TZ/•6Ë¥²p¡¹ºÐ]_¯ÎM•²‰Éÿ¼h*çÍନ…ÿOòêBv;›YÍd–S©Ùdj*‘$7‰¤Rcé$!“MÇG¹ˆ*Ë…€ª>èˆþ–wŽçlc¬ S jäZÈ_‘>$ '†’Šzÿ“ òOYúS5ù×ûŸ‹Îÿn5þ·oñ-ë¼oêÿž–þoµ‘ᚯ?ÖûŸ@‹ÈŸÿœükWªò¯ÞEèëe“ÿDPš0ùŸ$JéÁ‹œ²‚â¿8öt2òéLõ¥<ö{yô•±ÿ¼ýï«‘ÿ¹UýÏíÄÿ{?ó?óÿÏãÒ?­ÿ×ÓVu‡ÿÇÃ~:bÀü¬øÿçý|ܯ÷?Šÿ¯—kŸÎWŸÎïOænòÓWÙñ‹Ôèib˜úþOúúcî¾cùÌÕúŸE€MÓÉùßxH  5éû-F9"Àf´Û†Ü.¥×3ê÷© ùP *üo<ìQ½U`~ŸgòÇOv:†.ç0¾dYàt"œN™Ë)ó¸eÔÿòWöÉ™ÿë" ­ÛÉ«jÝÔÿb@Nr þwIÍÿüMºç±?‘¿ºïh·ÿ›âýž=êÿÍåîuÚ,Í’~g':&«þdžÀhÍöLø£öC웜ÿ•oIÈ^³ þ-ãATþÔÿ¿ô÷¾€ÿeýÕú_©x1ªøebˆ´,ª# …7;K¯öWI  ÛzkÜ{kR¿³¾gïû -t  îêH¹x,àÿ¼ŸlÈ,lfBäyFDtþ#úÎÿ·¹.p—ï¾-tRDwÅNpsÒYKZ;@#à"É?OðÊq>…¬# ›¸L øïù+ÿ+8ÿ3ù“꩜ɟki p“ê%í:?íSÎ;+û¯c½· )û„ä!)ýÿ ;÷§´Î4Žÿ›$éšN“ (·Ã•Ä5Áh4)й*·ÃÅxŸÂã‘ %X@çü·vÿŸŸÿŒ.ÿÂóÈð<ºç£÷øï¸ÛѺ üŸv ‘ðOø?nÿëeø·IÌ#ÿ“„6J(ƒ˜Íqœ½P˜à¸Ç…ÁÓjÅQ«:›5O£â­—½õ¢À¿ÆªÛþRþy17_`çP (7Ͳ¨ üßJ[€ÿ‚°Ø¸õáüš\øºÂ<ÿÓ’›s!»4˜ ñ`sÎgÊ{qÿÇÐÉÿ­9zs^·å¦·|tÚ¶} ðÿ¿ü_~. ü?•BþNB pÏg—.€þÙùÿì.êüà}ž~ü¼î\ÒÀ‚T€?^öEMiþèo»çÏ_GžR“É6¹ =êü§ÑuW5ÖØÈ›v‹–½’þíϪ†óšþ¢¡ÿn×ðýžá‡OôïöïÍÿ=ùñèþŽÇÿu4ñmkúŸ­pà¿ °€‹cÀôúpþõ¾ÃÿcÐÙÞ „ÿÓúãVuâ°ôðeáA'ÿ¹u}nUGø¿Éh×#Ú!M2¨d|Ѝ·Ÿð?äÆýŸyÈëDò%ˆðhòjQ·ßO¡nð÷ºTmøóC~0üÕ³Ó*çtßì”øÿñ„bÚ.ƒ€ðŸøE¸ÿ;Àþ{àÿNð3@~É Ý…%á-€¯$˜ÿ"­RØø¯îû X”ZÍu½V4@‹ ÿ­†kPØÌׯ¬× ÿ§þ.~úPì°‹ p?¹éy& :o†ç?ˆººã Ý)ßm°<âN:üïÌÿ²6üIÃwéq¯à_ß”6Ó½;Ùž=V†á/ûœ|ŸCðß/ʉÚ. ƒÒ`7׳³ÝÛÈH‰ý¢õtO3-ßÉð¯þ±±€O †Ó"Âþ¥J4|>+ëö‰N Èÿ‡íüµÝ E€¿ÒS_ém¬Êškòݾ]ûþûíaFCÈš£?Ëë?/ |Q4æ¿® ½©Z.jÖ¯ëÃð½©[ßÔF.꣠75Ûëêè«êèiyø¸0t3}ÂwÒÕMCi.¬Òì •F©ÖâÊq2„JÁDU¤c ðO&©D’J¦t &EaÐ"ˆjÃmð÷a PàFP²€y9¶Ù¬£—üh4ÿ,€ðòÎþóKmþ¡äï ˜œùà?ñä6Þóù ÿ£n ÙºLÃ]$üü5ôLÖÆ²ãùü#x²ì#Ž›*Ÿ–K`ÏëeO­äþW9_%çøW²¾BvŽÛžÃüwüßÊÚÿÓYÌÿ¬e;kå2æâæpac¹ÀÊ%ÿÉ. ÿ\dH°nц@ÄrnÜüùþo´˜ÿ7|—üç7¹xþ3sÒ˜£'ò¬'4Ó³8% <–ú'zn4Þ̓†¼iPòo·ýþŽ'ʹ'ŠÙ)9á?ßãù¦=˜?´´Ãÿ è|Ÿ|‰ß¹ÕÉ£NŒ…òÿ•ø¯é¿!À_à¿F}ÖÜ0èDx à2ÿYEã#"û}1Z9‰“×”„ð?0w+äD%: ìí^ö£)p8ÿßÃüGã—Ñ@†éÿ¼_¬!‘ðü‡ð/ðÈü,ÈPR€à.äP€ì°Òf¶‡XŸˆðÈÜøþ UÀ ×Ñ Â;ò·8u[|ÿ‡äÿ+üßYWìmöø¿Lk3ÉüÿWœA ÿyào¾¨Y¾i ¿mŽ€þ±c#zÛ¸ÿMéë† ¼à¬ñà‹úýÓÊÈIiøˆzÉš›Yc=m,o À§f{•ÚZF³ª ÚAu.Œk‰ m*¥Kaøƒ Ä—‰è¢ *ÂP`K5¸@ €,À땃x<ýn·ø?ï„*@€Kžÿ¤ ðÿ#þó%@ç½ðzêÙmðàoŸê~8Ñ üÇáÿ&iþ Z»Ì]´Q¬Õ‹Ôºë¿M¼+= endstream endobj 84 0 obj 814513 endobj 85 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 86 0 obj <> endobj 87 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 595.28000 841.89000 ] /Group 85 0 R /Length 9 /Filter /FlateDecode >> stream xÚ endstream endobj 88 0 obj << /Length 20334 /Filter /FlateDecode >> stream xÚÅ}M¯-9rÜþýŠ^ ˜™ÉOÀ0ðÞëÃÚIn@ A+ –0ÐH¼Ðß7“¬â¹§*´‹° ϸ}ûVÞ$™LfFFüû·øKÿ3þï#ØÿÙÿùþöïßâùÿøÏo÷÷ã§þñ[øå¯Æÿþiÿ[UΟh!­ïñÇïßþòÿÿÏø™ë'~ÿ¿ßÆïnEª}£¶¤ó?SŽ¿üÍÿúøÿõÿ4¾÷ûlKægo¦þ¡¹õ–~ùýÏßþGøíþòûŸ_/G©Úôý뢠¯G=4ÕRnŸ/¨Ï×ñy­ùýóñ;èó’Žkn·¿>‚>¯Õs~Dí¼4~(j©·¿>¡>?v~«ùv>ŸÅý|G}¾Z¢*ië€[zLñ¶õP}µ¿> +êµríáõêóí¨!‡Fúë{>´¶Y1?ÈøóÇwI?†æ}vcŒÃÿùžpHƒ}¿!I¿Åý[ÿqëÖXZ …¾¨ö}i”tŒ¨{h+UXëŸÆß/¡Þ^Tô‹ÙþþvÏ;"ìïÏÕû>.å.#ë,òÈ<–s‡£jy¤°ø[‹÷}Üùkz¤baí¿Ö½ïãÎ÷oJ1±üßíï¯÷ûö÷‹å9öLÊü%Œ¿_rm¤üKâ89·BºÿEÆù“^:éí!Ž4 )ÿû¯ô¬¤w·èØI•Uv$Ãÿ]Yù¿¤æ}ÿ%'÷û0ÿçqþkÖNÊ?¤ŒóŸºÜÏßOÐ÷w¹w¼C×ß®÷¾}V{自}ôö×ÿö«çÝóþçã’÷ï°Ío¿º¶x÷?êñ¡Vóööäì~µ¢oÎùþý,:÷y÷½¿«ÎÎ÷aÏYv®±ß¿Úÿ¥a<~„µþuä^1ñâ_ñ§…güC¿šÕ~KϬó?Þž!{ûpö_oG•T"íþ 怖°#«ß:rpÖ´òs•–ïàê2Î@/©ñr vß— !+à«÷n¬˜‚oì¤zÕàH§  ¤ wàº0VN-dV&4ËÀޏ:¼Õ%6Ú]ûø©žk`%C±—«EŠ„V Öçsv g-VcI¬|ÈŠ±1äTY›PÆ‹´Ö®•‰ D•ƺ f=¶ÕY›p¤´S RÚ©)Î_?Îß ‚S¤ ÷ÏfÈû÷ RÞß €í‚á)¥­ùÂá)¥•ƯÖl‰¨RÐÉÀPåþ÷£òм J鯖]PJ7¢ì‚çï·‚Ôø(-þ¶|${ ³ÎŸ¤Z÷õÇ1Çúgí‘uýŽGðx ÷.,XA*ô9 ?ßd™Ò–èGï%ôû_/¸’d)ó9ðþçÿ„mþk(›ã~{„^ëÝÿX’¬ŸÏùþ~šb{~Ôé³ù´Ô­$Eú~;‚¨•¤2¥!4¾Zz•Ê:ÅæCã3þt\I2ØKìþ÷£.ß:¾Ÿ¥êýï¸ñìfúÅùû»ÍgÎì+S:²Ýü_ íüÅ`ð¤ìmB3¥ÌÚQ Õ¤±¶@”z•åI9¦«.OÚ„Q[…yN“^Ua–#k¹'V`%ÉšŸ‰ lX#f›Ô¬›(üöèWk‚´Õ:õyá rOЉöÁ՚༆游jî´ÛÐZ”ž ÁÕ!=H­"8~Lh°Š`‹BKHfE0ççuŒƒ)Ž%ö¸ŽSãéhÁy•À HV”-¹°žE»$Y(cë¦X8=òM”X85ùñC2ïÁÂaØT‰…R‘×pÖJAÞÞ#2‡æ9þ׿®?¶(7aâïßG¥ÂÙÖ?ëcýaEÁz¨mÀû÷Q)@Qÿû 7¸{âD "Tõ‰J_¼…«(Z(%{†ÄÙåÄß>üßåÿ‘ƒ³Ufúà €ÑF…BxÞ°zŒýîRW ¸2]£ÃïȰªd¼ª’œK`N$çÎÉÝU•,$òÈx M’NA²Âpm¶#©eR¨d¸¦6 edh%Zá%kÕÄJÆcǰÎuápضäï‰c¼Hä8ùU%cœL6…D#i%±aë2šUIÉÏŠLÄ9›ðKQ´&NQ—ŽNL7VõÝ\Ur¦I§ ë‘êd³æœ‚]m”îLñ?¯8>¿³,Û8,"Íÿ>¬5¯ñuÒ÷ÓŧÈÙ~ªîßK^6ƒUÜ"6ÔÉ»-À9ÿ¹\eÙ÷ïgxY´Qºr5\ZÒ˜µ²ä_o*1+K®ñuÎß?Ë’s|b°Ÿ¡ ŒFkN+p"PŒáª‰q®@«‹zˆ?¿Í B_æ·9Y@Ô|å8a NNù˜ íÊ*È4¡`6rZ *chO÷M›ˆU."1Ò]PÛE$FŠ„Í 2³IKŠ=øÀ1ÖîÞ{,ØûìSs–`2:ÀÉ‹£¡¦JˈŒÑ°…I±Ü(ac4l!ZJ6n´=^Å@JÅá(Ïg1­Ü=¬ËXY’ø0Î?Œèžö22™™&Ï—~„¾SêÂ{ˆ¼“ºÄ×yç¨üì!òÎiÍ^x¾H:¯:þþ<$‚Ôî~Ç+i¼ªK䌲ÿ^B+Ãk¹…V8ë_²û}Xc¦FÿûÈ!ò%4É?í%òL鋾†Ø;"óEdœóýîú÷7¡gF¨ÐË’:ê<ó¥uÄ A1V×`]6!χ`ç€%¥l©oŽ, êé™T`aøTâ<æûê‘–À2‘Õ"#-AÉ®¸1þºóï(i-Oàr @*é$û¿qZܧôÕ»°EÝÚW¤« Y‰nb5nüª-VR$4n±Ek@:1ä‹Øàæ‚Ÿø¹~R0þ2ØO:_&ûI7âíW2ïNŽ6LšÚaŒF24 PZn>YW—(4Í£]MεØ'Ã)5Y¼§“äµK¹¤±YûÀ„ÍË5_âØ¬{¡¶ UOÊO&¢Ùõlšù ëã,™ŒüS{Ç4`‚DñY3œLzð-úŽ{a$¥å¬ö}€+ ë%ÍŪܼͷ7£À«—òV=…‰SÆA߇ñ ¦ Wy3 'î°ñÝ\£úઇ›Šôæ˜@QÙÅ;’}×O…ÒF2t«N>nÒ&üR= ¸ÊDŠ< *EgùR(Ã/åKÎ0ˆ«k c:ÒÂÐL&䑟ì 72pü¿Ž§b ­A ã:Ç@hòµ¤›"P­èD’®ä)WTšòÎâäÅ´‚ï,1fvrc`å¬^r9¬³PÒ¥—Ã: µ^T 7 põ-’S†]·"½’úx«W'GÇÕî o˜œ$=6¼l)ä1F/I xáÖsYÌ/O®Àšk°jT/šÎ›^5J”ÚáÖó~ÿ>."›ÆAx8 "1g«n–8´{ùf@‡$ß ¨@ÈW[­Î&4ÈW^œD>f[‚lº¶7PÐÏ.Ò(†º›M¤@XåÒö¾mBT^VóÀ„d¬l5)šnhÀÉd×ÔIÕ ûK”~j¯—–é.0…í“6”´ 5ò‹$E‚Y¶Ê“"èÝÜ\¢©|/I£ÛFÄÍ÷ ~$íD-ü˜8@›‰:Á$ R¼doû§´ý‚_ròóXÌQ¢¬¡tPI©Ä Ñ‚tT«ÙÐîæY¾t}P‘‚ßžpZÝ ¨µWZ‚b,–¡Çhû@Lî/{EÎK/B]Ò{UŒWz1êÞ,ø d²<)uY>P¹eI1Q´_*G,¤rÉ‘b¢dù`œÌѰéL™Û÷;\g‡ä€—Ðλ¸vRú`Ào@Üß9¸ý¾ ˆû;·90Ü_íFguóllÙHEWw=S:I/¹›Öré ±<`ܨ¼chcË2µ?oü@2kzøŽf ·êœ›^¸¿Li§¶±Mæã S(Ålnú¬ŸfÊÀÔZÔ‚·MP5äL¾jÈœ“8&ÏÊ)-õ-B7µ)Y ù€"å%_‡†3I½\*\7 It¹¤éo;;¶¼0$”²‡¤¨l‚„ÝI‘5äq4–DËc-|€{,g߸}Ð>œ U.Q:Ö*ôöÁèàt©¹Ñ|`T?"Á€oÖå>¡Ðœ»qŽ-Ÿ@dN¦:Ç–O 2©z¦åƒ¸*¶l0'&N­úæ<œäŸF"༜ uôÊéëmòÍJá¾È7+‰Z烰+Iv¹Rš/a¨›8<î-l8(•K ø"r¥ ÿ¾‘+ƒú¥†Ë9†_j¸œ@dúDFâ@óÀ(Z³Û•»›0àuWJOûËô:'ö…'˜ãóaa+8 †òÁœL©*Îêeå g#øÉKÊŠD| €Xl#¢]#‚•ƒÅÖz)¦‘"ò¤ÈR•’­Š}ѳ,§±MõêÛ>(P½¦…ÉçÜK±ÈžKà\LVG¯"…x3Ù¤ZkN’^ôŸ¾ HÿI^ËR]d ý§ F^T6úO-Îcé;²Š}"â9;QB»„“X>ˆ[¸ˆT7™D'56§v&FP~ÒBs ¦_uÑBsn&IùÒbíÄ,—€éfú"aÅŠ6-¦KÁ§’i`Ûí°:öX€ùfl$¤ÃQJŸ¶ÖI"RW'¡QÐ&_ààƒÆV¶6‘M^ùf@ÇÒ9{àK!½qààã5?OAÁ£±üg2 !ÆJÛ„öL[Bó¤ch4°Khþ¶ OÛ(0›7œsõ¼KwœS0–—î8 †¶‹F#óýEÅêÝ‚,c_OuÎ}%oN4š:Z'nãðÐjº„®IñÈ=Rô’SØiL¦äå$‡XBè¼€R/øg#±Å_Ü>°nqRd\ù ºqøˆ{ü`È1,â?ν`„µ®ÁÕF‚B×#¥¬‘¶§†T]쇅ŽÃy1Ï5p”E=GZ1.Þ¥yËÉwéÎøU¾¬¢œnßÿWpºÐL‹öfŒ 9øà¸xëÅD{3Œqn1ÑÞ €‘× – §‹ —ä¢ìÍØ¸xXoÇð7öäa%-ÁKÿäY9ó< ÀÊÙb¢%]FA]$¤»`ê'-Ài ¾Ѳ2Ñ[•³›2PÁé$ %ÝSÁi ÐÓò²té~ß|«ÙإئNÄÍ8à_¸ho>hP§I}I³ ^Òµ´H<àÀÝ÷.*·r\n(p€~<ӌڅäƒIºԋnÀ*&a“o’VÁT·OêKÒ[ÍèÇ^Dšôkl™t/ˆšòxq" ~i?KCŠ”Œ-pÚExûÀÆ×k¨–¥ÉÈbšJŸ¤›éU=ÔÄ€•‹õöýßÐô¤¿?nÌ×Í€ï¸úóõnîVÞÃÓ7t îoÍ.ß<ÐqJb'àèf@ÄáþΡÑwr€¾ªÍÜöÊeKÝ–¦¾?x  aw¥5Z ²â¡¬ËX)s6@ï€+nÙoR(ž¨ ìt³ !9PäŒtfñpM‡‘¶Á,.½R0Š6µø?Y«`“Qgñ´“MÈÍq–LÅJ&?ýÍ‚†,_';Å@‹~ðÁw`ñ0†9“ÀZ…Z| €“Ó¦Üã=:°|£óJ²oæ ðEŠV¾Œ±;7SÎ-×.Ï› Ç·ã.Ý)gj8¶Ã$¤"Ï–¡ôÖxgÁt´\ €üŸòÁØ*èˆ%=KG¸ÂIñ@›S;ú /&J×&FW{7q´[>üýWѺ9 ÁU´H+ q×oüÙvý6q°—i×o9›Ð°—gý–l6è„>&J7/¿`oœ=P^°7NøR>åìñH3ÎÁG€õÕë v—(mu+ŸÆäDBøÓ<f½„ˆ¬|ºÈµn¼ˆi lnúªa¿[ðIÿy±9ÁpÒžElÒ>iQÕ¤v#­¹é&}€›^´S~þfnj9\sÓ¬˜ê57}³ " ¸KJìfAER_º(RÀiMn³^IV>u-ÀOÚävî‰hÁ&díDã'÷|ÄŸ¼?“D` ¹^Ds¤D}N-/ )R<˜SËK>éfAFN-/ñ"ÒÍdN§xÑm'~‡— ¥ŒÿÂN[qK߀ F—ô÷ͰX4– ¯~Z¡t5Mèõ¬J a¤È®`àS“Z¢)·%@2.É›H8x®8q låmÒ)0ÂÁ%Qp3 §–ÏÂ'µML3à'P}}q²“î‚Þ6è®DcâÅóF _‡…®0ñõ4Qx«`9ÁY³!­‚tß°¼ÐÄׯ™aN8Š6pÎ üÓdk–ô9éRŠ9lø''3‰yø`á­Â—ÙqR<˜àKê+é%ÿNº |y2ͱÎB3úžxZìfÁ"˜*¡Œ` ÜÅ0Åz.›Ø²J í«œ!vÚi´ÙñÚ'57)?c$ö,8ñõ¾¨¤hÒç'•T¹J ¥ð²uIÍ·@Íéƒß‘¢1-¤Ê‹Hã³ÍÆ×iYšTóA“FËÒ^uìJýè%œóþ} ¶™¤{•‚¿´:º®¦Ç†6 «¯Y)ÝeÓšõ  ¶ÔÅmT)x‡¦EïÄñ€ +Ž£< @Ò¦EîT)@“lL!;ÒÍÙ8J[{©zÀWã¡zÁß ø¬£/ñ¦Û(°Ž¾Ä›n ëèK¼évÀê%a«7‘n£©Zs’™.äX?ø øO§ÛFLHöϼ^'œ;Ùêè§ØòmpUì‘ö’ï,˜øºkÁw`;Øl í}bUl{&GÞ>˜Ô ÏÔ !¨'»r4c êY€Û‰Æ?: P^DjíœfÝLýE«BÚ‰=ù>¸:úÖ»­BDr°žhìw ~ÖÑO%/RLœuô…Ëy.‰4ß\ýÔøO0'"™ü{?&< lFæäd&lF&U©¼hþ“šdAß`/áÅKÍy3½êèÒIxáÁ;í.ú›8 Ã¡iÝIÓU4 ¥h‚»7$“B¬ýaª~5‚±mç¨88¶oLÅJ7 jçÀ±ÃfAåÄ«cŸˆxŽjÚ€tÎ)hFÚf/£S€¸Fd0>šü†#¢ eµÕ9K0‰ ªÈcâ ¡|°Ç–=¸Ü9Ü—q‹…&-Áx%ù\µ´X{ ©h}PKP7µÐÍ€Ž«àžÔB¤Û°mj!Ò&ìzëâÀ¬àj‘vÍ ®gT¤]¼Ü¬UˆÇŽVC¾ù  +¸)u¡%³~šæÈîÍß‘õÓÅ0ÄÚ–˜,@øÍ?`˜Š“à*¸Ã}VlXOSmSpšuJÿ°¾é,ÎÁÒÕhT´UçØ2ë4yõWY¯õn>˜cˤht'I:i'Êì¯NznÒ*˜âú E&=MGë$›º­ÂO¤ŽVfŽŒÎâ$›"åH’ŒæÈ+œÀÎB꾸âUÞ]nÒ£Qòîr“öÁ«†,”*ú† Þ¾¯pJb’¬‚šóÌ „‚´x1ß<#(ûÅ**R›™\|¸$ñß‚Þ<€ŠÅ6 °à‡ïÀZšÅÆV%?<N©FIÜL#€´Œx|úq `Ùñ‹÷f@Å øà é¢Ã½Ã†'ä½Y€#Ћ”˜fÁë•&$BÞìû@BR¤¬`Ö³—"ñ—×;‘¬~x¾ß-ÈÀúaÒÕWã\K±ÕËOqÕ;S€WyîƒÄ_Ö¶º:$4ÓÝžRŸ¬ˆÔMw{j}²"R7úK/Eᇒ“¥â*!ù>€©§H4òI/OÅU0Ûa¼s™–ˆÔ#õI®BŠ#79Æ­ ï,¤p,_iï•ñR8¬­$´ˆ$¹y±P’*Æÿ %«|UÇ*,FVL¬zäEDÉŠM>øÇFÚCó^mbùA›„ý¤UÐ}àféø™ú¤õ`ÕrãÈNìPF¹uÜέLÂ~Òͤ"‡,BJVA[†#kTü}€“ùÓ|de¾™4}™o&5Âþæ¼™pg!UÈRyYš–aAjÄŸÖ±)'kÔ±%&kŒ ENüé4¶vô”×^О| `È—dÊâw íÄ42Yü¤ % ¥/"BÒ>H| `]ž$åƒßaïñf:‘/œˆ”tøàDÿp²´”ô(‹ß”¥½°7Ê•Qyÿ>^Fåö}¼Œ É/•›x•ÛÄ謆 À˨<ð’Q¹€—Q¹€—Q!-ÁKF…´/•w2*7~ÅOO*gxñ…‚TÊh@¡ 9‘°÷=¾©$—rÑ@’"Ñ„Ù¼ÏÆQ¥uÚA05òk`L;‹|®J ^QMÃ$97BR¿]ˆ\å¨éØààbe­BÙt˜¤KÛ#kJÒ0I¾¸7J­G:Ëf¤ˆÔ’ýôójBL•Þ{'!ÁO§’ i zTsn…÷V4è‘ôÒiñÀÈçB÷ž*©F^båß´aåY z¤¤Zxe“4nç:EI÷‚i»‡'£¿ 8äúa|G¯â;pîÊŽ&YP7I1+Lxö¤&•OÄàÙyAN”£ïÕõÒ²! á°‡kä•rÈÊ}Ñþ°,xÁôI«_0}Nž8`'DS?0ØÓ'­‚ÀâÔÿ$U”UÓ 2 ü7HžÔY9Ò’'í£Ï¯±=wâ¯0øÕØ^sI­ñÈ^s6²bð«Ø½<†láñ™#`éƒ`û ‡ &ÝL½ù$åã¬B é¥Oª+üJ‚“'âôÞdìƒêå‰0š¤ ÏæD¤¤qƒb9)iõ-À ;iIû %'âV!Ù*x/ØNÌúÁØ>È…½ ¹ðA†IP–Cb«<Vªr´Î|3½À™ .þ÷ÿÍ„–Iþ› ãã…<1@™‚Ë6ÒÏà¸Îæ‚ËL´lçæxhYålÎ&4)‡sl³LïîLÐ9q`¼×õ¼9K0žëáœYã,A‹Å9†Í˜ÐBδcØëÆ?‘nÃñR¾HÀ8›à+[æHJØ”€™C¹cD'aQ­dްnQfÖN4zÒsdŽsÍ·†Ä3ªæs`´Ç+ñ¢jÎÖ"›ª™äƒj¨“¬}€Ô¨e÷úI>0!…³×OŠÊ&cP(D;Nc^£œˆ$áEˆÇÙ_vÎcÑd`/´'CiqÁ¹Œ†¬/UÇaÇNìÍ)›À$8ÓØ‰UœºÉo@,`´ /Ïõ‰—ŠS<ú‰$B“ ¼w³R¿§˜xû é `1±•M Hº™ºnR@Ò*ŒüÀµ†‡Ô0òÄâ½’íœí'Õr%ŽUPbÍPhñÔFæÄĉBË‹bƒäƒd¤€Î› ·Ò }Äy±LÚIÍȉ‰…æ–õ"Qhn]IvÑÑ‘V¡µÝe&…7)ôá)ψ$8°°;í, F†rjÝÚŒ1âU¶q¸—X| pdp"GA‰« #O¬ÃZ<009å0Y˜–Ð §‚a4dÙípàPhvÚóv¢Ðäƒ8Zf¯ÂÈÒ|àPhFÍ(‘WOL–¥5çÕF@¡ >»oJ¾Âa{ÍÉW(£”†BÓ0á/…3IY‡Kuªp††Òø/Ktªp¦_š¬$lØWYK0.ÄuÔ eTe܇[¡ ²ó ‹ÉY‚2<г>O Ü>€ºŽkÞ|l…‚ o²éØ8{ÀIOY\ÎmØÓQcicˆƒ;„x<,€ÁàBõ-ÀŒt§¤Y¾äÜGF XOö|RZfiÑ© À ‡Qšï𦫳ÀFÚO*4ÒNLF…ž·n'¦²a±œÔ$fõW·JØ„tïüR#^„t$Ô± ’Ÿ—3ngð eY`>X VÒ*ôpÄSÀ‘ú ˲À4’5wZ†2uaÇ ívžÔˆ)&Þ½`Ôˆ¾"ƒæ§0( †MÊlj¢u‘œåHii ŠªÇ„CJ$QM™ö‚G“ö2Ox4çnœ€ÌœLò2Op2'K›€ÌZž·3ÎFû“W“™´Œö'®A>λQzñ-R#,vµ¹9ù†þÁ‚$&lR"¯†¢62âùGDfÄ„¥^-mz­\oǨ¢'ù@ »hÄ9™ªfóA¯•· ù¥Ï©lkyéÆs*ÛZŠon'šrý©XNºL¹>{¯6¤.¬kjJÕQ2m¦.¬k’˜°•,J»S¨¾p¤|_¨9ñà+5"ç^Hò¢ƒ#ù@ésng#&4èC¢a ^ ´ö‚ƒ!võ¢Q 1ìùö7p­Æâ”89¢”ÙÞiœ™!3@ÃÓ€ŽÃ€}2g7&¹QÃ|§pö@ÎG i>S™žû0`Áo…b¡dߨ&¬yKp éyjkJ…³Úˆ„µå§0]ÖˆìD;†½ïºU£ ™,ê5TOºÇïv-ÀáàâˆÆ¥öJ;Ñ®äSL‚”ɈF'4žL˜õio$*´8|P/"‡Áa ÖgDÄáŸò®_’ÎÂÈ ®ê!i,58kw¤UOÃØ4W¡ê‡}[…:îÆ¬Nv€#cS dlWý²qˆ‡F~pUÎ8>¨»rÆ9&‹šOávN–&b>¨S —sEÆNl΋'NkùAòí°} ùƒp•›± Õ)Ýéàlä™+åqÛ pø§|È9¹ÃÉT ÿ”³W=ÁÉ¢ÆC$=s$Ü>hap^®FçZ€Û‰#C¹ˆFHQ¹˜8¾šx©xpNpqî Ñ÷Ï|°9ßW†ùˆõÃNÄ¡ôè'<§š¨:"Rsj(8ÔÉÈztêH0”º¦›SCÊ¢Ž˜X¼ ÿ”~Nî°,ñàœ^"­B9Ò9¹C:#CéçÔ é^¨Ã'¥>išù ‹Ð2Umõƒ0©èžŽBí6K¼v3Žr$ÆC½v/Çí\C ´x`ø'K• ÿÔ½~'nŒ ¥x O!ŽÓ˜¼÷ì4¦qd‘±‘âAª›ˆ‹SÙ~aÀ:e–ñÅÕ)2Ñ#]j”½sÚ+À•ŸuÎäÔ'{wïœÒ¡'yw§à -öüð@Êa––óstMóÒ[✂ñR»I9›Ð¨6NEÒN…ÓFXXÐNAÆ—¾yÀ8ÈdÇ<à`xÃgK…s šíÕÛãìfX¤Nª_Õ³¯Ö9,ÁØèÖ ”‘˜è™¬÷)%¿ûâ£ë¾™ÉC¶Øà:e:Ã0hî*AûÇådãà²2:ÑY6 é,ä²Åq9™I,ºÅqIû ÎŸáEeË RÞ#Å0héì§î…‘„³ŸB: Ýþ­ÅYMŠÝøèi5Ç1Ž …—&K4>º…Iå€U¯$ËfÀz_Øi,aKs^îRŒ‡¬9UÔd‹šj%Z {Œ‘UÈñ ¦çÍ„ãf첇YI;ÑDÓÏÎg¨±„&æ»QCþàƒ‚ä!óv"ÌVÁ©`à`±}°' ›ŽÓ3KÃaNÔäºÛ3Sªì˜\÷ê1“âA/–Ö„÷jÓ<îÆSí‰s/ XÌMx•¬É¦ò¬íQpºñH÷B-›s;k>8—H;ÑXBÝ~?ŽL| `yb·sŽ Ú)Œ¹&ËûB„ròƒ_|tœÓh°®€ä-šNZ“®w}P(8×XýÀxÈšþˆ ³ mÙvÎí’Nö1R~ j>X°'ÎÝ8§x“jáù µÝÒI4-‹«¥Ãy3I‘#ÆIAvóÁ˜ùRäeíĺ'ÚYñ ¶kŽ˜”'JK,€µµšÍ“O,RIzº¦7Iû@C¸¦7Yõ®éMRLÔX®éMÖ*H¹Ô8I9’ÊÈÒÜæ¬³£rÍÞ,ø ³`ÄDÍ=ñöÁÈPrèµòöÁÈPN5NÒݨ9]jœ· 6C[â5¹Hjt›–Eöš|¸UùAt»|¸)Þ±JT¥ÕµíéMVLìcxm.àqð}ƒé§P/ERÒN4´Í©HJÚ6ÉÜÜflŒ Å÷Á˜ýRe%å‰I‡Œ„‹v;'ËPêdcíÄ4"RJ‡}H9|ðnŽxD¤,UiéÄËŽCu2„Þ¾ëüV9ˆp­ÆÃš­‘¶&(¢«¤ÍY19UÑæ,ÆCSlÏCPsÄ®8]¡±¹Í6.ä«!Ú±kê:Ìí(mòß–¦¬”/I’JÛ|œHXO`’“– @´xMHq`XУܤ{áË(7iŒhEzé´üDŒ+Û³‡uíÃ*àˆÉ·‡}²QîÆÉPl”»ïÉ^HDN<øŠäıüÀµV<Ëq#3GÕ%·#Æ5½EÚe¬B_Ó[œgëÔÉS‰“‘F†u*a²ÎB ¾8eÓC틉î}2…g–Ä»{=ä$âÜÎÔ· "Õ<ºäçëÇÚÍ'W†â35WVÍÃ^¦ Û¦“~/q^ï:nç® û”IZí(qaŸHû`Üξ ˆ“:ÅÚYÆš‡“¹žt/h­GOñYGÂ탦,€ÅÄÆNÌB< ½øÀff’ÝÎ&,Có©y¸1p#*§.B‹H¦æQ¨o&ÓÒ÷Ía´aAsš8ôUû`iq²öAû`iq²öA·†…@ã¼ ׋×é‚Ń2îõ:]0dr©c¼N TÇíܼNì4¶± yêÖ“Nã Y)TµeKšT}¸nE‘Ê¡YxÒUʼŽÈa½{@q¤„¥­ÙúÊ™`4I“)îD:©n.0ެá~RqŽaI[O£R4Uj8ª1Œ»H[{Æ+b÷ €y e²Œê>NAžÊÜ7ÀðáÓ1€áˆ…½¤G0Æñ_Ùp@—ÜhÑ8Ê ÿDÚãN¾Øè*‡ÿJu3ò‘V!ÍŸ’票AND4F>ߘLkì”4!íDã»9ûZ, ÚÆÁ‘)–å5±UI¼ˆåƒ8+áâ¯'Eecfô|€{-3£Ôª´§Rìåˆ6µÄÛÝXõ™ÀÞ*†F¬gg³  ®?ïFþÉ”¹O9Êc%ìåy/àp/TĹ*hÅ+^áÀЈ-†gõ‡ËÆB–ò3G‚!°Š±5-¼U0,`—ÈËPdd(1/FÒ>°üÀó#Þ2{Zû° 0^Ä?øv3ü –ò,¦âêÙÁXÈœ® ,?Ðh,dN[ˆ4x·³šðÜÉÆéì¨ûÔo÷ŒO»¿ @NÀñ^èY#íõnœ€É‚lgañ&sbâäfZޤ¥rjÍvâøl;µfH©Ö#»]6²|ðÁ RÎ9{Òí܇úb-&Ń>¢ò©9ÄÙ‰)È!^Ÿ ‡ÈŒñƒ:)§Þ§¶žF†ÒCÒ@Û‰IFD2îž4’R|ìN>©ù E¡å‰FÃ'§æÐ»?axÈqm°–v;§RjG9‹B?d Å'#ÇM6![£Œl- k@C*/‘£F“émóÁq–`bO66Î.ŒÆºs²±5Ü,`ã°±ið-ÀaÀ´l66R^–t³±qòÂ. i'š:ïÉ}D:¥læ!Ò>¨º™‡H>0Æ™sŠ–Zñ-HuÞÚV7¡‘Xùú‘òê&4U« «’ÞhœxóP£PGOZâsY¢áŸZᥩƉçZ€S¢ÔðÁNŽÖÜ ç^ñ`„$¡å’†­¨òV!Ëa4‰M·„HŒ%MV›MûΫ¡qpõƒ¨Ý:nD*Ó–5+Ð(¼€S™V÷BŒ@Z;^IãF|À^®Æ‰—£÷f¡ÐFL¬kbƒs7NeÚs¾ÿÝ?€¬|FΨ¼¦B>èλw w ½pb¢æòaàZ;#œD¤³PL…qñ€5/àðAq^ï@ÜøìI6AÚ‰]¶(é4Œº Ɖç¯ mL•5^~0þüû‡«[´‘é‡UHHüSòêH‰§Ž„Û‰©r*‘|`ºñ'ëçÝhŒt®°7ÓFå@!Âj—*êíû8Æ‹£¬§ÂÍÜ0çÅv3à'Pu%ˆïàƒ-HyóŽ#õ2i£oÀQ"úàDIÃ…½!‚\/ì i1çBž 0å±…<¹mBT‡ÑÈFÖiN2¶ÙÝ»y5/ÕL rŽGÜ @ëñ®éÒ&´ïޏy "%A +!ˆæƒ9Î}óNtP‘Nb4šÔBæí»“×€Ë&ùµ†dHw¢I‚Ö%°CÊK¦$¨gþT´$~nüŠ”í½DÞN´›yIÞ,€’py`I¸t–òIé‘°b`>S& Wuž 8Úl%MU>„’pͦi& ׂ’ÎÂ"ášelÒ‹ÝÀGuIzb¢èØãÁúôT”ëƒT?øƳ=-aRT6°‘/3)åhÁ{¸Ã¤a«Y06X1Ñ$ר)CkoÆ9°ÁZ{;÷9°Áª£½à¤U0ANßôÇòÏ\£]ò‡³Pà£%°CŠÊª •gž%Þ¤w åj·³k t’7 “µ­½¹&ÛI5-õÈk´åƒË$.fEåq;»@9Eœ÷bQ'{. fø`AG‚¼&€ª¼ ¬Ó:^ï®8¦ IVB“öÁH@Õ*óÕfð§¶ÆìYû`äÙkøÂîÆô'RAå(‹2øö}Ô‹­ªöÑû÷ øHs€+]Øèó D(Ù ˜:7ïà&†6ùÕm wÈÝ„0à\äW¤( €×mŽ•e@=4åúˆƒPèÑ¢~"¢‡V‡3R¶¬ÅW{1rˆÂ:zT֤ɽA4=QÃAN6R:ÇóȲâÌKâø©ÅYNZ„h9Éâmg­‚%%‹5µ ¢‹9\/–éj-FÿUñ-Àíƒ$‡)=ÏŽÿª_Ll¤˜Ò³¿’‹ îæƒ Ô¬*‰w5ÇšÊó^ÀŒ²…Ðx÷B{BI;±oEÒ›0¶™0~w÷ ß‘ìS‹ Ž´&üJ§¾ÏÍ?€ìSµNžZÒikð¦UÈçD$ƒ_Åèd(@þ«öÁø)\|x7 *~5ùðXûÀ¼‹”¡HÑ#•54DZÓ@LÁyºÃÊØÆ.ÖØ)"™ c[sCœ\YŒ3¯Á¡ÈáA3˜¬RD² ¥§È{½› £ëØËU ~‚^"…YÁø¯.ÐK$ñ_µ záT0Œÿª¹]äDÊÅFG³`|Ö&Èhñ`Âð¸>00ϸ³``†Ëå…´ÙèH·³æ~1±±Ú¬ÆÀåµ7pp̺™ØXgÁ¸ÜGê@ƾ†§8Ùºq€¹ØfÒÛ>L0¶™ r’8u4k÷ë|2&U®ýêu#$Ê c Î !‘’£MøÃÙSlk]H$ú<$ŽØ–=`¨Ï°S0Q7+%àœ‚Ü7ä#Qr’òi~ÇÑÝøKЀt7'ì'±0'Ú q0'yƒ 8{ ZKçpÖÀønNɵ›°6·5TNÞ'Ò*ÈØKüæX“y$¡¤ùX+¨^BS7 `-Þñf†ù ZÐŽCδ{Al¢ÞHÀ4$àµ'÷e`yÞθxÕ÷tbŒ;9(/OœŒ;’Dxû ¼¸^8¯¶ ùè ™8@¼fMæÅRJº1ÿ$Eek¨ÔJ%íÄ‘'žr_¤ü@Cò}€k¬™¤‰[Î…Á^¢î&3Ë‚rIž‘ÞÎtb]fZIÙm\޼ E-Kó,.ò‘eÁ£páT0p0]ë1EÚÍ4E׊ózÇ­B)›q'qFë_¢k·U€Åƒ¶¥®X«Ð’ï\<èñ’<#e(Ƽ$¡^®œF†b!1ñúÍaË}±Zî#Gò} @î§Ö¦d:év6î'ßðaÜÎÙ©¥ÁÞÎiäH"ØuN#G²§3q'ZŽT§`9)¼`p%1:,/Ö›Bá}1/“~Ù¤7…Cœ-GikŒ²pTçú†^Q¯lðI¡°à0tIž ß}+>ÈvÔ“°PH9ó8çåÝ€DÁUETÎ)0¼®k¡0rõ“çô¦¶#¤2«‡œS`­~{ŸÐö@«‡¶Õcæì^>xvz˜¶/!™ÜOeµWI)Éá;NNòUøŽ“”|¾+tá;NV0¡ˆž`…;ƒ"†¶ZJïÀ|Æ>è±^<°Ü(¯9ÒNÌñHâ=Ò` Ø<öA_Í ÎÕÇg/®RT60dò^  E¬‹¼¿p$»ùÀKÓ ’ûÉ[ÃFx1îpî…ÉýtÊ u¾!} `@@‰[nŒs/ˆ¤-7Ɖ‰¢aË‘v¢(v±ržíÆýt ž‘âAO‘'Ò*ä°Ï8yâÿk΋%ÂâA1©­54ùû)yÆD\!·½ønÞ-€ÁôۋLî'jCÁÄÿ²ÛQød^r-ÀUôG†O&ÎYБ¡´s¤–³td(Ùkkฤm™)RcEÍ^cC0<¡v6&ï‘ÛÚhH  ªW!ËþVÁ˜—Ô{±d O¢÷béH^s²uܽPóºâ48& ¯1_,†— 8b¢z/˜è[xAHwË‘Š€…dYšAxgA žU]œ¦&ß £­Brr$pÄD¯Û‡óA«pª|PÆ*œªœ7S*cNURDªñ(Á{7¢rM|“æmÁ·ör}b+G†oƒb+‰èÐsv¬’ø6ŽpŽŽUÒhù†dVÒÜÖFDV4}ìS™ã<~è|«U W60Z*‘¶ ‹aÑÚä æ,AÕ-7õîï8bBטŒ˜ð”»âÃ.‡A.x¨%5ÍÍñ€"cXÓÜœëx"OàK%‰ašº>ö!6Å®<T Ò÷ ~¤;Y…ìJÒi·UX ÒYHù0ü“ðÎBzÁ*GÕØ!svn²CŽóð¼p;Ѧú%?I¸{¡Ž¨ÜÛó™„dŽ»±Êó„[…f¢g­ò¤Ø_,`•£#^,`œÓ(áÅÆÙb¼CžïU gÚ²k, ê†`qr$cÈ$û@Ô÷!3lé,èØ]b§Ý ’ÆY8Å]8wã„dž04ÒN4AP¯ˆ‰D–´¿*‡—°Ô-vEòAM[쪒$IÇݘó%Eå)·å“+–Êõ><à‘áÅãDe…Š[R/HAЊW9¬€±ùà@`’ŽvŽùWœ¾xÈ*‡ NÇgmŽ×]JtÞ8–ÐÔ6ŽdAŽ HZ…<"’Ûa‚…b(§Å” {I«P ~äu¹*Ò·n#Suû\ÉÍHmtMnƲ˜“9>0fÄ®9ó¢rŠz¯×´`ÜL§ê'O4nÆžgo¥°G3¢I?Zž8™= pÀØ”-'[ Ú8 õy3Á*Û)³pj?‘bb;Ñít8¯'ÆI(þ÷q>ÙXÀÎábê Ø)pP“dô À%ˆ²Áˆœ=h,HžÀ9‰CÏúg RÛ•Œ·¢•ç rCc@:ç;eN¤˜BîâߨjºÉQšV7mÖáš»Æi½íyÀ`Ùm,ˆŠQuì>ŽáI›Þ)"}Ãsdˆb.8GÖ:‡”/´­Pü¾ˆ† ¥)/%ˆã8^Ïhˆ£iÑE‘ɲ ÙOÍ^i yÍ‘’cS¢<‡æHñ ä¥èa«²’ªé½|°VͶy—ÛIôâû×Rˆ²¡œ{AcßxL΋E¥l<&©¯b „ž@‚ʼi9QÙè!/ZÀžh*Í'“t­Ï~*’’΂‘3z•uioß 9cÚš¨¤ÓXÛ@Uš½ê>î,tCC&当M Œ4‘÷vžHÀ”"/CÖ£Ç ±å|¤Jsò¼ÃaHÀa×cÁaUÇg—çfJi쯿Äá28öÌ;Évbí•öjÛ(¸:U¥ùýûx•æÛßWi¾9¯Ò|ó^¥ùf^¥ù¶°ì0û€ÑμTšoˆ8‘ä “Št s»Tšo€ÅÁD6 ߨX“w))° 0â`ùÈÍ€Ô(^ÅÒe<5Š×C™‹§FqN¥ó|`”|‹ÁÿfÁw¨F±8’ 5Šk‰•–˜B°!bŸW΂~iÓ’.Ř7C')1‰¹\*É7 pé±ý[³¹ÈŠHåÓN„E$ç»4 !yjúà¯Åñ‘ÚÖªfÝL}kU“^*Æ*è¤b=WM0ÎÒY0J¾“ª•”)OB¼EÕJº î$Ì%ÅÄ©çØé4šBpí³½I*žIÒ±œ7Ð#‹¤?¤¨,–¥õÒ-?£ìUçá ´ }°@‘ ´à¼tt#&ZƒgA ‡•’…w35« Ui%”IˆçZ€$Ä;‰“Y7SO¾IÉwR7“²´©Ó¼¨›Y]…¸µëIUœ‘]äÑ4 Œ0·=ogÜ*LÒà ­ž¨Z.€öÍ‚_a08=lrHh¯6ÍáRM¿íD$ϵ(»%—n;)?0B<ß‚„F·ÙüÄk^¯örÕIÙ;ÉŸnàtš <ÉŸHùÁTI“ü‰ôb™ ÁÚŸ÷N/¶CLi…v7&Ëjsú ƒs-Àù@åƒ2Ì‚ñÙÌÌÖ „&âeë0 ^–K§™•“Áä5¤ÊóA• Mz;¿ €B$ìG_ÜïßÇõ˜ä(K_äÝ€€$Ä[ä7àF9‡«Í'œ‰øÁHˆVË]H‚ñG©Só¶'Žë€Sç›0O¢à›Å»ÀˆB™˜P<Õ‡`7A-¾°r~Ó‹´úø¡59x[‚Ÿx, ph¾`9 šXüY#D£ƒ«gVHÊI,'p}€ÅN@R42, oÁoH:8-ú¼;’ní±â1å6/9„íÄl°IóÁŠÅ0`¹>}€tp¡ÇhWó¤ƒ+SzŽôH˜XÀ%§Áº™ ¸ä4Hoåh]fT'·Ç*l'aíx°ó¢²Éóú;Q H¹Aô’Ü>ÉoArf7CĉœÃ*¤×zHG> ä9÷‚á} Èxu´8Y¢Ä•Ï™!ν ãv>åÆH§QdøÀhRÀZvOŒ“ð”Úb­‚å}г"Rξ@$ä¸KJ™–'J5$çfúdÃË¥97Ž0ï^ É=^BW¤W›!!n‡WL—^?ø†½² e‰}‘ªÙã%öuóNvXPœz6ŽwIÆ>Ð…€ãd(†„,1: òIGžX™¹²±á¹àZK)=y/ØiÌ2ö“+ãðg¹Ò½\¹ùøŠ8¹2 j>þì°Á0úuœÆ“»š‘šýdMæäÊÚú p||å°T™—©&ë/ÄFŒH)û“8©EaÝŽ? i¸/KÃññe¶“ʱv^诜(ЛMÁ•9³íæ€E²9ãýic2gž8}ظçÚÅÍœÉ9¾,¡¡Ì¡´Ån9X`#!Ë“ø‡³ KØÀN2¢‘³±“ {t‘e6 Z¦ŒF|ÁeÊ„L{Éòr<Ð úÓó.¨88×öhä'[8Çãþa `L3!û>Àõ˜íwŸŒé™ÃºÛQOÆtRZ&2,X^RfjJñgw“dÁÒÏî&'12UZ='3‡¤8™Bs¨~⯴¥Ziù±á¯ôœÓâdgS•öœÓ"cš99ÛI©¾øA9Iz4žZwàYÇO•âÜÎ8ÒòrT“+§ÅDã g‡—óZ”`>X'¤š…ñÀ¥/fœ2¯ñÀÅ5¶Ç9 ¦ ÚšÛãœC?ÕÜŸ7í0UësåÅÄ©‡zvúIû ›Öà)ØÝxvú3…>\Œçåìôsnç©F˜¯6iÆè½Úpè'ñ-¢Ÿòfç̉£Ä)›’³ÆÃý0¡­gŽëðÆ §~ ’7'èx½Hl*¨i}Y²L´`Då´p¹œx ÚØ>HâûwŒç%.l2é,dóAK¼l]sÛêÄœª®—¾QSòÚ¬¦ZNr:LZ“oP‘ÕØ9½×;–ö,#§Ã¡]7C) óÑM#z¡^8gÁ`98¯6 _Ù,­œ»1…¶gZ9;Ñ4a]À2Õ$i3ÕrngC€exÄ Õà˜èÒži%Ńö4%'Gš\xE…W[! ™®yà ›®°yà iŽÓ7÷LxñÀ ûÑ=ÖBlÿ¢ÇZ(Èø·jáðÀµ ãÃòâ*H¸é™áÃÔMÐÆh¡=÷j ÚØ9Þ]ÔÃQe éÊŽq€ÓäDër—0Á¤ûx¼Ð\ pJ ö»] pz¬iãn8÷A”¸q7œ !ªY°æÙ ‡uÈôXÓš#¥†SuM‹q^1å·à„Äh ±ÍIOq§q*ÂŽ§:/&Ú˜„ç\<0=ÖsBZ…ªsBZ…Ú?X€Ll¾ߑаž¸}Ð_ÚĤ{adi¾ îRÅåH•Cr-Hâ[dbQ9¯‰‘BaØ0EØ—ÖØ»?‘аÉ)^ÕPÃÇàåH‹èY€SCmòÁ$0ªW­B7äSÃÁ!>¦"¬SÄÁ!M69U Z:ÚÉ´Rh|0ž¯w»!jn´¨<5iÝ}ð¨{étsr¤$/nÎi4Ü¥’Íyµ™"쥒MÚ‰¦Yjq^ïÉ4ëOÍ¡w `«`õz€CÅNß[Ø›)SKï¡Ðê©F²/$`£L°•Í×(¨à¨›®qhOÊæƒk¤ÙòÍ×8”|㇤k -Ú$m,NÀ‹ƒ‰s SÙL2.d“õ®0EÖ|h]£¼œ=Ù%ùÀ®"ëö» ±µ6#i§À8w\`¤„F–¦:7g ŒUÀžh´MØÛ2’ð$^j”ó†áq®##ä»h…Ú!ÚxÀ)+Ó8Ô¸F79Á j=R\㫤Üx$F®pä”É`7«€Û8TpÙà˜µWÞi,/øë”6´ÆC=ÙÀoÔ¼©ŸH7“A Nðéfjm‰”0oàçµ,“t(ÞsYÂX…S܇S´ËPJiW4‘Õ 'È$ZÎkE4ûà¤y'áνNã$ÜY NL4AÔ nñ¾*P5žòBœLUF~pA 89’T³À>KÛ‰-îö*é4ŽÛùj¯rï&ˆê[Ѐ‚¨W£Ÿs/ñjôs΄"ž² CfPÄS^„“¡ñjðr2•vÈ9ÚMÚ‰jíÕyåL£ë¬ðz[iìÄZz¦eiEô-ÀAGL«eÖM‚Õ9Øô´I°:I {“`uŽ>¶á>Öe§Œ‰dÃ-(çäB6 ˆoŽmüêTfŸ—³ kÛ4`œM8™ØJ}ß@&¶“‹ˆz:ª&m´%0ŽxÓIÀ) ¶ {ÄZ…–| "Aý”"KØäO7 ~µ÷j©Ï› ¨½7|æP?ë­ o1ùÂo>ø Tÿ;±¤$MìvÎÎc ¨?˜Ž(“£ô¶`=f#ìsTƒô`ë«­.7k¤â¯Žô'ËÑ‚÷`ÁaŒËÉ•q˜Ã&t½Ð*bÈàŒ¼µ Í:ýIï46¹úì4ô«ÏNÊÖ¥›Ax§QÈH%=ïF îfì£Ï¦ÝLj}µ¥öEÊ‘ÔújKí‹´UÍ‚©”ýnÁÙéÿí÷o=þçß÷¿üŸßþîïÇ¿ÿãWþÕøß?}‹ë÷Mý¸³:ò1Ò®ñßþáÏãß ·öÕŸ¿,ýýŸýË—ö ¯ü_þÃ×?ùçoûßþõë/þÅöøý¿ü–aÚ_þÍoÿ;üòë¿a½¼ü‡l3Ö§­¹8ÿø_¾þã‘ÜùüÇõ¿ù§_Å?ÿò·ñË¿Ž;â/ÿôÿì?åeÎëðmuµ¾¸ûÇïÈVd?Ê$7…>ðv#òë×£n—ÍÛS–÷>{Ö•#,¼·ÏãÐYGXlyoÎDZ°eQå½ýõ0ê…±öK‚ëíó@Õ—“ùáëçCı”%…÷¶ö0øÃ8÷Kïí¯‡QÕâÝ _ïé¿þöÿxÝ¿Ë endstream endobj 89 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 90 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 595.28000 841.89000] /BleedBox [0.00000 0.00000 595.28000 841.89000] /CropBox [0 0 595.28000 841.89000] /TrimBox [0.00000 0.00000 595.28000 841.89000] /ArtBox [0.00000 0.00000 595.28000 841.89000] /Rotate 0 /Contents 88 0 R /Group 89 0 R >> endobj 91 0 obj << /Type /XObject /Subtype /Image /Width 512 /Height 640 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 92 0 R /Filter /DCTDecode >> stream ÿØÿàJFIFHHÿâXICC_PROFILEHappl scnrRGB XYZ ÓacspAPPLapplöÖÓ-appl rXYZgXYZbXYZ0wtptDchadX,rTRC„gTRC„bTRC„descØncprt”Adscm”þXYZ tK>ËXYZ Zs¬¦&XYZ (W¸3XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurv3mluc enUS$žesES,LdaDK4ÚdeDE,˜fiFI(ÄfrFU<ÂitIT,rnlNL$noNO xptBR(JsvSE*ìjaJPkoKR2zhTW2zhCNÄKameran RGB-profiiliRGB-profil för Kamera0«0á0é RGB 0×0í0Õ0¡0¤0ëexOMvøj_ RGB ‚r_icÏðPerfil RGB para CámaraRGB-kameraprofilRGB-Profil für Kamerasvøg: RGB cÏðe‡NöRGB-beskrivelse til KameraRGB-profiel CameraÎtºT·| RGB Õ¸\Ó Ç|Perfil RGB de CâmeraProfilo RGB FotocameraCamera RGB ProfileProfil RVB de l appareil-phototextCopyright 2003 Apple Computer Inc., all rights reserved.descCamera RGB ProfileCamera RGB Profileÿá~ExifMM* †Œš¢(1ª2¸<̇iÜCanonCanon EOS 30DHHQuickTime 7.42008:02:03 22:54:07Mac OS X 10.5.1‚š‚ˆ"ˆ' 02202‘’ F’N’ V’’ ’ ^ 0100   €¢f¢n¢¤¤¤¤È 2007:11:15 17:56:022007:11:15 17:56:02:W€;€;ÿá¡http://ns.adobe.com/xap/1.0/ 720516805 EF28-135mm f/3.5-5.6 IS USM unknown 65535 Firmware 1.0.4 224 0/1 ÿÛC      ÿÛC  ÿÀ€"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ü2³Ð·Æ†íÌfÒ7€ôÏ¥i§…´Ö`&×,áv똉_Àæ¨Ç|§\­Á&f)å‚s€:óO,g`nRI9áC6?1@ƃìŠú ”CñŒùÒÃᨦÿSunᘠ™_D(c—C¶2®CN×2–ob„`c×5 vzZɸGÓ¹4fÓª&ÏÚ­§ÌÊÀáÖ¤¹ð´ÎÌ—6ÐÇŽV#>Æ“MÕ´M6ç7^Ó5ê~Ñ<±ÿè ÖÄŸ¼84¯³Ûø ÂI&I34×.ø?UÇÍhz4öï/¬íŠ» I À V”:e…ŽÖ‚þ}‡)aŸOcY6ØùD\›ŒŒÊ ¯°Uƒy§Fa\9C@-´Xîct†é ÉûÇÞ Ô5Q¥h÷zD,ò‡Úû€­Î@'¯ö–æ©xU;°üµ«^Cu|­` F‹Ž?ÜÐÍ'O†úÆãΖhŒHe]‰¿{ƒØæ¯èº}´–>eóJ²L£*ÊœsƒÞ³ôûˆíì&.À3©@zŽEh[ëöÐÚ¢IÉEù3@·…4ï8=ޱl¬„6§>žµv÷ÃúN­~¬ÚÆž àŸþ½gÂ]n$_+n Á>X«CÄŒ@y"$wД_ l®„³^jð²ùXÄ7©öí3Á6vLlµˆ&ƒa³„ÁãÎÄV¶ë˜.9äŒÓÏ–Ë嶸^¸œŠÚµ°†ÚM—:µ»wQ³Ÿoð¬ý HMVÖò½ŽÕ$˜áœedäûäqYcÆèòîy%*GP¼Õ¡¨Åe§;Ý…çÂåsŸ—?Ê€o†]Ï ²Ô š8ÎqTüÍQÔ>\iº•…­Õݺðû]”ü»FyïÚ­ÅâˆtýÆÒSáÎÕê+^½msS{‚Îê»pÏ’@^@ÐAoðÙìRSu=´û× DOòûSM‹áßÚŠ˜®â‚=Ûʬ¦¢O™5̨ä6@©eÖ-.\´×9`8$qé@ZGäÓÞQ¦ê:R<äÎøÛƒÓ¯"®YèÚ†‘+<š–‘8aSÍÈN{\ŽnG)X®8nOù4šœ¶²iÇbÑÃ7ÓÚ€;K©õe$²›œ’’’~\Uô†êx€ŠÝ7:ä4¿Zç?gà¥ø“hŸ´F£ã[?ÍË+øfÖ Ûè¤Ï“qò2›qÆGËŽ¦¾ƒ—óÝ+xkâ—Ç!I¾×àk7'׈p(ÈeÒ5YôéSNKs8M±³LÍØž+?ÅV7Ñiv©«BD&Vt%F™"ºÚUðo†ôh%ebêx<Û' ªøZ=.ÿO³xãF¸»25Ë)3¤f2gm 7cÔæ„Z]ÍÂ<‹*Œ„rœ¾=»ö®·ãßìùñ öw¶ðMÏÆ­#HÓlj–âïMXµK]Eçòp²‰–ÝÉŒ¯˜¸ Œ’Î rr–3‡B޲g Ÿâî½M¦iI>£ö›,p–̇Ýè1ß5ÔøxÛiÖ¦Ê2‹;C#6ã““Ž:þ£âOÙgâ¯~hÿuêx#ÄkéÚÍÄ­­È“ˆˆ"Rë¼:I¸ƒã½SC)þ¶IOG%ÙÏÕ”øf€:}ntðÖƒ'ü#Bp¤ ¹Üì ê;“Þ™áͤ™¼GBQ¶+°!œÉÚzsšoÂï|Jø›)† üYâE–àÛùÚ6‡q¨F²ç ±ªÀõRxï^‰âÏÙ£ãÏÂëWÔügðâ……´lò]\øZ÷ì¶ê¼–HÕÄcÜŠáçÖtïB¾zy¢68G†Cޏnzäüsg¦¥¬M£ÏkÂÛ )Œ¶zž+®øoâ|c½>ü;Ô"°¬ãÌðµô°2Äfƒ½aø;Çïñ )„¼ ©2Ž4ý2k°22îÀàçŽ9ès@¦©®éÚƒÁ ï§Ü[\ Ê’p§ #¦áú­ã ßĺÂ'„ãYdÚÒÜ΀1…OoZôYþN¨·ž øSâÈbb14ž¿U•º`·“‚zb°|wâ­+Á7‚ÛRÐ5òO™¢º°šÒlz”+mí» ?Oñ”‡T´*ˆ >}zÓð·Žc¼%u#oeövÈ,ø IäcùÕÛOéÚµ·ÚWEI ˆÜœç¦FzOáYúÜZÉÛPÐŠÍ aØ ×RAÎqŽôßø›OÔ5ˆ Ò¤óQÂdžÿØ}2êæÑäºÊ€6à¾ã­r6> ð}³šEöå#[æ`OКߓâ~—t€F’ÆG@dŠ–öÉÖÕöä0Aý)²é¢Ý•÷ÎrqÍ4øÏFÕyïu»…%Yp@ö«ŸÚÚLÃå’f# Êäþ4…$k^\lÉ?,ô­_¤¶šñm=Ùƒ… ”ãü*=#Ä:¯,SÃ"Œnܽ}êÂxËI¶¿vÏ!—ï»KúP|LÆ'I]™×®áÎ>”H¥-Ù‘ ôé‘Voµ» ZïÌ–úX˜.R0vCëHSO’ ü3üjÃ4’mÝɺC"í]ª¤à7¡ÅU¹K­:i.·F0ÜŸÌb·Ê)á?dÔ­1Óæ 1Yz—‡ï5•xÚòÊ4~ ‰:ãÐãŒÐM7Q—QðÞ§:ƾROµÀäýÜŽ{éþ1i-B¸+El°4cîœa‹~u_á÷…c±ÔáÓ¯cŠâÎâs=Éó·&ÕLa¦qÅo|j°þÓð”Z†åýž,Jž[,ðóìVJÄÍÇÖ§·‚æÒ249éœqÿë«Zt"ëÃz­ô€‡°hNAóiÏÓ¦lUí·9sÆzÐ ÌðK#Ë‚[’§¿Òž59WË‚öŒ6IükôÏþ Ûÿ‚S|2ÿ‚•ø¯âJþÒ’x¤[xV;O±&©µŽö•C7˜ËËu¯\ÿ‚¦Á>~Éßµ÷ìåá߃7ž5½ð×Ä-itïZ]êuz!k˜‘^ÞRˆì½yê9€?fpÊw•ØÏZ®5$¶“ä–0ØÆ +úný¡¿àÜoØ›öOø⟈_o>%é¾𤺎¡yÿ MÜ’Gÿ F‡298UP b@¯É½oâÿìkâ}Lh_ ¿i™ôñ;GmæøæÎÝÂŒ²4Å‘·ò1$t8Ía¨|T²Ÿæ?hO»±Ü+‚¼;sŽhù‹cpŒ8úWOã Ðm¼¶măÈù1ƒ_­´wüoàïÁŽ?´+­cÇcLñ ÛÙëŽuBÓ+-Ћä8ýÙ W¦ÍšóOø$ÿüŸá¿üö¢ý¢< ñ^ñ®“¥ü$ÖVÛH›J½Ž9îcþÔÔ-öÜ3£ÌVQ À–sœšüÉÒu ÐÎÒQÁ=TJ’ÆÝ.lîÙCUf_@>•ýüDÿƒG>xKÁúî­ÄÏŒ©iתÒ^ÙHª«Û•Î>c–ã¯&¿ümû1éš?훢|.ð_ˆo$ÓµícLÑZöà#½“ÞÝI“ F‡<Œ–Æx4â‹deWÏ4—mâ{õÅ~ÀÁ\àÝoÿÁ<ÿbýkâ_þ!xïÄ:ž—ªéº|Vš„VQÚ²\ÝG—ò WfË+dcyÏå&Ÿ A%¶æg$ñÖ€9eˆ‘ÎãŸÆ§ûy[Ž@œö­fÓcxò™ùçóÅzŸìoû7AûW~Ó~ ø©j·5·‰ïZÎK¸aY^ÝVÖæ|ª?ÊNmÀÁÏ {â€<:kEœbU ‡Ôg&–×D€\Ä.­Ô$ƒƒ° ú~·á Õôx.nJ«LŒÛð0̼gýÚúÛþ×ÿèÑ¿à§ßµæ£ðËÇ>$Ôü)a¦xNóÄ+aiÌï$w‘™Y5˜žàŽhãû>7x¢g ÷q÷³ü«CJš8îC@€GÊ5úÝû{ÿÁ®6¿±¿ì™ñâO‡>*j,›Âú\Z~š48m¤ºœ>%IJç1WnÂŒ¿6âÙ~·ýàØٯş³‡‚¼Iã×ñ׈µ_h¶:¤æ÷Xt·ŽId‘VÞ-±•9 +4üøÙ\¤ˆ¿a‚g¹ÏœÄ¨zã >S‚<Ö›jàD^T‘y䲑üëú©ðüËölð†`Òü)àylì¡\GßHqîI幯õø'ÃËŸø8~ ÞizŒ_ ¦øbÞ$†Å.pÏz²fóq»0ùsŽE~"¾¹\¬Š=~n Iiâ+9ÛdW¹NJ¬±ø~¥SSÁÿg{…4-a ’/#U¯;ý©¿à…¿4o€>5Ö|3a¬Úêº>…y}g'*Í,ɸäd Šþl%×-Ãa™r;ž*9u(. "¯g_»‘Ó­~}øCâ—Š~ZKoð߯>+Ðmå”Ü4:n¿}cýæòíçEÜz“Œ“É5³7ícñ†âÚ[añwâ”K…eÆz£«¯ud’áÑèC)_®—_ði €‘Ößâ’¾2l¤\~¦³õ?ø4„¥»+â„Be”=»í8Áã4ù%ðã÷Ä_ÙãN¸µýŸ¾ xÃÁ^H%ž=Qû•Â…ËBÇåUÎ0£Šô]þ …ûJh3èÿþ&A$§÷®šÄ!æÇüô?fËÿÀ‰¯¡ÿ`ø!§ÿ ðŒõÿxÞËÃðx3Å7~žßP¤–Y­ð@P`!Ï­{mÇü]ñPýƒâ_†_ÞŽEþ”ù»ñkö³ø±ñ÷ÇžñOÅïxƒÄ:÷ÃÙVÝ_Io#i%IƒB©Gþ²8ߎ7 8êsâŸø*ßí3âÝZÞ÷Yø¥=ÝÅ¤Âæ)o¼5£]KÊCG*¸´F ŽÏ*;p}_öðÿ‚,xÃþ õ«|7°ñ牴ýfoŠž ‹Ã:AÓ—!.åtTÆÕùÁÈÏðzW¬]ÿÁ«ß´,!Ú×Zð$ûI MýV€</ø.ßí›-í®¹ñÊÿT·½†KwKÏ io„u*À2Ƥd1æ¹O؇þ •ñ·þ ÃðÂ÷Â?²Þµ éZþ Ú¬ð^xvBG‘P±™äWÆÔQ·œb¾‚ÕàÚÚgN¼¹†Ò×Ãw_d·-"êa‘Nì¬lTîq´’¸ÈçšðÿÙ{þ ñÃöÙð~·®þÍZn—®é^ÕfÑ/¤¹¿%ÜXó#Tt%°3óp3ÀÏZö+oø9»ö°0.¥ðÞõ:…¹ð`Áüê¾eý¼o߉ðSOh:ßí5aà˜5 YO§[ÍáÝ!ôãs ®Ž~ѺG.ÊѸ#n[®xÕý ?àœ??e_Úhßô˜tÍNúÅõ{dŸÎi`PI|€§#·ã^)§ß «D¸µRñÈÑ Œç@½¾´ÚµÞ›¦À¦<4r0ÜcG߯5CR»¾¹I'Ô™æA“Ž€ñƒéœWI¢hfîãT{ÑܬŠUÇ;FÑÐzòj·‰ôØm¬›ùP¤VÁiMÇÞ€*x&;x|.Ó\F 2¶NÐsZ†ÚÑçŠ;˜¡mç8(:b³<9> ñÈÜ]·Á_„šÇíñJ?x «‹èì&¿"ݧ) EC«Î2ãž‚€0ãÐ4É¥`¶Vù’åðŽšý-!#ã¥zlj?cÿøG\Òô½IîÍö´3eödÛîrq˜ÔdÉõ\×FŸðM߉VQ«=¼‘FËÀ“K¹CשȠ—Âzs(lÏqâªË iË0TWVNOï8ö¯t׿`ÿxcMŸP×'±†ÒÕ7Hò[ΛG¯+\Þû-xÅÖï}á‹"ö(ØÆdߎ ¼b€<¾çB¶ó WJŽ~f? iðÕ³,€µÚmbcÏø×¯Ïûxþ8¼½ոɽ)œö9JÄ€¾'²ÔÁâÓ^ì©`‰z§ zdP›¿… „o7±ŒdŸ3§æ)ÂBeÞoïÀ#™NGå^•ÿ ãã©Ó0è°Jê.Ðä­S»ø'ã ÜË«èf—ææ-¾ßÅ@¶‡¡ÉiáËè-î.. Óya\W+Èí]ï´–¶ø?o…•í`Œ°ÏŒgë\·‰Uøn‘Ùø®Ê].kÈþÛn]‘ÌŠPT©#’{×eâÇ:‡Ás$[¤Íœg{uÎyãÖ€< Fù>ø¤šÍºô &I­MŒÑ¢¨8#>Ý++HˆÂ!ªœÎÐŽzðkVÛ›EËs·…Í}§ÿZÿ‚²^Á'ü]âíRãÂpøÃIñ|¶ö÷vŸmû$ð¬QŒ<,T©rF6¹U#¸Ç?£_´ïü“àçí—&—ブͿ‰¼ á‹íOPÓµ-9’â ŭʬ Çr@ŠLyLÅIÆE|ÿÿ‚ax[þ •ãO‰Þø¯¨iÑxVÊÊÿOžÒfÒwf‡]0§Œ“šöoø+ÿü°UïÀ{º¯‰e¹ø•âxü7®Ïutì¶É,‘F“"!€eùpãƒê=þ …ÿÍðüöñ·€ÿgKrÇGKçP:Ž—%œÚÄM}tÌ*Ѫ²ôÆX.N† \±ÜfTy$&GoV''õ&¿qÿà±ð@¯„?ðOŸø$/‰~!xIõOâ'…gÒ#]Q¯$ŠÖãο‚ÞOô@v"”•¾\`E~Ì¢+™Ó'JñŒžHV#ŸÊ€!`ÛGîÓñ4Ñ*HŒ'Œt©„À ä`Ò4ʇæÅE_…QêiËoóå"Lž¼âž&E#$c5"̲q@ PÛ—|iÇãšî?g‰r|øÛá?iËtn¼/®Xk%¬¥$smr’ |ÑùÉÉÁßÏ×®¬zñ­oÀ²êv±°Éšâ(¸ô.ý AzÏü“áOÜA'…¼-â/ؼèÓ<–Kw<óÎט$ãH¯Nø³ÿáý˜ÿl/كĞñ/Šu]\»€[ZÚë\š}ÍÙ•äƒp*ê#,]A;AÁâ¼_þ gÿë|ýªÿa?„ß¾%ë~/§Œ4(õ+ûKiÒ(ŒND|dŠ÷ŸðnOìýð«ölñþ±à;Iâ/Bº¼Óå—Ur‰$øgÄvRïÿLÑ·ÉmÓ†RIÉ#œÿ*ü¶ÿ‚OÿÁ ´oÛà÷>(~к¦¡«é7ÑÝé³é–÷mcs¤,2”FŽE:1Aº3Ï äí¯¼µ_ø7ÃàðêÙxoGÕ­˜¶YµI¥1}à›°ÄûЖÁcÿiO‚Þø/mñn_íŸCawoŒ¾¸ˆ·Úçp‘ʾc*!`Ägm~gÁ²ŸðP €ÿ·—ö•ñ~ƒ¢é_ô›ícRÔÊÄ÷ú´¦xDl€Ò}¶õÊä(N}þ(ýƒ§ýþøgIøYâjïÁž&¼K‹½>àªÀ·QL›*Œ/#e±ÁÍ|Ãÿü~ÆÞýµ?à¡6^ø·.£–Þկɳ›ÊÉ Zm½?zÙü(úRø‘ñûá§Åµ¾‘â‹{Ë]fÁ–-AbÛ¸ ¼tÍ~X|(ýŸ>þÌðXëÿ´¡ j>­à½cPkÿ[Dlìuïl…ŒŽÌ»UÆëŽy Óú#kÿ•ðçƒ|‘áøÞÆÛOŠ_²$2×i*¤²Ø>§šüÇÿ‚|~È7¿ðP¯Û»â^ûWø‡Ä¥‡‚|9b°D"E(ŸP»]Œ€ ›$aެšú#þ5ý±>üdÿ‚N|BÒ>xóÂÞ%×âÕ4;˜,l/VY¤1êví!Àþ ’Ý0 ;w„Ùh—R[²æ¥•wtmªÌãÖ¿z¿à¿?ðKŸ…?²Oü³Ç>0øG¤ÞXjÚ=öÝ;ÆÑK¨Á'‚®ÃÚ¿§ÓÚÿE¹Š…Ù$ˆ'iÈ+†Ç8çœsŽ”Ù~Õ?³ýŸìÓñóQðn‹âZÛéÚf .‘9ÝÙ¥ÃC4kÂI1^:©CÞ½/þ «eÿ,øR&a7ˆ6©':øù?ñoˆž/¼ø±ñWUñ&±y©jwZŠZDn55.dö±@¢E·ýÐ#*»y*ª[-šì?cs¬Þ~Ú_ À¥†¥ÿ E·Ñ°V'l™Á#wZò_ØËkáûX%’9† ‘4€ƒéÍ~ƒÁ¸?µ'ߨëöûñ7‰ÿiÏé^ Ð.ü s¦Á¨¿——-y ‚ßß(¬ÀwúWà .µª³“¨^œgþ>eë|×Ý?ðnÿì9àOÛÃöÎñVƒûC[êwÚ&…á6Õa·³½{B÷ïÊÝ9e ÊxÉÉè(ö·ö‹ÿ‚—~Ï_þ Zhß>*ø/ÅW~/t6:uú\ÍyI‰[Ë\©´†Èàðz× ~ÏŸ·ÏÁ=7àÖ‡cyñGÀÖ·z”vWvOªD—’ bhs¸0Ü£häb¾3ÿ‚ŒÿÁ þ~Íß²¿‰þ"~ÊžñD<К)íb·Ö_7eÙa9‚ÁXa8\d _؇þ Óøñöjøeãÿ‹?ð˜?Ä}OK²ÖoõE»X®-µ ,Œbܬф|¿1#“Ö€?HõÏÚ³áç†í´)µïiV–~#™­´ë¹Y’ÚyTdÆe`Ð1í_ xÛâÇ„4oø8GÃÚý®¯§Þ ï /…dž9PÅks.ø£Hµ”Ïoc¨êÉm”)’‹‰2¤‚=}kòŸãüÖ/ ÿÁY<1û7x3Ä~!Ñ>øŸL‹X³Ô­“t¶(¨å  0ËFvíÀQƒÔPï„ßü)¦ß=÷‰ü= ÔXDú”!£' #wŽ•ÎþÑ?¼)¢|ñm׊uiÒè×qüבsºnù‹d\×çl?ðkwÂÄ“Ïáïˆ>>´“S‰VK©-m.î¤u9-$Ò£O,IëÍs_àÜGÁ> ñ³ð‡ã·ˆ™4ø%ÔRÏZÒâš"aˆ¶ÜǹÚFWÈ °¿à‹òøsÃß°W†t_6Ÿcm£ÞÞ@,cu­KK¿i9_½ÀÆ1Ò¾­>+ÒRÕä›RÓUbÉv7q¸ëŸ›µ~Á(¿àšïü'ös~+|Uñ€í俹Ót­?Fi-®rû${‚’/ñ† ¼œsžp>„Ö?àÚ¯húµ¦ŸðÇãÁ ¦iµ=:YoÙ‰;²D»]@Ç, 1<šúþ â ØÁLeís\mÌÞ»¸q|’£¾›öƒäüÄ‘XH3ž£•ã?ðuíÅeð›öBÒþ xZý¤ñ'Å‹•›PKK—C‰k"¼åÚ0~Yäò­Â–]ÁÜä…"¾6ÿ‚‚Á>ü}ûüwøwàOÚã…Â?Õ¤þ.½ÓÚÓA·…3+ß—,0ep^:ŸÎoséGâîµiá/j^3ðþw.Ÿ£kÚ”Ó»ßið‰”M#¼p±Ȩ¶Þr@='þ Ÿû_Á@¿j(|3¨É-Ÿ†´; ¿x§T‘ö>Ý ¶0iŠD£ ãÍ#îŠþÿàðÿÿcíkAø{k•µ¯Š/.žÑ%2¼&uI2Iç’FxÓùÿÿèÿ‚üj±ý ø§áˆZ?ƒ¼OãýûQ<9u§\$ëhC=½½ÔÞbáš3¼£!TgÆÓŒžö7ÿ‚{~ÒðQ¯ê>4ø ãÛoiÚ.¥sáË—³×¯tiï® m³y«làH¸çvã9 Ñ`(Þ'åç½|ÿ„ð–âÚwöX>2+Ú?‹Åõ™“;Þt1© É/ž9¯Ÿüÿîÿ‚€þÎúv™¤øOöƒÒõ=%Lv15Þ§,Él¯±“4o! xóYØ’sÓòÏü·á'íû?|Dð•ûQë¯ãxÖìÚxræßU’éã¸F‹ U6;K$Eqƒ‘׌Ðô6а½l¾s•>µbK=íò+ýÒ:C_Œþÿ‚IþߺZE<ÿ´Æ¢åšM:o¼DÎ`Ü@èN{~5ÖkÿðNÛÊkó~1é:¦ÐYøšæ"w!:° qÿ‚ü.Ò~xCãµ—ƒ.uÛ›MKâ-Ö¥7öŸ–WR¨3%¸N ·<òIë_xE<©ë_Ïì{ñCöÑø©cã-þ Ù#è£Kñ[ø’â&ƒÈ[øÆÑÉ%Ärlv1•%TîP>è!ëí?†_?ਾKýWÅ_þkº†±Y4û׉ítοñê#·FŽA‘–s 8è(¹ÿ‚ÿx6ÃÅ¿díieˆØü]°º‡`ÊÈÈB}3‚qØýš-—“q—aú×óßÿ?oÚÏáÅÿ†—ÿ·Ïö߈/u›k?]épÉc. 'áHcUAç™<°ÅÕASÅA¯²<'©ÁUüKáË ½xüÓVâe”©Ó³~ÿ êf؇Ô.ìæ€?P~Ãä-Ã3W”qòœ×çü¹à<ðcãU¦¢Èò]üNÔoÁí*%ÉaŽi4ÿÁIüàË‹msÃ? ý¨þ/ü“ÁÞÒuøüâkQáÉ<Ïí+sfRK¶MÄ!Wxó'² ¯Ç?Yù¾°r@Í”#öÍhà·ÚÊ/˜Ò¨ŠA°}ÐP“øt¬?ÝZ]é—|eóD_¹L}ù1Ç>ƒùVÍÅùÓ¼Y¬#¦YìÁG2mE!TGRNî>†¹¯im£G›˜ÞD9uèzã#ü(?†ê?á …‡ÌFÇä+ô?þ t·Šçþ Çx—щ ¸øs«BC ¬Ÿé–Å—þVýkóßáìA| Íÿ-›?¯«à‹ÿ·ƒ¿àŸ?·Høƒñ²Ó^¼Ñ?áÔ´‚šE§Ú®<Ùä·hÎÌçoî_-ÛZý]ÿ‚žiV~ÿ‚ÕþƧé¼qêr[‚Ž(ŽʨpÎ@ü+ôöïH¶¹R³ÛÀÜ‘ÌJ¥~þÑŸðW߆µŸü“özø“£Úx›Ãþ ø{«*ê«Ùy3¢¼wÒˆ$ /là“Ž+ôõ¿à¼²Äþ*IÓ>(ÙßÜM+#Ikaq,08ll’ER¨Ùãç‘@Éû\|2µñoìÑãí6-6Úiot¸}2IŒãðßü+àíçÁ¯…/¤üD²‚÷Kø†g×´óudö+¨_ìóÛ凕Lx¹¯®~+þÞß üOð_ZþÊñ…”÷Ž—:ÛÚ(hîfm‡åU#!¹ï_0|ýºþü<ýŽ­íÞ/‹Ø/Ù#œÁ.6‡ÆyòkéË?ø*÷ìüžÓµoâ§„´È¯-EÔ©qz£ìkœLzFPäzb¼Á_´¿€¼Iÿ]ÕoôßxzëF—욢_!†Y6ÂÎóµ€B²qÎhé«ÏÙ+áÂÿ¼$å±ÀÓ‘sëÐW¿ðpOìuà?ÿÁ6|W®ü(ðf‹¢xƒL¹‚X.¬mLFOËô'ú5áh¾&6×~Õô­BÚì*K{¤H;àƒÈ¯š¿à²þ<ÐtØÓP‡_»³’[ÛÈ’Ú"»LË–8PsÀGCŠütÿ‚å| ð‰ÿ³×‡þhú?Û>G}z°±ÝÎïo‰û\6~µòÿÄM'ìÿ š Y¢kHYbö }Fkô;þXÑm4+¯Ù?Ä6Mionþ¾Óv«†pV’§|•QsêÃÖ¿=ükªÏ' ®&òÌ÷p˜ÈëO_®(ç¿Å¿ÂzÓ6rV¾ß9æ®Û@>È­¤f¢Ò¿‚u—Œ|É|÷Ï5vÉÓ@È$Šýƒÿƒ4ÇüdGÆ•'ô«/ä?ƾàÿƒŽ/“Ã_ ¼ ­=¤wm ¶¥©ÆÛwHj‘\ü‹Ô¶!8Ç9Æ+àßø3ÓXJý§>-%ÌŠ†]€¤à¸Sƒ\`~uô—üÉñæMoÃÿü)à;+íSSµ¿ÔmäHW ¨Kj<­1 i¤GÝ…Î(×àåoÙ|Bÿƒ¼aâ]C}§jãÃWðIïŽê95+62ž‡9È=«ùo’?Q¹D·Ú$#ï|ÇŸë_Óü£Â>ðüQ¬i?ô¤Ðü)eoᥲӔ2}?´í7DUþee}À©èA¯æ…® ÷l óÇ4ΜÑä¢ïE8ÝŽ*¿UÝ*ë\»Á±ÔÎî +Üíˆ.ÑúÐîPOAÅJ–ÁÎ0HäŒTñ7›+)U,ç9<~´òD«ˆÐ+ޤœæ€ãJ{hÕåA‚2p>ï±­/ ƧWÓ†[p»ˆðxÿXµJÂñìæ,B9ÇÉ \V—…ƒlÙ ’n£ÎzœPõÝÿ"ÒWGÿ‚>þÏQG,Óy¾µ¸-+n*dË•Š7`À úö¤ýŸün"Míý…y…õýËWÿÁ ïæÔ࿳»Þ"Æñø*Ê% ¸e6©ù€ä€§§ô/Ç[k‹ß‚ž0‡K_2æmíc_V16(å/ø!,wzGìk&™©Åq vº¬—6‹!'Ã)þé`øüE}ªÃ 1Å|±ÿ¨ð­Þû2x*ýIaªxub¸|Ÿ’ê©=,œ»_R±Éžœšü´ÿƒ›?eÏ~×_ |àÿ‚ñI¨xŽö÷u–œ®‰öæIãvEg!CíŒ+çø7«þùû@þÄ¿ðP¸¼mûGø oøZ êÚwÛeÔm§/4íhcQNXgÉ“ÔqלWéoü"[_ü]ø/¯_K ?a×^,ÌHBÇœŸá8ÏÌxú×ÔÊ’[ƒoÛqÓ­ZyVEEãwL•ùÑÿ’ñ¹Öo¿ÚcE»¶·†mÏFµ†Dy¢z“r}€;~5ú5ç—Ì@;ÈyÚ0:òzw¯ÍÏø$œð×_´‰m丸šëÇgÂòLý$_ìÈoâtÚ Î2yÉ=±@ßü­¥¦±ÿ[øÏÑyÂ+{ÀÏB—°¸?\þü¿éð × ë;ŒÀQŸðq¤¹ÿ‚2|nÝÇüK­±ïþ“/V ‹›’ØÇžüú|æ€1¬&Ûw0‘yÝ@ëœ+Ö?àŸ—‡o¯„·ºüÆÖÒA$Ž7-D3óò‚zãµy:Íö]Zä(8°8êI5ìðO[ųÿ‚…|´¸>+µbdäÅ0àzsüèÉ~Ô—z–§õõ„`‡]¼œàPâ'ü9 òëÿ³Â¤aíµ¦mÊ y«Î{Œ±ýkñ÷áǃ/¼yñgÃz,zl·“k½†Ÿ±Î7-ì Ñë&èüܨÎT>xÍ}×ÿþÝ–¿µ—íóªéš%ì3xàÜ3øvÆQ‡Šâó!µ+‘Œ†Ãª[/}Ñ̽Å~ŸÁ ÿàŽ¾ý~x3â‡Æ/ $ÿõÍ5¯n'¼s ðÌW$È––ÑdÇ©$o2üÎAçúšh±ðè´†$ ²ò*€#ÛÜØ cñŸüÖ;Ù—ÆVö–ÐÚ¤:ԆȆ$©Ýõ$äûšûrQòÊ%Ô€=~S_ÿÁKÛ|ømpª >>¾QŽ6®?A€>Êx¼Èý9$gé_ÿÁh|+¦ë?¿e›½a7\iÿ – "ç*$ò0HqŽê+ïwŒªüݾÿ‚ÌÂÃÄ¿³d–ê®ßð±íQ²3ÁÁ#Û§ZûråWí’“Ã`?:mΛ§jð\©e“Œd‚Ožg‘‡ð¹ó§À§ÍzçŠøþS éZƒ¿h|1¦G§øZ7ïrp'—b†sëÐ ŸJûÀÀFÎ@5|Yÿb´l?´,£Í?®ä”‚H,ËÎ+íØÊ¤—Ðç‡üïÁÖ¾%Ÿö]¸¿„M&“ñsM¹ƒ£HvÿÕú :y·29lôéÍ|+ÿσí~øØò~(iͽÈáΞ ÛõÇzû©¤ÿJr¸äÐýYÎpwv¯€àƒŸ -¾é¿æÒ¬µ¶«ñòáXÊ]‹±c' -Èúãµ~€;ãËr2 Å|©ÿ±ÒDð÷Åá-™¼a4Ä09ä¹ ÿ‚Ÿü=Ó<]ÿøsq¯Û Å·Ãß[D |¥d³Üù‰=±_Îo€2ÞÓÇQö(OþBZþ—à¢%,ÿlOÏø‰Á.¤XÊ_AÉ&¿š?‡ä Øçµ„<ÿÛ%  ~=»ŽÏÇóÁå4’ʈ‡¿ÊѧOB0y£Æ:h¹ðµÊZé2A,ÛNNµCñDÊ~,\[Úy¾lko *¼€b^‡ð5»9I'’Hü¹Ê1$ç±íÍTøo0FLó™}{f¾íÿƒr|# øïþ £áý?â¥k6¶µý²Oà–…NÆde±é“_ |)Œ·ßx_’ãÿ€ ûÛþ ·›Éÿ‚¸x,( ÒiZâ(=ÿÑíô4ô¯üƒö"ðƒÿà»4[oèÑø/Ç·ºt>ŠÙRÊDD½2‡ŒpC±ˆ¶zì_Jý!ñ—ü[önñf¾oeøoe¦O.ÄÒ‰6Œ"sÜû ù·þ •àWÔ?àªÿ²WˆUJËoâUŽBæd "¨>ƒ÷¤þw¯Ô¸³sžû#ë@þÐßðJO„ ð[^ŸÂ^¹Òï´{ ‹›YmuÕ¥‘"%Ÿ1.7`û+äÿø&ïü«áÿí?û"é>-øõ'ˆnuÝOQ½Swì‘Ás4jXœö$×êïÅOù&~!8ÈuÁàÿÓ6¯ÿ‚[ªMûè³ÙÅ*%æ¥}>$e,Á§c¸ãž8 ÿˆz>Yxn{?Iâ½>âáJIu àÜÊßyYqƒ¸qÏ5ò“ÿŒðfÿlà÷‡®¼I§øx]µˆÞÊp—1\.0ZB0À–rØç$WíôP€†ó©ÆHË('>œw ð÷üÏðÓÁ¡çðw¾!Xßy›íÝ/ÊÇo–ÜÁcV 3È8ÆsÎkÀÿà°?ðM ?ÙöMÕ¾)|=ñw‰u«Ÿ „Y¬u9ã13eЉÓüköšw~Uó7ü/G‡]ý‡¼CgxmÅͺ®öÚ»·d>ƒ©À4ø9ÿŠý‹o?d[O×~%ñ®«ã+¿øjóV’£!‹DHÍ®ØmUÜùq·ž2R‹é^#â]QüGð‚ÎêÎÔEn¶ù,Í÷HÀÈ«î?ø9¯Y¶ºñÿìá¤åZòÃáÔ²Îʬ–IìÂ`žýÛ=y¯†u[…_€ºdz{Dmü.SÿM7·ëœÐ‰øjOø·þ+aÏ•eŸûøØçð­ -sb¼‘Ò°´YØx_]³¹i|íJÝ"€,d¨ebß1ì9«úw‹í"´e”p\çŠ÷ÿØ+öÕ¾ýƒüy®ø“EðÖ™â¤ÖlΛ-µÝíÅ“ZŸ¾—0On¬ñJ„¥Jœ7VÇÆïø*÷Ä/Ú³ãÏ€¼qñ©í5X¼âK-zÞÎÊTŒ]›[¨¥ft;àE’.€Œ²7΃·àŽ_´ìÓðŸãˆ®?à¤Þ¹ñ/†.,â})F‹&¦,ïò&Ù,Œ‡cZöø.wí™û~ÔÞ ð%ßìáðç‹l5§]võ<'6ŽntÓo"ªçh홣pxÍjÁA?à¾ÓÁ@?àšÿ¾ø›ÀW†µ/x‚ÏVŽîËUó!‚Õ"™Q`pÈ<³½¸F,̧Óò£í ’™NÆyM¸Î2ÄÿZûƒö´Ô¿c]cþ É [~Ë:ÿÅäøÍ¤Ëãé:î‰oqq4Ê—Mwr"òÕE¹- (e\ “Ÿ‹,`Žæ`B‰cÑÆ–€(ØJŸÞ{{ÓZñ€Ì2*Þ‘bˆ°‚Â8 »·}j¼vêªÆxÊÙfuσҀ2ä{ÈVSÎjÃÞÀQD,ç›w¯·µj5¿šTIî çÙ4Ÿ<áZ0Ã'1øP}µÜ,ijð9Ç­lhWŠ5(.e"N®ÛF8…E§h…—û@)^Ø úæ¬hÞ]­ì-*±Š)U˜ÏÊ'ŽôýÁ#ÿààÙ³áoìYð_á'üEâ[?øKÃ6z©ü#÷2[[\ÅÞ¾z©B¿)Ñê+韊Ÿð\ÿ‚ñxGY²ð#x‹[Öd³’(­ŽœÖÈ$‘@ï!0$Œñï_~Â?ðVø'çÃø'ᅦµf“g7‹ôYÙë‘Ià+«¦–ö4F1BD¿?ñ† äsÍwú¿üþ —áÏx¦„š~•¢ëZ¦yggpÞ¿ˆ4Ï ‹#BBØà^(×ì·ÿ ü#ý†ÿg-3À_´4ÚÝ÷‹¬î®ÎÚÎÑRÑmdrèdº'ba‹‚æé€r+êÁÁ|T– ©é¯{°V±Y†YsÆÆ$Ž5ø1û0ÿÁkµ?Ù/öLð×|ð{á7‰<[§ÝÉq©ø¿ÅúQÕn5Ki¿Ùž $rFíå‰K0)ãq¯ÒØÓþ ý>,xAaý´þø?á/ŠÒ$X4ÕtÝA@;¥ŠhaÌ’…a¸zЭÁQoïþÑþðµÇÁ‹«ÛÛ çÔ§–xZßÌeÀXÔy*rݱX:Güðéõ?E¶øMãœý¢+ ¯Î©§Ü²0œÈÊ8ʆ=À¯˜n_ø(wìUuû^|Öÿd=gN¶Ð4Å{ãÁc¤^G§ÜXîùU¡d á[çp ðG5é_µŸÇ¯ø%·í˪[ê–Ÿ4o‡º†‘tÑêWZW†®ôùõhFvƨðp†óž3ƒÉ ªµßø8gáåý»Yi>Ôo%‘žjö¨R<`8;¾ñ%~SÛ5ùÁû;ÿÁYµ_Ø×ã÷Å¿Ç$Zî¨|I²¿Õô»Ûå¶‹ÙÛÛ›¤!3º5s”Pwù{F7 zÄßÿÁ(¯¾êÞ ³ø‹q‰4øcžÛÆV>¸¸×w å¬ÿf+t¥›&V ¼à‘óü öÒý™?e‹ï?oÓiu¤êWp\øwW“Ãש`4EJG´a¢Òî d±\†€>îÿ‚ÁÁr>~ÙŸðK_‰Þø#®x–ÿÅZý¥½µ¬W^»ÓãÒhäv 2€‰€Ø$õä×ᦡª%†{wó4jeŸoB@Ë~x¯×/ø+ßü—ö/ý ?eߊ_?eß™üQ«hö·:/‹lü6öÖ77âåsj’•W–4É•€ŒîÛ» ãñßÄþ$°Ô4;èl®#Ìë2F íê/ó€:Ÿ .~ øæÛHÔu859õ]M×$0ÂcßlƒÎd±ÞcÆgî®*§ÂŸŠš§Á¿Ž¾ ño€´ùuÍgÃú;¡e§D¬_P•hvÙmä| ž»ÏÛ#âï„>'ø“á}÷€õ¸5 ‹…þÒõ©<¦ìú¥­¬±ÝÀÙCå‚G0®SàÄá§íCðÓÄzÝå°Ó4OYêÒ™v¬#ìÄ€ÏC@?íKðóOøQûMøßÃÞºK»-?SÊH’¬£t¶Ö÷2aÔG›s(ëÛ«ïø5kâï…¾~Ù¿n>'xƒJðý½×‚á‚)o®1Èÿo•¶‚{ãšü×ñ?Äè|{ãw\×µDº»Õ5 å3¾ÌÌp¶Lp€2=I'ô3þ •ý©>þΟµoÄ}Oöñσ<¦j^‚ÎÊçÄÛAs2ßJí4ß)`ŒŒG\@«ðR_ø)7€ô è>øW­i^+Õ¼u~°K>x“C¥Áó¤*~ûÚ«õ={WìSûSü.ÔfÏÙè¾:ð¤w:fŸ•ݬڤOmp¿}2Ù'#Ô_9ÁC?m?ÙCâïìSñ6ËágÆo€Kâ‹­%¡Ó/¬õk ®,î݇•"ˆØ1`A8Ö_üöýü#û|#ð7>'~ÏÚ׎´ŸCû]_ؽåÍ‚Ò;´‡vó‚Ä1$sé@¡1ü[ð­Ó‡Äþwl ©BI?÷Õ|7ûWþÐÞðOüàî«©ëÖfÏNÑ'Ó5;˜¤Ãbó—ò„Œ¹$r„N{´??e bíc_üºß¸…ûuÝ´á»ö$ƾ-ý§¼Ið#Yÿ‚¿|ðÍ…÷Á»‡> ðýðÕ`Žþ‚k„óAÛ@;·xÏ4ú]¥ülðmÝÜPiþ-ðÅÄ×)˜Ò=R22HÃò1ÍMãÏiV?u»STÓ`²uÃ<ïu¢¯”Üç8ï^%¢üý”õ'•<;¢ü”Ê‚E¼Öc!{6 ôª?fOÙÏÆ |An->C6c Öº¬Q˜]cf—c!€ b€<óþŸñÇÂÉû¶™¬ëúM¥ç‡õ«ñt·7±Æá$“ÌIv±iSר×gÿiÿ‚ƒé±/üÿÅÞ=ð¯¤ßø—U¶MÂK Äs­Æ£wû¸$¸ܑ†2¶ùP׿ì…ãŸØÓáŸì—mâÏø+w†|-©øŸZñ6«§éÿeÍ®˜m Ù¼ª[«˜À}Ìq“Šùþ ­ûCüøÁñ[F¶ý…¼7€¾ø?KxRÕ¬ÆçV»’PLâÖLÁQ" †<ä2ÊÿÁ6>é>?ý¹~Üüc—íÑ|Meªk×WÓ?úJ£»£LGúÂ÷^T¯»ƒóÏCý\xsÅÚgŠ#–__ØßÀ¯›kp’ÇŸ@ÊHü;Wá§ü\ýŽ´OÙ/EñŒkâ?Œ÷gþ{£—:MÌ’Ç,1D»¶¢EzϵrO<ÿOýŸ~Ú][øo@ñD/u{5ôó'Šoáin%fi$Ûª –bxf€>²¸»H¢y®äHá…KI#0 €rIí“_Á¼Y¤x‡Àß-<5{mu,>:¹º7Üò@èMî1S†èpk¾Ò¿à“¿ô¯ êºLÇÄ)SQ©,Þ&¼v‰ݲ™6Ê£ý Is_Á ÿf[?ŠÆ-GÇ7>*Ðu øÎëÂÖgGÖ'Ó¤šÒ ÁdÄFðù$/jýcXÝ W89èzWÿð[=rÏÃzGÀ{MÒ)bø“c"3bAï·¸àžÙ¯nOø'ÿ„ŸIkOøJ~.˜‹ËxëPw$r2ÆLþ+à_ø-÷ì¹£üá¡áÝ[ÇÞ!—Æž&O^jkê'NŠR¥ï¥'ËÙ€H\@â€?Yî!š[¿2>I$°ÙŸ38Á¶*XóÄ~ìë_xþ ¨|:¼QáŸÚkö…l-³°}^ `¶UQò‚ñ`Ç$îcװ⻟‰¿²—Å­7ÀwÐ|øëãµ9„MZÞÕË/p’¬YGÆpqÖ€8ø$ZAiãÚNÅ ›»ˆó™wtÆ1Œq×5ö]‘žNx¿ÿà‰ÿõÿŒú—Ç+¯üSøà]sBÖÿ±în¬b‚C{/™$$ŸiŽMàI¿䜚ýÒ¿dŸiúaŠëãÿÅˡOõÓ.˜J·€¶ 9ÆGÖ€>dÿƒˆ/F™ðKà¥ÉŠ9Ì?tf(ýyɹϲ¸žÁrx¯¿ÐåÃŽCA@é_’ßð_O€šß¯†Ÿ .þ üUñçíÓ»?)=úýKð£þ }ñÀ&o«~×.MŽ4[X´¤±H€ùb_6Íæ* –”±Ç,hì‰â2DÔZùãþ ÿaý›cñǰÄþ%bwl0c[û+øÇäß|aø“z¬66ö¶PÃܤcŸqŠùoö ±ñ/ÆŸüKÒ|®ëoê£NmF"·-xâGÁ0È608É'žp=hoþ Mz¶?¶7„äbŠ€üJÞacÀOÛ¡<×ómðñü"6%¿çÂýµû×ÿ °ñOÂ?Ú“Ã1|Nñ¦©ã†»ðOˆ\JÚT6­gØÙX…ˆ|À3/^qô¯Á‡DXc¯Ø ?õÉh?Å߯ n9ådóm­Óxä."~9?•gøÀ%…Z9C„‘‡’yâ®xžt‡ãˆãyaµ··s·ø[Ê\ƒêz~uKň.¹Úq›ÑÉÿr¾‡ÿ‚bø¿âo€à¢?uØãFÓüOñ9¯“KÒ/äò­5kSö„–Oà% GÌç4û›ÿ"Ó'¹ÿ‚‡~Íwo¸«‘Îp þ@×è(̳¾:î5ø'ûmþÙßµÃo¿ |qûwü8ÓþÛøsQ/¥%ƒ}¢ÖñvVÎç`¸ÈÀWÔ±ÏüWã_í i¯¤~οŒü}ªImoâÝ àÅiå#l´l /nÉMëÁ-ò€ÓŠ¥-þø–KŒª.—tXŽÃÊjùßþñwq«þú<Úµ´ö2˩߷”a¡ÍýÞ;r›[#ƒœŠâ¿jOø*½÷Ã…z”7ŸøXÍk˜Háë°`¨ùYÁ‡S@¹Ñ¦èе|quâT²ÿ‚Ø[ik'ü~x Fd8J²ò¹ääqøö®3à¿üûâÿŽ|5¨jž1ý~+Cosjš=ÕµãÜtÚ¹irG$ç¾Cñ‡üÿWðÿüŽãâW‰þköº®‘áöÑWÂSFí«YÆUKÈáóž˜ÁÐílPƒ/käÿø.-èÒ¿àœ~6¹a. {vÝ"DýàåqÎkçO ÁÌÚ‰µ1f¿³×Ç].à.÷[Í€ wÛ‹ÔØÉäÿðTOø-¯…¿kÙ#^øwà? x³ÂzŠcìÚ¶³>M¸SŸ1Q³F`zž(„ÿƒ£ô øû+êmi©.îѦۉ|¯°¤žY=Jïªjü¿Ö­š/Ùèy;ƒ¥ÞüŒò<Ìà×Úÿð\Oø(ÃÛ»àßìùmð.û\x*ÒòÏ\°½³’ÜX±¶HÁÆÉw: H„åIççå°’ãöw…nv5ÃYyÄ•ÀÝž¿ZùÛLðÂßèºìNªºl{®2\gõ~ÃÁÉul$óSÎö§øF@žñBÝ8;mç¯åZúG:bþ”ô‡üÿþ Müãþ±àù|lþ ‹HÓÞóíQi«xò·ð¨W`á³ß¦1Î~¦ý¹?àØ!û"^|9‘~3O®YxçÄøyÕü;fÒÞpa! R6‘ÜsZ¿ðhû$·w‰ƒp_Fp?&¿Tà´×ÐI¨þÎV—†/#Rø•ojY±ÞÞR0¸ñ É¿ø*¯ü+aÿïý…üeñg߯üS'„$´eÒn48,ãž9®c…¿y*Ê$,00HÁë_“fšÊYV c‘¢xÜTãúWö±ûxþÈÚGíÏû!xûáO‹æ6vž3Òd±ŽéT3YÎ0ÐÌÎJH¨ß…´7À/þÊ_¼Uà/ŽúT:_‰ü;~öº¢»`Ngà‘V±Y~À~ hTH÷¬ùyþÕ côȯ¥ímV @;ÐóŸûMÿÁ«ïÀoøÎÛã–­kã}eth'¸ðÁŽM:R0[€$^¿( süUèñÿÁš>.RâÚcJ rGà©'?śӑô#ë_«_ðP 2ÞÿÇ—PPãþ¸B¥ƒŸ§¯á_EI ض8bM~ ÜÿÁš>:xÜÛþÑ^‘Õ~DÜ »+‘|J®qÊó_/þÀ?ðnwÄ¿Û/ÇŸ4MÆþøqðÓ]ÝIq§Ï©hJ›oåÍòX#yÝÉ RgÌLt$gó¯à–~ÿÿhëØ£(×¾;v9þ±²?\þ4øåû~Á®Þ/ý‰e|XÖ~0xOÄö~ ÓÅôÖqx~êÎæí±dk—U<ñ•#Ú¿4!øfgYQ®¢-²°à•8ãÛŠþ±ÿà¿•ÿ‚:|*Œå¼3"q—^kùe³Œý¦û Œ\Êñó@(ð7˜Ò”ù7—ÈÎôçÍ\Ñ>Üø“Ç:'‡´62jzþ¥k¥Ù…BÙšâU;ŒüÌ;ŠÔº%æ ñLÞYŽÃšÖøK¦¾»ûF|6Ó­•KÝx³GT»DK=ì#Ô‚¿ïíÍrÒü1¸Óoïm5LCq§ÝÏg209 ¯ÿãÈkßÿàšßðJÿÁN>-xŸ5¿ h²øwHMVò}oÍ1I“4*ˆ±Œ–Ýç<޹ãÌ|MbÚGŽüMg)­õÝR#µ‹ ­ìëON¤æ¿S¿àÐØ7þ×}¼d?=Bꀅ5ôžøu0‚&‘£‡Ä¦\($ðm€Îz×ôü©Œ€8íU„šø·þ ý¬Oá￲™±,#Õ~"&™s€"1ù¹ç§Íò9æ¾Þ–×R©i‘£&€*hz’jöÐÉs Œr¤Ž‡ó¯ˆ?àŠÚ{éðüŠicmŸî6ÄÍÚÜŸcÛé_e|:Ñ®ôm_RŠîŠ×íHmÊÊϼt'|½N+ã?ø#Téÿ ïímŒ:xåå ‡™P´£v>ªGá@sÅØOùÙÿð»–CàŒ c_iÇ8 Þt Û¯ZýÞÂMŒ7ÝÀç=ëà_ø/Æ‹kkð“ᦿ;˜ï¬|Q¬EŸäœJß/vÌkÏ·½}Ë=ÍÄ:ý¬ ò'„¹|Œ«¨n>•~U &B„fϧ™¦H.’ݸlÁ€ã'•æ¬j0:æàÍ¢žêJ‘ŸÖ€?9¿àƒs}£]øð¢O1Ä1H¤ðNé'œP„ÿÁQ|=öÚ›FÔFx~øŠG=£øWóðéƒx?OÿË”ú)kúAÿ‚¶Íw§üq²›GùäO‡>#aMÇìÀuì0M7ßŠÂ§ç¯Ø¡ïÿL–€2¼y ¯ÆO$1ü§ÈÏ~Ïã´Ë½J=/F™,¥òBô'#;cÒ´¼ùWÈŸ Éo ß}ÛÄSŽß»Í}uÿ.ÁeþNã˜õëØÁî7éWüM~¿ÁijñÄß³¶‘¯Åšn©ãË; Äpq%¼×0E4yÑ»®GLæ¿E¼à«/†ÞµÐ¼)k†•¥ ·³†ÝH±ÀÚ  Ž„÷ë_ÿÁ|t•¿·ýž¦nx~#iÃhÿ¯˜N u¯ÑI>UfQœs€<ÿö¥Ö¿áý›¼w{4ŽÙ)äÄ@Â÷ëÒ¾Qÿ‚ü;е¿ØÒoOµÖC¨ý+âþË^ ð·üƒÁ:lZ—6÷ÃmGP¸¹ºÔ§šyn£–ÁyüÉ !9É l¯Ò¯+ ôñWÆmOø~oÁËÈ•×Íøm®D& Oß[ðsßùPÒ û2x {7‚o éE2ªÈ®Œw…9Žì‘žpkã?ø._ì?ðÆÛþ ¥ñ[ľøáë?xgC’çH¾±²òî¬äÏü²eäu<õú E#É8Ïóü«I—Wÿ‚Q|~‚Õ]œø6õ¶£.€O¯JüSÿ‚ï~Íþýš¼û']|ð¯‡ü(þ.ð]Üš¬ZtK—×`YÊn&^®ß4 ¹ç2{×Ì2Å·öPÊNû6 “ÓœŠûOþ:’ Gàßì[<ÌßÛ²øé®r‚ØÇgÉ>¾o”9ëÛ5ðö±®, ôå·ó ¬¶ØáYF9x?ƒ£è~*CÏŸ¦m9ﵘçZZ.é,£ÚÄ £+ëÅgx6&m3_(¬i²sŽ:úÖï‡Ó:T$wŒ~%þÚ÷Ÿ ®¼_ðƒPø{¤ø#Ä–úæ–€^Oý·¨Æéˆ¡ž{xQ²¡‘Y‹y€œb¬Á®^ÓÿÁM5í/Å?Ÿâ„9êz®ªèóÏã}CÌÓõDhîcUÄ»ÃĈ‚D# ¤ˆA5ûçÿÄÿÁCôÚ{öÐþßJm¼uðcK‡L¸µ[yQ.ô¥v†Îída±™„LŽŠÄ£&3Šüäý­¿àÜO |ø3âßø;âÄK·´»Œé6z¯Å´p[³*ÿ¦ÝíPïÄì œªXüwûgü øðá~ƒ½[ö†¿ø•wdÓ\ǯØÙéZ$šÜ$—¶Ò>í’DXmæŒÿI_ð_ˆšoÂïø$ïÅ­KÄ××VHöÚÛÉm*¥ËÏ%ÄiÀXæ#nA籯å“öµý¯<_ûbxƒÃgâdšbXø@ƒÂZ%¥…¡·†ÒÂÚRñ©%‹I!`¬Ò2G xÁ=ÿà—ß³¯í½û3§Ší~%þК7‰,/[MÖ4ÛMß[··BÈ|©Б‘¸höå 3œWMüà¶ŸûMèº=‹¿hÝgÂSÙo½³O ÚÛx†k‚ÇbC…XDTΫ¼uVs_~À?ðWïðM QÒ?fhöº6­©^÷MÔôT½·¾œAI e•d1Œ!‚sÎ+ôWþ ¥ÿV?ðRïø-߯|rÑ´ßøŠÛ÷šµ¥…ü“éÚåÈ„Ê%E‘U¡™WÍ6T¶ó€ÖŸ„?´ÏÀ? 4OøÁ?<5áŸéði¶oàûÕKX#ŒQ„9Àê}sQøÏþ Wà‘àmNïÂ>ø‹â –Ò—Š ÝÄŠlIy$@ª£œ’:â¾”F2¯ºõñFÙ¤ø_âH¡; éWJ000¿a@Á+ÿn]ßöZÒ|9ƒ|}rú<—R%Γ¡Ëc:<ï.éò‰8VFÃddké¡ûjxp_Ak/‡>$Gqt†H£o ]üàuù‚ãs_=Á¼Ö’èßðNK-2ïQŸP¸Ó|K«$³Kò¿Ïpe À¾ä‚Ÿÿ:øãöÕý¶t ø£áví ^[xš-Bñ5xæh fØ2æIH¿*ä’¯eðÿí§ xšÒ)ôÏ üPÙ*³/àûØÀö‘Øâ¼þ óàû­[Çß³Þ£³q¦ÁaãX…ª†[”ßrz”r:WÛ[[Îp®ü±þ#Åy.•û`èúÄŸè~ø˜X‚dð½ÂŒ©ätïÛÖ¾ðíéñö~ø™ñ:÷áGÁ|LÐõ¯}¢úÃH;í"IÕÜ[åû¨ #`ƒžsÁý@Dl™±‘ÜúׯðJ÷ÿ?iµ¹Õn5+ψ sf’®×±CV‹pûãz»î<üøì(Æÿà©ÿ·£ñ·þ -ñÚÃÄ_þ#ø2Kß ßÆÓkѬí+V' ŽóÎ+ùÞ´®¤ºm›wJÍ´Ž~ñ8¯êþ ­j×ðG¿Ú4®»|týs sëŠþXl³,·Ê™ËM.¦XÐ:Ð5à€0u‘‰Þ;Tðk¥ø i-¯íQðÀ¤ $±øËC1&Öí0×8¬?° |K¬Å'†è õÛò&x®ö~ÅïíUðÀÞ‚ÐèHÌ>\©[îÔŸ¡[~8„€…|Q¬ QÛÀ¯¿?àÙ_:—À¯Úkâu߇>øß⠿𵕼°xn($–Ä ë†Ê&’1±‹K©Èšø7ãŠh_ˆËm¿ð–냘Ôîkõ þ ÿ\þÕ_ýIÚxÎ}u ºýAøùû[ø›Æ³·‰›ð_âfŽº…“ÛÍu¬Ák ½”LvË,‚9™þUÉ)ÉÇnk öý¨ï´Ù³EÑ/~|IÔ Ñ[8uM;NŽæËQVËÄÞ`l.BÀr3_Dþ×ZJkÿ²×Ä[;É'Š+¿^DïbD22§±ÂÿÁ,|Ÿ`/†: ¥Ö¡w•¦5ºÏ{&û‰±#|ò7v=IîMv¿´õ­€í¾ ø’†Oîø~I6ýv“_þÖ´Ô:/ü¯à¿Š-|%âéí´M6æÙmßI– û´œ‘3A å’ÉÁ&¿E|– ÿýôkâOÛ3ÃsÁ]?fZ JêÞÚÎ×Q‚[PAŽèÈ­Ùç+Ž1êhÚ´Û›ÁšÉSñ&e$5Ç‚µ(ÇûÑp}h\þמ¼Ñ/¥K…··²Éá‹ä'ä= ‹½u „cÌ“þú5_]¶7Úô7.í¶Ò£ ÇQ…~sÿÁ)?n_|-ø?¨x3Ç6þ#Ó®¿·ïµ {‹}êúÑ¢™÷âI –'RJáˆíŒ×Ø‘~Û ä´YOˆ®HÈi7ˆÝqÐÅœñÒ¾}ÿ‚ i7Ú'ìuâ;êkªÝÃã\}¥cT>Q—1¡Àçjm\÷Ûžõ÷Fp2Ùyçù{ÿý¶< âï|ÿ…M©Çâ{ïxÆ=vú;Xù Õò²ÀbfÉG#¿ZúóÀðSßþ=𽎲|k‚5Fù,µë 2ú'ý\¶óÆ®œð@Èç¥|ñÿÒðdö> ýu¯gØÞZ|B·7#ÈP×±4°³¢‘œO¡¯Ð9ô¨&¸o6ÞÝÆò~hQ¿¥yF¡ûs|#´Ó5 ›xnîky&kh.‡žä)!UHÉcÐz“_•ŸðGÛÇBøûOøÚÏãmíÖ¢|G»‘ÒæâÙž-:çÏžxܪ<¦(]¾_3 Xgö¥|;eöµ™¬¬ ¬ÊþÌ›ˆÏ®3_ž¿ðFï…ðê_?jCÇö]ÒCñ&K=0U‚Ûª—ƒÑ„'ŒPØoí™ðVŒ>›ñ7À× êš¼G¿Ö¿6ÿàáßÚçÃÿ¼àÿ|×4ÝoSÐofׯnìåóà–#vìG±“y ðdWëðN‘·HÇ_øò‹ÿ‰¯Ïßø8á„-ð{ឥá H[…ñTv7·b…–ÖD$ÕÆC°)È8  ¿Ù—þ[ýšü_ iz?Ç-{Røqâ‹-:w±dÿdž`dóǹd‡ œŽ+Ø~!ÿÁvfÏYÃs¦xÊóÅqÍ Ì§@Ó&¾E,p±È긳Ô66÷Å{Þ‹û|)´Óà6 < •%$hX çîõ«ZÏì{ð¯ÅÂÛÄ?<u }"`è´ùÿbý³üá?ø(_ÄSâγ¤x>Ïâœ3Ǥ6£:Á—ö{ˆ­<Âv‰<©OòQ±_°IñïÀK0ñ¿„ ¢—b5‹s€'ï×çü7öVðD_ðPŸÛ3Kñ'‚|9y¦ø{Å––Úv <:u¬–êÏ²È “¼¥~ˆÛ~Ì?-·EmðûÁ£`º°:%~GÁÈŸµÏ„þ/Cá |ñEžµ?†ì®µ©gÓWí°C<±”€«!Ĭ6±1ƒ‘•þð¯Ô?Ù÷öŸðOÄ/€^ñø×ÁöÍÖ{‰ ×m¦‰ÊPß8lkãßø8ïে|'ûèš§Ãÿ èšv£iãÑÊÆ8ʹ¸[y”RSô8=«ìŸ~۬ ß ¾—°¶ãáûl“±Ns³®hª½ø‰á¹"3Çâ=á‹»J¨¿Þ'w¾cýˆþ4ønßâÄ/í-^ÂÍ5Í^k›I§R+…Id'N3´‚9ät¯ /?co„תñ\|3ð# 0¬?±¡²}–¾<ÿ‚tþÎ~øŸñãöðÿÆhš¶‡áoÇ‹kx‚â¡-!â3Ç2; çÿà«4|z³´Ð5½.öoøUž'½Ûkr“,[¨ ò“ÁÏüæü9Éðµ‚à`ÙÃÉÿ®K_¾¿ðWoÙoÂ?¾/Ü^~Ïžðç…wü(ñeõúi¶‹j—æ8`ÂÉ·Ù>Õøðî?ø¤4Ò¿xÙÀ¹1­MâI|¾0bØS$ Ç9ÿGйÏYË>”àKL²y‰æ/2Ç~œWE®ïŸã7Œ!Ueß0ƒþ ×ðßátú¼·Ö õ(¤šGhÚbë »÷q…ÁõÍ}¥8ÆáÍxü^×Íÿ‚p|mQò|!|‘Ç˯xðßÛ¿±íÿá'FüF<ö´-ä³÷(æÐkÂàªúÞ­ Á<>/\ø>8žëþÙâv‘±äÂãl²(ÁÜʤ½Í~(ÁÅšxÓ~~ÅðDÁ˜|3¹†ré‡ÓNX÷ð=ëâÞðÒác‘“ì…1ò¨v°÷â¾ëÿƒˆô‘©þÏ?±W‰m­ãV¼ðdúd“G `Ê!¶™SÆÛ½±ß5ùýãÍYÿáÓ4ÖRÂݤŒã™Œsß­y‚ä•ü1®Ççoˆéw*cÇÜ9S×ÔÖ‡‡Žt{~˜òÇãÅPø~$ŠÏÄÝ!M&f9ëÛµ]ðÓÄŽØäQqùPéüÕyöoø(øAßYHýû–¿\?à¾p˜¿g¿†—ÊŽËeñIf p3. ìNp=ñ_ßðl%ßÙÿà¦vk×}«.>±ËÏé_²ð^½F;_ØçÃÜ@fûWŽô@¹(+pg¿ðö µôç arO?œ­SÐíÏÁGüU΋ڀ?’ø8F⠿ൟRÞ Ý)&ó¬tè›EÚËÀã9=Íyìûa|Qý‡ÿhäñgìƒ8>,»±¹Òü†ÒdÕ…Ôw_²ÆCJSʸÈOÞ69${gü¡i ‡ü?ãLºUô·ý›K¹‘\ [H4Üùcd|ªÜäüçœ`Úø#ü›á'ìciá:v¡¯ø«Çú߇a¸†}BøOa¤}®Þ&lâ 0 ^²à3ŽÁ¿ðSÛ—öÙý´?à”÷šgÇïÙbÏÃ~¼Óm5¿xèÜ£-ad™.áÓĶ,YQÈo1ÑIs_Œ1´,¾z„vrΣ $äíÍlŸ¶oÃ{¿‹?²gÄ? øaT꿇îííœ/”JLn¿Ž?Úö;ø™ûë.“ûIx7[ðÞ«aʼn½…ZßPˆ Ì–÷³Å(J†Þ ‚ÊpV¡”ü¬Cu>õî¿ðM¯…~,þÛàýŽôÿ¶xÖ×WûV•=ËËŸgs/6û«˜Ôˆ” aƒ÷¼À¸;²µ”"A'ŽlìÝÏ>Wš@¹^½«ë˜@27®MxWíùà‰g–9m½p:ãì¶ÿ“Søkû.é]¢Çs£|²3\… eóµ ÊS´@Üÿµ^sð“LÓï~9ü;’{xîaŸÅš0™$o¼‡P·ô ŸÎ€âMÇÛþ/xÞY.Úõåñ.°æv€ÀÓçP¸;ÌmÊÎvžFqÚ¿SÿàÏø³ûQüh#·ƒôÑÿ• ÊüÃøÿo´ïÅ´¸Ò+X¼i¯¬*‡*¨5K ã…~¡ÁŸQÿÆQ|kÏoéŸúp½ Û?Új%“ö{ñÀ9ÏöÑ#nâG–xÇzá¿à›fi¿bß¶ ¥d\çwÇÓŒWyûM¿Ù?gŸK{±t ÂÍ»ýÙÅyïüë]¸ñoìEà½CTR³Ü­Ë8>¿hqÇ·ïÛ>ZøóöÅ´i¿à§³|¥IT¼çNÖüø¯²Ê×Èÿµõ•Ïü+í¹÷,NS¨ÉÛ¼V(Ì»C¯T'ŒóÜuü+óûþ‰¥ÇaãÚ_Lyf¹ŸLø€ÐËy6 ·eCüòïäWè‘© JÔ²óµö“ëƒ_Á$l ‡í ûYE­²üE;$^90î+mÙϹ ·DYö¯‡à¾0Æd ³œ:xÛKdã©ßþ÷Hé_ ÿÁ}šXÿdß ýž%‘?á2ÓÙ˜äÎHSŸ÷ˆ ¶´ï›O·>±'AþÈ« pÃê?A£ñ¤Zï<ˆ#Éÿ€Š±*œ‘ÆqžháŸø&Ýœv?ðQ/ÚÝ-åròë¶2º2ýÒUùÏ~}ÑÆ3ËtÍ|Aÿõ³[?ø)íe™¼º­ƒàvJûq‹·?&8ó@ÁÇzl·Ÿ°>}e,æ[h¨°¯(ÁîãWr¼e‚Ú‡9ÆE}ÓáÕÝáÍ9½maù kã?ø8D:Á<­ÓsGâý ±œ}±cð&¾ÏðÉÂúnà6°ü†´ePy¨Xgæ×½|_ÿÅÔä¼ý­?jK{¶[oD¬@àœ€? WÛ ²?¼?|3ÿ±˜'í‡ûT$’gñTRrFæù¥?–? óÏø.|‹g¬x‚îáÄI¦üñtæCÓTçÚ¿œ¯‡6e|-¦ ò;XT®xÏ–¢¿£ø.ãEªhÿm" .#øâöÎ8;–Ü(Ïç_Î×€mó£Ûyƒ`ÇÆz|«@€ÿÂïñ]Ë<ˆ-îW##ç&€>˜$×5ñ $‰[yd"C&0¸ÏLÖåõØ‹ãŠã Êe»ã)½WGÉ=«–ׯ俻Ÿ*¾s“Áž‡·wá2ð¦¬[ønáœm5õ?üÂO#þ Ãð!Øñÿ …·þ‘ß ùkàÿÏá]_“´BØõùkéø$eßÙÿàª^ßþ‡[‚p0mïõ Øoø8ù¿´¾"~Ìö÷‹+[Åâárè£%Š^[qøŒÆ¿U­˜—bõE tì+óCþøm¨ëßÁÏ™¡:N…â«[Qn2ÒK#ÞC4Œ}G_R^¿Jl®î(d„à4jÀg±€-+d c>µò/ü [àßÄ‘l!ˆºÂÉ„äLp©këÀ=Å|}ÿ˜Õ¥¸ðoÄè#†(­¢ø‹¬Ã¾5ÃHË19os’3í@_ùCœôjùö¥xôoø*çìÓ!Wf»Ó5»E ÑrŠrG Ç_zúô¶þ?Zù#öÃB?ि²ìîO«G¸}âLåÏ¡ëjú¾ÒI_qù[î׈ÁPbÝÿóøÂy„øfçŽÝ'ØW¹Å.ä=+Ä¿à¤ñ ïØâý»“‹ ^GÇ^Søiÿø¾ÉüûxNÖþ®t†ÏªÝØÇ -ìâ†FAÓr¥ÀSÜ÷¯‡¾%@³_é‡xT¸µ- '!ó×'½}±ÿðøm§øoYý“üImÕ¼Ið¦-A±ò•±–ÛÈaôû\ß|%â ĺͬöó4±E„8=:ž‡jæt)WP¸ñ *à)ã#Š¡á0á³’±/ò­-E{ Í`Ȭ±ý†å …ÉÁ¨xE7ø~Ùz~ísùP_ð[ãßÄÙgâe§‹ÿfßjñ ;•o¬ã…ä T©fÐŒ1êµÚøÃþ ûAüYÓ¯,þ!ücñοg}x—ïo©^CuW ÂI ˜€…‡?pÏL×ð·á/ˆ¾;øæÛÃ? tËÝc[ºÊÛXÚCçOtûKlr2ØF8Ïjì¾-~ÁŸ?g†ã/Œ¾ñG‡|8nã³’öûG’cšF؈ıÁ-ÇLg½z–‡ÿÍý³¼5¦%†“ñóÄ’Zà ÚÂ'Ñô»‰"vô•­·4Ÿ)cnàò æ¦þ •ûe^³4Ÿ´ŒKÝš~’€¸À²ÆïöºÖÏ„¿à„¿´¿‹,-®ìü ®[AwËMaÕX<ÞàŠê-àÝ¿Úrí7 Ü'¨k`§ÿFó@ þÒ?ü}ûP|b×Òkcž+× ÿƒjÿi‹¬™4ûhNˆ)Ïå-y4ßð\_ÛFîÞ[{þ&hå9Ñ4}Ý#"Ï¡ÏLvŠóï¿·ïÇŸÚ«á„ý¥>$ê¾.ð¥½Ì7Qi×¶–ÒÄwFñI ºKSØ>áîßÿà€ß´ìýð¿[ñ—4øÿ±<=i%ýôw†×s¾Ñ.HÍVý˜?à„ßl?‚~ø‡ð’9+þÍ´—Ãß„Þ7û5׌¾)G4¾µ´eu¹‘æîmø]€î?ì‚Fph€ÿ‚Í~×»ä/ñûÇùbw`i½Àþ\¸è?ɤŸþ !û]jSÚ<ÿþ!±mÑlþÎAžŸ0[0$ëüY¯¢-¿à×ßÚ6h2xq òqv§zîæ§›þ tý¢`´’T¹ð˘‘Ÿi¼Ú[8ûÇž1@2xþ «ûSx>ÖX¼5ñÓǶÏ3ܼVÍb‘y’6ç`Ÿe!K6X’pJËøÿ,ý¦¾/égÄo޵-6òÖK+‹S¼w»t"ØäŽËü,µë_±Oü3âßíïð÷Xñ7Á¹t«M'EÖntßQœÃ#Ý[6ÉB¯uVnÏQ^Åoÿ´~Ð’’j>Êò_í¿+}9ÏÖ€>9ƒþ 'ûJÙxWMÐôÿŽ_ãÒt”H¬íΩ¢ÝQ÷§Ï$-#•8û³´k¡Ñவžyqs¦þмép¯ç]YÌœz,–„À í?n¯ø#OÅø'¯†¼!ª|j¾Ñ'‡Ç ·ðΘº}Ï›#^O”‘…àå†qŠ÷ø5{ö†žÕ}WÂÎ]@23×ó$¿ðXÿÚêy·Çÿˆ¹S‘‰4ð9>‚χeÿLý§íõ­Vú/Žÿ£¾Õ€r¥Õ¢¼ã·?eíÐcè0+ëyÿàÕ¿Ú ЮõSn£ºE#ËЈ=ká-ïíQ€Tpëí@ÿ~.Üühè÷º5ž”ß üƒäy³jéïp&qåçå±’sÍr¾:œ^1ÐÿáW›¿øJ?µl¤Ò"6û¿´Çöp¹3°…$ò@É©#½Š?jöº}¤PÊ7yÓ™Yšç(…@SÄ{G.wg'æçÂÖ–^ û3/há@HR5 |pÿ‚æëÞ#¶ðÏÂhô9ô»[^ußsy }ƒŒs–Ï ¯«ãøÉãh,m›VøSâ¹’×)iªXÊ‘IÝUšU,?ÚÀúWÎ_ð[›!wðïáUØÇñ Na‚@ž¸ê=«í¥NNhÎô‰Ú³\Íä|:ñu£ºšöa$“û¹œ€7tæ¾ ÿ‚`|{ø—¥þÑ¿´XÓ>êzõ¾±â–Ôõ!gªÚÀtkí¦?²;¨ÑåÎcЊý8dè}Çó¯‡à“Z}µ—íûU}ܳËãÝò™+¯Âz øæ€>•Ѿ6øºûL†]{ágŠ´ë—ËÞØÜyGÙ„à5|ÿØý¨5íGà^‰ámkÀ>"ð´ëi¨ij¦ÿgRè-Ì28-¸‚U°p3_§RƬ…OÊŠ0q_ ÿÁüŠcmL÷öþ/ÓÂ<8Üw’…zt`Hüh§ý‰?kO_|)¦ÚWà¶©¦[ÉÆ­¥=¸YQvoµ–a*¼€úa}H¯q»ý uÍ:Êwƒá_ÄK‡‰Kª²Ì„ƒý#Ú½ÂVQÙxcM†ÙqÇk*ƒœƒŽzÖ†Á‘Ó‚(òÛþ ‹ûFx—Tý¼þ9kþ2ðŠg¿ñ$+5写hŒú[Åw"¢J²:òPœä²7"¿J¬¼oqvÁ¥Ñu{uu$Ñ¢²ç× ȯ`/K ÿÁN?jíVæK†‡Y¿ÓÞiIEØ_jôã>¦¾áX±Èúdu Ïø8{âMݯì5ý‡¤éz¢ G[³’M_ÊÅ­‹FÆDó’ìÁ@z׬þÅðP[ã§Â}=¼uð[â÷†5[ h!—ÎÑ„Ö×X@ÑJe_€# »ŠàÿààËi5¿Øa죕„xƒL–uQ“#™ñç°>»qÐ×Ú^‰Ç‚ôƒ$Çic=@s@ãïÚr÷ÂþÔ/ü?ðÛâ>«m =µšéA>Ñ(*–Þv©8ààv¯ƒ¿à‘ÿ´v­eñã㞥ñÀ^,}[ÅZ´ž¡i¤iÍxú<Åä À•ePF8'ú‰,{JHçÞ¾&ÿ‚gx`i?¶/í-},óMs¯F\1ùP,²à ì9üó@%ÿŠø½oãË‹-ÄÚqà§Š¶“-—˜Å­‡Ë¿—<ãÖ¿<ip„lü±¯=øýÁu|2ÚŸÃoˆš•µÜ–·gÂ,2ùdîöçþ:F=Í9þµX-bòSjå@QÑzq@ŽèOž&j»=Û’çŒc¨ãÚ¹Ÿh‘é¶×‘Ý|¼»Ñn{fº-Œÿ|XîdæâQˆÆw‰þ¨¼O§Ý.såÉ7–‹ûÂF\ç'>Ýó@_Ëеe~TÍúW}ð‡âž»û>üiðÏ~Ïko®xSRT°’êßíG4k"«<[—pV8Ü9Ç<`ùïÁÒ_FÕ!ƒK9ö®‚[Ð&ŽÙD…îXF¡#i“Ç  ³` =¨êïŽ_ð\OÚö²Òì>0ø¯Ãú®ƒ©G«ÛLJRÓté÷w2ÌÛ—“•gŽ{PðÇüïûYøFÎA.·ð÷YûEÃ<&÷Âù*pIå^.cÀŸs_ÉáH|,&»wubæ2Ýéw6ê÷‘@íÈê;×S¤ü!¸¹·[»WNdo™dòåÁìvã¥}çáßø:×ö¨µ˜>± |Õƒ’Eå™õÄòg¿¥rÿ³'ü'ñëö_/„¼3ðÛTÓø¢M¦ÁÀŸo¤WŽSá¶‚‰q!Š{Œœ÷âE¯¼°=+çèíü‡Æ××q¨Ï…lÖNI]üîôäq_Cƒž”ãßðP= êú„ÿà³ÿ~Ù{gøƒÂú|J²H¨ÅáÚv‚OÌq'ÝíÖ€;ßø-5‹êðIŸÚ"s´žÕyqÀÿGJþJ¼t·ZL3 `’ã'$E<ûó_Ø'ü†Å5ïØã%©Øë7„5% á‡6ïÚ¿?‡àxRà üÖVÇÿ ¥Gkl§Ä^$3Bd”K¬€àLjSš4aß|7 ï,)>«`¾t2‘U¯aƒuV’¨8=ªSóë¾"ó²›ÞŸséU5;ïì­+QÔ?{ •íµÛ,CçtŠæ'eøSë@çí£¯‡k_‹:\2]M™âÝFÞ)n¦iî&A `òÊÙiîÉcɯÔ?ø3áOü4ßÆãžžÒ‡þOß…~e~Ò71k_µ—ÅMNÅnRKÄ·WQ¤ì¯*+¤L²’¤óÕIùÎ?NàÏ”?ðÓØç#ÂzOo[ûúýÂøþ†Ož2©ÐïþAjðOø"ÜÉ'üÏÁ‚ÝB"MzŠ>—2W½~ÐDŸ>4ÚÏöïÊNýÃ÷5ó/ü£ÄP_ÿÁ=|+ho­g»·½Ô7@®¢[tûK• €äpG$s‘@e×Ì_¶,²Aû[| h—zÿiÌÎ3÷Ç?…}8?ýzù·öÍ kûE|º$;ÿmIŒ7ÌAÙÈôtm™HôÍ:I}‡9aÇj%yí‚8'½L\q@,Á,¬ŸKðÄ•J“ã ÃŒç²ôôãõDm¹rkçߨJÑt Ç1®ÎÌ8î=? ÷èÛ®Êùþ ïk%ç¾}”•x¼qc ã9Æxæ¾»WÉlöë_.ÁR ûG‚¾œ±ø¶Ô—ôúæ¾ Œª¹Áäâ€q´cÚ¾*ÿ‚\[‹_Úoö¥RÁ‹xÙ_?/ÊüWÚ¡B.|gÿÝx£ý¬¿i_ “öŸÅ99È<Ê¿û-}uoæDÀ–#8êkäø->‘ý©ûÄ9fñ„¹FÖ5õãT×Ì_ðV-uoÙç ÏäêÖr 鸃ŸÀÐÑžløsO#?ñëþ€*êÌHãqÉö5“á; |1¦0ÒLƵ¨­–rM|ƒû7—ÿ ý¤ãܸ7vL¨ $}üŸÎ¾ÂVùqï_þÄæÁA¿hËrÆÛQxXŒd¤…:~uö4Rzäó@ÿÁs6Ü~Ä_f35ψ´ýÎ3µËüuM}cá7Âz^G[8r?íš×Ë_ðZÛt¼ý‰nhg‡]°(ÝЗ ‘ëÁ#ñ¯§ü%0OéÏ[83ÿ~Ö€4¯æÛd䌀¯“ÿa-]#ö§øñzÅ|CS…†:—K¸þ ʾ«Õe?d`:·¾sý’ ß>-Ê‚KªFdžjð¯ø/d¯gû,ü`º·s¯Âma2¼¹ãüèxr0ã.?_Ñ7üt¶ÿ±ŸÆ9o†—ð–ÖxÆ+ùÞИ¢¦ß›3G¼(‹ðl²ÂÓñ“Äp>Ó"²Œ·¯¦1ùÔžW™¡Þ½üF7‚&-ëÞ¡ðlqMã¿´§ýuüé»×TŒöû¢¯^2Úiw¹“*ñüÁ‡ €G_Ê€8Ï‚¡¿°57W‡w±Û^ùÿõŠ'ÿ‚|[ß-¢oi CãiËËÁÏ‚·| Ë}«É,¦5‘"o—l9ÛíëX¾p4HG`œ~tõGüGø®þÝþµý™#Áãψ¿´^¥‹©À÷šžmI`´˜ïŠÑÖ_Ý…YHeÉöÝÇÀŠ[0_‹—Þ`Ë.4èÔGBGQü«Õ~Ù%ýRÞT:m´h3ØD VÞÞ;Ðå¥Ï†~(\ÿÁBï~ |?ø•}áO6‚u«GºW¶Œ XfϘÅXƒœÛ‘ÔWÜ?~üaðNŒ–¾,Ùø¡¢m«s'‡¢ŠfŒ/¶¶ó’OzàÂ= Uÿ‚±¿‹. ›ûwNð¨†9RfUÚBŒ2Žð¥}R©µq’ùÿöœðgÄ7àn$ñìZÅ¥ÜNè4¤†BŠ„”Y¾PÀNñÇìgÿþøƒñ§Â^ø¡ðGö‹ñÇ€´Ÿéî—F‘wGËvA" · fÇ,ª“_¢´¦—±û>øÖÓPV’ î9v )‰²3ÛŠóø%Ÿ„´ÿþÃ~°ð»¿ö|PÏöu,O”†g!Ò€.ÙâLV^LüK%cÜÚ|ƒc9=ëâßÚëáÇ<û}| ð?Œ~ ëÚ¼ž<¹š=7\^%Òd‰K1N3À#{ñ_©B0rß|‹ûkø6ÇXý¿?fýNú%ܛi ?ºÊá¿0q@·àŸ?¼9¥¥¿ˆ~4júÜ‘.Ñ<޲ߜåö¨ãŽ1Z^0øOãmWE–ÞÃâf«dÓ)S,:]²È¼uVÛòŸzôß,c¿çQÝ¢‹9nÛ´“ƒÏJü—ÿ‚c~Îþ3ý¨ü[ñ_ð/Çψ_æð§‹ÞÇRÓ4˜à–PÎqpËdœ¦¹â¾úÒeßZèé÷ß¼oqäGå-ÓXÙ ™}YÜG‚^;ÿUð†…ðÏâ}Îiý¡ã›Ù€≮ zžI8=3_i˜ºŽ‡=M~KÿÁl~øÓökø¡x§Rø‡®xÞÏVñe†ˆmµg*-ÞöU…e„#ppO5ô÷À¿ø&ßÅo×—Þý©¾%êÖÚš+6™®ØYßÙÙŒd-¹($@2Ë{Õßø-w‡týwö<³[µŠåÅZSÆ$<$‚q´ýs_Y趨ºE¯ÊA êº|ãŸø'·ÆoŠZ…·ü'¿´¿‹#°·$ùZV›ƒ7¡>Y=G9¯ÎÿÁ-u?Ûþ ?ñGà§µmÓá…‡‰›Å7M%Þ­¨5É"5]|§VY2á³·Á¯Ý†¶@¤íýM|uû9xNÂÓþ ñçUµ·Aw{á½*¥Ú76Ã3×5|ÙãŸø#Œ?d_دâk¯ÆÅÍoám[hÔRêi®wǼ#É%Ën!EÈ;Cf¿ŸŸ8“Ã6²[¨‰d¶†EAÒ0Ñ+LøWö-ûbéñÜ~Ê_ãò–B|3¨|¤gwú;ñ_Ç'gƒl3M…¦ý°Ž€-K§¬úEÏ›£]ZÉÔÏ6®oYãÕTì1ƶçå€Û©ØYy“xfäW/âi>Éi(œ‰,JXrT<Š„ñ׳޸Åz_Œ¾Cဟ œ·ÑÛ at<¨¥ß噈Àî ï_ ßðl'ÀÏŽß´ÅhtŸˆ^<ðé>Ó®žO ÞElúŠ=åÚùS™cpQJnP¡N]¹<ùϪx¿Uø•«ßø«Ç7B÷\ñ¦öþàF#JUSpAÂü± Àô¯Õoø3òe›ö™øÙ’é~üBú€?Q¾7þÂú‡ìýã‘}ñ³ã6²Mº»HouX$‰‘"-öwDLˆÛH9;ˆcÍ|kÿÂÿ‚Gü7ý²gÏ üuO|Vð?‹5”’ÛAÖ$Ñ$mçeŒKxóq´ee 9Æ1_«?­#—ᧈ£Ž4ÌšeÊã×17zñoø%†ÿd="Úx"’þô€¿7Y‰ÎhoCýuOZÄšoÆ‹§ËåŒú¼þa8É;à>±Ö¾Sý½~Mð¯ö¬ø-oâ¿kÓ|BÕ²%¿¹¸GŸLØË¶X6¨U#vpP<×èÜpE*‚cOʾgý¶ôeÔho‚2ƒìzÓK ’7&G=(Ѽ1ðGÄÞ”ý«â¿Œ5EE(å½›zIH—'Öºð7ˆ!xçR?!]Ïen\ç¾Bå]%¹Oµظñz¼Ð!*DiœõÅ|YûØjž;Ôühÿ ü{6šš>®úv¥9.Öîuf?7›€®uëŸJúoNð‡ŒÎwã•2 ;ñ£Ã†9úý+Ìb{TFŸq¯ü$LͶ0¤¶Ò 8ëõ¯ RÌ#(½=(âø)¦‘|©à•øâØžÊ}Ylá l-¢IdÚ¡¾VùœçLqÖ½oáßÀÿŒþ´ÓíµŸ×¶ö1)7†á–IãfýÜrK¼¸à1îMdÁB-ì%Ñ|.º½¥µÊ jÝ¢I2¤ŸÂÀ‡Žµô\(PB)ÈŒJó‹ï üRŠÑÕ>"xiÄTÎ|2L‘·÷ÀóöœzŠø«öðOGíwñÊÓáÇ´x5 êÇ[¼Ôt–ºƒP’IZ@DI,{Û Å~ËcÂmš(ÙX`‚¼ù‹öE𖛢þÖ.´+k(žúúÔÜùQáÌŸïúœb€=OKðïÅx,q¬xÓÁWó¾?ËôÚnçß5áŸðR[?Yü Kx§B]Çööö¦Ù$çc³»1<Ž WÖ¶±¤©Ê)9ÇJð¿ø(ÝŽì×t”ògüÄþ8Ò¿b߉ð|s—Â’M¨x"[{/ì5œ.æ¹N$ó‰$žÇ½~xwlsÀ_?<ïֿ|¿àã½./øw·Äë‰áRÉᘕ\Œìoµ©?ZüÓf’kG6ÿyX…Áäö÷ Àw&oø’Á^]œzby?ÀVö·h/¼1wµ@0 o0;“Ôrk’𲈷"1––Yw2X¹'ŸRsøæº_=Íü‘“ÈŽ3æ©qòއ¶:Pð]Ùj 0È  ž¾ÕèŸ|euðïö¢øaâ/ é7:Í÷‡|a¤êvM©ÄÚ¬ñ\©ŠÑ  +•Lã߈ó„s§ê!Afqzõ¿Ù:"mÏ‚O7 Ä º²´àýM~ÁAા,üFð“ü|ø9­|.›Ãºäzåøº13ÄÁ¼˜šHQ%;Ài ÂpOëwìÿOÒ?loý§[ð_Œ4ËIÖúò-.[­%®WŠ)Ôg9ØÊ ô5ó_ü×ðÓOÖ¼!ð'_”Èu#ñJÑs$ÌÉöioagUBp e\·RúAáiú²cð핵„j{¯³/–³Í°*³À-´}ìdñ@iŸ~Îåñ/ÅÛÛ½;H@RÎYf–B¹XÑIÜ{g€z×çüþ aaðëÅþ5ðýÇÃÿjúŠ|Mu®\kú]Œ×ÇNóÉÚ·0㢅û§''ƒŒ×ên·ak¬é—¶ZЬé$'÷¤t=z×Ä?ðC-´†_"¶D·h¼u< ‘‚„*BU½00í@KüZý³>üøv?ñþàOO«ø·RƒNÓ¬€yne åħ¡$ùô­X­D* 3(à~Xªš¬Q‘,›A8&u|2˜û‚¯Jüxÿƒ¥¿i|Xý‘~Mð—ÄÚ.¿nþ:—̸²eXŠé·ca?ÂÌÅT§8¯Èk(•|;j%É,pxäw¯éoþ Gá Nÿ‚F~Ð07N¶··ð}ôȱÙGˆå1® (Ãçø¸5üÜi¶‹{£ÇŸ+ò8í@sáÝ0Åâ(dÎRÝð¥†pQ³ý+À¿>ÇD®“AÑR)´ûÛwÝ!/ãæÎQ€>ÕÍx)JÀœt 1øÐÚÿðBÏ“þ 9àóÀ&úØsÐþð×ïüªÑ¦ÿ‚jxãwÙ¤µ”œgnÛ”9¯çÿþ¹©Ç¢Á@¼qtéjY.]‚Œ™Àëÿ¯Ýßø-çÆo èðM¯Œ:{ëº3k6vÐGýž/c7^t— "O+;·9ã4õçÁùÞëá7…ä¹I&‘hÌPL+šèÏC^Qû)ü{ðŸÅÙëÁš§„¼A¡ÝÃ>‰hYbÔ"v…„*ákÔ…ìmh'Gä•ßænvã9ÏLc½|åáöeÿ‚–kÈàøu,GL'Aé‘_FÉ#Ç"c[‚}=+ãí?ãï„´ÿø*Þ±¾&Ð"·ºð|QùÏ{”ó£n1‰3´0NJç¥}aái>5±[ŸêºV¯jI[+¤¸ŒyÃ!#ƒ@Ÿ´døã…wóð3äµy¿üd-×ìWàFBªE«–w ÞcgŸ®k³ý«üU£øKöoñÅçÄ VÏEÓcÑ/<Û©æª%±ÉêIÀÀëšð_ø#í ᯉ߱ç†|?¤k:d¾%Ñ¡˜Ýé¢á~×^{™¢ÎíÙ±ŠúÿŽO­|ûsk£þÛŸ³šÙÀ÷]ê÷mCƒ·'ÓŽ¿…}n n;±ŽØ¯ˆÿmO‰^»ÿ‚›þÎZ%έjo´ëÛ·ž$”³Ë")%ùKààsŽÔöÚFTrÌqëŽi·hZ 6–ÉR;pzSÔ¶>l~U›âïYø'ÃWš¯ˆï-,lì¢iešæU†$ó;4ò7üj鵂ˆ<Ôщ\†þµö_–HûÍ_ŸÿðA¿:/ŒþüHÒWXÓ¿á ¼ñž¡­®œ&x¶ÁY2rcÎW#Óšûû¾?ïž´òüîA§~·4ˆ-¼G¤Ê[9 ¥&¾®ðÙ[ÝÆxd”¤¶Ñ°ç¨(që_ÿÁu¾$ø{Ãß²Ÿ‡üY«YC­ø—Id², ó[Gwܺ ç sŸlkëï‡^%Ñüaà}/Qøq©Øêº%ź;«IheŒ(k) ôü(jHr§.ãèkäÿ€­ ÁV>2¤ßxwN”.,rsè01õ¯¬†ËdÛ}«âï€_ôø+ŸÆ» GYÓẺÑôëKA,Ê<ÙcÁ–$$òãr£úúOö¥±7_³w!ÜäKáÝANNO6ï_Æ×ÀÓ­®~žRWöcûDY=ïÀoG»;ô+ÐF:ƒ×ñ·¤Ø 3AŠÞ<„·‚(—¾¨Qü¨Ò>.Á$°ÿìÞó³y^O>PF¿m»˜8¯¸Ó„$ÒîÂÍ×?µí_¢–×ö ýš$–åçŠ[Dù`yu›2H#–ݑץx„öOýpgA²ÜåÉîé@š4Â? Ù‚T~眚ýMÿƒFu ì¿j‹ë¦9" iÞa¸¸1¡w÷êÜŸÒ¿)<9m%ÿ„¬K:€bé·5ï?ðNOø(Ÿ?à—ßu|#Ðü%âh¼C§Ç¦jVzÜ2íhc•åF†H1¾ù$«08Ç ֗Нmu j[ÜÃ#Ég2ª,Á‹‡ŒÍy¿ìG¦¾‰ð ÒÎí^)"¾»%*Fe8¯Å”ÿƒ·¾&ê å¥ÏÁ?‡Åï#hDöºÕÔ #„{O˜àœr=ëà×üñà´7Ö^øA ßhsÊg·¶Ô¼O2ÜBìrÌ^;W^xãqéŸjþ‰c\¨ùŸþú¯ ý©4ˆ¯~3|/žMìÖúƒ°ïÆäïÚ¿0tŸø< gÕþë©?–¥þϮٺÇÍ´¼ŠJç$Ž t®{Æÿðtþ›ñRÑ¯ï¾ øŠÂÿGHÊê–’Û¼ÝpH“ÌÙ•0\Œò(öúÅÒmGï1Æã÷5°ˆ¹çàŽwkñ áÿü«¦«!ø—ð[[Ž&@´ZÚä[œùÍÀ€“‘Šè/¿àðÃ~ãLøãi`^˪XFÌ}×ÎÙýÿ‚Ž: xx9Ë®¿jÜrs_IÚF²Â2_•n#µ~1ürÿƒ‰þþÑÞÑcÕtÿønòÚî ë»{{ÃóEæD¦7Æq½ _s^‡á?ø:ƒá•׈ãµñ„u+NÃ_4ÆdGÊB"—ùøÇËßúÂ.ÑËðGñšùöF±_µ§Çpí¸Ô¡”·#q ÃŽkç‰àæÏ€°Û¤Ò]_ùE7¸X&2&Ýòü¼’Oåÿ‚÷üø;ñWÆ>,ðíÙñL>0’9ÒÄ´Úá‰,Lªê=¨õÆÞÕKÃ$ÿ¯Ÿ¿à¨V°Ëû&_ÉtHX5Y '=×Ì~ÿƒ™¾k(}oPþÈÔH/ý›sr>ÒW8 Âã×5çßµoü›àOíðëÃÖ~$³Ðonîb–A¨O³*?%®@ÁÝŸJýJðC¤þÑÚ"Ø{ùüòZ»$n˜D…ŒQs!-Ôç!Æ¿,üÿNþÏú<W‰,|U¦ÚØÆ,†¦ñG5¤‹lYÔ¡-å>Ü©#8a+¬Ñ¿àèÙ¶÷\:lšÕ´E ¦£y‚ÅÛѧaµI5ˆU„o ¹r¡,9Ç¿5õ 00Î9=¿>Á}¾ |(ý¤<{ã^j:…§V­mt›s<ö~[|Í)`ÓÆëÏjú‹Àð_Ï9Óḷզ³2³)ŽîæÚ#Çr…ø·­zü‡KþÓý“gVy]NÜ"F¥ÙÛ …’{^åðÿ à}$}’¦Ÿl®ž`%O”¹…~yþÞðV_…ß¾ ê>øOâm-5hîbš;‰õX T‘FåòÙ[,y꽩|'ÿ%~ÌÞ¾Ó¼1âûÏiú†›7—òèÛ¬„‚<<†äe yS™7`ddäÐèíçÊŽU‹ Í|÷û?[%¯Æ‰Ct…Íôdç ³óŠò'þ ý–|AáíGR²øc:[r“yqLxeŽæSÎ yÎÿ“ø!ðãÅ:ωõÿéZŧˆå€ipiwQÎDL]Õä9ù.FO½(ø9Xìÿ‚iüHÛ+*K§XFÿî}½7~•üüé1”PÙåäÂýwcŸÌWëÏü3þ ¥ðkö ý…üSោ>.µ¾ñ¨4Ø­´·u[ˤûj™8Á$ª fo@kñãO›íZ¾‘Ú–(®õ[rF6+ÞB¬I?ì± ?JÓåð׼jÛWUóôÙgŽP¯Á½òŸO˜r}ëvîÚâÖæî Ú7X–FŒä€Wîûõ«?n-fý®¾#[ø}`6©âkÛHˆ"HÝcdŒŽ; ãÖ¬ÛøHEá½JæîTº–(òFш_i?)FÅp_”.›¨4Ø,±ÅÈç'<×°þËJöÐø8ÙÛølƒèµm«È~1“F¾ÚA;"$Ô+Ø?f•ò?l?„Nq…ñï‡XúøšÛPïü§®y?¾¤-¼AñcGf#|\FʸïÐè>¢¿Gü4òGj‚䟴N‚i[hä8ü+óþ)¿´›à'Â{{!l×6ŸtL9 Ônø>­ƒõ8¯ÑëiÞ[X䈢—D<©è@4iíÊjQL‡æf›Œw¯Ž¿àŽK*é?VyÖBŸ5¼¶@ žœó_]jÏpmÁ´p²`uúçµ|qÿf´š?üi–úU{‹Ÿ‰z“J¼áHÆ0:ŒŒ}híˆØ‘ò¾s·5ñí‹tdÿ‚¹þÍð[†2¤7nÍ´/—&;ûûCÏ?TÎîÙ¯‹jmçSÿ‚¾þÏW"EXâ°¾|È;"“8÷ù‡ç@ij §Ú4À‡Ø»°F öëU¼;r×È×3²‡¸ùÀ /l««M%ôñY!R®»æ#²v‰«1ZµšÂ¶jˆ±(TtU •¿à½:ëèðH_ŽÆ'ùï|;%ЍBZC){œ×ó¤_,°È"å­ÜœÈæ¿ÿàä¯jGü³ÄcO]ÑÝx‡D·»*¹Ä О{WóÝ{n–š…¼šB¹7Pìãå žs@†‹p_ÅV‰§bbU±Ñð­ÔV„fÁÀ,8úšé<mö­~vä°EÇ' â¹ï [ï¹}ýRG ;‚ŠöÙ_á\¿>8iÓõkõë»k#nXIgæLˆ%R¤0*X0ÁŽ<×é¯ü—þ=àØ÷þ ý㯊Þñ¦ÑíeÄÎþb²[!³×Šý;ð„,| á›°}“OÒáX-¢ JÅû¨ ìv¯’ÿࢾ]kö¿ý™ç–ÞRÓÄ“1,2É€œƒØP¯[þÊÚ•¨\Éioâ׊G´¾*Ô¤ÈÏlÏǵbüRý‚|ñÇÁ÷zÅ WÕ´»‚“<Zõì€2œ‚å 0# â¾€E–lbp¿Ý )ÆT33Gašüiÿ‚4þÀþ ý¤5‹:çÅ_ Oswào\h^»‡SžÖêÒÕpÌ›átœªoÉÁÚ+ô·Gý•t=2Â1gŠãH2¥Š5< wœçâ?ðG=쮾>@ÑÁnWâÌ€FA,¥s“Sšû]$ xÓ…ê´ù;ÿ¿ý|ðöqÓ¾!ÛiÚëê­â+-1®ï5«­CËŽâB m•Ø€]—‘€£'µ}«ðöð'Â߇:5‡Âo >c,Kw-ž›«]ZÀÓJ»å”$sÞîÌÌØË“Íy×ü«O7°D’¨„lj4É$]Ão#õßdø'F IØÀÊç¨ÌkÇÒ€<Þ/Ù‹D¸I¢¹Ó51€cwÖï :|þþ¾ÕùÇàÏØ¿Àÿà°~x¯Â²¶ƒà+KO-ŒRÌ-Wd1<’³nb\HØVÎåŽ3úòê$È_+ÝŸÿ­ë_~ÏP4ðZÏÓÊgÃ6B5ƒ‘ågêOЬ|Rýž´oüñmÞ§ÞZÅo¢Þ\n:­ÔØ+p¡¦=€ã¥&úf¨5ë}qôItÆà$PüãŒüÝ»×ö?ñÂ~ xÀXM¢^ƒ·ª äŠþ6ü;c,PyW.£ÉŒGµz` ùØñ“¯]üð¥þ«o?…,|I«ézE™˜ý¦Êé¡[‹£°¶V^]AÉã+§µþv…ÈÂÃëÆjî«ã­R÷C°ðtÏ^Ñ5;~ÕVݼǼ»‹Ëœ4Ç‚6ò`©9éUo#–Ã@»Æá#(ù”öï“é@׆µÛË-"Ú4•¹XÆÅÌWá]†Ö—ZGˆ_Æ6ÚÝ–©”m [ÙÅÖ×—^i%Ü“B,0eÚKñ’*¯„-D¾±Ú *Äß½uR@&çéJƱó¶üÚ3à ¸j=^6Ê6ÑÖlžkZ· zF8¥’×e¹`›Š˜ë@#¸³ÚDšs+×Í=iŸði1KUùO JOô«ªsnÍq”‡M6]+ë6YÐeøÀí@iÙÜHvÙÉ–Æ·ñ¡$¶ƒbÌy‘ÇÒ­Ù[l›ÑQSŽ2sŽ)ñÛ(a³É=;šÌŸT´ÀOŸ“‘óŠ­(†ý¿wk*ààŒ`{ èþÆ ±eÁÇP* ì—¦à•c ó¦[–¿³f`xÎ)ßÛ‚)"cfá “‘'¥^Õ-yläNH?ÅWD"HÁÁ(!|@ë1·Ž2>1VÄÑÈŠ­Üüó…_û1\yj}qŽ´„ß÷Ê 7   ?ÛÖû”%³¢7ÆDŠgÁ;8Œr>”Oàt&M]-ÈR"F}›ŽkоØêÚ¿Æ[x>Fµ×®¼I¥Á¦Í<‹·½… —GË+#ò;pEpâY Õ·‹ÓšõßÙÌý®þ†$îñ߇ˆïÿ1[Zýÿ‚·üý¤þx_ÀÑþÓ¿4¿ˆš¯¯-†˜ÖöO¸²Ô¤d#;²X€ù _—<×ëÏÃÉÿhûéðkÐü0ºÔź+I%Ì ŒCyª8Âx<ó_-ÿÁxôµ¯„ g$ÿ¡üCÓ™a* É! ±'ºõ«ôSÂÓ´º|\œÜÆŠ g88Д|LñwÇí3@Wøaà¿jº‚gÌŽ}}âÇsãÍ|·ÿ‚ñ§ÅíbÃâÆ¡w¦øfïL“ÆWçPMö{ÖÕ2_nÆ…UBâ¿D£„I>èÀ8ÏÞ¯àšjiº_Ç«q4ó[CñKTXÖVÉ¡ÇæhÕ~'xÓãñ𪟃^ ðDZÆCÖõÃå8Ï!DQqÜž+ósãÿÇŸÚVÇþ iðÎëâ?…<;eñNC‡¢ØÞ‰4ëØdY3`áÕ\–`*8ìe ð ÔOóú×çwíÙ¥KªÁaþŤþîkhà¸q!‰ nÈ  þ ||ø½â¿¾%ü,·ðמâ#r5Ø®¢`;…vG§íßÚ:ÜgkñŸçQx2±Þ±7äOJßHHù\üì2Ò€???àãjžÿ‚Wø² ZÒº¾·¤i¤gó/bûàâ¿ 4Èmî4Hâ ™!ÜIÇPNpã_µðt¾­ŸüJµš&i/üu¤EŠÄy%fW,Gñp¤së_ˆþÓ¢¶²´Ü¤0a'’;~´Çø 5+‰³ûåQÉàס`_Ýÿ?SÊF®ËÂO-­í¶Y~Y‡nŸ•q$¬/nòÃ?k˜œwùÍ} ÿï¹þ×^2ýÑyj[éö¨kú#ÿ‚Ò[IâŸø%—Ç›(J‰gðmÔq–ÎÜíã?¥6¿²/ì~~Ð:F½âi<› =âžfÆì*O·©Ú¬qí_³_¶ü;öný¦?c‹Þ ø}¯xžmgZðÕÅ®–·þ»Ó“P¸tÂ$M:.pA'Œ xãM™Š­æŸu#§Êl0¹¯!ÿ‚H)ƒö3ÒÖY¼ç}JóÌ$`ÆÛðsùgñ¯Tñ7ÆOø?Â:´¾+ñg‡làºÆK_ÄÛ‰Fù@ ÉözW‰Á3¾;xó-–‰ªø§AÓ5[;˧¼µ¾¼ŠÚe+l#J²àƒøv ­Šn!< îõ¯—o+´þпæò÷o³g8ãä—"¾‹³ñ¾…o–zΕ<IRö6Vô†æ¼göÒñ„´ü0Õe"%'Ö¾sÿ‚½kú%¯ìwªi^&Ô-­µ]ZêÖm6Ùå %Ô–ó,ä =HT?Ž+Õþ þÖ þ0øßUøã?ÞÙ,H· ×i¶¯°f9QˆhÜ`åHÈÅzD˜‘vÊp±ò­Ž§üþuñ·Áé^Ãþ 5ñQ$Ék¯ Z´yÆ<£·ÔqÎkë¥ñ¾‡.ž³ÿkiojÊ9éaêyö¯~(~ß?g¿ø(6µñîk¾GÔn4]}JH®ÖPTÇkä_,ìªv@Hû—ãáPø±¢!¤}óz‘Ó÷þ}ëøÚÐ.ÅÕ¼…™|ÇY‚öÈþUý6jð[‚ÿþx¦‡øÞ{é­®tå‹PðåÖšYÌDNŠÑ.[àéÍ0¾´mAò%Ë-œbÙ¥Æ … BÇë·4×ßxëKŸàŽ—àåœK­YøÒóÄDP~îÒ}3ÈF.Ny—½ºÖ©s¦™ró.bŽ,p:Šö_‰þ±¶ÿ‚A|<ñŤ°ø‚Šþ&Ò>Ð!_:âÜióL‚I>ñXÚ% ¤àv¯œôß\êÚEÕ¥ÔRÜÜ\BV!’;yãœqîh\´V¶ÖvÝÍs,› Šwi› ¨ˆ f$€A$$×´é¿°WíªhðjZgÀÿ‹²Ù\Æ%Š_ìc˜Ðìy×>Œ ŽàVÿüÁ 'ü;ö{Ò¼=­éZÌcÆ}Ⱦ¶‡Ì·ÏÙî%’ ®rdaMÜŽ˜ÖÛ#qbmNI<ðö äFø'í%exÚÛ[ˆxwLñLj$ðíëéÆÒ'{‹x|Õ8Ê«»æR™›â/Á¼quÎ·âæ±rwYjzæ§w#m¸É2DÃqfS°m žkïÏø)çüŸÃðSŸŽú7ŽÐ1Œ’kÃtoø4«á-µÀ¸ñÆ‹š­²nÆË¦Àýcµ 1ƒžháßj?ðMÿþÔ_ ì| §k>øS{m{sãMCRºÕ ¸²u¾Ë§yxÊ(¼²0ÏÊyìüI¬ÿÁ"?·’-7Gø»©[·µæ‘'ˆ¾Ã» y`«©cƒ»*¤qŒçŠöŸŠ?ðnGÁo…Ÿ¶wÁiúÇÄ=WÃ??µdÕ¾Ó®²^B-müÈü‡ŒŠÒ2†ÇcŽõô¦•ÿºþÊvVBGIø‡}Û¥ñ¶¢¹ÿbP1Ú€?=5Ûÿø$¶™-ºhÞý u5™Ê<¶Ïâ4òRwâIvH “ÎqŒ×%âßÁ14‹;±àß…¿µµuEíUuMRÑnd9Û<×!càonä÷¯Õí+þ ·ýôäᮣªÇ Ä£QñýÞ;üÂIŽO<ûè´oø7ïö7Ñ÷|=¹ÉInI‹ÛæcÇ¥~ hÿa­ )¼eû8~Òº~ª„ÖöDöH¡ˆM³Ëz¬Ä® |£ ÀÈæ¼ãoíð/WÖ.,þüñ'ƒôùJ¤wÚ§Åioõ#6é#µvkw(m #×*9þ˜tßø"o앤°hgo…íydÐâ0 Ü>§µvžÿ‚hþÏ~bÞø%ðÆÖgukž·Êàc?w¨cÔPó9¯~Òÿ²¶“^ø/ñ^êâ2«ç_üe†?1@Á%c˜€IÉÀ¯+øÓñßáG‰ôû8?g¿kÞÔ#¸WšóTñøñÜÅ‘˜VÛq íÆr0Gzþ¸t¿Ùá6ƒj-ô†Þ¶ÓqœÇ¢[€9;zg¿¯¹eðCÁºtâKx^Òt?èþV“ÆN¯lvülé¾%ÖõrÑi0ëwŽŸ{ÉÑ.¤Ï§Ý„Òê:æ±fUuØ5 &uÜ‚ïO–ظèH¢’=ÀÅgVÞ Ó,>}7HÒâ¼p¢dŽÒ1´¢óŒœz×äWüWû;éZŸÀÛO‰:¼7ž[>YÖ<ûKÛÕIJ¼’¤údPàmœ’\øß>`BC°ÇÝÅ_ñ¤Nt»ˆÕc1FªÙ`K(Ï@ýkÒålüC;ËŸõÅ2¿ÃÒºIÚ\ÈÌûe‰zØé@ŸÑÞ QmÁ2?—µGV “^µû1\ÏÛ7à´RDËö¯ˆ~‰3©Àyÿ¾kÉ~n_·H?…ãçÓ¯jõoÙ¥„?·À©$}žWÄ¿ È éÿ!ºž€ry ×ãŽúòÔ«!”$}õõ® ®Wÿ¥r>ÑÞf¸¹yÞ`ΡcaÂc¯¿9é]k(E!c=}¨ósþžÕàœ:Jj6âIÏŽ´am ÷Mç®â>«‘Ï­~#HYm´xpT±êGô¯Ûÿø:ÝÏÿÓ³k) H“Ç)™üó¯Ú(Aêôàü/ÔnÚïM²Eg G™ÇqþEsš;·ÚÅlR6iSýçÎqp!±Õ/ÒpKÅ{2°^ìç®k·Ká½²x#Elnó°g8®:Kv›Æº ?!ò±ãß8ýh½ýš´‹ü~Ðôj$–ÒêHüÄq•eEÃЂAö5ýþÝðKo^ÿ‚yü\—áŸx_^³ð¥î£¥êšn½Å•âÁ¹fF@ É ?_²µïØ?i¯M ÀV`q×ïÆ¥R?µ”Qk_±Ä‹s½b»ðMÙ ämr3ï@ÿÁ?àŸ |ð¿áo~+øAñWˆþ4xB zÓWÖlæïB¾Ž7:|-&Lvî§ÎG*É('¥~Að/ÁvœÚxGÃ(AÉÛ¦B;c?v¼#þ ¥á›?‰°/ÁKÝCÍ‚ëÃöÉwc*|®…<ÈŠœºÈì¬Pkê5â€?:lo‚¾·ÿ‚¦üÐæð^—©xKÅpÉ6³dÚzËi$¸•ÝOʇÆ@¯¹tÏ€^ÑÑSLðg…m‘8A• ù-xŸíb‘þÞ¿î倜Æð‰÷ãÇšúpqÔŒÅp÷ <)©xkQŽ_ x/ˆWû>!‘´÷ _$Á+¿f?üHð…÷ÄOŠ¿ôI„W…Á;,LøO¯Û*mò¼Cužs¼¿‘ gµðN‹¦ÜE›¡iÚì?4vq¨R0Àó‡üO‚Oü—CÓ·I‰‘1 aîBË þéìkêÀËå‚>æ:b¾lÿ‚ŠxŠ? ?ÂÛÛÅ•Ãø¶ÚÒ0CÊT}†4ô(Ðl_9±³g¼*xüªVѬÚZZ˜›*éå.ÒŒTê~b¹ÃŽsê)Š\ÞHr|¼(ßœÿJøkö øà_þ×5ßøWMºÕüâF‡E¹¸·R¶I0mÆû¼àØãœb¾èT*¸8p€vòÏì=µýªhKÿ¶á!qòÿËN~µõ8ùNä·Ý>”òçüïÃVZÏìm«^_ZÛ½þyg$˜•¥‡÷Ã!XŒ€FGî ¼£Ù|1ðüšN› +¦ÛïmcÁ>Jç·>æ¼Ãþ oa£ûx†-G>P–ÙÇð(ù°:ý=ë×¾KöŸ†^’ÜŸÙvÃø‡”´&Œúv§+Ftûx¼¥ùU L Î08õ¯‘<#¦ìÿ‚àx¾ û 9á>‚æÖbtrÊ­òmœ[9 â¾Ê±ÑaÒïo. ‹æéÕU±‚ØìOúWÇzmëXÁsõ[C6ÿí/‡)*¡òÕ%{ó‘@LüjðnŸyðÆÛØX-Ôú5àyºÌ`p 8úsÚ¿sà-?cÙð8éƒúƒ_ÚGÄØüÿ†Þ"ˆ¥´Ë•-똛šþ.üj,|/°q(·ƒÈ7„,¡€ìÜþ4ô?ï—Uÿ‚'ø_L†xf’×㇈HÕþks&‹;¨qÛr°aê5ó>‰¡\hßg¼†h‰Œäu$zðkÞËÿȹ,«´|plâãÂŽà{W“ÛFntrJŒ²ç=vнÁæûOüKö|}¼·#8Î1þ‰wÞ¿­G#VËîR?\JþI?à‘cìÿðTOÙëqŒñ¼ îéÿ×\×õ¹’ÌÒ¨c·+³¹Áëõô €œ>IÄ`vü­4—$D[Ÿ3¿ÇÚ”bÞ]ßyeãóÏÿ­ýi `æäIžsõõþ”² “Ú#8aÐ?|õé<ÔHüáŸ)‡ÜÇ9úR¬ž{d¾WäÿýjL°ýøC»1÷ýé@)L$Ÿ3IʶxOlÿ*³0Œœ: Ìÿßÿõ÷ô¥!FU~e›’ÝBõ½)€n_!˜…Nž[³ëÇ4¤ùŸ¼ÆÑå?¿ïþàcý§c¹›þ +û5µ¼î–`kÒKC†ÿCIqÓÚOò¯¦°ã³µ$IŽÿ=»×Ì¿´Ý¤ÓÿÁEfë¨åºÑ®¼^%Ç‘“hßþ×'ס¯¦¼½¿èåÎ÷„½Çÿ_ÓÚ€»Ë e#aÄÃ<¿3ëïøRËYfеqГÁǧ·jPþqÊíO#†ô‡¿­!˜(ûARcs+ƒë__jW ¶R ÃdÂÞƒßéÆ}h™Ùmø˜çžä{{úzRl1b6mÒM÷Ë1ÛòíëJÈLQ’¯ ·üôõJaòL%€À‘ŽùëôÎ{d8û^|Ö?èüò8ïï×>Ô†TdûHSä.A“ëéøÐÃÉp%ÙÈó‘3éïøPFòä@Wí`4ö+íúãÒ¿4ÿàè©`ÿ‡Z|A hÞóCŽ6Ju8@cëµ°HïŠý,òÙÉ…lè74¿ßÿ>þ•ù£ÿA—›þ cñ îY<´Õt¤{Lñ3·6IÝówã#  æ’Ý$}räZç/pëô®³Ävžf“r$‰›l@íïÓ9æ¹ÍÈñ$›0º—¯×ÒºÝuö{,8Vò†O^@çŠå¾ 6 D·÷¢øCV7)aãiãÛ¹Žx­înV)'¤Š¤•nÄf¸€ä‹-WníÌaŸ©¯eýŽ4¸õ¯ø(?À8/ºÿÂÈПïí;–çzóõQ@{ÿÁVà•Ÿ ?à:¿ÂmcögÓõ<ê¾0°Ñuiå½{«­@Éu™K¹$Mµ¤ Ž2Ù_«~ÿ‚Q|,Ðü?Št=Sâå¾¥x®ü,-\£mQ…òÌå@àd3_ÿÁ||WªÚübýŸ4ƶ'H›â%ÃÌÍ„g7ñDÊ{î<ŸAë_«¡ÔHÞP^sœ×ëÞ€<‡Qý’<9¦xzùλñ"XR f†)<]}"Æâ3†ÌÎx â¾Cÿ‚|L´ñ—ñoCµ¹Ö.uH5˜õ9æ˜ÂâPÈIÏY·ÄÅŽrA×览/‡ïÉkZË·Ÿ»û¶¯?àÚqÙÃâ©§–Y|¨@6Œ1H‚ÆÊO™IÔúæî·ôS÷Áõï_ž?·…Ü÷ßðVÖšeýý±K˜IHd*®žLÌÞÙÀÚ{‘Å~„,‹´ÀG¯ùýkó«öÆÖ]?àµß¬®#‹ìës.Ðw±kk€2O}ñàvÙc/” 3É»ÓÐÖãȬ¬@>X0ï\ÿ‚]fÓB¸Ú]ÉŒJÜ?»v‘å<0sþzPæ/ü_ácþ ùá jÊîæü=ãË žba¹YUàb÷ÚÒ‡SÙ•Ojü:ÓõEµðö§¨_:HHW§8 ¯ó¯Þ¯ø: S±²ÿ‚c}’þàGq©øÏDŽÒ ØónÑ™qÜV?…~ø†#ƒ£ß”_´Ã’ßQÍLc {jTªÃ¾ïÚ¸Û§Wñ†¦ÐŒxÌž™Åv6eÌɰã`Ï'ÍrWÀCã}_µ Ê­tÿ 5ËOü]ÒµËö[K?0¼Œx?+÷3öÿÿ‚âüÐ?`¹Çì¿ñÀž=ñWŠ-¡ðüºE½øžîÎÞHvÜÍ$»T¬ß)b£œ×àÆ­oå« ºzgœÔvz”ú ¸ŸË’|lóáGmÇœ{gûeÿ¯ÿƒŠ| ð¯Møwðãu†“à¿xJº·Õ|sªëQù3Ý…ómÒd˨qæ†/€ 3šý ³ÿ‚àþʾ߇¾:øRg%6¶š‚ÍvŠÄ.Zù׆엽)òC wѵ¶È±ò´b:VVÚÒIÖ#.Ô{±<’zäúÐô«ûJÿÁJ> ë¿~üBøoñ+ÁÚî‹¢Î^æâÛSŒ¤ \£‰yÊ ê8Ç5ëÍÿ¤ý• Ö4Û>=ü37ÂËöe]j'MѲ«F\ªûœ¤åˆ8Î+ùMŸDÒàieX-džàbYD@;ŽƒsõýQ I-É…“ö“Šîtÿø(¿Àmfrš_Æ/†òÈ„nUñ±<ŒŒüÝëùÕt»Z3©,WPFAEeÈVÉäUx| ´YK-!‰=ì¡Çþ@Ó7À¿ø(?ÁOÿµGÅ­SâïÅè7‹.Eæ‘u}­[ÅúB[Ì1±nJ†H籯jÑ?ಿ²Î½áíWVÑ><|6»ÓtU{2jÈDãœuaÈé_Éâø+B°±|Zi¨†`¶Ñ¨b:Ç$dàöÏVçì·7ñO<‰$awA½3ýÆÆSðÅK?ðTø*ïìó­~Ä~:²øsñ‹À"ñ1Ób¼Ñô­?[…çÕgÏ™(A#2í;}pOjgì{ÿþÍ_|k£|\ñ\ u¿ éðÃ-¿Šå†ÞÞóËQ}šæ'x¦ ®v+n”3_Í …­ÉkX¡Ä…˜¢Ä‰ÉûÁ°sÇ5nëQ¶YdòÂÀÊ«µb N{Zþ¬ÿáù¿²[Mr¿´GÂò!MìŸÛESËŸa“_x÷þ ¥û1hÿðT-#⮃ã»–~¹ðÕôÚ>s{2NÒ¤ˆþR!(ŸçŠü%‰áº‘dk™Ö@8ó{ƒÛð­"¶1ÚæI^^™v|àûPô­uÿþÆ¿üªZi_4«g¹²š–÷Nºµff…°?yÇP2{ñ_ÌÿƒQáФûDf&S"ªä—Ì}½8åvž=jK}z-6tº´¸‘¤€–UiX‚zr3ïZBÚ%± oÀ#®hÑ%›oüRì ”ÿÅïµ"ßÂò…}ØíŽëÇõ«™ô_ÏlÅe†ÎWR9Â6`yëÈ»Vøž‰û7Éðþõíѧø‹iâ˜Q¥+5ÈM!ìØÆ˜ÚÂ2á˜îtÚAòÞ9a𬊥ƒ[Ïò¡•ò˜`yÇ(ëOÙ+ÀºOÂßø,ì×aà«8ôÍ:îçùŒ6ð÷Z}ãÏ)'»¸ÉµýO´Ç;ðD©•òó÷¹þ¾µü­~ÌúµÅÿüöP¼Ô§4Ö~ *b„#¢ýŠø* ËÁç¾?¥4)ä°Ý,OLÿZ`ï?eÏšÇ÷Àõ^?Ÿ§µ0˜„öÄô¿á×>ô7™¿i%Lm˜Èþ?ÃúRr|Å\\0ÁŒžÿ=é®ß0ûi8fýÇ®qüúþžko öí½?‡nzý?­=v?pw$‡÷§©úNÔ…T§—&Ñm€ûöü¾´ÀáþÅ»`b'þöqÛß§áMD-Õß`ÀÙ\ñøtǽLebs::çÊãïþ¿JM줴#3¶<Õë´õ»zÓ2É*­ÙÿHlùÐz}}}i«#—+oƒv˜óýÿ9Û@x Êþ •|¹ÄrjZ‚œmPœ×ÛØ pvªœÂØåÓ×Û½|3á¸Sþ •rd åkêÎ8ìkœûg9¯¸ZUP†÷w”ì°æ Ž?Oj›Í}ÂB¿é{vùyãáïøR+yd›r]d9˜ã”8ôþŸDZ]û Oí-¤ƒ—fôŸ .ùû?vÕb.‡ñg¿Úéø~!bò˜í¶P6HR;gú÷¥óW7Ë4yòÓ¦ñëøþ•XMÙ•ä#û1‚ùDtÎxÿ€ç÷ü)ï+†Qx?ÒÎï³QïïÓu|ÑûL@&ÿ‚‘þÍ· ?|ëù_8. ´â>¬@-Èô÷¯¦”(ÈW&ËžTžÙþGµ|§ûMÏü= öklÿµ>ÃâQ˜ùû~̙أ‚¸Ï'Žëêa,?g+šCyŒzžsí×'±  ÿ×ãÍÂNb8â_|z{~4¢VéÚm0çîÿõýûÔO0ií¥”+fÔã—8ôõëǧ4‚â]Û©Ôv€ñgå Ÿå×¹â€%!bÌ1É>KH?åž—·¥&<Ñå3l[|!é.;Eç*«-«¶“rçª×éî;RoGEK’Ò=¦ÙÇñ‘ÓëŽßÞ  Ë0ûVÆ/È îÞÿ_Oj]þAà‰ã–=¢áýjžVo1•´T“€ËŸ_CÁ'±ãê ¼§o±–q)ÍÑÇ1œuǯAN~ „ƒìÒ1 ”žXŽ Ÿ__Q_š¿ðt}Û\ÿÁ,|| e5ãö·ä}{Wé’ŠF §®ß*\äŸ@qƒß§×ócþŠº–ø%ŸÒ…‘õ]<¤jÛ~¤sŽÔüÖxsçñ;ŸîÜÊ}Ï&ºÍm™¹ô à,‹†©”Îæˆ.{c5ë³§Äm3à¿í{ð¯Æž=YÓAð‹týgQxai¤KxÙÊÆ¹g<®A&¼‹à3Ò¯Øg–‹å#ÔJìµÈÒ]:_7€cÀÏ­}ùÿ?ÿ‚ÝøöÙ†Ú§ÂÿxŠßRømãŸøIô[-µX-nhnöÁ†è·ÊJ‘_¡Þÿƒ£¿fx;M¿ñsüEе{˜•î´¶ðµÍÛZ¹e­Ч 2±Ï¿=#Á¢ÑY¤•žFAúÖ’ØiÖîY $=—“ïŠþŠµÏø9«öP¸ðýüvž ñëO=¬±Çx+P™‘€Áò±ÔŒ×ËßðJ¿ø/ÀÙSà^­à¿Z·‹ÍÄšÝֲ𵗅.f²Hç‘nDjd/ãt„m|åIäÇ´Òìä}¤Æ†Ê}}kNk [e@LQÉ»oÌþæ€?¢ÿÁÊ¿²‡ei.“ñUñ ³ 'GðÝõ˹ÆeÄxŒÿ²pxâ¾1ý ¿à´_>"ÁMþ|Uð¾¯â½CžÓŒdøVö9¢—É‘UÒ6Œ3üÒòƒÜôù_c„¯‹Ùb9F,íÁ5­k£ÙÚÙ³aH~­Œàjýìðüû!½¬v~$ø‹¬isÉ)b/|-¨Ä!à`ÈÆ"ž€’<õ×ê?ðqgìye¨D‡ã•7sG§Ý2zr¯ò¯ç\½¤wMˆ£Ïúã.áïÚ¡Õt¸n.•<Â-¤o“ê2s@«ðpwü›à_í¥û)xß²ÇÄoø×ÄÞ7±Ô§´²wÛ[ª¶ùv²Ž;H÷¯ËÿÛM‡o".Csl®»GÜ,¤ŸlzÖ?€ü2&ñ®–òß³!»QµÜ±<ã'Òº_ˆµOí[‹'b¢é"\t+?˜ oJ´û3¼®@R£-‚@>ŸZäõu)ãmLc $êÇŽ¹E®ÛS¸ZA:¥Ô©<\f§j!ø‡©ÂÅÂCpsÉaå©ühÓÚÉwz°[D's®‘Ú%d˜.îÙ*{f¿Zþ ŒðµÏÀ†ñ}—ů5Ûxlë©ftk%_4[ùÞHqí™ùI'w‚sùaáKtŸâ“ °s*àwÌ/_ÔgÃ9[^ý‡¬gEÞóø ‚<·úùYÿžÿƒw<ÿý‡ü ñsâ'ÄÿxRñBÏ,úf›a`ö±yS4`+M ÈA Ë[ŒWÔÖ?ði'ÁØ&v½ø¡ñts‘›m=ö`ó¯Nÿƒ`'¸—þ¿ðÂ;ئ‚h/5XйË(²à@F;f¿AüââRv mÏoóÚ€?Ÿ?ÛÃþQàÙOöÎý›þxoÆþ7¾Ñ>6kwZ^«u=½«^éË{Ñ­vD,xmáð9â¾¼?ðhÏÀIÔ-çÄ‹“ʤ‚SS†#uHÀüq]§ü> ˜à¤_°Æ¬åc¶±ñµÚK)`» ”^O«2®:ó_£‹s›¹<³—ÎõÇÿZ€?)*|—âž!ðÅœRi¢÷]¸¿´34ª˜–&8dÃOCÍzgì}ÿÕ~οe¯‡Þ1ñóüOþØñ^kªÝ$~%žÖY¢Ê‘¡ÂIÂŽ¯¯ÿà³¾?¿à–ß48ØÔ|9$Q¶ÍþSï]¯·©óÍvßðO Ù-aƒÐÞòñøRÂÏu‹n}³ŒÐÉçþ Yý—Mª&ÿŠq‚HñmÎÿÆ |aãoø" þ ‰á?ÙöÌøî/†Ú÷ÃùüO,‡^‘ïÚö7*U. Þ±³)œÕûÎ÷/ŠÃÍÆrGjøâßÂk›ø8gáSQgµºøu{¤›6K §¸;I9ïŠóÿÿÁª³…¶‹}¨i:÷Å‹d´³žTSâGq#,LA9É qßï_ÏÃfmkÃÖòê#lÎ8äÊFvg¦kû9Ö®¡ámF4uA-”è„󴘘Ç¥Úv’þ¹Ôìî¥Ye±¾¼…œ ){:’¾   ñâÝø÷C†çMÿ„5¿`ðíùð5,€Xäø‡¥îa…Âùä·=·`©>Œ{×õñp­ËZ\Mºæå™¢œžbð=ŠçûÝûÐÑ+K+GdqsiÉûÀò>§±íQÈÚ¹Lg(o1qÔƒÉÇ ä֢߯£ÞÈmàuIm0e|ñ0<‘ŸCüGµCq1hÈþT •ksÃHÃø‚ÿxcw>”¨ò‹r†øoŽá‚[Œò„Ž>½óÛ§Õ H$Í þÐÛæ ±Á^™Çé·ñ¬U×ìíO™$ÑËÑ ŠÙÛ>ÿÜÏ$ö5j$3(²ŽáÞWÅâòÙÿßÇoJÑY¾Ôíö!±m˜­Âþ°ã8ÏãÝúTbþ4¶Œ X8cÇ “Û}óŒvëUB¶%6Cö#†“¯÷3ßûÃóT¸`¿Úù€/ÙßSÜãûøëì(Ü’wX.Žé®Iò9ò»àŸo^ý)¡Úw6ð8[¸´ÒôóAÿÀj£D-1o½%KÂO™»å€vÿ€ÿwÞ™,k 6²N‘"h~ÿ‚˜_k0¾¶Ót­;Y»k«‹–òâMš€ÌÝ1ž­}ãg«ÛÜØ[ÝÆÑÝÙj*­fc}ʪÃ*CÇ®îÝ+à]5Rçþ ©%ÍŪJ²ø†ê6¶‘Tù¨,<Qšû^ÒI¼+zZÊ[CI¿#l-0Y4à~ð^ÏpHùH$õÀM½Ã}ÉþŸ·Ì8È8Î?M¿ ¸R7ØSËͲá7®ÀÎ3ß®wwéëXÒx†Â?ø—Ëxë!]âvœýÐz矻NÄVzž%бœcµgOîg§ûCóÓ„&º‘KiÒ²,}ÒN7m÷àcøzÓšW‰Ä7lZîRÆÚLçËœíßûÕ”¾(²é¦`Þ`Úmpw!îHÇÞçæö§¶³kkþçy­rII‚1òaœtÃëÞ€>Rý¨Zºj òcS8éýÞ ÇšùÏKý¸¼spu3{û0üm‚8ÑšÍg¹Ð±tC0C·P%wmM€oAçöØñáÑÊ/ìÕñÀêQÎP¨—DóÝçÎÏÛönhmÃ9Ú4ôA¼¼Ù« T,.ÔõfŸ©Ä{Šb߯U ÎãdJ eæV=8÷ão¥|û«~Û¾1±½Ó~Çû4|ožÞãbÝ}œèí©c‚&Íð'ËûĨ`Ýn•‘¢þÛ>/êqÝ~οŽ˜¢ÕËi ì1­ñq¿'ï*íÚsŒÐÓ/s>í²ý¦UŒNyM¹þ]7æž“»ÊÃOY2¯‹ÁŸ™ŽÞ€ÿ{çû¼WÎ ûrøÙü7<³~Ì¿SSIÒ8a1hæåÕ±™Tý¿ËÛH!˜ÚH ‘›þÛ~4{m:K_Ù—ã§›4aï _ìŒÛ@ò¦c}†#%²…ÇÊFy€}&O³+Ê3¥°_%G@Äðq×nq·Ð×çüç¯üÆK©2´‰¬ø}ÔŽ¤j@}H}ëêý¶¼\¾&’fïÃLÁ tÑéf$(;•Eæÿ˜’˜(0TžÉø¯þøª|Qÿ‚Cø›Xñ¯„¼Mà]Jï^Ñ`/ˆ¸¾·TÕ¡ XÛË$eX ÊC“ޏ9ùâðã„ñ#î;OÚ¥ {g&ºÍ^H¿á Ôà3É´€;ã†üëÑ?ˆÉ}®Aøä×Uâ[o ^¼­ÓåP§žG  ŸlF‘ª€2Å£8¸5ë?³_Â%ý¤j/†ÿµ‹ë½"ׯ:ý¶“suj‰$öÉ"JÅã –PûÀŽOåÆt}T®~YcSÿ|×Ñ_ðN çÿÁL>ÊKrG,¾Dcû›‘úg? lÿ‚–ÿÁ!4_Øcã?ÁxSâŠ5›O‰þ*MîãPµµIl#3Gø–ÕY¿yŸœ0ξÆÑ¿àÙïKoæ/ÆoËÞ²éÖ>`sÁ–Ü £±Û’{ãŠì?à·Zwü$Ÿ¶7ìö_Þ¸ø›ˆÈÊŒe›Q·>œWé¾e$0l1Eä Ç&€?%ëùT=2ç-Ó?ºjøwþ ÓðÝׄ¿àŸ×ÑÜÇæñ¶¹!²X5Û•oLí"€<{Pÿƒcì ãÉø««þó»iV™ã¯HûWËOü¢åà¨:ïÀ‰<{¨6¢x.?ɬ=”%¤ó&hÖ$ @Óóuãñ¯ß¹áœFpKÀ†éè?¾Ðü+,Ÿð]ˆ:«?%ø]afÄ7.åÛíægò ÐàÛMÄÚx¿¾ø©ÄûÚ?,hV¬’½ f|\ÿƒwÂúv”<;ñI§¹Õm,ʾ‰i²I»¼£'ëõKÂis˜¢Íb– φfäÇœ{Ö'ÅfÕ žƒÙá6·fr%ì@ÏÒ€?¿à©ðK{Ÿø'ßßø»Oñ ~"°¾ñTZEàr[}”É ‚7È'pi6&;oÏ@kâ½2ØÇ¥]Ï>ï&iÑ6¯oÞõúv¯Ø¿ø9ÓS¸‹öEøy©hѼþ:¶04nZ² do4öQ¶ü{+ñÒÖyãð."l‹¥Éê7H>ô‰ãAmô›hs†¹™AR>b™çéŽ+'Yæø•¨¬›T+FɃœ‚ƒü t~&·Ž}F#f¶!‘‰û„wÍršýÁoÎê0ÒC /¨ùO½á;QÄ=ï;Œýbq_Ô'ìã,’þÂ>–%¤ð2„Ïô3×êkùuÓîî즈°$Äez†ÁÖ¿D?eOˆŸðPmö[¸³ð…Öt¢úf©¬Þ ,€4õYUÖ=€‘æ+7=úPêGüç¥Ûøoþ wà«=.?/ʾÔu¬­pÌØüOjûnyC[炬q_‰_ðD¿ÚŸö¬Õ?gy4ÏØãá'ÃÏü7Ó5Ç€Ýëþ “F¹¶œª›˜ÁXä,‚BNý¹RJàâ¿Iµ/Œ´ÌZ=ÔºÀï‡r)ž(ßâ‡g€@³#“ï@<ÿÁo¼=Žÿi_ÙÃzÓÞÁm®øÕ¡{›i s[2ì•&Z%n3À9É¡–ä¬å73I,:dûœWãü‡ãí­ø»à­ãïèß uÈõ‹x|ƒ]MJ'ñ,Ò*FŒà.8%q˜ÞPǯ¯~üCÿ‚„éöV6ßþ~Ïš­ÂZÇö«ëÝYI4§ïf%·u ž 0M}¥áæs$¸ q’ íÅ|;ÿaºÿ‹‘ûPItϱ>'O *NU£ÙãÓ–aøW°¿Š¿iû¿\Éá|Óµ)‰hþÕâ«›ˆÑúdn2ä¿6?b?_¶‚>6üzÓeoü5ø{¡x?á5²Õnd³aª¾Iû Š>dhÊýà…^s?lüƉ>l–þô¯’à·sØ]¾Š7“û2þÒêGQ’ƒq>Ù=}ëÕ< ãÏŽ2iZWü-o|1Ó®n`Yo#³ñeÜ­nûAePmáŽ:ó^ ÿžÔ|mmûëë–^³ðM¤°Í­H—òMxÀ U1ªìߌõ= }yðÇ\‡Ä? ´ BØŸ³Ýi–³§¡9®‰eÊ—“î±Ú¹õô¯Îÿø'oíûk|Tøc¢jþü,½ð|–ôýVëXm"öæ3·ÈÝmJ¬xƒ.ãü# úÇŸ?io ivÒxSáoÃ]b[̤ÆßÅ“9³bpŽcxzó–Á´æ³o‡nü-ÿøÿÄÂHnô ä?ÄÎ^{­ƒÎrzb¾Ëe@¨ûÜõÿ>µø­ñâ÷í•â¿ø)OŒü-û5§…tߎe¬Þ$¶ ŸÙ £š ³ –8` Îà@¾Ýýš¼KûpjßíS㇄þ ÛøÊÊiažMKRžÜÞ€Çl¾]²¼j„ÀbN9Á [ÿ‚˜îàŸÿΕöu’/M(óŸË@«OlkSö vö*øH'´’ø^È­¹T”ÈÁô÷¯?à þ1ý®´ïÙãÆc⇇þÛ|>½Ñî!ñš=Ä×WVvx 3!”)ÞTϥSý€<7û^ü@ýŒ¾ë³×Åß‚–ÞÖ4ø¥Ð¢×<ww}a`7ˆã–T¸A)?(ݵp=IÈý+{’òèøÎáüëä¿Ú7E¿‹þ ÁðTŽtÞÕ­|ÐAG•â„uû®&·|9á¿ÚßG×¼¿xƒà6¿§yEËÁ§^Ø38s﹞Žê |iÿ¼ý¥øJ?Á*þ*ÞÝÀ¬4‹>º†F v¼¶© µÏ'±À® T³mKˆyÚ6žN9 ~Çw‚ÏöÛø5wM·Ž´– ûR©'ðcœvÍWSêf–[_7ÍŠíÙŒÙÿS“ÀÏþéŠþP¿clMûmüŠÝy<{¥^EÈlûà)8ïŒw¯êâý¥î ±œ5¬³Iö™dB¡ H㣌ZxÖÏÙZ!m0É0$ ±Ô\]~k¶7rneØ·2ç¡ç»cå=ç½:_o‰mï/àK(6yyË2ôï·Þ™sáé¿ãââêíÕ’Þ %ú6Oð0δl•®`uµ̬8·‚ØôÄ;ži-|LðFº}“\K`ã?hó6.ârw©ê°ô¦Áá9 Ã\E}o%ô…~ÓÒV eTÿ û¤ A¡…omÛJuo5Žx$ò3ýÒrIìxú^ƒÇ]E·Sµ³…í\½¼«4…f\uÚG#œmÀ>•¥¦ø¾ÊâsylÐêDÞÓÎÏÏãœs»¸â°‡æUÕuUÁ³p¿;6:ãûÝ@Ç4áöÉqyÕ¶cf>B™é×îwÏ÷¸ —NñW‡g¼ž{ÈäŠrdœº0d`ðGé·øzÑ š«â±Ôæ¶“M²1MfÅþYäRx$}í˜ú6y®RãÂÖ×[…µáhÙË]œbX›yNr¦@ãU¼;f¶©³¨Á&ZÚaòÃîäƒÀÈHàžjù;Â:¢ÿÃÉ?µm­¤Ô~ÕâkÏ.ØçìÅ ð>èÉ5÷}¦‰r™Õì¡’râ//yƒŽY¾ ÷ë_ß³æ©2~×~¾Óo ÕÄšåËÃ5ÈÊå €ý8õî;WÜcF¥°Ô@»wSz瑞~ö>蘒 ¿é¢ÃI—LÕà‚].åv­ÒÈÍvzû»t­/Ù}£A†VxÑídsʤ¥Àéœu¶ÑߟJä¢kh4k‹hõ_CºË¼d+ü'9 ’sï[^ñÐ,ã¶¾¸ŽC¬örýã9Èþÿ'îóë@DW1Z\›Û›8­õ@à8+Ø8î$œnzUÈÒãòí^)­o2ÒLª1}¡èð×-ÿ E÷—Cdu2вÇÕ6g¶‡®ÓÜñUOÄHaßý‡4ZJÎo>P@c×+ØŸâÇA@=~ÑÚF“¨Á`gÔâ-{eá/}Š80æÐÌZ/ùh-¸$ñ–ä×Ö:LÌR[†mÕœÛc™ËrTöz×ÁŸ|y±ÿªø¨ë6šRÚé> ñãÞ!¬Éò!$Ê.üÐwÉû>+O·!œÚ Màß yºƒ´çž‡å$ÿ ãê܆Œ^!¢ðæO—å€zãû¹à^i ¨1 î"O˜\aÎÜÿ{Ô÷W">+<;Ø4 ó6nÁ4|c8ìÎ㟬câr}”Z³Ze…$ßÀlä.ïîô!»ž(´2›† ž[Úð‘€@œv?Cü>†¼ûÂ×/‹º„ñÄŒe2†€¯úƒÀfü3ózÕé~,O4‚IÚÑ.á-öPÉî@=OB?‡­rºmìÚ?‰¤Ötûø[TœŸ´ÆS!Cg'þñýìP­›]©öi rå¾Ð̇²ƒýïîúAl`dUˆY¡Æà}?»žßÞæ¸¡ñIÈ[ù–¦¸>l»°7Ó=9$ÿ âœÿ^iÐ_´жë6Û̼c8îyÆßN~€™ã&ûÈs, #[7'©ÿxóz_šðt5šGÿÑñ|k#HÇXðù‰³ŒÚ”'`3é_~/ÅÉÛˆRÔêLª’ÂB¨=¹íɹãéùÛÿ-x‚={þ •â¹lv4cÄZ»)ÎIÔ"ÏÐç¨íÒ€?œí â2­¶æA’3ßõ×ëŠ`ð¤æ‡.|Ôldqž=8®2Ç÷ž'åAÅÃN¦º}fÑ®¼9+F¢H’3$›˜(;WÉÍQýŸ/‡µVÆwK1þí}1ÿ½´ðSÏ‘Üasã v$âÖðÿ1_5~ÎÊ[ÃÚ¡rùÑsŒ}ÿë—^°ÿ‚ü—ᕎ•©kÑx‘$°µÔ®ÚÒÒyEÙ ,ÈŽÑ®ÝçpF9cœ€Öÿø+Ž•wqûh~Ç¥ i—â[.wmÊÄgýÐÜWéGö¢Cs,h7å‡3ÿׯÄÛûãŸÇŸÁ@>é< áMQð÷‰RðÞ“¤kòÝYê×FUt·rC'P|¸Ãç“ÀýCµø“ñ†ãR¶eð‚’ yœ¿‹e u*PZóÏ€=§âTä|8×Ãòi—%O÷¿rÕò?ü’ÜÙ~Á±ËóxŸW~OúÌÜ·#Û·á^“ñcã_Å'á_‰®n~øIÖ×L£H|Nò»‘g Öê±#>µóüGã7ÄM?ö=µ¶ð€tMKNƒ\Ô ]Üë£OiK†‘ÔCå63<àPè‹K²,)ù[’qÓÛÛúWÃÖšœÏÿ ñb¸O³·V9›8'k!_ÈŸÖ½îßãOÄód$¼øk¢Û>bEâ¤sŸÆÖ¾ðïÇ_Š ÿLñš¯tûÝfMÛ]X­ê[¥¥™d+0œd9Pg6O€?J< /—¢FÖx|³=·j§Äð‡UÀ0ÿnZ¶ìãiËŸÒ¼ÛáçÄÿˆPù6ÚŸôKKa!W¸"ó&î¾_“É$ Œþ5ó§üÃÄß~þÊú—‰|;ñ*ñ-4íFÞh¬¢Ó!µ”¾ü¦Ûˆþa´Œòq@wÿHÜ4¿²§Â¨®PyrxñßxSûÎ;’ÛW·gµ~<_i“Eà{XÂ3C©Ç+•8mŠÝóÛ5úKÿõðï¼OûüÖþ%xö/Û¿Šô»“š<6²Ç$в¡É#ÌÁr3_œºÄ×gMµ™°¶÷3,*pfWþ´Í붯uáÛ›{WÛ3F)\áG8?•s:öåñùÇ öKr3Ô|­ÍvŸl[ÛhÁ+,E³ëÇJÁñÜ2êz"ÅK…²Ü‘óè3øçŠ»á›P<[¡Ãp G5ähüã9¯é—ö žßþcàôv­å¼þ†'@Ü©12àzWó7§0Oè…‰ÿør=‹b¿¢ïØÅM£~Å ng‘d[}:4Áàªî#oáœP+ÿãY¯‚¿fÿŠ~3JøªN§oÝŽr%U<öÜ@õÇJýžå‘7ŽHàŠüòÿ‚.Emá?‰Ÿ´—0ûzÛQ ÑT»N¹÷?/ùÅ~„¼Âe<ê8ûæ€?:¿àâÏ cáGìù«Œ™<3ñ“BÔƒ¿¾TcŸ@®æ¿DV.ûN60 ä·ÿ^¾ÿ‚ûh^~ƾ»€ª;ƺLÛ³¹˜(úuü:×ÙLþu¨’ÏÞÎÑ߿ր,Y݈X˜Ÿ)‰žƒ5ð/üÛM>ÿ‚•~Ú–0yåuOiú¶É1Vtel{aA¯¼ä‰-䙕Á}ÌÄFýUð·ìm,Þÿ‚ÏþÔV®6ý»FÑïDN œ†“ÓøpÃß®hîë·í‘–mÊzmú{zWË?ð[)ì“þ ñEüP¡ôÛ[(æŸçd!VU$î_˜`s‘_Q-éO%”‘·œãµ|ßÿzð ß¿à›?ô 9ã¶mOÃÓE®>HØ‘‚}…zWì=˜¿co†B…¼-§´K aH0©½NêäGuˆòAÈ#îöÿõ׈ÿÁ?5$¿ý‹>µ³,!<'aå~XBñõÅ{ öíۙ؎G\óÍ|á |9ÿx÷S´¹‘Gˆ¾[ÛO´4,…Xwþ2? ûÖÏQ# Ÿ•zzø£Å:\:Gü&Îì°iï¾È…‰Ç FHÿ¿|ýkì›vû`…0Œ:Û?Jó¿Û¿J‹Å¿±ÇÅ[ cäŠóÂz…¼€·Z¯¯jò/ø"þŸ{àÿø&wÂ-æY&—JоÃ'ðüÑHÑôσÆkÙ¿hë&Ö~xÖÒþ§Ñ/¡h[îÈ<‡Ê“ïŽkÂÿà:äwŸðOÏÉm÷á7°È2· ŽO|ú²ââæ{pˆ%qåìÜOÝßõ¯ƒ¿n ½§üëö_×´ó(Ôí¬¯àŽA! ±É6•¸Æ8ÈöÍ}ãwp-n‘áR°I`=káïø(-Ëi¿ðRÙnè9P.o !T– åqú‘øPÜÚ.§q{dF¡³ív6ÂHq´ôö¯äCÇ OŒ7…xXüE¬F2sÀÔ®«úåðdÆ I¹a™ G ŽAÊ¿’/ŠV¡~>üALñе´úãSº Uø?âé4Oø&WÆm&XÕ¡Õ>&x;k« ‡Ž8ßOL/Qžzâ¹=5¸ÑÂÎß»Xù…tm§¹ÿ‚{üupa0Ùø÷ÁrdùÕ‹"åOÓ‚8®sÁ ׺r\¶Þ¾¼P5ð"A§~Ôÿ žÄ0h<}¡¼azäjVø<÷ç¿~µýJÜxð­ÌæÉ¦ŸíŠN\7ñÀ¿¼n•ü²|2™-i_ÉjFø¼q£•*Þš¿Cõý,Í⻹–M2 !1ÈÂííg8Î3ýîs»¸ãèÜMã袷-{6t…XÌ%I!~\Î3·g¿áP¯‹.§½-¨» Qƒ­›oÈ;`qž…Ç~ÝyôÚ™2³håR‹‚ “„;3ГÂÿ ú;íwK)‚æ+‚ódÛÈ?åŽ [³_âé@ÔÞ0»20±i† »EÐÝ€ÃØûó°öïHÞ3Å¡š‘t³¼L¤à3ó`Àçxî󸵉®g[p&Kè1$óch‘O§=ðAù*– |ºµÄ9û.âkl¹€û߆8ÇÞü¨¸›ÆRÇ0]HÌг(´Žåb8þñþØqH|Ww+˜LÇû\ROá*§÷ze}y®$k‘-ºË<޶÷8ª¯Ë}O¡î†¥—VkUÒOæ3Åv«ÆÞ=À8Ç΀:ÏøM&žFû˜7Ûv†L4¼gî܃»¸ãéZçÇ0¾™;¾Ùt§·vòØä'ÊyÛýßnÇšäçÕ休’½›aÕq‰Ç§û½òz+;Ä>%ò<+ª_E‘Û%•ËÝÑ0}½Èî¿y‡Â 2ËO¿ðv£¢ÜH/î¯c¸·¸a…RöÄÛÛvž¢¾Œ‡Å3Jí“È·pí$72ägõ=Aþ•òwÃßXÞjžÒî.®„–’G%ÔFcö|À ‘µîz^¼ú­ËÛ]´V·V,ûIýá<ü§º°äç¡4ÛKã衳–öFÛ¤@¬n}Õ+÷›ƒW¹æ«éP±ŽMQ¥U¸bl°~d•ö8çqíÅy§üJ_÷m£ˆ¤—So²Eo(¤p7xª‚xê+nêú{Y„D[Ê·€Ã`R00{ŒC@·ü&So óŸí ™ú+®qùF;jüpÆæY­Ze´‰ŠÝÆXu –ëßžOñ ãΦȑÚÊò ˆ—);™€ì}ý¿ÉÖõÑi¦k¬3 4õfž¤,À Ø3ѰO‘ ñ¿‰mgÿ‚’~Ïé¨Ék=µÇ‚Íÿø+k§ÊçHëlЭ¸ÞÙ¢$ëV;~é$žª+è«»Ó{nÖWî$2©Xæ ‹ŒcÜ€àCñ ðxÂydNyÊGÚ†á™8ì{·Lüa&öwväd€;¨ü_{-Ö¢ª¦F<£Gžø};ƒ_'Áx5¨5/ø%Œ>Ìèí/‰´GI‘©D¬Ì',>Õïw:Ì—Rù $myÜ’‡ÆõÎ1ÇRzÛ¨¯›¿à·×1ßÿÁ$õ«‹hü²þ(Ñ£a·¦5øÏqœœ÷ Á;i7ø‹$ñö†é¸×a¨]Ï„/´rG1yŠçÊvõ>•Ȥx¡«6é‰ÇÕ‰®²{SiáÍR$‘£™IPä|„tP(¿ìæ›|7¨… /ŸÇQÂWÓ¿ðK÷þ ðCî’ëÎÒFKl'iÁ¯ˆ¾Åw/üÃdzÏu+Äþ)[ óÆ>¸Í}¦ÓEN…æÁ z‚kã—Á?ਟ®1æ,FÆbxÀ°»ò-%—õ9'?ξ^ÿ‚×y³þÀÚÜPH°É%싦vã8â¾£ÓmgÕ¡ûD3 ’½n+ä?ø,¥ä—?±Õò?9mbÕ< Ç žø  ÿƒõ‹kOØoàžƒx ½ÿˆlš"8TòlžRIÏêøÆs_›>&a´Ò¬`v“Êh§”íÀ˜øýÿƒŒïåÓÿd¯ 5’º.¼Í$îV]2l Ç÷²*üû×ãDÔl Ct3,žãžGç@ž›§I¦D±j³8Rׄìøæ²|U(ƒÇG…X´ø‚ƒÔ ·ï[>#Ö¿²âÊÄÄÈ2Êëë\νv©â &êõ³ö½5s dï=hj9Kkú3îÀðdú~ðWô'û øÃ~-ý‚~éZN³¦K¬ZY=¤wHÓÆêäÑç ñÓüñÏ'•qjÑã %ÇáY5Yäþε³³g™U[nn%ÞK˜Âžäf€>ñÿ‚xx¯Nð‡íkã 4²ÚÞxÓC]J¤àÜ}Žúá&QþÐ󣯾ô[ßiñ¨hÖ[pªÁI8>™þ«ðWàÁŠ_¿m~§µï‡~+ø/§]iWž ÑŒwSÞù³¬æhĪGÌ ¸ ýÑ?fOŽ(µ»ð¸ý§¼k¡Ëeemq£eáí%.õà‰&—}»*±eÁÚ£®p(¬ÿ‚ßøþ¿ø'–ºìÅ?²u}6õ¾^,ëž{šú[Â)»ÂšT²’XÂÞZ×å/üö.ø¡ðö!Õ|uâß_¾+C¡ßY-¥­ŒpÉ(‰î™mã&0å°r:Í}MÿÆøyñ£QýŒü©üMøç¨kGWÑa¾¶OøGlä’ÎH~Ðà4Á… Ã$/$žhëÈö‹ÙËa·¸+\WÈ>ŽßÿðZ‰‰äìºñ­g‹ ‘/•"îÜ{cxëë^ÕwðkÇZÂÝü]ñT%ã{M"ÂsåžkòÓÆÿ³oÄ‹ðVk¯…úׯ?i^8ƒC 鈑\µ¶whxÚÊM‡åÀë€Ú«•:\-lAš3µÆy`FkÌ?kÏ Âuû-|BÓ$u y Üª–8 žO§å ?bOŠžðÌ/ãÚƒâÖ¹} »!k-&8œ“Îà– ±€{b¹ßÛKௌ4oÙSÆú½Çůkvú6=ëXÜGj‹v¨›š&h£RCm=Oè¿ðMÛiìÿb?…‘ß©†H4háuRK¹鎞•ïvˆÓjû#,Œ“Á ü ÿ‚T~ÂÚçÅO„ÚÇ |xø·á;´×–¾Ñ®á]%-LŒ¼ÈWǘÅ6òqÏ9ûz_Ù#Wñfœ–¾/øÙñ’ðÞóA¨ÚÙ»Ba…H8t 1øé¥ÿÁg¾ê73:·„ní‚’8+¿ŒuËuÎÓŽ†¾Éðò•„;îò‘ €ÓÔWãwíIûj6ðT/…¼añOÆo7Ä[kÿCãKºÖöPD0Å$›ƒ0s‚à/<}wð[þ ³ãÿ„:-Ý®“ûSümÕ-®®þÔ먛;‰—™QÌ_(<ñ‚}Wñm ºÑ5û{÷HâŸO™œ— ±ÉÉ< ½ëæ_ø#^¥asûé:vƒu ÒZ꺆cóËóÉÉUä0G¥y‡íÿm²øŸªê¾#Ô¾2|WŸZ’Õæ‘®î⹎èÇ×hýßmª^1_5ÿÁà>ý°þ Ûüeñ爾!ø_Å««Ýé¶ðxsÄ3iÚ‹IJg|[Z}ÅI!Æ0vã®@?gn/ôÅ@dÌp© Fr?ÏZøGþ ªG¡~Ô_³…ôš…µ¬ÖšÓ»‡8dˆËgvÎpqìkß4O€wºv-µÏÄïŠ7e‰yõˆƒ€r6‚°ŽÝÏ5ùËÿný‹ô߃¿¾ Yx Ä~$ÔOÇuü9©Üë£ß¾šÍ±Úh™óµö >Q…-Œ÷ ×é5 Yt©c¹Q(9…Ä¡yÏU5ü¡|dÊý£>%ÝòøË]CõþÓ¹¯ÝÿÙƒþ{àßÙW½—Âß>6êvÓˆã’I ÈP‚ˆvŒü p#ƒÅ~üL¿¾"¡/òø³Xw,vß΃'»¹'¹$÷ °]ÿÃ|K:f¯qg¼0.,З`À›S±¹§z—ÀL%ðê®Ü`àãüûÕÁ5Ïì™ñ…­î%T¶ñ…HÇÝmÛUIãu«»X¼³l8R }pqŸ<´øõàém L±ø×LÚÊ058ãß­IÓ^}­§òà6ÍeÌ 1ap:í/Ÿõ|çqþ!Zþk<¢ßâï…ä'ÈCâí9À ¿ñ1€ä^¦¿¤w°–Úìí¾±µtÃ@ñOæ$ÈGúÆOîç£<àã¥&“âQnno”f2Omä àã–êüàAš¿.µe£Äð,·²}­·Ç!Ø#µ8û§ø¶ÿtŽõÍ[’#¹Õ.c\[NÐIo$Åq<â §kNž+Saå\‹ÆÌæBHzØ9+þÏcÏ­j> Þ D³+C‚·RºCœœŽìqó¸?•k·¸ŽXï§ŠD-oŽnFp6ûqòj.­bÑÖÏP¶G†ßˆ.ZäâB `Î|ç¬}FvÖ$[‹„“ZŒEˆØ‰sÕ²zØòšÝ}\Á;ÊÖûÆD–â"ZRƒö¿:e½ËÇ+ÙΊöÓ.õ™Ü‚‡zþé=…b¢êù·¶Ry÷S”ŠHä¹Ù4Ô*ôù€ç¯ TÖ¶C¤µ´ó[ÌšK€—–2܇©<“ÓÐPœrù‚¼Öñ< HŒí•}‡p?ˆzóYg‰¾ø¡¥¬çM"â‹0ØG·pòß6ztë\ŸŽ~1øká÷‰—Høâ KÔ!·þщnn•9šEÇtûÕãIûrÅûBßø“Gð¿‡o`ð°Ð®çÄÊŠ“7 G Vê7©pY‰)nÉÀsà˜àŠMOë5¬n³8à[ cÁ'µz}íó[›Ho!‚ÚÞ@%Ž0™+œu8´ǭ|»ñ[Ǻτ¿g{Xøu-†³¥ØA.žUEÄJ *¹\à÷\ŒçOölÿ‚‚_üLm;¿á±ÓµÌ)e+4Ïáb$¾È*2ÎÂO€}¨_ý²=.óNŽ8î ¾·‡kÊœà²/`GAõÍt–Z­¾§–ÓA™.ˆ2–c˜[»vÏQë^u«ë:÷Æ/Nkbl“ξ–?3`ŽëÉÄXç˸·?)Që]dÿÚÓ\ÜÇþº=ÊòHªÑ”Ë‡Ô è4«ø'–-;YyNI7ʺ7QÓ®?QÅs_ïZêóMÓ4bkfºšA™a$J‘!‘J¥wœã’0jì¹"Š.éÒ<—Ez)æ÷*ö|Éã–K¹|ßìÛ-Œï"—¥n¸' v!~‡=hÂuv½öÒøC.›myö4ð®¬ä·•nQ¦·AæD~û¸û‡9UFþõ}/1}Ú+yžŽë¤§¢1ßì×ÌÞ*¿_þÕßu;@—PÚø3Q”ù“š) Í«´QÆœIòÆKs`Ńô>µ¨ &Xm,Ši÷gÊ,îi[‚THrzq@RýbñûÄ;¯DˆÃlÇNÀ¨ ÷ÊÕ§¹}"ûí»#û;HQ¡e¢cÉÜúÿ]ñ œº”QC¨‚[`²XܬH…¤O¸_–ÈÁùÍeÿÂ[k­Â¯¨[4Z‚úæØ|ø;¶ì$cbÐP­ž¤¶öÂ`Ó§‚çæóÎíÐxÎ1ØqÖ±5¯Ks}a¥Ï=Œrê1l¹šu¨,ûÇlùdß5ÇügøÝែ7>ÿ„ªù¦‡Æúæ—åEm!h^(¼Ñ<Š¿r2€n'€sZ^´‹ÄrZM ťƙcl¼F2“<„È9 ¶26’pwŽ(¨Ô¼Q.³ª™­”IövÙ7”ªlt ÎCwŽœu«1ß[Ù9Vòå·»ùœÏ—ž¿(íýk=%´@±­Â›Èhìæ5s÷·Ž n =v{ë7¥·Gß*ÆÙ^98<ç±I°iÅ­Ó\ïUÝÄ‹æ›'°ûÜô¯žÿà¶zŶ¡ÿšÖ£íqâÁÈÏö‚~„F{W¸>ˆ¦)$Xî"µP¥&*®æãsôÁÇŽzW€ÿÁg¼-ý‘ÿ§ñ¨Ëþ“¨ø§BŽgÜ6ʑߨB pÌsŠü1þÑ⨊3©ܽF àWg®1·®†pŒ–]§¿nÕÃhQ¼ž(Èᤸ“ðù›½wÚÊ“ðßP$lŠÈpH`<c~ÎöcRø}ª$îP¤BGþéO‡šú“þ ;m$ðV‰c–hõKé®™r¤Ÿ¡uüëæOÙ¼“à=O#߮﯒¿Ò¾’ÿ‚eø3þGüÃáN„÷Z‚^\ßË-ÞrÖ·p$vnu2ó%Ô:ŒŽôúÿ´³—öðý˜bצ†4ÿÝ^9‘ö‹uû; cìK¨ã,+î@w†M£yOðï}+òöÑý|9áoø(ÇÂ#LÖüa«é?f–×^]_ZšòòØ¢œyämÈÕ8\´àd“_xüýŠíj0[ÏmuñÇGc*ù—0áAúF2} |‘ðWöa¹ñŸíiã4x¯[øiŒÒ^ÃäÁ˜Vu䜃Ÿ^(ôHñ¥ƒí#:ýý’´›‰–%œœ Äd×ÈðZŒ^½øáýBÖ4Û_PÔRïìvÒ‰Y!\ƒ1ÚH'=I¯~ø{ðOÓt ›Oˆ·ž4s)š95Èã¹6¼cl_/|½ÿføUὠᇆ¥Ó´‹.Iõ¸ i­mUՆݧh"€<'þø§áß‹Ÿ±wÀSá¾±o©Ú^xH¡[lÊ˧ιh̸aŽE|›ûRÙo™ ‘#$÷mÙ'?ˆ¯º¿ààO„øKû:ü>ÐôÝ*êïÄN²ÉmæU°˜ÄvÝ´ã¦FkáKe-§VŒ T6îùÇ_Ê€0–úÍP)ù[†ü rÞ4Ãê2Á·a*÷pý?Z²×6´‹,lYX”/÷Ÿ>½¸ª^!’?í®ß)­¥ÀôÊ|wl’Z#®"ê~éÞµýÁ8¼io ~Á^ŽêTI!¹žG¯œH‘Í>Ò$pÛÈ…Hó#\8?Ò¿ta[N—öHð…†°áQï¥.ñÌ™õ `ý—¾&›ÿø•⯠1†ãÄ–1ÉtèØ’eŠUàW ƒœv9¯°¼/âÕ¾½Õ5°µßoh;bW°íÎb’TA!‡Œâ¾rø_¤G'ÇýI,f¾bÓoaEÈYCçÅŒäg¥{‡|/6¦Yx~îêæÒYšk’#-5½£ÆÊ!ŽEû±ï\ääŒñÍpÿðXï Ø|@ÿ‚]|T²ñv±¸Òå . O1NôÏ=kÓÿc†KÙáT‹ òÿáÓ¢J‚¡L ×Ð ~µÉÁJt_íoø'§Å+;Ô‰"‡Ã’N_)µ°2=ºšÞý‚5èõ¿ØWáDÙdð½–íˆñ×ð R¸ˆ„à¶ÜOóŠø__ø{ikÿÞÓ5ÅE‚úóÀjÓ+`Ï„lèZû&-$»pY˜c'¯òWÄ}?ì¿ðVÿ^¡m·>–#‚0?u.qÿ|Ž(ëqx±Ýl@Ž7ÛÈÇp ×!ûFxjËÄŸ³×m'$·½Ñnáš"È1‘úŠïítØSN™ìäI:ƒó‘5É|E‚MWáçˆc°ÁyôÛ”UqÁcÆqךðø&'‡tïþ¾´ðìkkMy“Ÿ•?Ò¤àzÆjú6ÝÕT \o@Ê@¯›¿àœº¨›öOÒ!bÛâÔ¯VMãý¡²ôæ¾’ÓíRfuP ,‹Øã ÿ:øïöÕðôþ ‡û>êâÚ2Õ.mÒñnI~En œa_]è«4“;‘IÛïþ8Í|¹ûu(±ý¯þ^¤Šd·¿0aÃHȾõ}+ ]ý¼7’Ùözã4ºÌ1Ûé·è ó#žÞX¹<¯îØZøßþ££éÞ ý‘õ-+B…m °ñ}ù «´3k±õbOã_gëãþ%N–ަy!|qÁb§šø¿þ 7x¶Ÿ¼io4s‚¾)¹[…V¹À9ÉömܨöÁ"…|ÀX’GnÇñÍ|[ÿnðòj¾"ý®P,76^=·H@e26×ãž}‘±ÜÝ\¬rɱ¡82/ίŸ¨ö¯‘à¬mö=àÌ4–Þ=´Ëó¨+“·ÐeA ±4ù?}¢¨YeÏ\‚Üþü¢|j`ý©þ,ÅÃã~0=Ô§ãõ¯ê¿JÔ—SÓã{e ùƒp#;¹â¿”ïŽQ˜l/Päm‹â¼×ñŸøñ  /†Qý£ö`øõæ~Ï«ø.d*ÛpöT;Çñ}ÎQV|ÏàˆT6Ï6<’:gWÀºr^~Ì?ä½Ì,/¼,ɬúŒÈá1×*9è:U 3/‚¬ážv‚‰X%X–è8íï@ö’‚Ãâo‡…Ëù‚i¬O·Û`'ú×ô9&°—z¼Q®mãO³H@ÛòûçûB¿µ‚xücáë‰"sN°‘{?‡zýæð/ÅÈ/t-[TÑíï5{=;Q}>”±HÒGvTÇÍ> xÎTò(Ò4_ÚYßÝ>£k8Õc±T«B둹NzœîσWî|D“^ùž†ki$l]'›àºFß”c#¯1á³­éíwâ~¤ùe‰åI0¤ e2T•6O5>§¥Xiò4vßh‚öY M¼0jî8c×å+ƒÇ€'¼Ô!‡MŽ; ãK;V5…âÞ·©Óç5müo¥hÿï|/âig‡Y±„ÜEKËD沃´gú 浯#jÚ^™á›ïµCsd×ò„x—Ãíæ­®_xN×ÁgU¼{Û©£&âùØï ¶Æ¡ó¹Nàì è@=½£·¼ÔâÔ¾ÑyúLjí.áæ6?ëqáœ}ÓØqÔšðÏþØÚj|W·ðoÃÿ´Çy}Ì&úhÙ¢¹òŸj.y,\’0vûóë7?|)¤ÜZZjþ(ð³ê·ä[éëÒHoÝ•˜ ñ€¤íà€ ïäŸ~Z|Tñ]†µ¢\EáÕ)ïu‡Ó%72L  +–EÇËêNs@+Yi—Þ=פº×51©x¢ávx–úv3 €&ÒÍÖ UÆ[àW¢|Ñ,¼+¡øÆþÖ)`ð¼vñCn§2¼Ïtwï9Ë1 6pµ]Ô¯m|ãR%¥¹·Öí¥¾‚Ï rÉ!\:¦v~꓆ÃsÅXðŒ¬äøGâ{-FÍÖ {ëmöÍlYÄrHÑù‹÷r6±RO$ÐCñ. »ÏÙÃVŠÌÂÚ…æ‘i%²CŒ>b; # ÓŸÇÞ¼ÿà6·à?†^hnì­|k|±ÞZÂ…§¶Œ¨¹ 4‡„r…d*é0 ¿üJÕSŵ=cCÓõK½"Åm ¹ro‘^=ªŒÃ©>ØÀÀ+É´‰ ¾·ˆ4—9_\²·žíUc;œíZ·çÐ`è_n>7x¾7ðÓËý§¤M<š›¡IæÅ  8YÑøèçêz åÅÉÓR;{Ÿ·Ì]îcHʬ‹´’`@änkÀ>¤øy›™}¢jÞ „jI}k/1‰¦!£¸òø,©ÖÁ †8$dפ]|]Òlt{MOZ6ºa´½’Þ'Ô¤’¨ Q ÚY[• lšõÒÒßKk³ /c.`­·<þdëÍyöŸâûGðä­¿š·2\}’æ"o-Ž5nÛŠŒ©'ñÍq:߯Û]Gâ]®w¨è–_Ù_Ûp$² « õVò䶺 çd©#©cy—/ÅMSðëèþ k¨Æ›#ò\¸“c/¿º‚Ä1à†öjÃEµ—ãÃÝCM¹³Ó®Àš”VVÞI’q¹í÷áÏŽ#Á-È=GÑ´‹Éôaq Ñ“M“ä3K(Žá†r\sèZùĴއðjÓI×çÓÚ+ih~TVòI¾i¶a 2 X*àeÜ튭¯Á\åð'Žü/àŸü7kÝJóHýÇöŽ®c·2í^vDf^‡Í`¬"  ç4öм=6à5ý^õôè×ýý+d‘° G'ОÕÊ-ŒÐß‹™®~Î/—ÍjmªN072ŽŒSÈo­|s¡ÿÁU|]ñKÄÖáxgLÓ|:5+™¡šWhÆw-¨8ôƒ’é™Ç/ ÁM¾!|CðeÆ­qá-SѤ)gkohn ô³4Š ‰ ö”dpîHÔ¼1áýSâ_ÁÙ|Q¦@º®³}o¨Â|Õ±°4m†?x¬­ÁûÃ>‚ªiº&±ð Ä_éðM7‚uö7º½¥«‡} äK˜”à›r/e”Àc5åV¿o>0xäèÖ^¼X‰~ÕíÌÛ4ÙâæY†Ž@7¶†yãÔbñ|Ká™5ˆ4ÿµÙZF²Giòù±@¿}ã—0G<Ž(×b¸‡[ðõ­Û\iú†`ÙÝÅ:ysG´a†Þ9ç¸"°´heÕîî-ôX/Ó K„QºESÐÆÍòïÆº~•ÉÁñÇAÔílâðî¿£Ám{’;‰•ð06G#r¾Ãšô¿ƒš§ñ3_´Ð´ ïS”4‘¨¹Ù#Ä«–we<"œã®|ð{þ -aãÛJ÷á}î„IÞYì´Fk´’ÝÀ c‚§yƼaKã¸ÿ‚ÙÍçÁeóAGoi”¶ã/Ômcê8Q_|Õu-sö–ñ¶•ák½CLÖ<=¨ßÝj>!'ÉžìK}p‹ n¤`H±ß¼%Ûkê¿ø(ïœ?à‚zêWV÷3]x³Ng1^ ¬cTÛµä†q›“†Í~+hRÉ7‰â6$YÝAžóùW{â˳ü:Ô÷Y¢àqá—†=kˆð½›Åãxã• •îd ¹ç$œtöÅwí®<­3dŽ6G:Næ€+~Í–Â?j;@ÔxÉëˆR¾½ÿ‚,Xÿø+_Ã3 ÆÆ ]bC¹±ŒZÇÓÔó_#þÎVƇ9Ú¯7Ü)F? +êÏø#œÞWüká³ÛîP–º±r§·Ùãæ€?K¾=øaœ«ûhpxWöUð0¼¶DöU#I$ùÔ_¶ïˆäÒ¿gíZ#5ì&ÀéåŒo¦1ùÖ·ìë,³íãS¹lSÊò9$P£­¬O48yˆýáï_6þËÞ¶ÓjOŠ—àù“\IÛqç÷ø~^•ôF“;ß›pT,œ$׈~Í6­kñ³â¸¿fb·P’O?zG8>…{¶‘(„¹·—ÍŠO•H+Ó–1¸´yå㨷¡¯ÉD­á+uºˆy§TUÀùT&Y‡¾q@e{<Þb$So‚¹#ØÒx¬§éAÆLpº‘é‚+RoµÎžóº¼ ˜ Hó}ÇÒ³¼Mm4wzWšwÈÈù’¼Ž(ú«ùš:yc’£ ø×ê/ƒ~)?…ÿeïÍáÍWN[Ë-ÇÙä¹_b†ÚÉÜÝc’kóæI’ ãûÿ±ÿ‚v|=øéû87ˆþ#iúæ³¢ÖîÉ{$j‘íRŸ"8Éç­}û:þÔÖ:uÿ‡5ÿjYÜêÒͧ`‘¶âY •2~éýÛ Þ£Þ¾ÉðÆ/ ÜÙù:V­§K’±ˆáš?ÜÎ 6ìg€ûµù«~Ç:g¿à¢VRÖäü?ÓíWÄ’@²°™E·LN|³»§©¯µ4oø%·Át¾·‰¼§M¤ÙDû,¥’Fò\°ÃnÎO»ÿãÞÿÁA¼yá»_ØgâD"Ö4˜–ÿ@¸´µCs›™Yp‘¢ƒ–$ñŠàà”¿µ/¾ ~ÄŸ ´¨|WáË=Úý˜¾+j~ð ¾…ªx{C¸Õ4]J7fòÈŽ›åPTåHçvkÁÿà˜ðIÏ„´·ì•ð¿âßÅ Ûj:÷‰4ç¼½ÄÒ9ÌŒ<¹0~ꀿ(ÆJäô ÕßøO<4Kq®h±ˆÛkíˆoÇu|}û_þÐ~øMûmü7ñ~¿âm.'HcÕ.Äêa³YVT ì]àžxšë®¿à•?¬í ŸÃ~ ¶ÒE¹±JãyÇ,rOÍŽõñ÷íCûøcUÿ‚˜|ø~–Cþ×–{Í_J’áàŽBªe'p B±õ_®@?L¼ ûL|>ø‘ø÷ÁÚ´7£Zj°¹n=›üæ­|NøÓáo‡~ »¸ñ^»¦BòBÐÄžr³Ìì ª…×ð¯Ÿ<;ÿ—øðßMŸþ¯‡ún$“­ó˜$*Ï/¹îXñÉëŽkgâì‰à/øsP‰¼-km=µ”‘Û›rѲ„« wg4å²×íÓðƒà¬WÞø¥ãÏh˜Ö%»‹O¼ÂZ) C”îm篵}/ªþØ_ ¬-ÚðüFðzX¼ªccªE•Ü28§^kà?ø&'ìuðûö¡ðV­ã_ÚÁÚg‰ü_¡ëϧ¬·ð—±Ûáb>Kp®7“ŸJû–Óö_øc§ÜÛÛYø3ÂÞc6Á·Jˆçý¢ØôýhæïÛÿöÌð ¿‹| ⟠ë>"±ðmÈÔo¥²>r˜Ì‹•\}ã·'¾hü>ÿ‚éüÖôýU´mS]¹¿ÒIsbº[£«žvol*¶ÜHàŽkÇ?à¬ÿ²Ž‡ðëâ—À¿ü)Ð#Ót?ø”hž$ŽÚ"!¸´fVü³=ÜIô#ëχÿðOÿƒ~¹ÓítO†€éYŽ4:z8'œ’qóõ8Îqšà ÿ‚Ö|ñR $ñ­¦]+)–´·- ’„ÆcÛŽ=ëç/ØËþ að_öN³ñÍí)ã?Ã[ÖΣ£¤ÐÈÍy ƒ°ª@ÁÆFxÏ¥}‹ñöø%ñÂoø»á·ƒtñhÍ2¼ii nªé2m8ç×½|Iÿø'câ/ˆ´¡ñ3E°Õo|!ã{¯ hÓji;ÚXD¸Q p~W뻜úÐèVûYü-ño…áÖ¼5ñ'Â3é2’+¸µ8YX8lûcëåïø+·Ç§¼|!âM;\Ô4ßÁ­Io§Ì³ªÛ*Ì̧ {ßð¯©4ÿi3\«[èºZn fûÑ{có?üÿN¶Ðÿg?^é~¶­|]em*ZÚÇ$Ü®ܘ;ˆîô  ð_ŸÙßÅÌ:V‘©ø¶æâb³ ºÒDÀ¸¬ƒå9< à÷¯ÃÚRK]göÉøÍu§³µ¦£ã}Nö,6Öòæ‘eP}vé_Ó×€þ Ñ[K_ø[ÃÖ« µå¬©¦Æ’…2²©_—pàŠþc¿j >m'öåøão|Y™<¬à2…Ú¦pPÀ @ÀP74fß࿎GÚ¢‚=RëD±05Ï”ó¾2o ƒçÝŽÛ2O9®¯@º6Z;Z2Q‚yxjãýz×–üGµìôYgU/ÌÀ0º8=FqÚ» ΫH÷òG´Øݹ#‚=8  m5׾-Ñ­5V†ãĶv¬±þdm{× ò±ëÁèx¯Ö›ŸKû._xŸÃÄšÁº•…Øß41ĪR8b‰ÛËóB°m¼ïP3Ð×äe®˜uKëi4lRQɵI3®Ö;zyãµ}û7†ï¢Òk]kNð]À×<í7M\)Ô¹wo<¸º‘¬Š×(Ä$>Zd"˜Á®«V§Œ?kÛɾZxjãÄv„`ÔäÕÃ> ÓM¤÷³ÊðYGª”Y&“pÝ!‘J¡t,ì#k /x[Ã)¦'ˆšóOþÕFñÏŠï´>ðÐ…Ë…3ÅóÏ4€³°$*ùj£’ïô_Zƒ<;§x†M{LÓ?´áxµ(/-›É¹diYãP¶æE…#bò¹±QÁ¯=‹â4šìÇ¢ê׺L‰o.¯q4 éÆÉoY¼ÔÉš(‹cpã’­r_kŸøÓƇDøg£[êž¼XäÐã¸é®nÌŸèóZ@øh˜’ä| ìàô/Ú’ëÇþð‰ |\ Yø£FÔ5ItHtù>Ûoð‡|Ê¥w:I‘öpT’Ï9 ¯Åw¯¨ü*¹¸·²{In4½>hìî•PÀ&Ú®ˆzõ¯1ð*iÚuî›§[Cq¨øu줊îöÅÆÕc \™Üæ%ÞvƒÐ`œõ®³Oðö»}û=ÿfEö[ïßèZ`ÛhâyäV,Ÿ;1A¸·ÊKmÉ\œW3¤ø+ÄksidöÖ¶SÚKlÖ3Ë彨‘ÎÀ6)ʳ€;…àrh¡³½ƒFñn¨nï4]*ÚγÄ..îc€_³,d½(®p®Tä…Íp?5+]3T¾°Ð„Öšç‰Y'»œ,·²Är#—bð²8ÜCƒµ2n;[/‡w:Ð×àÕ.ì¼5p/ŽŸ§O{g-äL°ÆUÇ—oxÄ­ ÌY&¹ï xO˳¸×l<_ªÜX•¹Öâ¹ÛÛ£]⌀Ê“s ù°HÀÈ!ðãÇrxN}J]NÜø—Oñ ÒX[Ý-ѱ3Lˆ«4ѵ¸b¢6) 7I+1Á­ß|+×ùxdRHò¶+°(w(äÖñÁ¢XÅý‡oa«ëÞT««Ì×-šOÞãq•CvƒÛ8¬5Õ|E¥j=þḼ3à½VÝ^mJ ²a¾sŸ´4HŒY£C´¬xÄ…‡\P®xºå¼9âjÇ^Ò|+áÝXhní..<>±ê°7“»ÊHœ‚³b6Pp ±ÆàµÇß|M¾Ò'Óí5moM€J#¹k[hn-íÜ€ín¨@Ž Y†É.Ùù¶ŒUˆ¿n¾"ÞØÛë—rêw0[iöFHey íжàÈXÈì$™ˆÁ`§=Gø§Å^$øs¯®•¬x_CÓ¾*\k7VRC#Fú’B#*Ò;FÌ’±_¹ì$dÊpÃhú7û"œf‚þÂâ=NöoµÃk<1óÈ3ó«FèzàñÁæ®“ÄºÅÆ½¦øSÅPøJÚòäÜ\Þ%É–;¸¤8 ?îþAµŽ o¹;I⸟ øÑ4ÔƒÂ0júUÅ•¼ñ]êÍ-«]#ÎbXy¿Îÿ)v”1µÈ<ƒÁêõ[›ýOÄwSÍ©hZŸ†nÕ °òîæ{„ÆèÚãÙÎîÛ@f€"ðwÂØøGOñ'€´­+Åþ7ÕM»‚]&ÎF›ËŠm=§;”‰̯µNü…בüAøcâ­ÆVþ¼ñ¥ßˆu²‘ë7zœ¶Òx~%f>P’ÁŽO3qv’€'#ëºgÄ¢Òf¶ñz;k HqÎÐÙ#E#@XâW!BÅœÈÉ«ñ¥þ¯â;}*Î Šð£^J³nmqó]èåþ^æåÛœc Ì>ü k}:×ÁòYj:›Au6§w«\\7=Û‡Ø>~^]­#ÎDeäƒ^¥ÿŠøp¶‹Il'µñ]œ0H„Î[+M9îí¬ìåIäËçù¬w¸“™9Ú¸ÁmÕ7üÒóQÕ?à†¼ñj¢j7Þ4±ž`­¸s©»Iä ryï@9k/ÚS*š|ij±´m½†Ö3)®7}óVümoá+“ö8+ÊõÏZã|$ñAâ,ܨfŸ /míÚ»\¬xíä‚A+Áˆ,¿)ä{Ðþ \Å{ðæâ9Æ<뢬3ƒ‹Ò¾„ÿ‚k|\Ò>~ßñ_Ž~Òº6—c©E3ÛÀÓÈždQªm2Ì~SÐv¯øÁ|# ®ÉÛ$/÷T¿…}/ÿ°[ÿ‚™ø [•žËT"7Má•oP  ³üWÿø{ãoۇÞ:ðHÕu/x?J0_:Àa’GøñPñt)=Šî ¹Óîb”0•Wy‘JuV ïZî4_iº=ÔW:~‰EýJ.?Ýü+´ÖeQáû1òÔÌ T“ŒŸ¥rZF›[*Ȭ¥;cæ<úzׯßðPísÅ.ð¶Œt›U›ûH]i’Ç!uŸiY·ciÝŽžõ÷U’Zèqµ¹"fbù<î÷üëå?Û[IZý¥¾A4gÍk¦Y6Ÿ¼¾b°Èö*:ø“þ §ñcâ^¹û<|9Ðþ.xÃBÒ[Ä)4ú…µçÚ×C$ˆGú°YAÉÎq·½|U%”Z'Ã}>i,©,W [Œ¿I¿àåX—ìÃðî4¸ZãÆq·ÙÊÿÇÀób˜ó=öc½~_ëw:—ÀÉg„Ò‹ˆíbÁù 8>ýq@Ö÷Âc^¡‘[w~Iô®[Æà7‰ìW8¼Â§§V¶ªCöšâ9KÊ ò‚}¿*ÄñTâmRÊXFâ²8ôÆW¦? ¹¬ÁŸ JÈÅT!=8ûÕÿ6ñÆ—wû%ßé×Ç©Iª&)$ ×B…„c9|g'3_‚…^}- ¿ ¬« cŠî¾~Õ>1ýŸþ<ø7â5¥–‹âKÿGw—g¨‡Žxü¶pcù–@CÏCÅ~üørS'üÆïÊX£¹M!‹ñ¹äƒÊM˜# $ö\Ó'w[hm»qœWói ÿÁz>8xöƒ½ø¡má‡Oâ{Í-tŒH—FÉbR0ÞH9/ާpç«Ó´ßø:oö‰·Ò!·Ô<ðŽæðŸô‰Å½ìbq“Ò=ͳþú4û‰ûUéGÄ¿²×Ä TuáÛ¬ÏH›ÿÕ^+ÿƒ¶tÿ‚kü2·Ò‘´[­Ø;a<€ñø×ä_ÿàæßÚWÆ6ú……—…~Yi” kqoý›}$¦6m’™FÖÁ8%ÉÉ<×ÀÏø8+öˆý<§x[áž‹ð±|9¦ÌòÃe{¤]M4aÜ»¯ÚuÎK7&>288 éH´wÓYn—?x•ógí?¦ Úëà|ÉelÉo©Í\±Äˆ¯ƒjúó·Šü‰—þŒý¨fðÒYZh m®Ô’nã°º%y$~è¾8Ÿ˜«œ=ø…ÿôý¥>&x“Eֵ˯A©øzu¹Óç´ð쑈[(×,p89#§Zþe±K;„WUi rìxt‡cKwhm4¹§™t°>ÁÇ?)ëŠþy'ÿƒ•ÿjˈ¼¥¸øZÄÿËoøEfYè>×´þ4Û¯ø9ö®Ô &£ðÚÝ@Áò¼+'Lco7GÖ€?\àžW›:øøéÖeLhòZÉ(*ÎÐn ûÄç©«:ÏüöšñuœV¾/ø½­kÖHÈßeÖtû;»|¢•V ±! #vîrIçý3x^ÓìäÐ-oo¬úKXÑ`k¨Ä¬v¨+·vI¦kùý¼mžÏþ ñÕf|w©«“õF¼ÛAñ&½àÏÁâ kzÅ—Š v’-`ßM=Ý»‘ËÇ,ÎåXñÏ9ÀÎqRêÞ Ôü}â}_Ä~>Ô®umw[»{½Fò| o'!U¤l2Á83@ÿÄiZS1ëw2ç¿Ý³èº¥ÛÉ¥ßìFÚ¡[Ž1þ5WÇ ˜ôµÿ§b=…trZ#ò„f÷<Ð_ÂlSMŽgýòê1G"Ž|£ç(ä~9¯Ô‹?ƒµ{Fµ–=4Œé†ú›}Ð-*ådç¸$~?—ºrɧCa=äH—_´²Gœ²m¹]¢NÙa‚1ž:úWé9Ö ø_ãÍKYñUÅþ¥¥GaL·Q­Äv’ÈH]“>^ÅtÝ)8Á × ¡ø+Â…œÖ‡ÄA´û›ÃpòÜXßHÖF7ÁY±ûÆûÈçÁà“M×|} j>9o C¦øgEÕ ¶Š[û‡²_•BÂÙî§àH£ç\ ÀòNMp~#øÚåŠ>£¡_ßéF;í>+ûZÚÞÝfPm,…ÙjÜô8À⮡ñ/Vñd·ørl/|[©ê‘®§uªNò¤0«6è‹ÉB$'níRy [ø_©Aàoi:ƳáË]ø5$hg|˜V¿¿/…¸dó‡ÃmùsÈ©¾+IáFñα‡îôø™t›¤‚æâIÙØ&ÇŸOK™ 2ÂÒÊ™ÞÊN8Èò“âÙ| áä¶Òìïf²³”Ûy6hò=ÝÄ®6*;ªV%ÉnRJ€3bïÇþ ƒÅ“kv:5£Þºm‡Mйg„’WBNÀreØ z :®ká-vðx>ÃOÔüaªé±Yën³ý²ÛÃ÷r«-­nÊ®8cóª«,6æ·~ ê–^ ¶Ðô6ÓA¿ðfƒ%¥ôšnžÈš\÷¨XH1, ¸°ˆ— ç8óMRÑüEñ%<3ãÿaÚx›Q€kWK”,“d²£É,c R Q¼ ¨IÎk§½Óí<%ŸÃý~_ø3C²/}³[]>ô»»1_;à4S´eóÉÅu¾4˨|c·ñ‰á[=/MÒä{;›½ ZDÎE±S˜ü¦Q¸‚>@Ó§¦i¶µðêÇÆz†¡ªÜê£PÔfž8Ì*=Éfuè#“j¨RyS’rzò >ë4ûÿxgÃÚÍÖ™¨==­£µ‚-¨a!™BƯ‡ÞUÚ@ÛT`ŠèÿiYü:øñ¡Øør{c®A¥@#76íow3K#Koe$»eT¡Iõ Eñ&•oo¡êÚvû]6Õ´ë Ep­Œy|(“¾Ñ€\õbMr6zÓh·SÞÁwa‡³V0·™ ™Q•Z@w’$1³@Æ;½JXØZi„–YÁmÅo9<õï\·¦è¶7´üT<] œ1ÚËg§µ½äNYXu%†òŒ¼rNVÑUµÿÛkßbÒ/ÅÓ•Ñ´öë4xc*¸X%ÁëÉV'-&•­\øâE–áý#LÓô¦Øý±%Y.B"¶Õ$¶G’XG!ÁÉçj7Qj2é>+ЦšòòK‘5í»-³iÛÜÜçtƒ8&0~R£Ã»ð­‹øKSû¥`/4u¶¶šl,W2Ëû¨ÈpZW.8N4»áÖ4Ë’Ýì´ß_\´RBC\Ü£1Dap î*§Œ¼tÿ õÇü$šõÌ×Vð­¶oad.-í# T̬AYAm¾X”rS8Øø¾;­'Ä6 áPG§ÚE>”mã”1¸žQ(yG–'%”ô„‘‘X-§ˆm¾ Y¶³g¯ßÙê÷_j¸¹Òb†ìËtXãRÏ+òL¢F ‹´&Kv’ÿø8!¹Óomq,¥S+ ±•б ä ¼b ñÖþ½ÔëVÒ4­ Ãv‰wug§i0ùé)P@¢1Q±SvyÎFæ§¥xrÏÇ>#Ô< ëj–²ƒew©ÅÛ–ý"à69^rç#áuoíX…­ü7Kµµ¹’KX§0¤ú¤„ ^@YH]ù]ì•@ÛyÅhøóÄ_„>[IáËKÅÞ=ñ+Cmcæ[ì_ ¼…Ù®S!ÎÄó\œÊI ÁªãXAñ:|ÓÚ[xÂõ|›·%O)”´‘,ê£p%÷ã-uÖ:?Š<]e§Hu¼OwâWól—MÒÄ˜Ê É"ª¦Ý΂Ià×5©è–“x£JÐg¸Ônuu .µK{xÑ'²,QÚÜ–ŠnŸ|nàâ€4¼ â=W⳦韠°›Iµ˜.«3BÐ+íÁ£V\˜b5À;˜t̾<ÕüðãÁ–º_ÄÝ/Ú~¶%¹‡LmAºÔ…ä­$’ÉöÙÐã@v.~ó0$ ®ËÄúv›á;« í'Æš-ä´­pt;&iâITd¬—(™’ÀlAœƒ^wâ?Ç¢iZ~«®ø?V¾µ¿™4¿´”Y—!˜ùžZçå%#*’pYÏ"€$ð¯ˆïáÕͅ׌t­3ÅÚÕÄW6^Òt³qx…‘U˜$ŒY‚ewJUª0y«zÄïq£Ãa \Üê¶Cs§j‘êPÁªJÑÎ#hâ;ÈÂPcÉ(ÔoÃ¥x9ÿK”•ÎqSëz\zÌq¶¯k‘¡É2¢ÌŠzÁ<ûÐì‚iÇÿH¶ñg‰|wá¿ì&Ó5»È`ŽwÜ© à6=ø¯µ4Ú£á?ˆn§»¶ø—àè’Õœ9:¤AÔ¨ Àe¹À*N:dWóGÿ ŽØÂE´V(’`’±(Iü8Áè¥AÂ5U¼ë++p6ÙÂÀ{ýÚþm?~ð—ÀísPñG‹tm_La¿nÌÅÈ#hV$ð>Õ‡û,~Û¿ ¼Yû=ih¾;ðãCcok§Iö‹Ô¶ýã’yǸ¯ç£Ã?¿°.临µÓ&”6ä|uì@ùzöÅZÖþZ_ëXÔaÐÅÜÀH©öešVQÁ'r’Gjþšlÿjï…xÕ„Ÿ| ·AÚ5ºÌÙä7üÜ~uÐÞ|lðEÔ~Ÿã ]ZÅ®õÕ eObwû×òתü,Óc´’ià°qçbéñ=mÏRN=é×ß´¶¶ŠXÒij öFû¡FþšõßÚÓá´è‡ˆ¾!xAL‹$«Z”sH ò©'‚@¯š~(~Ôß¾6þÓ? üCðÛÅþÔ<;aqp.u{qÁå3 DÈ)µ”/=Í~jß â°¤hí’ÿx_ìqEÈé÷TsÉÁëNᧈœÍuuÌÀMo…ð02H$àtÎhõþFø»áïˆ^øEað÷ÄZ´ ×.¯'ŠÂú;‡„)–7`„áNì{‘_ž~å𽹌¸ÕR0ØÈû„µpšè<-7œk ”à´vÑÅŽ?ØQž}s^‘£#éþðäëûë¹'¦Nç×äVÃÙN¤(ìxÛ5GÅšÊÙÞYÉÈ.e vãÞÔܱ« \Ÿ›šÏ¹™L™`­‘Þ€7m|eø¾ÒþížÕ όբÙ, 8ïÍcEr$l@籫–xb¹Ð¿øIKI]ã•ýjOøI°Ø€Óåæ¢Ùæ)(˜ÏnôÔ¸p¤€Ý;ñ@`ñ ‚¤Ÿ÷Njwñ0;Djø“åžkê)ò•$ç©éR«üã|ŒÎ8ë@ÓY“ûM$‰&Ù°‚gú‘W›Q¸¸;– yþìóX±À×R>YN8bJ ÆPÈN2rÆ€5K¶EÄ$8ùÍO“Æpç œ Àš;‰ÈÜÒmíóô§¶¶c>íÃý®´Ò[ݾFŽ@=iKˆ‹3 ‰¥?0wŸ¹öŠhÿÑÞF…ÉÀõ©u([‘P§`ZÛûd…X4ÑØÍ4#ÉnA6äõË0Ü¿Nk#F†Úàþöƒœ ]{X|°HBž¸…L ’!¹®#9ç†ðëD‰0ŒüêWÐÏóªéa0Ä1d³ÅU}>rHcÀnxë@åÀWs®wgrà{u¡šå!ÊË ¾~UfþuUímþЬ°Fû£’M2¦Bc¯8ë¨u ¬Ïu“ü(êýi« p²LL½v…ãéœÕË}:Õp Ãv¢}Úhå`vá>RyØ{P7âB{ñm,j#ÌÍ»p9ÎOj¿à¯Í·•Û—¶Ÿ÷yàÛ¨9üüEgë9xͼj>e`)l´&°»¶žÉüÇG²>QÆ:ít›í!ha^cÕp[$\#s×r1í_yë„kž&º¹7º„švªÆÎÇO¼IÖ/0œn\o,Ä–pq`|á B}B+5¶oÂpwÌ®üý{zzWÕ^-ÔuíþoÚX\jZ¾¨6i~Žá…‡—]@ǵ¥H±±Ýi›‚ –€4üQñR_ üMÒ†°—wzÇŠÍŒš<7Zs¦\3º¹®dıƒû˜Àv É:~1ð¤m5¶—á^ÎÄ QªOqm¹¤WåÂè¬Pŵ›ï®wĺÝìpÞèþ_êú—/ãƒXO ºŸ…îd‰d’)evFàoy¤, G²5Ír—ÚvŸâ ¾ Ö¯5‹? xU—SŸÄædû.¯!”ùJ¾Ò’Jì–°î-¨r0€=[Eý¡Çze޽ã/Z·±ÒîVÊ8~˺â]Ì–sñ´ÌÀdã#£ð‡Û~ÝüA½ñ¦µâ˜¯4¡â-®šn®,'V (r!œ1ÆÔ%Ê7Ò¼OÅ—rÞjö^)ñŒÖºŽ‰l°h:%­ûª9•¤ïÛ—SrÑô†€¾6|[ñ7ˆ,¥·Ðÿ·µø†n5M6MHA/†­D[R%þm°AdAÄÉey¿ý¨–õ§†¼1ªÝjzýô³Ï{©Km ´6±D|èÜ…o.Ý aåÎDÆ5qS‰÷ Ömm¼pš½¿Ã—†Yíí5ùî`%¬Pϵc½NK+džæ¼¿ËÓà‚_xgQÔ"ð¯&¡­ø¾-IvÛM!†Pùb(HX¼†Ü;; mgAðÿÄ èþ$¼Ht¿ D`ðµ•ÆªöÒëSì$/xÌËqæ¨Yê¥ùáòê8ý¦%ðŸî¼=­êó,±4~—M“H†ÍcE 4vÁ–o-Ü<\xâuÝΗàµñ•ï‹´¨´ŸôÈMýŸƒÚçäó`ÎîݵYÛŠñk¯‹cÔ$ñN¿§Ç⊚؇OŠÆbäÚiªŽ¨ëlÌ r¸’EŽ $;ïÏB+žÕuVÓtûá„Ztú.—%¬Þ7¾X,¶,Љ~P`‚E-æáüù£`&€>Ù@ú?ìÉwk{¨KOðͼWš…üæÈ½Ìe‘æšHÁ1|À1 dݪ? ÙÏñGÄÓt¿j7I XG ÞEöf’gE31ZiEÄaˆW=“eãMÄÿ²TÚÝíÄz†7b{©nöÁÜK¸´’lUNX¨dã¥|·ãÝKR´Õˆ>‡³ø‹©jÅáø"Ô|»¸lÒ"Ñ\ÅbH‡í8Y!Ûä@Òõʬ~>ø¯À¾8Üx&þ×S>!ðï“§j·m©ù«k:Ë<в(ðY¥#9Ù·$ñ^iáŽwún²Òü>Õ#½ÒdY/4›èZC DQŒ÷òËÈ‚2ªbŒÅs¼œŸ4Ÿøeü1ðÏ⇡xä’ïÄ’µ‚"Åu)v—É™NYåŸvæ|ÈI-–®ÓÂþñ§†õ'Ò¼?u¡YÙÅŒñêpÉ=×b%nÊwä ä.Þ@(èõ¯üM_Ç0hW:Î¥©<~±²‚U!;"ËÊC´2I$Ò‚çï¬þÔPø&öÆÆÓM×5ïx“V…o#óY¬t;?!Þi$ …ÊùHUãqê¦Æ£ñ²óZñiºñcj·ž!Ô/^G´ŽÖ+ˆf‘$å¡M DYTôà¶=z/ƒ> ðE׊uíYð@¸øƒt÷vòëšÌDhÞÓÉŽsmciîâîGS#¦äRŒ Š„”–öß ô öûÄÖ/¥xžÚëXûý¡-ºig(cŠYrLp€\Xœð5î¼y¤kxæÄ\\I4­ 6Vk%Õ®œì&çåLÅP·EP$ž8ïº.¡ñ'XÖ$·Ó´ë­µF1Û5åÄÁ<¹ç@XDn3>PJ®G;ºWì÷¨k—÷°ø¢ê-"Î=.ÖÏÃÓè»/%‚4,Oî$I)”x•ØáرR ž™ñ]ømáù ø{mvþ+ÖnRÚíàž[É´€Ìϱÿ bíW8Ùƒ·©ÍzÝí¶£ðƒMðÄx§EðÍÍåÔÚ’\ê¶k%äÛÆckÛ°øŽ+c†Uó2\á±Ç)øÞ’t—ñªÉ­êšKÁç‡Fiíá™L„,m‡ò'šà°U+Ò­øŸÄö'ÃxGIÔì"ž‘7‡ne¶’8oY€,È  iʆ$à“@ ñûâýïÄ/Œ7¾+ør×_te»µÓ4Ë«6¢ó£UlVbo/™€01Pø»_·ð×Å?è~ ¸¿ñ‹ì"¸¶žô&Ù/Œ9pWTYQ@c€V¼Â ÷\¿ð´ÿõK»øzá®<7g¤™ìZѰñÃ,M¹—r§\1oÞ¶1€=«Åþ=·Ô¯üá?€WÚ&‡¡øJ{AšÏMþÒ¸Ö¤yßÜjvç¹–Dmθ۹‰'‘@]eñ§ÃPøJ×MÖ/´x6ÊæôëÜH`‡Nº€ì6×$mÛ"Êcx£2ÞŽ™‡…¯ü7ãhz‹à’ÇÀº£k6›e Öýò¾Ó$q\0o´@¨Æ1–Û“Œ£ñ®‡¿¾ßËñ럃u^h¤]:É#“ûI£p<—f7H¨ª]Ô·ƒÍ^Ѽ ê¾Ð$Ñl™äÓt»°ƒO‰l­tÑ Ùˆ‚&%Um°Hr_žMzÕ—ÃÏ|W—Äß¼#á”×uQ‹LÖÙ¤HŒjц½•˜µÛ¯™bÙ_•PUOø,'ĉ>0Á<+â6º¶»:Ï‹t×ó-¡Á·í´B€ ¨ùxé^;ãû­cÂâÓÄZt«ÍÄr@ú´¶É²Ýc_Éf?>Þw0cØ×Yÿû$?ð@ß„ ¢ámn5ý)¢=ÃíLyVåIÎH<‚q@“¾=ñb]|[Öõo]CåKtDÛ&ÔuòbBWŽ™Fõ¹û«­ÎïrÌò?'w%½¹¨4é<˜äa‚»ß>¤î9­[½£ðÍ…êoµÇ¿' 9èz‹Ã?n°³Zd !‘¥¸?1Ï8­ù¡ÕlâÅÌlcoŸåRÊ}êçÃo« ¯õå•b‰À ßñô®ÛV¿[M=’Þü˜ä䎔ÁE¨k±²y pY>Eù?ίYÞx’ Ò´, ð7!ãè)©â[¤ÕLÈò3n9çÚ»q4óiàßI†e  2çÄþ$Ó-‰`±Å‚KyDà~uBêrg•€b› žOÍ@s]–©¾†Ù3ç‘ëÏCY'O2ÚyIćÁ\ç@ÇÄÚ„ $·3€›n¿Žj½÷Œïd»À¸™¶|ªDaz{WU5”¼ê…ÔN:à~•“©h‹s¨G#*wµq‚yÅa?‹n®Ô­ÍÅÈ :„ô5[þ9d¹Â ĈÔïZšF’·W•ÈLãšpðãÊØ]¦2¼äsÅ[ðnµ&³mtò´îa©‘xɯF°¶kË?ËIc'ï?ËÍp: M£Ã-½ª‘ çËÁnƒô¯I‰„zw…¢sÑ%ç8(稠Y÷BÉ:ä1Ü=yªâÖ/#™¸Sе{gOà$Ê:T—îc‰"Ü1Ë“ÛÒ€3cÌWŒÏ^Õ³kXÎI rsTí-JLòädõ«4è£üÄqý(è§‘‚þ=*(¬—Í,ìäŽMniZöj‘Ro5q†Øj©«Û$v^}¬F=¿yñsÖ€3çZ&ÎI>”–1ðNN{šPí,gxû£JA*Æ-Ó¥i«,‹1ÆW€¼s6àçÒž³‰G!ˆ=…2êdˆÇ’q€(ÈŠYJðàÓäMªœ7cÒ™ï# à©ÏOñ©Á,¼äç <çé@ Öb£?/¯_­K /àûÔ) g'’À`væŸgh¶¦wgœÐ_éq\lxàŒ¶î¤pǶj½¦‚ÓÞÁg‚3’Ûy 6±Àü_¹ ¶ 6rœg±÷¨ÍÍÈžÚM8mœH¼žƒ†Ïéš§á›x,tˆ¢óÞV[£æÂéµ!Q(Ù‡þ-ëÉþïNkì]{À–Ðx×þØçñ>«ñ3P‡í–‘Úéd&œþW’³˜ö4¢Ferû5òŸáÛ› Û^M¸éäñZÊdVw’)Nê±ã¨¾+·ŽMO†ÑžÛL¶€fR Û’Ï–$#ÌrHàdm|>øaðËO}S⑯j÷þ,¶hÞ÷V³Š+}FÎY ¼0+ ÉÃÌß.H:.êŸ>"ê0ïÒþ!x,ín+«{}SÊ/" èê1ÛŽ Ç_Dø­ã‹=BÖÞÏâ¶úF´~ÍpÝù“ZÈ9 ÈÙ ç#žFh¦™ãhZUí·„> ئ‡¤jë¨Üê/ IoÍͨ¶·Úá˜b+) œŽéñ?Á øÉs¥k^:ðf¼|My;5f‚Y¬ÒH×I5º`[YŒØÌˆä ½âŒ?„,š‡Ä?GK›Í‚yu ¹ä†VQˆÈÜ€uâ¶ußÚkǺ‰i¨Ëã¿[ÈÈ©wnš“4ÐC»%ÕÁ<.r:ƒÒ€<Òãàž¿Û.jŸu‰|ùõèíb€Y»,²“ nš"ciHa;i4ÛÙVk[{mÀº.Ÿ‘yv°ø§V´‡Q1Œ"ù/abD!UÞÞ`ëšô OŒ¿¼5­Ju/x®òËZmö·§V•. |’ÂW %ºÖˆþ=øëFð•ïÛ5-NëUÓÞ)–9¯^X®™1áAî£nâ€=A®¬ü9ð»Bðo„ü5.m†áÑ#ÑuiÕ®@@ʱ¶ÒDñgæç5âZÏìÙâ›MVî¼9ã;ï‰:ý³I6½œ!þɆBQeŠŠ9|µÁr»„h«»'œïˆ¶†£ûQÜøNÚÓMO\C*Xë;'òŸ~ö2$.pÉ®ã†9<.jŸ¼O⩼[o.•ãIªÜ[-´6ðø‚îHUÈYÅ2®Ü•ZôŸ ~Æš·|/^ðæ·¤YGpòkú¾› †KÖXˆò¡³(ÄÆÁJ¤»Ã9“#-øwû(x÷Å}¥ÿ†~ëÖšmÕ£Éáí\’§…Ø9[ ¸:åži3#Ž9¯'ñ¯ügðËBòtxåY{§¹Öî®à»ü<§d€OlcÝKÇ÷z½ƒ&¹¯k÷|®'hnµ)¦ 낤† ÃÜúšúÛÀ> ñ_„쵋?-Œ:­õÜvËEotñù8‘£EÄ‘,DÌÀƒŸ”œæ—Àþ!ñ½í¾±3ü=¿h ’%]Yî?í¨ 0O3tvåBÆ‹ò±%‹ cò•åì^"¶õ»¿ÕîeR÷×™$¶„“ó lžÜ/OZî´¯iÚ‡† ›O[¯-Äëu‘¸€A’O\œ{@¡6‘ñGÆšÎëßÙ®ŒÄɧèšÍ‚ÈÎàn‰„rùNŠÜ±óI~˜Á&´õ†ü]â1ÿ ´R]\ZÜK©Îj¶Öz~›Q5µGœ*„lJQw€ã9¯Ò|-dú´6–/§M|è\Ð%­£c—Ûœç äŒŠÛñ¯Ã]à 4ºç™B' ëäV1Ȇî¹"€=sÅ~%¿°ñæ‡ký‹à«O%ÀµšrµºA•âL’!Ÿ¹o(q’Ç€xmOKñü&R4ÃE–Éüí/G½ñLnÊ_‰…ÒÆR"q½>NÁòÇɼ){ÿ ¶¥ã¤¥ÅÔåtÄB£b/ÝAᇸéWõí6ÖÙïⶸÓâ¶ýÜóË ¤¹ÊDÀqÈ9'‘ÍzU…ι'‡»â;›c}% ŠáãFªu ÷ûPÙÚn« h5Õ53Æ>¾ÖtkhÆ‹4AÒÆÉÁ #@þYŠ7b«ºT@Î^®Äÿt½ àê³x@ºÕ¯e*×uÇŸx#v'cùˆ¬À»$/È ~+hßb¶ñÑ[kÙbðôZ;(åf¶AçïÁâµ>(|BÒ5sg.¹ÚîÌåIŽ×l†È!êqê~”ê~=ðÎ¥âmJæÉ~%ømmbÂk‘$K0°Ç™¸ðƒ=kÓ?mhmü=ÿó|±±¸ŽîÝum Eq •ŽtYß$à€^õò}†¥¡kC¥Ü$úU„^[ËçÙK!¼¾rÍŒ!P}sŠú¯öжŽø7«àdV,ÖQëzR@êIFˆNá s‚1ןZü–6þDrÇ…;dq”mÃïÁï^—àÿ A­|7ðÝΨC$]H±ƒ)ó°€ýZòí9Ãi@¡$üÜúó^½á‰B|ð©SÁ·žQÛ¬Ù  oeÍ”qù¢=:'áTõÖÎá@pvœî#Ú¶å°/o .æfpÇØc·­súËm>áÐaw¸o›ñ j9¥[ÖxX«Aïí^‡áÍcûOFSrBÊbää¶p7ÉˆŠœ¨>¹®ƒÃoöOßåsçiã{šà¥ÖyÜyÕÕÃ]K!‘†x=:š‚GÞ±\€Í>Ý!,9'§¡ ¾¥-ë$rS Æ6ÖŽ‹¨×dîpS@=«{r.# 0 ëè}ërÌUž\ƒÓÛžh¤…[©¨ÀàÏñ¢(²€;ÌœkY'mòôlRê–ÆKm„+dà{Pn æ—¶:Qv»—1àvÆ*¼˜&–&o¸ä}êmÛ€PIæ€$¶BJ«cÒ0g»Œ‘ÛúTBCy`OQÚ¤šBÒD[?+cжJùO Ž@¤WƒxŒÇ]nÇqŒúS…Àc‰ˆ;!Í\Ç—-Î:µFKì3} 3€1ŒÓ¤••Ź*º¯œJ7‚1Áþ´!¹[[Ÿ1›†Á^ŸJ|.óu¾B²å»ƈ£ØË1’sHˆ‹9ä°9Ï•I¥]1‰Ws¨,ÍŸóùU´+rs >˜#¥diI$ŒI =ºþ&µVA>v6Ò½qý(̈xúÔ‹G àqŒñQÛ¹ÞØ ©Æ=}óRÄä3 àg=¨d‹tˆ9þv©íÑaˆ™/=¸æ³¥¹96óm16Óœš¤·}s$7Xî 6ž8è?:èäHñÏ<ç5.•=­´êÚÒ›Y#þzà„Ï·'ô¨#¼Bb–4Fÿ3Æ1Ó­%͹†)gEÄEƒ¶7N9Ïzô bG†cŽÞXþÌ—7!mBl–]w³gª¹SÞ¾Íño…´Y­ÌšÄ‘ë+n‚IbVAµsœdqí_Ú^Ez“Ý[¾L„6ÓÁQž…{WÖþ¡ck¬­¥ÍËÅ$kÑ3÷€ÈÏNù4€§@ðæ¶Úw‹5}Rg‘‚ŒVGìÌJ u#òyÅ,m£hóMs£vK+yÝ®¼÷&pN±Î _~« Ô¼=¦½¥Ô‹íEÙGÚXA²ÿAøŠ§¯ø ñ&Žë5¬ËI6È0Fëí߀*Ãâ½áµ%ÖÝ7«´‚UÞN:úÇ~µ…¨êz=ö ’Ãi¯´ðî0u7ùáxsô­OÃ÷Ðiv×lb»r˜TL6Þ€ªò ëŸz¡?†ƒÝl¸¹ó$>emU=Æìý(müK¤ja}zß[–XÕ…¾ýMäöÎyÚN={Õ­W[½Öô”º×Zñì$xíå´ûzƒ32’ˆ.á¯bÕ(em;0Emf`’O!wC–É䌓ÏN½ºVŒkµ0ŠêÞÇí…<Å9!ÕIÆàzýlPøŽ/o-á¿W k!h\Ï$Í ŽÒOç ¬<{=î³5ÛXE~ò É4¡¤@ÀcÏßZ–?†͵ ulJp åÎ:óÔZÐÓ"†;A`&Kh†t¤Œ·÷Ï·ã@Z&«¹ˆ‹BÒÖSÄ+,ɹ²F[–Ï\ηt};BÒõø¤ñ^m8¶—ù]“¡(àð;m¬KÅ7+t Ú¡Ú$â]€pFéνq>ø£Çm$×dµ¹wnh‘åBvàgë@“ñ Á¾ÓüH÷oáK{Í&匑}ªf}ø\dí8=s7iáõÑ%½Ò|'¡ZE Ë#³×jô g¾+Ó®>Á¨[Ëawìko*Ýœ+´-Ág×±þuË^øbãÃrÜÚjQÁåI/œ«°F1ŒÈãž”ÍXøªÀ]›ÛÚ9æBª"rŽÈÍÜdgÒ¢ðæ¬/o.£×tëÛÖr$…~Üè±§<8Ï̼g'éRë7¬/,I+$Ý7Pzœð8éT´ÈÍÆ«*4Fíè˜Ï¨ÉçiéÓŠÓŽØË¢[>—£hÉwh¬7ÎBXàä·÷xϵX™îÚÀßi–º2+mWI ;‰é•Ü}Oz¢º…£Z—ò'’AŸ)KmÆ}}išv6¹hâÆTÿFÆ7¿Í3ÿ_@=hX5-JÓIkI4Û¢wÞ×AJ­Ð‚ÈQÿê¬kûMI¯"´ibX‹JÂØ”³`^1šéç´–ÖÂK}NA&P™%v•'©b:¨ì=ê;-&}G3iíp‰t™uYFÙ†~RTõüx÷  ›y¼C4nVåm„)*¤)lmcŒŒæºÍ|w¨éû<)nìÑ–…bhRI –ùˆù§§ÏY\4ÖÍ"U‘Ú#üÞd‡HÏPOГí]¿ŠÚæƒyö¨ÖÖÅ#mã*$òÊ€ç9ÏZÀðî­«Û[Ý.»iÔ¶ˆ#•LÂX€3‚;ò pž:ñ=½÷ˆ$òÜGÕÌø†&:iòú“ϵu3\´ÖÑBè1Æ}=«›×TܰX‚:s@ðX4wC$chÅlA‘jÌäOn?d홯•œmôç·½tv6‹.‘p_a!lã?•Xðñ‘Â*±ÇÆOlÕ—¶f¾rÄpzÒ©X?Ùníñ(å±ïÍhÛÈ&c+~ø³ ò ©w&%ˆ—Ú‹÷óÉÏjçï.êöEgÝ$gŒzZºë“æ*í¢·bÙ?ιû—RçôÅYÓ&(€§skZ-OÊŽ V=sÆ}ëÁ¼¤ž¤ãŠ’þáE¿‡èqÈ>ôÖø ¼]©Oc µL„¹;@àc½w^/Ž{‰—OÑJ¹·³ nŽSŸÆ¸ƒ7Â'½Vß^ªÁÇÕK0çñÍzg‰-çµøÜËrÊÖ²éaUÚA çë‘@/´ždŒ#ÎMX‰0?T‚A¼àÝúÔ·ÓdŠKw¼R©rÛg¨’EAwgäÍnÌ|ò—Û=ë{N ûÀ¤#Ž*/H¦KVV#3RÚH)߀1é@úkùv WºŒþu£}+D"¶}¬$Îzâ›a.-°¡6ç¦Í¹l Ë…!ð9Îh–×àM+X‘cå%Ë©þîzþµ^ ¬ÍµNs׎ճ­Y ^ÆM…7¡Êœ÷kŸ´âœ#’Œ;0  XX²$òx¥'ÍÚÎÝ­@×%†Ð;ôÅCld’`“\|¸Îr(â\"JÅŸ“íœÿõê6”)RòÓ×ÄÛˆRèµ-¼K,˜äÆG¡  Hãa½ŽoZ#e’y'€½©¥<°Tz~u͇;ˆÚˆzÐñ>Ù ØT¬X¨ xèª6÷kæíb8ϽU—YœÈv?Êx Œ¨  ÿg1üåð»àò ·Å‹ €xõ5š³¥·˜Ê‚q“É>´Yk’(`Ë’ÄòxÅt"çÊLîãÇ­I-À™#òÑÀÝÉá€õ¬u¸á*Çpë×4[jM±I0ÞWÞ_=(ÅÆ¢ƒo—¶9'­m|<Сñ©x—íæ¢4¡#ùvHË“ß<ñ\ÅÔ¾t‹+±MÃ?J·¡j—~ÔÖïIœC-¸ÝótqýÒ;ƒé@ðˆã™Y 8cÉb úV¿…âW¢HcgÝ´¤‚¯5ÎKz5^KÔÍ·ÙòªÄ|Ø=ÆièÒxu"k•ža‹;È 6¥WŠÌØøzâ]‘„“Q¸UeÎâÊ9Húר ¦&¶ö‘^Æ­AŒH”mù»g_!xŽW¼øEoqk)ŽêM{P‰òGîâÄ£ãÔ¼û×Ü:M弾ѭáÓ%»2ÙijK‹ ÉEÃÕ†zÐ/âíQ¥û=ª©‚Ò>Q î aw*‚÷QKH^ÞÎ[™8fɺö8äzWi†n#¼´´·um¹Ë>쟗+ÆñR¿‡£¾,Ñ,,®¹§aˆdŸ¯aÏæ’êÏ(Eãœcó·'œ~`HPx 8ëP\],{bŽŠv>#™ï^£á©õ+KOµ½Í貈[Äga+$c¢@3€*¼ú4É.áuRG7§¶hË´ûY¯QÖ9ï¸&P¨FÁœä¿dM"k"gÕ J•T1©Â Éü[Þ½zÛ œêŠñ>ü9 ƒŽ¼cj;¯…¶ÓÚÁw§’Æá·«œªºwqéŒûPœÜk«¡´“Àûçµùã Ì\dçæ5MzóV¹š[‹[¸ŒŒ °S‡SÉÍy«yºt¶iäÄÏ$·L#lÈr' =zU;];KÔô{„T¾û\s§‘.äKlgçVÈÝôÇë@gCjÑ´Ú²5Ä0íÉ9F„sJ¿âƒzOÄ'Ó—OÕ×P¶42JûY[v~_LŒóœ×y¤%–#8ÑíoP±ÊÊ™bÝ‘ï]Göÿ„Þ¥Ôt;› §`ºBÄé·¦Bç½r÷»ÐoÇÛf’}í»Íß¹Ù” – Ó$ñÛ©¯Lð'tO‹šj-ôR6¬\EåÊŸ»1‘Ã9Ï'‡ã ý¬Ëk—'•”{‰âyZ¼÷äÙµ¡¢|AÐõ›Hµ[ (ìü×!žµ•y(+žhšñoÁ'MÕõ ©G¥êqEçDeb@!v“ëÛÖ¼–_Ꞻ”êð4«>â—*Ûß=>P8çsÅ}ã?Âß.]¼Q¯O§]< [¹­|×€c…äqV~~Æ>È&øÏ-åìñí‚Öá#žs…tUÕ˜ž¹À¨ç]7M†êÃíߢyy* ÈÅZ×§K}.ÚßHIÄ »ÊUæbOc¨<¸¯¬^O")þÊ¿ym¥E;c˜7ÈÀ9¦+°/ˆ.õÞïÄ çŠEm÷Vž&÷ Œªyl2N8,N3Œ“@6ø/AÔ¼_¬Eà 1«-ÃÅØ‘’§=ñŽ•cÆÚ`Ñà ˆ …Ú£kê6ý;}+×5OGðAïítM/.í.–‡cù¤õelàŽ£y‡.—TD[im˜ÈáQØÊI9+üZñ‰¬´½7G·Öõ®à³°Œ%¼ˆŠ€`¶%là}óë^àPOÃR\iXŸŸ¥y„|?&£á‹{‡•Qm ÆÍ¹sŽ;ô潓áôe>x,¢¶FŽ®¿/ÞmÇŠ[Ë#$¸!³òŽçÒ¹Íp+ìòú©ÜO¯Ðkš¹½¿`eÁùO¹¥s7gtäÜ0!W€9ãÚ€3UþÑt›oçÖº»P‘èW;pÎP(^™®rÏG/©¢¾v‘» 3Šë“KØþZG+´ƒ ÀqùÐUú:‡d;O’Ž‡Ò§±Ô=:)#!ßÊ yçè*¾³nÑ,‰Ë P¯J]7S…a“d,= ª ㎴_Å7­-ÎË”_3œvúúÖÎþìªààæµa'ËzÑ‚{/[Å72Ãccå*G®*òNVæ;–´Öãï@àqÜ¿ZøQª6ÂúÕÖ•”8ʰÁäWªêªø›âµð£WÓX»¨?ƼïÁ·_Û.b½¸†n'3Œ"Œ{tßÚéZ7Š­íu#æy:s(aÐü@0Xý°ÏÄ’zÕۭˇ%Ëô=*-*0`.ç…Å]YAÿY@eºˆy’6áÓ&­ í¼qêjÔÄ!0a½Njtœ9ÏÐÊdà™\ÿÀ¨u‘¿å´¸Î~÷J¯%É.>_çM:ŽÅï6=hÈŽAÊÌáyãúÕ-BÝ‹‰näóVRïvCç¦j Fåb pŒpIíÅI’æßzÈvŒʘŽÈX¶F9ϯçT´ëÔf à¿cR>LdHغõ öãÒ€.ApÑJËpX3sŸnÕ,Sî™?&rIêj‰ºDŽ™98¨šñ£ P œíëšÖ–ðÄDíœþ5ÛRL‡%F@Ïj¡Ñù·‚qÇô¤v˶ëÏ4,Yºº`£*$ROnÖïÎâ§Õ-¤MmÅprrN:Ô&OÌr=è ›¼"ß ¡HÎ=éÈDÈÉÅ7ì¯çÜ$c?ÂjÜ6'•~ôÍ6ÆïÈ“á`ñéZ-§«d—\6±+QÁk¨ÈÊœ‚Gz¶Ê®PJ3ÜaWûЛmÕ– ªîá¹ÜÜzóY:µëGøàeŽL¨ÊûsïW®Kû4òåòM†êIŒn•9—{ÂiDl¸F9wúÐ-ѾÊn%9”3}ÊèuT4x7&øD‰òžKsßóœºÜÜÀcfklsýÕÇaV¼G ]ÒÜùe0sÀà ¡¨jSØøkQ´šy™nï}[Wd3´L²:œgqŒgÜšý9ø3û!xÿâGÀ?‡~'µŸO‹Jñ?‡­µ‹ClË,ÑG"¸^UñÔ…¯ÍíSá”ïû4ê>]X(—ÄÓøY,BòöémûI~¹ÉÙŽ9ë_´±bø®ßö ø=ià#N¸¶O iÆHo®’.Ѓò™¢‰ˆº9ä ó Söañ߉¼5wm§|>½þÔ¶¹…n'ûb´1Û¶B2û@cË‘’ÀÍmxOöñ.•ªévÇ{r³,ëc‚B6m&.ãrç$ô8¯§üàÿˆÉ É¤üDmJÒ/@6övÒ‰¦ÝÔÆ%Tq7•¥mâ/Ësáxôïì,ŽT=Âecû¹JtÝ…9ŒPËÿ‚~x£X¼„xÅVö°Ìd€Ø.dnrÉ(*›8û¥wsž•£á/ø'Ο¯é—Oñ;\Õ¬µ8eòKÚZ¥ÒÆÙ8%TeÇAžs“Å};§èZŒ“[ê%ÔÚm:O=n ¨1:÷\‚:çžõ5ž›eâÖ’kÜGx0ÇɼýÙR8 HÉWê:ãŠùXÿÁ?eº°’òÇÅ·7š¤Ì·ÿdP¹K;mß´ŒÁ>Õ¡â/Øtúf©âk.õö ¼2Ël€ í.òw…ð+êðnVžúýµÍNH¦+Å™Xfó#;%Fçæç޼×WâKÃãO´—@Ôn<ÛÅ[eµŠ×u¼ÛP)rè0Œ0AÉçÒ€>DÖà˜ZW‡´ï´ÂeªÛZêʇý!`uƒ ælá”öÝÈ88…âø'§€ÍìÐ_xÃY¶´B"„¤is§€C0ãvâqÇÝïÖ¾ÁÓþêu„RëY¾šØBJ÷QÀIÏñ`º·¾@ÍhêöVZlŽ|ym¡éºLÿ¸Šsm¼ŒÎ8Ä·#,0(ãOødÛ}*wvñ^¤o-`ŠÙ`‡D†3uc1ÀÜÑߊc(|{­Ý[ NúÚ÷OFžîÆêHaaãçYX…dÚAË­}[ÀHüeáå²´ÕSÁúÍÙb³`k©¢\ÝBÅ•X’{ç¡WM¡üÑ<C Y-ýý´*‰-åÇœ×8l‚vç$œœzPçã~̾þÓ°::…ÐpàbÂbÒ¨'{¸FÆ;‘œ=ómeßj¢;ÿ _øº->Aï´˜¢ˆ2¶ YI£ ðø;OZýOiÖ)s7‡íô´Õ>S=¶òñœ•vŸÌ'šÅ¸°‡IÒ Æ‘eáë8n¥&HÉ£#ïü¸<œçoö4ðãþÅÚf¿¥Á&—{wa JÖiû/ ä%¸àÆä©—¿µmxËöX‹áÕÜoáÍ;R»”Ê i×2„2©óÖ3»Œ›ö‰áÍÊ6¾’}!,/ãÙu%šùŒ#\…ÈÜ2O|¼Òk=Å”‘jz…„Öçì&i#}áë€Êqê(ó§[ðm¤ž$[/x.(çb#U»m0 g8+Ç^>´ÝKá߆Ý\èštEË[y¬váf‡Ÿ»’2Wž}µ~ø·ÁÖ–ÛIø—¦ ø§|ÚÏsfd†.0GÞ!|Þ§ãu? ~Ý]Éo¥xšž30òî…太œˆ>ç^£å^½³Šü¹øËá9þBÀ‰ïàÆë© ‚P–Š‹˜Ü ’˜ªk_³÷ˆŸ[±] Å?â³¼OµZÉqâøa2@FGÊèH|LmÓ={WÞþ;ø«x÷Ä—¿ð©ü£C ’ ‰­¼iq-â;Ç”Y•"8\†Ûè¸År^ÿ‚cø6x“àïÂ+­Vå{»+x·\çwCLŒ6·8>¢€?>~'hŸl&>/ño‚¦–É”Ï §ŠàžHÙŽÐÞPPH8ê­;Úg†î´inµ‰ß!±¸A"¡ñsµämžslbN:áŽ}+ôãáßì£ào†ž¿‹Âß³ïpíŸí–Ëhoí ä†D³€:‚8«^%Ð|ñ6=6?|Ô%[;ˆöjo¢Áow`㸖ԙ89Ú0AÁÇpΈ|)gñK¤ðgÄŸk°¢y—‡J[›¥µ@@–5%Tpw;ÔQþÊz”7Ffñ®‹me¨´–í© êÁ±°…dRÁ[+©QÓ_Ñ[GðDZ´²éž":*È^Ýä’\G  ýÞø.ãÜÌ Ï-Û‘ZºG†5;$Ù j^ñ eÀžxÛû[€Û¦’&eíQ»å'ðV‘û YÝhú޵ã-r÷U·±Dµ¹´ðÕÔ–Q–¬Òop¥X”GÞžs^³ÿYÓ øÿóý—<7áëÛnÏM¿Óã¶»–ÜÛ˪„Òî Ý«,Ê£iè[WÕºÂý/OŠÚ?xjáEü¾HµÓ/›TE\nÊa ,xÎä×Íßð_ûHü7û*ü}.;Ë `ñÃEÀTžÓn›tv„ª²:Ûšüœ¼Ö_S×üP÷‹íBæclÄ~ãuÃî‹#“îqÇËÇßø:Y4ÿøNÝ™AH^‡<ø‰s1™3n®Ïðw i¶òh-'ÛCâF0aŒb§¾ñ¶ð‚4|ç%ŽsùV|ÿkºˆy‘·ËÇLdU˜“ý«Kv>ÔÜüÑá>µÕ ü›ËdYc 8'¸ÏÒ½ëPû‹Ê“¼Á¦"¤ò¡ºþ85æÿ³LÁGå@%ï$€3ŒàÔV–»IÙÆðx#šžÈbç|íóH0?Æ­\OqpÀ,€…+œõ¨ ·H¦R£îð úTÑÉûÒd=ù­cp7.ò3·AÊ¥7Åò+ÞnkÏ_˜U;ûò%IÈÇAKâr_@¹§=ø"€="ëA’çþ ¸×w1GöI~,FarÁ‰o åWf1‚?‹9Ïï_´ðKÏÙ‚ïİÇÃ_Ú1¼[á­>ïP-«\béþΨ²y8ÙP6¡ ø×âä>.±¼ÿ‚nË¡ÛÃw&¡eñrÃS•š2!òèbÙpý ‚C¾œ×ïGüÃź¦‡ÿáøúvŽ÷1Kà­>"RæŒ9ËdP¦Þü#Ô {Ø8È^¿Žy€8Û_†ö¶ÒO%ƒÙ‰e2â¶H÷68a·£{ô=ê´ÿìîí]:x–· ­– ¤ä|Øî wSør=E÷€#½„c9#xô#<ŠqÑ­¯v¬~lw ˜YÈÏמ‡Ö€9¾iSèë•m›B6=¹>aT#r3õ•dê_t­KL–ƒ{6Ÿ1+„»e’ìqœN£Û\xj;ɤ–ÐíôûÇ$¸rÎzch,rƒéøb€ØÖK›Șã2£'8éÅnjÚ©ðæXmçO²’åÎý>´¥Ë¶adr>oLP/kðcF½¸.ôhtK³º7[{™r`  ` ã®E|©ÿZÇkðàG‡ôá2ŸíKˆ!‰ •òl&EQ¸åß.Ï$‘_mØÝ y^5£‚Ì-X©™@_˜¯<ã®@àWÅðq®½7…<ð/_Òc‚Y4ÝBæþÕ\oO´AjÒFYˆe:dãšü™²ÓåÑ.æÓo 0ÜX²È®›^'‰Ê2°ìC)z‚+×|Í?†|-$Á¡ó´˜åu’TוßjÒx†ê÷VÕ‹É©ê²Ë}tå¸gšW™°;ò7áŠôÛ›Nð¯‡*¶úT _ZƒÅZœW7[™•‰^ Œ”öö®Vúô¨+ŸLs[ô$’Jêß¼<žŸ¥sZ½ÎgðxÆjÕÒ5¶½f 72 €x­iuµ¡ G´sß5Åiò¶ð}Ò´P’Úbao½ê84£~ê…Ÿh,ù=‰þºžkêÇf0AÆ;~5‚úÞäu™[p9Î3UnµÐ-¸f psýhrIÙ 'îwã­R¸”GÈrÆsU_V2ËuU&»ýÐ$;Gz±%öÙI9úŠŽkÈîS° cÎjŒ÷"Rrp= T¶·a>fÛ±zsÉ Dø;tÚdïy!fŒßÇlø8d ¸ÏæEzƒ·ÖÑîÉId„FFs¸«:óŸ‚V)¨ø#]iÎ3–ºQUüø¯K»‘nõ«c·.b Ûò$yq”C„~¾¤T²\(Ä`óYë:cǧ GSùÐÌá¥}éÉpSv9Á<•M¥ýð9ôÅ:9r9<ùÐñxXålSRùÔœ±53*ÄÊÄ×>•Ì» é@pê!ºŽ2x Þ"ž‡šÏ†ä`žqRyË·Ô Ñ]U8¨«Þ‰~æ1ŽÕöÀÌ»•Gc½:Þé¢zØn'büê_9Žzb²á¾ |ÄcØõ« ¨>b úЗæà8Ç9:Ü¡ÃÏëTMúå—­Es¬€àF2V€5MÞùþTÑ +ׯJÈ:¼„ƒÀ©¬¶OÃÖ€6b¸ ry©’è–=ý:ÖZ£} 4p8«Ðj‘HNÖLP²Ýä1ÉüªKy‚HåÙ‰ëôúVJÞBX••T~µ5¾§}»Á9À4§%øcØc¨5j`¸8Ç_Z©3ù±å Ï­BÓ¬óÛò ‚ÆùVnçN×ï|ÝDÇåšÂ¶ÖQ$S’0sÿÖ©îõȯ,&IÜÃŽýÇå@¾øÁ®Y|0ºð Ël|3u­YkÆ&‡÷Éum‚&WÎùciR =r+úÿ‚?ÝØøƒþ ðvÈÜÉÌ>p—K¿8=A?w<Ú¿›­múÂäòe@?í_ÐüWâå—‡àŸ´©ï´ÅÔ/¼6­mk-ד4‹”fÚHÈ @Ïr@  >;øOPñ/€-.l´Ë«Ëï êVšª$'΄R æ0£œ¡a´kÔ ¶‹QÒ6InÄ:ƒÎõé\ݧ‹Úê9¯$Ž¥l97«˜O~®8ý)šž»gÍ>›:4ÔOxЧèž}(£¶Hµ 2®àÏÀerGáZ²-ý–ÆÓGЀAÈéšâ4Ûù.-¾×ou£iÒHNEÕê)Aýâ»øÍp>=ñ?løiâ?†`‡(Ë©,ÃýôŸäÏ® {ÌWÂöyâw–Ý·lu8luÜiÚ†µ‰-™ôø­ÌLØHÚ?çŸZù—Ãß´·‹ü3¯J¿< _ ñ?‡aô¯”Ïüƒö}Š4SñßÀ¾b€‡Z‰ˆ?‡õ¨[þ çû=Ø9Mkã·ƒ'%dµÔQ˜qžØ ©®|C>¤T»¹Õ®uiÄiçA$\+ÙC{c¸©´›Âd‘o`u¾?,r³ÉÎzôù¾•ñ³ÿÐý™àŒ\‹K)€–c™tÓ>{`/ÍaXKÿ~ÍCkEãÜ:7‡oä†yÛû£ùÐÞßhšKé^÷d¨HV‰™ÒEåçh䎾†–{öG|SÇr½ U‡ÔúWÀ÷¿ðpìã«Ü¬ßÛþ3£\~ãÃ7…ê<±Š§uÿ~Ï‘ÆQn¼orʼnóÃWÿãÊ(ïMG_+ÛjI{o6ÜyŠq ãXu# á/|¯Û¾£oö-6êiÕµ»ØUÁù·+ÃÛÈäw¯Š|Mÿ|³Œ¤:wuEX4Z4°HpAÇÍ´vúæ¼Eÿ |&·¿³¹Ò|1ñRâÝN%±·Óí£“‰fÇq³úÐÞ?ðˆÉu`’ëö)a-¢íl$í9 NW¯­~SÿÁ~~&Mâÿ…~ѵ)ï<;¯k–î"Bâ6Ïå:çý–ë^ÚÿðsÇÖ0 ø[ñ"þÞȆöîÅT£¿8¯Ïÿø)Çíë¡þÝ(Óµx{XðâÛ¬æò+ß ™É˜ÄR8S*IÆx4󷜠¯“ŸõN:W®Í²Ohå,ºdñœ+ÄôÛµ¡ål¸<ó+ÓßYø[I@Î„ØÆ€îàŒw õ{øÒ6²ä¯së\µÝÜL™¾r8Èájƽ­G¸«Î¼dr3X:âȇÉqÒ€5ô›˜"“2:ýÞ9éVN¡€1~lœ 㥻*nN9ªÇP`0Ý}è«–õýf‘Æ5RmA<õÈã¹k˜kçÜNãžç½FÚ‹‡ÎI'ô ž]BX£ Ž*)5(•U˜c5ËIrìz_Æš·O¸ã‘@,ºœn †]ÙÆ)UŠ5;Î1ÜW3q|S8Ç­L²4hI*ÙйþÏ—ið·Å_g’Úí\1å©ëø×§XÜ™uȤl!6èä7l÷æ_³ òißé~¿ÉµÇèÚŽ@ðÅ.ºV‡ ݹþÆÓlîQr Emú·Íëë]Ÿínt«v𮟪êZ›Bqh<6æ;y3‡E•·ªõ Ž}«ú»±ý•ü¤óoà®õÀÿA!Š·§| ðΖwÙxCK˜òRÎ 1ùPò_ÃÍZïåÃ2†c´)ÒN¥mðCÅñ@d²ð~·_yš-*ão×势­(¾xešÞÓšL`¶‹‘ÿ|ÕƒðßKM¿‡ôèÕ; }1@É^…ðÅþ4¶žïÃ>ºÕa†V†ií´Óv±H¼2;,lU—¡VÁÀ«º?ì·ã}zäÛè~ 77|ÿ£‹(Òfú$¨¦¿«K…Ö ¼šóš.—`u…k¨¢µTûL棗Àž sRx»ösÐ>"Ûìñƒ¤LÏÊÈ *7¨aÈü(ùV?±gĵñ$;ü?¸]jæ#4ZcÚÀ·Ò þ$‡£.9Èoº þ ×ñÂî};ág‹-VC’¯¤ˆôÈÏòÏá_Òøýšµï†’­ÇÃ-FÚùaVÏVA.¢JAuÇÔÕø>,Í¡N¶ßt+@vùê ¶Íîtühù©¶ÿ‚f|}‘Ï—ðóÄ1“×u¾ÁøœÕÛOø%ÿíw*­·õölÿDçñÝ_Ô'‡e±ñ¨›C¹±»7 G*äš1E¿¸ÛÎ}À åþø%ítÀ/‚¼JÛŽÕ$¯ÍW¤ÿ‚=~ÑÃMøÅ ²¯•ß0dãq §œàWôÇã†1xóÂúF©suek¨!ßN½–Êé?ÚŠx˜`=p>•ûïý",fÞFÉ#xlozŽãO¸BLS?lûžÔø-áßø6¯Åþ-³¸›ÁÞ:ðö¬–²½¼ò%ôS,2§ÞŒj6°î§‘M½ÿƒgüuXÿá2ðí´ì7žër°=0ÿZýâƒÂÐÛÚÈmâ¶¶3eæ"¨g#’pãîy¬/ xSJðè}Ãн¦›V5 WÉÂ@sŸ­~ø6Kâ}ß—“ãÏ¡9ýÛù’o=°)­rŸàÞ¿ÚÀºT’xcKð—`±ŒGo‘®}žæD€b¹M¹Îå¥Ao§¬cpþ䨪—6–±ÆÏså$c.ÒLw$ž*ÿÿd‹¿³æ¡,<âm ­âk‰ÎžÒ$®73=³LÎæØ¾õåñî¦òíÞgÆG•*ÊHú)8ï_Ôß‹þ-~ÏÞø€¾)×5Ï_x¾6“H[‹RïQ˜…ÜÖÅcÉq…+dp+ó³âf¡ásY¾ñÇÿ‡ÿ üSöFå!¹ñ‡„âÓeûçž7{Ý‘˜Ò Â0‹’ß9,Àüwº†âÖ,è>2á[ Of=µKBX÷Ii"ŒnÝÉ¿O<9û ü9ý¤´ßi^ øE§øb¼Meµ¹æØcÓâ*_ì—1M%½½«Á)•ãbHŒ°jâ¾%Á5>k6!ø/ñ£MþÌÖlDÖÖzˆb¼–ÅÖC3¬Ñ—»@ÃZ°;Ûfz`óÊêå<5ª!aÃ;t¨ œ³éÚFAìkïk¿ø$6“ªÿf[è?|Ik;éÆþkÍá¥Æ™ctIm°¢–«.ÃæºHÃ)*23ç¿ÿà_ü ­^Å®iZ èñ~±ý¥iúÇ™´Â–Ëæ,›€X¥ þðq¸ä—E䯹ôšE²¸û4—ÛH–êÛD»G–œÎz×¼xïþ ÷ñÀwPØx“ÁwÒOpÅ#j6 APÂñ§—9#ëœL×ñKà‡¾ë¡|^ð§ˆ|;$%ZUÔ4‡ÚÀ€rŒ¥£n «09ÆI46M74ŠÝqŠXìc˜íÜU¸àóŸÆ¶#c{«´[ØÞ}ËÀIHÿj,îSŒrGz¿wgeab–駤ZŒ§zì}Æ#þÐ=lÆ€=Óà‡`ƒà•³Å‰n¢’I÷¼ÌIçé[Zv—•ž›<–áe…9_lÔ_Dò|.ÒÖýUY"Û!Or=FjÞá;·{ؤ¸v´•¡LüÊ3œé@(6šÐª‹¤Ê°Þ¬9ãüúÔ¶ö”c•D8n¿÷ÍiÜê–{F·aÝÓîC4d)úã¯ãPË.™ˆö0ùIþ³xi!c× ÍÓè8È4¨om¤užÝpg«g¦ª§Fheš)ù#ÛÉþýkZ¹šåcºF'j­´¹ïíS˦ý±ÊÚ›¨¥–¸íJ)’ùg=IcîsŒP-Å„¶èö”™@Ú –ÜQkáüéÅîdkGUbŠFYˆèì­jÆ‚ÒO1üÇÛËJ‘èr*ÅÍÄW¨°ÝÅo„9Iv“}×nü俀9X¾Óå0•% ÿuФýjΗo,¤¤`Fø yåÏøÖÍÜ^RÇ\$œEóŒþ5=Ä‹| 9PËò0ź``ðhøF."‰ûlC¨,àþÕ1{·Ü?nØ$1õ> V’Y_iWÇyb ýËÁõ þ‚­[Ë©kìúTm;DfPàú€yÆ;Pd>„ -î˜>gŒüÌ:⤗áÍõðÙ#Ç ¯Í¹Žsø•Ôhzwˆ«\˜!‰›%$@Îÿˆé]iæ ·‘ïÜ>` `þtÅé^ŠÁíedœ.ºƒïŽÕ¯¥èâTÿE>r’v˜×€+q<4EÆýòí”±ÇÞ+Ó|Co–î(öîÇõ4¿m¨=õàó-ü²„›‚Hlà`¾õÕE5Ýõ¸-­m±- ;Œ¼uã•#Ò²,/ô‹ëhá¹tyq2[Æ]‰øM«Ãoml.t§’_4ð͈ö€9œž½¨kK¶—ZÔR;ÍFáåÛó(Ì`ÝOsŽÕÑBØŸ°-ËÜ:í·_0™ñØï'ñê8¯-þÔ¹¼h£µÊó¶D~@ÿxÖüz¼Ú¥¬ ªê²4‘p@3Ü÷ uømûjü\ø[ÚøKZ×%Œ²×Suº¶Qï¼³(öWп¿à¯š½¹DøÓá{ ´UëG¸¶}|©~R}ƒf¾Õ¦Ÿ‰î–yå n6îuúT6Þ*7Ѭ„–ظR8ÙÛqÈãŠýdøwÿøqñ¢ŽÓÄVšeÔ­·ìú°û#è¾Fü {—©\jvks¤Oi43 Ë$EdR=˜dü:mb5‘ ¸¶ûC¦2D¹ùqýÒ1Å[ð÷ÇOüW¸ø+â/èW`–Hmo1 ޱ¸hÏâ´ûqs{suyqÊÁ·–9@Š8ÎGS“δ¼¶HI’Qœü¡r6õ«òïáüâw‡b†?ŒF‰â8Ta¥ l.¶öÁ]Èçê¾ø%ÿXøSñ:1mãMj_·N¯!”ÿ±:eé@P‰&Y2²@{e†I¢U]B"—¿g’3òË•onk?Þ,Ñüu¦%ǃu/W¶ Iip²«_“§ãS‹“m¸;Ž[8 œšæu/ƒc߽׆&¸Ñ/[þZYåŸuèj´“ø·Á±³Þ%¿ˆ N²D¾\øút&»»gF/*.=A4±!¾f :îÇð‚s^ø¯§ë7K Ìói·9æ¤ØÃóë]…¸šáwÅ)e<äƒYZ€ìµøJê‰mr«Áv_™Z‡Iøf4‚§DÕ.a‰ŽZO2? €6d,Ëóבڣtf8•Ê㨥_^A¸¥Ïšê~`£ú`Ôw:4þfnÀ#¿Í@ ö¨½^luáª7ÓVâ0ÐÜ]E*ŽiñhgyÄE¿í§ô©[I“)å©P:©ïè(+{HÕ÷Ou6ò0W8éS-” a’Wç%Kf.›§úRœ§­Ik¦[ÅòÁ3.Nvƒ×ó  ÷Óašßa¹Àÿ:ŠëC·ˆ†Pãû§8úÖ²èê',xãæ9¯¦ÁeeØOŽ´ËÞ¦Ÿb¡µ6Ê— ·i-Ϧ?™¬‰^-ðOÂïÜjum#JÐ$"Úi5" ³ù‡hGÈ#æ'o8iú;‹ßêòyž:Õ¼Mucko»+$ïœDÆ’*€ ¡\’NNlüLðüµ'‰ü9ycáH¼C«]øtsR:‹êÐÚnˆÜ¤/O"†Ž`I•9` Q>\_xì¼W£j:ï„4›A-5½;ŲÁ>‹©DÆ9’êR ;¦ 3p0ç¡G5gÆŸ±v‘«ü@¹ø‹ðÛÂÑxCNÕtÅ{é´¯ ÉäÀ`›uþÍ•ÞKh¶¶#å‹g4ÿ þÈÃö€ðÖ»?…|Eâ¯èþ'ÔaÔõ4±×c›FÓ­ZÕw\Û¹*îŠp­ˆ’‡Üß0;ŒþÖöCø{â­3Ä·>/|17ö§øçÄ×m>gD‹É†%ÄMÏÈ’0îÂE{ŸÂï¿ ¾ZËã?ŽŸ*ž‘„Ê-¯1Å)`LûÑŸç`TŒy¿Á¿éßµž§£ü7ø{ðCž2²Óõ6’æÞóétÚE¤…Zæà]ƒY5âg¶‹|’+ož1|sÿ«Ót¯ë?iðyøs4¬ÐÉikªÝ̺u¸RhÒú Ž%vM¨FG*7OgáßÚâ7íÚ÷õŸ êþÓ|-qçk>ðlöÿØ–±•YaY¯™rÒEµ@Øê$^ňUë¼ýµ­Ý[ø³â׈¤ø£C<70ÞüHðÖ£g§A±Â"Z¬þS¼îÌ¡nŸÌÚľ 'ë>Õ>x†ïž3‚ú Ý+k¼Ó¤°•Ñ*þL€0R3‚@ ‚E5ÓÉ îÃ;ÏËLV¿í9â]wãoˆî|)söëKA“_j\ên‘ï¸ó®{–,fJ®Á·©®OÁÚ”ŸØð´À—,„úçÊ€>p´Õ¤Ò£kX´»iõ)Aóî NÔtÏ ¨îuÓqj¯©ÏØÛÛ1½Y.&˜c ò¢}1MaŽOÝLêՆ:íàµsf‚áp9e2~©dåÝØjáàÔ·—÷Ú¤Ì[æL¯§|+K]LG{¨Ü.s”EÚ[ñz ŠISæ9m½=¿úôºTQC~âÝU››åèÎÓ¼2šmªCoì_ãf%‰úš´Ú`Š!˜¤<ôÆs]„>7Fq׊lÉ#ÆVÙ¦lÐöm䌦Ö$=œUÈôÛˆãìÆ1ÁÃb´†Žn£i.vÜ@•O‹qª²+óÜ矩  ØÑ$;c;¶œ:~u8¶j°s‘žjA¡Ëˆ¼³Ø‚H5v-#f3f“ë@všv[÷`&qÏçS&™ó|ï»<â§žØÀIóLj ÔGDL'zäðHúP‘Zi]UGLŽjõ”ñ1ÀÏ“U“FÎ HJ^õ£cäéãäÃg@•#\žO6%n‘”Úß­nhž!·Ó¯`ÎXFp‚I>€TZeÌnÓ é³&½ƒáZxhYyš†•\¯;¦@»þž(ðÄz}•ŸÏaw¦Ù´Œí±fBÇ$^ùükB ÇZ¾X¡šàGØžaË`眎>¦ºkvs[Á%žœÖ¯up°)ŒèÌÝAÔñO¼ð°Ò´÷H¤]¤ÎÙR¥‡‚sŽÙÅrš—…¡’c¥ã"C„Ÿ¿éŸJ~“¢O:\E©\Û:A¯¿å]Bhz'öšÃªI}qpêÇ ¤@·bXÕ+߇—­(“N‚(#‰Ë»—i?t(0üh IÒlôxä¶¹¼Qæ6å}¥˜A‘À«ºþ™yxöº^¥5î‹bBÈŠÞ››¿øVÊiº´éÙGÓ`m¤ð}? «—Â0ê3ÛØ@ï2ÛdÊG_ºxÍÜió¼Ûy’L6Øß.zœUÝF{:EYq±A%ö翽'†~ Á>™Íœ7òC$~oï@Ùé¸uÛ­QÖ>2XiúŽ5Ûø,]P– Uǹ={Pv÷?ÛK±Ës5mʱGå‰0z~nqÍtZv¿an®n´í­žTG»oÐú{×/£üVÒµ™ÒK+Õ»Œ ü‰ŸÄ Ÿ¥néÞ,GŸþ%‘»(ûë÷CÐó@.…ã¨ô‹´»ð𖉍Ä@[‹ §¶p}IB7­zÿÃßø)ïſﵗU·ñ}¥¶ª¼Š½ñ2monA¯´ñeœ1"Ɇt<È{:z£&´Ñk'û7K–Áwˆ×)‘?|äžFhô?àçüßÃ>0Hàøá}wÃs‚©-Ų ëRO—\_Kü3ý¢¼%ñFÝ[áÏŠ4}Hž‘$Á&_¬O†ð¯Æý?ⳤÜÎðXZO§t‘$3cäw#ZË‚fñ6¨^PúTª .G]Ø#O¿jýÕQLâbFà ¸P)×WË ±¿a±±•þÀö'ë_Ž¿ mߌŸ.-í| â]sWÓÔ…ž§*jP1ÏRd>bñÇŠú3áÏüN{€–ß¼ "îÇ›s¤Iæ*‘Ô´ôõÀ$Ðè-†±oäð02OAqâT}Ê¿½ã+ÛükÀ~Á@~ü^1Åáÿ[Øß8m5E6RžØðàMzݾ¯e{šÊxf‰ùY#ùÕ½Ã/¯¨kßbEhÒbHÏÍü¸ªŸð™\Û¸²I$ïÿ0>€wõžú‚JßèÏ»žB©&­ÚêÅŸlÌÃ¨Ê P.ü]°´Ð"ñ5–Ÿy㯇kã[«dºÔtoÝÉs«Jˆ›L³™§O%TˆÔ³ˆ†Ñ^Ûñïö®µðçÅh5½Wá&£¦øâZÞ]']ÔaêùfÚÊQoæ:¹™†í¬…¸‰ñþ ðÇZ!ðwü:ÎÏJ]"X5]ÅÆÚòá¹léïxö”ÀûØäPŸÒ¼;*ÍzŽ'Ó @--2;¥¨cåPÑî1¯£>ÿÁD¾kÿ.u{¯|Dð‡‡ÒÃI‚ï÷oçËgó.Zó+Ù–b+/ö©ðµçírú?‹~øâ/t«6ÜÈ-ì´iAYT2Ég<± ¡iwªÁ~ë ÃFèòþÇžÓüiàÏxÏĉr—(Ò4™ÞmëÍb—pÞ©‹qnv/åíéµ…|—ñëöEñwíñO¶Ú׈o>,˦ݽ–—woâÙo ¹ª×ë3ùs ¥b9’29Îöí↭àïj¹yà?í-nêÓ®-äݲI 67Öò}š# Œãdl`Hr+˜ø¥ð Òt?ÚÓÆ¾{]P;I°Ó|Y Çr$Mɸ„*Š]˜ö-´ã€>Qø¥àù|ñƒÄšÅ„:|öÒ€m’Q0Š ‚áßqÝœüÄóÍqú2Å¢šê$® ýÜçÿ­éZ^,Ñâm&Þ=KV^gÎÆÊË%9ÆŽ>†½gû"8_†r@OJ‚m*(_#i8ÆcZóßøPÍ¢ÄÚµŠ£bÖÍåí”ï?ý+¦@yTYg•ö­i,ÙŠ5#g_ÌÕIVYKySI!CØ΀1ît†œÅ$ÈÑ\Ežc`HÿÜb³õg·v`­tŠ9˜€¥¿úÕгŸ³–ºwWþ謹5 ggÜÅžBh;}Jáá_&’Oâ Ø÷æ¬>¥qmjÏÏÓiLš"Ô-â'R}*içã1*1=Âh._ÞÐ`ÇŒZºt×s±ÝÜçp☌d}³ŽG í⬠¨‡.ÊY; а~þ€½2J‘™7˜žGÕXº³Góg #©ö§Ä“¬„L…÷ËP». oËrIëôÅTšÁ´½Z9/$+ ÌX硪u¿uܰ2HGæ«èº¨Ò¥žMEPÊìJÙlvúP§ö†|“ŽÙØN>•nßRˆÄ¬Ø?RÉÅr'ÌÁÊž?ýT’øå»Œx±@+y ààÝdú'¥iâ³®2¡ë\Úx†í²‘ªªŽ¹^M0\É,Ÿé,ã‚O8ÜÛ\¬ð¡´ÞO¾E:Y>Ïó–^ºõ¬("Øm'ouÝý+E]n@$¥üØn‚€$—[HÔFÃpä2öªòx‚YåÇ8ÚÕû_ G«j1®qêèÆDže‰‘†0?{<òj½…ô‹dø†[Ë+ ~PцB}Qµ{)’fm¿wi þ«k¯Âˆ¢msÓ1S[G¶²„¼ò^H»‚¨EÎyö«M Ú͵ô‰dIU‘AñkG7W*Ï!YYFä@B“í“ÅwúMý••¹¿»±CXf‡ÓòGë\·„´M/XŠHüSo©Û¬&æÙƒ ˜<õ®ÿÂ?³Ÿƒh:%ãÞé&§hÒ6·¹lm¹ù—‚sÏáMÐïü'`'´Õtw³ÜwyC«v9Î(È4[Ͱ@ö02ÜlÄ œaŽÞr3šÇñw†¬µ+–¼Öl¬$™±–{p$Èè¹<ú6_kb(®¿²á³k‡÷ˆ?ÙŒŸÆ±üCà/ éW†x‡Ì ”j6ÀÂÍÜmf,õ }SJðü6ŸÚFÆ%µÄ1otP„œãpZWÔmžè}•náœ\`ùüǵ{]ßÅ èŒ`øáÿêH®¤Éc H¬WÛO ŠÛо"|%ñëD/-ítò9qh"-ìr½>¢€%í´º±G½$ym £E2žøq‚?ùÛ[HôÓzÜú…Ê‘°22ïïü@dV]̯,’P…‹;1#×ô6¥áÙ4›CƒµMcY¶a¦ëš?Û!ú,£æ\×+â…º5Æ™%ïŒ<â/ ÝF t‡óíeÿkÊlãé@6ü@²º‹ýÃT¸ýàó$ò°ápsÈ#¡ô5'ÃOÚKâ¯ÀbKàßõëxÐn–ÄÜ–µaÐ/‘ d𹮚ûšGˆu·ðd7³•É뾺ðã#xƒG¸Ñ$(r¯R1íIŒŸjúŸá7üÏâW„žþ8ø#Eñ=™RçOØÞÛååçp¯ª¾Áp¾üS¼ŠÇÄz®±à]UÀÌzí“¥¸oî‹•œŠþˆ<9ñJø¦ÅwàMsEÖ¬åPÁìîR`Ãê§5j%—j¥ìŒ[Ĺçô¯çkÃþ:ñŸÃhMðÖ}KOaÏ™o3Á.{"ŸÄúà7üÇã 0ø—TµñŠ¿fÖ­RYH“ÄCÅM~ÅÅj‘¹zc‚QD‹$11à‚ya_ x þ ÃáÕdƒã€õm!ÆÞiOöëuÉOÀ_Füÿ‚üý n’×áïŽ495Á6WŒl®TX¥ÃP¯[ÏnŽGw9ãjQPê6[óö9®bls†ÆE]Žh „½‹#ÂÝ0eú‚)WPŽVp¤cœz{P-Í!‘£’Y ·?3|ÍøŠÖ]1PgÍ“'ÐÕs$pÀ 6Hç>”jæ=SI¹´ŽêêÉ®"xÖæÕ¶Í#ïÆÄuƒÈé@|“ c/¼ôc?x?í«û+ø·ã®™¿ ¼[­hºªC ŠÎÚûìpÞ2³¨.¨: ƒÐõÓ~ü3| šøƒÄ~(o:K™5=rd–öåݲÆGEU'>Š  ¬O~Ëž×hÍâµÃxšh–Ÿa­¼Gyo§¼D8"[[Êq#rÈs…=QHüÇÒ4KÙ¶÷Ç^ø“©xú‰š¾¦[V¼´×ou ˆ-T~äB·aÚLï,¾VÑÎ`(¦ücýŸ<û[èz~—ð»Ä?ü]©t–wQøÅ°Í„¢VNÄÎÞzò’G…8yGèíOû xSöŒñü$WÐê–~$h„7VWoÚáíY<ì'#é_ |Kÿ‚røëDðÞƒáµ×âðÕåÕìºæ¯¨Akuyq)%î ¸‰nÀå'9’Ñ~Ìÿ´Ÿ…þü,Ó| ã¿ø§YÃŦZÝë&›¨êÚ[)Ù†òX®k†gqç($¶zÔ¿í/â¿j7÷ß´?¦ðveªÚ[Ùj>Òí¯5mBd¸h_|Ä0´e¬jŒ¨\îdx¨øSá_„~ ÕôŠšn«àŸêw¬išªZ}”Zœ¬af»âu |ª ‡qÀ®‹ÀO‚<7‹[ÇÞø¡ãvÔbÜYé÷tQ\ F‡ìòIûÙP îÛ£#œô €`xRÒþ|]¿ñ7-<ñŸáκ¯¤}–[[‹+hÑA.­e‡f9ÜC¹ ÎAÀùÿâoü—àÇ|\Íá§øŸà/øƒRûE‡ŠfÓn4kkG%Ò9,Lð“Fó¬…FU‡Pê>Òìu M;FÑn4_‰z.¦>Ý%´PXY_"þðG̳0•%ehfòÈ< €}Äÿ¼kñ/ÁßÅo‹Þ;øQ%àD–úßC¹]1,Á |‹˜®‘]^nÚ‹2ù{‚`(Ðæˆü1¦xǺևà4´M+J½h-þË Eƒ±Y™€Ü[«œòj®‘Ý8°ó6yÆ;TZ¾µÚΡ{j¡-'¹’Hö8,q÷xÏn9ãŠg‡îÅŽ®‘0C¹eíë@ÿ»’-hϧžµ#'˜ác•Iþ7RGá]DúYÓ®¯#·RyÜ„äÿ½ØVˆæKçÈ)å¯V?˽eÞjˆå£WG*FF0EV—QŽ(31TßÑCJŽC¨ÜfK„‡‚ËQKeŸ(U¸ŠcÏ €:'D™3 î/×vsT®´ó³*»XŸ\“ô¥âêqL‰Ž2ä.i—q/Û1xÈ9í@ðèSù›Š¨/ØŽµ¢tÙr«$YÁ*FY±Ó‘‹5œònï°çÓš}Ôò@¥ 7[ÈÀWeÜØ™fÂN1ÔI œNŒä ®;TÖú%åÔŠÍ·ã–ÉZÜ·Ó&ЧòÁã…ŸÆ€9è´ûhby¦›“íZQhÞu¬o"áNý€ñôcRÁVú´¶­ Ë\?n‹Þ€4tûDY èæöâa3äç=2o YÝ܆´ðÌœˆå¸ÚA=󚻢êvEO›*†ˆ˜Èn=J€=?:ßht†ƒÍ¼³{˜ÙT}Ì´~þ¦€!ðß…->ÈÇ]´ÕFK)·œ:p8ã®sÞ´®>´[¯ ÝO'!Š] !†2Ý>éÎëZ>UŸQ·—À·fÛ¼wI€qÐ}k¾ƒâTºbùôUKcíP®äü¨È´ä·Ó`ñ–‰y™ÿ_ ùж{㨮ÿGøcã˜c—ÃòÁ6G Œ²~ȯ@Ó£ÐüIOá ¨å˜bŒ)È÷SÒ³¤ðŽ™¬Æ·7qÝxrô1ýú·ë†Æ[yQ@ÍÏì“,~cÛ@Ò¨'ta$tù[ŠÏ“áÝï…ÙD>Óuèc%dÜ¥$ŒéÜvâ½!õø@jö~.ÓTd«0Šà zç3ã/†5†¶ñE߇õ]ª[ÚA½rZÏ€õKˆì¼EáNÔˆʼƒËlôáº+¿~ñoÉy¤éöŽOÊàlÿ³ ®®O‡ú±d÷77ÚF§ ‘ïh¥Ù+©=@aɯ-ø«ádðq¼¬ÿa’¿èö²Ü,ÐÜHÜ}ÒrŠÉ4O\ý‘ôÝR3xkû?R޽­¯Àš?Þ^™÷ªöº‡‚|%y|IøW¼q¶Ó§ÅæÀ˜þ"8aùU/ãOˆ~Û4>5ƒA×Öí÷Iq¥MæM´uç¯Gø{ûC|>ø› ÆãW·´žñvµÌ2c<ƒ»ßŒšê<{ð×↎‡-ü/:CÌhê¡ãc,:×=â¿Ù/Ã×7ÆïáïÛ4;òw ¬î#xß Õ|$øo®"Ïo{§Y]*’²XÜ,oõÜ?C\Dú†¿ðòæI¼ ãM+VµŒmû6£:¬ÁGð†f€:ÝOˆŸ ÍON´ñ~š üöéök…_§F>µ,i¿ 6¿e¥ø’ÃTѯn÷.Û«FHã tiHÚ3Û=k‹ðÇíÏg¦Þ¥§íå³'ïo63êU—¡®ÃAøûà?ˆ:<°øÚïF»Ë 4o&èóò}ñÛqžÙé@ž'øàŠñ›cIµ2?)wm ŽQôtÅs6¿|QðªòK¿ƒ~7‘Ò@c:v¿z…´ªz&\nQÍbkpøEo?ᧈ5ï ʤ¶ÛRÒÛ9ÿ®nǰ®f_ÛvëÀÚ€¶ñ é~*µFMm§Æ3–F'”ñ{áΧ¯_Èÿü }cÈÓ¶£áÖI ÜF yA¯â¼Âçöx(o'á‰ô­]Ñý–ñ¾Éz1Ùƒõ?•}!§~ß¾ ¼l¸Ôí©- °îP}2 fjÿþ|gË×ô{+–â+6ŽD?ïàE|{ã?‡>&ð Ãèz…„kÿ-%Œ˜ÛÜ8Êãñ®~KÖM³Ûƒó¯¯ï~xÇEf€úµýþ”Ý4ÝJU¹ÝLŸÃ5æ_£—R¹1üJøU®§×Zd/ cÓ8\­xL·/Ôï5k[ZKX \Ëhðù¾pïóuSÓò ØOƒð[Ÿßâ…|cw­xþF`ÖbQ“ßÏBc#'kêŸüLðßÄ›î¾kZn³i& Éep³)¼_ÍÞ§£_\XÏ¡<PN8Š[n1ÜžyÇjƒÀ:¯Ä†ªÞ|;¿›I‘e›KÔ¥°}Þ¥S*ßF€?¦™'ERiÇ8'¥Cý¦Â]„"ÿ?È×à<ÿðQÚ?Ä ¸ð·ÅËâ?Ü[43ÚÜj§^\nÆïì•fqÂ(\Ÿ¼Õë?³ücÇ_üEá þÓW0Íà»–9|GýŸ&««0UÆÉÂÏë4ƒŒ¡`û)­j£é7ÃwvöÑ<¢ EÝ<ÛA;#\Ìq€3ɯ1ý™¿iØÿi=ÿP×<5ã¯ÝZß9ô_iÖä°ÉYc•K$¨ëƒÃ¤`àñS| ý±þ~Ñ: 7Ÿü{áïyÊ®¢+”Y9ç8 צùOržeÙ%HÇÞ8Åcë_ü'â;_'ÅzFŸ~±¿˜‹ul²€Þ 7J‚óI°“Nh4»æ*3䢩P0¹*ãƒÓ½l\Û[ÝBRâ(2ìpëãßÖª®Ÿkg!®ÉÇ…‰(LtÀô”óW?`÷ñ½Íìskzí¶©©–Û¬Xi3“™e†WC*É(àä²ð¸ä·ƒü~ýŸõ_‰¿ 5Oü=øiy¢i·í-ׇuÍ-lu;-wH×'Íkt'ÎÀVpƒÍ~„Bn'Q&õعùUp_ç¥RÖ<¡Ëk«jWšEÚ5 Žúi`S%ÌAY¼¹¸ç"ßd*Ãæ :ûQ¹ò}èý¼‚kµ ÛÅ€ÊÅÇ'Ó­i¯ö‰^7¹I<¯¼ å—Ù±À?JÍT’{„ûC3²ð7㤶¨&Gx¡2ûèÜ“ô΀6t ^Îí%Š4•†FÒ˜Sï“]¶¨^\J²]Ì/*ÊyOñ5Âh“Kw)\Çmü¬ÏΦ töÏ=”{b qo‚¬¤"·¶=(»2K¨ížfÇ9•²pG!½ÍH–—WSÅý‹&¨“’xQ8^˜ú×?¦ˆ§TÎaà+ò;篣[Ë<…í/d7|äOéÆh©?ÚÖ—q5ÅÔ°M 4§æãžß­tözÆ¥lÏqªÍöR 2«‰Œv¸¸ô{‹‹•h5P¶Ê7Ÿ´¾ ïíSÿo[苇T¸‚ãÝ;žÝ;}h·ðÞ¬t«ýJk‡^qyô Æ nj'ź'ÏišÕœ„o†W-"ÔñšäôŒz¥š“­Ú‹ëuP ÄDǰýë·ð׎4ˆúuÕ…ÝÃÏoy†Hds„d)õëšÜðψt}bêÖ JâëL’Lý¥g˜ÄðœdlÇ3Æ:޵Óê¿ü7ã+bn¯õI•+*H@9ÆNF dÞh^&Ô$´\éÒ[$)k-¾Ù#™<ðwŒ {f Óþk~q?à m®OØîÏ›Ñ[¨ühñ7ì³éÓIá ½VÆP»cc/˜£=úä}kÉl>ÞY_\\üUðiqŒÃwc4†R£‚Ì;‚zŠõ_þО+ð´PÛø«ÃÙ÷d÷ ãçøHéõ?JÒÒ~+x‡Çz ³·»‚J[[Þ$rLq˜g‘ߎ”Á|;ð/Á¿Š^&:_‡ä»³Ôô€­5»y–§,vKŽs‚pzר_~ÊšiêeÛĪì²:ŽÕåž"ðž½âÿÙéž.ð†¡§ˆâV{ø"_2"äLÊBà à2¹àæº9ü9ñáz¤¿5)5ÛH׋mQ•¤#Ó*=h޵û#ÿÂ7¨¿‡wÑ]‚qöMLpÞÁÇO­McâxOe¯Åχ±éb”ÜÇŸlÇ×#‘ø×IáÚÁ,€ƒâö—7†ïˆ ]íÚ[mÙë»èºgŒ´_i"[5µÔ¢q°°‘_ƒØô'ßÖ€8]'Áß |od²ønÇJž92É@̺õC\ýü~Eƈ×mÂ’cšÊsGí°õ¬ßü “Æé%ï…¼ ¯øKUXRä3Í $³˜Á†FVeÀ$tÁ&¹=;âçĆ†Ûź=Ƨ»ƒ€üô^¼PS‚üeðþèÇ¡Éaã@-Ô~Làð¡0FxªþýºômPÃcãXäÑîËýË€Sw°=Ö·¼Uã_‡-1âK½èJ0KH§Y×¼áωú0kû]+T²p<¤‘¾Çzàndý?Bcqð‹Åï„f?òÅØÏhç® m$ÿ³×‡cÅßÁÏMá©CoÙÈ’¶Âp;sT5/‹¾9ø;¹=Hä@×üâ8ÇÅøkâ ˜kÝ( [å¸õ¯ñ_Ÿ†^!×ll<=â‹ßëú‹´Vº_ˆâ*’¸Š$‡àç¥{Å·í;ð×â´`Üj·^Ô2U¥F!ÔàËÁÁÎi/µ/ø–¶ñ¦µ¡xÂÀ‘®bU÷ÜZùsÇ_²Žü̺Lzýš’EÖ˜âáqëóW\X=•ÃEª[Ëi08d”Ýà'šú—N‹á߆>$jú'Áx¯ÃZûÄš‘°--͈FAƒx(WååðNHɧã/ë×·)eñÂzĤ5ý¥°†hñŒyœî sÇô š °·ŽbQÝÙ‡Ìwžžâ°¼àø¯´YæÖeÓÎo"\yw^o–ç ´†$0zƒ^½ãï|6ñoäøËÁz„cÎ͆<€VL`óÛ'é^9âÙßN»Ô&½ŸÄZö¢$pêM܈¨ùNÁòú cë@i£Lñ\/{ðÓQŽ+Ø0‰ujÌ’[¶29R}3^¡ð÷ö±ý¡~ϦÉ់>'•tk–žÖ×Rt¼³œ2cË–<+Éþé|‚3šâü=á+?‡¶¿cÒ£–4w2¸Îç’Ù>§µh²K0+ÊG'%OÒ€>Ýø5ÿñÖôwhh¯ɨDî¼Ñe›q€1¹†A=IçõOÁßø+ÀïŒ7qEgã(tKÉp¢ËVF´ë¸yî ~;ÜéFtÅË €FI5‘ªxf ’Ñ´a”ö$@Ño†¼I¥ø†Â;¯ ÞXß@à:ËË"ãÔm5'‹o‰ð~¬¥üÁö9ÈU\õmÆkùàøwñÇ_îÄÿ¼U¯xyçeµÛý³l§é_Gü3ÿ‚Õühð%¬–-ôOÛIžXÚÖä¥s¹r¬yôùǦ3.³©™chÃjWŸ+}äÿK—ƒô¯AøqtdÔ¯Ù°¨ÛccŽÒ¹]{G{-jy& ­¨\Ktrs†–V‘‡ýôæº Ètûé º@ƒc­AÚ†“žâS[±´0È% ç|y¦X´;ÉLqŽã֯뚥äjé«)ˆŒ©{f°gµgÛÆ^CŸõ¹ ûã¥y^¡ð¦ JêM?ÆCqü Éʯ¡¯ý¢?à›Ðë0Ï©ü,‘aºPXÅæ9+ì–Kx"Ý©[™ 7dSnnšÈ†«ŒíWàŠüpñÇ‚u‡zÓiþ0°šÞTm¤²ü­øÖX¶ó¸ˆ Ôƒ_§¿ü5àOÚH½¶Ûcu42<Xô”åñh«ooºìl’NWÔ~RëE󜛉QUOaÖµ!í{ã—ÍYGb¹?ýjQ¤Ê„‘;¸ëŽB~ô‘máè<Ä&B£ÉN ®‚Õ„¸[håu–+Œš‚ËMšÒàHÑ7ÌzÈü; Ù¶2ΤÈL|öZÇK†÷VžþðÍ+b„1ùP¤(õ=ý¨ó¤ólÕ)Û’œƒZ:r­¾¥=¯2ýæâ>îîpSMÔZdFØB.q¹yüèP·òeÿH¸Ç<àqTg€K.c’idtcn9ô­›xVú_Þ#’ƒæ‘WüúÕä€[ɶVWWû£f ûP5ÄðC!š2ñƒ“ór>•kN¸ éq˜’`*Îï®jö½­Ûh× º”&B[ µr}ºQ¤º´£û5e‚ó‚ãaÏ é@÷Ý$ÞˆáÝ Œ/·µ1šF`ö±ÆHì}êÖ£¥YÕc(ŒX‡Ïñýþµ=¥¨ˆ/Ú6°#øx8ÿ©šÇÙå»ÿ:š 'š1}s4L>a“…>Ôù#YæýÏʩ؞M8éÐI0b@lÇnHÅ6{kK«—±@?Jz[À+™À'¯áëP5¢Ã3…mîN3¼?–ÇÌi¤ß©‡%@ù†ñP»h¥F%£VX“Ò§€#È<¤}Äcä¥g—Èvç<žíF£åê6qÁÚ ÙKÉ'à09õ ¶ÇCâU’ †—9`Ì•kÛZ¢Daµ7 1Â.öù=ùâ¹Ti$h¶ê—^`ð3êqÍtúu•îŸ.÷†P¨¿y±—'¿Zß:Si·±½ëÄcwwAÐÅ[°¸h-žê ˆ®'$˜¡O”žyÎz}+;Mº:¤N°Ã;.Ï0üÁ“ÓõÕ«?ˆtíBeŽñÕf‚<8…;»gŽr(=?Åi­\K¤‹¼¬i8ÚIãîãïåSÏe¾ ÛŸ0H1–‰Iè ^Md¾³g$&©n_Þ(ÎÞÅ}:jÖ™ª¶°ÿñMƒ#8Dh ÝÀé’x>¸æ€4t{ M¼@.Ò Á›‚ˆHÉ=* C]m'Ti/å†êæP¸µ,Œ¸éÈsUõKmzè˜f ±û‚_o  Ž:SèÞ0¶–G´»ºŠKØ1<`±ã¯ ô ïÂ?¼G¦i(t›èµKxñKµ;°lWEgûBø†Üæ;fÒ.Xy‡d™à¯=+‚Ó5h­,Š[˜‘¢<¹ã¶ÎiÚߌÒà˜u™ ¸¶8“nÇð“ÐÐ¥øcâ¡ân-÷Q¸¼´[O2-Ni,’(7 ¦c·ÎÙlnb£'å•©xO[ÕïÒÿÂv#IšcæE-¼ÞYÚzZátŸ‰?ðŠß¬ÚMìöîÊ3l;ûf¶_öÁ·Óõ;(Õ§DDÝö{¯O^y«¾.ñãïÏrú$#¸Y„>U¼Ê…ˆp$ ':®âÆHÆFh«‚ÿÆ>(·laÞYN1å•&>µÏEû>ø¶ÛZû_®¬´;–mÅlädR=×¥gKû?[xqìçøCã;½"[œ½­¤÷I´d€¤à‘ÞµôÏŒ&øeäÁñ¥,îZêq­Ì2ym;ࣞX€xö4£ªk_|+nÞUÌZ”2ÚÒ¨Üf¹Ï‡ß´íÿƨ57Ä>#:eÜ2½œßmÓ¤°ž)Æc3( f\©õ5ê^øÕ¤xÁãþ˽@ç*Ö×I¾§¨÷ª¾:ðþ‰â[ Œ-ÑQ“t¹JǾÐ>÷¶({/ hZÍÞ—¥üE¸Óîõ Z'6Öà‚n<¿¾P¨Ûœqǵdë²=œw&_…þ"¿Ðg`O”®J~t¯:Õ¼)/Â]^{ßüA±Òm lÅü©3ÉbÄ€§*: õÒi_µO‰<­ñ—ÃÐk¶ÑàÅy¥>ehÎ0Yw\ãŠæ¼[ðâ…å‘ÓQºÖíã?1‚|8À×5cã;%º’ÇÇš—‰¬æQµ£•Ú5Sížá_ExOö¦øwãµöšãXݳ [Þ/“"úã=}È«~.ñFv='Y³›î¾U˜{gÞ€¢®|дýZ CàÏŒÃNŒÆ{[¦ó£aŽsòœãÔb¤´¯Š¾ƒÇöZ_ˆ´à6›« f¥ yû~ËÚ×Ã{ÍóÚ?ˆ,,-'d‘à9Åkø{Pð4:’ÛßéíetݨLe '­z‡†ÿjÿ‡>=RãRmáð R®Æ°¼w?‚|Kc4±ëzF«jIÊÊÊÄœà€Ý±ŠÅ¾ðgм7ia§|<Ðu[;«Øä¿ß:Ä‘Fã4n€–”09êj§Ä_ØGÁ_-¾^êþÔtùÃÅ&{$1‰,ª§ç\ã ç5å:ô~ð„3ê^ñ…æ‹=¾_Ê…ÚXvŽ¿(ÎO°­áÏÛkÅÕc×WMñ¤ 2ÍÙ+/l㎔ŸÿfÏŠMÛåw Ã(<('b©Ìø—á¯ÃKÅ_kÖµøQºVÖí·ØHØà"7×å5¿ãÚßu}Tñ‡ƒ-/µ ܵńÒÇ–·©€8äǃÇ~ÕÏ|lý âøÉs C¨XiçFÓõ4½¼²¸´÷1¨â%”r˜`­œ€GzÉ›ögñµžoÞÚx’•ʺÉNëÔmýßN‡ŽkˆÖt{ï \ù^$Ó®¬fŒJ…sëׯZoÆ­sYøªd—á šxÒxç‚kD‘„¥Á*¬³#å°uÈúU…~7xR¶Ó~/¿†üG ¢m‘®̹DÆRM 7ATw4;4wzT’ÅsÜnUH|¦"T=_xàcÓ¾j“ÚG;ƒ±¼ÌñÅu:ÍÞ¬JZÇH·±fÉ"'À…Q]8Bƒ™~´âÿc6 µòÇ ÎqÔ†ÿëÕˆeµ†RÅJFËþîOCZþ1ðÌšõ¢ª’[\¹ù‡E$þ*1kö/&4Qµ¾¿ZýšÓ?k $lºÞ§hcÎ q°å½Meë_´‹¯j.‰ªèáp6DoÇ»gõ¯Íë*—YÔ'žlçhñùT3ÞZX©/u§šÙh¼%¦o¦½c{#šU9OÒ¾ [)ã#ÏšI$ÆHÝ‚*+­îB:Bìq³Î*ýTõ'Å_€þñÜ3Üø+WÒôûÒ \0 Ÿ¯zù¯Å>Ô¼«´7RYÝ+œ gõ=­ÆµQfIÂ0íúÒMNHTÜÜÎccóÇ~=hYìb‚óÒ@O͸¡ ý)#–+H|«x._wÌÎÇvÁíS%ŠE"¯Ûc™›…–çÓÚ¹Ïhº¶¥«¤:&²l/̃´ÿS@""Û^½E]Ép¢e2pIè@õÆÓ4é$ lÐÛ,h[¾:Ÿ¥X O„kpó\Û ‰È³×>™ÅeM¬@Ñ™ ¡¥†q°ûÐ{kmzõv¸g$ÒÍÞÊN™h€Æö7·Ÿ]ê³*´.w•väŸSì=ëRܰ¹=>`¾ÀPg‹YtŸ\\JHUÄBB ôÖ±¬n5k;e}FHò¸G²ŠîíÔGfà_xþuÏÜN! ërÁs±¹* ¯=6ûÐ[M2ÖC±@¨îGÿZKÙ`ÌV¨$0œIá=…X³™ïæ'Ih6ô ’î#êj«atÕJ)—–òÀ;©ÇZ¦ìÒ;´ñ‚S í?î‘ØÕ›=5§…e³f‹p,q·×ŽÔÛIÕ ÛÄvð§ ¯îMM§3]ÈÞkùL‹Ä`ÿŸÎ€*]OqjÌLñÊËÉlgj’+‘{Èw$Œ´WlmmdV–ñÔpñÐ÷©¾×k1"0Á•FÁ@²Úyiû™ã…ÛÍ&™h—œÇrfQ»±Sô÷©ïæŽÂ$ ’Hÿyëôô¦ÚüÍ™C&GAŸÔÿJ×Ò¾ËÒKmœ ŽD¸ êHîs]x‘e´ò§ ev±/òŽ1‘Ôšæ´û(æš2»ãç‰1|w«çNMÈñ»yd–êÀ}hsO×Nžãþè"ŠÞÂù+÷Xc ôÇ%¾³ww'–líSí*Ljφ”qœƲÕ$HÊ\À­•ràüñŒäñïÅk[_Ê÷lekVËî JzŒç'­2æ=8Ú™uh™Y#0«)i8ÎvçÜ].…â‹{* -dŽÜE'ÙeàÆÙ;Ÿ#ŸN{Ö</„é1YÝØ[Í%¹`¡Nb~ñ#­#ÞÉmKÔˆ4ÃnU1•ö  Óø¶M>ÍæŽø.IÞ¨æã:õæ¡:݆·Ú¯Õ%–6Ü?uƒœc;º“êk´QÞÈönAq°)c†Ç|U˜àyìãxÉF…‰TùžÙõ>”{ûV öamòD™fòÁOLúþ L,”5äMqÄd€új®n·-½ÔβŒ’…v”'œgÒ‹Ã< 0#èÝès¯éË1“ì ÷3»[,3ŽMVÔí®brXµ¬¥…Êlc/C˜<}sš}ÚXÚ#LÒ¥ÍÉ8@¹ÇãU§Õúc‰HšØ‚ÎÃÐJH¼FžF:sIq,®®ÒÌûÇ>•Ôøkã‹4M>8t§Ù‡•¿w#,ÝIŒœsߊÄðÞ³¢ë¶²Új'1y¯™G G\ƒÆiú†™aÕ¬âØNtÙ<ËbcÈÅJå[øNÒGã@ ߯]Äp6²K]@Œð›ut8#¡=)u/k7÷VþeÔ© é‚ÅXw稬äÒ ’ÂItÙ&¶’Ù>Ððy"<©'¡I ô¬}h]¯‡ç‘í5I“m´Ó8ᛡ'«‘zénõ/¶¹¹Õ®ïUæ£mÅ6‘ßÔTz¯‹ukØ¿³ô?j6sÚ2ºÎ1,–ÌAû¡©#èkÅõ ȩ̈Þ2ñíýŒ«FqC-ÜRÓ4˜ÈpÇh*T`úÖ…—Àk/ k²Üj~%ñ–®nBîeÔ/3¢<€r0Ozôo]¼Ô¼A÷÷z•§œ¶øc+¨°†É”FÑŽyªºˆañÞ•ö½2çY²‘äÎ^3AV^«ÉíéI>½{s«Ä4ë9­à³M­,±—ó¯'œ®3šÚLØ‘ŒÌ˹ Ê î}ý(ƒÔ¼)¥ø#EÐôßø¢yuX٭ྸyÐ+2Xä¨;S'$ü¹Éæµu x“ÃzmÍÍ®±}{p¬žD;G¶qÈü¹9$sŠèg±Óîæ´ÙÚM(`îd@å[ztý).õÈ4ÈVqÄ‘HÀ(‚&òqœ‚€gg~mÕ.îLžX2)˜²«wÁî¡uY-[Êš[‡Vë—;IüM^Ž9HnÑHÎ#ÚN ÿµïMž<&6ÏäþTYˆ7,j½Ï&«"Çî£-œc'×dé— ÿ©'œ îÖ¡i ,Vî^qžƒë@-4fšñçã*6ÎåõÏlU›²ÐÊVfŽ?*½m§\j®‘iQ<¯!Ú·$žÂ´Ã/&Óo¥\:ç$…&€9øÜœmC´üÀžž´Ÿè—2L¶rDÏ í˜!£c8>†·`ø?â2£ÌÓ§wÿžŒ»K{Ào‚má_^êóè÷ö—ÚŠ¢ÜÊ7ŸhÀ%GÇ~¼ |2C ‘"9=ÏJ†è–‡6êAŒÿžk¦ðω¼bªúå¤þgEó3šèö\ñ[•Ýr>OâϵyMÞ•uz‹æ¼;úÀä¨uô\t9ÇZšÅDÖ‘É:¼R‘‰"`2¤œqø×¦7ìÁâ˜c ²Íü.q\Ʊð»UÐ5ií5Koô«dY¦HŽ÷Š6$+”…;XÓƒ@­öµöjÞÚK)ÚÒéIûhe1Bà€9ËdàŽ>•-ÄnĈ2åÀÎs]^ƒðÅ|i7‘iªX¬‡¤3 ŒN}ë²°ý|Gx›ãxŠ7І¥|ëâ߉ÖÖËFÐ5M­Ø©aˆˆÇÞûýyÛ’+ʵ¯Œ>6Öüf“ÚL<7¹ÿIÇ•¨|Ť\± cÆO±¯³|cÿ÷ñ&±um¨X]ÜMwjÈÑÅovÐn!¸b2ÀÈ>£#šâ~;~Ïvþ‹O·ý¦t­>;§“ì“Ü8(ÄmÙ¶‚Øôö 1²Ô¤Ö¬¾ÕtAûboX0ÁéƒUuɤÓôÏ0B’®ò¬@äqÞ¯iú·…5i´-:/&×Mq¼bs1 ç–ri—ö!¬ç…w/š‘Ø7­w¦ÀÅw$—Aã€`s&p­:MrÂÅ” I²NàF½³_pkÿ±þ‡½¤ðå¬e$‡]ùÿ fƒûèrNdÕ"± ;D6} Ž­5>{u6¨ Æv‚*¾³ Œ±¤Œ¥ŽT©C‘_uÿÃø6K¥iíL£ ¢1²Bªj߲扡ÄóZið½´|W?§zø—Ï[Vl°çvH<,7—k. –û€Èb„°?ZûÃ|)«O¶eYràÆ˜­«ÏÙ#ÂS¦lìKÿ#šøvçSm5KiåÛ  ¼Ž;zTVòÝOf6Á&ÓÁ Ú¾é‹öiðõ¤{#Ó¡¹N?.kcFýœ¼&–å- ·‚Wo”¸ç4ðU„‘Åòíe.͈Πª÷"þ3g§ÌQHÜWßz×À¿hw;ÌV_0û¨æ=Î+Hð6…-šeé¶m´ Ædc¾(óOÄú]ö­ K•¹·Euíc\ô¾º½+ä²€m'*E~—xÃáo‡|DßfžÞ8H;‚@¡Kc®Hê>•â¿d¥½žIüCݰPÊö:}߆m£‘„wcv&UM²cØ÷úžïS¶»y.‚§1:•fúæº/è·Þ»ò$o½³×æÇã@ŸH³HLs´[[6ƒƒŽ9ªÇölQX;.À r }‰¦Éc>²›l›ÈŒ®IîO~{ ¥oáõó ÜÞyŽœ…on´Mf×6±˜·Fj¯ökë6ÛBÒ+›Œqž‚­ ’Ñ’Jü/¨ÿ~§}%º³ï‘K`·_ÿUWŠÏ˃;•-ÉöÉ«P]Ãt¢9AÜ oÊÿZ¯§,eZk¢¥À;SŸÍ¨µ.·­#²,,9P0¤zТÙÛÙÌ .‹´|ª©¸sZGN—Žà áÁ`»xÈĈ¬~s‰U ˜íÛê>½iʶ–°“;ŒB´œžÜîõÍ]Yžk…%Á‘ÍóðÿJѸm­‚NM¼’–FUÀôÇ×Ö±"Ó¥¤`>@|®á˜íÖ´un Âó« <ß1°Àc¢ÙãØt jZ½µ‹ÅäÜ4S’êƒ÷¿‰äúSouDÕt™×PŠã쓌c”ä–ôÇ#Žâ ’îÞI¼öE»$|Œ‹ƒõeÇ_çR¼jÁ(wŽ%ù¶²…ϱ€ÓùšY·Ó$v²¶ùU\ä…ëÉ<š½h·S«-Ôw1B¥²RGàTÖöóÜ£»DV7b~^Upp1Uíí¦‡W–îØ¬*†.ÜØõ8 ·]x4û¹Óa@â/1`RÌ;zzdÖIºŽöÅvÎë™J¨Ä˜[àzŽx#­C¦”}Jæ÷HImõKõD–y$/ ž öëÚ¤Ò­ç±»óïo-% p°®TëíøÐ76Sý¾X`pHË)%ÁÛ"¯Cmö3¶æã8ùB8ä:⤷ÒÃH× yS–!N Ï`MfkWV}¼—~'Õ!‚I7ÊB3€Ç¸ÏLÐ]7Å:•x¾KKÈ5–.šŒç…sÁ##¨Ï½tšJÝÁ¤Ü&«1sò˜‰ ÍŽ›O8ÇJäµS{âY¬¯¾j'L°·Æþd)*V¹¼±ÓîÝΚÑÇwsºÈAàƒzµu¥E¬Z-ÜÒtÛÀ‘ƒêzå|û@x]µ¼ºOiê ¢â@ÞYcŽ îå‡`}r;W?ñ öˆŸÃú¬cÀ/â+)dŽÖY!1¤0ÈHèäå™·¨Èê(²×¬ô¿ø^æaTÓn¶›ç ]s†¸Ï&²ôíHXÙÈ÷—/p–Ãým×o—P6g?9ã©®_Bñ7Ž5Û#§|HÐbµ¾yJÃqf±…·„儲FN þªIÉÏN›~3ðf ·6·>Ö.b´UX¦¶%dŒ°,8ldžþ´§áˆrx“Ï]>rèT²42ùСÃÎr‡‘Šèï.-üe£›Öî4+ÈÌOoqcÌ‘Óï,ÛŒíã85åŸ tŸxGÄRx]4ðla-%•عD¶#†pÃç}Ùõç¯nÞ"Ž J×IñšîæX@û`&/Ž„çé@Ϧx^ÇIð ÚÇØ\Õ­¬ƒÜA¦ªï½‘G܈9“œ òEvzoÀ­ÇZWVQÉhÓ¦åVS.{0=5à67ú¥®(øg¨‹;åOÜ‹•&$>àH€ó]×…iÝcÃð9ñL-p-˜E!Ž&,O¨êFOZèu¿Ù·ÄãAtÔ!^B¿ÍøU¿ xêÃÃr-·ÅíÊŒò¾_λÿ~Ñš6¿oSÜÇm3 •aÇ·µ¿øwTƒm÷دԮüøg…,üâ˜_-ŸÌ¿tãwåRø‡á'†uˆü»Í2Ý·t*¸Ïã^c¯|7ÐîµIî|'« 0Sq ¥œäç>•NÇâw‰¾È!Õ§¶Öì 0lH?Z×׿e‹$žKê3iÓ™Tò¹ô¬-㟌~k¾Ÿãÿ ê‡FÑUjm f Ä#–‡k3qÐîúfºÝ#ö†Ð5tÄ÷2ØÜôØã‚}>•²Ÿm/Sl¦;ÈÀÀ ƒ¸}(~Ö^ ñ.—ö½R{]:MìoWÉòýÎà1ø×pÚŽ‹âݵ¨³¼¶ºˆíuÄ©"°êê0kæÚcÁÚwÆŸ\h_ .ôß x…ÌrÍ=þœ×1ÍyTç[9Æ{ÄðÂ|øk™à¯A}5ºùv’Á§ùPD™áD[ˆùG (¸Ò¿d¯ üð âxnÿRû-”uFK½’±ÉŽ_˜Æ¤’’€r u !Õ5Iõ_xrîf¾Ò¤6IäaT`:c©9É=+foÚ}|k ø½moföª%šfa}£‚Ã9ÆFxçŠî4Ú2-cÉ7‚ µÔïÌK*[¬ûar{Á œ>´™àÛNñå’Âw¢êºÒá.#»¶1ÉnÝv·cU$ƽ'÷ú'‰']CÃ÷ZuÜæ?$JQZ@„ä¦ãÎ3Ú¾V›ö¯ñ¿‡þ:ø»Ã¾ëþ3Ñšÿþ%QÙi*nmá1FãlĬr&]†X¸Ø,AÔ&øHuJMGÁðÏ¡AqKl‘³¤ñ¹:ÊŸw¯B(ÓücðgÃ~6 5­$Z\òÜÀ»XŸ¨®ëàÿŒ~\¥ÇÃ~{‹bÙKiÉp}¹®_M‹âÃÿ\kW/ªêñ•fÏBUº¬{¸RIÚ"¾ÿJÓ¿ŠÇP…¬î~\eKu-øÐ¯ ÝÛÜ@¤ˆXµ6 ÌOô­Yµû}=¶´¹ë:ûV‡¡ ³ÜQ×®ÞMoYèÑê-s`\nuÏ­rž:ð‡~&[Õtø„Χ,É‘øWËÿ?d+ß ]µ÷„ayíAÎÜp ¯²µ¿ ÃeŸ2íË(ÌhŸÎ¹MOR‡G·F×n¢Š ‰’ÙD±™?xÇ >î}OùÝ®Áq¦jÞò `‘AÝœŒVN©h³Ç ר³¡ácÄô #ÔþÐ ®É¾ÙŒq‘‘Nï‚ö¡# çü)ÉfÛä*JãôÅ‹<€0Õ<þ€"½…àš4²ÈM¸8jY`i$Qpé.ýԧ ŽÞõiàÛ6êà¨Ú3޾µŸ#¼r’åV •'éšÔµ×^Þô;FŒ¸|í×Òµ$ÕäœaÕ8Æ;b°t«1¨ïŽÃj‡ÁräqÎ}Mj2ÚÃv°^Op²¼”\í@mn-¢%’GŒàHOÝú »%Ä7ÿ¿¸TF<¶yaéY×Ö6ºX‹Ê»ó¡`\ù‹†$ûúÕhg²ºGkF²ƒ…i!Ý’{{}hAoàÓAM=#u\mN {}sTWÄR=Ü),*~Ñ–gÇÜçÁ¬ÛFòÒg[©-ÂÇÛlçšÂ}J4KÝ–Q¹]O÷³Ò€'Õµ[¨Ø¥[w™@b;úÔº=•ä–%.TLŒ»Ø:¶f>çµd\Þ^ÚjYÞE­Û`IH>hy\ñíZsx³RÒ!êÙ"’çß-çæ<çØâ€úmNÒ8ÄVà*åÂ)m€žŸJçõ4­VöãPÖôËig6ím+N›£î¬nOO^+mæšöÁJC-¬ó1’ÙRsÛô¨%¹‡Td‹Ä°Ù\O ¬Ûrcá_ÔŒçÚ€1|ñ+AÓüSmáÝ!âŽìZDm,âcò°H H{‘Šì®$Ô òÅgXeòDA†N7#©â¹¶ðíž©â_:òÜ\_F‹p.žŒñŒ‘éé]TâÏÂúCÜÝá…Ê b¬ÌÎÇ8‘“É bãá†ÚâI4Ý9 —æ&ê_28å é]5‡…ô‹ÚÅçŠÜ—Cr›Ø¶wn,G$ž•WIº¿k9?á"·ŠÂO˜¤¶s‰`K|„n21Ç©ëV-µ³Ç²ížGØ3ÂZŸPBæ…|Ö~SÆbMs~3øƒi࡟ˆ>ÂâædhwÀÒE_›t¡s´ d1ã8­¿·xñu!W|ñ»Í$úw*I2Å4N¤FîÁüÅG¬ülÓ®ìì®´Y`¸{“ˆîL%¡UÜU‰#œpxƯèÞ*¶ñ.ƒk«øvزÎ#o/l¬¥°xn@ã8®kMðQðíËÞ˜Rû10éÑ[ ‹ì°6F9ÁÇ'5ØG ºÂ Fpq€?*«gm!›í,Óà“„a´§áZ+¬Ì€ù¬JN\ºç#Ûß>µYÜ}˜­´çrœgnà9éÍC¤kšgŠ4ǹÒnb¹‡{Åû³»k+ÀúAP´‘™\°ÉS™zqõ©<-∼A¥Åá«§½°¸c‰c“‚ ‘øŠÄó¢ŽhŸf@9ÊŒñÚ®éå4ÛqŸ·XÎ|´QŸ@(Ñ|;›ª* «Ë¡>î#i6çèMz§…~ hú¼@Étϼd‘.ìWÍwš©xö^"Óãø_q¦…l«uvw [\+PÇ·æŽ@H<àzWs¬øFÛÄð×ti6@ϳúÐ)¥|nð÷Œô9d“Q·ÓÄj33•_#ý¢[Œ}k‰ñ_í!ðé Öe– SÄ6Z ßf¾¾Ñt[F y¶+ìi FÚê~‡5ç¿¶/ì±ã Ç7ˆÿgÍWÃV%µŒ‡S±Ö BêdY@aÀà)^µóÂ?Ú‹Äÿô4Kë SÄ/{¬Cª'Š-õwÒ'‚U‰í ´KåMŒÉ”—‰Êà€Të½Ç|uá«]cáÄíµ&- Ww Fí»6é†ã&°ücð‹Ã¾ñ¯ˆ|sðÓÀÞ&¾½O´i·‘,Q=ó Ê´-7}Ó¹Nx¼+ÇÒ?jŸŠW·¿üMáÉu1^é÷–»fÑ—i̱«³Æçav€Á²N0>ˆðïÃÍKöwø†~øÛÃ_5Kvim´/Ü[›k‰ nÿE`» eä¢}ÎãïަÔdÔüO©Éy¥®ƒy%Ã<ºp¸{±¹?4~dŸ3`ç–æ®ùŒ°ºÄä(' žG­VÖã×£ñö·'ÄØM¾¾÷,ÚŒl4S !*0 ô8Æ*`¦E긺;û ÿÙ endstream endobj 92 0 obj 134055 endobj 93 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 94 0 obj <> endobj 95 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 595.28000 841.89000 ] /Group 93 0 R /Length 9 /Filter /FlateDecode >> stream xÚ endstream endobj 96 0 obj << /Length 19935 /Filter /FlateDecode >> stream xÚÅ}M¯m»R]ÿüŠÛFbb»üQ–¢HûÜ(ô OJ#¢ ñ@?.Ûs®½æ¬•ôÆÁ;\öݳNÙ.—«Fñï?â/aü÷øßG°ÿºþóïÿüãßÄýüçÿõwã§þáGøå¯ÇÿüóõoIÝ?¡¡Ú¯ñçŸ~üÕÿÿÇø™´âOÿûÇøÝZS³o4Í2ÿ3—øËßþ·ÿ¯ÿøÇñ½?ýÇeÉüìþs mÿé/ûQ´kþåOþñ_Âÿõ—?ý3âû±½×Ðß¿Ÿõý$G­½§Û÷+ìûm|¿†Û÷cC}_ò!bŸ}ÿþï¨ïçà}?EÔ÷‹}¿ôûß¶þÅÎ_oíöý_Q߯cÿëpÀÍÿ õý6ü_ZN,ÿëø~-In…}ø„ŸÄŠ}üý›„Š}ÄŸÚcfù¿·£‰,ÿKÿV;Ëÿ2îÿÃ=þ…€ú~´¿¿öHŠÿ’ìûåžÿàÖ_ÆŸ²ê=þÀü/2Ö??î_Ü÷ë!:þ=Rþ1ráÿªzûû£ò/ÉêýýÓêû%sýoùãØßä?Î÷#îûýhãXñ¿Ùù¯Êû¾Ý?I;)ÿm®ÿ;êû–ÿô\hñä?¡†Rhß·ý_K%­õÈ!H'å9Žû¯×|?¨ü7§ä}–ÿä4î_KÀIñ'ü'ÔšïßϰïýŸÃýý »rû?ŽSÀò÷OÎ÷ªþkÿÖËÿuÄßï÷/îüûßù>ìý÷­þ<^b„ (…~`ß ÀU ìXÐw Kà!Jmw5ð]}_‚/Xü*‚’ ÈWô} `e°<– áy \uP’ª‚[ì<ÆMb|ÃŽ,ůR)4«ÅÅðX‚ +Æ[1.÷Ç]ð;°°«±ï€µµ»X?¨×³ü¾Y×±X§@‚ºÀ•¤c9BIMX§@¢Õ„´•»¬)Ð΢i $ŸU‰÷%€•¥r´ŸJ´H(YÎw1i æÃToÚË4E«Lsò™OÓÒhO³Y¯±%š-%hÏHˆ«Ž÷#†øD¸ö¬–úÓcëôè€kÐt=r©¬8C9Æ« Òžf9Ž%èñQ!Áy Ž%¨ùQ!Á5 ÒXÑg…W¥Ie]ÇY¢ï«S×@*y r'oÂRµ^ íÖqkÈÀšu–´ç»Š-(Ïw®Hõ*× /“¢¸À&)vßX¥t\Fµ‰!ƄҲOã2Ú ’¤œ á€V 4¶BBÍDZJSÚ1ÌÍ7 ÀúùÜk¼«–×ñ§$™w Úø“ÄTh0èV(á±Y®—nØá4¯ €ÕòÚ#ÆD“˜’¶òÈbœã”œ=ƒ# <³bX0t߀D”çâ¤å°=ä°‰ZFd˜n+$ÚîDu—Cãœêà\F³VU*Í»Ž{Šˆê¸ ЦÀJJs‹‡Jz>N#¾V\ØÐîµ¾ Ý… í.ü@Jc 4Ö»pèz›/.%ß=DVËY'$‚qTY1i J:Æã8)í”ñ2’ãÝ€ „v‘hÈT«PI2 ]cþ¤c¨rò,Jï8u9±å¤ch“¶ Uûn¬FlÔ5•G€½Žã5ëÉY‰×°g¡ ë%Ù´³>QVJ7®˜ Ø<¾oï‚BBVë1žèϤǸ1þ¤éyT åG+åyÀF<¬sª“ó´FºQb¿‡bXßp\Åg±ºPÐt¢Õ7Ç»!gµœ³ ­P¹Ñõœ§Ù,TÖçÛW'´B¥ ²^F9º^J¢.p{!›/p;éÈÕ²y÷ Ôš³kŽ¥XÇÄyW`©6†.ʺŒr§@‰¯ã\Ç&,Ï×1®>ðª”V6ª¶r±œ¥ÚÊÁ’’LCåÑR˜†Ê)×OP«ô»@ 6Ïi;Ò°Bež)iX¡2Î| rÀíµ °§™cÔZû̈HÇPÛY®'Ý]\€Îpö jçÔ ÃÉCBò@lg­¸’ áä ¨ZètÑÂrâÀäE^¼ •HŒ<1$¤= Ý÷@ER@,jZNR*¹žT0œÛP,!ñ øˆªÝ]³J¢G6týœºå܆³V\æÐkåT„Ä3X¬îþÀNµn=à8¢‡dΓNµn-° ˜,É1ÅÈ:†ãã¾°:a,GËõ‘ÂZ·FÔ¼‰zß÷®T{1åVUsö=3ÀH±´i§ÃÜNB$Ò14R,Ç`©vl‘•ÖÛÐøšwµœT¤zÕŠ5“kÅJBÕö“A9P.ãŒ_•Rå@:¥œ¢…¤%ÈV)Ã’)Òi󆱖L9Àæb¨Úˆ”Ó3*²Z9tÁõBV+‰0¹Ÿ…JÒ4ñ÷@GŠ–y) Ôê.ÁÔê€{‡Ä=Šï\±ú‚÷s.#±Öí*׿ðÉ?°ˆPHK é,×sÑTÑ[”ÑJñH.¾¸ZñÅYýn@C ù-t=i!ÒB×s&ÒÂIšM DVª]àvÒ]`°ÞïW]°y ÆF[‚nÈjçqú+¬RjÈêçãXª5ÖîfåzÎ1ÌVð P(®øù2¢jåˆÁÉ qüéµrÒòo°^Ò)ÈåDÕrJ4ß`½$ؔΡWÒ&4=#ÏE–jÓó]€Ó²y•jû[Ïè ªíÃ?N„N)×OTí"@è4®ÚªsÈ¥s•ö2Jq ¼r<0"¡Í¸Ä»¿Â ÐCj™æCÕæÔï›0!Qµ[Õ‹š©Üçöð¬T«é’¹ç"í'Qjç`ËûE’IZ‚©ô=‰R9ÇPlàqñ”v [¯ØÃ$T£†ëP«ÑiÊÚÖ»êë-Ï” W¤2T­cŽb ~·Çe RX­ôFKɦ°šLµ_Ò¨Õ7@¡Âj³{ÞI˜ÒäzW-ŸÂjíyt¤°Ú¢ íœùµÑï–x¡x$$ûyÞ;‡ÁÆ~ãó2J@LéØÏËHü}ÂûIxJJ± ÐSRŠ SMÜŽ Sjl@´ü7`¡Òf\m ,è9òŠT¯:aŒC²‰Ç5ý~³Wªlçøû»8På VzóÁïøjéÍ0l¯Dß@ Ú pÐRS–šýËÛ>èÀŠé.ÙÞ,ÀKÛY³eÆjCàQ„‘LþZJ¬¼³`¤©«p}³ CYSgåšµìôy3™cûT$uìÒ9cÝLýB8Þ,P Ð˜o®|¬'È’d|ÖµÈOZ†Û*Àª‡&>ªS™µŒÂ¶¦xûÀæ] pp[›V'CAâm]·rо‘nçYÈ^ªo¤ÛYŒØ~õsh>¸ú)7 "’ž`5Õn$?AçfÂÕrÎwR·±âA7õ»9‘HŠÊ³œLõAŽñƒ`Tž±%Ö*$ù`AGò$, >RDÊFœÔ¼ú _Ì^ýÇj›ýUÀ¡Àë%…xóÁëY,­_bˆ¤ZZn—"«–ö­ºŸ8äº/´w p:å/!´›P[OfÑùfAij6ÜvâO<ÅïͨY‰¥>,P$ÙµlRs‘gÜvb ¢UøšFDÊSÿƒ‘Zò-Àù Ûs©‰çÍVA¡tËÞNÄQX ” E#Ý Ì‚©ƒBÊÄ^®©Éóv år  v³ "kë»ß˜8Ðàd>øØáXmÝúÎ=%Z~0+ÛMB¡å‰SŸm÷XH;±\óJ¤›iJÄí®o"a´›ï …°W¡•«€#´0b›Ú /̹­Ð”w;[eÛ‹@J‰r2Á“öÑÿž]_Î*ýîž`$íÄlõƒ¢N¦ «êJ9èn«ƒkçtNбV¡\4Ì7 `M Z,Ĥ{a ¶í~#iê«×FŠMOžR¶þ½®œ3#[·ªnï“ýÝ hšœD¸7 pü᪩f 2.™PŒkŽ X®zb¦(»°e#o'Ãê®^[æ …k¹ÞΙƒ[·Šæ~;gv¿½råLÂ+ÕFÒÎóê)u³J5±„›Hga¢…= °háês`ïÆøaEÜÊÉyBŠÊ"ñ$=!ÅD±Ófe;“²†VS´¼íÄŒäÆÍ)vžÊEŒÊŠH¥úà&(jú`lŒkñã’òDSskYŸ ¬†"–”¢ÏÓøäèu-’ôæñvîÏ{ÇÎ9Yz¹KîÔš¾Y«#VRˤˆ45Õ< €ue£‘g~€[Óhí™É‚*wMÚfYº:ߤUÈF³:]œ\ù{5¯p0ß8 Jgs@BÒøé–²×Í‚ Ô;’…ƒSÍáÂ'*̪yKWéfÁ^Ýëv~' DIñ Æ>€Õ‘ªžòV¬ˆd¼µµÍ—+ÉjXœ8±û…ÃNÔ­––'rž´û¥BNÚ³ž¸4°ß-Àaó¾Õß-ø ˆÑÜü½¤hÉP(\eÆ>pâ8ñ`²ìiãÒ9R[— 3kÊ¥ÃÌZ…r 1ß,Àáó)„LÊPd*!33”)ø%Ì Å¿¶4)W6ö¶Ý·XOD'KÃͽB²{YZ€’Ù¶ ´³0ÙleJ,âAŽÃÕÉTq•¬d>X8UÒ*X5oñÉÞ,èÀjÞ&”%ÝLÙ2]Ì<œiòxàÎBp5Õ­.©š—-?è! ínœì®°}ÐúØ«çZè8ÕöÖ_ˆ@´³ªûnÁo°ºr¼ªº„”}Õ‰Ù7ûqª6eZL øæƒDÊž8U–õš6nNÙbl¦‹†´kº°ºÃ)û «K: ß°º‚Oœ’l›Ý¸Qpiß™}«û )Û(X]1ÊFL7V·°†ÑŒ¯ùF’¬²íY€«êÚì¿k¬žh“4¯Ì‰Æ>j(…èÓH¬N–¦@y8îZ†"¹X…/ ÿA“,J»¾cu‡é»ö‹Ù·q˜¾Û%TÈÚÆìÛ£ïËP\ `ñ ˜JS^L´î¿çœD–uÿëâÉj$¬®ÙÂ2-*·p %7žŒ¡©u ´‹©Õ®FÂê6ß VWަ’x«ð½ž¨öÂo|ªÊA…}ãSU‹å7>U¥ó©*§jXÏj<F3ÖÌ; ßÔÒHgá›ZšR¸¿«¥)…±mbuw]Y9HYÃêîš*Éc3Ý*YJâ5ª…ÁPnÝfû< °l¦ºP ÊA‰Žlýœ:WZ¸]Sç$Ä|Ms¢òd3ÝõÎi””/u$å $mšÈõ¬~ õƒ`gÁ¸tM•qòD«'¶²¦ÊHûÀ8ã6Wiý`ŒÄÛâbêâdiÆfzª#)'Z.Ä4é^°Yž¶¤UècäÕùæøÀ°º1­Î7çÕfµ´-¬$¤¬ù ÀáTóÉfzó9 6V÷Ý bº_;QÞ,ø‚îƒÙáx·WSµ}°ú 7 `« ñ¬î¿[ä6m¢Vû×å1•íU[¿­BC¢…= p«PúYÝ¿Yët™Šæ¸œå± °}`Z$ÒâÓH­2ß ‰W^Z$¬Óh̾®¿¹@6bšuz;Ó·}Бji=TÞNœji5çB‹S-m1qÜ,Àq ‡ÃÒƒL»Vud‹´x ãõîZ€ÛÖ_X|(¬Ó8û “…”¡L¼²g«kxåÅj{³à'¬º/G+±#’éµié™v7bÚõ¤žXÝÛ*D ^ys ß,ø¢…] €xeëµEUÚY˜xe׉W^üʤÛyrˆóvÆau­¿àY€óᕳ/)L&ŽhcdÎö±ÎBk‡Æ9UvË‘_¹Žÿ²l=s²ãÍT[žµ´LBWßj|¼™$ë¬æeVWÚ° çð° Y(| p㧢ΨLòA釔”žû Y(\àªyã^¨:ò”‡¿Âªºq¬‚†ÆÛ‰M¤Þ>Е{›=WÒ½ #"µØû×ñìÙ°ûíqaQÆïÎRŸ«ðáÙ¡Ðöñ`HIiQÙPã®ÀªîˆµD^<0Œ&1&¢#?‡1Ó¢²dû©Ð+o'ŽÏæ{¡ÝΆw}€Ã+[†Ò´=ãQã­¤x>håÈ#QâeibJOÏ{· ªG !Užúˆ‰µ:7Œ¨·c¼˜"ïÕfŠq¾8†pÄ(ýùjƒÕ“Y‚Ð2Õp!óê[ µzáò*¥’g)â†åU D5Žw»¬>_å TëøCoía.I¯öႇ¸Ìäé‘ ÁÜö¬Ù«¾€5ý“D•t Jº¡•ÒÙ©Ÿ6!ʵXÔ+©_$?ê©:òÂÚ[z"XF¢ùƒ¨cØ£Õ­oö‘šÛ4ãÃØuòÑ¢Îq Ž bÌ'eåm ÎAI¡kAÄY0Æ0O;ŠQäƒ ³ ž¤™¤´d¼L|À2³˜ë)pOKÏÓä\‹±”SŽå+[-y8Rr­h´¨KY§±éF$F|`èIzól¬­åZ[…^OòR†’¬l%“¢Ž x³©KI;Ñè7u))¤Y8“ô¸q-Þ4| Söã¶ P€¦ŒGk¥Fƒþ$/GÂÄeñ-À•Ïr?ú¢6'ÝÎýé!;§7ÐY ʉö^°qÊSŒ´ VjöN”KÇ*ëÅÃ8ù—q7PŸt3õ± ¨ÏÉ‘$ß üK:jÂ;{éâ”sqmî¤GÝ£¤Ur$-‘w;K޾¸á¥Üè>ñ ÄÈ{¹J‘>À‰»›´+­žh£„½V彤É!!4åÅËZ®¼ Åä_z›’X7 2öbsþ‹#C‘=6ùsH|ðHÙA)"eËPA)K³qJßU¡Aƒ£ózÇIऔÙáÈ6>U˜}¦làÏ ee9¬œi>xAÀXýï»Ka£ SºH  šúÅQÈY{ ¶¢Àr£~jy¿+'[§5öòØ„°¡’/øg Š~ð eð‘J;6ŸÝSÝœŠäâ[€;#?P¯­#ùAáö5êØ‰KΞÖÚŸÝ‚7¤³ÐF<Ø‚7Fy£u¡9·³ŒüÀ·FHׇ{ÀsF|ì‚Ä»F|¼àƒòÚŒ1öh{ÜL†¼¯÷ä¶XÈ\5<«y@ÜK;Êx8>cb¡NÆ>H ØH2¥áО‰ýÞœÛ5?ʼn‰/äM§à³«ÿ}Ø9x‘?qþþ#º‹©ûTçL-•‹}Šd€Ñ_­ÞNç ã»¿¸¤ ^²œ‚LÿÆ½Ä E}`•ä:NÁNŽ9qÀ¸—d͈tùS>ZX ’/èg ¾Az&C:eFÆÈò*äs– #>Z%äΡ õƒ~2®êUÄæ\üdÒ´¼} á½p.„Iþ´éfH«åÒ¾ãdfqè‘øbúaà`ùR ìÊÉþ>ÀÑOåxdëf<¢r!À¯HÕ³oð+N~jü``œêMªÍ÷AÄÁ¯FLÉ2/S5Í3ÝC¼œúIRþ¤ÌËSùA©©Ð¢²5£V!“š±'?H0 ê¡VЦE¤[D©œ{ÁÇbsÞÎ8À‡Àò"JåT0&ÌŽ#ínœ0ׂT‹ÖcæE¤j>XCͤ}ІöT3ç½0áWÞ*`áWeæ’öš‹_€äƒ/(b'²LqÌ÷~5,HEžõDù“åeoqr$£*Öó§Ý yä†}ZE3Ký`ŽvhD¤&÷jË–liŒüàÁ‘bbQy8¡ÓêÊc†Ôé/ÀâA³UXĈ¤ÓØôƒ¿£€8ší'îö}˜ðÕ‰Ázÿ>®ÃT|€ ¦“ƒŒ´\s"7pÏţꭿí/XftÈz$ö€Q},.Ò(—þ) MQÒÔðÁx²Û)@ÝDu,ÁzB±5»À€€ã‡Öó„ µŸPÈ›¨šQ¯'òf ìÒ‰…$­A úÁìÆrý¤ƒÓøÝ5•@‹†Æ‚Š–Îó1“ÖÙØc¥¦9ù¡ˆã,äÉ)N‡ò¥ÁHº ZJËâÈMZ®¡ó|``È¥±t³†4 &Sò»¡¡ˆ› uÕ”0'¯+*q±á±öAï',—t/¤POXîm'ÂYÛg§Ï=âaïßæPñ%áìÁWÉF8%›è€zXÅdR‹Ü<ëçÙs}2‹Ü @e‡%^ÎX^$->=€º6O*i Œµ½é3â†G‡ÊD€Þ<» ô¼q“‹{j´ cˆçÔ)#Mg݇Ñ躧 -)ǔϹAR,ˆ©]O$!,òõ@Ir;±8©aø JÛ>b2o'¾&YÉÊu"YgÁæ–,éZ0Úö=/v;°¨×¼í•2Va‰²jÝ&•&é+&v=brR4Ü”N°9¡äD¤Š$Ž÷öAÄÍ Ú´Öe=˜8>‡šx«`Ô´RÛÓÇë@%eªÉ‡žÀÙɱ—êm'Âf'ËX…$‹GýÈ=ÇÌÛµ|°@Ôõ¦µõÜPêzÏÀÙI=§µH™ªQ×ïY©›¸ÙÉv{8ò|ÐG¦ºÑoœŽ„áƒñ„ž…ŸÀÙIÍÞ› 7½ùa'â¦tâ§›Mvbü8½¹§µX« rR–“"’ˆÍÌyogœ6±&NŽT‘ôýÕ{½ÿDÎzí\ƒ«˜º“#uäkNÏül>$VfTnFžžQwÔæ„jååÊ6ÁºgdXJ×sZ‹´ 9䓲œtsŒ'e9)GÊqă%K:#A;’×éÂMíɵ à«}•÷z· V×ܼNYZKéy3u8«P&©ë@*Ρ×Ô^¡LMÎ_½pˆ…CÖk°C,™5µ·“ô¡Ú¿:MfΛpyÉ…À*jlÄiQ yý¤c$mÂjäõ“ñf,Ö“=ŸˆLu±çß<Ѐ0×@öüVw‘³ {ÀCÁåÕÙ#µ}°ú«…¤  :š´{ð# kz;Fš˜ínÓ8*kŠŽ³$Ô ›\H* õÂårng1Žâ0õÿXûà¥aÀÚ/ ƒ›_H šgù3òÄÉyµ îÄc’N£å‰ɹŲ´a¯ª+6)°Y I;qäH›9žµ,GêXOœ©?ïFÜ>0 ZÈË‘¦ŠÂF„rr¤l“ZH* ùB„’VÁ2¯ÝÄ %ºê[Ô0ñ€ÚñÌyÜ›ü…“¥ål§Ñé¹âP±ÅN£Ósjrêÿ‘2”l*Œ›¬•SÑÌ–l²V–†Ëê{¤:R6”<µßøB„Ö7Dj"2§ößû÷¬#ãë¹T9¥/R¾Ê™jÎ (xR>ÎøFÊW9Àp3`½*eN¤n=*OGa½8ǰ† È9µ^xDÎ)0ƒWšŒÁž«”‰15 ÜjhpNé(ôÕÏàœ‚žü%€‘;t½89›0âcsVûTè¯rÄ,¢Y ééœCñ-Nêè…EäD£h˜×°h‰ÑFÁ‘N£eFº&¶Þ-ø†I u<é…2r£ƒÆy!L×3㸚«ÔÆ‹‰†ŠmÎ#· š>X€r÷B^£k$&Õ³ By] `˜“ðâ­–Ò_¡$D¹ð˜œˆ”R«à¼XqucfŒÌ7s9’»p« Æê.p¡91Õ‰»©–cfŒiêb“²4CŶ>u±YûÀ0©5;y"l4Ãåê3Cuú ªqõSHñ@ãÅRJº™ Z’c¢!Bãâ»!Ý ½úÀr$ éƒ0ì‘UqÆ?# gs;Å{½ÃXÈŒ;zk¤sî1¼…8¯wœÞ“ä(I:¹ùÀÞÎÖÚ>¡¤ÓX_ œÛYj»€¤˜ØÂÅ ÉÉTEÍ‚Åádi9×£{Ý>œб2;]††L›q‚“¡ä:V!:¹29nç¾uØ8ybnõƒ¿Ã±ˆJÁ‡Wÿû¸ngºxJ/ƺótåÌ˘Z{z62Ô)qÞÊ™U›pM)eT¥Œ%Ø3Sœ%¨é°ÉúÇ€O&7¢cÌ­㩤M»ŒÚ8mõ4”2'£ãWïô\)ÃÌÆ¾´çµ8wQ7‰ä0‡©•2PC¾ÐJ¢F4‰âEØÍ91Ž“¸éó•CÊÇFL«¥B² 1áj+)‰4;Ó} ¾pgA†ö¨é,|#¨äd&l9$á­B)G6Æžê‹”“œÄö¢ÄS‡ý‹“LrÆMHGZÂmç©6©sK p¢¨Öbå`T©ßA`ïüµîdÊ8à‹‘7WfªœÆ£ÝµHÎX/"2åP¡™ôÜ&"#YP ü“j¥Eeƒ¡ECñvb}‘±‘,hâ[€H·þÁØiÔzÒ)˜ð$¤#ù ¿¤ª9ï…ÔM®ÛÉÖ 0ƒ`gí4JФ@°„ ´¨,ÉPÒygAŒtg E“vâx½G¯¯£‡Ì€r¸³0r$ߨN´F·Û[µ·j½`hœú4¹`h¤Ó¨á"¤ãd(¢ý(Ò"1"õz8û D[sk´˜˜C9ŠÛáˆ@YVõúl8"²d>ÈN--)ñN‰bÒ>0aX­ÏÛ–#eiG©¡ÚÍd¤|IÖ¸i'–pôM6À9/ðOçÀb/"²Î! úð÷OxðQ§àϾ¡uÒPñ¥Ü9|z„¸H:‡-U[ámÂ<– ®ÑvNøçíÊǘÓÛ÷ÿ€ñ1ö^C¿רªG5üÙÝ ÔÓ1nbㆽ€›$>ÃÐm pu³S¤üæazÀEë.$-A.<Dî«èæÔý`²¶ s¸)q L”)¶|˜Ôoj8EÊIq@/VÒÛø‰ºÃÉËz3U©êíD“6¡ÁP7öæ‚_áK E1ÊÉ ÊÊÊÒø©šs¡Å©R.)'ž–-äͪ”o$)79œ0TÖ*ŒÚVèf­‚1Bæü¼p«P.nRÒÍk>Õ©Y«` œ Ëò±%/Cü ³ Ÿ¬˜¤ô öá™#V~ÐõdC$åÆÇ¸YðHùA í“òƒóaÔcv/¤ØN}ì[å,UÊ7 ©v— f²˜YûÀòƒÅÈ*ßåv*3³êw„]pdV<0¾¥¥ÔNªà¥*|P‘@Øæ¼Ú`ùA2¶£<ÇI·³a5¥ô, t¬‚×OªSUð 8°O 'øïæƒ/ :µk 0à¿›’‹kÁ„¡¶¢¼U=ù×H¯¶© ½Ø%H·³[òêð²"Òx½«WUÆA]j:!˜¬U¨õÃ>€­BK' ÞÍ‚ä"tWÇÛÍ^u¿â¹Iyâ7.BÒíœC÷-jCx“òz Š;A ¬}`ùÁ¢ú`íã*ö,Bq/ , xac*®*RºNîrR–öB€e. Þû÷q8ÐôÁ€/8õ¶D%yàD½y âxCèíag¢Èe¢8§0‡À¦"Ú!¹ÏúY¦ EƒIæ‚: éy¡y ú§¥Ö/V¦Œ©éˆ„­8wAÅñ†¬Ï»ÖUêšb7`×q0M`-v~c"$Ý1´ €Å‰Æ1æ €Å Fk&N;‹1µ#/‚ê›"þ´ˆÊY”O«ð…”£uW'k«°šJ¤³`øBÀ\ p·s3ìæäÊ0ª Ë‘\ plŒãfj‘øb‘|DáI;jI)“è.…w/Œsx´I>ˆ?,é½ÓÅKŠHS’wñòV!ËÉÎÊ‚^äî[dc¼øao>È0Ê‹–•s½øaYgaäÉë;ãèð,?èÎ{@GWÞFZQk G­S–ùýû¸Ó‹ˆ«p¸_ô"c+œQÎæ{—¦ y ¤~XÅóá(º^xÐBÁDSEަìs[‚€££Ų̂$ŒÛp3£Þ @mÂ}`§ ]Ô¬¤»ÀÀˆ{nŠ¿±Áq"a—€.‚\|t$ b¸øèHÁøÝ[›š´§(±kA@J{àÀˆ/H(ÉbÐà)ùÇÚ‰ÆG—Vc­Pø%b6fÄê$È<ùè8™A,õâ£ãÜÌÑØ^6$´p˜Ðj½ ¡…ÃÉ×^Ð`Òi4Æ›%áÁºÕþ­žI*Œ«U ë¼Õ€ïõ~ñ’î…>~·®vË‚|“9·s2ØË'\Ð#ôÒx¥3ƒÅ¶ºšJœ»1¥‘d5•8§Ñä±Oˆ8©|&…ícýq}€âÔ1tyÆÄˆ”†«±FŠHƘÛVcs7.H¨S>ÀíƒoPÒ*è ÇÉT“1æn( 罌17§ÂËPŒ“ï„’JúáÅɹÄÆf< `ÊdôöA $4fæë]L|29¯wÜ>0@¦kNZN©xRD’b­7ÚÍd€LÍÑ©'Âvb•ÃÐO‰Øæñ@cåõ7& “lúå±Í‚žŸXT¯w­’”VK“n\­Þ{!!Å©E¯¿09ùB{ÖÒ΂?%ç,ò„ÁqÞYª¿ @>ºtŠ”“²õœËÅOIÚ%"å¤{!ý` [_ì¤ØâÅŒÈÉ‘ ™ÜK…Ã! þRçmò——:oãLÛ ¬ÎB£ÀÓÇ•T7•~ãLì$ßÜàV?$¯ÆFã ÃM›võ5Z¦‰ãöò܈Fì‹råÝA¢ã çL4¢gŒ›ÑˆcH´PlÚo6Küð±íäœãn¬J:ç6ŽAý5À¡Ðl>A¹B#ÑŽß]S ´}hʰ'A%çBŠI/‚JN8Œ¢|ðÔe=õy‡&Ô‹÷°ÉFYÜ–Þi'pÓC¶ÌAâ…>ø"`9ùáDâEç™{)'g$íDQ¹‹s;' ®Õ¥·Õ(Óc \ØŸ÷U@Ú‰ý!½—c¾*IM¡Ž< ’•¶ç݈ýŒ©éâ²çäÊFxê475¢oì,”t)E“|PÔ·GX[ó `xÈúRËæ”oR{©e“|`ôÑÝ)_à ¹–¡l‚JN~Œ>z«$“VÁ2”¾Ô%HñÀj(ž@$^þà¤>/ÙÑÔ²½Zž±€¾pŠOr‘trÞ"r’Vá9#§®?±€êÔpØŸüÉ ˜´$ÚFŒ±Ù4Ûi7R4D×Eb¥ÊóV ðäƒ#­‚a= pè#«"Ç+oL, ÆD|£„£•ØŸQ9B9ñ4ð q¤''ièØºÈ»•Ÿn2É®¸U0™äºøÃß-ø †ƒ3&²Vx/…Œ‰Lž·3îÅ>~·k 8n¦ÖœÛ‡Ä‹—X5'*'!Üè#–z¡8/¦”_˜Òi´ü`#.”º“F~pÊ¢’|`œ7!×NËM¨ÙµˆFÔ@…š·@¯òXù²óvÆ1šáF\p^ï“•OW0_<`¤‚ºqævïÝ€XÀñjy¾Ú€hDcc«ÏÛ7Þo¬|ž`¯61ÎÜR±µ#ã^x¯6CâÒ°œ\Y¬Ë¼EII;±¤K˜U9<`S&yñrÞbÊæäTó¤ö‹“H«#'KM¾¸Ó¨zqâ‘N£±öö–í^È6KØ™ogÀéfýà¬ÂÄ€‘-¨¾¸U0‰àM}ÂÉÖsG kvˆ“¡ä–Œã"8É:óa5ÏÚ ÷S”¥ögk¿Ý,$ö'z™*N‘ÓØVæÄéÙ˜Z8õïXEL '·+* eã^X©›êDe$ —kŽ}Éô®‚—+ÿ ýÚ 8÷Ž…+Ÿ½~V=;ªïœ)žü¬U0MP× ÈæûÇNŽ R†"Öß,“7˜µ %ùàP'E?X€£8QÙmpÁöA5̇ÓãÃù æ£8õÄ ÔÕ:yƒY1QGTNsn†uµ}° Y¸R˜s3¤·s6ÕòVž˜ ê$†uB걘&¨kPtÜÎ¥>ki8=LãÀr-(HUR Äjžq`õà½qº¨cš÷jƒá!M‚²å'ôÏÂUâ UÃÑS‹ñýûÀNß)…x3 á0`¾8&ùCvŠ9£/V$)u_øŸH¥½ð?‘2³T.$Ò)(•lÀ¤s €‚6~õRȾy•“´|rP‘6á¤Óç]ã5š {¡Ðö@GKõŠaïÔñ@jièß €™”ÃNKß-(@ZÞi))%‰zÒþÜöa‚ÐNØKäÐþH>iÞ-À‘±å±b ‰–˜ECf/ÒÒ•‹Ñ?­¼h2©×ç­#_ªòÁ‚/ Ö&Ý!] qä¡÷yû@ ú#ùy [€¬}`"q•±#‡d#ŒUPf–œLD :Y*î½>…–<  BëÎS()'á kä¢ýaíDéÃêDå¡mÒ–LD`‘îòD£ÜrW,Ôr ìÊW©¥SÚ…‘ ¤¾ÄHo&ƒ€miÖNìòJé8–ÁŸHóf’ ü)vŽcþ`AGŸÙ é^˜ð']£œ—«H8´§Š[1°Awª8 `mºV<ÈÃÒˆ÷”Al1ð²4©fSTÆQÕ± Ôª²ÁŸ’WV’/ÉQ–¸Ë=I¦$(kôzô0EIýé/°A$Ñ?™ ¨ÿž¡$ ø(‰“­Ç‚é$&$…ëE„ÆÙ%0µ5žR”7NˆÑhÈ Ï€ =+)US]% ¡ÌK™k ƒö"ÃÊô¤Fß°ÛP‡vш ƒCÏ´=ÐÛÅE'™£…Ù..8N$šJ”›“Fkr§\#-Å”| €:õbäc¥ÆÃ’L%ž”–ÄñL>ÙèH>Èz±Ñ‘öA1EÒU:$FƒÇÅ/"Õ ”äSYZ:¬w¢ÁðvÑêÝ‚Ÿx-LÖ*H¿—x·³¡ôGz ´ irÁ-Âw SƒõÍ>5X9»ð55X9ápdˆ&FJ3À¨ëwņ³#7:+6•D±vÚÃXWµ^Îd¹*6•’æþÁ€‚[¬”ätäeçÐg4{$-$0g4õ €eeV±ÑÚxqÀ*6eA¡+…GaN .$t¥´æÔà~ª“‚I]¯s>…³ æÔà~(We¹µ‘ê"ÃäÅ9·èîÄ$Ï÷-À•lÆã $É<äz4™B¸¬³`|gDŠÅ$ ¦.+&Ö—ˆBåÈ8´—ˆé,h¸ &¤³ ý*˜TR¹¢^RTî#E«±ñ¢²Q×»‰ãÃÀföâKDsSŠ—„ç^H–Ô5›AZ…ôé,àèûËX…R íf²©ApÔõæƒ)|³I]ãêóWu} ]”wk¿ÊØœ‡kj²AI7“ß\µ˜ŠSÌïȹEIÎÍôœ[t-ˆÐ¹ÅP»75| póji¼\uq?qîF‘|IYTŽ„M n’ljpË8ÎByÑ÷WJ{sN zí5-ª‘¦ë¥“öA3âø%L\I„áñƒ°9f5êúB¬#e¹Z—V?Èa¬BN½ÑòƒÈ‹m†Çë½ÇÅ6CZ…úš %ÅÄ‘¡¸> €ÐÚÛ,9lRâ¨uñƒ6+c,Ú§Æ!eì‡H™“ÃgK°¶`ãP*Ä€1*˜ —Ý(T?ÆQCl£°ØÜb[ô¬œcXÆ&ܯÕFQ¨å¼ÈY9§`Üa3^qö@{@W9¿uÖÔÞÆ‚6 ¡âÓ¢Çmâö®ÙÕÆ¢®¯}58›0Ýl±Ó.ƒh°top>HÛð«qÈóíJÞ„_¤U°;yk¼‘VÁ.å¬*´x‹bW±€´Š¡bW;ƒ“œÆÚÙå Ò>°y±]® ­‚Ѷïr'7‰*—œi̵‘ºY¤Ó²ƒªýTJ´$ÙHÓÏ VÎiL6O^œ§þd`DqîàB ê¼Øqð§<~ª¯Öi² ЬáAÒ*äöaÀV¡ØïjorbbªíÃ*àHÓ_PÒ*Ø4÷†’v¢¾ ¡œúU²oXTÕœ %ÙÀ5ÚG~ÐZwr$u½W«ŸSMÇàˆqµú‡¦9¥Ààî lÀ‰HbŒ7[∴LXf 5u}º†…¦Y²ù ës'ÂâA1HhPâ>¨ù’8âäHÒÌ‹‡Œ•Õ@©Ái®ÀVÁdßZvº+°ÓØåƒ¿©ëmŽï™©â@hé’yâø ‡r“9;1ǗЧ†b°HE䑨ÛpÇAÀLæ©7Þ{!‹^ðèF"Ž7‘%§ã $Ž7h°×ïlpðQ§@_¤éMšÞ9l/,ŽR>B\ʃ¾8¹7£àZå£NÂãã2ç úÆ3aø+Ú)°:êæ«î ji_5Ç€úžtiº°=P}ÀNA“ ôÁ9Öekˆ–ˆ´]N™Þìã‡rœ`äÎ᫇հóÃä$¤à`ýÕÚx9‘ee›8ž³ ¢ñ‚nÊòN#Mo[íäkro¸)9Ïá‚[tÊóäÛtÝ$¹˜—Hñ š šNŠ‰Æ°áYK b3–)ˆã¿Òq/´&™wôÅ2B: VÀMN~‚?…z1lpöA¿ûä· ù ö«„̉)ßXc/I:,I{®BÀÎV«pÔ®B>çµ0BÁÅs²`œÆ´:9YZ*ã4öÅÐÙ9~u™#s7pjœåÃà°€zbYA,'µ ©œXÀ›0ý?I't¢Œ} Éxoà´0³o,77*¶F$eç±\X¬}P~jªª°öAK,À©q޳PâóbÂÅDëõ§âÜL8-Ìñ»û\$¥¨S ³ÍÁER–žB<µïHg!…ƶ Šo nXgófÁ0 ê©@HŠÊiR­Ìþ&kX~àZ€#ƒ3õ½Ùa½Y @$^Lú¬ž±€#Gê¹'^L,#"ogZý,Õ|R­°Nc3ª/[‡íƒvê7IÉN¾eë0h= |ygÁðê½™`˜P›V°¶/*aîÂÅ’ò#ÄÛ ðêXÉ %åÊFˆ·1¡¤˜(#K³RZ¤Uq ¨ÆgO;’ ‘9iJYgÁ¦Üî UÆgM’·j?q±¤ @9Ð’Ú3vÝ&á"ݽ]¨—D™LˆaüT]•üDâ£3®UÅæœƒ/Ù7–)ùñôdB»Y㟒r2¡‘²Ãá]UlRnš£ï ù”ÿc­Â”}ó|;¥ú>в¦t<'ËÆúãY€ã%4Ù7ל,¬ –ö¬Àð˜–"ÕÕS"ùÀ„e–ü+&k°ç]0¬~JâðÑß½2Ii\ 'C&)WNiă,R‰ä± k€‘“'&ÄÉtBª_3¢k®~f¬Á=:5L$/¡kn”·\Òw¬xP«uÍ.%/aò-À!ƒ§ôç\-9“s3ÁöAÏ'G'i'ŠÍ*,nÆ›0\¸2Y%}Ë60‘X‡Í«4 ,¬f'[²Æ Gòɾ©“­y G<(NŽlo]Lh¤˜h²°› ëÅ?u³) {ânH«`wãžmfõ9Û…»áTu¥ÿÔš–àœÆŒjMKpVaròÕÉåNʳA]¸Äâ[€[…8â„'ê‡A³Û¹§’U€¢¬ãïÜÈG׃&^Ž”óˆ‰ÔnŸ±Áù>€aëˆHöh¢Ý ¹…#¹}&˜ÚX·Ã¡p$ Pð —8ïû÷qÿKœ÷æ€+«_00áL³Ö ÆY‘ &Þ“€Û0°w~ùè_òm(‰·D9o{àw 8¯ç]¸h°„Énæ5Ù/” f²¤ë©ÊÙ­_tpï r"­'öt´ýNÊ$³5™÷xˆPF''ogpŽÁ”¦Ý*$°ªTÚ6˜Ò´û¡LJËLšV¦ð)G1 Ö3U(cƒ1›8î OnÌýƒƒ ­š (+¥¦Ùê]-GŽÕI;’’o~–• . ž÷P¬@qÜн—¢"IeÍL‘¢r/§\Bº¨Ø8·s /"4’ „Ö½§Âæ[[‰G®Ú í^˜ ´MCF*Üä ™(ù†r*J»Mž÷$ãÜ “oÃ^H«`„xe•ò9/wƒÁmy^VL4B¼%ŽKÊÖ'!^u²4œd¹Vß\TîéPñòĤ£+ãéöˆÊ8°ÞlÚ!ν “ð& ¯©b08õJú8øSŸÍ©7ÚY0:º«òZk’ë{’ÒP¸èf87“”±µ¶gLl@œoAGŠãnÈÉ-úÀZ|ˆçÕ•ˆW/â#!Qòupðè^/èg'æØD; Nu'¿f 4jEÓ„a»[ÑT Ýx;:ï/ 0l÷*š8Pj;‘ZÑÌy¬B]T­$ &¿eNH§Ñ`ò[æ„ónÌ5°‡¬õèn]Y‘P@ª^@¼B„Öß%Þ‰,$¦…Àªhñ]<á,Á¸îpöà¸}  Xwí¦P éß„a e‚ñ›0l¡ ,}†-”¹öq„]9âÄ–ŽfÝö‡‡t=€ã䨥³B™eVÃB¦IÂÅ9†ß€xœ=09ùJ®—|ƒrvAŒáÂcrî£G4Üsƒœ )ާzh)=Ã!nBc¬‚IŽ=|Ó”väØ{âÆœ/VÀÂáà*ÆÁµ¦úIûÀ훃‹ÆC¹íréÒ‚o.*·—")é4š®Ë†€‘b¢ñÑmX¡0\ÄþRa$=VG~““§ã€7¦º¶Xœ˜Lum°H/vÓÆÝ „œ'{Jýƒ ÔÆ=!`œ{!™òÜæŸ"Ð*âþdÊse)×s2”T „¶tã9J²‰ö;/C™Ê´²fêI÷Â7 )*ospq²´ Äs-øBñ6 é4ö—$ç^0|P¤ðre1Æ›´ØbIõ¨°P4^$•c,ÂÔÆåD$cÄK!Ægž‘|t½k(“n ÍÝžoçäH“.®‘Ò*]_㤈4x^®Œƒ6ßPó{ß°xÐ „¦NƒÄãœFâüSœÓ8ùèÔÉ•±|tž@]Øt1`qîâ Xœ+•4#qˆI = H@B¾ØæC³Å´yã|%U -¥)ÓÖ’„ˆM›·O-Î4#e¬úÜ¿â”iO '«^0¼J™è#Ž-ð¸ pX!úàn£`úĵ>oƒŽDÁmÎrÎ60:º“ ®’èè –b¤…ÃhØxõ²‚ß‘„xeu79iAÌéƒ0R@Ó<Û Å•Cišg[™–j½ô@+e˜ÛèèZ]s"ïü³ ^dpœ ÕèèZ[¼á¤—¢u¹w͈•/w׌8)Zìã4îšÇÉèf6“%¦(‡A žOÖ péH4¤×îÄ!Àb½Èb9Š#žT­$ R<ŠŒÐnçIŒhœ|´ˤ%ô:ž°—«¡!ÝUÀ¢!ÝUÀ#¾HƒI«Pú‡}д„Éë|ÃΠ©2® ¨Dì ©L°)ñmB:å ³¦‹Ž³FÜC”JadÐ|p°ðñCû½¬”ùÅbÙ‹#W)ã Õ4²9+çVÓÈ^œœ=0®ŸñbŸ(ÎЈvÉ„s U}pw‘¢U²QÊhD×q Ö4¹R¦C ‹Øö$5gƘ?DФÒ×$5gÄôBF+‡ NòE©.›Ø/u¥°ÄNF¾ýF|·à ÈÈçZ€C„rOÔsîeCCÊž¨'ÅDCCîyv%±šHóêðjæà1_‚åït 'à)ÖMŠH#=È{žs7&»7Jž“¢¥>XÃÅN_9ÜOÆÈçZð;‹8~:&¢&™žcæíDQ߸ÂÍÈÎYÎ͔ʈH©4Þƒ%óÁ$%Ń:|`ô Ì=âø±D»™ ‡gG¡ÐÞLÉnge¾X’ÝÎÕy±ùÆ>ïÅë³ü@ãêèp"’DÃáeb e¢à¢«HçùÆ-é%ΉH"/–RRM?¿Äº•ÄÈW/©lÒY(ÆV;nÚ‹ebÐ6“‘ %¿ñ˜œ£4CÆRy÷‚ŽUHåY?bÐ  ,ôòÁȇw"YmÆ|!•ć—}…iÇÍÔ$ðr¤lõÃãÔ³SëâS#Ÿ±ÕÖçÛ‡ü™´Ðˆ«`4oàâ‰óFæ›)—|á19w£1ò(8%óáu ­}ÏìtßÅ‹®SàéI..²Î™è5ÞJQ;‡nx`g¨3§Ñ}`â&¹^,Î&,/ôM§À­ÏZ[ì´=P‹o¬±Óâ |t1$Z RC¾ç.ê8XȪÏcˆä£k:ë$º¿@:ºäïBýT0VÂ< g$D­a-N,š²°žXYØ-Ü)£R1½$’I>°Ä¨g'-€âm‰äÎ#ÄÛɤU˜°%‘LZËM<  „x'í="ÁöÚOyZðŽîpräØ úÓfጴŽÎ³JGzÔ@»’åeµµHX›;‰“§Â Q/zJÎNLF˜»%MH;ѨV6=%iaî¦è$ùÀÈàŒŸ’–+Ôàù²<«W?aô>ø ÓÆ-ëBªaÖ‘¥mYΫ-H½Öç½€(nõ¢f$­‚¦K.œtµ¹9Ùzl@aZ{¼gZžh²°''O42¸“ŠS?0YØq7‡J+dI«PC¬¼}lÆ»ÖÚž ^¦ ƒþä± êei8::õ-HH28-^žØ€²°Q{~¶¿08Ϭ¥«ð¤bs-ÀõYÕ@h‹Îž•µ_08’ÝÀˆÞ›©©Ø¬×yÝæPÝd"þ•£‘C¶È«ê/ÅÐyÕ¼l”þê½pDhæ§Ó…âå±ÜŽ+Žmø ¥ÊËT „vÊÆw Uk®á’çÜÎÙ€úÅy¹Âr¤ ×"gXâõVxÿ>ŽÿçÃß?ÁeaoÀ© }0V;‰'ÝÍœ–ÀÉEwÛ°—R>¹èH›ÐH_ê¬%“¢€É®ýfŒ‰Í ˜ùùm˜،iNh–`ÊÂNÚrÒ)°iê0Õ®nÀˆÐ‚oì}¢í¡‘Bq'ˆz=!h¤SC8¡¤@ƒÁ¯fb~óAEêҮĜt#OÞJÌIÁhÂðð‡t#E£GíSgŠ•fñ-j²^à'Vz^.ðéVŠÖbö,ÀE¤zŸX;±ßܽÐôdb­‚µ˜ëË&[¿X‡XQ¹—“uˆt7¦p)$³^«aœFñ^‹8Ü=b• ¬É™Ö”Ê ~"Ń$é?Ý|€@À¦%V¢í?yÉØèbrÞl8@h1•h}–P†×} pgÁÏ$iäíDS<#[0Nc÷^®°»Qã©ÍKÊ“6ß\<èùT&Å Á·`Íüþ§3þû߯ù?ü¯¿ÿþ?Œ_ù×ãþùG\¿ï©Wa¬ÚíOÿçñ/†[ëèÏ?R¸ÿ³ùöÏþÒ„«Ïüÿü‡¯òO?þç_üø×ï¿ø—%€}ëZ½þÑ0í¯þö÷ÿ.¿üöoû/Xk;’žÊ˜ë/ðç1–ç?þ—ïÿXmêhýÓׯpÿá÷_ðO¿üÏ¿øå_Çg‡ù—ü?öŸåeÌÿßÛí,E—q«^Îþù'd°u^fs¿d (Âù>Ž!*ö³öýû°*‡"ÆN²¨õö÷DZ%ïû8(‚ô#,hÒÛ÷qpñýØÊíû@6žrÔÅÒöö÷ÇqñŒõ_üdo߇í¿ZÎÞ×[ü­Ÿ]À´·õ‡aÚ8ÿu¾äÞþþõû}ý7?þ/^OkU endstream endobj 97 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 98 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 595.28000 841.89000] /BleedBox [0.00000 0.00000 595.28000 841.89000] /CropBox [0 0 595.28000 841.89000] /TrimBox [0.00000 0.00000 595.28000 841.89000] /ArtBox [0.00000 0.00000 595.28000 841.89000] /Rotate 0 /Contents 96 0 R /Group 97 0 R >> endobj 99 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 100 0 obj <> endobj 101 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 595.28000 841.89000 ] /Group 99 0 R /Length 724 /Filter /FlateDecode >> stream xÚÅWMo1 ½çWÌ©!vì8‘…‰to¨'PAU+Ô^øûx¦»ó‘ÙeÝ]­fÖÍ{y±_œ|è?쯇ÿ?úG9¡ô!ɇ+1t_>ºÃèßîëuºï.tŸôwë@ÿéË:H¸‚|.ýÝ·ûíp½w˜s»›ÅÎâ ±)òÓݼ2¹rŸÝƒ«ek.`Ù’/¦5·)ÖL¾ö0OòŸíG.íä‹aS>ÈknS¬™|íaò-Ÿ@ó╸Y¼ÖU5ÆÚos˜Z¾%éì}´j'_”Mù×ócíäkS{_A¦rïK¼é}HkScí¼¯9̘}ÿ¯ð#Ñè žÙÕûo?®ò‚¦ð]SRyÎiÀ¢°Æúë erñYñàÎwîõå¯p¥cx?bw³Eý¹G}¦v»Ç)“»I2ð˜Q@µ/Q¢¼woB|Ûín-࣑k|1ÂGô ­ÖøçFøñý‹~ñ y¨¥þ¥>e/YRVùÇšÇô7Ë¿^ÿ!ÿHæøÁJmEÕøVøttþ@æë¿œ¿Uýé¶FÄQñsœãƒUý'Oþ»À‡d¾þËù[ÕŸö‡%i‡Pã[ù¨ÿ îý§Ì  U¨P X4ÏÀJbž‚/D`ÊÁŠ€Yò˜ÌsV. ÇŒ’òŠ€Y¤KÀ¥¤«}POЀBôbHÑBk`Õ‰p߉¯ °Õı-‹^ì¨À Ñ’@\ìô<û'Z’ã'ZÄÓ¹™D °·3ñRÚÏb‘H§$“‘k¬ôÄ5å©ê¤t£ X+paDûÌ1¬r XÐ- C¶´Å+º£¤X Õ ¼³"Àz'Ò-—Њ@Êr)50# É ­–@¬äìKN¹.C#ꂞ±Ô ¼Ÿo(ÃÈÑ¿ endstream endobj 102 0 obj << /Length 14136 /Filter /FlateDecode >> stream xÚÅ}M¯%9nå>E­˜°Dê Y•eÀ;ÛÌÂðÊÆxИ¶ÑöÂߢŠûn¯—ç¸ÑÝåêW|E‘Òá9ù ã_ã?`ÿwý÷?ýùÛ_¾ÅóÿùÏoÿðã§þù[øåoÆ¿ÿtýSUΟh!­_ÿà?¾ýÕïÿÿ~üÌþ‰?þï·ñg·"Õ¾Q[Òùß)Ç_þî¯?þOÿþ/ã{üûeÉüìÍÔÿÙªEõ—?þüí…ßþ÷/ü ðu=Tµ·÷¯‹€¾ÇçSl·_>ÐçeüPÌEn¿}C}¾¥iî·ß¶ôÃù¹¦Ûo¿ƒ>ŸÆi”L ½TŽr¸E~ì ÏçáüÚz¼ýö¨ÈÏu|>ß³líK:BjMI¿}iãó©ß#ÿ'èó55†žHi§V7ô*èóÍ|XÎïㇲÔ{è%ÔçGÚ‘’ )ôz?´Kn¤}C9B))²êñg×ä¶ú÷ý~¤ÐäžwêûÒì§ä^ñtX½—†ÿG•}û>ì÷×z¤˜Ba}ߊžU*ùÅlÿÔȾ¬ï—ñS=×@ûþH¿¥gVáíè/Ž#6Ø÷‹÷}ÜþoãûUÓ½ô‰¨ïwwý §)©’ÿ%†#Æ;)þ%¦ñ}•F*$Züu ¤ÚWD¼ïÃê‘Q¤:þ)Ný!ÚÜõ‡Å_õG«1’òϨ¼½ý«¿e4ÞµÇp?~E}¿Æ#•Ôë÷¯ÃÿÚJeÝøµt4k€Xù·µñýG÷‹Ë¿ÝÖ¿ÕÌÊ¿½ºßG¿Æù—ý7ì÷×8êú¸~ï°ïwïû°øÓqþzþo°ïg÷÷/°+ÿñûç ¬óG“}ÿyÿñöýáÿ.´óWóøýK¹Ÿ¿°ûÍãüÑÑ…°ö_ù·?ï`ùoôÿÞï[ÿªG¹±ú?m£ÿ«½tÖú79ZzÜÿàÖßêçû¨ú_»}ÿñà- {sÍG~¾xÃ^=Sß—ÇýOD­²ó¿?ûߟ°ïü[žý/ì÷×xd}ô¿¸7ÿÑÿ‹óô {ôýk©VVüçáÿÜîÁ}ø_åŽù€å¿4úÿ‘}2ëþ?Uûýí³œû÷ ë5ò¡ý*îçaÙ¯eÕ¾ï¿=ìñCü_öø3~ÿªzyÿ>ìòk|¿E»{z÷¿ÀŠÿCsN•~ãì S»ÿþ°Ã7¹ßÇ7¬ùÿ°Çƒ¼9냺fûý{ʬø/ã÷_µ'ÿÞ·¬Ú—“ª¿Fñwÿ>êñaô¾'êóûÛÛwœwÏïëC¾] KNõCp €%Àd¬À|}by ¹àðw£ÿÖ6ß¿81h8] ÉY¨»#U»÷–@´Õƒ‘¶aÛPZV!6v o ˜“o ‡Uâa0ØDëÅ ‚_ƒÆ» CÂ5ÅG*ÆAáÆÄÚiíPl£hsö‹´Vôyþn@‚¡ñ.4&gJ¨GR§% H<`xöd°ŠÈyž@Dà8 ªs+€ƒäå#¥üÈ„8LœabdB(I ”ØEhy  ™–ò¨ˆzi–òÂ"­Óò€$ޏJ2FEÌyÜãb@ ¤WÅ8”œM)‰‘uM§SÐÜë†Dsð h@ b,ýyYC*׸0¨bÒÇs+[ +Xy‰ÖáC«±ÊrmzdÉú(Ja» uߨ.膗‹é‘ +0Y²(+&bR{(4Ô@gAušÓÅ,>ïp¸ ®‚C-ß0ÒHDI:íÍ(z@by\Õâ<`ÇñØ…Bó@KPÒãª]K I6»PŸ}.ŒzÀõ@E£7•3¼´©ú”ÄÝ3þ¢¶xû>îå>¿Ðþø>ìr&ùËk†*;¯õбËýû ÇxÂW•ƒ¯¾È‰?£ì[ÝR¸#Œ³/Nê”÷øGýþFÒºF‡”B—YÛ†O*ev¡å ŸTÊì\î÷aù¯_¤Êáî m#ËЖžY0Z ÇϳBð zTƒ¼Ðƒ¤%P[‚T:ëþ_$-Õ!^ À–Àæ8Ö §0ô !YüF#ø(ãï0>aòøZR&¬Å7Ç$hL²%=Îz°•jRÞØc½cnž/ˆýt¼WDÇ&8þì–ŸÑw xÏ5滈ÊýyÁ€[R$ùY’Á°sj Þ^"m RØ”¢œLhœ‚1LNc8NÃÒ@¦yÀëã|¤S­á à$mCãnó•U7~R)Ì2ê×€³ÉprîG¿p+*›\‘„½mv=NcbôŠ'‚”³. -ç8V#X^œªX%øÀ@;RƒÐ «=×dpú˜’yÀé `» ³ ÏÙ:N"2ð^,s¶Ž¥ožCNI¦U6Ñ!éµrÔ'Ó!i ;gV´TÜGV§5ÃA׌lÑiÍpеQ’-;NI– KŸÖ Ç÷7ß!i ¤º@Á{q±îpj Þób ÞSb{~Á–2ºW6l%s¨tÃV2g̾!ª=UäÄ‘ñ¿'1oH3gš¨m‘ÕLáyH™zŽÿsÛ¬o™‚[-ùÐUYñ_#ùûÕý>6dߟØuÎ÷'ëØ„®“òÿ„íLèz¦ÐÎÅ0V`A×I0äì‚®s*€hÐÙ…ÏÞ5CÍ8àŠ€q Ö]Ͼ¥Q»(HÒ¯4‡zIAhyâÇ9q,f€SˆãÄ/û‘Ä)Åq •L6À8·€ÐíÅð£Á ãø¤¼z÷€A+§g&qnõ-ÁIjÈbö H@ÊS„“ŠEÚV!Ì®c˜X2„œ¦PLkér ­´01¤¤]` \Šk´2 ˆòèÌqyÀ0#­<[c>ÅbaUÅÒt?T’b ‡ýPIÊ„½lA*Îhû•,“ŸÄõ¬$»®ç[bH2_¢,s9‘jN÷ïœ(KXÏÔœï‹MõFc~l’ûþl–¡´Ÿ'8¿ÿœ*ž×ãBñóeiR…~hÖ,¬øÏ²§Š9¿ÿÈù¥eC 6JZ‚û}Øïo“Tkª¼QN?¤rÖ?|Nu{ë¯À©îÜõžÿa`´ª<òpª»š+ÿš$KHñYÁ®…­Y’œœ´×™s®T‚IÝsí$ìyh½Q6ÞóPh½±N!{q=Ѐ’,ž¸]`Íßz&æ$b“d9Ÿ‰GÄ$YÖ31iŒZ jH•–Š›Íµ—G1„{£4ò0‡'HAhh:‡'纛Ú£>™*Ž< ÍXˆò¬"r¤ØY  ‰¿0ÄÎ)ÎÎ¥ìV6ÙT·s+ƒ)6a¢çµîufô¥ž@=&r.Fpµ²…‰H1`½K˜ˆ”ˆŒá#Mèl#½Î”=×ÞH##šÓ7 †g½m`‰ü¼À±^XBÃó,¨@9ÏÜ$Ÿ^PR¦à€Û†Æð±Ð¤%0°Ä‚ 4žG*Ã7Õ]†$<#Ø;™QŒ¬©nÎE¹Éqœ²<‚ÜÓz ‘vAËGöžÊaAØÍ€IMz, Ñ58R<£EÂÌÙ†s¤x‰Ò4’Gó èH9çÅçQDïÉ ¶ ´™ùfœŒáÃól®Ý>œWC\"Êâ[‚œ·2ç,HÅ”‘ºÐ€S©´­ D Â:– •t ?×Þ)Ô ÅýjÅœý×ë®qòO´‡Ú…\{7 Õ0Nè'E£¶Y 猱¸À ¼ä8:IŒâÒ„!Å€^š0B±Ó¥ C ¤[„Tˆç°õ@HAøÒéƒ3ÜTËBËÅ +£`5C9¦’À1]ÐÛ£ÂÇý¢XéòØ‹k9v1œp*ò%ÇBãÐ\p  þ4$vn‰…µ v®¶N»2u¬6ej9ÇñTÃÈóŒù’daÝÌ™s¦”„Õ4aœ»±$8If8%™´‹f‡” I®ÎõTbç\ü œÂDœ] ¡la"NE¤Q|~"Á{êÜ‘Áô@ì±>N`“¾Ý¾ßà¬s·èpU–›°‚0nYœ›§Ëd¶e¤%Hé°+ÂøBX¾”AH1‹ïX_VÆI×@‹“m‰vŒ¶¬,ùÍ€”§Y"Ò.hã‡t*g“vAë<£@+GX8zR5`lqÖƒ$ŒRì°ùZ¡Eá¤ËS¼ûfÁ˜.~ðÁw$]™Uñ-IE§I[eÒñÙ$±Óê¢hÝYtŠsšÊ¸ØšWžÿBêNÒ¡`6×@L›= z-B€êM"R}Çõ ÖVÇ*ä)_ÉÚ Fóà$¬f¹åÀN&c©]où¤| ade2¢7 p¼pÑß8XÏ|MŸ”X´[{F«šhù`J-L)ˆÆýŽÅÚ Fçú #ùñR^V6”áù˜w³àW ~ÑùšGªÖ'G_™Ã/¬U0’>™Ó/¬½0*¶Í·ˆ5ù OîfÖÙØíeÛ¹D 8¥ºßUoàðŽÙß% ì©ónqÔj$7#$âPSåíµú`i’ÎCÜty¤~ÁûN¾8ÙóHw(Ió‘uÏm/À`˜&¿Üœ; ¯ùÀÞ™&®87@»‰êÜ`àVaT(ââ?*(”á”~ô>ç¥ß¿£ (G1ÌÃÄ#Ð|p-kÛDz$ŒÉnÚÞ– Á©ìH»°Èæ²#-Ai›ÌŒ´ j"ЂomHÀõ¤Á ÂÌ‚9¡Å: ‚!bkì´L°8Ýb¬D ŒÖ.Çç*ü„²ºy>€oŒ[Öõ Œ7>«¥Ï+ Ò^в1o«Ðš §"æÍHQPßÍ@™2/M„Ã2™ ˜ZJâÅÍ./YNV>x ƒ¾[»8Š“_ôj·8À¼•­ÎÊŠƒ>òm†‡8uÒ¾¥1IIì‰3y óO$ ÌõA²¼åžx« É·D3Þ×*”1fQ½@™¤H´ ¥Ççé ¢eß‚#›‹VgA» ±œ¬,“ÛD³æƒ/8 É„‰©“qîßp:WiæƒÖ#/# ÌõA’ι>ÀU‡r´ Ïë\à Ž“ɨÿx7Ú2V!í´»4µÓ¹y=SЦnð '¨‰”-ÁÊ[üƒ@UpŸ·¾eK£û¼$H”ð=|€ é‘ãä¿»ù ¹ÇòɶAŠƒfš‰“‘å;Û`âœÎ:Nç ¾!e$c`ó|€ ú yoÆ>ú‡Ý¨@´Ø'%)'&‘£•,JËi|6Ÿ¬œ;c!;å#Y«.ýHÖ*d9DBå½p¼à?‰K-[Còýû°\` V' U"͸_<\þè, GØ~üÐypbP…j‰ƒC4%½u$ ñ0b¾µY¨el*¿8˜e^§´­dw B Ê7•ˆZÜRz¤<ÐÚV1#áèN3Òad’š=åg"úŽÔÔ,M m˜¦å©äv³Æ¿$öS%VÚydð§Q8eaªJ&ñ ÃTuLq]œ%ʬДu\JZ7 :úc”ý‘VÆ"ìHœT^$âÀGmë‰Ý|#6¹ÚI«ÐÚs"Õg±§À €ýRÔ"•2­œn÷À^|l‰ÄÃÕ| °¬“‡‹ä•r}P‘2—êÝZ ks‘qr¢ÁŸ6Yâð/Y”ã³RÅñp ÖøÀÛÙÔâÔHZÆÉT½Ž¼©éC$Œ‰_ `‰Ä‚5,8õ~H«ÐËÑNÉ#N”‚ù-æ¬BŠáàõ È‚%Áëpð§q2U¯VÆY0òAvjeÁ°Ò>âÔÊ)ß –íÔ¼!­Bê#˜¯Î)—± Þ³s„ÁOÌ‚Tˆ»±Ž88Ç«IqP‡FãÄ{o|AóQ€’œ:O¥L¢±žÙ2‡ë¡]`ÈLgý`@Æk‚rbà‹&hæ ‚Û%H™)Å£aö Pœ$çVÄÌ”Áö¢ó'k¸ˆw2eL¥Ô%è)"ñ&ÉiTÁmˆª‰Z9êYp– %è’ŸøHÆJIO(pqès¢`’±éâNçdãI…æY$cë2SÆ7'Û‰‡Ì<*´æÔ¦8 Œ -;Å)nNeR8Å!.¿¨‚rÊÓ˜Ó…{aõ(ñ½"Ñîòctrbâ!ãø±G…ˆCæÕ‰c« H*´ê”é@ELÃ|8u:ûú¥µ”ITh/íµL£BkÁ«”‘Th®@*4Ã|xÅ: hˆ‹P„‰j¤;‹¤“uwT|à”Q ¨ë.Ÿ‰y¬B\úõœ¶QŒîåÄþV¡|Ø ¸U¨a¬Â"*åT(F…毎 ÍPhëM‡´ ý…#EbubZo:œk, é" âœ Øe.ç\˜dlž8Lè$c+«ÒTƹ !ðª4UÓàKáñ²›!SÕzo¸ V¡ÔØx•ªf¹´×HqÛ ~BññY¥Áf‡&±e§JëH4bîJÌÊV¡œR+™C hdl§Ô iz=rZ“;œ¾ÑÈØääÜ`Y  '+§h¬EûÁÙ ÉîP\ `ü?’/ ɦÉéY¤ƒ«,øI@#rú…d„µÝé>èG.ÌŒ¯hDÒ^(â[Uuã@𴀕‚I}ÑVûËK´R©b¼„kn©r¦ŠË%ÊY)pT5¬Nå} `úÄá"F¬$Pò¡ç¬J¥àó³~0¦‹jÌŒk^¨RæŒÐó¬Y-/!ÂJá«rÔsX¨RF¶j> ðh0ò£Ôˆ‡Q7¬Y¥Jbåö9«ônØŽ*K҃䃘ѯOÌ'F‘‹‘eA¾°€œ|¥}ð û£ã³Iâ#€¢¤áƒ?‘܈¡É³4êPnD J;b6ŽÌ܈‘Xôâ#åƒúâƒ#ÅA5¬5°CŠƒ6V!1kTf݈ÌÊ”’"m4ëÅîñ߿̇M.¦»ÈÉÁf.ºy†þª¾p$'q0YI1`“ƒaê±Þ €]œÆ}cDZ‚ôaÀ– Ë–Ò¸€jÔŠø1ƒº”¶/ín‰èwT³þ)a×m‹‰2aK @å6Rñøº @n¸ ÈÁAU 4ÌÁÁõ°ÏòQôú‘W“ØÆzVgùÀ”…Ö“2i/šŒ¿Ìc¾/ Î!ZRY`l&£6ÍU€^ÔE­Bkêa˜øL+M¬U?‰o«€“1>ˆ!>ól„µ]Â*7`«~ÊY°rb¿„UH»ñ‹ˆédú""@:$ß°NÁFO9 R$Š ˜Ú/DŽ8 „Ê»6‘öÁèè¢kA† †=ÊL:%Õ=ÊL:$§=HLª¤˜¼Ž%Á®‡Ôë`q0ꃼ~¶í1a‘Çß,€áÎZ÷-Àeå.{Œ—u2õ¶ÇxIù@C>FïîÜ¡àîÓeÑ’j$5•ö5¾IêÕTÚ×ø&)¨.Öð$Í‚Q¡äDXß”ôÁX˜ÐÒbËeÅ^‚¬8ÐþÁ‚`EÊÈ\ñ¿ƒÄʾéÛo+€»Ï½À70ûßD ݾÀ7‘ÃlaìùÙˆðH»ÐÖ\2p`m´)ña@G’×kâí‚bÈ“8ßy9y ØÄ\Þ.(61§òBبPµ‰¹yAØä¨qÒ’’b åMß[T*î²éûß €Ò{KÐêÓ0¸E0™M*ç8œ4Ï@\ݤ\d ¸ =ŠA[* ¤dG]´ÁOœ|ùí?‘Úã®÷,ÀÓÈH6:É[…<|' ©<Å&'' ËÁ¹('“ƒð¶:»>ôÉ«Aªb«`´¼œh 8 €¬n9„cÔˆÊk'{~š €, l¢Þµ #`qr²|`Ï«ž8þ~€¹ ¹ëk[ã‘»&6Ï~‚ŸH>0nZÑÀ«P$uß°¦ÍØó£dçW‘Üõ2™VXç‚qׇɴBª&î?±n’ë~"í…w=)#i0ÈÉUàœÆŸÝG%-^ ’ì÷„œpê5•ør¹Ó7øÕ†œVÁàWçDk$1ÇU©÷uó v“ë9áœÎjgc[ãœ;U­²9ËI'“Ö¶9ËI«¶xdõjåeŽï"¼U0æøêÕÊeŽ/W¡süÉYNZ….¾nÖswÔÀÞ»%l¦hÒÙ˜¤=8•*,^Ð#¥ ¬ÿû8ä\È%MôzÂa90yæ³4áx@e³ß<« ó°0Êá~2’Þ5À¨fþàŠCþ¸€uì%^  ¥ ÒK»@J«Æ“¼Š"eq?Õ¥ßA ÂÖ.¾N"êã«g=ÂID1ŒmЋs()Ú˜—"mDû³Ȯr‚Òµ‡¼I¾°ºð+ò†‰ö®ub>”CxóyÃIÉ1â°MåKVF²w­÷© Œ):´ÚxÇB,Fö25Y«Púæª&ͱæÀòA3º}žÎ@ìϨjÕÄ‹Ä>VÁä?y9±¿¤~ÙfÄúÔ$í…Ñ­_/íœUX>ø‡ýÑ#•EÉ©ÒDºoîÛ°Á½9—W°U° ¥Êóö ·R;šŠ<2·…Ti‹d[…©®CºÂpÄ<ÕuH'“T³`jš°,õÁàˆ»±õ#Ÿ:¤œ8ê× ögäƒs’–S'ùS>Gi9ù@C»(6”#þÍ‹žòÝ‚ßÔK§N=ëUaœÎ§N=©RUm[§ž”4¥À|_ˆ ÒóVn[%ž‰¦G|¢ 8UšÖtHdVëF|äZT˜)có\0äÍ8*/zù` q u²fJ•DþÔ} `tt)šF»×/(òÆéq/ÞFéîFXHû`l/訑Nq ’¬>pßaXV¸ï ³`Ô)9à ¼þ_¢Ì°ÿû¸W®,qÈÊQÎ9…Dšcü`ìê¢_ÂcèKzíÝ 7ùÀ:¥‘·ðg rý`,…£œ {â/©ï˜È Ÿƒ2œX"餜hÒ¼m=¬qÚÄI}äZðªÿ·ž7I»qêÿ-ÉVœTœH4õ½ ÄK’ Sß;x¤~ÙÔ÷N '¾’/qêD#_ªÍ©Tq×&v_çY$_ª~‰‡Œ€jÍŽ‘òéwé•VH4§iqŽ8(Ò:/¾èÿ½ûàÌ‚z2I‘hä ºžt85’ôðÁ¤þßVaäÔÊBÛˆ,´K‘t’oNNaTi› äS tWA „'iLð„“VAã `”7V#¹(·áÑœFM##¥õÐÎ9™Ô4’] ~"] p@¼‘e 8UšV½I9½óT <•(Iq`@ýS”¨÷[ïGê‹J=Qé’ÝâïF3# ¨ÆGZ×f0¸ØbI´ÓÙ¨| pÜ7ýàäƒ4úŽ"N°]z œûÄ”ò¥Ê©ÒRz©q’|0*”­…ÉÉÊ/ ^¡ ˜— W( Ü~‰ ñJö Àñ,4€Ã¬]! T_0¸Ââb çÜXáàÛ…B+p~–aÀ:9K`„+gEÀY‚bX\Éœ%0^\;…267qx‹«™“ˆì¥=¬w­B¡¸h\Ï›¤ÃpüÑçà⻿UϹEN Ä0N£sn‘“î$E,Æø"%ä„qÁmVBN6ŒöÐBI« ù‚"^о8àO2NÀô<qüWöЯëò’öП–¦ ©C0‰êÊ) ¦ ã åô±… ŽY8œ€¦q$ÌF-vÓô:µ Ô@t-À)Ž™JsqœâXL—&©a—x©0’â@ê A‘“%…‹¯p¸Ò üÄ9%¿ÀOœ Å7ôˆ´ŠÐ-h¾@ ÄaA\¬¤|ÐŒ‘Ï>˺@2ܨc¡Õ‰×«'4˜j¯´œ¸xÐFµH[v¬¹6ZNÔQ¡¸>ÀqÁ %Bñ9Ñ௎ûIÇÉ”úó Â5¶Ãé§ £{©]‘4ïV·­B9ùðHÉ@pÔ›ý ‚ónÖq{ÁFz•ÊÛ ¦Ò\ãó ȇWØØ €g.{?rJ]h7Y“ .y}#N…1ûÄdbÛÌŒœ:Ñ`›Žä€– K~xHF÷RÂä‡1òGž2P5øÉèÂ¥Kûn s"¦Gº^tHq áRD­$B¾z©rÒA´—þ´'9‡RLúÁHÞVD­$B>óÁz[¬”ÁÉ©ˆêY€‹l7©+Þ^0ÅöŸå îl´—~ÉN}‘Ѝ[£åD ròqâ@ÂK›·R†ÉocßWA8<]SSœ¬ltx18=;ŒnœÕ¹7ò•doœL);ubÒámB>RF²7fñÚV!_5 ”X¥M=Rׂï@=ÒÚËódÂ]£Zó~3’n’.·”xɈV< pwÉF´¢Kss‹e(¸–âé:; šs„C;X}P™Y*É_ nø IÚ¹0õH£w„Ó# ¾@EÔz¡£9ŒjÝ»gŒ*ö+çlÔjqàÜêâr⤂óv£ ©àò’ר‘“‰‚Ó5MIZ…fDlk¢”´笂<ŸÙ€¤‹s”°@sçuï)¾PòœUH1](yÒ“{¬|€Ã"Ú*,N>Hb«àÝ'ÂVaNK0o4Óœ–ðn4qº´â[ëÚ^(¸ž¸š¬2A÷E“µ'ŽÒÎÃëœIÎì€käBÁuÒŒ‚oð@ºPpœ%HæÅÊÉñÀZ§ ¢¿€Ð:eX¨ä‹¬Spñ¥]<`2ØoÂoç„ç,hã«ç€Ç}ì‚¶˜ 81`d/' é8á"ë”1âê¡çˆÌ»¿Ã@hõ‚²Š¢tA;Šmñ:eˆ7êþ,k3N˜kAªÂº!`ÀZ¤H´kìS›—S OškAR±m28’j¿Àˆ$ æZ€£b“ IòAo¾8Ý9ƒˆ»üD’Á´„C;M›wq—“|`£{]k¦õ‹¦ kó«Â‹D#‹õ,ÀNtd$] î2B+)_`D’¦ÙîíÜ*9¢ÑÈÓºF£b«–’x>¨cR^×f ´MÍø¾ ¨ˆZ›s¤b{i4“nrM Ô¦ú>@‚Ð6A&Év:ç >³ ôÄó=íP@ΫÊ$B;AhœÝhDh1y·80ÜèÞ7ô‡‰FC[œ€…€…çÓ „V.5PNµ®¥ù«€#Ä«/¢TRFj/¢TÎ=’AÀ6S¥i7%LïöÌ8©Z pFÕªÞ þäZë&ø(z½3þԎؼÎ5Á ?é"Èädå¤õÈâtm85PS ïNפ!3zÊ5¼Ä¹Ñ¼àO(´‹ìýû°lt)a’~ÿØÍHÁµ  $L .µFåæX«4b Wƒçß *ašn|KC&Á—EiA˜Í€¨`mR)ÿuÛ¿ãÀGe‰2“b üj3ß @D-~0 ÑO‹„ìf€âÀGFÓœhÛÐø§N%ÊÛ6À©0Æ­DI à >âZ ê[TaÔÃ#•e£$Ú@<ÒfŒãT>x·U€ÅÁ8–ÓbIfùÀ¢Kòͤd¨"•v*|Ý⃳âÄõ|”}à ?M6‹‰íÓ^ üéTãd Ʊ!N»«Ó |úTYº­B2`Z˜¤¬,q¬‚NÒjR>É,€A>Ôàs^†tm1¶ÁQÛ˜!e$± e.X>ȲÁ7 ~•(OÀk&×T×!ÕÀò#>2ŽÎât®0~‰É¶¬U05Î0¼I=“´¸°h˜2í°ƒV¡Ø+ŠaÔy§³ã›IϳÇŒw¨9g#ŽÌøfÒó:· 6× ëUAÊf:!ÕHªºY>HùÀ@h'Ó Í‚K™–”‘4µ­HzóÁw §kPäÆI½ž ©ÆéûÅàšxOÍZ‡[²™ª}0ê 1òîµÛ*äXx¯½Á|Ðz£Ý¤Q¸ÀÆ%R4UÖÉœ|‹Ä 䟒Øj¦íãŸjkÌžRw-€A/ÒˆD)¹ÐÎÆÉ€åùƒëG^d¬Œ”Ë!Kï†T'¦ÜŽN}áH%Ù}á€ë1ÑÿÎxù¥únð¡ï ™ ífîÉ÷®S #§ÀÊÍܤȡ£<”‡°ª á,Ñ…2'2©ØVŸ$”1‘É„¶Ú$¡Ìî™tÈó$àx ÆÃ4"͆l¥ -5㓪´DdŠgwÀID/9NR"ú"ÇIÊD_ä8I1Æ´Å0o«ð‡La]å eVjr±ÕIZN+ Ö߻ù á¾°ÚT/FRB2.¶ ý!ÅA~A„Ä„fò{ë›´'׊SžÅŽ#¦)ÏÚ µ]à#¡LoF›U8!$4ãZÑHÜ &9æY€Ëʇt-ø ”$=%I•º„¶¥çn>€Aâ xÃɉ¹$Çn«ÐpÈäTë89N{h^µÞ‘\l}]"“vcj›á‚vW?øàiZW¼ ,)æƒ)ϺÅ4QÔÅòÁŠÄ*[n‹‰‡ô,2âe?BG‚½8ÀAÀ Œ¸¸VnÀ &vUœ¾‰ èY H(`r:WœÀ‹Ê `+šl×8D Æéì>0Â"1Uß8Pj»±M¾ZR­0IÒâÝd(й?ÀLÍàOkd„S'N( ÷Ä‚ãà /é±7Ô úÃÉHÆ·¡?Bâb G^•ÖPÀäTª@1ÌâûB³a…æUª \|ö¤ú`ñúÃdåâm/¼@hJÁõ£/‘è÷ïßWŽRz—‡°ëTCÁMe‹Û ‚b‡¢r¦U^„tÊEËtkÒq–ÀÔ0OJ>ÎŒ.Åõ¬6,õ¢äã$¢šŽ }VJ¬75ÌsNF9|p/B:¥@›鮧5ΘޖH9΄T=kxA!9Ça í‚"röЪ„Ê+Ê Vãb6PšŽ8è‹W€&Ò]¯)L¥»·”x»Ñ°á'§.ˆ9ùÀ°Œ¯ž&¤H´Öó²€Ô$ÕK‘-øàÀGÆGçZðÉGw^˜2R7HhvN¦`Õó„S£I $”eAòW*ÇéF"N‚Ð$Ç–%ËR¶ #)#Mšgð‚¼YƒþŒ)%ïâ #Ahѹ9À‚Ж&©_˜°´ØôI«0*” Ì%­Â¨P\ €¬rÔß3R°6?廿Á.³ãÃ$ÕÊF>ÐÅåÎ‰Ä ó,JÌ„-H:¦$i]lò, L†19•jG‚ÐbÓ‹Ä4*”¼õ9uâdƒ“Å"NÊÙ€xÞk‚°äâ‘^øŠIv'+ãhL‚P¬ ‹DbkÕɉÊSãE¢´»S'XôêDóQЋŽeA¹8ùH«0þlÛ v§šb?rj÷Ê“dø -îfÒ*Èð¡yÀ ©»d œè”ë& )Ú"|àÄÁ –9ñCMôþ}à›óÎ)L™Ù3@ûÓ€„Ó$-µÎ'ïÌAèÈë&3sÄÒ‡–>ô»8‚T½xÈÞwª*È‚[+™‚ Ï‚S-´mXå"Bã$¢jXD™2Úßò¡uI«p<`(»Ê¦E½5Jë4b0”Öh¹ØP~ÄIÆÑ$¿NøiŒ4/Ž Ò*ˆÉa.Ž Ò*0ü”圓…ë”%Å˽¤gqŠãÀ #)óX{c}Xƒ`eãB ±ð|`’ ÍiRp»±ê#í…jq°¦æH>hÁD —~ˆDîÓ^hHwzþàƒ „¡ùù #yÀ²skãý‰íbg|÷̃©»àPñf圣a=bXü¤Ë£4²ríx«^܈œœ(£JÛÐN­€í«‘jy^'ã"јJÇó54”#æ&v™¨öÈ«”ç{ä ¹ñjå ;¡7™Ã@5™È–Æ çt¶WÍ ;!ù • v’9|pY| މ¬]XïÀòA±Uðxp¬±JÖ½̵‰-}°É¶Á?œ*m‚À< °<`'üˆÓ7¦¨,ˆ0ø‘Yàõ ?‘(ׂäÜœxœ|’A°¼ž ö"· E)¼[Ýѱ±-¨É·¶ /Z¡È¶ÿû@Ý¥K³P抿P¡•ι×?Tó¼Â*œ)B‹^ëÃX}˜/2¸Âa"{Q¡’<óEW(SÕ9øÀî ŒñÄ[Ø.øÂÅV(ãÄÆ6r^Êt@3¬n½PèZ½¨Ð8èÃãÙxlÃïH-ÈUH4\á’-”Ah Ù-=Ï#܉üW(ƒ{_qp¤H]â¦á"fïk”˜“b2mØ5J\(ä¯î ¿}FNyhtÛ5¢Ñ)'‚ÄkDƒãÓª—Å5Ó9“Üc ú¢Yá,A2vΞ1Ð4Á-´G ÀND«Op<É€rÍp‚°è¥ÔÞ9ʰÆV;¥A«Ý7Wœ[M´†V;‡&8\ µ2Çß —_ˆgA z$;ik0»ƒsp˜“ ¾*Å“|0jwp¤œR?ÄN«Þ,X8›ÎéÑÒü)b]2gTš< ˜ j̆Ë/Ax©Ø?µ(n8¥‰iÕלŸÕ.K>’D§<«@¢b×À)™æÇpF%|ð µê¥â¹`Zõ®? TÉC‘û…*¹“Èšû‘ÒB|±.-Ê1ê¤Øiù@ìþ²-º'Ò½‰ŒUÈ­7žt¬‚¬×„NyÛ#"ô,ÀaÒˆ0¬›tNµ.yDbw.Op³ yÔŹ=>ð8Pïú§Ó>z¦žç.'áILʺÉM1i§Ð~I«Ð%#±U(ÌŽeŸ€#’1]³ œUP‰×lB'‰¦‹”“‘Tà "ìaÅ,X˜Ε®Mˆ´S‘S­k6ZÐ( 7!RÆ*xï[æƒbÓKJS#­ ‘¨Ê{d¬ý¢‡%åƒÖ.Š\Ò*tù°Hì¶ K‰‘Ó3¥`¹2mŒ&؃QY‚œœ“iΨxq“ŸKãt÷ÑgÁ‡HNÉØœŽ×¹B§d\àl/d›QñúF܌ʨ•O>8N¿°¦d'+_(´)lpeˆÜ¾Ó>tÉ8ܾÿ+nD%,‡wp—'¦U?{%Ò HÞ<Á7àÔ…ØTß܈JØLÉ7 ª’Ñ*jš ”7Ü„ÈÉ”|ó,–Í”|ó@ÃqE»ÀN¢:2áº.¸CÁÉ–Š¿P€0¼Uš¿+ÍqUæ7À 0ºîY˜“òÀ²jÒ>4²j×Ì>» sÒ%m¢fÒ‰¥|ðAÂȰVAû `‘˜ÊÒ!&FÔ|ŽJÝ"ñ7$Qs§2€«Ñã–Ði=J4 À8ùImj´³¹Ï9vRqûÇdÅä‹×«ÂÁ€€“΀լL_rm´2YLÜÉDA¯‰Y¸«€#jù@çó*©W£A óy•T«‹ÊVª'ÕÊ¢}«´“jeƒ Ucä|Ä,Yȳ·JK;M×õì*×êÏ8jØQÄ2¥$H«0i’—BùÍ‚ ¥Iöžµ~ƒàÌ‚)fAªÒŒ&9zOk@ ̶Á¤~A“QE;µ2šF,î+Ò †ñW—JÞJõ¤î}DÀŲ"±~ˆÜ*4ÙTÖÙhŠkAG5g§kÃANŒ¨Ù³'ËkDÍâôá g»qÊë*Õ/êxÖ‹û„é;>ÀAФ¦ÄédJiø@½Þ‚«¾°)å´Á¤~!•‘‘š×½ÿ ³ né\XTÑ^÷þà ݄ªSüïö}Ü»ûÎvI8¬'å(-ÒÍ ‰Ãó @âðÎ>A(Ę*›$—Ú6IîÍXuh„€«( Ùn³Ïš@(#¹mF›¨¹¼Hœ¨Ñ7ö°dt/)†ç F™Û‘-t#…l󾂓Šû þÄ Bc£s]€ã~ Å÷ÎxšWQÈ) ¢é»üòám˜p˜—Œ$÷„€‘| Æ‹8•/Y‘hzÄir;Ð,¨›ŽUŸQî z÷Á¯@>¼ bõ(ctÍêpêÃX‡É)‘q9±©oŽ9¾‡#Æ9EÌʉÄësŠ˜TL&6Ï䨨JiV¦N&¶ /'[3â#Ú¹0™ØZ“gÏebËEˆ>°Gf ¡ñ®ŽŒ‰Í³ö¨4yÐzsºÖ0šÙ†y‘XÊÑ–Øë¯t߸½PM|Á£…Âo!íRH'u®Ò x39ƒIŠ1±µ4™ZI×xj\/)6^¥ªÁÙ9aÀ;½UÀ1/íœëæTªª—B:)+«1­HÕÄ‹ÄT 1VÚ®fÙ¼G7à¸àúæ="ƒ“Ð:¯J3.8×Ü^¨Ñ_Ü [>ˆ^×ËÊ=nÞ#VVîmó‘"qBÀÜ»õ†äAs_8`À 䃉“mé@²,HÁDÜ*K©÷¾€“‡6–Rï}áôÁÏ?¾ýíø×_¾U¹Îó:l¶¿úó·Q_>þîÿÿòw[>ôü›õ¿û{_ÿéÿ÷Ëÿù¿üëøâ_ýÝÏòË¿ü‡ýwýå·;íØ†ÿç·øÇñ{üóøÕþfüûOßâú½ì¹Ê~ÌoöÿôçñÏýø cêG‘lŸ p‰}ý:î^X7~æí—o@©ùçç¡Bó ¼óöyܔÖsþwœÈü)0þöÛÃ0œcí»ìÛçaúî²A;_?"NÁò„m½­=R¿r5Wo¿= Çm¼YϤò×ãëo¿ýO¡Åé endstream endobj 103 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 104 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 595.28000 841.89000] /BleedBox [0.00000 0.00000 595.28000 841.89000] /CropBox [0 0 595.28000 841.89000] /TrimBox [0.00000 0.00000 595.28000 841.89000] /ArtBox [0.00000 0.00000 595.28000 841.89000] /Rotate 0 /Contents 102 0 R /Group 103 0 R >> endobj 105 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 106 0 obj <> endobj 107 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 595.28000 841.89000 ] /Group 105 0 R /Length 9 /Filter /FlateDecode >> stream xÚ endstream endobj 108 0 obj << /Length 23733 /Filter /FlateDecode >> stream xÚŽM¯v¹Ž6¯_qDz-‘”DA€ºUuxfçÙˆƒ†;†ÿ~DI[Ï{öæ3år£»Ë·OÍ£’"×úï¿å¿¥ñ_ã^Éþßùßÿé_ûï¿åýÿùŸ¿ý‡ÿ8~ê?ÿ–þöoÇÿËù·¸îŸÐT.íç_üû?û7ÿøoùÿ?Cû'þùÿ6~·Vjö¦ÂóKÉû÷ÿÇ×ÿÓÿø/ã{ÿüÇ’ùÙ‡©ÿk¿šPîûç¿þö¿ýïûç¿|½^µ±òãëôõÌK«ôÇÓø!Ê¢??ŸRÔçÇâk—òøë{Ðçy,~ezüõõ×Û¥£Î õy½j/œ~>× ÏK‹ß³<þúôùbŸ/ô¸÷Y£¼Nö>ævª^‰{zº¨½oãWsÉÏÏKÔçõjIûãÞç߃>¯ãè)i-~§«eÒº÷½¿¾6züõQ/§áu‹Ôòº9ÃG©%ÐáËyœ¾rQŽ/Sö¾·ÿ$cýµ(çÈœ/IÄϸ×¾߼裡Œ3‹ŒŸJ¯´#ìû…Çß/¯¬+lÿëüéü8ù¯°ï÷/’aço¤Þ÷KÔ÷[¹$·ÞPû¯ãw÷¬0ÿßíû½>³¸ï«÷ý°¿ŸÒðÿåqþòŸQßÏÃÿK£ºÿãµåüzô†Å¢ä}?ìþÕ«iË”ÿõkd?/ÿ•~×+Óxø£J>2âO—N ×ÉØÿž*þ’Øþ©÷ûa÷oä™Ç¿‡úûÛð¿UTPûßÄýûÃ*¾jßðÇßÿ÷°ï÷G£gÅ;Îÿõñ÷Û@ÕœSº”Þï û~u¿ÿWØ÷‡ÿÓÊÏúCÔýç<â_M¯ÚcØþ]Êü,>†ù?æáëûýUwg±ïKBÝëßžåϰú—ñ÷·¬ û~¹J*Ïøwÿ‹ºØù¯â}?,ÿå6üÿ¸þŠÿÜÚU2WTýƒ-ÿÐVPí~îcýkfTý[FüÏï¶kXïK,þ;}רý—ÌWzÅŸ°¶sçßi}†ýý$½ÛoaþOØÖ¿* ô \½¿?v0òuúöý~•šJAÿ2ö¿Ô* ú«Ôt'i°ï׫;ýŸ(ÿÀnÖ‡Œ?þíöãóÝÏîöóÏÿ#ï†ùû ð¶‚ÿÏ¿ÿ÷HÄÛ þ?¾–ýÊø!žÅwÌú[ñ7§þüûÃnÿp¾öö|ýýQÙŸ5Ÿ µ×ýÚk>[ösýâNåyÿòÿVüï‡AÏÆ¯±ÿuþ¢Ö_ëø>Xø3ìÏâ#æþ÷~ƒO0÷/'ºÑ7˜8áo þ¹9‹k@-ë å`öÙ’ûÓ BÐdü[å…ã0hi¬@o v ¤]ã!^úsÂPPE®<~ wG&b— À¶ ™³:„mœ: ! ˜àY ¹âΗ´ …EÃ^ýˆ£Ñ¥yƒ0[@#{„EC¿;Ë„ƒƒ^äÙV@¹¢¢!Ïz„!²ÉéúNŠSØ-á8— Iÿ¹ˆ Sª¹¡bYQÖ+ †mÁÇÙ) Æ9¢ñ2/–? ómÄÍõõ0‰† GäÕF5æ TÝ-ˆ‹}¬@)òòaà˜d+PÞáXÂÐQ¶a*¦|f‚å„<>›{'Â` ú9ŒêðÝ!ÇDCùÀncË鑃¶ Œ çe†’*Õ7 „Á´ÆË¨ßl I}§åqg  Ú;)CJê8唆5 ª5RóÔQ÷ê×®Ltu‹F¸~í8„ÚÞ®8 ®”‹k@^„è²§!¡&0¢÷óqüHtVÍý¬0h\Ëý~`>~f0ÇÕý~X*(ùâõ"Ĭ¿èÍ…ùûK¾)²—-z†—¬FÕÆWßO‘DMó9Œ9mļ4§E1÷_“ûý°ó¯r%™Ó˜ó?Rà–ç´*&þä4~Jô€[$_“g@X§züîF„K 0âc)“Â8k¨]¬sf™!C3±²pk àz³Vaü`¾ÆsøˆÅAfºk@\¢Ô:‡IòÈ…6x‘1Ô]õ~? ;„͸«f=tZ¿dÕc@ÏQÐv65Ãè£Zmåu k˜c $KFm̃œèÊy6ˆ~G¡4 N¶4Щ¼]qpLFF´hîA+0òñD¯„rÅ·UÑ/©þçãq[3ÚY.^,‹3J2~õbY,˜Yšƒ+˜A’ƒ+ ðòM´„Yÿ©n7qS?ÿþ¨TèÆMaîŸ}u½G1ûoúzë-T 3,†ÛZO¡A nk½„ dš±µËFˆuÿ ·UÔ60ûo¸-&!Ôúwƒk̇hàöMåÏû~ÑQq ˆëSÛïnD° `ÂÆLé •Nؘc@ܱAžTó2À”­Mœ§ÖÆ dƒÏ¯2Llj­8ï0ðdI®q ©Òn½¹Ÿü# µÕÜ[w ›Ñ}Í.Ð!4ùáùµ[0É-@~ÀDwÈyŽ·@¦%oâÀÉü÷ +$Û‚ÖVÈà[`ʃɌ|€'¿HÐ{‹»q/òå Ä1-ñáīӒN°æaN“øp‚%0±€*ßøUÐ-hfÀ»6šR“ ,è C¨¦AIWîé¹â‘hz×Çâå#nFÌëxêÐ9NvÓØ©U¢a: jŒ'dÒ›þs ·æ­@œë- Ú‚‘x‡0,Ó’Ñ'œífßmA=웢ÉÂõ°obÂ1·Ã¾ Ú‚ ¤¯‰PÏsÎ P×€¸-0YÀ‘•3*!‘4&•ÞÛ0ä^¶˜¬ü˜„d*ó¥ÉÊ_ œs&Í—• ¬P)<¶ ´w×0l ,/îIÐ-(GS bòåÕ²‰Ι>^ÊïhgÀx,ÊŒ+¬ãw…$,ä^…ˆD_íX‰¾ A›D_ž¸ÍŸËVžÒñý^^ë_‘sÎß7J¤Wµ‚çúÿθV!S­Æ3Ìß?|Þf|«éþ*7r°BÆZr¿Çxv$"+7ÞÓÍ8†9ÿÖ©]Œcÿ“ßdO˜ÈùPaN`¶¸˜†0!È[[&²bH^ÆChCÇ*†îŠÛ%Iéé…鮨5 2"Fw%D°0»c@ á—(5Ø54µÜ%U‰2 º×0:Vý-ˆƒŽkHYŸ± Çl„_ <‡2@oàè ôr§0 ¥rƒç*„]‚rv ˆCí˜dm×â c6N·hï*„]b2Ž-Ú»Šc[´w -ŒZ~eÅqLø¢®qÀ©bðÁV*)5ʳœÞ¥‘8¾-#mïÚD tÌ Ñv 5ßà9аFižÕyL>`б_ĤdÔÇÓ¬LJxL8æÄ®œktJDa˜•1‹1|€®¡õ‰S²&%&åšoì è û©ÎaJÐ-°>qy¿â$srÌ1 Àj¨ | dëWç9‡Ó3„‰†”Ä5 G2~¹„¡%r½QS˜”l|ðž½  zå4'z1·€8 ¦>&›`윧]CV߀8­NƒîM8L4¤B7ft I¿+˜wiuJ™•qqž™%)*%3©Ìñ6èvM+Qc˜'ì3ò„d¯Àçùxº+HºfH'Ô-0¥J±"1êLÊ1¡wF¶#oÆ/Ì-`–›ñ t D܈CÎIõW ŽrŒ/iúΠ쥻Ä!hãdA[`ÚÝ ¼ºí€ž„áÆ²¿=”rlŠ3€¶ ‹o@Ø-0$}— ìÛ ´WË*ì]ð ç&!ù…ó ㊅F0§JÆøÅ†EÂÄà›ŒË ¸–[çqŒX`-¨œpüßÇLZzŒ+6Ò5oâsuøì©ÂQ³-˜´S ôÎHHòâ¸âƒìïÁv0ë[ÇPM´ñý†0¿1Þ, ÇÌqŒõ·û÷ø~àÕhÖv xzœÿ>kä£WÝÇúOY­.õJ‹ó²wxÐû~Øý«z>£îŸœï‡‡ÕôjË+ü¤?âÀƒ-Íþfÿ{ÿlO`ö?§ì‡IÍ7 ŒîÊB°N5 “u.•‚ËÌ}¡°šØx…ÞÐ5Ð |Xç@×pÄa× d[Ÿ}À‘¤oÅyˆ„á'›­Àœ©î Ò·qrï;„ZÀôìع"?J‰? ø3Ì[YêÚ©–¹`KOh¤o9†ÉÈôÃ[3a¢Ÿü†×°L)Ð ˜<½_¤o¶Ô!$°“sÍ1 º¶qS˜Â„q®¹„á'[ò cŸlõF޶À’…`à=–örDaÐ5•[®ó:6Ö9×€8ðžQžÍéFP8þ(¦bÞ†“ön< ^Š)Ù**‚:œ 5$RP9á”l]|[˜h8iïúûm_‡°¿ŸçqRI·P!ư±ÊbK7hç§a‡ÐXfŒé•° ”Ï0?ÐF> ¹ Ìzp‰4aò Þ[hL»ÞÀ{ºd¢~®ÀŸa Û|•¥“„ñ„’ô¢%”„‰’îêݳ ,5º«)ájš|€ßh ¨ºg î²ð~šÅ #%ëôŽP$ëÜÒjÂBW_t kXͧgg€ºÄ­@ Éâ[À(v.gÌœ÷UWNþóûap˜÷ÙÂÞ{¦R¯DS›´|ÈÏ@GËÍþ†2@/+’ l Ä T³[òXHåÖ…¡z qÒ­mñ¯‚¶ æ›þê±Q͂ھPâp|›ëa@T•Òˆÿ*™Sà±9o£˜KP±tEò9§F³`܃P¼v!ŒÍØÜ5hl|®aÅÒIÇ·,h$¦ÐF‹`i‚ ©4…%¹V¯·eìÂpŠ‚ó‰uì‚4Â¥g¹ñåx¬F" = õdë ¦xXPyù6¦å•{ýbAذW:T@ 5 lˆ'Q림O““)ÇA*ŒŒgi¨=,ø#PÕu‹¨|"΢á@í‚)Ý/Ô]°ülA÷-Ô–þ Ð»zÇPgyJB° …¬«]*\\°¶6'`†2vž±³UR…³ÉZë<%ïA9õ±-«ÂÞŸ†Šü8‡QÅd= Á¼VŽ–ÐOâÜ¡­ÀœÀyGS÷Å€0^œ|32< ˆ£¥ÿ0©‘P'Ǫ[†ÇÚzYßn ¬¡Q¾µÅ4½&Òîq4°£â­@$1BZ¼<-èq•ºv 3ÐÚÅ køØ‚0n†aÀ‚úQ7r–Î  z½Úx¤¾ƒQ ì)Y4|_ƒßCù8XJ’)}Ù…8††/ç ®§Dýy„lzîÄ),5°Ñ`Ü]°ÄDåšj,™ÎVzçfaˆ§lš4Ç¡@/„ñJÿbAœÌÒÈŽúœÈBùDã ¤É$ ŠÍÙ²ƒ‘1ÎôC[J(}Иü`òElÔ‹€´ŽŒ³ƒrZ`ªk“Ì'cCáža•IÙ@­1,2YGgS§<,ëjIºU·@&’v‰dɸ]°!Å¥»ŠÎT*Ú‚J¾q»`ÊF½€Ê¸í°èü´ ŽÉÈtxÊ’?v!®”ÝýÛØOá/k6¶=2”œ<9·³–\q…ñ»] âÖÀä— (2±é1nÜ &G2¦Íãz¹2÷›Èôn4¤Íäzµ±I,*P-‹øÄÑ™Cþ$`aÛªãBK—Í«à*ÛÜLÇy7¦¸Á±t0'˜W«©àxïÆ°»`¨X¯ÝwûâåÊ&†”—ªßmK.ìƒtOÒbâ‚úÄÍqr¹ÊæÅdªãµòÅ‚0RƒñYõšÎqwAš¿9lF†’÷Lµ€T‘Fdr»}q ¾ {¯¶°5 %ï͔ñˆÂûw”‘ßÿ+œÜ¡`”!Šo@\Ë[ý°?ô‰oä;7ûa@œPåøÕK ï±`ÌÚV_s ¥ù[ÖV)G! t ªA Vsªi”­~Bmµa@-İh¦Ò•é}£rs¥[¦ Œ>:Q `ÔM¨¬§ »†}¬€ð¾ ˆ“ªÒ+IU…ÝÃ9cÔ‹°‹ø‹X(3zGÄ0ª›‰Æ¤ZpW!ó¢þCD™?EK s±5X5lÐ]0íȶfˆ1QijVÉ’¬Aœj–iFMRjP†ž-7Øè+Ð]ÐzG˜9à|# FFØ&êsí¥Ö¡`4sR÷-ˆÃý»Å’ŽÕŒ ¹µ£PçÀ˜Ÿ6Ú´ ùªÇI”xý*P®L"_,èHÄ›k“¡ü¢ ŠÎ&!µœPþ µKš“+J(™z 9±‘5”rq²õ8\°õ¸ÉËÖ9RĨ/>>Ìp6ý–¢ï“ø÷0 ê鲌ÐXƒìdiqø/ö^;Ìðì󗆋lÜSžqRBÖç÷ÎA6šM=!#_,\¾Ü…8äQqA½÷B˜?¨Ã#mòtÐ]hä[(©ÔÒ™´¤¦¶Ï}ìžlÆdëÜÇ.ì¹bÌH:Š6 0QxÝËTÚ͹Œ]Ђ‹Î&íD{¶SÝÑyÏVcî‚ðˆÎmªM‚|¢ðØ™r“¨Û(rõ, ç•Çÿý*Úœ~cØ9(cª> [ƒ:vK)°¶·¡ð\ Œ€íÇ”@”Þ _¼47~?Ž=œWÃßt߀@¾äÃ…†YR߀¸٨ȦìécjœÆÒ‚à t ˜ 2¦RÈß‚°ê•5»7æV:|x ÃØ]ƒLLÜTžy¦‡‚ s ´®&(œH­@%áøê~}†øHùp5'á8Kþ䊲ýî"³ŠÝ@œ„åË.P _ÚµÐIYAãÅœZ1•©D ¹”Kö;t‹!ÀR®° «!À¼7R˜?hä[‡ŠµÏçšã–Œ ™"g菉ƕFu΢su’ä°jAîz×0>q2nî)LŽFIÿV1ŽÏêšWi …¥|×@k`Oý„‰LÄå°a’õ_qx˜Épx7 ®A¦Ù©|ÔÆ@kP>jc “hŒ€ƒò‰¦2µqx *jÕ/kÐ9 ] Âf ‹¨ãùŠ«_˜Î•‘_1î6v[ƒÅš ºýÃÚÓ¹ÚXD…àÃé¨+n„|”øõý0 ûÕk„P1„†ƒ[Ù™B¦¦ˆŽ4¯bI Æå½a,þý±a.¡QÒê¯)fNeÂÞféH! ð"_ ø=PœØPX°kX‡'ÜÙ9æ àAò;„•P'qõö0¨­õó„Æ˜«&Ø!4Ò¡MȇقñF½ùø0[0.ÀáãÃìANõ ÿeêF´ú»˜ˆœmB¤¯þ.&$g©TÌgc=âÊ Ê™å‹qêÈù A·QÊ%vpçÀô™uiÊ`œòÔg–Åô:‰¦~èYša!³™ÂˆÍp€å™âÉúQ€T Kj» «ŠŽñH”>Lp ášhÌ͆ZÓg.^¦žј7 OA¼ŒõjÝ{.…aŸŒwÉ[ƒ@êþå„!ø£A ªžI:˜XÐ._R½GG*Dóbí‚é/VçåÇQjÌ–(âÎÁd†ÔÒ|И È4јU2.2é¸JÀb2éG“¥‘qOm$"(6võ-ˆããKãÝØ×¡bøø²ñs.&yqSšhs ªqÜ”¦‚ÉÀL•©,$h˜óreþèpb"ËXƒÍµÚSÉÞ*˜Ÿ8U²] JÒ´H;'Xdâªmº Ð9hzP7 ]P9¨Ð.ô|P7˜l}D„‹ØËÒr$Ðë/"›oAê€dì‚Ó_ë3°{ý…84&óUZÍ8äƒHº¨x´0,¤Ô«““¡„u< oW’S»$)½3¢¨ ;2z¯Á°žº¸ýÖCEåe#(ûk–˜±qÑQÎ0”娑þ´ YÆ.îwŒ*x1ç£vÁtqs>Ê#5Û…ÉÙý° ÛLtV±QqÁz‹iÖAIzîe¬ÁäŒY0`žqØ£ñY‹9ÝŒ€ ¸@yd(2'†@þ€¨ÝXDO$ç Ï™!Ô9tcA•«‰~ZxLÔI4ôÓÂáÁJ7Õ· ñaÑyq¢¼rUß‚0ĵrcÐç GbÚœ]zXðg¤.îâ¢CÝFc9Y ` “ȉ| â*©¦Zßɉ )” Ϋ¤H&¸¥ ò‰l|½Kuåd±+€òÓÅÍ‹_µ ’n…fPkɸèÔë¬Äñ˜î×Z‰c~*ÆA6I&Pw¡²¿q(¸fÚÀ“çµ ¦Ì+“Iµ M} ™àL'{òùƒªy¬êŸƒ@¾CNÂP£Q’± M6}WžLpÔ‡y¤·N6(W6e^µ†/®ånl¹žº¸ã$.ÒP·O$ß:Ù N—Hó-ˆ;‰#?ØÑ(`ʼä½Ã€ÕØð¼ÆwØI¬†u:ßaþàƒÃ˨C˘ùvSæƒ? ˆ“3H·$ècâ*‰·$èÀ°çß’ 3†IN·$ècþŠc£Û’ ²‚~K‚‚®¡u»w<Ìl~=R 3PÕ_0?`d'kDä±QÏuã:Y" ChT'‹xèa@ .mjs†eÀ€…‰9ñeÈqÎé&zXð@ ^Z*cÀ‘@¼â¤…qÓœÆgkê°˜¹“¸0![£Ý³ ú#ý‹ ƒëkD nÍ€|b» kH ˆ·Å@AÏD£bÛb ¨»`EdÓÚz­ÁßC©ØÖ¬è$šä­a ¡%œ@<ׂ8(àˆºæE0·‘ l°diQk``Êïè>Êê[·6.¡NÕ n 8}Yƒ„Y@_Ö ¬xeà u’; vÁèj] â ¡Ä`–fâÀš¨1nLôͳ ltµKUÈÕa®!¶Ÿ»G×| r¤,í ƒÃ¼\§,mY#d˜ÈÄÉäHã¼2Û0ã"Bùƒ_¨Ø@u¤EÅæU²þf( &2±µúÝöâ_8$¨»õ 2Cˆ&°zUœ)Œ»™ ]øŒˆÉ‘~#b"Ó/²´ éYZ˜í€Ð@>±)NPl””¾XF¬„†ñH’LwÑ,¿›RÎ¸Ž³ÉÒnybP5O(}± yÁ·80ÈU â@hFˆ·tè@/×Iˆg Ú¸s t©&­0ôƒ³`œœW.ý¦§e(bYš‡A‰óHµ±à¯p@&C¡Õÿ~\§ïCLÈt¸©ó.âê‡ònH*cæ¦L7›àÀ°y¬ÀâÍÂ)Üœ? ˆŠE% ¤ hëžÔ =+œ@`ñ㕘6Y4æZ!=§·# +ÙŒ7âÍL‰9=bHŒè¦O¼&#2`¬„®qñØX ÷læ"fëqse†9ÃLƇ—ò+rÚ¿5ò"X^:å‹“™Ç!Rå#Ê :‰òe+á-*6ºJ_,ó‰õ# z"/"—Rpw¡Ù9èüòqBÕj¸Ÿ5ÏŽIO²ö#ŠÉOrÿˆqbN"kñfä+á͇ñÊÆ x³a²4ãô-ÃýuÙÕ)H #߈ÐEaq¸4Lt&1)ÌÄ©|˜Ø~žÄ?ùn4Gš=î%*Þ#j4?hŸ.;È+«œþ.ªŽšNW ´ ½ž¨’j¬ÅêåÊq|xÉ· øé(µf=•†áPϧ¥Ô0ÿP&ÃI1å‚ 0¡©ÝÔÂl MežeĆQº2­¯V^·0,;ü¥£Ò Áà—ŽJƒDä_:*˜-hµ3c6¸s ÕzJëØ /U­_ ˆJÎUOS s:WÀ&7=â*¸#'ô-ˆì)µ¼ª˜{0{J®qÜýtWLkën¯‚N¢ñ=¹”@^…[ú¯az‹¦¡ ‰€éy)—dI¯ô8PéjX@Y÷Fš¼ M;Î4›§çŽËŽr â<’Ú qnïÛ÷T•ÓcÝÆn“Ü«f:“[¢× ;S‘|Oô7P_MÏ4;&2‘ÍMîivLd2f‡{–¼ºZzfÉ1oæÙSª¢¸÷Êì)1½=R\gOLc©VÁËP4IÃùƒJ—æTp/ŠkAœWnåôA·Ñxvoäuì‚[LãU°™A§˜×_5©ædëqó³sfpé‰`N"›‚ÁÖÁÜFc5¸õD@M j_,Ð@^­™LåIK{×UžÆ9à¥OÜ H@ùAތ͘ Åxt³åb2®c6[.è$Z~°)‹1q›­Áš˜yå¦åª –¥±Ê ÂN¢¡^zªÀÛh¨—ÍU‹‰ ¦3¥›¯·t¦Æ4¢‹ÎÆ)`ÇàíþŒäДæ‘LáˆL"ùµ 9S€ægQþÀô…z®ÀŠHçŠ~)cª‰Û…:v=ü ê ÕìåÊa©ß°ÿàŒR­ïWïËuËË u˱vÁ”Õ²C4%Æ“õâu å£ ¨ Ù!/&0´¡ˆ? ˆº…ã¹Zwñ¨c†LdjÕŽ:Fi-1 *A¯rРOØä€1;„ Rócb\±ŽCXË„tÕ”ñx1Óbá/K?Ó*±”ßá0n ÝÚÜ[þs²ñ=m‚‹¡ÿËdKT+Σö,ˆK yäE½Nt<è$ŠŒŸJoFŸmBÀ³ ˆWÇgÅ a©ôCt²`<”S[Ř9×û³¨ôlñ¼5ˆ»Ä+ÎS9..h»„–o‡Ð/õæxå)±ÔòÛ+ÇoLbIœ<9…J,þéeÁï¡GK’‰ŒèdÉ¡bü5.­æ"è$ ]šRSX–FÅ€xk`´Å€xk\ód¢ú¡ØÝ…ö¡ØÀÔ¯¨é¡—è qŸ|IOï·{Ü.˜b×÷Û9î$ŽÏÞ@<ÌmäIïTRÅ}äñPÔ± kd“#q6âú52‚ÉÖ9wß‚8Շݦ‡Äøæ± ääÊGFÞïäÊqP#¹ àU•å…Ò#v¸OºL±Œ]‰"îå:å…Š8é@‘:)l º°–ØÆ+K»àÕ‘Â^ï’Ç.xÍ&ê’ÛeæÀ] ¹h ec2áôÅ‚0@&“¸åÊ1o¦ ÄóÖ z2x[®¼ƒä…úU·\9æ½`òB´{AkPôê²$–:Dªû€Ð8uDŸ«úßcº!`¿?®ßûeéðj›‡auÄa€NûÇ„=™Å7 .&jrØ?V Ê [I ÿ0€"!`“?´F¸b´”/ÂÈàÚÅu²€¶@åFÿ j•× „1bšÐ“g@ØèF;´é˜-È)}Y‚82Ó¾›š& _˜³Y°::Œ!>"¾ÆWUqk0Þˆ©—öJ‹âT×FZÒLš’²ò‡¹âv¡ògQS2„àb*Qª—›…í‚)M™¬ÊëÄ¡Ÿú8“)åÛ‡ð“¢gµ]X=%O´Þ"­žè6NôÓ\äŽÂÙœ Ávabr*÷^7dðRžC=ØIn幇a¤?l(%˜G"‘C3ÂñÑñTºuß@þ€ ߺo5C€U>D'˜Õî[çŒkÏîÖ ©oA òGnÕ5PŽ4 °6Ù È‚n0çŇvHäïBŽ$À*{Šã• {”»÷f £^² e `^®LF7ÃïèWÑ'½•ç@‰G†²•ç@•,–± ¢ïÞZÜHµŒ] ª¸ü`Rpõ*¸W›`õ$ ôÊF€Õ4ãjªÜ> s †=ê`}îIÁµtßPq¡õ=Ð.×Ö}Uó$æ$;oç8°2,X$â˜È$dÊsq˜1l²zÝÞ¿ °zñÞqø«aAuÎqç ä«²ÓqÄ_µ/„áðFtf¯¢öv––| âÎA«W÷ê‰ao¦­ƒV0| ZŒº‡o@ÜìXù²q¼Õ_ ˆÃç`ÁÒ¦Ĭ€´,@r1!È59‡¹†ã«i³5c®¡ ^¹DUŽêpÅ}5š1®¸ WÜVŸs Ô XMÞábìã‡69-f ¶Ö0ž°h¸©iÖgOÅ· .!HzÀ Ãù“å  †ïÆ8>65-& å9²€Â.ñÉÌUاBº‚v`°¨ðs‡/âÅ„§˜Ìܶ`N1+ÀÆL»xð2A-‘zE¥…®aU’2‚AZ#£Š¡E5ø51ŠñõÛ!ŒÊÊšÑ#¯º5æ¶qr›) Æ/«g@ äe­Z&ðï§gä…WLN–ÆllÆMfØïP3lZhl…pI3,o!ИDûF€ò2«×íg2h ¬`·ßÉ » 6/—ÚëĉXÉN•l>ÄÝ…0,ôœÙå ÐI¬<Þ© ºÕHÛÊF1¼¬&¿Q6 » öS‰3n Ô¦ö "èuý®W€îÂä®—Ta¯Åá‡)WXžj*iã½0‰êœPÉNÙ$nJǸë³S¶”h7î¸GódÇ%ïÑ7#“‚æÙL&)³0 ¥Õ5ªàYWÏ[ƒ¸I¥J_Ö€§t„WwtÚÈÒ6öQAì¸éÊiõ·A±±›k>D!\”Ô?j¯Ì飦¹œê•óZ`b㔩w× ŽŸ×v!K†ÅÎÕ¿q'¢/„­õ7Û›`|"s>̘è̦0¤‹-ä‘LA`3€üA‘+„¹-°5Xób »`GîÄM*™ÆQUÅy¤F_,ø+)Zê’'WÙ˜¢o† ?°IæÍp:‰}ìÂøaœG’DG]³b*K[Yóf²I¥â¡âÖÀ2ùÇ‹IM1E‹oAÜ9°9â­ª:¢GUE!ˆL± ų Ž9~äZ_7æÝ(ƵBØcSYêλ1nnд,ª÷vŽçëîn‡Ï¬TïàY©ïö´ù~zÏJuÌ(;Q%̰œQ¥¡TñUúyrü¨R‡ ÒÖZÑè§H—]1h‡ŒÍ]¶äôÚ‚°¬¨cùx&ÁV@±\ßž0ìöñ«+½ý@ ’è£CÔ#lPç}€òx&J^Ò—2>ž³Ž‹ûËQ( Ò³ .+¡zµâ%†awù4û1î ˧ÑÝ1DÉò\taöx¨n‚Ðõw!îT9MÞŽhù’-ï:FÉ™-¦nïãMòZƒ>vaSì€ÎA×CÙYJr(»;ˆ0;ºê"Ì>QÖ85æ¹6ሟøG$a¶TÇ'† Xý]¥ì¶) Ë èZGYšÒ»rV=28¢u î´aA] qWnFÝÞ´Ã"釺½CßHm ú»~H˜=nã®ÝÆn»{EgNã.´Òpy¢ÁoâtP9ÙHÃwƒ³ãHÃ÷€;Êk3#_mÔ²ˆQAp> NL-ÙhË-)è6ZŽdªc¸5(cJr Ã⥠÷0 ¬‚D7î§q…ÄúeâêW]˜àÇ ÄM«\\»!p@[ c x6Z„¡Í€)÷ö0 ê¥füKíía@ã-o«nrD“·|–m@ލu߀°[ ã äÙì£_òaبmÁLG+u{ùb@Ôè Þ‚ñFÿ²%’¹]æ íÂÉܾx » Çl¤…`7!û“gA ?¥1âÍ VP^dü”i•Qk`ÜKÅ{ i$;¤gAÍØŸ4å,9*“>uÛHPûœ¡EDËNêl1£Îö› åúa¼í%º¹VP¯åɽTˆa·‘²­AOvɦúÉÉ‘âÎéÍ3‚:l<#sx ôf')78T¸¡bL'Sýó±alp¦ž&Ôu«£g£ukûbA˜GjMžPÔIÔt)M¨Á°5б }B PkÐÛUÒln>,ø{ qƒbQ¥ä4Ö çF0¯ÌÙvÁÉ•ãÀO$7䑨ZÌÙÉ•ãΤ›íôndéWYJœ  …GtÖâdë@À±ìeëaç`2Þ4§†"0ÖàaèØuê¨q(8“¥%`q aºh n˃âÂdŸÚ8ãAÃô”ªo@ ¾Õih4Œ–†IÚL5܇Q”Sƽ™Ç0[PÇèkP¦AJGã«i³~5H4lí´t$ŽŒäî'`¶ÀJ&›ú ³ݺj‹§³ÝV`Ñ4c¶ §rºZGíwo æä‘Ü¢2˜€8¥,< Úó¡—À„ÄÙÎØM¥¡¦ÍÆt³é÷@·±Ø]þJLâJ¸åËIŒ£©_Nb½„5T6Ñ hÚ‡fôJ2©±ÝXCY`Œ;‹†óNÊÆù³k ¯Üé4Ö@w¡÷ÓXk 9£)Àèlb¾a…³\Æ.t'.ÔÀ–NZŠÐ¨]0*@Ï‚¸an–ÓÖúiÁ?in‘%Ð9(Fµ’+.S¥¢×xµÈ;?ˆÕ/„­åm é`²4jí’² € “¨chAA©ó×ÁœkgÜâ:˜ü€GtÖäåÊakÇ.è¢i•³sÿbAØ ÉG\\`\ljÐ.°z "¾q»`ÑyÓK`ú 6ÔŸÝîVÜHýG`ä‘êG`¹™‹ŽtæP¿cAÜ9Ðz(6@^¹ņÓfŒós¨ßkrå°á¹Ä¨×›VÀë4†¨[tvÛLa»ÀfÓkŒ'ÿe <©gœSÝ—b2O‹šãm¤^­¼‹ ø“vÄÐL=å !vèý¤ ºà3O®N…á ïIZŤö»P çà‰b¨~ôèi(„oI>˜…PÌØÔØž"Ÿ¢ó€ñÕÚ¼Uß×PãE|¢®¡58•4Ã<¡¦ÓßĬ€ÒÕ¶ÒæÎîæ¢çÅl57Óâ…Å8¢lÍͦ³ŒŽñD9éø¬8Î8ÌãLÏ)ãÎa6ÎôÜÞî8nvÓxa= âÖ€åJ=¿røÉ&ê·–Æ!fIgvädœjíý@ ƒ"ö-Hq°ñS½´wj#`}ÁóZðgäDýV²ùý(Y€N¢6ß‚9Q?bCê¸ØhõÚrZÐO£ã v7ú1'q¯v£´D§Ñ9DriZˆ˜²ÅÔ•q× rŸYnL†2!h}±aÞíd9’kAØuL\0m[Ýä‘ÊðÊ-½s¤°F?Õá•eq?v¡èE¹â|¢ñl…#”Ã'–ÄÀ» Ð ¨£Ð? Pd2u¦„» ¦îSöT;Æ#qj_,(úBy•c²´qàt8F¿Bt(™Ûiôc²4–qöX1&GIê âÔ}Ø· ¬¢É¥Yƒ8^=p LtæF¾q°‘XIWÑd-W1 î6ŽüÀµ 8òõÞ ÃkP—(Æ+KkÐ÷B ¶Ž­9ГfA?´/˜¸ SO¢T‚ű1>Ï‚@(¢‘ùwyß…08¦˜Źa`Hcn.Ýy¹Æ‰Z¤«vf\×Wªð´Üa‘é€!K‚€ròç÷ãº|kË<à8*¶­+Zª7ï±qIò­èðXHŶ x -(Ú} Ð-,õæúx¬@Ž£bÛ:? ãNŸP¼IÎ Úƒâ­Ìð±aâ6õFÂ= £™i¯‚»&nÓÒÛÆI˜¸ÍÂ=,¨`À&s† ²ÍRgIg…ä]E“×ie²k—k²QwAÒ•Ó,dƒüQ“˜ó£°5è—È|  üAkÐæ¤È#0‡Añ¬Í,^~)n“ólh€Ó„âélh€ò3“–ɹ¼ãBÏ€pž,`iìBO¸] œ¾œƒ0ÈE6Î9ÁŠÚç€çÐ È'çüÊ~`=v!Ö¾¬òmÔc 4‚…Ú›¥N³­Ê¬– ,_Õ~„:‰[ð#”?hÆ|dŸEEgÒâ[:]yÉŠ€¢3'³`ò”‚ŠXœôRžÒs Ä6H×§üè62 mP²u6xk@¯Ì#?iâÛ+ǃ`åV–©ZîY2n ¤Ž]hB0¯Ì–xÄ_Š~± Ž‹-ßìO(dõƒÅþê1kƒÀPk`í剿@°@õDƒ`QÖV€ ´t @±QŒ«µ“r ›B;}B|ƒÀ@ç@¨^4Rv‚eëÆgT­‹ÂúÅ‚86¸r#sÇÄ‘ŒsèÀâ@`cÈ…­Á•!`Äê?°ÛyX3Ý}Ô8éàl¨8¿ øG Û~±f D_ÇXÖ Â‚^¼ß« ï˜!¨hSÝZ¤ˆc¥Ì_V ÌêBþ4à85ΉYÍ7'áã h¤ædúx#µ(™ÌfKB s…FEÆ: @¾0çCM r†¦†¹¹)AÞÐÈÐü5ø=’ mƒ‚A'QäÖ ¹S‚LEjÇD#ó,ˆÛ… ^ouP‚^ ˜;Çæ@q)7ú²5P òFȃNbë·æÃ‚°]ÐòÅ‚H-Ê­† Š ”FtÕWަL–¡ðTzÝ2ºVï6Æá^,Gr=RXÍÀ2”:‰@¯ÃÁ­ÏÂvÁc“¾³õ8ê!ž?E´€Î¼æÅBÜϼ¨~&¦ŽKï7SŠ#C³»0é—ç€ÃPhù_UÅy¤I;)kAÑ™ ¥¾ç%0ÊÔãÜ3#˜lz:ó èÜm/è$Ø&ÍEÕ³ …VÞ´#?ȤWLäI–JNQ?Œ ÍpòŒ¹¦ÇycƒA»ðÑã|ÄÆªÇéä‰4\Í· a@6ónä–¾X†Äk|·Ó†ÄkÕ_ƒ§J—z½æ@*²~·Ï—A7E%j ºÞ• º²Œß•ß•í8äMþàb1þ@¨\…ŠÿÄ€åÞ WÉ6]V¯åf˜*ª×ó Câ‰ú*‚æ›®õaA$ m벂ÎÁ…Æ4dõ¿@¡1†ðâbÈìÕ›“ðq$…¶) Ô8°ÍH:„ƶ +“ëÍGøX¿apî ô8"²Ä"2“æeRØ!lõ`°0[ Ãïõ—(ɹÇd0[ЭӾfTBH8%9kÜ!ÈùÓ×eùÓ×b ó}úZ?-øGìH³>v¡Fr`œ¸àN¢q`Qi ËK–åêíaÂr¶°¸é0ïƒ\Ë—5ø{ ×͉º &µ´9ñ@wAéô7Y00ýbAØ]°ëî2ÿ´ މ¬V>Ì90 XΓ6äÈX:Kž³‹˜,‘(]Ù†a Kg×wÑ",O$célT'ÑX:e‘ö‚vÁX¸Šp‚y¤ÉÂE‹7tªYàä‰ô«$džHÖ]l^ž¶Ö]\Ò* è<9°v_ SD¤þéký\ƒ?ÃÐGåýå‰ãã‡mTIÍ&;æDç@ôѸ ͉Îqxã¸Ø=Ð.pòÏAÜIÑ™2½ßø§zËŽ=v! ï ýðþ€Ö ÛÊÂÁaŠÚS†œ<1n Œ#³;yb"³sм,MÑG=9™j,úÈ«'ÆÄn,<$¦ªk T´çfÂ'/YÆ9PÂ1ŽL¯²vM‚Üj^¼ð™€y3WüA\š÷ç§Èû³¡˜˜-w Z’ü2@‰‡6åŠÀˆ‡6þN@(ȱ_[–ïÏn÷ ™^ô‹Q£su¸ÿœºÀQýP}` hé°iô û©,Á½¦_ ø+zi—+0ŽHÅ_°`Ôvhɪ„kÜO¥Vlú>û•,©Álú>[ƒeÍô‹ÿŠTßÛïtL Mõ½­ÂøÓ‚?q?7ê´ “U 91 ûÁ¼&ꦯ~&5Ê•Î,·`xŒ}j£-ÄýôÑDYÀ—°óN ä~ªð5èþÄÝ­G…tô£D)¦•Üm :ýçI”Hö©æ<˜ã´®ò‡]ó\£,_vá÷@ìSSçч4°ɳ PÑð_y*MÊw–¥õ5)©ÝóÒÍ2º ¢þâ¿Ê%u‹ˆû‰®,k^D:fvP/Í©œ?hâ[· :âÂøa…½É°Ñeõõà ØÇ.ðêëa|¢q?•´úz`ÜOÅmë”Hî'·¯Ó#¹Ÿª“+Çq½P» t#°ØÈ#:»kÇ{4¹¼]ø=û´™@»PÊ B7¿è.Ôì¯AïQýð[€<’å^{!؆GU`lT9(<éôU;XHLž(‰} ÂòDÉé 11y¢)ö´X 1‘Iˆ| 5?8@Œ?0ö)Úî( X ×åSinäÔÒÂT…} ÂÞÎ`…àÓ骛ñç÷£üa?(¼Š™¦­…‡Y¢ƒÂ«92Þ£5´U1ÀôñC[«½b4ºéË ´@ ·q9!—X=æŒw×2£!fª‰Žñ¤ðÇ8bãÏ7yØ-héj{\ ㊛!W7¡B¦„Ôä¾ÖããŠMq¿AÑX­bH¦ÀÑyúyÂDßÒGn s rf âÀ‚ÛBWg”GZtC1!›´ŽARa!s9`È £ßº À*†ðgd&¾qäWéÀ1A'Ñ 6´&CiÌõ¸“hC =+>–h<æõ> À< ân£€mÁtŒOd£çô,«©~ZÌýÇ÷ÃN‹¹ch«?L/Sе&wé/r`‹7¥>KÒÚù¥ÃÚ1-Þq67j±¯ù+Gº5V`3£bnAùº€¨f|8°Ç¼Ù¢2ÖŒíg!1Žè¢•y+ÿB´Ò1=æO‹s z;D+ pœä0­`éÝmnL40¦ âšÌ°&$ç\ÐVÇ4‰¾X׿!AÅÉÌ~ls§¢Nb†À”|ôÎ@k`Mæ­wÖA-^9zg “hEäïnÞ\Íâ—OLq-^9ÜO ]hÃ'r}§ˆq'Q?ìS 5°&sNï,•"yNn¸(?èþ+ŒO$Ӏ܀ L†B–#mÕ9Ìs‰,C©¹áJWDÆý´D‰1^y²ŒÔ% ¹$|@' ]0§ ù­AùðÝ`råñZ:|7ÒÒ!`m®O4VuÞ õp½€|b§:Å…Õ¤÷`ç€ÓðHêeia Ö4re¥w57® žMyoµµ@õ\ý“¸ýË.ô@•©\œW[Šk2›ößš¤î=–|@hÔdÖBÃT4yd(7 e¦·À5&WæÆWñZí‚c ¶¬ ªÏ9¼²8ïÆ¸50Xö^,a­Vƒ€©ób ä9©¾qÊ&©_…ØÉ8ç$÷ÅÔŠÉÒ„ø°a<’0û»Ç´b Íî.„ÝFƒ€5çåw,:×¥—ŽÉTeDç2R5øBJ÷-ˆ‡Á$å×=à0œQå×÷ãº\W]øô‡qbíWÕYËüi@\žž/.Ý(Z‚ÀÒŠrÏGZáàqÂ@`ã ¬hðX(?4 `ªo@«Þ< k¨|ó|€®a7Á³ª8?0^(ã¥f,Å8Pk*©ýeA EÍñÐ&äÔnì j&kboP»@&»¦õ½aY 5ß‚@ÔØ…:û  Âô¶$ݨ‡a˜ ë±.ìÍÃÔÛò,©ã§j~ß…8IbÝŸEå¹ ŠóJ Tz¢{ƒòR_D ,=«Yà¼ã´çz¹„œÇbæÂh6Ò%%êSé‰÷jÞÀ”’÷`$¹È¹9)ŽäB®Ö³‚<Y±èÛ#ê,5ß‚¸Âñn7Î#Ñx¸kš ‰êȑڜAÝÓ¢”*ï“G³Q/¥‰þiAŠC@öfÒòê¸Ô o@HŸØ oPß>1w’ôî3ƒreÃéšêùDÎíVz½™Øú‹®EâZwêH¡ø£2µiQkÀå2±lÆD¹rg~E¦”P[k ôfš:Kk¾µ Õ´¦2û[ãíLni?l F~@)g Gjz÷ÚAÙ:«~Yƒ0|²é0®)wÐI”tô¶@±Ñt–\ ñGFå¼XâTH.Z$Ú ê¾pò-ˆÃ±©]MmP¦*lZSΛ)΂‘´¿ bZS^u¿…£H7¡úß«jÓU÷ƒ@CµK›Õ‘”^‰ò,ž`VÀH°Æ3!¿V }ñ’"}¬€ÆéµE ùX¿I°Üã Ê¾a/µb2Csô±)€åŸ0Ol2C“ôa@Ô-hìv –'{ûÀHØFÞ`®a?Ä? XÐûÍyÚãÀÚœ7¨„`üîÍyºˆÆÿ”– ,(+̤¾¡è§&šÞîðÏ@þ§ñUUXVÇëd3 NbI¾¡è§ÍuJ rés‚Ésíñº#4߈LdÌJ_,» Z.‘ÕÍÀäÈSd(¯nè$v“ø™L­ ] 4v¡8yzâcüîL^žÌø+M £N®c¨ìUq·‘¬ÃËkVsŒ*óBˆc"ÓZJkZ“¡L ZKí]? Ü2Ž ™²¨  e -e}Ç…X¡¥ñÊ» Æ‘¹±G *ªÉmìÈ'6C?‘S ‹ j’_¥ãʈÔàÖÂ(s´·@þÀ8°Jn÷nœXKÔtŒÊ]ƒ8Ü õƒAu5,?Xº Øhø«ýj-‰±+8ï…¸](†üYuÂ0‘Uº%¿kæ[ºêâCy$ë-,0PE“[÷-äÀª‡iäû—n þê[»?Œïeþî5E‡Ù±ê¾wâ°G¤‡rÔp7u‡ìUuã,0å­â¼\Ãzþƺâ®A D?¹„U4ªnœ>æíl Tþ9»uüÔÆécº!™!ヅŽÄB“‚Ün!ãÌS rM©`üP5à¤c|åˆÛ?K¤ü±=P r“paBQOW3 }Øø…†Œ!*¿ÒÂaâC?…‰S rÓOqÇIA.2L<ÈdXSHä Œ†lËßÒ’ÌGþî§q°9òw5ˆ³àÈß=,£ä3ƒ%>‡ºåËIŒóHÕà«„ º ­ù»·*‡† -=(ÎC);ò¡UDÆœ!¼‰Ð2Àj 4ׂ¸÷rþÀb1iŠzç þd³{Úß©røˆÇ9¨üÎIÀÆïîk€’ADhåÎU`Ñ™Š“‹4Ü](õЂv¡|@ê ]¨:h ¨/Ný&,W6"´"ŽÉPHé@ÄA>Ѧè:õ÷ÛY‰Ð\ ÂîL¾VM¸rv6 H;° ^=%hFt¾é)1 žñ Œ“‚ËÚ°×;—|‰¦wtŽƒ?Mé&ÈüiÁ"„7A&Æ+ó„ˆKÜ90šÒê½ÞCekë Øã;2ˆ ‰»d6'.„y¤ní{Á¼™LQÝNçŸa08>䘓(”9$ƒhÈê¡äÃDç)ƒ(Ù]ÄÑ»°yW@ç@ä¢ÍúZ1bD§åHÿ3|bãT€Ð‹æŸÄ@œ§íçšQ3:=׸]hc ˆ*®¿0òäK»“©ä0ËHjTdäƒC+ú™tphÃs`€Ø•!Ì(§áa§NöÀ?âùê©­ÀH ¸2½a˜3N‡V C† ‡nÁˆ‡þh¼ h`²'Ý”§~ÐâA d6ÀFƼˆeÓ!Eüi@Ô˜à×ÎÍ1×°—Ãȇñ„Fˆ·±ˆE0’¨õ` †vȰ;+ÅÃl$½;+ÅÜÄIÉ·Ñ 5 =´¢ä+ýÊå#Âøs Âð˜òa, B¼Ú“›M1ÎMÉW0ô”Ò÷,Äá}DAwA?"Œ 5è㳺f50k@É$Wå®`ˆLpŒ½ü@#å@몛ab#eù²- è®A]÷-ˆC?ýBGºF7“½)Ž nì‚:9R \==fPõÌPp»Ç ò‰Nób¡ñr/©7\ñ„´ .Lñ‚F~ ÒkÆYÐóUÜBn$õʈq4ËÔÉãÄ8-:{Äá-(]ZœL5sB2,Xøì! fw:'`OÁºÜ‹8´ bB”Þ{!Œ­Ðéôcâ”õê‰qXÄ:N¢,êfL¶Î³Ïî­Aœ¨I :5Õ8bDµN¿‚½YǸÍH9Pò*šaXIéˆ0þ´àr Ýh_`ÑyÊn©P³™ò¢ÄÔÖda“ ˆ N¾X‡‚'1;ïÆ80'±{È“?ÂPpcªób‰[ƒ:v‘À‡þªbˆAhÅ0nðÑ­¢…6 Xæ˜ c…\ÜÝ£Tž|ÂêGl°õd® uè‹÷‹¹b¤™M”¶Ì´¤b ÑÆ„–§ àψz+cB+„sDÕÀ?=UØ!´6o^œ2Àið'YS´˜C¨Æ·H+d@Ä:¬yMñVÈÜ`Nù²CH¸p˜ VÁîáŸRMïp‡wÈê[ˆJW³ÔvZrBR eBSJ¸s0òׂ@IÒz„a+†Ñz¼îÔ@IR3à•2¡ûSÑ Ë§$)yï4 ”$½y‡@/Ec:1¦TX–>%IyI ºtÙ«5â3I5ÆÝÆ2ÎAW':s¤$i£wtëíQ5Îçåš9wKÓ‚*¹M4-¦”;%I] $…vKÓ‚ü¡Ð¶¸ &Cád°‹§ózçœ'&2MÜ–šµ5ŒñlAõ-D¡}DQ1þàWQÔ bÄûˆ¢b2UÃÁ©µWpç Œ5ðjûq>±Ö‹¼ÚzÜ.ŒÏŽT¹)Î'Ž Å]ƒ8q\ËPö€÷O z$ÎÛ…8L¨áàÆ£!Ãm’>xHLdš|t®ÈGw#2+„5Øøè| þ ÄÁÙ¸ã,0œ¼Ûkk88w âxÈ W7SüÄppâ¼™bùèlÄ献xH¸ÈG× ‰…ÃÉ{=Q‹FTçÆA#*hÄþJ´z\Š™á[Ðˇ+fPÂV`Mn)fb‡ü+©s¿x¿„Š>@0…Œ,°M€ùîG æL0 ¶× „½QšURŒ#Òr92Ð?T˜XÐ? TOhhÄ[‹ãLÕ_ƒ0ÔIþh‚vÁr‚›ƒvÁØV¼5ˆCq=Ldwd\h7™Bæö¦*êÖ Ä¥\ìßZZ bc«‡‰ ´ 5ùç ÎÔ#è•4^Ê7 xcAwAÇ.ìÉAL†6uY7'žb8°R:œx¨çr=œx âƒk—ª æ6RkЗ–„‚øàÈ· ŽÊ2”­=:‰“Žœ¸P#ùà¶öèˆúÄñùbAÜGý䑪@L–FÍÖ@IaYÚ¯H<Jþ.ÄaƒmZÁ;‰9R6Ör©ËÑaÄx$NÉ· ï>J a&äüQ‚­ÁÈ‘”úA,pó„bÞ  X%wÁ2öê-R׳ UÊUÒš%üé‘ÂÎAåÃÖŠÉ‘¦2ìfky¤É™»ØZQ”ÃÖ Ú…‘¡Ül­ bå·q«>šÍ–¡lÙ'Ð.ô±[õãŦ\ Â76­ Ò ×ñÎz‘×o ÔçlÆ ìÀ8ñnnDŒOœê¸ãñŽ«¡Lu\kyÂ|¢iÓöìdiq*Ɇôº8¸Aˆ÷«÷:=r‡ 1Çs©ŽOÓË€0ª…~ñHåi@`oüÃJ’;hxì‹qSK‡±cÆeÔ_@uæCŒØ!ÃsE+_ÇâåÃÊ×!£õÕh×ô fšÑ®áAŒhêÖ[›¬|KÈ CÆ#&+_zÇ‚8ü“1ÎxÄ¡R;¬ÃL˜åJEK‡…ƒl}î=·‡‰ˆ‰ç­A |q§wH D#Ö/kÐuQÝ5ˆËŽMu¿S1aqònpr‡LOæB_,;‰E} B•Yý»À‘ʬL|¨µ™ºŠà,ÐñSuuÚA'ј yuÚA>q+@×À²4w BÕi·ºLÇp`¥áÑk R(ò㑦6l¦œqçÀ&Z;bCê{• äÄKÝ)ÞÄñ€ü ÕÌÒ¨ôË$~pYR³µbÞ ¦N{ãä1/WšHýÎÀ5PChóÛ'Æù5”zs|bÃÁ}pòÀ‰v<¦’7Qh[7TÒÏÕrPM"õS)h ©¿™J1^™3·*06²qæ ²Š3‘x YÅ™H<Ï‚8Õ©RÆI\ˆ T‡ÍPê‹} ™¸F\Xa‘Épp7JtõƒRùDÃÁ‘¾[,q·qræ:¯¶86¶$¾ʬéRs‡ý1mX(è@ˆ} âzîüÁw Øx½«IôÂüÈØ^êÄH—.JKW ƒéÆ.´¥îðs ´¢3w+‚ÎÁäÌ]’€ 0k= ÂÎáäGºŽ«#,`ËT,]u±Ùÿü~üââÅeÿøû±ˆiQÙ? ¨œ|+&>v ‹XWHÀ¦;#âc â²Ã[÷±qT½7ïa@X,è7ï§aÍ-SáãYA|¬@”¬†ì„s„-_¼2’Ç-ÈáH¼‡Qé@O¾a×°óM rDL> endobj 110 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 595.28000 841.89000] /BleedBox [0.00000 0.00000 595.28000 841.89000] /CropBox [0 0 595.28000 841.89000] /TrimBox [0.00000 0.00000 595.28000 841.89000] /ArtBox [0.00000 0.00000 595.28000 841.89000] /Rotate 0 /Contents 108 0 R /Group 109 0 R >> endobj 111 0 obj << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /XObject << /REI0 83 0 R /REI3 91 0 R /RE2 87 0 R /RE5 95 0 R /RE7 101 0 R /RE9 107 0 R >> /Font << /Fo0S0 35 0 R /Fo1S0 82 0 R >> /ExtGState << /RE1 86 0 R /RE4 94 0 R /RE6 100 0 R /RE8 106 0 R >> >> endobj 3 0 obj << /Type /Outlines /Count 0 >> endobj 4 0 obj << /Type /Pages /Kids [90 0 R 98 0 R 104 0 R 110 0 R ] /Count 4 /Resources 111 0 R >> endobj 5 0 obj << >> endobj 6 0 obj << /Fields [ ] >> endobj 7 0 obj << >> endobj 8 0 obj [] endobj xref 0 112 0000000000 65535 f 0000000015 00000 n 0000000207 00000 n 0001059789 00000 n 0001059835 00000 n 0001059936 00000 n 0001059957 00000 n 0001059991 00000 n 0001060013 00000 n 0000000410 00000 n 0000001092 00000 n 0000001543 00000 n 0000002072 00000 n 0000002335 00000 n 0000002883 00000 n 0000003087 00000 n 0000003311 00000 n 0000004012 00000 n 0000004472 00000 n 0000004944 00000 n 0000005312 00000 n 0000005970 00000 n 0000006380 00000 n 0000006591 00000 n 0000006756 00000 n 0000007159 00000 n 0000007601 00000 n 0000008091 00000 n 0000008413 00000 n 0000008817 00000 n 0000009230 00000 n 0000009499 00000 n 0000009881 00000 n 0000009993 00000 n 0000010244 00000 n 0000010370 00000 n 0000010571 00000 n 0000010832 00000 n 0000010995 00000 n 0000011158 00000 n 0000011429 00000 n 0000011949 00000 n 0000012583 00000 n 0000012849 00000 n 0000013157 00000 n 0000013471 00000 n 0000014004 00000 n 0000014501 00000 n 0000014741 00000 n 0000014965 00000 n 0000015131 00000 n 0000015316 00000 n 0000015628 00000 n 0000015855 00000 n 0000016271 00000 n 0000016885 00000 n 0000017636 00000 n 0000018029 00000 n 0000018280 00000 n 0000019042 00000 n 0000019522 00000 n 0000019979 00000 n 0000020472 00000 n 0000020954 00000 n 0000021325 00000 n 0000021954 00000 n 0000022321 00000 n 0000022530 00000 n 0000022860 00000 n 0000023026 00000 n 0000023564 00000 n 0000023953 00000 n 0000024378 00000 n 0000024898 00000 n 0000025369 00000 n 0000025689 00000 n 0000026401 00000 n 0000026794 00000 n 0000027194 00000 n 0000027441 00000 n 0000027633 00000 n 0000028118 00000 n 0000028337 00000 n 0000028539 00000 n 0000843225 00000 n 0000843252 00000 n 0000843322 00000 n 0000843427 00000 n 0000843608 00000 n 0000864017 00000 n 0000864071 00000 n 0000864372 00000 n 0000998598 00000 n 0000998625 00000 n 0000998695 00000 n 0000998800 00000 n 0000998981 00000 n 0001018991 00000 n 0001019045 00000 n 0001019346 00000 n 0001019416 00000 n 0001019522 00000 n 0001020421 00000 n 0001034633 00000 n 0001034688 00000 n 0001034992 00000 n 0001035063 00000 n 0001035169 00000 n 0001035352 00000 n 0001059161 00000 n 0001059216 00000 n 0001059520 00000 n trailer << /Size 112 /Root 1 0 R /Info 2 0 R /ID [<6C017611CE3D4E48C50C2C9AD29EAB18><6C017611CE3D4E48C50C2C9AD29EAB18>] >> startxref 1060031 %%EOF cups-2.2.7/test/document-a4.ps000664 000765 000024 00013303444 13255074424 016632 0ustar00msweetstaff000000 000000 %!PS-Adobe-3.0 %XpdfVersion: 3.03 %%Creator: Scribus 1.4.0.rc5 %%Title: %%LanguageLevel: 3 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 595 842 0 () () %%BoundingBox: 0 0 595 842 %%Pages: 4 %%EndComments %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.03 0 %%Copyright: Copyright 1996-2011 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { /setpagedevice where { pop 2 dict begin /Policies 1 dict dup begin /PageSize 6 def end def { /Duplex true def } if currentdict end setpagedevice } { pop } ifelse } def /pdfSetupPaper { 2 array astore /setpagedevice where { pop 2 dict begin /PageSize exch def /ImagingBBox null def currentdict end setpagedevice } { pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def /pdfMakeFont16L3 { 1 index /CIDFont resourcestatus { pop pop 1 index /CIDFont findresource /CIDFontType known } { false } ifelse { 0 eq { /Identity-H } { /Identity-V } ifelse exch 1 array astore composefont pop } { pdfMakeFont16 } ifelse } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /xyshow where { pop /xyshow2 { dup length array 0 2 2 index length 1 sub { 2 index 1 index 2 copy get 3 1 roll 1 add get pdfTextMat dtransform 4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put } for exch pop xyshow } def }{ /xyshow2 { currentfont /FontType get 0 eq { 0 2 3 index length 1 sub { currentpoint 4 index 3 index 2 getinterval show moveto 2 copy get 2 index 3 2 roll 1 add get pdfTextMat dtransform rmoveto } for } { 0 1 3 index length 1 sub { currentpoint 4 index 3 index 1 getinterval show moveto 2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get pdfTextMat dtransform rmoveto } for } ifelse pop pop } def } ifelse /cshow where { pop /xycp { 0 3 2 roll { pop pop currentpoint 3 2 roll 1 string dup 0 4 3 roll put false charpath moveto 2 copy get 2 index 2 index 1 add get pdfTextMat dtransform rmoveto 2 add } exch cshow pop pop } def }{ /xycp { currentfont /FontType get 0 eq { 0 2 3 index length 1 sub { currentpoint 4 index 3 index 2 getinterval false charpath moveto 2 copy get 2 index 3 2 roll 1 add get pdfTextMat dtransform rmoveto } for } { 0 1 3 index length 1 sub { currentpoint 4 index 3 index 1 getinterval false charpath moveto 2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get pdfTextMat dtransform rmoveto } for } ifelse pop pop } def } ifelse /Tj { fCol 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 4 2 roll pdfTextRender 1 and 0 eq { 2 copy xyshow2 } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 3 index 3 index moveto 2 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse xycp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 4 2 roll moveto xycp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { pop pop pop pop } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { 0.001 mul pdfFontSize mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2/3 image operators /pdfImBuf 100 string def /pdfImStr { 2 copy exch length lt { 2 copy get exch 1 add exch } { () } ifelse } def /skipEOD { { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfIm { image skipEOD } def /pdfMask { /ReusableStreamDecode filter skipEOD /maskStream exch def } def /pdfMaskEnd { maskStream closefile } def /pdfMaskInit { /maskArray exch def /maskIdx 0 def } def /pdfMaskSrc { maskIdx maskArray length lt { maskArray maskIdx get /maskIdx maskIdx 1 add def } { () } ifelse } def /pdfImM { fCol imagemask skipEOD } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 2 lt { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource /CIDInit /ProcSet findresource begin 10 dict begin begincmap /CMapType 1 def /CMapName /Identity-H def /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Identity) def /Supplement 0 def end def 1 begincodespacerange <0000> endcodespacerange 0 usefont 1 begincidrange <0000> 0 endcidrange endcmap currentdict CMapName exch /CMap defineresource pop end 10 dict begin begincmap /CMapType 1 def /CMapName /Identity-V def /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Identity) def /Supplement 0 def end def /WMode 1 def 1 begincodespacerange <0000> endcodespacerange 0 usefont 1 begincidrange <0000> 0 endcidrange endcmap currentdict CMapName exch /CMap defineresource pop end end %%EndProlog %%BeginSetup xpdf begin %%BeginResource: font T3_35_0 8 dict begin /FontType 3 def /FontMatrix [0.001 0 0 0.001 0 0] def /FontBBox [-1 -210 777 728] def /Encoding 256 array def 0 1 255 { Encoding exch /.notdef put } for /BuildGlyph { exch /CharProcs get exch 2 copy known not { pop /.notdef } if get exec } bind def /BuildChar { 1 index /Encoding get exch get 1 index /BuildGlyph get exec } bind def /CharProcs 23 dict def CharProcs begin /B { 673 0 73 0 673 716 setcachedevice q 73.25 715.82812 m 73.25 715.82812 359.375 715.82812 359.375 715.82812 c 359.375 715.82812 444.34375 715.82812 486.07813 708.73438 c 486.07813 708.73438 527.82812 701.65625 560.78125 679.1875 c 560.78125 679.1875 593.75 656.73438 615.71875 619.375 c 615.71875 619.375 637.70312 582.03125 637.70312 535.64062 c 637.70312 535.64062 637.70312 485.35938 610.59375 443.35938 c 610.59375 443.35938 583.5 401.375 537.10938 380.375 c 537.10938 380.375 602.54688 361.32812 637.70312 315.42188 c 637.70312 315.42188 672.85938 269.53125 672.85938 207.51562 c 672.85938 207.51562 672.85938 158.6875 650.14062 112.54688 c 650.14062 112.54688 627.4375 66.40625 588.125 38.8125 c 588.125 38.8125 548.82812 11.23438 491.21875 4.89062 c 491.21875 4.89062 455.07812 0.98438 316.89062 0 c 316.89062 0 73.25 0 73.25 0 c 73.25 0 73.25 715.82812 73.25 715.82812 c 73.25 715.82812 73.25 715.82812 73.25 715.82812 c h 217.78125 596.6875 m 217.78125 596.6875 217.78125 431.15625 217.78125 431.15625 c 217.78125 431.15625 312.5 431.15625 312.5 431.15625 c 312.5 431.15625 396.96875 431.15625 417.48438 433.59375 c 417.48438 433.59375 454.59375 437.98438 475.82813 459.21875 c 475.82813 459.21875 497.07812 480.46875 497.07812 515.14062 c 497.07812 515.14062 497.07812 548.34375 478.76563 569.09375 c 478.76563 569.09375 460.45312 589.84375 424.3125 594.23438 c 424.3125 594.23438 402.82812 596.6875 300.78125 596.6875 c 300.78125 596.6875 217.78125 596.6875 217.78125 596.6875 c 217.78125 596.6875 217.78125 596.6875 217.78125 596.6875 c h 217.78125 312.01562 m 217.78125 312.01562 217.78125 120.60938 217.78125 120.60938 c 217.78125 120.60938 351.5625 120.60938 351.5625 120.60938 c 351.5625 120.60938 429.6875 120.60938 450.6875 125 c 450.6875 125 482.90625 130.85938 503.17188 153.5625 c 503.17188 153.5625 523.4375 176.26562 523.4375 214.35938 c 523.4375 214.35938 523.4375 246.57812 507.8125 269.03125 c 507.8125 269.03125 492.1875 291.5 462.64063 301.75 c 462.64063 301.75 433.10938 312.01562 334.46875 312.01562 c 334.46875 312.01562 217.78125 312.01562 217.78125 312.01562 c h f* Q } def /C { 671 0 47 -12 671 728 setcachedevice q 530.76562 263.1875 m 530.76562 263.1875 670.90625 218.75 670.90625 218.75 c 670.90625 218.75 638.67188 101.5625 563.71875 44.67188 c 563.71875 44.67188 488.76562 -12.20312 373.53125 -12.20312 c 373.53125 -12.20312 230.95312 -12.20312 139.15625 85.20312 c 139.15625 85.20312 47.35938 182.625 47.35938 351.5625 c 47.35938 351.5625 47.35938 530.28125 139.64062 629.15625 c 139.64062 629.15625 231.9375 728.03125 382.32812 728.03125 c 382.32812 728.03125 513.67188 728.03125 595.70312 650.39062 c 595.70312 650.39062 644.53125 604.5 668.95312 518.5625 c 668.95312 518.5625 525.875 484.375 525.875 484.375 c 525.875 484.375 513.1875 540.04688 472.90625 572.26562 c 472.90625 572.26562 432.625 604.5 375 604.5 c 375 604.5 295.40625 604.5 245.84375 547.35938 c 245.84375 547.35938 196.29688 490.23438 196.29688 362.3125 c 196.29688 362.3125 196.29688 226.5625 245.125 168.9375 c 245.125 168.9375 293.95312 111.32812 372.07812 111.32812 c 372.07812 111.32812 429.6875 111.32812 471.1875 147.95313 c 471.1875 147.95313 512.70312 184.57812 530.76562 263.1875 c h f* Q } def /G { 717 0 48 -12 717 728 setcachedevice q 405.76562 263.1875 m 405.76562 263.1875 405.76562 383.79688 405.76562 383.79688 c 405.76562 383.79688 717.28125 383.79688 717.28125 383.79688 c 717.28125 383.79688 717.28125 98.64062 717.28125 98.64062 c 717.28125 98.64062 671.875 54.6875 585.6875 21.23438 c 585.6875 21.23438 499.51562 -12.20312 411.14062 -12.20312 c 411.14062 -12.20312 298.82812 -12.20312 215.32812 34.90625 c 215.32812 34.90625 131.84375 82.03125 89.84375 169.67188 c 89.84375 169.67188 47.85938 257.32812 47.85938 360.35938 c 47.85938 360.35938 47.85938 472.17188 94.73438 559.07812 c 94.73438 559.07812 141.60938 646 231.9375 692.39062 c 231.9375 692.39062 300.78125 728.03125 403.32812 728.03125 c 403.32812 728.03125 536.625 728.03125 611.57812 672.125 c 611.57812 672.125 686.53125 616.21875 708.01562 517.57812 c 708.01562 517.57812 564.45312 490.71875 564.45312 490.71875 c 564.45312 490.71875 549.3125 543.45312 507.5625 573.96875 c 507.5625 573.96875 465.82812 604.5 403.32812 604.5 c 403.32812 604.5 308.59375 604.5 252.6875 544.4375 c 252.6875 544.4375 196.78125 484.375 196.78125 366.21875 c 196.78125 366.21875 196.78125 238.76562 253.42188 175.04688 c 253.42188 175.04688 310.0625 111.32812 401.85938 111.32812 c 401.85938 111.32812 447.26562 111.32812 492.92188 129.14062 c 492.92188 129.14062 538.57812 146.96875 571.29688 172.35937 c 571.29688 172.35937 571.29688 263.1875 571.29688 263.1875 c 571.29688 263.1875 405.76562 263.1875 405.76562 263.1875 c h f* Q } def /M { 762 0 71 0 762 716 setcachedevice q 70.79688 0 m 70.79688 0 70.79688 715.82812 70.79688 715.82812 c 70.79688 715.82812 287.10938 715.82812 287.10938 715.82812 c 287.10938 715.82812 417 227.54688 417 227.54688 c 417 227.54688 545.40625 715.82812 545.40625 715.82812 c 545.40625 715.82812 762.20312 715.82812 762.20312 715.82812 c 762.20312 715.82812 762.20312 0 762.20312 0 c 762.20312 0 627.9375 0 627.9375 0 c 627.9375 0 627.9375 563.48438 627.9375 563.48438 c 627.9375 563.48438 485.84375 0 485.84375 0 c 485.84375 0 346.6875 0 346.6875 0 c 346.6875 0 205.07812 563.48438 205.07812 563.48438 c 205.07812 563.48438 205.07812 0 205.07812 0 c 205.07812 0 70.79688 0 70.79688 0 c h f* Q } def /R { 717 0 73 0 717 716 setcachedevice q 73.25 0 m 73.25 0 73.25 715.82812 73.25 715.82812 c 73.25 715.82812 377.4375 715.82812 377.4375 715.82812 c 377.4375 715.82812 492.1875 715.82812 544.1875 696.53125 c 544.1875 696.53125 596.1875 677.25 627.4375 627.92188 c 627.4375 627.92188 658.6875 578.60938 658.6875 515.14062 c 658.6875 515.14062 658.6875 434.57812 611.32812 382.07812 c 611.32812 382.07812 563.96875 329.59375 469.73438 315.92188 c 469.73438 315.92188 516.60938 288.57812 547.125 255.85938 c 547.125 255.85938 577.64062 223.14062 629.39062 139.65625 c 629.39062 139.65625 716.79688 0 716.79688 0 c 716.79688 0 543.95312 0 543.95312 0 c 543.95312 0 439.45312 155.76563 439.45312 155.76563 c 439.45312 155.76563 383.79688 239.26562 363.28125 260.98438 c 363.28125 260.98438 342.78125 282.71875 319.82812 290.76562 c 319.82812 290.76562 296.875 298.82812 247.07812 298.82812 c 247.07812 298.82812 217.78125 298.82812 217.78125 298.82812 c 217.78125 298.82812 217.78125 0 217.78125 0 c 217.78125 0 73.25 0 73.25 0 c 73.25 0 73.25 0 73.25 0 c h 217.78125 413.09375 m 217.78125 413.09375 324.70312 413.09375 324.70312 413.09375 c 324.70312 413.09375 428.71875 413.09375 454.59375 421.875 c 454.59375 421.875 480.46875 430.67188 495.10938 452.15625 c 495.10938 452.15625 509.76562 473.64062 509.76562 505.85938 c 509.76562 505.85938 509.76562 542 490.46875 564.20312 c 490.46875 564.20312 471.1875 586.42188 436.03125 592.28125 c 436.03125 592.28125 418.45312 594.73438 330.5625 594.73438 c 330.5625 594.73438 217.78125 594.73438 217.78125 594.73438 c 217.78125 594.73438 217.78125 413.09375 217.78125 413.09375 c h f* Q } def /T { 590 0 21 0 590 716 setcachedevice q 233.89062 0 m 233.89062 0 233.89062 594.73438 233.89062 594.73438 c 233.89062 594.73438 21.48438 594.73438 21.48438 594.73438 c 21.48438 594.73438 21.48438 715.82812 21.48438 715.82812 c 21.48438 715.82812 590.32812 715.82812 590.32812 715.82812 c 590.32812 715.82812 590.32812 594.73438 590.32812 594.73438 c 590.32812 594.73438 378.42188 594.73438 378.42188 594.73438 c 378.42188 594.73438 378.42188 0 378.42188 0 c 378.42188 0 233.89062 0 233.89062 0 c h f* Q } def /Y { 668 0 -1 0 668 716 setcachedevice q 260.75 0 m 260.75 0 260.75 301.26562 260.75 301.26562 c 260.75 301.26562 -1.46875 715.82812 -1.46875 715.82812 c -1.46875 715.82812 167.96875 715.82812 167.96875 715.82812 c 167.96875 715.82812 336.42188 432.625 336.42188 432.625 c 336.42188 432.625 501.46875 715.82812 501.46875 715.82812 c 501.46875 715.82812 667.96875 715.82812 667.96875 715.82812 c 667.96875 715.82812 404.78125 300.29688 404.78125 300.29688 c 404.78125 300.29688 404.78125 0 404.78125 0 c 404.78125 0 260.75 0 260.75 0 c h f* Q } def /a { 522 0 36 -12 522 530 setcachedevice q 174.3125 360.35938 m 174.3125 360.35938 49.8125 382.8125 49.8125 382.8125 c 49.8125 382.8125 70.79688 458.01562 122.0625 494.14062 c 122.0625 494.14062 173.34375 530.28125 274.42188 530.28125 c 274.42188 530.28125 366.21875 530.28125 411.14062 508.54688 c 411.14062 508.54688 456.0625 486.8125 474.35938 453.35938 c 474.35938 453.35938 492.67188 419.92188 492.67188 330.5625 c 492.67188 330.5625 491.21875 170.40625 491.21875 170.40625 c 491.21875 170.40625 491.21875 102.04687 497.79688 69.57812 c 497.79688 69.57812 504.39062 37.10938 522.46875 0 c 522.46875 0 386.71875 0 386.71875 0 c 386.71875 0 381.34375 13.67188 373.53125 40.53125 c 373.53125 40.53125 370.125 52.73438 368.65625 56.64062 c 368.65625 56.64062 333.5 22.46875 293.45312 5.375 c 293.45312 5.375 253.42188 -11.71875 208.01562 -11.71875 c 208.01562 -11.71875 127.9375 -11.71875 81.78125 31.73437 c 81.78125 31.73437 35.64062 75.20312 35.64062 141.60938 c 35.64062 141.60938 35.64062 185.54688 56.64062 219.96875 c 56.64062 219.96875 77.64062 254.39062 115.48438 272.70312 c 115.48438 272.70312 153.32812 291.01562 224.60938 304.6875 c 224.60938 304.6875 320.79688 322.75 357.90625 338.375 c 357.90625 338.375 357.90625 352.04688 357.90625 352.04688 c 357.90625 352.04688 357.90625 391.60938 338.375 408.45312 c 338.375 408.45312 318.84375 425.29688 264.65625 425.29688 c 264.65625 425.29688 228.03125 425.29688 207.51562 410.89062 c 207.51562 410.89062 187.01562 396.48438 174.3125 360.35938 c 174.3125 360.35938 174.3125 360.35938 174.3125 360.35938 c h 357.90625 249.03125 m 357.90625 249.03125 331.54688 240.23438 274.40625 228.03125 c 274.40625 228.03125 217.28125 215.82812 199.70312 204.10938 c 199.70312 204.10938 172.85938 185.0625 172.85938 155.76563 c 172.85938 155.76563 172.85938 126.95312 194.34375 105.95312 c 194.34375 105.95312 215.82812 84.96875 249.03125 84.96875 c 249.03125 84.96875 286.14062 84.96875 319.82812 109.375 c 319.82812 109.375 344.73438 127.9375 352.54688 154.78125 c 352.54688 154.78125 357.90625 172.35937 357.90625 221.6875 c 357.90625 221.6875 357.90625 249.03125 357.90625 249.03125 c h f* Q } def /d { 547 0 41 -12 547 716 setcachedevice q 547.35938 0 m 547.35938 0 419.92188 0 419.92188 0 c 419.92188 0 419.92188 76.17188 419.92188 76.17188 c 419.92188 76.17188 388.1875 31.73437 344.96875 10 c 344.96875 10 301.76562 -11.71875 257.8125 -11.71875 c 257.8125 -11.71875 168.45312 -11.71875 104.73438 60.29688 c 104.73438 60.29688 41.01562 132.32813 41.01562 261.23438 c 41.01562 261.23438 41.01562 393.0625 103.03125 461.67188 c 103.03125 461.67188 165.04688 530.28125 259.76562 530.28125 c 259.76562 530.28125 346.6875 530.28125 410.15625 458.01562 c 410.15625 458.01562 410.15625 715.82812 410.15625 715.82812 c 410.15625 715.82812 547.35938 715.82812 547.35938 715.82812 c 547.35938 715.82812 547.35938 0 547.35938 0 c 547.35938 0 547.35938 0 547.35938 0 c h 181.15625 270.51562 m 181.15625 270.51562 181.15625 187.5 204.10938 150.39062 c 204.10938 150.39062 237.3125 96.6875 296.875 96.6875 c 296.875 96.6875 344.23438 96.6875 377.4375 136.96875 c 377.4375 136.96875 410.64062 177.25 410.64062 257.32812 c 410.64062 257.32812 410.64062 346.6875 378.40625 385.98438 c 378.40625 385.98438 346.1875 425.29688 295.90625 425.29688 c 295.90625 425.29688 247.07812 425.29688 214.10938 386.46875 c 214.10938 386.46875 181.15625 347.65625 181.15625 270.51562 c h f* Q } def /e { 519 0 32 -12 519 530 setcachedevice q 372.07812 165.04688 m 372.07812 165.04688 508.79688 142.09375 508.79688 142.09375 c 508.79688 142.09375 482.42188 66.89062 425.53125 27.57812 c 425.53125 27.57812 368.65625 -11.71875 283.20312 -11.71875 c 283.20312 -11.71875 147.95312 -11.71875 83.01562 76.65625 c 83.01562 76.65625 31.73437 147.46875 31.73437 255.375 c 31.73437 255.375 31.73437 384.28125 99.10938 457.28125 c 99.10938 457.28125 166.5 530.28125 269.53125 530.28125 c 269.53125 530.28125 385.25 530.28125 452.14062 453.85938 c 452.14062 453.85938 519.04688 377.4375 516.10938 219.73438 c 516.10938 219.73438 172.35938 219.73438 172.35938 219.73438 c 172.35938 219.73438 173.82812 158.6875 205.5625 124.75 c 205.5625 124.75 237.3125 90.82812 284.67188 90.82812 c 284.67188 90.82812 316.89062 90.82812 338.85938 108.40625 c 338.85938 108.40625 360.84375 125.98438 372.07812 165.04688 c 372.07812 165.04688 372.07812 165.04688 372.07812 165.04688 c h 379.89062 303.71875 m 379.89062 303.71875 378.42188 363.28125 349.125 394.28125 c 349.125 394.28125 319.82812 425.29688 277.82812 425.29688 c 277.82812 425.29688 232.90625 425.29688 203.60938 392.57812 c 203.60938 392.57812 174.3125 359.85938 174.8125 303.71875 c 174.8125 303.71875 379.89062 303.71875 379.89062 303.71875 c h f* Q } def /f { 362 0 12 0 362 728 setcachedevice q 11.71875 518.5625 m 11.71875 518.5625 87.89062 518.5625 87.89062 518.5625 c 87.89062 518.5625 87.89062 557.625 87.89062 557.625 c 87.89062 557.625 87.89062 623.04688 101.79688 655.26562 c 101.79688 655.26562 115.71875 687.5 153.07812 707.76562 c 153.07812 707.76562 190.4375 728.03125 247.5625 728.03125 c 247.5625 728.03125 306.15625 728.03125 362.3125 710.45312 c 362.3125 710.45312 343.75 614.75 343.75 614.75 c 343.75 614.75 311.03125 622.5625 280.76562 622.5625 c 280.76562 622.5625 250.98438 622.5625 238.03125 608.64062 c 238.03125 608.64062 225.09375 594.73438 225.09375 555.17188 c 225.09375 555.17188 225.09375 518.5625 225.09375 518.5625 c 225.09375 518.5625 327.64062 518.5625 327.64062 518.5625 c 327.64062 518.5625 327.64062 410.64062 327.64062 410.64062 c 327.64062 410.64062 225.09375 410.64062 225.09375 410.64062 c 225.09375 410.64062 225.09375 0 225.09375 0 c 225.09375 0 87.89062 0 87.89062 0 c 87.89062 0 87.89062 410.64062 87.89062 410.64062 c 87.89062 410.64062 11.71875 410.64062 11.71875 410.64062 c 11.71875 410.64062 11.71875 518.5625 11.71875 518.5625 c h f* Q } def /g { 547 0 41 -210 547 530 setcachedevice q 59.07812 -34.1875 m 59.07812 -34.1875 215.82812 -53.21875 215.82812 -53.21875 c 215.82812 -53.21875 219.73438 -80.5625 233.89062 -90.82812 c 233.89062 -90.82812 253.42188 -105.46875 295.40625 -105.46875 c 295.40625 -105.46875 349.125 -105.46875 375.98438 -89.35938 c 375.98438 -89.35938 394.04688 -78.60938 403.32812 -54.6875 c 403.32812 -54.6875 409.67188 -37.59375 409.67188 8.29687 c 409.67188 8.29687 409.67188 83.98438 409.67188 83.98438 c 409.67188 83.98438 348.14062 0 254.39062 0 c 254.39062 0 149.90625 0 88.875 88.375 c 88.875 88.375 41.01562 158.20312 41.01562 262.20312 c 41.01562 262.20312 41.01562 392.57812 103.75 461.42188 c 103.75 461.42188 166.5 530.28125 259.76562 530.28125 c 259.76562 530.28125 355.95312 530.28125 418.45312 445.79688 c 418.45312 445.79688 418.45312 518.5625 418.45312 518.5625 c 418.45312 518.5625 546.875 518.5625 546.875 518.5625 c 546.875 518.5625 546.875 53.21875 546.875 53.21875 c 546.875 53.21875 546.875 -38.57812 531.73438 -83.98438 c 531.73438 -83.98438 516.60938 -129.39062 489.26562 -155.26562 c 489.26562 -155.26562 461.92188 -181.15625 416.26563 -195.79688 c 416.26563 -195.79688 370.60938 -210.45312 300.78125 -210.45312 c 300.78125 -210.45312 168.95312 -210.45312 113.76562 -165.28125 c 113.76562 -165.28125 58.59375 -120.125 58.59375 -50.78125 c 58.59375 -50.78125 58.59375 -43.95312 59.07812 -34.1875 c 59.07812 -34.1875 59.07812 -34.1875 59.07812 -34.1875 c h 181.64062 270.01562 m 181.64062 270.01562 181.64062 187.5 213.625 149.17188 c 213.625 149.17188 245.60938 110.84375 292.48438 110.84375 c 292.48438 110.84375 342.78125 110.84375 377.4375 150.14062 c 377.4375 150.14062 412.10938 189.45312 412.10938 266.60938 c 412.10938 266.60938 412.10938 347.17188 378.90625 386.23438 c 378.90625 386.23438 345.70312 425.29688 294.92188 425.29688 c 294.92188 425.29688 245.60938 425.29688 213.625 386.96875 c 213.625 386.96875 181.64062 348.64062 181.64062 270.01562 c h f* Q } def /h { 543 0 71 0 543 716 setcachedevice q 208.5 715.82812 m 208.5 715.82812 208.5 452.64062 208.5 452.64062 c 208.5 452.64062 274.90625 530.28125 367.1875 530.28125 c 367.1875 530.28125 414.54688 530.28125 452.625 512.70312 c 452.625 512.70312 490.71875 495.125 510 467.78125 c 510 467.78125 529.29688 440.4375 536.375 407.23438 c 536.375 407.23438 543.45312 374.03125 543.45312 304.20312 c 543.45312 304.20312 543.45312 0 543.45312 0 c 543.45312 0 406.25 0 406.25 0 c 406.25 0 406.25 273.92188 406.25 273.92188 c 406.25 273.92188 406.25 355.46875 398.4375 377.4375 c 398.4375 377.4375 390.625 399.42188 370.84375 412.35938 c 370.84375 412.35938 351.07812 425.29688 321.29688 425.29688 c 321.29688 425.29688 287.10938 425.29688 260.25 408.6875 c 260.25 408.6875 233.40625 392.09375 220.95312 358.64062 c 220.95312 358.64062 208.5 325.20312 208.5 259.76562 c 208.5 259.76562 208.5 0 208.5 0 c 208.5 0 71.29688 0 71.29688 0 c 71.29688 0 71.29688 715.82812 71.29688 715.82812 c 71.29688 715.82812 208.5 715.82812 208.5 715.82812 c h f* Q } def /i { 209 0 72 0 209 716 setcachedevice q 71.78125 588.875 m 71.78125 588.875 71.78125 715.82812 71.78125 715.82812 c 71.78125 715.82812 208.98438 715.82812 208.98438 715.82812 c 208.98438 715.82812 208.98438 588.875 208.98438 588.875 c 208.98438 588.875 71.78125 588.875 71.78125 588.875 c 71.78125 588.875 71.78125 588.875 71.78125 588.875 c h 71.78125 0 m 71.78125 0 71.78125 518.5625 71.78125 518.5625 c 71.78125 518.5625 208.98438 518.5625 208.98438 518.5625 c 208.98438 518.5625 208.98438 0 208.98438 0 c 208.98438 0 71.78125 0 71.78125 0 c h f* Q } def /l { 209 0 72 0 209 716 setcachedevice q 71.78125 0 m 71.78125 0 71.78125 715.82812 71.78125 715.82812 c 71.78125 715.82812 208.98438 715.82812 208.98438 715.82812 c 208.98438 715.82812 208.98438 0 208.98438 0 c 208.98438 0 71.78125 0 71.78125 0 c h f* Q } def /n { 543 0 71 0 543 530 setcachedevice q 543.45312 0 m 543.45312 0 406.25 0 406.25 0 c 406.25 0 406.25 264.65625 406.25 264.65625 c 406.25 264.65625 406.25 348.64062 397.45312 373.29688 c 397.45312 373.29688 388.67188 397.95312 368.89062 411.625 c 368.89062 411.625 349.125 425.29688 321.29688 425.29688 c 321.29688 425.29688 285.64062 425.29688 257.3125 405.76562 c 257.3125 405.76562 229 386.23438 218.5 354 c 218.5 354 208.01562 321.78125 208.01562 234.85938 c 208.01562 234.85938 208.01562 0 208.01562 0 c 208.01562 0 70.79688 0 70.79688 0 c 70.79688 0 70.79688 518.5625 70.79688 518.5625 c 70.79688 518.5625 198.25 518.5625 198.25 518.5625 c 198.25 518.5625 198.25 442.39062 198.25 442.39062 c 198.25 442.39062 266.10938 530.28125 369.14062 530.28125 c 369.14062 530.28125 414.54688 530.28125 452.14062 513.92188 c 452.14062 513.92188 489.75 497.5625 509.03125 472.17188 c 509.03125 472.17188 528.32812 446.78125 535.89062 414.54688 c 535.89062 414.54688 543.45312 382.32812 543.45312 322.26562 c 543.45312 322.26562 543.45312 0 543.45312 0 c h f* Q } def /o { 575 0 40 -12 575 530 setcachedevice q 40.04688 266.60938 m 40.04688 266.60938 40.04688 334.96875 73.73438 398.92188 c 73.73438 398.92188 107.42188 462.89062 169.1875 496.57812 c 169.1875 496.57812 230.95312 530.28125 307.125 530.28125 c 307.125 530.28125 424.8125 530.28125 500 453.85938 c 500 453.85938 575.20312 377.4375 575.20312 260.75 c 575.20312 260.75 575.20312 143.0625 499.26563 65.67188 c 499.26563 65.67188 423.34375 -11.71875 308.10938 -11.71875 c 308.10938 -11.71875 236.8125 -11.71875 172.10938 20.5 c 172.10938 20.5 107.42188 52.73438 73.73438 114.98438 c 73.73438 114.98438 40.04688 177.25 40.04688 266.60938 c 40.04688 266.60938 40.04688 266.60938 40.04688 266.60938 c h 180.67188 259.28125 m 180.67188 259.28125 180.67188 182.125 217.28125 141.10937 c 217.28125 141.10937 253.90625 100.09375 307.625 100.09375 c 307.625 100.09375 361.32812 100.09375 397.70312 141.10937 c 397.70312 141.10937 434.07812 182.125 434.07812 260.25 c 434.07812 260.25 434.07812 336.42188 397.70312 377.4375 c 397.70312 377.4375 361.32812 418.45312 307.625 418.45312 c 307.625 418.45312 253.90625 418.45312 217.28125 377.4375 c 217.28125 377.4375 180.67188 336.42188 180.67188 259.28125 c h f* Q } def /p { 574 0 68 -197 574 530 setcachedevice q 67.875 518.5625 m 67.875 518.5625 195.79688 518.5625 195.79688 518.5625 c 195.79688 518.5625 195.79688 442.39062 195.79688 442.39062 c 195.79688 442.39062 220.70312 481.45312 263.1875 505.85938 c 263.1875 505.85938 305.67188 530.28125 357.42188 530.28125 c 357.42188 530.28125 447.75 530.28125 510.73438 459.46875 c 510.73438 459.46875 573.73438 388.67188 573.73438 262.20312 c 573.73438 262.20312 573.73438 132.32813 510.25 60.29688 c 510.25 60.29688 446.78125 -11.71875 356.45312 -11.71875 c 356.45312 -11.71875 313.48438 -11.71875 278.5625 5.375 c 278.5625 5.375 243.65625 22.46875 205.07812 63.96875 c 205.07812 63.96875 205.07812 -197.26562 205.07812 -197.26562 c 205.07812 -197.26562 67.875 -197.26562 67.875 -197.26562 c 67.875 -197.26562 67.875 518.5625 67.875 518.5625 c 67.875 518.5625 67.875 518.5625 67.875 518.5625 c h 203.60938 268.0625 m 203.60938 268.0625 203.60938 180.67188 238.28125 138.92188 c 238.28125 138.92188 272.95312 97.17188 322.75 97.17188 c 322.75 97.17188 370.60938 97.17188 402.34375 135.5 c 402.34375 135.5 434.07812 173.82812 434.07812 261.23438 c 434.07812 261.23438 434.07812 342.78125 401.35938 382.32812 c 401.35938 382.32812 368.65625 421.875 320.3125 421.875 c 320.3125 421.875 270.01562 421.875 236.8125 383.04688 c 236.8125 383.04688 203.60938 344.23438 203.60938 268.0625 c h f* Q } def /r { 402 0 66 0 402 530 setcachedevice q 203.125 0 m 203.125 0 65.92188 0 65.92188 0 c 65.92188 0 65.92188 518.5625 65.92188 518.5625 c 65.92188 518.5625 193.35938 518.5625 193.35938 518.5625 c 193.35938 518.5625 193.35938 444.82812 193.35938 444.82812 c 193.35938 444.82812 226.07812 497.07812 252.20312 513.67188 c 252.20312 513.67188 278.32812 530.28125 311.53125 530.28125 c 311.53125 530.28125 358.40625 530.28125 401.85938 504.39062 c 401.85938 504.39062 359.375 384.76562 359.375 384.76562 c 359.375 384.76562 324.70312 407.23438 294.92188 407.23438 c 294.92188 407.23438 266.10938 407.23438 246.09375 391.35938 c 246.09375 391.35938 226.07812 375.48438 214.59375 333.98438 c 214.59375 333.98438 203.125 292.48438 203.125 160.15625 c 203.125 160.15625 203.125 0 203.125 0 c h f* Q } def /t { 321 0 15 -12 321 702 setcachedevice q 309.57812 518.5625 m 309.57812 518.5625 309.57812 409.1875 309.57812 409.1875 c 309.57812 409.1875 215.82812 409.1875 215.82812 409.1875 c 215.82812 409.1875 215.82812 200.20312 215.82812 200.20312 c 215.82812 200.20312 215.82812 136.71875 218.5 126.21875 c 218.5 126.21875 221.1875 115.71875 230.70312 108.875 c 230.70312 108.875 240.23438 102.04687 253.90625 102.04687 c 253.90625 102.04687 272.95312 102.04687 309.07812 115.23438 c 309.07812 115.23438 320.79688 8.79688 320.79688 8.79688 c 320.79688 8.79688 272.95312 -11.71875 212.40625 -11.71875 c 212.40625 -11.71875 175.29688 -11.71875 145.5 0.73438 c 145.5 0.73438 115.71875 13.1875 101.79688 32.95312 c 101.79688 32.95312 87.89062 52.73438 82.51562 86.42187 c 82.51562 86.42187 78.125 110.35938 78.125 183.10938 c 78.125 183.10938 78.125 409.1875 78.125 409.1875 c 78.125 409.1875 15.14062 409.1875 15.14062 409.1875 c 15.14062 409.1875 15.14062 518.5625 15.14062 518.5625 c 15.14062 518.5625 78.125 518.5625 78.125 518.5625 c 78.125 518.5625 78.125 621.57812 78.125 621.57812 c 78.125 621.57812 215.82812 701.65625 215.82812 701.65625 c 215.82812 701.65625 215.82812 518.5625 215.82812 518.5625 c 215.82812 518.5625 309.57812 518.5625 309.57812 518.5625 c h f* Q } def /u { 541 0 69 -12 541 519 setcachedevice q 413.09375 0 m 413.09375 0 413.09375 77.64063 413.09375 77.64063 c 413.09375 77.64063 384.76562 36.14062 338.625 12.20312 c 338.625 12.20312 292.48438 -11.71875 241.21875 -11.71875 c 241.21875 -11.71875 188.96875 -11.71875 147.45312 11.23438 c 147.45312 11.23438 105.95312 34.1875 87.39062 75.6875 c 87.39062 75.6875 68.84375 117.1875 68.84375 190.4375 c 68.84375 190.4375 68.84375 518.5625 68.84375 518.5625 c 68.84375 518.5625 206.0625 518.5625 206.0625 518.5625 c 206.0625 518.5625 206.0625 280.28125 206.0625 280.28125 c 206.0625 280.28125 206.0625 170.90625 213.625 146.23438 c 213.625 146.23438 221.1875 121.57812 241.20312 107.17188 c 241.20312 107.17188 261.23438 92.78125 292 92.78125 c 292 92.78125 327.15625 92.78125 354.98438 112.0625 c 354.98438 112.0625 382.8125 131.34375 393.0625 159.90625 c 393.0625 159.90625 403.32812 188.48438 403.32812 299.8125 c 403.32812 299.8125 403.32812 518.5625 403.32812 518.5625 c 403.32812 518.5625 540.53125 518.5625 540.53125 518.5625 c 540.53125 518.5625 540.53125 0 540.53125 0 c 540.53125 0 413.09375 0 413.09375 0 c h f* Q } def /w { 777 0 4 0 777 519 setcachedevice q 168.45312 0 m 168.45312 0 4.39062 518.5625 4.39062 518.5625 c 4.39062 518.5625 137.70312 518.5625 137.70312 518.5625 c 137.70312 518.5625 234.85938 178.71875 234.85938 178.71875 c 234.85938 178.71875 324.21875 518.5625 324.21875 518.5625 c 324.21875 518.5625 456.54688 518.5625 456.54688 518.5625 c 456.54688 518.5625 542.96875 178.71875 542.96875 178.71875 c 542.96875 178.71875 642.09375 518.5625 642.09375 518.5625 c 642.09375 518.5625 777.34375 518.5625 777.34375 518.5625 c 777.34375 518.5625 610.84375 0 610.84375 0 c 610.84375 0 479 0 479 0 c 479 0 389.65625 333.5 389.65625 333.5 c 389.65625 333.5 301.76562 0 301.76562 0 c 301.76562 0 168.45312 0 168.45312 0 c h f* Q } def /y { 540 0 7 -210 540 519 setcachedevice q 6.84375 518.5625 m 6.84375 518.5625 152.82812 518.5625 152.82812 518.5625 c 152.82812 518.5625 276.85938 150.39062 276.85938 150.39062 c 276.85938 150.39062 397.95312 518.5625 397.95312 518.5625 c 397.95312 518.5625 540.04688 518.5625 540.04688 518.5625 c 540.04688 518.5625 356.9375 19.53125 356.9375 19.53125 c 356.9375 19.53125 324.21875 -70.79688 324.21875 -70.79688 c 324.21875 -70.79688 306.15625 -116.21875 289.79688 -140.14062 c 289.79688 -140.14062 273.4375 -164.0625 252.1875 -178.95312 c 252.1875 -178.95312 230.95312 -193.84375 199.95312 -202.14062 c 199.95312 -202.14062 168.95312 -210.45312 129.89062 -210.45312 c 129.89062 -210.45312 90.32812 -210.45312 52.25 -202.15625 c 52.25 -202.15625 40.04688 -94.73438 40.04688 -94.73438 c 40.04688 -94.73438 72.26562 -101.07812 98.14062 -101.07812 c 98.14062 -101.07812 146 -101.07812 168.9375 -73 c 168.9375 -73 191.89062 -44.92188 204.10938 -1.46875 c 204.10938 -1.46875 6.84375 518.5625 6.84375 518.5625 c h f* Q } def end currentdict end /T3_35_0 exch definefont pop %%EndResource /F35_0 /T3_35_0 1 1 [ /B/C/G/M/R/T/Y/a /d/e/f/g/h/i/l/n /o/p/r/t/u/w/y/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/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 /quoteleft/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/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont %%BeginResource: font T3_82_0 8 dict begin /FontType 3 def /FontMatrix [0.001 0 0 0.001 0 0] def /FontBBox [-46 -210 769 729] def /Encoding 256 array def 0 1 255 { Encoding exch /.notdef put } for /BuildGlyph { exch /CharProcs get exch 2 copy known not { pop /.notdef } if get exec } bind def /BuildChar { 1 index /Encoding get exch get 1 index /BuildGlyph get exec } bind def /CharProcs 43 dict def CharProcs begin /comma { 189 0 83 -142 189 100 setcachedevice q 88.875 0 m 88.875 0 88.875 100.09375 88.875 100.09375 c 88.875 100.09375 188.96875 100.09375 188.96875 100.09375 c 188.96875 100.09375 188.96875 0 188.96875 0 c 188.96875 0 188.96875 -55.17188 169.4375 -89.10938 c 169.4375 -89.10938 149.90625 -123.04688 107.42188 -141.60938 c 107.42188 -141.60938 83.01562 -104 83.01562 -104 c 83.01562 -104 110.84375 -91.79688 124.01562 -68.10938 c 124.01562 -68.10938 137.20312 -44.4375 138.67188 0 c 138.67188 0 88.875 0 88.875 0 c h f* Q } def /hyphen { 302 0 32 215 302 303 setcachedevice q 31.73437 214.84375 m 31.73437 214.84375 31.73437 303.21875 31.73437 303.21875 c 31.73437 303.21875 301.76562 303.21875 301.76562 303.21875 c 301.76562 303.21875 301.76562 214.84375 301.76562 214.84375 c 301.76562 214.84375 31.73437 214.84375 31.73437 214.84375 c h f* Q } def /period { 191 0 91 0 191 100 setcachedevice q 90.82812 0 m 90.82812 0 90.82812 100.09375 90.82812 100.09375 c 90.82812 100.09375 190.92188 100.09375 190.92188 100.09375 c 190.92188 100.09375 190.92188 0 190.92188 0 c 190.92188 0 90.82812 0 90.82812 0 c h f* Q } def /one { 373 0 109 0 373 719 setcachedevice q 372.5625 0 m 372.5625 0 284.67188 0 284.67188 0 c 284.67188 0 284.67188 560.0625 284.67188 560.0625 c 284.67188 560.0625 252.9375 529.78125 201.42188 499.5 c 201.42188 499.5 149.90625 469.23438 108.89062 454.10938 c 108.89062 454.10938 108.89062 539.0625 108.89062 539.0625 c 108.89062 539.0625 182.625 573.73438 237.79688 623.04688 c 237.79688 623.04688 292.96875 672.35938 315.92188 718.75 c 315.92188 718.75 372.5625 718.75 372.5625 718.75 c 372.5625 718.75 372.5625 0 372.5625 0 c h f* Q } def /two { 503 0 29 0 503 719 setcachedevice q 503.42188 84.46875 m 503.42188 84.46875 503.42188 0 503.42188 0 c 503.42188 0 30.28125 0 30.28125 0 c 30.28125 0 29.29688 31.73437 40.53125 61.03125 c 40.53125 61.03125 58.59375 109.375 98.39062 156.25 c 98.39062 156.25 138.1875 203.125 213.375 264.65625 c 213.375 264.65625 330.07812 360.35938 371.09375 416.26562 c 371.09375 416.26562 412.10938 472.17188 412.10938 521.96875 c 412.10938 521.96875 412.10938 574.21875 374.75 610.10938 c 374.75 610.10938 337.40625 646 277.34375 646 c 277.34375 646 213.875 646 175.78125 607.90625 c 175.78125 607.90625 137.70312 569.82812 137.20312 502.4375 c 137.20312 502.4375 46.875 511.71875 46.875 511.71875 c 46.875 511.71875 56.15625 612.79688 116.70312 665.76562 c 116.70312 665.76562 177.25 718.75 279.29688 718.75 c 279.29688 718.75 382.32812 718.75 442.375 661.625 c 442.375 661.625 502.4375 604.5 502.4375 520.01562 c 502.4375 520.01562 502.4375 477.04688 484.85938 435.54688 c 484.85938 435.54688 467.28125 394.04688 426.51563 348.14062 c 426.51563 348.14062 385.75 302.25 291.01562 222.17188 c 291.01562 222.17188 211.92188 155.76563 189.45312 132.07812 c 189.45312 132.07812 167 108.40625 152.34375 84.46875 c 152.34375 84.46875 503.42188 84.46875 503.42188 84.46875 c h f* Q } def /three { 511 0 42 -13 511 719 setcachedevice q 42 188.96875 m 42 188.96875 129.89062 200.6875 129.89062 200.6875 c 129.89062 200.6875 145.01562 125.98438 181.39062 93.01562 c 181.39062 93.01562 217.78125 60.0625 270.01562 60.0625 c 270.01562 60.0625 332.03125 60.0625 374.75 103.03125 c 374.75 103.03125 417.48438 146 417.48438 209.46875 c 417.48438 209.46875 417.48438 270.01562 377.92188 309.32812 c 377.92188 309.32812 338.375 348.64062 277.34375 348.64062 c 277.34375 348.64062 252.4375 348.64062 215.32812 338.875 c 215.32812 338.875 225.09375 416.01562 225.09375 416.01562 c 225.09375 416.01562 233.89062 415.04688 239.26562 415.04688 c 239.26562 415.04688 295.40625 415.04688 340.32812 444.34375 c 340.32812 444.34375 385.25 473.64062 385.25 534.67188 c 385.25 534.67188 385.25 583.01562 352.53125 614.75 c 352.53125 614.75 319.82812 646.48438 268.0625 646.48438 c 268.0625 646.48438 216.79688 646.48438 182.60938 614.25 c 182.60938 614.25 148.4375 582.03125 138.67188 517.57812 c 138.67188 517.57812 50.78125 533.20312 50.78125 533.20312 c 50.78125 533.20312 66.89062 621.57812 124.01562 670.15625 c 124.01562 670.15625 181.15625 718.75 266.10938 718.75 c 266.10938 718.75 324.70312 718.75 374.01562 693.59375 c 374.01562 693.59375 423.34375 668.45312 449.46875 625 c 449.46875 625 475.59375 581.54688 475.59375 532.71875 c 475.59375 532.71875 475.59375 486.32812 450.6875 448.23438 c 450.6875 448.23438 425.78125 410.15625 376.95312 387.70312 c 376.95312 387.70312 440.4375 373.04688 475.59375 326.90625 c 475.59375 326.90625 510.75 280.76562 510.75 211.42188 c 510.75 211.42188 510.75 117.67187 442.39062 52.48438 c 442.39062 52.48438 374.03125 -12.70312 269.53125 -12.70312 c 269.53125 -12.70312 175.29688 -12.70312 113.03125 43.45312 c 113.03125 43.45312 50.78125 99.60938 42 188.96875 c h f* Q } def /four { 508 0 13 0 508 716 setcachedevice q 323.25 0 m 323.25 0 323.25 171.39063 323.25 171.39063 c 323.25 171.39063 12.70313 171.39063 12.70313 171.39063 c 12.70313 171.39063 12.70313 251.95312 12.70313 251.95312 c 12.70313 251.95312 339.35938 715.82812 339.35938 715.82812 c 339.35938 715.82812 411.14062 715.82812 411.14062 715.82812 c 411.14062 715.82812 411.14062 251.95312 411.14062 251.95312 c 411.14062 251.95312 507.8125 251.95312 507.8125 251.95312 c 507.8125 251.95312 507.8125 171.39063 507.8125 171.39063 c 507.8125 171.39063 411.14062 171.39063 411.14062 171.39063 c 411.14062 171.39063 411.14062 0 411.14062 0 c 411.14062 0 323.25 0 323.25 0 c 323.25 0 323.25 0 323.25 0 c h 323.25 251.95312 m 323.25 251.95312 323.25 574.70312 323.25 574.70312 c 323.25 574.70312 99.125 251.95312 99.125 251.95312 c 99.125 251.95312 323.25 251.95312 323.25 251.95312 c h f* Q } def /semicolon { 189 0 83 -142 189 519 setcachedevice q 88.875 418.45312 m 88.875 418.45312 88.875 518.5625 88.875 518.5625 c 88.875 518.5625 188.96875 518.5625 188.96875 518.5625 c 188.96875 518.5625 188.96875 418.45312 188.96875 418.45312 c 188.96875 418.45312 88.875 418.45312 88.875 418.45312 c 88.875 418.45312 88.875 418.45312 88.875 418.45312 c h 88.875 0 m 88.875 0 88.875 100.09375 88.875 100.09375 c 88.875 100.09375 188.96875 100.09375 188.96875 100.09375 c 188.96875 100.09375 188.96875 0 188.96875 0 c 188.96875 0 188.96875 -55.17188 169.4375 -89.10938 c 169.4375 -89.10938 149.90625 -123.04688 107.42188 -141.60938 c 107.42188 -141.60938 83.01562 -104 83.01562 -104 c 83.01562 -104 110.84375 -91.79688 124.01562 -68.10938 c 124.01562 -68.10938 137.20312 -44.4375 138.67188 0 c 138.67188 0 88.875 0 88.875 0 c h f* Q } def /A { 668 0 -1 0 668 716 setcachedevice q -1.46875 0 m -1.46875 0 273.4375 715.82812 273.4375 715.82812 c 273.4375 715.82812 375.48438 715.82812 375.48438 715.82812 c 375.48438 715.82812 668.45312 0 668.45312 0 c 668.45312 0 560.54688 0 560.54688 0 c 560.54688 0 477.04688 216.79688 477.04688 216.79688 c 477.04688 216.79688 177.73438 216.79688 177.73438 216.79688 c 177.73438 216.79688 99.125 0 99.125 0 c 99.125 0 -1.46875 0 -1.46875 0 c -1.46875 0 -1.46875 0 -1.46875 0 c h 205.07812 293.95312 m 205.07812 293.95312 447.75 293.95312 447.75 293.95312 c 447.75 293.95312 373.04688 492.1875 373.04688 492.1875 c 373.04688 492.1875 338.875 582.51562 322.26562 640.625 c 322.26562 640.625 308.59375 571.78125 283.6875 503.90625 c 283.6875 503.90625 205.07812 293.95312 205.07812 293.95312 c h f* Q } def /C { 683 0 50 -12 683 728 setcachedevice q 587.89062 250.98438 m 587.89062 250.98438 682.625 227.04688 682.625 227.04688 c 682.625 227.04688 652.82812 110.35938 575.4375 49.07812 c 575.4375 49.07812 498.04688 -12.20312 386.23438 -12.20312 c 386.23438 -12.20312 270.51562 -12.20312 198 34.90625 c 198 34.90625 125.48438 82.03125 87.64062 171.39063 c 87.64062 171.39063 49.8125 260.75 49.8125 363.28125 c 49.8125 363.28125 49.8125 475.09375 92.53125 558.34375 c 92.53125 558.34375 135.25 641.60938 214.10938 684.8125 c 214.10938 684.8125 292.96875 728.03125 387.70312 728.03125 c 387.70312 728.03125 495.125 728.03125 568.35938 673.34375 c 568.35938 673.34375 641.60938 618.65625 670.40625 519.53125 c 670.40625 519.53125 577.15625 497.5625 577.15625 497.5625 c 577.15625 497.5625 552.25 575.6875 504.875 611.32812 c 504.875 611.32812 457.51562 646.96875 385.75 646.96875 c 385.75 646.96875 303.21875 646.96875 247.79688 607.42188 c 247.79688 607.42188 192.39063 567.875 169.92188 501.21875 c 169.92188 501.21875 147.46875 434.57812 147.46875 363.76562 c 147.46875 363.76562 147.46875 272.46875 174.07812 204.34375 c 174.07812 204.34375 200.6875 136.23438 256.82812 102.53125 c 256.82812 102.53125 312.98438 68.84375 378.42188 68.84375 c 378.42188 68.84375 458.01562 68.84375 513.1875 114.73438 c 513.1875 114.73438 568.35938 160.64062 587.89062 250.98438 c h f* Q } def /D { 669 0 77 0 669 716 setcachedevice q 77.15625 0 m 77.15625 0 77.15625 715.82812 77.15625 715.82812 c 77.15625 715.82812 323.73438 715.82812 323.73438 715.82812 c 323.73438 715.82812 407.23438 715.82812 451.17188 705.5625 c 451.17188 705.5625 512.70312 691.40625 556.15625 654.29688 c 556.15625 654.29688 612.79688 606.45312 640.875 531.98438 c 640.875 531.98438 668.95312 457.51562 668.95312 361.8125 c 668.95312 361.8125 668.95312 280.28125 649.90625 217.28125 c 649.90625 217.28125 630.85938 154.29688 601.07812 113.03125 c 601.07812 113.03125 571.29688 71.78125 535.89062 48.09375 c 535.89062 48.09375 500.48438 24.42188 450.4375 12.20312 c 450.4375 12.20312 400.39062 0 335.45312 0 c 335.45312 0 77.15625 0 77.15625 0 c 77.15625 0 77.15625 0 77.15625 0 c h 171.875 84.46875 m 171.875 84.46875 324.70312 84.46875 324.70312 84.46875 c 324.70312 84.46875 395.51562 84.46875 435.79688 97.65625 c 435.79688 97.65625 476.07812 110.84375 500 134.76562 c 500 134.76562 533.6875 168.45312 552.48438 225.34375 c 552.48438 225.34375 571.29688 282.23438 571.29688 363.28125 c 571.29688 363.28125 571.29688 475.59375 534.42188 535.89062 c 534.42188 535.89062 497.5625 596.1875 444.82812 616.70312 c 444.82812 616.70312 406.73438 631.34375 322.26562 631.34375 c 322.26562 631.34375 171.875 631.34375 171.875 631.34375 c 171.875 631.34375 171.875 84.46875 171.875 84.46875 c h f* Q } def /E { 613 0 79 0 613 716 setcachedevice q 79.10938 0 m 79.10938 0 79.10938 715.82812 79.10938 715.82812 c 79.10938 715.82812 596.6875 715.82812 596.6875 715.82812 c 596.6875 715.82812 596.6875 631.34375 596.6875 631.34375 c 596.6875 631.34375 173.82812 631.34375 173.82812 631.34375 c 173.82812 631.34375 173.82812 412.10938 173.82812 412.10938 c 173.82812 412.10938 569.82812 412.10938 569.82812 412.10938 c 569.82812 412.10938 569.82812 328.125 569.82812 328.125 c 569.82812 328.125 173.82812 328.125 173.82812 328.125 c 173.82812 328.125 173.82812 84.46875 173.82812 84.46875 c 173.82812 84.46875 613.28125 84.46875 613.28125 84.46875 c 613.28125 84.46875 613.28125 0 613.28125 0 c 613.28125 0 79.10938 0 79.10938 0 c h f* Q } def /F { 565 0 82 0 565 716 setcachedevice q 82.03125 0 m 82.03125 0 82.03125 715.82812 82.03125 715.82812 c 82.03125 715.82812 564.9375 715.82812 564.9375 715.82812 c 564.9375 715.82812 564.9375 631.34375 564.9375 631.34375 c 564.9375 631.34375 176.76562 631.34375 176.76562 631.34375 c 176.76562 631.34375 176.76562 409.67188 176.76562 409.67188 c 176.76562 409.67188 512.70312 409.67188 512.70312 409.67188 c 512.70312 409.67188 512.70312 325.20312 512.70312 325.20312 c 512.70312 325.20312 176.76562 325.20312 176.76562 325.20312 c 176.76562 325.20312 176.76562 0 176.76562 0 c 176.76562 0 82.03125 0 82.03125 0 c h f* Q } def /I { 188 0 93 0 188 716 setcachedevice q 93.26562 0 m 93.26562 0 93.26562 715.82812 93.26562 715.82812 c 93.26562 715.82812 187.98438 715.82812 187.98438 715.82812 c 187.98438 715.82812 187.98438 0 187.98438 0 c 187.98438 0 93.26562 0 93.26562 0 c h f* Q } def /L { 521 0 73 0 521 716 setcachedevice q 73.25 0 m 73.25 0 73.25 715.82812 73.25 715.82812 c 73.25 715.82812 167.96875 715.82812 167.96875 715.82812 c 167.96875 715.82812 167.96875 84.46875 167.96875 84.46875 c 167.96875 84.46875 520.51562 84.46875 520.51562 84.46875 c 520.51562 84.46875 520.51562 0 520.51562 0 c 520.51562 0 73.25 0 73.25 0 c h f* Q } def /M { 757 0 74 0 757 716 setcachedevice q 74.21875 0 m 74.21875 0 74.21875 715.82812 74.21875 715.82812 c 74.21875 715.82812 216.79688 715.82812 216.79688 715.82812 c 216.79688 715.82812 386.23438 208.98438 386.23438 208.98438 c 386.23438 208.98438 409.67188 138.1875 420.40625 103.03125 c 420.40625 103.03125 432.625 142.09375 458.5 217.78125 c 458.5 217.78125 629.89062 715.82812 629.89062 715.82812 c 629.89062 715.82812 757.32812 715.82812 757.32812 715.82812 c 757.32812 715.82812 757.32812 0 757.32812 0 c 757.32812 0 666.01562 0 666.01562 0 c 666.01562 0 666.01562 599.125 666.01562 599.125 c 666.01562 599.125 458.01562 0 458.01562 0 c 458.01562 0 372.5625 0 372.5625 0 c 372.5625 0 165.53125 609.375 165.53125 609.375 c 165.53125 609.375 165.53125 0 165.53125 0 c 165.53125 0 74.21875 0 74.21875 0 c h f* Q } def /N { 640 0 76 0 640 716 setcachedevice q 76.17188 0 m 76.17188 0 76.17188 715.82812 76.17188 715.82812 c 76.17188 715.82812 173.34375 715.82812 173.34375 715.82812 c 173.34375 715.82812 549.3125 153.8125 549.3125 153.8125 c 549.3125 153.8125 549.3125 715.82812 549.3125 715.82812 c 549.3125 715.82812 640.14062 715.82812 640.14062 715.82812 c 640.14062 715.82812 640.14062 0 640.14062 0 c 640.14062 0 542.96875 0 542.96875 0 c 542.96875 0 167 562.5 167 562.5 c 167 562.5 167 0 167 0 c 167 0 76.17188 0 76.17188 0 c h f* Q } def /P { 624 0 77 0 624 716 setcachedevice q 77.15625 0 m 77.15625 0 77.15625 715.82812 77.15625 715.82812 c 77.15625 715.82812 347.17188 715.82812 347.17188 715.82812 c 347.17188 715.82812 418.45312 715.82812 456.0625 708.98438 c 456.0625 708.98438 508.79688 700.20312 544.4375 675.53125 c 544.4375 675.53125 580.07812 650.875 601.79688 606.4375 c 601.79688 606.4375 623.53125 562.01562 623.53125 508.79688 c 623.53125 508.79688 623.53125 417.48438 565.42188 354.25 c 565.42188 354.25 507.32812 291.01562 355.46875 291.01562 c 355.46875 291.01562 171.875 291.01562 171.875 291.01562 c 171.875 291.01562 171.875 0 171.875 0 c 171.875 0 77.15625 0 77.15625 0 c 77.15625 0 77.15625 0 77.15625 0 c h 171.875 375.48438 m 171.875 375.48438 356.9375 375.48438 356.9375 375.48438 c 356.9375 375.48438 448.73438 375.48438 487.29688 409.65625 c 487.29688 409.65625 525.875 443.84375 525.875 505.85938 c 525.875 505.85938 525.875 550.78125 503.17188 582.76562 c 503.17188 582.76562 480.46875 614.75 443.35938 625 c 443.35938 625 419.4375 631.34375 354.98438 631.34375 c 354.98438 631.34375 171.875 631.34375 171.875 631.34375 c 171.875 631.34375 171.875 375.48438 171.875 375.48438 c h f* Q } def /Q { 741 0 43 -56 741 729 setcachedevice q 619.625 76.65625 m 619.625 76.65625 685.54688 31.25 741.21875 10.25 c 741.21875 10.25 713.375 -55.67188 713.375 -55.67188 c 713.375 -55.67188 636.23438 -27.82812 559.57812 32.23438 c 559.57812 32.23438 479.98438 -12.20312 383.79688 -12.20312 c 383.79688 -12.20312 286.625 -12.20312 207.51562 34.67188 c 207.51562 34.67188 128.42188 81.54688 85.6875 166.5 c 85.6875 166.5 42.96875 251.46875 42.96875 357.90625 c 42.96875 357.90625 42.96875 463.875 85.9375 550.78125 c 85.9375 550.78125 128.90625 637.70312 208.25 683.10938 c 208.25 683.10938 287.59375 728.51562 385.75 728.51562 c 385.75 728.51562 484.85938 728.51562 564.45312 681.39062 c 564.45312 681.39062 644.04688 634.28125 685.79688 549.5625 c 685.79688 549.5625 727.54688 464.84375 727.54688 358.40625 c 727.54688 358.40625 727.54688 270.01562 700.6875 199.45312 c 700.6875 199.45312 673.82812 128.90625 619.625 76.65625 c 619.625 76.65625 619.625 76.65625 619.625 76.65625 c h 411.14062 197.75 m 411.14062 197.75 493.17188 174.8125 546.39062 129.39062 c 546.39062 129.39062 629.89062 205.5625 629.89062 358.40625 c 629.89062 358.40625 629.89062 445.3125 600.34375 510.25 c 600.34375 510.25 570.79688 575.20312 513.90625 611.07812 c 513.90625 611.07812 457.03125 646.96875 386.23438 646.96875 c 386.23438 646.96875 280.28125 646.96875 210.45312 574.45312 c 210.45312 574.45312 140.625 501.95312 140.625 357.90625 c 140.625 357.90625 140.625 218.26562 209.71875 143.54688 c 209.71875 143.54688 278.8125 68.84375 386.23438 68.84375 c 386.23438 68.84375 437.01562 68.84375 481.9375 87.89062 c 481.9375 87.89062 437.5 116.70313 388.1875 128.90625 c 388.1875 128.90625 411.14062 197.75 411.14062 197.75 c h f* Q } def /S { 615 0 45 -12 615 728 setcachedevice q 44.92188 229.98438 m 44.92188 229.98438 134.28125 237.79688 134.28125 237.79688 c 134.28125 237.79688 140.625 184.07812 163.8125 149.65625 c 163.8125 149.65625 187.01562 115.23438 235.84375 93.98438 c 235.84375 93.98438 284.67188 72.75 345.70312 72.75 c 345.70312 72.75 399.90625 72.75 441.40625 88.85938 c 441.40625 88.85938 482.90625 104.98438 503.17188 133.0625 c 503.17188 133.0625 523.4375 161.14062 523.4375 194.34375 c 523.4375 194.34375 523.4375 228.03125 503.90625 253.17188 c 503.90625 253.17188 484.375 278.32812 439.45312 295.40625 c 439.45312 295.40625 410.64062 306.64062 312 330.3125 c 312 330.3125 213.375 354 173.82812 375 c 173.82812 375 122.5625 401.85938 97.40625 441.65625 c 97.40625 441.65625 72.26562 481.45312 72.26562 530.76562 c 72.26562 530.76562 72.26562 584.96875 103.03125 632.07812 c 103.03125 632.07812 133.79688 679.20312 192.875 703.60938 c 192.875 703.60938 251.95312 728.03125 324.21875 728.03125 c 324.21875 728.03125 403.8125 728.03125 464.59375 702.39062 c 464.59375 702.39062 525.39062 676.76562 558.10938 626.95312 c 558.10938 626.95312 590.82812 577.15625 593.26562 514.15625 c 593.26562 514.15625 502.4375 507.32812 502.4375 507.32812 c 502.4375 507.32812 495.125 575.20312 452.875 609.85938 c 452.875 609.85938 410.64062 644.53125 328.125 644.53125 c 328.125 644.53125 242.1875 644.53125 202.875 613.03125 c 202.875 613.03125 163.57812 581.54688 163.57812 537.10938 c 163.57812 537.10938 163.57812 498.53125 191.40625 473.64062 c 191.40625 473.64062 218.75 448.73438 334.21875 422.60938 c 334.21875 422.60938 449.70312 396.48438 492.67188 376.95312 c 492.67188 376.95312 555.17188 348.14062 584.95312 303.95312 c 584.95312 303.95312 614.75 259.76562 614.75 202.15625 c 614.75 202.15625 614.75 145.01562 582.03125 94.48438 c 582.03125 94.48438 549.3125 43.95312 488.03125 15.875 c 488.03125 15.875 426.76562 -12.20312 350.09375 -12.20312 c 350.09375 -12.20312 252.9375 -12.20312 187.25 16.10937 c 187.25 16.10937 121.57812 44.4375 84.21875 101.3125 c 84.21875 101.3125 46.875 158.20312 44.92188 229.98438 c h f* Q } def /U { 642 0 79 -12 642 716 setcachedevice q 546.875 715.82812 m 546.875 715.82812 641.60938 715.82812 641.60938 715.82812 c 641.60938 715.82812 641.60938 302.25 641.60938 302.25 c 641.60938 302.25 641.60938 194.34375 617.1875 130.85938 c 617.1875 130.85938 592.78125 67.39062 529.04688 27.59375 c 529.04688 27.59375 465.32812 -12.20312 361.8125 -12.20312 c 361.8125 -12.20312 261.23438 -12.20312 197.26562 22.45312 c 197.26562 22.45312 133.29688 57.125 105.95312 122.79688 c 105.95312 122.79688 78.60938 188.48438 78.60938 302.25 c 78.60938 302.25 78.60938 715.82812 78.60938 715.82812 c 78.60938 715.82812 173.34375 715.82812 173.34375 715.82812 c 173.34375 715.82812 173.34375 302.73438 173.34375 302.73438 c 173.34375 302.73438 173.34375 209.46875 190.67188 165.28125 c 190.67188 165.28125 208.01562 121.09375 250.25 97.17188 c 250.25 97.17188 292.48438 73.25 353.51562 73.25 c 353.51562 73.25 458.01562 73.25 502.4375 120.60938 c 502.4375 120.60938 546.875 167.96875 546.875 302.73438 c 546.875 302.73438 546.875 715.82812 546.875 715.82812 c h f* Q } def /V { 659 0 4 0 659 716 setcachedevice q 281.73438 0 m 281.73438 0 4.39062 715.82812 4.39062 715.82812 c 4.39062 715.82812 106.9375 715.82812 106.9375 715.82812 c 106.9375 715.82812 292.96875 195.79687 292.96875 195.79687 c 292.96875 195.79687 315.4375 133.29687 330.5625 78.60937 c 330.5625 78.60937 347.17188 137.20312 369.14062 195.79687 c 369.14062 195.79687 562.5 715.82812 562.5 715.82812 c 562.5 715.82812 659.1875 715.82812 659.1875 715.82812 c 659.1875 715.82812 378.90625 0 378.90625 0 c 378.90625 0 281.73438 0 281.73438 0 c h f* Q } def /a { 514 0 36 -12 514 530 setcachedevice q 404.29688 63.96875 m 404.29688 63.96875 355.46875 22.46875 310.29688 5.375 c 310.29688 5.375 265.14062 -11.71875 213.375 -11.71875 c 213.375 -11.71875 127.9375 -11.71875 82.03125 30.03125 c 82.03125 30.03125 36.14062 71.78125 36.14062 136.71875 c 36.14062 136.71875 36.14062 174.8125 53.46875 206.29688 c 53.46875 206.29688 70.79688 237.79688 98.875 256.82812 c 98.875 256.82812 126.95312 275.875 162.10938 285.64062 c 162.10938 285.64062 187.98438 292.48438 240.23438 298.82812 c 240.23438 298.82812 346.6875 311.53125 396.96875 329.10938 c 396.96875 329.10938 397.46875 347.17188 397.46875 352.04688 c 397.46875 352.04688 397.46875 405.76562 372.5625 427.73438 c 372.5625 427.73438 338.875 457.51562 272.46875 457.51562 c 272.46875 457.51562 210.45312 457.51562 180.90625 435.78125 c 180.90625 435.78125 151.375 414.0625 137.20312 358.89062 c 137.20312 358.89062 51.26562 370.60938 51.26562 370.60938 c 51.26562 370.60938 62.98438 425.78125 89.84375 459.71875 c 89.84375 459.71875 116.70312 493.65625 167.48438 511.96875 c 167.48438 511.96875 218.26562 530.28125 285.15625 530.28125 c 285.15625 530.28125 351.5625 530.28125 393.0625 514.65625 c 393.0625 514.65625 434.57812 499.03125 454.10938 475.34375 c 454.10938 475.34375 473.64062 451.65625 481.45312 415.53125 c 481.45312 415.53125 485.84375 393.0625 485.84375 334.46875 c 485.84375 334.46875 485.84375 217.28125 485.84375 217.28125 c 485.84375 217.28125 485.84375 94.73438 491.45313 62.25 c 491.45313 62.25 497.07812 29.78125 513.67188 0 c 513.67188 0 421.875 0 421.875 0 c 421.875 0 408.20312 27.34375 404.29688 63.96875 c 404.29688 63.96875 404.29688 63.96875 404.29688 63.96875 c h 396.96875 260.25 m 396.96875 260.25 349.125 240.71875 253.42188 227.04688 c 253.42188 227.04688 199.21875 219.23438 176.75 209.46875 c 176.75 209.46875 154.29688 199.70312 142.09375 180.90625 c 142.09375 180.90625 129.89062 162.10938 129.89062 139.15625 c 129.89062 139.15625 129.89062 104 156.5 80.5625 c 156.5 80.5625 183.10938 57.125 234.375 57.125 c 234.375 57.125 285.15625 57.125 324.70312 79.34375 c 324.70312 79.34375 364.26562 101.5625 382.8125 140.14063 c 382.8125 140.14063 396.96875 169.92188 396.96875 228.03125 c 396.96875 228.03125 396.96875 260.25 396.96875 260.25 c h f* Q } def /b { 515 0 65 -12 515 716 setcachedevice q 146.96875 0 m 146.96875 0 65.4375 0 65.4375 0 c 65.4375 0 65.4375 715.82812 65.4375 715.82812 c 65.4375 715.82812 153.32812 715.82812 153.32812 715.82812 c 153.32812 715.82812 153.32812 460.45312 153.32812 460.45312 c 153.32812 460.45312 208.98438 530.28125 295.40625 530.28125 c 295.40625 530.28125 343.26562 530.28125 385.98438 510.98438 c 385.98438 510.98438 428.71875 491.70312 456.29688 456.78125 c 456.29688 456.78125 483.89062 421.875 499.51562 372.5625 c 499.51562 372.5625 515.14062 323.25 515.14062 267.09375 c 515.14062 267.09375 515.14062 133.79688 449.21875 61.03125 c 449.21875 61.03125 383.29688 -11.71875 291.01562 -11.71875 c 291.01562 -11.71875 199.21875 -11.71875 146.96875 64.9375 c 146.96875 64.9375 146.96875 0 146.96875 0 c 146.96875 0 146.96875 0 146.96875 0 c h 146 263.1875 m 146 263.1875 146 169.92188 171.39062 128.42188 c 171.39062 128.42188 212.89062 60.54688 283.6875 60.54688 c 283.6875 60.54688 341.3125 60.54688 383.29688 110.59375 c 383.29688 110.59375 425.29688 160.64062 425.29688 259.76562 c 425.29688 259.76562 425.29688 361.32812 385.01562 409.67188 c 385.01562 409.67188 344.73438 458.01562 287.59375 458.01562 c 287.59375 458.01562 229.98438 458.01562 187.98438 407.95312 c 187.98438 407.95312 146 357.90625 146 263.1875 c h f* Q } def /c { 491 0 39 -12 491 530 setcachedevice q 404.29688 189.9375 m 404.29688 189.9375 490.71875 178.71875 490.71875 178.71875 c 490.71875 178.71875 476.5625 89.35938 418.20312 38.8125 c 418.20312 38.8125 359.85938 -11.71875 274.90625 -11.71875 c 274.90625 -11.71875 168.45312 -11.71875 103.75 57.85938 c 103.75 57.85938 39.0625 127.4375 39.0625 257.32812 c 39.0625 257.32812 39.0625 341.3125 66.89062 404.29688 c 66.89062 404.29688 94.73438 467.28125 151.60938 498.78125 c 151.60938 498.78125 208.5 530.28125 275.39062 530.28125 c 275.39062 530.28125 359.85938 530.28125 413.5625 487.54688 c 413.5625 487.54688 467.28125 444.82812 482.42188 366.21875 c 482.42188 366.21875 396.96875 353.03125 396.96875 353.03125 c 396.96875 353.03125 384.76562 405.28125 353.75 431.64062 c 353.75 431.64062 322.75 458.01562 278.8125 458.01562 c 278.8125 458.01562 212.40625 458.01562 170.89062 410.40625 c 170.89062 410.40625 129.39062 362.79688 129.39062 259.76562 c 129.39062 259.76562 129.39062 155.28125 169.42188 107.90625 c 169.42188 107.90625 209.46875 60.54688 273.92188 60.54688 c 273.92188 60.54688 325.6875 60.54688 360.34375 92.28125 c 360.34375 92.28125 395.01562 124.03125 404.29688 189.9375 c h f* Q } def /d { 484 0 34 -12 484 716 setcachedevice q 402.34375 0 m 402.34375 0 402.34375 65.4375 402.34375 65.4375 c 402.34375 65.4375 353.03125 -11.71875 257.32812 -11.71875 c 257.32812 -11.71875 195.3125 -11.71875 143.3125 22.45312 c 143.3125 22.45312 91.3125 56.64062 62.75 117.92188 c 62.75 117.92188 34.1875 179.20313 34.1875 258.79688 c 34.1875 258.79688 34.1875 336.42188 60.0625 399.65625 c 60.0625 399.65625 85.9375 462.89062 137.6875 496.57812 c 137.6875 496.57812 189.45312 530.28125 253.42188 530.28125 c 253.42188 530.28125 300.29688 530.28125 336.90625 510.5 c 336.90625 510.5 373.53125 490.71875 396.48438 458.98438 c 396.48438 458.98438 396.48438 715.82812 396.48438 715.82812 c 396.48438 715.82812 483.89062 715.82812 483.89062 715.82812 c 483.89062 715.82812 483.89062 0 483.89062 0 c 483.89062 0 402.34375 0 402.34375 0 c 402.34375 0 402.34375 0 402.34375 0 c h 124.51562 258.79688 m 124.51562 258.79688 124.51562 159.1875 166.5 109.85937 c 166.5 109.85937 208.5 60.54688 265.625 60.54688 c 265.625 60.54688 323.25 60.54688 363.53125 107.65625 c 363.53125 107.65625 403.8125 154.78125 403.8125 251.46875 c 403.8125 251.46875 403.8125 357.90625 362.79688 407.70312 c 362.79688 407.70312 321.78125 457.51562 261.71875 457.51562 c 261.71875 457.51562 203.125 457.51562 163.8125 409.65625 c 163.8125 409.65625 124.51562 361.8125 124.51562 258.79688 c h f* Q } def /e { 515 0 37 -12 515 530 setcachedevice q 420.90625 167 m 420.90625 167 511.71875 155.76563 511.71875 155.76563 c 511.71875 155.76563 490.23438 76.17188 432.125 32.21875 c 432.125 32.21875 374.03125 -11.71875 283.6875 -11.71875 c 283.6875 -11.71875 169.92188 -11.71875 103.26562 58.34375 c 103.26562 58.34375 36.625 128.42188 36.625 254.89062 c 36.625 254.89062 36.625 385.75 104 458.01562 c 104 458.01562 171.39062 530.28125 278.8125 530.28125 c 278.8125 530.28125 382.8125 530.28125 448.73438 459.46875 c 448.73438 459.46875 514.65625 388.67188 514.65625 260.25 c 514.65625 260.25 514.65625 252.4375 514.15625 236.8125 c 514.15625 236.8125 127.4375 236.8125 127.4375 236.8125 c 127.4375 236.8125 132.32812 151.375 175.78125 105.95312 c 175.78125 105.95312 219.23438 60.54688 284.1875 60.54688 c 284.1875 60.54688 332.51562 60.54688 366.6875 85.9375 c 366.6875 85.9375 400.875 111.32812 420.90625 167 c 420.90625 167 420.90625 167 420.90625 167 c h 132.32812 309.07812 m 132.32812 309.07812 421.875 309.07812 421.875 309.07812 c 421.875 309.07812 416.01562 374.51562 388.67188 407.23438 c 388.67188 407.23438 346.6875 458.01562 279.78125 458.01562 c 279.78125 458.01562 219.23438 458.01562 177.96875 417.48438 c 177.96875 417.48438 136.71875 376.95312 132.32812 309.07812 c h f* Q } def /f { 313 0 9 0 313 728 setcachedevice q 86.92188 0 m 86.92188 0 86.92188 450.20312 86.92188 450.20312 c 86.92188 450.20312 9.28125 450.20312 9.28125 450.20312 c 9.28125 450.20312 9.28125 518.5625 9.28125 518.5625 c 9.28125 518.5625 86.92188 518.5625 86.92188 518.5625 c 86.92188 518.5625 86.92188 573.73438 86.92188 573.73438 c 86.92188 573.73438 86.92188 625.98438 96.1875 651.375 c 96.1875 651.375 108.89062 685.54688 140.875 706.78125 c 140.875 706.78125 172.85938 728.03125 230.46875 728.03125 c 230.46875 728.03125 267.57812 728.03125 312.5 719.23438 c 312.5 719.23438 299.3125 642.57812 299.3125 642.57812 c 299.3125 642.57812 271.96875 647.46875 247.5625 647.46875 c 247.5625 647.46875 207.51562 647.46875 190.90625 630.375 c 190.90625 630.375 174.3125 613.28125 174.3125 566.40625 c 174.3125 566.40625 174.3125 518.5625 174.3125 518.5625 c 174.3125 518.5625 275.39062 518.5625 275.39062 518.5625 c 275.39062 518.5625 275.39062 450.20312 275.39062 450.20312 c 275.39062 450.20312 174.3125 450.20312 174.3125 450.20312 c 174.3125 450.20312 174.3125 0 174.3125 0 c 174.3125 0 86.92188 0 86.92188 0 c h f* Q } def /g { 489 0 32 -210 489 530 setcachedevice q 49.8125 -42.96875 m 49.8125 -42.96875 135.25 -55.67188 135.25 -55.67188 c 135.25 -55.67188 140.625 -95.21875 165.04688 -113.28125 c 165.04688 -113.28125 197.75 -137.70312 254.39062 -137.70312 c 254.39062 -137.70312 315.4375 -137.70312 348.64062 -113.28125 c 348.64062 -113.28125 381.84375 -88.875 393.5625 -44.92188 c 393.5625 -44.92188 400.39062 -18.0625 399.90625 67.875 c 399.90625 67.875 342.28125 0 256.34375 0 c 256.34375 0 149.42188 0 90.82812 77.14062 c 90.82812 77.14062 32.23438 154.29688 32.23438 262.20312 c 32.23438 262.20312 32.23438 336.42188 59.07812 399.17188 c 59.07812 399.17188 85.9375 461.92188 136.95312 496.09375 c 136.95312 496.09375 187.98438 530.28125 256.84375 530.28125 c 256.84375 530.28125 348.64062 530.28125 408.20312 456.0625 c 408.20312 456.0625 408.20312 518.5625 408.20312 518.5625 c 408.20312 518.5625 489.26562 518.5625 489.26562 518.5625 c 489.26562 518.5625 489.26562 70.3125 489.26562 70.3125 c 489.26562 70.3125 489.26562 -50.78125 464.59375 -101.3125 c 464.59375 -101.3125 439.9375 -151.85938 386.46875 -181.15625 c 386.46875 -181.15625 333.01562 -210.45312 254.89062 -210.45312 c 254.89062 -210.45312 162.10938 -210.45312 104.98438 -168.70312 c 104.98438 -168.70312 47.85938 -126.95312 49.8125 -42.96875 c 49.8125 -42.96875 49.8125 -42.96875 49.8125 -42.96875 c h 122.5625 268.5625 m 122.5625 268.5625 122.5625 166.5 163.07812 119.625 c 163.07812 119.625 203.60938 72.75 264.65625 72.75 c 264.65625 72.75 325.20312 72.75 366.21875 119.375 c 366.21875 119.375 407.23438 166.01562 407.23438 265.625 c 407.23438 265.625 407.23438 360.84375 364.98438 409.17188 c 364.98438 409.17188 322.75 457.51562 263.1875 457.51562 c 263.1875 457.51562 204.59375 457.51562 163.57812 409.90625 c 163.57812 409.90625 122.5625 362.3125 122.5625 268.5625 c h f* Q } def /h { 488 0 66 0 488 716 setcachedevice q 65.92188 0 m 65.92188 0 65.92188 715.82812 65.92188 715.82812 c 65.92188 715.82812 153.8125 715.82812 153.8125 715.82812 c 153.8125 715.82812 153.8125 458.98438 153.8125 458.98438 c 153.8125 458.98438 215.32812 530.28125 309.07812 530.28125 c 309.07812 530.28125 366.70312 530.28125 409.17188 507.5625 c 409.17188 507.5625 451.65625 484.85938 469.96875 444.8125 c 469.96875 444.8125 488.28125 404.78125 488.28125 328.60938 c 488.28125 328.60938 488.28125 0 488.28125 0 c 488.28125 0 400.39062 0 400.39062 0 c 400.39062 0 400.39062 328.60938 400.39062 328.60938 c 400.39062 328.60938 400.39062 394.53125 371.82812 424.5625 c 371.82812 424.5625 343.26562 454.59375 291.01562 454.59375 c 291.01562 454.59375 251.95312 454.59375 217.53125 434.32812 c 217.53125 434.32812 183.10938 414.0625 168.45312 379.39062 c 168.45312 379.39062 153.8125 344.73438 153.8125 283.6875 c 153.8125 283.6875 153.8125 0 153.8125 0 c 153.8125 0 65.92188 0 65.92188 0 c h f* Q } def /i { 154 0 66 0 154 716 setcachedevice q 66.40625 614.75 m 66.40625 614.75 66.40625 715.82812 66.40625 715.82812 c 66.40625 715.82812 154.29688 715.82812 154.29688 715.82812 c 154.29688 715.82812 154.29688 614.75 154.29688 614.75 c 154.29688 614.75 66.40625 614.75 66.40625 614.75 c 66.40625 614.75 66.40625 614.75 66.40625 614.75 c h 66.40625 0 m 66.40625 0 66.40625 518.5625 66.40625 518.5625 c 66.40625 518.5625 154.29688 518.5625 154.29688 518.5625 c 154.29688 518.5625 154.29688 0 154.29688 0 c 154.29688 0 66.40625 0 66.40625 0 c h f* Q } def /j { 153 0 -46 -210 153 716 setcachedevice q 65.4375 613.76562 m 65.4375 613.76562 65.4375 715.82812 65.4375 715.82812 c 65.4375 715.82812 153.32812 715.82812 153.32812 715.82812 c 153.32812 715.82812 153.32812 613.76562 153.32812 613.76562 c 153.32812 613.76562 65.4375 613.76562 65.4375 613.76562 c 65.4375 613.76562 65.4375 613.76562 65.4375 613.76562 c h -45.90625 -201.17188 m -45.90625 -201.17188 -29.29688 -126.46875 -29.29688 -126.46875 c -29.29688 -126.46875 -2.9375 -133.29688 12.20312 -133.29688 c 12.20312 -133.29688 39.0625 -133.29688 52.25 -115.46875 c 52.25 -115.46875 65.4375 -97.65625 65.4375 -26.375 c 65.4375 -26.375 65.4375 518.5625 65.4375 518.5625 c 65.4375 518.5625 153.32812 518.5625 153.32812 518.5625 c 153.32812 518.5625 153.32812 -28.32812 153.32812 -28.32812 c 153.32812 -28.32812 153.32812 -124.03125 128.42188 -161.625 c 128.42188 -161.625 96.6875 -210.45312 22.95312 -210.45312 c 22.95312 -210.45312 -12.70313 -210.45312 -45.90625 -201.17188 c h f* Q } def /l { 152 0 64 0 152 716 setcachedevice q 63.96875 0 m 63.96875 0 63.96875 715.82812 63.96875 715.82812 c 63.96875 715.82812 151.85938 715.82812 151.85938 715.82812 c 151.85938 715.82812 151.85938 0 151.85938 0 c 151.85938 0 63.96875 0 63.96875 0 c h f* Q } def /m { 769 0 66 0 769 530 setcachedevice q 65.92188 0 m 65.92188 0 65.92188 518.5625 65.92188 518.5625 c 65.92188 518.5625 144.53125 518.5625 144.53125 518.5625 c 144.53125 518.5625 144.53125 445.79688 144.53125 445.79688 c 144.53125 445.79688 168.95312 483.89062 209.46875 507.07813 c 209.46875 507.07813 250 530.28125 301.76562 530.28125 c 301.76562 530.28125 359.375 530.28125 396.23438 506.34375 c 396.23438 506.34375 433.10938 482.42188 448.25 439.45312 c 448.25 439.45312 509.76562 530.28125 608.40625 530.28125 c 608.40625 530.28125 685.54688 530.28125 727.04688 487.54688 c 727.04688 487.54688 768.5625 444.82812 768.5625 355.95312 c 768.5625 355.95312 768.5625 0 768.5625 0 c 768.5625 0 681.15625 0 681.15625 0 c 681.15625 0 681.15625 326.65625 681.15625 326.65625 c 681.15625 326.65625 681.15625 379.39062 672.60938 402.57812 c 672.60938 402.57812 664.0625 425.78125 641.59375 439.9375 c 641.59375 439.9375 619.14062 454.10938 588.875 454.10938 c 588.875 454.10938 534.1875 454.10938 498.04688 417.71875 c 498.04688 417.71875 461.92188 381.34375 461.92188 301.26562 c 461.92188 301.26562 461.92188 0 461.92188 0 c 461.92188 0 374.03125 0 374.03125 0 c 374.03125 0 374.03125 336.92188 374.03125 336.92188 c 374.03125 336.92188 374.03125 395.51562 352.54688 424.8125 c 352.54688 424.8125 331.0625 454.10938 282.23438 454.10938 c 282.23438 454.10938 245.125 454.10938 213.625 434.57812 c 213.625 434.57812 182.125 415.04688 167.96875 377.4375 c 167.96875 377.4375 153.8125 339.84375 153.8125 269.04688 c 153.8125 269.04688 153.8125 0 153.8125 0 c 153.8125 0 65.92188 0 65.92188 0 c h f* Q } def /n { 487 0 66 0 487 530 setcachedevice q 65.92188 0 m 65.92188 0 65.92188 518.5625 65.92188 518.5625 c 65.92188 518.5625 145.01562 518.5625 145.01562 518.5625 c 145.01562 518.5625 145.01562 444.82812 145.01562 444.82812 c 145.01562 444.82812 202.15625 530.28125 310.0625 530.28125 c 310.0625 530.28125 356.9375 530.28125 396.23438 513.42188 c 396.23438 513.42188 435.54688 496.57812 455.07812 469.23438 c 455.07812 469.23438 474.60938 441.89062 482.42188 404.29688 c 482.42188 404.29688 487.3125 379.89062 487.3125 318.84375 c 487.3125 318.84375 487.3125 0 487.3125 0 c 487.3125 0 399.42188 0 399.42188 0 c 399.42188 0 399.42188 315.4375 399.42188 315.4375 c 399.42188 315.4375 399.42188 369.14062 389.15625 395.75 c 389.15625 395.75 378.90625 422.35938 352.78125 438.23438 c 352.78125 438.23438 326.65625 454.10938 291.5 454.10938 c 291.5 454.10938 235.35938 454.10938 194.57812 418.45312 c 194.57812 418.45312 153.8125 382.8125 153.8125 283.20312 c 153.8125 283.20312 153.8125 0 153.8125 0 c 153.8125 0 65.92188 0 65.92188 0 c h f* Q } def /o { 519 0 33 -12 519 530 setcachedevice q 33.20312 259.28125 m 33.20312 259.28125 33.20312 403.32812 113.28125 472.65625 c 113.28125 472.65625 180.17188 530.28125 276.375 530.28125 c 276.375 530.28125 383.29688 530.28125 451.17188 460.20312 c 451.17188 460.20312 519.04688 390.14062 519.04688 266.60938 c 519.04688 266.60938 519.04688 166.5 489.01563 109.125 c 489.01563 109.125 458.98438 51.76562 401.60938 20.01562 c 401.60938 20.01562 344.23438 -11.71875 276.375 -11.71875 c 276.375 -11.71875 167.48438 -11.71875 100.34375 58.10938 c 100.34375 58.10938 33.20312 127.9375 33.20312 259.28125 c 33.20312 259.28125 33.20312 259.28125 33.20312 259.28125 c h 123.53125 259.28125 m 123.53125 259.28125 123.53125 159.67188 166.98438 110.10938 c 166.98438 110.10938 210.45312 60.54688 276.375 60.54688 c 276.375 60.54688 341.79688 60.54688 385.25 110.34375 c 385.25 110.34375 428.71875 160.15625 428.71875 262.20312 c 428.71875 262.20312 428.71875 358.40625 385.01562 407.95312 c 385.01562 407.95312 341.3125 457.51562 276.375 457.51562 c 276.375 457.51562 210.45312 457.51562 166.98438 408.20312 c 166.98438 408.20312 123.53125 358.89062 123.53125 259.28125 c h f* Q } def /p { 516 0 66 -199 516 530 setcachedevice q 65.92188 -198.73438 m 65.92188 -198.73438 65.92188 518.5625 65.92188 518.5625 c 65.92188 518.5625 146 518.5625 146 518.5625 c 146 518.5625 146 451.17188 146 451.17188 c 146 451.17188 174.3125 490.71875 209.95312 510.5 c 209.95312 510.5 245.60938 530.28125 296.39062 530.28125 c 296.39062 530.28125 362.79688 530.28125 413.57812 496.09375 c 413.57812 496.09375 464.35938 461.92188 490.23438 399.65625 c 490.23438 399.65625 516.10938 337.40625 516.10938 263.1875 c 516.10938 263.1875 516.10938 183.59375 487.54688 119.875 c 487.54688 119.875 458.98438 56.15625 404.53125 22.21875 c 404.53125 22.21875 350.09375 -11.71875 290.04688 -11.71875 c 290.04688 -11.71875 246.09375 -11.71875 211.17188 6.82812 c 211.17188 6.82812 176.26562 25.39062 153.8125 53.71875 c 153.8125 53.71875 153.8125 -198.73438 153.8125 -198.73438 c 153.8125 -198.73438 65.92188 -198.73438 65.92188 -198.73438 c 65.92188 -198.73438 65.92188 -198.73438 65.92188 -198.73438 c h 145.51562 256.34375 m 145.51562 256.34375 145.51562 156.25 186.03125 108.39062 c 186.03125 108.39062 226.5625 60.54688 284.1875 60.54688 c 284.1875 60.54688 342.78125 60.54688 384.51562 110.10938 c 384.51562 110.10938 426.26562 159.67188 426.26562 263.67188 c 426.26562 263.67188 426.26562 362.79688 385.5 412.10938 c 385.5 412.10938 344.73438 461.42188 288.09375 461.42188 c 288.09375 461.42188 231.9375 461.42188 188.71875 408.9375 c 188.71875 408.9375 145.51562 356.45312 145.51562 256.34375 c h f* Q } def /q { 484 0 35 -199 484 530 setcachedevice q 396.48438 -198.73438 m 396.48438 -198.73438 396.48438 55.17187 396.48438 55.17187 c 396.48438 55.17187 375.98438 26.375 339.10938 7.32813 c 339.10938 7.32813 302.25 -11.71875 260.75 -11.71875 c 260.75 -11.71875 168.45312 -11.71875 101.79688 62.01563 c 101.79688 62.01563 35.15625 135.75 35.15625 264.15625 c 35.15625 264.15625 35.15625 342.28125 62.25 404.29688 c 62.25 404.29688 89.35938 466.3125 140.875 498.29688 c 140.875 498.29688 192.39063 530.28125 253.90625 530.28125 c 253.90625 530.28125 350.09375 530.28125 405.28125 449.21875 c 405.28125 449.21875 405.28125 518.5625 405.28125 518.5625 c 405.28125 518.5625 484.375 518.5625 484.375 518.5625 c 484.375 518.5625 484.375 -198.73438 484.375 -198.73438 c 484.375 -198.73438 396.48438 -198.73438 396.48438 -198.73438 c 396.48438 -198.73438 396.48438 -198.73438 396.48438 -198.73438 c h 125.48438 260.75 m 125.48438 260.75 125.48438 160.64062 167.46875 110.59375 c 167.46875 110.59375 209.46875 60.54688 268.0625 60.54688 c 268.0625 60.54688 324.21875 60.54688 364.75 108.15625 c 364.75 108.15625 405.28125 155.76563 405.28125 252.9375 c 405.28125 252.9375 405.28125 356.45312 362.54688 408.6875 c 362.54688 408.6875 319.82812 460.9375 262.20312 460.9375 c 262.20312 460.9375 205.07812 460.9375 165.28125 412.34375 c 165.28125 412.34375 125.48438 363.76562 125.48438 260.75 c h f* Q } def /r { 347 0 65 0 347 530 setcachedevice q 64.9375 0 m 64.9375 0 64.9375 518.5625 64.9375 518.5625 c 64.9375 518.5625 144.04688 518.5625 144.04688 518.5625 c 144.04688 518.5625 144.04688 439.9375 144.04688 439.9375 c 144.04688 439.9375 174.3125 495.125 199.95312 512.70312 c 199.95312 512.70312 225.59375 530.28125 256.34375 530.28125 c 256.34375 530.28125 300.78125 530.28125 346.6875 501.95312 c 346.6875 501.95312 316.40625 420.40625 316.40625 420.40625 c 316.40625 420.40625 284.1875 439.45312 251.95312 439.45312 c 251.95312 439.45312 223.14062 439.45312 200.1875 422.10938 c 200.1875 422.10938 177.25 404.78125 167.48438 374.03125 c 167.48438 374.03125 152.82812 327.15625 152.82812 271.48438 c 152.82812 271.48438 152.82812 0 152.82812 0 c 152.82812 0 64.9375 0 64.9375 0 c h f* Q } def /s { 461 0 31 -12 461 530 setcachedevice q 30.76563 154.78125 m 30.76563 154.78125 117.67188 168.45312 117.67188 168.45312 c 117.67188 168.45312 125 116.21875 158.4375 88.375 c 158.4375 88.375 191.89062 60.54688 251.95312 60.54688 c 251.95312 60.54688 312.5 60.54688 341.79688 85.20312 c 341.79688 85.20312 371.09375 109.85937 371.09375 143.0625 c 371.09375 143.0625 371.09375 172.85938 345.21875 189.9375 c 345.21875 189.9375 327.15625 201.65625 255.375 219.73438 c 255.375 219.73438 158.6875 244.14062 121.32813 261.95312 c 121.32813 261.95312 83.98438 279.78125 64.6875 311.28125 c 64.6875 311.28125 45.40625 342.78125 45.40625 380.85938 c 45.40625 380.85938 45.40625 415.53125 61.28125 445.0625 c 61.28125 445.0625 77.15625 474.60938 104.5 494.14062 c 104.5 494.14062 125 509.28125 160.39062 519.78125 c 160.39062 519.78125 195.79688 530.28125 236.32812 530.28125 c 236.32812 530.28125 297.35938 530.28125 343.5 512.70312 c 343.5 512.70312 389.65625 495.125 411.625 465.09375 c 411.625 465.09375 433.59375 435.0625 441.89062 384.76562 c 441.89062 384.76562 355.95312 373.04688 355.95312 373.04688 c 355.95312 373.04688 350.09375 413.09375 322.01562 435.54688 c 322.01562 435.54688 293.95312 458.01562 242.67188 458.01562 c 242.67188 458.01562 182.125 458.01562 156.25 437.98438 c 156.25 437.98438 130.375 417.96875 130.375 391.10938 c 130.375 391.10938 130.375 374.03125 141.10938 360.35938 c 141.10938 360.35938 151.85938 346.1875 174.8125 336.92188 c 174.8125 336.92188 187.98438 332.03125 252.4375 314.45312 c 252.4375 314.45312 345.70312 289.54688 382.5625 273.67188 c 382.5625 273.67188 419.4375 257.8125 440.42188 227.53125 c 440.42188 227.53125 461.42188 197.26562 461.42188 152.34375 c 461.42188 152.34375 461.42188 108.40625 435.78125 69.57812 c 435.78125 69.57812 410.15625 30.76563 361.8125 9.51562 c 361.8125 9.51562 313.48438 -11.71875 252.4375 -11.71875 c 252.4375 -11.71875 151.375 -11.71875 98.39062 30.26562 c 98.39062 30.26562 45.40625 72.26562 30.76563 154.78125 c h f* Q } def /t { 271 0 18 -7 271 700 setcachedevice q 257.8125 78.60937 m 257.8125 78.60937 270.51562 0.98438 270.51562 0.98438 c 270.51562 0.98438 233.40625 -6.84375 204.10938 -6.84375 c 204.10938 -6.84375 156.25 -6.84375 129.875 8.29687 c 129.875 8.29687 103.51562 23.4375 92.76562 48.09375 c 92.76562 48.09375 82.03125 72.75 82.03125 151.85938 c 82.03125 151.85938 82.03125 450.20312 82.03125 450.20312 c 82.03125 450.20312 17.57812 450.20312 17.57812 450.20312 c 17.57812 450.20312 17.57812 518.5625 17.57812 518.5625 c 17.57812 518.5625 82.03125 518.5625 82.03125 518.5625 c 82.03125 518.5625 82.03125 646.96875 82.03125 646.96875 c 82.03125 646.96875 169.4375 699.70312 169.4375 699.70312 c 169.4375 699.70312 169.4375 518.5625 169.4375 518.5625 c 169.4375 518.5625 257.8125 518.5625 257.8125 518.5625 c 257.8125 518.5625 257.8125 450.20312 257.8125 450.20312 c 257.8125 450.20312 169.4375 450.20312 169.4375 450.20312 c 169.4375 450.20312 169.4375 146.96875 169.4375 146.96875 c 169.4375 146.96875 169.4375 109.375 174.07812 98.625 c 174.07812 98.625 178.71875 87.89062 189.20312 81.54688 c 189.20312 81.54688 199.70312 75.20312 219.23438 75.20312 c 219.23438 75.20312 233.89062 75.20312 257.8125 78.60937 c h f* Q } def /u { 484 0 64 -12 484 519 setcachedevice q 405.76562 0 m 405.76562 0 405.76562 76.17188 405.76562 76.17188 c 405.76562 76.17188 345.21875 -11.71875 241.21875 -11.71875 c 241.21875 -11.71875 195.3125 -11.71875 155.51562 5.85938 c 155.51562 5.85938 115.71875 23.4375 96.4375 50.04688 c 96.4375 50.04688 77.15625 76.65625 69.34375 115.23438 c 69.34375 115.23438 63.96875 141.10937 63.96875 197.26562 c 63.96875 197.26562 63.96875 518.5625 63.96875 518.5625 c 63.96875 518.5625 151.85938 518.5625 151.85938 518.5625 c 151.85938 518.5625 151.85938 230.95312 151.85938 230.95312 c 151.85938 230.95312 151.85938 162.10938 157.23438 138.1875 c 157.23438 138.1875 165.53125 103.51562 192.375 83.73438 c 192.375 83.73438 219.23438 63.96875 258.79688 63.96875 c 258.79688 63.96875 298.34375 63.96875 333 84.23438 c 333 84.23438 367.67188 104.5 382.07812 139.40625 c 382.07812 139.40625 396.48438 174.3125 396.48438 240.71875 c 396.48438 240.71875 396.48438 518.5625 396.48438 518.5625 c 396.48438 518.5625 484.375 518.5625 484.375 518.5625 c 484.375 518.5625 484.375 0 484.375 0 c 484.375 0 405.76562 0 405.76562 0 c h f* Q } def /v { 488 0 13 0 488 519 setcachedevice q 209.96875 0 m 209.96875 0 12.70313 518.5625 12.70313 518.5625 c 12.70313 518.5625 105.46875 518.5625 105.46875 518.5625 c 105.46875 518.5625 216.79688 208.01562 216.79688 208.01562 c 216.79688 208.01562 234.85938 157.71875 250 103.51562 c 250 103.51562 261.71875 144.53125 282.71875 202.15625 c 282.71875 202.15625 397.95312 518.5625 397.95312 518.5625 c 397.95312 518.5625 488.28125 518.5625 488.28125 518.5625 c 488.28125 518.5625 292 0 292 0 c 292 0 209.96875 0 209.96875 0 c h f* Q } def end currentdict end /T3_82_0 exch definefont pop %%EndResource /F82_0 /T3_82_0 1 1 [ /comma/hyphen/period/one/two/three/four/semicolon /A/C/D/E/F/I/L/M /N/P/Q/S/U/V/a/b /c/d/e/f/g/h/i/j /l/m/n/o/p/q/r/s /t/u/v/plus/comma/hyphen/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 /quoteleft/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/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont false pdfSetup 595 842 pdfSetupPaper %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0.706376 translate 0.9983 0.9983 scale 0 0 596 842 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 595.28 841.89 re W q q [1 0 0 1 0 0] cm q 1 w [] 0 d 0 J 0 j [1 0 0 1 72 805.89] cm q [1 0 0 1 0 0] Tm 0 0 Td /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\016) [6.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -9.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -9.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 17.34375 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.01758 -9.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.34766 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.01367 -9.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.6875 -9.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.6875 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.36133 -9.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.69141 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.36523 -9.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.03906 -9.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.70508 -9.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.37891 -9.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.70898 -9.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.70898 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.375 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.04297 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.7168 -9.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.71289 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.38672 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.7207 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.38867 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.38867 -9.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.0625 -9.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.73633 -9.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.73633 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.41016 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.41016 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.74414 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.41797 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.75195 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.42578 -9.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.75586 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.42969 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.10352 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.76953 -9.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.44336 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.10938 -9.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.10938 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.10938 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.77539 -9.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.44922 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -24.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.00586 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.00781 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.01172 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.68555 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.69336 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.69336 -24.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.36719 -24.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.04102 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.71484 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.38086 -24.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.37695 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.05078 -24.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.72461 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.05859 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.73242 -24.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.72852 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.39648 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.0625 -24.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.73633 -24.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.73633 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.41016 -24.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.74023 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.74805 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.74805 -24.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.42188 -24.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.0957 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.76953 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.43555 -24.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.43164 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.10547 -24.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.7793 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.11328 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.78711 -24.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -39.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67969 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.01367 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.6875 -39.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.36133 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.03516 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.70312 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.37695 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.05078 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.72461 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.39844 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.40625 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.08008 -39.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.75391 -39.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.41992 -39.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.09375 -39.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.42383 -39.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.41992 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.09375 -39.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.76758 -39.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.44141 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 145.44141 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.11523 -39.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.44922 -39.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.11523 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.78906 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.78906 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.12305 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.79688 -39.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.79688 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.46484 -39.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.46484 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.13086 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.79883 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.47266 -39.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.46875 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.14258 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -54.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 7.33008 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -54.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.34375 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.00977 -54.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.67578 -54.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.3418 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.34961 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.02344 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.69727 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.37109 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.04492 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.05273 -54.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.04883 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.72266 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.05664 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.73047 -54.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.06445 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.73828 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.40625 -54.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.08008 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.75391 -54.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.41992 -54.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.08594 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.75977 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.42773 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.42383 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.09766 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.77148 -54.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.76758 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.43359 -54.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.76758 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.44141 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.10742 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.78125 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.45508 -54.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.12891 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.80273 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.47656 -54.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -69.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.02148 -69.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.01758 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.69141 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.02539 -69.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.69531 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.36914 -69.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36914 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.70312 -69.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.37695 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.04492 -69.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.71875 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.39258 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.72656 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.40039 -69.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.06641 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.73242 -69.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.40625 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.08008 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.75391 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.42188 -69.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.08789 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.76172 -69.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.76953 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.10352 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.77734 -69.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.77344 -69.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.76953 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.44336 -69.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.11719 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.45117 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.125 -69.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.45508 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.12891 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.46289 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.13086 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.79688 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 253.4707 -69.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -84.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -84.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.33984 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.00586 -84.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.33984 -84.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.01367 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.6875 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.02148 -84.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.69531 -84.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36914 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.04297 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.05078 -84.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.72461 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.39844 -84.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.07227 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.74609 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.08008 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.74609 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.41992 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.09375 -84.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.42773 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.10156 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.76953 -84.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.76562 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.43945 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.11328 -84.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.78711 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.45312 -84.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.78711 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.46094 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.12695 -84.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.46094 -84.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.13477 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.80859 -84.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.80469 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.13867 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.8125 -84.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.80859 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.47461 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.14844 -84.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.82227 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -99.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -99.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -99.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.34375 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.67773 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.35156 -99.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.35156 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.01953 -99.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.69336 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.36719 -99.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36719 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.36719 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.04102 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.375 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.04883 -99.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.37891 -99.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.375 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.04102 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.71484 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.38086 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.38086 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.05469 -99.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.7207 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.39453 -99.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.72852 -99.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.72461 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.39844 -99.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.39844 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.06641 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.73242 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.40625 -99.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.07227 -99.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.73828 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.41211 -99.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.74219 -99.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.73828 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.41211 -99.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.07812 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.75195 -99.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.75195 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.42578 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.09961 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.77344 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -114.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -114.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -114.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.00977 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.68359 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.35742 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.02539 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.69141 -114.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.36523 -114.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.36523 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.03906 -114.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.03516 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.70312 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.71094 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.04492 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.71875 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.39258 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.06641 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.73242 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.40625 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.07422 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.4082 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.08203 -114.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.74805 -114.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.41406 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08789 -114.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.42188 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.0957 -114.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.76172 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.43555 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.10156 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.43555 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.10938 -114.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.7832 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.79102 -114.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.79102 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.45703 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.79102 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.46484 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.13867 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.00391 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.67773 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.35156 -129.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.35156 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.02539 -129.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.69141 -129.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.35742 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.03125 -129.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.36523 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.36523 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.03906 -129.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.03516 -129.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.03516 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.70898 -129.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.04297 -129.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.7168 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.39062 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.06445 -129.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.39453 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.06836 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.07617 -129.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.75 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.42383 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.09766 -129.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.42773 -129.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.42773 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.10156 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.77539 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.44141 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.44141 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.11523 -129.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.78125 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.78906 -129.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.78906 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.46289 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.00781 -144.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.00391 -144.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.67773 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.35156 -144.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.68555 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.35938 -144.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.35547 -144.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.0293 -144.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.36328 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.69727 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.36328 -144.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.03711 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.03711 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.70312 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.37695 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.05078 -144.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.72461 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.05859 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.72656 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 129.39258 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.06641 -144.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.73242 -144.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.39844 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.40625 -144.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.40234 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.07617 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.41016 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.74414 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.41016 -144.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.74414 -144.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.41797 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.0918 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.75781 -144.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.76562 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.43945 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.11328 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.78711 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.45508 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.12891 -144.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.12891 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -159.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -159.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.67383 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.33984 -159.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.01367 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.67969 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.34766 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.02148 -159.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.6875 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.36133 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.02734 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36133 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.03516 -159.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.70898 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.38281 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.05078 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.05469 -159.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.05078 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.72461 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.39844 -159.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.39844 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.07227 -159.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.74609 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.41406 -159.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.08008 -159.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.75391 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.42773 -159.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.10156 -159.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.09766 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.43164 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.09766 -159.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.43164 -159.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.42773 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.09375 -159.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.09375 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.76758 -159.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.10156 -159.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.77539 -159.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.44141 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.11523 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.11523 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.78906 -159.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.78516 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 253.45898 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -174.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -174.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.01367 -174.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.34375 -174.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.33984 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.01367 -174.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.6875 -174.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.36133 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36133 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.03516 -174.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.36914 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.04297 -174.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.70898 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.04297 -174.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.03906 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.70508 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.70508 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.37109 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.04492 -174.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.04492 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.71289 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.37891 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.05273 -174.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.71875 -174.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.38477 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.39258 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.72656 -174.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.72266 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.38867 -174.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.38867 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.72266 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.38867 -174.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.0625 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.73633 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.74414 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.07812 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.75195 -174.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.74805 -174.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.42188 -174.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.0957 -174.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.42578 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.09961 -174.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.09961 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.43359 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -189.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -189.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.66602 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.33984 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.33984 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.00586 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.01367 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.6875 -189.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.35352 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.02734 -189.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.70117 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.375 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.04102 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.70898 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.38281 -189.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.37891 -189.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.05273 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.72656 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.73242 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\010) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.73633 -189.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.40234 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.06836 -189.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.74219 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.41602 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.08984 -189.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.41992 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.09375 -189.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.08984 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.76367 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.43164 -189.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.43164 -189.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.10547 -189.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.77148 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.44531 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.7793 -189.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.45312 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.12695 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.46094 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.00391 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.67773 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.68555 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.68555 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.35938 -219.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.35547 -219.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.35547 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.0293 -219.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36328 -219.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.03711 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.70312 -219.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.70312 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.70312 -219.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.37695 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.05078 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.38477 -219.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.05859 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.73242 -219.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.40625 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.08008 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.08789 -219.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.08398 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.75781 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.0918 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.42578 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.0918 -219.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.42578 -219.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.09961 -219.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.77344 -219.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.78125 -219.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.45508 -219.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.12891 -219.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.125 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.45898 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.4668 -219.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.46289 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.13672 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 253.4707 -219.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.14453 -219.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -234.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.36133 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.03516 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.70898 -234.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.70508 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.37305 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.37695 -234.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.37305 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.04688 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.7207 -234.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.7207 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.39453 -234.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.06836 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.73633 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.74414 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.41797 -234.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.41406 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.08789 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.75586 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.42969 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.76367 -234.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.42969 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.10352 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.10352 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.4375 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.11133 -234.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.44531 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.11914 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.79297 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.45898 -234.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.13281 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.79883 -234.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.79883 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.79883 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.46484 -234.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.13867 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -249.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.33984 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.01367 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.6875 -249.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.36133 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.70312 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.37695 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.37695 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.71094 -249.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.38477 -249.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.71484 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.38086 -249.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.38867 -249.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.05469 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.7207 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.39453 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.06836 -249.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.73438 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.4082 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.07617 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.74219 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.41602 -249.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.74609 -249.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.74609 -249.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.41992 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.41992 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.08594 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.75195 -249.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.08594 -249.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.75977 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.43359 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.76758 -249.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.44141 -249.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.11523 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.78906 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -264.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -264.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.02148 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.69531 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.0293 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.69531 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.36914 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.04297 -264.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.37695 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.05078 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.71875 -264.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.71484 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.38867 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.0625 -264.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.73633 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.40234 -264.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.73633 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.41016 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.07617 -264.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 129.41016 -264.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.08398 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.75781 -264.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.75391 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08789 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.76172 -264.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.75781 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.42383 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.09766 -264.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.77148 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.43945 -264.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.43555 -264.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.10938 -264.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.7832 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.11719 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.79102 -264.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.79102 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.45898 -264.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.13281 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.80664 -264.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.80664 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.80664 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.48047 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.81445 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.48828 -264.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -279.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.99609 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.66211 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.33594 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.00195 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.00195 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.67578 -279.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.3418 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.01562 -279.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.34961 -279.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.3457 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.01953 -279.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.01953 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.6875 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.35352 -279.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.02734 -279.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.70117 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.375 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.70898 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.375 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.38281 -279.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.05664 -279.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.72266 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.39648 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.39648 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.07031 -279.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.06641 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.74023 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.4082 -279.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.4082 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.08203 -279.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.74805 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.41406 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.74805 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.41602 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.41992 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.09375 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.76758 -279.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.76758 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.44141 -279.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.10742 -279.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.77344 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.44727 -279.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.78125 -279.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.78125 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.45508 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -294.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.66992 -294.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 17.34375 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.35156 -294.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.02539 -294.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.69922 -294.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.69922 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.37305 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.04688 -294.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.04297 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.05078 -294.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.72461 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.39844 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.06445 -294.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.07227 -294.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.07227 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.74609 -294.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.41211 -294.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.08594 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.75977 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.09375 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.76758 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.10156 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.10938 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.10938 -294.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.7832 -294.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.45703 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.13086 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.79688 -294.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.79297 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.4668 -294.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.14062 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.47461 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.14844 -294.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.14453 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.8125 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.47852 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.15234 -294.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.82617 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.00781 -309.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.00391 -309.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.67773 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.34375 -309.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.67773 -309.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.67383 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.33984 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.00781 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.3418 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.00781 -309.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.68164 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.68164 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.34766 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.02148 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.69531 -309.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.36914 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.03711 -309.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.03711 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.70312 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.37109 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.04492 -309.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.04102 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.71484 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 145.38281 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.7168 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.39062 -309.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.38672 -309.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.38281 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.05664 -309.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.73047 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.06445 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.73828 -309.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.06836 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.74219 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.41602 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.08398 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.75781 -309.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.75391 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.42773 -309.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.42773 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.09375 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.76758 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -324.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -324.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -324.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.35547 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.0293 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.70312 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.37695 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.05078 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.72461 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.39258 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.05859 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.73242 -324.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.0625 -324.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.0625 -324.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.73633 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.73633 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.40234 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.06836 -324.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.40234 -324.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.07617 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.75 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.08398 -324.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.75781 -324.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.43164 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.10547 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.11328 -324.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.78711 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.46094 -324.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.13477 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.80859 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.14258 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.80859 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.48242 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.15625 -324.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.49023 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.16406 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.83203 -324.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.82812 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.50195 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.17578 -324.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.84961 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.51562 -324.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.84961 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.52344 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.18945 -324.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.52344 -324.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.19727 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.87109 -324.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.86719 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.20117 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.875 -324.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.87109 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.53711 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.21094 -324.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.88477 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.55273 -324.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.54883 -324.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.22266 -324.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.89648 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.23047 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.9043 -324.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.9043 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.57227 -324.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.24609 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.91992 -324.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.91992 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.91992 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.59375 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.92773 -324.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.60156 -324.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -339.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.99609 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.66211 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.33594 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.00195 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.00195 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.67578 -339.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.3418 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.01562 -339.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.34961 -339.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.3457 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.01953 -339.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.01953 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.6875 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.02148 -339.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.0293 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.70312 -339.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.36914 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.04297 -339.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.03906 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.71289 -339.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 129.38672 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.7207 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.39453 -339.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.72461 -339.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.39844 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.07227 -339.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.73828 -339.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.73828 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.4043 -339.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.07812 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.75195 -339.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.08203 -339.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.75586 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.42969 -339.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.0957 -339.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.76172 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.76953 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.44336 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.77734 -339.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.77734 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.44336 -339.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.44336 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.11719 -339.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.11328 -339.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.10938 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.7832 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.45117 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.45508 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.12891 -339.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.79492 -339.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.46094 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.13477 -339.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.80859 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.14258 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.81641 -339.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.81641 -339.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.49023 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.16406 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.17188 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.8457 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.51953 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.19336 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.85938 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.19336 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.86719 -339.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.54102 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.20898 -339.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.20508 -339.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.87891 -339.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.875 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.54883 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.54883 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.88281 -339.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.87891 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.54492 -339.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.54492 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.87891 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.54492 -339.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.21875 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.89258 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -354.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.02148 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.35547 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.0293 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.70508 -354.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.37891 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.05273 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.38672 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.06055 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.39453 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.06836 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.73633 -354.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.73242 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.40625 -354.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.07227 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.74609 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.74609 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.41992 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.09375 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.76758 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.77539 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.10938 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.7832 -354.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.7793 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.45312 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.78711 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.46094 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.79492 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.12891 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.80273 -354.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.79883 -354.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.47266 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.13867 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.47266 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.14648 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.82031 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.49414 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.49414 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.82812 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.50195 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.50195 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.16992 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\024) [7.704 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.83594 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.50391 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.17773 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.85156 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.52539 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.19336 -354.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.18945 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.86328 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.53711 -354.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.21094 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.21875 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.55273 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.22656 -354.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.89258 -354.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.55859 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.23242 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.23242 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.90039 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.57422 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.24219 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.57617 -354.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.57227 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.23828 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.23828 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.57227 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.23828 -354.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.91211 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 471.58594 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -369.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.66211 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33008 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.33398 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.00781 -369.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.67383 -369.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.33984 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.01367 -369.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.6875 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.02148 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.69531 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.69531 -369.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.36914 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.04297 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.05078 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.7168 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.39062 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.39062 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.06445 -369.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.73047 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.39648 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.73047 -369.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.73047 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.4043 -369.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.07031 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.73633 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 153.4043 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.07812 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.75195 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.42578 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.09375 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.42773 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.10156 -369.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.76758 -369.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.43359 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.10742 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.44141 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.10742 -369.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.10352 -369.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.77734 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.45117 -369.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.44727 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.12109 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.78711 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.46094 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.12891 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.80273 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.47656 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.15039 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.81836 -369.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.81836 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.49219 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.49219 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.82617 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.49219 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.16602 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.83984 -369.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.50586 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.17969 -369.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.50977 -369.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.17578 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.84961 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.84961 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.52344 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.85742 -369.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.85742 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.53125 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.53125 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.86523 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.53125 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.20508 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.87891 -369.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.54492 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.21875 -369.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.21484 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 7.78711 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.45312 -384.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.45312 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.12695 -384.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.12305 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.79688 -384.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.13086 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.80469 -384.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.80078 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.80078 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.80859 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.48242 -384.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.47852 -384.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.15234 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.82617 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.49414 -384.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.49414 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.16797 -384.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.16406 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.83008 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.50391 -384.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.83789 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.51172 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.17969 -384.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.17578 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.84961 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.18359 -384.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.17969 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.85352 -384.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.18359 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.85742 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.53125 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.20508 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.53906 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.20703 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.88086 -384.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.54688 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.88086 -384.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.87695 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.54297 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.54297 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.2168 -384.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.55078 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.22461 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.55859 -384.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.55859 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.23242 -384.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.89844 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.56445 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.89844 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.56641 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.23242 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.90625 -384.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.58008 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.91406 -384.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.58789 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.26172 -384.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.92773 -384.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.59375 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.26758 -384.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.94141 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.27539 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.94922 -384.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.94922 -384.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.62305 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.29688 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.30469 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.9707 -384.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.64453 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.97852 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.65234 -384.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.64844 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.32227 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.99609 -384.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -399.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -399.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -399.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 17.34375 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.67773 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.35156 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.01953 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.68555 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.35938 -399.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.35547 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.0293 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.70312 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.36914 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.70312 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.37695 -399.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.70703 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 89.37305 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.38086 -399.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.04688 -399.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.7207 -399.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.7168 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.39062 -399.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.7207 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.39453 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.0625 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.73633 -399.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.73242 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.40625 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.07422 -399.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.74023 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.41406 -399.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.08789 -399.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.08398 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.75781 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 203.43164 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.09961 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.77344 -399.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.43945 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.11328 -399.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.78711 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.46094 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.12695 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.46094 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.12891 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.79492 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.46875 -399.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.13477 -399.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.80078 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.47461 -399.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.80469 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.47852 -399.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.14453 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.47852 -399.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.47461 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.14062 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.14062 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.81445 -399.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.14844 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.82227 -399.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.48828 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.16211 -399.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.1582 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.83203 -399.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.50586 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.83984 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.51367 -399.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.84375 -399.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.84375 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.51758 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.19141 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.85742 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.19141 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.52539 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.19141 -399.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.19141 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.85938 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.86328 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.53711 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -414.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -414.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -414.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -414.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.6875 -414.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.35352 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.01953 -414.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.35352 -414.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.02734 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.70117 -414.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.375 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.04883 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.05664 -414.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.73047 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.4043 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.07031 -414.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.4043 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.73828 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.41211 -414.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.4082 -414.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.08203 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.74805 -414.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.08203 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08203 -414.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.75586 -414.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.75195 -414.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.74805 -414.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.42188 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.0957 -414.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.10352 -414.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.77734 -414.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.45117 -414.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.44727 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.78125 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.11523 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.78125 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.11523 -414.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.78906 -414.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.12305 -414.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.34375 -444.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.33984 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.00586 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.33984 -444.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.01367 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.6875 -444.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.68359 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.35742 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.69141 -444.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.35742 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.02344 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.69727 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.37109 -444.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.36719 -444.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.04102 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.70898 -444.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.38281 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.05664 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.73047 -444.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.72656 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.40039 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.73438 -444.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.73047 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.73828 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.41211 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.74609 -444.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.74219 -444.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.41602 -444.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.08203 -444.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.74805 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.41406 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.74805 -444.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.74805 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.42188 -444.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.08789 -444.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.76172 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.43555 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.76953 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.44336 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.77734 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.45117 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.11914 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.45312 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.12695 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.80078 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.80078 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.4668 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.14062 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.81445 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.14844 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.82227 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.83008 -444.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.49609 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.16211 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.83594 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.50977 -444.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.17578 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.84961 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.51758 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.51367 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.1875 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.86133 -444.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.85742 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.52344 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.85742 -444.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.53125 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.20508 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.87109 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.20508 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.53906 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.21289 -444.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.87891 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.54492 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.87891 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.55273 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -459.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.00781 -459.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.00391 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 17.33789 -459.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.01172 -459.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.3418 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.3418 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.01562 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.01562 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.01562 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.68164 -459.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.35547 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.02148 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.68945 -459.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.36328 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.03711 -459.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.70312 -459.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.70312 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.36914 -459.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.04297 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.7168 -459.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.05078 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.71875 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.38477 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.05859 -459.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.73242 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.06641 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.74023 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.41406 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.08789 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.08789 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.42188 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.0957 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.42969 -459.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.42969 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.0957 -459.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.0957 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.76953 -459.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.76562 -459.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.76172 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.76953 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.76953 -459.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.44336 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.11719 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.79102 -459.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.45703 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.13086 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.13086 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.79883 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.58594 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.25195 -459.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.25195 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.92578 -459.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.92188 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.5957 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.92969 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.60352 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.9375 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.61133 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.61133 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.2793 -459.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.27539 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.94141 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.94141 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.61523 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.61523 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.2832 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.2832 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.94922 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.61719 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.29102 -459.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.28711 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.96094 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.62891 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.30273 -459.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.96875 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.63477 -459.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 467.30859 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 473.98242 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 480.65625 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.68164 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.68555 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.35938 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.36719 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.04102 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.04883 -474.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.72266 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.38867 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.38867 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.38867 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.38867 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.05469 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.72266 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.39648 -474.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.39258 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.06641 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.73438 -474.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.40039 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.07422 -474.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08203 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.08203 -474.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.75586 -474.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.42188 -474.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.08789 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.75391 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.75391 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.41992 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.75391 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.42773 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.10156 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.76758 -474.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.77539 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.44922 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.12305 -474.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.79688 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.46289 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.13672 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.81055 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.14453 -474.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.81836 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.49219 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.1582 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.49219 -474.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.49219 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.1582 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.49219 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.16602 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.17383 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.84766 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.52148 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.1875 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.85547 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.52148 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.19531 -474.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.86133 -474.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.52734 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.53516 -474.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.20898 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.88281 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.54883 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.88281 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.2168 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.89062 -474.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.55664 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.22266 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.55664 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.23047 -474.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.9043 -474.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.57031 -474.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.24414 -474.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.57812 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.24609 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\014) [6.78 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.57617 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.25 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.25 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.25 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -489.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -489.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.34375 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.01758 -489.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.69141 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.35742 -489.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.35352 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.02148 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.69531 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.36914 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.04297 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.04297 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.37695 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.05078 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.38477 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.05859 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.06641 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.06641 -489.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.74023 -489.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.41406 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08789 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.76172 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.76953 -489.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.44336 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.11719 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.11719 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.78516 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.45898 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.13281 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.79883 -489.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.47266 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.13867 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.13867 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.13867 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.80469 -489.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.47852 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.48633 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.15234 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.16016 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.82617 -489.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.5 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.5 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.17383 -489.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.16992 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.83789 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.8418 -489.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.83789 -489.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.51172 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.17773 -489.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.18555 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.51953 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.19336 -489.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.18945 -489.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.18555 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.85938 -489.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.5332 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.86719 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.54102 -489.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.87109 -489.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.86719 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.54102 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.875 -489.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.87109 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.54492 -489.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.875 -489.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.54883 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.22266 -489.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.21875 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.89258 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.89258 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.00391 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.67773 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.68555 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.35938 -504.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.35547 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.0293 -504.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.69531 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.36914 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.37695 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.05078 -504.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.7168 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.38281 -504.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.05664 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.73047 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.4043 -504.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.73438 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.4082 -504.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.08203 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.74805 -504.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.07812 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.74414 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.75195 -504.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.75195 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.42578 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.09961 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.76562 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.76562 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.43945 -504.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.10547 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.7793 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.44727 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.44336 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.11719 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.79102 -504.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.78711 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.45312 -504.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.78711 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.45312 -504.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.46094 -504.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.12695 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.80078 -504.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.80859 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.48242 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.81641 -504.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.49023 -504.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.48633 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.48633 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.48633 -504.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.48242 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.15625 -504.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.82227 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.49609 -504.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.49609 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.16992 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.84375 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.51758 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.52539 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.52539 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.19922 -504.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.19531 -504.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.19531 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.86914 -504.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.20312 -504.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.20312 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.86914 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.20312 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.87695 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.88477 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.55078 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -519.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -519.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -519.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.33594 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.00977 -519.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.00586 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.67383 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.33984 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01367 -519.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.67969 -519.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.3457 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.35352 -519.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.34961 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.01562 -519.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.01562 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.68945 -519.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.02344 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.35742 -519.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.03125 -519.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.02734 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.36133 -519.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.03516 -519.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.36914 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.03711 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.03711 -519.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.71094 -519.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.38477 -519.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.38477 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.05859 -519.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.73242 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.40625 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.08008 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.74805 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.42188 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.0957 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.76953 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.4375 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.77148 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.44531 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.11914 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.11914 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.78516 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.45898 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.13281 -519.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.4668 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.14062 -519.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.80664 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.48047 -519.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.1543 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.82812 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.49414 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.82812 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.49609 -519.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.16992 -519.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.84375 -519.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.83984 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.17383 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.50781 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.17383 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.50781 -519.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.18164 -519.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.51172 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.51953 -519.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.51562 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.18945 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.52344 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.19727 -519.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.19727 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\024) [7.704 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33398 -549.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.00781 -549.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.68164 -549.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.67773 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.01172 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.3457 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.01172 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.3457 -549.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01953 -549.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.34961 -549.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.3457 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.01953 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.35352 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.02734 -549.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.36133 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.03516 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.04297 -549.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.7168 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.39062 -549.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.06445 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.73828 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.74609 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.41992 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.09375 -549.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.76758 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.43359 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.10742 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.78125 -549.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.11523 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.78906 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.46289 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.13672 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.80469 -549.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.80469 -549.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.47852 -549.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.14453 -549.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.81055 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.47656 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.47656 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.14258 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 253.47656 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.15039 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.82422 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.49023 -549.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.49805 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.83203 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.50586 -549.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.17188 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.83789 -549.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.17188 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.8457 -549.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.51172 -549.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.17773 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.85156 -549.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.84766 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.84766 -549.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.52148 -549.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.51758 -549.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.19141 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.86523 -549.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.19922 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.86719 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.87109 -549.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.86719 -549.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.54102 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.20703 -549.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.21484 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.54883 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.21484 -549.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.88867 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.88867 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.55469 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.22852 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.90234 -549.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.57617 -549.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -564.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -564.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.36133 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02734 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.69531 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.0293 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.70312 -564.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.69922 -564.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.37305 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.03906 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.37305 -564.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.04688 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.7207 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.38672 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.7207 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.39453 -564.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.06055 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.73438 -564.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.4082 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.08203 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.74805 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.08203 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.08789 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\010) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.0918 -564.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.75781 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.42383 -564.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.09766 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.77148 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.44531 -564.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.77539 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.44922 -564.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.44531 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.11914 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.78711 -564.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.78711 -564.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.46094 -564.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.12695 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.80078 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.13477 -564.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.80859 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.48242 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.81641 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.48438 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.48828 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.16211 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.16992 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.84375 -564.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.83984 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.51367 -564.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.51367 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.17969 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.85352 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.52734 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.19531 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.5293 -564.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.20312 -564.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.19922 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.5332 -564.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.20703 -564.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.53711 -564.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.21094 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.88477 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.55078 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.88477 -564.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.55859 -564.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.23242 -564.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.22852 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.5625 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.89648 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.5625 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.89648 -564.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 421.57031 -564.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.90039 -564.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.90039 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.57422 -564.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.24805 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.92188 -564.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 461.5957 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.26953 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 471.60352 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.26953 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 480.26953 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.02148 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.69531 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.70312 -579.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.37695 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.05078 -579.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.72461 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.39844 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.40625 -579.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.40625 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.08008 -579.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.75391 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.42773 -579.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.10156 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.77539 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.10938 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.77539 -579.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.10938 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.7832 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.7793 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 145.45312 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.78711 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.45508 -579.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.12891 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.125 -579.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.79883 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.47266 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.46875 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.47656 -579.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.15039 -579.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.82422 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.82031 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.1543 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.48828 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.1543 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.48828 -579.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.16211 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.49219 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.16602 -579.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.83984 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.17383 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.18164 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.51562 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.18945 -579.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.85547 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.52148 -579.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.85547 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.52148 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.5293 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.20312 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.19922 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.19922 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.87305 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.54102 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.54492 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.21875 -579.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.88477 -579.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.55078 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.22461 -579.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.89844 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.23242 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.90625 -579.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.90625 -579.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.58008 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.25391 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.26172 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.93555 -579.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.60156 -579.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.26758 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.94141 -579.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.9375 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.9375 -579.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.61133 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.60742 -579.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.28125 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.95508 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -594.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -594.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -594.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.35547 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -594.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36719 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.70117 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.375 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.04883 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.72266 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.38867 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.0625 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.39648 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.06445 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.06836 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.74219 -594.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.4082 -594.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.07422 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.74805 -594.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.42188 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.75586 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.42969 -594.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.42969 -594.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.10352 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.77734 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.78516 -594.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.78516 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.45117 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.78516 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.45898 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.4668 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.14062 -594.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.80664 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.47266 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.14062 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.14844 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.82227 -594.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.49609 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.83008 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.83789 -594.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.83398 -594.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.50781 -594.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.17383 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.84766 -594.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.84766 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.18164 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.84766 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.85547 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.5293 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.20312 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.20312 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.53711 -594.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.21094 -594.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.54102 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.21484 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.22266 -594.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.22266 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.88867 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.22266 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.89648 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.9043 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.57812 -594.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.24414 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.91016 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.24414 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.91211 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.9082 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.58203 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.25586 -594.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.25195 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.91797 -594.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -609.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -609.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.36133 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02734 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.36133 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.0293 -609.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.02539 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.69922 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.69922 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.69922 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.70703 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.38086 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.71484 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.38867 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.05469 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.72852 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.40234 -609.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.07617 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.75 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.42383 -609.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.75391 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.08789 -609.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.08398 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.75 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.75 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.08398 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.75 -609.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.42383 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.09766 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.77148 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.43945 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.11328 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.7793 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.45312 -609.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.7832 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.11719 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.79102 -609.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.45703 -609.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.12305 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.79688 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.13086 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.13086 -609.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.80469 -609.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.4707 -609.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.13672 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.80273 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.80273 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.46875 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.80273 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.47656 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.15039 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.81641 -609.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.82422 -609.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.49805 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.16406 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.83789 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.51172 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.17969 -609.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.17969 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.85352 -609.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.85352 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.1875 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.86133 -609.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.85742 -609.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.53125 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.20508 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.53906 -609.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.21289 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.87891 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.87891 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.87891 -609.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.55273 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.22656 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.90039 -609.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.23047 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.9043 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -624.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.66211 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33008 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.33398 -624.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.33008 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.00391 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.67773 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.67773 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.35156 -624.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.02539 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.69336 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.69336 -624.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.36719 -624.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.04102 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.71484 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.38867 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.39648 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.73047 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.39648 -624.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.07031 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.07031 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.73633 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.41016 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.08398 -624.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.75781 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.42578 -624.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.0918 -624.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.76562 -624.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.76172 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.43555 -624.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.43164 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.09961 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.76562 -624.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.77344 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.77344 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.44727 -624.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.44336 -624.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.11719 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.79102 -624.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.12109 -624.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.78711 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.46094 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.46094 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.79492 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.46875 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.80273 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.80273 -624.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.47656 -624.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.15039 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.15039 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.82422 -624.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.49805 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.17188 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.8457 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.51367 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.1875 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.86133 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.5293 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.19531 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.86914 -624.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.53516 -624.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.20117 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.20898 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.88281 -624.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.54883 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.88281 -624.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.87891 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.54492 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.54492 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.21875 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.55273 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.21875 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.89258 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.89258 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.22656 -624.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.23438 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -639.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.99609 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.66211 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.66211 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33594 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.66992 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.00391 -639.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.66602 -639.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.33984 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01367 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.67969 -639.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.3457 -639.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.01172 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.01953 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.68555 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.35938 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.35938 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.0332 -639.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.69922 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.36523 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.36523 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.0332 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.82031 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.48633 -639.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.48633 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.16016 -639.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.15625 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.83008 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.16406 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.83789 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.51172 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.18555 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.18555 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.51953 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.19336 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.52734 -639.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.52734 -639.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.20117 -639.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.86719 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.54102 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.875 -639.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.54883 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.22266 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.89062 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.89062 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.56445 -639.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.89453 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.56836 -639.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.23438 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.9082 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.57422 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.9082 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.58203 -639.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.25586 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.26367 -639.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.9375 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.61133 -639.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.27734 -639.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.27734 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.94336 -639.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.61719 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.29102 -639.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.625 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.29297 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.29688 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.9707 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.9707 -639.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.64453 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.31836 -639.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.99219 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.66602 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 419.33203 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.33203 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.33203 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.00781 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.00391 -654.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.67383 -654.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.34766 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.68164 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.35547 -654.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.68555 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.01953 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.69336 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.69336 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.35938 -654.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.02539 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.69141 -654.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.69141 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.35742 -654.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.69141 -654.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.35742 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.03125 -654.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.70508 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.70117 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 129.375 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.04883 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.38281 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.05078 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.38477 -654.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.39258 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.72656 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.40039 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.39648 -654.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.39258 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.06641 -654.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.74023 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.07422 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.74805 -654.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.74414 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.41211 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.08594 -654.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.75977 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.42578 -654.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.75586 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.42969 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.4375 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.11133 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.10742 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.78125 -654.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.78125 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.44727 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.12109 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.12891 -654.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.80273 -654.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.47656 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.47266 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.80664 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.14062 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.80664 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.14062 -654.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.81445 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.14844 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.81641 -654.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.48242 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.15625 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.15625 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.49023 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.16406 -654.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.49805 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.83203 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.50586 -654.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.17188 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.83789 -654.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.17188 -654.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.8457 -654.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.51953 -654.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.51953 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.19336 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.86719 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.86328 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -669.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.99609 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.66211 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.66211 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33594 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.33594 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.00391 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.00391 -669.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.67773 -669.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.35156 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.02539 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.69922 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.70703 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.38086 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.05469 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.7207 -669.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.39453 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.06055 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.06055 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.06055 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.72656 -669.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.40039 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.4082 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.74219 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.41602 -669.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 145.41211 -669.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.08594 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.75195 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.08594 -669.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.75977 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.42578 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.42578 -669.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.42578 -669.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.42578 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.0918 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.42578 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.09961 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.10742 -669.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.10352 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.77734 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.77734 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.77734 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.45117 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.11914 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\014) [6.78 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.44922 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.12305 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.12305 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.12305 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.13086 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.80469 -669.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.4707 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.14453 -669.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.81836 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.49219 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.1582 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.82617 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.49219 -669.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.48828 -669.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.16211 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.83594 -669.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.83203 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.50586 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.17188 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.8457 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.51367 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.84766 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.52148 -669.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.51758 -669.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.51367 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.1875 -669.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.86133 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.19531 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.86914 -669.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.86523 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.5332 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.19922 -669.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.86523 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.53906 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 471.53906 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -684.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.68164 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.35547 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.0293 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.69727 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.03125 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.70508 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.70508 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.37109 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.70508 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.70508 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.70508 -684.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.37891 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.37891 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.04492 -684.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.71875 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.71875 -684.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.39258 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.40039 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.07422 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.08203 -684.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.74805 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.41406 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.74805 -684.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.42188 -684.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.41797 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.42578 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.75977 -684.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.43359 -684.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.42969 -684.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.10352 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.77734 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.45117 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.125 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.79297 -684.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.4668 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.14062 -684.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.4707 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.4707 -684.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.14453 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.81836 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.49219 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.16602 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.83203 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.83984 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.51367 -684.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.1875 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.1875 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.52148 -684.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.51758 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.19141 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.85938 -684.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.5332 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.20703 -684.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.53711 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.20312 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.87695 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.87695 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.55078 -684.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.22461 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.55859 -684.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.23242 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.56641 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.24023 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.90625 -684.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.90234 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.57617 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.25 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.92383 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.59766 -684.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.27148 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.27148 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.00391 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.67773 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.67773 -699.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.35156 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.02539 -699.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.69922 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.37305 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.03906 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.03906 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.03906 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.04688 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.7207 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.38672 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.06055 -699.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.73438 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.40039 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.40039 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.40039 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.06641 -699.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.39648 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.39648 -699.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.07031 -699.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.74414 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.74414 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.41797 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.41797 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.75195 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.42578 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.75977 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.43359 -699.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.76367 -699.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.42969 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.10352 -699.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.77734 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.44531 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.11914 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.45312 -699.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.45312 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.11914 -699.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.11914 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.79297 -699.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.78906 -699.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.78516 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.79297 -699.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.4668 -699.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.46289 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.46289 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.46289 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.46289 -699.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.13672 -699.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.81055 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.48438 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.15039 -699.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.14648 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.82031 -699.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.49414 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.82812 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.50195 -699.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.83203 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.50586 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.83984 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.50781 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.84961 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.52344 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.52344 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.85742 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.52344 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.19727 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.87109 -699.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.53711 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.21094 -699.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -714.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.00586 -714.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67969 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.35352 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02734 -714.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.35742 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.03125 -714.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.70508 -714.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.37109 -714.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.04492 -714.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.375 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.04883 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.05664 -714.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.05273 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.71875 -714.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.71875 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.39258 -714.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.72656 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.40039 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.40039 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.40039 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.07422 -714.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.07031 -714.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.07031 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.74414 -714.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.75195 -714.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.75195 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.42578 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.43359 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.76758 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.44141 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.11523 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.78906 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.45508 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.12891 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.79688 -714.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.46289 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.12891 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.80273 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.47656 -714.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.47266 -714.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.48047 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.1543 -714.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.82031 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.49414 -714.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.49023 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.16406 -714.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.83789 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.17188 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.8457 -714.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.8418 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj Q Q q 1 w [] 0 d 0 J 0 j [1 0 0 1 360 805.89] cm q 0 -300 200 300 re W* [200 0 0 300 0 -300] cm /DeviceRGB setcolorspace << /ImageType 1 /Width 512 /Height 768 /ImageMatrix [512 0 0 -768 0 768] /BitsPerComponent 8 /Decode [0 1 0 1 0 1] /DataSource currentfile /ASCII85Decode filter << >> /FlateDecode filter >> pdfIm Gas`+LN4>:en+d[1Ms-tPpADPK_M(p4*V=nHgeYCQWI2[f/*F?s81qM,XG&Q0bGok /jYSV:mKTqkM2P`]Pf+Z?-.C\C%k*>.>^-^0rI.rPf?rI&_C4=\Irp6K7Ig\GHl7< ^?iKF]5/F(kE=HgF!18P7-^D`b+!!5e/q7P'D6UM)[s-F[]32kQ&=mqoMRHT$%\P[:')]]6fXc=)PgCf$<5dMtXG8/;fN'l!-.[gfX UTUQI'TJ!_?C!ILnlB&IBLnRdEN:C"\&G#hP]Z3=2SPZI[8Mm*;V=cX4)mtNXos`O U)m$+c6.4[[f,HRu"je\%uID$D;]afhH\ak?2K*@#Mt3PbH^8719ls8Co62W&s%jD5tT]^$$`8t :5S:W_f61)p<+2keZ.*,k-D2%*G]!5]$I_NpML-3)kioa)O2W^MI]VV:+JUWUWOA% \Y:EXdMBuo@RXM$C!1W>W&1kD/KLduoq:*f=1UFhmV#719sLP?[o=L%<3eq[RB%jD 20l&K8QWi5N_F^s!+4lg&pc]JOVFfn:oqc2Fa:NkW&0diQE&ZieiLBg=5W3ZRXJ[] ?tp4sS^CJVZI>B3p2B[C2i!%?UZ(&!kl,,jE&r8,"4O1>l-mWcPR2U@![;\\N']>g$s<-3$'(K#CBk*hsGX]6*IuRX`(\L ekX3+PNI&DdYaH^;,\iOBn]7*TX!H7[JXX`%TnRjJ",X* G5B$\JAiY<#DV2c!c.WJ0aR.>rB"CHB/G*l^i."Am.e$CfB06ng'_]t/-r?3Trh(7 )dq&#=rDm.d-t3(f9VlW>kOJa*_XIh0"XfMkVs^V?a(N?1LmOCZ\6U `o9[_5#nLU<$6H7:*#-H#NG*a\9&jrm7UUfddEfFGUORS8o>-X[muq^a.#lFiqK@? +3qf3/nAmn0?ekM(*rT`\nY=k2 j>K339QtC'XkRsX1!SM9M;(.9R79s3ct=5$S&*Ha)@%hBd+0IU`<+X_co_cr(!A.E 'ps_M`%5B[M-:%Z&b@8a!ooA^'Jt>+aNtI_5qens#'HJe(:=#YU?,=_Y-g[PVsF," Xan,+1j$X4?GtW[=p?]3(rj$3nSKt?nV_$X]Aqtt34U=h8R&*\/Rk6TJ76G+#&2O/ D&B,YrIh=LqFOiou#3D6oL"HM,?r$N[lI`'dKQFVH(Q/ <\qptDpm?B8i'2AM+L#Cq<,D+)>@=W[@VJr@s/073]>ssY]CQA&)*?O[WfI/\(Bg3 ]Osn2$PE&@iQ.Oc,kZC0fbiXOt@8?BW, l1A^;]DB\MQ,YjeoRFJ'",Hr?5>PM7BM(;Gc%_aP^V!U4_uC^^Ak`X42]A0A!%.`+ "TIjJADO8[fP[+534s5->^J+nGhV>3sk=M*U1pqM$Za-[ku7KB7b(Bio/0a.iMT:!8UL\XO@ PPZ"I`D>I5muGFI8#,;\j?FP)N/%5Br-LN=2P]$\mF8Scs)$']m@=!5r8/!R=TelO !8?lE[m2mZrG6W%q6(q:$iYq6)89rs0W4XXP!AcWj0K;KrrIc`o99*A!=N2&riJEY ^Tl]Rj;n)e?'fQp8H'`OTg8fHrlK5(nrts1YqgfK:#iSJ:]FW#+&7`_5" :D!U,'-k8;Y'kjCq#;[Uq&Yq'->$PB!;N1:s+L^YL]HEp"aiA*ldpb)?H77WqJOq. 6id,qo.NF5!(Mf^0T94l;8UIR+CtSK1b]$Wr2+qc#iL(qraufS;g"j-!;R:i5OmJ- .J9G8+b)sR6iP+FAoT]LH.TUdIm*$1-1'qpqZ_j96kRISaL:HMH4-l/hKVfQ3)AGC i3)[\NiRBUSu$+B)()OG+b/0iL<HIZ)R'?k&PgF44cMl$lXND57G>oRGSt"Y#oF,d5]? FeMEtWSi8hJ,E+Qs/-ARn:,%g1Uk+rhA=*0SHESU_>j8"s.@T4n'<;P0,.bGQ!^^o he_Rbm@)oPg>AI4J%P?f\TrYu(]Y>d\rZu>aT%H&o>uiip7kRdhPkj@lG9%/E8re! S;+#d"N^UA&%$7$`do`:Ik_"2ao<]n"`@gNJJTbc04.0K0ao!%V#Ul)=?WGbe-L-u #([hN+Fh]:`dZDoMODM)$c$3c[/qKTYbhV5&49?_!#At00TD7X@1&A+8P].S6T:]O bfpYZ;0=7\+B[_9s$rLQd/qP(!%Htn8gq_O`M3:nB]`m@C)Z-SHGpcJ-AqhV@kDS* NS.>V*0>[.nt#f<i[qQ,=pE=ql7]Il:&PX>n-Y^,,(!@C_Prdp9Q2^2C4.S3Vgir&P4/lM$G;f^X"'D ?``7R_#I[<061B8$M*pP2QiV:51]uhr]1"6;?)EJJ)pW-=]=J\?`iQP1dV>,s!\!l r)`kN1n"BM%0bfgrm0/ke,h?(Q_g+5,[D,%s$?ib-jUEhkl5Bf?0c7j4mgGgO/4^_ *aTo'[qKO^Gjje%!VT$SUPLHahM[) r84ZGiVus3fS'0\VH1tBs0pE'np_>PNu?%='EOco('i'u"8\..5a!3X%Z&(]I4;N' HsmQ-HRpbX)0@iOh/o&%*qKG&+@L_[Cerb$^akC[;rcU&Sc=[\Q_EJfp4(Z5qd5G7 nm%SB;^>.!Nofdu.JusdT_(G:s4W%6`VG"..%VDMB?(YIs)[GRL$\cKm*iKb&HMhu rnj5LP5Hj+s6@u>@ipm67u-5Z;tIi!HZEfg*P+=fDW];uWC&mi)Sqf!!9X;sbLlRC s3o=1a0Ye;rdt1=i\,n6?3.6-J:_/CiDY8Y!"f3Uk6Hu7?QdS-@1Y.'?cdcui>"0T "N#c]Je9dIil6G!i6;c]0r!rGs2S7'chUoPs0Due1AUZ2'#FUCKH0R_Z2YX$5D^kH X@Jk%b>QV[p`K'ffp8C794?RQphDg6[H,)-#/'u^IW8Z+om2&sLR'`aokI4PmAU:' A+9%Zr@_qcPguM(>S=sSa$Nf5&nXsM1d-/r.^S$Q%8nb n:*'galh3I=Ob4fQ)\^SJ*)60s/H"\rI9;VH8o)e!&D1eS3Q0>#la"6#HmiWs*Kqm niu3mlYlC65P)Xdh(Z>'VIn'Ys#3RTcmfmks(9:'9H0EL@k28,5lMa?aIe@jaM/\I mRCU`>qh'UJ60Smj6.ZV6iXL`Id[6Eb6/_Y,H/5!)K$4e_;T9[c!qmrIiegC#gA3V nir$4pn&a\r!uCpIF4b341%#[->QPXCoZQ]13'9a>cPk,R+XDF-$S#lC'Le7RSBYPns/WRda@,GfmCJ>,1/d;%!@=D%T8F'hU[4!Pl ,Zqtac*da,a`+>M9Jke7Fu%QA#DS_^H.k09WeOBm0J$lAH$)?L@:Zd`XEK]V!QkIc ">h69V\HP;\/8=@\:9CgrtN'@?do-fS3LYVD_d?LKRG:`?U`k:p.Edt=je[Xq\deS ,SlP`YVAls.R@(,:.R04hPiM\3a2Gq&bb=>^R;"olX1X3c=Vnf>bKn7('p[d6.]Eh>!Fc[U+Crd=*^ '+V;'gM1R=o'[)h!:kobo-I6h]b6=,KYkp+i,Ud[s0!ONi\;&CT1lGni]efBrt,p7 r5C)`.kO?#/ZlJ#20^1fn&srf$R>eh\*tGFr_6P'_>>=_-RpERV'N7/V<%YW8(o%7 7MGH*VF:V]8(sGpl#pIKm9+(=lV5P`WuIonr<-8"efbMm7K"pd)!#d\7498scn)O8 !V+E>peBQ@\"N\L,6\_*T2MhAAmN14h!`[oG8^-IhR?VrbDJ"h*6q))ZRKHZdR(b*(B)\47HXD)1p.6R;->`qAGjcS"b@ `ILk%Dr1gcroAPF3X'NaR^ER/O?=Rb,U2eioFLk,dSq_X:ocA:2*Ld8<1u@X/XR3`udl#&CXgYLj2R]'O7buFiklL]h059_U%3hI5 f@A@(>"Z[V+JEHIO6]sU'?S!.gZladISTn4rF'Ml'L)ZGrZ]hTd3QTPTDU@L!4;bV 6id%T.Xs4'eY1$kio1RJs(W+pL%aL*GqVFd0DZbT;Y:qX*^*ADlUidHdAb5LeN&C7 @oK2,jJ`OLIj0=mM&hFm"c58'!]%gUr3<&>/?Ku:R`D_ZM5#2D+.gWpBC_O5q<`mq r_a4/s*qIm5.fIH*iT(-fD%LR*H1`2@P`L"rc`PQND7ISJ#+7AoT6iGs,l%=?MT'h Y`f$CgK3s,DVrJc%rj+E9Pi)Xc@8N)$S8.T\;bF_Ec[pWFDDl(NZo5?.I]L\OI:9O 8cI'8O-h7K$[Obt2o@VoE?,*&4cfI'c oeeX8+"@9O%kX"C,I)HSIiu8^&%i8Rd/pDhU7umKSb)jgq*.qc036#QJ$CUY20f/= n5T;nk$Nf>:[bBonAiYls-5)&s)Ls;s&U`;Q$PgGl,a/TjeDcf6Tt&@^iJ&aH5Q!3 %(EINkuq[Ne"gk"f?@W#0d-qEAL"AVOrb%S\kZS^8BXW)eTCVlAgd[=YPd:fg:n:ap/%79-IgY*UteXV]Kp]W.E! $ahB$Sc?=XNUk_$#&,))7"/bD&\&L9l;J,"9/%#M$%p8^b503`4i9H>d9%] K2-ClnomYL*XV"Z=YccQn:)pb9ZL/dUcP.!(,EHf?rNkX2t2&f$YpOGLs/E3je pV3$c^RG(-:[74"/b=J?0UMf_5I&[55lR;R'*mFl+7a(DO7%X?o^uIF5QAVi!)8"I s&0'9s+:.Lj:HD-j7.depS!%l"8Q1BQ5rR&Fc qs7^O8,pPDpj-fTjtd#hBT3fm\TNuuJGEQnhkhE"knnUBi2-GsJ&206^pYBcg[G[T k)X?77CNHAr/3Z`\)4*,!#C1dKbV%VmgqF_D2J>Q<=6P>PH]bY,d96i,6(Rp+NU2Q h[Q%\14MBaisBF'@1>Xj1T]OA.>.t?L1RKK%0#]bQ/qs?:soZ,&HO/,nioRY9E2'7 s"sNn7sOij6gCaSS9AfrSSJPPCZBd6t. q,?Acq4l5jo+d79]K&ru7`s:IYuq%d]6I,RUStW_<<$%bL]BH./tc6B=3HIn7>,^:smnIgXp/'XdreJI(cC$fhE5Q2"rIVeVR* SZ8r#1Ua<<3=)b!IGVljU\Q'ASE<0^pMHq9h<82Jl'Ug"g]Ckcer TrX1"Q'gqcgSDY9$,@a$Q\Cs8TS''@Zla;/_KKYG+ca.0&W\L.Q,g%=$,7Z!)Hpn>MKLMkZi>$i2q6NL ;Xco@:ZePYL_ht&qOb.qjSu5"'P[uTs5AIK^XCY_\bloo[/`9A[X]1Zs6&e-"ogCG Et!_GE_u_lSSe*J>O70ncj]r`qSl!kRD7.tesdRA#?9J-'1`.k^Z%QXY:2N_"c!HGm7P(r \07,C(,%aL?W$e=<)a[LaF k">GoV1*@7IW4L73q_EpbOF2%r8KGZopWX$>JBp8i2b2pjkBXcC\m*H5.MQdJPUIO LQ29"3`Q)Xr"!YU^.ek4%pdN\(Zta&rP/<*rX\JQZ'p/4J80Pu!Z'nt+h^M\n0/>R &BXm+`84d/QTu*)"b\K.E&Bj5s(TD4KC_,!0:jW36L[3(7uGTKDmB/2Fq[2g3a#(1 8;.=_1$u"\*)-5Q"ePi.Gr$iP8:af4dLM'6MZ>@5patEXqO`ZG2:$@6cf@:tWeda# 1[SLA3`d*q&,E!qpKalrCb$[t=tHtJc&/MYmV!'j5EoSRY+qRqKD]59j\Y^mr9s6l -3&bYrs3!3$i\Hd2mNhjkDTA3]J35@LT1M[(=`4:JFA))7oA; dYLVP/&Nut397aD8c'!#KNl@o0t/^ms0]-5&Pt"D=:fH:,PqfH0@e]b+V5Pq"As'&b,&-(889`DGS \mF">C78m;c2L3_62p.a5m@;?ZRYN1=o]<=SH%=mj4sZ='EOa(pYgU>$XfV):SSsX s6p'>rtAH5;Zs`M":6"JBE;G2p+b/]VYT9Xni+7D5?I69m6Nt@78O>ANo/V$=E&-S ciP&@\ei+R#:aQhUS\ 1M-/Wd5b/!cdhObpe!?S;W$+`[s%.k:&X/"U87hIdY!Tu"!eE-6hgZD-_C;*0g2hS ^"@mcG2SSXHl(ispn&a;YaU^edS mc/Zt:a84jpjb1#2K9\l(+)enBd-_3qYut^FV$I[L2o4\i/a/K;h,HZ6iI-?r!u,A $c&nGl*LDB'!qc-G(>s-(fp_*'WC;b3;Hnjs,Y%@s20@"jKD#=r4d#)j^9Z*oP-C2 Yo:,S]fod5>cgE,U/Z6JO;$4bZ;+3L+%[W*o*A0C=r6:pJjhq/QiOp b$%L?W`;(T+,a`(eK&=Y;_@ee_#LlBdqi\;FnOd\ERqS(;Lc@V0\q5K*B`-tI_7]: FF3l[mYp1X(16LU5<\L`]K`rrDBf5J7;4[V0&lh6d.-:\rQe?m:W_pPAqP"oM:G'j g+KB%2.Nh-jtLpn`bn6&0'ZjD<_h8fB]+te>Z6Z]M]lXqTZm43)6YOSP/eTk\4mAE G"KOtMqXt_J1)1VH-DttPqCYUfQ(XI]Ne)CDE7Wep8bMcaBt-jW,kg15,QRPFN'K) r*RSab'E%&s$lc*.8VI.i.%J%IAU2q'eWiL8BFY<]7=]m1&b=*0A^RA)p=VL_j8@!k5S[=77hb.hH3_8[Z _#Jc[fH.L0E%m4tX:^]NRrol3c Io&+k_uJ8.AaNaU4BJr9Pe@Iti'IPGUM.EI1%#SR:-Ilf.dXtVY8M`#[X@XK_.Wc` Y5"/dJ+#6Z]$9SB?Pg?5CZ[HJ*C_s\[i)uscJ^UCs1p5chtX[!K3NPnmCUFl\<$'? p'!W*GWmJK5,Is;V[pS`be]),5/:Wi:YEVrRA9N@6](l0!m*Uj!b`d"'AK'HGDM^o 6h!;^!>.q]kPGWnq0s6d_#Jr_:\U([2]D]E!YgR"36;,5":tSZIgQ7g.:<]eJ72+X 7WB.ReoUWtkOK_keO?Yimp=8Kf@!Dk_Qal]XTYh.!gh(R#NWWlno*"mh7d>P#-qj1 aZj-7=d6Zcn.'"o#_p\6X?cd4fG`hC88]]YU/[_AIjY1^<$*+-K+s e;('D8DRZ&5lOiJr5nu(2Qk:(Q)52bYL\!p5Pr3uBQho(&`g,7:Bgb;DC3Bf^bBZl LCO3XBq;Z@mfo`UpJB_Ag4)=Mq(Oo/G]WTCp)O)3Ee!oXiTf0mmFN`_[gtCVrVb^B A@paKQF#R]i(_ks2fo)iJ)^=nRGcDffLda%dE3uO-!durka"rVP+c+0\+=p5^R8]/ ".6h=eWb^OU0jJ+AfL/@O##`nV&Th%57-[s!ait64@tkpiDd`9Ea3.MGY?6CN:($i(Uu\me!5:)P5T9%F:Jg*f!Vb7i09?E"Qf%TkbKd!59]eD5lThoDU,R=9R^<-J4TZlkWqG= h[And3"*Z"K^qDo;]l)9F,=:.PlJO3L&&cZp.&B=$q!+/i0F@9JY88PJ8"fg9s5'+ #8O_Zlr"u.KGItCs(DFH&-Q>8^O327s6CK$eqL\`Y3qm^qNmYu'q`h?n&bJ`r)s%NECS\*f4 r;RVi"&H3#LY2T9@LkRIpVHUp(\j.Rr1#hMcp!$Ra35,>!*oR^!e;JFA,eI$LBmmh ;$Qs5Ge9BJl-(Hm2YhjmjtcB(1,Bq!lGNXNI>9sR6IYT\4C[;]$8d?,JrbGTS0@t( DZh=j$c(3tZ9t>aY\ZT!"`l-.#6Ct>'c<&1ao?h_^o&Y:s,1p#BE*a'9-NK1W,Ess 'p\BR7U=U2WD\hXUIJkJ'6m^3hp;G^jfsg?I*D`IoZ-q\]tW EW6aIr[f/c=!@FCRM<08MJb`7bo8](@k4=0p0in`64<0^6CLe;;t?pZ*`^LfbdpbA `i0)TLOu\.Gm(?Ji.R`rW1eM<]FN@bA]h-L2fMp8q`jCZr\$Z]`MajK0-q(sIjJs3 B$AeqWKoKp$DqRpLb&D\.,h0RcjLDM1/FmF/!LqIOu?BRA4t:`$5%e=a^=Oe/16k_ T+T7b$G?F^!H_6'Q2bP$<:4EM?!XRN=Rc@Ap\ksM">RFL)7%NE1L)pUrQfn9U%mf* s1:MfJ$#j7,G:b\EUkauj^b=hQi&T9:D#jO!2TZ>i')EOrkF@G"TQf[ !.;>*(Y]P;Qh,LMMs!_=o'Z_joE5Kq^O<6HRAW;k:-G6ms'rmIjbSFV5Z[VP!@"2u B.6*tDFiUlb53=cJEhW;Rf#AU0_p?qHbJ>MAY#Q[KD@as=G_?)U;!IGI&2p3D`4Hj ^2c&>rpOqSot%(ugdn>EUJ[9SDhN[+jA5ac7TVp]eS&bFSleX]@ir=B* =$"b:kC8Z0^ter^;!t>Cs)U#^jT^ouV']h?rga#Y9"h(f%^^knDD9HHa"$NT^MYs\ dI87W+&n5PMJ60MO/lL6qT_fVn#h*.e33ZT5P[8urA6Y63'.'r^A'h$r&V04]sT'g IXcJ=qoSNsa/^jhk>+$lZgLl#TZi-k,4<2N*Ij*Zrdkn.+8hrT=`,K2mBimWd<8FS P[HYOX[R?^&CZ*EX"Lt@"W'79#I8Maf$9dM%g#2NWQmJ&Lk%=[pP`=mj&MphJZs*m n1F?>Q^U?nKB1@a+H9F=Vp5IQq&o/+Eh)rtjBp)6R/Au&ImF#5@0BC6PY),[q31ib ,n3D325q3paL_o.q[I=$#.*;o$)1_b13CT>tUW**p V/O^d?toU`i,6OCs7\g*#;H0*G2WBD]+JEeLArLu;`)kh0_q=bTGuTR"S;bBJ?/^B ,Cnk$[0@D8q7uo9'\J$8B+#r]EF`.$,(KbE@-Ip?T^+CWXpkit63Og*0-``=#^B*q .gG&F+TFn1UBP=9Wd4VOBSSLks)nL33OI_aWOm<;ao<%U,^^a:"TL\k>OT70i6GhD rc_T*IkYo3LmS*j;>bq4Iu46s5PUU.JGBBE$ect9ra57E@.BLX=e:Zo>Qc$0-4_1r LPUKXpq?a)!6'MN#\8B&#Or=t$X"ftq/aju@Wr9Cr;/ZImoftf\%F2J!;;4/NWoaa TB+N$t6&T25I*gjPiW^PjiF;:p)(Ps;AM' InmM'8mhTCn,K4(>,t/iXf/67ePq148jHVSCPp^^cMZH`CV,==[tOdl+FsJ,BEoA, %3g=`"-4)U]W.K'!U*12RsP6dO%U^.!@N@S@Np0Dq`c1RP5g6q+9(Hhs#b'"W!-9? ";tRR!(@nV(A/eWdcZM!>`m,m;cKYel=AJg^cVcg hmWUT5ICKf[YEjMmHNg**t-2_p]#=WOSMcOs&]$2Nds@`s#+^K2#Bc5s5NrhdJr"( H2l.h9`A0&@ibYa!J\^%nimt49VMsD^+fS"\I^ii`7RXY3\1De/ta0=mf`?qra!n@ mEh&HBILf&KDE<4'\FH3G>S353WJ-k:1FO8p`Zfh(tST>T?AEd*8(N1!L*YAJ>V3( -j>80TG4%4Th#2""S6\#faFtR^JKG)#M&j+s1=WO_3L=)!UPQ?SNXRC`bDr*)=Q@X H]K&;_FL0sjP*i@YH[$dHCI/&gitA+(LuIe)1*oR5(WCrAb#f@r]_P$InC^oT@6?\k!5j>,'K"c@ngFH]]kX5E&H(Ehn39?,bqE]Ai02cqA`S>uJ>Q,r\<[,* 6,tWK":-IG4cAn"q3:Auab:#Q9KUj)/lD1CP`)[\Zg7:q(sX3ujSb4Ne(n[o7HO)T 5/3'!588D_n@tO?r7?<^hZ)Q%.$=S2gmK5r]AY9T.">C!/h8g@,l`0d`D(U<64;-[ CK_CRi.!?\eE$WZ(BJ*ms6SY0K)]Q[e*61Q'B==Lm#T]1J[.4r%u9H?5We5rVd8>m AS1op(csbVUpr34mG:h9n#H]OTlp_0lUMJFj2^9gbC\"GV828NmH`!dp#58\4kh4\ 0K[#7m<+\#kWrYqp[hj *"a6h,+@l1N^sorAgI0"76B MSd3=+R&h/"9Q?2&I=,@#t<^('2.<&gLt=NQj'F\etaSkEf4es QFgtG"2i^p./5Zm1"%u#]%091"]6B,C'/=TbKHN)H5L"nER-8a=)5B>+SN]0/m#`u[eTq?,!8Dj[obI9r\#Bp:K7F4Np3l_^n->MK=)V1!;i5'X"G 5#tFMWi+d'rT$oCr(HeL>MoF&D#8A?!2%7I:]6JKh-*Io1=pGS[\#h-nb9E^+$'(b 8jJ%FTGj-I!nsYM=1QnJ]r:tiGr;/#>rM_CJ.d(,nEo3N+S9[H34Y&iEYKVHVF#8=LP9ptnum>8Q5(TO)0%*@U*1 d(Vb"Y:J\@+J7i=(:9LB-CI^XZ9TJSaeN!1,U3es2aaR(E-`an=q;rKN79=T5SsXC nsbK1,ZU/,/+QA6OfPPHuQh8C5>d]jJRfV,k92n",=g(%e@ZurjT k0[*1TFhb70-uKWMNU[?f]&&j<\II/JGQ+RH)9b1BmWpm^.gi)@Y]-(%O7?$:#O$& "uOuIo2l$QH8skfmsU-"h_&p7gUXlOSmK>(f$Q?R4_K*W!RqKR.,8&`DLL8`rZ1J> gj9Is5D9X)7h.aOO2/fgnYc0(QfK%ZRQCJ33r,4."gn&j3Vt[\rd4Y8hh""Ff;r-eSq<(+R/Sp-)J*`9qt.fXNigoSX[*SGD-(_!7shIa+%?EK(l q=R^%/K.nAs+^Yo!9B2IJB:%P(B0@?hnf>SIj2K3q54TEaIb]gq9o9gru_(Z_ep9-X8+Pugk3e3!q[o$HAh1g%YnZk+4jh+hs%.F>m6.:JXZL$l>ZLn (nJ"KE!GF"-\5Y#liM?(AJucWY`*/,JR7)=W)L+UL57T =V)MZQ#c5YBIU,8$1cDW-j"EL9fB%IkL>+`iu(uV.hhj,S"BdK5[=@I!p'Al8W!du jaWGCIDAq`?nVJ-k5Upg*ZP!@AL;GNj[HT(@i.$&X-Ukg$q(MUEhR?5Y^VAVK +FirH&H#=2_Yb[/niu22rkB!1$N=Css6%OGt:s&XgJM/NP:Yo!L. $;^j:'EK9hN">Gg8cag"]?!0_,Z/OHHiK.YQ=7Qk%.O8bqjriKOoIKD2<7Oa7KDNL Sc<9YqnMBX\%IU,O21u#h[Y&&J#`NiY*Frm-%!=g$]?KK8[GG\G1;.qC,AEM/8KGf X4>a0EAa4g9uN>BTm,RIT('?_jD?19/fJ)Kq$$RAF/t5iB4jEoZ>tSa5>5:c^g9n&M4"D5L&`t-Z8OfGPM@#^2QV/!%8!lRYU@BM9s9UE?#spd1pg/7Si9g@;DGCV%WBpN)RKJZT,J:AWa7iGI,UbLSH%-crqEA]#54X(7b),O ANrP"Pbo39+c#TtT,*_M!@%B,]pYLJO^:!9DN gN?eFQ^45glAlr:!i@UDTj=k_:]@!0TBFMCKDH\6I+uRrY]JisJ'"+NPQ1>cnPB-# MLW_IHiHJ.MkKiPoKPbEnaDVMr)Rig?]0(N!XOY`+U*NApn@`f9E"n5rtGLICYo*_ gVG`6&;-fE5hkpHK]4(QY%;1J'G2HaF#3)&)/-Mt/-W0o>S+sV,,"+_038)5s/]in k?H2d7-2ofUEo05)>b9aT&cuj.2smGHod5j<%%- Mkua@ae'nEK)DVCY;CP#ZQoG?b$UP0OT4'66YgGrTa2JRfH\90m,OhuIs0RYgOKR& a&f_'`_Kmi)]FGU'-a+,1UPojAlIN!X(k?H;W-7.%F_h'643ehF8k%t,lcWS4qRWf #Us_"4a=%M4ge&B\'H,MVg",Q;9@TfX6VK3gANpQnPe6B&+fpZJ:(b8(g=$Hq TF7^pFI`BoceWX,MsMOP"s!^`rbr;Jq7h)i+SjXe7Y293HcZ5F/H^?@5[P%k)A.$8 Anf90NMND=ZF81cbr!mu41Ealq4BB#F$-k#WL>\F1AXm<#E!540(T.c57RFd<:Qb> SruTB1([$7K?;A'@Y80M,/>"!TccT'K[X`i,d[Q$jF7mD,_#giG@o)!<;El[s8HPR J,Xl(&)g=AgD9b6,2bQ_Z]/H_$1IoMm[2f3`h39A>6'!C]^(< "E<^e6Mm;N&*EFIi8fC/ao@%lcUb=).X1-*7)37=#SAb^2ZcO$`<]lG"Y=`rpg96s G)(boW7j,%DUUH/g6Q$rETm90"(6=e3K/@ach[U\_u$(/m#]Qd(7bE_h[pFbs#^65 \.-(T.6sXO$4*?r?S)0[s-*B&r&"HL208SF+8MPQs$('Vpq?#.,(NRApq@?uiT1#/ rhgMspk5(XqO\s^r6GZ6\5/XBne&\5^OE;bH'MBj!]<4'cYuM[KEr,S&0M%C?5]TT 4:#%Z5hZJ!CB_c`p"(lUR/u:-WN1-e2eC-tWDr >l`UbnGFdMGaf/VWs7XmTRp'lD$7'd^OH10)skuS _P^XHd=@0@=SNF:L;e(N5@S;[c-<2`'sk=](-qj(m>Mded["OU#bVlFA52_*r,4!] oq`A7CRDK$9kuL5FXEqVVjRK_.9.pm!7@SdP*C\7P#,Blq>94UCrUK._>j=cHI;a@rlP1VIs/CZQiA4sT8raRnt19c:/'P,`fE#DrepcR1"#LY K_PN5@.+'^c=j79YVc7>HIl9bYUY5fnsX0IkQ5)e^RS1"aT(Ve^tATmSG]uJ$i.Q` q7e!rs0EYqKe@nI"jJ(na0bl(+/Ao:aA>&%p5-ntr"%u]5NLm$`W+%iMMM-0OP0q( MuZJ$=5*at?U3F_&0aA!(F1Pb'W=("22AX.e288X[R8ql)S/ZjJ*nppe!OX^aa]FW Y8&VbT-*"gFs$[0i'+rd$iUDa)@69!@po$;AUe[fI;&XJpu#ZCn5JrbI#]4s9q6Z" c(@,q20Jn&q>prbs"/Rdr1:7n4)b.kJqKt7qbP=/o)DM)nNS=t^qYd;n9`"N>Mf'h mcn$M&q%r/HqBr[:7Vt`r@^P=\;q]d7Wf9?emlsiuH fV^T4T1F5:KgGlEgpcj]r`,L$2Tpf9Jeh+j\Bh#]7R ^Aq!7)ej@VD6B^/]`42LHs2k0Bep'<3iPk#<:%biLb"nnj77.o7fEY/fOcglqYp^U $[VMr6'`uL1)1O2s0iE%Np0"2chtO:QiGJ)+\uGD2GWr=7H"4AqWcT:B`)g-p\uuD ^H^Q;+9"CsJ$Wpb/s>N"1JuEJ$]4B/hl]!.,>.; aT)8t!fgoM'6'F#7;DnUFD,*%KG9g!Jc'G\7jNT#s&Ap6r(lS+a7RcL"+U[P@3\$' nGSA$3ts`:J43e`6-ZC0ErL!eoPKqGq;5cME=A92/])-X:;;\eo"Qlo!De8piZYi3 (co/;m0c%0;+i"h7=5KjJ1GsW-\%LjO?^*JI#4JWq+:S#B.j4T]b8O"m1UcFrtM$B s!bJ]r_n!&q6;'HLAur5TG2qV.0=I:jaW/<#Q31Vn395.?KQC,nk?_bK8731:*LnZH=9O:DHn5q4m_7/UsquL]#!_@t47qncuk?XkqlW pNDHLZZ`2]\p9'Z8dNg'2RsN8%ntfAKq8#])[8YS4?r%4]5:KQDQ)P:F]H7q$>sqa +.-\HbG9"oi=KWYQ1I!DgjqNK<:dM&^Z@is*#+1N78>m72T1SRXLW5MSTc. EUp:[NMWGER*ZZ/\nk928SHRm%7l&'$:+U\Qi]ZbZ>`b]MFiFt#m`r;rl>u`6rsD# !BL8n8j3&9=d5i-b$7Z)YA8F`pFQ!O[5$T7r_3(#pV/EF(PG#$n!Z@!E2R"S2k)#b7],48OJbe2?K`=?qDk*lU0YJ8,3:DJ) i$j%%n/,Rfo5b<59'Ce5n!oaC6KJaF'.EiOrepdU/IUar8c+G.-fP*_Z$Kq3krm1IBMLJDK,[hcC+4Sg=gh`V[%+_H!6D)*4&qR+NiW#5$]EiHHTS4RT 0`T":Sj2@U0g#/k,EH_d@p=I-TUU>jJ$]Dr5ZCO`4b>^b2/03=9Z;[i&3#,E>ap^e !$;4rFY]gh6rgLj*(2$W:dc31Ma8JmabYi4Ip[F8?kJ@"LZ2#,SH$R5S2?h(P5hjg [G_("f8KuCrZADordt/qq4imu*qb`dh2C'9oPhBZh]EWMh:fki8MfGbiT*e,"X#o2B`9Q="7C0%qr@IN^asI0DNa2,r2DL#rZW$] "B+/1IW?Aj]nr8@ruqD(mR:I]0RrX-]MG)Ha=uJ'm)bcm`<`uos4&6?KF#A[L]H]A E#hBVLQS]m*FVl^rk))$aA?c(9'?Gg:bY06%C`%m0nQRKe8t3i4D)G0'EQ(E*T>d# BqGu,KtmX2FSISNkgNs)&^PZ)pj'2P]_Xi0Y:^U#,J-[8]VcY25.E4ajUuqo%I(s4NB>>Qe$=.T#j.MlPqt%?DFW?Nrgp]3N._ iDkJI6S[r,-UY?*g[.R9m>X_\\PQDNVVYksb:l0YT8K_G,#nTW9-rJ-dRt^R=it9A 1O8,4cMT2'rbQ^/o.5iW%;iD>qEPrU*^qASkBUV4sE*VQm#Of(Jq&ahTt% =iN%'^S4*o5L-J=JA\;LSS=PjJ%3RX#Y6%g]?Cjbi&5dQ.=_[@V9nd;3cQ0>T5q[U g&Dt2rYb]2HeCl-.Bm+gMQ;1p/YM4f2FcYh\,lJihriMtTASH7=G^)*M@(G,`ljG: B&B0&TDR%\6pR7?#`F4VA.'j5MskhQH^t,F#ah7F05M1B!br$_2/XnaN;sOjEcHLc VTVB8l%gZ$<[K#L33J'fLb'O/"9Y./+(PL@W;kIt@1gVRCBR%1"DgJh]`/Y!s.?Rj IW"2geolPVopmm!S?]/+94Eq&,abp*!>%9SS27r3flGC3GijDJJ%b=)X*^TJ;P%+c <*'a-4<@.ChR1s1j2'f0oRF/+Y8mZYRgZn"^XcWJ2*Y@D".n];R\-.#rmh;;jUH5" p@RA3nbF+r!LCLis).ROVgZ:url5S#r81\\24(-=9/Uda@a(,0R=[Eq3\u\G6!=+- -i#.,A'#8k!A^A59Q2oMT7Qe=,,""hVct8G#/Y;YqG#rn!9GgMg'&HuOgG4kd!d@H -%Z!?6T`M'B_s8Q:\c2e5^^(g("g(hDdW:J'O^pU-BRA&q(mp.70L8[D/-VADP2r^ 8d9d/mu@QtrhZdDaq;EF_L,lB+oi7D>Z.[K^:/_+_S^a]?JC+B`nIri8gBWdFZLX0B;R%ld)>^!/pu&hhBb`8hZ!i 6HX>Ai7^n5ohGX7/:G!1].$G."TiETLf]6:*.o\jU1:?6T?TH0F7u$'D-F[7:([pP +r\+,-(]rdrL5\p#p?GO>Kt)%b k+.EVAg?`3Y\Q;`R\Dm_SE#"-Ut7KlEK.K!Y;cT6bPCGIrNX95&VG:es'L%=,Q>ai 7mJI+s3JXTF31./"n=poODn^'e?YCp99mdXD>MP6b6e"EHCrU[J#hD[Ciq\*SQ3Z/%;WM_!;YOH5O*_4s2in=?.Kl7M[.;] s($'u%0A='59aK96i^Kn&-!;,,:NHb0!M0aBEbbpX$HNr'jP27GD"WY[!r\E"db@b lcAD(m,"[\!;SF,!)r-=n+ei-^S^11mWG-b<,rb*19#gpk\%(WOr4Y ]q^gA;*!f0qOa)M=*d@#IqZT>[F2cq`=jZ?3VJcW/`(T3'0tZ_aM2YmGP1HTUL@oe (7JfM]kFP//@i,2PFbQ_B(?-'s"_Fjm@'kO1"C@:n:*6163MBSMk(-.!+;WB=R$&k )4:PS'M'&lLGgbOlS8O;s#Zq9-0Y`'`V5djbg$:2AV2H HpPdX?`-gYWAs^GmV<;,_uaH=^fVd7RIX.+Zu6.Zr:BE-_5BbQl@4c!K`>+>41*!> !:UJ#qn:>d_re^k^'6ODI4^8*X0<3DG`c59GJR!eDa8P;!pqd^U,rEKJ[_nT:ZB!Y ,duSYm,#a+DIV?%9bp.J&HV(2(#Cep;IHKg=_tSal7NGLJ^Ti`K7LrFlKsf+,\k\X p?e0SA"hpbi2p4#3hLnqn"=7ikLAm+;W_rS.lSm@iHE!*Uq16',61O8,#a"VK^ac. rOgkIMicBS@9ENd`V,_g'1]@pQOP$Nrh"4Sm5o`a[qkpq7fcfn%n2#;!_O\.qZ"f' s'l>Mrn!_O+^74s5nJ8<05lVF/rOi;9.h5_J3aO8]]:l>eXe_W [g[@LAn/PUSgn?mZcQ:JfS`/]H.;jFmX#`D5G94h;s/qs:]CBd=R8m9nKCH#T-cqq;"+_D@9)5#7M0LA\C.Q[H8\TeS0;Gbc9b`&[i"s.f@mFijY/J)Pmu^N6`9 BD["G\6*VAQN9TAZaWJBT6!+HboR&j`b*uTBNQ2'7JOVp>,p^$nen2^c$1!gi74j4 =grM<$a$_2Q8c1GQ:AsJ<;d>eK;NRd,<"um)$,hK05*KZXp`g*:a" mU)pfoJuYFh!s0DoQSpd+$IYo%+tOlZN#Qc"#rK]&>7sOU-C4,kti>V`#To?^Z&Q" 2>8;n\e^#u5l7BW4klRUIT`qFjLB_e8+[>d@MH%G$!+^6_`/!aX]Z.rG4[?f#'Q"kM;nc.\ljPRX7m+iZSDi`TO pUPT[".-Lds!dkqIXQkTkZo5prn[0_XoB@-2>2O5^0Icl<65+%@`\WMe&BA\H0Kem s2jaUMLY33If^mD;b>kgb)6OmKE"6o4&6IHL\XYRWngjrh]F"k+LU)5YCg_'6d!0I QMiN;F_m]KIiCH\*.aUCiH=3HAqA)*\.(6t_4/M0&`$sR`a4RiS[Yl[:Z?`\8UQuZ H^c"*#iHD)e1B7dNc%^2';E8#rP5H,pc(Gp8:-0nNsOg[_fQr^3/Lfns4JU[C4Q$> )GY2.hmcaeeM$"`2?6_e2JR47nCB0,^6WuCs1.K/s3#PV?U[N_N0OA:nH0tT`3B8Q gP9XL3+)XTkIa1Y?eYa9r2'G^%fnM^J3j3jrI<#ipKOKoja@/M'Yq[PW8$u&)b'k> MG7/9S]?rFAZ=fn/rTH@L*E;Se,sut;pd<)0N)%c PM*lB1,9IQ^5*"Y8d:n6!`*:A-df`)8FR3@s%)3J,k@"@SE(bf5#,^^JOJX?,6'Kk H]f**#H?-A/:X=Ts+L$ZHH=">s'5K2/f(;`4#\+OGJ2D7>XJY$c;uCtK`!nJf$4Hp ^X4o9,H,Hn2QXdqbDjqB2/b)/bj9iWJ60mj3edk3`E%,4rD3*9`8$A*[_pZsBF,U? @iIE0`$f"r`S(j(dG\7Q'K!/6lf\$Da%5*s<:q/fm[:G'1jnlHF7<9*naF+WdC`5Z-!=h8qA/c9Cq&%!5@fbk6:E5*GjdB W;>!rO;J@)]Ej4FZH'gD"n:RYaMRs0?.(a*31D/m46JlqN;Oc@9SVnDnA!jEaqi++er(erK:G/f1cS#h+(Q/5]"RNLBgTBmEX0p>kXuDiN jSu4pr\'O2`KCh@JagFGL5Li@A8F:=SO2iWs0MW5^<)%P;Ym"15ks4:s-Ed&0uL_) $a(oW&$EAClVd_qn-5T/s#dTba?Ouq"5CkVhSbK4-;O?Xi11NIUqe.kklBR0R02qM lqhtamk^R_%R*V"7KhWUiI@#:X^Ni4X'sqB*$W[ZKr[5 r)s$Is4m4.o)BkQpd=Thr0TMG5G_.enNZ)am3b7A+Tr%2+QQM==0_]WUT_Fgm!Tq( _#MPFYj-^Wj0N'=(HDPOr'+<`@jCeN:ZpF/Ga@aXJ(?e^oB7\Gh1P\K7"G%DhnY%& JhC].bM$PaVc0STM<*'o?kajr8,=eNh2kOc=)rCcD)O;;$BHQd,O*R5<9STWoIM&0 'FT@$%C,gQU%hD/*[ai-Jn4S3!mE=Y&+bEqjeHYZ7BZVFhg!->k?GX<%I`;>YP-1- ra0(5\#rcar">$?G(6?:^*Mc8rhnbjX)DB6crq._?YWSARcW(GEOh=CLnAI&5Xa:- X'2G`<*?.99[/s$*Z=Z9hqUMEp&ci1-pWUh'`Y35QY:qHFG]sG&_T,SD6sDG24p`3 eVPHba._N(?,s_OSG_4sL&f^,Z9RLqJ@OUl:j#o?a[>jaJ!Ri-!jkMu5H'"4rsLaQ 08Xg;@L0b$-:@hYjY&'nNHquVkL+"6]!QNBFZ,S.bf0gkZe;9e-=WSUgEqN\;#pXn Ca7fc=74P(Y*0ZHdL6!AGQD&^,_*<#Q14gPcc?#,KE"*>b`hSnc^HRD,=o7\N(]6Z"^Hr'.gJn1poe-g6 s5(_$^VAOhm;tBnmImFBs)l<\PsnRMPQ0miis]4Lao7>k-ADIIg&I.`_E.p!hHBQ% g8iDDp!Wm%!)9cN6`Zk#h?9C25ZI`EIlF_EoCk],YEf-)r0[DcC*.hdY^s:Rdl6ea OTJ#cHjMu.Sq;0Cdnf!OT>lp;muiICr!.HYmu$Ks9cnn0R6u_D">U8438!9MJ9DVL B*84l,9ZFh'.>e7[[hLQ?.V[?>YFF2IU78"/ucalXQ4s1U&DI7%If4(P7[@M;:$hPD[L^PGEVO&?pnnOgT92:/qu.]&#g%@#l$jQOs8W&D &]"AN=.Y,>ia;An*p0YrbQ4R2(WCmKBnZ)cr.b53!i5baD;mVdpmbA.;?T[k:F8(' @/fr;/'tI=3Ybr&TIZl%$H`*KHo;Y/c@j3DOjS";74.RV)0qa.5)MioJGH2-+9*IK HCRYBWSCF&i]dV<$i.^<+B/6+j\OC`l[PN(X`i@s(A<7T@_$incJ%aED"_eU!I]7( hS!%W?ESB'Q[n^X]tN'7/N"J?_Z+BO6\%dKZ'[=VBTJeUElA1]2f$uFFg57XBI=Rl s'$(N41pM-?M^9jNpsH""%rXnmudX:ao;r'r%Ed)<<$%6[#8H7/bFXh]*UiF \Lr]i%OqDO/8D/o/IX3cFje:g*<'h8k33"/`uNo6`r^s;s:Y]U0V+3kT"s#dq=;h4]'4lACd(E7^H H,#%1+'3eQ6N01rNsO_ETPl:-jdq&$eFS\QY6_s>"!%S"* b[48lcY35@nt?#.gXgrIs7u$lTEr&4-a$Ks=3L)_qg>*j2er7rJ0F^rs"CVVBn(^/>="#Y0b2pAbiWQ4 )ZT\p?NTpc+mOPrB)c!+s!t:"7.pR.r#Z3'q*X10r_M^9RCjtQ0P=%EHtBQb>:MR4 Wi\/PJ#g&*hu=Ys9#Dar^Th-Ng[=n;o_e9UIrYBMs4?S;[G$N1J#R6ns5u37]CeDa 57s8ns2R8jdPF6&i0agt]NuahWIu%fU#fGpnm?0%2PpFFrfQU>kS>t9Ir(`-J&V>I H.qd@2;lrZSK]2%.cHhgUB/.+/kp_ZEIT\O;'f*5QhAmn+'_62?J+;+RbQB5R1-T0bbFC^/&Q7;n;U=hY=Qt"5C<$ 6';1MBEuD((Yl_,f?F!eO*@&@NU2*C?=^%]k;dpm_DT(2o)C=^+No6-s%fV(V>aO^ "DAVOglDI&\DYZD:j!nrrZ=OY3Y=(,Il>''rt:h$_IWp=`BSQqlDK9sIhaUHK+J3W d00Jb,67`++b6S:Sb,-:^l\T>DBnrJl6Wd R$]EO`cI!!>k1lAq/JIc;*+4uSTo`/8>VnunXn)ialK(k$]d*_&$r+Qkq\AM5Kd%k b1BscC9PeQ;,Cp;`TC:%2$qFm)59PI4B(jLA$#A>J9'?/q/Z@A]mHT?rS[Ts$hSAg HT*Jr"+*,.lEm(:4!D.QUi%FB#";tK0-\dA3F N:GM'-j"ft<7H3*5'ld^s59%&oq/ofIgS48&jH2.ip7aikOZRD=P5DrZY"A2ECRFO QHg72fsqB53e3Yci\j&PN0'8D(.K;MLq@-B(*<;n,mY&(,#Ah'$a_*K"nF=Yb]8UZ +"JL3O0)G8/<1]GKTF+TLL^=9;;^=_cf%OT3r0[i$ClL^.=cu"cS=]L)Z^!&W8B`R n;N'K'9U(0/2WQHd)j_(,V!YZ2QP0c%/IQH=Bm8>(+YXrQrth`Ze=2QGBZ-^]l&>7 GCG'grpopHlK4>A^3),GIYk0+GmJB:hZs,J?E^]iD=;RMg[4-(X0L?VXk0Uh[E<6\ Zs549PmZ)/DBYX[ACH9,8tSlDki.69>Wb+f%o11DdkT`Z_D;:WmQ"sQ036/=$jEi2 lsHQsIqZA)=`$XZ440$gGR[G^+,Jp+lTDIs&Ub*@@u&Zm@rN/1q8;Ji)4tmKp,Vn) D-'R"I*(P#4&DIYcG%L^!F@rc3PNWc+:&MZP-8o70CgJ$OL'A\8V+-sg)AsbK""<_ +E/4T'[,>9id>J5`/->XSNGn6\.3kZ54da"1/73:Ur:NA(C[0 aOn7'gV-=O$BBn=!7V8kC^9!qiTOTud)L3Ir@5$pl!IGnL(oRG6-j*B*LFK_2W#4u cBRr#`Q=`opeT_JCO#JGY5pJ-7Srgt+TJI..!p(_cTIfs;KU5">k:Y:4c"W_Eu&F" OlIa_RF<&$ru$_:&acZrR5R4ls*SjOr@`C*s(@KjAap<,B+%Kj7IX`gr$52aZIPl$ s/"ETr%I>bNW>pT-^qBis0T7n,/D>5+T7A,s5M;kj]ak;^egI@kAQOlJS=%njqKA*%"]Z&/'#f3Yl'^*;g^a) oY5ce;r'110s-q[@jYEk+-'[L:s5mq*^"qu? _#Kt^C\BuWNX-1F@"2#Mg>\b%58X9NoA1Mf6iMVt?S/Ioci9u3/fC3U_Z,0)o"TB< pjZ'/^KV6EB>)=E6iM!of"833IWPf;!dM.TaF>;c^Ib"N>kW4V08oWLs1c/NC]DQd ["%dLf(i=sV<.$ufcBX,ad7_1#JfMJ4/IHE,H+NCqZ%5t-G]e8mAn6`#hhHX%`s$:6S2=i>l+eF(`?k otQ:_`W'-)s+^PB"PC,\r]bkAplFcUrVpSR8%Bik]W(aWH-$#6[upXHG3W64pqL:1 iA2ROr2'F_IM5O%^dh@OHBu;m!d"tMh_e\[/,fe?Ir595NlTiQc*X=0UADVCf2WGk Y+.f]9GLG=n:*VZP"j=QTHKeS#-uopl0QkmmTI!f/6@4f/V1t\4 +8EUVd429LE`Vm`X__GGK1me45q0a+.]roMPXjY=9ZZFu="b>WA*EH6&J#_`+_pH!ZWp9#tGS+R6Ts(ZPa ;HPF1((2!Q5&JTB9pq5#/M=k27Wli">Tu.snBWDoFI=K"T60BAJ+c*Ws%C'0?M7M4 YI'#`5rZC"rWfg[LWk5J;#/$,[ja)IkkPXWYN;=td-"U(J":Y/PBVM?pO&NQ1O/r. i#8J;`dA4fFtI&9D-n"t%'i.,M*qnO$AatA$FfP26JZ"Afj[4ZNA,_'-dgPi]@buP fH%l9.Tr6k4qUHO("AH#jS>!VfGe1!o'#io>gUAd(q!bs/O/Z#MD&HUA" oOK+&Q;(c2Ja`TAONl]Klm@UA/C$@gI$n ]mP:>I!N8GENsh=^=MUfFupZ4J$ZkD+*7.*8&/%'eZ8pAJ8322.@\Kq;nZQg-[!D4 Xqi_"K1i0@q5c1AIk.0sjJ6&>nPK7XrD2`DUROOF^DU.VGo,um5O/kJJGm6mpO;9h r,4:mphS+I6/)#pD]^XbB5&lU.XsAV:]rI`bpD;rq=inL+ALq/i8L4.EZM,A&/5`74*W4E*kalCpeP3":.OfL(WTY!2&:rH ]ou=nA3;iBPl=GqZ712SD(*:$>lU.V;3Rb78!T*<*QEiCn+cq\"Pet:LB\^t'#*P7 Igds@qraO%^".)1\^P8/\*NP`B!]'G_g&Dmb/HUC?d(-qpkSn@#u`Hobf3>EW%erD UdOXd+VQQ*]`qL9#*SLe_ukCY4SggUaF'Nu^aChKLBB`(;gAu(\.Yq&[=*Mk$;W7j rr`)sXB,3cn.?4!lTA/Og)l\HI4Ve0h>dA_gAH44hNn-?#Q:i_J:[_^+p+3NJ_/8[ Vu8^V&*TF])?G)^"n_:deSgP_+:\IA+;!\%<'1j%<<&T8dN.G0WO-LdGr!rE=R&J9 `rF%^7M#NcZa6L`F=B.GaH,HSi];SkOjAM&jSp4j=8i0XIK/mM!<1:S,%-"qo,m2o T2KaEgsT+(LkFMuSOGa'Jc2dCr8m(eV;UW^p$u_Vnp9uoC0a6C3r?\Jgh8RrL&X)8 jn4Y4s',;aHA89s.QL/4?nRd>TN3n7de\?I:@W)GETjI1]\g3To<3=b]FeOCqS2E' D5j#AL?S$A8mZI#"nUs(EYXo8=:gfuG;^Z&!$: lCEn0VV(q5k^4_SbGkJ2m0s@h`;jI0c.^e=-b.]EDNk)^H`5n#a^=ZNY562jnGi=+ %K+PBgBU"Ci`GYeQbB/PmNLZKDstOB>5:*,l]?V0YYrXt=*%$"XL4R$/>atPUcG'O jPo<,e-,S[_K6\GiA\UQZn:!C8>#,Ir1@sIF&#Z]ALb78'efBt&R5?m!6AMMp&k-2 G.IB\s50\K\bX/1*NfA17f`JeA_mUF9C=j5JEhV4q\d'H=RlRi$(Lt8MXRIC+&DBS eHdeYor0Ej3r);$ %]S:m]I)`i$1k4g^[R\gs*Ges7moVc6fnVj^Sqr%5=dSuA8l*I@bIA3!3!0%[Hdp,/X<6lIt=^<=4=3f-V o97/1Gd05s0>7SYJ"cX7^@7Zk?RS/#iZI;arVpsf!]'FM=\=7M>]UmhrrN%)C?d2K =sisX3WrRH.:=k5fMqcuZ\lmIrkB3\E-8L1ID'WC[0cl*GIRF>c!GatK*\-4^=)pV rGO9c/`j@=S418./euX]Js#sQSh9a#.S*e$&gF"7>Nr/G5Jfmu;n>CPi*'4r@c27jJ#N=*Oq17t[]a+:S:B9uPg#E=_k0&XZ,oB2apQp4#8? />Pt9N2;\AXQHXm_GZ$a07pgE$"Lm-YW!O3PG=M#e`$3f$>ALMh7!Fa5r_XTRE"'R6Kpn5lSY#k*"K9 B58Uk5RW)=N#r+)dO?A*>Q<`S/,p^1DI5!aqqiFbr.E(# +8FoP09SqO$hBY`+1_rF(B4M3Wpp$$jF74+q\IM+B#8'A]Ce;tdIe+mT:lpK r!fd$&[XnPcjH82+X9gt$l\q75gBo)5pKoN6j-n&?slA6L^&uK7"B1k065WoQON!2 ZPhq:qJ;msZ3hA:BjbXeWC("n,iMVchr.m106PT0eRQnW)Od @k@)ARpYA!7FhDQq]_umQU/m$EnC=ll2Q>E7Cu^qs!#>m+Pn\4(>p>9,[\#`R+eMW o&heJX$ZdcrrUXKOM?>EY?Y'Lhk,e>ScmHS$-6Ib<.Z7nNs3BjUS3mVnEG292ASHF LqBPBs+H`ac[l,FiV@:hT8sou#p]F/&B`Pi@P)5HP@8&3fm)'P`pVBdqi./)eimUS +SJ)(#iQ;6eN9&e-^q79NP04HVc2Dh=12;obsl]dO^A4`ghJ^Q>Y-T6;cZ^e/qS+k TboX'+r7m%!V4P=^KEQ7_e"Ms(&tn)./p(Clc=D0;?PI$IuXD&SUXB(ci09[^0:QO ;k*f+^'+$,WpkQ:AVXp>r+u8&.g,"Y>"D#2q6;!&.DS5'1`VU@!^Km/6u,3Xi6/4- AO$==Zi&MP?Y=4CI$5.Q:ZUK&d]l/.3'Q:]=^%5]4losQZqUYB]2>?pd#d':o5I_df:T-D'h!UtTr CLHu4Hj0THGQ#O!d"D\Ob(%M4;Z=q&Tb/XOisD0:JcA_((=5oo-qI>81S>YZ/?_sqfDgYWp5S4T)HH#l]#UjcoLRLFM ;u%!q=*_gbB@=2S+p(5jg3C%i_3[A%)frt&%0=Dd0'6nqJKk0on!pTU/iQ)rC?,5< PPpOc!6ZJ>hJV0+mTa,d>[D6Qs8/@(p-8;$g8.O=^R\_MA="c;$_0T<8K/6BKrhGE f&pN6FJ>scQA,D=7="Zt](q]j:PZCar5 E5-T;r0Q:n[KAMg-Y@jsZG"K7`X6lM'N>kJ'e]K>r9J!r'Ef?SCY/JtlMj9b%8$a/ #)sbq@Y4<)9S&'\[ZN#1kU#SFAI*67RlZo;ao,q8GWj%F(It;>YU^3=-=9ML^q@-6&E"8)Sl,3FMt;]IOlpJ#T#HDSlFM25X=* J@ZnCBH.V'ffjr=JW^)J;i-b=%Gn]e=.M^9%/d9Jl[E][>M03/"'W['Aml^qs39nF ,I:9D03=@g8qP8_`%7a`R;TnV(Eu-D7DH+cU\"!_*p%bX5,k#55C@EWc"dLDJ)=uk YR^\Kjfe?lZBIqWJ2Re2s.OiFo)H9\kjq=df"Nh#?@Jl."X,#5s%>MV+UJ+k#iMQk ;>'i`ED+"r3Pi2DZYp0\?:r@e$GOg?^WP6:OPt8(4JhuGjgTL?T&@5NKD@E@s#sqj ;q*X:l27>0_?\kCd=.gc!3P!?q'AB]>l=Vl49dnNO9P[R5%!8uH.na.k$.a[C]:#[ TXF?WT51>VV"r^>>jt,Xi02e'jKI@O(><0GRXYLpQh%lu0#IO7Y6g".J5M.'T:t^4 p&ZQiruqCuSZl8i^S)B#&lB;Eq31hI&9%tI3$W1S\S>Lfi'mLWm%#YOBArl\HRe?M jSGMIho[K,ZOh:gT>P;kO#\9#D9pZ(dB%2j@%UGVH-uO=Bd*Or"NVdZ ,@KGZolH,jmmI0%$aBXW;Z:6IKR;Z[a8Y6@r;c_%)ZfFmM!n'<:^"`2-]*KGa<#r&[tKS*#%kK8W3_6*]cEO/l)f>$;gp)/3l4(Y,2sg3^Z/BQj,Uj 27OQSE:A%S\c[_[fCpD/V5iu(>]buZ]-lN?jf3AQTqkN`O5GtI8ADgn.rBEeS+pb! =ul/''E1cZeWSKu@^.-W*pn.9XmL0j1\#Ejds1o%l?K\;M5KkeBYF3^:ctXX2q>[(p#c!@ZB`F]aLc,EI "T26lbGbM1J4tO_b:\g*mtu"nPk:HX'57+VI&$7TecE]NaWIbYV>n@B=[Ka"p6R?# c^[?T\`Yad(hJ1tk(IqsEN=ka5I1s`"Y6b.as3^k7l;NeHIDcPOIo66(#aicc#Q>MO@$2,KBWj6SX0(e. ;F$0E4"ss2RnuIcN<[@:+P(MD6>7+)(4"A]Vj_ l+g!84.Z,jQMgTJcd_Sk3!E:W/,Vp;b:-rB^[>6Xr"/r=pB$'L3QFPYoS'dnJBij< "9d'M&il_^TbI-\1QF2;K3Z;i;n@T1?o8"=s3"#YLoPd^"efWJh=n[[FDB7FTC-FA qS*1)+6s7`8d$-[nHIgA(b!]U>rY:#P2;[hOCLD-qFEI*N@@YfR0a[F!0Ka:6% -P@7!\S![(\i_JbdM9Xq;Ubt%EH=!GWM^LN-p40almhQE5hD)Ue9tZV!>j9l-s_c8 %PQR,N%05FhGUk"*`?+ipF^6.pl5%rYlB'hbta:4A_*@8[74o=O^+k5Q>?#eCXrn7=5 s-rZ&IIjfC5?AdfCjmg_btP:gl;q3d"6U1Er+\dD5:hr6L]8Z8"G?dPs5=Y?HaScf n1TED-#F3DD[#%W6hR"br&ubo@t)WNr1&!1S9I)O9E]28d"ifmnm;@:%Ycn>INMYh cbf]?Fs']`mrI<:Z=mSr8X6]sZ3F>(?THtM?,$NPi=Gajq-!]EeL"Ue9jT<9_%go$ =I'DgF2il5DB.o*!*AF%oE:a+b7+k26-YR+[DkXKa=Uk[Jp4$62tS4 MZ5K_kCSaneJG4M/!-onUoRuJ;k)"\V@3(M6@H"5dlloE4R9-2HCLc6i;\_i%AiiL ]?To]]m5$Iq>0qss/*PXeV4#^]<+fls&Nj9?!%j@?\/7#0bZ%_Hpga^kbJg+s/F@] dPmH]9c*_K-3&?UBPIZ$jT"/$P^b3.a8[+[S-&HHhsst8mL7\k^JnIXU15hAR#%:s pE0CZFnc2&(Y&G^d+RcGjh6F__ <3A9QYKbqq^Ql"fX4.s/[08Z)!>km.hlL2BDVi%Z)Yj>Is5rl;qZ!9arpM^&aT(Ap AoSRbVnu?]s/7i6&OS1PbD,/c0`r$<_>gLMABHinnP/.o1R4US&^Uq=+9IdV4tZ.= pn'ce%D"n/q1G!uIisc4UKN,)dp-qX;!3U0*kMs^j?ER6a7_S5!kA5lE'?uX?Y!Cd FD9d'8\Opm)$TL@5fG5)Lr/QT'/SPP-u1"lqS.'^!:::V2%5nF=+oT)Ta3&3reGRj _c`'_R*kc&,61Ne'UmT>bCkm&V>gS`+L=k]s*/-Ts,/s;o];aN'K-EuTTGjTG*MGVe6!s?X*?$ lt;(60E'5_I&-R@rp5+`J"W4gAbi+Z%gdjAQ4BV9^3o`X,79YGn&\oU!Rh#B)2nhh m\icP2;8HpE!e:&s8S=-%M3:;0^nVJI(pp+L]"?Wr)EVZ0`PGY_tcP=d3.BM./:_= ARfb.+2ZXHc6r"Slqb?EQe9bfrX\jtDMAdZB(J`ckPdmmX*pWtH,NZ8OQLJ-kJ;fM f@Ku%q+ZHLo691@+QQ>_+ML/u>OuZT#'[!:FA"h^c3PXF`]%MW6M4=io(^SW^$a^]ACcZJ2aER9#pX('f-i`:L r#t/!CXi.\7=a]6YnoZ1h5cP;GRHdY^*N['&HMj;p)iokbF]Q%SleV*7L=EJb$Wg- ^^EFc?(g3II,RVY5PmZh0M9nKE?Q@t(Q[ cZ<=hXQ'7tEikO-#OV:i/%,fb6iMIOD^2b#p^VMh?bp6;-aN;)JGHU<5I^U[GCEZn D_n;D7@ljC9''E!K5AmqTTu5cR/TDfDJRV?h+0T&6emZ*I06_ k?#qL$L^UJl#WK9?d%9Jn)CP0I$gOscY1QVRm1_]*eQM]i)BJ+reSpZD&> c,C:js*S&:s%[E`r@dGc`W,T6[=IfknpeN[9*KJ&n3$Uj%ueL*UC#g.6pTTfi:g+HT_KrSR)r&?a!,$P>YEq\Pgp.1?7D:V8')LB!M^JFe8( ,5CLrei'#(cP>gO2$33i!bd>hEi#`$s4hDeOT.tok2MN&G[sVp5eX(".tXt,::Q2R3CCN*S5"*h@)mGd6-\9hB2\]?<# n#&*jWV'S4'6KEW^%cn$]%W1G[)1"gn="BEQaj<6iEp2c5,."A@e`%sd.OTkOl4[c RaW=bD',/FPH=0#S:.W_1[ib\++,[$s'93?UgHgaP5Kg4KiRQJI:SQ)2uN]i(=7L0 s0E<#W1s@[nkg]`PXN=%=?5kL`A^K4$XeF4Jc@_3AEW-(rr8r_BZC02*)PsNML`oY (-kXl$NFnK+$3k4qr"OET%<^EL3E@m;@+F=#QOCY*a7*hi@R0q6+KcojmHlUFfk]. Lj6o=W;4[YT8EM"jZhi+R[9uMPR&,sIlCj)LP[2SF3WT:(`A?a]DbkTkEGhudCFF" f88`r@D/0FLArcQ$iq^P\J6arna'hhSXbs?"O.kDs)u6*.dAtpK`@rb`C]hHh"O$( Q9Rp+4qp*k49P-%`sbC%Gm++BQH'W7EV=mj4=_U@NsH;a+TFiU/f^@>`2=74R=*[a D_Le0fAM,s!o.U!?gV*(mVq\loXD!7gVWt=rorp]2Z\d%& /2.k4]o7;F-G?T\T$`.6VB2OSiS%`*r:#0l[T_EE<+NmRl[N(n.fA02OT1efCX]uP nuSKn/A$mEf4;bsEPVQ4p:pXoO.inpdooSgU\)Yb,(M;%5GLjjjXbpAs$?1i>TG(/ 6&_Q:;etVcP6**O!Ta:OM5b`o>hI(<:b]-R!P`=HO*@ER,c1d13TB)0grV[R Uqd:R)5FM_;"feQaOk+2G1pQ"GKp5//E%T98bD=!60!Cn2e(itWr.]2!<78K)hSD] )35I[m_J3+`Rj%Jq"g<;:U'a?I"3#HTAS?%7!;5u+";`,Xn1VNoKOM%lYQe?s"j&X Wk&4A9e#jc"O$g-Zum8>\Vfg,MqBYOT:]<_^WS^S@"mcLo7Lt7r.2<&cXjl`^T@?I WTSd%5=`M-qd2^(#Vc[r,CbBo?qi)R0>](R,?0&8.[62(^^D=`05U+,_Z#nRlq79g h7Y"F!N?"DhO+Z#eGja:c`m4RHS?l@6T\WXG]5[qGF9q3O7.@ik&NWka:%m#9$J?011*WBT>ED4&7XhM6 [Xd<9@X/(j8hWHDoFW)E=*Tl\4@0DE70)#hdrahgWq_P3)hF3lO-@PLahgTK3"@^_ 8W\T&6"qC'036lduEr5Q> kOs<'VLNR6h7r/jF8s#4gk>])s0jInc/NK5YgUUoeAPf\<1&rLV&1s'Hoek/gndZS kL,sTP]o1VR>?)WUV78hB+$L PU3*i*D'PG[I%69XAZT"[jG5rDIX+c4IaJQ7\V8+]SD".SGq4)r/8o"8!iQ98_`:4 j.i,S<3-6\MS0!_,^H29dnIB5SE>ti-s.sk0(Hg(d])J+P@"F!&,@#;N1b-+i;.r% $\W_1%`H]snZffUU]VG;n8LXQ$TK06n:u&*+F_LMl"$r-Rg3N:Nga-aoC=BZU0C^m )QJ6b/RV$NJ83/)^CpW@c1l<0Z-lCM1>VT6;RC(5^nZjDb]gm'IYYH_mTgY(b<9fM G^Z&/h?\">He6qVE0]*b/lGp3'$oY$H#1/1=]G_;IY8I*6`i]#pF=N5+hi)ELV)V. [XS\V-P##\N]p#UJ!rFo/7SdpJ*QX"k6nT/:CuG#dIZmYmj_Z#QMX$$8F(?Tr+bkj >3qSZK))Yes/@(8W=f-/iW#nArMAKKB@Hb(VXN,+i7CGSjPLBpMi)9?YdWKAC0s&# cpib;U%k9l77tK,\kb1pQbadM.`$Vo*A86GPl/`Y7H3K^n#*g"i;Pb"r[I0MoDW"! ./4f4ZL`Rgn,X#>-PrBe,U[a]Cjs1:(TQ*D,:V=D,cL2Z[)q'FGpNt9p<^G0.^FL: =hfr6J2a`-$,4%a^N:?"j876n,XP.s+11b*0H'RK@qtmlTc"uRM`!W.7W?'_S>c[h 6.J3=n<_Y!([_(-:cHO>V@h8Xp`.*@;Z$EWRH<=dl*^$1!.TJ36NI*k8UVt["6(8a F[7n_RfmA+rr(&E5;VfD[KRrTcRkgaq4A6Jn0CF.q%oVdjSt'YJ]JP'Z_a(+E@t>@ ,6BWG>s("1NR"$t`pLK;:O"@RS587+`QCN\[G:#Lp3Z,grJf#"(2Ej7hTg7^n#H7' nlP.,V>oGPd/7f4:]@P5r/]",kh#"27ef44RO('Pie"(b\9BLl*D-#qZbaaMA-W$O ,kT?WTq+"u_\UT)/O3YXT+P&9^g-Vl3hQ,+=m<4GY6*#\.`Y'+^gWr$1"AD_P'\P= UpWJE_uF]urRkcZPKWKCQfGgo[L\P0V]"6iS:-:'K;iWJM[h$7-j@PFTP1[Ks)MQ2 Dtoqa2$$+\IK+BYcg-/_qd3JQFKBsgp_YGZm7)i50Yj#&H:ILCo6b70qnMJSPb"8D LfFE+!X&H]'`VCrIk[7[9rrH#CQLcPh=N$Oo4+5:C$GQh#psJ"c:YoUke9&.oKNV(S2p%KA'j1;?lh^Xf.jq1%&mbcf8> ONtU*CN(@:8dqgT)J"MY2?N=DT-N9\]]U)R>Tc'ob'Ek8s.@^fpbg?Z,!= B.r^hS,BSNUQn'E?LeEY5,n$0YT`ru:ME`SEs:0hNU-'PHXfG'om&62FrU?NL/hM#_*&+E))X(&unW;qqG#TDqjc&"$ndZ/@'p-p//jPUO18 jBj2@A')T4.Sk!d:^Rp"155NlAi^nNGD.F2rXjp(`"S`$-?\g-Tkp^X(L-9lDF[)[ GN5F,.C?j:g"FjN^L,m^eS+rk?!(t+Q?ff44^kJ4(91e!/NsIX$9hD>X\YM4,b/6l m[AsD`eFH5P2=TnIlngC.RdrHr58Q:'GAsug+dXnA<`RbX+%X9U$ajs-)1j@j&]mu \8T/W+c;#_cdJK9ckkJ9$2_o]abTB#oB>p]-bi"O6r*at4oIn!p+0u$V_4&J!q;4X \fHM8l8P]_7!#!@b\k16I_"U)O>3HO?UfRor&N>$m;%j$=$/.+?ZVV"BBH)/gp!7d FJ]11%0hEeX#$d5XB\rR_#G.9Z/SY6WiLC6?d)LDPQ*p3W;+-$nNX5$CrM3RI&3$/ V7G=@3d'e#pEi9+*!#S/$4+ah\^>Aeft$8A5J;Ikr"&U1-HQ3'Yq8#Q0>,U/>IB0s b5OU9Y4i$6KQ-p9?rM(XhS+s8YkFph=oP%h:Hm$n^<>4obLo,+3u#d9ShJ8n2S\8O 9&TS]!8?%ns/120k=1sFrbF;:;h/1B]1-I`@/aO!EC.fT1\j,nIl>'ms$JB5pU-1F -i\)(L;+T."G&H4^ctHmp:geB,(TVFB*@;3Rr&'G;`9n&28=;^0;#rXmG1f-pO"g[ h\(,B$etR0[Cl#CF>J8O6QFL^EMo#(!rm&p'Y*W3MsrJXAH%n8,V\`T/TmZqrYP-T YQ$Tan2\ibJFpUPPq[1K7l'<.h"1PRNd/YFYrVSd%KXj0`0N!JoPumsbl/]kJ9&"( W1KVN"FsBaUf`!jrD->lGQ"/TIjfQY`,a).GlH`JmU\L>'$lO=p:juB&Wk;a`7#Bn (s;htB4/Xm*"PH7@jsS=T._cqX4AVP!:ARHngA(-& 13?D@r5V;7f;&1G6s&LAQc-=JAZ'^mdLHW$bH9-S@'L`Jkl@upb_!&IH"PN]S*.GN%ID)-%]duIgRokTS6:sK>0=_.==q4Cmim!f33 KK")R:^Un%runc'#I$@u5N'ch2R*3kM4Q%n e:U3eckO96qk'uC%55OFpJHB2n?9GQ^_$SHEs,%lIuXLI#cQ4gl33*gH2BfO:F03- 9B=&B>5<6??co!ZR=FNIo=sguJQpI#o&_Q3)E\)_H&94oU Y!U=eo3kJdTtkGhbo#Rnn@af&IEai,r3*.+W:L+)+-uEoOT3.HoKW9&:)X.<,iu5# "lTB@p4YRmCju1Hrf>>ss7_^m5a)8ml9ZUd>P3JEnNTGBjNgBs@gG=u^oIFp\OV7l 9JjpTNTE?]AR>a5J/e`k5qnSFN^o89!mu!pGgmNN&&kGVl1n<0O=OKaQ,Q4&V:D@I kdFN=mBqCU'/feYHQ2)P(Ti[TqSmet]iSNqs4]R)Il"KkikHP2ikMMi5OUK#d9^PM /8nIHgVuOr0c"tn-!]IZcT!,A&>E&q?BSF*-8],=m9X`#QL5pJ[oIjiAA'9<`M R*\SZF^eAqZ3]1C"f+C>\BkMK.R&:;1Quj>L29Z@LOXFfrP#7 2NkDmLo\-'ZkL0dr^U8Qo:Ps,X8U"cnanq@>5]lEA^+$,rjsBV%0eH[\^ZE+>>>i^ q6b/K:_;9<'#(rgIR`n3]1bKb?_QU:f"EEE_iBIHl>=^diGs0?dL%Wd6V@D4ZpZ:M cEuVI^%cnO4qf?)jL`"$i/hnE"e:T4/7[.7l0o*]?+\I%`[ 7/'[V+2IfuV^Y(6jF;r=%S*s"UUUHd>(ZKu6"s3aRI q()IEf.fU[l"8Eu#s0Wj- #a"s^oPt(j'VKTB]JWA&%H1^pJ!Z>h565dPQYc69/%9',?dA.5q$Ze4]^`/2q8&&; ji4n>V#OTs7-J(Zo/84e^Dm=16rp/^g&M#DPrh4$J=4]"p)0_#q$$=jnB\H@H.E^b rsf!dNEUDY[qCITj$o=CBID&tPHo;Z$[Cn_']^kHA`d(#3g@&09+?IQ6NH\,A>UE> VZ)'SPp;ro>[d[,dS"%6UFn+qNe8`[pT3TJ]bT#K!HBDK#B8dZ!S4u9Ul/:^4qe/CA( .L?&5gh)rU235<9[EoIM1kHVHMhje0+]_!#i8=3p6j]_oo\YqT^WPMB9-L#LPfO,<3!*4]F?5rSRRN6e#Q9/Pem6O" mm-k+s/fp.+O':\\TTQ?rI=2VpjXE9+acjGY^A)*<[>Q^f#uu\5If&J=Ff!&<:bJ/ Fj]nkq,_ucm!j9j&,Ui9!Wpj+N?@_@S*L$)s#C/5s*/Q(M#(&mh_5mUQ?M!3bSV74>s0uFccuems,Rp&,OGG>EA.QX.6`mn-gbOf 0p1gt8-T[q1n&h6c+J`*UR>0`WX$Z$BVmbOY=ob41V*&jhNQW\6jDeG8S7+k=^sX6 B)gJ`.u8^VF1'h+#2RikF4jZNs">=\OFP$VVY,E`.,0Y"Ql,ncsHL+`fQ6 G0HdYBBZMQKCP0c[34S(1U1Koj8tO1kSQfT4#>X8cF.b7mJM>nVsi[UTNa,DMO'1[ _I[En:[qo-.,o[FZESG9>JA=a>bm\3'.`j=N"eM['Rd;*f3%,+M>-Lh>d+1oZ2[$p qu6s^rYW$@/TU\I@2m0=KGmYFf;U&Ds3W53dDmoa.YiiHD2H.=Cs5S&F`3I-2ib /T*T+@fJ7R^ZY[T\`-keaT"tV%t$uN@NE*+q=?`uVnC^g$k@GZjA47=OT3oi2uN\] ,P57dr&ni1)&N:5r7m*[?W9$a"LJjBCrQDXR`U%'QiDQ! p4N2(bq4"&Q-! r'+QgpPOa^U*5jWlNI6sJXWG;Xh[>t#oF%.N!8P+:EBuqL4cdJ8=C!EZ]$TU+qi99 !e^Pq&1mg:]*K6*!Bp_f#JqQ*m5#i/(jQ#+c$nT*#PJfAqZ-Ga!K$nB>7q4.KVE$# s$TnN*0S;t@X*o$`SlW/%Ds^k?]P'1>nkqQ8N109NC2sMiCq]k[Wutn"^\*]3q0Rr gN^;P1tb!O3rb\),>CO!6RGp%p=6"P[4)'!f-MDEIKc/*(bs,WH?iU?".2A/R:[3Zc=Z_hM#GtFBK\9nR >bZ3rhD?$cSn1b)QjJ>LRRTD^)2B2t!'u$qC[`R\l8N>B5D&q&L7^Hu^N/RfldJ") d7,hT"iWp%=rIGb,/ginjeq$]00.$Vk^P_Os2Y&0^3;FC#m'e^:]/PTahMT?TZBuY s7;"?28oOUJa`W?8O41Kj)U6X.W&4*9*7frGp(Gs,dj`a2ro%d2ujQp-9NlDhU]g( 'l4!m!d][W61P`\%P^3HOSF0`T=+#tmGS$C@F%-'5K4'N%sq&@Eg<%)*ru<'63-^DdPAqO8_T6dDa2M#62mep BZ0o-pcl67lamPp^V@Sa1u"p$!/L]4OWXYX-P,:+7KN.1epj+H63':KcbXB+3fMh? ))8c3!<1"^^^09]qV@6N2kU?M"$;(MD*Q+VJ'4r>gUlN#(Hp*`p$gj5q[)lFeld&M -L^tKb8k2rc-nSD&V3)@bs,WT*4Id:s%he6a3JT+q+j*;.$MppJ=Q#gr,7qb&q0t] ICg1(i?tt`363o\n9gZPJ%kq]/lC=Sc?LV5q:m>:HCt6+0*,_l(^\t(!@7'q(Os7# ,9AS%5Oq&:*-ka9I*I=aJ)e&RIPalVs5Y[!s)8PH+,>@idP+@5Jo=q&n'ML0^>e[ EE=N)ieXk`Vg7K&rmj((%jj/eJ:G#nJ)SoWg9(5XNBfWYrcGRN/bnq2T?JAa"NgZTAFaq=Sko7R&cej.MRuh$mf+mX!e:l( /U=#gcU$SX2;L,4-)6F0/o.H4*P^]rg 0Dg)'c?1aaOT.o(G:j6`+U\<%s%\aTKD_)78obRhG8VU*VL>&*;$/u?M[t)Q4eK?# lX%SSOEDQR\KTp%c6)SIN;?=>I:3'7@FrVWqg??RFOYYg+oV_/A!#agRE,Z&/$0YtRLB@CGFi\:B T=.>\'j]8^+jS?n'[\=j_Bg=6IXjOWrssb:_=6B.E,s8"P^E4U'knP>=0siT1I'Lk :\'"*r"Fnd-b[b1<"":(5f6!oSh'nU#T+&.62j,!>+(>6-,QK("N2Jp,=(l%)uZ"X HkHj;lt8NSKlH/rq>bI=J*V]Ai(*4n-gomp:[g)l!*BDTr54B6=@SAn&ncr1kojar /Vtd,n[LCkP=1Q2OoM38l?KZOQ2pECN7Fa4Ps.m,DbZ-UeX;u=\-S=>V!KDj- W'3'Ir"%iGs"nNjfr"eK_sg2 P!5N8nu%,5q3aIg+2a@]pa4sMl!<1m%g55j?S0.RaGj^4TP'9;9M&.?+7TckQE;ZHtu!#XiM$E3m/?9._/(%FMi"\9@6[%GBsr(iaSZiX1?('=8\ ')YNl!*X&8O+e:CN-p;@?ps6u"T\Nl+b4tR$U5s]+<85sB0YrC++aI*_%42pO'I5H *J**-K-.ZkaT&EYV[roWm,MK\30pX:UlkSkr'2_V9dE-3(a+Z(AWa2BbQ>'U>D5C/ U]sA_&5\RJf0U/oJKUFsigIO^!;YOH5IoJs@TS5"EdXW\(&4EOErK\Vjid^b!e^:A >!>^gb\a[Xcmf2#ILe47S:7Q;YmDh%`1LHKRb4e*C'h0N`[5i \Ia;>ZUmXpDu(Z(7Q(*Kk8l):O=3ATH(nFoG=T8qg\DE>;m?(+iR"ptmp-7lXTk%Y rYsMf=T2JJs6[=Q5lJHU)F!PMr9n9g=T0AY0c5A`6f\cJ%\o>=O?>Mu&lnqY>2\Y4 )qFY;D!/]ZGWfKlo=)fiqXZtJSYQGl[I>Mr4g/7\`?!(h!VKjZD#b^%>:u+*01X8sZZ\hU\$=Nm8K)\bcH&@:e:n3%^ !"K%gn,o!T1rt%a#SI)d"F'tiir&g$id\be49G=Kiaj84<*#5(P%:lH<(`)i"?Kd]ciNAh7l)Su?!q4fHO,7WmV4n4$M=%f^i M`RlRrt1/5Aupk.'Ti6Fru$e1jA-pB!"H<_8@Tg$H7=4sr0E#H.VVnYCoDt7m8@KM MMqe2"e]k$FQ]A%(]"rK+[*E#J_CE[c%NQLgf$p*?'cue//rbfSYohic2KK+6q-ad/P!2(@ PrmjGQTm`J!KkSJS%ns:s+g(=T8%l$g91Ksr^YmjWqioMG*!3u(&W_,oo"FteImBR -)O2Y_#LVG5YD)U/I;HQQA.+E.ajJX/I_a0p(j;8:+5@GpJ-K?+CnrHTA*qB1nlGgr\P9g0@_cY)bho-/j 1^##9)@]r3GYs/ZCBa`*'KF4eYl@"hhNO1rEh)cmVB*HT`^q4*q%4)6[/fn"r=Ep& ikHHBr*B>$q=?+',RVoc?rC[4rhiTnN=X#-ccP&Qm"S4rXDs`WD2#>>J&8'q@*R4p =EX?,2gH3UD;]fYS>hoXn7_sqkN%^%T83#&2SYBh5"4A0+Fg[8Ka/4ln=a,o1T+A> @Srfi>j+J>#>K6&KE#q0V`a-l#uCQ[gu*SeIh"\MrfH:fgY44ZCAsTq&to5ZC_J+b \L:8c#l)RDmX:Tgk9S1A+R>m0$WV&[%Q. b>Ad4/'`kQ)7D<Ye)B:akMAROoNgB hZ3Ga2\uYgP37T#qBh=h!:m&e#OPHos3]*UT`)P!EtJ?nAfXB/cJr?bd0KftIgg&k 0WtmGs7ssTci$iDc2Vjo;K4HgXKdW)T9o@4N#V'&%<[>os6DrLr3@S;5td=W),WQ^ hSdbPO>Y4e7e)R3!XtQp6Pb\j.uFBbo;DTNkP8*VpHu`Es&8_,s!M&<<,HeM#UBNa 80FS1J,g\.0+IenL:l%ZIr\FEj5L!d7/it<]`1PNd_*=(&SOZ;>A&L`o*b^E!9@KO c.5UECF1:VP7[tOJ;LKE*=-6OTX+H.'; 1*@?!`0mV.>Fc2S!I1ZS@5u[@^]Trg*NDg;dIi)?Ine?i'6dH=b!5YcCmIT`i-to% r^1E,@Sd73qB\EB,1J9"5QDB>U'BMt@p0%N`??K&N@4qfe#]j^<=WPUMBPL_L]\[g )KRd/$BMf5e.&VN>R*s4l9P>Yp,\_L2W77sl^4dl(pPuLhnj\j:]83in6<6qB,8D" fI['^ZMiQks%U<(0rod:eI(:S#mp]8rkR?`rA&,:,(JC!?NX.)k@ZY[M#<$M5:1l_ dXm?.k1W[**=W$keXXsY3<.0P;3Mtui;]g/m=8W8p(P7ABRGJ&$M$t&81AYj*!u^m hXh*g!mm9%/%6&k\GhJXs(Clt*A7B4QZ;Wq^[18knTV)>\lXL>,Qn+*JR7Ve$8)$L 8FjO@oRm'Urf;t%3o^11KFuj2ReBWk5)3j$#dAsT#q*9)^8T.<_d6n`=6\473qFnj I?r)>9-p`=Oc-Rg(NtnaZ2\+JV.=e81u$o-I`bEYcR8p,\DIcH#^"?.qk&NAr0jej j[)5j^&H>jqu#k)?Df4-:$+K3F/o:3rc&[oH'iObp`J,qklL;R7R.@P-iRIqoO7?8 /_N2\41ki8INnes[3't-cS;<#72Y>%]Pgt[.\b!&jnZ#,UD+goJ8=)`4oA^_XBC]@ M:4p+!"\QBKnKGH]U-](QiDsNjA4ni'L[M:918\R63&l-+l]GZ3X%dm-&t#T#q*1n +P[J17/d`BZCWOFST$+-Y\Lu#Y9>h=Pj:UZ/-OZCK,q`/&8D=0R$K`:69rEsaIfT( M:>9h+Ts2IZB9rR3%Q,.#_sUUCq)56.7YO(;A<[a5mRJj#D8ZD".t2F4l27TSe(5f hh(ma$n)'g\hoNu"90`HV=?rV4Bksh^8C*5&nps-6W@Z!D,6r L$/M)K@3jm!?iT2e0N]#CoEAEErKH`3`&17qPoaN.P-&Qg@hp'E9/2;+-M-=s59P0 0H^Gmqc.)JTG0a!@/?_dJ1QXG!1KF:L*u;,#f&65a@l]k[9,lP'M!5N5Y8^7l;Vai Wa@uNa+KI_`ItpM_VP?eH'7m00jAGEfFZS+"57cP'M/1DPO>%oVLNX=Id2.Tg2HeK 2*?n4bMsKQom]Xc0CV3@Ur+!1>lsN':Hj?!iIf#NPs8g2KY7>e%:lCdN<4h5kC0(7 'H.%'0m!$d9`aPZ439]H^L%UTM#hilU.l)7"t:Q^J^,JZCWQWggep(kUB']=^`@jJ 1\MT1SEIWd!Ur=pIkBEb/pfJ:Mj1mcO7k[g*Ma[CcQFR?^?SFj6iQP:aIZ\$a+N_Z`1hb;m*k@,slKr4U ^j;TZ;Wi,<:YH04+n@"3!,XQ'&Msi&]_'kFHUGUGlU!i(IhDhNm/lAI&+ZXt8!uTf ru9gG27I>>H,os_3^8`k5R[RE0mt'R(5?nWr#KRMXr9s6,K)P^(aPRa/a;9+ejc;qI`tH@r=@nl3Acp#2 Y:Sb:#e1"d]>3a3n9K\9O"fK,5mX._#ON3)it*?R+eU/'apT:^q5XhCs.66D>Cl44 [ECl80oJ0Gp*lp=kN"iM,4a(W?R9@^(#a_DfO-S9]d0uUUe[%1E;o%0WH5qpf=n"q ^[U?h__uOT9EV-@rpHQFl:]-j(Q%+tp;u+lR5fQFV,lh!PJhNUb7-".d/HK[I ;c\-[-<&UTS,\-:_>fVpKDa=g]k^:pp&B&'$.'7!GgJ* P?bO_B'c-:/>l(g=TU:?GDQ(jjPS&glK=H5q"P\_!]1\^Va0>@s*$fFof,>;:QGea A8F\#'aVnVhbO)Fj:?e7aV"Rp5lR_WKDeU25K*T/_h\)\epJh;on3ooc)@d'8'Qk( LA:fJ`"M]:BTT(`;A'/]H8-RQOq(XU.B=_2a[9ophu=R9H^C7-i5-f?I/gg4I/fBA 0T>s;+TIh2K$(jDs7cl"0PhO*&.!fR>mM]]&r6Uf*>&^@[85Y1k`BmWo=u_5alVu# H6"7q"9;)gp1:+2L$aOp@#aDU@H!ccA[Z`DBj"g^kLfXa0L,\*/M.)+@q!b%6igBn KZh_K5c?XT/7O6mRD>SZn$149d-Gu8$[`Lr4q:()-5%WHA9g45N_U-R.\]U>,Z)K) o9T^;V*8OKf22tOS`KlR7F5L@I5^1q>6Ki#3$&"/fTT!-LJgRK8CUgEQ F!m7BGj!dcBt=o01=r:WCi="ggES8/nDT%s&K!Gc?lI'Z%D]KN3AXd^$rj_@5;B0f WRLgPdIL(Va3Ql.?hu@hAdfc:ohQd#8sK6hC(n1ugk6aQa:eQ3@^4Mnl0=#1%2g0_ L\iH18WtQ:&otUt>]g=[qVZ8;C<64es!Xk$26s314P(p"2]OXe:tUB`Ao8a+M`^ F=sr:DhgOdeT-XlPL_)Uf7R-qqkpQ=ZhCs68'RQ([VR$f[.Q%TEREFq54@j*oG8JG?e;_Z\a@kK"o9Cm=bnpe0RZS&AGa&U_7oT(&jjJkgH-MF>)`0WK_s=< eHVf&AG\;1WjQNt;QP((1:S?*A$ijF4a.cie:Okr7(9"f=HG<)B2#odrDlgCQnfX, $kNU9duOBcF#WDI(d`QMOGZ7s\t?sZ\"V;-qq/<"p1a9L7HaM9bM$OnqGl_4Zi7?K QGmM9b\>RLR"jL94&#L3'#Bd!j#!Gi9(a:&p$h*8b'KSb'QB9jhgZ;'o/(f9T2WEW@h;L.D's1b&5q_(((&mi4o^8/ ,$#l";W(:!O`$M9j:gT0GH2""LD7C8'.7Y6PZ=*C/=QG[aV[ot'1$L^6KCoBq#fqk Gc,s9gpY/0/qoc2,)u1kTRJeVQ35TE"V(RSs5O\Gom`D^9en$Bd$&G,EQJ/6k^r0j,QreUQ&J5KHA)LeIi8At 4t.'9bMYDK;oCh>MulpPr#`?t_RSsYRUiKc$N:;%'8ZZ[c4B^I6kg78csEqG9)YC/ kP\2>IullbcMo:m-AK$euXeint,"gA2&BW?.0P,+[FbPj@ZWqi=1\MatG!bq0Zms-\J/)HKN2erjZ;-$ Cp718:MN't1#l"CYoC"L4&PT5GH6W2hrgTg"l>=+pQL?FZuJ( 7.;NA^C=^L22T#,jAF\,;=j-Oe'^h*r+Y3.H1TI0a3oZfk/KQ1&S@*`pbqi!k:#IY K+sL,s$7?%P'/=&5)4,V_)ind5R?<:&`=4>k6?52/;P;,(ih;H!X]_Fr%UJ@ocJW9 &E!L5"DkCk#Q_mDCVbAgGP'-?]#"D;rg#Gds%--6Ps=q+amq;mo:N"PiO^S30aMYD0Xh,6*XApI:ql=H0Zi /()qE(soo,CWM3[.UY"U"-EQ#U1(\H5l;^6MNRpeO2:jHhtJP?I#@hD/rE,VUQNtA >8@O1TULqN39W!gfq3M+:Y`B&\$aju/+MR+H2Wc/J?td@T)qXceftCoJUk[jW)jW) aC9$ie0U*cA/GIMnn5$Z#0WVn8f>=$eOkI_*4Ycrb!+JR^0Y53"=OEb!lu")gj<.b s6".roq[e,30X1\K`Jd'Mi'W_(.?IJW5+GZmE#2FZE-e@eQ)B%-'#eH-M;:#"ISgG Z!2_C[f4clr`R&3YH7`P\?7ZbPFuZO7L\k+oc-eSD,sRGYK6WT@4MFFYUB\'e;\.1 L'O497L*hP%rV0G-,k?h^k[XET)TbtK,[4hhni+e\MkH!rWFBZIK7*d@B^PH,[RD>kRpn/<:!jKlddRo:;Z;H5U*Bh2L-+r/&$PW:O T!5Rqg"L&/SWg5A$"qeqZ[12.2s5(KG;h.!RMNT]X2/se-.'(9m+MfI5j?IcSlM*" q107`DXS*MJ2LB@)X3$I+'=R4Cbj`#TQrcc=Cq*ah6rO0SWm\ED$IE]U]b5E>sMEt \g0FM#6/VR:f$l&5[s3k!j<9hNpVuG"tJ=QX2#bYD;>a$O!cV%(, ;Y_]2iWPQse-:Z2`+.s<6NHjs&J0coBfH*kp48$&5_rWt5f-c_69q7EjnJ]aBg9Z\ [(jn0!V!<2m/kk5*PcEk%9SY"/1"I8j,FTRk$g3Sd;"+9!<8f?!:C+e11cSU1$^KE &ASm((^`H=6:F.!LoUCs?W"o9,iEtMo(Q7Egm5uub7g5=`,.+!g<6JqK=N9.JQiE8 o036SO1;#grmHUd+:gPEXA'bA84-MY+bM&9P;4%J5`MH-pF/P\s7m4fo09:AP,iMX s-&1PcN![2GBE3g\`"i9r'?D`+gM'hm=@:tUZfMZZpDt1i.!Qr_,(lu9,MN"Hgn:_ hufbNQNlhQXJVUOXM=7,J)rP:&CN^tlH6sCTYZRjSqVP/^<&8.XIag3US45HridBn 2":H.XKMf+s+cPUFRs\bI2R17$H2['q',?7p@Z'#!d4DP5SG_uI?fg']e_)Uh\Rt' =9E('gYK@'lX(/N;8Jl=KB4\4c`].)9h)h6 -oW!-iNKPeXe9l5m]XR_*E?J(;,S e$sO*Z[>`aGZm%P>Wm()$\;^MTPNnTf/6D#F8ir/j@3dF'B$nYV%Z`+VfW!Y 4oZm(U(jX!M!t1I6?o^6q&oaS?*MK]o=9X0aIi;nCoI\Carpm!BG>u0r4X:aW?hHJ i.3ae!b(/;Nj))?M4"MR1\bK3Q:Ueq`T_=,%e\dJk']D6nR3r \E!To]#BG2'14[*d@N!PZ[gB*+o0=!K5u-#!bjkSs$.G5*N2B<^e"H^A7'J$:_6P5 '5C)C8%fLOor,$*9OBqsY*lTFNgm%W3InShRjLggPNJ_k;qn[YCW=jgCK<*W1i$^Z QH?@J2K)_m>9;f/X'UX)/OZ%/_];t?JZY#WQW7lW8r*WnJ(3,skVkjG7_JikK_r6q qRrQ^ckST!-SGlQ8$;'<4+-)u*=%5;XRA.66t_r$VZ!<>5@`JA)g7CUXb72D!XKl7 ^d0)^bV1CVjtOZD7UqeDbbZh:TcI:"#'L1?Vio.@`QE>RqF/rgZ!n;3^j4bg8_)1k&J<07JHX/j5)<<`g(K'N:@lU1jcM,]pN\%@Qb-(%p@(^6r-,L!"\^i*sM'b $98&--4scmq'bJMbsblq&T0EOo#J5#+a=Yg$_biNn84GHj,Ej`m5dd!#l=r*?JMt& [1Kbkk,kk%P;R6`BFB@e+7fI3hZ$u4?rZ"`E&E-.s(f/\l1jFHLff!$qU&J(@j7Y;?BT-t"Z?9P#AW.IfW4 &[GFLH8VJ.1h8EP&O(!3jSM/Z!r7bYs$bjqptF()K`g-aT=]i@[fgZ-\=>e3K?PG% foGc8]!p]_g[TXs=A?49(6a^cM$AD7!<8*J7+n+1j2$n_^DQm06@]:UJc_O!IeQ4% l[dshaQIg3[6O4a62Q^JAtTE\rU2M,]$4eM99J-.,[`,43Q`4P"m`06jCdks$i^/rZh5DVNrS(F s28FGV9ecgCO-UP$&7"'i."_t"Sli0,ENH%jeKC:S-pM9UQ&[BGm1!)OO*ES59pU* VENED'Q_:(oY-oE!no3f1%`0kE(BmgXp:5\T/`IMq@KB)#nYL?_h/RE3[fgnLr908 <`L#<<^p&?Qr4VsMW60(#m$!r4KO8K+AE#H([2nkMFq/cJ FtN"V-uprp?j'oF$; k3]C!-Xt_>c24U,JCX%AFV"U&"X/E5Irdi75_UX.BM-0J+:=Y#ABs"'9OgB^%fAL4 cos2a@EM0K:Ws?B'b`JiiP,>YI44n]`?1]LVlaf7Q@/XDbg6V,q,@<7]a[+(dn?b+ F:k,E\IakP^Yf%kp:luuIJRC/s#*^ibFcNP5gR)Wcaddd*ftlo/gC:Uf`]]ms)V-P (fNlE=<9;`Jc(.taq/7D,)"QuYp*k3pWFF!)Gidd@qlFhW)3[os/2r-P5HR)gL]%; A6MFYrrA2]:94s+oB.1+GN6BpIpb([\WI$Kf2="(/16pQ&rgE:5cR*0&_%)NAL]L0 MH$N:&Lr\B8tm^:']V7#6bi5Dcg`GBrr\@tg\S]sIcrU#*Y\?2NDK!<^Qe2:+RBm5 6NDrE`;co3Luf00(PSqW,_(^Xj<$'I"%<,lM-g_S(XfV8O85Dq8G7OIr_KtQa\Wm: P^q@2?\^:aa7UNLrls*nc'ZLJCD1E[UhuE.4*AKkKJ(0JU5>6+LW9Y=OhpV8i'Ztk YO1%n[d3rHS,".2p4)eiJ*sZB3ahbC@Xg`4fYX,OW1lJMA][-U?NS!]E!Jo($q$Z90%ftbX!&0#9M=P;=a`0-)I.:M6P9CH%6n:Xq$cujBO_8["%LK3IfaGF4)dlfTP'-9!$SK(>G@[3nq(Z KVM^`HT#$&IC'>h#<*MPb5"oZB5g"c[XGV0K6ooEM;.dS)Sad]?DqJ=Q-1fb[be!T ^)MIrV=*uXn_gfho>WK]e1c&\cC?pnBC=9K2gsa^*d^e_^7c3Yp;!*1[S0qp-I4P* B74if4_l]sG@#L^]l)_Te["mKcd!U:%c2AI_"5b#oum3^PH(JFqSeB(Q)jb`l_^5r L(3'0fASgIff-X/(VuN':hYbAK.sdMr+K^A^^c#"bUtFUU0>]'X:]LBhqrcQ7\Yje&kQi6**P'dR%k;l:UjX/ &HWi6ke@)=48f#Kp`D=c9M:sCmj-![BW25hNdAOF->c'LjA5]7;uI%IquX\6IT(sH =H9b,6@lo_o%-s;S#Qn\Z4]K+0*)"ci^PZt5A:^>s%>n0.eWi?&?m&?#4:m!PlR2$ 2i8aW#Bg_C^il`)1XuXP!*DuS0.!&&@c78I=9;0O't=iT1;X;>"JcnL!g:BWR(k33 /I?c]M>sjV&O,MJO82_`l%.Uact.I[1->Wn`[?;W<:$rUqTVG0bEJ$i"T,rmFd3X3 7m'*>lP9!661=Jr:B"_;;<$&]r#.:V/V`6qj/*1Yr^9CYUE#h^`VC%IMH%Dq?j)gKaL-t;$8h\^ +oWQJ`qhbb9<:7 %Z6t_jcP,RE;u,Xnd3cHb4Z.o?89nV"[X[Nh@V/G1o7EA8G(*SI4_4BrDR!fKb!!T 7r54N^"o"-C!@WAO'F.^YEUipaK@>>XlEKBo?UT@T!b`W[&dRl/j6>/5HUJ;W#f9/ Z?%eAEgpplm+V29\,:!&5ORh$#QKEO[rCKE(@GOhoKii9$0mT-mRpLD<^$DoHh"[a om,`?/*618X_2!a?2h#,k',PFYI(4"WOH2Iet22oYB=oQqO+88.H&4QG\^TqeB]59 `c'CccW!Or?-CjE/'f0D?8h2!epR7iAcMA1SJP!N03XZ[RMX:cB+LgPLXN0&L:)s) Q-8IcbIYsaL@&VJgTW;TgO8VtrNkt+\"EJ>cMYRaIQ%ORP8W"^Pe/(bQljm.!'^VU @f\\*aG2hh*FUn,#B1A2!?cl0/J,D=&-1%'i,Gdi_Ebo+m=Rqh$.SbN:&atZa#Uns aF?@;X8E)Wi.&iJ(HonE="ih9Urbjks+I@k*;^gC)eZ[PanJ$1LROSp7tLU0r_M_X )?N>,#Q?)c-.AGWZAmp`7;aLD-[C.A7/dKC1-Z=9AXn.V:WW@H,,?md)Ti&P^'m=n ^aS[k.Keb/6Cfg/'`a1n_!6S]]dR>$"3CKh$&!h.Y!\J%SOEH%c74A5J!0CJs'tZh `R)LtUjG&S"9.1No^4&Q_>f1jFSBOUAL2mo^gaqWHrKUe*UN^l@Mrm5S1"TJ.!*dGouqM9e)\+-`Df[r6bD]0R.)XhO4lqpK$)X"_\9<-WlIq2gK)H*Qpr=+ki @74<82[N<=Z<;_`k2RDm:f^p*bCLg7%anA9Xat6""l-mHrf`rg)?jfGcXm"7]J+47 jmEUGcE@IN\lsW;!.'6I!.Q$[)rG:W%`l][OY.6-m$GYUU0(c6XKOa`We`,t=_/KG +-lo.9#rL@It<^Y?_A#4M9agsB?RY[]/JU)k`2i*VUhc&2WUY!U7i%Td#N5?UjDmM DZ6_`p..)i+ITs.c@4c(J(&c@ ^&%REe`k\I,OX!aX+YIV#!rk&ljj3L ]`2CH!:k@!5NRTL,+k^A_#LL2N._1m5MuM:5_,&J"A8ZI3;FAPr1EgMTTpZ"%ur\'@_cMnM"XXm6u/!ERK7"In40[s#=kU@&9QEdI\:g[q8V_$UJ@bN-% k3>KA9=CaBZ;%[ZkLpl2m<>HelI&o-i@XT@B)0gMPLS@.(`V">qPb$Qaiob(e-%PfD7'\4t@oVRuDZa _0u=QhR-GrjT!u9l.@)hG)X8Cii6_W;SIN%>eH4Oh:AdDBNfi;[.8A.rqG]a[p;)a HM>-NT7#5'rMFf-GFJ+Vg5XDtG@*7E^M_bZ%mP!hHJPfS >J9O-C@PlkqMY3PX6TAUMUaN9npu&b83.:\8!T^8NU+1KS&VQHXTu%6&)X`7I,/l7 qn^J5)d`L"qtXlUdj&dCh5=NdFT<@Hj]VYh*`N0EU>a.EK"+)DcOU-]hHGGf!YkEk *,6Vea8U9&V',t$$iGJc\)Xg.2L`M=?4/N<^AK^Ur0P%u$Z=M-X*9kIqdTRmnt2uY e,bZ?cu3OeONVL@BFtl,'?]aY(&tfr!1`u%hu@q@/Y_'meGR3bl$N;W5l28^ImhF3 _2&Hr+0u:3+!5%R JeWkeLNH.3#s04Q#`!>GV%7Gr[1je:"jpHOuD6]^Jof3%)i 4n5#"M>[2K-\U:js,I$rVZ>dRr?!^$H2a/'ikG\?rXf+i&0N.Y^E`b?rg0nmP45,$ JjTN>q8^Gc,6,9=F)#Cp\C3R4PQ0Hq3h6*kq4B?bN*C&DTQ3cMS?d@PcZ\*1]N),I uJUI;?KDCH?lThRq5hm&1#e9#k2GDRrV$g#"qRcn_>4L-KFo d"JQYf/7,]%Hp31#+^>cdoYH$Ir;To]&(gD/-/U;6=%cc!!rnR(r?1g0RDm`g9%,;b4FJ"iJanP8TR-DN`r "g=J\06A.7/aH1U)]()sH[<@qH) i(mZA&MBTjX(_$.[Wkr]Hr[fN]Q"%`D;'HhEq#t!phf3a[s]X]%:4I$I/TW%b:ihG (Z(!C[pdhEJHjd2<%G]>J)@efb!VjI\)TcMpc' +nkqE;O-i<@OmH3!jM]/Q=>he,65uBW1%2CJERS71)(F6r.9T'&9Co@+Eb.X+Y^@! T^=I;!gk'T9b0D,#Au]A@sI2n4U1KkmM(.qrf=Q=+tc12/VI1,4NBRo&W#V"`[9^B hl@RTr%H1f?]+'Zj*uR)SIuM(5KNl=s"ekgB+"QtaU_2*jDSoYnjb9!kjob/s'Y25 6ef,EI8\fRVs.IQ=)TR::K8(3qmX<-4o_\JfcRhDs4$T:07>MR3q2-Ujir"%c[RX] rhK;6\!F_:L@pnE\L[X"TeWgFT]?f`@+5XqVIK% L#*Dr#0LWogn^_#1V%0??UJ0fr1A>WLB)@C!0/(is6hpS/]FQ8Y/uHo^Pl0Y0R]dV Z@Yp\Jj#C8/eQh]B:GnWXW937R[#eoIRj%1Hi.$ugf;Pi7GH%8c1"26I&/g.=e(") s1!)[Y9^OT+M@6+h0]oCHc.Odat.uU>(77@.i[=n*JN#EKSdsrba*Ku900X`Sm3h+ CmILk*sS&qnr3Us)#7n76FH4-'\ousf)kp:Cu7j\@jTR;&Q\>rD.f0aF3WG1Nr>H9 ]lW`/M/`HiEr8TbFt923f_qGpO)rGi+^M2DLgUd-fj5@4Xj[J5'gWn8$]?c&S gQ,]!mQfM+=nCM%SL<=%?%#atn4^(fT6=MHEa?/%=ZuLY2L?p@3\Hm)c73IuMW\E5 EE*C]\p@;ar2a?"7J"f;/OuGBS\48Lqu+>+&%ZEC^]&TWgMblnT6o_oS@1;!hib0i hQ'oTp5fhNU&\I/^ajhsL&`,4kXpCJ!cik-J3ZVo9c+83+;!JmJ:ggMW;f_)s4o"D ]&A!#o3_#Tk-*ac+!ps*s"f[qHc^a>TqLbipHNA"^^F$DO[$EVm]QSPr3bOok0=S^ (BRDX:sT(RrXgj`"+N?C5d\k(57IYcR@'V:eY3;V$KRiR^U>-Dq,mUrpIj4\T;Ki1 W;u`-rtG4com\:WA,[RUF!Vr6"[\=I%nZb]ir):Bn9PdK*Cc9($#g%CImSua5RD<] JG=UWd=tC!+TFCY,sX'=#aUO+d$7]NT.&s,N4R0Jrt5-l#T!P7(gD!q>3*.TL(F@= -[:W3Eg_C`^easuq7hO(TD0M,gs8U.>r;<2Rr2+_JAT?0S\I_SaB25ah mL/3AIk(I)9+-m^Ql`N.Z>HX0B=cJ,qR*N6B>!qE_t[UmlLQ!WTu)7c-,=VfLY;oo<^j%!D5#"aVbEWT9qAcIL!nVjj7$e\Gj1F-r,8,N5M*5+l'r;%FpA1e'6Y1qNFCA4pm]4^-"A)YA2B_\Q;i`Wpj N=5R;lfQGn/aMl:pOJU4lW83:2[t[`3k*u>m!d?(o"+8I[Vk9*Ad_WQOQTul(G;QU 8#7H.AYWo"A*8Hc$d$Ukg&/BiiOideWFG"eG4g"$hA>RW?Z^hu:VKi"I]pH\U[cV' k0JPGGlG^nG%(i]gBSP.]lUpE,u6H";#m7",U1#SJZ]L@iQ"8MSqqPOW[%N#MjnDp ..D`Sq0mZm]_B8X5QditRpjti?&>8TTkQFbb+9m3QNYN^S/!57*P*S4Q]XmYlAQ96MBC?q=FMk6'hT$s'`AB r(lVXf`0r9rEo,%rs+e:K&R:gInYFn_dG1+oY1@i8Qbt_.JZ""q%1ogae-2ZWX8Ta .f]@rBhS2pC[e0Kn"jaeXm,J)j6[r=0E9i%l7[R(rn?u/LX)A2]!$VI]>6W,F8r;U %=J-kjl_-D^A\Y\kC5::nSe7WrbVSnc]0[Xk^N'(kNpVN[5AekmaVa?G%=T))-p1\ d$W1$gU0HEFBBr::(??''@+^l&06i7&-@B<=qT:a&]c!b3""RQnU#HhP<\I5g/eRe N3Y@k,7eriRFFp;h@F3f/5YFF.8<\5C$jpk!R%uQ-;8r$Ft'?fLB jUua5.(!"hhC_IfPboSR?[WL?/fELrT@bP1>5g@hqCi?hkd`+L=;7BW&tOKqbS@IB VQUMi'C8c0)M]"85)$;a8-i0FIidLfb!n?rbT*8rt&JAV%F4Ra*iq=[Rrc^U7c eNQ5>M#@)JkK1IL$m6.(NCVf^Q?#5JoT"G$3,A,QBD!b*Y= s1MNQhZ(\=l@8dGJFEMs=.!r,`#Rmks.pDFXDTO3rWhTg+FiC#SGAKUbp>YG0bAAk E+ON33?]dMb*Y\P.R,Oogb"ED,64P>'E"KgrtH\/;UkVY&Gu,uh#B%h`]j%ci;SnqVQU+r6TZbL]6JoWGd:5^AL:qndimt+*q;nqnP;_ ^`R];raPZn0D_mPB)M?e/V!OKa7'#Fq;i]h[pPN3caBO;"25YZW&aYa8C8^/pR.YKVjd"S 9shA<\+`V+(m^XS#HaukcM=N\`A@>VM/`/f1^>""N.]ur8htI!_1f2A@VKNG8RSrj fbGdAbEIhpR,pi#XjZQ2q<2!ZEq'fTku23m$/,d>.#tGH8!f+NP7Ke9T@tYWYtk5: 4T-5br,:B6%g1:Qf]'[2M>X6'q4MS*juVoN)%ZDcKiBRoJHLhpg).Ecc(I09KDCK0NAQ-ojk(1jIemLK< ^N?5Q\?9.egMu^_fBMVHr>3^_YFB^m2!hl:Y.YOOg^9?"8nLhV-Vc0=Ns(Z>rF>ZY O`Z%Z1ik(5]2U>qY2B2XrTn_kk?iB#^[9nSU3lWOf@`+*BCN\8pY*foN<_,=F$!De pjXX;6A/-%^k/VN]L0S&5u<)&LMfBKp[EA90EVT.[4r*k,RWTZh/TIq=qTJFRP>R] nC\/@nGH'K!6>iOc`dAqS=a$e5Xcb\+u4';:#5UWs2T*4:UYSKr4*<`gj-'s qELVd&HAL:TW(?Ma4n>0&"t>r&lS*E+TPi$ eoEP7K)2*ZPu@Dks'tj4iW(l$ofo#I5l?Zi5N(K2!L&cC5GXVLFg;"]m41.=kPIKr -RJ[4pn-.>7%8\9X/XHrH:oJ'$:Lf0OVp#TQM(Vpa0_gYhPOHh7lDWL2k=1QTtgP1 ht'(??U>$KbTG9Jhl1P.em6qmGSJpP.#o@f5NKNSj`% iV3A5jbNlfnYcDmIJ[+/BA[te?9+AHFNj*ei93F!b3[iGaMK=mKhi`T:HZ6(JW32!od?Hpio&=aNmSC1j1j!#rDGfMYGR$23*.2W -9j@D5At-uD"IV:Bqj%ih`<[6oLoKi.uqFjPPp1^G1Da>&nd7odhgP-k>ft9U;Uq< BYQ=2?TrR.0n1P,\Z+D4dC=NH>f`4+.OWPqe(=00=1.@%pb*NrhDQCfW7neE CqX\5qK;,slgDH!c0Mk3lS%ACccbKhb@Y+G/NeG:F^-bC<&VEk0tes)4]X*UaVR5A a0GmDGBcukrC,c*Q`^/Rg,D4a>^Or1rMKPgX5^i;gA3S\R=i#j[UQl]Db;L 1d:q4Vu>)f?cYUkr&E1)ht0-Jni)egoOYDmL\dVN!W#Ekm%^W&+X$ah(i9G/]03]n ^K)?:aSVS;?J,:fper;bjF8-NA@_Pt"?9)T&!I*;'u0tS*jdeh4!9VMJRCRr]bTj8 O0u12>#qA27e@*n1W`UU#LR\c)3631X@tT'@^`S@[?NuZ6.f?RZ5*]8.Y+&_+pWRL p(GAJ`jgm,em3GHmIsSuI0*(G7M,/!@QksNpaTEb-(,6uAjeT^Musgsiil/">%MC< Va2BPb8FSc8?2`XJa-']sbrfeV]Cf@C6uqh2(]_V>/h@&dRZVG2QsJ,$G: q&a^^^/A88Y4)5aY++l@YCGGPrMSN,J+*F(Djo#OXF:%qs-rJ(hu6(?`LhKAqd\Na IiEY22r0u'YeL!AY&F>Ys7_"cIIh+7=+>CCok4:@hg(g.2XVW1NNLff7odf:t.)_of!@;Se,c 3i]>K3s&qETFjUMZEUp/)6@KIlejS:W4fr.W[\MO4q=U8JkBIE>86=bVn9!.c19E= jC.r8:!_8Zp8.*/q.og(NGS-qFSWIVohrBr<4[l8+ejh,MP8;S`)]HM?SZpUT3*U: /j'QG4GduX%daRW(I&505>(:,A.L32[YlpL+,:UqAQF^ub=/AZ^K;2EojutEQ#,kkeM7,3o52b;MqYQl RWcD]h0n%jrMF#`R=#=X_.WG1D]nG*GCg]FY%dKk1uT7cLr,Gl^Y#(hVBpPCkDs6*UjAgAS:0=/-js9 b9S(#CG&W1_856+"qf4FLQrFbjt\^%)`$b7`ndk-LXcIe9Yk=cOK8pMUP=baE?f:' B?fbDFY.-.$T[-f,@j*Hr<)>E^q`E9[DAsue7e$sY@$kdQMd0ThnYCV[HQu]\A*Wn F2m#jm:r86[\7L-\=]Fk8Q7Qa,Y-A+d2O3De-V;Td1%eKLlq<8gt(1 ,]6#*YbFTabTm=c7KF&Tan_98kYqLXKT-"Q_*"(UPKk?1Z&qFpc&CAl,`;^t[*Aee>CGX[>r4a4c !rpT$CT!S8lMm)A:uHiqN6=N*s0*%?>.JOCJGfcSBg:\VXLeU6(30A(PeHa6@b\?[ qpW7!es>Dq[E9[=35cIC#_XX@q<9@o7qDnX rs)>Em*uG.n/2^-0C1KNHAs$j>^HlGV`r/#(&+\KH^/&9;$$1dUi>`q[W,WdqljW* C&ZBkajri$k'?C7,O*d;]Y-$!pE*"f?HJ8#9(nlJG+L.+?BlMCXuLa*\b"[&r_dh# [IO58bP>r.frM.5BD1^SR[K.%T1<)=,?(s!Z5X-LC5Wb*$R*gYf#n[Eo26LfM7&4/ ]7L,OZ]F53hd.m-`3r55,@%JW&2&LQU*0mm8qM-b/J&W$C(%T&"\JKKXiX57P;-ia e/BbsfO^2afqn=E$)]C;W@^1^Qs[4h(L340<^m#<9^bT:CPD.ZB6lJhJIQL9R0%V`L]Sm>K3V9oeBjF`9"/Ij_XR Q/c32qDJrg>KMN5kM$lL5l7>#;1S[a9)gBaZcrsG-P%;qNut5m*2cO!Vi>R?6A"6( N:33qC7`#a4<;s5)rEg)EWQ*)PCgsaJJGU(1*H@MH`7)Pr6_XriB?&I;:Z.r(?+mL J,ED2!I<[BcH&l9baQQ;X!i+Y1B@;;:*@2BRuR4S6DKWbfb"jKi&/S,F`^#)?-J^=rdI,,5r7MA,_\TGmVPjX%R,.Tl(CZT2pXVHkG"D&Rs[:#Q/LNsXa<-dFOIqVo %fAi&0^GdloeojAPmJ3+W\^nqo^#a%VbW^XX%>^C^FGF_.["SiP,_0=_#e?Y;_M8R :'#0!k5ig,$i#MQO(Z:mK>:Y7plB'7F_e=0FF6nn(AIMq 9l2mNNBmA-%Rg1*`n0CMf#s6A;4ARAK`+:rN,+PpLj`)>F"SD"4@Joj$/7#m=QKi3 ]:9fYN`cos*C*PDo"![$W)=mR=3DF<&gk\kMg"btF/_&P]iN'gcK'8V9,:-g2Y)Ub "n%f.hM(%)-'!%tg:\?d>bud*=M\R[%kM+>m[C"r:WBe<`O=%=3[U6]+`;s<] &rendf,Cu6-R$!j'&6(`G`#IuWFDiqS*)&HCW_ "q):*:)ZON/VXqUri'*R'A"/]3`#'I6JHqjW96NGs$gH^Gf4K/s$?M.@FjXgd_J/g e.HWqKKj`3S35_j+6?2Q(67a=L(B0>=-_WMAYmkC6%YYX4::uE$N0p'fqdCAO[ko$ d0dR5,b-O_O:d;R(D(a4%9b"ZBH!`V;?OuD#-(9^ZBo%ngP\?" ^=Jghd[n5#SUgsWZ_+q53dkk[rS4ir>L>YXdlVS=os3Z44A\YP//dmAUtck+Uc]&9 C4F8Yj`8T)"9a*,b9U\0)0/h%@kJ/$!8%Fe9@sEJ#j)fdl&[t\lnVbP,d'`Z?R;RR F'.R0N^:UfL`+`0E5[r#DCtWJFEi@H%OU**7KLQJ$X-`g:9K;!KVb!!%_OI":i$R1`)9kpn_!U3Fj0\?/UsZlOO`aE,M;AJL2bWCca<0FA\_)*#+tJKu pg6`5=A'\8rblcSqgeY;U"bt[CPi#!H..Nd;eRq+jP+M>quB4s<4FKLCB^G`=<`O%]0`"&ZJ/Q!B(L4agP6C7C?r_Zk ?4a=U"mmU%HWe^!g2AJDJIrH/]0rT)KkM"XpK-OqlhdaRq@WX&.M79IXiLb.-fFG$ _-[W?a8AFVbU<>7ML^2d\X#!-EN`Z9$Gt$-C0)`lr^Z)PW1NTBrouC.*/k=*1&jaY8H+Oa r9&??dCa_%4XH9kM#9kKUPdp(VL_(ON`GUW!OZYVs&WuFCU>8['?it+K@&-_O6c]h r0qP^AigI$MV_UW,fFT)ZPoi(%JMrgm)m:9INme5`:U.6q?Z 8SUt>a9&RR+I(t6K_`q#Q[hmI#V!+fN6[#DnfRPB-bB%r&J]cQJ%%T\eTOWsDA.os $2?#95'+HiS.?Cn!SQO)a:@c'-AC3AkG^#(05Ea$Qp@Q>VE *^Cq=epRJRG5g'9pLjC!9C)SkH=Ti\mh"Y>8i%FI.X8QK1[G/ZlfLZ^Jm$C-8Z>_#0i^6]2A*nPU8+n7k3<(C X+8rlQ/8"0Qk7fLkBPU(!uo+Nj`KBbJnoqd\&db8e1XXEQfHkoV0Fp9_&C3!l+g2E he[Dd9N:n&>RS?^s&L/E*UZF->9WbHrm/N*!<8rGm3=P.iSdU4'>,Z:Zds2m$M`NW K@]R07GXU-D4^k,V:D4$!m,//2kft5%? 0!O/i>h9Cj#NC6[(r\3If*Tk([`!1'E"=+r?-=t6@F[EpQ>^\riQlXF*0q?grSCT2qWaTLi86-'t[ 23'GHJcCg7*+ht'c58csa?ObKcH^EBolc:Kg$E=l;sN#N6P_BL#\% 0Z=!+*p.tH5NY1_k_9]/5JWoD*CKr'fBH/1Lfslao=r+0Bf*jfR])l+1QCsj.GfQ@GDQ(pGMQP)9X.r!Sbl9"B0KLJH.lG 5$YMKFb!\C?Eh_op.'#&Q,bjOEcrVn.3;3!/Y0=as 8`Q8\Z^EPPQSuRL27Sb/Rpe?jBK^l6i;\1@cWjH$'#b$+/7=J">GZXIia)0'h4W0J k(0"E+GfNBURQi7_mc("W&d?6RZ6bUO(s6$^jkhWs7PZkCM":Y?dZ905NTn"R&DqYMb$A.EWTEuY!%n3C9JN%RgCW=Ec9 m@**2665?e8.2q0[)H%S@#Ye@N)=M5OG)(34@0 :fkjD&`aJq@3AQB![:FPZEs!-h/?icE%s+rJHJSIK,s&BrMf$nSYEeaZQQb]0[ LbU_;g^k!#!+#qEcqta(E/h%[;!SR1TE\mg@_O-P,VuRU&utamfMD"/g/::R60%*q c*^7'5>j?d/8heb!uB6o5o.g8=?rVsV#Ut)YQ[uOeWm#]Q)9*9e.nm5"b;.'2>Kg' $`G5%q2^5U&cZqO\#V;H1l21ji'.J<+2W@=o:,>+s1ns`g.+"B9-,\d@JDpD;R`rR Y.XQaIh]p+I&JIo[57qe;gL"k.\D-VepHqe:][).TTB\YJfeUPqLs rt0bI=>16:,N7.4E+3/5)DASr<0G>1?"+Nkqf`hF8c4XSO%!q`_j_F3>#CnEVb`ZF dS!hkRG36aP[F_U(P&<3XOVRc_A:prUcri@I+en2,N5d8`"()pXIu[$,(G^+1DidZpnq!YP%H)e/Tp@LoTUK6#\"skeT,*d6NZnr3. r,3d`*t%cpn]fXpAh+V<6HB#EQ(M*5q(_e_koeo682XYRQ>-p!^X:1*r\p;[Ra"FK L;YEE;PPS46'YQU9PUY&BrFS*01uHVW%U`A.o+)"J?j]QPQIN&NJbZCO:.^EnG`st ;'V`kFNf4?rXo0)U0_o$dio"q"6\&b7@=)rA"FWMOob0Z6,45nheS=`.k>7jRu\;Z B0!;Znl?gTf,b:NSk4*tjmPD^fY/lj50MbBceWjjLOfE_6f-3`aT:D9FT7&*qg%T6 nGbr6cKg)\T2kVM<8N%%EVGI`hHSP/\*EPqq?LC/mgMuVR\"sb5PSp*pTaS]WF^Fe f\M`kfcUjZ`6!a=[T^mUM\bpW @4\9uP1fpXiVLsWrLL+WHVMNkWqt$L+TASA$7nFDr3,rpXS]I8o,e,Is*$qt2uZWM s.,n]4&,/S#64@rn[R.qAiG+(nQ3Ef%Bs2(9oL-E,RF9Mj2Md+.JU,]A_p[Mg#4%=)!'jPjVZ]8l`[87]nUB8%!6> IIL=bQ7%]BM&QR6fM!.arh&c$JcB]F:$KE`3H7PCJ&iQ2rZ>aH(#]693a?im4gQB' R[87G/#rbe3D"\4]p%7C)6j>6M0_!@63R+@iRH[5+d,:tlI"aEH?J4RXi.2kc_h2S /q_qjPS0i9Fr=,A*j'K$dB5Bo&HX$GJO_K=$)-.?W,kRZ<[h:e[X=^\^gk^bf^mmA WSIp-i&jR:S)_Yaq\5Ks-8k(i@X>$32IR3k=7)fuN0f=fE.MgBh_$4re# (P7,;[jh?@EY&QWciAtJDIcBjC]Qp1k]0OVj?K%B>R4%fq?Ic9G`RMBW4nF$Vmqs(A)@!;LKmopX>jNQH%K"9:WI+-.S_(4`2lL&$c\TLhpr1=1RO%>5YE ECAk`!=NSGdD,feXGdoV':!tWrt5&IFUV/"FY#kLk#uq$2%/rhMVV`S2d=re(+r]S X,4%\D.98$WEGeAUeG[)88KhQBdcUao:Jif$E1BU)/X05:BH5U!:_/7E`V@u_bbLO #n;S[\.c0C49LRed0N".g?`^jW5g<0RO*C5>lr03**88;HYkk8q^1mKsaPAZn94D*=&#hNb::/,%9M#PW8IT'#FS00"3?Zi)(l s1*CCV.:*7JEOIIc_R&6'Y@`RDbH-6$[>a%kAB>6#OV=ke_SiW1U)D%/?dpp+U`Pa pSoTjYBfu2g;hNU[l9S)*i[8MSn5u81?Khar,k>dQI!qIi\9bbHl?%>+Jd.r\l-UG $85XLRmT[Y0f7Q_%6n0c*O!SFXVBQhbeC+&^1BirCZEV#jR$a\U##@oS]&X@KRnd* !5O)Mi;u`opWbL`BFeX$%hNajn^@TIgn8pX#bEj`Gem'i4(*-$er;gYf3F)+NcjWs?]V)94/ZAQ8'odGk#=kdbHr^K!?]CI$e3Y'Z;nKV*XGhRa+d!EddPf'/YU/!M+Mq3PTpj\et\s"*:rZ>^rgs-`?q!Y&q_iY$bl6*d0 0t,1GT?m1jQW=8i$?BW@aaY<.7k=dRIj,o5q.'DJ.C2+$,-5rfG)'7W5L0nhKVKG_ [n]7\gnW1!?bcm)eE9/ed&3*$Bk;_H]O$Sl=&[JD.rlS$\r@&pOdV39S,>!N7rP;A^7>iL5]lj*)k&`oZ][YZ4-F.8(T]rf'RYRt7N#d4<6 ,$gkQJ:V"adrH"n!ZJKIo&s+fDI[8A]Du?34>hlh?]VE5;KF.Jgu6qhAp%e>GWhBQ b_u+?pd\LQ\!l!F@J+:N]ilcF5JVcK+WpJD;3qNF["-6.!/UPt1h<^.c(:ks$rr3O _(&lMA>Anln3jY_8@8A$[e3P'ql]_`?.n`Qjdi%:kgn:S$5%%'=Su>:F6Oau$55MV:3.h_e'qKg9sPiED--L%oqWjkXBj [[GuhVB=a2`UL"W4HiXEj#@2kaRC:>WrJ3UrRZ/GkMk'.,n8bpf6rqIqVDdr@3:MI !<.TNrfbj?n[On$W#FQSVS4-oSf`rEdC#21p).Jg"LS@'+6=`3:,!fpJ7VmplJtEK T8NpK2h;,``-*\0](,X9>\lK((r1VF\omXWdr\:<3m4ptfT5gR*F*.Netj#]r"8rd\NMEV Dl'PI/?cZ2hc4"J.BW*)CBGf_l+E_FpOlR%.r@%4Io04h&0^ZdI8*\SOiE!so"T\H4s&C&_J'nBb Hhbc:pl?&=aS,Iiql.@)Wc[*J)EP[O,PDqi_de(Aj%1+ ^QGVt,7B;R/:],L&S6Gkq'#Oj;F:We@pQA?#Im#V"6?\m>&A)2L"0pM3D>qY"/eT2 Ba-@k,r@-_9pM72ns$#WjMoWDL6AA/il&F&"FQGjBPVQq!TA`_:Dt@kCRU,ZM!g_r R/b*L7t)lc2roLZ-7"p4(\8_4j<1*Y.fPoJ]`ncG;(/?nb?R(gKMR/.o3+`CZ"2js B`R[kjH/bT>"?s]Jn^IBK6%Bo^"6n=212qr2'83 ?Q5VbCjc#Zk2^O\_1m-+2d9kS-L'"33WZiL/Zs[q/'jrR_A5s#?mnH[J:BSO$E=ZU K+">fIDnOK!1L?7b*p%r'L6L6O0%WmF%h)AA,]PZ T%eRf#iK(eV;2$%*^]f[9(OmQ"8G)LCBsi+r"#[_]k[1E1&.o@LLTNqBF_7sOk<\g #eWV,h\62UT;?YR7(:C[ZqfJVT=j#7F/sR5g+aQ&0c/;!(PDJn0:8K@N^YgW(25qd gqYOd!4&<#KV9,u5JVb)ARm`:jFfI;Q@\M*5?[<<4u5q-eRnM)`P%P"ShaGmOh@m-`*]A^0"6h+f8l9,ba!B(.6Yk>rhVCM 6A]ohco\@KNKl=2'ikh\RKnam_'5_jW7#%I$s'BUWcG;Gcu$kk1C?C\7Nj#k?!9h/ 2@H_[K&_CM&5$`iV02"N47oMF:.#91aXGqb($-&6GO\a6bpGc4Op"` 5O.hUg?0=\nlnX$+=s2Ie"Y4Xa4OhZGo"I)$81st,JZkOmaW!9fFtN*Lc@/?:2cis :?=pN33m`2Nqm[E\Rm/$7E#9%"83&lZTqeW2@/2qT$]fnchqDkJGG6X!:t]7?85cQ 2uYoH),=[F[k7f5pg4<7aSR"X>BNW` J(,]0:IY+jrKfhV%2$>45Hp[arZafAQ%Ni8=KU+17hl-UAn(oB*@=gfOm16!d!%n, ff75+G*A)Cc]#5qTj_9d5pr@4a$`:IPkp1c&1E_A\0$/FrrN+)C-f7Fk&7tr*kmm[]u\kob2%IuhK^9tI\"6/:P=-qh>'Wd mh`n;:PSc81j@ejNkc$O0g>QTnGK'\nP>I+^XbRI[GfMgg'9jm5PWlYn&.1#&=]^u "e%8k,qlt`PP0k.F=aWr\<^aGQY".&oA]iME()^uRh_?UZ?08q#$iOJWd3"'A4g,o er8*uTU<<]4h[IG]V"3@8b9,5qcApbQaq"l-_pb6bW^j_Jc@5opHi]J3n:ohrWhArT_?Q6gE3bEs"hppDcsJT8f^,]C*7HkV?heO@DI5;/+A%KeNLt;)5fNI f;m^l+Sbi;R0RW_+oWRCCPM#mi`eo^R`6a-UX;f/M4!G)R$QF8[[H@Al):JAX4.)&_IW9 CX2UAYmZ5VML0(bRU? Ph4/][Oj"8CZYQG_VhG'BY.sSTP3a9Ir8=O]q%6i+W=Y0*aZr+>fcV4A[RM/e-r.@ r+UIQ]%4i%q\3dpH+?EiK7G%Qqed(^;_Mh5$8M,qf-$=3VBqM_Y"Je<(d9DG7.NQ) a"RN1*'b\B"*OtF7k,5Q'8O,eaAmad/YJpoU#j]i6C0%PI:<5L::MEPTK8]6H9lZS "08G`61,O5q2^OE8+?PBL=0N0"8kFrr"E/bQK,H2]G?$IAtOq3CImpB-D<&eiMLna 4ccQAr;YnDhXaP0q7OZG#jbKp**'e(>+:N>YgV5V%#:8(7e#H_Cl4UkCCo!_4Wuu@W2Li`=K2D@pHf:Z;m>5NT6-fBqq;Tl9XiKG7#K#;p o%Qqc)op(\kIfn8P5Po:-Z:9>?]+To!hP(2a@,?k1O,-T):7^b?q:kr+plX^?4:_I=3fQf"b#-o@Tm%.OKXZ (/d^Np!]E*1-W)SAH?coAO_sV@c;6*B$uq^1eeUr5(u4gD)j!a]e,\(#^/.i;Zbma)$,VBTD@_,C6PQ7lc,"'9nOI=9n!gE-*>O]DHA$86`eYWrH>_poZGu_`CD(R&7>g1HXdPcG]q\"Kfpmc//2c *r+WBdl%nG4W%0T**YWChZE]tMQ.bTB`sfU+J,3a"o^T\@p;E?<"Jt9)7XE%]hp_3 ZXNc4,GYO*S'4gb-DHquiPdOroCU>Q"Q*P6!9X;VdcbT6peLYgnGanX')6r@$T)qK )n@2^\g(N@a]UY?c6!<=:*_X9Z?afZGig,]Fusn[?Jup*[/%(j@nM1TrsSWR'"DBY 5lB5kgr,(8O#e4D]'X5r#iP/JB=+^r&Z(a1?"I0P`S&N\M*#)'c7^$$2_>ehD^kX3 WoZ^3NQM9/A!E&2';,@tsGd5SsX+/.9k W)^NN7L,ca2dPgq;u.sOSFEZR)4cKjLOn'WbDY?nNZ(9&^/"W'7gEB^d;6p ao.rBpuB(OOk@Dc-kd*fZ.d_:1?S&VZbk^`6I0H#&Ji1]LDE-'A-$2JEmQ0L&8"+O 5?=CH#[+rV9g/p`m8DklcmnThd3`1dOlnQ5o]X[DXU]JOj;+is,Q@#.+o%O@)#fLq `;e3HTAT1r;00SR[Mg'`N[f@eS^q\T[omD3-@2/DdA@/Rg9b\;S'\At-*+-ld8?Ln -qbar"6$4ZM*rQW$3*R)^l8hCpLDGI;".i;lVd<$Bc9=3759E?1?JhqK6dk'4,reP ]sLikm8`>[22,@JM7:.9 l$LsoNuF5dr2`EbZD'rHDj=nQ.Pn'(7(SYQ)9=]XP`-ST-?iD/ L`Ph,4/r0o.K6a9J`Xh$-&ubqehp+h#6$82ghUa+2LAhqk22'jmDSh/@m%Bnr]N_8 0)dM#H5A$dW&d=j/MgWfEBWp#4qP6D7UeTl!:YIbY%p/.I3dNtO+n,#WX&OtI&$*( >1rkfb40UoocK"]^L'S!J'8,lK,<$e/oUa#T^g3WSuYHhmjG'YZg9=&rtMMH0#9D7 lTjXSY$/M?c/9(a;,r]#N)5s."&\`D\%lGk#&`!%hQ.a/ERB=,jUX1#4g8BV=i$3cJ>5B K@5U/ilO@&jL/T87m+2G1UAa'434!Vi6Ui_VhkEZj4bHh)lWpInQVu6)_'gj#m#98 7qo*A\Ak+R>LO$]'bh\2hq-h7Xu*ILDCH\Ikd:C5?\sJY)S<8jbMpsV+j7j[f@'?3$Z5: L+i']EfM!2V2?:.j$ja\&\cce2ANnm""=5[!2J-Wg;AbQTZ=hOJHb]03-]e"fEEnY IkMZ?h@;SE.g'2r+H6Bm5@am+M#X5mEY._iUfmd#rqG/fK2s_KIgH%cFfCq#cuD2= 'Li6'\HMgBs-r[TUA0f7s(G;\iI_*Sei81Eao<^bAc;f0gM5ti[@t`=HS(KogsA,u k[4E3KEXd5T@'gZD]i4EmjKRYNs6ig%T1j^M")e+ZN0%f_u_ZbJOL?(!<*uRR?0^i q+pX(6TZLM=%nAB7HaaE'!1R4$BWc:bB%BU]UBIGBjk5KZn>;(c.,Rc[,8us"o^lr Hq1\k/m*BC>(%`%H6Si./mEfS\c#KT)u0G,Z1CApqF\7(HBY]4->3@dE;tp]i3i>< \,]XHCY?PYK&cSO-Z;XR?59*F.D>=MoC,i)UL-\*IaR$P7=FVX\d-!<*rThC:]@K] g&J(!"8^"7n6tG0M.V45bgXcg,rj5d!qI0!B]to(.*A:$*taA\k#"B4]P(,]Aor%D NH2k[b)BFS2k`C:Hr8lebF_#WNS[DN4lK*VA^0RR9Wfb(XJHE$q1aa?H"J_*!)$!% @!mkgYf5nbU'A&8^"Y9ubp`<=`OAJNDUS]Ts%@>pR/\[101>d>rrouL%J=-8:/e_Y s/4kg7Ut.!inK5u>#6H"S$gQ1oUT>hp0Q.RHs$aQLOd/-b?WdD"LcX0%:@6r^Jo_: [!bm4\Rcb@WL9QiTLltYmO=HC51)Gam0m7'oDWFtr*]'nB^*8Lir;8CS`d")Gd@`. +E4G488.L]IJ?;)co%leCJF:'j5>uaU$G^oIp=*7NGb/XZpJpi95Rm@orN32JH$2\ mj/C:^(;aRLRBrF]W"'N,T,WGk4Abl%.O;2B_kgf$2d"&0;%AZS]M[Do+k-mQ;85g ?icp+`V`W=InXGFl,3Df_mK/BV4`?57Qudl5E[X@`jS6ueZKCu+0K8pX":lp5iO4D +"OHtXDi&VN,4f@mmtKBA`J-cM4NG,D;jt"IrL<1]IauRaVkBNnjbUEL/ue%MokD+ <6m$IYf%KO:%aQe3sQYJIVN^AV7Q>S\b\gm4fY`=?f5oo,O8'6# Y@4fg`+*phe(Uk$TJgS5]:"QODkOQ'l0Z%irjSko^jiHZ1-?g#Y)j$e&C\rm,7[9] 5XlRk?jZT=Gr3;YK],_:JCFnXfAuX=EkBk8f0kr`[o8XJD34HV/teIk eHKi%Z+%Bil0]58g?kW>c/R^]b]XDBP5h2L 0`MM:j,5\PMDAWo7.@r>o>`W&onrBTF&KSV:pV;cKpWG0J!MsP%^ZT*pNVT8WDi+3 _jfnAm?HN9)^>)1U@Rd/jpl9*rG+.U9o/_B]fT)_]stiY*=YTVocN,l9N:n*FN5TM "T^hi"pk"=_Y-\lG6%Z@Lo"Y?s"qCs[;1S9)N&9KIrFcMZ3'gYoQbo9B4>74U]Aul psjldk/3 eI9DR&BbDMh_f3=L>@((k.P6s>qlS50_\q^qS(P`rt50IfK`qDF^q[N@kl4AW;+gI (9kmH>2hNn&mX0_J]"jWUXZPSmL[>:8!"g(boC7g_Zp1\s-ZgKg%4sWZbZT&P/T61 g)]G#4iQ]CI,TPEk'>(g=i&6P_=Cq3!q:\=D=QmXD$GR\,l*(93=%hpq2^gALn98P e*rrG5]M%Ll`O*AToY.k8f5umk0&=2d#RmR'pc2&$7[90Ll&IPY?.W8p.8tX< \(o,Eb:7]O'm>jRFf83lLb7<)W__RQHiAeB0t9+J1S5*Q8O`1l"!9/ss.AnTAGuc+ ,8L>7s%sM%_8bubG(@&SP++d0$QtjEV-oHQcP6=Vrf`6#J$Y;u2Z2bu5^n=boPW[D (@_@@!l@9(+<<6>r_-#bYh4Uq&$ZN#pcj`3b9Gn@^'l[lp=jV8Q5krWkVd%b$j*>X O)d9u)QMhs'(KQQ,ktGS!VfoT4orPCe7)gn)VM&TW1Fc-r5!-VL5l6I/jKG!+<5ra %f[/^<)_OdBK4oT&`f#AXGZJPa*$.8?.Sd'F*sl7Y1#r/0[MihN-7@t9hU8N%^IIl 3m_gfQD4MhphhZn[["-=,qMOm`t:Au&K61[Z&`Dod+n5ePa:<.7k"T@=WJ7T%OG:B 6Ut_oeDp-U+E++!UFl`Ykg9`6?O1LDQVQ86;fisNg/J5=apNWPDQ(?5UM*n6oPI0J )lZ2d4s(/Fmt_d?"k+"f4qt2N*p'IeQ#&PrYnbt''m2,?2=8@UOIn0Th._YFPq:Rhd+Qi;Th35SkTDrYNr'>Dt ?@2OLq>>1)a+(?Xr(m3r^KI2E'tiIalKCOmb-#\o5A.'P=/=iOuDjH!5;m)H[!I0T08!IU/KcARd%i3/4!Rrfcu2gZe_) 9_Y-'i^gG&bZd8+SiBI_geAYk:E&(\+.d+jVIDV&Lcu-7/2(8;(qsjeG;%7V'CFY: Eo!Vcn$*'tBPqo]/>a*U5BYG+)Wi_:/%!#"Q@C8j?p;;;-5Q!a"=on;F96/(j4]Wo *J;`KhB-Uk+"^dU.I6sUX8AZfrX5_(1L\P#`";aRI8e_iF[baXg>E_#G]_sk'o\nt MUi9hj[@]E]6EaVXm_.t%tsu!jLpH%In*tKK=oO#';go).&:2(c1CRL-&X>5*Fg"q.#i-+,,;]sR<8hT,^>,5a1B (4UF10Xd0.$ISiV7fPqis&tk00u4<&:@a!N/uAaedXj8HhD%Kh-`4J9@df73frl0l ^WN\V,.lpne(%gr4#n$>U"1YAmOFC.OVU2u#@]S+0X0IVe5F5r3'N)CL_[-4$938j\4.&k3_G34Q-ZQb88',X ck(UndEiZY`W>c"A.a/fi1EeGH^HB7"tEck4n/r,#ETd.5^3S*NC^`02SSE60LHWF 8b!$.cNrhM,A=-2LQEEn+TB,$N-b%!hie-@&(j`D&DY)(_nT9F'uBq2b.\#HBrN?)TVgritcadtN:Qoa9Rh%qWt(G%`cYJ$$64qXn] (9R]9T1QKMqGb0>r-t6Ep*si&`.-_u.fLiVJc'HWO5B">^+VPH=E`kUq476pB-3E% _#M0+%$1+rK :-K3=Ik!55b#3/Cn=oN\.'bC=?3[McSPkUd""Hp>8#kXK`^IXZB(KH^pc\WC *WF,4hnPd>ELa@YR^II)5'<;P]U([dOZ^:B4KuWnbf4k%1LG5?hXeKWF`1)]gG,;% >CCkGSjW>Sk5RQG&,;3H:]^Ankq6q+222qBO5Wn,"us;"jj\!O)[hV^O.4s&isc%&4L)rrH.*Y>kW$ _#dm!lMJ^3ghlFHB%)@Am2'_VJJ'C)tX(pRIXoGsQ /7:<3EL+uQ)P].80tK9qI9R-3*m9%r3d.#J[@K:_`Yeaa3(TMArknU8s5Sq83K&r/ X67pmqspT\MT'r&nfKg[&+Q9rJ4og\ \s*8(r^U,leg:;/(3$N'-k(Sf9Fu%c_>GZ-aIjUZpMIo='&q%Xq2^6\9QC#di.%X? nK4I]aGL]$+'F,V7IhP<^KjD9[8kX/s4]"@`0H#[(')2K,lutEOT,j[ql:j[bU%oA 5!=K^_1,c:s3^WMK)b>t'[##9+>0VCaU"kI(tdR3r9+Jq8c1;EtF9"A=16nglB $7\NC"7Q>B8GKZ[V70Io0`U*hq2^FrUq62m/d(tKEbWJ+b(=#878T\/i2U-n+3^i- PrNA$>mnN`'u"TLD.#At+5jo)2KFm:M5!2M4RiB(2gpb%!.$%qK&HZCcGi3P3Y_9S [eiV&q,Fs&8?i)H^]$^,onp6X,(9-0k5#J5p4rS+O+jM#'Lsf&H`uOXmg>+>Pb'', .(fAGk4.?Vrr5L')"%G#5sH7TranJG^gA[Ss(6cWpSp_:Q+MCr_t-IFjbgb^6"Lom Tf@[eT0XpNU(sQF6GQru),gYRO?puaV^^&-"f^"g[-3\&Ru6jjEaG9!(%:9dmcF]A Luo`aQd0ZLDJ'L:(/5g-Q;7Z7B:6*Hl%o@Dab/n.K.C3V%!e7#o,pnk:\%jLV[Aq:=HIpE'PLX7&\4a=;Z,,PZ@R:17>q%l$( &H%U.2#D`PaPR'sn,#S0q%"p)pSo9b%g)lXr&>W-\V7Z '&>61Fb%87:t_J!D!lfe4A?bZ9Uj\q%W*I"D'tAcAk_+(S@b7JGFlL(q>X:&nlW0r 5d:C\5FD#ZP3mTB]-jG%-fmGaQ(*gb[iUcMS%)Kp)[jb4NZH)RBuKk]`0[V$0@s/a!4?@.Pf"W>YdDL2R?n=/Oehs:k<)Ga,( ;aYP!Mn,CbAKCVXIR,`s0U%Zl&I!h@jPcIjW[&n%0JtI9NKKPs"9+Xar`GO/;isa0 F&F?]NJI=nVqDIPZ^2`qc5d3\%f#(>r.S(cd[faXPK_F,oHCF=pr@7tp9-4+X#(*= 4iC2N&+G&n`jpBD\T=P73%fH20m#\L?]0\Qh[.+`NrPHF:>e?Af9nf6j95P`'rH>? d>*$6`1mslGcYDDhDIcBo\ZSbMQVYh^%IhTS.!,/F5PB_bNnnjDrq"3E=f+6*;Vg"_4sQ%rp4G>!-UbP"^,Yd\F_hff2T:;!)+"%"Y,1s&14q[di3$a<,BIfMI:+^LF=VcQ1C`8,[$KF\ Pj!ad/LG_/'7B*prQC%h=]XuJ]6BdueKTB&5>s)b2\ 3]1@tb^YC*ZU6Bf_BhGoScNRPYZ#cuI+]:AEg]]I&4 8V$gqJ+bjCk*454g=4r;fgj`=O+h?\qub.dSd56Z&YcuNNs4iFKq#9a]C.$Nmt@)\,H-+`qpjc k^XMG"+R^@Jb]96`9EG.9dmO$d9ogo:`B-s*edMD2P1elsKtEGWLmJTs@gD7.&Dr'a5Z3,F j.$lG+r51dQk?BenpdA290D'Xk"S.1sf>'7_rP*5,VK%@I%UU46^R=$7il[CBo7P.WgWG3c*H4)r#bt]5+*A3K<#qZ9a[sIqDV:Wi0dH",8etp]2e=32a+n MZ63K.DHR14r7D;Ok3qlDS9B16W+7:CO3:1IiBn@r;SD,MY]'%$b/ n6_f,M>s^3KGH.p<3q;gJnQ6aXSJM8i6'D;grT7Tj8oJanbOoq"c=lSeF5&1=?QDW KJ<4Y=ttf>JC['cb.$$_[CC.sU_-&;:l:2D3O+6r,\1j4f< J!Z1PQ[Jo6I3q^b"X"W.F3*BL*?$98q'Rr[n#0Wh\@2m?%jLh!-Ie]X&:TGK!6>[k Rr^:`EUOCqItoKubl8C$In0^(_YbdG(r:\3[X`<3#RU95B8RueJ@LF:Oo377$<]W1 CDFD^r$1tY"8m'n`e=.08+<,Xr,:1`41$hL&0liZ!3D7nOTM1&;-\_Q8D""5Zq"T` =,?m:8j91J.;2e>JH&`I$NU+:P^/j0c*4j04M-#([<%ek"2?T&o\s2n>F^7MmdN,] n1\kK4EKp5@hS2-("sRmd]E\$C5#\DM)mi+Q38erYbq>!.W@:i>,P2 >LDl^N3t%g\]:e>2sG*c!K\#2o>(D#MVB6DOFAfGqmGeW01rVIkPqhO"[U@.nGb6, Dq6;N=W[KQ\c8:E&)LuDQ]cY8hrM3$.VW?,X4c`+Bf'Pd9hEp\gpC0PEdUGfHs'oP ;0%U>N=&#M:V0JiH:,ZE#DKVHU:DN-dRiTL*PoUFSE2iFWKZr\Yd6F."gkWgRKicK aW(E^_u$YTgUeH[]hV!F!:YK%l<0&1=hE5onNZ"tIHZbVYer_3J2$[Oq3U)fiC-I#@N$-_6om$SS**Jq=3.@JK$J.!l,OW2K5]XE8:`6a6b"b!oO8)%Ij@)JDd%N qh#&[pd6)'?O`N:L$dT)q]O/:BD3Jo%Klb25JH"N]<*W0p\s^>\^TA+*+krs[UdKh =_7jmgQKdhA7fFcAnGY66d7bMhjJiK^Z_eJ[]CmFSltA^B-#1$,:iKNWN*XUeOEC8 3e(O)1^&F*+7oLfHN#[CnLS;O-?0@eIhX\aS1o)_>Wbk7*@b-@s$rNC;r,TMB&u9A F(CkG9PqTCmmrFO[mmdYi`gs&R>GTX(J/6bh#uH$6)Z!/8!%O*e5fIbu49(E`?k[O\#U.=; eftn,'Dt@[l#a!kjo6.lhsnHBPli5iJ$t:8/dlWp!,h9r/*UUL[-8/Upu5"$+M^2' 5H)sJma>Ce&1%0^I;1/9J*;9?c)H!s;Jf#SK"hV7NWS&,TC:c(r)[>8\.`$O#6*Y: ?m5b^]()E\ir>SI>f,t`+B4`elf*D.-E/9.Y;G(=4Pd1lbnoudbX*KVr21,(-Y*-W RckJUQO>JtF\J,*P\C6)"l/X?"2aQJ"!:f (VgVH7]h,u=bAC*&@q?lEqQ>`S_rLTJ(GbAh0AKd/#i[L/,]eq#>RE./DpSpK<0EL AF:PZ%sRj4fcPo[r#g'n9h_HRWORN,@]tUG2j$G1"!(*BnGP0bWWg1&9Hi@mZeBT(Ha(@TW$F:JO&"7,fK()),n:-1M*aB"f"9.>? 5i^@o6/N=5s"LE]^o)Fm[h.a4r3(RDK+t!:IKGTQ<;K9gpVu"TAV6'cir:_;C@sg7 Bq"'?0CmjE)-'t6G(;e^45T$b$32=nn1R+9pWN[r]sN=u\CC45%DmQ:J%'W>pY0L\ f:/92hh#9/fa+u*p^`g%TU35XD[&;XA9[M5#'P[;_#H".aKBWD./lo4LX05G/m]p. >fJG1PHS60c^uN-T$%q#s$t5.,Lu(AB'i^,EhQi-r)_/bUeFN&b?GB)#fBiJ@BHt/ 1gMq$^*t;#/L.t[1U\esW[BU"$bRTPUYRo8$:/njn%Xn#30H7V#R&7Kkr@<`pDgm8pB67e1m1*.h(5*f8p >&(]d[GGVjZ<)ca+%on6Xs,m'5V9>^fFE`#N?!NeJOK_A*@YZ;:iQgOaW,hW3>+'] /+Ua5a$"L6rA.a?-Q;-Z#4f>n`;apM!F-E02oZ0mI751N>#G^%\@66WAL=6E9Ke.C5ECTZPJeQB\g;aW([ Z>u_IgaGJdf8Eo3^WQ\gJ&Zsj_12/!ru#2=D^E$R%phNR_11N1K`+?-IK9E-FPgPs :FRFiJ#cq5`OEeFk=boHr'qN!AS*(a)lTD:"/AI1!#AD6!@)!=Bj%rA/7AR1G8>^t "^qcedYNtgBS5b)+;FQF`53;:UlF\:R)Y=>f&ag(ace5PK4"`/P#fZ02e3r0_WH,= rDHJX)S]pKfJY.IiH,m.:i7LE:,N#p5CbGbFAJN\qKm?EefJ4+/@DCOYL(TWt,,;4Sb?*r*QnU J#7e"ISDiuS*^:Ps)Z?!BCj\gnou7YT_u&ApN^_<7qg2#W*Jco,:baB7gbTsNY9*d (\fBJW(D@DZ0_?',(G,mU55Q(4tG^9Q4quUOu=p;f8jIKBIeH!fWf,V69K]L)aB1L 3/j9^NL8L`%daRKJcG5G0@6198QEh5JF2u`=oZ'9T=UHB4-n8QgS%NS)hW_!+K:cY:;%E-l,.D-Dh)HM/"CDXG39XGnkFLN03X9\V &R*jA[FCHL[(_,C!:BfA3$3S?B,8#Ao?Q[pb3er.pN\iH4S+:u`T+=_ECSImWueX` C]UkHTJiqXFD_9U5]X=e);>pf5k)N)4FS2,EumMl&M\WrYju,*E@kN"ra."r?-*nd <6HYHKgWi=Oa?h"[/B\![C1]*Kc;-d&*6.&5FHYZB7CsIiOb_U#U5c_\+ C%7b&\=SYtXt6q(d#sq".6se*gRDpr0O'i"9bYp>,GL&eI`%&AHV6K*-0SPLFKZ&+ 2F;_UV&`qEX--e>s/M`)?-isnd29Q;Jm""$'m!QU3+u\S>fQmaqoMjOUp<1!GqZ;, McSWmn#1\FbB^+pr"*B0Ls:/_Dn6aZs%[n>3;[[CPWu9"f^Tfc*l0 &+Safk1V5#GsY2u>*s4:E0qIP!u(-Y.81$r87@.tVB?PCBH#2J0X2!ZXFdYOn*H7; qhkDKpttW!23ShE^n:&#J?R6"^l=M.jUQcaU$;'(0?XBm$9B>@!I+H3?9gUXM:c.u <1/VtLW]d4#R.`r&!Y(4)S_]sMn;"Ps(a/jOH]^DJ^l2CQNblBSFE^SAQ2i0V$Od< ZA'!$1DR^?=Ml];,6#4:+Lk`RN@DBg/?;E0VaAa0\3&X+NF3.6Jp[D8!5;*ns&CKk fE-U',s#J>NcukRPQ.L&pF6^TJ'K)7fu-?&C]TLm'Y;1Oq(`$NM[T;hjeqo`rWDWj qbH\qn1V(nQOkXSqNZNg5H-Ki^F[@=_Fsu1ROD0J3XB@!G^UQuaO&'88c`2s20\XZ !WH1NI\E47!0*6$IqXZs"O#U,>#it&9&$)Gks.,6(I,sYsqLPrU7Z\T;'q$a)1a;[.?r-2XpaefW?6* 2h"NWr^4C!2uO>!!WQZ?q#@X;_#b__+P)$>>XO>8S3rAZVeu(fJpOkR$_sOW? Ct*,e&3!5B*@6.T0D:DB:_F*6X+YCjK%Igoe: DdE*S=sGu"/jO)p@Pd.2gAaa'em2aZp`D_VG)&t2M1pK6+huHnJ9p-:un0YQf/#1iXYLhAi5q`?,K,m=P$UugD.Kf,>J4'1[ lVfK&.Y^J8Q%OH(O9e*45Suck7/N&X[(]/QLOVVg55Bh[KtUf9n.,4sp^Zdcd$XUD `d(`$BS4jCc07A*%Klb*`1oDWd;A.38]9sekk%m)!ZL'^[!%Y?HBGj\PJ$fg^@Y1. EiiY.@7TZ&[hcPoN#9F!LPM!?@5[Ia::LA^bENFnIu0[b Lf&Pd#e8fR[[.OOQO5;P(E"o>5ik%MKn8W]dcKi\l(#s-EdC$o=6&"M/:deN,bbG& jM/r&rcc4$28(^We%p,sBW]*2!QY"7^rq@slC%a/k!@c/%tMGC`:8Z\>u+,5qiHhjjr/@/^g4!,`Q;liM=TK#cp0mju7_ 7JmB*V>5\4jA..sH^eB)eX'[XD^jn1s.u]DR/c8['#agcs%3s,_FOjh'S+gU7<>Si ]CDLA"PrU_7"abh72g`8s2>loaMiX*KeBH)+5X()+4k)k)LB\/F/WqKgrNZ@s.$0= 6.EKaCKM<.XUElbH/0E*rB#V)h4WVADVp"apf';'(-HR`SNILD*V+sdT%g@G6f'6" J9MSu_#N01=>@h65SP$k'mI3LFh>%a%la@0DQ9[4%/H3YK=Dk-11[M \+ND2m]VI/nDUR.SR9oo^M=AZ@6+Q"pj_NeJ#&V6@6OE8AU?S7\,K*:mLQRJpL6hB \Z$*kd_D,Z5E*hYMDI#!8HK+7s3ZugEC)nJ^Of75i*RdVV%EMP,SY%0Rhi"$.!al# HK-mb;LnT':iq0F-tqh#h07'jAf=-7*CS.=gj::bfbP+e8k1i9]a3Y_g1a1HQuCM3 V1.4+CA`4nU3HQjIg`d%&ug>JedQ6onDBW8d-@1b"TmE?W/^;#\0!Ii6.YDc6FS/raXe;L1A<=A/j `PCV]am"&8"TeXRDZT.s i+X;(78;Whr$1:N.7Pn6$K?P#itA\HL!^Bms)([5TjVD,1]mSFbMof6i;Zs4%"`ua 1;s2/M2N1lW;Zn8s0Z>#;Rpm#?T_;jSEe]ZN9dsMXnTi+C]3sLg?)8X7)'nGadQ5V(m1Jf3.PH+I/UF6D I%tnuf&jVEQl\YorZ]ei+=SS:lU$P1d;d.I>eA97ceql,.Wod'gEq[ Wu*/P=To9!NrPbMA.8S$.V=Aq!*#p(W7%uO#j*?D7re'0`ihG0\b"^;C,jM/OoRrb4BAE%7R@k,o K@kE=&E:IR!^oIl$!9HT3nVE$:miX5o=mj<2.O"cViG-,(QY;g%qiV6cgX8bKYTNpQ*jFKJ@j=Y^fiLVjuqJjHJ(;+-kJO-2(2orA#4cJV]Q>Ulh.&[J(:!f+IVP iKL1U'.<^?PJG!J_;Jbk&CJXFH;?X5!'COT3!^S[k4c!!\s?H8_!kdib&MIhW)qOE gWFg1\ogpBOq0S`J4=47lZ)$9iK!qOE[%P)HiZqK$Y[Osp"ubEi@#"TMEpdA r5s?Bj8l!+s37aqRbuc_?_O/INGiXhIWj5e_:q.K.@Xbs/9BR43,S8gB&N[l"c_`b 1F7hT9.&kf^iN$L!9oR`oQqB?Fo\4"!$D!nq)Wl<4+Do_4Qo^/n@o5c7P:1'+2R *[EBZW)h3&C[Y.Z5Gdds2BCSAp>0@t+5"X1N1#Y0eGR'=287TZ#AQhgFnU4(MJ:@n Buri^VOO]FT%&uZ?1(*Sd>YS_N`WWG3_oE9GeY-E]cl]FPB6m"=*^>e6!^EDBi*Ok Y@U/L1<41#imuBD)J9-;`u.kgs%`eVN!7]4s$=I#DVq/uYP^:sHa?dKh5g1*(F^Y+ NjL`oG=+Y4+YC=SDbJe,;dq> -^Q)uo6$ikK9&AqEbHlZ!Y-I*DPH82BQb*H,Q=I#\:B![F#IorL5M7sV7S)8](7"P ?V/@:O?mjGZ2etks&RbU+<:I]s!J0S'e3mM(GL`'qDjWZ?b_C&Wpf`/_#/Dn?cT8! "7"RiL;7O+b9brB!MA"5,$&rFA_]O[Ya=tB07NiVFCtUi(4s;TiT*5.L]Hote=nOu Xu$B"cB6>lG7u18<`Gq.Q>2(a=qQ=*#igX6MJqE=GBX&GcET>p_"p"hF.MtGGQ'u! ru_%)&j^tjU"7S6M]X+7r)B9i$Xj&O+,kWX_#iPI8dGIt92^-lruq/]o%uj86N$R* KIu-:'EB3^,F/=3cH2cuTn!c@Wrs\!&(0_3,$-Ea(=4M7n:g24Khi:2?i_?\$b)ju)q";i i45Ii2Lt_?,]!SVIne]#$UF63o'Yt(h*9Eds3Mebh/N;][p/k8_ 3&1#[:tt`\`^^*j@kLl6opu.]J6^F='REj_LD_?/:(VY"G^_+`=Xiuqi#aL8,P85s 3HGL\kOJpM:Hh0a!<:G,VVm;P_:X%[aG";Y?i8rIe60n:-_Q$sN:A_#+-J:kRsYb^Wmt_=9bT*PlJ.ngs$T>rY3R S"s'qq36j6=,cs>6W,U5.Ne42k^?),l>O#_4L85JACSB"_0(95h!:HelfFLG<%kQB !IAP:Nb*D"/@,r:#<]$pp^an8K^lR--S^%N'Q3c[$8MR-hr]'rc2m86r.g+X!)E;f WkaJR"'ZO#Xg>)U\604'ggG>EZFb\fqZ:lF@kW'Hm>2:?4:.K<&"*LuInEnX9h+3Y A^E#Pe>U]`0U.G<^SQgR-Q*N!''gV+.pt@bWGj Xd8#`>>e*`>Z4[6;cYm3s)40H),l:>"V\/+1Qn2J'NOiNfKF-V.OEifkR<& %1UL/::_tHs+^R+!h;4L`d]OpS-&O_(4c4A/\o>TQSAH1Pog2.NrMekIffVB._$C! 2+BJYKZbYg#ds(DWqrl1c=e.mWq5`HV55EoVWM+bp5QJ!rNcC/:\]aWKS7nHC*8,C-ng:OMA)PQLD.:@TsI ZN/oJ(5@=Ld1>kfr$O&RmYIAPs.'pUE]o$SpfnZuIt:K#!r.BR(NApe=b%ipl,gj'=%VFs$->;QQuk9d4V(VPXp;U*raW-nun;LJ#8fc<3M8c<#47b b'OthG!@8F^<#e/BR7l]4UEn$kGI,Ic@-@h:5[FR--9C]EY(e["T0W5$D8+0W.a"G rp*0Oba,.%=tp9%K]<$9\LW:3VnA-"hWUe\oL(HVJGYgm-VhUD8&=D>n;277Qf!S= ?qjPb6.;&fi;`G=Wb()-%8,A)X_!XG1ejqS1'?\?qZ-Y!C)p]3Ob)Wu5VB:XDM;bR `4KiGhLIq:^G5q2n$6YJ%E/:A^86HGKfu$k-s!g?3cOTTqd,M'2[\_hBTAp^lqU;l^K!]o16b1#EU+I0MYqi/O8'qfONe)";qRqr;E9&9Tl6pKF3-+.,@cfFlr[NXj$>)a)/%Gm0G4=TJH,8!5#P8LbKSPh =ks5\)dh<6?W_&L>0 rshqU0/Pcu0gCu#4q4V(8F)/><@1:p1aK]Y4&>13YGF:%<8`7tO^^8r0`2O_oi)b* 1Y(P[`.+d[^jh\UAKR6Ms4o4+Q[o&u$NT;2aa"5N?28.2=4(8&E.]V]`4d$aWCBS2^]gmj!/i6= M+S1I``greR\c,.3qCja_peqjHZ@s %4\q&g_ZEM.Q716bJjK:'7t_1!Ta9Yr$O&R$ie&u;$dN[p[6<1(Fu$]_'&Nnr!3!5 We-.o_'LSJ!l,(@_4A^1H"Hqoh!DRfnM4Y;4DOL:B)F?!(APX1C#:&`DGk4-)(h@aBohGUZ2*Lq0m(0\!m&g7:81+pYRA8haam-L9EnCEYUKR-:.;Hi;XNG?SZ^? 4EM8mE@_tlQ-:5*7P1WIS]>B+^EW<2? CId0d-Q1PG*_(32,m,+G?HiG7TJj#Xe;g$IZcMQfjCOKS4j#=.[fS)\p^^L-^q\dA (q77L=k.:E+p$qNHJQcoMPgYTiCe%]UBK=qOTePA[6?$^IcaO(D9e%bdt9@9pQFUP MA#n):ObSSm9+8FP8L>j6j5TG.lt!`.C;W5Fm+5n3\hb&Q*1Gf;h4]%"cs>3j1.5N Cb6OB5=:/"T;?PE5>+Ge"j#TCSbui\!/Omqh#b;E5FDlTLAqb6=8X`L)ZEh=ItAD/ f67!D>CG:YIi&-#$qqZ+hn_P8)qA*tfj+J<"'f6S)`n)nmejhP5F^=!K:_3Hr4DJ` !;MVqdhCAX.Q;obR*jFJiEBi4s#l'J;!@%Lji:#_k#fmMX $g/$&Ts0bF45Lb[!/!`B;CqL-[]ojstlN.%3Ld^B/13k2a4UEIh)G;7QT*?+A%%TSI NplN7G'I]am6%Eair=#5>2]G!bAtgV*+EV"ZZbO-H^#WjE,2GHE[Rs da6hoLu+8]F`Zn=[%!<$"n9IhE@U62#LPa)^RlA6#T>(U!rSrE'js;r!oRhprh)80 ir9)T$`e',=T%"8%313pOUm1B+,3Q3L/+J7D]ocQ&MlYpf0@C/53b$ikVdtkW;'0X s%p7PC>-D/DI/f6hJ&9?lh>n7SR(!Z=*(rVoS06-37Q0s)NQ4>Vaie/l; 32g>U?9^`TS#/,rk#m[BN*F-K5+GL?DVb0QXJ ,;'ct,094*JH)83T2t_Eq2$ZR1O&@u1.VX=qI>'Bu0A U`cc:j<-SN`3/#!s"X>??3'^f"+8T8?Q"MK!6\pS761Ij`IB95c%7]0pfCSnJ&6[o pcG#8V`W*ZJA9oni1FX-&b(#8her#/2e'HHK^SjJs%?%7_#H0B0CZ_Ks"47jr/\I# r$VK1-ub@u%ab[$ao;F="Q\QlM,NX"J$`oF]PLNrHR5)j#oPmambNleKtl`ua9@Cq =")V"N*;$RQYG9FbeY;h04Y*1!BgF4X@$%W$"q%R"ZkcT+$rjJRRS^`OTr%:)(,T",+qo)aHRO>;3Jbl&rXs!_LCVsor^OXm'`[XLj(L%lb-s.>_n d,.k#^WC^!VV/_D>F]/'QT\1"n&M<]&$\9`UcfAq+,6XVOJR2X9oo+)7kD^_1-@n] :H6NNd1@F#n7ZjVQ^6fGiq\00W.a"p@26ho8`9WhfM.2%dIFT*q2=11F4%LUs(!o'S$[?LU?Erc`CR=KVA5C+X[OWS_HVUpBr)"ithJ>\A$'LCeE ls0m*5JWm&nd]cOO5I@\DS\\T5e-e(nDE7:*X.V"PAq0j_#L16.H(6:D#@T"lqb`= mh6MpCXt]72i7CW4JVu?ntf:Pk+uYh3c4c6\.&<8Obj%`Ze+BhRMn';VNf_F913o; @Z<7V5!>\j;q.\#.j#C9H2``/p<]=AAHM?W?\eFFcl`^H)^>9* kJ&,$5@>SN*t.#!U%!hQ2R*.?rrDk2\URX8$*GoIis3sVE[k+51*nV0/i:#Yi)B<]4qucuhcnX-+)GGTV`6:0H:bu4\ons=& 1K'#_J->oL\U%Vp%ciV'Z:0CI^QSqNma K5gbW>5uS?0lU&f%"F@+_f;UWn^]/K`!>Q=$]1$P--f@\E`BlcC0A83UkkuL<2a?p 0tQ>"K'dN-p;3(#V#X#Z!s_]`#EdJ>U1$=')RF"?d]c2YfVQ&!U*X2heeP?7X=c2Y I:bG-s&q+",Fl7L)EA6H4:LF8k)S4"cb5BA^'S0E'XRa2_Z#>3NSEq;d$8/0=uuO5 Gj[r_i]H\SQ!b6s:,r2LMV:Ao*jt[!I.qj8_/IKP^T.nEORN43\GuS.(]R9Pr_LGR 625E\'8-6\]^;<7EaP:20KeBEW:`H8j[!R[LEOQgAUY1up''Hg3INOV?P5Q*'nL8;I7Q0ij"MH(*-.g#59?H8"Gk>6! GniAe,+^n4NZr\/9qFnqJH&-&@>IGjkcL%tFVA(=PMW\TrllD+Y'"L6P$d5rX`Ze* H\pD_Js_%=h@.4bSdVmKD$S;1ZV^N#,bdB="K?-uec::"d+dQ"5I;5KfXDhB#=-6G C;hI#Egg/p:Tmu7[B-\rel_=Or#Tqe,H)7g%:Jr^'9OC*hFD]!=u@c7;/9H#-q:k, -iD+78JV"-heeZc$^Lg##[oO%UbscNL!,F@77uSe]5rVX^;i[]s'sFn2J]go8Z0me Vn`Eg6Df;5+6"&SU1Sn>YQ(ENpoN*Ne=W^QO6,t7o$*5a_bZ$#>Q+,>rRtoErZ<"* 2d'(c[erU)>]iY49hJl+H<@R,Z7[H3`Mi.P=b[T1-6nCK_csPp?'&s^'.&F.OTX:P ?)'YN".5?"@@ N3bX&[!G,*r3-!u#aFTdT)LPnm;Zt=PITslae6e3L5pec^:;Bj7AN:8tooE;R.&03t\j7 _gZJY4XZ'jccJqZjiGiD0KbpQG@h1MabYQJ;%4gY91?$PN@Y(A5`(4rVP]Vm.%gnV Pn9L:4JKM^!<7's%6ddgTiLEW20rH.JR3,bJEfk9`Y:nK-(r6"!oY)7"O61I:fA9C !R+^T__pMU3e^^*kcWXWWj&cZ/=c8a7Y#[]PSsYo&7dood]PpC-?Bn&TU]OnG#Ekf @%+0A7Xd*7i1H@Obom3*OHY?N?/WI'V[6`#?P`hHrYOf$M[^Zhb--NbMYUQSGQ&C_ ^@:#g$?3l>5g)$X]Iue@Mj:45+lq_t=9',B!/!445bZT+aQS?R?OY.+id]1%d!t#h X$qbi*A:d;c;t&H;--"F'nY@.f<4,rWeIu58Y0,N:rsgl-rhJj[mb"#+pp4qqi?Fe kPV;Pfu.%SaEcdhEQm4@FDQli]tnGfV_nMT[jWhT[.]-fSo$so(;11P^WZ!#V0@Lp S9'Gcrl;,>,Ci"*i.s16-CB=n)XRT`6'Hf%A..R`g$=_gn:fVYKj34mnGg09+nppW HHmDA&PRT[?31N09tp@kErT4[cJMUu_#IbN\,VS4N;:6*D_JVuaM&`*_8#Y/8;9VO ikJ!:`?W=l:mCg<$UPT%#9q%fRJCQMbpt9')K'*nbq+U;7kkBC7ZlS;7,sPInm1V! a3^)IZIR^f70#O86ASsi-%Fo@4E2nl6*-8ET8BI@6t;&QdKqT2blsRfpI7(E,=19'JM^>YC]"[P(ICg($$'uS1aU*f]%(WZ!&<9!4G8m %i>QBca"IdR<9)=,9pSRiZ8U$N5ihek&K96%"HV4V0\/!#=>R*ci>^$?4pGGB"!;t &.K^B\(P&BquJK5Pk]nsVD\t:X3c-6ecQtXNaIQ;"8j<,!Y5H_ODipQQd.J[B<%49 jmFMHhL"Yd[:UKTs%1!*PP*udF*c8t=0%C`8WB`FNNKL>2VMVEb_gSOIPkMcm#q$p^\tWn=Ok0o U%l8Y[2e1CaRO=F,daCTc#fn_%Q,\2m?=U@ajZ?%s+P.(ceZ$*2$F@sILL_!G@iTj .g[X\d3%;=OT5p?0`U+!q-U;$K)Rk3/(KIU XPNYoHH=#WVX@Y&9*3h3hV.Y5J;Irk!oI!W4b6kSX<0 nXSrj%^poS`34j]!;+NkGsnJ7V#UYu$T'uis$@_2oAA6s#;plrSH"?DmdMl%AV#`` !Pj2,#+Ptu!WG)?$=nP;)F$PP+S\[P;1#k!h$ke5n/o=$ Lu!7T=TH/$1iNHi&+TZ;G8U+)'JosF]T#2*^-4u(gk7:c80RPr#QDK%c/2')Jc@\5 !9tW3LG"5!hhu,3b8/Jk0]i9ennlJJ/Gra4L#n(NC[s0A00`2A#*!Urmu (CVpXq&moT.)bsYC@RBf4XAqeTG.p1d6jT$i1$<2/`*0ZWlu5$Y]AD4!@:b,],K4E Xdjb\9=,`I?Fc3Bj3=X&]TJDniu_ 5>S8HVpkbI8%_G;*C.Z`=O"?25JsQ'rf?juJ>7#[S1_Y[3nN&%CRfQe%5_W=TY\VI ;/uhD#RG*omuJDabgPe(63Fc=b.eQ_"=!kkn-]Mq,?O fR5:j65sBdVZ?VG&W;ahJWBp5i>hn+!<*)u0-b+I@cjk(kASnOW:L*nJ84,8C@?dq o2`2:URQOIgA'';7aup"#7TisRSY,VNA\;`'\R:nm*t6Sj>g0/Q#gAnX0U$'Ld?hX :*YLR_Kts/HOaS7LU,l+knlI0-LHH\+-I=_SH/[9:)gk.`P?Z0$L`rLrN#G-We!)t >qaVl!<94bR2o'Z3aQ@i]ZKL0[(!foC3brpn15$#s2I!c&G`g3jtutse5A)\hAXj+ &lQK*[,$d7IiJjc2uaEj="o4_80jhGA3WkCa<12Ls%6Sf6rW2]*/Z<2;]/6i>_eo8 B7tMjCff*V'bn:&5=ah)V=oYYIDgU=%0Cu0-i[1Gbl96)5JSAFT92A_7!:&B"r9I[ Juo%V:B5S=@K&@[!hqr%[oqp!rYK7IGPjsBT0)g8(eI(1TVGNP:n7iM!7uT0ruq/= !WT,A(]T'aTE[1moA?A[CLFKnW?thWUQsY#1jO6r$G/d@'.X.N]F6j5L'"@r&!ciiZ0$76d$C&s?V5,V>2]Yi.)a841 P\%#8-B:Ctp-QRsVN4%j+;3EFFRO632An+4Pf>:I'9F=2O/kN9gqIjgn-N`8PLQm2 m5SSI>QbL',&e/SGg%00Y$Qn/'&.ldi]q0UrprNRQsW"`!G#:Bg6;L/PWO C_-Y!6[V'b"R7eMRTXCM4M>Vi!7cSM"55[o*>&7G,lfk"4q$^(&;:!i!GIr6[0h.< :9FflK>:j05&ece-/_"8$'5g,$(>kODMO`nK@L!bs#.K%O5#"2*k;QEK(K:$eq:a> JH';L/B%RN1VeK2T\dX@hBjdZWtnJG$V-)>9@`G8ota/k`d@+>X^V(4A`m"Wq+'38 ?J9Y%3i,k!JWA]Y,ML]=DP_e-.=3\MC+Z`>;q?.(4E_c0FW*/Y*&_aIhRt#^FVrPN ,U8>@n\u^Ha6+K$]#jDIj`R:V&A:Mln<8H['A4-!Dtk`,^O&X($%srdc:;a;jdTP8Q!WHkr!<+8_b^9a@)HN]+Ng`N@s,!0Tap?L=BCP@*s#1L(1btLnba&rDCFZsL _JVu"'S*]u+uKu7ro5kFC]QDm9K*>ej0Cnh4r-?R #Mh@D!'0j^@/`+aCWVtDR49:T[aHNriU*dQPo!Jmg)F6]U#$U\%k.MB)ucU2?sbBJ jF9Dol^A4ZV*u$^n%gQ+aBud0p-h?hlKHPUshl[N4LRXUh WfNm/08!opLWnS-O.V+:+,5?dO$^k[,m/LGDQnXCG!#18;Lg&kr0KTG5b>,UQ]&Rj51T,^Ei4F6[Ntk]iamIRf.Z/m>$L^++dF? OBR,>[XBg84VHBgMJXE.2NKQ8I@92Jf_U\JIEYE6bV=G5%3?_BF'4r-8/=RUc/n$U (e^R1=34s];0+rlXFHHe^D"qeT3=9u,FZ:)9n7coVrBF1!eSL#1@;.Q"]#d/+$C71 Zd0SlY'"=mn/pT'6>bIgp$OTIf?(.!oX5JMl2h*NrsH(ILqQCpJj=!V.(^4'="o4p @Yc]V,tr)V@5^l*Q\,IW,7rB-c1'Z4791W_eBi!Y[SKp[`;C1=KAZrS!J!Bq@Y"4a ;)*t._#bbY#P+WaTqj.Xr(dl>$G_/\&S*0js3ZRNe39UH-)b=+LCQ1OBA$`;(H^[g JD"4_:':ML6K^UHZ5I*X@.IP\$'3t3c!CDMitpT#0&J"ZS?(e4d*0OqCX)ikh=6Pp NVC"ui;Y1jc3MPWLTIiTPhoHOVU65dV%9cX`XTmu9ICQ--If,M2/gZacGHH^,N^0$ 3"MQ>#p"cQ@m@=2ir9,Fi4aGH?SK.7lWPOY42=MF'(g\^i!rC&4C/8uRj"u0J_0^j _)DObr7s$3\mOWB]ZLGd]uk5FP]Cg#a_s<7.Y=p'gRpU?0Vlfa!2Tm@Y(MThAq^8CWqPM'9=: lhh`;;LtA'OOGsbIVB_(%(00>S6VH&rqFZ"\=ScWO5]Q1[!3Lb!+5gF8JEB2pW*3P *^Nm.1'PPnIh;YY61AXib#8"`UE$*H(:Ja@ X`&d9LTgd9@`SWChB`@J/A1uZB?_OtSGu^Q$A/;85[l,eg'!+QaX2'7noG0P\HVLh NeAO%+t#$(&C_j]XMiY[`/J#Vbe+IS]a>cC#ou,6*B=BG3t7fM@@4:^:tWN)e@-IF Ysh/u_2o&kZF`BIK`FT_+gYt?[pdgnI`K4jN&(_TE6.<-jpk^R;1"(ZiQK!UD8?t^ Ij(Dn%\CD"bsKL2p4%hBIu[W_]]18NoS>;N`ZMsYc2AKoq)?hfU]A01ck-8b*CtHt )ED$pd$"'-*:Q2c*YIdl$iEG`EfXjY+A@,!P4gR\m=);,^.bG@!WV$\:BUX#q8`UiK]DR-_#bbG 7sgt@1[ouLM%fs\Jn*cdJRE/VdCr6A!;J5D2m6'is*#;cX/+lp.UkRIohQ&__pdS% 4/r=b^]K$rpja4H$c)t,BO5=/"8kHH%\T$&oHju*i'1[.\S@^6K1GHL"a99Rd,H^I 5sQDE5Yo9("]848o-Gb4BE/KN,GfRH%I(P+tnCP.m:V _)ICJ\,!]jE]Th(JC%_;n,0=I\]rGVRU0Mif\c%`h<^EUifi3WDf6e1=2.K^H(qS$ 9?M^JJElQR<]audd]gr/g#R86q@E';!cgt`J2Z*q b!pH*Ja1&NBqJ!3s3hnKM&iDM&KnGW91/WLnh$IYeZ@,e[TI3_G)P+3ArpF6ZI&$1 ,u,C3L>^$^N-a!%g:nOH/mt>p?G%KgpSNR55QLh,62*JD's*4.5Fn;9%`i+0s#C"m $pb!O:s4lT`HP0]$_J)6DIV`]UM"KXQYtpNM#YJS1[PNQr)IZactn3]DZ+8*pc2jY A,>'&gnWo:fl;:d;e19(A5%31F\#M]'Ku`9>mIZdo8'ZpE6uNt"D"(p(Xfi%)/9lo NcQb@fTl)H$JJPUNU,A[/UfYJ+5S_bdR9V-S#+\1q,`UPPXl7i*p.A]]``2k.G2@'HfQ!Q6&hAeV.8] !T=94mNc%oG'0Oc]gN2m6b>K=cH:XE RTcJ[JEeu@HL2OJ].C`t&ZReG.>?FT0u#a,/,i`iFf7S/"1O,c0JT+-iXCY@pqTt) Q=F`d+93?^OTuQgGrg0+qfWST*TCEU46Du-$Ws/-^r]a/O 6NKX@!3gu?"hu0_<0/X8roY["+9a0Pk7kl='uoeOA,(J"gKJ.JT![s:2fpX>]FLF@ #TH!oNLb_r?:QXKs5C/":Gd;?*Bt/F+*)Z.rk%M,X;t@)DF!AKZP2>Jck`Tp_ma'H epbL(4lc0An;"0"kW&(2?ka/u)`e5/1qH;W+o$g,!;I(+Y^fO.BJ'!K3dW$?6jpqA Ma&M(HqmfD'MiNM;B5\93]N.iWIC:jq/?1+@_"-b]-!Jj0@]P8eD_'l8jJF?T_+"k F:WB&LQkmQ#e#&8XH,au%sb#WJZ2H@=`7lhN81JDiS1TY:XXO4s'*V;NHbO"s$8bo /"X\rof46&[92#Q?B<&G^nWMr"m^PkI70f/C$bQemSZ s&jj$%M"G*&]dab7'"*ks*qg;7-5np%;Z9.Dm7s(\a;2%./o"#*r*LeC.G>06(Pg# "\/Fl[2/O%j'/o`DqY?'A[\eKgV>6WG(inLpkoA8'ZX&U1WB=U44\<(0Q00mSkra-lPCJ*^T+LTP6pKMb?g+]f_Y`4J&JB!K)bi%\NMUO:_0C(W:GRBHQ-:eiRQe2Y7(P` 8oFGtPPmdfJVTulRAT2Q1?W(Nm\>$:VZ.3Aq("iIZ:p<-a0UH3-ZM/-@K?C]c]T<0 &H;e1'lT%k(]+&Ba^m-dKb'Gco\>RRHVKI+.%-='oRfs[BUkhA!L]L*Fco;+M.BFX Jq"9i58XD9"?.GGHs.Nc/,7/HCbaGH=BZWQ5TCZ^r9j&%(4uMRc3OFM8ONpDO,Eru Ee3'ho,k#4:J?hgUI0tCs,H)3'9*R_56ql&GQ([C-rhaH:lU>@r,9s0^Z%Id!Nq;V "54b`a8C.\+nZ?EWT_hsXVpZDb!aHs,[*[(U%)Olc=L?7'B&=_p;I+.]D1j#JBS-# [K'Mgh&8_7CK_,k/LKCkZ/+N5"lMea`IEYtL\[!`s*S15!B.R0)Vfrd:WZ]DeF9rsuu\RXt0\JH[G' $^4H(+"Y3i`.NTT-jd`)-ph#W*``pl59!qC&`*_ADYl_PkG#5^&G1ag0-3P2J,&AU kesWC@%0B"-lP5\N?&03*q=QcR&pqt+)nj.!l,D.fKBfGn'aAlW,3+Gmo!?83W6aC Gjq5Y(4o>-,M/)->jVR_UO1\hE/Y0Qa=T\T[7P9.I>t$>1 PBMCMgA>$XG8;uAs"_LcQRM1u8Do!_]jT%X_.c,e=<9l-h@E3NJ7tRAp,E=\!:^!h A-X8c!T4@M:INdS]MoE5je9cj4hof'jWpSp-=e+ks'E5)?9EQZR_4n\]pDEB%S$DQ Y([O%_GR&>h8DB/UL9;fi1eSXD#.GY%(o4P[!%!"]Qa=EdYZh5?gm'aCucQoAQl:2h@D2 :W\Le#A(r<1&8-gBGke(&AULfau:W`0/\o'M=S,FP>`_)/Q$&gJPT\^^iJU&&cX)B a\hha"X*e[rS@9VCnR"0WMOnJj8a;^MZ4!6$NU+00_9//9[MTYb9[u)?+BstIu^%gVrZO] 6$>+E:Wp;,rrX5f(?Rh.Ijm#II,R<]:9:WNJ<&AJ\G2+GIK9BSpnLdE:B(+mq9ouS 5j8S=G8B,'"2?W!5D&oaq&99\NF.g&<35aGd=HL?ap_69F:c*-88aPSm`Y!N^CC]d ,=[1e(2.r#WL3^a`Le?Y313j0K\@`GREgZ5ie5+Q-t-+h<*P$$1pM9]Y&u+tpJ<_6,@3S?h/N8jJ&^?^ 3R2bOn%>X\gjQV.BRrIT/801,`@SF$8IR1_AnK.-AnGXeZ6Y>Zj50['S'4SRPF>+@ -<$+s8u:[RQtLhcX0'(]\MI1We5r9sX]DK6s.6XLqn?hHo#J1%Hc#J.?IQL5gJ,#o 6`Wtt*uP*^7h,X!/gGm2""=ER,2th#:Bpp5k!4CbT320g#T:IDGj\5?l>L+cIoYk8 -2[c@s5:Z=oHG7P:K<`.4Ru$hlj:P,4n;0B'8->,)X\_tR^Q.`[S*'T#PcWe'CgR@ (8V3a0F1BMquaDHXjB57p+)cWO7$!IqNEP'ZY3S[ [a=/4CF/n8MKZ*Pp)SB\WoS,O`diJJ&GR$"s-"5kXmQcNE>p.TS4?$3"RG.n:bPQSD\es0n6# X8&Me.3$%a*I^PH?h/-91J+N&M4O4?h@=?`OEDS$LC_)=cTLGG*V#a@'n*^.0QH)6 E?ZGanEf%Um=KN:H8hC@f'L$=A$QW,/XO7W62k;F1'me"H6+YncZ<93 1Rdtl\7%G_%Jo>6#2(T3W9dmg4K2FE1/BL3:c#1P-NYcH&dm`7#A.cHANZ8jW/8@g >\u^FJ)',N"W"O[]s87Y$c[R"r5D/tfs",WJM!">VrZhCIs,dAqN](AKs%/_$O<_]4_ZCDL 6a,NAbQTE]:U0urg$@80iENPV[?fo/68m]j#QJ`:r;9[m-.tQ-"dfIlZIq`KR35PN4UhJQ k.[+9K)b0[J6cT>YU%;i._tkN>i$o$)O&c)"nf"@g=JL"p-g3QNW]1PIC/YfTs*YO HdUoB2sp6dmk_]<2SqV$in-rs,\+:Q\0I55P42 @6tFUh]I#ob)HS$d]"U=)?VoKMT3INQN']hl^-@+miGJct%=n/J&Z# g:'oiA@m$I/;WI:9OB$T^k8tF"r]r2$fJdP0Ank7;lD4/TE3qZbIJEI_2:JCillW+gj9+UjdDA$i?joN\I7jd r(EffK7L^YFPjQWgTtZoe@F\l7Amp@q_kOfn0-"[2W42F&'j)t@TYhdU(l4qk9[gf $@6%np)+S:(`%)HZZGH?;o&EV6^jChC66n\OSS.&6QM,n0DUS+,IJVBPd,u552 r!P?6$FPHnZibC!jkr@'HZTA+I#su2!:C5:Jr@,O&82Rj.)>F3rP8G"]ng.rYZerC $GGqPqm>5,R.:esNoEK>kc;QsgHpC=St@/m]'J3Q!ZlsJg<]2>^4LBsTT?jju(kUunaUm>^mlb!)p>74j:cOQW_ +?/'cnUEhM`W+*?J%ToDJk\f\=8#4j7@\idnlP?'n5o/[p[LI$0@$(=+PN>Ds4lQt 46=NX%rkg!:%'XmE%5tQ,@Dq5#G2T/O`P28oo^'!*ZL^8Kd [^`i-S8r[t\TP\bV#7-RfhKN'OYYPOq5'*3HfKl`Wms2\j="k`Jc]VjSaP\doiA1QD J:7s[r+EtlZ@L,K`@g2FoUhrDC/P$rnW?>1RWlmV\k,cn:/UaXI4Ruho>oGPbg[9% CUi?GplDIJ8Iq@b*s\sZ2.-2T?+J:1FC2OsSS"qN=74P0DW?5ds's*C@n1&^'`=T7 N.V(2hU@;\:UiI<[Un'rC"&$WgSsAD.fSlB3ro1aQQEpL_EAIDjjMCRrgRN$RM_k; X]cSAGO2qcS3"H87/2<4RVfZos54qX5AaF[@8sW[W8Fgnh6q%PYf(Td!WO`A=qZMm YTERUM\1R:EK`Gr3*q0I:N/W9JB-@4!ZFGDYK%`/>l,t][VaoFm+Z[HgU->"Z0FN[ iD/m!7R-ZA?22^:Me>>)Y4=AEobm#\:!h=2d,K3Cb*?H/;r$e`gs1]=NJ"H8gjDoS rgpE=SM7encoYoB>5p^^oW`nLA^OiBkkfma,LEl\ :#R>1PY>FT-c,g7YO5-2Y&,gQo8=\%0ufN`"!?GPG?+d;`Z5$GkfX+]CMk&5[>e*nWZm9*K!EFFo";%)j$qSBB9(]d84+BBM78&,9>q%me$'P^5JFVX`KO[W&5 WXQefFVP@uZsJ$tlVLGrYQ;VOU(H=6@Go>A&;54+-HY8^iI@L<,PJSEiD7T*[oMr_44KG0TCG-K-;9U%OoMBnX)sa=j8WE[Vu$?o#l(Y3 I#%`UdC)Iu^Z3(LPE1n,[kW@nWAIVrpogt'[#IkCmY B+BB;LkDTd`5`nX0JABj.#PA[NY7XG>B9$S?^FM\*VbRBS-loP7a24 moVCg=LTMS5'@u.EZ/IM5pA/FmH8+RoCa!BYC$^hrGlB,8)K=npNs j0)m<(\7Ci=%+!VP,(=*+SZ38;]kf\htKfUM#b3HO_;f]NslIN=?qV,>Ip\IL8K=/ L56HC%55L=Nf^!t<21DCmG3%>S%\>spuJ]%mRD+!=iiP8]B:BtJ++P5J+#,opn'U- IrLk[r*]Vm*`W&-,"'r>4FCPg^LGbVrSl)Oo@L#=&**](>9=F$.)"Th\a@t[k1DD, gH#RkfsIj5G6%*is0b9RmAdR4SM[L>iOu+BA%N5D)o<%4%J8WLBp77>rk!==(2hBn Hc)FY!9'3rH73>3gjCj-F9:tsUHQ]%3dnG)?%[G]loU>=bRDX67d+/S"kD- ^/LBT@ir\M+([u!7ur$e[QOGr]a"2C8'%:gBUci8YaI@IAbH(;ZT$pJC*;X?K8*t9 #,U-/$9OjB[lhiNI[\a\1pbFLLT0NP`p4uYFkZA.3cR%21$+j]asU%t3YC;"SpCB* nlilf5N#oD,cF+l8ij!ITCF")WXCtUAo%1(46VCXBk@-lKt:]:*Q;YSJnf5Cm3u&Sr,g;9*AjgUU]s5`ggT9,#iTXR7sI,Xq![\o!qt;Aeh-e; s-'7E9J"\KOsQFP5N70Y!iV"VJ:EI33_fX\1YQ(FNB8cZsO. 02KX=$KNk`ZnBV-@MWpP"^'T@!*47AjKV^8S1%]eK_aI#%jsRm-oS9=Xh#.BSbsb2[:g@VhEfs)AN"lj*HFs%5:-Q,br;7(Q>d3*1bHs1'R4 2C7>58-(1BghJ.@3o:)>n(J9o 4,ohYNa58tcfJ*'dMWUH;?M^B/O9bLi6\/6r*SJCJc>s5<9c]Pl?mO)F(3aJADMst J&Cp7(;CIOs,Kf4U?+b_JJ6X4nGdC)J*joTEIFN^=1;o9XRk;ECP E>ao3ZoI5'\_(&\tlQA%td6 B20*fc?(7\Ft;AaIq\,,)pO:D1N,_[%rLf>)?5g#+?ie3fn,Qh?!U#2-@;#5lACcd'`>hZYIql rpMgjj)6lI]3)AC871,ZB[o"XhQUIIpWsELirpS++'7qRNein0SrsL2hG'tg-"og5$T_&`)%s`PY1erHk:>@HTut]j=WTLC:qIc2 F;Q]U/=CeP21"7:[,KQMlT'8:ic_t]Nh(ET*kRL#4,t@C%"Ia`^6";D8]OROdjMlY V]OkG0)^,t?2N4/HT""mra>isJplt1/bA*f@6lu?E99=? occ'd-X#/OT;2^dA2UQdqlg'-n3>s,:\k1^[/40DpH?qGH"O"%K)Z_RDG[p5CR1hg .4t:Y7ulEBguH1Y`1NZL.9+#sbE[i^;3JH+D* V+Cgii'2Z+/isp(&9KP;U*Tg/T@JG\aWUQfT)jF6!>,1@p)s@lFRNMBD[6;TXdb[E g0*B_h524_s13(=Lg_`GL01#$r6r:Be;#DfK%S@S;l6t/B!59hNLR@ni;Xi=-u2*; %uVTDEUDY(mY,F-gQ6D+=LQK_>;kiZftLBi_9<(c[jQt=]3,n-0CTphm(;srq^Ebo `IhHs_R:JcDXd\Y[f=d$m"HU%ZLGtcktF!`kqdhJ 1NVeBF"*M@(QY0`NkG*)gir);F6u-](uBe!'p]\D9Sr) fUr9uJ4sUkYcRF6K)`\?UXCdTP)`V_m7'O(qWWP1CTVi[?8oFZBhH'f;QWu!Q"C0o ?`"QEVA!:9)\2l1C'?n&gZJY8r$Od5gd2"FcNO#1)="LIm=7P%d'DgH'a@Mm04P@^ !cmqoq+j?cocf=d,*39k4(S'h'YOk_.1*B&%sa`gC6BZP,_4giGWe(s"#C& a+WpPT/D+kc4>c?gmh`@MKB)(q$6pM12KS2Q17)A`G*2`QY\I-MBY1Xi'%0ZSRX]-d-Z7_0G@4g_71"7CC "b3I3etFG9\N8:J!qr\T>a[)%?"!bP'Mbl_.YUfHKMuldD/l@/a+("2_8/KI`Co1' S,P5@P/RrpKe(:+\QAf^A/tV@OmF1#NuYb)*K,X_>_Wc[BpdMW9AbS-s+MO8pAZ8+ 485>Vnf%>^1'.hckI8;0=b#r3bqI[dF4s:L$C$1P=uU U1qRA?Y/PiT(=N4B/a29X!%FDaVsdTWI`C^\bj=1qrB,c\SjZ)^WKSP6mM(pZbc[+ T=km+]@.D.4V-QP".tPLhGF%N:XVUkF>XSp!eC;bCirh^ p9ecE]9c5rk)C:@#TQt@!r`E_4c%<*+IY4g3-I"Tms#r+,Ydas0$KbI_gO33+ku2i;^28 D>F>6Dre:g'Cc#9Y]Aj?F=s&XRIC,ri;]_=bqJTdr:uS)E#uK0'K'3oV`pm-d]"njH$nbPrX5?G([4JupXGIMk!D-)hKSb1 Z[^l7n&Tq8fPLm#&aMa'\J=N*TuCC)-9CO*>WZXt2eDiSh=Nob)gkfArM$h#=[A*g q2"N7[qT!9/q\Z5gF%gtr6ni@V`!ZaT%mqN3'b@Gj@oUc4P*n0r_t `&7[n4es<181g6-+8KG^8FpqTMP#Th)b*gG`DesX.aejKf9>=\KbZaDJ-G$"#*p)p oZJc=6P<#i"U/?2"_#F(ITFERpA'0Wm*mLt!3([l4`_&k[h)6Q?5!$ZhNK)#p!-Yl8Z2rWjS'chNRZ^R1Ke8am7c](c4ds&C\EjFP@7dgAmV'@;3kfsP%IX_DF`];(kEtHa*cW.=AP/EmFAaa6VVF]82fCU;3WYV:QKSOH^qU6 Q(g#^f!RWkSuiC9#c_B>l=*.=0qQoMmdL:R"4^6Y'aji,=P'iL.fPZ&3L9r,h?AR. 7F\CBFra,.cQuNAZIocZR7$f"?GJ*Y4(S(u5#^W.1[dcmH]A3?%fM/8_pn/,%10lS &sd!]^h!1mPEc#B+]-(o='Y3M$P^h;W4pB'"EMfep;)i;B$NGO`C"aq`$ 4XNC?bkrqsqVX-UUQ\jOB3FAh7EId+-N<@to"ZdKJL'?>-ZoId+\DdF.ZbI3rRDMU HY.''k@o8'CPpR.fe5BCgk%s.X;pU$l+C&=(TFsLWE!tgs\d]d^B;Yj) AO4e>ft16Me#$."Y$Di\^3/_sGNl$r#k`f;"NK,W0mLNn=oF4XqkeefU7`C]HmPFEu7p1,f;Kl,SAWmUbuhs-M0*dShoWEMT>LSjR%'[V]7B*Ro,\LAFd- bqE3Bm!h*6oBV):A0k))BC2;1oMqJgGG-e:J@71)ke)-WmN!>T>P'rVAc?6I$j9:i:4:3\=I \aL12a?BNrM"[48M=YTm6krKBCCT=(?A+S.$UZrTroZKTcI\EDkt:Q>.D!0-HUCFV rB/6>N/L"2Mh;1%Egm\uD6CW-a3Pr60$':K1Od(G^_V4K[\#r0&s[l)rZhDDXq>WN !8-F0g,'GD>l81&cO)D#'5(`#9X"M7+i'm5_LrC17@UQr@9#%ZeZi^DEI^:BFb8j" oHkX=]oFndodq_FgYT-hiBp("-\C%!i$sHV*=7tAD'-]"a]1f665:*L$>p54L&KtX 7/fgRLFS5=Wd%i1m,/-BDmt.L>%WLlAq^Ua$3;NCS!MtWJH"+$rkO$6TeO8H?#7dU ?^U++<:N1+SG6G2`RW`'\Ro_.btIPnu$rj"(0sW39)bKJeBHiB>>?`fT!dTSIDj _!ZA(JR`u4D0_?j2m^r'P=o&;6[?$r>6V0hG#Rq'>68bk*TpH@iD:9V>T)p**oTp- mSXiHlOHWnNb[8V)VFX%55$$ZP>!,55Enh^:bS.Q^n:/sb]ApWGrZCdrrbKG$2Q;+ 7]JXFnti^a@X*sU,H&@FNrOmCh&Bscl_Y,\ArYR-bm0OT8-';%T@j_r#eLQuM>tqr 9cpF1J+T>/8Ls59ru^b1kWOuW&/OcWC]9OLi`BKes3NAp0pRRR3$5Yo\R.I35I_+2 4O#JSP:Z$4O4='p8b_#'mWg)Wfoq_M+*^&$56_',s2bmI?fKU7X$(@A;4f7E6= Y6".MYj5W$BN_TVA"p-O[N4;kMIdI7i!%%*@.i.0c0q@\Qi9WZTrXe![P$Q?0&p"t->m\tO1,MGX7X90FWrqjp$@=IeI-ZQ7fDI&jH+1s.sN,!n%,'#V)]7`lJ`?WH%9V :P&ET9qAM'L1"5lk&4A_&,qWZe042IGui@rT9%pFmq#'$Sb^EEI$3!TP7.h,r.jS1 ;ZM=2Xa]9AV[7nR],+%]cf-FG7$MI;b&nr&@]ck4>q-*@C&0(@O1j]pos5>,T;:nC Uumr>+j&/sJcBQdB;qJsnp,>B5t'DtLn^f)4M;#&5d$+Ub1D]Q[kI(U/q"Zi0+Bch $@,bk-n(0]Qce^erQTE^"Z_$ZDBf]W9ua(\OAq;miA2d:c,"d.p.=fM&c\&*5PVGK r:#(4ho_;rPD5M'3)$>+/r;>4M_\iZ^j69m:@bT>qHLX)0RoR"r[s22:&?UT@]URCWnYcP9[$NZD^;1QDB', Js'XFi"$t=-qRkg+bZpA:f4lJ@2rE8IZ--P/eDa!;IQ@1K>2F,jde-EG:^O\\H>eP Bic)7:_r"p*pLZRYBQ\BrmA+K+-<[cG-?o!W.m;2=%#."`jc$G:h>ka[DM$JOB6dZ @Nr=,?IlXOgUH9-I,I)0,+kZ0r5co)atSeN]m*JHp=+^UhB1/3-Z0U-p[kH:"D\8C +`0^`LBiAu`5^")[Ok[LNSYfWLGk.X:TV/mf_(fgp*(M:[-BcXmQIp!3,p"u[aa8Q['_SUdIc2$$S m=>Q@:Z*cHq4U=LI8TQ`pQPn,^d$ik\H&pce48q0RblsePbT\M;0U>dF3f0nN;+K' m3ho[(@>IU/mW_G;>nP%I8^H2Xjni+_(^TB!5+CT8GBmu-d0>OSA^c(*-%*J,'A]ktkPoCNB]Lq`0,l."/Hm$m;?Sc9kc^k)F r(dhWB3g&eQN,HJJia.O_4T_:`rEpF=2g5iQ=>Kpg9X]*WE%[ IlqqT=35pmj*t@1J6BZ0ps7mEps3h-\:P74rr`7/k(P)7)9!rS1\fkh5?Yej.mHj" W)+6/"9(jfiQA1[F"O_\NlEDsBcKBN>.GJXUFMNBph&0^/ )TSmL19!i$XiiPg. !5RL&,1<_?ar]1"8=,bn;/MP!FgP4MZl?LS'BF?=q(&4FCEbmtLA8.N"Umqc-b[\> gfl\L8+rb-#I;H=l.D^(k^1X4F0Blen%On1J(QR'#uD-3D/h]NNH=LEM>qf=/:_:4 GhOTO6VIT0hi#MKSH]SjqY%`dZUV`[=4"NqgA'O)Mu#Zjp)Mh/KE(D2L(Am- :I21Cguhc'elSKO/!'L!YNZ_JfRXD^Lqje*C>]0l($fHc).EHWbM\7Ho=.*:*:M^@-10,h/$n$9 /6W7K2g`#MhLMgPn:q0D'o:,-FQm<5hfe3i[6h5oTg!/)k<-QTO$A6r&:'.3%pf_7 ?fh+f+o#EKCKn&\?U\-Alo;9;BDb7t6d+7KPAoBJT[iAD[7gOb9>3R_bB;>V>$NNLchBJn#DI]npSA;8rcB=4kXFg87i]64g rsR2Ap\9mJ&GXQqJ&%Z`@LgIs@%*Y1"VCSb$L3`kJc$5[S(*G1WZ3iH)_`f^Hs'5* f?7lSOp8>XVRPi%i!L]:UY]4HB=&LdE_6T7gKnGK)5OojQ;F=q;tVDnV#Z$qWFf8[ '+4(6oKkfi0L%kJ1[^BPbQBfBs*,eZRp#pUBa<+Th^>,%J:&@@ebo(bF7j!M!I6^L q)SOFH4b)?1WP,TpF;>!AMtj.r.5J'fljt(8`m#/ ]JO!WEe&31s8No8<(UIG&!]2VWp4I,2Z3 /,g+XDg-R-*W@kK6V?o>#XJBpE'\1TO,:]f8-T#Io0;`:ebiG=cL.k/1AKbg59bTs IjO\H_$`f*I#'f"SQZT@5=mE!aC!0!%$FQ,-1IP]6d*fM79GKG-p]R=1B(9jMIC#G bEb9.J\l%e`QuTI?;-SHB,W9X*%l[H4(uerY0Si%bMZBuR9-9UbEMbC!`](f##Ug3 KM(5U?i`^$S78uZ+PN-FI=<^d2eETS1[LIK\M:?WJ&Kfuo5hm&-+ FD5ZC73l#$Mpb7JbSjb$4gsH[MU/4E@;=X#dCQmfYY+YU;VW5n"n%bg\]gE;58?u(fb^KDan(_"?nn6)8 m1u?`G""k#rdU9`b3t>Ynui(`hZDDk!^K9c^A'6dMe;IpG/plNcts?l?Xs!mICh%H#1=+<,@Y#f Bu:UmCcdse9o.3uIgCN,Z13K7d1EI*nt'nE[nilDh5Y=Khn3gXK,<=Kmm6G=CV.#\ >7S@4%UF<+HVHP%B%Kes+,A,fldcdYAc,?s+3.gf:iPT5l-t^Mr0@<1L#;0ls4Xm\ lK>sJ?UEAYLTUIe]CS1"s!DIS-t6W7[D(37Z0$=*X]AE'LY+l!dJ,)3CQt^.G/gj&ma5,PG9._r)as=ckH=Q<;29"m#h(q4'bdB pcht5OKB5'0$r:?@0lc%&HD(:k!+hmjBn]M$O!lWab.=h]trqJ@b9%9lN/PX=Z=JOqWo'2hK4B\)nQ#QNJ3cb'+Y %-KA?hZj";r-YFkbj8@=r\PCG#%`Mr=RlDDr)HX4N!Zh"fY?O_"Y9SQMEd("WlY3I i]jXX0alp.70oimSuR_b_GB@iNu-$$1,"JAWD59d8:TKaVr(kZCq<;a[R,2C8p@g< Dn0%qWD[rS6?fG'J#)j.J'lI54QD04Z@Jrs6"p\rs0h\i'dTX8q5*VGH72E+9hQSGFhKS0eZYDr\GN(W1j>7"QG8Yt6I$QC6 pL!kCV/\3)05LI#3ksX7^cirlFpd0.s8(>teSbI-!&C9j=MP0NnRZ-=c,7W(J)d*t -Po2G8Io(d*]X-Ns)A,es6Q9G#`lK.4EAVBpJCG\YoEIf'06YsdG+/"_*@JiPM[kM s'Gj$IZ\Qd)X+,gcSX5\A"6#=\W3sF(4Bkj8K&9&4M5=Y8&N(mHXHkE%`;MfmQJVI ;igHc#?q-2IYn*!;+1)!@[A%i2/iI0\D)/iJU8S>=;Lg!<@UQ#iHcZ[-=#8Xl"3d5BIcp$S2XRWVY].LYq[2 9-:l0&dgOX@*,j:%NsD&a_8kto>%4.nc,TEi!0Db*`J;o"jGa)/0O:DQ`jZiDgi,I p`-g?/TgYYf^`A^G/=3>M-I;M*Hd)ceLtCSFFu(b7a*sDIudk=r/jWYEEsU;/ml3# Kg4Z5pr=VKB0AK*I4(-YS9g1]]?l)U?)MRnrC@(bh2p61Z_P8+Jp5`3PM\30hDeqK 48?Iims4Gr@7ef:Ji9/.OM=p'_1-45G4I_sA@Onje#Z;s]H392Y#bcI0Co0n`rG0; )%BB*l^oK2UCV%nQ)q*ENn+.UIC\'=WQ b*#t@b(Q/qMbGQAb)huHV+]%]`&q-e$F^S.kf[I_Jc;M@s)7^_BE+kI#Cj\l-A_[p M#Sf\s5ai'!A"C^h0r`4XE=V\i!C4pQhZ&S([)t!?QO)k`p&fek(TMAJe4-_:fHSd njDqsJO7KY+-dqu"Xs1bOW>`u=Mb"Br&L`+6FTr;J]\%W V#4a@"omMqEe"XdEStDL,5FY^AsE\+lI0']k3.d=lV(CDXB01Te7`[KBl2I9Emi[? d9g=Xku`Or[ZqeiFVf3%NPd?r_6f[/E#/p FP"*BgTCo+l)mrL,&lhMi&guFF6BZ]s3qOCrsmA+Ngsb`AVJ_i@p$(UX'`,F#4i@1 #H5N"3^@O9*I>ME4HkNF30G5b=#]p-c<9-:==#Q)coY>RK:RJVsIu!V$(SId"ST&(`tr?>.dg@*T#_92AAq>sC.r*kgf'\R@F]h0L&MiJ_;#k\J#c7m@>:CCVG%!\B1pIT`4Tn@ 08jA40'7`bWSDMJ8/3d8=7uS:piFqor)Y`bpd>!-09!plro+YAGT?NRMA2orr_-l1 nDCSsdYs.cX,>uCDP+>G%=D7g2qH+BQN-m;i]hY:lONid$3a3/J$.:B>N[1)Rt:U` !XeEeP51Zk%thWY*U.#KT\SLYBO"u6Xg!PI$`G+JnK5UIhrXmoj^=,KI-?mroVj1\ busQa1OqsX:]Uq!8;*WYRTH(gqDQm.4o&-",o2X,V8e$+S?6KKN9fK7J':,P!(+*6%.bauTs89/j]I'g+cE''h?]ub:8[PQi YiK')L(nQ5*c#*pk>W&V;A&678I>DY(>r4+l,qpkX:Q,#],$14'SSR]s$N>L_jgaW NrPjE8.jce&`m=:m8atH:'dLP2K[NX]cu_*aj* 1[i9nShhHVj(G*[F3c!ffhgAWhMogl,1*.u/\\P-&;P\bWg@Hai`R&.Imo1]]*/,j E;ZX0.<#a*+cqRV^UeN*H1io'F_uF8^f)Y%jplkarWi88G*p?`3=G:Wk\r4j%e53%.H 4a1-e+*o.+BDg)'m#gtnS`@Iteif@>Mi+R..IdA@+n-C"2hCuV*`LSM?FG5+?2ZD1 +q"\/7KRVm4aH$^!rVf[qcWlQ[=\H2=_b9U40W/@"Ud;2S"pb6[N#/%Euru>n(D^G LCW*oGFX"'=9)f9A2,5&[S7!G%>"P#7WiJ^bs4Ge&$!P0^jeD$iS4t%n(Dp&WGf6\ FflrHE9VuY&H?#?[]R0OmQFikjt1g8+FV9)m1Q&d^ZR?XD*%?+F)/^pZJdHuIVdDEiAT4)jU]]HAkM/N/EJi0="fRB9B\MJ>VMop%h7`T>]:E`%h$C +VC[(MCd/7.+"]SScsE`=\nrN[H4nRph)^TVEL/U5PATXJo]B=@0$P#IO0;k7J[$F \cE]&JSAGl`*lJ=Qb?;4&h/H\M&&p>>H@?\Eo8YUQ,k K0mdAdGV?9DCjLYfn[lE;Hos3iBLrUekA(92E;@M&8)?9\,1YGJ!^3%Nu\2q\&#g> i/\Bar25Z5)?Zo`Ap2Kn]mEiY*F"p\,7%B`d(V'HI+#=B_TqG;+ZF& i6P@>k#N>Y";M)%E>IJ9'(/p=iEdSi7[nuRS1>eSCST^#@pEcDS=9VuLViX@i]G`n qRUq5YGh\OHA>'e+2;@?Y%c@%E8Pg56o9)S48$F"nCY/7^&.;e4*A2#EudE?6a(T. Q[8=L;hminqj6^*AhLmQFaiK(D6M_BY=2B/!V$,X4!BO^f;IWM"5g@hT:lA_ppPGB b]=DJ1cPKa!S&(]+]na:`GZ4&j-3K`U?c/cEmFtJFJ0uK=J+#5*A)GIhM&b6VleZh'gp$)Ks4OF?[Sn!:gi_qK%I<_9 HQ&$*(YlH4>r$i;aj"u0jMA_CgCD"@CaY^Vle8bA[L`-`^jks!rt"+=]_I'L+SZK0 n(I?7o3:+9*t9jl)X0er@il,8;NKRad^DO;VHkS:4)u3,@KN0RCXB:\leWke?LXQs 3;CeIOKZHbl[Yh$i3c?(lSh,1ha068#-WH9h#&)&1@NdrXW(39'2ba(5k)GQeaP/T ('kK1ds@#Jr+BmPf,$1'G;nN,H9kp"ro"AO;`$[E4S.ENI$`Tc6mpC;#+6&Wb@>[p -0t7BIcI6W]*ZrqUT`rP?e#Rt..;FbfWCdtTpO<2Q-u=sfW(Rpq')l[0YbZ,!:V)i Q1p]4GJ5V;jG*oS#S@#W_1*pr#f(!PE?KarAjh?!34tnR4,OqBCPRQ33L]qMlLIUX BpPVI8)"RK=c]DI%qWP*JX3V;)dK%<6WU-7c.A7nCJ.S`ASKkIBhp!'g0Q3H4pd9t nt(Uo\0a)V'U<-)Ts$h7e0Wkq,fcOD)do6f2pW2-AGVbV8-RZZ,!Q<^M\ImM&Ji4b +PN\:k:8Lka;OmZGPSG"s&o@D`7U%HM#SX6TD5TDA,Jjdcf0F8NQ%k`@9OO70#4JP WZI`].9jC>p4?[`s%8=O&2NB+Y?%.j$(??$nN#VAV+Y=p[O:,T(FGu^L5 W[Z2GP?DBFmp36pRjgOLID0EZ!L9,drU6Ks[f%QYXm51Y AASE%N:Qg=94t?_XkL8N3-?4Pp)H):^N](C.Zis=6:^O;%X)jHF_Dr6HhuNQAj:8U i"t>R&2f-*d.nefh=I.Jj&+G/Y:l'XCS)JZ*@[OCnX\>*)Vu9k*Q]Xh?,uI]TJtMP iB7G.,KOLj!4:XTj$0,Sjh$$nR=]8F>N"5=_:u^-mJIm8$i]1D0;m&TJSUUXR0B(( -23$)s0YMD5MAWb[uLF@$1WMf6ONM8m^]4PG9clInAopO/-/%]&1IVSTCpR5rE7.> Cui(pNF,%2_>c#r1%H(WBP0NXpb>"Vf>#G:T\ffp^'CbBC\UI%p-XUD(A>(#2Rm2_ 9^sRJ*Ph[Wq]S)hKDX/a<@;RW8ei2`JLuX`)P-"SaL:CJs/jutC:2<'MqnuR/Xt:/ =]0060HV,7rs=Et6NI+GDHD>^Hq@= RFh(`s0*R=6/$jHbegWO_s@s(9?(Mu\Hi,goR[%?G(\s1gq6;Kl&U9D0R>eL)nbf' A.;#t3H4Y$i:?W`omQXDVeJ&O?RN3[4a9M"HlY*CCY0st-#fG[c!LMO^Im(+nQVo_ I^K)9bC]amY6d*ii7MNJaUnt&Yj7#OE1EWdt`Z KE&&L1)n`,_#Nic=ZnEZ@HE+g-2f10"/_oIAnAY&A`,d]TBlO.nM7<.APT:7.9!blMWLAu<9kg,P:ZOmPfZ.;qpO*\sqj!R>\,%F/q^\[oUa;VH `F>;Q1s@60WEY'Ta%Xa9lGl V,+n34PjD+C@s5BiOSB;OXG6Rt5asms>#?&.KO(P!2k,]@=f+H_q D>ULB1TLd+nhZPa;U$<8U/4&3?P';j^Zf&!F2KW@H"Xr/E&!g?_O/Xu44H;I9NCH\ kH,X"RFn*&Q3F3li:m..A'B_\%2\pma\VDmR?ROsNFJ;T<\U.0\hK>BLfY=20Ae$> n&X'%0@j:/6KJ1)ZMEA/pA=lun)o0AI./54+8ptga8^VXd6A.(rbJ^k03oJtc"c_5 [5VlDB$-\S'H"8h^NuGg;OM9'Q=a0[C0I$?N'B42]P>PFm`7/l(K_*,2#jV(q3QW>0(Y=Tn_^p?Y(#r:'$#j4P5em#Rh5Q+DhG(@hX^_/n:$`(OE.JY EsDR"[d?R#5T\lF[;OA]KmiIJ\oZW?&!8c+LD59sn'VHfd;ghj()p;4f*$b.H-KP[ R_=`b3cZ;C\&%6;[h/tpD7[:/WRQut^;OS"810:8r($Yq]7Djl\71KI&>$3TB\g&[ _I)[koRZ_C9pAjSAr@/oWY<_K4idO2@Jdc]pG(TEh1+B?EeWD\k6-6RTDUXn`Ug"e l0BI,pi[[^E"dnH@,X4eH:Uk5W=`I6)-!UJfPHXslo4]8$(L^L+LqU>^WKTlb;R09 :Hlt'Te#Y?9'>tOjH"MFT5N8+?lbcHmXR[`&T/7]5Pu!m^`VghU.#I,rY^16\EUV6 UUgKDMSYXdiP/;U[ok5h;'WVG-[joaiK.44LjA4jY8mS2Z) -A;.9C,&7tIZ[[+*Q.Z5']@frphH?JW*EP(TH7@2*a&>n\j0f,8MVC`Auj&EeGT`^ k\)[.?c^KAKKF_a"WHr:2*%7iTe8o;pPmW58#hJ7+*`OqpP?=,M>4D676A$!-GJ.p Tg9=K,YtD+Kt`fV9U*HEF6),a,9__[-lG`\Ai96o=@!'`t'9U#"qjT=!d :IGKrperlml =J3&uTt^F#_0P(SDk0,m]>"1BC&"V+4F[<[Rsb-@-6E,hj,a5hk[PIG5P72=gA^lA 8U[d;CU$3=[.md:Y$j\p;-fVf?+M1YT4-*0rN[sBjZnCE:qkmZT&FYVbPpjp4ded1 kpENHI$Fk7-TT$FWY1iC!oi!Ni]NTCj#q>L]tjZJ(g>QDNt`gj%0PFY? rMlgF.(dAFIE4O#an?1g'=XXg_?$B']3`kEP4nKd458T2:>@3m4f;cJ!7(8#(EO45LVs' CkY$3ecc,@!FDouZj$F2rkF/(rt;V/'4I\p?i3tX`)D(R77mM%9)+Tkj?MA;rgB#? ZNJa'3;t_=>sNW;r(m=F)&>Juhfl,L'Xd8Sr@)\,0D/Q-elVlGf\+<\PuI2]IaV#@ b4m'X!UL"sL7deMAc0o(Lt][b`+B5lkT$rg/Id@4]Cplh2Z8!2"%SA]+?@.8)[T$dHeSOEBO6h(+V57qk+HEcSZ!fL5#H$5OqHo/4i\0N`#CFW(DU_p]TCDMH'2* IM`pn^cu*XYg>56bW;KL3Mk!4YV35^5J4?\35%WkPi_.ul=G["T:>OiS0BmaPo4/U 9X5u,3F[H?R,FUqa8,s:mnac!\Nh&c@*Tt`r"'oLr^1sbSF0P\_u:bQ?])@a/)#'F \%KihF(PH&&6g&\pNXuEV-]2^-,D]OT9FPLO;Z,H&BonHr#,Mj"&(`FfYRlq?NaJm Jh3U;EWOAU@&o5_Z2iI5JQY6U\94C[-9o?_=,;U;gtn5=XE#&A3T3;J@QM=q$3.U@ *u4]lq+ilT1q?2hT5oH//cLKm'e5.l@pV!hkk4(Qc]kDGeNGm-q"[S[:]ITthZ#A% i4i%coRG.MphpP$rnG*>s"UGF^J@)ncf:)dj"Rch8"\PcNnum)YL]3re*Sf5g62-A +oQ[b`m_AtVd6jZ"q.#^(;H4fIQgc15F&E2RJ1M[pVft;;.$1lB:;srWh;Q/ib^IG mf3`o8T:\iF0:OEXbdiKpt$g:W@WSiT+us8,%r-e!rc"TJq("?!H*u#clO>k&Q#Ot 5igh`(Z+3fhrp@g-%%L[olf$%HeWIT2dktd((e3)/>&B;CE4/@p$rGn%$Oj(Op4X= k4nTg,s*lE-d`+r1rX_2Ia`+dk4Rp !!+%R#&jMfFS@HIHbY;Q+ioRHR;cS=BkVj)N2 q94UF3R2&cSH &_5o%-_`=R<J-'D?Ni'0%:AoR)dTh!fDZu%8gCuL-bMbjA:S$+ '0>_hf]jjA\W>0a=>Ni>r+;qjcXh8VhpYY0o*=?mJ)i/:p0hgfM3R=D`"i2aj`f=U Rqqdd>qBU4hbBQQRGg)bR_0[qXQh[AlnKo?3hGKAl=RNiB6?G^"oRn>VCZN'"]`HP AR#Ot":OFB=[5(K?Y%U\YNHe58*&"hs,:AD+2n1tSg=C9M#>*hW[Epbs%>18_>h0g '\MTK8b:GCq&4;C^HaTJi-%R`*ln:39j*XJ3:W\)jfs;mL,;3@,>ucBm#fs#^/*ZS T.kCZN+QIlAn\JN:l;D1fFkPp'^Lbe+JMLp,-6"YCnVYNO?9R/o*2WcuSgLJ-`T+*I9;;p?gJeTVd W"b:3n3=kfQN,McpbVp,eIVX0D"&E,PI8]/NO#'ReK1Q)=3oRb$'aOiP2U=G%?uHh guoa%d!4S\C:5Q-Y>#QOP@U]7U! p>8s$ri[WUs#LMqGkaK64o2#H_:cGI411+b.^[6RFLlO8=u5h51Y)ACZptIFVMfT[ 8p$ClFI#RA((59I$[$+QT2"Aa$t[3=c89<0(Gr!m2PaI*,rsO'')ub,?#&BT<;aK5 Ih=&>+fL(RI+M8M$i"'C!f77N6q@@BBRmt!;W1T2 S3]Q*&NRlYBB\,FPB5#0#pbTtJ.Oa(S/[oe"[W5%,gC#irTs4C]PDl-?GDtRB/\'' lDsbge>!oYof:@_e$L$HOS!n"lIN(X8\&c'3FG]AAlgqSf"1.u[iI62'0L6T*.Jj: ]GW[a6[LZVE43Inj@"`EIsc;W.l[?a*U^s1elP fL9/a630FZ,T$%o5(jUMpqPjLQ&VQSEGu&2s4d%F:W(d;prb>D$a4fuQd"PaL(L#k i:s69P*7*SRip`/-05ssirY+%F@q^:K4t9Prb!YSP(R.e*KpOBO".[GOlrK\rqt=F !\40SrkI@tZ.B.%7UO",T=oQe`S^EC)H(\<2+F^#\[otC46qN\HWVTc_D;Z-r\kho JH,+K>d;9SJ((rTQPuO+lSAYZ5]5qOSR6n_pf7)dD`RKngU>Cs5/7dB`IE]r2r/e! 8Zqe!@!pG.o!9*C(g@jlei.&_K RID:M^nk\_\n0RmiLWCqnGep2cnk0;03nB@nUD/M`o1k0KK8d)Yk0D[C"'i!a#L\3 /c<$a[of5.UCk2cl9FIXSj>CA.9l!EA9hR[YLrVo$8DN`hZbanr(k)DIK(H%[Fi.t $iZ`'+Mdu:VLI=e0)#41fCg+`p);h&f.G%CcHX"6XdjS5 r,1P(d"$D\XCL(N?-S1J(#aZ2X\pnR!W.odZ9duU5pu'99q;5W21K)]cY`>'J3WU3 .iJPQ5H$u(9+?K*pn(:a(-o^.L#c=S&J2M8N3#n)Q`]QX@/n@GbqWX-1le0a1+2pE@%3XHk3t3 0D@">a"2_PX?\l^a9f,o$*h^O>@l3aZPbY]/=UIQFnYjXJ'q^rW\Il@5Mti-"b5V5 q\raHM)YS0]Rm`:M\9-YLKT2bJ,O<&5F2P7k*.F9nBY]QL&D:,dWNI368<=U):\F= Gk(n85ri?RG"5A8\.b]W>(G6/#lhXt2sJ5$?;RSSq"4KaH\uO&`AGkPR:NOA$%!HF /4X)Q'!6X:8I'nJ'#h8jZ:>EN/m>H.]3!u67qKFs.K>TWWLjN/J$GaCF-6$SQ^.U> P4J?['u)i5n:(Z'53n;Yg*!_-UAuaY=Qth%6ESNqXo<-jO[A0/;RQ>+)bUo)6ksI0 PqieWWRcIec%uLSU"il.fbQ0-2N;E/n+lF((*Ma(AH>lns.CP=+$p`./d27T9*?:^ 4Ki5.:GL0+;?2USm^E?@28#ReoWX*7.EsK!O6eBPm-d\12G?1r>]dgh1HRe6qn^1j ]\./u`4T17\BBL:L[&=&nm8ZN%fN[cK;r(4qISE:fO=!r.C=K4B%IMi/iN+GYQTXP T:d&%!a^qapeUn(MskeO?NU3kL&_$9F238J.d20!,!6*/!3i*D(I=[6f=i!.$1nG< F"dZ9o8?lKJi>q-!O;:*G9=b\!"cAncNK`07;Q39KJ0n-(E>P;Hkj6jQFFTieQ]-q QR[]I!+KK/6*X<_K`;VK6]b*7"o*I!&]0HjL/Og\("-MW>19%4hH_)gD(EmB([W<[,Og3*o%p<*:3c(ZW9?.>CqX!, U6c7&e^#K$ml)bP`t@Y&8_]\BX/\?^i.!2Q!6.Hu`e>F&"YG%'/VZ:$s*Cf3Hg:.q [1XF#;]?0DlY\'+e]+i.=u6#8:2Go-4Rg*^O]/'o/QV!JWH&BsfEJ:64B4F>^=j>" +mc,bcNWJ*`T#)"K1LW]iib'AZ`g%+5EG]LMlK`J!U%nkT8Va0:cpk6ic8'(Nq .RH23N)a;`BSD!L6mr0`C5*Lm8)0pe4Uaocp5,a;@i,"Ijp-4p"?C+KfTEJ#R/]Rb Cho-"s*[s3j.[!Ke[h_udkH5a_Qps5A+k [L`0e:'&<&VsMDYomO`-"rk9&UE&tZS=%R1a:VP88"*Js)`;6mp(qJh<[_kCQ[R74 osRNaDhk.'2l6$B3Mg'gANgpPJ%i)`X*']"YGqM#V#"F+b5XZ-"=_,nFj%L8Q8u$F =K>;g]ra;"VEJ%]4'eR=?`C;8V7BX'Z!MQ_UIo[pp5R<(p%8[Zj\ieV,/`AePMTQF [VVFfFIW.V[f6a8YF`N/n9,3up6WgEPXj^%T@,ES;SI>]h]MZT.=caOhlSZXo,]jO +X=9K+Etoq_1Zb$S58aT_u2%=VBm]+gi2Z9naBiXlWF`9?M*K:'O\fJhPa0AT[iG$ >ErL'mL8F=Si"0>ZR,"mArQ13RQ#(DFWYi<_1-"2g:knc;87uq 4e_u+0,VQ)jt`%i"apPrc<`_FXar+8RpZT_hB'K3B=rAkJA2e7>uJ(>;HgW:!!WS_ Mms<\?l1g7\G*o499/4QeAdtKd5c^HN4&.1GlBg=nMAJ1j++DSS!f["Tuh>(na^RZ !^o[@`(N*<9@L*Q<5orRI;0<)4D$)>;5-*lF k8Fp3T*3J)`SO$,2M/dbi-"OdTK.i.E>Q:b#WW';)DHGoLW,0rGDo,pf'L$"*I@J9 7tL\Bbctj__QO'94U8I0#/C:2r?%d(4YJAQM!WiG_nc:PlUOm.[8Y*>#ld>RmE>4* 4!#6n"6:!J#9YdON9eK0f;Z/>G\$9u%B'NJHN76:gT.'[M3sg5+Y]MdYlT V'ZQ/?tUI/iSM!%g]@>nmN]L'*K'cf/^KG7\!CU'VBq"P=mLDjf(X^prC.NM7MXbU jc/Q9O0f96[5&l5+0_ib,*-^un:/OM2Xl45jt8cI&&A>D9M;?`J>2I9`SJ!1gC83I nu#Lg,W=qaJaVhL!<9)VU&k6.l4LK_UMBH7.Q&E.Ph;h44:(p`C2A_(F-K#lr^@`A _LJj-3)>0jTuKW##m,+r]\*Yk4;n0<3Eiq_2,DMX,O63kitF!,``@4o.l_N[gr&7P "`f'>)8?HrO=4,d3;)3Sp##t\O@1rq,++9SGWdXZ270SB1pnYUW[oDP5L_KYmZbPn 8S;6?ro^S(5p,Y^O(1Vphh&YYLl[O^`<&]\MXr"k`=mL7qLJ'9@ec-[]ALt^?a-EK Db5dHlK+BKYYf[I1='Bt!qqJVknZ8:Lk-b*XUp%^=.$62P8n<@n-;h[[nGc6"96aM Gdd),5?A6Ma`Cnlio>Re#j872^c_L!^&t)Np`F17*(VEh;)KEq5*Pms3*S$VVeqpc Y`*YV"pO?t7GM+dI&!udh5Y/Ug,RXFA>R!kq7..6[G0,*lE7m>\b;TNO2!dUnIOeI ros"H0@hG!]-['(*JH`E./daNl'JH.5@0NQ_5tMgN6-N];!-4:aj[-Q7s,pBeR%.E F)@];PDuT'GOA^#\p+,6^*Mo6Xjll(RA5-"#C#9QWo_jU'pjeX-4@6Xnr-bY/aLlf W`'n4cQ&2)t#sKc;$ODCb=;28:Nrf7WJZ9nWa=2(:KF^22$G9$L+:Gu. TX&OogDi[=4)LKh^VK%G#'VX([B55X/-iQ.\i3>Eel1qg\&Rn'<\bUA>D=Rj9YZIg,:*I^k !;-=iD#S),$5d^b83dZ58$M@+?$aUtGg"ojbM%=YZ?d;!%%hd]S/noHP:+2kQ!u$g qSp^(`QtG=n*@8X=QmQ#k*4ULhUEABP,!8OE9D1#@[G^s_mstr2eif)NA+.emSeJ_2I;;k8\7aL*$h%kU%?bE9 ?l<>ci!WX*Z>3[QBECPP<"@#Gec0i!#9]r!Fm[q,lid;Po,cb.BOdo*&L^P:0 Nc;-is++8O$i9K5BDrcir.I95N%oZ!3d8f8T6>*#=(^@@A`*gQD+YGq8HLt99+g'NfZ?N%Lc,sgh? [r9g)9Bb"dBCg)j]RJ/;Bu9NALsb$Uj-jDoW\3\u2YHtXmG^=IiW8)f*lF.,e&jD7 g0r/d+F#YM;`eN5)d\2>!4)[3Z6%KC(;i6Ws*]m&3mD25#_GQ;!GXLOn#4:XC;g5R b>c?WJ=g,K`[OpNjf.`iPW1Zqls+*Qok1>`^pdQ+(,boCIWZ[t7OY_AaSX$!qM*,> pp+c[St$a$T#Qq7A'2AUV[pmL^@V]6^lb!l!q*nB]Em+CuV1'Qk9X@'?71n"SOD^=Z\'ALB4lQm18If(/ 2(RdW=0Ot+ANYWq@>*/iC&^E*I?k8T'"*_bauIa0GZQBRRZ!ej8Bd.IkF1RTbc^4n =QH`=+o#ZR,*5qL(n+Ibp!pl@MO./m.>SsEjbVpXnMr%HtF(3=DZKpbn.(g"cA hbUcX0NFl095V=4=]d;kI7NSeKBo/FZgj_$)95?^n[f."7[*0L,AO3FYJl-j7DVi=T0FV=TG,S#A#ohs*TV9bW-ViA/3LC-^YZd"($GE^#DGGY*'r?;2t"VCZ77Um7u(&u1" ^;9gnJQGF1D\\2`---nBG&DtoXK`!uN37:mml"s#M[hIkf7I3Gn:/9R?0L"Mm+/f6 dC8.#\ed33mb*4c"!*kCllI]]2$g=(9CITK`0197O<8`*#jBkOT3fkA'feI(rZG^!Pj3S:uFS3s571e?G+BQc#^DKq<[Y25GSUT/oCKWI>%WIcMbQY*W0^<,c1K7[iV'S8*e&t ^_,=FZ'ED3@26Ot Vh34!L9a/+:'!Cq+t3-Cd:Nr]3hlrk3blIIMTpDpjf]C[2V @^-3?kEI]B_-9%bcTYo64_;mO&?IF0G=(e(U)7.0&sRClqn^Oa"4m78@,Y8PkQPH/ ir:gl`L!9>nFqk1pDed71[pG+rZsi!Nt)+Q6[8+fL)\BMk6 o>04$#j'!7Sf`;&q ^:K2;rjBoK#;.,_o*#0m$3)`.\8(.\-i>>-!&8sXc[s[B5m71_e<@eS,k0-URfiAH r,a_+Fl#_J>N/(`KR[I8d.deLfJi,%9NW"5F#YIpj[E1besVO9WfBaMe3!Sj9=NI&Wtc-48\]X$nQ2:5s)I7ds.#ALfs9,jX--iXaSpHll.r&U T+=o8gf=@@L@Quc$9qfopqa>mGK8hEDGV*"i3NpXb>t$tO/-,>8\Jf'3bsk'eL(1% ?1tT_R5_7RQS%dk/P;p8MGGTV6Mc_)7j9%I_,E[r--cO]Od:IlD=gh7HbPdPd!k_<^6#*iqE1!Cj"&/X+63 j,Z>n+f=)g(rjAtJ^_DaWnW"8EQo8jF&p'X?81M][1ajVnNuc-gu3RqTF0rUV/sp3 QJ'qaB<4O"iAkO&6W!`9^BqL4XPklaHf`-q^os[K&.nG3"ltfD_,KhCOojSAAZuI" ImENA=*VZTI&*C$0?HkPa8I[,InK-j!lR^`-V-:o83:>-Vi5hcS6r_;J!R`+:4Z78 9)luGb;/NX`8mu/oukF!pu@lq^P$#;q^$.aR/]9j)7"dZbgeN9%`1c(5uL)F:O[$$GsGor\aA7g7I+0^IYa>p#ld&m#m^7?A<0YP2eY?@]9[#t Q;'l^s%E,?1p:,-GkBX$E6#'kir=Gq@>Orm>hai0\8fN:%-%;0lW2q.WVfSAh2.9/ ;^X]b`n;()laEo^o>WYW(>q3(s1ZOhVW648auu)_B>.k'SqC6*D8?/lC@)Dus1ef! $/j&>s.=?KShh^c0P1e4e%=u:*rD*EQ/EidhZ?6=lqdNq4e#6b(14;DT@:hUK-t"1 bao%lA*4A4iJHIeOUkdjVM6FWDgV2A$X`5,SlKM22VqT3cG@?KW2n16,&1-&N)eoj XaAM4%j:3D$Q.BslI75:i#e;u;`DGqNCs$U98@CbNa(+o=ks6Ug"daX][Lds%YE:; DO#A/(UWJiJfa2bk>/-U/u\:emK0nrR=tK>M6'MhPcJ-,^Jm@tj9E@aPuXd&-8@^g s3NUAi)GD\AAs'5V8*3;T3-BB.!\Uio?4]QA0C6:KunU,fRF'S.;+[".u+0i@6T'0 ?=unlZQu&+lt_W/.2l"9P:tt8PGKPn*N&$>VW,d#p5.3'#ZpP*8iq\T46KaemX$m^*)gBgBlP*Y^aaDYdos]>^h]'9.?aGp1=I/em:$ReOEpjJPh]42[4&Gq:Y2\n. j?FI&s*RE+^Lh'W@nQI,A$USK./f]#RD8$QIbQ.X7dt,Yo\3^:s0!5G"T;&Ur*OUt I+G,&0(AG*daJHDHSoQ4Wgf2``nc?Gc.Q\d.1UQb*.\'6$]O(p7D(S<5E\7^o6/=m rrN+qOktck`<*e@JM5%@!Z_29(^Bp4.HU?^B*kGECA1Z)O5biu0lq]H'ArrH]Wj'> n2>?0QT;=k(uGPOqgoCg$/KroB\i/g2gB^#?ps)'Zf'WIi6o!je;0=O?+YYY4-%"$ c@\XT@uic,&V.)*a:B^"F99tZ#'V5On6c]N1a6nB<&sXK=!;u@T J0>'j_lpp)@Vpl5!2%JYJ1Q5^kI!VpKZGHHCa3RF?>tQ/q;\t=s"U#^*PD#*FS0e? g)KlL26gTX)0]uHZ2Tc(6AE-[VLj:1D?Rb70[\KX@aG/r'.'3c!n-2cZfK6Q0C0(k ;Xheon>sABZcD=BN"s$dhB^_+:72K._H4PWh?_\'44>X");U10LX)79<)PKO%d3ag Zg@0:6KfE"aFG:l?k%"+CNc8Y)P5Np@*pfH>/+h0[R7rhckt!=GE\nJ_LI\R)drKH kO=4Cqn,MVP1fdC`tmStI.!.lgO[ZVn:08jA(SC!-P"NniU:@&\ol>uPLTWa*BU]7 \j>h='`S\t6D?>YY3q ocO'k4qF4$iBQt6_iUj7k4l/nD7M8T;qWm,`Aurlf4NjG'@nGs9qY:PL/+96j1u2W 0in/R-@u2!iaXP];cCO&rdlM.4aigf^$t4(4)7eI#[MsM?!DL?,hn)o[\n,iUfe]@ s20S8+SbET..#J9,MO80c0p[[<0#hH4_e:dBjD,!a"5$scG6Q>@FNsUAl\?QDcG/Y S(FO$e#JndY+Oa8?(D9oed.7:&!#$C!;K'"#"GWio9;B5MB;H8-Fg;cGaU8MZ60-I*6QE,P"(99[%uq !TKQort,3/mmQr+>87Gq$br._7QU@a_NoZ;lD2;rCcpH0s,-^tQ=Pn:=_("oI[q>d >8G+@0#/)6*s`t*M`+-M[Y4\F$sO8l(."Ub`j-pcTc[G<&Qh:Fh][Vb031..J)ih: gd!eGkJ+h4/;@:;b8>j2dP-%s8D+QYj10#\/PufH?NW49f_WuBU^[7Bd k7QtI:J1Us?KtT9WS_U7]\AWuc[WnumjS*B6hUnMoIknR5@'BMnZ9qF->!0n9Em]B +,6T-#l]9ehZ@Ig7:E8C7m7GF3%/K@M-bf`OU+kIk^/$K@X#S>: 0[.3qi*I\u0'J"\J$a4 8"\K@(g6Cs?hGGp$ln(15Z:eV)-llLST:[$GAP--R"&n!qqWepld6/6@E8@ )u_m@(9g-\!PUOb,D9I@#P`eb6TkgF54P7)%hYB<$87!3JH)eiCH-s227FM[ggs`Z ,o6OnI[Z4>MDSL%Sn+h7"_oBR^E3C:@\?@GTPcR_Bi@$GTRAf hc.WXj@tCN,IfKM].X!C9cGDgC@FuaCF:eU;Li'AIPU"mc*_?DWbKG\FiOZ$qjVaL K`<=s#Q#(d[dSJN*V^&G;3To,GOu^Wri]M5m(&4W62dTg6]++\CZO-Yn(J0I?aY?i 7@aUDqna1^gYd"Wj4Fh=5GA2GEA-LPjeI79Y/cR9,lU%%*.!/N4G<`5q@"X.1Hqp` W @sr:4WWr5_6'ZiurduO4i!9nlpDO`glP4q2otUX7+6d<5_uFd!lK:"fVW6;\61"m7mVg^$YR$]8$UNDfB_aLbf5qQ_N(XE1>I ,7'ZtP&Ol8F'sH5&'X3.3:eHO_Binn30VoHM`#Gi#=>C\#Yd #YhB1AsS0tQE]^K\Y`qcj"e>[=dX%t\.t$Jqg(']2l8`c#_1hG7?Q/T&Qel`i1#oZ D-nMPFd\T'oReo%Q5N@(ZG2u?^=E+c($=sR=u!3m0*CTmq*=p]IgZfMq1/M==94M&" Zb&/6F`5CldCMt0e`@;2s2\.-$!c!G4`]aD$lM3OoEEKIrsrlK+:eP9_hXhou" Sd"JuMo^Cf!i-,=r)H!4(=fB#iUQ1HWE)e#on!-m)7f?r]1U(,J09[KL(O,ed?lH& q%CM:0E#lHmq&`e1X=PhEs3c]Q[Ib^@rnmf1K2F\6cLcbed!`K8^rFgL8\ \H^n&A$*CPMo^4MZ]I0I*U.SVT5120:g5K3]uRUQqadu'dCa29Y]e9o%@d&SH6EI- H4Dgl$lHK^rK-OK^jU1RWFsVc:2!tCB&@^gJVt.ACtc@3IDGjlf1rFIqi2\D:%#O` 6i=^bgj.h4\0gU6i!#cRgK(V06TA&/+) lR#O*))A-3d(A,;>7MQ0X;X%04(`dDi'1q(J',&$Q_mp;U299-RTB,"QN?ooonn(f $OQb.%#_aio7?qdg6iC/1EYgkTW%hXGhZ:EqR1_F*M)C$/O?'K)fPCaE:_U?=j"qs 7=$lM=sYRa,qr%N0NB\I8]<>d_39X?5",1+$n4]DZkH`b$-424jT*.W?db>miQT"' `0YS&QM!dJoM8#?$gdI:8:)4%DM9tnFP QhP,b\?dGD37;+7Bck4l";O\;1+QW>mA%NX^;2,1aZ$sm+KdIZY`.gC_SsDq,WS9f Of#YIlPj..&`tA6s$k[3g]@WJ#8MnrjpMIpc)K*-(4^fIf,>Tf.$<(*EYAn6C>f*s n4.oRMYS=mrmkQLa7riVqH:i6>K$hL-NoV/O$-L8`tCNnKbFCF6;207GNdQX_$#/- pi`jZ5E>iVV15ipoo!C\?a!$%s8TSVo;@#iGPcFLp>l7\,>7Q6lIRO!^KS5JX$t.& /P,kOmeVuV-3!@l`/eLV_%(q(..q)De5)AUI^UNlP9m1M0?O3$:B"TJ(&hWDrbqWJ 5AO>JdA4'LV^8E&(bRQ0a>9jBE3)X>X%KT@7f_Z@mT3V#@`Wk&O7Gj9YDiOAE6$oJ I(pl.D\35P^_Q?QGlen["(dGLG#$adErX=AX_5bf8#`Q$l#S4D,-ZU2n6=fE)*;"K"nVW 1Xr@iOs_-9/JX?rl^KBaSLT\e_@gFnW%>_J6..Y_`\piJ0jVd6id]#`$C'>PUhS(C 8Vd4@i;]:6*T6rjT'.q'FN.Op'J+\K/\9m!XAN^;jm3/!kr#8!ONq+U\=8/D%r$=j o\i7A3`s;l1]L#Pk.s33[".c`Mrm$p\kW'Fi'1&/U]=rV0nd@C7c=<49+V#l?$_1d &!eg9Mej>Uh7@fErQEc/GS]bu^[9TpkWM2js*`T4Senn[+*e7rs0j#R&;1jZ*BJ`N &H(uXGDiPkQcp?Rs,k3p44Kr;"MY<4J`%XF^L>O&G,t/SYo!&N"m\BK]S7T6a0f7t '5P=1;]ZCUQ>r&0VL0,<0\IC*b"eGBO"T@/-XcXJke\e1dH!JN*r#PkKnf3=$#(?UmcL!U.c3]8c^e`lUr^5c(V-/K4^K!'u>!$Fq4(DPTCYuA[ gcT@n*sD*u#_N(/r?>(!@7e(S%KugmFL]r$#i^=>r`aMd)KiC5!oCi07Pj1e:_H]M(gE?1e-4!2u].sRt40VbWh18 3VEUgpqPuVRG2FqV(;,kJ-c'=e-00k_i'a+(&msVQ/Bd]6iI2Z5lcBhrrN*AM#Y9m aCb,rk*&GBeFZZ%Z.q@OSI\.e:0)ArDY3D /!8>"efk$Zq884,Z%+KOAH0.ko7p&>hl]TNHKG"d_J>C_#_'<,n[!r85@9Y*Uu:EO '#.\8r*it&McGV[=/CBiP5C)4iBQH=raee&mtVVVW_;%5jHX8a!OHF_ ^Z6qsJ>``Ra9'60/d1M03kXVj+%Q0tF&pRh bEj1\=9-p%./lTpWFPl0R;YT5,mdOnD>/k*c'EG>JLg^'pBX9j`:e>WN=_!WE2d+j(Ni rhQq.-g,i9OO6W]p-$$Jh'1dliVbX'Q5ukU_LFZLE5VK9]:K,*::N.of:ohK".>M" mL(W7/R-hF3O`k;p'RoE8B)V%41&n`5@aooDBjoX,J1+,LU>n_g&V&1J?scG!;nbr 4'/O+_&(dFkZG0;ZsrhBSm_IlblX_FK=]Y$4!6UEV"O1;FqO^lRQ"aSDr:NGZ$44h $VJ`3-3=+d+f"YcXcKQiC[H@o"\kka1?Y)qT53S1hC/BVIAY;BE69]=ba7#d6rj4@ 4:%=mrKt)@#O`cKaFiDf':)I=Ui/rg%c5qJ(h>[_7gN&5AFLfAp(T;TX[Q5L9N3a44opfA)=b\J\8Dah)t":o;4T=(C;>LL_lgVCMeI .to6AGs]^T(''b4Pbaf,RPXu4'2QK5-frR=G2Z=CcQhN,@o[o>PQF`_Yu6g_(7]`( ;5hbA:WZ\3(Z/VcWq4@ip`M\.:]hNlQYHluD[;I))UYCS)_i'd@Op!h.^]m=ZkCN( '?^".M[a,'%3c.=,77*gnr:Q0/>C:)-'fJrMHE!U8R<2Abs+V*_=%2G_7&kIMC@igNN2A)KkK%J( 8j'iba_AY"I&lRs^E:2hD_i6Gs%F^:X*(E!Ca/n/[k7RU*>sD-+1>a0#OpW4,l@mq Z&F9>JESp9aks3lJ$COqMmZ+7Cfp+):%.bt,!W7?Q g$W>KkOH2W(d[Qe$rMEL=m"jL`kb6deo'3Ye)^1SR&/iqjeIWcII?_k)ijuZH*bi7 QVShpcNMG3gkB7`dUU;V:>ds2!,;!a%%^_s*ggtq[-5oB'f`GVh'o^LJ;Ej=^#uBH ck1-aM>,Nk^r<4&9)sH8r96j"(BBg)d]q*8?[YP=-Pl3A3If1XHmMkuSVOD$0#KV= ZR)l,2hDKh5Ih\k0#5A5CY7epDC];DSTC,?pr=i.9Yg,f=lA(HM"!N?nX7_q;r8I_ 1;R6$n(8'hI]/O"G:b(I3ZqKFYBjb.q'XA_^jkNlC%jSYVZ]Tg,Y>k&)H]8-Jm4h@ B;VKV\81d/k_1tc40PE'0-[i27;SRdQ;0G]kPY-KrmE=R141l;VoWfI11^A_c3j%_ 3"Polej6eROh]NMi'fC>'F2Q:&*uAdYNDq&4eZT-3X"WQIdnlV(9R>XG@]1)B?@.k 6@BgSkL-bQh7-oo#:[Hs907M)'*%FKqS3/_W:1kps)B%Z.lm1a#Q>gVp&X756Z<'N !kA;WJPGHfGnX9[]L#fuJ\;=t#KRUj_'#=o%"WS=gXjZ<+T=U0lN/(eota]3^N`&: #5IWl%1P;KgbfBk2YH"L.L(8G?**A,bNln#bldbpK'1EHYr27mj8V.;3V_W02mP4X MuYUCp`1OQ#KXe-j?E'MCdVZ@gUq"eE6Z+.eaARH\pFW$Ke)&7^K$m?G.DqE;; [Hcf+QNj">&%6o*6L]J+1]39Ai3#h"[19r!5J168EBMRm_kqS8etff-O7cDY:.QZDId_OQOGs!ATM LUe&1K?>C?-s;d4.6r0C-&B3YAH@plp\_Mu>4BkCb%@*WT/Aq&*FJ>$K4C+*=b&L2 \,>\RE61dc@KBiPh\YY[14h%O#M[#V^R^bf'_^pmFmYD[m7_hhWP6"b>Mk#Ya4OldC:oH\F8PC#qgRS;_%ZEHh.&'s;m`D^f7m/Oncc(_6ar)R SqFiYa0a5=cfrn$&S]sK(;0,nA:_#dd3W^r3^OP_s%2;oJq%#Da;'.B\a__,o2X9E #l+FOZOCaSrdPj#$0W_r(U+(!,:(-h$cW.D+Z%G2VU&?P&H#n@YQ=nBE#uT8(;*&d 6(Wc;?a3Wrj_fV//3:2o;i/]r,QOd7.IWb**.[sRo`Y^oPkIY2E_2R;_Hn?&f*kfk /-XWFH1tQHhZnI!O87h>ijW77mCnG13tL4rcG;g@kPW;#@7&$sW.Ceg^cdMR5N@VD "i-Ci!I3#VfEW'6;Z)+7&0;u`HK$`8gCmfr_#cN3gEHQ'1o\M0^nh;2O(Z(2r>Voq qqa]u!YGBqBqg.MC*<)fdpAg7 "kt@Hs,(=XWcJQbhl[RL06Cq5(BFG%+u!_0f4A(8Bi$p.I@]#126=Zbr3%LQ\E 8%RAakLTg,%.ToZ*:JAEE*JD%\HTI[Nj(fd[c-r=JcalA%e]\[eaT`Q#:uG IR9l&;MA7oWG,7mBhY3tI">TtOb'1L=AWlTF5&8-Napj-J&Z=dXd&2QnUF,`F_R(/ Bt-kThbD>pp\HB108VM5bSR<:b,RGV\k$6%T)Y*cr_ioH^V#+7c%C?G*#'&j3WHYN$SYo08N!!(p`^&u@9&$3/,(1Nra# :gH=#s2biQ4Jmk#B8#-aU)W4#oh#BHOoM[Fg>c1[',8I7A;(1b]B.Y:h>cPYbK#+g qoM'^?iU+q`;a,/q"^r>k8V3d$&J;)Z[!S5^F]ma!.d<&s#4;W[fs3Bi Z8C.0(g"U:&cMn1Mk^:LXoSLME46G\%H1)'p#_$TjE&$*fcC<5[sXKW%biRnj.=6a /E-k7LN98$mQSa_]?K#ZRBuK9GPt[e`m]Uk(Q%H2i`BL*MOmh/;&:\b`s&)Vd9@/iKAIsBIhoM7*k$h% p=pC%NAL;!LF"(5`m7qF8()bU,\ZJJ+3ornRg"?BDgADQLa.GK.<)3$Mn#gS[HkRF6(t`I+P>nACZ(kg2d=P#&Rc*\`^6p!5K\j 543B6mTHr6LA7D1+,Bd(i'=1tWloM5XollLpj_AY^Lbs$Ujip7s*`W3Y^chRSc^qH h?KQ,`f?G($accd4arD,/P42@jM"um;"W)"TAe\$!V:IDhuX9]/L.nY[NQV,m.tR`6An;F?l(BBj$uG^jc?Q"Q?E]o+ Vj2F$/%&D.N\'n(;MtPS=0%,,BLUG97b6@R\?@!&k@Q](\j2ZdTd?YgNs>1,(rY=^ O/pimXjW-,d"+Gf:o)CWD-tdIDR"@eOZ"#]K049'-sqTqp^^Lp[UK4B/>,6SUe$K: V\E+(c#5:3Wn*.Z<+/)^%k>0,.oG7AWo+G&>U$AncW95kBu!dcPj:_=h2JJ`:V(2+ VA>*=OR71)g?eddKX-2jI`3CqTYX"cf XNLcB*u9?`"m1%d&8jt"+5r::rflpN&_('#31e";1Y5B(Lo[T8Tk%Z$Zu`('+:4_ktqUnYUib T8jWB*Qu2Z<^7ZSrb5a8f@qc>>uURF-0=Si.Kf]XGGpVuJ"k`&2r=W1?_)"1&SFrR CJtpa/*9(5s,-iZK`B#"\F;"5N0_M.cf;V"ZYue[a/kfMXe!J561BB>S3CK.4Q.k5Erl9Ha6`U8mc#s_ epDStF)'$6C+E\>,C"$g5.]t62IKZJ@Ss[L?ao@XETl'`n`3X;M%cN7dm0GnLgtn5 bqF=rMnX/M(;8^Gi"R3W1@Q@k:H`%drkF:lLB&7nqj/aehbH@g>i:jY!cN>*&d&)/ l.?[Wr!+I^l-NC"kU@1nM?OtBj#_SR4%:\O&7^40(P1F^YoH.95m.-QkB'rPTo4W.cUsRO_gU6u8BIX^$U_]G?;e's,.3i1;^^s&mFu-"HHsDuG:%"Rmc@+2@s!aocS` *.8e^$fCp'%!Ap"%WGNm+UrLQ=h<5p>\cKFpS(ecC6&ej[3kafY(qHiSh(R blOq`a/P&M2HFW(h"nH"gYjN@9/\p\i(9-B<$3Q.bf]+XENKK&K:'6W#PnCO@QoSVUW*K0 c[aN@FOKBj2tf:4+lZq]dDhmHFX$*')$qrDe@R9V;9`s]r.,( ]!%;_mIlM@eS)tPBLPdUJ4-&8N=3>"&QZ"S5TQRg^Abe^VS!b.R30TJacGCrdgofU,(g.^]ebDK0\KK+Bp!70WuBB4rY#YN9:Q9G3(PurA&Bi/8jJSDZNadA+'7,BDsW4mMTAV)D2(! GX5[sn=/,%(g6SMhXh]=#o_P.)IE+'S?g&HM_388-UAtQ""'TE9V)%+^$qL;r$P-A n2_CZGg9Fqrh"8`8Gj"g+l9/,j5*m/"OG_,[q+2pT4QBdM.Qt"fSUi&diRk iWZ,J'[IQnVh(dG@:A/c1&i\@j_`X"=9(7R:t+PM-q+LL!_Z^C_47!9C8b0nad8`7 b6=feqP;=1K$m1gW0DY'Uhc-hF-7f[!02eqEQsdA/s6TK%;GVpH2Z3fh+n^X?Ua?e KWc$fIhocl.8PUQM\q?goEE;q^;\u[e,sn:#NL7`YQ3Ho6er-[?jP_^:N-F,fSRWc n/o#Rehh/]&*%^NXO.RVhtJ07?1FD%\@3J$O/L"c4hE>-f'V`EHaN6$[qn-L6Fabq e8s\*\Du(YkR-)d3q8SfKECXli7oX@5J2OUr7SOI!<00)+TLD?f=hoI'jLb6:ULLO DqMK?de]S\$lqD'DHJ_Kkgj#/hmj[=MEP.pj1p5Zi8,c`VT,+iM/kN=MY>hd[-N_I 8)])5@EUdsJ$mkp1"huV-J4p.H$s=:S5_1Dc7"l$H 03$mECP6+STbCJ$)d]Z`?*4uj>;*]g-b`8!Y!OWFpj^mBTo/]oQMXIIupPO8a%dU[Lp*r55@H58Hh< :@TFa&,P)l`W'5f!jEZO/qK!FU?fR!^@nV(:O]_D0j"FO!5Dm)qX_/^]7%X_!VTb:;D?;1?i@[H5$Sj5kSmGrKNfX_oMTQ,K+'rYNR8(WB8A 5?.b7NM9E@]3c$F`0nqR"Y((.;CR-350"tAl'BN^b$]NBF52qhcIm$C.L(5^k0@;U pfZbAlg-dms$c>V>!U6]o@UH`d@uu4ld)=o-fN6E"MuD__>snF".Vi24dj(4S`id]$5i-2qpgO,KtpGRKpFVJEpk8_-&5]25UlH(S7 ErQsH!cf`W%#?7RBT@L2?ZR#:\VmY99:&nr;[g=8ChW?j3YB/^;U3.079.&)4&:m. +leb=Mu18>s/FMuY[hGYYQ-3W8NL?)8B*YsaXctO>IRW+bP8Wo;Kb5s4EqOGpH!?\ Ps@b4:O*D#s!#ts\oJ+,5jC93*ViDOqr>-p^GT&s==a/V$(-,&2*k,j263#\K6o+. ;B(t/5k+g+D]$R1mXj30E,NEr44\noH?PgJ+oYiV\\DnN@*>5GE4t;aND9D4*PhA9 fDZH;po]#U`:ela8$mhQBB2:EMo_odclV,[I&g\pZuO-hA'^j,n/nrd4_MG*"j$gp Q@7p'A0j9\2G>#"m+R$jO(mF3ipHPbXa7DIR?nW2E)YgL'!@_%??=h.[_.R9K6Z1s i&CPgG7&m#,&iDr42E-b4HLY_$rN4edF;F4EV58`%g;n4Im!5.C7I5`Rl@k_n=S42 lI74%18pSJWZr7-ON=gEp^cFmZu&pPWYaAG/_NkLg>?GYl]4m[JE:qFNC"7%U2&T>/p!NB[O/b p!\`ikM50oJ=/RS#dtXt;EIU#L?BO\B&LG%8(Y1n+2k>&5!q"%Wa^Q;^f)5ie?1,=2BgX6-/+G&Y$DKisdrREhsWk 14EpmA0&5+0ZaGpLJ"RIjn1OQ-$$V-fERgtGL[r,",QRnTU?qK7QD9KX,35=Y+\REs5 i7.YBD/@7qHcN#NYu;HlnaK0OFpR?aCg)Ahqp%?o[V\?p#E)&oJ9TrO^10*h_Nl4^ s,]j'"b;HFgGZ-:((G!oFRQ<#2B:Fp4EDThl90+Mh6Z.r\`DGrUmmZ'5u3h+NVUZf TlJ6(n>YU+)6j)V_:'dGPL"V'T6Ld:GiGU)-_=i#O%S^cPNZu;Uf424Xq_c(39)W* 89qG$A`!R*s,ps2ZuO@#IatB7jcFXgY>4VHjaCP9ZL]me#h2p?S(<)4'ucPRj4K&"&]IRK"9sH!gZ_nAQd\ i",@-K74/8*%[cNAobR[16B9<9\G%^`R@o r8P.7:5X[GTMd#?j9Ap(`eBIgN)\?c3!EZ?Zl<)8`fb:L>]X:E3&.TuYccZ#,TI!9 cER`E8]nch9"o!H^,a>%"_s`bC/!Q8^,iGs/$`&#k,qI,X\Mcb:29aPN&nYrg7.=a #+7><)0_%gWf3,l%22A,U*)b#dLN>/O01B5Y.Bl)W]!GZHRkrL/A&nY]A>QS4tume LK6%;0D+59rI\!XLCQrbq]>prB$W&1R], H"\nEnCP5S^Y)9TrYYZ2fVnTF"]#Esr*1%j GTQLD9`^4Q6GWUcXpG#U8`7&cHs^jfIQ^'neMIn@_!gF\ridO?QXsTMrL\6ZDc;2( #CkW\nE6>I^Kl?a$f8cCE?9L?ir2GrpTN9r\!`::V/jJaMX@D6jb^Q.s)TFXF/+\7 @k@1[D:'-G.-r'qUeNSHE1=^@X+FaFllb&A5jPdBi4g`15L\@Bc-nkqb:^WW1@5P2s%U$U"U1MZ(;:C2,rK:1XQJJlA Mp<@7:4*%&C4P4tK@atc4Ql5\J=GKi94,%Bk\\6b=MTbTqq?PiAc2C-p`cLQ0;@') a)8SMh?:XNQ@M(X=T)kE.!k63Z2f7Z0Uhq!^\l68#9c%a(P;Zm]7,R.&"JD-Hs!R= QJR9G^P(MbX1DQ2oiY6%3d.,[&*@lu41"DQd6sQQ"8jIHBTdNe+.%(7(*I2k=[;UB @oNWCVb[sb@Ye6a$?W#_$-b Uc/4XV$#4T\/^J&>Bps0SRJcE@%h7KQJW#+M)O9L0"J-Ba-GJbN53fRs@Z?`k#2;L`X s%fa%:@&4/CqEbc>M5<"!5f3W:YGnfphO#ODE\Bbm(#hqqm4W(`m.jlkWH@4C*.Qk F:RLTj';(Wko/KYEOP6oQb'SLZ;b'N&CJ*\'Qcl#RT\o/N=DWN6X jXk:tg\adibX^=(:Wt*V^1Dt^FkgJRi'1`Qn=L^!^17!af5,0)<1/8QL!X;*W)EHT 8t#Gm\`g35km[*k^<'MI'p`k@UQ$Q.(10;?`]hq6:rZXNigfg WROULlI'HA&t)K\'n/&p_)ck8>.Gf@Mu_lK_LB/ms.p;mjH&ms,=qQ(3;.?g"]Orb ](@+n=s+RP'am8Zn=KY::D;YN.,"4;"fN:[8c:JPf+7H-KkF`^]U`&KoM%5+tlQeISUpuT94k4S$A]oZI eO2PA8Dn-WM_#SMmoBde2\KG@'#*$hq!JFHa"4t)Se_%nU'oR#bB]9$_O7NN&q3nTt!c HFZna\^?YS(o)["PG20;P$#o5=Ng7PlcNo,njr)P#ck7MS!$V6U0u0=5b!?*gDiGi /3dpS!/A6sWh3_2[s<_;I>WesZB'-[O"&o0W\H2f)q2&255c[6oj-k.:"&/mm./>q m8p7l0+rI^A%"%b2P8$-?,ph&LFqrhZhB"(-P>.o.,OQ_'aW)<6C(Apk74#[[VSD6 rZF&?b%>nCZBo(R_DZ(p2ecANCZ:`2/t1@pflZRB&"U:-SpTHc)dqU@$idW$!UGgK 4:bVD'u"Z&bXI_IIG's\]U)L]0-]#>LSMPU2\BgaiN"V!f-">=c]6sq*u%[9c!7bu p?a1,YX$pOJZI]1E!([c^-,X-hR4IbEg_12^[NFdnPok`Fm/Cm05;JHM&XXOt][VA=`Vu%KF\7FCGM=7?`>.m\'*%"q2+89JO/lqlY93 I5aaQf1B2Mj0rAaDSHP3GT40lg5l!ZQhSX+p\8#=%bf=*3JW Q9t(hWo-qID:'0.)W!17=X5ju.@%dcBT-PA@5Am#YChac-ZH eJr$En:-YU^1Ym#A(Zcbpd$KgN4S^7So#@PXQq^IAP77t2&i?g"/F-dX2-BGJR/.- Soo6A3BLHh2I"s3%g(otVR/\DZ>/#UYLgkHX^UHJ7u4!)E]MJ,F5[>>hn0E(Tk+nE1k5tI ;Pt!^9f6TrldnppCW:Ls7S+?4RUnVhq0gBh"2s1RmICPjlM9=)bjEg!n'NWKf.D9F S_p93e"N$9ChLo0"4c_uP+.^SSJp1pO<^E2+\0VleYJF--^Oi&LO9,^#0(6X6eGbH *6VICg%>qa`06`5h:[1-T@bd1cOBR:(DR\O\%U"Bb_'/ZDc6V-]AB Un-(-@_dE"H?-,g8r[G'Kk_Si>>7encqGt=A/&`'((k%LLe6^nRH6L*[FW;+5&$ho *]\fJH"#dH@"W9FPIqH!:68do+:2_R*N##49$.RmbmL5A#O=[;T+Pmi'm[lZ+PjC9 mIX5GN'QZT)1p9<%7']%'bK.Sr8DAnOJ2OiJ8!f<@j`Uu%u"Ws+7A"#gY6eYTC^VP hWr(uhn'pqGD2\o$[@..i,080']VZBG1DXod>rBuIpTon5J]o%p`Jt'"n7Ro-K4ku Em^S-OKs7i702u0iR/1?O%*jXAog@A918KAJsS'B\(u^5"ps0/-iAqJs#EU-2dDJ0 X?k&`rjNoq^[I'Z@ojNBs,ZREJ(mBhL\UmnMl?4<.i/02a8,a^R."ZTK[30`IkaRj eHFiTCr2h-"oc^Z65r47V#J+"i6PV*J(f;B]B)PtRXb6FQIL,5-!keR*ApFXWZFp$ -p5[NXf!Ta-'/LDan[[Pr)d]"S5F:=GtETVH%Jb9S5j-jD,lN(=?o<>9mMD/=h&E^ZTgOQ@4u*T.[C>;InS\5 :0`:2\Fh%cq`8-j/Dr!io/qEn4C\+1Eqq8L#4O !-IV9E9`%d_!TeaUW,C`/E"tB@,@BW("=AO*Hd@UFJ$P9.rH(LBpg5XP:H6i+mtFAifGEo'ebHqJ)^\AksD7]_Udtgp1%]gcf=.o-EOpQ f_Hr`i*F:HS)=`pT8u@jhYA`fGFcEf@DD;8!<.W?PA@,5Sbjt0!J(7MTJK[#RI`8( (M5N5oNp*aR8KuO;m0?%[\K*mN;mQeV@b_WLM;-O6/,KB'*NNW@)k$Go,lku*oS])YX\daqR-C9c3<"4qIdEGsOPT#sC )O\*)`FSbA#P`LYjnA!#UEQOK+s`p\Ok-V($N+gCVR6sQD&V[6BGg5j#1^X1V3ib. 8:7a?YtT,19Mh-TB^QPKlmKO#Z@8H'BjZ6K!<'0HlpI[A8c)mmlTe;t?VsI7eFqeJ 8(-*udK]IgqVZ);")$OVj,#_1+"REe?Q^/BMZ:!@V=KaK.WI>aA.T6#\>b395YS=* V#p\?d?8T\SOR@R&7G:pdB,M0Ih9`::C=hcD2eg!!%1C',<@CRiE?6X=j/ts q#=^s:W<.%jCXeCC67LM9lr];!!,="+3?qfpn-oMPMr@/k>//bO`-&S(OEP[ICXBMk(+(T46sim(Va[JBj03I\ HMG9a#lAo&o#ntZ(J/DGB\PHp>Ls1N0,(d$`:$r!XBe8r]StORM;>s+"eD;"@7Us4 j"21p4QhcqBD*@C5Wa.&":UaYD*J:A0MANP[V0#+Dd0J[8(AHS1"fHKQ%YTQ0 S9qSfFraR'S'*^SeOM..7B@[;k&-7OPD$m@,>^Ld5)_#9q" Rmc,f`1=C-H]Sh_D00`E'-HdVcSNQ>b0/RPl"k6\Gm%1?nr?mo_bWd]&^4 /=KTh!WK9$=s4(%1dmHjn/mShp^`F)8bLif2W4VDl*D-'2L$4_O7msa)cq,#QF(B\ r\M"m482IA_+1\,g>G[`YRV2"s8&k`g.`Q@Eo?tTHJJe9GnZY]]^%O6:+e%.oe(^S Q7cu/UmliO4E]UAL&*pD9EG(;lmE=G7NgO>[i@B4)hA]2dhF[(j$K>(75Ntii-3$4 &)V,!VZHQWY>Yu$T@BqZ<@d<8.KK5SX-LomeLh`KY#ol:bZa0=Rd`@&8$RF?kh3>cD`HgALQ\57:Ed'0jKHT@?BF8^_L];NB_q[_^r]6'AYW &iN"(:r%Jns$o1jLjA%gr22dQ9Rl&c,Nk-T,74MRr6Z.-E\%3_WKLAaL<*`$*"N'7 (dX't7Y=H>N@(c.3P%sCWD5Ui<\oB-6*F=IA#dQ!W$X6!l&Cqo7PdN;G=J?CBS#Es #+(E(YJa$dcOtHR+qNiL+4m4eLE(g8lp-3i:eF3]2CL^b(Z:AET+(X1"I%78og'\j +'AT`J(t*EpjZuY^;cND(kY#&^B*j(IguBs_LKZ)&%qsm(529$FU)r_7Q]g`AK`03 Rhp$Z!NlVLSGs_CLEXpe.)j^jf`cEtlj,:o$is7V'R)C?X>ib))'Rb'n?@]I?oD5. \O:8;7eEGNhV0+N:PSZDCBB*;_Cl]"^K;-HrJCl"qsQTZs4e@h-Wn0ukWa8;63#T" !<3#EZI&&"r4cbSIPsdunpg@ls+``=T69aRejK4P01lA]Qk]B;)m';A%o;8I=9j]? YD@\5FbE:`W]8e>1rQsNfWHpT4tk7uSHoTXcO)F[>ThM9No=K? k\ZdPCWu:Q8@Q!FF\1]u2=:69*ehn27a.Jp/Nus4\P?DCNaKDY#N0O5LgGQC[J;"e !tWHRaG9cY6l:U@(P.Lr_(2_,eo-/k+IIp8!*nI#F_9*GGg-T?nlW6dL&Yd%NEUMm qKHcQG&.BVm>"POIVc#/)YiO>]CoT\&[[MN^4iWis$6Y_fC@U^iQF`Q#QueI$?.'1 ]*RJL7pKGMiU@N]?O/nV`V>KiS:RT@Hl'!b\M"%](Pi_`e8H6"O(K'[N<#EM4_J.! /\V^!I1`]:(1E=/bbO[^NHO;?atftH]H9BPEWG7B$!AU4gX70'U)cPP\hIF6-Ma6% ML^!;4\M5o3F0FHetMpTNVeaMr@Vdp/Ds7`f'BQ*[ulLHYC*looWUFB"V(2b^X"gLeb;gIu4E<77KFKg+":Lm2/Q5j( o\6fKHOd1TJ`//F;O1e^-FFQiGbG#(Ieu16A"D%EF^lW!<5CReQ1dF_qt;m[Ei9VLXOmB"_FFm1Au4+T>GR Y)sX3iQVhd[]I*Ok)HM6M5BtFE^_!!AA._BH`mNS-gi3lDA-*SXAf#$,HHr:ld8)C _.2f)@pHDNIT?n=^^_KX6'8oW"%<-%U8:=:^`UW.)H&/Yd]QoL 2D1K+ED9YVpu;GN:MX$-P*g'+_iube0DkCB'm2%h%]C0%OoL5C-'[g_1* )V6VI$Q.;BlVc&H4sP3#qpT=N"$%#c$pF0oH^5)27?a=.UP(Zqf+mHPG!<6coh-N *807dR39)"2rG^^JEVb`;3.6a*]aEsfa"5mc?@%umD>]k`]e?uIu$,n0ck[-mXXmN ;LfCj#dAh7Kd^=mijhZj[;l=N5co?)SH]N+2kVMjKLU)fK1:0>AnI#l)H/5]7O8tc WI^E>0;`M2,GYX#l[B2Ki`_@ofiAiX8gtoru^eR[fDruGK$2(.IXpiqhHeS DuTbDs'qR;/HGSGh?*=6/-Oqa#K=8N61B2js(S(E$kJP$G@R)";6l*gJd_6h&7iGC %aBWjl`XG,U0Jf=UcV._0MR._/$N>4FBgKiU0[!Kr;rUOnNl[EEt70\MZUY!(AuXM aBpjE+klt:NYiQ3Mk\LhgLC38'`%'`n=Ot"IQPUMMfHJ'$kRm?_tX*>rpR6=ID;?A #G$6,knEi>=QnA#K\t#Cs*e;DGDh'fk6_*)=Ub**q>C159hTn]7,mkqM5-@AM#Tp7 ]ih?eFOc6_C2#H"1mqO=@U)J`X%Kd1VHVNHg=FYf)H(D:PHF-`/Si0(i[cTibf_6U bJJ-KTI@kson!Z.cODYU$*_P@[S?@EptmpU`us'a36T^`dPbXkYB7s7@`NCrgNS%_ B6_mLA1(d_0R2_:S9#:^KfC(1s#b\r1'g/_R"+DA3UiF=SbapC"nHOtbJls.cC-l\O(- iQJF"Gjb]8htSkB46)%n)fOR@c_]gm$cm+Rf]UPAEM,3U7h1`E^H`P7!V;HH.):>a #a!fG5ceD9QZ@o4MkkY)pt(KeE?Y>I203mYJYe-&I4LO/T_F[;d5n*A;?3;3_jXm^ D?5)dQd-%\l`*_/O\,;Pp$f\@52]Y.e4-$$rNKm7V.rP15/?goAn:*p&H@f6W XAUm*_&jkNJ3T]uCXf_#g,c.hJAQb-4kKe\J!LQX;?OSu"8kZQ+-lF&LrC%]("6\? )?c^5MN<9*eL_Zi0#H1h$V0ioj'Z&9pe^_trR*uP5mK+RZ@EF$;&H$USG\or)1_Z\ ;V!Y;]O#VB^(CY1It3$VCg`)R:9^+6:?YmWnWjg7MRFA k0&J?abIYi?.KfC+Sgk,U9mGWA%0O7NZf8>iO5Og9Shdt\df[Ak.&d5H&0oPPnc-XZL9GTs[g@lYAINn"&]cZZh'gCi&Du#f\$ttH m@AG:E-M*Cht[e?FeF?SZ@FT,!#Oo@qaK)kOhe4WVH7JV/t'`plgFW.CEKkK88T*V'R" ^'Iqo']:0Em4r_\1l/d,4hL/G$QfU["7SPKRQL8S*@6?U+"sPP@g,\7aCcR#J6Ddi )-F[K+;Z+WLptXd1$aPWoYPtC9umZ^#LD()^5I6&Sn!P\':5t8bLYB;EN+?2FCE3X ;;6=%lW>SdSGtG(^R-$9fIB>:2"dFh9u*.9Dn4e(GE^6tS[;>#N64EiN;#e["tg<["^p>(9iF$ i4j0MU1+k_IsAG&rT48Uc'VO,ZV3ctKP.H\"7o+ZL3r*KfCY3Cn.#;^i53(0*BQ+F 4##nfSYAi*+ftarfJ)MkV6of8Ro_$Z9A7X8digD#]_`[=X*.+;CeCIs:Hitf\St6; Hs4!kN`rnWXlgTZ/fQ[olCf4^B^2sR"7RDRcR.8g))P+Sf1h?B"uJraQ1G729;]e\ /A:=Gc-fHefdNg&KVlPcB(`.d%Zh$D20,=gkJ5?(cE/)qC;YZa?#"*@lD\Vg3kug? 0gEGq_L<'c+*W8tpt*S7!<:5RUR4[D[47"j&<-dR'r!rnb-8J,9d'DhS4jGHPsM(s8BG'%gN&`[fDruM67&,#J4s2QM9:gF5jFq^UX8S +TMU++?e#ti6DBX;*OW.47Ym%l@XWeR9i@M"dh(#c0=Y.a_mu4DWkaf2YiK*mR&H4 ;QkpRk_ORFS16^f-+7,R32dV*C(^<@kMCE;"[?K'r:_`a"TQ7"$3$Q.JNp9n_^+a7 'nJTQo)E8qi3-qj5^uqNpP/qOhm3',29# oQD.s1O^#tFV6fb (bg4T1ir"JG8A-1#[R]6+*l2'q/LrbcU1_5aLa''>E7_KXt4DDXMJ'mUR=#ScLikn(\s8<]uk<X&a?]33#sd)E!TXCf*:gN-[`. 3mDH9`WH=-%Y-"D]5?fAo<`65qsaG^h7@l@q4)1Kr"7e#gTV\Uq$1sa[t#Lc)tto%)+W$VeJ`7EETIS'?Xc"82^!BbW3r5C%Vf=rl;9$hf6nu =\AY*@0=OMUAaq6Ep]AL'Au*M_h>69[fCXR>JGWAMY?t,BNG98qpe=^k(h$-;Q"Q& =OaO?2lMc!quZ[+s#"in206B01@^'K;0"[7!RK9%4-\3ULku)5C,?LWJ/u!.ktS1V nrL!M!r87)nGn'G=\(9H>plCM1DShT.3AZiLE!lc&#rNb0:._#TqbTfpT4*(,fG18C^P\t3$]3Rs&/Z+ Zmc\n!^O.6Pm$k5-8D8fNK2;F*u3UX!HpNM_T>ZUD8p $-+n)03[dlgarO(s3W+lkB$R9_>2F;s#l\ZY(,O's'^cQ%h"%T//%rh`;c_]_>c=; pVdR"(DDK%*[6!_NM:iOs1;1CRsY;$9ekV%1;YuMq>R.Ts820dA-%=9?VL%jMCnV( \U0sT7=WHH_rAGY-iUDMo!mrC8sM6F=FNA>D((=pSPAOre86%(kcR%L0=(fq:4ZTIJHj0%uC)AQT^[=<(jVk\ldQB9qgs OQ9!1GoP5'bd2/VC7IZ%%_ZX1,J0OG4!'Sim\>Qo';n.FB>HBZIT)%$Zc<*)VZFFD IkK+C.V.d!GlBgU#Bg*p35kiDcBF$$djQaXi4]P(_hY[jHS+U<:[He/*87[k/B2ib L3Ljs%]m^TFq@T!Q:"jlI:*(GNoR&oO4W`Tqt,Rq3",$LO*Z6Zo:C`@?%oDt-_:Po 60*OR5-sQ3JWC5WgHImTHria$F%(L7;*.Uh"Y^"&/)WWsJcBto#=AA*hMYJ'F(jEr ;9uu,i406][3%H4FmV>9j1"MTa=?Hkm5>?5ml?=8CDIY@q(m[DP=04"`N9fm/5da0 l1Z3]7;^Kpf[Id_P(`I+71<*`9^)W0Mb_OKESQVe=qTro[(Tcg4dN%Q!VKE.kWp`g6[s43a;LNZXZ"m8KYElZ[3-RcbA8JH&kP 4l2]Ah%2I/LThZS5He4J7WB;iDGjYMQ-70YEnJORbG;^0Q#a<23MZXZqAn>?:g41iHM*_Mm>;[CX\]9fbLNWLdVmqGF$Y]cNU)h[:&Ur; KWZlR]O97!B[EtOD;aX.Y_]-ks(Uk8(9%XY:^Ms3#VR.KW<2i*BpB3m.`TS1 &H#=;=,^jYNG4]q5MlGqIo%AnQ^H6q`9:/q)pl_Heh.jgQVC:+LIfAdRe`_i-%fA) h5V>UC71XXN%U)H&FdG;-+O=Dl@ns-@(UjV2.-7e5beYqHiY6*q`mio`+fI[!.]Q. [;o0)C.a*_"&usL^6!_'&u:fN9l1g!#*Hj$BM+WBnZ>]=$qRp73T#HoRSM_$'l U@Z.$@&I8KF`ra1'GQVJ#QNd_\d$=&,D9i!oSpQ*W4fu']8IG_oFJ0/d:`$ @sFH:ZO't71iFDIm=0Dc;IdY/ScjlVL=fb>kYh3:\$r0`*n;J >1KC%'"R6.jiKWmTfgb2Y1@!`p/%@+@%Q4OT&+EMGpJG5QDZg9M_ph(,#@8t`j3]2 RC`?bg&l%MrH.V:,YECb\LEPD)bm:=1T1R7cM'3?n3NU+P2-Qa0'8Sq%YaW5Cs+0. 6dM4Mn?+/)ctd7NF6^])Fl\U**6:-l#i'X_aFEF_i#fCP*P(f)AF7sJO>psA%PT)-Z`\NioplS+@fo/q2dK#mc9II=Z/D.bk" -*H%V?mV/rF/VU!(C-Q]J2[tOnm?\X]_X*s"`)CD[qRS$Dr/6I3Ukg@qBbDL4o7!B nR]MaC]EL3O2WV.1eRc"IA2LaQ#R8E!Z-C% M?DUi'1]E6o%KL[jZ%ZrgqTcEZUa6_rq"WSg%(s>:V95MNo_1&E4!u3?(Cops)l#P =d>-Vl0N,pr$>eU(>.6ABK,Lh)?BckjL/W//YIGp#JkeCd_;NsgsBm@q"$>B\E]?; C?78B"WZV:n:D[/E/dmh$K+Xo.CL["W7nH(^7s2oOX]D5Q`Q?bSUg`uUkT&THE77& N+Rdl[&@7lUK5Z@Y8gUrmZkm8<[jKgXhj^i24toe3e0G!Z\"rX4f)-bJeS2ls2CEh PRXXZ5ib/,>ZH.Y7B0=#CB8:Wsm2arf(])V6PY+VbK& Q[noi$Lg>hO;`Y@OYZfUZJ3pn[5'I1RHSsNGQ9oqqeu]HBH].B['N'#l5=iikQWnj P<,HF4$HoMS6VhR";Uu(h1UUVHM(6FI\gKTD?k,4f)2?a_B&F9L`-]ciC$fo3Dm6E*- SIneW.9/nfKtN$T>t'W^lHuVSdn<8k!fa!l@VCLb2ac8XY2B?[P46g#ZB)rEm`A7V Za@S"CnkdY6Rr5noDD>3"3B^MA4@u8*i_^@-A0\-T-2ss+C22O^j\n+5-FWmIM)To IT3m3oetsQGCF$!#Nk%^J/<^lQ[hanXT.2nrn@p$:'Mi2s3^O2\-q(!HPRD!^(V5c pAOLNpT)(^e@Rk1\-k\c;aKZ^W%0aCb:q2i(s*.@!_U%b::?cqD?-pu=LC%RTeg#$ 39C-UVDpMAFMEcR`[&33k5Ro3i:hs/Ilq`>o4c$JYp!02s5a[H0;]n1-iA@^nFKL^ #ihSM%\cZ]&DM]DJagoV_Rh#+Rr!Xs)W;ruE1BHY90k3",)brnOT1eD_P]!`T61P> A:T3U#YYO%A5)L!ERF4`M1<3?!r.8p+LtYJ@&`c)Vau7`?[95E30g[.;*^X&<6$k% W51+9S1R^4/(0e<][]=\Bsp9J-;P;\L<1FpGWKh$$;)]'V1li5#Iq?XQfDrV`a`C5n)AsF2Hg\68-=H5\Rs46+VSH?DlY99fbSG6D(3KfO-\tmE$X9:Q_=t(q %kMCW-8]]eRYY[4W,4#V"4sgNla34$d10MRD1LJ3DLorc(nrX_o&\[+c#uB[Ul2YgJ6#>^!WA3(XAO$qrq%;&QJH_kWYY_mH\u5GCV=K r86#m!:0gfQZS^Aj;+n)'0:Go'n65_PKG2HMM2WAUEVp'fE(ut@Z.m?]!\1KNQMQe EesbcD*Mu(67bQP5'Yke_ *T.GD!;E&<\]r(bHI^M7@N#Mil;Ztd"eeBpMTL+q&**thH]=hA[C@F"8>%nZ!@a)C '-=^'8iapTE/Ar"Pjl`t(DoHNPS="h(ZU?*]IZds%rUn69\Fsg-[tRFGtR&kaq;,j <$FV^MQqk-ObLq$Kuu[b.cL1Q;0f1HH0WeVMI,PiSfgQS(p\]1$6^;0Ja#cjd>AF] W`D[qjuKR[Ku'Wh+lp!AmBePS4Tn0L"m][rf>[OrU'DS6>Q)V32?iUI\,$WDpj8>/ ]][$YIMV^,rTBLE[oi^>aGUlF@6>n7bjSh[kX2$Vcj+-S0:N#O;oA$\s,kS@I.Im& s5STE!U8GFR9nA_+%i->DF'q-=f=eYQtfok;L?(30MQjS?#hAiAA(P/\<:f6:O(X: s"0',#6fQ5,5AK9JY,a.K7MK:)r^\9&DrNQpca&EpVS&d+*J7qX&IsR*W2PHK)8DuST)G`"Q:I=\\L4r!2f7*"lVZbmerg=hN*!YIl^9uknsG] 8+6CajHfg!gEfT6,^,UMf.%j48tRXKb:XP\J.^_.03/')PUJ/L.'Ad`YEgYiej*e= CLnurV(0[-8ol+*p[LnA"9G[c]QZml#TQ"l:%Z95*ISgY=N:[Iu-_\,bXpPIjkj)eON! `]]u;diL?m"IkAYU&27tier=5Zu7=FGNQq+p6\&:@Y6>l_r#J/n(E`hgQ!?/O/"l0 :+Y`;f[RGVldQ4I[J.L`!MLs[W1iGQqrU49nBPr==5eI63s#9:[HKi^+$"IV4nkS( cb0WeIN,fr`c(OH2sM3-l,-[]YHN9ebtXNu'NDOgLcQR3tQCd3Qt7 KMBn6X:kp&Fn3r3O93dP^Qu+qEPgR&;4C)g)fL>[DLB"Y%:*TIpg=-#2Nrn3UBd*[ a#7G#6`Z=old6(FeuA'3Z,Q4Cq8fg*[^TLMEVHps9gTn!<[&r)o6#+:4^SOf:UXo]:212O;H%f^f I*n*t)-=51UJNZC,^W[r')2u@-e5D6eA-3&^M-?QEF#nZ7AXU&[M41D8#kM3pgc,H0I/0A]m+h+$MIJ4Z)@,m85pq8<)q]/ZZH7>ci`@ obn,8+UcpVk^[#nUW!B&"8kFbs%1bh=WQ#0D,.iSRTp50PL0kiNa.8%j3('he<6FH(c0nTU"Ub=I:["'=;9IjT _]Kp)?PqA,9a;e&kZ,moe&q)*VY@$%[&VL=AE2Fo(dn-grVFM#RTXJGR6^a`[59"U LK8R/.2UK"b%ZRMeMBHbC2()u1r):W5d^Y=!m.ibWK70H+ooGDW)emYTc.",(mQ`j Q7Wc?ocu4cg,J,eB=sH:-k>YB7);(n_>g2bEe4+*8Imu#,A>LhF;]"OS8YujIthD4 >Vd+I1DGEXZMpgYIVEg'RIYnHEWPED<=HscL(8`FUce?FHL-nBj-oJU5$?0n0'A?@ m@PRCS15JBVX2?"o8'/DVHV[6H&>6T#_>'O$k)4i@m_+>lQJ&ZV0= Wg=J0U8.r11'.p!;Z+Rn5@7RkAb_[D532b@'%!!Ca6Gnh49&gjhJT=NqKFTUI%&c;i3i8Z;1o[Y1?k'e8%b"?bGC8#ar[aP95deNCfWaQXa[QWojk9&nNk^cK1^7#>:Hma0"kTe BYF?67^;STJ]r/KgjG^Q<2SYGWldSaHS)L5?G;RB[2!_TFZ+MP% I63`X#1qWW2k6eSSB#e8a*52:G5Wd!6fu^h<\@i>Nl%+UK@kr&m#)GCA^D(D$gKft j>@%(54b@/pR/p#Bi"9!Mshil^kqA.l?MPMHgJg;EgSk73jiT`LAJ]Qp9'gV4p.;: rS*Y:qt;85L@7"sgir`%SAfCfhX/5p)sQHJ%G:bC,ipuhr84atg9i!A]`?7[n#Ha< oJ*e@')6tA`^U'Ir4-I3BJ8Qa2Pp@@&/Urir$lgM:&*F45.i]K8`9W?c/=`EfWj`f \.;oKH&ZqX\oaE%F.5.2)4m^)0I7oAml@0M44$B4'1L+Y`CuI@9p6kt;^BS$@ce(2 b=iLp)SpIN[cZVGec29aHnBgA?-Lk=/.6\=^4',e!gA3H4gCP?YSc(Om>("ie]=HG 0O.E@-K+%5C_6AkDDo#"e$c'h>YqGj;lKp!6i<";fS/XcB'l*leVmbTU0?Y.W=C-J aiE)-"m+0Dc"_K66`1e)_*?:nSQNptY?4f(K!9`/YBa-]"uIi70J/j-W)1""=>V[t c^)j_<@ctSD;6DeX_BIjLe);bea&;&B[h#:.q]pb_2g-]PqGmjg1;LL"mh,bS9"Ft DE9U\HB"FVN'g'UD*N)Z20N^m!9St?s'ReO>)bV.N`DY4"nc'W5K*TFHHdt)-D"NG Mc`0?<&CFP2PF"M2ZWkHIFRrkL&L'nM!ZRs.a^;\?L.HG9T5:&u:l F/Y'SPe';Ieg8e23J7/g_ckt_Ro2DFSGPu?G>Ptd>c3NLWLD5o2Glqf, ,=$_FdSWmK\3Qqnj-`NZYZVo,+m3Lcnq18S(!h`;13k,0. &-9u[re'.kG':MR%EK&4d%m8i9ZdA7"8OG]i[Y^P6!0gEW_ai_:Grp^cZneH#IZkf 8p]Qips9H_JL"qT+?s+FZC\%9rcC/m<-_i*JmUQ,m)jkf7=Vn#2kmdEDi1W?U9k.R #qI3n4@7=NmYQ#O6O-.1@dgqK4[adYPC8mqjHun(P+pl-;[?*[%nTUe8Ps\A:gDJ> /bAnAMo&2/,IK0)kY7bt9nC[7r-Qbr"YV%]V[K"? $6DSADMJL9q$V9"pm57]Q9E"epbmbe"^KH.?PX3g/AOH`hb!T_5Mo7lq0t4Hn:P-] i;\'X)^MXcJD\P@;PLsA;lr6RC<_.+oM1`5e,^6;bp8T2Se35jkHZ3$ci1g50 7D72rh>Qq+FFR?cn?ho*6+tcFc2HZPWT3Q)H_o0V-.5Ei135JHPA,pQ8W'XTC?;/- >^oY+QYrfZRGjrKC[44CQ*q7PZ4].0iPSiCTAFUXg@LokpRBqKA-):Qr4r>jQo2qg +9a_2i#qiim6I=+rh'"\?(.^*K2mJQ]pCnjW+1nSm#glJ(]iJ<@`s.4_fPnNT)XFV J%kM?m5J@:S[N:1t5si8LB@#?nOD'0i 4`70VTt)l0YV6XD]Yk?YqI/-06C,A%^%IBCNAj%+E/e/h_(D_e?/%Ye.abr3b_CWRJejoB;d`cig>\<%9:paH[ob7i/R,5iZ6G;C!iX-.#$sL:DApYU,iJ =s`Qc&O,^k"/Q!):Y:(7^%"!!AHAu%cbAi>$Ggim;]Z`D[^\\kjN$d(bW>.>K19Blu0g.dY7n?a.=N^MnA 7'tl6Y$=)`:]N,P5\WL^*3f8ME.2%*nK.d=WtJ_F=TEDi8s]im57:Zs=J.S3mJn$, @aVo%e]@t&T[lBt5H.d@Ulml//=Fkf@-cFMWQZg)$@r/4B#0RT_5(s/Md-Sdmnq5B P=b.>9H-gS*R`/YVO$&?OpUF&bT"n\l6YP9U,J]JD<_E(4ZWap\qU*/73I+F4G@DN %7#B]']=Hs0cc2QidVLBs#$f*C\2gj3*\Ib*:9d5_4<-[S0N;@t2L.+3XdK ^]KZ@HR(iG`'om_:;rS2^o&XXd?XW.Q2PBR4pc6NYtnWbA6`T>SRSC#i#]&K&"Op4 57NsdpQMriOL,G.D]ekl,uNAH=l(MtfdfYE,>$]S=jG: hr([.Ii&#-@DVsKr&=M7s%.)t^jfVXli5VGs1@CNJ'.o-/H0&<^V`5f^cj1#N=>PSar0BQn3e.j[!i0Jgcm5EK%g9P0%D1e"Eg-R]GPjMoXjcX]U!jPO;r(>g_X 5-,C0WY]p9+oq-4H8jfH55t$Co6n*/msBHc+THYt#bSI9^UB\ LJ6[%>'NmA]M\U,8c2#`peA*59oBkPFs#e$ok%-78b]Ed%I1E^dZmjLNFPC7A>QCq"%C850)MaAY(nVcnBMg]Z26(Xq4^UunAsEO@+6hJgD#gF?$(1kU-N+j.V.,!iI.h7u 2T[.F05,@K,Va)'KPd02'j]H;8&C_2B0L$5pb$:V)t_s)VB!7,gB%b5'EGoALaRJgFk@"Q!A:bo>s@S&BWE>kt[Q):&8) brWZ;]NcVur(HU7$aTSLdQ)8P;_85+/![6:<33'"_NbB(f;`.%mJY[]?e-/AA*^K$nGP5D#sRn;q?d_S"uoeh0*`lY$*tj ^oDQ.=9--dWANa336"7W_ts^be0!rE@RT?KJ[tabX-gY\MHCWKO)Z 1IJ.Xi*S7><=DYtO@lE" n4-8A+4u-2Uhk[ZCkD+#TiQ1XAq$K:JJ(uaO)-"OS<=W#1K8r]57KBU7('Fhf& 9ja?4!.u9.0F13.pW7Mtc4.#"O0H]^6Hs%]j)q\<[F1e*&H&Fpl=<;Ge&*UP@:Ve* :f;V<%O74.)GHt4).`pih=gblJ+=!%p1a;ec(AA%s+eETcN!WCJ;h;GE#6#Gj;%E< _uIL<$bEA?rG*XN48@jsO*)`Nn>"f]A))Y5]'(2f5K81FUoRg&W)7H:;,O8X<!YP3pflOeQo-2O?A po6dHU/C-=.0)E.'g/N5\ni"-hBI9p.fQGRltqO1f/f$XmM%t=0(G"7,X1LVGge,3 Y"eh"ZhW:$Z"p6#8L:m9k]3@F-V&QIEPF_@VBK-J/5.W[:c$Qn1YkDCgYT0ehQb7Z _%,a4$(BQY?JP:Iht*DmnK-?oS3.3g+,)>;7BBf`Xe/*kSb]%*cQfrtrc8kVo@G.u 9>>a'ZsJ0@_>i#/%bI*jHGNV.ih\:E/I-N>n3l4(l1D^7jIZ%_^F">*nGAc_i(Am]f/SU7Z'?)R26=\$c=I>96oruOSs%[6eZL`>O, BCXc<$_MJ%[;b1bHg&=-ECX"Od&$KlF5Qd0rek\]&^pCqL)2J7g#V #L;dB%IT\Z*n^smfT!Q7S-'S;n`2qNE.t_;/Y9T"X]fjj/#-WJ,_GE45WTcLF`H#s!DLZD8c:Oi+;ZbYHY>5kR`FG jJhN+n:0>on'#edZu7gLA3G6N2Z`[9(.5mcFfhMUof@p#V\D`'pfs@Z-Xf._,DtSH'gVb+FR!>DbQ2: 'Qu.DB9Pe=CetO#o'(WA0RrLMH2VjUg3OHgruS_!9='(ANOb`h];=2jVV\POhRKH9 ]V^Cg!01geZpO;Y>i(-Mp+uO"6)B/>NH2i6S8R_q:(9k&P)]251]ZJ8rf\ViYZf_I =ul)%6EO^!ULFjB7W"UCDZ]nkl8L=7[B>t*K+"o+X')6U.BV#Q,'Z`:R!Sb=:?dFT eYE]/%Q[?7T@>K'kuQa._Lnk6K5-)b)C8nG"sLcGn:+7Z([d&9Mm.W'KmfBn]ip-9 1^c@#3B^OL^"PpTQ`m`SMDNHPrDSSHE-J2eLU`,tmS[&p'h.)!!QQ&l 5Tg*e8R'V$h*(-]h>PVmO1\usI_#@*6g.4YpYN=Wl`=#O;=NQ=httLOrH>$N2T>&q H-M)sXbJk'-60[Z(qqhK_h&?eD_Of([t(ZMV)MRg2HjYlr$tJYTN[7a4T&Ea9I HNbgDpa`kl6\tQ51sX,,?HTV`B3RjeR7D6k,Io/K>dKe[lZeElK2#"[FcPL,6ku4" .J33aME[0KEoa$!ZK!Ner-8]TFoo`;O%IZWVe&?Nk/Q&YUMY(IXl&W?%`*WaKH'F\ 5:k_eg!=#2rlP`@_"BVchqn8oir>,E*3K@b8j0EXLYf`fn/iG8#5]P*<>o9FD'es< ,l0MFanQD+`jcgS]9^FG>`3g?_0#$>[btd;8@_o^V8q.:<&X&=3;oXQnXXjgWu_l\ qaX2LNKQLJ-%@XC!rd]#,E)JhYno:Mj"fs%#J6I[XX7G6Ok<>=2W]i']eR>LN.1lg T>S[p?t1Rg&J&^1)&o;["-2$<'/nj%NI,*_Q`urF`-ZJrH[-H=&0Ecm5&\KUl,14S _S-m3IQ:*t@S$K^6%ojHQ/:t0!"4&..KAH5ohc+m@2&Ip3r.`W\]69/J:3+FDWUV= P[F/7J(1A!qQO&kFcQSBH^.t2.)"nEJ).7'\m=S!AqfE-ML5$e)ccIP-$"&1o&:XS _0!qf7(oU&Zf4OA]HC_cq,^i]VnB0+1JJH YdtLYE&VlR.suY%;Yl?Wni14nfIgsbLmD*8nZt9-dk^Khelk.d'-NY^aQiIaPR]U!o3jEg! %-.Zm,7D"0hX[8l%[[J"mtE)HOXha5o[XJ$Gc\T'-k-W")G?I&B<%aeVWqAn3R]Mg6^Xg)9[?5 ,%OX^r5VV(nC=k#Q.*]5>_)jMI^);M(_VUn<_^c7orD[6_#G]D'`Y@@2_CFubo)gA C)6mD+mat]U6YnEC?EcSk:c%a0'\eJC)>.\QHU84c^C$B)AJ(Zf`JQtM-f&3#.&o# ^4^ef*M`/\F.^Cf^N=MbK':%Md=W)W)mmo&Nh*ZHDh,eXS(=`H26L(?bo'L,(t:1+ "97*kbaTr=X+:3o>qTKJ4^_5GCg&BpjT`MMaJW-#tT7c`2]6,/H#rsR+h$SJR>!b1I6Tlh[-]G-Lc]NAuS3U'X'iD:tUIgooh !k[_(>4!TK%U9"Mhm$a:HqtPBR,F_^MX.a_(NT[UD2i&NNms3G),.j7!,FL_@&(17P'p>'c#u As%Eea#u0G7!P\,:dt#Q_F2G7'SEIqc,(/6%b$T3B['sFE"\_oZ#kg"oAXG/Z*p/> leH/(YQ2`GZD3trU><,L4EJDG60p:lS5@;t?Y0>3_J&+q=Js;dqeJm+ N\o5$9RRLCCTd0Zm0^8g)WcSUq.D:DpGtheoasA,+oIWrr131>k'(\do8Em.d_>S2OaOQ7nS\&WR[M`X2d/=.BIeF6?Fl$Ag_bB.m^HQ03sX+=UgtU#b?AT21GVP#E(LX-FP.r p0qVW$[;5EO^a"oN7E*oHZ'i@WmSbDtSW[_K,FmCS_(S*0PcB?%A5 #hDc]Dk,d)SeKoO*1XHUPM4j&I:@<]*,k;/E;,OR^i/cD54,B>^:sg&]rRmPbYh4hDLWPF>^iA.>UJ][ VS[$_eK\)IM^_Ft;09oW4e=W>M6 .7aL502:nBR+XYU]&Po_m5f3*C38q>fZjf1"`WoeDs-cVQ:F0tF<+6ZPIa?A15TGm XR3DEX'0UXb50hNC"9;)NC^[#b+N:jXAl:G*`YcHC1^9+jIu6oXeI,:g1B=@S#-WK 9!q:SoI=cF*,\ZhCf1@D^JHLLUn0cJa.>8V-;mPB9l&ocC1PV'jXfWW9/UbPFhp\m (X+?S=ujH0l(]0=]pae#.KOA6M0,IB=74ptp73gU:nPZtY4I ]PQH7@!6D+lM?Z4j+MRn=MVRXc&11384b.e.X;6;,=]WS"pJK``T-)l'$JEHS!kel C8k5#ZumDeNUR0Fbc?CDjV#a?YuMh%]P>ZtJnJ4<[;Q+@4#V\&BFXRYO9/Z#>??W^ %`A9#ZQas#RE26,/-%M=;__`]-A-f]aM*CI;$Od1BF1kCO-u7A(`*T`P`46qn7f9s \&L.K/KWjqk1c-n=Mgk]PZBU,:t9>]K";.g(3WmsG$F-R=`HN?\D;<3pgp^2e$SEf WNDJS/XG)_VJ3H8WE#fEV2!2,!sUfJBuh\[Aq=>fA/'bnAf?ACoRkf-!BGIT=o*Rb \iuPYI[PriBnh'fSL\[ukG$L%LT?pR;a00BI,#7[hDIj?/Qh7^T].CBKbIOQ4abdb r06G3$;LmWBA!LJV&%8f.qZ&/@YmN)@)(JJZ,SQ,c6fU30"]7TXmC9VpO#54coH!6 >9:s?2q]r>acaiS.:>+L0^M(#M7/KIj>$!]M0=sajM]eba4]Rq`gbFU/CFY/MqWD7PO?s.\bR#g;F8[peh`L;"O20S:c T/8(5gEus3(P23O533_,o`lWX/Dt`"b',)[YC!7@[8B-#7Xh7eplLF$A.[APZ0.K*2WXX9^YQF4Qs8%OV(9i:Kp[j@VX>X]X%?)DG5(D.n'L!'lH!$WbVA`T, \X6#RSrPh?>K#D0m!n:bZ$/[In&:(?s0b9>^`R[QWYqr7Qo3)+f1tX5:$G\0(tC5W f?Kf78e!8jFUCW]$\n<]qXsIUAu.b&i4mp=@`#Ekd]s'.@*5cEA5YU/<%9RS'3itB /8N9XWWe\G6JM>c]1,=)+@gsLJ!SrImY0=p!W:!_9DB8Kj-HN.lZ.M?N8Oa[^0R#N Z$(_J%H'H_=Z1/#/mBR#"S`KH(CllJN`qd1fiR\`CNrTsK6@tSNg56?AOH0V+Ktk( s.FL;QT:/B\DO.d?5dc2l*2Z;rcd&XpGs"2>NL$1jP2GSQ%gtbWRbQ[)6eYk&EfAt 1WiEp-)QO<-4**fEI%DCC$G`Pg4#\'/ajDHM[\-WTL@=OE@PV<'okd6SVU*+&HY84 ]LRLb431dSbt$1)?cgJeaTF'o7UIIfX3.$JWZM/^Xs#:_0rh/#[Jc"W'.U)I/+$8N BPI."TT"2Plt_Wlf4^[8Qcr(*KX,YBAV!p@UX'Z0]^h8V\OlMM,hm\^'$btEr;VEL 3UugYIp"ft#QEo)34#BA"oM0q+'!c=)udT'"9j)MMZ7THrYupZ3g?]pYVXT)[hj=M HM\aAo0RF\)J(s_rt4Ygao<'B!\;Ws.*eS=_7c;re6uD$@8Dfd#Ai`:$_%UE `\1fWmT>)Vn`+r^2pKDF^?E@]gPpX46i*UJr)":+_bLj.FXQ-j-O0FOQhXE" l&u.rk`TKc-8+c,cg^-sk!#>R3Y^KXW!VqpEe;"Vei9l;=OK=#.B_qjGk&TYGfM2*kQE(RJH)RRFRVDGrC8GlnZ)ZjJ"6Q. r$+`G!bS&0c[c6^]HZ4E.)7D7G6(5;p+M@ho9mNmK^O0Xk<58OBJU#fhAl*3e-/,: GV[f,M;j[BkE\kcKD7ZhkY\4#j_i0/#8sQaB5YCT^ADgGqSV7%pL7327P-b06@0'< #fbPSqe*i/?=UeN*KU3sSg2u26ap?I+oBoWXU*a(mbP*]`VD1:.@`/o64pM'SJ6[* PH$'a17gOrVj7MU([D't=eeS?^1s*)P5'KW[HOn[cZDpN4k^3fmKD*>]7Y&t,^%#"I"+MSb@#6k.XF2g)d#*hOB @\-Uan:/r\B[!8O?s5$80*h91c-%CK'u5 95Ld4r$Ums&!%%MeOjYX;<2X&+'$B@.gG?-b`D?;T*t%%6k6UYnuTu(/P6'C+<:CM OCqiBE2XY^WuSPs#7DAiW.m\?(X.I."'26Pp03iAfHFT%$g>!a_>d7-heAM1CmgaA)N8-AYocf`mM?n+Z[,"g%p86g>3.YB4;QM`[[R;Q9PsInI-_U LJ^0#W9urN2h.!s+5+VolA?kU#.+X2._5i*Gm2;f!,j1X/'>$O.P=e&S,u^H+WZA= 5+AS2&*@oW0rN]YF58^_`?VkBL"#>2D0@OHF=jHc@b7/DWkBrQF/+j$r."P2p+--;ZTs;( s.98$o&GH3n+aC5@fM=L%/rdfV>cOurZ_f\9REh@,D,q-o9k%;/:U0%^nDVE%_.Oj OU7.7.EFLqa9D?GT'0%hFM=@+d$&=cj-WG3oN/)8G8mq3hp?V_8,^n&eLu3jh[>]u R#q>V6LGAJ`1KGNhiD:)NXu36+#RQs]$Q5(P>d>%1"g<`!1;LL)i/Xnc)$o0aPB)9?(n$]j!gL>tt+$ JH-JTBaaY!%IB:%_T2&^&)540g4B0T&%f',HE^1kYYY/$cN]4cq7cr3&sC!G;*_l0 ;aFenhbP6W]1M:s'9mD]e?=Oi06hN0%`uEA9mPSfh7lG8Y**!@QCGup!rdBu2&bKH b9K]k_3Vn:Ud4f&5?h(on#B$s`Nu+$R>Znh>D\7K&saRdcTb'pI?M&6.-^F+C[2"2 rI4[m:<_KgeEm.TftGJ;qk;GTIgOIC_-aXp!n9YuH@o$7T"Rs"dc!b#.M+0>g/7nE VkK$a@Cug\1'Q_HLI[!bT&ss_)8CnNbG !;M;#ht2r4oY1>6N*lZ?ib*f`"u"ngWFbJ:VXV=kk\:r&rh0_pmJsgOlne=eJ**1! />N8R!K[J$T7g%Rn!5KhU2o_PaSl@ZMh($oDpc7>UNb#oc8mm@W5c*IF*VfhZDbgm aDNF@,a\T3F/`JK7(5HchD8Br>7[:c=OabEZ7Eqo&XjjjsetbX4 ?R!j)O!ppsO/7]?1O(CN+o1mfjWoCl](fD$XBl4/!6^,4s)R&tN)no#5rCcpegph# Mc,_,V,&PK9dQm*F=mf>#P])a?bYj` nMlVkP,%&IH`f_?NZE?1R^VV;f$,-Wj1ltk.@\g:=YN2'T/!F9cmo.lo5k=is#e1c M%'8*ZSJ4gWPG;tA6L-7X+Zi^i/\-C!n20h%b.4BCfL]UJGQq"/dTZ_[m9"-YUG;! !@!#D5E#Z%;NT82$lf:q@FCieb->8\=$:;$#,m=8+"REOJ"Cp7^`OU)CocJod$RN2 n6\Ga'09J>[BDnL!9o#$on[Gg#_/^I[eS6f/TV5D!g^AMmR*:r!q?<%Zc2\ Y+4f1lo'/eRqp,gpS']%G1ATRF[0&Oo]<(UO)cS\KLm[dF=E#ic&[(n96B/ID)j-T SG\mF)\Bel-Mq0F+&BdQ!.b+(r',9(fj6?og`9HkfV&lVhjj^lF7%0BX_V;DZ/C[E i'6K1F4:TmOT07Mq9^./kXiKRIOCFG*<]=H[^-$L+Ir$nPCrpkUR.-qkb+._-W"Q^ F()._=T\*MV(i_[D_oBjRjg/+4KZYC4MZ5O[pSURq nGd\p_RG0MB-#X*#4+c=[a2d--XdAp)#l@bdu@=:6/`e.VN?WCN#5@/&h-qG4I3"+ V*d:_%-))2Kf[9VJH(TEKJn1qJ'g]$+V7k=-JqJ9%^H?nnk&;:P!6#l5o/tK2=0un m%`n!lXoL+/)aJIp:;:AW!gHA2gs?AK@lM8`,Bmrmfhe0M^^k]a?NF]5X.t@J"/RL n#*,!Rj-hfIY.EUM#=*"$7Wck?HUGLb!@7`Z^S1'.R0K-4I2u#ajRa9CJYpe!rU@N Zq9es@es1S#LUtP:k+-r?[lBu`B$YrQaHOD\TkoO5"M&%?nFT<]mGi]k<>6=n7hs;1^*@H k!d+gdpj>0pcB;1gZO7!:Q2Hdp"qqn]R>8,E#%T:(_VD;ZTsktiCEAZIh4c?k7bJ3G^ba$eZl`Z\b5>9ct"c1#3SqkTUp6Xd:5kiS3*h4,Prnhj5 hfS;@Frf4Sl._HQD;KCWfQ/"aTlo1rDRjIf5H/"I;?2p'=gL`R$(mA0]jd*>iq'*` Z9TpoVofiSL`KE+ns#;*l<2Rs"cN4g.n5dX!qW(I)UbY-)OKb"\_4VQ3m&Qd`@j./""j>'!&A9'ppEE=7kG_gbT6h%*ZH+2JGBd k_\d'IBPs3LA.6bDd,);fJ[YM2;L*l=Y`6d%H_d`B!ohEoI;$ZLHGXP]Kj):9TqQ8 SN!Lh*mr)nR$CHMiXr]+G"gGaKeiU>sIe*?+/lo ,IX`n1FXA#a9VJBo-`q*,rV#B!E4N8VX3V6hu\;lM@oFmi'0nC*&9+_kHaA<2(8I5 Wts1M7C5,65;42*"bs,%d&)>'%1&OCZ7-m"/fqAK)6tn;Zq'WS!8AZFKTdpWnPDpjjT?4mU9)X?n*ailjuF&"[T*Uq^15k lT>OBkTl4pB7Pl+^T*']ME:&u+e6UO50uc+hgb]>q%b f;#@`V5VXqgZDJ^iEXgq>h/7>d;g_Op0pq1?V">\Kp"ju@[:;>P'%Ac[OAts.)EGJ _3rK>k:mutPAJ#o>fmnptu#UreUS0*ArF/l3JMJbMn3LF-NL*#l[E0BQ#gYJ;1BNPT1*V V]CU+j9S?dF9&QI*T>P5&18$N+'2n;ESu<]bG?qIet$V5/ZR">1`s+X\_0Kk: +'XYrDC&b=C#gXXniMPi=65[uQ,Ha(W'Kt[FkHR#KNCkNY^hegYYRq `kLIFILqZl&sN>L8cI`aktb4:+/XmES=tK40LPZ>Benn-C!mO@"OQlVjDW#uY6C0: a/H3=.5*a/nKFG&;QeG=L0=gL].V*r,g8)(cn`f%-J?E`)'r+dKL"^r5hA\:O))QD 1X*jkXQ`6VV>^1C#P#-IN7n0jV>ZXJ%p5k;N0T"ue=uJ^q!:c6,R"-lCl`eKJe<.W %7EWEmfuO\$c9W5SJgte)i$4u.-OO\!id%NN3WPiJF*^GZlO*TLg'kBm)&5ib$J:J`sBC8pT$7$,N,^^]@*>#mQ &3oIE.t-b/I4':0a]0crS71IQ^^@aq[-?!6kkt3sDs?,hM="7>(&+j3PMBW12huW- S)fu'oLL4CREsoJ15#ir=W] ir)Ne]ed=u-V&>BqDXtV2JCoN0)_7l4^5)&gMVGOY5S7cKD1p_ck;FO_i/#X:oe!H W-$%h*;C&\s+G:(8.0;3N[Q7FeX0hr$,_Y*@nI%iAYr!]F'=JXY?/)A=LtG4%*Y%Z j"0D[//si!BQBme3AVaiqb >pZe8H6s;H9I2Zo?qrLj.N\nV5JAral,e?Wfs kuAjgar_)#/4BfY[oh$5sj-X#42d@prc]h7NEr_CeK,VniJGp gN_]C.0V?<<%T*#kuItRd)pn%p\r27quU&HTlFO[B;!"\<+m9(V)PY`8N 8+VoV NNWN+I[j73Gt.J1Zc[ccZr(lTA%-H4,i)2_sj$8GZub>?73=p1u\U"FltAO^C<+p.fAgb@T!Cs%O; &k_#:_ff.XK+.%O*:g`;jEHIemhB4!Q!s,\@dhlu"d$M$5&/&#mD-I"7JjsZNFG,2 PPu\u5[sl;bGq5GpnVHE=k;,K(&jiEZBrh%9t& 1:m0XkFO$XIa#BG^mmJWRb:K.H]YVEQa$*9n`HVAQ+b7aFOX[KdMK;r^E`lBme`[M Q318Q2nTDP4N-u&O+Mk35N716guHK;LZ,08,Ws"(M!nU`hDm`Z8d:u)!bbMWrP[(6 3WAFm!Ed./Ns&en!rd+D'nYr5+#ae!"8Tb:2SDQ##^iM"r(k1qEC'()r-oWr]]1do gDsD7HVi`#io-@knsb(G[.$1c%P6PcQ-%jgj(kg2M[jU5*3\7Bmb0lWI!BOLkEKr_ oZ4[dA%N5GKRAW9S]E'AbjUimG0Q\iU_"Noj_-YbGHUksR<-pIV9H\H\b/_Q.e*J/ R.V7-kgJ.ZWtUPt:&t<<:CKHI5'5,YGD"JWjkOpDhR2Ut%?hg!^'Ch>pDc7lL>ng:_aa48Un'bX!#i^T2CLD?S>jJ'Hlcq^_jHWGp6TNa7R Ps;+:4/L)ke_n_g'hf^mR8V3>.C"QK%'_9\W1:qmNuM.o!"/f+"8kG`)Jk60kB.,c C7-)_d>^a!*(Xq&G"g,[m+CD]hJH'd7/J?%GNh9&p2,"*)K-NpY8Gfa>6F_5MgD3- g;WYe753$O'MlQ#BQ6ORn/p#u)Uut8pkoRh-Okt:qLp&S@577YBO&D1/0*+l)Dabs !:ZVbWgU5sS[,5aF_I:dCmqVI&=SsT9a\q"nqZlu+G!ZMfR^sRhH;^M?&d1Xif@BY fXcfU>S-:T 6534I?kT5R2Fd4APfhZ-Q.+,1nF0tgW_]<`>dmY^YXd0`M2$QpCf9t&ABU2a=2"c;k)QL[i,qg\4e$^4+%N*;aZXo:q$n D\d_\=p%.QO89%W4/E-@-O8'uK' J)\Y$5=GIEPPk7qiE6JqPDQCf&1.I`TsKF$H9JG$E[_^@1\A\rhVgfbD82ibDcU7a%[Mu4um n0AfsQB/^-+hgm+.SIEl+F_s0!<.K$:&Ll\q"ldFEV/E#im1N^?Y2iYRmW_P5_#=P rHWtdo/uP=o3_SER0?t_c!eEfhoYZnRo.$-]nC%cfRrLcN>frKZ%@Y(16AB\P,MS& D8ZlAcg\D;n[2(]^+;?/)rq(u:C_Qi%!4,q4#n4GGrom4H-Y6D.9d=N2kQls4@r`W (O3e`mB0b@h0p9SZK3H?51-i[HslOcJ,edZIVfF7pjLVN"mlB4HM&>^%`pVb;-BKH V1Z"+7o>*B:SLn*!q=2^nBQA^VSE9$Sjhgo[UaND_#cO@nrO$r(4tttG(B\nS)/aD ^1)UWr&CJbp`0LA!.[:If5GsgE)*hRYjsRGf!C1%GS[Lo:Bo,5q9?\p>QFE;Ih&$q pQ_J5]tVtAr+EhIp+N/KN47U=ef:,[m91W#h`E-/FFNNFQ-&F"6^*Oqod\qrf\%7g 1RmHs:.14o'#?c"AB1RYV.!,ic1DmadLZ@:?ggAs!P37 _IK"Ls$?JE&Z(j(IR8h:j-tU4SV3W]1:'^QTbK'4Q 0`o/NmRGY6)Gn;\) bZD+=2LOH4HN:Kf:q?i[^QH.(i&,aQt'R"GR8b@PjqEJtHO$Eaupf7O[4AG;,!*dI$l:e dO)NA3XOqbh=*8G+GTHP7&A'5MO.^E<4S0bHoYNt;Olac)!Zf7q$Rc'Vl3oo;Oi8g=\?W>I/@@b!jUHU4BA@A76De%1'DREMhU@T[8/$G`m`iW&r?^Z,q+EtSEq"`Rp@36V*cbRS\[ $?c6rq@A&A'=WKNQbPZ>P^Sj'pm!^Cr)I6NSH&BSr\sbQTgPN&FFZSZ^m?Y8Ur^W< 1I!>4/g\@8PT4QO?@_Vh-7KP6[.$GZLX@lol'W,YTVBA'71%#X&magekT*e9UP6/* 'p^fE%IRNRHJ3Z2omllT@k']6e:*uerR7"ZT-b9O-rC'FJ(mct[$C8i2=YYeEANSV?H^aRp^PW[.CH9ZcFSb0O%!RK3W+#?ujYgsl9XZVNR q'^8ll\]*CjNn=;D;M8PrakUug$p-]daeM'HUiIg*>dSG*>OKg>XmA,?3(E606dO* >MKaZftBFdhe-Qed_r9:r3bR[G>@b<08LbM^NFo8/7@fA32?P!_lp`ReEUhi:BDV_ [#P8&0GiLGJH*+_TP-Q3$!cCkfF"@$ciQD*K:RIQP0Dr=n2+fuh]!;aGj%9s(@]gd qS@G#.adM3H^iU#C=g$ln%O:/p[F=KSJ4-@a1'9rPk35@4P=9>CpHtD`@41"R6e&M -_V4sMr6IBZ0qS?Kb'?uSjtHK(O$+0:pB<+Ja_+f"i7Y1^m8d)NZ7!X*W(#1s-@0X L0`P>gU:sSc:pA;44^O\lAAQQE*PD-WgsYs'l2mQN.AfI9c9%NL<+j43NA,YdRsob ;2>se,Y`(;TJJ^NfJ=GV5^ot9\l9tk7P/sj/OQV$#k7$!7=iIWOX$(rSp[V)[L4W_ :'U\nC#f9oB='Z$$Lu@J!Cc)0.0M.:d?KJjMS8R%"n3S(iBR(rn(W!Q=C,4\.tq[: VLHd[DB[ZWbcs9L*(VpK2"N)U_3\\nCZc+?AFsZ5O6X!(L0UF$*l)-WQRC99*7rFW e)EW-0WN+NkniiKMT1X6,o.4TdV%q4(MJg"NXZYfQ)"3O6TT%gH0Kun3PZ_>J13NF KTdL:!6>\p(L'kt"m$k`J1L]h(QNJFNR*o/Sq8')Juf!CbfeM;sGp_ ?s[W6GftSVq,(M1g6c,bB2DP$our1]UHfP3[A@m`TLG;q(K3OpphAc;1h/0Wj#%qqM<82pi(6O9eY9EtYU\)4$\Iq8N 3*i'<H7(T@W#OidZe!IM,P. (o)Q99E)Gh!!2lrLO=kKSd?U%S0^,C$"`7$[PjGMLdfEoi=mi%8r-Lj`$uAY<=-lZ KOde.>oUu<`OLY)M&E;@S5Tcc:TLoeHTqp3E_X2#Q,7`I% _!WLW&$h"P\YSDb`-83eYHFR?VdFV1^)s$G^r--o_Yu;Zr7a%8rr95krl6eUn&n*9 s*KIj[q.%0JL*>'cO5t%c4PMgb'bceJ&s'd4A:!tLN%3bY[(&==Wp"8TYen'k[\DX `TWYAR:Z\-V"e+@q:MNLF\9:2!/Wsu^Kn.[@oAt8Ej/JGO<`N+WBSC1b,X4B=a67C q+erCGI(fqO:8u*qSS]>]s-1F&bF>CQ6(h*DI!mXT,a.3BB'*onR;n#Y)3^@VOrSr 4Utc5:ZLJpHLYTU3<('iU-num!>4O4W,>DH_?7Q`HeqYB.-Q6onc-7@j3/?fri4QM N2Yo1&F/N^n!BRK7=?=jV;;u-(Vgsjn+]M!n^Be0NIWBbbE)dUSqJYG!;Jg.PRbe. "[LC$Q6?jm]/"MJAa68Pb]CO%]JJTNkMW4ah\rV6anGSB;s/e^r.Bpeh/d'VDU!TU aX*bS\X6S:JX/cI9HhfI.8D=Z/R.'V"f#AP$epRXq&jhA_pj\/dHFXr%:+>s2#kdL qU&mEmYTn>f7>NOJPE'1gNIFXCi=.D[0-=cCsW=C&%ZW6Zt`Ks2Iogod>_Fk*._:j 5V62^/:1&N$2?_5+$$D:fgcM:-3O`R_Ze2A8I]d/InhM4(<&,W?!7Lu7&Kf13C?CIjB9-_;%V]R9 lK&9[3!0%`OU`4$JP_aok@W)27iOu7kLTt[lR/4M /c\Xq(o8k0'5gN0I^BK!>60k9O(I:+A*#,@C=&ZehlcU5kHqN9]:r=^G,&IMh?^XE .';W3YW%M 9*_$15[timU[HYpcW\\W9*GTmJbeNOHI8,bam",na]aPQ[>>R!P*>:-PAQNH4(g0i c[5E3?KmsLm?nB#(PL?M"r3ED?RUak>nH&4NHO5-fQ._m3!o9YF%ue-'CUmE5\DH( A0okPr[1f[_u]l]pci$W#JGDt@pYZ-"TKSIs&f+0s7$dG2k5n45[KhY9^]CoE'i=j q1#a`n>>s_^A`b"5/17uGoQ`Bs7,mac%/ZZm*#tl`?,ZP"Ro3P"og$FpmR9B;=OUo ;Bm2JBi-]`Ae\NO_URg@_#G%enPY*3?'8uE#/*7Q<`j0$=(-3K61<`dp:K/$4s!Pt H;+#/EL#GQQ%%XArglp`Af)Q0J),oD0-ra%+l/)%:ABotO-=0md Tjj.A=L9h!YDP%lZ".]&9c)"(a#HOjYpg:/U<4+L\&DMj0Lu6@4UK"R8`LU@M)QdS `TI*GM9r(1lt/5c*eW9[JH]GBnd3W8d9c;ibnqoAe5-'0eg^B4e)Z#&;'G`7f*_1X Wt`oF'#iEJ%u$U4B]6.3)7_Lq.W[.mRs36>/>b0Xfrd&i2T cOVqU$F!4o[n6:;8G0:i,=qF2"f9;cf#l97dF&)03SnXJ!F[dCVM"63k?2"B1Ul5c fmL_?QL4])mR>DaMI(NKG8&ujkE/Cj,*sEuLKrd*L%2(H@f(C;7b!)-[t(s1E^#X@ +4ku*4BTDJaCV1:V1W0O4k\5RXXb%>"ZFX6DP%qR4#IFu$/!LNT1SrIZ#%NQ$l4BJ a'R+$.Qn\4$h-B^#in/=^`S"SI";I.(\!1ZGSYgI%Ef@bPSXJH+'b?@$[?c9qO-dl U]?H.:HUZc3]PA.r3(M,)/0=FbHB &T*nIOBb^;g=;Q7Xckpd5C-a6*5eC#-EsnY@(-Ulkmdjf>2NP!<6PsI.`HGA*G5,).3K?g0%q>=Zjr&^.'I< =N9j8Xt[fX+%U<[odQ "AN'"9NbF)9hQX@OI.9`:KZ-Ip@3a_;VV%.8(8biA61_Md^!nfHd3'Ppk++j!.Q`: @FF96P\W)#IgHSWOWULQ%9Sl&SEfpW=pY!+rkf3\]f*jFrt0PlhlVXr;@E(+F)JakE+Yan^(H>!n*?G/KD>Hsp`INUDbBa[]H%%P3<,3@k_I!(0`>kfb)iN!ZhDjk oiF;V^DTlHC0:;$@E%\i'bLB9aKP6_%r:%@\Q9)j<mY.sJH"-j7Bd ]sop:+,.qu[J(2;+F"sb"i*E`P91kgj!atC/%5'u@c_%n19pm_!5InaEVGV%Q$k_I !&"?Oh`uKAZq."L*C]Z:eWa!^M)rRSNV=*)]o6:: q>^5IAFIb;Y/_s/s'*e)GO4)9ba[2.RdO@ehQ^b.AT<.9m`'+5QFk`"Djf0-BGX=l El[9?JH+Z0)3=ph<)Uc$R6q",^ -:sKOUrk,!7>=&[)W391%j.,G)^Y`>"cOs"N@W"8(;Q,p'.Pdbe5E+])$B/DUW*W5 lK=d^5lS[&h)Md)]A:j=KO26eDq=T2<]nJj3$o F\%3DW59J(80-5QLN--RGt9e!$(dCO*s="mn6]^&+>tbblK?Jr_"WHB6N+5f@u:^$]gZDkb1LeZ9d,S&F'!p&m859Pe]j,q+b^_&hA%b3o/CEhAVi%pIek>VO.(]gE4"86;3Q3A;+H#:R3 2iQB@#2.W$1'ap3G`Hoo>!:3GG20ftB3RN:>D$,-__7`AJu5%V-Ks(NIe9Q=WD*QB [W:0;>2jX@g:_dOULi#_Fl>_M5+hO`SN2./r`$r/\Xq?0rG.`(02\E1H,7B=$k=*e. 1%tFJa9;S.kWF@-;be;q/"W=M8'?^rc]#-NMNq1gLpq$;+`UtRE;h'eOhi.&56u*, aE@SD&]b"RrgZe4:8eP!VjT;I=T5`I) 0BmWoruWh:>T-N)?!.Z4>['e)l!h3[L?o9:ZPuN?3gDnn;>dMbqF.Uc(VQd*kN`oMSSIM" !Oe7g>`9s"09Oso8>X=.\iLT[O&g]r-q&P?0p#!;=26"jr(kZ^!<6!iYRCUbgBci. &W4f:;@BSKL/;fD?)J9=S^E47H!pRu#QlH2_l!d8i!!c/$S\P%[Mk-BVBGk*r;Wc< qs4O\9eYJG;%PS/H"Z#]`TGE_c=PbjqMFqKOk$KM.MtG.D[@\SKMh=!&eA 5=o2;O'fC=1]&kDBeOf3ESS]cptW3cS*r(MKAKD:o5=IEfYNK5Q)?>JfE9kOp7=JS PQId\9qD?l(Ei%iK(tC2!5=El3-s[T_E-n#jA#+F0ET&b%\=&5(2mIkDdPbr`AZ&$ h`EIm]m];_?2-jjB;G=QJ4H:]O$K&KACZ8#dLbp1`rWOAH.8acM_CfB5*&qLcb_=C UR1o+?%@Q#&d\K/q+SQqR="?RI<8>*s7F[8HhVA\q^oGRFkcUaVqt_RrnB%W4JV7H 3Bn!s1(+0lE+*/bBd=T)Zd,AnOtbX.gVg!@iJ/;OmkRoe96qR%]5d1%rTJhMh>DC: ]M%]]`A9*Kh_JouY\;&PJ'/15e#)rLH/52i$1OQW7E>9o)Hl*8l(^kP;<M@[pt$fOs7 L.M;!r^R5.UX=78>R]W,HLg.%PV0Ab:7^<`<=]kB(Pc^F'^2S6W]!Z0fQ+KAhs/49 ?KFn@]LDM;"c]Se/bZi#SjX`%U5TkYVDN>5ePaH;;F]0!q\0\K<>i[maZQ]T;2sX& R2pe^PaTE;"[F!RaQ.,J$[$O0qK\`:o2;PZO[+s`WgP`AP9VpFMN#=So#;gV0J8eL 0*=q9=+J'ik3O$UVA4KrOtjj`M#8D(&6ma+hA#Qt?h!=\ncP),q=sdsU]A2CoSdRl e?&n[!1a'5g9kpuRRtgPZ.h-lbTWQJMa-ik0rN/8X8FUAHm!p>ITDA5Aqs5)U^90( RL/.(YRc:P*GEm37HspiK+8USf`_)qN9bUh8a9Ka6aak;#%)%10=ftjml'Ri$CX39 Z$qc5,47chP%QDjOi*i3''M=T3K]>0!I6D[>f?4m7lo\o^dABd 1SYt?iIB6D.YP8VhjF9-eHA(+r2I.foCMUa#K?0ZO!<*5E;*u$'&W26T@O]tG0L&'E5YqM$#ORu:,c([44`SG%=2I\Ze4>= CcRYt2d+0#13=Q'o60KTIdEsedN9g?T;BL+Su;R/"\&Cjs*roqnc-@AbQ$n:ikO'0 s*76@q#@f<`BQ"(r,J&!rIjI&isHk=;."KFpKAthlJrc)PU8Md"iEEPO.J&jQj\R[:B$#0a#2mlk99`+U(LLEm4$\an'[m#S*It C"P#,I?D&MHB3LKh42_+l*hb>c8u'Q2^/Of,gr#mK1B-;sKqH<=I"u_)4kAHPn[H:A*_3Dc&aY9*!m0n:S](?= I1BNrfJq/\EuV]=EqoWF0n,PbYkb&qq%q>+n;dDF1GD;"2!3[lANMepTf'6?nld1\8#<0CMo_'4NuO?oO4c^);j=F?C>qD*3tXc,Pp "@dH0KIZ/s%<'TS:tl\BVD[CL\':@"/6g[WS(B3\JH+hVQ0#D2rN\HV4Foi!80qQC RE\f-),X'I,`;Cg7 HCVQ[O^AlriuA:&U\"M9EL5u)Y0Fb3Hqe5C>UO%_K/Q.Cp8'GQ=;Q.Kk1q`4mP*VOSTVp@q\j_$#7tFJa9X C`h#QrUS%@%/u0_Hfe+I_74Hhs/,8;HLU]5nCVL>kj?I]gJRn!nBq'iJ`W8MGt'/7 TsQ+,^*dBkj,j8'Mj\R5GHc.ZP^h=&EdcR'rg%>+oQhGM?j1]lOM@X2rt!e8)`?LP^rcFs5Up[_#MG(in$Mn :IhAPpQM4l:j/>Lpu7?bXko\Eh%Hnu'lHtfAB#+`9(fO-j*sOK/]6HeYG@E@CR=7# #o8W`DoqLT8IhUFqHL6&9sXo'ZS+Dj#DC?C>@/+]^W9Q-SA+h^qu?0Y*^F^^=1\Fr DDF%G$%tR#d*UjLLd]NKFA=YQB2B^"+:pQRL*l'l%5^'PPgd=/I;R=%S!iFW^DY@V B:M,grbM6o>l!+FYPRP6T`qBtDUn4Qf%PJS/U?1VH'nhdoMHj3I$J Vfs=3!TVL?ZNh(URh/];>Lr^V`nY@Np*&IXZ$3kd+b:_i:*,-c*J?`"T@a[DHkno" :'Aq@pZXI=bdg*l4?T5jAe/Qra8uF_!8snqZJ-XqHe*-/XBk:$G3YI(Dcja$^>UOG $eY2B#L-'Oi/a?,!.V3Qr+Z3Cg(EC/LcYdomHHP<^k^t]n4,uj6Vr+:pqI7AKko$. D=NW[a9(/o%p]!TS\'*L[;S.8XBX7,)O8Pb4ISJ.GhKGnC0`o/PlF^POX#?3!V,') K,O7dQXU\h"INUSAs0"U]FrZ^0kU,"B,9;k&30OAB+XjQIB=/6@)]-867H9On.>0j ]RIu8iPW26kk7Km_W?Qr(J?%MG:-0s%VR,D<2(N8GE@+;ADf\c5p`a5cFlR4bd6`@]A?S&+:Rq_Tog$bLSS/[jl1%o!V5*55V1DOupH!`O:t%G_;50sehY=%'UR@o81UDM&3Z@eF-M qSA!TUCl8/60h%6@G=\Q3o3eeJc_N?,JY\%Nof;]:P%fkf4s6#iuKuDgbA3R$kI<3QPoO`Bt%^$]GDdl;HV7CAC!SqBJ-B75-0/UXA]bg]tb=X$ecbVEj7qI` )?4ur(4V8Ba9'*=IlJ20J:1h^9HZ&tTnJY=f.>8k?.C8C-`;p+ruHGetYs1`B&( ^J0)j/!kAgMq5]-b"'^+)?38/$H+&5@]5`#KEbNYJZ4:lcX=$SW!#XH^sXlD:]f_! P]n"g2aT%3KuR5O.JB-\JHaO)s0!(?IH9PSMJLTHcSFV>ga@P?c%#'rXk:C3OWaT% H:71Fdn5+[;uWO[)=`2Zq+jnRA,cL?\* >\*^M1OLiq""ji]%:e0HUq'b[%:O'n7p[Pr^.hmYQ*bWE-NUnQ>hp2KluHb534$F# 6d?[sD5[O0,Gkra;m4jFDn2&*XG%1dKl:+WG7enO!N>quaG&u?mfbb2S,pIL5(.0- Hu(ll!e/6AhU2dlj>g]N,[1ithsqiAneg)&*S@sZ^NHSqrJ#R]8rLWm#n78_'a*+9 WSXkYS\U@FY5p$h%RR(cKqJngBJ4%.>@p$Cb6U=n-C\$jMFmm%BK5LY/be+]>?tIB ](]_eT^>t>>A.JuGjf7jrq3E7LR&CMg.c>TiqXs#\rXjR+&-#l)l&X>?;,[9Umc-3*/(\^1\+#mb[T8lk,eQ%OHRjAo,'t3qM)qNiZ:lW$&X8 '5s0MDj4b`b-5[Snm3o*!Nc\P]c*Di%=Y4&Ue$'fUVn&ro7ti+4Y!fKq4KX/?OO]^ $1ig"TL10,6SYB:%U:-^:P/`b+B#)m$gjODk[%`k /2Om`&a_*2]j':6'u@sF\"TCb?Gm,nj'9]cZHA'1K^bVYV.K`-+oFja-Up-B7bT0: /WlqrtGF+&A\+6*c@5T#-u&s+?d[:fE-$k UZRVrs"XM=1B(KHH)'uD8+:^[s#U&[s68rA@NP2lbjc"3a8I)GO?)/!qQdg7HiD(- _LF\cni6OLs&40n.6MiYiYE*OY`5J^a$a+Le'QLN$jJ#M@uB[ULcO?4%on/*A@CVu ^<5#TdXDeeYS_^a5^7:@FHB#FP25^Ui=SS3dFb'`>O:cH/3sMNX(#N.=9&[!,K]bC jSb>M!@l#12,]57.9r')djB*1&I#bA\?htV"(Ku0&-6#Yr?>,X]GP(F-gqpu>tGpGFFUjf08\eE.+gL@`n`);=`iV]TpN mRCMV%l01>2&1G,$%,Hmrg,YE(JqRGkn;bF,1HE5h>8s`iF@Itj__m)0a4Hda<^C4 ^)Q:`)kXa1ebq7Cm[O!RpG)![KbCL!'^[`>9*oY@n:skR79p\R"@q$RQ\k WWHLJ(>eQs57!Q>E0jofk4.LCcWBb,f8Nk>JkVekk=aM[;uof*J/u:1cG*g]nE#0Z gnj2@H$hUP+9&_-3?WGVDr'bc].QEOa]q2g"jlc=ctWD>G=![d6RIiFQhNkeARgP9 nC?B$n)6F5iI10W6_Da.mu]O0;m6/??ho[%H4<1>hf7u(Sn(VsM??,C<^!X*1 ;m^VP$S5]?Z#.ac@@:#uBMq$.:t0\=Hh^kFZq3i]?=kWUM^@0j@('=aR#@Nq?mkc' POKPAdFXnFQXGW3e,+\`gYUbUSfJ'f`):@;r5H]tL*\X%pZD/:0,YHW 66W"/!feB`s(K6QGXa?)>UO*=*7M+.mijRB<#DS6UIq_SpO,AMGp7I7P\=DnFEi[K Dc6.Ej\]s27l@;R:!g)dl;e=1-i#Y64R+Z13m8V'TMmJ9M\H:,.nB;H ZJ%0=okG(_0S`cI"hK;/#XL$\1S2(h]4Y7md48Zb":EX ab+nBK6lcf-Y)(IlW#.`[CKQjL%(oEXPn8)n(GAQF8#kI$;cAr+:CelXtscdRL-*o ;Yr*%)hrk0b6>SGme9sU"6'O/*t2;F9-M>mb9nEQgQt2c+16Fsah1uh)@PXl^\-VA Vb.6R^h9>4k`mWB+*O_&Fa,n2n7]o:+d<:m#2(lF)3"j2,*SaMb>N`HGhBG5/L&9I 2ZS%!dc$U0eY#LSW_qOA+e'i%pbmAWfTf5l1#WgCCkPqrUfdbiR`(GIAVT>KYg$*tq0ZqW!'QNkjrbQ> XeI&=i"tl)RmJpU@@5h_?Rce\X,0$jRA_p)WP4IlZ?B;uVgu!YKKZq;3/$cSj$0.8 a281rStnCp,)#Z3>qAS]UOQDJp6UsR:rWQ:#f18/:j#+7('43V5"PbRa64-KoSG"$ =K3NBgA)s$8NOVM+OS48!FDkY- 4FKns)uq^A:"__-n4+H?,bE?D"?4B555oDX/89Ld@D_Z;pn\c]bE2a2,t_O<'nN1` hY]1lg`ClUQT=r%-[F"/4(KKB!$_IOGgBan^gHne;n4GON'6TQ7hN%/f"pg:;(X\m\UJD;2QmXVs,Lkgr8pH%phg-^)s>h-r&C!G3gs 0(=^DI*rmW$F!0K=t\S%k)[p=ml7XlkqfM0-P$%Y[lqY7f6]DmRo)PpY[gMD!;O?'g/MP1c*5%ScDEW2;g*6YT; %1:so9#9nP&HM*&1:KtAX@il*3knaa+d*B(ORm66Gr63s)@9a;Edh:$6"9YODRj05 ^K?-AWm7PD$HXOF`=O[jO>K9XEk_7T'rU%CZZ:oZ]ucIPIHl3b1:(>Q1J$[#WRATa i-CRS<>gd2oL?70#'+7LH3E`P9a:_aOIoj_9!;*LW0Rsp;i5Bh@uAbK3`Y3eF]&G: 13u\A^s@Ti^uq7L!muj:uqWMEkVN*b>A*kg>p_h&2i]3q^W3f0NTe*1=oh#9qM I2D@IPJSY8OSjmX*tD0ji`F$M"cV(S#sp_h*sD%r=/mF'K>t)oi>BU^o'kc%eZrVq #9qVY%Jo>^H5W9?$O/2TN7q;@=d9G#5Jc;Ck"mek[,>1RJ$TXC5N,EFh_5p>p\OiXAOF)qUH!H-k .,-S0FX#-YM/W,Gs)B'k^t3aKliLj15J5/j!!I-<_LM1WM>o$`+=\dFQN+^a!(c@J QM=V`^(?A?n/(-j7Jg0gs.d6*4:a6]BJ-d;Mn]Rf@1Gb*S79Ahs@TiV^aJ It@MQpm^;*I#e($Ci^/`IGd?**uA#Z-p#4C(iF>8/i_>pr_(_WNH/_L$CH-Ng_3C: >(*C8;`Q=#G8)tC8@sRDi;^-1,fK]kCd!WZ&l"g+P"#N7gMW-'X9h]),bIEdIi0^Q 9o0Fa8-i)15bV^>9HB&<_IttIlNDC<$@J->,lh$ImK1H2/mt[AZ&D=XXpJ->8U0Mg C:H\Dq[gdm$.$Grk;b4].Tq@c(rtA.f6&7.n+.+cVPCf1I\?&@sFKjI?8-V+B'rq\uuFrf*K=a]`\tZgW$ca jEPr-ckGU%)toFB?c5Up`3$b6PJ0VQ4AVL'Mk8V]c`FH"2sG!QGb70F^mo\iR"d!X +7tl*oW<*2UL4gA!,;N75&LB$IjFk1h@"WqT0&^jm"J5e%dC=X!m_a*Y?@$4gm*)b j]@T9])cEB*dsN\")GAl=.Qr^^]e!?em3XS>^FuVq]OspR@f%lq'Y[Vs7en*7J`QWVH]$8^ZRoJqR\>b\Cf'Wk47P?janEC&DTe.)Nr\`)`6d(X,q5ck*n:+4-cHPN8M14F#3?WhAXFAR(hRsf? 4-O;47l1m+'r+03N-==(7`>YkJ!GU].FIr7B)dNprrBAV`uOF+?!EQq`TiCWAXZ/X etEq8>4cPlYp-<@k_JcE*cl$>UAg3E4qQY%SGueNBU&o*=[_RhJjCYZ.h'n*\K&9@ oPinYd=P^(LfXG(3a,%(;??tcd\Rf;XVB0a`b8>FeL=!RL'J*",1@I\Bu'aLD$JJk FfODCb$c$\TLr*QUFHYq6ED'RXV'B9+s,\"Y/(AB[qbD_r#OM=imS3^\u>dE1B@40 dht;]Z\L1JoUjBCeP9f/N9`Tig1QN!J+5/,^ZXUi@EJ]M0&R&JVdhVr!<3Y3;Y4F& MXqp>)074Hd62iOIb_1@1j-21T(n0sTR4J[YiU7EeZ&>`EuBDg%ji9rV]BNllmg'C X+9]$n>EJ>b[%CWYiC?5%iTX?+0d7^8'GME^sgnMkFEP<\!r`?g8+0(Mf-cI/r`Nl /SdP@bMKAe!MYRHSs=i?-/Y9tmiI<]mrImtV#?R_Y*I*%F]RZ0[q@X3A34CNPs;Q, (g;t=>DnnPNLuE3:+^"4H]oLMnT[JR&![!;G.@ZYi.$Ks3fRd/LAZ#*[fBYtE.QLl _T@kR,g1(P7r1\tTd/(e2>fb\nAc>p^\%Pg^@:#(@N-qQD'(/ !QXD36;\=I8Ko%j%@(YQ2dUI(#]+i,n8f4+/PEU=P!9',5J\\ 2&Z=WIlXP"O+XGslV[W1U&:comb&98[1^Hh]?6m/)VqAr:%9USUJ;W2FE8YudmG`6 qO9tOQj\>A;1;J1J/R8%":`r]l7t5oNs3i/80:I"NsSngc.@X2B12@'7/+G)MXn34 p9fbNYYOk5Y)\=/&N1WIc[Lg[IilAp5&pC0o)(fE_Ej(O=o@hSIt""E],[t R=!%]GU$=:adN`usGgW!,(sM1Os]^@+4::3GOe56JoU s3H;E8VH88;[5VKpalIbY2[u9,5cIfJH*WKcE6E'HagqK/q#D.#56i!5R/>4#OqVo MmaV[2XO`"XW%eSG9:((#7K1kCKN>FT=S8_Un9"uRGN$XpfKO)$bII@=`Ue=$r!!Z e76[mitF(9@2;5^F$B/M5'(@#KMT8fQo]1.H$6lBf=:CIBDD=#mijQ/8APdA.W1X:eR7jSKe+<_@CGd^n85FgIV! :aL;f8q:f=Lb:Pg]0`HTs%M@Z==F=H02h:TPOl`gh]_G!r"fqIgPGr]nQmejM[$:g _*=2m`lH@[LcRBZKZK[q@T`^#T810e;`Lkp)cC8A6Y2rV'.KTL`2s@i%4\(Eas$FM @CQItW7$\5!O\#(7K4h@^Iie/9"D``V2/0N8(7]JRV\)jX&FZ"6=r-T10W2<5^ju\ f`![@6YA4PFYip?AFuB`([GZ)l=[M<`IkaEdg%P]*Op3pmfL'U"s4D3h[=tPs0r1K E@;cIH3tR57'2iElZE2?YQ2HuB\^<'^9*Gogi$4;2D/Z!b\b^$Xui3,C61;`nHd3# @p_$/=#9/=46oj)j&eD'<'>`5:?(%3R^lT0N\G'P#/:9tC0Nl2AfmR__,*Q>Y6EmEcMk=/V8$#O\dp=VS*ClVdZa!QRO EQnG)=MWPLrsShT/FXC*YP7i<7o96+r#bVkp^bTp#XcK)T,\!>8d_q!n@/;rs.d6N pg+ZKVn"AY;]u+HgaJ!YY%BoV5LT`0D^+4+&e9D_^\J]F;e1Z2;=]dG*Q-bqQ"'t! rhmkarcmuuk!'-mO5M*jM8k;T:]pfrYsHBd60H]acJGCg0'DK+->3j"B[#V&cB#MA:iXPKZ6;')j94, @PPH]:`&0XU;^Jj/qSSs=e^lTEkq]S6c-)3A7!4FN3N0nm'/-CGE^DA5qeR_>54"qF-Y07F^r]eao*9 r#oei/-,JFSgQt-_]/um!1K4q63G\es%k%m^]O#pNu%k*"LpMnr',4'6*DIXcN:#Q ]LTCnLOoIeDZ)XLIClZ\)`PAfS]0?dICnnLk]6+-paJ][bE25Xh+ggCt.`R88 6hgo]6e$U/U\jkhhR..$>L&dpDZ/Js]/R;Z*EkDgRXtL3?,uZVWu]s'NDbZaWC=dr nY78@r(cXh>#j\e"og.5[2@,XK3_lIo][VaY+,M31X&\+]&s%b>OM!9n;2)$,qlqZ ?b#ap?>86&Y$3W+11tQUp.YJXWU'q^$o!8nrHn-j"n:K8?N0`Alk,5a!S*tucY5"Q)+hJ!Wd'=I[u7%Xgb780D/J@4)q[FqeQ87u:D+ b$R-!4f+]+8EL>\1PSjG!t+ZAq8c=-n2@,I-H-PcTK4D!3i-5_7qrdUCDCh*#cgl1 W`&>88p%8"o57G6LGGPlNRORMCaY"HCP7POkT/S@?ib$/(3P'63N?:2Z1h398:2UM Hnr,,<,1TQKGL]Bc;Q1J\sWZ`mu//"%N,ui)AS7!5/>)90_H$FPLlh3 Dq(J8O&HdhrRkt/#i0Z"_&W_.-2.rud!si.>d_92Cq?`6*>[Y^R)?f,VbR]8SeQ]EEer'7kfs0Pc [H],Cna2S;F=_dJY6PK<#7mtloIP\_g@#4-93Dp+p@J])Aq`I__Olns8(V2tf&EQn A#:&r1YW4Gl\U6EaaI)ZoprtT1(N\8a!HLVRh\B:M71\Ag1>=Gcp0DLQ$fIh*JWD% r'.W?itK7YXlGE>\;pko`J&HgQ$4-1Zc1EOcS,]tf,# kPp>8%mgm3=r^fi&3u3bUr3FB8e!]"O45cCSna/3mSD<#a]2[s:urO3.E>)KkiT+@2P?+TJ'7FT/XjiX[Qn^Ko:_O'1"_SQ%fg_>ClY'-sQm6LD_\b2^r^#$YR52T]SN*cVW+r'GB4:E&g n/HZ827Re0Hh4*?p^^5OpM))FJ+$FicHT*p#If!hDMl7Ep9&RVfsOAM[B#Vd!.Qi. hmsj14R1m1HoQ@+]h:H$T$/fbn4CV>"dg`oG_&0-"[sqJjC&kI%"\s6><]=45L\b$ qbFeEle?Do=gtA72g[$b:c,A"G>:)8njMWMG5B^VS-=Ol$g6u2&PS_;):_D&<_jI0 0Ymfo'uT?.IPl-eB_/.MeLD=2EWsWqbX?QmX8A-2]n0IXMLU[VA2cN]9g5@CKn_8[ G0'KdP2(Tfc#R\Bb.d965-:2J]3J`&3O2;I;5<,XLu""5)UL2j:o9E;W(DTZ+@gH5 HX'k/Y=9HT7guHF"r&8.'[QuVAmi>N@'tS6fMJ\Z5`J*h3j@)SiH1hQGpgnGJns+=no+NB$6r]pI&gN#ROjL(GES+X*H l65js?9se[>f.YWEM-,laG,WH>eJ[eP61#-a<*9h!#hUrT!GM$FD>'od0Ki4P`kVq^:Wa_`iJk!/9l3;ED8e-/a3LkX:Tqc58`Q[K ihn_ukG@DFZUl_N0h(cjW/#JuqlFRW":dEnX3;u]X=3tI.&Tb1;`=MF0)I,#5T[fL kPl&D+H:*#cEbHDhAK\D)Ctm?fDPZbDZB/UJl"6KJG`dDh`N4'%%a-Q?qO=YR>h1. ^jgn71&h:R&H3:>h2Q"82ds991L3_iaQs00LL>tV+"2e0M'$CXg\aXZ2uL]c:h9J_ s-irfs8O2?U[cb2kQVq&;TPd:bEtP0Ck,B'nG3!ll-Wpo_er0taF[h#`&`TSH6o/q*ujAmJ5+s\eF8/%]T!X,b5f'\Js>u`>],o)lD Q@@t-/F=(9!kLop3DY=V+QXRtc%(muSsXqWP^A7OG?GCr!MEn5&H8kC?!c/S"L]^( m&$J]Dg;'Wqc<'M@`#;QM>oT=nG=*bhb-rJ[%njt5LLWTFagg$q-Od*^J-6=iW#fb Q#BjV?IYtAPcIE7jX9M\#I;lAP#'RsT7+X9]LTSu'lK6M/;&G&M(l_EkYDBW7gE.j ]i>)4:7qoL)e=i/;=HN`/HFV,p=2oY(uCR_0s.Mu2/]A?/1%\Y@[rm#"&'Q[rj; r\$G!1.t2C30UV?SMI(flVRs+:^n:?%Ngprk`uTnOUnNp#cLYjX&JYh;t-fPpT>\8 f#\.T."n=?V"4N0W^2Wer_4kkSQb!fIuu(iS]pLEo,"Kj!RO[?q1$a6ZWf)`h_6.8s+j7gYXuqbjWUiH(_.E)K[4q` q*3t;3Hl52iTG,95i;n<"/s$J7]i;5;tLtE%[n++?Fo$kQdp++^$AoEr3f1T-^.SB ;qC(%%^jL3RT?T#9!>XQi+:3J"uKmm!HeG@L,#/Qn.E2&*nVtP&23m'/GXFkL%ar]LKD@i[b.?:K#paDpkE0m;`M?/2nkV<[@K"VP;'BV 569J0S_6W)>#-0l808^?X_Mk:CbS+/l#lssb),X/n!lmuc@i!rF LZb&B]9:(BR`Vl@$i&EZNl_gS?lnR"s6)L7L,H+Ue,i.'D=opSq1MZIra1G18Gb01 !VYIY8d[=J%&>!hrgUn'=iC)5UO:8ghA!\jku%5"2eICRJ)S04QR]e8iF7D2s/!=F 1Hg\Jru;pS3IW;7r#u!]G(,n%pA@`tr5Z;F=Q98!\,(U!s0(CBo"QaAi\sF!"0@0, 2R,PK_#Le"Mg$BSauHuW0rKR%o=8$DpU0]e[,3uHH!@_%F7G@h\SEf:_h/jf+V A/Z)$c4fb$&ahpT2^4QT@8C^DR]BP[.lIrtc*4It,f5Ie,5a#WW?hC/1D(/ts"Q"t Rn8=kc_F56J!R,7^D1SgJ#VT!QOs)pI7E=b@g`5qUa4^dU\;8bFg$D0qFGbs^1)S` Ak/;%D=!*WT)O07jm38:'QDA`UZasn^Teos1b-lMBWrNrY@PogUi:q0\A;jN'j>I@ !MAgn.6E5l`V6\CEIFrS4F$V0iIk%;Ti>p.))p&E&8iC*:/).?aRT"@@]%IA\%GJ$ HqrGl/oC&u`qD>oRic\&hPY5(9AOu^[/MOM$<=mrppISNX*>e,aI7P&SjWDlY'^nr q@,Q@.mJntqf0h@\A13"_FrT>\,`N4co.SCI)"#of]8@u&:T$EkZ-^ACDsclj]2'q k]Q+UF8q)&c]QcDh&pZf:$:@BfjQU[hmq:Pmk\o2Ri6s?H@Z6mRj-7o:j@R"m!92F h+!n6_#dXX>;iXmn)!Ed^!VOU[<'fjFj$J$pI`L*PtnQ69rl9Fe#F_SMDb"j?/)5n l\6_Gns.B/k7%g=o[(&?)E$Y?U.6\F)iYa,8GZ!]=MSVld4cK6N&g(7@J@EG%Xn[' 4*24@gEQMs2m$1CpL*,o^>quEgmRNnPNgPo1ZlLTo^cZik=k,N:MT'OS;7t1Z!6<7 g6BGm'RVEf2p7$NO,;@V,YAATr.&0YWU*HZlJ/&neuKJ3XWH&ji8:LRe>3l/.IZ"d nn_BHmo8roWI&fgGsN1lJ9eTEq6d2U1oLRA,WY$q[OdROS"S$B:,SXS?8B]qeP;\_ a,Z=Nh+E-E.KMno+oS3u:-q2J<$)I]mIn!VgWh;h>U=F@JQ];i),RGUJo mQR&gYFdOs5%igO]tOmK"tpc&)&3T!'`kZbr"#2:h$\_Fm0CN(r3\TMm?Y_\N=4A( B.U(M'(K2*ScMkfSUd-8/U1+R!MmX 3Oh;^PhnHd:f.fH?,R2pBAG+pEk3'(SLZD;&Qn0$*HImW!;SGGp1WPhVXu8AA-Y6o @gg(X+QJ@`r"/ia92GiK3h6KDh% T.8B?>c%@n$IY!X#X9phIX4E[VF:F>IDm!_9)EiIRL)[TIVH]ab76QptC ZGZ*/Z$ZnE7j7#ab25'RbVt^2]nfI8,8?U[9.5Hk9`#"e]GaQ$D;p/F73s p>`'(s&FjQT+9kqoTK3%(uVUigKA+G^MLAD'&N?^YBdO*T2PZT$)Lu;.K6t]n].3C n!_du8m,)i3\M[u])"IV[^;F&)A1LUhpAcYHl c3pmF$FW8.ZK)3lJT0*H!c3.5p=oX0,^9X&kJ0`H%4Bek+)6?fEfhJZFLZI&k`tK7 mhU*/C4bYlo&;S7)^"(j5,PF\3-Y>UXITmdRr;6V?6ubg8Q^[ei+)?/o;KVk[VSg. 06ndEH7+pYs$+K*Iu`7`pk&_Ms5=.;T2)#@SK2&3aBAMX?@'q$K_JQ1ZY0@uA-+@F ##@AmR=6/2s+)d#L:d;B\b%(np)n$hf5H&SD.(o)B>_9(qf`"JF5P9&hEC'$IJ<^C n"H*IA'Y7s+RnF_kjZE.:^]N'!#Dg,dOi/`[cH)RG.hDOC<,J%G'NF[5nc=]XQnDR )E2K$p?^PBXIE88C6hR:p/eDbK2AW7]Y$ 3S,dnLsuOc)d3uiHdkEp<<l%4j&"N1q$YU[=Y/f=djaGn56Yb/ampV70 Qo/78'Fc;-@f#,n_So/^;ee$cWe*FRi%?=Z?=i#CL#="ME%C'P6hICCpT@KfJc&kD Ee+jrP2KM4F9CZ,'0PR@I-TgAS!3u)r#uT==I\!=_s&;mC5Mqlb4K:W>)Na$6_,IM &TjY$!K"3odHhutLl;i[J80Y!WVpJ9L(3a/0,4t%.d4Wl+*;nm$Qo-GW?0\UB(Z:) qSLcDagM!@/%#bF24tiA$N0`S0FRf;E6FXX;"scIitc44G1ACW<=nUrk'(]I^"'jZ g]lEg\:kE=!;u$HC'"G^cTCL5gYJV./-]`A(4Dpc.GcW3k, Jq)G2H:\'N8C)$q+)![AB7iBi+IITi4gu`-fSga+Nh5*'S/tHVbcHA%o`-0?PG>@%2jr5unj) 9AB\+Gn.@43<4Q@9K!f5PK'h]QV<_4ESYP<$&F#Ahs\I95rF+M*a5Mr)b,]!B! :O<*4UYusFpO=a@b3t[l?>-hJhr9-MT5:]hcOp1e!c6itXce:[Z9jNX+q;`KB3U%e #8=LX1H!eT20TG8?9ZkdopGZkN"#XaY$0r!C:Ts;&WnP6hj)<3HDp>I5iG_7_R"?< om">O'K-]*0H>*m10j# D\gF/Sl#[ds7;';s6`h\Yt4CPZdSGKeVtsA$cVDkGLQjQ<9mFWQH,RJjQP^R/u42i -3d\m"B'gBJfmZbYUNaI#r\!XJ6?tJWi_<&O(<;_DNH`%L*3aQXkCMfE'%rj4bt2+ 71e_q*F^$*AfVh.%Ib0'=NFp94"Q"KkT^JK]V`s4lB_?dg;S,3E3$cL1p1DRp?r \dn):$lng;B&C=,hk"'0Y']&t2nHF1>u0KFN/rq8B0h%OT^+/bHDEJ]Q>a.641;I3e=MVeAX@:t#)4f!nPA,[70jVr'%`O5>H2hX=X]!C%&S>$n );W=c((`)5@Rar"2D+4^,NkGHV\q(DmX89T".Go87!I/Y-f/Z;\DD;D]1pPHQ?]/7 F(nPADB]eZ/$jdKuluh?ML[\6!.KWX3QcEo)e5rZX3<8?BWI4rr1Sc"p;gku8%- ^h;*NS@nC>^PGYF`0P+#eZX)DQZeF8g(Cl&9qZAN'/\FpCS3hR)Lr\DU0on=QthSHb-oWeP7TlAE#l/pjt/G]p4cp8iOtfDL^Qp2>]r mXu$dKb&%LL,L7\efstB+pUBViP"Q9T`a8toD"$Q"Nauer*I8,DUR$X_UqoekYC.4 ?L$2:;lI`MpN@Jf1U=lf1Vo6HAlgoGWZf9,!FMf(47>C\td RiK/%C_s$mNmQpUrs8Dd,Q=SsD12J74Qkc&5DK*fr5[]E^jl!Qm(c\K\CK!f[h((J 5NM"':p\(O8j]arI#pp)JEb\`(OCSWJ%Yd`qRZ\OCB5Hhj8#>+DXo[b6%T(N=b0F) Tk:QJ-NK\:Y(l^q 5h8[U@@O3pGDh"H@WK9Ft1*]*I 0/:EeR%_LY>"<%W/(X/B2oSUT$KZG/8MBY^70>cT-6W)A8AFGVs3FOG#lhZ361Dp= I\NTDZ8lj%! rX6V[j295ho/N1+*5at#AJ\.O:Q)`&0/U2(RC/R;r\e9SF6`=W&sqLQXa\LJr1(7n ?2h[$o:F(:@/G$-*pB*CXnPEQn)@F+`(Jp[Fb(hmJko3&#Zj1qQGEao>2VnJX2'31 L?&GXnIp-.1N2qjNq=??iH<'iYSuun"31(f-_JlM?a5sSE2@L*bKn(=p\ZE4I)aO- n?)]7X53):U93`egWhsoY5S6hB[duc!;N\7GR4?cJ>Nq_:E7G&Ks%t.DdMa3EG1Zl 2M-JZ&H5`_l^(>H+S.tqhkJ\SegXU4FRt4,P4O_[7Lte;5EK2t,W0hVTNaC$,$V-$ XATJ@8%=kMhpD]^um)?>j#F<^R09d4GS%:MHY$ C*cVg`Cun[8('u!5Fjf]14A.Mg5&dWY6kO0h^mql7s'/O\G?K;.DSUu.%!1t1'&29 6o&Q*EZ7*d)EL6(;tU]aICn#,>)9?!Vo"57"P8b%CD@lTQ*+.t=)&&N)AG@#<4sA& h8mU[;m=FbGqD(SqV\a:PSJ]G,^W'7U7W.LUZK0i(#XmpEk1C%b7dYe]9?u;lmh',1G:HJGat8b!@V:]M:=m Q[2?'H5(5tkSAMF\*meb)"e1Z9'SdftRl^:3=fah6`m5(V^VJ<_mr?9q>fZ0F $l:.Ys$pG-;e5_Js(1!mPYkp6r$22>JH#p4$@\'SkJ++uK:5"irpTY9KG*3i`#B`AslU(N*>3Lqi^V"13=gfB3+HbDO6HW4jnR]7Xjr. q0eO`k8N?@CX>K5T7ACgQfd&CfXi?Eo=NX]%^qd[8Rmus\AWqP9]V6l\mlK,;&?1` &hB\c7:q2c1[L5ap5"ShZ+t)oYh!$9rP$op"DM#3\=G2N4I>iW#`X00LIT-FG7oDU 6i-J[ibui%IQ+D"a#R.M5FV;MW%K%[7fJH_[9noWs(P$sJ+or?UeCC82V"/%WW<'q LDgj#Fo$/TFekS.Mpj-kT"Dnfc\T5q&o*R@@M'Dm*?ArB3s"mMkbOS"MrOh1d1M]. L`A%9'o3Z?_24rpR$J]rPsmK=6rI-/Et6ZNbHg35/HlQ0!R3fsjqJVW-'@39\FfcYQdSd2@e7=:^+KDTQT5&Z?[&>$D\b(M]dO7=MQl^AZu.G ]YGnu6`4:F9YC^#m3$NB9CUS_`68Udj=Nmu7X"+WS$9G)6*nnNa*2G4Cu4AYF)#'s -JH#\]C.rYb\R!hGO.!`>m(-B"FcgKfYPrXB\BV_m9ADI=50PE9hX(19,=p5bISFH 3[pnOag_E#ri/Nn^jd$?!RjYomdlKO%IVQ6]=3%!AF2_JZ9(V&7l8n)#P^W;eK3Ab\'I$TM*D%6cGg#_5!FV;2_td&mQsJJcBUfnm8^2Y!@I2 -/Bq9lJu7:'g.qLHs;j;3n;(jqucuRPp76(!DRT#X\-E(npVTO!g/@:7#p\5(Q-`< *GXA1AOa!M%4n09bj3]9(2LtbS4k!NPD0&.GPV`0q@2lps+cSl7nno^bTDdB+&5X* B<7`NgJrf:X=L2"T8oC*))6OBr#[dGmQHooH7BrbGJ7J5U3t7pHLXT0#cJ7&#N,^a fA/h6mTn#FRc2.%q\nBWPQ4A.>8FE9SY+>7D_le*_?1oJc0?bI6ddk :t4t8+nA,5DU8T=r6GKZgROCKpIrV5(5prU4FR:kdU#?d5-]]I'/ Q+btlopc>&?Jf_mj!J4$,HfoEQ4lm`dFRO`ZTOq$T$T<$8BhfMja7Y.IC',.YfdeA Adb-U1Wgb&bSFAnF.I>r=5]LcEQhrTA?d+0RJ%L,]6(W$)U0TddMdcdGs'N)5Jobk p*7]U5CZU7&N1b2!ef7b(*L3m(mP(\r8@hSIft7.=oZO#ElrsSk_ b`=Z3ITc^4qO2fRs5m\Ms6ocE%PfiadF\\aAJ,6hDio.3s.cO.Io*`'&d8,.%'bN% +!5#,(M"=(CnDR2O;)Gr&T2rN@9paTW/*3EMDsfm\M0+R0TiD#STeu9^A;RfH1QUP hF",la2D%jfXip*6Rh`>$jkkl^'&Rp%e?lq9Z6tm"GPMWdKfpgLLP+LU`(%9W=rXe9rp! IsZof?'8N>oVjpbMqO&IWF;,,67MFJ<\YcK!.P"J=*'QV6.$9DHupi#UM342dZO;] .PK4T-4:BWAf8Rl"psKOI%#17b;P+C&4aL,5^,tshb7Tdb@"XJB4&pA3bS"gZFFfJ %'Ko0U%KRK'V+V$3o=?rWRdn2h@1D)3M:gK[#uC\^WQ1!4U:XK] 258#]&]"D^"eTP?gCH$n638GD1X%)6c,7g@?j7pEEM]18^#JGYdsbbC8E8PafSt4: c!&P\Ef=0FB*!=1=]H$:eLJ1r/)@p0Z;)WNN5s4a#atfg]Ct7/.4Ta:/$PB(/XGu> .Cll8]%.O5=(*^W0pbKmf,A5pC'F>]bdCXBT*NG%Al^s7\HHS!2TTeu SH7dfT=[1"nd'UDi%K)K>JA[qi)g4f^N_Xh)WEkTgK8f`Qpc#:c[V^>J [XELG!r@(lqR;%\2hD6as(fH!)rZ>Gi>qdY/phDi27gmLggCV0Z%mo.JGgMI`0P@O 6SJ_uNh5$$*84&T4NNsUaBa+X0AX=R%'b::\#VIHDC%BO.+5A^@s1XUS0p#4(/V;] AiVus>Wu&GJ==_AcP0JlnguX$G$.[;=b<^-;)aSi=0dNTfg:J\BKL`o0)%sJa!mMF #k5n1O2M!bs2UNL`VXUY+?9^6OCUhB9t/=F+8DHKC&9dfAbk6SM#T7/7JQUGZXn[e !.UEP"ciA=n,GoKTRcO>i+)cH(;TJtOn#&qo,iWXJ.P=HW9KEJ7%,1AZB4T@O_p,s 4UV50r(i6Z`;'p9%(/h9[K6@TL=df*3$a2;VFEOVd[fg3*D?0Njg!D0M:AtEe#q2Y ]p\$gZOJ:&[:erA0AP$%1:pYZ`F(p@%NOS>)d*??T7< YO<#e5:3$`T.S^1!rVpds"uA-LC'51c2dc"r`c,rk9USAJD\Xer-Cim=5t2!s*s66 s-\]@9rm"6HM.5/p!q*OZ\;RMGpc#uH4A!Z.Uii/o(B=l7VQu)`%Xf2W'tO$%F5"6 M0WcJ?A)/W-IA!tn&%'(5"9e>*QNo:fokn"rqPRr:$ 3W)?=\8uC%;Hh!JoF,lg$M2OQp!*s8]G':I0?iTsW:-9bUr&5/&tdMU/rWuC[(a=' qp?'!1Y7(rGOJ%IgE3a[O*X*9%tAp*`QnltJe/Zb^5KBpVi%D`V+iqE0/A.\&^SV%dkMZ:@CZ-jn(A%Y#L_a?N:[e&hDu'n#[s^CM R=5g[n:A%C5#Ur$AF?um3cYU^^rCNeb#MsQ>IRHSkg3sa?Zu#c3^2]W]6V"-N<")e -c45&JOfa3>MnSN%]NJ,'"(2DVLQ0E8dMOihN=X`H1nM -;Wf#S]mQ`I:l-dBM#sHrlgqTPNi)h?Z,u$f")me/s/G3VDp:dUWgquR4ZN9aL3WT 1NUc6OtAIG1K/+F)>;A4#C>*qf@T`)ICF.MqsJ_/ZBCa6e(Zt(2qD)SCaW^?qjV[+ 0^#rj;MP7d%'n369N*'V,4,=70p$3,;N#=^FQV3Mb`@2<33];d\#WgE2uF7`R?gC2 &LYms`6V(Rjs2DI@`cFc99Re=Z$7nVce/j(+(X<;.-iXa5q\t'LJZ'CA4hpoWt(p]P=QT,O(Sj?FJ/+' OT,FYO%N8=,a(YC;FdQs_m4CZrg,/D!;g+eHUK<06DX\WIn?hYafoC)TR,:iITE?Z ?51hdR*ho8cXGq05+/KI8S5_b2S@tC#G:Kg2/V3SB\N`/a)ut]]]!Y`$VCD,qfV37 =SoNI3tC)Zm=5;ZrdBR96`5JKGOCS4qp_*^&MSYK13FHqFW*Ab*'AK`r6>/;dBNF" 8IH=[3:5m?rhg(/B8L\bn^@__1OF,j7u?gReCEmWq'T=g:\$E8'Q%+iYOCUKc-Y1s #rrHW@Fa5=3/(GD(#] i=[7hm$n$+r6p6,!C6NH\G*a%:]dk`\1&H1J`=!iPo?"9;od%:DHtG.7>,.JD^5'I]f(>2-(7_T9oI3iXLCYs$-9CfJkb@#a>>)s"qAG ,MXV%g+JG"?^fnLQ%Z26Z"U!Q\#8J6V5a.7Pl#1;@gncFVY"uA`'U?bC8Sdi->GaQ 3mBrqA4+u%aNI9<)&%._L,r!sm3\TO.&`tQBKd#s,XS8'W.A>MV`0*X"/a'N?"Jnp 1kM`eTK6S]d1U3'LB]l&UO`J^Z-YclFIe85=b?GH)"EA6`1K&GIi:cTgD&ebcO'N1 -/nm7-MmaZMZ9k30i.rLqmt_[b[:,UUEX'#7,R`q4Du%MC(`\.&R?n%S]R5ZB$,5E 'q8)C<[Xm]':%%Ai,7E$&:KZ<"967^!,qd`"'n,K_C.:Y,ULSi--@&1+-7CVPY*d0 P"a>\k1!Lke/2t91l`>c:W;(d"Z`IU].j.f1OM?kI!kP`r!WFT$GHB/4ackWr:4(o o,Rr(D1`17_'RYU,o/eCj#[!3P$!_RuEdG*T))nPauDrmtE dZ*GfRENO2_[,2M)-iEumMg(d)s#*]f@t;8@>H`/Xq<"<2Obs+u:g70AB;Q=]HqVPfoV]c,LFffP'"lj@)i'_&5dE5BhLld6g:-\'[e7Y;B3W&Y5qZYB.WnT@F[;Lfs $j_Rgrr]i0^7>Pu?;RG*!eL9)KOVL/`">k`KHthFN76#$1g*0[Ff1&^dI?[h8L(muCYcgjs/mAiV$iSR0Y_0#5li51JF&3&06GSZ26%A!G?K"-[2?#-+ s4,7VciQ:=6r.kD":VBj@6PrVt=AR`pq*4?GcYr`b$hAf(q@>7TkP63c 5LJCBgV,fA;iG/!qk"d;PT4@u&nh^O:Ck@J,40CVN^X7l-&Kn^8[c%Kf!WVSogr&R(no)_',t'lF8&R#Kfn6u7ttRrQM,&pfh! RRr#VLsU)de/na7qa%@PW5nVq=t<:S)62Bn=_iV6C^)b"6(O#I`sY$O/?hEnNiCBB 0(M^slK9MTht/$Vo)GnWk^T5bs*kgfs5u0(s8TJQ!W;s^eqO-@Kb)9)cSNFf*68%6 /G*@9k[c.8\d<^eMqol%/eeSPAP!:aAQi!mCD%_RO<3OR.l/F/[SBf7;$u.gO:6XU Hjioh-R4SKOer-:s3t_gHheVY&kud0P:WY#9-F8!#TP_WSegb<_KutbL"+&'>*;dQ 8ZC7V`-g1`9H4!O,QDR)h^h-u*!;g<]ta^:n7'Y@1LMpMhNN.J,p'j7K^M4C Hc"@GR-iK;lS%`X2h?nMhUl=:F"Ft#Aq*\>R+-ac=[Gi%WWWRc&k#, i1;ui_#"1N@o#3703mHJ^#tE[s,UDScWiq7*/BPo"/f2ua!Mh>Q(L54qE=UV[gc,O XB8@M=\pNX?goLHNi75Y)J1`H91K6C2i^gi[,YHXbX;Ti/D!^fXL1XXI)6'iJ*IBa`?<$W>IXEU&]d b+';o6njRZ$0^FDD9)/:Im'D'dijhT8@B4Y!Ta8< OELf'>)fej6/+:A*82O%HDEteAD2WYl5'op'+4.>#j$q5%gkgMA,Q2urAtR^ !"KbTZp-*.";T:N"CXOqhh;F*_1_Li7"Qmr=>YJ)RQ;U[2CtH:'o*V*LLli8rsq?8 "Ql=U.@AX6=jSdnf.I:O?s:6g;RLKA;?!LdiRl&"@AS@3>W,(f`/'S%XdTEga+.aM -D5REm/oUG&!RQEHghoGr=,h$*tdJQ)482-e8sj/Hhc$)oYPYPI-%?^d'_3`D:$dd hrq$](ZbTlUDKQBY20akmpano@ci7A0B8A%j-OZs=0E:(JG`4&VGH2a/s@*tP2Qsk buhSPhn3Q=?84@`kUS%QV9P7`dFaoMJRq>S;VNU3k&o&c8e`3Ir&OOlQCu-9XHQ\X-)aeJ'MJnH4XUC2g_1u(M 6a@"X5ZXt/ArIITpQ?S/_2:'^7[O2niMO7(*^BT&"7RK'5HbCorm1H/s/]ml+6u.Z pPVI&s7:cc+7to\s+gV'pY5uTr?NHe?N3g2"mA*6)?Bls=Q$#On2,a-TD\8.rVqZN ^MO!M6M5TdJ't(`i:[--p`JAmNAkAo)?Z@kn+*@nB-_m5!JDS*@PE1u0`c2^NODS0 gZKnDjsJdEVqC*.XRhY"ne6uij7W##>'Vi;Gu:T<&YeAq6&Ys[+#";G2]@\p#t&`#+TNl01P!O<"f&^-dB0"]H5Au7*MNUj.Q3&S/.gnY :`U&&'^g!m7XS(>@=h]ok_+])bPh@8CKp([S?HnBX6qpN+&\`[m5#B-##+#6SUAmW,_T"^m=Iq5(_907Tf ]FQr`,Al3Kf:S6b?cDKH,&Y;b"[E>af_po9r@rcuIGEs4o%)"*`>AC!@pqJ('2__s/8%\gE'p<5e,mgNg!eBKr;tr;O@LU-PDE145Ue"PAI4GP 'rfuh(UiX-IH&V!C>$/#>.>]E\0)TuUImSs9Oiks.=Sn[[4<hr&,FdA`cZ\"bn(@QQP g@XadoU\$_:7VS"CjWWC44[,12U1"MD0h3^#>SP/cWiK.0'k+GaYV8j;m4SiT,@!VggcWbC7^Eoa9f0UA;+/uLKik.>(X-]hYbC(iHj0cqWVFC +HFgd/ZE0E.A>nR?rN.gdfT1+IQ@J/T6?*q%_Vf$U[u1^Zi4;4$A!Ft?$JF2R,;29 lu!C'@0e!$Rh37B!PIC++-NFIJKj$HHQ,:odu3%!<%/(#f8ig-Lnn^HBD,OQ"$JmY];55o)L+b+,+C(T>.jC@t!%Gp1pj&8g9#M^R$@%Y#,< jGdjH7Q#Ib)a)KTcKGTsW!%l(Z:#I4@7i(JjjqL6>@`XJeDlB&#scg)#].FHa(_KA >iaX3j=dXV^[">ej"UMJ9FC^`XPgk=$iK=Ri4gjRs(tp&^Fb?@j,D'Oa0EB$`W"'n pt1@Mh'qoj8`[BNA>N[FCb@/*?2T7O7n^Z@S8ki3_7SJqZA>)U4L]Slk ;*b-==f`2A63ElcSPT>R!;J=7n/?.1N>AK[Q.0>0S+UL,:0Dt:F8Vm(lDMLgchTLA F0C'C]_de3ooaS/hL?ucrK;Bt1&LlYjr'9\LQ(h#)4-sOYJ-f>IV)l5U7],s*l"T= 59k)0-*2`Hln3>S2/2ADi][VK*u"A,Pn.>hTVhs'Ies"9/K!+5(]FC^5u: qG-D^c>/<3*GbCA5(Wn#4ii&n"kIA48*]!&sD0@*M=u"kA1]6@cHF\W,iecU,$Q0s3l3Qc4qT'2Lm1J]jCfsDIP'QaCZDsR gR`lUaoge=9Z")_r/)J>:7O!g)E/rY2_Ud[0+g,dL`bUe"TE=.HSo9&.oAdHO:hX. 97t/rODHiG5m:GeM,1U?caj-4CId&8Tri'+`WZXm9S@F5;P"&KB0l)W(nGJl/IEbk _C(WX8Z$"IdieI$+h^&OlTqmp2e:;:=gmkR<[00]q&S`T2YH!`5h7fS@kHaEdf'FO ]lo'W-d&tq^ls`e?t4hDK^ilpcjn-p)s,t6n-+An.hX]d:7d\B)A>a`i$7m`7f`Cj 0nZ4]+gH9PE.#DC$,@-I(_hV#J-#Z\ajS0C1FF7*:T5,T4t<($.@OY!"$,H]f6Q`jo^Y6a`$ EJo@j\AaB9\auUcOQTuK/mkG+JUbdc[+/fJe_@I-Vt?69g+mp0VQH@9c5t##*YDfj 84,HnS?7Tr^g7`P0Ud>&1OKfkFr35e*&2gT5(%l&g'\tU$05n-YQ5[DS?8HXm?$:t :q1)l13Zi#*a HN>160]2h)oJ5RNT*N^BJH+tc=T79*5lSF65MpcNPDt&Os0p&J).X:!$pY)S`>ao6 9N+L5oL/QbMF1F%;\m>,,KZ5hD[@CSM_UqqlDEPu')\"$maBLC@K]mIJi/j%NZjmd P"ZFd-4nW/atSHgbb7-l6idc(aL+Lu=sNWXW-fP+^(%*X(0tU/.Bpc*=C^nQ0mOQ4 Gnu#-QIl73^/>rJee-a'Np?:'%#5t',Pfn(TE@773Y2%`')?SVic"]js"M[kh^/L+ AHr#bF+XES&+`T'fRK8(rk!0D57M*eEJ33B#eoL6ilQ\N%$pp<[Q$?SZAg2299CeL 5KG'aA45`>_Mr8esmI.pS=oc)K0qomN5l0u71cT0TaEh@a%]R%mb J&aMPHsp<1AmTn:\bJ]WI@klm?P>u_I2TNeK!b?4Yl:)uo.D*ZJ+#hueuS#jGJqCc ;*3+@2d\sjK9ta5)c)'PcM_A$ml,MFgqSPnBD2d":OSP#Gq=IWE/*Bo>B8#.K,5"B n9eO]p8S#K0lGpbZ57Ijh%0F5NpDIu!1S)skVd>6QN6NK9snoO!3:ug.gdRq1@WZa 3H=ni'Q[E7^*$1A'hb#.V+uqGB;HKPZLg.;g9b\=TQ"_TJ6*4k6&2f[+F+#6!<=9N 5Vm`4^?jXPiQ.[1j`1)P:[U,b+p-d36%%kY[t8?*BW@4f%rl18mY,'gl`(O9uY!8V7^Z8=;;*,a2Rf !>8-rM?=\D74(?d!@^tU)"\0o3!/e:#a!eFef`2[+d6(n/%>pOf[iDIeW=>WA5\+8 D%a59LjF::]6.RfqQ\mn@K0X7h_)93-d&>+"/#B/`(#_Z`(roNNetde@7gEbBT>=\ =-rtO*"aD+$Gkln&Kl0%&dH8efTJgY;Q3n=q#&I6;DtaBOT18[mdu.%WG`9"&0flP$[A_cn]C$I*]"E4pgh$IY2"nup?ZSr!` fDU'JrVMq/gD7G+k1gn'SSH2^X%./pj1)*\gY,6bl7#u_Zq^M#?,O:YB=a^@7L1V&gmf*f"Aee%1h-_oYX0os67mK3)gQsX (q_jO,Kq>p_OPgV-o29uNjiPQRbc;80k:LS0nOL]61E"BPT\fC5Wq`$??2\>J.eLc 7tKQ>rr4YMmr%WIhlQhpO?E"1mqqR/c2V5J_k$hBq&_g#:GdTK5*LtUFSl(mq1VDg k7JMGO;MVnP%[.ZfJ&J*=ikh\MCgt'7uO]IN\QA$dj#$1`VQN&]#]ZZ9))Ttq\Y-8 km2TLnG0)Y!`T`).Std*'Vtk"X$X)V&5a)bC*Q81a>dI!]V.TRM,:L_5`1D+RL,9p /-qo<#d_ao1+X`W/B+qIZ%Y/gC+$_B%og"[E\J1^*edoqJG,E#I"@X7d$IeO+8X?6 cfP&EEU5nc@K1$KqgVCOs0#"F^Rr=@Bgh.q6UJQ[$bbg?]5&(oBFmA+&RHt&SM(PH aHke\bI,g[lVeM@aNAcr[EM`i7[/@*UiBRkH#iQU8Y0U*8sE1nPUSK0r-e^E&M;_, 'no9kZd0)'0*qrd$R^'0)'^RVa/mt;biQIlXVZ80YB'>DB'_[Un(^buT;V+iU@,^g *IPpfI\1WL2IlJKpAQT)js=S^-+LSAU7b+'\P.]^WX^-dWPoRN72;glJr63h*Mudn W^J-G:otd=V%s5$5a?(X`M8g+#D@tiEA_Kq+kuRIOT)_jSR2`M^D:)PY4rnt5@tpa /\([,n)dRBp%s[U+TDu:(SDGmd4[\]SH?OPc2\rc7k`!=f+Eqm iQEm1qsVTRDb*B:M'qa_V_=e9cb*GS.J71 '1nXX9j:Y1:0d[;ItPD:j54$@^:- GjLf:&2=-O&8>5pDG6QW/eu27no$n*e3R,H#d&3%"9g#@5k'n5,,luIF@`i;`jeH> V]MgD$`TIYaroYU+;B@h;]ppALbB7t:Z[or<\U7X'PWY>-GL0,q&gVSXlVJZODnr) RWS(&e0.OZ+JVO0dgD%?2.ZV%ZE8aueW<'#UgAc)D\R6QM#-fN\9IJRp0g,]KtQ-% Xt>_Cn:*)u#TF]l,S/=P@/^3+.(2AtCjp3E\-QMBKJXrBki\#kk)\pB,5$f3%nIsd UaX,'o2f?#Nq_('%c9+UWh1gqQ\E?%c 0YnD=+d5^=B5]$XT11KJ,-AP`_]8i<`>XcqCKMPlB9V7$! T8&;q":sts%W$H5Y.:tm4#P@;ek]N%N0oiM9hNDWWr^,8jY0`s>g'E]MfQUhA]:$* "n,M?/Sb>b'>\06rBt$`,O)ImB5\=MFEb/'8T"de,+-$p=g]#7WhKtY0 !-eSciE-Y+_$[FM0_$iiA,n=Q3(Bhm1W5e$Cm5NBO:e;/$ISqu+>l\O3VZfC)$&dT s7c?hJ*DG*J(Xeh#'"PW!2>q`4;%AFs080l6kB7RqENgQPQ89dp\V_<.f_^3hd?BZ mXKg#oD\_*0*M2RrX>MBDuP)]U1"DJN1+3A9hA%ehMc8@5gEXKEsC?Tc_4,/mN9Ag,@)PY8KKaL)U/GJl]=i+qq:2i'sJOUI#m D?f[3"T>&1nYm9!]0=Hr%e9S:3#;#HEU;SB$N+n2s48F1T*L$5FUPtM&@uS@3.!3h Xcpgs:9mfo4o6l4gY&L8qKCq6f\#PZDPaOl]gh4[#(92Q![bdkLI`shQk'tY0HC(u<3b/1:D1+3LLgsdlUJ!7?9.Wr$02X)5 WtS,`!O:Ma5rbeH?ln;Xe>!#_b2IjX2+",HYui0\6nu,LM:?='[iIBr/8b'.f&!=[ _k.=qr#_=+6g!LNX=KD4J'PY)P'I0)2>cXibhJalf>.EYW+Q*:'_oh`"OEFqh:nlf V_L7d#R@PiLMob^JG4%+$66g/Ye<2+h;-ZBEWtpJP^?"5q5J`$Ro?eacrQ# b)g?A-tNT\P(F6;5R8VXd;^!s$jK?;;JIoV.Zi(i,,CVT.2lAB#?#=KZ05Hu">$2f:&r[2;E,\C"0HAFecT.cq"0="Y%VI)0O/"Ha)J)Gg< r."=Q6Ipg+k*U8eOEB3L'U9o2b)rR,A`uMPXRSgVF'<-*#'F\cop`tGqe#69(>Yl( 4XV@SRs+4([dTZo!rq^mG+@4Z"$ekcm)2)0kQbi%\^r8!s.S3*Z1l=^nBE-=DA\(l;\S2to>79=?\fBh7XD46f. )HUaE.SgB8A%IQVFF5AJe(iRBjK dQHX>38sKH0]UY:irHg-G1a*4fWq[;UpA1J[*uClfds>O0"9:[[llDI7"G][Vugo; /.XD2^BmSa&M)3f,M4h/`/FpL#66md1Iks 5lLT:!X?:AqaggCs(DB'j<*i!pgXXJ_,VSK"mfYgK_^Q+iEctB+9^mSqWfH`[k.E* r^WUDJ+s9\h#GW\fDkZ9s6mQCJJ\+!qoS:h;GrM'W2=[*,pUZt::3\e[Rs,u8rg5' L)WPcl%O@r"?iP1(fIdGA_r#^7ghfN7u 2%/5&(-8T1gF3qA/J/#Os)=iG+&fn=qQMG@[>:W@7F4VedJ^Kg*i#23!/3[s0dm/A @@!lo7RI$qG:4E]a#IH)c!jXGWF-##Q[n`-Q[g<]]^26U,GpOBN "feAGF]+n[WCVqLX@XhgLqY7B:d(OP'rFYVZ9fe)[jY4Q(1"(<-rVEmW5n!M7V,3N +6ug;]Gh@egh2T-%lkFJF0@gk>f4#N=JtVTB-5SU5%RuJc$BHhs#&g@KRf[4=+Ds2 M_ETOYKZ<>dr3&!]>VV=jF^NRql^:;04T4A'C^_^T,7>8&)SLV(CuQDGTXQl->NE\ -p0KU7gM(uR6%Yr]6#%-F.[m>1&p$Wk14h;aI3Q)^p.>:O[7U5I`K0"f9'4nM%pst JK<5-?/r)9PKnTON]k),D6:fp[Fu)O8s&j%.2As7(Tfg@?]`HuQ"J<5dcVkno+I!n R>_;@k-R\EKMWkZ5@t$;4X1h'/P2=oTE$^,849llGiZac5_fb2LdT9S5b\RH@Zc3: TQ8PjER'DddB6otU0@K)6l["9i:7ON":8=aE"65o+3(L>c`IQ&cUTB25[mS]Ta6*` ,RQt0@&O?I%_m)d=u?skAO$bSBFtj]!D!d[%tPi6#kCAM$'InP-tt.VRNX'g^46^8 eVT\Yju75!R^(so4\F;5;J+T1eQe>2+]>ibnYd.J<";'m6)leOoX[Gl\cgi?s18D> RuoT<&.\KM+7%)^%NUfWrE/Z"o)nRtL4nKVFl:U$NsY&>L%M+WqE[t$8/N$eO%Q;[ 8L4JK;Uc9rg8HQ47#&gKA.D0b@-pU`!X@cMA'3I\l@k-W($k]R4!m]!k,h.>?)L^d `ths9-K$PU%BsKm#"$,!:"P5Mn!R\cZ")[jo>$XSn?pU;Q1rpbpD>RN^C$FD$X:+M ?\$IGiho'KE#L]Zj>RKkHghs/G4"%)l.pNsa/+.'[:e*n(HaXI3d2V@p7)@Q"PJ"d #Fp#J?2+l$p^WkkER4Q8?\>Mk=Y^p8;OGQBA,p&Z"7])Ye'/MiE(PE*mtFq*L*O!bqe -QF$oChhYS-#DnQ!K3+)Zf2"l16-'OO&8KX@:>pSHAts/Q#93b"hi/<]?;kBeM$O! (G3\Z4kn"/bM+?!gHNO,0#Q9f_[i+%CWZ-':\Qe@%l=AS!EOWI;0nUHp?f;KR-EdTQ,"&d9lB!]PmfIfDas(rreEH%0?5&2uK!>K+QsY^uMWr TAZUXq`d@G\,M.1^I5s%s5=i^pVXaJ,a7j[e%bNC,ocF[61P$TVpij,FE85RP"Duh ;6=OH9+&cl5/m`H5L`odf1FN1qLOj(N/`RZ`Buq4"T^DNPc6XZ9GB5uKrd]c)c7GV 1!!B8%L4nT#TIKbN=j!-!02m%P]dTcrBq/KLc?)lBeMAb^dhU)\*OP\_tu [$&S@'.nFfDtHF+i%Ym5_+b,U;Ll9X6G7,!IdB?!dYIW]>MtQpfKXA0s"G_jo75cr *e>,Ef]u#cP8^-IEhU`enWeKafc79E%-\hECbo(jMXm^-XI`#5@`7QKk)VDoM`.^aX:XbBn dLWKoRn&]seYo0*Q^UMK7^3`*:a8/"SWp#fS#7#2aAIf<^>Bq8'WQj'W.okB:o573 XqM27AQj`o*E&_OI&U^_iM2bkq=%:)nrR)O&TRY.H0n>gd80S)58QHXP&pGZFo4;f n.QIQ/,aPc'`\O>G8[mJq$Z6Z',p,b-A:Pq=Ca/tcN(TN_I\b_6a68-M&Ma@&556n7:A'_4OUJU$r,A'g7@kSJ@- 'CfnV3&W#KRLlp0#eM.,&$C0@QpfG[(d+]#V#;:LQk<1.OFKKEk^Yoh(YZV3(!&K7 ahbt,$-*L5`fJmsrddQA9;DtfVSWYS6lJRQ0dOXT;Ig8%80<2C1Ta]^XBi8O=M&4o G[SsACu0VUfm.&SZ#A(!D:#Y`hlp[:^CXr/Ee*HYk.bkI"7r.sEc-iB)MR20.\4$J>+6m'u`W\FaVuotVT>SU/*KY&j''9-;OXhYm>&9E1+nqq.H\ kW3\@bW0k,SpCeeHZ0!u5/S1cUISWX]V!!/#]no-Jd?SXF(iUR^#mbLjY6`GI"sch _=HLX#:71LNXp?WCN/*n"6@f"s/IGnc&8pm_Z?B7FWUVB@*uMt_5VejMG =!s+LiguU%IQB6XqMJ->%nXd`8S1R'/%G_.nOaV6(*E0f[,>u1`$%\N99@J8 0lNMB?b4V!p@J6#JH'fq!l*n(Iq9";keTH$(V"8q4KO7GHC#".(\=H"1F7gE1;.CB :!$"mM(/]!WYm()-;fsBWsp_9Jc?YIQLnQ),LDb8mni26e/+Z=9rVJmkrto'?D];Z `\/<#9HT!a*;/I[`C&t5p8P+rqaY7[A0)KoI46ktJeZIir6QWh2fJV:^+Lh fR+:>r\Ale/o]ppA*1X>o#uRTb\lLsB)'eloYtVCg0sW1j4K@a#iOL."%'f7HIIU< o8ZTC^4+\-@F)25bb7?"So+pD=0lmF[:\f'`OpTtPZ5Z0'PgU!HBY kJV("rmRT5;kig"r/lW!cp:>Z#8+a@"`ac6L.0"8AYT't6EBl$EtCf?kReC>MhSBD &;gaM<_-F'BSMO^&sm-b1L`Z1!^/S+6BjGPi_kV6bf<8OTd@d-i\=OYG6l>M P'U:QYt)\X$&R#^A*(pR!^ZcOiG=Wi XpA`@1]]9SOuOjXjp8lLhZbB)@/imIL?(-[*or9Zk07S+/F-B@):n3o2]ST >'D$W2BMtS)`DTteZJ%7YNXMSQo+55[fc[!=g];4p0;kOhKY)Fo:LCO3.9sK!B>/` *]WlbY57_C5/WA1JC=IMhV#R0&A4>sVh+gDHbm`TS.jL?pqD:%i3(N/i4sL)cu&!f IH\af(i\Cf[-'/gi\u#r0X:)ch=VW?pDVo[j;rUX"$eiuFU*JP%6s=7E:-qRls@'f >]T%3E9Nh$mf7m)=kf5[S*"Eie!,"8K]V5kZe?Rt8rc1tf=6^??cLYM))NmS)\hsY k5kk[$[Z`j*p`"=l_M!-jg?&i2JTQ:[HJ'g[-C//M<,e@jdoml?GRpO!CbjOq-L57*fepF2?9VP/^qap mVbf/Z:GH[j3:It$9"^TK5BEne^oK>@n-,G!J)BDpFh`FIM2bkJ&qZHs8PCa!8]7t !&"J*&chY*I0oBZs8TS1&8@4EDTE1dN0sK6QiF;tpoXR!6pi<;+Icf16aOq/iNcC% b]jLF_'C2JOPm;Um\/Tl;fjpZZI9MqHluf@K/T#`Ru!i`Y`Rsjq:g]JD+)aZU)4hH $r3>=7LEo],E.g$[[%ZEabe`mMZKn##Q\`_$JDD733%kHX%WVa'M+2@=iRj_HV,eb<5!"($9?XqF`3n07/#7Q&070#o_#i'j?Q">-%ok7Y_juP_$=A5$9>/6jor6,F/i9T5Q)_9X*T9V$i1*TJNn,%f,qB9&`6%O4H'UW-%8PLg*[ :D,U).GHd1]=4bd2lV/5eGUb/qld:XSu83pa>aA&J":r^4S'9*K'-:WmrH]>FEit[ "TlUoA*8`\ECF*H86\8OS='`NBJRm_;G/E7+dZjh'PkX>_ug\Tq[A,S[2jUG)nE96Ssg/UlZV^\F<"tFmeNOY,g)h Wl!N,9+$A/dchDXe1i()@FBf7GtKVr<[-dW,8fk61PR37$cJ(r7?4#BGo`0^d."E, &\7B3EW65lLI.eV.\oa'Lkd,WJfo.\,YCL=eB)u0.Rm0(qb7BB:L_0G&`I5WJW$rH CB53ajr-(X<%Kll_,_>lc/!9m)J0@e4TGWA-T#*Sh5Og.O7\aMEY]e!Y B%,i2^3T=aC"&2IbGfdQTlK+iG1EU)`N"+CL-b3]EW)?jj"8I:4hH^^2tjZBd#IcR i6n.u8q8/,^-d\4?(9,L-h`\_^ogE+^)aj2!+ZSXId#,hhG7D]!@Q/4n-''jI/rbc ^M>M'3-H?*G98hd)[7rcE,R.dr!smdm6`lfmXp:dgg*u>d/0,%s-c=LW^G*eF8r,\ ^q(37@VF5fCX&k"!&pIQD-siG*B\-2Gi#07g8obYW-Z=jB$.Ij]['\tK%J$!r1E&*;9j6f>"[#'W!2;`2 (B(KJX]dNW7$X:;'U:058)eTM7bC-:fom];W65*"\riiOUafVsKhZr_26kppY0J?( eh+GLR9\dDck;QIW:c1S$6\KC#IE4@l!BCLr`57K@j(fi+G6HiIr%PmD50SNDJ)1eL-,_2le.C^@_#-Ipn0s\p @p5,=I0m^4s36)l!?_`Rif&+m`#5J:N'IZi9uH(ig;$O$dc2mo2^San`Hl6OfIM:d 90$[Ci04BrA^RC7#ZE_S7f`?h$\=fi$++Uu`b-sMD_E8A-RE:R/Hk,FbR^q@(U[;* ^aVkWX<*5W*fAW5'"(dUG>oB&eWfXP;$bTKN&"F/0N2H6aHa;-Ziu;F`!EH?#TT]L h3C7olS1W3nbq0oq'2BtGAMO&k?#+-:]8r?h=(lWo*40u.Zq8Nn^2aKrX?nlRUT3Q 66/M*2#^?YS9bB*1G)do&ZZG/5BrCa!:*O15]8c#J_m]O)VJau?W'q.;q@QdX^@1J >O%Q[$PuZ](JuutjQ11J_G.nq/S4$u8*\f,g?+=#"2K!Crj1+&i;]_5SUU3oH1ETR nkI-WgW\,j=_I2E:-W80IE4VIPRB.fI*=d&T6^>`kNlLJafG&df,=H==hCjmpRa3! %YteYmYspF=llZJ;NQI.;Ms"],oWR'2+%;;a9&cj@a18A[IDsATt-g'GSH[C*0d3< SG+G=i)+au_lu77I*':)dRV]8!elGX=a\m)6FTPKN-kL`EVq_7nSR"RkOdfM?PAHL+s6eX55?+HqO)U'2KJOP IKa9]_#M&6i,d]$];V:`JZE^@2kG@LhRUs]56A]ZlZrcia,^qSt!%3 NVZHC](a`ZG?(-Ko0BAL=;PiU%K(^Khm0$3\?"JlXkL"V>eV>Q4"JRC&5V:p@tt4t -:Hl@`Q0/)bXk^0`=bEAQk58[+b5LAB-Vdcn!bf9U"op+I,Ip[HqlO9>TVTQ&YU%o OpZfF_2q21,S:>3(J.^>C&)hggr;e"#"=11Uf=2m'YZK;>r(3p+\WMn![MH$jFKk.%X3]$GqtRJeWkL$`0AS1+Ye^2=asoo%CH:(69WF )T]Dp@ETG["b.RO2Mctp)%d;s'al,%JqW$n'>=Y4erB;+JRD#.]O*c&pn',R2'.3mf[HsBkll%g"lITtn;_3d2OWE$#+2QW"^q)W72-:jV#b D9iEh$NOMaD7Z#bgK(E0Q>u;B7B>!.lh4nZc3:8W.?fL3rL-0m\cm`?3J3bhj*C]D .bUU`e\'Sq--N/SMoIdKL+20:EJ#aVW+jedEQ+S:.9j!#5dq$GY>Y_jdk9k3bj3g% mo%Ks<6OXZa9M9NkB(GogJf%BO(^+[N)n3q7Wi=6.]l/tX\sjVX[0#98?L640%EK@ <$A-^L!ZXu.A@ji6EW^?LKLoX'H.e*B1q0,,\!;X`4V7EK$kA&FQJ<0/Q0,>XjJl8 `P%ol[%K?%^D0Ntp(!u^4&J.WW4nQh5&a#_"s.DRV`pm_:^_@3@T7e?sr^gI!]CBFF[bQ$N4 n6Q#Xr"%]V9sT>,a(5l7l![&#C *cItoB.Cs/Q)aHhl\c=G:#t2E@@e2&]s!0>D&;tW\%nWgr-ua%psUAC+,9uJ`tA6t /+g8Kn?u?\Y[2RR>]d&DU,P`B,u(Zpj^Aa(TeQIC(/^>W7SgSHk8D/:3gA?tOr&OZ@9?uXsXE36`/&7LQX3[3sT/'2+YmrrOG'InkR-j:DN#Ur]/ W`5%]GSF()+.au#>5]k`?&pl2:q[snH'Yi0NjePAIdi26pa,Uk,A$U:_X>I_^!DN? 5>t=l-Ct4B"6][uGP[/8oKIU$@k8T$I[>$I$i/ic@J:H"gD7Tja=T@Y`9r,4fmAe; IM8sZdV%gTqqR1[,iI7!$3Yr"LPZDon@@Z-V<-(3g#/,%qnf#p9Y1[OUu&D\d^Z@S GYb)S?b:;bYPH8Dm81-3?bLIF;:XBQU(sNk"Zb_@"D(ghIS>PS,"NUc,#='8""&[m A([.\JLIZd5X3C-kck6Kh?#\q68hOD>Vk*B;8BW1hkEZ_1`>s7"t:XIORRcglleYZ 5oGQEC8IG3PIPrg`e8-&^Rd"LY$'dCh]bQ[0G`Y@`1hU,+,n2Hc6YaE)e=F=`8-[$ ]r71k\P<%"kWuZse8,V3PJht\GS#Y8iNT@ +.@?';Nt(D+:qA*r6dtYm/I,1SH>%$Pp!5$e@Z9n<iCfRWnEGDsPoTCY(,<="J&b/8:A&C6l[NJQ;#m ?,rpm-[]4RYmW[Tm5oKm>IU_<[]S8,E?4qb>t5Cfrk,MTA,;H8 ]&c&/F\>3sbCJc$[Kihq]`Z&s[mk8%H;:)%?B88j\*EuhfR#lkQ)&3-)j>=IJL#8r P/nMWK*0bnS9)su5TgY,c8fAi-Kgn?0ZGFEgYg`?dkfHoVXL$/F4*,4TE!Z/]4^QB s1NWYB@SJKD6Tq9qg#rVg/XUND1c(kUI&Fj@U-T_FJX(]3B!TO(KE(,;^rkrVNb2V RTuk]=K!4+V\#,k(f@;a5,ssO&4DimcGTt7YW`pah[I..%Hj97jcq=WR4.250BO0# iYEcu)BnT,R*Rs$a>$`4KqdRlXW()NPL/YaBlHWnIMtV"n0HH%1ub2mHDH2,-Mkl` G-!b;?'=m]rt?:L7pgP6pl#1"UC8"1s"sjkTkVCqY+PU$s3S[Z]5F2^3d;M@kC$XT[pI9CQ7^aS-=3/a;%t1F(93JW O%]&-9CPu@o2(?d+iQT%9t#ONmM"+a=gC<\fh*7AMk8W1R<]Z(F5T9h+#rpK?jci3 .VS*,I/YC#i?W.M[!r^rHk`j\-?Sc;FQk?$kotB:12,ohd.13'icX&)g\Bm>nZ2-= eq)S/m15%8:gaBti\j$>Y271"I#_G0P-FdCIcXkZihrUFYK8l`VR'Z;QhGkXuuC1u%jPUK&aaTgqO"m*l3k/[^:bPBR/"_9_NA_j\( 4TP-%:hc7IXDlWc]9O'ru@$9606c?^;B5=&_e8<%GCW9@jpMQPJ`-MHTPVe-Se]$j:nP _R_].]/]c$\bs%K]K/&Y4#rhbfq,SA4D`u^CLoj6>F$GP7>O5n$aG5QOG.B/F-F\$ 8g&`Wi/k8)'XZl^<^mW%K")1sU4bCU&^6-aUWX)*9tBV)Naf^<'$>dPYfM-pp5h@? NsB]+0(qZ!_F9U*FhZoSSbm7ahqMV.5tCW@?0!,"qY/gGYDTlO$^)qT"q1]Y`0a<1(><:u2b+6:1Lg:CeL ]PGs$D:#XUWa@.)D&P6K))eUZlB[5`bG=XpM8p`C$53U j:)Y-qK;D'mF010cA6qkY[0&+?>/L3knfAL<(r]]:RG/aP@dhD(,Z(s*&]3R:c)W` %.k-P?g,?[K[e*,dE:\#am:0]G7nsXol<,&nlk_M/YpT[,-=TfX[XhKc%o]"Q<::0 ?_e7(M\""I_1.Lh7>g%mMP5_2+b^83k^TE!Tg6=i37Md/G]*r?P:#TgQ?#Z`FA.j< a]&VI0MZM6P$RO@RV*]Z@::$cCD^YZ#^W4r*nU;jqqO\Vf5m%),HiDq#T+jP$ T_gtO:CT'P$SY0D1J[Hu89?#p4OjeF;t[V_F#C`qd1ilbi3C+==GX2K$R"SZLcI+t ,(u)FZ(CXO%\A1:75oVmdh"0#^e_X+5BcRF C>f9p+'.m7'FBb2MR99R<5qMmKh98faMn$,`-NoQ\u@'flGl+IV)gTDLM+p\pT,`< m3\pIN*1QD^3gd'n2b7V,\6TpK>!rBKA`08coGcJ7.;[NIQq66V>on5s6PmJgf`RP FjS#&^r>&i`T+2%PORhCnEGjeq5^I5lfaW.0l-5f2Ll;mS%$ca2c8nfJKR4a+D1R1 IcX5nk#]_!Q^"'8EN='YD8IXh+`Rn"M;Nj+*3S0EX[/hS7F#fJp5VA=H>\gAWLa)= OGWSR_Y[p(Ht^r71hi!ZXCim:,9,g.Klt_]\^Bs81`<35S0Jd7a@q.9=k>3pF,#p# QF'9pc8-:*PDf+Z`VO1V]Ws9=nS;*^m5N0o[Vn.tlG![r^'S$?'X@H[@f'ZVf#PQ8 OSi=d754b$n&g!L`G2r9*;* _ashPi2'#sY!LgVI`FXOI:)aESp&;[7M?L9qeGdcau.pGQ,&-%ag+V>!]C9c`b2Kr d$J=MQO6Ym]EQd>4+Lf^12r44G=4oAFjD6 M[!5*8lj+JFqYdgR;k`bIRbiJ9r!C!,`,g_RmZ0I&$$a%64sp^j@0gp`!fOoKr`+I [-Ff;Q)X8]9R8jU^W-qSEoPsa`_O)f.rhZJpM'ZfOR?,BbZ6:PQV.1J8!O$/UAZQA ZI&_V%-IE,5)hc:."#l4gJ!cU9i\eTa.66R]/8R`%`_O'T/Jf^:_C).3Y>(f5S0sRME'Ti@%!c:hi 3e:)!_P[p&-Vr]7bA)_mHI[@3ot/6:4!sWIArXu['hb?C1^irV[L?o$*J<'O_n%_= l4&AL-L:LcX86u)L(.?6btRLlB1'F_bHQ!@W!PMc`0qF3l352f6VB,[+B1#XThG4&\sS96u"+#PO#G/gg'4u/Z>0N.s46i+cS H:@eNJjI'OLku.15-uuM$[[$eqZqm/LdaJFI%ZC^gSLOoWD-5_8[FfN]Lbbgr;T1>'/(LBQ8ss^!WD[8pC,BHeJUDF>Hr.Od8:dco HK9un3))H$//Cd?M_$Z]eD!o[*5YV@*($b9K5>\X'R6;4IpYA21%A?@#M]2og*bgm 0"U3BGOkL6f(d5a)S\`A_uEoTqEO2;7]?8Es+C6#BNJJor;V9E:C\ZJl@7sTfVq&h .@tkLb6snTL-JKB[ScNL_E."=4]^RO`GsReZ<@SZQMcOb&,N6&R1Ng[N;DEuPgs$/ btO;L46I2t6E.Uq?jEq*/^r'BNd[',&-`M;qae#;rGaRum<2=tIliQKj3oC'O4DBn;i U6a*"Q`oH#Qnp`&'_>^QBGm?](_5?:E.IlW2@2O(m:4<$Qa@b;HT+Mmm;F\.$M]eX nqW1Uhdme#:[Flp^*g*i-S-9.9V9ALSOLkBq=Y9P<]95A92q[mA-0)Jr*eMT_72i> ABXaYbBhS+Sra!k1+ju6=eKm$VeK%)TZrRI7`@Kd8NCBj*&AI8O'GeWO/=FuW,d,eYf$5W4O2Oc%2qdr%4B"hnp,+b@bI]Yr.*Q$ZM!o?Y! ?M3(p2=0`?gqKnBU!JG0HGj:uZ/ebbar!Fqp)%Sg1LN=L2O;]51`]C/PQ_ @*Pcm_kNR@VIdr.=i6tR/XV$F=9e/O@E"I[ff66]<57K5#,PgaAPhZE`^^G1TcH$> )q'L:l%ib.oRSaWat_ps!.k2CI>75aJ,rP&!0V!ks+P>3d&W?<&b(BSdRu"V-D6D+ F_KsHCLq^'dlRj-G2;Kp@b,T@>*Du*BYV_5#Q,,23pi^i!kF#L!c-MGWmjt*P`i=k0q!&Zfc#u1G%jrP ij'YP``Uq[$A@*sLHHbH_9Xr&^t@q+cM9`Yc[=Z+.=X$9i+]"t/]ci@mb]4=3=e=Q 8b&9Bo:+`m9k?^dnA<1)+_*)'2l)-9V"jVZq=S\.qD,pBEoP(GP3,BbpJn&[[)KpW 6uq\jg\n\Gj6sY&69\GSr^/d5TDNp5D3X3JVYL.#>4A0)pjO:Bql**DCFel.3o5KE hN`K)@B/O4Z?1@KSfWQ=i]kjk*g/%qhD48NqaaE66.XQOe:lNEMoQ.)Vt'*9nJgYJ lR-[&Y@EoZi`G!T/YC%dT#IJF3*aJ,]M2RZQaljO]_+I6pDnPB.V\c8C#_5d=9CeF ,d2Wl*.FQn]M74s:#5b5f`?5FV.34-rI4JPP2k=@UE9/pL>3RS$MW;Q?L_JTeiOhEeiF&nPZ*P3qP -f,*Q_g(@uDrK8oq1B3:"dYROJ<'`s++;aZ4]cOVQEHfS+5;giZKQoHG[im]Ed./s HMH99i7PF2PsNHNDY'0;j.9!rYbb[8Tj5:-<5#8-^+N=ik$Q0kD..L:215BQ/oO$2 @nJ:p=s@NMP)LTUZ62Z,PGQRHV,-%_LF'h7L&JUX>aj=e[rFJgE*1`]&\I*TT&W-9 `haZPAXn(WGN:Lja](Yh%ZsHu;"SBjf&EfmMTs$J`!d6ReQM.(DDgAt?>P-[9-PV; iYMd(T,PZI1nt!(5-5q(#fibsm>f82[-E#adWc:JiQ/9j/H(!tb/ZF,=gdJB9K/G9> FYAX%Ic'MFF.X.tnJTIVsp,:89GL :5`#NRG+W2a5[ks"fLO,65q6J9XlG^\9tXI.T"Y 9QX27F\mGp^V._:K1'lO:GI`Jcj[B`$+,fgd$&KN(U]Ui\>/'4JR%Gip\$@OZ9: ;M`jqLr3D`dn5kF8rV@7,A8MPA1Am9L)2_6&Mq7]JFebs"\kfsc*0M]=Pbk/T=qa)[E(I&Z9'\Wc\>6TkB4_>g,`!rk!1*qK6, +b;lM$@_`>mp/*6lS>F="\368D9:FKrqD\7o2(HecqUirfG0^[RFZkL3dXV)HV<%< Qb)]>H1`Y4jW\j7/7nc.C#^m]o/qs+Pps3U?>Cg;0]26YLDdpS%PQq%C32DSN$L"#mRr7Rla> Il&%GCg9lhNtURc@](#j]>gB,3pu*2)^H5uLM+^(Uu=GaE,Jg!?@!+]T1!'8Cc#PTbcmo1^qOt62^:XZK^kFNpXR*G(jkB/D@ #jU!:Xk[\SFrQ(m^h8-.r[PJp^mGpi#l*>aG2ok*hKAA.A`:XCnZDc6RI(i1q-`L) DXu;i%jD#-6c72T6H_Qlr?\.S8%T?W?q[mGlMi_h_$Yq2-;!+1A?SX;RAR\.`+[,`EcWQg.\aPgTBbZIRd]BPK"gpS%.9mXmr3h=H2p[W8,%NDt[)eW4eK4a=Mp60I aLis5\Z*suEA:#BOt%/(0'(G6jj_IddAA-\R>;h';(0#N?GTAb];&`LC0&OJTT8n@ "0Y?"T6i`)>:m$o4hl=]LLULC@uHH;+>.OG&)&Cl8L9?f-B1VCNef&Vi_iiWF1)?# >K"rih3&MDibA(E=j=#c[B)f>qMIc!Z3l"OOhRMmZm;9MWa)p.;S&T#ZD(C6U/_@J BN2.8QZ$SS<-jmQWWk%:IPDN3XfU[ESt3=nISmg$[[D?85^`W*L]:XKu' 76;0WSTRb6FTKKKJ1gWsgESt4;#-;?q^K?,#)$p`9b,[HGjA5>%=hCgoOu]A8"I.[ lERciOVZR\"&U-L*`mWqVp]c1MBV]tOh:OIV''4jK^SFh(1T^UGY.KE0p[74A-=IR I$T!u^`:[9K);tZN%PI12[C>^KT0rFJ;L@`RCnWh$ND>FDEfAK%"%En5gGccjE2O7 \W5cq]u[qsMu9b-ggB6_r]8C(+4KTV1a_k,508lQ'%]jPLR"TLq')RjiTFa6Z5BRr E-\`"-HTC:mD6J::YJ;9k\9VAgQZQRk$;nLT.b:!EO9aI2GBd2BFeDVO_CUTAJ; "od&p`!3)1pnUK+V+Z,I@!j^`?KpJ;)3Q&/(j@)idNq9?=bajnW;M2dWFso4ca'@< A7?N6,jdB5*s%dsa)E=t_EM3%8X?SDL!(71_#!]hVeeM1H/n_[3dC4Df^-53\T^>t kfJGPk:U$&hmtGQF^D_03d:+=lKZdHHi)Jpl^8F0a^_Z>A!=_Bj1a,km>$@\ ,Q3p6XibL?dOk-T*R0aaNT(\lS9^N]3BV.QWb=te^+>PS.%NJ]Mk?>mRDFU'iM.bT &MJD-qtYlb+UB@QB(/AbMQ&E,KGjd=DOus<41=sdL3,g@'>[W88B%f)Ks9N&g#PI3 Hn^Hq9cbB)N!op[IV;dZ?*!ZbRR2u;Z4J>[F!'q%/QdL>0^NdiT+9ddO(Vfq6@NZN q+Ze$(56raRA[q;DF7aYUjLq.l5bs\Wr1K3Aj8C:gWL.XRE,,s;rkQ>p"j)8.>#bk 55M_ln"6LhIicW-cm/=oJa9P%@l'[kLU?W,[%L>Q C03H-<&AJt%%Ui*_?"*eP7`GA6"2!Y(&4-W@(9+i:WR*R*$Q-6k[;mG*=b?N5AX.Q Al:a*?FKd9C$o .7]Z(6rp>,qD33.?V^ ^L<#_2aQ$s"HDq6&-4+;!>l(ZTa7+F"jQ-'D3Xius52l^?Q3*s rrW#fW:5:4@fJJ>qU\lQJ"PfudtmL3HGi!iMI&.Hn!=A6jTppq`&^dB.Uo4<_)PVk C@"+'e!l4`lru4K0l7Q')-k+Y`V!W`$T`sUHq_;q0pd!O06@/kfHA/daS;-R qB%u'I2\%\%_lTtIa'j&+s6a_Ob3EOpmAVtrr8/T&q8T5FGPZWi$N$uD:0bW>8m.C DUQnRV%;&r(`/\i/\d75=pl17GA81I:t]]Wf0i4a;i/ba$%`GULq;"[4Ynd`=]eH\ egjD9N@+H0aM9c4`>elHKEG5k+^Nlp,5)"-'7U9a`?.srm5)]IZc&GGLtGXNlk8!Q .;TKjOo^!LbdBr8D`e7WrMHb#k2-=nS[hIc\P-?jcb4s.JBPgaV__D8-I2!J:[KKh D+9&4GSu)OH!UK8R@WS(_mGCk4\6&na5<,n)4cqQ&HU>&+:,&Y31::a_tJ' @7\/.77M6)Lla^8jb!!sYR:STE=OuG%6EDP?$NRDF=qV''0c>*#09Lfl-El957]68 (5Z*p+r-urKKo??3mW)6k[l=%O?^$DQ$AiQoeMa(],(&uq=n39V!/ba>^X>JAKi*S Xl)B]i&GYllkcYMXcP";A2dl\]O'Oj"4BF-arTW&Xe^bh;C.A2Z"IY#ZXT>T9Sql` 40*ABn!Zp/,P?Z@O_>dEKN'3)>PoMX'EjW=U6pS3'XA?E3Qs#+mT8;V?]A/hh6Etg \#\J.DWLKU&IBJAMOp,.RD:*X9?%#h1+A-=e7D&eYUE.q#["m?c!f"C#nR(.;Wjl* o=2/A9_&=@]Hj,_TjG73!&c59R+RaB+n=/V+XA.C$:#?A*]+Z9+hH5;,A?pHL](t>?K":T&-p1_m) !Nl8#?2>Ze#CoRA2SE0JX%+BJJGoqY*2$XdY>76h=-ML9OUWBU)?rdjr'+pmb+&hX 1PQ/`*AoI<0Im>,0A88l)]&r$'a*BA@*#9gfXM>NIniB>*o0QaZBW%EB4?b0g6&XGjbc92e"4,T!:o[KXX4%L-:FJ>$[6p_%O>NuFH&j5T]JcF-.*=JD< )^>kl/T2SFpUdGC2C]bKWh'tESebLIr^S%M6N-pd2p;:c=X_-a )Z]o5r."Q-2,K>O!L+]>PAg$l`W'I=n@s;/"4^L(R4)Q=OH,up1:IX_rJ:[#6QsBC !1ipE(Lf66AiC@c28fcnCV/#H7T'5r9r,.DUS8tW?CK>CD[5NU9EAK_"9iYoh=,8 "[>BI!*K)!5#VubKs/il!U<<+i'/u5O&l.G8%31;hgQ@>l6TC.d!h\V1J`&jNct1H 'g8o),2`Q^!\!s0)FWR3I(UbD!Zt@LDc=).Ui)ql6@8Nr[eh@\O1@Mp)7OQ'200`l FVlmBl.%lmZsiHA8\8tc[8oVf63sAPR[@lj\9!Op;l[blMPO/\c4be[,3k7:p*:\<@IlS]i"eK8PU]Mblc="`<-.,L;mhSb\^9,B3jEgELW^gi;tj;%Kd((ohUH*kMq[?HR+r61d==8dY-K/aq"1k eb>3j8A9<@8fsPA^[ID:<@BU@M,Z]/b&*8YDe,-ME`@3p[fC\V`cYB,q5PF@=!W#s .t6$!q4SmS:ak#^`(;="\baAo7I[3]V4V+.*7@56iWV7RGlH?0IS)QkiBhoP\31C[ !!J-H\5HK"=Y._k*,7ptR\a9-,4n8/X1CBRS%2g."hhMo6AMAsV]Z=daWm1O;5n47 JglLE`KUQ%jCqlYKN&q;7#"gfP[kEZIT@q8=u(5*1jMt]FUjV?JBM8^a^Ncr9+(J& Ek0XY)DHlA:1;U`AS?/U[!@@a790299(ntl\jc\D.7+SV9e0aMa_/jHdO4+^J8p:E 1&9%%)(PK'!I.m8]tT .&M,AkZ4SQW2'I-lI9.JN)$4VG(nF(Gma%G0""D&V-Q*h6\WsfRb"H1m8-Am=&*O0 U-)M1YM`kZ[sAh:V3VE>pqK#]OFH_u;9?=>fn`KK0P+*FAQ:a" ;@LPEYV@%*P@bOcQISpreYAuVkW.'\V9Dbd5libI\oi';'USuU?DGAddukNe79u_E %`0kL`<:LV:)8@D4%dZ]0IZ-A/8QWp1h^M[lf=]Db3;f>Zr/C'@nTgrMW?">jJ!e3 .[3lY7:GkB*3I:;bCln98br+tUSs-"M)6iA*>/K8ON'h/c.=5e:g@<[sGo2liT.#:t3UYELV7C\:&pl$L& $nt$+Iq*1Yn@phUi%CW$SdZ^V8-*%=/dTL3J`DJE5beA+D_3JY='jh!P2Kgb!Co"b Ij/O&*Da:3mfJpU,bOaF%I5*_=oU6$oUh?,s#hn+?SfS!3\KuQ%>k,3-1nX"o=0fj X-@fd7slFb\iE'f4:IPm+Ii)OZJIfn+glSWH$h,Wl6'j@3,\8D]F"i6H1Le8Ac"T4 $iGL:K$Naj-#I"QGM]7c"6cUf$G&YB&cl15oAL$dSX6nF]Dm_.n1j=g/+kcA5,@NI N%JFFm"jpr$4YVT#1.C*jJ:%mcOkcf?-K5fMq=lGFZ4) hK[@qn=I73T=oE>]R2JXjtM)J3-5%/)C"+hVZ2Wif5'ET;q'#N#-E[!VO*bE].2A. 8lb`qeM$$aG4F\k1*sQBU)eX?"tkBGS%UG#qt%"utLu1^)N*+aB=BHTS=d$ad7ST0u(pbP@Th=NZh3X ;J5+>B,/nY>5i\<$P31sD0Q:V`:[S\fW7O"iB'2pP! $S<%U2b:tHitGW3;Hi.Fl`b@d;DHN"eX5PMZ&!/b8@Yc6)rHL/T_p# #u.]s9sVl+Wrf+bL"(,aQk#3pQ>lp FE9NdEe$%gH7(H9\TW.s:3NsEAfDnk9>@-b:tVG3;m2BfX%fSA:8uf<.TMKX;2D2N 7Mgtk+Aer$<1k;%XV"TI'[uP2,POJhN:DNc;\Mr"D280']:5e2Y8,I&9\70KbLK5& fgZ^,B^i7U@"uPuMuRq9rumH2+9Kof5em,%L["gU2][YQ#mjpks5Eub+>?C]2$24= NRK!Oh"6f&&]"G-#Kd?2EcIu/#a/k_)S_UiV_dJ\'+r/h#kbq97"?,@R3\sjL>P7Z h[m\D.fHLE^Ph9g0>hQUbBKSp?!1KL4LYc[#HgEB_"@p>Jrc-^r^->$!\UL#JHVR' qg<7pr:>bM8%Eh-H4o5\r^cti-hWP_[M[J1uZJSr^U\8O(&]j9V,m> 1(hEMoM)s;A(SFfcf%NXd1cE)F8N5k#K(2_6^JK>=P>fr\qWl2OA"8*,B'X%CoE-Ul\/Y/Ld/Nk 4JcaNWaS%XX6>'g_7381KWI?QMcM7N/Ah %c_XHrIie>`&f'I;3d5LB?;_\WSrD9U(Xc(7K!+gd;g#Nl@lTjE6KRuXCVaoG0'(! EU@YF2[q*`Si6VH=cMnIn<`g2]6QLH.EHf>bAF#uBpn0S(33I!n`-:plRJ;LG9fTr aYVkH$i^St)HCF1eLi0o')YK+W 0tT^`$_`I&\Wd79/9F3@CfD[) 82(;d((+K_-mscFQF((oQm'<0;;m07TnG_GkSN"d6NXM[_XW&+0nU[T_\*:S,1/d; EC6,'&SrG?bG]g*\.\UkFQ@s?$s`._M!bk7l4o6F&rl/jM8'/eef&M+4o\ 1Kr2I7`!FiJ^?HOn9X&L3Y@T[iGbGn3"/as_?Uu5Z1X875Qde-'KZ:)#Jf;X15VZD kVUDF)s*5tYd"1Mi+!ck^/?-fW03*k/:^tj'1"CR69Lu/19t./U/W\F6o;8A34Md5 #[6GY8q`MJ=")HrdW%rqE,dc1Qj3A>-5CR'HsDSEC6q\-X'.R2Thaq)ao\6Rm.Y1+ GA1YU$Ol;85TKD.EZkM\oaCWgncq^>5T_/aT865UF_[[ab+ZEOFE>(e$@3/=g3%I? [B^_$W6@57eh*iLbc]NiQ)g!><>3P5P0-c<.TI-T'k41CacHSf@mZXFI'pIHop@K: 9&68L6JI;eKDRjPqEB+Gcj0HM2;Ck^4\TtRc#m;C2'$O5*,Uq1XAr*sS*TtorQgl2 -_UJ=('3WOTZi7c-n!8QB<>9;SN&RaG]uKK(Ej+_mmB_@-)LD$V>?Ci&O9`Uf)HkB LB#`X%8r^=P8uKD+0(E>j:fdW1&;NVRR6u\4RQ*`:1>d#6kLA8<\#n*.rf_?%%!q- NsUQq(rL3Njg136Z,UhA_t2O>\KAub5*FrO+HKtZ`t(:oiIQoJja!IHo0$+4#Fs=t 4OaO%LjU(aq-1N,B&^<1l"mh/m([CIqo:moIiT4&pDJg;SJ(hKYim08Ljsk+I+9@D ?bs@9cTdREgmoot+!F_QDc#V0598RaOjq.:0R]%eI[%'ZT"'3>\p9aKGb23ucM=8P *[e%]-#B4Zot\&!/*G=GQa*$HZ0N2\CKGKp^ifS;]>SR]p0IUAFmR[ZbiZO)mC1JI f28"rEP!;+pYX#/"46j;5.HU0L&M>J9=XeG_CgcNcp>K$nUV/iP'9*emX7XZATiT" 'Qi%621O=4!%%U@`(fC.J1kUi^J\G;R!m1`&Vdsn9\G3[!!"%t'4[F1g@&a2hbdb: P.*)S=0LW7i9u%.Z[NLoH5XC#S[4.6oC.IC0rsbPf.J6_:IAcFPG"mBhpG`]T$:mg M[pasb_fU^.-:6nHuWN)QmYV\KdPeI'6g6E4@p97PTY?,8aIKel=%:!rA:d+W?O5L _Ud)2M:tiqm\^EIb7M!Ujg0qX[>[O*.GTt7n,[qAe2c:3'?BMkQ[uWk6PiOQc6!Rf gC9e3*BCMK3OK\b0cN)1l93S]37;YhUK.=tXnn;Tq7_6mY&)CDI-q2&CK3D9=I)]d Q_CP);H@?BQfQ&nM;`C?a^9I[c^k$#c)p^G_)$>N/maV%S53>AXdV80EtO[>G0FGs `*64e_+`rF#NEp\crH/A73l1GWAbMAej]F@OgS<5ejjOVQ7Sku8>n@C@YMI52#Z4) FOIt=>Jd_90Ad_a2%[p8P:s>//bd,CCHYD_0=*#*\Z5838+]dbcWV*.?SF5VNdPTg r392\["@Ib_p\Rt+LdoBhVsR&HZE0@+m>)/3lbe8hg$*s/rb'3#[&K!)`6VM"o%IT [/VhRJ(5b7Tj@&0Xc$gME`42AiY+=&@"fF;*d]$nVQ\]FdK_(kDn$l=6 C3ZEP?rXoP(_cN`k49JKp)`;b)@.FT^_e12Hg-QW;*[qK`IGXr>l]LP$B\S0oB@IugA(f57MhK^R #M8JLeI.*g$AUKqKXZb+[R`ls84Gb/:?]KW469AOjAUDjded$#qUMnV1pUJeB(TeJ okS.MC?H#hjpi$pL5>ZCUk21edW+;VFS1ra5GVArI&\8lk4UFk&*k%K\)YKPgBs=/ lU)-=W<%n%Cfeen;l)WYTscGK2_.ekjHHWU&hC1@APuC%R)fo^La%tC'!X-($\UhR KgVQ1$O"l]r!Pn[njNV<`']&1WJE#dqBPK^Pu?#[f[sATI%\6;mQXa3U)>"Z>O9!LuD>s>F.0X^$q--&&+ grRLakaUGb9smgtS*E%=BK=eF3nPiEZW;')fCUdBr'1/+=T?o_eGfZKs-]V^eGn`9 YZA-;cMu;lN!LPT_dAbpIu9R)e,SZ_LOQ62+m"P]l9eS@J!)fUc4CYg,nd/pj,%8e Q!eSD7ik4W\M&fl8@%$9@^j?t=^jBCUcHh(^#6Eh@l\CG>RtDU*m=*+bOaH2F$E^` [TDAh*#*Xh.W@I!E]L1>];kBfjmT>qkc69PXtN>Xa5>h#3ulAN8O^osmX2-Ls*][< +8\IAr'-5Lr\Pbm@un]dAs'DifQ5g/N0Q-4t@ i&kiK,'f23K*UGq)MD8/_3hntJG $cE%>"@<,PPJ<*Bss.6M(,DC@&Xm4/ 7O$ddZ`'/&qPNZ#1G54,H7b/lNNLdFt2%)-@R^*dUrO-9>,-hH.e'n27[ Db_(R8f"[('Jtm21I2U,NY=++ju/1[23-iUMrc[Oj=gqU@gGK-S!8gmok6fI>3>9: W'>=d3cu9OlkH$P\i5(I4a(^#EbROQDUNMkW^"q24Ots2V,=t);S9&8ZltdJMU,VF AM$JbX^LD_E>Fa#LQ>`kN*=a$hRi+R3ACHG?gtM,l_7S@0L!.7c`)omrX87C73&>P #5SH$L(h\I[4K4L3;'+=fiM.DOT68;&VQ*Q8QS=rU.((MA6+oik@/_V6J+TRrIOPOU0@fB699-`J@d4. 4"\I$C6JAAcM-oUm^L*^*T"G7rbPm>8:LoN7_<`j,5kf&gd!!F@uQ?L,9,ke><0cA S'Z*MjF5j]ot*E$hfKeWV&RkdGRHNRX4T"-\?-ZON&ircH9#:-Gl>5L4PTY&G)JSS PkCN`LJE[1NXPWCo(`c8HOY"@69E!E"q:*LNXGOio6Cf7HGC'bE4bl8G]\#=pC$cg #e9R7HZnqk[e%&l5?ANoI3\S33eRe(]j#"kSI#6 Q-C/4:Df?l)OJ:T::$8:o@Cs:5cA62RYY"Y@@0p$P4k3oC!0l6? 9*[MbZI*03P\Kg]PR;53.42W.,!8XX3*.@J8(aFd'TagXPTpm4/J+:"'UU6f"@,5: MMFP=<(Y,0@%sZ@d6JE^mF9:sf#bqJn=`92R@-7`.PQ%=Tr1HqEncG]c!$O;3p`DdYRSla#fA!06ht7L81@m?SENr>]\'fFUd<9$ps/EC5ptsIk)>rr? ni-Sqhq)J_T/$@5!<7Pics"FAL \.V`3C8Ns;`'8"GjOkh#<>oC\\H@bOW$iS^&o\4iohn7nGg*,sg60+\4EhralOtGCR_I"B2 h@sce'U>tqh"NjLkotQ=*UV*Kh"I59NJka2e+iUbV"Kqi25pFK'"0G+pWm;m:;U)Y 6C4l"<_e75TQ;$W"@.aa7HhlsnFC;?dMY##E9/Q_m4rYR.VRjjfZsB`NN;!&\"RU+ _DeV8m;3Q5^t*?R$j:`M')$4,?@n7^#d33s@0?V)!3pPWL;"f*3Yi`F5UZUTEtCF? \&f0aqb3WS`1ZR]LZ&PY_3gg?QaCrK]6P@sg0_OLfmj+H;:lM-0N%U#>_2nuV\*^[ ETlt5cm&)MI,mG3j=tfBM4WdXiA#E=3dL!QET/g(l8WtN0R3)sJ+#\l^0T($_\]Kt p$LW)=>d:S2lW=o/*Kr-WK[f@'_]`aEm*HhR`8bPcXRj9@hHUq)T?D1cDDDt7LWk[ "bKl7"'@F4fX4%*F[EWp_&U%;Ct_2A3['<*32.(?ON?dSPrRYuU[2jpjs-3/a%uS. *!S%^LT_d/?f(012JRM3W-b:DF.c[@UJe`6r`:LQPKVjF/R6-SY$pqQE7p`OfrGH/ b:9bq$Jp[DY>^4D2tirgC6#XcI`';oFb7%BR!W<]:Q%W+k.PW@dR[l1SBLHXQatb< Eg`Q2M/Vr!O7Gt&W=Rb=U^)Okf;TC$lXc)LGs4HZrNT#i-!bUOL]=)Di4P36]7/_2 `mq41Pnm99VNNoG(3(@],Nfe(LNu3LhT,a%R7Tp"F4l$a[J87IZ'^>P<$D9$NVW$[ mGA?4])rY,s"kVHalU9O;>AqGGZH,6==E^Eamc2Ep]!'bH!%qgP)ap(`W+G)oX7`r ,29?B;C7T+ZC9O\T&$E'bHuuXW0Q,CNT4F\o!jt@E=h.nUC],5o,JEa)WuCocft:X h78=6=W`FJ&.ck>jTYOf?4P".Rm=[:V-@m`h`P/-!a^L+#\/o ojZ^'UqGu::Oi$lL4X==Otk,_L"3Jc[!aa]D$3:eL"1.dYU0X&Vcp ;^B8Q`I';:"+n=]TM7YcR6ZOs+Te>909?Yq`.jO32NH=d;O_dUaeEMZ>-TincA:'6 Qqb3Um:E6bAuYCG9[26ae'1PkotR?/]sX#uQ&:L1QDZ1R%Ggi\!Q@:uhoAdDq*'KA/nebu^+Z:Rg09S't0&gL#^d9V7e` _cu\jUW";mM*mTWO]U6&(F?`_l@a%Z"JFuTfZ*luJa9[HoOSnX3_OKI;kc9L[+lb\ (ZW1qDL%eeF.'Ud7G3=!s#=WN0RW[EC@+afl?VCO)0tNlH1).G"]=$piL_c2pN8o,ph@[1?^OMk]tuSbOb+HI&5\/78:X]aNW*oO!%d[.Z+sr@24: _JeDWJ)NLtnKMoYJcGuY.+)7\!cR+BY%"g>LkCVaNRRCIPHYcm!Jghi+u%IHI!usF q5nt(=p)7+a)##"DhIYL>USlC`b_27Y.kHQ6k(6Lr$H[Y""]&@28BBi=k"WuP^t5`PpdE-3-MD` 2U*(,2%icF6'M`\XSOat(G'Y%4I^7U-_:Rg4S,(gjuiCjEp?bFkY/V]>c6VEB'YS" e%S0/6cJ2CnkDW[22AL!8+I1N'T9C71)L@B\($U#1_Z2:K5!roCW^'AE^&Ljp-%F3 NC%#3G]K&A_ZK5e-tGILj[C3i=&W"H>W2@teYbN!VK:ELIDYg\0YJ8%F%\ KL1L(K9mj9M>Zeb]Io+YG#Ra6(mB3jEL],1(uAa2ml&2E5/cjr%!0#SYrN54\LpF+ 0$&dUiN4%1o-L58Wci!HJ6tBnf8sCmLiCS:E87We#%nT\nePboLiPq_g+*o_X-SpU W`QQCQ9aiFC0,NshCcu/C'LXbS$nH<+h_drS_p^nfQ/%cG8f:[(uBEQhK'amEuj.X *o1uX!I`BUWO=S^_SE?)PY.OKIX<_Wrd+a%T5On^^fd?YQi1S"j5eV'f\OE \AD3i6Ie(^q.$eAij:])2=^3?C^Jh*G\qi@*bUuQ=/#^sNYQbl42*ipR7K`3ZB3mi r+RJ'FYiL8:7`984>6Q@Xuj2?>(sD"`Kj+bV@1AT;l%!6bZD,D+6K_2gcrEmhRuV; \4UCak$KBPSu6C2VJW)=lorNRGas5%OgK=tY^[D&FVRWaN[@,bIiZ.@*CU(%`b]%g %h4WmlNm>e#T:,^T`Ir@;(_t&SqL![_Wak6i$.8DN-Z/JnN;-hH0k6_KO(M[TFc@9 ]Q\F@qe>'@<@f.hCu?LtIL2$u[#Ma%8&.e!9Agt"-Z,UfLs0'?cVjLDVXD2i5.F2> I?qD?,S#:s`oBVd<IMISEr^@+g/7@S%ht!0Wl-sqQ`,jn"q`Kc%_MQ_] E9]3.jui[bEULn^k+T]bOo5u5Cem%!SN4'Ggp7jN0cSiQ5hRpWh(\8m)n,i)UZQis RRsX0*neaAOf2/!^O3\0(9:.V@Zc3t9>_Vpis_)Qp$Ui3i`W\)%Y/Mg=pUiBK#gHd aiABL`j!QQ+Lf6"d5XOs5gZT<0kaHDIFY-@a1C<`Ie]&cppji1PtB;3e,B`-hK/(U $gjNYc-?^ik&](a';`!%Ku-"Kg`<6g>KZ]>E`n=[8b8+ZgBIs;!t&+hh!7@mm]hTq Z>isF#qh"SOTIpa_6VP8m"`-'^L,Fg)oI%d$Sb$\GYde[ZjV8hT_RK! m-e$K^0+;-1I^D$l^E<9)#qZRqf%SUDo_]]Xk`aHZ2ODi:2S:t7?uh?Z.Nb*s$%@O J"p4s0HdW+KKO&3phJm8Dhh?MDjJ"/2Q@R'D&6"ejKfrfEpr%1mc/?Q_`LWaqp('% 9F?$+Q,8l`r$H]*QhVQ_fus]R*!Yqn(sj=3Es/BX@!=rrE:%4Xl="o)j`53J[;/75 4#rfm31\e`SQa^;#D*f0^E>6^E=`H^P#]O(F!8?+?HnjLq&n-#3ppOf 87XQ7V)F,VJ`bQTVcGTb^HsuX8g^ZD2BA`Z8ZBFf>Uag)=t6LD4L%L0^.C?h4]=Th \Pk]"9DMo+r4P#alujeUQ1Mfn\hjaUeaqKpF'=gr29;WGaeUl:Ai2*omnbYS2en^8 D4S+P)f`&5F%cuu1(1D9$ae=R[o*J0&$T++[8ut.ud;.GO5@#riKO4WI&X2U3ubFP?IRBDHDe&/*IE?sji-gGa0e`4e/j!q@pW:OKc $"k8S?sCCd[T17c<5j8ha*$(ZFkOocd`B+/01;iVR4B!nbnY/T<>p`(U1SL3bbUl. +$I6No/Ms--u%d*Fo?=B`oE"pY^jb3]20))+`MmS)j:56.E>6DG9QRmNhbILDI#bL >_\Gna-"k!dIa?aoI!MC-fL<]^fA`Z<:GNS_Z.J7\TcL+O6C])9ejmaIQ_p-gmtW(-Zjrn6NL)&L*?bG0$QU:**.(l@g)<9 k"/D.cS\+:rK2jGKO2(/SJ@!B\0FLh!`*S,0C)^^2mI`e_Z,BKae,M@3sGB[?\FYo /B&`Q@E;V-o"g.'T/K[KF^X_Q`T3bMqo^FV?hS>c3Hk2@Nn1+d4MTcRs.;*\?d:2d ):L%b8'Xb$2D`=L,ES7_r4cT>q%Hp()kuD_!Nq>ajC'e6VGlif#/)WBc\*Cb3['9U3XXr%r p<>.s9o*(2cCpfbXd./-$0TgSjjCp/h(KrM6K,'*_9/5lM945.]u6::KTqBJt8qRfTO3 5M7J$P%n.']qFaVYT@`o-B07LfeN9W/,[/c$_Z?>W!&(Ct0 ra5b7"Ah(n98[">c*s)!pG,nFE4K_Eh2:IB%aOlg%8$nU^m3rDT26cjd])BgieCA7bOk4q0O\c 3N];AmHWnWTI-MZHMOp/\[5Pne->%,62g@Oh>2,dk"2J:TtmZbCS)_J6cf90X>N9@ _#jPY<;m!i0otI1f\s66X WE=b7E.X3[]V.U'!GB%GHa4fARPFf50jBquP%01#2aVPE=RqDRo8M@C:"\kQj0FVG ;2gWZIC=6'>c',+8"VrrJ3?D`2+ruV$SL_NVs&+HlZ8m?EG&L[5B(.O$/ceZk$L[B T]C*05N"`(i&n1$ITXXs=2Rh7&gUJ6:)461h\5=70dJ+/mq+/BB-07\H$FUq\fERi CgGFsO>l4H9_KRa#bF28,+U!\Tj@!Y%\G$8?,c7pNno-sa*84m_t5#b)h8P$ld'hg _fuN_*O'kL]a24G1m!(u7!n:0Id+7\iOo:FE8eJ=64.H#WV7%j#bb4r"X!n;$!KD" >_V5YZLl=Zl<-(M`;DZ>',k6`kMc'>0H+mB`;iiHMID#[*/CVH7pO(jTO)j]6%9MB K;.B]Gl9?68d,)1GY/YP.ZU!;"ut#@n*5bmdNeM*1XBY-0deUFa3I(0X*5m1]?Glh T6`&=_S^:Ro2u:E+6gBG57`,KJ=d16bHhI.%`\,0NTVHAq!5*]a]I?"(S7FD[m_Y8 BdB'jSJ,/C$83>m?49 .\[#"P>s7Rd7Q^3;fTBm=Z,[-ZkD$@j)M(a/;mso+r>mQ5Z*VqR$P&22%"VQ98!_q 78G?Yc75_)Q-otZa`I%;7)cNYV,X10o&uX#/lAe^;3(sFg/SbT\Ql/fJngDf@NGej -lZ'bbhK,9g89E`\:^"qYmbsb2qfLgjgV[6Gs-'8gMn?-l5]P@OX:1mP IJgoKU622pM8R4#'=X/Q,r6komu?-u*tug?8ES2ijip@40I\2<(!fO>bfc5'a?E^f .:6,U=]MRO.G$1$<\Gk%/Lo'/6W?Yb9g^Ut`Ou fL@W2a&k5h=Z,LHAHmS&T\9h$C^2C)]qG2Z%KJVq@bM-=?U0:2Dm)E:6@t+BSL_]# i%J'Q5.^Cec)MlFVVNrDG%f'JA=M9:KH34jBf?<7&H?=b:9<2_hR"Wr[HU%Y h-kim3kF?3afH1G;1l(l!5SmJ=L7C+FrBtVg[qXPF[O)nWu-ja:rkntg@d6[Nb^#r [*Mi2NuHUABpWsXPdDptYEDL,&rluS-kM7a&.!b.)I%JKTgCi[69raUH]i&%!m+k-rZo42>DWT:iXdVQ9 )F@8IKD3&M'C.nV>sB8;Vud%&1jmQtHnEirXYbGW;+CnteHiS7$?t!VE70_hdYi:s _*I`)Fi))s5Pbod5?L1>^[?R^!C6Yas0)H9s*qCYBoHatPS%"_@A%eXNs8_%I2A.W 4.0VPM'S#6a];lm<[,Xd]IB0%RFYX;D=C!&X:K-0C'UQ[&SZ>qD09?*ojD_0_RFjM >p8WDjAUI@cF-T&!<4K6#i)9&>O7J^neG\HfT6$\UT>7D!"[f/"=@mVb6XBD_$l ,K:#WND2GO"d5R5P*$2'=X+])bO0fE?N#huZ,?'bZP^hR/8-[='(YXMF\(+-a*nZG GS7Q,*D+3MnH[A5l4Zr:lbUQ"i!%k 7lt-#"fsgq)?FFN=;h^1E#QB4&OnhmV.($SU#-g6!:+nKZN5Ms&P76_ZOKeC70cp* !7D=K$(lV/3d]dOfQVj.Hu-u@AD;EPf62PfD?@+ipf3C1LhK#fs4W[Pea)/$-R%gE `GL*d\G(I3m`X8-kL!seer0;TM"#WE7+)'K4:YZ3$LR189qj -mp5HbdL1LU6L:Djro%rLd;V^$6YJ)Bt<(M##u=h%:]07*lMX0Lo6i &0tIcYh/%2J-iAI")6=PW\onk4-hK8A18OEDc1:'?Fdq<4jO6P6h6m>n3D3m3A*T- MqH?*DLXdIpA'C6M]UI44ilebr*Rd-IPmhgnZ_(O3U:PhqdGlm,ni;>Ac#q/r)!oD ;M@37kL_@V4sP#r2N.TKMX>*gZ;ZPV\?56jRbU@rdc$!57,Y7a`P*Zi5AidD%,\U0 =5#/:3NJ9id=18RIb?Bo'L!fKHncuB?CfenPg$eBA;_^O"2B'sT6;TO:+)dhKZL60 \M5X&lSu:%=>\24XZAkZJQ9GsB@O_3e:8Ap+QgqMf'R_F/l%I6DP',,J-#Y2+i/s8 reQ$;n3MWH+l7l<^4]@WPS)l=&YZR/iUe:EZpF]@@K*WBreqH'N)@E<@mX=^,58"S o*LS6"Gu+a\]Qek3_]R?'Pj#!C6t4O0`[rHf!,>:1n[IqA#_6fFP(V\V/\<1DB@ma/c1A'qa_oJX[l\bb(RTCK,a5Y_ UR"?dk%3RR!'TDp&3]i5aT*X)[oh5t#9.%=?l$HeuC-5'N.&5dm,VYYI&X^l7# o\DEZoN(dpGPWG4s)O]Y9=l=1_Hr?MU>-f-W5^Ju1EhcfQZeE)f[A&,P W_SQ%+ku:U^rgK*J05LMaS,RL2:3kGAnleWlMaiL^=Km>i;-LS d6iIJFRFHhr2TenR6c.,!E]Zts/#`!@2?hEeo1G8U.moQM^&[hJp$\`[(laKh,H0M j\kKAPO0Vn*5p"54^"- ffN.6f+IYqiA>M>B/*Um0E"lf(#hXfofO)Y\jm!lUDVoKO!?&c_(5$B+S`u`$O:RU gQ%J%%MS:jnfWMfloWN53>92M^lKQ6Y!BW0,%JEtKBtf4?3/XOW_2QJ%?Ukm"""D:o^C/g!+jKWI_ZYAO-C#n5P F'2N6=k*!RPX7dE(ssp%ZjP3h@KENG/oj#]&bb5tZ9^Ip&3ara6Q&1sfoTH3ks6EQ [;_CF2u^2jai>]^0,b;7R^Dj39'=Ni2W%>9?B48Fa!2&E8_#QA%OAjgo=q/t8!d?0is3XQRjlC>\%if)8M-Zl6Jh_r#R?I5!/G ]T;0dh"4sl*PQZ0(35?^d5-=+mtF(SqmumaC3rH!NrXj NfZQ0fMTB$0tsG,hS]HOKFrdb0qi\gr-;42psR.bmS+&O9SqoW8/09>(XLqe+\7qP aB*ug0<;lmP1Z=PE.Xr!b`TG@Nj$i7MJh7%9SG/@Y9 JZucP)^8LnjDcrRZ4/_ulC W@$i[bo8Ql]T_`/<2.1t&.0km>C=3SE!u:tSL,g0\TdY01 Z?aKj:"Ou.gRMF<\3\ZL:0F38;2aeSC5M!V\)I_u,Dq1!b!]_\LdY;!NiA:=XHJIC P_uZ-:8k[d:j+3-W/s`T,Rn?Wg2,6R>:2NUf#R6;`Nc>;s0P\C1Q:= Y2a#ol"d'UB;r_sIoS]PPlPU,-j[91%^jalF3k+-LiguE(Pm+]rcL5Of)M$8Vtb#) #O&kMIrlDjR)-C;TZi)iHLFl8jG00?79H8\5G/C8N=-s>:^[QX0+?:Ro@;.[<6oYb 8op+fFhX().\5O<-c\_"f9`\ZT;O#lUEtT$56;Sqq*\a>'qo0Bd'HglpK9HG=;goc )gM]P&#&&/e6IZmKi$6$W2ZlZ<-32``?a%!"PdAn>?`dsXUe=oJQ-t>/V,HYiTpZg CkQW][=#fM!kt3<0#e!reInS/@bJS&q4;E%`jf7/d:R19e]/R"P9e.f_BL4EH6ZjG ^nIu75,;(&mX]1ZiU+^d4)qsFfd)p(%Gs@4I4*F:CY<7==/NGN:T'kW"EV^\\(C`E1os&?gN6hr7FD*g09F *km18$8?g1Sq3ns5nQDt%O41EVa.up30\FqZj'po6r55#qNHqf((WM5qsH6Wd"X(' /U6D?E#!`CGp'bQ6=BW5Ds9$-"<%41:s+\MlE_&mbLgZj(GTU4'kI(^kof>r&iYBn GIQF%g3u83k=s+eS!][pM8P$b`$4`abOlEGAA1OE^gF_igVCcZTG2L90n G\l#^W7Q*`h79T>ZDCf!;_$Nu.AnR.O^rLp`)EON`D6b/NU]MtE!6]VqtK[X]S4\4 O5G;7hlEBqZ_%IC)"$:$ki&c3iNVS+Y\`JZD._8#5r:s]"RQdZD&,O%""0'qj:T=' 7\J*pDB[SCcp_\0r6?)\%\J_"I57qr*QdkrCCZt2S*a;J>Vld-((#tFTmJlMdZGp% gtsY2I6gj-@UA?=)",RYhI"R8IosGViNU[)1soBWS@_eBj'MHJWH)>YDa3RKGhU%* i=PGU60-c(nLnKChi-MY-a1CB18,j:YDQRr7t6QD^N /+lCWmQ=%+3YKAl/1,>Mf.HjH&BEC\P(+URre51X`OO??o1"45oD+61]&7FkMK%2= CD7tUV6!R;]ZLb(Z6b;n*F>q/`N#KJVA!UoK6-BjF6U_l%'b/?E;GW9"V'Df#B55= *20-tiF?+)j4ob14AjQ/G@uV.V?E)p7*m6nj$K`Oin;sr%eGj;96X!!Z4BLsAL,7c ++cK?tK`HLLDQunFL>H+Le)\u]fl^f-O_-OYr@*?-2 _l@q0VLQX8B\-Z0ig/s3]OX9SRmNYSV''rqgh&lNp1HaiACd701CZt`sWCg/W2AZBt'XA7TY B(_*`'g]I#W*clE<537tL`I6kUK'+H;71'GISklk"U6"K-3@5RDUF"RP9kPOfWnB' P$oT")ed3ahaGn0?.Ekg(jAj%H>)HS'FXC3Ybs[lVQf;gZ=kJO\'13t:)I"BlW9bN HrLJgA^\c?ic9Iiob5.MZ/3)>-6M)Qo=J`76<7 !%f['4^,gAWd4QO'g;OBEMh$1k(]InRQe/`^/g]d>TbOsIqp@mTE&^-+h"QCR!/-:_H,?^O\=M!BI-k=V`#Cm!.BY'O0H9Pp"j=+nt;<%]b3L(Q2U(IctJ Rm4Hu\.mY#V%rSe+ehjhTiN>9)TnZ@t9D@PtB%1ISJi V)sY9\,L;+N9rTbmlF203K3F\Nc%u/m90tfgPd18'-B9[]`VT4\h.5rI4rF$B4:FF &K>*Y9[R0X.f;CC'YqH[m&oq:!6P/!e'u)^iM#EsV#&,"VQ?rr[2l3S*@eN^<,LMoCtb#Rfp",HOt,=S.b^-.gD%ui'$I/.k"nKf a^Q+]aWgI[Ki1M?$-W7oo3=RLc@B%mhas?Y.#[sFinB#E`hE^M,AIK.`em+E:Q1 s2h(\BCjQ$g/n,Z9DD]uhnP40^RUSa@e.et`sP$Qk^>94rH*ke40%@#CZ8\phg4"2 ]^A9RT0`I\.eCWdT=e\7>/Y 8oZ1VUcVBr7u(`m?h1L'os[lJh\3PM[k.Oi]&'J/_=r`(^0]@h@`eQBCN1`@@C8]G BuoZc]PIbL9Js"i"-71[?EK4)TF^KRJ9MrCG9>i6)WgT[iU@q%&"M\h*G#TuB+LQq Nh#*fSE,KniJo8U`tJU9M8I@jJr'jJ)2f,1huZR"\P#hGA;.=3V/ik^"\#tjU07XV )HjBV?l4+9%GRidD#hhb*Irg8B&#[07?nsfRWiRMFTYV7[PbCWFe^k)75O8Hma<\6 ^]iR`$n)@r$b#F,GF86AjZ'p=13VS>IcNM7kW-*?0tQO3!ZZHF*V`;Jpe1^D4p59N B4fV>FN\;*,2HabmPY>e\.8U>Qi:">NYS&WAZJjpFk`?j-TJuS/LYcMfqN?>]QG6* gq4XqHPViQ\!E[e0rKZ,7/h<`ErD^u_kMV/S:1o$X&hIY.o9'8H\WLsXdHJgk>"?# C'I]I>=\tCCHASug+=SPAcRbiF+H2iYb%G/S).`"FsmJI$^`\b*&k#>1N+iU\Z9$RlVp.h[mCr6 =Y[PCUnlnO4Oqk=^r"%G9%26Y'D12.>h..edGIP;`#kNdA??G[UBMDE@]()]VtJsD O7iO'pg`oFY[)d`rZA$4UJl^"/HgO#s6k8bo"lsK,KrIR$R/:PU5TGR%,V]#T,4Ms ';UoXVj?;>SDgB5l)t4(K\e>>'W[9.lq-?/bi2aIAYBh_HY(9$/TOjPgb^0-gQD6B OH4aN:\p2LqN+LGd=ZhrK=pG6?F;"2>ES*naA!n";2Lf*5Rn,57Q*TT6rqbK;B!_f .Ou[#D'9_1?H>\gk2%KuTU+G<0"j,@+ukZ;fT\!d*N`EW?rcCV=)T)+WLl"^P!r"j De1T(VtE"&V<4e2QE)@a.:k=dV7.p%2_3a%=&5N(6Ods#7D21%ijq\t,='_`T h58eoa!o:IS$(3KVb*ltkl8T0j!;NSFMiE8drp[f2+fbGUfn1F=cEEn[c9G-@gn9h :!6tH!ETaNVB.c3TM0l\kVs#6"LWFlB/khO]?ZT_rpZ>&/i00ub`;Y0Mh(KD5k7o/ oeM?o3+V%r@f(<7(+B*e#hk38%;;DM\=to)Z%kC"ETfGc_op]WB2NaN)R&//T#>P3 9AFr`I"7Bi#BoT!Id7/JpdohJqoOrkKCXX\*5#&#H^VD8@D]iNM2)Z",jYX%a7$^! f`c7[2p_l6!L.5J[-%J>9981)NcRl"QYm1lh%q_LLhBJhk73/$gM,TeAG@Cm,`+*n#p1k?k1n9l foB1Qj.ndL4sP_JSqUGia/[(/ZfN"/69&gbfWoUPBAu>)C.7j>G^@&b-k7L'60dj! -V\ojHf\T.E'nh0^[OI mpfJl@r*hTHiWL%Tj'loO@_YpPFi>!]Nmb?%B&/:fm::d a"Z1pBZ7N#c*j*Xhn.2#eH&0B[;K?XCg/f7,+1BQ9H+b,C)?MX62uK^_g7Jcj,-tq PQU-c!W)"TTi68K;hd__cdi93apI+f0tdep_g8%Sl[hFGJmK\3"u\SpSiCH:9[mi# lI<`EA]#9;)R(//)5)/'$3E;D#2O],^E0J0W/'dc1hTcHXBj8JP[,OKOhpFSalf-G ka*G2O=M!9,9*'t)ff:/4C'T7Y,(MLREu$2fHQ`n1ASQ,L,hW8jgc.X+\'Jc2Hika nu`HpY*R4Zk5'YK`dX4gb^fb:58t&]>I5W23>TCm#f$a0#V=h$1YtP`hG*%t/eGbN .A6\AHKg"56'):R@>8Ip+(fIVglT&YKHZF!D$1Qk)!-L@kCoCV"lr1@k!p9O72Y)U )?P0rqY.mLZU;)U"#\L/<71l51'3^sK2d^P`2hm8[j6e=B(F:1ENb_5m8U;PWb8k[ AprO]qHbi0a+J3#O0F$iNr*u,pY?P,[hET89]EgTi:u[Va&cbU?]K/T2T5T75Q4@n mR8YLFWJXs3O3"DC_bsnH$Dq6k=Qd#Ld/S/F/,*-ec-90`F@e_,2piE!d3b%;m.5?^$IsMs<='!nDT/jF%78Z ^dHGeA+/Lm+4;Ck'lX2\FpM1RY(G4H#Eu>Yf!,fk&:A0].R>K'=mY2B9ms*(\ZILfIjB^F<3t+]:YAl 0?S[N..N?3NF/i259Oop9]Z6L<:-$mR_Ls@KEj[\&Gb@Dr/30cH8[MlN]\fSs21#r 5I^:2C,qWDOe#sAUItGU(%.ffrN[L=Aq9cR?EW1G.XaLV]3WL!diip4UJdtG'Ss#[ #RH^$M,Y[Cl4C@87'D6f\-XnRiiiUV#=e5iP?e+9gnD'%;6p=D"TGoViT(1$ZmCin -'[S$Ul&5a9%RT(eeG.*8p)u@7Y%RF ^T(O5h,u!+PZSj?i`?\df@:.SF/GPjZ1$= 3O\$,%R>[*!HDT'HOA7%]ms7AS)32@QI!L(cT&E72OU3"1dH'EUS@CBmCLYe`7>r> k,&e;n,h&c-kfWUS!T*QQ;&9a:jm5KeqQMaDHaf&6GHpEVIINLQ=*`O@8J[g:e/lN 6B?uTW1Hm?T/URi0PXoPD1e@.eZ8j`+"Vr8=YlgU#uq2.4a\/M!.$OdFqQ+-PX#bY 0rU_lYFa+CQo(u2f.Lr>b:/cLa;"8Bi-%iQF\`Y@8eL[K<<&Am5g^a*0E]]%s2tK3LR9_038 \4l;%/aRd:DS+4\g;!#MfPr-dno$R@cAsb=T/lW11qE!1"7.u\2P"Ijgh&9VJ6Nu$ UYlWTjH.\T"F5dgn4%6X(=W(BQRV8F[,J]sm(:M*F=/->&Di;Zf@#NM10=ORs4@VJ Z.B%X,J_LGi,ria!C2F*rKf-gokij++!5NMjB`ZpTF+)(E8WHA4E[Mu P1@/U-)s6(!RUj`M(2n+U3u9Ml*gA>*Qc`bGL/cbVabqJG3Q4/nt%mRXiZ7!MME4N Vc"fck'?o;3ID,!StgP.*]BJt2VT3PeMMFuIo]G+Pr_$h.N;p19`7D`18BYD]81[7P\[amoqVqE=G^:j+Wo$LJ$giu,=D-j 1UCF@NBmN9FWt0+V#PHZs)ORg\-mRVi;VJf`jaGZB2CJ0#^oL4qJk]DVaUO1jote! -i`d*KqAkj5+UY\IoP>J]6\CMKm(Y$m6]mDOqi5h.JVkpjCUT]>E&"M#.]cW^fgZ@H,40WkhXeDW?dT?d/QOse0WL!L^U[i!4Y?08g4V>bR:6KErr=/ iUfRdHOHQN`*8YY6>saW'?Vmn.:ou#n_f:r6Q;VlDiMOQA^_+F5.]].7/_6H 5M^$]'Ad$o6O/aHNV4'[6N^#dPA&;F#W+%J$l\%ShMsQO$O![nd%iis"7:`-p["h4sdOP=>E_KY14%".SXt)a1O&oc ot;n6?-VHd/JPlL<.%A>IE^*LTNDrE*!f@O[R3gnNcXBm-F0'1;-^G9'3J6F>3o2:@)@1I@A5,1Oc0K^/$_lFA8t >q!3`cF[A?J(2\ce'7SuM#GeBcJQk:IQPmIq^%gU=1J:9cLY*mcem;6s%_^.`a?j# IjO[gk`NT;W'Peo`W#*Umeo?)o+([e1]F21rMUXL?-^,^`k>Nt`@0]A((6=`DGTFg o\Z"6b7o;b/tJ1KT+\;m'V_.Q*cnEJ(8-g.XI/:NPjY`HlDpB=VZ:j3ZBohie=!0m9hJEM)'.,614T7$.@q[+6@m:>nqNrC:L@ 3mSdmbWkYASbfJhO-obC73EK7!88RpnA[s^9:/+W"2Q,Zd!k2jF;D6,cCA6p'"e:O IiX4Q).8mD&M"MIK3-Gtj,heaVCqpg$`b;pSLYo32/ZJ=CLAGA@Ml<.G$`.(57cX: $\X''.j*3-a25CMijIslQ2C-?o/tM(V[ddgG#KbHPNR*FVj8"[BWpsq,GX4QHMtGo SNA<<^oh/4SjLVl>iWP7_gtM[rggWQ4*CGK[1M)fjfW.USlE\;7*3/@ l'Y,bY!MWEDB)"gQ7*BM,TaZL*PHDBR)&#Pb8j.7%A)Pe*9$MV([u1u[k#J!`8a7V n[C=e]W3<,UVQ_;NVQ/Cd\H\Sml0K\4(*)-WOS),J(>n:%GC6J>Ac&*\"5$k=f_Ru 7J40Fs.GP:Z46QE3<+n&g^i`!J([frf9,'"2ar3ujno"Fa<1,PrdLmHhCQug!nZma UqbfO\K8]&+n315iV:Zdd"aF4f2*7p\@u/^pgIJ'K5pVZ-[:-p;Lg:DqiRfD/C-A% +',U.CZk_CbOjg,n^AES76TgB.C*0.4"leHdqVX-TUqm",8ctQDF\>;U1Bt:N?V6E(;1ji4,tPTG(Vm%UO00-U+h>^ &6Q`!pWScg/9'N?f^jha?ujR4@iAk7B*RpVCaBm^"/,[)QQZ>I%'MB"pIPSCK7pf9 =MV+5\p?XA)9sI'?Vp+98cHM_A_3Yj)eeo=@Iq,t$W4YV;Y2Eond3"("j>%[UZ*`_ Ee8!W\p'6Rj.(#IU4*ctTFj:q;R9h3[<,*='Vp1aY7;L#_")los(A^=Ap%jm14a+h %NNg\2GC/QTu5,Ye`0gJ;gL6'.+:d]K0)J1*[ktYRG-AbdTCbrc1J]$N5\jYD94`H`di8a EF]7mAqoM*cOiP;5;c8oWW/u`0g\T+\,*Fa#_`>E9&ABMp=!'t9b6ZE&c?:**5A') qI,6La*%BrdJ3aP+o(Z+^cr^l5B$,jCPs:gba88-6PoMZQ1(UccJQlfr,s"YknsEE !6;E@r+-95Bdp6C!_Oe5IU!PJ]3jJe[5I(#jh0&qVuN"*C;d[$,nHd[c@J*PH*5+4*.H 62u.7;*b.)@gC9!])?gm-F"O37/P&Hn\BSPciZ+Sl+h'PifOb-0^75."WD_/F-m,= %04$@Es/uSJEC?lnt1.Z!:TP%)U)M1,*qVkO*MA3-ic=gpKtN@7/*7^$DsDI)FJ%= !%@kI)"f3oh4*CJK`!g"Fr%B0L!K:c5Ds+.`,'r3]^$dD5iJmkWGq0'im,`#D0Q%5 ^5Ulq*PW%:?c6kkDZMpbI3B4D]LM)^@#Mo"(UrG(aAkWCPOg (H-q&Ml@AROV>VUaT#$E#*6-;G#d;E6f-AIO4?:O*%__0c'gTp33?JTIAG* Y=+M'MP(sKL/d-GB$#d"k.4eQ>s;b(,'dHTSM#,Y.[RIgRB\;jGFh$JL+d.<+CmaQ ^K\L[RR8_LOg%2@<=fWjEMPa"H8/L>u'OZ+k.4IC%)i4U(TC*SrI$pqNXs hMeaf:?);4`:J#4jg-8lhl_le36V!(,K6ie7%X#q+4"qVZS(m2"1^)Iq*(5*"Y]Yq 1@)Emgb66XYIfM7W];,d,JRG\rd!,VcSW?$J(AEZ2d)NO/J?Z?Qd&p(L^)rJ:1Z9>Dr[n/,Bn(gHb< Hh9-rg_<7@Jc"jDDpg1db-*)8#p_ml^Edh1"$7WSiRY\f&L[[#Q6c#;-1dJ!MO()s Yus?XMUb[k3gs7$Z@(2sC^!D(H:>)N=fH"-Xb!S(]Va'^OeUU=@G&OQl%'6bnpDc) !6qa=XOjbTdt@aU^k-kQ0X"Lbbc0. eP3G?qgq)*l&J-cDW?L9KSP"t&A](S]r(NdTaI/r\c;crJj&#%I6Z`*s6QmA3Y8O[ 4UL3Me,gcl)pCU$*RAGu,JXB;/aUFlq-qNuTt[0Z%'A6Vdl>b8i0fMKeh"Fh`q<77 %jpt-VbP%8!W@egFABGV7\b-!UMgO?tQ:?+;E+uRUA=/sV^O^R$\JF9(hI_Yt>(BuQ ?]D&bk`0Top6n\R7h:h[FO`f=s7+TcHQ98n*iAt].6qf'!*ojAXHsTPl9Ak]R/YtN 1''-4NACWpJFl+%ZiC1N4jX`iLt!R'e6pOc+SFe\bXg9Q(r&n5P&I$fLer,=1f(,-;mJSe\ft9(0BQ#U KPX,RC3m75Eg1r\KLB:6aPB\[jDaL^#d*l@c.Gj8N0mH7W%cKC!0*?g4g9HQ7uL^J ];tAe43kc3+6#Z&Kd3e3/Z3U"h(Vq2Re^0KCtXedgJ@/tcQ9XA+1`*Z>\<`#M7ZN( qeeg'Y6O*dTIZq^eHcmg:-l#MK*UpX6T*l-^[06ipS\ Mq&!`3\R];W"f58r1A^\4:\%c:W"'26Re@q'G11T0jDt6[mC&!Q"?ni8(2CD)]$,N FNF&N8S@I&!TO.UmdBtoq[h^=C'r24!R)A,7:FDD!"+:HE9=l(+k2u($L%L's0]n] /!k-H(Tr[hr4nT`dZsF@\_ZV?/HPMDd[G,e5'^m*G%rj]Ait+65PS'e(W?>=[I$3c /HPQUl?B(>G9g&1hn36GC;+6/Nc`Nq]KcO)ksC8L +\fCu-<%,uQE_^&8eamd&rmmE(!snf?HSrXM27QEJf7mG1'j%[`A-@&RNmf&80P)n aFH'%k)PrJnU=2/q49)1U._W:%*;C9-GoRs3n5n<"V5@10BZmF6<3ttN;Z`u!rk[' ,Op.T5X&C;Iba&`l]1m5dp+P\OB:J`a$fj'Md4#"^%Ginji^Z_^E+hR8!AB[MZ7]s j=a#D^YJ&PBj^:.5P!JQmKXBn+'+%92^2=Gm#T:L2KFoRqLjA\ST0jbn5+ #h575(2C0fQlsM>>kY6iRuc(DT[F&YS:=_lq5W"a6J8/uh.dMi7,[d/@!*i9plbiT -JADl7tcQPrZf^toPi%PG9 4.*mVk7$Q=J.<6;'>OYZr9"RmM$H>b?%2nm!GF[P!eUKG!ChSL,rgs;i):YOanC?D Via^*aXstNWq4l3r=I4sE5R-lCt6"0N\3Is[V/gLBUCTX,+;NX(fnp!f$#!h5UO6R ciRqZS0fN]A]ur>d!d#9c1\QGJN99i7HTHEX(EAOle_ZC(Y3;jeZ(!1f7S_"B\-$o erFHD%]GWcWL!7YQ1SjVp1P-@"+$eO"Af];Bb]&FB,&EVV25!q8pDURH,b]O`eq>n ]?2n*h(Q7Y0g&:W^dh&Hhaf95<6O/u_p9pf5bMFa&Epk0VZ0a/5GnIK!N)g^q\uF.)$$Z8"t>#t !&Tl:oof6\Oos6u!gSrNj\nJ\1SU+LUP7IkM@=(QR`uRL/`GE`A:)tEEo"S&h>le.p3j=-h%)>obPnk?] bfn;TbfgoIS=!btAs=mjP&8m8A]r;f`/2CYVVH9^1/;QGST^n0cIJ-@TC;`n[J%2t >'_`tWO)=ZpR\]e1?!8*p;M:4oC;[M!r9rk]O[<*"S:COj0X'Ue9LBQG_:s"PH9#( ZoHunrIe:*Ufc*i8FuFZens9c%,]VVYM"O>gLl[bW=614M6)iA?L9)E&,uNZ[`J-iA3r0YD`F bQQjA%/>_k+r;=j/V+Jk9tp?G=V##.@7@k>;9O1#(-hq/EuKm?h=1%92sk+rQ&]_\ p)nABE=1_'VsHKPi-umFp[\mPakhXd;6)@>s)D>[V#fBXV]gQtgl#K`(q9,oBasc$ rqE0'EUlWE^ELgJ_/jf%AoIR?1EU"R'`<;OhtLU8o;(8dUB11_fTUman(Neo=H;5p 6^PPQrl9c,q`8TK)GQ\NFW1nTUFUjuOFTK*7/2,/onN\2n9Is-"nI7nO9!7g"1>-L e`(H=U0U+)Y"HsA@`=@Jd=u,h#3!RV7es&f+\O_3<\0dcOuP!,g*>ZZ-KpPKab4&R QC%Z'RpQWB>%;Z7bAA%OAL?EAKj8FS)k2l+[a#8n+rS.ad6'%F5:fjf09L\bYXO\&S]:cfCW_,mF,0-[l\;P3/ebsUFr8j%*0;Irr Z@2W2bQig7`e8pj7"]*J_oDKL8HR:<@d0)NWKX&j1l4o;1_N)tS=`:b5=^LE?K+'I p=!LH;keQ$@_#FsH.1ahBG)+oV(U5.$g-LX)0/ekjfSVdlK.W;AT[%>=f#$-lA[gs $7;He?DD7AX.$"j`R9=A^OAJXDI04VXa5,23].=OeGfo,%7@m=_74(0*&W,GfQZ@g qeqAlGM/PrJ1Z!)Ja^N3r&Y7Yme]_OZ3S_G?2(TE2^1<_G8jsp3qVA?[ZCXmH/d@3 5e4,EgNS5h5_onlMCOG;8(KebRh0>j7CI+JLu^i36;_G.W5)9[$ueD/_g]\VCQ8*^ !oRJmqgnY]iS2%8=+*WTs0-,roW>V3_2_k'=>`=%^!EW_]?cW1dQIk+IYK'k\+of2O7/ONg Q4P`_#Ff@\QtD!gB7q+6L$NA@BOsZ5kJV&(9@Tt9ODN7-*m0h<\0OBojBF(lgon]b [rX\#KbT(7dn0PBB8(hCMYt&A;Lj788H-=Trl:&;T0(J6]/"$rEbB`>BA:jaDFj]> /GetNi4%/:T2C8+,)SMM&\?`6J)%iO<$TMdJB2)0jI/Ee'pXL]&G[gmB<#92$4Fsfu[u3M&Meeg0&EAJFn*"PXN4'.%Ql! bNhGXrP9:QJc0pZN%O\f6j)c[:@890r^So[?Bc]'8`Zr43Ha)GFt[7kY4(-t%iSj- Ka]Vd-lf`q@>"HWh$oa`jYMP35/!lpptfMQWS@D.GCpa2W$Z$r"QD`.12$f$!O&>N mHO[%S+@F;`M-8&#LUUb#[RWlI[[L$)Z`7c&$ukW)ncLiE&Vt)%Qp/hnlFnuMsNUB 1NmW],Bg!r%$/R4$LcG%i@Xa/K2$S-p(*?`*>.d*XMFl*iUA(2l%,K(4CR8qll'd@ J.ODYlHa_56\"/Y&'TODNHW?b)Sp.YNW\s_%Je(cjM5;4f89`Hk;\A53\NX=BZ$L73PlgnMHC=psG c1csp4rQA)0rX`C?LG5#9?V&pHZ5Hpr5 >EekmPOPB-o>>"AZU9@0DeYb*Z2JKF%?6".'`)c@i(KC2(G*rU[Ud*YOTb[`D-ult Wo,ZWcasiWYF*`[cNo$2,k[[\cMW0Z=$+$.H?MsMlq$S2,Nn3#Cp/Zd#H$(Ul^FHn eUCVBIF`$fGF@JWYOk?6WkAmocDdq]<"ZOP*2Z"dUQ*\l8A51aZn V_0#PWdN0HC]mTdJh.mu$N:2Q-\UO""li/OnRTH]MJ+J.,^i!=N@^;d(.s@)>VLjW OGm5V%'jgf75P68,&^BE**)Rb\6/1#630fcJ1>nk>jB1ZbbZbBX&Oe)ELDaFnc`RV .hr/`<(^kXEWAP=GY4a$TiXERUSbQ"`=QaMT)0R%LQH^NQ5lN%hRUNo# *j+`V&^W&qf"B_>G,\cR\5i-8LZ,WVe'$jaBbqIMdmZDT7(fhDI*Tn>kK!jnRA:<\ <:n4rEW@npd[;$'G;^7!J^;J4:=U-7B$'2*W0pEB`1E 0,60NVZ<#aA'>&D OqGtcWT>H>EYGgd'D3Ima@Oh+MUB0MCf_8e58dM:(.-mORbA1#]Q.a7J-s%=48tHb +&qiggFN?Bn%2Fn)5PU&W@o:$5s+V3htEV[gV.&!3<1YHaWK3>q+_#7ElO+5@0;o! SgHR[=bE(`pLf5G:&Bja]tjHBa>7]O,QKeAW#1fZ!%l5CiKaGAG;s%,;:6quqJ"aE ^%eH$$-TOSRGX!8iTj)-4M1ro!"Zl3\=G)J%(ljjT!A6;eh3,BfTc]h9=P?Lqkl)5 bR\riYk:,%j*C:ne&^'0+fkobrkIJVo?`tUcXZ[WoAiV9b"XtgOU^QrC(.pfFPh=^ =23qFYj]Z+mm+)B5c=3M\*H;["`UEjEidr?83g1JJ4$`aIF[&@>0RunAc(aML[+QE b16:#n?ts:O`ot1iVJ<,oehT,.qmpN/;;u"K[4RihnPMqBop5]PS_S9D!/.h&@Z>< 1p.J?bnO&ritaQ2^b#8bL1%]=L17o/Kmkdeo3tPbW(:V_9l;>FYb*;NS;7XM?rM't ;*"=NOoGNHi:DE3:FDt<\ZYe4:"c0%-%;ALs(#*q1C-i9,_%s"r4&O!T0&p"h][A& -h?)jh"rqrYLfS!3DfO)+oKeIiL:RYO/Kts^7fOibN/IQp0n/OG7=A'V>8r)d]Ya\ s4ih;IU;GC'm?pRpU#MGT52GZGC=pHFM6S-n^4<*f6"pVB9b\,Mq9BKkOE%]J*cqS kG(r&_d'0!AKh5*KS"drmp5#pm>HSS5<,!*Lk/.N(9!'1nCETuk5I 9?0uMA&j:uaW`GQU@D3fj@SkUMJ1Fk8E,k%lE!Z+>qV0bSNS3]_b`D?<4OudI"@u= BjRol8[pgZ?9hH"4KX!f5q$8Y(#bP3X_-it0siD1o6N8e7Lb91olKse9S6NaS7+"u W")k>IeBdKeZ"E<,efHP&2!Lc[f\BVpaOn-8b2@6]S=qYD=b!pY;h"9)R2:]]>M PVisanGfNS0IY,EgAp!tD$Y&1Sp0HfAjNAYVZYrY3QlT3'l\CJ_Zj'?7JjUT`3a5! !&#N"rl9Te9*".m_b@[#i.'f(iS6N@[Z$T]BcB"1"UQ$q.3$bcJLk3IW+&T'Y7M==c*BD58kDTKH%Fg< VRgbBk&E#N&Pe/[UKhp#fi*ONq2_FVR[5JmJ!uGglP+kT"U&A-+(Cf`o)D8]Xo]^H =!GlsU+EH:>N-9W'5X*XJrg^`JnX$`[?@B])^Y:u,l-^Oq.V2[BI!h^VhD"EKdgY( WSE:FX[s(>:DFnkiZHM,VI/If0>en93,Q^-oO@9LErV-AoApD\=HDN[aiP&==+IV,loAu^/PZ:8/pc@n[R$V?$L "L[SAc--mXlnglH%PEDPr1IOB:[E&V[n IcAehKZ,m-J=BW8=U&^#G1I6#"5n;-rZMG1)*oIP&k2el8Xn&c2kS*,!1q025E8uo (qOrVGi>eIrRcPpaE@'Nq_WmLq3Lt=0L&>3LR+^6ce!!o#[fE8dq%s6n_fNqcb=Q- i)mI(?`W]^'2V8GcUHs,`So86t?i]]/U+k'W26qqlgY&fYa6aD6D *JTu%@"C("`&NgAlHiV^LaV#UP^)V&GKse.XPFAU%HgiQ`?mpV_eZRHpSbhHQ%%/8 h/C;>oEr8WMZ0l`o'<$g+7"f6mV.-d&:T[t4XX`HX@f$H[f65sd5Tg;T.Gf2=q^jQ >N(KOEKGh!k,#h[QiCl&qWt*L5I\$a*96pb0(h5!kj6geh^:JR:LUFD4C?=Th5TSi 0#es@#l]7gk0n=n]b2c+0'D1&WE0b1^Fn8)B]m,SM,!e=hR]HVUe9p161*!FXnL6: 0(NJjHrH2^[NFRO)A.'9$@*6f]gi3QLA8FY\\&,l r;*u%qDeEL3W02nK84\L D*,3HHIf41!3bj@9cJZ`(JGbKF/BBtbEc/?mL@4N/a%\%kM]_@d="e'OT2o8n=&q[ U]\-]5MP]-[A>ZM^`NEco-Nl%P5"o(TE:2hm.mBS3.(M_HU5N@uDH[*p>Rs fjbkCpr#=f+bn%XMJ[VPE=%.sN/cQhqKJlWtedm`5lUagi@R!d(8s>FX?T/i[qQV$#ZY+:A/m@%.m-YY"bR/L]iK^aVZaq?6,8Q%r##M^ 5l8ZPL;<_D55OeU\oHT\ESamh^4ZW=e\hILjC#sV;!#Q5_3-4_RQ1;t,i4)G:?i"! iB#"k"a8CO,iInepAR&7X%AndB6jO&'_mq>ptM7Y^U>Ca$F%FfQII#Bih-[o/-pYs '7;Y\nD:D-K20/@-@sEVJYb,.l?1L:9B'eKZ;he-f@+lfVeTk@BOmnMdZ`3;OoVLb 8ZJ3#C@G\EMH5&':0P4]Y^Ki0rl$kqMt+@ir+@9jVkn*=,\s!4d4YrNljHLZ$Z&<( +Q+'dG9!1LqbQYW;@`W'[t^m1/A)mb&rCuT]&ZM$8#m7H%._rMP?rWc$$Bk@ll$2PNU>qlHiI<(e4`%qu,>7u+fD_FEieJBTpjN%k Re59ihG:1ET/+?VP-FZuS6rHMs*CdBe[iuJH-u(=P[5qt^J2PY?'G/">N>$ns)VT=4]Cm\)I'u!Z]m-!l%_E8;?(s^ rbfF3Aq@gS6Y9-+-!.Ck2pR7DDq=i(dc+K2kuU:=>8N5O$"4!Bih\d.Q+W9f>geV! Ai"&QJsge4$=IHdR!C&keVRFQ@u=#b7t4Ej=G ImiGsR/Ed8`@F@P/#*FTj/U_/Zu464.VQDY%)Z9,H!pVgqn=;9d9GJf\%K`k]nh%' 6T_FQ>H[pT%HlS:qi5sfp'$oqQ>Pf:9c)9iMe1MP$@.1-ESYIKpJTab+2TDBJ-8+; ^CH.Z3=9"#nNYAan3:Faa$J4EU$R^\J-p52MP'BSqN.$!L02a)q1$@$+"m%$LsJ5= EQ!WGVS\&M$>,SG?!Ah/9 <9m#:=j;cM%H.7pPG18>_B/)r+l-%l%YeY-=J'TtYYEB8_#^=ONRAAJLdGl,nYM^YrqEq>f7Tlg(gd0&o=Te4)Dc/],j i0P1PJ#nPp$LmL92Dui[B12rFiMS]0YG_/&P5$1f5AB68XlWd$_8j(21KZ'VEF,q# ;rLo;`d%jM;tSL9[$-\1;j%E#8S[LH.N-?#R469]W@F=8C7kq`l$B!(3=u*9kZp_E LI)km\euAhg%!eJ,OKe%;]$ZXMs_UI<3EeF=$2;#Pq!:mlB`&J'o L\8HD[dQ9el_4=eNZG;0]Un^CJ;2\L,Hjl2M-XI'Yn<#5P[T!)qd.if[]BCe*/p?lT3Vc3Re-;BK=FW3m^8D ^p.M;Ym+qGhH$Z4<2eGK\Zqi5Z7L3BXbgWn13gltb/? C/f*`MRIW1T%I,I(gNJl:S!VDR$ET&9)F^8]gr@ANN1Q$dP>\WAqFHGgmF'LB rg0tNc\O\*:('9-_X@)):PUse-1cPk/G%Vnj@KGsWs8HLh>$>srn1TEhj08b1.W-BXhp&[\F4@p``,aC;@ F-.l55:i*^+I3,n(X;@_alsVblP2qROiZi(cg;FkDAUCrFGf/g.pO)p/"Y*;T@0d3 25sfaC0>Rj?Zkd?GOOA]*o-E3DKu`p+=>,V]]5pdMbZE[@F()m)VkIR]';3C-?S/8 JX@F:GWd`Hp&_;Dp RK9b[0rIL@GPd&;oC[p,BM47c43L_r;rIZmB/]Rtl/DQ$;?/WhSGuO$%FTXs5lsju JBrgXWrOaQs1a1/Mb?nq$]+O5!lXmQ`qgN?Hg*tEl:/:!"2`m$_H\t9h))u3eK_`V ,.pl!]G7/gQ-t'aErlIsLBnTLo2itOGGK2okNil"aeUS]bo^U3Pk=K 2#fM@!^F!c5Q^qq0)ka&`:*&VTALE^gW5QroA<)_7'dSa(d ;cG@pCL'Ul3gX<=Rr"1QA8j!Q]KS<6&mDs/f>b8rlUO-'?5$Q2UH>%m[bEV*04IG[ $kTo*$D,00m%,aBbbHY9G&8T\r)(fLO??;2!/N.%cPL,n_:(oJ1Vi(MX>G#'I:FZ- 2tK.?'E1QKZC=#bA)*#NipP9>A!\5`XlEp45QsoWR!74`rOY0[M")U( nPRpO1,TMOU'k=8qH]`HqnA$$?M*"?ZoakcGFb_Bm)KX=M>NTTR#g1g5KDp)A(-Q- j+/GMhIFI[gVsLX%D.2k%s=>%FkU`uFPP=0":5&[37+a6;_D\(?9-H;gt0(k06:Pr nbS.@[<8>*GJ1TFo,?E6\?Vc+]V]^d7J/E7.?>[:1*N,^Pt`88NgpXfS.b-\m\8MbYW-;.I.L cZ:ec$&g0<'8bB?7^3I/V>#nPHaVLaDX8Slf9]EF^TFH+h)>'&+lVdJmQYmEIU8@* 44X:u-1^;Zd#[L-5Aq/57Ml&??Leh0HD;C*9#Q24;uYgqi9+CJcPL0->F.K7P5K,_ lqnGRcO3?Xa-+4+8t>:Zh6!u]Fi7rri]H7"/HOMHT0!*Sb8?*):pPc@amn_n9[09?,e:Z.U*fP<-"JS;>c/4ChU,*E5!&5&gWU]SWSa^h)EWbBDJ6k33ZRj*tR /t,KMbGE!6Q;VLTF7tV3Hrg&[c4I8C_Prn/T2goJRRF;_ZTE+5p51er;\V2 0Q7ZAof"i;V#eph0Dfu95Q'F1,suJZ/!0RqlMrEUFR3;=mp'B+>?UbRd5h:s% @uqg`ctmt9DL7=Y\rWR1?du;Og%$0dW7 m)H!ONFA@sI>!c$oqHp6)aqkQU3.KuY*j+X7^?b53>f0'*Hu4boP5raO,L9KNj6!L F#&Ysd#W4srkJ9doIp2&`;0H5OThuX!abKu?e<,1rjTN[D&)GT#`/'&MtGGWnC.bc f*ZZL$usYr"M53F+g1)RY,WX_8g/'ZU$deXT#.HjU,i2s(B]AK6?qg*Ge2=JM>:D` X.0Q/fQKE$d_Ya`O6aajf-b+Cc_go\Aao]/+S_"/Z%&p4,:ncO1,&49XPd0Dr%H+c hX9F9f>bR0,JYcBU_O6"cLY+EO=JA<]oo+[Q`-1?W0=&7]#`k0OY\4WJQT`iFRFV1\0k2o'G] 0)A=\HB)ihO5nL"GV@^#rsV["Geef^mVle^0>L:$hXkmJGIX:ICr^.@Rj"F11pi"^ ir"9C6A'e1pN&NX=h5E]N!Asp/@#MsTV26?E>;2a:L&78[Z.UP5*$-'\$Pc/pq?&V 3Nu"Pl/2H_aUMR+OLTm[GhGqWScu>gR%`c[n:QhFKJ29N$'<=1o,e4cmtAoWK[-9b QJi3r%I0-*eEr0sWdSMG!n^Na#^EBd>+I"#lq.(4`$:c!A(tuc$c#PhDH`"S1`JV5 +1br:HtkZ`a*cg*C#9SniD\3sA)6h\NKs[+[U$<':$%gD`A4+\3LL6cm99N*1k&h/ ^8t5:X\lZ(\8c&(I:&mo8`:"T3e(0SD,r]/=upetE,J8E&lg-4`"u22odB;j[d`OJ n>dpFinbZB,DMUrJclR'Jrkd4L34id^INB0WASSb(;-Z*'kh(DXr'0RD^&5&^gC]f 89qg:Dl$!]H(O?/;;sC;qM.G4J#j7-p,$*9EUDSt4rED[@o)b^L[tI/;#&@#iTu-C fd#=Z8,?RD83@pTH;OCSo9h5:KAI>%mcoZShIWfILG1RQPrm.1c0.bY_ ]D4X]i;.;KlgH>JG8nK@j1&^,6l$.5+*MA"'oBSlZp2/;nNRtqYG_YdCXeq6M13r% r3A]O0T/aYM-]2XY&SJ?#cUm8"uVcZ,A,V^))kuMXW5>$g_Ku3Xok'G+G]h*VoLKX pFqpegC#WYPUC^72[',/!98H(AH$7cK.nEVJfd")P5#^1"VRdYl'#T0J1:$$8b'GB M0$!YQ^CB6!/A?J=;M5X/<.e@c)LqA<"@%n<6T&Uc=p;-@F_>clIO8Ff?LY(*p/G# )>\Ia_a_4'h2G[bP[N!%@o.*FEnn&(pS& iR\3o$fLcuO;@n2"5&mn;o_1&8*C/.$J=kg"1AI*BA%I7X?%.K3u4s1_Z(j mlduD3O%b.O")"'E#V.S/UlpCGX%S.k>#.#UKtID2"9J,Sr6KPPAiZShVKp4"[U1k[4,,'l41Xm"1_C=g#MBi$cs=[$:p4_EA4[V?ekDAoj`,Io\[K%b.]Ur6Kla&lK_ 3LIcF)FQ[O!;X[FkhuB2i+hi?r1E8LLK)(00E^bLIbbTJQM]8c_#JfpJ0Z8m;a9&9 0?cdBe6OH?9fq!-/'(.8crgJ%!%3B5UUn48C4NXJ^QYD,Pr?g`6;_W<&[\HJInG\nT$N-NnF 344\^NJn^Fb\3QK=AT#bG+s;+P%Ib#/unh@;9qs:cV>eI->?bC2n9O\eJ=`KNNB#S [4tt7,TrE=!7PeHmQO>=-DQ_XpX+,%nqPK/MT=A<#C4L*'"Rsc;0T]$pV!K]e8l[V ;%Gc9fN5tSTEV60,G!l1l'juGgEEo5W=D6Sj)--+?!YQu&A._kp-30Ror&Zb5Mo1; 6)HfERt,iWCTr;Q[e2V.)e^LN1u%ELf:96+H)?IEuou`,>LkHL-YLn^InF@,R>B cV-5Di`XVU@*UUua[DH/124oVd@@`\*=]R.[<%M.5 8nWt@Yb\HRb?nFSc/7$lT9W-I.qR/idnjSu*ANHI%Ulf*SGLjJZr/Vi5>9]E6W;gK 5QZV8j=mZ"a5@]_k6n5 hj+[7VhkAa/:4h'qYQT$8#(Gbab$-Znc$>`s+\hlgPY?9LPf`*[Ee2U^-gk*1s#4G Zj6g75AVa?SXTRg:\teds3Ed4O=C+3U@eDir(h+6^TFR7\SLp7U]S\X)4V9$:t%*j .^iD-EnV]+F?nhd]tc`.C4C-3I7;]dL2-AFJE)PGfl&7f^E'Ud%b7TkP3S,`)3VIH k;VeeFme5\ke`k%3UD)HqejWO(NUV8g]fIaIa"W1F6c>CcX@^sK/lBNLt>0Y6qu$]#8e&p/]->;N0aZXD4cB[OmX X(Rf#:E,Qt%<"p*r3'( N1u?=T^gi'oZ?G1,]A$m[QMPP7p#pPE?<'aO`2HD$!:duXFUpVRl3qYf>5V:DL(Uo D2lhpcntj9ds7?uH,o(IDOg`8KbRq9Uj>;@E_rr[e?F[@>hsWqN2:nP,iRXC'6=d n^@GEr;WWC(^GL%J:o&hoSitV\nWJ"Ba)"]qR^G93>6e2e9r=er1#Tk*7V[g<<,4+ 8j;qU55'"\p9K5Z@c:&p0eVJ-Y!Uh0I$]8k.mgcc@lXso^ 9@V*YdEP;7a[t'pSmpNHQ:+M_TR*t?=L?GVg?7h7B-"SH4GO^S->'oI.mE#_cS=5Q EsX`GiueB'/n8*,'DTi@Si_5TSUBK^EU5tOp)kIQ:EBa7!DYsnmtB,-"juam1%%QW _g3\hE>jCcq&`#2h>gUXjKXfTM=W_GpmA^S9>H1E%H)`g6QuLiM-IjCF5B=U3<.ln S;3=0,QK`I(B?MH@9BX^]L^kq SY[Dr/\n"S5ra5&ETGQsW9%Y(91T-^Afh12:OUWth\4>X;g.?U4V-6KYM"]fF+D;; F&+p]*k9MNGFlH[5B1-iEa[8)U!^A9W8H0@>$%c[,h)nYmq]?3s.`Sloh`DK8%359 ]jO.f_MZ@p3CTU6Cmnn[]\K>@\I7_Df@K%V(F8R[ealQgMUs]U8KuPlK&IAp;'[]O K_^XL]Sk#bBmY;:0a/-&!s/lS-k!VGE[L'Ac(f+j6&41>?.1h"soiO .s=?jiNei[OQ'hQX>`Rg/6cf%OQV&trtj->?VH?+72,T=629VSa`$;eIp#YIAQf#E 3J"*afI(1]Wth>3[Y-i3_nK<@qp.FK?ha4WR1oIH?0Ts(mD!S_DEbb5=H4GgZP,/6uMK,t#Yu;iTZXOMGr\+st(mR%' N7[5%Ltl=S**u!K#oMdn"VcYAA]:`6sE];rdX("hh=CO!lA>qgNCmnn@3g@r"C)9dlWp+]O9Lj1qNfW;u CG&^:?:>1]\`/3e_)=E3_"mb20W^?P!&hM<[XG,:YHQe2-jpo(_\Y)#tLs22*g&VcbDgRF[\<)7@+kfH+eEj`-Rm*V6ZiW#]aTFcm^+V6^ #71C'Xu,jK#4VZ*I4'KOZ0]tuhZ_4@f?Ti71"[PpkRu[b$f)`RG9ZU%7\_40_#-0* p8q8Rh'B=m@0ll*X+lTa##%[9bR;!60(kT=)7D(;L$ZUR@`Yosd(Ei/WJ^'"=;@Hn D!)^LA"DOg&a+!&-N9'KdJIk]:\HUFr_N(88bFufEs2-t'F73HO@^Lr!hgsN"98L. $%C07^.t[nq`t,\+FfpT4meKiD%m!l[L/ULBQ^eHpU6:[ZBasfQO\,##^$lBp>F7& jM)>P?]iReT#3@)Ocrh%/`4A;C9Wmklqok-4+3V@%eKU8K)`/K^/n6\T2PGJ*om-* M"a=Kn)H=_P6SalC-cHg&?.q%n%;Um[`$])ST@A;=`MSe$#5k7ROPN,8^V9hW2@S5 V8]06+?`I'P(Kc'oupskX>lFAFH-2tq8-goNi;<4LlMYBG+)FqKM`oC\9uGpSnZX[ ,!PHV39NFko,@h[B4(Ur6+XPb1:#st[-TofmQ13us3lt7krQQGK!=9-hK,7?o9nISo#.;#>c<&nAF;bEihMm[HP&r!eDnH6`CI1+D!Qfj]SQX> V[9DK@kV.\K^))A?4SoBRL%?W]GlDY$RFY5_Womt)mDMc?[2o!aF4^b**5)o'(8bJ &@V'RN.nl/5Ob)Oj%?jnNs:%RQk/O#G&6HNChYcql*_VsG8tA(3FB+(:SVVk\Rnj8 E`K@aYUj.uOssY#]uH3e=HG1<<%J1C?]`%8,^4Z&Y)"B2b*4F/d4744/nN2d;#/Qe H.-JZ.:f$3@87?-J6+t=>75&lLfl'GW/'4S28t>f#+na%+Q399&qe![B86>&/EMAaao8Om IWf)Yk7+9."$GJF1k4/>rcV#sP<&!e\)bgUlC:!ord8&EK.3s)$\ElbeNJ9AnE[OA X[_ZZ!Pr[kdN=UU:PT)1#N6NY387:p4#6S_.eNmrn,ltjF0apu6V;9>M*CCdHea:& fJ!/BT@@)iUA(.1Dc^nm>qc5`c=,9iZ^t6@<76OI'#7J*h]UuuW*NVh]=+MWI?ebo =ZrCRRQ2mb6P3+b'MkX4D4ejoj!T,9C&H(Og^*rfB+,(SLF``;J"/`4Lb!_'1RuN$ 1!YP8`ULEGj2.c@TbOe'#.asLaTVU@$>7e`c7R+DA4iJdQS2gh'[gP"R7\b5WYP-j Pm\M<9=g*57]i`2D6STp!+<-Ng4moZfJN&!0kt#OCg8i7>rHS,0Pk'*4%1\;[kJ71 ([*V6m0o=^\l7@bA*]Xp#La:8@4jT_UA889aE6Fg CCH28oc-3gSq&e;a-Cc$T7.Esh"@1FHgOSrZ2;fhItnSQhh?1=JIL1nY<-^;e'P+3 hn![nQG^M@oC0Kk(`HiF5)bA`SGF%lqNb@k!Q_q0G@JUJ%%D+KM06#,-.ehj&)r=& $!*.?'c18:_%ilaA]K?*gE*#S)=nWPs$Jq5`H]5%IDm'\!j[>_89ekIP0.# bHCH_#rTm4L"/"=bUbuq![iI>7hq\FJ@C.\cMS`l9#1@Bed?67iGc2fFgmM#!;YH>$ZX^BAD(r.!.0fX25cQoVpR)/&hlP%oD#a-C#+&NeWC+M YjXX_.^8;/h=[2io:sniF>tTpd"`O#4Pe7 U63.DK:%?_EJoXg'3drn3#bVOn2B.d.h"ae!MF$cf8&4,d+nGYk]hr"j$^P !!;jFS[\J&JLJP%,mo^+W1$q3Rn(cB*hGC@\QE+,L.[^sb %dTQ]`Kj]P\h^3LfnRY/j2($* Z0bf,\!rY4?F'KGgLIQ^B.QbmYE&A=V"nbf^f35#;iX"Wj7mjmr7-JMQ]pDnbXoMg kPk@1in:U,P90'hRc)jN7/1E(oR:%FrbYm"qdoS1[g4XbKKkjbs.:P/Z\J`t%upR$ :\+aPqkmHEZb*)!/kE`j'7R]WmrPeMha[E+*0f53_-U!h?VN%hQ=39@4GW#BX?;H0 Kfs.5IB-B-E?jqs&s^)*b+EiZIbWlV1u3Y5?q$@RAL]#Z.q`_!'l9q;C_L^QlJC1D 00V'B\SY?SV-CC%?*^>1`)OCjOO'gjhB\@H-'gG>OYJAP4tW9[/W^,$N+a-2'Z%^b mV!RbgbH]Od6ugo]LS>5Q3@G!Kki4c[QBRC.7<2$Z3JaW =k%-c$"3!@4!:DD*E0R^;7@%Pr`)>4Jd105:!6:Z;@H(rbID9*]PYcl'u(u\2e`mnQ]O_NXYim`el52A]\jZTBS lG33c!E32DkV*6d)a\baTc_G:G?i,th'fms$[@jG]HF1$D**dYq/8>)mR-&RgUlTu `nB:H6u-V.+NQWphUgS?&0HK,*!At'pesEZrd.HaIP18Is6$IFk&%^1q!`TQZ"P@# 1!)W/_N27iS\#^Km1cT*Wcd?dIFF-t44Cd!C"kdbdkYT;%fAP%R'*X"Jt0-QOGnA$_N,Q""R-K(GcR]@W!)m_g1@+?\n?J!/Ht 7dP:UG&ROf0B$$C`_3id3,hX".9!<1;)Bq4*QUH&8f?8&BKn[I2(i,[+]9mU6MZ+& 5[&bcH6OLc;'nLs[5cUF,p[9Q]prV=4(D:6Zu&;4+$Ct&go9W-A"+OW]0=0nTS\<: EV-lZG5Ks7*J8LPAJ@$65JS>]J),Y]r4hPU!KfV95@DZo%+ui+4!'W':\]'aoT8d$ s,R6Ga=/s-"qlFg3BW'Kg^.WLNaSDG0&e8SGhLE4%6c!X5Iu=Y^[s&p=Yr6:fg,P\ ;2][g0]'9s)`?R%J-Z"6,N,s/?H2Dgf`rV^*kdcBK3Nj-mB_eCOl=VjWLL,I'n6UY T:K5gK35dM](HhT'%VU#@=9YLja#)@Zfn6`;2\3o=f4HjgTK`I(hirjMKm=1FQuBt gioDREi)$@U7Bqth6@g0C#$%sd0-hkVH=;[<2nVLDqnBo#OE'AG6i>\Wn!145l;-p ;7sWG;N0Df1s1$LY&CGPGb59W++0'@du6`#ue^g!3/isM(aQ6S4+(6 lk>2skL!#Ce3bo]DbSNCMp$gVCgg*tO4s1gk\'ieKB0'm<]S,IVf]n>o(M:(9E>>*e6iF":&d AP(gl))5YJ$]9TB6TSsJ.Wnbj_M2OYQJ2"KSSNS,7=.K_%S^\5bhMR?FJ%9/*h"r+ >1@JZPV;?.?dQC.<'/E&3_,O_SX%W3I)aPB %^0l6!+aaA5C)Tg7I[/Sm;L_QDqO`"3Y%nKAkmuos%E(!Mfq7a:'4]Q_lNKZ5jW8= _s=HM)fESG0+n6tJN^aS^_W(5U_0Pmggq$0#>blB?AO$JKSi3X:&!eBYe<__U4F]2>cGYeb3^pm)@dB\5F]"-_.]&06Vf=YY8Z@'N_O_@fTi`=gq ;3pY7#iqWEC6d^d(@Qhn^(B\DUI5+>!;WOsqnGr6W97se#Gh0`V#-Y@r1>&&Rf>02 9sVW0Zbt%.,0]YQ/C2:;HJ0h-!7$?r+/aP>r'gLg:?F;AVG[Ca1MPK'RE=G-&-G69XJQtG=U+i28=O->6Cb-Bl\W!eN\9?$!_^b"b"*V9_K09!R"*Rq% *E?K/V&X:&Y_=T4;\s^Lc3ndWLt/:mQ,JPm`i,_&.OR_7-Ujs6q8\/f7Ye"^L9#k4 r%A@INCOVC+"L9Q@+,^W2&]FQl-dk!ltT7#Q[G3hA3 b6sViGk218!gNFG>o&"R5"(63:6N\>)de:APO9Jl3 SR#4:^c0?S+-g!WhcMqW>Aqa@mR8_bO';^L^E9q:6@H;=)f1'&T-XRqj6Ok:Ut=)0 OF)'('&GD;#Y>+pp\NWY47?eL^.@/$2$2ragaN;2"S0T)*k-72V[;DPU?V0hlgOn% qZf+d+6=MkOL5VQJ^4pW.t/5#s&m:g_dMV4+50G5b)n4Mct3-HldTd`nXDFH-[+PE lmEk,;bh2LDjh+WR1(,T%rCQSXJn.]W7J/Qf5D6>[pC0R[iB.l*U0pu0#51,Y2<3X `VG!PY%1h;FA'#h;l+S)rn=Bhoju+#9+"`;d[-gWZ6pr]-7*0"V;irB&nf/3VaXN- b!ff7,gS4+0%1O*8E*4+_If,gm;i>TZ+LG#gqrJa]\XKK?;e.8Q+PE\)tM&;B/reW)nj/V0)2@T$'nLn1b^1U(4k[nq#d&DJj/"VqXS<^W?,?;O@]`bT' !<1Enhj`u/"i[P6nlP!bYKTOESman93moc\2l'_AQl@#8LS(_1o-0q6XbQN(u7!"_6)fB%+"qd/rB) #Eh$EV!=1=l'9S_2DEAoB8gW(%;R?`WlF]]WCF9oAdr:gl7mo@P#:>NE>@0&P%%H$ R'81hRMPV\>\I0]Wf^)k+VA'4&mZn*H!N8<81^W+,-F6j\R$S_:$[21iRMB.OpS1h .D*0*qg,8:/]G;UC0aVVCmk%]?Lm>fnJb^@+RTAq:s2*(3r+?RDVokYcY[dUPmH#` );0-NJLgd1pi[P.E?!a*+Mh[GIULWB@,7\uafK!gV@2HmfqE?%Fa2(C2%-(#"4s4U %nI$snb[!A)=7T)-#o2u:B?=QAA2H44KagcW,;F%Dl3-6>r9r2qj3TOH fL^(!U=qM"RQ&Z3gLk>,VX.M6XII9hXeSo+_#JiFA]&+[_o>\$es2GmXW;lB&tLTf >V&c8XHMA`:q)dh)8uH0*_*sCa9'H338)J#`S35ga!B3e'EDQ+cp!rp;=G+?T,D+0 'l'$TB)[PYo:mmfq(KZh?V7PF[o3::fugq\.(EC&4'Tf-S1J4lc!SB)>h[J&&r4/g PeF''SV`T%M%%2V=N80Jdb.%*_c/JF7QA4Q38^)&=pRo0$s-L;#;M!dHBDj6!*^o3 fXSc&;2ufa@V`s8=s<',!>jcY-RG*p3/=[f;n*uF]JNLN9!i,DUfpZ`E^H-c>aS\g R!NkQ>#Ycj!5O(W5Y<$UJ&(k66>^NE3O*`b#*"Vsoc!pJ#>?+*bT02,*(M`$7Ec_V ;%Ge/O'F+=Ng(PSik!CMZ:3*FFl.qkn@JQ0X?3S\6a%pEq`t;Wh'`8Fo'\VZi!tSh jehLj8H8j:!C[`g_9=k!IhFfgG41sAm6K@,`/M=%$hqLS:Eq!F?[`]ucM$rtAo=P' .t7.4C_4(NUO*9i+"+6U8pWYrrGhD^o5rKkq`J`Ym>O3DHW^UBB-.2%"+\CBbQ/h% p`]\'fKOR$QNg\_n/rf+q`uSuR6)MO+2'd\'>>LDJdgXIeC+RZp@9/&a+R;AYR=kN"6OjU.Dr"Udp=QIO6e1id;&.4!$V/lCqL?K4p,ZV2Mo DbSfAM_@G(VN`4RAKs8$O%gp/4%5mQDeQO=A!).@K9O5_50))sm(59q+'2.-&'I0T :jG>^pghD8h/UP8\F^e' F<0"UmTR'$"8s.f0C.5peB8u%LQHrh'N=_RS:&.8E4`te!(60(?+pm,>u8-6dJg4F l*OnS0L&#"113`5.S]0][,Q4s;A!3B'F:>)<^qj?e#ZZuY%$Wp_hYE52(n+EcKhb$ 6?R$TFfL#jWTn&Y)W_\+Z7523s$P@a5dckgq;0_RM)IBW,]]'$":,<&&35Q:P=[Ym R2cXT-5]G%3TloRcJVZ%?(Gc.]4\^P];L#<9meb#hS-QR:VZ@&lbC`VaMOcRL>RLL IEpMmgo,>E(fUq5+#Sb&^URJuCWrSjd]sL;It3#%Y,E:@fP=UCB3a;1:sroOfPO^n l7jk3YUgm5WaJ!X=q.cF*471ZScNPQW5c96SH<05Mlh8RBe.u#, /SO7dTmMjR$iJnU_qM`GkhC1Bh57PtgU?M'Zu)"1(C7W!7no&M:r"s 51[[Y]6=5c)#opFro^JH'EJ0"6&2"b/Ygd_QS-MXr17nH]GMeqsC)OogK^+lnka S('.HN,[OQ8.*NE/akc_'`Wsd"9i0sE1UO8!5a8)@kRX](,BDV)5Q2,A[940gP_,S"]FK3^+ dt]0)_S%ZjX\hE-&Y^$!Ns^JM1]6?uHk_,/!FBO?*pS9(Su7m`]*??s6c75K*F99K aAjAMj7EZdZ$P,2Q$eJ_V=HDZ]FM.(b[GSihcchI&8,Kr-PoQlmo-jka g5?:'nG,f60&"**mbjQ^qqoC8rZlq'HNbAE!lB[S^5lMhRlp;#4CALu/cZL_cf=_K )S6Asro[d`Tr?b/I#2q=AX;$h?;.b5!!Vq)b%aCDtM8'[]Y$=k1Foh2jd/aH9cpQ:8s/Pn%1_>9J`sLNY)LgGEJ))Ajh2)!9=8;6^ ,lV@HjZaN?hcEC?f-%il&c-XRbg5#iIaN`E@9hf!(R9L&2YtH3Kg/7(rGGm! 3+mD5,CNTAIe#g93N:.\5#1KD3UU (XM=]c=ito@0$0Ii;\I2rjZRsM!";+Xh7Nur,LQ0EEr#:s)o6h^k0PkH1P)n-C*%, Q#d]oB.[FbRmG8*"p+ac;;n0V_1:M9IY6DVK7#A);:Dg:_kK?4_ENV3*eU1.K9@DL Q\/n8k\C*kc_M73?rdd'+MPACZEVqC^X'QshkFf"ZFJelGQ;)+6n[pO'Xa@jf&9M" lT1d4S5OZWBjD\O &/2LSfJG7ChLZ-:3OGRUaS7h#kV`IVm"7/QJqld0.qAluF#eP.(r7bQZiLM`9#II\ )pj7T*KV?GnNZMmK`5S:>!$3bHIDN[34WeR\n]=OKhmd`j8a__T6L$H%>*O#9E+ U]Bu75]UnL/Va5r#ht;/]?DZqUPR'(fQ0gS3U+0Z1OLPK*+7?%7o?W[@;5^Pflbh`IT 5o,!jk7R#eK(H1nCL?9OYAY'bY^9^G-.]O7SaZpL5g7f7kfjY9_=#t:QeTku/5lOI phA^gp]=L]8,477oonTV=98<.!UpD.0$k93F4dQ3=M^T3I*cd2msGr/H-a7sS-.TZ ceNQ=cC#otpAOkHh)kD?4^uHo9b5hQ#BX]B!'2D"mLhRi/6agq>.*bW>JLLS9cH>f AoD,6266u\Ds=u>e#ZYO/R)7."q+O6.Tf\"Jm;\`.;r?4G=q#NPYCYFIdVbeb+W[f V'GH!'Vf*Gf6b):&A;rr]KtV\j*?P0rY&JL_igTk#Vd2o$UQ+a!YS`@i4egaE]QMEXTu.t,B[!> IbB7A7d8rcue*4n[ch-KOX9jSsW3pVW$EpEMG#f-A&rQ2T1!k#[ND hbQH8QOVUi:(;Z^A)'#a?W8KPAY/lqVrkH/g-9:M5:B"8C(^6%II7%q2?2!NqG4^S r\D[nY2*VD"ITX!X/61EQ(.esNq0ZCidX%_q,J_Lg^0=)4K&h?/4*;SKZkA=8Speq *]i6[b*mPA)ttcR>ND5Ae$;!/iYfEr'^9?m,:^7A auR@3B`()sPrGmJ[%LJ->1>30_NcbmPX@>0RQ#s\^NL9*art6f]'$G*Un7 `QdPU[CF_,NO\0BI]3rt8]"4uK\3P]XJ_+aZW.&6[)8pq&fYYmH<=_\:0%7Ob!A'" [:Xqe2,:*;-GQ"UWLYEe/X%-)mG%=T)n,-lpnh%hgTGtnOi-*3D;^6($iE43JKo7X 0R?M8LL=C72_A4J?*eJ(TQR?/X\E"R$c%Z".k(="p]j4!<`j%]l89(*;eX"@H(NSD 6[am_J'@=:s3V(,[j1O"&UX.&^bhm"edh()3^J3N8uWb<]c#n\e/2cIBkB25H\pq\ 9"aX,IMF&))^/5u+^>ucYVoIj-:IKKTQjIeGc@l[!Dbh9-h5DR1<)[FbZ3?B8]fFa fumOKdo?j]n&eXSEDgl>Wd;1SH+U-Kgf8bcd_X27Mp&X/gZ\=2@.^i(RGZ5^pX#T=HA!,eIt0bNrZN;!omFUo `<-#pf-q!r!VlOeUS),KaWJR5b[0lV+k4O>q`oL15@:bVIIVp8NW$\&i:"LP!ko'& s)#OaBB_:07_R8:VQ1+)&q[!*uSX2Ohf=^q*7ll&7IM0*^o;K?pKPl5Z ]RC*Xcu%p(1Nl%NhmMe'ZgHTmGA[sqiVCj7mu/uKaW*OCO.K1'N[P!VjIRqia.?#o 0m2]E2Mh#3"ckXMmQ.di3AbLQ*LJbQ(r"\OX'*oO=oe,oQh*.i?Z)g/YH!h;"Y;.a /]g._;(\5u#u]:^EV1B$Z(I*S:rG,`,k]?iQZ[j<52gOZ\&@;adZDqP7ER/)am LK$G[5"!hp&;:Z`g)G>$+Y:PD6lWsbpu,;\N5+V_qSP)eWue&71D\[H=OKU_fs/]FO0cdg)'g8]det4/h@E?\DftYb!rV)WB J$*SeWXJWO=Q482`I?\9pqpm(?[&RKH!][K%nuu0Lmq.nmo'";)9TF:lG"B@qW4CF 4%L[/*e&@7YahlGi?Qn6/Fn#@Ndi+Wh+U5fil"k2+3c)VT=X+`1oL9MM!8iI>uuD% =V%?e*pSsrilVl3RKr!J%nLgKYt<^riX;le1b$a1 &]Z:3AuHh(;OmP^aeRK6VM:>l7![Y6/0At]h92b^Z7(6V@[QXoJl"=7?+XRpZt\.# 7HrU7l.iT3!c;&KK+9^&R;efsdkR[c>A^p6E&$thdBm-OK;6*QC)_Iu7d5RG$(tC -n[^'Kc'2h*U?"OochHOOCEU>A,V4'!@2'%Ej/haW-q8tWmh;hH5&5"L6`lj&'B^) Aj*E>PT<99M77,Z'^4-==T"4_!6%j]c2q:d7/juOJ3O24GXG%1,7n6i)R+.9PK%.7 055%fLgVc/Yn2%%M0i1?_q:#[S>?j',r7\PEkKB^!VQF9Kmk474OHK6MT=JaSQ(.85^k(N'h=9>Q_WR"UuLgDioQoqj/1o' WT90^$e(rh&1o5K<)j0si#hOc&@1j] FS4sU%=#DVSc($Om:R"mhhH!!+RHl:SG=#+EoT.jQFBX3fV-/XqnNMRjHMZF`Yq!Q O2:i0G\,@$H]-[mDqfJ,)8L?)5BtHj]5a@Tj3Csd7uqM6pT6LfLn+d:/P#TE,HKC$ e$kg$Fdr4bCHAYbeLT3.X4G[Xi/0D"1>kAB!jHR@_"qeG[<+trH/0nHQ4n?('QcV7 h.QMT3X;1d\K3_/Y'jGS?I%0jrn":bRl3IR<_rSa4c1Q0dKFZa,2,g=oH4NL$OY=8 &;CHGT1/V:Wo*:-BYTt4Htk??8J59WJfLRZ/]@ujKd-EIP2?f1s*;H?GN5]9YE4[2 L];//p:CplV[g\J@c5"'UDMAe#Y:XaXJ'pR;qh^N;QN96D\I;gIoSZ:'dN+bVL;oNsd9GV*mHg9+1kqRMO21!.ZI2>$E/p-A:BFNA%OGS14j4@VTB?iZ\m&i^%k976]a/3S$ WcjMSV/$9:4pd7BO[#M%e"`#PVj,`0P231)e#2`K?TWa6[h&\X#OIN:QXJi]VG&M\ NQMKGK`M-Me$9:+'6=3Ud5tB;`lC9Z8@T@WY.[p_>Xl`&XK]7;M E[KNeJ7T_cBFYAjZ3YY4O*7dUi_G=$+NAbkj1T:CI-_LElk9FKM8>FP&A+_l];OU% @")9)/L-^U&P^H-EQEMoc\ccDA]N9+'53bR&uiDJT*>/md/rBXjM)+8!OcUG2Pr6: Jq&BGN"o+1gd'-n#;NuPOe+C)=6d-a,`VFBb]%#Z,>kIp"IJc5LFNtYPRV1S`,R(9 >ou6$I$EV>Ole*TlM`3N9etBj.a_BKhF/pJ=Xqp(1;HK4MkfLY<-DlP3AM9h=\9ep ;jkU$@aZ"M_25;\lD3L\)r[=l)B$%XT;aI)Y,n$4acBN'--Rh7:Sp3@E,*q"EZ+ NUi%;MVNS.)h189,p[)R+MKhshA"#"G+[Yeq#@.P^6PAC_\+$b6q1FDIV31Sp@1H2 j)5meIQ+(srM8CZQLJ7(.XXIapV4-grj6/1+5<=#)('`G1&B7)pg$,Pq[(NjQcR5D LYm5=r;2T]s1YN/]7/cm+/IX5R86>el-f@e'&hRGXb0[VmlP)F[&Er)"8@R*PMZli c9;h8ejPEnT#+$fYLKcPaOaEI]BR1^f1:1ZAUY2nHPC"4)F,1Z>F,WZ\&pb@b':Q2 @9!\u?R"W4Lf$$=nlCRr-:7/6j7GNU*0P=\IN1_P_:h-gr7W5K(co MI$-@HJqftr5[a+GCEK"StfrRTd+a<+fkL%dBuJ[hk@Dng,*[YlW5WQ(/1d+%4Xhi 9*[<^qpb2J<,t$bZb'2B5i(]c]pblK%-\Km;?.Uh-lb0q0gg1CJZfnK/)f*-np1^c #L)dcN3bSTZFUIN]1nplR,rH/kHs3R3fJ.7NH0?h$O-p6_q*oo`:@>'fq;>:RrJJ- =YH[J4gda:):Y=Ig7jqaXIiLpRS^'Xm&b_?""pG'32=kHj/m<9]jYZ.;-Fd@@$(5Z PFVZm4Jg%Q\V?39WuD'.k6Y;g#SOfl&;):m;6iqgW]kQYbQ_No1ZOfL%9>AK-tLcNnJH%WsiajeO5l#=NKC[nfQ=MOVD'Y*"O9Y]Ri=nuYjc+@n%CDu)[&&6$@maNn @m(,+I0l'n,i)(ICSTg!YO"VT%UqU3j[_j\;:Is&&AscnG*7](PRZ`qL2^]%3RZc# .H,@A[*IWX(4(tq%]C\n)R!1aTA\:clcI1X!5%-sh<%1m],pr7[Kg2$E% I2_u#5'%XuB+;XPo"!NINVQEUNAdoh9##?8[DVSkhGV?c)=Lr^J "8HBd^]=8peDW4\TaUbV9?7:X]gqjX,Kod*l`NUr!XKhDq"?lBQtit *PL0DmA_1t=*m!3\$[]peB3@BC[*4h.aOI3db".i%P6(Q/X+c1UR*Qa2f*m!q*fZG &pE^*J'8DW[L:t:7iYIfH&oiQ1cBPlGf>qo:RR5Ha;/2(O(1 Nk94/IG^dgh4WWNq\4K@Wq$%d`I'eRQO>6mqLn(HG?\jgP(hdBj0V6(?8b^U92'XoKtaVW)Bin/ O:^YX+k2G.WY)qU#Gt3+m5cQ'"4I1^;LpDDD@Jr))T93&+he\aZjAP#`#.;CN'VHU 5#JL,)8@o&i*"mg?(9V:C>f@WGKDUMffXTcQSGY62Q;s)V4G53:qgl(E+[^J8ngG4 kd]Pm?+BUap^Z0b:Y^Ut!<;M_B($pVm_WVoLX1A`\bpU"b1Dd!pVDbHI^>A);\pM8 a3I&m:4q`TK,<=Z;g.UaU\C##Hd:n@A+gqqGAND1f'r@]AhPNj?]5nfp?L_JX(>^S <_3O=B]esFo)"E(5`c'>)PQFP"odZds#Y1f5lNs*Jptn[DR6t[mGpc'@G[l$dB7bcNadL][UY

M=;7eYMf#CQ=83=^V#?.#Oo)#mCEVL\\KhgS\T2U;6grE+i1;nk>o L\#*('&'K9Gi_G&=?Q2H"'tLk5[XVk$h-*&Yqu=1D(d_WptQ[!rAnHqoVK%gFnj+- oYuY6>PGBA\'\tm&^/dg/"jMQFa+qes)lBi0H]=>#Wp]14q&J#FW5j;*5hKCd?CN3 ';mJCfQujh#d-HJRQHi5og;^onmnRP#]Jq'fgC8f:#nBL.:-fG4'oQjtT&:T+JbH)SCq< 39A*6q]q`:@h'LlfC;Y&9k&8PcSfHFa4)Ia<\Y!I!A.3>9Ml0N7*6D[0R+_;N]]'. P;GdkVn1lY'_NdTnS0q4,"8;0'cD1ZRL)=+$H2[Z,f_.*?EoUFe;(f0)9CGq)VmXTAqnt_,MVl*J>^[suQA^.BXn.;S^#+khHu)dYVF0VJS<3aA aS[-G%"C!F\!be.54&r18Va&PPb$/p2sV$uQmDeg$D?`3'-71^d18 7Ap=JY!!uaIW>,=7ijgS4ba](VDVj!E(N^BBj67B/Rmro^3C5s122n9C7$qk=h8NT ]k^Ys6u4ikD*4IJ*\uKqh>5I2LH^C;h1s9\"](`cO'h[A?O'?^LX(;R>Ik8tJ7K8* FV;95m12Z?ETo?(iBD;D2?GLMkqmeT4F6obeHfkrit6b%agMDcBAFdR\9,9PN!MI]N"?8LpXn+M67, !9/A3q"lV#qCE!ZnAW*'q*=pKSWnHFVj3\W0=;F"krc)eV:HSseEEf0kp1dcBZ*qb ``-]lQE#\)WJ+F6ibFGc.s7S%oTC^^ilb;18sQ0pe=nJ#A#g$tX%_P(b[O4=,G2!H qMX&%Lm!!lA.N+#Q`.=$TH-gi'(h9O+QZLu)q@R%l6>AuR:_!TJN^h^)o]RZYX[f$ c&h8B(i;@ac>E&78ipCNW+b!hJcP^=RmT5tK7Nt`Nl-5\k_37A[))1bG3[uD%W",t Tju7_m0aEffJ;Cb-5U"Q?JuD>T!E'u-8eS'UXoW\BQZ-'qFQJ=&c4M>oXYW0>n=?; `@AW`p7fa4YeVtQ_:ascR;;CFa>P?_/iAlV(2fHSBogefZ=<'$EK'7/Ap,@C-]+6! iVbQEhD=;,liZif9k4.0$Id[^l)[5$"W3U1n@Q7\3SGs7$h,`5#.";uV(>XK!rbOo !;n2_b4,3[B;-b`Ua'BB-1rM_AIUJ-5fVM5ju?LZA+X(-K:qREUX$9rFJUIsdhTN` MV]lf0;cAu6c"\Sj?Zl@@&g^l("'7X0$C'5e*Rkjm*o^WC,A"tR[kXahi=dG@k@qk ,Kir$jV[^L&TV+\C&r4t$6H>WhB'hr?:o[\ZD##':V8QC"$*,PMtV53cEe9>doS/# =3fimcQ^c>b7KQ'\kGH+&(0j&o,'ORSND_:G6\$g\W)*,d_"s/$5S.dD#CrBqd\:a ]=N@K4,Yuc8,Kabi=FTB7/g<'IB\5@s2?Y.#!QKK!,k@([di,LA+75>?,i?2o@^jr YQ&Ot7BHUaJcDC4Lm=G8FO\oTRg@n:1Pgk3&)eIp!<-)i#l(?"5',?["E^T%b;_DO '&rq,c^?;EBn64F^SU[4:VI2Q?8L3GH$DQ^6OcKbG46qo"8Iq;#&p-DjA);Qa"H%T &G]Zga04]:+:.sBD$Q*CI4$;I$g9%5lNH*j:?X__FWZfoN_/&7!Eatfi;]D->Cca1 ET.2c41'FACDVEZS9F"Y Elpr+[=5\una)(!F7,-Y0C?.>6._k=K^9*\"H(4eg>,@FgLNbUR1J(,]+OV3\gq?_`rLC^=mui,]DDm]; XCNLGM2JL9&rEX0Esq'5=SD4(Cknb'4XC\AEJ4!]Lb4->dm`7;,Hk(b]@?BL6I$7* I3p4%-Qfrr4EBa(E#B>qQkYURH5o-m'/^sIfI,Y..cf$63&Vo/#)(cdcoW>Tqnu`c 6sP%,?$jLPqB,5S'Z6hJ@n)`XkAf`*etq[j06UH9Fr_N6D9CJ;9%J)VGE#rM>.rV, ^Y(!L4f5V-0fmUNqbaA?Ns"7b4@_\=]ZD,-l._j7i;`\YQ&cMmmm@o[KBM\)AoDpX n@!,9nb9]\:VO1(]k>+ac8gLnN^N!tA"YWed1c-rm3&Kl2=,:.2]/*d2"X>_Z@117 V/_OnAr9DJJUc?c<7HoNDqE6KdR^KAIJ-.ll!*hF-Cp)R>ZRnSAs`%/n,cG$78]+[ 5($LOS-EF"9C6t35!4@%kp=$oJ,3&%Y#=Ehi4W#9k(Qi8R7;G#H<@Fe8?#d7Z#TsQ i"%;8$8#-^.FF/(e.!i]M9*^4LIom@7#<$F+U`3CU:2Ng9a$,?498?YM#B,4f0\l_ f1'b^KM4obRS;1WM8^-O<>.8Da,-(FUoG`hgK!"j9ksP8]mJM-CQmJW@G_R\-FIX4 Ta/7ZMGDXqbl9iokT1OF?tdT#O?ZZOkg4bM^^V;;$c!#Hce:;Yp9>r2O;`X,T^sS" rQCH!)4Q?eqjJtbRn6Z@\3n`,IGGaH@>%M6MD&Wf(%o+;e9\"R\ctA,U83H=+kf_Q E^6lO9?i?lAgbrGPN\WS42Cc)eecgPVQu*-fZ!(p=Fp07)&s2M'VmH\o(,kGp-0>N @^#,l;$&c2I'EZ.$NU0)/`\)>Fuk'_m+LB2JU!;"C7ScXZ!:+J+@%r1$"%(\iLE]83kC!#gL* 6/^MFTof1T!#N@j2da.?#0^Kh?I7ZDd@9%q=CE<2r;1.u"OP43;?1fu"Sf0.n,+$9 q&sbdS`e)/3.)g"DC_A=$Qs*P5c9uXj!d:WDNbn);jSQS!<68B-"h=-0t[OS%g`:q !Zi9crulXS;s;fa+^;b^H_7,bpXq?8r\ta]BaF^q\^#Zr=SU$Kq49Zp:*2X*+2T?+ o+-PL^d#6p4t$)2;b(b>A!`G=F#&&Km#9R+r85?@+5kuqlG#@+6-"OnWKceM^"?16 hbYk/QH`["/`)S=\YE'1VjVa;T(12OpLhdJmoaqVG0.3g)>DDoa4,cZI,(knntB(/ JU,hT+aRI.)kY]\lQ1U*E"HFjJsZog7Y6Gm(d^J!c9il+5cVmr3a5N.7N@8M6CKn9 *H&rA]#*?H>5cW,mADPGMb9i?NH1XP+0X`fajR,_n:YcE pqtHud?)JjJQ$S4;fY_[;UIX:+g$@!N=Y5I#e^s][67oA#We!fps,jl:W`o:b(Yet ":n-/:FaE1BVir:ASbOO*&?ihltb0p?E@k-Ds>$l1T#-Q; B6:M\F3*Q*@J=-?No#+YhZkdh"ea'Eh$2.+s5/OSh$-Wh&".b\N4sQ"2[up@HAC\9 S^5M3Ds#>hp==`]MDotK0a9]5RQ0o/3,p$'EZO$"%Ue"5lp4.B0\X"h?0cV%Kr-lb q?b%)!L&ZVrTA%/3=T`Fe]N`A>1KPD)UFjpdsI%GpR;n>=VZ$^k-pc?[[?6d=lqT2 kIrgqC,!qL0[6OT8[$,sX#l+(;gk+PoTg+!aO?Pb@,OqW;Pt QKprP0m_Q-cQ+,B%M;;[82"S32=mWT-/4/s$9H]37s/:s6m2^6DB*Uc5^`?f@WPq^ ]Dq)65hBF`!QY=#\c!B=;=a<_`aK%F?"^le3"Bf0]B;1K;bdd#Nm0BH%_gY0**\/r Y<,<%]q!4t?sSc6Hh9 .:BlpQ5mt>>M_\JSm\K^2H@!%.l(q*3VKIX\sa!obDiXc_:EX>X+M"o1=TTs)GU]8 2I2kJ=(TgFkqkhXn?2okVi`h'aiY<\P+B"D[?V`g>T-#7PU9O)gC\"q2DTB31m992 @E>)Wi1fT+Wl"@.o(JCD%o<]Ae;s5[cLAg)L-'QK7LTGbTCAtTpHWWuDR"Pt=bCB8 5j-uWSUW>e@j%:r[Q/b<,:Rliisrp.I!O]]5OIJrrZeTq9UH3Xo1(iNr("dhqT`CB /R@i]^>&n3"D#N,!e6dCkrXZ;+(0NoY]or(Q BGHp75%O&]Loh2]lX*(tIhT6].=;eG1`Em@T*VcFla6_=n$DZ6GNBKVjdkSO20\?> ET4uPnrbkM65r+o+5F?m40\*6[dUu(%:)ke0)0jGmMV44oSHf;k`suN-$eF#fR7Se \qb&d8&OZB5k)Ob;SK82[]NZ;+d]qjo6a7eF]YF';!lfD5Q1Ei,S,LgCbs0NY6]h>2NUXju 0/98mKe+!&qX]U,Dhb>th*moL,>HJIOjT(ZOd->c..k>HYZ@ZkIYIlD;5s0)"oDAR lDH9V+/XrI6pDXs'!@lP8*(Zh1dh/P:=?Y=dM#e\/(rrbg0\LI7DX*=Wj0 _:8j\cfkR+.Y\Ci#0k9./Bc$a4H>emLmWT)1A*&'=t4bt5(6NrF[A!381J@>d_B#9 X&Zs3)0'C+E#Ou3SlQ/d;"PinnJRVaR8jZf;iHI4@9iNJP[a38>0a^.nN-*g-LTEm @J.?Sh18/r^1#i[8]/)=qmCS@27_nuVWWWfF[YX[[d-%goNs\?gj"d/YToq3!iGF= Ao7[Ic@&0c"/g$gVXHi`mmH8UKBKB>BQ-V?CRMV.$["K1I0E"QTp8(MQEAtJ!i!L=eD(1(GcStb?g &'`o59g&X'>nN:9LZAS0::;@M>U-mf0<*D[A&tr`b3J'siROH@m/m+.$Dha[TlljP [DV?#434](G$2Ki1]k>kqZ)!Lrq@C&ciUNMjH%2eq=*S>_@".T#6Fj+plic7WNBP2 C\7%#%Q_mU_n1-GVeat`Do6@$_e!qXgUlh+Zfogllql0SW9X,Wl1D1%MrWs?467bL jX3(Z$Tile"pFPn)(Z>RF:a3*dS.^-.j+YmQ=`4pMS=X[#QK;Q]?sTm=9-rJd?0Bb !).2(^ZN;5nc.*g/Ff $k^2]':>uhcIR.$BY1N,?!/'_r1+\YC^3ZM>oht?"%<7-IOa&n8DVQpd?^_E6Vnn- aB=s(>F7raR7RuBUi#U!'Ts0TaH;h7Leq?DF:ehuNYA Yh#I/*4/Gq5'QM;Fl^`mhCjkZYt>N"J;nY@qXfY!1fl2-I`+D (.8!8'DDOkOP_#7V-C^rp\q3q0aFiD"JBo/^`XV-CP,laYGmI*.j_lF(uT)(G"pp%8Knnn\)[48,]iE`SqF [nP%':XdAoH-AaRl%g/i&Y^M%F@-5G\&-p+8KK7bn'\ps0?D8rA\6:%iOqaY`Z#t=/']d/GF)K])T0SZl:CF 7M86)8%,$&rd38[pBs$3?8_b<+\jglm,\>M+Z99+[AYOnW:@n/ZVnUYMD6%WnLH@j (8N-e,pVR6&f-]eB,.abPZ)3p'8ND/HGodZ*r1#:HSl,8RfsZMU?m>#QO-fe#q=`@ K\r.fi98)J8^Y%naj_X$S2njB2>sNqPIb8q7W]WJIN>4i=6:NiB'iY8S_&OdCN:N, ^mT&c)5[(Zg4/PCJ&^_7G8du1)7XW-](-oUi/Jb(%39a**V2`qrPpRCVJa95DSm9o 6g)bt!VeI;5#X^q&3BF"C\#nd)P)TC4nYXs34bUG4UF1@7+9I4cPaehO17Pjj%\sW Ja:[s90YIgOk%1_BO7>iTLU*oQ+b0@9q#cj=t'pG:TG2h.ck,Te=JS`B/LXi2OQ\r -,&NM.ISMt_qIg9WAdMS_khrkR`3$"J,7kEZ._1:cM6WSrO/!-*NQ+O!*X0AS(Ll%V"WOnOcRu!KEYc3tF-1<#)(Vp>"jJTkb @bH9HQ08F3\1YJX"3/:n()>P([ln+<4#^qS8O<]])HpMVh` _#fX%`_a4*+1mS"r/\5rh/_iari`(QLjLh,&^41B=/hb[?(9W`2=I-EJDPGKThV`\ "/#B0cg`U5i>o\l7G#fs:Aq,8j+)W-nPf2AVlka">`)FLMUEL?oc/-@-F5Ca"Y.Z< `4ul,0?\AccfUO(Z:_IU-/#3srae)pbQ@c)&bt\g^B\&th*K#>VX.cqLnt)&Ook-F 5u=4Wb1iE/rm_c<\lp#q=;XW!j.rer1*F6DS<]\I'i#6W+DYO6@r3hg+Y(n,<7'R\ !N!I78'TL[*TY&aE.\jTV<5]qF(D4i*)p&NC(.*LSY?J-5L!4D,(G-X[C%IiO&n(q QSUOc1,4qI23p-ZPI@c]+lHqZ]`+o]NjJ.L:bqt.TS9'6\lRsu4k ^%ASsd'Mi\KC8F(?2iW+"q0Pok5=NFoB/=/&FBSb%p\%bHO@C_L!A8(]GTRfD'biX JF=J(FqgG2bAZ,(7Hc9"6i5MJ0mZ>4!50h/jYMZeBae7Wo3XQMR(DG)"/95cDsYak ]2%5S:h$1/I(X*q+d!:>JaD;ED##[j/7\X,m*3c=te-\l%tmX>T% rl!F?iB*Yu\%W4+"JH-Rhs*;[nji^;&3PFL=GQQbhWfHKKaXf8,CV/%;jYTNV_P8/ dKsP#9E?o#&)+jl[m*2;PbubUt\kY9jd8Q%,1_&G5nI(cI\mFq'oiB%l>28 XkRBS,Kg",Wppacn["D)f&a2]]jSiRCS\d`)Z k&1C?HGu@A2hcZ-Y6(RE$b-J0^@\&/n=)Q7)8GY^^YqoDqbBNH!:(ZJJ+UJ6\c;#Q n*Id7e?8Q,J`k[PES0c-LWsd#p)$5rF?0#G%UeC?D`P2,fY3n(ekY74&"C;sd!jiQ O\r%S$s__e@VhH[e8*=I2hpS!q##SrQ\3N6m5?98jJ$fi=VnWEg%'D-TqK<7T[#Cm NEJ`GT=R*n$]#gMW62A6C`XWgY0I=gi2(U36&H 9(sEJ"qK;LLA27RA!bl_!A;/.fln=kEur5ra6l!^`eRS-S-MgJIg%mVIX%(2^V]>? jn*DohC_amcnT'iSi+O']&O(3J),$j2.1eXG\fB^Hp):d1N[ZnIpgs3D99>f3\e&e M-$"[/l$I98n43`H^&)e(Zd^>j\bX@m0iLKJG8VN=&CVb)DP$I20*%14Ze/E@t ^-!3DE=+J;3&p^Om,r(V<2o5s1l`qN"g\21lK;FQr`L?I-;i1,8qC_#B4ijkjV0*K D^ku-?th#`0U*e#a]f_,'+O"d59%e./JY30AZ!/0'+M)8\?WGh*&YC!:jG*:](7M( b>JQQi:C=;$id1a.MS&//Q%'i<$;g;/M.]29V`+,*uc%Z1,b@R23G8QON(MHO@V/# G-Ws)1u1Hdc'%1/'g,a_4M;GVGfp"J[BMoUcnNFp#fZF$Mnt4V]o[e.YIQgjR3RcL A*9OQQ_AQBSo&d,L3N8T07R2UgV2uH0-DqMG]Ad/!c3oT!$6]O!9S_o.J0J4-YVC_ %'BN>U9k/%6OnA#2??K@a/nm9Muh/-2P'noLu-Ob5Mlb)QNd9WdLYo#=oMjW"n2m* *[#\%ddS?LfYoMtHjF#m%mn0YZm2sH&pgRAJ#*rfq%UC0.:rt$&Jhj.l0H8T&ATA= i9T%/:XOOX6T75_D;>H#@lKb5Dh)@!.h-n45`7l$^5I3J"VJ>._XONp$r:JiWY%Q 'p[3!NQNKZRM/r^WBR>'rAU&iDm)hR08pj1FfY6o?\/baoQnHNh_nX;XqUj'[H]E6:#6[)N3aSuRjmG^5RPGl%3PN`Sk^Y1UI893+&OOT oNhh:\u"0ueDo.;d[0(EQY"XTQ#jB6T5Q,jc:Z(%8gg\iB.PKC/h1JWX(fN:Mf"AlkMDJNp=Q*&;43% \_#K5fBAXs`2WLL3P[je)O94@"`K!"&VA)R$B+sjrQqYICbcT+iC$>0T68GK54TQF G8Z)/s28seFQbWAm1eo+]!p?ukkGm=gFB%2agPW8:d&\rfk4:6VOIa(e4p/`.$9M1 I2#L++'te/=KRqF@%>ndT%cshl*Dr`AQB>j?\/Hg'D&iW7:6/3s&uc$(Bt0`.KPYE :4<_Q^jf]G$LlqCgtG,S!#>S4G7h7B$qfgfoAGJ@s&E+gL?$&r]7#[d`pYS:[n?*pAbE5epTJiOD$Ne:#ELMC N%OjdY5"'[q@9TOFg$(72C(Je8d^$0`\#AEU-X7*7sU+rnT/SV5,4ddTfA)>&cRjh G:ptuQK3)d5M6!OJH^G[IpP/Dq!ZI,ojXl04"1&M$@pqA:+N PQOX;`KY@_P'?"[H[*^0n.bhH)F4BB_;TDHO`D=*Q@i&fgVH6=*n.b!h&-K0_3EPR X^L-2J3:E::[:JgpO8 pd=P3[T7IAjM,@(bADh=?W?O,!9D14pnB]j"6Rr]+CH7>9g70_!Z'bHkL+;J532=c ?q_Xe2W'4kh=-L%?hl?_k<-RZd&,1[&E3(e=,+I^gAab8&Zf=cm!XcK#Pb&U`K=AK Tkj/Lh?GRL\"EJhgY(4u!H8V>/?E7l(^_PTkY2*H\MMioF"XI#kK,5uoZ65Xho1WW kU!Og\='Se+!/X?04[g3*q^D!T])2Kc(P[9nKNeLO\N.lXkC*u`Y$ Rl"K@[9f=[?^`fX(cIoChAkk5Sf-+O)q:MFefJU.TBXjqBY?ke5ca08kN.h'eWk:U 'tO=lVXBmVIn?Wo2_:@oN9V0eFpO<.Aa!uo%b22V*!+NIa2TQcL0bC$S.I+r,3=L! \dM(7b:4====77pHDi"/48Bl&"Sn,TX09`mkQa3Z[GGJ&"Z^US!B&,Oc*F?aI38?OO%64/_n^U gsU\cD,@]Y>^p//HskWZh9J20[N5u`N_$8gp>'A?rX6d*41E?+hD=VGZa\f?f3[M8 )oUbac3"WJ+*.5gS-RG65.ol8G2tf4lAN4Rg.0>)'%?mBlE,^!g9NT^[$WFWQJ#_@ @5=$%Q""?k/6QMHR6d,bMj]u2WT4adAqirYe^[r2'g49-s)cRT9Z0W;=Z_\Jhs6,riKl(?../Jn\98j 5tBO`(ZDF^TMFjK&/A\Qd0:="e6R,?Tc:$WJk158oZhR"mI@umh0oera3R!CW4_:m I,-jHP$&^eZ?c9m]::sSjW4>[4e\2HU99G&g]E$1+>8P`oJF5N`gP6nfArHsoOO/q 7&(j3TS]NX>iRN08N9q@#_3;uJ73\gTmqf,i%Hbo&fLp!)OqN^3Lu'!cd<+N15`%d -T0TJDn9ODnLO&geM%b\AM3=%=;BlulVS\nfNs@NG:=1Dd\rH?_;U'%3k7hShW:Em ^q8A>[*Hi5!saKq#Z;h-Jj(Y-p<15TafuGo<'u-Y?n#0\O^FOTjM_Ih.YkS DdWYB0=B.L2/)s;"oaJV.6e%RlH"MSJ):W16PYbi^]O96BAO.,5cXlL/0N^SblWS[ rj2Y:n3?i0%4LMC*T#[.qMYM)lDt)6)/'g&k"(;OTuFXJ8FD"S52AlUoEL.ShEn(M ]EAUM;;K%iBTN9,h+.Yb6C^\8XD9BD8QYEG&/sgN*,P*4DgV?Q;'8)*^ki_:VuPh- BW+pAeC!Is.uaKb.e)>]caOZ:fo)%V;H#\VZ>?jfX_ZA`HST?4aho%r*'0UJ0tBlE J9YBdlToSU\nt8.$[T'_5cKB##l[tNaJ8WsnH8'p!G-Y>3k>FkVkE?!HfbJJFnjX& c0d?a[qV%1e-Q\0?9EV%4XQU%KM4[#*_,g1N$!NO#JrJQG67Xt!.b<(&R`KLO^\*R K8P'5B1oKiU:6O'Ck!>2h&+0$!/g%L2<_:>!X1%k.TCdJeU4RU#5H(9]\n4P&hPa" l(\&^Tp]56I1\I.oXPqK[cWuql@ZL$S6cH;80E=UnN8QColW$LE]n<"(m@SWNE;&N^E;O'ggY8*U?g0qm 1'VnhDCsS-:R\*gl]Xj3j&^%#ZduuZ/+,QakXu]j`PsNe33u#C6`.\V9UoI@SnGTj HRqoFnd$iJLHC2Go#DXX\2ZkG&_mrLrpT6gJ+%HD2]3($j6jqIL4m(O Fnu!FnWWu_0&ZJ!kJKA.IiUP`h-s=OL3jtY?0m/QRc:7M\4eDXWt2Ad%X//=)c&U@ .C!!rYV%cMh*:!TN">/9jaY2#m@N2)41LJMoE3g,!kQT#g@QS]i*u-<#7S/iT:4]1 lGX07E5jKK;NET8DkkgY>2iX7F)B_)]s?nO]'afl`O8h8g8sq\+n`JtEPDW/+Rs,O G,\hjWgU(DR^OddZcj:FbNpqp4[1,-1eJguaI]jo?39/;`5/j,h;bfjo?)g^Fd_-( jmi6='DL$i*cD7jDZr@XlXg^.$eiYqm)8Vb`XhEuLA.[B0,W_fGVefA$QgK^8=VnP :$g:upD@E;lj9c+7nk)Zk"b:6VtPgCH_Tc\V!7j=fn5ML&/saZL%ZX5@#Q*[`o*o2 @SFFB:;5f7]FiA?hBjj_FoYhK7W9K;h<3,NJZ\j;'cBq+L:)t;#aN43Pe*ag$;uqT oNW%'F=-)B>hJF`s43m-(]+%J4$@>N30iC//nd.=D6c]L1f&\Pi/2%4IG`2FVpDdJ f0^b/Mnd[ZF1F*(j\]"U(&t!8%q1b].E*i!aUBgZM%l>1"91ANTe)rM&B=pV5qKo= VEk4&+HU4Q^c)T'$#ul^qYnT_rb6[EH,`_C(8OD]mT#U\-[qoM!i,`rVM":fLUYB7 H8P.ZR^`rH_CuUB<(.YSON+aH1L!Op-IaAh;T#*]j@uZ55Ee57"*geW9`Y!SbScM2 4f@Dd_HU4;n?-/89/*rB4M@/oTZLHdk,t_*(??>HMY,;Yb5:R;20Z+?2hCQPN$#EF @U;L&>!$W$-8np;5VN0G&5c\T(>t-S !'AI4b5uAPTDO3\Iol]Z*C/3^'G:EHI`trA;"PVe&A/_k@NQ][5`U#b-b++DmQA'B K`0"D+-;N_?36uO=9+iQ_4l;'+U'"#Obp6Z"D=rh\7eC6i'03F0egQFCnT&+ZUZ/B 3-iplFQTYnJA:2qjF:FO;'O\J6F5i/m=>4n,!0e->?\%.C:6KASonW@l$K/[3FTO) 0EJps<:CbiW_>[-AloQH#l?L3L2Ol$/@JV$f*>Bad3Gf$&`'4>ma]>NDoM?aU3\Y9 ]c^l[Y:?tVRkTYH&H95j`"DVFis3tW0r/5o5s^D=O[i'gW60qGYGMbIE@1AmB-@EY k$tFlO9L$Qftd5/:]@UqrAI^e`."%)qiIkoFp,J.'a9$.=6OgVU&,r'Pe_Z'X&HG9 &cTBDq:g;Ma(!Scb,ru)S*u6"E!LYSYo93%>97n=s.V"]rE=a"!UpT'R.jah2sKX` iajYi5Y6_:#r7*nC!ofA)kSos?diRndP_+)?^'*VLt4`rQ9R(dhN0)XUBbreHFJO! .o&8._Pg6oKP4;(ilQr46flEJmFdNUi1?:o",ERu015VDKak[(+*nSYpbJLTs&@%q a_.:Fj6_X$Sbo>=&!"%>pcUe4Bm\h9m+'5'pHear6@*!nFmk#IHP+g(M;7hAp=O#p o*t0N)705IUSJ3E`f_chbp$^s:H3$TfPSaCCiHZ[B9e%Sben_WRRCDcN5'!AInBYC a3^8iCkXgU3HO9FEL]m^*\Knm7l8Yh);?OsE)Z!%s7ps,f13k)]^P##h$_.a,iH%h (1/0;I^s+)gMHfIL@$(2rd,)lD>q&J5gob6UT,V^^$2o:-Ko`FD7p[e=+jL1>/%`0 o!7N('fTA4cKq]Jcsm1UF(7f]0!59mrVT4)o-7]2\F=A\65pDa%i>/^+JR%9r\6&' fo`cVF3^Sh=RKIo3S(Fs;RKn:Z/O9HIH&84mrc2,KltF*M=VIMqt1Em"1.]' '0GQ;I@YOA'0G!SD8F/NBPL=*Z^W]Xf>CS/C/LDGTjS5P+>HC[BFkf;*72b#R1l5V `]/@.IJ2_CG7#nZ`P5UW'#[6.Ig8N^7$[@_"Zt'bL6^7P1dcjA8NIV2mR,J5f@eM4 UM!bWHlCaflQ3R$?+%sq0G2q%o.,l@lAUE5Cbo:doC)I?4nc'p$Yt!EDg2gngN"X= e]RRD1UIol^*30[ncL5Baa!_.]s@sFG\FI$Qa7\G67ADj(l(m8eU ?"$0:ZKL'6aR))eh06/Epgi],i;N>IkGWf0r#f_l7iV[o5ScVU<)G!,&/0(r\,!@W _?JlD#5B*Z=@F*8b;sL.rAa5dHHWcQE W6UgYj@r@6GBB00hlfcWra39&K>8PU^6*]SR?"S'-4\&qlcmr1Alq6#?%?BefYYX !;-Nl1D.F\+,fY2?3][)"cIJq`&]W0DA`;*9Fm*^8Shorm1FF"pQ(W%^l]PZ])b*a2B%t aaZ4tJ]G57#d':Y/nq;VWEChk3VFc`a0$`YLIB`p"ar/WY_G'3+V"M52fsg=aE=F_ `:lXC&(cf.*dA&:J!:P`%k-s2MT@D]<4=X\q*oYa"koo,/muNjE6"^*!)3( ?,$XKg*r>c!retk;TrfpAag_FI:q2V7m2Z+=3r*GBWY_=6e^8W9Q]\bk[Un$Mu5g2 QJPH9?Gm:_9n%8;419d5D4Z$YmJh8enC^Q%qbB].B&Ia?^5O'.&3ouI0`I4=T"$Om=Zg>[1M`49A&);(&M9J_bSXlN)Q*1p19Tr6Xi/oB i&iWZKO$M]5Bdl;qPJ?UNQF#$N5OTuoaCopc,*2WK5nD?4^=?q0$_BZ#)A\lMH/72 GLH+i[LedYa)?7_g*jJmdNe5L>CX.o^J]T/IGOXI)^2:pRCAa,[G'Z<3>VXCM=GN] ]`3&5Z(0cn_$0T/IdhiZVu<)Qn:.g'DVJCO4*"rg8i1:M19-s)F@7s%_!K[2l,JF# *Pls`7Ve?K#@>OOe:mY5(NNb_uV[FJ15Em]0^SM=`LN3i`6R*!;taE]qKJY [,uU!l>dbbbkAOJg2OfcJUQ(^8`JF/i-Z$*p17Sg@9_H(RaZ&B2/HSYBiDb,Edkph P2[=o^K'9=EQ.[EBNp_.U5j,9SgNNZIV%p3D`N9^QdG0k")54$7$VLSB&" PIA#cOD\`7a9X&Ec?8.rZpd5gIp4A]#nk:7C"h:Eo K_TI*$3F.6)?qul!n\iN/E='QUU+4#1BPHMhu`.4U%p&13]lI5pWWN+"ckgh]6rna rN@f,5MV'.=3#L%Y7^F8NTleK%W92q.7dt$.C!(-"CPS.)Za@_TOEj/=ecq;M%/=C >dtp>cR:b_)U?t^B10q8:^X+biYbJAU,Hq(.rT;QDg&"V]=7R`KBheBc0WUiaB+fZ &H(F%A0MCp@KHM426]r?:F!EXJT//^J%k>h`6?OYSg^"%LfQbI#=SiB:bF]PX F#NM97/d2dJ3^0.@&r3^bOBJO.(g;a5Fu6lr27s`==bg@hZ:^r@`Pi4pP^YabT++O />&7#q!O)uL"'c$]E'm&E/QTP/,1(hk$r$f@f4jAQ?lCi+;1JjK37Fe'tsqJ%k\uc GeP'I#?&V9J.$lhJAf*74=O\< hXR k.Zup4qm,9`D1ljeI@DUeXk6WJRhX'aA?;/0X]]6fRUq'ebaB9nfbFs" nSdCg>&hU;Ch%d^q7ZLD,;,B_m]#$.`"YQh3Xusa_aPI,LZ38@4_'5/!Q3-C@\cfI a&Vq;":H(&ArZ2^a!%A5ArVEf B^$`[g9=a.bRPa'fOU%O#;""HrP3o)Q=BKMV7?5eaG3^QpH_II7uR0>F-1[_#_iF7 pRZ,Gl;McE[A;Jbc\20l@O^B);4CAg I<_;AZS%c7--j[.isOAAMD_3gNN**p^jg4`dUq'n2LSVi1-M5bet(\"r4gt0]$NdV fM'$17(^j^\:1#um6'E$!t02gO)k]L3sCDo"btb+#9Q)L@,W28M8;D%bT\UTngFH/'O0K[SaFAS3sgTN.EV9$ kq8Bl?rMXUE#;P&%F9b1+2Gdcs]8T=g0!*h(LFiXI1T.K&"&Q?X RKpN$?Np#8eHO^"$^A5!?O>]iRiEm:J!':(lLq"J>dF1%F:40?@#((5aU^N6aa^f, j'O;1^a\3JYB-PDEn5`as-.6&cXKHHej1!e-2Vb5_<63qF:J]XZ,e#9N,Q\(h^`l3 b.%CS^@Q,kqH`COgZ2qmf2VRX`)Y;$PW!SR(uL/gfEq".N#Xqg+*\[[#NXL,IC^0G E>[C//q3-hH0Qo&&Wr]spl2`SKsL3)0T5]J5Q)pLoL8!%@;u7id)"Oc!(BTG#j_(TrT0mU\iD8JJbgg9VP0.'-6L5Riq *5RbW3"F4X$$S41c_eLr-LHV/1/:%?LD/Zd=XLXP@pFYq_g)dY+i1FuoPsmaV>1)I aEl6+.($sQ,s$Wq"rcYDj#.5gG:ss5o#1-LbV?h;U##7FGj9#;V',GtK"M]!Lp<_^ A]qHk,N:Seg_Hm,OsPS=]-3NM:0h&1X'E%oVt%:&jk$O&^9lkS./16Ep:1MGT_,rFo=h6o ]t**M?#fd#+FVr7b.QKJAZsZRO3;UIocobK]gfP"k!bKb(%[IKPfKuANdS8OoMB\i (-K5CpdFHJ7"4,ZR^G6K89)'I<lNg>8Oe2*I;eVs2o"?lZD3iam^64Vjf_BSq#g*ID`2N JjX.H"[CV#S7=t21T.,)&4F+N+8F/@$AZ]0?ks(.RmmZ7U-LiI#S(#S%f7EuE0a'4 h(T,Q1(%J/q*Q?fBG/D<59nYg8CnBt1QEq@9;o=.>]r]Ojd"]j;:b,]%\7eTIRb%L <0>P&4$F'I&SsjZUPT/kY`^gEOqU>C[&G).Y`.)D9^5hkN%ArqfD$#"_76!k,\QhM 35]e)W16)K(,(8IYe_4s8AE]C?[og;ZaH4Ogd8Nt7(V)C]iIq>MK\dC0%Da12:-pS 5^qOL!,>.iq'Z)kr(T%0o'>5k<0#I5(6?;HYp@&_-n^kLOj3F;A@\Nm>Z0h3a])mb eO`;Tifd3r*`bDEM%Sc9`nM.NCdGl4\3N+uIsccpr)pWR$Etn23)UrjBecbAJfBaX _8!IHj.4Ee8`f`DEICc187J0OOQW%QoapUT\/[F;c]cUB(-lH@+q('T&1Po0"F#6` 9/tcO38>i'`6(hBGs4$_4Ze-Kjj!q6I=jDMj\A>PW%Wpb2Mdg0`cW^CHJor=)Y$KB eZ"LRY))G/L:;(h4Hi3V9(AGkdEe*J]pjZU8<%iX@p>1+X:Rok*_&6*=]=8F\c^i& Y_l9(JRB(?s.d56(\"3%]@kWaffqO.6%o7BFnh*5.oq,%fE;5j1!%64j8YH$c*rR) d+<:ig]u-"7\I^KnjbJu]'0*>M&)R!qHBm"I0TZerTGI8hs4k9g5?B]91V5:cnR9E ,CRYdpmSGGdErC!.T5ad%i0`@"co8u!?Jg]Hp:VDT+h[^a[$g`9Z2Z+%L nNL^ID8b)MOJ*K,K:i_eK5VqfM0urWU@og3*@EL<=d4K.O]6)FLGLABdfTQ7; (L(Ql/-T[MN3gaHfbWN$b&LaS$r8e?]UFk*-YKcB'c)g,aB3;V\%f l7qAl)=sHZaH(;F:\5E([es?o4q/G`%2-;E$MR#Tk689F7>4qR,Q\p& (M"RgjIXuMU9I.geE8.]o?q,-f8naPpt]'C\[pdC&VP0*Mpd'7"9(.HH'9rc(8.PuD__P?R['#,98W%.HM7o!pcp[MPL(kBAObNpoP \)CPQH5*.r82oIP%;c*:>YjPd/O_gm&&1%DHtsqi)PdA^@CO6DDi=g)mJ"BBIC?[J T]LGqbFR[)%1^M!k0,Ye/2/1(%p*&t+3?;F#P'727tIn2Quj!-i@La#XspXYbRnqI `Q/3B`dqC4!.dFd5gMYd0-E\J.*"<[e1.W@J^WhFHIFb;O\b4L5k?3!mTOG]7a*Z" CmR1(23ChVp7P=$pd&V!^GLCQ,67keThYBnN'=[<*Eo6L02R!skrhZ4J<\ca@Z>'2 ;bGo:Jhncac,ePdC>S;FnVtiBWZ+st$]XeE(@m/kC23nTpto7N^/@b?:lg.a;GXr% #GPJ)A&8u1EfU&Rlu/mlfP`=!CFhba^76j6D(LW_-pZr[f&t$5$bZ'*SiL'M/@K=T b;kRHPX9F`U,aTa*A@k/-TEmA*,0X&8u*IF/0MkC:%\X@*"r2:IjiZp']MN?FJ6ad Z&.mrRO@ShQ/_u-#Gq%i;Ybd@!hX#;[tsK!jEW$A4nsDK0&Ma&GRFSpRR4>Jr"h>4Kl1@A ,+)k`RU]*ICJL0s?D2R_WI%XZhouSp5Z6E#Vdl8\U#8U\cj"'_&NO?'6:1U:`chOJ -)#2A+`492O-]_dX9:]?M!P+?=HDlTNUDlToOu>k=Da+b2R^SlfORaUBqqUsOD#5A m"=RQKa[Bj?a,>i7]3A]BpKb'X";ANN)`+t?m!7+!'AOHi;YQ.$@5pPpfOEh:o=%l ^'TmV(`oK"5l.HJ"n5#6+A`kfq9N^rb6oG[s&Pr8c@YjuWW@MOCWK#Z,MqV,I\%[W djEcV:l%=+>M7RL'g$oEg]bO75NU#EVP+&j#l?i`TfN/)nABLZ!FbO6 H0,hB2>2;14+X=O3rsU+6"M4XlFP%\"[k@@D;iD $V,*Si>[g\f,L6^4`[8,GOi%gn-rXDI9a]8rTL9d_,WJX4If!W^4*Ma!>gM9ic%ke 1!:-[OVDmperbO$-K4U'oIMcj%+:,T!ZWg5LHBG@2._r`ANAHqAPJX."8mq6'1Yd9_^Cs+?=!/:?1kq=jO#_k=4:q_#b&!#=`S@V S\2WVgpS6Q^)PM*+4dh=d^^CjCb)_1pob$<;[0\0,Y FIP4p`>utHKY>=o_ka76d3Q:0"sFg`ZMLt.,bR:+)lq)o+F'lZoPMt\2e`@$6J"\3 ]/95\,l5Vl`1poAUF#i5KuaKTiO:Q@O+gholX8WcY^knfc0bN'G>FI4\>0oX;ZZk_ I\'sb=9.?nE>XLML;YkWjdLj1FeRGl*2?=o]W6A``b8X[="K"?MiC&K7_sJI^dQ(* TqQt!Tmqqk:o8MOW?nCXP$2eK]B5R8FfKUI(_VC(P,O0,kbf@sTP(Qt/k(0&/7EK\ ^4._P!*_D;+:bN9#+(.-#kVr[#EVC&LU>8S202g??;U/-'S9IVihSVLEhKMmBmIPf )Lb<]XgskNgkb[n,5BcP+NSK#UGUMbS*L?Y[c\Xt67o+G();"%76XG2#seKEdTFll U?MG?@"*3G*ZhOmT+cW*/#kK@?RYOr8G(+BGi\GNEk&9?*+s5AA;5.\ 6q=H]7]Z\Dg5_'"-&">l6QHFu8Amb`63+S0K,lCL/p+`F45PT_7]$)5Cu:lS#GiaC Jl35pP6>2`M&rBZO2OG1&5N9Ai5Xce0fUfD!`Xnq!l[$Wj;a`K&/f7&&Tooe*6n;4 7p:U:=^[AA>f'>Dr^deC.`7RtZDT#&o0i#g,**/;F&';6?D^Y=N^ljjA]M)JIc@l;]@u#><_PVX`)1,aNOT0HS $sU;k=/("FU;3XSYj!9\5K<`lQ!4gtlf*D=(SqN_GQ;aeFA0@8r3&nAZHr>e&A\<5 hSuGp3F"c_-m/om?G?*1G((l+*s(N!M'1V/_/T@?Z12"V[M<;s+("OT%TqqFJ3sN% if$`%-TP)nrEGk(rJi>lVBdKHc\ 0T.m[;kM2'he5Yb3WQ;`V?#5WEKacST[0Ej?TF&Ebgl]fE9gHfgABCMhf9H]b>E`M c>9)c^ZO%U@9^3iZs%'I-+C(Dg/LToMSKVNCh`s//'aD)(+HpDS5Cg,MG)']:#Z#t 6CDWNZ;&Vt;<"CVE6NjiCQdIi+a@VD5CR<:]>UrO>UtKH;rGYa&&EmGIeHH]g1&iD> !jk`E_^9tYLa+;O+HE,!S33_sp$3t)LUT;(O9f7es1'tIuqIu5KtT=dhn]i&mK6>CUOo5G0T84<](q;@5doG Eqo$en9`=jO&kc;bP5_.pl:WlY'#-DE`i3ZA;;G5B.Y0q*=86u')M_/9)>oZ1:^!t Q#K2<_L^7ucF*<V8PXnuTb_U9# ,e+6'?:bPIN;r-iT+$9(-sc&'0(_jQH6nJ7*o\FUU!O7e(V92Nh7s*E>Z\-0)U!t. GE&L[`=VEHibe4jee%FCi%62Ck#$A]kZA4Kr8S)a7'\\(D?KB@E?46e>CjjIHSLF[lqS&WL+1U6gjXgVL3YtY,17/=Pj"\&K9cu`*`)ABpdpY*kb!C)[W59o\ G6V3]'^[5BOhB[,]MD^ZS%&U^7k9"XKicJYcth51#NcZ_"`\9)B&kghq@dB'1NOH+ NO+AX?O)#AY'o<2!rq.3(Z/.,h@O=,6P_qUqoW1>K`g"Z"EFXH0.7[X>N3kRo%Zb# !keE$^%V3]NIPQ>s&ll)H]I)Y]&`U5q-S/Q?Ni7Vdl5mKRj>H*'__2l]3:Ku3T0qk dB[>i&rCb=e@n[e?aFEE1hN%1@4>N+.Tio*?F2=l[]Y_EQS"S;cC'L?/2NSce!@(- -BG$"\Yh%VkOlE+DAu&/1T(YMZU`6lh<&^gSW4^:(ge26rF(]=[AulBHMNatMBIiT:6$V!fB]jQ[1Mu>3D0RGtIl"ZK1N!1Di$Eg:%;Q`^O:H*l ar3RuM(mZjrE;O[.\Tp2*n\m-#hTg8@f(b$Ki8QACY=>TB"rrG/LPaZ&3JJWSk05/ $JcVOQ3m(u^R?sWjUIq?=;-It8Y`nc1GA?dhA!*+/mN[a\%%tmUDAok&kD#Q!@b?V c5_pDHIfn?O<&G[f>6U1fTf*"G=K@P0Lkl9Hu?QUC0a..SZloeq2Z% R@V'',QKH5o&tZ;F49\6:i&f9uA3uoQ4Le#MPHcJ]XRRV! ciU+X3ViJKf&QT(>B<68&$&THed*n#@lBmU2qBdRCM;o3Q^WTIlF;R`6 -ecNOCh",pU>q9nA$)J7bctlS\-*0@kpVC7PYS]"ZgE$#-^Mh#8`Z;-qED_>pPKeg#%J%@u1?7#@7Ri;QaFDr34GHcYa`;4SM[gF]We$>FI9cDd6:*&=sJH`[e;HE a/UbbrfsX5s3FT8p\Cbr#L3/_a8kcQ8qHo_cP>.EV-##k)LngEr_g95K0^%>u(Z0;"hQdo'1ZmOjB3nN6?]f!:"b%-,6&>=< l1`,UT3'r8_#HQ=knRe'20fZ70(>F(jopJIUOgV@P`T!i0r]4,,0B3DT\Zsqjb1ZO(A1GI=Fso420%?dWE?cN`BfGa=/Yu2A9Uk]p$'?rt-Yc%Pd`cO!*no?pdPK4h 3S*Hj?H+"tB,K-68&(rVHB^$A(G.T\c.`*BR!I85 M0R*>e76^=_^2\U&UR2SrFUX9ldU(GMX?W%Q/4GF:+a82\168dCV?oh*kS-8]Y*4N ,58[I4P$MpIT:j0FlPljiq2o7cusq(>^%AQ<.U)gcJF`i4AZ/E>X*XL_5DFoY--Z^ CX$5950.$`adh*ZRF-hg [Z[Ogr6Yu)^cJl9NSM'>H+lc5!8t$mT;,)2fdC;%Y#Dr58KApu$S5[0m.O96[@s8E h>l&%]#4RG4hpQ.7rFUr+i>ipbq)?I!o[Mf5P^@s@h=TUWuoPE$/h6T?u5!kRXf5d cn,TW^]JU1&;n!u&'Z=&JQ(dDab?N08*(RV(E18Z)\X0m\^t-8mWmr;S>[84^G6aL B,Z8H-MeblQK'#;7m0u^Ha4LF^(BmPM:O0h%BlT;X_&"pkO^=e\'5`HSLD1u='F-S ??3B<&&J:"H?rL1UT'!q>Y/][LJU5'Ht>ugAO9*Ol!,Z77sfVh6#:Ce6>[bt5Ir0X &(jCpN2TD\.o-U':Cbo(*1.8:84"dBKpAM2Pbr\X8s6m'$OW'Po7X:)!al&n*7kn% 9+oKPW2gH\9b04jcaTAG>.!%hQ7$;!a=3jG>F=K+SLS[)&p\#a3+lgUk2b/2jLQ*Bq3I>=Wlkpc T>VQjQVL',>Tr`WYX]s4J.J<[^r*FI#tURR#/oa.SGAqmCp],]LZ>Jid\%g'B&n3,3\2l 2][QPGd3)G(nalZ;DlJomkm0Dq*1-[^^*3p'!>UXD[L';-GYgP.a]8UK\pNfJ$7`- [;m5-&,N&9#7X;5?if/-XW`.p&JSnBk:#2bTbASH@n-1i>M^"2q60"gYGfo'.9!Ea 1I,u:kIit$mk+uI.cqg8dPFr ;5j:lJ`\J0;K_-qWq6$DRi3.Is#*F+!fIiUF-^B1Fu9Wi(8XZfh"f`q7Gat/nsi^_ `!N/RGdh5:[X,ijDUkn+hDAlb+CiZr87c/)YeMs\PcH*1DUM1M=@^T*@P%`2k=uUj Ng$A'U8LdWCiR!8(/)P@Q3bpFN@[tHL4qVao=/:sEG+^t!]pj$qofnJL5\kjb+Lq4 a>!UZ^4/2hSu$AI_c]s.H&Yt)ce7D3fbVc$C,IUq>OIhS$WED`._A?&?uAtC_fQ82p7ghjuTJg5CTd(<$) I:e(N]/5@;Zbl$cp=Kh6mkkgN]G!gQ7 Q6tOPgAdj)Uhr&rCHLOd3j`01ga3PZ]G8tj#_'/AGAZ.2r.nYG\G`raNu#^6S#S:= JcFXE]D1RdZ$d2?mu`>*r]>eLc+#rR8&,.BCl^=Q"4/2/;Lj451ccsc(AUWArHq8i pL]=A$ned')$^u1&P[,#Vfu'O&(29f&goQ<+ZZqHc/B5G,k:7E)IZa9=IY/5QB;RX[X$V7^^61[3N OZKplNa]e:gY?p)TX=_AJ0sU7$r^Jbec*>9nEs_LcmTMK-HrnX`g2ql.`0JFc-:QNk>\bXC>p N.-FTS;_eY:[Xb85F]oG2I6/eWp8/;e]"6)qX3qF-Y9it9>oH*7$hX+/[a)_F-MD/ >%8G`WJ&u1*8aSIY:[^pQ6]EFOK.mbC3!cuF2D[t6S#JeW\^EM1*S6t,:_-Y605(S A`Ada;34NrAO95W%jcs_W\TW:B)#E&qin"(Q_f!CVg&r64UOTK3IKEu^>&Zs!PAO? HFtIS%Ma\,D'EYU%eM/^&1bbSPMjG.]*i8kg9`jg6R3d9L /V2OqXtR*3!:2qIqQnaMQfce/GRI7:k\gC1)[i51#S3U,]ERM\7gRp8(]WFnQ`BF+ eQ\ZH2S[gZs&-<2@t=U2.dcC+2.cmY&p"2s%XtH?pjR)sSqP/")ScN*WS.OapoS#k 0Am#1g/!""G?MLlT3N6\XF1ZF6mPkq@*\1<-=0NH?]ZYmdUmWqrp3k[m!Hb3B+CXp >X*6E^'[oT,tZIl?iJL*,jG&&q%p:M3u@Hdiq`m4EXI%.9a$#_5VBj9]OrjL"b;"@ &1.pE;ii."-C042JH!VdrhEla?cDnlcenR^;u'([qHL,^DZuU0>,_8:RF7V9^#jEC maNAgY#SYte(E9OmE_t<hOI`"e@&9:>c2Og3:0SOSrgE$.r)C"Se%Jcj683Uj+K-[*^o$U-AaN*U6VKF:CNug E/jqu7%A81M=.E :/1%lNJm5$$a.J7hDK(d'sk?&F#J^[G/a(H`F&^VO$F[X8n >ji_JBV.Bgd6;6%0X-P^M]%3CJ"JcJ5TemW&+-\m[qUJ`KPo`JH6.h,-\ro,%4?oqe]E#fn j9"+c'n9=;*8O5YgeF8"bZ]=V0*1VGs5+P`h\8ZnF&qui(O%YNG1,Q_`KOKaR"@E0 _q64%TN1!XfpMZs;)bC^DNEapgcSS=@DaNJ-\DSuRDbt,`h@Pe (3kC!eB]]H.*1"7olCR/WCB/rRW1$;DA#8p$,Tq4B*=nm/E97uYM2-N(&I0pbCIrHL(#F,[Bff2K'lna_ip'e@_mT9B2/;"g YB)\rDHB+s>C"o^R]H`oM0CJ[\&p_5jkQ./??;+1^4oTg9rtH>Sh$Sc(K)4C8bIB( Es6!;Kb5X,YpJ)Anr3@d[&C"sTZXWlZ;c;Vr05P@EA4=J.2]9rPSd4F#V>*_PmDu( pn=Os+0*FH?Cc5?.ano5!%ad"m=tl+-+`7cH=ZU%;d$9F%+cc)Mid9,(;M1T1D64F EK3`KOYI8,&i870*UCio\-j]+)#r'qhAH96P)b.prh->,hlKfGN&7_[S^Ps"JH%'t 8BJt[BJ)gUn\6lNm6kMHOQjQ1CFnTq;f*-H.99F5&,:3kp(7.[P$F06O(O=+JH+:? :0Djc\bXMSq*$+Da3'=$?d9t)Zgt#g0$3,Aaf+qW:L#&;bN!r6jFIb,0DteqjM!Kd rsE7$/jMMe<2+(\!jDd//h_I3[.#tbjWJsRi;Yi.EKIT5Qa-6.#L24;2*#%FW2)4F #,k$dR*f*Q,+&GOIr+6P2&BDm':R$?rDp<.0`P1c"8p43^.e4. 7/"/`o;PUs=+ED@s-MGF&7c#"ra*).mG.,BSRoU[?`SD/MgttYJZkIhH^2$eR(VoH ;t<+VqBf_>FZMR9I[)IruG\=4a$`[F86X/qQE4' #iH4/n2YLMHa<:q<8"J>EmSHL^K?@u+A)E4JEHmH$`(OojM*(bhK)^^$fE@B$:o*& Mso:6Qe!2BVp)FO%7Sas\LYtU.o,b1p8Cug b-P7+6LL3^_.,Ct8DZ%M36kB]E7\<(,Td\nI-jCi"p0n7;+Hc%`T14h9O M[3saM)23]Z^\;GPrKO/?-;8P[ICM:4Dt4`pQ+4hpUn-"FA_!r[H:XBo=H.8\h8!7 -?6T'i`-!p0^D[l@pcJ";RYX_4Dg@mlrZ/U;h3GNc-f'ud^tKaD0j^pVT_4ScF@Et BZ[M_F8YV.fpb(DYGo2f640B-^U36H6g];#m;kdE!]AbsqqP,@GbR7r5^N@Z.c^Y^ :EZ7dNp-T>"4_VTq_mu8b4*H?d)TALO0q8t2bm\Epg%-H^E>[_?0-Q3&bo0DnlUNo ^)>O\2E<,VA)t[h!4.2-ih2T##U0/?@-RoFEfW,QNpTk8G0!#)'Of>G;gW2)mtc]Q XPo+Pq%INBKEaal_;qJ$&mf<4,EN;3klY$\#6gqC'oN\ci/6(kL`Kk+$>,?hd4M-2 TMNNE<,mZ#r%U_g2FWh!8M`H-ZeK28JGoGJ---I#jK?5>?%/3JFHAMtP<,g?6;%Mj !E*+i)S'XKd#%:B+o]ku_S]AWq_I9T5f1K5*pMe;lo\3UL2h%,,sc>gNU\)*s'$TR i0d$t8q>h<5rB.I)Me5>E.L9Y!2a`Ib;>;r(mR@i>IO (B=h61^aqb#,RcDVATVO)i#5s7Md#a<>ZD8/=8$?JnlEQGJ22scEp>:4J%LY3m)`p T6'C6H.C0.Uhf/X=6nnMSVq8H8%MeiYH)9e<:an*ii4M=X%MEQ$]4%e8bLaCkHZ>4 E^EB>6OL-g"_mMGag'sLi>(@YV;frMaeo1:`CWA7_Ebn#V?23350q!"(Jrt+PaCBnPNn?q m[KL0S!!,knNS8S)[(eX<0*hS=$a,*=(KY>];('fL''-%7'WF^NWSeiFA,_/L)$1h c0*e,-JFAGNaf9"37TfJeMTGE2F#Zf+Od;^rbiqL;/EeC*"tT$@T`JX5S+D-U >Q0_oN4Q^!8jB1Ehks#LL7c6D.0#a>q'/u6H_0N3>ik-*aa*sF#Urle.F_nVClu!`>,1T!U-=$AkL9Tn hefS1\bd+q8#seug=EO@]-e\;T6R_cr3>tFIJ*+lEh=;.j0uKbT'jVkC_BV8Umg'H &\A8)Ta?4[);Yj)EFDdX,"C#gn_8aPrhki]>S/*LbUj8-`[i0&Ss-K@(uT pWC!oEaJbQo=9P-[DqFe@.bso6XU6_U+(1$6)rpMRf#OaoKsNXg[7nJ\s'M4S[PIh )3Y>t0/+Hm;'*t\Sh@'La>(,Q+-GY.`DVb\pr-7jI6/iHZf&.=+:j\q)lQ_:ck\a[ZE=NeZU9%F+`1 3:fZh.-$eYoP`)kJ*PYba^=ljI-L7--ogLYHJCaH6ia+Fj8Rd(_FW=*&_%*)'>\4m :so[BagoHD.7Za>a26LWU:@e>"o@beone[J3NY3p4"_7l4mO0/?6#\FHWYI&\WV9H 0)^07_V(rBo9Ccfb*($a7@c%5KU^]J2;k1I"JYQ/.F2)3C.&8Oao0aY7X..*s3iqcUr7hdP[RE-3YW^R 4dKVPb4*mFd^cbqRs4C3[2O!Z@bbh+S^fZpuC_R8cnq.tX "b?hb7s*-*c[mb@Cq!=AZ<[7#9_,JUL99WHr5YE/U8VFO8crHbkgLa%LGClOs*^m- 'mN4\H4'S%[tSQ+(4,hi:PHOcr(R=?BgN8;8X)%T:RsL>>rYBChbTh*9L8gU5>-]d ^5*P;E_rccQ+Q`:DrVj*paoG>R_B)Qs,JDDoTqm)n/pR!HCD5In+fV-nct0hq#?p< IS1D#rY&>Ic.N03V4_;VH\UaN6H.j*1k2^]r_&+7k>M-5.TCBY@tEhkT'2Lbkq>`h /)6r[<4C5Z8SiNP@Wl'mg7U,aY6NXJ^=*\i4ue\pVr9E8$PiBMgTt =>XSc18`(ppttrmZ0qsI82km#T/C1Z]O4dHBn':Gfrjl3&3D_B?9m).KQ^G5%TI%$nNO48u \-FP3g*abbGLn(Nf0VQ#,.j0d](hCn9@;Rrnb4uk*fBH>1@hAs49GGQO1V`cE,R&! G<*2=IU#@6&>mdhDl>!umN?]cZqFQUVX_-`b6J3OqZV@)@nKE9'P-iSUd&$XHT7XF G;?=:/@N70qfKMS?AUius$Rk"BGg,)#[KYG=#W,%6r;HS!-K\Y2ZcB2&kk8#%`0:q _%)'*c[8[+5*bo.0.>dpn"_2BhuZKj:16aV(5P$nKKBd)dg\u8!VZU;DumiG+CkL# _C3IAW5leia!-nk,$Ds]8ot_^%5Z9IOtIU6>dNFsqH!6$?0^D!h(#:-X285F_)59Q cBYHJ'2;:@+;;pCF.,[-BF /@+9Za`42M7#EpYf<^Y,E`*nJE/n&qkE)5pA4KD'*Kl`gOT/Gl8*6EHr!+mJU*UqO S6RRbQ8pu9JBe4`Uo#'.U_mP0#P)M>(^'R?GS:_;%"gcu@[WQq7:B:QB\"/X'p!dK 0]/U\j&!U60.uoG/TY\Y$>_#d&#<7MinDs=#I*/old66pU3bcJLk#&2/fU#Tij?b3 N%$bq#-%Y0(3Of\AQQ7^gGhn9fp7:lXdd9g\-KB h86W!?mgH?$W)=bXT\_)1!YCol@Z=>O)f]OqJEA2_s*`dp"Ss#2"2gbSG1&2ohQm4 ;%Ih,%"$-I/Nodf_R0"'/2WW.QaF+q>1psfkC\/QMQiC[EEfj^%:$_#HL-n($"""b=82U"gQ;uaS@X4 GnBsfou]0Dcgjfq(C]Te]+WlA_#G.El6X-l23[<"o6M,MXW)u&(Y5^+/DAYbR?8g: 8>;bdBlJnQW_a;F'*iNC*SGfZp53@O15>a^HKGD,b*2u=pqL6>3ibam3K>%B)E7Y< ifY?o;4mZ@s*_pc.R&(!rQHB[k@j*m7\^ac7D#j"gH(bA3JH-Hi4m:rL;NK#Na&F8 Tln\d_#PV\^G2n>-0a%!FIO.VW6dh?NYQI== &(nh#N\-*]&>8![Wn[O9HniW).uM6!;D3fRYMt F9ab0O8?C]!UW4WRXbl<]@X]b5Mo$3;Sa84"MDk:KRudZl+/7"OnH5M%Aa3mghoG hf:6J1+!b$-LhN(3e;R.e0HedP7[(Jl6`De+>t)FT\Z.50)di7LlQ;7 ".*iM-tkG*Z\dd5!N,4?_L/LGK.2 j,>eBNA1,@nKqe@=Z4qa48U9Ks1CH%.b-;8Bu+?6E`r)>q)1Z(X3q')dR(F+'!IH2 [kgIe/[U0S9'JJ2eoFNHO>%*j7?Tcb`W7Fs_2U9_'K$%d)?L9XV2d(q1J5M8\:?DW $?H4ZjD)mHp@8daGGtFFg+p,(#M[[ZD=tsCr1JK;`?2S]+7_aG5M15SaT>BI!92sD6;r+NTPYKk!PF1qf:527C'BB i@Fd$%TFNd_#[35a&iRb3i!-+oC%k1_B1X/'ABfH >1Ggd`Jp9uY.ClLV^ds_m[=#ltGhoe6??r,cm<(n]Z;]Sr(MnY"frQ69 g*gaZ&3'T2ntL$YM@je'-jBC\Ee6>k**<0:#OQRW`b2kO3r24pXrDMk+$_Y.%7O!;mAq;1q.:e;H]^YC!]pH/7$SodBn1X2FgX JE/.h!,Y0aYV^5_(i`n&eK^!$W/,mJ$h%BkDHh4r.Ib&'$+Qml!-`Z5$[W-pTSsi, >(as1LQs#;[^U'Eb; VFVS&UlD<.a&+(SbV=&;3UsA=oN4L$=j')+Hmtn)0sl!c\8Z>KrrM/^o50[q?8?P`-FrsqNrPU$1L8'l;XYQ,5Z6/3'epnO`"Nqk%D%nJep R%t[cX;@D$(CYHe77"qM:m-81`A!<`R`mS.'j>2`gSU4gA5l\Ec<+#k>;PP>k2$Fo )eV(bV,t'E\//<$FnE%UAkF@*\Kii*0IO.s]?ULm+/1rl*e9lDp\A1UB)33PqKuK0 Ja4\3ir>Y0s5t#fTu[=XV@["JXe+^5=[3]0m0G2dZRa>//',0ZP&8kT)b,Qn*mTq; C6b,p8P-A39g[*VZBNOSOtF"=XE2fdX+*aQ4Y>-F5lgo=F,77E]_4/_d?9c+aj.;+ jk6l:[S47Q'%7nYm_GLK"95@2[ZkUo*3plIA4[o2B4dS5o0HRT)Zfb+"B.)',`?3% PBAW.a"01D,fY&79)6qQb'n,([U7c D.g%eaNGL=OsX\tOLT=e?Tq"bfL_Ie:RHEn]_Et1s#P9?o(`[11?^`@DcrQ[rTBEQkELu#*8+\V\%h)T ^Z-emaB-#a#[cb3^aHq\r4pt]Ke!9#s&$3$HenZSOS0V's*=FZ05(%Y;SNYVn=O?c r*H(GS%Gs>4!Y-BWt+KYH$@Fp3g;8a^jiW.'rf.uU&"LqKA'=hdp"^HKm&eOG*`A5 N=1IuZcC7%:QtkW=&5Do19LZQYF2"O/TE>eY+!p.ra.UdgTkKXO%8Ri,P^#!'j*@i R?S*t',I-Zq"@[N0gkN_s292b%T(N.,m^a3Y c)#%GAEe9q-+/7$X9j%*VL6[rGhSs,`jC';m/3ejrdul0HG7TE3(b9D^Qi6Tr5ks5 Vi(nC>MHl_gV2KAQaR?m-K+o]e^Y,@)f#+Bi4h&2JNU#8'0E.L*`.R_JfP+[g;*sN IlQA47m#-&mG!DGo*K*k(8Q%`d`?=K\2<4(W_`MLBC!-)LFDY`1o*VWg8g%n=2pn> 5`1q;=j![&DEni8XU#P/j\_(LOaY#ppa@TF5s:peT%2oG.>_!?UqtUFT$=M:K$\i` +a;m7'[s*R)HGMj=Z@G'C66'6+GdnT9B.fus2RjK\!6Tlg O;?%AQ=INcdiOB<_rBIV28\96Y'1A?hEIKNHQqGB6rMW19(sO4HR8:?>"5]On5u&4 +j-=>PGcrqBf1$FLTuZDl>]jJ=F=iNp_pm@EC*=!7p35KZ,@cmcnL`])b8A:U?Y83 )+`T.WCI'+"VSTD9DHXGpl?j>Y"):, +7i8f*WSfe>!O_t6SFC/(dg#L@%9o!S]'WZV\_E+arJJ;[Q2l]e7oq;SIM^;RFrHb 4&aqka(r?0i&9ZT.ruA^E[#a2@7@_h"^+,6/h)<@o]Hi^jl?;!RD,'@)*XGY1OOK4 ^4kg#8H7!8Nu%6RnGb('%?"%EAcT!=U?W"=VQ<.*/jC-eYcof$$f< #0mSK$Ve%%CAYtId]@KC$ F;l"5QHcdHZ(Mj4$a9^@@-6.iF)CNSXKon_,iVAsh@tVYI'g/N6nnTVr(V7=bpYS" .26iR5E08DB:Ao$\K"Zlc`t"4\t[-WZIljl`4N+pUSciI$Z.\l=64*qs)k19V;H%Bo"8RQJmP\bYOf_`r<)3%/kt*ENO](@+7=>o+RQB!OHr2E`8t8+ s+%cY,"M,X>OW'9!rP8R6-jg`iqREulec=_?Yeiu!r8Hun-1sRHg<7Nn.SlT XnG--s2VYtJ"2#ZpPViIG2^QHNJG9>5Q'R.iNJO$Dt@$(&k=ffBETpP+RO5Ojjkl' \0\Fq&m8Po1;C2.gotU:)NqkhUIFFu$l6'fZ=3<+l,8^i"iI?_M[$mem>Pp#h\6Kn EPqA6`lU%&-gSSMi$pF!5`8'Sf>J.n>IN/7Cp"33dH@$6RcmY'J$IM(>iBa-l>OGd:/5Ph3*6'pi4aGOlWc#;j[1@CIYtIUU5`M e5]f:a9g:KYP_NaVX2Y%3BAN/=OVp89gZ%a?r_6J.r(QS!.<_>`j91,Vd&Q>]'%qQ FLWL"\>F@aP#XZ5Gl@^L:edc0V:>!:)m9R%g2a' NY'7IYL4Xeb-2dK\X,IoRl.)j9IV_aod)u%')H)_0%J03GF(9jCa.j>I? P)%ToO4K-iX',1_nFu'bpZBolc_oQf:[Xg6n!K+!=A66F:[7&>4Bf]5^aG&Ha/-<[ nsh-f+PfLZ-61Bn0hs,8@oEo)U^2>_)6l]Jc2GZOuf.\Dh0I#7*1flUk kIk2`<6uY1$(T-^2 Mc@,r#0.p?D4Y'A6/Yn-$E^UlmIH-OE[r/DQ$.Gt@C88nX6mF.953ba,gpC!;HZaC Q[Gee-]gh."Sh0[48^i"ZdQNAZ#SW*S5012(\DYDf=liC`1d*9W4g%85?Ye4&e@[o !bVjGYnE^aj8?(n^]F4;PjJGs!9AEu3X;UT@DPXHADf$&3%J0e2)W900@L]XYO2&A ^a()uZd[/:ai:[j4_jn77e-jDc6/`ib0)^+;6>(bl[5Q=Rq9KGf`Sgn<<-2@@SlEi g"+hZ(0RGsOS/_P=r@A=Jc+23'+Fkrs1,"PGpd;_$Td+,_(fN-D7TI["U.Z?V05jM NjY])Q).e%Q(Bju*bS,n0,B5tian.9SegmC7(<9=r%\OEWFK'*Q_o]kE0"S?$15CN $":snn:*N8&`=2Y+0LCke\+(/OFNn-MY_'C0S1Y@qV33s[T+ PTDo3CV04u"4l$EHY]+UEI_ELbM\$2jp>Jh.<4`dp?&i0U6h\K-Q2j\["YCqr0P@0 [lI[M;'k,_M-ahu^4N_q%K+$5[k,p2%[mds?'4,6U&;MHg%WJLMTDDC6Z2/D5( 7gSkHZ:-tlWILstnn[@9ms+-,*9jqK$2cc-`t*m0^Q^-q.[L+B;?c.]Hi3Q&t9h, bA6F@NI9cml]r??N_O9WgFBCMJ_cSOKA)/ljg2PK!.W)fo*3`d#1]3ONFKrOS(?c= !X'9O^]cFe$Z3%;*3W#+RK^.O"g/X`)RY2$<9"?LG5) K=O&*gojE(3kDeZdtKMN;Z@MprABl=N?.o^9)EBrVjg;f2@/J-hAljXSNF"A17Mm0 ?(9!N;deL97V'*;UKs3M2Ztbbk>#>h[qT-W^:%p)I`qEtr.hIY2tAQHcC18q4*c7r [UIa]p9@3ZYWc^X"CkQ#3k:?V6GKI2,D:Fk9 GsmdNO=lCV'*R1RHag2)hqe^M.g^L"L`"d(s#:8mKXL-tQI!GKIkg5ZgFJ0L;^S3+ 045I9oEf[&Pd\L0A,'/79]&I`S]/D_i! B:@g_Q:.T=-I7u_ksTHL3'0[pGXu^i-e=e\-Wd*6()'IYOF7JBI(:L.s$8b6+;Z,M Pj/4i!rgFDr%r>0.af^,K6V)oQjV8h5/I8_"dIr,)Tt:*b.Q#dH@cbXqV_3U"g"Qa9"+r>cM!,kLXfE1c/89Ou_(>&b;2q8W# T,2Po0Dl2mo[iH*j4k'\6BZ%kN`cD5S4C'0B3M'"D/@sV=b$U,@S=nLcH/*RZj5^q q8o$o=a8tCJk7R4M$!V$0`h'%W-Kbuh>XOD*-2V1NluPp.!@'hFf[':W@RSA/9S/! nZ&V]3)f(j=RL[4+S8tpCV?B.OuWm1fANRc+0$T3"N%o%H!$4j%cJMfs(V!.aM4:P "BPlc^hqF.I9ApC!r+u5fQpjTH;^sRYobOTdja*seLCRu9C7"2XKaRC+.LB4m/hU" ^Br"(R/`jHKdD5MP6:(a_*i/9dF_gK$4-$9e#rBa;E++Ik"Ir>d!q2>4^@#SNe_jq>J/Rk`P#/>q6=F@ ZhcP[k3#0VQWHs@//m+HX=pM8S!ED#[d5W>'#=))VSu]#ogO^cPLKWL?gQ:JAUb?p p*4()1?QeedV3uGW@FQ1jaU=p`a6eha2Ws;fSN@ap)1,@(fe%2\ ;*-XNm$hNDQa^8T-&soa?6/olh>9BAqjr#]NZE0+2O.R[`2-tmZ$jfp7HAH(_r\2V ZYdm^He#E5q;dN0X'7*Of/G6uY$,+7Ys,d1H%+W0b*($F-/5c4(=a(q7DSs&j*B,9 -%,T9n:`l\1M`"F$K&I'UV"?j4$gP8n#fBOelA3:9o!>GpRT"5LPN.0q^E2?eUbht Uj5MtRj%OB"iOi_U@;K#gsBBYS;&^$r-q%9g*+^k"eb+)$%j/O@sPqq0YA3E5n(?6 iHIfUIpWqAT)$7hhu\FQH2;#jb(qG`4l02:NC-hLD[,6PO-RZp@8@6'Z;>-q7cojt /kQs_NOZ_?gbBo'%bLB@#H4JKC_)ch.`,[QEC,U'?HX&8"eDnhW:!)q3:UK eF)#>#?-IBj0@Fu"oS!SlhF=cemki%P`0;kF%VNO0VVu,*U4Pdo6f" g*DDf(f!#KTc$7JEe/&/^]Lh6,>%_D"Pkao3].I@5^%[BW>D(u)[$mAlES.cj+0cL !g*j1$cJ9W/0sV-BZ>mJ,(-8%,1A&l!e WL&)$.ZmSZM_64YQ":-gn;.)J7)XR#/cS-4RJrfoIlQ[`)#s2+]KS(McRS^6$c'iE l!gL@KaLW""i(2b(V;WqgqX!VfO+a*Pr+8:$7Z&`ZVd2g:_Cg,8$E%&i8C`1,%)%" (do;iad,]-@?Kq:g4R9oS/FIeT,N-2')!V7oJ9\'kH(Vco+R0#i:IA4#"96T6ABad gR?BmA?r;(9PZ!(Q;4oc;QM9,`osY+39N$:Gfr0T9jCabqZ%n:4`KF1o`Qg DS]dcj`@PK>l2B)kFtk@P&cnhEjrV8pY#t`WZ'LS)NW@T4q4pVNRar\8hqc-(Uc)R 28gAKjJXbH#lZPO;UK/9#lb80%(6=1S[Eu2q,QT1BdimBjsk-=^g,^Ah`/ucq4In` Jk`%IrY9)-DT.i/6BH*CV^5BS5PJ+Vq[AqMS:u^Uo)%4bH8[0#n74bJW4jobIp])N^0L?F7/h%s j:+oWY"4FM!C)l"J#V6&^0()%V<2^H]0DR[^+WN9?_dmS-r@Wd9>2oUrEQW!F+rbs $ME\?nH:e!&3$U!I]2si !3(+qrN=#:6gf1<>X7Gu\m]l$c0?dO>Ns\3o'VaR[;OW&><(:iD,A,/D%Jcc6+1,Y Bim,N,I5(imFComs46@d[MK'IN?[,X!.T]2:%UZ1hrc2WIh.Z "4(ZYc`?sr/%dJ`g`!"!B,'c8AR;jqTm**I5$W;L'^/PRN9\t'.jpA>%=NesqO4dg bLn^$R6SMo4O2e;/6O[f[!iluTjq1!`C[4mETLh>/!9"'r]fo; hT$2U"qDq:q'`Mmk!Y&VkOd]2=: M0G:InA0!Uhd0F"h#G+8j7^(?N=DBC;RbD9O[IGmV_gtYh.@Tj]n`3\$NTr(dRBim dYL'eolg0W=Ml1o(0giSJSiho133LKk,4qnNKU7>otWYihOSFgSH@\1:_Wogd4V*! E>/c[p`Jo5SuOUH59hgS_nm;):.l7PKEcs6DJW2\s87 2A5E`EC6b]WND+Ln4nF1mo%$?`InK^R1E@Tm]7#gXV(G2nO&56"#C6Hdto)dWU5UX IJi_-TJaTZ39Tg4p5"5][$a#R33g0WeEI/f7[XRfa>BH#P/K)8B:6[>r4rFO7^4cp D,F[X%0HNA)ao5\&G:Ol@OFLI2879a\'UY^4Gg6LA)(N-?(_kSLg_UJi*o#D5upN" .2[\%-B/!#g-PdB!:G@-5O]bt+.PrdV5(5P)X]j+L@0YsM6U0a%IE>.WV>th7OCVITCJqr)k:eKT/.2[:MSZTqe#h#0c5[4Ns#EJG YQ21281)h;1KsKDHB&l)T93d3UfsEl%h))h$WRaCSo%neI;tAo^qZu!UUo7HFG4@5 Q"s*R922O$I@Y;)]mE,;qlTFB;>M0/1pJAl+>IaBY+IJa"?.Jr*LCD6A']O"X1+U1 OG^W^bM'b'm63hp?OX^TnmdUX=H!/Sh&bDg8`9jmi!]9t$H+Uh[>2^\BYs4%[X\n( B5TijD!f[&j?Q8UR[UYdIu5Rk)0l7(F.Y(8Zk)Y-&Eaem1RcP,6fQ70_WnJOARI^= Id-uBs$43Go:3>g,&?RGc3ArLZn0N=^#]OWE40(,f!//hhm0^6hICd8DZ^H2*_-.`f%T<55_2?`ID0C"Y]jQUNt0!4j@.i^s>2=T/fSk]H-ub 4/dW^Y^cOLmuH]Si4mL0?0^&p[(X"^FUbXWd]7.&d\^rLd%u$0]Q)NtbgOW)6G"ST 9?W4Wq*jB]p*%fPkaHf'>4q/F[AT$k&9iSFT%I@FN3[bS"n4^'/'SP#OB9o&%J Ul3d2FmEgY[MN!3cE5c,KQt7>KoYBB=k:o%f?RQ$$le@'*i0A2F6BXjq=YV*SZXU" 2m#/#bC$pG6664.`hu[AK%S^(*DEJiS^7.-25b,_C!;J+'lrQUb 5SYE$I\]^Vhnr5Wr`9c1eE!#\b+\r6S340Dn-EJcOF/RgB?d=^/7@;GCFe%rEBW^"hdniK;`GIeU1d 4rh:-TH[s3qQNedY56&X9@5!n[3W!=?dK i3&dl@UEI#;Glg]?00O3jaF_[oh<&'ID,C> HG;6F*bQBrDH97<0l*+qI1"u@Ou/pXccYdA^jj0!A-CV+]kG;2g7O#[\NeOa#Car6I%:"$?cBn[;^Qn&M>!'0 =.l2d!U%ju1>8as_H3s#PcP<'91/oG=In"n>pal'qP UR'*%1NWEjI`;HQ+ER&jC#p'uJ8N7kVmi#pZu04nq)2TYD#ko,_aF%1^+3360^N:> OobQDs&"!M+t8s-UFcKHo`4o^ZkFS`rZK;^ms*9!H.!4"#f*pL[f9BXnEZKp^RdI\ rPI%`DL)K_lcg5q[(Q4.jFlV.^olns!$VAOmB,$kF49IBXM+'eu8/OG2V8" k^.U0j+>eBK#[,Bb5$eAp7g!C8a4]O(jYRq<6pHP)/[j5\da;W7K%gP?-:sM]TqLs i;]MmDuM_?cj#:=3$j*PrVq/jENrK1ZI=Ylm&oF-e'AfSo"htQ6!.j 1:LI;Y?!7THO`18^]IIFX]!1TV2+c/Y59fMGFQ[[%4jd4gEpsQ[cMUV_u::a?d&HW bB?sQD4:[R[u_!MS6N?`4(DF9](7NG$*LC,'^Wf"m\NYYr:`a'qh/*#`7,)+nJ3#]lV=cDch4KPiSqufZ*8*@mEoU$4eNTU`pYAS/ E'H/FGA08+p.STc#3:&Ws)@=a^=[LZalc1B0$Y'`f8'q`jN$bjXid&5jA(VRa#:4. f<[tKahqmt/JIuI1EL"/8FK^"pIqB+Fp4EsB*VGP7gn7D-F/Wj+JQ2:',W'9<9#s, 8UR+$>cpp4.*":ogZX.R!0jH)#"gf[b:j?[CRRFb.bkkq-Q@dd)2'@#"ioj2`TdY: 8iYduU?e"l!d1$Yr?dd&9c32@'ZVV^B:i-9Lau7p.jHC*kJS,K6@$*!141X]nl,$* @9!:TitQ)+f_Q*ppM%%Umn_BGU?+Td%/Un;$^/1gQ`GNu=hr!3O2_fnF%'tC!h=fS JE:%VFK/b1K*@M&fmsl+T3GR/[,kJ:t*dl,Pe0I-S0`;!-O_t\/$UkO:>q'7QH!oX*8 s(n\]RqBLanfP\4hnH&9WP$5.W$4O9Sg4+AU@gj/@p kM2Nl@YXJiiE:=anKA(pY+/qDbFX),T9ke54sd`":N#^s4[V. HgS.imtqg0H@S3cIU)1Bn;83T**Zp"q]7s*jXo YLfEH=6ob`e+VUI2SK)_c1W+O;f\43P*]L;QX6K6n&::T6k&I9%IOAlX*l'<]^@!C ]69%u>?1g>7oO[AppO'qUso[s!UTla$2[alD.kX*Uc"27;Vl4jTugf8FC1 7YU.CV<`8XisiQTeSWWEQ1+CDO^/28*V2ac>K1epj4!>jeW\lE8%p6C*Q_U9/J&a5 Y8A!-)&-p)eZ9Zj4Zl1rXlIORZ/C%ARBL,IjcFIImQ4)[fa5>BpUl>`V-Is-HJdQP m8WsJ$.-*IH#La:pX&ZnY'YrZYuBc8Xn:gTG]tS64/KZn!m_fi*_fP)AuTFLcim/: ?*h/SB%I1Lk1a.uFD1dTCF?YL:7>1d3&U8tcOC^*4OPa-I'S(Kor?*2%Ir7;_$4k0Qh=` lL&J%#A?-qp3Q'G@iNH]\F.DbD'S#aO+OP-pft>lfl5j7 lsRV_?LMq[TspoY4!1BWl:n?qNQU]^.dP!CIuJ/Ia`o3\N1j/S=lWu6\;3 d>`fC\O@ALjG[p;Nc&A<04d>;caZ31IV1LJ[55>,_4FM=RSdgW@iNB3JI@hl15t5o ra5alI]rg0EGVca'&8!7dO9id&kt3?,T&u`NM>p^;&P*#35#Tf5pSks'`IMHrU9sg 0Mn9*8?@8ZN*]>>O\^T.WRPF/jJ1\X'Cj%2.90EY.bD&=0O/He.KI56(fHS3;FD!D _?ZD>_BJr3$NDBq!eC<<"e`hamJbH3)um<.[a\)K"Kfd9s))1YWZ=oO4RPg"< bFhtdF)CKR/?*1'4H]l(RUm!,B4dWcfX[:f/cPkN+>2-SOCMA9Fb&sg;=%Chk#>RH >$^/g=*s4KSR5m?kCp8!QQ#e*S.33bk]cI-kH4Tj&RO9C\Q>.Q/g3nT'd-7AJR>M7 p7n2DKuSHg1T/%jA/R2obZQ6#?B`Xk"9.Hb^`gf-SoV92YW%]["gn#; PP@oZI#RmI17,5IqbJs`%l4um':7V;TJleQ(n5GGBT`bI)"APA/2m9K=8GbJ$fCrOQD7a&=]3JCHhGcKo/"LSGGdSs4Y<@m3 fFMk(1p%I\eVVNh2@O=I^L7Y&6(U8,"o(_aX&b0PpdSg6-M?]E[0+IUcft5oFKG&J ZmsSQD:B)^iB$^Q_[#`14(2D5^Y;S8m.oFd(>?CdIp;;g>N=8?mG2u2Wc-duHe5Z$ j4^:%I%^2F/+^A)p:DXECYn]p.J@YEG]nnuD[W,j"V,ANLDGF6Wr7(SbuN^%VVA41 kA,JB9@HpSVQK-]Xm-*!M[,56VJT'9]P`W)g=JK*5m\\+lBI&e<(.6E@g5d@2ot]D pBC!PRkCf^/hL!$Hb8gC:l'Z++D&h\adgoL$Q96KX&IAM>sV`!-tPY2RT'Ce8X"L( 1],ksR`n@Qm3,mT$A%$/#t=It'EW[VQ6j$&Z&/ri]4pjE-@#li]F[VIe 23`ogNKCbVi=A?(I@FogG+Ua6:n0Wn`=:#=8&,;4;d`ulX3#e]0mDeJ>38.T(;nm. ipLWYoO-L(,igZ\@0in+\YM;#Z+#M*DYEp6^?-@)=bh'(hl4e['5n<= cF"tZ\#/\!;bQPTS/G+Ut3(@nrdHm;aoZ;Co@5"(+ES.j>.agNhDZ7+!Z=b&HT:H?^\rL+Jk ,pNt05L38`iq6HGk@[btcbKUL4us+%*Ce+_oZ5AC8OjU8]$)]=-3^]g'q:'j#W&fh l.Iu%/1[q)&DStG/Qk)7X;hW+Im2DG9=*X+/BK@)Q\ae1'o=cgLaeOQtCH2p$`$m]l#4fMg?+\iIAPA=N$5Oa[Ro!Zi "90,#1WkYZmTp)$UB&lBH,:get,c?T@5`*ZT!Hf fT9HVrn%$fjbG>Y]*dZ+,10%?D?,Y>6P#gt`36]1fD/m_W`(>GTgT(Fs1)SDP5kC\ fk\#-Hj%NOScr)lJc%`6Du[4g(EMX$J,&npVuO9t!bM@(LO[)8lp#B]AY9":o&ak5 Hg_?\c`*t,r*SQg!;mAUB(hB8pCjIui[/iD`jS6i[Y+Fc"8dWKC9K]cLKaiWRumRB 6Mbmnqc*Z10("s?gT'WuaSuVA%Z&Sqm5HT"Y$5-Cg>5f=ZqFZNd9"ilhXTeGRY/oFgQ#:GR[gpLB $D6HnZ$-_q3g\(V6mq:hVIp#9oa?(7P=OlDa66_sV(/Opb=3e9#/L6p!n5W9-h8nR p_W-rZbE[+I'` XjDi=DQP&/WB7_3,>W:-hu`+^9\(Dt!0A:MERr]gApS:6SrmM=ppLo=h!IjstD8AU]lo4GH>kBDiMp58\#79YtXa9lP2 kehI%4_#AsD8C@;2Uiq/1nIi*n/q3cdj+rWW&7AjB`ESD5M\/QC7LBd+&C:BbPTmK =$JF[+>M%^%ZDN95<;M'$46gUMa2NJf5:>,'JH*BLliYC+ncfK; 1-Ytm?@iD@hAtW@`[4I!pEr5*A@YCJ.=I/1KrQm o[FN_U9QW2>Nb2&kNCR(a>R6$>>rYb!pJ=g!.Xbr$NCejN;l"$;BaMdQjru&.kS'/ /p=3IF0Deqpd0=TDk; _E[N3g\_BI(FP3Z2Cnu]g0=a6Q8j/PXs/3a^Xf+$H:aLZkF09AbN9'Nh5=+SNJu`X5*Sf`U8f+.ej,X =9+`*pVl]q.l>#lliG`>rkG#\qr`ZG^L&tukLJbqFoBi4f:E*Bs4R;go]t&*J#gr/ is=PhemIO@^<,,SPI#G"JOW6!,Y`-r:[H(slpZtN&Hh`g2SWNa[ +pNVuMGs8f?Ca?r/]V&qG-u[pbc,a.juQ&qfV3>q%<`k:Bp6-:86fBGG'a$)8rkU$ q]1sB>r?AI"r;_i=894`,C2WAMe_Eu[E!-DbO'/ec@+B$tQI*)[g,3MHZY<=DAR*!D?T5/m#lL;Tb(0CC2m3Dacfc+IS",UC?$ra"](C8e ToL/bF"?Zk?^9j-:5>@mcPk][%;a)@f7_u9$$`]AGQ18(KDhGqQ-\h],,s XOpkp38`G1#QD2jICgbRSP)_E(7cAAD/2Yc9#1R@CsGBHht4LnlIrQ+dN\>JJgpbk fSptR-',$(`mop@P)p`9kA@.!,eeJGUPJPA-?dk9[^AhVp.2MOKP>#?-oP[CQI%!T lkdW':o00<&LM_l'<60AF5D$6FVrkj*L%h0MA&IfUANM.mda00T(fn.i-BCg^J,Vl Ilhpp)`OWb)aW-us&_m`'IF9H;hd_4K3N>/r$gjD@iCN(.P\ Na;`bTUsT*"RFED^S[hIB4Mo9aC[\^/d8WhAcE_LXgJ#8dIQ05j1j.H/.3UVg_p,"%=or*T+8Ba&-VpGdMU\e"qUW=c0^Z*-=usDC$*?G dKg-R01eY2(FBR6P/ktboCrnhnmct!PUpYY'`og?+EdPY%Y5.6!#UJ:^Q/Df/cb;" X^PM%iC9*WQfmqiZo(S7Wf4S5,L15j/;"*km/ZWGV$)>[bZCUbWc3%6R>X0%V'eiU ca:`8?Y[W"Tba3`9.rgd069)/0LXg(-*N[[[..JGk?"ae=#@;1#Le$["OISZDF:"F =0-XH.".O;Hr2GAIN`9:PtD>ruYP8iRR(YXaSAf1,G>/&gq\fQ/6jfmtE6BkTG3?`AY5WD2RSk LlU[AW[&hml6*+='0ArEBBGGfIK.0nDoq_6be3CJf6Wa-,_V-Dhf\=umC+MoaT''U IkTMABD@].s&]$qs1\7"^[CFjr;UE[oDedQjaU8nHXFMcU1!#Z(`=7]$(?,\.XoKD 5(l7W5.S_&KdoQM+5%iuD%joG*doN9::4"^n6^44$?3]?g5/k7HZY\O^M6WZHMoSX ZYe12obtsJq[i`AQQPLo)mn1UE(=o]HIKH+BiVK_*A-g_rp/t+9uAM&S(:<'Fq#D! FYi2Q7ZM+1c9C*tnOioF FLu+I+_8[0(2it+!ro_l](Aa7>L#sTT&9cH)Q,3_kO=LUhk#>pCQI%Z/hK,RV@BS, [8X9OX\\38[HZPSiRXuMDVT?:dC;&I?.q7(3oj=9&Gq%YhuZPQ.V71R)ii/^cE._K C73!"AXe&<(1h"=F8EUH*B90AFm7J_u&-p]k >m_P#,6k7dp$^AW7oen1IF&,<&-t`Z$G^!rFKZ?=2<8'a<,n*4o=)KS,M E.N:DlOpmH!GVa,q[BTLK^bdk>h7kXZft)*mBP`p0@=e9/H941U4 J%[-$C15>or0XO1d8t@_0'>]+k3st._ldVA0'2RTjD`FV"eJ>!*(qH'Q%]$UK(g'9 Y"'ZVN^VNeBQ&ad>CFf+3XYcinSBmA4&!-d15I?^UTqkj^@mMT?pBb3N$9Eb*+FI;=BT^W>@Ls(C+Mt)q&oC5]@">L]d#JOJ99=2l5[`q@P aNh>"OE[f`hsts)9mM@c=@g_AJ#%psW1p73$6h9-oM%??* IC7#5d+M^m*)c9b0lUkdE)t#K2MB=lLX0lBcY`p3*/6#Xi3"%(/FG=WFTdN=+p/.& ;+hl46L#sC*FmM7J7`r5K1lZ%Ju6#foB)m=cP'kCPNC*ndcZIMf;Wf;1Vr@_,l*39 `2Tc/dPYr!Zu8i"cNV,aN>DoD_\f@uCr\Z$rut3q[WEfEIni:."+SSHs-@Hq-!U*r 6Oe@*U3r@W7gju6:ACP/sCG 7C2]6PL?F)jk?^(m*U'Qe&Ho8CJIS8@cc0:d-^nS1O/Y3HhM:/\*>Oa[V_IWS2q)HSXX:[DV)IL O4:LQ_n/S)gUlFuVK?MW!V9BpC0)s%QE=o_cHSu-N[=QM$b!H9%Wu7Ha7E>m-8+*= q+KkknN=1Pf]M_89;BG!G1jTAeZD.*djE+YDijj=bY]WHg'A,$Y[UhGk0OB7H[m'h U5pP(`f6M1/^B$8JbJ@Y8O>RU$uH"ipF?N_8j]/92N6c+!iK&bEA_Aq_k)A[=b?#u T*5At9ig%RQJJ%+hJM`e1#]f_"5g4)p+#8mFPn*b(lEof8tV'h[>Jgfi4@Kq]rUo\ YtrQK?T\#gr"M#*#_&Kl80e]c;U(G(u*?.h9K50 L_D],.e9c4V4J,g3R8;-V8o)L7\@YPU<_[^d:\7iVod>a:j!=nM@tE%G/lVRSQ[1I <"1T)&(@RLBXOVBqL6Y1dfkuOE&K5,jqpmAju78!WQ[* (ZWCd-L`Yhrt?V1,t)#=!WSAC/cl"$"a1b4f%Cq,g"G!JF0Cnj=kq0+/^JVl06F-@ E<-!q^[:rtbdX:-hOYJ5SK>+46DqUJBS/)*Ln$5Pei]-X=38-rqRD24,kFN1>*QbW 1>b:#J(GmPGE"Yt_4K3\c"hsN#4;P]!XN!aL-qc/1S>E&kJ.7E\8so^6dX&##W`cJ -XpMF^TbTjULcOgo:M?:S,'68:M:"Y>4NLq&u9)5_97!g(3Xsr#Q3]^Lugf!'(Gp$ P2]Vr%,_X3!!3OQOX()<0Q5cnOXP^AL][U;Bkk.AO'ge&PT7]Em74:1T#Ih"Ap)Yd K,rkWO+5@$!WV%iC#>egJG_&'CZ`V9nE%uaVG1K4W`T'rQKDJ5m]T&@s*j:l5K`a# j3HV5Qj.s;o)TJcs*^jfi;^5^r??<2-[p%oD!iudksb4ol4F[RIMsb$#b6M[^d+C9 OiB5f@@dF[_0]SEX\WlmWO#(`2tLDFf;J<+;7a0Wll.5$FT?]hA#mb\;0qo_lD7#: 8B`C`;6/d^i:if=^(h]'7WD;ED2c0JsE)Y>iae03Q%fV7*G^Z>\,n 21FQ"_6R'VgT#=3=$&A*S=ZfD4BhJp49uqX\igXTQ(^0WB+5l]>VPhFguoR5^ZYXP Q`1A5Z6a,kk>/"br0a+.Z&QS)8i_2U&Tb\].rRGSHCmF5+!TF4%di0YG5[*KDI'mB rHfRf3gUn_GQ.\XA..#$j$0p:1LP=hgp1cOg:$2c9V96>*QYmE8"I(Hr-C2K^$r)T FRN+QFDF%N+S.6h<_MfF!WEFeFoXL(^oC>nMGsJJD9\gJ6a2*W+*+:*QRuOU/$Z/. n7[rr2(^o@Y.-=hMBR#@W.P;_aM8eE;b(rJ_+gQioDo/fp%NH"/+tFK'jkm5c8uOD'C:k;1H;i1=1TS,5&(Fre4BcoLWjH#9G$eKT 3E&g9;u1b<:]"Y&QIT(,pZ_An4pQLSb7fKi!kRV kS&B\0BO6,jt$i6++'0>E/L'.L4.r;UVjiUK_\$SXIl.E:=5Os1X+EAFpiO\-g>LR j),gJ]YZ,>g/(:3l`s=.$j:3 WgrdV-P2!,=:hdcb\33kEW5DEPT1;cc_EXa 7_2tO*&2h&$l\E?_*hK,KE%T@.nllNid[=/-HbqdB\tIPY^_TTrAgHp$nNMRkX9gf a[kjaLf!]K:GhY^(O!V'J+FEMT+lEN&:H8fp7cj32a-"Q,KV,[rH_5ie_KMl7G4!' 3VKq&ST![Oh(E^r015Z@/G#kn+uSNd[:f$'U0O@7/^h5X8cr+\N8Cg3mTu^uaVg:? atWbbhB;NmaCl]0M:B)[l-QYH[Xo:'9WR]m6H$LpM#U9QC^,p#K-tfs)+aYe:&uJS kj13O(1-SV"s'3,1.$.$Z@^A7TM9?%VDWU\Q711D-e.3sLrTao92Bg`gEBB]J6=Gk Ke5KJ7YCM%Dnn+>*j+(R?[\KVraYd/=9(JY3Eu)-;hOp;!kf9.cNOYHqbL^5#LP;: pp(e:nE#Q2`N)DgO/X(:'%-4Z!;9bU[D78?!?gPmaG84%AN\Zbn2f70a+"MhdcIOHE&/0CQ-JKHR$7#:l5EP6&o0M'G07?(Ri,>\Yr.A6(Ae3PBj=N(sT q*@X,cmHCQB3\"KPi@$4`lkSlBSP->Fht2"hPkDrG[rTE$@u&sjL?[SI$reR6Z*\8 Jd'YU"UmKM(V*Ktip+LihJ$HR4LmoEEi\3SY_"O]8Jo15=1BpR.%c"s!11lL"oK:I_QSFV]%gT=n\pK>Turh6;tlsqRp SOpra:t""k,c5c0dj(IK$Cm/c3.[ggNmVsHBWC+]jR>s&rLNr0%Zi(KTD0KuZ28&4 &GSK++38ATIg"'^G,c92^FIR?1=+oc[dDm%Rld%hGLETCP&H^[!+Z,,#rbK9d9J@R 0Ch_aeCB/,/&;1dO>@II'8TuraWoW&R,O*mQAiSYkEOqQNJ#gB]Fs.b6HB@Gq P>,c8iJb)]VOFtB:h!JIT\)*OA#TuVkXmIs;q#Kpa0b'[D rCd.@0880L$atN0ebrNbr;4b;Ik*>S;R-Jqs.>S&rl9Yh^Qe$2J5>n8:V!Lg.5GE* i_I_GMkmaf"NhPM!VhRK,F8&5$]!]>Xh\@qfLR(8HOm(2HF0hCmF_U;?[D,0lBTE*H+dFkf!T;BV+]k&Y'!$^>!VE+ %e/)\G3Ren!WFDRkg6n`XBF'Ts4;2=CcaQ@h:i?uXTk8,K2!kr3:+4uFrf5)UuA+ <=\L)HOgB,050DCKZRNdkcXXk=Fef,#G$;.e?\2fB-[q#cl)`Zli(QbQBj4t_[S*/ \i%2g[8.lLjmF.)DX@f"DW!b%n5,O!G:L6eTF-cAf<70`%\G3<5ES0W\QilVX)r8\ \2UV%2b?-#+GW;jYYOP;4E$,LUH8KT5^W8lbAPQ;gF!@&2DrdeaX^c9^mj#6&FW(@ CkYWZ:@8NhH`mF3hR#RhPp01hqq!8!C??q[ItKqt_&NJSfOTt4LclA;2rsd7D!)_> HeG`:g7`-$^3\Y<@F;DalJ&!V$ILI.Cc@S(E\&-u5mp'eh(hms)S$B;!"+8pNs;fg \1+?Ka]UqZ8%9ds g[4Qi^'W$\R[N_,iV%t]=^IjIB5f?fa[!id@:<$ZXj#(JUrJ1AQKk93)?He3-De%0 ^$B[LYVochQe54akcRMFY0Q9Y>h&fKk$V32E+T#6A^8Z?4LfQ9UihnK[MB/fF5lI_ @d\r*\kuDXe0oXOT#5:`2FYf@9Fi<9Wb#*"efTVXD_BhWm]':Zr0&hr)SkUqt^UF>h51l"W%I3d>dMLlO6 Fu1]fh6Hu]`DGo2s)265iA&;&4&@K]()0-A1$`??[g)X!nQ$rf)\qTqQ+9Xiq2Y2j m-\Fhhp&C,8@q`jC2kW?ikm1+^qsmg`GmhoU+[qM#FSAY::raYp,"CXLL),9Il BjWqqPY'928!*u-*JHg&bSp!nNW4N*$#mh!!Uu(G5#;F\.0fNX/EppNj1FNJPG";9 1U4c/j$M&1LRsRi>lt!QnujD20:OO9+mP45qQecUdUKDUa'D80]Teh13BR1SI_&6^ WdSlE@nEtS;2SpNg6I9^MhNUH99UqX;VWbNI"t'29SBduY^.W&%HBWr6lu*brS,q< 'C40,F_[8#f!@X`:lpE5E5Gc8ep1N4N7\["#7^-T9S7G\BR#"[HJ'.KKR.R)Nq"hl /fA,!Fp2YW;`C::8>#H!qn-KMJCqZ)fk/JL"=t]"YNuKGmfkBFq=Od[L>W5+m!Fj- o/_9/Jq2gqHo(RArr`(H8lqG052:N(-UEVr3K.-j(:/lJKbu8SrubJHQLQS5q`8En hSHk;#KZqs]WM2^hYUO!_-ceXhIZ!15'R=J+0bc/?2\i5lEt=Nn?3""!;rJ[FeE*a Fo_DOrV[KmdcZ*[4U2>pnfK,/+""2(9ToSV&)pX`A!bFF8%abG4V(aZi6E:8p'I,h qg02(0iBA.IR@>2rAp8dPs^>T^2;]&;scNJ7376:Do<1OrVG)N>@ihS!.UPPpU5:L dAqK/VIAj]*P`a_hQ9l>hQ(\a#&=2HJGbJ4n(OU\l%JO:nCP0o.p^l&RK3>F0A^'H ;Q6p>g2^rWHZY_PDm\ueEpVB2GA/'Z\(u??I"aZM*SKs,\W-$M^5<4^PXEVJ,4!?N2bZXWsG%)!g6-kCET3 )!f6*\_<.j_oR[ed.(DmfJD+>+aJIUIq6`D;!Zg?TASkg^P9!Ra0rX9GC5.( ?:(T1TV?uJWV>Z)iItI`J/Yh,62btLUlc,$5.."Zj57&Z%`gan5]B6XgT/1#(oS[X 1RDI0goGkV\O#B2]])mLFM;k\Gi"T`V;/%fc+/;@VgT65-1P`)5`STO+JXZ])V,bP >K[fH39-M#@C^Hc`2RaqV.n2P'>=V9"98+i(;U9b\MLgi#rQ@31LP#T#d'5Q15FG; 6:h"3!l4h1eu5)n#h"H$lFGBD5S:L+?sH=j6,WT6m6LYRV`JdJ3QG==^5b=S-4&#p dU''>PYlHc]M&g,6:6OLXV/3X]pcn/BmlJ;E,@,d%N/KLi/Ymh,AXq(H.]&RDLOBN C5LIC2>`@4PAuY`$2;S6kLsYEHIOn_?T1QXl#\M)E&"ZV)eSXQ6Im5]2-/C_oS4[( LEhCtUH,ePAS%DI3?@kB>:Kg$eHmh8M;SR)O-4j*P'^qQHYR$$C198?OufX"HQM;@ <+Yg[cg$"EeajocqgN9uASTPDPg6mt*T[Tu[hHAl-$PY#[cbUgVT.-)8(L0#X82\Y Y_X2m8e!9W<6J#@0Ep;$S3P!]B"#o#gIMBp([qZrA@mplh&3&+Z.SI([TBuXS^G(17.XBpNs@TFe=c cNQZZJ;/\cYEVF^.ct*^#sOX"r'Tf1,9f2$X9YcLpJ+3JI!r!=0J0=asa>=9D 3Bm$)7glhi*ciV:>Thul7cL8Gj=<5^(3p3eH#_EGdFWGL0'1*Eabr6G)ga>!jr>'g AI5f9r59cHSLJ`;R,#AGJ:DfmOuVV^=8FoiGg!lY.hZk+Wb]G8/fc!N@Le:>-PJ*IhgVEJ0kRSIIF,S,P5c9p)O W/m:=Z[MUAk'$?8I3'p90koZBU@K\\nSZ*P)?)4;qsUHifA>BlN'HKC^!4p<9&;6T qgXla[L&>Pp1rRKBEA,45AmtrrO/)LC,s&PkDSYZ>] 5>>=,Q7RHP%&F1gdHYKJRT=t)O8P9\T\5m/C#Hag-Uq;QK'%0b@@^IaK\g#/IZ6]" KR]!M^c$&XaIY8PL-]S3*h\VETg@_l[I#J4X+21Y,r]SjXQn1k!V\d[7irEQC3P@* 9rF9dLK;Lo#*3)tNrT=8pZPI8[D@K37TH@lASEq@GpY7Kq%?`jhQAfaeH?+)5D\=)Yomfs)g)M s/#2U!<0%VjK*`q[sGVfEhQTW6?)BA/e__"r&9]:'RbgBV:@\dRsGi-q_Vj[O>HQo 0ti>Y!U@/-_#">Prf#]dH\<7]G'qJ_'O8H;2lLrde2XgKS6M9(brX`'i4k;4p=k0& BZVK6r8<=Ecp/HNi%+d&jPJ]JcVA_XnEGKc>I78<:T)&G8`J,Ao4jb=W#e0-13U)C /7?AjBu?uG6g3'`KM-4UB[mQpgDo?![-N;jNDQPXN,MQ_TT3,nWaBj^>k@F81!tT& ,B%`UCt9.]X67gn_Ikep-HsZo<'_0il@=I;"DC/9=#,Le_%Rc=@rg-3]\"&M"s]4- &]plF?3p7djMe821QJl,2@jG:+2`k5qKKiTQ$TmAj*N^6"6f)bdp#Dch.tMH\1[Wc !<;50)X"A";L4BdBFl3?cP9$(LB7CCa;OW;,8?>F-N._WrG(K.Wi%s#M`e"pI;6b- [?K+/1")U6cb*#nSE^K=Q)>75ruegu+f3GeCm=[%5.Pj:UiNR'G44h2[X4u*%hi.h -+,s2l?ScF>:&K](uP9?[d-eFDeb-^S`);Y%m\fg_(8SPA!DQcTIY=N=ZO(g)) C9EA//.4fp$*Q#Ae`DM9A-Q,3YjVmc[j(rIH)qW2Z\6LO%\aaCdL%su*&]7(M9fT+ V_GcI(h`semF>e$7l%1[W:$o)k8:K,nC^Ka\:P+XagQT&*?tOPi"%S!T22im-^fDA 'C('c"RotZg$[b1Zi.dpplp1PA.Dmic0I.o_=s>L^*Q?9nPRDH-#p` :]=QBThupOn;AN!)<$UC#\Qha)^a;)o0hA8Of\#H3@BCXkU8H5XO'C4*;:XZ!88Y/ IQ;t/`Phd,^jf0!.-=E2gr6Y1oB7*6.3mhE*g3aWSJ rCIEsLS#jO49kcegEjepH10$-fB.@f`d-1I=k@DNbN!Id6 :csY>faC1="_J-mS$*"]T_Fk#+?s965>1^$s1dY69GN6C9r\Qqs"[.PJni08_WU)e *BM<9C_+BI!<7K3eh:Uh5F34;r;Urp#inJX5$M9OV7VeW@$_XW;)$4j!%3>e[T,8Yn1l(?Y+@U);bAI!58Y7edWU)0DUbe=?h32Fl:A&l$+7ZC`Q&D6Xr h'^M9OlpnD;b#cb/oD)T!r."d-Su44oBFa;qXoeE4\MTF%]ROeHKplT0F5EY%:KOT !6?g5DdW,$![@[QfOI]piqh`M?!>AnV!CJDVH*(CWFO3:\`2kSjYGF817&3QJ(G0? 6qulNEbg=n^.BD5UH34IoHG\h[@u']gc>.Lli'$tDU%B]:[\c&GsK\B4^>@&1V/B& p_U*pc`4P)lC\H#+Bg=rU^mO3A`URJqVVQjFIb8tM+A@D%Ml8^[@e&";6Yhl"XK>H %O"cTOgKX.90NGt#341*(FT-Dk4qELJN,J_lkqUYCf 53hmR0B75W"?+J&*f>e3;nfZW/s"_gmo3UaIrloFODo[npAS#\Q)NnQccr3X],<2c 8SqIa*L2K;%hcMC$+fQDG2A8a[GR$`]:7;ROj[6ie:(WK>T2Epb&8ikfA@";],=dN )H^8Xn?A#I+HLe$LOM1O;4^(eR7\r#,Se>Y$=`LM;:o]VD\gqX/(cM?m0VDM,r=B9 )G`5'Ea)?Sd34t>(eoTQDp'M2JUmc_<;UWtN="tFI"ERk&eB!er@@\0T5"D2!:tFI ]HQh[nqZ0KF*.I8!/cA;!D3QJodBNUZ'IZS+J3G#hH*X-cfR]'\Wp]J2oGK@Q??39 jb"O$#:r&BJBcnLCZ'\2U=Ge;bDLP&o%;,EUFm8Oc=D!V-^2<%oDLH"q.PRA-HH6% Ck2o#5^U4qs0;9ia4_aS5^RtI&HBXbNps-2Eik?Er`^Bt3sEs+E-jEb']]2'_!e

OLpP491T;O1dXt;- "eNdB30k6Q9lA&(TUaA=H/YZYU+]Qe>IDJV#=FCs.1L@nDDA;@%bio%dlckq5OI#U mTr-9no37Mi=)hp9PmrU\'>3ajcPbl\9X0%Y__!pRTb$2Y3rQqgL1I>p:,AQR?fXG #b'KW>D=X6N*r!]Zl?Si$q@MZ(bCD'gEC#nn@UK'&X*&XX;&#`]`_.hYJW2Xm@0I( I$b;%O[@RT%::q4o!!GU?[WY:Ihj=2nA:O9T==o d(=BO#^cuBgV8thrDmM5JIB-4<<<-W(91)m]^*B5GIa39 T/)X,j-Cka^IjT]o0m.c+.8JCZ@fBXVd/a8:OE_bYT#(K%@T)i07bm]`ss'eL4T8; a%i2'E#Um7,E6AM@lj=ZSi!h5h'I,Z!=LUVUV6`Dp19.cR;Lu]9*ar+@fNmoYeb6K jXl.c!M8+dDF[?S54W(HKk?FsBW4Z94>h?Y_5]p]3/GDWCX3g1+_9q&Q_(,CK6s3- #)M:<_gAne"(1#qHg?FPP7?EhQb4aL[U\T)cK89JJ*Er\\W`H!?Ug*)&[hC^f'8+/ Q1#(2^+3C_2Ljh5dE8GoeT7RnB[Nh8oGF6ScZTf.h\$HLQ(*_G,G_M0^f6O*;c5%=hn\O5)f!I]E`1;-JPfY`^8HM/99'70DQh:kpn ?(6L2*HOnA+&UsL?if#@#rQ].>[S40@((S#f2egO2R33g$9PVR8Ol[3D]_K&9ZBnH>S88HbsuaBoS: :s+,_*;[0!i*ehHIP(_E08E\m8\:Bc.nLm#-5,o[Z%^SSGnJoDI.(mCG=I[,HD"=X a"*;7P"bU@+M5RU>S@AqEB'juXCF?n#mG[5;^C&D6unbf1.qON]O_r--CeH[Nd!0- !r"uhG[#:iU]/@=bZ2II"ZMPaR-'Ffbou\2bkq_@o5I_1s%n1Qi.%EG%?B&J"P/tL hW65YrepK'iMYg\[snG6M#ki[cQgDqp5_:_Ipu5PSb) j#[t,h*)4Sa+RQ'!j?*cY$jY7TJc`]2JDSE)GL6^Qj_j,*^TTD_>bp>BDIs074>Hl 0H3t$J-El:rZMIBQO(Tf.+Tis6m1\u9[J(VajSSp!o-F'@@'9b+"b:0eF76f&Q_p, (P)F?_*92aN[;!F9jrF=cM/`=qPR$0k?51<1-gd_A-[Qf(k2:1L5$\Pm_(RfQW:`iEp:%?@GK!eT99!n=>GQUQ C]OE3V#Ri)p\1u\T*dJ_ABCEU8qI",js]-LD#BYQ#P`ooq7f^*]hMCnHO@P'9[2?> E^)t)c'\e2Dpu]8K[FZ'aJNa^b-g!^1Ur&ZgEqntdDt3Ki4it/]0ki5WQ4[M@J`"= 3i."Z/(RMIS_J\[&GXZ=$"I/R6&kp&VN2;VX5(>2^decf]Fk2&cDFen4BSq*&mqc( g"&M&Z/\(/=RPLUMN,(u%^jgmL$9%t,s2,NN AIO$I)U]b@IY0bU,k[p2f0#OfIN=>A[A#25dh_[(0(g^/:'5'8T/-ch!)_Nf!G_[Z-^DUtKc Mu`O&oPBZdG"DNlUtBho^2&qfVkOIKW4c"/.-NuD'5E)Y-!\WF5LLai'5]$'RFpS[ bCTt#KDMC;")DLGhRUIofn#`_ *;=QPHQ'dbL$"t#FV>;uq-s`VTGY=71sXc"aS*n%+M8$I2W5oc&ADCgEH?%K*EP\P\c1Ka*.7XA/W%^RK$An@o-<6MRAim\tfR'A:Uu;p!oB q#6]Mnl_nK-MRcli9CRHLKS$[YW2JFQKXUrF[8,/Zm$pDj%i8! Du"M5s61rMs7=W(k@6k3a+PX*o<*K#IffYf6i\X'LY@q<"eQA0r"-pD90Dmj"Nhf! 8Uj8SI\)EYP(pkb?nlUp_]K%DaC0Rf(NoR_Jn&"!F"f:lRb]gHm[N7D/HiK,0j@_3 7d!nPK>]-#KM!E`d29Q*P0j^9?O@ZI6qsW?B3!>8RV4Mb,\7KXR7!Hpj4]SDIII[7 )8H`M*([$kc_LGGr5IKj(%VD8,^D(qXjB'QQi]=U@I\'-Glh%SJd4Pf@/aTanpZ8V W@68FdG+fOI+6'?#^#X`b@p^@3$n&9KK=B)Y+#sh7pEIN`X.XcYq>l-n6b>)]]Rk@p?VnJ_tTo( @]#.&^ji1^045l8Y6OuQp?6r%5rp)2g-,^bgq'.t!3+d8!<,bCU-nL=&N=Oq(*<=4 4S9TFpD<3/-au[A"4HD)?a%JO8`j3W-?d*/'$4r2Xe*5>IdWfmj?:H];`Q)[#c@Ta Z?!69IeM@Had\I^$A&4--V>1NhcdX>Du!jVc`u-W(ddL"M\OBpbV/=h5BAIV1O^q6 am4'=cWP#g;.B@L] b25$[\q;gk@*Q)j_7"O+XVk7AD+MVegZHeu$d^fji(7LA8AQ>OXjIBH"@.V;\1Y.n QRkPl@sBff%Vl(iS)Mim\4(9$_FB&hQ/&j-l]MlWU\RpIG-QDSP[htJh4n,>-W%$< I+lC?bf<,T@o3Va2.F%bd]92<.B#C;!MBU$gH5rlq%\4Z,'[Xh2[Y`>L1Ht[/)68P OPsbGhZC2q*nLhu#I@OPFtEErc24u,iHlF_$_6qdTVgtH\l%%,8SH?Oq16nrEg5EC T-0ZLD=5\"Wm-TN>fqCq)H'QLqC"S0[NMY05NH6*rG_l*5n49E5FZpWPC>HM$J;OQ -J]uPF>a]'&WeN&rV "H"Nd7M-Xb$&I+R1-FD>$q,'oiU'@F"`\N?>^otnIMg@mLNS+PTQ#B+oTVq>/AS@E ]>3kMro(\K)W>&uD\J#9rlBQsNn97E_FXe*68&:aRDA)R#0QrVF"OE_X=J@/JH,@! mI$gEn.5"A#sD?,E%7?&/=lW3$K5cOs-M+SIggN\)Jk8gcaeW6\r$g)Ni7uHrE>u8 s&&"4*u+^lD'8j'm"aFW@MXRq%5_AoiBPO-"$R@XrFI2@>97LV-Gp'o ;ggB7fV=k15G\U6Ik1H6j'_c`OP"hrUEjZ'Nmf?cl<4VaQguJ8ftmbV>rT2!Y1(U4 G\T68#[.Q"?Y&g]0RG)HKCZfT3G2lf5(LK_G=E[3Fp.8'/-G(-a3"ff$_Zmc`SK/] o,R2)Gj.uA!YjI;r.TdE,p<-Wkg^J(&FY2>M#;5`0Oi/j$h+i9kR-PmYeSLg"G$r2 T(5t@k4<78+P5,b;/'dm[=L4D#hB"ED_kD^ZIEg!d5[2td3J_l[k-A4/1hP;D_b;\ $asC)C1$(:JH'Q2N:0@J_#JV4](^oIpGn^-VQDut/3cotn:-e:q.&"PWtagIKG@&W Y7maN;j9L65nPJ3]=jr7n6t7-r><N\43A"r2U#i2Z8c>PIMjp[<`A+Bl6G+&u0n bktPkL&g[76D&up+Ejh*]lmIn?OQc:(XV)o>I9M%I.)qoWuR%pH4=\tfbP443X@Tm dBgh$[*_VJhBi%HF&n?gS/UHPSabcT?a+5N-qFq(]#G_SZ\B1$!Jp])IA$ETXrCVR SMm-nrrTiI("?1;M9UhoIJhMojFWmX\jAl-!T4c0j?C@IuU h[ZW0S(+cEl.[NYl\&G,:?YlZp)j_Ci3S)7HB4HC2N:3Yh'ME:H-i3.G\B6N:`2AD iJOG),Ee/)Q,)5[#20=_2Bg(a/.al*Y\hkA`Yi7a*2?@NfWl@J3ZHk])Up`>XqCK\ %=:$i-lqn6_XYkH`jEqp=hNKlXGU9VSP7=]N1d3CJ:!-KW\d%f)@^d=KlT83HrGR1 R=MmeLFnMU.uWu3)84S3TF\ ZD&c@js<0!A31jS2O%`^((]TF_`<@Z3!V(]mN4dnGPK++Etr*"[I$28MmYHi_1*OC qHu$d-N24%4rJoWR)s#8r3m"'[:9#8Ye4lWq]:fl?c_/3.upsGQY'6_D>f=k&$kR6 s&3_ai[r;t(\1\KZRB0.j1e4)IMq>?LM2`%,+LiPn/lla_>h:A+0G?/qnHspae*2E S&;uYr]Cko6VZQ,Fl<1CPfK,qIc&*(^Z3^:o9nbc""m%H?A])EjF9%UHOYgU"cORi CK_)aFpXDO4"gk&CP)Sc"R:14_H2T(09Z6o!r3N.0hHg@k5/PlHn^uFQjdn,]&/WD lk`6X01l;\^<8^j_Br'44BN(2Rq7U4"HG)=NN@0@(BOeRkoJ7&[Q.OC9#-NFG]\Ma 2;qn,i`-A%= idN`,r'5Tbq#U%Oqa2%gpVRe@Z!W(u:I`O#Ld7ND9Fh.#Add8Q/O8\'06ibT0V-Ob 2YZeuTAa0)s,WQtcqdg0T5lc,F1(Ja_Tj/M$G[S,QEFKKqdQqXkA?@?f3To%-rscIMJH%NEni:X].;oMbKAE1\#ddf8&NZ-\5H#rj )JS6dUsTY?*iVfE*9',)aF)k/(4B(J)F]hnKV8ji4tU3ai&A%%eh)+51fk>u!?,== f"2If0fYS@uOX]F=SMFR#1& 4f/)!rNR"ReOKZrO4n1cZ%6]<bCi)ARjX4C:6bUJm&-] !B"EkN)`XodnrTN%Q9,qAj1iA^rt*II+F[J3[i&CU8_./pU&c:$-Pr/8*d%%c\>f9 Q8Gg?+8prucps>e&I!4]Y+)MT%E8r=#lIrC5/;[!ndu^i#2cV^NbIW$3`G>s3HOs_ V`_u'JqDPTXV#p)=/fmp!4K6B)E-B`iFC\W'5\O0-XP-]Ms!CBpS5L<`oX/1mLt)8A13XYD=R_M8LS#S$668O"H:_ #Mk>.n1WpNQ%]#KLNs\V^%+NQ$A.()!o.iWDWr_8<46iTb:/kDB^3Bh2W;[&mEPPf _k0T1%jfn_&8a`5Sc9c_+;AT5l=X`Rrs'_H6gQb:qHk!&pT\'">rc:>4MX2Zs&p6: KE&CL%KV#*rd.eR]hUtY0;O;,.u^pHP@@OWBa#fuUKkb;arLLYF1%Ad1?/a5%LrYXboFYs)"/FiTkqDgb*@O1,W<5=ctTW9djf42AC5]OH;EM6In68&XiQW(aS Vsl;aL7CsD3$-E@+eE^*!WQ/_ru[DP5"kQ/P2q6eoYi*O@T#nA5Kb"0l"/kh0.+U* 8/_eu:W&EY5(?82TB;KAn-A+/U+,rS(q"FBd5=Yc&5tXQM=&d+bu=U9e(A8p7r?#Y "43uN2$=?7PYVt2)o2GR3#_'ZKhc?,1D'?U"k%$4$K/\p_4a,Kk(l6F#D4MaGlg$4 q*c8a\)0$1$fk[K%[hsMq(Vi$YU)R5*d?Qb]j3gnp5ep3`@FbD`[!C;qf@M;]S7)B oh&*ZR\r*.s%Sdd"T89[++h2bD1UYW3]d*(V];oC"+l"'\dnl5^WKf2Q7=s-XR*nZ !5@<$.K<^jphMVLmJ'TafS]<$P3bo+m)L@T_#L;X"b_BpWEnBY?C9C3AM<**q[q$J _!)XHp*ed+n b("AgqVfL<'kpW7&HV;XE;aIgRlm_@'!AijYISbB#DM)+B`7c:IKOm[&] /Gh6d%#f$M`hqrmp\Z[,mXEL18+c_H\borl$u2U\;\ee[H60MNG/04eNJ)!jH"<7& G0$)#naURo"7Q@%I);k"s$84N9((LB(Y"rk2=74Ml8[gY^e"t\F8!,(BtD_]+>%G( 734@r@c%Z_g^Tj+Q`6CJEpA0-?p[F(>!kI.7hrPj)7u>/X/ZVFO4(c^Y'S7;(1S$c "Gq&te?;Tc(fiFi"%R<]FV\3oePX4#]MRb<"r=H$n-$sKPD%WjCH,hnrZJT>b9ZjK EcOAY!YG@mPRf9/2`RReE3t!l'0<*&6Um^W&j_M97ZEdf1<',VK:PAfP\e^QP?kY>S@uMk(D:0M_Lntk&GVN 5/At4i.M;^9\;kra#YC%,CPC?+oZX.^:%DM>^o8H^V*4ITMU-=hd\n'ce>JX>C]l7 (Zpn>pYl/H"[\SjTZIUlG_Z9+)n*3jn=SZgS56eZ&pPumd\8kg+8i=bZUOf8D39T7&0upLU)rOU.k[I)dI?p.#,^5o(P3IaI$QockX3!Ug n)9mch#r38dp?G65=G?q'oDl9P5'GNq1gZDKa9TPs(YN[2%\bskRHI"!q/T@pM'd( EY92HIjl]9S:GZCQ>nIEo]K>nQO/+JUj.%HO6a-#dHDcn&;D\.2\hHbcN&9 R;@`&(C>u^Z*K!Q["-W4?kW5fh@EsZnE2GlW87iK#@ITki<9dsbqm#pm_/)-W`2=o)BTGGEOP#lA?2]8)LAue-E:MYQsrcO7t=f)gb-@C`\TdTnl;nPY,H]_iB bb$:DN*h%*\FMP!rO4!,hb(B7AYIX<5^q(l[.X1X.`f!c^h)N%YN+4Epl!/==`^ba eEer&"oN.g3WaicA^;8ckfi3qk02<4`FiV[q`OKug('Q/YU7o=!MG=90E>)QPQk@Q EPVRbGFocPke%2PN.Ek"5onG&72kIT-@Prb!pt@-l2tmJp[(d(i4F03P<.Kl*]pmj g*+30fKAs#A&,sB_+Qj(&bs6;@5pu.%RF1)3 QrqUj"*r CA.?I7]Vp+Z9[[Zr\"h<-C>g;[&+^e_]l-mM;:?gCRo"F:.;NAjEEH"BAEu/'upjm j8AIXI#;D2Mk^-#q*gF;Kb5@QH0'g.'_'n!\K7E6:_+[u7Z_sdOCqaY7nS;9'&pZ1 '%7R@TKC1mdI@UL,c#+*!uh!U4%A.ud$R&C3=P3TK$4b4s1iU?-Qmnj^LJYtCC`'S 5P>'9^\QX/2XteT!:g*,$6m>O8d!qj\V!]I&+[-epfO$]:N?5^l[LOLI5NDM`[ub\ K60cEs5Q3\i."b0_n?J6Ee/?>mnte*LLd#1@\(kb9rJM)n.TVp_LLK$Uu31^6S(D' pj_B)B>B"=i3S\obmt#_+*&Cn$2u%MIiD(Wo+t:(5?i'Bh:B!9J'3qLD;%80'LE6g AnD8#P/Suq[`iP8%[ZuJ9p:=VbY4190sd8sEM,>TgcNOQ1#BJ7G2/U7raX0GYq=.^ /_e&'R;:&)B?\3I`5=Sa#l`Nr1KJ62r(LpBF8 M^\l`-1/G[GOYLJZZd&BC=37PXHHmuooS+$+j09%e-8onRj+O<]ZP3cj.Y]6BIaF+ 56cU/69V-^9c(3W<:]Re- d0D#Zte$GjL4oN.=NFd;W"L&"lV%f!f,VagS#:8!Kn1?28mHr_M4 1.Qji1Ggqm!1iVRMu_X6GZ/ZgkmSC,'[s-\@#-82c'Zl;9^RST3)]W*8_lX\>>id( BlKY-[`Fc[ZR'ek#_[gbCa&K*;L=q0*mb:!>c0B_B/Xm?N]]Fr4ou>sr3sVO.X`D[ ^$dtVgU:eU06rFl[VRRuhjN31Q8H*<)OVn2/iFV-@+&-BcRnj!$3Va3YBA]]6r2TJ# D=G,Lo"M0qpp&kSZKqC_Wa17\\---q(\I+2fP3`T:\]pI`YmJC9Pe?8Y(>SR-5QB?.g#N-?bX@10R%&!S^^jkc#BE?hTV=m6C.6S6P1sBo.Cn+?I[EhMgJ1So>*s2,BP.EO@ 9gDcKj:g$f+fWFOCiM4VBA!Af8uFSM:7om@-DBDbBIkC'ccALE]o3B$_ZSUeBGq2e 4!*l=j:73W0).jPOuqS\BI*8D(3$?@1c:cZX.aX/CB)d!20S=ZRFl1DD/n!ME;nnY 2e-m$AbBf*4XtcEP1$=!WmNGYW?(K?4lH.j(oB0S@1VH3%s@EMb..>[jMt#-Rl9B5 .cld>Xk(^0[r?XY!jp0(*NNDfmab9?+W!t:)HF.f%BE.Hm$,uRVeBoc?FPgHY$a1a 1)_D\!ON%KXa),(8]GE_:9,6Yf16eP;HbXfFbAoh&B%l^J6*;UGXHpGU(<-74nsBm_4MM)RGr^`*I#/HHKLs[gt2Ab J$&4Q@]tY8OXsP/@MK6tX8j1#a,P#=F[NFGRpN#G&E8T]j&E>uc !?s/ucdN&O#D%4Cm1'EYKFlWV^bmM1h>DrDH,L64Ws"QJh5XT_^tUu7f,pk-O?#:eci/k3EY#s)2Uo>uuB$bn"+2)B9m357f&WD;\W `&Gl'>,4`lisE-20on?sDtSe?R7qLOIhOn^">,DGrsO'$cB(sY2Np-%aY2rW//hkG 7$Df!iU>1uZ!o"d!s/=,"nS7^#5HMV9[*hj5lqfWPRo?J._n5=!!JStTN7e[!au"Y r*]El/j3m&H_ohLQ$'.WKQmEK&%>.?bD#5@1B#KEl`9@#&:`N'qCc_m?TL,a3]=.o+:Hi%12W?s:o-e0jJl=jObYi>W]_CRrgI##T2XF(Bm`Ll6'iI`u_RMq]H&ma+I\l -hYas#LMC=o'diG%.Xd16AIJ+%PJ]*9^7&OSp\A>YL1_,aT^u!-?01d5Bq*GDaPFK ,*/BmV=[lal__Pfff@m[m,"]pIWV*j4lc4^)YeQnj,)=P^?jVc_#NASYGt@rCd._$ nDAEcefOkaSpphA[9imsq6]GQK*g0'7:(*G]&k(/c$M0H>p:A^a^6Y?qWF32(K\gV /%!+lIo`#i1F>'VMC"_@T%:R"*SqQ+JH(BddJ=p*]hlGcQTsR\2CT;\0cbG=cPtd\ 5H\dqpVQ=1?ip*f_]=F2/[1tXCaa6/^friZ=[V\fA7LXo=[gPC`..WFP+hl4FZ\hqJ@eIhJg:!WousQR!WFSm8iARJQS[= IO%^6TH_tPl0Usk0)V!Y:-G]m*>V1[5WsJQeS.0;M'sAOC'P#qK$tn+[EH));GO!? ;`DpJ/>ojN;VT5_9uC[f&o,+5njH*!/8$e3fa[*/hY*K.^14C]&e_BZ+PKn06sUGE 4k^]GhW)'_?-SGhPI$8dRf2@[a 579U0Z"5"9hYDTTF8NN2gpuTRd)qCc.eqt00f923;&Z+r+RMFo.9#150Ga7 jd!s]bi*g/E]ip'*ebT6U_RF9&QBI3bO-G b:)E0)!19Qin\TP9j>d#7q'0^LAfbsnu&#*Cu>e*"ljd_Uf2pn^Y"3LcA[lgdF`id "Q0klJ`[$pd4G'H/ENm6Z^.BBaOP.ikuY4AJ9PB_4L'G^jL\4>bQ2P8@;?i=YJBF<#G,Zm>GTGp&P,BI^9%"J+KrL BYRGVfXX$@5?HuR?Z^mUm$&F)\'GB$Vg0N1\W]f>oNPn\SLW[7Xul[XbLtL/5#`G- I*8eWACaj?n*@k/All-*rPm[4LtjCBF:G`0ID0 -PU-R$Mjd0j LM*RgM]=QI_*I9Na&e+'BPK,?"F_RBkAEWB&]% .Wp+`>lkOCk=ISbd^?HEA`D&lI0.,S;dud^W`Br3BT^h09l*gWnI*-^/tgK.dU;fp iXDncHi.C;f[[7QYH-"KA3#._If<.AM;P[R8F\p/?GC1VmMQ*K-p@PHqt.q$5G2>* MneZ_Wm]NNUmb,G4Ha_b.oQH%";,5f"a+\ 'YM,30oC/hERMiXUjcg"YE_*J"s2:1aW5A?L4RPK6QN_dR,/8b!.q82WgES=Pm9K, -a_T+]?kXR@],dIV^FiX>Gk56Zr+GOPTJ='.)!erlSYK5U]?tt,QRDmn^%MnrdPbp )Q&@^2I_G%V%"J^A+kOifQi*-mJqp.eZ2>];l)=fZQYT*DUKi?^b=!L*5Dg(_"VbV p,Vmm7Vnb)i3,giK3R]05kAsiUG8rV6_;&Oq#!#cE-j/2p/Ls"*N<2,g+\rc"HOuU C(6t3D_]X$XK6:QBE>4Em_S?n;d-Obe2pEshB]!Wb8IEsDO4DVWtP-I3:15J-4.(s N)hTCf1@s#1Zpa2DN`[8_.Xm&[&`afAS%EV=Cp*_8SDrg.ls:9G**_J`Bbl^Yes`) GZ:oa+NbNEV=`[Y=pRMN27//PJkCI4Tm/eWSC@Nnd3!0hJq('Z"BKZU>Md7j$KNN< E"W4l+CbfVhJY(6r4N\m"[@GpfEjaR&b#I;Yi:&`8/e^4TVT>(Ha8k5+Yo8Z7#BR% :SL)Ar8D)R.dU7jWTa8^$Er47!P_tN qX&#?cMnj]j4.j6p@urr7pqj0!WM]'dE1;%Ae)O-fU@jO)Z,3l[c[%=3I_jj=Z=XZ I;k,Z] jAS:f-[hAGo"I*OSXaBfgh?G6-oZsfE5MX;!1a(9^rJ[p]7.YIpHALW7ClPh\5\.p .fK'jl0$ed/E;+"DMc%aRLZd"=i]d3B1QX@eMb7.9d$hN 7\*[lF4h55U'Z?1&Dk5Ba#icDALcjGaQMU'*mJk:NPRh7\Dm;m):lB-C.0ZYRg4MO ,AV+[?OgMmO$G-!C:43;G-_dL3DRBY:)D4TE\a#8mI5 .c\N;'ATp>aUB9jX*Wns\ToE$"g?on&),]hbLr(@+;s:P=7FlrBE#L1G^e$CEWH#e Fif687PCO3"Mk%M,mJJF2da7QPr?IfJT#1>'r%.h)90`)?adb4/okN]Cifds9dRta 04Xl"&Ej*C*Kbi+4pYt3'VLE#'%^QNmk>E%*K8qprWEKQ]NpG`;\%sJ,&_k#2$3\_ k"WY!$!X95TF[aiQ0^4eF4'5s'N%m1?S3^pWKBE(``;cKVi;^06SKm'Lo%Yns+(#oa m$dYG0D5ctJcCIg[rc!4;P3h\mJVf(k^b&@Z/55+ilpdS52q"$0Br',R&f[F"96,! (jj.X>"SPg`AIhgs&l2_BqaKsU$8`ne#IY-/ouCHIRXktNb"D,5ug2:aUOhh6_FGS DeEcC7#FG0W$A:Z(56ll%B9TU>-N_iZi!Z3CE"'I@=Z+Y3PN^()4Y8i"H;&JK9-Z^ .,@E73$X>!deO:X=Ei]<)-f>c#iomM>UQL@)>7Ubk7;]'/Xd'+KeBdP8jeg"<=*f& e4#Cb>?/:NX"C)qVBOff3;2-Xf3=Q'&"$X;S12TIR#qT 0?bBDZ?cu0%S^[o?HE_eWh^sd)2)V;JaqV_mf<_K1&HP%3bgSpH?d!M2FVZX<9V5K O'd4YIQuobO!4O-,Jh,FPA2]A:3gl^,,Ibk;?n!LTElY@k_rViZ\I0@!>k=6#(12g 9h.:a_#Hu0o+[s"amIR`H9_OrK'mVNdl=1!_Q'6h2G%&213UhTX(?n130`8B&U$d) g0/R3]q1O5OVr_9FEir09K^08Y`7IHN;5baPgVqni/^q9dt2VhJg%?ZIgl;nq&qMW I'Ac\5HMN<&*H/=*_a:,Jq(GbhI8[c1.HNTg2GU7a8+[U_L(bWi9pg_kT,TTE,jjP q2b"9AgR:>!;n#6S3O/3@/^3+Do.tUjU(hq^2PnPk[RZQnU0&IC;J#1o$75:+g! (S18Bj*MrecT4F$SgL\UE+>M[B:j8(H(oojgo10ZrelS&$d#$X9BS%EaQ9#c39^Nb_RnJUmb*`*3T5Y(#a^,K6?.ZOBc*Npg]c\S 'rZrbDuR@6PXi>d+S`S.r3*u31;^.UbbY@b?si0/%t=pYl_XM?6@.&rJ%*GpqNJ-j )^>:/Sb/hEIn4mpN2Rh88Dp.kSihNeBh5Jr[/ #nTeUE$\Q]0^sR\2ibn)APTAiW7H!S.sXb&16-(0AgWP];Io^E7E>>/g+TM(kmHHM*p/N(&r07JBS]`nsZlP*jK>&`k!?]\: 0"$%\2mT$UG[@P&;.Tgk"8VtBF8G]Db@ZHGX&AuWP53X>ZpF35'aJ"1<1(*$d:$QN qE!2a)R>NKChaAn7O4/#M\P+FS[8u""I:jjn=$ai2;Xf@*]'!7!A";uO7-%cAuX@e Ph>fh2J3rn"U#^i1=jij]g.A0/+2W,5dJ0H"gJ(,KDu2U4'=r:Hn!i2cQ9Ql%o/>9 WkLL#8alPt*o=+j++BY)hoXJdM3U`8ET$jQL3tLEJI65Wj'/n\D2)kZ/"9<&1F=rZ _]IN0Rb)e:\ql,2n%5p?Nu(-OD4us^JF'bC_N6*_s@7#j[>WZ<]&-rKUrl g5J(o(*!7Nd_9"c=ilf.6RKkp>NSMnl3$=--W6[oXYW8j&gKRE9[=.(n'Kb;$E3B,&Tdt4WFuK X[6cXU#_mgO=;"SsPKod&>(0i#>*iUD$4#^4CN4.)X^W$(Kf I-U5'eet^gH!$Ve!=t=-OF=QnH)?C@&ue7hdG0EL1S`a3,$_Du>S-hN#_c]?ic"t7 ^EiGg$#n^a!5NqM,h`sPB`IfaVuV:m0)X]-E7_Blf?t4sdNCkf^qo:DhK9-)i#)_3 +8!PMg7A"X+Q_!qHEDePUuun&s382b")$--T.ob)NPZ:>G^Li.jq+4B^[mkn"js-0 4(_t34#j"nDh7h24.o`jCeff+a.R$^@ccKa5B@P&/9$^ep&?Jgj6*iNrbH(kLugB4 (k,9^d"8ALo@$?5nGINVkHh5_XXdETs(h>Q/(T\p1NNI0"p"FV9@g"PL1`d<*')pY legR2.%Jr6TqQfL\f,UusflsTl@4i,;/t:6)?FBt6+eE&JCm8U7neCRf ,5;u?Ss>cVfQ3>I,CoUI.5^JRl(*?Ep,G&3XaJqoTme^dM:u!s)'K^r$A"DZl%De= 'H5RYjQ9DuIrLu:#*Q6[N>gTG-:g-Hd)75m$p=P0Eu6J00nudo4Z5q$;MGn\M98>V UNZ2Ng0Z0:k_&0nJMjb?*F%=OM>` `(oUGa42]Xn'=ln<`jdM^cNmXHh5&_$Xp0_YZ?*9SLq'8lZ5R:qV1P(?gGCSGPXOG GWr@%]5'BM7s"\'*rjK9:JAK`gWu2c\=`]\4"7uF)t1gqIjFQ=Hdj.Xq25F4s8LUC igOGjh!htpps2PO][a&lfs4-Q]!a)Ug_@mIR:Gj\Yt^o)pqP%F>0g54bLLHA.Miu? dj\SO$#R!Tm2#9]G5=QF]uEUcgW)K!$hsI:'!BuN;?1kR?Q@c@?2-823nqu^&T/e88^/[G0J;<*4.p-,T#;[ !j1#"HF.C'TETS.-p5;2g^Y*Jh#EBYnd-3b5jA=o!E9;q>I]NC`D"g\Y)_f&$XJG+S!+JeX1.B?UgCk.UfRRVRF'*WOGH/Dt$8h2)SjjOgu+b902 W5krb$:r!Xi8i31"p"J8q7hJF>&qI$T98%8J\uu@J03^1o7)h=HP1jm+*[Kuo,h?8 kPQ.lnT_D>j1ie;2g`9,$,1o\+#j4>5(!3W,6>m`j8Rs-o[-LmA)uhe,4^Rgp8K"a B7DK*qX#IVrjd/'i7H/dhj'eFOa[-?j.jKd".=]CAH'=d0Yc6Fr9&Fp'6q-F&H?%T I_c!^,%!9Ne-dc<@X5O?cF^oFai=^%T>@W;q4ntkX=McO>o8#5-fIl3nRs!>P61U& 6I*,.JQIEL.p(q3bk!67%iJ^g:lZ?f*Qq):,*"[N'sUOOKR1RJ#8;,F$2G`t_@T'( S%p;b[4L)BKkP+g.Z8D?^#mnfU90 a2dqLZUSY)7[%UeO?$4C77Ch#P1l_)1b5PBC0J*$dB@-kBXe/!N8^1PfmJp&5$,Ig #J`.ren01@pc8q=K/E]s!<.-FCZDsU_&p(5_qKR6StEt_I+fBo1;ifS$UB0Sb-Y9F =Xht+<>sg79lIdW!OiR?k5Y5l44o!9r4r4>\-;&FaTN];,,!Eci*WQibFY0cN2Y_T jRK/TjD*9,F6$!%Y:>M2^1%?H"8lM4\*mS.4hY=X^2/P-"\j8bIJWV:-^]C6fLg^8 .8RZ]W7o$*dlf394>#(-$`)7Qd1*@,.p"gYPCOZZ'-`HR'cS;`RELehFfIb;fR>n_ ^&l#j74d=Ge3D40c`tKk`,8g5f#0$lrsN;T;Q^@K'9\%QT`j/bP)+iH:)j(DPrl38ktq342YfLeO@,g*JXm]Q;R3/53HtW*I A(ps>%J]D^^uY$`m_U!8cTOqj,=bkL1SikC=?#/Xq6pIMY7D2J]c2Ig@-lJe`-qZ7 dS9I\4m1e=^GER7@57SPE3p6f? &EGq&rn4[H\^^%Y_4PM2:Z_h'2Kj_,dfJmjR40ijeHM`>@[WcGW26kj);VWNZ2"fb K7hSQ#?E/Sf1tbT%"A\'nL7a=C;1(I09aa<)>ZlBp;f_kZ&uX!j(LnaC'PXgN"-?) _B6l@s1u/`.:&fm'R"6[$qNicb@K6meC?eE5+2jNm/[O/Fod?&Df9)CGB,$[b*G2a k7?kASLRNqNnON-9P`0V3W],N(MKlM3^hO.07gj'4c"9RWBJCg()4kbMM)1*pd9R] pUTbi4b&b#hjo_=Y>2/&#r&0alI&m9JGli%h#An(/V*eVPa\kQa3rJK.8#eg<"BV7 ATpIk$G\fD$idY6N;=uLdo:YJ,cP::g*'t59e[L+l#fmI_\B:W_JU4Pe]93YrkU!8 :6*XFKtNEA4kf(q#3.eX\D)KphN/gdEq/#H^ECo30>)S"s7hJr*f:R-hceRH@o!.c Z2P=$=K ?Z;\u_l$>lM>5E-!9laTqMC`,O2^WZZD-1hL$m+iFqFnPiF:dh6>d>X0:5QI9IL5l 'F28.\%mKLnh@G6o2[KJbC$hU]<`c'?WiU4ap#XfX$Y4>IsEG)K3LXGCE^83'RLnr 23]qbreH`fLt3EbD8:N&WHf\m#""X(-muL)l$XIF^REWTi=FR]`b,\?oD+:*!rZlJ EALB"Fr(Vf`?kX^o>YeF04l`s7$GDI0ZcTZKffNf9OOn89lf-kYQ4UkeXlR\eSKeG TgZ4jB`s4+IF\%8>^ceT9BObS_b-2&^"SFhs()R#&tSj3Ck#c'SEGs,7Z6g#=J_53 ^Fl+*;5+0f_sP4>D?"\-Yu>5hWAXkYT3o';n@/Die_KJok?m(6p&E>f9rl7%Kfo0/ JTAG'[tV5c7`Cu;;o!??mgT"#A&LhU>SP6Z?TZ5?AcXsc>_89AVM4%g#4eV^JdHu- As$N"e-mdY3N^=flC6mqY%E;1BYhs=@f%/Rii2`))1W+/A=>7:U^j+oaL!+8'mR^: 9N2Z/G:l]]kE>ZM+a&OdH>@oo#%+qgPWgbI5(dd44n_jRGa58]i@3s"'53l#1:k:A gWl0kjc%iK/V^b_QINp6N"IGB8a#iGg&L"tD!,VFa)lQ]1SW,0->PmF\EB3&%gp$65e?r$dae)$Dgi8t dtaoh$'>>;?bX1UI/U2?ferAEV.ljEo^?P8dfL!RJ%S#&&m)@^;QL0=Md4a]E&g:: pPdhI;52I+r/#^Q^^R2T;ga'B^O@E*GqlYCb&0#?H`+3Gp<3gfDpTsRRMV#h\\0>% cSTPCXSs2H@]/qYFeQTunGh]hjGuSfJ6)u,N9ZU15m)P. Bq<_3!V#oBUdc*(7?c;W0A;elSU,;qhPJ[nl2o']&_lDE28F]EjC:^u5T1X/5mMlB r4brcC)9NT$K]Qb.>rEP^.D:l8T!)-3`P@GMUWt1\K/a%Zj6/s-5,R6n=]qAQQ?98 d%WSL2K`c(T%"'r[*l16"()!-#oN3E2'2OJ/E24-W<%E'l#"SMAiUHkIlnhiO:Z1n !oR+B<]?.E.jI!'q$.Xb:si+`@lY;&cVCg%4oU#Kb70>8t-r41VK+4\*7Y6Wjsme?\9SoSD4ET;AT$,"Z;:UZlg[]aJ4NuQk@3WT(jGnDIf #cT0XZ(DW&4skq)71jsl-2HmkHJn\u\AR!6+6?Bbc"EY"jI[sEn1)QP0$b5!BT4DV_&j`5=Ju;TDj6Y4Q3t%+\Ppf/8Y#_%ja%pG4#`Z@c`TA' (AVr=!9_+%Tj+MG__lba2$Z,@bu3@qcBO=AYDfNKKg.>jZolO%grrjt0s8(mEc=PaBZ$O)c[9TY6/6&d+l.LU?+-Nr"N3"0H^YZ^Rh2'k7@(>/C<(< _ktq$FA,@R76OBR2=oLbMts#!qNZFCn:+Im^6g'4-cO/T!.V@@,b/&r9[%.E6Y+jC m][q59cmVUNGFqTn)"[ND4T@3>I:mMic*t^O hr+"-ZhQ[=ptRY14pM!J6Q/\523VA(eK2j0IR!5^_:6X5@rED\pu+cd;^k)M.XA952S(VhD J0jp1MVuf4ESY5Mo/se,_J1s6\q$`>X9j!IQJXon/"Od%K.I#qh?8u&NmG"cnVU.B /;h=e9qV^f0adY?G$lJ;)cJgpPD@'l)*2K^A4f8O5j1UBE]_-"^!BC-fPl@];dI EJhg0gg1Gb'=HgF[fHGZgEs9^NQaVC$Q`sp)&!0:X[c)T$UG\?Rl\(``'kPB2]?pb aQHU-f?](u^WE2kWfnAZWQj_8Ado&X!D67b4LKX$=9fH]9J;r,lfP?&HEOG pnJkgoVP3+NKOc(Y'i(->u'XGcru1'[6sST&aD^im@fEdN7p[1p;ek0Ia9F`NK;4. #4)MBL'oAYAmtbsO;U..Ke@>u,Q=Ie>JC".hcn`! XVh$No(6T;As^:/I7io>2&cnE7ddi3Abb@.:)7>_!W"^(i#V +8#(_&f:BV1[25.`pr?5W#Z&kJo,ae'/3NY-k,,krH.p`1Q3I-d;@p0Ckc&RN>0 RH./^o[!)RVi-6MV'9i66G>r2kDLn^#nc]+IdBp,fXpLcI9_8'Tq@e[q![C7jc:Z0 2p`QUCrCjN@3D?GY/Q4U-q]'t\-bKcKVAp-2rRpK3C8B\n@p4gdKI&%&D*pi!X-gK _GKus5d[gr*'h%!H_r%$C,GUgSCfccfE`XWXd@!bB[_9doH>G)f:5,9Vbb4reHl"f GnZ*I)J%Y3[F:Oa#AXUQa2,@#_6&nc@:bLe=@3S7`,lcH5PSapSH!Yab/FDk`,r0! /safDb83gZ5lUG7AcVgOXAS0+c"W^Gl^(;G1hs1VY?GC_u:OKJEq3+7b,"egQu):ojcF%jHh]3!'%& AUq5tncC=a^d@;i[g_a2B$PG:(W>Nb`!T#?8/eji2]4tuVc10-\J$K]ZCMX,?fdS2 Tkm@]$2i]C:2[9]i2^3qBi[bl)sjim3Jn\hQT"^!<7pRUG3:'Yh\'4)%XR>pBO"*r 7FPA5\nC$6VrKg;IeQ<,I66Q\$X2g%Y&a_(iaMP-@dq*M%=C8WeM8/m@e-^$H2l<5 XR)k`bc_P?0#&5&eWHZ2hN.]uB\H2T6j*22^ONK#q?@)Vo]hnD7ChZ.Z!f.Y]p:6W c&g1Y],iJS8J!b,:bqJ=1&brHF-W\c.9e]#]t;Fj?/d`0dN=nAc$"Q>M;<%2%p29< &9cIB>de`$@sn#U!,Z\84T]mBg9.:F_;?;?<'2OuJA47W"UQlE3fW2Q1tA&EV+j9d ?Sp1'2I`RIXW(.nu6N&p1V'ldp%#?UfYIOMs>RMQ;l[f.)t'Pf\'JP^6>E K9B>t7KsFi5Q[h(NPL#d59=d'IlNkQpkJfcPA.-+>+:c54@lT.(o>j*(lq\@7KoPS `p6W1*3RK`+ZCT2SEu$ODB\,250TFO5oE6[HYjOKZoJ*E6[Y;M2t5Om3):SViUunZ c`WJP;3/cP900F.ml,(?Kg,^qM8LEe&W%Q]57G7AL]?4+nXK"Knj<[lIGX*N^@HpO O1d0;:uH?a_uW*+6SW!kd?BUP1(jQ$.e*5Dg^!WSkDc.HfDTVfHi7&em]3EfeVm;C 1%-lF#c)Ntm?Fs@#QWc&-,XZ1eJjeUTN5uYDfe6pG_-M$$,QK`=3nc:*Zks+&%Mf` gE1Y=@!^I\]VK%H3pQ3>,Wo9\nc\`Sn1Wk/c=Bd:b9DDTNBYPlIYZnN`q"32qRQsF dHgk<+%e..`;[B2lgG&U0*i[cJ-oZb(PLcj!iS@]nF"j-6nu,W:_`0r;&JFn*9L9? i`[BkW!GdgN[[LbW/EVPXXk1j\5[bpY"@VFR?&^oLJ]GRe.)qm91oDS2/Hi_)4AB3 cENqrNge3CQ_Hi=IPKU6&j U7mQJm*@0*BLZOH)Z7#r[11Q*Gtb=p[=(V#qRfZ'W^OV8u/APFfHV)u6!24i#X lC2FGX_+e h/e>#cUG=s6Q7VnNI&@o"/i?[IUDm;6-?SG;JmIGqYEb2O%3,e\A`TF?$Z+>l@4;S hS*m_\RPB8gA\D-\5T21ade"u!$kr(6]O+DK3SD*`[)enrjS#jH<-j!c<%2]9d1>1 [Q@#;1XlW1$E.N2fEW$sjn7:^L1dfgAe#a>"htQBFi,.%W]JBGT')0\E^rig*h<7* mKgN=J?f1S(tsmV%be.]+Oi8*YsTT36lXm:*sXKtU/`!eZ,ONsdZHW,Y!]-cS%ra- W1>8M4*JWD)i]9>G(\sJ1E;T_5lrB"*e9]Hd_!cR?=;T3l@j`r#RduZb!b8=%?taQ8uk(J&[DC"W=rPb2N3>SkjeT\ @OV$>7/4I;kXVY+3^mM;19#FHiJBDbiFLp]8-G1a(MK521ru&_?dLL5@@6n9S8qt&X3n.4-Fl;1idm6WL?_0u.*bb]jI;_$ .o$Qc`VY1p#HNnEgY(o"!.jRSqJblYs7^,@m,-R03-DKhS)#A,SA6uJ@LrHbhL7+s e5IU*!;h-@LCYQt04_h#s$77_$aJGP.+X.qisjn`gZBSbs$818=K\n6Is@,T-P,us ^E4JBKUVC-(?;_Nd2+_Lcn(RAWrqcr%g;n3EQ.+m;NGb8?X.#fSeqDj.tBn!5Y*t( 83[X_GN&FlZ+l_+J+Gl,Yi-'HN(-qi+MMt>r\&irXh*b =>o2-!WS(@9TQJQYEB',pJZbXdn>Vpc(UUL/ mo&QQW6hF_2ksNUXApnulT%p4g%@Ck)lgB+Ds*0b3(&cJ:M6Au&9E-fV'7ch'?YK.WDj6C_`LKc9SYlSY3l`3Dpqm9h!m]D7([76D e_?AQ=Ri,1$M4h967l#bC2?n;SsGhsZBSbW_>620_e:/f/m;D0f7F"n6bkd9%SC70 ;,Q(n/fGppg)j`9JA+-9[j73aO9a"W/b[h_A]hehO:dI[rX4Qp.mnSX='^>D^VIn37@R[D;f&HI#hoRjm:CFBmQUF_%(#ZqMI. 9gS\YptQnei^^Q"Dmlm]\X8DbPbI?_cKXgV>@8K@h\tter4b%^`>[TB$\(:tq>L90 iih79h#&;^k0`7n%OZ^L.-[4F'CVG&/sd+Hmk=Cd5<)tuM)O&eWjKDe0`]aTs*,<0 qu:qX'-&n+bF4#YD&6k_Dq,j'Wd&8_-s:0UcdTLBUh1RBq.ZPh7Cd_60PFnh)48)a eps/KA7ptInKhjQS2CY^+7Kb\?t0W'"]t1OU4,;)3WJkZ-7TIYHU&LbY$5V=Z'$iH >nV6d'ibM.2^Gk`>6)j+2fgl4\u/FE'IhtC)qDk2[.-aYbsJh&cJ:m=gh@pUR>C79 n4/ZS:Xf\F]$tn5HM96,W=jHIBsABI5:`$[1FK8U&ITCTrd]U!88VONX.I`LfJbUt 5muThh55<3i!ChqE2t1kU:jsa3u[JlW)HnJj6MFds6T@WIDG=GiBXaN/WIE@:9GilDJGm<[LBEAD7T4(ldN68\BMg1k!UU&s)hJ#V N5c0)_Z]XpK_.N)D4G-\8oo>*(Ye@sY6gseZf6E-Wp#$6i:,XdruUIqfJDB2%*T"23aU6Nt`Yt%rJ#H0hhPR@W6"]Rc;n8q)$AN[5- `En5!2aW%%Lp;m]a3P262hiO&NrT08^kEmiJ<8g+4+dqc-NJ!*K+J_%\c_ZL!aNqH h2;?ii/p$NK\R,_ESpkB[UL>f/&!AL;p,CpbmI@DQI_a(n'S!CQl4pB[a`/3K7m=P mBu&7/sRrQco%5.hr9Xs*3FUSSO8Y.cX^/@H4'g3;i]Sp#U>nZchLuWtn\1;h=4T"5!&4GG#XEN_5D\$@Q42q@:3'>$RB(aB@KbpucVqZ(\63NNb`UY* ,Ok0:P-9I"#W3VS2f9?L_4#s6TefMs#p;>mgL;=`eRFaq!W55:_#LV!.=kH>_?kbC OpE'SJ6:$_grS$IMtK`U8TS@-2QULC[B90ATXjgpphi<56oLf<31)8 )Zn^!9`6/XCk4X[_B,6pGM1GKVo%j]BcV8brWRWJ6?8DInF:UJk;$NU*k"HX=We7$ VY"U)*fQ`e8UBN3;p]$$ABS5*cYRFdFC`!8Ud= H24rKG(?mBn]$k_#lAk^^VC7_A;ih"!_EOa?]j&oB,2Tm&3<^i+h_0Fd\9?K eu#m.OI>?]$=J='PD\.hUNUG#1/WfN\S38aEIYdk5+g^t!_.eA(_?Lb.]u73gc1Qq .uS`Uhl8N<<_71+dFo`XZo/euALt6<0_rge9$Iq;iF(+4iPbU,Bod649A%K6N2?n^ PD!7(7X@$[Y*C\F7Kq$MV=![0]:rEbbW*A]"TOE?%0#d8B`FrTg0WAO*3csIk/@&- 1"Dk6_]L*f$:^6bc@6i53<,CbQ=>"jhCS?t+9(_#!5;pW\+9,tMa)\AdJmAIhlANO \!u8]s7uT24qE_K639ABN&f$,UBUHdiX9*.qttgrn@-SiGHM,)]+K#ZUA'`EkAToe Q'4GTN8DS]7cp6/mE5,lr]e:2nNRC%!HnRK%a_)EF%JFO')n#/i$#SUO7*&/IFlg& GJ!A7HQf9t-i/;5M"s_45+^(`;jqh0pg5<=(,O6KUn-Yd*i"C;OFG$2FInSCQ9[Tk C5pSciH$XLo7&\/b!:jBMC&UR\7Bos]brbZm69uN#;3M%T]n6r]?Mbn=d(%:6FK)k "\9C9rEY?Z>`8OS(\kV[4]qdgEUZ/3^q4&?[lba!OiP:FU*qVX5K[Y8<6Q]aUJdn3 R@%K-T$.VUjUX@l-Dh.rF2a?gI&Su=*,U657W&'3Hfd:i+:)3F"N4!J*2iaM"d%NP ?=a2m5@:5'g,LMD$5N>f&%I&'5-P`g&+G'leIKf10@rPkLS%kZ!4R/)=gol>9>uea 4P=bhi`V*Z35<6Le&=19KC167C*9'SjG[u5'g!^T_&mU^L2)'Q3aZ-um9Drt_;H2S ^mEoFq:A^>n3RN%WeCKXGk)Tj:#NHF\Q5lL?PFdi\I*leEjfF78$sI-?)c4*1,54! M9ZfFkJH0S"N,05!-YFoSIRE,"efIu1Q!TOVZtGa,9[AF=>/4"HI48] n/jUh?rl5q3I>Km(UY(]1V!SD3(LM3d`g,e$utZhfVWpds+YK%,?sln7J$P'@t(?. Ya-Hi(+EU$COqo>I-J(1^;X#FP6TE+/(VcM\]^/cW/Q&4.N4dboe/ZBP1!hGHK%KZ >[`Z1A*22EB8HN88_r+9LD+Plou$EkXpJC-=#M[k^]**\nk1euq:-e7 b=^f9;"j7tNBB&i#Mt=QOaJrX"\K,Y!*j@%WR41\^?-joZIM/S60K($UN=q93GSRN V;"=O[8P?X%cm+n]hU10.RPFN1Shg6OPOX;/-'Df_&c&[V=qc]+9oPagoa4a1K)V1 <(Z;,07J:B(AW2!m%HV>%<"oIIuOrSQpWijNWok\:j$Hk(o.-mC`Is`+K Ej]U5fIes4!DR6cJN]g,ouMtA;oBGoHDd2?YM3KY+Q8e^W#l>Z2]-XL393iPJ[=MM#5EZZ)gR*/r'Wq;;'\8N3S3SPb.q@;qqo+/ E;sP.SSI&S$I4&K4BY8O-mrms5K&QCkJHq4kPDarI.?`5W;f5>[l_pZSUSC$oaE#+ F4\4&DVbWmI<*:!fE\Q,&+B8loRlY>+"$l7`(p)49KS4p3G3Z&A:!EZ4SY^.bh17j Jr[cp*_8Cb83B1/3f[s1aJW8k-dgU%#hg^Ao[DIWK/9G1Q$Jh653'f=SNGaVo%]#n *Hf^!Em=<$K9S[_M)?27^Y^prg%=nJH!NoQ+qm-C[ `P."QmrpDgGi)*;*+dokF))KVAi[P'cQ9@t,_126`mAi,KKXP'S2Fd$)REt7>;O9L s7VEAl%1?srhLc7B$Za:\fe)A#P[p2QRl@-D/8'q1$=TU=Nbf%(QH&'qc?X'-X,f7 [Xp(9%)dZj=f!.Ak>\_IOB&Q=Y'^Yr3Fh^/==d21s83,.`.eXr0Q)HgY%IT ,2GoA0@$e#AH]o3f(j6WlC]/61`5#^\E\HaI0T6H(.XbiafP:h0QqlmK@8/;h""=,SW<:Ga0(Al@J% ]CW#KRFC^&>N9't>@1Vk]rX-*^2/-nAQm?FYN77BYVI]8k*)pa=+N7bQ&n\5H#WRo FE"bP*iEI/tW59W=5ISIfPZKh.ND4PNGM OjPa.2Th3J'WFf19"Tu1!fEXDDaSB6;d1Epaitr"R`))nd/3C$>(';L+h>i`l,.:5 nXV:Je7);.W SP!T;ML7)rFh^0%p0br`,N4,=!<42MR#$2N(B"4G!N\O#8Uuu\5"01JVDk8Q^r[*P !eq?UN?mC#+[-_f5F+(ia(Q$DA*NZ7`!8HD56pD5Q2/,ar14OAU+e&>1Hn26Mpfi@?^CQf GgZ!2,`E.)$%55PJsmMW`VHfH.B?LA44(XcGQ gdsiR-SA_\pRONni1gegT,hr8qp@M)a5;sJ3(aNA`_SXeb;]q\;_0u%0CT\'cSH51 &OVRIHQ3GTi>2,A+oGhL1)bM`2?"8UKMPm;4s<0:J*N3lR7lQ&8/bAi7mT9*P'5Uq 6ie)*Sqif^_d/(9h(gUm,OD$IE6]"sB*dk1G`umlN"dQ>^3^e7qo+!hZM`P:6W!hU A3^2arqL[.JZK67YJpcie%V,[r2ItVt 2i`E(pr6,kOKS]eDrp:cZ^'"0YuuWg3Cib:df/7#%FDeOVqbEr)m#2$="Mg8aTI*3Smt+])"+Xn/Oj1W3V@6#8!p;dm-WI@C3/]9F7i8N2YB^H.PU j.Xt0&#FdCQ7O9;HM+-.?f0V1h_77/Cj:BYqY[(%X%^-+JDN#Fi/#d"+&r9XPCe7W EGrCdai6f4G.Ys(8IZ:;V"DooLM\KrQ8E\%bJrnX0`"UE+VEQG;%' k`'(d:I^Kg$me"QN5%Ros5u*+hDjVjKO-T2DAZ&_kYHQRSb?\,q >"&3k7s=2_hh]-U)?4"io%$QhceFBXDtBS=kI"B/qLA9ijPtZ\I(oXAl2=q[#9lLk -cR1gO?UkHS?C("HaCfRa"#Em073_&H2d]RP;i9/P`jnLNHQ*B&bnOBI.)Jcn\6SX oCkSbSQY+^j=^cF-OHK=')[b&c@3"te@Y0soKM7*,;(%0]Gp^dOX-Q[=cpb2dnUX^ &HD?HVaZQnFQ/.An;eeH]^L>t^ZWW?T+>3)%MAUL]*'-t%6q'# 6kSr4+n?jEoJ'G,0gaTl-p_74G"!m"er>1)'nUde^d7.JZ,$.\p2JtqE#!Wd6f%%s On??m7"4T\r*=mO)$*hBU?Mk"IP1+=pur,1%R#UulsbDoa`oeaDp\o=9pqbW0nTEl g#Qt+e5!e]nu3 !WM::Dj:WOmk!#JmFm*%-n:4lhCZt@0BL=7IiS#s7<4TXe35B"gFgp+Z%&=Jg!5]5 ;`iN,[CXupYl/gab`+0\(\"Lss.\<@ntPr`.lOd0;lN,).5+hJWm%+_ph9G^1'9!k /QU15.cFT8^M)K&2P[S_f,P>tYM!""Ff7JO=+R5H@P`h2m*Xp2`HI+&qt(4`fIHCjD49q_PjGJVK=++/M;VG?SC!3(LfJaL$JJ=3LZ>' NsLgD=M1Og.*H([HjL12)r.ttT!64W:Ql!L\Dpe=MOcNI?^K$Qs.'f$B"$]u=S"#g n175G/Q-JBVA=I;Moe>-PVKDnNjN[k=H,*"hE5ufNO#DSYLCOCs-B&'\b&2Gs11HN cP]l[N1q3Ri;_.'/3j.Bn:)T!Fe#$p*ghuVSW2sBLGtTP*]mh7JH';5071X'g7jXX e:.Df2t'Ups#3/9`VKPg#O1.6,M&D=?*+tBhk(ml^OaVPJko9nG0.*sY1kAP_E39E T;t;e?_kIb4/;Uh79\2LY=K&d[OOaP@CJ\jg%8-3b2>$D1.rNOj-A**mArJV\'H37 E+YcL=-+%UZ__?Z&2mo7^^KX%*G#BfF8YQr]cmSA&]d4UZ;!<57[J]_a!M1EVF\TG 8jXWdSa&N\%?u#TGJGYX5JL5f;S=XL$(uDjWD8`4KG";:,;:kL<(,6s_$F5+dK1kJ .^gBD5YGoL;gUf\:fgPRrub*>TH,a4!U1USXNQ]^g?i;AWRI>&=Weh'^s`VmW=uQS :]XN0$MRrtQW#s+oI`:V858Oi9mlO3;t^u5D6?P3pDq)Xe/]r"eFI8Mn8T6&SihR-s,h*;TddX8bbF,e\Z s&e[Z4n-5WkZ9Vh^6Q;.h!TT_A:uuF*d*/Nahg[2!pn_/MKm])GhNf,TIK)5UYirn ^L%q4IVK;iTdB&6"0]5#o;nDXZrV.L4SW]+`$>'H?;HB85']9,a!9I%K:=ODSClbomEn5J($da L&W+`s%1)j04gapp=K;L9uk;?g[quCeDIZhIF+F&e4J!0eX5O7-'l:j/UH$:P^PL^ X?S5Br@J!,Xn4cC@^kH=NAA1L8^7b&IiS#d&'-DDTYu$;@g`fVc)8l?lM+E&cA^Ii `7h>Sr84i73kX5"_fdR)`,:G3rq%o1m-')TiWDcH4].^i+^SC/&"=QlbI60J3+U,j A4YAk;%?&(7ha%eQo[PQ>WA.QgL4$fUF+JF;p*dPiG2$h>#LmX<;7N!J>e)/Yr.`R :&MK?UP'J2(0I*%54Cf9-oS'D3uPsY0oS?>Ld-W@D$^/OO&3sD#)UBZ;I/t%I$gNG 'AX0KW"a^.(jW;T;Pm$'*)(&LcX3$r2OWG'?Rd>o_#K6b`C*nUG\Ztl:5:a:;g1^9 E-Z-rdbsaX2$h%hQ'(0d_i*[_Qd-&S\qj9'8<*jPqWI_l$N&s]/&A*hHbiF>KpR") ?dsH#$3jhf\3rBKeG^pf#p/P-QMbT/k6/9,fBn.;lcC!Y$K+,lC7%f\Ga4;+6uV\o hjn)Wn-AsQ3-t)ocf%\+Z3V:PFMKQTP_7=-W)"(NWR)8R7NhXA5:A `=i7l?>:7?'KA\M9MiWK7,)6Oo3cNO mua7>g`O`e[R017-ELDe[S2J-&,;Fls6!lqjs7&B@c2arA8m7Bje9QU4.-35J#5SJ VRR'K+nZM"[CUn2&W^DZs01*2L`5EN>,S,6LI.UDF,Cm,Dr38b?82Q]o57ZbhD#K8 d[9osM;Y6p^H_/>n"1$dE>q])+U!.??M".OQ#,(Fl?3st 4s[/U`mbJfX0eg$Gr+6OQRNGSd"c]5/Es9T-@i; ))`_dXT9Ydq!3[oV!oIQQp);diP9TOgm=h7TMP=q,QODRKVg,q=NrA6\T2Ye2i(\FmSFo,@Aulpo_NtJLm`* Sd56oXCC0PLVHb/;pl?TX>?rf270kRn7eZtrJ#jkl2n\9infq-8ub4MQN]MPrg*e: e\Jr'c#!8.4X9gaM0Nr_M5HOfOk-3hf8R-p0rMA8`64.IRs#/7QP4(jj1qc#r4U=j5:3u 11k*/BP"$TD7dWe]uKpZ)V[8TS93NJ(U,DpYV.HV[NNQJ6G!-'2!aIa].\t6o0\qf *dY*3EU5oXq&aOq'&0_0XkDK^H@G`">^#BShPtL(Tsr@$^"\(FdnjtpZ+c3_M=Wp; 5W^dLEUsl_X.58W=knG)]E=8sqZ:#G\fBScFMR2"G1/Td#.oiH]C_N\^cb.\@_3'e ?uQ-]6>XC[g&WG,NKKg7Ys&H0$$47;/(8tq4(L"6^Q0+LO<&&[J62g#54i_b1coMF Ncr:U6kXf.*VoRkVH#"j;ljJi;:3F`k`^s-:]9>so/,=TD#WkXY_2+mSmTL5Q)/r1 .!RaQ=?hr*3cf%L,dgtsfeaCI2jN(u51jOLDgte85]udbC>hiNdf-Nfa?P/oB^Xlq r.T^@9*6]2#?NNmt^FhKhgfqeFkS67uc!g/Ob9l]kqH4N1b>HU\;LZcT)6Wpo]G9Lqb6+@AB!j[eP&B_ S=jRNZ?7q(=)\Tf)33Zm$=`G^DP72ON3&`/21EC=p\ (kV@_bNP>8ma`_lJ=]*s"[;Wn9%ua[-^Gk$X6?nsc0@jTp-($FJG>7K=HapZL]p$U qBB]S;76@"FW++OZcE"s^F-^G`;jt8!]8kr!3X`j=@FK^h\Yua 6(\P+6XL8MgZ6!FTD!LnPl!R?#FCATCF1<)>sdjj*9R9X%"V0).LeeqJ8\6+4s@?\ gYm-q.-I"gmQSO&Dfi(S#VT27Wd4j1*Lmq:glbu0V*`V/N3.k;5T9:%hXb(@aWIRE Ioh!XgBr_^Wgpe:E;d$ni))T!M3RU&b(%hTM1a_sd:Mm9nh*d2$iaphk_$I.]="/U 25,5`"HQb2MJBZ9Q3[?g$`I?a+MM"*G?&TB/Ra-o!W@@hWD*s[@PA#-/8 U`3q:_`Vf3*cMMEF:c#F&/>0YHIrhaSGC"^cc8?p:k<:uLCFoDTuD=""qu>D`HXG\ Xi+kcV?l6*f$ar>6[f0##X!d18,PmW?gR*C5kfbFo`()d`<778Y`4nKA7U@IKq>+e gM3eGp)X"ApZ`j)d6E#s`790,/2U&E(m(bbXc^h.It3$Y#41aRXIZ5C[TcI%mP4C@0btfgNcR&[ #tXXC(?&[>Ghh;SSZ0MU;sPID].NZ!(pUO81UaWg*GfJg*b4$uW=@UY[r/h2e/gbf YXOX#d^e3FWhs'g^l+^GRS_W%)EDMV5Ars8Y[T"-re*[73o TK=/4i3Nj<$2hj>V-/\PZsK@ZE<\Ya#&S]aLPRdn]l3%RK /.g8o'-Y?&_DM;Sa6q*2r2TF=%cP2o5WS=`e>I[H'\NamZ.#0\$R6[%DTS9 !9"d-+Q24^((:3=B/AW<,0X]Aa69jJLnWC?<*7OIcj)3`mbEA;4MH.cVK4YiF\3dI &iPdYV8.R#mjW,Sr_KE#K*7.2FF`h2A\+;c,KV>7P8RYFX%Vm_)[9IQ.gD__-g:_B JH&;`k88VR4IOt*g&_-'7+RC<2/C&Y4+&*WHU!03!1\"N=?.u>%^-$1"24TK/%Pe? Yft,]!Q5&F&0/caTGr6Cr"9VGOK"pG^S5&,-ZZsG%Asn^"SWAE2rf_sDu2#^J34`65rBbl&0k8K J10?2$E#OLm6<1DqRkD@qprOfi:$j9)`SA?,$p@NTO8eWkO;1ps&!ji@t9'8n1!kA 54!_=s'@SG(U+D>o?P4q)^4JD_hWoZ2F?:g5k8mg6NSq<0Q6hBGC,I1"7T[]!V!Qa rk%2LJcA+>nA<)'bZ-!8U&SKth_;os+or=[_].k@pB:8To_r4m^X7@n8Csq\Pc_)a T*mb*%QZ'L=s"MSk/EHW_<.&0()F!R>M-QrZhNm">OQ&^g?G.fC?XVg*#)crag[-D CeY^^alQ[d";tcq;2MH%lhktF[D1+t/AXVQn6UjiG3[]qlAumkhh9]taOk+?fW*!I WlNt5@VEBmq"RToYJ'cP)h"ET60(n\n=rI%G'_F=fQK@0#Ij!c[apWB`iUE3=ET ]PRDLEp^FBgqUB-ZLLkq@g+HaUl'?Sj!qf^T,t]Fh4C-49]BsRa4rS5]4mZ-_iE3l &)EJ]I,>b4FA,Lp*EA/#N_/W]l.t:tY@P^\ALXKdUagjFotap\_9Z+dr,>@X[`t^m Y@K.ao(q4ll[Zh1-P\U[9=3XMl2J(hRUs^Sb5eu^*8+;_!oQ:m[ND%>'d3OAZ.G=4 =3_64R;A/tSH%9,Ss`QZfE#(TMm-RHda5i[KeBD>*-cGe-^*3a)W3uGoFA#.aHC$g -`M/LVJ.BN*WE9eB//Y(Q)/a5dRoH5XndBq.<,/-4Fp!'\3LN8GD5YqBb'^+:)9gq Zhe:QSYMnO]!1>MaHfo,^$c?Y+3roW#+f:o*dXAAn2A&]mtJZojn>f%G-8jZ/B.;a s/5Yb$R4hG=H1J,\BFj=FB#A;<"7.Q[&=!6pcfHl%bM$LIj)B4KOBC11D*NeG($AQ E?B#LkP8dffk>=N8AM02"ZD24<=X:@Xk_CWKmHGY-jWU-enu]E2J> .0sI?SlS,I1?8umd:jd6aMCK+HmM(e/ErR^Cstg0O+fM%nu@8/\:,`13g%uOSdr-r *`)*hcGjl[ir$\E$oXC$1RB>Y8F6D-CIH_2aciD030ki#K?W3QmD.sL0b(qZYumt\ [%ttF*gk0dW/pN_<1jcWE^:S2hN-L/+[p63pKP;uFp0u46uNe2G6\k,#=;6`3ZM!Q aMl^1ihaFHJ;^^^&.mGei/^l0;=u%4Rd_eg!7Lm?1.&?V>psk$KY<'%mgag#_g):J UDDDP$*3,qjfQ03/_oMPU<8%s-<3`F-hg&nmt2P1TB][2W'('%l/Bt3O+,d?ohu[i .2`].0cI2RW`1.Ek_UeVLa[-MJ(c5#!XWPu5HNo%D\,#2$)e40)(muA.NYMC&KO(S mWAf5jga%O>jVOaHnRQHIDe^(OfNo?]+**BRceS3GI&M0m^B8")ufja'sQFD!Lrlq f.iljZimHlq&9sNE?Yhhs!Ro.@"eQLM``riIq/Jq`pgIPClg$f#W=>o"TF&R^O<0^ rga6OHOT6OY`IKU3$6[p3MGWtD@kf?&ftF)%PUKH1J.6p89JLaT3t7S%UXa9Ub)c> kNldVm%BAC;YK60r/E+Trt^$[V&mfX?Z3EYJ[Lo^i@T@.gR*H%R)/Y;@(uN:PIi5u D:F#-C:>X-]*WPZ5/NrE<]4HO;8fp-XXh6u_LF]QfPZ,7%?iikVOS'.#r#q8>#9ZP (r96Hc8I#!#6cS"gF/TSIHn*%W@PsUl1%Z.^O49!k?f;"asL6 H:A"Gi;Bca)Hf3b31$B?*tiMqc9Le?:Lg`ln5NqT%/Bj\Vj5G<;uhE(#h5!e&C(CU iO?UNaNbT@/8#SW(/fMA;E>WBHN=%1oiXEG^@,[RN1*g/[omU[VIUkqd$o?i;\jRUOQMd"oj(S@.4V-Xr@6#@tI=DW-0ds3\<\uIjCt%2S<`a\fJWj&.?@) jiIabj7cNUO,!R=N!>W0EN@*)[1F.uE#Q`D.u(`1`e#]!Bn?,k-g_a=RM/YKXm:;SL,jcd//!q>C]gLE"t)XpqM);luVVIgrSQ JVH]O:0#R-,>/dXQEa%?"e2:GS%.uK?aH2t>"Y&5-HbHsh34S!0fo>%QoUV^%/ca= BF";7lG7R&^!h8tM6,"-N:tp+3jljGj+:Z=84c%T%/Y2Oj`G'Gc%*#"4F`HC2STKi"XHNh"9/I] _#FZ8!9[l0VbC'?o+1cf%4kP#8g.U:14e2Y]M!1&-jW-> WRoI%6&u_mB2&F$)ZB+sK-,1ASggGX8Kt*==9SPW-if/iK7Bl^h1[6WDF"FE&rLE2 mUgbKnXXO$T#]XffZnWGiHZJ2cF^1LT+CjD[GeaNo3;fW&IEtY@Db"(^gHk4,_0-I jM(f=r+r=ITD\G,,Sp:)0`U`A"ZGt%UBCj=1]KBe)C+bRR:;9qJCBKO/_K"]n$(5) \BE65^X4cO6PftppLAq1-WodhCi=N@TKA(pVAFN@*TsMjG[)p$.$@NqaG@97L0HIE qj@ApQnDF(PORcF\e#ZOaZV(OPbHptG/g48UdNmnLR) /*Y&Sadl^/TC,JRA4OM]D/isUmRm=jJ,3e>PJ5kBn\`'lJH%Q4;t'0:oBe$Q24JmQW::cP8Z'a7UJ@Tb^fQ'UYLp.(IP')dl[iG:EcaOaCjb^M0RH+kI r*SRZ&bd>a8aSYY#=R.N]K81`r$R,Fa=tqo6Hqud0jH9$*E^!/N*Bo"jkuKNdJIU! 8R2^l\E%E`U\E;Qc("=BbCpjZ/2eVmmJmAYTlR/H!e3(hr)Tm->2^ZB01PApNa8mM*q<9H5:$C&OC c-Wb>Q_+LM96ARhK`CWuc*O,kD+LK]Y[#5L>7e1Rr_IQMJcG9SpV8WRO0o!7'E"<@ n2aj"irm,7L>P8A!^J*jiNlD0`TU'Q)MUT$`^Mbji!7$bbI_=,FkrR;_`ZunZQSc; ^Tup-AHgrD&j;afrr-u`gM;FWQNu(oB^cGlg^j`>]E3$[0._&`s7mNq!(L7!l[0'5 !mG67b>*Z!Q!=bFiY&ic&ppNcg*`YaEB^D,#5mYhpgsLfq"]#m@2Ec$;n8P&h&l_S q(fH,q)\:nE)2XJT:e8'0GP\eN$Vf@MD7q_pu\hLg^9$fkJO>X+YRiZK%iHDp(CU3 T"->P*&i0%,0 Jq`;Od>^,l.'@,\gl-TB,csFr%3PZRiO+@=)L_iP(7mo3$K3R3+!iB:MUN=0'LE3g VZcu3V4^/p09_)kJ-9s"8sPRNrZnHoVRkLU?D[N024Rk"[$Pn ^F/]dgYhfV#Q_jF\0+7?dLfg8.=0P_q&CZQ3onoXOIq[5Jd7qM%H=+:gdbF*nU*j] (sg)$QU>16LVWrQGlmAM_d2Y_DY=,j>Mq_n.<)[Bn-=U0!5J-Qr\Y6HZloGQq\ob; -P?DehgiJ[kK(XT^]sft,QR7+:'!7G^kUVD+8u6>#(J7bA;boO2pu@=reP>i8.7s%M9u$rqf]skF3<'u g2"pfAjBM_1X,MpApQ","1FVkhCa4=]!X>&+#[Ug>@7IZgqs#,N2SlD'Y+)e;D;`< //X'6bl;?!&6h>u^uea,(Q5hnc.]AA3iLB325':EYZM0?JWlsqLH4I/7>5WW"FD6u ?praG0t(&_*>?Zua3)@AU#M(g'4(9o]T(>@bgSqgAdS0A$P-d*Cbd2OZ_AGF`(nup k8_UK*/RU;S7?_o'3JSbnZt@Xr*r#/m36K%`S\*qr5:Y\X$`<4fO]GQ+T@:IBj^:( s*SbM(]..F[E\Wp-M-h7ag\>sT5@7!H%5N4gG?fl(MfO*;fWrFibB6mS!OaLkNP=O OiY-(fI!*gPH@phYikWjpk(BRI/M#;p\P;iU;>bcnC)n)=@`bd3pl_Fs&\c1I1/]I UJLm:q$/n*jN&Z(\gF_oB+'rSI55&LoqHVlDFRsP;?'7ip7Y.I-^37L!m!PDX@9%4 "^#(m5P4rt)#3^_.IG%C;QTnopO'eqH'O:DLi@56h6Ai&dXcmSINS)NaU[WEd#2BH$b-^58ClZb;ITp5V-Ker:L,e.r"e,Xs3/tucPciA9B-ife; 8T$CJHp4E=.Agl5Z=Su%Xc$r\(VG!%GMs2CnP'DM%D-mIslGFpFMi`ONn=u:Hsj9(N@H1<]@[VF/`H/P*XdSY-ff<]WG9\P_]4b /#NUgF&Z)[h=G>9putaO.nY>jSf@bu#VZPpHs/%PoOaKbORfHUFA5ss0^6KKD9A!!!uJC/)ed%oHYVW!K[:=n"kbG$FbnSB>FOBs!R:dYX*f# *FT:@7B`qi,J:**\ltZWUe-_mM96b>*Wc:V:4^c\J[fkJ6.Nf25 O8Hf2MVEE;]-r@d![A,MB>^ =V?L[\E!CI*bU'l$g`.?D.7E)LqA'hl&KoWB@b13m[&=0-iESLBjVt+qSkQ8/jA*Z r7TBV*tDgGE]d]Pnn+HUQX.H%qLp5jdFI1KK?lb,DOulN:.@-86o@ZX9'9)5!WK9C PUdWWQ.2DQn=!+]HhEEVb.O=)nuKfaF`W^(H7*2U?ulKaHX]Tm)1:RO"\C%nhtVpO JkcgVT)kOnRg^hYV[S.>&(k7"0YDRSP^*3!q=L`m]((Z45G$*9Q]!lHe\V?'#L68N SEU:)+4(J(l).V^/`b"3ahcoE!3VYEjOi%@EsB4RdQ6Q*Sn!EEWBRVl@-MJlW"47h !;POD(c_H_<,fI:h$`kmZ\_pI#S[2kRCElL7b$38<&P=;?-6,uPcUIm&U+3PAFaXt `]sh!?_+*DSZDbgo[)oG`H"lNX/)>tW7Gs;_aKl66;XH=PQLat!KS&5Xc97^7t!Fu IP+e2!!i(Is,[,n6KqBI)[$3BG+/GTJcBJo8&0UN$=-UEfVG`k4VG8;0f8 [i!T*&CWWUeIL"-Dqqk4[bC,,caP7XZk-M!iES=].6q:M9S!.lpQ(o7^Y&2!B=cu< NP3(eqW]9M@KIjpe*o]SRgXiVq/YEn;N>3H$_7-<>c*^^=Mh@Gq0\KU+g5hWm,1Lp d!W!25!o@u!Q7CT0s0Ju%9cULVU3g]QJ!W!UBV\>;iSRic5@71]XpGWuDtP3q`\ '9D5WU.V8T'V'ZPhgI3F&IuYT&)k8IoOT*^kn[=!_*h+&?Z:iGn9I6rEfaA)NIX8Z 9(jGp+@,]d'N)%?X6p?I#FU*tOIe3I4j>PZ$%Q5@"F/]BLkS;J?9'Wu,Y\:O'qN54 m\i_]*<.aa.&c>i 6ilZe`=;a#K`>&b?`QN]2'j!f(Z$\3j7++*,2=2hm?mnSrjuA:s2!m]e,0_DBlKlS 5dhX$-hd$,h`))m>l[7rU-7j$q#;EFr;8Ms]T3_W5Ilg1PRAZJYZV.6mEQR1:[l/mgp4O b7G]BMm]D"ei853^RsK"MaHUaP'+R-g1A40116KUR5FqH)uR1nUUKJeHOUkD7LU6G 24tHE1\U)iG0j2IAM['Qo^JGgHn%\4[EeJW3!f,5:LC6M1\P\-&`:eJ]-VfA@TCLuIZkn1# '6e6$pp1&o?eD17mCq6!G(tFV.g,/0]bs$U3q`-`eLL#@gUP"uUL*R!TCmn$lOPWh NN1MPo;1IZN=uoK_u)"Z7*d0%!_&I(AW(99A5K'[XLeAkh)=G'qrl;\;pj%(pi`/N 7d!HG$<1rh%_b"h]S7f3.Ps1$s7Ye5>okd1?]ptCdfkW>6IkuO2`s J"5nudAoq),_#V0OGl::3ra<8&5[\HT^T@jj)6PbZ)T(K'qG`]Tk 1u4"cb>ui`bJEur$*>*QY#n;]04h2McDp.%AE3^eq:m(Da-$D"qd8NeIlfgc`u48R ;V.G7@l:N88gGG=ekHLUe7XU/ZISb@F\)$Xi)*T2&Qq17,Fsa1Sr8h.nEV2"R,HIF Lg!hg3e76?gaZ\nn6^J3I\4dcD:$H0E=42c%/?b5NO+a!Zf+VWgq$qo&s*FX5B\6, =sq1:B5JhIBHKH9]k.%u`ZC:8)$h=t#iGAaL ^knWHSKtO#&;;^Ui:H[I(:SVHLKe`^M$*hY0f`%=#0?TdD*a56s38:Pg\i5f";MUL X26=dr`IoBN*EFp/QDt>$ud[RTbY)m-aF%(?sMJB)Ug_iC`!jE%#^Q>!n@.Jc28q% clZ:XHA$#35Cj3JT"$Gd67Khe:b2!')o&11U0J:/dk>EcIpIuiUT,!b<$2.;mNcr\ <1N`\f)9rWJ7cR.NSZnOH2\)#5[3G^C%/eOhP4,f'*nVB,)Y[\&"804lG=XmL-DUN 4fZhRG`@p&[C$cq378Zc9_]0kTC6BQ5/6F"0NX`_(ItV9*X!#h+;_sS*sDL77?GQ` %12e;rs?n.Hh\3lpj_8;j?N0a6NYh#J,`4E#li#o^h3S8Ql,u*/M(#9GN^'P1\Gmq $MCde\X<^dN$I*d7*_li,E-RH>im?:TnG?ga!Pnj)c:rM_`!-/@0"rpE&LY>1EV]Y8%brC&>f0qQds >hD3'ffU$OV%u1Ks30-40;orSf*q99L3X6'!pN6drCfO>0HZAUdX%71s,!9KSFY5E ^\#$#<;I=%#JD)dYLQ3J!"mjE"G"`q!_)"n1EsWm43R8^7e$?5T-&VgH30.JJM,lK "o+_?/=^!Aq^e?]_DFoZAsj_/3Lc"`YZ'2$Mo.a[`SbpR3]"96*uT^O:'O+=QO'`@ 5[u"K%Ff%X'KZ8)*B_,e3E*A:_]66AH[eWkDEf"C]s5"^nVdZ#KPN(G2;j2*;ZVnj ZFdsQIpLD+%e(H$-#!FP-W;lQmMl_>cp]cWA:`i9QNpi(*W"OXWINcmrqjs^^KmCT Ir>&;l%+>S++'KTR>^B99p%)$3l_Es'4LS*d;>'Z20,S^sm9GcqNUs.t_eQ*elG3!m\NWu_r)F^.!]*9M/atAdLmmJF mIO2WTGI\ocTifm7+*M]b=kkSn:*p_18!@$NN"HiHM*"qoF:E]l_`H!(*&Ed>Gf4q bW0s5B-$Hd]3F"HDNDNFY(\8(,iHo^/`Ha,X!;RFQeOTkfgCMpMRd9Q#e?1S#O"3n k:8o#6FD>bY9=^E:?V-@^s6!kF5QZ[n2;#\`f0]E8iKWK0$r$YNs0#.8*D1/q r]bdC.T\O"fgRBB^u6ZiGXgm/[3,LF.;d0+XR<>%P^pUFVLdBSJJan9K%&Snb1jTO OqmB,ck8AH^k0nHn?W&7WkO:0OFVYfnpAgPs0O;\#a\(k1;=N25)?fq b;:B=lJSs6DO!8Y*23Eo&_&igDAtq52Zj$V"Z=)F\/bjY_Un^GZk?WOac=6]X"fs._1SA,+? J62ehlb.a^oY9,pn7ttLh6sP1r\k-)2[Q*5Mk2bE*`qnR1oKlRK'O]1-EK#hY(>s4q>Nh3nDIa $nm"p`SPcGE:Kk%*@;7\Z-Dr.?m$,uJ&$M2^bN]U1NOd>1BV]>k0=u`4'Np?B8[<3 M_KA886:E\B=@RP1YN/)Vo!:!_*O<9kQ@&_5D-G3)6fS2cMu9D9P[SH/n5(sfM\>Y L)$ZUC=B=HuIf'!mR^_IF_pK2k?BHkC@3W:#OC'`\ Ws8>0EGJ(]R^E"4M:gsu*#3_t;t4_2M&k'M/b!0Lpij:*=8IapqC-FUF@&(a KYTrQ1]hRpX4(2$$2c1H+(.8RrhA;QVT3U)i"cd[J$,E&ScesFSK5MRndmI9`EqJJ dSgt?3J%42q5Uj/K63Bm**E1)g`RH"QFX/!iS"p+_]qu^8EVT&'_jm5+e=[.)<@'+Hf+/^I5%;G$oS_q2&9?$&Dt3bcnuis4=S(IrfjX$$2>V" 3@/F1NKVSF)V(ET2"$D`o7&4"HSVT=?oolR#6+Ao4<"_^T9!ZSNG]"#O+l+Y7CUJg Zqhu>lb1'HBeI,6JW4'H/U3mk66Hh]br"JqbNDC9[(16@^YR;O]eQm;"l9;X+0e-KCQ84k[@\O?Q#nGL-&=!uK"r':]E&BO8W:%,k"TNj#MJFIDP>RqH$7Ls#p 9rGJ0"97>'0WDTITa;]QV5R!4WWF9SO'C2pEK;++@\7R`Gu)dc"n)VJ!$D:R"gn%f B_K/5Ajl7o'Qs18C%ltUi046>AO4Z(!B=O,Hl/,u$1P\oZpGZ*;T5UPO)EOfFcJjI X8"RNiUm:d[G&^AOf/JG!#;]M2]*nDa[2TJIDImh#]p=G5N6mEEV^6M'W7^F9#t%6 1*]O7;5K,Lknhsp,KoEOmhHlCU>k7CGUVMH6^>hRTE9(*6@e3kHbfYnm_e^$+Q68W Iq/96B&8_Tmc3Go(\]1VUE#g-/r)D6D86/HI$]8sJ$,gSci*n+J(UXrcbK)O0?O7o aT$DWT'$&bgYb:5iW!L7?"6`60_Ung2DY<0Cgu`" #;c?-!F'4>G9'WYo]\&(IN&2Bs%W1MH[\ZcY@mi!3reMc!W=60IM)gGK)h!uSH+.f 4BA[@Aic;5O'/bo[kN6>ZU/lB_Y7P1E3'Mo!X8@_(9lG$&->\u/g(0oZ3RBpMC14! PF^uMOQLDIiGFbBD$H:FBTV=oS/#_/*GV#VC6@\gs,=;=m3C"c*D.l'5#plrXXWUL Q\/P-!;J*= 8%29P46G"X6S0PQF/K^Rg'H>pO%q^GVBrj)7r/aXX( -Gf`^qi.R>/l0,A48dj$Tmp;eqr>oi.gQ^7qd-+ui0BfH2D.VUkG"G'U!L<_m]&:n QJ2%I,-e:IgR&!)qJ ;qaMC`m`\>EWPr@"3F8i.FQVfG2U+fV]5CAY<4fNJ8f!C";mHO%o7'`_qh(n'0/50 o_-+c(6F'\kScm#Pp2rC.&%K%gZn_;gj;``E(fC\4\0(JYZr2GdE?sp&O9.JTr7Fi q*"lGn9[h=Je`j_(&lP/!A=Y/9*[g6"uqmjJ.fEmMgdiX!R294D$.Y0iCGDdVu_s6 `@YV_%1\`":E4\4T4-VsBJGnn/a&AjL1%t4#rImZZL4Au\3$(L(P`V7=Zlb)?YYL( >ZDeh&)^g^p-Xi:O&`@?Q90R"^:Qs&N!:94Y:aib_^VO:8@41h@rllmbImji`uM>$,9q_ng(AO=B`qF8Iu',/N'$[#hfFki;I ItTC5`f<7&N&s?P3$:#PXRYeEn=R=J)6sX[aum5"iFke'1h5mJSUZgua0Hf\H7"F: ho(%#25JI\\tF0JYT'f@%9VrW2o%6^k5Y*&0E=2:&W@/*=ASpDo`%K7coV33"GfYG K`V1"%B+o6bX9B$-PP'&90Ka9H@@s.TtBuJs%s#(V#Ks1ru$;YJ2qc'5ah/$=8J-[MGdp>(SE]r/EO4+./"-C?":2@Yq#L=KC :\WMej=A?l!H@pU_Ai:MkD'gmkT"L&JpWZXdIe?-Y/#O8DWnRQ8>OeB"0\sS=:<_+ B`S(/QTXu87\%L-4S\icKN@G'cG>_ZQ3dTWcYA".Dm#.RX]uhIruW500R1%8=3%30 j8^(mo9Kd]Z,s$X%sD#Momr>-mM=74ZUqjjdHuI<\`B>`\Y*rB2])>Jh&QFkVn*Dj -U1iSs8Dlj]@2DI(CpK6TSiF.[D>s!-X1;FKoZo ?S"f1+gMpl.bBE>cU9\-_oEu?7sHm6%Iga2a_dL1Z3LjU51piugFDb-9>MWAr_:l" CSjDL\+$[PfBV:4hVHVm]/d*A;>L%qY%)^)H$K#!&8@&Q(Ca\]/-dXEr;FLrS&.H2 Lml`u^^'k&+:`;RAXYS!@Pq(MG/m9E9!s8*Ym;>p!#Qg8=LjUO#/CHM(eeZg&HQ,M pRYo?VDES?E\8rWS4cMua&%A0,cr)n5ZqC1Bl+CbW$M&9Qs+WSX]g62RC`Nl2S/k8 iU_lN!gSm#/YK@0]W]%qZHsDVYY$4><$(t34.mEWQ%=`0$sTI+6,a&WRX8MERXuU3Gl:n3rWCs,HMgTZ nnTqhW;$7e_=-R,OF+)2>QiCcrLuYadMDeo=n&YMo0b&WI2mSqp?44^ol6mFqje7N dJW//s5!&;mKYEKpfIH5-9kVBVg\>1m/K0Is)QU.MlE:talfk^8,1.%3eI+I7d[RW%dg,g*2NKQ(u^7< 0h:G.=Z]5lK-Slrs5EkF'K'ir*l-ZU/)uF3_q'FEa-:"D6s1A0_gd==@)dL,R&L)g %.8X8peP7d))Br1ZC3Etqg@F%tkVJWQ4+_qaf;@I8/Qo5%n5HueCJ)BP@Lr.-a]s5F6\ n(Id@['MS-?9=@t%WT=*(3Wb&+gZ,Un06[1\t8LB:]^L1Ff.=!qS;&[G;11Vp6:H! HBM/J['PCC38krh"RPiV1CPB/&3/U6JTEgNGmsiY2:)ZV";bT1b]Gbg(0IH[)K;/# R6b4EO<:!BXSL!)=Y7Q$A`3C!\h\lllE?2]]eMf.5G[c+NuL-!ppI) \Sq#FEoeh^`WS/e9C>tU&^inEo23^Eu0 1([\#md"t*'ARjk(?1.ijnR,&l10P8DJ`WaL$+e0lqY62'n++PiY-D$/Mk[PPJF47 S:$Xc2[?Xc:.a?u:p!u!]Y;f)r*R&=+i"5n3$855'>^"Xb-0,#P6$(Cif,7kc=Z]X ;(gZEJVc7?qe-9Y'3XK2]-j@W-R)c:d;@N#)bFsp9PbTC:N]0+g1GAPaIrT)^fUem *Sl''"U&`E"p4$p+;k^oi$dj"-=#%;hZOPlGCs:332I?(@8MQnJ!>Nln>cd_2;lol Gh`E#PPTZdTSt_mir"RnUTVh4TDgV#EOLclm9@U@%586N9(!t_`u#U H:)@"k]"!5#nVC?hLU/@%NpX:\])YFS@un3g1*Q3m\X7`;aIjV^k"f?hIX^TK0:Fi :_ES-Jpf2qDMHJ\4]a/b;%!RLqjK7K))Eh'(hSM=EpUE#s4Q>Fq+(3a)P@,r/Kkl` r+Pp@I(;ZfgNuL0-bu?Lk2Y._a&q7q#lsa)1)ZBOl=2II?2r$D#7^VL!oO2Y-WA"k F-c,-VU%/4i%>dh+3phsg?:uY:bd_j!^PSo)i_WGVtKF2)d8>JJk7Nr5!mo5RF64SoQkr2YD%ih86]'YZGr#kLI*d/1*K=CDk7H R@3[gnGe=JJ?'2KH?3X3gsOX["(^$QCk34$JY%@o*(Ku0UI_q0Y&YkkCHAGC+W\8g KfgYDr"Vsc*<>Z6h&'M5U0YAl$F'Rjr,[,jZ>L'b"Mb(j17PJeUM#BW_#HWs=h?BW lEgb>+=>/V"O1+9dsOXBX0_SS+)[%O^HD#Eg@.=E9tW\To"IrtiQV)cVmLq<2u5JC 6]Q1I6b/L=0UF3>7<^:0F>(YB%Knp"q"KIV/L7_TB65!kj7fY$oC3[,')7Mdo]&$1&j)F9<(fgRR@'!8:*o\< &3`cU2(Z\Tcc*7B`4!A)<3G?Vc"+2jna?EbSUY]R%.O:O)=OF+pBmJk3H#OTRa(5W HLU'cipCjtnGhn+&br9;]/K3YL(4@_c.-fYKA_`Af4;:.!)rs:EBL'bQei0;f`JjO %;t@7YVdBL+/6`N9I0u%UpqEj!,O3`$+sj=HUm+b-^37,('&5^aHk3`&hoOYNdWEG !<@Uo$a9sdVi+eUVKIpX+OI]N.#]:a+=P$/d'O9:4RS9J&^uB[otB.I6]ncD+9=Ze JEMf_,&h6=$;cMCJdOaKJ.?k_@j1rH"ms#7RQZ-(Z&lQqg?eB'L\q#kmjB4Yn.C0] !m#%^i(F=V5QsC\#/]Z4&Ii-#K%co;]Z/FZBP_`go..mO!!iUUp=Nr2j=_iS#E#`@ 3XU+*@#@o4Y&<26ebS%'p&9e=5j@el8ksb2 HLe+On*_D&B];0k(-Vm.k_Ut]Lj^H^5&Z]c4H9:JqoZZt+)4U\7nha*(T! #Vo3_8K*3`3)?MM;jiIKXCZ*3>*a:8H JBnO:16\nD/0%nG^qR/:1TH`3rP3p,BVilf@QMPSNRQmijZKV@I<08drRJ^pf*D>c Y5ROCn[E.chOb_^UN#dBB.!UtIdBe3C+5p%2+t?G3A;C*T8DrA9p*aj9Da@!A-#K5 _TJ.NY1^bE#t^mMWWr75P,Wsn"8U!V/L8/mRuRl@;e`AD]HFqj0CZO#k@q-S")URH (A>d*kn6&82.$FaV^gliHaJC9iNQM@J/h:p2O\9RS&,,SK4>m3R^ho4kA-]+NP/m@ ERUG-bE@)"1^*T'aZLi0$@HmRibY=\pJ6Op/o0 2gBrt;?PN[.][cM:@qt9>deGqUDr&C>e:*DQ&R01;t4-<,3c&1BfrsE*+gr?@PS6K :ug5HEZ:-kdF8qn!!iV`]iZrYbf4^44=O%oRRh8F7b<92%k9hVb2Eirj>N*SWO0q_ 8Wu'@ECel`&_3f`Q.i1J50h=]cNiqHb6+Ag$E/76iIDLH!;La@4dfLs3:Sg1FTI3ajh.P5j2e^&jT&bf>g^;ZsA#1[r0[PDF)rX;9leA Iet!f)j\Qr$2bSAruKb>G3ha=IGoX'c43Fo^taaR`BXsXb(pKrWrReAho]oO-tnA:(@;e1+4+Y=2oIm8=opCk oC8=eh>Rl_>AY8l@ErIfkg:$!S\G=X>hY[F"HO.bJ!0Vq3N\`6eMhiXJ+:r@WUg@/^nGM@1h=0].1eqos1J(" CQeaJ/.atrs5r%f],P6QkJ;<0*DLGsFb;Ze\H(rI_"ic4@lD#I0!u)bkL]NEgbh@J QY;"S[dqNguqEQiXX_9cM-AqK,j]% RVY$tH&U4VR]Lg@3:cds`:%nli%>!#p?4_YN;V#panLKV^DDq/rTr&6StH"S$bBF3 XLXV?^83[Z[%nN5^QtaeMPsV*BUXa[>60jYBUMV3R?0t[A"+63HX:9aB9Tnm!i?TM ,s(`o(TPMSRmC7%c;KG3m.2eqrc?4p@rZS+=DZ/_>h_T6EY0ik0eR2Z(=khU0pg7] MeWBSQl!4aVt@'&.tIY0kmd=%hgN$_)>J^)+q45Wrr3/^5k+e,)"I$1O6_]WIX>A. E`V`(nh@cIB41Dlkj'`4_#IK&7R6DX$8jX3*"6jc1P5_!)TSSh$_H$-9b6i#57tt7 cDA]s&pptt9dAUppoE>fR>P&P4tso1+9CdF:Mn]pFTVU?j6F"nd`K]CP0+`dC`C^f _D+?L&ICGj!IT6ao,1[e&5rgp*DL4e-GI]1L^llTro!U1)uCjq'qCF1@bdhR'iM;[:':p_:i` T+6QUJdMMUHTe"pp_9c\bJ6gRGo_fVK\%*;()11B:o+oWBd;rcA8*eD'VbXJ[\R2Rq&h+XiTlPcctue q>XOrs"A)Yc1!)"+ZC5;r&=W8aXj*VQ2lcFh7qU_&to9GJ)NosDta4q&AWIq"Q11R cZS"2@'G&<[='Q:]q'.ZVnVnC"3s3-8390n+q[K0U[8mb)]!Y$T&2Fh%l;c[9;;T$ qE#.klcP`8nfl,a-M3EQ8`js=Vaq^2*:c6X@fs_'Re'RI$_kk)).44,9Sa]S%Y48b %2jL%RGbRCf3c;aG&[Fpps\C-)p'1\!j%c&)rUdAr`3hNBaF/Z(@/9hGH)B':/K$Cd2-7_]\?^fF_rG5f5j;*cOEG5hoe4 JB5VtU*CE[-VY6@RFe"#gQR'j[sp0>ANIMR.S2Z:h`[Lb"^]cQ\5k2[D@\73%DfBN Ia7P9^`oWP?+&i/D+OJ%<83)9F$.0`,dqP>V/n4i0c!l1'Dm#&$>oB4sX]W?FTMo[aWkd?skI]j$_V5to?bG,=inga(tVK2dn,P!C#[_#1,U"ihnDU0N: $"O(D@_fak5GFGn=rG36KUVVUd^m4acWk?'gAb,]s7;EVh`NU,>[[)EV>W(?*d?n_ mPajs(&H`$KU+Nn='q$0p+tGDlM+q@boYc[k5Ij\ptHVj=RQWN*RQ/>3#b5'CI<6X jg3tH-d65()bI_MV;tGA[l%-oE@uD,W#^F$X8/^!+6fF/$[5if:.DHA8&J..g+O4X 7mC)R4+&#;7fHkl$hLjXA&bt0Yc8DOd_L7TNnsVM>Bp%RnA'NXNrMBL/&MfR)$r\' GpN'e;q$3%k)m%iqq$;%98A7=2ltpjkPptsrbkoa3kG))P7hc+eh!MP\gLGYU^nk^,Y]_e' 'fl/99`%?hKqJO!jip;EWAX]NFSMQ^Y!D8WN1ai4TGH4s=Hm2M>+jrpdb42/n=LII -?l\g%>clO9&=)NRFiGBm;Tc5e802(bdr3f?,YAOD!Miq-82p5[R+'Mp^ \gd(<`lO&W!qY%@jK3FHd;_:Xg)9hgeM(Lo=RAGX"HJY9ZRf_3hrYHbhHs7!9?s)* ]KAbQF^mP1mbP=/k"p=B"u@UKXX/i`3&KWWN33hGmIg b(5X8AQ0nVU/%T>*?G-V[`W)q?t1W;PNcp`p>H?E@i:j,!q6fOrtA_nk>quqV[TF` s'U'l]K\.WATAaf`Gf'&%\(f^Rf\C5NImDIkSjabRXPKY5C%]7L JH%sVqi(QZ)N,]L9r2hRLD2d!B7k@B/E&JdAT0GF5?,#Km_>c=jL]:`WDtL=$n,,cH ru(hsp`$1-cZm0os"psgAA4R_KusuYqeaT[2XT&FqJn*)mq/0] n$dA.=7`&QJ%5)W2?.C4(FS%SpqNB#jJ_lM/jMeCs,DF*1B+="6ap`V[&k7ZD48-) RMr^(d,aTBjR(@Sm9d]Ys+3Xi%dK-.SBD\>f9a.C]mT<6`fM9X7%LJs(P#*oP_23f Lc"3^)J_d1lU2\AOg%XY2qK0LdNcDpA5P4AYd2*LlG:PR8ORE"!%H/Ng>6O`\LVd8 heIYMjm[1o2YRfG%f99NHCU!2%Ym!fUknO>Q2$Ug.;h7mZbtp#T4:a5$aiG7pf%_, efgt:Brm+;BlK?#gT(hFdRr:/C=Jm%V"n9'c5UVW@\^Qj`7E,55+9/G,F^\>AOBc( 2-'"l]9rHq\nT9&Afj*L"N+p_jXKH2H"os!S#;c<91T1E`]+hXHsr%U=16n%P m;On`gZMkf+?29#8htfe9ME&PLu9@6fHCGER%W;@Ifm87,ka(2cg6W-5+&7Bl "13A*Xa;3s9TmA47=@o70Aml14!l/?OG+hcJ:EuDCmtnN9LUcKLXdXK#QJ/NG>?,c N^PdUs,4q0B90GrB='-%X32N5r-E/D)CPELmUP]W5cu?rgQYL2)!'(jGFCm"r @kq'j=t74d_1.kc-1TljUORF;''*2Dc9`GQmNX.bW2opH'^[;"c>K[!c$a-+OIuqqSO<])05i4o-d2o<[E\V3*a0`J+3bHUZXlk`L/!06l6 s5%jBZ&duJb8XLLm!"g6C[^)qgUEG\\=%!;SaX4rlKWor-uZb`.*I=C@Z.hS7"H;*Qkcr,5[Q[4RZD27QO3B`Y; 'J$gG&GZh@e5@kWZiTZO:JjMGr.Z4lJn9Pg-5 TCr"9'qgn`QntmQM[KIHQ#A\"!&(P%%D9k+B#hV=:5IOg+TbDR$K[#cO9JhPc niFJaAPD9+:ubM72?/U>e:@S4cB"*M/KVn*X9ARD_])&i)FgHi!),M4nUE6sqF+ZD +/]@Z=T&!aSdS'-rI/=b]A2YmA8(qB=Q*@m'-&b%598GV,)i!0$Yr]Gf-#]jQ.QP8 L_1%ce:[c/a1>lDFhTup3KhhClMpA:I4$XcN4QYN1iJq/[^Hk>J$j^u>1Z\[\.m\) RETE6cfmf3K3S`/p-Q2%n:,XJ_p&"2?/"cT7`4-iRHCLj1TFA1_Gg%*)(1!$c!MH+%^3u7i9E_T01M\ lU1s4HFG)mVE^`\c^0Z6Q/U99kW2.K]f``@.'[nG\K*[sIopi35T,PgOjrPmM-!OZ _L&?@>)qBm$Xa/tg?hbilM.$si;me*GJ)gBHQ-jsm_Fm&!T8Hqd5Q362[.cVM#X%m D793/W'6:%DW_)2J.AKT,.HQ\s-eM3HFNr7!dRU*>_"$*?4gEenLa'I.hm7DGC.bE @%l'0G3:5(k,5MG7j6_lCl_\rqbs286(;(EX6YrbpEr;rU>GBshPc=GQn%Y.Z.6^Q B>U=915B3D&-#IBF5rD%=18TY+'W&#Zi@;Yj_$kqdIZF'8Vc*bbh$_keP'f'!c1SM KD9Ae[uC?Z`;e$>YMT3SENu^\M-Al1.fW/i%BR$GF]G".R]$^D>n#8=^QHfrY^c4N SH@0H)Ma@o8,-p-opcCdHN>Htm<;Z6D;O]mC_!R'dF0f)aYVYjZeWiIgo]PGNutI, )5^3!'8-#M]L_4L2S9mkJCR<3+"^L^cf4uNME`YlLV[?E/kBjY2Jl1XJ!7=\#&R(p s*WDq\VWE;j]oTa7ZaVQUltJ'$Ws=K=6kGjj$,C&WE4^hqognlA=O%[WPR>c_:tm, dp'Yp>ff(5Rch>On%G8.\;/,pT,2.Y9/(o)+H&$&po>tQNkh$K@'Ln^Dq-jXe#M=g ;,fh_?tksG0c(34+k!%)hr@b<#;*n+3T'.G]&2ak+&U:5D\]37'[eZVh(k2L0c&Tl j&JosJC^!o>29tI5*V!Z&#KK;[a+7Xs;[/1cHAO[4.#ds2pOb*F8"AVO^KZd_j#V8')-#oO.rTf_!_1-]NoSS=YNV*XqmH:<*Xu-4p3<7gc+; Kp,pj\Mb>^!rc!7[3>3NHDaaB8ai06g-)(]4aU'`F0]!c?iA(:d\Vq#=#PiqY4]qC m?47)GZrkur#2JS3ptVo-4co:0BDi@aWGbWM9]AgcV"QC(DLfZiIV=)^L1&'4A0V< /)F)I:_+6-`cK4C]W&-!fLC]_6HAMg0)m$J@9_3Ch%Pa7I,#";W/>QAR_ZuRS+IOMXu 5I+H6dg-aD(e:URLj?rXH@T\CY6(?mZr%(E h+foM<`d7iS,EA2qYkZXT8e$u09Ml4s%33d%uhG(WNk>p3VM!8'^a&e(`)4B"Cj&L jTo*"R0uhmJV"n&UWG/MfF>48$aA3Y+lssG3OLoUkq:SeMt#WemBk!\;VOg9Dn_]b E$r&DHL0_sl"Ph8nO#=92tpU*gMM?0%6XSH?o:YjWJa"-jEKu@ZLqII^PRS-JA7'@ A6ZDu@Gq1*<@[uh?(cSbIrYSDA?$>O'r;FWM'P^p^je,!rs/SWG"@^E/"`uc!^>TC 8tP,OikNY`^<[:FHBOo:[;Wi9u@uK13 e`PaJ*4XC:ka'<(5jhK(jAXt)>=kC36+)O1J3iW$Y'hLZ3^4M^&LXn8,'at(1PHoS g2`]E"qg#C6sMi)#Pk9YMb2bKPoKpmpFZXL#CN-s S.NqVF=9I*_>g4U>4@"s^25&k3.JROcphD-(ddnfG:3:FEoeqmVE6,j#F15'$b@<" ./h=q`=(WRVW-;WUYB*C[3GhtiJ=^MAPaBgpu[rS+^I4$8A[mTs6S/$`N6e-duq[k P-Ld6Ei0jX2TK+W&=1)VpVJt8nGeH-c085OGoOEeeccB^Dp@J;][#uDF7q`l6;G:q rm-j[(:3+A!Rtu0nK1=?5%IBoGRiDQ7i@#j8:p=V./[hrJ%8?$p^`8U q33?qCLoes[.Z#]@47fU.0/@T7:Hoi&,o?G'oj;O)bOl`9PmfW2o7E\a41^>e1/?d qu!(CI1$dPGJqnhXCIVLrl>O#*7 EIQ(&6:nc5[@ke'Srd3m/`m-(i\*1%&!cV/+,tPAcO\*XrhCs('OWkkm#f-"94!j$q%.2U'gf/YW#^nkM7P2=kM&70,T0W o5hkm;YB303?9"8%98CYc6feKVT]nK5NTX'ZUe^2=G.&UjTu>-N/'.lMACT:;2X)omFDr,:`O6oT2++2FLkJPqrP on"su1Dd8iRuBE1i-d-oX^IW*1mSCH*<0$f!Gl*sm=P.urs\nFIkAnu[J7?jH$`W^ oY/[3\<:L:L?H-N_tQf`d!_?;#+C'lMCBX5AB%;1D/]gg/H/-`Y\2c$l]CtY)Zp': /RJ2AEWZ8&*$2Q#hJMqqh<90sdG^,$rdi/Y5/Kk=q$F"o^M[Xe4jH$'[oQXicA=\[nJ9)D1r[0Hij2\d2 kPqoRX*Dg%;W,t/IKtQ&Y;:K37LR7Nr3I9UiTkOll6FOo":7ZekGq1os1^4HKE$FA LVFqV.c+^XhO`q\HX&Im+;tQ%!WBh6Oc[/'n)mU;B-Y5mDbftc`R[][8g_'chhg!O #puPV%iEnZ)UZXr?V$@gB*Tja5LqW?]Orq">2iO-Edfhb;RMTUCBG\40 @oSm9Li#Hc0Ua7,:(WF.#Dj6la*#(Om6lt+X5SK-Ue:c)grlln&R(rcW`R1uYq"*k =r[6$(gfLidDdA[\:C:&k2GAJAR$6\^dq]nJq#-6TSTP/,9mJrJ^NcVfTqXZ!?2pB o.-Y<*7odKpEGGa@@PO/7Z3mlLOL%$O9?Q`5H`fpO2-7\?YFp.?D,."Vb5EVbDj8; T*RC1gk,E:\%U\\n-JqnpfI08OoO]c.?k!8j6ab/!]O"l**C,H_4(Te^jfre#Lo#g 0fLNcp`h[aT$lY+-Lr\Sn1PAu4`0_6,kQK4)d(l;SGd!FZ /kt'h\4+;[K>p+E?\_J(FoH()%@'R8_0rqd<-q6:/% ,\(/d#qstrY$;aX>N.jh\)U2i@W85*04j%,h]*9pI"#u&]%-$7H`c,-/U$kM*:F9+ IM]NmhVr^Ve`fr3h3/o#a,"B(gtG\<=RB3ao0@7pPP+AR#C`g5q4Yq.At.>Q:)c0K ;Ir\BBQtJj?e4:g(jIO0$ZR2'4Jdt,"#<"uf"+GA!%FJVeA!B$8FL"S3Wsi1aidi3 #J%XNUZ*(=SZoZs*q19.j99B8(ZSGilB=`jH$*/>!.OX3Pf\U[r_kXA5`URWJru'] &'G%,!:SZYU^>Nt`&`9XZhrp+U^ItDjtFdlo7lCKP\cie`/1(PB;G#&02G4@Ii+[` ,(BfH`rC`#FDT*QEo?Y0(NrPY/o'WlT i.%L$ohd0ts3Yf%>XHbQI+N=V/IAKSQVL"-]Zq/5JkJP(:FBY@7\^kfl,f`E(k1IH 9ZotOK/0rknc(b]g2\s^*ARIgGR`^5BNWNKUV0Ur1a>*u,lmr]'<0/s19=L??h5b0 l[qptSk<[k$0Y?9gJ3,<\.X<1c;^4cnEAfLr:OKb2[/BGnN=S/n_?/qnGhiifA$hL ?[WeB9dj/glU;0M-D-=A?_6\6PHT@XE!IsNN?@_g# ,dD27?8*AR3YWg+N"s30NCC3&!c.1FK,.VhYTqsuP9]TIb(Ea)<=,,8IJuT$lle(oS77=gE Z@4L?Y!9.ba6OUV0>S1i.1t:jJI?/#^>7cG(k.#os1/phV#p[$XGQs/f"WC4W&"7Q =RU:4j`PrQDY>Xjn;"F*gdN\9pFYR:5Z2"Ij7s\%=2UZZKqP.OMjNqd:=lBfO(X[Y 3'S$8gnu1/F?3*jQXg,n]n$o]i2ZLdk!^ZiBiaqi2TA]q[kS213'^Ged"R%OTjYC4.CfG* iui\IFbc$Hs(_=YZI7@u'E40s_^Fq4Nc?jXikL>-s+(+^s4-Xh'[bdq;_sAS21dPQ TWSPDEs\Rt!'PJfO*XA,pl@hYq[dZ/?VK9u-?a`>d"Z3Em3'"UhNiO"6fPldR\9OLYJ#`>6QV;Ig O].q&JBJPWU\8A:m,m"fs""+L_7p3CisL;_;]Pm[AKR"`S!Fh+LXq>onNUB)Q0.%j 4Ss7`c`J)d]4`XtMZ9PH[c@M>(2`t<]Ho5bOI*,^UVQIpUYkHbcekALI9g9.^$bB. D0C+AXKOS:s4$%K\)-t!LJop+2'Gtf35KiEPM#V4rK1Hds2!d:7^J`AXmV!]TCf[Z aSflZ&c0KQ1e3M_1Tfj#JM4KlOWshd%bf?rg&Y[bcE+pIp!p9f@G1d. XI$jLd^lF<0tn+SMXEUK`UF/GF/VML0g)TpBDNrNFAEt@fYV>gW'uB<0Tm^_r'Z^1&HZhr/n@HQb\6pjWXB3iIKi;Lm[&m0W%# j:9n\SD:!q_F?>o]m)`]NjmTLs*ABhe>8-J(Y8KFlF=(gb.s5V6]Sm+0cRX38SEG7Q,bk'gUZP?cI5W=hZ$2uGaRW&H1 'p24Sna1Sk9Z4fB3!% jRiqr3=Pg%#F'l@h4YQhJYaB975R!j=jZ8/ckTC4*W0.Z;M*iA3NT#/n4@\'@7tQ* V;!Zt/2#`L\Ge2I;UV8V&[qOENi$7YPc^6bh\BNTd'"9AGiqgu#LX_"WPF5"G$hQ@Ht >9d%4+(rXss&2U9WM[M\VOIjT4i =8:>*`B4ig2fd)46o+mP]Si[#3l(be:bbs,PdAF[$sWt%^O?]$Wm;.pEs9UulW+7G^^/n4Jq C)/rYA&1Cq3J!3 cU^OGBR0ot1CO3@GM_DDmL=UGRSZA;_=<"%VL:?o[#dk#!J(2ThS>V=K-)_,JH(+) )>j$j`8=orrH451r\'6/R59Nks*^1Qr24+.Z0gKL6E4Q?WYJ&H#cpu.; @,6?/A\Vk\TDN\E/`;r697eXiTiD3B%0Nkp6OD9309<-"7b79'eOa99qdUQL&t7c" 7M9DrCcn\632T7_=tS]d(M#_:_aW]p6-Hq=.gA=Tn2,/e)As*-NAo[2e.Dfgg1kuH iS^oaLMmL#mi\DrFt@Z^%'M.bU#HU557dZoC&0E_f^S/^K.F?12]<5*;Jgk'4ou7- P0o/KC:G"/*O.c:9!SM$^_lX\W&Ap/S^ahUpFrL1!^U-=i.%Y/JUheB6C5^urqf&R "gg4e]J$4h-bQH@W!rSor"&,_IYumNJ]5L!@`8:`iMDA1>Jc;OO[Vuq&$+K8.?;(< ,jD?dq]h5HHJAP(eonW:U\:;F"^p> WY/`]11L/gmK/[us(1^"eAqg'lDs_&U%/?k;/SiWGQHS0F"n)G2@+PUi:+/Z4:F4aQ`k!ro-TU"R>eE=S.FSOeohNe"EbIW5R ;ZCLVLQ0LC5BJO%B3h11StDk=5=^/33rJ)/!,)LO[>+W`T'L![s%Z9F)Y!iX ('":7s!1JI>oRKQdpZn59lJ]+/%#,LbismDYFfR"Dq*FpCcHIAalXt%j0(fDJj/'A ARP+?>ka/0mbu7,0$f.',Hf)3QhX4r&_`PXn4,D"+WTn8EJf"nlIJ_2<^ D4/o+G\l,ZI/A#CkZ'[l$`NF`.\l0< Ep$PPlY)er34=Or#<-coL$l$+`8Q52$nt34s!"KK_*=-;Ud5"Ki-:7t"S=GJe&qGa &e]oA;37@sY'C,*s5="rs$?"6s3Kdu`rA9K.6j=@ ^dAt=&Y.1FL`-4-5uf.lFap!KcD7lT*:=:>Q;9q._C80u$!qRfo/*utfn_U'?Tar5 HCmX;WO.jP9+(YK67Tf(DJMqh]+]Tkh!#-N%/biue,!^Ol&8X)=%+WcdsG]UB]aV' TlhPV0RI%]Qdn`Yh)T5+H?HYt*<#f$nX5=$_>iG`eNW0J\t<9q$N=\Ao=D.di:>Ig #/?Y63F2)+/)FSNHCI.i3d9d^hXK8-_^mJ<,CbCG=dbM+Jc*^q+9`TXBnm(H%4AN7 s0B^lmQe4K>5b4"L8/HpOG67r5G;u1]3=K&f'??\nKn;:rkM-?E2>[kQ?IUDecGb@ #:*a.V!o@$"#$=+Dl+6La_bttj9=OILLZeM6`RbH8A27Rm9.2J.B2k4Q,A14Br&%4 BPi6,"Wb."(9rEtOaBBlbG1q%^XnkQ<+gIi2rFi>J%,J@\+KuE1`a;%1QRjR&c@t4 ?,O(uid8JUdenFOOl%&es%6j#legX7>931["G+a+lM:0(V7F%-H8ZQd&$D2m=#-1? V@cGf5b(;#ptoV+\'qA`r+@X4nQuu8hX4ah8jLH!g3jA!@;A,j+L%e%Unf<4W&^ZH 4mH0?jKn:,P,=Gh+!b/dZ+#U4ctE9;Z9JV4LH?E;3>g4cG!#:d4,\')M\&C"aq:$> UX,.+EW<6?O*!;Z/H/`B?QK&c/jM)@_[)"O;;f3Y6):!Qb*G&>BRHX0m)%Y4iNV2?.)di\kA'XNg7]MQu2s*i.`OAKT6D-dQ3?cYa-jcpeK9 opUVN2>=9$fZk)#FSf-SJH*j'4^U@+M=qQ]>$opULt$LR8*4$HMf=-!QnN/+eMKaJOQc,s.>1;3q] T8Y)k,7D;2Ga[8AP9ra+0V0\'1LF+piHDN5!A5_35ZN+Kh4i'J#(//+#Q`j+s&1[Tr\j$!b]MFM0lks6`!$SH8]G>os"BS+/_X)MJQliNLGbY^^#J"TOnh_dD(a i'5=pa*14tFj)+ek)t(Irune&@C6cR:%(mOinEO6D_S,!,-i9fT87>M.Q#9?b`>4P %u3(PL"7jt'u)i`%s6-i+[t^NULN9o9o"35g>89YD16t4nhRb.QC9+Big[\Sm@-o8 IMpTepTMSlF%7PO'<%BK\U?T6jjgX(fotF)V!:YHr)`(YPc8fEG2HQY(j0hHB`>TY F6gNbXE?V(m0#puH!:J[KqH@&eL2!Wnn0u+l6!-/,[UK)tXCcO00Vf9>,A %A9E!Jack*!YdAKbQT\E5TV)GJ`FKV#6-HI,fIlE0Y3+,C:QRpFY/c&4]hD[_?EaN .(!kG]Nu@Q"mbh]V#XnGQi#6,QR?'6NuP3MK*spg!<.2phs5<1cu+%DEIRl&T>CQI 6U+Wo\6`q@Fh-27c],[h2?"A0&DU3%rZ/)mkSgPBlK8r[4)I_'4'W,S#kWG0p&!>h Jn]#]?s#5A?i>Q+ZCmY;&3?:g=qF4o&H%aa2"CpE@_?2V:/`cs#95)*1Y`M,4m54QnW[^mom]fXf\;/8s>Nj^jjlK(b>U`PQ+fs 9?KJ@o#o=(=h!R32YNu`gTS`Je)D7Ii0ge2=fp.lhot]fOr(c,,>+#S5KP8M<)XY/ cY*/_%f^&I?B!R[KEGClAui*T[_?C<;;lW1b5#YGbKn]k^GNRX(HOe?2I\mL7+K#o T\80c^TuS2^R(BpY<;;qoqA#DD1:eiI3SA9QMOR"o!SuP&V;0Z0qjiH&&l"Tn/p-! e0[cG3DBpF:Si$;cOdo>e%1pO5laf>4an\(QDT&HJYq1Si%^o!ANS4LJa@/LBaUK)E[tcH'Z3.T?6l>L%O\E>no@C)ZZp H%Yb)liC#ZjS4cTMk&]QYWm-%BC_i8GL!O5^=;YuRZWu^;5K!;Pf\l%7.7oTJ39CV 7C)Vie;).?'.a*o2Yu%W@k_EoIpF#nT5S'8le3';5?o1XT0;u.]Ft,I[pR&]7jD4L rr`8,8Kp4l6r4e!4.Y$8Ge@5u>hSQ;?mrO*/?F:[\-DL'=A0*YNM";Os5C2n2okeZ S]$hFE%89:Nq>&'c_+L68@%+ur4J0l0>n>m1J4R[8[#[IL,ZD1Vm>SA]= iALiJ`f^$,o*%hW!@beq)[pZ'rtOo]Z-RKJ Ip'6n;6/0`7Yc=Bc4AYmT#(ZP6E]o1TmT!eA.[JCTE qA2!a4qIi[&qiH7,ZiQfHBdG&)KCkm18A)+,97;Fp+['>bQUBoOU_K&KUk:AiG8kr 7lYs,%/>eZYiW"g`oPscDBDpNs2]]`@@W*eS>S(m_8?g"k@Ht4^rnFOdt"t/7fE\F rO@hKnL(j<-J\l2Y?T-#=ipQ*s1G1'rakT^c?ort3a,1A Iu=7Dq:BZ1?Wd4:2mH(]PLG$AKDBkMs&9'R7>db<.H&HST>:I_rc?4H.ep>I?g@7A 9NR.nDt!qVGU:[@Rs/NtcYer$f61K9DH^cdA&s_o3e'-aX8&;t#4cP]s%*tgB!LJT %Zk;0qE&JJ@[C#Qm_@8^gobh6?0cZ(i'o@pAS;OpaM/p3Q\n\.BR^S\-1)d-:Kb`f)+T3s%jQok+iK2AmkVn^tcI$_#Mqf $.&g`+?g$4-B<4E*iHu__l5t5#7*:$B23#]04rBDcHFk=.Hm*XKqX!G4oY1W@n6Y"qKh/)CQneUGH_#Eeb"?o:ApGBqX2"Z`W'jP8ATcY\qpA& e,%u(7Nrc46'W[WFg'5Hi4mLN[+j]iBLqf,GU$J/A5(0;<"k&Q%Q_31Y!N!cqH,E2 5OG+(hMY4Fhlj-'lBaPi)fi^Vi;ZJcq_UE7;?r`8l]b_os3o@^DN:oC2M4o0R<6he P41nDqngIHL"!a(EoihhKk*BVIl=o?Q<8Fa/Ec$hLtpOsM#U8SEBU_L.;Q>>p*SB! gV*2;q%YttU_Mb8!)am-Im-Buk/-Wb.jLPehoMEk-b(-jN+@gjFMGp:`:&K nTl$IC)]hXaJ'XM8asK'3WFk$RUAbf3e^omir;d:_G8],M/Se;X:A#0p^\>%G.rn^ #f[K]LH$*Ck!-#QZ",",`?hsQK\&kF98/B:4.ID!,Cj+hk>L^PSkM/Bdbj4n_A`Df s1A433m>!]fO.9OSS+N3?YcnE(&Whk@D+pF!E,O>\@/(ZdY5L6W6_Y6&R#_EbCciU(JquK5g0BS $g@/1ee_F@%P4AA:hWj9=G80!Zm4KHj+!uQZOUn7'Q3MkguA48g$aAgd"C2nnq*YZ Na$kMfpKgkcp;N-P6GVAlX3=;^sSAL)4^B0ESU_Z:6sg&@t(5;3K1eH=gXqaY06bF .heo50=lPJIqD)t&(>c!ZZn-e6r00^/DeE,cJ*"ms-X5ps7%9#=+-Be59)tbVb+D1 ;5gN]Yd8eOUTVAFY+Mg;q!W'pk@Lb'm),.\5M?$ofL&hNB"S+lP/he!8qQm$CGcNC q"m',F$mG?Go5r?-3!L"j1i2#Z^h&Grs!=?P:&?l0)eqUrE;RL;Xo77[KbdlhNe$; Uu'GtN;r/i+-d5l2LdGkc2UK/H-[9h-M:u\9#Gn=VQi&:9Uf[g_mTBi':f"!pX #*a6*Qf<-Y$Ug.^V,?>K*d:6fs+#?kpqq4jsr.0OY2?J,6P5`@2*TjJ?qSF7Lbj$CPAu Jq[GUJq(RNncVs\kf=l>_Tj1OqrhbAr6aBc@sn`A>qZki)FLD>BB=(&L-Jo_rU]%< ^FkNFkM"S'huYn;s*8JPn#MZP\ifdQf3\BC2hLgsc%!FKPe9[8)/!j_A,iUJma9*& \DYc%LA@U80UZiNVpg:gYhJ??QLW>uM8_OBu?HCQFO`S_c)N6M1+* NU\X`b!9luo\fc5Z0!g>+0KL=bL'2W+2NHXC:j),SFX.7?J+7c6SD"Fo47BC"T3b? 5I?e:K]eG7?PpS6mk9a<*O&9gWi)C%F8]0-XB:8X)A<KILB!\G<4<7-ji?KmQ5qd)*m*Q'm")(B?i#?Z,[f^!4l7(>k@D?GlH8_8TV?:>OfK*[s@\ _jtCWPusAW@D?_lT2u3q*(;jdbi\o_=rN\SBa?bVO9S[']7b(]0Q9$R#H;%Y!7P=:G1]r#MA_prZ@8VemIcgUnUdHJN9F\1^T*]+oH3`R5pO kl;88mU/_8Ep\iGr`aF@f8Fh/+6.#Om:aW3hfq0]@1<$ls(\I)LAubb5FBd"+Ff!0 3LR?jP*[o`ItFlG5?u!QAh<_tVq>XE.DV[jN?^QE_^G[Bi)0Pgql1]G!, eqHO7e-Iu\pj;Jg3H+*6CuAI!VG]G6nD,U_e.6EYeh7p NTL)qTrk_dlhL\W@J`$Cmp;^I5CNXY"]0n[m0,DO+K9kQR&KSnD19N8F]W8qddgb. HF?rM`IYF#_hJ&j_]RO'b>uj7 [P.Faj<.Tgfk_T%7Jm\kNudOqB>03%iID\>bNDVmfiT-MO&Y4@VK=Q,F#K_E3`NF2 LjS#d*rkQK"9ngla8U3mj?MNsE^p,ii;^FeiBQm'_>c`?LDg-LT,C`j.L,o#@bTZ\ QbPU/HPt^$*f^1dj$\8Ni'3FZ-LiQPZoJn*1E4e((/d(4eMJ6b(b4c?;Pl1LQUcouN[Bdi4QA5EtD^M]3d' $ne3ul6]b$Z,'KNLOZEcn6N<@e]NO%='>KP)u"NJHa#FJf>kH=)XW!kqhSJWEXIlj ]q4?D^Xs(c.FQ;3pIhlDbH1%+""X6Na@F)=.G%c:`CLeIjI (O6h*]%mVk)a&$lnNT7pbW7E?8_lJ=eWZ5LJ40ai?0aa"5ou">1hML\UnK $dah*d"UFJXHu-=`2?SsD$l3p0o>NX640CJ^TZH@r+G[EpERV+f0fFF%).PMVrbZl _gSS?h'NShFdi.fR_)X:D;j^':4$!CShR&86cNa`^hfi#3)%Sh.oe0o)j_Gt_%n'J k1.+=3kPpU]X:DP]EZE+%EAErX#(Ccmp_,;^MugO@HW.i^JK>?18OqM#q6dZRheA(,(b>$O.fD a5Vb;)%<$dNQ):Ei`ddng?J5]"dsi&'M8.bd8lSI]eGWAkjF.9unc1AobSO[$%0r;G0a ^V?0\fnV(fYWjb"+YNiq5NE7OSN$,u]Fl&okIL&fjR@7i$,YZj#%29pWUiKCCbea. E@_*;`Ze"PB-O'a.Y>,-!qJ,r?%\hn6U@Md:YQF?ASdMf74+;RdHCBH!G][6>7/^9 g#Vk+FBWsKJ&c)Eb@5kn6D=ar'l5FqAau.0iM_D61#cDMO,Fg:j.)Aek4F;en#n,U 0$7L-ONj<]&Oen`>sIMhRY5`t4AW&!5-s*';oe%]HAD)r^%/T8jDP@1)$'1&F)G@'djc:s_=5\RcG^p+k+H[Y(D,J<\ .UiP`0eMkuZ=rM2@c\_$7/]Aq*J3?9T5p_-S^)p%O)h(Hh+1N*E$T:LQ\O*7)X3<" k`;a]%4*'RHbsPg@U$hcKd2Fkbd27GV+*m-2.#;>Zoc^m?I3$FLJER)%ibXlYNTrG0`$YETuU>AmR+/UnI: hl/d6b;81^$VeAc55=LiPPeX3:Ysisq/lZ$>*I,M7t0a.q7ZC@m1/IZ4\is/O%T=l O^%?@5Rk3F7lV,K6P/7=)JMTl1qH6u>1MU3]Z[c$bjX[4P=4h-?/EO%YJM'i,%4;F ]Dn(<^PApt%pJo>RXH8:GsCZbHeRTU7,W-i270#4Z0_@_M,AF3n]lntED?airE)RJ (af^FahlG0]g%jSj=[niB/:BBi)An[.^]N4p?uhAkr]e1\=4djQm[3KE6'Sie KVs9tRpM2?Y+NTq?b?9np3L&RqOTSLDUs+ff-@lPf"+UHp;=ai!&'n&Bk1=ZSM4E!_I1EFp0m>["bXkMVU'EXj.83?hl8g:gN2sn.P-'eYl28[ j^(020pWsqP=;nQ7gnF`*J(QI2K\&kEG5T1J0jI6p,ifoIeZ AQ%IUH,WIcS/#[e@\Wfu&W@%nYWa//eXtoeg!7`#&Kt/l5N';<_mT>J**g"HHuZS* n>Fsr1X\j4bKR"C10gfhoSa4V+$2(ncP06i)P>1=-2E?qZiYK::(q<2@4%uNQko2Y:;IX_Gd^l7@Fl$7^Y$#P1:9:le[F$FMS*,JG6'ld` ?J-5A#e]iq]Fb"5cg..Hl^tpG4InRDQqsFfD_DO5b9*6=f8kCjShQh T7gdY9*^t/N,JguER/$E!*Oh/]N,eKX,(Rg_SV-/rVfef!Q;.[]l'ZEcO+qo-1-'g X6C"oP!mg(.0,["dN\JU>!*Al.7m3P7gt3Y#K%M6*1"gPWlq6;e+%FM7klfVB*n>d &#b`f4JtIFQtK9_qbu2M_[/VN3';"@nlqC4&'spO4ZE/9bikN'POGM&IRN7X/>1Mf gN'(XlOWqlGPIL;Mf55V??p4SG@tjFDqi\]m`Kp[RpBrQ9jmdlnBgWp2@i39c[&j[ %fu^@^=HI#=,CW3M/2R@D!VV5*JeX!`O>Dmf5q7^OT^bi0n'cKC%3G`kVdq=J*RFi ')F_*o!g4>Hdii#[)M?NVba#-^SiaB8QT_bpiuI5C!goq(\kX4T" P.)U@6n`rmrtJi8#X]@,I15,KofqKO^Z0e4+";`aB-1Xr,;Nr%OoG=*Cq")E.: f4ilRe9'?;jg&`W`ss]iSQ^J(2$8&<"n0hAo0`9B@H"ed[-^_?7B?Lns,@!J-L0N] c`0.#_4U(E-C4d]Oa0bb6\!qDf']*.%u2ooI5+_2DE#b?Y#SX'=EE\,^$YbV[t8MT k;*(cJWOWb@/Vg3rYW:,gP=fN7cS3gAgjKm+K7d9]Vfk4-]=j#`7)(QZ?8.4&b2ZC ]?4*!2kmL\<8-NV])C;2.]`B/YZj-tLln]5C(L)(*%aE:r!H[i-A>Bc9(.<9U$DIl )+E\c,u[s[':C$IhI%8[%li$UW=uruWLuY%SeicmoB53'nqV5(4]M.$*LtFs+CSoc cZ:^/#((E"(p4#2a*.X`BlP`fP2Mpn$V['%^W>^%g-2?`.U3D2&].m@;FO*p;fV1\ $!f%[T9K;#@2-QXq`H1aJ"$)B4SgC3#t*oLir<*#!IoItPC7&d?f%<9j8/iUo>gb- 33<22_>j&hQDsZ1\[:e6R?F953giVQpcfTn6fLEr7#>BkI95 r"&eAaeq2SgT*s9Ij%TKHX7,VI'`KZp0-?PX5,S>m8'mibM(m!I]H!*?PZqn 8j1(3c#<\;]Ncg^47NZR?D(uJ:dibt#jJQ&KesptmrE`kJq'0/jXFaA!>SMi;Pq@R U@)(G=FJ(j:!J%*8ZB!(li<@6TJ"Xl8+)V<\q56LctAj='UPTqV:r,]iN+!2A, GbC]#;#f:AFX0Ap"_6UJhBPkNJ9Lss,iAX]7L"BM-Yc( m<1+11f,ljdVp_:/kB m/KVD:aeI*1cHa8g"e!sbrX_7$8)>VO)qU;n7T0Lnt2%/g;TSMqDMhIfBm:p'Rg%3 "TO"%Z8XQq#(M_!c-IBj:Cf-hL>+EO+,8)o9*u(Fq,@6Ns2k9XikKrOuc$I.jOaSj;pVIm\mr:=ogO6Psj*(Eq9g$mI*;m2Ni#BGhJaFTX )D+-/!.W6+q'klATt-cG1/]QM8a;r!po82C2Xei>)R*L.A32e3\8<`\NX"N2.f3m( Wn6=icSJZp[[Tnj!<7JcIh82i\lQ^rXbP@19rea$KBmdff't8@ZfCS>e n.><*D:A(0Yl`tsfEM&6[ThC5Rdco'Gbud=b^n:-]cBs8Jeb("Ar#,O` Q7TufpLp?C=HRTRT4Y0I`VNCug^fr1V,^97.uo!aFm*&BFR-'t$ChL9""KCfp4cNj !pPWCPK#L)+;meEL2'oPPq3nJD')F`%]+?/VKG\1oXm`_R>gMMijQOZ`(o![!+'tCG`SCp6Z!DT0"Nr0nJD'2>l@(*I=86n1%AZ%ZY6O piJaT#R4P?+lCZ]i=(K*`4(s=YZguS3Z"/F042q8X(b-;)BU1&kF*#R&WX0E<2Sr8 0;cGtjVHjq$QBPWBD!?a@Z1"G(eF&[i'5X3n:-`L0?!W^(0h@K2jrK` HT[ill^U)k5t*:$gSbaA(u74i.i_=N<$\g_s5Rgp;A<6ijiaWRqNZ1"4r(Zc7;bkI@6=nOI>U)f$3`Wf H@lU;]F-e`Si=7tf)"4+9>"1Cs%R*U9:D2QWi'^.let65.g5nB/f(IX]M!$c$0f_b 8&4PRFZ,#o\QGfS'q@41'5`) (btS;_sKkLO8OdPqAR3SJH+RL"sL.\/-UP3TG#VL0#7;0*[e#Ep,b+5[dZuAnb0*D mF3pi#;TBEa+4k3>QP`QFN\TM&s.?Ukn7k#Op:_2* B?$@E9,5'\:o*iW:@BJP[*X.slsoKi6j0;ekp6I'!XVj@&4E`s]?<4\qcCFWs/lpD B?keZordsn=Wp8R0_>,.]rukO%CsI[e`76,qdOCA]/VMJcg]PK3M1eebl(^)$1U7N ^LRQDs1&,B;uGtJr4gQ0^a$W:%-##tc2Uker'(SP^1L*$@pEsRi;[QOa:`uaqIBDh iqgEGA06Il;W^W?9=`9I&qYU(!?g*G)tXL4:\K8=oHr3"&H.dgcb,nm=/Vn:5);[Z s/hSg43T>[s$$bohhd),Ch_nu!dqG]P#]=('aD/+<<@^S5(#oPAg=pRW%ID[BuBDG 7Y(N>"_40^a-$Dt;Mb?c'09nKYNBa4aP,X?rhE!'2OEKsm'ClIkA'l0l>T@;!_[\A \"Ts%D$C8--MRaX.0R"\un&)n@C+h](h=":N")5O9*f r1F?MJmc6Z29N!K_BijG.[Y@R*\RNm;GVOj']<,to4,(T(W[+12qchhGE]R=FEtXb@9)sp4WIopQ2"@8I;@Sc .[l!]e-W9bj!>%\*>9=9?idMRet>Q8F2EG"I/`dNc))bj-a0VX*LS#:B`X+]Z6W5q 0(9t\pG&T@&*148Yb,Y/(\2LO!$XaVJKM`nSn/$;0Hgf`'#Q]AY+sC'UQJ4p@KE1Z Qid&p*TjjQ@Q>H,>C`'rrcS2ZJ?3s1QuAlCg]7AH2q(BRBG5RUUH;<8]S-<^5LQXB ,P0`5+MnB/dlb$P*da"E+SS$@mlbof([M"q378&i++/SCj9LA\VF;JuZk!,Nn3:[d r0Pq5ebg5"i.!;rs-E:Z$]R+r>/G8_U=j`:`uOO"MOrRnYHtjgiUV67]2$LdP6SB[ .QnDF09,C^7,pRfm?$b;Q9kT(C>j4UO#/q7m89Bk+_?q*iEcELEQSO^\p#P(Cn0W2Hj!g Z'Cr=^BOXF!D=?:l)K!D3j0<0#e7A2_UnCPSEeaP3'SF*0?6BjUJ;:*:0=tfk`mot7iL)9 )M/41_#NrO2JHRJ!3^"!=$=\WPPIBE9*5*:H<'\6<=CQ&%sZtJqipb0.U+mo%FG]Y `LSJj"=,^m;V3T.IL^@h-Xo6"!W9b8e8&2F7e4J',$e&CDJ%;ajtRnmTNFu_:n3je #bJg^dI*m)-oVg(Vb+7^.I\F2Ifb+Ur&4W5m-dOLCLEP;R3qG4j*9]`+j29bD62lL /5rA^era).d3t:m#VEjDLfaZ'p!?/9n?tR>@:SME@P?]Tj\@i>rs,u?d:NWkP>TSS p!uRe^pW##qEOMB7a>r^^9O6;T@/94E9,`hmkkW'Va3]\Es_YB%A2NVYA^9?n-ud= i$LLSkdm7f"n_WC7P "F-hRH[$&,/79o08ub,fgOheR"9Gf\GJ[dEU).8C`WKD@SAr$XJ?Ns;o7qDk\J,5f ?D:2#+nCE''HT!nT\Kd(IkjB-KusmUl3.+TF2m`XQQ#2p!Z+t4mX1^KQ"8Y0=r-08 j1%:'3ZoaaBo)RNDfG'X'`MFGShus-NH`i"/Z4PV8/PZn)k;uU_.aDd\BtKd#0qf` T-^\Uk"huP:WD=V@pa0UGk%CR?iNt[rC?;Jml==]AP_=Ja2DD:5;@`n514e7O,]SY _P,;TUMhA=7f6R@4=Yp^8oDOG5k?8!@4n3i3j9@uG";YR3=Y!W]XnO.$#k57IUG0E Lal:o+T?:@If5PNAZ>RU,sfk/BP9:94tH/4FL":nr&qbA osgj0!I6mclJ,/gATt9;9CVZk:G:mj/`k+UrpWhd(C%'r*sB-%2jZ;l3a)A(=7N\3 #(?\b@2Pj$KRZT-M!.md33PWmIg*Fj1rX0sk-g?J2%I6"O1El$\tT@eqV\2R8-(+H W!?a$:fnZNqo@`)lAk@5<0mZ,$N)ECn\QrS7d>u*n>Jj2(a/0u(OiX7n,<`iCTRHD Q''I2A2Itd_ZShHLWqE$5<(2Pfq,]NH(Y9ki5NNq)P]+(rte0t^]GE*09dP0I!2G" ;LgNtK"Lp/DB"INm7dX,\>PtifJ'Z&@"+[:WE-&=OAJdF7@um^+Ei5XnYqdn_8t?N 69F9P*KU?\5qqdm]NkjD8VAp["kC^T0BB3l&Opo0BB:Z4atB=W52V,Ym^N(@+*=_/ eHFZQ)L;<[L`hK;S]Z"FiA`,=m0,[$ptjRV*`df8ok'L\G7tP+nDE;=!c3qf0T5T\ -]7N$i-SZ@_/ji)IMG7U!8nsZD+=%;_L>.25MHglT?+E2jI6)ZU>V+1Vm&s]a>"K8T\! IaC'e*oV_og/iP#8I@@k(i6'JdKJfQdb)69F3eGmYQ2OibF`JY]/2[X2&L\JfS1o3\W7eUQfD#_3WhKpEXABRkMU ?"!?=^eu]6S'o2HY/#CIYR3s8V'MuLrnCAk%*HJ7`^7;r 5=-[2>9W?0-?MuhqrSQHho6*+bTSNgaA!T.4;H^/(HDWr=+k^H00lnJY5+/,J9N.9 F@8'*"H+;9hTgdOJH&;VV]r?^2PTA_P&r9C$/f)#NK=ML.p9AL$Eub6n!T"!K#c!S :9lMWQcMP4Rj>hhN`fK@?d+T5r86Zfhrg'('i09>3K:jf_'BV3"t./sNd\c>Ibail f"p:?LpU$"C@G7LH%TnIAD!SD25]@n24ups)H)nYnl[7<+;fD@NU(fY'KAfV7`kVh o_b&ml-HmR^D9NC;)7_^[Jf0qOr70n#?(U7rdW0lI`YFaRPjUi%6%I>c'eVc^el$W 6gk[7?i^i=Y9j^,&rk+g[0$@U]W0##?V^GV]aebK@+S2[)O0#HdUB372Cb):J)UE: Z=GCqBKWNXeVWU_<``iDrsS^Ss"au[\.^$/?o;8B/s\Kp+[o!tA/Zei\`":/&G]h] fLhGK-cMFVCA)O<7e]S5VAhXrIipO$28P*+7#gg1X)dY=P@23;s]*; %);r@S=^7:]GP3:J-Cme+TH#hD%KqQr"TgIjIr]NTe5hs7[\bV\::p9^UBV7g$Vf/ b4B>Fa1Y7B)kF("[Cj[Y6dApC($0GfGlcc9riX@Za!?s6g2*eaB[<+;Mq0.:sBbrYNblHX^kI_B+Hg59"oJAOS&cVe,BIXfP`+hN_ O<1WmmVdXF%kpENLE*,T5DN6sh)AC6s+C4rWqt&],65T1.KuIGr"H.cro[L"`*7*k =F;L'd)$SN1m6'AK+!KooIi1KQSB+f\N(\HQc,TD7m^Q3_Rh24q^*Nl?LrrM'?#dh hMJUjEFI0mgu,ehg"R>u[c^(V[qoOMAg.GD&RFF**Rc`k!.;!N8-F_\!,(Hi@WF(T (XioaIj^>nj'5!5P%o?];rCWFYm0R6X'sM//@dB$#5_(%H7,FJhT"S(#r4S[R4A1I JA7k&2(n!NK;ce=j_E0G^h8q$p&H948e*HZ#"5ZQ:,-#Q]:(APJ60a0/hpH1hY'[a qN!-*:QsfoZBS3+:k6`(qc?^l.fq8qJ-Fk%C5CNkUgP][MJ#-7:Z=(Vr2JS3B#!D$ I`bMS9T'!;94l\mTDptNp=K5!?aD,2q1)]oq!qq+r&o19$iC6X80.g2^D@BmNbFdS 4J-37:GD*HJm,D^`.mIJA#q`VQsa;WTLHu&LSu%6H+]E$PFo*OomQ\XFEe`7W3j&s lLna3[M/F#/aQ\8*.#pIYOKMH8Y]hf->lDJp*l)[XPg!aLqs&@S?ZEs:AnK[""D$` @_<*H5)Z^se:GGd(M@mc3BqO?IeFQUm#o*3(&1RI!AR@6o1nTT'Pq9DgD8"ig--40 r-<1?\FA73iHJG"UaZ!1jD4nl]W,UHWff*n>rDO9,hO54>n/1>lIn`bh(QmhhhX58qlKM#a=d_#Lst Sr#-PTua1cEKFO$K)D)PbZ]^-%;6.\JoP].J6SG[Wrec?]Uf6$3uoAc3Bb=.%FcRU YQ0@VM4GkYnU,i&bJU0<7">FL\Wd[6OEajM=A?^"`_lb:Bi$>X%j_Tt +XmCR=,+I.%rNB\Y9"$s3=o!1 2?s9\j8CN^%!1@A)ZG85GYI(!Js*Yo3rnEDQ,GO\$S?mA%#X3dJV6-q!KZ5)AHBUH BSKB[mu\0b_a,=KrS8!9"fMboc3G2Hqn2=jJI@"p[qhSf8i,4Rm?A0bn,38'YH6Wm V.T(mj8\e\J*[Gm0==ap5dn@AJ+mf83u7>#;gH31FoIT%c(eM,8%3/`"ct_TqKU=f K91TWAg"i(MON_:OoH!mZOF3kp&PE+!Y8rI*$ir6q)uo`".fMg500#gHDm_UAnp@(L-EmK$'hr(19:am2/d@JgZ*#QlZ_X1>P1=X,"D8!Hk&pPe^LIc0:'A#=,78DW]s\_Dc+ ^I4,_WlmQ5LO4#Z<"JHSC>m7;V3>7YBAmJ(.DTET#Y>%\(XIU;rrN*ApuG#='lF-a C6JGF6_KHd*i[Um>l,Sp1r?C5@T89!?[rNGJbbs9T:02d._0mH=MTGSH&peA::j!u mcE(S'\\QfTi<0@SkMScK(sgRZ4i-\eG1bn($"(q"fG\PX;P[#N;:/Oqc6A'.n;]P !:hOV["*&W8"GZbBt)pdDQ!G]S-\EZXOI/dZfMq[ItnK9!,/jUf&L]S>bK[Clk@:l a*Vmcn_&Jfb+kf@AnS/=:Hpk0s4j^:f%uX\qi^Cg8A1]I]VuQoh]Va"@;>W;h"#mh ou:XUD/TlqQ]6=LI=rZ^Vdf+p!UhKmUINJ1"8G7E&,_4\8.,C3`:Q@*2&b=*'`)i( XL9dT\sN$$dJ\@no3u5%\VIHSkFt;#U05$8?A4NuR6b^u!?s.l!-Z9^idHkR0FqU) WeTPB''![5JhS6;^4H)!a\P;u!A*/u$[A04I4YB7J'%il#QDX$7eeA&9N(d_i=SJl ,SgCL:[g:T;I1L((^m8V+GOSEj``Q*pFrBC+^R[T!rUm*4$oM3q`,L>g[>tpQikIt@+\be[@4gcd VP&R1+>AMBrH*QSiBK=(`h#s@r&#[X2:o5Zq#=RrYNc1s5lLlKj,YA`iA'1]1BD$s .Gef<]JV:dQ53mrMftc4fPZSOe,itgRI%Lmj4PE"?5uk?Lht#c9OW@,fKjdlhe7') AD3+hVIqs&IjPZ]X #cD)TU'm^B[1$feO(`VVK6\n[iuooh$3)1D-Y#7>;e1^b+uC#N90m_TQRmTP.0KRQ 'MPTo@-%X7&,[fe?/B2rV3SiGSGu/dk(9i;F1)]4?kmT(8C9V!,hQ-iN@(;ZJ&\Hr UnaaE'/GTuA3!Dl$h&KcLKurCI3K[_lcqgtgk*Vhns;[X&.g]/inm_u5>Hk[RJjI* mRthNp,.]&T/)Y@XYZ7m$Aln#KZr+52\ZVaok(bs&e[)J!tUC \p#k@%l+nSUZmD,k%auMa8Amj:AFjg:pHH:-i@>n(k*.U>N]r_F#,1f4"FfrQY;j= nmBEr?^FWkb67g:d17ebaaIij4dXmm[<2>il0/^Ij,;U=KoBHEJGF9nRC3J#J"&Jm NW@.j%K&L;%09I@V^m(0Qs"3FWqG!jY^cbPLK"@j `Lt80I]plphs+P*(PA4r#oHef:Au@.DkE!RRG`;4q/,-umA"Yq4b4?O=:^mg2dcER GoiH!N?8h=RL%JCJ-_dbO9,Q3*X_JR)dt]Be4l20J-CJ9F>\TOcIc3t @Coh2fJY=F+2J#_1LL$+g@ic^G]c+3c^Gc%kPr!8.LXn:0$#&(?P#csgLN2Ts3lpV 6lD,GK51(tW=IE'+8CgTaV08U/QMD?p!5V,btEi;d&1pnE@#VO+aW&iHI-(0UA>Xe3c)6SG7N>PX%r5'rp40=$ei;?`$c,&\iY_\C%oMibRu8A=31LluVqMgq#_aWci0W=' n,/7P6)JIpB_(cZfp)UBM>Zn8=,re-T>Mb/gKUW,!'$]5B9F1nN;SIG"o(mA%58(Q J65)Q#L=b-JX7t-%kmJCcI>0Khbl#n,Ju+QR:G]ab6>BcN7o_>Oai\V,;fOebWR:/ s8RLbiW#ET`-Yo]e%Z^C!qsJ!^g\Eh+N5PQ['PoRZBch)ro6>MTt,tSlp%tmVdNKM 7s'`qC1e^JB4:a/IJun95LC.Dpj[iZn5^e=$^cokDmR"2Aq"IHotc#La1HG4dQtMr (H4n[O8G8`*4M;oAm0C>0fTaTJ'Luk90g:BS->6D[ZWebPU_-K+R\oL;YX10c;2ZS SURQmh(j/!!rqk6r(%068r%Ig0BfKT6lYa;VioH2B4f^ePj]"@9A(O_g!Y(IUZ<*h B5XN+ioN7:c4XHY^`fbAl0*#@fS@9EK!?>01;"Wd@"_`7j430"'PlTGH]TGZRMM?B"YZosm5>'VNY6+_1VU2Rq9@ptt9*#dOGThW8^[ _sU:3c)kkRY_ECb-a$GeSUQ$djKW.m?(K3;q[6c"SU#*Po_:[pKlKDh;9k`Gag^mU DsAWSd>j!@i3%OO4oLVC#BF,j.;H/u!-puIo0^SS+H%-,GqnMa"oQDT%t;iO=I"<) l4I@W88tUTZq2l`T2+ho'=N#e5&938D[O3U(0YZ-2W9T;THo)..YV$LpF1pfapIg` $?\uPEWum_EUASjJA;>AI`J^n:LP?emq3qW*!=J619Au'J,)#20]RMJU53U[=X5]' !<,Q+/#rASnTXtb7/g6/4;I@:r2G807%sYp8n\H;!MGZB1L^@kranKgGs'];cSgVl *!Q=sXn*Vd@/VVnk<_/r"8Ne\IIsan*aA\c!W28Q+ J%JFf'=9Fu>*L6`ig/_LBQ0k4rHt=TK%9!'DX<]tb,t!aCrKS_t2(Eg/Ng+;`eL 1%rmm][+TP:LLR[/5HnBMo4ViY^2-gA.:>7]p$iL1\#l$Bd5SL-t`s?Io:5.OoJne n8cP48sX9FGFZnW#<5ZTR0gYjFW"?T="I1WI6ir8:kun4A4R`R#JT.-$):&jkX!R) /5E5goB>&o-pHa&>:G7(8Fe;8#XWjuJ)98s ,[^>..E0^5fjgX1a$6HDn/rhpQhHp=KJ WVZWBr4$9E9.!7.O*?/5P[FM61,2.Y"kR$EOIES2RD%E0I>8UeH]MO*%PrTqDikO) GW56LhVaTEJo2Q&R7qGpF@uB!jMZh$q-p3(;?1/,lHMBul-ak)a;aE>-M+V'gDCH< PAoj/!A5f(aT[T=cANBs,/)f7lLcr8-n,^BNRK!T>_%+6g^]MR_:uMAP=(ST$UB-FR TJ!/>D76oW:>CB?=8$i!*:EO14="[N_\$iq#JgAJ'/uD^Y1AtGI!5#?4oO15#!$7M $HiqrPT@trIQ4gZ[&E=fk+02[48Voo)Q$dt8@`9$NLP7k,Xc_4J'Ks9P.L[ i!CeD6@,Lt'(abq/:d5^=9(?7J/?$HP$,h(36+oVQCqcs71.(%`3iPpQ"L7EOB7Wq ?)EjB(RP7$77$)*R-\`$n\:OmYuD#XdMKrW&dntEXTgb@Wr\aaUC6Fd0aqcFHYIr? F>%K*=3L_bkLVo7s6m5[LEaCn%Sb1gFKLOh_?g'rYY7HAncFp8:+c5mA1e"V%c^\G (&S10O8Vb]fg\32Q$-so6JcMddf'Mp5[a3dc/a6%0K7a'2#)OX]-<$F36'ng/bC`' kmBRG="DKcK*^K7s/>`lrBKA[DtHn1N"J3j"92lUrlT^Gp+t!W:>h0o7Z4`V$/oeq 'A1]Bm56*Tks9JLSul%dj#3M-2NGIOJ!Z1*mJ^id3D6Nu'Ii@B&=11g]5j$btQ:!rRDdW^h*T#Z&H,>!W.- N._RX("ZoL'OlO>V7DtR,Q3tWV<$8Ff0PR@!J!NENo),Oa)Y*pcWm4>/[_kF6fI+( PI&()eY7n],u`IlR0A*&kke%&KX)]k'I$V%q[/^7-+U-N> s0Z\-a&MkVA8AU?qH2`T*l2>TEZp:$L!ZK2+bJr+U&^+I\HD6Sb/lt4$;aeEOX]m&L7b:k8E'T n8Eo/?]!C5EUu7EO_!"93;$0MXc-P@42j2PWXXp:37&8`(Vp&7\&T,RkJP"Kn,t`. @!/=&nhR]T,Q_?S?j,<2&&87^']9^N6\ipg:AaqXL.[YNO7j=Fe]YP!Rsn^/rQ2dT BDXI-pLfa3a=99AoAF$M[Cr;MqpM\8'jNPN-[h[r!L:[&)NS1lFM-5aLbo'XI%Cl= CAYOpJc)_LauYsPrQMi:DG'gF[eV+ZOU;R.uRfr-V[EBaX<. 4Sohb"Y,?%!=QsYEsE)o#^/cME$C-h\e^OK7O>@A!WEYJ;ZK=)F9/c]r7qG*q/*+FVrpY<1<%\1K&$Q'5PHIb?s.b!Br26P[7mQAUE!W@o\f>6$ U4LsO1q%r^6V#URQNi,uk$,)8FW&#&bo /:]SNKGghtI^*\%alhkWnuEhl9^$6d'5`DP["S\fJ%?Qt)#4:3O)&.Vk6,'u8)r@Q U?uZWp9Y)q%A's3gNjgVHFKO&DEipDISMuWY55e@L;dKu?1Et0%ZeRXc-lt>8q-AR >j#o35Zk+H'?fCHAeG?Q$RKs%Qk-t;iHZWTVY4kC+-&qMNA;ED:1 Ef0@9-#X2gZ^QZubXau,aMn*2'RQ1pZ,;caqB=+UmkV-I'0PL)m)`7BYp86-6K/9R Y^t^s]PffN?p53^%!P`=e4QmIr_`T^7/LMp1Bd_bF/M4b!rm6?&Hr-`g6]:`;tg>Y !.6opb`n:nim.cA5hZs1s.=B%Hn*/9c0P:_pjY;FpeAmRd!e0YH]:8^,t5NtP/1M4 5V:t=r25R-#>+kac2U"'cbe`*63Vr?C=_UhAEfSnmOl9OVfmgrs"elpV/>tPhSTKq ([/,^Fd\o>S]im9+f.5.^[)UB8(Ff.N;m'B#qGE('h lq[Th\>gd`UF.NQS6ocL^=hX$j:<2s$`\EB\rJ1VB('#tK($qA$kR&rH YniSJYot`]`'1?d^Y/`IMAUou![t%nL`o8Z@9\Z"`sMbh"]4f_,Q]GKTS!3Y0`UV> :CXZVr(l>24bB*"M__lbK4N7NeuW+M]#ZmrjA$7,o8\E=^uPA3V*'a%i)j cSX+CB`#OD`rDY[Yj^)o"T6/)@1g,^5dnqrU4D)[qGdAO)IJR 47CU:gSO/K8(2UAQHO/?Vqi8O]$$;u\r)hG$+"c(P#;fLPKS;SeuE *loF@Jg0BgWoIAWOmCXi*MLFnV=BNg"]3#WQ[G4#_gW'3rtm7ILqd9i=m*O8s7gg9 ':\b6r6o*pk`H@^&3F'Wr?d$K4heu/I;KFASI@Y$%D5s?F6j@qm2TlX0$C"n'gZ,H r;K9:b>`l4%)2m?G[lJmnIfPPpQQ4.13%_fC`cCWUA.O8eD`Voi=JEVO:dEV[E*rg 8ItiVN%s8O;XX=lS?^%L>f$bTiG;u\UnDKe76E0c-2R]D$TL"#5s1bn%!nNm,?MZG &>^U1;MS?DT'6BT!2VKdSUH+mB6%POZa&j!-sNGJm#Tg,+?t"_T]6"Kbd$nFj('tL 4@8Q;5'uY*%)lD=$lnGQU);lf_Z+i=IIk9\MkN:es1#'U9tHLi^hk`YPGFT;O5`1( !%J/>J:H0PY_/YfWqcUS>5g\p.DTjj;erp9dVe]RGilJ6F.\@;aZKq*4sBFp!.T.h ^mc0Gf+*@[QfFhAS%E1EQ,*FQi3l2_GM*F8X?%=7(XY,!h`SkpJh-o*DC%p5EA^/l r.e)jptp2kau]Q0^!@V5qS-ug0rg#u+"'K)@`'RRi*3Db!<42k!%3A:AiX?8aT'S- DuMljqU^m%i'5$W6fuHndccj5?oY+ElG8//Sa>]Kbg^K9RDHiV]8^Ed"LHf;;rbN-X$uh5]P= Q1-d$=XA5Dla"4]@XYlErr/Q,2MH_d!9(s9=Q(-meimQAmoqZfW5`%O!DOetQe5c) kJ&\?"P0DCm/!g@oeBRaTP#.XT0*/:K*=LU0]5s^li+E=mOhYlhJ.BBe8aJC]?Qmi ]=Z<8DH3-2-p)bGTjc76h9!.8$Qj.35Mqt#FDq$9"5+3FjP;k[F5*YOJORS\,:PSF -XPCN)XVFog>/cM\m=K>Vk$]9c$eFb:^R'g@_n7c_;M=7 cAQR8]@S50[("T;^&0A7!;"9/NE;mZOZEKoA.-pQK0)"15g=0&:CB-I$i5q* T<>oY'lK`Qqf/F0YstfL/^ER0JN_mc9HXK^lO:PlkO %aTO1&s$`PT$W;&V$e7Crj53dHC0msM";CRdoN@+%U]*=h@;U'::e.lH[XZX]tAIi :RGGXb34h03@c5 "lgX)i?/8_M!1(sH&2L:54Xu2:/41G^Qa`4+kQ:a%H^eK!'W;R;Css!KTqafW*NBl 9-!b;=V41Jhp,ILYY]EZe(a:%uendR3& b8L0Wr6J<722JIq(#j`<(ao9O]BpXJ\3*TnCDJ-UAcl3Zncq"2EuNn)FFsaUEU.2K H::[%S%)e+k6hKn@pE8g0GW?iCk&5RBPG6Kc,HoQ[8^Ch!1o*ARA0sM--/7rNip(8g?kB3_n[]4HWZrX4`!rW2@!3](H!12Z$(0[l^=`k>hMH(r,&l'`2LMMF\U3$U%u"L:8)^_PK-Oh]P\!_4E=C5*l8n>cTu^sP)9&,SM] ah=`@$:]Z2fdQNq+7ZM#qDHB_/Kh<2Fo.#N09%SCQsL@d5?0IG67)k\Qa>t-s6rTX HbQMUhC.js"g^t`rZ%;$%Y>i-^d=-(RDcM'X:4N:H3C4&f^!gPm@@kTlOCn<6D32q p8Gmn?An3q/uST>u$q*$sii_T9h*3<8F>WCA iUf3eZL/aYJ$_H+jq5uUUVof[nQ5AefCm0i3#$Z2B_$5n1QVm,S]H/rb'Y+3p`eg9 6gj&jg^EM$4)K!3g1-__`B8(!Hfd=5T?0*_c9@f9.2DDK #m*om3@Ek>`A,TR.%c)^n,,`&S1qFr?q4%>TREiTD-DHq]"_MhcSh&("!S.LiuCj+ *s7@%(27U.FH.(uK&FfdVI_O#,0A.N?,5%nSqGri&]6AhAO50%@[a37/Vsc5;n-E` Sp?2XJt4;AaD.IRU^!S^60:S2pn,J\;dC9Y3ML&3W!RSL?ki$ef>/[/9L5AdkQ4/G #Ef%VI@?`3F9`fqX'HW6[aGV7`/6_:5;4'M3n3+A7eM8krsmt]8/iD(n!6JX;MKCYRD$E9f9-$<;>mh#?",k-"+,LTH/e=f82cO2k#,H#&^WQX eqN?Rnd&R+c,Qt0E"/lQ$NM`AOe,r2b/b'u@$cQC?jElTM$XYu#"H9AoV3$'h^%6n ?AKjuk9n4JA?[lfJN2_SRU\V@&!&tWGU0-b2^q**mAk_n9UT!XQ/YD[Wp^4k3X`nW 64)U87/h_]2mITU0UF]'S>Ua)>nHum9DL;H$.1rTr1Dnm-3it?WD_[SDZu@).%)CZ s6#f(J"0g>p#PErEr._@lr2lm^WnJ2;>cjs>?7^:C+pkt2_K'#Ir&YVP2"W'F0F3c mKBG2.B70@gF0ti[+,M$,Ocf7It`@sl"kVcduF;gJjB[6Z&^;=2T+uuEO\U859J>G +[q>'oD#h['E0.jnY\"?f4.d_Xaf3 $\1b<";68lf-`_a:PN,G!OTmplP/\4R9tTb]4T^-Iaki(aaH&+>M&1?hKo*;Zc2T4 S%B)E%Ob]di-X0B!68Bb:3+o3^E?)%$_6\O?;o?I8*;TZd.#j7-L7`Q$ps)iiaS5CU64q":p[Km32gDWqLG kX==TMnQG]na<*XqhK7\*Q`_?R!&!cb1/k9=8+#sg7*2$+929<8GMbl_7\qX-2!4< bpaIpo?T:Yr6fW^C.%O%f$#YhBigcl2k-$"egK=RMSJjInNpCDabQ9%\$Gh]El*:I o)C#ls$B>n3FU8pISd"o$PlPOb:&8A714qBb)>c1%Wqsf$ciToa:*.j$QqbPi)p0^ M$4Ii';ZoNbmF;6,lWQHaF?ERlM@!$s/GL:NWkQ6rua3!.1>odc(C*t)uS7aVZmA4 fOfMsBaiHMRUH9eO(=VG11S_rHqkefX6./q]/p#ulP3pWFCq[add3N22WIoF/^ 9mFSMJ0kP+r=;N/KEhN).fN?^TL$*g &)p$.jO(B*WTEdB2t97mi:`#S%NP-j_C^c.]'_]!]g^TLURpYPLqp(ZF7HbM AKc$rIO"i[<;[7.(Vku^O8PVC'JE9OGZ%3>$NU0UaEJ";'ZNLm$0dH)g,4,*D1 IP$p6jXEhnHi.&67m7D3OEcedR)AHUkDOokmfg3g8$tBD1eO4< 52bcP3>`G!s7]I@_#I2an9L`9/7jk$8TDCf19aUn=Ar^VTjVM(b0Nc/:>e>Mpg:Od 8\q%gT3%cQ?aM3MP\t_id"A`iZENGgh\Rd!(J_aV$\%^jpgL:&gO,k%I:*)kJ%V\L MJF#o;b(J1HcC[,k19mqr2Ll,fLQ?'b/!s,h9M(#Gc((25kbDj7DWjZorB2)JLmcl _.f5j)i&iVqja:d*5C$5H+hhgiM^Db34iKl=TE.XP5/&Zq:5AWaHqtiLcq?IV[Z*< o;]Za5d"\9*k2frfD.-=%G0ihYL32Mq2s)tPB-a(G)&/pIm!aR]\_Ul'8JdkSZfN: $#6`[gMm)]4bL+G]#(M[U+Ynp\u*N_D4#_6+Jo-7%!1n*:BMuX[6O?0hR%&&n`L=T 0'sJ3hOj>fWj%\:XnVaq`XCtq0:m+Wj[/X.igM[B02E?b(R7r7PZHn;I[4"31ooP3 DW[L[UmjBl_#MTG_3`T%0..!1NXri<(OS^9Ila0FMU)>3.$!gJNqK5"^b$qX,qHn? /0HIa&bqt1@%Z\%#Kktq8EX0/#liHE-i=4RX5e](AD_HC`n>AlDk(Nc>/^,rf":]73A;D=DLC\BZ8VA,*,U0)WA-s:cj!-4[%/3F+D^TT$oT` j),/%^$Kl)*V;M^%6PX)H9)pi\aKe`DKO>T9cDc:e".6L-PLilEEs4i?%@?7#Yo2j -[6CHh*2Y+&+IVd?50m+,tgJb:+rHba@R=A(tJ#GYPZOm/#im.t>L'E6ZGk#RcKKAm` n+JQ50H'F?JpuYXFE";1mq&uaK5TF*_#G]O#?Z,!-AY;BH*+m^fAW9a6*6"e4<'gu mso?F9e9VP#%fJ5%8FjTqSrQ>jprZk;h-BC@Kr.YL/nGp.l_fsE%.q3ncCT))U]`& k>Q/\ELn3u-M_/dQ;""VS=KFZ15YqTQJr,0pq_f;L8gi#60=AHLXOV[nM5<0F0o(q 3m9o27Nkb;.aVcDBlcpjq\SQ&(2=(\2,5$LXnq_G`**K(b?N,S04nZ(<8q2*1D0>%@YF2)K.:1Nm?%e'_o'B/pD f;CbaO8IbV#!L-k*:?.`?Y+Ptg?\mV^WYkje+%4u-SBU(h.jC/ftgE+Y^i5da6Z'H /9Cn3YQ,7(5Fm4M,QCaZ^p#("TW7qbW'=o+m^= 18T-mX6,3bE\69"r_r;FM.<$q:]_#\Am%O-bgg1hgZ5?;l*uKY=>p!^kI0=`+:A+D q"'gZs8R$:K;_"O,QAd-;uGOV_)\U51BPu&O4&Z@C'5Wt.p]t]1f6b#W3BV4s"NJm UY@]NE2J^lfT,m-QnL;HLc;#[b(:B8ZD*$pf8Qri*:9sVdd[Q= R,daL+-PbqioVZ=YS` CF5bTFV::s]nmbs$1Cju[>tR#iCN.Q^9NL^8W;(&QVk# ns+%1;MH1LO5%IVj\s#[pj`<OIrV2!PP?u(.s0Ki"9pU s-mO*8HD@.!OPl]q7128@t>9!J:`X("aK*#G/5<.WLY[ZLT_6gV`)t4J#W:%!LVAl 'Ia1b&G%QpiqYH"GNmUPR;AnR1M6cns#GFXWr1d3+g?Jm=UJF&>6"bB#m;`cBN&brR$9@u4-3/NVd=gCj!8k9Wb^`m%gr-o[?3uQ\0e&E@L GM1amB3$[=FXgPe#V4e9MZ8+.6T]658e@#gS.>"Ta),Vjo6g(MF;L`Mb,@58s#unk DaU!p;mDr%4u(t[^jf?D\cP):rkLiomsLjS"h.gtScs/=!rRh'*IM?=Eho<8'n;aF "aqhk==mA-WOcbb3FQSNTR!&51E#!;dc"*OT#f-H]GtcH?3/DaJDa"j2Q(5LJ'%,o @QiQsK:jEZTQ93oDmOaRSUpu]jF&Z;!a*a2/u2)$P4?iO>O!!VPb:eah(]f!]c\65 qfLN6L%k[>E/#306U!.-WJ+T-IBo7K)hGXPHCQ%!3BR:B;Zf?*jd\ejs#@K1PgLUd 2_0,i11ks,C\]JBC^4]:EP'EQ+hlXACttph)]8'h#0a8.s/#Y?.\\C*%[VjMND8G5c]EcYmArhTi75Q;`5akK28]a-Vr2?VGif+n<\-`(-_ZpJ)%`Pf2H1MSE?9 ^RE3XOr\m,1ZiFU"Bn&gd!6=-!"UWR<5:[D@$\b,'ubEK"VaA7kCpJ/L:ZH$]&\Q) k6=$0"Fp[.K"qOD$Xb&X=8p;TA386Ipoh++YQH*/!ot$qi32-)AH>Ae"d&=_+T+\: !0L?GH"PRV0RTJ/ZQsBPK`;%%+iSp:ro;WZ+Fbr_!YhtY"I(H'mKVQ/BPUf=TGsqu 5AnIK>Qil_!m]]urtiuLU>l+N49)Phk^1N,XL?RDG1,1=BR]jB'`[D[,?fUP/]`_` I$BB<2q"Ki#9j#)<#qPBrsIRV5lghtn=NfJh"mM8e."b1,5`hX&%A3c=OMe^ CPLS^M0@_oiJn7fgD];R,KFd3_sRaOgE1h0[X-Wpn?Ca9@?9o%ZiA$p&!*>ck(]4- KqhL&Zi",bKGbuU7K2de8=(Oi(!^l\*ghcM"ocgp%*c_",-W3.@;_![,EO7nK%n'B n.[!4^6CL`O=jg0*sE:?$,DFcY%cfo9U@TGGs&/1EWfW"*8M"7?0au E.\SIO2-6&7Cin19N9>c>lSgOIcp<:h_mf1Gs$/<>kJ0nJ'"*`b8;Uh^Dd)Brfa@i O+3ahs*F5n%]7NMIO^la^%BQ6:=&rHN0?TuVJVWX$k$@;\o)IgHYh#=:^bVS=&%B' QM\=^$Yl/=j0WHe?ekjoL%(_i@oWZ>!<9$8S,FW3a3&Zq$h,79arJ/W)d'S4,)2^. fHn1C.96lTLXZN`NX>uAs(!H7`;a`h`.\.tng<<7>KIplbEK!(5SP`"s6k$j9<"(# Tc!PXpTC(sD=:ss]6Z.oCO9Hl2@ltkkVH(^liLI!Z$+JCmEd$ZDP8,T6ndcZrn-Y3 #:i6+:F5RU=V1:"+S).#*MW<^+cFtq\r]Fh_g`*Q[VOB(MP]BB8-'jR)>:,J-)X$ RU,AGR+T(-0":t_9Qj#H6)0C-2(*LN4i_!)Ml?%F# kOoTf!-eY/f9fikEV'YFj+!P6'h5%-Q5;Vfmkrd(YuYNY+4d=$qS(B0TE.lUek /pqXlX84I<58u03q5(`:^LWU:82!%X.Qa-l\5`6Rir?.?`+t'`Qh(hBjU/0O`a-lM \rmYO.4t$u8e?e\^mP>NBd'_]TAjOfU*rgAJ:]IV16[f.2^PTNTN5L6l +A3i,!macCk!-n&,Q-)Lj'&Ho[qE%t%S_KRJLrjdNN2niW;03r3/%=M!d=J^nf.B( pGZLA?]2WkMl+1E)X2nO]PrFgRh!\U09(+9`]ZrchnX^Vp5LprNG5*P^&?n:oPg#/ P!@+MYE;$UrW2o3J"\<%!OR)-NPG'L`^l@P6u@b[UWhtb(3G(VYQ`;/S/-';1YD]I .(>aU?J;+0g*'dLG]#TG:>:?tT!hkZCpprZmr5\fm:*-VC8XSsn*[R7_qED]CFdS; hds8"=\Kk*Ilb#b>0r0TM:$t9!?Hjndo$(:M3rbMs)\[fm?72mj3*:bl%j5u%_r/& ,tjR\'j*B?PQOA;dma?:Dc2=oNYL(I(,-Z\!]^=M(IT8o;d5":YkSn@F-.M+$0]d#7Wp)%20X;A_BT"7E#fI%D_#kG7H-YIfjFdT7e+lsh(s%2hj L9`:lI7bHri1J_7O-aV1UeA7U\*sj)O1`ZO@A11V4_*hW2I7mV`Lk\&S0e[u@cb@4 k23"RrcS(^n'q:85L6tCi.$K"X8pks6gtVs^h7CV0GjrdI,Zn:aB9iSjC6a>]9Ha^ s'.tTW,G\&m60OFG89Thir=#5HJlQ$dl\GtrAq:nJq%$^)i4EI_#@&Ms&/da*5<#5 9_,D7_Z*B3bL?GJmun!-XoMJoLmWbD6o;FJM3=."iA\USM#Tc:rr89F5/;.R?qe,@ #l&2W,[LL"_0lY-s/1o/$3m@.Zei*n"*$;)[H!MbS`i2,^jJ9t_V]m/VpEZ?it^ka "92"&\HRf9^t2b,qVhXK)ap`3=,YKM!^dml^8LI!>&"7 8sR[0qBs28EW-o1ggC.(:]&og_rIt>"]tael#hCWr.eVtp8]7p2G=7^+nI_=&k5#d !'F7OW:W_cG^jj_ql$t#H@0-?p,![VEV#CHF JCq7d/b,Gh/iR7S/Ot=?pl%7q&o3 @AmsMW,k7\;dPOf-o]L:gY\k-Qg`>+cam%C4Cj [/W/'6T`q%5M0UeTT9-*6dO@egV[p,X3FD+'>#6dG<;AJj(tLNCo?T.YNtJHkN8`3 mUY86^;\E5hdt-0OdOkEkg&^s=&XKOjusC2L&;JL(^k%"$gp7fM!7i-pAk,XPK,qP @GOgf'=bq!JJe/X21-m>Zc=6gIj:+AUc/n?2%bQ.9r4QNjE(Ai9o9T[L%e81o\tEg F?f[9c9Dj*!<,>0J9RR8/H@F3irtbikfS5V6>Kg0oAkD0lWJ-N"f\loJn0Jm? AB:-OFmoq>s/f]"he1gFZZH\UNm#2_c2W'4!TO,4-*qC+dps7WE;iMEP48L"VA/B) /RJPV?csGp^qRcZ)Z=\g9udQF15kb]K%^s`\hW)'\PMTPX)TKUeSIe>KKj@e_E4l. Y5nQC;16X)Ok85_g?Pg\ZMIR9(,: `4Z61hf[p"\A3p`$ZH.5!qiP4jm74(i$lr^F*fh/?9Sd#L**2qjkp='+;h2Xg%p$. jlK+0Zd0,QX=u^,ddg;HETo9SOp8Nke]5s5>C]M`0L#B^lr*ee.s4n-4?ZS]6U0Oe :2S,bX9"]5-S Qj&S%?`f=\+*%LWK"m@LU+Zk7M/fBqh?_st(J*B78Yhdb]b15`.o8@4SVuuuA"0OX Y=\i*AoTqS^;!*aTGf*4&?VRrD? alJt5c8d+76ieJV1)T2ENAieqkdKT_0nAsQCCDujV6H)I Lp=M+!F[*cG](K1fmbM\jrJ+1+@WpX41u=`4`E/f^=/%%-U;e?0&-hfa6XR`P+;["0JKT+C i.$EblRXMAB1q+E0,'%h1<]nkl9#XLPA$SeaWY2na"c;lTiQnZ,48:p3IB_H/VKI= Ru1rFW0$+59g((6>faJH(BUhP+?nM>rpU 3tERVYk[\DJM+a9B.Ie?4`kp)I!@Z]J)7@:Z2fD>\:B2754F%`M743q&RGsk0=+IdLINDGbFGL:ZVip0! W:So-A[kY*\<*-\cC!>n)-l^uh$]e+#Tjk9p@NVo]r$oiU4=[XZ#X6'@NbDm;"<5C o(18Es!!F%K1QDh?oo9;+TU.K8[TE:#"):7>QBEG@:@L+E?$0lQl9 cGFnofM_Kp^or1;X(g.[ESU*'KYn1:!B?;)eKjj(Rs'-=mSF8t!];4XYn_tQ$+tf8 V[NJ96C%te&2H*0feHt0]NaReOQg8Z@C%37J=4)S-ek^lj0X2'^l^.0(3nrEDJN2S'@fs!sXUNS7Ac09s<% .;L];BJ[3ICl&"E#9,P$R^K>AS)7p7W3"ChH[^fm7j5$54n>mf`(cMagStQUoQ$R< (Y<>beER`*\eYemhLGL^G3@?&NlTqXH\MEB/%_ubFPSG6]NN[3S_J+GGr.-WHFra>j!@:%I>lmNbOYGVVh'];S=\,^Has,&f1nec#t 5GS:U&b\X*2ML,@gb>d\:s8bJ$X"VYc[u*hOng@P][B/U5?%-_bQSRQUJVIe;?\4. j4!:46mGY8rtKs2ftLj!*(H'_(kFp1J&82-%j=.;T3U'CVJ0INE)logP$(?tFdTuF e-]ieA\Me*EIN0Ij?*Z`Vc3M[PP[0-_9U.oPD(Y&!@j.l4"h,J-Du-D@IR?e`BP2_ 5KGjUQZH)io290#s+<1CGk.n.s$-'=k*4!K3XPhKg\T@&?P`R_i.'Gg:cJ$qr0LR7 M<7%GL_acbr!t\Rrd,PUPFrT+[^js?;\eZEn';Bbet8) <=%HY/O8q\$L!9FGOU*$5EYsm)3.-X0H0X;8X>-@mG'jm7G,! _Z"E7oQoR$r)\U5*A`WCd=mBR+?r*#D_CDL&p&FXIVLqSdKCOW`ei;(+iNd:WPMmH mfC^!I^gP-!'Z(V$1gaL:U0s+rm;NYrBHAF!;\Cp_u^F+$^%RZDj(@7P;d=gLpYK6 g+QVj-sfA_dF+$3MDfo8=N0qf\_(-i^o*XaE>^L6Q-#:V<<'_:mK(68e% (Hji**h@ua&H?[%$u^e./Ht'M6q@?eUF3Kh$=dfi-_i%8d0!n(eKYk(VQ:iA#.-\o O.17>Kd?Zt.=L/7<=&Le:8QZ^ft`"*q]+D+J3+t.6MTpj[DA!dP3$&of5LmY$!%!Y =ujgd^Io5VLCO@bpVV6&bS^ZjVBaf0/^);%@S2kO\-`94kP^;Q6b-i^.hn`$.DX\i3W+:]kHOhB?*MM?",$AUB&KoODa\]@=/(Hr +h_rG*T.!r>j=id#SR4t>^?ld!4%+]a#]^rn8)57lJ%7;=UcI(i#bW*49u/hTC_N@ Yc[@KGQ90XT>A4m`XdXoI#"$i`s1Hd>c4Z=-EUU9KtK58NI8bnZ4R)rs!c]k.>N5C HOK'Y&p^o_1-p-f!7#8r"t.:a9^fA-gj5f*;LNL^N(?;Cf#sH4_k%@6Z1m7Gcs(e;+%mKDb I\,9MDH^oflAjFF[cRotAf%Pn03Xg9[5L6bCB7SR%l4,o$K,pTf2V'rH_unX]bEQ> (cNXI%55!+f2t.,eB!$uYU"O.+adrT$;l;sT%dfH`.8#3r]RQN0gi&ojof Ed8ep$?Hn-+E47&fP8@O@`0t.$^e[B40oY^\J@6;*&P#>49Y[g-)&3a&]5IcLCT+b L>][2!WqlK:>hfQ1_sprUoO`Yr7pCp^t9jq#qtQ=+i6ER73d)J9`Cbs&68PH-Y1G0 `1)DN]Jr-F0QRfO4/R2u*W^QW(A8(NJH(Bn3+DB^B^M.\Fke"!/,c>us25)V'k6>* XP=$Zs2X5l?V8q"/mAS[6i?tXBGL:Q2t6SI9'YBuU(o-]_!,#.YhsLJ#hXM2n:)s+ F?aY@in$2*r>bUIinJGa0oGo'C^1c\i7S;'h[2mQY6=OEqfDo>+l_=6(^2RCoq01E Kp^I:NmE%DYE#"*`qZ1+s'nHfa?O4[IULL:A^;AB:;9R@;15-#WWdL9P(;R[&qgK0 \We?OV>Q(Y8]f+Z/rj]JruqC!M]Q7!mb&&=fOkN+ZS*Vc$jYA?e)?Nr$no7)>]:jB HSLn74p3u7R7_.hH:3Tf0U@6R67Wbf9@&@-ZE)d'(d?*7-).&f3V,N8NRSj,J%>Up J_9m[jCtXIN08q@T&381!>cjgl5'0%OdZg!s6'MhlG*SIq6[qi,BbKSJ7lflXfJ/! EPm-25F-g$#;@8,H4BnQ(4CPG"Upb^lHm5pX+(p5ltgHj0!E@eGC^uL!O^CbFZd:I .@YXf8c)\Io7cVWdnU@92DoFgHaPM'183V-YTji\JGM"4kG/9gg[&7)rq1U)dMbht NFi2.G_&rmQ1\k4AsJ, eLH#^;*9qbIH2=9s'"$l;W*&F]n5+QA_f;gS+#Gqh8t(f41F`\?K:^KL25K8=#0*A JH+u)o$ls1V!=,]kJ[bc!hOAk+6CI+aH*lu)g*P*1]M#8!4[QC'Yp!0!8mp9,Ak7# &H8F4#e#n=K]5hDTD5&CCBg*`D3FDD)qpkT->*Ls#SH-aXVT;/VD1W"W>.3c_TiW;jmj:R>D?cs>cNGe\Hh3jFJ o2K1DX2t+:1'5uCe4LP85=kn>T.<,1?h.QMk%ep.]aad5s6KeX<,Y&!;[J7'j1c$% 5^p-r*A#_D$s`kV'K\Os9]uMsEkm/8e$"19s5iXFl0G&1jf7QSVs[rhChp1aAZB-J !FF]SN;m8qf&oU&hpq+AR(:TXY6&-3-S?R")d,iS>tUOc(U1cF>)4+4LA-Tmqge]K JrZ<7qr@^dV6HYa`7^nBWE]Pp+#Q16_Nj.3roq$+k=j]fP#O/3e?&5]r5Uja^. Yk2/al7Z_L_#H@hU*!$oJ@)heQSl2f2^\*5)mX]DCAnM6^Df4%.b4.Y*Pd/\s0j4B 2F7Z#6=)>ApT0,[mP6NrhhdcV@c=%li;\nVdgkcf@H1RM5#$e];`J=(k2ZH3f]i.P .,tEGs2PNVXT>Qn-4p1:WCdL>q#;LMrg4p`TC='8s/p`!>pD]P-rlDCE#:[ElIWck 5-YbcN>;>LRDktQ:=n6%Pi>=N,"`OoEmOU"[9P#h9I1+K<&oVY_8#2#^h'ppEeU_J 9!Q($pX_2jhW,'$*9]\sGWg=eT3;K(P9JRhc`F&6i/54a)9@;PkI2)%k!MuX#[G.Z 7,.NTUp-r,N\4$ pm^GF*iir0=6;VEb,No?CA"MFjk_#lH_^%=Wi%O1V+oc3S;t*Qk0LuP8nfO5PZh.W=XflD!B0Js@>Pt%(r=>>+ b&>][^SMfFb09-M$:+B9Sgjt:iQjd(E.P#-&L/pdS/bNaU1E0>6Y1P3p=D.-^X;HK 6$#7`pV)HI^V6^)/H2\C=1TOSFlXb=(m1`;O/C6Zd:\R;s.B,51*HMpUC/cKOWa[G nR#m8^n5I1"%tMj%51:bZrg7Q\>b_mDT6%/>(,_uXR>DOjlNT&Co_#`WFTM9BPi(3 `pBG-krEOc+)K/NTNo8m#O;cC2MuDG.c/GeRHA*=?H)N`]sn4sIS:IQ>/9KsNuqY& SeB!Pc%bmV$Et7,!Q"\]?k6:CKDP+++CSl;Wh4o\V;V'5:$/r2W#(h^X#I!;\bQ6H e&QX";k)b+33D4"YS&Y")E>)92?s*""YilLGlAXF0IP@Ls$(h:Q6PtYA_C1[`g!MLFs0DG3s-&uT^jk_0:DW@G9]I6\ Q?YW$!b";c()3Km!T9`/*47=7mW!2'$TCUcjI_9E-pQcarqjjpIpLkXJoAD(DIN$A YmH6nI/2+M>JF8,IA#jT5NXUqaq#,hT?1b`^?@p=DQDI:i9p^R'.2nTReof#&H6SQ ^D=@:M-X?J>all?fEiK$poahoXT\AM#'9tIpZ&-ZU[alXrkmW,5,s+Nl$8o[oi[b3 9>8Y4XARFGM.Zr=r-t%Wp]+G^Rc"1RQ\@hP'6:.K'EJdE,LAVq%Y%$jH:h5SOTGB" aKAq@6g";4*6M31a2+Uum+L32iE#**34?05Uo6V2=f`0@E$;#Z.BHJpU-^`;n7#ea 76C`%5?kXa-%N`B*n+ZFD5GL/JJXDc#L8(= .A#R`.aWQ^O3k@ag9hOfcZ@,$+,mQ/M7d&kmNCl?'R2GJlq+**R`rsZ=k`cs4@4.)N)#-l2^8RGQm/.+Z'-mEN %?g:S*#SkYotR@As-73q%Ea.Rs-)U;*R3sVR`>q\!4Ck%n3M!o=sO8Zd*KhUSYpLZ drn%V%k`C.!4'2_"feZ"pGL4l)k+r7C#8#dIYot3i1,FrJr>VW]=k)V K+cqmY/U/+C=MRokQsi!!&)!52S)tQ34=o*%ZZ&]e[ptu%Y;=/Vk*#-"B:.]?nYZe bJmd..@MR>:7Y[K)df>*m]?WNS>OB*9C1EH*'1G=0tJ5d\f*]DkhEl5h7)b"%piX( E,[+J=N:C&\?QKXe8#<0`25GVH$ecW>inJc!#0_=/s9g5PS^3-J)4^ohGJ>o&@;O> #[8\^+X&oHAGD'V^QMU3+7iMsjfcBm6m7!J=hE@]XW5_piSni3cBJ?Z5&kSIMc<3X @-&sO$%#/ge-WuS"TL\&Xo.q$KE$Au&;#CfoDdjnmXJR!qmhZ;J(`tf(#*[2*s%Kg `W(W6oB3q4rr5g)E5MX#M#[3IG_H*Ljq"A+So+c*DMRjOBKG>3"Mq"_V$U]t"8h5o gQqtgOT/am%q;HFU.0@BmBS(j&geb#+/\STrqoI%2P][:&fY[[9TuIk!qeUW=o$V1IK7Lk,MeH>LVsJ6uVWjT5C* 1M:kd`lJ"XYH&ubr")c#*1;"*W),LM>U?[D.AU'##l%c()H^spX&M*X;DeO(KElg+ ;rJ1(Mad(A-&:/pA/51%p?bNs>f#"?B#(2T:O*>D$FCZ?>3Oiuld`jnBc+:(%`(B_ cN6Blo&%!,_QFfM%K%#hG7aa@Qluh#TD%X0H$'HVgZSN]KO,[/[Pbb<%tO[S)H@fE Y'93g)E)q)@oioO5Oa0NWYTF'j=(Fq]"[/af(0ld?PNG,KN0VVZosua:bLZ@Y3GS' 2i'S)VU#U_'O[/P];TK\W4;Z<$& +ob2F*+]!1rm1L,SH>=9Iu9!^0cC!?pmWQ)TI"n'a*S^&_7U5m=?_Hj+8pG&4^rAk k%DI2fAL9]n#Hii"oeW&?n$Y)rhlCX59n5PJp`CJ*P\A]r4qe]a7-bb(O/e085[\4 4PfS(/`)F%A]b9:@<`\F#li`J/pKB+He9i1=C/3h4)\t`hU;1hQ-!0% POH;g9Y\J7+S,sN(.tad)?3@"moReCEdokIb>);JfJ*-2l*1;t3sr/D-$HJ7_+r4"-h-$CI&?OH"(o^@u? ?$U2tj6NDV.m^?^lj*)7HM,-tbo]l7[BSVtLf)5< pfcVUDj:J%EEPo!I*k,mMNLAQ6\C%,=`sI?i;W`I&'tm2+#2;o45n\:0+i4o^FRaf(:08S`c[;HZ5X4?^^lJj# LD59%lc8Q4nGanFH9HXpLGap:]W&Q7X>pRE&$om!Op2gUbKCTf`C^_&kPY`%"&"or nVC+(Uenn*<5l%/)$e)0e3YZcUP^]me6%rm=kuSn!br^*^W#=9r:b6M@.9Uh*;IQ1 Z^JWWImNjVJ[:)H:h1@o-'=:f_4Vq1W7r/\Rr0[=l_\#usU!]:-hPZr.j5$A\3rpoit- SDSP*GjnI.n(l0(O,DX4'mAHOKA_bO"mrejaUrL@p$B]!R136'?<1JN:jkc%>m:*o =j")!UaIIi#=[);&)faK!2oX"Q/[`":\4YdQc6S&`&\YiJcE0os2%_4cO%#%%^F4b [NN/#R?S%,LF>:[kb!TZZF`_2A .UP]FSdA8)J.$m4!5*sC2oosWY8A);j[dYZ2#J*Ll!Rlf?Q/il79BHrr=\0-hpPfF _\W_^69Ss(Iu"jl=B!@lgtSu'4"13X^h!EDK`>QcpdFM/-:@a2)nL-rYF[QY+AMj5 qL[pA,5?6KDo,%(UN=5pBpfaD%!*?AK$H-L8"7VSR`To?qN(G2Y-pQ>3[hMm.6(HQ s(tHU=dtq8lO!S7r]b1:ERE03e]gkDgW;.n7cfqc'JJV%E_nDcH7?4K6fJN8%2qSpCgE5Gp@HD0kh8:5(8_7)C$TQ.fG 8*o'>(t]AghhpBD:Kd>W-,KVoHP]qrJk(#/-F'uj4g?%iM/o9=N:8`p^RdQq_k%'b n/d1/>jn&8C`[or2?`@h&uoi=S?6)B!)$G1LaY^`T:[JH(+) h$&08AUp%,e,gQ`EMqcU71D=JG.hV!M$_&WhLiUJrN>P(I_NR%#"nFV^>, @QO32jY&t.i/:d!!U#CT@?^C< !<-Bd[a0^\+&=tL7qe:al,8k'5$^LihANLli;\a+)pbX?n'M?BJa_1FDt^D&pEkuo \:AJaS&6S6a"Nf21Y:P2h0,LFipS1e@Z^M\Xa[.SulCJ pI;1T<&5o CkW4s;C2=>r]koded:hU4_/.I2,?@^1!0Y20-G<: ^jk>F^>M5;T*51Irr@ODY\@.:H0@\#W$3feM&)s\Mq#Q0.a_EVVC!NkSK=X0klBQ$ ?SorEBEis[C!"iSW(nL)3_b0[=%+$r&tP^?-a1U!J18U^.EK\hrjSec3bhY7:UuJP$A^B>fY=UkEkGo;F7]M"ZgK4qcrCo$5:C$Z!db'km 'FPi&Jehic$T5p!05hMLG8#8[5GS;I2A]XM00#Ai[5U9^CO?n&J>McHQDS:H9u".m qn^SK]W8H7O+Vb?bG?J*jk:h(5O@@'=6mHTi'M,'6r`27I%qs0!2Y"piiUi>6#`;A XF2I-lB!T&Ap8'%NWD8oiDU'"Xf0Y/^lCFIVYSTQ"m4H2E'GGR/9NKIG4!8C;Y5iR %n*b&aos2gk&`MVVnatP`o*ZXIbZc[*(5kUiMr7/[A6Ab/&96'GT>YdRAVHaD'ZXJ 0mhm"/7d7-_9u*;i]:.]>Te:sN%J?66nO,2rNeL.a:9>as!%llVa)r0/P&3^8sl3IJ(*"kWqQ;t8:s Ka[A-7Ih^cf5.9ZDl-9$_Rh09T(ZhtNgi16oBFp"mhRl@Lg6Cb"c-GgJH(PaSb(_* b5jct^)_b&rO=<)"U[p->@e9Rg-9B(\_LhBF4R=&-gLAEl7BZ)XN<'VptJ49a0b[& ,lV]Ze:%H0hLmiP,1P_t>f:o#ehgnN5A)VHP`8m]IOX0i?\HRn+DEmZRKlW.PfsAV o*,i@,X+0q4G&WMnMZ5^0=#0'@dVCM6OV6%4ZK*CP $',GRmh`p`lMhRu"0]$5Y,1u%:%>iYia%i9FZIRM1=<3T_5/F6W@6X2`)>sY8\ ?FU_PDO>!1W.g31?`\cLp(6<(nj)-m2H^soeMEt11Y\L`-CK9]BdF\(du!R NBZ,O4lLBJ\;>7TUE0Ok@"?Sq2C-<76#F)E+8m%t$[hU\r:+G[q.*/-Yg9":\m.GK 1c*?,;OI_)V1qYJo#G"0'8t;7LTAl%'c?@Ol.5m-RJ`<[,hJ,B`IB-t0nqGN%Lh8k %*/tWLSR3"N1B;RR`XG)p>=&=?,4TYKK;(/r'jOeW9m9pT-<6EjGCP((K,1V3p6X$ B\O@$QVI\I93XZ<,uE-cP>BR>obki#4h3CT.K<>+!<2P'Aod.u%"LR_MOnEK9=:QA >0rZ!ZnO;I^BkqUmq)'TZh8OF2Wrks00!1+G8E7#20hm"(S+:0!Sp?eIEm99o8hMrT5MAUosQ'=$H:0S(B@51Ft =G"52r]qMG:G\ccEO_9fHXSgqYWq2.G7cD3Wr^7d$P40sA;d^J0RF:V`Mk23^sPI) _Cg%PVg''br3:)*QcdRF.lKp3,[1'T9>NCHhK.gCjPZF-iVskl^0+q's,S-F2ImdlEgQd3Er5m1Jq*.bYM93Y PCCf<74Z+eXb0]$QSsUq7DT5V@G:A.Ca&#ZhF&WIW,>ZDQP\nY6Nt]0>*JKmFBS8_#GG+jECI>;UiKt];I6l <B'e"'Yp+7n4!V5F/N!5F"gYXR>ts\V93V MCunHbs.o;s$DF$6A;'Vn-)EM>Qm@O!m4N\.b#ZFW5h%W0:\!"hoV?I@.Oj`B9,n7 FD2]?JqZ_JM`;W@,MpNSmGRd5_Cf'**&T58CRt!qT6.6,E2*'1gV3a`,Pg`,_+(Mt $sPrKe6pS6D9f>+5-P9.euKP\577$PL:>BPG!HBgAGs0Yi(g?H%>b%8s'=nkHaR`b Qp1cR:Y=3Vft801Ho>O2%!Ste]Ro;[K6r,5]`*k*j/a3M"\S<7_@F&j+TEIRN]94T CR<`!HL9].gA+OPF7*_HDeZ%3d,dCW_8+'!">RZ<09V[Sp("cK3Fm 2[8_No\D1cH,/fr=OcrHXS5!anA"j,7F.OQNk7a0.<%K05;`Lmr-ru,?,.9SJ&mTO rfd=WErHIEQbku?pB:I,s1?GK?PHu\r6LG.4p?H-rsAZrSpC\a\s2H3Yroi2d6*@_ l9#&r,7=!tGKLKr!;mMms5?=i>*Pq6[$LeJoE)`27-["^cToL"fo.W4$UXUnRq.8@ K#MIYd'Vln/hm@41'8=(WK-'Yn+-t.n)tO:VsF?d?,.9S-h4s9s)\J8#RZeFajF)6 0HbA>p]n_$]UZ1">_j;hE\Y(i2d2[lVSrhW64c:ZP9+lRq1!^_Mj4.;[Q:#2s,liD bQY3Z0FNsOp;Z>giD5nrJH&2eN)X)i,TWriV&7@;;h.hg3nj_pT5IA9>LATbC%2u2 #W"rC$,bBU.j*4r:0.C8[Jo%-qOEK*3ChP>p;T>LR@M1d?aFg>(2'a#ce2HnGHt6< FAN9_eI(op9m!\Tl(9dLr^7=I/b4BCNZ&TX^Re*_?X]"6VTai_"t"`OKe\3qkqcN] U@i'5@0R6%\^-[NAI0-h-R?N\bCP(W_7f.XICO(=[q@.3Hp(qN2/%*JZY.OpHbm1, 3M:RFTGQ-p,0)U:-[+NH>\H?FFt]-d5_C%b2ehCs%5jlZ%SWB;#1nJ8>d+^!;@b2? S0^AWb^genM6dI-cq^1nTQgX3K;*>HlQ7N^n=I7:PVoq>b1f^_I_up@V[5TL0)`D$ '4Cel*L@.PABet'j36-0'&6?9dKJgehMHB9r$=,<"\H`8F_Zj=P>$WT&bA;rT?BF*T*[d\/g2\A;dnVGe;1V U\O)Gd`"Fk7.@8U=L8LOcA+_#:mGq?8JN9lcE%61T`ad+Ef/[0r]uh]q#=j/jHkb# @kPO>m9ZW018FoH8s,r"&HMk/o7=^W&sX$2;G_q-J$F$%TqXc!GZd2,>U?sZ-,.s- Cc]"=-Oi^r7'Zo^^BKHrmQ?BqV2Gg=jrqas:7L,#b\X/8Mo0mR]NZ^fl2\8C>b5H- 2"J,VSp%%5rXW-o_<&>4NC'gLh#&,@-h?L=pMLrEBEA*.3PQ2Qi&\)Vk=,aGgN@GB BjU2Q?lhjoQYA!<,?O!B0$^[7U8,.AqK^ #e#1ACB&P,mDZ$IZYo*@Fo%rbHJD#WZL4`hhGI"XVj_d1-2k8MqGh+X2>+J,7DEXr \(XBufThs)f.)+8P]kq;l@)Q'=Xi(b2D]9feX8m0HYEK5_PgaHCbrtk1f"Ic1aRfN@tjA,pF]Bc]V p#=eL_;a7doYKOlWZs+daOMt!VZ[p[ %Xa+>OGs3BTk4U7?a7!"cu=7S6WQ__(BCNH;ks4=10i/RD>q@*q(#2.$r'0N6*ROZ Vl;H8E$[H@$m,L/Tlu0nq,_jjDm5MVrOcBc1*]*fh29^skb-WcP$a-9s#OCMS+E`Z0cKX=V]O=J'fA^$'(3 m-CAXlE1fbW?:G8>3m9Z)ICCDBbe?&mb7=Q-LL,g OZ3iZ&N(%I!"Q7hVflMr+oV^RYT3u,R_a""S9^&[F)^m5;(a=h^Elbgg%0-$HOD.U T8c?rgY!F`K*sZ3#(_>2\8.7r$NU+=c,HRSK2b#gq/,u`0DR,jEgGU[M'/mRDmYfV grpKT'sE'7h)M9XLJT5T6p(6TaZ==?8Jgfkj+&!7/#S9c!.W\;n'>S2)#mN\cIhEM .lh,J%[(J]F2YiS/u+)K_>K@Jn6<\H,lCJtHPQ981Q[b"s%s:e9SU5mdVia+"$OZ+ZN]T@--se&$#.0'nqq Xe3cp;)+Pm^[a\=lqmiTIlDZnpqIk37\s^K2u+ZmeNO\ls'38t+4jM&;-pDm=K3?> VSXl]NWf@E.g-Ugs-3\:s)9Ph%PCWcX\b(]e;,PTMn-!]>]!D!("'CS1:!0#%B.;V 62BNr>QM!b?jio96G[jA`*OL'-Z_VkI*E2cRJ(;6F/f6W!%@odhD5(_0,V+:4hT\S VD&Bk#8[AS-I8T"g8BSdd5p7aC>-'ui7SG_T5o>4D/^\^s%*POBFYO6l);i7XSKB8#X)??-.5855LgcX95MKE-+k/o,X[k.L90i>\Q&15 lGgMPgFR6nlBOK^aF9qRr]lm":FY[kEnW+AoIH81,oYaakNn)M4aQ^XLTaeQh'g9? 0*)!"@RX\Wr(iT+AFONOOU(g)/HAkX8Gu$orr`:nQ6\XDN;k^6YGDDM_1+TFA\!r] ^QNLf&nc3PQd[85AiO=frkdQR'@k-S)\3Z&V3e"Y+O@A\u+;`SdtDH?f,YlUA=jr.:jFa4_G7P_:t]\T.<`8iAc&LD8$i_Ie,r4*5MZ& #*n(*r%64\Eq6^_XCKWFiNW,`i4m5'eXB9h`3gKXcZd0'J9ClUg]c`h%$#HjW#$F% [19Kl*T"&SBo(pg,@1o75ASZK!r`R5lSl]Xp62BI;J-M<"n72Sab#Rfo5>7SiB;[S 3.k3R(@NAg%Le-f@`C.,:DNl!Zh+b#XsLh`J8a:1lY/oNdo! ,7Z#.\'t/n"lNfX+1U=f.p(Tgc141?+6s_L<_FuBM$"Oo.6rGn@%g2#Srum`P(1bG T0h(i6Ieo8&pSus'",e9e]>q&bbnJFP7\7>.:ZTOdq4IJoB-Vl6jJf.V=X64R3UM5 RblA[g!6$k8f/.1^7P"3SoT17l.Mi`.snG]pY@Fc\6[m8YI*n-0uErV @HW&Va1VNlr;TRjc`4&*OPl`FIq8.X_#M#l?h,;s:\ZS[reu%QNcbR$F(=PZpa=&\ gb:kdPm.2`p]J?^U8J%1r,Jl#YqFa(k=ZN_[:9T3bq6rkX;uF7_@s-MYr/- !-Z/)K_oE?T6:8)WGkqpE9`1FbQU9$:KIG6qs#O5(aTE[*&K,DV["+Re[WruT2=Pn /`8i6NS9I_.d-=+;ATnHNMj/_8oc!9)#"!&=oF%tl&<9P4G,n*9:i:/T^k&e0j]p*ZYk"tA(T*#s]VNEf.-ZI1cU@.b;HjXF&\8/eq?d2:KYIrmdF:Pa \\WV5`lW<&SLb&>aA;i;)CI*;8XG#TS?)]u_M]Am[]apjni+B)MuR2Te.FsU.6YV6 *b\1;YkX!/eNZ4!^\=u3_:dgp#P7EOW1"6aXmJ+rqhsmfMS:\mTcTY"hE%pUL5@)- =am5l6UJ@o9;^^@c6[Tb,RlEFN +0GTn5h8uY$r69Rj1`V/q9,#VrsJ6;LP%Q7]E=9JnfK&mmc%9=GU$j=57\RTr0Xtk Z"T]0)jACX_3aMpq=#\#Bu5qa90X5o^!B%Dk6&/+1MM"q=1"MO3Q,2TOBGD,l7'gt dQn3n#[osca^nDo@P[*&V^)4k/]8rB_#I3Gs""!)$U/Q3!Vl-3"B\(tPU5qXA-d/) 9B@)]+38qr/V%LP%'kEDXLZ6Ug%SXJM7o$8%K%#4ot7_]0PGHMdc-D1kp<,*o.E`F Y-#M>3Tm7SGX!?pF`(Fjm"P3V6?-`\jQk(31%;")0dDAO:"klG`jb*c?>`1AJ-2N8 ]s,0TaH-:lM6l\^\/m!AJlC7a&]^65NcigrNF_Y@YhA%hrS*kI[p+!X^/QP`;^cH_ /KZ[X5@jV(h!4^2c&3/aa9!F#'fZ`-L4,uF%B'G)7K.6.+-&G4NnN!F2I4$qj-3L0 \BBdbpD6cboi%HiI9(RX1lEG*BAV64^SR-!TbX,lmr@#4]JI+"a#M2aO;*(Qr/[YX+5q<5 As(A"&M?,Bq&e^,&4sE_aHJZGbR!p[>]e'3BeM_l!A+4H*C7brC,@ohc\TZ\;*&_% ,R)!._SJ]LM:r@Us(.Bm/43Tm&OI=J*2UU[;3UU`aDh0Nk4C7Mi32^_BB\(?1gPY0 =#@fN1o%8=-=>5\iT:Oq#UY%pR8O,uf)K:5s)?!@+tZ'67_t]li."Xs_%(rel;W6hAb+0iMlMi7$O!1gW #,q?SgE+VDo-_A;Q=r][YbK0AdNZo?$Rj)`k%XgSQc7iF/^Xa3=FK@Cq7VFR3Cg[h 5^jNiM]OKC5&RAd*bpgDg>p%4+]L6Rf\ge+oCMJ(Y1W=8KGW+=2I9)3=?rE:[U#EO _+SY`8piXh>!JSREfs_aQ[NKhq\2*Cha=+^k.,k_\EJTsY0]Bm#Xu#JpF8RK*^T"cETh$P<+I *GH4Ia[#6Fr=nU7fhLMqB8O'<&cUFrP:H\#J';*tImMYt^S/Rip+q@-s4#^h[K("7 >L=ecD$7.U/a]k,^ig&$pBhZHoC8(@-u0m=&@[orhP&(3lMO!LN%=6nOoGY+d3jt8 \,=e6MDbHt^He<:H2#q5*Md6Vl=@V'R5n$6IZlO.PWAo.a1fpDlQ=;N%^Q>SJ+*LN 0E^2DZPf^Q#!X0uIl2@hJ_Aq!IBV8t`g#RpTgKir!+P+m^jgoF,K0VD8I8[kAfU)- s6!!Ns*"#O`;aU]_lFA:CUciNCr3@j?T#qb_Ij$_j]6c+,94l^10A2 [G(=0ENR.5>SN"n]k$fFdcL3,U`/O]J$,f$^1qVI;IHYJ &6B%@J<1t_i"F;m1o4>PQ od;d\2g#e;R`&I;M0[$3C+h+Z\6dilT%eWQX7oplq^jF#jNe(nGML@BCVQ?5ahALs hCODcT1&YYJ("$t=.''nj9L$/OnQF=ok?uQJNq*Qp[Y*Jj@8"MOq%Hf=/G[)jdumG BA!Uh$Y(.WrqR9+_+=&K4nJ?EFF/C0P.chtpa>QtnXhL"geg^Zi!u]Ir\XPJ4Un0b )r_-65sDR&jHma@>o,:#.fLe/!JLJ`1`/*%:cR0Z&eUu8mr+R*BE7PJ$8Dba;^Pe> 99^(ira99JM?tH;L0Uqq_tP_,j.A07DrclW,"93@?a2"io*rV2>Ir):BsupGm(T;^ Rc$HnLsO1i.JtJgR22rc[=*ku;6D"k4&Nd,p^]'Vp:MNia^TJ2Iql3G&Z79Fr$CGF C^npY#:%lVPTf$!D?l3Or9OJqbJIfe@V"L!3!DQa"K"YCBe]h!(dhJc0nfC^=:9GF 'occ2jJOERsbQ$X/o8/_Hr3+tChg/K+bMDGF(Rsl!m*<4'.000, >nqeD<"rqN($,9D._[L>U5*llQ[,Vnipo?^c/e+6Wl];e3)Ho,OGCN?=T?\_ ;_q.s)m"l:p?WP6#DI,1.ndC?M.2XH$Vb>=U9[K/)W2N8##fOI!.XJJs&H?(Q89'L J!7:MP;[WH.G6@XhT*&Ka:oCdr',T>]`;&SJl`'L"#^aA^r?df4n*7\dP&/S^DChf >d=D"s0!A[;!4I/Q'783oC(B1rV5p]KLlUO$Pn4E>DMtqq#<6J":!7)_#NSlPlpa( ]+!)bga2a3[PP.B[_`parc]5b-2_+hCP)=gie$hFXT&M8i#n22S]%E.CcS^1pqI*F 5S3>bJ2d9\s2?%=?go.d"iC<,fSQ/tZ+\d]Gdk.kVf6T"J\TOl*AAkW"h[LEo5WOq ,@,SLV^)iC^J,I``D6U9QNDL-'-OCg')mO"n+\M*r9r(As/OlN$(&X#q(Y%YN6AB& V3EFLE%_D2.=hlr.oZ]=#A5Okj=5itW.j@a"bKZ$f(:W/jBm9`,kmHtR<;V!9G&qY AhBqLI3/Edm.oI:hIbL&G4t9Gp=q!AG+XD::bq8d#k")PUA/[,I)=j]P[jB>rNfq5 LSHbgM$k/tdXb!EkL0nu@c'qCJ(M&'gPB'$^KpN*/NgR=i;&4H_S36V0=]dqW$*=bj)RH;2/ZoL-;$>V/8VnT Ci@'ecuLY7m8eE-SLcJ)Tr,L1R]dOM_L@#"Oo;@1:O>sY#4bi^ZN:'O8lM;q-TrqQ GYeqZL;A@7`/RIDjKG1Tp47oJ^gup^_12GUn.5GPi#a0C1k.;(5=GM/!eC:W*r<2# 56c`;PK4ie+6Fi&^T>'mKE#WfU]]6UiZ@/ PRE9OYZ(4b8=e)e?(]Gg.3Ch_5#HWHi$kUaOE*,OLM9Y]"Oo7/GQG*!(g`*4)WAH4 09e#A_/E%>$j$:$c0qJ-IG,NBg[faVM/1"6Hj,WAnSbN cZkoW`RF*V:YY?N*6rmj?1`/7oQF7*ohZ.h;N(%qN:sq!l_fp\BTO!EP/PjGB,VK& )3lp.Y=-"XN!d3>(&]C=qDg@kH$mu&Uqh?!6$H4Yn"k\"@>DKd$bDnlq'8&'+Xsrb Pl'1tcBRcj6"l<5Z@@lp0H^1<3G&Bqqt8$e2sG6`D05 i3#:HPT4PXL(N7"3P(6K`9c*2.M"e5$]D2h]3OhliogR=u #e*d+%7IWQO+ s)AtWa'A.17>k]=f#Nqb#l`^lnpelU#QDK_(1H^YR=ENpj*YY-oEKYWR5rW0G,n9F C;TnBaQ_fVA%fs_ESe5D(R2Ed"901M3i6_/7%UO(!S$p`oJl>i+eXn7ru920@E3+\ s&o&24,fdk8ENd0D[tkLP5+L0L#i1++;Wc6[U$.MhPEkqs#X'kHSH3'KV-]3a/H3o JeS2dUiGN's50XY$3.j15jj/\j"nYbU%?=!2;nM<7B>>JI`fQ5!8Q83J,LD4m*bK& V+T^#MLbq'rXeJ[.elC#&,_2uJT=#L>!S4)?]g(=aed'P:%ptEcUW!!qS]a4cFoeH _07n\D_`Sn3K)hK+Ul.(iJ]d9fm$he0T(W[61*V!7NGip3BS7iIl;3=Pdl5ugF(n_ qG$AeR6:QL:Y7eIefF3;^/+WZ=7`Y;4n*q,!db;Ip><3!hQN.+fed+6"P7n_?LQCS etQ%;9!t`pqeD2ND0VT`.kE":S6lb0@Xfh(#6c>fLbT'P`r7'O9B3Bpo<`S^XE-0C (IH`.C"F.7ma&lSTD"#qXq*".'#q(MbA8io2I/miWlfR/,oar*l5CQP^A2Aao6!gO NQh)83FFEtEgj2n2I4XaccQB_+m/e5s"_"krj(H(i.!t`8b`hd^MNJ!RecV#qnJ"u ?"Lj%*eaLN2?f4d_#Nb/CJKt&H@S#4r.4mRi_QYF*n++*i#h'&.?Y&5_ji?17C_PX n0^poHJ%_4d`+j>3O,!m;kFI"aP&pUhk)fO&=sd*L!gMf;'9]SoJHdN-[I$;_:ZKu \6M!Y5:b)7-eL+3`(7I%O]"q!nn>sDPV>;H:[-!?CWeFijWYE'+m3P\BB?G+S6/k_smG= 3Ze/>:gH3h"Ub>1II?)l!H.JFll^!H\%nocm,q!LEl?^8U@knH[:J,(FV[ZHI^!1M >&-Qk89)O#K_/uq?b#E0+0l\;,\HXfF"r'.,K:47g^>>j8t,q@"8(LXf^5*?5\?cF 0MW5\s3Vi`/NpiaXSuD9JbB&#m9_?BRGU+5"T4$(e,,!^a6`&_ESK*nO%"s,s.;oM hfC*!))FdQg%W%Oj"/#$7u65%i?'Dkm'HL,.D5?7#t\Z'VpVni?0qS-4#_Zjs2@`- I,"KXkGF5hIVMRlepfSE?a#4pDFKN.qfPL.WA`J/&`E\F6hMtSnh,R\$f9.?0dD%% PBd(r-A::9D)/8Ea3h$!.7!ht4AWus_aMcg O?CLtI&3JuQ!ghD-3"#]T0d[-i.&"8A;7[2Ss.'O7'G?:?4CVjdlC44o#KT'XM)m8 fM3+Kk)/p(^]iY&cCIq^;SpM&bQ'l''2j?Xk8N:YR,(]F&Y$gSerPP:*t2?.#90pm 1hui2`jHD1r)oXmSp/AVCBO'U_!LTAl(\ikk?&#\lO`o:N4IGI$=IhZgYc,->5:gV ;W'dLK6FroK9hR;f"eNpJpcK@\cBd^Br@:sk9ni1VPm4"4I68Dql8NH3-TcPs"F.s')Ckm Ja.aG5B-^7(@9@:^4[=H5?OGbO\?5pi(o$$M$l;fIuaPArl:SNl!TY/J<=;s$44WS ,T>X1Psg$iJt00,1Yp4)@WM*M.nd* FQMQU^*71s"TCt>fPa+p,MiQ/!:o#4.ek!_7uPao_t'-"4_c4;*k@u.e\KfpWc=aO Tn`%IV\FeN[:l8fdT'cGI,\(l6kMs3Ig2VN)J_Zt1T/2qd$_=Tia)PTic?^s6occ& /NZol4%q@j7"H"rQL4RQ"OD"R/nZBpl%.Du^]etNTCK5dS$1jrrb`MR495B'+[0W@ s!U,)fDmL(OEPZKDHaOn-d!\thDQn#.Q>J^0\O)eaf72FYp.l31<&3-gSQa^[";dg So%c$@t-A^nReB1XZY@->l.b$G5&;4SgFY"Kr#4_g_C$:/VfB>`Jt$"k@4]Bi?Kk8 1YXGp"^OhD#(!I!:2M9H[M!iso)nn6lsGfDWFm=sC%=C-P8kAk^FNXHc^it='k8kX 3Wi.^2Z`hHQ+=P]c"tdR3Zm8j0+1m2Q\SdQ^i9APJR(P?mA+G1^]C*>Lu*0j^Di['EViNl&= 1Pj'[54JTm/DS7Ta5UMf$h>)lD]tjQ?,*C4VZQWXn'Xc%062FtCJuU"Cg?St"o\m8 ?7kts@gc+@+/AlLs6dkAI^0H(.rH>Yi?k[aDS9iWT!,RH#D)oe<1\d_m1TWkP30QB !WVn^PMjs!@OCibYGEln-I2"tnppa*pie/8KgaJm_u&pU?2Ql]:l^]G Y+g,kWct_FDi#CPs1&UtefW2g_(&^72R@Qb.K=,2"U`*u@K+ ca8cf,)I6QKQm%cRR^Ui%,!i_[XC8QrtMbh.An!?#R2k&O=UAO!Or4O(3?XLFFOTL @+qZ,e?O24i^poL,ObaZ[P)7+=sP9)U;3pOkLos[s,XP]E/O82ei8e&HY,ArGEV?u AS#n"@ajD.6dn'YS@bJaS0]F(P_F/'JB6*uS?gc"f1-41KWX-Wc?[`_cC*jk`d?PWn7.,R!4q?!oeQ.JZ#1C1THn]pSAeV2D?1Z3 ]A=KJ"3`uE8WC@7Q[fhbG=J5u`19Jd3iH\`nLJN,$nXs1eRI3C46#t!;Xr9mfsNR= \9bsfoh+>*.`JN)q;!OFSP%_/$Hnu\/*LT!rd)-7>.GJ+h^/%-buOkd7=NbX@q5]> )g%$"%V$KJpLi4gcFL][q3:>DHVH6;(Wn)j[eO6iV_Ft5Q5#-YD/ DQMmq3:?Yd6/[(#n\"Q-QO%Os6/9'B4$_$Egi<>*jra+8HoUVf9alQ00190MZ;LmN7SF`a#uY#63GX,jA?;!JI/[1EN6ToI3n90DJaWjTU7 AW#%GIX[OOCkVTe;Lh3mi2U1,?%T*B?ldXl%rji'+4YiDI;?c_k9Xh,n-#s+!lL(6 51Wlp3D0;dK+#PfH#D4X^Lp^7"NS5gS=EXibt.]n7(mAL3rljmL&,ubaSFl(L+#rU qVdnGr')'25]7>]^jjk_W1/H)`j0t'^=B7-M-%U-(Rthdu@0W'/:NkK4=DRC^g+=7Q@co F/"R3n1tXebR1p(DQYFDd)'@'_!+(AjoPAC3*;4gLor7TgG:J5+'2RY7b[qPhrYik 6g)5*r1eo&9[1CQh4[fkM(TL[#D)%S?oMm.:L7FlZn!*]oM/(D:-T>!l/Vra.DaZ^\B;Dm*!bqp5$$qjE'_I B7U#cU<^H.BPNGdhj8F*B\sifnhTb;KE)\i_OEVsYDm-WS>!WdaF++S^aI(?p04,b GJ),fqGc8D.XU)\q`OL-\o&('V4ES?s"^qf69l@_'(?tUJY)(pM#Ylc>GKKZT)lf* HfTnSR.G/49eY2m%qN,l.WMeWdpulGfm)\<72Lm$QgBkc-*jSJnn[@XQ3u=<9'M=- l0SiNXYRf=&e!nmRJD/sp1g#VE[gGa1#D:aOU-'c-:Hq(n3NH>\EmHF/5md8;-q"lTH2=653fIh841KAd@'+-W<XmpnR)E"[NA#KD./'pToMGEru*RDrg3T 7/RR>j$\=@MuO;Zp318KVj?A@@Jae!hHI@sL?5+;**:OJb4<:`AH%RZnfRLW5>pPA O<=MC]YqSHVLF_qIZU"@R%AYVO`QJHI>j_9>iP2dTD8UY!`lh:f9nb0kIB;8enB++THA=Y14gu)5=-i_=\"1P9Sri?hfda 4ik2l6@TFAT3smUiP/P-p9"[V?:u[&aJZaIJf7D0(l5/@0pUA7OT '\Ik6s3ZjD&LAG?jLhDr:P?`Qs&JI=XL''d,nouiTVZ$]Sk7j)RN"r%2$a+jrt"#b ]k682ejV^1ruFE#pV_bp<;Fq8F^SmhMuhc4_LmS^dlZ4EATlZDY878VQ?;W(`!OHY -d2E``-=*M>4l"'r8'9EVW\-]Y:KM-kQZMdT)Pq!KqB>@@/bX(*ri3]qT#=u:Zb6c q%#`@=B@Jk!LUl0T^/H`=!.Tj]ZR-T&PBq7YTa)/#Kk0de#Z5nO;a- 7sQt9\A_OFMKU6sqP?]T#U(C-N"i=Uu'7n71X+.fVIA92Sh/9ab 0XR&]:pm3#I'Joog\W.5i+`d1In(jR)'e=OJ_d8;rOh`!8Hnlj.WWB'QV'#+K^!Z/ .Y^/Gs"=*4$W5SIPE3lc]B5_28Il%)$W@+GjTh9)`;Dc=h;Q5rTA]aqhL7-:"dsr* FjE5f/3N4tQQ#sKi"*]j_"R>+P5]7rCNB@GaSbo;s+M.G@3j7s(_"?+P6U@Ypga;5 J7FtA\DW;1k5q7Xkbaa!cJj!+e/8.a1]Uhg"X:dl_L!"D,U@C!?MGcEUN9P]J&:J, 88cYU"0BSi\NjcL(OXBo5eO&QZ6MPGL$iRRb_,UT?9fkF6qi!SMbp,IB:unf"1\F; Z@WSIO?UturOa9F$[VRabci`[T[;"F_>DkNDB':(lt;*bZ,>@!;.&fjrh:f#VW7Mg "i4q[TS=PajTe%%:p[hLN8kQ9@=HM2m#8-8WILeCr4+NCYLN3Jo/"/+ci1X4mhdk\ "Gi=eJt%6p8G*NM]VR/d"ZJ]_-Q,='AoWo,6F'6N*9+188U-(C_CgmgW$4i5;.Zbp 8p+sX3j(pk%HbFF'Nq8nX#*4E)FJ;a+Us1IF6^,:;G!p^\sIh^P4oSS0e_fq&9k<- #1qtsCSL>:?Ip13)]\qbHBs8ubGZ3+]-uo2c%O[$2qAjGn(!Dk[8;`H`+8ZT1B4)? -0$A68-'jD!<2"q00l=_=r,s,lPe0`3!6`j N:mrNE&""+mN77VJ&jerih5F0`<\/IS_o2t91@,X3U.`=n+4XXqd4M'j:-e1r&U-/ DtP>*Z5s8PmgNmKq1"\`r+F".O!R^IJH%";,k1h(bLEt5=n s%L]oGQn+3RW8qpb[l"k-!YfT?2YtOIQHj+pj\)*bC!8n>NZFq]&3%5[Q"A)bT?9L )nZ3YJl=YA-(EO$O)FNCelf]PS0$[K@hbX\8qL%&gPQ=,s'#X+2["aE-@l,SbRX:* Pmr9DJ#s`GoEPHW7q-K9%n4qhCfCS<=MF;nT%YDX*?%qo9ru]1()_LWoR8)YEh+?MY1tpE]=h3%oV$0b :!)%fBjfW@[qZn:&25L!).>_pbIQH"f$]t.j],Q,8,W2Vkb^8\=V,*E^gWmU=7j&d jMhEje_o_Dc\"eJS4U1Nii^"g>^@+8KLXco3Oj,O. NDC5Q*p-MZj4LPm1efa^)(kH=M0[[rK%D=WpUiq8_(*/%=b&ke\O;+o6')IZFf7Q, m-6*Ej^j2em<6F[]lqMY$U2)S"54n_1$TG5)YaF(a6(-)N6QhZG5f#Bj+>%+9#d,< 7QGUrQbS'tVVo/W-hrb0L]?'J?d+!M2,KG5\Ld_9C".T'W#HY0JG?ld(AKlkIc,[j 3$pZD>mA]mJ+#F`SVfH^+7E*i"VI@EjG)88JcP[#rej0Uqm[`_3fO=+akYOS.n.oOq;tGjZTYJkGiQI ?Kf>j^[m'F'bRHpcZ;22pg%:u[r$3Er)\$9b8Oh/Lh[cLG`'mf91T^=4'5;fcDh)r \-CLQP&(CEi/7CjeRK]FF749*I%dMO9!j!fGF9(J:+!enUSYYEeD1%p(`!IN#'g?e J($CM8N607MrmR3C.9?7^lo!]`Fs&h&ir2t7U%+F@mISSg)#7Cci:=fq-TuAn-kN` =2-6LhU4H7Zqp_.D#QZ"(Omp,I:#)Hr;T:?bXXbKp@X&Lo"BMESTYjuKOmS:^1*%q $uqB?..)dK`sNmEF>&+(DXSd?*fY";re(4mM7s!6@$ksT/V6[/4-FPu,T3^,T?;H] Jh1:Vn)[[:rRouhbD]LcEE@\jXapqF.C\G[T.I<1(V.KS$G1MGh>`Mq"TB'WScRdL $FaqR0_AO2\dkn`k6_kC$GTXRoCOm"G]>P/Ip4gkqJ]u?YPHI<^2kXiq%B_Anfu4Y +De0Z#N$H>s&$GuaYs*-na)1gf]XW:EVZLQQ@sM)B%R6fW)Dp_R^5MWI]XP(NSbU++-R[hT#" V%`1Wd08@AU4-dp0X@VqR,kXa;BIl>me!<`!<:e`c[fCjSUM1(fG]ILJ=#5m3ht$/ `AB^fWI#IYeJd/o)gc-=l$@:=c-GC>cR9U%6o9PrmteR1T5`8IHH2G!Ik^%/I/^gP .Ngt4h?^@d6GVE-g4qs'&-X0ZZq"G9,=2CCG*+GkME0Q/IAJj5LU=?_.!s'(+ltXJH[4=P PSnsLAc+ubrb$NAJ&kRf/5,u+38kAZ![&*57=N&\s-t2-)*\sYL]-FE3oGN6i%o!? mhcYO.uaBH24!WI+gTMcW.&r3Dr@9RBP?5@%:``cq.G$1%s&aiJL(2JM(j0g$p);aGgYGg@6a0gAeIQ*SE-?q4dB?aS$8j!0,?&%\o^_=u>ggLSY+9@M+_UXY&$RC?KK>j+emfUHoX2>Z\2Lf9B@_!A=gqOY2)S]M\p`JT2G-NUXB @85rF39^Y4"\iZU7_\@9id>qY.c>Eg?L:J#4];&k+S3V/i9Hg2jgP;kY'BnCNrct"&]M3diVRU#4S[V2I86ihk\@ne+a(WiK6(%JUWWF^[J(3s4bpnuh3^i5OJlFH(R/`6L@.V.B m%_W3O_+d/b!(12&'c9)rPX!]n,+QYD0Op!B(b3fMK=E!'`n[?UX`Y'Jr"[^6$n<" 0?XjBP%LGh?EU^YeGPs$\(CYlMZ8uo!*`lnJaoQlB:h$69bQb=N^T(M#\*8?Ed;nT L`:O41An^63B7&SI>X]r+M:QEL:(goi>\Kl4/DhU]/>kpcUS6\%FC? 6.g+/iP/r%rW6QIr0i@AOK(k_*A*5m2d(2d")n'/R:SoFj@P;0Le^B$RlegqU2e^?+F* a!j-pUEASP:([!S1Hbmm0+f-`It5:7'Om/Y)eBU._Yi.&A?6td<3_>?:m+K%PVR)T \W0R]O01<9#Xs=01o)$q8>S&RbSoWJLR+6\es93/gXB=W_M@F):2.n]UjH6"^+MaQ "rCDqVZb=XKH5+HkIbn]9$fXQlef!u&"d+Y:+f.8>i%C5IRO/gse\P0_X'QKAMq*T]UMspG/pp#^UdB`$M_[__%<[]lh7n!KI)j.P*mcT/\H3\-]/`Eree`MO8SOSb GqbfgBHXkii'3ZV+4Yl3Skir_"-$kS7_(e0PIAiEchqRj,0nEq4C$$Y[R+b:B6F=I 5DVd[ru8&R/QU1%UMGkF$Z:HJhR1=DJlWc&.tiA5:OH'dC^PsSb!sb&0@fhZid/JM Hur"FZH2@$kObDdgl.j!nqdNF%pI>7If>NQ/8/TK8rh&[5<>,0@@;j@#FWt(9,8Wn H>=Oj=*?aQ\l=,X;>e,SEfdF%QE!$2Y;r%%5Er0kcR_+PPFdRD;8S40M'^khLRM2: $+-XY/]qJ5,0D'dXl:^8dg-2YcE*Z'fWH0#Zh5s946JJ,o89+ori6(roBs6rm?tFf ;m3i-^aY@Cc.d%,-d%3C2o&1)M[0'O#0MIXn##u4r1rkY)WQD1bSbtm>;=Perm'+M#S4@aDuVq AP#:<=k%.Ui[#Q:[U/c7S>Ht!L'iEkI\9C7,>`]K?8c'W4i;J1N>qAAQ+SInGoP;\gWop>$ :j8#*&%%',ck#)@NSA+^`;#43!/),JX+iq0!1k9A_$=G%(g85E#'E\YDiK'T7*\Ns +I\oR+':i,n))QPi4baXAQ/V1jm/Ni$P73QQ+cMGE<+pX78r^T&(P_C.[GOf0>9:R ]D2DeP1b'Ad1)Xf53-Ci8nufqat;[>M^KU!9!lmH7'!>^WPaE]k7"iJH'Ddr`*PPU^7$Ei;^5pm#tkD =HSPcg]RR8A]$#bkH\K'4MPa!g@9f9C-t%f+R4SE]OaFAR"$6e`WQ7u(X;tjT))te V]HpsdiWB>>NV&"lfbFMj%eU5d\B^r=*2pcO9e[6s/Mh3Rc@O>`u*5<$)4@(i'7-( Alf-te3R,X!:[a*:+d.!Pk!b53GFh6iXYqOq9nGE*0X$MJN6a)S>((`pT-%JG#-DC rqtO<.@8bOcaP3-CeHbf/F)l6aAXaeRU3t'ImlBN);ip]GOAW/aa4'=%tYal7%ATn \^6dim7$r<4/"%jL,;!u3W1AeF?AS^DrQbmS/[Ok]SaDp/E5H;^lpAf6tj2pt*2Ek5WZKOAi9t-bD_b]:tbK@kPJh^Y6iCHAbqZ8/'Tqngakm'p@WM BkjIi'+iumTJe2*:9/(7j&uY?!+7mK!dh2epIH*mlCQM2)DoZa26BUWfIs=)(:^RZ Wg;aI8R:Z<1J:.S\E=+lO3Bg9`PtY21D18s$Y+D>+,Sf17/"?nim]Who>Q"T)(N;gA\e`Q]UnC r8H1[EQinmYqSgGg@pL:YQt.uUjXA"aM7?HJ=,sHR"'_fW9K*SjsHbfP9taXb5=l& o0)SMQ@2;qmk2dF+jW:pb;g%U5a[!kOE-GTr#IHi)fG"D>fpD6;1IRpr$/b8N%gt/K"kd5[*,f/d2`Jd8PO6Z@4O-VbbXst<:'H'd:&U*;q)pD* W0l_Hj90/k_-0,QL;/Tb%-[`p"]:tKJ9m/]E0Qjd4X]tHL;/h!7)X6bF$.BGmp5`] q>L^uO@hjf8jda,0S9H%++_]:*r&7C^If&^ZP%*hOtO%>:F6cYAg!EYK?K2s($:<% /%MO5>[Kg3/1$o?MeOe8]Ng\Fdj07>F*+FN7qD?AKl,;oc?Zj>6Sbpbm[L%qDMj5, WlK\1MosmZAJb9>?;U=t<<2/SZ@R9mkEL(gKluk7n**ZG'HJKS':Zs5T (34+:2pc@tkIP>;?%P[BX2Or3:$p<9EU:AfoLI*S:US[O*q>W!M qPRg=q>]`jpZ7=O^6kUSr=)f^-_p*SWbNpH__a`em2N+Y>B.qh:OJFd*k j?4meYHu,FrZZDsfmBc-Wc;(D0Bf'@+6A3;\e9h,Gf'bg3KPAm5j\A iX`Wfj^&ee5m-_NkfHHfEfhH]T9g;V.f6";cd1^D*T.%qn`k;1]bc`Lrr9od7_(JYYW/c$DUr-+[l_n:)8 I[2?7gP;-]bKKM;kPOiYI!PNOg`-iBp2P9<;/YN)&2346W5(d:oMb@5ZiUjGU&[;C 30:KE,]k]t^Td2e&HWGp&G[26`LISSY.Kq]-/j,XrWE)[_E\6RH'hnZ%e)D,,>BYn (#Z9i'W\#!X'JA10g[m@.#aY%U;p\M/\e)/8Q0]RNp;Z=0+#rkC6aTu14H=qn7h ER&Pb(\unFr.ubdC#D38=EJa\fE8==CM]Yl;T$"IBFPRT#RB(?2:WO)7oi=ald1&^ rnrZQA6D%+/0.$3f@&NbH8Lj!NUA6erE)"i>s+!>&0M0;VLP[Nr`A@D5O9dO5l<9@ pgBZIdLQEZhjHs\2T_\]GNSES`mILD,TY/hl5 BHt1BM,l;Yd!`C4dU@BTs%JpQZ)PSMi'7#:f95)=#ti,o$tGAXD5rB#LrEfkXL"PC dm%!5hj_W:s$&PVhA8u%Z&QFT%BZ''qDe5<_sF7=R@:l,R#]Sd8+Y5#Eib%`^jgV< V*pJGU7aI[TlpV/5M.LtJQ1,G%X3`H8qisM*-+b^;LNG+$f0;^4#s+O0r9.V,AS62 ]bni#f9=_4Q[J1#gtB,he$"q(SgBnP&D_Ra]'4\!KdT`1!;Q'[4QbFoaMrS#oln:m 5kcL!4c*ma*EmY;W:kC"r=+gVLONksa=TQS=!8A!c@+'/EN:\MipG[(bMK[#?C"5* (@_?c52>\1^$Abo/EGkBb3;ul`b46H*fq>5k;5Ba<1Y`W2 +G8U%%YD,EVcJHFs/Q^8a6N,T*s98]SrZktbH$k:js*kuZ?Q"fM:+\$_R*3,3fkH$ +4#3\jsBE1T+P_3`u8VG!.Ste!.Ua%LP3pe.+M[l&qKe=)ErZ5^DFWI70qi?M;Y#m bt^Roa4TQf#D%'PHZB0RH`HoJolsuic]oS]H`rA-)#/tn&q8JaIo[[HGBAW?)#emX YKT90#@[TN$A.Z^YCZ_2[*POfqcs'>+b84)[@[^*M#RI)A]R'Zs1KR`0E67@s#q7s J'%`hR/d'qe;_S.E"g6?+]&%I#0^4YuLf&0plf3oqkqeDJVgb]f#a_q['Z?A97Ddu0FO_o_H1jSO!+!r.J#!a:\A (*K:H#kGY4"eMFi09DF\X(;$A\3X;)0F6SI;R$,\/70jD>>05Wd8'&nR"Tl]`c7@8 4V^;%\^2-<'DP.PIPPnn;Au9.KH!mQ7Q&l#Nj<=H/TWBiMZ)(ZR(hljY;`pZ&NmG-gRL&e]'P5VdD&ggbPfL WpENX[2m[o4n>I9`J$>NUGZQ-]W?T`4>8F4/jMn0mT@p3/ErZ\nptLps+9#4S6o)' UCfYdaX->q*0CCi0!M&k7_P7F8Rb?f"<-M)hh9fGa6Gp2TaC=O\iN\n(^0"4Jd:fC \GhQ'atSZ"=O*m8+P^e4VmdC>Do?-iU^J'PWLfMW3,\LdJUa-kuj;G:=1-cs)4F354bo@NGNc-?g3K]m%dkgoA::/ !D`_"r_K?FF2m)S9"[$Qp0\SWrk+cFIPR(0IlQO"RX5TnZA73lS8`QR^k!t"9N;$p-Up@>#mT:CdBFb_s'YUF"Q5a]n.&V; VO@YeO6=6Ib%oatNN\7q(.RF&A!f?1pj[eV"]o>(BU(!h:Resq/ocYaOn JDNAb[Yi(k%=KmM0@ou6/Vi!@UC?a63b/8WmhrFk$0oHr;JB$cP$G!mFi]/OZ=(#' "TH/,)J0]hg-kqZJq-a"==KM?RNGO*bIkcZ4;6VjS1J_/]2n5RDt 0,j1qR75T#4j\#jZa#IEBZ+K94e`p%&,m[G5F$\90'`i5IlX]\ KAO(DfX$G0hnP]YEi$!eWM";UmhNWfK7hI!='7\eBFD-[Eh>;=@C5Mm3^d5;7Y?6< .D,ec^KKRj%qe(tc"dR`Db*C\"?d9WG$^O#9c?Lr/P2H6J!;3[!YZ5]>n\cUmI(kecURQRVJGQK#rHrn&R#MbV`/2>.Y7d_aLst\N=Tncr/(LRk*t*jS ?]fh^B_+tjhfY`!-Hs94G6tL7,B_(&Tlf H%?+urIFnTQD^8;+_/"qJnH_N'R9%7"@l=;.\m/i.$_LYdQBu ^+?S(19nPKZ`Yd][O/&`-G?RJ#QZf^c';EJ.W[7B'jdu=T`]0T_kaH6%&%rei6)<)34js(T%)Zb$Oipeo]BEe[$dS nMS9FqL!bh$GUFFe@d0pIA[p.WukKR31!6`Vb>`IosKF@QIi!bG=>FP.croqci0\K DVI4XAK;!SD\l2ZrkC>Yn:01L\RcU^f*ndVfk;UTo*b%0eUNh$Mite'If"`,F,'A_ RYM(As2;D;lEL1*/%1\#rRiJc@,%J-T9P-FEsN^R3n5S)"D^&->nr W$CL`[iaOhRt!>-_dN7:a"/qNoY#9m!2Dm54aD:p;aImO(GY9Ch""Xk-U\?1=&pF.uKDX 9o#.&_hC_/"FXHQWBA<%6Hp-M]tiIFos/N<<*Tqc f?;5B0GT7%EoTqoR4V+mI?X7 %seVd]Z@1(P#d#rY3;UPlADe(MGMVWhm//HV<>L-f>9'+-8o,,Pi`jl/K7!NnjsHYpO`0XjH;^'F4"ppl=p IV5S:_at%IZ',apRF,VUYm[#f8WD0[7r!(^F 5qBP+^$phi@OIKq[f*k?5R`/$*qILRTo&n&P*-`XhBPbRcC5r4"j5X4J>*%[Iq;s- ^[iNh9ORi-PC3+Z!*Mbkn:,?^.,oaDikL-Tr-'C\mtN!H[j&Cs&,_cL]Bq"_^G9W? .g4d++MR,Rreo\rm,:0Va:CT!T7HrSU4hDQ1]F,F*n8Sulfmh@\qd00;a^-]re(6; ')WPXH1Kh&GsXSr)CO0(9,F o4e3Fs"abq/-l9*^jdO2"KL)TW!($L6LCIpIlX;bBq:G"(?-k)ks&\iCXhn=`HJG$TV%BNc\(Wp&D9\_snc<#i*eW6V9g&d[LZ^U" [#&g'f_5S%)An)k)t8>PphG]ZW5[53rOD[.:IQ5e<"Bk+Y9-EK"/p,K3X^cEn@tTC "]>?is+p][f1-MC9P-C*8\=Fb\i#Sr!rRQ1?el=FfGWC&Q@&f0^J`FeR+&X:fKWs b%1hZmi>=Gk2FomaLU$nVk&Dj^j;A`43CNK-Q4b]-0WLFDj_%/+&F9pF\'Cj&ot75 C_h[@"MT2r\";o&AGN2arc4HoRc/$i#3b[V9j,:Y3UsMfq<.<;f*a0S$S$%lQetB9 Gad@5RWdsf>kR^@`Wor&G=`PD6E39]_eU>a2;AYE\J\:odFWQhcZ1Vih@`e.28FYc Yk2O(frL4scH(phZlA%Zp\G9#G35C`c9M1UZggYg32KfA>,0/**BOUSSW\ugrr9ib 4L>d2nUOl+#N=i$ISqUJZ':$((j=l1Lrdn7"C_)cXY+k,5@OQ/JH(L#Ot8aeP)@8k !WNc0'7='_hc]:\^LR.HA,1siSj1j)Z0gGbIUO)+b,HWpGu\:Ok*ONE_Jg1hWHU]0 c3l?(s53;fLB)SU9`Y<=%K`p;2;(8RhH.:?0BK/<0`M1'48(l9J1MZoNZnOt*^3PW +$dW&5c`=Q#Z-7!m=YZf(@4L"`.'Kb)%f]`+_\]dJCq$G%7foSVuDGuq\qo]+X?q& n6\fnkO5*UGjFRBWdGmkY,#6=eSS3T4ja=%Ze'%Z3nc549#l"r"2e^+R#-u2bAMqHZbd!gM'9_/kj06Ig =;*sh?oQ,WMMr6"O<=!W!oS"EL4W5-0SG$-FHMCZf'j#:G^3G&7:gR@ANC)gP;Nij3g_!2$nkG5'1N!=j5LZ&:.s)/g,6N&]lY'G$UP-f^;48).) 4?qQPWu+/DVp^$QIGFG/7dLgY9?&i&VAs+X$^/4m=m*AFBMC^sU)cRq-e'@kU40b? Ea@&,Xr:Ct[>u'[mW:;@2QJGJ=BF"8*cof!XW+A@LT9$'FgKi!'2,>H+PRF'1[g7" 2`-.+g4?`q+lGSR/7b1Ppb+/oJcDd.J_/%1@P!T3/_VO-#(L[Os1GjiRf3#IYPl?4 R`GD-Xe@,s_p8>_-W9@5n6^m>)i234Z(O>Xnn?IrJJ]()ct9>Cqr>f>r!t(0m#Jg0 '7HQ3\/s-;IX4!4g3!2/\ZD]%\I\g=$##ek"T2UWkZGsqKQh#a?@`&_V=cARZu9p[ f/\70Cc(Kf>CkpEKAg/PU[qi7Fb88qZbYf,s$'>I?^;3t8UKWbBKt+W !VKThI).WA\H!NN7r16cA=pgi^ea'M&/ik+`shuN#FCBt;sMqWg9lZ#",$ZV?\Tjg c7TEEaSeaWIO.=qE`o>.*+g!U'_*D!]FZ;P:s\mbF8`rKCRHFg,8d_&D5"_)l>N?l S#AW=]F\:"fo_h)R@2lmc9.:75+eR[S8<(7.=..Vr?/9@G!sH3:^8]S%`Et?qKq:X l_M\Hr[#fq[L5:-.%QTXZe rN!()k_ZBWn1dCP`9I?"'*N(>t,OaM4MJ:^hgf#]c"@ `6uc@"/t1>$LeiWqLF+rXq2`!+K@\p!>#q)a0ml\(DfWFpP@ QsKcB,atp:^^Ka@OQhd_s61oHs"fk"A)!('T,[YjaQmJrBY06NkK)%jMct22$S( oqCKEn8_`XKq2IT(0+KL?!S1LgH$]sS)liIl"`N\NVpM7g%4.5QQ^&6#gaXJIQOO.0+'GKO)eqcq:8AiM_c,c 2OmIS5EYqa.-5>r!a7\?9f`4tYSL,e2H#/`p@<%^j8&%S@.ch$In0U++VnV'>gDS= c?V:p>4gcPV !rlmJ"03iRq3h6o$W&f::409>!rTn7D\l.,&eG1t%HGO@EH'_h\7Tm/l8h"p2pR/E kkt"1)=aOYMGk0MZl2r3&lE5?qo?`6[UeADS/H^^9L:HtIq"L8(ad$@N)e1)-tCE",dZe0:-3K b&Y;J"5=b/"fIU7dg@Q)*t,u90E9Eo/u$#aLO_-g`io/EZD.PaK+m_3,_G@grpa$$ *.gC?uH=d;*\CuL-krq^CmXi$i5)Hit)4e-3"). RJr)F!+g>HQ1rf]s4tUj"TK\Xs/"]hYU 8p,E$9dQXE.]TX,]"TX(i*T]N<*PId)*pu>>'3h[6WrQnde&9W[//48\oN$[Z)0S] A4:N;;:]$:\5QTlTt1CUhD3BZlK;cEj)`(4FC//*"W$sBFr4T``VbKZ?rk\`%*+>U +G^:'HltYb<%I6"U\3_D]VuIgX*fo8]o55Q!!rgV+ac;=(P1uX3&f>^e=7a&h@QB_ @5G4?IW`gi6e,23XO38c0-3e@=c`-Pl`?:L=.V?LfEJf"05b0M//ht&:D *`Cl6g'B.C@)DU9fTru(ZeZ30_=mUm?%e"fS8c0"I%`4U)P.*kS9fB5kuM0Hrk9@$<2YZ;21H.]7:)UT^rY& r]apVgQm[,[OKQbgE['r+&X]c6*6W32i:*`*Fl;?_nE_GVc1j#r7hp!X@3i]O9AY+ ,OE;*@Sq*LJ5j`!Z*8k?S3S)V5gT![d/=:G#6Of\q7aXl9d)JK*t@$r:%MC%qPXf# e-1E'S3VUr/j%:E*Eek6GVYD,.Y3(!7W^+PELNsj*G.>ICcY3=4rn$Hn1lo3ld'gD chg$Q@(YJuFOAEV0=pFOqO+87B:]kq]jNe.Mjc^QbqJmj/uIh^8Z^(=_FdFDfO`l%M.3lEo'jJdQW"^SPk"J?IKe0uB:9@M1S5^2mJEf@/^gf Gju(=lo6XD]\A>U'@$5=k+@2(:7qRCDBBIjqGs$W$tX^Ed8YM#Y(1 J<1_91=Al1\IX?\!0.-Ug)"Z%'G>0aAj*^uh8O NqgrFn_r[,#RgPue:3*8a'ZgU=*"JNquD8^=WCra"doLBB"kI*k@b&TMlNs'f7L#sCFeGF/!I!U;a:lq+:G-M9W0U= X*:?tfTBo@;_-"S9<7)GX.gQU'/%u/T5+%Ob4D\!Y.+7q%F+OXHtZRQC0o.7\"pD7bTpUl'W6./L^M*D)5CnM+'itd8AAH,jY_Z]qRc-ic0.GTcI?< %7.2u9oHSKnDU6lijBIp);S+K2e3"pMSXFHs-3.IQ`U"c_Utrdf9kSKM^,:G.+S%T >'iSg-2it*B[ZAaeUK&]2TcU2_>M&+NWB+:RRYk-]c0![](]a'Gc+(!0q7ZFSNa^L[`.*7%_iX0,8+cP'8m[7GnHH*?c42/W(l5ftP&qI[ !I3h%>_7b3Je.Aq>-r$&*Ar??a'X07gi2/G"Sgjm>`\/7=c[4$ShK4NPQ-A![)!X\ _`sdd@QF&1@b.U5[$U:@)SL?[eqKF)#go*.FYrQ)&?U-mob5eQdJ?E/UTU7edK@;b H"oEg:Da&/jG`NOIu(fH:gS64NR+/"KqhUm*TD.bJ`@r.HOs1@!;PjAa8/CD?DEH/V=`hJ$QP ).f7ps"4?PZ2UXN&2"+EJj4uS#a<#Z)/!Ht=qU\-NJ/&K2%#KYI9qRZ2]UbZbp',C JlLucb-_2(Z1i3UZV&i_"&np;Shk^#"!J3u`C7IEP'\jFeU-bu99s,!f/*aE@"=p] -.PTB*BT;K`,Ud-$H)4Y^459lf"5J3A2nYUFktYr]h.RPR.tm_ca22K($/\)(+2]0'nAjMfRH._*IoO>C0DOPn[t(Ba^cq`6i(o#U b^[bkr6MPJ1m&1DLCsTOZ5nm;s57\mNO.Sh>K$Vun:4/V^aVNEoMSGs#S))Er9(ck k6pe:a8Z77J)ro'!*fm3s3V#9K'."$s5@\f@n?E1=EcT2-jKH:9XM$\(,XD93f6F5 lBRR'Z4adFLhQc0dl/?PphT/UW+t4O5[BHVRs0j!" [MJ*r,pl24KR]J]jA;"EC5PMSn`nN-(L#$?;?A1[cqHb"1YN]Ls(T8oi'/A__Eq"$ .A421P-@k`:)*\Ys%+j_pn.2"'#?=/oBB?\Oo4P>PimO'B4F`?Z+I?9?icYp5lP:f !(t2Pi_a#Eb/$\>=c"s]eNqNWfpMel\T4p)!N6'GWqq&,H@$QW]:/p`8sK&J?bq/+1%LABOJ(HS@2cTMM_e0WQYi;[Z3q9S<]k?\OE3?t;X=W13^=/Ps6h5m5EnCJ J&)%J3c=tb>QOe!k8IM*Lb1ea/j2`WhG(UWg!(0%'-ps/aDJSj&O?p c*CT4]VA'RdFsn(CJM7e,X`Bp2L[tr&J^R$-'](A0VK+G,na'0URJKu7Zc%(&c_M8 rbM?^Fhn"XB5>7T$K3)uJ&EiXosUF^rB(!g$eX>?.MMql!F;SbS?]%)rqF;p:67[k (PMM?*tWMk,.>7Oj_J:NR],XDMQ;:8i?.[K=M4t>lDJiQ@K,_$`JaLu38k8(+2cur 2Z,8a$DpV(/b7<";$uJGoBNrKR?+TCSV52ZNdbrsL-' X-E`Y3tB7%IgSaHe(+4$b^XgsP-=.r:XoK-X5^)^G``.L.-P==chY'J0E6a.p,B/* 5Pc+u7.eMd&H2^L- 2R?b*jh<;.^KTP[lMM=S+2M;RYq*mj'q*_>O1+cf9QW,Jhb4F4-kSNulC]FCFGT\, s!6\']I53J[DP`A&b)]A\7eGE1[X@Kppg\Q3u-\N_?(#CS]U0b1dJbePfkn6E;8nJ 2$'if(4c4QMH?V56;TG_a8CuefED4WM&8=GTr0ZICkgQ4(%cX7%sD!)qK#Yb\XK+m ]'c`tmOk_oL4ScITj77uXo^/O\$N4b>MG@Da^qM7ZdmaSb%t+GlR;4Yet!,I^5=7L ipYY4I_"aVY\(Fnf/:8Hr"%"/gUBS&Bhd1g6Mbqnr#6A/WJ'iL\$U,KtXZ^5TQ*pi19K@:8&#E+1^"e[YA7`t%Pe \$Xa?m#&+]s&4lJ,d0:5hB/lE`J#C(HoFE"rQqeVr85cEhFgV=h+GNZa)T&tLV_XK OW+hk$P0"G@2+tY_&IXu"6TWLFo7s)#/9n]`HZOQE,"!MECp&P(Q=s[O2W7A"8o>/ cWoG"Su__oDQ1KI/k,`LJ;#qIrH k!mRrO9s'E;HS^YTIn4F>IgP5K1l;<`C8m5'5$nCLL!Ur__A[,T>jHC\[abtS1 ;P/U\BW(_A7g"WY+^%B=8rcO-E=jQNi[%e4nRb(m=Vu&k7d:-H3ao&&WhZ7Kdng]l (WM!s!;Z#l-P`o1_l[B[OPpkmQp?G mrL;o\m"r9@Y"9I#>op%,9HB47XQe4rV'r)i'6W2m8X1]/o+\#)=bJjd$W?BlmI9L <=r.8UN-BC59Sq\gUY.D/quTPhqQA*f^E^R3U8,S3\nd6_LIE9WoP&sl\PJBX!?lV @"1#]ImmqbAh&*o-M^YM;q47KpEW_3eX]u6b?fVPDE Io@)*h\:"s>q#G&(!$G\md @_"VuUuDuokMl,Hk]k4&=Zm^>T!4,rm9dFZAA>Z[@%"R)e%o=gtjHo5:Yk-Pmp.bS]S23K$HC6 B>FQIkue8jD^VF/+"X]'r-oDMRsuJKkBEXZ*^gcmN8K((\I$8t5;7j.Q[Q2Ep.=1, hHdn\QsS3JRFe$;e9qT"s,,A$rmCN(jNafXPJI4Agf"@:s8!aGoK1dJ<5j4B"ZP^2 S>nUTr1BoI2c9*/n:.GVIcgUp_Qt>tOo4:"e9P6d>Y=VP$CEX+q-8gbVP=O-\'MD]l!'L0g0I>&MZroWYMH? 2DsM6nhJ5c5M?qR-bQnT>6+H%qGI7LoqG*FT6P8Q1O/focnZN^&RGB+!]>H-qbS&V T3VA.-9iUkp^dBT+oh!X(*7%RIn\[gp:k[sW(rcU&Ml4ZAB-8!TS\N*?%!#_;cAn8 )DZ\]H.8e+mo:O)5/36n:uq4t5XG"bWI?iJ"J?5rM><62Eho8e;jMYC`BJQ=5Xl5T l/2h50o4d)d6eOI=NV+F35e^/=h("=OU-PRL0qsmb?09n#h!-12^2n0hc%K".+p#_ .ej;K$3@EJStFS5JcPcfI5T`BA$,':1_.$a#2RO3!CL`:OFPW81urEooX3_Ls6ocE /`C,nr?!9d re:VL@AH-8q4[225Nj![#IV4#[]CS[s+F^7L#05Y!qqr\q1[aTr.jeAZi%<$=TE@= n)lpl"U+,_^6Z&FN,&@Q(]VK\qjb.h\PU2I,#/(LC\]P1gAIFZj0/Eh^[tPjk7p/c -%K@t4QaD>pOD6gh?((!$8Aa3c;,,C^](\pd@^?:=//4js!5gG[Rt6iHdSgV[k'u+$8DE?]0`NTJn37R;_u.j#.s&gI8GeMK_#eq' c2G2=^\!WLF7+'Sa7*sD(/V7E!f3J;[V+KuF?(D^9SQ0%uW3__& lqTE]B5.GGa`MA^>n^"6_XF"Q#]l^1>Zf>j'4g+dEqrS)lr.P+h"'&c_\M,0Wc*88 14([_YSF^RRonI&/hT5gYC!-j64:EA"lKeCG1D!%[dheWm2D#`piP0_dG*mQ@)k)( ++slS66Um:nL3Ypi!d-;X">>!ALV!SY9j(3!";mS*#gf7dT8kJk^&rqK%Le"]LYs7uL%2e3^`'j%l/j#bst &ATA=!6TkPVFt:t>HMBsdd'!cET$l"G4M>@qN5X_M0%Vfg?jOfs2_P9O5LAVTo9gg Z#-(9='Yq-YDOqp2U+Peht#(Mn]\(ZVXHLkh9G/X*66iqhBdO]-iCr59\pr058jS! .(0CN!!3s]S61*!\FguP"T4&Qs#;ns)`W2uW(\%2&MlSKB*S$Fpm:G(O?C*`+6rQa _RGe/6h70(..bWm!,%sQ5Zo"%*Ck\t"YG6Q/I4n$6)fA74#nKF*bg,[US)q/8-(_$ #bNMRGf;MCKT7T6)b0/$sX%htc/> C$RO^F;b_j4#F?:Je:scA\nVld)e8Wbfs+=,F42:!'+n>$]df2q\r[T;pI7!eB R-7VF`WLeG".mX;*[/o7&gDU?7u/i&W!i*,;*=QgR3*W^GOm$mn__--c63%MV;Vr& l)T:#nXpK1+9'669oP`rmak=LC8tK0G03HpOs3iZ0tcm\>Ba%Dq79Q#.\qK#IQdYU Fj(X?fIo.'?>AUE'NMdqWHhLkn:nBZa<3)n91]]o+o-`tRlg`N&Gq<(..!abe_t+l ;D(EGpeM0G&'?jL=VhaCpkS@ql"5LpIP.)A((b#.JkT;!'sHld5ia9o5;9hY1k>Go 9gcTgBVS=@F+6t!`:^iLI;`b(=1Yt!t;Oc'sBr:&;Y0lnIR&h A>Xs[FI86unN$]`dINuAh$*iJAGh)Ao]>bqc0`UKQ=k9`[^p'X]'$]5je$g_\FDO= J'2qR8O'XqSmO9)h@3]pJR<4`kO88F2F9>D,aJHj&CEE<;d4gPH_Hkpi:MbB@adOJ mp!6N/`5QYnNN5QP=7 8(Y%njraGS=p>WiJXebR>U`VetHrQ='2A4 W]gD9\CpH+NQ/_=YBY9(o%[d+?`sd^?"BS;.QDi^E9c7HrXTNp0/83aESk#8qWa[; lFQ?1Q?)?+IXG3]JVJOj(,f]%G=5r6%GCNbEXM.5h$@hcL&?GX4T3&VqoFJ/-$\@\ q7q(;;./L*nFf6Lm0Cp@4,2u/l'8m?MlY86BKim)eg;67HZ%"a[q22bFj*!fU%s&I meQl9G3?WXbPqk(64:W/om\=?IYb1X8,r&%qZ!ACIRpS+/at"ls$ptp`oc_;DaK_2 eb<+BXuTm`pamcm/N&.ROL%bLXX2Q5'Qft;ku1F+WiiYK0-roI8"5"h'J01"4]1rA pIf3a#oXKqBW#;?r-dsSi'0=iIL.eQAKg)qZVfYIZVc?Y_8/A.8_=4BV4<'p)r+@_ cA=##:dBH8#iYI0$goVf-dAThB )Y(82FTJ-$KO92FVZ`!*'uOqBO@qXmB]%_Fmkct8N:e4fg4Z?'0[_,KfB3D0HX"l- :JV@.YM2hW3?++I`"mYt9aOGk28t9p&).%d8(,n\fl#O?&m[jRmeIOZHm/Dd;=^&0 *"&Q1JU7<%'cZ44F$Y6a2k]8dFCh,LSeorIiW_Rp@GiMm![PVa!<2I/f9\o`W!2h# $`#2'Y9sUiY^?0fXoB#>*?'t4+?]Z;A,dGA4.9j.AickL7*>=_;YJ^O\sL:V^I4?: N[nI-WF*_]rfYh23MZF\9(KSbbHD!?#J=%A>ig7nA*b"23%XR&r(#AQ'E$I'T0p(? 2Z=<[+)S5@".\UA1F&Qjq6UjW-S>Q/pht"(C&%unV/eZ[0=&%D-@[BO"ifFRmM i?."(H`:"i86gG-i;[THemk*I\FTg]+.r%Sh`P@X6LkB\"8l)(G+,Xc1q8'o!&JH(6)s)FAHkah%< !r*E]+956uk!+HIS7USg,%BuT.7p6+\l'*>9&GBj(E^2`7q0S_m!O^^i*8IsN?La8[89E"u]&!qRAVnSRFl,l]a^(o6I& hM(q+?dW3\rdVcPHg?YFnGbUd!;M%p3J+CeWHdkMkNjM7M95=0PEk>9o9m0#YOLG\ >kTLH^dR8hhpR94ECV[d#N'jTrQ12s(jg@&nBPe72\>=7jHm>U=*Jcrp>W7*?/E=k,qtX$h"g%^UEOWa`LWQB`pcN4K 4Fb=k-DP;KR7LX_;,Bsf9)-pfW2?,S;R?S(5XF3VVkD/Cnmd+tKtoeG)1aFPU(f-Y o,hCJN%U*ApB(Bh/:c]CU/k&U)#fp&q^he%"j[1YJKNS=OtuP8%Q[iQ,G!k ]Y+udqY.nbh+YlYGLhsCNWtZ[^=626IoR(uq\2(UB]oC:r!ThoM%-(J<[j#Y5LZTB HB]u)J%p_ni?(JKk=5r4LnP6p5J@C&PY$[AX@VU!_%AC$M&+H6plE1iH2d9K+'o

s6u.6YMq:3TQjm>[@pE*E9V`qW0(nPG;.E4>Y.DW=B(ocI]2 ^C<(!_H2B@Jd_K0,_(2,%%eG*o-2gOiBP-8bX=6/%(tb_Q+s`8r7Rii/YFU$Rje>e #j8_t!u3=s'o.r_PEX4R@Pm\M)=@6aQ+nLqH`<;%@MA@Z%J2m:1]H%FIK@9Ws0B-S Sc=l']rGgn6e?M:fNr$POr[.%^q\7l%pN28kO2eFp]i'fps=+f:n"Tg!`40fK5r#V _#g5-]UtMuPbFfLOc&R/NV4'NbG9hpPfEWW!D&J(JW?o)Cel@\8iGs%`#CcPejj (`k=l4!f:K1?8"PqWP>mZP+):DDZeF)ABc/JTD0'i2Z;6moUfEr);K.HI'7^r2M#` STbDlj)3V\>Onfur^6YirpQduJcBrKYCY7Mf:W9!;N@OnL>_Neu;`0<,_ti7E[CCi!;_2fJk6h%b^1RK(\aq)VoJj5M 6gW*Z:_k?pKDq!:rU7u,5;T@tVcKCbDa2P&7P1:_Xf]t*\+\2Z6+2FplFD&D1@lOGtAkMq2aKA i'.D[(1>9\=9&j20f:&iIts^ACTbc^lagp*]s`YZHfMoVL&\*LrIdsOJH#qj'Z2#m !).i4rZL-K^S@p_f$\&F7b`BJD4g$^Q_k+,oo\bPHi*F(-X-JYgL&mRUTPd1&OBAr1c`1bTo_EaG99" &,mU3Eo900I5(\2>-nG%F;81*s*a8cYF(1B%q%%-6(nk*^jifg:V\(B5=Y*u:qQY% =kE2&rHP7=B[1e.a*si1H)0?n7^)K(65D4N]W7W:GYq*o*mCtm`a.44*q8*!THJ-pP 5R$NC(Q]^hmg''rF(%@YUp;pVe(7HPi1F`Kca=1)[ikJ?M#dN&#"9mDiRnE8^gKsu 1]3"FT1tVq`;%,t[-^)t`UM2qn-cLn#lJuCpSg.fTE6k4>(q Y@_:::'tmU!rUpchq/C_DYYX24BL/4 f/NYl]D`aF_TTapD;X-7H[=:,]4ma:d9O2V]s?[e/+A$cF8iW,iZ6j!T/+"84WaWT P5C3&rJ'/>r4gO,Ha`MD9Cu0?;MVGpcCfMrCHhgu?a"_O!p9\g!9bBA_"Gi+?dlS^ s4QoO3B+c=F//T8\(eWJ\A"rPJs*lWikAjlJRNFd4bNRF/fi".s.4OW>;Hces/0Z& &\@aLB#crb_`[#[qqbQO>RT<[Knh;!J$eu$]aXhZq>Wa*Go*$L=P1",giK4EQGEVD G_q%Q_<"2d`Ehpp<*TAnh#;l/JB.1a5BPZbU!5g$j[\R#q]1LmlbTPR/VA%W]j"!M l&*ifY+,Z`hl/p>7pDWt<0rQ(T(5d`!6kI+O[9#is#hP)"8P)hEh<;/g4'$Jg-P@D 8q:RH9G[uOIosP+i?.!D0i_ZWpGdsh5L/CWBCh4cA]37Wl=qX;Pl(gd?:dH[o0;6L =,Qf9/>,'mlgg7O]VJjEWR"6*pQYAuM[)DcHQ@%c 9WrPOrXtFmhUhBMB6Bg>*rbaRN.#qsbC5kOr:16R(BFc)a,e1&hN2QWDB>!.RT9bHf8l 'QpU[)NO%9NZ,mW1&QmR%g@1VnX^g.s+TOkiI`Ks?'+,Y5K!COG@!9G$^Ui1r`ri* cA22P*>8"_.PUl-1(=BdM%Mn!U>^[3O[7C:+nTX@)7KVZOJ%qK9F`T\uNlT+^ 3Ts3Wfkr6^fS\Ln,-S[>?mc*ujG3n@5Vu<#$rT.ae?#"nj6-(1bPM/7JRCorYbF(0 e/&f-J-*AL+*YfH*cfjC3ZHurn>'9;b,mkp0q<9P7d^$qMe:VA)71f<%;fC>L/(`c >#CEHQ3FW0FEUkYneb!'+G^42[#gk#f<^Ze?;f*@Rb6O%#oa9%@qYK"X3MT"F0Q7! 3bJJ&&(>aj-#RUTB@(CFDfWa:D8UQ<$3;OU*enRhoA#OT3(>/j-A`U8,F\2#M",\H)-VYg)$GbWkeP m?hM:jB#C:0<^PF>I.&k\8FD=/-5ZmM-Zn6qr)r(o=k;*h=1?+ j>)C<%0&hceX__cH`?*gU%+3:?/bJq[)f:#ngMU.m47E2FfAYHCfci^V%e]j]6Fb)QlTJ.52k=&(o4O^t[38,fK[FnmhG>)$E1Is0/4K ,j/V2qhYpcA,dGAmg1T=3grWon@tUq]h*BSSCJ:MpB6!WZp$^f5"3uq-Ms"9q)?UQk6nEk4["k(_`\,%!rpZT:Y#P(kC?>&CK'78h"&>`6S\'p @%dW!n\n^#o7uI);Gct_SSVsi;)]-H?[/f7q\R?R+@Q47^U+ATOokQ^?<5XkWbH]` gO.N#?=]?9>@kbbF\oKH6$Ks9NO5pT73X-mKQ+1GC5]<#B@,p$iYhc:Z&;o2:uhb/n&R8H13iMWM>bY4*.lATaEA)(mZ eJW"4A+X#rP)GUt`/D5P7m"W4FF]\J18&)K\p6jP05fgiX^toSP7W@+X@F^uaR^:J ?9Q9,.0\Wh2&*NSmT%_a.V;5jMQ#0((F7LH1t:-mN1*jG'/O9sGO#DW3lRrBaB%Kb U\(+4WOpoi`O4(27W;hk5IKaH!<0/,`]&=pS"?$"n*HKa''4W3gm3BZNp[PBrr`9q +QlJD`Hh-cG>+?)p#dLu^L*-*rr8P?GC_PjOaU]?m&c,%pFe3qI8SdLM03QlGPX)h e3rEOaf;g'nP4JT*;m1>lOunRe]KZi(F@sdan[g%$f+?[n_Ra8(D,3eBd\'u;tnO8 &$<1!/N7j[ZYP`ilgf$'HT?6m0JTL;#.1BG0;tLPuB*\$]0$;R04rL0sUGaZicSW*fYE&'=^L!$FKA^`W)R7e96O"SN`.8aQ.] (A^7?3n_i*5u>B(X1/00Ue[:8<[.bf2`\(#/4OF6hn^kL[^AMGnHSh8H)pI(KB0:hc,4$.TgD6$bgkDma@gE>6s^6$-=;BeMJ;1f=hIJ ?S$F.R,>o1Tq1oo8_K"W_*M5C6$_S8MOIVrormYMh_;GYZUfuSr[?q@nFpVD;-u0: B-7%-J\8c"!9sC2m6TIPIo)j=K0CWtlONE26c-PcidY=@(AL*"n0aYh_#G'pr5\aX ]F'0)K"DuuEco'oR8XP]((_:6"f10i!<:?/YUa#,SZ0QBg65#(LY1LRD?Tq`pr@0U M7QBn2A<,a7dK'-\qn*Zkc+*`";90mX@M8:N`7'2+SChJK6XI,Lm r7CC` -WciPgV,\hs7a14pY9HRk;&2"+WK>5/ZdVPk>g\X'n9TA?blL;rK?4XPh\3VJI@t] &FV:Bc2dktF5Qi,W"8J!\.IIV$h0dgIL#WY+84*eNmF(UQRbh&3taSuf`)tepBk\H 9).i!LGfLob7sFfW4q:]$N\'CD8XkXqYI)_)LT=&fDPC%gSjr.^U`=6ERuqYj'?mL >e]Z05`I!93]6iVO(PZrR(3%>eEWgmdf&Yt3l)h>+ARBf4NcN8n@t5l!o8[&Io@*T [$JV=O%isAQID@%oW;Y('S1f7FpSmoP>Rij.OkIp,V4ubnc,!i@*]4Ped1b"*XR\u 87FE;N)gKt+)M?bYQK^W9YZ/o:pNCVK&5TR&UYG2+!?N>gnNVMkqqe\=qV3B&Q6RjG TqM0Vm`,9K$\.7dHeuce>6#`>O08lHVl*&#F;u"o2>gf"C49f6J(^_]mPg=32Cdk( cV3h86[,KU5>cKKWNNWsfl0ngodYWE&cY;X^R5%qPlHn?n=j1_P-X(Y7Fa\(boog! @:SV#Mte.)+9'rgK4AX/*qeGM;M%qq`5.8?ciPUVKbWS[r+CYnIGBD]r5TS'_S;:k T,B$1]9;c)HMi'fpW"b1A(?tH!.W?dTBO3Y4(s-D+'S`0!5SX6c8p?E$NsHp/m4<* )aP)6EujBB-iQL.cR%k_Z!)[-3XW`pTDFYY2W1`]fm*_u\J?F5Uo,+&<5"<&d$5Gi a,Pg`B#@Jb!@QlV.Cub-7RC*?IY9.-)5)Vt"_%L%1;o.VfOu=?OGcS+q\eW@)mCE* dNJA+>mp]s*g)#/@hU%Pk4`R_]hi7=WK?`-8nq2J#fps'A9c$d,S:-qu \Ik2p'Csu.l]-g=&%Y:+Y3@G*s0d@bh*+X(InoP$Uu_,9c*o3lDa(%ASh#\J>+1$? s**/skT]aXg>j]-pX>jCi;[?,44j8*-d(&5ARF=YG)mHN]EaqR_ft2r4d*<>]\3W H5:[/./\S`?2i]q"F:\K#Jouk0;:Da/+Xm0'-7)>=FQ?<^6cD7nDD@CSr.r=;AF/[ #go&aBsC<#KtrbDPl*N'^JdT,g#^/G83%Eh?]\>a!r3OD(#Z"f-P8uRBT3!r^`NNT Kk"TUUmQ`G:bk=%Hd)M_M?>?9.F-k6JmHUb#%60>J[NO%4Vu)bLD8POk=e);Uuo!rR'5 %iG'B"4+0+(EUm"5NRA4^cr.X\!:H7X@NL&!%gNh+rn?"<\mP"::M0uIFG@]\%Q`f\#2>;W)n1.Gt+'ct?+T)JHe:b(#V<>+A[GT`JYjMj\)W-K:;X(g;[3RX`%=rO'?29 m>>AkIn_@1nmeEhc.&tg*d7_2fGsu&^n2/CX#El+(Z`IIJK8"R?hg790KYh%"[GMl !WKu,p'1:T5s]Fb*:nY.dl>e+2UWh)n:,ITEb\-kE_&mn5JIO*JeA(T^EA%h[Xc"O .Z(k;#l[5O:m5hpj3CH5Y/('t86mcK)tqfIq"Hk$s*TTeB/O_SHF?\oe>as$%8!HM d;+ZV!mHC.Mm:?3.WLnMh%gXED^c#qMo-$&e4kgGaDh_Bi<9Ts-N%PI>n"uc-pr%H '<\XNP6_!j73+5CJ(R3s>"FbNIE#a"Tua!!2l!)2!U,mlfqk?,ljpOk#2@75J"VUT 4,ogIMPla+D'SjFka0.!3k.FCL/*RpAGiO!P>nk%.XnR)I`;?LUX"RKM*&>kA`3T' ?t(K;&,]dY:TXAhJH'EQR8)!9n:/nE[HX%]ribNJ+Um*e8aX :p=pbgcQKh3>lNo*>?+(D9"[N&YBAfc@jo$.dZP& #!D9;Xioo-Lm/opB*Q<`:G_gEqu$'GIBWn5n8GB\eQ!=Bc4BDO=c)'t1-`A2V3lct 8_jN3Q!tF@H[_XYJh!-Yr^?PE@.FP^AK_^/'\q_ue6E3pi?.Y5kC:^*C]Tq'qt#;2 bm+UVrY&omd/#EL;FQPB#2j"MGAI9k_[?=^07!-WaX?3Z`"E"Mr^.:U5Aqso+iFRN #r!9+%J\'$NoI/1NO[u@YP!t5Wa@gjce6GN5RB^"p,RZF^V:,kiSR7drRC>.;jTYF Xo+0dm00]U#f$S[^Q7trIs'j= \K7gNV%"Ia_8H&o+/*5feKA::QX>@dHW$fLg mC.Te02dB$!.QP9!BpE;,_H'pZ0M;kn@ok4s$WI^pn&@2!Uq?mJta9Z6f!`S>n*HX >^_2'?)^H?IsBYms5"0hnk1h>]93W=s%KdHKA^+#%+R`JFV+NQra'rJb:7Iub:Ek# 8]N`&QoYsVX/,%1,e^&hWW86c`*t9;Qq0t.fjuA>blI7mOL6?CVaMORgS90_`9u!> QN9FJXkc\?b(PZlF)^.tDT#BR$JS23'*IA0^F;s-"Fof9VtucZ?0"m!3u,_0Gq$f^ 3pIG#o<]N^2&G#:9'f9KKM!49`U9$)E.NOq&sb4]&p@O&91T4(.5.[[7[2\e]]h4f H8U0AIe)WEHsnbrrK"S6Bu/DE'!es'u&c0jIj;O/!lK cC$!-eN*#\YbhNe4m&\-8s?egVi3g3s>T8eRO^1EW7-DJ)L>omh4WpH#geZEE@K%Zt#_V kdu\KWePGo#8V3hB3*F(NEQ#j`.+^%L`7T]',TGsdEk`i!hfH%r(l-8PCGV/mrdDj :X+O+M4R:qpM>"["b27E5b8)0r2`=)[b,V6lJRj9daDp!<4ipnQU?d1F@DUN$';K'jf`*9<]"u%Z1YU !-SAon:D6JgQ8H>>ug7Dj1io,%bbVo2Zo%T$PFgq,J:0M=[B`0 !>[El>QX]1]ft:Z$,?c9mk4^Q]^Ps#"k43g+S]:Sr#b;A@K)l;O?rk9,leV\K45BE "A\TuNV9%R]S:d%#.o[X+B-auB*%K)m<*l.s0[:.]&$-Z?Ltp_aT#WK[Ae+^1/sSG e;&Hp!EY94?L9QWm)Cf]^U9o@f,h:>>Rr e\mJj%Y23+6c49Oa@+sY?IM[+eP$\PInr94g,70k'DN+6s+027,^eDILD""H4V+s9 L377UE.(`1'o_(%lN[9Y45Td[_4,XsF3Dk.Ac(Poq>+CG34^ukN[@;LmlYR6A,\\! '.oluX[hncO#t_L\"30.^!+?*k/M.Vq?)4"/8DSNfG4e8+f![9kff/l:,^4O/CG_t KT,^;hdR'A"e>_1r)\tF*[TL7`+/fZq%>`f$QiqcP^=!!]"E+K0dPH?oBj^a/O(d%n3p^N$ZiU2B 4,qd)>t&Lhrt-tAe4'tU:q\FpG8"[4s%@A'#K"4^D>5[0nn!LZIY!79EEA8qkC7m*0@i>ddkUZHHcIiFURX[6 #K)$N_B"YU0`OY;m,8MNcV<]1*:(ta(7)TMB_kMKeM"$%4TBF#0CU'sj3,3IB])*G aa[&iokR4l+5Em6&1.K;ZHl9g>H'4_%J/JS,+5:+o)nKKf=i`6H3O's.=YK(Gu.@\ :fDE@Yck*Q)5OGtW3:\Rf6GB`r#16::BKuOg(@ZDCL\uY-[iP)?oUu-S OL-.s"XaQ/:Cca%!#,L*FT^=NJcuk0ha;5TmmYD&%3U9&9jPl\c?MK#'<+c_)cEBL A?[NFCBurd]_5O+dqbrVbs/V8^'V\3Djo!*YG^)UD?bG6jaf&5og\:!#Z;^ I%QphL;6>.mWLA,,pkW@V9[X)OB#7jCFutO(Rl@:c&H7T,Loah2:bXKp%a`VXsOL' YD'do`/M3n)&)V91/:BVN604gg-qVOds#9YCdc<@VG5k$No&R`TaT&Pgs_A\n(Ops (Mj`M^MDEd/%SB@s*-6^ZME4UlFTX0kHhHIDT]`hME:h6+8Gj^\b":ubU94SYLt9G s%h-lpatOe=/Gk*m#r7MK9t48Q['gkIl&gc,^&+&kKTd9_&)`n4VI[YdWpDlJ"u#@ [J!7;("]lfdp$L,rp0_?>++3p:I5A,=#UF$Y\BKXcq]08q#gO:>&HGVcY`!g+oh#b Ac^r-s+c.o&7?K04g9@bG^[h!EM&V'HIm6Zr+dg-o8[b_VLj2*hJgkAI=:lQ:U16A3Y_,(3%G\IUK9\9unJMmgJ#>Z\jXT`lk(harX/hMmFYfFbn)#dp96MpI,(TXTMN&@fMiTD4Weptmjn BH"68oN:Ci9Jm]>s%,3]lHfV4I8+6j,H9#k!Xldo^ZPHcT42(p&\oJ7J)N-?^S2)* ?W!#B5F/1S<%k*krlaOa-.APs\hm+=^X'^h)`[p4(DJ^t65BS-/-)mrZgcu*ZM5L= 3ugR05:GhG-ho@5nDDRlKGO,C^VG>.[M%cdpeTcTs$,I,khks'1DE.RTAc[L(Z5;k 7q3O5"[n%W+DX(Xo&=H89&<7<^hj2HsG-B6rA/1>($\O&!Br+XJe/_nCQ22daoO,jKCXYW.3LI E(JmYMQu8cZfigoq.!>>4*;g8T'S@u4;KE69@-+cqH.a]s!Y'$`p\oqHK.=gIpCVH c1A\#Lh77[r-QW'q,ID)k5WmC+O>Q4XNLNUm6IrXjo;LW;n]K#rGmGgR3BP=_oao. jCa3Y80c8U6ZReY872HC>tm\sq?$\D40&/*KshM\mF)I4mmLfGHdg5&*R0E?0r.L= Z%IRV,1%%q2MIY1ITsM+>i@G=3:oOqF4R(V'NF>7@^#l*IVr%SkZmJLVe$L1#YT`"T-QHI.OEA>#V97Ol2F_U[RWHY'$@l15V EG\E7Z/n6g3KY;&gZBB0rP8GU_t977(>efW+"\%nV`/bM2[na4`pkYX1dlP0Fg?3' _Z)4\V,c">VJR67s!,k,[UWpu3HHj$CH]&/i0]lfO3O[X/1<1,eQt\^U7G,)^dh/g H57P)JH&8M/A4>K]c8qS#S$(%sQ"9h)T_97[$X&_SY/ )rr7`R\iFAadM?DR#:0*UVi@73?#/SL&"MH!7JXQ+2)@7`;s'Apa&'TCnQR2D.<-n Oh"9SY^qL.^ja/=9pjR)7",V,!,gh.m:BQU@?7=\cW;t8W#5rm%>TN7N@3c2B+h=b -JQghLu6unAO:3\u N5$Aai.S]Wo,h6aB!0DC.PkgJ8l:n9E1dmS\'dVqZp5:YYQ0QiE9=4p.K:"XbE&V* `tX-#1>u*g^V'-IXK"f$(9eVS;>tJYBuLd=P\sJTlmel"c#RT&*ZahireIWRYZ2OG #n-7[c[R);1]1%:pn4P`+#F$O^\Ab4&]^gVp_W]IBO_67oY=E)'?hilGq\ZZJ3W)O n3:gl;;Q8N3tu7W7cLMs3"&?/ILd;gJ>D=H[/IbPNPBX94`:uV]Nb.#^X2lZrZcXF TaMsMTn%Y8E_Ub4"34+-Ko.!q6FFELFlh/(sBa&c?8gJt,f- f,6(@q"H')n-;5o!4>'n"S"]Hn/kj7h@$]_s#C=bbK90Aqu6g__=GC'2L?&@]K]VRF8S;jsf_Q=ipQ=QXGmV<9DRKKufYGmE;It_04@Fb]YC&nU!!6P># Nb?hGmnGRQ-aL$lB'Ye2l[hp)_c=mnnn7VD17Y:gbG gt#h=[p38t?+a_g]48C_iLF/^NScU!KqI/):YkWt=Ei!is!OULh,&N@;uOt"pqr/l fs_Fr4uj\aJs?5(g^3oYL,1kfpXes#^Kt4s#9#r/ZLJ[2I(mqs3NpDlb7AnFD\o[ &,]dV9`b94BJ81@?+d;NN8_N[SQrY@?ZR:HIm:=40RA()\pQ_f$`^#C]do0?Dsd8E hoT3>@"$qa?=t"X/M\g<^I_*Wb@j?KfnpR/dGtOas($44"#]Vq`[s"Q'Vs%GhkM_g f>/U/Q\Mm2b(,(1`8NmV:esP>M!a^S'K+hO*RBVY4r:F69'+BI,P#L7gmk^PgF_X^ QM:8,#D:P,s,fjia_9/&(ukR".1u(Lh5h&cpg;V2i+MD(JH%h4o.g8,N-r#3Mo'sPk79:7M'.,Gf)Nlmq)hseIYRmuRid4]A^>o9[JsZPq4h0aZJTUX?q'nK@gDdqg5Vq0 D2DD8>VA:8DL,#`qe@2L[BHUq%]el$;:iM`i?+G*C4+!"^\?1KWj)`0r'L/`pnN6I RUQ?t<5a8*g?p$Q184db^crk"jl1Z$=h24+HJ$W'?l^E*([,sZskp)3iS 7mQ%JM&7>jg7)f1nDBdQ_=6oP[<>#.fn_$i&pFJs$*Pc:C(31,rK]LJWQ(p@Ep+ui RS'mj\U[+Q%cr48$iK1<"ZUTDi4iJlaMKFJ@qDDJ^rh8!O!Z)S(g(HhYaIuMT+Nc_ r!'$*9D<.6L_XY1MBu##OgG"R?$+";3p(*+Z+#s$M0gO"FVIb;h,I$%eH#;9/EOhd 5nTf"CIP5)JmtjVg?WFt"uL/=e&ET?*:O#HlnHoj&opZ"TCdf^MCB7(4WIuhfl_sdu>GFe9hPt+8Gjf\c4F+FBnV'H-Y=aN1LR$l'&:U qd-]2s5/:]rHW,D!j1c<@i5!Uddf!ZJ'0s`j$juI^i$UI1L$a@*Rif@BbkJa4hdd7 a8EtX!:YKm0X5C\bIEZ6+8BaUs1o*$F(Zb*:PccuV7j6RR=P3bcT/V9]sQdd>kQG! FAL_s>eOhg>LB4ri=.o`a"uT@r!.`ph:j`gHL%c,&>UcjJ`hHrn!sD>/VsGAl.pa?ol.f5 I@`ZrDr>@Kl)H(n\g^Y:S>C*K,Q8(m=u8j7I*Y0aGc1 l7h=C=n6lT"U+`rLV;do^5>>RU[[0\6f\K[22t+fcF5!gCM-1Zl(_$f_'pX1;+,a6,ZWP(oWp]pA" iJjKpb("rV]npWV5DTiP,QBt,&,B@\!S0f'Fej_4,b/r.cQ9;h47m6hdVo'.^Mm6R e6;DV"8<>u`$<(fk"kp-?d+"*mN8IOJ#]^PKiRc9;jH_!AN1-%R/^?8\ltW$j<[H6 %gX]ZnOgQQ_d?Z_:KkJ>;ZJ?&;C%fbaD(W\Vb%"LQ7 \QXk"_S;N,Yqu;1gIR!j0peTgtT8\J.h&WKZ $s0nCh^M ]bFV"8]lXGU.N<.):W$sX<7#j#Q.(:\>`4\Rt!-%VlI:_e=;0FS:`jtZ9CK?QVZ$F Aa)gnop%@D28`P>0\%n[ok`R$Vh*uJ9_\'4K=/ppd\[rm?(8FikE^g=fDSG(STW>u ;pk6/I!/"7[4]#'UKr+]>^iigpJc/P>QD%V\?_lZ!;p3d:I>'&nGFFLmg3%p1;utaJ7GpCl+7$DS &b%HM$]tBq..?UQ(Ppn:O3l/omIL50CV]rjochlhIt?`EX?W!-H_t0(ZEJ.L*c>X- Su"V&7kMQ*!CFr:J,!ADSDOR7&/ a4U,9.%mLB&Bon?8R1bQM8MQNA];U-MSgMk/HPn,3<)&lS8K8^L]8Mn)=W.*?Q"Y! ad,C%s1n[)2El_BHh4d+U^Ib[liQ?SlELp4?I1MMD?^LD+oe5=!9T4mdZ5qBg_T4g2Tl5\fSVh71:p'T\Gk_f\R1T?Ps#YjYKF59l8=fbX:2aIN41EJRN]:2/ :0*j:M-U*4TZrGIJ!lrfW)sKh*KHXB-b%-%f^CI8%bH`J2&tl=*UW!]kS'NR(S;U2 R3.[o_m6VDMQt(AP9]WsUC,B4@JP`\ajFGRBNOe%Hc&*Q9lE[M=0SJ^<8&!W:LT& rk%65i4hu[YmJc0EV-ah?Lt9d;ad?m8`45l#kC@R#:]5mA_^6&-UjVr.aLgjE77e^ n2bk+3/%Ab"B-m01daD4l;LJ!$PhTZl-AF5:GXe)f5OI;\SaD,g3WXmiU4:!@T>Vb =EeC\IdN!UbcYPu:I"SI4nhWqB1kD$Xdqa68.A4Qeb@\jZO\Q>D`(eUCqP!;Vu(/= pED&2/fbY;8aF'VHZZ%Fl=/G#/(DE$Peh)!cjZcN2J;4X\,U]Mqc(.:j=>B-YCoDE 9rF.+=#,1_.?WADhXucrkPWG-`P&bCQ.P/R020RQ5TI],pU^$)CGoMa*cQ*QhOH0:\Cb-`oT_%`@'sH*R4OQWqgcc'D)gmRb(j`*kX5bs5(Kd Qc+MaIhd;)=5isVhL""nNB,V(*hgV\?`n/eko.[T7^W2#h*aPg+@2l"8A`gi9`h@'qGCWUOlbACdM)H,2n/.p>b5SpMMkAUS2q?<0/ca0F[/Y5s:bM',9#K fN>q:6L9LLWSPAT0X"e*b^RnpR6O#uWe>,t.f 'gqiG+\gpG,-P(jl&k%K$CP`n>"`@K\:GQsVu#^-?6]D2.^SL'M#WbrZF6-Fm'e*+ bY8l7-A)I-o29gYah33>eGMVn:M[+(Bs((if;A-)dj7_V1*.>.Y7bD^V$t&-@8JY; .L(:\X;[s1bHgHd+GW/$C#HL[\H-2H!*t`(->n`%%g3XZ1$?$7$uRM%m7n5\nI^K4iL_tESu1C"ha=(A,*rKEAeHm2)I+^Nee)< 57l';ciS6L"T\Hf>Tj'/8D_b&I(0Z@EdE,d4kB7K6P4nPa5rT9s+@!7L!S 02UgUphTL#5[3`5ZC4#,2LfV0lmMS#jjZcqY8'@u:Qj;r#QBW2d6%X:s2kH7Wp`31 l?tpEO?+`d,NcbP.65P##mp4\W6MagBFY^#D56uu9]/.N58)'9#Pl]&nt1Fs&t8ju !WP5(\(KBLs'ALK5bKu q.0-9:_O`ADlCn`rhC,q/)F(B!rc[;:_mT_o?mX63o 5*O8qWiMFpY:&!B10on3:i4m!]m<.1Y[s2HBj>n_\G\r^]rA]O.\D)4^@4f[Z)>@O Xa@9$SUE&[g/?aUWkGaXaU/E@:`Y^msF0M9?l0(h=nKgr;kOoQCZ?'&`G^T!5l]WSq,a9?J)7d9gXaWOd+T5pWGnULl7%-k-L`)f*/6dF _l%7'=aC[KKnUkJ#d^X")XuW-J_qo1=Moi"0t9=Ts3d$/e@9lu,Y\4$I>n)Q4Y70D "TBVR5Z>Di/51L4pjrH^L7C/3*<)IG92;ZB(\lnV.NJ'p&,Ssh!p)Z-s&`J-[X\`+ bniG9+Q,I"G(C0`J4E]Amp)eOb(!dYa8B!RoZOe\s)'P1o=q[>=[8MWY%gS!s5m5- n)HXI0GSg2rrN,"`AF]]L+GS]LMr\OblA,BKR\s\;%!Yu\C^k5rrE'7@t'>rQj'1D NI@"3E:_,n8,RQEr'u0aK'.*\`./B?hcV.gnNKjQ[K$kJ>;(9[[NhW.XhFSPl4!WqFA,[ J"eIh#tSG"a3+8)oXqB/Z3,+G>EpId/6sJm<\tk^eF!GOGLHh^^OH8JGlgSk'r($]- ,TH%orjV-[./Y#En4/<7^>ct:j[`&#BR:uds7'D=Z@G4I."VE@nK[=?7lB=^[:`"Z Vh^N*97W&6r^\>$IK]]=:jI8hZ7CHKqmQe9q5`B@q6=!FptMi'r#tuJr]>76G"nB! ?#!B*@LFk=MQm=%'nlj;JO.F983%gN^Ia;d5\LIk&E^`[i'5$7V$?]b_`uHHR/[/9 ]TFkes%Hl'%,"`Y!d*b/8@lqPi4k$!-B1upM5pVf5s"KWQN/.B:9l]8"b'G3Vh##% =_Q!boT^+h("li_AZg_\dmWg\D_RK8%FDOO\jhgV_u8,Tj"s#E+CDd%$,.]/\d"^T8iDJ+rZng(b9EYniL^/K-^$[tn(@01(d<(9 6lQ\]!jU_o+*\CD!!sM+=STsR9`C-)6&67;g``T?`/+jZr6:W,\H%+!rWethK:]qg ?h"C6rXXc6!WFHMC(g?'/V)bDd\V,9U(WID6A/-:!:P:Pjo;[dVUOCVPO?$Bp?Elg M@j@_OM5s9R1K4Nn;mD&cDO1$l#H_"C8c@`!;#)9I&,0PItI]0D@5Mj54> D'*(q3j1<(=.R@39*>/$)bCY`=XhS7r7=KFFYZ#=J!9_!q!U+\rMD[gL4:EI!WEZ0 ;=`<=r&N00s0WP@uH^@6r.l/MZsg&.85ku2rHB=@Y4 X`Ziaf7Q9921KA$ln`\$/'W5>!SGs*^[fQ^%DfJj4S.u&DW%pjA $@mW5q4fO$nm>C+;&4f.MB\7s&BcKFq[!0(s03.8m?mpR./^asVH4FbJ6tb>&JdXu lctO^ho:<b>t]apXf$d$?R*/%mobc[Ij1K;'\n!a\c"oW]>:+c ,eUgc=l*#ZXYo!AD45l&SUW3*Z_j*rPMVb/^,02;I^A"a1Z?8?@GaVQnN87>J_YQ8 X7ZgrF,Di&0CRs1pZ,'BO_`I_$$-&6A(RI4gt8XkS)5Ie(dip"$MG9"Xq#Zi!G'!;m(;J2[K+T3"h$+Bh%F <@n=EpI'4LRV1JJk2CcqEUoZLAP[`(:GB?)^N$/tm#bsr>;hE5KmL5bfJ]=ZB&RSg o".]j$P-cHo=Sk.ZJ3^$GFhF)f:$W[2U9,<*NG^?QAt>R4+H\Oq2<&>YCfX-[6ApM \pm#t'l9m*2kbq2D)4W89SMQ2jY8W?\lM'PLpE!Q1>;+?,25N="T4Z_.0DMV'&emt pf_uq!;Jg.$4(M\r3^Vdoa/pm&f!=Q_aYuO`PfXSD`?j2i\pl;:(*uCRLA0]iU@BU +7^0Js$m0fUS4t]rWE)E7Ul:V1n8K&!aTV\\s-S'QeO_S#Pc@A_MJ5%JO\St.8Tn6 BC.EXeRT(=7g##cR/E_`r(&47$iEIr0rMI%uC8]7/oJ)QN)g(c[5Wnr"JiY DU+CO.11('7RDn.O*4m2RK!Qmc1qA>&CLDi0bltK%ib'^r$2!;F5OlBb)X@]_S<^S #)+jZEe+5)%C7'O?\:8Bg8i>_s,#M01&R.>q#A\BL0O4's$=.,oMPTPgm3F8`dc?+ KK0mHo`Za,*`AmlXj*$YU>I'@IcjXY'i9;_*MY_t*Qo$P^#\iT7J2F\2iMrp6YH6K^W^!.o:-t"i 8P)BSVEmR,lfeu[>o&aH`q$ao5u176(Vq3b+2bk+0hL:O82![WK6ZN=H=$/I_9"r$30'oPlDlA53@@M!oOMXH3C_]6u;Ft,UPWT [Kk/H?BFshntS^g_QInfJ%l^)_]Qr1MM;'C+FbC1M>RVR'?VWZO8+d)5B8+5^J,;e +@XBPr];:p,PX&L#6HXZ,7BSXH)+EK385U$c[Sk\VQ#SdW$]22!PecZdc6N(M&$Ye !3'rG_#/uVOfT["=e#tN!>]&m-&/I%B'A0FW^_&CM0VB496F:.Z?W`GG?]=QZ"2j^ i:[i#bZaV_#PGQ,q(kfWpE#1[_YnN2oHW>.a7?j3W]P!ZRkl?^h;GG]#V%?Fh1\PDs0"R]h`3U1$auLB ]i6ZORNAO[Dr9_`?Z*Nb_4TMJc>O#%2gDej`NqXpq_(XDn*F8nEUCG\n%AbW\D3"[ 5G2Loo&Hk_[K$lM+aQ=3nAg&$/63g+,0aWF.qa&reAnY \l5c#'99)ff()[:acO5U5at!:iq=l^]eXc$s/f!pUAt6*s&&C.#bTNJro;*2ms"aE bJ*nS%"LRW-6;\beQdnDC+c0Zd3$Oqa2>OJ6I(]\rk#J?%iF+C3`TUi/lFdPW?h)O'e<hAhl_#k\ n:*^VGYl:Rd>Q@]?Y0JpUn_'$$mPVU]lnS7SO:WRcYX'N@mp[u\%6WH/M9eV,6nMa KmqqWJWQK8rok"8/^Aj1s'6`9s)=mo8='l=i+OdL!6kJl_fA$@fb$(qJ,HO:i4i^u YT@+23?X*d!WW&OlXTjr,)/4EUEL/(r+.$!;UA8NnFp).]]Lu$r8iHWh"JeX\#G;Q as*=Ld&'(ha"kd.A)^[R3/IJfG)Z?8/->f%JA5=1F;+THWIKU$IKeO4('#Y2K]3\D n,tF%!Osl5dZA%?c&,^*?3n>!TSckPHu\-]!.lC5^.6V!1dPDEP--@\0GL:i"*Jmd \rm135TEFZM'"%M<7/VF($"ti7K.!DiFCirRc)n9e[>5LCFf=P/'U!gW\3,2\.73e Z09JfChcspAYNT-DTSk*r**Crl0Cb?4irF5P(,SEHni831::nT4`[aaeD9,h>Ihd- BD('(l9XUMj:C-!*#M;SFFGh1rCT+u5]Sd3I.Es+@S5Q^HJ8jFE4tn\G4Vgfrm[NK iK`iiCVr3Ks.sH:=M6;Sg#Ppnj%XGN9g>boYu,o=BuRL9jr(CU-Ol:*eQ:`#&HhfHQ;B,1Z<]q>am!\'bG/Hl$&%(+U<7,/&/+9T#CiVO7Q3@A9]06G,gThY[g+FlZ^i1J)?J3W6gW#YS^4Br3j 5LWe'n@oHTY.YnJs2'O,JG;q<#k5S7r,6ERpl>Y!`rZPGVqn`\s'rKp,F1+'Im_&& /e@_ATZdT=GDR1X!_*7kWP=Mo9&ee_ps;V?d,YF?@@A=QmD"5Ur!3!)C,5khJqa\a ^P)WYs,d8'nnc!k#5gDq(dD7,p*K2mBL3%FO[@!l0+S#DquQeqm4ZV=\,?@,&H2_$ [OOn>s$YT`2h/o9s,#KZim7PBG5b!sBE:K9s-ET!Qj"&D"V$0r,H^e1_gc;Bk\s&. 86>4u-YKZSh&g)![a9@&e4sp_]:7=4aoFjMUfMh3M_.).bm9\7rPfPd+j6e0o]etb >o)qeW_CJ2f*Dkdq1hq^K,WSi/O)f78EZfdpo-_(P+al>">53V5hg5`.KX_p+X6ho pfiss#ldpMP6h1K5"?+!s'4JHR^>`oC4WT:2sAC-"s%bO2HC*S"bm_rYsCYM80[s@ oN#fe#[F%?LsCM:FQF27s6ARo#2oMp#9R.MUjB6F-inkfVh^M(s5sC]M#Rb["TPm- "r6X!iU1<0s"se+,5bMMp_0(1/7:.$gIcnF&qIa;<9cB-\.*"%I48PGjNs3E!<*Q) $2>IPn3%tUbYA6Jck^8m8hsCX=fR>f F[`=-1/1\5%#uHj.'f+LGF(1WWsR#"+'TLc?B\]bWk'laEH\>Gr&Xl#@cdAOl1rl@ aUS7A.duM?dtO9:"7m6TT8=qf.;iEC*:-EUT?6Sn,m?%'B/k\09?62BMTdf)lk HBNJJIK,"An[7MqY3bRdhUJ=?8I5-RrrN*\%9%VdkoISKpr/GoM.]PH0>t29I9:Rd M/_aBi7;Mrb^@C;4l+8H@W"gorPl/8b4FPfHYH,5o0P2+CZG9"IViB)\0ef]Yjp:S hXk.G_`*J7kDD?jZFR3q+6Ym6o]UZ9:f,^n9P7I)g[MrZM@o#Vn0>YQ_rarqH]UO80kB J,Et*G2*-C8-o33egU>UD)kn?8TUP2#8_N3>^;u.GQ*]5E5Z+23*:JP"T0o7(+qfh XuOs0H+LBj/-%LBW?#oX6]*^*+=mN)^nirbMigKUL"6G2s-C[p;#OOHr>AtuBhuuF =4M:\`DKjm@8"^NA'qM5Io(dUs$+a-FPQm>plC;52#OHenNRWbJnbo!IhKO=nXl-s 'p.N$W_u1&"'FR\#@[TZQ2k59(\GEK0]n&tTRn9eIm3s`Y7qF:F:23DppM::GV>Lg JRfp7XX85g"7<.q0`RgR0\91kBeP&pOT])3Lp\ZDsO82#i aX+k+%CEJ==rH.im*5U-e">ITUOq45fkhdFX,@t'B*GB4OI7"@P!/Y8O.Ml_J%[gE -VDeoPP)d,/>E3e7**GF2Xln%c%gC8#IO^7OTdQ_JkA>H98;qSP%RotBS`09f)5'l 3=5WH[eRD8E:n6+r;DWqT:Lt]*Es@_dGs/eps[DQf`o?$:]#S<+)7dqr'qOL,m57U &KgJ*`qZ_W5X!Em+7UFU5`G_D)92g;+,Ph+!0*^FJ3Qg.ILRg+ @:BBQN$,',"QX[>N96C%4^s:Q7!8kb:-P(*,o3$RQ"U2#:^^sZdot/+=dFY=Sh@2haX^8s2&V/>FAFWh]9IfVb!!icSJR>_ 2iM#m*F3=sIk&)+TPAkZA8Jr.i_f??(qj7aQgK.)jk72?"J2MA[QV+lb[!9gO@++HpA/=5IO@7 N?#Ho)4mPr//95\C:q!oS(Nk[I]Zn#@pI_d0>(-+^X4Zd$Tsd%4lt#&P0Ui#hq;e6 q-GuZ>&s@ko^4Noo],'?E.QVuq-EM2]RI+7R9=I2r7YP^A5EM0$8\>`)H@$[XS4XFnL`:iJ$U76`8t% -1@3]V9bO_VBlIH=`.BJAkbH$,br"J%]TK)tFLus67YS70"+.`+-PU6P4(T.Rq#C_7( )#hB5"Fji)#p^_iY7OXho,mZ*ksj4D,lm)Ba,g[d>CbUm%gqOkcn&!>f.5$qb0DS* n9=Dj:*'M>dP`i,l>7OVT36\UY,5<9W9CUTC:MRk(I5"E`7RkmJ4-+066GcJ,Z9F5 Fb(;rILQ8(8AStdiFmRe>epBuXutYB?q9WM4/]hFV_>pTBjl1?)2)*t+_GAKdI(L4 4LA.52Q4m:$s@:.A-$5rs"V\qNRD@A!:0ak;,h.I$HOD`"(;Rn])XSf63)M;+;I&` W2-(""E\aT!Nl8dq"FjHJc@>2s#dfC^^Djo]f$Xlcb^)m=J2<).;WT.\V1;F-K[hr 7o'.I3-b!uIgGRo.+0s-ei_C+)Z^b*.\L!fXB0G:?Zp0\Fa?Rf!qLu`7WfRIn-](B fEC[cnpbjV2;[iO6Ho-33/`EL;Fpd.F-53VkV`%./^dm^1^DrWL%%n-+5d[8/!uttraY^Je8(Ep/IN9%!;*%L!=C=?huZ)VG16\K <0rF+&5\545U[aJ,Loah-?b'*@Z/+f\-g"e!;qo(:.K`^!do/43^H,6!\TQY.nZ*B V4nX1bL4?ULZF^Lo!0N?:m@'C"jCpWh-d5H6;u3alMc\frC_`8lhh]C-"iPp/o9$C >Aq"]Y^K>jnP6pjL!!??Q+*?#VU'=p]+8%?BDPDdI,i^W-in4,8!g80ba+j6ar7u^ l+K[SSRhBLaQYn3$MC25JH+H_8.H`iSL)sMmamJqg*^Qr>M7i5V;kA;D`ha$gl]k` s*#3a0=5E\"MfL_Z+-o@I&X^W7X>$!kh\tKls&/u>Lh`)r8+mKp826W$%E$EG89jY l'?L8MiVDXf*.N()oahe1L$m4=8M`0rTou%l@J*[6M%a)g%;I"CV,=Vc]-,/j`g.E T>+`WG#p[#>(6L>o^9Fo`!P),51kh%>ZODYi_XYTO%QP8cKV4eZdJs!S%#P\i!%ia1FOGVY"@CKE]+uW2S "cS!"2pm_Gkhp9eigrr9s3W&id:-7c$38eh'1-'#)#WFlO61q)?G?k^cr2Xb.g#^2 #"lZ40`U/K!;o(9=q)6d3a@O;+1$L/MimiQq8e=I'"NJD8hJi.';C4Q=u%j_1\ A+n?Gjs#?U@:R-05&Wu]4.sk:PiiIrfR4AJ_1,VngAa`]C!9?5^V),G;O.@Q2\r=N r]ckO:m`FY:)0OTTBV13($P^J;/I)a+2U6Kp'"$A'WEKR-:ScDP#=.-Cb6R@Q&YTX d5$:QfE1(1GO%73T90NPlF:^@a/e?KQ+6mE[j23LPp;7)hqgc-o,&%m!St\CI]B@S %9/!"@gsaCOS:<5ViE/.nE]kJYE/>TjHoZ>k9f=f>9R%S&89;j%7ftT,AloF5MUfH dL#_6J$:/9TUcJUDp.O+E4T9+?""LRHWtQ;>B5)-S??6p]8mj"cp=c?r-.E;s"0*b YQ1U'9X6LM1t=!L0hG9J/0IfY=dU,2!^M(9!('ka.8h< 2^JE4^S;(m&'5pOmkj)-r#N?MLT]"'.7!CS'KOZs5^p>>&;3o!+Tsa4./^V1U#^,j `;.`tZH3u;"jgN^L5T.:6pk/;Bg9E8U/E_M!_U%"T'_eSH_aWR*/lJ"3"lW>!fJ*, ,:l)e6det)pB?*Oi$pumPRbQ#An1UG24#Qr99Q*)8Z4m&+Gl"474"q-P'r5Y6W.lS dSs@pMPbu9.UdQ/WfK'K0+3*H.sgV@?!?:5gb6:J;L*Dup?Gi+V6uaBX4::<.kWF* ?@F)ffMp\>Pi"?[DEFHP#6(6m[/p<*E^qh`0/<_ads>qCpY;Qe?Y4GN@/)f^1r6Bj *FB1D%VRKA]LNLsNu]o\L&B7:]O*A$h/qgOrUc->mORCI8EkJi3@Fq%eG#TYkP$eD d%Z&*#tb1grbiMZYLR"fZ]Nf]M^CC%\)>M=(2lkWpP]WSW:)lH9Iu%(4OW*@<6W&* 4kqbEh,d?FnBTgj**qT3H=pR>1YpqH/8Qf6=,!!m7@0SR-[)>-cP6sK,tj;q&"b@R GBLB$\lrH`Ps=O/@^5N#-X/f"kPOt;C]@ht[tBF=6CLlW,1S-bYS%^Z'eq9Q#4ULn VZQm(_ukEIs!K^SJH);[s3Xnui.&ZL7XuuJOG/\C&a7-(s*M]qaH#j6.hVc:s%Y3/ J"Mo4r.k1lkPpZ`ajHF&'-X/"s24;JY-hlSV)iJp1$mNMlZf@S4BMdV5O5@2mAW)0 .Q_>t4(0X&Agrc2hiKpqb8Jg8LD1`dJ%q5u.q\dBs6c=,B2t8"P%6";L\u'=8_''$ `BM):^jepiR]n>;:nB#8bRi?9!rR'5(H#brpfV'T(;N/WIjmD#IjJ*mb"g1\M'W.` hk`\A02quK4HC8K$\/_@;/fbqN_@S#pu)[l2Y'`'o:L'R`uITfRL:jq&:. =1AM7k5tZFr2_e8^"#\mYqputlo>%4RLHD#X"k]#!#pJlQ4fNaRY%R?ZS:&X82:O9 E)R%<'0qNWKgWFSR;(-C'4gHU)CW&bbJE-Zn_]N8=1AKDpj6g.n-CSSRH6<$)9=uT $fVWpr3r%qXTg*b!ImGcLk1;@"1,8+"R,Onp@uh("R$AK"Z-^r2@dc"J<=a.iEkcr Ieg5L`UQ5O\,\F=q"8m(I'cC#d*^Lp>)PI,BX#7X`,@0u=c;;/\*LPID8&r4mnb5t iNE7,kCI(K58U6r7+hS;16,Y3CR9)JZ#)63!Im/!6RAX]JH%>BTLXH-T0HogR/be? !"L/01TY$$'a,<1=4"_dn;=G?63@U7$F:$TaL2]pU%'[IliPn@%!?iMZ8=pGP--2V abqsj!hb@hj;/GD/D8&sg5d3s03sf4iYSI!M@U#Np;oo;8W&[!V9+=H6dj[&8SO&3 O4M](S?e-EDsj$034i!OFhdk*C@/r/j0d./Wt-`,Y?"t8WP#c>GN4O-k*^\`8niKV Rf6EhlV(@;,,=0R]lTW(qQT,A>fF7sXJ(R%DTMjeEsHW&]8t@POb4#!J*U1KP9eoI /B?_%L(h]&o,6MTSC+nFZVMNPen]/?$gt]+0't)'0`5;BQ?SROn#VT,Rb$A0QX;6Y h^\&DY??/R;-u*anc"XR9qm!.>Bj_(J<$`j00_6DDX$V+)X"PGCKm784n\Ymj22&N XddQ_VeUe_kJ"DX^9p/[2*KU?/8iUJUF.)CBN+,tHKgiFl%sNPWH*%&d/,^FqTY/H ]u,?*1&+91h4IEMIW6t/om-;@VlfjmbUID_'YcKD.EZagZ>C5/?&J3f9hpCL2u8M$ dAOo'5=.D35gKoYE^Cl1Ir#.IG2N`%n07^8=P0#=Ym'#5q%Hd053@?-%/Yl*pl?ua L\s@X/-5aB$C)4'^]OK;r8Th.BKTN'3ZkLg(TJA]<1NV+SbA?Mr(f=G:Y:SdgPV"p $BCMF7uc;$II=XCaSQW&CTIl)@"@3Z?!+3Oc.?^hG^+.Wn: a8u&t,]'B7Kgp7T(q+%fV%GlIASS"Z+D')"OK-FBk(87#X3rWN6]R/]]# :1o*:o"U*FaFCZB1Wk2i3`nZ&"ldQq=U6[b&62!F"_'gZ(T/GOb=P_lEH]!djtP.J #jGB5FRb^UIj4f#r6Krg`;/jW1#5)I(jprDSqI1g?H$A>O,#82OZ6!s-Ln] /XKgOBt3h8Fmlm&cB[t'N[,M's"fl^nGauEH^a0u/6&7R_&^4Rh)!1:T?S;ZrZBF/ Kau0jh]i%Ab:oKa300oh:8GDFU]o,.60U?C(RpDJ]AgFU'r^9tJU^aDs+P(LV1/5e kEE@jFIq*UD#UPOl(&=,JYaCSgf*n4](?b?^n-#6Q"_-2^LLF'1,!M!k',X^YC+[i N12oo(#]+tIVN23Bo[[XPrJ\C^[T[Unm&Nl9XXFb^'qg7P#(PF-XN2gGBDFpUrV($ JR+o;hjc=s(MEJlJ)[f*,G..VM#V:#6lY,M!ImksP_0\Ys%t)Z*u'R>pT[mRN4:'4-@0E]kkW0O5+Oog J$1@57'qL8'D[,;h0!`#9l)%iU)t;!#5a`H\VMi.(P? ?eHl(kp^988Oj*&s-U2*i.&\4#Oih_EIe(AC=\1rG=\;]n72CjeWO4gR?#E`b^X\Z 3`lC=c_^^AQ_mBu;C1G(U@M8LAZDCa?!*^O:4PRor1KhZa>j)JAJDNr$@e.DrHnA/ e?W@&+MSg8&;-;3UcETQb9g]P"\]l-JWA/rbf6np>F21ec.(:*p!mS^k\__Pi?$($ "b.4t5-]_a%f\rUH6JFNE=I+-K;'-3:ld.-1t\+TD[7NW6h6:ns$ZX+[^&2)O^&1l EW10,R?7Hb!l?k,ha6uQZWqg>6VG;o\#W)&a9\$pn`+1HC+B_ZH &H8d7s.)W6_o.B$TCifrn^[*hqAd%B*Q0N0l36s@TVr#2R"=H0'0;9tL&\BC!c$,H >7Hh$R?#jS*S_-K;4"K!-W&>0Wp:&E%hM`+IiG\Di@`MkNs%#lBYX+/T7i:7M?8#7 X9%5iDhIQ:)6/Sh8m=D(+]f8/J$1.?q!U%Y?+O:QRU]:X+=VAK$Im'=aNo-mI0nXZ Ag'b'M`>=5@?iUM.-EAlTeAUL5*eX'AX/HFFr<%!91Ham?$o8E?^2Y]d.,a(%0)tQ 3j9F8Lt;fd9gSFH^//VH\-fJ1aS:.%C]R?9kc.3N!iX8g$Eq+,":S)e5f'IJEnm@-*Rf`T(0J1&FX_q@0T3IY+]o+NF.so!#H_sfIO$3*_RUpfuG\pc+p0mp1(\37r :_YRBhn;2PmI$+_ *tNb-h"AY"QLA_ep763l4)-e&X#U`RV$<`+\!.(4&H=!e(;Or(>C`Fo!0R;4s4@BV bT%i#kCPDc'8?"l2/3/s%KFY5ptpf:aG?toFud*=+-I]Ri"%"Qr^H`T9>H+Q,Ji@Q JMPSlIjld`"K-mKB0p03B>`ikioNblIqlo!c"T)nip JJ"Q-+>rA&?j@O".`5!u!P!Y[MRl%iqqqW#1Eif^"9S?cpp]Ln;><*/D?!/jaY0Ca T;[8j&+e]Gi&GRiLF!2IKNnTo%L0LK:\X,l52tPAJ;tDndR#uE+\GR(%dC8a6">)j b\2RrLpNbl;qgWBlj;8:L?bE7k_h9L#R_1PFUA0B,Mc6gqh2mq$6XSATY7nF[/o2] K`;Yjs$:9@&cVAEqucj;)BaOr6!`!L@3`5(JGCa[Lfi%<]GGn*;bSu=kU$nd,c60p @LA^WN/.755dDpl^qNs?M=5:Z&t\3FBDa+I58`F18<7BV@YJrqPRHo 2sD?\ZFg8b95qW_bbF]ZBHT`$cLd[OnfLVMT-]82E[,XjOZR.BhQNt,o";06P:oo, ]?1@32(LcR`BEVd1Y'o0`B63-75FU4qs^/-31*0"^MCF\9RC\VH$e/QpsT*0NFRCg ^9[',h=E;eKn03(0.^e(gQ(Od\p8>LE+;IYEN/NGNc=EoH3G=+WO_OuF_4Q.qT'lU Wr^Ip4=gG=ch%256HrkEc2HO;Vu9Ci^\i9h^\X:`^A_bT?iTu`kIZL6I6@"WV2d3@ K3qmUIXT68c%oeXQRXR4c14E)^jdO=d&[Qm?M\jrg$`-1n,#=W!Gp\DWs->Sc,tn3 iQ(\pAi=tD(RY=4X2XW3r`e'Cs7)[Fk'pHAnos9WCEidKOUAo+ip`$#s)`kPr5\:k '.?!_-pHZE3orX/pn)R.r!SP>$BA9\O-pU[+od/ui;=,`+',V$jK*e:'Ch]]h;4YB Br$.+s05Y!'#6h9J@5M^J>t_3;4\s6PbeQ,![5g`V2YQ`t5+O:"3CZpP2[t*Hs_#M;8A_7&R\j!=uliNRSW9;XT:#nMK rrE)%#`H2^NM%fGl3O[Vr(Q$5^q\Ef%K$ah-pBEj8cZ'qQQ?J7\08J+8DjPE9r9`/ !al%PH(%Hn8dOi@ck3X c"rl+AN/')7]+)=FQo4g(_f(7hl!.P2;(8IKb0YK-LforVta!>+Y0nLT%E*Smdufh #HPWATEOImW<]X@(;Ll&k7]HjL2qg+!+(6.61CJK:i3<*;Zu&Di$aEQhl5_ieSM9! c&>)TA#0TtKF'DlR/h_hJ;,-:Co54K'4dd;0-U`ae4H$a%WrDXdI)ZY<_4XZ/Bn/t A0b"L`Z@4_"&F.=;>qdq&3C!ArXd"t#/&pndP+iFAqCE//\iZ!1EqWE&1R^"$OD=k HsBYdREG(O-ikTH"e\S37B+(P0djRn2m"_4S*H.iC5Td)chjl5Rt>rPq&'VFan6rO :$'L0nq6l2K;,A5+Bd5\;e8FsKJ?_:H)]4KgXs9n4EeL-ibI<2a,O.YL"FZu8_`%# Ic<>bV<+?gpj\FVIZ;ear.k3"\*,+"s(,C.9[;QA]DH-9X"W;iq3op,/F-#rNK>t5 \WI9$cJaD9A#YL#'l=UQ\rNsBg/!1Sojtt:kkGP9m$;bPQ%!4=]C]?VpT\Q6W>nW` fTja3Y?M&,^X1edBmK3jp(4Mm;usUcV,rtJ\":Vn?0a0"O8&P_?aMqA*SQ0*HuE6G 1!ZqkVB5"L(Rm$1'TYIqSD'6(mHQne< b5\`Nmm#(rr'0!4Z[Y(,dslN9B7Dr@o685>h&cN2XnV#MD*Pf's8&JUlXQgjrL/t, 4OYgSfHjLTP\-2U;b5gbkuE!5CSbS;#l*Akir-u^,d7C!+O:; #Q4%I_*=(^^!6]+n)Jm;rWN8E:'F6bJ!g7er*uEud$[/hBn$`1s0T!!PdfSX]C;&c i2!+ZplF?Obs-)3(6HUe,R&Nk`p=?pHA&XIo&#((5h0"%jM.uEUfQ #,9kUX3K/FO>PK*+Q?L'dX1ajOE;4JI.U=,s0s:a`"l0:6/A4;-!GgRVYH&6 &th=:cKa[)f6q<5+t*[]n4IV7'<%h*&]*@3L%bFhMF4O5#lf@#^>GGV4:)YFs&&bg )$Ks_gGfC>g9-42KcQ`P&F!blm)/O*/e+9D;sC)!Ir9YtnX-j*ulVh7YU,[<8/ q5s3]O96T`Uj1epM=Vfu5?In26e!)&\m^F2&76PL.g6i78BhJi=E+^fLaZq1>`A]m BSCJ,?'tj3+=kX"&f-!Ud1r>f5g&0WEme_2IoTABZ`<"leoCHSE`2_'N4Rf/`hN+: U6N[W,[T.f62>`!MM"`OMlOM"e/o*!VY:i\Nonl`/$r)R+'tt^oW[c3;rRCdq9:MI eBo.Fq&/,j2.k_sGN:fuI5KX4Q(i8H fb?Fl!regb>;#$FNA91KP6,C']f1ihh>?F4:O_="kqA!fI!Md.];M+S;(V*KJJcBZT.rQE.0l^Rb;?IrkG75F3?VQ1i;!mJb5Z?\ h?Wt&(A'TW6+@(4)ubTf?[O,$I*>ZDacD/O+7K,X0`96$97[&?I"eI)Sb1tFs,dK' nim0T4IlH3rI<;uP-Y@gN$%/2TUlMgLCsU^O1'QOr/^8VY"2JkVC="DA2WW"RWM,< R\V)og.]:hO;V9lV'6]u_E[N3_dB==l!jQLWi4G@^-7ANZ$_TVXVi'YBYN?19.d5$43P/j%8D@!eDWr>.*fi3j.%\,BT#nd"rZolN#A6;+d# 69@`'<1Ad3:f1Jt/7QnMQ;:!OH*u_C4M#@4*c6ZB>1kKf]SNJih,iCo05D)_G6BG. _U[Ho27O3J.i+L=>fU8_9JR3@;-:fZEB.PI +K%?XV9!U+8KLm/=.KNcBukPC$_I;0a$-*SM^S?60#38N?GT>ZZr9L]O3WQ;NJY+5 ZAd%rqSl3GI>5$S*@.g\'*H$#P""K3_Qjl)8Q'WW_5;eueGREa!nHET"P"2-,'9Kd k[7]dJbkO^9r/)`b74m%P=/EmK%_J=_Z;R^>BD(nE9>Ek?F<]!1@@iP;SNJP3A1_o_&d rBgONFjA>!>7]tY;&s<&_%Teo8=KK\I`G$[;Z4]j9`OaGb^]Nq\kdc5I'Daikfdhe SX7KGgZ#gujGP[eO*8Ib40n\FMEBSXl'KCO:D>are5L:e$SP6KSnk31>4;F#J*en@ O5@BJIhR(t_RK3T]DX(\\)Z7kl[Q5'>^U"j\S[qNhfNn9D"'a^d$?T\g*?PlB1i4' 54u[/I.?rH?i8a"Q[ec)MuWM7=23Mbr,:.Ms*pAbombm!ec3&HbPuVGci0885Q,e- s5[OWqpTbe5M\?tbOs^fk9F>.qL1;>qf5fRY?dR]Q"H^9?jYR;ANOERV]>+$!hm/# `'K((kJ)h1%k[Okn(Pth[9E.Z)R==6jr>Ws#7EaCfj\U3(%)\3/^1.$&3'A-qK?sS .]3BNs5nmDSGDBi<(q`bs7a-`#2DY_Im!`_rWp;ZIi0Dos%iI6:'\qf"O['!&c5GO B.OTo@cupM]C<?m8R!A#5DDCr]O>[FTK6^fPqsOqp50aD6eg]ru3K:+a=*3Q(XQSJA8TT"lM%N,SBMniS?[Q8H)$3#7L-qaT"*!MQU#8 5\:JKUdbRii01[GLN+il\R60V_^%Ss`B]i0&CJo#-E-7"l08JQWh,rbTu\`?6&MZn \4Xr,A//7p(TU+MAJId:SZ/d6daXH=MH0tT$E,,C2GnT4mMB=,7pQ,`)QKOsX-!fJ fl8#QW;O^<7X@[^]AN3E0"gd'$NJ[>i'5#lV_pEYJ%Yc=q;:UM')Oo"gDoid>;fSK cq;,@[=BRHCP"kQ+$NFcF.nF'!3RqS"sUfC"6tJOO%<'S)lW:u%jldRgCNcqi/^29@ah@aW*SY7NL!LWQlog,.bR]&PQM=;%dMZ_6kJA9^%kI0H_9KHe=TScp'97fb9 Rt+u-AJpq-R/cG4P,^E-!OZuK.^FRAs*;S=RL55t$^)D8JH(Di$BQtA!WIcGK*;8T H0'hV'hQ9b,XLgH=ku8Oj**]D^2?7-&HV"+YiI-,Z63ja;k/64S_hf>4Z=rV<*\l: R6/jHA!s$[GluO7_\7`P2tFSXM?`KKS=D5SLK\*"I,mn[D(rN#j'].TM^$p%/&DNj 6g<`sg"mr!f9pIDCgDDGQZW0JIVS_WJ#r[&:[ET%RJN,nDjU<,Wc.=IB/cQ!J+`gb$i&_*X'beL__;"]qnN%nmsXo%BE%Nf:Aie[^@\bhNrT%=Z-T'7J%"#/ ePtIbF7ue,%,Z3+;LPiEb^YP(7I12;4pV/d8#'GA3F3-s?C[ >TdFr_>M?2o06+)!q=*7`;\)q\@V'Q4cVjF!I_,fITKs0"[mP8`SlmLJ"6Nert>ik eFWDZ&So,")#bmf"i,Trs5UQc'@m58Ij4n_FBm&iIO2$jcL-udq;73eIj4lI)Q>Ij BA':?609Y[$,SpSGesjPU6Y"hZ,n?R`,ZnEDOg!1.))]>"\%&=r*IiSWWF$%%S_m_X5D pVcjqe?Z=_fG%$7&i:1jXon]H9pl.aU[Z>%f/03^(`<5pr.l?_\6RGen<]u]j_8%4 "u&91q)+R(D3eO!%d5>B*>RnX=mkLAcl^+HO86b5+A)WCCQP"H-^KDT@?EHF[[BpO k5Ro6VBJ<*T*Z9`9)rs#)VRS\RS8qG.:<0@i;\?Mj8U8gAWj"[CMEaV]))@XhOui9 d]b"iPUucbN,_isITr[Vd1&2m?eokK/P.U<-0om+[?p,pPMC`2JtZC;^!e8jZfRqi 'k=R=BC?NDhQ(\B2)jEmkOrF+0`Pt(kKC/srJLWIZ1id/Zb#l(h\l)>9C>5[7agoQ Bh$WnQ.=(MhKtmBN4NQ1=/tN(JE^IGNA29&_=SG)OE-PSRsYP,Q((Bd6Qk<*T6"UN ND8j8s0)*s=g'/1$ZL?>Hgc%4Et1-SD\gB2&d09/OhA)5e3k$3EXQ\D9H-F2Eg]rX GG9]dr:&QE'_e:747Uu'MYckpF:VY3hsismb?MX)=]FTl;0c-Pq2(g?)idj(n\+jL pt`,D?iOm-_H13mHmsO']u^Xh9:^>apuq&#a5?R)pf7?Z/#ML$mQ9ua^[o^sps3mG rPL)`+.l[2[qA>uH+s4JMcJ^8cS$M,]j1Lb1]j"EIJVCWO.WWPkY/r;T.^#c@q?`E ;"hT7X5:J!lA\.GkN5i0QE7eN\FQS6_n;B@rqE24!"uK8)*WHe+c1`26&Hl%Qp17+ NlHLL=UW&dniFPh3>'>`p-f'3#i(RLO#66R]Iu)\Z:>Vr+N:D$!5:+oPH`t4/GctL $LE$*^n$JV"b2j+89r?ih$YZamb)Z 5KJ=GfhSl\MI_k2e`UB?*E^An^md"N0=^pT)1lfZ^q2[jZtK2)1cNa[mM+6VsS l)jr2XmeCIRn[Vm"*VknruFRV*2l.kK&cmZ6F5;1Ud4>PeU%mM,MccG6KEr\LOP0X_ ,Q9&pJ7aEF!RM"+TGIST"(FfP$,81Q'gVu@SG]li"@O7s&cp>eUp1:O%Um:%MR\cD _]C8/I:@X,/cTL_*QX1fOSmMea3d5tD`kd@2.?'Hj>8dddoR*Y0R([^njOd "NUWW#K6XN]-uYMU\=r)15LIj^F^>g:5(XUN;tPXFJNu4l,:$0pf8Sg+;rk&#U05g Hl^0*6"__C5FC+7"qfe4/HDdMD'Md+_$8tJ6nMdeWjoPWl%>/S8iCA?X$HGZ FTDq%TW&/_3]>&DDFVoYf"PEDi=H&^V[0PTS9q^->I%B1T)N*=ma.c+2.:6[)'n:W ?o2q*#Ts0g@pB^P&-:G`L0]el/H@KU_]ILT)TEANnc,JFs#1"3>;qR[X3'r4.e(2q Ga!?Y2Enip?G6?BC#'(cbrlQ^"4m/nS>pYUfHnk;7ttYh2CX]Cg^hOCTA">PnZJVt [I8UHkO;F)O$9o1cr8\309#c]gI>NB94.8ASK(q#W%I[C2GS*-4jLCkdH\>2DS9tp -__/cT=!\Y&e_ p[fEu43oAX0A(GrH[k@bm]ZHJ6b0sYN;Dk._Z+nanrjk?s7OftX-]kN^KbpSe`tIe >P7gR0*'cI7uIF: r\m8)BDfL^r(lC7GQ)\hl[L2[!uC]=;sTT4[N"L]?-BmlAO[i2*#4,(PJcAs)ZC+s pt?G./p)OD!Nf]$EDRIucSZ1%N5Jo\#g\$=p_)djRBaM-8Bal&rD,o`aIc.WM#SJb &]&>rg3'@h-h9bd2377Cr(-g>6>[f?Z]h0@dA5P%ob)T>CjZWg-NcRkWO?ke,67*r 'Bp!K3u\VjknN()(nj7JM0<6nG=!Oi8"Vl/+VB6F@9;1_`t%ea4g=P!rZ-[0qmIU# ]C"OJXToZGpHOK74SJ4h_k6;lT?Mn1Vi^op&hW^[QMIa!!<3_*(Eb40,Qc?,:ldMH5E[Vu!4q?I5l3bYCeNf("7q<'npn'sj(NR=V+CST M+*J#B*.l22EfBhkFk72FZe(R">feBddg1D'o$O=s.d&X4fo7r0qURZ]7Fe3T==2FSZ)gk8D?cD`>lN*)s:n&f5B17dh#n&+uj!O+T@)B`U3X$t!0S>aS *")A;>+'JZ+$!7@L5SX<;,oU"8ofr3n=odAR[MH=P^t;]= ka)(-T";c+RXqV97/kj=)p.T!B\TECmGS!_OMA*1*pS72d!F0^#1qKshtVqZHJNK1 #,lZ?pc%"JXFE2\HIUR>P]Qb_?,ML.*P37\mq\IY2fRcESMrdcEUZrZJ]DscS/i!N CtHE6h#+!?mZg39$R*ND5hV\1Q-$V;e4/D*:B(W's6Ugi]31Uc`=-rS1;>W3Z8'c> @*cs&;<>iD6SBjK]P2ZPZL5.KHDgJBH>IjQT#uG-3T[6;Jnp5flcXp]b9tuN2g"aU Y4A)?/\UMapRTs)[t68_D;t,uO_V?$0oDUoDeAtjZf=iqt+>Dq#BVp/$<30c]qR=?%mTU93)":U&:[,V&qm"o#o'H J+u;)\*g3idL@KU+'a)/Z2.F?jXl%+HYkVR])&(W$gedg!3#ot`;f$8TV0#e&2LU\ 9JVD("M"`Rg.YQIj#1TQ6e6m?W*N"6JI+9(%ZrZ#4=n65G0S#M3<1K.i4AtM8-GS< ^t48mJ'XPb!T8Gg!l4g9m=4a\(s"qUmAAN:i5Xsri21H(aT$u;?2SmZruZ<)dYkj_ s+C+9T4S%Nn(fI!FY.,AjcG;bYKA\ 5HqM+s5K>m$U$=nk;OVt8c=^)5H*_j<;pU;r4`eW#63#',QJ1'bSpT+>l]=,3*ZAJ $^^Yg>5=)n*c][WNVK>XINnf:W0KUas'YhF5T]X.#JG/m>NU(N5lNBO.qCC4&QfKO MdBlDM9U@\<>W*.5A*4k0Djpf#ps0??@)pLXKXEOC k5Z/*DUQX"\bMA+_3@Fq9Y*Y08J35_-)&G`p6"i#`ErD68+h\` CIK(ZNlWrp-R0c*!6`tmm;(l<$70o<_bUdo 4gAe]JZYn!LQgoomRuF9[jNKjbc\Vn@pDba0#afr?L"o2o^8EQ"0Iita@/%sZ#5f0 g!c0M\Xn[Yj`h.]#8?pj!qKtXXUM'-V*NR*''1?"P./V6(2Ai#.WUf?36LfDCJ#Tt ErBcHr9Np$lR;d&.^5$Qgf+ku2]hB,4ZOE@CH['jHJkLeaPD:@HNj]C+6e5V/NVp. ]GOuP`_?2T#7A1oK_k*ClDOAT^Nu:Dj6<;!c5(hUU$T*eo[ckSIrMFSHhWbRm?Z`^LK;'tVs9-'W]S,!%QN'9l>&be#'=jS9&rpIDgj&e "iLAD!;*^^^,9;[L!549&:G4^'aKUGbgU684]J]h;J>4he3X+NtJ/]0V!O=rC&fDC;OT,L&s7AGg +Fj7g&*.XJ(*NVZ@fk]#^n_S\2+[^9/:ZCRB#?Lsce\_fSiIY+"B'_Q<+7&$r?u#7 `7GIh[/GA;]o/rHa[PdXeq>ZE_2Mk'X1!#ar9>GYupr8j+pbZ7a7"@"M,6t\"5-XG$riLskr7CfF_!\<9!H\[!r:eEXn&(4m+HmmF q(GLcal.0M_>j&V`G"!*o+;9/ch'V]p`BM96i@PpO4XW(ih)haqe(XJ;7AOEQ%8dH oA^c2AVi+Pk6jJKOZ">@jWB)shq&Y5a?ffCHV6j-c,BN,XTU=m\J?b-+;$m,&O7pu =g5QjeANTXO9d#!)!$`s?L.VVRRBt9&SasngJa5paXDDJ.i%Fud/GC'W;$mFJH(K( ,>K*XT*,=iBEWu9ZiM2Sm/jb[k8J8\N8glL`p*OdkH>!`]>n[.ZmXW+@=87-r!5Yq `)n*=Z/V&RjF9\[KX3,li_4ZC;dTI1:OqqlJ4Zq`dOS)'-)ms[+M5@mq/ICaV3jpZ &-Ja,hZEcf>?ZZVk0-K=W!.,hph8b-O+;0PUq6Wo%MhH_@QS@Q>Q*4*\rj,&_cplk q5!B'P(,()Isb>2U5u/=Y?)1aWmq2RY+k-\nq3f+75?IEt 9BDe\>']eK$KQ[V!K[TVjkjDrqt'X3hjuIrfjeSX4B_CFgParL?M;Nmnh]kP%o04? dC3Q#>a*O=!m4!>.8)*85WbBO#LJ?IZWGmT,(T98I9]>DH&RD]'9n`e@Oo+:o.+J(ajJ1#DVF^&R=&Y\)rl b\to:N#KE%+Ynu_F<`o0^LiS**oO*qH0S[_mB= OojQkOT3`[WrJD>AA`&+$P5>r/VTUSe,Dj*V8-QA)8;d\L!dFr!HHO<::Q"RrXYjM 0-^DA9`@IKrp]uVp4314j.R5B5ELiHiA26dO+o_?U%V,54+%2o^aej'R]8..]\&)b-o4IWYWad^0B]SOf0VZdZoAOE?qH2B-- m0"c%J*b2Smtgkirf=YO5dp]d&qg2sd5mgnlqqi;.^!"'Li1,H/%j0tg@P`UU;j78 -0>_OlLCgN!NLR$Z(;Lae\s,AKU%O91e]kJ;f;(hGM3<$kKio,1O^LC^m%WJ[q:Iq *YFqE@/F`n!UTgmO#2\pqFKX2iK+WR`6@EpGu0:RJ6k5.BSC>`aJff6btGKR5+)JG XV>LLZbZUVf_50hD(#I?ZH3g\7/k>X[W2BGcVb;(l\=[5UU:X6=]> !G9&s;5@\9l59?J,0F.]fh-:dA\!iD4F7gl]pe1g9DR/6b29sj)._k*lDYmRfAB!, )^o>dT"U0TEi=4=Q'>5E[St6CWOp^1.22<3^[S'fiK]hDpQ$#9mf`4eG>Q&"Pki@t MEa.+o$8,p5J:%dg#\+`'^3[hnGgOq_#G^15%"6H1F9e^U?$q39"oXR_:NQRHh0eu Kr*3FB3*h%>CXT!EQ1fo=0qj_#+pL"%L'i;1+n9BS.5l<5Z.UT!r/96E^D=V4m;Kh +uHekLfms'UaU;$FE@0SU"TAGFG1Ad=jeou3SL>Nm8N^:!$6Yn-]3EX:Y0LAAr$Ee g49?W:>esQlYrg"#c%G3g&`6%Jb-_UgAlIX)XKKLhgEAoIFQl:L)ftRjGsiL#Oo"E *W+&t+TFSo)>G<75HALd;G*VW8,aSFJcDK4_@XG(g=sYhURNh(`MS%ho^5`!s5mb( Gt\M*\j\tY7gUdI[/]gYlhjPn"[JY27ed-2PFfi;:QWT8\l#/I#gCU@nlPPTa*Y@, 4#pFBnAuR$dK#5DD&h5\0-/%EJCr:,hU>"kLYr1WJCpH:5(&M>A%Z-l,MEB!CTs@* UYCoCs.7JCHZ2/crdDD*B`Ab>mG>-mEU03M/\k9(s1?Yk5R/2(AE;XVQpgp\9ZS!E Z@tj8Hl/[[h$ZLH:YlIS0*-=:V#HE977d1`+fYD0Skjgf.?&P6r*t1)BHKip67fE9 4=Z!C+3S"4oXBDLrEd#>MLUE:AT+nZ>!`/+r!&EgV\!U`"ZdsMW+n)e3N*,.EpS+Z $B2,#1Z9+b+q.TKIP[%tDN'<7NcaAY_"E15m=0/S9[)B&#rN^I^n5s?>EKBGH+`Ue5ZP*lEG_cdTA_H@4g/J %_>^`o9\8M._I9:H@L%e6h(VH,h>)G.R-(%G]p[Vr+,?nAC6*!hLu)T0gWJecaan< HQedJJrfH7LH94K:)g/[:;4dNP4-5iEQV#5i41,;^iGrJqqm&RX^NP6%f]K&j3%Y>9^\ qiCu9+tJF +Dbg;.0.YK#;R_0a>Z'pGY%VaGQddr)mK:t`Q\D155>eD:WW<\)tEsVHk2?hAdK=P hnD&Vrbj%P7jMUQEVY"KhtWft*KnkBJ(joJ!n.'l+R%fL)N[;1:Bj!*r9MEl_H+hIT5"/dEgjJfn`\AjdWGMmMaL AcI*]B_`;S_,_6N\G/if4+MRO*Bl:BOlF97Hue_+bak&Lb__A][h8Y8iemLqT]IEu CRW'=?8W\G:NglDNLb`qTcmrW8'Hr)1OQKTW!EBC2u!V$,bWr`,_j5nK. s79h)I-c=p"9CmjhOR+/kXlECAjXXq8:!)kLEOA;_LqmYk!3)!Nr1!)2@%G=T5iQa 0!u8gD];&B+>O"m>6+0-E^r9cfNA^s0Y4B@5fPuircK?5gAd'0]((?2b+TaH:p"WF `]1QOWn?N3Y'2;G\lJ(plC*gC/uktA0\"C8f.T29/@eh'%HQ=^._7c@G'CUi_*n*/ WR@]B$D*g43Brf#r++*2.H\S`oa3B=?&n#QNY]>KTjI@ik?ZS?1\I!$q=#NumN0AB c.(SS.^bQL<`73eb*5Da$5an86U@lOUsN#^YZ4TpQ'?>!j]Y0"eh_^>$N02tI2d8* 2&$c)aT$CIUF+Si;eW,Q"&/C`eqO6=;gqQY9Z`]L[PD_;B&'H5H-2]X68\0(g"`e! B7BSEk)\p]q";OYIsA![DeI8nq*N'`YH581C,PDYJ%]%YO-e$SHEm*F+5!Y!4@8--'.O[K0f"<"aV1ESmV$WmPmXA"iPYHXopZbi^pmA6OSa$$#an%,E9;]EHcKJ,pbXj!UtTkReFMR,k`.0 g&AH2Gh,_5ZiG1NOAu:&Ur,qC6i_**C9N9b5:qB/pco;,\?^CT5)V b$I\C9.<4OV(^'#Pic)j)7C9E"8guhNq.'qqD[L12_b.K.=WoaW2'8%!O[3URM,LP E]oo?ZR@%Ka'9.75Tu!b$"L8ng:*9WFe!d)9KhF^]p-`dB/ejT7k&*PIWg4WmiF"T b;3_V!g&D7-j$QQ\bc/kIpK&QkN0k$^Jt']$`/>6;uXBV97HJOac@Mlr6IG4^4(.> gIFjgm9O^TIao[BFa$>7guPY!khJ"->+a6GS'Yu1CMI@Z\u;'_J59a)6rb=,2$?o- "[#DKLR^](Pdj];jHs'l#/5L_@UUH9.<_]O4ILWJB(cS5k9d!N:?I+,"oD:)4< 9I`.crdt/A$]sKMjV0uZ:QPI:r5n#&X5JV^B_d;V7sd5rO[!N/Y_NYrChCLr[f<\U NW:mPg6.2LK>tCYX")5ABIgFlBgDIYCO[W#fBhGAcZROXFo_$93/cEPfG qu`bi-iW!Zh7YYq[jm0?Omb'qgh&b.adb+\DAf)X*MOc$lBVK2!i2Xk#QH#fbtlsk 5V.jh-&Ml[T_PG`+*XR[+1'.b[T;mI"HQ[&-?7Z\63fC.j*H<'%Y;:4$Ns1?0L(\L eCGJC2Z[n'>3Ej]&G&[Wfn=&UHcFkqlY2m\K)[h=6/H'A#g/\e.pBVn?) >*AmI$(hnU!;mAuO#eTJh?4s9Q\I&STLB3I9ZdhEZ2#er45EE,:UQ(9gY"QTR.2uQm>*jO[oE&]3 (bLFu-?Tc=-MBWMm;^I,gOn$(j2KsVB4n1[(3Pq;^N8kB'"UDXc9k4!>TIF VRrfprR@BAl;8qhI$D2t97?IUot?io&+7R:or6q85#qHgF/>L8XSi"XlDp7Q?%%,Q q#@\P=+9`*$>9J>raOPfcWC&/FSU]Q('!9UiZF^Bq!O],hmg5Xm3?0qn#LhRU&'VF eITUMg_jCEUNc*6f@kY]oh1U1$c_j\qXnp@NO.>5;js/NVCn`T6Ta3FDo/\rMd59T ^kn'rPBrJ_9f`kW"9@XDF1iPWdj\[h-V\Fh!N6U7F\LKL P?-A2V/<]LSS#tJER5$Y[F''r`:b>RFAebbe%]:O[:@>,^1?I2G+1Q/:$qNV3Ka?+ VKGeiS5Mm*T^j1i`(.bn+`SpDm5)H=':i6ZcIh;^"q\ctJS>tgbVY9TrGPMhp"9:* NC^5fUVe2C.q$nl`-ecn$ A-%A#E"<>o-D2(*bQb52!%e/T*qjUWi7:0$V270=KqITO;'KEJcd&oHbY<3[$Su)H Gr"alQ7)_(4TOl!,l_C:'`@P/3C*M'lMjsJp`E!k40T9Y6PhEmC'?B`8(2)0s+FSr pL)bh./4*ZcR8K08JP$M8F\nVDjuQje)gm#X_IV.A0,rqgEgo%A9P#tC6k9I/Ok/p :*if!o2T;bqB,\N%-(%bUOluT1n%Dam!gWUJA]0t,J]MR@Z4:c7/k$H63*B;ifXlQ P:9>>p^agQ_Ou<*rk"!^JS5>F9c!CHq-WH;"SeTW!+',u7a.#$]!Fs>1@Tk!OdCVd #[/-dg#!LOENo7!#q'r6fn='5\sat:9iLIL)N[2Ns*5]!_9[f@^_$N50-J8*!(_[? +M+s4j*rNJ5H4[>s!*QreN*+1ZACqLjF>SZAGb8Xj:hPt7\H75&c_1$r/(Hq63+\= 5fiYKRXmra@$?&Ld4gO)^-JS;NAj/5TN,S=a/.bQUVc?0R[TnP-D[i9d+(nUl^,i^ ,E<5BGq2Z[$D1!-Ssq0XBqaauI0FO0Api\Wp"iR2lUMiM30O%/6[A,Bb'e1=o1O-b D^?:)#,rCYe/;!KU]#mjG8D;8;2Yn5"Lu.6E`=1])bMMg$2C-$X3>ce(V/-3q:=X> q1iab&:=P%3T9i4+=l>Ra)KX,A+(rLZ/lJ,*LB+.anZkY0Yo?`(DYeGVQ3HdXL^'nk0EIb'7k9b ]%.q/Y<$?'\'MF![sm/'Y%CR;(K[h-@njZlY%L^acCZ'[crlSm$cLYl&-=*hHn'tS .41^s%$lMG,+p6XCCTT@kVdL!.ssYj,`M*sK+&qHAT!8=!.Z1_RUia$Y++-Z(.$k< &`Ak'h;/X)#E\??Bi%^#0=tob6eO]-DkGLd9l"=]r9BT4W]@%p8W6=&A!5K#1bpj%PMb4R@KZHB1+M7V3)^GPqIZt"^d21oJ *Ta8UG\$.O`BPjLZ2BBc2\>fZFk-//f)sV.!Q]b(F$0^K1-s:3UA[lR#&+$L7fZ-^ FFS;ZF_(B!HEnQY`CqZ@!(=W^CcAWt(YLV#P:lj@j:@pCJ"h!-dBOPW^_+pZr/VbI [/=,.OT2+X9_P"'r_Ibb?l69)lP>[[idW4RZHk^W"\0r\s&fn-A"b&G]i9F0kg`;Dsq#9bo>$XDP?.RVW22_o-bfH#B[uk7IN] &oq=Z8HI6Ii3`P>nNU.[+T$ZX(*FLb56)4]AcItj+2'u,D,7[r!:YKTfbSeQC&]DO P))\sJPSYYD%#)Xf_eu`IN[n7Utk/Ij?Mbc9RE361N(.$Vf4#IpQ;=9siI dAMXOO1/^qLX6sa<2bNEJ(uQnd>Us6rn5-f!:>8dp:jZVEbbe1[1N7S+%N@3Q4YbE h`/^)oegEumCi17nUE\`lSJNQKDF&GCd:&f`IEM[\B-_c?lET\`u=?&7[p^2Y%i!U OoO7k-Ei`se(09G)^C(H'?1d9`\i)o)im&2hX2tB.%Gd5U@?$AkpqZVSrc`94q$gubQGXF9pO%W3t :n^ktB13=*+67>iaYfFI=Y'(0eToHj%.?5HY_J%b+od2m,IKOog:Tt)DQ'/tZRAU4 jfC&>D^qu-aKsA1=R,IZom&GR_pLjU-.Gm!FeG)4>t$p9TMQ"M#;&3tJ)6L_Zhk+p I&urnc]ihJ4<=O:Z?"XuDcH]$b)/tJYP@1T(&rNmid]6QIX%af2c#]("FT](anP6T qUVdfn(ghiFc92k!q;D*\j^6 S'f?7r5&:rCqM&Tef5`n"GapH6'6X^kh[V)p$s-aSBO12V4V\kk8F0,HAl`DJ/C`S f-u@qItU:e<==Z`C&&E93!(X#kniEA2Z05W`Y8L1(dG@hgI*AQf?#,A^T4],6ibUu aTD6LTVoMRF5:4_@6"Loo0:n`$B/k7OU*'X2R=-fiNki'Z^_3;rucgY:-iV]2DlYI 9XGGj)1hil!/LX=!W\sCG^s^//kg+g8p0StG$X9\0L&u0hEE%MS;VO67b\O6[b61i aF=Do8tQ7R2T/:6,h`/%aaj;?YX_AnpqlKFiSC(Js"+3!nrEobV"f/GRpF`<4I;>ok'@gCNFjF+II)LR906kBRRS+s7?g5MZKns*'5e$OFj`6jbL' /)+[Qc-qeenGd%'3U)kUr7Ch<>b))u8$>A6cnu.RZSZ&`qgWl!:o4C=rn$m'C-h2h o,em4s726's6.CDm!mjL-Gsf)EJ0&D5LO3_j+-smRO5YT_5V"Xd'_9oIN8g0ntrUK )saB'AIGrh_lf7Pr2Ulp<'E$6o\=QIbDQOB*[psOnUb]9QLiqE);i2inY;9O5J">r LNf$^f86$t\:O2L6,n6ZbdWecCB<](.s5#eS_Qfm/>E^Go4I:q,HD2WjZ1=)b#D'& 8t"hI*(sk'XdX:5U-.b?^o"L=UGZ#P-8/Ph:]);B;gpXdX3Yp,b->kqg,J+qC3.UA 9M7Odej+K`<31dWk[E=%SF_7kn(BtOjf,n:pD//>-H6;bjSef2U-CeHo^R"!s*CpO NI\0^r7>2%F7n^7Xo/*VlHcW7q!=:2cX*^PkP5jB3+)?j1ZcB"](B'bQ2]iqUAo:1 dJ%Q4roPe$-j>Wq5RP02<-D]ain:`DO3Sie)^+Oc#huQ`_^F),"HW\f0eg?ZjA/.@!6CcDcnpM8;#e]n-j&CS GoWX\l2lKh!?EFLWKUmLV3_;5"rRI$@*Tmm;ZN2oFCb+Ro>V8JcB'qKY5ICFC0.Y"=X7D.KTD]]Zr4:d55#;ni)VMXlFeuMX/W0S9gLM;!U#W o]\:=oX,8o.rK#m)0h(bWWSimRtB2ba&bKs>'Y;"o];qI2\&_m]cm,u./<82pojQe rm-4B5CGNcB+G`,E.@,5mje>9Xj$5RUV=!gnSTi>ocWip48"PeHEa$Q[>f0.:ccoP #QHm/R"drM=I`+oT4fekX/4g`\]"MV(*hU""WOEPS+>-- Xr>G[6Wn1Qdj?mZZEbom!iHn79rH S1Xa4KlT!O\cVG0$i[p;p8Y03"%e7sZ0HtJ5;ZOqs2(!iLn3:SN1DH#K <6ZS/.ms@;%hJcHF9Js_BEfe?ZD:N]Bh`"k=jSq#D^>u\RY"[!/<\8GgOW%BYUk:& q/P(@9;u*7fe8>F8V$;DF)Y7@)\@Am:uuWQ.0015[r]qg3#V`8qSE(2_k9gj-m\dn O.pVW<0,`3#J_h]c@<.#o7-?r'`[+kFRbF3r`j"V=0ZOdnh[e84h)eDq=f'^d/IBI JW0;h+4-.,FgV0?$\80dcg5`VA4AgeofkOM$NU3Bctd*7)`@;Y#t_.f8b@DfNGV)g=q14%pppgpZkFcEVn9+sKh% g*bo$a`p=Qpm9%i(I\gd;W/^hNTI]9qN;G]XO-@CtpkJPc=o`U&HJBs- 3REf_jV5c=!A_DqQuJim3^ri9*^5%F(GY=;cM;al4tc@iJ=b/T*0C(bTP<9?39P4M LPJ,.4Nmu]$UN'ILq>am,:l9:2"M=$>Za*)9#%6i$:r;:LFd^@>g;NB+e5Y;ptJ7W JMM-ETGr[ZJB4icG6)4W"R?$I%Y[HgbeBXMhN9uT>1:Y]kO/&] -d+2GB,PHg%Q?F<36ncUf6Dp@anDYPh:a24r6b!8>(4E:"I9"_H,H.h_dQ'S/cLY) ''50K(S"^P]6#1YN?cY#hoP`XD7SQ94825mo7(d1mh_$!rqc-t.%#M[E9WGO/,]D6 \_fDBI;LY1c4oqdLjIp4lMh*8WE\H55s`e$D/Nl!dg]l<5/WbS"9(6D;PnKWK!p1b >\f_`%EuUWB"3R%ofj"k@jL?=(b8=69a,8\pI=4nHOXPhToAZ/WI_?30jTCdBPZJQ [Y!6Jq2a5H(F%?JF#dSh_YjCM"[>4Spu16:Im6m(Y7%1.03.!`5c_'%^?Y!Q.j4sX HaERTf;nmnV>AZmgqU,!\4$<(TGlBEVKE;2m]4Q4]j[[[=Kd VJ`/cWoS/b/>7eLBMW?r-adg,PRd?B!R)EBiH*l.739N/^l5FE>2)M;WnZNjf%>3t Pl5!=W;QT=ka#HIJ-au!gP\hA1#l1Ed+J]`$>Lk!0U#1#^qs&0!5ce1 :BU/8i'sAt7)39ECGF[?r')"^_"*hEr/(+R)=ramZ&J_Qnflff6f_#qFp+uqUM\rh eFM\`)Yo0d/_U,I=J`D)dI9XPK_k`+qHolgJ"p>d,(T^$i-u1@r,:/-_#I.Knip7Y \Bb+?Q^IP4QFV3u]]=bbP=YG_ofiH&a\[2is)ADh-SJI3s-!^2Y>Q#/URL'`RW,,) q+nRjkR8PTQihW+([^L@#U&\.^b]HQs1e^+It0[(Cfgs#B$$[;mJhm=PXN;'r%B5m :Qt<5a<0^IYZ2&0pDHD+K95fA7k:H@!:W3U![`Y'Dl[+95<]m>p-/OoJo2\?ptn'L #63FJd=Fh`"nKE$dtk39j8qV104nliU<1`97H_[[I4O`CU9eW*bEE(lAO(`^m7S>n\9!j%deaZ!C6Vt/4PfI N3ar5r#`#84I[a3D;,#E3q,?I,/D$)L*SeNRr`HbbrK@4cA/>K1HAf*7"+OT4L>Lg dCbO3.JWQ2P0[Jb6b>V"s)5!QqUV[In),hVc'=p7%]oZrQ0M-uXn_\1o"RCrqU)kE 5;:&*LroW\_9I.Yb>`rg8`nAm4&1bMV!iBNQhg<@ha>l:MW!`$o\ q]E1@6Q\0NhDp0O6937g%.V@B\D[D752Pf&-@kgiY&5#3J8G7LEDWMW@$*+Go09oS FF7j;%IJX+!bhUpFg3%jB`CHu&-)D9!FYo2:D35Ui=e?ZRR+/ch5Ng*oE7d;\RbI4 A627qm:=r^<;rikchJRsrt#5$0"V%S%C]+rm1Sp'bq(1?Vrp9Iro]u5S!BN0 r3%'Cf-o8WBE?UW#$mG7^p0=&f`*.C?a,2WriboX.K5ZP*(G9=]Ah5_5QW&#%)OCk VZHU+q`fdr&c\%.GKGCcEI9&q#5g,BkB"5_9R4S*?HKQUKO3J$-TMIRQ@?3Ah_.A# p_gT[s&h1/r6tY+E3fD&,%+2G"RM.@(8>7P!MT-W9bT^1gaBp21T1IJ?bV@A!56G^ `BRZ1#aiTl/HG-e*!'5b6bPi1KGM?]bU:HIiIg'kpHLsQZVf?+W:+X[$oAiV)@?86 3n#e+1>7EZ&+r/ul*;Jms!FqH.B)Dt%IB=)dt2)I54?M'67X*N<^/`SH!u3e)`O"/ ogJ>ZmO\4NrM;`(Yk/`mQ2L?tP2DlarU83H_!dmHs6V&-5C]oua*6Wpn"uUnlt9f- 1S-O&:Q@2*DIqZQAaF2?VUeWDElq]Z)05h5^&[U'/Z#N`9R@N'[>NpK`sf&qM/6^Q rtDf!,`@do1K09lA-4^*VP4M[@2?afa)oqp3,0>hIo@q1@PLP-b1]D^"OqNTj4GL7 Uld\OTIs"q^O1S.O.13>Ec9fQ+3FQKl24?&(OpV52!ocJs*86'ibeVRS#\c/7c:\s J%\bZa\1_;^KC%#o2U9';tYppeK6ucnlLmTpu$_/n)%:?N>mejI(9*s;WYm^daP1Q 8&FB^H-/ob=+Lp2Nh*O90eX\Kc7fY,j+J_DY(%T_]/2Z2rOm q]Flpq]Ab+7K"&#cQ]QL&c[o/9?Ws7!(?hdS,^UkT?*W9npkYP`!,[gK4t22N,DK$ b9l6i&-4SDcIn%,J-_c,T7/-Y+*uiUJGDe,58.c6q+j>&%!m,j'AfI,0fhW]$[NTu /V!VC?h1Z,?DWEA[/VB0ejqd\It.<48!cShXoHe@QUW8t.&ZJB4>kq%j.G`?6Nqj"fR?jSoL@aF?ubO?p5fPEH1o/HGHBkNV8?L4W4@sFH$l"A&;1U`W'8jqW$ND%jicu S69i\:Z^[_ARE!EptL!-s6sR@cQ>GkbC95.fcQigps[noi6T`8rSa`]h`Y$4b6JE) I!>".hSad`lMjGqX$4N`*V7YZk$9"O_`V\-L5K'-;]on%P_k7pYK`gb!fTSC/V"QE k=VUq%E#r@)-Y@BD*n5oXCk3b0W#bVn-K[kg\^!75Xd1`o+oe%b9RA#G j\q@`l:<#g5!ARtO*WgOoAtDMGA^l=E)5?Z:?DH9l+DL0=-WFYCM;grq#Br0_>j<+ XYl`c=o$_i(&rT^m$#Vhs*VA/7)5G@[ /:TK]I)!;c<_MNt?.FOIEE-RphW5dQ;Jj0G+G')4N5"p\ur(eLZ3sDeO!j7L_ 0L([anUG]iJ0Q3(s,aO?p`JQ=*,>^K$32=QU5G8HJrY@>3X)gCT+)_9.qDKS7n0e&P*rd+ATj)Fa>6#l[^ur.Fp&HT=GTRh3d6YG_?6USB_/!dZqCaGN6Ks-M>k ru_4^m:i6T:]#XOP7=MEX)[c%-/SL%#t'0%Zm5&2uu*FY&6Os.e@40cl^3DbN^SPE7?7`JY=A!CX7;FCe6'+@;FfGj2?@ &r8dKSVXMF"UNeNK/REDhl?#t$Jbo;f,t:t40qt=ZYots('#P/pn,VL988'Kb[L.d !89:kMD1$r/;bddM@4n_[mo<'o$MUR7ZPg1n`nN8`c2Z=b$)F^3ua>X2iB>gk5NS -<^7k\<-LcTEb>/An#jf?uUan^Xh2`d\4&cnuaB%B-,k_ZAT6\q?5r0+n<EEk Y5e"tkl6_D1G(k<3>`%](')Q#(i:FXkO9nRZpR^kr-quT9WHg>c3N);kQP=Trrb.g cpqL>#Eer3Z7j9@h2:'IDEfjok7[fIrTN75p`JS#)&*(\r_K.$6i7Jca,"I0PA*6E o=q0ta('TCJ'F?W2'PHfn)G#[&+4*LgtI9+5P;Y"lTkHbcH\K?s3C=["CQ!.q%*Eh D[fFU(IlW0c\k_f_enCYD;rra<(?0_]Rnkd(U?s>`VSbODtM3G\p)="GGMW UPS/*qc#sI'5N@;8<80SlbD'H+3]e6$%q6kTWF,7d2%k;NQ>O#da? 5AC<8%3U/f=G%Mg+TH4W*:Q2"!#>[_DAKb/(*F:l1h8TH02K[9Y+A03BHMmlRFjDT Z$e+0,;l_8IS<1W-6k[Qn7Gl'bPoQQTCO6,"6:qKL]Hp/!oM!'AE5D7K&T#Tru#1e ]WZIohm+)8?49F[inYaa!"V^G$*ZK>`"B6?Io&;6I7F*\,3a$eoA1m6Dk%@#h\R(0 HP-U?!9aJ,!iEl0aac'n?^k+jr/\q[ob[Sq2$kE-:^TJdY7Zm4^kse!ToXgQ;]l&] i(*R*]R>Fh'Lr)bU*X=E/RocqP&42V3])5N4"7o)2$1&25qqN9m?o[HOPP m+ZJ'^@pFJp!:mL^V%>ZXW,EsITu@:mk=P%WFF64+.k1_bF.q94]h/<(WuaII-Eke 0DkWfAUcmL$NC(EK6]\oKDNkJlFfXON>V8]/bdAL]R.9^Nq8Z[l`#+TjXm-A\WiLR )(8+tTX7B,!P3[6!gHNi$HcAnoWFtkX/Y;DC17i$=\DK?;pu3*9HuFJ80o1AEHY*Q Sf+QO5uXG&L9loGf259Y_qi*6nekB.e<(c1]+rgo%dIM^q23pH.q>]8.=5R9a&TIEF$KqOT]<^F[=/u7>U$?RZ Y4qsCa32=!02Ios4&PWPW8Kj@aXuYtrS!NXMRB^ONS]5GQ5uIegZm="Mg,aK\RK?, IRbWk"S.%'!cSKss2fbX'DlCW6/G5&\'1*pXs2Pg/ ZlG0m!oSR&HMBloTTkW^JHVdgBJYd#?i\=+gFknjr-N_?m6prsr[5ZLpg:^mYO(;L qK^0^_a5o(,]H`&X2P8P#[^1fM>U(/.;7URB_d/S?VJXmXIo9[41(2=r(i3"idWBU M>ufUJGB/U*C8BIL!flIkJ`Et94&HrhZ%Z!r1WZdq2]Af*s_=)s*JQk[oMLp#Q]1# +2MkmElAdMdl84[T+&i>_JRcL2M_?ZjYu6"c<8R97,)?!*<=01.bL M+>kAJJ=b#0A'lh`p@qo9bd=E'+qVN9>BtSNqrnY#M[VXa"KsRpTtM-6h*t757dkV 6p>]jT,(H(=r!)`qd66jo%,@[FQ8@2#,>4'], ;i^!SB?RYT3ob+LosDqg62n1/5V''#e?V.]"nOC$V0aH3@/`;t.BjL!5m6Nao!/"9 `;.@O7/2*Qn-S!fO%mRmqdTL%E<1#$+l&\$"#pH0M_T;fblNh;-11Ve4Pp\6/CWU!g."<:ZSAMgkRh i@c9)q!cDB5IIf/cj]Um!@*VnBcDfZj gKO4Beh`I>W'DNfaIt-nb06ON'VtsMaT'uLoG!+g!1mrbIn!ll2,Q_,$NU0uD.9.D BOW=AbSZ6UWFt-T&C\t&4=nXuV?0IPE?TBhc9/Of\d/-4`CS99$e2YH0L*'1pGXI^ s8R)Ii6rL"_>dU$ir;Y%&>TJSG87"Ol<>c&Irbegs.>X>s$&PKouEuRJ,O'N#:Bnn IolXH2]$r=8EoHPb?gPeIO\\!OMC:&8(hl\eWOZIC2A<3E201PP@7[TWi$>,M'2g> /t*Mk@I(?\d%UM2$BRObM1@63!I.*<4u!#(ck#7\(Bq&@C&_hi&&j#+m=4SDMeAt+ n.$X5&;3PXkm4e23C"a_Khhg5#NB:\T-\t_T9*ma,fRN<43*HQ5:qBEJ)pZ+4bW_D h?O#GPnN)+XF8h&;W<0^NW=Z2.j\:S'!kbN6K\b%e>"5LY^jfEA/Ff$aF@TEA![/b j<+8kOBDjlan@q^o0F`jCgdp1[^([t2#sCUe"E93A/FGGMLU`&@LJOX+@,!`f"T7u .?VBo/0MII6MM'Om$R..S]Jg^\^s!-ne;5jN,!73n1bR^BId?)Y0:^;N.J$2!" Ckgq6?kI^E4L^nLT<:YUYspbU?PXmgOT4ia*NcASpA?21*O0:)gAf!4n:1;YLWo7[ p-36lbQ\@o!SNQ5=Gd&8)>S%_>h+'4M?"r(UZOfE(j.sAOcNZGpm5J*3Gei5AJ]Z_ @_\g$jHlQ;J$]G[O3E[;62Ws2g,T7"`po%MOY&A_*g$D5uci#A)inV/Z$t:c$1B?aKu#C&_ZGHU9i&.C`XM"/sq7 EjPZShf+GP62nt*':=Gtmt@&r^g%^`fbT`Epr'*7n=WjhTg=;q-4"B"guOOBCDDI$ km25I:rQ11JaMJ!<7RoFhk9F,nqRp0arf]*mTLMs-cK5Dd&D"u]`:n"Sa[RU9hl`, s$u-+9)L$Cb:$m5Krr5%>o9ng->e`80)![XmHrB*\b#,)Tjl/qDZMXlP_mN/Ac*'PE!noHK'eg`mOEs0'bt&qLi6ZH2Gqg&9X>Vp s4J`6\d>JB,["eZ&F'E;RF+JRfKb-/W#1RU--k?$SpSp]k5>YP)*@LhPkjbFZN'ss Gj`?>s(@`*8@JSD3tPR$I^SI)Mq.&5i'M5FMG5i=EWh1TU:@#P&H+K=!H-5Et[N.-@_8s.q&J1L9C3'Zfj[Pka,i 0#kdNZ#WAe(;u];^'?KJ>oE^7hrZC@'Vr^_P5I.s7 JDqXnr_MDiP8X@`aZoQM]SE9;b#<6AOTQ]Hc;4#/C$H?lN.Nn]7MpD'l(WT4n<_iuA'[Y8ZH$'KeV_c%:[ccuRB#'EQPa5RIM<$_VL$ZT7)^MZu9' iGS-L<;n\QhRTUL_YeNU/4@:lG*)`?'GEqJ0H9:H21MhD;IDQ43TY1Ko#_6e*cuf[ Ne#>:HM/,kPbWBT.@Y=cbdq!@gp23dI)4PAnctJ4ZDCsPSl"b0E6Gsdli*iA4T&R' h?,gAl?_@%1SZR*[cQA(lLZQc7_O"[<(<=Nl+L/@ag*Mm?8,d&(gI'qQssf(%j?K, INa@i,Qq!OK\cbZZu;RXB!00Lpj[(ml`R:._2[X6H_5`["s_dc'6!CJ[eff(rS/[' M<4l0X[*6fOUGRfZfaXTIh%QiH\;p`(.Hpu'5WR4JcD3kr$aiP/7?E@Mg;Jt!^RSe %KbY1in+=jY7HP%!HJ+6'EF2H!3kc%9-Jldhu^L@,''N9ga[n'J\S#l09I-fjWh.' JICO_%uWS3FOA-6m"e^M+q35q,e$FuF =NuZ'5t:pN"9]Jo=\+,'\Ng01/#8mC<4J$I'N8LHes(uu?-YFXa>hjGh.*0#o.b_M :&T);lcmt"j;tYQgSpc/e[mfr [F3I8<`cb"

iME]n.LY@@6+EI02Bs3Y5"Z6b/6(H"p'RfuDf[[7po.(Pl9\Vj(;6&#+Aj,+oVp(Jk22A[oi(c#t6! 7h,J)rWE(Lr##E\9-]dbT+lc38];bire1^jh1?!WJO:&XG[D5Y(g@rrDj\ 1#;F-r&:T$+QJR%!$B(%mM2aKpdat40PQIgYK`_r+?-3YmN5co,B/`/"-/j>t6XjV/*Ej60jI.+uE94sdg:=[FZ) 1W[tC3S4CpL^QHl!;uRVC?&0ErTLU),6*L^jok_=5gpr0'9U<);#Oq/DUOU@5CrT: %G2cs+SZWLPMgrG;+gOnPMN2\!'Xe_LAuq'Pe\@tD(D0^QYgbo8nZskS%YY&I'TmR ;Lh!Zp0d.YTPVn,RIc@!!eRr_&',:-KK)BS6:c1M"c.s+[5CF g5#Gfm`)r58I#9F/)Oju,mXHCV@@);!.P:LaZKSJ ;Y)X;U95X^59pa4+X-b^!@n3GHOWlf!>!=?lY&^!$\-[KRB`+FF;5hdXhQa!nuhLO pWY78Ap`,#qf?)S0'i0DW7Cp]oBDlPbl$IOS:;dY0DtZehL?SP5ktAq\]hhET(;$' XB5-pcd,Kb"K>#uf'1Je6aG4d)d1!^b/0tD$HNo%Q(hldi8C4nplE@f<2l*CK7S>7 EuEP_P[cH0?-Wk]UdthH\e/KS;h`_C&Vr.F.]+Pt`_37%%V(sJRM@Q$bGf!2N)RF> ]gh9Y5O/K/s0je8s6na]qXff4J)-=^t0GGD]T.!S,_TH ge[C1pYhZ'J%I<(c'qX]FWKd\ql$F$1*;oZ^F,ImV`3Y7D;fC2_Wh'4:rcI\djf5% l@Grmb)1=)'cVH5"j2^3J3R'@=Z(m<"f'%7";g,5J/eTZ3mbr-](=D-.s1E?JG.)n 5L"\PC\[AdPL044ne;"t7%d7B>6&gI0aP/k.E+SpaGUbJfVdVXr!<;h65&urRo&2o \a1F,r+SK[5AC!d"TO;X]cEXB/fsMS"TO/Tg&Wo.T*Q;8K_LVLR%<;k,2EWQpY"LG?RO!??$lBI"#G+GVnLDnQ +)%hX(E`eMUSD7))(%Sj'N!kOQCGt26/^qB&Ko,g.PVIlYq:3@$X(#U9e>-fdZtG+ 5_JgU,';qt0(ZZ9I-snIV[NmXH,`K`ipaE\U_^;TA/#mj6N(kNm3[D!5o2`h8F55" ,*Q3"i,U5 >Yfs$#lA7(61*,GD=B:qD41_h9Esg\!qh``r^.$CacDI1C%roU97c]dkSj3uq$Hs4 r%A0ODt0*0oulM"AYADk3G:p]$j7?M/Kimc'Q+Jm?0B>/UKN 7sI+iI,Y2Mi'44C"U-[_1a[+WMl&k^>c8GE[=^O0QrZ#pC#V14*4pc]Yts\#ri8"l (6Ggihd&(o$!BM"C%;E%>C-'88hOMDaJRr!p)Rn1;^6I",qcmHUDN`bZ@KJ:A1\>H j:Rk4K(]caa6gNB-YKodkZD6kmEq18-C-cuC!j7KF+/9TpK';tHfJZ14*P:bG]sXj *hqZo4Gr'hi.(0-pWe-cY)Ki-96pIQitm'@+&>`un5:&[e;7f"4qVRB/^p%\R4-3C 0nKAYs2G#P6jfU3AtY,;o-mlb_mP0g0;h.;cmccO"pXRH3ZeeCh,Hqi(/^QZ)7+-o Q:&o;6&[CCesqQ$Vi83\OZLqnmR'/%A\KiirGl,b*tKOoIr^iDq#B_kk\U"J+"mKZ \\)j0]\j.p6-h+!n=TID8$fsX+S4'?ko\]Kn]pN9J%-fd2oh:=*h]+X:-CAM\2]Xt `h.7W/RqPB2`6[5BNo/L>GA9&Y*?-TPcsJ=YNmTDO1N7E76QM@AHa%E*t8c.MZl\^ 38>t`p`%ojBLZ53)AZuQ(>tea3;h1JLT?h=VZ?5t;;8"%mf3%R8j#_6X'=TI'G9ng "^"q3TQhZB3#$O[Mhhb&efZ&pp5&sgPEc"Hra`m,\LCkY#QAKP,4LX0Io+H%;L^4+ YDl0[rrYE9s5LeH^`V*Y832iO!Q'+RGlScjd,-)jB6Ak!^PpUE7tcM$8tR&F^dt#ep/f(]PeIo[U8-CLYB; cNO9u/NgBHG9ANB!6ZJp[g_bU*,=jN>%D'R/E/(;\Oo@TE`Cd`B)t8H"[#*?-%UQu M70/UCbi1olENn9-CIRU1_"HL.Q"BKcrUY(pD"PA$]P6WkX84kYmdnbi[nsLn7'dc Cr8BI=mWLfJc?9n'7gO9^^Jq<]]$-F@?]EI&tA\Hp^cZn3\?t3T9):BQRtCoRhkL# 6_=bYYmL@*HSGB0f\N*P4^CLp!XAO[a`RT*,8d]d`.%gcf6n]/csILqeW!!:+o'+= 8+6b#)F;^6=S$XEEB;_Pr1EQ19dZ\:W8Yd'"sRV#,`I%KkHUJcFL&jkBlp3<+Wm42]tXV)q#l>p1q9B+UF`fF\lG`!=7e+N-k& p+U\\KXWaos4\4bh]1S#p]],14<<.tNB2>uEO/"LYk!0RNlut2Dpt$a!W6fqLe#Jf B1IHj!<3'X)@,!>`[LnWFEe_8\L&UEJ<-]nI=,hF!'LR3!.R=ac`kW'.)l-Rd\'#M [OEEoMPrlCd7=Dd&t*hK[^^U0]Z&J-2ZWmHSm;-Mm,DZ%k5O_o_I)31i6C"shS(N' UPiebrkBQ#_sr3tU]:rO6TX_Y`U%fpB)M<)o=%4,^Xu+@2b@:u;\t1e>8gXkq2D<' 9N(dI;@EXPD4!rG0j)6kTqi;4n=QKVRS;j_2Ue$\=m%T2M\s1)N5,cM]UF_[B9$k? :2QfB!XSh8PTXi):iflV/"ZjrcDUBXW8i$Mfl$)+@Ho:#l\,Y`s$%JsIJZ"qdke(T hOP/Ss6_XG"AJD/2>fS'LZ"4;rrlaoRJYOrln9I'q#%k5O3XZ:F"6iY2lF<34mSqs e.6b$O)C[EN&"-3dVl@$*RLXDo]Gu((R](1L(qgWb#Ys;Y%]Inf2f=$e0X#),;3#^ (Z?p<"EU?*g_(h#f=18ZD1#hTceKtRF9rQWH\=Y5!e5Ed(e=8No)G_BJ->f7qd8bt R7euOFGktZ!<::qBN>4;5eJ)d+TrUs7N_hZ]0sab6QSe!58j$E)L`=gLZ"e2J4oZ5 #!N%e#?uHRJ&6[@rib9F0)ioe%o:X%IuOUCrY+jT+SaR]8T=/P*pOLMZjZ_6&c]II G[LQ*s.fu)(=6;b5kDb)@Qc+WreUL&nPK8_p^\Q#5bndD9E[uW+#Ws`n5%u7:kJ]V ,t\$tkQZp"qiQF/BX3q]K?r9H39Ut[bgMSI$5O1qb!t1MGW4b6a*imPqfLI4F@lFS WQup]=/o%2,^BA5I7TI;F=M#q[oQ:"NGL\HW]#^s49YeAF2g-iA2AA8Z`C \,\qo7!Q1&hXH6XO/Mr4+kem=7J^F9^`PtKIguF]YlL=a8C)0OX13e1>d>KF\!tjq =jku+gkdSTYd^MAGD%;\KW-tn?W]ugQ_W(!XU$;+IffXE@r8QI*?`<#=PIr)FZS#7 *Gh2QVV``Lnm]',c"bAn$XYaW%isq]k"cQZ^adTGk6'F4K(&6O[+O'k+i;Zhr q)3^+L;.1fYQD0fU]BclanLJMHQo;5,1>:UdE[ON9120P!+A(-5']H_n4aKYp5/L%tnF8Ip:ZY7-FOKk,BB>Qa2o(a=H[^KWA_)U&'@EkF#u/-PHd<( \CndWlf/rm!WQ52r\+6/Nd3iP\DUFIbl@XD3IeXs)rglnn'?^_T;2JWim7R+T3TJ6 qrtK&gqrjR+m-s0W1T#IO*R[^6];ZfX?A[\C),jRUoY8AVO/\[AXL:8ri7dR+U%kn .=`n50pKu5Atl-;jrB+c539n]I#Fu^E[nAPMQL;^DP0N-Ydok+V22CaKUQBqD<%oe gUYg?.9\c[VMfac7m5s-q8jKHMlk2^p9WViJar7ZeedLJs)TXT]-$*_qnrQos0k3Z (4bA97g?fgbJ-(;H6hPB9<"Q=Sbh3r[(kCbo(ifp0-=U"BEs.hh.+[`K'C;qft2Cu 2YH4BgQkq[((XCr!Vgl'Y&BTe\!6$aQ>V6IDY\UTU7bjjfN3o65]Nkrb5V6I fEDEO\-iT#l0/nG]=kQOrlMK0j(4iD[^Ht%r5ie_Ef*Qrs1nYc2BKZ+n@u_rVs4km PX:i=+MrU^K#B&7C\Y(TOr+G"L47!h.1Z?rK3^fDLQM#?Vj.ej#E]]CRK(m7!2TC> -1\7"PFjt@Kn!q?Lupp)':.R+!NH!%%K@'H/<].F_?/@Hs$=d)G7P(p"qaH.X:haf LdMLu!*B4>?g0j/!&*hk@MmFu#Pd=[5dAKXFr5lB^"B1qRtg^UrFFc68Rgs?Ri]=/ gs61u]OR%?(ucC_>dK`7du+4mG)ORQ7<(Ktoc5qo3:aP7Jc#ZMW6RUYK]&JY^`Pb9 90gV,+Rlo`l[u!D$rCQVq :YR0O%d@S\$qi?k(XG.c6!N+ZF5@8^s,LJ%-@[=T=1E!`UiLBAYr>RpJ#%I!XE8A[ !\OK,'a9F[fEDDr!_C+&'R'RK%2._L!rd*I#e'M^RsaFofn>iU2[.6G2[@Q3O,4)j !9$/I!.[9_kQ1_.K;A-@!\tDfpM^R6T!=VXPM\8@6oCT&!=aMaq[*0f[`YhL4Q;$] ^FJBG#":Y>&bL!;3pMu)U>@9Vh>m;];#Y=:e`S(jOok"qPdIl-F+.W(dqm&CLT*bFFlP@M+#?+s^:'#JZF!:OTCgcVi ;:@$D?P[3aO:i*c!Zkr-1_dY*5VYNG'aQYuV)#DlPTbZfa^R6l1#*-ch]aPSKF0B1 U+;WFl_qqueFZ4F[X^qR!,*=,$/3[9m$CO-<`55>tElaTD[lW"oij)pWEfJ5.roRK6+#1T1XIjGj;IBVn]Gdp$p;. HcK9%_?g.QL)3PX093F$)=*W'Wg<>#=*2O7[E8h\A48)Hn6Fj"?e85j^0d!e:f/oK ]a=kA8SRVH(=8`$^q@DP7 5ZJ`d7tMfa57.6e?ifsROgROZbQmpl_A9ol$](jC:GN"DCu\rtDBEo@f@X2gJ:B;h +%38X&cU7q5N+g5rb;Alpg990s26@j8>?ll_LB-GFJ\t(pl@!lLA5+.%ET8,Q/YC+KPi JV!_1OFmsi`P?u8Rd\Z2JH$\(&GR?OLiEbE!=OE/+Q>fMO.Z#):lc0@rEcNad/bl, l%Bh3OGD`iSMjj d7p2\ngAkbC/k!Pr$Po;0H\"D"@!V5q%??#f9$*],2g4^J5>dO])s7,G"5&"H[B16 H[]&:#-`WlSp[bm_>[o'RVNlYJ2)>>MGTs,MAlI5-:_9Pa4k5]s0mrq&cPQrgBmnX !f^-mL)F>=L49rRJ'=T'Z,pKV=j/(LRO.JN:SVkC>JR1+3+`oa!#pIt ]O5qWJmCVI!Z(k(M@!tqPLP+0s#'_0pjWt1&V_lfbjblF+IB]Sre#%@,1>RAidZ@P KAqAj?a2m'0#0F=#qQ/[X%I%E'\QJ1a.Se6r!E;7qGNqW*j@$mrXfA:IahR:o@CqC X,?a(@fEZ1J*DVn!l(s&6,`e-,-1,M>B\orOsd_L5JJT?Q0WI?HZSmf:1_.`/t:Yo qVkE@^E,f>nl#2EpL\l#54cHdM#VB59)[j0lM5Gb8JcNaL2jdNooP!`ZAsgdURWb] "YaBncnd'j7HkXs!Jpc.M(0(A!-JW+SAm6q;YD(e/BG-t=[6pT'j8A/XeA4h"jCdj &dt'W@Vim7>0PdOKM?!\'(\,>6)otDmD(s"9#O`5ViA%PopIu OUqmC=[3W"+YVcoe]It%8/<@5\`=.fO10Fui1CE=:5o$8r,:PF8FR/fa+qF"hKE44 #CiC>f\_*Wr"%6KM/ZHZrdru3`8k/_If>8a&(:,BY3*J)ptsgI=2G#2#le+D$c)mX JH`iq[CRJ%q,^p-nEHl)5f1aCeQH6IplB>gR!$_GRpd=Q>0F41eH!5`RciIf?D!KkL>-NXcF.#pCeq:_P; ,#/j#itX[5s/cJSOpS7C[htrDV.O5:aWSJ/_ShN;5l;M_Y3\4J:Cd- 5tfDtp=AnE!QqPSID#faJRYa9B/5>e/+L/#_h#C$UjalK3&T9uH(ne)[K+8GdC.U^"!r-\W9BJ@b D-kmR[r`*D62[nhrbqHXJH+@+&G]C[G"6^c? &0HT#*tm!!hs;$#qF$gc,%L^,iM][GQFQb8!j@aL)J4I0s%BNR5DHoYOafnq7#lTX RQj4>!<8_"!oP/A!V!-[r&(8KqGDb&Lp%:oX:A9jL)$tD'_oF'JG=UR=E&>+jk6o8 (T3T^[OL7IS_64lSGham1]DVSm@?N-f^D3)8Q9e h9>ZSd>VH"@(nTd4l^*:Ce-YFQ$L#)@s;A8fHSJ-5ri'.'S%qm)$#.,^'-tYJcYlV n<;W5e##rr1s,k8OA39,.,P(U\;1JFTcu"dfP5/K/N'qeYpl;">JSlp8:^rgU5BMi XdIheViJp!PE")JrR>D"b-N8Vs/)dIG>j")Nr%ZZp%b.PF9MMmJ;KfC*djd$8<##%jDs1-$)cUWM 7-$!qK)ZSVe#Qf2"d";-kTs@Cr:_B6@pS%XYlN]HXob;'+?Bm$k.daXB2'#t59W7C Im`aFD)"HX+S[MseJ,")U6GF('lSW;\s5M0`_Z(G04]_eTS).Z.0'_uQbOZg8+iK\ +\hrO/-):M9/-B='E"1?rc_"Kre(&.ikkU@\%o/S!0RE!Q_:dUHk6YR1%<;R)"L!( %]/,[peM[G-hEr1^V>dri1Dt1^2j"<;"7plM7Kh.cs&?^;kWG*5U@Op%ZBWA0"oVA `;E-'D_f`N9%nheLF;N].J6nU?B`,!&L%J1#)HA%h0h"EXLCJ/Y? F&@""IS7l([^M/9nB:5P;"_.<=b,;DD,Z,#FX)IWnSlrVXEDu_qs8":k-7Z*;Z?t0 R#SJuKUSh;NK`5q#uBBEX(K4O1MU"0XR`Se9#c5+Md9f06I:NpKX(T>JNn&7D6icA ]7ddYr4QG9?6AolNs@`0kJMAMVdd9MI*O1ul;YuQX0r1HG(f.(#4$Gflh6'q"mh:L @9";+k&o^^^jmb4\877!g+ed-e,O=%KhW.+f9smm9JTY6&PM $+C$@="F?rQU#VI:_r!MN]9!!.hC\uEl]\[D3tD\lUi_GCj;C+`?o_a@BeD2?O5$_ 8hg/<&GZG%C$*$M;SYJB)G3lChc^W#I%R! P4><YQeo\;kKD'UY>BVH0Ce?&Zo]m6Y$T&.n6s6`lhA'r$+aW%;*8'=GbC ,UO`(^-N@E)EtkXISb^3FV"jQJb4YJO20'Mr3pl9(*J2.S@M@%C*d!_(W[+_'3a,2 ]2BYaidm%_>Vt*J!@!#2I(XN+aWQ\;#VVQ1C+:)(rjVDtmJMMFIW#T1eCV_-Ds%_K LI9ml_-Wq254Oot&&&<7$eKl)_;CoKK#loSIK7oJ1eQ.l[pTb@U^QjFJd]qZTY=Gm :D:4EqLX(gR]HAcM:UZNQ?J%M#5bl9rf3WR%2>oLRQbl&;+l-8]7`P?s; q1Ro+DWkiifSu_Dh:UJJ&,[g>!3-MXfkB)/@akUu 4'fj%7/Ht3*[n"[1Z$+Xr7@qP&C6R/&,_3aJK,kd!<,0/3QP\^pR(%bVn'rfXK_!5 :"iM'^IBLrr9rq3[C:,Urf%B_NK"kq)qUc7TKU&f.j+Ns?3BGEgJL9357qW/55oI- \'3di56Uuds)E8]W3^fo?8VcbXgo,tq:,cR_gHd>DaYh/B_`72!%.jG&Hd7*baGk[ GIi&br^-_cOWa++LjOQ;7s#k%hrcZIjXK$R0&,eom-n'D#ZU7$f'ElImg3"]%9Dj( =7-GHJH#kKPm9dYp5LO3>`g#I&)&*W4YS)7O/bRq]eL*2.1.Brc]=^u@LF=V`tfed `Nt;^qiaoCG:=i5uD<:EZki,9lNgi/fKhVO[Y5H4J-AKLu'd"J$Q^Nh<] 1)4Vo#hMk*CF:=V+Q39Y^O06N\i7Df)VfRYFOfXG'piNQ*oF]ia86XbI!FN:DTr+O aiqMl8cS!Z#$AZ*m`P\,Isu>0kBCQ+r(m+fk@850+(2aeNI$&:H9+;S@V+CPOEsE< `m&'D#E,PJX/J`cW7X5TT>n)k;G:&iL4uM?W>Wo'.Wlk8iI7?i9V79j52,rN-"!P-#,>/nK!k4BSCloN_+6IpTLj-Uh^cD@6,a5+u& UT)#`SGMA3`]H+W+5K\?EBa'Q&*/-0K=l,o>a!<\Ziq*:r."5:RV;Ql]<_HYHe)sk Ac1GZZtFTY4YiRW7l]P-/TXsXj(ZWc<9JDGQa`3^C6Pbh_Ye>=Xm7CkR*>TH8rgK; UTNS@lNK-Fc#!ac+DZ`4pjb#U289MmQ%Y&Ku5Io65/-,H`<#4_`Ku:T;ckbl`_>Hg(]h&SC 8HFA>ZuCdbRed3(5O^lYr+e9H+c_!_?*3D\0(*U1l>/%cD-YiP]Y:.P6YA2QGOl#M /+C:b(PR_h7mPP3nSh7r!+Z*qFY;q/:\=.l3u=\kEsVTh*Nl3-]YK"&rf+gY7*T(L 2bS,qBrT-Mk'&5*Y0):$_XFGqgF>H@9/TfOU]?]h\Nqap%SD9O^"n8]bl?fP`;f]1 FnPECR[Vg9[VkfQiW[m1OG4PhL0T6jVIr]"40@jt*qmt]qo/p)js]DY &b^(:>gTT_g`&a/a.ea76/b#"BX^J57^1(6f^5jDm0cn]%p&$+<=o/uO!4KE*2uVp i]sRbnNS?`3!pEDff()Vm>VErO75HI@_CM/_/=9YN":LHs)AcE7/4M7P/u?!/n8go=nD2.K]C7#1uu3hObe`HhF56cdO-e _*8D/0lOt>YAlZqaPS`n6Dl;sObUtKh.3ksnNTu1'i8`>96^.k#6GjJO0#pkP&Tgnn?VCDb>NF[^:8I8GhI7en5e?5/.?iankYtH(U\OrpWV8]=0NP 3M,d'&aIt-"o-1fosC?:fogeu0^D&0k/kc1@fgCp&[ca=27A;JA>:*[L(lHPFI9nk ;CNMp!U*kZ&0ig3J7052ONK8T1TX_N`rUHb?jS'bN"K>j`E"*+(gTF%XCP#-@Vf@H m:9-cACR^je:lbD8$(2N6`cVeR'5tUhE$Ba5\LL0f%5s8r;)8hh`c\$^nX3B_#Gbu I=6AAir>k1O"S^&r;Y%3ba/g:5I2s'iMj1GK'>eMR5=eEcGo3:`PV&KAZaCG9p1dD dT)\4lT<9dnD@MX#lII.rcPW)s+U_Ac%"Y*c$sd#9DB%5%r'1C_HI*kUm6MJ\l')b %r!?bT=kN%j<^Hg$4\5u>l_!`0-r&t9.:$1$=N06U]2_pqp=jtM>WRrO!B-t1Alq, (]R(skGku::&%M=rrE'(H3?X9T(jiZC]XIpi;[Qkb@p[OH\7*A.*&s0eeIa9%g]"93^O+T=#ZjMr$$pjZj7ZO0$F%^CQFmS3Nf f/<&Q*s,Sq?:uLBpq_O!JpKr#:3jWX*cb>94k63e]-cU?%Q^UPp):EBg0q"7'YpXt "obS!6kKBBU\YM>s2@]l"nd!W^]GV^BPq,]r.eXE;(m&o'g?gniW!Gq%JW.$Mmn*I D2u$M7b]hTg1Gr=_#JCM_l0=oC97f1.ROCDaKL^mnDdF:S-*#?5MJ!0nIBTP.^!\$ =[6*0*RV,>$q4C%7Cuh/7skJ!L%8$Z$I4Ulh`5"fDCVg<1Yg_43OarfDMW7m"9f$Y ir-U>"+L&p^ETggq10+9J&Qu$b/;Vq_pPJ/Z0EPY"d?GHVK=\T*#<-JZ"fr]b!^%gZ%N<(l AmehtM_Y5F,p3pAFViu2?35VFs7',c>kpsG56V#H_8_=.b@J,*.ag3iBpji:9h"@q A+^M_3_0B#"-oARATImgmU3liaLYk+C[N+1Iq^7uo%!ujm`]t@@-27Fdf4P9rU!Nt n)'Q+n_H3thLhuOIW?UpdrY+E3g9BrD5lupaS>'Uf'LB?HW'l=N&!KLbF^5YWi,,.Wq$NO#k2>R72:>n(;;'4D)6]7?2u2?eV*R.,*G "'d(+iL\Bb/nA?+TYg3i/45:IV+-eLPH1Xm!c"?h3aP1Em7Op"U7V!T02>?Im@aH+ KR3(ip$!KUJ)6[jou$C9H#1m;:G'Rj+I@QObgLF%>5He0MnXLJ+n5NlHZJ#U/,.B! AcMJDba8%$4[#/.ct)Fp5hZfK#4UO#PbYBdUb#m#-MWJoVQFZOQ[E:eGs9#N =^D6Is$.;(i30 WZr_cVap\qpu?/)!.Vk8M#7SWPPIG9j<[q/O)Fq"q#>R"LVEINRfC2*L:YUIjOjppmXYWrqI0E_&p.=_NX,sgOP1]O>Rm* >jWXPXUI>\kpU?Qpc%8 YZ`s;0CDo!#le+58t$Y+JcBk8CN0YoUU%L&1F+drjXtnV++=ED"6'9%1sZ+Q,B3ba 2apmNrmQFa$#fF&]5bbq(U;Ho%$c9Y\Q:"s%>aAaHts8IhSXLb9:W\3=!,I=_"4T$ O9L+`Rc]()G?_i=Z'[ma?T27iM@jP"sYf0-?Ph*[YjJF8uO^Lp4=L"YIl ;^Ee\3B)]'f8%:7KCbhqDl3efFKCr3DNacbe'EIl`C/DYnZ2eAaAP&f$)3d:Bl-*R%0&Wq[>lp,$P7OsA nA#;B\NnpO'!ja).Jo>T<(tSeP@slVc6%R$4T!OOG6Ir>D?2H(+5[,e+Sn);$Kk!+Fss58AO58!:h$2Fo*Z.N-FT<'=;pG!n_^Jc=A\pVp^^eYInrX;7mUAN`g4W(/bL&d)`G,_6N"U'X/2JeX[q,O $l72_#QG,0"3f/UK`qF4''/5>C-N/WOtWa=ib-*i@Bi6SZ'ck4.n'AoJ>XmVXT@dL "rkQKW.luABYk3(%1uB7aOL8+i3HBdN=(j^MF7ka/ei^BVjlN%K*o=@)hCT\m9bj0:/%IOW]f@9!*gYXo .Q\7o3uF'3"mcUIp-l#I7fiTs!Up`&UA9:`U_G?[f71_c'CA&\,A9kP8GGt&!Rhgg /L1??$OBA@!iCB4Y^eGEDoBHugH"IYJ5Nr976Xi;Z3DBf+6l&S[hq[K-=T_p*l7&H#>D)CM6g'B/ee@+@q9 [O'#L(+S#Ufm"^Hkj6sM];HE-]IE$!40i5ITCJE:dbd$U$5W.*1KbgTQ1OOVgeZ5A s6T[]O71^Q$6IUJss4'dGIk1e7"HWcq1Jt!iR*%+Z1!Sr6CF75j `O'3OU6$UdEo^'BH)OZ_P=n?1;UZS`]b9JPopL$t;\,=r+,1X42bj5\Q[h94NUcgM C&bh)l`5e]^O9qWG>Bj2]-(1&pXJc;+(+`d&((=McgP*-rjhh]s.>iTH"]>%%Y*bd k4Gd.3T7,'9@NIJW\n)QeNeQp)%hB(rh.D0IjLQes12AJr#6Q-!.T'R&7fJi@0t#& :1opGXV?-Zd.Z>S?s-T;*mlA[=ue"2.ut,i!;2usU\nklL(2Re&M*p&!=:/0/;Xj0 ^]NF3dnAX+B`^:J^g0<*dME$%i9V3l&JlRH!3$,>S(Mt^0,k@D:.5(21q'QSW"3MA nW(XZ2Q4BI:%Otkrs(Tp,kCtRrZh(]B)uZu`.+EWP0Qj_;A//BSGXR]5N+i+s!X?> 2#icD+'3@g=4tduJIrGHLaN6u=)rk&rY#>.#9%l-&[hfAZ13r0M1GM3&4G.>hpu"F lS!:W8fS04PK5tKIB8N!Jn1'SM9/E;+sTUn2#m4eY#^8=mJ$;gGIHZn2ku#Tk.:4n !H!hl>qJM$Xf*JC\"a'o,(Ht4:!"]N)$/mR5p7/l0SH@ri*3e7d].P\!Bs\j$'@H" s*gP?-.&^g7]d6MsBgEo6=?j%_Reu6&,b;Fo`rB9/3DIH$s\#$XFTmgK=_to[bJrYj8a@ZlY17P,WD6G,\*t:P)MJr\6 !6h>u'5j9L[8-L$`][%kY(img5&<[(^KVq,%S3]o+i*!^?=I_&2RO9fgPW'Q-+;*. 9/jnbjLG)E"9&$?K55+T=7*>r]$\.Vp<]Q*Z2"o(0)39LJu@c%T&$sP\UDYNEa\!) %PE+r^kuduXa5BXg'>*i^UP`mY)/mZA),g.KXX>q2b'T56_t#TO9/DLMq!7e7k-g? s!,o`/-RI'd0IL`2&*DZ-JK9#de/+Js-8KBEW.=:+=u1Y'L<(VL-g.\UFo<[_$18Q g:6>tfY[0I\[2NB;&6r:UW)m-1g86S!I5,`O=(Y<"9/H=3Uf8u\VgFVpN6rF-c1]8 5^pZO#\4/Lj.Vp`@/4n0KJm!<2I>QNFE:t!A-!JoZ@B))o>`r@?TsSJRj4n^5SfIW pX;.kh3%6jqAfe$_u4T[o%W; 8A0@+j-.q@?_#I;p\d,04H^Z@"oS"5i;Y`3/H>G7ir;-2pQ,1fIWRdJX]%5ugm%EQ U%INVV`cf'E\;i4l]I WUc,GDeV]12n'',r]U9BB@b<_mMUbT1q1hm(RJ.t6a23hVY 5T?k97OaKAi%Gs&84SZ$-:g_A.&<-U\U_.biopWe&V41M60lXQ'rP0+m:( M14IonNR$unkC6R?]h+ufK%#rC:J.%+8,Q$;8FX*r.Mpf6@O"a!)!M3&?m>d+Er8@ s4&U-WinhD>m-:2;q"29Bi?U@s#ZYWHeQi.6bD"G-CkG#mkdUAAsq6t%st;_r)&:lc/e*lc,;XCf9>1Ed6Lp[ f+N6cqOD[\9/WLF7\*e^/fX!hpF=/<>loB\>R8+>f%.^`c=0=9N;?H1^W01jK_,Je Uiq6`iD@#c";Yq^Mu_E..h>'!%RnPO`6.gEj[AuTo"C0+1c6I.:[h_9L&[P9!+Y6usC&]qXpADRDeR8;(=]W`pZPliJ=*DQG0NG3l&On%#EN5)"-I/e$6 7sAKnGW,/We%$RVT(W*Ml0k33,F@:KT(8dhXP`JVrcSP,eQKo8A'>a:N$"KdI\9NIYqYC7$O]PC](A ;qb2Ca.a!A$mQBrc(kDdeC4]RDGe\2:"8uiZq%7_c\7`>Dk_]qL\fcubR\Scq>ANs IpL:rk+VV.?,e[n.3hh3>(WZ+dfB:p$V ^Gj"/?MoiY&&`8C%Q&6Xs1QZJpuX4Kptst_(3S#$,5jaJr(edC$-8)[YQ-4'\arH^ peQous-s%:/L%D!&:sk2o,iJnfLINmXZXrfklCS27NsJD5JVcAM*KWDLoZY6UhLOA )u)enfF.0rn3Z:DZrs&Gpq33a*\).=(;#;nghO91R"l#4<_:4VMqUh_M(YilmGqCA /[1&+'J+cV!"32^3*Ok2i%e?r=/u6rr@Nk5AAEr1>YA$ /q@EP8B4i:2l6b^"VYLpNu1W SpL1:O9.[*!Q%P[E<6*eH)7]i`8)!5f-'kS'eXWsV,%6`f \8d.p3?MMAgfE?Hhr*m,4kdYkMg"=cl_5'LKkH$@pP`]H17e9[QBWK[c$Ahuma&(@ prX&(Is9)ahqbs3f>gt*ErClf*F8?nIRjTB5J2.+IBsm=9bj6;kM80G^*-['32AMF Wnn\r3>AFsJK5^==3s:3_kHK8.,_Wd,Qsh#:ZtF?&*1Lj#U"dg2T=]6 _;+)c!1a;JGTaI!SH[XT`F&^k[A__pObTrKjOslI5FMO8X#sckKO%RiG;VF\n^b\W %3pGDO`3JQ+()!b`EbaR_#MeIbuhJn/6!]!_0;r:GfmoV;:o"aG3&+20&GbtHn:A' 1-5HPGh0bg),JST!Y9d#0^[E.XP[..Mca>6=G7>?r!J%fi2bkA$0A!op+$pNjMHs ),IeG596MJ[1uR>`]H,VI!g;;5L-,*qu1E%!\D,eTOm"E\a6rKQ_4u<"*pMF>k%JL ErUB"p2@*,IqaDP;d3/g+3V1=RrufB4#<8elWS%@?E()5eQoTQ$NI.7+o#,=((XH2 OPh4gr?m2HRfE"jIQIIPoq7eeW;`P8(/P4r+#d2[)(U7;UXnujRps6l1hj"XZn!J> jeGlO>b4(@4?i/Z,TSheM!uss;WJ2i=_(VIdRnJ2W!J&]TNC@FiKHY0>enq,1UhFU s,[Y"qAPaA7[X2#e5H(]WOo5E5U/"s2$=@KAIZkG.;RL4=4NO:6W-s1M,4q]HOL "8R^UKHPEDE2Z>npeM$"'%%adaA9Pa8+6tm4_cMWa/eA.c!gbSQpVY,$VEnTBT5(c ])N`4^QdkF,k[8Q",DZ^*6`nU='$!rImHG3IX>!jG8mHHN7UGW[>"6t4h@8/33c?p 8LHF\,Trj_Ct?PV/)UjE=83:E*Y=tte`(-7H`UdE=66BqIO`bIjPN#G4ZD'+D5rY1 l\';%Ztj9L)_>AZe.rM##!Ir0=+e[sB/*HQ[1u&]AUV7TmOirmCIq/l!O+=Ga/Z(YfqtHsqi(u$Ep&r!VVO>& o&qF_;qkD-m*BqP=O&R\0DNeoH%3JLd2u+9IH0Cof5=ablLEt#5ITo+LR(02Dq3s? CG'JWE;-6h4/R6M7O?YV8s'8[.PU\%&oiT7"[jgGrsse+5l3pFj=])MpchXO8Q\6J s'%2TBD_fNs)XA!O/bH'PQbIoQTto91i`%h+0!R`MW_O8ili!;!0Pl27e8k2W8QjD1Bs$qYuO[)Xn?QJc>#2SAAV^PqcqlL$kCeM7k([ptVh%6*+ 3gt-aGilo5dK#$JmnS@P?g99TVnI7)rJfk%O9iLI>NU:AB7>XLJZOq$aS>OjP`O+q 4ugf5k>pkd2c>,c7_Q@)qX&IkeS4;]6,nte.@4$`pU;mFP\8jgB'rho:$,@Q<6@s5 -3ci`N0f&-nUEY):gG@o'^`VQc](hKI IiSH0jA5PHid\EM;?1]%<=869AY3ucs0tWTAh5%/+o%,Q.gYsK*-(t=Tp`A\Gi=?u bV#Bh@3p(9OX1eW[PBOj\-qMsk_p@d#t]b:P/)Uhf8#*:]$[2OA-"ec#M7JF-7OJB Z"1'Ki/`$s!;mK^n\o$1H>c/B+,QVZ9#(MtaY-q[+T1E]crBL_r252IAGH0`rtCMZ C&SgqLVK5G4OO<-5PZD9O-U(NYH\'gpo!pPcm0TI&e-^VM)6e.@KG10+UHq]B`@b$_pI"e1$6bcqDH2q!YK+ q/=b+ri9&cJNchQGB$i6ED((eF%^LSCGEUhI]EOd5<`0gQ-iQEBpo(i:dCO0CSV`J bbCHWL1OC+ITK0.jrk&PW"OXi"%%FN!5i/O;N!)0M1&Led#21!WQ0s4#S9-oKUOfY Zig5Wq)`0mG&C3o'=<2!Ir;QAo9^.A?n0kj&T.g]#l.YOXsUcWcD7WbegOK"Z$(%\:tO^+ rcu,2Z`^d8T+8*n)e2(?RIR%Xba4?cs71EsDboN0EBoj0o:-9-R44YiQ5lK.brYl`L6rM#'rJ"[P=e!=C`; [uPbQa1QP)^)B*;W%.#5n9Z[5Y&^_Pb[V9CVu=%k[_W^',UK?gtPRo6u0Oo@5(R 5M;HEGp`,f,jRpDmS82e8H0<8gJWIu@YDdj!oP?X#$t4j<*`2U&!9(;q5ri!4+E\& 3:[m7Q%-*6L#tTb35L))%fR2rs'q(HEG+BdULFRGg0"`NEg0?ZOlAGU*2O=oZ7-"k >%ra^g;4L[m?CE#9>MFk:ioY#Ld;r'JK]#0,m4UKB1b74GdIW>$D;5c*i_^r4,U"Perps(FiT*,+?RS/22F?(9'eCVYA&b:Dns-(J(--._D&bo]nr(Tcakf[P_ImX/7k!)^]'+qFO)8T\1/-5kGeL_CBIgH\eJ%.qKD++Lr5c0(H"0F)>d3KWH 'S:p?:-c_jlSnnI05)+jC_?gL0t2Pc;a-$A0C\)%Vf]j/"-HSj&Jt;YfP*?Ztlr-JQ6I:A9Vhl8">.*16Jj,h29-iqCn2):Z0e?1J#>R6n-=IH*>L;I/IDCWr]pJ= Rtj8@Ad:WS#R6CpN;%3.m?ruWNJ9O1!Wnr?LUG]LW&!Qd+U.)u(\RENKs;fr=)139 I@8?=RQnKGC7hgZm&lCo)IhRC&SqJXJX1:o/!,8!eO8=;[++qHea?k"?!V3"Ij^dL J:Cp36!*0:mY]P#MH)fse]NbLTYB^A"1;ppJuK3BK(^f3)%u "B-pIU>Z(IrQJ?'V7q+GqO=Cgs)Q`h^Y^pK]lT)sn(a3&f/rR&FF)@':ZhWPVT$<[ I`_2:Q9W&qocr3MgbW/Ra#*\S3:D*VHSeP'3YEu*)H%ObFp,D\W#aA:^cTDX!BV)K^glL& m"0ad&p0Fon@ok!5M6SQr-+X6nD@l^#WSlH"hU[Z=lWfO]* ,G*&>7hPBYqn3??]A2d)F4m?a1XBqeZKg$H%EftCA-$bs7Do6M$TLA:IK+E_,I?W1 c)!S447/mCBtlj#p;ZXH^YG"Np8PECcXqQH0&s8GC&b\)mBcD`O9N:@46)m$;$ug4 !U;VuWE1FFT*8?C>$.*rWCtM#B1f.uL")+teG)/KQU9@BGYKmK&W]RGN$Mj21Tp5> P_M#>TeMB%.>EPmFJ^`Sl0*0(oQ%t.6L&k7j)d*Kh>uoINI!3N]t=ZL!68!o4i.'g Ng,$"6kc9/GpN.=bDQr3+(+Tp@nXPQCO\R_Yje3ioA@2@qc?9Dcj6;h=nds=h!/7N a0]MhE/CK&Z(ZUiY)oD<=]JBgpogYd`?0p6;9s^nrj_*Oq2_\,M9np;/:3^3E7RK5EABAN.'SoPCT J>QVK;bl!kc3PaJV:Yr^;(])(clf:k#sE]M`?\Q9NMHQV-+[]Q!iYCeMZ5s_2=W]K W,j$S;?Hm1>DigfPoUiU_?,8crQ<(?0@KcNQ+R^elH7FQr(lb\8`IMCqtNt=rsA`& gV28@qO4r$nbZMn.L=s:`#rGL&WgAS.OENNac`L>d^2WgpE]60A,[,L#jJjl^b@^7 #lY/.-bKf5PZL'50;%aU6"Ab,&A@6Cq!Y[bJcAKhJ((WP9]I*jnb`1e4\C0)2nus0 h5"*G9/H`Km@\!7:oYV#):YM&6((:r250MGB%<+Il6[LXI_KNHD](qf7]fjV9nu26!(-`/Uj=^1BRo#jDR'L\^LrINs#/]I 3UP\*)UP'->0tPh6eeM=F&N0F-Mf&ZHH%/"O92rZoi>"NEO\?1.9!2kI=6Kns58u( 2_6g*AAE](XjU^_!Xf8pCB7/FJ%uX]BuJa=o/&sBNF?I0aO(R'ebP.]*ds;@;f3Y< %X/3a+k*MGkcS+H?G=!F^8drE6Wo,9Yd-'_BAemm3H)2gKZ3l/S!,:Ok[gs+m/2 b^W.aYQ`rrO\Scp/IQnt_eqJcs#'^%p?f7:r/OB[!RBDL)]c=O[MAF8#RTu9'`Dpke0kZ59;.mj)Dj6"=%[Y9(!$]b&F T*XSLNTJqYT(V#8`Y2Q4J$]khaFA7foCk1Ss68+![n`j7Iht]X5!P\0ff<#Dq<1fC 4""-[^4H-u+mQNuWE3]1(F+n%m*oM`lG9on43FNAf[SccbaAX9?n19T]qB?Q^rt`F $2E!D!cTaln7P(&TLB[;d!%B&(hSZaA5[l,IhjoUOP79tg/igm)VeXph;(^eC-a'n IPsXnC+&\P_lU>.;]hQBHuYaR!4`[7J,@kR_Z0WuZK-r@(OpONhRdtar6pLJY?dLf infWl[Ue5ZSo]6di;r8=R@tr+c6\cGi'._NWtGB^2'jA^%9loWU#Af=+5fr9Ns9Xa (OHt0PND-sj8,tAIjsN0q1Ma&m]7Q/T0]KM[E5P;pMc[16=+LN. MHR,&Hi]1V,R%+)q1M1#ArsuRP)':*6hL5L1!.,O&glD.ogk&FS_>5@=i/h@Q ^je*hR9ZaKS20)KGpk-IJ_eMNJ5LOrkGk4 Fk=#G6<:nJDsr,"4U8&`Ln4$"ZMg6l`O/jCT7d.h$fG#sngb9andGNZD\JmuaK4qH Rju*Ub)k%JL3#IdOR(0dT!%WI=rm^V@!'4*)9[Q>?X[8 "sDj"KD@sK9JIWW?S9P''ET%8aBpI=?Br8b[mQ>1.Er+U"b(/"jqn6S3Z^r;c.$\f eEmeJkicD358DDG&Yn@teRScWA/Bi5)X O7?jQH.0[$OoFKomRFh!VF+Ff;&1TlClp-4cd1Zm;aLCL;2/&i;M[+dnl>^6WXDN> <1SX=m80J@bAm-?Jb^md;Nn-5-n@'/fK)>(.u$=dlCU8kN9.p6;G XH4?$BMDOsC's#lE,oFlq9d(WE%*k6>O#q)feD"FZpR-)cq8b%(q[&']t'@!rZTES %m#2fb2r6DDI8pepsiOADk?V#qOH0(B7(g05't6Bj+kuXk^t,Zs)T=Xoj&_S;0X8^ r,fm;US0%?BZL"Ka*NorB*)@4#_K`jeh0V@2@K:EBA&da&[5fh>-tTNr4or_r1>]Z :7jGBYEqK%^&]rtTT9r:>lZ!s_Z.:i$t.Wc\lATN0IBs/ef_'*<3%1[hSHLAA:so! =p3f6PEH+K2oo,-AX62Y$Pp`=2$"LdNEoA@A0O-7>Z&"&/V>fK^T*:5#2M:/nZe,/!cU[gpcB#J& "M?_WqW8R&GB\AIJ'd<'8)6?mmf(m2oMP+E-U#1)md\6u*ZlKWnBjGB#?I4h,(1U.jOrc*g%PY0TED@0uP\sRH8A`m/C'5+B`T(%>'1%0Bq%2l)I#Q9> ?OBUtp^b/96K=^bUIBiRGAP>>Rgd4N,I-W-f`"S2_(tA^]4SqL)o8cQ[upZu O7_*[nlI1fs*8Fu&*H'(]&7r4;W++h!I$.$&cVh.1&k#jo)$TBn)*O&psnMdcVD'B )t86jk.] D(_22Te(_!J96;U(tRaX.WTh]RGFTZ4$NhY!-:5Z!(.+r=o_PcC&u7Q8SA6+QIK*$ 8GJgUs6og!4L)UE#p;.#2rO[*e0P3A">F$u;cX,hbm]C-*I!(.O2$/3Ih9>(rdW6. Lu4TiM[1FtHH(9^L-Ma<^Ln:3R/DL1gSu*DrrMURaPYs+_-5NQSA25ha0hQ"5Yqn% OG+mO,1?Sf+67@*1',!B`NDeud:\(/U"Tb=Y@he`iX5HE;kDg4CIKg?Q9gA:!9cbP 9`/Sc9S%`5iF[)>f`5H0M',G@bXU_2jXN[O.NGiM>:7YBMcS(u5ks4^amTr,+Tsep ?C$/cJeZRNda28Cg_?kEh&o"mMui.B8k#UGS_^-gn*;A>YuONk29ZT?02Dk^:5QF) 9%K)@R?9*t9*"/Wk/RW:!Fpb\"mE8AG3UUMRSpPf==haKs7(Jc\j2W8Q6?2X,qSQ# ?Bl$5d%Moh4.3KFGTg6!'raW#!]<30^Je!=OKu9gHjpVIT-nJfn_kR9H#c8\>YT*8 k&m#]f"kdKhK:/7`AcVIF)d95]hg.$Yirrhci (Dj=5m)D4O6N6b5e%ZuIrq_J2?_;QAp7g=9Qb:&Ekl'mIhVXprrT4FDY9"5LoT]C5 *t7qndGXa/KtafRpndB:cYX!#Z4M>"1?%kM_BVDS-O,b%n"h&h:-$[d%ZS7V>;!8_ bN>>>k+"jJ@c!7ObaHmFrkOaIboqQbpd+ePHMWGX2QUNk6[Hb&JMChKY*8mcs3^4A \eJTs(g6p/5-;FA'DrC65O&=f;\@a ao\[hhk2CE.<;n"i-OE8*iBO<:+SkbVON%CDF(*^A'`gj%oCe>mHSN?'=35h+Hd3,9c\uFL(/Cm/NTk*WP]\eh h?*2iWGSJF"@W#,rTV3qe>t5pX=HdPri`LtCqq9g^*]hQQ3oJ"d2V?gN=AQp"Af4X d>8/(L&WrX!dj! ?'j0t_&bG"O*B4$%Q5u#E^B]ZB-]QNV;(0EgZK;5(6n=D2CF7oJ4P+!55: mVD'leXMO5#&Tc3_'](5&7gU8R1a52<0j5@6N*M[g-O7(e8bF`0%n%k.);(#l d?G6japR->qoIE-*>Qk0mEW=Cc6mInMkeot9A$kgZ&ap,5cbV/a@J):4[Z[lII)YgL7_>cV8p8@f*hE;SLk(3#'pI;m$,Q-h9iha2= -`7Ru+%n^R9KPG"HDELk:iFW#>M_7G3\P0Q3H*<.2fHg/1ZuuMZXu;JAk\$&c;jI' jUVdcBuAZc@4cn(9*5C*Zp#M4?Vg,Fd^osq/fau()AiJS>;ZhBNbLGJ'E/74RroSY q00p/%J]'?r3j+7[3Pk$8?s@TFilh[WfTK@bgn1`2=`l3]Dt`YClKo3V+OU"QuWX' U83\^1oW;Lr%Af*K)^OV=91?YapD-hJdkt7$dY_Pi%Z_83%K4-WnhomF5r+[NMlZD 09%qsT5o4&IcK2;?/FE)MUhh=])M*T7aV.4pN_.,d.?]2h#G%AjUYS;^Rgi?p^W0Y89<`6W]`_KC3qb?c[[8;bUI\s/4\%4Ql=b;b6ns0*^J9&,>mo!?[s'qt"7"pNF(Zr]f0+ %fY@^$()?\oX"fACAe=tBWF6+QTkN\s-(F@1atWg+c:cds(c9H&7b_K!b2.=B[%Z[ rAX>p$#auAX%/HZrZB]+&H3b+(6*DMipp`7q'S32!G$XP+ZLR2ZEjj&rX3#.Mqr1@ 'E\a!7DPFq#[.=dJ-j:,>s8i$4lX[<+heN7`["^fD'PTb!@62P@3r%h/.o8i`N0!A .ZUP^M6A@&W%CXbr*Ng!:qmbHi.%9X\lp$2IqSu3E^1iY,%/+aM2QoQn\;"_oDeC] cQ`DuO%V[U_>bVWKD+'#R@K][Gd^\O'#hVYQ::QjML=BOr2''H-j%s[?W*NZGR+&J o05@DK]Q@ps)'h1YesD-g7q4]0P%:$s(fIn[2"_U$65#W$\ka.r?el_5SS>f*=H0& X(H'G3UfO=,m2]\8;,YU\KHC#q,NT*Xe\38@iJq^aSCu#PI/[f"j+*_'dZ#cP&<]C 4F:))4n+'P/MHCS'm31?m@mjT0PC&0EC$$rP[Thg=qt1j"[AL+Wks\ocD!U/j`k/2 lq$I%"Fo15)#V-i7_3A9[X1c`B3qii6*YK+[W>3KI7CY--!M3"9b$WIHX$BY)K"Ut UV9^(.[3PH,gn5Cq27%>dWE#N6Rb`^ecrJ`FXd+CW%@:3+?Gd(^aLkc9+#fNW;MQQ ]L#b*Y,&Ui>EdTBcE&OjoQ/PI-+egVT4mTc-\)OV_o%C`6-' c03&h>!e8C"?e[$GA5:i\LIP[(-UR-iq]&a*l$Omp4qJ,J)')XiBC&qO*f[>hrX_& (@k\YkX(T%mFZOjp9Y\%J%*Hk.1]rt#O0m,-u@ZDlZL'\QuaXlW<5L6]u:GeG[b8< K\[ZT\m\&E9^RK^.;6O6MLQX9L"Nu-T$]'-D>g&KVl^E9'I;bJ()b]VF:UiUAn,/itFf35p;B4'>(1F9PQWM06M^&DlBOPmC]&s7A J'bGbP4I,Q@iq^K^6)u?@S']HQM>i7?dC/-C!Q^le59^'?$d(Vjb$FW0h$^5'Zgo]sntcZ7oItd% ^O;cQfl!qZ1mVo67<3[F<0f,$XU5:n8!9m8U$74rObZC>b!Ml9!74A9rrQJb7[U(h j=>NO8H(3o]_\/\MR5E&XYMi/,W!"c/Zb$OP",m2TEXF)#6KUdTL)f^^nq?'(-i4+ V$&ZOqJt"CK)^2?8PAHHqc'@IG3mp"pA/CfGPeY+mO*MT0]hW,c9GRhGl%hs#h\_L /(Xl)Y5>Cbk6hl@lPZ<:YP3P'b^&*`ZCQMUnQ",IAo3nab;9#p%cWY;:D"=\(L;oMC,n5G,KO:##5!+"A/cU:<,n4T`+%?O.[(%P=X ,"825-knL'Y"0c70:'PYqHk)akA:j=LPsnR`@W7=jq't&YdQ.%,REk)KT)lsQAr`X Xo9]ZIEi7I?QAaP1$/,W]_h"fY&A/sI:oVPHeUIVIeuUmG<7_^G+8*XMqI>/fP?,l 9/c-^/Tq8Bl!:"t/!"E,0KND$qIVe9!m#+jU?Z:Ms,*V\12:lE@T,iB1-Z]V ,WYd0>Eo?h+p+_/rSQ>E+T0Q$]0#r,Q[gjl@=+lU/IN^!mtcL@Jmc:l*>&;N?QT?'uq;F(HP=]@`rY]WF?Gu?[Z+rD9W%/.,Og$1,c.YFllU!/]NEf"QU$0Qj= eWMbkN2;a"kiK@bp(:JJ/cbHDo!7?sA:@s.2Qn:1[47rSQsQ@'?d+DQ:CYW[K]^]M ZD`>ba[+TOIQ<7@ga%@lT,LOViZOnYmU*m(DU6t6c?JNR,]Dh,O/bca]1C8-A&$ke qY^HC?QYs=qba80cFNjtamJdZr8Q3bV`QhgH94;a%j-#(/'5]08%=H=P\%V)d/Z k+(=2E-ZNH'mOA*_cr%`2eK9q8'r[]RqCaBWtObsK@AK\Zikb-"5B#ibm%X0)mCq' ZX`&K-VCS3dsqs?3.NguJeL`t%47&=;>U5?G&O\>K;.*cdSS:l"2/U)FJ.+V31'M? SK98&3aGIocq8RekjlBTFAkt\c0"ri!N1.]dH\Uk\!$`r)uJeAdO3(+T:^*!q@T'4 cYWOL8W^^=X\7M$Qi)sF0DKpCcKDN(^&N)hpVXm4n*T[rqVU93m4+/'JRaMos%u],aFDuK#Y`qZU%elgch/(2A,`T_(#+Jc$+:@G!:[::Y\\*)l#L_, k+7aTXqHP@8Rif0^lU$m2$/GFXROQ;)sn@FO!5kZiJ2F "SEL#rWJ5e=S"b"D&"02.Xtq,6O\I##iN0R+omu0Rf@qGqVMkcp\:A2n390C&4o.B 'MnM]+oaEe7.F(J*t[B0(Y?"3lf9^;bTi3-jUqKY2&6c&#G_f_^[s`&!I^t)io]c; FaCfo7JMAbP!<\3,lBm`k!5EB9'Y]ce_f42Wf5Ko8Pf>?Hq%N $WSqr!1b@NmhP$F#E7a9.F<;#rL3XJF^C\$[gRdQS)<+#1i+\7kc($hDV7.4L-JN"KD,$m W<&+\lH1=B-X%=N.#A!r^]7`Y:Y0\RC0R]GHir:[NfS-#j0I$ ct/2P1Vio%g6?SOlBjVD7*-9H;Fa\X_s03h:m3T3:@;1?>_i1`kQjR%&'CU0n(->Z6h_NVkKo?ac! 3%5u"*/6jTQV-Kt),2d-M4Ca"DCO7)pR0$)r7@N5-3K_2"i j])]^lQ5V8L7R4kUASG^r24Dm^[5Lf^>aT%_g?Cu7([fBMhlr:Sm#^j4Q"$:6a`)XpldWf(q4BhXd rtEHIhmJ9FLFW&A!>tqbOa*e8=PZD !(/r=s!.=U:"\)3pqVBjX,uiNWr*)o[LAFPk6^;R4%:]DN`I8lb'+7oC`b3`#h[R, "t9OX^l5f(,%*fk,+q_tJbB-O;Cu-c7iMQ4!]2VG%'_s!hbNFY\IOrcd].bM_[RF>8 f9GrA/,F@Q_hOTl@gsU]8TVeVBpBQGrNr898maZRXWH(pN%%CijMaJaG/#jU(m*hg .LUtfX7U2u\i"b]qSGNsaf)=VZF>:3\95ujE;PRsMLUETJHMB!_#@oihBgFL3Aodq fhm=#bY\@%`DGOOfg@MLNh>b$/('L2<(LZW:0`4=P_Z+IP =\H&r.7r#WjYnIlR]4/)r,=#i)LsGj5W;!U`?O#^s%=+$f)LF'"oK2<2d4iT-"r&L +;,6,U?104"YW?iMs;!mlB-g\.7+e-&-7?;beYZD?B92T5LJrkjIk,D6''3Am`u@nnsPYT*PnN@sS/)1,CS^8+65Y#0:G<"a!^o#`UeLHMg\#:s5h)FXi%+"a0f7Xg>=bg \S&P^fKE9GCU@QkE#D'Z[K1%Eb*T_4(G+q+cMVZFM?%;jH6d4*/HGc1!;KpSaH5!# "P(W,C+?]]"qf3[R>a'%4*LU&hW+XSFo-Y.?NJMWS*4_6$r1RF!RUtA5nGDLaC.@; TMJ]p15Q9Upj`83+'9ojPkG#'VEbWfYC.Y8>^uNECGg`H/-[(YaiF?5XNO"sIm)!6 s7PqQrbj>1pojZ5:W2Tni+]!9r_Zl\eO39Q2cB.HF0Hm@K%-c j/f)6@'6hU[\EjI?q+KbV6-7aQU:n7.S<1kllcOZ=BRVbArgU5LUDga!jqdeHZK:9 fMk&k?')k,"UcsU(s5:0uJs0_->n3>G&12/ej+&E62$=Tr$J.^=/$jX$Oa=+"qi Jl6""aE.f7NL3OP_umH@LcH#4P!l6P'(ocX-WQ[KTo?$pH`b"tdX,0%u=\ k+X#/?I,(jB2.VmUU^=OFI,%@(dF]i )HB`5eB-N]Wa1m+63N("H2-Ol]0LFfGm[d(a?G6T$E#Fr.+52>Q* BTLL(DU0^-4>-?>?QF6:Aq4o=!.1jb]AA7tY`PIFTKK-M]HG1rMm6pjf]?_fR<%lG FDQ:\2BRT("C[3sBLR/m4LU0*m@dtc)!&@=o);U)G7(c9)4Q])VP;/L_-!5NVJMkZ!Em:JniO eE+Ur+!;((k-H+>5r0/(-o`k'M+OSd%mM:"[K\MWmd4j)%Q[. jSoVfZbZUZ-bs$Y*:SG"aB=jfq`fS[N)+ohm&>-u?g'/W/,t`hS\n"kK_G.8<:?-<3`45@V\d(P)VVC/tD2TKErDmZ(M8N#XBsA+%:^oQ(_rebN`f9 \n#4iSR4m&YG&@)iC?%1U,*l0#a#(M#kJ`#YH+GLf-`L6cl*kf9hc$M59YM_HQ'@F Q&#Eb#LIZggan6]BEWR^RJ\u(In=G,4\NR#q%MO^s#V!J$*+/]s4;brjcD^cJ*u#t /&91h@"*>mla)%Cr"K'r2\cB^"NVM7!;IWFJnjnns2(ek?htk%rrF,YrX>QmT6V[4 Hp[gBh/)"Us4[kersr9@qlBsL(3Zmh\Aqij1DO,QkfZ[7!U=.-&cq-Mb.gkX"S2$4 PkXGm62j^Y:NSKg=ci@?XNg@FQ:5".Y[D>$Ch[$/29g>%bcXCMUo"2k?p\-[W\,/h (QE0f7s/WuLk#M3d=AK4`*>%E>rsjh6L=UQs6j5imp"9]=O\BsdN)NB*nm>5r4d`f @HR^_s72D5nGh];)rZ:1YsbKUotNhZ725cP>`]$.GcCHUV!,/mip$d.`ZL$*k*hNh $>*Q]Z]\$5c:uMXMbQnUVo8m<@fqm'r.3p2^SGP8`$k)-81u**'-\U:':qdXhXjA5 oGG'S"IFGGP;:ahYEHPX96j?n?0FcWs.?F7s.>mYI!s#rVi,FCf=Y1&\?F][=RZ8o YHEe6Qgb8G.=eRW7I.f,]tQSsobB67mp@1+q;"@*2g5&1Yj?jJ3on\NkefOi4$"6P qXdoBCKcoZV.P^#o1$,jj1:I(D=Xb\DTNHrXWq^RBCmfTe/iDd/o16*F6FB$-PVYD_W?!_u%_[pg9_j3rJH&!3%4b O:)_tr&?Di"sO$Io1O>u,$q!KQn7DJWd(cQIZ.8DeLuq"Q\A3c,.;9>G3abjFG/F^ $9i&33,\G8`9)KFa5b9Jf*aa+/%sRk^"A<^m"I(_McT#1(?\clfIK#L72>X0P]F=Z q/dMM=9c2u);@s+%O@831U)K\fR<#:O\G*I$QpP9`XZWiHdf4dFOF']drZj\,R>>! _WISs]rC'kV(Uq8aO_-Y.q\-"W;J$J5;-OHfLbr#!;WrGPV8&l"+NT5h`U2rmGf>h %6lt[nY^H,pa=:H'868?n,'#q^HU\3Q2lqls7)2kDg&_+[,?=SS8tLaor-PRS&/s8 h5@m9;c4>T.#I#i,6^MUI!.WESL@lEq1VD#&&D;ms/AU8,%+^TO6"&:s7pU4a1h]! lW%TjCNJ))T0Hp:5fJ3`)tuQ9jM-N3?bCNkFPB@>Nj4JtGg4!AZ=a+NikTXf464WrO.3Sq/Q")J]>^jVC#Jf1E@5.;!k`i$+Lk#:-)g4G_'3' +Fh9.+FeuiMZ7&[+"(>jQR8e&r-U./nimt?^$sFb^Ga%3r0S]jKPUS-je#6Q?dY+Q T(W*'hhusOs#f*:3<6eq;BU;dbcf,R`P7Eje<)n)c3="Wra1q?:XMRSnQl1TF!:$; %XZ":m^Jq.G^D%+RRMQ.3k<5(.lD$53n;1iaq@&?<`KG\q<:DM]eq%Sg*nhF^BMgl c3NrZmV3!bAW*[MLk%Kq4[d)mXp-'M2$,h3HsBl6VCM[:E;p#mqVkpnl):G!ZDVSX TQOt-LPGi8;#G,&051amhm[F3DlXHo!;sTUH.DqaV]GbTl0kYI8mJl-CmZS4'/oY37C]0^\`Lajf?g$ufp(>#neNkR 5rAuHs!$n259F/'s,RsSXutaPo"<`"$Q^fOHEOon.fW_Vq?&,I?3s_Z3G:8Rn>5)* chlLC)XS%5p.m':lB1`:L$<;YVOAA'r/d#"])F<`o#kbM8JnSCu:ZmJ)H6isAV7$EMEr,b:);#DhDX7\[[!KdNmH'2Eu.$Gu+"A(B;m*d1#u5J,nO-X>U*j#M5Vk>18(<\F3@4^cS=T]_dD J%4G8bnH[U4QZtMPWq:in_:b@,-Y]mSB_X`3,*ToX7;_CH]BqmWN3n3A\k+8?t"&. J/ulbN8kWuEXJ!)75R:b*F8YK`fO6V4o^9so+N6AIR`luLOWnIhg_d"Ihq#C*Yf(\ 5A\OGs,WQj[O?[FYi(P0-Ja)HPP;S,mC>l^Q]UFY, SV-%N!c5:]buoq$3t'($3?su/+p,?okuL)b-T=KG``0?"A5*J(1IKMWk;=NoeUmf5 K`@Om%X_rk95:Isc6jaYhpTATD.U/bVfFb24C/5aT?6,iEOkS^'_&l!QUrHSTKNrj D#mhUr+U\S0pNUQX<7EAn,eF31IQBM!;IXfJ;=2)ce##`lI(Io5WenqSF;j@F)"bS O.OlNi.$hQQll5ZDp34B?eJ]B!6hW[Acm8b'G6uM:gJX^k.gf.O75@PraZ\]580qi6>oi#b6b-?X+onhqMZI;? [oZd"9R\<_;#*&r+nN/pftmTVXkc*I9,AEB^MIam1,gk.2F7PjiQD8N`YtAI8Rpk8 TkqqL3iXh7+9`&NO'/N\H5brOg[N0h.JSD=]F#h_(&scrLUJ?*+'dCc?W-?!dLlIc RZbsWMl)7ii;^Wb#4TC(ZUD"=;or/LBnf0]lparf]j@W"e5#Yg*]N8*D4'CH;tLNsKM7ejoTHNMT'*^ECI!`C-a_OVV5 RMk3dQ:MX!OLiTUM_3R9"a8a_lMl(;OoBBWEnC?C4H]Y^JH(&5s*+q0J,?VRjT!g5 m_"EB.=d#cJ!CuP&-:ZQjTWW^^E2qAgOn@t5NML<*T#E1rLXo7J"S`DY8R813i,@d =(FuQZc:Os8Tj7=q= L<'s$7'C'`9buP.Nn&t"[,OJ=,>(c?irPu);'D[V7!,\a%e<-AGIGtFXi[*qA55Ki HYii"WK%5;C?""6inE_Y3R(.n2CcWJr&c-PR=q`)i@&Amo2TND!(!8Yd/]Fe)'T(Y %n43s(G"IaLtDPX(*n_38]8P=_54.k$(A;9,:CXVMsM3KO,-/r&X\`:cRHbu<+0"] !IM1;a#Z@Z=^@Z`Ek^0nK)5M$!UR4&nf,K2\&M\0)oLMO-,2B,HFnt1RYcDjj`F5X I$s#8WF`udAs]Ea8EUpHi*8EgVA=Nk)LJOuH_d0RZInDD_1i%0)n+4c(1XW&-u98+ 4-WBaXPW&r`9AQ]jc'<-]kQiN/L6GX^Q4Jj52lFqUTUQLIraRFkM:Ym:V#L]cT;s5 .q$a"cU7m='-j.l0DbV0SB$tWHi3K2gL'FDpu%hBRlakmbYp-T4$D#uiFn#$%[m2f ]8O'?5Zd3F/G5,A#79',h#'m:_Uu<6"EY#F$(YGG&=(Zij\0dqB-gJV73);`jR4Mr 4'FF%g[6]ng4VKEJ"%j-p"Eba-Frj(q)-1eR>=\BpC(MFZb 7LBpf!i2:\.0_D'gWid,18QQr;%&$.7,p+#gZt#,CV]k)#gbbQrg$"l3$3q0gmm0J 6>LG7[rIf&g_:;`T:[_MAdSYP!U8p$#U!#Qc2[!3!-(YdW&YmmIk%#npu_U!njh3+ 48_lBJ0P6KWuckCL]b[jHSlK8A9A6_MCGJq("Hlu@*@gY!XdOL!9&D]5>h=h)RBWBq!c=15SX6n4feQ("7tQ3')oq0J&;4^rt!gV #&L.1p`EZ>ZPoBo!9SLlq&u&Pa#`Mms"AocEVY7\n+tqq%P1i<(#5l4ie@n$gg-1-Qnfm3\i-uFA>DW.5Y^]fbhZ%Y, r3]IRC:h^OAj_\USVp7J=HgL%^m+C,BN&@Z;qT7R2_fT;N:o;YCCM;Qb5)H[9kdKo +ilmAJ/+Q=&t)2uVoAoe7/>lO8,ePVp&*]LblroR0\=fKcKmNLPD5K`8TRV%__TYC /*Y&%kr2g;+!)PQEnoo[e':0@jgt#ia3$:6Q0Va,2gnL*]]9=s?`j?8$QpX$jg@>t #k#@j#HYT%J*0t,+"hniHd3St%lrnIa2=Keme2*YdI7!$fSTU[!uBTkIEIKmAR(O] ,!_8OULnC%:j6.'%X1F6m,.Hf;#&`&d'LX+B1IR!$jSsW'QA(8jSlltK=8#?SY7jZ LfY;4WUWC:e6@@TXmg./q?)T[_t5iY03K?%Uk@?8Sr$09uEQdAcscrqG# 1fq[T=2m'ua0n8:1r\MS:PQq5j=ckJP]DLV!M63AlB1ctFMdqo2''L2T.H0Q.-*eIJJn[4XC< c7^SOY04r58[2nSf[E1R1)IRTNh(*_4OHE?XI=18bQT0j\q"WSCafD>cG5GS@ZRup SlRnc@]-k%MS5(CoDdK@&leiQru]R5gck1`Nr$NOj`oXI5N2WXIWn'Vlu/ #o=:GF4kQ'U*OV2%K$b0^T<$dW*k/R2-$]4rtFuG_Z.Vf(.<\@PPoS&BA(6TL]@7Z =[Rr!iQb]t5MH%Ak'nfY2\285_k0h^s.T3P1g>HS*cVmL8-+MHnGe%GjSup2fGLV%<[VVL6#[?pP1I.o!L2d_Pl'r)=[a7G5tJ[5#Jsr+6kN$/Oms;FbT,7HSNk :Mac:Ci2ojZqm((\Wtao7VciGs"cXI'WCiTkPl_A&HMn%!`'Cj$3(ZE5[+Hf+6:1; s53K6;?*g7s*+DP%X58[K`AU5bk:Pif;J60VLZ_np]:.__#JZLT-g^HofpN)fpq4Z ^Uf[>X@<2mIA6'Ur3'cb_W>,)rg2+M!0@9!b'ZKD*ksh(n3=YY'DK6N(&oN7q4g(V i;\r-6:;WZ0L#R+K@]s-qS1okg2B7np(9gfib.9ocu+>\nkT[D7Z=`gnrF<2#lcR4 s,6o.78)sZWHkYQC#7>rDeTF+7M(#8i8H*4gd\YZpGT['>u,KZ#W.3N$!\LnU^le 5DdRY[<$#oju@6WI!\4sCMdl\'f\FdW?S4E4;qn3Li05MBrQr'CQ.;]-&?e;&j`g. 9NOb%.QKkm@&d38J.V]CW"jE.P_r4ej!@5UEVK68`_/Y9TCuf@)cb:SW,.;l[7!@u T]=%6El0J\a=^nCO!na>]P1Uh[%R!GXnR(UiX5\"1.\r>6@NbQH[>sFL\8]iPWs*( rj!R7kKPC\IQpDMGJra:!LJ"V>i+adH,E8NPo4qV'73T3>utL]b-7oJasA\9I#HJ< q@0>P>`\#/mENFi0X7/dfWd3u#nH3&^%8H(.IU#qcok`_?+tQ6r6;2M5G!$g=$9m\ 6!&J?oso._)nfMH6X3pW).2n5atpja:I>9[h7D\G_g/G(c[($0R-24*nj4,n*-?UM -fsJ'q<:Jn\O#D6D9`Y/S9CmF(PEaJg,AX^\smJ_[?X&KdVrVl1p8(a*a<:XL^7*I"kl+AYnMO1>e8:A >(ETteJ=fbT&)%jZ\hXB"Xuo)3Zh&3@7])i_H+=tBVMml:g4j$!&/mq'=Ff"WMMJ_ [;Aq@K_aB59TVK*T.1DLMo;#m#n)8"#@_\==I:PuV\9;=U'SR5muY9d6MlH962hAo ,P0N_XtTc?rnQeNg\X;6_YS?ZX"co]^H,@oP:!8=&X+;u^SX"ugVP;]YA#M-7"D;J 7+m6`mpN9m8,alte?DAA"lOl:=\bSA'*/(,)-Pnt+`#qR(ZHM9'9(Y'62SS45f<:> L]>bMXL>Dls-KG>1%jW>!FUAG]"C[AdB0D7doI"CCIa?V':hkHS^"M'ece_DP)[(i k5eeupoCLl+'JZ#!9aIqf%&=0=\HZ>W=JZPq1rq=s$N=lj0m[0^=IuMhNgb'N`eC$ J$f3ek'o_s;#fuhcu,IS/^MKS-H*6c]W'jjnGcltn(d0^#N.XHnaCEj1[@dVc>=,FqS2#-c^p0Y9o+5=YYC &Z>*D3T%C.[doBtb&cDi2giF@BG]mUr_Vkno)FFD")kpq\FMCY%_hlmg'dQ'=mo-. pAE)gp\4B.^9Z;PnoW6R".P>'&p>+jo8;T8$$BKBhlmA[kaO8LKBr+mm;P@"&8D >02\WVi2]Fi?e'*$+tG]TP5(S+d-'=WP*UVF4I.bMWff#.%n::$N/d`)%HS#F:bf+ 8@YU3QV3L,1=/*]UJ0(8Ql7hIf4n+hXOdDD)TZ87K:bi#MNI,Bgc,lND#qN8*s[W& ^T$-h's%>3b$,LC/[;=a(j12,Q4qZ^O6YfH>50i._T5#?k`!AsVp=n$BuAuecJ\_l A)q"C@dbnBZ_0P:6i+hem%=1&Pia'7dB*>BXk8D%PX!Gkr\3I+]*\%TA(Y^SYdaJ6 f=S8R:"W/Bp:QjbN"!f?sI7*UeDI/Rqgp:5Ujp\$EBaT'Qh_=-9qm.96@ cgT/)IeB)KB;[llrh/#<%_KHaO8SitdZ"D=,2g>2e!Y*rEJqj\Sa1IPL3\@)8?6BI K5YCFYc96R;S5T:NoI=="@[=i;Q?gW"q^hHpOD#*s52Hq>QN/+UJJ[--=49OT)gBk VEg"IBE?KQ?FoK1qL<4X)#Oo`s,O@)_Z*$o:WWRg;A2;`!7:u*2dM2/5V5C>SrkLY JE?d9,r>eB%tu^?[/dK@]-Q2`9'[%cB^d[tAR#EhgY1m3pljH#D+3S_C2Kh+[nmD, ,OKPdm6!GFiA7tF-=;ue&>r)f8H)Li[R?Q1O_3V!/0YRWU't]96p0O[a,(B%a<(sP VMQ6J*<$c)V60LlqT9lps&BJP3gKjRLb[:l?q+b4$%!]fIrU]Kpj_J.CA5AQh]g/!i$eRjrd0tg gS">6;f/+l&cSCDBdB77t,$(r9d>.?]U:55=PS>%-7t&!W`7IU#Q+7CAkn* m9.Dj!k3Un!3EgGE9F+uSa-;@?4H]+SBnqknbhSO\)/9HIr1\<1Gf#k%trbWMqMr@ =AZq1b7eKPaa81#LWp.'H=NZ>^H<*QI4jI>-3)RUqu:EQ#C(7)qtdD?eLBr77suKD o/U7Rg1C\]2h[-i6bB.&*MQ)a+B$1>!joU73aS29+0+LZlhM--?Bg$T/`Xc?R_qOQ +oL%*:/+8`AS?.1GXGVEI45Y`J>hVqBMN'-YU)TX9g[_CM"0fkOoH7b]EELa,04-JP!o(PhAS%_McF`U($uT:DN'Sl BB7($H-nd,i,P1RPLIa[E" Yg3ehT,kj6fh;=b:X(4-r9aU. YBQ(8?D:\s-9jX[3nqF>;7k$M*R4o>)n1^\VV431)guQ\J]f fA_RCa9=#%*Y`NL:)gmK,oJ)0[>bO#Zr:0hab9S3o@%tO#%,:_8lA++1oWH%/nN/c =Uq5_('FY!&/(^'Qm!&PU'SR5O1'Z<_Z-?b<8urAs3:SEq`h+u"S_]K+b(p8#seKC s$?Y,L)f]t\gbtas.:&+/VWJUde,0laPTkpY7?&^$NX[I5/03%r'+T1l8&LCJ^3UJ 9CAH)#NS,%IFnM:4m_.!,)?3GiLcteL]A]M9*)MHjjB;bKB[X#U#c/Xd8mOp0&563(Zae<:"?#NUX\`cI=:Dr=@Te#lbS/=%T@[A)Mi%,bPM? 8HN4MJ;6;k5S:ekQZM1uXU2;q6i\D2hPDgod^FB<-VhsD<:OGJBO=TKOW/-NKT4+O [qIpci;S4PR.BN!jgWEt5OTcoo+:WKrRb2lako3Kq9LM\\#6J14G8-(K)G9rne['Q TC0T\hLkcJ-hb#dBFj;'cn^PYhAINPhN,sBHbkY,$9Y@Y.I`Q-HW#ADIus\Q$T_PV h-')?gEBhC?QDX@4b#H'iV!Ec<;\u@^%/8nb-PcP(CUi.^Q%:rE9jh0&!q]q+0YIq Jp-):5eJc>=h3mGqh!-)B>)'/h#"EV*re4YqU#BtIlc`ig\p2WG*64i9R:CW]/o6L e,TXjJVQoO#F-6OLg4TI4[pB<]5.=+.Y?1s@>a&8Bea?'LlF[j8d5k.^UsVs2$2L\ !V!jXQXLQ3XO:((!+H6OpOE2Bm=/U,(JT?:2a=P%6:AWF(1=QOO+;Oi!VVN'5RRSk 7gHtT(!]qiVE4=g%G@Z`:ntY_D:4A<;6!C4e-aT9Ro$u<+(9%K6i[r!e2I*.bb;.Q +.gSk!ZFSIi/3p(E=*k=Yq00-a[F1a.'aj)&Kh^aKE%cWQ;kqgn1mD%eViA;mJj`_ J&f^8_uGD9Tord=q2&2Pm?MdKs+tG#Ys@5$^Vg*Hn0^S#TC)-_[\WubYA5]ks#VD) Jc"=:!JLInlbDc`?cXb@j-8W_o$;pI^YcE`IullKe<>qqoD_WGHa!l"pn5P)n+D1F [04V/;UX#sdVCE$0pHhF9(:iT`3(Qp:^!^HH8S]T\sa4Zh1VJ1`mcbVC0`O&c'qo" nX!ep%p5+3KaU2Nh1kh<5l_LI=o_2Gpj^lE38I_!Brmm[$3ha8CTr'Z\Z7#qPd;el4Y/*@1bC_D*q)UYp':UF Dt8SfE'OOl;Rgqf\rL0H$@r.$K0A6^g__2:5pY#Ra#XR4R:alq9$/#%3WeNIAaE4i YtlFV^3PZblhlJZT5hK&k5RVh?M(u'o%gJL,l1hL"_)E3H:D[VC/(a(\>)Fk#!NC0PPWFTK8S q)fgp4m2^Wrn$hW51c]`H"b0@/e3tj,Q=N'J;$qg`!m%Z`&aIF3%mhYhKQ_Vb4'@l_,&;M=`3(6;TchOm 1u"lSa/VL@3F?X7^63r8n!c>tt-($2OE[dcE[8q(D6; B#DMDj;i"#=qtnZPW9jCl:asFc0!O=701_;;/ e6;p%!WKi:r#Z=2'2UCgQ[QmAF$]_R4lN$kU$"WIp_,c$@ho'\^Gbdr!WG%0#(^kK5h(9;s3[c0d/GWrCVqn, !WEOn&Ii:`p$0W0dO=%'2&cINd&Nh?o:nT/WbAVeVP#6LGrhE_k=sqPo_+MOJr,4$B)peOEh6M=>MM8`9b^W.aY?0?nO](-6%6ln_N[0`P&a llc'.rl9c4 )1gWJi+:&!hR!Td^jfEYKA`^SJMX8^R+.-0L6>=j.=K62MOkm#(lRn8+t2&J>G It!^Znq-E$j`145"u#>jX/;ZE"g5Sas,di98)?+Qoa^H$NrP(,pl-VE\ ?+#ktQVUmh3-AZ/bmLSrT"9bGXcq'(>$de;H@7Ld,QDX5o=NP3gT/`ngJuHN<\QaE C34#1q`N"&N:s]LD/D1:?"^T:bFMYLldnfIW0fPH0l_(7(JJ7OKurmXP@^$GL#o2< 98r`U=`qlDCCuq2^6gT_'[\-hNRe+>+6,L'i]]B@q/)bGK0>0cG;6l7DJu?.=@N1/ $2L?AN;*4Kk<$a4)CYJ5.,.DYCZMRN@cP1EG"]-O2L_A]DL-c=I;Yi*n6Zgq.??dT 5i;]i,9Y\@kSAE[!XNA1gDI1!<9C_Y$;d)XMtu7:&_s5EpXJd6&,pJa7$XCHo7`jH ;ZMFLlhaS:(-p<*NeGC=EQA2",A5V_lUsK[`;r[:rj=5J._0bkbR="a=)l4#!h>Cm a=kY(fU")#5WMH_>a6*2aKN\Z!Fbbu`T(G0$c%H=ZkJDV^I%2j(*FE?K*B?9N<&5= 02;0IgH%-@=Coc5^qV19#%7'^d`0;;ftW0/K_$]+Fe`*6t^q$Xqt?\Dq:ZB Im[3I55>TaDpUtHo=n;aFVWkXR]tMOn/?EPdJQGNs1j+N1"FFV3b<\+ISrgIC.D-I GDVto/HkXj//<\IPmM)=6sp&eWZVnpS?E[llT_'<[?A)Ni]5_o=]H@<K/As2bb&,^TgrPN-Kn@r12#XCEHVUV^X4"/cA! :%J%MM"pG[EOFgdgR*RtXNgBXRpkG?S`;KMbh:,Q])^+^lmJ7U9jiV#b=!,eFop-$ '#SK'/]Q17)+\I50O12:hH+=Y:5^91!O">m[tXJO?IJG?#,>fJ\e3:^*#.%4Yo(/h 3II+U!aeAD!mo0ki^(YodEguQRCf#&Me>AG)Zs%SMtE-Kq( 2JY;b=["Z%@@A ^#po8a2sGW!l-hiEQc*@r4%i.0Y9j.UM=fCP$CD5!;/",< X=4bZF%7leJqhU@^HBPbELQe&,fooZ8^"l0=oNQ^o$>2hIiMl]3F_iT=9jMj"/e,R a%]n^AcFo(o&g%KhtOGEmkVJ`NUanu(AoYs?=E?F!nu0*nqBj0kpFQHCCP`%*HQ*:74U*JScFG/Hn$Re\l.nT?J .=aIs%4hMS?R>6@c1>gLq)/u_[[-]rCBAj_6Y=o(!<;TbhtaC:M`O]+G=?Geb*e*" k'o'"(On.=\'@\MD4[h9s`H`k3p,Zf:?<1_6[03*RII\@:NTZ@qF .L?(i'F3\8q%mER#%@sj/-%V\ja$hn(!&$eb=&q5M16Bd&2pHr,qJ PXkgA+oY!SN$8r+cV^[`J`I^"?_3[EX5>:mUd3k/&aRfAAti>DQ]s0\<")Kf/)Bk13U\eVJ:)-3Gi W)S;AWoPmXA[Iis5d ''=[^]s+[hCTpMoV^H[S^B40@n6\(U!8,>Dp[S!-%?g;S=3Vm.SBVBWTdYhZ?@*]@8JK"qQFVK"l(7!8PGJ9(aH8S3XCp61HN!eCbrK"g#;dQ;N;2'S6IFKR`? Jgbf"+DR>fg'7.UP4"/%YECp_k.+n.!;I?DnAbV*_gg\HIt\H`=e5:LF\7rY$(:s,[1==&=A"5^p)0r9Q+C#QJil6u[$%HJW3)XO6NO ,7*"1$o+@@@m&R9qdUT4f+$f5=!A$^]n#h4>f$R=cqQ-"p65J3J>S1;RS3Kp0elM3 L@jdY_`tVoTC&J8*&^,.?=uu%c^Bd,@tl3-G:bNK?_'X`-d"X.VoO%3*AN%!AF[]K MoS2^IiL3?l_k\'^oJ-Ir\JSHoBM_-ZQng$%iRZa'O\E?:YUhYs0pT9JH)5oUgKT[ \^X>;gHmnu:#/`CgK6^H-DSo/2X(r[2Pj*L9!g10GKc+jON#l6`n1@j6')8/,m*Ko $c)Zn:3D?e?dF5O"W5;[AqL'=g>MN!TA0(.s/Z!Z0`PM3J**YISqm*UAPVMpK0[@@ J@N)`hckde&I/4n'`6AoqGcU(X&\!f.U`6KF.I9(/RO-/-)sUV94k'!&PLfO9I%QrT+ZAYQ2_Yh_Q o`Y9W-Ge/05KP-AG[:$`Q%+!WE2[_#f/efE/;8*T0/Rs8?I* DlSi$Y)(GhL(rhJ.J#Yuk?%!q(#"_.WS7^lCt%CF;ikgZ@Vk'KVFQ>8$P/gI)DF&$ B;3/QV2l#1bDGEHaRs^Ao!7G04RKXb[RcuJ806[me%+*7E&rN/^i;-Q@5?#T'%:hU drQERb0D]eQW,%q=sP;/0-Zsi2n[R3qJ%`'!W$X\l0lNSQRAc-B:5M2NCPY,8)EEf I)(/Q`=+SNbnOscRb:dZJ?T$ts%DLirtd',SfVK.ghCkC4mV^97dnSW3mhBIYJG$V /]n.ge=.OrR;fmpq!)\hB1pl9f!+U\2?@n^fO=FLDNdS;fY?l4rb[_Dcb!:DChMSZ D"O>W7\?klI(7]$K*BJWF6Viml0li.@_qs;g!gD9-l3,f(ZE'"IV'qe6l3?5j9Y,F )TLb\HG@n<=_atYjJl*/Zf\Vb lJk$lQUdDKrb'o?r9nZKV_Hsb7CAT5-6pQj?QNZ?gV\9AKCNV2mD1jSc`7Jg?UDN@ LjER&_:Q$@$%a,faL;p_DCqR;?:MZ:`Bi5!&JdthOL%45cdgkB o-XJ4[.)8I$j['OSPXphX?6E*Z[$5l`f(6UR[[kFaA5Lm*C<#bl<#o=a)eZ Dm#d$+S"+dqF@ljQ[:-:s#&k#)Tnp$b&TLP[[>Ss0Q0LNXGNED'P"%s[*+H7c&($A +(kW7CI+$`'I:4)Vg=T)"8k<$$##:t54qN4i."\1Dd.KP=&i(8%C,tUri8&BR/]R0 It@X#qifps5JSAJBl<4jr9m;.o7+Rns8-P_1&kJ.!KAD>[7.f0"[6Mn5"-s)I&1JI gaso""isKHG7jXJO^I4D..C+Lq%T(gJdP0LMU_XEAH@)lQ3W#!b6!UO!C\;c+KtiN "]FFe'(+UBb^Y>r:E^0DLlhj+$Lei2;6#FYi!]&s49D>Z"TL4SCF__eb!W5Qpf_fRAP&ht&D`FM.M!uR %4RG1$&+X:_U[>ujjN@mSCj:CfLC-QM_YlI5X@/-5]95?T/m'*?r"7OXsS4=AJUC0 83qJ?'TWS!PQ,KgV!dO?^.(tLZZoN?G]n;V]U@ulpVm*R`Vjh)i?K-#5C=2.K&FCW N;p.j>8>,n74MY5Y.HgN,qmFj-ds5C@%3En%62L$ZkXk=UrO^V`S)Y,=iZ7mM[H_H #au[o4#tsB1;MGWho4BsRHNmHmcVO]Fl`>MF7o+4j8%F"YS"B4/hl)qj>rh60&SRO m50OY35l.S^i;+MirYHi9McWIrU)3oT7bDS]8,t+T>`:D03),pcpVS/7l \!L!2/2[-65-">3?>T,k$L5rQBYUXF_DhD$);XKQA2!?'+khhtg;n7\A/6E*s,4f1 5Nmt`MieA_W;^jmUZXk[r4a?7r-"/0H?dO/f)qOuqp"&_-U[)QkSM:LTVmkf*&.22 YOVQs`]n?LhV#]WZ&8Cs@aZWF-s-9S06L1<23Wfq%a10'![.IiW^(I;s.U5%Ou/4tJbs]k=6Fn].=<*+d:/LZ [9lEm5Z`)ID]MFNo_`(O)7-t7@Eed5oD>!V7.:`V#AoupZ=.qIs2"`O#!VMuOpf5. 1B44L^Udl=D4tlnJT#PBGCdn0VJq;)+=GK0#CiTI)#V)=Mgb6Y0.@D_eHCH]"]V9( .]s%0.1ZIf-rC3bQQd6].0.a'7f6?1"-e'3arFpmb%uQUF">4k&`>Aei'5Tj5lC("8,VhS9^/Mg@/^\DAc^O-]V"):0)rll (I5IFpF3ll5kB?nk4D1L]<["f1L#G1.@C.(U7`-qY:9eI?RBs9r"l9cLf<\0agRU/ 2SoT$&6M1iZun^Fc4i4XA#.^17b<]3DO/%Mq9d(n6bNRdY5G QT>SjQqtH&L@XY2b4GSU(FL';B8uR/TYQ%DCb-V,M(Sd*'LF#=DkZ@oYIdI>s-GGn cXEC42&^3e3n.tf\A`]kQ$KrrrNAN@QV39TY;<_u'h/"Llna*2d.m&Q;hufn*F\t* AGjJ6k-+Y!%sG;ID)_<"X3n&/b\u(]^042.cW]U8lPNa]XJat.aS9o\rO_`EGlMe! rNg(bNu!m3&!G4])+.ZB9hSieB([U3)T?=RFIk&2;A;8[(c,//2][A$"TP$Xfrg_B q71AHH1$AAM#T6El@Inb-4@M]6"u75F+,@8KtAC$c)ZFpga:R Eu\1X`r`68>&$Rshf=!"o;g A.#5.7us+O3ahl%O7==HR1D4'IU5g\]:*nU-0=8EKC9S>DCm0j>tMcFNqVccg7teB 5IT&@ge#TDhpDZ>MHu0*#r57u7"m+2:UjpW5^Y_DifOf*._=19tiQb?l q?"ep)'.`:c4'QVbX:aYg& /RXF%2TMk!maIj"D(,$o0(j)5pigJ*H>8**r*RedL&&K0?pStU@Bn=#Z+S,l;_'ir7BUfBiu!\]ER55:mE5$-$t:E kUMZKrhJH`WrIG2q2`Y$;Z`+-_-JE4lkd^P_Ga&T#>tQ="o_[);5FE/f`DG)4U!k^ s5W9Ertk2Ii"*tikNBj?rKI7u[D?5Os5\Z&IFoJWZN(F6>&=P=d$i*2XX9:Br$t<: )H'nc0.RA]alaJ_K)ttolp-7a80J>)$NlY3_>1s0_T_M4XN7]KLl1PT)QD!`g@>oh MGnL>GYfu\?'[@G>Wc)O"e&AP2-V:D/C3Z9(CXtRn.3D6n("4UQ7$cgdsC:7qO=ee >=1hk?CYc"Q%E"l\f.6u+9jG<%,Ti9uMsE!u?l53DHHN8ZQ>BIr4-/hmNe:'%!tmg%m+2nu%= Yf.IZFn%\(!Vh.W,Oh?)rZ&p>IE^^lbTj7^UM]X%S[8b,bg.)eDm!X-gVeEBKD!96 f$hOVc]4C*4DooHr0["]6d.b*0d#dm!aG*]1;Y&_ml+1[ho`I@NJ[>g2TEGtbTF=C ;IU"JFq\l`i1l=hE&fjEr$ajX$pJqOhjmA>DT#uKs?gtj/3Le [g2oM01%*Vn-@p&?Q\lLlsoVP(J;TK$s[!f[*-T7'"?@.TWAhQ;=\gRMGpX`dq<(f bHgJGfabrD3*U[2,?Or^IsZ%hZo4cBggW'ks,;k![.4'DI[E0BC5i0oc1),+=4_\q &-j;K2AtO>$i#4$1[Ttjj?'DV[oZFFXu*YrSFlbPd_3&C^M]c.hF;jtMuNHWqU>Bk npbqD0liF7I%!'Ac?T+ie>u108,%@*(juqfIu2?3\S0)@i]e7Lruh'&rLBMREIZ\( iSGXITD"Z0hdcY)5POmSgrBXcB#H<8@oWB`Ndgsdf$M-56N23^l,l\PG<8?.Rn1S7 %/6&,DCm'9;UQ?A0RJMn/ZHC_\4OY:doGA8Z7r2H0LmQSa7_ip6m0o\DZN6B^ib#3 5k*[C,29Frl<,A'Y#kJL(\fg&Haf7:[Tek"$b<1)Qgi+B0BbdT\tcTc`\(j=:?'jajEoIq>dT9'W;e UYDFa"],Kf&-(Q"d!tU.>JPL_QO"g%`<(kn ,74S4A&J?*MNffhnfL=Pr8D/\j5N;cIlg'n2'Iq^s6I(DR/[`h2q<[@NT38"K^a[V "TP-`Wo0;,2Yaoq_<[u4mAMJ%-++Msc.P61mQA&17B+$Kr)'E!W(('=Lt )j6\t;:T6*b^YF)l`4s9XMei$^)^2-A>3S&"4+M0Ib^o ;P_WlE%ak'JP\9Hhj#/?_VmRt6CbPf6&n(E"jF4Z5V<$PTZ[M9)gb7g6S@:TSaC:= $F?Lb4:KC-Um]?#[^[Q$EcX=FV?b5<6saj+,OPI7B;Cr48BjE#00ao5K`s(6F=H&ei"U E2O;N5CC/-r7N:B[=67[m03g]$oVgu$OW7A3@7`DAu[,J3/3b;2[T8OQ!sh[n6D*^ 4PL;s?d3Qki/\'>mc+Cu/4=rlCG&pAS`,ZuDCnPOOdRt1Qon*14u%e+rPn:+2ift&ZnrQU:F\uG^u9t@Nfo(,iq:7%5>H::ZX>TcaUZ%uMe3A0* T'^%#4G6nX094IN:)]+^+aV9Ib[/!')$Y/-hdZ3[bL-&3NaB"Z?%DObL*)$I:QBE: %IkS9s*6itLOG[7G$4gKb8g070()Ls3PXo8IBWstcR(,+W*b$u'E,PN1^O(F=_Mbc !*q'uVM0-!NjQQa]Y0!0:;p=u`uN/UC/6dh9=E?g=qsN\.+#Y8M#>[,B>"K4&cl8Q aG%\:>k8V7E!fF1m\r8R+SLC$TK:\o3!ekFga_XE(@f/9,-\%/TO."e;sL80p+7le/hHWq64/hC +]l7m97ERY6*XKg.>!%`KqGs)+&l8U!)cl'^*.>IW*C8MVGLS2;Pl`4:neFN.RCC+ pc&99J%dH6/-'#_"Vq(eJ25SD0(>!U"f2"Qq@@K1,/TD[s#I#&m"s\^Ma'2rfCN>^ isLAP!*d6Cr5TQQ,#Wr!@LtA\kQO?gV+6..e&,.!U&'=i[.BJ@n0NntP/N#]q!3Q^ <<)bIr"!MC$cTt8JDacJelWq"Wi6K.W=GoY#$4mrX/j+EQ!kEh+W<5Q%,bKEmXHlA 7$g-,QUhj0ni=d7K; SDIuESNE)+kl4Dm'WQM,0mKq:<9'RT:43GR? #I+Ye"TXuHPACBlduaf%==&_s8`WYJ$]#1\*907 HH-A5ZiCp3\)ZI!!4fme'@5p?mXuDOfGK=r;h^ftBFA&XBk8o2J%Y_4JdL^8^1T?MeR\a(VdCF>TC&JHl_.YOUV8r`^:o[=_9IKVIZ3BrRj;I2RdfkTWY_7k^6!s_3nNTf3T)VR$J!JM$pg9:F UK'k AFs[Kj3Ja)LKeIWDPGqC@!H`E%EgSGDGEY]1h\^L>T9k9"qa\DQfsd]or6f'$@VmUj%/WB0$K^2NmcL%C_\Of+kTW a\;uG9fiKJqBU,Vgr.&8.n-CZ0&IhAmiW*_a:0!MM,b =b\m)^HB[Q;?1Qo=1-h]R#9i/G[W*'e\W:=dS o@L#@.S>(\MS+k)]HH-6'R7c#Y,Xf!*W/RDMT^Eur8lYJEim*f>-HQU0<5R3YMj9T W=@EX"d`9p&c<.f/G;FW+Wjq@U4n/ou+ g^D+B!L+;:]N4_jp^bg'J!,3c$OFZd!$\_!+C#0r'NUS:;32\k^n7f;pja,Da7CJL c]/LZNXj(uf*DNAWX;(] nB1=+o$U>G^Af5D5E@I]"QtXE,oM/7BtfuahHoIX (0^cL!J9P"Bp$kB_P\`9=^`*h/AO$lCLW7cKID&&82p,G='gQ<"Xr0Z1=X:+mq`U& @"GWaIlh^9>9:;)mgP3ed1-0P=IXute'd%]$\M$AM54]CUtoe6R7>W4515E:V#0He T'W+45PVmd0AFp;!4<-N-*')%Z5#$h,OYa)tdmf"X_e3,In$#:="o&c*`EZpU ]jDg>""+&\K6_M_m;q4cI-Q'2ZjZirQB4cNcXr5<6f4ESP7& Pk"5\;m]lh/._=o2(6cf'/!\jr$_H]&Gt,m2UNO!HZkVUH@F?Xo\u8&X.s:b!e9Vs +kDbnhcrPKEg\*5s%if3CB\j#&[O"6Zmq979]h2l&H@H@A,OYpbnHcc?@[?,j?\s= k@LDUSJ_8!$07Ec\&Qt2a/('5W@H6*=Z(JJM>VR?ShL2F5Ma;/#lg5c./:O\r*RM>DClk[i;<23T/P)GgWoS82s]-\ k3ufCiM1(e1[5mK0d@;lEtIg_1if"g!6"mD\dLZXq#BS5c6#EPmJG'-F+F;b]=E-0 9XqKaGB5PVFCQ!]jsH9RgXp_ZRf'\?q"p&0gZoa7XJ,^m5FbAqYFfp6STLNe[(Dd6 WQ]K9>[5bO9jo8\tF.q BF(HG;Xj-C`b(pa^i."D1Db!eMYe%R]`W,P`,F40!qfW^E4)!p[u-X3:Dk 97>>:^;0dH,#;4DVm=)Y?4'=fMq-Z1)IIW`Dcr>I^qZTjYe9\E.N"t\%RM46),sWK =Bb,'r$P*%\eH8/;?2E#^'n.p0)j2je]7\F,5rsAHqt/r/A/l-577UdA4AY5ZD(V) rqM>V!"&/u$Qr&,@p)'kms+gF=[4)la,33Wq'fap,lZGr:NY>-g@H9p@=Jj(?Q9f2 %fAd"@c?8f6'uS3*?P?34oah_K#[DS&;#C;2'34r+%?1?i#glQn3NdG\PQ.p&FDVmJ?B%_]>#e.%!T!RN4U#Q5L$9_aJGp0)^`R]S eS0GCWAD^`#lXu,j1?fS\n[CTldLCaTUDoi!?(k'64gX,E.5G'@/eL:arKch(hcS2 CJ!o-8a^8J#QE>>K`M/'"[;.'Ok^s.!2;bJ[M)2,81&LJjlHpJlngep"iOSW`6?"4 O;'`5+_5UucpY*gGb7QIhT,bm4Y2^'\6oXr<8.5p*&!qgopkVq)? 5$Le"r4b3VHZt!\AWUq\55FLZbb$diJ5MC%0qSq1+o!Fn&9,uZ,=id[;\B&U_4P>A&W5tbt f1[DGQRAJZ^mPLm!S!iCS*Y5ei&Om>EWH7:5^k6mJ$bY?jGFa9MDLbfpeCiuWZAl> -%9$4XHd++nPd7-16S^o;l43(=Te]#6JM&.L\P42`rCoYgLfQs=X=ia.SY+G)P-/( Hn[h_@M._i3m)A&d.P!qa'%VFeg8gG5pr`uRdfU2`N/_mYKjC[*A_uLO7?`c%2XN^ C]s`9DQ[Kc^GnDHp[`"nmlQK"lnS?`^[]JjPEB?eUF4;U:)!O&cOiJBH&LWS4KO[g QDjeDq0ru^onE4&MuQ$1kM=t3]=!iLH`QtORlOho1]r0:c33daHM4i6NGkn0I^=q* eT0C,MlG=j(kTMpL*(aeBhPkM\h_^>I+it9Btr;p/RqCidM-irPl-?:H(d%4_7$'\ HVoSdAgi7\Y+_V2hN4oACS`N>XJMhD$US`oG0r74Es It&]XVZH>&XZEC\MoHPP1]c-<^)FD_]$ss1IoWb#IYgRg)FaY%'bLQFb5r-&B;U60J*4`fYr0`OGSImm68[K-6DKcn5B6Ln(NWoR"7rttQanPq6j \3LK&X@Rh(J>OVaH6$'AcpB*irRWBR$j^[)Ya.I]PR 7$/7T0*oSqY7a@Tj?tldTbO.gRFn?._%qQ,!(Hn&s,rW'daT=\Ec2i25InBW!Hiht rc_Bjp!fh`C_H@s$[Q%*HeS[2!IaA"".^=FH-knQiS8;_n:.Ym$`PA'#l[b82CE]- -ahRH&c<0>..P4Q+%lW>_#f^=>X8^R1U7"SK2c66gVI$L2OSPC?ifLhdtq7i'j*_K n>&Ie.1*_PobJ,+AeFDgJZsZ]KEY$XF.,A(^k=s7$R?[O^CANDg>(02grIts`1E7\ :/qL])e)B[7AMM(#"OK-^qQ1+]"8:i'RI?KoR+F4n6tU_+nEgoL7f?<%%\In!+5MJ O5\RDkkT&0iNpE+097$'27tnCL3-ha[)qfWp9R-+^[F)W@12JW[FA!<;Vn$9!WKhq MgfB%G&7`No0no4f1X 98p,"1aP/.$;"3B!WG$WXSPR@=&a4Kf:*aqB3sku IC=ZPCGkeDJl Oa;@;jlUk=n/qYKn#U1#\<6U1(=mE9N;qUEqYVK5eIg9Xj.+Lq4Bu)X)rBF;HM&-h"+RU0?=o'$MT B?Q5t>KZ__+nb\ZJ3WG<9ZlTpb/$QbS^jNIC?g0]\R35?biCUX9r^gQ=r_+=bF^6o [)rf_c3UdO&%!,U3FqV"1;iKJ&U'm&VlXiMHoiU^!8r?EZjZA1*p9OsE*"?s'dS-b =b(-fVAE?"\\tfua0S\+;3UJ!;!cZ4p1p_un#?kNLjbpFFA?WHK$NSV4fAMaC^7ge $U=dac\fVlcWBa)RK26"b[O.fo]!$P"`7q)#YYBm^U#!O+&B,mFn.u&q$iS*: ^ED,m5=\fT!WM7npu(8+Gb<=J+j[Fh:G`+kir[jL7QH#TUVR4@75=;*)hu,!s3__p A-)41NIV-R]`heP$c)ZFU#8-IPSuiH1 fE1^+f1?5I&BoV4ItI]/#l`A:TNZ2S9i[.\,)WUTkh#_cMCQc0<6E(.s#F41"V;(> ZdT#QBn99c=[J#jkmdV*k5p`;;nG\#JH+G:8R:W"Nj%X%ff3`S1`0D$UN:NjF8s !%Y8RS-?iW9Sd\t"G$^f0(>/15U'SRCr6^d2>=L9pTh'n[H.SH)^i5Eo)]?d@LNHp "rdmX%ojR_gI_Bd[_])B#/@5c5Mh"C:B%pCl008;?b8mZmN=[L7XDG0o_V+R8"0qF 0;%SV4l&bWIaITQ_s$*IQU=6XS0r[:^[=Ldphs3^Y:fqUdk8mW!rq/M7Jk[V.e*Jh .b=RCoZ+S&SfTRTpWN^=&`1cS>Nh2CFMaXpE3YPNU'`e.@\5HqT4%Xc`pr4XA)c?: 2FO?J/>KmCBQBu>[BIu&D2$YNTgb_u@Yo'(1jOs4&Ks1[`>2hk<%%I%mbH%.6<>i@ p9BF338M@gU`%J+$s0g)45D>Abn23l[S'?!:5kd1&3Y0+-7?i:V']< jUighg77?i7PlcdO'Larn\%'$IX]B%aY*Fn>:Du1LO*_V(%_J!#1iMfcjAM)gVJA6 T'f*!3aWn]e;<,`BldR*%IruWRE)loS+6IX"9/*l[*oLC0t(l>lUja$.\f`F UJYE(Q"4261IW$59c>c=,JYeRDd$n+F_[R:>**6?Y`g3J?5R:PkJ'!n"Y2[_=VBhZ )s)rU!(FO>n39.Z]cb:r0\*iB;Lf1Z;NY%KfLmI^!<-'#4R7o%$b03sf;T3EVZ7Y2 ZWkU$pg8rfQ8NE0hVpaHJ"bQui*TaW"i5\VelNB3^j]9nLgJ^;LbAoV(T7XfKE('4 j8!&DmpD^r.$4=enK1I+.E+KX<>#+BTf&/RUb[!<`A&,uO=qZ'bQ^"j(&(.9Q@M(r.6`^GKY` s7,LA\;mlIcAMD"8lYiTY#"J&9HE/CWh04mD1MJ)S-"3Ebj#fR+/XVc>#Mr$'07)m g?PCOX2A^'6H8O;*At\LJ=^9K=%]"E=jErdSF2K&AhQ`]b>,DLA]<>6`n7(WbX`&J 8d^uL&i_a/?qR0N,d;fDYDI7j'PcuH n9(r@Zok9YL0r1]]Xs.#?nHsm\,ba%9r),TOrg\J rOeCQ(J`6@X1pkBNohNX!rI'p^ZI-e1hk$8SJi -_kHa+F4j"fS_L)$3%PrkI5CO&CKf X0ffZ+Q1!gD+7Q\28Od_\+lSfl[ei'k?+pXd8MlAObU?AQ9E`4FMf?[&g^tb0Ism_<#VCGaN*P:lE(9m9gd09d#Q$JFmc**[`r0cg k'Mlo.)LcT3N%2EB,-7E9nuN)5&>rBL)G$N-5[]1Rno JDe0Iid\6=n/kURn1;]R`;Hg[o@,6Ql3b5i97<6dIN;Gf6jktbYW6f3HhbI\.%pG- SnQ@Je[#n\j<'#('S\hc8U'74Nj/=r@Gi.;r9O.8'[kMCdU!a>=qfCf*C0,O#P_Y( lCmBj6+LX%`iHVtVkhI*?0t^")h?nND;o&*2i#6`>6(?.Y^jmMT`.dmH8`/PY3>s2KBaS+$pm ne:L'dN\Gk=&jr^rp/NM?^FSr'44h3:fA+,kJ*lN$M,A!J'@pt8J%ZtTNk?u9ZWP. q8s+p!P5TgZnsQIpg9F(r_NLqq6>JJ1Y$3Q+B8/.!WGII&,^?!fC?Vf/kOChmZo[4 s7Z*!p@RnF5O]`t_7u$1m4#`N8\k@dL=k)2W!7)Un@u9Y^V%Xc1uGWAktY?2.jP1p *?aqR$c!ckA[\X;j=D*.bL.E-anF.n7nJk2G(Kfu5Xpu4>533DJCNL+_#G\[aU,Zp '7;-W"iP^hN[4`?Ym!B:&FO?Pk%"K.&8ohQ47E:l/H$P9pc2L^3O!"!R+^>\nh@u, A:p^=e/`;hW0;ITjI]KjhHOUerBc.kEsus31;);$ /u#p78A76ZI!:_3:FckrXJPj/L%8n5mIuU!LDs>+ef!:JbIXsKrn/L<[d>Pmn<9l_VKEN'0'!4,Y:$4<%KE\U#o,e5;H@]![ nGi'hg!_+n7siL0ftk5*M>Qs6;+)!Prf>IN*0)_j4 Zo]5*pU;rNm\cbNb_\&MKV-HpeB*,ad-0r3N5n!t&%==^D57:6Dm*fHaF>H#mNs0/ s3KGZJ(r6I@m<#+#Q0'k%/!5Cs6qg4dTM+g_ABTT%JW05!f#%k?C^/,0=\UQm.,q+>7k`3;:4 6>;%^1;Zp-4>d4MINN>JJ%XZtKE.K0i.%t@C9UVd_1*UMFTI/hNhULUX9]X7,`D`u O-LC=RMW.X!PPoAJOcul6_3>!dK>$a:eET"mE!P6nT#r:CNK,#D!HaM2NCp_]SJ7,?/%G60&i8H"M_V[5LN_ $\/pVT*<^VnNXI4lKSqt!XSSQK[nUBf@Ru!eAjMt-T9I$!<;`^Iq;bVKfU.IO6]$G IsEY2:DsWWOI$t='Cus50Vp0K5;TAPmApTj-i[D93r%a3E#AS&]!7ka@dGJQZTJ7k ^jkCZ0)-gh5L9_t(X2;8nAgLgJ3WUY[U]s=^T/ft]fr=(2R:%HUdc#"=mCnlL\!YP "i(lRn1W&\/lm2t(((?U.$V7)Md;T7(V.=-0?#Y!`Aom18Xek1*H*Tg[`aK2(51") k?Fd:9MGh^S.mXhZ2e\AqCDUt!5!dE=K3>Q;/(9EXk+aN$ $cJ8]KsW)ToF&ou+*JV$]AN+i3M\_E.!HJ)^0aFF2:(dH=U&7,O?RS-IG.Bk[#t8h 'BSgd__4(\^Zm'"Qt(AR&c%2nU`YqemOb@9\;Y`X.IH7qg(t,*5FOrcDjK?D1C_XS ,_eO1aB&TT5+,(?FrB\f2<9OS!pi;kOZY]nH$,JY6@3F,?oqbUS7ISM675bfs3^2m BiOeU/T_dD#N-,K6X,@jEURa%^U]C%q,5[WZ^Jj\/bZR@elJ9d/Xb6BZVmP;_ %V\KEWCc<"m`Z([rrMRV$@q+(!T_:QGPE/l.M36.J#\\T`?@+d(;W5h.PARf2LK7] pnX:5a`.I`'B>r:-VR6/Re?scV+u:r88.uMch/mhG8hDo11HIQVMaE[Ikle,T*"TQ5RUYam%"9.23Y^\eD,6&ao T\668[[Gq.aTa8K+3;nS%URX@HkQCNLk?FYh$q-^La!es!j=2+d!5QIhokt,S*>nA -N@4YFF=>Ul;H)(Mn'W?9KYHtiE3;&TapMiB!_GqVYb,]]=#War^B9a'Wf"gX%Zq1V1)rn]>0Z5Cre.FP>_OLW*nAI!5 OZGc8O;mL495mfT+o^LO:dM[>;2/__aJ1<@UHHT1;XUD6n>If,Cf#Jf&1rFh\tK%W i7T]08-'KJKgT5YGUH`=8hWm;-/IO<]>B*rT_Y-eF5-Ms>D%M,!<<$f53@?-6V(Eu ?rKd-K@[f7_@QFF0(gbJE@:PM%f?S,6h"H_oc4Qm'_]"hJ8/9)5]=5!BN6:lW\,.` ?_IoIcimUIYI=L[$31haNcdW'J5-5oJb%fKYm'%u&G?0UIpQAfDJT:Y:]%dnILL_u %*.oO7X/Q8qM:kngKGf;!h((G+9fPI/qCm\('+7['O"][?<7q/O?^Ia+bAR$;QVhu p^clGo3YE7XlmGC0,.:aYQ1(:6m2k8AV]B*,7:b$MR+L"ZGP.dnFEY74o_#5M/B8W mc%d4mD\Qba*oOlkfb]"ljKH]*RFbgg-j0bm\WtA5D"B?!!WC.5lQ^&>nHgEi1=j/ c3r?hB=9,\Zm=Yj:K'tU?"G_Z^Immk.J?dYG[^Rb$g0\&"[44>Y@>$iOJ+YSZUj@Y R-gcnFB,-KaO?YjWSdj'3Cuu]s/[(7bU?\k#]!lD$pj)6liP<.P7o)On=G<>!5\o$ "[iq96"BiU"Zoik3)=kFInsfV0Vp5LE,I"JUQTpg6U"dgE2eQ`Y>3L^4X=G42ZokZ qak/gP!3_1IG@B)U*X)C,@)oHI8EMHYEt,jSC\[!2 d`2Hcp\RMEB9H#6O\U$:SnodFD'rWS+al=8qI0KiehT'qoO'K>pDp'Ep7NbLhtmhR +/$>-LqM[-;$uO;EARkqoR&Zd>pK,p!28B#.'*UI59&TK\9i]Qp[0Bb\#Xc*(U2fc @h*WamV([aW3dBmRTuJ#<@kH$9m7/G32Ru`VSG"4;'^5ereiR;`q]"R"lu#.]uKY. 45F&(jpZ_m%fR,NVStqhfP_KF4s_[p,3FAAN"s2/Bu'c@P\J!VCU(r]RdGY$0?\M; -i[uC1HGjjbq8%ZeXGl>+@^kcl(9W+I_1JbB-[6OB$tVP8SDhU!W&jLba/PO0DEk$ m&*)(9msYpS^IFJ'08DKj$ofU)ia<(2?iZ(+S^Gr#6k-W*Ce3iSfQq*3l/eO5PtN% ps4EFD&KY[]eKKd3m.F"+Qr`AcM(O:^0,+@`SXX,/][,S&L\\Yr m]KaeXr5*]$93("HF=WBCi(grimkE+cj&Ed[Bj(BCu 56EH%T)o9c>Vc-#@_U$1rp+V+EJ+ur''0NN!:X?ekR&)u9I;<@i."=qHV'Nm>2i^/ F03T/#QE>AH8Q?fJ=bK1R12H7bor/M!7`g\5lc;J^)m8=r^EBO$Tn-^m*ch1Y9ObV 5Gp(9Eej2_n#-b7Xpop>+7ii%u?P!1*<^+s$r$O#qnR#K2.6r]\ s8!>Ss2BK_IjXYl.e(MSo>jPo&1)T-!Vh3DYtKOgn;i=.h\G&[_W8`js5^rO!jZ:* OThE.5b>dkgc-Bl!Pj285J.OojNi\Q#O13Na1bmDP6bO24sn#]^,\*E[5G=fL#:Ao gt3Inck+jV&<'T7YH&25XUD,1%4-\K?XFlaC8t&02:f_[`Lf+qrC7N&@A*`K5% /h;o2/WM5/#ZW=*jQMDA#Y:4";NMPi-k.VkKTo+))G-kSRh*q>_Q'Hk[CP8h\Im)D R#]$OJ3PdRR1MP08*!,\,g 0`pE)OPd+?ckci_f>tVJjh>:]T@,jZ_HbuGM6BhD/^*c_A@a4CNllIur)B_KPY";8 js>l>Op&,.R)oLd'3%gk7>+f=R#*fD37H2Ii+&ABpJuP-efY;JYEgofl$@3pY61Orh&>C8R0N.*,>Ym5;40'It3#j pr(h+amh*L'4Rjb`_B3cT*4Z08=q4A>%_L%'#br*]JZiWif]o9n96CITtZ#5bct&S gR(4-YB848C5\Y-B#cr8n+P55c_l6&Pk+36$KO^lCnUd9%AcT`Dh[c&?L$S,e47+f ^[_.gB:UWs$"YRIKZcdHZd2q&/Pr[Gesu. oX"c7ikHp'@W7?%FAdqBcncF^Vp++H^c3AU2#1^Lna.p*?`c3aHo_)H@c#'a][HtK 7qYTRf/[\#Sk?ZAc8gQocsnf-dn@c^n5lR&j#M,*-l.K\9l=9hPka OV2&mi+Mre.!l?[37"XDs'?8CA.m(o@!;ddg6G^_bR?"9R@.2/ZX\r^8S3./2Gcr6 Zq[%(8]/c/SN%+#qgJ'#p[cI`S+_2Ar\N.gZ\Hl'WdOcj3R8-DgspQ&gFC(bT:V5$!VJhmGukLN?TjdY *R4]cS&N_Uj?ih6dW,0hhP@\iekrg*>mr:b."0i\anD^^*ReR"'`>c?)%S/Yc^7H^m?qo9,``.)K=dkBIk'> /08K_pGORerBucTYXhh!Q@E7!GHdMt<1?*Ob8/TJ7N4eoK G;ul-m>qDC$GbW!#4jpIFb%Nc$nV7)U&NZo6Nf[Q&,t1ZW`=pK\[2eC0,ik\q2^h5 8';UAjiW^+bt*P3Ur"fj@2LIQ%YO]&Xb$oWBU*YGg+0=5oKV3tFk?Y/N1Jo,BeVaP Uqie*'`e&nrZAVY:-,*Jn!s&o'3i7ume-V"WD;s_^%.fe2M1t,S@,0m*I$h!neJB4 ap.8!'F!.h;P$1qeHp3uBZ:AnUBNCR=#.^Vo]JLV+R."4pT.D 'it+b\\cu2X)!\k2han?_oBhDL5Vi'$=gZWZ*!A[VS),Igc-J]&o+_9CU3!#n7LWj jk5K%fnnhDbA2-.RlE^OV1JJhb#C`'RA7b?A@\S?5dKQ=XTi*:E_[FTk`#6Q"f6]]D>:MTC,K7C.&s5H:>]$Tmckgt!" _htVO!j>aYYF#Bp)X.d"d%`Mk7k]1'P4ITPH?DAsHOK6>S[=IOcu/8?+!3b?*(HPA 6_BpBHoY"$q@*>WErk@l"onaRDZNsrJ4H?-V?O+#oY@d$Y:f_;dZRDO`k?jG p6>`"s)\4g-T.[kki"*DID'FXudYES4])^)X)N=C,&DhbY7f6pNm0T,dil rl8*X$o($H!1(A"YO]P#9TNb#6qjp4_^A5cY?A-V]'Pq7#5nMrRXi.kVEM\bp<##A ]6gOP(l)T%T:Vd+G+/9H3IEKqB;b!dT*bAdFQi*ji?+Zt]lc+&j&7+nb_LRn-MXpR iM?Cd\K(M&e^ttH_`%hlc\LK[iiGoG>l]lbOSmqbjJ1bl>Z^rRHjX)@#tD d(gk(5Ltu,&KpJ^O`b7dHZE'f/?&UAUF_TW)uOVUZ(5(,:X>RcnYU/WF&)^\GKE<] aju;X?m,^C[&7Bf1hOpA)6WcA2N=&cnmCi;L>W(-:HOK3lp^!p+.'CVC?D"E"aU:E ^I#7LIt]Kcr3&#a[H;jhXT880o!c2'8GV0/J("6Q?ff!#-[#WWBIlU1J#*/f#H,rH >lPI15^OqE4O]@=1aC@csEs,Y_$a9WVu-laOF5/RhWW9!jA$[ZZ7pV,pH'S(cW6cabM Q8d5gJD5h`T!4&%DW/`B$RR4#`lBUu7R.jd*ru-BB!YiOW q%-ajR&qFNdLWE;&#QjkPK$**VM0kJU4dZ`Aah?jFu4SE&E4c?G'+%X>Cna*U!eh& dB`6BIV9NV[$;1KICVLSp&hb 50D_*FCGYa&>O#=oVe;VR"G1%N:L1%jcNF4?n]+HN)#V3h:ZIG3ng$_mUr5GHuu6W G,YpVn"W!-JfYZ#h^Hii2!@dWH9d7gB[?nl3iA[D;$W[i#+S]?/h53W/UGWu*d=9T 4m:Q*4?.p,G[hCNZMIJB\>gIH2oO@Rm^o16&Rr9Hi5s*6#UL]C]X KA:pc^?h=>bFnXF3?S"HdFdXV`]^_Ham[e4I;h=2KI_23.="[VC)DqC4-kNVpkW$5EL'=b5+t[+Ug7ue[d:Xc p7[>ihp2K*AHVUnqp5`*nNe/`lp2^7U>.ea04k.T'Y6(r\MI$nF"6A`^*P-HpgcSd p?AeCB>ZqYmS3KA@Pf8.-/W'6$NC(q`mPqN>k[3197D+.mX'!3oSoIf!)Lr1CD8=L ]\Ambp)RN;ql;#-4rF1AeYkPG_EU'pq<$)G(\U6Z]fk_kS"_!nMnCkYFkX>&YUa^S /S2OKBsTjLK4J_uE+-A3gU-k^P>h`9l6@:6rO?>M5@F*b8tSR!K@f,gESCo,O2] NttoLr(.97ctVk:DA]@FAIA @HW:@4Z:$l>\Gi,K)]uiHmo!_otLPEru@S`9DH9;jQ9[Z`AW4FICtMd63NC&+Ii]F rl6[Da]1S;!Es9Dg<PSoU10bipT)W5(Bn>cq61b`?c&aZn^f2qY2@<_L+@r,6>S(`E_\ fAi44nk.@1EcENt<%/Va!,>Ab<`FqE!ZT&V2igp?7P!k9'i%Vk>?(!Te;h]k_#Mm+ eld,Wl2UFr??5g.qL=)Vm@!Hn#8mOBl$ouB+JqCEF1s9^!_e\cs%Yo[D'4>Vs(a`V jR?g1;)<+%fDg*pUK@$%r.%)P#QJRN"\&fY!1fLX-!Ced:Q("+eaX+A5A3\h6NQ)'C=6 *8h(r'SL\l8$m<3S+C,.3-"V]j`UChFkd^Sga,\-aKD6K@:au"3FKFV[^?A-mmAH, d+KRaFXR7=:V#=P]@&u.=%>8J6J]mQCD5'>/FpcQa^o/G.^URqG,1'X?Uql`L9>Wn l[tGf,NuE=SJ.`]6?H`H*?M%!)@JM]69dS!4#)W<9@++oH<<]5K*a\T6[s6R^\cEb PN]Opimt,Pk`lV@[E[p;D)_ebg5e=IcVG1e^kL,WY(ZcFJOmGBrRZ:q!IjqFlADbt Y./mlaTj2[^4%d(g&%-6C%KbCAsZio`#Q4hgnmf6P,2<7)=h4e(mqss%FtGc2bnr' mTbj'Inq-`;^0h@NXg(8q6PdmH"$i&.*t-V-ZcjKg8\M/`4kl, 0BQ?"@DAEDqX]$eh`%9ZCo+kW"225M]sAfoIi."$!:$J[kb"FTr:FM*aT'`bLc_LZ 5"-_Z.GnKcM1n1\l\7,-Z(T8XjaDB ;C#&ZOs_M(^9JrM+PAN3VX7V;CKW*&=P6c@hHdk,UBIdo,_nVWq=%'r.`_Vihd-8M fj2V].KAl9mjZTJWQ5)>pJkdVs+fos#\[ZK&-8L`Q3:BADO.#`V&W\.^JU/2bQ9`a<):o0mO+m6tc>`"Oe*oi)H\YDOfd%q6H iP$$N@'CkgTH-NfInOrl1TS!Ag!e%+Xj7%k!WXt`\naV/R3_8>+=!PW.VmH3h,Ti6 l5]A;0X3$J_>f+5*[uSXHZ)W-:K;j&+oauWX7H.'\F:;hl5/M7D<&f$q!,"+9fHG: _`.9(O&&gPa/cnf8rpHum4!8>#cJlEFLeCXC<=U?jT#8N^WFiAYQ'm9EW@9`:e<.% iX1q^hZ]mll[RAsR<>UJ-EI@G]>R\jEOASG4.uZS2uYK0L\cMUcq6dC@M]%8-iH9g BUNtN::o8#$S^GJeqZ20@>G(O$h>\Dn&!'DKY?)XXo,C%#Pf='7=#+Z0M)ZE''t+= W'E/YeVrX+"F9j+*:kSr--Va@Uod]FDpuYn2_71&?$>#3m"1dWa[s86VOi"*1H'@' N"5/%H^0.d7"OYoJu8AHSXhUA\uM&K/IrDY"S@pHFR^U0$R/f#1!R?WNP))^"\Y<[ Z#0EC_=A.[6a40[E,>i&HO&9^M2lbQ'5dB*5U0jSNdA?iHAG5M`LsA0Uq"=)0`^J& a;BT#d:bEQh8c>ZjoleY6RSn]W@#d02Ti9WFJoT7ksFmi[WPETG1(SV"l/!04jZPZ 0o4,9:p,VQ^QtQ`'^3#0oEQUe_Lhbt6Vk8>h`M9dnDYAYg'73CQMT^2 @#0=TYD3)K7b%H`0^bPD0)b>:MJo]:IrR4Bj3u3/5JI'GK?O8.A*N"mQ9R@>r.6_B O#_'0.`Eo01QF3NpcJeA@":>obCL@X$>QN#1XO;dm*?Wf.mNXnofngN,%*(2!!@N) s.M%\?Mr9(?iH5fY:*UI%"B&TrrD<`p6LrGp=-hEe\h>gMuLbD3jAXPJ:*:#c,KALAHjY5"_5SdbSR9]2+MW.3WRT"U3Yb"hU*DT^`2d!LPp#=m.c j-8:GBnZM=_>hj`I!,kp+9'6i.&-'hrpFOfpXeDt+TfBi[d;bL9;+0"[Ni29r$r:AMp;"4MVd2;5"GWn_8s3&4Xhqs7gi\E^PmDJauf8i?"@s@QP [t[,[0(/:@oLVjF5't-^;p)1ZPu!h9Pc!2'X0#m4/YhRMTaXY&VR/.#Zmg(#/u-$. UU*(rX^j*Sqn/&5$n_jeUp%/2hrk,l60C[X%gt"fI KkE;a%=526^fBWJ*ra6:iZGB"s4RE7PInWij]d.%2Lk6[r\#SZ^YjT[WS(4U\0DF[ YI3qDjs#1`..JK`UZ&9(Kh.r++OX4 e7/$%iVTYHHRd_)".EPr%[>W@+*I(N8'gn_#M37Wsp]b o!SS*mM:bZC!PHqkA=J>h([ko./r]*Iu-b7-R+'O(feP5R,iVs7"DcYck8!`F^o6o 0\7a_9M.*!W)@j'&eCFtS[?A,G=>m4`]WO]rcXIuRq^#Te*,BskQ)d:i^OIdVbH_- \q&UoJ1Vu1g0r][&(T'b/.G-T)`h";4BNNW>85do(uA:1fhr[C;A@Ts&+;+[&_D]( )FOGIJa8cOejd$I&ac_3fN0#r\"'n1Lq5[/Z7R)68>>r).Ad*&)H#Q0WgnYt6-'7i 5QZ'q7c:^[F?bhlYEZc1P.It(D66/ElHicfR]3")f$`1"#B"@NDel'6CSr0>VOd"I ?5uF97aQ9$og&oO=)uG..b\B9g@+^!58^A]"]'IocV:+"f:oa_i+8aW*2J%0JqafC ]GU@[e]=Aca8Y_HZ6-6gIsWL3o*\.!k2Y>Z[c4+c/,lu*`UDA*gmEm^CL;D&0n#$D `@5&k)p+6Ojc/nBrsS\o`s0)L"&MC*L'K_+Gim(E16+2#oo3_IRf>/a2 hb]M9?+H]8I)5impoc$qJ(>pQ1a[CQVW-Q1:\pgcKnJ%X&j`snW;dUL/?L>L/7%@7 Uor+@Cc<[^YqJ?)?LkmVe>&3NO3[qk0h6M(4aL]rQ1Y)\ql&s'KGK+/iDBqM^aI1- s6lHbq.r7]o@)Z*SrN[16M1#=@t)&tk/T:X]CK>.eWj]Q>f(l6H22(h@ddQXqWq\@ kEdC-\fCFg[4mDeJ,UADo6@J=IsQ>gaT'9cQU/CU`Tp!eC% ^RAAQ&W2'NgeLN?S2LP>(Q4NO'/DCSi8/:X+@eGZ/a^e(CX4&8`2Ck%<\`;Y1>>DW Ru9$?$Sr]G)5R;%$a[YK+TM-J#5Gs6K%UUqWF0mLAGnGB\goR`W\]!;ZMJ;lqs1Nl )mY3fQicXSD!_2i*-m#ll$n=FgEb#Es#ZH*V#Mf:S/GNpiW"N&*o7)F!_Co>$J'KJ lb%qe)IMHn[fDe<(J_RMVHgb?7m8AOYEeFZE1LU4c'3-%jQgsa3dj3eIo62Ar;XD/ o>1H=:E_0:qfiG;r%J$Sq.'H:MgsRqCrM0`ikqK"3!+1_^/eI:;=RTmLk'l,KI7RW AYORo.&6hJISf!Y;qT,3mE#M7?.gGCR,Ksc:b-%["\6?P]aYiBp#uJ((I/@i5t8Z, kn(cIW4SMOu@8Pk+\f=9XZpIp#S!5#QLYW6[m &,nL,lbWT*?(F9ji.#eH^DHtoIm>N`dRu)bdOMT!at0^"MCNH%8uK&E,H^OZWr7h/ $';p!&X^tQ!ctqr0L%SnT@1,us!NcmV"mUL0='gA`>!hT@*7:\l"Zf32,-(LVd0bI N4XN>BAJf#62j&@"o-th/@QKh8cKa[77M-N;-QXtB3&KgPZa6i7VRuN_Db#C%H9^, YeVO.GDc"3A^!$So^06>K;SEBp*H%gOUmFA4usGKe6L)Ped"FQ0bDLH5HdS,>)3)2 7t#3:p1o09F`/B*_+?HUYa2_%:>I[[2@LdRDj\'[:tlg8XU,uJ#T>*!m4&Ta08XKo %dteR)m0TJeqRDpK)@Kj\SALF$>hDnh,d(XY7PQm6^uNORRAtM8$N1o1_cqmdD[MQ $rJ9,U^f\V.-+_I0V+*PA5YAJ"`<<)XQ.cA9BbC^<-L(Ic:?/hWk4KZ;,1J&7DH$l [^2R:]9.-D"W_HTT'2o>lCjd9UKn_4>nYMeNmM["BTL66&-RKkUM'Ka!h]q:&TF-. fr:XJc\6gp#pLK1(V832^U]m0g%iRUo82oU96b0#_G`N/I_-cfJ]X_ZcM/E7N#>cu D/>J@^^q$^_>ba4][6bOBXg;e`#B`V$AS*p!Z&iUf_bjpJ("AXr+BI0D[3VT25?uk Xfa"UVJ8PB-'gd[s2DtWm4E$Xm43OqdKb(S(B#m)=ub1Ar%B"!61JlTUc[ZgVprgm 9M#J*$1mTH=8d-RSr3Hj9ZS==!rfQeqXc-"F5,r_m%V/,O7q-jqR_M2miA9QE")Y? ]6+2$J&))VT+:bhCrCr'YJpG2#%$[!rr;uO;Q0L"q6.;L@G1$h97`/M`83NgFo*.u A&?43cS('&HTdm8!If>?qPQh.nIr3Y)#eo4A')43@Nd:?Sdp85BZ*R@,G*a5roZuf &'Z`?i/9\X=LuJ=0VM1J8CBA*$lQc6N@c1083f[nm'/2:?lQ_e0sA2QYJ$CPfm"WhVhO.bENDWi ahTeO3$<^YIUW!r^$C0E0d$<(o%2R*#%tcc`BW>]d^q.6(?RjBn7SHoG8HGpJB:Z) ,U1$;.5I9KNQ*/pJZmZAlEu#A\j3CYWoXC6I,cIgD\NiH_m`nuaHI+?Tsg'nj@T[0 P5[R`?`pU\H`W\od`GT"Jq<&XTYDq.@%fHnNPO?c@'L)i+`/=URcr\EXXiUg( b+Adumk)lOX'k['EX&Ps@"(Cirb*P5/1bKeP]u%G5Eu,DrY"O9WH4jTbWd__R$(Or .'"_nlC\:\rt?saUd3I^s0;M%MuUWk=T8#?1\fkW5h>tnJ%`9cYHB2MJ%#S0"*!?4 ns:#31Z!LVEG@J&r.L(7Jale9G& +(K$fiD3T2c_c\P*`] A!pJ(AC;0%FCf&IH)"r]=]93r9[;i]U5 >k5gb-lu_7nWs[scefQ;_R@N%GD&/pSc8P1]P-BZXn9AGUAnpjrUD`GO%rUq)Q-j5 :sN4kEBQ@Y7/+ejerBrnpJDnN<+@^io'"[Q;o=);m)6'4kj_ &Bto^R9VS"$o&S2*m"=S4+d7+Z[d?-0iR3IbF%_38;rq'S_,LDVn i9&Cgq(s=OVTqUK2V#U>gBn"p701j`Zuos0%HZ(kAX%$HPl%L0]5&gAl_t+.Bh)@k a'37jH3,`/#!O<,s&ML4dYaV6-^G'U7CNb)a><4u^(C"oV:Q@rW7;%s02TPo&jE,ci.jc:T^Zh!<3//Pq0r7s4s5Q.@k=VH9,.%pLFd,A`>cq mhYruB!G5"J,(Kc.q2U+X8Ij^FkXc>QA";$jWN*/-=\*d$%%%od%Aq;T@uh]Ft<6^ h*J73UV1pa+0,A/;;1n;W#m(YK)@hs)0#I@^n"Ci?^qH$qE-t##GMdjs/uZ:_>iD" Mu2X/gt.mZ6J;Cl`>,l./\cE4=Sh!UfFR/?+9F_j)h.Zh-q(k;=2TN8-jonPYD7r: jW99Xf>Fl3S)5Mgr50>%Ic81CiGTbEI:64P?akbSYqGC:RH565b7?[8gh0=SajZ3C /B(_o8<>J=^c/T-Un91$c6)E2oX/YL)q\HhS;s')[`[t!1.H=>UT"ep5U4YXOM`0Q q2=`lkPs[o4@/g>rsptB+9G$dRG`Ql2tLAURq:8R):Pb0G,hj]g>#-sYAnU7\f_1I +TfITpW/sglcGd8k3#LMnps@[fC.Ymlti"Gs/u:k5lO6$SmKbBYJn8nPcloboaW%a hrlO8-i`p-7_m@L-T2$f,9WKXmP:iTbi1*04%mfk@^E2T@P'KBMG/8s;3B8A2s:Wl >+UbaEJ@RSR'.41 jf:G"Zoo_T^/E-^R=2Th4]VmOT9N@".]V+#CGtDA([HPp!igaQs6ofV>knKaG<5"0 p:<]m>HA91r#>=:K`#WSofk2/0.#":b&t!^K;.'BX"m9s9[ZP>[+m2bZUd`[nd;k3 b,;90X(s)ip%UX.n3=2"G=mpae1]&D!Pbn)PlE#F[(Uh/ecl&FEj\3LIrG;#nCc4Q [l=(uFb&@U479m?+(,.6gM2,%.^-AqbRY8o(k_i]!/n#0W[kRC.r>&3Mm`]bDcTk? e>&OO8q>BmHqk1sfK$[2'r&&%UB7bs:\saL)*&U6$uE .B!NpIZXR0$L"5foHQ2OcmTWc"->VRBk!/fSo.401p!RR1T2c-:!TPk=]@sN9pSLT k>2Vu'K^]eI,s=])%L5HNM\^L/g%4STliK)R?+eATKUi4@kI?EIImbu[,:,p;\&HT 'RG0Pjh4s`p(@/ao>+e)%gDEMG@g$JQWJQ]-0^>GaWI-HI.'JObD27PhNe$6k1#/u ;_NEZG$C>Lm8MLVT&V5*fP4_u\NDe'^":`CEePP+r/rD/pbK`0e^ nTOjD07t.IrY84d[8h;]!AqXR^Z#E[8a+Vs=`K\)Gq(rc+Q9=EZ]=66fR1L!J=c$T`j^Bp)iT)8f`a8W9``!=d'rpR"#JFbkG 1[gK%dTqQ6-1k07'E6;pW6Z_n!:[b-M^@W4Q45O5!i?Irs2kBBgZ0otK'?7@I(Gh> F5F!h4)=$'g@NlT3B.(&gdMM?F5T(GiCl9m'+VJ.OU(IOg@@AW>k#MGbQdlI%(RL1 SM!^5bm!q'Ps;iBfj/RqDs"(%>b/PnmjKIHJ%YPh;?#Y;B@6G6qG.O1,1KmbJ0Vkl .^M0/M>^6saRC.aedW)Er_#\Xu[U,E#QZ@0\[SE%lBZJaD L]]pQUnMT1a.fAj.ILd*@q<.gUKq#SNi\q_$jZoJ$6TWNl>Zrg.F;/:m&ak2hueRe GJW5;4HP&:e\[guZk!RGjU]u4"LSDCNVT;\*gHWGG.tPo=Pm%l*[nK,Q+KL9IDW!U C!E`RG)`MF]s_gb^4)!Fd6CXsS#l-T<-uWch#;&d[h;g85Pajd+Q[ONeUmTgT`->; :Wd%FXoZW'TCb?Ns(eGG\G0-+)s('(=f"\j%Y_8m=pk8hKYH=5B21Y]5 Lg/\X/Yr4@qA(bLagemPPWtOb`mFl#!2'4uVF=&I_ZugAd:]NS>3e;:)Sg-j#(3(l >7J[2&&0CNmkj%_&'3X?.)k?#Q\"u"L.](O)Lr*tl7-Z)>/7/;YpsL-E_/kC;SH5P =ej9uCrOUNMf@2C#Utl=?::MPqXdk(!je*.m]Z1pTmp:H[1@EOId8+S7HtlU$h_k^) jo<3rZr`pk590=@d/Y`tP9D$=$NBO*i6@JX>GhNd3CWu7/5F!!084h(-%^@VZJ^4; r*PK_i^3#!ZSApaa*r8JaZIP0]QJ><)i%p13uIeITs2"eKYMjr%)1Z%1LZn^N;WBa fT5eZ!,_i,+Qul]Ga[dgAWS%,T9$O..cR!DTeGjBHY.WCPNsHC2]Hmf4Q3A'@D=[. PA[3mR0gj@I#KQsjc9lfJc>neHpLiM:^;3;-,6W4^ScY=8bg'.K%4&IC4R.NT@mHT Uj"@`IPQH!at2oZ.L,DdZa2E^UE]XQFB)lP=As@1TWJ+sHk=kJ$Y-Pr+mR>WbK0ul C&s5tr+Wk1J!Z&SeRjj]F/CM!1H+rc/U,LVL'UoAcGt/h^l4aGmE1oAYpWh&'@,BQ 430Vs.Xs"!F10>XB/Sh?of5K/NaA?Ye`Nkh3McSOjX0*loEW\r+_' P5k1SK'i$0s0V[(SGil2mO\M\*fS:%E=a(!*KFTV2NG2tB#0rH/>bb'&aqfil?F'r f\>hA&USs5o;enAasr\9kK2&er'sqalX1U;A$+ `Iek\!*QR$=lrU`HF23dII2^%DUQl;9^%uDqBhi;&O-^A^TlI1D?7a/X\eM>o0N@s Y.e%O0*DYFPtF>i/^V:I<[O2k)#`ANmcfK7!nM*mBo*a(UqlnE?F;gld=a6 p]QcNrUECd j:Op"Lk_j1pt^bW5p;qD;,@co$)TO/L5T`t4l)ndpu IsVF3\Y&HWnXqO1LOfDS\:PNHrbt$^lROE.c6n'_-L&e88^Hj$qTJT^hlKHS=WMKo lnGT6P-;.s1Z7-lhU49K0,<:.Ii]^Hn4arruIu4UQ/oP`g?[>2YN1N U7]"MipU)_59`UIfL7XY5$j:;b&;'>o-XtBV7b*(((0"lZkmeu/XAF]]LI8Q'/M0X1mk+XO! Ua'+CUc5"'ZlcM!*KkY*0(YlF_J!`jMGVKZ%D#60>R$!,sVJ#9.`b>#7GpkNRG ZA@HMe#?lge_/l1^EIsPS25$,JbgI=#af[Q0Q-S(+oa!(m\D'4bMSFLa?Q#U^Ve." (ii;2QC^@>b5qF>eCb03js[VY/U8Y*,:L.%<7JF P%P`0fm3rt0?f!=Ls,qN#Raf]1(GQ3$tp!f3jV<01Ig*)"DnQp[UaI!:a6&ZCg[`2 OOln[\%qc\LoNRFY_kSK_]Gr=L`5h19fuQOTrPe&doiL8.5pjc6.t]B<8b&h>WXI> ?a"4sUi"n%C'O:eDen%dCu=RDpilaJq)^\Ri.$No')ZZleW?8METM,<[[=,>VJ6a- Z,WH;+llu>nmD%(;I6&YQ-#l!J5TFBQBc7H3!/aCEf?_,,![e31MH[$IDXAdjm&:Xo`C>;DSl3OrX]2X6kD2% bk1s(!!,gqcp#RGr!Ds^fj=fG5:M)[WLB&9R,>'a=B)\?AW98YXbTA8>bW&*/Rk;M S3*jqhI=R[DbiI^8[pLcjEGC6s0=*=q41/bg_]PHiK,uo"M]"-i;Ird7q\bZ:X_Os Vh$.EO6>c::=*o#&,>'ri&_/FhgcEnJY'Oc4gbb_5)FaM6C09gP<.E83IT@YTYHh* CdQ8o,VGsQnH)0?JKoG+ip8oBK.^IF+ANCX/Z"Ls;MTiQI<;gZu-"6oH/e^VDl1n9jl a\qB/<2q^5U.V8\;ij$HBp4W-)-Kn"58.l`6jF\$)rX:EGXM"Be$M'CU%e:YDBB8_ @Qs/5M_RG&`Tr#&\t06\^_[e#5<5)*m`D8k%OODgJ*Q&5Orp,b39=JSa-+#7^!\4K "@#G3Ekpsn5BaV#R.f?gtg_4mU68+ls5Bq:i5Ara&fhgQD[0[i6/R6af9Vb+GN\ AqU*uRV\r&aeKo+p:lHdq0DbQ^UO1i[826jpb:@or\Dq"m`@617%&D7'_(rl4h_Q4 (ZQb0HAV`qM[t''KcWa8a3Gq">.G\I^;n.m]I&ZnO@Sg^T+D7-&Vab^+WFf[qQ`N9&ThTC64gN#0-2l/gr(1Maqchl4+[]Q Eeo@XF%0nba6M_-_6e.pjWn(s6pi;QDR+/QYo_B5h,h0r2X,#.]9P7*;GV,5@OPS7K;*O Pn3s=J#fa#U0bX2XMet6XAUDpf85C$s$e`p0$Y>90K/2Pp/od=]&KoPa#u0soAmoY s4P-YKtY=+*"%/n=Q%p]l0k1;I!D*#o/%2hJ,;ptS[/@4Ve;s#StUXS$A'Di_^"gJ %\Yh)UDLD5^Mgp^I/V&\]A]ER2$P$ud'em0VE0jAJYF]jL^N>jSD_5rck0lo+>ZQm 1/O&H1qYAY+H"_d9'Zt]FOJ#$W0r7+.&`Pk=s*kJl(,YAXeCuf0M6[;V'?au/YdJ: :qMl=mE):7,%)-+kZpdE:ITo8BS9bMKdo]gM,L;3'I6I?aqUXC`XuTP6EX=%QAtUf T^r98LR$@:m-*+/g2!2*]=VdL*"DmV55a/nZ/GYSY/^Kd4mDiZa^8@Hq".h.qkrGq &^V2\Org#oESd/n^=oY_ougFsQ^*/=l#!ajZJg<:c_c*(6h@E8gOQcP27Bk =2@FSrbsC"^EpA(4r]s'?YfD./RG5O!YKIk=TWaX2a,Gl@g9#8DAZR5r%O5<8`K m(OYVLVF[FNgI7&8c^V1i4Y&@A@rTnpD<^T72*D0EA)eR^SfHAk5&ANEG%IcQ_smC cFB/,\)cA!j"n$tVHfHBa/RC-CNJk-Cn$;n;)$5b/M7$HFRjP0KuVsN bLW@#e:A05<8biH@?Ni1TJnKen 3t>dH_n\^D7)^l&)&ZqkfXD2$GETIVle=G.lF?GR_O4^V&Z7.P[WL:dP>J= <)Ueh@K?>00bcL!U#nnq(5k5>;**\c*Jp^H #se]9Uer6<\l1')&IbI4L/Y'=.?qYZ,Y4d<;BQ7,,aEt.JJ9SU!JY.G=GV8FUbTebk?WO/j2e6TS'.:G;N W$-AX/ph#,8L7kTk#7[sfDM&tHCf\6*!*`1jGp#e1'/3lq01GdPJr$$"(n2TICM-B YPdb4OS*6PnZNm?)PI'G1TZc>oKVXXrl6u6r/W3iK`D!oQI!SA=IJ)sVhoDss0Wc" 7`,9us/U6X[4rb")Y68oGibikUKn`90@moDHTJT-;sa@le`@LR)XQB3A4CZSK]PcQn,CG6F\/b2IIPs]a\%BgTs'$KYi.&)8_JH>0 =Xp-?#Pm\.V)iI]<`?#!PnJg!$iY1WZtp=@rY;7/_>O)0<&%`4.9&k6.TrHKcIXP( %E];Q'3mq<_c[S>PB5KSSR NUVGP?!9f!6e?iq!C3)UC0d]OLS<.n/$it`8`p1fD37\N0p-C'%HUVr3F;JSn\KC+c%Sl)W&:S4lCZLjqCk))CoiRu::DM\8gQB6U_#^LE. n>lHND]YXeGDuOKEI;oe-`7%9.:Hkg?_!m=GohBVJbJ2N3i'P-B4qhW2il>Ch\Yq= Nh@1H"oWR)i-0(]YKZ4#$6:*Rp[uqIN<.b=+<_9n+4eaDlcfk(=WQ(_)VUAhg9Wo; -SDVbRbf&[km0Rl6)Z(82$(N!bhjC8D[`O#78TGJ.BRTgI48o66/Uo%O=mU;UA5YFZ>Wf]mr'Oa];<(Bf&Nk9qR%(X3l#1g/1S4n"nm&U>MHe e)ReO2k[X(dVg-5rVTX5[hk>qnc-pN8cRsCb!0g?Ip0i>qf?I6&[n_^1m2,a$l'V^r6[g-ZE4(0ZoX"-4TRCYUEtNWA L>SD[]mVZuf(#.%O2\b[39JbDZ/GY3limFLk%rj D)5d?1bbeLH#>Lc,VN,RMA0R>nrY^'E2e3br6H2R'F;=\,@.t@Nr6.o[\+dfW%NG$ QIT?ekc#b$)n6gbb@e31t*epFNUoEat0`bl.7]h#3LRfHd^+>s"@,u B'_P,%MI@&S`.%5I5ZW;rGV\e&H5aH=W2.[>+_]IjD.Fo&f#uOOq5Mr<;n47J_@RV J&;5>+Fh0eNc@c-!Ue'=cW#aF\eNBWSLPPM.UE+E^CZbN0:\Wl:JL>Ua"]@`"i0ai Q[h$\kKWe3ZTdf9QS[sDXBEK45O6-Zj!CdO/^oq9B@<53@:>.bZb9t:a2E)aE>C). !SJ&U13LH-c"O\7,XXT1:^gsP[oCbq;"QH,SN2Q;I+>O.2&?8aCHC+ZY'`TT^3P6E *@c#ho)6Fg.;?bkZAO`n,F&-Ls1PSD"7D2erm%8Ph8cF>:X8X*?8ltLK>9EGjdE%I q;:Lf^ud0Qs-mk:->PW_he91>)p8Q`QY=kpC/qN:;+sZ.Yjc4edX1p'^Ibd4V$]Qg j?]bC&Pj`+:e5gB!T8I5"i(N42&1:?NE]a[Nr"7aIs=#VokqYH$PD=\R/H[a!:>-W c%+CIom\KZTCb?Ns$Il:f2l(^AS-(i8QBjY5cmN(X^hNWF'#N7gFNd0&X'71jj#YToaJAKtauA jOpqlJ+h??A&APZ*>>-;"8&SD?t3cH\0)L`hjkM1Po8;`3j^[pUcUTD-U,%eBg>HF XXB"S*KD6Dg-\_1#\jjgrl=SjU,GNj>%4Ggs-BL[D)l?ha7=.C`;[dhOS#mZHP6s^ "g+R1YG;M+i\pqe1aGklWD[I,1l+`sh/\07&'fH=IoU_u7ED *Xi#5Cs3EVQiD.b&aKCG>u1D/mfH^BCOX6,7om:,2rS[Z'-CS>:OtLg?FJIUYXXo; Pc!c"f`)Ss)LoU'AGq"%rf]kK?TQ'?Ik"j`>Q=GAB6UgtJcD5*;ok@k1&4CSCJJ+o lG#7[MLU^P+;D'L+oe=j`6E2pW&M+07jlV'f-[[YVaiI])O`$h6Eq0=dLL1\eJ,#S@&YGZt_>o\tSTB$"K[#"4 #`)D6i;\j6i(FX<3>25CTstp506qGBluW'`LhA8V!VV8]Zo8\FNS!lZ]lc%"m6_Ef &-jA^*!h+#G]@rGo=LdtB3XGh2b!Xn:$AdY_QT"j?Z[k]BoYEPNSe/LI@i]OSW5_0 @h\k)X2W'9J&Q(]iW!BV^SJ=M,(R=p:u%3eCr-d7a2l3!&n9RI$\!+*59KqE=@76+ K[9ZXW,nGbcF4oXop_#>G$_Yt?`P5]Y:\.k>PW;kCN*c7cMcPSSr a9VeGA+'2Cb0C.iHd,]".g,_<,N_5KIuqE>TCniUf,3.$'2NCM5YXKRJ&)(,J*_Z/ _7fhlp^9[n4!tA?PD,T"5%rh4>mu8W-YA5_B8\.8M_L?B?tQDMK=)6\kKQa;OML%i WPZ%g'*W0kH#*Ak[H%'%`jl3U!<+!g_42=i!B1:jXutofnGcC5/nBOjb48\S&.g;+ Z>3Q#(!EUf=qiM-"Cd*tKW,_@+9b^H9N>H.VDhT*SYt`35f!ubLRK=/DsHM:q&L]6 c;FRo)!#$.o&$7\o&!km-Dp`YLV-n_`k.7*p7.N<>K>6 >iL"#!_iJT%TJ7m4E&5<3)0>[6%@c]gb!@3n9rF+I%LV8[AKgABaMnU*hkHT@t@Up\X4$n"m^FJG-ukl?aoBmiSHV I$43f)-lc_FcQIW"b?I*"n]^C^i/@L?_!d&f"U4cf*kD>\()0R/9V;GmM)52ri#kRei>,fIF^udm [#tbJJ1;;%#p@c>0QZa`@]dB>gKW.=3n!o:O Sakm_QU:6BLCIZfD[Ci#BCMsK6Ja\P06$jI7)VUe&KdX*^]U3M@.gJQV^%#XSO:Np cbd9o!qN2Wa7qU`hoDpW:Ij60O1]`nqSV@@3!'T1]X^9'p&.akm>HYsil+&hcgM2A i5#kr5=-%L"Mn?=6")5'WM+-6A;/@,$Us19ikV\N\t1G$O>UG5->@ffgc;b*qhdHblH"qG#t EV3q&_8=Z*Gm55>B]n@6ho3!L$HS[.1d@;@^X,.61VUs4s&@tP1`r*P.[Z_Y"K#c= Ve6"dlni>B*nJOLXIUpGi5^rBDUcBp7L)!I.=qub?IK?C`E9O#^Zs;33K?4qtA6i-&X(-R<`C4`irqeZ\FlN 1h(((,[6E8QC24&Fpr@1LRC')@:nZXbm(n'];:@IIK/t?4k8($99,3nTAMZ,Dr4dN ]S5pk\RC,i51`cKd9)S?rWdPb>`Besr2\6+Wmr&QarH*ZgNF((:m(kj?U7af?s.n@] ?LMmX]^BmTla]L:q`<)V]sL97LaP[=$^8NPqhWj:dG+8KHr6.%eRA;58*St3T2*a_ 3^Ea1+(]hLM"^KcmF,4t]a=>r!.(=Z4kY?,d%O)FickWDD@^7@<^o`bSN`SfNC2gd %OE:l"[VeY!(K8IIK"NtS,[\Y&_fIq2Ks8T#DVk8]%mbMiJkYQ48`fgr+R\\?V_;b Z)%Fs&;1CC;,K"s#t\rLP%cp%!hku#LY,IA5R[f:W>b`ml4^0`J;f$:_#?QOfDg6.kkX)JkA9k2Nd_Q[_ak]eo!Knrsg; s%r!q]&322)4+Fu]=^,br7kW1VoDu8)7e/\I]^fR@Z/jKB&=72I`jSLZ_jBe6cc2e FAN_+Th'$cV)HKECEsdD0iKB-.th&'6+2H=6On]'-.SF39")6g/Lk09MUI3(WVkSo ]Nn+Yl#i7Qi[]5k<1X\9)Va6p=tDa?[,(cnXYdb s7.1-Prg3>s78l.6tK5ks.e3Bh]R_1M5)WMW*4I?SK]!MDcOi/s1s&j#\[A+5618` q;897U\q;oYP93Cs&::qr71(3N@%#paT2?nq#QJ+%H[noZ&cVbAXiLW1]ONp%,3-/ qBd!Qh\H7Fr,#T$r7fr33ni4O-\b4?e&DH8gXuS^oX?R,daspRh$eJ2LHF-Um4;YL NB%!2\"o4`oeiZ@1a`5?"LUhg29B\Nr3,!o88?X#=ga+ZW^KAYM_)SCS6urK6NlVQ UU?@Ag<)Bl7A?qIfhe)OX@P9MB%0helT&*K:,^2.?*_"2FqZ2%0q8*Cq&o]iX[S$! MiW%HSEL.P=+L+mNH*9?n3R''H<63CYqCfXnVqkVNUf:_ruA!862pEiq6L5K2IDOP `BX-iN.>a0T#52\pmFB)O'Tk9Q<,glaqMtA&qK8)ABOrIY9?,9-=[!n"FtrD)B5.p +;$0%>AMHleXGp)1#>Y7LbSTA0jJY;c<&k=<8=9NCpfs:DUp3o6%8pM^J'dsk*Lmk J5!nu8=1*3a9$Xa8s'5Tf;U[m<*P;2]EH:Wc%otINV94f`MOQ!DN-KZDCiXkJVl3K]f8XDmhD%*O!Ol!pK%4c&-m?Kkjf12Cgg#r4j!Okjkn@7M:6gHs>n:,p?n;Z\J(WZ(8kFiss/$85P l9c&NK(l9s3[A,L?4=3MK(9W@,qlpW>A4GR,`u#o=C%L$[Kl;9465OBi;]hJ'IY6r 4Jt0DZllM^:NYRhd/5s-o5FBL]A4k7%c@3O^'-SbMfsf@k!`5b7TG^AEQV`MQ#W=o 7.P=@$G"$EE7.CXo"XObTo#MRGF/(2aC\^icJ"nF?/;]#qTN3*;/HGPf >(B(j]Ia28-;sgPqY3+"SB_'\?*$=28,6Mo8lVjS!0'$BUIipLdrd^;Q:.W`CQ4`c 0Ya$X[ntPF/1CM6s'U;=9TXa@;td6h=nO&9s-_FRM26 FibZ3q!iR/.><.7OGm+'*H+q'29:r['JT(;NSFX]2p'!02KR=uS;^VmX%A]7/BVZA j`X0RFXsm1W,4E>iE5_Re[rf/3VQiH>9,NbY[E3;9mu2S;U>D9DaBS Ep](DRR>4^)^ctX8rhbuX#8t"-Xc'beCg)aA^W,k^JN.Kr6OE0fD$G;alTc-%[U>C af).30.fgG/VsSFs*+[b8[8(u/7_A,/1L^#Z5aF`7Y*(/XnkgMWXWptCH"Tg!"iTs hI>'nCsq.F\jRXTT*q[NagYrZRr#$7RfSdrP>[i"QfL]VD"qYZ?[O"]%1ij(+.[th 5f/[VfeQ\Wr2Ze2\QUl3IhVagAlAO!g7'#Q>HPK=:$S6\AS/7m]hOX;V24S?`""7A 7hhY)Y^J"9"'Vm>_n+l?kIYKr0/bL:2_qPFTEdPLs7`9)7aXkUZ2`^O615gZ+"a/3 61kJ>Y7@7E%h[^9FW#V67!rtSI56HLeUM'/+2%/\"+!q%:M`$uM2p\kg"V>A>Ztn] boBATL8'RuN+-.?JJZK#6G'pETR@b@^$m3fLk+lS!o='!LGs(>&!fH!G!,]#Jc,+k k]lk9Ls;P.J-"gL";-@(p^mM1;ZB86\5@?6[%016Y)[(\PA&37U44DV\e?Y1Ti2qQ ;.b$iKH>!+5MPGl_LU+YA'T#ZF+&DdrS:V;pZB-GReD/H_Z.T[J0tR'*q!<`Dhm6+ N?6+lOUM$,;0dDU0[`o@.kaO,QDX5O*Bm-F35nIZiWN"j4SZYu7mOB)s*4&]Hru\: Vs 59;ah.)6c[aoj.C@2sC?%>s@EIDUpd@(@ob9QT-g%_mer]Up*]qo>qYWtUM39f]r" hs&%(QVWpuIN .H'aq4FXU6euSuCp710tF3\^K3k[9.q!*h$5PO3gU!J[E4[/4XUW<70]@Yk5^;k#; %[mH2[6`iQciHRGO$(-DRb.uJO]KL?p%e.CHR=#>p'L2Y&VL*XNOd^Aoi\*g Z2Xia+\Sr\U5hI(.bNgu#Ad$36?+@IT9TA5s5=1Z?bkan1H<&>C2R3dF\6@N;K58p ED]D$E@gn"WY3okPlIEiK*]93(`$kWUWNVeb$4qhEa5#r&[4#,dVR=32hS'N B=5:#>-_!OhE\eUO=M./.`<8SAE$jn-qbc.'FWOpIQEOZb2oFOn$[?7uUN#lY$O)tt0p<]E!8,jDl02J6B-dg]GnTOGp bS-V"m?_Kn/`@q]i;2Ot5#LX`.J2I"H>&eeWpjG]HIrV`gE#\RTOGJ='!r8PhIretg?q>Gp^o%O,AR3Rq*,CV qF!NMr5jOTO8t/i>cpPC:.UG5C(Mk'+PepLK9(]I%)c &`+lDCZItM.q3%cM1Um)m/PKjDFlULIn:XEs+DjW!c7i`:]?f`'Bn;$o`Ol)F]7&ae]G5]uW^8@Ad<]NSH?!qTW&R=E)To7>ic>b.]JR>6s*kFUQ]%#L P.2E5A?.bkh\GbI"a^+Q%uqE1>gFFIrBrq-SQ\#18'RrJZ4J%Y"=l(Zo[ T`#%l:Zi`^>&_>03`(V0I^\V43>DCHltq,if\t!uNYGh@Fo(Zrh3Z/%W$fGh*aSNZ @JA(YiEcNZkb&OGM_ST"-0Q,n:V'lESB`h]fo5PqEE9pHb%u,>a,3X \pu)*a>?lqMTB[p*j-*'MO2Tf/`3K=(H4ba,7JR6RM$()W; \sf+cWQ(i;.*<37V0HDTJ=eEZ-W$nG2CXOtPf3'LUUc)@eHJfMq2lD=_TR+V(@;M_ gjpp.),db%$pK6gX7IM9:0on=5D!5Z[Hddj[JgF,g\bD'Ni\F56MNI=@[kkeKHHD.>1Yp;+^t 6W7$6A*3(#LXk&$C2@;[9s(MZ2KijTCIS5!p33fh3a"^T-ZbrM9ek;<>0BHT3\]9S Z'MYDk!\+a)=PhS1"r0&N-(o!A3jF'Ig`-W0t"J6Xh-3fX#@B'K%IqaRSl3UBl1Eq 1'l<3<9[5;2Ck.HE]28scgFcpp8U(ECUX]kD](Fi2HdA'?etEYlRjmk@Vah@>JZH) _W/t3RRd5;KHo^W@>m?Qqd9HRC3At)mf%:fBQ%t 1/fB0On*.eoflIGP>`T?IK7"fJ'l':eQ#2+'a\HJnR2?Ziom\rfS]6EplJFFbU*3` 70**iJk%P`$JC=:0hSCaZ]oM*0M=%C"J@q+)hC^%eOHqZDp&RH9KbRohI4CsjI6;e &n*[@(1`QJ1pcti%/^+:3Z7ssWpu\^rf@0n'E28_Z7MCf8"nY0<^FZ?0l-=6_2\:C D2-=&L>5NkG*a@f7%Z63:REiS9cGi=$\Agi/'VU`FdD;quP)];O;/6"gZrY2%(Jq-)a?PKjks,q># )F7=jd]9/-Jf)'EL/>o(Q;l@sKa)Ii9l29?MeGU1m8$*AU./5/N;FM5*b]P<[+"iM *nR<:h4F%;pLKW2UE*Z">(*PUIEpF@T!7uB)nbko_[!#HmJQIBl3MNX%+kc&NEDXT 1AUaps%._15Q1lB)XrVo_+UMsE*6V*Z62E'kGur'2ALI?$J3goXK+#G0N\%:/,]#S I]B^Ho($1.7>-J\^uqVQ,e.u^LshRJ7$BaA8JTXT$QH4)4Bh&t[aG+q]AJ6(hG#P4E6`k3q`\m-S6a2XM%JY_ILm'I/#WMUB/F Z2SiQHm"&N@ZWT1n9=U"B<5[=07CJlD6,+M8qGC8o\oMnTsh>EQLoajo[OXHJKX0a V"^8*]1m!F`q1kcZW#38d'8-S>um:MVam6*Vr'2,h_JZPH+`:Jl2#8olgL@Om[.qL ^!r@_glW-<5LEP[C7t4%iUV&bPntgK0CRq,SIsY$5^6d9o&)g%V.BbjItKW%('-Hh 2Y^XUc]W'G1*oRE"'^BNRH3Fa\PiH[o-s\I=TUdQ^HdkbJ'kd]jJo3_&3adBZm;N] /.V*App^'k_DVQ!s3%73qCE1A$!T%$o6I:\Th<@Z\sP(9i@5jW@c]Zt(haoYpk\Q, <;qA%5\N6EW5K8_3^EnqGIu7H XWtn>!+EOEr:ft!H%*+`rYV.#f?-=-ec1m-Z2"KXi]nE:Hj-0"%)3BD76ji]>nG2@ `6snWKK^:(1Ju1^1jCO>fT'S7m?Xg"#pD@)T\Z`V^M%`!>3C:*e`D7\.r_V>h3C$^ $T6e=%,Qb^^'bjoI<+d_BkW8UUk'JZY7-b-_o1K(:J-g9r\gFpa)dj#jN=dh[B0Ir Hmqru(bRHKeJ8B-$[jU\?IiT[f$\[]AZi_3DZ/,O3r**!I.&DR?Tg?`^^X=c,,Mqs OW[XRacsn&A^Y[k/>6Afe"I3i1'LJ(Kq>IA^=_FlXi'J`DYIf?S=f7_]JN$h2G/I7 ddHKOqfhcp641B7hr04dp)iX6HoPX1_4:IZ#9;=ks,2MQ?S:+5WVrT:,>a9d5l2oG hk%4PmZbW`Vk(RaksE*2i(igeM030tTL-J[I'S^'(OU05D]\\nJTVM)02-^U21=EjF[j'!jfc"S`WV-Pi_+W8YSR_MUm% =a5'\BOt%[GsP8@?9hYB@!P$D,XPK3L0GK);">Ef7#T4*V%o-^j.u^M8bkkj\`#Su )#2u6#_ND]Ob?Xb!(;?;'+7Vc?j#I#&Pu,0dDge/*('^2m#%lQ*Hl<+"mbe>!G%J6)Fqb5]Ajpf+fH.0!/ o2s8gM7QohlYk\4E5u5DpA*jA95T"cG8;1c/cb^>*\7EhT-(6@q-T]Th)E6dEBs0C U@aS#o#D6`/M0!Fk%r3?:sX_e33Ec/F00o>_PnY\U<^nf1-?K:<_ccnb(5apT9+4rJ`.:7' "9-Ioc,#4BD($YiJ6[[r4list#6=dfAcIYcai=sljcrC;6i[>j`"ReKARB<6_>8sTF^^&@"&@AAhUUP,U!`gZU[-GW a6Tj&&%("SeBWT2G`['sE^$*]io^49tK*)7BrrV?S7>1", "*@H?[.d%HG6ZHqS`n%)oNViO6;)f)bdak)m[eh'ds'.LDkbL]M6TIu*Jk]d,Eip< m6[#jTkXg9KfpnoTOJ-Mc\^<76A#Od])]4]'CGK_H[JY]5K`_u;sY!'ljBQK2*_'W n:*_8]eGgCc$Z2B?dV'%rBU_(s$]]^_>crtW%\@h%T"$;j2E_u$$M1/\gA#W;c.$O Ndu\MC#dt8p>r%OAS@KAG?F'J9^6jpm;b\^H<0?T\)-/HcL["GkD7,j612?\[XMKJ 5KNT,nq1[:J\&uHAQahn,b/'Y"U.+jgY;X5?'8#iP(`RT_bEEHV`9N7Pf,/4k7tuD $_l^9iTd-[;itEmTkAGOCKHAA@"n2c[F5iIH,%F;6L$QXo,a(jF\;h*,U!q#PZF:s Q_[R+qUMl.UE[ET*SIJ$RP4uj2$BFd=Eh=+oDVLG8%W&ul#h6EO*G@=]fJK,I11<# DbeqP&-2/o1>\L4]YBL;.0*YhVt1Cj07ip>^GtHHeKG1E51gq#%t&TV!VlX2k/S-1 hjnA,J(ik:1JU0kjo".EY!8L\7mXg>]_]e?\o1BSIXTH9X.q;>*-1rGT\I'dDK!h4 ^H1B]&b+k[pO`Q33!.e9O$Nn*6r)@QN`Zp@%7qSO`+D0UWb45'RIrUa]frdJQrRqC `&E#;KSd15dA5 i'bYd_M$Iur5qiRH"_>7E+Lbk+&c;V;H4-^&5ldN_CZ2X'nlsO_hBBKij't(3W)j0 JeP!?`IRurr$Wum24QAi^Q'CFjG-&);#[YrScYil,+q6666-Boru*HgfG\#sY`](A <6U6t1Fr_W?nu38-C3?%,5oifX^fu61$e+-Fk/+lr7U`Pliq7&[?:#E3UL`n[Bq[i /H<0.f(QJZNqAA*oWInHmLEi)(ULjar6HALbol,?: r;ECY^s#mr"hl)#gcs!e<^L5N2*K"`VP$#$NhD^F9_>P9H86j/=l\o9d8oC#$Zig< A#(Pp\n(+'V)$tq.AWsPYp)O`_t)ssdK&c$"_aOO:ZLqB\boE!r^(&!5`iqI-%Q#r.UjP& !)Pi"+!P)%8JU?Dh@:+D\Fq(f0iZT'9`I 2a@K:^GLgSRfMX#hVCu?2hTtZ,sIisIC)7e]SJaU_L/VIrVts\pAZMhN"79Qmgd`P mm\rhd@N(fa&U&F6H6^8p35u45B2nc;RYE\<8'_AXZ$;="X&^NTlHc_m0Gm".VX-; k>F>jZ)8Q\5XL2kmgY nT_'@RZ'0,`C2rn5n^m\9r@W0>Es[^[ig^#+!o\_.a8@LjnmYpppQEsFd4utLh_--spg;sW!(*L_cr6bmN? s0=N?SgN')Xm7%lE.,76mYO]mo=aA,I`t$3knK3_YDj-tO/$nAZDVE`!dm+C#QFa> dG?5MDiQkdo,hI=I"0r>LD0AGST=Z([*t(K*I^'4q"$M4J)0McYIiV?5.?P]mJTh) \O.RBUqlMCT-%A5nZqHc95a4BHU%`3A'4,j]m^J&q-E;lJ%d`.G[&fuF6(&ikcpSD @7s:LRFQ&rBJD31N6Fa9]@!/%AB=nS-FVHld9oMKf;I/7;erci(3PdCQ"Z7R;%'*tr(%\Y6Ga&h<hnO[\8`5Um`S5eSMA:)seq>.=Ur CL_,K2:bh.;j_]AJ46)J0jshWR0$uDNJ1YBP?D+r7fFZtq'l,DS&i]I,I=3m'DrB+ IoCE'CJ.9(CMH@d>%^?O=%@R\B*Q`3Q#;fc9%cG51?Y&B>Uf@?Nj.G&"Vj3Mr3ahB S&bVBa0XsK@Sp?kkSq^f3OF\i4]1LHX=]3RNrq&MW(53S)1kDpBWM *c&n:D9O&8a<%bON*8/62Jo"$\f$lM]Qq*Q[b9e)%^b(QhmWJ[a.=M]q3:eQ%?s\S 5;hrF3lAQn.sPH.r9uuYaT%*l8c\crdtCdlR2YQ].75-L5Lf_kJ%:jo;5T94kosi1 5b,:Js-6o@oRA?GQbjJfp-G_#6;aIBR)%`.E&hpgQ#Te=O94qeUEPn&AbQWRKrcl>eop=oChPW$u<#&q?Q4qJ^lX Z,Vlh9d/\hI4hmQ?#Ff"YMJl&%`a@:(f,8&T7V[0T6Peb]f8]4H&VG(FXHI(>k!5* O$6jf90GL$KNEMLFdVt#."K#lJsZF`"[Oh4s*0G#rWrJ)55HeskT@3k-T($Q!UXV. rTlGSURUW51[M%!m=lg!h8(qK00\>`jb+oQ1]a/`7J&']-qC4h5Xc)\?r--t8)XF' D?Pt"&!ZOBnpGE['Wq\Y1Q$hPnq.h0Md:U1rckE'D;#M35NRCArnmW\*4"T(;QB_W VMX=NZ8fEN(2;cj.2eaDe%eA2Cg,:We@L@bH)jlq2V5,!DEYV`p#gZ3QM:lTq$iVd %9E8u<pA+Y4ei-!SIE@ad%R0 ardf=c\iG)#uTgg)Y:YE7I/Zc*_QCkfn,>mU"TPqhU;G)4rS7J%=Y0eNq5o%Qf,d`8TGqG,s?+ qsbr!hr3bINrM0#"T3YVe%a0is80GJaZ>=Z>]=&n^X%6l*)J(L*Z!](ol6&=Nd+J! 7DCSCrQfo+cVOC%53dWG@/\(4^sa;Ib:R.Df$Jj<@D+Oth<*cn'7PWNml"+^Z9`=e !&U-B)[si2]&[%3'#\.J.]u5QA!'7`20/W'&\/]Pgfb-7BWW[L`=J7*_kc'A;,o]]a=.Lq/e*J?!8s.CTtKA]IRtB`EhZI1s!,A[o'/d0*L,>M>l4uf)PQ,E;#U^q g\buP7c8tc8fRj3aIf2mMu\b_qLAGS?%?(E6MV]F"D.Z06P(qeN%BmT7J`WV=3IbI @q,HsA,ma%>NJZ+r%lGH*EXG6P)RtX1m!36)tlMC[1WLSI@]X$h._Mtktq0XUBB#! Iq@+sAO5Y:j\&2g_PP CMtR)Jm`M42T8'W%]$mbF7+;%L5G';dk+e%>Aioc1 N@?K>"%p_qiEA^J6Y1C*][OT&%X"DLr8"$AadPR_T/LAVS`e-JUZ MF*a>fHLQDIVml'5C`9pSeGfk/=l1UG*FWRE^2Mfhle )oBlW#@;(JJ#Rkp[4[O+hR0L&@p)LV^8K?#Aq\+dJ:t4Tb>.d\6)q$bkR2lph&YDPQ+\">0W$K^_.RC"h7cZ;.s7\M# o%b.pf:b@!f`)+*/HCA0^EeJ0'XBL]=]spuIYGZ3#g`E?q60W:hin8-ng@cFK,a<0 <>:E76Pi)t&47jTO?*m9j,kJs)3Y=3![En;c>ol*FgZ$fBA)?`g$2^aRu_]]DrZ#5 VB+OE>s?h&^3+`#QM_kR?D(nSTQEu*A5B"7:D@_k$sn*`ON]4KitgZbC.\6!Ol3Me U7nRuT9KKLLSWkk718fW8b[n"6E<#T:725A.cWUu;58lM3D8:m3knToT;u"jqjX-p1tt7E 7";9E4k3.ef1lF>U$/::hbCc1Md@8dDiC?5-A_Dod3j#-0,>SB??W((s4pP!S,#YC 48et.a8_ZPqY*"Js4m#>mgDnj\`in54`8#>F=6VRmld9B]uT0b9:in]8,\TqrGmtn ^Fsj2lT@?^ro^UO5Fh9Cp8$<,a*g-5m.8&fpH&V-?^p_8@ES%qZ1U&1!\a3MhUNKc Zo)O-.<)p`@AGMq^lm&KPLrftg/XcmJRMI2cB-eCV,@Pti4YA7M,mneK/OJ]gT$WE AMdYC)Drp%Q6a1>RfHNr1.EpVd"k#RJl!=L=Mb@[<h/6(Z8;H5Wcb3%0?5M +bJ-=@7dE-/6l'o+fu6<=,2G+Prsj5/:S']PUcZLotO?ofn-mA[di.AZuBLO.C'qbl%gTCP42rDVdUkAT(H TA2\;(\[i^q2&A7^j$WKXY6%`bs!hE4ZAlg2j?*SOL)\dH[ftZ^7O-EmMno5c?.*] WV0S[NDo56pU+kphnBhmBtn5^rUp=6G:[oR>O("KgqE#McgKi,KdZcffEXY1*@nn/ \'"E[(ZbVS5qIM#ncSl@qLn!\rK$8o$WCWXOK7oNC9.>0VW:MRm/VD6+"$Nnq:PW8 !+-9Bro\7[WiG&./)u3/nlQOOIS.Nhm&;RV.n('+D_1XuO,&-Q6%oIN\@LaAn%A Lh^I%L$U<%XW.r2Isg/^%IJ]PE$Y!Zl1sXA^*h!o..gg8s2oYZB34T[)> ^l\OcPlE3(g\d+>!KNr^@d'O7,`+kYBV^SVRV5#,6ds!d\lcO+d8$;"-r4iFV6,rY YEL\(jB8(S%A(/5Sq`^tbdVq&[X"?cp_\2Ml?E,@G581^Ke%@;.<`a&p;Dd]`!Q#K KnZLXU/ZS]Wh:Vs,\:O1-jfTs?7]_b$u\oUUkX8@W+M+*--r?gcl%`@l"[RN5UWDl Jr4_?8%WZC]4Q&o>3gLFhWnF!hm*$>q7;#GLeo=(dW^b8d% s)ZiupuNRss'53nfA1m?Sb;sLN;qKWrB7WVIk+g+Za gRsQ*4*kqjS^k,,(0-Sr*j1iaWc8.EbB\Y:?4`n4+Kc3*+:qKT@ELrj,bhRUEI"LY +q4@@Mp5$1Y2P(Mq-b1JW0S5.XL8,Fi.$qIganA^O[mnL,6\BjNdI;R-DfM hn&ne@('jg.[r,_>NWN*c?7r*f6,8af<#G:G:`H(>OL?fW+Y;PhH`YKG+Ta&4?ZYk f17@3s85:H`TaDG1YcbeK'W$&)iLGGQDKY(PFj4`.@rT'I/8L'r*S3K"9'Z<5koI^ ]nN:=1GqY!6Ba$%VMXC`&-2hea?S>^HqA`Qae'rs4fI> 7lR@]S#?US9/]UP!&Xo]i5b@K,nX?,_/HU;f*YJ;Akb/truD;E^F=TdS2=F`Hal9; 9QT\dD>r/!]H6J7H=Fteq,,`[``uiAE5ML_:!qje`cI_qAe5[S^^"Dps2boPZU;YI bNR,:kj'JWgLF@bhk-_EE/OALC&3m'LnE!)5=#Vr7m@ueIBu'*Y"TC(Fa+c5i7m0:,R)2+9:RStZ/H2pS"9+ql0+9%3!=MA^@0AN@ -An[Y,EWE4+,NsZ"JCdLBqcL1(ctoF61?Nn.OOO.I/5sY0(Q^h*r40 9eJ<4]@?4eDqOI-ORH+Ti+(%?1?XE2o>@t]iQAf(GsRCj0MV`b-OEG/"=6Y;i^@*M _WkR_n\"c:O?[qj1iHHkBNM]k=0Q;'T4O'f8!27k"au\0*"q4inh+^7qb?^)bbEg-O6`o*WCaP"/W;+l;?5/(5?gS]lLeV2><64]R;TX!WTjEr]cb#s6J\@TC*3arfl<,a*^*SL.8uANEP/*pA$j- iV2QWqWe64=*f6hZpu0O$"%M+R'B-ID29(9`Xc:;#HTBQ9kh:8WBa6h8uFPSUEQJ9 /uc6:Z.0KA@ZG.\75l*Z!4]i^@iJ.I_=3.:)@bE7i2u73_?8>'W_uQ.el<< 'G+=N5m3:&LamuWEI"da,",TP.]j2GF2O9Dr[/p5<6YkLo7Ags?pH4Jd0YF7i_ZBq %/b%0LKbH)J+Gn/.fU@?jJQ%NLeiTL,ls)/i;X]o3`'Ht2Uo%7;"fP>la*\D9G/+0 ]f!Ks0a%=aJH*^s?r?Nfen,\XJ8Bs=c^u,DH!iQemd'I_p H\DPbRh#(,RI@\SjOV;AgCEpo44Ln0E8Q[#rB$)5mf?/m(7Z6p3]gMcDPHL7<96:? WisWemQJ@tInB:JP5(_f?b!rjNjG^YN#lgNEPr?M"3Y ?8;\__gd_oIt#?5_^1p6kBpUmn,(n9s.c>Q2[6t`km9H')02H/pgA1,Ch(D*;sZnN r+L0BE(fI]F'=&llC*,*Oui)e1N=FXZ#)AGX2Imm=e_B;Yr8]'W*4&*=VY\5L$9j+ )GuSg'L\dJN#rHW+Q\?>m6IVG.Kki6Kug8]JMmE;afR/:s5X.?[JhNqqu0n#q^+T-=n@h;$WFSMMpiW2p0l'A*1Yjk fY59tk:BA>"&"!I!8IX;?,5GJO@r$Xr6WIZ_$uc_:%Q%88-/9no0V?#`Vu?XKDi82 &);VIi6J)"4+Lgn4&6:Q3B<=JB"6dcB[PYr-0HZ!/l#JQSuKFba1XCW]l?mD^p<1_ _ii'#adtVoI.ieni_TC%ZU"ME)G:"nC.!_BRgT.M(-j'>K*Zu[!'^aT,h`7oPQ$WN q&d0J%R7+b(LP:@-O9Nn[U0%MIMEpsO:QpV9?IoarWg,(SI`0L2*YgS11"c7>VV)3 *;Ch9L?*)U3q`J![JiZKc*EW5jM#J5roEK1S$^>_Is(juN=,J.Rk*S/O[PhR)+nA<*kb\"G2gW-/*:a+*^HCc[p5IH^Z]6+I E5G8^Qg@!4T.CQgf_iqbcO\KDjaWY^s"R.FG_])-[klP9;"ai+o](cCs*latHoOfL ZP.oiT2IDHF3rV-kTC7mOoDg&W!:omOhCtH.K>=I&J-#r4@GDGZk@s=6o<'d]BL`i O]LC,03h!]HD"_cU=bMT-9]+!ruoYe-`cS29*8n:B>0W..>gJn^^%]/U?XEN0:WT. ,:R>UGo2]u,&&`o"nY#9KHbCQ9b:pW$a]#N3s];#ABD">FI1\j/hK"BpYP-o SEDk/i]LN*3l>s,iOM_k]dJKi,6FKd^0`6@TS4%We(?n37Wer#HB$m30nplda`Q9fj?LMsSG6l-!Q4)&;OrJbDp2h%Pd.:H(2U!I>tf8I$)%l'aP s7[t_?dH=_pMQ=)62MI(5l8<'G5:N_.mTQ\m>lVGrI/V>+8<>GES]rAq`Fm55Ch#Y JEJ!bHN!AqpE'q@r:,mK*tJPU^HLr\qnq`LJ'dZ9qu(uWcOW'gIp_dFq/5XCc?Ob] deAZp4s)ES^9unnb+/KQ;neKChhpj?;irjIKZp>kbP[*c<] S,t8k"*g#\jPHaZ*!B"+h2QD[f%A9&R#_#Va9!;tp$k:_?!L#SNe;XFG`=W"U'NQu 6hR`mXZ0E7%T84;Ekr/Rr+oqD-r(5nH #U"ue$K=)DKPHT,2h`NfMF0Pc9d80j-/&2,2l-?bWI^,Ts5j0gEaAeI&Q$;8WoBk* s/G9h.`nRE(FD)!^ek$^WAa%lS#NM5_#Gn[7R.&YT\?DDDLiq'?6>9PEoj?Z2^Ng5E7/fs)>jCDuTe,oSW[`4,CW):]GZurcU6jE[,m& CO^t,>hDb4RR<\U,J%-:-5rWpfn9=4aA,#D3=UgZ3!+a=nIR1Fdn=D^,(cDI#^jq0 *Nd]-Y/K.i`7)H=RpP6t..O34rhl@f('jdeJ%X9PUOW8/-T-JV5_=-4W@/+IL.ZAI'NOjRI-!FE_f'CXZn)T%dPjp,LB_\h%l, %u]5(b6"3_%$o]-YMA8Xh!WNlAA=Hu5:g<7e'bFfm2ft\Gd>HUR:aM&>MYogF+9q/lesb: CMa(g>!n(K@98q.'d9-L]Ru]2kd7#+f ^d7.ad5_^9nqn.;Y9=rCU$&NP9o\lO(`uMI:M8$U$O$5HMZ7&/3<'3R5O\Ff.K;W8 \GecTho;\o4oVtKo8id^nb%Va.=[CC*q]Bj+k$B$q-s@g'F=X9R-u,Xqu-MMhldRd r:Y[0Dtj/-pSuPh/p]edr-4RSf-bu146l^Z+oaKf![%Q9TD!PX2!i&PO=P`&B=gK* F@Ij+`m&]Rc$#pXFf+Wpa;A\g)fAFVL>((1W1Ct4'DbnlH^j&ARUW6=TX(6FRa>IH s2VS!`DHPP0LjRV_eN1[(.F$F*WcoRNIY%JU61,-`1]e#Lf+qa'SIt2.k..PK`RG9 (&TcDDuR5jIn9Tpl:#-s8f&T\2j"[PrWeDI8:r[<2$2c<,9RSkr,4;:On)9Qq,>8I c2UKg-[&qo2`GC.pUlqts6K^)VMsY,+Dn7\!QtF**JqJ#8Se8hMMFF?]gJmC@J8bq k$%d`ofl]\)f!%WVsmcc4Y*.#Jbe!7_9$Lt">#OF08sKqN+C]@:U1:/)Vb`55d7s(00D0jFFJ/uKujshs/#Z/=(\Ku rmqt^pE/J"n\=^Q'=+N3b+Ci!"TMEkf@Qha/88:/.`bt48-MuH,c*OnTh$;e>/83i EDgMP6l%;96jpsg!YN-R7<'Mk]MOh8'I@50;^"&pjV+,r5K77m25%hZq 3GD5kXGo5O%DCERH[iZ^j1W`_'?IkIDpGqB1sbr-dJgI`LG,"]^HBI0ndl8G2?+7n q,<26^HP'cmP*[V_fe6c@Jk'WYP,f&T`98"n^D4KcY$qk3^ruD$j"s%O.pP.d2+UG :F@"Jp=!Aa7kY`b*u?`9(8Fg;U'#+C-j6ri+fcW`-]eMZ9ZZ(@*0eN1L?un#6%J;] #ZZuX++3"Y4WaJ7H_M-[<3dR1OKWF7KV?%TI"hI'#ZMY\-k9gM9E"6M!uU-NFJ'h6 &qECL(l:Hiq]W,W *T*L*?V_=?'']ak0b-(:':l[In7FMb"3hXW,Lu":"J&U,pLqqh"9#NfI`[9#'L&F= 4Jd0]Uir/mYFCc%%1'X/\Edo\K!ZgIo&<2[;&lb^O].>e/\oPY\@\IcG=GZj)-MAX LhN9mG+38oU#Wk%`^q'8?6/QL/b,p-GeTSjZ&S9?]Bce?DGR]d4PK4MUM]tKk.jpg +j2_TZc:&mFkE'4BWl[ZPe_X3laFlW?EA<0;oq"!:-2TN5?2[m+F*iP3*"R@7.,`s5i:FWjVn++5 F@@j,a"R-3c#tI/G:2kH8f[:n)XU-8kt3#`8fDMA(heirCPhFqNZj7STL,?a0a?V; qLZ00a;.EnP:5PYRm,m^1%[rH(:kMSbZdWjojM4B4Y)j\KaU$ROb.=W;`$Z*b? CgIss5RJJNg9Nhce)B7iNXakMS/U(@);B:G@aA>,$dME]hDJ;TG.RI?rFNd@RI\P- 'itoF?!lOH=Q2Pa;"3s_nKUOL:Z13Hr2J]`W;iJQV1.j>``U7aq.'#c;Ui]sPp&_q :JpG@Q't*p3^KYqHL%U/T&LeIHJ`[9?MWfb].D(q#>Yqqd]RW c]:-%1@>#5!V_YAm-m+9GZ-8CJE,6OBO;f,J?P!\^H;iP5ikM!n\\6# pNX(n>3gYN1/-sE@,S-oY%OS3.&Q"2+%lXV=KZ4=m=-4m1E^C?kR.Pk.=mE1\ iq5hT!:hMAr-^:4+!gPL!^F9CT-'8ABG5T_fmIn?!hBr:(K@bg %?0TgqZlF-+0[f^hro1=4'gd(ftf9nGgssoGo)0o84JjTuB$0K'9)_&hc2tSZ.r3o& hCH^lM4'd"'8N"#bfjnFQ=XZ?N\QPSe1``/E$=>-gQ[jV\'pbBs$$1uMUS!^?gCiu MC7YWk*tgbpHGel1Ca@1pLC)pdtdWOPIp&K*Rr_bFD*%jpSElTUU)]=C)XZfLgCnF n(.%nC.2M%U9B=A55qa,]RLs<&b+jAkpNB?Z2^N[^PE\OT!6M\WgB*F#[bFVl=0SH e9FIX@WY^os*d8sn#Mlg!IpYIp#kSi^Rn@&n]:!6(GrigXSKu6`eU>SD[[Mrgh1T4 ;t"b=iRp-Lj3?]oc'C.[[Zc]Z#93"6)f5E:D0tU9]B\cEl>>;@m2uSdC2@(SX[s'T @kHpQ+9J2VW"PIs'H*/N(^P0k8H]a'lfY21jeiuHT0_)Is-X0_&-:^=;WkBjSr_;I O@:>f+mB85qEH32T0rY[rg>;AQo#c`V#D_n!.Oj.NI\l>qk>W'6&l'@It=B5s&f7N r*NUh!V2TPT1$Kpjo=mL)rc>e!Nc;m"L)+G%[&>Mf`*P+s6r6,eEmE)$68F+QCRt` nKb#\0['HNZ6(b!FEmlEJ$SFYY5D]!0E9Jd+8uN@",C&=cEq'\ca@[slI^6TF8+'7 OT5=?IJtVj"-*lp!apJ6r%F(!5!KVgo"R'tGPt?#q#C'HUjr/(X3`"7h_$M4-8ih) 2;8I/ag=ggYY%Ns9MVob9!NnuT>6oQ<+:;2nJ2Ff%Tr!9=[+&*";iPET:&PS@2\IsS,-7[eS>=8[/% eGi\;MR#0me]HiYr1#?jgoX"j>=%r/!^Hm!B<2>YZSpuXD^ic`;O"Z$,]@0]rjp*9 cgE!t&\c5c;#e'5NJl?0\!n-$G:C2TO'c8mEf,KVDkH!>n@tNj^R[a-GOlM6^;CK# YPQORs(0pS47^#J"2bEB\*6+-\L`'VLqpkXmZ8&MU\c3p9!+ R\;'&<3;+4ZD`k?Z>#OuZO9&)`@r]tMo);fLa"c[N>J\<$e8b(%8iKA$8JH1/3/8^ ]DtU-^BH"#'_rUkpgf#-$8S8@fRf_$5>%Q.eu,;8W(:1s`98om?#Glj'CLb7o^>?.tPJH%XC&RtcI0;@nB3A6_=?`fOsq7fn. EjnC&7]#tQA_O%SFQ\PR`cDUcdL=jhFBTkGRR:*0!ouBPn@J?k]mJ,QFu0>![2kop 2P^6\W,F9Qo0FT?dF:puDu`\m^79joje,\4d=VeO#L2J=0(cZGq0!GbT*Hs`T1>aX 3[#_c!Pn`%Pjpf\5Fg'R*cj\9nm*gHJ,'&0m]ub5rk?MNs-hNrcYNN.61_:$Rf>FJ q9*dFn!CDqRa_(K>5P'$c*n3%^H-%QVq9j1\'`/Io2?Zq8(qeAg[(eA*6+K88"(G& RiM9om!G3A]:0d$)XS[OJG)$n[T[GHJq.A4)[FqE,/C";D[6ptatkZp2(H^+jC]>E AK'Pq6"re"!SPTM]JFs0E; <%;o:'A7s:b=0u^+uTKP0uX)$eILMeBE8,'n:tTlZ32G0!:hS\K&KIPkP+4td,iaU !'0XB(4=33Y@PnMpj\"q]dDIbYkX0dXrD$85Lm?-/cI]TGALJshoLP_!L`Pe/Xs!K,I-)]BCV`9K(G"PMM,U=Wp"#pJDnCd]kGitGR *!GaK"0DSl6_Ye*'g?^K#mkj4KQrMFN&A=AbV&l[PS!YsZhcg@e%IQdf8tjf7/j^k ce8BiB>Ldh'^'<8"9mO'!qNZVj^`6?PI38$GACXDp7hJ%,m@L&$9$E*f6$LfLPi2E MbK.rCL*l>^"K4ZEkD7=I<$D<.t'=tHnilnFdVu::+UnGs7l2TGqnA-hp5d$(;TiH s8TAqYOqj5oB<)dlA'BEgC`kK50h&hlFdDoH9$;N&DbPqcc;^-rq+Vsk3s:$b`V%< :>4Spb0Q7E2+%B[.*rD!!Yf+&64BQrLH;%/m=Y=Ho]Tso$Ad6+icLT5*DEg](K)AV )_^G@D'-BIN`2_5<>\&S$Bq:0,V)`kb&k3-Jm$0O_hn"*)??Fe4\Ejb4E)Ac%hSeL<0cI5"F@F1Rd*N$^n[CMu3=4HAaH9KZl%;9>i3Ym5u`Ln/akiI3a7LB$" /c)9&rj%mfoe>jT8Z?'/\\Be!R<4nI8L;(nro&=5b`Z52uah6bUnE!nDkqi s-"8+Z2Ce=4h7BYj:XWjqT!=;T20-MImj&$K'm8-3ZfBjIXBlFeR>47I>0EIRQTJ; I\t+oYQZ#Q&EW4]pU/DgRSTK't_&cqgm`b_>dLmN"BN3XT1TGND?A5`I]poO+; ;P\2NPhlc:#pM]./8b^^B,oc)85IUY8CYgn,9SAa8E0[2#d=@;1Mt,(J"Agn5?[n- numF1rg<`Ms,p8-*!+7^(R80f('(;M>6+@mQ[m^m^d)\K',^i#g#Te.!eT59@'bC% !AN0OZ9/DEb^9C92h+=Z>t4@^gLpi+q*c(s=iC<3B_PtEjkmM4<;r]g#QN,XDZTkk G&1gQ^\=T0++,;+sG&cZ4+H-RMuKr)6K6;GnNl s&2tn5:HUt\q*Fl:.fP$8p!^"E$aP2nb@M@?Ib0[%ElpbiWt'1pa,imQ2ZQuTD0ML _/oL%o!?pajP]$)OLlCQIYmu\$[9C!@IBGolqP#n)_p%#noD/TjDS\g'](#`g/M;; e&$=t0Emi$4d=U5FGnCSRT;qbkZRqq#>e'"o])7"H!0K L#4m/r6Ih4pAZ4)W8H5PTKc1KciSSP8:TKULHiQ&J6o9A0CdHW/9Eb@\erGW3PZWj `gQ@*7\-N->Ir?%6O*-PDG*\/3Q&0IH$$MXC E0^$;P4`s^o!RZVfeELc.)6/n>G=qM'P<;s;i!1odJ?]/,@^Xs*?%JqU(aru"AL@H Rhr7['s#Gfjj/c`A`As=3(4$B:ganNQm?r(7@m,87p1^kNZs[fM?MY3g_eSpTN69d ])`r-8KIB"(W&0[i]1XL3>]$#CPC8T&UM!BHG,I47Q]f#/t$p0j.a^G (-+p:X#3N4/!V7](ATG8$e32&<gF=#O8LAS\<5BV^ D#ec&RKrgVQ,S#4&"hCe=iB)Ek1pV!hA.Ts-rmlWU3TM,HSf*u:o<)7P!Nl:G-/N* `?*R0m0Zi4V5esB3cA!\M<`mt$KFb1441HZW7Dm;gRpGpeF/)<\"FuCdCCrQ/HO\N 5d(nVDj@(.lfh2,G`V]Ghi)N(SAJ>-r`J1YkIP7X[if\Pi>h./n:C:*DDZmAit #m,p5V@&691,I>[5Qk%#RZIe'aWhC*,`[CS9Ol!a[&bs/>rr->RD%.3XSOI77)>uWGS&"*!+"XC]l_Z('#NYDZnSL=V._. %V49XRfY4(![J$s=TJ*'4pB8aA&l:m[C[#?g0G23\/oI1BCQi+n6?P+/*6eis/4T% KDuIkD[-4pFDbINgd14TnGe>Ohj+1*HSFga=N&/bZ2BIYJa8*]qZ!\NAE*X$$Yf>N dpHA&8B<]GcSPh$a.sRRdAb,_.7V]VL/EdsOU6aSnV6"B#4NKJB*d3%O"h'$2?;Z. 7#X]:S69[&AULd@>Po."rXR%Ap.:*a8VmpB@_k\2P_V@jN;;Po6r\gL!padlJ$(mme r1)"W!ci=jkN;.[aP0is\1b,l$'cEO?e@s_Bl?8*VrD(>@ qNO2]ANh/F5+ggtT&tEKG^5\&/Gb)TpJ2nPIU#-&c==Zi&-QePTO3QU(\&+LD?2(u r:gX]s8R^0r9WI5mdH)n#)4aUM&0,_sVWE/SZt,Pm426!9N4l (cc:gZH5iKM/E[jSdM`:jB0>iU(OYf/j[QDH43qW-G^BnNse'ku-VQI)Ynd fr5CZSn.NV(mXY'Kd'm7b[%mRXdn_u9^uFaF,8=:X;(I0A1%%u%ek!-pK@UlKd*K8 I(:0tj_MhM(\sLI$ZtR;ogY-e];"u`!jp*nY7b_R(9U^en`1!^.$5/U3?jSK;eeg\ C`&9l?"uZlRNdk#W\d#$eu6b0NVT7C*V_4@/!9$r,'l85F'jISWFS21jF#[tGr3>8 G*Mge&:Vn"c_J/QS`E+3s,#1p-L[de'q%itmK1?PkQ34Ci`?hs*V%c&l?0 \Sh(K,!0%!3*Ng3Hed@CP 8rUhK!Jl9S!ZV4B]FZ?K!.8$9br@r73JVBnG7b?p?Ha84\R pqL'ar=9J>'A-SunO7ui]3tCdY]qd^ck31+d%Ni5otN)/r@_V5!`[f(G6)q.&;bq7 )FncMe2k%?8--inIn:4D[6-f@b5c&RbA`sB8=LQV4)hFKCTQ?]`H/[$,:WTmd(Z=N #A2`/reL=lr!se5h@KTMftX9\*t>t=*f9h[oi1ol&&l49P6h*(s$/o2Bmc4$WW--$ )hS)7P7>DC62h'sZ$N)u@R?g]K-U&@,4pHE8;#9&UW?QdQir>W,b+R>gSA@A(Ah\= gEe3!!XWj+!g41dOqV-kHS2DnM8i[\0PR\h.F&&fj$4e2+i+cZq51[=*ta_%"lT'' G"Jq RWa8:@'T)eWTdl[mb&NOX,X-'>9O'4h\tFe2pD/D9^8qjksprMYGW4XchEoCo^uXC !kt,>5_JRN*:l>-r(Hr`PPG_%s8R6FG6,J(j,:^fbV7BIHom(s*+V8#V4\4kTUC+& KAI;>Y80tgB2a"Ql0C(rV,6<=0/L5253RXq4A^ehWcmHf3H=ktZFM#KR;:>N2lJ'A <_:r<'!kRuI#E$l-KY3l(&.SRq=uH9q^D#8'Cpds@F 6Va]m*=I:K-Jm11;b(i.:okRm;8]I5n/]\Z$)$8mn;:/W%$_rhB94H]:b%+'Gc4FS $'gk^?.<<&oK+f5]rA!5Ges;G(ci>VS4dHHB5t-;o<&nW[n>&kQ)t!idCW]V#JFA) <.@I4iNNCQacPKe"%r%S._jN5I(r,7DM.M>)W`J\MKjc`:hD%MrEtA#=.DTeKNrd& :U#lqmcQk*h\@b,(+1u+/9O(?3KqRqR*C%CLN>JBHR2beC;/](I+?]Vl:W"`PK>jK OkPeG3ot]FpmY@HHRn3ialbWSj]U(.Q71W1jdU9F`ghED3`cRJBV@b0<2,._9rW;? HH;X@Zk4>5L!Dse7%cX3eD4s5H80`T$6S1%]UOI!m^mHWri\ms!:^i?AJMZEFpoDeC\YJgH:/o-+>s)VN0?fuN[4/E&Ys7Wr'q#;#ss,?pr;^V7ZNUIlEH"#@l q-f2f"'-fGD3+l7[FQi%0*,)\GDn#+LZ]V&6U_eOe ^b%gZj`1`:!YJ77Cg&,=JI$cqJ4'BZ!J5,t2?f$_"j"6&Lk)!@K4k.d%@'.9J!_"! `eA+-O93AuYn>\T9Xn+s3.)O_5sdD7#g,[pJdBFh2$*8G9`a7'EHV( ^g?#Manic^"T\@b\s8V>0*:0"&B.cKr*i.tRfX)$ruF^)E!2D^lmbEa/>sRcJ[JJnc`!d.9*p!,(>!-\Q/9pjdL=7QNEDfk5ZEg>#/i]P`M3o'!Y gu8?bs$rDY55'i$Cg@G>a8U#10Z?@:J*5Op0!s[3+0tnsnc.ji5dKbbrYO2d;_\97 58=+tq#BJ]nu__#r1B?l"q_EU+p'%h%ndK259sDk3(bPH68pT'-Ql*L!"fbX@iQM- *h-gP&b'oB2sI=>-2o:@fC,hrqr(iW>TF1bq0,OZ` !Fks09T!ITZ3NS5T+!0!Du5DN!]#1EZe%kJ%g`!C#fQbi!^Hn(-S,3[70U:(!KN"R U7t@^L$P3'T"QF&C^XVR/\m'$p$3'eG?WO'l^!"+:Zf>6q2\$V5/RmqE?C0[*fi*n &2<1e-Ob>GoU?^.48DAtIs(r+,5qhg'StW^!#d?,T4aP[VpMn_;NHPlGTpfKrF%MT 5ooW92>pQ)om.3r0b_6^N%RTK`rbMYIItGfcH$brb=:1]%J&U"Q2-p"EjogpmF"\_ URo+o4a)li`9u0,4')/p%ja(\!2pM`=] k<9lKrbP!ro7M'jN[Y!9N2_1[W:]&!l?g3ZDfr):Dc+&HVf\t3iEEeiaV(GhI//V@ RA!$:p./Lq&ChW9["m\\s2fNBHm8#m13549F#K#)/rb3$6g@"8oS%+8Ze6hKdoRVd ef9^tD@=mlg8cOPXHBhY/^7EIeP7aMSh-^^^SLhkH0miAkkoHnpP0Cd ?QCs#r.s<%o7l_[)SU44r09j[4(ID37P-6P=IgJ<4um/#CsZV)hf6*NnPI!L7'G'Q YN&07df:C\12dK2Z:ODA;N!h]o4jVe*E#fodF s$QagRi,k+*i#>GV$dls'WFb'&)*'RKa>JoB+`X9UeEMqulkJj>d,1"N18_ s+5(QP$D3".t9f`jS7X3-Xcr^>p]'^g(u^bnX\V0^EYuh[)X-%pb%("gWD:`l3`<8 8k4[;S-"t9NGJqY=$$I/!_=tp;kUt'ZdH1m&^9\jTssQaoJJ]t4##1N51GOh]oBCF j4h:!A$'&gCI%l0bm3j!s#6.Z57;=hs-'!\anj>[a_9H2*/_Ef*A?s_NS,TH s6YNi4,[fsQdY=Ca[e"f9Zab7b-=LY11M,P9VYOG_>fY>`]+$/Z2B4u[0%Y\r'Rmi 68\YXFUs.?qhIKXk_&m[j"8>(0PCLH'5Y`AJG;+>(.a7jMiY7nr_H8.,F>+X#Nt:2 XNf#_aj+5154sj"It7;9&Gn].$02W$HN^Jao-Yi1,UU%=-Q<(MjQZB.XEAeK)[c-o #n",(RNKa\.bH=&h?0Chb7RR8^S<2q%jlcB^L0"8?mkmOdXoa*qhqhs`*,D?3$%lkB^6h@>'4ph>c._]gG(^)r^aY_S)^E9lE?c>Y8-)u*k#E# @'=ml54-/a3hcFn6[#L8Dc[>&WZ&H?3RgPBbYpF:74Q`G)eI-J2W_joEhi<;O]n9r 'r5!= GlTj&u0INJ0ZOF")74`!QJHdObskiY=_T1`(3SW`mI X^>DcG.Zird%c2 LZeSqLQ*HXJ- kVUiY1u@[`g?16Hk<.8S4OS(2ggrDQ6,9@JGWD_A%U&k@rjRRW?d]!@rD2j;i<\A2 Z$QMKm"ljD0\\u8!U1rhIkiI)*!Cs2!:#&=p4mAaYo"G]7.ke\BUEC2\7SF1G#T<5 r#GX,"FiPM0Jgg1/(l=4`AffqA>T"j!Mo4;UP!%mV@9>N#S3ZTnjS*9/Ib:k/F!+c$m4O*rlIjk<$s2-[@K/N@XBE8YFJ`1nu;9!$!V@dh1GkbLU F`\V;"X[QbO0o#(s-!$sW;fdp`W"3+ncnp-B1@X.s$ZjLNFVb^m+G5uWumrVMK_W_ E_As?jsMC%n3[24GeugO$Jl94)Za+-noH`Vr=:3&ET%DS54Li;=TG9^fH(%goCM_I EUgfA\6p+Z-7[Xlb26$X^UBiOURgj1.'T*j0ps]4)Zck;26YTShe6''f;Ucr;/r]eD4s7*\I\*SrJ;ZDpmT\t3J9`^]B!.6We k6:/&_osd_%+u-cC)F\nq,n7$8I+p+"+$^\]i^/)RU+!s4dDnKPc-\`X#(NigE!!B (nt(IXBufRQka(l*ho8@X;_tM(E':j)IsBlC_RY$*$/W%iNF2L5VmGi`N-s^/4-9#1h';e*O.oB`4-r^49b0lDm-s@,"b+X&?PUMTU j\W5k8sQ:%V!'WF8u(l`dNWC)V+.p5.ZD!4L%Ws;4l#WpeFPEYH4%6ONG]Q,gO/9] $$3S7GH[/7rkDN-^!qT#2l!k:d/]C76`QHFp/!#CbFpDa2n'`]A]K45_FgA>WXGoi^WD\PD>`bgV^hR2K )E0pH'<8tW!IQn+V2MiM\L:ANk^ J30_=6iaT.+4R%2gN'66mo.,[r5f@VkXQ4B:S#[cTk^[>inOnesb N[+[Fj7%ZQs*nC,ia2rOs5uDUhp1HbF@uSF'8DR.)EqC]H%4]3_490tZXtj2[_$t/ p?I>(o+SRq`p?K]fH22T3\p'73:&CbloHr`4?_m`1#OhOCVGrpn+nnAbdYu!l4g^=iQ%%A$R+Kr(h225lI;hXp()?Ckr9, ';?3^X9h:LBL[\j!KePj5ZFZdnNS/dIk%W$NO"^Aro&@>plfR*EolK!MgpT`bFeXg ($%#U.t9,M6Ds`*9O=DUM#asrE%!/T>YY;im!k-BTgIgB=lrOZjp43TeirZU>3"n>f>rq:VJZa<[mQ-E#HI%lKeVWO/E9hH3(hiO]Cg7&N2m"*7p&XZ] T4K;=T4m(8e[uJ:rh!oX$M'g-hm(hElU^2Fn33UM\ J)^Kk_VJUH6/aGX5AP^KrpZ,'m3VR49Cb!-j_^s5&`D5Cj=i!d)AejdM@:7N$r0eO S?#Z$d\qJu7Hn]ji_/[EYI7*;f"lX4S+Ce^HDcgM^E7k`LtEDLhg(_[C]mQ[![Rcc ;kT1J!$2AhPRID8K_*A"p\+j`gDon0%/&Wpp"^mB)ZK7\p[^\M%m.=?[n=D=07Tll q.f/oF*rsW3L]OW)C*?n]a7.;0ug%e`qbaoR1ZdH=S.K6m8X9Ri2%jk*3WM`=q^T3ir%">5aA9eK5;P^Xjk-DMR#J%G]^'bgfVRCa"3NLH_0C =\@d,,]i)]3"'_r`E:u+[+&Q4cpSuZdlIfKY#u7K4 QHI#jMZ,[-#Lm>ZWClPXjR/=Hp;f&(dZcBqq/VQ=K*""\N/Q\+W&-pi:R*0SjAtM# NJ;PQ)="OtUQ0$AK3m8dcM4-7;9\DQl@'e#:l7GO5``M'[mLFAr6HUns#HqFjFZ[S =4P:hs$tal=6mskD#h%m+$cZ3U2t+*T\%k'5mYo9"YXMkb.t,B!)Xh.DDt%M-*F%CqH/ ?k2nBNV0lAp,F/\G%)]3ENn95^X^'%eK4Y7D?8Cm49\\;1*uOD,ZE_o$c#5^8SO26 nNT8:)?5ons250`>ks$MK@PhVUOk<&&cr%"IqSkus+rK,.IfmcIqSj`qS+]d56k>] CK6O9"0>c'(DT#i"Kpi4mQcKQUV%9Cne[S$JH*_q!3H3+5lQ%_Nk#<'"S`H=J6.EV [@lMgE=)tE*SD-G.Mk*HPWDm33<;!Kc8YmJ*:(b&+L6../;gB ia]s:L=q'.h=;+#p?@l6-Pi'<#\WpkNcZQZ^qT`#,9SeeL\3mQIp5LlG00Rk=TTfH B-Z=Pq#g+V"M(!F!^ukMWq*hH!]g\UqZW:\-)M?Pcj6QjX]Y7$or<(UC6omhXu7cd BTg'Z/G2oQoICs+CRrtEh<7-XqHs:n!':u28&/3TpmU]]lpe4ts#:(G(sr8#8#:`C O77\W(=DT/e8G`e:NN$J%SM4s8-V]G01H[@*`.6n8+lP`eb9uiY1;a,'c@uC17688 +36/%827*'2_BkBc\oaqGGiJaV8c`9`*4N6i[pPm,_lNt&oX+OT+pD56Qn9"_-pfKW!$6Q>nQ1u U;Bo0YrX,XjHXNPb-dUW%90$Pl?,sb'cM:[3PHFs?LpK7F#T)(V1-tH(c1FLV=j/LhQGg9P.1De0($^[Fp Ouh[ES+;g_p6G%>Q1*M/>dn"8A:nWWVco7IC6\Ck?t3b44f*S-ATt3EFt.HTatc%h kj?gB?3\_Ph+QdR)ZDQ#jWO>B:Qa[J.rtHc4HV\6>)R+E6`ihV`rZ_'EMgFrdMD]' !Uc4lk"Z9V>!@8I&q/Jc^@"?Q:=+L79E,r7JFb7??XA_-pm]tMs-(Tta<(EX5P;d% rCF`lJ$>h(+js4;P0?d@m8I+f,]Ij4n'Q7O(.>.lt8oAZk-SJg04e'=;WSBjqi SK;u91%'@(b\_(VkC>U,56Cr\*ek Eg.VJr5&@CdKCg-!1tth)L22cjSu=]nQDM%rT#q*aV%EFWepN?:SsO&a--4)=C"TIkD"$?`X8'09%VWDQaUX1TY8@IZeDad`f&2LleT0H :Q:]ohHCG0&Cbt!f<-!i><>sU!t7O(Y`(F8!+V!-#SW1W!_SrI13#9'q(')&SYabb?#QQXU/Z6s`9R]X\YtN?I JI"e?Z\V74_oMad%3qY@,GOhI,'6/h[1@q*KD^T+U&GRZ1g0'mG)VJ>+F2Ct]XJpq k89QD*1uGXOR/L%l3\+'T8>#lQXlXWU4)S$+7[i?JmDKg!tZC58-k8qNJ_\5M=QI^ (-_qiRcHp8?^/$bpqKe4Z]+q6s2(Kn!)A*>]uY3fnG0rNh/G)ZO>>k,1ZDn)s3raJ2,'59&5L E*2]tT?dC1K0(YSQQ&WE<*CgfS';Y7o]92_Alr$/>*UAf(*l!(VE!\53p3ZnJ UqEXAl75B[baUKBtkJXF2R$gLSaaEfutjJea/$5[bQZ:]VSu 63k";57[)(:gk(5T8o,0;\`-#)Cj-&'mfY.B;6?Rc%=PZ8[hou/mC0rKVj.DdPfC) ;"R'UH7=c$]o[M9`k5N8kG18>6Z:SO2]M7Xmn:(PFqo=s&m[.\=3ApM8p%ZL]o41d HDd)3&b,%pe?QYU2DGK/G"m)AB<.A4Zp#GtMDl/d@N@TB2/Gij7n#]XQeU#N3 Er'N*FYTM0.YBaDat1KZLVqN5&C+5TGAKK^GW08K(Ungj6HaPkg-=QtT3?A)"Rgk7m6$*]k9htVaiiZ%=(\Y Gt\WU`r"PIrss:b%X0sdrs)_u=T@Ch_O^Ani;_ACCWTjiM>p-T:gIU/=^Y9mDcWI= df7>R@kmcV:O7t.9!ge8q3C_>3Y6e(qOdOI2O$pe@!*ZCLkD(6X_%Ous0r#dZHU/b -$e([ruceF5DJV.&HDdJr'1SG\X7d]JG$ZmIXs:g5FW[5"t9Q0o*V&[Mjtn.aM+m/ I5QsG*!X(Yp`E"V&5t0$W@E%n.H:(N#J)%8Yi'R"@Rr;9+(KnGL(8#+"$i$MpT'PP@k 6OA9.kZLmO?GLc=^C'OuK89J;fVGBK-`:.f-^r&n)+c"p4Am!as+]`hs5=XCrt37e "IOtb@/7-=T<0E$ae'^IkZA(1gD>ZAEWYjM-[Y4s%t>`#6<"YpL:-(a6:OELLY2fc f`d)`#)1c@JfTG1+9J')"@Pbka2b\8`4A8C!<1;Op:l^(UPuso>d1-#GV;?.fN65Q $^C/TJcG7`!1*ZI_Yh[RBP@Crr4HnBH!:Vr2Xke#964?Rnf/SUlro9_"p?8?!i(Ce 7cQhQ_e&\&Pr_F9[@aL+IATKu>clfQp!VG2R6*"aIQMkV#JE(3Hnp:;*CKTFYeq/h !IeEp";(TclA>4a=q^GEU>1f&ME`(XrF&:hgNf?nB(\B\2YqODoV5:T[tcM@m]jFP B(^PHc)GI4Ki75N^/\O6I;>E[Fd>C/VQ1ioZQRH'0RHM[mTL_dG>1hmG?1kjDOspY ^.2V7ZQR:[Qt05;B-7K3i!1YHmZfEW`+4.d%!r\,N1r.+TKLrS`UCn7Vl0\3#7*dI JjG5K-rV#R2,L,5^3@qANVXXY+]i9oK,RsH%W=an44&$Rd)?RmAdWj<4V..%-1c*Y o4^#PYSDTAL-B?>n$_1f'CRlQ]/A7@QcmbIV::c.FKHNA!\ZFZYI-.sH?gSA97JiC qpi&9ZiEUcJpAE'j, i;]ca2!.;hm,JNBiq@9MFDYK%2^qe1="WI[K`m2"-L#ZMuqcK]iA?;uQU5lBNn"/,`6f5eJsn >DJ/cA,VILrVUe@pKs9ZJ%oC\o3'!":RQV%S12PZj!.Un/_I_@i:,1-o ca]O6p,Y(qF^i5RfS'!]M)C4OCZi^h&8&tqB1BQEO*D?<:C_[0#[liAO7p)7s$o-+ L>#qKs8=OpGX+Zlj0J]Y"gD^@Y[[Ql*tG5$Z*#OaWYS];'q.A[Il;a89]CPBr]`9[ !;rH+TgKUqM>W51@tV0u63%JSIrPUEBbH7%';0QbGC^4UocMZ<1t0,0VuDJJ?Vk-/ ;Ih/@^OR@(_tq-TfR91LZG60Kn]rk/.k#K?s6&H'A`l*djZ$f442L[k&HMsGA40`8 '9Ri4)!C0^f.*I%l[QD?EqfDc(Pi(\Ip7V^"?$=oHE,RZ6^9U(]@)VVK*?bnWEe1^ jT@aT%+P%\e>r[i&CgLaf5DdjemTg90\*OY\n1'`em/9Dr4LCjDlN?DOY1!sJ.k'H &-8^*KE#Qk>T/MI.6rD7!(tGdQAE3L`L_d2p\[?ZpcF&AS;]#2oM"#(1omDtoD!Qo fN=o9(rN:#rQ%OCJ4P*er:^H^pk@r.L[#%t)$Yd6Kg_@q"GB6HOAZ%@C&]^@G/OnQ `nCMlE=UA&p5s@]CQIIPT@T-eJU7]s1J9s\TuqMEjt2nCs()o.EZW`c#p#.GHu:Q560mhs]goEK?d;i&G0&t/$+g_f*8_`Z][u1_^!6P(K>[4oqcT'[ TjjKTTkbV)V67VI]O5SJiAuG(7\I8)UO^+A?b!)6BN(U4US)jaY]sHQ^oOQXXZkL> -IoU]?Fq[RXWg"r[$t.0N\5EddOe;.0&H*jjkt=c%Nsm6iqaju&;25F]]WLlN[bH6 P6L5o5f<$RO:OL`R9A60+5`"%"JSO$k^#A&PD3Br5];SE%r+'7S%+M?H!g=8*qrQn qU$+-phJR\S`l&6oO8iP;2+su8P!-;!kne'$G]I*e^L_1d1>.gD+Ns`0q#5BjF3V! r+/1UpI2LI(0:AlX8;Fpdc1YQcUMG0lB?LkK*O!Dh(m:+,3jP&"o_kfTdPK>csG56 "*JISgG[DQCQQVAWR+oo_biVC8j;$0.DSd1=&3tR[d'I7b.EpMGKKAu8Q!+0BI?80EPSSehl`SN=.OpuIm= PMSeVf.Kh#Ribur4733pNVUeYY+7S_ApW*fotMlRs2"`rrB^,`>2k$u^1O;"-7A;4 8"Eq4XaOE5h1,;Dj:B5E`;aDZ-I;PGLqFE+r_JR&'Dil)^[-IF*Z(Ok+0%\'"Hi!M J40Aeli1Pr)h\14c/4$GT?R4qeGh&[mk/.)047M7@HCiqa;4fd@ejYKgLoY/!g3g; -mTD__WO"sT-B=eZ42M4B,UVS=lN[)Nt#hlEfp'Bh"A=@lT)GB_"E68&I-V>-21rb?AmK#-/`K=)YQl8GpY5&NJb[qVq( 4SZ;n,2c;h%UckZf3IX5q6msJ!K.uq+U*mLMGrFnFp,/t"\91qH@\^?cU/\279jP.:!#f:fQMITC7C3QEhMd12PFfXHSi"&eiM\"@Pa!JH#_H%/e!P+9IB!rBp3# !l4iP&a"U3r]q_&_6;cnbE+DNnjE>l,Fpa,8OU(seKD`(I[V+]>bKS\)SaDW5jWV]b0$SO;aEM=A[;!pkCRj^1`/CC%<S1'^g;^ljgL:Q!Q][Xs6hT:2\+28;BNrr,8K0\=u f>2nIVZ?\o4QlTe0(@[:mou*uZ^Qqf[D/6^qr4jMkL13=:>:5&u9adL7$-e=.X]lM]eE[RladQ-QdK;@PUJb/g3-T+WC> #Jr`S4C%dlF]"n;h3<., WCIuWht>1l3%Xt*0_^>7mai]-Q\3dX^$+hnqNWDmK0E6n,i8-+MHBF=1Y U"?mrKt.bcgkk7ePAIjf^"r^)3,b3$eBM\'4/t]R(C; FTHP?fp/'O-1p`NXTEFb]Yl@)D$*2Gf8t`.o$DgWKRmB%Cb%'q9 bT[Os;*l:LBZpJtfgK*O7!Fjb'%"N#oQ;hcirnQ>"Y'?\%/Bk6g>=hjrH2?9s7/CR s2F`I=S_u>>m'0fmjm,lH=$?TMgA4tIs9')lOtUP*4P]Va\lCAcT0gMGIoWn"nFm) f_`3H50'OJN_Z`?1:_:BEl7h9qH4d=lXn/@r(6EC794jAgbJ.HH6WCJ%Qp'XMLXXc Xp,,fs.KU0Y-aMiT+q;Ur@c;J0$Q.#c8>?8s%DX,&ABCki,bapnYH4$@X]FX6C[Y_ mf22E`J(`5s-&^t[bu@n^^As&_jXiGG6e-a(:`Ek_4Msatik`^ig?mG@>Kb2KMF?ca66Cco]:cr^3R3G1 #jVH&9gF0q`k7i73E\NG6iackOI*GZ+Q!A%a&?5rHd(af[mlKa>H)+VWU6A*CqN_s ^ ZRVTnXo<]Cj0NI[:SpiM3b8*7[,hPAp(+$jhOJP5A^p,0JG[k\cZ>X`a4o1j2Z$0* XrjWKhd=("TmBL/jfZb3h.C4f*`"-HQ\05B9o.bmjO"c?T>Jp@&>H!fofBg3jZKi"c`O0?j0 1$3X=U>[tCH3ZLnLX&>]kMspsA3?dX?6OX&'YRh(hQFgj4eHlWOndfCUS#QRY>aYo C%V!RqI'_Z4+Y+.Lu.U>/\jM_!@i'AJ"_NZb=?3&&:C()7\G^N.0TY- b7S[iij,2N0o5?i9H`ka;r%I`qLVI0(A%jb(Wio`*&dJ>>G,W$05h !paodD[9_T**C36eD*:4*!-2AI5$.9YVC[Q+(P`R#+-G#2okL`2$`sGhJ9Q4T>f[c QM^A[!!dnR+:'(n_S^2bUDsqV>uQs"n2TXUFo7b(&-9Y"D1FSOa;2!fGH'X_d*iqB gIMH#5ZjCPq"D/mt#1Go@`DYg\ b%32+e'J0OCM"h>>=\lZ3lF.PVS>19I!M+YnhB7uBrTFUAKOYtI57quaW^><%V^AG C&7h=l+>tfDi`Yc0kPY0T]<^/QQ,m@=*d$TGBofoo3Q*:GGo5n=MpGUgjX=RiA*$kSL?Cf .aX^.<#C\ZNJ,`nHVj<[Wn`HQejm!&."oEZ0<7:9=G/HkR8RZfn;) o^r?53/fZ`IP\Q@9jKD>(PLH=V[Lno,'8^%J?'FWm99@OB)9a^cA)L,r7'l=r"i:h ^upmgO%5JL(mb33?hW;NWV^36\;3247NID\VZ"mR'`T,NH>gCMK+%7r[\\RMebo%R %VX#P?S-V4Q2EgGg&9&K(e*]&$Cnf8oNiF5DU(Eug;dV!BF=7,nWTCBL^lgp#bmsq #U?B8'Rk<:\puX2'aF#SKZ[h%j(^D]NonqkB79$6M4@Y)kkFA1cb$.u8(#(`W@''< J"KfXcb@&bq4CllTA7h=E_d?Np:noQhu@6MpQoq*hm<<3Ghi57UGd$Bg"g"W]!L=H Qi1R1c5lV(DAo_V*1>R^/5<3Q*+)@+)tT1krf[F*!*Sn@KBPh;]af42%X$bKPlpEV IBCe>kEhH`B>#PUIn/l*8dFAU)PM"bM+tCn$N,tBNmG0GjdMIsR"PDBf`,RAs4e

e,QZbRcHL`WW+:DB/b>1'*(H"7G/H.>T"^t\gm>jlCao&Xi!UJ5 (^L2+"^Rk1h.8c5jZ!><.Q7q=92]/nHLkh;f!2f'j7V.SlaBU>ml8h$F1QAC9]PQo VEK"FHP`+]/@Oo3Uqj5FIg?,GUQF:tR,25fahEl"qSF-hp=.X[Jee>1TWDr3ZiGKf =$_C!cH7]YZo$OuA?3X:X8$oIn:+u51%Ba$\:HlV"@V_gdY.rL"9]AH$3#K&IR,

HhNlrg1.^0 O4is7k'Qfhn(hV/M1Eqal\KMlfGJ8k.A51u\X=D&B0ik&TZInXU7EV.?%>bUQX0XK [F5)*`;^t[X=S:16Oh,]n]]*uccbi,b4Q;]H<'OLC\dCX78=jl2Z6'V@fj?]`N,#` .\&,X^/?J(UJ^;6MC"B)8`;8Z4A;t5+5=H@!pLOA(pAO UUkB(=M?t.H%4K/j^ELFrl[Im@/c?1hFCc$c*@jC+)KRn=MM2?G#q2YY,9pd%CQ)u C].?:)X@6ilM[.jr0s/WR[SgH>Cp'`K">.`#+G7G2K#"!fK"g&:7Ag/[*ruajr^s13gcj(b^`$$N)H BT2Q1+SW!5m`Q(3bpmg,7%Yu!V[CcWQKJV&B`YeIMJgqjpDU$_4#l^$nilE,_UF'* A0)6(I6OV%YYY7N*ne$VUgL:dh@ah"c_F8_;2aCHHp?oQN1/?reK3LTB3pl]PA#jI CWl.nOP-bUgT)[7?VT[5MX1@T.DS`9kGuZe+O;$h7HD\-*u>U+7=cG/$>/e^aoIS( 9)g7^P_'JA582EJLaqAX>%Q3%JnD^DWIaRrkG9_pA[#+s'4+OoFYn_`]ge)]$+a::$Onum4OX`A6\E5W:-$Z2q;CoWeZs,$kN./o)'U%elm o/"W!d`fN,;#GtD;keD+nc(i8s%F4/)'Q0_,tgMu$8D6>.FoUfh>mK"0)h4Nq=A[G 2nu$\a4GcCq#dH1]Li;*-cLR4Ted(B5BQ>hH-V)u>USP2Ztou/Iqn+%.0'sAS`?0& lc+)KY!keI!kq1Hs5WDsT\I!)s8s6lM`C*GodJ/^_KNTXm1gZBD%\ 0OP51&pa*E*ZV=e=h/TnM,RiF"8G*icn;rG#,VAg"G$DKZcpm>/--Fffp4-#?j5.Q kufoY)7JIQ+=5bPa.<9OJVXO*6@,LLOHtGg"o5(K-`5NB,hqAAG;/eV+i,lfaUo^> -.N/C+=Gnq5L6C?LgFD>(4ln`#`sm0+U++Y#aHsH;A"WOp5e)1"mt@4O+WL4'#88N9fAhg[t3pejm&YJ"PEi [i)5*VeuDoAcL@R`s39LpF!WBNr-OEme>Krqs%kaL#J+L6fH)_d;n.?Ss\d1K[K3% ?$H-Q=(Zqp(=`&k?"q".ftH5=JA1I.!Fu _$96"`F^@!PNh.@$F+5hkk('?Wj+LP8<5f'n+;`,d#gO6a$-+=I<0oGAcE9rB`C)) oZIR$hbMWAT;=\2L\Ts>HH5j9'@\ZF)LXT#PlB5VjlJ,]m?Z2UmC8'MQ14$'`p?%J,5DG.>NL0_Gd]NJgi0lV%9OI*BI]81t68e/1KQJ.WgmIPCKk9&dbZMB[h (/#/h(LOIoEZb4?j:=A`D2J/IqU]A^J%B5$rr;hX_^A5A^O*u^d2A"s:O0[%K)Xaa `cHp'$Nfhtb/<,uXb"WQXB,3?MLRtleI#Bjq6U"Q0 YH@bUs,#_WjKDV_/q`\;MuY2n+t&lS9K,Jd[)>Ws7g!hW1%R!%$a"Ea JbFaam>6T[;@[mr!Co27O*.9=mnQ$nP6RQD9a=GdAXr&3>Qs\JG@tAtH[K$j9QO]C ?!V\tFg+=KW)PN`158ot,7o*?\/o5CY,hMn;i%:N6j+)#LN,<[Z7K&R5;Ub8/^la< _[8[t5_`!2VG/ho^0O>8qO!_3J-`r1!)h83OT1M\',']l''sTXJG=AE\2aAqGe<_R HX[bPS`u`4lWI3N>>i\D-tVs!!^tgO0eYpE#a5S4A`=!+,SEqp_=5ieAXl@)$RcbR 'Gtp^[23HdiI?P*N+i+H^_@mkIhiS&-kmh>AQX(dGeGFD,+u7l@%`B3VY-I[EB7!5 q,G8WM_."C\!aqV^%Q@D`eVI$?Q7\hf[e8'I&V%Uq]I3qJDNQ6Zc^"ukL,LV%)2$S%S6q?f4O[ark g_=2knC,_@BZ;*9A+'ni4rbku3^rmc*orB*1&^VZofjh&^Rd?4I)[#R]baD/ShUFu ]0Q>V*:8O1Zu:sBIS?S]22o9^XaaDH9W<.B)ETjCA"]R3ZSs!c&=^ )Z4965,JBoj$HCZg3*nc+1IXV^PRjG^R5;gce;(;hEoEB9]!5b+RRp>jf^&nYJgk" ?j3DQ(^j'C!Y_ZV(b7M]MJ/eP1917QX=Ia\,PEF858NPhj@#6UUT+8"%aWqKN;s7f:WZ0_%X\`[5Q9`qU9)]S !;U\.D#!,#6B8aDBE'@Z)n(/sIe^N+ImudWZ`];p&[8;8j%hf/-2arOp-/ZWO8Amd m0WA'+T)`uPYC.f'sh)gd]-Dl.X%AO=bin?K::Iqa_K8._>aN1+%8F0Za6)(2X%+M "F@IAIFX/1W^,Qq8:f=.mnpDm"9-=c+Lo09";n'I"U;AC_mL)f]#^#FnBq)g;%s.q j,JD9aiu6reDpf )#mDmo#`nD$?*LI"\s"cFdEc\l#oBGIui"A7L)2lfI"@W/!Yom!i$j4Gb#`0s- -AdmYpI_5Y#,JOfO:+\"*i1&I+V,q_Did3BJ)Vn2TMgIE)LSf$6WJA8FYG)TY(f,? lb:-ZiHU"J;p?*@>Ks?qD0ip?o8A7UmgX,`0YHcfSJgqfn;`:A],p1;?IIN`eN;U< Hed%ph:26_Vl,1@0C"29l,$1)LE@JlHZ1Z^INWO>5B1-TFf[f55EJ%X^CL\KT"b-j ^;A1pih:q)_1Cshrk+qU69mJ+1cA;i5$U4M.j!(QO,aoKNYKcuj;]%/5;eUKh=mP*A$i]eg35G+bLq@r&53MXQk9p#9+ Rk.i"?+OMCjHB%O(QJH9f'*!07UI5prbT?sqig*Mp"1e.7PD34@1$tI)EY&J*E>oH bDhN19TQ1(Suc1D^1R>oL3:g$Xh3&pk$ErPB`EPIRMQp&DUfZ_cqlC=WDri'+8);AgbgShYBH!KK<< aMkqA;TT-EF?R0^*P#]Dg?GPH%GL9FbQR"V5=C_l'U+-;!JJ,-j>7dAc\9fQW1 _pH-Ep\u!S4RSHi-2/K:RH6s8I1+jSp"f:2=bmUSkr3 X,c%6irejjY'+a5\CR]d62j,$W*&J^PsGO4CW+LJ^(^9K>],>^s-8ASs.fR#C&!qQ fAM-&!`o#E[Oa)=XsgU7QJ1oQm6t7b@du\XJ#2pa,Biqhq&B6=LEZ^5s5;8,ETDqnLK<\%j'+.Bq"@[jCrJ[!`5U)uOUs/'IVs&WgE/V*=Z=)3$O' Bi+W[&j7<<0L(YblB%1iOHb8X*uei3'5J6p@gb[pgAl0npQH72;j3d$dbXV.HfsSg &.q`F_W$jd!Wm7qL`[rZKSoul6@Kc1!b(.>_M+]iOZ65iM%E=tE'f@dWE5Pg;#(>e V/1hu+s9FZ$3l`[Tc-Y8[Q:]p)r@:umF2@6fD(EXH;3!Qmr,Elemrj%`Tg@uQ7JN\ Y'6?ugV*PtmuH0$]+BDQ0D+!]5@At^d,i9?kHuJjbJVP^6`^Y_m*iP%PIei1@/f,P q;M,5U#_'([*c\urBTN7@.qrTcG760^;7J=_1J9;U>Fj,rU<#,E%]Z93aKj`Y&%?M 5,g1=VFJ]T7Y-`eZ(crWgnS@nB1spiH6Tq#95+Y)%PsIF&9=n(k].'Q2Y9\\shsA9&%:JXbP!5<] Ikaar$KQ\io$_Rca.0Xere6Y;3*/c(1a<6ZLr:%%JpkZO/Y(1WSVrpB&b3)\nbKu )`=MECXub@(gg/Y4Y8O;MG$->6Je>%*`'Rt_m)ZX0a7]8=J\8E+O(3:$*O:=l5L *k8'mXtco-[bU[]m=-;Es&5pPEq:47^i%Sj2sK[8dW9]pLD&%mlH/Mf;*LNnI&9qqBkep.+pn&u3$2G[56uAQK'>XnQ,PdB'&b6/4 q>km%.-,J^]j lFPu)8*'\Z>CM^ZlK>q*:P&%IT8&pJ!QZ@G!kqp2Dc'A>aar@Mq85F'Cb%'C(K]6^ p^V>LUIs[E;7]f-goAomg.JOeNORlk015?'=K@MD?c/tr,6)GYr$sXRl:Qe7mAIgn r"ARUid\rIrnr8M!^Qa4Z*-\l(J@R-&.eZfaoIEQ7qtY6OST4Cj7VuM[Dh!1Km99Z^Dg#Wo[puU"Om[!>QjZ#0UYHEDYOY4c399De [-%V40?Ru^Bukd<,ST`uDiFVa%-@'aUTY0T^,\OWl%II1Vi?.NMY>e-g>hdhV2Igd k.eK>l.Xjfl__H2'EP)G>rMWr7=`L(-]Gc%8H*-0HSeKG@u0bT(\VZ$q*H+hR+cdk [WY9SED3`Z6G.GA[c;mQa"c-us4`2+^O4&__fOac\$o+W^3\$#c=,UC&,9GecT494E-`;qs4CQ^dHtJg[F,PeC,;5tLS j`9NS.U/3'!Vg"EB(/62YaeMmrqDUIr<`L*b1Tec!%ie&.q\tZ'S,#4%VSh8#\[)o -rC*ID/+6LM@C0E\`3N^pkV9?!>mSOj'*I3l>-*,2.;bB[-0q&p(NA2ac%2Lg75(:`1rtB D9f@=h]XAn4tFr31Y4NpT1sWl2*kESf3,B(u'^' qkO?bn:,VY-VOP]F'o@58*gUb;&6t-"S9/I;#,bA!PVqZ%PO?i$R=R:6@&K:JBJJ] $.rKH'>V)To+qc46m@+G,,O>p8JFk/.Ss7cN$:M#>#QHiX:8pnZF[+$"4\Hf26IVc :/c:YL[$FNeQ\SXZiNo\gRW%u4P/_CY2/,SQd=>+s//-ZrF*_Np)G-43\V8[IjfJ` 0R7smF_W=QHoOb`S.2n)YV$a!5GTqLeE%@Zp$bKq_:WG;fP'6r=P:UqGC!.@4"6Ph jNUD<@@WnJbtM.Lr]`<4IV(_,RE:-FVZUj31[e+b]f^$/fC9l2)dWK)&X.^(;#`P3 rM'nq:ARTkl/d4"V??Rm89ZrDI22FKLA"e6m>VnH>@#mV5pZI@B1SX:TRD)&aoB!5 Zl`']s)Q]_nMufRkDXl%5^e$BLA\e;J&L=U;ZKSodpFbrr;*ebJ"AFpp))nLK@p'B Zq$mefD;`g43:PBWD@5&&$"2V82fad>6b=D3q9?ZWPu6oHsX+"6#>6lGpc"u1 m6h37PjZE2G@;J413Y[F^RHG&9bHceLj+qLgG%Se9XKd)g4G/?@o@mfR!9&e1*I$b aW_XW:Eniia)LiaE\aWA'^IV$:V)^LKjpB)Z+F9-N@O;p3j=["Z*3?4kUcLe-;UeJ HZF2ViiR(]Xkniq9.sL#]je8=W[.`-s/Ir>5Je36^\#;GV>s9`D3s\E5QiXo[_X3( mcPP_hd(6sihGK1B,pqob3?$lm]RW%I.=GmZNo_rpA:JSB0S8k4ujXfnu.mL<;pRI cWK-'=9-ElDDVpcs/-+9,CM,)s'R4f^YPfkc*sUqLQFaIdHK=cn(h%1dpD4l<^TCJ YOnnp]?QjDEp`G"Qb8W.V^UDi4+Gt[@_Cqqe r="rU;>-bB5K_m^:]+K&m=Y=j&jJW,AdEDV")n\]+;O^o,tsSg<@MKZ8QjRVQ<)/2 Og0]JBMbuR<<:?:JCX3\g6E3M!=/iJkYqcaD\Obl599jl%QVH.ZVB]q,6/hEB"'nL 5`[+f7hoL+:DEqf0MiVk$s#h-C%gaI;1QAq00ie.1spif.L,;P\M11GRAbu@'9h-p @%o]bV_t3]6mlq)$U"7di;Did2N +#$rMp/h,5Zu7Ale'i0^d]?AG626ac$+j^-GK%Ujj&cA&YnjT!k&K=&..^Qp"JiHYnr**)[E>dSa=j1-BWa]^rFW$?I(2KmmUCs.T38g--]H,QQsS V>q@d0Utsi_[f%P"$&K*5E!EhEd7RG+T[3\KPCT/.75Xrb*2o6FbiX);I(/DV[77h "LP*FSSIUWNVbu+lYs8TFHuf0NRL4bbCM_+6OfVWR_4]id#YR/*GlT`./;OaM-ul/k\/m90/]=o,0Tc>QE]5+::) cGZ1G->6f[Iuf]K*le34O8Z0cqca=!AfEdNi6>m!>A_l>G#R;d-i]eKHZ'n;_tE8C dMI\[?QV`&H+lLs[Om1_G6R98(Q=qj10qJsG4F9I`!u59g8/H6!K5R\4MJ,`nM@&W Si?K(,k[Y%kcC:uVQdOOfRlB9Z`TH"oqk5:lXpr:oV-2N]H)EJMZKO%Yg?Q,YT2\m O)fD<<,DBX(c#N9S'T"h=]ULJ/M2BJ2M&BI/%?k\KjBG3u XX(k49X,(kYGFca-rM:ILdDlOQ(OEH_dm:O@mob=N9P1M#Q;bWj3^-m&#IoC)mK)6 8=ts,^-,$_q2EF6Qe"9EG/N=A/bn:3BXQ1Tnpf3\aXbI4GQc[YotN*Ls%@Ons2B?C Ip9eiO)NbNkITKYQ^;pqH2FDdhbL\qHIVo=6-n`fHXE694[87VHJ8D;1_YAP$a'#- (h_kOq1JJD<;c%`-AG[`6W!LRNV*,6qj)U."!,+hmD$iZUX?]e_$B&Y>3jX8j5$g0 ,37XSp8Co:JFa3]nun@kJG^q:c6.V5^kqQqUs)S5@RD.7^A@?Vs65%.!lP46MBZhd ?Xc[L+#!VaA3;6-cq,[/Y#Mo]rscsIo!T&Zr[0VhJJ$+eK.;AFq#;H8LZ2\#/!_mY 5**GqQTs1W;84njfj1n6/k(kQDImLb,.(,` euoE.(f3^2WM9k1WqHu8+,;B@!dGn#)%e[)q43YjBYA_1=&V^]6W.]:HrEaUIFTC@ .SM9!P_fK1!iCM2a5QfZQ2)9XO)N,%R%_N42u#Th_)XZ( g&Lk.^.%kidN\\uZmg).QsVD'+9;ET;h3Et7oKC5s545Z5WK(ncbtm36+`<>H^":= T]>D7#absmXYlq+imf`j.\oZS<3$G-P;=0=^9%b2G,8iLb%"!,VQ]V3fD87nqG5_L AfH?aS&4DF0DU*plSdBdYcMoP=mf/Z^I:m04q_K0TRPFbOf'(Rsb/]^1O!_pi N03#LA+'n9ruT,X4[aQs7t,rPo\he'iAC8M*;91/FP-,M8'mrAhk-VU>F6&d(BFIq C\0EY^r81G?!<"!]j+dVG^[KXZPs2MUU^@M_WA1d0+)X^RTskBNW.Vb)eVAl[bUcTNo_gh;t?is534r-T][71UNd7)8T#0n^VbXDJa]? HRmh&i?_,BIfq7r$1m30!_E:ja<.p)^Ne??=Lr@aGg$)qkNm]0B)g[CG+YD9-iF#= @kOr+EI75+a0Q.[ccl3TSYi$LA/l\(/5.b\a&mDX9H5rUoR*P.!L#Q&aFA#fKmGq2 BW2MGl:LVqg3mu4qfFalZo<5\q-.Ss$1g)UHT"oMeQ7(HX5$S,8*PkRh->Mm58=-4 OcrE$Lucm+P]Q0ts,0Ne-,h865jYGX?TJ.q*8g&%i.#VfP!?kfqIU$WJ(4/mT_Jcl bPBG(Og@[B!raR)J&@"*237laj\PXnQTs35#9YLGV0Z/30D@2Crh8lfs,4g;*!WG@ s*3lQ!7tZ\>pa)17K.%q^IH;G'!\fQ7RWYE!>Dm&e`)<@bs%dNFC.KaqYPpm%3C QBZV/'RAgU\.cLNAE>d_UA&a!=1Y]=;_kIUK7Y5p)D1a1ZqS`K!)h7HM2$LXMIgh. F_V6b+okC>lbiqLKQo"Hr5VpY7U$N)#K)2W,=?Ye&C)Y@_AF;-)7RXI1"n6+c7pQc 2)E3/2q+fMa1$#[:C7$u(Wi9k-4r^!//.P'$#YSQk'VplpppC_Yf$N,b`7/#F[R1Qu'OG)A4;bF,!_0._nq(8M=ZP(d&t_CXU&rtuLO(%]mC LF.(;9r4JS8ptS,m"O]^QY+p#Sb)[?SC>)k(*Cel-ft*j!hnoe(A;SfOt)d0+MGu*CbF)%..MZ[]hiQpuW9Ei4IIXh`k]Cj4Q:S 5J@&_B@d*+H/moW9hRE'0&B]k;W.CtnGgq%Fc2U;s8)BAT?\:'Fi*p;6^2fX.K:5T 4!rcu2gM9?mIBJdF/g6JU>;@[bEd1>Dri E;8s\rO3R_5ST+S_;:ekZ\\GZ4IXTN-R;&9L\GQku1-kiF,Q9KF^DT1U C4nUDB7oo/nKIV3q0SOI^&EZ?N.ETBd+cS(Br-I[_>H^ShbrXf>jL4Eok`-(KD?HC SfiNqeH<[4X\j=VjmE9%1,kk(8lYd4Ig>nr?]`#C+>('fPhAT#X:7\8E!sMUT`(Em q)c_,FolUlGMk[_'YXYT8o4Q:R4Xeu5g"3Ps!u#?s6Y:QCK*Uo$mEqm_IH.4IW>HV-1IrLpf@cieKQ>. J7/f3LsmVZrJ;:-X&[G]Onf[QDishR(Q\ge5=PWn^7j%(WdOk`%tOACKhMJ!L^7Z+ "VA%u!t!]"_*Ec(\5O@KF@eg2,iJs=`J>R,"@94JZ:>Z?FA'MtJ8#jiH\iH@`Vj_7r#]^6r4gi-#5R.+.bld7e3#j<(I:I1:*KiA8-b6+ _Hu!X=GMhd:>d(1.7YWE_ FZ`"i,GP3dY[;M1J9:g?)'/f&nGg?V (NNr-Q8^\ESXHUIRjgK[Q$ZsqoB^#-[E3BDJ9s(N`3YSD?NT3k*5-)B@d$+IbiA.63CT#:Z+b,d-H"C[_42FMKJH#f(7KRA*d$cMm`l'b@V%m!=8Q&]!)@M_Z*37nLeaC6<[Zg$c ;!U#:ldh88f4$V7=Ignl^'2tiRiM(>cL)k5aJI`*TYk[(m_h<>PJC>;hf,N"">^#rNr.!;Z]i.[eNk)fF`9lLa[p/Ilf4M_B:\gM%V]QeM+4N*D 7p2M`8\P/B0QU.4JqAJ]2ur$Cmq2Z/rh1Cq5aPi--_mkt%cGZYI1-Q,0Rm#\(RVt2 g8hppJ%HJOB`"HS?g_&Ko,u8\Oh$)AeIlM[fL[53jDQR1fZ6$1+Ff%D%7^EiM_00B jqWT^#l,,Nr%BJ(JFA<:X@6^/U2i=%a+6LqF-6nN%K=EF5FsCf7r9>Yr^ni'#4MYZ jfbNp44o2]%J!#ir?YbUA:AHkOXh&rr)'GSjNmE"mIN>[!k9"eku&Q)rJfqqe9jL9 s")%e6j,@)1eQGSo3ioA!3L9"aT#'8s.fLE!9+K=7meCc'!NS[J7]t:8\bDcJtRt8 9X>jLKcm$_&5:G'%/U/)cji>Y6)QEL6\K+hL>XV4#OW8@G?V'-Rjp`'kR>CEH%]?> .M2dh\P-lEUV,*c\B(]nh`WpU,:D(p1YXoQb:,U'*ke2(^UckTT-,l=1+CHt.GY&q O0kNk!@4M1-R;p:-Wq`XB/bIP@KI!Q[V\!62IHn==Q&.g;+j7s)Y 0L]G;8d[QWnAe#:nO7qJ"E]?ZW=lNpZ668)'V-d^(#<&cd+Or?e!A\9Oji3YfAE&^ cs&?V?SX`C#3^e6oY[LR#kT,8-l4B5d;^e[IrZ1_c^b+4cNo's=n2F&A78f!jM,'/ J%l-I5K"#P@;d5"[/7Cqs1?\ UKP5'jt/c'f_4!LNF*`1o?@lrDiYh8E/aM.1$XfZaRdGC"@&KN!'d,7C$l\$f=ED#m_hm[GZ\mQ@I*:(rCMg56 3n%,lAg:$Yk/UV*m+GM[C0&:0QK,A%_g+V,m@%-uP>t$`XQ&A#-;YT2IMQi33>1YKO%3Ega]0bOC<&b@dj#!?]L>"g2HQC `4DeC2a+^_q8r54+5b%uI6l&*lrO%&D_OD91WY(9AR,3Fh3VI==M!t8FOt$mNr.ff O2j38I_P7DrA-'54mi+1):s(.\Gl)ugKtJ:ggBQ\3TG+)dduh8c`n)>6c8PM+^`Uq plPO.T\nBEN;b%unFs82I8&!O0\FA0n*h]>riT:/@(FTjkLEJ:b5<.\aM1c8Dm4u& h!L5L<(Yn'15%sm8s,lR?n^]r)>oO>TY_V/Q2Vg*JeAauS>+gN!n-d?WVPd4C,OjJCO]F1dEVb1&*sj`BH<(2EAT+ .Gbga+E"B*bT9E0s$Hk3K%\meKEqhk1(+WLYpX&upcf)Z58=,X8T)'f*r-ZpK`B6e rpPn#G[D,tbq]Udg^s>f[LC(g6B/bB#.HraM fRt:Im.POFF)uq`@Xa7[m.Tko,l`4_Mg%=Uh"H!jK)=St*kso)n^A5^Y:mD5Ia7ne dr+UoF+*A9l`1D2G@oZL9Y*GOmW!Qkqs^i9gjo,m^X)*DA#,`jl_b9f14Z&>^VOf; ./<\n&RbU@ &=#K$?cKR=o52;CJ:%M7"JlBk#XALu92Ph2Mp3CH%"S7a;?4[#P(0I=U]Q'R!bpX: k;s?r^Ja.*gAbQ-E'B:8+b,Ko6`gR*'M8midS$S1-;O5;hV2E"Kc3-QDlES"rW84; 5j/C0o(N1bUM`KZaSZ(VTc6PSFn7E9%aF68q;HB1mJ2%Q3J4?-k!%.%BM4:+0fU>s$09j $`I,re]O6?Y7MiP$S2.bATT@"98MSWT3M"Q="+'s17_@l*Jl_`K[9ci0!1-2bM:gh'?\Q,3J'E;`$"T9nhGPiYo.j$WTK<"Z&?L-tL7 P"$&_a#EepiW+rf*iN$aWKi;I=fbT8QS/W^>SjKr=?6)kD*105FB3m_NU(2 ;5m1p%Xu4,#C^%u3o^hXU;7M6A]^ikKRNtO>9XH;.Dce!#dl"Z\gFkg0#"SFWMLoK [5G(]/Yf?kX/@JG[sMJ3?hWEn5.#HbXpACb?TO45pQSD38tV\(T:Y0FP;Bk.)$'`S LO$_s,R5Y%0MXo-9U(.u-ROaA-]1D@9D&rEULOIkqQ0MOe3j)nUVfBqF?p`8bj2#f 09/*.12c^7eBUQ?S)<,p=":s*7H"UYPmG8g@*=SIX6=X-R[IXrdT9bo&]rJIL#O8_jWC8NVhhl L3Pf7MTmZX/0mg!H-s5r,L(8H/2@9MVYY1'FP@XB].VNZ9uIOjctt,GRn\Jm)$b"8 $J@\(fLV"Y6qu<-"9598-Y8[-_#J\lYsJi"`!T3>.SpIK_#3;[e1qCeH730\na/$( ,OU%c9Oik.g0kH!BEsK.$`qmKgqK!#[EGMtN7tfO*V_C!7@n]X3_&"G@5%=Z2W_Z' p6TO\?X9Ig7k*?A)?5#-c-fO[Q7d#[I+IY.s$*_oH9aUR[9kZ'_ipE-+2@1;jInBN rs:=X`VZ7bs!N"Q+2?b(gF`/,DRf^kc2HBi/mk2oJ`?]^PAZEk425dNp#3"Z<3Zo=L`gO2Q[4^Imho&=#K$+3-jjZ\B/jn,PO8ag%+t>6C%/ .mR'G.4?q6(@U5sm3G/O=1!lm]N\KI/hXJ`n%ePr!;WDQaF%XMq%l)cIutF.s&I84 ,sWr@l:S8F8fo$+n38Q*AcKpgScHi=,59%#mti,nj[I7_JFGcUIie^K#FE2d62oXP +(-Ar]S5J(P&_XI\Z_1V$i[?lqeHB7b7Pk*&eP-CDcp*?UUlH;H^fM*R r5nu;i(*bWDNfgj#kH%7+4S(:W8k0u3Cs/';ZH"p^HYQ="KI@W!DT8[V@Z5sl2h&= TIuiGe.f-&$Nk,NR+akRnPeGjPm)V:q#F?Wk?jYC#A>E11m1D;-sS2,Q1KSr'l735 ?[7c@Bb@,E^aCee1HWW?,MP(5gEeT'0d4FX3R'0&h&],+2sNtgM\KA<-/"$'kis*X LpK[3[nQqG-_bKS8hudkJKR,+3A&3!2:3j5hD$b95!I[a2Tdp-bVh5p3\8W%1r(<& [6'2T$cWad3S]Gs[YbR(8_@gN)WO4Bs)ZXOMR#@%ZTZKPIJCcT))hj#6`Qr/Wo]AN WkANmb,B'o?9kQMY#WMWnXZ:Po"B'8UdQ%H'EmrO!F-+m=9;+-!`1%Ji;WI'ja'pk H^:"DPi9IaaTM=;oH*g^J/=rq#:M!2'GgKZ(&O>`qiu5i4@,W*'I]9%8EF8PFX0@? Pr>M:0##%SWMq>W\N-Lg/\SJHX/BT;Dbj\HDuSZ[O`%[.2c;gp`ZZ0>kDi:+%)>Bm cH$./J:>-4d#F@nqD"XF5?9b$-lB')6esD&UZ\^sakp'c [T+/W#4g(Jfq.0;/(o8b]\DR.a,PGJf1#'^h6Yo_I$7G&#$Sr+C?/Q5e-7B:s$4dD C>:_BPT<5-4,l%>)J/=pat]gT=jRMXNJ_RIMJS4ZX=8jhjA&6m25fP6]Cp> l-I]N?Cdma+/,;HVB6`KS*Tg@lL>t^oGd(hKDGC*I!XMZHJ3b&5#5gL:OA:,CU7)8 P@mh-7mjt&?&`L!etZ:3;/&2OAa3Y_9s49C24(*J!RZ%W4G 'Sso5M9ZW*);l=2KT=76VnJ`U'9YT0s)+)oGORgV+!BX*qqk&Gn<1u-Uf&k&A6JdR M$H!^Q2P/6YWZ@O/J.aic55FFH!l)>+iatJI.4eAe;%Djbq&MH(3p:FHiRS0?!L'i PV?WZrphh!ZGKtdouI$WX:b6Z$CQ#\s*?E+6%]#q:B:N#V6"6o,614G!'b4^#IQ(6 gD-DILHMqL((.Kg&L1I*T`B)g/.;]N"dPX!qL/W=dG\28jSi5+0+7SJGc76 5Z&DWn:,G/Ddf5]mQQ]5CcCj58sXNr#4d6n:0OM>O:GcT6[G1a?Hb&m^iE'i?e%M+ gGSaJWdUiAOnmHGd09'?0CJk93/G/m'Ijk$$i#8a!8#bAcVZ782hk*6)p3_>k ^$>:&r+E6`NFQnjYZD(6Q[5o`^"A6+j?(&>(C$g^#E9c5)*o%N2/<&&C<\iHVXM`u ^3dZjSV+:n%T;1I6N-C%p#BPhO,m+%3CJF4_S>9T0R\HkJR)YN4]>!6XtlH4 X;S$?hit`=RCn@uZ`Q37>>F+B<6"WVpPlFQl_Eju79Z'JmP'[VAdnYL>>G]89/62` lMoM=[.s%.a_%nZ'EL&Os4t%eF)&E8[D7Y(^dXguV8.[^A3hiR,aDJp9eFSA++MK+,s`:/WaCu o\92L\Gs#h4hkju`Ec,\/Y:b*IW>rNlsI>br4dL&jiKZH`HsdApD?PIr>+ks0>5G3 I"Ctc"nll\#Q/s*i5Ze\n#uS;q[E(s$d;Dl1#>(I6I(4:#G0lB\409+H, kip+lkm%IkB7'S)\s`CiL-bfE/RFuBhAqS^D2k-(NF#HH2qGMue@O2\]%:V$[8h+p )Ku<>^DigHY:;YS]HI?lr(-fB+-"n\C47j$!#J&b&+]aMq-PSXK*Y$iO\OoPIP5?.V3Q)?t:.@#0&q+I$u%s@kl fe;pY$Tr]^49G<766$$P$foXsGTl[FHh5Ddq0R\jq1T)?OY7h,nq@@2QMQ14($0mt s(hC'/`.)"!'`gR&.nEQ(]P&-J6Bg;!R:2Ndp$#(.Y)_bs?JJSI= F+\6Y!^Zh9V(C!-\r]4N._s0$X)e0'q\Y215@kTtOm*+l1DnOKIfkjU(n#n*P=:"O oG=D[!)Y4OR,TVep+[\n#QuCf!TJ..Ya!6_p8]TPPiV]Wja-+YoA#\mSse]/T&g%Q :X4'6#Y<-\L6(S%pu./cAiXF73+esJi%5rS..<;uj)%*Z`2Xlqs2g,k5\`(.gF"6% #sd,#s(%J',j3ZFkEH+IUc9`XJ=%b*W!L"k;!ZIn'EQ$dEr`?d&V,[6bNMK4L^D.\ b[e22)4j:MhPIc):(_7?-jAQ`QWa$s+r[^1J&;6(=TI";(l`R>;AL^JKG+q?&d4#E JRVK<=<&_%Ylk,X0%[#6gp7DJ59^&i@b9T`(]9e4Qi)6_gg"L14r=-U9D"#[joP]T hBg.tAYm,2$9p_H.29'6Os%:Tm2]82),XZ[k@Zrn[g7(9daBD5ln\e4qMl2ai0Ven]j$ Ce9gCfR@2Ua^FD_M:de-npMSTFUe&J%dX9 S_ne.Mg)iMn+\Nl@6D*fs7caEeGN_R?Z-/IkLlNsY6TJs -1K+$m*Er^Hut\MmV17Ij36*cq`i`ZG[ZmJo"R9k`P:;e+i`Ji`dFs3'`TC`bi(J[ ^(*2grE[Z3aSb_0cdQ.bfr0%sYApbp]%'h7S%kuO?))R14VOZM>2][/u@=\1aI"o5b\'^g"0#P_XWp(3)9M'i8fD@_fs Z0Zte50jVD&+D&2EV"N#_AtX":&8MYHr:;P+La1"LCJ_>->:-]!k6 <=-a=W@mgAk0k(@Ie#UU/=/!H8!i?49!dd19ODK\6_*R;pfrmh554.bqZ)"_H]$^Q i$U;\:4a!B7=o/TS@\f9)-^"]&sk9U-2tP$"r,L^Gs6rZ]F&[Ao5Zr%rWhhCrrHC( /heN#q`mWJ93.o_Aqi+HC$3XQ4lChE\/6.b/e[2GjIb_-Olhgpm[BF/$M)MnO"%5V "Lp]",f_u6"N3_j8*t:%&$lQOYmLuH,R=^bKTABC\5cL]P^DBn5B=JhU-e%[!iLW4kPSS_]R>fcqja!O+P/V,fhM?$qun8LQF3g_f`O>>K*44bEp\ED5?K%V\0$\Pb[KtdP/.!6O-BQ,6Mg!j p94e6h1f3R_CjAJkHrmPC?eqRm8Udhksj_)9u\!=NN]`-h8Fs(`Ep^c+j*G=dR0BT kcqndZ.JY^mJtsjI>IN^!R`L3f_nS3Ft;fH'BPWcg/Ap=_hrTci_>&qXf[:hg74_> 2"QUW>m1gPRJpei?CPGqeje>[7-p_(D52c$#5OGhs6j)d=n_k2<<(!UUF'lR,bkX< V!k*klpC9hhG);NM.Q&u!H8M/m)$&PU'CfT(FZV_E3(`*mf+1qXN@'hAk20kV0#k( HQWA@OT1)P.K:Jsmf=H\H(A`CR/oj8'Ldi^lm1lgK&.Hob>_1(]m',*HZ'$XJg99_TQlE?@In0ibP&#?VU@_UU:'t0_>&-"$+,ET(hPpo)J=K_Oj%Cq"Sjf ^HBa?l(*Eugs5fEp"]"Cao9S^m'!O']t]a'p?A[U$Q6Ec1TjJcY"`N"*QqV-c'fTs RN>!i"$T9T4LBmE1V'ucgYL$?BP"S1ZN7r@9aqLBBmi,`ZrnKHf*@`&!!B1oZg.K/ T[AN;jPT00"(6SNdEG%PmuGkRQ5o9"Qnltq<`L26d'I_\Ii(MSl_9<2kgSV2lAOd1/S06 dLf\-J,iIIjPT:H+sI$N%7^8&0Ml*^CrkL@#kWH7HTVJfmee\=?DfTo_iY22flC8u fr^R12G6fG3?-3"UsEf*A_(YF_>/P&\keUR=/PiTBjOrB8"/G"Uq4MoDK./YhC1ua 9!@2VCJtLTr,fOnK)ja/CMfN:-J;A;"Ul,^5[VgbPq`;V.DorF!^)32LHaOo8MR8j "sld??it-I9;u;3P/jcch=*Xl^QPQmZK1eA.W?L35ju5_P&lBI,6A44(I0WMZiTs:[.Hb3 H!F?L]MM/&PHm#cN^94F2.V%""[Pq(]t^p7=Pb#KNK![cm1K"k"CV5+E#Ha3+]nfq #E$Ct6AU/b2a?NN$[?\TXpg(;`F@gpKHJ%'V;7H$0(JcqY`EfVf3kA271'1XK/D5\!IWr*ukt*&(cC4a2X>g'<9GOp"5L@ Hs/TdURRePT-AgTs/BQkY^"k&/1fN^d#7rZ7Wce1joQbl9s^q;(K&[l[rFd'E74j6N&LHd2d) cFXUJfoGeDj-s'=*`9#LqM7'0Qoof3OSqXkif:;hgJ>gW([n&Js%hY4r[2Uor^YN* O,!L<\=X3/(WVX'%[%Q^U-SKr#;O=$&pt!N-pSaPO93c:(lsi^a%;j^X<-[,,ciAM 4IAAOM2rQ<5m%(I+2`Wn';YFllmrsbRN6g[)LG[Sq7;RV(Cf#XqU"oU+.pBraUbjf rTk-Q!^Hm9AcKpa%t=N:Od@.2J,)CsbE!9BI[Koi"57B0YlF2-hXB>pqq^kf?b`0) b@`i-4O*d!j5Q+ASc%/nd\#AZq3,%%IrhsWYHOSrhNagR>qGj;C>o%?"j]p[4?AaO F#N489[:VVXE3FTVakgk8$]#sZR5OTLi_;T\l/$_r5mbH]_5r4>8+WV&Jb4?3?reR RDAkRi+E8lm#[hG"FZ6%QPC_6Yj4I="tukTQ[aXW"b?E<]rWOk'2JWC!DOU1*?X5CKQjH$\0GZ A6_uOlkYVR/;Yr-4&K1ANe$9`WF?0$"b0p&ZIt>u[,q+R)\G?:s7oS3_\K]Q:N!H] IfOu?8,d^C3ipF=,MT/,(pnCe-;g[8!l4_[%1UO":a,`jPW="%<IV8A>n',_H_)u&)04KEj=6rcWUKW)5oMH_(]Sl]t KmYCE\a65aF&A7j;9SZMF.Sro^7@oJf?T(oXu5WPDgM([b:C'U[b^>,^>Bh$TUYSP $[^Ta^"%gepisCaHb0B,X#'$Dk:;VJ?[LH!`grF/f,>0+W]tYZ*5<=]Re"f1*R$,\ /$,O-72ot4DkEp+:+9n24 !T\`L^AK*BFuTi9093k:#;GpXEemBl!T\jtBU&K%`H2M5r817:rZ=ak)NH2+*66'Z UFC_u,M9qSdW@U[`54-=CqEtEH7#D7A;gGJAMA/HgCirh5Z#*;fZiA"ULXqtYRFT=mnr_fOu/hI6H\m?CsA:&j9Geh8*+ rS)tAJ%8q_:Nt!2Ei8KK2_0?%^#B:KWrII[lH_(`I!D@Oh6SK$/>'Si=F>J0E.'e9 dT$5An[u2hV#P0m$)$#Nod'Y68_u*j) !mom*(B8:a["J(57f3c"\"lCD)%6"R`&A8Ar^VT*IX6's!>3Zq@Pm,eL&^t:K_[tY -K:*J:Q5!8bjTSWnZndFNbu%@lkT`,I5YcrDWDr4CdS,Sp2+QQ?,[!='+k.u(*K8G #oV21b\<'&oL;JgZOP<:7f[W3&N[U.pq1QH[m,WJ+op]])or9U'CtV^(\IK\\p]:' T)SdPRF=`?n3b$<&L- A2?Hh<1@^ZFM>IE=^02%Q7&`VG^ufIZP@%+=&HmZO;5"bne_tW3AaSk(!LTOqH:or .QBI<;d7;h8/Wm+6Wlo\b"uM"a8M(7.t<8AWS/?X7SbU+X5RgCBVn$<@tEUTo0PW` ,6B>.2uQO9JElH&8h!7Vj).!FfQ&]F/n+iZ!=L(O&-uAq20=WSkQ8oMP"Nn191fjU M*iEc+"sgVXl1W7`H7rHX\nU^qK0=qa6c-9^4a-HM'\f,_LYSdF;L=J.-N5ci+3R$ r"DBSF(Mt"kuK%TW+?i'9RnP^!?DXnIfbggC=LWB#.hoIZWNVR459-(q54Gp)<"D8 6[`in;aFW'EG%dU:No6GD[l,a@7:*)A+Gb%q:MK`@TkoTUEPABB',&jq/:<^k';>E !)_BeC>Z:D`d.E^$cbt\B#Oia5bu20p]gLgpjNnXAr$tRJ=.;Jm'M.X6Ei.M\MRK3 AiT,9=PETWj2Q')K98Ms8+o+gg%En#S_ofZoimX4\#6J!:1N1L6j#X1)8j0KLjdcC 6C0U=;XQD1?hHp[G=F6QU8E't$!gNFiKXH(p(>KK;i[F?St2dlYFbH+?O:V^&<'p' OY>6`f'=bd_PF5@dZ#sVAj,6F4a+H"Ei3Khh:C3H[dLc^G2u]iM/+[Llco(0B(hY4 jFqRZ+jZ?o!?h\"oRDAfE)>iJme8MKY IsQ%rbK%6a#^Gt&48V3kkJ3""%tF;uOjDlEp?=ZDIs='62p\G;HHQ0H1%499;ubld f#ROUs63;K:N)TurN3(Ah;nUd2?*?Rn@s*Kpl2]8&'n=lF/J6E;T7IGZCA1s=(b,Y :)%!$-s@K==rtdm(s8Hha;aHg)o!5*K0cb]68=[<9CjCHlS_#1/1DaaS;8,Q.^rr9,#n\P57s#2u6!5pEB Ynea(58LOFKdX`\]\\+3_%GGcN$E"V`AbD+rD-Dl"AJn2!Vjst%J^)sqa'pF$PR(0 &C\@,WY]$sR>a3LNVPR#CbWWINbX$4R8"CnTRE:1[*JsD'+j<8W`V/*#Cm(&;S]9k H.=?-D/qn6)Dn8@)q,r3)U'X)f!Hc>$:M[!,=%1n3RZYfR6ZNhX4*9gjimh;"*m&G I/I,j::n&?LAGF]C5#m>5T&Grcq9qLT1`'h4 P%GH,RYAj16MiW&6WLG+P(u,kWr_CMEYTtTnm[WdO9O,K0Xi7JB8Q5I"JT-*+O"F) Z5EL53W[=ZVFibiOo.'L\l)3*'G;uj%'ouT 7(8O$+Ff01lh@1YI2h`qC;\*:4#A3$)3KlOe;=cd*a0T3aj^"tcIQ !)&6[rte@-ZeDBmq:(X>AqE6+?84ZJI!RXDgi1F$&H1n0M)teE*q[5HCgcFQ6T`"? 7O%Ug5#CkD+fP<1?g/cLeO"T78@]Uq^?CD;D2k.8P(sdJ5m=6u/uh?0ktl3^e\*_O G]hO.lF;-:UilR9IG;CZHI9!7d1LND:0FlbQL3b^%a$dbGqJg6Q%h6#2T8p>5'FUs nTl/78fRLsHcF%uX:)/@Vjm8>)[[noq1Gi?*_U+C-DRi+j/\p.$=_Pu(eN`TRNo": m"m'DI4BE&bBIB[]1=etOSO7FJpe@'IL=/'IUkO?r&=R-N?KJFn&%Qj8Wl=.^Z?

S[24A^Rt?MS=C&r4tDP4(n=a:=\-( W4k,jH$-^Xnl4:rn^;L=-"f`+Q\UL^#7@C+o#>urLV%U(448FYP<57YD=u\]&@XC8 X7p[%4uUpd!=oPfI%Q>UF0W@f2W1jHgbpM;Z8)E@NTmjWHk(>H_1;jt4$iio"h+8W @hd!ODtPf7(,rq[SV0MKQi5h&"HGFP#\&W)!:r^d!'W\'Z0?`^!oTDsb+CXf)IA6m 5K)R-a?2mZrdGs,k@aSmCjanHcg0[)b<#a#I0U".&,"rb5!7Wu4MYPo"i"'\#)KQ, b\pK8XU;L*c2qg&[U$^j.$IpDY"+`crqG_V6McNKI?C_BUn0J0C .asS2dL]Cr1b_.%Pd1SpX!BOk^DnF_\l&JXn9J?NJr,5.e/XI.WAejVAtHhl0Un6q 1Eqq\eLEK0=>"/P"@*=p&HL>3d_PlL+]A`JQZ:RHAFR?7R0*B>aE_M<=&k#P8pE`, 84@?OO^U8="XKF&9pA%8):=aLHWP6ms7G2HPBFEV5+,1'gr$hVda>)FIe!j&Ra$@ /NTcZK_LilI&,-nV+=4oQPL![s0EX/F./ThgKKMSs$Q`lhVVBDrZ<0nNf?WNa.`9p :/&a,V_p7d=u9&?V^Jp'/MC?:#D;(Jqahn%OP]<=hJ"2tBuKFnUTXKh=.S)@ RA.]$Ug=AY.DY3PgVO"a4eL.NUpSW?[E5.(("$=0W#eB,YCbOSa80=K^DuQ@?pe]" K^feuKdH2jZ[r&k_FH8f,d"OrY&pIFmEW8j?#ZY'jJD:M$Q\>A>0B]! .kgIJK'iGpAlj6g`P/*GN3ha\_oEL=$-AfZ+K5=iAr&R"(m\hp=P+E*6/Rs37-; TZIZ657.th^kVZo!'^YJO+?6IL[Gc2\53/i?NTUMp/AjmHH6UNM4"adO+g'.r%+J$ NPd(?O+qs#BY]C*hMI,>bLW,3_u(8ZbH,<,p+8l`!&ZtaJ#eNYA!:sYrqC3WT`,Jd di\_/`Y>-N_#9>*!!4u$j@BAVS7msc]-iMmJB]4XK*VJK'6JPYrm^rK?)CtuiR;Va hkS83b;,T1Bm)3Lm3)K*S$pCF>L((0cQ_GR.,'bI.dTIr=k)_Q6qn.#J=!:;UrlAG 77P]0l.#:2,bQ\GYr!c#,WX^X`s/nn/@Ck='[c$Z7&_k;-;'HQU&&,q@%r2m,oYr: $f,qFSUh7@2d):E$Xc^1@2ed:"X$9c[^H0$FUao2^I5p>s/U,7lVsjpbm;\;P1;-TTCN5W0K2)V4_Q;cj8"k C5,=#[[FZ9>Dgm\rXuf8%e6Fm2uVXdOA#A`Z_O>.$gRbLJc=r.5sFl>\-1"d9MHt6 Vj+MDlFC'Br1%q=cEK9H6jGoJZCG(+SNUg;NW;,TiWAUJJ39m5hR*aJMlT#A5Q&cY :5:pu3598m[q%LCb'`WAEFmP%ZD^""TK=s5>s+rf=ObVLB]eI-1\e@eP>dXdEP^.< `QV/p6@\jr?KQ"sM5rdpDg(T_h7`\W:\:ubW4.,JT(c'QGEJMA?uNM^cPj%n60u%@ I+:YGB;Wme8]*cee1H#Yd("M@rl2V>aDr]f68S@67jaW'>$pO%hX[^q2-9\MQ[8k9?%VYgK$u;/ $h]e6hU5hJ?B7.\M9kl2-(<;Cb*1\`4n*4:)\a^t;<@g=L&X2*YT"8E,t[fm61p+f '[7eYp2C^.2$_7'"!hFd##G#a!.B,(diK^tO-#mPU3prk./l(gq2a-P5Im6Q2s^9h H26NnY?$*n[H>AJr3*1-hHcF0>80;.&Dj#mhONP3S*$nMnlNl4c];,0%$rRW(,,:p c1McEG3+amk7"b/p9a>#)L:^YDG-'!rXX;,!>jMRfGN[hgZb3X4pt?Y[]j%LO?^p& @KLEldpm!9+Ta4=OI[&*Yj*6FjF7sb,,!VC!<9NS=D_@k<;lm=+)(0es.^>0bjUC, p;DUQRpCgcG:W_I&-i[naJt24FEZkM\#K"X]g`R_^7j"_#.dJ_^sQDr2!(@^I?9L lr&jBcJ,;t25rk^K()!$Db;<"!,/U62VM&tm)]3dcEnp"HLo-JTil6H%J^[Eq[*V_ ]S.s*r+9#:P;Vf)rU3a!G_gWOBfc%H+\B/$dte$S@^P#hbpE:k.:\#1Pp_uW@[=Z_ .4b1fne^5\52gm@b07dWbb("sSt8K?59bRWZk'*'FJY'Gj!RFnM%Y9M7$o*\:usHC =#F=X8(P.:nIOb@>>kMP%RbihaOBIbBF&9m('+)Y,/5H:r*RW[$:IRm(g7#:`;b.R N>2.3!]U='$!T%@.dD9L3hB$^Q&7SE6sh(4_lkWP-]%t>q_2Q?9$,FpfHu$HeW`Ap +'JXESF:I['"FH7:.HY\p3%D/S4fCG\`M$opb3^pN94Z1JZVa)lf;$%/88U`)nM1l %Zo6fb+qUZ6C*F*5XdWq=;DR2n38s/b)=O[#Pj-Al1O_;9hdXMXnhAOKj@t3]=U`4 H7K4*C5)q.7tu^2j)pP!d]#eUR%KK?_Rsc+6%9&SL+CjA;I/C#a^k10'E.YrVS C"_RCG[e=iILUff!%,0%30YguFJ^-!lI9(nl&HVTaZ,p[+8a\dip:4bUPQA7I- 0P;![/]/M%gH/Cs##4ulga>jNR-.[/06\._q/6\lhAR0c)3s%sOkpqL6$BSqgYh1H>o\s@a+eP;)$!Op8'LEVESO$lbJ8-9(]ZsScOBec #HY"gN>_9dLA[UdAf$*hJ")2oFSH^2J*6s&IGjM2->rt4!oVdNGK7+;&:`^>@pAmR O[%fS+p+3hrEo=f0[U&W]X3ce&b+3N*i@9,,j);D*p1I1`o__VcorB8Z16aDaPU^m DO15@U?7ME;6W@c-7OfPEub>_o@rOAi.$N@lW3Sls'Bh?5at+85@d:hn-DR>#cP3T n-DR#ZDW?T[mgAm^YPN75k6;t,QB^TEl+-DOI>Tf3q!#in@r%iod0XuZbe^u\?>MLT*6B8cR!b1#C5o=+38q#^s)(!KIp^TJnL<"gnh[>GTnFW:/XP*C]O_iq9`\5Eir0b"_>dEgs%*.S[#"`Z"NXLa!`UqH ;S"k.">;O%>+Vg]V^c7,!+^kdN\-O#TXd<,#=/92%$d?^q-EpAVTM,)]H&PRWD]KruFPds.5h1rr*70rdqCP &L%2=.J`=h&s`E"jH$Hi3GhnZCHK"7LVeN5S/WsUMn&RKq!/^u3:Q?A^Yi6"s.?]) >dg`)11"58Y:cd*jqOl&o$nWBlAPkU0J,IM-XN4-S=Q"XEnKW E1nrF9J?90:ZCK-'3Df,hWrg:[rplIQ<,+cDgU7Rod!4[jN$]#Z+EctL(1bja3H*< R6&b%+7$&G3m+_)dV\Y';>qbsVh"+bT\+9>9,;-b`%2c3;]JAUS77^h1^]/;sN3^bP%$_q^AKC;48=7fH.D<3_Zh!-CYO.9F!;f GR-)F+R'DE\en,U+#Cm/9-Kkir-qU;4JeO)j?H>W7[((H"H;h7?N3C_:DqeTlJ%4+ +2VV'aQG=`gQgDQ)Tk"of_=.)+-3'H@/kZk?NPO(qQgF1]Qius]'nRJh4MBo#PnDA mb^3Ro/Da)r9D]/:[T7uO'@B'^2`dXfA_:+Q2ZujS0+o1IK+]g\'GeBTes,+H[.)5&kgDG?A[qL$o'k$V+KaM0=BDXk"%V42-D hes`3r@\A#4=6BGbQdZ/J-^,[=`-C?A(^FgR2NB9_KKSn+9e-,%RU/r(,r8ngV$8^ n37KcD*D]m+%U/<-ae1bk-:TXXo:h3!FNqJbPhb<[sAYeBI*q?0r7>]RL\16@an$Y HKb-=-&0abn@0>W(MaZog,pdA%Xgb,a3"_.[s,$RojPLQj7JQI!rbqJk [s/7Kh>-"/H>@]FS/F.p"SEYZ!c7WR=o`sJ#EOBD_Z-S0Y=UTPV\&ESiZI5W'`T;* Bg._/re5Vk5qW9;%n,K>P8#`9nQqNI!:o%4Ip$W_S=^LX5N.*k(^aQ;+u8N"\\D-_ 7!F2"9O*ARZO%*?&E>ue6ct/`Q!EgnXH%uf"Jlb1YMqA5!gZB_iI@sJq>X)>!3UVN )A0jLLc(&(XYQ/,X\=;&PtOC_s0[da/$%P"o?R$8 p<0?cQ^s)t@="hR>kDrsFr94]5 n\K9g(A+NNpO;tiS,`0J%>]OA5MZ..p\4XG2FP?Cs)TFQB31;r@@d5SMogHo+oT%9 Ekcn.kbHTQ&-:)n7F1+MO68G!Isk46AO:W]XS1FW`T_q/nGbh!;8iLPNLATG?AG0- m,^Lg*ceKXN;$MKaSumoq-G;lA)ItqNrf%uSmLp$Om+g0#lb.3%+GG_km]NT6ic3G 2E-OBrdf5G*CW5DhX7;L#,hOs^XX,ra<,*eU3C&PLkl%Ui\)Z'Q%-aPD;IZo-%O5G 844&?G6-Y%Y_NSb%j:\sM7F%&F"WsJFmt2sHsDtJ@]FY<_Z#PB*X/%[^'Uffh#&*^ k^ZN(Z\Y#M#n$b546ee#ko]^C/HNi2ItEDc6N06sS/hB8s+C6=guu&Jeh-I]%-D[: $;^j.JAO5E7KbP.EuQ,=&[8YHn>Od_'S&:Zr"&J89pCMgp#I!+;t\\_Occ7hMZ4kY 1%J,]T:\KSa^J.]e#P7&5\57>KSm.To$dee&hdhSs5`q\dV<XE<&iA#iLD8UsN:O[mSCrP_Xi "dGlhE]BQLcc"V,,Y'o7Q9mKN8S0To`$1UP(guH5XpiOH+4X?d>&R]jW:%U*PArLF I]9aEH;EXn6/fKhl/P@cUM9DM3W7EP_im+ZUDZ4j^s,a,eNqlbDW+3/on'Ah_OT4V Qe#!QFJYT`;"mTnmL[)u&\a"M]hXa*5m%(%pI8lkOeK3B`*h^Eb]XOb(VUt7\W;m[ i#T2n_9F&]L,HnYbmBWKphdo?;<&($P)2o\Z)K!b.N\?aERO&ZCbQ(Zhb+.XpS!4i jqB2E=kLE&dec)J[s[8Om_F9,MZ(^Bp@In.YHC\c^&,sqa64T*Qg^W#+?k-rc_p7! qu$72'Ei@A_'<@f0CQl-Eqf&VDT@3R4oQP,d/X(XqhGtc^3;3q4(er8^0L'DO\]T\Z0c iCWD.-FJ,4Rk4VN5uP$BM3nSDA,h2Zko9WZ=NJGNi$\=gjA.>n-`23,lHQ"D./7fX '/`!?7/gd1^`Xi:->%i/>r!J[J$4SspciF_"o3q4.3T?8#afjis$?WmHQ%DeIWD>D H.#oERD`\,ped:1B;Y#s-jI3\GoJa .N\#-2Y\BZs4XKKZ5P2\!42`>$DNCiq&(0R?<.cORTZ\J) CEWc-TQ/>YPB@-`!5Bc>Nnjtj#?&8/%%f]+n&PtuF!CVX3jXWH>+EmFa;nS&3u9U* 3;@dE9JF647+W8i8mPns-;LL!(!hPFJrGhW0De)]P;A!eK.upLgl0jRKI.! 6PZ?5eTJnT!pZ"i$?a!NP@uXJd6^Y7bO4LZ"Sfn!TgmN8['g]kF;@4O0JHTDM1Fh> )70B?LP,UC:[+12%EmrDB+m?"Ig+Zh7F_@Yrti@Q,66eSD9[.`JnoeRG%oWWED_4" %a"b1Pka6KmD\V<94J_&@jP3r9am4V2H=d?]'S-ec*^"1qNCF/ZKD(jrXA^J Vf^,RWoY,gRE;K#A&Xd(ZIak0Y7>U@G94?I[f9+oS+je'h=5?ok9Slg@!@R^/Icl' JR&gq9@]j&1E,)'h9WF)`pa #._HUHY:Uk&c(BW6i<+*ZPLisg/`7+]B8O3nA2'iacuY(=l%hj`cm`nD_7D#"WknQ Dbm=7%8/AKLsEEX/G`"Ys/.]?1#*Wo9XGZ4iRc"d7"P@a].hoU9_AT]$PBUuADDq@ Q5Ihp!#>=d,@koTqlqOhEo7cpFFr:u+8F`^8FE9O7M<1ke"`h.U_tL;6cWf76pQs,f'K'=\7jh#%QC`p1oUF9rUd5kD\"+:p_18ei:DVXs+q$6oR@i( J'`XtM#TCYi!]SFQO?.`cj9[KSW(Xu"lt.pb@>+q/\m^MH9(aE+!r_aMmU6%p)>86 5VK"O'?gt(6r]?]TL/ia781KL@>"TNEfOAC+oLf\+Tcs26pT,?"oLjX7KhA*s6C]h i]dG@hsAUDp`I7%)#:o[StSK,!9F/F!UfuX->,73^YY8V%kW;d*?kJe!&OhS9`L:U XgL9>Fc*VjV_7-Tq3NcAq+HTIJ@L+=rYOY%_>cC'bc5K*-,.Y\&ckBR:mF>I9W&L7 b`g@4f0i19mW)&L%3YJ/TRu,[j"I!8jH4EJZGWUZ<'ALJJ16r3&j"kC`SiqTQ&R T\$%Z&BTV'/]Lbf3Q5K$pH,\_Y3_f3Q[n9$_#I_b2FN)=PtkTELe`*1:\D[)cS1aN =qanQ86"gePe)*r3`[@f>#TVNjBj>?ruWX&`)P=S07a>SX0c-^ouNPDs!nZCTi_:EU)j+C(PlfTak5R_KF8"-l6+BG>,h >dD`_bc0aeeO12R.0's!p8i*7h=0i_'S$tWb?_oP)ruMESE&$8$cmg7::3,->FUkY :%6b(X4Bb_/e4Md1fCtM>'+>Wkj!E_onfF/&-OeSf+s$@QK3`!=-a7+!G<0*BBNjh AnopEb:eq2H&bH]/u nmFYl-Te=QK,dM$!m-h!LH0XINJj4XA0[:SUlinYZAhV!1,'4D$`&uU$=E&#H"1*! Gh/7(f$1g3T6m]JjAo@TSUSD-@HitIe^J6W>71Z)s4^0nLk&"eqR][pRq%>XrpQ,L [ZiR2RB^B#!S-.7K`C@E_rSE`eS\(P-COA[t CPn$f:5EeEVmI`mq=i:GN@/S8Ui-A2cSD^b)Y3oM*89d;G4Z1BpUu.N]nu[%PdGj% (OOB(I*M<+pVP06cMjkR$l jq@ZCr;ZKj>\ClP>Q.`'p0`;pIk\RbQe_#f2E=lJ$d3HtH1VN,^I,oGBc)"N!oBId %O$>/\Q-oFC=n&4a7AQLIQc/XA,(.fT:Y=,d(oZ@8RFl9N=$6trWi8Zr&=WD#UXZt WSRP!_Z,;e$3"T;GPS2a:_43=nd"Y-+=_@H2#'<%V?]7tLGBeA!WUnW8H-'=N&Cp5 l:$Un2ck6Uq<94dh'f$9U#sBcH_BLKjH'3l6Kj+p7KEN!,/>C5&H6lG\Qf%$e&%=3 f5Vr8!X=Yq#=X.h)8@1=]tp+&pqOYOd/njugOhLlTfg!_hs`kW(>SCDaM6,b(%Hcu lR[QA*Nf?3o=q8o-\1ps6kDTj!.r>rIRQ@q>8bJb_U%KZe*Ee4mB75kWt=\N([S3`n#NDC>@+W@J/=la##QV$ WTNZQ&KMG4*>ZhZeL=;82=W/EP0QBOf]X(egZDp+rB*k(e_cH(CVRp92)JVq10oNGNlH[r=AQ-QcCT6^>]?<>oq:tB X6rW]SkCU-b@drDQAq4H1i'Gg[7Sc#p'1sY%cgq;aLjEmEIAu&p-@?f_,T@dB_%_! [+gd)\#,(%buS2@(L:1*?OfG Tjafdb`[M0W>%FR%0$!A8\n(u9C_^>iU1\sb`%s9`g_@\+o>GIiN;OrHi;J*8&S3# Pu$RbcPDK./D8l`EkJenHTZ)T5H_[_XBb'+XgD(]##7p\F*d/^Xl]1?jp9R.C=?5=>i!`mEPUa0:R`X=F>;91&7uU8d!( )E(>\AcF<>[(mg/;p"V;d0jsKk>#ic3_f_U%irI^p0g+r8Nj],rNDD3@\V.H?b]Kp 4dAjX@?(88"87oZlsFA0?`[YM\Jk/*]q$etn(PDU@*d$"mf34N0e^7e!53lln+.(` ^Na\sB?q+$Gl-Es:CmL!dG\Fq3;2rjYs5j_pqO#ZIrphErH"sq4e;,f;jm+!A9Q7[3LSEhSlDCliHbSq%'%J_d6h.a":PQiWk AE%k,CmTlf=4/[@\lHSRadI;UI*$IZ=WTH@#L3SGCRJLb!&]]0&u"Fl24Tbo$O$-m TUllT0LJ<1fYhU1Ya[2N(-AYCa_8^bJVYU;BF)[T7k*Ak7:+?QQeL\^Mq%bp$\4iD <%fua&%)4sL_o^OKa=?[q5Be^hcL.`mfqua-R7\;"RSl*?tK/89O`UkARIOk9S\X> f+8$J9YdB5TZSAS04j>n%%S6'h]QOp7knB p89hQ1R^\!/`Ee^E%XFL.(:dqgD\.Kn`Kr_md,7$fL!=ro`OhLpW0 5lS]V.A&[dZDcX?b]h`]m?Sa]^WDQ@,s(g.V+U]Ls%=lAjjiuQ5)V(%#t.ILLa

{is_class?La classe:L'imprimante} {printer_name} accepte désormais les tâches d'impression.

cups-2.2.7/templates/fr/printer-added.tmpl000664 000765 000024 00000000254 13255074424 021201 0ustar00msweetstaff000000 000000

Ajouter une imprimante

L'imprimante {printer_name} a été ajoutée avec succès. cups-2.2.7/templates/fr/printer-cancel-jobs.tmpl000664 000765 000024 00000000423 13255074424 022316 0ustar00msweetstaff000000 000000

Annuler la tâche sur {is_class?la classe:l'imprimante} {printer_name}

Toutes les tâches sur {is_class?la classe:l'imprimante} {printer_name} ont été annulée.

cups-2.2.7/templates/fr/printer-configured.tmpl000664 000765 000024 00000000432 13255074424 022263 0ustar00msweetstaff000000 000000

Définir les options par défaut pour {printer_name}

{OP=set-class-options?Class :L'imprimante }{printer_name} a été configurée avec succès. cups-2.2.7/templates/fr/printer-confirm.tmpl000664 000765 000024 00000000751 13255074424 021577 0ustar00msweetstaff000000 000000

Supprimer l'imprimante {printer_name}

Avertissement : Êtes-vous sûr(e) de vouloir supprimer l'imprimante {printer_name} ?

cups-2.2.7/templates/fr/printer-default.tmpl000664 000765 000024 00000000775 13255074424 021574 0ustar00msweetstaff000000 000000

Définir {is_class?la classe:l'imprimante} {printer_name} comme imprimante par défaut

{is_class?La classe:L'imprimante} {printer_name} a été définie comme imprimante par défaut du serveur.

Note: Tout paramètre utilisateur défini via la commande lpoptions sera prioritaire sur le paramètre défini içi.
cups-2.2.7/templates/fr/printer-deleted.tmpl000664 000765 000024 00000000226 13255074424 021545 0ustar00msweetstaff000000 000000

Supprimer l'imprimante {printer_name}

L'imprimante {printer_name} a été supprimée avec succès. cups-2.2.7/templates/fr/printer-jobs-header.tmpl000664 000765 000024 00000000037 13255074424 022322 0ustar00msweetstaff000000 000000

Tâches

cups-2.2.7/templates/fr/printer-modified.tmpl000664 000765 000024 00000000273 13255074424 021721 0ustar00msweetstaff000000 000000

Modifier l'Imprimante {printer_name}

L'imprimante {printer_name} a été modifiée avec succès. cups-2.2.7/templates/fr/printer-reject.tmpl000664 000765 000024 00000000401 13255074424 021406 0ustar00msweetstaff000000 000000

Rejeter les Tâches sur {is_class?Classe:Imprimante} {printer_name}

{is_class?La classe:L'imprimante} {printer_name} n'accepte plus les tâches d'impression.

cups-2.2.7/templates/fr/printer-start.tmpl000664 000765 000024 00000000367 13255074424 021302 0ustar00msweetstaff000000 000000

Démarrer {is_class?La classe:l'imprimante} {printer_name}

{is_class?La classe:l'imprimante} {printer_name} a été démarrée.

cups-2.2.7/templates/fr/printer-stop.tmpl000664 000765 000024 00000000363 13255074424 021126 0ustar00msweetstaff000000 000000

Arrêter {is_class?La classe:l'imprimante} {printer_name}

{is_class?La classe:l'imprimante} {printer_name} a été arrêtée.

cups-2.2.7/templates/fr/printer.tmpl000664 000765 000024 00000005274 13255074424 020151 0ustar00msweetstaff000000 000000

{printer_name} ({printer_state=3?Inoccupée :{printer_state=4?En cours d'impression:En pause}}, {printer_is_accepting_jobs=0?Rejette les tâches:accepte les tâches}, {server_is_sharing_printers=0?non:{printer_is_shared=0?non:}} partagée{default_name={printer_name}?, imprimante par défaut :})

Description :{printer_info}
Emplacement :{printer_location}
Pilote :{printer_make_and_model} ({color_supported=1?color:grayscale}{sides_supported=one-sided?:, 2-sided printing})
Connexion :{device_uri}
Par défaut :job-sheets={job_sheets_default} media={media_default?{media_default}:inconnu} {sides_default?sides={sides_default}:}
cups-2.2.7/templates/fr/printers-header.tmpl000664 000765 000024 00000000162 13255074424 021551 0ustar00msweetstaff000000 000000

{total=0?Pas d'imprimante:Affichage de {#printer_name} sur {total} imprimante{total=1?:s}}.

cups-2.2.7/templates/fr/printers.tmpl000664 000765 000024 00000001050 13255074424 020320 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
Nom de la fileDescriptionEmplacementMarque et modèleÉtat
{printer_name}{printer_info}{printer_location}{printer_make_and_model}{printer_state=3?Inoccupée:{printer_state=4?En cours d'impression:En pause}}{printer_state_message? - "{printer_state_message}":}
} cups-2.2.7/templates/fr/restart.tmpl000664 000765 000024 00000005115 13255074424 020144 0ustar00msweetstaff000000 000000

Modifier les paramètres

Busy Indicator Veuillez patienter pendant que le serveur redémarre...

cups-2.2.7/templates/fr/samba-export.tmpl000664 000765 000024 00000003473 13255074424 021067 0ustar00msweetstaff000000 000000

Exporter les Imprimantes vers Samba

{error?

Impossible d'exporter les imprimantes vers Samba \:

{error}

Consulter le fichier error_log pour plus d'informations.

:

Cette page vous permet d'exporter des imprimantes vers Samba de sorte que des clients Windows puissent y accéder via l'ic&oacirc;ne Voisinage réseau ou Favoris réseau du bureau. Vous devez au préalable installer les pilotes Windows d'imprimante PostScript : cf. la page man cupsaddsmb(8).

}
Imprimantes \:
Exporter toutes les imprimantes
Utilisateur Samba \: (required)
Mot de passe Samba \: (requis)
cups-2.2.7/templates/fr/samba-exported.tmpl000664 000765 000024 00000000135 13255074424 021370 0ustar00msweetstaff000000 000000

Les imprimantes ont été exportées vers Samba avec succès.

cups-2.2.7/templates/fr/search.tmpl000664 000765 000024 00000001066 13255074424 017726 0ustar00msweetstaff000000 000000
{WHICH_JOBS?:} {ORDER?:}

Rechercher dans {SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?les classes:{SECTION=jobs?les tâches:les imprimantes}}} :

cups-2.2.7/templates/fr/set-printer-options-header.tmpl000664 000765 000024 00000001523 13255074424 023652 0ustar00msweetstaff000000 000000

Définir les Options pour {printer_name}

{HAVE_AUTOCONFIGURE?:}

{[group_id] {group}     }

cups-2.2.7/templates/fr/set-printer-options-trailer.tmpl000664 000765 000024 00000000701 13255074424 024061 0ustar00msweetstaff000000 000000
cups-2.2.7/templates/fr/subscription-added.tmpl000664 000765 000024 00000000152 13255074424 022237 0ustar00msweetstaff000000 000000

L'abonnement au flux RSS {subscription_name} a été ajouté avec succès.

cups-2.2.7/templates/fr/subscription-canceled.tmpl000664 000765 000024 00000000135 13255074424 022735 0ustar00msweetstaff000000 000000

L'abonnement #{notify_subscription_id} au flux RSS a été annulé.

cups-2.2.7/templates/fr/test-page.tmpl000664 000765 000024 00000000346 13255074424 020352 0ustar00msweetstaff000000 000000

Imprimer une Page de Test sur {printer_name}

La page de test a été envoyée; l'identifiant de la tâche est {printer_name}-{job_id}.

cups-2.2.7/templates/fr/trailer.tmpl000664 000765 000024 00000000407 13255074424 020121 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/fr/users.tmpl000664 000765 000024 00000001717 13255074424 017625 0ustar00msweetstaff000000 000000
{IS_CLASS?:}

Utilisateurs autorisés à utiliser {printer_name}

Utilisateurs :
Autoriser ces utilisateurs à imprimer Empêcher ces utilisateurs d'imprimer
cups-2.2.7/templates/es/add-class.tmpl000664 000765 000024 00000002214 13255074424 020310 0ustar00msweetstaff000000 000000

Añadir clase

Nombre:
(Puede contener cualquier carácter imprimible excepto "/", "#", y espacio)
Descripción:
(Descripción fácilmente leíble tal como "HP LaserJet de doble cara")
Ubicación:
(Ubicación fácilmente leíble tal como "Lab 1")
Miembros:
cups-2.2.7/templates/es/add-printer.tmpl000664 000765 000024 00000003332 13255074424 020670 0ustar00msweetstaff000000 000000

Añadir impresora

{?current_make!?:} {?current_make_and_model!?:}
Nombre:
(Puede contener cualquier carácter imprimible excepto "/", "#", y espacio)
Descripción:
(Descripción fácilmente leíble tal como "HP LaserJet de doble cara")
Ubicación:
(Ubicación fácilmente leíble tal como "Lab 1")
Conexión: {device_uri}
Compartición: Compartir esta impresora
cups-2.2.7/templates/es/add-rss-subscription.tmpl000664 000765 000024 00000004717 13255074424 022546 0ustar00msweetstaff000000 000000

Añadir subscripción RSS

Nombre:
(Puede contener cualquier carácter imprimible excepto espacio, "/", "?", y "#"))
Cola:
Eventos: Trabajo creado
Trabajo completado
Trabajo parado
Opciones de trabajo cambiadas
     Cola parada
Cola añadida
Cola modificada
Cola borrada
     Servidor iniciado
Servidor parado
Servidor reiniciado
Auditoría de seguridad del servidor
Número máximo de eventos del canal:
cups-2.2.7/templates/es/admin.tmpl000664 000765 000024 00000015244 13255074424 017554 0ustar00msweetstaff000000 000000

Impresoras

{have_samba?
:}

Clases

Trabajos

Servidor

{SETTINGS_ERROR?

{SETTINGS_MESSAGE}

{SETTINGS_ERROR}
:
{ADVANCEDSETTINGS?

Configuración del servidor\:

Avanzada
Compartir impresoras conectadas a este sistema
        Número máximo de clientes\:
         Permitir la impresión desde Internet
         Anunciar la interfaz web
Permitir administración remota
{have_gssapi? Usar autentificación Kerberos (FAQ)
:} Permitir a los usuarios cancelar cualquier trabajo (no sólo los suyos propios)
Preservar el historial de trabajos
        Número máximo de trabajos (0 sin límite)\:
        Retener metadatos\:
        Retener documentos\:
Guardar información de depuración para búsqueda de problemas
        Tamaño máximo del archivo de registro\:

:

Configuración del servidor:

Avanzada
Compartir impresoras conectadas a este sistema
         Permitir la impresión desde Internet
Permitir administración remota
{have_gssapi? Usar autentificación Kerberos (FAQ)
:} Permitir a los usuarios cancelar cualquier trabajo (no sólo los suyos propios)
Guardar información de depuración para búsqueda de problemas

}

}

Subscripciones RSS

{notify_subscription_id?{[notify_subscription_id] }
NombreEventosNombre de la cola
{notify_recipient_name}
 
{notify_events} {notify_printer_name?{notify_printer_name}:Todas las colas}
:}
cups-2.2.7/templates/es/choose-device.tmpl000664 000765 000024 00000003276 13255074424 021203 0ustar00msweetstaff000000 000000

{op=modify-printer?Modificar {printer_name}:Añadir impresora}

{CUPS_GET_DEVICES_DONE?
{printer_name?:} {op=add-printer?:}
Conexión actual\: {current_device_uri}
Impresoras locales\: {[device_uri]{device_class!network? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
:}}
Impresoras en red descubiertas\: {[device_uri]{device_class=network?{device_uri~[a-z]+://? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
:}:}}
Otras impresoras en red\: {[device_uri]{device_class=network?{device_uri~[a-z]+://?: {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
}:}}
:

Indicador de ocupado Buscando impresoras...

} cups-2.2.7/templates/es/choose-make.tmpl000664 000765 000024 00000003654 13255074424 020661 0ustar00msweetstaff000000 000000

{op=modify-printer?Modificar {printer_name}:Añadir impresora}

{printer_name?:} {op=modify-printer?:}
Nombre: {printer_name}
Descripción: {printer_info}
Ubicación: {printer_location}
Conexión: {device_uri}
Compartición: {?printer_is_shared=?No:{?printer_is_shared=0?No:}} compartir esta impresora
Marca:
 
O proporcione un archivo PPD:
cups-2.2.7/templates/es/choose-model.tmpl000664 000765 000024 00000004215 13255074424 021036 0ustar00msweetstaff000000 000000

{op=modify-printer?Modificar {printer_name}:Añadir impresora}

{printer_name?:} {op=modify-printer?:}
Nombre: {printer_name}
Descripción: {printer_info}
Ubicación: {printer_location}
Conexión: {device_uri}
Compartición: {?printer_is_shared=?No:{?printer_is_shared=0?No:}} compartir esta impresora
Marca: {PPD_MAKE}
Modelo:
O proporcione un archivo PPD:
cups-2.2.7/templates/es/choose-serial.tmpl000664 000765 000024 00000002634 13255074424 021220 0ustar00msweetstaff000000 000000

{op=modify-printer?Modificar {printer_name}:Añadir impresora}

{printer_name?:}
Conexión: {device_uri}
Baudios:
Paridad:
Bits de datos:
Control de flujo:
cups-2.2.7/templates/es/choose-uri.tmpl000664 000765 000024 00000002156 13255074424 020537 0ustar00msweetstaff000000 000000

{op=modify-printer?Modificar {printer_name}:Añadir impresora}

{printer_name?:}
Conexión:
Ejemplos:
    http://nombre_ordenador:631/ipp/
    http://nombre_ordenador:631/ipp/puerto1

    ipp://nombre_ordenador/ipp/
    ipp://nombre_ordenador/ipp/puerto1

    lpd://nombre_ordenador/cola

    socket://nombre_ordenador
    socket://nombre_ordenador:9100

Vea "Impresoras en red" para escoger el URI adecuado a usar con su impresora.

cups-2.2.7/templates/es/class-added.tmpl000664 000765 000024 00000000225 13255074424 020621 0ustar00msweetstaff000000 000000

Añadir clase

Se ha añadido con éxito la clase {printer_name}. cups-2.2.7/templates/es/class-confirm.tmpl000664 000765 000024 00000000706 13255074424 021221 0ustar00msweetstaff000000 000000

Borrar clase {printer_name}

Advertencia: ¿Está seguro de querer borrar la clase {printer_name}?

cups-2.2.7/templates/es/class-deleted.tmpl000664 000765 000024 00000000157 13255074424 021172 0ustar00msweetstaff000000 000000

Borrar clase {printer_name}

Se ha borrado con éxito la clase {printer_name}. cups-2.2.7/templates/es/class-jobs-header.tmpl000664 000765 000024 00000000040 13255074424 021736 0ustar00msweetstaff000000 000000

Trabajos

cups-2.2.7/templates/es/class-modified.tmpl000664 000765 000024 00000000233 13255074424 021337 0ustar00msweetstaff000000 000000

Modificar clase {printer_name}

Se ha modificado con éxito la clase {printer_name}. cups-2.2.7/templates/es/class.tmpl000664 000765 000024 00000004545 13255074424 017573 0ustar00msweetstaff000000 000000

{printer_name} ({printer_state=3?inactiva:{printer_state=4?procesando:en pausa}}, {printer_is_accepting_jobs=0?rechazando trabajos:aceptando trabajos}, {server_is_sharing_printers=0?no:{printer_is_shared=0?no:}} compartida{default_name={printer_name}?, predeterminada del servidor:})

Descripción:{printer_info}
Ubicación:{printer_location}
Miembros:{?member_uris=?Ninguno:{member_uris}}
Opciones predeterminadas:job-sheets={job_sheets_default} media={media_default?{media_default}:desconocido} {sides_default?sides={sides_default}:}
cups-2.2.7/templates/es/classes-header.tmpl000664 000765 000024 00000000146 13255074424 021342 0ustar00msweetstaff000000 000000

{total=0?No hay clases:Mostrando {#printer_name} de {total} clase{total=1?:s}}.

cups-2.2.7/templates/es/classes.tmpl000664 000765 000024 00000001043 13255074424 020111 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
Nombre de la colaDescripciónUbicaciónMiembrosEstado
{printer_name}{printer_info}{printer_location}{?member_uris=?Ninguna:{member_uris}}{printer_state=3?Inactiva:{printer_state=4?Procesando:En pausa}}{printer_state_message? - "{printer_state_message}":}
} cups-2.2.7/templates/es/command.tmpl000664 000765 000024 00000000672 13255074424 020101 0ustar00msweetstaff000000 000000

{title} en {printer_name}

{job_state>5?:Indicador de ocupado }Trabajo de comando de impresora {job_state=3?pendiente:{job_state=4?retenido: {job_state=5?procesando:{job_state=6?parado: {job_state=7?cancelado:{job_state=8?interrumpido:completado}}}}}}{job_state=9?:{job_printer_state_message?, "{job_printer_state_message}":}}

cups-2.2.7/templates/es/edit-config.tmpl000664 000765 000024 00000001157 13255074424 020652 0ustar00msweetstaff000000 000000

Editar archivo de configuración

cups-2.2.7/templates/es/error-op.tmpl000664 000765 000024 00000000217 13255074424 020223 0ustar00msweetstaff000000 000000

Error en {?printer_name}: {?title}

Error:

¡Operación desconocida "{op}"!
cups-2.2.7/templates/es/error.tmpl000664 000765 000024 00000000200 13255074424 017577 0ustar00msweetstaff000000 000000

Error en {?printer_name}: {?title}

{?message?{message}:Error}:

{error}
cups-2.2.7/templates/es/header.tmpl.in000664 000765 000024 00000003365 13255074424 020322 0ustar00msweetstaff000000 000000 {refresh_page?:} {title} - CUPS @CUPS_VERSION@@CUPS_REVISION@

{title}

cups-2.2.7/templates/es/help-header.tmpl000664 000765 000024 00000003572 13255074424 020643 0ustar00msweetstaff000000 000000
{TOPIC?:}

Buscar en {HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:todos los documentos}}:

{QUERY?

Buscar resultados en {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:todos los documentos}}\:

{QTEXT?:} :

No hay coincidencias.

}
:} {HELPTITLE?
:

Ayuda en línea

Esta es la interfaz de ayuda en línea de CUPS. Introduzca las palabras a buscar aquí encima o haga clic en cualquiera de los enlaces de la documentación para visualizar la información de ayuda en línea.

Si es nuevo en CUPS, lea la página "Información general de CUPS".

La página de inicio de CUPS también proporciona muchos recursos, incluyendo foros de discusión de usuarios, respuestas a preguntas frecuentes, y un formulario para el envío de informes de errores y peticiones de mejoras.

} cups-2.2.7/templates/es/help-printable.tmpl000664 000765 000024 00000000562 13255074424 021367 0ustar00msweetstaff000000 000000 {HELPTITLE} cups-2.2.7/templates/es/help-trailer.tmpl000664 000765 000024 00000000000 13255074424 021034 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/es/job-cancel.tmpl000664 000765 000024 00000000172 13255074424 020453 0ustar00msweetstaff000000 000000

Cancelar trabajo {job_id}

Se ha cancelado el Trabajo {job_id}. cups-2.2.7/templates/es/job-hold.tmpl000664 000765 000024 00000000170 13255074424 020152 0ustar00msweetstaff000000 000000

Retener trabajo {job_id}

Se ha retenido el Trabajo {job_id}. cups-2.2.7/templates/es/job-move.tmpl000664 000765 000024 00000001166 13255074424 020200 0ustar00msweetstaff000000 000000

{job_id?:}

{job_id?Mover trabajo {job_id}:Mover todos los trabajos}

Nuevo destino:
cups-2.2.7/templates/es/job-moved.tmpl000664 000765 000024 00000000421 13255074424 020335 0ustar00msweetstaff000000 000000

{job_id?Mover trabajo {job_id}:Mover todos los trabajos}

Se {job_id?ha movido el Trabajo {job_id}:han movido todos los trabajos} a {job_printer_name}.

cups-2.2.7/templates/es/job-release.tmpl000664 000765 000024 00000000170 13255074424 020644 0ustar00msweetstaff000000 000000

Liberar trabajo {job_id}

Se ha liberado el Trabajo {job_id}. cups-2.2.7/templates/es/job-restart.tmpl000664 000765 000024 00000000175 13255074424 020715 0ustar00msweetstaff000000 000000

Reimprimir trabajo {job_id}

Se ha reiniciado el Trabajo {job_id}. cups-2.2.7/templates/es/jobs-header.tmpl000664 000765 000024 00000001362 13255074424 020643 0ustar00msweetstaff000000 000000 {?which_jobs=?:

} {?which_jobs=completed?:
} {?which_jobs=all?:
}

{?which_jobs=?Jobs listed in print order; held jobs appear first.:{which_jobs=Jobs listed in ascending order.?:Jobs listed in descending order.}}

cups-2.2.7/templates/es/jobs.tmpl000664 000765 000024 00000005373 13255074424 017423 0ustar00msweetstaff000000 000000 {#job_id=0?: {[job_id] }
IDNombreUsuarioTamañoPáginasEstadoControl
{job_printer_name}-{job_id}{?phone? ({phone}):}  {?job_name=?Desconocido:{job_name}}  {?job_originating_user_name=?Retenido:{job_originating_user_name}}  {job_k_octets}k  {job_impressions_completed=0?Desconocido:{?job_impressions_completed}}  {job_state=3?pendiente desde
{?time_at_creation=?Unknown:{time_at_creation}}:{job_state=4?retenido desde
{?time_at_creation=?Unknown:{time_at_creation}}: {job_state=5?en proceso desde
{?time_at_processing=?Unknown:{time_at_processing}}:{job_state=6?parado: {job_state=7?cancelado el
{?time_at_completed=?Unknown:{time_at_completed}}:{job_state=8?interrumpido:completado el
{?time_at_completed=?Unknown:{time_at_completed}}}}}}}} {job_printer_state_message?
"{job_printer_state_message}":}
{job_preserved>0?{job_state>5?
:}:} {job_state=4?
:} {job_state=3?
:} {job_state<7?
:}  
} cups-2.2.7/templates/es/list-available-printers.tmpl000664 000765 000024 00000001223 13255074424 023211 0ustar00msweetstaff000000 000000

Impresoras disponibles

{#device_uri=0?

No se encuentran impresoras.

:
    {[device_uri]
  • {device_make_and_model} ({device_info})
  • }
} cups-2.2.7/templates/es/modify-class.tmpl000664 000765 000024 00000001552 13255074424 021053 0ustar00msweetstaff000000 000000

Modificar clase {printer_name}

Descripción:
Ubicación:
Miembros:
cups-2.2.7/templates/es/modify-printer.tmpl000664 000765 000024 00000002541 13255074424 021430 0ustar00msweetstaff000000 000000

Modificar {printer_name}

Descripción:
(Descripción fácilmente leíble tal como "HP LaserJet de doble cara")
Ubicación:
(Ubicación fácilmente leíble tal como "Lab 1")
Conexión: {device_uri}
Compartida: Compartir esta impresora
cups-2.2.7/templates/es/norestart.tmpl000664 000765 000024 00000000233 13255074424 020475 0ustar00msweetstaff000000 000000

Cambiar especificaciones

No se ha reiniciado el servidor debido a que no se han hecho cambios en la configuración...

cups-2.2.7/templates/es/option-boolean.tmpl000664 000765 000024 00000000350 13255074424 021401 0ustar00msweetstaff000000 000000 {keytext}: {[choices]{text}} cups-2.2.7/templates/es/option-conflict.tmpl000664 000765 000024 00000000344 13255074424 021566 0ustar00msweetstaff000000 000000

Error: Las siguientes opciones están en conflicto:

Cambie una o más de las opciones para resolver el problema.

cups-2.2.7/templates/es/option-header.tmpl000664 000765 000024 00000000131 13255074424 021207 0ustar00msweetstaff000000 000000

{group}

cups-2.2.7/templates/es/option-pickmany.tmpl000664 000765 000024 00000000377 13255074424 021606 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/es/option-pickone.tmpl000664 000765 000024 00000001704 13255074424 021416 0ustar00msweetstaff000000 000000 :} cups-2.2.7/templates/es/option-trailer.tmpl000664 000765 000024 00000000146 13255074424 021427 0ustar00msweetstaff000000 000000
{keytext}:
{keytext}: {iscustom=1?{[params] }
{paramtext}: {params=Units?:}

cups-2.2.7/templates/es/pager.tmpl000664 000765 000024 00000002425 13255074424 017557 0ustar00msweetstaff000000 000000
{PREV?{PREV>0?
:}
: }
{NEXT?
: } {LAST?
:}
cups-2.2.7/templates/es/printer-accept.tmpl000664 000765 000024 00000000336 13255074424 021400 0ustar00msweetstaff000000 000000

Aceptar trabajos de la {is_class?clase:impresora} {printer_name}

La {is_class?clase:impresora} {printer_name} ahora acepta trabajos.

cups-2.2.7/templates/es/printer-added.tmpl000664 000765 000024 00000000235 13255074424 021200 0ustar00msweetstaff000000 000000

Añadir impresora

Se ha añadido con éxito la impresora {printer_name}. cups-2.2.7/templates/es/printer-cancel-jobs.tmpl000664 000765 000024 00000000355 13255074424 022322 0ustar00msweetstaff000000 000000

Cancelar trabajos en {is_class?clase:impresora} {printer_name}

Se han cancelado todos los trabajos de la {is_class?clase:impresora} {printer_name}.

cups-2.2.7/templates/es/printer-configured.tmpl000664 000765 000024 00000000426 13255074424 022266 0ustar00msweetstaff000000 000000

Cambiar opciones predeterminadas de {printer_name}

Se han establecido con éxito las opciones predeterminadas de la {OP=set-class-options?clase :impresora }{printer_name}. cups-2.2.7/templates/es/printer-confirm.tmpl000664 000765 000024 00000000724 13255074424 021577 0ustar00msweetstaff000000 000000

Borrar impresora {printer_name}

Advertencia: ¿Está seguro de querer borrar la impresora {printer_name}?

cups-2.2.7/templates/es/printer-default.tmpl000664 000765 000024 00000000714 13255074424 021565 0ustar00msweetstaff000000 000000

Poner la {is_class?clase:impresora} {printer_name} como predeterminada

Se ha puesto como predeterminada en el servidor la {is_class?clase:impresora} {printer_name}.

Nota: cualquier opción de usuario que haya sido activada por mediación del comando lpoptions tiene mayor preferencia que este ajuste predeterminado.
cups-2.2.7/templates/es/printer-deleted.tmpl000664 000765 000024 00000000167 13255074424 021551 0ustar00msweetstaff000000 000000

Borrar impresora {printer_name}

Se ha borrado con éxito la impresora {printer_name}. cups-2.2.7/templates/es/printer-jobs-header.tmpl000664 000765 000024 00000000040 13255074424 022314 0ustar00msweetstaff000000 000000

Trabajos

cups-2.2.7/templates/es/printer-modified.tmpl000664 000765 000024 00000000244 13255074424 021717 0ustar00msweetstaff000000 000000

Modificar impresora {printer_name}

Se ha modificado con éxito la impresora {printer_name}. cups-2.2.7/templates/es/printer-purge.tmpl000664 000765 000024 00000000411 13255074424 021255 0ustar00msweetstaff000000 000000

Purgar trabajos de la {is_class?clase:impresora} {printer_name}

Se han purgado todos los trabajos de la {is_class?clase:impresora} {printer_name}.

cups-2.2.7/templates/es/printer-reject.tmpl000664 000765 000024 00000000337 13255074424 021416 0ustar00msweetstaff000000 000000

Rechazar trabajos de la {is_class?clase:impresora} {printer_name}

La {is_class?clase:impresora} {printer_name} ya no acepta trabajos.

cups-2.2.7/templates/es/printer-start.tmpl000664 000765 000024 00000000317 13255074424 021275 0ustar00msweetstaff000000 000000

Reanudar la {is_class?clase:impresora} {printer_name}

La {is_class?clase:impresora} {printer_name} ha sido reanudada.

cups-2.2.7/templates/es/printer-stop.tmpl000664 000765 000024 00000000323 13255074424 021122 0ustar00msweetstaff000000 000000

Pausar la {is_class?clase:impresora} {printer_name}

La {is_class?clase:impresora} {printer_name} ha sido puesta en pausa.

cups-2.2.7/templates/es/printer.tmpl000664 000765 000024 00000005331 13255074424 020143 0ustar00msweetstaff000000 000000

{printer_name} ({printer_state=3?inactiva:{printer_state=4?procesando:en pausa}}, {printer_is_accepting_jobs=0?rechazando trabajos:aceptando trabajos}, {server_is_sharing_printers=0?no:{printer_is_shared=0?no:}} compartida{default_name={printer_name}?, predeterminada del servidor:})

Descripción:{printer_info}
Ubicación:{printer_location}
Controlador:{printer_make_and_model} ({color_supported=1?color:escala de grises}{sides_supported=one-sided?:, dúplex})
Conexión:{device_uri}
Opciones predeterminadas:rótulos={job_sheets_default} papel={media_default?{media_default}:desconocido} {sides_default?caras={sides_default}:}
cups-2.2.7/templates/es/printers-header.tmpl000664 000765 000024 00000000156 13255074424 021554 0ustar00msweetstaff000000 000000

{total=0?No hay impresoras:Mostrando {#printer_name} de {total} impresora{total=1?:s}}.

cups-2.2.7/templates/es/printers.tmpl000664 000765 000024 00000001040 13255074424 020317 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
Nombre de la colaDescripciónUbicaciónMarca y modeloEstado
{printer_name}{printer_info}{printer_location}{printer_make_and_model}{printer_state=3?Inactiva:{printer_state=4?Procesando:En pausa}}{printer_state_message? - "{printer_state_message}":}
} cups-2.2.7/templates/es/restart.tmpl000664 000765 000024 00000005104 13255074424 020142 0ustar00msweetstaff000000 000000

Cambiar especificaciones

Indicador de ocupado Por favor espere mientras se reinicia el servidor...

cups-2.2.7/templates/es/samba-export.tmpl000664 000765 000024 00000003504 13255074424 021062 0ustar00msweetstaff000000 000000

Exportar impresoras a Samba

{error?

No se han podido exportar las impresoras a Samba\:

{error}

Consulte el archivo error_log para más información.

:

Esta página le permite exportar las impresoras a Samba para que los clientes Windows puedan acceder a ellas por los iconos de su escritorio Entorno de red o Sitios de red. Debe haber instalado previamente el controlador de impresora PostScript de Windows como se describe en la página del manual cupsaddsmb(8).

}
Impresoras:
Exportar todas las impresoras
Nombre de usuario Samba: (necesario)
Contraseña Samba: (necesaria)
cups-2.2.7/templates/es/samba-exported.tmpl000664 000765 000024 00000000101 13255074424 021361 0ustar00msweetstaff000000 000000

Se han exportado las impresoras a samba con éxito.

cups-2.2.7/templates/es/search.tmpl000664 000765 000024 00000001030 13255074424 017715 0ustar00msweetstaff000000 000000
{WHICH_JOBS?:} {ORDER?:}

Buscar en {SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?clases:{SECTION=jobs?trabajos:impresoras}}}:

cups-2.2.7/templates/es/set-printer-options-header.tmpl000664 000765 000024 00000001540 13255074424 023651 0ustar00msweetstaff000000 000000

Establecer opciones predeterminadas de {printer_name}

{HAVE_AUTOCONFIGURE?:}

{[group_id] {group}     }

cups-2.2.7/templates/es/set-printer-options-trailer.tmpl000664 000765 000024 00000000701 13255074424 024061 0ustar00msweetstaff000000 000000
cups-2.2.7/templates/es/subscription-added.tmpl000664 000765 000024 00000000131 13255074424 022234 0ustar00msweetstaff000000 000000

Se ha añadido con éxito la subscripción {subscription_name}.

cups-2.2.7/templates/es/subscription-canceled.tmpl000664 000765 000024 00000000113 13255074424 022731 0ustar00msweetstaff000000 000000

La subscripción #{notify_subscription_id} ha sido cancelada.

cups-2.2.7/templates/es/test-page.tmpl000664 000765 000024 00000000330 13255074424 020343 0ustar00msweetstaff000000 000000

Imprimir página de prueba en {printer_name}

Página de prueba enviada; el número del trabajo es el {printer_name}-{job_id}.

cups-2.2.7/templates/es/trailer.tmpl000664 000765 000024 00000000364 13255074424 020123 0ustar00msweetstaff000000 000000
cups-2.2.7/templates/es/users.tmpl000664 000765 000024 00000001635 13255074424 017624 0ustar00msweetstaff000000 000000
{IS_CLASS?:}

Usuarios permitidos para {printer_name}

Usuarios:
Permitir a estos usuarios imprimir Evitar que estos usuarios impriman
cups-2.2.7/templates/de/add-class.tmpl000664 000765 000024 00000002076 13255074424 020277 0ustar00msweetstaff000000 000000

Klasse hinzufügen

Name:
(Darf alle druckbaren Zeichen außer "/", "#", und Leerzeichen enthalten)
Beschreibung:
(Menschenlesbare Beschreibung wie etwa "HP LaserJet mit Duplexer")
Ort:
(Menschenlesbarer Ort wie etwa "Labor 1")
Mitglieder:
cups-2.2.7/templates/de/add-printer.tmpl000664 000765 000024 00000003210 13255074424 020644 0ustar00msweetstaff000000 000000

Drucker hinzufügen (Schritt 3/5)

{?current_make!?:} {?current_make_and_model!?:}
Name:
(Darf alle druckbaren Zeichen außer "/", "#", und Leerzeichen enthalten)
Beschreibung:
(Menschenlesbare Beschreibung wie etwa "HP LaserJet mit Duplexer")
Ort:
(Menschenlesbarer Ort wie etwa "Labor 1")
Verbindung: {device_uri}
Freigabe: Drucker im Netzwerk freigeben
cups-2.2.7/templates/de/add-rss-subscription.tmpl000664 000765 000024 00000004746 13255074424 022531 0ustar00msweetstaff000000 000000

RSS-Abonnement hinzufügen

Name:
(Darf alle druckbaren Zeichen außer Leerzeichen, "/", "?" und "#" enthalten)
Warteschlange:
Ereignisse: Auftrag erstellt
Auftrag abgeschlossen
Auftrag angehalten
Auftragsparameter geändert
     Warteschlange angehalten
Warteschlange hinzugefügt
Warteschlange geändert
Warteschlange gelöscht
     Server gestartet
Server angehalten
Server neu gestartet
Server-Sicherheitsprüfung
Maximale Ereignisse in Durchführung:
cups-2.2.7/templates/de/admin.tmpl000664 000765 000024 00000014554 13255074424 017540 0ustar00msweetstaff000000 000000

Drucker

{have_samba?
:}

Klassen

Aufträge

Server

{SETTINGS_ERROR?

{SETTINGS_MESSAGE}

{SETTINGS_ERROR}
:
{ADVANCEDSETTINGS?

Server-Einstellungen\:

Erweitert
Mit diesem System verbundene Drucker freigeben
        Maximale Anzahl an Clients\:
         Drucken aus dem Internet zulassen
         Weboberfläche im Netzwerk bekanntmachen
Fernwartung zulassen
{have_gssapi? Kerberos-Authentifizierung verwenden (FAQ)
:} Benutzern erlauben beliebige Aufträge abzubrechen (nicht nur die eigenen)
Auftragsverlauf behalten
        Maximale Auftragsanzahl (0 für unbegrenzt)\:
        Metadaten aufbewahren\:
        Dokumente aufbewahren\:
Mehr Informationen zur Fehlersuche speichern
        Maximale Protokoll-Dateigröße\:

:

Server-Einstellungen:

Erweitert
Mit diesem System verbundene Drucker freigeben
         Drucken aus dem Internet zulassen
Fernwartung zulassen
{have_gssapi? Kerberos-Authentifizierung verwenden (FAQ)
:} Benutzern erlauben beliebige Aufträge abzubrechen (nicht nur die eigenen)
Mehr Informationen zur Fehlersuche speichern

}

}

RSS-Abonnements

{notify_subscription_id?{[notify_subscription_id] }
NameEreignisWarteschlange
{notify_recipient_name}
 
{notify_events} {notify_printer_name?{notify_printer_name}:Alle Warteschlangen}
:}
cups-2.2.7/templates/de/choose-device.tmpl000664 000765 000024 00000003270 13255074424 021156 0ustar00msweetstaff000000 000000

{op=modify-printer?{printer_name} ändern:Drucker hinzufügen (Schritt 1/5)}

{CUPS_GET_DEVICES_DONE?
{printer_name?:} {op=add-printer?:}
Aktuelle Verbindung\: {current_device_uri}
Lokale Drucker\: {[device_uri]{device_class!network? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
:}}
Gefundene Netzwerkdrucker\: {[device_uri]{device_class=network?{device_uri~[a-z]+://? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
:}:}}
Andere Netzwerkdrucker\: {[device_uri]{device_class=network?{device_uri~[a-z]+://?: {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
}:}}
:

Beschäftigungsanzeige Suche nach Druckern…

} cups-2.2.7/templates/de/choose-make.tmpl000664 000765 000024 00000003624 13255074424 020637 0ustar00msweetstaff000000 000000

{op=modify-printer?{printer_name} ändern:Drucker hinzufügen (Schritt 4/5)}

{printer_name?:} {op=modify-printer?:}
Name: {printer_name}
Beschreibung: {printer_info}
Ort: {printer_location}
Verbindung: {device_uri}
Freigabe: Drucker {?printer_is_shared=?nicht:{?printer_is_shared=0?nicht:}} im Netzwerk freigeben
Hersteller:
 
Oder PPD-Datei bereitstellen:
cups-2.2.7/templates/de/choose-model.tmpl000664 000765 000024 00000004167 13255074424 021025 0ustar00msweetstaff000000 000000

{op=modify-printer?{printer_name} ändern:Drucker hinzufügen (Schritt 5/5)}

{printer_name?:} {op=modify-printer?:}
Name: {printer_name}
Beschreibung: {printer_info}
Ort: {printer_location}
Verbindung: {device_uri}
Freigabe: Drucker {?printer_is_shared=?nicht:{?printer_is_shared=0?nicht:}} im Netzwerk freigeben
Hersteller: {PPD_MAKE}
Modell:
Oder PPD-Datei bereitstellen:
cups-2.2.7/templates/de/choose-serial.tmpl000664 000765 000024 00000002610 13255074424 021173 0ustar00msweetstaff000000 000000

{op=modify-printer?{printer_name} ändern:Drucker hinzufügen}

{printer_name?:}
Verbindung: {device_uri}
Baudrate:
Parität:
Datenbits:
Flusskontrolle:
cups-2.2.7/templates/de/choose-uri.tmpl000664 000765 000024 00000002064 13255074424 020516 0ustar00msweetstaff000000 000000

{op=modify-printer?{printer_name} ändern:Drucker hinzufügen (Schritt 2/5)}

{printer_name?:}
Verbindung:
Beispiele:
    http://hostname:631/ipp/
    http://hostname:631/ipp/port1

    ipp://hostname/ipp/
    ipp://hostname/ipp/port1

    lpd://hostname/queue

    socket://hostname
    socket://hostname:9100

Beispiele und gängige URIs finden sich in der Hilfe unter "Netzwerkdrucker".

cups-2.2.7/templates/de/class-added.tmpl000664 000765 000024 00000000216 13255074424 020602 0ustar00msweetstaff000000 000000

Klasse hinzufügen

Die Klasse {printer_name} wurde erfolgreich hinzugefügt. cups-2.2.7/templates/de/class-confirm.tmpl000664 000765 000024 00000000723 13255074424 021201 0ustar00msweetstaff000000 000000

Klasse {printer_name} löschen

Warnung: Sind Sie sicher, dass Sie die Klasse {printer_name} wirklich löschen möchten?

cups-2.2.7/templates/de/class-deleted.tmpl000664 000765 000024 00000000161 13255074424 021146 0ustar00msweetstaff000000 000000

Klasse {printer_name} löschen

Die Klasse {printer_name} wurde erfolgreich gelöscht. cups-2.2.7/templates/de/class-jobs-header.tmpl000664 000765 000024 00000000041 13255074424 021720 0ustar00msweetstaff000000 000000

Aufträge

cups-2.2.7/templates/de/class-modified.tmpl000664 000765 000024 00000000226 13255074424 021322 0ustar00msweetstaff000000 000000

Klasse {printer_name} ändern

Die Klasse {printer_name} wurde erfolgreich geändert. cups-2.2.7/templates/de/class.tmpl000664 000765 000024 00000004445 13255074424 017553 0ustar00msweetstaff000000 000000

{printer_name} ({printer_state=3?Leerlauf:{printer_state=4?Beschäftigt:Angehalten}}, {printer_is_accepting_jobs=0?Aufträge ablehnen:Aufträge annehmen}, {server_is_sharing_printers=0?keine:{printer_is_shared=0?keine:}} Netzwerkfreigabe{default_name={printer_name}?, Standardklasse:})

Beschreibung:{printer_info}
Ort:{printer_location}
Mitglieder:{?member_uris=?Keine:{member_uris}}
Standardeinstellungen:job-sheets={job_sheets_default} media={media_default?{media_default}:unbekannt} {sides_default?sides={sides_default}:}
cups-2.2.7/templates/de/classes-header.tmpl000664 000765 000024 00000000144 13255074424 021321 0ustar00msweetstaff000000 000000

{total=0?Keine Klassen:Zeige {#printer_name} von {total} Klasse{total=1?:n}}.

cups-2.2.7/templates/de/classes.tmpl000664 000765 000024 00000001006 13255074424 020071 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
KlasseBeschreibungOrtMitgliederStatus
{printer_name}{printer_info}{printer_location}{?member_uris=?Keine:{member_uris}}{printer_state=3?Leerlauf:{printer_state=4?Beschäftigt:Angehalten}}{printer_state_message? - "{printer_state_message}":}
} cups-2.2.7/templates/de/command.tmpl000664 000765 000024 00000000663 13255074424 020062 0ustar00msweetstaff000000 000000

{title} auf {printer_name}

{job_state>5?:Beschäftigungsanzeige }Drucker Befehlsauftrag {job_state=3?unerledigt:{job_state=4?gehalten: {job_state=5?verarbeite:{job_state=6?gestoppt: {job_state=7?gelöscht:{job_state=8?abgebrochen:beendet}}}}}}{job_state=9?:{job_printer_state_message?, "{job_printer_state_message}":}}

cups-2.2.7/templates/de/edit-config.tmpl000664 000765 000024 00000001137 13255074424 020631 0ustar00msweetstaff000000 000000

Konfigurationsdatei bearbeiten

cups-2.2.7/templates/de/error-op.tmpl000664 000765 000024 00000000177 13255074424 020211 0ustar00msweetstaff000000 000000

{?title} {?printer_name} Fehler

Fehler:

Unbekannte Operation "{op}"!
cups-2.2.7/templates/de/error.tmpl000664 000765 000024 00000000175 13255074424 017573 0ustar00msweetstaff000000 000000

{?title} {?printer_name} Error

{?message?{message}:Fehler:}

{error}
cups-2.2.7/templates/de/header.tmpl.in000664 000765 000024 00000003363 13255074424 020301 0ustar00msweetstaff000000 000000 {refresh_page?:} {title} - CUPS @CUPS_VERSION@@CUPS_REVISION@

{title}

cups-2.2.7/templates/de/help-header.tmpl000664 000765 000024 00000003523 13255074424 020620 0ustar00msweetstaff000000 000000
{TOPIC?:}

Suche in {HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:allen Dokumenten}}:

{QUERY?

Suchergebnisse in {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:allen Dokumenten}}\:

{QTEXT?:} :

Keine Übereinstimmung gefunden.

}
:} {HELPTITLE?
:

CUPS-Hilfesystem

Dies ist das CUPS-Hilfesystem. Geben Sie Ihren Suchbegriff bzw. Ihre Suchbegriffe oben ein oder klicken Sie auf einen der Dokumentationslinks um einen bestimmten Bereich der Dokumentation anzuzeigen.

Wenn Sie noch unerfahren im Umgang mit CUPS sind, lesen Sie die "CUPS-Übersicht". Erfahrene Benutzer sollten "Was ist neu in CUPS 2.0" lesen.

Die CUPS-Webseite bietet ebenfalls viele Informationen, einschließlich Diskussionsforen für Benutzer, Antworten auf häufig gestellte Fragen sowie ein Formular für Fehlerberichte und Wünsche.

} cups-2.2.7/templates/de/help-printable.tmpl000664 000765 000024 00000000562 13255074424 021350 0ustar00msweetstaff000000 000000 {HELPTITLE} cups-2.2.7/templates/de/help-trailer.tmpl000664 000765 000024 00000000000 13255074424 021015 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/de/job-cancel.tmpl000664 000765 000024 00000000167 13255074424 020440 0ustar00msweetstaff000000 000000

Auftrag {job_id} löschen

Auftrag {job_id} wurde gelöscht. cups-2.2.7/templates/de/job-hold.tmpl000664 000765 000024 00000000204 13255074424 020131 0ustar00msweetstaff000000 000000

Auftrag {job_id} anhalten

Auftrag {job_id} wurde vom Drucken abgehalten. cups-2.2.7/templates/de/job-move.tmpl000664 000765 000024 00000001210 13255074424 020147 0ustar00msweetstaff000000 000000

{job_id?:}

{job_id?Auftrag {job_id} verschieben:Alle Aufträge verschieben}

Neues Ziel:
cups-2.2.7/templates/de/job-moved.tmpl000664 000765 000024 00000000352 13255074424 020321 0ustar00msweetstaff000000 000000

{job_id?Auftrag {job_id} verschieben:Alle Aufträge verschieben}

{job_id?Auftrag {job_id}:Alle Aufträge} nach {job_printer_name} verschoben.

cups-2.2.7/templates/de/job-release.tmpl000664 000765 000024 00000000206 13255074424 020625 0ustar00msweetstaff000000 000000

Auftrag {job_id} freigeben

Auftrag {job_id} wurde zum Drucken freigegeben. cups-2.2.7/templates/de/job-restart.tmpl000664 000765 000024 00000000176 13255074424 020677 0ustar00msweetstaff000000 000000

Auftrag {job_id} neu starten

Auftrag {job_id} wurde neu gestartet. cups-2.2.7/templates/de/jobs-header.tmpl000664 000765 000024 00000001357 13255074424 020630 0ustar00msweetstaff000000 000000 {?which_jobs=?:

} {?which_jobs=completed?:
} {?which_jobs=all?:
}

{?which_jobs=?Jobs listed in print order; held jobs appear first.:{which_jobs=Jobs listed in ascending order.?:Jobs listed in descending order.}}

cups-2.2.7/templates/de/jobs.tmpl000664 000765 000024 00000005370 13255074424 017401 0ustar00msweetstaff000000 000000 {#job_id=0?: {[job_id] }
IDNameBenutzerGrößeSeitenStatusSteuerung
{job_printer_name}-{job_id}{?phone? ({phone}):}  {?job_name=?Unbekannt:{job_name}}  {?job_originating_user_name=?Zurückbehalten:{job_originating_user_name}}  {job_k_octets}k  {job_impressions_completed=0?Unbekannt:{?job_impressions_completed}}  {job_state=3?unerledigt seit
{?time_at_creation=?Unknown:{time_at_creation}}:{job_state=4?angehalten seit
{?time_at_creation=?Unknown:{time_at_creation}}: {job_state=5?verarbeitet seit
{?time_at_processing=?Unknown:{time_at_processing}}:{job_state=6?angehalten: {job_state=7?gelöscht am
{?time_at_completed=?Unknown:{time_at_completed}}:{job_state=8?abgebrochen:beendet am
{?time_at_completed=?Unknown:{time_at_completed}}}}}}}} {job_printer_state_message?
"{job_printer_state_message}":}
{job_preserved>0?{job_state>5?
:}:} {job_state=4?
:} {job_state=3?
:} {job_state<7?
:}  
} cups-2.2.7/templates/de/list-available-printers.tmpl000664 000765 000024 00000001211 13255074424 023167 0ustar00msweetstaff000000 000000

Verfügbare Drucker

{#device_uri=0?

Keine Drucker gefunden.

:
    {[device_uri]
  • {device_make_and_model} ({device_info})
  • }
} cups-2.2.7/templates/de/modify-class.tmpl000664 000765 000024 00000001527 13255074424 021036 0ustar00msweetstaff000000 000000

Klasse {printer_name} ändern

Beschreibung:
Ort:
Mitglieder:
cups-2.2.7/templates/de/modify-printer.tmpl000664 000765 000024 00000002426 13255074424 021413 0ustar00msweetstaff000000 000000

{printer_name} ändern

Beschreibung:
(Menschenlesbare Beschreibung wie etwa "HP LaserJet mit Duplexer")
Ort:
(Menschenlesbarer Ort wie etwa "Labor 1")
Verbindung: {device_uri}
Freigabe: Drucker im Netzwerk freigeben
cups-2.2.7/templates/de/norestart.tmpl000664 000765 000024 00000000211 13255074424 020452 0ustar00msweetstaff000000 000000

Einstellungen ändern

Der Server wurde nicht neu gestartet, da die Konfiguration nicht geändert wurde…

cups-2.2.7/templates/de/option-boolean.tmpl000664 000765 000024 00000000350 13255074424 021362 0ustar00msweetstaff000000 000000 {keytext}: {[choices]{text}} cups-2.2.7/templates/de/option-conflict.tmpl000664 000765 000024 00000000350 13255074424 021544 0ustar00msweetstaff000000 000000

Fehler: Die folgenden Optionen stehen im Konflikt:

Bitte ändern Sie eine oder mehrere Einstellungen um die Konflikte zu lösen.

cups-2.2.7/templates/de/option-header.tmpl000664 000765 000024 00000000131 13255074424 021170 0ustar00msweetstaff000000 000000

{group}

cups-2.2.7/templates/de/option-pickmany.tmpl000664 000765 000024 00000000377 13255074424 021567 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/de/option-pickone.tmpl000664 000765 000024 00000001660 13255074424 021400 0ustar00msweetstaff000000 000000 :} cups-2.2.7/templates/de/option-trailer.tmpl000664 000765 000024 00000000145 13255074424 021407 0ustar00msweetstaff000000 000000
{keytext}:
{keytext}: {iscustom=1?{[params] }
{paramtext}: {params=Units?:}

cups-2.2.7/templates/de/pager.tmpl000664 000765 000024 00000002315 13255074424 017536 0ustar00msweetstaff000000 000000
{PREV?{PREV>0?
:}
: }
{NEXT?
: } {LAST?
:}
cups-2.2.7/templates/de/printer-accept.tmpl000664 000765 000024 00000000345 13255074424 021361 0ustar00msweetstaff000000 000000

Aufträge für {is_class?Klasse:Drucker} {printer_name} annehmen

{is_class?Die Klasse:Der Drucker} {printer_name} nimmt jetzt Aufträge an.

cups-2.2.7/templates/de/printer-added.tmpl000664 000765 000024 00000000213 13255074424 021155 0ustar00msweetstaff000000 000000

Drucker hinzufügen

Drucker {printer_name} wurde erfolgreich hinzufügt. cups-2.2.7/templates/de/printer-cancel-jobs.tmpl000664 000765 000024 00000000345 13255074424 022302 0ustar00msweetstaff000000 000000

Aufträge auf {is_class?Class:Printer} {printer_name} löschen

Alle Aufträge auf {is_class?class:printer} {printer_name} wurden gelöscht.

cups-2.2.7/templates/de/printer-configured.tmpl000664 000765 000024 00000000405 13255074424 022244 0ustar00msweetstaff000000 000000

Standardeinstellungen für {printer_name} festlegen

Standardeinstellungen für {OP=set-class-options?Klasse :Drucker }{printer_name} wurden erfolgreich gesetzt. cups-2.2.7/templates/de/printer-confirm.tmpl000664 000765 000024 00000000730 13255074424 021555 0ustar00msweetstaff000000 000000

Drucker {printer_name} löschen

Warnung: Sind Sie sicher, dass Sie den Drucker {printer_name} wirklich löschen möchten?

cups-2.2.7/templates/de/printer-default.tmpl000664 000765 000024 00000000747 13255074424 021554 0ustar00msweetstaff000000 000000

{is_class?Klasse:Drucker} {printer_name} als Standard festlegen

{is_class?Die Klasse:Der Drucker} {printer_name} wurde {is_class?zur Standardklasse:zum Standarddrucker} gemacht.

Hinweis: Die Einstellungen {is_class?der Standardklasse:des Standarddruckers} welche von Benutzern mittels dem lpoptions Befehl gesetzt wurden, überschreiben diese Einstellung.
cups-2.2.7/templates/de/printer-deleted.tmpl000664 000765 000024 00000000157 13255074424 021531 0ustar00msweetstaff000000 000000

Drucker {printer_name} löschen

Drucker {printer_name} wurde erfolgreich gelöscht. cups-2.2.7/templates/de/printer-jobs-header.tmpl000664 000765 000024 00000000041 13255074424 022276 0ustar00msweetstaff000000 000000

Aufträge

cups-2.2.7/templates/de/printer-modified.tmpl000664 000765 000024 00000000225 13255074424 021677 0ustar00msweetstaff000000 000000

Drucker {printer_name} ändern

Drucker {printer_name} wurde erfolgreich geändert. cups-2.2.7/templates/de/printer-reject.tmpl000664 000765 000024 00000000360 13255074424 021373 0ustar00msweetstaff000000 000000

Aufträge für {is_class?Klasse:Drucker} {printer_name} ablehnen

{is_class?Die Klasse:Der Drucker} {printer_name} akzeptiert keine weiteren Aufträge.

cups-2.2.7/templates/de/printer-start.tmpl000664 000765 000024 00000000313 13255074424 021252 0ustar00msweetstaff000000 000000

{is_class?Klasse:Drucker} {printer_name} starten

{is_class?Die Klasse:Der Drucker} {printer_name} wird gestartet.

cups-2.2.7/templates/de/printer-stop.tmpl000664 000765 000024 00000000316 13255074424 021105 0ustar00msweetstaff000000 000000

{is_class?Klasse:Drucker} {printer_name} anhalten

{is_class?Die Klasse:Der Drucker} {printer_name} wurde angehalten.

cups-2.2.7/templates/de/printer.tmpl000664 000765 000024 00000005234 13255074424 020126 0ustar00msweetstaff000000 000000

{printer_name} ({printer_state=3?Leerlauf:{printer_state=4?Beschäftigt:Angehalten}}, {printer_is_accepting_jobs=0?Aufträge ablehnen:Aufträge annehmen}, {server_is_sharing_printers=0?keine:{printer_is_shared=0?keine:}} Netzwerkfreigabe{default_name={printer_name}?, Standarddrucker:}, {printer_is_colormanaged=0?kein Farbmanagement:Farbmanagement})

Beschreibung:{printer_info}
Ort:{printer_location}
Treiber:{printer_make_and_model} ({color_supported=1?farbig:schwarz-weiß}{sides_supported?, 2-seitiges Drucken:})
Verbindung:{device_uri}
Standardeinstellungen:job-sheets={job_sheets_default} media={media_default?{media_default}:unbekannt} {sides_default?sides={sides_default}:}
cups-2.2.7/templates/de/printers-header.tmpl000664 000765 000024 00000000145 13255074424 021533 0ustar00msweetstaff000000 000000

{total=0?Keine Drucker:Zeige {#printer_name} von {total} Drucker{total=1?:n}}.

cups-2.2.7/templates/de/printers.tmpl000664 000765 000024 00000001015 13255074424 020302 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
WarteschlangeBeschreibungOrtHersteller und ModellStatus
{printer_name}{printer_info}{printer_location}{printer_make_and_model}{printer_state=3?Leerlauf:{printer_state=4?Beschäftigt:Angehalten}}{printer_state_message? - "{printer_state_message}":}
} cups-2.2.7/templates/de/restart.tmpl000664 000765 000024 00000005103 13255074424 020122 0ustar00msweetstaff000000 000000

Einstellungen ändern

Beschäftigungsanzeige Bitte warten Sie bis der Server neu gestartet ist…

cups-2.2.7/templates/de/samba-export.tmpl000664 000765 000024 00000003463 13255074424 021047 0ustar00msweetstaff000000 000000

Drucker für Samba freigeben

{error?

Drucker können nicht für Samba freigegeben werden\:

{error}

Bitte prüfen Sie das Fehlerprotokoll für weitere Informationen.

:

Diese Seite erlaubt es Ihnen Drucker für Samba freizugeben damit Windows-Rechner auf diese über das Netzwerk- bzw. Netzwerkumgebung-Symbol z.B. auf dem Desktop zugreifen können. Davor muss allerdings der PostScript- Druckertreiber für Windows, wie in der man page cupsaddsmb(8) beschrieben, installiert worden sein.

}
Drucker:
Alle Drucker freigeben
Samba-Benutzername: (erforderlich)
Samba-Passwort: (erforderlich)
cups-2.2.7/templates/de/samba-exported.tmpl000664 000765 000024 00000000076 13255074424 021355 0ustar00msweetstaff000000 000000

Die Drucker wurden erfolgreich für Samba freigegeben.

cups-2.2.7/templates/de/search.tmpl000664 000765 000024 00000001030 13255074424 017676 0ustar00msweetstaff000000 000000
{WHICH_JOBS?:} {ORDER?:}

Suche in {SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?Klassen:{SECTION=jobs?Aufträgen:Druckern}}}:

cups-2.2.7/templates/de/set-printer-options-header.tmpl000664 000765 000024 00000001525 13255074424 023635 0ustar00msweetstaff000000 000000

Standardeinstellungen für {printer_name} festlegen

{HAVE_AUTOCONFIGURE?:}

{[group_id] {group}     }

cups-2.2.7/templates/de/set-printer-options-trailer.tmpl000664 000765 000024 00000000701 13255074424 024042 0ustar00msweetstaff000000 000000
cups-2.2.7/templates/de/subscription-added.tmpl000664 000765 000024 00000000116 13255074424 022220 0ustar00msweetstaff000000 000000

Das RSS-Abonnement {subscription_name} wurde erfolgreich hinzugefügt.

cups-2.2.7/templates/de/subscription-canceled.tmpl000664 000765 000024 00000000103 13255074424 022711 0ustar00msweetstaff000000 000000

Das RSS-Abonnement #{notify_subscription_id} wurde beendet.

cups-2.2.7/templates/de/test-page.tmpl000664 000765 000024 00000000267 13255074424 020335 0ustar00msweetstaff000000 000000

Testseite für Drucker {printer_name}

Testseite wurde gesendet; Auftragsnummer lautet {printer_name}-{job_id}.

cups-2.2.7/templates/de/trailer.tmpl000664 000765 000024 00000000344 13255074424 020102 0ustar00msweetstaff000000 000000
cups-2.2.7/templates/de/users.tmpl000664 000765 000024 00000001637 13255074424 017607 0ustar00msweetstaff000000 000000
{IS_CLASS?:}

Erlaubte Benutzer für {printer_name}

Benutzer:
Diesen Benutzern das Drucken erlauben Diesen Benutzern das Drucken verbieten
cups-2.2.7/systemv/cancel.c000664 000765 000024 00000021105 13255074424 016255 0ustar00msweetstaff000000 000000 /* * "cancel" command for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include /* * 'main()' - Parse options and cancel jobs. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { http_t *http; /* HTTP connection to server */ int i; /* Looping var */ int job_id; /* Job ID */ int num_dests; /* Number of destinations */ cups_dest_t *dests; /* Destinations */ char *opt, /* Option pointer */ *dest, /* Destination printer */ *job, /* Job ID pointer */ *user; /* Cancel jobs for a user */ int purge; /* Purge or cancel jobs? */ char uri[1024]; /* Printer or job URI */ ipp_t *request; /* IPP request */ ipp_t *response; /* IPP response */ ipp_op_t op; /* Operation */ _cupsSetLocale(argv); /* * Setup to cancel individual print jobs... */ op = IPP_CANCEL_JOB; purge = 0; dest = NULL; user = NULL; http = NULL; num_dests = 0; dests = NULL; /* * Process command-line arguments... */ for (i = 1; i < argc; i ++) { if (argv[i][0] == '-' && argv[i][1]) { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'E' : /* Encrypt */ #ifdef HAVE_SSL cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); if (http) httpEncryption(http, HTTP_ENCRYPT_REQUIRED); #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]); #endif /* HAVE_SSL */ break; case 'U' : /* Username */ if (opt[1] != '\0') { cupsSetUser(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected username after \"-U\" option."), argv[0]); return (1); } cupsSetUser(argv[i]); } break; case 'a' : /* Cancel all jobs */ op = purge ? IPP_PURGE_JOBS : IPP_CANCEL_JOBS; break; case 'h' : /* Connect to host */ if (http != NULL) { httpClose(http); http = NULL; } if (opt[1] != '\0') { cupsSetServer(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected hostname after \"-h\" option."), argv[0]); return (1); } else cupsSetServer(argv[i]); } break; case 'u' : /* Username */ op = IPP_CANCEL_MY_JOBS; if (opt[1] != '\0') { user = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected username after \"-u\" option."), argv[0]); return (1); } else user = argv[i]; } break; case 'x' : /* Purge job(s) */ purge = 1; if (op == IPP_CANCEL_JOBS) op = IPP_PURGE_JOBS; break; default : _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%c\"."), argv[0], *opt); return (1); } } } else { /* * Cancel a job or printer... */ if (num_dests == 0) num_dests = cupsGetDests(&dests); if (!strcmp(argv[i], "-")) { /* * Delete the current job... */ dest = ""; job_id = 0; } else if (cupsGetDest(argv[i], NULL, num_dests, dests) != NULL) { /* * Delete the current job on the named destination... */ dest = argv[i]; job_id = 0; } else if ((job = strrchr(argv[i], '-')) != NULL && isdigit(job[1] & 255)) { /* * Delete the specified job ID. */ dest = NULL; op = IPP_CANCEL_JOB; job_id = atoi(job + 1); } else if (isdigit(argv[i][0] & 255)) { /* * Delete the specified job ID. */ dest = NULL; op = IPP_CANCEL_JOB; job_id = atoi(argv[i]); } else { /* * Bad printer name! */ _cupsLangPrintf(stderr, _("%s: Error - unknown destination \"%s\"."), argv[0], argv[i]); return (1); } /* * For Solaris LP compatibility, ignore a destination name after * cancelling a specific job ID... */ if (job_id && (i + 1) < argc && cupsGetDest(argv[i + 1], NULL, num_dests, dests) != NULL) i ++; /* * Open a connection to the server... */ if (http == NULL) if ((http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption())) == NULL) { _cupsLangPrintf(stderr, _("%s: Unable to connect to server."), argv[0]); return (1); } /* * Build an IPP request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri + job-id *or* job-uri * [requesting-user-name] */ request = ippNewRequest(op); if (dest) { httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", dest); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", job_id); } else { sprintf(uri, "ipp://localhost/jobs/%d", job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); } if (user) { ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); ippAddBoolean(request, IPP_TAG_OPERATION, "my-jobs", 1); if (op == IPP_CANCEL_JOBS) op = IPP_CANCEL_MY_JOBS; } else ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); if (purge) ippAddBoolean(request, IPP_TAG_OPERATION, "purge-jobs", (char)purge); /* * Do the request and get back a response... */ if (op == IPP_CANCEL_JOBS && (!user || _cups_strcasecmp(user, cupsUser()))) response = cupsDoRequest(http, request, "/admin/"); else response = cupsDoRequest(http, request, "/jobs/"); if (response == NULL || response->request.status.status_code > IPP_OK_CONFLICT) { _cupsLangPrintf(stderr, _("%s: %s failed: %s"), argv[0], op == IPP_PURGE_JOBS ? "purge-jobs" : "cancel-job", cupsLastErrorString()); if (response) ippDelete(response); return (1); } ippDelete(response); } } if (num_dests == 0 && op != IPP_CANCEL_JOB) { /* * Open a connection to the server... */ if (http == NULL) if ((http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption())) == NULL) { _cupsLangPrintf(stderr, _("%s: Unable to contact server."), argv[0]); return (1); } /* * Build an IPP request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri + job-id *or* job-uri * [requesting-user-name] */ request = ippNewRequest(op); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/printers/"); if (user) { ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); ippAddBoolean(request, IPP_TAG_OPERATION, "my-jobs", 1); } else ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddBoolean(request, IPP_TAG_OPERATION, "purge-jobs", (char)purge); /* * Do the request and get back a response... */ response = cupsDoRequest(http, request, "/admin/"); if (response == NULL || response->request.status.status_code > IPP_OK_CONFLICT) { _cupsLangPrintf(stderr, _("%s: %s failed: %s"), argv[0], op == IPP_PURGE_JOBS ? "purge-jobs" : "cancel-job", cupsLastErrorString()); if (response) ippDelete(response); return (1); } ippDelete(response); } return (0); } cups-2.2.7/systemv/cupsaccept.c000664 000765 000024 00000012164 13255074424 017167 0ustar00msweetstaff000000 000000 /* * "cupsaccept", "cupsdisable", "cupsenable", and "cupsreject" commands for * CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include /* * 'main()' - Parse options and accept/reject jobs or disable/enable printers. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ char *command, /* Command to do */ *opt, /* Option pointer */ uri[1024], /* Printer URI */ *reason; /* Reason for reject/disable */ ipp_t *request; /* IPP request */ ipp_op_t op; /* Operation */ int cancel; /* Cancel jobs? */ _cupsSetLocale(argv); /* * See what operation we're supposed to do... */ if ((command = strrchr(argv[0], '/')) != NULL) command ++; else command = argv[0]; cancel = 0; if (!strcmp(command, "cupsaccept") || !strcmp(command, "accept")) op = CUPS_ACCEPT_JOBS; else if (!strcmp(command, "cupsreject") || !strcmp(command, "reject")) op = CUPS_REJECT_JOBS; else if (!strcmp(command, "cupsdisable") || !strcmp(command, "disable")) op = IPP_PAUSE_PRINTER; else if (!strcmp(command, "cupsenable") || !strcmp(command, "enable")) op = IPP_RESUME_PRINTER; else { _cupsLangPrintf(stderr, _("%s: Don't know what to do."), command); return (1); } reason = NULL; /* * Process command-line arguments... */ for (i = 1; i < argc; i ++) { if (!strcmp(argv[i], "--hold")) op = IPP_HOLD_NEW_JOBS; else if (!strcmp(argv[i], "--release")) op = IPP_RELEASE_HELD_NEW_JOBS; else if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'E' : /* Encrypt */ #ifdef HAVE_SSL cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), command); #endif /* HAVE_SSL */ break; case 'U' : /* Username */ if (opt[1] != '\0') { cupsSetUser(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected username after \"-U\" option."), command); return (1); } cupsSetUser(argv[i]); } break; case 'c' : /* Cancel jobs */ cancel = 1; break; case 'h' : /* Connect to host */ if (opt[1] != '\0') { cupsSetServer(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected hostname after \"-h\" option."), command); return (1); } cupsSetServer(argv[i]); } break; case 'r' : /* Reason for cancellation */ if (opt[1] != '\0') { reason = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected reason text after \"-r\" option."), command); return (1); } reason = argv[i]; } break; default : _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%c\"."), command, *opt); return (1); } } } else { /* * Accept/disable/enable/reject a destination... */ request = ippNewRequest(op); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", argv[i]); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); if (reason != NULL) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_TEXT, "printer-state-message", NULL, reason); /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/")); if (cupsLastError() > IPP_OK_CONFLICT) { _cupsLangPrintf(stderr, _("%s: Operation failed: %s"), command, ippErrorString(cupsLastError())); return (1); } /* * Cancel all jobs if requested... */ if (cancel) { /* * Build an IPP_PURGE_JOBS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(IPP_PURGE_JOBS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippDelete(cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/admin/")); if (cupsLastError() > IPP_OK_CONFLICT) { _cupsLangPrintf(stderr, "%s: %s", command, cupsLastErrorString()); return (1); } } } } return (0); } cups-2.2.7/systemv/cupsaddsmb.c000664 000765 000024 00000014323 13255074424 017161 0ustar00msweetstaff000000 000000 /* * "cupsaddsmb" command for CUPS. * * Copyright 2007-2012 by Apple Inc. * Copyright 2001-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include #include #include /* * Local globals... */ int Verbosity = 0; const char *SAMBAUser, *SAMBAPassword, *SAMBAServer; /* * Local functions... */ int export_dest(http_t *http, const char *dest); void usage(void) __attribute__((noreturn)); /* * 'main()' - Export printers on the command-line. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i, j; /* Looping vars */ int status; /* Status from export_dest() */ int export_all; /* Export all printers? */ http_t *http; /* Connection to server */ int num_dests; /* Number of printers */ cups_dest_t *dests; /* Printers */ _cupsSetLocale(argv); /* * Parse command-line arguments... */ export_all = 0; http = NULL; SAMBAUser = cupsUser(); SAMBAPassword = NULL; SAMBAServer = NULL; for (i = 1; i < argc; i ++) if (!strcmp(argv[i], "-E")) { #ifdef HAVE_SSL cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]); #endif /* HAVE_SSL */ } else if (!strcmp(argv[i], "-H")) { i ++; if (i >= argc) usage(); SAMBAServer = argv[i]; } else if (!strcmp(argv[i], "-U")) { char *sep; /* Separator for password */ i ++; if (i >= argc) usage(); SAMBAUser = argv[i]; if ((sep = strchr(argv[i], '%')) != NULL) { /* * Nul-terminate the username at the first % and point the * password at the rest... */ *sep++ = '\0'; SAMBAPassword = sep; } } else if (!strcmp(argv[i], "-a")) export_all = 1; else if (!strcmp(argv[i], "-h")) { i ++; if (i >= argc) usage(); cupsSetServer(argv[i]); } else if (!strcmp(argv[i], "-v")) Verbosity = 1; else if (argv[i][0] != '-') { if (!http) { /* * Connect to the server... */ if ((http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption())) == NULL) { _cupsLangPrintf(stderr, _("%s: Unable to connect to server."), argv[0]); exit(1); } } if (SAMBAServer == NULL) { SAMBAServer = cupsServer(); if (SAMBAServer[0] == '/') /* Use localhost instead of domain socket */ SAMBAServer = "localhost"; } if ((status = export_dest(http, argv[i])) != 0) return (status); } else usage(); /* * Connect to the server... */ if ((http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption())) == NULL) { _cupsLangPrintf(stderr, _("%s: Unable to connect to server."), argv[0]); exit(1); } /* * See if the user specified "-a"... */ if (export_all) { /* * Export all printers... */ if (SAMBAServer == NULL) { SAMBAServer = cupsServer(); if (SAMBAServer[0] == '/') /* Use localhost instead of domain socket */ SAMBAServer = "localhost"; } num_dests = cupsGetDests2(http, &dests); for (j = 0, status = 0; j < num_dests; j ++) if (!dests[j].instance) { if ((status = export_dest(http, dests[j].name)) != 0) break; } cupsFreeDests(num_dests, dests); if (status) return (status); } return (0); } /* * 'export_dest()' - Export a destination to SAMBA. */ int /* O - 0 on success, non-zero on error */ export_dest(http_t *http, /* I - Connection to server */ const char *dest) /* I - Destination to export */ { int status; /* Status of export */ char ppdfile[1024], /* PPD file for printer drivers */ prompt[1024]; /* Password prompt */ int tries; /* Number of tries */ /* * Get the Windows PPD file for the printer... */ if (!cupsAdminCreateWindowsPPD(http, dest, ppdfile, sizeof(ppdfile))) { _cupsLangPrintf(stderr, _("cupsaddsmb: No PPD file for printer \"%s\" - %s"), dest, cupsLastErrorString()); return (1); } /* * Try to export it... */ for (status = 0, tries = 0; !status && tries < 3; tries ++) { /* * Get the password, as needed... */ if (!SAMBAPassword) { snprintf(prompt, sizeof(prompt), _cupsLangString(cupsLangDefault(), _("Password for %s required to access %s via " "SAMBA: ")), SAMBAUser, SAMBAServer); if ((SAMBAPassword = cupsGetPassword(prompt)) == NULL) break; } status = cupsAdminExportSamba(dest, ppdfile, SAMBAServer, SAMBAUser, SAMBAPassword, Verbosity ? stderr : NULL); if (!status && cupsLastError() == IPP_NOT_FOUND) break; } unlink(ppdfile); return (!status); } /* * 'usage()' - Show program usage and exit... */ void usage(void) { _cupsLangPuts(stdout, _("Usage: cupsaddsmb [options] printer1 ... printerN")); _cupsLangPuts(stdout, _(" cupsaddsmb [options] -a")); _cupsLangPuts(stdout, ""); _cupsLangPuts(stdout, _("Options:")); _cupsLangPuts(stdout, _(" -E Encrypt the connection.")); _cupsLangPuts(stdout, _(" -H samba-server Use the named SAMBA " "server.")); _cupsLangPuts(stdout, _(" -U username Specify username.")); _cupsLangPuts(stdout, _(" -a Export all printers.")); _cupsLangPuts(stdout, _(" -h server[:port] Specify server address.")); _cupsLangPuts(stdout, _(" -v Be verbose.")); exit(1); } cups-2.2.7/systemv/cupsctl.c000664 000765 000024 00000014412 13255074424 016510 0ustar00msweetstaff000000 000000 /* * Scheduler control program for CUPS. * * Copyright 2007-2012 by Apple Inc. * Copyright 2006-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include /* * Local functions... */ static void usage(const char *opt) __attribute__((noreturn)); /* * 'main()' - Get/set server settings. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i, /* Looping var */ num_settings; /* Number of settings */ cups_option_t *settings; /* Settings */ const char *opt; /* Current option character */ http_t *http; /* Connection to server */ /* * Process the command-line... */ _cupsSetLocale(argv); num_settings = 0; settings = NULL; for (i = 1; i < argc; i ++) { if (argv[i][0] == '-') { if (argv[i][1] == '-') { if (!strcmp(argv[i], "--debug-logging")) num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING, "1", num_settings, &settings); else if (!strcmp(argv[i], "--no-debug-logging")) num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING, "0", num_settings, &settings); else if (!strcmp(argv[i], "--remote-admin")) num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN, "1", num_settings, &settings); else if (!strcmp(argv[i], "--no-remote-admin")) num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN, "0", num_settings, &settings); else if (!strcmp(argv[i], "--remote-any")) num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ANY, "1", num_settings, &settings); else if (!strcmp(argv[i], "--no-remote-any")) num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ANY, "0", num_settings, &settings); else if (!strcmp(argv[i], "--share-printers")) num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS, "1", num_settings, &settings); else if (!strcmp(argv[i], "--no-share-printers")) num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS, "0", num_settings, &settings); else if (!strcmp(argv[i], "--user-cancel-any")) num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY, "1", num_settings, &settings); else if (!strcmp(argv[i], "--no-user-cancel-any")) num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY, "0", num_settings, &settings); else usage(argv[i]); } else { for (opt = argv[i] + 1; *opt; opt ++) switch (*opt) { case 'E' : cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); break; case 'U' : i ++; if (i >= argc) usage(NULL); cupsSetUser(argv[i]); break; case 'h' : i ++; if (i >= argc) usage(NULL); cupsSetServer(argv[i]); break; default : usage(opt); break; } } } else if (strchr(argv[i], '=')) num_settings = cupsParseOptions(argv[i], num_settings, &settings); else usage(argv[i]); } if (cupsGetOption("Listen", num_settings, settings) || cupsGetOption("Port", num_settings, settings)) { _cupsLangPuts(stderr, _("cupsctl: Cannot set Listen or Port directly.")); return (1); } /* * Connect to the server using the defaults... */ if ((http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption())) == NULL) { _cupsLangPrintf(stderr, _("cupsctl: Unable to connect to server: %s"), strerror(errno)); return (1); } /* * Set the current configuration if we have anything on the command-line... */ if (num_settings > 0) { if (!cupsAdminSetServerSettings(http, num_settings, settings)) { _cupsLangPrintf(stderr, "cupsctl: %s", cupsLastErrorString()); return (1); } } else if (!cupsAdminGetServerSettings(http, &num_settings, &settings)) { _cupsLangPrintf(stderr, "cupsctl: %s", cupsLastErrorString()); return (1); } else { for (i = 0; i < num_settings; i ++) _cupsLangPrintf(stdout, "%s=%s", settings[i].name, settings[i].value); } cupsFreeOptions(num_settings, settings); return (0); } /* * 'usage()' - Show program usage. */ static void usage(const char *opt) /* I - Option character/string */ { if (opt) { if (*opt == '-') _cupsLangPrintf(stderr, _("cupsctl: Unknown option \"%s\""), opt); else _cupsLangPrintf(stderr, _("cupsctl: Unknown option \"-%c\""), *opt); } _cupsLangPuts(stdout, _("Usage: cupsctl [options] [param=value ... " "paramN=valueN]")); _cupsLangPuts(stdout, ""); _cupsLangPuts(stdout, _("Options:")); _cupsLangPuts(stdout, ""); _cupsLangPuts(stdout, _(" -E Encrypt the connection.")); _cupsLangPuts(stdout, _(" -U username Specify username.")); _cupsLangPuts(stdout, _(" -h server[:port] Specify server " "address.")); _cupsLangPuts(stdout, ""); _cupsLangPuts(stdout, _(" --[no-]debug-logging Turn debug logging " "on/off.")); _cupsLangPuts(stdout, _(" --[no-]remote-admin Turn remote " "administration on/off.")); _cupsLangPuts(stdout, _(" --[no-]remote-any Allow/prevent access " "from the Internet.")); _cupsLangPuts(stdout, _(" --[no-]share-printers Turn printer sharing " "on/off.")); _cupsLangPuts(stdout, _(" --[no-]user-cancel-any Allow/prevent users to " "cancel any job.")); exit(1); } cups-2.2.7/systemv/cupstestdsc.c000664 000765 000024 00000023676 13255074424 017413 0ustar00msweetstaff000000 000000 /* * DSC test program for CUPS. * * Copyright 2007-2010 by Apple Inc. * Copyright 2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * PostScript is a trademark of Adobe Systems, Inc. * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include /* * Local functions... */ static int check_file(const char *filename); static void usage(void) __attribute__((noreturn)); /* * 'main()' - Main entry for test program. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ int status; /* Status of tests */ int num_files; /* Number of files tested */ _cupsSetLocale(argv); /* * Collect command-line arguments... */ for (i = 1, num_files = 0, status = 0; i < argc; i ++) if (argv[i][0] == '-') { if (argv[i][1]) { /* * Currently the only supported option is "-h" (help)... */ usage(); } else { num_files ++; status += check_file("(stdin)"); } } else { num_files ++; status += check_file(argv[i]); } if (!num_files) usage(); return (status); } /* * 'check()' - Check a file for conformance. */ static int /* O - 0 on success, 1 on failure */ check_file(const char *filename) /* I - File to read from */ { int i; /* Looping var */ cups_file_t *fp; /* File */ char line[1024]; /* Line from file */ int ch; /* Current character */ size_t bytes; /* Length of line */ int status; /* Status of test */ int linenum; /* Line number */ int binary; /* File contains binary data? */ float version; /* DSC version */ int lbrt[4]; /* Bounding box */ char page_label[256]; /* Page label string */ int page_number; /* Page number */ int last_page_number; /* Last page number seen */ int level; /* Embedded document level */ int saw_bounding_box, /* %%BoundingBox seen? */ saw_pages, /* %%Pages seen? */ saw_end_comments, /* %%EndComments seen? */ saw_begin_prolog, /* %%BeginProlog seen? */ saw_end_prolog, /* %%EndProlog seen? */ saw_begin_setup, /* %%BeginSetup seen? */ saw_end_setup, /* %%EndSetup seen? */ saw_page, /* %%Page seen? */ saw_trailer, /* %%Trailer seen? */ saw_long_line; /* Saw long lines? */ /* * Open the file... */ if (!strcmp(filename, "(stdin)")) fp = cupsFileStdin(); else fp = cupsFileOpen(filename, "r"); if (!fp) { perror(filename); return (1); } /* * Scan the file... */ binary = 0; last_page_number = 0; level = 0; linenum = 0; saw_begin_prolog = 0; saw_begin_setup = 0; saw_bounding_box = 0; saw_end_comments = 0; saw_end_prolog = 0; saw_end_setup = 0; saw_long_line = 0; saw_page = 0; saw_pages = 0; saw_trailer = 0; status = 0; version = 0.0f; /* TODO: Fixme */ printf("%s: ", filename); fflush(stdout); while ((bytes = cupsFileGetLine(fp, line, sizeof(line))) > 0) { linenum ++; if (bytes > 255) { if (!saw_long_line) { if (!status) _cupsLangPuts(stdout, _("FAIL")); status ++; _cupsLangPrintf(stdout, _(" Line %d is longer than 255 characters (%d).\n" " REF: Page 25, Line Length"), linenum, (int)bytes); } saw_long_line ++; } if (linenum == 1) { if (strncmp(line, "%!PS-Adobe-", 11)) { if (!status) _cupsLangPuts(stdout, _("FAIL")); _cupsLangPuts(stdout, _(" Missing %!PS-Adobe-3.0 on first line.\n" " REF: Page 17, 3.1 Conforming Documents")); cupsFileClose(fp); return (1); } else version = (float)atof(line + 11); } else if (level > 0) { if (!strncmp(line, "%%BeginDocument:", 16)) level ++; else if (!strncmp(line, "%%EndDocument", 13)) level --; } else if (saw_trailer) { if (!strncmp(line, "%%Pages:", 8)) { if (atoi(line + 8) <= 0) { if (!status) _cupsLangPuts(stdout, _("FAIL")); status ++; _cupsLangPrintf(stdout, _(" Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:"), linenum); } else saw_pages = 1; } else if (!strncmp(line, "%%BoundingBox:", 14)) { if (sscanf(line + 14, "%d%d%d%d", lbrt + 0, lbrt + 1, lbrt + 2, lbrt + 3) != 4) { if (!status) _cupsLangPuts(stdout, _("FAIL")); status ++; _cupsLangPrintf(stdout, _(" Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:"), linenum); } else saw_bounding_box = 1; } } else if (!saw_end_comments) { if (!strncmp(line, "%%EndComments", 13)) saw_end_comments = 1; else if (line[0] != '%') saw_end_comments = -1; else if (!strncmp(line, "%%Pages:", 8)) { if (strstr(line + 8, "(atend)")) saw_pages = -1; else if (atoi(line + 8) <= 0) { if (!status) _cupsLangPuts(stdout, _("FAIL")); status ++; _cupsLangPrintf(stdout, _(" Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:"), linenum); } else saw_pages = 1; } else if (!strncmp(line, "%%BoundingBox:", 14)) { if (strstr(line, "(atend)")) saw_bounding_box = -1; else if (sscanf(line + 14, "%d%d%d%d", lbrt + 0, lbrt + 1, lbrt + 2, lbrt + 3) != 4) { if (!status) _cupsLangPuts(stdout, _("FAIL")); status ++; _cupsLangPrintf(stdout, _(" Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:"), linenum); } else saw_bounding_box = 1; } } else if (saw_begin_prolog && !saw_end_prolog) { if (!strncmp(line, "%%EndProlog", 11)) saw_end_prolog = 1; } else if (saw_begin_setup && !saw_end_setup) { if (!strncmp(line, "%%EndSetup", 10)) saw_end_setup = 1; } else if (saw_end_comments) { if (!strncmp(line, "%%Page:", 7)) { if (sscanf(line + 7, "%255s%d", page_label, &page_number) != 2 || page_number != (last_page_number + 1) || page_number < 1) { if (!status) _cupsLangPuts(stdout, _("FAIL")); status ++; _cupsLangPrintf(stdout, _(" Bad %%%%Page: on line %d.\n" " REF: Page 53, %%%%Page:"), linenum); } else { last_page_number = page_number; saw_page = 1; } } else if (!strncmp(line, "%%BeginProlog", 13)) saw_begin_prolog = 1; else if (!strncmp(line, "%%BeginSetup", 12)) saw_begin_setup = 1; else if (!strncmp(line, "%%BeginDocument:", 16)) level ++; else if (!strncmp(line, "%%EndDocument", 13)) level --; else if (!strncmp(line, "%%Trailer", 9)) saw_trailer = 1; } for (i = 0; !binary && i < (int)bytes; i ++) { ch = line[i]; if ((ch < ' ' || (ch & 0x80)) && ch != '\n' && ch != '\r' && ch != '\t') binary = 1; } } if (saw_bounding_box <= 0) { if (!status) _cupsLangPuts(stdout, _("FAIL")); status ++; _cupsLangPuts(stdout, _(" Missing or bad %%BoundingBox: comment.\n" " REF: Page 39, %%BoundingBox:")); } if (saw_pages <= 0) { if (!status) _cupsLangPuts(stdout, _("FAIL")); status ++; _cupsLangPuts(stdout, _(" Missing or bad %%Pages: comment.\n" " REF: Page 43, %%Pages:")); } if (!saw_end_comments) { if (!status) _cupsLangPuts(stdout, _("FAIL")); status ++; _cupsLangPuts(stdout, _(" Missing %%EndComments comment." " REF: Page 41, %%EndComments")); } if (!saw_page) { if (!status) _cupsLangPuts(stdout, _("FAIL")); status ++; _cupsLangPuts(stdout, _(" Missing or bad %%Page: comments.\n" " REF: Page 53, %%Page:")); } if (level < 0) { if (!status) _cupsLangPuts(stdout, _("FAIL")); status ++; _cupsLangPuts(stdout, _(" Too many %%EndDocument comments.")); } else if (level > 0) { if (!status) _cupsLangPuts(stdout, _("FAIL")); status ++; _cupsLangPuts(stdout, _(" Too many %%BeginDocument comments.")); } if (saw_long_line > 1) _cupsLangPrintf(stderr, _(" Saw %d lines that exceeded 255 characters."), saw_long_line); if (!status) _cupsLangPuts(stdout, _("PASS")); if (binary) _cupsLangPuts(stdout, _(" Warning: file contains binary data.")); if (version < 3.0f) _cupsLangPrintf(stdout, _(" Warning: obsolete DSC version %.1f in file."), version); if (saw_end_comments < 0) _cupsLangPuts(stdout, _(" Warning: no %%EndComments comment in file.")); cupsFileClose(fp); return (status); } /* * 'usage()' - Show program usage. */ static void usage(void) { _cupsLangPuts(stdout, _("Usage: cupstestdsc [options] filename.ps [... " "filename.ps]")); _cupsLangPuts(stdout, _(" cupstestdsc [options] -")); _cupsLangPuts(stdout, ""); _cupsLangPuts(stdout, _("Options:")); _cupsLangPuts(stdout, ""); _cupsLangPuts(stdout, _(" -h Show program usage")); _cupsLangPuts(stdout, ""); _cupsLangPuts(stdout, _("Note: this program only validates the DSC comments, " "not the PostScript itself.")); exit(1); } cups-2.2.7/systemv/cupstestppd.c000664 000765 000024 00000304600 13255074424 017412 0ustar00msweetstaff000000 000000 /* * PPD test program for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * PostScript is a trademark of Adobe Systems, Inc. * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include #include #include #include #ifdef WIN32 # define X_OK 0 #endif /* WIN32 */ /* * Error warning overrides... */ enum { WARN_NONE = 0, WARN_CONSTRAINTS = 1, WARN_DEFAULTS = 2, WARN_FILTERS = 4, WARN_PROFILES = 8, WARN_TRANSLATIONS = 16, WARN_DUPLEX = 32, WARN_SIZES = 64, WARN_FILENAME = 128, WARN_ALL = 255 }; /* * Error codes... */ enum { ERROR_NONE = 0, ERROR_USAGE, ERROR_FILE_OPEN, ERROR_PPD_FORMAT, ERROR_CONFORMANCE }; /* * Line endings... */ enum { EOL_NONE = 0, EOL_CR, EOL_LF, EOL_CRLF }; /* * File permissions... */ #define MODE_WRITE 0022 /* Group/other write */ #define MODE_MASK 0555 /* Owner/group/other read+exec/search */ #define MODE_DATAFILE 0444 /* Owner/group/other read */ #define MODE_DIRECTORY 0555 /* Owner/group/other read+search */ #define MODE_PROGRAM 0555 /* Owner/group/other read+exec */ /* * Local functions... */ static void check_basics(const char *filename); static int check_constraints(ppd_file_t *ppd, int errors, int verbose, int warn); static int check_case(ppd_file_t *ppd, int errors, int verbose); static int check_defaults(ppd_file_t *ppd, int errors, int verbose, int warn); static int check_duplex(ppd_file_t *ppd, int errors, int verbose, int warn); static int check_filters(ppd_file_t *ppd, const char *root, int errors, int verbose, int warn); static int check_profiles(ppd_file_t *ppd, const char *root, int errors, int verbose, int warn); static int check_sizes(ppd_file_t *ppd, int errors, int verbose, int warn); static int check_translations(ppd_file_t *ppd, int errors, int verbose, int warn); static void show_conflicts(ppd_file_t *ppd, const char *prefix); static int test_raster(ppd_file_t *ppd, int verbose); static void usage(void) __attribute__((noreturn)); static int valid_path(const char *keyword, const char *path, int errors, int verbose, int warn); static int valid_utf8(const char *s); /* * 'main()' - Main entry for test program. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i, j, k, m, n; /* Looping vars */ size_t len; /* Length of option name */ char *opt; /* Option character */ const char *ptr; /* Pointer into string */ cups_file_t *fp; /* PPD file */ int files; /* Number of files */ int verbose; /* Want verbose output? */ int warn; /* Which errors to just warn about */ int ignore; /* Which errors to ignore */ int status; /* Exit status */ int errors; /* Number of conformance errors */ int ppdversion; /* PPD spec version in PPD file */ ppd_status_t error; /* Status of ppdOpen*() */ int line; /* Line number for error */ char *root; /* Root directory */ int xdpi, /* X resolution */ ydpi; /* Y resolution */ ppd_file_t *ppd; /* PPD file record */ ppd_attr_t *attr; /* PPD attribute */ ppd_size_t *size; /* Size record */ ppd_group_t *group; /* UI group */ ppd_option_t *option; /* Standard UI option */ ppd_group_t *group2; /* UI group */ ppd_option_t *option2; /* Standard UI option */ ppd_choice_t *choice; /* Standard UI option choice */ struct lconv *loc; /* Locale data */ static char *uis[] = { "BOOLEAN", "PICKONE", "PICKMANY" }; static char *sections[] = { "ANY", "DOCUMENT", "EXIT", "JCL", "PAGE", "PROLOG" }; _cupsSetLocale(argv); loc = localeconv(); /* * Display PPD files for each file listed on the command-line... */ ppdSetConformance(PPD_CONFORM_STRICT); verbose = 0; ppd = NULL; files = 0; status = ERROR_NONE; root = ""; warn = WARN_NONE; ignore = WARN_NONE; for (i = 1; i < argc; i ++) if (argv[i][0] == '-' && argv[i][1]) { for (opt = argv[i] + 1; *opt; opt ++) switch (*opt) { case 'I' : /* Ignore errors */ i ++; if (i >= argc) usage(); if (!strcmp(argv[i], "none")) ignore = WARN_NONE; else if (!strcmp(argv[i], "filename")) ignore |= WARN_FILENAME; else if (!strcmp(argv[i], "filters")) ignore |= WARN_FILTERS; else if (!strcmp(argv[i], "profiles")) ignore |= WARN_PROFILES; else if (!strcmp(argv[i], "all")) ignore = WARN_FILTERS | WARN_PROFILES; else usage(); break; case 'R' : /* Alternate root directory */ i ++; if (i >= argc) usage(); root = argv[i]; break; case 'W' : /* Turn errors into warnings */ i ++; if (i >= argc) usage(); if (!strcmp(argv[i], "none")) warn = WARN_NONE; else if (!strcmp(argv[i], "constraints")) warn |= WARN_CONSTRAINTS; else if (!strcmp(argv[i], "defaults")) warn |= WARN_DEFAULTS; else if (!strcmp(argv[i], "duplex")) warn |= WARN_DUPLEX; else if (!strcmp(argv[i], "filters")) warn |= WARN_FILTERS; else if (!strcmp(argv[i], "profiles")) warn |= WARN_PROFILES; else if (!strcmp(argv[i], "sizes")) warn |= WARN_SIZES; else if (!strcmp(argv[i], "translations")) warn |= WARN_TRANSLATIONS; else if (!strcmp(argv[i], "all")) warn = WARN_ALL; else usage(); break; case 'q' : /* Quiet mode */ if (verbose > 0) { _cupsLangPuts(stderr, _("cupstestppd: The -q option is incompatible " "with the -v option.")); return (1); } verbose --; break; case 'r' : /* Relaxed mode */ ppdSetConformance(PPD_CONFORM_RELAXED); break; case 'v' : /* Verbose mode */ if (verbose < 0) { _cupsLangPuts(stderr, _("cupstestppd: The -v option is incompatible " "with the -q option.")); return (1); } verbose ++; break; default : usage(); break; } } else { /* * Open the PPD file... */ if (files && verbose >= 0) puts(""); files ++; if (argv[i][0] == '-') { /* * Read from stdin... */ ppd = _ppdOpen(cupsFileStdin(), _PPD_LOCALIZATION_ALL); if (verbose >= 0) printf("%s:", (ppd && ppd->pcfilename) ? ppd->pcfilename : "(stdin)"); } else { /* * Read from a file... */ if (verbose >= 0) printf("%s:", argv[i]); if ((fp = cupsFileOpen(argv[i], "r")) != NULL) { ppd = _ppdOpen(fp, _PPD_LOCALIZATION_ALL); cupsFileClose(fp); } else { status = ERROR_FILE_OPEN; if (verbose >= 0) { _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** Unable to open PPD file - %s on " "line %d."), strerror(errno), 0); continue; } } } if (ppd == NULL) { error = ppdLastError(&line); if (error <= PPD_ALLOC_ERROR) { status = ERROR_FILE_OPEN; if (verbose >= 0) { _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** Unable to open PPD file - %s on " "line %d."), strerror(errno), 0); } } else { status = ERROR_PPD_FORMAT; if (verbose >= 0) { _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** Unable to open PPD file - " "%s on line %d."), ppdErrorString(error), line); switch (error) { case PPD_MISSING_PPDADOBE4 : _cupsLangPuts(stdout, _(" REF: Page 42, section " "5.2.")); break; case PPD_MISSING_VALUE : _cupsLangPuts(stdout, _(" REF: Page 20, section " "3.4.")); break; case PPD_BAD_OPEN_GROUP : case PPD_NESTED_OPEN_GROUP : _cupsLangPuts(stdout, _(" REF: Pages 45-46, section " "5.2.")); break; case PPD_BAD_OPEN_UI : case PPD_NESTED_OPEN_UI : _cupsLangPuts(stdout, _(" REF: Pages 42-45, section " "5.2.")); break; case PPD_BAD_ORDER_DEPENDENCY : _cupsLangPuts(stdout, _(" REF: Pages 48-49, section " "5.2.")); break; case PPD_BAD_UI_CONSTRAINTS : _cupsLangPuts(stdout, _(" REF: Pages 52-54, section " "5.2.")); break; case PPD_MISSING_ASTERISK : _cupsLangPuts(stdout, _(" REF: Page 15, section " "3.2.")); break; case PPD_LINE_TOO_LONG : _cupsLangPuts(stdout, _(" REF: Page 15, section " "3.1.")); break; case PPD_ILLEGAL_CHARACTER : _cupsLangPuts(stdout, _(" REF: Page 15, section " "3.1.")); break; case PPD_ILLEGAL_MAIN_KEYWORD : _cupsLangPuts(stdout, _(" REF: Pages 16-17, section " "3.2.")); break; case PPD_ILLEGAL_OPTION_KEYWORD : _cupsLangPuts(stdout, _(" REF: Page 19, section " "3.3.")); break; case PPD_ILLEGAL_TRANSLATION : _cupsLangPuts(stdout, _(" REF: Page 27, section " "3.5.")); break; default : break; } check_basics(argv[i]); } } continue; } /* * Show the header and then perform basic conformance tests (limited * only by what the CUPS PPD functions actually load...) */ errors = 0; ppdversion = 43; if (verbose > 0) _cupsLangPuts(stdout, _("\n DETAILED CONFORMANCE TEST RESULTS")); if ((attr = ppdFindAttr(ppd, "FormatVersion", NULL)) != NULL && attr->value) ppdversion = (int)(10 * _cupsStrScand(attr->value, NULL, loc) + 0.5); if ((attr = ppdFindAttr(ppd, "cupsFilter2", NULL)) != NULL) { do { if (strstr(attr->value, "application/vnd.cups-raster")) { if (!test_raster(ppd, verbose)) errors ++; break; } } while ((attr = ppdFindNextAttr(ppd, "cupsFilter2", NULL)) != NULL); } else { for (j = 0; j < ppd->num_filters; j ++) if (strstr(ppd->filters[j], "application/vnd.cups-raster")) { if (!test_raster(ppd, verbose)) errors ++; break; } } /* * Look for default keywords with no matching option... */ if (!(warn & WARN_DEFAULTS)) errors = check_defaults(ppd, errors, verbose, 0); if ((attr = ppdFindAttr(ppd, "DefaultImageableArea", NULL)) == NULL) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED DefaultImageableArea\n" " REF: Page 102, section 5.15.")); } errors ++; } else if (ppdPageSize(ppd, attr->value) == NULL && strcmp(attr->value, "Unknown")) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** Bad DefaultImageableArea %s\n" " REF: Page 102, section 5.15."), attr->value); } errors ++; } else { if (verbose > 0) _cupsLangPuts(stdout, _(" PASS DefaultImageableArea")); } if ((attr = ppdFindAttr(ppd, "DefaultPaperDimension", NULL)) == NULL) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED DefaultPaperDimension\n" " REF: Page 103, section 5.15.")); } errors ++; } else if (ppdPageSize(ppd, attr->value) == NULL && strcmp(attr->value, "Unknown")) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** Bad DefaultPaperDimension %s\n" " REF: Page 103, section 5.15."), attr->value); } errors ++; } else if (verbose > 0) _cupsLangPuts(stdout, _(" PASS DefaultPaperDimension")); for (j = 0, group = ppd->groups; j < ppd->num_groups; j ++, group ++) for (k = 0, option = group->options; k < group->num_options; k ++, option ++) { /* * Verify that we have a default choice... */ if (option->defchoice[0]) { if (ppdFindChoice(option, option->defchoice) == NULL && strcmp(option->defchoice, "Unknown")) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** Bad Default%s %s\n" " REF: Page 40, section 4.5."), option->keyword, option->defchoice); } errors ++; } else if (verbose > 0) _cupsLangPrintf(stdout, _(" PASS Default%s"), option->keyword); } else { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** REQUIRED Default%s\n" " REF: Page 40, section 4.5."), option->keyword); } errors ++; } } if ((attr = ppdFindAttr(ppd, "FileVersion", NULL)) != NULL) { for (ptr = attr->value; *ptr; ptr ++) if (!isdigit(*ptr & 255) && *ptr != '.') break; if (*ptr) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** Bad FileVersion \"%s\"\n" " REF: Page 56, section 5.3."), attr->value); } errors ++; } else if (verbose > 0) _cupsLangPuts(stdout, _(" PASS FileVersion")); } else { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED FileVersion\n" " REF: Page 56, section 5.3.")); } errors ++; } if ((attr = ppdFindAttr(ppd, "FormatVersion", NULL)) != NULL) { ptr = attr->value; if (*ptr == '4' && ptr[1] == '.') { for (ptr += 2; *ptr; ptr ++) if (!isdigit(*ptr & 255)) break; } if (*ptr) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** Bad FormatVersion \"%s\"\n" " REF: Page 56, section 5.3."), attr->value); } errors ++; } else if (verbose > 0) _cupsLangPuts(stdout, _(" PASS FormatVersion")); } else { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED FormatVersion\n" " REF: Page 56, section 5.3.")); } errors ++; } if (ppd->lang_encoding != NULL) { if (verbose > 0) _cupsLangPuts(stdout, _(" PASS LanguageEncoding")); } else if (ppdversion > 40) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED LanguageEncoding\n" " REF: Pages 56-57, section 5.3.")); } errors ++; } if (ppd->lang_version != NULL) { if (verbose > 0) _cupsLangPuts(stdout, _(" PASS LanguageVersion")); } else { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED LanguageVersion\n" " REF: Pages 57-58, section 5.3.")); } errors ++; } if (ppd->manufacturer != NULL) { if (!_cups_strncasecmp(ppd->manufacturer, "Hewlett-Packard", 15) || !_cups_strncasecmp(ppd->manufacturer, "Hewlett Packard", 15)) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** Bad Manufacturer (should be " "\"%s\")\n" " REF: Page 211, table D.1."), "HP"); } errors ++; } else if (!_cups_strncasecmp(ppd->manufacturer, "OkiData", 7) || !_cups_strncasecmp(ppd->manufacturer, "Oki Data", 8)) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** Bad Manufacturer (should be " "\"%s\")\n" " REF: Page 211, table D.1."), "Oki"); } errors ++; } else if (verbose > 0) _cupsLangPuts(stdout, _(" PASS Manufacturer")); } else if (ppdversion >= 43) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED Manufacturer\n" " REF: Pages 58-59, section 5.3.")); } errors ++; } if (ppd->modelname != NULL) { for (ptr = ppd->modelname; *ptr; ptr ++) if (!isalnum(*ptr & 255) && !strchr(" ./-+", *ptr)) break; if (*ptr) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** Bad ModelName - \"%c\" not " "allowed in string.\n" " REF: Pages 59-60, section 5.3."), *ptr); } errors ++; } else if (verbose > 0) _cupsLangPuts(stdout, _(" PASS ModelName")); } else { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED ModelName\n" " REF: Pages 59-60, section 5.3.")); } errors ++; } if (ppd->nickname != NULL) { if (verbose > 0) _cupsLangPuts(stdout, _(" PASS NickName")); } else { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED NickName\n" " REF: Page 60, section 5.3.")); } errors ++; } if (ppdFindOption(ppd, "PageSize") != NULL) { if (verbose > 0) _cupsLangPuts(stdout, _(" PASS PageSize")); } else { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED PageSize\n" " REF: Pages 99-100, section 5.14.")); } errors ++; } if (ppdFindOption(ppd, "PageRegion") != NULL) { if (verbose > 0) _cupsLangPuts(stdout, _(" PASS PageRegion")); } else { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED PageRegion\n" " REF: Page 100, section 5.14.")); } errors ++; } if (ppd->pcfilename != NULL) { if (verbose > 0) _cupsLangPuts(stdout, _(" PASS PCFileName")); } else if (!(ignore & WARN_FILENAME)) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED PCFileName\n" " REF: Pages 61-62, section 5.3.")); } errors ++; } if (ppd->product != NULL) { if (ppd->product[0] != '(' || ppd->product[strlen(ppd->product) - 1] != ')') { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** Bad Product - not \"(string)\".\n" " REF: Page 62, section 5.3.")); } errors ++; } else if (verbose > 0) _cupsLangPuts(stdout, _(" PASS Product")); } else { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED Product\n" " REF: Page 62, section 5.3.")); } errors ++; } if ((attr = ppdFindAttr(ppd, "PSVersion", NULL)) != NULL && attr->value != NULL) { char junkstr[255]; /* Temp string */ int junkint; /* Temp integer */ if (sscanf(attr->value, "(%254[^)\n])%d", junkstr, &junkint) != 2) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** Bad PSVersion - not \"(string) " "int\".\n" " REF: Pages 62-64, section 5.3.")); } errors ++; } else if (verbose > 0) _cupsLangPuts(stdout, _(" PASS PSVersion")); } else { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED PSVersion\n" " REF: Pages 62-64, section 5.3.")); } errors ++; } if (ppd->shortnickname != NULL) { if (strlen(ppd->shortnickname) > 31) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** Bad ShortNickName - longer " "than 31 chars.\n" " REF: Pages 64-65, section 5.3.")); } errors ++; } else if (verbose > 0) _cupsLangPuts(stdout, _(" PASS ShortNickName")); } else if (ppdversion >= 43) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED ShortNickName\n" " REF: Page 64-65, section 5.3.")); } errors ++; } if (ppd->patches != NULL && strchr(ppd->patches, '\"') && strstr(ppd->patches, "*End")) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** Bad JobPatchFile attribute in file\n" " REF: Page 24, section 3.4.")); } errors ++; } /* * Check for page sizes without the corresponding ImageableArea or * PaperDimension values... */ if (ppd->num_sizes == 0) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPuts(stdout, _(" **FAIL** REQUIRED PageSize\n" " REF: Page 41, section 5.\n" " REF: Page 99, section 5.14.")); } errors ++; } else { for (j = 0, size = ppd->sizes; j < ppd->num_sizes; j ++, size ++) { /* * Don't check custom size... */ if (!strcmp(size->name, "Custom")) continue; /* * Check for ImageableArea... */ if (size->left == 0.0 && size->bottom == 0.0 && size->right == 0.0 && size->top == 0.0) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** REQUIRED ImageableArea for " "PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 102, section 5.15."), size->name); } errors ++; } /* * Check for PaperDimension... */ if (size->width <= 0.0 && size->length <= 0.0) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** REQUIRED PaperDimension " "for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 103, section 5.15."), size->name); } errors ++; } } } /* * Check for valid Resolution, JCLResolution, or SetResolution values... */ if ((option = ppdFindOption(ppd, "Resolution")) == NULL) if ((option = ppdFindOption(ppd, "JCLResolution")) == NULL) option = ppdFindOption(ppd, "SetResolution"); if (option != NULL) { for (j = option->num_choices, choice = option->choices; j > 0; j --, choice ++) { /* * Verify that all resolution options are of the form NNNdpi * or NNNxNNNdpi... */ xdpi = strtol(choice->choice, (char **)&ptr, 10); if (ptr > choice->choice && xdpi > 0) { if (*ptr == 'x') ydpi = strtol(ptr + 1, (char **)&ptr, 10); else ydpi = xdpi; } else ydpi = xdpi; if (xdpi <= 0 || xdpi > 99999 || ydpi <= 0 || ydpi > 99999 || strcmp(ptr, "dpi")) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** Bad option %s choice %s\n" " REF: Page 84, section 5.9"), option->keyword, choice->choice); } errors ++; } } } if ((attr = ppdFindAttr(ppd, "1284DeviceID", NULL)) && strcmp(attr->name, "1284DeviceID")) { if (verbose >= 0) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" **FAIL** %s must be 1284DeviceID\n" " REF: Page 72, section 5.5"), attr->name); } errors ++; } errors = check_case(ppd, errors, verbose); if (!(warn & WARN_CONSTRAINTS)) errors = check_constraints(ppd, errors, verbose, 0); if (!(warn & WARN_FILTERS) && !(ignore & WARN_FILTERS)) errors = check_filters(ppd, root, errors, verbose, 0); if (!(warn & WARN_PROFILES) && !(ignore & WARN_PROFILES)) errors = check_profiles(ppd, root, errors, verbose, 0); if (!(warn & WARN_SIZES)) errors = check_sizes(ppd, errors, verbose, 0); if (!(warn & WARN_TRANSLATIONS)) errors = check_translations(ppd, errors, verbose, 0); if (!(warn & WARN_DUPLEX)) errors = check_duplex(ppd, errors, verbose, 0); if ((attr = ppdFindAttr(ppd, "cupsLanguages", NULL)) != NULL && attr->value) { /* * This file contains localizations, check for conformance of the * base translation... */ if ((attr = ppdFindAttr(ppd, "LanguageEncoding", NULL)) != NULL) { if (!attr->value || strcmp(attr->value, "ISOLatin1")) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" **FAIL** Bad LanguageEncoding %s - " "must be ISOLatin1."), attr->value ? attr->value : "(null)"); errors ++; } if (!ppd->lang_version || strcmp(ppd->lang_version, "English")) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" **FAIL** Bad LanguageVersion %s - " "must be English."), ppd->lang_version ? ppd->lang_version : "(null)"); errors ++; } /* * Loop through all options and choices... */ for (option = ppdFirstOption(ppd); option; option = ppdNextOption(ppd)) { /* * Check for special characters outside A0 to BF, F7, or F8 * that are used for languages other than English. */ for (ptr = option->text; *ptr; ptr ++) if ((*ptr & 0x80) && (*ptr & 0xe0) != 0xa0 && (*ptr & 0xff) != 0xf7 && (*ptr & 0xff) != 0xf8) break; if (*ptr) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" **FAIL** Default translation " "string for option %s contains 8-bit " "characters."), option->keyword); errors ++; } for (j = 0; j < option->num_choices; j ++) { /* * Check for special characters outside A0 to BF, F7, or F8 * that are used for languages other than English. */ for (ptr = option->choices[j].text; *ptr; ptr ++) if ((*ptr & 0x80) && (*ptr & 0xe0) != 0xa0 && (*ptr & 0xff) != 0xf7 && (*ptr & 0xff) != 0xf8) break; if (*ptr) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" **FAIL** Default translation " "string for option %s choice %s contains " "8-bit characters."), option->keyword, option->choices[j].choice); errors ++; } } } } } /* * Final pass/fail notification... */ if (errors) status = ERROR_CONFORMANCE; else if (!verbose) _cupsLangPuts(stdout, _(" PASS")); if (verbose >= 0) { check_basics(argv[i]); if (warn & WARN_DEFAULTS) errors = check_defaults(ppd, errors, verbose, 1); if (warn & WARN_CONSTRAINTS) errors = check_constraints(ppd, errors, verbose, 1); if ((warn & WARN_FILTERS) && !(ignore & WARN_FILTERS)) errors = check_filters(ppd, root, errors, verbose, 1); if ((warn & WARN_PROFILES) && !(ignore & WARN_PROFILES)) errors = check_profiles(ppd, root, errors, verbose, 1); if (warn & WARN_SIZES) errors = check_sizes(ppd, errors, verbose, 1); else errors = check_sizes(ppd, errors, verbose, 2); if (warn & WARN_TRANSLATIONS) errors = check_translations(ppd, errors, verbose, 1); if (warn & WARN_DUPLEX) errors = check_duplex(ppd, errors, verbose, 1); /* * Look for legacy duplex keywords... */ if ((option = ppdFindOption(ppd, "JCLDuplex")) == NULL) if ((option = ppdFindOption(ppd, "EFDuplex")) == NULL) option = ppdFindOption(ppd, "KD03Duplex"); if (option) _cupsLangPrintf(stdout, _(" WARN Duplex option keyword %s may not " "work as expected and should be named Duplex.\n" " REF: Page 122, section 5.17"), option->keyword); /* * Look for default keywords with no corresponding option... */ for (j = 0; j < ppd->num_attrs; j ++) { attr = ppd->attrs[j]; if (!strcmp(attr->name, "DefaultColorSpace") || !strcmp(attr->name, "DefaultColorSep") || !strcmp(attr->name, "DefaultFont") || !strcmp(attr->name, "DefaultHalftoneType") || !strcmp(attr->name, "DefaultImageableArea") || !strcmp(attr->name, "DefaultLeadingEdge") || !strcmp(attr->name, "DefaultOutputOrder") || !strcmp(attr->name, "DefaultPaperDimension") || !strcmp(attr->name, "DefaultResolution") || !strcmp(attr->name, "DefaultScreenProc") || !strcmp(attr->name, "DefaultTransfer")) continue; if (!strncmp(attr->name, "Default", 7) && !ppdFindOption(ppd, attr->name + 7)) _cupsLangPrintf(stdout, _(" WARN %s has no corresponding " "options."), attr->name); } if (ppdversion < 43) { _cupsLangPrintf(stdout, _(" WARN Obsolete PPD version %.1f.\n" " REF: Page 42, section 5.2."), 0.1f * ppdversion); } if (!ppd->lang_encoding && ppdversion < 41) { _cupsLangPuts(stdout, _(" WARN LanguageEncoding required by PPD " "4.3 spec.\n" " REF: Pages 56-57, section 5.3.")); } if (!ppd->manufacturer && ppdversion < 43) { _cupsLangPuts(stdout, _(" WARN Manufacturer required by PPD " "4.3 spec.\n" " REF: Pages 58-59, section 5.3.")); } /* * Treat a PCFileName attribute longer than 12 characters as * a warning and not a hard error... */ if (!(ignore & WARN_FILENAME) && ppd->pcfilename) { if (strlen(ppd->pcfilename) > 12) { _cupsLangPuts(stdout, _(" WARN PCFileName longer than 8.3 in " "violation of PPD spec.\n" " REF: Pages 61-62, section " "5.3.")); } if (!_cups_strcasecmp(ppd->pcfilename, "unused.ppd")) _cupsLangPuts(stdout, _(" WARN PCFileName should contain a " "unique filename.\n" " REF: Pages 61-62, section " "5.3.")); } if (!ppd->shortnickname && ppdversion < 43) { _cupsLangPuts(stdout, _(" WARN ShortNickName required by PPD " "4.3 spec.\n" " REF: Pages 64-65, section 5.3.")); } /* * Check the Protocols line and flag PJL + BCP since TBCP is * usually used with PJL... */ if (ppd->protocols) { if (strstr(ppd->protocols, "PJL") && strstr(ppd->protocols, "BCP") && !strstr(ppd->protocols, "TBCP")) { _cupsLangPuts(stdout, _(" WARN Protocols contains both PJL " "and BCP; expected TBCP.\n" " REF: Pages 78-79, section 5.7.")); } if (strstr(ppd->protocols, "PJL") && (!ppd->jcl_begin || !ppd->jcl_end || !ppd->jcl_ps)) { _cupsLangPuts(stdout, _(" WARN Protocols contains PJL but JCL " "attributes are not set.\n" " REF: Pages 78-79, section 5.7.")); } } /* * Check for options with a common prefix, e.g. Duplex and Duplexer, * which are errors according to the spec but won't cause problems * with CUPS specifically... */ for (j = 0, group = ppd->groups; j < ppd->num_groups; j ++, group ++) for (k = 0, option = group->options; k < group->num_options; k ++, option ++) { len = strlen(option->keyword); for (m = 0, group2 = ppd->groups; m < ppd->num_groups; m ++, group2 ++) for (n = 0, option2 = group2->options; n < group2->num_options; n ++, option2 ++) if (option != option2 && len < strlen(option2->keyword) && !strncmp(option->keyword, option2->keyword, len)) { _cupsLangPrintf(stdout, _(" WARN %s shares a common " "prefix with %s\n" " REF: Page 15, section " "3.2."), option->keyword, option2->keyword); } } } if (verbose > 0) { if (errors) _cupsLangPrintf(stdout, _(" %d ERRORS FOUND"), errors); else _cupsLangPuts(stdout, _(" NO ERRORS FOUND")); } /* * Then list the options, if "-v" was provided... */ if (verbose > 1) { _cupsLangPrintf(stdout, "\n" " language_level = %d\n" " color_device = %s\n" " variable_sizes = %s\n" " landscape = %d", ppd->language_level, ppd->color_device ? "TRUE" : "FALSE", ppd->variable_sizes ? "TRUE" : "FALSE", ppd->landscape); switch (ppd->colorspace) { case PPD_CS_CMYK : _cupsLangPuts(stdout, " colorspace = PPD_CS_CMYK"); break; case PPD_CS_CMY : _cupsLangPuts(stdout, " colorspace = PPD_CS_CMY"); break; case PPD_CS_GRAY : _cupsLangPuts(stdout, " colorspace = PPD_CS_GRAY"); break; case PPD_CS_RGB : _cupsLangPuts(stdout, " colorspace = PPD_CS_RGB"); break; default : _cupsLangPuts(stdout, " colorspace = "); break; } _cupsLangPrintf(stdout, " num_emulations = %d", ppd->num_emulations); for (j = 0; j < ppd->num_emulations; j ++) _cupsLangPrintf(stdout, " emulations[%d] = %s", j, ppd->emulations[j].name); _cupsLangPrintf(stdout, " lang_encoding = %s", ppd->lang_encoding); _cupsLangPrintf(stdout, " lang_version = %s", ppd->lang_version); _cupsLangPrintf(stdout, " modelname = %s", ppd->modelname); _cupsLangPrintf(stdout, " ttrasterizer = %s", ppd->ttrasterizer == NULL ? "None" : ppd->ttrasterizer); _cupsLangPrintf(stdout, " manufacturer = %s", ppd->manufacturer); _cupsLangPrintf(stdout, " product = %s", ppd->product); _cupsLangPrintf(stdout, " nickname = %s", ppd->nickname); _cupsLangPrintf(stdout, " shortnickname = %s", ppd->shortnickname); _cupsLangPrintf(stdout, " patches = %d bytes", ppd->patches == NULL ? 0 : (int)strlen(ppd->patches)); _cupsLangPrintf(stdout, " num_groups = %d", ppd->num_groups); for (j = 0, group = ppd->groups; j < ppd->num_groups; j ++, group ++) { _cupsLangPrintf(stdout, " group[%d] = %s", j, group->text); for (k = 0, option = group->options; k < group->num_options; k ++, option ++) { _cupsLangPrintf(stdout, " options[%d] = %s (%s) %s %s %.0f " "(%d choices)", k, option->keyword, option->text, uis[option->ui], sections[option->section], option->order, option->num_choices); if (!strcmp(option->keyword, "PageSize") || !strcmp(option->keyword, "PageRegion")) { for (m = option->num_choices, choice = option->choices; m > 0; m --, choice ++) { size = ppdPageSize(ppd, choice->choice); if (size == NULL) _cupsLangPrintf(stdout, " %s (%s) = ERROR%s", choice->choice, choice->text, !strcmp(option->defchoice, choice->choice) ? " *" : ""); else _cupsLangPrintf(stdout, " %s (%s) = %.2fx%.2fin " "(%.1f,%.1f,%.1f,%.1f)%s", choice->choice, choice->text, size->width / 72.0, size->length / 72.0, size->left / 72.0, size->bottom / 72.0, size->right / 72.0, size->top / 72.0, !strcmp(option->defchoice, choice->choice) ? " *" : ""); } } else { for (m = option->num_choices, choice = option->choices; m > 0; m --, choice ++) { _cupsLangPrintf(stdout, " %s (%s)%s", choice->choice, choice->text, !strcmp(option->defchoice, choice->choice) ? " *" : ""); } } } } _cupsLangPrintf(stdout, " num_consts = %d", ppd->num_consts); for (j = 0; j < ppd->num_consts; j ++) _cupsLangPrintf(stdout, " consts[%d] = *%s %s *%s %s", j, ppd->consts[j].option1, ppd->consts[j].choice1, ppd->consts[j].option2, ppd->consts[j].choice2); _cupsLangPrintf(stdout, " num_profiles = %d", ppd->num_profiles); for (j = 0; j < ppd->num_profiles; j ++) _cupsLangPrintf(stdout, " profiles[%d] = %s/%s %.3f %.3f " "[ %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f ]", 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]); _cupsLangPrintf(stdout, " num_fonts = %d", ppd->num_fonts); for (j = 0; j < ppd->num_fonts; j ++) _cupsLangPrintf(stdout, " fonts[%d] = %s", j, ppd->fonts[j]); _cupsLangPrintf(stdout, " num_attrs = %d", ppd->num_attrs); for (j = 0; j < ppd->num_attrs; j ++) _cupsLangPrintf(stdout, " attrs[%d] = %s %s%s%s: \"%s\"", j, ppd->attrs[j]->name, ppd->attrs[j]->spec, ppd->attrs[j]->text[0] ? "/" : "", ppd->attrs[j]->text, ppd->attrs[j]->value ? ppd->attrs[j]->value : "(null)"); } ppdClose(ppd); } if (!files) usage(); return (status); } /* * 'check_basics()' - Check for CR LF, mixed line endings, and blank lines. */ static void check_basics(const char *filename) /* I - PPD file to check */ { cups_file_t *fp; /* File pointer */ int ch; /* Current character */ int col, /* Current column */ whitespace; /* Only seen whitespace? */ int eol; /* Line endings */ int linenum; /* Line number */ int mixed; /* Mixed line endings? */ if ((fp = cupsFileOpen(filename, "r")) == NULL) return; linenum = 1; col = 0; eol = EOL_NONE; mixed = 0; whitespace = 1; while ((ch = cupsFileGetChar(fp)) != EOF) { if (ch == '\r' || ch == '\n') { if (ch == '\n') { if (eol == EOL_NONE) eol = EOL_LF; else if (eol != EOL_LF) mixed = 1; } else if (ch == '\r') { if (cupsFilePeekChar(fp) == '\n') { cupsFileGetChar(fp); if (eol == EOL_NONE) eol = EOL_CRLF; else if (eol != EOL_CRLF) mixed = 1; } else if (eol == EOL_NONE) eol = EOL_CR; else if (eol != EOL_CR) mixed = 1; } if (col > 0 && whitespace) _cupsLangPrintf(stdout, _(" WARN Line %d only contains whitespace."), linenum); linenum ++; col = 0; whitespace = 1; } else { if (ch != ' ' && ch != '\t') whitespace = 0; col ++; } } if (mixed) _cupsLangPuts(stdout, _(" WARN File contains a mix of CR, LF, and " "CR LF line endings.")); if (eol == EOL_CRLF) _cupsLangPuts(stdout, _(" WARN Non-Windows PPD files should use lines " "ending with only LF, not CR LF.")); cupsFileClose(fp); } /* * 'check_constraints()' - Check UIConstraints in the PPD file. */ static int /* O - Errors found */ check_constraints(ppd_file_t *ppd, /* I - PPD file */ int errors, /* I - Errors found */ int verbose, /* I - Verbosity level */ int warn) /* I - Warnings only? */ { int i; /* Looping var */ const char *prefix; /* WARN/FAIL prefix */ ppd_const_t *c; /* Current UIConstraints data */ ppd_attr_t *constattr; /* Current cupsUIConstraints attribute */ const char *vptr; /* Pointer into constraint value */ char option[PPD_MAX_NAME], /* Option name/MainKeyword */ choice[PPD_MAX_NAME], /* Choice/OptionKeyword */ *ptr; /* Pointer into option or choice */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ ppd_option_t *o; /* PPD option */ prefix = warn ? " WARN " : "**FAIL**"; /* * See what kind of constraint data we have in the PPD... */ if ((constattr = ppdFindAttr(ppd, "cupsUIConstraints", NULL)) != NULL) { /* * Check new-style cupsUIConstraints data... */ for (; constattr; constattr = ppdFindNextAttr(ppd, "cupsUIConstraints", NULL)) { if (!constattr->value) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s Empty cupsUIConstraints %s"), prefix, constattr->spec); if (!warn) errors ++; continue; } for (i = 0, vptr = strchr(constattr->value, '*'); vptr; i ++, vptr = strchr(vptr + 1, '*')); if (i == 0) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s Bad cupsUIConstraints %s: \"%s\""), prefix, constattr->spec, constattr->value); if (!warn) errors ++; continue; } cupsArraySave(ppd->sorted_attrs); if (constattr->spec[0] && !ppdFindAttr(ppd, "cupsUIResolver", constattr->spec)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s Missing cupsUIResolver %s"), prefix, constattr->spec); if (!warn) errors ++; } cupsArrayRestore(ppd->sorted_attrs); num_options = 0; options = NULL; for (vptr = strchr(constattr->value, '*'); vptr; vptr = strchr(vptr, '*')) { /* * Extract "*Option Choice" or just "*Option"... */ for (vptr ++, ptr = option; *vptr && !isspace(*vptr & 255); vptr ++) if (ptr < (option + sizeof(option) - 1)) *ptr++ = *vptr; *ptr = '\0'; while (isspace(*vptr & 255)) vptr ++; if (*vptr == '*') choice[0] = '\0'; else { for (ptr = choice; *vptr && !isspace(*vptr & 255); vptr ++) if (ptr < (choice + sizeof(choice) - 1)) *ptr++ = *vptr; *ptr = '\0'; } if (!_cups_strncasecmp(option, "Custom", 6) && !_cups_strcasecmp(choice, "True")) { _cups_strcpy(option, option + 6); strlcpy(choice, "Custom", sizeof(choice)); } if ((o = ppdFindOption(ppd, option)) == NULL) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s Missing option %s in " "cupsUIConstraints %s: \"%s\""), prefix, option, constattr->spec, constattr->value); if (!warn) errors ++; continue; } if (choice[0] && !ppdFindChoice(o, choice)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s Missing choice *%s %s in " "cupsUIConstraints %s: \"%s\""), prefix, option, choice, constattr->spec, constattr->value); if (!warn) errors ++; continue; } if (choice[0]) num_options = cupsAddOption(option, choice, num_options, &options); else { for (i = 0; i < o->num_choices; i ++) if (_cups_strcasecmp(o->choices[i].choice, "None") && _cups_strcasecmp(o->choices[i].choice, "Off") && _cups_strcasecmp(o->choices[i].choice, "False")) { num_options = cupsAddOption(option, o->choices[i].choice, num_options, &options); break; } } } /* * Resolvers must list at least two options... */ if (num_options < 2) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s cupsUIResolver %s does not list at least " "two different options."), prefix, constattr->spec); if (!warn) errors ++; } /* * Test the resolver... */ if (!cupsResolveConflicts(ppd, NULL, NULL, &num_options, &options)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s cupsUIResolver %s causes a loop."), prefix, constattr->spec); if (!warn) errors ++; } cupsFreeOptions(num_options, options); } } else { /* * Check old-style [Non]UIConstraints data... */ for (i = ppd->num_consts, c = ppd->consts; i > 0; i --, c ++) { if (!_cups_strncasecmp(c->option1, "Custom", 6) && !_cups_strcasecmp(c->choice1, "True")) { strlcpy(option, c->option1 + 6, sizeof(option)); strlcpy(choice, "Custom", sizeof(choice)); } else { strlcpy(option, c->option1, sizeof(option)); strlcpy(choice, c->choice1, sizeof(choice)); } if ((o = ppdFindOption(ppd, option)) == NULL) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s Missing option %s in " "UIConstraints \"*%s %s *%s %s\"."), prefix, c->option1, c->option1, c->choice1, c->option2, c->choice2); if (!warn) errors ++; } else if (choice[0] && !ppdFindChoice(o, choice)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s Missing choice *%s %s in " "UIConstraints \"*%s %s *%s %s\"."), prefix, c->option1, c->choice1, c->option1, c->choice1, c->option2, c->choice2); if (!warn) errors ++; } if (!_cups_strncasecmp(c->option2, "Custom", 6) && !_cups_strcasecmp(c->choice2, "True")) { strlcpy(option, c->option2 + 6, sizeof(option)); strlcpy(choice, "Custom", sizeof(choice)); } else { strlcpy(option, c->option2, sizeof(option)); strlcpy(choice, c->choice2, sizeof(choice)); } if ((o = ppdFindOption(ppd, option)) == NULL) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s Missing option %s in " "UIConstraints \"*%s %s *%s %s\"."), prefix, c->option2, c->option1, c->choice1, c->option2, c->choice2); if (!warn) errors ++; } else if (choice[0] && !ppdFindChoice(o, choice)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s Missing choice *%s %s in " "UIConstraints \"*%s %s *%s %s\"."), prefix, c->option2, c->choice2, c->option1, c->choice1, c->option2, c->choice2); if (!warn) errors ++; } } } return (errors); } /* * 'check_case()' - Check that there are no duplicate groups, options, * or choices that differ only by case. */ static int /* O - Errors found */ check_case(ppd_file_t *ppd, /* I - PPD file */ int errors, /* I - Errors found */ int verbose) /* I - Verbosity level */ { int i, j; /* Looping vars */ ppd_group_t *groupa, /* First group */ *groupb; /* Second group */ ppd_option_t *optiona, /* First option */ *optionb; /* Second option */ ppd_choice_t *choicea, /* First choice */ *choiceb; /* Second choice */ /* * Check that the groups do not have any duplicate names... */ for (i = ppd->num_groups, groupa = ppd->groups; i > 1; i --, groupa ++) for (j = i - 1, groupb = groupa + 1; j > 0; j --, groupb ++) if (!_cups_strcasecmp(groupa->name, groupb->name)) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" **FAIL** Group names %s and %s differ only " "by case."), groupa->name, groupb->name); errors ++; } /* * Check that the options do not have any duplicate names... */ for (optiona = ppdFirstOption(ppd); optiona; optiona = ppdNextOption(ppd)) { cupsArraySave(ppd->options); for (optionb = ppdNextOption(ppd); optionb; optionb = ppdNextOption(ppd)) if (!_cups_strcasecmp(optiona->keyword, optionb->keyword)) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" **FAIL** Option names %s and %s differ only " "by case."), optiona->keyword, optionb->keyword); errors ++; } cupsArrayRestore(ppd->options); /* * Then the choices... */ for (i = optiona->num_choices, choicea = optiona->choices; i > 1; i --, choicea ++) for (j = i - 1, choiceb = choicea + 1; j > 0; j --, choiceb ++) if (!strcmp(choicea->choice, choiceb->choice)) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" **FAIL** Multiple occurrences of " "option %s choice name %s."), optiona->keyword, choicea->choice); errors ++; choicea ++; i --; break; } else if (!_cups_strcasecmp(choicea->choice, choiceb->choice)) { if (!errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" **FAIL** Option %s choice names %s and " "%s differ only by case."), optiona->keyword, choicea->choice, choiceb->choice); errors ++; } } /* * Return the number of errors found... */ return (errors); } /* * 'check_defaults()' - Check default option keywords in the PPD file. */ static int /* O - Errors found */ check_defaults(ppd_file_t *ppd, /* I - PPD file */ int errors, /* I - Errors found */ int verbose, /* I - Verbosity level */ int warn) /* I - Warnings only? */ { int j, k; /* Looping vars */ ppd_attr_t *attr; /* PPD attribute */ ppd_option_t *option; /* Standard UI option */ const char *prefix; /* WARN/FAIL prefix */ prefix = warn ? " WARN " : "**FAIL**"; ppdMarkDefaults(ppd); if (ppdConflicts(ppd)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Default choices conflicting."), prefix); show_conflicts(ppd, prefix); if (!warn) errors ++; } for (j = 0; j < ppd->num_attrs; j ++) { attr = ppd->attrs[j]; if (!strcmp(attr->name, "DefaultColorSpace") || !strcmp(attr->name, "DefaultFont") || !strcmp(attr->name, "DefaultHalftoneType") || !strcmp(attr->name, "DefaultImageableArea") || !strcmp(attr->name, "DefaultLeadingEdge") || !strcmp(attr->name, "DefaultOutputOrder") || !strcmp(attr->name, "DefaultPaperDimension") || !strcmp(attr->name, "DefaultResolution") || !strcmp(attr->name, "DefaultTransfer")) continue; if (!strncmp(attr->name, "Default", 7)) { if ((option = ppdFindOption(ppd, attr->name + 7)) != NULL && strcmp(attr->value, "Unknown")) { /* * Check that the default option value matches a choice... */ for (k = 0; k < option->num_choices; k ++) if (!strcmp(option->choices[k].choice, attr->value)) break; if (k >= option->num_choices) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s %s %s does not exist."), prefix, attr->name, attr->value); if (!warn) errors ++; } } } } return (errors); } /* * 'check_duplex()' - Check duplex keywords in the PPD file. */ static int /* O - Errors found */ check_duplex(ppd_file_t *ppd, /* I - PPD file */ int errors, /* I - Error found */ int verbose, /* I - Verbosity level */ int warn) /* I - Warnings only? */ { int i; /* Looping var */ ppd_option_t *option; /* PPD option */ ppd_choice_t *choice; /* Current choice */ const char *prefix; /* Message prefix */ prefix = warn ? " WARN " : "**FAIL**"; /* * Check for a duplex option, and for standard values... */ if ((option = ppdFindOption(ppd, "Duplex")) != NULL) { if (!ppdFindChoice(option, "None")) { if (verbose >= 0) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s REQUIRED %s does not define " "choice None.\n" " REF: Page 122, section 5.17"), prefix, option->keyword); } if (!warn) errors ++; } for (i = option->num_choices, choice = option->choices; i > 0; i --, choice ++) if (strcmp(choice->choice, "None") && strcmp(choice->choice, "DuplexNoTumble") && strcmp(choice->choice, "DuplexTumble") && strcmp(choice->choice, "SimplexTumble")) { if (verbose >= 0) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); _cupsLangPrintf(stdout, _(" %s Bad %s choice %s.\n" " REF: Page 122, section 5.17"), prefix, option->keyword, choice->choice); } if (!warn) errors ++; } } return (errors); } /* * 'check_filters()' - Check filters in the PPD file. */ static int /* O - Errors found */ check_filters(ppd_file_t *ppd, /* I - PPD file */ const char *root, /* I - Root directory */ int errors, /* I - Errors found */ int verbose, /* I - Verbosity level */ int warn) /* I - Warnings only? */ { ppd_attr_t *attr; /* PPD attribute */ const char *ptr; /* Pointer into string */ char super[16], /* Super-type for filter */ type[256], /* Type for filter */ dstsuper[16], /* Destination super-type for filter */ dsttype[256], /* Destination type for filter */ program[1024], /* Program/filter name */ pathprog[1024]; /* Complete path to program/filter */ int cost; /* Cost of filter */ const char *prefix; /* WARN/FAIL prefix */ struct stat fileinfo; /* File information */ prefix = warn ? " WARN " : "**FAIL**"; /* * cupsFilter */ for (attr = ppdFindAttr(ppd, "cupsFilter", NULL); attr; attr = ppdFindNextAttr(ppd, "cupsFilter", NULL)) { if (strcmp(attr->name, "cupsFilter")) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad spelling of %s - should be %s."), prefix, attr->name, "cupsFilter"); if (!warn) errors ++; } if (!attr->value || sscanf(attr->value, "%15[^/]/%255s%d%*[ \t]%1023[^\n]", super, type, &cost, program) != 4) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad cupsFilter value \"%s\"."), prefix, attr->value); if (!warn) errors ++; continue; } if (!strncmp(program, "maxsize(", 8)) { char *mptr; /* Pointer into maxsize(nnnn) program */ strtoll(program + 8, &mptr, 10); if (*mptr != ')') { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad cupsFilter value \"%s\"."), prefix, attr->value); if (!warn) errors ++; continue; } mptr ++; while (_cups_isspace(*mptr)) mptr ++; _cups_strcpy(program, mptr); } if (strcmp(program, "-")) { if (program[0] == '/') snprintf(pathprog, sizeof(pathprog), "%s%s", root, program); else { if ((ptr = getenv("CUPS_SERVERBIN")) == NULL) ptr = CUPS_SERVERBIN; if (*ptr == '/' || !*root) snprintf(pathprog, sizeof(pathprog), "%s%s/filter/%s", root, ptr, program); else snprintf(pathprog, sizeof(pathprog), "%s/%s/filter/%s", root, ptr, program); } if (stat(pathprog, &fileinfo)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing %s file \"%s\"."), prefix, "cupsFilter", pathprog); if (!warn) errors ++; } else if (fileinfo.st_uid != 0 || (fileinfo.st_mode & MODE_WRITE) || (fileinfo.st_mode & MODE_MASK) != MODE_PROGRAM) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad permissions on %s file \"%s\"."), prefix, "cupsFilter", pathprog); if (!warn) errors ++; } else errors = valid_path("cupsFilter", pathprog, errors, verbose, warn); } } /* * cupsFilter2 */ for (attr = ppdFindAttr(ppd, "cupsFilter2", NULL); attr; attr = ppdFindNextAttr(ppd, "cupsFilter2", NULL)) { if (strcmp(attr->name, "cupsFilter2")) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad spelling of %s - should be %s."), prefix, attr->name, "cupsFilter2"); if (!warn) errors ++; } if (!attr->value || sscanf(attr->value, "%15[^/]/%255s%*[ \t]%15[^/]/%255s%d%*[ \t]%1023[^\n]", super, type, dstsuper, dsttype, &cost, program) != 6) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad cupsFilter2 value \"%s\"."), prefix, attr->value); if (!warn) errors ++; continue; } if (!strncmp(program, "maxsize(", 8)) { char *mptr; /* Pointer into maxsize(nnnn) program */ strtoll(program + 8, &mptr, 10); if (*mptr != ')') { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad cupsFilter2 value \"%s\"."), prefix, attr->value); if (!warn) errors ++; continue; } mptr ++; while (_cups_isspace(*mptr)) mptr ++; _cups_strcpy(program, mptr); } if (strcmp(program, "-")) { if (strncmp(program, "maxsize(", 8) && (ptr = strchr(program + 8, ')')) != NULL) { ptr ++; while (_cups_isspace(*ptr)) ptr ++; _cups_strcpy(program, ptr); } if (program[0] == '/') snprintf(pathprog, sizeof(pathprog), "%s%s", root, program); else { if ((ptr = getenv("CUPS_SERVERBIN")) == NULL) ptr = CUPS_SERVERBIN; if (*ptr == '/' || !*root) snprintf(pathprog, sizeof(pathprog), "%s%s/filter/%s", root, ptr, program); else snprintf(pathprog, sizeof(pathprog), "%s/%s/filter/%s", root, ptr, program); } if (stat(pathprog, &fileinfo)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing %s file \"%s\"."), prefix, "cupsFilter2", pathprog); if (!warn) errors ++; } else if (fileinfo.st_uid != 0 || (fileinfo.st_mode & MODE_WRITE) || (fileinfo.st_mode & MODE_MASK) != MODE_PROGRAM) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad permissions on %s file \"%s\"."), prefix, "cupsFilter2", pathprog); if (!warn) errors ++; } else errors = valid_path("cupsFilter2", pathprog, errors, verbose, warn); } } /* * cupsPreFilter */ for (attr = ppdFindAttr(ppd, "cupsPreFilter", NULL); attr; attr = ppdFindNextAttr(ppd, "cupsPreFilter", NULL)) { if (strcmp(attr->name, "cupsPreFilter")) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad spelling of %s - should be %s."), prefix, attr->name, "cupsPreFilter"); if (!warn) errors ++; } if (!attr->value || sscanf(attr->value, "%15[^/]/%255s%d%*[ \t]%1023[^\n]", super, type, &cost, program) != 4) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad cupsPreFilter value \"%s\"."), prefix, attr->value ? attr->value : ""); if (!warn) errors ++; } else if (strcmp(program, "-")) { if (program[0] == '/') snprintf(pathprog, sizeof(pathprog), "%s%s", root, program); else { if ((ptr = getenv("CUPS_SERVERBIN")) == NULL) ptr = CUPS_SERVERBIN; if (*ptr == '/' || !*root) snprintf(pathprog, sizeof(pathprog), "%s%s/filter/%s", root, ptr, program); else snprintf(pathprog, sizeof(pathprog), "%s/%s/filter/%s", root, ptr, program); } if (stat(pathprog, &fileinfo)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing %s file \"%s\"."), prefix, "cupsPreFilter", pathprog); if (!warn) errors ++; } else if (fileinfo.st_uid != 0 || (fileinfo.st_mode & MODE_WRITE) || (fileinfo.st_mode & MODE_MASK) != MODE_PROGRAM) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad permissions on %s file \"%s\"."), prefix, "cupsPreFilter", pathprog); if (!warn) errors ++; } else errors = valid_path("cupsPreFilter", pathprog, errors, verbose, warn); } } #ifdef __APPLE__ /* * APDialogExtension */ for (attr = ppdFindAttr(ppd, "APDialogExtension", NULL); attr != NULL; attr = ppdFindNextAttr(ppd, "APDialogExtension", NULL)) { if (strcmp(attr->name, "APDialogExtension")) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad spelling of %s - should be %s."), prefix, attr->name, "APDialogExtension"); if (!warn) errors ++; } snprintf(pathprog, sizeof(pathprog), "%s%s", root, attr->value ? attr->value : "(null)"); if (!attr->value || stat(pathprog, &fileinfo)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing %s file \"%s\"."), prefix, "APDialogExtension", pathprog); if (!warn) errors ++; } else if (fileinfo.st_uid != 0 || (fileinfo.st_mode & MODE_WRITE) || (fileinfo.st_mode & MODE_MASK) != MODE_DIRECTORY) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad permissions on %s file \"%s\"."), prefix, "APDialogExtension", pathprog); if (!warn) errors ++; } else errors = valid_path("APDialogExtension", pathprog, errors, verbose, warn); } /* * APPrinterIconPath */ if ((attr = ppdFindAttr(ppd, "APPrinterIconPath", NULL)) != NULL) { if (strcmp(attr->name, "APPrinterIconPath")) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad spelling of %s - should be %s."), prefix, attr->name, "APPrinterIconPath"); if (!warn) errors ++; } snprintf(pathprog, sizeof(pathprog), "%s%s", root, attr->value ? attr->value : "(null)"); if (!attr->value || stat(pathprog, &fileinfo)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing %s file \"%s\"."), prefix, "APPrinterIconPath", pathprog); if (!warn) errors ++; } else if (fileinfo.st_uid != 0 || (fileinfo.st_mode & MODE_WRITE) || (fileinfo.st_mode & MODE_MASK) != MODE_DATAFILE) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad permissions on %s file \"%s\"."), prefix, "APPrinterIconPath", pathprog); if (!warn) errors ++; } else errors = valid_path("APPrinterIconPath", pathprog, errors, verbose, warn); } /* * APPrinterLowInkTool */ if ((attr = ppdFindAttr(ppd, "APPrinterLowInkTool", NULL)) != NULL) { if (strcmp(attr->name, "APPrinterLowInkTool")) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad spelling of %s - should be %s."), prefix, attr->name, "APPrinterLowInkTool"); if (!warn) errors ++; } snprintf(pathprog, sizeof(pathprog), "%s%s", root, attr->value ? attr->value : "(null)"); if (!attr->value || stat(pathprog, &fileinfo)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing %s file \"%s\"."), prefix, "APPrinterLowInkTool", pathprog); if (!warn) errors ++; } else if (fileinfo.st_uid != 0 || (fileinfo.st_mode & MODE_WRITE) || (fileinfo.st_mode & MODE_MASK) != MODE_DIRECTORY) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad permissions on %s file \"%s\"."), prefix, "APPrinterLowInkTool", pathprog); if (!warn) errors ++; } else errors = valid_path("APPrinterLowInkTool", pathprog, errors, verbose, warn); } /* * APPrinterUtilityPath */ if ((attr = ppdFindAttr(ppd, "APPrinterUtilityPath", NULL)) != NULL) { if (strcmp(attr->name, "APPrinterUtilityPath")) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad spelling of %s - should be %s."), prefix, attr->name, "APPrinterUtilityPath"); if (!warn) errors ++; } snprintf(pathprog, sizeof(pathprog), "%s%s", root, attr->value ? attr->value : "(null)"); if (!attr->value || stat(pathprog, &fileinfo)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing %s file \"%s\"."), prefix, "APPrinterUtilityPath", pathprog); if (!warn) errors ++; } else if (fileinfo.st_uid != 0 || (fileinfo.st_mode & MODE_WRITE) || (fileinfo.st_mode & MODE_MASK) != MODE_DIRECTORY) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad permissions on %s file \"%s\"."), prefix, "APPrinterUtilityPath", pathprog); if (!warn) errors ++; } else errors = valid_path("APPrinterUtilityPath", pathprog, errors, verbose, warn); } /* * APScanAppBundleID and APScanAppPath */ if ((attr = ppdFindAttr(ppd, "APScanAppPath", NULL)) != NULL) { if (strcmp(attr->name, "APScanAppPath")) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad spelling of %s - should be %s."), prefix, attr->name, "APScanAppPath"); if (!warn) errors ++; } if (!attr->value || stat(attr->value, &fileinfo)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing %s file \"%s\"."), prefix, "APScanAppPath", attr->value ? attr->value : ""); if (!warn) errors ++; } else if (fileinfo.st_uid != 0 || (fileinfo.st_mode & MODE_WRITE) || (fileinfo.st_mode & MODE_MASK) != MODE_DIRECTORY) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad permissions on %s file \"%s\"."), prefix, "APScanAppPath", attr->value); if (!warn) errors ++; } else errors = valid_path("APScanAppPath", attr->value, errors, verbose, warn); if (ppdFindAttr(ppd, "APScanAppBundleID", NULL)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Cannot provide both " "APScanAppPath and APScanAppBundleID."), prefix); if (!warn) errors ++; } } #endif /* __APPLE__ */ return (errors); } /* * 'check_profiles()' - Check ICC color profiles in the PPD file. */ static int /* O - Errors found */ check_profiles(ppd_file_t *ppd, /* I - PPD file */ const char *root, /* I - Root directory */ int errors, /* I - Errors found */ int verbose, /* I - Verbosity level */ int warn) /* I - Warnings only? */ { int i; /* Looping var */ ppd_attr_t *attr; /* PPD attribute */ const char *ptr; /* Pointer into string */ const char *prefix; /* WARN/FAIL prefix */ char filename[1024]; /* Profile filename */ struct stat fileinfo; /* File information */ int num_profiles = 0; /* Number of profiles */ unsigned hash, /* Current hash value */ hashes[1000]; /* Hash values of profile names */ const char *specs[1000]; /* Specifiers for profiles */ prefix = warn ? " WARN " : "**FAIL**"; for (attr = ppdFindAttr(ppd, "cupsICCProfile", NULL); attr; attr = ppdFindNextAttr(ppd, "cupsICCProfile", NULL)) { /* * Check for valid selector... */ for (i = 0, ptr = strchr(attr->spec, '.'); ptr; ptr = strchr(ptr + 1, '.')) i ++; if (!attr->value || i < 2) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad cupsICCProfile %s."), prefix, attr->spec); if (!warn) errors ++; continue; } /* * Check for valid profile filename... */ if (attr->value[0] == '/') snprintf(filename, sizeof(filename), "%s%s", root, attr->value); else { if ((ptr = getenv("CUPS_DATADIR")) == NULL) ptr = CUPS_DATADIR; if (*ptr == '/' || !*root) snprintf(filename, sizeof(filename), "%s%s/profiles/%s", root, ptr, attr->value); else snprintf(filename, sizeof(filename), "%s/%s/profiles/%s", root, ptr, attr->value); } if (stat(filename, &fileinfo)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing %s file \"%s\"."), prefix, "cupsICCProfile", filename); if (!warn) errors ++; } else if (fileinfo.st_uid != 0 || (fileinfo.st_mode & MODE_WRITE) || (fileinfo.st_mode & MODE_MASK) != MODE_DATAFILE) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad permissions on %s file \"%s\"."), prefix, "cupsICCProfile", filename); if (!warn) errors ++; } else errors = valid_path("cupsICCProfile", filename, errors, verbose, warn); /* * Check for hash collisions... */ hash = _ppdHashName(attr->spec); if (num_profiles > 0) { for (i = 0; i < num_profiles; i ++) if (hashes[i] == hash) break; if (i < num_profiles) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s cupsICCProfile %s hash value " "collides with %s."), prefix, attr->spec, specs[i]); if (!warn) errors ++; } } /* * Remember up to 1000 profiles... */ if (num_profiles < 1000) { hashes[num_profiles] = hash; specs[num_profiles] = attr->spec; num_profiles ++; } } return (errors); } /* * 'check_sizes()' - Check media sizes in the PPD file. */ static int /* O - Errors found */ check_sizes(ppd_file_t *ppd, /* I - PPD file */ int errors, /* I - Errors found */ int verbose, /* I - Verbosity level */ int warn) /* I - Warnings only? */ { int i; /* Looping var */ ppd_size_t *size; /* Current size */ int width, /* Custom width */ length; /* Custom length */ const char *prefix; /* WARN/FAIL prefix */ ppd_option_t *page_size, /* PageSize option */ *page_region; /* PageRegion option */ pwg_media_t *pwg_media; /* PWG media */ char buf[PPD_MAX_NAME]; /* PapeSize name that is supposed to be */ const char *ptr; /* Pointer into string */ int width_2540ths, /* PageSize width in 2540ths */ length_2540ths; /* PageSize length in 2540ths */ int is_ok; /* Flag for PageSize name verification */ double width_tmp, /* Width after rounded up */ length_tmp, /* Length after rounded up */ width_inch, /* Width in inches */ length_inch, /* Length in inches */ width_mm, /* Width in millimeters */ length_mm; /* Length in millimeters */ prefix = warn ? " WARN " : "**FAIL**"; if ((page_size = ppdFindOption(ppd, "PageSize")) == NULL && warn != 2) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing REQUIRED PageSize option.\n" " REF: Page 99, section 5.14."), prefix); if (!warn) errors ++; } if ((page_region = ppdFindOption(ppd, "PageRegion")) == NULL && warn != 2) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing REQUIRED PageRegion option.\n" " REF: Page 100, section 5.14."), prefix); if (!warn) errors ++; } for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++) { /* * Check that the size name is standard... */ if (!strcmp(size->name, "Custom")) { /* * Skip custom page size... */ continue; } if (warn != 2 && size->name[0] == 'w' && sscanf(size->name, "w%dh%d", &width, &length) == 2) { /* * Validate device-specific size wNNNhNNN should have proper width and * length... */ if (fabs(width - size->width) >= 1.0 || fabs(length - size->length) >= 1.0) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Size \"%s\" has unexpected dimensions " "(%gx%g)."), prefix, size->name, size->width, size->length); if (!warn) errors ++; } } /* * Verify that the size is defined for both PageSize and PageRegion... */ if (warn != 2 && !ppdFindChoice(page_size, size->name)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Size \"%s\" defined for %s but not for " "%s."), prefix, size->name, "PageRegion", "PageSize"); if (!warn) errors ++; } else if (warn != 2 && !ppdFindChoice(page_region, size->name)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Size \"%s\" defined for %s but not for " "%s."), prefix, size->name, "PageSize", "PageRegion"); if (!warn) errors ++; } /* * Verify that the size name is Adobe standard name if it's a standard size * and the dimentional name if it's not a standard size. Suffix should be * .Fullbleed, etc., or numeric, e.g., Letter, Letter.Fullbleed, * Letter.Transverse, Letter1, Letter2, 4x8, 55x91mm, 55x91mm.Fullbleed, etc. */ if (warn != 0) { is_ok = 1; width_2540ths = (size->length > size->width) ? PWG_FROM_POINTS(size->width) : PWG_FROM_POINTS(size->length); length_2540ths = (size->length > size->width) ? PWG_FROM_POINTS(size->length) : PWG_FROM_POINTS(size->width); pwg_media = pwgMediaForSize(width_2540ths, length_2540ths); if (pwg_media && (abs(pwg_media->width - width_2540ths) > 34 || abs(pwg_media->length - length_2540ths) > 34)) pwg_media = NULL; /* Only flag matches within a point */ if (pwg_media && pwg_media->ppd && (pwg_media->ppd[0] < 'a' || pwg_media->ppd[0] > 'z')) { size_t ppdlen = strlen(pwg_media->ppd); /* Length of standard PPD name */ strlcpy(buf, pwg_media->ppd, sizeof(buf)); if (strcmp(size->name, buf) && size->width > size->length) { if (!strcmp(pwg_media->ppd, "DoublePostcardRotated")) strlcpy(buf, "DoublePostcard", sizeof(buf)); else if (strstr(size->name, ".Transverse")) snprintf(buf, sizeof(buf), "%s.Transverse", pwg_media->ppd); else snprintf(buf, sizeof(buf), "%sRotated", pwg_media->ppd); ppdlen = strlen(buf); } if (size->left == 0 && size->bottom == 0 && size->right == size->width && size->top == size->length) { strlcat(buf, ".Fullbleed", sizeof(buf) - strlen(buf)); if (_cups_strcasecmp(size->name, buf)) { /* * Allow an additional qualifier such as ".WithTab"... */ size_t buflen = strlen(buf);/* Length of full bleed name */ if (_cups_strncasecmp(size->name, buf, buflen) || size->name[buflen] != '.') is_ok = 0; } } else if (!strncmp(size->name, pwg_media->ppd, ppdlen)) { /* * Check for a proper qualifier (number, "Small", or .something)... */ ptr = size->name + ppdlen; if (isdigit(*ptr & 255)) { for (ptr ++; *ptr; ptr ++) { if (!isdigit(*ptr & 255)) { is_ok = 0; break; } } } else if (*ptr != '.' && *ptr && strcmp(ptr, "Small")) is_ok = 0; } else { /* * Check for EnvSizeName as well... */ if (strncmp(pwg_media->ppd, "Env", 3) && !strncmp(size->name, "Env", 3)) snprintf(buf, sizeof(buf), "Env%s", pwg_media->ppd); if (strcmp(size->name, buf)) is_ok = 0; } if (!is_ok) _cupsLangPrintf(stdout, _(" %s Size \"%s\" should be the Adobe " "standard name \"%s\"."), prefix, size->name, buf); } else { width_tmp = (fabs(size->width - ceil(size->width)) < 0.1) ? ceil(size->width) : size->width; length_tmp = (fabs(size->length - ceil(size->length)) < 0.1) ? ceil(size->length) : size->length; if (fmod(width_tmp, 9.0) == 0.0 && fmod(length_tmp, 9.0) == 0.0) { width_inch = width_tmp / 72.0; length_inch = length_tmp / 72.0; snprintf(buf, sizeof(buf), "%gx%g", width_inch, length_inch); } else { width_mm = size->width / 72.0 * 25.4; length_mm = size->length / 72.0 * 25.4; snprintf(buf, sizeof(buf), "%.0fx%.0fmm", width_mm, length_mm); } if (size->left == 0 && size->bottom == 0 && size->right == size->width && size->top == size->length) strlcat(buf, ".Fullbleed", sizeof(buf)); else if (size->width > size->length) strlcat(buf, ".Transverse", sizeof(buf)); if (_cups_strcasecmp(size->name, buf)) { size_t buflen = strlen(buf); /* Length of proposed name */ if (_cups_strncasecmp(size->name, buf, buflen) || (strcmp(size->name + buflen, "in") && size->name[buflen] != '.')) { char altbuf[PPD_MAX_NAME]; /* Alternate "wNNNhNNN" name */ size_t altlen; /* Length of alternate name */ snprintf(altbuf, sizeof(altbuf), "w%.0fh%.0f", size->width, size->length); altlen = strlen(altbuf); if (_cups_strncasecmp(size->name, altbuf, altlen) || (size->name[altlen] && size->name[altlen] != '.')) _cupsLangPrintf(stdout, _(" %s Size \"%s\" should be \"%s\"."), prefix, size->name, buf); } } } } } return (errors); } /* * 'check_translations()' - Check translations in the PPD file. */ static int /* O - Errors found */ check_translations(ppd_file_t *ppd, /* I - PPD file */ int errors, /* I - Errors found */ int verbose, /* I - Verbosity level */ int warn) /* I - Warnings only? */ { int j; /* Looping var */ ppd_attr_t *attr; /* PPD attribute */ cups_array_t *languages; /* Array of languages */ int langlen; /* Length of language */ char *language, /* Current language */ keyword[PPD_MAX_NAME], /* Localization keyword (full) */ llkeyword[PPD_MAX_NAME],/* Localization keyword (base) */ ckeyword[PPD_MAX_NAME], /* Custom option keyword (full) */ cllkeyword[PPD_MAX_NAME]; /* Custom option keyword (base) */ ppd_option_t *option; /* Standard UI option */ ppd_coption_t *coption; /* Custom option */ ppd_cparam_t *cparam; /* Custom parameter */ char ll[3]; /* Base language */ const char *prefix; /* WARN/FAIL prefix */ const char *text; /* Pointer into UI text */ prefix = warn ? " WARN " : "**FAIL**"; if ((languages = _ppdGetLanguages(ppd)) != NULL) { /* * This file contains localizations, check them... */ for (language = (char *)cupsArrayFirst(languages); language; language = (char *)cupsArrayNext(languages)) { langlen = (int)strlen(language); if (langlen != 2 && langlen != 5) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad language \"%s\"."), prefix, language); if (!warn) errors ++; continue; } if (!strcmp(language, "en")) continue; strlcpy(ll, language, sizeof(ll)); /* * Loop through all options and choices... */ for (option = ppdFirstOption(ppd); option; option = ppdNextOption(ppd)) { if (!strcmp(option->keyword, "PageRegion")) continue; snprintf(keyword, sizeof(keyword), "%s.Translation", language); snprintf(llkeyword, sizeof(llkeyword), "%s.Translation", ll); if ((attr = ppdFindAttr(ppd, keyword, option->keyword)) == NULL && (attr = ppdFindAttr(ppd, llkeyword, option->keyword)) == NULL) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing \"%s\" translation " "string for option %s."), prefix, language, option->keyword); if (!warn) errors ++; } else if (!valid_utf8(attr->text)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad UTF-8 \"%s\" translation " "string for option %s."), prefix, language, option->keyword); if (!warn) errors ++; } snprintf(keyword, sizeof(keyword), "%s.%s", language, option->keyword); snprintf(llkeyword, sizeof(llkeyword), "%s.%s", ll, option->keyword); for (j = 0; j < option->num_choices; j ++) { /* * First see if this choice is a number; if so, don't require * translation... */ for (text = option->choices[j].text; *text; text ++) if (!strchr("0123456789-+.", *text)) break; if (!*text) continue; /* * Check custom choices differently... */ if (!_cups_strcasecmp(option->choices[j].choice, "Custom") && (coption = ppdFindCustomOption(ppd, option->keyword)) != NULL) { snprintf(ckeyword, sizeof(ckeyword), "%s.Custom%s", language, option->keyword); if ((attr = ppdFindAttr(ppd, ckeyword, "True")) != NULL && !valid_utf8(attr->text)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad UTF-8 \"%s\" " "translation string for option %s, " "choice %s."), prefix, language, ckeyword + 1 + strlen(language), "True"); if (!warn) errors ++; } if (_cups_strcasecmp(option->keyword, "PageSize")) { for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params); cparam; cparam = (ppd_cparam_t *)cupsArrayNext(coption->params)) { snprintf(ckeyword, sizeof(ckeyword), "%s.ParamCustom%s", language, option->keyword); snprintf(cllkeyword, sizeof(cllkeyword), "%s.ParamCustom%s", ll, option->keyword); if ((attr = ppdFindAttr(ppd, ckeyword, cparam->name)) == NULL && (attr = ppdFindAttr(ppd, cllkeyword, cparam->name)) == NULL) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing \"%s\" " "translation string for option %s, " "choice %s."), prefix, language, ckeyword + 1 + strlen(language), cparam->name); if (!warn) errors ++; } else if (!valid_utf8(attr->text)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad UTF-8 \"%s\" " "translation string for option %s, " "choice %s."), prefix, language, ckeyword + 1 + strlen(language), cparam->name); if (!warn) errors ++; } } } } else if ((attr = ppdFindAttr(ppd, keyword, option->choices[j].choice)) == NULL && (attr = ppdFindAttr(ppd, llkeyword, option->choices[j].choice)) == NULL) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Missing \"%s\" " "translation string for option %s, " "choice %s."), prefix, language, option->keyword, option->choices[j].choice); if (!warn) errors ++; } else if (!valid_utf8(attr->text)) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s Bad UTF-8 \"%s\" " "translation string for option %s, " "choice %s."), prefix, language, option->keyword, option->choices[j].choice); if (!warn) errors ++; } } } } /* * Verify that we have the base language for each localized one... */ for (language = (char *)cupsArrayFirst(languages); language; language = (char *)cupsArrayNext(languages)) if (language[2]) { /* * Lookup the base language... */ cupsArraySave(languages); strlcpy(ll, language, sizeof(ll)); if (!cupsArrayFind(languages, ll) && strcmp(ll, "zh") && strcmp(ll, "en")) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s No base translation \"%s\" " "is included in file."), prefix, ll); if (!warn) errors ++; } cupsArrayRestore(languages); } /* * Free memory used for the languages... */ _ppdFreeLanguages(languages); } return (errors); } /* * 'show_conflicts()' - Show option conflicts in a PPD file. */ static void show_conflicts(ppd_file_t *ppd, /* I - PPD to check */ const char *prefix) /* I - Prefix string */ { int i, j; /* Looping variables */ ppd_const_t *c; /* Current constraint */ ppd_option_t *o1, *o2; /* Options */ ppd_choice_t *c1, *c2; /* Choices */ /* * Loop through all of the UI constraints and report any options * that conflict... */ for (i = ppd->num_consts, c = ppd->consts; i > 0; i --, c ++) { /* * Grab pointers to the first option... */ o1 = ppdFindOption(ppd, c->option1); if (o1 == NULL) continue; else if (c->choice1[0] != '\0') { /* * This constraint maps to a specific choice. */ c1 = ppdFindChoice(o1, c->choice1); } else { /* * This constraint applies to any choice for this option. */ for (j = o1->num_choices, c1 = o1->choices; j > 0; j --, c1 ++) if (c1->marked) break; if (j == 0 || !_cups_strcasecmp(c1->choice, "None") || !_cups_strcasecmp(c1->choice, "Off") || !_cups_strcasecmp(c1->choice, "False")) c1 = NULL; } /* * Grab pointers to the second option... */ o2 = ppdFindOption(ppd, c->option2); if (o2 == NULL) continue; else if (c->choice2[0] != '\0') { /* * This constraint maps to a specific choice. */ c2 = ppdFindChoice(o2, c->choice2); } else { /* * This constraint applies to any choice for this option. */ for (j = o2->num_choices, c2 = o2->choices; j > 0; j --, c2 ++) if (c2->marked) break; if (j == 0 || !_cups_strcasecmp(c2->choice, "None") || !_cups_strcasecmp(c2->choice, "Off") || !_cups_strcasecmp(c2->choice, "False")) c2 = NULL; } /* * If both options are marked then there is a conflict... */ if (c1 != NULL && c1->marked && c2 != NULL && c2->marked) _cupsLangPrintf(stdout, _(" %s \"%s %s\" conflicts with \"%s %s\"\n" " (constraint=\"%s %s %s %s\")."), prefix, o1->keyword, c1->choice, o2->keyword, c2->choice, c->option1, c->choice1, c->option2, c->choice2); } } /* * 'test_raster()' - Test PostScript commands for raster printers. */ static int /* O - 1 on success, 0 on failure */ test_raster(ppd_file_t *ppd, /* I - PPD file */ int verbose) /* I - Verbosity */ { cups_page_header2_t header; /* Page header */ ppdMarkDefaults(ppd); if (cupsRasterInterpretPPD(&header, ppd, 0, NULL, 0)) { if (!verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" **FAIL** Default option code cannot be " "interpreted: %s"), cupsRasterErrorString()); return (0); } /* * Try a test of custom page size code, if available... */ if (!ppdPageSize(ppd, "Custom.612x792")) return (1); ppdMarkOption(ppd, "PageSize", "Custom.612x792"); if (cupsRasterInterpretPPD(&header, ppd, 0, NULL, 0)) { if (!verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" **FAIL** Default option code cannot be " "interpreted: %s"), cupsRasterErrorString()); return (0); } return (1); } /* * 'usage()' - Show program usage. */ static void usage(void) { _cupsLangPuts(stdout, _("Usage: cupstestppd [options] filename1.ppd[.gz] " "[... filenameN.ppd[.gz]]")); _cupsLangPuts(stdout, _(" program | cupstestppd [options] -")); _cupsLangPuts(stdout, ""); _cupsLangPuts(stdout, _("Options:")); _cupsLangPuts(stdout, ""); _cupsLangPuts(stdout, _(" -I {filename,filters,none,profiles}")); _cupsLangPuts(stdout, _(" Ignore specific warnings.")); _cupsLangPuts(stdout, _(" -R root-directory Set alternate root.")); _cupsLangPuts(stdout, _(" -W {all,none,constraints,defaults,duplex," "filters,profiles,sizes,translations}")); _cupsLangPuts(stdout, _(" Issue warnings instead of " "errors.")); _cupsLangPuts(stdout, _(" -q Run silently.")); _cupsLangPuts(stdout, _(" -r Use 'relaxed' open mode.")); _cupsLangPuts(stdout, _(" -v Be verbose.")); _cupsLangPuts(stdout, _(" -vv Be very verbose.")); exit(ERROR_USAGE); } /* * 'valid_path()' - Check whether a path has the correct capitalization. */ static int /* O - Errors found */ valid_path(const char *keyword, /* I - Keyword using path */ const char *path, /* I - Path to check */ int errors, /* I - Errors found */ int verbose, /* I - Verbosity level */ int warn) /* I - Warnings only? */ { cups_dir_t *dir; /* Current directory */ cups_dentry_t *dentry; /* Current directory entry */ char temp[1024], /* Temporary path */ *ptr; /* Pointer into temporary path */ const char *prefix; /* WARN/FAIL prefix */ prefix = warn ? " WARN " : "**FAIL**"; /* * Loop over the components of the path, checking that the entry exists with * the same capitalization... */ strlcpy(temp, path, sizeof(temp)); while ((ptr = strrchr(temp, '/')) != NULL) { /* * Chop off the trailing component so temp == dirname and ptr == basename. */ *ptr++ = '\0'; /* * Try opening the directory containing the base name... */ if (temp[0]) dir = cupsDirOpen(temp); else dir = cupsDirOpen("/"); if (!dir) dentry = NULL; else { while ((dentry = cupsDirRead(dir)) != NULL) { if (!strcmp(dentry->filename, ptr)) break; } cupsDirClose(dir); } /* * Display an error if the filename doesn't exist with the same * capitalization... */ if (!dentry) { if (!warn && !errors && !verbose) _cupsLangPuts(stdout, _(" FAIL")); if (verbose >= 0) _cupsLangPrintf(stdout, _(" %s %s file \"%s\" has the wrong " "capitalization."), prefix, keyword, path); if (!warn) errors ++; break; } } return (errors); } /* * 'valid_utf8()' - Check whether a string contains valid UTF-8 text. */ static int /* O - 1 if valid, 0 if not */ valid_utf8(const char *s) /* I - String to check */ { while (*s) { if (*s & 0x80) { /* * Check for valid UTF-8 sequence... */ if ((*s & 0xc0) == 0x80) return (0); /* Illegal suffix byte */ else if ((*s & 0xe0) == 0xc0) { /* * 2-byte sequence... */ s ++; if ((*s & 0xc0) != 0x80) return (0); /* Missing suffix byte */ } else if ((*s & 0xf0) == 0xe0) { /* * 3-byte sequence... */ s ++; if ((*s & 0xc0) != 0x80) return (0); /* Missing suffix byte */ s ++; if ((*s & 0xc0) != 0x80) return (0); /* Missing suffix byte */ } else if ((*s & 0xf8) == 0xf0) { /* * 4-byte sequence... */ s ++; if ((*s & 0xc0) != 0x80) return (0); /* Missing suffix byte */ s ++; if ((*s & 0xc0) != 0x80) return (0); /* Missing suffix byte */ s ++; if ((*s & 0xc0) != 0x80) return (0); /* Missing suffix byte */ } else return (0); /* Bad sequence */ } s ++; } return (1); } cups-2.2.7/systemv/Dependencies000664 000765 000024 00000012707 13255074424 017205 0ustar00msweetstaff000000 000000 cancel.o: cancel.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h cupsaccept.o: cupsaccept.c ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h cupsaddsmb.o: cupsaddsmb.c ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/adminutil.h cupsctl.o: cupsctl.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/adminutil.h cupstestdsc.o: cupstestdsc.c ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h cupstestppd.o: cupstestppd.c ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/dir.h ../cups/ppd-private.h ../cups/ppd.h ../cups/raster.h lp.o: lp.c ../cups/cups-private.h ../cups/string-private.h ../config.h \ ../cups/debug-private.h ../cups/versioning.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h lpadmin.o: lpadmin.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h lpinfo.o: lpinfo.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/adminutil.h lpmove.o: lpmove.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h lpoptions.o: lpoptions.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h lpstat.o: lpstat.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h cups-2.2.7/systemv/lp.c000664 000765 000024 00000042471 13255074424 015454 0ustar00msweetstaff000000 000000 /* * "lp" command for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include /* * Local functions. */ int restart_job(const char *command, int job_id); int set_job_attrs(const char *command, int job_id, int num_options, cups_option_t *options); /* * 'main()' - Parse options and send files for printing. */ int main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i, j; /* Looping vars */ int job_id; /* Job ID */ char *printer, /* Printer name */ *instance, /* Instance name */ *opt, /* Option pointer */ *val, /* Option value */ *title; /* Job title */ int priority; /* Job priority (1-100) */ int num_copies; /* Number of copies per file */ int num_files; /* Number of files to print */ const char *files[1000]; /* Files to print */ cups_dest_t *dest; /* Selected destination */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ int end_options; /* No more options? */ int silent; /* Silent or verbose output? */ char buffer[8192]; /* Copy buffer */ #ifdef __sun /* * Solaris does some rather strange things to re-queue remote print * jobs. On bootup, the "lp" command is run as "printd" to re-spool * any remote jobs in /var/spool/print. Since CUPS doesn't need this * nonsense, we just need to add the necessary check here to prevent * lp from causing boot problems... */ if ((val = strrchr(argv[0], '/')) != NULL) val ++; else val = argv[0]; if (!strcmp(val, "printd")) return (0); #endif /* __sun */ _cupsSetLocale(argv); silent = 0; printer = NULL; dest = NULL; num_options = 0; options = NULL; num_files = 0; title = NULL; job_id = 0; end_options = 0; for (i = 1; i < argc; i ++) { if (argv[i][0] == '-' && argv[i][1] && !end_options) { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'E' : /* Encrypt */ #ifdef HAVE_SSL cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]); #endif /* HAVE_SSL */ break; case 'U' : /* Username */ if (opt[1] != '\0') { cupsSetUser(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected username after \"-U\" option."), argv[0]); return (1); } cupsSetUser(argv[i]); } break; case 'c' : /* Copy to spool dir (always enabled) */ break; case 'd' : /* Destination printer or class */ if (opt[1] != '\0') { printer = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected destination after \"-d\" option."), argv[0]); return (1); } printer = argv[i]; } if ((instance = strrchr(printer, '/')) != NULL) *instance++ = '\0'; if ((dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, printer, instance)) != NULL) { for (j = 0; j < dest->num_options; j ++) if (cupsGetOption(dest->options[j].name, num_options, options) == NULL) num_options = cupsAddOption(dest->options[j].name, dest->options[j].value, num_options, &options); } else if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server " "name."), argv[0]); return (1); } break; case 'f' : /* Form */ if (opt[1] != '\0') { opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected form after \"-f\" option."), argv[0]); return (1); } } _cupsLangPrintf(stderr, _("%s: Warning - form option ignored."), argv[0]); break; case 'h' : /* Destination host */ if (opt[1] != '\0') { cupsSetServer(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected hostname after \"-h\" option."), argv[0]); return (1); } cupsSetServer(argv[i]); } break; case 'i' : /* Change job */ if (opt[1] != '\0') { val = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Expected job ID after \"-i\" option."), argv[0]); return (1); } val = argv[i]; } if (num_files > 0) { _cupsLangPrintf(stderr, _("%s: Error - cannot print files and alter jobs simultaneously."), argv[0]); return (1); } if (strrchr(val, '-') != NULL) job_id = atoi(strrchr(val, '-') + 1); else job_id = atoi(val); if (job_id < 0) { _cupsLangPrintf(stderr, _("%s: Error - bad job ID."), argv[0]); break; } break; case 'm' : /* Send email when job is done */ #ifdef __sun case 'p' : /* Notify on completion */ #endif /* __sun */ case 'w' : /* Write to console or email */ { char email[1024]; /* EMail address */ snprintf(email, sizeof(email), "mailto:%s@%s", cupsUser(), httpGetHostname(NULL, buffer, sizeof(buffer))); num_options = cupsAddOption("notify-recipient-uri", email, num_options, &options); } silent = 1; break; case 'n' : /* Number of copies */ if (opt[1] != '\0') { num_copies = atoi(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected copies after \"-n\" option."), argv[0]); return (1); } num_copies = atoi(argv[i]); } if (num_copies < 1) { _cupsLangPrintf(stderr, _("%s: Error - copies must be 1 or more."), argv[0]); return (1); } sprintf(buffer, "%d", num_copies); num_options = cupsAddOption("copies", buffer, num_options, &options); break; case 'o' : /* Option */ if (opt[1] != '\0') { num_options = cupsParseOptions(opt + 1, num_options, &options); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected option=value after \"-o\" option."), argv[0]); return (1); } num_options = cupsParseOptions(argv[i], num_options, &options); } break; #ifndef __sun case 'p' : /* Queue priority */ #endif /* !__sun */ case 'q' : /* Queue priority */ if (opt[1] != '\0') { priority = atoi(opt + 1); opt += strlen(opt) - 1; } else { if ((i + 1) >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected priority after \"-%c\" option."), argv[0], *opt); return (1); } i ++; priority = atoi(argv[i]); } /* * For 100% Solaris compatibility, need to add: * * priority = 99 * (39 - priority) / 39 + 1; * * However, to keep CUPS lp the same across all platforms * we will break compatibility this far... */ if (priority < 1 || priority > 100) { _cupsLangPrintf(stderr, _("%s: Error - priority must be between 1 and 100."), argv[0]); return (1); } sprintf(buffer, "%d", priority); num_options = cupsAddOption("job-priority", buffer, num_options, &options); break; case 's' : /* Silent */ silent = 1; break; case 't' : /* Title */ if (opt[1] != '\0') { title = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected title after \"-t\" option."), argv[0]); return (1); } title = argv[i]; } break; case 'y' : /* mode-list */ if (opt[1] != '\0') { opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected mode list after \"-y\" option."), argv[0]); return (1); } } _cupsLangPrintf(stderr, _("%s: Warning - mode option ignored."), argv[0]); break; case 'H' : /* Hold job */ if (opt[1] != '\0') { val = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected hold name after \"-H\" option."), argv[0]); return (1); } val = argv[i]; } if (!strcmp(val, "hold")) num_options = cupsAddOption("job-hold-until", "indefinite", num_options, &options); else if (!strcmp(val, "resume") || !strcmp(val, "release")) num_options = cupsAddOption("job-hold-until", "no-hold", num_options, &options); else if (!strcmp(val, "immediate")) { num_options = cupsAddOption("job-hold-until", "no-hold", num_options, &options); num_options = cupsAddOption("job-priority", "100", num_options, &options); } else if (!strcmp(val, "restart")) { if (job_id < 1) { _cupsLangPrintf(stderr, _("%s: Need job ID (\"-i jobid\") before \"-H restart\"."), argv[0]); return (1); } if (restart_job(argv[0], job_id)) return (1); } else num_options = cupsAddOption("job-hold-until", val, num_options, &options); break; case 'P' : /* Page list */ if (opt[1] != '\0') { val = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected page list after \"-P\" option."), argv[0]); return (1); } val = argv[i]; } num_options = cupsAddOption("page-ranges", val, num_options, &options); break; case 'S' : /* character set */ if (opt[1] != '\0') { opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected character set after \"-S\" option."), argv[0]); return (1); } } _cupsLangPrintf(stderr, _("%s: Warning - character set option ignored."), argv[0]); break; case 'T' : /* Content-Type */ if (opt[1] != '\0') { opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected content type after \"-T\" option."), argv[0]); return (1); } } _cupsLangPrintf(stderr, _("%s: Warning - content type option ignored."), argv[0]); break; case '-' : /* Stop processing options */ if (opt[1] != '\0') { _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%s\"."), argv[0], argv[i]); return (1); } end_options = 1; break; default : _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%c\"."), argv[0], *opt); return (1); } } } else if (!strcmp(argv[i], "-")) { if (num_files || job_id) { _cupsLangPrintf(stderr, _("%s: Error - cannot print from stdin if files or a " "job ID are provided."), argv[0]); return (1); } break; } else if (num_files < 1000 && job_id == 0) { /* * Print a file... */ if (access(argv[i], R_OK) != 0) { _cupsLangPrintf(stderr, _("%s: Error - unable to access \"%s\" - %s"), argv[0], argv[i], strerror(errno)); return (1); } files[num_files] = argv[i]; num_files ++; if (title == NULL) { if ((title = strrchr(argv[i], '/')) != NULL) title ++; else title = argv[i]; } } else { _cupsLangPrintf(stderr, _("%s: Error - too many files - \"%s\"."), argv[0], argv[i]); } } /* * See if we are altering an existing job... */ if (job_id) return (set_job_attrs(argv[0], job_id, num_options, options)); /* * See if we have any files to print; if not, print from stdin... */ if (printer == NULL) { if ((dest = cupsGetNamedDest(NULL, NULL, NULL)) != NULL) { printer = dest->name; for (j = 0; j < dest->num_options; j ++) if (cupsGetOption(dest->options[j].name, num_options, options) == NULL) num_options = cupsAddOption(dest->options[j].name, dest->options[j].value, num_options, &options); } else if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server " "name."), argv[0]); return (1); } } if (printer == NULL) { if (!cupsGetNamedDest(NULL, NULL, NULL) && cupsLastError() == IPP_STATUS_ERROR_NOT_FOUND) _cupsLangPrintf(stderr, _("%s: Error - %s"), argv[0], cupsLastErrorString()); else _cupsLangPrintf(stderr, _("%s: Error - scheduler not responding."), argv[0]); return (1); } if (num_files > 0) job_id = cupsPrintFiles(printer, num_files, files, title, num_options, options); else if ((job_id = cupsCreateJob(CUPS_HTTP_DEFAULT, printer, title ? title : "(stdin)", num_options, options)) > 0) { http_status_t status; /* Write status */ const char *format; /* Document format */ ssize_t bytes; /* Bytes read */ if (cupsGetOption("raw", num_options, options)) format = CUPS_FORMAT_RAW; else if ((format = cupsGetOption("document-format", num_options, options)) == NULL) format = CUPS_FORMAT_AUTO; status = cupsStartDocument(CUPS_HTTP_DEFAULT, printer, job_id, NULL, format, 1); while (status == HTTP_CONTINUE && (bytes = read(0, buffer, sizeof(buffer))) > 0) status = cupsWriteRequestData(CUPS_HTTP_DEFAULT, buffer, (size_t)bytes); if (status != HTTP_CONTINUE) { _cupsLangPrintf(stderr, _("%s: Error - unable to queue from stdin - %s."), argv[0], httpStatus(status)); cupsFinishDocument(CUPS_HTTP_DEFAULT, printer); cupsCancelJob2(CUPS_HTTP_DEFAULT, printer, job_id, 0); return (1); } if (cupsFinishDocument(CUPS_HTTP_DEFAULT, printer) != IPP_OK) { _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString()); cupsCancelJob2(CUPS_HTTP_DEFAULT, printer, job_id, 0); return (1); } } if (job_id < 1) { _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString()); return (1); } else if (!silent) _cupsLangPrintf(stdout, _("request id is %s-%d (%d file(s))"), printer, job_id, num_files); return (0); } /* * 'restart_job()' - Restart a job. */ int /* O - Exit status */ restart_job(const char *command, /* I - Command name */ int job_id) /* I - Job ID */ { ipp_t *request; /* IPP request */ char uri[HTTP_MAX_URI]; /* URI for job */ request = ippNewRequest(IPP_RESTART_JOB); sprintf(uri, "ipp://localhost/jobs/%d", job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippDelete(cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/jobs")); if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server " "name."), command); return (1); } else if (cupsLastError() > IPP_OK_CONFLICT) { _cupsLangPrintf(stderr, "%s: %s", command, cupsLastErrorString()); return (1); } return (0); } /* * 'set_job_attrs()' - Set job attributes. */ int /* O - Exit status */ set_job_attrs(const char *command, /* I - Command name */ int job_id, /* I - Job ID */ int num_options,/* I - Number of options */ cups_option_t *options) /* I - Options */ { ipp_t *request; /* IPP request */ char uri[HTTP_MAX_URI]; /* URI for job */ if (num_options == 0) return (0); request = ippNewRequest(IPP_SET_JOB_ATTRIBUTES); sprintf(uri, "ipp://localhost/jobs/%d", job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); cupsEncodeOptions(request, num_options, options); ippDelete(cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/jobs")); if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server " "name."), command); return (1); } else if (cupsLastError() > IPP_OK_CONFLICT) { _cupsLangPrintf(stderr, "%s: %s", command, cupsLastErrorString()); return (1); } return (0); } cups-2.2.7/systemv/lpadmin.c000664 000765 000024 00000124307 13255074424 016464 0ustar00msweetstaff000000 000000 /* * "lpadmin" command for CUPS. * * Copyright © 2007-2018 by Apple Inc. * Copyright © 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #define _CUPS_NO_DEPRECATED #define _PPD_DEPRECATED #include #include /* * Local functions... */ static int add_printer_to_class(http_t *http, char *printer, char *pclass); static int default_printer(http_t *http, char *printer); static int delete_printer(http_t *http, char *printer); static int delete_printer_from_class(http_t *http, char *printer, char *pclass); static int delete_printer_option(http_t *http, char *printer, char *option); static int enable_printer(http_t *http, char *printer); static char *get_printer_ppd(const char *uri, char *buffer, size_t bufsize, int *num_options, cups_option_t **options); static cups_ptype_t get_printer_type(http_t *http, char *printer, char *uri, size_t urisize); static int set_printer_options(http_t *http, char *printer, int num_options, cups_option_t *options, char *file); static int validate_name(const char *name); /* * 'main()' - Parse options and configure the scheduler. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ http_t *http; /* Connection to server */ char *printer, /* Destination printer */ *pclass, /* Printer class name */ *opt, /* Option pointer */ *val; /* Pointer to allow/deny value */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ char *file, /* New PPD file */ evefile[1024] = ""; /* IPP Everywhere PPD */ const char *ppd_name, /* ppd-name value */ *device_uri; /* device-uri value */ _cupsSetLocale(argv); http = NULL; printer = NULL; num_options = 0; options = NULL; file = NULL; for (i = 1; i < argc; i ++) { if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'c' : /* Add printer to class */ if (!http) { http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL); if (http == NULL) { _cupsLangPrintf(stderr, _("lpadmin: Unable to connect to server: %s"), strerror(errno)); return (1); } } if (printer == NULL) { _cupsLangPuts(stderr, _("lpadmin: Unable to add a printer to the class:\n" " You must specify a printer name first.")); return (1); } if (opt[1] != '\0') { pclass = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected class name after \"-c\" option.")); return (1); } pclass = argv[i]; } if (!validate_name(pclass)) { _cupsLangPuts(stderr, _("lpadmin: Class name can only contain printable " "characters.")); return (1); } if (add_printer_to_class(http, printer, pclass)) return (1); break; case 'd' : /* Set as default destination */ if (!http) { http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL); if (http == NULL) { _cupsLangPrintf(stderr, _("lpadmin: Unable to connect to server: %s"), strerror(errno)); return (1); } } if (opt[1] != '\0') { printer = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected printer name after \"-d\" option.")); return (1); } printer = argv[i]; } if (!validate_name(printer)) { _cupsLangPuts(stderr, _("lpadmin: Printer name can only contain printable characters.")); return (1); } if (default_printer(http, printer)) return (1); i = argc; break; case 'h' : /* Connect to host */ if (http) { httpClose(http); http = NULL; } if (opt[1] != '\0') { cupsSetServer(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected hostname after \"-h\" option.")); return (1); } cupsSetServer(argv[i]); } break; case 'P' : /* Use the specified PPD file */ case 'i' : /* Use the specified PPD file */ if (opt[1] != '\0') { file = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("lpadmin: Expected PPD after \"-%c\" option."), argv[i - 1][1]); return (1); } file = argv[i]; } if (*opt == 'i') { /* * Check to see that the specified file is, in fact, a PPD... */ cups_file_t *fp = cupsFileOpen(file, "r"); char line[256]; if (!cupsFileGets(fp, line, sizeof(line)) || strncmp(line, "*PPD-Adobe", 10)) { _cupsLangPuts(stderr, _("lpadmin: System V interface scripts are no longer supported for security reasons.")); cupsFileClose(fp); return (1); } cupsFileClose(fp); } break; case 'E' : /* Enable the printer/enable encryption */ if (printer == NULL) { #ifdef HAVE_SSL cupsSetEncryption(HTTP_ENCRYPTION_REQUIRED); if (http) httpEncryption(http, HTTP_ENCRYPTION_REQUIRED); #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]); #endif /* HAVE_SSL */ break; } if (!http) { http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL); if (http == NULL) { _cupsLangPrintf(stderr, _("lpadmin: Unable to connect to server: %s"), strerror(errno)); return (1); } } if (enable_printer(http, printer)) return (1); break; case 'm' : /* Use the specified standard script/PPD file */ if (opt[1] != '\0') { num_options = cupsAddOption("ppd-name", opt + 1, num_options, &options); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected model after \"-m\" option.")); return (1); } num_options = cupsAddOption("ppd-name", argv[i], num_options, &options); } break; case 'o' : /* Set option */ if (opt[1] != '\0') { num_options = cupsParseOptions(opt + 1, num_options, &options); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected name=value after \"-o\" option.")); return (1); } num_options = cupsParseOptions(argv[i], num_options, &options); } break; case 'p' : /* Add/modify a printer */ if (opt[1] != '\0') { printer = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected printer after \"-p\" option.")); return (1); } printer = argv[i]; } if (!validate_name(printer)) { _cupsLangPuts(stderr, _("lpadmin: Printer name can only contain printable characters.")); return (1); } break; case 'r' : /* Remove printer from class */ if (!http) { http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL); if (http == NULL) { _cupsLangPrintf(stderr, _("lpadmin: Unable to connect to server: %s"), strerror(errno)); return (1); } } if (printer == NULL) { _cupsLangPuts(stderr, _("lpadmin: Unable to remove a printer from the class:\n" " You must specify a printer name first.")); return (1); } if (opt[1] != '\0') { pclass = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected class after \"-r\" option.")); return (1); } pclass = argv[i]; } if (!validate_name(pclass)) { _cupsLangPuts(stderr, _("lpadmin: Class name can only contain printable characters.")); return (1); } if (delete_printer_from_class(http, printer, pclass)) return (1); break; case 'R' : /* Remove option */ if (!http) { http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL); if (http == NULL) { _cupsLangPrintf(stderr, _("lpadmin: Unable to connect to server: %s"), strerror(errno)); return (1); } } if (printer == NULL) { _cupsLangPuts(stderr, _("lpadmin: Unable to delete option:\n" " You must specify a printer name first.")); return (1); } if (opt[1] != '\0') { val = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected name after \"-R\" option.")); return (1); } val = argv[i]; } if (delete_printer_option(http, printer, val)) return (1); break; case 'U' : /* Username */ if (opt[1] != '\0') { cupsSetUser(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected username after \"-U\" option."), argv[0]); return (1); } cupsSetUser(argv[i]); } break; case 'u' : /* Allow/deny users */ if (opt[1] != '\0') { val = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected allow/deny:userlist after \"-u\" option.")); return (1); } val = argv[i]; } if (!_cups_strncasecmp(val, "allow:", 6)) num_options = cupsAddOption("requesting-user-name-allowed", val + 6, num_options, &options); else if (!_cups_strncasecmp(val, "deny:", 5)) num_options = cupsAddOption("requesting-user-name-denied", val + 5, num_options, &options); else { _cupsLangPrintf(stderr, _("lpadmin: Unknown allow/deny option \"%s\"."), val); return (1); } break; case 'v' : /* Set the device-uri attribute */ if (opt[1] != '\0') { num_options = cupsAddOption("device-uri", opt + 1, num_options, &options); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected device URI after \"-v\" option.")); return (1); } num_options = cupsAddOption("device-uri", argv[i], num_options, &options); } break; case 'x' : /* Delete a printer */ if (!http) { http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL); if (http == NULL) { _cupsLangPrintf(stderr, _("lpadmin: Unable to connect to server: %s"), strerror(errno)); return (1); } } if (opt[1] != '\0') { printer = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected printer or class after \"-x\" option.")); return (1); } printer = argv[i]; } if (!validate_name(printer)) { _cupsLangPuts(stderr, _("lpadmin: Printer name can only contain printable characters.")); return (1); } if (delete_printer(http, printer)) return (1); i = argc; break; case 'D' : /* Set the printer-info attribute */ if (opt[1] != '\0') { num_options = cupsAddOption("printer-info", opt + 1, num_options, &options); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected description after \"-D\" option.")); return (1); } num_options = cupsAddOption("printer-info", argv[i], num_options, &options); } break; case 'I' : /* Set the supported file types (ignored) */ i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected file type(s) after \"-I\" option.")); return (1); } _cupsLangPuts(stderr, _("lpadmin: Warning - content type list ignored.")); break; case 'L' : /* Set the printer-location attribute */ if (opt[1] != '\0') { num_options = cupsAddOption("printer-location", opt + 1, num_options, &options); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("lpadmin: Expected location after \"-L\" option.")); return (1); } num_options = cupsAddOption("printer-location", argv[i], num_options, &options); } break; default : _cupsLangPrintf(stderr, _("lpadmin: Unknown option \"%c\"."), *opt); return (1); } } } else { _cupsLangPrintf(stderr, _("lpadmin: Unknown argument \"%s\"."), argv[i]); return (1); } } /* * Set options as needed... */ ppd_name = cupsGetOption("ppd-name", num_options, options); device_uri = cupsGetOption("device-uri", num_options, options); if (ppd_name && !strcmp(ppd_name, "raw")) { _cupsLangPuts(stderr, _("lpadmin: Raw queues are deprecated and will stop working in a future version of CUPS.")); if (device_uri && (!strncmp(device_uri, "ipp://", 6) || !strncmp(device_uri, "ipps://", 7)) && strstr(device_uri, "/printers/")) _cupsLangPuts(stderr, _("lpadmin: Use the 'everywhere' model for shared printers.")); } else if (ppd_name && !strcmp(ppd_name, "everywhere") && device_uri) { if ((file = get_printer_ppd(device_uri, evefile, sizeof(evefile), &num_options, &options)) == NULL) return (1); num_options = cupsRemoveOption("ppd-name", num_options, &options); } if (num_options || file) { if (printer == NULL) { _cupsLangPuts(stderr, _("lpadmin: Unable to set the printer options:\n" " You must specify a printer name first.")); return (1); } if (!http) { http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL); if (http == NULL) { _cupsLangPrintf(stderr, _("lpadmin: Unable to connect to server: %s"), strerror(errno)); return (1); } } if (set_printer_options(http, printer, num_options, options, file)) return (1); } if (evefile[0]) unlink(evefile); if (printer == NULL) { _cupsLangPuts(stdout, _("Usage:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] " "[-i interface] [-m model]\n" " [-r remove-class] [-v device] " "[-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] " "[-u deny:user,user]")); } if (http) httpClose(http); return (0); } /* * 'add_printer_to_class()' - Add a printer to a class. */ static int /* O - 0 on success, 1 on fail */ add_printer_to_class(http_t *http, /* I - Server connection */ char *printer, /* I - Printer to add */ char *pclass) /* I - Class to add to */ { int i; /* Looping var */ ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr, /* Current attribute */ *members; /* Members in class */ char uri[HTTP_MAX_URI]; /* URI for printer/class */ DEBUG_printf(("add_printer_to_class(%p, \"%s\", \"%s\")\n", http, printer, pclass)); /* * Build an IPP_OP_GET_PRINTER_ATTRIBUTES request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name */ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/classes/%s", pclass); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); /* * Do the request and get back a response... */ response = cupsDoRequest(http, request, "/"); /* * Build a CUPS-Add-Modify-Class request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name * member-uris */ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); /* * See if the printer is already in the class... */ if (response != NULL && (members = ippFindAttribute(response, "member-names", IPP_TAG_NAME)) != NULL) for (i = 0; i < members->num_values; i ++) if (_cups_strcasecmp(printer, members->values[i].string.text) == 0) { _cupsLangPrintf(stderr, _("lpadmin: Printer %s is already a member of class " "%s."), printer, pclass); ippDelete(request); ippDelete(response); return (0); } /* * OK, the printer isn't part of the class, so add it... */ httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", printer); if (response != NULL && (members = ippFindAttribute(response, "member-uris", IPP_TAG_URI)) != NULL) { /* * Add the printer to the existing list... */ attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_URI, "member-uris", members->num_values + 1, NULL, NULL); for (i = 0; i < members->num_values; i ++) attr->values[i].string.text = _cupsStrAlloc(members->values[i].string.text); attr->values[i].string.text = _cupsStrAlloc(uri); } else ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_URI, "member-uris", NULL, uri); /* * Then send the request... */ ippDelete(response); ippDelete(cupsDoRequest(http, request, "/admin/")); if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } else return (0); } /* * 'default_printer()' - Set the default printing destination. */ static int /* O - 0 on success, 1 on fail */ default_printer(http_t *http, /* I - Server connection */ char *printer) /* I - Printer name */ { ipp_t *request; /* IPP Request */ char uri[HTTP_MAX_URI]; /* URI for printer/class */ DEBUG_printf(("default_printer(%p, \"%s\")\n", http, printer)); /* * Build a CUPS-Set-Default request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name */ httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", printer); request = ippNewRequest(IPP_OP_CUPS_SET_DEFAULT); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(http, request, "/admin/")); if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } else return (0); } /* * 'delete_printer()' - Delete a printer from the system... */ static int /* O - 0 on success, 1 on fail */ delete_printer(http_t *http, /* I - Server connection */ char *printer) /* I - Printer to delete */ { ipp_t *request; /* IPP Request */ char uri[HTTP_MAX_URI]; /* URI for printer/class */ DEBUG_printf(("delete_printer(%p, \"%s\")\n", http, printer)); /* * Build a CUPS-Delete-Printer request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name */ request = ippNewRequest(IPP_OP_CUPS_DELETE_PRINTER); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", printer); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(http, request, "/admin/")); if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } else return (0); } /* * 'delete_printer_from_class()' - Delete a printer from a class. */ static int /* O - 0 on success, 1 on fail */ delete_printer_from_class( http_t *http, /* I - Server connection */ char *printer, /* I - Printer to remove */ char *pclass) /* I - Class to remove from */ { int i, j, k; /* Looping vars */ ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr, /* Current attribute */ *members; /* Members in class */ char uri[HTTP_MAX_URI]; /* URI for printer/class */ DEBUG_printf(("delete_printer_from_class(%p, \"%s\", \"%s\")\n", http, printer, pclass)); /* * Build an IPP_OP_GET_PRINTER_ATTRIBUTES request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name */ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/classes/%s", pclass); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); /* * Do the request and get back a response... */ if ((response = cupsDoRequest(http, request, "/classes/")) == NULL || response->request.status.status_code == IPP_STATUS_ERROR_NOT_FOUND) { _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); ippDelete(response); return (1); } /* * See if the printer is already in the class... */ if ((members = ippFindAttribute(response, "member-names", IPP_TAG_NAME)) == NULL) { _cupsLangPuts(stderr, _("lpadmin: No member names were seen.")); ippDelete(response); return (1); } for (i = 0; i < members->num_values; i ++) if (!_cups_strcasecmp(printer, members->values[i].string.text)) break; if (i >= members->num_values) { _cupsLangPrintf(stderr, _("lpadmin: Printer %s is not a member of class %s."), printer, pclass); ippDelete(response); return (1); } if (members->num_values == 1) { /* * Build a CUPS-Delete-Class request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name */ request = ippNewRequest(IPP_OP_CUPS_DELETE_CLASS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); } else { /* * Build a IPP_OP_CUPS_ADD_MODIFY_CLASS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name * member-uris */ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); /* * Delete the printer from the class... */ members = ippFindAttribute(response, "member-uris", IPP_TAG_URI); attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_URI, "member-uris", members->num_values - 1, NULL, NULL); for (j = 0, k = 0; j < members->num_values; j ++) if (j != i) attr->values[k ++].string.text = _cupsStrAlloc(members->values[j].string.text); } /* * Then send the request... */ ippDelete(response); ippDelete(cupsDoRequest(http, request, "/admin/")); if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } else return (0); } /* * 'delete_printer_option()' - Delete a printer option. */ static int /* O - 0 on success, 1 on fail */ delete_printer_option(http_t *http, /* I - Server connection */ char *printer, /* I - Printer */ char *option) /* I - Option to delete */ { ipp_t *request; /* IPP request */ char uri[HTTP_MAX_URI]; /* URI for printer/class */ /* * Build a IPP_OP_CUPS_ADD_MODIFY_PRINTER or IPP_OP_CUPS_ADD_MODIFY_CLASS request, which * requires the following attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name * option with deleteAttr tag */ if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS) request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS); else request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_DELETEATTR, option, 0); /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(http, request, "/admin/")); if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } else return (0); } /* * 'enable_printer()' - Enable a printer... */ static int /* O - 0 on success, 1 on fail */ enable_printer(http_t *http, /* I - Server connection */ char *printer) /* I - Printer to enable */ { ipp_t *request; /* IPP Request */ char uri[HTTP_MAX_URI]; /* URI for printer/class */ DEBUG_printf(("enable_printer(%p, \"%s\")\n", http, printer)); /* * Build a IPP_OP_CUPS_ADD_MODIFY_PRINTER or IPP_OP_CUPS_ADD_MODIFY_CLASS request, which * require the following attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name * printer-state * printer-is-accepting-jobs */ if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS) request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS); else request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PSTATE_IDLE); ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1); /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(http, request, "/admin/")); if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } else return (0); } /* * 'get_printer_ppd()' - Get an IPP Everywhere PPD file for the given URI. */ static char * /* O - Filename or NULL */ get_printer_ppd( const char *uri, /* I - Printer URI */ char *buffer, /* I - Filename buffer */ size_t bufsize, /* I - Size of filename buffer */ int *num_options, /* IO - Number of options */ cups_option_t **options) /* IO - Options */ { http_t *http; /* Connection to printer */ ipp_t *request, /* Get-Printer-Attributes request */ *response; /* Get-Printer-Attributes response */ ipp_attribute_t *attr; /* Attribute from response */ char resolved[1024], /* Resolved URI */ scheme[32], /* URI scheme */ userpass[256], /* Username:password */ host[256], /* Hostname */ resource[256]; /* Resource path */ int port; /* Port number */ static const char * const pattrs[] = /* Attributes to use */ { "job-template", "printer-defaults", "printer-description", "media-col-database" }; /* * Connect to the printer... */ if (strstr(uri, "._tcp")) { /* * Resolve URI... */ if (!_httpResolveURI(uri, resolved, sizeof(resolved), _HTTP_RESOLVE_DEFAULT, NULL, NULL)) { _cupsLangPrintf(stderr, _("%s: Unable to resolve \"%s\"."), "lpadmin", uri); return (NULL); } uri = resolved; } if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) { _cupsLangPrintf(stderr, _("%s: Bad printer URI \"%s\"."), "lpadmin", uri); return (NULL); } http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL); if (!http) { _cupsLangPrintf(stderr, _("%s: Unable to connect to \"%s:%d\": %s"), "lpadmin", host, port, cupsLastErrorString()); return (NULL); } /* * Send a Get-Printer-Attributes request... */ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs); response = cupsDoRequest(http, request, resource); if (_ppdCreateFromIPP(buffer, bufsize, response)) { if (!cupsGetOption("printer-geo-location", *num_options, *options) && (attr = ippFindAttribute(response, "printer-geo-location", IPP_TAG_URI)) != NULL) *num_options = cupsAddOption("printer-geo-location", ippGetString(attr, 0, NULL), *num_options, options); if (!cupsGetOption("printer-info", *num_options, *options) && (attr = ippFindAttribute(response, "printer-info", IPP_TAG_TEXT)) != NULL) *num_options = cupsAddOption("printer-info", ippGetString(attr, 0, NULL), *num_options, options); if (!cupsGetOption("printer-location", *num_options, *options) && (attr = ippFindAttribute(response, "printer-location", IPP_TAG_TEXT)) != NULL) *num_options = cupsAddOption("printer-location", ippGetString(attr, 0, NULL), *num_options, options); } else _cupsLangPrintf(stderr, _("%s: Unable to create PPD file: %s"), "lpadmin", strerror(errno)); ippDelete(response); httpClose(http); if (buffer[0]) return (buffer); else return (NULL); } /* * 'get_printer_type()' - Determine the printer type and URI. */ static cups_ptype_t /* O - printer-type value */ get_printer_type(http_t *http, /* I - Server connection */ char *printer, /* I - Printer name */ char *uri, /* I - URI buffer */ size_t urisize) /* I - Size of URI buffer */ { ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* printer-type attribute */ cups_ptype_t type; /* printer-type value */ /* * Build a GET_PRINTER_ATTRIBUTES request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requested-attributes * requesting-user-name */ httpAssembleURIf(HTTP_URI_CODING_ALL, uri, (int)urisize, "ipp", NULL, "localhost", ippPort(), "/printers/%s", printer); request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "printer-type"); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); /* * Do the request... */ response = cupsDoRequest(http, request, "/"); if ((attr = ippFindAttribute(response, "printer-type", IPP_TAG_ENUM)) != NULL) { type = (cups_ptype_t)attr->values[0].integer; if (type & CUPS_PRINTER_CLASS) httpAssembleURIf(HTTP_URI_CODING_ALL, uri, (int)urisize, "ipp", NULL, "localhost", ippPort(), "/classes/%s", printer); } else type = CUPS_PRINTER_LOCAL; ippDelete(response); return (type); } /* * 'set_printer_options()' - Set the printer options. */ static int /* O - 0 on success, 1 on fail */ set_printer_options( http_t *http, /* I - Server connection */ char *printer, /* I - Printer */ int num_options, /* I - Number of options */ cups_option_t *options, /* I - Options */ char *file) /* I - PPD file/interface script */ { ipp_t *request; /* IPP Request */ const char *ppdfile; /* PPD filename */ int ppdchanged = 0; /* PPD changed? */ ppd_file_t *ppd; /* PPD file */ ppd_choice_t *choice; /* Marked choice */ char uri[HTTP_MAX_URI], /* URI for printer/class */ line[1024], /* Line from PPD file */ keyword[1024], /* Keyword from Default line */ *keyptr, /* Pointer into keyword... */ tempfile[1024]; /* Temporary filename */ cups_file_t *in, /* PPD file */ *out; /* Temporary file */ const char *ppdname, /* ppd-name value */ *protocol, /* Old protocol option */ *customval, /* Custom option value */ *boolval; /* Boolean value */ int wrote_ipp_supplies = 0, /* Wrote cupsIPPSupplies keyword? */ wrote_snmp_supplies = 0,/* Wrote cupsSNMPSupplies keyword? */ copied_options = 0; /* Copied options? */ DEBUG_printf(("set_printer_options(http=%p, printer=\"%s\", num_options=%d, " "options=%p, file=\"%s\")\n", http, printer, num_options, options, file)); /* * Build a CUPS-Add-Modify-Printer or CUPS-Add-Modify-Class request, * which requires the following attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name * other options */ if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS) request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS); else request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); /* * Add the options... */ if (file) ppdfile = file; else if ((ppdname = cupsGetOption("ppd-name", num_options, options)) != NULL && strcmp(ppdname, "raw") && num_options > 1) { if ((ppdfile = cupsGetServerPPD(http, ppdname)) != NULL) { /* * Copy options array and remove ppd-name from it... */ cups_option_t *temp = NULL, *optr; int i, num_temp = 0; for (i = num_options, optr = options; i > 0; i --, optr ++) if (strcmp(optr->name, "ppd-name")) num_temp = cupsAddOption(optr->name, optr->value, num_temp, &temp); copied_options = 1; ppdchanged = 1; num_options = num_temp; options = temp; } } else if (request->request.op.operation_id == IPP_OP_CUPS_ADD_MODIFY_PRINTER) ppdfile = cupsGetPPD(printer); else ppdfile = NULL; cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION); cupsEncodeOptions2(request, num_options, options, IPP_TAG_PRINTER); if ((protocol = cupsGetOption("protocol", num_options, options)) != NULL) { if (!_cups_strcasecmp(protocol, "bcp")) ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor", NULL, "bcp"); else if (!_cups_strcasecmp(protocol, "tbcp")) ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor", NULL, "tbcp"); } if (ppdfile) { /* * Set default options in the PPD file... */ if ((ppd = ppdOpenFile(ppdfile)) == NULL) { int linenum; /* Line number of error */ ppd_status_t status = ppdLastError(&linenum); /* Status code */ _cupsLangPrintf(stderr, _("lpadmin: Unable to open PPD \"%s\": %s on line %d."), ppdfile, ppdErrorString(status), linenum); } ppdMarkDefaults(ppd); cupsMarkOptions(ppd, num_options, options); if ((out = cupsTempFile2(tempfile, sizeof(tempfile))) == NULL) { _cupsLangPrintError(NULL, _("lpadmin: Unable to create temporary file")); ippDelete(request); if (ppdfile != file) unlink(ppdfile); if (copied_options) cupsFreeOptions(num_options, options); return (1); } if ((in = cupsFileOpen(ppdfile, "r")) == NULL) { _cupsLangPrintf(stderr, _("lpadmin: Unable to open PPD file \"%s\" - %s"), ppdfile, strerror(errno)); ippDelete(request); if (ppdfile != file) unlink(ppdfile); if (copied_options) cupsFreeOptions(num_options, options); cupsFileClose(out); unlink(tempfile); return (1); } while (cupsFileGets(in, line, sizeof(line))) { if (!strncmp(line, "*cupsIPPSupplies:", 17) && (boolval = cupsGetOption("cupsIPPSupplies", num_options, options)) != NULL) { wrote_ipp_supplies = 1; cupsFilePrintf(out, "*cupsIPPSupplies: %s\n", (!_cups_strcasecmp(boolval, "true") || !_cups_strcasecmp(boolval, "yes") || !_cups_strcasecmp(boolval, "on")) ? "True" : "False"); } else if (!strncmp(line, "*cupsSNMPSupplies:", 18) && (boolval = cupsGetOption("cupsSNMPSupplies", num_options, options)) != NULL) { wrote_snmp_supplies = 1; cupsFilePrintf(out, "*cupsSNMPSupplies: %s\n", (!_cups_strcasecmp(boolval, "true") || !_cups_strcasecmp(boolval, "yes") || !_cups_strcasecmp(boolval, "on")) ? "True" : "False"); } else if (strncmp(line, "*Default", 8)) cupsFilePrintf(out, "%s\n", line); else { /* * Get default option name... */ strlcpy(keyword, line + 8, sizeof(keyword)); for (keyptr = keyword; *keyptr; keyptr ++) if (*keyptr == ':' || isspace(*keyptr & 255)) break; *keyptr++ = '\0'; while (isspace(*keyptr & 255)) keyptr ++; if (!strcmp(keyword, "PageRegion") || !strcmp(keyword, "PageSize") || !strcmp(keyword, "PaperDimension") || !strcmp(keyword, "ImageableArea")) { if ((choice = ppdFindMarkedChoice(ppd, "PageSize")) == NULL) choice = ppdFindMarkedChoice(ppd, "PageRegion"); } else choice = ppdFindMarkedChoice(ppd, keyword); if (choice && strcmp(choice->choice, keyptr)) { if (strcmp(choice->choice, "Custom")) { cupsFilePrintf(out, "*Default%s: %s\n", keyword, choice->choice); ppdchanged = 1; } else if ((customval = cupsGetOption(keyword, num_options, options)) != NULL) { cupsFilePrintf(out, "*Default%s: %s\n", keyword, customval); ppdchanged = 1; } else cupsFilePrintf(out, "%s\n", line); } else cupsFilePrintf(out, "%s\n", line); } } if (!wrote_ipp_supplies && (boolval = cupsGetOption("cupsIPPSupplies", num_options, options)) != NULL) { cupsFilePrintf(out, "*cupsIPPSupplies: %s\n", (!_cups_strcasecmp(boolval, "true") || !_cups_strcasecmp(boolval, "yes") || !_cups_strcasecmp(boolval, "on")) ? "True" : "False"); } if (!wrote_snmp_supplies && (boolval = cupsGetOption("cupsSNMPSupplies", num_options, options)) != NULL) { cupsFilePrintf(out, "*cupsSNMPSupplies: %s\n", (!_cups_strcasecmp(boolval, "true") || !_cups_strcasecmp(boolval, "yes") || !_cups_strcasecmp(boolval, "on")) ? "True" : "False"); } cupsFileClose(in); cupsFileClose(out); ppdClose(ppd); /* * Do the request... */ ippDelete(cupsDoFileRequest(http, request, "/admin/", ppdchanged ? tempfile : file)); /* * Clean up temp files... (TODO: catch signals in case we CTRL-C during * lpadmin) */ if (ppdfile != file) unlink(ppdfile); unlink(tempfile); } else { /* * No PPD file - just set the options... */ ippDelete(cupsDoRequest(http, request, "/admin/")); } if (copied_options) cupsFreeOptions(num_options, options); /* * Check the response... */ if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } else return (0); } /* * 'validate_name()' - Make sure the printer name only contains valid chars. */ static int /* O - 0 if name is no good, 1 if name is good */ validate_name(const char *name) /* I - Name to check */ { const char *ptr; /* Pointer into name */ /* * Scan the whole name... */ for (ptr = name; *ptr; ptr ++) if (*ptr == '@') break; else if ((*ptr >= 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/' || *ptr == '\\' || *ptr == '?' || *ptr == '\'' || *ptr == '\"' || *ptr == '#') return (0); /* * All the characters are good; validate the length, too... */ return ((ptr - name) < 128); } cups-2.2.7/systemv/lpinfo.c000664 000765 000024 00000030116 13255074424 016321 0ustar00msweetstaff000000 000000 /* * "lpinfo" command for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include /* * Local functions... */ static void device_cb(const char *device_clas, const char *device_id, const char *device_info, const char *device_make_and_model, const char *device_uri, const char *device_location, void *user_data); static int show_devices(int long_status, int timeout, const char *include_schemes, const char *exclude_schemes); static int show_models(int long_status, const char *device_id, const char *language, const char *make_model, const char *product, const char *include_schemes, const char *exclude_schemes); /* * 'main()' - Parse options and show status information. */ int main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ int long_status; /* Long listing? */ const char *opt, /* Option pointer */ *device_id, /* 1284 device ID */ *language, /* Language */ *make_model, /* Make and model */ *product, /* Product */ *include_schemes, /* Schemes to include */ *exclude_schemes; /* Schemes to exclude */ int timeout; /* Device timeout */ _cupsSetLocale(argv); long_status = 0; device_id = NULL; language = NULL; make_model = NULL; product = NULL; include_schemes = CUPS_INCLUDE_ALL; exclude_schemes = CUPS_EXCLUDE_NONE; timeout = CUPS_TIMEOUT_DEFAULT; for (i = 1; i < argc; i ++) { if (!strcmp(argv[i], "--device-id")) { i ++; if (i < argc) device_id = argv[i]; else { _cupsLangPuts(stderr, _("lpinfo: Expected 1284 device ID string after \"--device-id\".")); return (1); } } else if (!strncmp(argv[i], "--device-id=", 12) && argv[i][12]) { device_id = argv[i] + 12; } else if (!strcmp(argv[i], "--exclude-schemes")) { i ++; if (i < argc) exclude_schemes = argv[i]; else { _cupsLangPuts(stderr, _("lpinfo: Expected scheme list after \"--exclude-schemes\".")); return (1); } } else if (!strncmp(argv[i], "--exclude-schemes=", 18) && argv[i][18]) { exclude_schemes = argv[i] + 18; } else if (!strcmp(argv[i], "--include-schemes")) { i ++; if (i < argc) include_schemes = argv[i]; else { _cupsLangPuts(stderr, _("lpinfo: Expected scheme list after \"--include-schemes\".")); return (1); } } else if (!strncmp(argv[i], "--include-schemes=", 18) && argv[i][18]) { include_schemes = argv[i] + 18; } else if (!strcmp(argv[i], "--language")) { i ++; if (i < argc) language = argv[i]; else { _cupsLangPuts(stderr, _("lpinfo: Expected language after \"--language\".")); return (1); } } else if (!strncmp(argv[i], "--language=", 11) && argv[i][11]) { language = argv[i] + 11; } else if (!strcmp(argv[i], "--make-and-model")) { i ++; if (i < argc) make_model= argv[i]; else { _cupsLangPuts(stderr, _("lpinfo: Expected make and model after \"--make-and-model\".")); return (1); } } else if (!strncmp(argv[i], "--make-and-model=", 17) && argv[i][17]) { make_model = argv[i] + 17; } else if (!strcmp(argv[i], "--product")) { i ++; if (i < argc) product = argv[i]; else { _cupsLangPuts(stderr, _("lpinfo: Expected product string after \"--product\".")); return (1); } } else if (!strncmp(argv[i], "--product=", 10) && argv[i][10]) { product = argv[i] + 10; } else if (!strcmp(argv[i], "--timeout")) { i ++; if (i < argc) timeout = atoi(argv[i]); else { _cupsLangPuts(stderr, _("lpinfo: Expected timeout after \"--timeout\".")); return (1); } } else if (!strncmp(argv[i], "--timeout=", 10) && argv[i][10]) { timeout = atoi(argv[i] + 10); } else if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'E' : /* Encrypt */ #ifdef HAVE_SSL cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]); #endif /* HAVE_SSL */ break; case 'h' : /* Connect to host */ if (opt[1] != '\0') { cupsSetServer(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("Error: need hostname after \"-h\" option.")); return (1); } cupsSetServer(argv[i]); } break; case 'l' : /* Show long listing */ long_status = 1; break; case 'm' : /* Show models */ if (show_models(long_status, device_id, language, make_model, product, include_schemes, exclude_schemes)) return (1); break; case 'v' : /* Show available devices */ if (show_devices(long_status, timeout, include_schemes, exclude_schemes)) return (1); break; default : _cupsLangPrintf(stderr, _("%s: Unknown option \"%c\"."), argv[0], *opt); return (1); } } } else { _cupsLangPrintf(stderr, _("%s: Unknown argument \"%s\"."), argv[0], argv[i]); return (1); } } return (0); } /* * 'device_cb()' - Device callback. */ static void device_cb( const char *device_class, /* I - device-class string */ const char *device_id, /* I - device-id string */ const char *device_info, /* I - device-info string */ const char *device_make_and_model, /* I - device-make-and-model string */ const char *device_uri, /* I - device-uri string */ const char *device_location, /* I - device-location string */ void *user_data) /* I - User data */ { int *long_status; /* Show verbose info? */ /* * Display the device... */ long_status = (int *)user_data; if (*long_status) { _cupsLangPrintf(stdout, _("Device: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s"), device_uri, device_class, device_info, device_make_and_model, device_id, device_location); } else _cupsLangPrintf(stdout, "%s %s", device_class, device_uri); } /* * 'show_devices()' - Show available devices. */ static int /* O - 0 on success, 1 on failure */ show_devices( int long_status, /* I - Long status report? */ int timeout, /* I - Timeout */ const char *include_schemes, /* I - List of schemes to include */ const char *exclude_schemes) /* I - List of schemes to exclude */ { if (cupsGetDevices(CUPS_HTTP_DEFAULT, timeout, include_schemes, exclude_schemes, device_cb, &long_status) != IPP_OK) { _cupsLangPrintf(stderr, "lpinfo: %s", cupsLastErrorString()); return (1); } return (0); } /* * 'show_models()' - Show available PPDs. */ static int /* O - 0 on success, 1 on failure */ show_models( int long_status, /* I - Long status report? */ const char *device_id, /* I - 1284 device ID */ const char *language, /* I - Language */ const char *make_model, /* I - Make and model */ const char *product, /* I - Product */ const char *include_schemes, /* I - List of schemes to include */ const char *exclude_schemes) /* I - List of schemes to exclude */ { ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr; /* Current attribute */ const char *ppd_device_id, /* Pointer to ppd-device-id */ *ppd_language, /* Pointer to ppd-natural-language */ *ppd_make_model, /* Pointer to ppd-make-and-model */ *ppd_name; /* Pointer to ppd-name */ cups_option_t option; /* in/exclude-schemes option */ /* * Build a CUPS_GET_PPDS request... */ request = ippNewRequest(CUPS_GET_PPDS); if (device_id) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_TEXT, "ppd-device-id", NULL, device_id); if (language) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "ppd-language", NULL, language); if (make_model) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_TEXT, "ppd-make-and-model", NULL, make_model); if (product) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_TEXT, "ppd-product", NULL, product); if (include_schemes) { option.name = "include-schemes"; option.value = (char *)include_schemes; cupsEncodeOptions2(request, 1, &option, IPP_TAG_OPERATION); } if (exclude_schemes) { option.name = "exclude-schemes"; option.value = (char *)exclude_schemes; cupsEncodeOptions2(request, 1, &option, IPP_TAG_OPERATION); } /* * Do the request and get back a response... */ if ((response = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/")) != NULL) { /* * Loop through the device list and display them... */ if (response->request.status.status_code > IPP_OK_CONFLICT) { _cupsLangPrintf(stderr, "lpinfo: %s", cupsLastErrorString()); ippDelete(response); return (1); } for (attr = response->attrs; attr != NULL; attr = attr->next) { /* * Skip leading attributes until we hit a PPD... */ while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) attr = attr->next; if (attr == NULL) break; /* * Pull the needed attributes from this PPD... */ ppd_device_id = "NONE"; ppd_language = NULL; ppd_make_model = NULL; ppd_name = NULL; while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) { if (!strcmp(attr->name, "ppd-device-id") && attr->value_tag == IPP_TAG_TEXT) ppd_device_id = attr->values[0].string.text; else if (!strcmp(attr->name, "ppd-natural-language") && attr->value_tag == IPP_TAG_LANGUAGE) ppd_language = attr->values[0].string.text; else if (!strcmp(attr->name, "ppd-make-and-model") && attr->value_tag == IPP_TAG_TEXT) ppd_make_model = attr->values[0].string.text; else if (!strcmp(attr->name, "ppd-name") && attr->value_tag == IPP_TAG_NAME) ppd_name = attr->values[0].string.text; attr = attr->next; } /* * See if we have everything needed... */ if (ppd_language == NULL || ppd_make_model == NULL || ppd_name == NULL) { if (attr == NULL) break; else continue; } /* * Display the device... */ if (long_status) { _cupsLangPrintf(stdout, _("Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s"), ppd_name, ppd_language, ppd_make_model, ppd_device_id); } else _cupsLangPrintf(stdout, "%s %s", ppd_name, ppd_make_model); if (attr == NULL) break; } ippDelete(response); /* * Show the "everywhere" model, which is handled by the lpadmin command... */ if ((!include_schemes || strstr(include_schemes, "everywhere")) && (!exclude_schemes || !strstr(exclude_schemes, "everywhere"))) { if (long_status) { _cupsLangPrintf(stdout, _("Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s"), "everywhere", cupsLangDefault()->language, "IPP Everywhere", "CMD:PwgRaster"); } else _cupsLangPuts(stdout, "everywhere IPP Everywhere"); } } else { _cupsLangPrintf(stderr, "lpinfo: %s", cupsLastErrorString()); return (1); } return (0); } cups-2.2.7/systemv/lpmove.c000664 000765 000024 00000011526 13255074424 016340 0ustar00msweetstaff000000 000000 /* * "lpmove" command for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include /* * Local functions... */ static int move_job(http_t *http, const char *src, int jobid, const char *dest); /* * 'main()' - Parse options and show status information. */ int main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ http_t *http; /* Connection to server */ const char *opt, /* Option pointer */ *job; /* Job name */ int jobid; /* Job ID */ int num_dests; /* Number of destinations */ cups_dest_t *dests; /* Destinations */ const char *src, /* Original queue */ *dest; /* New destination */ _cupsSetLocale(argv); dest = NULL; dests = NULL; job = NULL; jobid = 0; num_dests = 0; src = NULL; for (i = 1; i < argc; i ++) { if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'E' : /* Encrypt */ #ifdef HAVE_SSL cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]); #endif /* HAVE_SSL */ break; case 'h' : /* Connect to host */ if (opt[1] != '\0') { cupsSetServer(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPuts(stderr, _("Error: need hostname after \"-h\" option.")); return (1); } cupsSetServer(argv[i]); } break; default : _cupsLangPrintf(stderr, _("%s: Unknown option \"%c\"."), argv[0], *opt); return (1); } } } else if (!jobid && !src) { if (num_dests == 0) num_dests = cupsGetDests(&dests); if ((job = strrchr(argv[i], '-')) != NULL && cupsGetDest(argv[i], NULL, num_dests, dests) == NULL) jobid = atoi(job + 1); else if (isdigit(argv[i][0] & 255) && !cupsGetDest(argv[i], NULL, num_dests, dests)) jobid = atoi(argv[i]); else src = argv[i]; } else if (dest == NULL) dest = argv[i]; else { _cupsLangPrintf(stderr, _("lpmove: Unknown argument \"%s\"."), argv[i]); return (1); } } if ((!jobid && !src) || !dest) { _cupsLangPuts(stdout, _("Usage: lpmove job/src dest")); return (1); } http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption()); if (http == NULL) { _cupsLangPrintf(stderr, _("lpmove: Unable to connect to server: %s"), strerror(errno)); return (1); } return (move_job(http, src, jobid, dest)); } /* * 'move_job()' - Move a job. */ static int /* O - 0 on success, 1 on error */ move_job(http_t *http, /* I - HTTP connection to server */ const char *src, /* I - Source queue */ int jobid, /* I - Job ID */ const char *dest) /* I - Destination queue */ { ipp_t *request; /* IPP Request */ char job_uri[HTTP_MAX_URI], /* job-uri */ printer_uri[HTTP_MAX_URI]; /* job-printer-uri */ if (!http) return (1); /* * Build a CUPS_MOVE_JOB request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * job-uri/printer-uri * job-printer-uri * requesting-user-name */ request = ippNewRequest(CUPS_MOVE_JOB); if (jobid) { snprintf(job_uri, sizeof(job_uri), "ipp://localhost/jobs/%d", jobid); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, job_uri); } else { httpAssembleURIf(HTTP_URI_CODING_ALL, job_uri, sizeof(job_uri), "ipp", NULL, "localhost", 0, "/printers/%s", src); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, job_uri); } ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri), "ipp", NULL, "localhost", 0, "/printers/%s", dest); ippAddString(request, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, printer_uri); /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(http, request, "/jobs")); if (cupsLastError() > IPP_OK_CONFLICT) { _cupsLangPrintf(stderr, "lpmove: %s", cupsLastErrorString()); return (1); } else return (0); } cups-2.2.7/systemv/lpoptions.c000664 000765 000024 00000030524 13255074424 017064 0ustar00msweetstaff000000 000000 /* * Printer option program for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include /* * Local functions... */ static void list_group(ppd_file_t *ppd, ppd_group_t *group); static void list_options(cups_dest_t *dest); static void usage(void) __attribute__((noreturn)); /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i, j; /* Looping vars */ int changes; /* Did we make changes? */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ int num_dests; /* Number of destinations */ cups_dest_t *dests; /* Destinations */ cups_dest_t *dest; /* Current destination */ char *opt, /* Option pointer */ *printer, /* Printer name */ *instance, /* Instance name */ *option; /* Current option */ _cupsSetLocale(argv); /* * Loop through the command-line arguments... */ dest = NULL; num_dests = 0; dests = NULL; num_options = 0; options = NULL; changes = 0; for (i = 1; i < argc; i ++) { if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'd' : /* -d printer */ if (opt[1] != '\0') { printer = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) usage(); printer = argv[i]; } if ((instance = strrchr(printer, '/')) != NULL) *instance++ = '\0'; if (num_dests == 0) num_dests = cupsGetDests(&dests); if (num_dests == 0 || !dests || (dest = cupsGetDest(printer, instance, num_dests, dests)) == NULL) { _cupsLangPuts(stderr, _("lpoptions: Unknown printer or class.")); return (1); } /* * Set the default destination... */ for (j = 0; j < num_dests; j ++) dests[j].is_default = 0; dest->is_default = 1; cupsSetDests(num_dests, dests); for (j = 0; j < dest->num_options; j ++) if (cupsGetOption(dest->options[j].name, num_options, options) == NULL) num_options = cupsAddOption(dest->options[j].name, dest->options[j].value, num_options, &options); break; case 'h' : /* -h server */ if (opt[1] != '\0') { cupsSetServer(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) usage(); cupsSetServer(argv[i]); } break; case 'E' : /* Encrypt connection */ cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); break; case 'l' : /* -l (list options) */ if (dest == NULL) { if (num_dests == 0) num_dests = cupsGetDests(&dests); if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) == NULL) dest = dests; } if (dest == NULL) _cupsLangPuts(stderr, _("lpoptions: No printers.")); else list_options(dest); changes = -1; break; case 'o' : /* -o option[=value] */ if (dest == NULL) { if (num_dests == 0) num_dests = cupsGetDests(&dests); if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) == NULL) dest = dests; if (dest == NULL) { _cupsLangPuts(stderr, _("lpoptions: No printers.")); return (1); } for (j = 0; j < dest->num_options; j ++) if (cupsGetOption(dest->options[j].name, num_options, options) == NULL) num_options = cupsAddOption(dest->options[j].name, dest->options[j].value, num_options, &options); } if (opt[1] != '\0') { num_options = cupsParseOptions(opt + 1, num_options, &options); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) usage(); num_options = cupsParseOptions(argv[i], num_options, &options); } changes = 1; break; case 'p' : /* -p printer */ if (opt[1] != '\0') { printer = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) usage(); printer = argv[i]; } if ((instance = strrchr(printer, '/')) != NULL) *instance++ = '\0'; if (num_dests == 0) num_dests = cupsGetDests(&dests); if ((dest = cupsGetDest(printer, instance, num_dests, dests)) == NULL) { num_dests = cupsAddDest(printer, instance, num_dests, &dests); dest = cupsGetDest(printer, instance, num_dests, dests); if (dest == NULL) { _cupsLangPrintf(stderr, _("lpoptions: Unable to add printer or instance: %s"), strerror(errno)); return (1); } } for (j = 0; j < dest->num_options; j ++) if (cupsGetOption(dest->options[j].name, num_options, options) == NULL) num_options = cupsAddOption(dest->options[j].name, dest->options[j].value, num_options, &options); break; case 'r' : /* -r option (remove) */ if (dest == NULL) { if (num_dests == 0) num_dests = cupsGetDests(&dests); if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) == NULL) dest = dests; if (dest == NULL) { _cupsLangPuts(stderr, _("lpoptions: No printers.")); return (1); } for (j = 0; j < dest->num_options; j ++) if (cupsGetOption(dest->options[j].name, num_options, options) == NULL) num_options = cupsAddOption(dest->options[j].name, dest->options[j].value, num_options, &options); } if (opt[1] != '\0') { option = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) usage(); option = argv[i]; } num_options = cupsRemoveOption(option, num_options, &options); changes = 1; break; case 'x' : /* -x printer */ if (opt[1] != '\0') { printer = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) usage(); printer = argv[i]; } if ((instance = strrchr(printer, '/')) != NULL) *instance++ = '\0'; if (num_dests == 0) num_dests = cupsGetDests(&dests); num_dests = cupsRemoveDest(printer, instance, num_dests, &dests); cupsSetDests(num_dests, dests); dest = NULL; changes = -1; break; default : usage(); } } } else { usage(); } } if (num_dests == 0) num_dests = cupsGetDests(&dests); if (dest == NULL) { if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) != NULL) { for (j = 0; j < dest->num_options; j ++) if (cupsGetOption(dest->options[j].name, num_options, options) == NULL) num_options = cupsAddOption(dest->options[j].name, dest->options[j].value, num_options, &options); } } if (dest == NULL) return (0); if (changes > 0) { /* * Set printer options... */ cupsFreeOptions(dest->num_options, dest->options); dest->num_options = num_options; dest->options = options; cupsSetDests(num_dests, dests); } else if (changes == 0) { char buffer[10240], /* String for options */ *ptr; /* Pointer into string */ num_options = dest->num_options; options = dest->options; for (i = 0, ptr = buffer; ptr < (buffer + sizeof(buffer) - 1) && i < num_options; i ++) { if (i) *ptr++ = ' '; if (!options[i].value[0]) strlcpy(ptr, options[i].name, sizeof(buffer) - (size_t)(ptr - buffer)); else if (strchr(options[i].value, ' ') != NULL || strchr(options[i].value, '\t') != NULL) snprintf(ptr, sizeof(buffer) - (size_t)(ptr - buffer), "%s=\'%s\'", options[i].name, options[i].value); else snprintf(ptr, sizeof(buffer) - (size_t)(ptr - buffer), "%s=%s", options[i].name, options[i].value); ptr += strlen(ptr); } _cupsLangPuts(stdout, buffer); } return (0); } /* * 'list_group()' - List printer-specific options from the PPD group. */ static void list_group(ppd_file_t *ppd, /* I - PPD file */ ppd_group_t *group) /* I - Group to show */ { int i, j; /* Looping vars */ ppd_option_t *option; /* Current option */ ppd_choice_t *choice; /* Current choice */ ppd_group_t *subgroup; /* Current subgroup */ char buffer[10240], /* Option string buffer */ *ptr; /* Pointer into option string */ for (i = group->num_options, option = group->options; i > 0; i --, option ++) { if (!_cups_strcasecmp(option->keyword, "PageRegion")) continue; snprintf(buffer, sizeof(buffer), "%s/%s:", option->keyword, option->text); for (j = option->num_choices, choice = option->choices, ptr = buffer + strlen(buffer); j > 0 && ptr < (buffer + sizeof(buffer) - 1); j --, choice ++) { if (!_cups_strcasecmp(choice->choice, "Custom")) { ppd_coption_t *coption; /* Custom option */ ppd_cparam_t *cparam; /* Custom parameter */ static const char * const types[] = { /* Parameter types */ "CURVE", "INTEGER", "INVCURVE", "PASSCODE", "PASSWORD", "POINTS", "REAL", "STRING" }; if ((coption = ppdFindCustomOption(ppd, option->keyword)) == NULL || cupsArrayCount(coption->params) == 0) snprintf(ptr, sizeof(buffer) - (size_t)(ptr - buffer), " %sCustom", choice->marked ? "*" : ""); else if (!_cups_strcasecmp(option->keyword, "PageSize") || !_cups_strcasecmp(option->keyword, "PageRegion")) snprintf(ptr, sizeof(buffer) - (size_t)(ptr - buffer), " %sCustom.WIDTHxHEIGHT", choice->marked ? "*" : ""); else { cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params); if (cupsArrayCount(coption->params) == 1) snprintf(ptr, sizeof(buffer) - (size_t)(ptr - buffer), " %sCustom.%s", choice->marked ? "*" : "", types[cparam->type]); else { const char *prefix; /* Prefix string */ if (choice->marked) prefix = " *{"; else prefix = " {"; while (cparam) { snprintf(ptr, sizeof(buffer) - (size_t)(ptr - buffer), "%s%s=%s", prefix, cparam->name, types[cparam->type]); cparam = (ppd_cparam_t *)cupsArrayNext(coption->params); prefix = " "; ptr += strlen(ptr); } if (ptr < (buffer + sizeof(buffer) - 1)) strlcpy(ptr, "}", sizeof(buffer) - (size_t)(ptr - buffer)); } } } else if (choice->marked) snprintf(ptr, sizeof(buffer) - (size_t)(ptr - buffer), " *%s", choice->choice); else snprintf(ptr, sizeof(buffer) - (size_t)(ptr - buffer), " %s", choice->choice); ptr += strlen(ptr); } _cupsLangPuts(stdout, buffer); } for (i = group->num_subgroups, subgroup = group->subgroups; i > 0; i --, subgroup ++) list_group(ppd, subgroup); } /* * 'list_options()' - List printer-specific options from the PPD file. */ static void list_options(cups_dest_t *dest) /* I - Destination to list */ { int i; /* Looping var */ const char *filename; /* PPD filename */ ppd_file_t *ppd; /* PPD data */ ppd_group_t *group; /* Current group */ if ((filename = cupsGetPPD(dest->name)) == NULL) { _cupsLangPrintf(stderr, _("lpoptions: Unable to get PPD file for %s: %s"), dest->name, cupsLastErrorString()); return; } if ((ppd = ppdOpenFile(filename)) == NULL) { unlink(filename); _cupsLangPrintf(stderr, _("lpoptions: Unable to open PPD file for %s."), dest->name); return; } ppdMarkDefaults(ppd); cupsMarkOptions(ppd, dest->num_options, dest->options); for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++) list_group(ppd, group); ppdClose(ppd); unlink(filename); } /* * 'usage()' - Show program usage and exit. */ static void usage(void) { _cupsLangPuts(stdout, _("Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o " "option[=value] ...\n" " lpoptions [-h server] [-E] -x printer")); exit(1); } cups-2.2.7/systemv/lpstat.c000664 000765 000024 00000151211 13255074424 016341 0ustar00msweetstaff000000 000000 /* * "lpstat" command for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include /* * Local functions... */ static void check_dest(const char *command, const char *name, int *num_dests, cups_dest_t **dests); static int match_list(const char *list, const char *name); static int show_accepting(const char *printers, int num_dests, cups_dest_t *dests); static int show_classes(const char *dests); static void show_default(cups_dest_t *dest); static int show_devices(const char *printers, int num_dests, cups_dest_t *dests); static int show_jobs(const char *dests, const char *users, int long_status, int ranking, const char *which); static int show_printers(const char *printers, int num_dests, cups_dest_t *dests, int long_status); static void show_scheduler(void); /* * 'main()' - Parse options and show status information. */ int main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i, /* Looping var */ status; /* Exit status */ char *opt; /* Option pointer */ int num_dests; /* Number of user destinations */ cups_dest_t *dests; /* User destinations */ int long_status; /* Long status report? */ int ranking; /* Show job ranking? */ const char *which; /* Which jobs to show? */ char op; /* Last operation on command-line */ _cupsSetLocale(argv); /* * Parse command-line options... */ num_dests = 0; dests = NULL; long_status = 0; ranking = 0; status = 0; which = "not-completed"; op = 0; for (i = 1; i < argc; i ++) { if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'D' : /* Show description */ long_status = 1; break; case 'E' : /* Encrypt */ #ifdef HAVE_SSL cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]); #endif /* HAVE_SSL */ break; case 'H' : /* Show server and port */ if (cupsServer()[0] == '/') _cupsLangPuts(stdout, cupsServer()); else _cupsLangPrintf(stdout, "%s:%d", cupsServer(), ippPort()); op = 'H'; break; case 'P' : /* Show paper types */ op = 'P'; break; case 'R' : /* Show ranking */ ranking = 1; break; case 'S' : /* Show charsets */ op = 'S'; if (!argv[i][2]) i ++; break; case 'U' : /* Username */ if (opt[1] != '\0') { cupsSetUser(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected username after \"-U\" option."), argv[0]); return (1); } cupsSetUser(argv[i]); } break; case 'W' : /* Show which jobs? */ if (opt[1] != '\0') { which = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" option."), argv[0]); return (1); } which = argv[i]; } if (strcmp(which, "completed") && strcmp(which, "not-completed") && strcmp(which, "all")) { _cupsLangPrintf(stderr, _("%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" option."), argv[0]); return (1); } break; case 'a' : /* Show acceptance status */ op = 'a'; if (opt[1] != '\0') { check_dest(argv[0], opt + 1, &num_dests, &dests); status |= show_accepting(opt + 1, num_dests, dests); opt += strlen(opt) - 1; } else if ((i + 1) < argc && argv[i + 1][0] != '-') { i ++; check_dest(argv[0], argv[i], &num_dests, &dests); status |= show_accepting(argv[i], num_dests, dests); } else { if (num_dests <= 1) { cupsFreeDests(num_dests, dests); num_dests = cupsGetDests(&dests); if (num_dests == 0 && (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), argv[0]); return (1); } } status |= show_accepting(NULL, num_dests, dests); } break; case 'c' : /* Show classes and members */ op = 'c'; if (opt[1] != '\0') { check_dest(argv[0], opt + 1, &num_dests, &dests); status |= show_classes(opt + 1); opt += strlen(opt) - 1; } else if ((i + 1) < argc && argv[i + 1][0] != '-') { i ++; check_dest(argv[0], argv[i], &num_dests, &dests); status |= show_classes(argv[i]); } else status |= show_classes(NULL); break; case 'd' : /* Show default destination */ op = 'd'; if (num_dests != 1 || !dests[0].is_default) { cupsFreeDests(num_dests, dests); dests = cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL); num_dests = dests ? 1 : 0; if (num_dests == 0 && (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), argv[0]); return (1); } } show_default(dests); break; case 'e' : /* List destinations */ { cups_dest_t *temp = NULL, *dest; int j, num_temp = cupsGetDests(&temp); op = 'e'; for (j = num_temp, dest = temp; j > 0; j --, dest ++) { if (dest->instance) printf("%s/%s", dest->name, dest->instance); else fputs(dest->name, stdout); if (long_status) { const char *printer_uri_supported = cupsGetOption("printer-uri-supported", dest->num_options, dest->options); const char *printer_is_temporary = cupsGetOption("printer-is-temporary", dest->num_options, dest->options); const char *type = "network"; if (printer_is_temporary && !strcmp(printer_is_temporary, "true")) type = "temporary"; else if (printer_uri_supported) type = "permanent"; printf(" %s %s %s\n", type, printer_uri_supported ? printer_uri_supported : "none", cupsGetOption("device-uri", dest->num_options, dest->options)); } else putchar('\n'); } cupsFreeDests(num_temp, temp); } break; case 'f' : /* Show forms */ op = 'f'; if (opt[1] != '\0') { opt += strlen(opt) - 1; } else { i ++; if (i >= argc) return (1); } break; case 'h' : /* Connect to host */ if (opt[1] != '\0') { cupsSetServer(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected hostname after \"-h\" option."), argv[0]); return (1); } cupsSetServer(argv[i]); } break; case 'l' : /* Long status or long job status */ long_status = 2; break; case 'o' : /* Show jobs by destination */ op = 'o'; if (opt[1]) { check_dest(argv[0], opt + 1, &num_dests, &dests); status |= show_jobs(opt + 1, NULL, long_status, ranking, which); opt += strlen(opt) - 1; } else if ((i + 1) < argc && argv[i + 1][0] != '-') { i ++; check_dest(argv[0], argv[i], &num_dests, &dests); status |= show_jobs(argv[i], NULL, long_status, ranking, which); } else status |= show_jobs(NULL, NULL, long_status, ranking, which); break; case 'p' : /* Show printers */ op = 'p'; if (opt[1] != '\0') { check_dest(argv[0], opt + 1, &num_dests, &dests); status |= show_printers(opt + 1, num_dests, dests, long_status); opt += strlen(opt) - 1; } else if ((i + 1) < argc && argv[i + 1][0] != '-') { i ++; check_dest(argv[0], argv[i], &num_dests, &dests); status |= show_printers(argv[i], num_dests, dests, long_status); } else { if (num_dests <= 1) { cupsFreeDests(num_dests, dests); num_dests = cupsGetDests(&dests); if (num_dests == 0 && (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), argv[0]); return (1); } } status |= show_printers(NULL, num_dests, dests, long_status); } break; case 'r' : /* Show scheduler status */ op = 'r'; show_scheduler(); break; case 's' : /* Show summary */ op = 's'; if (num_dests <= 1) { cupsFreeDests(num_dests, dests); num_dests = cupsGetDests(&dests); if (num_dests == 0 && (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), argv[0]); return (1); } } show_default(cupsGetDest(NULL, NULL, num_dests, dests)); status |= show_classes(NULL); status |= show_devices(NULL, num_dests, dests); break; case 't' : /* Show all info */ op = 't'; if (num_dests <= 1) { cupsFreeDests(num_dests, dests); num_dests = cupsGetDests(&dests); if (num_dests == 0 && (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), argv[0]); return (1); } } show_scheduler(); show_default(cupsGetDest(NULL, NULL, num_dests, dests)); status |= show_classes(NULL); status |= show_devices(NULL, num_dests, dests); status |= show_accepting(NULL, num_dests, dests); status |= show_printers(NULL, num_dests, dests, long_status); status |= show_jobs(NULL, NULL, long_status, ranking, which); break; case 'u' : /* Show jobs by user */ op = 'u'; if (opt[1] != '\0') { status |= show_jobs(NULL, opt + 1, long_status, ranking, which); opt += strlen(opt) - 1; } else if ((i + 1) < argc && argv[i + 1][0] != '-') { i ++; status |= show_jobs(NULL, argv[i], long_status, ranking, which); } else status |= show_jobs(NULL, NULL, long_status, ranking, which); break; case 'v' : /* Show printer devices */ op = 'v'; if (opt[1] != '\0') { check_dest(argv[0], opt + 1, &num_dests, &dests); status |= show_devices(opt + 1, num_dests, dests); opt += strlen(opt) - 1; } else if ((i + 1) < argc && argv[i + 1][0] != '-') { i ++; check_dest(argv[0], argv[i], &num_dests, &dests); status |= show_devices(argv[i], num_dests, dests); } else { if (num_dests <= 1) { cupsFreeDests(num_dests, dests); num_dests = cupsGetDests(&dests); if (num_dests == 0 && (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), argv[0]); return (1); } } status |= show_devices(NULL, num_dests, dests); } break; default : _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%c\"."), argv[0], argv[i][1]); return (1); } } } else { status |= show_jobs(argv[i], NULL, long_status, ranking, which); op = 'o'; } } if (!op) status |= show_jobs(NULL, cupsUser(), long_status, ranking, which); return (status); } /* * 'check_dest()' - Verify that the named destination(s) exists. */ static void check_dest(const char *command, /* I - Command name */ const char *name, /* I - List of printer/class names */ int *num_dests, /* IO - Number of destinations */ cups_dest_t **dests) /* IO - Destinations */ { const char *dptr; /* Pointer into name */ char *pptr, /* Pointer into printer */ printer[1024]; /* Current printer/class name */ /* * Load the destination list as necessary... */ if (*num_dests <= 1) { if (*num_dests) cupsFreeDests(*num_dests, *dests); if (strchr(name, ',')) *num_dests = cupsGetDests(dests); else { strlcpy(printer, name, sizeof(printer)); if ((pptr = strchr(printer, '/')) != NULL) *pptr++ = '\0'; if ((*dests = cupsGetNamedDest(CUPS_HTTP_DEFAULT, printer, pptr)) == NULL) { if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), command); else _cupsLangPrintf(stderr, _("%s: Invalid destination name in list \"%s\"."), command, name); exit(1); } else { *num_dests = 1; return; } } } /* * Scan the name string for printer/class name(s)... */ for (dptr = name; *dptr;) { /* * Skip leading whitespace and commas... */ while (isspace(*dptr & 255) || *dptr == ',') dptr ++; if (!*dptr) break; /* * Extract a single destination name from the name string... */ for (pptr = printer; !isspace(*dptr & 255) && *dptr != ',' && *dptr;) { if ((size_t)(pptr - printer) < (sizeof(printer) - 1)) *pptr++ = *dptr++; else { _cupsLangPrintf(stderr, _("%s: Invalid destination name in list \"%s\"."), command, name); exit(1); } } *pptr = '\0'; /* * Check the destination... */ if (!cupsGetDest(printer, NULL, *num_dests, *dests)) { if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), command); else _cupsLangPrintf(stderr, _("%s: Unknown destination \"%s\"."), command, printer); exit(1); } } } /* * 'match_list()' - Match a name from a list of comma or space-separated names. */ static int /* O - 1 on match, 0 on no match */ match_list(const char *list, /* I - List of names */ const char *name) /* I - Name to find */ { const char *nameptr; /* Pointer into name */ /* * An empty list always matches... */ if (!list || !*list) return (1); if (!name) return (0); while (*list) { /* * Skip leading whitespace and commas... */ while (isspace(*list & 255) || *list == ',') list ++; if (!*list) break; /* * Compare names... */ for (nameptr = name; *nameptr && *list && tolower(*nameptr & 255) == tolower(*list & 255); nameptr ++, list ++); if (!*nameptr && (!*list || *list == ',' || isspace(*list & 255))) return (1); while (*list && !isspace(*list & 255) && *list != ',') list ++; } return (0); } /* * 'show_accepting()' - Show acceptance status. */ static int /* O - 0 on success, 1 on fail */ show_accepting(const char *printers, /* I - Destinations */ int num_dests, /* I - Number of user-defined dests */ cups_dest_t *dests) /* I - User-defined destinations */ { int i; /* Looping var */ ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr; /* Current attribute */ const char *printer, /* Printer name */ *message; /* Printer device URI */ int accepting; /* Accepting requests? */ time_t ptime; /* Printer state time */ char printer_state_time[255];/* Printer state time */ static const char *pattrs[] = /* Attributes we need for printers... */ { "printer-name", "printer-state-change-time", "printer-state-message", "printer-is-accepting-jobs" }; DEBUG_printf(("show_accepting(printers=\"%s\")\n", printers)); if (printers != NULL && !strcmp(printers, "all")) printers = NULL; /* * Build a CUPS_GET_PRINTERS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * requested-attributes * requesting-user-name */ request = ippNewRequest(CUPS_GET_PRINTERS); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); /* * Do the request and get back a response... */ response = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/"); if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), "lpstat"); ippDelete(response); return (1); } else if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { _cupsLangPrintf(stderr, "lpstat: %s", cupsLastErrorString()); ippDelete(response); return (1); } if (response) { DEBUG_puts("show_accepting: request succeeded..."); /* * Loop through the printers returned in the list and display * their devices... */ for (attr = response->attrs; attr != NULL; attr = attr->next) { /* * Skip leading attributes until we hit a printer... */ while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) attr = attr->next; if (attr == NULL) break; /* * Pull the needed attributes from this printer... */ printer = NULL; message = NULL; accepting = 1; ptime = 0; while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) { if (!strcmp(attr->name, "printer-name") && attr->value_tag == IPP_TAG_NAME) printer = attr->values[0].string.text; else if (!strcmp(attr->name, "printer-state-change-time") && attr->value_tag == IPP_TAG_INTEGER) ptime = (time_t)attr->values[0].integer; else if (!strcmp(attr->name, "printer-state-message") && attr->value_tag == IPP_TAG_TEXT) message = attr->values[0].string.text; else if (!strcmp(attr->name, "printer-is-accepting-jobs") && attr->value_tag == IPP_TAG_BOOLEAN) accepting = attr->values[0].boolean; attr = attr->next; } /* * See if we have everything needed... */ if (printer == NULL) { if (attr == NULL) break; else continue; } /* * Display the printer entry if needed... */ if (match_list(printers, printer)) { _cupsStrDate(printer_state_time, sizeof(printer_state_time), ptime); if (accepting) _cupsLangPrintf(stdout, _("%s accepting requests since %s"), printer, printer_state_time); else { _cupsLangPrintf(stdout, _("%s not accepting requests since %s -"), printer, printer_state_time); _cupsLangPrintf(stdout, _("\t%s"), (message == NULL || !*message) ? "reason unknown" : message); } for (i = 0; i < num_dests; i ++) if (!_cups_strcasecmp(dests[i].name, printer) && dests[i].instance) { if (accepting) _cupsLangPrintf(stdout, _("%s/%s accepting requests since %s"), printer, dests[i].instance, printer_state_time); else { _cupsLangPrintf(stdout, _("%s/%s not accepting requests since %s -"), printer, dests[i].instance, printer_state_time); _cupsLangPrintf(stdout, _("\t%s"), (message == NULL || !*message) ? "reason unknown" : message); } } } if (attr == NULL) break; } ippDelete(response); } return (0); } /* * 'show_classes()' - Show printer classes. */ static int /* O - 0 on success, 1 on fail */ show_classes(const char *dests) /* I - Destinations */ { int i; /* Looping var */ ipp_t *request, /* IPP Request */ *response, /* IPP Response */ *response2; /* IPP response from remote server */ http_t *http2; /* Remote server */ ipp_attribute_t *attr; /* Current attribute */ const char *printer, /* Printer class name */ *printer_uri; /* Printer class URI */ ipp_attribute_t *members; /* Printer members */ char method[HTTP_MAX_URI], /* Request method */ username[HTTP_MAX_URI], /* Username:password */ server[HTTP_MAX_URI], /* Server name */ resource[HTTP_MAX_URI]; /* Resource name */ int port; /* Port number */ static const char *cattrs[] = /* Attributes we need for classes... */ { "printer-name", "printer-uri-supported", "member-names" }; DEBUG_printf(("show_classes(dests=\"%s\")\n", dests)); if (dests != NULL && !strcmp(dests, "all")) dests = NULL; /* * Build a CUPS_GET_CLASSES request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * requested-attributes * requesting-user-name */ request = ippNewRequest(CUPS_GET_CLASSES); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(cattrs) / sizeof(cattrs[0]), NULL, cattrs); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); /* * Do the request and get back a response... */ response = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/"); if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), "lpstat"); ippDelete(response); return (1); } else if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { _cupsLangPrintf(stderr, "lpstat: %s", cupsLastErrorString()); ippDelete(response); return (1); } if (response) { DEBUG_puts("show_classes: request succeeded..."); if (response->request.status.status_code > IPP_OK_CONFLICT) { _cupsLangPrintf(stderr, "lpstat: %s", cupsLastErrorString()); ippDelete(response); return (1); } /* * Loop through the printers returned in the list and display * their devices... */ for (attr = response->attrs; attr != NULL; attr = attr->next) { /* * Skip leading attributes until we hit a job... */ while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) attr = attr->next; if (attr == NULL) break; /* * Pull the needed attributes from this job... */ printer = NULL; printer_uri = NULL; members = NULL; while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) { if (!strcmp(attr->name, "printer-name") && attr->value_tag == IPP_TAG_NAME) printer = attr->values[0].string.text; if (!strcmp(attr->name, "printer-uri-supported") && attr->value_tag == IPP_TAG_URI) printer_uri = attr->values[0].string.text; if (!strcmp(attr->name, "member-names") && attr->value_tag == IPP_TAG_NAME) members = attr; attr = attr->next; } /* * If this is a remote class, grab the class info from the * remote server... */ response2 = NULL; if (members == NULL && printer_uri != NULL) { httpSeparateURI(HTTP_URI_CODING_ALL, printer_uri, method, sizeof(method), username, sizeof(username), server, sizeof(server), &port, resource, sizeof(resource)); if (!_cups_strcasecmp(server, cupsServer())) http2 = CUPS_HTTP_DEFAULT; else http2 = httpConnectEncrypt(server, port, cupsEncryption()); /* * Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the * following attributes: * * attributes-charset * attributes-natural-language * printer-uri * requested-attributes */ request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer_uri); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(cattrs) / sizeof(cattrs[0]), NULL, cattrs); if ((response2 = cupsDoRequest(http2, request, "/")) != NULL) members = ippFindAttribute(response2, "member-names", IPP_TAG_NAME); if (http2) httpClose(http2); } /* * See if we have everything needed... */ if (printer == NULL) { if (response2) ippDelete(response2); if (attr == NULL) break; else continue; } /* * Display the printer entry if needed... */ if (match_list(dests, printer)) { _cupsLangPrintf(stdout, _("members of class %s:"), printer); if (members) { for (i = 0; i < members->num_values; i ++) _cupsLangPrintf(stdout, "\t%s", members->values[i].string.text); } else _cupsLangPuts(stdout, "\tunknown"); } if (response2) ippDelete(response2); if (attr == NULL) break; } ippDelete(response); } return (0); } /* * 'show_default()' - Show default destination. */ static void show_default(cups_dest_t *dest) /* I - Default destination */ { const char *printer, /* Printer name */ *val; /* Environment variable name */ if (dest) { if (dest->instance) _cupsLangPrintf(stdout, _("system default destination: %s/%s"), dest->name, dest->instance); else _cupsLangPrintf(stdout, _("system default destination: %s"), dest->name); } else { val = NULL; if ((printer = getenv("LPDEST")) == NULL) { if ((printer = getenv("PRINTER")) != NULL) { if (!strcmp(printer, "lp")) printer = NULL; else val = "PRINTER"; } } else val = "LPDEST"; if (printer) _cupsLangPrintf(stdout, _("lpstat: error - %s environment variable names " "non-existent destination \"%s\"."), val, printer); else _cupsLangPuts(stdout, _("no system default destination")); } } /* * 'show_devices()' - Show printer devices. */ static int /* O - 0 on success, 1 on fail */ show_devices(const char *printers, /* I - Destinations */ int num_dests, /* I - Number of user-defined dests */ cups_dest_t *dests) /* I - User-defined destinations */ { int i; /* Looping var */ ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr; /* Current attribute */ const char *printer, /* Printer name */ *uri, /* Printer URI */ *device; /* Printer device URI */ static const char *pattrs[] = /* Attributes we need for printers... */ { "printer-name", "printer-uri-supported", "device-uri" }; DEBUG_printf(("show_devices(printers=\"%s\")\n", printers)); if (printers != NULL && !strcmp(printers, "all")) printers = NULL; /* * Build a CUPS_GET_PRINTERS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * requested-attributes * requesting-user-name */ request = ippNewRequest(CUPS_GET_PRINTERS); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); /* * Do the request and get back a response... */ response = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/"); if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), "lpstat"); ippDelete(response); return (1); } else if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { _cupsLangPrintf(stderr, "lpstat: %s", cupsLastErrorString()); ippDelete(response); return (1); } if (response) { DEBUG_puts("show_devices: request succeeded..."); /* * Loop through the printers returned in the list and display * their devices... */ for (attr = response->attrs; attr != NULL; attr = attr->next) { /* * Skip leading attributes until we hit a job... */ while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) attr = attr->next; if (attr == NULL) break; /* * Pull the needed attributes from this job... */ printer = NULL; device = NULL; uri = NULL; while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) { if (!strcmp(attr->name, "printer-name") && attr->value_tag == IPP_TAG_NAME) printer = attr->values[0].string.text; if (!strcmp(attr->name, "printer-uri-supported") && attr->value_tag == IPP_TAG_URI) uri = attr->values[0].string.text; if (!strcmp(attr->name, "device-uri") && attr->value_tag == IPP_TAG_URI) device = attr->values[0].string.text; attr = attr->next; } /* * See if we have everything needed... */ if (printer == NULL) { if (attr == NULL) break; else continue; } /* * Display the printer entry if needed... */ if (match_list(printers, printer)) { if (device == NULL) _cupsLangPrintf(stdout, _("device for %s: %s"), printer, uri); else if (!strncmp(device, "file:", 5)) _cupsLangPrintf(stdout, _("device for %s: %s"), printer, device + 5); else _cupsLangPrintf(stdout, _("device for %s: %s"), printer, device); for (i = 0; i < num_dests; i ++) { if (!_cups_strcasecmp(printer, dests[i].name) && dests[i].instance) { if (device == NULL) _cupsLangPrintf(stdout, _("device for %s/%s: %s"), printer, dests[i].instance, uri); else if (!strncmp(device, "file:", 5)) _cupsLangPrintf(stdout, _("device for %s/%s: %s"), printer, dests[i].instance, device + 5); else _cupsLangPrintf(stdout, _("device for %s/%s: %s"), printer, dests[i].instance, device); } } } if (attr == NULL) break; } ippDelete(response); } return (0); } /* * 'show_jobs()' - Show active print jobs. */ static int /* O - 0 on success, 1 on fail */ show_jobs(const char *dests, /* I - Destinations */ const char *users, /* I - Users */ int long_status, /* I - Show long status? */ int ranking, /* I - Show job ranking? */ const char *which) /* I - Show which jobs? */ { int i; /* Looping var */ ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr, /* Current attribute */ *reasons; /* Job state reasons attribute */ const char *dest, /* Pointer into job-printer-uri */ *username, /* Pointer to job-originating-user-name */ *message, /* Pointer to job-printer-state-message */ *time_at; /* time-at-xxx attribute name to use */ int rank, /* Rank in queue */ jobid, /* job-id */ size; /* job-k-octets */ time_t jobtime; /* time-at-creation */ char temp[255], /* Temporary buffer */ date[255]; /* Date buffer */ static const char *jattrs[] = /* Attributes we need for jobs... */ { "job-id", "job-k-octets", "job-name", "job-originating-user-name", "job-printer-state-message", "job-printer-uri", "job-state-reasons", "time-at-creation", "time-at-completed" }; DEBUG_printf(("show_jobs(dests=\"%s\", users=\"%s\", long_status=%d, " "ranking=%d, which=\"%s\")\n", dests, users, long_status, ranking, which)); if (dests != NULL && !strcmp(dests, "all")) dests = NULL; /* * Build a IPP_GET_JOBS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requested-attributes * requesting-user-name * which-jobs */ request = ippNewRequest(IPP_GET_JOBS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/"); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(jattrs) / sizeof(jattrs[0]), NULL, jattrs); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "which-jobs", NULL, which); /* * Do the request and get back a response... */ response = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/"); if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), "lpstat"); ippDelete(response); return (1); } else if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { _cupsLangPrintf(stderr, "lpstat: %s", cupsLastErrorString()); ippDelete(response); return (1); } if (response) { /* * Loop through the job list and display them... */ if (!strcmp(which, "aborted") || !strcmp(which, "canceled") || !strcmp(which, "completed")) time_at = "time-at-completed"; else time_at = "time-at-creation"; rank = -1; for (attr = response->attrs; attr != NULL; attr = attr->next) { /* * Skip leading attributes until we hit a job... */ while (attr != NULL && attr->group_tag != IPP_TAG_JOB) attr = attr->next; if (attr == NULL) break; /* * Pull the needed attributes from this job... */ jobid = 0; size = 0; username = NULL; dest = NULL; jobtime = 0; message = NULL; reasons = NULL; while (attr != NULL && attr->group_tag == IPP_TAG_JOB) { if (!strcmp(attr->name, "job-id") && attr->value_tag == IPP_TAG_INTEGER) jobid = attr->values[0].integer; else if (!strcmp(attr->name, "job-k-octets") && attr->value_tag == IPP_TAG_INTEGER) size = attr->values[0].integer; else if (!strcmp(attr->name, time_at) && attr->value_tag == IPP_TAG_INTEGER) jobtime = attr->values[0].integer; else if (!strcmp(attr->name, "job-printer-state-message") && attr->value_tag == IPP_TAG_TEXT) message = attr->values[0].string.text; else if (!strcmp(attr->name, "job-printer-uri") && attr->value_tag == IPP_TAG_URI) { if ((dest = strrchr(attr->values[0].string.text, '/')) != NULL) dest ++; } else if (!strcmp(attr->name, "job-originating-user-name") && attr->value_tag == IPP_TAG_NAME) username = attr->values[0].string.text; else if (!strcmp(attr->name, "job-state-reasons") && attr->value_tag == IPP_TAG_KEYWORD) reasons = attr; attr = attr->next; } /* * See if we have everything needed... */ if (dest == NULL || jobid == 0) { if (attr == NULL) break; else continue; } /* * Display the job... */ rank ++; if (match_list(dests, dest) && match_list(users, username)) { snprintf(temp, sizeof(temp), "%s-%d", dest, jobid); _cupsStrDate(date, sizeof(date), jobtime); if (ranking) _cupsLangPrintf(stdout, "%3d %-21s %-13s %8.0f %s", rank, temp, username ? username : "unknown", 1024.0 * size, date); else _cupsLangPrintf(stdout, "%-23s %-13s %8.0f %s", temp, username ? username : "unknown", 1024.0 * size, date); if (long_status) { if (message) _cupsLangPrintf(stdout, _("\tStatus: %s"), message); if (reasons) { char alerts[1024], /* Alerts string */ *aptr; /* Pointer into alerts string */ for (i = 0, aptr = alerts; i < reasons->num_values; i ++) { if (i) snprintf(aptr, sizeof(alerts) - (size_t)(aptr - alerts), " %s", reasons->values[i].string.text); else strlcpy(alerts, reasons->values[i].string.text, sizeof(alerts)); aptr += strlen(aptr); } _cupsLangPrintf(stdout, _("\tAlerts: %s"), alerts); } _cupsLangPrintf(stdout, _("\tqueued for %s"), dest); } } if (attr == NULL) break; } ippDelete(response); } return (0); } /* * 'show_printers()' - Show printers. */ static int /* O - 0 on success, 1 on fail */ show_printers(const char *printers, /* I - Destinations */ int num_dests, /* I - Number of user-defined dests */ cups_dest_t *dests, /* I - User-defined destinations */ int long_status) /* I - Show long status? */ { int i, j; /* Looping vars */ ipp_t *request, /* IPP Request */ *response, /* IPP Response */ *jobs; /* IPP Get Jobs response */ ipp_attribute_t *attr, /* Current attribute */ *jobattr, /* Job ID attribute */ *reasons; /* Job state reasons attribute */ const char *printer, /* Printer name */ *message, /* Printer state message */ *description, /* Description of printer */ *location, /* Location of printer */ *make_model, /* Make and model of printer */ *uri; /* URI of printer */ ipp_attribute_t *allowed, /* requesting-user-name-allowed */ *denied; /* requestint-user-name-denied */ ipp_pstate_t pstate; /* Printer state */ cups_ptype_t ptype; /* Printer type */ time_t ptime; /* Printer state time */ int jobid; /* Job ID of current job */ char printer_uri[HTTP_MAX_URI], /* Printer URI */ printer_state_time[255];/* Printer state time */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ static const char *pattrs[] = /* Attributes we need for printers... */ { "printer-name", "printer-state", "printer-state-message", "printer-state-reasons", "printer-state-change-time", "printer-type", "printer-info", "printer-location", "printer-make-and-model", "printer-uri-supported", "requesting-user-name-allowed", "requesting-user-name-denied" }; static const char *jattrs[] = /* Attributes we need for jobs... */ { "job-id", "job-state" }; DEBUG_printf(("show_printers(printers=\"%s\", num_dests=%d, dests=%p, " "long_status=%d)\n", printers, num_dests, dests, long_status)); if (printers != NULL && !strcmp(printers, "all")) printers = NULL; /* * Build a CUPS_GET_PRINTERS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * requested-attributes * requesting-user-name */ request = ippNewRequest(CUPS_GET_PRINTERS); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); /* * Do the request and get back a response... */ response = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/"); if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), "lpstat"); ippDelete(response); return (1); } else if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { _cupsLangPrintf(stderr, "lpstat: %s", cupsLastErrorString()); ippDelete(response); return (1); } if (response) { DEBUG_puts("show_printers: request succeeded..."); /* * Loop through the printers returned in the list and display * their status... */ for (attr = response->attrs; attr != NULL; attr = attr->next) { /* * Skip leading attributes until we hit a job... */ while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) attr = attr->next; if (attr == NULL) break; /* * Pull the needed attributes from this job... */ printer = NULL; ptime = 0; ptype = CUPS_PRINTER_LOCAL; pstate = IPP_PRINTER_IDLE; message = NULL; description = NULL; location = NULL; make_model = NULL; reasons = NULL; uri = NULL; jobid = 0; allowed = NULL; denied = NULL; while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) { if (!strcmp(attr->name, "printer-name") && attr->value_tag == IPP_TAG_NAME) printer = attr->values[0].string.text; else if (!strcmp(attr->name, "printer-state") && attr->value_tag == IPP_TAG_ENUM) pstate = (ipp_pstate_t)attr->values[0].integer; else if (!strcmp(attr->name, "printer-type") && attr->value_tag == IPP_TAG_ENUM) ptype = (cups_ptype_t)attr->values[0].integer; else if (!strcmp(attr->name, "printer-state-message") && attr->value_tag == IPP_TAG_TEXT) message = attr->values[0].string.text; else if (!strcmp(attr->name, "printer-state-change-time") && attr->value_tag == IPP_TAG_INTEGER) ptime = (time_t)attr->values[0].integer; else if (!strcmp(attr->name, "printer-info") && attr->value_tag == IPP_TAG_TEXT) description = attr->values[0].string.text; else if (!strcmp(attr->name, "printer-location") && attr->value_tag == IPP_TAG_TEXT) location = attr->values[0].string.text; else if (!strcmp(attr->name, "printer-make-and-model") && attr->value_tag == IPP_TAG_TEXT) make_model = attr->values[0].string.text; else if (!strcmp(attr->name, "printer-uri-supported") && attr->value_tag == IPP_TAG_URI) uri = attr->values[0].string.text; else if (!strcmp(attr->name, "printer-state-reasons") && attr->value_tag == IPP_TAG_KEYWORD) reasons = attr; else if (!strcmp(attr->name, "requesting-user-name-allowed") && attr->value_tag == IPP_TAG_NAME) allowed = attr; else if (!strcmp(attr->name, "requesting-user-name-denied") && attr->value_tag == IPP_TAG_NAME) denied = attr; attr = attr->next; } /* * See if we have everything needed... */ if (printer == NULL) { if (attr == NULL) break; else continue; } /* * Display the printer entry if needed... */ if (match_list(printers, printer)) { /* * If the printer state is "IPP_PRINTER_PROCESSING", then grab the * current job for the printer. */ if (pstate == IPP_PRINTER_PROCESSING) { /* * Build an IPP_GET_JOBS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * limit * requested-attributes */ request = ippNewRequest(IPP_GET_JOBS); request->request.op.operation_id = IPP_GET_JOBS; request->request.op.request_id = 1; ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(jattrs) / sizeof(jattrs[0]), NULL, jattrs); httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri), "ipp", NULL, "localhost", 0, "/printers/%s", printer); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer_uri); if ((jobs = cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/")) != NULL) { /* * Get the current active job on this queue... */ ipp_jstate_t jobstate = IPP_JOB_PENDING; jobid = 0; for (jobattr = jobs->attrs; jobattr; jobattr = jobattr->next) { if (!jobattr->name) { if (jobstate == IPP_JOB_PROCESSING) break; else continue; } if (!strcmp(jobattr->name, "job-id") && jobattr->value_tag == IPP_TAG_INTEGER) jobid = jobattr->values[0].integer; else if (!strcmp(jobattr->name, "job-state") && jobattr->value_tag == IPP_TAG_ENUM) jobstate = (ipp_jstate_t)jobattr->values[0].integer; } if (jobstate != IPP_JOB_PROCESSING) jobid = 0; ippDelete(jobs); } } /* * Display it... */ _cupsStrDate(printer_state_time, sizeof(printer_state_time), ptime); switch (pstate) { case IPP_PRINTER_IDLE : _cupsLangPrintf(stdout, _("printer %s is idle. enabled since %s"), printer, printer_state_time); break; case IPP_PRINTER_PROCESSING : _cupsLangPrintf(stdout, _("printer %s now printing %s-%d. " "enabled since %s"), printer, printer, jobid, printer_state_time); break; case IPP_PRINTER_STOPPED : _cupsLangPrintf(stdout, _("printer %s disabled since %s -"), printer, printer_state_time); break; } if ((message && *message) || pstate == IPP_PRINTER_STOPPED) { if (!message || !*message) _cupsLangPuts(stdout, _("\treason unknown")); else _cupsLangPrintf(stdout, "\t%s", message); } if (long_status > 1) { _cupsLangPuts(stdout, _("\tForm mounted:")); _cupsLangPuts(stdout, _("\tContent types: any")); _cupsLangPuts(stdout, _("\tPrinter types: unknown")); } if (long_status) { _cupsLangPrintf(stdout, _("\tDescription: %s"), description ? description : ""); if (reasons) { char alerts[1024], /* Alerts string */ *aptr; /* Pointer into alerts string */ for (i = 0, aptr = alerts; i < reasons->num_values; i ++) { if (i) snprintf(aptr, sizeof(alerts) - (size_t)(aptr - alerts), " %s", reasons->values[i].string.text); else strlcpy(alerts, reasons->values[i].string.text, sizeof(alerts)); aptr += strlen(aptr); } _cupsLangPrintf(stdout, _("\tAlerts: %s"), alerts); } } if (long_status > 1) { _cupsLangPrintf(stdout, _("\tLocation: %s"), location ? location : ""); if (ptype & CUPS_PRINTER_REMOTE) { _cupsLangPuts(stdout, _("\tConnection: remote")); if (make_model && !strstr(make_model, "System V Printer") && !strstr(make_model, "Raw Printer") && uri) _cupsLangPrintf(stdout, _("\tInterface: %s.ppd"), uri); } else { _cupsLangPuts(stdout, _("\tConnection: direct")); if (make_model && !strstr(make_model, "Raw Printer")) _cupsLangPrintf(stdout, _("\tInterface: %s/ppd/%s.ppd"), cg->cups_serverroot, printer); } _cupsLangPuts(stdout, _("\tOn fault: no alert")); _cupsLangPuts(stdout, _("\tAfter fault: continue")); /* TODO update to use printer-error-policy */ if (allowed) { _cupsLangPuts(stdout, _("\tUsers allowed:")); for (j = 0; j < allowed->num_values; j ++) _cupsLangPrintf(stdout, "\t\t%s", allowed->values[j].string.text); } else if (denied) { _cupsLangPuts(stdout, _("\tUsers denied:")); for (j = 0; j < denied->num_values; j ++) _cupsLangPrintf(stdout, "\t\t%s", denied->values[j].string.text); } else { _cupsLangPuts(stdout, _("\tUsers allowed:")); _cupsLangPuts(stdout, _("\t\t(all)")); } _cupsLangPuts(stdout, _("\tForms allowed:")); _cupsLangPuts(stdout, _("\t\t(none)")); _cupsLangPuts(stdout, _("\tBanner required")); _cupsLangPuts(stdout, _("\tCharset sets:")); _cupsLangPuts(stdout, _("\t\t(none)")); _cupsLangPuts(stdout, _("\tDefault pitch:")); _cupsLangPuts(stdout, _("\tDefault page size:")); _cupsLangPuts(stdout, _("\tDefault port settings:")); } for (i = 0; i < num_dests; i ++) if (!_cups_strcasecmp(printer, dests[i].name) && dests[i].instance) { switch (pstate) { case IPP_PRINTER_IDLE : _cupsLangPrintf(stdout, _("printer %s/%s is idle. " "enabled since %s"), printer, dests[i].instance, printer_state_time); break; case IPP_PRINTER_PROCESSING : _cupsLangPrintf(stdout, _("printer %s/%s now printing %s-%d. " "enabled since %s"), printer, dests[i].instance, printer, jobid, printer_state_time); break; case IPP_PRINTER_STOPPED : _cupsLangPrintf(stdout, _("printer %s/%s disabled since %s -"), printer, dests[i].instance, printer_state_time); break; } if ((message && *message) || pstate == IPP_PRINTER_STOPPED) { if (!message || !*message) _cupsLangPuts(stdout, _("\treason unknown")); else _cupsLangPrintf(stdout, "\t%s", message); } if (long_status > 1) { _cupsLangPuts(stdout, _("\tForm mounted:")); _cupsLangPuts(stdout, _("\tContent types: any")); _cupsLangPuts(stdout, _("\tPrinter types: unknown")); } if (long_status) { _cupsLangPrintf(stdout, _("\tDescription: %s"), description ? description : ""); if (reasons) { char alerts[1024], /* Alerts string */ *aptr; /* Pointer into alerts string */ for (i = 0, aptr = alerts; i < reasons->num_values; i ++) { if (i) snprintf(aptr, sizeof(alerts) - (size_t)(aptr - alerts), " %s", reasons->values[i].string.text); else strlcpy(alerts, reasons->values[i].string.text, sizeof(alerts)); aptr += strlen(aptr); } _cupsLangPrintf(stdout, _("\tAlerts: %s"), alerts); } } if (long_status > 1) { _cupsLangPrintf(stdout, _("\tLocation: %s"), location ? location : ""); if (ptype & CUPS_PRINTER_REMOTE) { _cupsLangPuts(stdout, _("\tConnection: remote")); if (make_model && !strstr(make_model, "System V Printer") && !strstr(make_model, "Raw Printer") && uri) _cupsLangPrintf(stdout, _("\tInterface: %s.ppd"), uri); } else { _cupsLangPuts(stdout, _("\tConnection: direct")); if (make_model && !strstr(make_model, "Raw Printer")) _cupsLangPrintf(stdout, _("\tInterface: %s/ppd/%s.ppd"), cg->cups_serverroot, printer); } _cupsLangPuts(stdout, _("\tOn fault: no alert")); _cupsLangPuts(stdout, _("\tAfter fault: continue")); /* TODO update to use printer-error-policy */ if (allowed) { _cupsLangPuts(stdout, _("\tUsers allowed:")); for (j = 0; j < allowed->num_values; j ++) _cupsLangPrintf(stdout, "\t\t%s", allowed->values[j].string.text); } else if (denied) { _cupsLangPuts(stdout, _("\tUsers denied:")); for (j = 0; j < denied->num_values; j ++) _cupsLangPrintf(stdout, "\t\t%s", denied->values[j].string.text); } else { _cupsLangPuts(stdout, _("\tUsers allowed:")); _cupsLangPuts(stdout, _("\t\t(all)")); } _cupsLangPuts(stdout, _("\tForms allowed:")); _cupsLangPuts(stdout, _("\t\t(none)")); _cupsLangPuts(stdout, _("\tBanner required")); _cupsLangPuts(stdout, _("\tCharset sets:")); _cupsLangPuts(stdout, _("\t\t(none)")); _cupsLangPuts(stdout, _("\tDefault pitch:")); _cupsLangPuts(stdout, _("\tDefault page size:")); _cupsLangPuts(stdout, _("\tDefault port settings:")); } } } if (attr == NULL) break; } ippDelete(response); } return (0); } /* * 'show_scheduler()' - Show scheduler status. */ static void show_scheduler(void) { http_t *http; /* Connection to server */ if ((http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption())) != NULL) { _cupsLangPuts(stdout, _("scheduler is running")); httpClose(http); } else _cupsLangPuts(stdout, _("scheduler is not running")); } cups-2.2.7/systemv/Makefile000664 000765 000024 00000011731 13255074424 016330 0ustar00msweetstaff000000 000000 # # System V commands makefile for CUPS. # # Copyright 2007-2014 by Apple Inc. # Copyright 1997-2006 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include ../Makedefs TARGETS = cancel cupsaccept cupsaddsmb cupsctl cupstestdsc cupstestppd \ lp lpadmin lpinfo lpmove lpoptions lpstat OBJS = cancel.o cupsaccept.o cupsaddsmb.o cupsctl.o cupstestdsc.o \ cupstestppd.o lp.o lpadmin.o lpinfo.o lpmove.o lpoptions.o \ lpstat.o # # Make all targets... # all: $(TARGETS) # # Make library targets... # libs: # # Make unit tests... # unittests: # # Clean all object files... # clean: $(RM) $(OBJS) $(TARGETS) $(RM) accept cupsdisable cupsenable cupsreject reject # # Update dependencies (without system header dependencies...) # depend: $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: # # Install programs... # install-exec: echo Installing System V admin printing commands in $(SBINDIR) $(INSTALL_DIR) -m 755 $(SBINDIR) $(INSTALL_BIN) cupsaccept $(SBINDIR) $(INSTALL_BIN) cupsaddsmb $(SBINDIR) $(INSTALL_BIN) cupsctl $(SBINDIR) $(INSTALL_BIN) lpadmin $(SBINDIR) $(INSTALL_BIN) lpinfo $(SBINDIR) $(INSTALL_BIN) lpmove $(SBINDIR) $(RM) $(SBINDIR)/accept $(LN) cupsaccept $(SBINDIR)/accept $(RM) $(SBINDIR)/cupsdisable $(LN) cupsaccept $(SBINDIR)/cupsdisable $(RM) $(SBINDIR)/cupsenable $(LN) cupsaccept $(SBINDIR)/cupsenable $(RM) $(SBINDIR)/cupsreject $(LN) cupsaccept $(SBINDIR)/cupsreject $(RM) $(SBINDIR)/reject $(LN) cupsaccept $(SBINDIR)/reject echo Installing System V user printing commands in $(BINDIR) $(INSTALL_DIR) -m 755 $(BINDIR) $(INSTALL_BIN) cancel $(BINDIR) $(INSTALL_BIN) cupstestdsc $(BINDIR) $(INSTALL_BIN) cupstestppd $(BINDIR) $(INSTALL_BIN) lp $(BINDIR) $(INSTALL_BIN) lpoptions $(BINDIR) $(INSTALL_BIN) lpstat $(BINDIR) if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ for file in $(TARGETS); do \ cp $$file $(SYMROOT); \ dsymutil $(SYMROOT)/$$file; \ done \ fi # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Uninstall all targets... # uninstall: $(RM) $(BINDIR)/cancel $(RM) $(BINDIR)/cupstestdsc $(RM) $(BINDIR)/cupstestppd $(RM) $(BINDIR)/lp $(RM) $(BINDIR)/lpoptions $(RM) $(BINDIR)/lpstat -$(RMDIR) $(BINDIR) $(RM) $(SBINDIR)/accept $(RM) $(SBINDIR)/cupsaccept $(RM) $(SBINDIR)/cupsaddsmb $(RM) $(SBINDIR)/cupsaccept $(RM) $(SBINDIR)/cupsdisable $(RM) $(SBINDIR)/cupsenable $(RM) $(SBINDIR)/cupsreject $(RM) $(SBINDIR)/lpadmin $(RM) $(SBINDIR)/lpinfo $(RM) $(SBINDIR)/lpmove $(RM) $(SBINDIR)/reject -$(RMDIR) $(SBINDIR) # # cancel # cancel: cancel.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o cancel cancel.o $(LIBS) # # cupsaccept # cupsaccept: cupsaccept.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o cupsaccept cupsaccept.o $(LIBS) for file in accept cupsenable cupsdisable cupsreject reject; do \ $(RM) $$file; \ $(LN) cupsaccept $$file; \ done # # cupsaddsmb # cupsaddsmb: cupsaddsmb.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o cupsaddsmb cupsaddsmb.o $(LIBS) # # cupsctl # cupsctl: cupsctl.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o cupsctl cupsctl.o $(LIBS) # # cupstestdsc # cupstestdsc: cupstestdsc.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ cupstestdsc.o $(LIBS) # # cupstestppd # cupstestppd: cupstestppd.o ../cups/$(LIBCUPS) ../filter/$(LIBCUPSIMAGE) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ cupstestppd.o $(LINKCUPSIMAGE) $(IMGLIBS) $(LIBS) cupstestppd-static: cupstestppd.o ../cups/$(LIBCUPSSTATIC) ../filter/libcupsimage.a echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ cupstestppd.o ../filter/libcupsimage.a \ ../cups/$(LIBCUPSSTATIC) $(IMGLIBS) $(LIBGSSAPI) $(LIBS) $(LIBZ) # # lp # lp: lp.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o lp lp.o $(LIBS) # # lpadmin # lpadmin: lpadmin.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o lpadmin lpadmin.o $(LIBZ) $(LIBS) # # lpinfo # lpinfo: lpinfo.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o lpinfo lpinfo.o $(LIBS) # # lpmove # lpmove: lpmove.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o lpmove lpmove.o $(LIBS) # # lpoptions # lpoptions: lpoptions.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o lpoptions lpoptions.o $(LIBZ) $(LIBS) # # lpstat # lpstat: lpstat.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o lpstat lpstat.o $(LIBS) # # Dependencies... # include Dependencies cups-2.2.7/scheduler/auth.c000664 000765 000024 00000160060 13255074424 016241 0ustar00msweetstaff000000 000000 /* * Authorization routines for the CUPS scheduler. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * This file contains Kerberos support code, copyright 2006 by * Jelmer Vernooij. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #include #ifdef HAVE_SHADOW_H # include #endif /* HAVE_SHADOW_H */ #ifdef HAVE_CRYPT_H # include #endif /* HAVE_CRYPT_H */ #if HAVE_LIBPAM # ifdef HAVE_PAM_PAM_APPL_H # include # else # include # endif /* HAVE_PAM_PAM_APPL_H */ #endif /* HAVE_LIBPAM */ #ifdef HAVE_MEMBERSHIP_H # include #endif /* HAVE_MEMBERSHIP_H */ #ifdef HAVE_AUTHORIZATION_H # include # ifdef HAVE_SECBASEPRIV_H # include # else extern const char *cssmErrorString(int error); # endif /* HAVE_SECBASEPRIV_H */ #endif /* HAVE_AUTHORIZATION_H */ #ifdef HAVE_SYS_PARAM_H # include #endif /* HAVE_SYS_PARAM_H */ #ifdef HAVE_SYS_UCRED_H # include typedef struct xucred cupsd_ucred_t; # define CUPSD_UCRED_UID(c) (c).cr_uid #else # ifndef __OpenBSD__ typedef struct ucred cupsd_ucred_t; # else typedef struct sockpeercred cupsd_ucred_t; # endif # define CUPSD_UCRED_UID(c) (c).uid #endif /* HAVE_SYS_UCRED_H */ /* * Local functions... */ #ifdef HAVE_AUTHORIZATION_H static int check_authref(cupsd_client_t *con, const char *right); #endif /* HAVE_AUTHORIZATION_H */ static int compare_locations(cupsd_location_t *a, cupsd_location_t *b); static cupsd_authmask_t *copy_authmask(cupsd_authmask_t *am, void *data); #if !HAVE_LIBPAM static char *cups_crypt(const char *pw, const char *salt); #endif /* !HAVE_LIBPAM */ static void free_authmask(cupsd_authmask_t *am, void *data); #if HAVE_LIBPAM static int pam_func(int, const struct pam_message **, struct pam_response **, void *); #else static void to64(char *s, unsigned long v, int n); #endif /* HAVE_LIBPAM */ /* * Local structures... */ #if HAVE_LIBPAM typedef struct cupsd_authdata_s /**** Authentication data ****/ { char username[HTTP_MAX_VALUE], /* Username string */ password[HTTP_MAX_VALUE]; /* Password string */ } cupsd_authdata_t; #endif /* HAVE_LIBPAM */ /* * 'cupsdAddIPMask()' - Add an IP address authorization mask. */ int /* O - 1 on success, 0 on failure */ cupsdAddIPMask( cups_array_t **masks, /* IO - Masks array (created as needed) */ const unsigned address[4], /* I - IP address */ const unsigned netmask[4]) /* I - IP netmask */ { cupsd_authmask_t temp; /* New host/domain mask */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdAddIPMask(masks=%p(%p), address=%x:%x:%x:%x, netmask=%x:%x:%x:%x)", masks, *masks, address[0], address[1], address[2], address[3], netmask[0], netmask[1], netmask[2], netmask[3]); temp.type = CUPSD_AUTH_IP; memcpy(temp.mask.ip.address, address, sizeof(temp.mask.ip.address)); memcpy(temp.mask.ip.netmask, netmask, sizeof(temp.mask.ip.netmask)); /* * Create the masks array as needed and add... */ if (!*masks) *masks = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)copy_authmask, (cups_afree_func_t)free_authmask); return (cupsArrayAdd(*masks, &temp)); } /* * 'cupsdAddLocation()' - Add a location for authorization. */ void cupsdAddLocation(cupsd_location_t *loc) /* I - Location to add */ { /* * Make sure the locations array is created... */ if (!Locations) Locations = cupsArrayNew3((cups_array_func_t)compare_locations, NULL, (cups_ahash_func_t)NULL, 0, (cups_acopy_func_t)NULL, (cups_afree_func_t)cupsdFreeLocation); if (Locations) { cupsArrayAdd(Locations, loc); cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdAddLocation: Added location \"%s\"", loc->location ? loc->location : "(null)"); } } /* * 'cupsdAddName()' - Add a name to a location... */ void cupsdAddName(cupsd_location_t *loc, /* I - Location to add to */ char *name) /* I - Name to add */ { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdAddName(loc=%p, name=\"%s\")", loc, name); if (!loc->names) loc->names = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)_cupsStrAlloc, (cups_afree_func_t)_cupsStrFree); if (!cupsArrayAdd(loc->names, name)) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to duplicate name for location %s: %s", loc->location ? loc->location : "nil", strerror(errno)); return; } } /* * 'cupsdAddNameMask()' - Add a host or interface name authorization mask. */ int /* O - 1 on success, 0 on failure */ cupsdAddNameMask(cups_array_t **masks, /* IO - Masks array (created as needed) */ char *name) /* I - Host or interface name */ { cupsd_authmask_t temp; /* New host/domain mask */ char ifname[32], /* Interface name */ *ifptr; /* Pointer to end of name */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdAddNameMask(masks=%p(%p), name=\"%s\")", masks, *masks, name); if (!_cups_strcasecmp(name, "@LOCAL")) { /* * Deny *interface*... */ temp.type = CUPSD_AUTH_INTERFACE; temp.mask.name.name = (char *)"*"; } else if (!_cups_strncasecmp(name, "@IF(", 4)) { /* * Deny *interface*... */ strlcpy(ifname, name + 4, sizeof(ifname)); ifptr = ifname + strlen(ifname) - 1; if (ifptr >= ifname && *ifptr == ')') { ifptr --; *ifptr = '\0'; } temp.type = CUPSD_AUTH_INTERFACE; temp.mask.name.name = ifname; } else { /* * Deny name... */ if (*name == '*') name ++; temp.type = CUPSD_AUTH_NAME; temp.mask.name.name = (char *)name; } /* * Set the name length... */ temp.mask.name.length = strlen(temp.mask.name.name); /* * Create the masks array as needed and add... */ if (!*masks) *masks = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)copy_authmask, (cups_afree_func_t)free_authmask); return (cupsArrayAdd(*masks, &temp)); } /* * 'cupsdAuthorize()' - Validate any authorization credentials. */ void cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */ { int type; /* Authentication type */ const char *authorization; /* Pointer into Authorization string */ char *ptr, /* Pointer into string */ username[HTTP_MAX_VALUE], /* Username string */ password[HTTP_MAX_VALUE]; /* Password string */ cupsd_cert_t *localuser; /* Certificate username */ /* * Locate the best matching location so we know what kind of * authentication to expect... */ con->best = cupsdFindBest(con->uri, httpGetState(con->http)); con->type = CUPSD_AUTH_NONE; cupsdLogClient(con, CUPSD_LOG_DEBUG2, "con->uri=\"%s\", con->best=%p(%s)", con->uri, con->best, con->best ? con->best->location : ""); if (con->best && con->best->type != CUPSD_AUTH_NONE) { if (con->best->type == CUPSD_AUTH_DEFAULT) type = cupsdDefaultAuthType(); else type = con->best->type; } else type = cupsdDefaultAuthType(); /* * Decode the Authorization string... */ authorization = httpGetField(con->http, HTTP_FIELD_AUTHORIZATION); username[0] = '\0'; password[0] = '\0'; #ifdef HAVE_GSSAPI con->gss_uid = 0; #endif /* HAVE_GSSAPI */ #ifdef HAVE_AUTHORIZATION_H if (con->authref) { AuthorizationFree(con->authref, kAuthorizationFlagDefaults); con->authref = NULL; } #endif /* HAVE_AUTHORIZATION_H */ if (!*authorization) { /* * No authorization data provided, return early... */ cupsdLogClient(con, CUPSD_LOG_DEBUG, "No authentication data provided."); return; } #ifdef HAVE_AUTHORIZATION_H else if (!strncmp(authorization, "AuthRef ", 8) && httpAddrLocalhost(httpGetAddress(con->http))) { OSStatus status; /* Status */ char authdata[HTTP_MAX_VALUE]; /* Nonce value from client */ int authlen; /* Auth string length */ AuthorizationItemSet *authinfo; /* Authorization item set */ /* * Get the Authorization Services data... */ authorization += 8; while (isspace(*authorization & 255)) authorization ++; authlen = sizeof(authdata); httpDecode64_2(authdata, &authlen, authorization); if (authlen != kAuthorizationExternalFormLength) { cupsdLogClient(con, CUPSD_LOG_ERROR, "External Authorization reference size is incorrect."); return; } if ((status = AuthorizationCreateFromExternalForm((AuthorizationExternalForm *)authdata, &con->authref)) != 0) { cupsdLogClient(con, CUPSD_LOG_ERROR, "AuthorizationCreateFromExternalForm returned %d (%s)", (int)status, cssmErrorString(status)); return; } username[0] = '\0'; if (!AuthorizationCopyInfo(con->authref, kAuthorizationEnvironmentUsername, &authinfo)) { if (authinfo->count == 1 && authinfo->items[0].value && authinfo->items[0].valueLength >= 2) { strlcpy(username, authinfo->items[0].value, sizeof(username)); cupsdLogClient(con, CUPSD_LOG_DEBUG, "Authorized as \"%s\" using AuthRef.", username); } AuthorizationFreeItemSet(authinfo); } if (!username[0]) { /* * No username in AuthRef, grab username using peer credentials... */ struct passwd *pwd; /* Password entry for this user */ cupsd_ucred_t peercred; /* Peer credentials */ socklen_t peersize; /* Size of peer credentials */ peersize = sizeof(peercred); if (getsockopt(httpGetFd(con->http), 0, LOCAL_PEERCRED, &peercred, &peersize)) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to get peer credentials - %s", strerror(errno)); return; } if ((pwd = getpwuid(CUPSD_UCRED_UID(peercred))) == NULL) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to find UID %d for peer credentials.", (int)CUPSD_UCRED_UID(peercred)); return; } strlcpy(username, pwd->pw_name, sizeof(username)); cupsdLogClient(con, CUPSD_LOG_DEBUG, "Authorized as \"%s\" using AuthRef + PeerCred.", username); } con->type = CUPSD_AUTH_BASIC; } #endif /* HAVE_AUTHORIZATION_H */ #if defined(SO_PEERCRED) && defined(AF_LOCAL) else if (!strncmp(authorization, "PeerCred ", 9) && con->http->hostaddr->addr.sa_family == AF_LOCAL && con->best) { /* * Use peer credentials from domain socket connection... */ struct passwd *pwd; /* Password entry for this user */ cupsd_ucred_t peercred; /* Peer credentials */ socklen_t peersize; /* Size of peer credentials */ #ifdef HAVE_AUTHORIZATION_H const char *name; /* Authorizing name */ int no_peer = 0; /* Don't allow peer credentials? */ /* * See if we should allow peer credentials... */ for (name = (char *)cupsArrayFirst(con->best->names); name; name = (char *)cupsArrayNext(con->best->names)) { if (!_cups_strncasecmp(name, "@AUTHKEY(", 9) || !_cups_strcasecmp(name, "@SYSTEM")) { /* Normally don't want peer credentials if we need an auth key... */ no_peer = 1; } else if (!_cups_strcasecmp(name, "@OWNER")) { /* but if @OWNER is present then we allow it... */ no_peer = 0; break; } } if (no_peer) { cupsdLogClient(con, CUPSD_LOG_ERROR, "PeerCred authentication not allowed for resource per AUTHKEY policy."); return; } #endif /* HAVE_AUTHORIZATION_H */ if ((pwd = getpwnam(authorization + 9)) == NULL) { cupsdLogClient(con, CUPSD_LOG_ERROR, "User \"%s\" does not exist.", authorization + 9); return; } peersize = sizeof(peercred); # ifdef __APPLE__ if (getsockopt(httpGetFd(con->http), 0, LOCAL_PEERCRED, &peercred, &peersize)) # else if (getsockopt(httpGetFd(con->http), SOL_SOCKET, SO_PEERCRED, &peercred, &peersize)) # endif /* __APPLE__ */ { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to get peer credentials - %s", strerror(errno)); return; } if (pwd->pw_uid != CUPSD_UCRED_UID(peercred)) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Invalid peer credentials for \"%s\" - got %d, expected %d.", authorization + 9, CUPSD_UCRED_UID(peercred), pwd->pw_uid); # ifdef HAVE_SYS_UCRED_H cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cr_version=%d", peercred.cr_version); cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cr_uid=%d", peercred.cr_uid); cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cr_ngroups=%d", peercred.cr_ngroups); cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cr_groups[0]=%d", peercred.cr_groups[0]); # endif /* HAVE_SYS_UCRED_H */ return; } strlcpy(username, authorization + 9, sizeof(username)); # ifdef HAVE_GSSAPI con->gss_uid = CUPSD_UCRED_UID(peercred); # endif /* HAVE_GSSAPI */ cupsdLogClient(con, CUPSD_LOG_DEBUG, "Authorized as %s using PeerCred.", username); con->type = CUPSD_AUTH_BASIC; } #endif /* SO_PEERCRED && AF_LOCAL */ else if (!strncmp(authorization, "Local", 5) && httpAddrLocalhost(httpGetAddress(con->http))) { /* * Get Local certificate authentication data... */ authorization += 5; while (isspace(*authorization & 255)) authorization ++; if ((localuser = cupsdFindCert(authorization)) == NULL) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Local authentication certificate not found."); return; } strlcpy(username, localuser->username, sizeof(username)); con->type = localuser->type; cupsdLogClient(con, CUPSD_LOG_DEBUG, "Authorized as %s using Local.", username); } else if (!strncmp(authorization, "Basic", 5)) { /* * Get the Basic authentication data... */ int userlen; /* Username:password length */ authorization += 5; while (isspace(*authorization & 255)) authorization ++; userlen = sizeof(username); httpDecode64_2(username, &userlen, authorization); /* * Pull the username and password out... */ if ((ptr = strchr(username, ':')) == NULL) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Missing Basic password."); return; } *ptr++ = '\0'; if (!username[0]) { /* * Username must not be empty... */ cupsdLogClient(con, CUPSD_LOG_ERROR, "Empty Basic username."); return; } if (!*ptr) { /* * Password must not be empty... */ cupsdLogClient(con, CUPSD_LOG_ERROR, "Empty Basic password."); return; } strlcpy(password, ptr, sizeof(password)); /* * Validate the username and password... */ switch (type) { default : case CUPSD_AUTH_BASIC : { #if HAVE_LIBPAM /* * Only use PAM to do authentication. This supports MD5 * passwords, among other things... */ pam_handle_t *pamh; /* PAM authentication handle */ int pamerr; /* PAM error code */ struct pam_conv pamdata;/* PAM conversation data */ cupsd_authdata_t data; /* Authentication data */ strlcpy(data.username, username, sizeof(data.username)); strlcpy(data.password, password, sizeof(data.password)); # ifdef __sun pamdata.conv = (int (*)(int, struct pam_message **, struct pam_response **, void *))pam_func; # else pamdata.conv = pam_func; # endif /* __sun */ pamdata.appdata_ptr = &data; pamerr = pam_start("cups", username, &pamdata, &pamh); if (pamerr != PAM_SUCCESS) { cupsdLogClient(con, CUPSD_LOG_ERROR, "pam_start() returned %d (%s)", pamerr, pam_strerror(pamh, pamerr)); return; } # ifdef HAVE_PAM_SET_ITEM # ifdef PAM_RHOST pamerr = pam_set_item(pamh, PAM_RHOST, con->http->hostname); if (pamerr != PAM_SUCCESS) cupsdLogClient(con, CUPSD_LOG_WARN, "pam_set_item(PAM_RHOST) returned %d (%s)", pamerr, pam_strerror(pamh, pamerr)); # endif /* PAM_RHOST */ # ifdef PAM_TTY pamerr = pam_set_item(pamh, PAM_TTY, "cups"); if (pamerr != PAM_SUCCESS) cupsdLogClient(con, CUPSD_LOG_WARN, "pam_set_item(PAM_TTY) returned %d (%s)", pamerr, pam_strerror(pamh, pamerr)); # endif /* PAM_TTY */ # endif /* HAVE_PAM_SET_ITEM */ pamerr = pam_authenticate(pamh, PAM_SILENT); if (pamerr != PAM_SUCCESS) { cupsdLogClient(con, CUPSD_LOG_ERROR, "pam_authenticate() returned %d (%s)", pamerr, pam_strerror(pamh, pamerr)); pam_end(pamh, 0); return; } # ifdef HAVE_PAM_SETCRED pamerr = pam_setcred(pamh, PAM_ESTABLISH_CRED | PAM_SILENT); if (pamerr != PAM_SUCCESS) cupsdLogClient(con, CUPSD_LOG_WARN, "pam_setcred() returned %d (%s)", pamerr, pam_strerror(pamh, pamerr)); # endif /* HAVE_PAM_SETCRED */ pamerr = pam_acct_mgmt(pamh, PAM_SILENT); if (pamerr != PAM_SUCCESS) { cupsdLogClient(con, CUPSD_LOG_ERROR, "pam_acct_mgmt() returned %d (%s)", pamerr, pam_strerror(pamh, pamerr)); pam_end(pamh, 0); return; } pam_end(pamh, PAM_SUCCESS); #else /* * Use normal UNIX password file-based authentication... */ char *pass; /* Encrypted password */ struct passwd *pw; /* User password data */ # ifdef HAVE_SHADOW_H struct spwd *spw; /* Shadow password data */ # endif /* HAVE_SHADOW_H */ pw = getpwnam(username); /* Get the current password */ endpwent(); /* Close the password file */ if (!pw) { /* * No such user... */ cupsdLogClient(con, CUPSD_LOG_ERROR, "Unknown username \"%s\".", username); return; } # ifdef HAVE_SHADOW_H spw = getspnam(username); endspent(); if (!spw && !strcmp(pw->pw_passwd, "x")) { /* * Don't allow blank passwords! */ cupsdLogClient(con, CUPSD_LOG_ERROR, "Username \"%s\" has no shadow password.", username); return; } if (spw && !spw->sp_pwdp[0] && !pw->pw_passwd[0]) # else if (!pw->pw_passwd[0]) # endif /* HAVE_SHADOW_H */ { /* * Don't allow blank passwords! */ cupsdLogClient(con, CUPSD_LOG_ERROR, "Username \"%s\" has no password.", username); return; } /* * OK, the password isn't blank, so compare with what came from the * client... */ pass = cups_crypt(password, pw->pw_passwd); if (!pass || strcmp(pw->pw_passwd, pass)) { # ifdef HAVE_SHADOW_H if (spw) { pass = cups_crypt(password, spw->sp_pwdp); if (pass == NULL || strcmp(spw->sp_pwdp, pass)) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Authentication failed for user \"%s\".", username); return; } } else # endif /* HAVE_SHADOW_H */ { cupsdLogClient(con, CUPSD_LOG_ERROR, "Authentication failed for user \"%s\".", username); return; } } #endif /* HAVE_LIBPAM */ } cupsdLogClient(con, CUPSD_LOG_DEBUG, "Authorized as \"%s\" using Basic.", username); break; } con->type = type; } #ifdef HAVE_GSSAPI else if (!strncmp(authorization, "Negotiate", 9)) { int len; /* Length of authorization string */ gss_ctx_id_t context; /* Authorization context */ OM_uint32 major_status, /* Major status code */ minor_status; /* Minor status code */ gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER, /* Input token from string */ output_token = GSS_C_EMPTY_BUFFER; /* Output token for username */ gss_name_t client_name; /* Client name */ # ifdef __APPLE__ /* * If the weak-linked GSSAPI/Kerberos library is not present, don't try * to use it... */ if (&gss_init_sec_context == NULL) { cupsdLogClient(con, CUPSD_LOG_WARN, "GSSAPI/Kerberos authentication failed because the Kerberos framework is not present."); return; } # endif /* __APPLE__ */ /* * Find the start of the Kerberos input token... */ authorization += 9; while (isspace(*authorization & 255)) authorization ++; if (!*authorization) { cupsdLogClient(con, CUPSD_LOG_DEBUG2, "No authentication data specified."); return; } /* * Decode the authorization string to get the input token... */ len = (int)strlen(authorization); input_token.value = malloc((size_t)len); input_token.value = httpDecode64_2(input_token.value, &len, authorization); input_token.length = (size_t)len; /* * Accept the input token to get the authorization info... */ context = GSS_C_NO_CONTEXT; client_name = GSS_C_NO_NAME; major_status = gss_accept_sec_context(&minor_status, &context, ServerCreds, &input_token, GSS_C_NO_CHANNEL_BINDINGS, &client_name, NULL, &output_token, NULL, NULL, NULL); if (output_token.length > 0) gss_release_buffer(&minor_status, &output_token); if (GSS_ERROR(major_status)) { cupsdLogGSSMessage(CUPSD_LOG_DEBUG, major_status, minor_status, "[Client %d] Error accepting GSSAPI security context.", con->number); if (context != GSS_C_NO_CONTEXT) gss_delete_sec_context(&minor_status, &context, GSS_C_NO_BUFFER); return; } con->have_gss = 1; /* * Get the username associated with the client's credentials... */ if (major_status == GSS_S_CONTINUE_NEEDED) cupsdLogGSSMessage(CUPSD_LOG_DEBUG, major_status, minor_status, "[Client %d] Credentials not complete.", con->number); else if (major_status == GSS_S_COMPLETE) { major_status = gss_display_name(&minor_status, client_name, &output_token, NULL); if (GSS_ERROR(major_status)) { cupsdLogGSSMessage(CUPSD_LOG_DEBUG, major_status, minor_status, "[Client %d] Error getting username.", con->number); gss_release_name(&minor_status, &client_name); gss_delete_sec_context(&minor_status, &context, GSS_C_NO_BUFFER); return; } strlcpy(username, output_token.value, sizeof(username)); cupsdLogClient(con, CUPSD_LOG_DEBUG, "Authorized as \"%s\" using Negotiate.", username); gss_release_name(&minor_status, &client_name); gss_release_buffer(&minor_status, &output_token); con->type = CUPSD_AUTH_NEGOTIATE; } gss_delete_sec_context(&minor_status, &context, GSS_C_NO_BUFFER); # if defined(SO_PEERCRED) && defined(AF_LOCAL) /* * Get the client's UID if we are printing locally - that allows a backend * to run as the correct user to get Kerberos credentials of its own. */ if (httpAddrFamily(con->http->hostaddr) == AF_LOCAL) { cupsd_ucred_t peercred; /* Peer credentials */ socklen_t peersize; /* Size of peer credentials */ peersize = sizeof(peercred); # ifdef __APPLE__ if (getsockopt(httpGetFd(con->http), 0, LOCAL_PEERCRED, &peercred, &peersize)) # else if (getsockopt(httpGetFd(con->http), SOL_SOCKET, SO_PEERCRED, &peercred, &peersize)) # endif /* __APPLE__ */ { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to get peer credentials - %s", strerror(errno)); } else { cupsdLogClient(con, CUPSD_LOG_DEBUG, "Using credentials for UID %d.", CUPSD_UCRED_UID(peercred)); con->gss_uid = CUPSD_UCRED_UID(peercred); } } # endif /* SO_PEERCRED && AF_LOCAL */ } #endif /* HAVE_GSSAPI */ else { char scheme[256]; /* Auth scheme... */ if (sscanf(authorization, "%255s", scheme) != 1) strlcpy(scheme, "UNKNOWN", sizeof(scheme)); cupsdLogClient(con, CUPSD_LOG_ERROR, "Bad authentication data \"%s ...\".", scheme); return; } /* * If we get here, then we were able to validate the username and * password - copy the validated username and password to the client * data and return... */ strlcpy(con->username, username, sizeof(con->username)); strlcpy(con->password, password, sizeof(con->password)); } /* * 'cupsdCheckAccess()' - Check whether the given address is allowed to * access a location. */ int /* O - 1 if allowed, 0 otherwise */ cupsdCheckAccess( unsigned ip[4], /* I - Client address */ const char *name, /* I - Client hostname */ size_t namelen, /* I - Length of hostname */ cupsd_location_t *loc) /* I - Location to check */ { int allow; /* 1 if allowed, 0 otherwise */ if (!_cups_strcasecmp(name, "localhost")) { /* * Access from localhost (127.0.0.1 or ::1) is always allowed... */ return (1); } else { /* * Do authorization checks on the domain/address... */ switch (loc->order_type) { default : allow = 0; /* anti-compiler-warning-code */ break; case CUPSD_AUTH_ALLOW : /* Order Deny,Allow */ allow = 1; if (cupsdCheckAuth(ip, name, namelen, loc->deny)) allow = 0; if (cupsdCheckAuth(ip, name, namelen, loc->allow)) allow = 1; break; case CUPSD_AUTH_DENY : /* Order Allow,Deny */ allow = 0; if (cupsdCheckAuth(ip, name, namelen, loc->allow)) allow = 1; if (cupsdCheckAuth(ip, name, namelen, loc->deny)) allow = 0; break; } } return (allow); } /* * 'cupsdCheckAuth()' - Check authorization masks. */ int /* O - 1 if mask matches, 0 otherwise */ cupsdCheckAuth(unsigned ip[4], /* I - Client address */ const char *name, /* I - Client hostname */ size_t name_len, /* I - Length of hostname */ cups_array_t *masks) /* I - Masks */ { int i; /* Looping var */ cupsd_authmask_t *mask; /* Current mask */ cupsd_netif_t *iface; /* Network interface */ unsigned netip4; /* IPv4 network address */ #ifdef AF_INET6 unsigned netip6[4]; /* IPv6 network address */ #endif /* AF_INET6 */ for (mask = (cupsd_authmask_t *)cupsArrayFirst(masks); mask; mask = (cupsd_authmask_t *)cupsArrayNext(masks)) { switch (mask->type) { case CUPSD_AUTH_INTERFACE : /* * Check for a match with a network interface... */ netip4 = htonl(ip[3]); #ifdef AF_INET6 netip6[0] = htonl(ip[0]); netip6[1] = htonl(ip[1]); netip6[2] = htonl(ip[2]); netip6[3] = htonl(ip[3]); #endif /* AF_INET6 */ cupsdNetIFUpdate(); if (!strcmp(mask->mask.name.name, "*")) { #ifdef __APPLE__ /* * Allow Back-to-My-Mac addresses... */ if ((ip[0] & 0xff000000) == 0xfd000000) return (1); #endif /* __APPLE__ */ /* * Check against all local interfaces... */ for (iface = (cupsd_netif_t *)cupsArrayFirst(NetIFList); iface; iface = (cupsd_netif_t *)cupsArrayNext(NetIFList)) { /* * Only check local interfaces... */ if (!iface->is_local) continue; if (iface->address.addr.sa_family == AF_INET) { /* * Check IPv4 address... */ if ((netip4 & iface->mask.ipv4.sin_addr.s_addr) == (iface->address.ipv4.sin_addr.s_addr & iface->mask.ipv4.sin_addr.s_addr)) return (1); } #ifdef AF_INET6 else { /* * Check IPv6 address... */ for (i = 0; i < 4; i ++) if ((netip6[i] & iface->mask.ipv6.sin6_addr.s6_addr32[i]) != (iface->address.ipv6.sin6_addr.s6_addr32[i] & iface->mask.ipv6.sin6_addr.s6_addr32[i])) break; if (i == 4) return (1); } #endif /* AF_INET6 */ } } else { /* * Check the named interface... */ for (iface = (cupsd_netif_t *)cupsArrayFirst(NetIFList); iface; iface = (cupsd_netif_t *)cupsArrayNext(NetIFList)) { if (strcmp(mask->mask.name.name, iface->name)) continue; if (iface->address.addr.sa_family == AF_INET) { /* * Check IPv4 address... */ if ((netip4 & iface->mask.ipv4.sin_addr.s_addr) == (iface->address.ipv4.sin_addr.s_addr & iface->mask.ipv4.sin_addr.s_addr)) return (1); } #ifdef AF_INET6 else { /* * Check IPv6 address... */ for (i = 0; i < 4; i ++) if ((netip6[i] & iface->mask.ipv6.sin6_addr.s6_addr32[i]) != (iface->address.ipv6.sin6_addr.s6_addr32[i] & iface->mask.ipv6.sin6_addr.s6_addr32[i])) break; if (i == 4) return (1); } #endif /* AF_INET6 */ } } break; case CUPSD_AUTH_NAME : /* * Check for exact name match... */ if (!_cups_strcasecmp(name, mask->mask.name.name)) return (1); /* * Check for domain match... */ if (name_len >= mask->mask.name.length && mask->mask.name.name[0] == '.' && !_cups_strcasecmp(name + name_len - mask->mask.name.length, mask->mask.name.name)) return (1); break; case CUPSD_AUTH_IP : /* * Check for IP/network address match... */ for (i = 0; i < 4; i ++) if ((ip[i] & mask->mask.ip.netmask[i]) != mask->mask.ip.address[i]) break; if (i == 4) return (1); break; } } return (0); } /* * 'cupsdCheckGroup()' - Check for a user's group membership. */ int /* O - 1 if user is a member, 0 otherwise */ cupsdCheckGroup( const char *username, /* I - User name */ struct passwd *user, /* I - System user info */ const char *groupname) /* I - Group name */ { int i; /* Looping var */ struct group *group; /* Group info */ gid_t groupid; /* ID of named group */ #ifdef HAVE_MBR_UID_TO_UUID uuid_t useruuid, /* UUID for username */ groupuuid; /* UUID for groupname */ int is_member; /* True if user is a member of group */ #endif /* HAVE_MBR_UID_TO_UUID */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCheckGroup(username=\"%s\", user=%p, groupname=\"%s\")", username, user, groupname); /* * Validate input... */ if (!username || !groupname) return (0); /* * Check to see if the user is a member of the named group... */ group = getgrnam(groupname); endgrent(); if (group != NULL) { /* * Group exists, check it... */ groupid = group->gr_gid; #ifdef HAVE_GETGROUPLIST if (user) { int ngroups; /* Number of groups */ # ifdef __APPLE__ int groups[2048]; /* Groups that user belongs to */ # else gid_t groups[2048]; /* Groups that user belongs to */ # endif /* __APPLE__ */ ngroups = (int)(sizeof(groups) / sizeof(groups[0])); # ifdef __APPLE__ getgrouplist(username, (int)user->pw_gid, groups, &ngroups); # else getgrouplist(username, user->pw_gid, groups, &ngroups); #endif /* __APPLE__ */ for (i = 0; i < ngroups; i ++) if ((int)groupid == (int)groups[i]) return (1); } #else for (i = 0; group->gr_mem[i]; i ++) { if (!_cups_strcasecmp(username, group->gr_mem[i])) return (1); } #endif /* HAVE_GETGROUPLIST */ } else groupid = (gid_t)-1; /* * Group doesn't exist or user not in group list, check the group ID * against the user's group ID... */ if (user && groupid == user->pw_gid) return (1); #ifdef HAVE_MBR_UID_TO_UUID /* * Check group membership through macOS membership API... */ if (user && !mbr_uid_to_uuid(user->pw_uid, useruuid)) { if (groupid != (gid_t)-1) { /* * Map group name to UUID and check membership... */ if (!mbr_gid_to_uuid(groupid, groupuuid)) if (!mbr_check_membership(useruuid, groupuuid, &is_member)) if (is_member) return (1); } else if (groupname[0] == '#') { /* * Use UUID directly and check for equality (user UUID) and * membership (group UUID)... */ if (!uuid_parse((char *)groupname + 1, groupuuid)) { if (!uuid_compare(useruuid, groupuuid)) return (1); else if (!mbr_check_membership(useruuid, groupuuid, &is_member)) if (is_member) return (1); } return (0); } } else if (groupname[0] == '#') return (0); #endif /* HAVE_MBR_UID_TO_UUID */ /* * If we get this far, then the user isn't part of the named group... */ return (0); } /* * 'cupsdCopyLocation()' - Make a copy of a location... */ cupsd_location_t * /* O - New location */ cupsdCopyLocation( cupsd_location_t *loc) /* I - Original location */ { cupsd_location_t *temp; /* New location */ /* * Make a copy of the original location... */ if ((temp = calloc(1, sizeof(cupsd_location_t))) == NULL) return (NULL); /* * Copy the information from the original location to the new one. */ if (!loc) return (temp); if (loc->location) temp->location = _cupsStrAlloc(loc->location); temp->length = loc->length; temp->limit = loc->limit; temp->order_type = loc->order_type; temp->type = loc->type; temp->level = loc->level; temp->satisfy = loc->satisfy; temp->encryption = loc->encryption; if (loc->names) { if ((temp->names = cupsArrayDup(loc->names)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for %d names: %s", cupsArrayCount(loc->names), strerror(errno)); cupsdFreeLocation(temp); return (NULL); } } if (loc->allow) { /* * Copy allow rules... */ if ((temp->allow = cupsArrayDup(loc->allow)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for %d allow rules: %s", cupsArrayCount(loc->allow), strerror(errno)); cupsdFreeLocation(temp); return (NULL); } } if (loc->deny) { /* * Copy deny rules... */ if ((temp->deny = cupsArrayDup(loc->deny)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for %d deny rules: %s", cupsArrayCount(loc->deny), strerror(errno)); cupsdFreeLocation(temp); return (NULL); } } return (temp); } /* * 'cupsdDeleteAllLocations()' - Free all memory used for location authorization. */ void cupsdDeleteAllLocations(void) { /* * Free the location array, which will free all of the locations... */ cupsArrayDelete(Locations); Locations = NULL; } /* * 'cupsdFindBest()' - Find the location entry that best matches the resource. */ cupsd_location_t * /* O - Location that matches */ cupsdFindBest(const char *path, /* I - Resource path */ http_state_t state) /* I - HTTP state/request */ { char uri[HTTP_MAX_URI], /* URI in request... */ *uriptr; /* Pointer into URI */ cupsd_location_t *loc, /* Current location */ *best; /* Best match for location so far */ size_t bestlen; /* Length of best match */ int limit; /* Limit field */ static const int limits[] = /* Map http_status_t to CUPSD_AUTH_LIMIT_xyz */ { CUPSD_AUTH_LIMIT_ALL, CUPSD_AUTH_LIMIT_OPTIONS, CUPSD_AUTH_LIMIT_GET, CUPSD_AUTH_LIMIT_GET, CUPSD_AUTH_LIMIT_HEAD, CUPSD_AUTH_LIMIT_POST, CUPSD_AUTH_LIMIT_POST, CUPSD_AUTH_LIMIT_POST, CUPSD_AUTH_LIMIT_PUT, CUPSD_AUTH_LIMIT_PUT, CUPSD_AUTH_LIMIT_DELETE, CUPSD_AUTH_LIMIT_TRACE, CUPSD_AUTH_LIMIT_ALL, CUPSD_AUTH_LIMIT_ALL, CUPSD_AUTH_LIMIT_ALL, CUPSD_AUTH_LIMIT_ALL }; /* * First copy the connection URI to a local string so we have drop * any .ppd extension from the pathname in /printers or /classes * URIs... */ strlcpy(uri, path, sizeof(uri)); if ((uriptr = strchr(uri, '?')) != NULL) *uriptr = '\0'; /* Drop trailing query string */ if ((uriptr = uri + strlen(uri) - 1) > uri && *uriptr == '/') *uriptr = '\0'; /* Remove trailing '/' */ if (!strncmp(uri, "/printers/", 10) || !strncmp(uri, "/classes/", 9)) { /* * Check if the URI has .ppd on the end... */ uriptr = uri + strlen(uri) - 4; /* len > 4 if we get here... */ if (!strcmp(uriptr, ".ppd")) *uriptr = '\0'; } /* * Loop through the list of locations to find a match... */ limit = limits[state]; best = NULL; bestlen = 0; cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindBest: uri=\"%s\", limit=%x...", uri, limit); for (loc = (cupsd_location_t *)cupsArrayFirst(Locations); loc; loc = (cupsd_location_t *)cupsArrayNext(Locations)) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindBest: Location %s(%d) Limit %x", loc->location ? loc->location : "(null)", (int)loc->length, loc->limit); if (!strncmp(uri, "/printers/", 10) || !strncmp(uri, "/classes/", 9)) { /* * Use case-insensitive comparison for queue names... */ if (loc->length > bestlen && loc->location && !_cups_strncasecmp(uri, loc->location, loc->length) && loc->location[0] == '/' && (limit & loc->limit) != 0) { best = loc; bestlen = loc->length; } } else { /* * Use case-sensitive comparison for other URIs... */ if (loc->length > bestlen && loc->location && !strncmp(uri, loc->location, loc->length) && loc->location[0] == '/' && (limit & loc->limit) != 0) { best = loc; bestlen = loc->length; } } } /* * Return the match, if any... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindBest: best=%s", best ? best->location : "NONE"); return (best); } /* * 'cupsdFindLocation()' - Find the named location. */ cupsd_location_t * /* O - Location that matches */ cupsdFindLocation(const char *location) /* I - Connection */ { cupsd_location_t key; /* Search key */ key.location = (char *)location; return ((cupsd_location_t *)cupsArrayFind(Locations, &key)); } /* * 'cupsdFreeLocation()' - Free all memory used by a location. */ void cupsdFreeLocation(cupsd_location_t *loc)/* I - Location to free */ { cupsArrayDelete(loc->names); cupsArrayDelete(loc->allow); cupsArrayDelete(loc->deny); _cupsStrFree(loc->location); free(loc); } /* * 'cupsdIsAuthorized()' - Check to see if the user is authorized... */ http_status_t /* O - HTTP_OK if authorized or error code */ cupsdIsAuthorized(cupsd_client_t *con, /* I - Connection */ const char *owner)/* I - Owner of object */ { int i, /* Looping vars */ auth, /* Authorization status */ type; /* Type of authentication */ http_addr_t *hostaddr = httpGetAddress(con->http); /* Client address */ const char *hostname = httpGetHostname(con->http, NULL, 0); /* Client hostname */ unsigned address[4]; /* Authorization address */ cupsd_location_t *best; /* Best match for location so far */ size_t hostlen; /* Length of hostname */ char *name, /* Current username */ username[256], /* Username to authorize */ ownername[256], /* Owner name to authorize */ *ptr; /* Pointer into username */ struct passwd *pw; /* User password data */ static const char * const levels[] = /* Auth levels */ { "ANON", "USER", "GROUP" }; static const char * const types[] = /* Auth types */ { "None", "Basic", "Negotiate" }; cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: con->uri=\"%s\", con->best=%p(%s)", con->uri, con->best, con->best ? con->best->location ? con->best->location : "(null)" : ""); if (owner) cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: owner=\"%s\"", owner); /* * If there is no "best" authentication rule for this request, then * access is allowed from the local system and denied from other * addresses... */ if (!con->best) { if (httpAddrLocalhost(httpGetAddress(con->http)) || !strcmp(hostname, ServerName) || cupsArrayFind(ServerAlias, (void *)hostname)) return (HTTP_OK); else return (HTTP_FORBIDDEN); } best = con->best; if ((type = best->type) == CUPSD_AUTH_DEFAULT) type = cupsdDefaultAuthType(); cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: level=CUPSD_AUTH_%s, type=%s, satisfy=CUPSD_AUTH_SATISFY_%s, num_names=%d", levels[best->level], types[type], best->satisfy ? "ANY" : "ALL", cupsArrayCount(best->names)); if (best->limit == CUPSD_AUTH_LIMIT_IPP) cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: op=%x(%s)", best->op, ippOpString(best->op)); /* * Check host/ip-based accesses... */ #ifdef AF_INET6 if (httpAddrFamily(hostaddr) == AF_INET6) { /* * Copy IPv6 address... */ address[0] = ntohl(hostaddr->ipv6.sin6_addr.s6_addr32[0]); address[1] = ntohl(hostaddr->ipv6.sin6_addr.s6_addr32[1]); address[2] = ntohl(hostaddr->ipv6.sin6_addr.s6_addr32[2]); address[3] = ntohl(hostaddr->ipv6.sin6_addr.s6_addr32[3]); } else #endif /* AF_INET6 */ if (con->http->hostaddr->addr.sa_family == AF_INET) { /* * Copy IPv4 address... */ address[0] = 0; address[1] = 0; address[2] = 0; address[3] = ntohl(hostaddr->ipv4.sin_addr.s_addr); } else memset(address, 0, sizeof(address)); hostlen = strlen(hostname); auth = cupsdCheckAccess(address, hostname, hostlen, best) ? CUPSD_AUTH_ALLOW : CUPSD_AUTH_DENY; cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: auth=CUPSD_AUTH_%s...", auth ? "DENY" : "ALLOW"); if (auth == CUPSD_AUTH_DENY && best->satisfy == CUPSD_AUTH_SATISFY_ALL) return (HTTP_FORBIDDEN); #ifdef HAVE_SSL /* * See if encryption is required... */ if ((best->encryption >= HTTP_ENCRYPT_REQUIRED && !con->http->tls && _cups_strcasecmp(hostname, "localhost") && !httpAddrLocalhost(hostaddr) && best->satisfy == CUPSD_AUTH_SATISFY_ALL) && !(type == CUPSD_AUTH_NEGOTIATE || (type == CUPSD_AUTH_NONE && cupsdDefaultAuthType() == CUPSD_AUTH_NEGOTIATE))) { cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdIsAuthorized: Need upgrade to TLS..."); return (HTTP_UPGRADE_REQUIRED); } #endif /* HAVE_SSL */ /* * Now see what access level is required... */ if (best->level == CUPSD_AUTH_ANON || /* Anonymous access - allow it */ (type == CUPSD_AUTH_NONE && cupsArrayCount(best->names) == 0)) return (HTTP_OK); if (!con->username[0] && type == CUPSD_AUTH_NONE && best->limit == CUPSD_AUTH_LIMIT_IPP) { /* * Check for unauthenticated username... */ ipp_attribute_t *attr; /* requesting-user-name attribute */ attr = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_NAME); if (attr) { cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdIsAuthorized: requesting-user-name=\"%s\"", attr->values[0].string.text); strlcpy(username, attr->values[0].string.text, sizeof(username)); } else if (best->satisfy == CUPSD_AUTH_SATISFY_ALL || auth == CUPSD_AUTH_DENY) return (HTTP_UNAUTHORIZED); /* Non-anonymous needs user/pass */ else return (HTTP_OK); /* unless overridden with Satisfy */ } else { cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdIsAuthorized: username=\"%s\"", con->username); #ifdef HAVE_AUTHORIZATION_H if (!con->username[0] && !con->authref) #else if (!con->username[0]) #endif /* HAVE_AUTHORIZATION_H */ { if (best->satisfy == CUPSD_AUTH_SATISFY_ALL || auth == CUPSD_AUTH_DENY) return (HTTP_UNAUTHORIZED); /* Non-anonymous needs user/pass */ else return (HTTP_OK); /* unless overridden with Satisfy */ } if (con->type != type && type != CUPSD_AUTH_NONE && #ifdef HAVE_GSSAPI (type != CUPSD_AUTH_NEGOTIATE || con->gss_uid <= 0) && #endif /* HAVE_GSSAPI */ con->type != CUPSD_AUTH_BASIC) { cupsdLogMessage(CUPSD_LOG_ERROR, "Authorized using %s, expected %s.", types[con->type], types[type]); return (HTTP_UNAUTHORIZED); } strlcpy(username, con->username, sizeof(username)); } /* * OK, got a username. See if we need normal user access, or group * access... (root always matches) */ if (!strcmp(username, "root")) return (HTTP_OK); /* * Strip any @domain or @KDC from the username and owner... */ if ((ptr = strchr(username, '@')) != NULL) *ptr = '\0'; if (owner) { strlcpy(ownername, owner, sizeof(ownername)); if ((ptr = strchr(ownername, '@')) != NULL) *ptr = '\0'; } else ownername[0] = '\0'; /* * Get the user info... */ if (username[0]) { pw = getpwnam(username); endpwent(); } else pw = NULL; if (best->level == CUPSD_AUTH_USER) { /* * If there are no names associated with this location, then * any valid user is OK... */ if (cupsArrayCount(best->names) == 0) return (HTTP_OK); /* * Otherwise check the user list and return OK if this user is * allowed... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: Checking user membership..."); #ifdef HAVE_AUTHORIZATION_H /* * If an authorization reference was supplied it must match a right name... */ if (con->authref) { for (name = (char *)cupsArrayFirst(best->names); name; name = (char *)cupsArrayNext(best->names)) { if (!_cups_strncasecmp(name, "@AUTHKEY(", 9) && check_authref(con, name + 9)) return (HTTP_OK); else if (!_cups_strcasecmp(name, "@SYSTEM") && SystemGroupAuthKey && check_authref(con, SystemGroupAuthKey)) return (HTTP_OK); } return (HTTP_FORBIDDEN); } #endif /* HAVE_AUTHORIZATION_H */ for (name = (char *)cupsArrayFirst(best->names); name; name = (char *)cupsArrayNext(best->names)) { if (!_cups_strcasecmp(name, "@OWNER") && owner && !_cups_strcasecmp(username, ownername)) return (HTTP_OK); else if (!_cups_strcasecmp(name, "@SYSTEM")) { for (i = 0; i < NumSystemGroups; i ++) if (cupsdCheckGroup(username, pw, SystemGroups[i])) return (HTTP_OK); } else if (name[0] == '@') { if (cupsdCheckGroup(username, pw, name + 1)) return (HTTP_OK); } else if (!_cups_strcasecmp(username, name)) return (HTTP_OK); } return (con->username[0] ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED); } /* * Check to see if this user is in any of the named groups... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: Checking group membership..."); /* * Check to see if this user is in any of the named groups... */ for (name = (char *)cupsArrayFirst(best->names); name; name = (char *)cupsArrayNext(best->names)) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: Checking group \"%s\" membership...", name); if (!_cups_strcasecmp(name, "@SYSTEM")) { for (i = 0; i < NumSystemGroups; i ++) if (cupsdCheckGroup(username, pw, SystemGroups[i])) return (HTTP_OK); } else if (cupsdCheckGroup(username, pw, name)) return (HTTP_OK); } /* * The user isn't part of the specified group, so deny access... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdIsAuthorized: User not in group(s)."); return (con->username[0] ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED); } /* * 'cupsdNewLocation()' - Create a new location for authorization. * * Note: Still need to call cupsdAddLocation() to add it to the list of global * locations. */ cupsd_location_t * /* O - Pointer to new location record */ cupsdNewLocation(const char *location) /* I - Location path */ { cupsd_location_t *temp; /* New location */ /* * Try to allocate memory for the new location. */ if ((temp = calloc(1, sizeof(cupsd_location_t))) == NULL) return (NULL); /* * Initialize the record and copy the name over... */ if ((temp->location = _cupsStrAlloc(location)) == NULL) { free(temp); return (NULL); } temp->length = strlen(temp->location); /* * Return the new record... */ return (temp); } #ifdef HAVE_AUTHORIZATION_H /* * 'check_authref()' - Check if an authorization services reference has the * supplied right. */ static int /* O - 1 if right is valid, 0 otherwise */ check_authref(cupsd_client_t *con, /* I - Connection */ const char *right) /* I - Right name */ { OSStatus status; /* OS Status */ AuthorizationItem authright; /* Authorization right */ AuthorizationRights authrights; /* Authorization rights */ AuthorizationFlags authflags; /* Authorization flags */ /* * Check to see if the user is allowed to perform the task... */ if (!con->authref) return (0); authright.name = right; authright.valueLength = 0; authright.value = NULL; authright.flags = 0; authrights.count = 1; authrights.items = &authright; authflags = kAuthorizationFlagDefaults | kAuthorizationFlagExtendRights; if ((status = AuthorizationCopyRights(con->authref, &authrights, kAuthorizationEmptyEnvironment, authflags, NULL)) != 0) { cupsdLogMessage(CUPSD_LOG_ERROR, "AuthorizationCopyRights(\"%s\") returned %d (%s)", authright.name, (int)status, cssmErrorString(status)); return (0); } cupsdLogMessage(CUPSD_LOG_DEBUG2, "AuthorizationCopyRights(\"%s\") succeeded.", authright.name); return (1); } #endif /* HAVE_AUTHORIZATION_H */ /* * 'compare_locations()' - Compare two locations. */ static int /* O - Result of comparison */ compare_locations(cupsd_location_t *a, /* I - First location */ cupsd_location_t *b) /* I - Second location */ { return (strcmp(b->location, a->location)); } /* * 'copy_authmask()' - Copy function for auth masks. */ static cupsd_authmask_t * /* O - New auth mask */ copy_authmask(cupsd_authmask_t *mask, /* I - Existing auth mask */ void *data) /* I - User data (unused) */ { cupsd_authmask_t *temp; /* New auth mask */ (void)data; if ((temp = malloc(sizeof(cupsd_authmask_t))) != NULL) { memcpy(temp, mask, sizeof(cupsd_authmask_t)); if (temp->type == CUPSD_AUTH_NAME || temp->type == CUPSD_AUTH_INTERFACE) { /* * Make a copy of the name... */ if ((temp->mask.name.name = _cupsStrAlloc(temp->mask.name.name)) == NULL) { /* * Failed to make copy... */ free(temp); temp = NULL; } } } return (temp); } #if !HAVE_LIBPAM /* * 'cups_crypt()' - Encrypt the password using the DES or MD5 algorithms, * as needed. */ static char * /* O - Encrypted password */ cups_crypt(const char *pw, /* I - Password string */ const char *salt) /* I - Salt (key) string */ { if (!strncmp(salt, "$1$", 3)) { /* * Use MD5 passwords without the benefit of PAM; this is for * Slackware Linux, and the algorithm was taken from the * old shadow-19990827/lib/md5crypt.c source code... :( */ int i; /* Looping var */ unsigned long n; /* Output number */ int pwlen; /* Length of password string */ const char *salt_end; /* End of "salt" data for MD5 */ char *ptr; /* Pointer into result string */ _cups_md5_state_t state; /* Primary MD5 state info */ _cups_md5_state_t state2; /* Secondary MD5 state info */ unsigned char digest[16]; /* MD5 digest result */ static char result[120]; /* Final password string */ /* * Get the salt data between dollar signs, e.g. $1$saltdata$md5. * Get a maximum of 8 characters of salt data after $1$... */ for (salt_end = salt + 3; *salt_end && (salt_end - salt) < 11; salt_end ++) if (*salt_end == '$') break; /* * Compute the MD5 sum we need... */ pwlen = strlen(pw); _cupsMD5Init(&state); _cupsMD5Append(&state, (unsigned char *)pw, pwlen); _cupsMD5Append(&state, (unsigned char *)salt, salt_end - salt); _cupsMD5Init(&state2); _cupsMD5Append(&state2, (unsigned char *)pw, pwlen); _cupsMD5Append(&state2, (unsigned char *)salt + 3, salt_end - salt - 3); _cupsMD5Append(&state2, (unsigned char *)pw, pwlen); _cupsMD5Finish(&state2, digest); for (i = pwlen; i > 0; i -= 16) _cupsMD5Append(&state, digest, i > 16 ? 16 : i); for (i = pwlen; i > 0; i >>= 1) _cupsMD5Append(&state, (unsigned char *)((i & 1) ? "" : pw), 1); _cupsMD5Finish(&state, digest); for (i = 0; i < 1000; i ++) { _cupsMD5Init(&state); if (i & 1) _cupsMD5Append(&state, (unsigned char *)pw, pwlen); else _cupsMD5Append(&state, digest, 16); if (i % 3) _cupsMD5Append(&state, (unsigned char *)salt + 3, salt_end - salt - 3); if (i % 7) _cupsMD5Append(&state, (unsigned char *)pw, pwlen); if (i & 1) _cupsMD5Append(&state, digest, 16); else _cupsMD5Append(&state, (unsigned char *)pw, pwlen); _cupsMD5Finish(&state, digest); } /* * Copy the final sum to the result string and return... */ memcpy(result, salt, (size_t)(salt_end - salt)); ptr = result + (salt_end - salt); *ptr++ = '$'; for (i = 0; i < 5; i ++, ptr += 4) { n = ((((unsigned)digest[i] << 8) | (unsigned)digest[i + 6]) << 8); if (i < 4) n |= (unsigned)digest[i + 12]; else n |= (unsigned)digest[5]; to64(ptr, n, 4); } to64(ptr, (unsigned)digest[11], 2); ptr += 2; *ptr = '\0'; return (result); } else { /* * Use the standard crypt() function... */ return (crypt(pw, salt)); } } #endif /* !HAVE_LIBPAM */ /* * 'free_authmask()' - Free function for auth masks. */ static void free_authmask(cupsd_authmask_t *mask, /* I - Auth mask to free */ void *data) /* I - User data (unused) */ { (void)data; if (mask->type == CUPSD_AUTH_NAME || mask->type == CUPSD_AUTH_INTERFACE) _cupsStrFree(mask->mask.name.name); free(mask); } #if HAVE_LIBPAM /* * 'pam_func()' - PAM conversation function. */ static int /* O - Success or failure */ pam_func( int num_msg, /* I - Number of messages */ const struct pam_message **msg, /* I - Messages */ struct pam_response **resp, /* O - Responses */ void *appdata_ptr) /* I - Pointer to connection */ { int i; /* Looping var */ struct pam_response *replies; /* Replies */ cupsd_authdata_t *data; /* Pointer to auth data */ /* * Allocate memory for the responses... */ if ((replies = malloc(sizeof(struct pam_response) * (size_t)num_msg)) == NULL) return (PAM_CONV_ERR); /* * Answer all of the messages... */ DEBUG_printf(("pam_func: appdata_ptr = %p\n", appdata_ptr)); data = (cupsd_authdata_t *)appdata_ptr; for (i = 0; i < num_msg; i ++) { DEBUG_printf(("pam_func: Message = \"%s\"\n", msg[i]->msg)); switch (msg[i]->msg_style) { case PAM_PROMPT_ECHO_ON: DEBUG_printf(("pam_func: PAM_PROMPT_ECHO_ON, returning \"%s\"...\n", data->username)); replies[i].resp_retcode = PAM_SUCCESS; replies[i].resp = strdup(data->username); break; case PAM_PROMPT_ECHO_OFF: DEBUG_printf(("pam_func: PAM_PROMPT_ECHO_OFF, returning \"%s\"...\n", data->password)); replies[i].resp_retcode = PAM_SUCCESS; replies[i].resp = strdup(data->password); break; case PAM_TEXT_INFO: DEBUG_puts("pam_func: PAM_TEXT_INFO..."); replies[i].resp_retcode = PAM_SUCCESS; replies[i].resp = NULL; break; case PAM_ERROR_MSG: DEBUG_puts("pam_func: PAM_ERROR_MSG..."); replies[i].resp_retcode = PAM_SUCCESS; replies[i].resp = NULL; break; default: DEBUG_printf(("pam_func: Unknown PAM message %d...\n", msg[i]->msg_style)); free(replies); return (PAM_CONV_ERR); } } /* * Return the responses back to PAM... */ *resp = replies; return (PAM_SUCCESS); } #else /* * 'to64()' - Base64-encode an integer value... */ static void to64(char *s, /* O - Output string */ unsigned long v, /* I - Value to encode */ int n) /* I - Number of digits */ { const char *itoa64 = "./0123456789" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"; for (; n > 0; n --, v >>= 6) *s++ = itoa64[v & 0x3f]; } #endif /* HAVE_LIBPAM */ cups-2.2.7/scheduler/auth.h000664 000765 000024 00000011160 13255074424 016242 0ustar00msweetstaff000000 000000 /* * Authorization definitions for the CUPS scheduler. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include /* * HTTP authorization types and levels... */ #define CUPSD_AUTH_DEFAULT -1 /* Use DefaultAuthType */ #define CUPSD_AUTH_NONE 0 /* No authentication */ #define CUPSD_AUTH_BASIC 1 /* Basic authentication */ #define CUPSD_AUTH_NEGOTIATE 2 /* Kerberos authentication */ #define CUPSD_AUTH_AUTO 3 /* Kerberos or Basic, depending on configuration of server */ #define CUPSD_AUTH_ANON 0 /* Anonymous access */ #define CUPSD_AUTH_USER 1 /* Must have a valid username/password */ #define CUPSD_AUTH_GROUP 2 /* Must also be in a named group */ #define CUPSD_AUTH_ALLOW 0 /* Allow access */ #define CUPSD_AUTH_DENY 1 /* Deny access */ #define CUPSD_AUTH_NAME 0 /* Authorize host by name */ #define CUPSD_AUTH_IP 1 /* Authorize host by IP */ #define CUPSD_AUTH_INTERFACE 2 /* Authorize host by interface */ #define CUPSD_AUTH_SATISFY_ALL 0 /* Satisfy both address and auth */ #define CUPSD_AUTH_SATISFY_ANY 1 /* Satisfy either address or auth */ #define CUPSD_AUTH_LIMIT_DELETE 1 /* Limit DELETE requests */ #define CUPSD_AUTH_LIMIT_GET 2 /* Limit GET requests */ #define CUPSD_AUTH_LIMIT_HEAD 4 /* Limit HEAD requests */ #define CUPSD_AUTH_LIMIT_OPTIONS 8 /* Limit OPTIONS requests */ #define CUPSD_AUTH_LIMIT_POST 16 /* Limit POST requests */ #define CUPSD_AUTH_LIMIT_PUT 32 /* Limit PUT requests */ #define CUPSD_AUTH_LIMIT_TRACE 64 /* Limit TRACE requests */ #define CUPSD_AUTH_LIMIT_ALL 127 /* Limit all requests */ #define CUPSD_AUTH_LIMIT_IPP 128 /* Limit IPP requests */ #define IPP_ANY_OPERATION (ipp_op_t)0 /* Any IPP operation */ #define IPP_BAD_OPERATION (ipp_op_t)-1 /* No IPP operation */ /* * HTTP access control structures... */ typedef struct { unsigned address[4], /* IP address */ netmask[4]; /* IP netmask */ } cupsd_ipmask_t; typedef struct { size_t length; /* Length of name */ char *name; /* Name string */ } cupsd_namemask_t; typedef struct { int type; /* Mask type */ union { cupsd_namemask_t name; /* Host/Domain name */ cupsd_ipmask_t ip; /* IP address/network */ } mask; /* Mask data */ } cupsd_authmask_t; typedef struct { char *location; /* Location of resource */ size_t length; /* Length of location string */ ipp_op_t op; /* IPP operation */ int limit, /* Limit for these types of requests */ order_type, /* Allow or Deny */ type, /* Type of authentication */ level, /* Access level required */ satisfy; /* Satisfy any or all limits? */ cups_array_t *names, /* User or group names */ *allow, /* Allow lines */ *deny; /* Deny lines */ http_encryption_t encryption; /* To encrypt or not to encrypt... */ } cupsd_location_t; typedef struct cupsd_client_s cupsd_client_t; /* * Globals... */ VAR cups_array_t *Locations VALUE(NULL); /* Authorization locations */ #ifdef HAVE_SSL VAR http_encryption_t DefaultEncryption VALUE(HTTP_ENCRYPT_REQUIRED); /* Default encryption for authentication */ #endif /* HAVE_SSL */ /* * Prototypes... */ extern int cupsdAddIPMask(cups_array_t **masks, const unsigned address[4], const unsigned netmask[4]); extern void cupsdAddLocation(cupsd_location_t *loc); extern void cupsdAddName(cupsd_location_t *loc, char *name); extern int cupsdAddNameMask(cups_array_t **masks, char *name); extern void cupsdAuthorize(cupsd_client_t *con); extern int cupsdCheckAccess(unsigned ip[4], const char *name, size_t namelen, cupsd_location_t *loc); extern int cupsdCheckAuth(unsigned ip[4], const char *name, size_t namelen, cups_array_t *masks); extern int cupsdCheckGroup(const char *username, struct passwd *user, const char *groupname); extern cupsd_location_t *cupsdCopyLocation(cupsd_location_t *loc); extern void cupsdDeleteAllLocations(void); extern cupsd_location_t *cupsdFindBest(const char *path, http_state_t state); extern cupsd_location_t *cupsdFindLocation(const char *location); extern void cupsdFreeLocation(cupsd_location_t *loc); extern http_status_t cupsdIsAuthorized(cupsd_client_t *con, const char *owner); extern cupsd_location_t *cupsdNewLocation(const char *location); cups-2.2.7/scheduler/banners.c000664 000765 000024 00000010425 13255074424 016727 0ustar00msweetstaff000000 000000 /* * Banner routines for the CUPS scheduler. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #include /* * Local functions... */ static void add_banner(const char *name, const char *filename); static int compare_banners(const cupsd_banner_t *b0, const cupsd_banner_t *b1); static void free_banners(void); /* * 'cupsdFindBanner()' - Find a named banner. */ cupsd_banner_t * /* O - Pointer to banner or NULL */ cupsdFindBanner(const char *name) /* I - Name of banner */ { cupsd_banner_t key; /* Search key */ key.name = (char *)name; return ((cupsd_banner_t *)cupsArrayFind(Banners, &key)); } /* * 'cupsdLoadBanners()' - Load all available banner files... */ void cupsdLoadBanners(const char *d) /* I - Directory to search */ { cups_dir_t *dir; /* Directory pointer */ cups_dentry_t *dent; /* Directory entry */ char filename[1024], /* Name of banner */ *ext; /* Pointer to extension */ /* * Free old banner info... */ free_banners(); /* * Try opening the banner directory... */ if ((dir = cupsDirOpen(d)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "cupsdLoadBanners: Unable to open banner directory \"%s\": %s", d, strerror(errno)); return; } /* * Read entries, skipping directories and backup files. */ Banners = cupsArrayNew((cups_array_func_t)compare_banners, NULL); while ((dent = cupsDirRead(dir)) != NULL) { /* * Check the file to make sure it isn't a directory or a backup * file of some sort... */ snprintf(filename, sizeof(filename), "%s/%s", d, dent->filename); if (S_ISDIR(dent->fileinfo.st_mode)) continue; if (dent->filename[0] == '~' || dent->filename[strlen(dent->filename) - 1] == '~') continue; if ((ext = strrchr(dent->filename, '.')) != NULL) if (!strcmp(ext, ".bck") || !strcmp(ext, ".bak") || !strcmp(ext, ".sav")) continue; /* * Must be a valid file; add it! */ add_banner(dent->filename, filename); } /* * Close the directory... */ cupsDirClose(dir); } /* * 'add_banner()' - Add a banner to the array. */ static void add_banner(const char *name, /* I - Name of banner */ const char *filename) /* I - Filename for banner */ { mime_type_t *filetype; /* Filetype */ cupsd_banner_t *temp; /* New banner data */ /* * See what the filetype is... */ if ((filetype = mimeFileType(MimeDatabase, filename, NULL, NULL)) == NULL) { cupsdLogMessage(CUPSD_LOG_WARN, "add_banner: Banner \"%s\" (\"%s\") is of an unknown file " "type - skipping!", name, filename); return; } /* * Allocate memory... */ if ((temp = calloc(1, sizeof(cupsd_banner_t))) == NULL) { cupsdLogMessage(CUPSD_LOG_WARN, "add_banner: Unable to allocate memory for banner \"%s\" - " "skipping!", name); return; } /* * Copy the new banner data over... */ if ((temp->name = strdup(name)) == NULL) { cupsdLogMessage(CUPSD_LOG_WARN, "add_banner: Unable to allocate memory for banner \"%s\" - " "skipping!", name); free(temp); return; } temp->filetype = filetype; cupsArrayAdd(Banners, temp); } /* * 'compare_banners()' - Compare two banners. */ static int /* O - -1 if name0 < name1, etc. */ compare_banners( const cupsd_banner_t *b0, /* I - First banner */ const cupsd_banner_t *b1) /* I - Second banner */ { return (_cups_strcasecmp(b0->name, b1->name)); } /* * 'free_banners()' - Free all banners. */ static void free_banners(void) { cupsd_banner_t *temp; /* Current banner */ for (temp = (cupsd_banner_t *)cupsArrayFirst(Banners); temp; temp = (cupsd_banner_t *)cupsArrayNext(Banners)) { free(temp->name); free(temp); } cupsArrayDelete(Banners); Banners = NULL; } cups-2.2.7/scheduler/banners.h000664 000765 000024 00000001640 13255074424 016733 0ustar00msweetstaff000000 000000 /* * Banner definitions for the CUPS scheduler. * * Copyright 2007-2010 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Banner information structure... */ typedef struct /**** Banner file information ****/ { char *name; /* Name of banner */ mime_type_t *filetype; /* Filetype for banner */ } cupsd_banner_t; /* * Globals... */ VAR cups_array_t *Banners VALUE(NULL); /* Available banner files */ /* * Prototypes... */ extern cupsd_banner_t *cupsdFindBanner(const char *name); extern void cupsdLoadBanners(const char *d); cups-2.2.7/scheduler/cert.c000664 000765 000024 00000024211 13255074424 016232 0ustar00msweetstaff000000 000000 /* * Authentication certificate routines for the CUPS scheduler. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #ifdef HAVE_ACL_INIT # include # ifdef HAVE_MEMBERSHIP_H # include # endif /* HAVE_MEMBERSHIP_H */ #endif /* HAVE_ACL_INIT */ /* * Local functions... */ static int ctcompare(const char *a, const char *b); /* * 'cupsdAddCert()' - Add a certificate. */ void cupsdAddCert(int pid, /* I - Process ID */ const char *username, /* I - Username */ int type) /* I - AuthType for username */ { int i; /* Looping var */ cupsd_cert_t *cert; /* Current certificate */ int fd; /* Certificate file */ char filename[1024]; /* Certificate filename */ static const char hex[] = "0123456789ABCDEF"; /* Hex constants... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdAddCert: Adding certificate for PID %d", pid); /* * Allocate memory for the certificate... */ if ((cert = calloc(sizeof(cupsd_cert_t), 1)) == NULL) return; /* * Fill in the certificate information... */ cert->pid = pid; cert->type = type; strlcpy(cert->username, username, sizeof(cert->username)); for (i = 0; i < 32; i ++) cert->certificate[i] = hex[CUPS_RAND() & 15]; /* * Save the certificate to a file readable only by the User and Group * (or root and SystemGroup for PID == 0)... */ snprintf(filename, sizeof(filename), "%s/certs/%d", StateDir, pid); unlink(filename); if ((fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0400)) < 0) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create certificate file %s - %s", filename, strerror(errno)); free(cert); return; } if (pid == 0) { #ifdef HAVE_ACL_INIT acl_t acl; /* ACL information */ acl_entry_t entry; /* ACL entry */ acl_permset_t permset; /* Permissions */ # ifdef HAVE_MBR_UID_TO_UUID uuid_t group; /* Group ID */ # endif /* HAVE_MBR_UID_TO_UUID */ static int acls_not_supported = 0; /* Only warn once */ #endif /* HAVE_ACL_INIT */ /* * Root certificate... */ fchmod(fd, 0440); fchown(fd, RunUser, SystemGroupIDs[0]); cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdAddCert: NumSystemGroups=%d", NumSystemGroups); #ifdef HAVE_ACL_INIT if (NumSystemGroups > 1) { /* * Set POSIX ACLs for the root certificate so that all system * groups can access it... */ int j; /* Looping var */ # ifdef HAVE_MBR_UID_TO_UUID /* * On macOS, ACLs use UUIDs instead of GIDs... */ acl = acl_init(NumSystemGroups - 1); for (i = 1; i < NumSystemGroups; i ++) { /* * Add each group ID to the ACL... */ for (j = 0; j < i; j ++) if (SystemGroupIDs[j] == SystemGroupIDs[i]) break; if (j < i) continue; /* Skip duplicate groups */ acl_create_entry(&acl, &entry); acl_get_permset(entry, &permset); acl_add_perm(permset, ACL_READ_DATA); acl_set_tag_type(entry, ACL_EXTENDED_ALLOW); mbr_gid_to_uuid((gid_t)SystemGroupIDs[i], group); acl_set_qualifier(entry, &group); acl_set_permset(entry, permset); } # else /* * POSIX ACLs need permissions for owner, group, other, and mask * in addition to the rest of the system groups... */ acl = acl_init(NumSystemGroups + 3); /* Owner */ acl_create_entry(&acl, &entry); acl_get_permset(entry, &permset); acl_add_perm(permset, ACL_READ); acl_set_tag_type(entry, ACL_USER_OBJ); acl_set_permset(entry, permset); /* Group */ acl_create_entry(&acl, &entry); acl_get_permset(entry, &permset); acl_add_perm(permset, ACL_READ); acl_set_tag_type(entry, ACL_GROUP_OBJ); acl_set_permset(entry, permset); /* Others */ acl_create_entry(&acl, &entry); acl_get_permset(entry, &permset); acl_add_perm(permset, 0); acl_set_tag_type(entry, ACL_OTHER); acl_set_permset(entry, permset); /* Mask */ acl_create_entry(&acl, &entry); acl_get_permset(entry, &permset); acl_add_perm(permset, ACL_READ); acl_set_tag_type(entry, ACL_MASK); acl_set_permset(entry, permset); for (i = 1; i < NumSystemGroups; i ++) { /* * Add each group ID to the ACL... */ for (j = 0; j < i; j ++) if (SystemGroupIDs[j] == SystemGroupIDs[i]) break; if (j < i) continue; /* Skip duplicate groups */ acl_create_entry(&acl, &entry); acl_get_permset(entry, &permset); acl_add_perm(permset, ACL_READ); acl_set_tag_type(entry, ACL_GROUP); acl_set_qualifier(entry, SystemGroupIDs + i); acl_set_permset(entry, permset); } if (acl_valid(acl)) { char *text, *textptr; /* Temporary string */ cupsdLogMessage(CUPSD_LOG_ERROR, "ACL did not validate: %s", strerror(errno)); text = acl_to_text(acl, NULL); for (textptr = strchr(text, '\n'); textptr; textptr = strchr(textptr + 1, '\n')) *textptr = ','; cupsdLogMessage(CUPSD_LOG_ERROR, "ACL: %s", text); acl_free(text); } # endif /* HAVE_MBR_UID_TO_UUID */ if (acl_set_fd(fd, acl)) { if (errno != EOPNOTSUPP || !acls_not_supported) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to set ACLs on root certificate \"%s\" - %s", filename, strerror(errno)); if (errno == EOPNOTSUPP) acls_not_supported = 1; } acl_free(acl); } #endif /* HAVE_ACL_INIT */ RootCertTime = time(NULL); } else { /* * CGI certificate... */ fchmod(fd, 0400); fchown(fd, User, Group); } DEBUG_printf(("ADD pid=%d, username=%s, cert=%s\n", pid, username, cert->certificate)); write(fd, cert->certificate, strlen(cert->certificate)); close(fd); /* * Insert the certificate at the front of the list... */ cert->next = Certs; Certs = cert; } /* * 'cupsdDeleteCert()' - Delete a single certificate. */ void cupsdDeleteCert(int pid) /* I - Process ID */ { cupsd_cert_t *cert, /* Current certificate */ *prev; /* Previous certificate */ char filename[1024]; /* Certificate file */ for (prev = NULL, cert = Certs; cert != NULL; prev = cert, cert = cert->next) if (cert->pid == pid) { /* * Remove this certificate from the list... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDeleteCert: Removing certificate for PID %d.", pid); DEBUG_printf(("DELETE pid=%d, username=%s, cert=%s\n", cert->pid, cert->username, cert->certificate)); if (prev == NULL) Certs = cert->next; else prev->next = cert->next; free(cert); /* * Delete the file and return... */ snprintf(filename, sizeof(filename), "%s/certs/%d", StateDir, pid); if (unlink(filename)) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to remove %s!", filename); return; } } /* * 'cupsdDeleteAllCerts()' - Delete all certificates... */ void cupsdDeleteAllCerts(void) { cupsd_cert_t *cert, /* Current certificate */ *next; /* Next certificate */ char filename[1024]; /* Certificate file */ /* * Loop through each certificate, deleting them... */ for (cert = Certs; cert != NULL; cert = next) { /* * Delete the file... */ snprintf(filename, sizeof(filename), "%s/certs/%d", StateDir, cert->pid); if (unlink(filename)) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to remove %s!", filename); /* * Free memory... */ next = cert->next; free(cert); } Certs = NULL; RootCertTime = 0; } /* * 'cupsdFindCert()' - Find a certificate. */ cupsd_cert_t * /* O - Matching certificate or NULL */ cupsdFindCert(const char *certificate) /* I - Certificate */ { cupsd_cert_t *cert; /* Current certificate */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindCert(certificate=%s)", certificate); for (cert = Certs; cert != NULL; cert = cert->next) if (!ctcompare(certificate, cert->certificate)) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindCert: Returning \"%s\".", cert->username); return (cert); } cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindCert: Certificate not found."); return (NULL); } /* * 'cupsdInitCerts()' - Initialize the certificate "system" and root * certificate. */ void cupsdInitCerts(void) { #ifndef HAVE_ARC4RANDOM cups_file_t *fp; /* /dev/random file */ /* * Initialize the random number generator using the random device or * the current time, as available... */ if ((fp = cupsFileOpen("/dev/urandom", "rb")) == NULL) { struct timeval tod; /* Time of day */ /* * Get the time in usecs and use it as the initial seed... */ gettimeofday(&tod, NULL); CUPS_SRAND((unsigned)(tod.tv_sec + tod.tv_usec)); } else { unsigned seed; /* Seed for random number generator */ /* * Read 4 random characters from the random device and use * them as the seed... */ seed = (unsigned)cupsFileGetChar(fp); seed = (seed << 8) | (unsigned)cupsFileGetChar(fp); seed = (seed << 8) | (unsigned)cupsFileGetChar(fp); CUPS_SRAND((seed << 8) | (unsigned)cupsFileGetChar(fp)); cupsFileClose(fp); } #endif /* !HAVE_ARC4RANDOM */ /* * Create a root certificate and return... */ if (!RunUser) cupsdAddCert(0, "root", cupsdDefaultAuthType()); } /* * 'ctcompare()' - Compare two strings in constant time. */ static int /* O - 0 on match, non-zero on non-match */ ctcompare(const char *a, /* I - First string */ const char *b) /* I - Second string */ { int result = 0; /* Result */ while (*a && *b) { result |= *a ^ *b; a ++; b ++; } return (result); } cups-2.2.7/scheduler/cert.h000664 000765 000024 00000002432 13255074424 016240 0ustar00msweetstaff000000 000000 /* * Authentication certificate definitions for the CUPS scheduler. * * Copyright 2007-2012 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Certificate structure... */ typedef struct cupsd_cert_s { struct cupsd_cert_s *next; /* Next certificate in list */ int pid; /* Process ID (0 for root certificate) */ char certificate[33]; /* 32 hex characters, or 128 bits */ char username[33]; /* Authenticated username */ int type; /* AuthType for username */ } cupsd_cert_t; /* * Globals... */ VAR cupsd_cert_t *Certs /* List of certificates */ VALUE(NULL); VAR time_t RootCertTime /* Root certificate update time */ VALUE(0); /* * Prototypes... */ extern void cupsdAddCert(int pid, const char *username, int type); extern void cupsdDeleteCert(int pid); extern void cupsdDeleteAllCerts(void); extern cupsd_cert_t *cupsdFindCert(const char *certificate); extern void cupsdInitCerts(void); cups-2.2.7/scheduler/classes.c000664 000765 000024 00000046704 13255074424 016745 0ustar00msweetstaff000000 000000 /* * Printer class routines for the CUPS scheduler. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" /* * 'cupsdAddClass()' - Add a class to the system. */ cupsd_printer_t * /* O - New class */ cupsdAddClass(const char *name) /* I - Name of class */ { cupsd_printer_t *c; /* New class */ char uri[1024]; /* Class URI */ /* * Add the printer and set the type to "class"... */ if ((c = cupsdAddPrinter(name)) != NULL) { /* * Change from a printer to a class... */ c->type = CUPS_PRINTER_CLASS; httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, ServerName, RemotePort, "/classes/%s", name); cupsdSetString(&c->uri, uri); cupsdSetString(&c->error_policy, "retry-current-job"); } return (c); } /* * 'cupsdAddPrinterToClass()' - Add a printer to a class... */ void cupsdAddPrinterToClass( cupsd_printer_t *c, /* I - Class to add to */ cupsd_printer_t *p) /* I - Printer to add */ { int i; /* Looping var */ cupsd_printer_t **temp; /* Pointer to printer array */ /* * See if this printer is already a member of the class... */ for (i = 0; i < c->num_printers; i ++) if (c->printers[i] == p) return; /* * Allocate memory as needed... */ if (c->num_printers == 0) temp = malloc(sizeof(cupsd_printer_t *)); else temp = realloc(c->printers, sizeof(cupsd_printer_t *) * (size_t)(c->num_printers + 1)); if (temp == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to add printer %s to class %s!", p->name, c->name); return; } /* * Add the printer to the end of the array and update the number of printers. */ c->printers = temp; temp += c->num_printers; c->num_printers ++; *temp = p; } /* * 'cupsdDeletePrinterFromClass()' - Delete a printer from a class. */ int /* O - 1 if class changed, 0 otherwise */ cupsdDeletePrinterFromClass( cupsd_printer_t *c, /* I - Class to delete from */ cupsd_printer_t *p) /* I - Printer to delete */ { int i; /* Looping var */ /* * See if the printer is in the class... */ for (i = 0; i < c->num_printers; i ++) if (p == c->printers[i]) break; /* * If it is, remove it from the list... */ if (i < c->num_printers) { /* * Yes, remove the printer... */ c->num_printers --; if (i < c->num_printers) memmove(c->printers + i, c->printers + i + 1, (size_t)(c->num_printers - i) * sizeof(cupsd_printer_t *)); } else return (0); /* * Update the IPP attributes (have to do this for member-names)... */ cupsdSetPrinterAttrs(c); return (1); } /* * 'cupsdDeletePrinterFromClasses()' - Delete a printer from all classes. */ int /* O - 1 if class changed, 0 otherwise */ cupsdDeletePrinterFromClasses( cupsd_printer_t *p) /* I - Printer to delete */ { int changed = 0; /* Any class changed? */ cupsd_printer_t *c; /* Pointer to current class */ /* * Loop through the printer/class list and remove the printer * from each class listed... */ for (c = (cupsd_printer_t *)cupsArrayFirst(Printers); c; c = (cupsd_printer_t *)cupsArrayNext(Printers)) if (c->type & CUPS_PRINTER_CLASS) changed |= cupsdDeletePrinterFromClass(c, p); return (changed); } /* * 'cupsdFindAvailablePrinter()' - Find an available printer in a class. */ cupsd_printer_t * /* O - Available printer or NULL */ cupsdFindAvailablePrinter( const char *name) /* I - Class to check */ { int i; /* Looping var */ cupsd_printer_t *c; /* Printer class */ /* * Find the class... */ if ((c = cupsdFindClass(name)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to find class \"%s\"!", name); return (NULL); } if (c->num_printers == 0) return (NULL); /* * Make sure that the last printer is also a valid index into the printer * array. If not, reset the last printer to 0... */ if (c->last_printer >= c->num_printers) c->last_printer = 0; /* * Loop through the printers in the class and return the first idle * printer... We keep track of the last printer that we used so that * a "round robin" type of scheduling is realized (otherwise the first * server might be saturated with print jobs...) * * Thanks to Joel Fredrikson for helping us get this right! */ for (i = c->last_printer + 1; ; i ++) { if (i >= c->num_printers) i = 0; if (c->printers[i]->accepting && (c->printers[i]->state == IPP_PRINTER_IDLE || ((c->printers[i]->type & CUPS_PRINTER_REMOTE) && !c->printers[i]->job))) { c->last_printer = i; return (c->printers[i]); } if (i == c->last_printer) break; } return (NULL); } /* * 'cupsdFindClass()' - Find the named class. */ cupsd_printer_t * /* O - Matching class or NULL */ cupsdFindClass(const char *name) /* I - Name of class */ { cupsd_printer_t *c; /* Current class/printer */ if ((c = cupsdFindDest(name)) != NULL && (c->type & CUPS_PRINTER_CLASS)) return (c); else return (NULL); } /* * 'cupsdLoadAllClasses()' - Load classes from the classes.conf file. */ void cupsdLoadAllClasses(void) { int i; /* Looping var */ cups_file_t *fp; /* classes.conf file */ int linenum; /* Current line number */ char line[4096], /* Line from file */ *value, /* Pointer to value */ *valueptr; /* Pointer into value */ cupsd_printer_t *p, /* Current printer class */ *temp; /* Temporary pointer to printer */ /* * Open the classes.conf file... */ snprintf(line, sizeof(line), "%s/classes.conf", ServerRoot); if ((fp = cupsdOpenConfFile(line)) == NULL) return; /* * Read class configurations until we hit EOF... */ linenum = 0; p = NULL; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { /* * Decode the directive... */ if (!_cups_strcasecmp(line, " or */ if (p == NULL && value) { cupsdLogMessage(CUPSD_LOG_DEBUG, "Loading class %s...", value); /* * Since prior classes may have implicitly defined this class, * see if it already exists... */ if ((p = cupsdFindDest(value)) != NULL) { p->type = CUPS_PRINTER_CLASS; cupsdSetStringf(&p->uri, "ipp://%s:%d/classes/%s", ServerName, LocalPort, value); cupsdSetString(&p->error_policy, "retry-job"); } else p = cupsdAddClass(value); p->accepting = 1; p->state = IPP_PRINTER_IDLE; if (!_cups_strcasecmp(line, "") || !_cups_strcasecmp(line, "")) { if (p != NULL) { cupsdSetPrinterAttrs(p); p = NULL; } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else if (!p) { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "UUID")) { if (value && !strncmp(value, "urn:uuid:", 9)) cupsdSetString(&(p->uuid), value); else cupsdLogMessage(CUPSD_LOG_ERROR, "Bad UUID on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "AuthInfoRequired")) { if (!cupsdSetAuthInfoRequired(p, value, NULL)) cupsdLogMessage(CUPSD_LOG_ERROR, "Bad AuthInfoRequired on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "Info")) { if (value) cupsdSetString(&p->info, value); } else if (!_cups_strcasecmp(line, "Location")) { if (value) cupsdSetString(&p->location, value); } else if (!_cups_strcasecmp(line, "Option") && value) { /* * Option name value */ for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++); if (!*valueptr) cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); else { for (; *valueptr && isspace(*valueptr & 255); *valueptr++ = '\0'); p->num_options = cupsAddOption(value, valueptr, p->num_options, &(p->options)); } } else if (!_cups_strcasecmp(line, "Printer")) { if (!value) { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); continue; } else if ((temp = cupsdFindPrinter(value)) == NULL) { cupsdLogMessage(CUPSD_LOG_WARN, "Unknown printer %s on line %d of classes.conf.", value, linenum); /* * Add the missing remote printer... */ if ((temp = cupsdAddPrinter(value)) != NULL) { cupsdSetString(&temp->make_model, "Remote Printer on unknown"); temp->state = IPP_PRINTER_STOPPED; temp->type |= CUPS_PRINTER_REMOTE; cupsdSetString(&temp->location, "Location Unknown"); cupsdSetString(&temp->info, "No Information Available"); temp->hostname[0] = '\0'; cupsdSetPrinterAttrs(temp); } } if (temp) cupsdAddPrinterToClass(p, temp); } else if (!_cups_strcasecmp(line, "State")) { /* * Set the initial queue state... */ if (!_cups_strcasecmp(value, "idle")) p->state = IPP_PRINTER_IDLE; else if (!_cups_strcasecmp(value, "stopped")) { p->state = IPP_PRINTER_STOPPED; for (i = 0 ; i < p->num_reasons; i ++) if (!strcmp("paused", p->reasons[i])) break; if (i >= p->num_reasons && p->num_reasons < (int)(sizeof(p->reasons) / sizeof(p->reasons[0]))) { p->reasons[p->num_reasons] = _cupsStrAlloc("paused"); p->num_reasons ++; } } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "StateMessage")) { /* * Set the initial queue state message... */ if (value) strlcpy(p->state_message, value, sizeof(p->state_message)); } else if (!_cups_strcasecmp(line, "StateTime")) { /* * Set the state time... */ if (value) p->state_time = atoi(value); } else if (!_cups_strcasecmp(line, "Accepting")) { /* * Set the initial accepting state... */ if (value && (!_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "true"))) p->accepting = 1; else if (value && (!_cups_strcasecmp(value, "no") || !_cups_strcasecmp(value, "off") || !_cups_strcasecmp(value, "false"))) p->accepting = 0; else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "Shared")) { /* * Set the initial shared state... */ if (value && (!_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "true"))) p->shared = 1; else if (value && (!_cups_strcasecmp(value, "no") || !_cups_strcasecmp(value, "off") || !_cups_strcasecmp(value, "false"))) p->shared = 0; else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "JobSheets")) { /* * Set the initial job sheets... */ if (value) { for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++); if (*valueptr) *valueptr++ = '\0'; cupsdSetString(&p->job_sheets[0], value); while (isspace(*valueptr & 255)) valueptr ++; if (*valueptr) { for (value = valueptr; *valueptr && !isspace(*valueptr & 255); valueptr ++); if (*valueptr) *valueptr = '\0'; cupsdSetString(&p->job_sheets[1], value); } } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "AllowUser")) { if (value) { p->deny_users = 0; cupsdAddString(&(p->users), value); } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "DenyUser")) { if (value) { p->deny_users = 1; cupsdAddString(&(p->users), value); } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "QuotaPeriod")) { if (value) p->quota_period = atoi(value); else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "PageLimit")) { if (value) p->page_limit = atoi(value); else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "KLimit")) { if (value) p->k_limit = atoi(value); else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "OpPolicy")) { if (value) { cupsd_policy_t *pol; /* Policy */ if ((pol = cupsdFindPolicy(value)) != NULL) { cupsdSetString(&p->op_policy, value); p->op_policy_ptr = pol; } else cupsdLogMessage(CUPSD_LOG_ERROR, "Bad policy \"%s\" on line %d of classes.conf", value, linenum); } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else if (!_cups_strcasecmp(line, "ErrorPolicy")) { if (value) { if (strcmp(value, "retry-current-job") && strcmp(value, "retry-job")) cupsdLogMessage(CUPSD_LOG_WARN, "ErrorPolicy %s ignored on line %d of classes.conf", value, linenum); } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of classes.conf.", linenum); } else { /* * Something else we don't understand... */ cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown configuration directive %s on line %d of classes.conf.", line, linenum); } } cupsFileClose(fp); } /* * 'cupsdSaveAllClasses()' - Save classes to the classes.conf file. */ void cupsdSaveAllClasses(void) { cups_file_t *fp; /* classes.conf file */ char filename[1024], /* classes.conf filename */ temp[1024], /* Temporary string */ value[2048], /* Value string */ *name; /* Current user name */ cupsd_printer_t *pclass; /* Current printer class */ int i; /* Looping var */ time_t curtime; /* Current time */ struct tm *curdate; /* Current date */ cups_option_t *option; /* Current option */ /* * Create the classes.conf file... */ snprintf(filename, sizeof(filename), "%s/classes.conf", ServerRoot); if ((fp = cupsdCreateConfFile(filename, ConfigFilePerm)) == NULL) return; cupsdLogMessage(CUPSD_LOG_INFO, "Saving classes.conf..."); /* * Write a small header to the file... */ curtime = time(NULL); curdate = localtime(&curtime); strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate); cupsFilePuts(fp, "# Class configuration file for " CUPS_SVERSION "\n"); cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp); cupsFilePuts(fp, "# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING\n"); /* * Write each local class known to the system... */ for (pclass = (cupsd_printer_t *)cupsArrayFirst(Printers); pclass; pclass = (cupsd_printer_t *)cupsArrayNext(Printers)) { /* * Skip remote destinations and regular printers... */ if ((pclass->type & CUPS_PRINTER_REMOTE) || !(pclass->type & CUPS_PRINTER_CLASS)) continue; /* * Write printers as needed... */ if (pclass == DefaultPrinter) cupsFilePrintf(fp, "\n", pclass->name); else cupsFilePrintf(fp, "\n", pclass->name); cupsFilePrintf(fp, "UUID %s\n", pclass->uuid); if (pclass->num_auth_info_required > 0) { switch (pclass->num_auth_info_required) { case 1 : strlcpy(value, pclass->auth_info_required[0], sizeof(value)); break; case 2 : snprintf(value, sizeof(value), "%s,%s", pclass->auth_info_required[0], pclass->auth_info_required[1]); break; case 3 : default : snprintf(value, sizeof(value), "%s,%s,%s", pclass->auth_info_required[0], pclass->auth_info_required[1], pclass->auth_info_required[2]); break; } cupsFilePutConf(fp, "AuthInfoRequired", value); } if (pclass->info) cupsFilePutConf(fp, "Info", pclass->info); if (pclass->location) cupsFilePutConf(fp, "Location", pclass->location); if (pclass->state == IPP_PRINTER_STOPPED) cupsFilePuts(fp, "State Stopped\n"); else cupsFilePuts(fp, "State Idle\n"); cupsFilePrintf(fp, "StateTime %d\n", (int)pclass->state_time); if (pclass->accepting) cupsFilePuts(fp, "Accepting Yes\n"); else cupsFilePuts(fp, "Accepting No\n"); if (pclass->shared) cupsFilePuts(fp, "Shared Yes\n"); else cupsFilePuts(fp, "Shared No\n"); snprintf(value, sizeof(value), "%s %s", pclass->job_sheets[0], pclass->job_sheets[1]); cupsFilePutConf(fp, "JobSheets", value); for (i = 0; i < pclass->num_printers; i ++) cupsFilePrintf(fp, "Printer %s\n", pclass->printers[i]->name); cupsFilePrintf(fp, "QuotaPeriod %d\n", pclass->quota_period); cupsFilePrintf(fp, "PageLimit %d\n", pclass->page_limit); cupsFilePrintf(fp, "KLimit %d\n", pclass->k_limit); for (name = (char *)cupsArrayFirst(pclass->users); name; name = (char *)cupsArrayNext(pclass->users)) cupsFilePutConf(fp, pclass->deny_users ? "DenyUser" : "AllowUser", name); if (pclass->op_policy) cupsFilePutConf(fp, "OpPolicy", pclass->op_policy); if (pclass->error_policy) cupsFilePutConf(fp, "ErrorPolicy", pclass->error_policy); for (i = pclass->num_options, option = pclass->options; i > 0; i --, option ++) { snprintf(value, sizeof(value), "%s %s", option->name, option->value); cupsFilePutConf(fp, "Option", value); } if (pclass == DefaultPrinter) cupsFilePuts(fp, "\n"); else cupsFilePuts(fp, "\n"); } cupsdCloseCreatedConfFile(fp, filename); } cups-2.2.7/scheduler/classes.h000664 000765 000024 00000002101 13255074424 016731 0ustar00msweetstaff000000 000000 /* * Printer class definitions for the CUPS scheduler. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2005 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Prototypes... */ extern cupsd_printer_t *cupsdAddClass(const char *name); extern void cupsdAddPrinterToClass(cupsd_printer_t *c, cupsd_printer_t *p); extern int cupsdDeletePrinterFromClass(cupsd_printer_t *c, cupsd_printer_t *p); extern int cupsdDeletePrinterFromClasses(cupsd_printer_t *p); extern cupsd_printer_t *cupsdFindAvailablePrinter(const char *name); extern cupsd_printer_t *cupsdFindClass(const char *name); extern void cupsdLoadAllClasses(void); extern void cupsdSaveAllClasses(void); cups-2.2.7/scheduler/client.c000664 000765 000024 00000312607 13255074424 016564 0ustar00msweetstaff000000 000000 /* * Client routines for the CUPS scheduler. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * This file contains Kerberos support code, copyright 2006 by * Jelmer Vernooij. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #define _CUPS_NO_DEPRECATED #define _HTTP_NO_PRIVATE #include "cupsd.h" #ifdef __APPLE__ # include #endif /* __APPLE__ */ #ifdef HAVE_TCPD_H # include #endif /* HAVE_TCPD_H */ /* * Local functions... */ static int check_if_modified(cupsd_client_t *con, struct stat *filestats); static int compare_clients(cupsd_client_t *a, cupsd_client_t *b, void *data); #ifdef HAVE_SSL static int cupsd_start_tls(cupsd_client_t *con, http_encryption_t e); #endif /* HAVE_SSL */ static char *get_file(cupsd_client_t *con, struct stat *filestats, char *filename, size_t len); static http_status_t install_cupsd_conf(cupsd_client_t *con); static int is_cgi(cupsd_client_t *con, const char *filename, struct stat *filestats, mime_type_t *type); static int is_path_absolute(const char *path); static int pipe_command(cupsd_client_t *con, int infile, int *outfile, char *command, char *options, int root); static int valid_host(cupsd_client_t *con); static int write_file(cupsd_client_t *con, http_status_t code, char *filename, char *type, struct stat *filestats); static void write_pipe(cupsd_client_t *con); /* * 'cupsdAcceptClient()' - Accept a new client. */ void cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */ { const char *hostname; /* Hostname of client */ char name[256]; /* Hostname of client */ int count; /* Count of connections on a host */ cupsd_client_t *con, /* New client pointer */ *tempcon; /* Temporary client pointer */ socklen_t addrlen; /* Length of address */ http_addr_t temp; /* Temporary address variable */ static time_t last_dos = 0; /* Time of last DoS attack */ #ifdef HAVE_TCPD_H struct request_info wrap_req; /* TCP wrappers request information */ #endif /* HAVE_TCPD_H */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdAcceptClient(lis=%p(%d)) Clients=%d", lis, lis->fd, cupsArrayCount(Clients)); /* * Make sure we don't have a full set of clients already... */ if (cupsArrayCount(Clients) == MaxClients) return; cupsdSetBusyState(1); /* * Get a pointer to the next available client... */ if (!Clients) Clients = cupsArrayNew(NULL, NULL); if (!Clients) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for clients array!"); cupsdPauseListening(); return; } if (!ActiveClients) ActiveClients = cupsArrayNew((cups_array_func_t)compare_clients, NULL); if (!ActiveClients) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for active clients array!"); cupsdPauseListening(); return; } if ((con = calloc(1, sizeof(cupsd_client_t))) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for client!"); cupsdPauseListening(); return; } /* * Accept the client and get the remote address... */ con->number = ++ LastClientNumber; con->file = -1; if ((con->http = httpAcceptConnection(lis->fd, 0)) == NULL) { if (errno == ENFILE || errno == EMFILE) cupsdPauseListening(); cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to accept client connection - %s.", strerror(errno)); free(con); return; } /* * Save the connected address and port number... */ addrlen = sizeof(con->clientaddr); if (getsockname(httpGetFd(con->http), (struct sockaddr *)&con->clientaddr, &addrlen) || addrlen == 0) con->clientaddr = lis->address; cupsdLogClient(con, CUPSD_LOG_DEBUG, "Server address is \"%s\".", httpAddrString(&con->clientaddr, name, sizeof(name))); /* * Check the number of clients on the same address... */ for (count = 0, tempcon = (cupsd_client_t *)cupsArrayFirst(Clients); tempcon; tempcon = (cupsd_client_t *)cupsArrayNext(Clients)) if (httpAddrEqual(httpGetAddress(tempcon->http), httpGetAddress(con->http))) { count ++; if (count >= MaxClientsPerHost) break; } if (count >= MaxClientsPerHost) { if ((time(NULL) - last_dos) >= 60) { last_dos = time(NULL); cupsdLogMessage(CUPSD_LOG_WARN, "Possible DoS attack - more than %d clients connecting " "from %s.", MaxClientsPerHost, httpGetHostname(con->http, name, sizeof(name))); } httpClose(con->http); free(con); return; } /* * Get the hostname or format the IP address as needed... */ if (HostNameLookups) hostname = httpResolveHostname(con->http, NULL, 0); else hostname = httpGetHostname(con->http, NULL, 0); if (hostname == NULL && HostNameLookups == 2) { /* * Can't have an unresolved IP address with double-lookups enabled... */ httpClose(con->http); cupsdLogClient(con, CUPSD_LOG_WARN, "Name lookup failed - connection from %s closed!", httpGetHostname(con->http, NULL, 0)); free(con); return; } if (HostNameLookups == 2) { /* * Do double lookups as needed... */ http_addrlist_t *addrlist, /* List of addresses */ *addr; /* Current address */ if ((addrlist = httpAddrGetList(hostname, AF_UNSPEC, NULL)) != NULL) { /* * See if the hostname maps to the same IP address... */ for (addr = addrlist; addr; addr = addr->next) if (httpAddrEqual(httpGetAddress(con->http), &(addr->addr))) break; } else addr = NULL; httpAddrFreeList(addrlist); if (!addr) { /* * Can't have a hostname that doesn't resolve to the same IP address * with double-lookups enabled... */ httpClose(con->http); cupsdLogClient(con, CUPSD_LOG_WARN, "IP lookup failed - connection from %s closed!", httpGetHostname(con->http, NULL, 0)); free(con); return; } } #ifdef HAVE_TCPD_H /* * See if the connection is denied by TCP wrappers... */ request_init(&wrap_req, RQ_DAEMON, "cupsd", RQ_FILE, httpGetFd(con->http), NULL); fromhost(&wrap_req); if (!hosts_access(&wrap_req)) { httpClose(con->http); cupsdLogClient(con, CUPSD_LOG_WARN, "Connection from %s refused by /etc/hosts.allow and " "/etc/hosts.deny rules.", httpGetHostname(con->http, NULL, 0)); free(con); return; } #endif /* HAVE_TCPD_H */ #ifdef AF_LOCAL if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL) { # ifdef __APPLE__ socklen_t peersize; /* Size of peer credentials */ pid_t peerpid; /* Peer process ID */ char peername[256]; /* Name of process */ peersize = sizeof(peerpid); if (!getsockopt(httpGetFd(con->http), SOL_LOCAL, LOCAL_PEERPID, &peerpid, &peersize)) { if (!proc_name((int)peerpid, peername, sizeof(peername))) cupsdLogClient(con, CUPSD_LOG_DEBUG, "Accepted from %s (Domain ???[%d])", httpGetHostname(con->http, NULL, 0), (int)peerpid); else cupsdLogClient(con, CUPSD_LOG_DEBUG, "Accepted from %s (Domain %s[%d])", httpGetHostname(con->http, NULL, 0), peername, (int)peerpid); } else # endif /* __APPLE__ */ cupsdLogClient(con, CUPSD_LOG_DEBUG, "Accepted from %s (Domain)", httpGetHostname(con->http, NULL, 0)); } else #endif /* AF_LOCAL */ cupsdLogClient(con, CUPSD_LOG_DEBUG, "Accepted from %s:%d (IPv%d)", httpGetHostname(con->http, NULL, 0), httpAddrPort(httpGetAddress(con->http)), httpAddrFamily(httpGetAddress(con->http)) == AF_INET ? 4 : 6); /* * Get the local address the client connected to... */ addrlen = sizeof(temp); if (getsockname(httpGetFd(con->http), (struct sockaddr *)&temp, &addrlen)) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to get local address - %s", strerror(errno)); strlcpy(con->servername, "localhost", sizeof(con->servername)); con->serverport = LocalPort; } #ifdef AF_LOCAL else if (httpAddrFamily(&temp) == AF_LOCAL) { strlcpy(con->servername, "localhost", sizeof(con->servername)); con->serverport = LocalPort; } #endif /* AF_LOCAL */ else { if (httpAddrLocalhost(&temp)) strlcpy(con->servername, "localhost", sizeof(con->servername)); else if (HostNameLookups) httpAddrLookup(&temp, con->servername, sizeof(con->servername)); else httpAddrString(&temp, con->servername, sizeof(con->servername)); con->serverport = httpAddrPort(&(lis->address)); } /* * Add the connection to the array of active clients... */ cupsArrayAdd(Clients, con); /* * Add the socket to the server select. */ cupsdAddSelect(httpGetFd(con->http), (cupsd_selfunc_t)cupsdReadClient, NULL, con); cupsdLogClient(con, CUPSD_LOG_DEBUG, "Waiting for request."); /* * Temporarily suspend accept()'s until we lose a client... */ if (cupsArrayCount(Clients) == MaxClients) cupsdPauseListening(); #ifdef HAVE_SSL /* * See if we are connecting on a secure port... */ if (lis->encryption == HTTP_ENCRYPTION_ALWAYS) { /* * https connection; go secure... */ if (cupsd_start_tls(con, HTTP_ENCRYPTION_ALWAYS)) cupsdCloseClient(con); } else con->auto_ssl = 1; #endif /* HAVE_SSL */ } /* * 'cupsdCloseAllClients()' - Close all remote clients immediately. */ void cupsdCloseAllClients(void) { cupsd_client_t *con; /* Current client */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCloseAllClients() Clients=%d", cupsArrayCount(Clients)); for (con = (cupsd_client_t *)cupsArrayFirst(Clients); con; con = (cupsd_client_t *)cupsArrayNext(Clients)) if (cupsdCloseClient(con)) cupsdCloseClient(con); } /* * 'cupsdCloseClient()' - Close a remote client. */ int /* O - 1 if partial close, 0 if fully closed */ cupsdCloseClient(cupsd_client_t *con) /* I - Client to close */ { int partial; /* Do partial close for SSL? */ cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing connection."); /* * Flush pending writes before closing... */ httpFlushWrite(con->http); partial = 0; if (con->pipe_pid != 0) { /* * Stop any CGI process... */ cupsdEndProcess(con->pipe_pid, 1); con->pipe_pid = 0; } if (con->file >= 0) { cupsdRemoveSelect(con->file); close(con->file); con->file = -1; } /* * Close the socket and clear the file from the input set for select()... */ if (httpGetFd(con->http) >= 0) { cupsArrayRemove(ActiveClients, con); cupsdSetBusyState(0); #ifdef HAVE_SSL /* * Shutdown encryption as needed... */ if (httpIsEncrypted(con->http)) partial = 1; #endif /* HAVE_SSL */ if (partial) { /* * Only do a partial close so that the encrypted client gets everything. */ httpShutdown(con->http); cupsdAddSelect(httpGetFd(con->http), (cupsd_selfunc_t)cupsdReadClient, NULL, con); cupsdLogClient(con, CUPSD_LOG_DEBUG, "Waiting for socket close."); } else { /* * Shut the socket down fully... */ cupsdRemoveSelect(httpGetFd(con->http)); httpClose(con->http); con->http = NULL; } } if (!partial) { /* * Free memory... */ cupsdRemoveSelect(httpGetFd(con->http)); httpClose(con->http); if (con->filename) { unlink(con->filename); cupsdClearString(&con->filename); } cupsdClearString(&con->command); cupsdClearString(&con->options); cupsdClearString(&con->query_string); if (con->request) { ippDelete(con->request); con->request = NULL; } if (con->response) { ippDelete(con->response); con->response = NULL; } if (con->language) { cupsLangFree(con->language); con->language = NULL; } #ifdef HAVE_AUTHORIZATION_H if (con->authref) { AuthorizationFree(con->authref, kAuthorizationFlagDefaults); con->authref = NULL; } #endif /* HAVE_AUTHORIZATION_H */ /* * Re-enable new client connections if we are going back under the * limit... */ if (cupsArrayCount(Clients) == MaxClients) cupsdResumeListening(); /* * Compact the list of clients as necessary... */ cupsArrayRemove(Clients, con); free(con); } return (partial); } /* * 'cupsdReadClient()' - Read data from a client. */ void cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */ { char line[32768], /* Line from client... */ locale[64], /* Locale */ *ptr; /* Pointer into strings */ http_status_t status; /* Transfer status */ ipp_state_t ipp_state; /* State of IPP transfer */ int bytes; /* Number of bytes to POST */ char *filename; /* Name of file for GET/HEAD */ char buf[1024]; /* Buffer for real filename */ struct stat filestats; /* File information */ mime_type_t *type; /* MIME type of file */ cupsd_printer_t *p; /* Printer */ static unsigned request_id = 0; /* Request ID for temp files */ status = HTTP_STATUS_CONTINUE; cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cupsdReadClient: error=%d, used=%d, state=%s, data_encoding=HTTP_ENCODING_%s, data_remaining=" CUPS_LLFMT ", request=%p(%s), file=%d", httpError(con->http), (int)httpGetReady(con->http), httpStateString(httpGetState(con->http)), httpIsChunked(con->http) ? "CHUNKED" : "LENGTH", CUPS_LLCAST httpGetRemaining(con->http), con->request, con->request ? ippStateString(ippGetState(con->request)) : "", con->file); if (httpGetState(con->http) == HTTP_STATE_GET_SEND || httpGetState(con->http) == HTTP_STATE_POST_SEND || httpGetState(con->http) == HTTP_STATE_STATUS) { /* * If we get called in the wrong state, then something went wrong with the * connection and we need to shut it down... */ if (!httpGetReady(con->http) && recv(httpGetFd(con->http), buf, 1, MSG_PEEK) < 1) { /* * Connection closed... */ cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on EOF."); cupsdCloseClient(con); return; } cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on unexpected HTTP read state %s.", httpStateString(httpGetState(con->http))); cupsdCloseClient(con); return; } #ifdef HAVE_SSL if (con->auto_ssl) { /* * Automatically check for a SSL/TLS handshake... */ con->auto_ssl = 0; if (recv(httpGetFd(con->http), buf, 1, MSG_PEEK) == 1 && (!buf[0] || !strchr("DGHOPT", buf[0]))) { /* * Encrypt this connection... */ cupsdLogClient(con, CUPSD_LOG_DEBUG2, "Saw first byte %02X, auto-negotiating SSL/TLS session.", buf[0] & 255); if (cupsd_start_tls(con, HTTP_ENCRYPTION_ALWAYS)) cupsdCloseClient(con); return; } } #endif /* HAVE_SSL */ switch (httpGetState(con->http)) { case HTTP_STATE_WAITING : /* * See if we've received a request line... */ con->operation = httpReadRequest(con->http, con->uri, sizeof(con->uri)); if (con->operation == HTTP_STATE_ERROR || con->operation == HTTP_STATE_UNKNOWN_METHOD || con->operation == HTTP_STATE_UNKNOWN_VERSION) { if (httpError(con->http)) cupsdLogClient(con, CUPSD_LOG_DEBUG, "HTTP_STATE_WAITING Closing for error %d (%s)", httpError(con->http), strerror(httpError(con->http))); else cupsdLogClient(con, CUPSD_LOG_DEBUG, "HTTP_STATE_WAITING Closing on error: %s", cupsLastErrorString()); cupsdCloseClient(con); return; } /* * Ignore blank request lines... */ if (con->operation == HTTP_STATE_WAITING) break; /* * Clear other state variables... */ con->bytes = 0; con->file = -1; con->file_ready = 0; con->pipe_pid = 0; con->username[0] = '\0'; con->password[0] = '\0'; cupsdClearString(&con->command); cupsdClearString(&con->options); cupsdClearString(&con->query_string); if (con->request) { ippDelete(con->request); con->request = NULL; } if (con->response) { ippDelete(con->response); con->response = NULL; } if (con->language) { cupsLangFree(con->language); con->language = NULL; } #ifdef HAVE_GSSAPI con->have_gss = 0; con->gss_uid = 0; #endif /* HAVE_GSSAPI */ /* * Handle full URLs in the request line... */ if (strcmp(con->uri, "*")) { char scheme[HTTP_MAX_URI], /* Method/scheme */ userpass[HTTP_MAX_URI], /* Username:password */ hostname[HTTP_MAX_URI], /* Hostname */ resource[HTTP_MAX_URI]; /* Resource path */ int port; /* Port number */ /* * Separate the URI into its components... */ if (httpSeparateURI(HTTP_URI_CODING_MOST, con->uri, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Bad URI \"%s\" in request.", con->uri); cupsdSendError(con, HTTP_STATUS_METHOD_NOT_ALLOWED, CUPSD_AUTH_NONE); cupsdCloseClient(con); return; } /* * Only allow URIs with the servername, localhost, or an IP * address... */ if (strcmp(scheme, "file") && _cups_strcasecmp(hostname, ServerName) && _cups_strcasecmp(hostname, "localhost") && !cupsArrayFind(ServerAlias, hostname) && !isdigit(hostname[0]) && hostname[0] != '[') { /* * Nope, we don't do proxies... */ cupsdLogClient(con, CUPSD_LOG_ERROR, "Bad URI \"%s\" in request.", con->uri); cupsdSendError(con, HTTP_STATUS_METHOD_NOT_ALLOWED, CUPSD_AUTH_NONE); cupsdCloseClient(con); return; } /* * Copy the resource portion back into the URI; both resource and * con->uri are HTTP_MAX_URI bytes in size... */ strlcpy(con->uri, resource, sizeof(con->uri)); } /* * Process the request... */ gettimeofday(&(con->start), NULL); cupsdLogClient(con, CUPSD_LOG_DEBUG, "%s %s HTTP/%d.%d", httpStateString(con->operation) + 11, con->uri, httpGetVersion(con->http) / 100, httpGetVersion(con->http) % 100); if (!cupsArrayFind(ActiveClients, con)) { cupsArrayAdd(ActiveClients, con); cupsdSetBusyState(0); } case HTTP_STATE_OPTIONS : case HTTP_STATE_DELETE : case HTTP_STATE_GET : case HTTP_STATE_HEAD : case HTTP_STATE_POST : case HTTP_STATE_PUT : case HTTP_STATE_TRACE : /* * Parse incoming parameters until the status changes... */ while ((status = httpUpdate(con->http)) == HTTP_STATUS_CONTINUE) if (!httpGetReady(con->http)) break; if (status != HTTP_STATUS_OK && status != HTTP_STATUS_CONTINUE) { if (httpError(con->http) && httpError(con->http) != EPIPE) cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing for error %d (%s) while reading headers.", httpError(con->http), strerror(httpError(con->http))); else cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on EOF while reading headers."); cupsdSendError(con, HTTP_STATUS_BAD_REQUEST, CUPSD_AUTH_NONE); cupsdCloseClient(con); return; } break; default : if (!httpGetReady(con->http) && recv(httpGetFd(con->http), buf, 1, MSG_PEEK) < 1) { /* * Connection closed... */ cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on EOF."); cupsdCloseClient(con); return; } break; /* Anti-compiler-warning-code */ } /* * Handle new transfers... */ cupsdLogClient(con, CUPSD_LOG_DEBUG, "Read: status=%d, state=%d", status, httpGetState(con->http)); if (status == HTTP_STATUS_OK) { if (httpGetField(con->http, HTTP_FIELD_ACCEPT_LANGUAGE)[0]) { /* * Figure out the locale from the Accept-Language and Content-Type * fields... */ if ((ptr = strchr(httpGetField(con->http, HTTP_FIELD_ACCEPT_LANGUAGE), ',')) != NULL) *ptr = '\0'; if ((ptr = strchr(httpGetField(con->http, HTTP_FIELD_ACCEPT_LANGUAGE), ';')) != NULL) *ptr = '\0'; if ((ptr = strstr(httpGetField(con->http, HTTP_FIELD_CONTENT_TYPE), "charset=")) != NULL) { /* * Combine language and charset, and trim any extra params in the * content-type. */ snprintf(locale, sizeof(locale), "%s.%s", httpGetField(con->http, HTTP_FIELD_ACCEPT_LANGUAGE), ptr + 8); if ((ptr = strchr(locale, ',')) != NULL) *ptr = '\0'; } else snprintf(locale, sizeof(locale), "%s.UTF-8", httpGetField(con->http, HTTP_FIELD_ACCEPT_LANGUAGE)); con->language = cupsLangGet(locale); } else con->language = cupsLangGet(DefaultLocale); cupsdAuthorize(con); if (!_cups_strncasecmp(httpGetField(con->http, HTTP_FIELD_CONNECTION), "Keep-Alive", 10) && KeepAlive) httpSetKeepAlive(con->http, HTTP_KEEPALIVE_ON); else if (!_cups_strncasecmp(httpGetField(con->http, HTTP_FIELD_CONNECTION), "close", 5)) httpSetKeepAlive(con->http, HTTP_KEEPALIVE_OFF); if (!httpGetField(con->http, HTTP_FIELD_HOST)[0] && httpGetVersion(con->http) >= HTTP_VERSION_1_1) { /* * HTTP/1.1 and higher require the "Host:" field... */ if (!cupsdSendError(con, HTTP_STATUS_BAD_REQUEST, CUPSD_AUTH_NONE)) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Missing Host: field in request."); cupsdCloseClient(con); return; } } else if (!valid_host(con)) { /* * Access to localhost must use "localhost" or the corresponding IPv4 * or IPv6 values in the Host: field. */ cupsdLogClient(con, CUPSD_LOG_ERROR, "Request from \"%s\" using invalid Host: field \"%s\".", httpGetHostname(con->http, NULL, 0), httpGetField(con->http, HTTP_FIELD_HOST)); if (!cupsdSendError(con, HTTP_STATUS_BAD_REQUEST, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } else if (con->operation == HTTP_STATE_OPTIONS) { /* * Do OPTIONS command... */ if (con->best && con->best->type != CUPSD_AUTH_NONE) { httpClearFields(con->http); if (!cupsdSendHeader(con, HTTP_STATUS_UNAUTHORIZED, NULL, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } if (!_cups_strcasecmp(httpGetField(con->http, HTTP_FIELD_CONNECTION), "Upgrade") && strstr(httpGetField(con->http, HTTP_FIELD_UPGRADE), "TLS/") != NULL && !httpIsEncrypted(con->http)) { #ifdef HAVE_SSL /* * Do encryption stuff... */ httpClearFields(con->http); if (!cupsdSendHeader(con, HTTP_STATUS_SWITCHING_PROTOCOLS, NULL, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } if (cupsd_start_tls(con, HTTP_ENCRYPTION_REQUIRED)) { cupsdCloseClient(con); return; } #else if (!cupsdSendError(con, HTTP_STATUS_NOT_IMPLEMENTED, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } #endif /* HAVE_SSL */ } httpClearFields(con->http); httpSetField(con->http, HTTP_FIELD_ALLOW, "GET, HEAD, OPTIONS, POST, PUT"); httpSetField(con->http, HTTP_FIELD_CONTENT_LENGTH, "0"); if (!cupsdSendHeader(con, HTTP_STATUS_OK, NULL, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } else if (!is_path_absolute(con->uri)) { /* * Protect against malicious users! */ cupsdLogClient(con, CUPSD_LOG_ERROR, "Request for non-absolute resource \"%s\".", con->uri); if (!cupsdSendError(con, HTTP_STATUS_FORBIDDEN, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } else { if (!_cups_strcasecmp(httpGetField(con->http, HTTP_FIELD_CONNECTION), "Upgrade") && !httpIsEncrypted(con->http)) { #ifdef HAVE_SSL /* * Do encryption stuff... */ httpClearFields(con->http); if (!cupsdSendHeader(con, HTTP_STATUS_SWITCHING_PROTOCOLS, NULL, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } if (cupsd_start_tls(con, HTTP_ENCRYPTION_REQUIRED)) { cupsdCloseClient(con); return; } #else if (!cupsdSendError(con, HTTP_STATUS_NOT_IMPLEMENTED, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } #endif /* HAVE_SSL */ } if ((status = cupsdIsAuthorized(con, NULL)) != HTTP_STATUS_OK) { cupsdSendError(con, status, CUPSD_AUTH_NONE); cupsdCloseClient(con); return; } if (httpGetExpect(con->http) && (con->operation == HTTP_STATE_POST || con->operation == HTTP_STATE_PUT)) { if (httpGetExpect(con->http) == HTTP_STATUS_CONTINUE) { /* * Send 100-continue header... */ if (httpWriteResponse(con->http, HTTP_STATUS_CONTINUE)) { cupsdCloseClient(con); return; } } else { /* * Send 417-expectation-failed header... */ httpClearFields(con->http); httpSetField(con->http, HTTP_FIELD_CONTENT_LENGTH, "0"); cupsdSendError(con, HTTP_STATUS_EXPECTATION_FAILED, CUPSD_AUTH_NONE); cupsdCloseClient(con); return; } } switch (httpGetState(con->http)) { case HTTP_STATE_GET_SEND : cupsdLogClient(con, CUPSD_LOG_DEBUG, "Processing GET %s", con->uri); if ((!strncmp(con->uri, "/ppd/", 5) || !strncmp(con->uri, "/printers/", 10) || !strncmp(con->uri, "/classes/", 9)) && !strcmp(con->uri + strlen(con->uri) - 4, ".ppd")) { /* * Send PPD file - get the real printer name since printer * names are not case sensitive but filenames can be... */ con->uri[strlen(con->uri) - 4] = '\0'; /* Drop ".ppd" */ if (!strncmp(con->uri, "/ppd/", 5)) p = cupsdFindPrinter(con->uri + 5); else if (!strncmp(con->uri, "/printers/", 10)) p = cupsdFindPrinter(con->uri + 10); else { p = cupsdFindClass(con->uri + 9); if (p) { int i; /* Looping var */ for (i = 0; i < p->num_printers; i ++) { if (!(p->printers[i]->type & CUPS_PRINTER_CLASS)) { char ppdname[1024];/* PPD filename */ snprintf(ppdname, sizeof(ppdname), "%s/ppd/%s.ppd", ServerRoot, p->printers[i]->name); if (!access(ppdname, 0)) { p = p->printers[i]; break; } } } if (i >= p->num_printers) p = NULL; } } if (p) { snprintf(con->uri, sizeof(con->uri), "/ppd/%s.ppd", p->name); } else { if (!cupsdSendError(con, HTTP_STATUS_NOT_FOUND, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } break; } } else if ((!strncmp(con->uri, "/icons/", 7) || !strncmp(con->uri, "/printers/", 10) || !strncmp(con->uri, "/classes/", 9)) && !strcmp(con->uri + strlen(con->uri) - 4, ".png")) { /* * Send icon file - get the real queue name since queue names are * not case sensitive but filenames can be... */ con->uri[strlen(con->uri) - 4] = '\0'; /* Drop ".png" */ if (!strncmp(con->uri, "/icons/", 7)) p = cupsdFindPrinter(con->uri + 7); else if (!strncmp(con->uri, "/printers/", 10)) p = cupsdFindPrinter(con->uri + 10); else { p = cupsdFindClass(con->uri + 9); if (p) { int i; /* Looping var */ for (i = 0; i < p->num_printers; i ++) { if (!(p->printers[i]->type & CUPS_PRINTER_CLASS)) { char ppdname[1024];/* PPD filename */ snprintf(ppdname, sizeof(ppdname), "%s/ppd/%s.ppd", ServerRoot, p->printers[i]->name); if (!access(ppdname, 0)) { p = p->printers[i]; break; } } } if (i >= p->num_printers) p = NULL; } } if (p) snprintf(con->uri, sizeof(con->uri), "/icons/%s.png", p->name); else { if (!cupsdSendError(con, HTTP_STATUS_NOT_FOUND, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } break; } } if ((!strncmp(con->uri, "/admin", 6) && strcmp(con->uri, "/admin/conf/cupsd.conf") && strncmp(con->uri, "/admin/log/", 11)) || !strncmp(con->uri, "/printers", 9) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/help", 5) || !strncmp(con->uri, "/jobs", 5)) { if (!WebInterface) { /* * Web interface is disabled. Show an appropriate message... */ if (!cupsdSendError(con, HTTP_STATUS_CUPS_WEBIF_DISABLED, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } break; } /* * Send CGI output... */ if (!strncmp(con->uri, "/admin", 6)) { cupsdSetStringf(&con->command, "%s/cgi-bin/admin.cgi", ServerBin); cupsdSetString(&con->options, strchr(con->uri + 6, '?')); } else if (!strncmp(con->uri, "/printers", 9)) { cupsdSetStringf(&con->command, "%s/cgi-bin/printers.cgi", ServerBin); if (con->uri[9] && con->uri[10]) cupsdSetString(&con->options, con->uri + 9); else cupsdSetString(&con->options, NULL); } else if (!strncmp(con->uri, "/classes", 8)) { cupsdSetStringf(&con->command, "%s/cgi-bin/classes.cgi", ServerBin); if (con->uri[8] && con->uri[9]) cupsdSetString(&con->options, con->uri + 8); else cupsdSetString(&con->options, NULL); } else if (!strncmp(con->uri, "/jobs", 5)) { cupsdSetStringf(&con->command, "%s/cgi-bin/jobs.cgi", ServerBin); if (con->uri[5] && con->uri[6]) cupsdSetString(&con->options, con->uri + 5); else cupsdSetString(&con->options, NULL); } else { cupsdSetStringf(&con->command, "%s/cgi-bin/help.cgi", ServerBin); if (con->uri[5] && con->uri[6]) cupsdSetString(&con->options, con->uri + 5); else cupsdSetString(&con->options, NULL); } if (!cupsdSendCommand(con, con->command, con->options, 0)) { if (!cupsdSendError(con, HTTP_STATUS_NOT_FOUND, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } else cupsdLogRequest(con, HTTP_STATUS_OK); if (httpGetVersion(con->http) <= HTTP_VERSION_1_0) httpSetKeepAlive(con->http, HTTP_KEEPALIVE_OFF); } else if (!strncmp(con->uri, "/admin/log/", 11) && (strchr(con->uri + 11, '/') || strlen(con->uri) == 11)) { /* * GET can only be done to configuration files directly under * /admin/conf... */ cupsdLogClient(con, CUPSD_LOG_ERROR, "Request for subdirectory \"%s\".", con->uri); if (!cupsdSendError(con, HTTP_STATUS_FORBIDDEN, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } break; } else { /* * Serve a file... */ if ((filename = get_file(con, &filestats, buf, sizeof(buf))) == NULL) { if (!cupsdSendError(con, HTTP_STATUS_NOT_FOUND, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } break; } type = mimeFileType(MimeDatabase, filename, NULL, NULL); cupsdLogClient(con, CUPSD_LOG_DEBUG, "filename=\"%s\", type=%s/%s", filename, type ? type->super : "", type ? type->type : ""); if (is_cgi(con, filename, &filestats, type)) { /* * Note: con->command and con->options were set by * is_cgi()... */ if (!cupsdSendCommand(con, con->command, con->options, 0)) { if (!cupsdSendError(con, HTTP_STATUS_NOT_FOUND, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } else cupsdLogRequest(con, HTTP_STATUS_OK); if (httpGetVersion(con->http) <= HTTP_VERSION_1_0) httpSetKeepAlive(con->http, HTTP_KEEPALIVE_OFF); break; } if (!check_if_modified(con, &filestats)) { if (!cupsdSendError(con, HTTP_STATUS_NOT_MODIFIED, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } else { if (type == NULL) strlcpy(line, "text/plain", sizeof(line)); else snprintf(line, sizeof(line), "%s/%s", type->super, type->type); if (!write_file(con, HTTP_STATUS_OK, filename, line, &filestats)) { cupsdCloseClient(con); return; } } } break; case HTTP_STATE_POST_RECV : /* * See if the POST request includes a Content-Length field, and if * so check the length against any limits that are set... */ if (httpGetField(con->http, HTTP_FIELD_CONTENT_LENGTH)[0] && MaxRequestSize > 0 && httpGetLength2(con->http) > MaxRequestSize) { /* * Request too large... */ if (!cupsdSendError(con, HTTP_STATUS_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } break; } else if (httpGetLength2(con->http) < 0) { /* * Negative content lengths are invalid! */ if (!cupsdSendError(con, HTTP_STATUS_BAD_REQUEST, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } break; } /* * See what kind of POST request this is; for IPP requests the * content-type field will be "application/ipp"... */ if (!strcmp(httpGetField(con->http, HTTP_FIELD_CONTENT_TYPE), "application/ipp")) con->request = ippNew(); else if (!WebInterface) { /* * Web interface is disabled. Show an appropriate message... */ if (!cupsdSendError(con, HTTP_STATUS_CUPS_WEBIF_DISABLED, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } break; } else if ((!strncmp(con->uri, "/admin", 6) && strncmp(con->uri, "/admin/log/", 11)) || !strncmp(con->uri, "/printers", 9) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/help", 5) || !strncmp(con->uri, "/jobs", 5)) { /* * CGI request... */ if (!strncmp(con->uri, "/admin", 6)) { cupsdSetStringf(&con->command, "%s/cgi-bin/admin.cgi", ServerBin); cupsdSetString(&con->options, strchr(con->uri + 6, '?')); } else if (!strncmp(con->uri, "/printers", 9)) { cupsdSetStringf(&con->command, "%s/cgi-bin/printers.cgi", ServerBin); if (con->uri[9] && con->uri[10]) cupsdSetString(&con->options, con->uri + 9); else cupsdSetString(&con->options, NULL); } else if (!strncmp(con->uri, "/classes", 8)) { cupsdSetStringf(&con->command, "%s/cgi-bin/classes.cgi", ServerBin); if (con->uri[8] && con->uri[9]) cupsdSetString(&con->options, con->uri + 8); else cupsdSetString(&con->options, NULL); } else if (!strncmp(con->uri, "/jobs", 5)) { cupsdSetStringf(&con->command, "%s/cgi-bin/jobs.cgi", ServerBin); if (con->uri[5] && con->uri[6]) cupsdSetString(&con->options, con->uri + 5); else cupsdSetString(&con->options, NULL); } else { cupsdSetStringf(&con->command, "%s/cgi-bin/help.cgi", ServerBin); if (con->uri[5] && con->uri[6]) cupsdSetString(&con->options, con->uri + 5); else cupsdSetString(&con->options, NULL); } if (httpGetVersion(con->http) <= HTTP_VERSION_1_0) httpSetKeepAlive(con->http, HTTP_KEEPALIVE_OFF); } else { /* * POST to a file... */ if ((filename = get_file(con, &filestats, buf, sizeof(buf))) == NULL) { if (!cupsdSendError(con, HTTP_STATUS_NOT_FOUND, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } break; } type = mimeFileType(MimeDatabase, filename, NULL, NULL); if (!is_cgi(con, filename, &filestats, type)) { /* * Only POST to CGI's... */ if (!cupsdSendError(con, HTTP_STATUS_UNAUTHORIZED, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } } break; case HTTP_STATE_PUT_RECV : /* * Validate the resource name... */ if (strcmp(con->uri, "/admin/conf/cupsd.conf")) { /* * PUT can only be done to the cupsd.conf file... */ cupsdLogClient(con, CUPSD_LOG_ERROR, "Disallowed PUT request for \"%s\".", con->uri); if (!cupsdSendError(con, HTTP_STATUS_FORBIDDEN, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } break; } /* * See if the PUT request includes a Content-Length field, and if * so check the length against any limits that are set... */ if (httpGetField(con->http, HTTP_FIELD_CONTENT_LENGTH)[0] && MaxRequestSize > 0 && httpGetLength2(con->http) > MaxRequestSize) { /* * Request too large... */ if (!cupsdSendError(con, HTTP_STATUS_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } break; } else if (httpGetLength2(con->http) < 0) { /* * Negative content lengths are invalid! */ if (!cupsdSendError(con, HTTP_STATUS_BAD_REQUEST, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } break; } /* * Open a temporary file to hold the request... */ cupsdSetStringf(&con->filename, "%s/%08x", RequestRoot, request_id ++); con->file = open(con->filename, O_WRONLY | O_CREAT | O_TRUNC, 0640); if (con->file < 0) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to create request file \"%s\": %s", con->filename, strerror(errno)); if (!cupsdSendError(con, HTTP_STATUS_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } fchmod(con->file, 0640); fchown(con->file, RunUser, Group); fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC); break; case HTTP_STATE_DELETE : case HTTP_STATE_TRACE : cupsdSendError(con, HTTP_STATUS_NOT_IMPLEMENTED, CUPSD_AUTH_NONE); cupsdCloseClient(con); return; case HTTP_STATE_HEAD : if (!strncmp(con->uri, "/printers/", 10) && !strcmp(con->uri + strlen(con->uri) - 4, ".ppd")) { /* * Send PPD file - get the real printer name since printer * names are not case sensitive but filenames can be... */ con->uri[strlen(con->uri) - 4] = '\0'; /* Drop ".ppd" */ if ((p = cupsdFindPrinter(con->uri + 10)) != NULL) snprintf(con->uri, sizeof(con->uri), "/ppd/%s.ppd", p->name); else { if (!cupsdSendError(con, HTTP_STATUS_NOT_FOUND, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } cupsdLogRequest(con, HTTP_STATUS_NOT_FOUND); break; } } else if (!strncmp(con->uri, "/printers/", 10) && !strcmp(con->uri + strlen(con->uri) - 4, ".png")) { /* * Send PNG file - get the real printer name since printer * names are not case sensitive but filenames can be... */ con->uri[strlen(con->uri) - 4] = '\0'; /* Drop ".ppd" */ if ((p = cupsdFindPrinter(con->uri + 10)) != NULL) snprintf(con->uri, sizeof(con->uri), "/icons/%s.png", p->name); else { if (!cupsdSendError(con, HTTP_STATUS_NOT_FOUND, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } cupsdLogRequest(con, HTTP_STATUS_NOT_FOUND); break; } } else if (!WebInterface) { httpClearFields(con->http); if (!cupsdSendHeader(con, HTTP_STATUS_OK, NULL, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } cupsdLogRequest(con, HTTP_STATUS_OK); break; } if ((!strncmp(con->uri, "/admin", 6) && strcmp(con->uri, "/admin/conf/cupsd.conf") && strncmp(con->uri, "/admin/log/", 11)) || !strncmp(con->uri, "/printers", 9) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/help", 5) || !strncmp(con->uri, "/jobs", 5)) { /* * CGI output... */ httpClearFields(con->http); if (!cupsdSendHeader(con, HTTP_STATUS_OK, "text/html", CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } cupsdLogRequest(con, HTTP_STATUS_OK); } else if (!strncmp(con->uri, "/admin/log/", 11) && (strchr(con->uri + 11, '/') || strlen(con->uri) == 11)) { /* * HEAD can only be done to configuration files under * /admin/conf... */ cupsdLogClient(con, CUPSD_LOG_ERROR, "Request for subdirectory \"%s\".", con->uri); if (!cupsdSendError(con, HTTP_STATUS_FORBIDDEN, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } cupsdLogRequest(con, HTTP_STATUS_FORBIDDEN); break; } else if ((filename = get_file(con, &filestats, buf, sizeof(buf))) == NULL) { httpClearFields(con->http); if (!cupsdSendHeader(con, HTTP_STATUS_NOT_FOUND, "text/html", CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } cupsdLogRequest(con, HTTP_STATUS_NOT_FOUND); } else if (!check_if_modified(con, &filestats)) { if (!cupsdSendError(con, HTTP_STATUS_NOT_MODIFIED, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } cupsdLogRequest(con, HTTP_STATUS_NOT_MODIFIED); } else { /* * Serve a file... */ type = mimeFileType(MimeDatabase, filename, NULL, NULL); if (type == NULL) strlcpy(line, "text/plain", sizeof(line)); else snprintf(line, sizeof(line), "%s/%s", type->super, type->type); httpClearFields(con->http); httpSetField(con->http, HTTP_FIELD_LAST_MODIFIED, httpGetDateString(filestats.st_mtime)); httpSetLength(con->http, (size_t)filestats.st_size); if (!cupsdSendHeader(con, HTTP_STATUS_OK, line, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } cupsdLogRequest(con, HTTP_STATUS_OK); } break; default : break; /* Anti-compiler-warning-code */ } } } /* * Handle any incoming data... */ switch (httpGetState(con->http)) { case HTTP_STATE_PUT_RECV : do { if ((bytes = httpRead2(con->http, line, sizeof(line))) < 0) { if (httpError(con->http) && httpError(con->http) != EPIPE) cupsdLogClient(con, CUPSD_LOG_DEBUG, "HTTP_STATE_PUT_RECV Closing for error %d (%s)", httpError(con->http), strerror(httpError(con->http))); else cupsdLogClient(con, CUPSD_LOG_DEBUG, "HTTP_STATE_PUT_RECV Closing on EOF."); cupsdCloseClient(con); return; } else if (bytes > 0) { con->bytes += bytes; if (MaxRequestSize > 0 && con->bytes > MaxRequestSize) { close(con->file); con->file = -1; unlink(con->filename); cupsdClearString(&con->filename); if (!cupsdSendError(con, HTTP_STATUS_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } if (write(con->file, line, (size_t)bytes) < bytes) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to write %d bytes to \"%s\": %s", bytes, con->filename, strerror(errno)); close(con->file); con->file = -1; unlink(con->filename); cupsdClearString(&con->filename); if (!cupsdSendError(con, HTTP_STATUS_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } } else if (httpGetState(con->http) == HTTP_STATE_PUT_RECV) { cupsdCloseClient(con); return; } } while (httpGetState(con->http) == HTTP_STATE_PUT_RECV && httpGetReady(con->http)); if (httpGetState(con->http) == HTTP_STATE_STATUS) { /* * End of file, see how big it is... */ fstat(con->file, &filestats); close(con->file); con->file = -1; if (filestats.st_size > MaxRequestSize && MaxRequestSize > 0) { /* * Request is too big; remove it and send an error... */ unlink(con->filename); cupsdClearString(&con->filename); if (!cupsdSendError(con, HTTP_STATUS_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } /* * Install the configuration file... */ status = install_cupsd_conf(con); /* * Return the status to the client... */ if (!cupsdSendError(con, status, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } break; case HTTP_STATE_POST_RECV : do { if (con->request && con->file < 0) { /* * Grab any request data from the connection... */ if (!httpWait(con->http, 0)) return; if ((ipp_state = ippRead(con->http, con->request)) == IPP_STATE_ERROR) { cupsdLogClient(con, CUPSD_LOG_ERROR, "IPP read error: %s", cupsLastErrorString()); cupsdSendError(con, HTTP_STATUS_BAD_REQUEST, CUPSD_AUTH_NONE); cupsdCloseClient(con); return; } else if (ipp_state != IPP_STATE_DATA) { if (httpGetState(con->http) == HTTP_STATE_POST_SEND) { cupsdSendError(con, HTTP_STATUS_BAD_REQUEST, CUPSD_AUTH_NONE); cupsdCloseClient(con); return; } if (httpGetReady(con->http)) continue; break; } else { cupsdLogClient(con, CUPSD_LOG_DEBUG, "%d.%d %s %d", con->request->request.op.version[0], con->request->request.op.version[1], ippOpString(con->request->request.op.operation_id), con->request->request.op.request_id); con->bytes += (off_t)ippLength(con->request); } } if (con->file < 0 && httpGetState(con->http) != HTTP_STATE_POST_SEND) { /* * Create a file as needed for the request data... */ cupsdSetStringf(&con->filename, "%s/%08x", RequestRoot, request_id ++); con->file = open(con->filename, O_WRONLY | O_CREAT | O_TRUNC, 0640); if (con->file < 0) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to create request file \"%s\": %s", con->filename, strerror(errno)); if (!cupsdSendError(con, HTTP_STATUS_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } fchmod(con->file, 0640); fchown(con->file, RunUser, Group); fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC); } if (httpGetState(con->http) != HTTP_STATE_POST_SEND) { if (!httpWait(con->http, 0)) return; else if ((bytes = httpRead2(con->http, line, sizeof(line))) < 0) { if (httpError(con->http) && httpError(con->http) != EPIPE) cupsdLogClient(con, CUPSD_LOG_DEBUG, "HTTP_STATE_POST_SEND Closing for error %d (%s)", httpError(con->http), strerror(httpError(con->http))); else cupsdLogClient(con, CUPSD_LOG_DEBUG, "HTTP_STATE_POST_SEND Closing on EOF."); cupsdCloseClient(con); return; } else if (bytes > 0) { con->bytes += bytes; if (MaxRequestSize > 0 && con->bytes > MaxRequestSize) { close(con->file); con->file = -1; unlink(con->filename); cupsdClearString(&con->filename); if (!cupsdSendError(con, HTTP_STATUS_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } if (write(con->file, line, (size_t)bytes) < bytes) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to write %d bytes to \"%s\": %s", bytes, con->filename, strerror(errno)); close(con->file); con->file = -1; unlink(con->filename); cupsdClearString(&con->filename); if (!cupsdSendError(con, HTTP_STATUS_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } } else if (httpGetState(con->http) == HTTP_STATE_POST_RECV) return; else if (httpGetState(con->http) != HTTP_STATE_POST_SEND) { cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on unexpected state %s.", httpStateString(httpGetState(con->http))); cupsdCloseClient(con); return; } } } while (httpGetState(con->http) == HTTP_STATE_POST_RECV && httpGetReady(con->http)); if (httpGetState(con->http) == HTTP_STATE_POST_SEND) { if (con->file >= 0) { fstat(con->file, &filestats); close(con->file); con->file = -1; if (filestats.st_size > MaxRequestSize && MaxRequestSize > 0) { /* * Request is too big; remove it and send an error... */ unlink(con->filename); cupsdClearString(&con->filename); if (con->request) { /* * Delete any IPP request data... */ ippDelete(con->request); con->request = NULL; } if (!cupsdSendError(con, HTTP_STATUS_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } else if (filestats.st_size == 0) { /* * Don't allow empty file... */ unlink(con->filename); cupsdClearString(&con->filename); } if (con->command) { if (!cupsdSendCommand(con, con->command, con->options, 0)) { if (!cupsdSendError(con, HTTP_STATUS_NOT_FOUND, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } else cupsdLogRequest(con, HTTP_STATUS_OK); } } if (con->request) { cupsdProcessIPPRequest(con); if (con->filename) { unlink(con->filename); cupsdClearString(&con->filename); } return; } } break; default : break; /* Anti-compiler-warning-code */ } if (httpGetState(con->http) == HTTP_STATE_WAITING) { if (!httpGetKeepAlive(con->http)) { cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing because Keep-Alive is disabled."); cupsdCloseClient(con); } else { cupsArrayRemove(ActiveClients, con); cupsdSetBusyState(0); } } } /* * 'cupsdSendCommand()' - Send output from a command via HTTP. */ int /* O - 1 on success, 0 on failure */ cupsdSendCommand( cupsd_client_t *con, /* I - Client connection */ char *command, /* I - Command to run */ char *options, /* I - Command-line options */ int root) /* I - Run as root? */ { int fd; /* Standard input file descriptor */ if (con->filename) { fd = open(con->filename, O_RDONLY); if (fd < 0) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to open \"%s\" for reading: %s", con->filename ? con->filename : "/dev/null", strerror(errno)); return (0); } fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); } else fd = -1; con->pipe_pid = pipe_command(con, fd, &(con->file), command, options, root); con->pipe_status = HTTP_STATUS_OK; httpClearFields(con->http); if (fd >= 0) close(fd); cupsdLogClient(con, CUPSD_LOG_INFO, "Started \"%s\" (pid=%d, file=%d)", command, con->pipe_pid, con->file); if (con->pipe_pid == 0) return (0); fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC); cupsdAddSelect(con->file, (cupsd_selfunc_t)write_pipe, NULL, con); cupsdLogClient(con, CUPSD_LOG_DEBUG, "Waiting for CGI data."); con->sent_header = 0; con->file_ready = 0; con->got_fields = 0; con->header_used = 0; return (1); } /* * 'cupsdSendError()' - Send an error message via HTTP. */ int /* O - 1 if successful, 0 otherwise */ cupsdSendError(cupsd_client_t *con, /* I - Connection */ http_status_t code, /* I - Error code */ int auth_type)/* I - Authentication type */ { char location[HTTP_MAX_VALUE]; /* Location field */ cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cupsdSendError code=%d, auth_type=%d", code, auth_type); #ifdef HAVE_SSL /* * Force client to upgrade for authentication if that is how the * server is configured... */ if (code == HTTP_STATUS_UNAUTHORIZED && DefaultEncryption == HTTP_ENCRYPTION_REQUIRED && _cups_strcasecmp(httpGetHostname(con->http, NULL, 0), "localhost") && !httpIsEncrypted(con->http)) { code = HTTP_STATUS_UPGRADE_REQUIRED; } #endif /* HAVE_SSL */ /* * Put the request in the access_log file... */ cupsdLogRequest(con, code); /* * To work around bugs in some proxies, don't use Keep-Alive for some * error messages... * * Kerberos authentication doesn't work without Keep-Alive, so * never disable it in that case. */ strlcpy(location, httpGetField(con->http, HTTP_FIELD_LOCATION), sizeof(location)); httpClearFields(con->http); httpSetField(con->http, HTTP_FIELD_LOCATION, location); if (code >= HTTP_STATUS_BAD_REQUEST && con->type != CUPSD_AUTH_NEGOTIATE) httpSetKeepAlive(con->http, HTTP_KEEPALIVE_OFF); if (httpGetVersion(con->http) >= HTTP_VERSION_1_1 && httpGetKeepAlive(con->http) == HTTP_KEEPALIVE_OFF) httpSetField(con->http, HTTP_FIELD_CONNECTION, "close"); if (code >= HTTP_STATUS_BAD_REQUEST) { /* * Send a human-readable error message. */ char message[4096], /* Message for user */ urltext[1024], /* URL redirection text */ redirect[1024]; /* Redirection link */ const char *text; /* Status-specific text */ redirect[0] = '\0'; if (code == HTTP_STATUS_UNAUTHORIZED) text = _cupsLangString(con->language, _("Enter your username and password or the " "root username and password to access this " "page. If you are using Kerberos authentication, " "make sure you have a valid Kerberos ticket.")); else if (code == HTTP_STATUS_UPGRADE_REQUIRED) { text = urltext; snprintf(urltext, sizeof(urltext), _cupsLangString(con->language, _("You must access this page using the URL " "" "https://%s:%d%s.")), con->servername, con->serverport, con->uri, con->servername, con->serverport, con->uri); snprintf(redirect, sizeof(redirect), "\n", con->servername, con->serverport, con->uri); } else if (code == HTTP_STATUS_CUPS_WEBIF_DISABLED) text = _cupsLangString(con->language, _("The web interface is currently disabled. Run " "\"cupsctl WebInterface=yes\" to enable it.")); else text = ""; snprintf(message, sizeof(message), "\n" "\n" "\n" "\t\n" "\t%s - " CUPS_SVERSION "\n" "\t\n" "%s" "\n" "\n" "

%s

\n" "

%s

\n" "\n" "\n", _httpStatus(con->language, code), redirect, _httpStatus(con->language, code), text); /* * Send an error message back to the client. If the error code is a * 400 or 500 series, make sure the message contains some text, too! */ size_t length = strlen(message); /* Length of message */ httpSetLength(con->http, length); if (!cupsdSendHeader(con, code, "text/html", auth_type)) return (0); if (httpWrite2(con->http, message, length) < 0) return (0); if (httpFlushWrite(con->http) < 0) return (0); } else { httpSetField(con->http, HTTP_FIELD_CONTENT_LENGTH, "0"); if (!cupsdSendHeader(con, code, NULL, auth_type)) return (0); } return (1); } /* * 'cupsdSendHeader()' - Send an HTTP request. */ int /* O - 1 on success, 0 on failure */ cupsdSendHeader( cupsd_client_t *con, /* I - Client to send to */ http_status_t code, /* I - HTTP status code */ char *type, /* I - MIME type of document */ int auth_type) /* I - Type of authentication */ { char auth_str[1024]; /* Authorization string */ cupsdLogClient(con, CUPSD_LOG_DEBUG, "cupsdSendHeader: code=%d, type=\"%s\", auth_type=%d", code, type, auth_type); /* * Send the HTTP status header... */ if (code == HTTP_STATUS_CUPS_WEBIF_DISABLED) { /* * Treat our special "web interface is disabled" status as "200 OK" for web * browsers. */ code = HTTP_STATUS_OK; } if (ServerHeader) httpSetField(con->http, HTTP_FIELD_SERVER, ServerHeader); if (code == HTTP_STATUS_METHOD_NOT_ALLOWED) httpSetField(con->http, HTTP_FIELD_ALLOW, "GET, HEAD, OPTIONS, POST, PUT"); if (code == HTTP_STATUS_UNAUTHORIZED) { if (auth_type == CUPSD_AUTH_NONE) { if (!con->best || con->best->type <= CUPSD_AUTH_NONE) auth_type = cupsdDefaultAuthType(); else auth_type = con->best->type; } auth_str[0] = '\0'; if (auth_type == CUPSD_AUTH_BASIC) strlcpy(auth_str, "Basic realm=\"CUPS\"", sizeof(auth_str)); else if (auth_type == CUPSD_AUTH_NEGOTIATE) { #ifdef AF_LOCAL if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL) strlcpy(auth_str, "Basic realm=\"CUPS\"", sizeof(auth_str)); else #endif /* AF_LOCAL */ strlcpy(auth_str, "Negotiate", sizeof(auth_str)); } if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE && !_cups_strcasecmp(httpGetHostname(con->http, NULL, 0), "localhost")) { /* * Add a "trc" (try root certification) parameter for local non-Kerberos * requests when the request requires system group membership - then the * client knows the root certificate can/should be used. * * Also, for macOS we also look for @AUTHKEY and add an "AuthRef key=foo" * method as needed... */ char *name, /* Current user name */ *auth_key; /* Auth key buffer */ size_t auth_size; /* Size of remaining buffer */ int need_local = 1; /* Do we need to list "Local" method? */ auth_key = auth_str + strlen(auth_str); auth_size = sizeof(auth_str) - (size_t)(auth_key - auth_str); #if defined(SO_PEERCRED) && defined(AF_LOCAL) if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL) { strlcpy(auth_key, ", PeerCred", auth_size); auth_key += 10; auth_size -= 10; } #endif /* SO_PEERCRED && AF_LOCAL */ for (name = (char *)cupsArrayFirst(con->best->names); name; name = (char *)cupsArrayNext(con->best->names)) { cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cupsdSendHeader: require \"%s\"", name); #ifdef HAVE_AUTHORIZATION_H if (!_cups_strncasecmp(name, "@AUTHKEY(", 9)) { snprintf(auth_key, auth_size, ", AuthRef key=\"%s\"", name + 9); need_local = 0; /* end parenthesis is stripped in conf.c */ break; } else #endif /* HAVE_AUTHORIZATION_H */ if (!_cups_strcasecmp(name, "@SYSTEM")) { #ifdef HAVE_AUTHORIZATION_H if (SystemGroupAuthKey) snprintf(auth_key, auth_size, ", AuthRef key=\"%s\"", SystemGroupAuthKey); else #else strlcpy(auth_key, ", Local trc=\"y\"", auth_size); #endif /* HAVE_AUTHORIZATION_H */ need_local = 0; break; } } if (need_local) strlcat(auth_key, ", Local", auth_size); } if (auth_str[0]) { cupsdLogClient(con, CUPSD_LOG_DEBUG, "WWW-Authenticate: %s", auth_str); httpSetField(con->http, HTTP_FIELD_WWW_AUTHENTICATE, auth_str); } } if (con->language && strcmp(con->language->language, "C")) httpSetField(con->http, HTTP_FIELD_CONTENT_LANGUAGE, con->language->language); if (type) { if (!strcmp(type, "text/html")) httpSetField(con->http, HTTP_FIELD_CONTENT_TYPE, "text/html; charset=utf-8"); else httpSetField(con->http, HTTP_FIELD_CONTENT_TYPE, type); } return (!httpWriteResponse(con->http, code)); } /* * 'cupsdUpdateCGI()' - Read status messages from CGI scripts and programs. */ void cupsdUpdateCGI(void) { char *ptr, /* Pointer to end of line in buffer */ message[1024]; /* Pointer to message text */ int loglevel; /* Log level for message */ while ((ptr = cupsdStatBufUpdate(CGIStatusBuffer, &loglevel, message, sizeof(message))) != NULL) { if (loglevel == CUPSD_LOG_INFO) cupsdLogMessage(CUPSD_LOG_INFO, "%s", message); if (!strchr(CGIStatusBuffer->buffer, '\n')) break; } if (ptr == NULL && !CGIStatusBuffer->bufused) { /* * Fatal error on pipe - should never happen! */ cupsdLogMessage(CUPSD_LOG_CRIT, "cupsdUpdateCGI: error reading from CGI error pipe - %s", strerror(errno)); } } /* * 'cupsdWriteClient()' - Write data to a client as needed. */ void cupsdWriteClient(cupsd_client_t *con) /* I - Client connection */ { int bytes, /* Number of bytes written */ field_col; /* Current column */ char *bufptr, /* Pointer into buffer */ *bufend; /* Pointer to end of buffer */ ipp_state_t ipp_state; /* IPP state value */ cupsdLogClient(con, CUPSD_LOG_DEBUG, "con->http=%p", con->http); cupsdLogClient(con, CUPSD_LOG_DEBUG, "cupsdWriteClient " "error=%d, " "used=%d, " "state=%s, " "data_encoding=HTTP_ENCODING_%s, " "data_remaining=" CUPS_LLFMT ", " "response=%p(%s), " "pipe_pid=%d, " "file=%d", httpError(con->http), (int)httpGetReady(con->http), httpStateString(httpGetState(con->http)), httpIsChunked(con->http) ? "CHUNKED" : "LENGTH", CUPS_LLCAST httpGetLength2(con->http), con->response, con->response ? ippStateString(ippGetState(con->request)) : "", con->pipe_pid, con->file); if (httpGetState(con->http) != HTTP_STATE_GET_SEND && httpGetState(con->http) != HTTP_STATE_POST_SEND) { /* * If we get called in the wrong state, then something went wrong with the * connection and we need to shut it down... */ cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on unexpected HTTP write state %s.", httpStateString(httpGetState(con->http))); cupsdCloseClient(con); return; } if (con->pipe_pid) { /* * Make sure we select on the CGI output... */ cupsdAddSelect(con->file, (cupsd_selfunc_t)write_pipe, NULL, con); cupsdLogClient(con, CUPSD_LOG_DEBUG, "Waiting for CGI data."); if (!con->file_ready) { /* * Try again later when there is CGI output available... */ cupsdRemoveSelect(httpGetFd(con->http)); return; } con->file_ready = 0; } bytes = (ssize_t)(sizeof(con->header) - (size_t)con->header_used); if (!con->pipe_pid && bytes > (ssize_t)httpGetRemaining(con->http)) { /* * Limit GET bytes to original size of file (STR #3265)... */ bytes = (ssize_t)httpGetRemaining(con->http); } if (con->response && con->response->state != IPP_STATE_DATA) { size_t wused = httpGetPending(con->http); /* Previous write buffer use */ do { /* * Write a single attribute or the IPP message header... */ ipp_state = ippWrite(con->http, con->response); /* * If the write buffer has been flushed, stop buffering up attributes... */ if (httpGetPending(con->http) <= wused) break; } while (ipp_state != IPP_STATE_DATA && ipp_state != IPP_STATE_ERROR); cupsdLogClient(con, CUPSD_LOG_DEBUG, "Writing IPP response, ipp_state=%s, old " "wused=" CUPS_LLFMT ", new wused=" CUPS_LLFMT, ippStateString(ipp_state), CUPS_LLCAST wused, CUPS_LLCAST httpGetPending(con->http)); if (httpGetPending(con->http) > 0) httpFlushWrite(con->http); bytes = ipp_state != IPP_STATE_ERROR && (con->file >= 0 || ipp_state != IPP_STATE_DATA); cupsdLogClient(con, CUPSD_LOG_DEBUG, "bytes=%d, http_state=%d, data_remaining=" CUPS_LLFMT, (int)bytes, httpGetState(con->http), CUPS_LLCAST httpGetLength2(con->http)); } else if ((bytes = read(con->file, con->header + con->header_used, (size_t)bytes)) > 0) { con->header_used += bytes; if (con->pipe_pid && !con->got_fields) { /* * Inspect the data for Content-Type and other fields. */ for (bufptr = con->header, bufend = con->header + con->header_used, field_col = 0; !con->got_fields && bufptr < bufend; bufptr ++) { if (*bufptr == '\n') { /* * Send line to client... */ if (bufptr > con->header && bufptr[-1] == '\r') bufptr[-1] = '\0'; *bufptr++ = '\0'; cupsdLogClient(con, CUPSD_LOG_DEBUG, "Script header: %s", con->header); if (!con->sent_header) { /* * Handle redirection and CGI status codes... */ http_field_t field; /* HTTP field */ char *value = strchr(con->header, ':'); /* Value of field */ if (value) { *value++ = '\0'; while (isspace(*value & 255)) value ++; } field = httpFieldValue(con->header); if (field != HTTP_FIELD_UNKNOWN && value) { httpSetField(con->http, field, value); if (field == HTTP_FIELD_LOCATION) { con->pipe_status = HTTP_STATUS_SEE_OTHER; con->sent_header = 2; } else con->sent_header = 1; } else if (!_cups_strcasecmp(con->header, "Status") && value) { con->pipe_status = (http_status_t)atoi(value); con->sent_header = 2; } else if (!_cups_strcasecmp(con->header, "Set-Cookie") && value) { httpSetCookie(con->http, value); con->sent_header = 1; } } /* * Update buffer... */ con->header_used -= bufptr - con->header; if (con->header_used > 0) memmove(con->header, bufptr, (size_t)con->header_used); bufptr = con->header - 1; /* * See if the line was empty... */ if (field_col == 0) { con->got_fields = 1; if (httpGetVersion(con->http) == HTTP_VERSION_1_1 && !httpGetField(con->http, HTTP_FIELD_CONTENT_LENGTH)[0]) httpSetLength(con->http, 0); cupsdLogClient(con, CUPSD_LOG_DEBUG, "Sending status %d for CGI.", con->pipe_status); if (con->pipe_status == HTTP_STATUS_OK) { if (!cupsdSendHeader(con, con->pipe_status, NULL, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } else { if (!cupsdSendError(con, con->pipe_status, CUPSD_AUTH_NONE)) { cupsdCloseClient(con); return; } } } else field_col = 0; } else if (*bufptr != '\r') field_col ++; } if (!con->got_fields) return; } if (con->header_used > 0) { if (httpWrite2(con->http, con->header, (size_t)con->header_used) < 0) { cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing for error %d (%s)", httpError(con->http), strerror(httpError(con->http))); cupsdCloseClient(con); return; } if (httpIsChunked(con->http)) httpFlushWrite(con->http); con->bytes += con->header_used; if (httpGetState(con->http) == HTTP_STATE_WAITING) bytes = 0; else bytes = con->header_used; con->header_used = 0; } } if (bytes <= 0 || (httpGetState(con->http) != HTTP_STATE_GET_SEND && httpGetState(con->http) != HTTP_STATE_POST_SEND)) { if (!con->sent_header && con->pipe_pid) cupsdSendError(con, HTTP_STATUS_SERVER_ERROR, CUPSD_AUTH_NONE); else { cupsdLogRequest(con, HTTP_STATUS_OK); if (httpIsChunked(con->http) && (!con->pipe_pid || con->sent_header > 0)) { cupsdLogClient(con, CUPSD_LOG_DEBUG, "Sending 0-length chunk."); if (httpWrite2(con->http, "", 0) < 0) { cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing for error %d (%s)", httpError(con->http), strerror(httpError(con->http))); cupsdCloseClient(con); return; } } cupsdLogClient(con, CUPSD_LOG_DEBUG, "Flushing write buffer."); httpFlushWrite(con->http); cupsdLogClient(con, CUPSD_LOG_DEBUG, "New state is %s", httpStateString(httpGetState(con->http))); } cupsdAddSelect(httpGetFd(con->http), (cupsd_selfunc_t)cupsdReadClient, NULL, con); cupsdLogClient(con, CUPSD_LOG_DEBUG, "Waiting for request."); if (con->file >= 0) { cupsdRemoveSelect(con->file); if (con->pipe_pid) cupsdEndProcess(con->pipe_pid, 0); close(con->file); con->file = -1; con->pipe_pid = 0; } if (con->filename) { unlink(con->filename); cupsdClearString(&con->filename); } if (con->request) { ippDelete(con->request); con->request = NULL; } if (con->response) { ippDelete(con->response); con->response = NULL; } cupsdClearString(&con->command); cupsdClearString(&con->options); cupsdClearString(&con->query_string); if (!httpGetKeepAlive(con->http)) { cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing because Keep-Alive is disabled."); cupsdCloseClient(con); return; } else { cupsArrayRemove(ActiveClients, con); cupsdSetBusyState(0); } } } /* * 'check_if_modified()' - Decode an "If-Modified-Since" line. */ static int /* O - 1 if modified since */ check_if_modified( cupsd_client_t *con, /* I - Client connection */ struct stat *filestats) /* I - File information */ { const char *ptr; /* Pointer into field */ time_t date; /* Time/date value */ off_t size; /* Size/length value */ size = 0; date = 0; ptr = httpGetField(con->http, HTTP_FIELD_IF_MODIFIED_SINCE); if (*ptr == '\0') return (1); cupsdLogClient(con, CUPSD_LOG_DEBUG2, "check_if_modified: filestats=%p(" CUPS_LLFMT ", %d)) If-Modified-Since=\"%s\"", filestats, CUPS_LLCAST filestats->st_size, (int)filestats->st_mtime, ptr); while (*ptr != '\0') { while (isspace(*ptr) || *ptr == ';') ptr ++; if (_cups_strncasecmp(ptr, "length=", 7) == 0) { ptr += 7; size = strtoll(ptr, NULL, 10); while (isdigit(*ptr)) ptr ++; } else if (isalpha(*ptr)) { date = httpGetDateTime(ptr); while (*ptr != '\0' && *ptr != ';') ptr ++; } else ptr ++; } return ((size != filestats->st_size && size != 0) || (date < filestats->st_mtime && date != 0) || (size == 0 && date == 0)); } /* * 'compare_clients()' - Compare two client connections. */ static int /* O - Result of comparison */ compare_clients(cupsd_client_t *a, /* I - First client */ cupsd_client_t *b, /* I - Second client */ void *data) /* I - User data (not used) */ { (void)data; if (a == b) return (0); else if (a < b) return (-1); else return (1); } #ifdef HAVE_SSL /* * 'cupsd_start_tls()' - Start encryption on a connection. */ static int /* O - 0 on success, -1 on error */ cupsd_start_tls(cupsd_client_t *con, /* I - Client connection */ http_encryption_t e) /* I - Encryption mode */ { if (httpEncryption(con->http, e)) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to encrypt connection: %s", cupsLastErrorString()); return (-1); } cupsdLogClient(con, CUPSD_LOG_DEBUG, "Connection now encrypted."); return (0); } #endif /* HAVE_SSL */ /* * 'get_file()' - Get a filename and state info. */ static char * /* O - Real filename */ get_file(cupsd_client_t *con, /* I - Client connection */ struct stat *filestats, /* O - File information */ char *filename, /* IO - Filename buffer */ size_t len) /* I - Buffer length */ { int status; /* Status of filesystem calls */ char *ptr; /* Pointer info filename */ size_t plen; /* Remaining length after pointer */ char language[7], /* Language subdirectory, if any */ dest[1024]; /* Destination name */ int perm_check = 1; /* Do permissions check? */ /* * Figure out the real filename... */ language[0] = '\0'; if (!strncmp(con->uri, "/ppd/", 5) && !strchr(con->uri + 5, '/')) { strlcpy(dest, con->uri + 5, sizeof(dest)); ptr = dest + strlen(dest) - 4; if (ptr <= dest || strcmp(ptr, ".ppd")) { cupsdLogClient(con, CUPSD_LOG_INFO, "Disallowed path \"%s\".", con->uri); return (NULL); } *ptr = '\0'; if (!cupsdFindPrinter(dest)) { cupsdLogClient(con, CUPSD_LOG_INFO, "No printer \"%s\" found.", dest); return (NULL); } snprintf(filename, len, "%s%s", ServerRoot, con->uri); perm_check = 0; } else if (!strncmp(con->uri, "/icons/", 7) && !strchr(con->uri + 7, '/')) { strlcpy(dest, con->uri + 7, sizeof(dest)); ptr = dest + strlen(dest) - 4; if (ptr <= dest || strcmp(ptr, ".png")) { cupsdLogClient(con, CUPSD_LOG_INFO, "Disallowed path \"%s\".", con->uri); return (NULL); } *ptr = '\0'; if (!cupsdFindDest(dest)) { cupsdLogClient(con, CUPSD_LOG_INFO, "No printer \"%s\" found.", dest); return (NULL); } snprintf(filename, len, "%s/%s.png", CacheDir, dest); if (access(filename, F_OK) < 0) snprintf(filename, len, "%s/images/generic.png", DocumentRoot); perm_check = 0; } else if (!strncmp(con->uri, "/rss/", 5) && !strchr(con->uri + 5, '/')) snprintf(filename, len, "%s/rss/%s", CacheDir, con->uri + 5); else if (!strcmp(con->uri, "/admin/conf/cupsd.conf")) { strlcpy(filename, ConfigurationFile, len); perm_check = 0; } else if (!strncmp(con->uri, "/admin/log/", 11)) { if (!strncmp(con->uri + 11, "access_log", 10) && AccessLog[0] == '/') strlcpy(filename, AccessLog, len); else if (!strncmp(con->uri + 11, "error_log", 9) && ErrorLog[0] == '/') strlcpy(filename, ErrorLog, len); else if (!strncmp(con->uri + 11, "page_log", 8) && PageLog[0] == '/') strlcpy(filename, PageLog, len); else return (NULL); perm_check = 0; } else if (con->language) { snprintf(language, sizeof(language), "/%s", con->language->language); snprintf(filename, len, "%s%s%s", DocumentRoot, language, con->uri); } else snprintf(filename, len, "%s%s", DocumentRoot, con->uri); if ((ptr = strchr(filename, '?')) != NULL) *ptr = '\0'; /* * Grab the status for this language; if there isn't a language-specific file * then fallback to the default one... */ if ((status = lstat(filename, filestats)) != 0 && language[0] && strncmp(con->uri, "/icons/", 7) && strncmp(con->uri, "/ppd/", 5) && strncmp(con->uri, "/rss/", 5) && strncmp(con->uri, "/admin/conf/", 12) && strncmp(con->uri, "/admin/log/", 11)) { /* * Drop the country code... */ language[3] = '\0'; snprintf(filename, len, "%s%s%s", DocumentRoot, language, con->uri); if ((ptr = strchr(filename, '?')) != NULL) *ptr = '\0'; if ((status = lstat(filename, filestats)) != 0) { /* * Drop the language prefix and try the root directory... */ language[0] = '\0'; snprintf(filename, len, "%s%s", DocumentRoot, con->uri); if ((ptr = strchr(filename, '?')) != NULL) *ptr = '\0'; status = lstat(filename, filestats); } } /* * If we've found a symlink, 404 the sucker to avoid disclosing information. */ if (!status && S_ISLNK(filestats->st_mode)) { cupsdLogClient(con, CUPSD_LOG_INFO, "Symlinks such as \"%s\" are not allowed.", filename); return (NULL); } /* * Similarly, if the file/directory does not have world read permissions, do * not allow access... */ if (!status && perm_check && !(filestats->st_mode & S_IROTH)) { cupsdLogClient(con, CUPSD_LOG_INFO, "Files/directories such as \"%s\" must be world-readable.", filename); return (NULL); } /* * If we've found a directory, get the index.html file instead... */ if (!status && S_ISDIR(filestats->st_mode)) { /* * Make sure the URI ends with a slash... */ if (con->uri[strlen(con->uri) - 1] != '/') strlcat(con->uri, "/", sizeof(con->uri)); /* * Find the directory index file, trying every language... */ do { if (status && language[0]) { /* * Try a different language subset... */ if (language[3]) language[0] = '\0'; /* Strip country code */ else language[0] = '\0'; /* Strip language */ } /* * Look for the index file... */ snprintf(filename, len, "%s%s%s", DocumentRoot, language, con->uri); if ((ptr = strchr(filename, '?')) != NULL) *ptr = '\0'; ptr = filename + strlen(filename); plen = len - (size_t)(ptr - filename); strlcpy(ptr, "index.html", plen); status = lstat(filename, filestats); #ifdef HAVE_JAVA if (status) { strlcpy(ptr, "index.class", plen); status = lstat(filename, filestats); } #endif /* HAVE_JAVA */ #ifdef HAVE_PERL if (status) { strlcpy(ptr, "index.pl", plen); status = lstat(filename, filestats); } #endif /* HAVE_PERL */ #ifdef HAVE_PHP if (status) { strlcpy(ptr, "index.php", plen); status = lstat(filename, filestats); } #endif /* HAVE_PHP */ #ifdef HAVE_PYTHON if (status) { strlcpy(ptr, "index.pyc", plen); status = lstat(filename, filestats); } if (status) { strlcpy(ptr, "index.py", plen); status = lstat(filename, filestats); } #endif /* HAVE_PYTHON */ } while (status && language[0]); /* * If we've found a symlink, 404 the sucker to avoid disclosing information. */ if (!status && S_ISLNK(filestats->st_mode)) { cupsdLogClient(con, CUPSD_LOG_INFO, "Symlinks such as \"%s\" are not allowed.", filename); return (NULL); } /* * Similarly, if the file/directory does not have world read permissions, do * not allow access... */ if (!status && perm_check && !(filestats->st_mode & S_IROTH)) { cupsdLogClient(con, CUPSD_LOG_INFO, "Files/directories such as \"%s\" must be world-readable.", filename); return (NULL); } } cupsdLogClient(con, CUPSD_LOG_DEBUG2, "get_file: filestats=%p, filename=%p, len=" CUPS_LLFMT ", returning \"%s\".", filestats, filename, CUPS_LLCAST len, status ? "(null)" : filename); if (status) return (NULL); else return (filename); } /* * 'install_cupsd_conf()' - Install a configuration file. */ static http_status_t /* O - Status */ install_cupsd_conf(cupsd_client_t *con) /* I - Connection */ { char filename[1024]; /* Configuration filename */ cups_file_t *in, /* Input file */ *out; /* Output file */ char buffer[16384]; /* Copy buffer */ ssize_t bytes; /* Number of bytes */ /* * Open the request file... */ if ((in = cupsFileOpen(con->filename, "rb")) == NULL) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to open request file \"%s\": %s", con->filename, strerror(errno)); goto server_error; } /* * Open the new config file... */ if ((out = cupsdCreateConfFile(ConfigurationFile, ConfigFilePerm)) == NULL) { cupsFileClose(in); goto server_error; } cupsdLogClient(con, CUPSD_LOG_INFO, "Installing config file \"%s\"...", ConfigurationFile); /* * Copy from the request to the new config file... */ while ((bytes = cupsFileRead(in, buffer, sizeof(buffer))) > 0) if (cupsFileWrite(out, buffer, (size_t)bytes) < bytes) { cupsdLogClient(con, CUPSD_LOG_ERROR, "Unable to copy to config file \"%s\": %s", ConfigurationFile, strerror(errno)); cupsFileClose(in); cupsFileClose(out); snprintf(filename, sizeof(filename), "%s.N", ConfigurationFile); cupsdUnlinkOrRemoveFile(filename); goto server_error; } /* * Close the files... */ cupsFileClose(in); if (cupsdCloseCreatedConfFile(out, ConfigurationFile)) goto server_error; /* * Remove the request file... */ cupsdUnlinkOrRemoveFile(con->filename); cupsdClearString(&con->filename); /* * Set the NeedReload flag... */ NeedReload = RELOAD_CUPSD; ReloadTime = time(NULL); /* * Return that the file was created successfully... */ return (HTTP_STATUS_CREATED); /* * Common exit for errors... */ server_error: cupsdUnlinkOrRemoveFile(con->filename); cupsdClearString(&con->filename); return (HTTP_STATUS_SERVER_ERROR); } /* * 'is_cgi()' - Is the resource a CGI script/program? */ static int /* O - 1 = CGI, 0 = file */ is_cgi(cupsd_client_t *con, /* I - Client connection */ const char *filename, /* I - Real filename */ struct stat *filestats, /* I - File information */ mime_type_t *type) /* I - MIME type */ { const char *options; /* Options on URL */ /* * Get the options, if any... */ if ((options = strchr(con->uri, '?')) != NULL) { options ++; cupsdSetStringf(&(con->query_string), "QUERY_STRING=%s", options); } /* * Check for known types... */ if (!type || _cups_strcasecmp(type->super, "application")) { cupsdLogClient(con, CUPSD_LOG_DEBUG2, "is_cgi: filename=\"%s\", filestats=%p, type=%s/%s, returning 0.", filename, filestats, type ? type->super : "unknown", type ? type->type : "unknown"); return (0); } if (!_cups_strcasecmp(type->type, "x-httpd-cgi") && (filestats->st_mode & 0111)) { /* * "application/x-httpd-cgi" is a CGI script. */ cupsdSetString(&con->command, filename); if (options) cupsdSetStringf(&con->options, " %s", options); cupsdLogClient(con, CUPSD_LOG_DEBUG2, "is_cgi: filename=\"%s\", filestats=%p, type=%s/%s, returning 1.", filename, filestats, type->super, type->type); return (1); } #ifdef HAVE_JAVA else if (!_cups_strcasecmp(type->type, "x-httpd-java")) { /* * "application/x-httpd-java" is a Java servlet. */ cupsdSetString(&con->command, CUPS_JAVA); if (options) cupsdSetStringf(&con->options, " %s %s", filename, options); else cupsdSetStringf(&con->options, " %s", filename); cupsdLogClient(con, CUPSD_LOG_DEBUG2, "is_cgi: filename=\"%s\", filestats=%p, type=%s/%s, returning 1.", filename, filestats, type->super, type->type); return (1); } #endif /* HAVE_JAVA */ #ifdef HAVE_PERL else if (!_cups_strcasecmp(type->type, "x-httpd-perl")) { /* * "application/x-httpd-perl" is a Perl page. */ cupsdSetString(&con->command, CUPS_PERL); if (options) cupsdSetStringf(&con->options, " %s %s", filename, options); else cupsdSetStringf(&con->options, " %s", filename); cupsdLogClient(con, CUPSD_LOG_DEBUG2, "is_cgi: filename=\"%s\", filestats=%p, type=%s/%s, returning 1.", filename, filestats, type->super, type->type); return (1); } #endif /* HAVE_PERL */ #ifdef HAVE_PHP else if (!_cups_strcasecmp(type->type, "x-httpd-php")) { /* * "application/x-httpd-php" is a PHP page. */ cupsdSetString(&con->command, CUPS_PHP); if (options) cupsdSetStringf(&con->options, " %s %s", filename, options); else cupsdSetStringf(&con->options, " %s", filename); cupsdLogClient(con, CUPSD_LOG_DEBUG2, "is_cgi: filename=\"%s\", filestats=%p, type=%s/%s, returning 1.", filename, filestats, type->super, type->type); return (1); } #endif /* HAVE_PHP */ #ifdef HAVE_PYTHON else if (!_cups_strcasecmp(type->type, "x-httpd-python")) { /* * "application/x-httpd-python" is a Python page. */ cupsdSetString(&con->command, CUPS_PYTHON); if (options) cupsdSetStringf(&con->options, " %s %s", filename, options); else cupsdSetStringf(&con->options, " %s", filename); cupsdLogClient(con, CUPSD_LOG_DEBUG2, "is_cgi: filename=\"%s\", filestats=%p, type=%s/%s, returning 1.", filename, filestats, type->super, type->type); return (1); } #endif /* HAVE_PYTHON */ cupsdLogClient(con, CUPSD_LOG_DEBUG2, "is_cgi: filename=\"%s\", filestats=%p, type=%s/%s, returning 0.", filename, filestats, type->super, type->type); return (0); } /* * 'is_path_absolute()' - Is a path absolute and free of relative elements (i.e. ".."). */ static int /* O - 0 if relative, 1 if absolute */ is_path_absolute(const char *path) /* I - Input path */ { /* * Check for a leading slash... */ if (path[0] != '/') return (0); /* * Check for "<" or quotes in the path and reject since this is probably * someone trying to inject HTML... */ if (strchr(path, '<') != NULL || strchr(path, '\"') != NULL || strchr(path, '\'') != NULL) return (0); /* * Check for "/.." in the path... */ while ((path = strstr(path, "/..")) != NULL) { if (!path[3] || path[3] == '/') return (0); path ++; } /* * If we haven't found any relative paths, return 1 indicating an * absolute path... */ return (1); } /* * 'pipe_command()' - Pipe the output of a command to the remote client. */ static int /* O - Process ID */ pipe_command(cupsd_client_t *con, /* I - Client connection */ int infile, /* I - Standard input for command */ int *outfile, /* O - Standard output for command */ char *command, /* I - Command to run */ char *options, /* I - Options for command */ int root) /* I - Run as root? */ { int i; /* Looping var */ int pid; /* Process ID */ char *commptr, /* Command string pointer */ commch; /* Command string character */ char *uriptr; /* URI string pointer */ int fds[2]; /* Pipe FDs */ int argc; /* Number of arguments */ int envc; /* Number of environment variables */ char argbuf[10240], /* Argument buffer */ *argv[100], /* Argument strings */ *envp[MAX_ENV + 20]; /* Environment variables */ char auth_type[256], /* AUTH_TYPE environment variable */ content_length[1024], /* CONTENT_LENGTH environment variable */ content_type[1024], /* CONTENT_TYPE environment variable */ http_cookie[32768], /* HTTP_COOKIE environment variable */ http_referer[1024], /* HTTP_REFERER environment variable */ http_user_agent[1024], /* HTTP_USER_AGENT environment variable */ lang[1024], /* LANG environment variable */ path_info[1024], /* PATH_INFO environment variable */ remote_addr[1024], /* REMOTE_ADDR environment variable */ remote_host[1024], /* REMOTE_HOST environment variable */ remote_user[1024], /* REMOTE_USER environment variable */ script_filename[1024], /* SCRIPT_FILENAME environment variable */ script_name[1024], /* SCRIPT_NAME environment variable */ server_name[1024], /* SERVER_NAME environment variable */ server_port[1024]; /* SERVER_PORT environment variable */ ipp_attribute_t *attr; /* attributes-natural-language attribute */ /* * Parse a copy of the options string, which is of the form: * * argument+argument+argument * ?argument+argument+argument * param=value¶m=value * ?param=value¶m=value * /name?argument+argument+argument * /name?param=value¶m=value * * If the string contains an "=" character after the initial name, * then we treat it as a HTTP GET form request and make a copy of * the remaining string for the environment variable. * * The string is always parsed out as command-line arguments, to * be consistent with Apache... */ cupsdLogClient(con, CUPSD_LOG_DEBUG2, "pipe_command: infile=%d, outfile=%p, command=\"%s\", options=\"%s\", root=%d", infile, outfile, command, options ? options : "(null)", root); argv[0] = command; if (options) strlcpy(argbuf, options, sizeof(argbuf)); else argbuf[0] = '\0'; if (argbuf[0] == '/') { /* * Found some trailing path information, set PATH_INFO... */ if ((commptr = strchr(argbuf, '?')) == NULL) commptr = argbuf + strlen(argbuf); commch = *commptr; *commptr = '\0'; snprintf(path_info, sizeof(path_info), "PATH_INFO=%s", argbuf); *commptr = commch; } else { commptr = argbuf; path_info[0] = '\0'; if (*commptr == ' ') commptr ++; } if (*commptr == '?' && con->operation == HTTP_STATE_GET && !con->query_string) { commptr ++; cupsdSetStringf(&(con->query_string), "QUERY_STRING=%s", commptr); } argc = 1; if (*commptr) { argv[argc ++] = commptr; for (; *commptr && argc < 99; commptr ++) { /* * Break arguments whenever we see a + or space... */ if (*commptr == ' ' || *commptr == '+') { while (*commptr == ' ' || *commptr == '+') *commptr++ = '\0'; /* * If we don't have a blank string, save it as another argument... */ if (*commptr) { argv[argc] = commptr; argc ++; } else break; } else if (*commptr == '%' && isxdigit(commptr[1] & 255) && isxdigit(commptr[2] & 255)) { /* * Convert the %xx notation to the individual character. */ if (commptr[1] >= '0' && commptr[1] <= '9') *commptr = (char)((commptr[1] - '0') << 4); else *commptr = (char)((tolower(commptr[1]) - 'a' + 10) << 4); if (commptr[2] >= '0' && commptr[2] <= '9') *commptr |= commptr[2] - '0'; else *commptr |= tolower(commptr[2]) - 'a' + 10; _cups_strcpy(commptr + 1, commptr + 3); /* * Check for a %00 and break if that is the case... */ if (!*commptr) break; } } } argv[argc] = NULL; /* * Setup the environment variables as needed... */ if (con->username[0]) { snprintf(auth_type, sizeof(auth_type), "AUTH_TYPE=%s", httpGetField(con->http, HTTP_FIELD_AUTHORIZATION)); if ((uriptr = strchr(auth_type + 10, ' ')) != NULL) *uriptr = '\0'; } else auth_type[0] = '\0'; if (con->request && (attr = ippFindAttribute(con->request, "attributes-natural-language", IPP_TAG_LANGUAGE)) != NULL) { cups_lang_t *language = cupsLangGet(ippGetString(attr, 0, NULL)); snprintf(lang, sizeof(lang), "LANG=%s.UTF8", language->language); cupsLangFree(language); } else if (con->language) snprintf(lang, sizeof(lang), "LANG=%s.UTF8", con->language->language); else strlcpy(lang, "LANG=C", sizeof(lang)); strlcpy(remote_addr, "REMOTE_ADDR=", sizeof(remote_addr)); httpAddrString(httpGetAddress(con->http), remote_addr + 12, sizeof(remote_addr) - 12); snprintf(remote_host, sizeof(remote_host), "REMOTE_HOST=%s", httpGetHostname(con->http, NULL, 0)); snprintf(script_name, sizeof(script_name), "SCRIPT_NAME=%s", con->uri); if ((uriptr = strchr(script_name, '?')) != NULL) *uriptr = '\0'; snprintf(script_filename, sizeof(script_filename), "SCRIPT_FILENAME=%s%s", DocumentRoot, script_name + 12); snprintf(server_port, sizeof(server_port), "SERVER_PORT=%d", con->serverport); if (httpGetField(con->http, HTTP_FIELD_HOST)[0]) { char *nameptr; /* Pointer to ":port" */ snprintf(server_name, sizeof(server_name), "SERVER_NAME=%s", httpGetField(con->http, HTTP_FIELD_HOST)); if ((nameptr = strrchr(server_name, ':')) != NULL && !strchr(nameptr, ']')) *nameptr = '\0'; /* Strip trailing ":port" */ } else snprintf(server_name, sizeof(server_name), "SERVER_NAME=%s", con->servername); envc = cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0]))); if (auth_type[0]) envp[envc ++] = auth_type; envp[envc ++] = lang; envp[envc ++] = "REDIRECT_STATUS=1"; envp[envc ++] = "GATEWAY_INTERFACE=CGI/1.1"; envp[envc ++] = server_name; envp[envc ++] = server_port; envp[envc ++] = remote_addr; envp[envc ++] = remote_host; envp[envc ++] = script_name; envp[envc ++] = script_filename; if (path_info[0]) envp[envc ++] = path_info; if (con->username[0]) { snprintf(remote_user, sizeof(remote_user), "REMOTE_USER=%s", con->username); envp[envc ++] = remote_user; } if (httpGetVersion(con->http) == HTTP_VERSION_1_1) envp[envc ++] = "SERVER_PROTOCOL=HTTP/1.1"; else if (httpGetVersion(con->http) == HTTP_VERSION_1_0) envp[envc ++] = "SERVER_PROTOCOL=HTTP/1.0"; else envp[envc ++] = "SERVER_PROTOCOL=HTTP/0.9"; if (httpGetCookie(con->http)) { snprintf(http_cookie, sizeof(http_cookie), "HTTP_COOKIE=%s", httpGetCookie(con->http)); envp[envc ++] = http_cookie; } if (httpGetField(con->http, HTTP_FIELD_USER_AGENT)[0]) { snprintf(http_user_agent, sizeof(http_user_agent), "HTTP_USER_AGENT=%s", httpGetField(con->http, HTTP_FIELD_USER_AGENT)); envp[envc ++] = http_user_agent; } if (httpGetField(con->http, HTTP_FIELD_REFERER)[0]) { snprintf(http_referer, sizeof(http_referer), "HTTP_REFERER=%s", httpGetField(con->http, HTTP_FIELD_REFERER)); envp[envc ++] = http_referer; } if (con->operation == HTTP_STATE_GET) { envp[envc ++] = "REQUEST_METHOD=GET"; if (con->query_string) { /* * Add GET form variables after ?... */ envp[envc ++] = con->query_string; } else envp[envc ++] = "QUERY_STRING="; } else { sprintf(content_length, "CONTENT_LENGTH=" CUPS_LLFMT, CUPS_LLCAST con->bytes); snprintf(content_type, sizeof(content_type), "CONTENT_TYPE=%s", httpGetField(con->http, HTTP_FIELD_CONTENT_TYPE)); envp[envc ++] = "REQUEST_METHOD=POST"; envp[envc ++] = content_length; envp[envc ++] = content_type; } /* * Tell the CGI if we are using encryption... */ if (httpIsEncrypted(con->http)) envp[envc ++] = "HTTPS=ON"; /* * Terminate the environment array... */ envp[envc] = NULL; if (LogLevel >= CUPSD_LOG_DEBUG) { for (i = 0; i < argc; i ++) cupsdLogMessage(CUPSD_LOG_DEBUG, "[CGI] argv[%d] = \"%s\"", i, argv[i]); for (i = 0; i < envc; i ++) cupsdLogMessage(CUPSD_LOG_DEBUG, "[CGI] envp[%d] = \"%s\"", i, envp[i]); } /* * Create a pipe for the output... */ if (cupsdOpenPipe(fds)) { cupsdLogMessage(CUPSD_LOG_ERROR, "[CGI] Unable to create pipe for %s - %s", argv[0], strerror(errno)); return (0); } /* * Then execute the command... */ if (cupsdStartProcess(command, argv, envp, infile, fds[1], CGIPipes[1], -1, -1, root, DefaultProfile, NULL, &pid) < 0) { /* * Error - can't fork! */ cupsdLogMessage(CUPSD_LOG_ERROR, "[CGI] Unable to start %s - %s", argv[0], strerror(errno)); cupsdClosePipe(fds); pid = 0; } else { /* * Fork successful - return the PID... */ if (con->username[0]) cupsdAddCert(pid, con->username, con->type); cupsdLogMessage(CUPSD_LOG_DEBUG, "[CGI] Started %s (PID %d)", command, pid); *outfile = fds[0]; close(fds[1]); } return (pid); } /* * 'valid_host()' - Is the Host: field valid? */ static int /* O - 1 if valid, 0 if not */ valid_host(cupsd_client_t *con) /* I - Client connection */ { cupsd_alias_t *a; /* Current alias */ cupsd_netif_t *netif; /* Current network interface */ const char *end; /* End character */ char *ptr; /* Pointer into host value */ /* * Copy the Host: header for later use... */ strlcpy(con->clientname, httpGetField(con->http, HTTP_FIELD_HOST), sizeof(con->clientname)); if ((ptr = strrchr(con->clientname, ':')) != NULL && !strchr(ptr, ']')) { *ptr++ = '\0'; con->clientport = atoi(ptr); } else con->clientport = con->serverport; /* * Then validate... */ if (httpAddrLocalhost(httpGetAddress(con->http))) { /* * Only allow "localhost" or the equivalent IPv4 or IPv6 numerical * addresses when accessing CUPS via the loopback interface... */ return (!_cups_strcasecmp(con->clientname, "localhost") || !_cups_strcasecmp(con->clientname, "localhost.") || !strcmp(con->clientname, "127.0.0.1") || !strcmp(con->clientname, "[::1]")); } #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) /* * Check if the hostname is something.local (Bonjour); if so, allow it. */ if ((end = strrchr(con->clientname, '.')) != NULL && end > con->clientname && !end[1]) { /* * "." on end, work back to second-to-last "."... */ for (end --; end > con->clientname && *end != '.'; end --); } if (end && (!_cups_strcasecmp(end, ".local") || !_cups_strcasecmp(end, ".local."))) return (1); #endif /* HAVE_DNSSD || HAVE_AVAHI */ /* * Check if the hostname is an IP address... */ if (isdigit(con->clientname[0] & 255) || con->clientname[0] == '[') { /* * Possible IPv4/IPv6 address... */ http_addrlist_t *addrlist; /* List of addresses */ if ((addrlist = httpAddrGetList(con->clientname, AF_UNSPEC, NULL)) != NULL) { /* * Good IPv4/IPv6 address... */ httpAddrFreeList(addrlist); return (1); } } /* * Check for (alias) name matches... */ for (a = (cupsd_alias_t *)cupsArrayFirst(ServerAlias); a; a = (cupsd_alias_t *)cupsArrayNext(ServerAlias)) { /* * "ServerAlias *" allows all host values through... */ if (!strcmp(a->name, "*")) return (1); if (!_cups_strncasecmp(con->clientname, a->name, a->namelen)) { /* * Prefix matches; check the character at the end - it must be "." or nul. */ end = con->clientname + a->namelen; if (!*end || (*end == '.' && !end[1])) return (1); } } #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) for (a = (cupsd_alias_t *)cupsArrayFirst(DNSSDAlias); a; a = (cupsd_alias_t *)cupsArrayNext(DNSSDAlias)) { /* * "ServerAlias *" allows all host values through... */ if (!strcmp(a->name, "*")) return (1); if (!_cups_strncasecmp(con->clientname, a->name, a->namelen)) { /* * Prefix matches; check the character at the end - it must be "." or nul. */ end = con->clientname + a->namelen; if (!*end || (*end == '.' && !end[1])) return (1); } } #endif /* HAVE_DNSSD || HAVE_AVAHI */ /* * Check for interface hostname matches... */ for (netif = (cupsd_netif_t *)cupsArrayFirst(NetIFList); netif; netif = (cupsd_netif_t *)cupsArrayNext(NetIFList)) { if (!_cups_strncasecmp(con->clientname, netif->hostname, netif->hostlen)) { /* * Prefix matches; check the character at the end - it must be "." or nul. */ end = con->clientname + netif->hostlen; if (!*end || (*end == '.' && !end[1])) return (1); } } return (0); } /* * 'write_file()' - Send a file via HTTP. */ static int /* O - 0 on failure, 1 on success */ write_file(cupsd_client_t *con, /* I - Client connection */ http_status_t code, /* I - HTTP status */ char *filename, /* I - Filename */ char *type, /* I - File type */ struct stat *filestats) /* O - File information */ { con->file = open(filename, O_RDONLY); cupsdLogClient(con, CUPSD_LOG_DEBUG2, "write_file: code=%d, filename=\"%s\" (%d), type=\"%s\", filestats=%p.", code, filename, con->file, type ? type : "(null)", filestats); if (con->file < 0) return (0); fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC); con->pipe_pid = 0; con->sent_header = 1; httpClearFields(con->http); httpSetLength(con->http, (size_t)filestats->st_size); httpSetField(con->http, HTTP_FIELD_LAST_MODIFIED, httpGetDateString(filestats->st_mtime)); if (!cupsdSendHeader(con, code, type, CUPSD_AUTH_NONE)) return (0); cupsdAddSelect(httpGetFd(con->http), NULL, (cupsd_selfunc_t)cupsdWriteClient, con); cupsdLogClient(con, CUPSD_LOG_DEBUG, "Sending file."); return (1); } /* * 'write_pipe()' - Flag that data is available on the CGI pipe. */ static void write_pipe(cupsd_client_t *con) /* I - Client connection */ { cupsdLogClient(con, CUPSD_LOG_DEBUG2, "write_pipe: CGI output on fd %d.", con->file); con->file_ready = 1; cupsdRemoveSelect(con->file); cupsdAddSelect(httpGetFd(con->http), NULL, (cupsd_selfunc_t)cupsdWriteClient, con); cupsdLogClient(con, CUPSD_LOG_DEBUG, "CGI data ready to be sent."); } cups-2.2.7/scheduler/client.h000664 000765 000024 00000011626 13255074424 016566 0ustar00msweetstaff000000 000000 /* * Client definitions for the CUPS scheduler. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #ifdef HAVE_AUTHORIZATION_H # include #endif /* HAVE_AUTHORIZATION_H */ /* * HTTP client structure... */ struct cupsd_client_s { int number; /* Connection number */ http_t *http; /* HTTP client connection */ ipp_t *request, /* IPP request information */ *response; /* IPP response information */ cupsd_location_t *best; /* Best match for AAA */ struct timeval start; /* Request start time */ http_state_t operation; /* Request operation */ off_t bytes; /* Bytes transferred for this request */ int type; /* AuthType for username */ char username[HTTP_MAX_VALUE], /* Username from Authorization: line */ password[HTTP_MAX_VALUE], /* Password from Authorization: line */ uri[HTTP_MAX_URI], /* Localized URL/URI for GET/PUT */ *filename, /* Filename of output file */ *command, /* Command to run */ *options, /* Options for command */ *query_string; /* QUERY_STRING environment variable */ int file; /* Input/output file */ int file_ready; /* Input ready on file/pipe? */ int pipe_pid; /* Pipe process ID (or 0 if not a pipe) */ http_status_t pipe_status; /* HTTP status from pipe process */ int sent_header, /* Non-zero if sent HTTP header */ got_fields, /* Non-zero if all fields seen */ header_used; /* Number of header bytes used */ char header[2048]; /* Header from CGI program */ cups_lang_t *language; /* Language to use */ #ifdef HAVE_SSL int auto_ssl; /* Automatic test for SSL/TLS */ #endif /* HAVE_SSL */ http_addr_t clientaddr; /* Client's server address */ char clientname[256];/* Client's server name for connection */ int clientport; /* Client's server port for connection */ char servername[256];/* Server name for connection */ int serverport; /* Server port for connection */ #ifdef HAVE_GSSAPI int have_gss; /* Have GSS credentials? */ uid_t gss_uid; /* User ID for local prints */ #endif /* HAVE_GSSAPI */ #ifdef HAVE_AUTHORIZATION_H AuthorizationRef authref; /* Authorization ref */ #endif /* HAVE_AUTHORIZATION_H */ }; #define HTTP(con) ((con)->http) /* * HTTP listener structure... */ typedef struct { int fd; /* File descriptor for this server */ http_addr_t address; /* Bind address of socket */ http_encryption_t encryption; /* To encrypt or not to encrypt... */ #ifdef HAVE_ONDEMAND int on_demand; /* Is this a socket from launchd/systemd/upstart? */ #endif /* HAVE_ONDEMAND */ } cupsd_listener_t; /* * Globals... */ VAR int LastClientNumber VALUE(0), /* Last client connection number */ ListenBackLog VALUE(SOMAXCONN), /* Max backlog of pending connections */ LocalPort VALUE(631), /* Local port to use */ RemotePort VALUE(0); /* Remote port to use */ VAR http_encryption_t LocalEncryption VALUE(HTTP_ENCRYPT_IF_REQUESTED); /* Local port encryption to use */ VAR cups_array_t *Listeners VALUE(NULL); /* Listening sockets */ VAR time_t ListeningPaused VALUE(0); /* Time when listening was paused */ VAR cups_array_t *Clients VALUE(NULL), /* HTTP clients */ *ActiveClients VALUE(NULL); /* Active HTTP clients */ VAR char *ServerHeader VALUE(NULL); /* Server header in requests */ VAR int CGIPipes[2] VALUE2(-1,-1); /* Pipes for CGI error/debug output */ VAR cupsd_statbuf_t *CGIStatusBuffer VALUE(NULL); /* Status buffer for pipes */ /* * Prototypes... */ extern void cupsdAcceptClient(cupsd_listener_t *lis); extern void cupsdCloseAllClients(void); extern int cupsdCloseClient(cupsd_client_t *con); extern void cupsdDeleteAllListeners(void); extern void cupsdPauseListening(void); extern int cupsdProcessIPPRequest(cupsd_client_t *con); extern void cupsdReadClient(cupsd_client_t *con); extern void cupsdResumeListening(void); extern int cupsdSendCommand(cupsd_client_t *con, char *command, char *options, int root); extern int cupsdSendError(cupsd_client_t *con, http_status_t code, int auth_type); extern int cupsdSendHeader(cupsd_client_t *con, http_status_t code, char *type, int auth_type); extern void cupsdShutdownClient(cupsd_client_t *con); extern void cupsdStartListening(void); extern void cupsdStopListening(void); extern void cupsdUpdateCGI(void); extern void cupsdWriteClient(cupsd_client_t *con); #ifdef HAVE_SSL extern int cupsdEndTLS(cupsd_client_t *con); extern int cupsdStartTLS(cupsd_client_t *con); #endif /* HAVE_SSL */ cups-2.2.7/scheduler/colorman.c000664 000765 000024 00000122702 13255074424 017113 0ustar00msweetstaff000000 000000 /* * Color management routines for the CUPS scheduler. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * Original DBUS/colord code is Copyright 2011 Red Hat, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * Include necessary headers... */ #include "cupsd.h" #include #ifdef __APPLE__ # include extern CFUUIDRef ColorSyncCreateUUIDFromUInt32(unsigned id); # include #elif defined(HAVE_DBUS) # include /* * Defines used by colord. See the reference docs for further details: * * http://colord.hughsie.com/api/ref-dbus.html */ # define COLORD_SCOPE_NORMAL "normal" /* System scope */ # define COLORD_SCOPE_TEMP "temp" /* Process scope */ # define COLORD_SCOPE_DISK "disk" /* Lives forever, as stored in DB */ # define COLORD_RELATION_SOFT "soft" /* Mapping is not default */ # define COLORD_RELATION_HARD "hard" /* Explicitly mapped profile */ # define COLORD_SPACE_RGB "rgb" /* RGB colorspace */ # define COLORD_SPACE_CMYK "cmyk" /* CMYK colorspace */ # define COLORD_SPACE_GRAY "gray" /* Gray colorspace */ # define COLORD_SPACE_UNKNOWN "unknown" /* Unknown colorspace */ # define COLORD_MODE_PHYSICAL "physical" /* Actual device */ # define COLORD_MODE_VIRTUAL "virtual" /* Virtual device with no hardware */ # define COLORD_KIND_PRINTER "printer" /* printing output device */ # define COLORD_DBUS_SERVICE "org.freedesktop.ColorManager" # define COLORD_DBUS_INTERFACE "org.freedesktop.ColorManager" # define COLORD_DBUS_INTERFACE_DEVICE "org.freedesktop.ColorManager.Device" # define COLORD_DBUS_PATH "/org/freedesktop/ColorManager" /* Path for color management system */ # define COLORD_DBUS_TIMEOUT 5000 /* Timeout for connecting to colord in ms */ #endif /* __APPLE__ */ /* * Local globals... */ #if !defined(__APPLE__) && defined(HAVE_DBUS) static DBusConnection *colord_con = NULL; /* DBUS connection for colord */ #endif /* !__APPLE__ && HAVE_DBUS */ /* * Local functions... */ #ifdef __APPLE__ static void apple_init_profile(ppd_file_t *ppd, cups_array_t *languages, CFMutableDictionaryRef profile, unsigned id, const char *name, const char *text, const char *iccfile); static void apple_register_profiles(cupsd_printer_t *p); static void apple_unregister_profiles(cupsd_printer_t *p); #elif defined(HAVE_DBUS) static void colord_create_device(cupsd_printer_t *p, ppd_file_t *ppd, cups_array_t *profiles, const char *colorspace, char **format, const char *relation, const char *scope); static void colord_create_profile(cups_array_t *profiles, const char *printer_name, const char *qualifier, const char *colorspace, char **format, const char *iccfile, const char *scope); static void colord_delete_device(const char *device_id); static void colord_device_add_profile(const char *device_path, const char *profile_path, const char *relation); static void colord_dict_add_strings(DBusMessageIter *dict, const char *key, const char *value); static char *colord_find_device(const char *device_id); static void colord_get_qualifier_format(ppd_file_t *ppd, char *format[3]); static void colord_register_printer(cupsd_printer_t *p); static void colord_unregister_printer(cupsd_printer_t *p); #endif /* __APPLE__ */ /* * 'cupsdRegisterColor()' - Register vendor color profiles in a PPD file. */ void cupsdRegisterColor(cupsd_printer_t *p) /* I - Printer */ { #ifdef __APPLE__ if (!RunUser) { apple_unregister_profiles(p); apple_register_profiles(p); } #elif defined(HAVE_DBUS) if (!RunUser) { colord_unregister_printer(p); colord_register_printer(p); } #endif /* __APPLE__ */ } /* * 'cupsdStartColor()' - Initialize color management. */ void cupsdStartColor(void) { #if !defined(__APPLE__) && defined(HAVE_DBUS) cupsd_printer_t *p; /* Current printer */ colord_con = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) cupsdRegisterColor(p); #endif /* !__APPLE__ && HAVE_DBUS */ } /* * 'cupsdStopColor()' - Shutdown color management. */ void cupsdStopColor(void) { #if !defined(__APPLE__) && defined(HAVE_DBUS) if (colord_con) dbus_connection_unref(colord_con); colord_con = NULL; #endif /* !__APPLE__ && HAVE_DBUS */ } /* * 'cupsdUnregisterColor()' - Unregister vendor color profiles in a PPD file. */ void cupsdUnregisterColor(cupsd_printer_t *p)/* I - Printer */ { #ifdef __APPLE__ if (!RunUser) apple_unregister_profiles(p); #elif defined(HAVE_DBUS) if (!RunUser) colord_unregister_printer(p); #endif /* __APPLE__ */ } #ifdef __APPLE__ /* * 'apple_init_profile()' - Initialize a color profile. */ static void apple_init_profile( ppd_file_t *ppd, /* I - PPD file */ cups_array_t *languages, /* I - Languages in the PPD file */ CFMutableDictionaryRef profile, /* I - Profile dictionary */ unsigned id, /* I - Profile ID */ const char *name, /* I - Profile name */ const char *text, /* I - Profile UI text */ const char *iccfile) /* I - ICC filename */ { CFURLRef url; /* URL for profile filename */ CFMutableDictionaryRef dict; /* Dictionary for name */ char *language; /* Current language */ ppd_attr_t *attr; /* Profile attribute */ CFStringRef cflang, /* Language string */ cftext; /* Localized text */ (void)id; /* * Build the profile name dictionary... */ dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); if (!dict) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to initialize profile \"%s\".", iccfile); return; } cftext = CFStringCreateWithCString(kCFAllocatorDefault, text, kCFStringEncodingUTF8); if (cftext) { CFDictionarySetValue(dict, CFSTR("en_US"), cftext); CFRelease(cftext); } if (languages) { /* * Find localized names for the color profiles... */ cupsArraySave(ppd->sorted_attrs); for (language = (char *)cupsArrayFirst(languages); language; language = (char *)cupsArrayNext(languages)) { if (iccfile) { if ((attr = _ppdLocalizedAttr(ppd, "cupsICCProfile", name, language)) == NULL) attr = _ppdLocalizedAttr(ppd, "APTiogaProfile", name, language); } else attr = _ppdLocalizedAttr(ppd, "ColorModel", name, language); if (attr && attr->text[0]) { cflang = CFStringCreateWithCString(kCFAllocatorDefault, language, kCFStringEncodingUTF8); cftext = CFStringCreateWithCString(kCFAllocatorDefault, attr->text, kCFStringEncodingUTF8); if (cflang && cftext) CFDictionarySetValue(dict, cflang, cftext); if (cflang) CFRelease(cflang); if (cftext) CFRelease(cftext); } } cupsArrayRestore(ppd->sorted_attrs); } /* * Fill in the profile data... */ if (iccfile && *iccfile) { url = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (const UInt8 *)iccfile, (CFIndex)strlen(iccfile), false); if (url) { CFDictionarySetValue(profile, kColorSyncDeviceProfileURL, url); CFRelease(url); } } CFDictionarySetValue(profile, kColorSyncDeviceModeDescriptions, dict); CFRelease(dict); } /* * 'apple_register_profiles()' - Register color profiles for a printer. */ static void apple_register_profiles( cupsd_printer_t *p) /* I - Printer */ { int i; /* Looping var */ char ppdfile[1024], /* PPD filename */ iccfile[1024], /* ICC filename */ selector[PPD_MAX_NAME]; /* Profile selection string */ ppd_file_t *ppd; /* PPD file */ ppd_attr_t *attr, /* Profile attributes */ *profileid_attr,/* cupsProfileID attribute */ *q1_attr, /* ColorModel (or other) qualifier */ *q2_attr, /* MediaType (or other) qualifier */ *q3_attr; /* Resolution (or other) qualifier */ char q_keyword[PPD_MAX_NAME]; /* Qualifier keyword */ const char *q1_choice, /* ColorModel (or other) choice */ *q2_choice, /* MediaType (or other) choice */ *q3_choice; /* Resolution (or other) choice */ ppd_option_t *cm_option; /* Color model option */ ppd_choice_t *cm_choice; /* Color model choice */ int num_profiles; /* Number of profiles */ OSStatus error = 0; /* Last error */ unsigned device_id, /* Printer device ID */ profile_id = 0, /* Profile ID */ default_profile_id = 0; /* Default profile ID */ CFMutableDictionaryRef device_name; /* Printer device name dictionary */ CFStringRef printer_name; /* Printer name string */ cups_array_t *languages; /* Languages array */ CFMutableDictionaryRef profiles, /* Dictionary of profiles */ profile; /* Current profile info dictionary */ CFStringRef dict_key; /* Key in factory profile dictionary */ /* * Make sure ColorSync is available... */ if (&ColorSyncRegisterDevice == NULL) return; /* * Try opening the PPD file for this printer... */ snprintf(ppdfile, sizeof(ppdfile), "%s/ppd/%s.ppd", ServerRoot, p->name); if ((ppd = _ppdOpenFile(ppdfile, _PPD_LOCALIZATION_ICC_PROFILES)) == NULL) return; /* * See if we have any profiles... */ for (num_profiles = 0, attr = ppdFindAttr(ppd, "cupsICCProfile", NULL); attr; attr = ppdFindNextAttr(ppd, "cupsICCProfile", NULL)) if (attr->spec[0] && attr->value && attr->value[0]) { if (attr->value[0] != '/') snprintf(iccfile, sizeof(iccfile), "%s/profiles/%s", DataDir, attr->value); else strlcpy(iccfile, attr->value, sizeof(iccfile)); if (access(iccfile, 0)) { cupsdLogMessage(CUPSD_LOG_ERROR, "%s: ICC Profile \"%s\" does not exist.", p->name, iccfile); cupsdSetPrinterReasons(p, "+cups-missing-filter-warning"); continue; } num_profiles ++; } /* * Create a dictionary for the factory profiles... */ profiles = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); if (!profiles) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for factory profiles."); ppdClose(ppd); return; } /* * If we have profiles, add them... */ if (num_profiles > 0) { /* * For CUPS PPDs, figure out the default profile selector values... */ if ((attr = ppdFindAttr(ppd, "cupsICCQualifier1", NULL)) != NULL && attr->value && attr->value[0]) { snprintf(q_keyword, sizeof(q_keyword), "Default%s", attr->value); q1_attr = ppdFindAttr(ppd, q_keyword, NULL); } else if ((q1_attr = ppdFindAttr(ppd, "DefaultColorModel", NULL)) == NULL) q1_attr = ppdFindAttr(ppd, "DefaultColorSpace", NULL); if (q1_attr && q1_attr->value && q1_attr->value[0]) q1_choice = q1_attr->value; else q1_choice = ""; if ((attr = ppdFindAttr(ppd, "cupsICCQualifier2", NULL)) != NULL && attr->value && attr->value[0]) { snprintf(q_keyword, sizeof(q_keyword), "Default%s", attr->value); q2_attr = ppdFindAttr(ppd, q_keyword, NULL); } else q2_attr = ppdFindAttr(ppd, "DefaultMediaType", NULL); if (q2_attr && q2_attr->value && q2_attr->value[0]) q2_choice = q2_attr->value; else q2_choice = NULL; if ((attr = ppdFindAttr(ppd, "cupsICCQualifier3", NULL)) != NULL && attr->value && attr->value[0]) { snprintf(q_keyword, sizeof(q_keyword), "Default%s", attr->value); q3_attr = ppdFindAttr(ppd, q_keyword, NULL); } else q3_attr = ppdFindAttr(ppd, "DefaultResolution", NULL); if (q3_attr && q3_attr->value && q3_attr->value[0]) q3_choice = q3_attr->value; else q3_choice = NULL; /* * Loop through the profiles listed in the PPD... */ languages = _ppdGetLanguages(ppd); for (attr = ppdFindAttr(ppd, "cupsICCProfile", NULL); attr; attr = ppdFindNextAttr(ppd, "cupsICCProfile", NULL)) if (attr->spec[0] && attr->value && attr->value[0]) { /* * Add this profile... */ if (attr->value[0] != '/') snprintf(iccfile, sizeof(iccfile), "%s/profiles/%s", DataDir, attr->value); else strlcpy(iccfile, attr->value, sizeof(iccfile)); if (_cupsFileCheck(iccfile, _CUPS_FILE_CHECK_FILE, !RunUser, cupsdLogFCMessage, p)) iccfile[0] = '\0'; cupsArraySave(ppd->sorted_attrs); if ((profileid_attr = ppdFindAttr(ppd, "cupsProfileID", attr->spec)) != NULL && profileid_attr->value && isdigit(profileid_attr->value[0] & 255)) profile_id = (unsigned)strtoul(profileid_attr->value, NULL, 10); else profile_id = _ppdHashName(attr->spec); cupsArrayRestore(ppd->sorted_attrs); profile = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); if (!profile) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for color profile."); CFRelease(profiles); ppdClose(ppd); return; } apple_init_profile(ppd, languages, profile, profile_id, attr->spec, attr->text[0] ? attr->text : attr->spec, iccfile); dict_key = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%u"), profile_id); if (dict_key) { CFDictionarySetValue(profiles, dict_key, profile); CFRelease(dict_key); } CFRelease(profile); /* * See if this is the default profile... */ if (!default_profile_id && q1_choice && q2_choice && q3_choice) { snprintf(selector, sizeof(selector), "%s.%s.%s", q1_choice, q2_choice, q3_choice); if (!strcmp(selector, attr->spec)) default_profile_id = profile_id; } if (!default_profile_id && q1_choice && q2_choice) { snprintf(selector, sizeof(selector), "%s.%s.", q1_choice, q2_choice); if (!strcmp(selector, attr->spec)) default_profile_id = profile_id; } if (!default_profile_id && q1_choice && q3_choice) { snprintf(selector, sizeof(selector), "%s..%s", q1_choice, q3_choice); if (!strcmp(selector, attr->spec)) default_profile_id = profile_id; } if (!default_profile_id && q1_choice) { snprintf(selector, sizeof(selector), "%s..", q1_choice); if (!strcmp(selector, attr->spec)) default_profile_id = profile_id; } if (!default_profile_id && q2_choice && q3_choice) { snprintf(selector, sizeof(selector), ".%s.%s", q2_choice, q3_choice); if (!strcmp(selector, attr->spec)) default_profile_id = profile_id; } if (!default_profile_id && q2_choice) { snprintf(selector, sizeof(selector), ".%s.", q2_choice); if (!strcmp(selector, attr->spec)) default_profile_id = profile_id; } if (!default_profile_id && q3_choice) { snprintf(selector, sizeof(selector), "..%s", q3_choice); if (!strcmp(selector, attr->spec)) default_profile_id = profile_id; } } _ppdFreeLanguages(languages); } else if ((cm_option = ppdFindOption(ppd, "ColorModel")) != NULL) { /* * Extract profiles from ColorModel option... */ const char *profile_name; /* Name of generic profile */ num_profiles = cm_option->num_choices; for (i = cm_option->num_choices, cm_choice = cm_option->choices; i > 0; i --, cm_choice ++) { if (!strcmp(cm_choice->choice, "Gray") || !strcmp(cm_choice->choice, "Black")) profile_name = "Gray"; else if (!strcmp(cm_choice->choice, "RGB") || !strcmp(cm_choice->choice, "CMY")) profile_name = "RGB"; else if (!strcmp(cm_choice->choice, "CMYK") || !strcmp(cm_choice->choice, "KCMY")) profile_name = "CMYK"; else profile_name = "DeviceN"; snprintf(selector, sizeof(selector), "%s..", profile_name); profile_id = _ppdHashName(selector); profile = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); if (!profile) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for color profile."); CFRelease(profiles); ppdClose(ppd); return; } apple_init_profile(ppd, NULL, profile, profile_id, cm_choice->choice, cm_choice->text, NULL); dict_key = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%u"), profile_id); if (dict_key) { CFDictionarySetValue(profiles, dict_key, profile); CFRelease(dict_key); } CFRelease(profile); if (cm_choice->marked) default_profile_id = profile_id; } } else { /* * Use the default colorspace... */ attr = ppdFindAttr(ppd, "DefaultColorSpace", NULL); num_profiles = (attr && ppd->colorspace == PPD_CS_GRAY) ? 1 : 2; /* * Add the grayscale profile first. We always have a grayscale profile. */ profile = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); if (!profile) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for color profile."); CFRelease(profiles); ppdClose(ppd); return; } profile_id = _ppdHashName("Gray.."); apple_init_profile(ppd, NULL, profile, profile_id, "Gray", "Gray", NULL); dict_key = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%u"), profile_id); if (dict_key) { CFDictionarySetValue(profiles, dict_key, profile); CFRelease(dict_key); } CFRelease(profile); /* * Then add the RGB/CMYK/DeviceN color profile... */ profile = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); if (!profile) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for color profile."); CFRelease(profiles); ppdClose(ppd); return; } switch (ppd->colorspace) { default : case PPD_CS_RGB : case PPD_CS_CMY : profile_id = _ppdHashName("RGB.."); apple_init_profile(ppd, NULL, profile, profile_id, "RGB", "RGB", NULL); break; case PPD_CS_RGBK : case PPD_CS_CMYK : profile_id = _ppdHashName("CMYK.."); apple_init_profile(ppd, NULL, profile, profile_id, "CMYK", "CMYK", NULL); break; case PPD_CS_GRAY : if (attr) break; case PPD_CS_N : profile_id = _ppdHashName("DeviceN.."); apple_init_profile(ppd, NULL, profile, profile_id, "DeviceN", "DeviceN", NULL); break; } if (CFDictionaryGetCount(profile) > 0) { dict_key = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%u"), profile_id); if (dict_key) { CFDictionarySetValue(profiles, dict_key, profile); CFRelease(dict_key); } } CFRelease(profile); } if (num_profiles > 0) { /* * Make sure we have a default profile ID... */ if (!default_profile_id) default_profile_id = profile_id; /* Last profile */ dict_key = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%u"), default_profile_id); if (dict_key) { CFDictionarySetValue(profiles, kColorSyncDeviceDefaultProfileID, dict_key); CFRelease(dict_key); } /* * Get the device ID hash and pathelogical name dictionary. */ cupsdLogMessage(CUPSD_LOG_INFO, "Registering ICC color profiles for \"%s\"", p->name); device_id = _ppdHashName(p->name); device_name = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); printer_name = CFStringCreateWithCString(kCFAllocatorDefault, p->name, kCFStringEncodingUTF8); if (device_name && printer_name) { /* * Register the device with ColorSync... */ CFTypeRef deviceDictKeys[] = { /* Device keys */ kColorSyncDeviceDescriptions, kColorSyncFactoryProfiles, kColorSyncDeviceUserScope, kColorSyncDeviceHostScope }; CFTypeRef deviceDictVals[] = { /* Device values */ device_name, profiles, kCFPreferencesAnyUser, kCFPreferencesCurrentHost }; CFDictionaryRef deviceDict; /* Device dictionary */ CFUUIDRef deviceUUID; /* Device UUID */ CFDictionarySetValue(device_name, CFSTR("en_US"), printer_name); deviceDict = CFDictionaryCreate(kCFAllocatorDefault, (const void **)deviceDictKeys, (const void **)deviceDictVals, sizeof(deviceDictKeys) / sizeof(deviceDictKeys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); deviceUUID = ColorSyncCreateUUIDFromUInt32(device_id); if (!deviceDict || !deviceUUID || !ColorSyncRegisterDevice(kColorSyncPrinterDeviceClass, deviceUUID, deviceDict)) error = 1001; if (deviceUUID) CFRelease(deviceUUID); if (deviceDict) CFRelease(deviceDict); } else error = 1000; /* * Clean up... */ if (error != noErr) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to register ICC color profiles for \"%s\": %d", p->name, (int)error); if (printer_name) CFRelease(printer_name); if (device_name) CFRelease(device_name); } /* * Free any memory we used... */ CFRelease(profiles); ppdClose(ppd); } /* * 'apple_unregister_profiles()' - Remove color profiles for the specified * printer. */ static void apple_unregister_profiles( cupsd_printer_t *p) /* I - Printer */ { /* * Make sure ColorSync is available... */ if (&ColorSyncUnregisterDevice != NULL) { CFUUIDRef deviceUUID; /* Device UUID */ deviceUUID = ColorSyncCreateUUIDFromUInt32(_ppdHashName(p->name)); if (deviceUUID) { ColorSyncUnregisterDevice(kColorSyncPrinterDeviceClass, deviceUUID); CFRelease(deviceUUID); } } } #elif defined(HAVE_DBUS) /* * 'colord_create_device()' - Create a device and register profiles. */ static void colord_create_device( cupsd_printer_t *p, /* I - Printer */ ppd_file_t *ppd, /* I - PPD file */ cups_array_t *profiles, /* I - Profiles array */ const char *colorspace, /* I - Device colorspace, e.g. 'rgb' */ char **format, /* I - Device qualifier format */ const char *relation, /* I - Profile relation, either 'soft' or 'hard' */ const char *scope) /* I - The scope of the device, e.g. 'normal', 'temp' or 'disk' */ { DBusMessage *message = NULL; /* D-Bus request */ DBusMessage *reply = NULL; /* D-Bus reply */ DBusMessageIter args; /* D-Bus method arguments */ DBusMessageIter dict; /* D-Bus method arguments */ DBusError error; /* D-Bus error */ const char *device_path; /* Device object path */ const char *profile_path; /* Profile path */ char *default_profile_path = NULL; /* Default profile path */ char device_id[1024]; /* Device ID as understood by colord */ char format_str[1024]; /* Qualifier format as a string */ /* * Create the device... */ snprintf(device_id, sizeof(device_id), "cups-%s", p->name); device_path = device_id; message = dbus_message_new_method_call(COLORD_DBUS_SERVICE, COLORD_DBUS_PATH, COLORD_DBUS_INTERFACE, "CreateDevice"); dbus_message_iter_init_append(message, &args); dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &device_path); dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &scope); snprintf(format_str, sizeof(format_str), "%s.%s.%s", format[0], format[1], format[2]); dbus_message_iter_open_container(&args, DBUS_TYPE_ARRAY, "{ss}", &dict); colord_dict_add_strings(&dict, "Colorspace", colorspace); colord_dict_add_strings(&dict, "Mode", COLORD_MODE_PHYSICAL); if (ppd->manufacturer) colord_dict_add_strings(&dict, "Vendor", ppd->manufacturer); if (ppd->modelname) colord_dict_add_strings(&dict, "Model", ppd->modelname); if (p->sanitized_device_uri) colord_dict_add_strings(&dict, "Serial", p->sanitized_device_uri); colord_dict_add_strings(&dict, "Format", format_str); colord_dict_add_strings(&dict, "Kind", COLORD_KIND_PRINTER); dbus_message_iter_close_container(&args, &dict); /* * Send the CreateDevice request synchronously... */ dbus_error_init(&error); cupsdLogMessage(CUPSD_LOG_DEBUG, "Calling CreateDevice(%s,%s)", device_id, scope); reply = dbus_connection_send_with_reply_and_block(colord_con, message, COLORD_DBUS_TIMEOUT, &error); if (!reply) { cupsdLogMessage(CUPSD_LOG_WARN, "CreateDevice failed: %s:%s", error.name, error.message); dbus_error_free(&error); goto out; } /* * Get reply data... */ dbus_message_iter_init(reply, &args); if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_OBJECT_PATH) { cupsdLogMessage(CUPSD_LOG_WARN, "CreateDevice failed: Incorrect reply type."); goto out; } dbus_message_iter_get_basic(&args, &device_path); cupsdLogMessage(CUPSD_LOG_DEBUG, "Created device \"%s\".", device_path); /* * Add profiles... */ for (profile_path = cupsArrayFirst(profiles); profile_path; profile_path = cupsArrayNext(profiles)) { colord_device_add_profile(device_path, profile_path, relation); } out: if (default_profile_path) free(default_profile_path); if (message) dbus_message_unref(message); if (reply) dbus_message_unref(reply); } /* * 'colord_create_profile()' - Create a color profile for a printer. */ static void colord_create_profile( cups_array_t *profiles, /* I - Profiles array */ const char *printer_name, /* I - Printer name */ const char *qualifier, /* I - Profile qualifier */ const char *colorspace, /* I - Profile colorspace */ char **format, /* I - Profile qualifier format */ const char *iccfile, /* I - ICC filename */ const char *scope) /* I - The scope of the profile, e.g. 'normal', 'temp' or 'disk' */ { DBusMessage *message = NULL; /* D-Bus request */ DBusMessage *reply = NULL; /* D-Bus reply */ DBusMessageIter args; /* D-Bus method arguments */ DBusMessageIter dict; /* D-Bus method arguments */ DBusError error; /* D-Bus error */ char *idstr; /* Profile ID string */ size_t idstrlen; /* Profile ID allocated length */ const char *profile_path; /* Device object path */ char format_str[1024]; /* Qualifier format as a string */ /* * Create the profile... */ message = dbus_message_new_method_call(COLORD_DBUS_SERVICE, COLORD_DBUS_PATH, COLORD_DBUS_INTERFACE, "CreateProfile"); idstrlen = strlen(printer_name) + 1 + strlen(qualifier) + 1; if ((idstr = malloc(idstrlen)) == NULL) goto out; snprintf(idstr, idstrlen, "%s-%s", printer_name, qualifier); cupsdLogMessage(CUPSD_LOG_DEBUG, "Using profile ID \"%s\".", idstr); dbus_message_iter_init_append(message, &args); dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &idstr); dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &scope); snprintf(format_str, sizeof(format_str), "%s.%s.%s", format[0], format[1], format[2]); dbus_message_iter_open_container(&args, DBUS_TYPE_ARRAY, "{ss}", &dict); colord_dict_add_strings(&dict, "Qualifier", qualifier); colord_dict_add_strings(&dict, "Format", format_str); colord_dict_add_strings(&dict, "Colorspace", colorspace); if (iccfile) colord_dict_add_strings(&dict, "Filename", iccfile); dbus_message_iter_close_container(&args, &dict); /* * Send the CreateProfile request synchronously... */ dbus_error_init(&error); cupsdLogMessage(CUPSD_LOG_DEBUG, "Calling CreateProfile(%s,%s)", idstr, scope); reply = dbus_connection_send_with_reply_and_block(colord_con, message, COLORD_DBUS_TIMEOUT, &error); if (!reply) { cupsdLogMessage(CUPSD_LOG_WARN, "CreateProfile failed: %s:%s", error.name, error.message); dbus_error_free(&error); goto out; } /* * Get reply data... */ dbus_message_iter_init(reply, &args); if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_OBJECT_PATH) { cupsdLogMessage(CUPSD_LOG_WARN, "CreateProfile failed: Incorrect reply type."); goto out; } dbus_message_iter_get_basic(&args, &profile_path); cupsdLogMessage(CUPSD_LOG_DEBUG, "Created profile \"%s\".", profile_path); cupsArrayAdd(profiles, strdup(profile_path)); out: if (message) dbus_message_unref(message); if (reply) dbus_message_unref(reply); if (idstr) free(idstr); } /* * 'colord_delete_device()' - Delete a device */ static void colord_delete_device( const char *device_id) /* I - Device ID string */ { DBusMessage *message = NULL; /* D-Bus request */ DBusMessage *reply = NULL; /* D-Bus reply */ DBusMessageIter args; /* D-Bus method arguments */ DBusError error; /* D-Bus error */ char *device_path; /* Device object path */ /* * Find the device... */ if ((device_path = colord_find_device(device_id)) == NULL) goto out; /* * Delete the device... */ message = dbus_message_new_method_call(COLORD_DBUS_SERVICE, COLORD_DBUS_PATH, COLORD_DBUS_INTERFACE, "DeleteDevice"); dbus_message_iter_init_append(message, &args); dbus_message_iter_append_basic(&args, DBUS_TYPE_OBJECT_PATH, &device_path); /* * Send the DeleteDevice request synchronously... */ dbus_error_init(&error); cupsdLogMessage(CUPSD_LOG_DEBUG, "Calling DeleteDevice(%s)", device_path); reply = dbus_connection_send_with_reply_and_block(colord_con, message, COLORD_DBUS_TIMEOUT, &error); if (!reply) { cupsdLogMessage(CUPSD_LOG_DEBUG, "DeleteDevice failed: %s:%s", error.name, error.message); dbus_error_free(&error); goto out; } out: if (device_path) free(device_path); if (message) dbus_message_unref(message); if (reply) dbus_message_unref(reply); } /* * 'colord_device_add_profile()' - Assign a profile to a device. */ static void colord_device_add_profile( const char *device_path, /* I - Device object path */ const char *profile_path, /* I - Profile object path */ const char *relation) /* I - Device relation, either 'soft' or 'hard' */ { DBusMessage *message = NULL; /* D-Bus request */ DBusMessage *reply = NULL; /* D-Bus reply */ DBusMessageIter args; /* D-Bus method arguments */ DBusError error; /* D-Bus error */ message = dbus_message_new_method_call(COLORD_DBUS_SERVICE, device_path, COLORD_DBUS_INTERFACE_DEVICE, "AddProfile"); dbus_message_iter_init_append(message, &args); dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &relation); dbus_message_iter_append_basic(&args, DBUS_TYPE_OBJECT_PATH, &profile_path); cupsdLogMessage(CUPSD_LOG_DEBUG, "Calling %s:AddProfile(%s) [%s]", device_path, profile_path, relation); /* * Send the AddProfile request synchronously... */ dbus_error_init(&error); reply = dbus_connection_send_with_reply_and_block(colord_con, message, COLORD_DBUS_TIMEOUT, &error); if (!reply) { cupsdLogMessage(CUPSD_LOG_WARN, "AddProfile failed: %s:%s", error.name, error.message); dbus_error_free(&error); goto out; } out: if (message) dbus_message_unref(message); if (reply) dbus_message_unref(reply); } /* * 'colord_dict_add_strings()' - Add two strings to a dictionary. */ static void colord_dict_add_strings( DBusMessageIter *dict, /* I - Dictionary */ const char *key, /* I - Key string */ const char *value) /* I - Value string */ { DBusMessageIter entry; /* Entry to add */ dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry); dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &value); dbus_message_iter_close_container(dict, &entry); } /* * 'colord_find_device()' - Finds a device */ static char * /* O - Device path or NULL */ colord_find_device( const char *device_id) /* I - Device ID string */ { DBusMessage *message = NULL; /* D-Bus request */ DBusMessage *reply = NULL; /* D-Bus reply */ DBusMessageIter args; /* D-Bus method arguments */ DBusError error; /* D-Bus error */ const char *device_path_tmp; /* Device object path */ char *device_path = NULL; /* Device object path */ message = dbus_message_new_method_call(COLORD_DBUS_SERVICE, COLORD_DBUS_PATH, COLORD_DBUS_INTERFACE, "FindDeviceById"); dbus_message_iter_init_append(message, &args); dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &device_id); /* * Send the FindDeviceById request synchronously... */ dbus_error_init(&error); cupsdLogMessage(CUPSD_LOG_DEBUG, "Calling FindDeviceById(%s)", device_id); reply = dbus_connection_send_with_reply_and_block(colord_con, message, COLORD_DBUS_TIMEOUT, &error); if (!reply) { cupsdLogMessage(CUPSD_LOG_DEBUG, "FindDeviceById failed: %s:%s", error.name, error.message); dbus_error_free(&error); goto out; } /* * Get reply data... */ dbus_message_iter_init(reply, &args); if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_OBJECT_PATH) { cupsdLogMessage(CUPSD_LOG_WARN, "FindDeviceById failed: Incorrect reply type."); goto out; } dbus_message_iter_get_basic(&args, &device_path_tmp); if (device_path_tmp) device_path = strdup(device_path_tmp); out: if (message) dbus_message_unref(message); if (reply) dbus_message_unref(reply); return (device_path); } /* * 'colord_get_qualifier_format()' - Get the qualifier format. * * Note: Returns a value of "ColorSpace.MediaType.Resolution" by default. */ static void colord_get_qualifier_format( ppd_file_t *ppd, /* I - PPD file data */ char *format[3]) /* I - Format tuple */ { const char *tmp; /* Temporary string */ ppd_attr_t *attr; /* Profile attributes */ /* * Get 1st section... */ if ((attr = ppdFindAttr(ppd, "cupsICCQualifier1", NULL)) != NULL) tmp = attr->value; else if (ppdFindAttr(ppd, "DefaultColorModel", NULL)) tmp = "ColorModel"; else if (ppdFindAttr(ppd, "DefaultColorSpace", NULL)) tmp = "ColorSpace"; else tmp = ""; format[0] = strdup(tmp); /* * Get 2nd section... */ if ((attr = ppdFindAttr(ppd, "cupsICCQualifier2", NULL)) != NULL) tmp = attr->value; else tmp = "MediaType"; format[1] = strdup(tmp); /* * Get 3rd section... */ if ((attr = ppdFindAttr(ppd, "cupsICCQualifier3", NULL)) != NULL) tmp = attr->value; else tmp = "Resolution"; format[2] = strdup(tmp); } /* * 'colord_register_printer()' - Register profiles for a printer. */ static void colord_register_printer( cupsd_printer_t *p) /* I - printer */ { char ppdfile[1024], /* PPD filename */ iccfile[1024]; /* ICC filename */ ppd_file_t *ppd; /* PPD file */ cups_array_t *profiles; /* Profile paths array */ ppd_attr_t *attr; /* Profile attributes */ const char *device_colorspace; /* Device colorspace */ char *format[3]; /* Qualifier format tuple */ /* * Ensure we have a D-Bus connection... */ if (!colord_con) return; /* * Try opening the PPD file for this printer... */ snprintf(ppdfile, sizeof(ppdfile), "%s/ppd/%s.ppd", ServerRoot, p->name); if ((ppd = _ppdOpenFile(ppdfile, _PPD_LOCALIZATION_ICC_PROFILES)) == NULL) return; /* * Find out the qualifier format */ colord_get_qualifier_format(ppd, format); /* * See if we have any embedded profiles... */ profiles = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); for (attr = ppdFindAttr(ppd, "cupsICCProfile", NULL); attr; attr = ppdFindNextAttr(ppd, "cupsICCProfile", NULL)) if (attr->spec[0] && attr->value && attr->value[0]) { if (attr->value[0] != '/') snprintf(iccfile, sizeof(iccfile), "%s/profiles/%s", DataDir, attr->value); else strlcpy(iccfile, attr->value, sizeof(iccfile)); if (_cupsFileCheck(iccfile, _CUPS_FILE_CHECK_FILE, !RunUser, cupsdLogFCMessage, p)) continue; colord_create_profile(profiles, p->name, attr->spec, COLORD_SPACE_UNKNOWN, format, iccfile, COLORD_SCOPE_TEMP); } /* * Add the grayscale profile first. We always have a grayscale profile. */ colord_create_profile(profiles, p->name, "Gray..", COLORD_SPACE_GRAY, format, NULL, COLORD_SCOPE_TEMP); /* * Then add the RGB/CMYK/DeviceN color profile... */ device_colorspace = "unknown"; switch (ppd->colorspace) { case PPD_CS_RGB : case PPD_CS_CMY : device_colorspace = COLORD_SPACE_RGB; colord_create_profile(profiles, p->name, "RGB..", COLORD_SPACE_RGB, format, NULL, COLORD_SCOPE_TEMP); break; case PPD_CS_RGBK : case PPD_CS_CMYK : device_colorspace = COLORD_SPACE_CMYK; colord_create_profile(profiles, p->name, "CMYK..", COLORD_SPACE_CMYK, format, NULL, COLORD_SCOPE_TEMP); break; case PPD_CS_GRAY : device_colorspace = COLORD_SPACE_GRAY; break; case PPD_CS_N : colord_create_profile(profiles, p->name, "DeviceN..", COLORD_SPACE_UNKNOWN, format, NULL, COLORD_SCOPE_TEMP); break; } /* * Register the device with colord. */ cupsdLogMessage(CUPSD_LOG_INFO, "Registering ICC color profiles for \"%s\".", p->name); colord_create_device(p, ppd, profiles, device_colorspace, format, COLORD_RELATION_SOFT, COLORD_SCOPE_TEMP); /* * Free any memory we used... */ cupsArrayDelete(profiles); free(format[0]); free(format[1]); free(format[2]); ppdClose(ppd); } /* * 'colord_unregister_printer()' - Unregister profiles for a printer. */ static void colord_unregister_printer( cupsd_printer_t *p) /* I - printer */ { char device_id[1024]; /* Device ID as understood by colord */ /* * Ensure we have a D-Bus connection... */ if (!colord_con) return; /* * Just delete the device itself, and leave the profiles registered */ snprintf(device_id, sizeof(device_id), "cups-%s", p->name); colord_delete_device(device_id); } #endif /* __APPLE__ */ cups-2.2.7/scheduler/colorman.h000664 000765 000024 00000001324 13255074424 017114 0ustar00msweetstaff000000 000000 /* * Color management definitions for the CUPS scheduler. * * Copyright 2007-2012 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Prototypes... */ extern void cupsdRegisterColor(cupsd_printer_t *p); extern void cupsdStartColor(void); extern void cupsdStopColor(void); extern void cupsdUnregisterColor(cupsd_printer_t *p); cups-2.2.7/scheduler/conf.c000664 000765 000024 00000341664 13255074424 016240 0ustar00msweetstaff000000 000000 /* * Configuration routines for the CUPS scheduler. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #include #include #include #ifdef HAVE_ASL_H # include #elif defined(HAVE_SYSTEMD_SD_JOURNAL_H) # define SD_JOURNAL_SUPPRESS_LOCATION # include #endif /* HAVE_ASL_H */ #include #ifdef HAVE_LIBPAPER # include #endif /* HAVE_LIBPAPER */ /* * Possibly missing network definitions... */ #ifndef INADDR_NONE # define INADDR_NONE 0xffffffff #endif /* !INADDR_NONE */ /* * Configuration variable structure... */ typedef enum { CUPSD_VARTYPE_INTEGER, /* Integer option */ CUPSD_VARTYPE_TIME, /* Time interval option */ CUPSD_VARTYPE_STRING, /* String option */ CUPSD_VARTYPE_BOOLEAN, /* Boolean option */ CUPSD_VARTYPE_PATHNAME, /* File/directory name option */ CUPSD_VARTYPE_PERM /* File/directory permissions */ } cupsd_vartype_t; typedef struct { const char *name; /* Name of variable */ void *ptr; /* Pointer to variable */ cupsd_vartype_t type; /* Type (int, string, address) */ } cupsd_var_t; /* * Local globals... */ static const cupsd_var_t cupsd_vars[] = { { "AutoPurgeJobs", &JobAutoPurge, CUPSD_VARTYPE_BOOLEAN }, #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) { "BrowseDNSSDSubTypes", &DNSSDSubTypes, CUPSD_VARTYPE_STRING }, #endif /* HAVE_DNSSD || HAVE_AVAHI */ { "BrowseWebIF", &BrowseWebIF, CUPSD_VARTYPE_BOOLEAN }, { "Browsing", &Browsing, CUPSD_VARTYPE_BOOLEAN }, { "Classification", &Classification, CUPSD_VARTYPE_STRING }, { "ClassifyOverride", &ClassifyOverride, CUPSD_VARTYPE_BOOLEAN }, { "DefaultLanguage", &DefaultLanguage, CUPSD_VARTYPE_STRING }, { "DefaultLeaseDuration", &DefaultLeaseDuration, CUPSD_VARTYPE_TIME }, { "DefaultPaperSize", &DefaultPaperSize, CUPSD_VARTYPE_STRING }, { "DefaultPolicy", &DefaultPolicy, CUPSD_VARTYPE_STRING }, { "DefaultShared", &DefaultShared, CUPSD_VARTYPE_BOOLEAN }, { "DirtyCleanInterval", &DirtyCleanInterval, CUPSD_VARTYPE_TIME }, { "ErrorPolicy", &ErrorPolicy, CUPSD_VARTYPE_STRING }, { "FilterLimit", &FilterLimit, CUPSD_VARTYPE_INTEGER }, { "FilterNice", &FilterNice, CUPSD_VARTYPE_INTEGER }, #ifdef HAVE_GSSAPI { "GSSServiceName", &GSSServiceName, CUPSD_VARTYPE_STRING }, #endif /* HAVE_GSSAPI */ #ifdef HAVE_ONDEMAND { "IdleExitTimeout", &IdleExitTimeout, CUPSD_VARTYPE_TIME }, #endif /* HAVE_ONDEMAND */ { "JobKillDelay", &JobKillDelay, CUPSD_VARTYPE_TIME }, { "JobRetryLimit", &JobRetryLimit, CUPSD_VARTYPE_INTEGER }, { "JobRetryInterval", &JobRetryInterval, CUPSD_VARTYPE_TIME }, { "KeepAliveTimeout", &KeepAliveTimeout, CUPSD_VARTYPE_TIME }, { "KeepAlive", &KeepAlive, CUPSD_VARTYPE_BOOLEAN }, #ifdef HAVE_LAUNCHD { "LaunchdTimeout", &IdleExitTimeout, CUPSD_VARTYPE_TIME }, #endif /* HAVE_LAUNCHD */ { "LimitRequestBody", &MaxRequestSize, CUPSD_VARTYPE_INTEGER }, { "ListenBackLog", &ListenBackLog, CUPSD_VARTYPE_INTEGER }, { "LogDebugHistory", &LogDebugHistory, CUPSD_VARTYPE_INTEGER }, { "MaxActiveJobs", &MaxActiveJobs, CUPSD_VARTYPE_INTEGER }, { "MaxClients", &MaxClients, CUPSD_VARTYPE_INTEGER }, { "MaxClientsPerHost", &MaxClientsPerHost, CUPSD_VARTYPE_INTEGER }, { "MaxCopies", &MaxCopies, CUPSD_VARTYPE_INTEGER }, { "MaxEvents", &MaxEvents, CUPSD_VARTYPE_INTEGER }, { "MaxHoldTime", &MaxHoldTime, CUPSD_VARTYPE_TIME }, { "MaxJobs", &MaxJobs, CUPSD_VARTYPE_INTEGER }, { "MaxJobsPerPrinter", &MaxJobsPerPrinter, CUPSD_VARTYPE_INTEGER }, { "MaxJobsPerUser", &MaxJobsPerUser, CUPSD_VARTYPE_INTEGER }, { "MaxJobTime", &MaxJobTime, CUPSD_VARTYPE_TIME }, { "MaxLeaseDuration", &MaxLeaseDuration, CUPSD_VARTYPE_TIME }, { "MaxLogSize", &MaxLogSize, CUPSD_VARTYPE_INTEGER }, { "MaxRequestSize", &MaxRequestSize, CUPSD_VARTYPE_INTEGER }, { "MaxSubscriptions", &MaxSubscriptions, CUPSD_VARTYPE_INTEGER }, { "MaxSubscriptionsPerJob", &MaxSubscriptionsPerJob, CUPSD_VARTYPE_INTEGER }, { "MaxSubscriptionsPerPrinter",&MaxSubscriptionsPerPrinter, CUPSD_VARTYPE_INTEGER }, { "MaxSubscriptionsPerUser", &MaxSubscriptionsPerUser, CUPSD_VARTYPE_INTEGER }, { "MultipleOperationTimeout", &MultipleOperationTimeout, CUPSD_VARTYPE_TIME }, { "PageLogFormat", &PageLogFormat, CUPSD_VARTYPE_STRING }, { "PreserveJobFiles", &JobFiles, CUPSD_VARTYPE_TIME }, { "PreserveJobHistory", &JobHistory, CUPSD_VARTYPE_TIME }, { "ReloadTimeout", &ReloadTimeout, CUPSD_VARTYPE_TIME }, { "RIPCache", &RIPCache, CUPSD_VARTYPE_STRING }, { "RootCertDuration", &RootCertDuration, CUPSD_VARTYPE_TIME }, { "ServerAdmin", &ServerAdmin, CUPSD_VARTYPE_STRING }, { "ServerName", &ServerName, CUPSD_VARTYPE_STRING }, { "StrictConformance", &StrictConformance, CUPSD_VARTYPE_BOOLEAN }, { "Timeout", &Timeout, CUPSD_VARTYPE_TIME }, { "WebInterface", &WebInterface, CUPSD_VARTYPE_BOOLEAN } }; static const cupsd_var_t cupsfiles_vars[] = { { "AccessLog", &AccessLog, CUPSD_VARTYPE_STRING }, { "CacheDir", &CacheDir, CUPSD_VARTYPE_STRING }, { "ConfigFilePerm", &ConfigFilePerm, CUPSD_VARTYPE_PERM }, #ifdef HAVE_SSL { "CreateSelfSignedCerts", &CreateSelfSignedCerts, CUPSD_VARTYPE_BOOLEAN }, #endif /* HAVE_SSL */ { "DataDir", &DataDir, CUPSD_VARTYPE_STRING }, { "DocumentRoot", &DocumentRoot, CUPSD_VARTYPE_STRING }, { "ErrorLog", &ErrorLog, CUPSD_VARTYPE_STRING }, { "FileDevice", &FileDevice, CUPSD_VARTYPE_BOOLEAN }, { "FontPath", &FontPath, CUPSD_VARTYPE_STRING }, { "LogFilePerm", &LogFilePerm, CUPSD_VARTYPE_PERM }, { "LPDConfigFile", &LPDConfigFile, CUPSD_VARTYPE_STRING }, { "PageLog", &PageLog, CUPSD_VARTYPE_STRING }, { "Printcap", &Printcap, CUPSD_VARTYPE_STRING }, { "RemoteRoot", &RemoteRoot, CUPSD_VARTYPE_STRING }, { "RequestRoot", &RequestRoot, CUPSD_VARTYPE_STRING }, { "ServerBin", &ServerBin, CUPSD_VARTYPE_PATHNAME }, #ifdef HAVE_SSL { "ServerKeychain", &ServerKeychain, CUPSD_VARTYPE_PATHNAME }, #endif /* HAVE_SSL */ { "ServerRoot", &ServerRoot, CUPSD_VARTYPE_PATHNAME }, { "SMBConfigFile", &SMBConfigFile, CUPSD_VARTYPE_STRING }, { "StateDir", &StateDir, CUPSD_VARTYPE_STRING }, { "SyncOnClose", &SyncOnClose, CUPSD_VARTYPE_BOOLEAN }, #ifdef HAVE_AUTHORIZATION_H { "SystemGroupAuthKey", &SystemGroupAuthKey, CUPSD_VARTYPE_STRING }, #endif /* HAVE_AUTHORIZATION_H */ { "TempDir", &TempDir, CUPSD_VARTYPE_PATHNAME } }; static int default_auth_type = CUPSD_AUTH_AUTO; /* Default AuthType, if not specified */ static const unsigned ones[4] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff }; static const unsigned zeros[4] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }; /* * Local functions... */ static http_addrlist_t *get_address(const char *value, int defport); static int get_addr_and_mask(const char *value, unsigned *ip, unsigned *mask); static void mime_error_cb(void *ctx, const char *message); static int parse_aaa(cupsd_location_t *loc, char *line, char *value, int linenum); static int parse_fatal_errors(const char *s); static int parse_groups(const char *s, int linenum); static int parse_protocols(const char *s); static int parse_variable(const char *filename, int linenum, const char *line, const char *value, size_t num_vars, const cupsd_var_t *vars); static int read_cupsd_conf(cups_file_t *fp); static int read_cups_files_conf(cups_file_t *fp); static int read_location(cups_file_t *fp, char *name, int linenum); static int read_policy(cups_file_t *fp, char *name, int linenum); static void set_policy_defaults(cupsd_policy_t *pol); /* * 'cupsdAddAlias()' - Add a host alias. */ void cupsdAddAlias(cups_array_t *aliases, /* I - Array of aliases */ const char *name) /* I - Name to add */ { cupsd_alias_t *a; /* New alias */ size_t namelen; /* Length of name */ namelen = strlen(name); if ((a = (cupsd_alias_t *)malloc(sizeof(cupsd_alias_t) + namelen)) == NULL) return; a->namelen = namelen; memcpy(a->name, name, namelen + 1); /* OK since a->name is allocated */ cupsArrayAdd(aliases, a); } /* * 'cupsdCheckPermissions()' - Fix the mode and ownership of a file or directory. */ int /* O - 0 on success, -1 on error, 1 on warning */ cupsdCheckPermissions( const char *filename, /* I - File/directory name */ const char *suffix, /* I - Additional file/directory name */ mode_t mode, /* I - Permissions */ uid_t user, /* I - Owner */ gid_t group, /* I - Group */ int is_dir, /* I - 1 = directory, 0 = file */ int create_dir) /* I - 1 = create directory, -1 = create w/o logging, 0 = not */ { int dir_created = 0; /* Did we create a directory? */ char pathname[1024]; /* File name with prefix */ struct stat fileinfo; /* Stat buffer */ int is_symlink; /* Is "filename" a symlink? */ /* * Prepend the given root to the filename before testing it... */ if (suffix) { snprintf(pathname, sizeof(pathname), "%s/%s", filename, suffix); filename = pathname; } /* * See if we can stat the file/directory... */ if (lstat(filename, &fileinfo)) { if (errno == ENOENT && create_dir) { if (create_dir > 0) cupsdLogMessage(CUPSD_LOG_DEBUG, "Creating missing directory \"%s\"", filename); if (mkdir(filename, mode)) { if (create_dir > 0) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create directory \"%s\" - %s", filename, strerror(errno)); else #ifdef HAVE_SYSTEMD_SD_JOURNAL_H sd_journal_print(LOG_ERR, "Unable to create directory \"%s\" - %s", filename, strerror(errno)); #else syslog(LOG_ERR, "Unable to create directory \"%s\" - %s", filename, strerror(errno)); #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ return (-1); } dir_created = 1; fileinfo.st_mode = mode | S_IFDIR; } else return (create_dir ? -1 : 1); } if ((is_symlink = S_ISLNK(fileinfo.st_mode)) != 0) { if (stat(filename, &fileinfo)) { cupsdLogMessage(CUPSD_LOG_ERROR, "\"%s\" is a bad symlink - %s", filename, strerror(errno)); return (-1); } } /* * Make sure it's a regular file or a directory as needed... */ if (!dir_created && !is_dir && !S_ISREG(fileinfo.st_mode)) { cupsdLogMessage(CUPSD_LOG_ERROR, "\"%s\" is not a regular file.", filename); return (-1); } if (!dir_created && is_dir && !S_ISDIR(fileinfo.st_mode)) { if (create_dir >= 0) cupsdLogMessage(CUPSD_LOG_ERROR, "\"%s\" is not a directory.", filename); else #ifdef HAVE_SYSTEMD_SD_JOURNAL_H sd_journal_print(LOG_ERR, "\"%s\" is not a directory.", filename); #else syslog(LOG_ERR, "\"%s\" is not a directory.", filename); #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ return (-1); } /* * If the filename is a symlink, do not change permissions (STR #2937)... */ if (is_symlink) return (0); /* * Fix owner, group, and mode as needed... */ if (dir_created || fileinfo.st_uid != user || fileinfo.st_gid != group) { if (create_dir >= 0) cupsdLogMessage(CUPSD_LOG_DEBUG, "Repairing ownership of \"%s\"", filename); if (chown(filename, user, group) && !getuid()) { if (create_dir >= 0) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to change ownership of \"%s\" - %s", filename, strerror(errno)); else #ifdef HAVE_SYSTEMD_SD_JOURNAL_H sd_journal_print(LOG_ERR, "Unable to change ownership of \"%s\" - %s", filename, strerror(errno)); #else syslog(LOG_ERR, "Unable to change ownership of \"%s\" - %s", filename, strerror(errno)); #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ return (1); } } if (dir_created || (fileinfo.st_mode & 07777) != mode) { if (create_dir >= 0) cupsdLogMessage(CUPSD_LOG_DEBUG, "Repairing access permissions of \"%s\"", filename); if (chmod(filename, mode)) { if (create_dir >= 0) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to change permissions of \"%s\" - %s", filename, strerror(errno)); else #ifdef HAVE_SYSTEMD_SD_JOURNAL_H sd_journal_print(LOG_ERR, "Unable to change permissions of \"%s\" - %s", filename, strerror(errno)); #else syslog(LOG_ERR, "Unable to change permissions of \"%s\" - %s", filename, strerror(errno)); #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ return (1); } } /* * Everything is OK... */ return (0); } /* * 'cupsdDefaultAuthType()' - Get the default AuthType. * * When the default_auth_type is "auto", this function tries to get the GSS * credentials for the server. If that succeeds we use Kerberos authentication, * otherwise we do a fallback to Basic authentication against the local user * accounts. */ int /* O - Default AuthType value */ cupsdDefaultAuthType(void) { #ifdef HAVE_GSSAPI OM_uint32 major_status, /* Major status code */ minor_status; /* Minor status code */ gss_name_t server_name; /* Server name */ gss_buffer_desc token = GSS_C_EMPTY_BUFFER; /* Service name token */ char buf[1024]; /* Service name buffer */ #endif /* HAVE_GSSAPI */ /* * If we have already determined the correct default AuthType, use it... */ if (default_auth_type != CUPSD_AUTH_AUTO) return (default_auth_type); #ifdef HAVE_GSSAPI # ifdef __APPLE__ /* * If the weak-linked GSSAPI/Kerberos library is not present, don't try * to use it... */ if (&gss_init_sec_context == NULL) return (default_auth_type = CUPSD_AUTH_BASIC); # endif /* __APPLE__ */ /* * Try to obtain the server's GSS credentials (GSSServiceName@servername). If * that fails we must use Basic... */ snprintf(buf, sizeof(buf), "%s@%s", GSSServiceName, ServerName); token.value = buf; token.length = strlen(buf); server_name = GSS_C_NO_NAME; major_status = gss_import_name(&minor_status, &token, GSS_C_NT_HOSTBASED_SERVICE, &server_name); memset(&token, 0, sizeof(token)); if (GSS_ERROR(major_status)) { cupsdLogGSSMessage(CUPSD_LOG_DEBUG, major_status, minor_status, "cupsdDefaultAuthType: gss_import_name(%s) failed", buf); return (default_auth_type = CUPSD_AUTH_BASIC); } major_status = gss_display_name(&minor_status, server_name, &token, NULL); if (GSS_ERROR(major_status)) { cupsdLogGSSMessage(CUPSD_LOG_DEBUG, major_status, minor_status, "cupsdDefaultAuthType: gss_display_name(%s) failed", buf); return (default_auth_type = CUPSD_AUTH_BASIC); } cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdDefaultAuthType: Attempting to acquire Kerberos " "credentials for %s...", (char *)token.value); ServerCreds = GSS_C_NO_CREDENTIAL; major_status = gss_acquire_cred(&minor_status, server_name, GSS_C_INDEFINITE, GSS_C_NO_OID_SET, GSS_C_ACCEPT, &ServerCreds, NULL, NULL); if (GSS_ERROR(major_status)) { cupsdLogGSSMessage(CUPSD_LOG_DEBUG, major_status, minor_status, "cupsdDefaultAuthType: gss_acquire_cred(%s) failed", (char *)token.value); gss_release_name(&minor_status, &server_name); gss_release_buffer(&minor_status, &token); return (default_auth_type = CUPSD_AUTH_BASIC); } cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdDefaultAuthType: Kerberos credentials acquired " "successfully for %s.", (char *)token.value); gss_release_name(&minor_status, &server_name); gss_release_buffer(&minor_status, &token); HaveServerCreds = 1; return (default_auth_type = CUPSD_AUTH_NEGOTIATE); #else /* * No Kerberos support compiled in so just use Basic all the time... */ return (default_auth_type = CUPSD_AUTH_BASIC); #endif /* HAVE_GSSAPI */ } /* * 'cupsdFreeAliases()' - Free all of the alias entries. */ void cupsdFreeAliases(cups_array_t *aliases) /* I - Array of aliases */ { cupsd_alias_t *a; /* Current alias */ for (a = (cupsd_alias_t *)cupsArrayFirst(aliases); a; a = (cupsd_alias_t *)cupsArrayNext(aliases)) free(a); cupsArrayDelete(aliases); } /* * 'cupsdReadConfiguration()' - Read the cupsd.conf file. */ int /* O - 1 on success, 0 otherwise */ cupsdReadConfiguration(void) { int i; /* Looping var */ cups_file_t *fp; /* Configuration file */ int status; /* Return status */ char temp[1024], /* Temporary buffer */ mimedir[1024], /* MIME directory */ *slash; /* Directory separator */ cups_lang_t *language; /* Language */ struct passwd *user; /* Default user */ struct group *group; /* Default group */ char *old_serverroot, /* Old ServerRoot */ *old_requestroot; /* Old RequestRoot */ int old_remote_port; /* Old RemotePort */ const char *tmpdir; /* TMPDIR environment variable */ struct stat tmpinfo; /* Temporary directory info */ cupsd_policy_t *p; /* Policy */ /* * Save the old root paths... */ old_serverroot = NULL; cupsdSetString(&old_serverroot, ServerRoot); old_requestroot = NULL; cupsdSetString(&old_requestroot, RequestRoot); /* * Reset the server configuration data... */ cupsdDeleteAllLocations(); cupsdDeleteAllListeners(); old_remote_port = RemotePort; RemotePort = 0; /* * String options... */ cupsdFreeAliases(ServerAlias); ServerAlias = NULL; cupsdClearString(&ServerName); cupsdClearString(&ServerAdmin); cupsdSetString(&ServerBin, CUPS_SERVERBIN); cupsdSetString(&RequestRoot, CUPS_REQUESTS); cupsdSetString(&CacheDir, CUPS_CACHEDIR); cupsdSetString(&DataDir, CUPS_DATADIR); cupsdSetString(&DocumentRoot, CUPS_DOCROOT); cupsdSetString(&AccessLog, CUPS_LOGDIR "/access_log"); cupsdClearString(&ErrorLog); cupsdSetString(&PageLog, CUPS_LOGDIR "/page_log"); cupsdSetString(&PageLogFormat, "%p %u %j %T %P %C %{job-billing} " "%{job-originating-host-name} %{job-name} %{media} %{sides}"); cupsdSetString(&Printcap, CUPS_DEFAULT_PRINTCAP); cupsdSetString(&FontPath, CUPS_FONTPATH); cupsdSetString(&RemoteRoot, "remroot"); cupsdSetStringf(&ServerHeader, "CUPS/%d.%d IPP/2.1", CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR); cupsdSetString(&StateDir, CUPS_STATEDIR); if (!strcmp(CUPS_DEFAULT_PRINTCAP, "/etc/printers.conf")) PrintcapFormat = PRINTCAP_SOLARIS; else if (!strcmp(CUPS_DEFAULT_PRINTCAP, "/Library/Preferences/org.cups.printers.plist")) PrintcapFormat = PRINTCAP_PLIST; else PrintcapFormat = PRINTCAP_BSD; strlcpy(temp, ConfigurationFile, sizeof(temp)); if ((slash = strrchr(temp, '/')) != NULL) *slash = '\0'; cupsdSetString(&ServerRoot, temp); cupsdClearString(&Classification); ClassifyOverride = 0; #ifdef HAVE_SSL # ifdef HAVE_GNUTLS cupsdSetString(&ServerKeychain, "ssl"); # else cupsdSetString(&ServerKeychain, "/Library/Keychains/System.keychain"); # endif /* HAVE_GNUTLS */ _httpTLSSetOptions(_HTTP_TLS_NONE, _HTTP_TLS_1_0, _HTTP_TLS_MAX); #endif /* HAVE_SSL */ language = cupsLangDefault(); if (!strcmp(language->language, "C") || !strcmp(language->language, "POSIX")) cupsdSetString(&DefaultLanguage, "en"); else cupsdSetString(&DefaultLanguage, language->language); cupsdClearString(&DefaultPaperSize); cupsdSetString(&RIPCache, "128m"); cupsdSetString(&TempDir, NULL); #ifdef HAVE_GSSAPI cupsdSetString(&GSSServiceName, CUPS_DEFAULT_GSSSERVICENAME); if (HaveServerCreds) { OM_uint32 minor_status; /* Minor status code */ gss_release_cred(&minor_status, &ServerCreds); HaveServerCreds = 0; } ServerCreds = GSS_C_NO_CREDENTIAL; #endif /* HAVE_GSSAPI */ /* * Find the default user... */ if ((user = getpwnam(CUPS_DEFAULT_USER)) != NULL) User = user->pw_uid; else { /* * Use the (historical) NFS nobody user ID (-2 as a 16-bit twos- * complement number...) */ User = 65534; } endpwent(); /* * Find the default group... */ group = getgrnam(CUPS_DEFAULT_GROUP); endgrent(); if (group) Group = group->gr_gid; else { /* * Fallback to group "nobody"... */ group = getgrnam("nobody"); endgrent(); if (group) Group = group->gr_gid; else { /* * Use the (historical) NFS nobody group ID (-2 as a 16-bit twos- * complement number...) */ Group = 65534; } } /* * Numeric options... */ AccessLogLevel = CUPSD_ACCESSLOG_ACTIONS; ConfigFilePerm = CUPS_DEFAULT_CONFIG_FILE_PERM; FatalErrors = parse_fatal_errors(CUPS_DEFAULT_FATAL_ERRORS); default_auth_type = CUPSD_AUTH_BASIC; #ifdef HAVE_SSL CreateSelfSignedCerts = TRUE; DefaultEncryption = HTTP_ENCRYPT_REQUIRED; #endif /* HAVE_SSL */ DirtyCleanInterval = DEFAULT_KEEPALIVE; JobKillDelay = DEFAULT_TIMEOUT; JobRetryLimit = 5; JobRetryInterval = 300; FileDevice = FALSE; FilterLevel = 0; FilterLimit = 0; FilterNice = 0; HostNameLookups = FALSE; KeepAlive = TRUE; KeepAliveTimeout = DEFAULT_KEEPALIVE; ListenBackLog = SOMAXCONN; LogDebugHistory = 200; LogFilePerm = CUPS_DEFAULT_LOG_FILE_PERM; LogLevel = CUPSD_LOG_WARN; LogTimeFormat = CUPSD_TIME_STANDARD; MaxClients = 100; MaxClientsPerHost = 0; MaxLogSize = 1024 * 1024; MaxRequestSize = 0; MultipleOperationTimeout = DEFAULT_TIMEOUT; NumSystemGroups = 0; ReloadTimeout = DEFAULT_KEEPALIVE; RootCertDuration = 300; Sandboxing = CUPSD_SANDBOXING_STRICT; StrictConformance = FALSE; SyncOnClose = FALSE; Timeout = DEFAULT_TIMEOUT; WebInterface = CUPS_DEFAULT_WEBIF; BrowseLocalProtocols = parse_protocols(CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS); BrowseWebIF = FALSE; Browsing = CUPS_DEFAULT_BROWSING; DefaultShared = CUPS_DEFAULT_DEFAULT_SHARED; #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) cupsdSetString(&DNSSDSubTypes, "_cups,_print"); #endif /* HAVE_DNSSD || HAVE_AVAHI */ cupsdSetString(&LPDConfigFile, CUPS_DEFAULT_LPD_CONFIG_FILE); cupsdSetString(&SMBConfigFile, CUPS_DEFAULT_SMB_CONFIG_FILE); cupsdSetString(&ErrorPolicy, "stop-printer"); JobHistory = DEFAULT_HISTORY; JobFiles = DEFAULT_FILES; JobAutoPurge = 0; MaxHoldTime = 0; MaxJobs = 500; MaxActiveJobs = 0; MaxJobsPerUser = 0; MaxJobsPerPrinter = 0; MaxJobTime = 3 * 60 * 60; /* 3 hours */ MaxCopies = CUPS_DEFAULT_MAX_COPIES; cupsdDeleteAllPolicies(); cupsdClearString(&DefaultPolicy); #ifdef HAVE_AUTHORIZATION_H cupsdSetString(&SystemGroupAuthKey, CUPS_DEFAULT_SYSTEM_AUTHKEY); #endif /* HAVE_AUTHORIZATION_H */ MaxSubscriptions = 100; MaxSubscriptionsPerJob = 0; MaxSubscriptionsPerPrinter = 0; MaxSubscriptionsPerUser = 0; DefaultLeaseDuration = 86400; MaxLeaseDuration = 0; #ifdef HAVE_ONDEMAND IdleExitTimeout = 60; #endif /* HAVE_ONDEMAND */ /* * Setup environment variables... */ cupsdInitEnv(); /* * Read the cups-files.conf file... */ if ((fp = cupsFileOpen(CupsFilesFile, "r")) != NULL) { status = read_cups_files_conf(fp); cupsFileClose(fp); if (!status) { if (TestConfigFile) printf("\"%s\" contains errors.\n", CupsFilesFile); else #ifdef HAVE_SYSTEMD_SD_JOURNAL_H sd_journal_print(LOG_ERR, "Unable to read \"%s\" due to errors.", CupsFilesFile); #else syslog(LOG_LPR, "Unable to read \"%s\" due to errors.", CupsFilesFile); #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ return (0); } } else if (errno == ENOENT) cupsdLogMessage(CUPSD_LOG_INFO, "No %s, using defaults.", CupsFilesFile); else { #ifdef HAVE_SYSTEMD_SD_JOURNAL_H sd_journal_print(LOG_ERR, "Unable to open \"%s\" - %s", CupsFilesFile, strerror(errno)); #else syslog(LOG_LPR, "Unable to open \"%s\" - %s", CupsFilesFile, strerror(errno)); #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ return (0); } if (!ErrorLog) cupsdSetString(&ErrorLog, CUPS_LOGDIR "/error_log"); /* * Read the cupsd.conf file... */ if ((fp = cupsFileOpen(ConfigurationFile, "r")) == NULL) { #ifdef HAVE_SYSTEMD_SD_JOURNAL_H sd_journal_print(LOG_ERR, "Unable to open \"%s\" - %s", ConfigurationFile, strerror(errno)); #else syslog(LOG_LPR, "Unable to open \"%s\" - %s", ConfigurationFile, strerror(errno)); #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ return (0); } status = read_cupsd_conf(fp); cupsFileClose(fp); if (!status) { if (TestConfigFile) printf("\"%s\" contains errors.\n", ConfigurationFile); else #ifdef HAVE_SYSTEMD_SD_JOURNAL_H sd_journal_print(LOG_ERR, "Unable to read \"%s\" due to errors.", ConfigurationFile); #else syslog(LOG_LPR, "Unable to read \"%s\" due to errors.", ConfigurationFile); #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ return (0); } RunUser = getuid(); cupsdLogMessage(CUPSD_LOG_INFO, "Remote access is %s.", RemotePort ? "enabled" : "disabled"); if (!RemotePort) BrowseLocalProtocols = 0; /* Disable sharing - no remote access */ /* * See if the ServerName is an IP address... */ if (ServerName) { if (!ServerAlias) ServerAlias = cupsArrayNew(NULL, NULL); cupsdAddAlias(ServerAlias, ServerName); cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", ServerName); } else { if (gethostname(temp, sizeof(temp))) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to get hostname: %s", strerror(errno)); strlcpy(temp, "localhost", sizeof(temp)); } cupsdSetString(&ServerName, temp); if (!ServerAlias) ServerAlias = cupsArrayNew(NULL, NULL); cupsdAddAlias(ServerAlias, temp); cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", temp); if (HostNameLookups || RemotePort) { struct hostent *host; /* Host entry to get FQDN */ if ((host = gethostbyname(temp)) != NULL) { if (_cups_strcasecmp(temp, host->h_name)) { cupsdSetString(&ServerName, host->h_name); cupsdAddAlias(ServerAlias, host->h_name); cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", host->h_name); } if (host->h_aliases) { for (i = 0; host->h_aliases[i]; i ++) if (_cups_strcasecmp(temp, host->h_aliases[i])) { cupsdAddAlias(ServerAlias, host->h_aliases[i]); cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", host->h_aliases[i]); } } } } /* * Make sure we have the base hostname added as an alias, too! */ if ((slash = strchr(temp, '.')) != NULL) { *slash = '\0'; cupsdAddAlias(ServerAlias, temp); cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", temp); } } for (slash = ServerName; isdigit(*slash & 255) || *slash == '.'; slash ++); ServerNameIsIP = !*slash; /* * Make sure ServerAdmin is initialized... */ if (!ServerAdmin) cupsdSetStringf(&ServerAdmin, "root@%s", ServerName); /* * Use the default system group if none was supplied in cupsd.conf... */ if (NumSystemGroups == 0) { if (!parse_groups(CUPS_DEFAULT_SYSTEM_GROUPS, 0)) { /* * Find the group associated with GID 0... */ group = getgrgid(0); endgrent(); if (group != NULL) cupsdSetString(&SystemGroups[0], group->gr_name); else cupsdSetString(&SystemGroups[0], "unknown"); SystemGroupIDs[0] = 0; NumSystemGroups = 1; } } /* * Make sure ConfigFilePerm and LogFilePerm have sane values... */ ConfigFilePerm &= 0664; LogFilePerm &= 0664; /* * Open the system log for cupsd if necessary... */ if (!LogStderr) { if (!strcmp(AccessLog, "stderr")) cupsdSetString(&AccessLog, "syslog"); if (!strcmp(ErrorLog, "stderr")) cupsdSetString(&ErrorLog, "syslog"); if (!strcmp(PageLog, "stderr")) cupsdSetString(&PageLog, "syslog"); } #if defined(HAVE_VSYSLOG) && !defined(HAVE_ASL_H) && !defined(HAVE_SYSTEMD_SD_JOURNAL_H) if (!strcmp(AccessLog, "syslog") || !strcmp(ErrorLog, "syslog") || !strcmp(PageLog, "syslog")) openlog("cupsd", LOG_PID | LOG_NOWAIT | LOG_NDELAY, LOG_LPR); #endif /* HAVE_VSYSLOG && !HAVE_ASL_H && !HAVE_SYSTEMD_SD_JOURNAL_H */ /* * Log the configuration file that was used... */ cupsdLogMessage(CUPSD_LOG_INFO, "Loaded configuration file \"%s\"", ConfigurationFile); /* * Validate the Group and SystemGroup settings - they cannot be the same, * otherwise the CGI programs will be able to authenticate as root without * a password! */ if (!RunUser) { for (i = 0; i < NumSystemGroups; i ++) if (Group == SystemGroupIDs[i]) break; if (i < NumSystemGroups) { /* * Log the error and reset the group to a safe value... */ cupsdLogMessage(CUPSD_LOG_ERROR, "Group and SystemGroup cannot use the same groups."); if (FatalErrors & (CUPSD_FATAL_CONFIG | CUPSD_FATAL_PERMISSIONS)) return (0); cupsdLogMessage(CUPSD_LOG_INFO, "Resetting Group to \"nobody\"..."); group = getgrnam("nobody"); endgrent(); if (group != NULL) Group = group->gr_gid; else { /* * Use the (historical) NFS nobody group ID (-2 as a 16-bit twos- * complement number...) */ Group = 65534; } } } /* * Check that we have at least one listen/port line; if not, report this * as an error and exit! */ if (cupsArrayCount(Listeners) == 0) { /* * No listeners! */ cupsdLogMessage(CUPSD_LOG_EMERG, "No valid Listen or Port lines were found in the " "configuration file."); /* * Commit suicide... */ cupsdEndProcess(getpid(), 0); } /* * Set the default locale using the language and charset... */ cupsdSetStringf(&DefaultLocale, "%s.UTF-8", DefaultLanguage); /* * Update all relative filenames to include the full path from ServerRoot... */ if (DocumentRoot[0] != '/') cupsdSetStringf(&DocumentRoot, "%s/%s", ServerRoot, DocumentRoot); if (RequestRoot[0] != '/') cupsdSetStringf(&RequestRoot, "%s/%s", ServerRoot, RequestRoot); if (ServerBin[0] != '/') cupsdSetStringf(&ServerBin, "%s/%s", ServerRoot, ServerBin); if (StateDir[0] != '/') cupsdSetStringf(&StateDir, "%s/%s", ServerRoot, StateDir); if (CacheDir[0] != '/') cupsdSetStringf(&CacheDir, "%s/%s", ServerRoot, CacheDir); #ifdef HAVE_SSL if (!_cups_strcasecmp(ServerKeychain, "internal")) cupsdClearString(&ServerKeychain); else if (ServerKeychain[0] != '/') cupsdSetStringf(&ServerKeychain, "%s/%s", ServerRoot, ServerKeychain); cupsdLogMessage(CUPSD_LOG_DEBUG, "Using keychain \"%s\" for server name \"%s\".", ServerKeychain ? ServerKeychain : "internal", ServerName); if (!CreateSelfSignedCerts) cupsdLogMessage(CUPSD_LOG_DEBUG, "Self-signed TLS certificate generation is disabled."); cupsSetServerCredentials(ServerKeychain, ServerName, CreateSelfSignedCerts); #endif /* HAVE_SSL */ /* * Make sure that directories and config files are owned and * writable by the user and group in the cupsd.conf file... */ snprintf(temp, sizeof(temp), "%s/rss", CacheDir); if ((cupsdCheckPermissions(RequestRoot, NULL, 0710, RunUser, Group, 1, 1) < 0 || cupsdCheckPermissions(CacheDir, NULL, 0770, RunUser, Group, 1, 1) < 0 || cupsdCheckPermissions(temp, NULL, 0775, RunUser, Group, 1, 1) < 0 || cupsdCheckPermissions(StateDir, NULL, 0755, RunUser, Group, 1, 1) < 0 || cupsdCheckPermissions(StateDir, "certs", RunUser ? 0711 : 0511, User, SystemGroupIDs[0], 1, 1) < 0 || cupsdCheckPermissions(ServerRoot, NULL, 0755, RunUser, Group, 1, 0) < 0 || cupsdCheckPermissions(ServerRoot, "ppd", 0755, RunUser, Group, 1, 1) < 0 || cupsdCheckPermissions(ServerRoot, "ssl", 0700, RunUser, Group, 1, 0) < 0 || cupsdCheckPermissions(ConfigurationFile, NULL, ConfigFilePerm, RunUser, Group, 0, 0) < 0 || cupsdCheckPermissions(CupsFilesFile, NULL, ConfigFilePerm, RunUser, Group, 0, 0) < 0 || cupsdCheckPermissions(ServerRoot, "classes.conf", 0600, RunUser, Group, 0, 0) < 0 || cupsdCheckPermissions(ServerRoot, "printers.conf", 0600, RunUser, Group, 0, 0) < 0 || cupsdCheckPermissions(ServerRoot, "passwd.md5", 0600, User, Group, 0, 0) < 0) && (FatalErrors & CUPSD_FATAL_PERMISSIONS)) return (0); /* * Update TempDir to the default if it hasn't been set already... */ #ifdef __APPLE__ if (TempDir && !RunUser && (!strncmp(TempDir, "/private/tmp", 12) || !strncmp(TempDir, "/tmp", 4))) { cupsdLogMessage(CUPSD_LOG_ERROR, "Cannot use %s for TempDir.", TempDir); cupsdClearString(&TempDir); } #endif /* __APPLE__ */ if (!TempDir) { #ifdef __APPLE__ if ((tmpdir = getenv("TMPDIR")) != NULL && strncmp(tmpdir, "/private/tmp", 12) && strncmp(tmpdir, "/tmp", 4)) #else if ((tmpdir = getenv("TMPDIR")) != NULL) #endif /* __APPLE__ */ { /* * TMPDIR is defined, see if it is OK for us to use... */ if (stat(tmpdir, &tmpinfo)) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to access TMPDIR (%s): %s", tmpdir, strerror(errno)); else if (!S_ISDIR(tmpinfo.st_mode)) cupsdLogMessage(CUPSD_LOG_ERROR, "TMPDIR (%s) is not a directory.", tmpdir); else if ((tmpinfo.st_uid != User || !(tmpinfo.st_mode & S_IWUSR)) && (tmpinfo.st_gid != Group || !(tmpinfo.st_mode & S_IWGRP)) && !(tmpinfo.st_mode & S_IWOTH)) cupsdLogMessage(CUPSD_LOG_ERROR, "TMPDIR (%s) has the wrong permissions.", tmpdir); else cupsdSetString(&TempDir, tmpdir); } } if (!TempDir) { cupsdLogMessage(CUPSD_LOG_INFO, "Using default TempDir of %s/tmp...", RequestRoot); cupsdSetStringf(&TempDir, "%s/tmp", RequestRoot); } setenv("TMPDIR", TempDir, 1); /* * Make sure the temporary directory has the right permissions... */ if (!strncmp(TempDir, RequestRoot, strlen(RequestRoot)) || access(TempDir, 0)) { /* * Update ownership and permissions if the CUPS temp directory * is under the spool directory or does not exist... */ if (cupsdCheckPermissions(TempDir, NULL, 01770, RunUser, Group, 1, 1) < 0 && (FatalErrors & CUPSD_FATAL_PERMISSIONS)) return (0); } /* * Update environment variables... */ cupsdUpdateEnv(); /* * Validate the default error policy... */ if (strcmp(ErrorPolicy, "retry-current-job") && strcmp(ErrorPolicy, "abort-job") && strcmp(ErrorPolicy, "retry-job") && strcmp(ErrorPolicy, "stop-printer")) { cupsdLogMessage(CUPSD_LOG_ALERT, "Invalid ErrorPolicy \"%s\", resetting to \"stop-printer\".", ErrorPolicy); cupsdSetString(&ErrorPolicy, "stop-printer"); } /* * Update default paper size setting as needed... */ if (!DefaultPaperSize) { #ifdef HAVE_LIBPAPER char *paper_result; /* Paper size name from libpaper */ if ((paper_result = systempapername()) != NULL) cupsdSetString(&DefaultPaperSize, paper_result); else #endif /* HAVE_LIBPAPER */ if (!DefaultLanguage || !_cups_strcasecmp(DefaultLanguage, "C") || !_cups_strcasecmp(DefaultLanguage, "POSIX") || !_cups_strcasecmp(DefaultLanguage, "en") || !_cups_strncasecmp(DefaultLanguage, "en.", 3) || !_cups_strncasecmp(DefaultLanguage, "en_US", 5) || !_cups_strncasecmp(DefaultLanguage, "en_CA", 5) || !_cups_strncasecmp(DefaultLanguage, "fr_CA", 5)) { /* * These are the only locales that will default to "letter" size... */ cupsdSetString(&DefaultPaperSize, "Letter"); } else cupsdSetString(&DefaultPaperSize, "A4"); } /* * Update classification setting as needed... */ if (Classification && !_cups_strcasecmp(Classification, "none")) cupsdClearString(&Classification); if (Classification) cupsdLogMessage(CUPSD_LOG_INFO, "Security set to \"%s\"", Classification); /* * Check the MaxClients setting, and then allocate memory for it... */ if (MaxClients > (MaxFDs / 3) || MaxClients <= 0) { if (MaxClients > 0) cupsdLogMessage(CUPSD_LOG_INFO, "MaxClients limited to 1/3 (%d) of the file descriptor " "limit (%d)...", MaxFDs / 3, MaxFDs); MaxClients = MaxFDs / 3; } cupsdLogMessage(CUPSD_LOG_INFO, "Configured for up to %d clients.", MaxClients); /* * Check the MaxActiveJobs setting; limit to 1/3 the available * file descriptors, since we need a pipe for each job... */ if (MaxActiveJobs > (MaxFDs / 3)) MaxActiveJobs = MaxFDs / 3; /* * Update the MaxClientsPerHost value, as needed... */ if (MaxClientsPerHost <= 0) MaxClientsPerHost = MaxClients; if (MaxClientsPerHost > MaxClients) MaxClientsPerHost = MaxClients; cupsdLogMessage(CUPSD_LOG_INFO, "Allowing up to %d client connections per host.", MaxClientsPerHost); /* * Update the default policy, as needed... */ if (DefaultPolicy) DefaultPolicyPtr = cupsdFindPolicy(DefaultPolicy); else DefaultPolicyPtr = NULL; if (!DefaultPolicyPtr) { cupsd_location_t *po; /* New policy operation */ if (DefaultPolicy) cupsdLogMessage(CUPSD_LOG_ERROR, "Default policy \"%s\" not found.", DefaultPolicy); cupsdSetString(&DefaultPolicy, "default"); if ((DefaultPolicyPtr = cupsdFindPolicy("default")) != NULL) cupsdLogMessage(CUPSD_LOG_INFO, "Using policy \"default\" as the default."); else { cupsdLogMessage(CUPSD_LOG_INFO, "Creating CUPS default administrative policy:"); DefaultPolicyPtr = p = cupsdAddPolicy("default"); cupsdLogMessage(CUPSD_LOG_INFO, ""); cupsdLogMessage(CUPSD_LOG_INFO, "JobPrivateAccess default"); cupsdAddString(&(p->job_access), "@OWNER"); cupsdAddString(&(p->job_access), "@SYSTEM"); cupsdLogMessage(CUPSD_LOG_INFO, "JobPrivateValues default"); cupsdAddString(&(p->job_attrs), "job-name"); cupsdAddString(&(p->job_attrs), "job-originating-host-name"); cupsdAddString(&(p->job_attrs), "job-originating-user-name"); cupsdAddString(&(p->job_attrs), "phone"); cupsdLogMessage(CUPSD_LOG_INFO, "SubscriptionPrivateAccess default"); cupsdAddString(&(p->sub_access), "@OWNER"); cupsdAddString(&(p->sub_access), "@SYSTEM"); cupsdLogMessage(CUPSD_LOG_INFO, "SubscriptionPrivateValues default"); cupsdAddString(&(p->job_attrs), "notify-events"); cupsdAddString(&(p->job_attrs), "notify-pull-method"); cupsdAddString(&(p->job_attrs), "notify-recipient-uri"); cupsdAddString(&(p->job_attrs), "notify-subscriber-user-name"); cupsdAddString(&(p->job_attrs), "notify-user-data"); cupsdLogMessage(CUPSD_LOG_INFO, ""); cupsdLogMessage(CUPSD_LOG_INFO, "Order Deny,Allow"); po = cupsdAddPolicyOp(p, NULL, IPP_CREATE_JOB); po->order_type = CUPSD_AUTH_ALLOW; cupsdAddPolicyOp(p, po, IPP_PRINT_JOB); cupsdAddPolicyOp(p, po, IPP_PRINT_URI); cupsdAddPolicyOp(p, po, IPP_VALIDATE_JOB); cupsdLogMessage(CUPSD_LOG_INFO, ""); cupsdLogMessage(CUPSD_LOG_INFO, ""); cupsdLogMessage(CUPSD_LOG_INFO, "Order Deny,Allow"); po = cupsdAddPolicyOp(p, NULL, IPP_SEND_DOCUMENT); po->order_type = CUPSD_AUTH_ALLOW; po->level = CUPSD_AUTH_USER; cupsdAddName(po, "@OWNER"); cupsdAddName(po, "@SYSTEM"); cupsdLogMessage(CUPSD_LOG_INFO, "Require user @OWNER @SYSTEM"); cupsdAddPolicyOp(p, po, IPP_SEND_URI); cupsdAddPolicyOp(p, po, IPP_CANCEL_JOB); cupsdAddPolicyOp(p, po, IPP_HOLD_JOB); cupsdAddPolicyOp(p, po, IPP_RELEASE_JOB); cupsdAddPolicyOp(p, po, IPP_RESTART_JOB); cupsdAddPolicyOp(p, po, IPP_PURGE_JOBS); cupsdAddPolicyOp(p, po, IPP_SET_JOB_ATTRIBUTES); cupsdAddPolicyOp(p, po, IPP_CREATE_JOB_SUBSCRIPTION); cupsdAddPolicyOp(p, po, IPP_RENEW_SUBSCRIPTION); cupsdAddPolicyOp(p, po, IPP_CANCEL_SUBSCRIPTION); cupsdAddPolicyOp(p, po, IPP_GET_NOTIFICATIONS); cupsdAddPolicyOp(p, po, IPP_REPROCESS_JOB); cupsdAddPolicyOp(p, po, IPP_CANCEL_CURRENT_JOB); cupsdAddPolicyOp(p, po, IPP_SUSPEND_CURRENT_JOB); cupsdAddPolicyOp(p, po, IPP_RESUME_JOB); cupsdAddPolicyOp(p, po, IPP_CANCEL_MY_JOBS); cupsdAddPolicyOp(p, po, IPP_CLOSE_JOB); cupsdAddPolicyOp(p, po, CUPS_MOVE_JOB); cupsdAddPolicyOp(p, po, CUPS_AUTHENTICATE_JOB); cupsdAddPolicyOp(p, po, CUPS_GET_DOCUMENT); cupsdLogMessage(CUPSD_LOG_INFO, ""); cupsdLogMessage(CUPSD_LOG_INFO, ""); cupsdLogMessage(CUPSD_LOG_INFO, "Order Deny,Allow"); cupsdLogMessage(CUPSD_LOG_INFO, "AuthType Default"); po = cupsdAddPolicyOp(p, NULL, IPP_PAUSE_PRINTER); po->order_type = CUPSD_AUTH_ALLOW; po->type = CUPSD_AUTH_DEFAULT; po->level = CUPSD_AUTH_USER; cupsdAddName(po, "@SYSTEM"); cupsdLogMessage(CUPSD_LOG_INFO, "Require user @SYSTEM"); cupsdAddPolicyOp(p, po, IPP_RESUME_PRINTER); cupsdAddPolicyOp(p, po, IPP_SET_PRINTER_ATTRIBUTES); cupsdAddPolicyOp(p, po, IPP_ENABLE_PRINTER); cupsdAddPolicyOp(p, po, IPP_DISABLE_PRINTER); cupsdAddPolicyOp(p, po, IPP_PAUSE_PRINTER_AFTER_CURRENT_JOB); cupsdAddPolicyOp(p, po, IPP_HOLD_NEW_JOBS); cupsdAddPolicyOp(p, po, IPP_RELEASE_HELD_NEW_JOBS); cupsdAddPolicyOp(p, po, IPP_DEACTIVATE_PRINTER); cupsdAddPolicyOp(p, po, IPP_ACTIVATE_PRINTER); cupsdAddPolicyOp(p, po, IPP_RESTART_PRINTER); cupsdAddPolicyOp(p, po, IPP_SHUTDOWN_PRINTER); cupsdAddPolicyOp(p, po, IPP_STARTUP_PRINTER); cupsdAddPolicyOp(p, po, IPP_PROMOTE_JOB); cupsdAddPolicyOp(p, po, IPP_SCHEDULE_JOB_AFTER); cupsdAddPolicyOp(p, po, IPP_CANCEL_JOBS); cupsdAddPolicyOp(p, po, CUPS_ADD_PRINTER); cupsdAddPolicyOp(p, po, CUPS_DELETE_PRINTER); cupsdAddPolicyOp(p, po, CUPS_ADD_CLASS); cupsdAddPolicyOp(p, po, CUPS_DELETE_CLASS); cupsdAddPolicyOp(p, po, CUPS_ACCEPT_JOBS); cupsdAddPolicyOp(p, po, CUPS_REJECT_JOBS); cupsdAddPolicyOp(p, po, CUPS_SET_DEFAULT); cupsdLogMessage(CUPSD_LOG_INFO, ""); cupsdLogMessage(CUPSD_LOG_INFO, ""); cupsdLogMessage(CUPSD_LOG_INFO, "Order Deny,Allow"); po = cupsdAddPolicyOp(p, NULL, IPP_ANY_OPERATION); po->order_type = CUPSD_AUTH_ALLOW; cupsdLogMessage(CUPSD_LOG_INFO, ""); cupsdLogMessage(CUPSD_LOG_INFO, ""); } } cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: NumPolicies=%d", cupsArrayCount(Policies)); for (i = 0, p = (cupsd_policy_t *)cupsArrayFirst(Policies); p; i ++, p = (cupsd_policy_t *)cupsArrayNext(Policies)) cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: Policies[%d]=\"%s\"", i, p->name); /* * If we are doing a full reload or the server root has changed, flush * the jobs, printers, etc. and start from scratch... */ if (NeedReload == RELOAD_ALL || old_remote_port != RemotePort || !old_serverroot || !ServerRoot || strcmp(old_serverroot, ServerRoot) || !old_requestroot || !RequestRoot || strcmp(old_requestroot, RequestRoot)) { mime_type_t *type; /* Current type */ char mimetype[MIME_MAX_SUPER + MIME_MAX_TYPE]; /* MIME type name */ cupsdLogMessage(CUPSD_LOG_INFO, "Full reload is required."); /* * Free all memory... */ cupsdDeleteAllSubscriptions(); cupsdFreeAllJobs(); cupsdDeleteAllPrinters(); DefaultPrinter = NULL; if (MimeDatabase != NULL) mimeDelete(MimeDatabase); if (NumMimeTypes) { for (i = 0; i < NumMimeTypes; i ++) _cupsStrFree(MimeTypes[i]); free(MimeTypes); } /* * Read the MIME type and conversion database... */ snprintf(temp, sizeof(temp), "%s/filter", ServerBin); snprintf(mimedir, sizeof(mimedir), "%s/mime", DataDir); MimeDatabase = mimeNew(); mimeSetErrorCallback(MimeDatabase, mime_error_cb, NULL); MimeDatabase = mimeLoadTypes(MimeDatabase, mimedir); MimeDatabase = mimeLoadTypes(MimeDatabase, ServerRoot); MimeDatabase = mimeLoadFilters(MimeDatabase, mimedir, temp); MimeDatabase = mimeLoadFilters(MimeDatabase, ServerRoot, temp); if (!MimeDatabase) { cupsdLogMessage(CUPSD_LOG_EMERG, "Unable to load MIME database from \"%s\" or \"%s\".", mimedir, ServerRoot); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } cupsdLogMessage(CUPSD_LOG_INFO, "Loaded MIME database from \"%s\" and \"%s\": %d types, " "%d filters...", mimedir, ServerRoot, mimeNumTypes(MimeDatabase), mimeNumFilters(MimeDatabase)); /* * Create a list of MIME types for the document-format-supported * attribute... */ NumMimeTypes = mimeNumTypes(MimeDatabase); if (!mimeType(MimeDatabase, "application", "octet-stream")) NumMimeTypes ++; if ((MimeTypes = calloc((size_t)NumMimeTypes, sizeof(const char *))) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for %d MIME types.", NumMimeTypes); NumMimeTypes = 0; } else { for (i = 0, type = mimeFirstType(MimeDatabase); type; i ++, type = mimeNextType(MimeDatabase)) { snprintf(mimetype, sizeof(mimetype), "%s/%s", type->super, type->type); MimeTypes[i] = _cupsStrAlloc(mimetype); } if (i < NumMimeTypes) MimeTypes[i] = _cupsStrAlloc("application/octet-stream"); } if (LogLevel == CUPSD_LOG_DEBUG2) { mime_filter_t *filter; /* Current filter */ for (type = mimeFirstType(MimeDatabase); type; type = mimeNextType(MimeDatabase)) cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: type %s/%s", type->super, type->type); for (filter = mimeFirstFilter(MimeDatabase); filter; filter = mimeNextFilter(MimeDatabase)) cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadConfiguration: filter %s/%s to %s/%s %d %s", filter->src->super, filter->src->type, filter->dst->super, filter->dst->type, filter->cost, filter->filter); } /* * Load banners... */ snprintf(temp, sizeof(temp), "%s/banners", DataDir); cupsdLoadBanners(temp); /* * Load printers and classes... */ cupsdLoadAllPrinters(); cupsdLoadAllClasses(); cupsdCreateCommonData(); /* * Update the printcap file as needed... */ if (Printcap && *Printcap && access(Printcap, 0)) cupsdWritePrintcap(); /* * Load queued jobs... */ cupsdLoadAllJobs(); /* * Load subscriptions... */ cupsdLoadAllSubscriptions(); cupsdLogMessage(CUPSD_LOG_INFO, "Full reload complete."); } else { /* * Not a full reload, so recreate the common printer attributes... */ cupsdCreateCommonData(); /* * Update all jobs as needed... */ cupsdUpdateJobs(); /* * Update all printers as needed... */ cupsdUpdatePrinters(); cupsdMarkDirty(CUPSD_DIRTY_PRINTCAP); cupsdLogMessage(CUPSD_LOG_INFO, "Partial reload complete."); } /* * Reset the reload state... */ NeedReload = RELOAD_NONE; cupsdClearString(&old_serverroot); cupsdClearString(&old_requestroot); return (1); } /* * 'get_address()' - Get an address + port number from a line. */ static http_addrlist_t * /* O - Pointer to list if address good, NULL if bad */ get_address(const char *value, /* I - Value string */ int defport) /* I - Default port */ { char buffer[1024], /* Hostname + port number buffer */ defpname[255], /* Default port name */ *hostname, /* Hostname or IP */ *portname; /* Port number or name */ http_addrlist_t *addrlist; /* Address list */ /* * Check for an empty value... */ if (!*value) { cupsdLogMessage(CUPSD_LOG_ERROR, "Bad (empty) address."); return (NULL); } /* * Grab a hostname and port number; if there is no colon and the port name * is only digits, then we have a port number by itself... */ strlcpy(buffer, value, sizeof(buffer)); if ((portname = strrchr(buffer, ':')) != NULL && !strchr(portname, ']')) { *portname++ = '\0'; hostname = buffer; } else { for (portname = buffer; isdigit(*portname & 255); portname ++); if (*portname) { /* * Use the default port... */ sprintf(defpname, "%d", defport); portname = defpname; hostname = buffer; } else { /* * The buffer contains just a port number... */ portname = buffer; hostname = NULL; } } if (hostname && !strcmp(hostname, "*")) hostname = NULL; /* * Now lookup the address using httpAddrGetList()... */ if ((addrlist = httpAddrGetList(hostname, AF_UNSPEC, portname)) == NULL) cupsdLogMessage(CUPSD_LOG_ERROR, "Hostname lookup for \"%s\" failed.", hostname ? hostname : "(nil)"); return (addrlist); } /* * 'get_addr_and_mask()' - Get an IP address and netmask. */ static int /* O - 1 on success, 0 on failure */ get_addr_and_mask(const char *value, /* I - String from config file */ unsigned *ip, /* O - Address value */ unsigned *mask) /* O - Mask value */ { int i, j, /* Looping vars */ family, /* Address family */ ipcount; /* Count of fields in address */ unsigned ipval; /* Value */ const char *maskval, /* Pointer to start of mask value */ *ptr, /* Pointer into value */ *ptr2; /* ... */ /* * Get the address... */ ip[0] = ip[1] = ip[2] = ip[3] = 0x00000000; mask[0] = mask[1] = mask[2] = mask[3] = 0xffffffff; if ((maskval = strchr(value, '/')) != NULL) maskval ++; else maskval = value + strlen(value); #ifdef AF_INET6 /* * Check for an IPv6 address... */ if (*value == '[') { /* * Parse hexadecimal IPv6/IPv4 address... */ family = AF_INET6; for (i = 0, ptr = value + 1; *ptr && i < 8; i ++) { if (*ptr == ']') break; else if (!strncmp(ptr, "::", 2)) { for (ptr2 = strchr(ptr + 2, ':'), j = 0; ptr2; ptr2 = strchr(ptr2 + 1, ':'), j ++); i = 6 - j; ptr += 2; } else if (isdigit(*ptr & 255) && strchr(ptr + 1, '.') && i >= 6) { /* * Read IPv4 dotted quad... */ unsigned val[4] = { 0, 0, 0, 0 }; /* IPv4 address values */ ipcount = sscanf(ptr, "%u.%u.%u.%u", val + 0, val + 1, val + 2, val + 3); /* * Range check the IP numbers... */ for (i = 0; i < ipcount; i ++) if (val[i] > 255) return (0); /* * Merge everything into a 32-bit IPv4 address in ip[3]... */ ip[3] = ((((((unsigned)val[0] << 8) | (unsigned)val[1]) << 8) | (unsigned)val[2]) << 8) | (unsigned)val[3]; if (ipcount < 4) mask[3] = (0xffffffff << (32 - 8 * ipcount)) & 0xffffffff; /* * If the leading words are all 0's then this is an IPv4 address... */ if (!val[0] && !val[1] && !val[2]) family = AF_INET; while (isdigit(*ptr & 255) || *ptr == '.') ptr ++; break; } else if (isxdigit(*ptr & 255)) { ipval = strtoul(ptr, (char **)&ptr, 16); if (*ptr == ':' && ptr[1] != ':') ptr ++; if (ipval > 0xffff) return (0); if (i & 1) ip[i / 2] |= ipval; else ip[i / 2] |= ipval << 16; } else return (0); } if (*ptr != ']') return (0); ptr ++; if (*ptr && *ptr != '/') return (0); } else #endif /* AF_INET6 */ { /* * Parse dotted-decimal IPv4 address... */ unsigned val[4] = { 0, 0, 0, 0 }; /* IPv4 address values */ family = AF_INET; ipcount = sscanf(value, "%u.%u.%u.%u", val + 0, val + 1, val + 2, val + 3); /* * Range check the IP numbers... */ for (i = 0; i < ipcount; i ++) if (val[i] > 255) return (0); /* * Merge everything into a 32-bit IPv4 address in ip[3]... */ ip[3] = ((((((unsigned)val[0] << 8) | (unsigned)val[1]) << 8) | (unsigned)val[2]) << 8) | (unsigned)val[3]; if (ipcount < 4) mask[3] = (0xffffffff << (32 - 8 * ipcount)) & 0xffffffff; } if (*maskval) { /* * Get the netmask value(s)... */ memset(mask, 0, sizeof(unsigned) * 4); if (strchr(maskval, '.')) { /* * Get dotted-decimal mask... */ if (family != AF_INET) return (0); if (sscanf(maskval, "%u.%u.%u.%u", mask + 0, mask + 1, mask + 2, mask + 3) != 4) return (0); mask[3] |= (((((unsigned)mask[0] << 8) | (unsigned)mask[1]) << 8) | (unsigned)mask[2]) << 8; mask[0] = mask[1] = mask[2] = 0; } else { /* * Get address/bits format... */ i = atoi(maskval); #ifdef AF_INET6 if (family == AF_INET6) { if (i > 128) return (0); i = 128 - i; if (i <= 96) mask[0] = 0xffffffff; else mask[0] = (0xffffffff << (i - 96)) & 0xffffffff; if (i <= 64) mask[1] = 0xffffffff; else if (i >= 96) mask[1] = 0; else mask[1] = (0xffffffff << (i - 64)) & 0xffffffff; if (i <= 32) mask[2] = 0xffffffff; else if (i >= 64) mask[2] = 0; else mask[2] = (0xffffffff << (i - 32)) & 0xffffffff; if (i == 0) mask[3] = 0xffffffff; else if (i >= 32) mask[3] = 0; else mask[3] = (0xffffffff << i) & 0xffffffff; } else #endif /* AF_INET6 */ { if (i > 32) return (0); mask[0] = 0xffffffff; mask[1] = 0xffffffff; mask[2] = 0xffffffff; if (i < 32) mask[3] = (0xffffffff << (32 - i)) & 0xffffffff; else mask[3] = 0xffffffff; } } } cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_addr_and_mask(value=\"%s\", " "ip=[%08x:%08x:%08x:%08x], mask=[%08x:%08x:%08x:%08x])", value, ip[0], ip[1], ip[2], ip[3], mask[0], mask[1], mask[2], mask[3]); /* * Check for a valid netmask; no fallback like in CUPS 1.1.x! */ if ((ip[0] & ~mask[0]) != 0 || (ip[1] & ~mask[1]) != 0 || (ip[2] & ~mask[2]) != 0 || (ip[3] & ~mask[3]) != 0) return (0); return (1); } /* * 'mime_error_cb()' - Log a MIME error. */ static void mime_error_cb(void *ctx, /* I - Context pointer (unused) */ const char *message) /* I - Message */ { (void)ctx; cupsdLogMessage(CUPSD_LOG_ERROR, "%s", message); } /* * 'parse_aaa()' - Parse authentication, authorization, and access control lines. */ static int /* O - 1 on success, 0 on failure */ parse_aaa(cupsd_location_t *loc, /* I - Location */ char *line, /* I - Line from file */ char *value, /* I - Start of value data */ int linenum) /* I - Current line number */ { char *valptr; /* Pointer into value */ unsigned ip[4], /* IP address components */ mask[4]; /* IP netmask components */ if (!_cups_strcasecmp(line, "Encryption")) { /* * "Encryption xxx" - set required encryption level... */ if (!_cups_strcasecmp(value, "never")) loc->encryption = HTTP_ENCRYPT_NEVER; else if (!_cups_strcasecmp(value, "always")) { cupsdLogMessage(CUPSD_LOG_ERROR, "Encryption value \"%s\" on line %d of %s is invalid in this " "context. Using \"required\" instead.", value, linenum, ConfigurationFile); loc->encryption = HTTP_ENCRYPT_REQUIRED; } else if (!_cups_strcasecmp(value, "required")) loc->encryption = HTTP_ENCRYPT_REQUIRED; else if (!_cups_strcasecmp(value, "ifrequested")) loc->encryption = HTTP_ENCRYPT_IF_REQUESTED; else { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown Encryption value %s on line %d of %s.", value, linenum, ConfigurationFile); return (0); } } else if (!_cups_strcasecmp(line, "Order")) { /* * "Order Deny,Allow" or "Order Allow,Deny"... */ if (!_cups_strncasecmp(value, "deny", 4)) loc->order_type = CUPSD_AUTH_ALLOW; else if (!_cups_strncasecmp(value, "allow", 5)) loc->order_type = CUPSD_AUTH_DENY; else { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown Order value %s on line %d of %s.", value, linenum, ConfigurationFile); return (0); } } else if (!_cups_strcasecmp(line, "Allow") || !_cups_strcasecmp(line, "Deny")) { /* * Allow [From] host/ip... * Deny [From] host/ip... */ while (*value) { if (!_cups_strncasecmp(value, "from", 4)) { /* * Strip leading "from"... */ value += 4; while (_cups_isspace(*value)) value ++; if (!*value) break; } /* * Find the end of the value... */ for (valptr = value; *valptr && !_cups_isspace(*valptr); valptr ++); while (_cups_isspace(*valptr)) *valptr++ = '\0'; /* * Figure out what form the allow/deny address takes: * * All * None * *.domain.com * .domain.com * host.domain.com * nnn.* * nnn.nnn.* * nnn.nnn.nnn.* * nnn.nnn.nnn.nnn * nnn.nnn.nnn.nnn/mm * nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm */ if (!_cups_strcasecmp(value, "all")) { /* * All hosts... */ if (!_cups_strcasecmp(line, "Allow")) cupsdAddIPMask(&(loc->allow), zeros, zeros); else cupsdAddIPMask(&(loc->deny), zeros, zeros); } else if (!_cups_strcasecmp(value, "none")) { /* * No hosts... */ if (!_cups_strcasecmp(line, "Allow")) cupsdAddIPMask(&(loc->allow), ones, zeros); else cupsdAddIPMask(&(loc->deny), ones, zeros); } #ifdef AF_INET6 else if (value[0] == '*' || value[0] == '.' || (!isdigit(value[0] & 255) && value[0] != '[')) #else else if (value[0] == '*' || value[0] == '.' || !isdigit(value[0] & 255)) #endif /* AF_INET6 */ { /* * Host or domain name... */ if (value[0] == '*') value ++; if (!_cups_strcasecmp(line, "Allow")) cupsdAddNameMask(&(loc->allow), value); else cupsdAddNameMask(&(loc->deny), value); } else { /* * One of many IP address forms... */ if (!get_addr_and_mask(value, ip, mask)) { cupsdLogMessage(CUPSD_LOG_ERROR, "Bad netmask value %s on line %d of %s.", value, linenum, ConfigurationFile); return (0); } if (!_cups_strcasecmp(line, "Allow")) cupsdAddIPMask(&(loc->allow), ip, mask); else cupsdAddIPMask(&(loc->deny), ip, mask); } /* * Advance to next value... */ value = valptr; } } else if (!_cups_strcasecmp(line, "AuthType")) { /* * AuthType {none,basic,digest,basicdigest,negotiate,default} */ if (!_cups_strcasecmp(value, "none")) { loc->type = CUPSD_AUTH_NONE; loc->level = CUPSD_AUTH_ANON; } else if (!_cups_strcasecmp(value, "basic")) { loc->type = CUPSD_AUTH_BASIC; if (loc->level == CUPSD_AUTH_ANON) loc->level = CUPSD_AUTH_USER; } else if (!_cups_strcasecmp(value, "default")) { loc->type = CUPSD_AUTH_DEFAULT; if (loc->level == CUPSD_AUTH_ANON) loc->level = CUPSD_AUTH_USER; } else if (!_cups_strcasecmp(value, "negotiate")) { loc->type = CUPSD_AUTH_NEGOTIATE; if (loc->level == CUPSD_AUTH_ANON) loc->level = CUPSD_AUTH_USER; } else { cupsdLogMessage(CUPSD_LOG_WARN, "Unknown authorization type %s on line %d of %s.", value, linenum, ConfigurationFile); return (0); } } else if (!_cups_strcasecmp(line, "AuthClass")) { /* * AuthClass anonymous, user, system, group */ if (!_cups_strcasecmp(value, "anonymous")) { loc->type = CUPSD_AUTH_NONE; loc->level = CUPSD_AUTH_ANON; cupsdLogMessage(CUPSD_LOG_WARN, "\"AuthClass %s\" is deprecated; consider removing " "it from line %d.", value, linenum); } else if (!_cups_strcasecmp(value, "user")) { loc->level = CUPSD_AUTH_USER; cupsdLogMessage(CUPSD_LOG_WARN, "\"AuthClass %s\" is deprecated; consider using " "\"Require valid-user\" on line %d of %s.", value, linenum, ConfigurationFile); } else if (!_cups_strcasecmp(value, "group")) { loc->level = CUPSD_AUTH_GROUP; cupsdLogMessage(CUPSD_LOG_WARN, "\"AuthClass %s\" is deprecated; consider using " "\"Require user @groupname\" on line %d of %s.", value, linenum, ConfigurationFile); } else if (!_cups_strcasecmp(value, "system")) { loc->level = CUPSD_AUTH_GROUP; cupsdAddName(loc, "@SYSTEM"); cupsdLogMessage(CUPSD_LOG_WARN, "\"AuthClass %s\" is deprecated; consider using " "\"Require user @SYSTEM\" on line %d of %s.", value, linenum, ConfigurationFile); } else { cupsdLogMessage(CUPSD_LOG_WARN, "Unknown authorization class %s on line %d of %s.", value, linenum, ConfigurationFile); return (0); } } else if (!_cups_strcasecmp(line, "AuthGroupName")) { cupsdAddName(loc, value); cupsdLogMessage(CUPSD_LOG_WARN, "\"AuthGroupName %s\" directive is deprecated; consider " "using \"Require user @%s\" on line %d of %s.", value, value, linenum, ConfigurationFile); } else if (!_cups_strcasecmp(line, "Require")) { /* * Apache synonym for AuthClass and AuthGroupName... * * Get initial word: * * Require valid-user * Require group names * Require user names */ for (valptr = value; !_cups_isspace(*valptr) && *valptr; valptr ++); if (*valptr) *valptr++ = '\0'; if (!_cups_strcasecmp(value, "valid-user") || !_cups_strcasecmp(value, "user")) loc->level = CUPSD_AUTH_USER; else if (!_cups_strcasecmp(value, "group")) loc->level = CUPSD_AUTH_GROUP; else { cupsdLogMessage(CUPSD_LOG_WARN, "Unknown Require type %s on line %d of %s.", value, linenum, ConfigurationFile); return (0); } /* * Get the list of names from the line... */ for (value = valptr; *value;) { while (_cups_isspace(*value)) value ++; #ifdef HAVE_AUTHORIZATION_H if (!strncmp(value, "@AUTHKEY(", 9)) { /* * Grab "@AUTHKEY(name)" value... */ for (valptr = value + 9; *valptr != ')' && *valptr; valptr ++); if (*valptr) *valptr++ = '\0'; } else #endif /* HAVE_AUTHORIZATION_H */ if (*value == '\"' || *value == '\'') { /* * Grab quoted name... */ for (valptr = value + 1; *valptr != *value && *valptr; valptr ++); value ++; } else { /* * Grab literal name. */ for (valptr = value; !_cups_isspace(*valptr) && *valptr; valptr ++); } if (*valptr) *valptr++ = '\0'; cupsdAddName(loc, value); for (value = valptr; _cups_isspace(*value); value ++); } } else if (!_cups_strcasecmp(line, "Satisfy")) { if (!_cups_strcasecmp(value, "all")) loc->satisfy = CUPSD_AUTH_SATISFY_ALL; else if (!_cups_strcasecmp(value, "any")) loc->satisfy = CUPSD_AUTH_SATISFY_ANY; else { cupsdLogMessage(CUPSD_LOG_WARN, "Unknown Satisfy value %s on line %d of %s.", value, linenum, ConfigurationFile); return (0); } } else return (0); return (1); } /* * 'parse_fatal_errors()' - Parse FatalErrors values in a string. */ static int /* O - FatalErrors bits */ parse_fatal_errors(const char *s) /* I - FatalErrors string */ { int fatal; /* FatalErrors bits */ char value[1024], /* Value string */ *valstart, /* Pointer into value */ *valend; /* End of value */ /* * Empty FatalErrors line yields NULL pointer... */ if (!s) return (CUPSD_FATAL_NONE); /* * Loop through the value string,... */ strlcpy(value, s, sizeof(value)); fatal = CUPSD_FATAL_NONE; for (valstart = value; *valstart;) { /* * Get the current space/comma-delimited kind name... */ for (valend = valstart; *valend; valend ++) if (_cups_isspace(*valend) || *valend == ',') break; if (*valend) *valend++ = '\0'; /* * Add the error to the bitmask... */ if (!_cups_strcasecmp(valstart, "all")) fatal = CUPSD_FATAL_ALL; else if (!_cups_strcasecmp(valstart, "browse")) fatal |= CUPSD_FATAL_BROWSE; else if (!_cups_strcasecmp(valstart, "-browse")) fatal &= ~CUPSD_FATAL_BROWSE; else if (!_cups_strcasecmp(valstart, "config")) fatal |= CUPSD_FATAL_CONFIG; else if (!_cups_strcasecmp(valstart, "-config")) fatal &= ~CUPSD_FATAL_CONFIG; else if (!_cups_strcasecmp(valstart, "listen")) fatal |= CUPSD_FATAL_LISTEN; else if (!_cups_strcasecmp(valstart, "-listen")) fatal &= ~CUPSD_FATAL_LISTEN; else if (!_cups_strcasecmp(valstart, "log")) fatal |= CUPSD_FATAL_LOG; else if (!_cups_strcasecmp(valstart, "-log")) fatal &= ~CUPSD_FATAL_LOG; else if (!_cups_strcasecmp(valstart, "permissions")) fatal |= CUPSD_FATAL_PERMISSIONS; else if (!_cups_strcasecmp(valstart, "-permissions")) fatal &= ~CUPSD_FATAL_PERMISSIONS; else if (_cups_strcasecmp(valstart, "none")) cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown FatalErrors kind \"%s\" ignored.", valstart); for (valstart = valend; *valstart; valstart ++) if (!_cups_isspace(*valstart) || *valstart != ',') break; } return (fatal); } /* * 'parse_groups()' - Parse system group names in a string. */ static int /* O - 1 on success, 0 on failure */ parse_groups(const char *s, /* I - Space-delimited groups */ int linenum) /* I - Line number in cups-files.conf */ { int status; /* Return status */ char value[1024], /* Value string */ *valstart, /* Pointer into value */ *valend, /* End of value */ quote; /* Quote character */ struct group *group; /* Group */ /* * Make a copy of the string and parse out the groups... */ strlcpy(value, s, sizeof(value)); status = 1; valstart = value; while (*valstart && NumSystemGroups < MAX_SYSTEM_GROUPS) { if (*valstart == '\'' || *valstart == '\"') { /* * Scan quoted name... */ quote = *valstart++; for (valend = valstart; *valend; valend ++) if (*valend == quote) break; } else { /* * Scan space or comma-delimited name... */ for (valend = valstart; *valend; valend ++) if (_cups_isspace(*valend) || *valend == ',') break; } if (*valend) *valend++ = '\0'; group = getgrnam(valstart); if (group) { cupsdSetString(SystemGroups + NumSystemGroups, valstart); SystemGroupIDs[NumSystemGroups] = group->gr_gid; NumSystemGroups ++; } else { if (linenum) cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown SystemGroup \"%s\" on line %d of %s.", valstart, linenum, CupsFilesFile); else cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown default SystemGroup \"%s\".", valstart); status = 0; } endgrent(); valstart = valend; while (*valstart == ',' || _cups_isspace(*valstart)) valstart ++; } return (status); } /* * 'parse_protocols()' - Parse browse protocols in a string. */ static int /* O - Browse protocol bits */ parse_protocols(const char *s) /* I - Space-delimited protocols */ { int protocols; /* Browse protocol bits */ char value[1024], /* Value string */ *valstart, /* Pointer into value */ *valend; /* End of value */ /* * Empty protocol line yields NULL pointer... */ if (!s) return (0); /* * Loop through the value string,... */ strlcpy(value, s, sizeof(value)); protocols = 0; for (valstart = value; *valstart;) { /* * Get the current space/comma-delimited protocol name... */ for (valend = valstart; *valend; valend ++) if (_cups_isspace(*valend) || *valend == ',') break; if (*valend) *valend++ = '\0'; /* * Add the protocol to the bitmask... */ if (!_cups_strcasecmp(valstart, "dnssd") || !_cups_strcasecmp(valstart, "dns-sd") || !_cups_strcasecmp(valstart, "bonjour")) protocols |= BROWSE_DNSSD; else if (!_cups_strcasecmp(valstart, "all")) protocols |= BROWSE_ALL; else if (_cups_strcasecmp(valstart, "none")) cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown browse protocol \"%s\" ignored.", valstart); for (valstart = valend; *valstart; valstart ++) if (!_cups_isspace(*valstart) || *valstart != ',') break; } return (protocols); } /* * 'parse_variable()' - Parse a variable line. */ static int /* O - 1 on success, 0 on failure */ parse_variable( const char *filename, /* I - Name of configuration file */ int linenum, /* I - Line in configuration file */ const char *line, /* I - Line from configuration file */ const char *value, /* I - Value from configuration file */ size_t num_vars, /* I - Number of variables */ const cupsd_var_t *vars) /* I - Variables */ { size_t i; /* Looping var */ const cupsd_var_t *var; /* Variables */ char temp[1024]; /* Temporary string */ for (i = num_vars, var = vars; i > 0; i --, var ++) if (!_cups_strcasecmp(line, var->name)) break; if (i == 0) { /* * Unknown directive! Output an error message and continue... */ if (!value) cupsdLogMessage(CUPSD_LOG_ERROR, "Missing value for %s on line %d of %s.", line, linenum, filename); else cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown directive %s on line %d of %s.", line, linenum, filename); return (0); } switch (var->type) { case CUPSD_VARTYPE_INTEGER : if (!value) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing integer value for %s on line %d of %s.", line, linenum, filename); return (0); } else if (!isdigit(*value & 255)) { cupsdLogMessage(CUPSD_LOG_ERROR, "Bad integer value for %s on line %d of %s.", line, linenum, filename); return (0); } else { int n; /* Number */ char *units; /* Units */ n = strtol(value, &units, 0); if (units && *units) { if (tolower(units[0] & 255) == 'g') n *= 1024 * 1024 * 1024; else if (tolower(units[0] & 255) == 'm') n *= 1024 * 1024; else if (tolower(units[0] & 255) == 'k') n *= 1024; else if (tolower(units[0] & 255) == 't') n *= 262144; else { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown integer value for %s on line %d of %s.", line, linenum, filename); return (0); } } if (n < 0) { cupsdLogMessage(CUPSD_LOG_ERROR, "Bad negative integer value for %s on line %d of " "%s.", line, linenum, filename); return (0); } else { *((int *)var->ptr) = n; } } break; case CUPSD_VARTYPE_PERM : if (!value) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing permissions value for %s on line %d of %s.", line, linenum, filename); return (0); } else if (!isdigit(*value & 255)) { /* TODO: Add chmod UGO syntax support */ cupsdLogMessage(CUPSD_LOG_ERROR, "Bad permissions value for %s on line %d of %s.", line, linenum, filename); return (0); } else { int n = strtol(value, NULL, 8); /* Permissions value */ if (n < 0) { cupsdLogMessage(CUPSD_LOG_ERROR, "Bad negative permissions value for %s on line %d of " "%s.", line, linenum, filename); return (0); } else { *((mode_t *)var->ptr) = (mode_t)n; } } break; case CUPSD_VARTYPE_TIME : if (!value) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing time interval value for %s on line %d of " "%s.", line, linenum, filename); return (0); } else if (!_cups_strncasecmp(line, "PreserveJob", 11) && (!_cups_strcasecmp(value, "true") || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "enabled") || !_cups_strcasecmp(value, "yes"))) { *((int *)var->ptr) = INT_MAX; } else if (!_cups_strcasecmp(value, "false") || !_cups_strcasecmp(value, "off") || !_cups_strcasecmp(value, "disabled") || !_cups_strcasecmp(value, "no")) { *((int *)var->ptr) = 0; } else if (!isdigit(*value & 255)) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown time interval value for %s on line %d of " "%s.", line, linenum, filename); return (0); } else { double n; /* Number */ char *units; /* Units */ n = strtod(value, &units); if (units && *units) { if (tolower(units[0] & 255) == 'w') n *= 7 * 24 * 60 * 60; else if (tolower(units[0] & 255) == 'd') n *= 24 * 60 * 60; else if (tolower(units[0] & 255) == 'h') n *= 60 * 60; else if (tolower(units[0] & 255) == 'm') n *= 60; else { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown time interval value for %s on line " "%d of %s.", line, linenum, filename); return (0); } } if (n < 0.0 || n > INT_MAX) { cupsdLogMessage(CUPSD_LOG_ERROR, "Bad time value for %s on line %d of %s.", line, linenum, filename); return (0); } else { *((int *)var->ptr) = (int)n; } } break; case CUPSD_VARTYPE_BOOLEAN : if (!value) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing boolean value for %s on line %d of %s.", line, linenum, filename); return (0); } else if (!_cups_strcasecmp(value, "true") || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "enabled") || !_cups_strcasecmp(value, "yes") || atoi(value) != 0) { *((int *)var->ptr) = TRUE; } else if (!_cups_strcasecmp(value, "false") || !_cups_strcasecmp(value, "off") || !_cups_strcasecmp(value, "disabled") || !_cups_strcasecmp(value, "no") || !_cups_strcasecmp(value, "0")) { *((int *)var->ptr) = FALSE; } else { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown boolean value %s on line %d of %s.", value, linenum, filename); return (0); } break; case CUPSD_VARTYPE_PATHNAME : if (!value) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing pathname value for %s on line %d of %s.", line, linenum, filename); return (0); } if (value[0] == '/') strlcpy(temp, value, sizeof(temp)); else snprintf(temp, sizeof(temp), "%s/%s", ServerRoot, value); if (access(temp, 0) && _cups_strcasecmp(value, "internal") && _cups_strcasecmp(line, "ServerKeychain")) { cupsdLogMessage(CUPSD_LOG_ERROR, "File or directory for \"%s %s\" on line %d of %s " "does not exist.", line, value, linenum, filename); return (0); } cupsdSetString((char **)var->ptr, temp); break; case CUPSD_VARTYPE_STRING : cupsdSetString((char **)var->ptr, value); break; } return (1); } /* * 'read_cupsd_conf()' - Read the cupsd.conf configuration file. */ static int /* O - 1 on success, 0 on failure */ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */ { int linenum; /* Current line number */ char line[HTTP_MAX_BUFFER], /* Line from file */ temp[HTTP_MAX_BUFFER], /* Temporary buffer for value */ *value, /* Pointer to value */ *valueptr; /* Pointer into value */ int valuelen; /* Length of value */ http_addrlist_t *addrlist, /* Address list */ *addr; /* Current address */ cups_file_t *incfile; /* Include file */ char incname[1024]; /* Include filename */ /* * Loop through each line in the file... */ linenum = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { /* * Decode the directive... */ if (!_cups_strcasecmp(line, "Include") && value) { /* * Include filename */ if (value[0] == '/') strlcpy(incname, value, sizeof(incname)); else snprintf(incname, sizeof(incname), "%s/%s", ServerRoot, value); if ((incfile = cupsFileOpen(incname, "rb")) == NULL) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to include config file \"%s\" - %s", incname, strerror(errno)); else { read_cupsd_conf(incfile); cupsFileClose(incfile); } } else if (!_cups_strcasecmp(line, " */ linenum = read_location(fp, value, linenum); if (linenum == 0) return (0); } else if (!_cups_strcasecmp(line, " */ linenum = read_policy(fp, value, linenum); if (linenum == 0) return (0); } else if (!_cups_strcasecmp(line, "FaxRetryInterval") && value) { JobRetryInterval = atoi(value); cupsdLogMessage(CUPSD_LOG_WARN, "FaxRetryInterval is deprecated; use " "JobRetryInterval on line %d of %s.", linenum, ConfigurationFile); } else if (!_cups_strcasecmp(line, "FaxRetryLimit") && value) { JobRetryLimit = atoi(value); cupsdLogMessage(CUPSD_LOG_WARN, "FaxRetryLimit is deprecated; use " "JobRetryLimit on line %d of %s.", linenum, ConfigurationFile); } #ifdef HAVE_SSL else if (!_cups_strcasecmp(line, "SSLOptions")) { /* * SSLOptions [AllowRC4] [AllowSSL3] [AllowDH] [DenyCBC] [DenyTLS1.0] [None] */ int options = _HTTP_TLS_NONE,/* SSL/TLS options */ min_version = _HTTP_TLS_1_0, max_version = _HTTP_TLS_MAX; if (value) { char *start, /* Start of option */ *end; /* End of option */ for (start = value; *start; start = end) { /* * Find end of keyword... */ end = start; while (*end && !_cups_isspace(*end)) end ++; if (*end) *end++ = '\0'; /* * Compare... */ if (!_cups_strcasecmp(start, "AllowRC4")) options |= _HTTP_TLS_ALLOW_RC4; else if (!_cups_strcasecmp(start, "AllowSSL3")) min_version = _HTTP_TLS_SSL3; else if (!_cups_strcasecmp(start, "AllowDH")) options |= _HTTP_TLS_ALLOW_DH; else if (!_cups_strcasecmp(start, "DenyCBC")) options |= _HTTP_TLS_DENY_CBC; else if (!_cups_strcasecmp(start, "DenyTLS1.0")) min_version = _HTTP_TLS_1_1; else if (!_cups_strcasecmp(start, "MaxTLS1.0")) max_version = _HTTP_TLS_1_0; else if (!_cups_strcasecmp(start, "MaxTLS1.1")) max_version = _HTTP_TLS_1_1; else if (!_cups_strcasecmp(start, "MaxTLS1.2")) max_version = _HTTP_TLS_1_2; else if (!_cups_strcasecmp(start, "MaxTLS1.3")) max_version = _HTTP_TLS_1_3; else if (!_cups_strcasecmp(start, "MinTLS1.0")) min_version = _HTTP_TLS_1_0; else if (!_cups_strcasecmp(start, "MinTLS1.1")) min_version = _HTTP_TLS_1_1; else if (!_cups_strcasecmp(start, "MinTLS1.2")) min_version = _HTTP_TLS_1_2; else if (!_cups_strcasecmp(start, "MinTLS1.3")) min_version = _HTTP_TLS_1_3; else if (!_cups_strcasecmp(start, "None")) options = _HTTP_TLS_NONE; else if (_cups_strcasecmp(start, "NoEmptyFragments")) cupsdLogMessage(CUPSD_LOG_WARN, "Unknown SSL option %s at line %d.", start, linenum); } } _httpTLSSetOptions(options, min_version, max_version); } #endif /* HAVE_SSL */ else if ((!_cups_strcasecmp(line, "Port") || !_cups_strcasecmp(line, "Listen") #ifdef HAVE_SSL || !_cups_strcasecmp(line, "SSLPort") || !_cups_strcasecmp(line, "SSLListen") #endif /* HAVE_SSL */ ) && value) { /* * Add listening address(es) to the list... */ cupsd_listener_t *lis; /* New listeners array */ /* * Get the address list... */ addrlist = get_address(value, IPP_PORT); if (!addrlist) { cupsdLogMessage(CUPSD_LOG_ERROR, "Bad %s address %s at line %d.", line, value, linenum); continue; } /* * Add each address... */ for (addr = addrlist; addr; addr = addr->next) { /* * See if this address is already present... */ for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); lis; lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) if (httpAddrEqual(&(addr->addr), &(lis->address)) && httpAddrPort(&(addr->addr)) == httpAddrPort(&(lis->address))) break; if (lis) { #ifdef HAVE_ONDEMAND if (!lis->on_demand) #endif /* HAVE_ONDEMAND */ { httpAddrString(&lis->address, temp, sizeof(temp)); cupsdLogMessage(CUPSD_LOG_WARN, "Duplicate listen address \"%s\" ignored.", temp); } continue; } /* * Allocate another listener... */ if (!Listeners) Listeners = cupsArrayNew(NULL, NULL); if (!Listeners) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate %s at line %d - %s.", line, linenum, strerror(errno)); break; } if ((lis = calloc(1, sizeof(cupsd_listener_t))) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate %s at line %d - %s.", line, linenum, strerror(errno)); break; } cupsArrayAdd(Listeners, lis); /* * Copy the current address and log it... */ memcpy(&(lis->address), &(addr->addr), sizeof(lis->address)); lis->fd = -1; #ifdef HAVE_SSL if (!_cups_strcasecmp(line, "SSLPort") || !_cups_strcasecmp(line, "SSLListen")) lis->encryption = HTTP_ENCRYPT_ALWAYS; #endif /* HAVE_SSL */ httpAddrString(&lis->address, temp, sizeof(temp)); #ifdef AF_LOCAL if (lis->address.addr.sa_family == AF_LOCAL) cupsdLogMessage(CUPSD_LOG_INFO, "Listening to %s (Domain)", temp); else #endif /* AF_LOCAL */ cupsdLogMessage(CUPSD_LOG_INFO, "Listening to %s:%d (IPv%d)", temp, httpAddrPort(&(lis->address)), httpAddrFamily(&(lis->address)) == AF_INET ? 4 : 6); if (!httpAddrLocalhost(&(lis->address))) RemotePort = httpAddrPort(&(lis->address)); } /* * Free the list... */ httpAddrFreeList(addrlist); } else if (!_cups_strcasecmp(line, "BrowseProtocols") || !_cups_strcasecmp(line, "BrowseLocalProtocols")) { /* * "BrowseProtocols name [... name]" * "BrowseLocalProtocols name [... name]" */ int protocols = parse_protocols(value); if (protocols < 0) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown browse protocol \"%s\" on line %d of %s.", value, linenum, ConfigurationFile); break; } BrowseLocalProtocols = protocols; } else if (!_cups_strcasecmp(line, "DefaultAuthType") && value) { /* * DefaultAuthType {basic,digest,basicdigest,negotiate} */ if (!_cups_strcasecmp(value, "none")) default_auth_type = CUPSD_AUTH_NONE; else if (!_cups_strcasecmp(value, "basic")) default_auth_type = CUPSD_AUTH_BASIC; else if (!_cups_strcasecmp(value, "negotiate")) default_auth_type = CUPSD_AUTH_NEGOTIATE; else if (!_cups_strcasecmp(value, "auto")) default_auth_type = CUPSD_AUTH_AUTO; else { cupsdLogMessage(CUPSD_LOG_WARN, "Unknown default authorization type %s on line %d of %s.", value, linenum, ConfigurationFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } } #ifdef HAVE_SSL else if (!_cups_strcasecmp(line, "DefaultEncryption")) { /* * DefaultEncryption {Never,IfRequested,Required} */ if (!value || !_cups_strcasecmp(value, "never")) DefaultEncryption = HTTP_ENCRYPT_NEVER; else if (!_cups_strcasecmp(value, "required")) DefaultEncryption = HTTP_ENCRYPT_REQUIRED; else if (!_cups_strcasecmp(value, "ifrequested")) DefaultEncryption = HTTP_ENCRYPT_IF_REQUESTED; else { cupsdLogMessage(CUPSD_LOG_WARN, "Unknown default encryption %s on line %d of %s.", value, linenum, ConfigurationFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } } #endif /* HAVE_SSL */ else if (!_cups_strcasecmp(line, "HostNameLookups") && value) { /* * Do hostname lookups? */ if (!_cups_strcasecmp(value, "off") || !_cups_strcasecmp(value, "no") || !_cups_strcasecmp(value, "false")) HostNameLookups = 0; else if (!_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true")) HostNameLookups = 1; else if (!_cups_strcasecmp(value, "double")) HostNameLookups = 2; else cupsdLogMessage(CUPSD_LOG_WARN, "Unknown HostNameLookups %s on line %d of %s.", value, linenum, ConfigurationFile); } else if (!_cups_strcasecmp(line, "AccessLogLevel") && value) { /* * Amount of logging to do to access log... */ if (!_cups_strcasecmp(value, "all")) AccessLogLevel = CUPSD_ACCESSLOG_ALL; else if (!_cups_strcasecmp(value, "actions")) AccessLogLevel = CUPSD_ACCESSLOG_ACTIONS; else if (!_cups_strcasecmp(value, "config")) AccessLogLevel = CUPSD_ACCESSLOG_CONFIG; else if (!_cups_strcasecmp(value, "none")) AccessLogLevel = CUPSD_ACCESSLOG_NONE; else cupsdLogMessage(CUPSD_LOG_WARN, "Unknown AccessLogLevel %s on line %d of %s.", value, linenum, ConfigurationFile); } else if (!_cups_strcasecmp(line, "LogLevel") && value) { /* * Amount of logging to do to error log... */ if (!_cups_strcasecmp(value, "debug2")) LogLevel = CUPSD_LOG_DEBUG2; else if (!_cups_strcasecmp(value, "debug")) LogLevel = CUPSD_LOG_DEBUG; else if (!_cups_strcasecmp(value, "info")) LogLevel = CUPSD_LOG_INFO; else if (!_cups_strcasecmp(value, "notice")) LogLevel = CUPSD_LOG_NOTICE; else if (!_cups_strcasecmp(value, "warn")) LogLevel = CUPSD_LOG_WARN; else if (!_cups_strcasecmp(value, "error")) LogLevel = CUPSD_LOG_ERROR; else if (!_cups_strcasecmp(value, "crit")) LogLevel = CUPSD_LOG_CRIT; else if (!_cups_strcasecmp(value, "alert")) LogLevel = CUPSD_LOG_ALERT; else if (!_cups_strcasecmp(value, "emerg")) LogLevel = CUPSD_LOG_EMERG; else if (!_cups_strcasecmp(value, "none")) LogLevel = CUPSD_LOG_NONE; else cupsdLogMessage(CUPSD_LOG_WARN, "Unknown LogLevel %s on line %d of %s.", value, linenum, ConfigurationFile); } else if (!_cups_strcasecmp(line, "LogTimeFormat") && value) { /* * Amount of logging to do to error log... */ if (!_cups_strcasecmp(value, "standard")) LogTimeFormat = CUPSD_TIME_STANDARD; else if (!_cups_strcasecmp(value, "usecs")) LogTimeFormat = CUPSD_TIME_USECS; else cupsdLogMessage(CUPSD_LOG_WARN, "Unknown LogTimeFormat %s on line %d of %s.", value, linenum, ConfigurationFile); } else if (!_cups_strcasecmp(line, "ServerTokens") && value) { /* * Set the string used for the Server header... */ struct utsname plat; /* Platform info */ uname(&plat); if (!_cups_strcasecmp(value, "ProductOnly")) cupsdSetString(&ServerHeader, "CUPS IPP"); else if (!_cups_strcasecmp(value, "Major")) cupsdSetStringf(&ServerHeader, "CUPS/%d IPP/2", CUPS_VERSION_MAJOR); else if (!_cups_strcasecmp(value, "Minor")) cupsdSetStringf(&ServerHeader, "CUPS/%d.%d IPP/2.1", CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR); else if (!_cups_strcasecmp(value, "Minimal")) cupsdSetString(&ServerHeader, CUPS_MINIMAL " IPP/2.1"); else if (!_cups_strcasecmp(value, "OS")) cupsdSetStringf(&ServerHeader, CUPS_MINIMAL " (%s %s) IPP/2.1", plat.sysname, plat.release); else if (!_cups_strcasecmp(value, "Full")) cupsdSetStringf(&ServerHeader, CUPS_MINIMAL " (%s %s; %s) IPP/2.1", plat.sysname, plat.release, plat.machine); else if (!_cups_strcasecmp(value, "None")) cupsdSetString(&ServerHeader, ""); else cupsdLogMessage(CUPSD_LOG_WARN, "Unknown ServerTokens %s on line %d of %s.", value, linenum, ConfigurationFile); } else if (!_cups_strcasecmp(line, "PassEnv") && value) { /* * PassEnv variable [... variable] */ for (; *value;) { for (valuelen = 0; value[valuelen]; valuelen ++) if (_cups_isspace(value[valuelen]) || value[valuelen] == ',') break; if (value[valuelen]) { value[valuelen] = '\0'; valuelen ++; } cupsdSetEnv(value, NULL); for (value += valuelen; *value; value ++) if (!_cups_isspace(*value) || *value != ',') break; } } else if (!_cups_strcasecmp(line, "ServerAlias") && value) { /* * ServerAlias name [... name] */ if (!ServerAlias) ServerAlias = cupsArrayNew(NULL, NULL); for (; *value;) { for (valuelen = 0; value[valuelen]; valuelen ++) if (_cups_isspace(value[valuelen]) || value[valuelen] == ',') break; if (value[valuelen]) { value[valuelen] = '\0'; valuelen ++; } cupsdAddAlias(ServerAlias, value); for (value += valuelen; *value; value ++) if (!_cups_isspace(*value) || *value != ',') break; } } else if (!_cups_strcasecmp(line, "SetEnv") && value) { /* * SetEnv variable value */ for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++); if (*valueptr) { /* * Found a value... */ while (isspace(*valueptr & 255)) *valueptr++ = '\0'; cupsdSetEnv(value, valueptr); } else cupsdLogMessage(CUPSD_LOG_ERROR, "Missing value for SetEnv directive on line %d of %s.", linenum, ConfigurationFile); } else if (!_cups_strcasecmp(line, "AccessLog") || !_cups_strcasecmp(line, "CacheDir") || !_cups_strcasecmp(line, "ConfigFilePerm") || !_cups_strcasecmp(line, "DataDir") || !_cups_strcasecmp(line, "DocumentRoot") || !_cups_strcasecmp(line, "ErrorLog") || !_cups_strcasecmp(line, "FatalErrors") || !_cups_strcasecmp(line, "FileDevice") || !_cups_strcasecmp(line, "FontPath") || !_cups_strcasecmp(line, "Group") || !_cups_strcasecmp(line, "LogFilePerm") || !_cups_strcasecmp(line, "LPDConfigFile") || !_cups_strcasecmp(line, "PageLog") || !_cups_strcasecmp(line, "Printcap") || !_cups_strcasecmp(line, "PrintcapFormat") || !_cups_strcasecmp(line, "RemoteRoot") || !_cups_strcasecmp(line, "RequestRoot") || !_cups_strcasecmp(line, "ServerBin") || !_cups_strcasecmp(line, "ServerCertificate") || !_cups_strcasecmp(line, "ServerKey") || !_cups_strcasecmp(line, "ServerKeychain") || !_cups_strcasecmp(line, "ServerRoot") || !_cups_strcasecmp(line, "SMBConfigFile") || !_cups_strcasecmp(line, "StateDir") || !_cups_strcasecmp(line, "SystemGroup") || !_cups_strcasecmp(line, "SystemGroupAuthKey") || !_cups_strcasecmp(line, "TempDir") || !_cups_strcasecmp(line, "User")) { cupsdLogMessage(CUPSD_LOG_INFO, "Please move \"%s%s%s\" on line %d of %s to the %s file; " "this will become an error in a future release.", line, value ? " " : "", value ? value : "", linenum, ConfigurationFile, CupsFilesFile); } else parse_variable(ConfigurationFile, linenum, line, value, sizeof(cupsd_vars) / sizeof(cupsd_vars[0]), cupsd_vars); } return (1); } /* * 'read_cups_files_conf()' - Read the cups-files.conf configuration file. */ static int /* O - 1 on success, 0 on failure */ read_cups_files_conf(cups_file_t *fp) /* I - File to read from */ { int linenum; /* Current line number */ char line[HTTP_MAX_BUFFER], /* Line from file */ *value; /* Value from line */ struct group *group; /* Group */ /* * Loop through each line in the file... */ linenum = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { if (!_cups_strcasecmp(line, "FatalErrors")) FatalErrors = parse_fatal_errors(value); else if (!_cups_strcasecmp(line, "Group") && value) { /* * Group ID to run as... */ if (isdigit(value[0])) Group = (gid_t)atoi(value); else { endgrent(); group = getgrnam(value); if (group != NULL) Group = group->gr_gid; else { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown Group \"%s\" on line %d of %s.", value, linenum, CupsFilesFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } } } else if (!_cups_strcasecmp(line, "PrintcapFormat") && value) { /* * Format of printcap file? */ if (!_cups_strcasecmp(value, "bsd")) PrintcapFormat = PRINTCAP_BSD; else if (!_cups_strcasecmp(value, "plist")) PrintcapFormat = PRINTCAP_PLIST; else if (!_cups_strcasecmp(value, "solaris")) PrintcapFormat = PRINTCAP_SOLARIS; else { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown PrintcapFormat \"%s\" on line %d of %s.", value, linenum, CupsFilesFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } } else if (!_cups_strcasecmp(line, "Sandboxing") && value) { /* * Level of sandboxing? */ if (!_cups_strcasecmp(value, "off") && getuid()) { Sandboxing = CUPSD_SANDBOXING_OFF; cupsdLogMessage(CUPSD_LOG_WARN, "Disabling sandboxing is not recommended (line %d of %s)", linenum, CupsFilesFile); } else if (!_cups_strcasecmp(value, "relaxed")) Sandboxing = CUPSD_SANDBOXING_RELAXED; else if (!_cups_strcasecmp(value, "strict")) Sandboxing = CUPSD_SANDBOXING_STRICT; else { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown Sandboxing \"%s\" on line %d of %s.", value, linenum, CupsFilesFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } } else if (!_cups_strcasecmp(line, "SystemGroup") && value) { /* * SystemGroup (admin) group(s)... */ if (!parse_groups(value, linenum)) { if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } } else if (!_cups_strcasecmp(line, "User") && value) { /* * User ID to run as... */ if (isdigit(value[0] & 255)) { int uid = atoi(value); if (!uid) { cupsdLogMessage(CUPSD_LOG_ERROR, "Will not use User 0 as specified on line %d of %s " "for security reasons. You must use a non-" "privileged account instead.", linenum, CupsFilesFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } else User = (uid_t)atoi(value); } else { struct passwd *p; /* Password information */ endpwent(); p = getpwnam(value); if (p) { if (!p->pw_uid) { cupsdLogMessage(CUPSD_LOG_ERROR, "Will not use User %s (UID=0) as specified on line " "%d of %s for security reasons. You must use a " "non-privileged account instead.", value, linenum, CupsFilesFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } else User = p->pw_uid; } else { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown User \"%s\" on line %d of %s.", value, linenum, CupsFilesFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } } } else if (!_cups_strcasecmp(line, "ServerCertificate") || !_cups_strcasecmp(line, "ServerKey")) { cupsdLogMessage(CUPSD_LOG_INFO, "The \"%s\" directive on line %d of %s is no longer " "supported; this will become an error in a future " "release.", line, linenum, CupsFilesFile); } else if (!parse_variable(CupsFilesFile, linenum, line, value, sizeof(cupsfiles_vars) / sizeof(cupsfiles_vars[0]), cupsfiles_vars) && (FatalErrors & CUPSD_FATAL_CONFIG)) return (0); } return (1); } /* * 'read_location()' - Read a definition. */ static int /* O - New line number or 0 on error */ read_location(cups_file_t *fp, /* I - Configuration file */ char *location, /* I - Location name/path */ int linenum) /* I - Current line number */ { cupsd_location_t *loc, /* New location */ *parent; /* Parent location */ char line[HTTP_MAX_BUFFER], /* Line buffer */ *value, /* Value for directive */ *valptr; /* Pointer into value */ if ((parent = cupsdFindLocation(location)) != NULL) cupsdLogMessage(CUPSD_LOG_WARN, "Duplicate on line %d of %s.", location, linenum, ConfigurationFile); else if ((parent = cupsdNewLocation(location)) == NULL) return (0); else { cupsdAddLocation(parent); parent->limit = CUPSD_AUTH_LIMIT_ALL; } loc = parent; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { /* * Decode the directive... */ if (!_cups_strcasecmp(line, "")) return (linenum); else if (!_cups_strcasecmp(line, "limit = 0; while (*value) { for (valptr = value; !isspace(*valptr & 255) && *valptr; valptr ++); if (*valptr) *valptr++ = '\0'; if (!strcmp(value, "ALL")) loc->limit = CUPSD_AUTH_LIMIT_ALL; else if (!strcmp(value, "GET")) loc->limit |= CUPSD_AUTH_LIMIT_GET; else if (!strcmp(value, "HEAD")) loc->limit |= CUPSD_AUTH_LIMIT_HEAD; else if (!strcmp(value, "OPTIONS")) loc->limit |= CUPSD_AUTH_LIMIT_OPTIONS; else if (!strcmp(value, "POST")) loc->limit |= CUPSD_AUTH_LIMIT_POST; else if (!strcmp(value, "PUT")) loc->limit |= CUPSD_AUTH_LIMIT_PUT; else if (!strcmp(value, "TRACE")) loc->limit |= CUPSD_AUTH_LIMIT_TRACE; else cupsdLogMessage(CUPSD_LOG_WARN, "Unknown request type %s on line %d of %s.", value, linenum, ConfigurationFile); for (value = valptr; isspace(*value & 255); value ++); } if (!_cups_strcasecmp(line, "limit = CUPSD_AUTH_LIMIT_ALL ^ loc->limit; parent->limit &= ~loc->limit; } else if (!_cups_strcasecmp(line, "

4ja9+HbgLF%hQ1A(re,1OU8SL)ZsVcd7u49@M!E!euuI7m%> >?5N@?:SpB=+>38"o:^l6_gB\EUi*X*HVFH6)"*QL4pr6WRKFp1RiSST!b_m[B;)# ekY0sI:f2>(Ti]sXpl,L%cjedUp'G:?g?TTl![rb@G^E\hX*be)<0EmiS>Bp\35t( A#enE7JG^N%0%mCEV9 Y/[V9Z-,K#65?qR&t?t[qD1ZZ.ATEC.Ej,kq<_u2R,?%/=m25-#r%Y_a4fH.oD?-.ptXW,F_ks0@LRP@_!cs;a*Du(P]%JG06iW%du54\#pa*r"mmU'l[rkhb4hd#1=i'PSYT1T(FWUtDt 8tShKHo+\-rkC5gRW)V 9u4'TBGN%f!7r.,WF1%:Cg\Ik,5tXfr$iIJ5gAq8k^FO8TP"B:oT519rbo6n>9.gA J?AeuK`<@6s'>X!%Wd7">:Cj:>%brrKH^ p-8Er9pZ^L!0TSEX1%O(s5O^,K*^,pIulnA<[`T]j#\rND[Y"mMJns#t%kt+o]0pRuN_g!g7r<=B&88&E_FFGr0t&[5KB=!:s9YSu=,#;,`#U C.8H98Jk>C1ZEltg/jaMPs;NL(7gZ%H#`u!5Qj=g!%i`SL^%U9RWS&69ZE(es($C! J4BSSm0+'J"TjET81,US:5Tep+ljWRJd\MWm&g77,/@SSq#\;7?o"UQeXi(+LFq?D 5k5G2ZD$Uiq6u$8RN%-Rl3eNJq=VSZE$-YJa:.i"r4Y"[2\g0Hna[Y@Nnqsg3gl*9 0N]"\Q?\\R38O]VOXL`sj9He2TFlt[M#[f,0mrM?KIA1!5^YgF4X?=8OfFEl[&B8: R,[ei"J\-%ihG2?FD$-c$$,t:ae>T=L/qsjEZbP>H_;0'Jfs7uXQUP%llWAO)Ql@6 KZ4-C#c;0s1Q&/7out'l!A+c25uY"nW'>LKYYhl*McV9Af#Gka#4pDl1G3k@/p8u# 4-Qgh`aA1j^"IDb?>&VWmeFgcEVB^:%u-MH7oSi9A`"I\\iN]3EO'n58oT5OZn`pi 2oT-pXL^5c^-5`15+$E%5N>c\m:RT=F0WQ' ;?n#=B43t.k,)X#)@8+E0E[T9:Vu`1Qp)QI`1n*`P).e*B`'6B7;a^1egku^7(-`3 +2@/MXTd0,2s&iY.(\55G%[KE_5R/.K]:stk4,MR!;YNAJDspb]jGfR;g>1EEo'eU Y065HESF,'Jb3&[;N-#':=3iSr9\%B.qHaP,jD@si\cVeodKb[bd[oRh\ANL`fLK+ \"4^b-'3G9a9+9i&;mD`92!dF?)`;[fHK%KffHCkAs1Nca mPhD2SQNq5=O0`Y49dlCHhCE"p084&/U-ho[@mD(5$l2,mjdo.MhaAYJ%#79]5PF] i6=LZ58joU5N]qs0qZ4%kgR!Os5DXnh`a6oahtW<]:JGP2s>b'cM?eVeA!u4rgdWi J'#%]U5.bTpW(EoN`9=*Y.d##H[_XM9Q0$%GM-6A8LXQcRdrtcf`St4??[=/^VRd@ Eo!X'\CG\#r6&b##o/55Y+s\>#]RqRD?UCjjH!,Wr$m_._'8@tR=JY`#\`E&%5$T> ##eDF!a>(!+I3#DP:55n3rB73m%OC`s$u4'#s,a+q!:6Y5bpYU'WBQQ8C6]u!0I-7 M%)*&+8_ZFn\Ldi.i5a(qV#nZJ,_IA!)!q@e,OGjPU%/HaCMFM? Gg0#lfE_O.4p49-('+>&&cO.%^o<'#MW7#jB5BDIN\?_CMZ83t)tAF!ab:"N('+9i (te>-COLA16OkaK*:SGn303QYZS.+'J(U/,Z9nM^&ZPf$au$^m`@=S:99N#D1qb#+ ;j3rU8l:mqE:Ym4Ci9>APg9F,$hD&o5N.(lr"%:fDLS"k']c"+J*IBfA?i3AFV)Is ;I'0=-kY (_R,_r(d=l="&=o;?,shkXYq&!l4^:aT&,ZM_Udl^XJeBG%Ls7)'MdfK0Q7oPRlnp DC>YGV'2':%V:EI&-3Y6+HYm_VtbY]/g&F(j['+&g^K+)Ap."1[R>oONU[,m!Cp^i _c$.NTMBVHJ2fg8%ha\0#69lC"q]?++:u^+eL?MLe]/B8=Jc"ag3>qsNA]AK:!Q.b S*GM0n1hR!L]Cb[.CGj,UT$DWV%Z`L\#h`q]s"Z8^SlM;AD]XDs'YZ<:^%!mHsF*IQ9Sqd^i>nIY$cE:U-ibcAVbQUXS"N)d!=2'8\N\M>AoP6*'S]%]5Ps"o7A=cHl_Hn%jFs/E^qWW;j%kn0M*X^)F'brZ;&248l?:2;R9OE0-FE'V-M LM0175FNdRNY4dE-/1u5*Du+R[cqsFL,V\i]k$:i1@BX4j"W=a^GCo*Rm8#cU'srA i;YMMH(7Ku8A_6eaHMHoc-K??2KbMunfL"32&&FGa5u4S3nF-7f!ZUbGn$6*KWVMg hl=VdX3'8m;#[a0qrp*6DbJ_1CS]kFgA^(dg@L#QqEIC=J,-L#`:sl;J^/-B%;O Q/!3/>9BrZfO)>?=1-gh^VOln3uH0Gq0+hs)m-cWM&jqt62jU_8.e1nf>*Z<-O7kMNRnBm.ac@i*&_=fCnn:+9X#jE174h]^f#TFC"!ZK<_ L]Cm.!:Ku&3(Y(I6TP?@rWI^%Ifb"L+E?]u!#cYo-apMt!'C<@r/Y2An43H_q>8B, r_<3)0oOjhR:G>]jaWF11g3"^\0+4,W5OnfY7rn#[GrkJAl=o^Z8XYL)! 2cDIP.Ma'+q!:#p.foW^HHg8uL#]X^[R:*3lMn(IV8<1cs+q#sj\Lum*6`-eB+t8_ E+anF)*poMhj!QXVgGeMDG?QeR;A'5>O%AG@\,lMWoL"WX-8g6ag)Pf\<%1h434%d LHlNe\a3MH4t_=o#`&`f@5a%j4oe.Tjp0Wk:83G0WY1W/P_F8lPd(oK%/EK+XI(Ul U/dOupqLFai4iO57Phf*[-!.RbneMFn.u30L%V-KJoKWnIXbD'f2^aP'\KOuAg<1` :&d!Urth!?(R2oSQGaN)`KaIN6:XjPP>kbUKH`ZTQdda@s474>/O9/E"Cu?F5F!)] LZ74WbQ@g"]ij:nL/8q)*sZ-C)T0,YiTtM3.i_"tEeD385TnbKkIC\"^ua`=I;HNN Bm!9Ip&q-B?=uHq0cj74N[bK.'`,^STKNuTXuQn=ZT)!4B"[uqGg5MAam*!eV30R+To?&Nm-?f+ 2`cuTDV]fGp!!`D],nGop9\u*>HKuY\*\RHD9)P@45]Hipf@-OV`jP\HYKtc3*6"* f(sI6%2>EU-ojFi$Ci%b=WK%smE8Z"b#n%%\^\Ju%4@\;*^+/n^T;d!8[`Ju+#WZi Zh5*\F_9gMrr12'ZC"dMRDcB_B#_a4bTO>>9BI+=Ql4o*:hDK,j2j!.Z#H1Ze,F:6 2JIN-Zjeid1?8DH^Fc#(Ug<:hh`>clgWLX&^\<0Nrq;pkhD!#3GDrr[bfIr*YRl)) aN6_+%PmSl-9`(fTZheBPtsCC%.Ja3K',@CrO3HBp7pHC,Nk@bXu4bcio],3Q9UUM q=8:PA"1/-ljQ%&HLe*Q(;>*sp8]!hql^!ld=-@biChq3pT70HSK>C#fRM<&H"p*^ 3@%A-Ee:#(;e:NgnA,&T9$^t6$Wmr@N`#uli2pOCW_fFM!WHG=1H2k'D*A'Zm3lCJ ,K2&.i0Sg;'`G$JlN[3a2gj+>)hIq5f4+QJVWGQuK)NGiLsB"p>P[LQY5B*%d(:@a ],BaBe))fGqK43cH7sHR=#S2qkY[C1$M>AmA0_X.j4)o+c]p hU^[mO:\`!A8sE";apBER%YBfJ5O"@5m8Nmf`+O,3b_Kh/;j(K"=QeDJH&\5dT*IZ \q%2]lsMK.N;.n;H9X7Chi@;L5RREJq<'YlMK7VkJSG/5-NZlj,3"lDFmj=jCb+qN>F"8FEH,q?41\p53O3N/No@&NSl'drjr'0rUXNWgTGL&kF5:%cP ^K(]WT,r)M!L"^@6Rlj7M!:jJiFmg"4rpTiIg,ak` Mfr49cnD:ocLo?Cqc#TOk9(A@^D>2"3\Z%>R,9sPm$MSi>Vl7:Vje]*C;;a$[#E+` r+GNg?OZp@d`?M/GI]e,nK3bbK)DsCiT9FIg<(8:\i`S/!*TACdS;V])"@3LW9s;R L]%bVs1k"pJ!<#O`eOheQkIgZ+J,'d/2#$e!jk!77"E,+CbiI@p:o)5Oc'4$5P@cj"O6?"Qm2cbWgI+6X]H!E=&Hc'XZgFnBS$N^eJ/"pe9U7_1!PP>d ?u<^,i.10-[()Ul5-?Can:X70W$iLLKG)^H>!X>T\^HF8@'t-&XURh'[AMR1Q8^nh 7-It7mT\Qef[q8#g_ni"*BA7WoYR$D)p[Ce+7D3SI/j#9bL[`GI%g/Zo5.9n5oq=RG? T3e3-Ih2>sl@8:fmKLE+n(/Vf!6"n3^OM7AS!SE8H9q%YB;@chMY\]][Joj:XZs>1 otu+]hmpGhopbea\8Lf8$c?=81\Tb`jIJAB[r7>`ZoNGHD31'52opJ!fX?@mhi\%2 =eNj&kN!/bgRiE1/%c84i0#js\92OnHB]4m> ZtE]SS!?$HKuEnL=Y\j'Q/jpkJ$2=.,/A!05Ae3;$sFCart-&mR0'"G6(aj%G99*R ,f@m6s'(%4l*f?4MHt<##C?\Eo^m\F>WAH Re1\JS6[jr8&X*^`P54#imE;S>AS@4QK]1&Ufoj[=rLAcpW7+?j6cfO]rJV,25[;I !7er8,G8B.Dl0Eq9%/UM6aDt_GT]sB2?B1D-UP_&b1-i(*t _M("ldXm_Yhe[!M_gh0*.+/c%oKhRLnm>N@h,p.K?QBAj$=q3A#T/7$Le!4fJH9Eb *0+Mhs+BT,VBc7R]Y5!'^^,sNiGm`LUgS4H0KgqT?hc_baNt66#NWYgs$)DA:KO^o -c;R$oN3U"%J!k$G8(#FZePXJnXl"p2VXYA["8-hs0ht5r`95s;XhF[/8ti>XoR)< k;`E7XoOsL%dni2n[%&c-C;3hl"P1J)Z^QS<_!6`!K4'g^J/Z)>!6]]J,!`+&Rce/ L'W;F+HhnO'M)h85U*=(Ut+sG4KF?PRM4A?7(+t`glYc($=m1uYHAs3Z$H8kp@1d; 7rLE@Fm!*.IAbdPT2L(4Pl-Bed]`'F?J'+>FgpYYDV;Y673CsZIC.&ipa#]hjr<() f=0*c[a=p+`U@]0^:@DGnp8P:)k=r,,S+almb)9co>K&2[^pD3lFhVXkH:rTHT$rA Zef]j>5R+njm>q89n)dFp=a:=AS3@]:\NtR[8UccMMNYsR(jDNX3j6kR]An62/'Q* c.5b`%EsM1`WCepRq_#hCg.cfL_6bIcf$pSP[348mOOj9(n3pTBM2P9%;!epEUql_:NCS47sJ6FbFd 8Z6AdS75DW;d[Vm*'r:@[)>@9-IV'cbQZ'kKNt@45QrB1abX#nF<+kf!Ne;TD%>:] Tecal:-`(r;V)8SCO,-tVS!9Ge@BmI[LSk/+_>1Tk6+70JjUUq2 jH6oWkaO$`?_(a+m7$='G>c3R''%S>YlC'Yj^AmF* "-9#kI;jDsY-$*@2hnJ>4XC%ma1A0[`JHPF`6;tX5I_)##4eZt-cPseAej_oV/K*D =AT/;eIbMK<8/>C6OKdNM:&>5)HBJ38Ea&FK.;Qo!>XDlaS-pp-I4a7=dKi#J56&t>BNVhe(=QZ*YD!+if6bVo*s+h1pn*'A5r:[]J,#Yo)o=pL1G%/a@GiM9%17[J J7pqC&KkEja>.(9g4M>]&s?!Y%/b%1"jKr[;:Ld N.@;Q3J/L;c[DH*-&H8+m)9Vor3I"8q^f%'9nE&cd]ZN$S][$u&b[UthYm&1nEJUL r$HG6esqc0A.l#fWHKC#!NYI[&-6kaFK_L#/]Woa@pPI@=!lFb$?RUXSI'Kf'`TBCqBV?`bfEqcERfd_Ho(:0T62j^Ye&*9l_BRk7 @kaq(nDE9lUk_/tM:;OHIhaI5[5%/8!Csrr"FZ4)(nLfJ7`)u-YHJc?D_e^@o"U"U ^OMV,36E0[jc&1)i(_H%kN9bAIn1P7FNXE/?iIG4pERK(iIN\'GC]_lhY*VW"8ndI *_Rl,%f:`%gJ(eqG%\-OQ^o^+6S 7jj>0\"7eTV=:=HZEGn45.8[`-nE"^X1U=EEq==l9e0Mbc-'D%ANOeQ[,$j^]/_@S cH!]NhK[mZZTDB;@^ogVM\T59OL_+uBrfTs)4E$BA*%C2Jf:Va`[]A(2.NYH0iO"m lB&H:A`VoT3@kDriT4!(&RH\W[8>&;B`0o5U7\hL_)aYbI*kc9PHFgB&,362jIV%i hJE&kCYe`'p-3M*ke>=#qpn:*?5^C+h044?qrZ8195J:D&fbJh4pHtC1nF-\[++O(is3m;9eGn-9%DR7Dr?!\5 s5.n7T0Fq)knD434JM[Z&$*HjhpIMQm/#Ef?*E,3o?9)jO.R;;E-LBg'-fH=%:!0+ 5F^rkM]LU\FftUFQX/m`>nI,5)jO7qKDas_LCE6^T9_KNS2533N5@ZWKR`@,!"k2O Wl9r_6IuQpruhQ]s8*C9;F21]1s;(pC!%V%1(F_g5\<4^A?,b,C-W,+3n3G1+jk%d :B5r5(2SZ6jNV$E"T(glLEQR$o:H9p:5&?&&$-#?r)Z/_5&o-a84!5([l!?4,[E/J iK+.=LHKC<#>?nF!LNc'quAH9fUbQ#"7hd0\)k<`34*rlLq'GZQBKOUASXb!4ODoQB-PhgI?DV#??UIbVNhC=Z1Z 1aC.s6,ibP''0)Mr=A8@J,3-Or:0(Q\tKn_W7!T,#5NW/gVNer%DEN?$;YMS_U&>% 1p,.O>RL"2niU>CrT`*)SZJZ,iVoScWo[k8C'9,ct:T;2. "Aiti-A1:tjQm?IM#Td<^'N=,AHVoK-^`hGj-WZ%)iR*!Yl-kr0@8eQi=p6X)I779 %bP&]TB"l3i.!in->dR^C9W.jIUl'JBsp^ ,Seq:\ro V-*'VdFRV.lKa)Flho1HS:\)EVS0t6Xf9InrfTf._^._57\m"Mdq*3e"HAY=JJ-I> MY\jME!7/Z6t=csA1`KSJU0r?aKVn:Fq3!EB8._6\;ZhTU.d@Hm:'u,jII-an3XoW #t2Q<[ea4A]K7=C3tghj1ECZmGMT[T"5K=3]fk2">N4kkd>mPJ*S4JacY2DfVZ`Ik SE5dbYb]K?GJmHQkmOcoQg"8fr4bL*F:9,i[R,_\KF3qt6D[Yg&gaTX9F[8h_^Vh; J@6EDaTf+VO#^L0^K8\8X[5)aBWDha'VUM6[!i-pjPfrbYCsKqSr&MVkWmHiU3E`` :Qjp3>L`[:O+)7&oe-hPs7&)?pWjTQf?7`t^019rf;eTDs%tBCs6<+6=$L0S08]U@ s5P[rGSb&LmpE3smE5t=nKR._cguYVPk\le8H8,$o"TH@p:U\l5.R`]h4*/+]@?Mt q.#JWl@!Vai/[J])cum^Vn,1n4-?9WrjGg&9?*Z!R,oKDg98Km(np:$h,u*[[OIV] 6>E-W3Mtm*Ba&VT^)7ZbqEg*Tpu`/#LhW5-PY2j<@tV`!=AO%qP8Z@HS3V&J=R5Arsb;"GFRZ?NBX% Z5KFl^p,"-rc`'2%YMi:'Y@$O[or"(b!H#5^``aV/r0LQaK#UCQ(`^P&lM09l<$Fh O/eE6Q;jS9I4,.^rn2Bp-InMZG%D=m`;b[5)m9*e>mYF^gs[-bF[b\'@<:TtnIP1l 6Leu]<,"h`MaR'3@28QeY$V3[s(V2i5P+iu7/le+MT%cl4%MTaC`L@!IFh/NGJ5rA fFcYV-M1S8_pO^J.q:W/20T(8@n4\gT%(58qT#uq`;fG8,#\?⪼OaH[WrU[\%YV &PW-hT^FT@En?paFYlOjK31gLIR4),./*>4q6pCiW^$f`-@eCj:u! EQ9F$PLBU&s89NoX9+U^+8g&^2U`Je[+VQ<[/XG*2NP2hlY<>!Id,fej=!1hl2/-g VcS5%s3iF0i-V]jgHmNOLo43l]'KZplGiCU8jWGQT7d/XE5<(=&&c"D0Yn2EH'&4V *9TWkKHcpops1.7%2%Oj!$$U.b6+7u^*a3K(PDO?r.Er--n4^u[.)&KJAgI]H+Xd* m1Hrn;O:VQF@l1G$9W34`7pOLf5HFZc:'7%Lf`Ap/:/dNE]I(h`(J.XCPAs.jLqsX 52&<[3CWo)/G6o%kV(5T+.bsZ4&(-9Qgq0u`](?Qf@SDs=`bsD?;BR0,uXNB^\giF c&M.g$VoPmVr3eAM*M;J/]Fm=0jK%r#.q@K1*lUh:nC&`bL=gdT:k9T]U:"'$aL KsERL[0EbbUSXi(a*Os9mtj@& WYU$LB7,J>qgKP,rqu%:o@HbYq85k%IseZ`ZR[o*]j69Rr#a=6Lkl#&IG"1;nPB&^ C'PV^1DEOa12JR?1Oj`7Ap! !P*8Lk+YcS,/?FD%PF\(Mp3LKE#jc5O/G5L>r1:?-kf'M_PeS+&3%^o3%TOf?4IMYTOk@R$S[K*a-+fC '`h@K^h+-=9Oao&ij+@@[oMFmMqnl"a!p\,A:C^Ei.D;sLP&2[!gL5$81%P>WA[(( h+>d3?O2ohFJ`Q=a[eMg57ojnpOiLX@]h=gr7a8bk5F;sZ(SPN.P*Ajj-3_+Y$;lG JH$F@P`%ooKg?[]oDNEmjor$o'VG;r,[5on,:^mHg,@XDRr&JU[mdYEEPp22l$1d* I)XgQC-)p,foH.aeuiQlc@V"S'=)"lOuG29Vls$]j6KZXO^.[Z#*@5R[K@79T"TQKuF!6s5(ShJO0"V 0GdoCl"P._s'uEq2Za&",@G3hYlAS8A5Th2Q2!QVk_b(SOl=W,)L@V8j_W8c1>2&O je%,hn0FC9PMYoa7c+lTN[N@fl4Q]=J7(_3O%I"sYrKXCY'";!arqkWA0 ;W$dVKDF>0U!q81]#5)VaPhfMfP[$XXWiZlBX[ES-B?@)i3cS**#1!,P*\'!kf:Z53^7;^eo?WV:2/Y.is6PnbDaq)sb[!G>T2o$JGX[WbQDp6[-t)>#0JuPd&qdS_;%!ZG;bKW2 JUqVK!VqO>5d61SQ_A@YMO(#*"\Mdf9KC8D//L#s"XmZ,;FaQ@Ki/UW;eVSM2Y5:p 13>ksj'K]e-[Lid0["^qJ\I>DIYcf7*F2 /QP#6rnr/dr+Z*$K;L:1J)7?Oq>ZMZec"Y]%DR1fn_]quro,Gu^OKM`\!KP`l[I]7 mZ`*HMtik/V6=3)4`e3rOcpg[C`^98\a)SfCF@oGmV<"%a)1*t=VWbAHs3LZ;.Z4u QtN5W.B.;RC`!s+`[%E9M/cL2*eb;ig;d`a$0e,h:uO$7T`n>EOGeXV<^AADdhq3D R)B;h1iAR)*V-!nRW;#NUe?qo$^5IWas0H(GSr/!ZQB=%=AWdQDNW9\$oFc\95idu]7IpT8!g^T,K)tf&FQYp*?AR(8&3XB2n$9)/augJrjU1Q+9KXDY@^2%),ZS3_#?QS!$_H^!>R29 \RATX*`Lc>S"2>eTd;7>W;3ccSeZUu\t`oee[Of.flHb%]6f)BcL+EInI>B#mJ Bl>VNMq?Vtn?duLS^Ch_ptnU>:OpdUe?NPY'9d71rsDrf0-qZ@`=aZ[IkZ?p/gKr] KLLDQ`5dPAqu2ZHF8cCSr(e!dKd&YK5B,P10)-OLn+#uMDa<4i8I7EQ6P)Mj&*=CW jaiMPPl4GJ4'b1.;dcp>$+0NI-Bleai9U%U]ro2MYB:[4K'(LgX^KVGGK,hjXZuig +S5RMRkWL?b:SI6IAc1IKj+eG<5J3*P_m=XG5FqiASNQEA2e`4u M5-D(bU6Ysqoo:'/estK0&E$H?^n&uRAsVcBj-qdY0QRq\NIi;)6_AHetrYOUYTL4 NY7\Q5f]X3CXHf5Y5Gm>d*Y0L7kpd@(q#T;3_N:N)*1glGm)@@Tqqs(BV]GajP_ls ,"=uCLb#I#RS(%E;Oo4a*%goZ[3;n3cJ"l75H-*d2--8j1nA^Xc?Y)Y"h,=.mhDA$ o?V-iB,1Vse%G(A`q)OhN!R$SFe1pO$'Pe"`1al.X&>5q_L%T]o G`!qW.3hZH!,)VS,uh7)MA9X\q,B0]`E4P.6no%f&P=:T6K()"f@6HT7EirGH-_H4 ^M]].%&+h/nUD>QrCtLc\srM6Q]M(4WVkYg:lOjg\PiCj4*>e'k6JE%r9NS*J)f)R RrCmerYPM4l'jP[_Y6CJ62giL(E7hr>gq#kAH2:!mf.a'qj7&]^Nhp@r>YNM>nXet :A32?io.#j44i2hca9=%[;?,Pr0'm'Uk@9L?Z*8)8BnJ]oNFCSe9L^;@g M@Cf)_[ulS!#YobV\KaDA/5<]5\OI=?;O*,#F]-'OFKd=dh-W.L$e7nCOT-Qo%Oe"(TC5\u]ENgm#La/3M#?Y(.edbcDkSb[CJ,R-U$Q--@e4M`qR1gc]=pI: cef8'o_.]t+:Gb(&_7uCV^FL2e%EYFO^9QY`P9)$MZ85,3;>]Mm8#+6s&\E$T4H7Y QlfGRNY;B@Mn`anHMA0CofJ_bp\hk*Sskk(:ZMER6Y"!L;*k49Dd\Y7p&FLeDgYeL 2'n]ZO[/jU&TDD..#n:j!Y@h5UDb>l@;R1\^X(HuGIIah3!+-lT1o)@M#dBPYN)VC d6tV\@Mdo/NW0@85W#Y!-_^#UADXiG*>R&c(ES)O^_>]&@KPQh:m+TVrYH.Ae+Gqt pcf>NdJi<[s)A/]aPRdJqBPP5Uk,HQ+D!c"6P7;Os1K&3>=?Z,B4#4q8R(=3'Z\FOX1#[)cFgL?r7h1o]0iY)A'DtlN+]Kl>2H`td78QI >A'r(Sn!6<4:D)eK6,uN]`%\VQ$P*?hMe*DrQN=LXF#)8f1kAo%'io\o@(CLM8%-b 5]qIY/j<5V)ls,S]f!(_W_ccb\$ak^/2.E6$OpdT$4W9[YtnF%eQ.K0$^&";.8,c. 'Xa5\>3SN7=9[uh6A*Vde=l\-Ui1i#!4`5+^R,V!0qq:Q&N&?r&oB&EKd._hMm@tK Fe#us>HkA7]PXT.Bs-@$YtmBiB:Z\V%c/'BkHqea]WUMc@cQ.0L:u!'c/WB9/]D]q T!&>Yb:%-L_jEsY),(KKk5;EXYlAhO[f@ZTm.lm@!',t!Wu,IMi%7@RI,rI@JKlS] 6pW.,0Mi=S0L@M49I";;J^0LRS(Qp*2=mgH,;1_2^#Pp&PsTsd+8Gb0GNA_n_7\Yh OoJe7(]P(Cri>Qgs.'@Ag=ll*Gh_CO`;^s0c@Pn/5;3"Ms8V'.g>BSK$i^1fZ]5"S 7)RnfDYio%%6qM3mZX-mmp9gXr>b^f?/D?GU3kL&[q&GSP0I2sFk3=H3E/;&b,nat QP>`G\RA+)T9SUf,hd7CAlPM$d>_Q+6XPWLgHc5*R?Ea>^s"6X^q;G4TE%<:EZhk; "[X,1:aZeCV96.Eo4g%clp^tU\nJ@#EhM%E70*-eGA.)H(9 ^L5;:>kJAgh;YM/P]d>\%Umd79KL*Kd[4;["moM?OTY1g_#FFfaJTbuQ:/+[`B!sN r!@l8Il[W63%=@J+RFS35@@b"puWm:73aL#p]R@P8&.Cj.:D.>/OI6j'-`:E"S2`V8pV]]OM>B,WWIQ89l%i$(::O0Rja7J?G5'f ;n9;NQ_rG"%kW=[32nT*Wq9e9L]@mt&W"(*5g"QC&:Q(\1odpAWuP&Q%g9J@4f7\l =LqQ"8"nkup@b*eo^;thc@cDJL51;#O^WLOQ`#H*o'-RM6W"^%:]/hP/cdPDaDmCs71=2Jk^8!4UJJ=uZb rXX8-_#LZY(\g4YlqOCNjp1MP!4gR-5lN`gUWl%`Whbaj4>@/`h\?_`_a;-N&qL#H 7R5miM?4)]0I[DX7?Or2S.^Jb.fXHm&;"/[-U1#u3WFH=GjGP3a79atEnV&Dj?P>D +u'9!2BW)!5q2?='Due/)K".,7Z5&ik3G_CNK-6NF?.hOdlr'IGhN*3U"(tcps6oAPhqUVlX>8[+ ;K%69o,d%hB')8Jb\K]c-]XmB)`-2o,hQ;YCFeq!QMJ*AC!-DAjaku'LbPiJeVce=\PfQ-tib;bL+^0e6@o%ld8BN>%/^$ (V^?:O+WXkTFusJnQF6/%[7+r+%)G;Pj(]k&U]5lb&$%j@`aA5nq:>=+P6&TLV(Gc],6e1`V)+ s*O'Vo)I/XdD+J+p[=1(s6%i7IsS(&MZ9_aX2DP1hh>g[nPeFs1AQElpAb-N%lJSs 7*D4:'YXeLO"Z37^A_K3Y5d0bF[(/Up93neq>MsG+(!jof(o0/p?KA4U@EdLc>@:3 V1eJ?7)%s*X.KENghjhCp?CaNRORL<\7B#I9NW8M!LaTTTH+e`L.(nN0J"u=Lb3+G Z6JY(P*$%>dCk'K I=m9X?fGM$g`/ds"H5[*=TI)k@Yb#r"-72f0!WSOEI4J]r*/mjAV$Ku(fHMEM1A.( 3>0=%%u4?X[32jSK>-K07nkV5-eD;V>:Jg+M"`PLe#AuJYV.Cr:P[]90k^S%f`-RZ idW`QLW\L6U9ICkS^Yj?q<"oY/Re"i=H@C1Nbs&g5l7IrK4gprk@6jqiks@n7Y#9< U[Wpi0>p?+`^W]nLA!q9$Zj1]"gMA][9D'T8"8,Z(%`N-"FG4ha7Xod$QjnfIl0#K 5KB'g,M<45o04uE$':LgH>L$"-<#\#f=&3=4?]m:R$!G)8ojnQ)TLk95;OaVT>>_> 63Q4fLR.!^N?T/>7QnIXhJ-f6>As_Tl1kk[J&p4Br_LOo6NeYJplNg$&hD%S+-aE?AJTJd,EoP*C>rq@'g4L Fn@hV1I@SjFNk7c-=^^-f+(IXdFTp(mMe#5WS4okoA-4\.a!TIt$Ml-1%@cpg*S .oB-ZFN^$]fb'])hkheEfHhB(38Z8pl$.GSs&:io.7a=_N:%ljB-FU`L]P?tq9)EF MHKEn#,FM"):\a>5ReX78(6CG%V68L:'oAsVZJ=^C;pKHa#ifod+Nik3)ad6Lq2-^`:"fV n_)4e8n?+8"t!A6"u-,I5T+;C"R(RCqI(Nf!CD*$=Q5^03%(C9OLZ_n SnY0J7cp2*HKPQC^ca@E/4dF3;W!WgW"B2Tih0T\.1e7B",?k45@ip)&V(f$g^DJ: LYFfq#<1o.*M`\%9S?HZGUS7.6M,"G)>Ik#!\cj#YR7*?4qP&X!2BEGY4hB=(GlIc 1dM4.?kE*T!r!nr3R>1\nncePSj2:c%R;3FX?$;8IE7g=L=9X5OFG7,toVc[ZYK/ q/q/Kc,%')U.67s*I03RG]j8(ZAH<(KAM@hfL):tTl9AYrVtd.6/OkW^:o=c85jHI d&VWfZj!)\G4Q8+Et#0.UUV9cdHM?CAj-8nlhLh5_NVkkE1$]Rcnsb(s*+\c/A]5r @n"V%,%aJ&[QX/qU_Lq._>c&T$.W9U[9'*j)Dor/9s]s_aL"K@*bAZ^j[c24)=(ZU O"rNIXQAl_e_^5sTn89_r3`g-[>?-/dfiSJY:c-BC+F?(5@\21E:U/OnS`IbhrZ?$ bu/qQVVo%b]PE7(ViNUB<6Q$]KrU9K!1=Z/rhgq=2c*0MK?F.cJV?#d_/oVY!uV\+ dl;"`!k\g(s83]`"TNDGd)?oF5CVQMn'/h'&)Drsc/eir.I(iT8,mrQj4B>+rVidZ cX&0;qBj:uQEKi4=$Pb2c$pl9HLUrIn$0.tn`6V1F8s!]$hF>XX4=t3Z1?Mm`@2%7d@I*+/ Mc6.F&^L._DgY)82B\G.i(jjiB*O(=!s3`,#T+7/$jsfM!;N1H!5+rC??kWo,Xg+NjO pt5Lj*l]>lCAG"9Sn!dnS)IPKp':TsPQ/2nU]2oe4NddJ0J2i(Md/NZ^qhRA!R9We o)IMF(*U]?584.qco_!?A/Cli-NsuX5dcXpj7fO0q%*:.:&CPH\^[S15K,r>GAC7^PS"ILN8L,"C27%kWaJbB-#nG[;Iqc&Jt^-/:Z8t(ckr&6e;g]!m&YsE4* bkT0D"PE^.jbXpX-?!560n%O9e.$1Lf<7qV>+UCc1G)0L>+*p6`%r1\r_`\`ros2c QM*Pmr-7-qTD>^S*el'upMTYD]km#$P0imD8@aADq8!6cMm6S>b6"9&h2"+DQllQA\\4$4^B:JN r1*QCkCANL%Ea)BKg2XI7%bAndJY0l;CNG\qtpf)8*4td]JdFCb\S'Zbn?"=]P&!1 kSb6oFYiVhF,Mo6g3T`4#$i38]18jNAsACN J.T7NaOZ0+%EMAdeC>SUe.ub6o9ZKK(91JXW3ZCmK#E=Se]E/sS.;KmalD"44N(>$Hg=/:dTCR47&Hf\Cd3H*TQ^66)071]9Q*qnYXlpb?fUBe0i ^);%I!4pgC&+`TKTKj[+;'9r&KUAES4]M)f*t,2p'0oE,##5:aj7DLHp-3p\'=hd= #l,&I7Ed#dX>(R("nZNT9#`XhkRB-?H3jI_'4:G0&%>L;q@NMjPPDM7]]\nR3kWSt US^gOi=J3MR/Q9)m*@k+IgWm)H]=Z3gMlh$9io*LqKr-Y@; f.U,%gU!1FqGd,P5$IWCqoaJ68,5)]/:R&8rYmroo&YW_Kt"umcM/nJgiY%b#F'"2 'PM.T;\Rs6;>/pee%e5tE*q(-5C9bu2qHVDHcNp%66FU"^eH8.1!S\H?1BA_e NW;i$^^_5BOA0-OY_eDqZQg5ZeB3X&H2G:*M\".@>EJN8kj=r#U_?O`i#AC++ZQ*Y p\Q0^UBidsoTPS*4n(C$Hj1Je_QVb&KMV7AR@C+"`;^)85Na`YJ*Sr31da(>V;X[i !kNZc@?I[!BKAN`6*"]&FP6qO^<(%rRuA>nM$nk3$!&#&Af')?_Yjc089-]';O:0K ^V$n6hl"7?`?#0oUnM_-_2uR8rDn43fP6aJ:6)H/qVO=]a8V]s(e0eKJ)c@?0J#!i a\3pWgSimkVJo;2]^sA[D0s^dZ/Y!&oH)frpRFnK?d+O9=rmq3KBGPq\#`B]\hSUP c0ZHk[r(PSlc/iSlZ5"gc!#71RpKM^WUX9*m]M*?BK4K^O5S"79Od5Wi]fM"k5WW( +[#QrNMPQd+TH\.3"d,8q"e6uDMP"aMuHdR:FX:2Un_F/E;lL*IsapP0eNM,:JXVr AgGj3'(Gq=&?j &EN;Fdjm;=gc>E7h>a(Ni3<6V8HFhO>5jX$O8(pRio4hT[/Y.!mq"TEj+&[UJ7EbC XDXWS,IDedDSMEtMZD\.-,b?3r;ibH-[0oJ0"2Pmn$%8Ws,6_#cosHm>&.e,>'P3P cg0X[4\\L4Hdc?4(Tt90.(^d2FPh+&q#?`q"YX^/^:@J?[8R7tT$D]O1unNtlFe4X 4.FaSX6B45og/e0`Ikm87^p^<9>bERlMhWa&Ko3P= $H?:.=&V.ni3&6SL_Z"aWaMYgbrubdh:gO2X.GAG;j(CT+] `HZ[7jRMRKkjP\I(N)6+d['0kY21nj@$kBK:2i[X)[;$8qZc>4Hg:o`RRVT`_`aNP ?7r%hGTV.8NsAqjNduReXp#ps!9OMCcjl!A$mQVLW0!g*F^,"#Vkc.Yl]_Zs9(ks< GA.lgc6^2//+i$.!0lA;NVa/)n:/60j\PeM#T7pGIl[Wj,Q_F5/tE(@WrqtqJWQ24 +D0ZmIc6Cg8Up8UUS5`CS6o&&r,D^.4hCSZIdHYM>gH3.;*Quus"TM>$&/bpEKXh# iYn`Jn4.,]jT%^J`;dFE`\14caSB2HCWo4taiq_.Z7S1"!dG7W(5K]j'\Ze9]3@rg *!,Q4RfNH(GJ_f-pUTAd\"(1.=:GBQ.XZ]Q+&kl!l_ok?C(1IeGmO. -%07#bWIA]N6.V($MTc7Yg=$2G,3>P=.J(oHp)i85*5f@o^MOSj#=&6lt_)lk4TIp GAbY;mb46;mbD+Omat^QrPUf$J_cu@(f_&eZeO%8omac(N7@k=!Dre0s0%M1i8k8m huau)jQ'*!r.thJnaH#-@t3k=itffmn@r#Q%fW)k;,'d-M>om@3WHu%nGhR:(a<@. ;G9T2)#QT[0*D7?[7[Cqa^$U=s42hWhAoY)bFsY+_!`R$!1j7S'Ym,@r54*:O<79Q i"+W/OaGk]QWjO,?d8T-PZL6t^u[WEJ,4s*52PuH(D-UVB_dFY>U'2UOE2Ooo$/m- +9#bg1thE(DalfV!70pG5QnlP!!N)C_!RKOg&Z.V!E]9-r1,Hs_^Y<3`AXdH2A$9h:%=,:JpSPUu't(hHE@OA^L$GoTU.T@RYJo;)_7CZ[M%*-bd/< .]7Xqq@([SZrD\?.a`&9ROUVPV3oA&r2T4!#p0*,r81OCdDLG@.Xt;%&jcq)0GLob g7%TEKnZ;%in:aQrUFq*@&7eK.PtJ&R''31f.J^WY:N]$<30cU=1&dYMRF_0WrVsn :"gHkfFUFNAZ"[j54*h]_N5HS&HH):p-3"'l/LTRp:o(-L]:C :)unLega+ZbXXTM1*11=4u^W1gVikfSG"?U%0]iL.R/?E(I2B$Jm# )m=_7\b^I:eSjq@rT#A%>Xo^qcE*5o3sS[r1>VA`FC2YICSJgpD*_l p>U#J=9QVCCHLa\X!J:qo5=3,p)NlG;fP'$iL$[nNn;O9e;b!hp@ZsXpXXH\e9,ue p)e2il>@O*Ae4X?+UH)63=l5VLX;L]IBq '*&UE*;7-jY2P;g*V)EWlT^F1'D=Z,CuH;7>a(.[[c7Y7V#]In$BWeHkjcJU@",oW Oo`N!I_4$@;g:V-Ago<]WDb0aBZ7C`O`aE8R?[dISW4SeAP-O*<*C[2Q3eG^`9!Nn q9tVDW=-o,hnKsF4I6ntQlW_WFc:#6%M8Wbgg);jn(sJIkN'Ln]8MGH\n?6OmZWRE >rrEHUY9E['E^@%]S"l2gqJepkdWTU"VYJDTl^RQL*g)BSMUqV?DX\'&7F 17GdrqT^B]g\aC]oSdg2!Y9bj(]VGRj!-n=!p'7i/HDdM%6>6<+P>I=,/=QbVkG># jg;(]"n6e@KAQ<`^F^F=LD0_2"n7:4.p6)/h*o*;=2t+ 6EV.J5SdaT$C=i^oZ6C+r9\Za"2FFR0j"q`DoR"JCJAWYM$*<-g4U6>`9@o`mfIPC !VT!Ura_u$I&u>iFQpIh`K./;]Q]Zn#^C\(?.hKH YFl[Ekii(ne3uN.ADB)d\osIKgW`u?@jG$4J/C:kPc58Hs796(#5hgt9cfJtE%r7Z 7_Qe)GR+,eZMFn)<'iQ,QRbet+:n;g9+["?j >@_Agg_CKHh9=]ZE]1!nl^#P5F"OV2Y$!L1A<#+WF'Zd`T=-Uf*=WtUL:ok.V-)PZ l+5'=[81X=5.atfg.'c]lU>`pjh76OYCt&\QQ2c?J;YSq4lMgamC68H[4^S!ZQV2dJJ)Obl=no\"Ma+q/j86e)oLQRg Nc;fpqfk9kIl;BL6bV.P,IIL@ EkhZnWh2@;.%&od5AtOt%kJ.tJAi[LcN!_qTj^&B%\f@&R)\sA8KM9._S^Ha^O:Y@ rc`($DB7>Ef_7TN!W2j,)V>2^57fYj"8X>G)%](F*39Whks\pkg.RKca;g%lHO;pE ]jE94JG-Z[Y#idOT_e^o)Nf)tIVESXDqUc\'DZ^kjPMZ-eW4e@F+UH^B[T\^%9"8& <+@N^FL+\lG-2/LYF2Kt(?[AEo6#RqTcP?IchUpd_#>^s5=pJ2!tg'go)Q*aLqsmW i.(a:+94so#o3THNgs#F#-gN%nd"c5/2F\;M@Z.086pOFr_#TD][/c.&6l$Njsc.0 >%sOigSa0*R8+C`X;i>DVe]%pg9^LU%<(u9\Go6Mkh=6/0)IRSn(=5f2ui=$]t4T3?X#oMU_H:MG?+:FuSgF,LFeDe]$As81dfI*!VDl3lMCOr7QNNkmN8`*iD] kqera")^mn'`VbqQG;;'U"+9:0"'!L2c!-unF1oA%tAWj*ua4X'E!nOjT!n9l23ZX (P_^Wg^%gQZs\i-$XO*>g!!'%!Shk+cd`ZtZitkSl9ceH#mK&Q#@FOhe*M-+]e5#Z .! nd"dP/bSb40MQjDa(,ugS0G",Ci`3_`7XQs.B&gDY5k/b+Rr&e/ Y9;ujV*`u)#l@T.l!g[\[cOLof#sXE;=_q+ aU9I(hDeGUjnt6bY/u%b!YZaX\q%7ciiSnmXAU^Jd*lFqQj5cf@GJE7]Pa6b\t?7T 8YoUhO;'_NaMOf2p%3O$'kjn)0j]US9)$.lrQtO.<^_(r0O%1QW\UHYPS09*@3n9E H_d'8ga/ua=&tB+eh-SQRRTM"oZf.nNR[81J?TV9XhJV$D-]?j9@D'(# ^6V*(#,rDTN$mf[mN5nEC;rbi`_2D[!?,T9,nE<"U0-n&E$OG2'!%!bd5ln1bS]&cn;D2Yc1?`$bP^>6(6jci0R7O68a7amh=Jn'TP0hh`-W 9Mk+t!TJKQ"dr0IJ)GeW&Us/#7g#jumQTPfi)mpU+F)5qCi8?Y?iJ"A\hUYe!6mJm 4+[?+d*=I^B,WY6q^ftB&c!+?n&p3cJX@OSa7;/+f`:HYC&dMDD"u%G0\El>Z@CVh [r=S8O;,JrE6o`=@O=W=spam>IV6+665% c,p(`1fo'@;.*6:d4#^*k%.'GL@7+Cs&=C8I!YS!Q*HfS9S*-13]RT1^LqKahGXgV T:UPjbQ@:lfu8`l/HHBSf)Y=!_)!!m"lOkQkC7dai-6[&'+qaB$t1g oN3:tP"L`['DSqIOFJt6n+H?7S]@l+/sE-\@-f/Xs2&72m$sO>T+qTjS583aei*[X]b7OdPn3s+MooU0H(bCl#k2=$L[_k)?C/gp<4X(W VaKb%YHIE8/Mdi(JD&&f7=`;Q\c5%(s%*T[47Fg=As;'M7/fs5^APhFoIXG[q#2p6 ,HYbVDa7iV5Y3U2_!PNS]*k[2i:JG=#P^Sgr\BC;$K_SP+V+?>dDgU\9hPMPj48^:78\]_='7 hn,3Ec<9;aH]0I:kk0)j@Knt/6VmKULTHHHQ5DPS;K<`)<[oXj/g:!3jnq>? :4`F8l/I2WpA\MTl78`l(GiWp=l=d@)&%mWIOPo\Yb[84D1^1WH1bi@_e`,4ILNu& j4?hrAm*]a>4\aiKNbhaJ%j214N]/PgLj+kdX*a_Al8rKV,-Qnc_U;g"9Ka+oT7E4 +J;i@d$1O3FqK';`Eq,;O>bEO"']A4JJ&Y=- K-6g2J8^PXX:"t($gZsR+,84X![N(q@$l1uDUtW&k s7">s/:[OZ<1Sbp+FrF$Vc!fY+J;n*!'/c0W\Qu%5F]a/dNc`@,XJ>m3dO>#BpIWU O%J[s8-f6k1hafDg!nsA\C,]([+1Snl-&N&(A?=]*,Jq;[_?;,L@Un)ja6mSf*jt, YJ5)$E+n$Oo)7*6r+Rq_GLS&;ktN+^_"h ;5nS,kD*`cXAf0r6NEgS>Y(su_Z#>ehe:4\QU6;n62nh&O9KNK52`a0G[:,o='j7C =67c/#uV@3;ZP?s>tnapROT-pjC@ujF+SiYi$SoAHt'b)QD?des+9/1s#7@lS(km? #U$2HadLHaNP`8Q5*:?!MMp4Q?7^R[^VudYZ=fOFCo[pnG*0s$E:>_s^m#X".f@%9tU&X[J?L:+e:T0'Yqk(DCQ<>'FaGm)bnLmM/AS"?m $fb=1'$?N;CY.OFdV$Y$F(DcWo/G57DJLJ=&"SiM%OUIOTFO"Hp0f`dFX,C36R,HA:BnD<&DaIc4]+dtAJ9B6 *.>=-IS]l)3%]DFh;.Qb]+\H K"`d-?BSW$`%G35#2t47EUQ0")/>]i&&;p#8_ &)Q;U^W8RE+_X`Ij"dr_hDtT#[i`'+NIi8C0D\Di(!j@/NjR:QD%A '5TibBHNfKViSS(4G=%mJGaEWYKg,tZUs[_ bTE^p9L/NZ;bQeP/>Fi@@a&iEnsoE$;Z$V."PEYAVDZt>bP"!fI*UMt-b%Nj>8&Qd Xi.&"6pPV^@KOWc\h_#MQq%/P#CKZ\YJf`Ai=j`C'%-h*rhkX'&b1@!e'J"@&Gap: F6f8SoaLu8afC.4XQK;1puY)%#FGC$>DCOkBs=n%2R^RJYdm.3%pm06ouI-*2j=CC @.$@o_&NHF:ZV!8AN9kG+Fe_lf+uFNrjTB@Teq>(WQY[ui$DoNNRH(RU4N!sI2f^% ]=E^o=XSu&cAs550GX`lH#e9(dlX:rfbO>LmYIcbd\!,*4ZQ8eFGTX05Q/D>g-$D& ?#@+N^X\+B\'ap7BU&Nof`*!65-`@s8iJ$E_>iI"!;VuA"$^M=Ymg.%nefC+=??4a Q:R@>139u\9=%OI/P]0Ei>=(u0!2M7QJ:b5gf^tj]6X3;gT'5XFlSsL-b>5ED(2(C 0:URjgsB6/YrTS"3G2!CA>DRT]ifU/ ]J&]\CZ=57&HD07e2r$ADsp#rO/"3-[-'>&+)QfnmpmJ:0_Q8;"uB,''PaL"_#2H5 fhSLZ]&HS24Dd_RXZ)g]O>EN@,=:ti"off( )M)MKdGY.K5t-:QO03:amuCJc27P+bLli9=%&FBk5G;gO8/ae LGQ\n0_;@BdQbJsjfbSF5ilmQpm^fgm[HfSK6iCAT%'2'V/h0IH?(5!%L0\&S;,WP` ^fQhgYiK@8n36pPLD3RMZ*i[55Z>\RcitS_-_X`IATUPTP=rXZbb,r+VJLWG`J-`*YE_$bk \HJ/j"Vb)Q)"-.f*RkiHW46(VsnVI:SQe/O_TcaX8M)W$-\+T?9f/o@[nDa )9;u5rZ&[Sk4;-"s7+KO7/l[W:aQotm/$5&U8X4!-i\LU,fFc-Vk7F=*ep)-,$F4nI=K1 >oC-DUn8W!5<#&'i-=Tu;qV"$m#8Zk48Qp%OY?-_G^_%#l#$'ja-]X20d#Xkgp`,` ^*D/-^VrjXek2FZTSYFWO+:>aR^,eUM"6$B_jn`nV_XJCZuGsS0?Wms5U;Rd,WMM,oFJV+31pZ>bue&h[dN^chXV]cnsojt 3sOe.#0XJo/K3UFhDf"7Zsjair]XqIho.A^Q#?2B(](LKS:E!tD-$OYkco)LX`=0pt=s8>-L5 Tme>SIih!E1c,u)p8"EeoB7!T&Pr0>06a.77^2nW\V^$`1N`!`7oJNAb+*gM98`b[ f0i\I(!jQ;VM5)F\JKp?cgn%65PmYUBE%eEN3DZoq!;8^a!XdA5FhN"p$nCC76e=- o"hS%/H;jLgDiLh@Bg?_Bg`d#*F:+K,'QY2VLEP_[o-/>5(f%SQZ2'j\e b*(ABVA9uGPndkpXj&-j0.gb#Q*EXSMK5koJuu&''O[ub3<\h9aBpU`Jc@;O+ip8U UB#$OJE:]NK(DD@Q%8Eihl.>%]ETGN^PN2l310iHEU^3M*?5-;!34SqYG[8*;Z'U# 3<'G@!guHrg33j=_#+]$4CW=4J*7l$Wu0nnQ2Q+*)5q-E!k413>1KV2;(I%`,R++] +ofa]7ef.+h^M#>kGTo`](/gK7@IPFDGXp^P\GGd3_#TVe:[d(AubjNrjQi;";(0/ lra7Os1($HcfX@$q#_BCa6`aBMh_OjrD0#F!7_RR!<;*)1H^'eE)FsejqmjK6D%I% E)AS_I_2i4Ne[UrF?gBkM(6bZHn11$X2,rpEoA8<5lOu&o0N@CD9KA)/D@hKFEap9 mso0QI%_c%^&(,mT\bBKtFu"t9:[Gs#O9fDj?-_0l9TkH!a/k0Nt94a;\tqnGQ&&J."[VccjJ aK)IRKD_G<#Pn5u*2f-?F0S"0H:tj#R&MfJF@NFLbVr\D(;&)YPe!=;JD6>V76lmZ S*TTU"27#Q"9H.@Rig\:EsM<-_*!&ehr`7kq6I,es.+%agFFLU'+AJ3emrn\#R4MD 4#ZSHmRfOkPB_7)iVq6g7jfLPg!77C1ZIMe&[+ku]Y'0mdSBWHPI+uB&75Co(\.!, qL';"kM'tIk?&;Okb-0=BKHoAW!N't5TPb[SI>[UaN[.3(;lBZe>4i8qB+d**lf[g AZgrN_"E0sp4$C24XZY[c]21sQ+V!SL4!im8Ki&BZDnpjc,%8V%4cbZ+[CKd]:IkClVejs#an5af'B?0@ GGIDWST*[Ugq,MbIW0A`a1!=AFOQtF%l$:2Ljm)TrFS.Oe\R&S2D?5QAXk[-Y$4QR -:U-iW&'Uf:.(RG7UHiJMFS>Zo^+3L/foF18=u$=R4R'N$r(B`GKX[3-)$eMVZjGA !IYKN2U.raaIl>Id>+*&!23g^D'J%jk'9DV'0bQD:>0X+d%=ptk;P34s52]SF7nL& I+n2`\GlNm'uAF%L#@G#!EXa;s)0Np^OD:;`P%\3SBL]fM<*P6:42`Gph0=h5:_.8+#LSl/OM $C$jQQPZQ$'W%.\UmIBZPa,gGQa8.kfLe./:armc!J%&!Mig@i%)kHWW5SZG"6Lsj 63oiP!,;GBF@)r+]hn_JGi4'd()XN2Won^j,R)6s,6,4X%3MPBM=[dllnF^o-IkMY bg3Juo."U)..qSr:E@32Va50-64"@D5-r%?_Y^ds#+eHm57^L8UAanZO+8.K#]'hK a<(EX"1ei\4"PkH>EPqLA,cWl<?tLH*ZITL O&A,rptt.@'8Z\+&HJFL&b,D)J1lSr,P4f&8V$`P/cbr*_@]W/&-Zlp]G%[14VsA! ]^lWohrr8cq6tXU2cSm^fAuT^((@Z))t-ld[CKs`:[+I"qb2:eI#7 ;L,7OU-qsa_C,9(s!GDf2h*BhDEAR4Kjk#!L[_1cPYE( 8EEW^IU[c0>O$Bi!:jc_s7#3<0PuAREC8mM@fCR!dfJB(gj-sQ) oYoZM*:q7[W+UhRALD4::?2"St[Lt?i,Y3_riSt\G*Jt=$V4k@ljfSM5f1!_bN j-Ah?%m")f]@F9n10X\rZsbCubsU#ZjQ.TkQY+@46h.?SB#kX"("AhYMKjGm!kg.V ;%eZ_^FD,Cr*L;]aA8JlV(`9;d;-'e.[I?IV(B5R'XVK(Hh5h?/D8gkEbjjLdESLU r\MH\]q`0,;;Ifu4ZoW4e_A)$j.iW:+m%;So"N@aHT!M2g6FnM-(XE>h`Suo@j:lF SOlZU^Nj,?mr+'[k]#nGN[Ohf8G$7"1]Mh9mGihX&,&E(3>V/_B)3`HN&r'Djta:o )f8;>?.$0A^F>$uRY[grcjZP\?V8'kLN^REFQ68@isOM6+52RtGV"TjKH_>U,-YP8Q(m:E*jh?uck5QVKc8+$o]enk(:i2e03Zc-eejRJHaOs@FS("AOf&C-DsE4MD2[7O)qu0bmrTp6>@[Vd'Y?CtY=qhD;Ce!" 'ad^HS6K=F!Q17hB9ZGm(!BNJb/++Wji(pK`G*9jiJ.&-&.dZk9Gb.;'oc^Nm_M37_ \4$=]-il$',L=b*A39j.l//C-O [;l8*SK#Gf",QsXPD^*om,jaeH2kd;o<:qA(-E`D_XdqUeYnfF\D75%$V#.E4AJ*1 J']bk/Kfk"TNqg8!,75kOkOkXkJW]-[!8G5"1#(ugtme`J`_R3p1;u:XP2?51t,O2 Dl`HE0GOPuRjLh<:/R;V:@%FU2Br0bHZ8(ra1`+/me%28&]"DoG<$fJg)=#!eZWe' =P;K>ZDhhTF42V#IoFPEk#U:5Br6dfVWK)$r/(HIncu116_/]Tr_9hKSLIX>Q'.n+ Pq&b*/L0hQ.jW(5ji'P/m!l;E5bf#,s4^5X;!S)'s"7Nih4.t4at/8uGX;NmX>9:[ c^baAk7[er#-ph0+,YOrqn`15O!j"crrW7S70MmPd:GmWHe@BGk,WBb8 kPV=)eF>_er:/U'a6^$)VM72JH14Zs\QdOrP/1Q6PO14HP7o@=?;p"cuV[aUij5u71&+5'&3 TG?;1^r5efTkgcD7SDJ_B+,M2]2p^j(SggHRU:Z:Ht6[7o]^Hl1..VNO=)b5&fC\8 If^93:5E#9&@j8SEbRYB+o%uC'h`G`.2dli$`q@ej\qr0/po%eH=9V'BJY'8R2_Q-=/su(OK&Zg_E8$#f Udq=m?bRlT2`J_TnOW"RDG0ck7,k,R7=TWBq8m(-?OnkTg`Q(3[YP`Hcss3A]E]HS U:l7oP`:"K;>29a+-1TNd68/R/sgbQ;VL)pkh%q<>8]J!JPIW@#rT;"8NTt(Ng?E7 7Hi=QkiNWDaDuB5)<:5GW#K<+p2Lp2+[4o4NWaG5&)F[QH(R"[WN)mu\esmqUQ9#$ T2GUfiL\\orVmKP(]PV-i&(h$!6Y=_cgejO5)'KA*tD! 3n>*eD.gf\`ot-%FGDpYDtPk33ONR5FfIorU/\$@eK01NQt31!T>I0 Z@%I[mrF!QGoe=L=Q"[+V-=XQ$7['JTH2$?!he6jXE07<4Q7-[Us5O^=Xi*1QeU,Z 2q1_bhRS#Ke*>aP-%#L3pCA^V),Xa*Y.JtKiUD$^Z(9HU].M($XX@`I-hfSqm<,#V lb_eVojIL).74"]/YJ-dea:V^f=.hqDdCiC$JJk9d^HT\Xbb?T>122(*;2UOCArb` WQtNAX0^/\ajh66'H0Ps8u,;__Z(#0It70@_HVPu.Z$GaMZ8(.rBgO2*/ibrW;Js\ B"\nMs-Na%2Z098#=/9ao7I.s_t3^ird8O2WpO.r-_UBu:N$6Hf@4hts$?PRB7&Wj 4WtW_;Ld-jEI2Zfa)&rGRF>+XIn`P719F68=g$a`W4?ZF:obBO9Naikb\G.1R>1Y. aG!Ikjo>7/IrW8r*t/i_"r@NF$A4U:a\BhT5bZ4/r\(L$nuV7aX!>gUO?&j+gYj*( ^APQmXKtMQ=HbqtS8r:1g)XDe>/A7f/UCi<`+q1$GP9I74%oV0/E=5:Qk0::cS/_` 'leMhnalhAOcB#1RaJ,"aBRH`TEX`1UFA3?W0k;127$d1Z_;nPR6u1TnNi]M2I2Nd :aXX+8bDR!##LUV0>T?#&fGHtR&^lF=2[T[M.\G9@,r]_$I\.]Gu:EK8ZELVCINtR 0-n_i2V0T"BNm@J[;N"R*4L>cZrmN%@WC>uEke%Yd j$7fMd00dBS<\9C9Y82m:92b/(&1i(;oRt]3lZ$;,&bSa\42/FEmS,.\g[lT.AgHm 6p9EAq.;;?r@)d^:W,290Rp_oDXLEFeL/eK50(D61*;DRTAC.Z\Bt8B7GG`0'J)cX4>)_.aNN$Ijlu@,9L@D0.Kp'-(V'6A ndK8a;+$aY/%4[f2Q[P1COf>6,!'kHKeA>j^tRBI+jH_I%hgc2p](T4ap_95O0in7 +94'DJV=oIY_*^7\Eq98f5lNJ/j?G_K^iQ*?BYA(H\Wbd3!6*#K^U[R!N/4O+UIu& TbiH5@&mI!`\/YBhkX@^rc/%40B;B@3$<\P"G*F$6WK_OY/gbGCR!b,(?L%S%RpK6 Mu\IO`\ZBFQsW=5.1DM)4,hi)HLWNcgYKnNW.#jaWlJbn%=;`;`)f;cr/B =1\Sm:/%3_e,]%M8Cgj7\n\N:re%>28(TDblrpf&D=[FuqE`>(Ns)Or4Xq4P2cQWso;J)mXZ4pj_ L]BOETN6W,,CmkrY>LX'2s33'"X&;6^Us'\:qAO"8nUm&SMm/Me<+7MLZrF,N6 SRRXQ6Ag8r=+Zo+?G'D[j<(Hj5SO@,3d_fb;PQ_XaSRn@OrU7r4 NVe,-PlDO)",3#V,up4'$'j"7pKh3Xb?NnDkLl@c2L@=^h["J_"[R&Jr'.D/^_s+H R;G\]g6Huu2sR*!kbko1>a^UuF!'F$Zh3/DVgiZ9n\Kd4pLb_"1E5lHFO\Lg,+]g6 Gbg7;D[X.iC=,a.`iKd><28Cbg6U:]Noc5>--YX:VH:dEMatj'>9+K"5298MiNe& mb4!%aR5F^YDIhis.c?oT:Cl?r+s6:GJnuVBCsf"7"'?Lq=gZ.^YZd(r=%_G;;)DI dA7%hcA@RGU"N\XK8V'4d>WU!BF-`2#+_%.0Ba8I=O7.FoWTECW^74tUPEU26e1D: .b]LUgAP@S"Zsl&,beoQUFn^&6sW!8&3ZqH/Dq=IJa4V0;e#inA.lClEt _5$!Wi5aah3'@J>98BQoS!Ij=Z/H"mm5b:A]O#F'$NPqoT6COURhT>D125g4j]]`]RKBqkL/ae=7,E][qD@EG,Y>m1$*Nkl5M,$ LNdEm:E+5E1#0L`Ht';@e?&&]IQQMK=c.W&i9XdjR6AjE1QGD_G-W<6_tpd.NoCKe 8iens!Z`3cjhU`<1(jU>XX/rYGSEt5^[0G0>NTlV[c$:D2Y"OenI,ALr7*9b=tYFN !(6g<'`[*@XXX_VDpmg!s'<(Pf`/A]Y8tiJK7GfYU$N$[)ms."=q";u=mEA*\X[o( -!=XEpLf2,ra:3E5K58ue%X=W9`eZJ0)LM*8`_&0kB:lteL]_[RT_Vj+/l=#;BKqs X$(k3QIjH+Gr"`HFJC]nCJ%UlP0;@s`U]h!MUW8aAsnea-r^8U3.0j&i DXU33]0H/OBFOG2gNsh,n#(SQ%?9pC]Ongg&'kEl1r4kAs3aC54jE28+Qdu#I9MW^ r:I-XSP)ht@T8UcF%bau1#9W8=q49KU0"-Fb#7H"8W;X3>#?JU9`f`c+s#aZ/:k>g 0dQes,g--)ZrM]+q;PrF)QmGhXttpg>^4.fJ)din[[#lYCPi(2rP-T:Ze[IOh6MCM ]RA3f3ME&HrspPJ#>.L4f8TDUS*DMk*Ko5@-9+#JER4?3VtS-EIXTH/%`eSEp:/Go `.)c.d_F)JI<.%'S+BKaT8iX*2YneVQlka+^:TAJV&qkJL;;lJ27+<(U0/Af-UB]P 734*OB3"/%9>j7Xo+=4cnJ_%!'7-O8p1-72C-?mCKDoC#oC6GTA+fJPi(ptJC4d=1`0/a/h)khhqh\pAkCgnXXF Qau9>V#H//T,Ic%I[^!qeH-@M"G$Ne]?(!'".>cg8Gi0]o".C)/mfFnaE5p;'9S(I ,,Ws^%Fdd)]4(l.A;:aM:ks'sLI[Ssi.&-XO:88`AngLr'!qHp%hnC,A`MOtI>+5^I]_..RXKOOI.,]`;H'5Nk1%+ Td#$2!YGCL!(sG =I^r35JcJm;i=1l+FdYr]/U?&(s;k$IfSP*_".4,l[0mKrhAPJUn_,#TiSIq;74YS'E33Ki$S*J@blGtReaT(=-,KToG4tHF.oE"9GrIFk5 4rXJ6!7*HJm&+K4oDZ3"?(FF"VMumk2O/K'Y1V5Un(K>M\>`rt-:R+;$60)r[P(1& ju/"qdepr#^XHJ%[HHLqISJLks.`PMkPIJ?q+Ht[%/:p!!"]0a?hp>Ds58C^s0:]R "AjHZ$:sb1b'oF:@*ja)#0NuIM:3X@\?gQH/:X9f9)MJBJ!WNULB%^Jr<.]rdeP'W YJe\8>lX]$1BUXF&-:<=/E6]`>'$mS*d2$F0aM] /Cu/5-khLg+9Kt`'eJ^$"g:6=:h`<9D3e3MK:`pR$AJQ\e,SA4+S*SPpD/#/\IL"$ "<$9=[`IU;"7LOG33sPdi[pGNm<'l0[3XP9+oXgcU'HGi4g?U(V-O[OcHtG&LYeZB r,rjh]*H#0NNR(fcOHYiHdIE2dJ3ugX#oTs!DSlTX_Z>(jesUMQR:1[Z6.8>D%[;8s+UG*9T3)D`!$,'-DQ07[#uL3r\pt>"BFf7UT!": ]d]?#fY]=Pqfl5i[iLZ7'nuV2Rd",EAs&\5Pc0cPlVX0CGg. k\'0*T51.8d)!6)M>lLH`_4"-0D@nBh@fcR=7e9h;,9&>4Pi>QV@G`m),X+TVC)0( lIa.)M_;Q8*d'7[&(7(gAA$VbHZobo@5n&+%HnnSdFW"K5?s#9HS>d's/A])q=bW_ YPeFLQ1,IfpA`oX]^IMY^3P8%pUeoSF=-gs@gOgG&Gu7Z7HZ$7*Sq^BV_`X7I;GB3 +_XSi)VHGXa.s<"Zo)$I`fNL^5KTQm2652#b"SRnX&JOG._\g&K*Y:%=Xn!;>0.44 I#.S)i&\Q+#K;0pr[q-8a".>ars[ET#(5>GBV.[XV--i1aWc95nIe6Ro[j)7*s+^8 +4e.rQf6M.GRU#0!q>J2I9Mq<_ku?g7s#*N3fuo_FQ%KMcp$H!.M`0mUZMZ? !WWX2a?Tb#=oM7nKE"paP>Y*PY:JcLrtG4/f!0b0rrL:BD!ZWdB;,?J>*`48eerok "Me+-fm/+q_$@jJ-_W5tHH\_U)f9Dd/X&SQhO\GgV4/Knif=TA"3DF,^VgHN8--XHd7gs)$\D&clD>c!@1%S'&0UWT`SD!o6!h @.P.F=1;q^-:QZYH#lJYe,%LI[aM`&./lm/Z@Dl][sNtLR;]Lp(emo!?DPsSeS9Y- ,uc9]&-9<@YEgWe3?#FRFP;d\XK2s^W0RDDj9O-2\!cjSNWJMtC0r]RUO[Q7Ocp&Fa384>OZAic3,rN\%XQ(]W"@brApU*_sMkW=3gIWd$dO 28?"X5R>qtr3\Y*29/qCnl&HeXs4&;#!W9=oUKU>(]2aUa5MuJO[t*sj#6(HaJRq.I npkYHe%6TS;':7U8S0bj=Ue7j?L3p:ZKD#Mg!pRP]:7Osbh,d^FKd(Uk_>=C^!)Ce Oj?cj?C>98^(\19NS`MZIqtMCp+GL^4!NN"B3Z<^4M-GiWBKgT\ja+(,H`bslr(b3 XC69'B@JSHqIF];Li*hpC3`JfLFMCSPd;Q+1Dn)F[#u,&S;^JrdoIdBQ\5!q,*jTF /PV6X9Nne_0kt]+"P!J4P*_GJW/-FTZ5D3aoUmt7_'iu@82p?cqs0OV\#pS*Y^0OJ g<'>W*Q&UR`g&V51cm%+41FIRk)X]?Lh^U=l.4_AK7/I.qK)B?8.H/Omi5-<\39B( l0'W&UOI80k+e+pT:_,Cf=@\!mS]AHfMk$+8s`XLsM+/s*OqF_g_7',_@0> <:q'.d8-4[1%`U2 ]%i@q,Ze?85Qq#[ZK-e-`8A6Vr8C6+IidSK qZ6DW(Kd<$:Aa)!Upk9$H!u3P`@:X("8&'Ed@R4kJO!2@,K=LoYSn-K`\atSa_8Vp BnII:KVpF903hAPCR"'u72hP#V-lRl5b/Fa'eE>g>?T5Q<#$C\*0NWr^s*tVp2OU6 9>-WB^KCVm&"9fFhBI=\0&C4dWj:QpFFb?gUt.#lNZ,t_=$Y>?AFS`/"Q3LnJ4ba8 BAiQE>^1SfClaV_8Uuk,XBMl672Q J@:uMX2)ncF\3^C$J30[;N27);6T(#oK8\9V`/W*-6>#O#hArc#S?;$K`+\8!8*l2 !2Y*%f`;HZ#P/UN'\%4)$W6s0JV-C7'2o-.Yhem_&9.4jh>Aa-rsNT>QoZ<"B^kV_ r4LTQiVH0oL)U'R#%<"NCoB..]ISK;]5U:/dbP!UAr"uE1KJo%[^$i"jYuX)*Smj2 D8q5j5Pm1Fpn.:FMulc#>0'h(oW7H0?MfQslYSG&ReYNQ$TA%Io%kthhHiWXT=VdE e'k5_l-nPrkg=5%XR,:O[Vi$o#\\$-WGa?q/c58o-iSn$eRZtR)oPo3NWA'gC(ub` YC08ZBp;MCeE8L`:F:Rbp^d6DDuL)pkCONH+665q%mp>d=mE<9]WQ(c2qnk[r/'D^82$K5,fK.h!0eSr3eCelb6=2h&J5aamA3eMaanA3D[mE]eX 10sn+lmN3i/W7RJ=OqN)`clWDN(Lrp[PNB^hXE?7R3aVq!?;rccH_5Q1o` q`INAm\Mg3^E:_N*p1<9R<_r@iRi3j40e/e6[4.,J11>WkeIo\33:]\s2HbGL1f%.pO #G^,nLjZh,!PC:GhA`ABY`o(VIekENdf+N^q9@U6+7G6cn\O:eQ`0$Wq#>BUrsQ:9 JH+f8ABhe=rTUW_`tp%'T94O$R.*0VrFr@jdQN/,ES+*BqS.QqHpci0G L&Fg.mo61ef_ep]'BH@B%/\qYk(b=+mS"T5GR(Mc[_l7t*a5:-@0e,LRjI,KMMT+Cp.=T=0Ts$'!S`;]sLIY38A r/X>KA0QO4"<7eFPN-'N@n6'@*\@>+YHZ"o!r:FPKXCi0]q=1!i3`[kD,m&^h aT"bSRCgTTG]V]ueXIZq(N9*#XOcpf@3fD#Ej 4l.J;pL:`ZcXP-WR:LWW7&u$A?DLJUWVTso,!`a_!f6lUQ(Obl?fHQj"g@s%a:7V6 Z5U&7Unme;BqVUE;g!5Ke!:G#^X%OZ4s$'/AVW[8LAVS".lS"<@/XDLFetbrQi=1k 'i\5o]37*QZ#.5W+,pd"3H?hQH/<.A!"oEdP&oCba"8b;?MQeW`EbQG%=XjlrPMq5O8%$#H4Ao@Ri)/f(A[DTOgt"(?gLQ!VrEotT#qK;TA'='[fF&b _H[]!?(q1G-0shh=lB=jB;IgT.K89kV[V M=>>b=m@qus.r"s#/L-o`;,E)9oa%_fpP3igZZjqE0(caJ<88_`)HjF Jn@4AImNVNEi:b[b&iD"'WKD0LYmCMZuuM >."tEO["A/Ic[;2q&b,a!:[&c?X(AVq]C:cs65$N0DmIWf_GNghrGK)+`W%ir3$AK 0+:+Eq9RL6B7[m]&b`tVhZ';G5O`'35']uF"J9W)OJBD,QT *e4q1q]?"D[Zc%i`;dl$RuZhlJcGUn'O1I>r.g#K6UQU16\^.XrP5)"Dbs4R@+,m6 B=GHhUE"K/RYttHf*&+>Hi;.)&R`$/)N@l(K8bZf#t+d]s&0R3@K-E;r(gAmk?(HO qE2A-n,E_^j:Cpf8LLCr0@[!*n-$@X>]_#Hh< WPoU?V$_CEmB;^MpD6AZ'P=-8s5STf[h.G1k$-tj(V6.@b?$DJ2hXI:M''h$NiM`BCLanqfZde&1CK+nXhroN32]C^[i, JaR5=B<,aUH5QOrs S]4d"7UM8ZWb8D(O'7[NBOtfJ8ljH!bfCNeba"U'2(Z,#KhB2]@YQlrg0YOmY=rdl Z+D"R/Um4TNGPgJGBA8lkf.0Yh(-MAGXrQ_04Pl^B B1R?t.0%L:lbVs;:[a-iom/%cj$#XIpU<6E^V#Zth0mCd&#S?MFtTUrI5q%X#8=h` -g'<10)FQ1oCF1=J%;0@i@Or@mBh(,627sEJ$#(-k!12>q#1uf&%a#LRYgt6Cuh4# Bn)R?J%>j_q-*F"lfk%s&Fm6q,QDj;NfW)Dd,'CgQpQ;TN]u0NriucWZCh-\!SXFV cmRG>:Cj2GDEr]dKasA4aT)-Y0mMBt6O?lo:U9,SA^A'*-&;NY.:CZo)9pom!U_349CRYs.n/AT_NDJS9oB21r%(1NG[EmIJH/rcKUCtd( `,iQ5OT-nI.:?.a/4rL4o0`?2+;]\1obA*FR3WaQ@K1,#nT6IV'I[JicPDT`/*26h !Ts=kg)!Zb+p&O?%LeTq_uA96Nrm00s5OBhB.diuZ,mQ-pqP6-W:l#E&+Zp-'K0## >AAh.256*l8S>^NMZ;NKl.5Mf$iIb]B'XL,s#$QeYF?rSEN8Akm1i-7WK0bhO3d#b m(p$Ds&T>Rs%i!h:rU3FaA0XTgN>Y`b5-E7"pZt-s5@BLKlJV0SDJGM5LW#k;KN0##ZT%g;Y8 jc?TYYMfTEoM1L_1QZ&>V)c2f&-8q!W]QR`,*2gbIHbonL[48sd_M_=\L+72M4 V/CBp'7-;b?"h5Z4Wa.@YI2feCX@#Lg9_3p/ObYEW%K1B'qji>'Z`_W*1BMiF(S9j !MaAC\Z:mpebgP;/:E8FaSKi&!cW\K`Gh` $qjokG>1J"H$kN.[F:;L`Qdi^M?`CB_l^Ho*"$V.dpND^?B2HWYDr)5H-^O!,& .2;g:\&o0hMiWm>cV:6Ag7@lQCs8B(@fC=n*#/FFT8W[ESqQPS9V/k`MJ$+D7plUa nDjK;hd0FWp"@E9hA5YWXj"Q:5lYM`p>IjqG<=1KPN[4SZk'T$5+G)lhG=1+[EQt" O8/SqJFUa@kd-a4+S1*<)Y*Q+Qr)5KpO7KAqJ\[qb?jhmIH]-qcp+['?QPqiGq8aV 0`(VOqYD'*l8IAJ-gBNYNVr32/=-=TjLIp_ps-(@3T8tiq#AAb_N=\&'$X^Jb[&M_ ]:=Lrsg^CE[SsKBF\G3[kKjW`XrTkNiO/Gq64-oO0%C&^rNP06Sp@a(4K,YHC S!(@_&f]W2*]r+njZ'>HJ@^c2D`.,Qrmu,u>4t;_/!M%/"d3LNoY6^Go0q^N`W&:# =51&sm*YWRSdupe%mn9#WZ:K[,0(@*s!u'!DV(tQ&G\!KIhi%`-P8WA O,!_MoY7tj>_NL`k>VB#-fC,Cd4+j!s5QrVjaXt(X'6,9H5hq?ImF2C(]$?Y(*HaF r/]t>?iJ[3e#DqiZ2a?"Y*ArPrW&qtrE`b/=8O-B">rJoD5Eo!9$gZlConG[f*OP) `;gVPIB?Z1s,i:dgGWRAn*F764g8bkd..8`Wt(0-&>87LmA5S^.ZR6(O3_K7m+%Z^ V[#uA)G]`[SiL2qi-(399E^m$otQpis/,0en:,q[HuQ+nbWdjl+:O6s#&steqhK+n o^qGm!]FpsG&46nlR6Ub?!#XfVQ+eCM#b#3M:9#fC8E+>LQ?Q(Wc01RUCdUt+[cWSq]$EXeXWqjR7Dmei1/%r)%C:]J90CDU1 k5N:@0;dYh(*?2IJ0@2;Nt93ZIrF\_kO:n/(WVr9hb*q'%CiYBo7$>p=j16HFMA<6 IO"6Y:W81]q+[q]([.o7\:[s4*HieG9-= X"T@n?BBd1.<9s>cY*:Es*OR6T4`Y$2Z\eE4l_kM#d%[h(#X,6\'mif;PtSWE#U9_%5B.:r+@Ta%-))]6t\\.ELCZOp0+9 .Vhe=%EtFH1t_E9r(YIa%-W+Gp$LUf2K/#eBQrWm,/>L?Eb70gUr<;/s+<7O;?!JN s%p+!jDS%+W&Ij[%#;p]W8NcC+3^pfi+g*Mja;Zo6=>o8Q5NI;= OhZmXZa,%O"h%tnoKTMYac3H0Y1pkeGd44L50Ed(+TV):X5_`4$^tgaD0<_goqK`$ ai6e)aM5Ja2V:=l5P\5^$?l%Wmcn#hB5lQ'Olb2RXZSSJqTrdCXZO^e:+M@L-u\"< 5-\11EhE'TXR=:rh:YpUU]:l+.KWB4&,H7H[-i!n*jn? r%7>IZRZ?dHBR[0Pkg4o\WN=#L,L"8A]U6kCjC-s ;H12]hGCYZ9bk.ZPh,/2om,5=613DM3&3"EoW_V`ZeI!'AEJ&jJ4,O&8O:B@^"+%_&-^^gsq I6Ede;mG_srMk`:*"_*c=O$(g%Jonb`k,MuoNX:^$^_ Im&_b?`hJh)hAaj$Mf9bs&ANl;tA.IThQbT)C/X!<`o>d]a]2VM>WiK"[ItrYK]uG jp*g>$T`_3*Sro''&`G/:N!3\Vo>29rWa>^;A]Jb>")Bu8-o4h)0g$.a/NO%<3O@G m9AXc!#5O&7/dr*Hi@,Z/h-Zb#Lc!#5;3%jrWi64rtG2As4`g+"^N6qaoG@oN'r3! 7'%sUBo3&ol9@X!GV?6SH&rm?Yefg/:<(EBXE[Oo-jZ8dMhtI rsdrL:RIdQNt2RE&b,COhHgW\Ih6-*&6&gir.Q9nL)N@!SZ&Ak\@thMTh2o%=jl&j e^lG.\m@;ER5;D\L&cKt4aGekjR)@gf_b\.HOo>MY3Z"0fI;tsKB^&[HLI5-0YR2j ?j7GJKAHV1"9DC78Prbm0ib2*b3DqZ<3^#X'B/%/nEMr`XUT"tu6 SGugZXnAg./jY)R8Ds5jH_5BQ=fqi7\DqPO4WEd$Y4$\p\FRHLWj='1O5-[^lmD[p 2t[1N6!si2IoHmh9>chIA:$.')F/Og>6++t6h0]i-! 2G6;ks!Dt&]1aEI?@i.G088@\n/lKb6GoOS"'0qTLL";sE=)Vcr*D3^0,bGBU;D.[ !;o?F^Sra]O!HI[=h(qNpQBCM&eJIPA:Qmlcl&Q<6OZJHDY)8X?<"W>rs^ltc3!pA W-c\;7]P05fCZ<>4_Wu=aWe)o7>(eeWt>8oOBb\M>D?cMTJ6p?3QUBen-:ELaAe].3n[Br8q\>jkPi@+Ir)H2> RNc#XBYUP:J@T*\Xa[IUDR[<*]=jBgWZl_'[YJThnRb[;qi3u(Sr'&u=U/N`6Nmj" N3a>sq+FlTdV-VJGg559c-fPn@0+pEF-S,>V0B$K+$%Pkrd)_@Rn>n*?2XHk(]Wf2 `W,a-aepeVrm1DgY?rZ=q\JkqL%;n50#JIoc2%I7&l1+p>f])3`7o(Rt[*q=rF #lAoH'DF]ms,$5@_#Mi9ggBUCO lCK3@s)25Ys1*dZ+.=XmD7"+2;`#NJP72CS5%`0\n@KO,r+CMKrt,(X)Dpq25Q!f= a5PpUir]-%r!+e4YZ2Tc!;S-kSX]-Cat`h#rgH.FX;VT"N.l%5j,k5k\3N@4!eC=' ![.Lfrbps!KO"TU&"5IA"4Laf@/)f?1^nlG\fAC.ro]K[7>%&u4Xr:Pe"C17PtVb% TQ@_[?9qs"^jdIkFoeK^/3j84pSKYE#n%:Hr#Ig94KU)i74C,F#RfkYK1lUQ^&\oI rog/F"t_>*;Cm,XP*(htJGF+@oAR<+/,ueTJ6QtMs76W:ru;"..PQ#Hb^U11!_*q: 5_9Uk(ug:f*6eFNN0fLp;b::V`R"2HZMaj_s6'IBs(k_0=FbWF-Wq=R+.eRt:W\Vj 8WV+sgpgI7b=_a#CJC]c>/,-cj8L"/5nBSaK*=A`9)&,*#"#7"!'Pce=rMk^-Hk'] bn$?.\aP9EH]I=X=OTP7?WtlFpb2+Yi"'!qG9&a2"TGSEZ9odcQNJ"hbgZ1[M&B$* 6CAi[-\?^Bg7\Wl[Y$L5gpKr[3,DJ<$ZQdp=b$Y$n?JBLKu:Q:SqBIhKk!=k5I&08 _]LWBHmODJ6\U?kYNFkF"5Et#[oj\;-ioi7.=8S@!'_)3`+,N06:ccZ548>V!WU%D DD9*(8!okZe*3d_4Co:0M:Gl=7c"c1Re^YSF%o]Lf`ke;!h3Hub/<*[,iC>rj9P$i($<9_=,Bu%?#mSl$K/,>o6"dX QC`%VW0O$=ni/*cY)7m6ReDSmrVVKpG:LNk'HnQYQAEWkjNc6EmKg$P TU@W5:J+Z)pW9mKUtZ;eP$5Fm;fP',=er5Mdao<01mOG48h=huNqQppH]b4C^SbYH YA'?4@>D%(S$/+lW?XjjGA&=73d6U_pC\6,T(C?AK=';7CHd`d/qXPC&5fq/#:KT.Kg*ZXpn$U$VCBAUf#Y!&%MlV-s:t .cB^"Mf4nH$%QL\9>t8QE8^%ppAr^W4LaLSVfs;Tg[XrX]0R6?]^G@d"..=M"3aW$ J*FbF(Q0r\;"U[Kp4!5uE:/UtHu_I8X)n.k5$)bBY;j:'IeaH:CbMO+Br]kMgIEA*68A9OSqW6Jks*794fc-[3 ?4m,'H2`:U_u7Ofb^Y#-qUbI?5.S#\K2Y3W*\D^+?kMo.p0?iOVKa8u^G!gMr""*U :]d;H`&]G3\\cqpANa?LT]jKG$Yf1e_L$^ukq42CbI;usK3!#OjATe/Ma /(+:Z@=.YuJ3W&.L1s`:m:rXq76uMA2;PED5jZN-ZK1h2"o]L'7EmQffNYsEGSQmu p;bn0J)V],G*'qIOZLuiRo4&Kphs1?!WH3jDG^_eJ-^c,84Wr4HjYB`$g%r)+TM=*BJ*F5_MuP0 ag_o"^Gj.#mh6-%o7tc2iJ[d35;jpW*YO+fL="b+?id='P/EL3UXM!Vs,$Qo;bK!W Xu>(GhK%51[X51G\G'+gK?"^7!DiiJ"[Eef#do:+]?0^/9r>6URdNCX4ECoO)*>O* \U@145Hjl@s#2j+T_5?;J63DfbUl*qTHBY$&!*Hq&H1k=7'\BW6!YVJ\&Rg:E8&^L AuAYg"@V!4Rk>i'>C+Z:XV/:fl`rk>a3+"GckZPtf/$B^^jj%TLDLFo#-fK3CkqM@ qEJjFgZRPSn:(oI$Pj:Lnq$fPrdk+;+N*HAff\@3=..T5[Wou4I]>OrZhkU_Ru[Tl 5JN9&aY;F_"rdZ^+3DaRRcm3sgLTDLm!Om(C(Q0Ii=rhm,%=,1Hqirt$HV.^5=3.m %e-s^AJU1`Iptaf@g/TtEh*9D1h10ZE>-Y35M_q(Pj]"==27jV] ]9Y>/Q8PHA%;CjLXHGEj8K)I!emD2[fC!V.m'Ka\!pgk@MgO_^HCDu-X^l2Pg"o/@ .EGgAfr$A2Frq!5m0e,C(MV\?C#0nKg(pk:-0e($7T-++gMkci1!Oj)4U7j$V,L^k Cm[DUill%':r(BWP=k@>s,jJQ(u&$KuF]:T#qNT?/h/H+o38q-bAfrpu" qt('_B.oO"q'u',2sH.6n'Wj(niu=YA-&%S,[Yr4o[9dO(LJWidu-ZP4F[@0rlkiJ /j9g"qkod`qr[!gQX2\&Q>>A#?[`I_b.Q#d?$mMRV>-PCiNnCo5)8dTo-Jm4%R*bl 5=KBIU(Ml-qso*(bO9M&r0P.NHFE4@Xil\(\KRN*kK,%Ig=[/C:,`I-@.lRCT2%p7A6N/[dkLOC=i!h7Ss0\ D\C)AdY(?KCR=e-j8aZLp^-NCNJ-T;6?V>IH@l(fTW)V\(!E\O=HldH=j6s>W9>)tR/C1aO5R3P_%X$Pi[mE=iga*LOrC+: A%88G&a8fQ+9MP*!rjk.6?lZK67eU("T5a/Kh0.-@9C\SDAraQ =Ps?q:[(.UT/>>Q_JnWAh*"7bV`.QTs'&O80`P3Tb\M"&!rS*!EIg#+gn8R#!g`Z$ T'9DVpnW'YV]H]AJeB2tBT5ELK)SrJV_)sO,TrFZm'7"i(88o$o%562Y*N($0l\2]lj -'JBs"o\m=$!o%*#t-be&Bber3dc%=LMCs1b\i:A?G&*]FA.-_\8AD25km:lR5k5! HE7O=Q#3sLX:CiHagX9a)#d9sf]>SD42%:Lk;W2InDE:kp]A5QcZt'1D_aWLk@43: Pt\"eSns[LUXeoEHATUm2TL-7PsM;f*SYQ@P>6#<_A::K/7C/l)+p[XlXHmM$0BGu2/-=%IDN.']F&DF'$#&8"t-QDZ^:rdtH9j7_3f'C\LSkp.[N(VgRUT0ue#OGBQ5*Rha5/8=([' 2Wc<`Q6l:.M4Ri4SA0XSiQ^Gu\srWl&!d+Q8b.?n9E+mJe3BP&If2>+i`h@h!l$uh 2m!cFi8&Fd*=*YmG`@+@Hl6+XIC\Feq-l1HkLH;F?7QeBM5`Zb3?[qKFeq$lVc f-qMC/&1]`q@l3n`L"Z4$"6d-#4sD@d[S`Zn1!h2/q:sSr&lmPiSmA_90_?@qNu?g 7uYW`?sUs*'`Nr'&!oKp!;sUB+StqOaWKCOrVeqZG;!uco+M)TcguY^2"+cmj8QrK m%9kXrV/5:_qQU.S0Yjq[,cqkdO,jRc:jC>*haS!Pg(M41&lkI-LfpQAiZD%LRePF 2k-0t`[gQI<`$B=d4Ja`:7A2@Y3cFfU?d5u>/&T2$lHr\ZNU&qZqC38'bL?L]N#O? Jc)1g?lo<2ObQ!r_tDL+]'1gELFV4sr`9RA$c*^AXNr=Bnio?L7e^l4oh9nN6d;ha )4#.YOFL39*bAYI-%f$C/2K#KRCJqmc2G!H7m$_Wno'5sf-p>1&H"ZqM+93ddRd_Z WC&,C/!+T',-1kDm4'iF5I"$Ce,s\K>/J`73#A_"j3SO=],^)7;+MU8Lo!q/; [hohK8PO71 +I*SV'AsD[58G&g@QaDnpBH``_`n:8^sR4_(jOR8YYU)*j'\V#?Q0WjQu#I&SRk)# !kIO38%0&jF:2@q&]j!rTV;=5.F.j:$h-fo$N,+YAU):WeLKhJ&a4!ZZ7U>70+Rq7Ap588*gjSK50q',F3W>S]2^KR1^',K4Mq]*pN_ QL%W=&#j`me[pRDUaa3iK0;:T9KTEG+WWA&NnR#om%eb3C!B%L"Ue.E)t2REl.?[8 hA9'(H+GG2"kBBB+X-F*Hod^':CS3j&Nq#%-)iQceaDm)m7h`jkj@/sDVgt&,_:LG K.WnX%aq:rf9h$5Qt?;N]4cHg"9(4qKO;J=qVhtC+'oQW kDS,&5KEWPB=U6VRe)T$ZN'WIp.t*bIs`X0rL4[CSYX#JIJIr"j\IIn534$"c476=f*ajbL/ X55EXFLSkX0+&T8;3NP>Oelm"[%h*G=[`$t!roA03agjp9uSl2dm41,?M\Ob >o-4r501N`dhhcik#LXF5S`m'poh`$GkEgC[oVKf8aHdl^+`@^Y5A[d#U6JWX'0>g 8:^_E/YKn/C]Ra4!$UdrDX*)_=R:>4kN-)[!WW1Y"^K=PXVQHabeS_LU;28Q"Q1'h /#IW<:]bI@!%7lf1ApZ.i4fiu^Q9*M*##GKLc2,-$#j@YlGhqS;[7)V?ELtbXmqF2 QI?diG9?4^pK6&G2^f_,Y(S/GeT[$&n%E%IpCYB8LV%Ide9UZ%p)=fPNmBT^+8CmK ?n;6f*O;jgEhMOP7FTIccbu%XQN2I4D95au1f>7mcp7kZ8I>g870SB.ieUYKogtoB H-BV-n]F1+"AXfGYQ1jq"PVT0s53Xu\(gZXJ%#g%584gM_W!s_S-8i3KrN!*re#b$ d23u)T)E(MP[,n+#N+ZrLUDR=qg%b%C^^;-L`eq"C^9_k/In)sM/N35H3IDgY:tH3 $UC;>qVFI@aQ&U#P&[3V`k;71L7[>QSmY5K(:lQB&#_8@U<0Z(Ip\C%8 URGKK#1?`el&^2f%H_LTX_;Ls8N5l<6H:(A,::h^h2XM_St'DB^TJho+@l(*W.>sI ,)(>F`;E):fM%?pBlPpdAZ#*h8i+KH!StJsH<4:T,MTeNTQtkgnp^aU!(qcB;Qbp7 WnoaJg,n7ARLGEU`i1cmXI0)!8hUkK@geeg^W)nq#<5]nXn1)G:5ubs"D)bG4Fs?p`Wf]IZ')B!::IeV?!%a ik%%cE4egcl[:+-"?q;)/L2&$?UmS9\im7ZcPM4LT\o6%g>rk/`7Za_q_?qfQTehb qLmf,QMc5ds$&b\!VO=+%flV,0Abc>p6spgQOs(EH&h\2:U:#_&`umW@si;5j.fhH n(c!/jV[s8,P6%m[)\I]!<7BnBfD$ued(G\rNssSGq-[lpc6/@iLbl@,u%XX!DRf; .qskn8ln*NXc;,e7VQe=G.5ju*=PXYbGa@Q<'6L:M"r,Ka\l_RT="aq5No6knlChH ;&ORhkL+plB"X0aQ19nfJJnE%)^g`Y(D\((9'[[XQ)k*:[*%lN;dTm%Mk#8ao5qG)9emb6ke^#!bliV)": [GSXFEb_T8j?h>#RJMoB)U/56#>GC$"76-df>.FU@414;TiK.U6-%EJF`uUu2.IJm cjYnU'4%9^A>1du6IRIf?FerBSfS^I6M5,Mk4=EjUjN150,$5EfaKYmO *FJmlC]Se\&!R&P4c`_FjVbHgK:7jSqYrn+Itq;0nFua3i;gGe3?FB)0`MH1(W`c<^YOV&0/T+#3WiH[@2J^rfu7Xj@^^G8g:LLY 8rcLke/KY[P8)i6CmI+UkY-ZcKZ9_/BRnAh(Elg9+=h f:JXUB1fdGZA5f#-69@.4([;u]5-.AhX.cT8N-fDVh1]`^"\S%G9"$W3b[53ePhVg PC"nC8IHnWjX4mHI*t7Ai.2LN:=@GQ[57\se,a?1em't@gcqal4eUL`d]mG`D9!cP s(50;$#MMQ&n",8D:H(:e@'SV;`#(8SaN=KB:*bXgk-:"'2,FUX6`@.fe4GBIsM1O@86DM#343D8.bK7M"&`5fK!V8\s]HTTRi^b'gpYC#Pbd; Pd`JJ5]*XqY#`->NN)53HeiO2!Ur=H'8?+BBTFuaOokY>c:[$pYcfAiW69l6$Lj[E 2pXm]JGHP1L:Ki"4@+8lLEQKss(b+,28e9C:t>^q+s1bipm38-Jr#7*1iOT8]FZRInt:?L)! h.e\,^U$Ssl4uGr&kBDJq!T?^SLWmSr0Ium(LGPl6L#-se77L-bQ@Q$a6Kp[3$p-l SqL4=4TC7)!92uR$b3YFs)%bi2u2nO?d&Ionk'4Mad3!ZTaZ,jblnKB*"pI($\A?$ UZ.PYn_m%oPQ7Wi1fnt?6IkVFlBBE!VcN)$=`"9X\8AADp;8Ii"Eti'!CsZu;!Y56 c(LO92P45j3'Pr5Co2)[Wqt)0Hn56Kenfk_bl"U4hobuL'drL#H-*KKDk8I[a;kmS2_>%/YmC+\5X`)R5qjB,J$YDS[3OgPSHfG]pB3n@ T\('DJ?E/>*j,n_\,,qgH!s4qZiE,%hs$9US-]+K*^57,NK-Y:mE/9Sfb"-E3ghQ? o]C<84M_)l"OLhu!^oL&3_s0=MTc9u8WU#k[DCIs:&obe-ERjEUE3l3KiZ=\mUANe d1'*aK'ZJ'KCD*uh_Aai*HGsXl.L?;B@ktrSTb=Jh\Fsr7st2NYoU<.GMM38Hd[&m L:qig:*+Q)#$eOB;j_Q]dN3D^Msd2)onlZh;4gA*kMl1sfbk#Xl_"Yjb=9_QLCCf$ g)ZqoHZJMcL>0-G\"L'>_l]_s:==rM1nrkkC=tK0\o'&u4IN"hU`&bkM#XB=)0[03 4gDhJof2?6>:;_HL]$mZbC9FI)>O6$(WcXT1A/glkSISR;YljsaS@g&?d8U+;[?66j7mLp2^H JcG@85@bDIHO99C=Em8!&n(_%ojbi"O8238LO8ha!TsD(?fV1c4T@@dZiB]4qEI,4 q2:$l5J4K'rS,KO4AL?NU\rmSq[S[/!jf=a/IAc 0Ao0PJ":c4p&P:6N*M>Hi/dkK456]Nc/dHQntsFtjsI;4H<2msdE9gZYVH/@)GraI !WFHmo(aC&TCp]mq!1G&oqRYh!rV#61OjuU1SK-AA>jr$R"p1:?TmJL!+k!WN)Q0g 80IiN/OBaC!BgeiY0HHSm`LaNcq`-#;)E.Ol;fZl*ai-aEI2g>#WOtJd"Pokk`.a5QXO^V5]QX2d4TFX!CXR lA\b1'`]!\ouJ=p3EQ7q!Zk"k![-T.#gf7i"$2QI0=D]C&;K_6"d`0GLU&*P"o(I[ :W?qE\]Y)d=acmI\s>-LLqLF_I/*;('<&hnTTd6q.5^"Sh_) "9oUed*:!^1Y#d4c44H5#E"=,7@?ZV0<*VgADFHR+Dl@H!pB"Ylo>a5I:%*jGETT, l.^VI[Hk!VFf1u>D@Mici$hlR;^T/9@37#c'bC*cfmkmuX8o(!Z@9PJ"7cd'4IiLB 2=.(!m,b"nU62%\_tmZLcJ=lf,H]#g7bUDD:/XhYb3;GWo?NkImoWut7&"M/T/o3\ 4uatornk'%HBQqVq9c>*TA3A&q>\WNbCBJ)]O$'WNA@<=(mt?% kC`UqV4_b`/\-,"[(uU_mo(C=?iH.-q0UUa+0mTr;2kN=oC>B[&0Up,;#Pa>]n?4a MM8NRH+h,/r&+qRm6XeTnS@&]crM6Yrrna=,UOd*qH.bQr!E@tjq#<.9,I@_s8Vi: ]O*nDqNiSW3T#nd/-#*\fitA3cQ=`fAu5:h>k,L+-$N+MhE"\\C8ge"5l!m\HmqLP LslT"0SXID_:*9jF>DR]SM:Q:Au+0e%n(qs*,Xsrt/TQO<6=C OobU[mGap9*$rJ:?cPM&=4)$N+*W01gS_GagHnq!QXVCI8sQMi+B9?u]0LrI!<92! 2^p`]%POlOO&,P&"h6KC!;MU,!5fnq5OdR*"RP;'TYQ%)d/n?)Q30$&3Ztkrs#-G; s31L;$fJm/53Qb\k:N@b!rr;qmuFV+rrWj.1r^p$cNbWmUQ(qF"MjpW*oMUr7\D;^ C)E39?i`n\_9/]qF\K$i!fkN,K+*1YjOL5,i.f7 SW7Nu2bn[tO*%h&oLO`/khrn)#BlWZm('gEkX;^e4]/p-V,'UKj$?-q-le1:ZS?_` ;)+<:*_9>.it_&Bg`I=+LP2&qDpZPMH5M8Eb(.%4hme/,[<#HTA#P$bopijqZmp?7t1LIkYq;Im'^H0:1]8%7gH]7[e :G[Ik?0:T^@"%`(qi@p7^Nc%CeSDOq?`3nfc15f0U(CtRBNY%7!5s*rqqicR/q^A9 ]FXpQ&D1XWHhc4VqeT4SHpC3(*k\e+JUrtK$NFeE!:0f:%K+A,5NJR.^U;h&"oFX8 ,UcUpQ[U?qp^sc6k^D=>n*pAP3r@Bm=hf6RM9bo\<;[R,dbhfnr9CQ8n#fS1?Da1!$gW,lOisdA]"#4[;`!h!,IOE0MA_G=%9+TLMBBaMOHN8FV['\8M RORq&j`RsWTSD1[VY\`,7^AbNWbSEsg6q(UY$K:rCB]0>-t!`&Rt'M4G'VeA"o3Z# =#V%6*")f=)aRE$e^H2eC+9Tj@U aDVW7FTSIqlVMY=.^hd^13G=1*Aec5PqCLg(.r4\Gt1d^W3a#CeC?ldZr,=i<)#GK gHik][$\F,Aoq*!#ES0R$a;,.&dH8n]EI0>kBDK'$mM<0lmIHIs$ZF5Vb[a;+RsQ3 61-?;#`QRP-+%e$YQ["N>JiZ<*Z9O+7Y#S)#Z6[8nVL5>^(t,U)[J`/"6n'$n84(i /DMgd)m&ks@$>*d\H'p??4bflMXCanGk68Jd>a4g[Pu.tL,lsRf,%lmURXT.*DW7` Weg\'kl,S];K@45/]aeL,AEDB7gHQa6ThT'kn3o2:9ZE)>TO]`9Sldt7;LA8__]^c 1GY[LKFS80RAi/$NJ9m;Es%do,m18D860b?aS\[uie7F'CqjYp%rfm/`i)oJc?a]F9Soc1k-oIbqc5"pq/`) hl+N`kNJ19Xb)?(YNT@Eg?G&dEcY7l+Wm::fN215Zde2;M RXo!<-7[8.`0l]p0YkqZR9:mp@kC:H*5MIom_6R9n^ReqaqBGgCQ^N=c:]KDhb*T;t J,KQh/:_Ec:dKa<:bhuI$g>:0Dt>(4s$+R(M]Zs0r-ofHILZ;hr&=GDDuKk.s$CrV o>_q6;J^ [@b$lU/*'P@km+bN0B:+P6"_&a7MA@DC`nB@T\TQZogJQ VR.,<\=oe\g\_;$!rqlX^BFSak0Hd$kCDrMH;+==q*,a5`5;Guq.fNjG?+_>Tnk,4 5A1UQ[!\4+LZ*/OZH_3!%"F*3Rc^pDVK,L''=kf]$j86A"^hAeXlZS6]ERNQY?1ee 59AF5q2\SXYQ\k)5Q$"VFi"4[6!ffn8cT9LquleIm+k!`6KH5Vrt0.2(lsVCK0sc* b^]DB_F"X6[dkLJaFBK!*%^#4.,P3>C/ZPX)ZDh2X9/FhI\n@*ncUtgJ&28ii]h/Y oqM?(YOKr+o4E'VKcGSV$nV^fN/J3@8jP`;_o-V5>_[A, UAcRX5!aYFdZ@jF:b\6pch%MkPCiPQ1QT"XefH jKs(\s+drJ?ier&bDEL;:S18e,I9LY8Y*?q[['_$r(+^$??91>WVJ#lUSg.T5rY?.=@ <"08e$teh26hQ(a%I%tODf6*S+!Q"bME3Q'-^3`.7>UP"ENk@:F`MHrGPcUrq_A!N ;$;Ber+%*9j/K%HDfr@h-J;Ui8C\>*:`E'W`1g7.#_XC%JRF`r=:P1PGq*ZK\]HIY n?;6Xq260)1DsO.,G1%N/K+S&e.DUGSs/hiNc7XiL`DN\H"T4B9s3ZQL/J!ht +MpA*5>(pG]^BqYjF:H:\Q)K@;"*g.CkqMpm+Zq]@,'r@Xu!aQ+3NqtHt_,1,sC'j0V3,$*GcY91^p4C "Ul_gfr0-T//\(J#s]T>Q_c:Q_qNqal5dd"D.!BXk>+$N>e,8^ZYdpjIE]9L_RFG5 ;DOL_c_ROu3R6osk`0r.R8rt@8(]JdAAbuhk(,uA,P=Xb!/'h r8YC]h`Gu=jWjYo3`LLa>j9MDZM"4F\QJ*,KK:*I%L-)75uud]$G"R.2n,',iSUD# o6e,1aK;T+3;1tROK5G*.P"/l.S?_AMX.97)JdGH%00VVJ+b5h7="m%j[B*O`9Y1- /YL)iU;MUt^Qn_IrGddeS45A:!$db;9VFj5>Re[`?P=Br9Hn2F(f UGfcnC4[AatSX 2jtQJs2Usa8U5em7Cp6SE1duf5;_.L1t7c72J+]R_#IrX1(pVg3;\>A2nm`e[6)<- Ri'K@61Z)_I%-=C)GUnng3P"L"69gqX%27^9+]Xs<'C^-E(rkD/Vf]9f#f`,<0p4(es#+RQ'/tdN- c;tP0IajET%oL*'q/PakSY&XOB3j%*HUY[ar?a7_$k*SZsjhZl8i&jh#B)X3+s%7F!D5W #c8Dggj1-Z+%dK]L@5F88,GT?6"q:_-_%e__\J;(:F3qM.shGfe*2_:I76C5;]PJG`o09q]mb 7\i^6@0)?a!au#JI:s?d?lnoN&X4a%ZuJDdTB&3Lrq[8 0CMV7&FckCaOC4fLPHd;L)WX;RtlcfL'F+P1QD@HodL%,=q'Qqs(uoc=FepK[+Rn3 4KhE9nF.HiI.I#dK_b,05hM-q+Sf(aH7P2-<>b^+IJ'7-(I1t#\4eSU%K(GI.NC(O fcf$brc#@9T7Js!J2%!B>KLaLe8>F_UZ(HZ4QC$bMRKS%="Ib\KGOXgq2#%X^8@BX q60)GBY%kh"kfq.8fID^RC=8[DneKGo<&qp9^h\11>O4pd=_$`f5D%" 1Xt;G>Q3jpjSsM)k_kdc^H>j)(4_E_?,M/$kKfFl58T+br0[M/@Lih;]WM+HoK?Z` "/,Vq2SqWfs4?hVE;8a'F7=tM7AW1l-#d^pEr^jg2O6tdXHs&8:58V28. fI/&+!$DZjfHJJj%(Y\Y4nX@"&T:C[!^Ja=A,)+pX0\tO5puU,.c>fK71+0*Udl>V pl1G$&)_Bj@UemIg?H1LW'14\jkUC,cFQnM>:i`g9aMTJ\(F2m!n[R] *D@#H^m.pX:&a1*@&OFZU32GIr"loo6>o/Z(4Z_m6EY3W]pnIe#XI;05@FR`#l^cq cHDkjKCGuMBXY@0N%;peWYb!THrFjiBbcOM-nB=P9^ mS#hM:lj,L"5ls%3M;33HS!1\7@6GN<]7l#nu'1&4u[7hg49"6]&MN+IgEE$,db8t >W_:Z4lfmOodh2,/M9'G(MoK=!.W5mgmAH,O82"$![U*%0&&RQD#r`&R_]%Zm/d(t 6S4M>XWVihNG"a$#$OLmRg5/Mku_dP>a#Fo`<0f/J_uK*J\fgogsug_^Xld\^`Q:1 n@PJ^Y;?lR`krP5(fDhi$1RCZNp.L>Rm1N/k'sn4-18O@1I/uEOH6$Igl@)peOq,Kn"$PL/8nh02pbpDX?b/ !#J2%lG*J:AO>>oSGrup2ctae*hH9Q_9IJ:gV8A4;utM2Fpb1UN<8'GX_-nlI(\VU Xa1r*G.e0e&/niN@W1h0=Su0<[d]ocmA=)eAO0U!VJ#XfD>R``l,LfiHP<1[qFP>+ 4!#Ktp@QuI"TR^Lcd!7i4\'p2Q??eCE;Pm\j@%PpGg4BE_pVZI_IVj-6jGgjVRu#( 'XL_D;j/6N'-6!4'-g58fnT$=ols(e)Adu/5SZ!;.3!JrN8'9;JR?V"8aCqAHdS(a GhPZZ#ubIMoXQf*G*%XUX\D>eB.Hd&$W!ru+'=jnIT5spEW3#:3#?IEJ+!lua*4lh niNqfIZXL=O0F*,3;jXh;L\42q0tS0reD;IrqJhM(GD&&oh$\&*t<;,kC5G"J/1O0 o8/qS#n%k6!YH4;I4g7=$L/`'JH$EM`2t'^p]UDt$N.r"Iut*90Ba)+<>>Ps5NmIH :q2kKiI1M?la)qG^\oe`Q]IF0c2GUG\msXPa*0b[G27fB#AtD2?0`k674J1A>1CO` gUR<6LKS"@#q\UIUenanU[2H5[*g)mf2S)9<0T`3(C?!&r$">nJ<3hX()4kZ,urC! q?gtY%C?Q[jSlHqUW^U6r1n^$t#nSg^M-WB3Bj2lc5h8q.=9.?1TaE3` +7gS`I0`iL*>Q7g`;d&=ime>Cn2GJDJc$)VFY.]81NaB1jGqs"p)6?uQKmI][TYq/ 6[;`XV7VSqeHOH>FOUof5T>:DNEq6X&G]IJ>+S*6c8E3jI,I5N+'V!]s#q0"J:N`; fF`f3O5]P,$6:TKaJRtL<'2,)^D)>KK&X'SmAqGgYLg'F=tNsR@:?.C88,&q4tj,? /?OK&1Em4R>F8N<(U,\%0aJ.pCqUFRE%*%n'^S>b-67aIi3NF)![>hgi<#,Y#B'r< kCR3V,T$P:*=-Kh-!XifT8*W(VKq2>5%lF`"&5Z'PE>9\foml97$9POB-H3Rfcr6& E0L[OL?Sd@HH+:PpmM(%B!7,\YVTlm4XU78@FHQcb' &g]elrE"ip0rUL8/L>-_cC4LO3_2d>UmklKch*AA)B_2/,sj5/pZq'93BBDU+!g@9_N_VMRSo.i)kr:Z'>aeYDcRG4CeY%VAe_I5-"@b(,d6=+: R2W)tb1'2[b!h3cUE!?LhJCg ?C[7`bZ:?agK**>JjQS4\2_uD;(JY5f^WZHZqQX+#6'BT?#d6itMg0a9&/hU'bmSXfT1/P1EZ0m:r;p>1i[pY.725=$SYZ qlVs`:sj3\g/7uWiW!#Q^0gu?oC#1"^\R$,]/&E2pXpfhCIQ;i"o^U64I^q>m``_# FUJYr^T5'gPJ=62Up[54[BcU)U:=?4e5V"K>ku.GJ>/I/":)d1TQUOr#`>V^i](%K ,3W),K*Qt_KFrIZr2omP-ci%q\)UBL]TCK$2)&_IqRk_'>jOdoB-@=XHm9dTLbDQs3$3#EDp 'T>NaKd5AD'O>8hMkM"#fEh.Z!P^XOu\t= NPlY6r1OB@)e'9])1[-er%pqbI3)RqMk5%;j#2"XIqi4M2f2fg[iJ^qXKK&DYPC*- "5![8XG7=iLCUEiJH)9p/)J5kfA_C!DUpp1AHWAX)qU(0Bu`\C+I)nIh.&Ip"TnI[ %_%FWZqh)4mFqX9JGn0+pA*,0fo]=^FKQWJ5*9[ar^.!Rm;9uk)PI:i#HC/JWh?9D n#H"?+SJmP'B"r/1&h>n)8Ue_ELKRmMH0BsC,:9\K:,1W3m\s0g,V1EKf&o28].)D KC)$oekC"'?_S\YDb`\>,D#]AVqU=6oJko6?j(AF'TI*"o,L/iJB/gu6L4pXr5/h$ ?LTP"s)bi\^E6Uo?5K7Y>q,R /:Vn3qW(NDZSr.r^/=\%9nIS,'mssJn)JcIs4;[X^O:nF(@\M';1mXEYE&qs .(I(5Jh%d+[g[a57R1q`(3"j%oc'tc?=Eg37J^qo0)O>>V*DZj]'nO`pU-dnSm:-% pJgD):&]p=9TPHK1NUqX1'?F,iMsL-m;7fZ7VZ4G=bWqJ,Wm4-mg&Wo=aL2K+?l\/ pb1S@K*>52bJ40_CME/F1hAI9gWDBrnkf^d6LAd:s1"3L5LBPLq&eOUq*,Y-<`dTE qJ*=-WW?0ig*)C-.M;[iH2a;E:r?Yr636j3Rjd)%'M/5jeR\pNj!Wj$lp.?D5i)RB 8m88mBn.c8])Y\6:^d3A4+`P%i,c_,--MCMNrp)CFq+o5sd]g"+>0[mF?kt:YCLS%^ (4]XtF'PNt8g@SkQC!4j(]ae4!1T%##7fc,^`?jo!d&VtNJ@$/R3428@-Cc1^_T1? '?9E8E!MT^iElM&06\\\c1UYc3L!q7i_4keOFJrP"6QM0<.aqq?8i%PE`%u0C>;:< >,W#H2;CQOr'*9nZS6.q$WpPPY,r6]^j>e>7Kf;%LI5GMCPTg.LOob4r6#=n9+0%a H,oiaD.^pQ2//GJd#X6%7rrFL!7V8u%^;d!<+)HrsNg\n.hDGp(cC,sWqb#K]*hX7a**^]FS?C67=U7CYT/qM;a-jK44@.Y.PU 87c_PVSBTh+Pi8&BGh"5)/]Q=:JWBN-C(7gERj-K@ViQ4i.$*Fs0:."\1-dJK0R6= XMb/bJ6KbOWUP1E`%W:<0-g`#K7NlmBW!!1M^iWd["5$Q^MA+)_Pp(JUtD/n!PIA@)Sr]`9O rM^+]s.4:Qqp-jUT3,Qp>nZ#/>^?([``lNu:G+/XXf.;_lIOR55T>JQl\E`?f1^tN H<(Ooo1#sWJ^ONULrNWh(,/QJgFJdg$"f@uff3n.b+/o]An13'"F%RUY`M.PQS.F] MrU)G;`+emlW305O3UhaLaEng@1,&AUuI5@nu&XW4F:?2dS6GpD\Kj7ReQ?cbb%!_ s8,^Pc]Z%fM2_!i\qH2tq#>4lSdUgL@.eW9n?6XP'C\LT*u+S[R9s"M-nPM:$h-B!"@OC5('&*M .4Z)6fEIKkeA@4g]IBdu1os3db&7D\F)d.on;jjSD;fL8aH'>G03A5Dhl6[+`0\@1 9e&?3Ldl3`dr=su0#/Q#c%-]9;Q3bj,nn22n4fq20X6GJ&E5o\$deN"5QqPB=_Ltp 'qY1kWPM%M`ll_+8'",M&tiV5\-)fJ]@5*Alb`FK!3AGI"Tg>Bo:j,R0S4P6Ru":p UR]%X-PPZTip=Ja#:[Y6Lbc85=uO57#gkCnH9/k*o?hkI[$7&KE0eNbjJ\%XZ'L0i P`U_70N.h'nu4@gb_0kOngY%"=:8U;+'FYV2@`4a(3"67]tEP1$^dEgJd"hDRO6(7 j/<=3TLKJr"[EFrj!.ji\IOGTZX\7]r37sUB1LZ'LYBcRgJJ?W^EqXhP)]X7lXJh! Y^iCU#4d&d>m%qZJE0&QTnpH5)Q\mQ.j=`_-gT3/NIr)OJ++ILqbq"IR0b_d_1*cI s3@<[B-u0_(N0BS-R6m`5X#%jfNAIfW'HC'XUO.8SUN$W+.r$3a"'G[plB_bR/aZ! \0h5';RN!p^ie%,I4/9W8cW4Pb:@d_A6-=\A/6#AI"O_Xf*c`Z!a75%)[-(a2NuL! P7hF:])3l@Xphol6B93]]cpjJqsbEC-?4K&*h$LiYkAWPig>C:$TDUkV]B>YY!";L *QKDZDGP(1duX;(#iu$5SPMuJ3]DKC\bX[O([4^HF3cI3mlOWmpM0<%X.;2PWfA1L *a^]Ch6;EiCfitBl^#HSk-`+J"V.XQTd!TF<28$k9]tD'gO-/L0%VeLPqFqfY388C_U&KeC"uN8hV=r2%e_f&Y H/M6DK,_*dY*V>#>k5`\d2TRbhnPBJUO*hB"Ud:_s4(VUs7p3YVr'*'r5J4k]n0k( U&=q&.D?T>D$39tK@/rADr)]$LOZ%Z'=6`U6asNi_S>jH1",l%r'qO,"o-sjZ2jYf /2RrBnBDJ'(OsN>pdJIu<2.B'5U-[V`,VP3L%m;C FB/g\X+:41FPC:W-N@&PDE:f_'5s741h'0,)Q)MR'@D.$A]+MiUoP\SQNp2.Nul.o jF=bL*Q!:dk!+qIJj"Xt\Zupe^Ku3de0)rH!4Dl4(Z_WIC:$62BETcQ.?OQarseA6 Z>pa%oDcs&+;Mr"jQ+4nP!]L]\C^5"o3JS#W!^lW#n%09W6 H>.@X-0CpkSWnr*4CfrM>0$_c\_gBS1K&UHZ:@9R*!K)PB.*BD;l6BolbQ!p.KL"_ N^=&&Wdkr;OnIB'>3,1Hn=c*IkhqVJES`Q;l^46O9i"rS"cV`_!ld]oT^bk_TGXsn BPtHjCN7"6@B9hn5M?GA#>G6(ZQ2jDN20[5qHD@IVVZQG,2.i)!$XHi%1W[eK /7u1]@s]U[':?Q\':afFRM=3DG.YA'\*[dcRrX]ZR^Pd+B[Zdjh^`K4[!0j,kPWVL 5&38U-Lgmsc\kp)+p]2c4UBrUV?@2)/"J0t4#A8lo#2IaiIB7n#Trt/3li9.jhO[3 &HJJ6p*"F3S(X#)mi/:n*NAs8G:RS\`J'Jt*dticC7%]kGT, XR0P']=lSuCi+?5DKK^5p$6U'CgEOo"X!jJ/SK7I/b_?'I[_0P+L"c4?`ruPe-$P% r3KD;R7_`#kH!PThbpRp[GJCDi3T]eG)jnjot,HG%l`q:D?i-K"74L1L)Zl[(Sc*h ,?:)].kbh,?ThQkpjUVKkAn:[,P0[!11%YXorG\rDqn.aj$U1t*i"2R1caNE6Lr&` !*K6q4T J\QUb(XFG'#U$pP$P*(6_j>E$I?+!Oj4$"OQhcOi=[0PFofp_As2*p'7fp^agJdh_ 1Ar!Z66DK^5J#CY9pOPiaH26L!d711'tL%iK96+QOFL%!EU8/t2s1>&s-08UeC&ru ntPd!P4\Tk'"8d=!m0*J8q*pHR+j79dnB9ANh:sUC#Qq4/e?JboN+bTCFmJ_6%,`CXe8=PVeaLo ("8C6]\jG,`ZL?E!-_$^eCUjP:F2LK`s<4R/dg%%-!RTqEKl<-CtU\F2>sc+V',K^mpBU hA6LjQrj@"45QLVCL["*=[Tk_,Q2mt"1a`64CDVPa3r9PmphCP1+XclBK'eH80@,m &*U"k3_HT1A8Wcag.4B/Ui$q#fKq;@8KCMN0Vi1r[/b)kX4O$SH9.gPK`8s>A)e5B-;2BbqkYNfc&.SAhK7*cmalhp^\@Pq*%Ymcf[b>V);-TBVXih'i8g=TZ r9mmVJc+>))>6;9+6-Of3Ys*ps%ChXKh:7q3,`hr@i=7`#T2j1+7*i0.F;@U)?FLV \n_LrCPN/[7Yg9K8(g`7ccl_2AgPV.E^Ka4k?>48ecN@`c)t(9Il%#eXRf/>s()H7 (QK!rL\`ti=VC[eYm1,e,9YtF^5Cd`$M,t*09#io15<5`JcERaL]%`'*Wgr>VkuG; `'c79032>=Z8^VWHU:C]:5?=\%7*\ mB5h."&=D_]g/AV)K(N=<"Zl#ltq=g#WZH^4$RE="]m^X'i&/9+h1>Z^l*]Q_7.S\ =ZJYbf5KjJ?%RT2)"`V.?N.N3(_?*o"2(0IG;mCqO0DE6ld!IaDiRoV\Q/1XDTO]4 o=fSqpHL:lI.-da?X0;=IP:ZE#O-.k8q$.WFQ!1Mi@4R"B68G=EL7]ds's:EPf+q& U&/(;!^?J?_$.P[4ZKV-@+aX-rlH/]fm$$&a'Zmlrr0kV!jo33mpF3B'#?km-K-gK `6]&=s&ZMr'_(!DTDRJdfmeI6rk!qV^UQW0r[hjBs"A72HdmQ;/mIV?q=L>61uCrW s#7Qs/8\UO9#58*d_u&W?JUI<$?B9@7U\ST?LI>On]s6#`BX'G?>`A$mKn]"ikj3n @c[R#12$]er)t#G!);88(4N\qR%of)')jQJD_2mTPZTt=-bIO`9pLXMeZ4>1CW!Q? Ym0^1B8Y`AjooAlJJhd5QLCI-q.=m.BeFdN+(qd;e1M83ch>scROUf:-2kDA;ephp F,i`0<(Z;5>dU(9r6ME=k>\+++1,BVP(H9&!4t(I(_KA'*!)d;1^&K0!9BZ's4)o& O#@dcZbTbOb8A?.0@/%hZ9+o9#$D!O!cefA^nDJ;8,o>"i)BWiVnjbO2V0!&i %_e21,!b"P,EXa$"<;.Z:]r3)?_!:9_(!a0@Ltgj`t8<2!5:KjKl.N3&dq)F\-khK &H*+OOLQ`ofJT2Te\f6@\s^QUAp4an@:](R1!Mk_?;pQJ.;."t448m$m`cV*1Ib*_ OWF^+(B^4e5!@/lTpj[a4`09J0*7,MS=qCQ"SbcRm<.09$`s[B@d:A *FW;V/83mroRm1Qj.e[T@lkVF*!%#E,EMu:(OubsqTXIB1]g.Udf9s[NI]j=Am89; XgG13-jfo4,6+jfh5cMVGS69kdf5>[qB,W"5:r=li'Rl[)<6a:E^g8dW!gE?2^O32 i!&t/d@l*t)u=mG+9G@Ho[KSn-AVYC%<4g`,sKQ+1fsoe^u02)n7XEIs7dj$l$jZRkW-PP RcOP=!l%/$.VE4\D&HjD#T+DY0uFMYQ1]6cF;mlb]?h:,S_=^)HP%10+mpN@e.d)j T_L0+ju6;!Qn!YaF4F^=HE0Q[Fi3?V8;'9=)13gYD^t37+h@u+-&8=6I'"bto'Ynna7]jI5*u/M2s#McesrAh62fp$[,5/c^%F(E(]m$M8(W+$Lus8'biHNO[19nN=/\PeY&S"C#Es3]"@J4P7H O'^*4i8s!co5QC1r2#oN%7MnSq(%6Q7tAJ9_\[CnqCLr.O3rH(2=m_I8?^m5qQHfX ^(`g&M!rEU[M,S%dK3o]$YJIL6TY[5ItaC=("!3OXG6#)o$YbAJi&R:;Z=3$LBmn[ "8OstiE(pE;G)jGb=`NJkLEBt[<+DJ,(QX*A0_+5j`NKu%($b1k_^_rV:48^o6lls K/L*"3esQW4imoY#NkfT"^u(q+'oXLQA"a\GPD`$^bsBFO4RT+CZ^CeB)8RKHch(( Mu'dah5trCb3V#HZWT\5jASJ>RG`R'[QZ0aGlDk`E#0V6'\Ms*$@9JGCpj9!fVsi*Q0[U'8V8 2'O.E!:W4?^JW.*#QXJ>A1S-mRjV]SE!2iEJ>R/Ps.NcW+9dQ,+T0R(@mP?;(p=;k NZ+eTFeORo!.=TYihSPCO$NET_*Qb/DFCCb"a"l!(moiYMq)Z0R#0Rlqg3@6Tl0"c OYHj.F>/%6FH`$Ih+m?P-%kp'<0Y[?'%!9&bJ&N)mojQOr8/93l,!DI J12Q-gPcVNs.A'd#9X2Yj!Y(-0+].`Kngnh_/Nd)i9g3J9fNl3 !rF'.!5'jS!I2HLTCW$K,dBaMS.?2c3l6UW\CL_Kd%iA._hSn8JuMejL@G6.XFfqkj0V610d8aHs*dm0F9.#k"sOFid9i`Z[^Qdtl92i! l(%pAcijgd<=OpQrK$[J:/#Z)Vn!%q^ZPR\3A(:D0Je?3n%fSiDW-P7e.3#>o_2AZ RS+e*H@*fYh;pe*kTHWq>u?BS(fC>Sm&qurFVORmPn!GOO7lTSA*EQtWptZ*"T>_A "*NXV%=k:Y#(C]R3+6`9!6p7WTi8A"Ak1%27g^8(N50C5Ho15d-2#J]g'tCQ2_C.F XjV*r1%0)Ch-,+jVM@ Ko#7C_Z*uerVIE%5(#QkY>;L]HBe-C!u\:JTmZ9I1n$:?+qNo%*N^lX,$QC+ #e;ceD.ZNgFtU0j/E6Y?`3KR2`6!1ma1>9-=:^[09$BY-'ch/YstN1^TYiYK6eEj5Rh^pdB62 !aYj@!Q?KU"Jd;I!+ASKp:mDp$kWL==)r$"4M"-UD\Y%]7*Kg/ninI`!`G=Zao_BK ruXYE5PP3:=^],HB]9m.BlkirZ2YJA!/OXJD2l(+&HSsK#W3J%l@8/M#Qc]p'InUL s3LgTn5?sVH9G`TYV\kmc8"LJ.6F5Q`s1o5n1lc7*?XB=:J0b]V$lnc`T>)SX3t^!Fk^+` N]$n:#QR6mpn+Mb>Hn,DVWDl_Eq',(ODo;D0J^QgmcQn>%/.!Cr7M%2"fTg&f9sir CN*>c3jdSm=5H#8FiaSrT@_9q%n?V;!<=BmnGb$]R%<=?pj8kbThjX+NRjdjJHdV$ qo\e_bFho)1SGC"1j%2LetjlSBM5#nn'REm)G6]pLU-rqr5k`*l@A,]qO,`cR5+^5 -jSUc%r3O_&83*6=T+2TAoXR!C+4.^AHt]()j\^3iu.aCRHN]\(RJgE=BW*oEc6.: hX7MU_d@b;Ljpit]b"m='2e/#\*n/GQ2e!)r/WiX!B]%A4.F=k>8qnXs7X$93tVM< \.OOB'eso2bh3hUU*)^(i08n#;K+gMje)%W9hb4!ek9th/R.SuXOPA.l^P?_"rS+YhjSYq( JG5[,Hgf'ui;KQ/5'RheJ-$;_5/.j6YN/q-m7I0S'ke/Ga_ScOq`fIZ:;HecH,fa- 1>dG5JbeM4K',ufr;Ga4K)m00*/HtX^QA']QZ><8NqMg=9P@Pb\1deNGEKX];sN!. O1lICrZTV\G?Bpnc_NfecPT6%>+2mRWK8jRHj6d*?=-F,0$PdnbUgt2"97C=5?Rf- r9(lq.0]Mr7>7]e`T^q[Bsje*%2EE0!.GYO>YbJ%X+fa[2.L]9DemanY%6$Y1=];e f2i8*?Q4dC^VMkH"o3fHf2j9g2)0Z$h("5_nfu>*Lk*8bf/q#m:"MHRCTWoVV;^^- rpg@okpR,EVY7YtF^@-8;bEDJW5?+sDC(bF"lWMt+&@J5i3<6$$QuB;&THD&$4[dp 5fKY#"ZQSI&-6G[J,nF`&n]Sl#&,goOT,h]5]RT91'2b?$Tf*6L]!2u4,\r$^`#Xj ]-7KT-8*\2pLlDFJc)_I?]qp",O'[t!HL1V_4fg1+Q(Vh7^DPPh6iHAlW!h^.p =HsEui.!G'/WsmhOhGr?F.Ppg# %Lgl5rBE+da53c]?DN#=%-<+Si(8:qC&30PdGB/3qTb:Hi.EDu+$N9li$mrHc_>M()?_B.Abqe( :$1IP=0jJM'NT?'`o5:r@m8j!ddcd,6YqS0B_"8a1uM>ELbCA@2FI:_I$dZL\q5$_Su>FnTXgY0_HMO79O1I^_$VfGD#$P#k2DqnEKq_X]kuD8"$\a,2;,H#:.'7M&JhV\4 0T@c9RY$m_a@Z%U21(Zo]N2GtV?o;*@@&/&0uc>QGbAt"fY8FEhH:rTh&,&(SD)kh hV1eU;IFS.jMpicqW)714nD[PS$I% r/N)&D*bfm0=&l[Q\iV3k,/f4;uG;tiRBgt%06oZ8"^#&j:2T="p]Du,=9S`G\0R^ 0\<\EUp.#1i18&?],oqXqOBU^ld34[m>sE<crnk8/2d*dp((16O4K=p l7E[Jrh#Y5a9`ZBe:D:8=T?kgji!JiPrZ'/dO4K8K<"BL@%1Q8Fp/dn>^f9%B ?#2D7R1,oWYG&J`=?9tZ2e1igZ_p:YVT7u:fO$r%N(bi\=F'V&J]47B+3n#AJ4DE-h> h%1-g$d6kNS+abEHVja_[&5hlkI,`_U&)MG"9+(9@"6o:5WYFjkWl68JXr0G40%+o BE1.8YT?\2"3hFm1?<9ZH5Zl,W:ORli6*BP?_c4+"7lbG_Our3oPjoHT*tXZ#.`LI L3'WR45uNtgFddN<9]`f./h_VZr_0Ur!us:`;&0ee@2SYhKaqTraV0'*iHaP,Ro"m $-HTrc1oc*Bn(Hm`*3`ns8BhaIs\JpEF4[Pl%@_=c0%tJ@[U#UQRh!:2)E57EN@_>eo6%d8C?K]h)ERMo Cjr%!ZF@na.N.M$12Cq?Xk=TrZUIJ2AcYH8WXO&RAo1C[9jnA/06P6JFmpqSD(&!= QXt,n;rK1,9H^@XOOfTUop!INCD"q;UZ3*iT(iKQ_8u@!@ddc`PDSnk"R$$(mmbr"3h!+dhOGCV2Es-Ai6V,5YEU@:i#9s =pAu[CuUD0_l#kp3&!%oL.'^UjA1/[mN75AK&k6kDe"CpeLH3[`U%6)&6g#PE\CS'0iO[QRV*02R5."%I(1p2#!^Wr9mum #OL0+;]g"'`k:-n^)iC9AnYR"3eI;@o#I9SScSP/B(iZFP7b#6Rt)4*LfiZ!&L%DT 6U'!*pm_Q'>n%D(?<&&,!0D]Ys!r/h"X'ZBL^9@`9i(9+/AN[+L]H<$#Tr+l4t`Cr P0M<&Q5?#VrcVKraPZ=3"J)*6hkeA@b5]Wmb/IL0pj[Tf5%0RUd/5Qf56e%$J=-N= 2g&+>%7pI=\e:,)_%jj6k.\-ss7,kKpj`.Us2=aU2N@e(r4+fg%Y@&b!lncL_u:`! XMb])?q(aTf2L,L;[0o8aFCFlI&%S#Ir`%/J?"'9K!RECc:8+N!7j0;A'P;))*Y8[ _dA.AA!R??a5Xa>Bp$09aKmL>*=MQ.q&99L7;0+T10_%??a..E[(fdn``@65;0Ua= 53ilP%>[dbjnllkrD:[DU_We,oQKtsSY#eDI2G'Y]M$=qGLMZG5F-fIs7('_HDi\: Cr-)]q\5Z[!3CU`>Cp3E?Fe*(om3h;5N(YuHp$nJ369naZd2,+DMqRYYZ:PlDXlmc 'n,+)ofKW:IrIL@Vg$OPBD GOLZ$hfn]OpE+bBJYR_)HM"=pTGL/plP&OO4e;E-F,@F-+p&%+SRUfspm6j7*sqam r#umPKm0.9^&8Z*n)c3I/.IeX=6=W]hkrVj-:jSpl/d/WkHoo03^IWefX%rP#>k3:o5N.:OMht;1t YIcK84>r@;mE$2Zcg"J-'I'i=9BA$-)f!IEV&ABKaR.o82#]kdp0t<6P3[UTnl,'- 5aK\J0m/`r1E0S "K2JpNWikF6qf<7s6fntrK!k,Z2`5J+%9L6rW($sXG.!/kYW.>]uZB;5)Uc-Dq.N,W_6H8.h#Y6(f ))"q*8XD90M)2a+P,(=U[diECBI!.BS!3R&j@n@10 [k1.er7M$bo9.XL+p-+&O:[eO&OQp[4X$?"#U'8h7Kha]U<.E>bZ*WX9[hEVMfhI* ?Yal=gHkg&[l3I7!Wqd"%($"Zk_\fDlI5_SOc0^+%l;_]mk_4C`k&=uMG?<6rl$om &]c%tJ5>t_ci9a45D9'q3D%`o8cL/B!;n*gKS9BGa6TE&(`fb#)+"ohglM.^&,):k "(oW+MICQPQN,H*rQH+*G+?6"`IkU4FVaA-K>^H(nBXg>>sPJBMO#(+0h90E7fqF# hmp[K0@^4AW^;W/iJ$j)Kp(iBdZ^_3qmP4,#CG@I4lmE/r:^8PHQa]$s/D"'rQVKD >1d3hKIg49U:$Z'`2`6^QTi&^o]/c`.q`PqG*2IR9<95l`q\4u atN5-I/Q[W+7@>K_ZQgglQ5Y&J(NuYkGF;oL/'9;dg'(*[7seE&P:';E9ertn/qQ=DC6V. c1<:(a\BlETUB0"rr95&TlI$3aQ1s8UjT1?b1%h\3nn]"qSJB_P)8&$\Y8TEZ"j.M 3nuU&b`8grT^i?`A+T0bA=-Z+(k<-:(U10a,9if+[nu7VWJ9713f)J*d])*OZ(BtS NdR$;VaHa*hSa(>UG_tD3\nI=">)lZ,.P?H%DsVia<(N`(KY6Xq.'GSU'9JM;'=f4 r,cC;R&-'sUAd@s!Qg$\s)_2D;43KgI\QBd!;ZAt(1Bn=Kfs:/DR>\+W2mVYcrQrX /H?n$g6CgX-)(uZ5mmZr2l0E^KYRP`mD25j*.qC=Du9C&Fu1?=f"(WR8,DoY3$@m>CeQ2hSeJTg%uG G%BfICih=JJI"6C3H9@\o'H'$L.Hmk;qlBj6mD[DO@Xrt32F>ZGUO?kO8+#gDB2,q f@K4jo"J?HrQ!jVf:'_sD-7n/U#pfQH=lnXjoBL@sc._ul`2XYV ZV&fM,+DTr>ig<5f`(!D^iE._WG5qB._]/qAZadoeaGK-4&,hQ5M\!M%4HGc7#lZtf:osN_1K*(HfE5'XI :#^:d!4PndECg2?V\(,git;+"U4?0])F($ >lR$T;%!6dm\A,@]_T?_Lk%]SSFZA`l$n*oh';D$3^G0fqS0d9`r7@RQc*)7B^\0@ Y+Bq)E@R.OK?R\.Ac2I4`bSZ>5IjJfnK#"*?`*h\%Y4IAGL:kZ&*#VC6!qG&_h3n4 5/d6F,D\9#VLeYP^Q8-l1fb"9E"_/UG#*?He$R/Dp]"9[THbSps7K2f Z`-Z.VQ,KP=69-hoD?.W/A7n/"6GH9Q+"dQ.-(8aoar\bb'Pi?Jc$hkId*h^%%\=2 jJ5:fdO![lnDdPmFL`R!eDQaqJ_jhc;@Y:oFFT.d<&E*-#VCR(SZPnt>%J*GT.9$N `3j,^74,K+K3aqs:m+rVaXogV1]N+*.H#\Br\WC3@/iS%5kps@aIeLUJ$i/i7OMbV oJ.24rGNtTKu(+-.1an&a>YOUb\6&bYGWZgRifbeXT7R#0*HS-baQCTD37Ckd\AD^ 7Q4*XG-r-1Zkq\ETX?cr7f[W33!);*s29kHN!1YL&-R*L&YL5+!$VU16mFt7&V0V0 &N>am3ZWePhXRg7)YP?8O.$6hs6;LGMji4E;#E]6%lHS7^R-R(>!eS[L]q;qJWrrr ECj%<\r0;(c4\WjGdWs0l?%2LH:)6^Z"fWps,+[+;["21Lg(tmFqXd5D28">SM9hg A1p,ic2V!HB=;C^;IKK-"Dga6-f\,QitFN?j'0p9G\@X4+R88"6!8)DF02l1QCD]K EmR!.5CUHJ?_*BG"9;$n:Q5aZ-cFJt18s%qrl^476N.n4]u0%$%!]BNriU4U)"r*i 9@.=%/-%m$s7mH"5K(U<76WUG&-7=)/U+h'DR\9Y(3hui!6jp) $!^f.a3+qgg$rJKI\>uG0QBAAobF bTG]1nY=jcoD=kP?bQ9fWu$i0HL^k#h=R-(hgF7@DS,m\Q`ko;mUHe/J%U[$"oe'` lFW*i]_<*H>pAl&Z!ZF7$CX@0[L&Ut!m`)TGb4W\VnrE*2]nk`jU^p3m2kDNm\KmW m>UL>U4)cJqR:?SI/>8e[r8"XQf#Q;!MT#3];WKUL\gjqeDEH?!;$6e*qCuP,lRMh oN*[eqtL'L?ePADF2@/`E*Rnar+EJja'?;,'-6=,$"(o/l/Z! 8LZ/`.5$8f5V"r)#muJ2^_@Q[,6&IRc+aSbQY->h)Np'*BTY*Yc.QBkgtp?SOe/;h ^=)i9nmtIjF/INt:`im"`,3/(QN.GT[1Ac;8hm4F&n'TMhY2m#]L%F)9cJ;)[3;p* i17&p:00aiYV]691Jfi8.NU;[64;/hSo&/_ehgs=,]j3^/n7h6eQMgm/0"[mqoOsB N1`9Hqd0DS_fZZ=4Z2JR4T:E?O%+[gM$Uora+42pp+[TYm* 87`KlKED,h67j?'nbH]\^dW[JJ5$e;!:W>6eW\oUP(oF,\uL_#MY,WnN1.'ERZ]N) U-.CaB,a_JKE&Ohs7bqL##7VmpL9oplXQhO`m8HFq.%]ec/,ZfGA_$oJ/#d2YdZWV N.C;_AMZ(K&J,CnLOEGlVp;WG-8spC63OAA,438]K-F\U!Vh.^=u8#aR[k);:!:?/ M]i&qQF5gtql84YdsIVi6N5g"5S*WS&qh&GNWA8KTJ&8As(OXc^CpH/0d\.C0-2$r !eUTuUOb9o!^Kj_b=?AXBr`,Pog"ZcVT4TVk0FYtMcRZ/6lrgTT2CjiuehtrTKIE-`2=HJ>a"> h\,W>LYU%F$iJoCFiXm\UEjm4`#,CXij=Ud"e73%$R'Q&p^dHI2e\iPp'G#2'ELB> -fV2]oN.XlPhd<2^V!G:i'uQ:-OZR&bC=e%kKBck?U%9\`gP'N31'HCo9nLMOS.u[ &`:0]p)c45s5pj:^phU=juXCY"X;lSDEm^8.nAL,pZN^e56bBnC&oAMHgf(X&"b$D m9-f>k[Wf[d*6$&+$N1=+Fj/;'oIM1s'M@js.1)$J]e!_G;B3a2TBrY@K--mqDZ^K ^3Yh4Q*\]>B(kedu,h pFTFVB@6@fb#m?p@.@3'nQ8TGOB&YZf:cn,7J=b;P'V"k#lBV.Ol SggZb!D3;M2UK8>Gl6a/s&DB8p`DqTR+enjZB5Yfr H;t-jJq$$i32Ak&#DTV]K:4oI%`""*BL%XB-\)oHo]Qs@6FqeBGp!0OUHmK3#8(pW &\u:M3!+mM5S;AAU]Ejj:`EEA-8efNMBW&h$Vj1,+oekYDNI.caZp!%OWlBG2,L^0 :^<\'.%;(\s%B?LJ!#Ngo&oNu\NDA>kJUem\b.4c>o'o8$ukLY"B0.pWOe6lX$a%5BE?\4L5g_Gn:)PNs8)5a\-;e[DI`6lbpgk^_Z/eC k0NKIiWoO'(Q`G6+9J2D=:b'o"/_`he*@!\UBj-a?]\^rgQq>JO;.[P0T1!MLk(1^ g#ANLBjS'MTNYW#Y:[4DX?)]M"3KHL*V,U`rfNi[LkSP_!gJ&WY.VFg(]QoHrsi=+VnUg1;.;AHRCXon]iG"5kglu#0m'5; JcA%8r$4)IHn9aI6=G6Soa&KBJAcU21g)ql,%/iN(@"\j[JC=LF@Fn/HZ>Ld4Nh*& (To?IZ2$O@L"EL"4$fmk":C+B-24ng]`]Am3iF-blZ"h/>tU/ViC<6(qXlio!P?F6 %VLk+f#7%dfqfji/F7,/HB_72a+IdgpdjYG"""lOal/C>Z I)+n'\D1nmV`*P:h!pZ%$!#atXhGDu]RR9KTrk'0[r\.sB"kKDrVTFA(O*4"]V"l> .FM9mB79Gpk#Y%sGaA!<1R.X*@D)1WrD/L%J+k)af+0QaEWoJB;"K1s!Y_s@ V:3X)G&q"QRJlq%jqi4*?TCRTqH4_Y-/Z7qr9DP&+5B3Zi?^6A?bJ2S]B:ubGrk'Q gIJujIdFW'B-2;'IsL;"RH`bZd57maF%f@bZt-QnBMDBn6q@u3BuC]N-5:'WV5Z]t 1]et;V8[,1B/,MM`C99J/q5<%:/B$IVNb%eRDl5%8-MifB5:I,7VtnM=8nSt?tu?Z @C0QVU`etWNrY&b<:bm`@!ckl\ZdmsI!IaqJdC$#$[+Yf9kQi; =r1GFp<6OIAu_rmAW+I&W!+jkNYqBbFa9jmln29JE@r50-"+mJA8*WQ!%@Ec<,[%o 6MhL#J@LafW?R8$a<6!-2PTuEaZ5/H/f!H./,o_I_ikH,DZff.)=Z.sQs)LChjAft Ak*N8;iton''=,X#.e#Z!-:eNY:?_OSWE+7ISIY_[V/cEJ/QlPNp$j)_];15Th`Nk 8+Bu"8\^sp[f^2-\#us1]g/XDKa9qLJ=IpNU'MTLmU`Ud'ipR2`4$7\G_qG1k\'@YHWW1pgBiY_FbVuXV1g:c#es9KV/+!hIf&JIZ >fNEA\d;:lcl3Ad`I_\E)M0*A2?`)^li46h8)sX0NT6f)d32*]J@MdiAF:3)R!;)1 I:m1%pg9dFeS'h_RUWt=\5QbgeQECQmkIk9';><'"pXCJ8(\saZ#S(a,k%u;Ve61> 1C/d:S-"KE5;O[SS)XN_K)i/QF*aQ%>u`Rb5<$E0Jq%21C4>U!$u]]P?sS<*?OW2a QG;>1&o]^`4A]=a6*NrY5%VOeN6^V\.YAcG&9'T(S;dQY![7Vp2uj$LM+`RuBlh@D G+$r/p"AHbB+QruOD$m"os_%.2&fu[7]^*@]aNJK)<0&hpj0tM]FuDcTHh:-IP\.E JH)><#Pl7JM4ftQFi`AOE%7P?n^nac:D4B*IhehfIOS+q*4bKq:6#,J,cAjYMF3j 2cmfp-_LYK5%:d!JPchKb:\kJsN>5"p=` !@[s35J558mNj.Y=3bEm][(nQQheR3iFDE5-fR-^DmE^%@_R5Qn]Dmf\rqP-8,Do_ nolaKrptlgDk5/N\%VF;D5DV/G4bUgZ,^-?m^4+HH1(IQp^,hc`aUl@84t\EOMUr( Y_7fbim[Z3A56uR6WI`@Grg$J&-:mhBR=Z#8Ht3*P2ZoF^D/.ae%Q.af9VQP+Bo=U +^qc.EhN1dFlj.$$HDrNB8-e\/1%a(E[]arbOt1:lqI]ij:>])o:M!fKRZ?WH9Ne\ huu)u636upho7nFj__Q\EI1u)W=$*7[YaROOV4Al-lOlW%!:S(C3"W(F#oQL/pOd[ U#8b`lJQhW("aS7T0\QmZk$_4iIAX?IQ7Y(-E7d,RYCBGUjZ59A(ma.Fr:aa D.MiF/.b!Y+*/QS(=:Tj?B!.QmM8ia._AcIe)-T!oX3lUC\".D+42=r&*rdVFTl:O 6GV#H1tGf?0ba_b>mZ5p`C!pe5snLV-StmY7W!^j/RR+uLX,*aYaT)rWK[_gLW0eF ?bd3ZR3Eg7?on'jVZ7uh+p)GMnir.bA.+J="[Z]_#L:@CL]("2dIL.7)ai/1es%Xf ck$l]^Pje.:r3/ODAJCb"/R(:?V@B!+kK\U_>MiK'JP#N3N8f*X11!mW&UiR330P; Z_T9rI[n#*,6IDp/c_dL6iaRoGSCGZIshIss+\cin:-%l=lA)d49jkrC1Cj?4q/*S jhDHHgCB9^6jD71rRh.["X&h:OQ01\1tI4iKOr72+O%#k>ACSuX6hF>:92r_dsE++ I]"pamKn/c,(@mf?T^F^&,2d[,%?-0^dCABrGT0RXf\Ndl$qsMYS;uphEG@l&%;r- DlD4PX0gS9m/IQ$WM-)GOFIGT*utT'Wp]1C#IobPElKXmb;eB7_4?tQ:JM;5r7Lh# !WSo4iI_Hr\N.M(4De(_t8:B e>lICeL:*aFm:2kb%'tC-Xs&N`DW=2:O.6O1LJhKmbc<=p3S_>q8obZIW=PU2sr[9 /\iI3Sj3qiT1f"/K;j?G3;qZ'1>[:9rU#BghK]qk&5%HH$$=*BaT%<^TY[7-hFDq[ $N8N0kl6*orlR7`k>12%\\if*K6_sRjPE`4I=^1SU$P8oXN.)pBB-?8\&_q5V7a*t p!paWYF`u9nlFH\ii+S";kFF;J(/W#lIrL)(6>#W9Snh+4*i]\%HKf,Xg<_]Bgs?@ N=rfr8/H9FJpK2]-53t@RYirW"V;9-#n_]JH76nPJGCoBs1/Qej%K/h30+kKGM?X@aTtLiU7n_6'ENqTL]F.WaO@S'MZDN65QlW8+T_r5aV7:)"edQ! qPa`#o+Ufs-OtqoZmgrfjf^Q(@LeG#!UuZDqqDrZs$M\FIj'UeTnimb^ueK;!p]&A 2)V1uW[s5rQlk-.8!q&q.'oR#"&i

;Cf[h-_)o2KF[86W@ blT9jO0L;ef9TBDI`H2mCJC.W^T.b'+82.enqS:pSHVDH/GohSqd"O310eU3N`@s> s,$E@aT'3RNtCT+./o4^%3Y\2NbU!A_>d\UM-^_TYNYDS"F?#,k+3J:Irc(oIpfKh A<_lJ5<^4jq+o6@B4jWBniqe@Am1Rlr$CDW>Z_PFn28/U1Yd[e*YeNs[)]m/ENG%f ]4K#l<7Arq8lZ)\)%@@4`$"BbEh@Z)A.1!#&^p#!iL>a6&G:gTgZD IT=2E&C+p&\6 Cd?gVXVRE;/3+9"p8Sj3`L=KWmB#f(.`:-./PkVk[q*fdElMI.hOf9POF*1PFeb:P X.OO(T6WFf^Cm9s)pGlHOSW?-mEnbaoC:.SEVm>NT0E+D(QSLaQ=E.oSFXZ_WP?2$ jnJKis24f^#b6/2JWr)88GhGtFEeFk$0"05R.fZ0R;Y8[rr%J62m-&.F!('f=(kG. J*.UDf?ViP3h?6AakR+[EpeoBD\&(=neU'@b.GQTH^?D_5!SA,+T8PNrTSIYZg6]8 ihYaI=jMaWT*hG[mRqoZFo;6He2s!p0?g6[=OI;(Ut$O76jIQo__AMSoe!8R-<@I3 d3PS^q,Cc)R9u9aomC%F7Wiu+1]is(kR'j#!>T0KR-HF>5cjd:iZJ-%7M,`[J%[H8&]=*YT3>r,L&('*_*lRj1B-nr-n(gD$:F.q"F]n/TVX/!(n 2'c<6)5dIp"8K1,Nf")>%u1&QDB]uY+#O*&f`0&!^b#Nu!RsL9B-dH5 XJUQjea:R]/YcU4Ap_p+?UG=^s(ooqMBGr?+okn$e':5GK8P\EJD`)3r%FoQKiIPk 4bjI=Ir0%'F`eJ65J!pQX/I;=TK"aB-mPoL1G:rp.*+bL%FiU\2F&(_1rVtcbnjoN jX,e6TM$6tki;[1XUpp)3#*G[,%(K5T)_RgbQ&dc1E3Zueu/7P;nEXbam^.O'-?!? %;c7Rj+4pe^FA.sL>3eu_Z.QZr+Hku\q&(U:7C&p068beU$O/NYOSd[rV"Ne_[q!8 7m*Z9YBSg[Mg)"7Ka5(r_jf$S1q47a92#B]\jB^*mP<-)YZ3RA#ho<:rBGkqIg62^ rVZe]M.8LjJ"<_Vkj5D7100jTWrYQd[Jdf3!)`d&$3(C;s/2d1r1^`)EKYTVg3S3; N&E?5#S+s`[(%Mh=qVtoKM.5N.#Gd"LPL322Q<%AdK*VHA+Ql/2*a:"NJH9KBUM"% Db!1_iHB<-="&(d>28"or?$&1:^c2r:&kkkpttIP,1[.D?$6D0Fst&,Q@QFZ7mK&, _1_`gi;e\I/J:fH!.GP6ki@6?IO#3VUCR.Y\#XoEAn&?Fa_>Or>NNu-2OEUGkdG&9 Ni'EjaBFos;!kq>'U64g/%17rT#^Js,?uf&WQTNZ^::1B'tptrb[5AF7+oA p>XQP]X)C!(Mu/k40gNOZg[Eq5N$1'c;/j:5^h!Tq4'P4W[mC!Hhs#Xe6"FVK*Q$3F3#f7NoL:%_IS"-$FP6c",`_#/^\8B,4*Q9Uc: 5lO`bP,<#lA+V@3"6[#;]8DI0CdiUVJGaatR3;Odp2#ijTI+kJQSYA^)hXTO0`OOB !-(JOQ;!gCY%M/Ju*ZDVBKVZ]Ki"sT_TWt6JJ>F46H8W3`0M#b)>M'CkV rYHno"R'N5&;l!*/V&G(r=A0WfF^Bhrmu7&-iL5-B'U!*&)^._3!G*R!"Bg>kl[X` J=d-4?S&%0`Dh@t(us$Q<`<1F-k#PmNuA.\ad.`ffUccmHuXdgH6 Ka='PT\ZJYcdA6c,/CP9ichbb4jXA":]s1@M$Oq_[lshCs,$!uR<'=rVrL^RegL3d iunAmcmWQLRt!6@+8>Ft^"l6Y/jn!>:2*78"<\J3U1HQq@K=Y=cUgG%Y/NlN.TGjt T+*&5br_]k5h;="4^E"0nG+ul%@maJ*_*eEZH=Od_Lu0$resZf53],6gWjXLg ,gUt-*1)\E#R:T[]tM)HmY6a^b%0TEo'bcj2fr%bg&I-4*uO&I%J*'0pm,pYpk4G_ H5%VX!p@lCZdhX'BktiGX:WPs=BlPmq3RGe.nem`,lt6],d]0O7XLe?p=L'CV``m< "JLA?,ik#@AI.n&_0H$OZ(N7$Ej`Zmc*+aRh=jU"aG*IYs`Be9J@'q,aRMT,O h,qkW?"9G6;U8Q'00(fUnrOn'r6)FO,@B.gnVu!Hh`62a7lR(8l"qesH,jnqJR@;g T$S)Io_.=Kh24Me5J')?B:%(S].<3T4"3D)PPW2?Zle)Kr8&aR2fE/Soc3:Oh4.!E o'TX6]G)hVmk*1t=)D,6j%Dh198,H#H)F^7c`cHfCsT^63W^,`/iWAs(ZPuEoen>r dL,g0I/<*lXPJ`WfI4it86I[pVi8i^Ngr:MDKfkkV]'EGD/3UZA9=XR9MUn3>S&+8l`Cs+LRT"6Un8H7JG]p@:0/#qJ>jb8+omT(WH7U,!-C&N R$M^j+o_q'oRj,ORRi#[F6rpZ9juP(KqR&qhkjhTj*a,UIuLNlkAUd8FeY!BLk'(H RQeM=!#c$(,o-RP`AG;Z`oU&9fH_XB.$YNX2#(!9.P)e*(M2\EOKeWjEtK1/"ge8. _f\?`^mUhQ/P[T9^hm)&Z,,9.!SalXm(a7A,K9n<.=bo[iMZp+P, q"m>UlX"Y^@gn"f*P-c,la+(ZqENqgipc,r)%f7:p:ksRa^`"2s+mR#l8?V1III?t DZF]F2uliaE'#fT&O9"mR+;Aq;-t+B(9uo0c#%;$s"?#^c-OJ/-Y3r,n]7X/r,4L" NQ,/8^&lN^d1jLi@)BAS&,Tc2b]QJUI1:frgu/kEka6=0>Vn;]Ssbbebt@0^A4uO" jTToBp_!Tn0JA0d++sO,Z6EFWQE76^NEWbj#riTgN/(lhBTGXqp,.WQri)3>?^6j? pA\_m^DYRNdf3M;s*1b*E<+l?c&YZ6DAX=p6`8cMIuPg:nG bq,,R0:+p,bZUY=Y?\A5XkKeWp6mj/Xj'mT?RrUhQ.]53!QRfhIAt/n=DV1iF=\4& (\8i/XN`'fhD4?4)YmDMoc_ZS:PFgX@5I$2HYMA$S+?N9-[p)/b"jZ2qcQ8\a+&L$ p^_7)p>6[H]mB5$Wu$frf7g!`H"6,hh3@TgS&jKtRI]a7W8G1Kp5S[NYFT+9[)[Q' li.Uk*_qkGfmVc5H?[!-e'm.7]m&kWX6M>+^%^B1?e'W'cKsuT!CnLK"9^as&9J2. !dTAc-pSt!6Bilj$AJ,uk[e@K:%-je^+?0]K6g+5[%uPc3nd_!fNQp6qg*;ef`#haobFt: =F`a;Pu@Se"HK^dp_l?,L@jU$b+nopV:5B3E"K5dQ\k.>d\BQ<3l'!qGh&0hT)XAu f/*E0]c"THs3HdM6,/H[)l3LTdoF92KaNG$Im+>Jpn.9N@h)8Lbjst"p/;1Ss2jC9 \JcMo?u?*4ILQ9!%=)/=`LB!Yp3A9iGJD_q4Z_D+3'2M`4^-2Q5;K/Z',`Y8k-IL7 G0-ag-F2kbmpP$jTRn-fi'51pUj@tVT8Dhldie>dr$,eXCAU9eGG<`^G+u?>aC"GP PF_@hA['U#-io]3e.DTm$]$i(@4+/#jSE\/[tX4b-%PNE#pfR4'XkKX]DHI^#iH3r T(*nh!+[>$YO__cCg!fGeeuhB+#M`m9JKcAS7aVKGrG\p!O"*L/3miR+r3H;K#0/E (3"B.7.u4MmD0V.G[p@8gA8\/b(;tM8;\14+7TMq\@b=Jc6M73L\1qkAKo)VU3&Yd $H^b*72Ck!?7dGS9=aG)EN`M.!K)olQA`HZ?k018j^f,W!3-#1G(EfeT>?!iGqt,u O3%?3i4U/@DYhZ%^>lkA6h#"4L(/"72EM(s[f,+R^Ra&$)V'Q>PC]ps47M "TDdZ:k63iMLKUeHZ]FJJE@X:lltr[fC8eKn\9$Ba;t>jPOT[/35F>4??&!$2N,oh YoegPDp=WUr=oJ7TtkCkYSI[d`1pOE+8@,85r!jg/ffMFeB003b44i(1O)bWY*Y27 o,EdJJ<7QRe_G)P%KQM,c7s(NpJ917m.g4!Wl61si2N45agj+?jo;1=Xoq#f ^UZ`Qqcbh#!V7BBea+Ae*=mM;Zdm\T\p:VdgEVpe2="WQa6i"\VkjS6+G/35fGBVW bXHo1*%O:uD]QXF&(lYE$C*DYeBo`^\&^9__Ycf,'p#K8U8hlp#muH`_14K^'SSm5 :e3QeJV5G>&uRP6CegGDMphinXFgtTYS&c/3bd?ITLmoo@D@)ke-qRd3ntfk4??8n\sCuqtM5skZ25bU81kP %#X%Y8UOMNh38(=bP\7ap@C'*AVp(2:OS\,h.A(%M9"Z?j*kO<)5NMqF/oD-kl(cTQS?U2]^H+_>g0^mFAQ1)A_gL [nE.\+5Q4i^,R5$G.+r?24O2"hr0'2n22Bh*<&FP,*:](qKNL"K`+!^ccJEKN0-F0 n-=6`#lXi44_.tdnjf5m3tioi([CU)E5SU3i<&h5?7o=[iIBG%!Q!Yg_N"=T[fFX% (@WF,\'P'5CjH;S%\]Sg*`CMbZf;%!/U/3Tjk/9TnJd-SJAldA#l)/aZ?2b2nXmVs 9M5Ecl]'CSs%O7kjPN6J2nr`TYSWr^J4p3"&cb^e5[>T_+#L=a@*?Iii4"?r'UJg` >bOcp+I=ZP-'&5H"Wi/E_d-ZV(V&f8*c"'W>QdKcHmf$:_"gr3OcChg0i^-BkS!NZ+j(@KW'Rt09I=2u[Etnp)G^Ybun:*W]4roE0e^jol6oZ=>n5+nuT5B)mED"mDnE:BAf;hobCRp`J):j16#a5OCKfT`<#t=J`*QSUNAS/ %\"<>58V*WjDi<0_]R-Z%W.:.6id6Rm^Q4UY*@G'r+]''WbL!@D6-c4:"6*^Ja1bf +oit4hY;mZKP+]WTSk^CNX)mb32i$:^lCJRqR=\h/o[H_:G*)!e<''4FTt-DJ*+.W5ts6V=O^p;rXXq[.+/[H\o4]meUI*48rtmC!q= 4Xh9,.joqS"cAXM(&_#1r6jEhkr_6t7Tr9jpTLrKn Y";5cBsB56QDBq#$l'?l;(9\(AQbcjmA@,[WkA+jg>Y>4J,"f::]@taci;&?:]J>= :]?\^+91L_+8d5lI!T-SK902aol-](D!Ed.ciU4S^p=E[QgDf>jkN:KnNRb5a^"dUFfpU 562/-qUos0i"+/Cr("rK5N)QQ;[NBjkKu997T*KO#RUS5l2QkCDc8GdLGZsLm:B`- 6o4UV;=lq,r=4O;N;"\Y]E%Zu-OY-LJ!",g%f\Q_*C^s0';!,J0`2q<.`c>$\]o6* RHh+$pd9`MZ(]f7C]!&0Ib)agnAjP4q4GRo#=/ZXoW[8C65JKFN?Ea9k!/H$s6U#f ##%_WNQ[GY8+`1.]W_J:]Zh=?seLN-[p'*!*WS4f6@IfQ*c'Rr4fUFSK#rdSB34J[u?&Vp@cmIL!DlM$N]a8G\S3H_Sd=XY$4SY-!K0L5eI[dWdX$>L?U%j !<6qgd>0K66"\ikM0o%a(Z0)m3\2hoR0b\PLd<1l4JQXK'\$#EUk/u)"mg*".5&5: O0K'D!;tfd\V>tC!e5I4n_O>WL@GChaFT5as0/$tOYuOd(4u[Ek`(5qp^a'H>`i8J A2ddSnGf!:-^IJJ,+)`>%K+!4VWNOKWm5EM!a"Zr/5\Pnu!=`R#Uk/UGi.+W/@Eej<4>"-5 Rpd0HSm^GD-ZWVrn-SeS/di]\Z-g6ce,_qqho5e/8ijIr(E_S-naLQ?4r1WkjT5/` r':>_3WE#a2AQP6hp%%jQr,4UiW/`u@gtCW4r`6fAeG"]c^;Lt-ijefQLXLG`N?6G UeO2TV>L0$O2;9MjrbYC[](=<:#-D8S:n'&F5,6KL+E5`uJ3f]LSg!!#el0rUO[+UhQ0U>K*@L iNQWJ!'Z$=ATansg92I8D9I4NIbAdnDMI#GPJE)Jn-,gOd*a`(K6eKSML9aa#(:P+ H?g6M1%g-iNSRBbp7&c2o)BPf)f8Z:cnpU72A@oCcGZK884XX/9$e$.*gt%tG1hR% X'd9dd-HkQ%KD7a62sP&[%<(iV.)O^e3Pg1<6h&ao9r/-ZrPP_bIVjogT).q2:J4, *&^NdQ?gt<%U4ZR;a5)hOk]%\NK\6Y9ibO)>n(?Dam]_C:B^/7)_^ZVI4N^oF/7uc p1IJ#VjB=:dG$/ZhPG-9Rt!':&c="$olt^:)B;-2+*A+9WEXcDC;3p.XVZ13\ZJbA ,G3dCjNpkCU1/!VO4QYklsqoY,7OD'`e,4^XeY$>7(qSW7I56Vug`)E^a4cM$c[KXrr;n T?PIkBk]%Gc6g)e,cdDD>ici!bKU!drp]ZnO+)TNkSKGdrq6)"It%4@?X1;=QWHEJ pK'TUbH(C;h8KX!B(Ed1N'@/XqB,^[c:@oAotbQ*Oo@r<_gg,5pilV-s4>/lIWtSN [ms*kGf'CUA'Rk>r0INED+??q8I'BP[jLLlej/WfC:h(6.Bg.:.ujI!,HIi@(%mfm QB]ru@S"S%]pgHJ1G+:+<)_4C>a19Tdii&AcO"sNIOE>%@(YfBVj.QXJ6*J"H4C[#]rf/^0!]Ci"J&g>;aJDs-*,h?(@WoOQ'_L4JMDUR==I#:o(O VgR9)OB[\7l3TaGOLg]Q0#]2XI5>Q&jl6(pj)'U!#rsoA@Zg+ftHn0O&%Y_ +SF;@8@)#N`OG^#?06qQn=#Ce=A,ukSA9M'lWpQ(f$?)"lpMW3ICUn.,,^i\[7')^ dm*pQ/SM&;m0q)'E@8ou)%R@A5O[\Kr4J22-K5(pGor?=LR3X=)&G7!6p!`/G)4nh 8s$<4XR(J&m5D3h7[?K(7`1?+d3j]k1`@;,rulE82UT&h$5"-e"9nm<_VsJ%&QF$j MHWBtSC10YW+T;&:/r1"CDK^qNt9_S0UeQMa5B&6plP'd`q&uknu?GM76t4A;H4?u6:@"F 5R`p>jYh+k(*9tNcli`VOV&-@M#.n.J1;L@0>r(WWVq/2\5PR1+A/Ek4QQ+';=J`G "S,porKggY[,m`5SYLp^=LS]RAmf,`C'7';b;rJ7XR-eRTQg1g/0+ck]Kh!H;X;+K_LGD/YOm0P5^U!-/cVA"A-)JLQ^fm^@ZeoWHoIPMT>Mc# /=ln?Tc-8T=5>uV=srD)RC3:5pds("m[2!7h5IGE0$ldNlDOa_UH[Bc8bc)i=[IkX \MSp]hP5ab30.^kUr`Fe$4YCJ'^:DG7Phi\*?$TIu+&:.!/l*?)a#o 0;R/Sac1+O':qV])O+!u-Y'3Vpf]/(>5.7q)IA*BY@Z=laVj(+TcTe@+K,X2;'dV& ;8be3MCDHU0+RhIpg-T"e5.cQ"A1/Uf3r5Pm4=X;=;Mgq#leV4M-?`D6+iIo\eU8*rK1@_8#D$pdOAZJ(6jjErU.@]t]n`n9t"# 5KUV5Zbcs^=o%j]f0B-;Xfq^iHf=.Y`Lh9eD`Xs9/ac>30Wb]f2+b8,DcL@mn6Z@o hrfJP,:EDm-:Io@_Z*Y+<)6.PeV'_8'BZ#F$]'$f+V-Niiqi0$EjDo_dk`OYRR'Ts SM"^)BZGh%K?&48a5ZOTj6^\=i9RH"m>#'Y-\i*!Shp$pnD@]Jr$q^S&T01\[X`P- ,-h=O(3&)9H/;hPfj>s>n7Jurm<"NtD>QQT_YcpnIlZ2052<[8Y6+VTRk'\[E_qpA Eq$bub&K^"/4b(I0c)c^j1+ajq^Du8J65;<5OZZhi.&1.dI*c1O80'pa/VW#K#e-k Ec)7n?b9hNo&#'aan?2Ph-m.o,H$M*,-P:]d$2goG!]RebEM`B:*R`\$A\j$%Cn+nieeOhYcUf5/?^kt]69=V!O'>LR#4LdJ1:gNJ6V;]Lqs.KAes;95m]fnIknU+ KB/XfY3".Yq%NOUW<)ggY*lY5k8afkU'HEd^Z[aEkf(=om276VrMTtLJ`]$GV^!eI ?p?L[pd:jtZPRF[Np#"(#lJaPntU55IQe-X`RL%kpu?pOLr]Meg'=22*l,Nsf`kGL gSI##pC3)O'qdL)*gDJ``$6aV'#EmI8-+U%Q0@foAIAF$&hD)6MVpW=L2='/09ek] LaiTn"lD0J_Y4iPYse@>)g%jOa!h-1F]a;T'7Y2/]np5TZgANo_o?d[fr,&CF+PPF ?3LlOr^6H6PU%+FkVrPrs4?E5._GdsKT\MW/VEL0&q+cT5G7X/$)I4kcE1^mgb#&cB[R01MEZr:a5ElEg!; btAun0mnWL#X9?f`a!age,nU$b^Z;NpLa=n-[Ds.s7_h$#8I+["Wu?mc-GUGd2ck! U:]6N=Ei#;gsqgdhIWVB'9t\N2N#D`$j-"3XV<&(1@RNh?kE=TQPXje;B?mp5O1bk *XI6;rh,G;/cSZm#k%rqncl]#SeGK%?ik8XOmP]-9MnQa=hH=K0YB%'Oge@rr9>TLd$LE)I_n^8[ GTJB]B,C=`_LPPf$Fs\U[lieO`Vh;4]`o-KKk$L ?OdDJAaYOWhOOW1N#;,5Yq3l`QNQ^`r#9K!#['D[Po%sAi`\WS/#qm22'>-24T>N`RlMea^QD!I-dA8a=q'oh'kF)& E`c?PMTT73:0aH^&/V(89F/0ogrmYhJC]GQFuElUQ]5]K%E]f]6Q,;"\)dj-gfH^h3Aei [9&!?R0APsEWF%,U0!Oqi;`E-enop8ZE9SF<25>F?^*Kji`\rVMXe"r5$1Ls`B%k,$F-+*]EOFMHdaH,;pCcJ.-:FKfac#QFI*RrWfaDidW]Pe&91j>u41XQ@.="6bTNs6nMFODS*n2bY\com`Y*6oecYAmdFZjq2=#G1u b9,%*hl3W&FmZDEQuoErI0WU@G3je@&+G'g&\\eUmf<>X;:'ad^HD5jr'=+Jf'C'7 0)QgBMnA*;AoU:,1iaIVWc?3+(0!a#M#Tc-(m"q!LMmt'&*8>n-1Q>4LFWr8o;MhB Il3-VSk_jI])=V^"8SK(?.WZ6NG_NJSrIKY^l&E*A$,hBK[H*6.;OtHt4FV WlV`NqoKr+fQ;],(@^D=:?JdCJNNr4bGj`RWX&=FNaE5PK>+qK7;L'5ej6Wn:)6gP 4(O0`D9,;O5b=Uu4$b"%ikBs=!O(#AJaZPNE$GP"@SCng!5%;4c$ts_>K+=+c+?t*%!gcJd2t=]cCdnoU@HKPOCmU+br:dgK_#QD6il@dF6sPsKMDH,i TcbqPUlb*3%:u<6+DS?L7.o[L=9/7q]dCW4+G2ThMi(2/Q3.'+-*]-gjp1+tZ@6OC a;BWF\;^I_C$N_l;kLcqJ+.m_]q;,Br%&>(mrdj1'CURQli!F8URM"RSGpFel$MBq +%HcIVQ:/NpN"q_XbI_$34"`X2c?/lL0r+0X'&:G-`uGEQ-sELZMk@6;$hdKhomL; =W+0/OanQ+"8iBM`MB5u<`RW6lD1^@/?/ILoX7p9XU'FbA:qr,&jBh/JF85O'6#Zh :*soj>ejgC67m`VHWj=>/E!#s(/Bl3_hL-m6!e9$$J+dBTWknp=XN//m_R/HB*%pcI\g,U`\,&Jl\[Ac_pq G[WOdi=@F8q2#&7:Wpi@'&b."36X:]^QNLD58'jSuj]&,^&As)IW8nK6\-ZSF67RD6mo+MZ7C^1RI_ _LJ>5Ng9Yr'Z,?1!F!M-.79l(X4j5b`5][&c%i#V:WNctUrgOeH;dF"i\ BL<2[DoAG_R<<>HJIDKp+hV5"J5e)n3Zo]kr%<99V$suP"]f-I[=j#['Ab7X:WfZc >$>.VkaIpG7f!hK8tWLIV]`d(,CMmXaW-Vq#Ok.(mLotA'TZnM^,Z%_GAUD@r'-To !WM;ag%gU,./@?brdT80q=Z<1qI5cg6-gnOVdnK+^jOPW&"B"omC6g:3r9iIk@R9(!aC%4mD[4 2slrKkB5C)e+;Ag]haF_kMm\4_*mA*g[3Js('(q9J?0PsbN6Z_H#C:uP!bDIYZtO= n+6Ps^n9hNs6mgS@YEHD4OhWshpZ\Zl?<'7ffX(-%ViDb8d-4l_^D\>dA^=YIis4H M!^B/I>WPV4r7DtJ4djWKWgu&56SG,'QQR.7r97:+UCt/Hm\2Gf2KO"5.pb$49b4B Jep&HEYP_crAMTD\!^#Ed6Id.>L8C#YDqpnE.`%7#f;'n&<@-]$#r!Pa^uj7s)M73 peR8Qptohe#lg"urtSoB_#JE]SKONq58k,'".Y16)>DKV?=q[\AM<[p'R_s#HuTo# pbqdDe):+!r'.d`]Jm:6h_os\2LM%GIM+j?`-q-[IJ4uXiE(3qf,hhMcq95,)9Dk/ )r]jf]PO+%95nr$?6LQ9B;NS[*;EkmY;JpE:p[5)o$@1tK`;VPgN`t`Hk6Em8H.YT lCt;iXJ%6RDPX@.C9-7o>pq#]MZR;f,jMb/#@SA/C-Of@AHpqGHf+r`$`XBuY'e3t ri+ke5iAh1>;GK1JH&XpeR>.um0kBh^e0c=/sH?i0Y\IdJH[mZ6EgHg!X9t(Gt!0b ;h>D4[T5pN5[<7/E9"oN'4V!J_<-s\ekL>ji"+e]?\Ya"Guc4;K!.'Gk(CE6pd_0< $!dQ@9cSbBaZU3n'O1W; b+]3gp!QFDU-Zu::&Y%[s(hE@jSsDsN4c\0^UXc%F7+Man@qWq[mS>Mf.^p1!rUg7 K6i!ESDM=5PhA%-@jN"Y,skLSK&VmlrJE#cJ(Q%R3Q4:>#f)-4?Zr^3-&q\"M=>gD LA5-!*]L#V_/E%"E:3GM#.G G;['o]%]Ab\(/ac1"r[2h60fOaM+3MFu,[m9>ji8W%&F7W%S8Jq`Q.%B[C4D9*4ZD `D.BCG9Ve[?#no3n\GA,%Xu2bg,S<8>ke%)Y;-%\6id7C7CF"-%J_JZgp]d #Y*aWU8F[:`qA#1!<7S5(\7(Yr(eUbRC"f;PN%EaZMJh!mT[%L3+[%l`Q]JT@n`-1=1<^X2P#g%BeXn9ir6Ib;&XfJ($H e:!]`Ii(+^4ecsHied'r"/b/lDj0ig.cYe$L>"&0s.X= /$&/72\K5Q:i`GB^"T+n5M>T72#U_r752Whu>$kh=K'r-ue;(@[r\!1G5di6q#4j0L.la8;".9ii]l-p]DR\r70Boi%%#6OjT =LTs3mYT8573J.U5qKgMAV7c%L]r=!=e*n'0EbcDBZ]#bT)-=s6%S>;]Peo JNo5<_a"/!FV7(ni:TP"ogK/Es(^hG5'B+/3T,2;2dQ0;kABUjG1%l_U@=f2-mi!q rgB-9)3t9o6%o8G"EC%bk*8D!BRr81PXHKI$\2D'i_^tRCRN6jg%*Y:*d7s[IRuc( RP(&;bEi+`r,UK3$]%0AR:FB [b8bGEnQ-HJ#Mi&-8(B%j>foX\H"j)tWtgkl7UCqmIg?""16R`GP"jV>keA46K'!7H!M+\(3SA%Z(=XU>7pW:^0Di3Y71/HC@Z TNd's#iKVZ+p%^\-5'W\&,HmqT`IoKU&Kpjq3IX'=D5KB'kkq_`ZTO^a[/1\^ ]!JKkHNZAkGcX&5e=S;/)rPR6*BL>l[eJ\p?HW41%hb`uam^SLqn7(_?pEjf#-e#S Ra4LsHJVi@4"^Lt&blm5;p[r<$U?'&k7[dW1&jm4_0uRMI,"8QOBiTBXsRH? C!UDB\"3,.(BW?Fi!rXu)_&E%r6N<*n+4;Y4ffDo)WfFc_n#hbd]o9_:N4tm\Qs67o0A72t4))#1IED>8m*-KGOXho6- ZX-2$1(dYM/56>fM1F[$JH#q:2"$Zk-h'?:(ZE'2icm_V%W>l&S&N<`4aku.SojRm @G*?6R=YB>D$TS18^@eB-NX[#2$q$fc3,bM"s6Qf+Q3:M`.dftj6?]e%oda\g#`@c "7VpGn]^[uf)=[L"`M:j@Cqn1VIS)"BG_3NK:]O+f!H@9c,N>MIU&opb$iB@ig9ltPj6-8jlq!?WMt9gq+n37&q-VCicmnN*s6DZK#l*<" WrW,anm3B>o+"EnEEP`Is',JH[QqY.X6(bmZF*9(!7G.ek@KXC$r!Ic(7.so@R?07 E\h-A,/fN;fjPsQk[sW1FA`JHkH.2\()=qRq[bs[ZpB.Q5RA!D0o6(XWdkAi&4=XW ?ieM/g(Di[$Gd!o"VDTfTHjP4C5R"2hQP#4-#'8*6fcRNC[f"b,l+Au'+uR<*,q2] r/EP&Sn:0])GV]rH/QGLD\;aTcT2$A(BFH3;[W"9hE3m8CSK,"C=sIIo\pAXW-dQR bP[c[$rA?/HP$P1I=?q&8,%7B/iUc6=pDNC'I'`MlLP#UT`bAp1SR&KG\G+C"TeYp pKKn,Mnej0!!7YeIo+k@90'Kg%"D*lb4V7VK`BUZL'a5m9KbP7OSfXe5M2ghj$.)Z IiSHKNmPFPob#@H+PdnKK_U%OACN@'2@4=']%+_!rnm#C+U`h-:Z1]Zq;6Ocs5Aa+ "L-*R5W#7$7egmZU[)^C-+6'Z"4+(3R^G8a%g)8R>uqIY^f(QBMO!X Il"eC"o*#FMLb_E4-3h7[RrYo.1!cI,UEe$jC+N5Am\+jf$^^\N-dAHh8oCMF8i:H ?kY!!Pn.`0@ln'!F8hMI8$sP0n;kU^R&9U=rriikSd*%R?`Q/L7 5'13-RkEI,C#a;353`o-S,'0iB"a^>ai+qos&97("hYHqI;_QYO8'5]QT47A!rnBf P%6hC$*OC0bOOCXlEHI4l/aasP$qNO?T)`P/]UT?q#p8(nM i'5?`F6q3d5(S+*-NXfQ#,T73d0k>[IEX>f#'""K9^iB3o4.nDD?o^Hdo_11c1t^;9@=,<+q"5a +oZgVDAV2=kI=5;\!c20d_,Ef^OFS6II'm^m5k0f]^phhrR626`uFT1D<))oK).=a?B]auM]Em">Lk5BHS/AJ;9af-9@4_>g4S8@57!e]^e4Z>(XqAOR-dE[#Ld9RGF.(. B^<&@mD7^`ofS.mDpo%ZE;/p_Ygqer8VRs6m,A/+S]0ZDNb2+f_:b$ DPPQo&Gj3E9X9IW&[SJMp=5s[-1,$^Gb?$Y:OC^A^@dG7,9,9/LUY&#Z?SGWiIAP: Jaa3>8!E%\FqjpG^?=Oc)uf=$+"-PJ\qiZIIl._M(de.D4r`.Hp2.9EdrjDahDcNW :\s2OG(.&cfr1]I$Sb(&,0PWbko^0oYfe8EB@8"/-/9\2ISe6;!rb^V!iQ00/ns%C ap(r=iQXu2\!]Y^+658rU39Eh>h#lW:&AeVnYG9XmC9t95gOEV5[<6&r!rf-nb&-V $T-nYo5Cl6(Q//.rjTA>3WC`bXOF/:n:0*B@K+T.9,uQaZ_=/U_EL!.M[t)MV%]>t p]e5.g@LALm"bL2Y=ml^$/hEY`-rgn#[YaNn&F\"F8jKeGQH_&I%9feq6l4`k,1O$ U3'L4\n\1KLAPdO.(.Dt'ZL2F)#f+t=HngOZ8#3".0ZGHEme,Wg8rBM2.a7jm'g"" mF>WX%5d@QO*_i8":G2kkd>lTs)MG798^MQ&lE'g/.Mp(!M>JC+-e_gVHq6HT2KLj -0r[)C&_uIcGPjR0D6*PX[t]WLd.1t5*a8SQ`@c!Y!:XnHZX56W'7%l%1JGcD0L$V ?G>;M!*b$6+r,mj86SR,MCEfsV5U8VQ)q9W^*Wm#gV1oPNM_OYr8P_oW,!08_u'j)`dH4"d6Oq/eIP.6Z.Y9KiUal %N-eN#&gsNr"n`9b5?o,d+.;eJm%"u!4BWd]b;X38%G9ZN)N@k4V`I$6TC3+KGV*f)bl+ ]Ss(U#o3Nu!q8DfjFII7s5t/:[h4j3o'cq_o.Jl^q%NPDD-VU@d"JP4p?L=K4j0^6 =u8pJRSFWJeVDiR)ikPJF8/#P2q\e@A[VtIjuR-n952CKL#O4 $fDPf&]PiC\3gt:$_oT\=9'c;QHf1H>cU=+s1@OU@9,06S4uVebF7\,DS'W86+9Q9 kbda9eH0tUJ?/pI(=7=P#VM?57#=pLHd&6d!bnS#)5E> fB\rL>+0>-e#o<"X%-^[BU'!sc@`guk#4?4kq,#u@3Z46&7(-I=o!3-H$0jf #[RW21&oqu-!Ja"M0O],r.OcG@OS*=:fY?(/_KAoWJI(GXX(fIq0Roq@8Sd*"=8X$ &A1P(`0mPXQOjq]P&aT$J[ARE@K+Gs9biE_b,DpEi'6IE&dn\$J@a[!s/>r.r6M:7 L_-Fn,4Lh18/1\(]l'FbNkR0N!4.]"da6@hjM>?NcGK,6f/njC2Io$QME[;^5*^pg Q-$d;X?9I!/-,\\O-__:FM36B[W!6^J^4_=ROB)?-6i"s>`hg^MCBjMP#>[VFMN@\67BP!H^s8@NNpckn+i/`Nn57uj=dF6t/D/U3n7W@&:]]a1%\(<"p[8C3e W%,A).1,)./@Y[%aBV8TF&?g9`(C59J@1K.*cP$U%]\8LR3./-#H#S1.C+XKY6Z?h ^l&8ULB6X9&[6iR5^;3LYlc3F9I:1_"YUbOi'YZV].ia0)j\O]E1,p#=qMf[8k#>p1Wpa+-Jk:*\%UQs3XrHdpr7-$+`*. eo+&FGKLk")9+JD8P?r:5XcGrU>E?ZVj$([Tk,[6Mrf)fi:t +HKgfZUqf1M9dC9R`,:,!'H6-,2dsh.#F@'EJo5F9#A&\TDt/b 3_n5)kQ_PQRIF"\d$%\6rU)T6Q$JG7> Z&A,I/=lr^bB+m+ZV^G3K7=`!!W">.YOTdoVr(fgqK(kqI `Fa$:`o6mU>XS_;L4pap;2@f$#uN-#Y,'%ES@DFX[S!i#7FnT`#7]4nZSLdJ:4$d* m`'Nj'*Ku.4]Df>2>!?< 3klNpjru?qJV9X:o26fN[,U=m:crCn$l/5g`ti&o3%X7r_7\G2jT)eUfY\2G:dkrg To&h0:R(@TOaN[d#;qP"SIkRE2MT7=6c7K61c0+gNFdap^BEUVW0bl="ik;=GG[Ig P@:'P2NnU[VQcKFP(0oAs)(mc"SEkP+-W=-rql0q7":m,r1?si!SUcWqe6'Q/a0*f I<<@+G^p/G/s,dZ"n6LV85SgG$\\O$6,CeNrWE'SG';$R-h,1N`H/mcN_b]g\8e(E *2dTmrY]tD5@&\.-2\"mq`fG;o7NJrHY@1CiBM)VA,\jp-UKGYTnY.cM8"?-R/J4H.g7?4<.f2./@A`SK&3N!#FI/6V"^M(6R@1qDM^^*hC6O't^kO j8p7X]TgLtOHHeRkSc"m9O>KCJngr-.ZQi",Zr&q2S-5OZ.S[&qqs'.!TL <%4lZE\\01Hnf&YZcs$[:9$(`8N,H*p$-E"mnb3E)ec$f;q@?s6D]u"@t30c2p8? PJGGqIm*@.N'%n$(D>m1jgbiD8i4!Wg_W;ZTm>CJOT-C%9u)6,!JXn9TVEmPjmWGB a3E%0UPR4E!WV+==!N2kbO/@c>G]h=._ZLUX@@faOB3$5bIe<.r[5Ma3N[*/KR^9f '>`QZ,-;p7gEG2SV!$`nkG)\;(Kd]"J 8j+:6tT*Y$u!IiD9o=K9cLBu%/Z[i;=lL^HiZqK*.=PR4g>*CV@8/DtL FG6G_ns)iCp%l\gXmP5&UW!lU/ee5bNu4hkF%!q87jEX_$#i5_Wu3%t?2hUbJ##1*47&ol1ZuO!_Z?G\^r$BU ]0'?V5KMsFJNWF_ho1:!(fCp.PE1CBpk\F*CbZ';O&=moLqS*`\:Ea9l9:L.h+Al` 9+F9)TX\V)@g/FoTNr>A&]qpkEQB=2R=o!),!YRh=?t@]M5"=<1i/Go46QN;#<0!J m6V5#FPJF=OmkSQgE?EhRf\&[s7te!FR0BZrnkA*re+VOI8ASjS#6"]Y.pp+%SOjU _L=-InD@t-enS&^.AA5DB)GGN;#!PI3(":5r_C!hHX[!UIsAhck`]$JW<2'3EQY$V $NU0-_jep7?8m$]9UuTu-_m3#=MSLeGZcb.<@ug&gJn[t!nT"OkQY;MDI:aJ](49r 3Uf]I/hG%bA=nm`k@<9B`.DR7Qs)b!LB;(1_>UeQ&IJJjs5Uh%e2%THL/D/:BV(AK e2l\)1/AF2&'t,f(AI.jh.h*pT@qI7\'UjgBS@FRp:J7,-T_1e[W=SAT%D*W]5cTG -]Gm6>>U4!YK4\End0RbM6L>^U'F0d!#ah%*4mN"^AS6Y( Tq\V=WN5UO'cFRs@sr36B:H3A7mGQUSS;e-'AI9^cGI>'"P!Y7ImfHY8^[oJ-7R3: A@]'0Q][D"&=0&Z<)ce:oM)1DD/96gJ!0ip(3!8Z\ZW'keCU;#2ICQM^)?:P*q$]Z m=.&Tr-!D]h>,I-Q\XI(*PK!EI!p;0c,K[?aj0MJk0r;cD1D5U[rU"r?F8eBL3-N6 K+#$n]NUb&:,)8o7OCf'#*tta2R*61"G!`W>;R_V9X@qHs3i-?j)%*sZ9]2LagX#f 2Q#)d%WGhWnEH&+Jb^o3)QaOoLR_//4Jl$a\Tl`%7a6=Dr!E2f_]Sp*,.Xc%XC!14 #Mj=kcSIdliMFlt4FnU_F`,aa!B`kCG:4Xn$!9I2JcrkZr7;==YR?+Xi!tnma=`C\P]?.An37T? !rge,-YRX]0C*&RLG$TFd39cp%pd+.r8g#?lUOlGR@'$8:Z`2#;.=A"X>p8]U(ZjJYU0gn0+Sdrt `\#`JZ[1#'^D^otD-mftk5:"\"9/VnFh@jM_Yco>a&#Cd9ele""UadpIU:Zbrlmg` CGg**3k#$PI<*CkfO=,`ZF3dORk'G?-#H?W7^0P=%f^h=-O23q)+AIO>-&^AKC&f1QC'E143DnYH)I60Umnq2C3If.[iOCUXCV"Q0@[Wj#di2fbE\P#[IgF(&67`4iPXKNZ0ARg$3^ bsi%$+J<(r5RnuK-9%sKG@NZB'Y>EWag10X*)=s3\qJ%qSjiL^j!DV5_G%K&1Q23e Mt9t6?K@[5`X\9N4SFu1%t$r42fj/0lONo#1&(?Y_uUF@fDP2q,s "QM$EiBK(!/7JX9r"0\MIZXV53!_;%r""'e5p%V97Fo;+s24so*crh>RJ).Ar:83P Ik(oJO-787L#L@nn>?BgD/,qNNB7)c[.6j7nDE,K4R`1]$^eh]hZ"bs50Ct)s1Q*@8";WInbXC%FeU4#49OZ.%8c1rHjE'Xeg-ts?lm-#4Q5l\ ]---uj?<'sDm^53W^V*"Z,9W?W1,p7V:>INAsCh?ntp-;HsX0cPcU(Cq4_?1X?2Q5 Y3WOZVW5F+q^sq$Bu^Z$FW@0ZIF,Co]#K3FeF+7ZIJn+m!0)aF-H&Q(_A0)U3`]a&W4=gkg:%IRq73Tl&, $6T?nMk"k63=-6`LnL956`91?R@\fOH/F[.f@h2C`cBDT]i@j*f[K6UR^SjG>&1&* EZV7TG\>T5:9GV5fARC`*@WlMDnH3N/#8tJ"fb]`jac-/"rsG)JSKK736\UWH=?WZ \8kh`29MuE$6.2ba8SorT/X9HXmPH*c:sc=T3';)X(*2u6:V$X!Ak)/.GuMrH.G9A T.r^&CgZnI0\o$`m!LPt!Wc]O8943oMH_st`@STB7adbLHZb0FAt `5a#&P/6[u+4gSlc4R5hO3lU?6P':j>aSiUa2HIW?l2b$Fr=A]`qP^-GScbL;=0A3 ah^rdVZk]d&(CLE.e,3cQ2io6f1=c!-3'g(I]&IE"8%I7UU&dQ)78T3Xni(6Bc;): De!a0p>cbE\LlF;a#!#PNDf-KrKBJp0GOjf:jh4./GS7h'RsT7(SC?>-@52Ma'I(I B4TL,#0%NA9gK?b#l0i>UEg#a8a>j6U#9W-ig:51Vs#@d5Rbea4QeRhX$NA,RP+@r airYFS@7fZ=VOe(l*sJDTok:dr8kPc'#Cf>5:"r#'Q+E`!o=L8ofird-+bCbh'&b2 Qk]QkBC+MYr'b9%kZ*fHU]@r_D&b7o`ls/D$_I,4__%GQ.>q])Hqr@"1NrMobrt1X cG1f8pImY31XHV.4J$g2!V;+WY'Z7Od:]?^?'dZc<4!/Y"8oZq(\;TUSh2)Efo11, 6f.L/LBE6>KFmf!0c)q:>_NjtfiSddi.(dYrl9.irM!N*i%ciMd,@mT']Wj*lk^\Jl&^UeSL,S#lG1=PV8%3G1J'>5!k"kgi;h65E s'0)gnNV"W#Q3K4l]U3HB"ODd^^l:k%s)MO/^FGYhm9As*9GiGr7Z.Adk%W0b3X:_ %Eo>TLU-re^'Wr:B_&,"DbgK9NI[M\c5Zd*Qe7(IeOk"QqS/D"ai@F;d?S5JpDQK5 F$:E4]X)eQZrr06XJ"@#5Hp[afH([r#(^(Z+T0pJK9fb"XY\1ib]>[(?N'0`X:k?4 K)?Mda$T,\KTeaTPg3eJ(W9C]_3I?#[1m3n`7>FYCIcLS!O?)$jF;Q=5m1","dgG-GfG4riBB+B !n_-cN.>)\[[`e<#Y9^u+TeCpOTjWaDUhU\BT4amjd-WGIA7 OUR)cpaCti1a!A>aV%5H#8*@a.^H&),XWhh1`]r!/m7Y\:iM SU:.2q*"FKO+!h9[rV]MO"7Qn&aKB]?p#9r#R-;tGaoD&:'>'j_8K;$3=Q+Sdkh+C BEYhTj6jujQO+#?hb+^jkYBM*Zk@n-K).^iScJQg+ib9^?hNg!n8=d*=f.R;Io&?3 o(Qgq)?5?eXbo]VI*r#c(QBkf7mR(KgIX(-o&&7ET]W0CBBjsHWXJSbf":P:ht`m6 5d13Ig/0s?7SX(*b``S=\@m[mT+:e$Y"?u(j*sPt!6Cf&5P4X@c7ZE%H^WZ6Zf8;D qoq*s#oJb_IjaX<:AVF55$m$Z(%[!]2krQ3beFX[pr1DWs2Wrd#RK0d+9J2>#aeaY j,-@AjO2K:!%'SFWV5hW=, d2C>/;%>#TNBeZ/-i8KR;B\djaA)k=j8S/9Ii6J&%PEsI4(%&EpU>\K!>%FkbAA6\ 2h;mX`!e)r;sM>]HBH)FWb6#3KD*o$jc+FpZ[K'(;Iq).CSs&8H%"`4Gk7Z?Fk,V[ T56er'nli0"!raicQ:iYhP>t;X(?-n?GD=Bh iEPM^"L:e_)iL.6ple-jCFDS\oT(SSsNWd&Rn]&s)kgdf"[@UXQG/f!ZXV\&-:,Z1t.fn-b0]U5:QU-%nFL'QKZ5C jO9NMPl6K3Dj2CE5MY]*nQtn/Hh^SHTZfKT@/IWVVf.o_Dp[siQ^p=f2M/+@$ZL#Kofqm3;=kb" qWWoD+FgGXgu1^Un0'a[GTE>B=EK7`biI1LP`GZ/P8th\'TdemNq*^YAq0l^WW*6\pB!+7JLNW6\0S7MJ$$fn4>^N!D8Ti*2-:efb)3s22$jYJXID M#Wh+=TG@3cD@(UkiSE?idYVrXB>Ki6]hXjkMtPoG-=qGiITmTM4XOSDLEu5Hg?1$ s"=L'rh#36O*0(!JX%#Nc&DQKZ!33)Qc!$,rcoSIlWHroeTjA#I*40`osDjQ=Ah&TH8U642(-kk#$K*A6Y=i8R:S?IPEE[B0ORZ_F0C !51WD,:]R6MTP7%F9T0&r=,_!62M@Xr:0b5W]n1H>hE^( 2im^bJOXA6CY"sXE'DhOahcPBQ$[\q4$?h1"7724KDC)A`n".RHem[9k'o?,!q>:m IX'#MBlCmr6i@NI"-.nhXD2q?+9O's;GNE3\Oe^WCI<-=!XfUt@M%fH>N\EiL]F1_ ]7A*lBr#Ah9e_W;Kp2I(;#r>7:>t`#O'kB!pt)eHk"RbDq;-'#?HhRpu@s +APIP=&N??NIXoo?&l!Q"On'Sj2>+W"YIOd=TOG1nGd!HQhpaR3DP$P\sA!EJR@l1 +TFYhm/?XV"Sr)j=n1)[)qL*GPqInul\qG^/ h"6&9)Bp:=RY^c/K5Ndc!%OlFf;SN[o'^,;n&WJq"!Slos#^'N/W\Z4--lp:P/lZ5 gKT(fh"Leu$P@@TG'X$!INNY4EmXltc_h<*H&;Gjffqmdmkj#q??bT/SPa_2MJg9s 8AX0er=@TmLSlP"ro#8fIujV^l"M9%RKEE/8VZ+A$B`kimN*O$Yk-2XJ$*^AqB)%( aA+,ZR![1@jYp!19]LT^36:!P*=)1go:bIkqi!(R%`F rf?cp,@FDMn9TDOaLk(GiMMS7A\Z gap%FMD!c"Hb8@r.JX.':K[=K.fi4!]N:"'&uq_&\s?59V):e5?VB^b3W26E=3@Oo @WnrB<>>%OV;bgX]Q[1L5Qi(We.;Y?]"3S'!BS7#'ZU'ao"R@Gh4C(I=Fb8rFi>0t'=]7?Iq*pWs2U%' "B'b<5kr)qK6F$4HPW!]Ul"Lo?A" mQO6f=V(U:5J%J1gCLDQ"B;/+&5Z/BRb>rl4:h@>G:9-`s*-"?rg-O_s3d%EP03fC 07/1u]E!"D`kM^[uHZRg@@gHiOCRi OI7OE-F/bj6i^EkT7,4'Jbjj]YO0r?qP!\N9&Armh?a>[HmFdIh<%`[YeKXfZi8e7 g,fXSmD"12olo3apY:aP]_-L')]/TBl@3676JUHIrqH6u=SWI]nokp?>kn$8Yh)A+ 5N6mH#2CX,J8["&+"%4V7)13u!hmt#,oiM46mb:KnSi:G#fS1/3;c(ZWTd5kLAE!^ c_LQjs1P`]VAB74qn"qDK&Og:BED?G!<1A0:WNKaid[R0T.L/Ds1KP)4ii,3mdgJH >8?1K76ZHk^MM[NJ]`IA-Q7Ws?RZhgrYP#3')<'s6u`GU?i\DH!WRfMl%O'JfPciN al]5!rVqSC]g1XT0\m3qVUe*^!1nXZklo6:+^&to5RC3cFT^;jhUr`K*e )c(P?7T*EJmN.%jbJDGO5KZ4R?Hp&`;#GtGP@XGUjM0&%gLZnMo'c7$_D"ads$sp* \uD'7(4MW+/S6Q8S;j)GYNHoF"Xb*0N<#(7!.pq`\)`lV6IKmVKLPO.l`\9<0eWnj"8rLXIta4.;-3Qe7L/Ol'uH^ilu'8 1[6tQEma]ZX_*t/Kftau704@ki&h6IB/hp(TRcM>F0YS:"j-*a4@(E%d=13HWH:Nj1VHCJ(='+;PZGum(ZhA:-oA/Q_G?aCjJc>o/!N9qU 47B0KQ+5@W!9LDXQ2dLO2oNep@i^-anN05BSro[i1doP0"Qs:2:Wsn!%>Dj>O`:pr 1\61'+3YfMk3nD#VKCoa%KoZC!.=;_`dZhF1]dr)24=:_,JZ8"pJ+Wdqmue$>:4ib $$)mB\6Co[e;W/(-;WCQPZ]mOR&"5JADA:oq30ffFH;L#+3DfaG^Gh#TDG1B5>KN- "*E5*F6#IhKHr)>WW=uXd!>4%WQrSP1VB6[r\gVCikk15f`n2 in&U"a?J_*NY?H4W`St&tg.gXf+95C[&8L HJX,N*e-Irj2's20QXn^?rH@0^HQ5TJ-=TO73cRH*_bIX>P9 C76dppak-1>t9*u[]2r_!qPBWXB++>/-r;1SSEbIDn%es=CON7aI4Wrr$M?W=h+.DCIZ*e->(E0g4t-E(b*<7hbBEdW,QfNA *u+`Eomg3"Ps9P7Qce3$_[T.&pDEQfBKlWr4ork'28A1$fa_mF^^/kZLj"N0s8/bg`POo5BA3rZ5N@6T^IF66s-X.;j*s0* 7[d7D3=6>u[>IFjhn&cZGuZEp0dd,@cqU,tFl?8a?99e5m$b+JJ/WU#%aqObq1 Y3s5>hhm+'s36c0MZ:R*ruf*/q_h)RcG!pCmpU^&!!b#g?\r!R@[>!3H(b>9J70Tj L`7-Jo; "e]sLrhh*?p]pUZ>reLZS4j($(CCf\&*H[p7)2OOHJPkl06#`$>`aR?-T*d;0@W+G *LA'B-"1XtE)bIR.e71iV&rP`XoL#jQ9-222h?/pZ!dgaAP()9Xb+X>]Y?U?>T^."?;>roQR:`[bu-X #CUBM+?l+reUB9bOb%6p\sXk:R4&k):l9-Z6_!-`<@$MUn@R9S?4IP=E!"kOd8A4> SH;([jFcgta;VJe$-mO&X'OAg/9+5h^jeH^]X3>6:W;3u8>$.]_i5*&:Q,7&4Hmqf U[l0,^\Ij/I'881!$D@Bq*FkDB@3?DTEX9QE4,N#I-nJh^->r75$Vcdk3DcAEb_<[ )hSnKl5fEKL[:l="3uDm'QSRPSd^*fi/a(oocXfXONm4^b.eJ$6T_Ndedq>l&J/(N T^im,#%Y@7C%8C[lP0A2m=83gD`8(c9uDqfI?%`L4Wo.SStVg$R/0#e66]hpIj@&U 0Z$?Ca!\XmIqfT%,pr[rn2#H_!b<$*55rS%rn%>bLuKc0@!IhX*1DKc!<;pW/\j2+ k3P"$s.-_U]6_]$*4,!kS)k;qq4pkKArqrQ7/eE-q5X\:@".U[684#/s.'`NIoIm; UCeX0^CpqN,bb=p4[o'C_5Bs^6uVrjaQ?9;4uN7fp-8AF3a`>gR8E4h<*F\+QO\W: L4<-_s6]RmYf/g*XoJ?QOCpcD?&JECnS#[]L$nei1-UTm,ZitX<])$gs2Xo"`(i09 !"RHT8dZbM]9M4g@p=ZNAhL`f$*HPsV#:"F@bB!6HL]fnn2t#%5lOjd%a0gS2@"Kn 9CSi((>MU("Jq(PJ@tT-:OO8Kcg)p6JErNg^?kpr5G,^Hq#g2;BR.Dn+FgKj/!d6A q7NASikLnCeA?fPOB:sjQ+S%YJ"Y_'V>efPfP0Lu6iaRoi-u+1hmaLHk,5$Jo,5G4 (;:V%;ktE6rr_3ZKPgfF/1-?,.2*(e!(bbp8_Z9;\)9-A#s1*5&u7\gN)tN?hZQB% YbW+u!el^e+-_BTP@7$6YY,Nm"=0bSkr=NMN22i)P`,*bOrP^>VSlJb\f)cc\*Um) VXj1)rp:s40Em!iCY-ah)h9T_Q07D[9mOBjd1j)TZ.q0qciT`f2B"ZH' +3dT94IoCM)spSe;dQXr!0)N4rQbZIdhVr_61>D]j!K_8id*bK2_\pH3a8Dj'0&R(W^gB`d!oi2E`u>no"ZE RoKB9pP.##jsNCs!+^`SC>?Lko!:-$FtU]cL=qgpk:jSPcZ'nXmB_5t7>5qaj51pd T%[QLs3%PBf/psD+85^)[.fWJ]mmaG5lUfTE=_,+!WUUSJ1fbe+(bJ&(>r?ba+s&S DReS2dM?6`p1W^g@%k+qH^(!P,q$$]M7A$DMK"o)Ll?igp(VpQEM!eDId)H&+0GR2 q%&DV*IR$hqD["&5lSF@pH./Z!Okk7rE_&=PDKLKns9e^q30ff^nr3(arf^51_%%? 6QYPIa<)coY$pfaa?S`)#mJ0FUL!n\7\XD?fQ[WFIit&IAmkNY-ICbefDetKGF8.< !V(0,*Uo0s#fJ*1'5;8<*1[R.0F1"=ktl=W#[Mrk;IB_,n$1h%"s1r%\`mSYVB*-\ -KrF?#5JDp^Ks#(nlLa(/q,d!Em0Rdq-f+\F-;2.a$`GS*\s^"uaLc8AhY*!@ ^5uo5h;0D7]N.&gDs'=lAn_8DY>u8srZ@tBJ6G150auM`TJHbW:Km-a2TIX;$g-tQ HbFKLml^8mfS_g8khWm.#\#t5ia.YWQ4r[$lMlM3:,Timq&cIGLk'N'>=rf#-T:Sd NGOiC%X7WZ709tP3on2B12ctOF.&!C4A@FAR.E9Q]Zrt0OlN.;9UoJ88uVcZPqW,l (4c2;olT="H<5R3s7]7^rNY[c7OnG$l(Y+&GJH);N+;(hG;]o[\`QW-@C19]Wpt.mfYt^k' 8U:+L^G$VZmGJc_aabf)(P]VN_KNl,'+aXI&HP?d8lWlhp[cgR;2Pr^2/=Jc\6t`=8N\N 24FPugH4Ald&@M?J$8H.??Q$^\P(8a^75Q2)?J2B5RVN5R6nN9)@i2YK4kVmri]o' \/@[7ofm9oido(IG;8H]a5$1G8j!UD>_M"G@6ZghhF^1]aln%/^6qc;$OIlNj8V(\ %o#R&,6;,l[h\CKqHW>m-cbUb"!.^%lbk<=67tAF'D"P)`.e="r*P8abH^`Dr*SBEg&:SILN6*PGXsQrXRrgRbos_[1)lQj9O`fFH;);+TLE)Ij>XDNJ^&AfSL2at1fI,PCBB0TE ](3n>^(_TT$D6,O4P@@Ho,IKMbSu[PI\gWZ?m:-t?Y:9c=oe%V5lL.p:O0W0eGfR< I+SCVbRNs1)h!SC!RspA)1@)]u6qNcHCZNPcBS@1G( j!];lGIMY=j'3";<[*)Ppu@Q2ik8k-GtDj[hQ3YN%^fq>qTB)G:>WDF%jt+c!M3%K c_k)=r_WOM*]l[e=&nS*^@A:t-d06pj!Y]C#D)9"G7uBO2G3C[J@5H'B?1$d1'3%5 !0Zhc?&G$d_#-dqElt`tm,U^kY)1o`h0)e;E[[a; 56&>%g6KopBq;u49t]u_ o=5^)!3RRY!Iq[^r:[)aqm5:ScglS!b/+,Xo3(UuT9TB=Z\lUN!W;mbN(X0Fr*O?N J%Xol3o>0rXZ\LC2mpVgdd1skWg]A-6mpF!M;Ai+C@Ai@nfG:=n+?-q\F"?IoDSMT BA3raT.Km!cC_5`pUnc>G.?Gsm_"_hqnA#;kakSUiKMFAD&fA6#CP+]J:0E<*$rT( E7d5RncqGZPZW/Ej<'FWcj5HHVi]t]DZk1C&*cn4&-4p5I^%t49>L&]NK6ur^\'f/ #B^LdP:7'&!;o0$PGA-OH)J32)tSib;7s%*Rq #QJR=PLTV)c.JV6PklJoGLm=KrSM;ihUMS`IqSk17/d1O5OnadIA[/h6hd_$4WsbN TU$46!:pm"+6F+TbR8'ad>od_(B_qb;u6YQ$of5g$=LpckeW!Y#2R7'=)lkn`fc !s:Vqk!Z:Tq!b,D$Ue8_+QDGp[\L!rLmrr#JH)>B:ITHCs-^BYqL:^W.MkJXq\"^8 qOrj;5eE^NCT&mi>*/d/M#mNMjU^KdjA5^BGeJ54q0P<^HU$Ba5!AZi+7B7QDZ-+3 \9?8b!r,2,8)RI$?h::o]526@*s%lhPe_Q3!Lt/t$:lT4UYV-F#g@dqqLb/SmLT(VEJJ8heW34q=CT`)?53]`rBs$T^.+,^[XO[18#j7nrP&b?H\BW !b/4k6i`foNqnt@L]G!u+qe!P7^q=MB.h.VUj,-Z]tL$>G"QKJIM2+la@*Mbs'^@- ZkEa^LO@j*pQjFA@CNGnCi$^peRiDR/1YTg7K@T4DDmK)Ckr0*:l;GXe(e,M]2dcU "C)r)K.h%QT_ m(H*J[ju\VfR=>C5kk2[F.h[qNc+`I04a4+#^H@q(;,ulqXuso]6u^#CXinUodG"P3NZfhMKC0nAJ8Xo'pcf?2:D3]J@jqA%@_1V"piIe40gCBg+6[P6n#HB] C]87eJ)c#@;\m22K`](>^Mf#"5JB0=5==4'D,I?id\W9!rS+? r9b'l&+[c=ld5[_qOkjhq2]p'jq?q"bZ)*]B XVA_c!OW$O;,u=0;EtTireL@M>Q9?R]>_O;qZ"I($fq?P!T`_Hr"u)7"PimY&Kha\ mRj_fINeKbn!Bb5^&jFB<,DbeJAg"+7ZoIC^1mkTC.L6G!s)ScrO":Zjsd.WF#> /@p>=PZfXcUNs7\<2PYrF]O-c^Vs6&D:BQYLC LkYWRrrMl&ho0Zh[qsV)Z[();=97c#(.8/ZOm'Tgi.QlV%]j(A6oQVfDDf,`aDF6H S<^Q:X#i95*SLRB3YUJs5M+=jDBK!+^YMQ^H8#9LTCG.6 rsW<=pqDW9=D0f6'9oY@>s/7b%!;Q#&i;*Sutg .7>1eU-X+a1Wj&]+R8Mer_WMks3guYp`I:AhDLL=q_A&;%R'Lb)uh]js7`r%\/34G _Y>3+L%q\IT6]JsY5H%&5c=T//O2*FD<)tXED?YdJ\2Ql&+o_5OP6E@OG^C)OVR@M *jg,E\B1Kb+FbcLH5_5Zi*23Gfsm`-e5rK*JGT;U/8nORVakuabtZXmrkE7-._nEp !Tkd#GMP+r;#F["/a$]o8Q"Bf.[uj>j+N@BqsKR*+8o!u5@rG-;"C^T'E;"p63)*. eGj7K>Q:T0/(FUg$/`T!EW&drs(Cd%cR+B+RJKBEO %?^ct`46V)Cr.QbJ'>Ng%.Y;9(QuZ6['5eJV6O,SM@N71_oclq:sq=dS^\BNP@(cJ f-f;,1]@9+naXd"FD[^6hcO6'D:JS-n(jTW4J*_o_"UVj8oFjZ7H$aq!%XT_5o4K] B"U;b5e[f:QYd2-^dVIa0G2Yd^Z<$V4`?32=q]bn,pM\^[m^ECE-&=3HRcTiiraMg !d]BT3PbNJHndi+jo\C\?i9qhq(G1/YJe6Nf90J?^KcVf]#VYdKE&\KUu(eEIZd]e 01,kQ,C$1b,.J68koHF]jd1#i,_PXmnEGUZ&H5=6'>(6rDB^9` "pJF"%eKh\Ij`QWgGBf"oXYciG1is$[N"arCcq3)B/(![$Z?_h>NOph/[Jc=#Uj]= /%hq:cIpjWk!O44*arf6oqKAXh$:PnYoW[G4>EVd=$aPWeaU(Mo?URpbt'*8-Ys&B!I s+DOV!i!`O^7G:VquO!J(As5;fQQT\YIX`&El-QK!O[jV<^DHPO;A#>5[h-.gr0k% ?>u!Y5996+A:$PYbGD\RWQfNo%9`bOs#:'(0+PdqgBkEs&.5MW_jj\B1Rj%^?NU#o .%r4i`[J%M@hU_PY,bT!Z%a7 62oC6+jC-$<0)B*dk90%i6a*+s*]3ZhoGiuq^id[:BYe;:BCKJr"FNF.O=5[s2"^\ !\bB#$G2ROI^L^hWeujQde8h$oGFTJeQ#i&l[LTQQ2g0@*Bm'bn,E7KrVe5Gr9t[- IXDI>-PHM6\"75G!H8BVUChHh@D4nn6pMP/9nCJ$'o`3^!lY#X78!jU^MHQH:1T]. n]cpOp(Y&!PMVjen'<;q_rWN?GU5\tdG:]n&HZ;NXSG0B%+P;6!l4;as/Gpqs5B/2 !:UEr^VjKI?4'*'KA`0X?R\YrR] )E!Egh4iB.j>JZ@M#dQ:M#_EN[13df>hE_V[k=\nl_EkE`m/(0kMn#JmJ54rR/6j/ GIr?O`"q8QYECQOaQV:>[g0_kDn."jT5QW;]NY>Wc@.oZI;Z/N2HF]+Qbi^"`J*@= /G4K>3"bb@ph^+.dst$]?E\aSP^OnqU"dQaG@VlT*PLWec?qnV]A!E34s'B^Mst1g XW6g-2lh_8g(C6+aJBjL(l!Gc0`Nga57k,]KH6g2-Y59s*Y!D!"UKC/_#Id&:[(>6 /34Lli8c7H%=F:fFJ@Ce1]eNoGDPthJ+QtFj'gpA7'HXhO\&oIqL8S()XpF`('#S0 p`Ej:2XS$AV4:g;t,5u$+VPsjoLKp=mFT:@_@W;epk5^u6bA'dmg 8-J.A;]#PX%__F's/X-SWY%8nU(P0l!VcG_WW0Zg\c;#Gk)jQNJ(1lNZEI[6h^h;: 5Z)X90>dRXE);'L+FJuqI"i"@O@aJUZ.6#WnWl1K!U/SLIMhQ+KnCpSr,Y1'KoE60 rd=D8s/`B:3psEV5f6'1g`G4RO/u1UT2eR_qhA-X>>Gn-LNb7t*oh_uri=m-l@/fp chP9=Ai'Fa$NV."$M^79+39h8Z6g&L5YAd`)hF61"VF#u+45MuIulnf^Jd/1eGkL- IHECVrY1GYRK$[n%oE9RI=bFKT*Yhq;%_i-^*d^HRq>SB8SEpZJi;$i.\oo^Pf`4C(UPY/S^G&cf[OFh&1uKY?rsH-Z)#n*l*- HPl-+0N4Woli/3bK@I&A;#`J3lh%?j>%&EqJD:O>66dTh?-IsfN>_g0ATTo 0"_*ILeef(kl3;/!;cEoeU+^`rLO.YFJV;dX99,#f)dAEXpKtUu)0A6BSp&>j(G9[*D 7OEZl1>VX'1qhrlJM5jT&&%[rC>YMJ"Fe\sUK%5a(q'NgeKC6p#RDcu6+5!_D"0?JGpWFC@MLWNO%"7T`:hj@"+MW!0ECMrDN.c^o[5bCVGc- 62i>kY1nR+p#(,O'V_"+=oeCT-N1;C2f#3$TL;2/&iD/sIp)YFEF)RNf!X+Ph/1teGAMZ*Rt:G]b?`A?HXJs#0V4U'-Uhl& gH"X/k-+Wl#JMe$o*;uLpc!`/QW*IV;6UEN)aX'j(=NZL368h([4Pr@b7p*@.qBk9 nI:^NhDqR5aW#hU&NBY`J&uDqa<(ISBDd6Zra[6SYHht\0>`i7I?Q)lr\_m <8P(6GNZPm9>feTnbEA5_#/4gTmXAZ!?WDRT:amM!C&^DIs_Q1"FLK)rt>8-*;K0e s7kd[?LL$1GOFWu)t8)hH+5We?C>[`NAm29i;1:jT`7gI+Te-8X+;A"0Hu&tuJFIS+\l))%iN3nV*rO"^ C,lk0Y=6Tib3<2`\=AkNP-Y%>1`r&p,Ed.>Opm-ZrnWZ?i3dRlL,G`@=f5BKb3'(P #3DR^]Atg,H`;JK$?Q;?mi"U0IV=uf#HMLgS,7F:hK]RV1-Dphc_oO$kM+m$mJM&X puQ,^[sQM0*lNQA(IJc3Fq6gUh*/U1mJM":rUVVDq>P?@q>"Lkj4X9aPP+)cqk:`E ='N3r@%EXMgA/:SoQ2rF"o_:&`oHJ!YdE";ACD&+eU>$BpWrsi,l`p1r*L!9cj5I& mmMOCp^$]aG2\5GPJTMoUn??*DcZVeFL]F7ZlcN2'(_1$Y6dU%,>n1`^-:eTAO"!m !JGlb&`4uJooI&nj$4TQOjFn@ro"/+*1Vt@VP7MSV%7s="b]]]et8<1I.:oXI+At# Tsu=WGhVnm'nLA97u6RCV*F"$F`9jJ!,m,)':SOr-9U,k[qD4#JC?5jZ]&&3ULs+b d4hTP%;RhR)WdWP]cnpZFCJ0J&)A"g%F ;Q>K%RSg2)gn9F0G2-Vu!:VaV_h>ugBeiGO$o:BO["/>\F9-J!e@R=5n^6%fYJ`8K 9Mqh*r-/tWMLUn2=CWDgc2[Jlk40TJYfh`U^W=Ya:kp\,rJNq>#EUhQK!9G"#^I2< mY16Wfi_#Z&^W_'[6W.#%XIRDEDZd+4/r7(W;lJb2=Q)FcCt5mDuou+csR!dB;"__ "r7:!j]IJ*8o/+'>hi8?`l8&5LVs)HH:\PEDcPn3LFS75Rc_2Y]/eIi[?-7^^^>-Ik#s5s(YpTr*SurpI;q;s3h]kl@1,^^@ctBcg(1Q =?T*nrm^su7l0J]/l6qMV4a4[rl6tcD&`Q:&"hd0!9>6-D_h;^q>5Jn5@=>Ls0neJ .bPj-s*@g5jaUI#SMq6ZK\r;7W;iKm9oT!Wn#Se+s7T6L/g^W*61@*(rVtimrHdo6 IaA&8\,M/4mNjUf9j;mq]mpaV:]5ck.L5e,>ppetP`Hj\CHgNf5Mk]ihQ)2f3q2As'[Z/q./k+a?Q=!Zs.TE>rbn)]^@Hc):&SEo Xl-#e3!Ec""@Q:r0ig$J.;(T=r8IDD;-lq),(LeEr*P7OE`$Nt/1(93;ubVElo4nK N-fVHc%i4%Is5MZ\GGf'c8\]*Ag5M^9Ernh(#I(i\fq7iN&]sQ?3O'23Ib?4[D IiEjC's8+6>.q3+/Ai0=be$;!K1R*T^&EeYUBB&\Hj,T#namRJEt)A7Cq5, 'DFf'X&elA6bZUgTYibM0m2P!ZB'\[UJUP'KE1S@rWfD% B`p-h&&r74Y5G32YpiJ]"1&P(bC0fc"l=n6rL`9U!BpE(,Q8d_rjUWOWW,\iYPbSg pOW5W;Z-P_p5T)$;HY+:?`Fs=JH,An_]XGoH:4MKU]0`'h_YZ%\!Y/9oRAe$YSWsb TW_:EnNZFdqV(sGr2WO:htitf+"Dcqq;:64i&CW_k+;lDrW1XK79pCn+"9`*+NG23 #=RYGOq`iaFaLO;0,Jots4hoQbG"or"IDK)kV)'"hH?Hej?E`p7j,#Q%^3f[D!M$e MMG2LD?p)H/IIR4Ym#Z-"M(:6H!XKV<]*s6g8dU>9iXtqp!m?4[-`:+Ii[UBO<-lE Q/GEVc`?oOhtXrF!b_p;s!)CsnGh,?V"gR1j+"gUd]8r1l/i#]E=q7R[^%-d2>jh& BEV0-1\H7Q7I]j\^25q,!Vtnf,.dPBMgph<3O91cY801J^>82cb`b]5*?*RKDCC s72uGs!oT![Z[""MLXaT\I.DIJ#Rb,ei\*:s62iLq9e^-;>^T3e_^[OMG5aIi677-3=j!j^hCnUHq*s2AC_he1bkj+!&):*Z7Yb@aMk =UVbGf4CKF=r'H5`Ir"Mj'0V/mH1_J+"`R@Q?3:0(g; `;_(?s0-Q(?lsNZL[54mSBIiPJ-\unh^PE#H]gRH(s`@nALkd++"RZ."8V7^"8"<$ pq,JQoiWD-`i/g1Y47ll/FFO>Hf+T?,9Ytb&,VJqq#f"eAMQlJcbS?9:N'qIs5Ud% ;"bRors/RJf)itJYq]=%'Q?Q4H\10ks-!ZhM#Sh`%tsbunYLL&s-V7iMZ1)F=Y-?3 J,PI04.oR_5m0IO:]2r5%WiRtj=cc-aQ.srIq3HtO=LQ5rgFFtr)*Ii;4XCZr.Fq; ,tIP0`GCtIBEX^6&b%+N[-F4g:eqYBHMt%TN7'4AXY.9[_N>>s4+Zo@t(]dE8JIjs!$s8+2(O"Vj& &'oP%K7K`tiN![Vf(8*TUo,5@jNmW$bsal.B02pah^65_*^,/LVZ*cc3(Nl0s&u"" c*G.bQ#6s0&O;tFfh\oQrt"\UK-IM1^J4V:k25Qc!+u4/N(XOU)>HE0Pbe5?\5,Nk mi_V]mk)rn@/Oq>9Uf#1R@"PdPb;dmm#r(FU:P>MgN[ON ]sN&,::MAh"\uOXT?b")T5P<"5G)dX_,&=:$bgKOA!?T<=CL9?=e7k4T0FdK2_rk3 s2FJPej#Vm@[/!TN^=-31ni.<=r[\0Q$k\^T3?e3TT]$uAafA(n"J;9h.cQe5lQM@ r8I)Gq*Taaq.\qdje)%%&cWB^]d#6RA[G\5:Ct85s(!B/dEt.'o.(ND%Yn[X-Zd&m Ijd$E#pa0Jq_,H"[(?H+5G8IXo'`D6#eKRsgs!\+_(g.APdCFci.%)7eF"0Y>"=DK LUDj;[<=g5*q$H:!t'=g68lnQ!,2D7r/(G>rX.0ep`G:_\e-EA]b0@E0dB`BUofR* 12AVjckJ1_#U'+Z;?4ic<=u*Mn&J,I^ "G?mHbKblp$Xo;"E]h?6`]9IJ7No0>9QNj@*`MtYQR1R>kV"%[W;k2EC1mX`s&Tpe H.?2A>#9eMO#),Zr)]Yai=@R?qKP!nB-?eql@7Lhi*?n#2JA]`rU3p`rhg?iYqGbF Iu-W[YQ(]Nf+t +6Ma\Jp`O'aIh>#?VG=$1)nd1<\;WZ0($"UKVp]t`N]hdn(SN+rL)g<6MGk=!+)gf Y;`;\Qk"oC=**V_3:BZdZ6Y#5\^3ilF aT%tkG>afFj^rlD?eo=EOKgc$Mt^K*jO@BpF+8^%VMSdAcuY r'juT)+XJfh;i#MptL.-5%>^bidWBULD.DL\A,p__LLnO8]Lf*g7s-Q(n@>_8,3Cf ^@cuCqS2n7jL5`jn,*\U,9m3a%c+r&b*QY4lURWs)%IVc]H9eSN,VNd'mjSJ)dqR>-4oXo:.M.HLY:KXhcH],>#aN0@1e&R+[ooUW G3bC12Joe[`T*$]`;`cNgB)p*))U%rPeUh#aFBq*$aaajr/\`;ndmJjs8I;YIf\c` rg-ra#@+b*nNX/Sc1DLdm\?d?R+I23hFArWi8J.E>kjj+!_)Q9YSCEQhsbc&G]D=rWc%ZoRAMf"QUR/6id!(aI8I[Z/:TA nbh!:>l-V^pHo=]SHAWaNUoI-@ar\\45"U$#DfoM1$8apnUK>Jr_ImMZMom^$]uH[ pj\(U/O98A8o@VV)i+6kUEZmE&[\UNkB6#h;fU8ed!GTJ9)E_*J%=-_r$`0XeGh`q =F9l6dIH8''DUh2"[Tp(IDP)nqklM\/9nk7;Y`Q6R"3pA_p,#!jF;'bb3@Zs>cVe1\>UF+2/=aL)lX/uO?' I!DJ%>HO`&RlPXB^O!W?^+?UoX6eRZkJ"\0E4k^cbQaXWGdcq3_7Dj;\NaDtgsqa/ O-ZpZ(Tse0(R=g&dO`bjcSVsa8!tgcs06$D1`m]3#=an&!^]XEU'i`#R>2d%!P>&_ VXH>,hO1d"!5nmd!FA?Z$,rWi6(!l#t0^eaBM@-$ctc27!Qi&S8pL.^D%7!73aS@%AEVQA;Z2igD0 L9u4WC"1,B20&RkE`h!H(&3J6&,`&ZYGG_ZWT\@XZ4mg$!3u#;OFWs[X[7Z%:TbM, `(fh51>C?lJGLA>J'4!U71,QL'u3sT#n_,W#5P=FMX$DBC&"`+4*aZ9s`dXOCbEWIs/m4h$Aft TESGqr_L&7);f&W^Qf?#MIDa!1!8C7mEeoL8dSg\aM46K5KI`l$JbJA[roJNXmKF7 90iK#Vojd9*4CCtdBkhQ527&@hO21Z=R^ep^CBu&ao9bQoB0a&!"hJI3.S^CraNs, f/q1!Xn`jZDZol#>T:NZ<;s\PW>b\1s3lVu+nSQjAZ#tt'E]0=4bs+-5A:-`rl1j? _t0Gh_h7dFUZM*RmJ@^sNusnArsTGA1]i,N2UZTlV[(Je44WZA*qfO8H/o-R\DTR_ m/uuYTJp$C]D$eAnUF`[2oTb!B6E6os(b%]j*rfc>4-5._#NLQS%a!kj*uNk\4c)Z IjlZm`[1GZ(lEems/8R%G$sk/13.27Q&%`XAhM#cREBh$^&7;RdQ]^ BDh5h^\,?upg7qXJ-_hIhc'1sPl:0d52uTk1@RT*MF!>RfDk;Nn/&%[mqMVu\j8T` +2X5P`_e/`9pTe"Fi%a[F?$-H:?RSZ1#oLaogXJN4C^+k1+?VX:$K(7!8TgG;#eG2 :-V&%!XAZlnS`GCdDpb(*h<8Zq%*9#s5iT1Ri4r2[,(3>FEdPtK,d?O+NT Y`"nk*:=.-GPGeuCSuk$pn)gST:O8=V>sL:Pu&dej/G"`2)Q8>3;/C:h8:;Ge8:Db s":XF]i/DsFs.-ir5DF#`9ZV3nolN,Y/.&L3(f+0A7.M7S>aRp4Ilr,J3nJj&WdMi rptCW.f[&dCF3bbUs$K658jG_;s41\q/lc^XF'Y*5(aa[#TWL=k'qt$rpOIupM>Zu !Urq^f6GmsokC:Z=kVoR>W`8pM[iHm`LW'36h4W(J%0%"? NW5&&jFWY=E1$J$1c8:Y:1*'p/&cclBtl1%0Hbl7Ge*Y/Ef14<;WZ*Pmapd<0/j=! s0&m:^YU!j'@/32_#<@Q+oqVG7DSb2C%^h7\TG-!>$O0=<-+[#58$0oT1%S'-S<+R ris7!pt!VenE+-(W3>Qhu-Wi0-Elm1o3IbVBY1>ssI4*<%-d28(^ IV7k`;m'HmA&UZbq0t]\YqY%K375Q?J.@2+X#":J]4OC'X`(kkGC LdloVao<7MF!JJs5kUs]dK2PSs%!+sn[BGDGoe"De?&f*0sD :mqIQN0RDk!g)FA>Q8X0o=!13cMuZ*Ld_<3"kC_eq-SKu`@_k&YV>r!^YYV_X[^<,*EPY=?=tA1T\]p5\oR1.2-'cf$_R+:(L^=F9R* nA!l.+)h]Ds$QePIkF,S3\Z[&:,;BR!J3,<^hb/J9BAC%E_\"K7/g`C^L;f.o;`l< CR!_a!$TSe)>gZ7T?&69^0`RWm''hhj[0rX0%qLd:;_njXU\KWE=TgGS #HU99]9;tSj;9#W+#gl@.km3GNYE/,;L7mb1Nf:Y\N6:n3a9*H0A`3Ph4Ll7>c`Ls bB9uGBA3CY7a:_qFs!@OcIZ8Xbg5@2No4CNS\jfmX$)^5GF'94-EbOmQ*W?h+2pA6 5NH1mc./8sWG9HiT1gW01#Mc7@646gX@sVL8`bT'DRA q-bb&El@TA6I)_6c9u32Rf$=A&+_TO4p%;TMjaTJ(BFI?OTH"*!VIZ[pn("UWD_[S A(Oi(WXr0+c/"-=C4+iXpm]pq]Z'UB!p":rqs%i+r!OJg"=]HE. )/I4Sr'\TlCs1gcgZftsn97npeE^u*/Y6[;B05$3212T)(c2W;<^FeZN&ZO3/lBJQ 8:#t=T-t^&AGcKu2SdWCKRiqp`l!H/+occ&!t$(jdBp8-+6rD_MKhZ1&X]"+k1hkR[bZmdR#&^\alT%^gkl Df":6aoBH/%+tD0r3&;!hE>Q-4_W^*Dq`u\=Pmk$rb"m>nGiDq[07[%0M>GkVrupe bl8I@-^F`0>;GnZIL?om+oh:0C[cfuo06X^kKM733"YMYL$Cf%%0@\I!TB(O_"jTl 5[+ugs7Pcfot:k1IqPAaq/c-Lpn(ao@#u+3H4efWJUeq*g_V$1"k=8*FpOFIH\d4C l/q6PC9b!FKG+^!\_K#,"=00\2?JL1iuo.O!B^HJB>;JZNnF#n$07=&Et?!,e)I"B ?Ubam)N&m+$1D!EVZJ;3nNY)!-3<2"%8>s`1EbkOc+'[8Ni@\S,&S3j,NoQh>X=a"6TWe:PT?@,6C'bUH@-(E4c'n^%jqk^Oj4kg[a?HBteUKEHsSj'IUdk)'? HKtH)=o^A\:2.EA!K)@6Oak;*7aHQ$&(i8Bk&Ik-jj9#j%nDWV_n+YIc*d\ms5$?i PQ0cm&'PP\s$QdDj#kD4AuoiqZup,ZAQ%2D1"&0Eg+kkK1bh:6K:SWP?CG_7Rr;d) e`q>39RH08UCO2n#C1Vh4J,(#[gIaGOp,9LJAd"C&9IC$DK2fL3q>1H%CDq%[:"I3O^k.*Q[W29P=7]?oR.c*Sd/I*gE:Wal"^\7F @j*;Z2WL"I,/A*WZP5)4"lE]'RSB=]Mb3[Q('-*n)*F2dJ0+/EcrsNS1bl^?!@iRV Xnb!QfDC'dY_i-^h9>\eXoDFqbOU0SU+9H3`O9e)f5T51q\cBT^gDZ@Wl<67erbo5`m'JSKF7oQo rb$S/W`7m(&i/*Z%Ih,Y8%?#[W0I#W;W,3p5toE+ETHa(4sM+kP;B!p8XrQhG6Iikm8p,b*OQVPBpccJCB jmP&9"K[4VgH`P$X8-+_i]e)'="Bjf7[a90MpnVdYKn#&0$(*$.%A="bKAPZX3JsL gV;V5K&:LrJ)'JlIWt9#rFBk5!71uo-Fa?VE4,Xh\Tq7_KD[C%r6*'5e)G`u2oB6U OFJ`?R7p:"BWi4:O.'FJ["(RFpis7Qs$,=U4^;jZ?*<"RY?[VMsEn\bA09 :$VC`h+ilJ^Wh/YB%=9AFWF3Z^EuiBiZMXj#Aq,8K:M;-lTET!\bo@XC dugX*d)\DOCVD\%2_k=SBq#Vj9l(4$hI-ems#7A*&HQ/8&*=\c;#e;5[K,pf=Tm+- T%,^U3Q/l,]=CoCr/]j0h8ut:h7C=S?aaN][rlVmSU3/Z]q5HRPIGOmW]NQ3n&V^.^Ns,qPQ1%ds/(0c H`jon338@p(Zh4Yfu@`?V0K:J.$@%BRjF=CotMsg),5cR@f[meAk3sa6Nm2/P(6!D G1PV6pccn4U+UclKj+kHSe7(TNj8r3H5VnhkF&'gUn*\trn6tYSGuajchX3-ptu!& p1jtcURpZFJ%sa9mUlHBmr0iY=TruOFM\">3Xe7mdlO,bpA`^l1 5m@0nLaf>'WnP8]OrohOXL@[Wd J4K1lVgC9Fi9=k:iG+8\TW3JAk5S=c(NVt%#V.j@4rb[bsfO31L5gth-@8QZ(dJlroJ(rl\ Rbk=?OrU\jr-EDMmHhdGV:gUrL%j?&:&>k]LYFDL>o!P`2D#G!C/'9:_F"Z`Xh9I\ GTQ6;bg?IN:*,5=BE19n+"[IX$@!#>?@B.Mf>KocTIFjE>A>u<,?RXh5\dZH3"7Gl @r"5F;]G4ngV&m_KG5PCA`ikAJtPgP[!)R("_p=GW!`YM5SbIG*#9]U!tK^N_K/iS %%EMXcASir)JZ^g!L'qA?mFm;/I\2H)/.8h>#U@!fF3dRnZUJ%"-'I?;>#Dj!n@+l >J#kG!ifITn?X;sf&^s+Qa4o4nJ0r"K*K'3OeNY3"dCc^i;%KM;X#W!/1dPZ]I[u,?0i[8mORSCl[o_W8+8bX5eGXJ;j/?.C-']R+9fD)T$L*uFpZor H4g@brHHuYi9!8sOC"RaZ2f<(hq/i$[Gco1P5ulFCMj=t;\R""nr1,e*j;CLd"`+' Q05XH!>:9u.V*Q7F:^daC(MKk83hPA"Mda<^h#e7n=uO:eLg(i$*\h"<+(8GQ,tbs7c(s rWgsQh=*Y&lMp;;lX8IV2?N`ipg:MIe#a"lX8f^9^o-:eLVDIe[N5%h]DortNr]pl O8<3Lr,3S]=@hNqYfT`;'<(rK`;e7b&H3b"`_lbsS>B5P`Q@Go%-RZ2aqEAoJ$]"I B&h)%(A%PJ\+'FchsU4=*f0_9GQ3%7T>*VWi"P#Dm;D+Qh)=m)LW[U=Q2g7)1AkK. /Y3bk:205/q.EU*A5\[`N%soG7n,`h4;JEdL-hXIU];;66pP3"/H@!QUpu!lJ477J V:G_'*dkO\Ub+hh!q61R59>6!3./;;5@![6l?U8P03A"4djab5X;p5k31Crp4Vh@.I+g8`e:LH)'5F2XkAM#=S#5.K&XUoDgKF (k/C$:R7s#T[N;'O>eqL]QS>q41Y(:4D`U[=g^WZ,BB$XG%Y34X.RL`F%O$Y:jq;\ ^%2X'!u1cGlnd/85.;@\4($XkF]O_/0j1lpBX>Mh'-nYK(M?!N3%%fW=HKWsuE; Mm\8VA8\.99=Eg.BPKCA><)80Ad1m2Q3H&J!.3u8)?J@f)fO[7jgB;^l$rClf6lJ\ h*0mXp.]QG_od/1nd"JBg0+dZglFb<6>%[oaF>1np:>r9>KU1pC&>JXo(3ZBA=_7 cY0c4s&o(!Q2bC?3Q:ogZ;.4>j+*s+kC46JeY/(RkZG#2&YPK>#j;BJ(&u're.)4P `16k@HX50G!N?#=CYaL)J),,ao=o`AM#-#5e&BH/Gm\XAk59/L83$YHbq]:jLMR;_ bthsND"9sfT9(crga@g#:s_Q.Vod>,G)Z7sp3c#b@eTM9mdY#mrr7)P#601dh1X=8 n8J&gr;ZJp$^gi0>S-gV^J4[Ap$$e_l#IO<^Sh(G0$RapcBSdd-b5(=!j.qbiN*W/n(Sk6T);u#[_(,"[G4D*s6d:?;YbBF5KqI)HmaZ<7MUnj Gb@p]s/o`*%eB)UH.1RQq7dOL?4-Hl$O+9f#Wb%smcjPD=7VQVs2DdhMihFghr;$. p&)boVEV[5k(TK+B@N!haHV%o&io*qVQOI@=eIIY>"[L`nMHgc->4te_\:,k#lE[ZoDF::D^@$ q;c3I:Ac1AN&(E#qa&<\g5"[[aPU-ir-3sZhVkL7S\o0.'%HeC8*<,+J'Q/\p4(XO Q*F)i#Y:C25hn=/R/cF9^i7dW80U;PV\&q/9:5YWNW2QXi8=#!9E3aI3][4E=*XE; f<=`SRq2;(h!J_!J"HHUoK`;85JT(Ws!99\\bOKhmK5bU/8QC.bl=J?Wl[Kl(*@mM ;9*8mZ@#?^q7gr*78?_Z_>dk[2h/NqqYbjZr[5UULY]^0mK)JM^O<'Oa5clc:HLH6 DrIm/rdVR_6NjX,2]!jJSGsc46qeJX%RhR/To^H8(^'lS_WMm/GSFKQ+G'S*!"]2$ pf':39,7SL.q^4KQfT7Ms+dXBZiD1cO$;E752?n>F&;lY_>fQTHhIA&.o)FOPOO&c 2,ZsRjV%a,G^hp.?V'g?@^7'u"k_$`([\9G59crpQU(OI+$TSSb_M\]F27]QraP#> ('-;g=8hTq8N_/F_:B.m43]O9&I^r(L9JqU`+D*T pKBQ"2<>=$'PijTR& 8-f'kX8PQg+$4^@rl;/o^nh$e]"@JQkWRqni]-XR+8`XDrb`;ApOJX7)aqC7ThZ0m LdGu&(BM<[D>eYj5l=FHR\t70bj?`e/'S-;#;*#=YZNth";oDNJ6WP_Dq/OC\Y+<7 VX9rK)r&VnJD)IQUB(sW:Nj1mnnKDV^UDOq^.Af[JGC'Nqs(WWII^Po1I'n]ruW9P ^`c!/jj34A3rdkJCt8?2F01)-(KT`!p!*4'm5F`hCQGrurdG7=rXfZ[nuqdPHN=TT h^/R>n^uoXZl!TGQm7gW+@n>%b'b>!f/;K0aZ]%mYC"@R6SC,+#cg:SWG$Z3Q!2CD=&'*< jjI2kHl!B6HUV+gV]3m9>OA>84[o8D6-$bsU>b'Gs8I'%VS%2"Z 3d\LLLgB#Kot%56&)EO@c?o`&5+`k:W:ORqS'5=.\!prPK,iP9"2t,k6,TB_[u\[= EO[7Nhj!T3bI3]_lO,jl_3]!2S4gjg$g4K+2=cXcobd$aYhn MiF3!NP"LNLYGOlh.GJ,3Fgr5Na-8&C7FTOZ=o/&^nYfj*fZ@HI8GIln0-@qgZGu?HA[n9_:4!YjecHiBAt+eg)q>!g"=SG2=GM!\c[`/rr@m@02/)4 s1uE_?S1'f,p37I[fdY>r:LNUg3UduYf5L:*f>IB+)J!']*ADY+/h$u"q:WbqN0$d Ke+jT$2F>k$d$!_>93$6r3]88b*l^`Pu$Ij@_P"3hOiQ]s+_QVrN5,=c@0tQ7O)kp Fa.o?F]MZlYD_OT$gFX,HkbFn"UDnN=ia1rk!6%!6flYlO34's.Ib+JJ$Rr2J=3$l 1JQ@C@([6U@r]s'r#[^(7SNb'C6TeZA8DCeLAu^>2de(2^C%bn"D)KPd/*dqs/%(` 2u,]7f)OOp^Y]"1K5Th$Eg%F3IkU`g2YY[7J$nVj1S:-9K+9VneVL+>nn5pk0emd= ;NdS8fa6[hYIEhnpntHH2W"8Mj8Li1cOmtjcQ_;. ]C"Kn2W=ZhQg5_G=.V%1n';be:Zp[9Mqf$<5B<:lHOMDKINj96VpFBI\/d?&UYk0t \Xa):HdM(!7K`jHj2]3hZ.NkR]n@/oFL#n+[a"`rVEc[6^rJMWH3"Lt#Lrd#\*$t\ e$\eaEZmAo6@t.0Be>H.LAr"QLb(o"l0W,Vk0HGll!k$U8&WpTio<:B`%QlC6XFcR dgPcRF^AaR!Vq'^h44DXn\:'"=8(?5^WRgD=i`>[2H.B@fOrb->I8eoXj!`+lOW*g C?7*MDoh.p?b3KjAi"p9r[Uo6:B&^1riJTfMIr]Z$1^UJ:FABWikO@M!rbsq%mn)c !7)j"!E)2TZafn/7/Ts:qhdhXprKMhWHV"A%;YS(=;O5_A_8:Fm$\Gh&-3P@P>0fq d^PkWE,-EGH7nf=aP=oFIV+%Z,+h$&B97)>1*D(.Ej\:6+RA>a1]2)=?RmAcD1R85 *o8X,mV*'@>9f`J)A%?Z5**Ci@qo]hoa,*!Y,Jsr70)pDKFdmV^!OJA9?I'W$@ZtL d!HCij8_\J^;PX/?fD+=g)2MY)kbM>QaMGs/'u7H]:!:dGF4>+H>T_VW#9V&pVKl?"f2kR !]bM9ra<4;Xk'&6G4dJKae+unQ/[-\*U5ur^UifraIds(5]0-2YCBZ>J(=R\s'PX& qZrkoLV:h!LI=Bt^&O]Li/l:Cr6N4]IgI"ur!KJDD6"Tr/*jjE(#Iqja3BJ6p=+84 AuGWP52SMu!0R8sPC:OqD7^THGo8]B*JQ oC++n-U3QsLB.?=7t>rFq*4=K'tk:)s$c)Rpe1Y=7DK%YXp^3,9uCs,,!^c']G77QB' 5^3+tJ+%kBq2rStIHb^#/ims7*'VQ)Sn5sfoAeWcmqm@]'CBfjOf/-nh:uW"c*^Eg-1qO+mkU5'aq>::-P:mgh]hSmqqMsde(j+?8R[(+6#+j@RZ@6'LJlrZ 7(Y,&W;@'KV#+BE^!49^otJ\9hR1+,GH=Y+L&f?:Z@qAGr]%#(N$\HS[VVDJAqV ,(SOfnnrsK]k4Iq\DLaVBJpqi=c^W^::I[bV.j1me!T='%t4EM8,mXK!O+^I>e'2Pm`0,3j,NNlcMM_HI_'S`hHBK.e57_SgXL1gN69qt:d12^.2c#QYP5@">h5?mhb1HT0_ppg T%,^Uk@NPL:RVR_VqL.'pg8;I(b6D&Q_hg)nhf+s:\Xl?_>bTq2Ep#8ICY.5M>@2L E!Vj,8IBjDqS1&A\cA-"h/<7A^%lGTrU],#o095S$e+;scI/_Ve6"o;XS-Y`s'CJF Q-D4.04IrW^>(*$ 5Ee=FJF)iKUKgnQAEV'k'++6%:a2WmLD9M>`9D`"r0*gFlX@as.fYU>S&jL96fm4M WdQApDMHWg"WZZB"sUj"5m0_lfe91?X@li2M;:^1ni(6.W;1ctC<=kpoO(n/[jB_` m+l"6L&BPhH<01?Q=`RD1W"i[!Lrm\O*+,[n+1H7*dBmt,7O4X7HMkk+'!_bf*eB> 2c9W]JFFA*LG%OY('42nCB;".Ips#:-[e!#s&l1G1Tbsb5Q5h;p>*a*]BWC$F:_tZ 2q'S9Rd?JTk7MC/qVTrJr#`2P_Z-/(=cm&+5"^6I8(,oh3:d5c59JhHr9a;F#KR*2 EZlL>"3C7_kldBYH8]M*aYA"n-G1`+n<F:SoMg$R[J.D$%h<]5.WdPVIR08?_SF1^s,6n#q&3f+^Y/VQ IldUZp4$As;<>"Z:UZ4"PI4oAIqc^D$Tr]_$Z_nipCb52?!! h??+"GogmppG^[X/,e#[@C`ad;HPH4_kP7EdHljsGYje6%*/<60olA]4Q#oum8DN] J%h3JoC*"a0A=F&r6;!^aPSrenA(^r=4%:MO]`7gJ'pHHYRCMR!E!A,Z(WhFQ\P1m OKQX-lN07e-i*\[s.(4=#l]&:F?-fup'm^<SB;5Q_`6`41pae@E ;&m7tW@I"dX7OGK](fLcs*kLXYJ^C=s*q`>q>G=5cc:[Q4WSR\+8EU24ntX<^crn6 rdMW*r/VWOoB#P`o>Sbugs*qlr-s:W5<2o+O(>"Ql0o8>)tD%&/t(&=#QHk;@]N(: 1%kUJ=j!o]KcV('Hdp\="FDT ,#E^i?)%?a"A$Ha'n%`)'X&mKDl:V3/5ElaSU%]TpjRFpOUcs][6*G':X_MKTH`9=Ve6%+;JQ_ #MT7lJO6pMMBM:"Ju#l>_.Gl1rgea.(Z^&]mQEe#?GQKd^<9XYF`QCeV7=XiDKBi; QQO!j^:_b`,7?+:]k@k4Om[Uq1E-t'!s8BQE=W,,cW6thPd'`u,-DC[IKFs:UDcp7 IQ_@E.&(440]FF+NIhX(RKBBiBK,M,3hGY1s*!Q)]'eU*s._GZ@t4E(k'n*FbA/\f/*&1b\V4)* IqkkFp<7ha[Sck4T.7RQ9E0c>i8[i,o5+aFnDP/MJ--C&;pem8eYSIHZiGgH@Q$)2 DMO(Kn:,F%4Icfi,m&]js'X!i9n#Pe[,>Trs)Ig`igF8n+3;4Rs%NDp"!5H1GZJDJ A+2]\J?B':0`NLP""C8p@@!)_0M.=bP),ejXR?J[\lf/dTGDX5#WV+&rs?(3s*+Ht r/(GT>I>CjOM>ZPrYMh:ca3PKq-!6+dWF.N]aduEb-]_iLR%frf/nL=2KsAdWZ>r!PIAXS)O5F5:hd=Yk<9D$GeafW-57UK.UU-BiI'S_ITQ7bnFg4H& ""q:ml+lB+MZ6Rl3M0HqVWO&HM-+:>)B97a'L>NE^f=[a%=*9i:PnN,QS@(E#8$^C ]7#\lYHs/.hql?5:S$AHCrT5c%OAM$nbjLVXoDgY-@[jc%T>UQDq1QVQP_Pgm6M73 ql0L;2g`!bHT"oOesN)qK_"f+lHRc< gXXt9>>#De.h2,;h?M5JUOK,gXd/A?p3.Z(m?AH,A-I[=%sjG+fIo#JTI"4-_PJ\/#]2C#h+8eD*c=AS1kWt6'. K&jR+`!q1!KY'D8C'0P[gU#&USp9,:j%d^(LF08jhY0P'q8j7*ri#$`&-Pi@3Gg5) ij3hB*%%7WhdP$AlSKjj%M(VopL*uD:k+i7Oh"M3Ua*`@15LJ#fZ>8^H4bU^r+K@= e8)CGe.nN?e]M&ba0."o%F"VEP7`H `W*oF,WdW'+qkng7n;$:AL=3HqiutfN0io)AH)UHnMfVOVuE8KRNRs2JLB+7]Y.M_&<)O.5uZ"S>.l@MStFI5a=j,(TLHG:<#' #X,ejmMuo2^L]i!YC5Bq(O;PN%p)qpeklBjkdL9erhg?Y/teCa5F'")Ggo'R4FVc7q04ps<13W. ]`c()XSdCR_=mp,m;<;@-e.5WT:ZVZ@K-;i,P1qY^&L<&/3TQKhk/-Jj>kBG(o=9eR^m c;/Z2"^IYdYonSd)3rW.\3/S.05c;\@D.n04io6Broq?pr-73\7.-QFtLss(1r5]s4e;1nt/gf9ocVVN4+6KAYX:U@DEps?n&Y@^+p%`cACY#E($,lt!CT11"_\$+0iP2YRtm_"KOo`Xf?=1F.OrJ"!?Oj14ub^fSO>O0OnN%iNBjfMT@MN. c_I^38io&sb_MSc/CFXr?Ui"9EQLq\mk-2=a::>o#&gUG+V5bo-#8TJ1OTCG_e8D!o23.-iApY*/g9Yo%Eikq#J/@'GNn? 13.(=*lrC.ruO)\jeqamsk%+mWU6J^&4l0>KFq4,Q_0.J'nDF qd5`g3WBcg+0smua,5@AriGme?YZ$8BUYN0R[e78T5;/(2r%_C*\6r^MX.8$q/GTq E8ghA)'GR'JPS5o^ZYUMEH>]n>So*=2.rgK-\[P-Fubn\-XAuP.\!BN)O?5=Uk?R@ !;N1es.AEA*R@U(nAdUj^[h]L5Pu&fB8k!G8]CV"eLGXO&^"3V>>9Y_cn")T<6bGW )nH#09nC$G=W0.h=:-bXEtRp.s#hP'n(8?.f#`J]V".mNrIt9\GXVNmW;d0YI::Cu _CG1A9rNd\s&O16.J#dYD9->g!BZfP/SgFGI8'Y)fK_>L:e2+fk!ho??Vk&D7rD)B m`rfocDR9eB0TZTI(ib]I(fING4gp.Fn"SMqVU^"rpdK%]lWcEYKo^tRfCKM5b7p6 J%o=im:m+0s*VBTTtKl63XbtSe"cD^U$D[WA%.^%3QY-I*g>5n,hg2oPZ^ZWDpnC, /te7oJC?^GE@LkCZ(N1E^iV?GJ1fb:^JQIsSe\`]$SX2.2F5%M5r#iHa?ok6l-sMn 4r$4%%gT,$MNWBXACD#kan7]ABF=BN.1l-/"%<,gf]8qgnF'ds5LI2O`5%ubIt"H4 S',B0V&tdnrhb.chlQ'rr!aQ"p-7@"LA]TV]fR1h>AN%orZ]E*Q2g30?tPil4iNn\ BP6lX+))c %FFqN0B2D,Wk3eWYD2.WPQPjD#%((R?dF\F=r;b"1@og?*YImbHfaYog:O,>\%8,S Ap&anORms+c2[1Ts(NjAb+Aq=1E_2I$F,s6tM"jNk3ZRK#D+Fcl%O3)9gq =c?F>Fqg_=20e%).KkH]+/n3Z'iZ"[YJOKQE\KKq6g1ZCcIbl^\ `IR.tfSR=pBcg%P6DT!f,U-<&Op?bF1Emn3Aei]aYt.:B'o:md=G 4L:&\e-kmeo(F\'Wt>?&YS_MuP-S6pp'0F+(4'X-fN^ llWCc+"h71:s]]F.21UgeoI1T>]q9W5m0klP@KE!>]_5- )9mh(dsc>e"'b8+a$+$^A+5!)2Z_"F+7Bo+J'J!unIPXa(]RZM*MXLs84lP&/(94r pci7/bh.^/s0PLlZHA>rrj\ecq7jWUTHbSd!1j+aBE+b+L]:NU&,GN,fX5(gbl4GDL:]2rrm0acb6_Qdr6BQ(BO?#,iIkN)0F\"mFIWiddg[ibP&#-m(Y5$9W9MnU 8i:ARiN=$gYE&S5]%:#p;>`)m#pFcuq+lsYNN65_@kHU6Iq\2[+l7=.;p"&[Q p$1:aNAoSY\&R6JBE;p>%>Y"f^6KW<`T[.Oo06=Vj"olcaSU4-B]%]J#dbCVr`[QR Q%)J(NXO/H,&%!3e]#$hnel(3?7F9!,pbNFnkTq9PITO--:/%RO%Bl_3$0j?Sq]Y0 E$s_-argVt:A3PA@J)f`plI]II[L00o&t")b$RfZn3;OuJbs9@D-CtDl9th\`mI'p 9n]Df5qtX5.V4#K%%&+jo,"A!:P(q,>;P6%5-DK>=2t)Kkfs+55l[]hY6P&a][Q\]\[N2VA@^CT#H% dTa9_8HFIJk'mGL!BL6*TQ^;RnNT/$#3qZ>dW?%HLL?h6MNg&H0Ws3YR3l@8S9ZbtD^ #n7,e?p#.e&,<_a*Ztt`!r1ZK(U5tVfkO(>mrPe:5#qEB[o;N2,N>'*s7(&8.Orc_ ji,^l?2P]ir\)Q%Qf`3ZoCq@cVb;&Cm\_QZs'P6G-l]ocCpB>AkhEi:IsaBOIj"-197(8>luI!8Ak?U L"(-$\WfZ:VW/'+kZm+l(@j\MW5>7U?pNuN%=-_aQa;b>410p9p)]Pf9`7b?ccf0L -%PCPL]?%ZDgg_C]9Ol85@'Bpq`IaL]<)2%%:?`@T5F7Vr!c/EqSRcA>/L252Z0ZN Cp*E7i=GiN5Q+jb,6@jK!;KnYdeJIp$#CcX*\Ir&VgqCsYV&2prJG@n-niN5WrLc+ !TZI9k\>Ku.5p_#QP!3LS5NLlIo)kTl"7Z5TP/-8Rur.6#?0AOi!*d^.f^pHn]+""`UEp"VnB#5q).OPMc 5oA3&)7W;[5p[tp9ZSmHZ;OAB&s8h'8GU>b$t4o>?k[gfoY=A"&1M!B#gj"k$mL:[ ?nurCr+:9d_eAKC#&?.h!>?ZMP7<*LeL==-[0+#?Cr1EeW (&p)l3]R/G%KEiX:Xd1$oA!g8b^AI#9I#GpZ17R`@gs79]utKie`@s6!#(9@V[CZ: \3II[SD1jPL$e0\>UdSj`q,@j<)aZT>PW*;"X"Te:1_o7/->As(%B6YLZ&E%D +<^GZq7nsVPFA20 G-Kj')4N`eMZC*ahbA[3#iPXL>A`A3Tr3'7?f;uGKrn?a_bta%;Q`&a( 62nZ=-t*%pKCOas!bMPfD*mq6P2]j8FnGO#P1hp[7/gUu`(#.8?E.*uRY[%aS+;De '2n`=OUFtm,F.9J9kikcD#(fX"TLjgbl>H6YJ^CTh/C11^H_-!5,eMZFMRhST3jJ" r8dJ0dD%ll#^G'9Rt%C:\![1[?*&E%00PiNErJ:!Nh"%Co#HBNi'?)H+$jMTs-DMf s'&;m+)ql82JU4Ls!AVA!/F;-E@CuR'd=cD4Hk`M,6^UL,aT@Y`*tX=!)g(I^s!m[ 9HT%f_Vt#mE6RbmnbIpP*ehWt!<5.I&j,W5YM7arEKO=K+oIf/V4d+'#PtMC2YO'J n%ug@PJ4V3_6E-"q=d2Mbksm.-Fq#B6h,*GpN,oW*V>JZhjrX&Xkp`#](3J]\\?S$ ][4dus1I\k@K%?I2UqV2WH`$"i,'L\EA/qj2q7k6+XQ0Amik$Fob.6/&j#rAr;3=/ M#ZS8s'NVBj3!]eaqqCaQh(kD(FEK3!]Cg$D6LV/?[o-0H=PTQCKf9&gq,bgJom]_5cZtgP &XG3SE0_7@7)15q+N?nYS481.@hF6l_*t^=o"ReQmuiihFPg"t#5L(H_tHe$c^ZK! Sd[;T$BPP79'@Cr[hA/LYK!sML]I;G,!`Q^JGe):LRB7!000Tgp=7Ph7a?8"%Qn8, )0_JlE17o]:(ABP0&li+La4)/8c-+5DK:h-aO0+UM;6ZWZ9-,QU6c[<115R;V9 Z.[)3LY1nYA`28&kV:e;ckhekOKf0B5X&uXZW&/W?c:NFRK&]Q2`KFk*q3a3s4_;f -S7ShrSPH!!-fXWhf#F3J,Pt2n)WB!RV3NUI6TRbmegnuU:c*aW*C=t>\`^W7Pk2@ =15_6g[0^f\no&@ZW'QZb;7"(a`N!3.hrSP\Xe+["'&\d1S;q9B%#.A!GW3#SrJp> a@+$'_6Ies>QgSl-FjnBo7,>eV#IQ\V%HPs5?`S)-2aAr*)()]n:/l^prn\YWu!(IFTX:nc.nP;Uc./qod)Y3X7Us/k/r)*BU9*p6!OFK;X:,=CG'dm_7=_?k[ Vn=R>?C`X_s*&+6&*:ckQ/sZaV6?/Q9o[hjXT.D[TLq\V]eQTCDOp4!c&^,[_qk^W4^]e5tscpn(#@ &)g&qek7TL5)ZDtC)X<\#+`22O)rh6*G=hp`M9brfGm$"CnEb[9h&_[/3FB9TrCRr 1)(Q9qGl&C9![07j./(-+Ve5lO;,r5g+3P?(_J^J)8scSk]&rP.%q s0""tY0;Cas!^qeQl'[;.@We^hiA7)J<@\BSGD\[s!>j?&U^3+eGg:4Uot"KDa8.N oG[;`OS6?N'>GfN"k$HSI4l>@Qc&B\UPbD9`Q+7WdK1CFOH#oD(JkM2J(W0bV5qC'B1Kt\VtE7j!*joDa)0#le6Y3\/=P r3%k] s*+L8%K9BH6j3F6.fXf=qf41`I+$=bJ.7+W!aNaVn-(2D_E\$kE`/)'9W

    rSM8fB.V"$"G;m/ 5HXqj1IjeTI5%0P"G;Q+JYZ$As/4'CL]Eg7!VnPOa%b!s>QkBQ'*!=P"YO!Y>;sWS 5Mu:/b^\3tN](+0s0ZUUiLg;8B0cHN,G%IWJGcMR&JRWks6;,5A8:)gALG-q]1@bX ID+/1&gmW`>[C)P:/d$jG5*7G!roS_J"Fqt5F/3rX3CQ_2=kHll5qsks1Fp"fA5H$ mT9DX\Ftu]D0!_P`rc>As7>h*jBqBUIm+n&r3-+s4dl=hmsfcKs3(%:3MA"D#)W@I EqhlaP(juTpto`LAc?o;M#T&qDAiOUru3fY!d\9PZU)ST^gS=.3g;hs=>2E@#u)GX o0iA,BP@7p2\Gab$2V]i/GQng?MB8rUNF,'?*5>9*u%K5JAWP>g\[KN.=)#u]AMe6 q7T2nht\?#9-\tWn6e'H;#b_A@X]eVZ_$ONGF85`r(V2g/=cWR`P2hH5NK$$lTa/J r]d4Xhc]:!>3XaCl<7I)/^KOq^:9^uD":B2I5[)o^#T#tcSsa\R@c2bIfo]]p:W`p TF4!faCtdM$_WKp9,.C`s1a6ejjFshs!*.L`s,mE%f\:?L'[QcNs&eK7aHJ;]ghbVP1)k2.41@]O4m&`VM7R$J,jCIrUFKJMG09nH=V&ci]E1shRcs9us YKfk-ZAH^']P&eXc/>\%L&Xs>l9]YURp"!HQ;ad9A83TV,WCRU;Ier:+d3a;a%)3m \VM^S*m97fW]gLJ#`'K"Q?SAPCh'OMTMqLu"QYXG>0('54rbgf$muR?Op?kjs-!_] nkWEb;`4C&qk&cHcMqc>+9&`fnLa(>DsI?;SsC>pDmb_dO.*7:&D$`N5`:-5T,%Br r+d6QWq*@M7Hj&KPQ+$IRZ.e2q4Ao;9'O0MS?db+^Gtq/1@j['oqaeEH[56*Q*LA% )ZB-*OoMslrQjlLs*I!%5EGF9cf+>rE\/Oh`E^h+UogP4K9V:RNgpSf;2:nT<9ODd8J;$FX5@"+_\'_9:?Fuk?p 0'=q&A6Ii4%O)(H:799So=/A]s727Q(A>kD;_CJqpR*kl:U!rEEYF:"V"mK2ZE\TfY,i;^H^Cre.3 "Dh[:j:?N*7!/DQqTf,M\Lqifn%LAq;FG`J:2k:&=\Fl@6[MSB7C=!?Pq_E0KQ5&J4=j58Fju;pLFc!A"&NA%f>X .2n3CK]F:*rVm3dpSYCD1lhS>Rfk#$RSK%U$7NC$!>,I"`&5AE1b":_\LP)+`HVVM E4B9)`Z*L+[5G56DS+ZV:,fL8S[O#RTD*aE7q16+RI?Y3]_j%In+V+apO1nnXS-n. C9]fBs/VmaX>EK?A_H]U`JgC"$g=Yn)ZI$'!mf1cQBS')LbiNK0Jq7#D-^4JV=H8r R?W"RTjC+\8h86p7&U:+Z<4%a)X`YT&H!D8*KP!'\0dfo`ff%H>TIE5?ia(0"@L>I '(5lcT>KWN#pfRR5j/'SG5n2,s,8T1_Xekjn:*R3kG.eHn$q-""hG*>T6;?>n5&gD DZB$6ppWi=,8(:^#*X]u8go=Zc&H_5]hk*S\As:)(r=[9`DNZsRl+!:iiSQ\oqIM_ ^W$JXg\t+MGqh6b@-:>o-o]DVW!"7@hb%+'s+1EYfEJeXiV],Z>QFO0]#&qZs3m,A Rr]_d]/5l_)Y"DIF3\F@HO"Qja3_s.XZ:]K?FT$n[sW;OO1'HDnGg9$?[aU0$R#?X 5F"S7%o,FtE6i0`/q=+erX[]Xs6MB'r8(&mUHWeU,6rh?+dDV+CVT&GH#o^DL5 mgdVB4W=.dkl-'la8^9=nSN()+`r2NT"j$!tniTtt \Q$9HNSd50"3:P\+TmgrM4"A4!;R<]iIPC]MZdUDeFPlGL!r2fcKOWXfK+`_(T,dVp(UsSI42CiB i;ZRA1I-E2+Ph_ti@TS`![O05,-=`GfGF=dme[Ao!0dIec#p^#1dHs*s/h#k:]f:n f>aoD$3-q&/q3Xnm')D@"E6T9l$4T[$OAe3L?CdW]"6o0h'q5uYQ-chi_DN9r9ql0 Z8VVP_ZY2JEN]T)?f.)+e%IirSip,/i@b9R'GUG7I%Ndqh_3-/g+FM#dU5#cZa8KB a@M-kOStpHFAF\EhoUuLY65I:+0cNbJ56Q-diu[.V+NRl(-X87#kj*M$6%"cL[>ig r3b>i72(3ddSjN;D61mKC\$;@^0M`U!WMs6m9rIOaFBYR5Ki@W0+<5*1_SrcXpi"C =tXR@YNs*q"MLd=hpb+JlD("22;@H^kc="4BmKK`0Q`C4IDQnHdKA#o6YW)DXO?GB PsuQ#WRg(O(ND3`9#3nqUgj`#:F<&/P"MTn+=9Nc(XO?BLh[^CD&;^9@1,oi7Sk24 J9a/`!84HK(RG."#\Z'p+"Vs3J+Cl"rprb_D>k3BjH&aPR%3s`i'6bm2W"'$!=Ae$ %rMj0\kL"I,l@cB2=ul%f#G#Uq>;I^ZKrfrRjo/FQ:kTdcg,.%9c:gV7Z$rjt&Zm4lreo4'.d!H%V(+#qSRc4Tgbr^6J\Zo2o/YnR-*k!mb\TBpq& cQoKl340?p#1T`It8A,sH,/M5CI14YGi6qpNj#Rac8.0O)l4m"si(U0D`XJH,WL_6;t@Ur#P 9H+@T69u?T;rLe0qB4k"5QL^.&$c0:s+!V!g-0C2hT^\-]P145Dn#ZGrf/AK\L39f .66?OhZ=_Vq2_C9Qp7sb_uCGZk^9"MM;Pkoaa^'\N.pj&PnF)lYN`eF^gH$77X^9I gb@q[GR<:`s,U;Oj!,cFI5+n,(`,1RM4KhCf9CsX5;7:3j?t9o3Xb^^8W?$c4uT"S0#]F^'7nLZJIcr81XYltuG0pqKL<%Png@ quHauS3\:tGo>OY^8P2KBahanNe%,6@j? %-EOD- Q Q q 72 -796.5 490 262.5 re W* q q [1 0 0 1 0 0] cm 0 0 595.28 841.89 re W Q Q Q q 1 w [] 0 d 0 J 0 j [1 0 0 1 71.72 52.89] cm q [1 0 0 1 0 0] Tm 0 0 Td /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -9.625] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -9.625] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -9.625] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -9.625] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.02148 -9.625] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.01758 -9.625] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.69141 -9.625] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.36523 -9.625] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.69922 -9.625] Tm 0 0 Td /F82_0 12 Tf (\001) [3.624 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.69531 -9.625] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36914 -9.625] Tm 0 0 Td /F82_0 12 Tf (\006) [6.096 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476 -9.625] Tm 0 0 Td /F82_0 12 Tf (\003) [4.476 0] Tj Q Q Q Q showpage %%PageTrailer pdfEndPage %%Page: 2 2 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0.706376 translate 0.9983 0.9983 scale 0 0 596 842 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 595.28 841.89 re W q q [1 0 0 1 0 0] cm q 1 w [] 0 d 0 J 0 j [1 0 0 1 36 805.89] cm q [1 0 0 1 0 0] Tm 0 0 Td /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.99609 -9.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.66992 -9.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.66602 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.33984 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.33984 -9.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.33594 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.00977 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.68359 -9.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.35742 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.36523 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.69922 -9.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.37305 -9.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.36914 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.70312 -9.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.37695 -9.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.71094 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.37891 -9.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.375 -9.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.04883 -9.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.71484 -9.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.38086 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.04688 -9.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.38086 -9.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.38086 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.04688 -9.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.04688 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.7207 -9.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.7168 -9.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.71289 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.7207 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.39453 -9.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.06055 -9.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.72656 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.40039 -9.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.39648 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.39648 -9.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.07031 -9.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.06641 -9.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.74023 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.41406 -9.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.74414 -9.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.41797 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 467.0918 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 473.0918 -9.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -24.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.66602 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.33984 -24.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.01367 -24.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.00977 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.68359 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.35742 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.02539 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 253.69922 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.36719 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.70117 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.375 -24.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.37109 -24.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.04492 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.71094 -24.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.71094 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.37891 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.38281 -24.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.37891 -24.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.05273 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.71875 -24.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.72656 -24.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.40039 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.07422 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.74023 -24.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.74805 -24.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.42188 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.0957 -24.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.76172 -24.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.42773 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.10156 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.76953 -24.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.76953 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.44336 -24.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.11719 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.79102 -24.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.46484 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.13867 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.47266 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.13867 -24.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.47266 -24.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.47266 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.13867 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.80664 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.48047 -24.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.47656 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 479.15039 -24.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -39.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.67383 -39.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.33984 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.01367 -39.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.00977 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.67578 -39.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.67578 -39.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.34961 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.02344 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.03125 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.70508 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.03906 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.70703 -39.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.38086 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.05469 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.72852 -39.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.72461 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.39844 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.73242 -39.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.72852 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.73633 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.41016 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.08398 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.75781 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.42578 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.09961 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.77344 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.43945 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.10742 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\022) [8.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.44141 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.11523 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.78125 -39.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.78125 -39.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.45508 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.12891 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.13672 -39.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.13672 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.81055 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.81836 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.49219 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.1582 -39.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 471.83203 -39.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -54.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.66602 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.33984 -54.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.01367 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.68164 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.35547 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.02344 -54.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.68945 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.36328 -54.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.03711 -54.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.0332 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.70703 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.38086 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.04883 -54.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.04492 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.71875 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.39258 -54.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.06641 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.74023 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.4082 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\024) [7.704 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.07422 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.74219 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.41602 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.08203 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.75586 -54.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.08594 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.75195 -54.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.42578 -54.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.42578 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.09961 -54.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.0957 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.76367 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.4375 -54.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 419.10352 -54.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 421.76953 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.44336 -54.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.43945 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.43945 -54.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.11328 -54.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.10938 -54.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 461.7832 -54.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.45703 -54.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -69.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.66602 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.33398 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.00781 -69.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.00391 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.67773 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.3457 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.01953 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.01953 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.01953 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.69336 -69.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.68945 -69.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.68945 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.36328 -69.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.37109 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.04492 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.37891 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.04688 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.7207 -69.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.38672 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.7207 -69.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.7168 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.38281 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.38281 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.04883 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.72266 -69.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.05664 -69.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.05664 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.72266 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.05664 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.73047 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.73828 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.41211 -69.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.41211 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.74609 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.41406 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.41797 -69.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.41406 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.08789 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.76172 -69.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.76172 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.43555 -69.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 467.10938 -69.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -84.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.67383 -84.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.00391 -84.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.66992 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.34375 -84.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.01758 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.68555 -84.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.68164 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.35547 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.68945 -84.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.68555 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.35938 -84.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.68945 -84.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.68945 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.35547 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.68945 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.36328 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.37109 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.70508 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.37891 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.05273 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.05273 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.71875 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.39258 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.06641 -84.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.40039 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.07422 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.4082 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.07617 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.75 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.42383 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.09766 -84.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.09766 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.43164 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.10547 -84.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.43945 -84.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.43945 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.11328 -84.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.11328 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.78711 -84.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 463.78711 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 467.12109 -84.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.66602 -99.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.33984 -99.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.01367 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.6875 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.02148 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.69531 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.36914 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.04297 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.71094 -99.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.38477 -99.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.38086 -99.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.05469 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.72852 -99.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.72461 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.73242 -99.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.40625 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.08008 -99.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.07617 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.75 -99.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.75 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.41797 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.75977 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.43359 -99.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.43359 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.76758 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.43359 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.10742 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.78125 -99.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.44727 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.12109 -99.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.45117 -99.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.125 -99.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 421.79883 -99.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.80664 -99.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.48047 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.14648 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.82031 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.82812 -99.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.49414 -99.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.33398 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.00781 -114.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.67383 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.33984 -114.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.67383 -114.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.67383 -114.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.34766 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.02148 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.69531 -114.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.36133 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.03516 -114.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.36914 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.04297 -114.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.70898 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.04297 -114.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.03906 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.70508 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.70508 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.37891 -114.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.37891 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.04688 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.38867 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.0625 -114.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.0625 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.39648 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.0625 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.73633 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.41016 -114.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.07617 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.75 -114.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.08008 -114.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.75391 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.42773 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.09375 -114.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.42773 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.09375 -114.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.76758 -114.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.76758 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.44141 -114.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.77148 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.44531 -114.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.44141 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 461.11523 -114.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 467.11523 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 469.78125 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.45508 -114.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.66602 -129.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.33984 -129.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.33984 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.01367 -129.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.34375 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.67773 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.35156 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.35156 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.01758 -129.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.68359 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.34961 -129.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.34961 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.01562 -129.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.34961 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.68359 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.35742 -129.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.35352 -129.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.02734 -129.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.70117 -129.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.03516 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.70312 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.69922 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.37305 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.04688 -129.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.04297 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.70898 -129.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.04297 -129.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.04297 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.70898 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.37695 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.05078 -129.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.04688 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.7207 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.38867 -129.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.38477 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.05859 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.73242 -129.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.40625 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.41406 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.08789 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 461.75391 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.42773 -129.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.42383 -129.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.99609 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.66992 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.34375 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.34375 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.01758 -144.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.69141 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.36523 -144.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.69922 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.37305 -144.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.04688 -144.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.71289 -144.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.38672 -144.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.7168 -144.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.7168 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.39062 -144.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.38672 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.05469 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.72852 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.40234 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.06836 -144.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.74219 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.4082 -144.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.4082 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.4082 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.07422 -144.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.74805 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.75586 -144.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.75586 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.42969 -144.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.42969 -144.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.0957 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.76953 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.76953 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 419.10352 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.77734 -144.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.11133 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.78516 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.45898 -144.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.33398 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.00781 -159.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.00391 -159.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.67773 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.35156 -159.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.68555 -159.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.68555 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.35156 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.68555 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.35938 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.36719 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.04102 -159.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.71484 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.04883 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.72266 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.39062 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.72461 -159.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.73242 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.40625 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.08008 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.41406 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.08789 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.76172 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.43555 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.10156 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.43555 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.10938 -159.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.10938 -159.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.10938 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.11719 -159.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.79102 -159.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.45703 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.13086 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.46484 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.13867 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.14648 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.82031 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.48633 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.48633 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.82031 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.49414 -159.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.49023 -159.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.49023 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 479.82422 -159.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.00391 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.67773 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.35156 -174.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.35156 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.02539 -174.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.69141 -174.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.35742 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 253.03125 -174.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.36523 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.69922 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.37305 -174.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.36914 -174.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.04297 -174.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.7168 -174.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.04688 -174.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.04688 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.7207 -174.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.7207 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.7207 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.38672 -174.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.06055 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.72656 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.39453 -174.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.06055 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.73438 -174.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.4082 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.07617 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.41797 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.0918 -174.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.0918 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.42578 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.0918 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.76562 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.43945 -174.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.10547 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.7793 -174.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.10938 -174.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.10938 -174.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.7832 -174.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -189.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.66602 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.33984 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.33984 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.01367 -189.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.01367 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.68164 -189.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.34766 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.02148 -189.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.69531 -189.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.69141 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.36523 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.03906 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.70703 -189.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.70703 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.38086 -189.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.05469 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.72852 -189.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.40234 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.07617 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.41016 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.07617 -189.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.41016 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.08398 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.75781 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.42383 -189.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.42383 -189.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.41992 -189.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.09375 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.10156 -189.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.77539 -189.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.44922 -189.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.12305 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.79102 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.125 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.79102 -189.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.46484 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.46484 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.13086 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.80469 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.47852 -189.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.15234 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.82031 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.49414 -189.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207 -204.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.67383 -204.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.66992 -204.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.34375 -204.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.67773 -204.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.66602 -234.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.33984 -234.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.01367 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.6875 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.02148 -234.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 253.02148 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.69531 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.70313 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.03711 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.70313 -234.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.37695 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.37695 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.04297 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.7168 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.39063 -234.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.06445 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.73242 -234.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.39844 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.07227 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.07227 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.40625 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.08008 -234.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.08008 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.74805 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\013) [7.356 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.75195 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.08594 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.75195 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.42578 -234.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.75586 -234.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.75586 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.42188 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.75586 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.42969 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.4375 -234.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.4375 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.11133 -234.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.44141 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.11523 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.78906 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.46289 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 471.13672 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 477.81055 -234.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.66667 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.67448 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.67448 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.34831 -249.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.3444 -249.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.3444 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.01823 -249.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.35221 -249.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.01823 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.68424 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.35807 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.0319 -249.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.69792 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.37174 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.03971 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.04362 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.71745 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.39128 -249.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.39128 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.0651 -249.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.73112 -249.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.39714 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.07096 -249.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.40495 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.07096 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.07878 -249.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.7526 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.42643 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.09245 -249.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.10026 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.76628 -249.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.4401 -249.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.4401 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.11393 -249.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.11003 -249.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -264.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33594 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.00977 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.68359 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.34961 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.68359 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.35742 -264.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.6875 -264.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.68359 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.35742 -264.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.02344 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.69727 -264.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.69727 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.37109 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.04492 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.71875 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.72656 -264.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.72656 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.40039 -264.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.40039 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.73438 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.40039 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.07422 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.74805 -264.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.41406 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.08789 -264.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.41797 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.75195 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.41797 -264.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.0918 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.0918 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.75781 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 203.43164 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.10547 -264.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.7793 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.11328 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.78125 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.56836 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.23438 -264.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.23438 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.9082 -264.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.9043 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.57812 -264.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.91211 -264.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.9082 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.58203 -264.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.25586 -264.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.92969 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.92969 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.60352 -264.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.9375 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.61133 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.28516 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.28516 -264.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.28516 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.95117 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.28516 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.95898 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.9668 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.30078 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.97461 -264.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.9707 -264.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.64453 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.31055 -264.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.64453 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.97852 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.65234 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.65234 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 421.31836 -264.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.98438 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.65039 -264.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.65039 -264.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.31641 -264.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -279.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -279.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.66992 -279.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.34375 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.01758 -279.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.35156 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.01953 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.02344 -279.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.01953 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.69336 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.36719 -279.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.36719 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.04102 -279.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.71484 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.38281 -279.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.05664 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.73047 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.06445 -279.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.73828 -279.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.73438 -279.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.4082 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.08203 -279.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.07812 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.08594 -279.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.08203 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.75586 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.08984 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.76367 -279.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.76367 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.43164 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.43555 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.10938 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.11719 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.45117 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.125 -279.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.12109 -279.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.79492 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.46875 -279.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.80273 -279.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.79883 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.46484 -279.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.46484 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.13867 -279.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.47266 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.14648 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.81445 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.48828 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.16211 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.16211 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.83594 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.50977 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.50977 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.84375 -279.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.51758 -279.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.84766 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.52148 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.19531 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.86133 -279.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.86133 -279.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.85742 -279.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.53125 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.20508 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.21094 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\010) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.21484 -279.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.88086 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.54688 -279.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.2207 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.89453 -279.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.56836 -279.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -294.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -294.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.66602 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.33984 -294.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.33594 -294.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.33203 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.33984 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.01367 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.6875 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.6875 -294.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36133 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.03516 -294.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.70117 -294.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.36719 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.04102 -294.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.71484 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.04883 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.72266 -294.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.72266 -294.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.39648 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.07031 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.07812 -294.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.75195 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.42578 -294.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.42188 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.0957 -294.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.42969 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.10352 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.77734 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.77734 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.11133 -294.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.78516 -294.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.11523 -294.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.11133 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.78516 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.11914 -294.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.11523 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.78906 -294.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.78516 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.45312 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.79492 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.46875 -294.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.46875 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.80273 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.46875 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.14258 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.81641 -294.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.48242 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.15625 -294.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.48633 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.16016 -294.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.83398 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.16797 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.17578 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.8418 -294.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.51562 -294.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.51562 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.18945 -294.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.51953 -294.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.19336 -294.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.18945 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.85547 -294.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.85156 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.51758 -294.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.85156 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.51758 -294.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.52539 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.85938 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.5332 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.20703 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.20703 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.87305 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.54688 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.2207 -294.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 461.55469 -294.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.22852 -294.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.22461 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.22461 -294.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -309.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -309.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.68164 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.35547 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.02344 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.69727 -309.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.36328 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.69727 -309.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.69336 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.35938 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.35938 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.0332 -309.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 89.36719 -309.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.04102 -309.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.71484 -309.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.71484 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.38867 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.0625 -309.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.05859 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.06641 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.06641 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.74023 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.41406 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.08008 -309.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.74609 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.41211 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.41992 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.08594 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.75977 -309.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.75586 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.42969 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.10352 -309.58984] Tm 0 0 Td /F82_0 12 Tf (\007) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.00391 -339.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -339.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.34766 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -339.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.69531 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.04492 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.37891 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.05273 -339.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.04883 -339.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.72266 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.39648 -339.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.73047 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.4043 -339.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.07812 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.41211 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.08594 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.75391 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.08789 -339.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.0957 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.76953 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.4375 -339.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.11133 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.78516 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.45898 -339.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.45508 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.12891 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.46289 -339.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.45898 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.4668 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.14062 -339.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.13672 -339.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.81055 -339.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.81055 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.47852 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.82031 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.49414 -339.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.49414 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.82812 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.49414 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.16797 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.8418 -339.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.50781 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.18164 -339.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.51172 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.8457 -339.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.8418 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.50781 -339.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.18164 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.85547 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.52148 -339.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.1875 -339.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.85352 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.86133 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.19531 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.86914 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.54297 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.2168 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.88281 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.55664 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.22461 -339.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.2207 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.89453 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.56836 -339.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.56445 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.23047 -339.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.23047 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.89844 -339.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.89844 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.57227 -339.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -354.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.00586 -354.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67969 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.35352 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02734 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.69531 -354.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.69141 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.36523 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.03906 -354.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.03516 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.70117 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.03516 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.70898 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.38281 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.04883 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.04883 -354.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.04492 -354.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.71875 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.72656 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.40039 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.06641 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.06641 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 145.40039 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.07422 -354.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.07031 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.73828 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.74219 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.41602 -354.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.08203 -354.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.74805 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.42188 -354.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.0957 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.42969 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.10352 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.10352 -354.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.77734 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.45117 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.45898 -354.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.13281 -354.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.80664 -354.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.80273 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.13672 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.4707 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.13672 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.4707 -354.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.14453 -354.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.47461 -354.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.14062 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.80664 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.48047 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.1543 -354.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.82031 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.82812 -354.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.50195 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.17578 -354.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.8418 -354.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.8418 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.50781 -354.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.18164 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.85547 -354.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.18555 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.85938 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.52539 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.19922 -354.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.5293 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.20312 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.86914 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.54297 -354.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.2168 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.88281 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.88281 -354.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.88281 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.54883 -354.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.87891 -354.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.54492 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.21875 -354.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.89258 -354.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.88867 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 471.5625 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.23633 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 481.57031 -354.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\022) [8.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33398 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.00781 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.67383 -369.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.34766 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.70312 -369.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.36914 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.03516 -369.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.70898 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.38281 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.05664 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.72461 -369.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 89.39062 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.05664 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.73047 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.4043 -369.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.40039 -369.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.4082 -369.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.4082 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.07422 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.4082 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.08203 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.08984 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.75586 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.42969 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.42969 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.76367 -369.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.77148 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.77148 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.44531 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.44531 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.44531 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.11133 -369.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.78516 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.45117 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.11914 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.11914 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.78516 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.45312 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.12695 -369.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.12305 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.79688 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.46484 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.13867 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.8125 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.47852 -369.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.15234 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.81836 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.81836 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.81836 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.48438 -369.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.1582 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.16602 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.83984 -369.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.83984 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.50781 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.50781 -369.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.18164 -369.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.85547 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.5293 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.19531 -369.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.19141 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.86523 -369.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.53906 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.87305 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.54688 -369.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.54297 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.21094 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.54492 -369.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.55273 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.22656 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.90039 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.57422 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.24219 -369.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.91602 -369.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.91211 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.91211 -369.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -384.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.68164 -384.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.67773 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.35156 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.02539 -384.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.69922 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.70703 -384.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.70703 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.38086 -384.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.37695 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.04297 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.7168 -384.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.05078 -384.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.72461 -384.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.39844 -384.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.39453 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.72852 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.0625 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.72852 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.0625 -384.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.73633 -384.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.06641 -384.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.74023 -384.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.41406 -384.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.42188 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.42969 -384.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.10352 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.77734 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.45117 -384.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.44727 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.11523 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.11914 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.79297 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.4668 -384.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.4668 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.14062 -384.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.80664 -384.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.47266 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.14648 -384.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.48047 -384.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.48047 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.48047 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.1543 -384.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.82031 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.49414 -384.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.49023 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.15625 -384.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.15625 -384.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.83008 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.50391 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.51172 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.17773 -384.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.85156 -384.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.85156 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.52539 -384.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.85547 -384.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.5293 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.20312 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.53711 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.21094 -384.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.88477 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.55078 -384.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.88086 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.55469 -384.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.2207 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.88672 -384.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.56055 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.23438 -384.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.9082 -384.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -399.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.33984 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.01367 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.6875 -399.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.36133 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.69531 -399.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.34375 -429.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.33984 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.00586 -429.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.33984 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.67383 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.33984 -429.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01367 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.01367 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.67969 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.35352 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.02734 -429.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.70117 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.36914 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.70312 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.37695 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.05078 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.72461 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.39062 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.06445 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.73242 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.06641 -429.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.74023 -429.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.73633 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.07031 -429.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.74414 -429.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.07422 -429.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.74805 -429.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.42188 -429.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.42969 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.76367 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.4375 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.11133 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.78516 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.45117 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.125 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.45898 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.12695 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.12305 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.79688 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.4707 -429.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.4668 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.13281 -429.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.4668 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.47461 -429.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.14844 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.82227 -429.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.49609 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.16992 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.17773 -429.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.17773 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.85156 -429.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.85156 -429.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.51758 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.19141 -429.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.19922 -429.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.19531 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.86914 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.20312 -429.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.19922 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.87305 -429.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.20312 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.87695 -429.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.87305 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.54688 -429.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.54688 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.21289 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.88672 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.89453 -429.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.89453 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.56055 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.89453 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.56836 -429.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -444.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.33984 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.01367 -444.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.00977 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.67578 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.67578 -444.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.34961 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.02344 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.03125 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.70508 -444.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.70117 -444.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.375 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.04883 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.05469 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\010) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.05859 -444.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.72461 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.39062 -444.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.06445 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.73828 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.41211 -444.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.74219 -444.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.73828 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.41211 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.74609 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.41992 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.75391 -444.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.42773 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.10156 -444.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.77539 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.77539 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.44336 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.11719 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.7832 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.45703 -444.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.13086 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.79688 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.79688 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.79688 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.46289 -444.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.79297 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.79297 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.45898 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.12695 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.80078 -444.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.79688 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.4707 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.13867 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.47266 -444.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.46875 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.13477 -444.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.80859 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.48242 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.14844 -444.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.81445 -444.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.48047 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.48828 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.16211 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.49609 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.16406 -444.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.16406 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.83789 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.83789 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.17188 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.83789 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.51172 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.18555 -444.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.85156 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.52539 -444.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.85547 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.5293 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.53711 -444.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.53711 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.21094 -444.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.88477 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.55078 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.22461 -444.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.89844 -444.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.00586 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.33984 -459.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.33984 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.00586 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.33984 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.01367 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.02148 -459.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.6875 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36133 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.36133 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.69531 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.36914 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.70312 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.36914 -459.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.37695 -459.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.05078 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.7168 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.7168 -459.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.7168 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.39062 -459.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.05664 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.72266 -459.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.39648 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.07031 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.74414 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.41211 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.74609 -459.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.74219 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.4082 -459.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.08203 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.75586 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.42188 -459.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.08789 -459.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.75391 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.42773 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.0957 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.76172 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.43555 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.10156 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.43555 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.10156 -459.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.10938 -459.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.10547 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.7793 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.45312 -459.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.12695 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.13477 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.46875 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.14258 -459.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.80859 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.47461 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.47461 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.14258 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.14648 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.82031 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.82031 -459.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.49414 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.16797 -459.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.8418 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.51562 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.18164 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.18164 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.18164 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.18945 -459.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.86328 -459.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.85938 -459.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.5332 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.20703 -459.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.20312 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.21094 -459.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.20703 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.88086 -459.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.54688 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.2207 -459.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.2207 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.89453 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 471.56836 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.24219 -459.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -474.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.00391 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.67773 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.67773 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.3457 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.01172 -474.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01953 -474.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.69336 -474.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36719 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.36719 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.04102 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.71484 -474.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.71094 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.71875 -474.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.71484 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.38867 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.0625 -474.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.05859 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.72461 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.05859 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.73242 -474.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.39844 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.07227 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.73828 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.07227 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.74609 -474.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.41992 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.42773 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.09375 -474.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.76758 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.43555 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.10156 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.77539 -474.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.44141 -474.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.10742 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.78125 -474.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.11133 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.11133 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.78516 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.78516 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.78516 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.45117 -474.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.125 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.79102 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.45898 -474.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.13281 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.79883 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.79883 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.79883 -474.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.79883 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.46484 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.79883 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.47266 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.48047 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.81445 -474.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.48828 -474.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.48438 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.81836 -474.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.49219 -474.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.82227 -474.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.82227 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.48828 -474.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.48828 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.16211 -474.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.1582 -474.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.1543 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.16211 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.49609 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.16992 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.84375 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.84375 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.50977 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.18359 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.85742 -474.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.85742 -474.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.34375 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.34375 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.01758 -489.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.69141 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.36523 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.69922 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.0332 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.69922 -489.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.37305 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.37305 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.03906 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.71289 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.38672 -489.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.06055 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.39453 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.0625 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.72852 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.40234 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.40234 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.73633 -489.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.74414 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.74414 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.41016 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.07812 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.75195 -489.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.74805 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.42188 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.08984 -489.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.08984 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.76367 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 203.4375 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.10352 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.10352 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.77734 -489.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.44336 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.45117 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.125 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.79883 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.46484 -489.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.13867 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.80469 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.80469 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.80469 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.4707 -489.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.14453 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.81836 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.48633 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.82031 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.49414 -489.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.16016 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.82617 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.16016 -489.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.15625 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.83008 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.16406 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.83789 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.17188 -489.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.16797 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.8418 -489.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.51562 -489.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.18945 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.18945 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.86328 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.19727 -489.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.19336 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.86719 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.86719 -489.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.86719 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.54102 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.20898 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.88281 -489.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -504.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.02148 -504.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.01758 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.69141 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.02539 -504.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.70312 -504.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.69922 -504.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.37305 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.38086 -504.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.37695 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.05078 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.38477 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.05859 -504.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.39258 -504.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.39258 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.06641 -504.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.06641 -504.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.74023 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.41406 -504.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.41016 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.08398 -504.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.08398 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.75195 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.41797 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.0918 -504.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.75781 -504.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.42383 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.43164 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.10547 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.7793 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.7793 -504.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.45312 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.12695 -504.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.80078 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.80078 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.46875 -504.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.14258 -504.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.81641 -504.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.8125 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.14648 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.1543 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.82031 -504.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.82812 -504.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.82812 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.50195 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.17578 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.8418 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.17578 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.50977 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.17578 -504.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.50977 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.18359 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.85156 -504.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.85156 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.85156 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.52539 -504.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.19141 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.86523 -504.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.86133 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.52734 -504.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.52734 -504.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.20117 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.875 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.88281 -504.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.88281 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.55664 -504.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.55664 -504.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.23047 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.9043 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.57812 -504.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.57422 -504.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.00391 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.67773 -519.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.67773 -519.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.35156 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.02539 -519.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.69922 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.37305 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.03906 -519.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.03906 -519.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.03906 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.04688 -519.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.71289 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.37891 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.05273 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.72656 -519.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.72266 -519.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.73047 -519.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.4043 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.07812 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.75195 -519.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.74805 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.41602 -519.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.08984 -519.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.75586 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.42969 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.42969 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.10352 -519.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.09961 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.77344 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.44141 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.11523 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.78906 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.46289 -519.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.46289 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.79688 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.4707 -519.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.80469 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.47852 -519.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.14453 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.81836 -519.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.81445 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.48828 -519.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.16211 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.49609 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.16992 -519.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.5 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.17383 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.8418 -519.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.8418 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.51562 -519.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.18164 -519.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.85547 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.5293 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.86328 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.53711 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.87109 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.87891 -519.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.55273 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.22656 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.56055 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.23438 -519.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.9082 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.57422 -519.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.57031 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.23828 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.58008 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.25391 -519.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.25391 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.58789 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.25391 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.92773 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.60156 -519.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.26758 -519.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.94141 -519.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -534.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.01367 -534.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.00977 -534.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.68359 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.69141 -534.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.69141 -534.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.36523 -534.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.03125 -534.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69727 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.36328 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.36328 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.0293 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.36328 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.03711 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.71094 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.37695 -534.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.38477 -534.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.05078 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.72461 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.72461 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.05859 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.73242 -534.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.06641 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.74023 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.4082 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.08203 -534.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.74805 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.42188 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.08789 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.42188 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.0957 -534.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.76953 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.44336 -534.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.00391 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.67773 -564.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 17.34375 -564.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.00977 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.68359 -564.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.35742 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.69141 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.36523 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.36523 -564.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.03906 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.71289 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.7207 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.7207 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.38672 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.05469 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.72852 -564.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.72461 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.39844 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.06641 -564.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.0625 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.72852 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.72852 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.40234 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.73633 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.07031 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.74414 -564.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.74023 -564.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.41406 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.08789 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.42188 -564.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.0957 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.76172 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.76172 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.76172 -564.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.75781 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.43164 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.76562 -564.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.76172 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.43555 -564.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.76562 -564.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.43945 -564.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.11328 -564.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.10938 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.44336 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.45117 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.45117 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.125 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.13281 -564.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.13281 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.80664 -564.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.80664 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.48047 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.1543 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.82812 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.50195 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.17578 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.84375 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.84766 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.52148 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.52148 -564.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.19531 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.86914 -564.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.54297 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.2168 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.88281 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.88281 -564.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.88281 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.89062 -564.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.56445 -564.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.23828 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.57227 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.24609 -564.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.91992 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.25391 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.91992 -564.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.66211 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33594 -579.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.66992 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.33594 -579.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.33203 -579.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.00586 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.67969 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.67578 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.34961 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.01562 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.68945 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.35742 -579.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.02344 -579.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.69727 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.69336 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.36719 -579.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.69727 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.37109 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.37891 -579.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.375 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.04883 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.38281 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.05664 -579.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.39062 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.06445 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.73828 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.4043 -579.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.4043 -579.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.40039 -579.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.07422 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.08203 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.75586 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.42383 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.41992 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.09375 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.42773 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.42383 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.09766 -579.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.42773 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.76172 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.43555 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.43164 -579.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.10547 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.77148 -579.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.10547 -579.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.7793 -579.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.44531 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.11914 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.11914 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.79297 -579.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.78906 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.46289 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.79688 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.46484 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.13086 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.80469 -579.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.13477 -579.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.80078 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.47461 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.47461 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.14062 -579.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.81445 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.48047 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.48828 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.16211 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.83594 -579.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.50977 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.17578 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.84961 -579.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.52344 -579.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -594.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -594.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 17.34375 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.01758 -594.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.01758 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.68555 -594.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.35938 -594.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.0332 -594.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.0293 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.36328 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.69727 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36328 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69727 -594.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.37109 -594.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.70117 -594.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.375 -594.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.04102 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.71484 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.71484 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.38867 -594.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.38477 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.05859 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.72656 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.40039 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.07422 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.74805 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 153.42188 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.42969 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.42969 -594.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.10352 -594.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.77734 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.45117 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.125 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.13281 -594.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.80664 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.48047 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.48047 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.14844 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.81445 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.48828 -594.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.1543 -594.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.82031 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.49414 -594.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.82422 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.49023 -594.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.49805 -594.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.49414 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.16016 -594.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.16016 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.83398 -594.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.16797 -594.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.16797 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.8418 -594.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.51562 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.18164 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.85547 -594.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.5293 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.19727 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.87109 -594.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.53711 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.87109 -594.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.86719 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.5332 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.5332 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.20703 -594.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.54102 -594.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.54102 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.21484 -594.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.21484 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.21484 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.88086 -594.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.55469 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.2207 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.88867 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.22266 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.89648 -594.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.5625 -594.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.22852 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.90234 -594.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.90234 -594.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.00391 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.67773 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.68555 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.35938 -609.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.35547 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.0293 -609.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.69531 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.36914 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.37695 -609.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.37305 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.04688 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.38086 -609.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.37695 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.05078 -609.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.38086 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.71484 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.38867 -609.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.38477 -609.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.05859 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.73242 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.73242 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.40039 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.4043 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.07812 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.07812 -609.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.75195 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.42578 -609.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.09961 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.77344 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.43945 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.43945 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.43945 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.44727 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.11328 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.78711 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.78711 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.12109 -609.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.12891 -609.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.79492 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.46094 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.13477 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.80859 -609.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.47461 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.14844 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.81641 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.48242 -609.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.15625 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.49023 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.16406 -609.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.16016 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.83398 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.50781 -609.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.83789 -609.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.51172 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.18555 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.51953 -609.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.51562 -609.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.18945 -609.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.85547 -609.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.52148 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.1875 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.52148 -609.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.52148 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.19531 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.86914 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 419.53711 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.21094 -609.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.87695 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.55078 -609.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.54688 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.2207 -609.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.89453 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.22852 -609.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.90234 -609.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -624.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.68164 -624.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.35547 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.69531 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36914 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.37109 -624.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.37891 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.37891 -624.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.05273 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.72656 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.40039 -624.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.06641 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.74023 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.07422 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.07422 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.74805 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.42188 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.08789 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.42188 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.75586 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.42188 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.75586 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.75586 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.42969 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.42969 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.42969 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.0957 -624.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.76953 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.43555 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.76953 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 203.4375 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.10352 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.77734 -624.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.44336 -624.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.10938 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.11719 -624.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.11719 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.79102 -624.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.79102 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.46484 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.13867 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.13867 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.13867 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.8125 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.82031 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.49414 -624.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.49023 -624.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.16406 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.17188 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.8457 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.51172 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.18555 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.85938 -624.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.5332 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.20703 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.88086 -624.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.21094 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.88477 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.55078 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.22461 -624.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.89844 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.56445 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.56445 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.56445 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.23047 -624.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.56055 -624.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.23438 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.9082 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.57422 -624.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.9082 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 463.58203 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.25586 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.92969 -624.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -639.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -639.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.02148 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.69531 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.36914 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.03711 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\013) [7.356 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.04102 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.375 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.04102 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.71484 -639.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.04492 -639.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.71094 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.37695 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.05078 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.72461 -639.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.7207 -639.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.72852 -639.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.39453 -639.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.06836 -639.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.06445 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.73828 -639.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.73438 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.40234 -639.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.40234 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.07617 -639.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.74219 -639.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.41602 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.08984 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.42383 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.09766 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.43164 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.43945 -639.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.11328 -639.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.78711 -639.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.79492 -639.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.79492 -639.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.46875 -639.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.13477 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.80859 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.14258 -639.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.81641 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.49023 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.1582 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.82422 -639.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.49805 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.16602 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.16602 -639.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.83984 -639.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.51367 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.1875 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.86133 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.86914 -639.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.54297 -639.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.2168 -639.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.22461 -639.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.2207 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.88672 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.88672 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.56055 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.56055 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.22852 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.89453 -639.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.56055 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.23438 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.23438 -639.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.56836 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.24219 -639.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.91602 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.25 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.92383 -639.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.59766 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.26562 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.59961 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.27344 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.27344 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.93945 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.27344 -639.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -654.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -654.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.33984 -654.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.01367 -654.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.01367 -654.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.6875 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.69531 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.36914 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.37695 -654.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.04297 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.70898 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.04297 -654.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.7168 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.71289 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.7207 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.05469 -654.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.72852 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.72461 -654.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.39844 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.07227 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.74609 -654.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.41992 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.08789 -654.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.76172 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.43555 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.76562 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.76562 -654.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.43945 -654.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.11328 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.78711 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.46094 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.12695 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.13477 -654.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.80859 -654.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.48242 -654.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.48242 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.81641 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.8125 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.48633 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.1543 -654.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.82812 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.50195 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.83203 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.49805 -654.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.17188 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.17188 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.8457 -654.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.51953 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.85352 -654.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.52734 -654.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.86133 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.53516 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.20117 -654.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.19727 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.87109 -654.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.54492 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.21875 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.89258 -654.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.56641 -654.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.56641 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.23438 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.23828 -654.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.23438 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.9082 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.58203 -654.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.58203 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.25586 -654.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.92969 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.59766 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.93164 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.60547 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.2793 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.95312 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 461.61914 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.29297 -654.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -669.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -669.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33594 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.33594 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.00977 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.34375 -669.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.01758 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.69141 -669.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.36523 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.03906 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.04688 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.7207 -669.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.7168 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.39062 -669.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.39062 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.05664 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.73047 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.73828 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.41211 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.08594 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.75195 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.75195 -669.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.74805 -669.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.42188 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.0957 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.76367 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.09766 -669.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.77148 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.10547 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.7793 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.45312 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.12695 -669.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.45703 -669.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.13086 -669.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.80469 -669.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.80078 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.13477 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.46875 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.13477 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.46875 -669.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.14258 -669.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.47266 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.47266 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.14648 -669.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.14258 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.14258 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.81641 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.15039 -669.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.81641 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.48242 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.15625 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.83008 -669.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.49609 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.50391 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.17773 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.8457 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.51953 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.19336 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.85938 -669.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.5332 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.19922 -669.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.19922 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.19922 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.86523 -669.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.53906 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.21289 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.88086 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.54688 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.2207 -669.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.88672 -669.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 421.55273 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.22656 -669.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.55664 -669.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.55273 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.22656 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.56055 -669.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.55664 -669.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.23047 -669.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.35352 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.35352 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.35352 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.01953 -684.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.34961 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.02344 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69727 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.36328 -684.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.69336 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.69336 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.35938 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.02734 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.70117 -684.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.69727 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.37109 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.03906 -684.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.71289 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.38672 -684.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.05273 -684.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.05273 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.71875 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.39258 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.06641 -684.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.40039 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.06836 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.73438 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.4082 -684.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.73828 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.73828 -684.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.41211 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.41211 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.07812 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.74414 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.07812 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.75195 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.42578 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.75977 -684.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.43359 -684.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.10742 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.78125 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.78906 -684.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.46289 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.13672 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.81055 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.48438 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.81836 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.48438 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.1582 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.83203 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.16602 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.83984 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.50781 -684.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.50391 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.17773 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.85156 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.52539 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.19141 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.52539 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.19922 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.86523 -684.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.19922 -684.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.87305 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.54688 -684.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.54297 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.87695 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.55078 -684.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.54688 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.21289 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.88672 -684.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 461.56055 -684.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -699.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -699.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -699.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.34375 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.67773 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.35156 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.35156 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.01953 -699.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.69336 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.36719 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36719 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.36719 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.04102 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.375 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.04883 -699.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.37891 -699.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.375 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.04102 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.71484 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.38086 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.38086 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.05469 -699.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.7207 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.39453 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.72852 -699.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.72461 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.39844 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.39844 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.06641 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.07031 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.74414 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.41797 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.41797 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.0918 -699.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.75781 -699.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.42383 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.09766 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.43164 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.10547 -699.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.77148 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.44531 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.11133 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.44531 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.11914 -699.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.79297 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.4668 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.13477 -699.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.80859 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.47461 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.14844 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.15625 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.83008 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.16406 -699.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.16016 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.83398 -699.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.50781 -699.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.18164 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.18164 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.85547 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.18945 -699.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.18945 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.85547 -699.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.85547 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.5293 -699.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.52539 -699.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.52148 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.19531 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.86328 -699.58984] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.53711 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.21094 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.88477 -699.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.21484 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.54883 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.22266 -699.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.21875 -699.58984] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.89258 -699.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 463.55859 -699.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -714.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.33984 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.01367 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.6875 -714.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.36133 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -714.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.02539 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.69922 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.0332 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.70703 -714.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.70703 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.375 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.04102 -714.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.71484 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.04883 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.72266 -714.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.71875 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.39258 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.06641 -714.58984] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.39648 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.39648 -714.58984] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.07031 -714.58984] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.74414 -714.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.74414 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.41797 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.41797 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.75195 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.42578 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.75977 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.43359 -714.58984] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.76367 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.4375 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.11133 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.11133 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.44531 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.11914 -714.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.78516 -714.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.45117 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.125 -714.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 253.45898 -714.58984] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.45898 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.13281 -714.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.13281 -714.58984] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.79883 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.47266 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.47266 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.14648 -714.58984] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.14648 -714.58984] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj Q Q q 1 w [] 0 d 0 J 0 j [1 0 0 1 36 805.89] cm q 0 -250 200 250 re W* [200 0 0 250 0 -250] cm /DeviceRGB setcolorspace << /ImageType 1 /Width 512 /Height 640 /ImageMatrix [512 0 0 -640 0 640] /BitsPerComponent 8 /Decode [0 1 0 1 0 1] /DataSource currentfile /ASCII85Decode filter << >> /DCTDecode filter >> pdfIm s4IA0!"_al8O`[\!!#/mE=]te*!AFKR!#0X!E-) '[!CQnf!#/pV@:T?&sZDXJPst(FE6e=s*eFz-l;pa'itA8\2.5i=s*eFzo25Ph!!!! "(=.&61GSq1!!!!"$pjpo"lB:Zo-OG;#Ef&erK7-[qkF,jrM'>m"5EkV^hdM'EcqE _z!!*-W!!$kPF^kCOz!"T&0!"]Hh92Y`i!#P\9!]#(8<*'&"!#bh;!A\t76V[U]!#>P7!Q4t2!+>kE!+ c.N!+>kF!$D8>!(R#U!%e1i!-/'X!+l4F!,2FL!,2F2!(R#U!%e1i!-/'X!+l4F!, MWX!+l6)!-/&^!)!<#!,V^I!-/'J0WQnd0^/Q[!)`ee!($Z.0\8#G0\%kN0VgDgAU %!FG5,fZ!$D8>!(R#U!$Hl6?YO#rO73-G!+c.N!+l4F!,MWX!)`ee!($Z.!,qpH!- /'J!$D8/!9!op!+>kJ!+>k*!(R#U!%e1d!+>kE!+c.N!+>kH!-/'X!+l4F!,MX5!( R#U!%e1I!-/'X!+l4F!,MWX!+l6/!-/&^!)!<#!,V^I!-/'J!-<>YB0$#8!)`ee!( $Z.A'^5*AVX%S!)`ee!($Z;!+Gq>!-8-U!-/'R!-S?R!,MXV!+c-Q!-A3T!,MWX!) !<#!,V^I!-/'J!)`ee!($Z;!,qpY!,hjL!,2FE!,MWX!(-`p!,V^I!-/'Jc?-Ws[s S/u!)`ee!($Z.eHEBedgX9E!)NZ,!-/'O!,2FL!$D8>!(R#U!$D8P!+c-Q!(-bG!, V^I!-/'J!)NZ9!,hjL!,2FL!,hi[!)`ee!($Z.!(Hs,!-A3Z!+Q";!,V^I!-/'J!( -`p!,V^I!-/'J!$D8>!(R#U!$D8!* 0(d!$D8P!+c-Q!,Nbq!+>kH!,qpH!-/'N!,2FL!%e1i!,)@N!-A3Z!!%+PG]Woc!! #B)E-ZJF9hbU;!!!!)!"&`;!!3-#!!WE'!/ :Lc!!3-#!"Ju/!/ppk!!<3$!!*'#!!!$Bk(pXBl .E(2_Hoe1,(CA3\WGQ&2(gT`!#^BW!!N?&!! *'"!Y0gQ!!N?&!!*'"!Z$S9!!<3$!!*'$!!%g&!!<3$!!*(m!!&)\!!`K(!!Fu21, +dl!!3-#!#,D5!ZmF+!!3-#!#,D5!]#l=!!`K(!!E9%!!&/_!"&]+!!*'"!_/=S!! N?&!!*'"!`"m]!"&]+!!*'"!`kHh!!<3$!!*''!!&/g!!<3$!!*'2!!&/h!!N?&!! *'"!a_N"!!`K(!!Fu10JK.#!!<3$!!*'#!!&Yn!!E9%!!*'"!W\kq!!E9%!!*'"!e @!T!!N?&!!*'"!bS/;!!N?&!!*'"!cF_D!!<3$!!*'$!!&eq!!<3$!!*'"!!&er!! <3$!!*'"!!&es!!<3$!!*'"!!&f!!!<3$!!*'"zz!!*'"!6>-?!!rW*!!+i/0K2$I 0fh$H+>Gf92)[KL1&s'`0K2$I0fh$H+>Gf92)[KL1&q:S&Hr.7!]g;]#$1d)!<<*" z!!*'"!#tt=!!*'%OFR<2!':/_OFR<2!'C5>!hj:LFDs8o05bh`@:X:cAM.J2D(g- BE%`pu0JL\FDF# `=A;U76Z7!V+>b]-/heJ5$6UH64E=tE3`8@8+F%a>DK@jZA7dtKBQS?83\N.1GBYZ `1G3TdB.ku"3B8`H1+tC1,cGWJ<.Ec$#/Eb.EA+. C04B!J3_!poF(dpZD/a'(F('0)Df.`G+1_cAi`gX7Qq/A06fO&D/a?'FC@??!<:dR6N@/g!%;)SAnPdkC3 +K>G'A1VH@pm)L51SAMNX0fQ'Rc(R@9kFUnsrdW2Zf&Za@-K\%&u[_Sa=2`lH0Bb0 nbge^i@)g"PEEj5f=akNM0qnac;Dp%J.Tq>1-0!$;4A!s&E'!/9Ll%"PPE_>uQ^F20U8+N\VPgAlWj8t<[C3QS\[oYq` 5Ta:aN;TQe'uq!f@\d1ioB+]k3(smlLOQ=p%J.Tq>1-F!"8r1!!3`7&HG#qr%bV*\ &O0ibT:BE2\(B1c_Y?RKs]E=-J'g-G3bNP?bkg&a*`rG>ckghAguhnF+?=C:Ot'0? uAk63T3=`5;>D,`e+C-m#(WIPXD#3N!&n(_r7Pkrr>u?&8pHo$CP6h-tAT2[PG!Q: =h7eDdnB-A(NRHG'[?6\4>#=\MO>!e&&+3ce>K)d6+]6!9bQV`1IXS3&IhFg\;/n8L@"b1tOAT5?5`D@+-C= K=g-(5tM(+s_@Ecj#_A$uE)"ZX.D9Z5!+:!lR$sp(ZmM_&#"Q9Ph+m-A)D/&@7&+i rC"CO2P)-l^0::3TL4"e'F#>bN61B?@TJTM?)APW5W>G45GSkkJH>%T9hdbJ.cdT' 4&p,ZIC"c36hPcEE)k\;:IcO>\Ud7Krrn]\f:/9?'P9!7X5m?g9&?RLiiU8dSh4Gc IM21#@>)\F&RF;cK`#\c]UP"5QK.96#Z8Glr$c)4gb+<$:I\\qi=ZMMrERIMO:R+J j%iib,cO'VP6j*)jqBtbbtO&2F+6Qeh&LZ[+@`PA)D?EBXJIu!)XuL;pq)"P1[^'T\a (!F$"HWW$2q-K24%lRG)eB'rZC@AIP*-N.>ZLENl?Ii:h)@CUO#.Ka>3A+_&`BM\P A$Sq7\f!J57YpPb:E@"edL6rU];7XPB$.K+.I8i8'?pi^4Vci+0upB.sPjhQcGX?8 K5Cqi+k8!f8+Ao"3>'%2-KS9;bfu,3)-Za9F&hpSh!%E<]AE?G,_N/(.9KMFH@4`7 LpQ.,.\<=%or+;L-.t;C%)Mi%uL3_Vd*FD/hT$-%^(jE[%Y8IWWIR`=)m(X'uB/cJ ^_8!,hh;ll^%iVM?6@K)_qp-Ih=pT\dTehZPQKh6/d+89%`XX[]?488Yndc1`(.WK k-\uFiQN,o]o[%*kLjj3[&j>.u1g(Gs&$`DBV$o)81>+4Y*#5nG]gJUF4a&39%D]2 ^pH_,6t[4B905UTF$/To^,5IE9tlS*&d7Mfc=! .:2?Nl=2LU)8N\)ths4Var"%c2:J>epRU33FMXOPAJV1`^NL+?>:`fp_T%GoZR T@+tpb,=koPYT111+cT;d2nj_Q5UV"cO'>\O(upMG+O4K+cpn5bJ2A_)a,/2MiC'b6ad[4!s@>M[A=>QN37kqp7I36MeFa)o&T[8.gn5jK (f6maFcR[UmqL+g7u4OX[b"8=$_f_7PY7"hkLEX,<^FpjUTF-eU6 VFc9&D^X:,RE%IpAOD?LE;_OIGmP3E#-UT0&h%60qlaKn.'g*("_)_HcAn[9XjNH3 i@U5Y2k^oghu.5CjT!`o.GjQJF+J,]UT#EY>F^QlmqUaioZ_W2oF!4M$]Ci4Gt\JKQt*rIE 3b=dh8tVZR(*TaOpK>BEcRI%LI.$,B+(?kmK^E*9r;Vr5,04nRk/NEb_L]()!E^32 :VDGgM,69atekg3tqld,<"SGPE%^''r0bafk9O;'_W8HQDSj1SAY.2;b%[Rj7b-/$VpPS*\&J3&*rFR[k6-i>2U" )t%F\_QNXl8t3dRGiW-c$uOW]LNl,;78!Z+e/STg3Rh/Do1rFHqO1'.=['o$iF/e7 @)ldq:[`^EMu@4k62:!NN0ee;L%Y:M;lk7UZ9\;lW;U6BCHl"KnZ))D":k:pfdFY[ d(L@Q:TQEA))qAiTJd6mgqh"H?l5C3"nf:6]SZoH5blBF(_AHXA,J9CE(.F$n7.DH CcXipi#.6)LQ&.SN[qh44HA_F;L>:D(=jNP^if!$qr\nGpA8of%uDE?])F[hs>ZT\je0UF-qFWl/a3a=(%01ZdK=kg-?DS[NVf_K68j'JAE;=eB$e5,)k *)_3nSG\')nitSY350b?n-a%P_+=)q,^RtHpmLCJK%?k&pSTraYg?;af`!0J6X_oR >9(I)H""qPRY_:W;sgPa,NB-_5,q$g3)NBbTSl_@H?2[-\W,A=*?SG.]HlJ!+aFYY LLZNpNAJ>GT&0J;NT)3Ih;N./&8_@Bf`*GQSG*^6jj.#_^ki\n(PH!nfJYBBHQX1K g$]b%]n^7n?qm-YVO./%YMH'pcHObnHp]MKY.V@WA5KS2#T1FYVIs=mLd7mk6-f*k ]9!/VQ$`_g4R3GT^Sf6>?hIPb*$_ATHg>mqAQKr%2.R:]##hJj&opHdbN+eJ2)aRD d)d9rZ+b4\"4`;;rYl-@PK^2)8B1:\mW"2JpLn1I!=SP/&=/rgJZBU*?OcIRA.9sR aQ"uP`RD4mCO4.%R3bZm\QbELK(Vn.ZK6%$9im!HIMAmNao^JFX(g9p3+M.p^BaTA ,4[0:DN-J[C=jk77dmuL`G3?kGC^p*`(`tqV56aakKY=MTlQ/,7Ztb]5\(+W!1*?#f%'KT!\cq=.C/34h3A`L'`]#pEcK>\ps2F[' RB.i]7hP6E'X,tTA&!m_r[%n,G<3?r\OWlKd74F?RokOU30&l&f"b[CZlOn'%*o=I:]U;D<9T6gI9A:Qch5r%ip%C;Vk/P&1BYa gsh`m9Q`fi&@@KH[D:l%gl?_"l2EDO!\GK\\0!4iCp5a+m[R^DI W]#VpP!+^eD\l[@uB9kic@9)o=$'s9OX!ZEQ)jDC9[]dn<@+2S`TgA">!0:>:]aVn .YoplrF`k_uS'&"4jBZK'(L21,M#US8nQ/l`432,4!-mXn7.!Y\4ad:-nInC!Y6CV JK9"[lJNLHI)j'bj\7MbCWr]Vn^ZO2'4h[bCU#nN&Cl3r+krNrXIW^!.n-s1B.?+Q 2%QB9)d8%GbePg<]a*^-BG.6NqS`*2jhe3FVq;err@YJJ&)CS&q7s[[J0%LiST8HS i+4Nf>K7TFRKiG?0[DlH6I'kO^?mB!Jlj(]m8m'!e-9_.[Zfd<0 \FAQ%P.BnrLq!agi(i7p.tGsih)$6*,e"el+Ru'SYWiWTm?Y<#u03<7hYh%$:]e+3 B1#8$"?0'ah;WPrrDBdCZ9b9BO;(\BpnV`4%F/Mpu]lX_?#V$1rYTd"7e/lF>uBZ# Nr#='?C\70&F.a"Yr55.+jcM0RJ3-O2AS[i+J$u&pRdDr7A\"]HQ;7!"aAdgg9f"( 0^S!g6\,ORp^+7$+U^"+mA951Q9r7hBDikrr?JpFA'+4rrBj\NlLoA;f45%-UP&YG )V8\AL0feNM)ej;uuJiSh:j'.*TSR`]4:=d[MT)Q%4uaWoS\U(%h7fL%.7uAap;KD )so72rWr=h[asp46;XfIh;Cdhc$nF!iL&iEOd6D+GM,2@,eTUplYFu-g\sS=[hiWj .Q1,F5cG@D)E."4fdg*\tOoc-#6pAq(78T/dTO*iA:T+S.dI)%NU)>)!@Qk-:C9T` DLf;Q>S5#5@e[EHn"RRML7rZC@;].dp1:<]J4O5R(aKg;UY-b=!\7g\WT?^[K&i>5 FA(-L#D.X5PQVX^u'\B!4C_^'F2FF#/%A6`f]3J&8;pRL-810&Dp`..f_>XRMIt.O gc1S[W*5f!MBs]elYQXXG!343N8Z%3Q,GJFlt`fl,!B"i7-Z;b"+j`pk'N&_(4Nua j,4jT>JEBA1)Jf0A3C0A2OddQYoaW-hRMTB8@O:D1:Eg^"uPK "M^XF,jo9q2gMEE/Y8dqH$JQ!t!=k]XEk&D8_(Jq([M/XWOoor"*f)n%fNp56nPGX ^fC]9^rSHg$=Z@6IRG:d#6sErRhNZV?bA7o2#-,rrDs/TAdQ_'F4?+rLuC^nK2*-Y *5^[,h?#N8=N5bN]HN;rm]FLp=qI!#L$4G%DW(3F.A[!r5mB0":WZ&(",sq4]IJ7P /c<1D!otD"]]/A5X(J3!;o7b!/!d*#C&nXqX1I-`6XAXWG*'uWmY5,8P4H,TGG VfH\Me!l?=3i^i(2X98HhG@,^jj1*J)K.$!<3&84T>CjrG1D"Jc6g;n&.8YQ`B;]H rc\h<`.SV>hqmPQh$eNAfJoDA7GTNH-bS!T:eIr[cV3Jn^`4NAVcJoj.F>hq\+6ZN ^*]:p8qrU@sIR4q&&;d`Hn0CDu2IZqcA6qILGq#WG8m\27JG2>0]dN@9Hpmf87se0K[!YRLAW't<-0'\2i#/oF:^9 T7^-n1`)!BDpQ\g\qK1rr<2cdD+V;hmMUAnB8j9,h2`@@A\9Eo>E//@;-J#mj*)g_ N>S$=TT[&R%>/Q!KLgqj84g"*B/4oU1Xr0EVHg;X$]LJ3:9.!"+Wna#;uA6qg8>C_ 6,]2Z+oXnnH7cHLH[2&*\r;h>NBesgF46s`iTH/u8nr9O3Yn:1?IbP#cA(PZ>Gr$gQLD ![j#7iL8UEUHE[O1DHFomc`a(W4Fgpc+gn%GkfFN*d!jpgW)*L;bcac[)l"B(L#S! &44iN^Wqs,/1Sf>c`fGIVoTdC#UX'gLO@s\P>buJ[,!!+/OHc;h)Ugrr?\YK`s:b@ 0lps07b>i.FVgd;^hgN>N+HI4/O#kDEpb76Os%WT8h`)^%^Y+Ikpg:X\KVH90di ]r\Bqn(=#duJA_!RNa5UOdca?@kLhUC^M+[2"B4&95e#`V!IJ?1hQ\p52> "`f'ho7i1cu%m/gb_'0^O9T(OT">4mH6pnHBX;OaYgC`m:5[@in@UFnTWuW&5.^gO 2cL@X06YVP2Xf>kX-d%'47o/?gqb=Jp'%QL&4JU&i8bO!#tna5pWB&Y+!9Pk/[Dl5A&+=!5OGpU&P+#+8?upVuH`#$ Lf-rp&>!lGi$W]n9?b.2guL5hb]<.Q$6iBlAZI. _mgZUgu4B\PLk5rX+q\\,H]OnA=q:5I0.RT]oV`rh.uHn6U?_*C<8eO\iG)6^1I8UIrF5$+7N3))e_:im58>1Qo,ro=\kr"c/IJ%o](!$Y )[tY\jnBqd>bX\DHj8gebu.*i1*"I5@n18g1]@^oU'aF:AVs&)gc+fc=pZ_8UQ)?J >XX$j'F14h[?JQ\@#6)aFV`i(a+cukA"! s2N>Ba7AQhLI)#-9HI"0%4&p#r8qacuWBFgS4M ,mKS4hQnHbJ9<7\O4uJaIj%GQbn&i-kC+ocNA1HWlq&Lb:lms<_cHZ)`[O/YB8C2@ /g3KG[jI?:tI)"L=4U28Fg!1Rn'Y4>i(J;/U3>qf'e%GMk)'c.+lOMNSa_rTUi`)J 3:R/6FMI:$s-&]IV'67572,oe[$fW[G#I;@UmaZf<)2'&:[2k[kZuNTT@T^>Hmp*4CWra_B_Wk Ul3T/e-9T@9`e6.tPe/?13i]QF?QQDZkcZm9kmWcNK2>lWgoU(KL6JOkKN4b$?W8a Ssq3?'3?g#Z+L",EdE*A`C`kLV\$W>GTN6B7"dHH/mJ+4:=XS4s'KM!+[.!o.PMkWkQR8'Z% tg/dc+f+J$fR$2:JfNJ/NK!R&Il^]b,c6ba)XG&9R0=N8K#N:HjBZO"<.:?Jmin.r X+qN:PmpLpof1GC!h0+b0'_a:S-!HNRE#_&dJMo?%F]-N0B_(Dtkj_!;mEN_B6!^n %a:"J\&%AA\%T$ictA[Y0V64m'b"eO[bNY+i8b@q2fRUKB`G"(]Ferrr<5In-Ak*+ 8-QA[t+JYB1ne9a%&dn(?\LTNgD&^g;H^6&Tj)X.ab9%oYsuc:)/M5%:$0nAlO%$- :_uT-R\R6^N'8Ri3@e$5d,i*n5#\O,VP"'+a?TOSPS5mKkJgY>u@dNMUph5^Ok<&EBjq/gR!;%a5`WV5A-%6E dSGngYk@7C!1U9]J$EiCCqkoV'L,!Efq.B+FMT4aiVBVcQ(ORY,lr1nZ?^>^p<6KZ *;?=i[D>//ckn[!.R:\chnfIiD10C5pqB!/`JDofY$Fs4I/Wa4HL0H&/ELB#EY;ui uL[o:AD0q!!V?[R/[/&0A1urSf7,PMKN28>e>Mj>2&9\>ag)cfmf:JK5`=*,:m+d4 $g\#ik/Xt$"s8<#4$XRrMokt@6]G&'>>dYIP2V;N&2sU/,MtRdO56W:.0J?!K-W4O .YoZ:[J&LX7gB"ritBC%i%[q*A9aj][Pu/ClN*&u%#*Xr*i+0_[@'[ttnl q-/QHbt(FM**5[petJ1O'^7W%8Tts9fWd)Yg!e>0.bsj?>#R]:*#09(&#\cDtke0_ #FCj*X%O.d68iNB>eskn,EA]dC757*n,jA8]`3Irr=PH[f6>Z:]CF2$++X*'B&V94 t(m,\u)1%kr7#Gl*KW?pMFD]Ub"9c7ZKnZ3\`q31X@3)mB=11?hcRthuN93fm%F*e ZG2P[TU"0V(is-VoA+VR^Kklier0,?"Up=)(e-`gUI[)FNo8:Hmnrc4pV)2+7NAS! pfjdZj*4sC)T:=<;oFU7GPKoD&9]2cl:NK/8ndhV^(C]=A;Q13shH ijk@i?''7hT";GMI3Xi,Vg4gBe#pa'%fCGRf(5+!.oTIa>^m':p8Wcia.35=87Qh) Pr4@HoYZ?6m<12.%a>J?&Si8TUR38NiX1g!;[r>%Q43i4r4',rr@XGHpZ7F&:!f`h Bge5eMK@T/8Qt?=eme;G3pHgrXb`ch(T:f4*QA2BU;V$ZK<"#Q$7=eWlt_.O4M'l^ Yljkn4TC-5I+)_'!oVB0_e/6hH4OH4nap:OPN"2/;qAtUc=(-.K4f qlSR1i's")_kY[WC,OU0E)8#X(D;2"YBFH-=IfOLc24["._LJ!VqgA)Y%a%ShIbOZ 11mqnKtMdWG6W\MHWDc2)Tq;A/=mD5b^]VrQkfp._BsUW`q'Dlp#!$XPSE[?OIO_V 1tiH!!u*'OO::5-Z#3e,9M,Z=oe,#!SGS2iVQaF'r%!?OuX,/$B[/qKB^X0K7C_I5 IDlVT@iK'qscV%rr?cZ(?o-5cn>5(F/Hd'W5"Z%QS!IkJe6hs.'14.!;]d7%3$q-W Yr.,W*TRrBDt)+l]6GFh*:CHrrDCGi(r+Fp7$e[P+:;RkF1.pgrLc!/j)2Qp8N;:J8"EDtQQ2=KX6`$nR?HgoSnVOF4et, 6O.\J3QTtce>_akD&B2.CJU[Bi^OK,FP[@la^/]g3HY.`arNm)pg;Wm9^3FgZ$8,1 iN.K8&O'ZY-4b[$h"EUKk-c8:rR3k4D$jMDaqg)1',09GHYZSdJj1LKCJ'k#N;WRD iMLG4tcW*8@=].De#a2OND>YPUVcR&rAB>Jfd.(C\"+XO8KU@0+@j\_-&lTq_raU` -rlW4ra9h9T*#Ze?+pV[OA*9TF,cgHiihTf8=^A'PZ"Zf5^`?OV)ZG(',+eq28b`#@,mDC d7E)GJ]=A`08O+mta.k[$+FF<_KDDD(b7PFZD$!d\@FN(bA8Ec#[56J)K*&8&7@sn HQ>hLZ>k"R5F[be5FUrdc-]>@>MAIa,RX`7TUGJTF\9Ai/@1$F2Qn>=,(g("?)l^D 55tE5V-DfNNGiH^M/`h?bO7p1"*e<4tG&Ze`<2tdoBl!FuOC@\EfcV[=/7._'m(VO .,P8'dr]r*uBAVHr]]dJF2F4\^PZ&5=T?=Y((Kh,^Y-+0Cac(]UX&7E'As+5N(8!* ,,2VVP!@uj1ucX$DqOF4ZZ_afnher7(Z_ia".TQ4IQ9H&,lnXidV=@b6>UE5]\5O`e;mDWZ+S+]1srXF*UrM8s2`J^"N: eOHJ6O&B_,/!$k0Rd0cnu]cp?,>=WKd+5hrr@Y&J&+>HIJY#^GPHC?:YH'6+,(fR5 8FFQV#E![di-rh6+;P(/)LSu/-$YDAI!0\3hO]9O)sPUipO3gi@bp\?8M*MO*<4KU MJSJe%=LOn:?F\9d@;iYnG-V#TEiRhJtkE-iOFEqZgJX_*GbM."!hLaXs->Zo\Z1' 6pES&Wuc-52?Sd[P/b:MF=3^j38h:MZ/2,!8rDL+7T:1Jc>^[m;##_HYX@][BGH@/ tUH:1;"rV8MWm#"Hl6!"+eo9q>UHp!!MNc!.k=NC9d`!T_PGDO,-t(K=k"?r?(o64 ?7P^>U8WK6Tr,reD=ZnRPVUO+]N*odu9k3p,E!OJpVsp+7N.2!U;j*p^-!8DZFM*/ u8/8W;kE'lI3?TEk)dk)N#Ue`s]mL@j!!S&FQ@\%Fg 3<6m4u+W.g-:M7opM"*"Q"5TW?;ep07f]TYFk^trr<2irr@Y$rm(@`RABURp4Lfd4 XEdF0f@gc/BM_3OKk!+D]oI4o3'_/F45^2chnKdi@""7q`fHrn/dkl;"(RR!49b?(Zh)[3c>VCJK#Rsc=#EmkY?JR2:cRC!:WaEgWF::o 6rFY3i:8,&GV^V+oi^/+ZchETFZ&B!.kp_0%,1]GXLN!Q\-o5gRCo1i[r`X2til0" BSL"1F9P+"<`9)4Ru)0?[,!N4K7XRcNif`nO*#tpo.c`/JnBmfd#^U9CW*gplaV`K ?.9l(rjtF-,ah?Fto7.<:3RHkTT9Z5DEMJ5N&KS&52t'`Es;X(i-^;Yn1%pqq$\lF O%Ykl6Ec-N^8enF!*I+-j.$[!.t4NGW*IY*tZ1t+73cRLtMW2Ye#Tt"Nng,6@CYAE S)3.':LM>P5oTh@J\UIhu:ZZFdm/2"C:7.E62TBT I5`X87PXckF"H:`RR7QNQ"2eZ90M6J&,._9B"&%]m0GbdoPI>Pc<-f!UsUZcS-:u>a&?=WI_pTAr rDFrX*A!l>(?G`Mo.77)N!uMe+NMo$TKc5Z.'>&R';li[ZDaRMO"5N!)F:0p$_eo- h_M?j$2qWnD7mP1T/-/nFOU7m\k])fq:o9o@P"0&cUBZNdmY8!k4HR>'F/qVp%'6)cQGo12r `8u5oAANn6$s+`c2RbqRm3"6?:5IX2YKCQ7r?G+ZMi>C(OJso-+g 9*QkjL8gJbi`p4?S1#n=oeM,rr@YBBi][&rr@Z$rl1kRWg)7Jd%/_`P'Em! ,r1g5l1M. d@PFfm,BJ]QXY0Lk-hE0,JH_PE%0cotTFt+0ria.Z[0M4t,+AgeB:D8S_aS/20&"C m%4bW7g26kE/"Nano=j1:?Xjm*Xk\2D$i@BlA)4\.F(Z1.dGb#8Qacr"(C:mH;Cs5Y1l3*aK:#TUh6@L&ANg>Q]-=6*./:kcS]mf# h)&[,`2U#KDtq(1roN)8&gfA!VEEGj?LYui;We0N\?U6?OOLQXZ`J(D4n>6WQ*\:8 <7MJ>l9N0[NRWN3Q>sj%I4feBsOrlnc\O6G,g*@O\msN0Jl X/*_r"l-F4r3W(r#8M7Bg2amUsT#gAT-P(ZI>$nI>pIum5IF5rafYh^o?N`(`9I=K rth#pM>Beo::@Oa#!f#cCE;CU@1N1h2Wre!l%_;*o/=3>e@hWe.p9s%4g6$Lb@)+q ToBH'(-T5:I2rlQGLi^0M(8`<:Mo:.k+ILk;bYR[.6VcLsRZ4Un$Rt'&uT2B[u31J hh:/n$/uJ%E>;IdtV(G]85s$rr?0/9#C,bjt&hZ`rX:)+'_j5KnFkkfbk-[DPPL'& "HH$p"fWJ"q #!R/Wl#/u`I+rj!!K7iXknX+13b;I'M2`5G]dK*I%QSe)l\B*4Td7*J%K&cZ,m6BS =0HU[/U,YRm1K1'n4bA$[`'7rr@Z@8Z6lop@i]qS?@_Bk"4TV7;!c2m0&B0/*Dug2 llo`q>3GV`4te<\@c\U8,*F0%es3<%-lPjgL\lOV_9moBOamZ:0;/NPLOU(S6+rnr "L>Z?P!'?pb/gX9+4$nf3U#P84"06S=eb"ccgVRqUa4/b*#t]DqbC7ERV#i>'X.;7 H8Sc*gQQKrr<1bn[[5#Dnk"97D$";L2@"<7^[t=)0qqmHBWAt!K_gnIPps>2b Wn6(aEcJn3q@T@YKbDg,R'\[nCM$S(Q!"i\@A!na(N9[9`65Dm)X,)!-Hp'c8'[e4 g@6mhu"IrV5CNt!!HO$cQ(>X_CKsN^s>?6YdcoK>lGK9^Zk4sf*gn+N.8X&Io2j-E MU/F!.ltRDV`A294E-^:[inN.Z7%+/,mf^\BWop 3tit!"kTBn/@A6:hopC\V*K4%:pI`DP_`j"-<6SR_M_7i6g`jIb_[Ng]R-B(-H*a: m:f*"88Mh$6O4OiJbEgNc8=],oGog12m\E?a5$[T@l$ZZFb$snF`G`HCQ9nIbPVGW rC2U0S2UkHW;:RLll\<6X!j%M(/nk%OKsB;bT]lWWhD0 ``+S!B$56#PXi"r'QQ;)J.:9YO5bT!;Qm!#R-mk.]BS.U-=YdfBCJ>59iN#f0q`V#J0d*k'K<2M!_k7/VnL#G%.``a!40P<@I4r?VJXH_H)hhtc?kMTrG1rtiQ$R(]Qs$[_g3k[C q#UD)SLlt*O1[N2iTEU$IK"B-KtB_W6S@+Gg1Zgrr<9;rnWmT[?p:PWp,ruln`l.i 7p-`G/dC7MW44N[4@AuL;U#q07D6l]u>GmJ&)Qn!8rmO')do@%X9ehLW1tV,l[i`p !#@tDC<)<+RmTV,fl:;d:C9;W=pOq1AoE`k7dsn&t3L=nE@66,`NqPncC:k,MN^`! S@fj(%Ipo&I-fJ&)!;h! 5TIEgO'e3O)8j9$pHkh(f?;OY!545_LOhmGeD,r%QPeI#O,S"rrBlKHn2)[58V(GS %W5h>\X3<&YPEu,*:t;#UJsp89'[T/+7\@Wr1Zk^)d4RK$;*L`4rWhQKkX1n?M@XZ 89>5,MT,"!;gfu=7)07_ZsR63c303(8kp:>cD:uN+@Ni&Pnu2B9@u=\Hh`(^o,ErH KU.cp`KJ@;kWAY(PBJ9#^eA(8#II(=uYnj&TB+a@YSsicjZO=qnTu^7a=7@21/R,! !Hc<)JhXF">$=m57t'ZP_)FWbK_X*fZL!,*1%Yl#Npm?([o2k^*TEF?+@Y&9dZ(oF %s2t"/>o-8-F,9!$9\e%6AdD1(H<\o]aVJ/,oSQc\(V6)#+1Kf^aJ>C!F?4!d3saliE\[s?I&[,G"L6Ag7.Bri(u['7]O=8jHV.?pf_]H@F#X,G"c>S4ghA+M[;>)D6r ^'ffQ[dqf,qT&rCekE9-(kTo4 hHa#a7I./1m6";LVM!ZVb]W5H)&A?BY!W?b$'nk)]:Cs/DEop&%+dp7*9s0>[,p-^ 2.S'+=b$S@U=iZ2'0@iO%GliP">M]#g+kIkHXF!!*&`30HL`o9GR/eI=#S?mJd0=E dT+)q!\1hUZ)/9iWbC=CGltI%^lPKrN]37i0K'l`WTg`Z0@HZ$%+1\[t3F]?]sFdr r@QVqqM)Z\!tM>!.q_*/1:qTBj0LE4oYN0m>plr!VESn'SH*'n.10O!8tI2!]4,"% d;=80?:Q5F;I+_MV1nM6q"^DLQ$1>Z&#i7lsEB`+n:os&R4sHnRfLRAb^1TVGA-`` 7"(MZ\^RRN$96_h"qHS\,H`"i)eDmi2ZeWZ<)i^9$;/4hrrDg@n,*cuiVroF5PlYh4tZR&-\uY_h+pn];]L#JOhi#Y1hm::=Fm"9,hM>M` D?:VIN^\l)KimSrrCM+Y6b..Jm56Lq]"b*fu5Eek,!Ji,\8OCVdm6sJY"io%hemBL jD5i=a4h257^?F]ftH78kF.7i7uK4H!,->\8fhPnd^l`!!J8MAqBs^"`07XpP5oa8 Z2=hG[7_5hTBf(0jH=b>!apYQ?(X@,ZjC*:]u<'4Cc'PXTTE*rrDOgag^'D0h1\c>15q!8t(Gn4a9TfcTo^e\3J[4n3`QFfV,CKNYC!3>LR/1M)FbM:;B>Kh%I O4NeX5b_F+8BUB[;N'dG,N4TSie?[BBX:^aim)!/%#lWL!4aF5cF^'Q,J @]9;HUM`KO"OB2!)5D'\*KR2#Dr4j:\_Eu.q-bhAJ:^5pt4d!XUQk'@_j'Kh_FIXX87$um38n=AX!aF#[HPM!;HKnfIQ[G^AW]^H *6q+7I\lrihY.AcC6Dnh+`Nq0McSfnOeHHSY\rK2ZQn!`p`[PpV\`=ZfBA^] Q*J@m58"Y!THa(HJZriH"BXAop*Ui'eHF/qAnd2pR$W[t!=r?aLpAe*s!iI u(6li2#3H\a_>-/hH"1.7T4BVC_0Jng<$,/;sfQLLZBKp4)iiGO:gq*.HDo%Ib\$l k/1knE5^G25a`'ofOT[Nc&sfD^)4EBG0^#UMucKblDL._*Ln-WJell\R8I@2*6:7K]spN_bbrq\U[8F/P*o(bGoBDec 8*?a@pNUD$-AiEI`jeP!6+$oc(rMtj68VmOGRmqEAYh)9m:V%o$p1>I k;e)-tQWlPFmaa@#jAW6A]1_dDd&iJ1)Ah8tXrOH[F4FnH+6b14Le1O^a-NK#.O13 "3F.I;6E@!!.X1+,*.]B TRq7q`lT:fGGb-k,`7Q?*3HF.^=j[lOeUnT[Q,Z LB)`Md+bCZ]Z`=Nh"\A,`r?tmi_cT0I2VImp?9J_E[Nj&,7O8_iOR?n%uhpJ$imPB /bb@%h;aql]Fcs/$#P5p+uh?(GS6E^H_7C+QRUgGP])P('jgFQf66kGbuR9RXUNrl WU0HH"Uc/h>tBI1sZO0M^(PT*S;7f%pgXcfBg!H!!`o0,Q3As!,!l>^gFH*g>2L]X R<50cJ$Rk;UK>lEp.&F-XpMBJfEk:J9!1**s7#/_&i`+<0dumNtgi^HQ'+hYuufaF 2l3FNXn#B1&E[)!5WHY5M7^`9^pYbHi`_`iAZTU>GpHGT08^Lm,Zll=eTBV55Wbg"B OT*b&WMs-@CUX1#H`Kl;1ENQ"THgJ!V!M;_2GAKgC5%`e>JUW>2RP8^f])-Gq*jjY uj%Wr#L@Xl1LT37CMtcj.-(B.g`E)WM^[Pg^tL20V$5,#WTt]4i"7gIr8Wg.!P#XF o,Km&(^a\A3FR#[a6jl&]K+W_.09I8#P-EmeKkVA.%:"kA[*`%S&D@?aZNHYP9EQm E;M6lB\%S1iJ/\L66T*l;q.jL9C1Eok6g<`i/A0E#aW(!hM3#ae00E[GUa=BAqtN] 3/i3'%ChGOe*GPCA+T(4CC-1^@?=o!5VgG?eEujpVjlca!=jVNMq4rZ G4r^]A)GUNJlKEgRFu^1V,GbPYcT"HU]q&H4RsO(B4BN.'L>blJ;rUpks+sM)>!;T %h7c4r_#Af68#=jfJI^Ah.u"RjJnO$G>9tOn0[m&I\<\rL#l]O,JK#mlta>Bm$6:= )_F>G?:!Gf,CVrNAO'r7iSgDU))2F+Cq`^!eu4hmf*9=_10:A4op,cTC>K\M;A@0, Hc9WrrC#ArM@38XB/^J]@5f2dV.]b%5NHjJCl.?)!'<-VP1"9L6$\*o/(2nT5R%]b C4]>f.ZnLhu"4Up+QB;5@r`0?Of;3h[c.Q;6+C([lQ1#D#?3bei,PIj`>1"Puis21 s)#5N:,H4+QN"L`;V$de208NCp##,lS:p:mHPNAo)aG'T8e=./q+3'k1`GVFZ;6=o j&M2f-E&e@i!sX fSe`^tA](6fini+#'iri"s=k+5s-b6h&RCHJR\edkji5=m?gOR"+UEu6 U2YVm7Zs?:\[fa:&*V`hA3[q].H6Gb".\sUNErqpG-1,O@Pd].-oV.X7%/*2/D4?K t\4LftS/;4stT-9(;emf7Mt5.;u?l1!'@pDj@b_HfLRmfC;)Dk^7a;STe>j[7%U#VJ9EKK $MO%`#"Ni6$"g=9'm6Jh^MrlN(7+b5Td%Vn5;;u9Mk0%>A_cNr4f^,kbZG<0?.*L5H^g8#a1&P8FXj[H/`;Uj&C]t3G6:jE9eU0=Q=8pS'%e*9l((]?kX/YF9B $X6"-dsq7R%tA4@e5rWKT*GD,]\Bf&5ECUZp,NpAIW,9@p]rJ"hNU$L&6"Dh6c.Qp *:0g^+K;]]LhT;=oSJR^O-^ac%Yo.]8q_2+Ro@!eR4F:"G1EBo,0h"gC?J1[h*d$c SP\!?)@I8n87"::hfn\nAW>t.@AOH;?nrW1.]=R1!NGQcPC4q57_nKSPrM:@'U\n_ `[C1)PXF"gugZc?6u?D)#]]l-^?eUUAPUfb(:L"][gR9HSut=oVruN5A!^Ecc1GAH pMX%4s!(^2Id0H\u\br?"7K+QP*dOJ08rbq%s#;XntK`)Yh/=>=Q("KtIRJJA)or5>-6!eZ9h3k >o3X:e]m"9GkU*;'HI(Ilud%1',Pt!5UQW)X0FMrOI@nh#(ZKm2cecHqe1PCY)Y:5 Pe!I];&%iqSMu5<3Nodo+oY>rEOSg`S+s^,F2[H?eF8O*3YiIE0A865fuXq4'1A]V u.25>lB\i:Y@BinJ.!ui]iCrBDrQkUR+#9b`^!t0grX^U.#/$H4nQ3O)f_G49PT`" AeugIN.!H>PN,%nO,$QHStHe-]2j$Bl55/BdDFQWh>YeGT:=G5-h]18>:C4j@J6`9 1^?^$Q=P98aV(m?P7k)(;*eGG_a)l(G.a,HYmmV5!$6c!]Sp*5j/8DO7"`$L?NSl^ ='dSPJ7V"Y7'X,9H(si.8s(RW@ZmQ]QT,K+5O5j2ThfnTLg/F?QO^5$3(!;>K>SDQc>UD:C^]\C24II-VfOsV=,"m- d11n86c3]ida6rmNJ$'^G6Qg8L1OnT//IC#IZ*ao,Ybulj)i`(jH_n#mmPX3kS>KT A")SKc4bZ)7-Pq?3t#JTR,jo0oYi<9eM8-?_`N;)7GL1^Rq!6rX[5eqS9 j6E(b:dgtXBA'5E,jHZ3$7o@>!Zl_J(dZ:$_+bXM"@$YIrr[bN,dH,p5iRBSkaM7^ E3CTi/.I6!VQHmN;Am]/$B6V;ttq%?#r?`rrB=lDQIaC2rrC$]bD/mddk7"[[iBq,TFa-'8(N2SAH)X^LbD5cn4V]9a bi+&58A9P./a3magoa'"1Xr=Ed4e&d,i0*6NBCm%RB8cP2Gb9:Onnk_QS]d$SME$r )N:MO6o&(itsm8p\OUp3I@q-m\hc/pJl$^R$^a"1m+m"s^W6j!P@%L625j8KAb!+GhqA +:PZYf-Me@Mj<*0On=Jq^_H'a5l-*@JH%4X>W!1[SXlsUgp$:MYV2a$aK4T`h+1I9 @A1mY3R,4D[,L%:2NHE[k2ja8&6n#2D@,4-_>9?BEN2P$;GiT5INM(jC3uOJG`$r@ :R(g:YVR*fCNkKnH\t92C6-$_B8^j[JSSU!!OLLnP@"dg69E/Hqs4/WT/`Fn5"jF9 %m6&X_/0sfiWraI)%Nk??,V@_1.5.*sPhWYLoKQ5P<-3!^@C<(#R"?DE6fho51VYG iUJ$*.Bn4Q"Tm--'*a`3CAI^JI[HuH/buOSofbJO,+\6H""+i[r]%R>KU3'l?[o%9 >u]>4RZnYma&Ha5OaD#^[HTKS94Y9pG`!hV/k.Zn5rJ@b,^XV^ 9i[JI?G9B/)d[bpc];#g2WV0ao;?]^5)^gJn"Miibs?si1`FGFV!-b7aq92nIdjcP =s=WjRTE1'l-bAKU,El![S6b8'Ctr1]dKCrr<3HdjM^+!.ouTc$'.$D\fj`Oj4nb+ T=XXkU=Z]^,k[>pa>rUrn62:#K(J@^C>R1qfhrte,CHDpiB:cV'UbBU=Sjr(3Wa(k ?tg@^_e%me/tsAr"iGp?gS/6%^2[Wc5OHVr""4U8SrD*h$W)ZC#pRUOL/g10,nfN: $[AH/b4E&dgq>4/cHL[Q:m1:/sgZ^Nl0"Sq;;/WnTSuRrkl<0g9n<]19ecjMW2Bc:\ZEQpVW&GHB^@\#'lleik5r@bnV@#Vrr?-irrDs3NoT,#M>e<,p :@DhiV(Z#_G`qkX'*GB9??'+o>7)d_&Uf,m;,UO0-6["jSo5T/hQ;8^YkW22S!6K+ FA:f&L'XAi8nt(CZeJ$J&0@_+,RB[B"t\(a'C=U0)&Sp*!7+0$$Y-cMpqg\aVEn:! :Wr`par\'^M=A5,@:.hi'.ToZbh$LMIV_6g:"=%5#&OcT.s1_Z]IW]@!\Cm",-[SK ;8&E+SZ]K/*^sSBrR(Ema7odM0uM2Un1^P9(.`Y*i]`cr4ggbRP3@XGrpYThY`?'4 Nua8gA_0B>Yk,C(W1aW]AVT5q/,URqcnU^GUh/4cWm]fZ]a*GZ*m3>)og!D3XeQ4j [nVVrrE$)9cs9J) rpq&i;%b:rX=]Ue)']`;/*(Uo!e+e='u$eZeqW7c@2Yh\Nf$)+o1gf3>1=8&orGlGe<8 +"Y"+aEnC:Q+?nG+LMBg.`n9ApDcLNPi5OO%l\4#REPl25->U-DQ\m[(i rT"*'ql)-N0')T]TrY8YF+!mI[kj$a3tdF2Y.Xc)(atCid`E`/rT`0WX98(RN?1Yo ,T%XE*VhN%;]85^M/fs4@%qi?NAWact?dmaoo3XK7'ILcV2[i$V,Co,KgFh5C9M>d &l.tX*C/*pCaK=XuA$:q:;qP'Y/mfn>`f'OE*R^>g^2C,3i?Y>SuKFi\7;@A5F*_j 3iHB=2/1ipbe)`p;d,nIN*Z5*uhU>!PEcQgZqaOWT!V">9bWc0eA$0@(_Gemf">Y_ 4D%n:BbP1[AWBsW605L3d[g#IgeXGZ6M%36hE@Y(cD.orr<0OROc/J,PUQqer1S%K 5D3]UB!Xl^uSSFh[lkaVss]d?@d&XrANdjH?0aW!<-<>AInPogZ.2YET&p*8)R*/^ tNFSK04=g^8lN/2=&9)Y,c7TQU%@]bg&N-^upbkrL#n.dN=Ht4RmWOXZpMA([/UC1 sIO[l+2V:MldG:M`<8D=Uhqj`$2` ubDM:f-3O'=\<7V1Te\Vm#&d77e.!fXlBM+bTS T!W7)"Lc4,C/+e"9K$^;A!Qc9QVOmo<4.'i0Jg%O2J^Jrr?`ufV9kH^,pKurY)QB5 @"1E!VkdRIXf2:hCnhaIq9]BHs"sK0R-C3p3m=s`Uq`$G^er'k3W8%Z".X:r/K:u/Yi(d+j4fIjZ2Xg^^Cun4!.m7ZIk$E=]JCan#'#u9C\_PJN ;]XN+H0RJJ+<+q*%:;8R*l2'q2dP%aNaeXkCLl_d68B%pli`Z-\o&e12;.7V/)p\K gOI]i`1t"N;Um]MU]5!-0Clj%SY_^"-19ff(_n8^:X83HoBHUPtTqXZU]RG]0o:Tl lu\`K"paU#jok:Emjk?\C5BbD)G!SEMqX=B/2/$%h,WTrrD*#CZ#-li0rQm8fo#P! 5VDo/U3>nT*@0f$>?a?G=YG/npPH$0hE@K1b+i!QYCh.S3[MCD9ai6.hH*,cKOYl"SDpgQ&q@a!J$`k.ItXC8nOJ7TT7ZT:C[:]/Z 1QF%JRCLcI@ri;r&r1&pcj)"G>t1&'f\i(I-mnrrCcR/[N@p!!f"pS<"6%K?nAe< ]7Yk!!^#`ef$`+2>!IDpiS9B-BY'Y`"o4T-m\;!JBe@FfC]!?N.=aOM=B8)f!OId$e3_%UqAe%]Bc]q0!7^+.X"S_UPi:u)XUJh-1GK74>-H=rZHp h0R55N,2H1\!R#;R0Gt;/Zs>MAVe-8.o2'CBR)J4jJ8#M(I(]b[/)rkh,?3q-!"&,])f6FN3dBcJ%#:6I[%he.W^l#5+ *5CBfM<7Xg&D$Un@Ou,6fhSN!HN&TS.k<8.h?hc:oM ed+tPMrCR4.,KZ/s>&#Cr%*Aj!U*3k,`;O)kB%P"Q7NDU7UXBOe:3T5<6L:K 6)I9?23o`:GEg,0hA,0:?a,gO)T04I!2^@=I8b0,JAP.J&/l5gh<=f([W$tSRPW_k =LsANl;e5qB[BPjb*?[lE[;[4X^F(hu4*$doQ5$f>7%?h*nfk.k?5#*Wi"iEUSECY J+kjbm[9eL.#F!i$,p#rrD!;I6uf2p3?@H*SW?lHsS-nH7cblrr>CMlX-;'!XI)R$ 2M&6_isE`[@di1#2RK-=:`G0o3^i?iSg[/fAa`R'd?EbYfQ5k3To9WoY&F!9cF\p^ uOaLq7$&4MF@!d`W#qG9!#5UB@qj20:=-k5+GFSK`;%g;1(P#O4p'me,`$`INA3@' h:EHUD&4R=7_"4l%=4F:B^[tbEO+F.;ScGrr@YZc$-)`EO)'(q;b>,4sOJX9ulV9F mLeVIlH6pMLWJZVrt89U$r!]9U:2a]Qjmg`_RYcOo1Y[*--T4YK9m( bDNS6M)WM*BRcZZoh;7*ut2TD$u%b%edn5c+G0AXD\gKEp6_i18Q'"EVE7X4m2qhK F-`7.cEo'D:/rumd'22p`X2:(]5&dp3]h_5piY5.fag%FIDnf]Rfl[aI`d\D[G;@I G;\=No.InI0\(_.ETG:?.`7le'&A2sFCnr(R0?^OO)<*Y,OH`8@o0Ofu_DR Vo+bb<$*ME,d2:f.]WMGoVgk]<4Xtk.a?t"5p45L>EiVd(CfC"br;=TXV7^h#p9RJ \^!4%$$#8lX'ep!5X&)Q+sg,Su.TeG^^lO_eB&MYF&(7%!Ac$8Np-d;4M]g_LOcK! ;<8?^Yp43S%Nrl1l_\W("jZXOQ=>F_YK"5jpj_8g588?T6^$V'^9P!7m]>Kqr3BnpF Z^0,qAB]1,8eN^cP?$Vr"c>)QWO1eJl-oEK%4.spbqfRUBN7O'7`l^8c\cfrr@Z>I a.isrL1A8q^5Zs*:U.er$_Osn6OhrXLuP%7f@6lruTrhqPI3''ZP1Ee;raB?Daj1qQ P'1NCE6%D9/rJQ7SlLON^I\,!OnTY^6/EqJqj:*_/MRarn@+=$*LpJn:OR4H_gE]` 0U8^Q@N:;rO8`Fl%l%)H[&DnTofpiMg9iC@]Y'qY$N*s4Al+Y"V-tc'A-H&0h&!4k a*tSWibBt3+,4#i7I6Yr#@T`EmMc*!!rQ*8S)aS%%\R9[A%"n"DXldABTOaR71]bB ERK0JR@nET*0O`n5Z?dVJ&1-[$bNc9\.q,Ji,UrU3"-iAV=T,3$TQ+7htV;r"VHq$ +p'urrBl02=3'957sOIItTpsV*lnGepKF8l&EudC8$MhgrD:aa"UE0UC\:L+<3*@o SsTr2']UQb*7s.q9TB9j7.o?A)WKg58/9fFOr)hdIj!@&A"^+[D#0VSX)1*&dOaR6 4uam!&k;p&RVMen4q=)+HOBXg;EV?n0c-rN.*,PU3o,`0,.N:[c5V(nFSMN_-,*Mp FZfL k8#>+JafZ2>cS:!!^CA!5V%p&))C()pnQshb%auFmrm6LJ54c>Bs'uoVH_ccL#.NZ 'g8=Nf(cM-4Vhh!;tpVXhWfL:CV[TpbUpe(AKuNO2O]#[(D:]2L;QX`O'SgZRYtTV VUW9n"%D`$(S#HOBDF)qe,gLp]^-liI6Ca_S'1IL;3MKG@]0-a04.Kkuo&P&K$rYg a&5pdQ[&]6s+:.jogYC!(gPe?QY)mDo1u<,k&^S9>oH6<_2oqg=s_d.](>7-,aL9^ fV32(*d]_kHV5PPP2E_Y<61h@X*OCBB!Hj@T`C=5_HpW-)HJg/@I?-&Y><@ '%ch1.Mg^blJY><43Y8J.L5'KKlii_gd2$#rGE`p_1J.&j/&1T*X]NBsndqi ;;%t=qm^6D)BY6DKIomuX&fqeCMi^fb)$gC_b0JEM]^L9AL&V%VIrr?qB#2f,XdX4%cK 7&)fqE1*B--h^JbC="_4RXm*l10ZF3*&MdA7Q0cl(RuhG]7"UCG1H,,Y)irL.J(X$ =3SfFnpXLO)nYkJ&/eKP3Cfm:.m/omno]R\C5guX!G#Eo"WLiAHN%-!Pfbn^>p5bT :Pu^3WSs8p=9,MFFOYmUZ$C`$XOBKGa^3NnMM.pGk",YG^FJ<-!3]u'r rDGaTQlpR.J1pnr(u&rZS.m-qq)e%p5o@\f]'O_rX/8TqlO)Chm;17%^U/P_-uA+K u0jE>En"a'lnU2P]AfdgKRn-E3B,DrZfA^GqPBZ@-II*TBL_9pm?V7Jn4Aa_MkJTF RRu8^)ZVamHO-Op3ue)nN-F'8&:6"Hq_o[Y8)J[qSPi*47+4`#1_L5jnkta,@H.qF 2@f?6u7pPZ'!i\p%8t?%X_nR$QBskM%DD`@`c\N$OAs0=KYsT('MfARRHFrT-r :oV,"31?@i2Q_V[g&Vt\,H[cn_1n!?O6WUpbGM"$/`bOCDP=!&FCPi(02dlNWB.Oc 7A_I[%4@q\o!p\9$O`'IdoD$l@8d@X_QI;n417I(c8D-Hl[>-F.JsDF6e__=DY;p\ &t,^9eHsR=O7:6co(9JYMapbFchM&hE+^+CSge6Be?OU;=MAs#pceNb_/( bcKP335?K$%,CINQ!9"kR@.=ng8UaO7n%An*O-E^ts[i%iOS%bW]86WE\d.*n11^( 84qCNIEj?J;&AJXIrGF)NDP9^H^Z0?]R77^ouI-icX.64rsFUiX*Bh[?\D/G]"oTQ Ga0sL(_WUOtj5"'cTdcWQ511pc%5j#_-MpLs$WP^[RQTK-$E0mVDJ'rXAf,>lN8\) %Z[;g3CnkFUPb\rB^5Sqciib`ZMOrM$BI=?fG[X\qQ@&c#p,(CCRtA9QnT1JiT7u< QP4iaiA:7$ha]$W:.)8fs=,p07Fdd8^nm1)I#1D9fl+1k0$U'c4'uKtN_(9sHT+6?Y08;LsV:M>a( 6taS]$G^Mqh_R&I.B4>4\>'9!-T0n[.UPOO6sXgpl^A-meD6&2Z7f_?Q]9u+10NY0 DlNfi4k.$HmRe:mBfSGk1OV/8X9b][%*775m\Ll#Qg.hah\'+^I%8,pBg*EU_rH_]IALFQ5#IY$Ttoi+D-ZhiT(Vg`7W:-9*I6f^!Vq*B!!RrP[ QG#Ymh:'^rr@aIWQ4"Fmfn$V4a-Z`=<.,E*nBhe^g^ot!CnBL>5Ij+J+-CoJc7h%] oKCGCCYqR7enUClO07=q?JDH>dj7DY)St@5fi,bI.@4:"k)mNp-'VtSTV+>IqREj> 'rZG2^?C?fdkqN&% j-%6mVR9ILS!QU+]V(TA'fOc?^78Q7h=@p6MLf_:\`Yij)+27NM:ej]91P(i n9nT3p4h\G`CLY#_>+8-saPo1CK:HBD/0L4(\,nRB3IuXNDF[baXF7XtsFV^[O_]L %+A7*'\1t6c\m=?.)+1-;-KU(fc1BWg<^ne6a.X]a>fh$^Y+tQ%U8n#r*Q+2H9]G%HW'WYieoBL!I#"D!5Wi.B$UK\_fM]"b4ESlbmM[m5gq'o74`D_aQg9pZd^lkp VhL9Mu+TD.C@R^2Lc/u$A"Hg,\W8@=J4jForD9Bm!J6*`>6>F`'4_o'6O\: B^5cZ!X_,naF7d)_gfsKF4H?@Ps'bJ-RIjfB7Y]&i]Mbn3gXQ:nQJu9CXB]HoZJLp j9uGQJ)HXFpU8lFf^nocQ0=4#`T4UOLu2:V1+6TI`t"d/[n/cnGC$6UL91p*O#bh3 [FcT7t8@rT=*!ur\$Xt%h!b)nO9%W5DJO-[Adff=7*4Z4L(-$X!,E_2R+uhOd5q8Y LGeip\(6K:W+o:?52o3pt*?Cp<=B(H\ilsD5N.3b#$tTC`[BPhtT2"i2;?X-i3u/R ]"('!"8"ZG,&d3N>Bn_b/QC[b.5#dGncJCOA]$L3'F>/T+?CiIg:J-X:3tn^)`OUY dWTNqeVJ$:33bEBEP9Jpkdt?+u@:!4TXN"'"a,q&u`S%-[,X+A,V5_2#(tGiX`s\m 4DY]br*aPCR[nnSPgtl8Rs1Y:,B8/3TP:cTJ&N>DhQ`BnQ^Gtn085nX?Wt`)mXmX^ -)DqJoq";IM_dOn`0=onG`L.*sZJJ[YNg['#t37CNtHj(niN)i\SUX!&?VC!9a@^i 2[q41`m9VHF(!*28(X9Dtm>(-b\8MEg%Rr>Gr#%PJPQ[r9!o;amc]ii*b6Uao;@D9 4,EJn5jP]Do+^?^+\8JIa=SrnE5LLr$_)Hp%iC2Me\U@3+0VF\(Qg+ebC6UmQ^KB1 t'-`ft[j'0s(FMi^nNYNP7)UfMa%%a#X/"7uFk'&migqRZ(_1%e@IK2l#NK09p_7HpiB%/$q/,[/hCg?'+ W3?UPCP]:YNMPW$s/Jp_rApiC`NKAs>9nM2a5pkh.=0(/H0l=Z.@cP0d.P ;u0lR1tc#\EYXd_9`$!.n-s3P5&tq`&Bf-]"O"DsY,XYK&])LIOLFE X3np;Q&8,o[Ta];9op@+(LG\0[1/OcT/cMr\a;6r"CU?JG?J?lf&DTBk%pLAitF@X AF29j]D&7QsUg5>T=6`lTcO_9,>ka&&'RS+-(YQjPTH2rr@U+fpU%jnGC-FBES!54 R7BYn"$'JRep'Gl>bS1[J)I@'hQkgKBT'Q@fg#@1;Z/id^CpGJ*g rcFS^!-P+."B(PRX!;1*e))t7)>7<1V&L"Ep8A.:0@5nn3-*sIi.$nn/g$:'k8[[C&8`Y.%>Z/7G7r Su.*rrD!ZdkoWR_AM+)N8pX./\E1"CQ^P8)tNlu#('1ldYE!%mK$1(E+4n2m?hsbG.hqA#0i21[5f 6s\P5-`;Wl!L`Gn6Wdt4($Y'_iWY=B)>YioK]r/-nB6VB>E+T,gf6S_ab1.44X'OKJ3RnL;S>RXh-1u.n:!+^JWguSCrS6ul]J +t6!r",@V-gY>Wi=Co/G+l,7X2k(oLLI]II7!^)@AJ=ShBne0iX.@G?6-?0&i5OJ# Jn1E;\.WLp=]DO5N%e#RV0\0fj`:FIK7%0D)K'>Gj*qX)(f9-R4dIIS]%rf=]*7Y1 !rQ3F'jk\[#HWNHA$H^cD.$XjFQ^CIr(acDo6q:Ma+L[`'4\*@8uM1^PD7Em1c&m0 9f'>9PspHN^)56p,i&;q]+o?/sH0(GW/jrNS^^E*QO[WpBT=8Q$`4j2"QT4`3J0 /i^.R+-qV+CTos]YM$=Z91J51t1j9QP2e+HF&;Fqjo>3n,4D"8Kiuj@q"8!Q++7X"2lf(-iYV5CuiD5$9# K(tR28kpeji#lEnJ[4L4L%cmJ_740Jd)E7I`2#HC=bZ\2<9RYGr490"\o=M-6*rY9 IfSQiDdH]VQR\mg\W=0$$gA5"JN^Bb#IQ^[OTT%S>Vtf]#-&o")!7W46;&o ,/eUG9484b.c>,n`sOBrrBkc]HZ2GrK23f9=T.jHH)i0N.'&*UelR2gA4+t=As=c' h;.s"TWq(rr<45d\kSG4q=ub,!dT:D!^!(5$+1<#9LE^]rUId5Vb:$9mBb,q;@)l= 5aYkh:]mtS"f]09"S1ljA&Cb1&,Y4iEkr1LF8[k[/__to)_'DI$+F/"OaN?_oLXTO mUpThDL`kQ(+<%NO\tqouT5YlX)RL_;5pAn=RW0NR2p12hpI5(d.*t+]9M/pS/7!@ +ba70Rr#j;0ef'80?P:G9.%)5E]WnPl#fi%'q\2L:M`QgMsF^j8KF#&"ES!"H!)Oe :[c$+s*W;4X">6/,;ZDAJW_!g8pVEnk%#`oE'Ok73n"?cWcb![hgLeQkeUlo:oks% _I8HUn_@Q6,CCqi_P>uMs5^3r"!a!R`!>=-C$!Ob;8s*DkT@-Q8rfqE'!"om!lJD! 0<=BphTaZko*j%a)e#'&[F2tKaMD_[0b!:;m\gFrrBH5F7>Aee*h`Gr&^'gGj]"4` L8KK,]C>N:q$T6oH9dOJ.pp:a4pSHGhuRUg@aRt0!OJ]JABXs:q/U2D9G+M0Cg :pSd!8u2uZhmVtBHt!=o[3[=Pmbb4_ta63DZh/hn&5R>\C)m0]P4RN.YfLP2+s%(* oe(ZKmo_F_4OU)!6.l`CX6o(l(@fk]q>nj5MBiuPP0@n^cBa7*RQ*Li^];Za*Q^Zi 1"=m^LH('[\0I-&R5ACk5okJdu7@Rqb=iY5A-T/97*oUF:5t1],:M"`HgqM''ii5n Sdb_i4VKW;R>/\b;_]#BQ;)%'ER[W5$IaQp;OCQ^Yl"3Z[AT@<#<41)c"u^poh!G" WZ.8rrBJ"Q-]@jA+k,4d1jG=oj!WNMqdir&$&P.39f:fW58K6')RWJYrMa`a%]]-p ;jA_E[\SUbdE^^mRA:lTFZoEi.b8?C&9LWZ8f^\^,XXI3jAF8hEC2l;%Lf49mgs\! !Gs"3cFBZj(NTIdJ2m'#=$3!%VtG=!;K4d$WWt>Wa1)"WIDBRpfNi?ai4W87m4TRI DX?YmRBc!EF0F[!5WIk_km8=P654fNF3W[cJ5!TSLa*IQ[ ^>Lm:U`Nm-UIaQWsWg`l9Ch*U[b-`mlZCNao;?kMQnY$"!/DD`c7S`"6#mI-Jb285 O_N'g>+@BEq8P)1:f7>dT-+hIKb/I)9+JUFNo2!rr<2pZWfZh.0o6OR01+5Xb5PT) ]X?"qf*@/[m)3!*V2NL'_YWeV+ALutJ*u\gkYcfIkmc.Ah]Oc[1g4+l<` ^P=)iRQcCbrNIS@3>:SCZ@YS3(,fW_*"9jdrS%=r=-$%*.>'oA+1hZcg]$]_YS0.! &h'Br._QZAPdZN=D-auf=cQ=rr<2@eE":@XZpPnHaX,_D\baB5i<`SJ3OHDgB&M'! ^F=^SU<6n!!KQo-gc]d<$[V2BCSr!E^o3eV&;L`57.D^chK,?MeB,9K'qU98Z)D&n TkSA0OAf0Y#G&f&cSWMrPn:isa(A]Ak?RPN*p*h7()ofr?d_G;EU$H)?Vf^\tA$&,kfOl$NACZ,3mcf&/:P E3(;f_,&Ul$rIRA`)2@!8sl,!aad`LKb@BE%l.t#PF`#fPgOEq7j;N,(@c0pPUP+` T#iskbBG]?<_FEN/tun 59E:_a6TGUqa5%mL^./X%0[Ji_0U=c_9ZcC&n+EdMGJ^EVWi,f8+pm:h&8\!!Mog_ ?,"9ph&]Lh$5=[=1Q:&j9Igu`4t6+nI+g<)rgh.PDbJ0?:W%B;\T9-C&\/AL.4JXEi$QMg^!SWLV>'"ZX;sPGZ;2\/JK<9" XbJbf-e7[Z2Xe-nG$juphs=6PPduSD:Q9jn>7-V6*^!GZ'O.c@J'G%hjo-@iX*Q7c )gX11pKI]KK)+USt1XO!9SAP=&?Es'*J]6.c;`U%c\dkU#@\Ti>]**P-H\2XXtV`H OJ)+aK2ZFL?/FDKuq.8W-C`ipjUnBIdM4P:^:@s>N=VZ+5(;dAZ(Id!+t+&C*"#X$ p0_mXQ,#q$<3uDArY/r1$Z1#pr!(<(]-Mr=jsQ*rZV2Ln]nm^I<_+IDlI&1FVIm`_ FY*%J;&bCDun9Yf+[Y_i@g#$48@sm_`nKMbM?Z4]#rc0g-b%!FSe^INH-f,7QA_/m (P'#_4MH,B-2kfj"HA*'(JJIHoQ$(Z]b%Z8!4-fRRYqc`3I-1a%U-Z!.'rdrr<5Ir Nj-oVBpt\naj\^>/L^$_C*b']87_kG4_'%[ks^+*b0*Gnd4HUO8]NPqdj*?1nV,[N (X];SXP"jJ.B*)ZGuA,]%52\^Yjd[[(hMM/["I<$a*]"G7r(<9juRS!Y.?Li/6eOJ )K.tg2cR>%h.5@W,#e=rr>O[5T^I7dQ\HDIJZig@b3_Vqa5U`;=R_F2:RLFh+Hr\U 3i,b0.@]R#a)%k9)P\MT<3MfnDjKU3W!333V[rppi!u5*;iC*k^"P><]2joUM3KSn 4%sA5;DOu&-@@gkL?*WrWrN(Jjt-(n_`^]ia7?;*RX:%nY_$k+Or>B7ta@?[dt+UO L%.!)f&pdSh&D8rr@[drr?bkXI1pBBMO&5.F7*-!-pEYn6B>T7df,;H]O6e->;KX3 RK[3h$>5Lc_8ZYFrZD2muP5mn&M'SX5S^Q#lUS`,jN)rn>3hB2c4;@[MB.7d_p?!n OX2$9,U[\4p^+u(%0rsrrCu-hm=3drU@R+nX#:nq#:?!4?[C)rUc0TGD6sdF2$$S8 ,s+,q[8,Yi:W`RMgc]2= 8r7-r)X*5iJYm#X(cVm[+h"NA%3C'rZMKND:*2!c9\%o0O$4Vl hjnhU+O.WG,H=+mcLF:rXEuJU0t?k<4VMAR$""T]\6Ql3;^af0 gHg9G^o]"X8>h?51WiK2=]/9[Lgb@gq6\4@Zbr!2WnJ?AKa])=Fl$dE!K"Ypl5:R" YBVL^+\^e)J@!,NdhYK/N31N9.Pp!Ig*K/&A&-gIj,0NjGk&gbPWp!lX-nmr"1aEh sKn%pK6rE_7=Zg9d`B\DKHcR;4PNKh-2eZ6EbN4"E)O_?H$j_!!]fZd#oE4C-EtU!\AJY(*jNJU)6VVZ+pa'"mIJYNK1oba`u1Q@oda$LL&qYP9><`?4k&YD0\5W dJQqd3j^i*[%r]cBu1kc^Q.c:S!'$ObM`TL2i+F)h7W?HhN2ceJ`j;_?eEh'jX(d1 ,IMr!V7SOn6#\jg?Nqc\&\LKLq-HHM)=]^5(_)qLLpJc"\elmmIdS^qCdm/!"u'@e USHVV:D[kV+OQH2dm&e\BfF4F)76Kd?=Ug0"?>i4fI\i/HP.5A2.mp YrBm:BAS78)iEYM.kW8ZX+j0T=MPmC5nRT0NN.jT,d:e'H%hfoNmSCLj8d5?jH8_Cm]Y=`r XJf#rVIH0(\*R)mhq/ohIo(ad'!$^;f8AA7=c],#ga*QL_p,R4_s".(@UWfJ5gIfl g6qUrr<[\0&6Anj(t6T;Dei0*"Hou4EEb(F _'(jr*->EnOY$&'X"E_278]H?#T_m0A;$],s`4?\I(slmZK;3W#tMCWd(qdC!V`tn @\O83:NN-kD`JR,AFp*gUGosa82M8;@o&]]p>/emq a1[_Pq[qdi\jiW8I^&P&)5._Lt;4E&&WRrbV[BmmUUZ[K#B5>Cs7F'.Rqg*L&'4!QYKT_'bZOqI30+FOkUK 1VA#A$hE\+_F_G#`Y?'+EB8iEEWY[FXo-S%RC>nW2-a8d4g)/dLI'U0*ej2*aa5))Yh[9Dll&ub0#'.C7N6=,N#MT)b?EFK@a3bf/ \?LTY+fG&)Ym&*#hu31l!F^F+NLBF?jF^'m-D$0^Pn;HEF3,XAT?(Lepopdrr@Z5l eWkpnB\sboUQaXoXfSh>@&0gFl.7c)$UIsK92%5QHu5-X5iusj(Ku\Ro];_iWcrV& D&@FW`[E+8_mC8<@gAg_"q-X?gq9h+au"Oa70O4@=g`aT"+&KX6l`Y:1saTo RD_OZWtc9Hoge?UUhelWZrkd@'C'o:^ 9Q[`eFattWnP71C[Iu`Z4fm[?p7qqc/'+g p>2ah=?sU/"Nl\H40iLk(#X\dCqO6]),0U?$kOCMR;]9!6YH#f\CaBfnA9@HklY]" k`dP2=3ol?A[WXCVW+Xn?`hoBrHMqC8M(Qrr?\0kUk"63%_XlK(e1U.V^Pnkan-jK^]],/6aO]Phe5_55P%HZaH6,gi?lk LU,laKLYS?nVRST`5#.:-WL\N5C32-UH%+d^L%K\"aW5QoJ,*+`I\J0Q0K]*F5OrrD!8b@riKfO=-AQ%T`oK 1qSR;3N5mnIk#h";a86ER<=k?5naAK(O[-,faU$@m*):F$Ldrj6t]BpVQn>e1^_an CuqdX++so4ggaC5sE[E+"ET5G,[G(i8Ad^K>6?,rrBELX_%%_j.<+;#JaXsI9XZoZ l5O0Br#IfGksPAj:)O5Q"8AYj&ip78M;lom,uYJ^4-Y(N]DX4tZ"LJlTCl1]BWbhJJJPlPHWH QQ)Ra8?qGqcW\`c9X(lnFp)_7Dh57pVI(/.W>M^j^'PN@u\9rF'f-niCJ>IN@)8]F ^c0L1>V2=2X1>;O[/:9`rrBAQr#@*Slh4\8'/,$O1[s-udl^d4c`UO,h SXIQ[CqsqQ(aHu=UG'C;1^TfS.C_Bpe`r>_JAOW_oNZ!,"^HHH5m["UJ-kKQp[S4h B'4r5_!rpK!?9s5U/8_TF]ESrr@\NIq_&ht+O,)H'Prs%lIqC6qJ#c#O7P48*&(,lYTC@!d`fCT(r r2B[L%oZGcP1VMm1CJiF;a/fkL0e+bGE\'M6hqllr4C3sT,dk2i9@?[j+kIc( O/GRp`JLt+s.B\P#s$l^;"/sn/42:dI6,sfOUHK\mL0j-C:+lkiC'ck^T]Vn>n`Fp I:&kDX6nfci-'m*fL$u"WmWV=8iO?YP]l>9^n@Ci<]E'pe:HkUU\et\rQ.QYe&'l` _VmkKSEEcX4IRt.;c#^)<;9mX*`d*bn<$+YA,U@D:M9Kj9>t3jWaokT r/9C/ZbOWgWZ1<)^C!,ZiQ9^^3!GRGfsR5D69B1g,T$]Oml:pSfG+%hMG%m>CI.6- b?pYg?FlefhVI:7MGT=>j'#%gYj(PaSiu!a(bVO^]"\r[ML%T<5/\pY2aGA'8-83A %5dqlmM]O!Gj.`!.n6d*b!2%)>J8nOe'De8eI-8^E:5Kh+'!q!!Pj]QJCTa:XNeS! #kgLrr@ZHGXq`Gn+\8qr#sWJZggeCFXn.":hh\=,LWdP%;?Klk(#W*p_0ArVLQFtT,hjG=,n;"iO4>pO DuG$H]4Khi^L&`YWXN"Ns4b7+8ch.`n/g^W6^06eeV"P?2X-_jDeNoK:\;.j59?&4 ZmJOYntA`@]n^?$suJ(#L%5s%P,j)!8r``(*3tc!.n=#'%>7]j+G6gq.dg7<3p!r: =7'W4EFifqaYAFXF(6BIC),D\kTu[1S9c$l!1^a)USKa_^"psCeSCbYUPCuKd'"-3 :EHG!UBN8giaI8,lIrJ!R$\R!SilGTAT-7It[u*rr@Yfrl*_Ke6md5Bm4mRMT>cPT pF5rVq1oil'hPSF]W/2")U%9*=o8s0C;?i3'9M(97.2Y]5Wp8lPFV/G6#e&%%IFb1 :d$)epopG#Sm\G,#G;4!!cq0lEH\`l-_\3B\3j79hqbqmJ51$"Gg'g#D58`"TJJ<] H.Emn6bNjj""tM5g:t#^Cnd2I/`=KkmflTC[XP1e]S!+Irnc;hsa?7*-cP`B8gs-( ,^]e`d4FXK`a=+!@>#.,hLG3)9umti*Z7=1ZA;9NIPRoKX0FerM'$]pqboY[@(*;g Nf6P0tRrlOdHgH?[RmD*7rH-n5OaM>G$HF*0XEd3$Pa"Y)+lr;2&7\00)8C[='sF8_]\m.tkfsi n[)\.;l"smNt4B@.MInBcQQ_A'(q(5PR%n:]*',`oEY^&^lI6:Z$YUIV!uV2_f)T[ ?nj,:;q*K*D=>[=&Gd[Y:;&u9EVS`V"<,.*r4)G:4M3JPX"Zd*uikq,Jnb&Dd3,8! <'e0re=4"Sh^PMd-h5=6#,mbp`eM8-i=Y(_1LK0,#*B@5*n$+]meR0??iL,B4a\bnDlmZa\%U9M5d$hcFSe^r%"RDX7jN/<5TaRhb [7e0Z9e@lHjXPRHN*tZbQuKMpOC4JKmbp"5Q,p(\+\&QC\pPJ'"T>Mrr?n-&<&Ql6 .stPN*%gN 9@M=o]$\Z6uBJTCZjU-9$qaO$cb!)!tQ$ibW,#R577/KgC^U2!;R`9$L_aVkCL>bI ?^"A]Q%F(j#P,(k.\H/a_^\:?S6iE;BYj,K"`=s&@)#=e<_0eoGRMf^7^Fb\\[@dJ 0&^;A(nXHrr@XU>DlkBDt^#*_2EQk?NWMGb5>>pTgC@9J":t"rr<2XGbb5=^M.$tP P1U]`Aos"4NbG9/HC3[F`6D1^]TlI39k;?J+tTZOo;9V)8nNWB(6%X\K+/j2>,u@< 7f?$n5bN#F`5q;k6fPrlIKte$0esPT>8eYd@M1kpiB4U5On%UrdZK`*R%(7EQRo3P MnTrHnhKP#6rTiO%dR$W3)@*E_QO]KDQ<@Qi@$h$iQm]gpf:d9W/7CIJf__^;<"G=!.NLL1p?$QgLTB(J,ld:rr?IZ%UC=QVtfe.`I*Y4;h]reQ P)s$rZI9E^8odq5@e._[fX9brK89=h]4m4b(5.;W^[$0"GUXkn?;U?A?TYC/Grne[ rWLl_JN^:]Fh^7(&[9?E\J4.j":O#&RWpEr#?5h[f6?4T>h`K3H'Y=n6Gd\W\N5r5".2J4EthJ2kl,Ttdfh%lYA-L Ng#X?MXU$"SIX"rr@Y3HjEs6/Y[/*BaR5fC!4]9cNcRPhRjfcK,2mRObl0R"j(*Gn *+/lq^#ntn<&1ThZ^*`gnW-S]c88Pg-^_?.97F@\Hbp.F$Lh[hsb]*KljAFfpCYB_ 55h>rr@b\U5&6@UK2Ln!("L"f`r?WC\05$K\dHYZ%-)(B>`.fjesT]A09VJ[b']Wr "ig:;oenh*^.NJRp)I_!*S4qU`Q5n5A/r5N,>?mH=?gk[#/%ET*rm#K7`7^UDaqX _`Z0l;/dcng[D0mjN9Fc[8gZH3BRM0KZmY^.8.6/FC42]DhkApUH1*.eo3)no->qR lN6R/C4VlIK'9MQ2R7kj:2+h$CAVLkPf`l:k".uhLE?`IqLk&%0$;8oOZ$],EbFsn -6UtNC:Q;Ehm4aP@,j:_DdV3]`cWMh# 9t=GkujSY!IQV<'J[O@!Bu+EHm$U\X2uoi23B)$QPaNR3SWre=M>&[1e:,ES:5P\o geom"%W-;Y5[8V(q'=14@u;m:W:ag>Q'mceSG]fS-L_H\cm12+WHYr_#2"2MZ$'F! .rSq+oSBh*.Gp%IQ[S1IPpmj`?#`_p:$pFJ)PkbGZmfs/%,7R?oVjIQ/jC;q.0EBH WTAPr"*mYC&\/:+Rl2:jY&2\3q;@:rjDX:rr<5Td@g"_r"F"eQJ0CjD)SAj/BCdFM[\K oK5+AK-1;aVFO*a1r4C&mI%sMjN:.b:YX8e,i-,7oB2beUAFi-',sW!ZP%o<'"m'B J\:/TN9q+44"5oV9amF-sZcP_*[U>$[b26Q$qUe*&`CkX,e#d&@trO%ZDN4B$Zj`= G*+HgQBuegcl$m%fBc):5kKg&\]gLpn=F!X)fYDU5EQA0,q@.)=s"eHJf=N4UY9i! .qJjM_6-Aqfbg)W.m<1Al[PON&$D("Rpo;I8[&PEKYei!;ZWpp71Vb`#Uep+,t.`n a$ll`MM?bkVT)i6AgG\=V\YI^^s6O(%K?2BE%r7rqM-9Vnua[pn@1Ip5AI]J@(p^l 0alV7Ze[7(.ZPk5p?WE+D/YFWXf2q?_SXLVO%dtq`af+dnj).$]Pee3>ZiH.>b>dg PYS5pa)Pc[/U+1rkj0iYjf9>p3]]_p2qo^P_Nfo#L\,TO4f$B9NGIn*uk,NO!S;kg 3a'T!sOho1S#G,3BaI#8b2L)hEBkSSi1GQb'"g6$V 8%h81humBOY5$DhB0%_hjig%W!).@0j7m;peTpe=%/G3_r>:/ACDu+/37(BaLlXrg [^t_o\V30^ZSJMU5M#6DVMO^K?m-ir0RE`Jn'8Tr\OMOr*/\-?go_hc\Pp=k4#:,h T&OC1mm3e*Dd$e*cZ.Yb@I-?&%U]6qU0k)h]H%c&aB&I*5$30j@A;`dob92R=/5n7 tQ3k?9A/e"BFr^L5#-CidK+5'P[N>j."^=J3;$U\.!\T8N8jh?YPlB\rMP/9`TW8r rBlOIKfMqp1sFDTm3J5pkQ"shTo6mAVQ"X[:^s@hY's'A\t!k,7nf.E)/@`pV=Q=- Jud\J_-5)h@TXb^*W'qg6sNMRBG1Fhq?\AA1b>?,X=*bb8q@Ee_g-RGDC;=GP4/*O 'B#LjV,U:;oU(F,_C$CrGu=KkdIG$7Baj"&>8<<\ci(]NT6Z+-b%*6MHY_Cr$T7d^ Pa>@[j:cQ2 bbUTXf+,!+uKO0I&C"J1?#RK(r[D-L]';X.u!GK7?@aX,,J! $OeP4$t!"^Rq,"30V6hQ9osTW -kCRGPXDk?cOOF)eXe>1QY=bV@WX0Ndr]SVl]_`c^U\8>0.f7cShqE=l\%3lnQMgk N.6KWRt@!PB^^#="iQI507LeS=PKf8m$+54Gng^f,M&Vpr.PdN4p#oi=CI2$p8T>W bO=pHqoH%P5A%B&$sosSZ,%h+-8_m&gWs:*1b5,J]2TB0=J7=r%W;n;F0E+5QhfO6 -(;.+-chLT+l_a8,GCGC@Pqem<'9=Gl/eb5+K+0gC%G34K,+6jUMrlLqrEbmpDaFn 8'Jf)paQ%["$&.FJ"@q4Ra$K4rr+TSkfdO7;VgX4ltDn;jh-7;+b_&Th\n(49>9(W d)9Ypm%o;poDFo6MFaT"K(nli'nq)8l\f/6,NQ)TYU3'eSk4=nn"Hu(`s%JI f,0lqLCe-^,Q&.qONE.rSs#gn[%76Z566H]1?j_=eg/WgJSjR]N(Y.8o5V-KAILT=0 jgtG'bpnfBD"/74Nn!:WgCarO2?0e:2.MJhd=Ym!@,RN M)Fn-:^3I"4=b9n41FR*0gE&ikLF077AU.jh7.0!(f_J-]cii"Rn@+&g80FMf? -d)">j&gfO6'Xn\PKUJfXM(SO*\Ic+Y#loSFsi$Hs-=ZfP7!>eGO"[!"/XN2O^'uY 53=c*f=%[aGIAlh.HS;@(Jk.(qbl"6,C:.Ai5TWSj':J`>=Rb'dE/i=0TTU .JnLTtXS'SEGr,ERqgAiSVHN!0$mm[+"EMT8aW<[e:4d.6!"?Q:^+KrS2Ed]G:d_! 8oU"9k8ai67qOMdJAbLQ8e7>S&;[67KtYN"8M\o8E&Er )/F"eNP1%Bb\Kbc?qB@Ogk)#oCe]#&W6@ap&OSXO%8S]n]K>>a,RHN21H)#!lnNXe 9%"fK2@_&>!PJI/:/>,gOUIO`I@/9.b9e%o*%)tUd.%a,J"o\+1"kMJ/UTC>`_5 8RK#$VQO$Gc*kH)dUJep@e3Wfd)[BA$`d%4H9Ca=4XgbUoDKc3QFb]^\B55Nef 5s,p@rHKtfCn68ObQ^.4&.q[5Sq-PG^&08O5Sh$dVfor(@DG[?lj.\7DtN'(;YOH, mqnU%GOCU/$KV57*3`bi9Vo/-V^+AqYg9SHmPW/RKf8CU29]P+:N?5>2WGP`In6o9 b_qRAE7j*%u.e!B`9s[rrDG/nMh[Wt?OA&hXd\jPY;d;i/4Y+Frqc!DgS&=r#EGHgd0;V&<S6,\*Nj[g.d12u\"L5@t#4khsY$+:T"QX(W? Mj51628d!GT4P(I]KW!41s%DX=`HK;d8,'HZG][3Hj0l2@(92EERe\;ni`SR`FdMn T`X-cK,kHjcEV.#mUniPt^4thh^lRKQ@0ll6/H*E=iV(VVHu7duW>I/#_(HnLo+]&\2!N LfjU0f-ba]U5-Y;'e<>BcRQn_Jfu\lZ_\3rr<3udQ_Pd"T>6&n6_,2)p:ekf)"qh/ mGG(Y#cKu.F`![3S;I]oJQ5Ir#F>XdneQ-+n-jdPfRtlnK1BNF!SuOp1\GRB2q9;$ "[AN;?dXHqEa)$"_mf;Z=ECkQ*l9[(436k0:&rhYUZs_^b)pAlt#WO)'9rMBqGZ[c 6!SYnLql9gV#[>)*h*F=_\j1AN7Z*Fo?#^q0Z8a@L&7bq-\IB0l>F(>CTQce[T\Qikp-`W-QDd]U i\bGf>KoC6S/>G%u+F.,.9nKBY8IM$B]pn.RJ\d]eD,?m6Dadr*''*4s0\9pi\bgi uMHIA`S]2.si_:FpFNP.Q/>tLl1shp6#@TK!YA)pjr<@Hl)<3_oQu&HGdRCQWLbgB #0YigrtKqOJ2RB%$p^04*X[JM!nq+0b3"i!I7LUtdo8!%,pa`'93 <&u1e9hgk^tK!bV:o]9P?]E@$QO(/_f-!`.)p9s9`TUZn3?WLn3=s_1B.=a2+sor\ /':Ko1lg$FAqHO7HAXpV0+sdnc"O+:C^1$ppX.R:=H:pH#@1&ji"'j,Qml7X]V\n. \JRG*<>#H=K7gk#>pU7RhA"H-?X\kR/;IGY=\fmGlIbrV8$^d#(0POOa[g8n<_)I0 #)<'3g\(#ZCPQ/MWqT[@6_WQ`Dd>F33UD=.$]0AC*gt'/9#jpGH^7LrX26T%1c56! .m[hcnLG<::@X@n9srMZ.VX'jY<=/TI@_@pp`3ZghF3TH_\UqT.BIK*Bd8DF#qqH>N+YOepk0?hS51Ro&.8%CGF :9o!cj/;)!:W>$PPtnLi:F`2qUfl9rp\P.J,C(^dAHpDJnfPj"*`Fo[?R1oDVLC9Y NPocrWp'6a.e("5eJ+WFQj]nC0'"A'r&BZpu`9IlRqcU2#9q ^MGin=RZAg$?JCVhD]KU#!UMM.g%$e09'iKIRiZ#2t+9&8TdLltpD`&kD#Jhr\eqG 2kU/9Oka9I-'>\AcDa^Q>=PDi:qF6/4WA]60XM=7`cmq,%Cd\Jpfd4j6](kmtA(J! ;J&#Ylqcfcm#s1n9e+/c[-auo:p1XM)2Lm:.j]GI:;)q)JMAmZ!3h)lFL$"C.SJ2/ #9\6OEn_e,D/5uT^RQ*+!sqRA/!oNS1Ro!;c]q*0*f:XaH3,F)-i3rnF'OR b>LN'4'nt&T'mf[f\#,Nk^9rD@:>DZ&[J?M#RHl:PiBt]Dhk_S,U]:--iW-Dm\ib\ "4k0+1'-7%k/eBq+KZ(*cm@k!VY5:<-$3&l],\gBNb^#QH<#/4)fLEe@%PWIT;lsm hK"#-c9#SYDDX!/8X[IBk;*JL &h4\p0X+VqorK?rrDOS^Pt9-N;ajq8CCRAe%aia]^_SeXfe0@*dG,a_-%O/Eb!Br, L`+Yq[\b%5OY2N!V.?1(@FJdI_rQ1%lB(o]LSd?><*f6V'`pZnC_%%#0(muPbbb8Y ihr5%WUfA)ZKfRFhT-rHc+aH*M8,b=fY[mJ$&L48S#+X%.d[nG8o>KT]Z[oF.[7YC [:GE?7""s@GlPe;>>.1f]p$o`O[!MX%=(?AW/#>CFLCur$VY^891U\j61:>rr@SO$ @flm4u/oI+5_E9gnOSN:0"a-:i80aGVOk6FSK_A4?JT,6fZ3]7IaUde>ks-/U1 r;H`fn*1PkFA">:&b3G7Wf%(^M8gfl_^45,(Bo5hI3q(0b=P_GP;+&gn3$0.6KV-- 3!suX@kU)@d1?Zmm$;::\Z?1O$DQhh\^Kc'mq7Qr$C?9]L/U;VJ9.XgbS81A!Q.FL .HkM^A/]nWrat7`ulJTQ\qt`FUnprOB^MX,KXRRW[tuE*J]RUc$@(j8#F"Wn-[Uhm 9V4c^:PZs.Rmu/(pCoCrr@\\^*`+`%HXG4_*<^omiuL6p:Af(%0.UUKR6L^i1+gNl Pnd6r#HI@"5pOFem9?k6(m+KF38.)[a_rc1>G4_Em.iO='g.3ETs*1!<.gb>c@Ijr q`f,rM_W0YC89T0:ko)f(t$'n&FGWg:o=`TD1MU"(rJ$rWDJc5F//Fc`Ys4#KP)r] S]>E(aK3DTQI>``r?&.FT.d"%oUfYn%K5*MSfAn7g;N,lB[Uf]\RNtPK_^F!&.Z:n gFV6qSgm"8+/1Pj7eT>26_nI"6\U&G91Pi$fV*cr#MgAVQ1m8Qge3`N[@"+[#J8Cj 8rPUq99em*e9H:MWc_.i:%fu_g^W>p`&7-?sXDfW`Va7IFlb,B-2g-IY`Hi"Y"\ C>@>2K&Npo$%n\44G$.S/`"p?EY1C*ZCZeB?qQTQUG(VdbG W7n?!7?A-#3C66_clp__&ph\6+f_N6CtbOA$lRe`$<7^3_9[AV&a"7)HVbHHr[&tfZ#IsVX[/6Ul-.-=k',sj Z_J!,<0+n/$..5i95[D[eF#fC_rPjZpbA"UNm,s`S8e<@C8ZhF3]$'&#'"'B+%MAr rBl%4uJ-rKPq=1EZ:]'3QJlloaEMa0[;[A)S[@X*IknR^'f<:rM2Q&j,Xj[C-%'HN E-muD027g4SF5.I*F*J#1LQtld'>BMngG(?dF9E3Rcrs\(.@^1:&EimcN4@,KFhYp ]n:1!.'.m'o,H]e,>JCJQ@%;>u'0!7]"em$j),&P'[49jm`9M$/g44,^kiQT5:[%? mSU5\K?NSH2cZMn5`nMh]KQ@l95pW:Z?4C2/)DeRQHB!=:b'b]a1Tb- iX/O-%=(p'u&/01#i)V'5@;tRiE2&Qh'@pXFu0f4GMp.%!bd>2dg0,jNn.qmH;WP< Jqn/%F':pq`e:2YJuW[6Ze%,oOR,-*4$aYMXl`SrXK>7Q@)!Wm71'[pjlop3a7/UP Bh.A#'a^=Noj9c(]k0VH-VEL!!SS]+n4O23mWZUrr=,)>/dCqja_&aBm3G"6qgn:j >m#M/k/VW]dNpmpc2ICrr@Xbr(,Qm.SH[A7fNJVID%RgQ2LRE0pGMfjlF;WG@R8h= 6n31(Gl$tV=89oT`'TB;rO@%4ta7WnHPpKfWDNiF^*%bqeDN?35Hl?+D,OW%VtUp: Rg`T^6&ZSQ7/p/>6o7=2CmWNX@YYCZ(MRk9%2nkf>P@;gK.DHo\!l;:p7]b^%.dkQ u[W@G4+)Df&lB,g,C'TQ:?hoJ6219orC:tDCoK!Y.c,bpjHO.WT%^J8;JH\h.'uS* 0(:d$00U/[VB\K "h61=!C(8iip.E(!&H\P;r=4LZ^oEBkeFnVqNuCLY05C7LAeSuQ"ZA5sc^ ]P]4C`9@T9dTH%=Wp\G]B1?DFruRA0j:uR_R=38YpbT2FB+tEQ+u7j3pYuOn46oH` [CTNHoiX3W'XZT.0pW7SCd@^UgG[Wa7E6buijnLa>OT+NrDH,o4+\<,!;7Mf? f>8)*'Q>r*Y[#qCRkY%lappWIr8@[BBDmD,uUNm.TeC@#EB'PfBKL:'pnn*4l?k'p \kKtj0+?s!V)534A#&R_Ud(>heH?oXY&m#U@&W7)E2,Ha=>,o:qLe+p]pd)Qp`%)O +a!Hh:/Nq#JMhMYNQMr$e(tCWdhi-r]Mg),`CW,D?7e"O;qd"TFV,&RK!9FhG;hn> kiU&cQ5WL'2r&bZu&$.\i/Cm\q1g^0dD(n`^5sK%AXSrh.uCB#_'aa*r(6Sb3QpY( "W@0Y(M%]^S jN&p*;Wag+1%=3&<#Ijm)c#gpfD2"3mQ_]XXgT72&P/*#j0I161(#Q$si!5Tt1(&5]*: Q./,&@]T+Ec!I']"PJ3;XobFr"`5O$SiRZRRU9p"!\hei4ms_p20=QKR[B*JD[cD_ ?BB=YBB?s>uc8RU1jD![W:8MG'X)fIl4=YbN:lTj[D1*T?Io7!,%AI:E6?PKAJTZY hSg)eH"NF-5XJoSDq8-rr@WjpbdFRrr<2Kn90GbC%0lY1>c8.B$oQ^*d\*NOR\9?? u\FQ\)=HEg3:IG"R1-aI])5,SNBcUMY>bInKm&fA!'-P@]VVC?O_JA^TkP)49bV)I a=-j>%R!6Nr2BsC5[57geBu0dHtM`cMh:Y!*^VQJ_,eX47J;a/:7ocRiN<^Y^M^2d c":[U'sZ5)#L6rM2:]M`U%?? O9MLGMmBW>\IFc]8'=Vf':]6E6Og1FFTg\DooiL/+g;@rKVIf1;YbY#E%P418PM=2 $Z5PGF[h2i]lp&*Bibl^-4g0_/4L"IB2jup(m-F_ V^,022B%e$9j#N/5(1=Ssucd>/8TZ]B,8&Es1@fbfn__'9g[dfDHGc:H*d-7$=L%` t+"`aW2X4_]E_@(%pI8A/"_c7LD^"fYGYmW6B%g_\^NDO0n,Z+F!N;VMDfChH!_>o#kGeaqo9qksH\#KN:jH+pUWJHb[Do8\[KI3WieS./B,$n!!!$*7oqQgWM/mg'BO#\QHkjON^dUiE[LZesBQ1LgS.[g >/'o'pNR.>M6t8f%66pBbD`INKY&C/21Yh9C\/T.^+LW7(sbJg'K7I'ApKG;Eu0$- KjWS8cZl9o="SN1Z/`L\.raA?8fqaOMd43Cn>EG(q1V,H4ED(V39GA\R:na*gl7Y' dL5pg-hBN.g+DJ4_^PXOD02!93(d`+A,H%X/_5%DU!/CP^eH/9f?8q/*f)rct3!fm 6D85C"_94G1k!'`Y>lanY%5:O+UocGls2Ld]M2,")OIS;,`K1F,h^>gF-L:(s+p&R K1R(<4'FC:S3i5o)jlP.#.]8GAA\di!,-JHOB!9`h9SJ_8fA%$1*uYVVlrh!+QE.V H]A$ZY!SF)gKXWhqN`3,%G6D$BpSi""0pOeL_bdC`DG183b'p6m>/%_8.-?"!N%Wl Okq]"HF^:(4EK7DZ(uP)1TJrO:$:!:rqiiD5U ,P2P!I_4KrmeK>J74^>N`QX/qG`eBS\;[kbQ7G2"!ghXC\FG.%c_UDcT(bt"aQrNP '/%k>AE,!"1`n$1Y:jKQAA0L%BZjGr7X,b?9iKml_$o?_TW`Srk#.9FMMK 0Tm0<7@N`-'ckCi3K]tpNqJ[-PoU#0-]b[3U'_1 8,9#Uc(LQ!K25CU.Ppj0:#!D6>W8Y5hP)&d<(c-pNH-NaWkYd%.6,li-.;RpZB&NX ?dPN4HZ-B@m!SGDf[EG+.m0'IM;h+gYHQ>;M6-*;tmi2IS\R4C%s'mg<[g#M4-qdI L9e]gYO=0I.LcSo>P7L*_\.B\XMK?,fFB:k@'N3N^sne24,%3gUqmq\aL:.?V%*!WN.O\,70CV#D0T?bk(ge%ZSR^PJubRBFF6[>[6"um^AGWbS)/cPgeG k;i\YCqB7B-dKWU&7:,R:.QPaW[2^Yp[,E(k;4ZoM`WU[(:Vs>b'ThM@4&V3#p9MP ^H0pGK9),5Zd_hi4f>.\q4S=NdZ?8)93\;&*(o^\,QF2K(5bXm:*um`h@URph&tgP K$\e:_HLrHe-_&"G'ot`e@DZ%KYS(7&,E,4p^Af37$HbNITlJRVHQJ?cT3e2"Op=n Olh`elKnRTuZ;/"4_iJGgk^Cn>`+5?4?/ioEf(HrB36ra9;''`4Sh'DRj8T,"T A!>drX*B/cKjISKfhG.nHVfV#)Ar*hMF)TfOS+eJMU]meQeDJ#V%h#Iq9#hn.,uX+ &DM)fB7AFfqh?AJ&,Rm"3%)8mV?LoOLPB1*cW?[*=?[%*QXlaT`,=HI/(D7^C^ac- 2]='nCO8k,B>ZoY+f;cK`cKgV\SUVg,e#%CVp4Y)$9l2k>?IZ&@()s)%S[e:J0M88 GQNglnTO.J3Q7_i8Yn"C7ZOI!.n;IZ41!c!kQ+TUhQW;)"TCi"T.*sikGmYaDL?%8 E()H+l#Z0:eks?j'T3Dn8uCH'qbC;O%QgK->>.2FehG?MSscdAlgNRnSk:FlX,JI) q1OiZF&D_0EY`2Oujb7ZiS5B$32q6(5]BpjV^q;i7B'E?sh_'rr>8^&'@AEbJI%,X mNQ"IT_GDT9XC7,ciY:o#!\-R%/BrblE/$rr<2j\Inhm?5PHrdWS4Fnm9d2,[X\2k48*RjVE\ROMr"m;IBRmeD.d&Ae]"\W\,IJ]e!!Vp^Lm' @DP0#j:>-onY]6>NOLaIhd?6nN6HYpj$`V!!O_EEHXHGTq)a.)MXT$WO9f?>AL-Y0 goS;0@062S,r]:2>*ND`GZ.?`Yj.siTV(Jg<$;16YE+O]?g`e`30RsM`qVqj%Yr!X lc6u&0maDb%raQ\Z[1V!.m`jKD%+LelfZKI7j+T,[eXHn8nDf^4h&T*0torProNV8Q,7?3U*&7Fgm47l^MSUX`*Q:=k#42ST_U@W R!_Re[>W#V"kn1d0M)ufoS,]$mpJ)f#2Pq\gMb+_.Bjt`uTk J(?:`I4$t/iOAs?J,/*n?;1uqdFjjpc%`(isq(/*u9*F_U<6!1R@&nH`OCc>.eAo; \;5C@-*V&o"uFcqlVq[i=Wm/Ogtbs+D:l<0DI-eT),AO)lgd[ok?:S25Jq^J0uEec ZV9T`kJ>>49jQVH:0A'dCB>C7?Ru3DWcjI75Y(nPQfAj2iDBddc[f6>Z6$tfb` M=9Rpjs$6r[-&WcllaWinS8>9S,i"nQ=Kk$DcU'YFP7B(0p.Y7Fe6a;V^&46<56A! 0R@EH/kE7mUuZO%pZJB[aoU6h9C!lRimS'GA.qa$E/aeAgDmA5pVNl,hKEf^T^f,' rks:C0G8crr@t_fj)NCMI5^[+./&7m!0>t5)c.pi)]jXr"Bm_#q,Wc48+$L]KNC]> 0LKr)L]]@[YN)9ce7_4Oq"R7A<1/YO%nDiQljo6"XA"rD,*Y?4Yd.8H/Zq;#^O5!<1@]p;1OX#5hh!A,q3Pl^`L5M^TBD=Vii2DP e1g0X%:Ku)0;TRR6H=Vcl=[l[h&dDF:kDJ$&rJ!OMQ4CA'! !@[)0o5181fNrbB,o%W62YNp(\gE-j8KC:WIZs<(YZ(;gR+>:InWquj)gp`mT^Th, mB@Sa$>'!F8/Q:nf7u%,Pt!U'4",t5N;U,`fcpFl@*V?4!/rNhLIh\J +t_KQLPu:ldP?Qt@ug6SVNq/]#.jfVG#gpM7nNK2Ism=2V=D!g\JbDI@ Sef5J3Q1Sg]%9K,ds*m\nKq>rLe9jRE@Y#cf-eP!)e%#8JcP@$\=MeEK&Kqinki-_ (dd)40d`$Ktk#"[<3HXm8\:';UKAm3SPK8f-+W(i,1i6ZcdZr`3'JqUCG#[k.CrZDs\))0 3?^W/H-.W+7U_2o_D+TGM8t6BlEYM,83!",IM]1GCM#X#pU,pf.&f[Quq6\,&ch5U p+N^B5`J*m4Xdh?DCR\6#-j<:TbR'&:HgQr_s]$LPhQE\L"0rj['bfam%"K5*"1I tle^[aT5da.cdg)`\!^H=t!r'tIoF6c$?Ui_+b,G[Ag?5Nr)IP6)O;`_I2NCj$Knr +tW3-._a0d:k<#GE/;BajD`:c_oTPdcrmUZ"@!YfJO$`FkhT;:R9YCkXZ>\P!-V"I qMg=%FZjlI5a^Fik06)A<,(mZk&o&N1>4GjB)7"=8P)D>+`Ub:Ph+INP%3A#[8<5= k4-Hqb,\o8J+RU]TNPrqIED-i,,!I>km2??j8qbYfGS=?h'peFM!@Z@kgHQfjIH$c NQT4CD,(WD#?X^bFeIH1;C`T\pkDc)VSH;bkkt.H61`'5T$*sdG>=0D8@tlQaK=a+ Hq@_[JM[`)pd7ti3ZBMbP&,qIN42q*Aa\1H2dlYCWV#2DI9kD5DA.\e$!NZDqUt?5 IV`MW?cn`=2_i_a9h,2!$N2jSq(j,4AZ:OYP]1NrrC$,pjWXLAtS'hPasR/)heCqh i-1Dp@e&Z>cb/]_%6Ya]&8%4W3=MXpaeYKmgAj!<;9DMrr^F!!P.Q3HS`d"5J\Mb6?Y/d V3_b:/k$peNOGoj,X!,e>j`'PU(\MorasjF8cZ/T%/>KS2s8W2W@2LY %tL>(u`06GU#WuCi0=GY\,qu3_OXc`k%g-+W'^Sj52ipBEPsHR^A!&)>ns1oUT_BQ I>%hr5OG`KfH!\Rn;r%h6W$%=^TLZF0/R5A@;29d%5P?uafe`dah7;EqRR;/9OD+2j(Y] jeVC:"^ZM*c5pRmm%s8rrBkH5N&/`%=B&_^Ys*lIOk1061J$4r\Sjd%=6K)enbu]m m=aK'K8(#/LF/7m\e?i7k2V/-`)9_61?PDG+@928&H`@akN[Z4(CKu]HdC^V;[n.M '&rT_+WTOc%>9!p;qMg.X\CQ4NNDMO1NF!X9VR;l8@RO5<=:1Dh>\@\,QG[VYhC[k 3u]DWH_(TE61#EAD2@QBdC3R&`$7*'G-$:`^$`[hDosJtOZ!_$fB/7 Vm4_cTtoV`/-C;E$.+qX7AH-=+u.?4"MIIpeS*J.W+ah6ZnuA]F_i?TFY\Cn4nn=g dN9RTkP(llp!=MEMubh!5K?@L\qi^_LbQ#r#D%je$hmZM30M4$=OP76H^MNko&i'l G1U)Jj//7h!V@eeCgT3-ZP$o`. X:lkhBe890*j-j/@srr>XkphTR4p ]9;[(B2o-))^:cpfC2$ebgBG7YaFC\@5AE8MG#$'`5Q$!8->%@_V&*._%G@E.E*Ho $?Yc(q'=BIqSgT#lan5i?<43rrC5;I^Si.q+_pj\(s64!V5FO(%9%@>0lPPX'T.:g V*TWH"SB9R$FM'pVS.VN.=Af(%-PY]G%'nHnk-g(7J!f$nJ40mu;0o_*1KS[m&re_ u:!]@2>X8+*`Ml7m9b8fq$1Q!@[cJ3rM5-f=htmp7I(G*0T(tT@nD*#Pa(=ZiMM4q KAbe7WeNP]VYF(TM-KR0KAa/OZXkcm/I';i-;sDq[GRE4p-E!em\Z%EltNTD8MeQ> <*hc^<3_.@FFU_/t``5jppY+F,1OJT>-PqD8%%01EF6Ng 6?('?/Kp=iudm=rrB2"BaeAO#3Hc`8Y1"rp&:0UZ656m(tp2o@F.5dJ+`%ge4BMrT .,QNa#WuoXIacLS\A1drrE"49X+Kj6b=0ipE0?`ks,>"9I-5d8]nJd:Mg%2.KZq1N 1;p91'9a#!dlq4G=>d1PJ)^ [M.9(C1-$4EBIsrr@$S1V")B5MYP8%srI)@.Kpk6_7&n[,_]_,iq=!W7* u+W#Zt97;Jt?_WdLbF4;C]rCQrinF?YfoC6.u (AeHrMO/9S,NaFq_bdomZq6rdRsR-LAq6@!D.:["bGB'nunppit8U.[1srYNWB(Z4 hK=i^U2gme,KEa7=Sq8W9(T+dB:,g--).3BE6rhf-f1DYGStG^Zae)pD\e!a8Z-He (T9J1kFUa]Hhr%dCb]BWD :2/Q*.Q-dg[aat8eB';;3J*m$b-'+ocK6E8cW;j9I52j^]T^Zq'rUF(hhdt6]M3P2G/*O5\',fYXn5?r@INmab:[Mk Vk?5h];^s55piCU]1hX mU(-.39iVUl(t5DT$.s++WF1/QZiWb[CUGWNTn3N\n9=YP9M1^c3t]])McIaO$RJm 5pWsHLpf,5Tb@Q!5V]ci0BoD5N&(n^VXhtp1MkISNQ2O0X/rIC$!$TX0"Y/FW-Z@\ KjnWU`b[Qfc5QMX*u,i!.n'q/C=bc.5L%lY?3Mq%Iq9HVB,$7_LAqh`s?%!p:i\Q;kbg(G9%-"ugrr@WRHq^p;( 74Q06aaJU/p0]BR.WK%SX@:R:rl5S=gu>gNcIDgfBB,g(b^[5aTH<^bI=+UqmN\Z5 N%+HEIZZZiXVrc'p`!MJ#GUjN%mkT`l_),R7SIL!W!&`m^MgepVHOk?_0KkL"uF[n 5^W^es^1KrNT"_8P!AAY+A>2hV#]uH]c9rKIi%g&\oDWYPJ-4o;hT)em1Mu[GM.hX s8kklPssud!)a1COe09(^(K:Lrr@XVB %')Vg0Mf'N"-(bgcrDoOV?h=0HG66H;Fk/0Dlhti>\=trX&DZ%;O&Rjp:lJj3%b#" _(oN=]OB$@e\U)LJulk:MTege+H/;nFicY?P\,P8-DIbV`5'FYOesSYP:-d;mEY.! .n^/P5aB0EN/`Z7#o\-A^&9#j'^1\J^&4:^dI.1?NZ@s&"q(I! -J5@#rTn%#5hcT[>tmBp010S0YE?h*!/>G/,(jnrrE'!K&Z\Mcp(pKa6^S2#Jcoon Q1T"U%%uk7D8Jfm`sZ[G21=f)%O8X&?Ob<@\]IFi5Vm;*Ta=0O1GgIB:RIpH52\@T X^W;P'h*;*!5(hD9&/nB+tCDAcD`5YQ"TTML5a"Y>+e9n:0J@L6LQ1#'bVi]!p4;F /nP'q(pi\o52npABUokk(YO>$32lNr8m*04Pi"'/IVdRi"70%:,QYrn1qjSI4.o W.j]rrBl-4ppVj&Uk\s6MPKh/&Bs-Mk\L'k2P,oN2-ecUPX9=&..V]a#32-rr<4ur KSMV1trm34o@)p)T'\kAR0$u:!p8I7U-t6qj[Y^jbPnA/,;o37+1"-AQUNpT&='\6 pNhoK6-]JEQRHJlf#N0c'`&WaV=VQ5d;f>.Z>c`#L!m$1Xi`3IoVS[_.u8I%6!r_d _&fSHbo\&eMP3iVR=.O7"6j4/;QUGiO:E>3Q]6fjnh8l_/qnSDqT&*fDI/ha2U'LF k,UOR]W^b^6q.GL!4EgOGVps;)<&77@i6tC\ctMcH=/P4)H^SQJOa0_>m]fSEC5=; oq$6$QVH&e&3"G)d&!U/0?4ono9V4k(#[u5Cn=RM%r(?H9pXjVa]TO[cBI7uT1 9>!e=T."gRf6N/Zop'=Q"AIn`p(l;DRkHIHiq.fJN2sof_A6-I'C'.,AcjZ[#IVma QTD/#OnAslQbB7r"bXmSJGcA(s#_\" 3KV(G^L0tZrp$R+c/AKTu[.`5TeH6^q]Xm5J^-HrrBGs`N<(un&:=gkScCKeh,DG#Wg*D#@uYA2HLi3L,'cFr3(='!^44FB'!dr\S#HST?W6ic8;F ^`AU?ch=&.mgJFHs16_*/7k0dAUM8&]Z/-i:bJ3

    >5; t.a+InN#q<.FZmn*KYJI`-[rZM8M2MngAXnM/L%][?AR5?ij)eS!3r"=QP\1@7/OE )14]m!Ja4#87$\?P%T$CSQ8^nQ^PMFh\CMnA?imMWKTLhXeof)h"1;-[;L2Y')=5! L/[%?d0%6SZSI)CKR:KKp\UQM95Y2YQf0h2/__W[TR/3_SFTW,=oeQ'r rD$R^TnMW9le"U8&Fg?:$eM,#T/Uk;p1eAP@"oHp\kPsq_;da!:Wr>,N>kYj1Ck3_ NoW^\a\/Ag-1R=HSS@EUko"J+b(mCJ"IS@MYncWiOY.^CRNa=3:e+0H\:)BXWk2.g ?(t5?C>tai;6=UoW<99!!aMC`kN)_&ZT#K?Q(c%B=Y=:#aY3[]!Z-^Ks3de(roH.H gtIerr@[KiR"Ct6tRcE,-']GQcslk39>=T4_dWK6RnG`+JdAQbtC#YLWV(4FE9d/lU`gGJs1?"Vg"E`?`" S1D0NFD;tXGWj,>L2l6!1!,B?ljU6*@M$U:Y@86\kg3#pagp]f4!U<3:tHVmcVJ+\ VrH9pD7"]j3K/%]=>s([J`n.a#icYWKm&GpUU:;[J[.Ubke`drrDs3O7lD_e>Es:e p[uV@Y>u#rJLA"O9s)2_)uAW=7nj(2jd6TqbSm+W9@;IbGK\9!_poUbn8'=R0Gk<^ -AFu1b%Lih#Ra3:Oc(q0Yr^>!<3$^l)rntqe8$%rPu'\r;-C,Sni6H$23c"5 DO-&rBICa4b%W>E-ER_pST"1qL;8iKiFt:-IH[\&Gu/=r4]PRiLTte]3o(qrq:?dh l#F-&k">%h]H7AfoKD.piOQi!)-s5F#nk5kK;iR&,s=n8knZJZm.B84Orc)J+^F"d k]#pXkE^S88S),d!C+gI;,`,QRd!,G*qn"#lalbgHZhnGRMZTrX+p<\\rN'>(W7c% W,%4fA"pp$ZL9hSANq?O42_8]mMWp)n8iG$C,XB%HW(Tl2f0i"70fnqe%pm\6;m/L A,nVlijTujpd>8+&?VOS'?Au6GMc3G56FD+5u\`;Cd$'RrVeF3LJik3;!3BNC6rUq [$'c/Yn#[QY(a>*hSE"0)6I`5BbRd/r/t0*P^=mpjNnX+UDQJR-h=Y2Fn?V4(nEaV =PU,%l_ZgH1KF]na#uLPup`kfp1VCq_<]u7!-_!rr@T4)#*qWmjj,iGX'X%n$4i!UiVRG!W:MnF6E'TTC1LWIEs7Oc#&k25BZ[JgPUU,KC4d"! <%6*4>)2t8M5>fU1P8B!.)5gaBi.1i5WpR?p'X)39NK9oUl\Di%0d,L8gE_k(kX:@ lUEu5Q:_8h=q6Kfmeb1Vo&H6%X(KKu6Z_2dq8+>@-b JLg0A]/hPrrB?DGiHFlrLgp`ZsNes,(IF'rZ?Mfn@l*c]gKZ.*7Ki_AGB4!3MMk^O ]BgfN&1C[!V1luoG.1/@g.OhMqK"X3.*U"+7pDAY!k4Mi\GD\<_Il8!EG+ 0-LQE-M3oS)@Z@V>D]d'>pHJa2Dm+pt*G"hD_^hVmNaR'AH`k[eY*PNW;.3pTMd?! $'`f%u5'I/fmB$Cp(B?gao7nCjOYsJG_/LnZJ2Khm4K<;752a4<3B/d^id"Lp^%G> DjkolV_DD+nFK,jNF1\OE[U;n*TH5 rsQ&V:6Td498]!VeRCMLT//0_F&8SF3.kPWVgE2e(VofHE^UA-Z^91OVZXsA;us/m b'&oHY1#r'E/H"n?pTXL@K\Y`NKq4gN[Q#WFg6f-!rK5q;+Y^*poBk8LJ]^Jdukt@ Gsk$TAgWM*2'NW.c>Np0434A_`:q-rJ.Ie7GdY2$%`=C\,$[N!Vomu!!Jnn!/#JX& cVh7"9"#Q$1W)r-cH#b)0gX/nNtPQqIZ4*@.pjN;`%l49af$.$44ls>DuY5ej&Y<- c+F^G.m[EnJZLjOdg2N!;6S(#P5,orr@[Z-b,NB#f#lG44pE^BJ25FMRgnY(UDt[5 Xl5FB"pY0ifN.tFpr66DtD\55G(0p_u9p=i"+L:pom3b_UjcGQ>,;pA@f7EoqIXD(p_ #Sp*%u+9Fm9af*P<<$P`XP::Li"VNo0>;0j[gN3FmD:0:&b1tSpnpUBZbJ$MWSqKh tX1Hao"2@lX)1B!5W;4i.YMAIpgUUDo9:Fp]km#O6p0/)!O'jg?Q9!\'VOjeA=4#) j@PH5n#dO/,*@CVe-C#kAhBf+5uNm$3("A_gVoAM*J3j[B(/W5qRkNFF?`O@kL$U\ .XpSF-7)b7ni&q3)(Xs%:/q"Xt=MRT't[7Oj+;N_u::lJ>%jPH-\jM_\G&Lr#2F/0 X-aXn&7h=pDA.Xi03u.C\0^*R\J!aNA[i[q`@rth"2]#;u(LZ?FcK$M3Q0Q[R!D[$ SU\_I4,3e&,%j[!.lAA0)_LD!8sn"[+E-4*pW_Z[d\LW>>7the8N(Q(?03aF -fiKN!t-nS<70!O8(SRp0*J9`p\d?Pi>#W>BRRK%G%W[_4CXr^n:+$rrCdI;_si&L pVRKi#aAI7T&8F]8??D$Brr&q0n'pnL+'K6#XO(rrDAX&&h?>/!p/F48+1&L4A-Rh \&+&HleX6'V6K;`LKh?UA%s'^U,dRWgK)!3+ToJ:IEBQBC('H!!^u&c6!t>AZpmG1 %Fl5:]B#:?@cmlh'@FqSd.Tu$e$_N"W"YQ"U\Zb@,<'#3@jh]"C3fEB]O3 @%J1c2LZ1?*C`:!:tcdG2Mdb$e[+]@=NpVhX^43;Sj$lFc1-cZ]*69aliX4=oF[]W [@`GM?7dL8F^QB)ufmZ`XR<(j)=]:(W%1#rX4SA5M>bSq!Keig@rM\r(el!?BO^1p ,=I$/d^C>J[6eq*S(&4pFi(p_p-2A7r%f$inqUgRh,9RBAn?$;c.28](gDpUmj7Z& CU#BiX1j))9Pj!el[$[3_O 2n)H);97srYi>sm-^]QA[/t^Kq&PV.=4+=#JLM;%IrEg&Dd*cpHs\u:&b3H2*=HAX 'Al6;1&8?[]Ks97JoV.,:_c%\_s'RXSbH5r7rDeI5n6TVTmL`3CYE9Giu'mF2^5YG J4bU"oM_?XQeP9l4OKljqofopj.n3_A^>QTTVZ53q]NrBOX%=_P6m $!g6Ac$;5bROjY62j4r,JWgK5/1Lp#OV?V2(X8[jS4M,mU:gdq;f"J[pZ1!N-j1Ln SkTFb?A.F]&r+BU7@fa!:W./k6(V;qp5Mo.n_B_A8uZ&+)/jo_"%IhVm5Vd)p$_;\ P.Kc-uUh[e:Yl`T]?^BYL]GChT0QlF\-F(AUO#%4HZ7'r(".^EISZWIqZq&1)[r\V&"N!i`I)e6o2PE"=Fo8IkY_PE2pA1Z/)Io2N5-^Y/].q1(-OO5Emkj88W;lmMqjOrJUI/ro2!8b*r`o"3hPD dNAkU"X]Kn2OX^!jpDJo0NBV*.Pb=UI6[gDnRGi_G?T3ja_OS!.b(LGM\`=CEPO@: 6?JX8bRmX"M!_'pW(VQTFZ`o4sFZh"TJIRQsXVM0YY!EFKIW-]5+I*QLa$d9q$UVh (bK+XaT5BX4uF^>M[mbKDO>r>OCrX,VNc,H\TZM91>2 R\`Iq5>hL(d&m;RepF>8\?R">0:%i6V5$;Cb7>D1uNiP?I'C+8GPe%obbIL9teGmO NIKo\',XJa9+EI5>AnP+Li4c2qV'P(2supj1DX=,FjSCg-7)`nF,Lb6+7JmGIfkPeJQO+6fY1hI,&SE-EJn8B9TMk 4Y^]ZYO@UO6:ejE_/iS1%GQXS9,jjle[.U;Z3OV70rnnK#)oZqFS8X2.t8u:N0`#j dpTsmDD!0d0J!VEdi#K"P;7@W'o5!GfDSJhBV.Il\pnGt%.[m6;`O%?hOkA!Reb9&rOBL]E-3s`q_7qbJiM/Hc "FT6Z#i>e&OX$(-$O29)GPa#!0BJIkP!QuiR,e$m+(XAl;>i'W0]pDh#ccbceJ..D A-]#_`?EU1]d57]FV[.Ws_lX0%BQ+".uP7`-[ANho8Y*cJrG-$Y9S*<]rG:j):cAq l>2#^+ln+dsf@71jj55hW&)$I@TNg*N/smZA$?A7X4uaI 0M#oZRa0SV6F;Q7mP#^ES#)J\'Wai#Q,SEkHFds#KBE91:2n>pjLYPUjm,E#(9#_I I$/4rO0@D^*]!\IqJ//_b@lQFOB?&AgAcdPssj8!18q:-nnVl!Qk,?rXK_=O/dS)r r@X]lM[ZbcTC 5F50aWa?rislE^*`2aLN_^DOIfRK1I8m@u=^tD1!.uRnnn?.SU-8j&!.k8 SfV-7iqGk(tDd(H(UT\(sWBk^;eR8i7[Q'95irG`buX9(>c@]eimJ__&J]q%AU2_P 'c5Hlp'F;>'KliT=-]FJbEI-\G2O+Lrd_tAXe`X[m$<`l+W^",VX$h7@iKJ!QQO;5 :&Efrr<8QGWS@`G,)##Ihqrr/]ODu292$:D3'l@6mO9lgc-8`KH>HkJ:GB`rrCu;2 Li3fm,=mflbn67eFXW[p%uuNg"TZG3e;2mN&bT^-S:;8*"G-tpM8bJOZjlQq,@P]1 ?U7<5ItV)GQ&'#nD2]L^Yka9dG2b`k4,mj+WI^h2;=C79^O$S4F9p)!/"eJ%-,J)X /l6k]4k<6j0)#N=3DLXr"5[bJ)I7dn%acBH`/inU3J:T(:s@,To>Ve +7_BnZUi\iLE@PE(_4eL?[nd_S-`2r$s=jn6M*23ibK,-2:bSB#HV\''7l!mH/'PT FV=TJ)K'U(W>$P^V9K6WPn\f5:gJKX8rP.P._<:HsH[OK6J!GqKA)c47O@`Vn(>p/ BY\`'PXjE!kT)XSYIPQlh*ofBlaKGUdSjIO>]He'R`B%7?^K,<5"&iR42E [:sPlp/nFJ3OU[i2M4q97*<+-f;h6"8KK(nI0jjYeKX,>".?fEa*sVaUEb[a7`g:QJqNt1FFGRGNdVg8SKhaT+d%WYKQk[]Rf1'@)U@V%d R+BqW;04'!PRGR;&@/6*KV<14,j,IEF73Cm,KX[rk^i6Q6dKGn1o[CJ+PPKl>-3!:BHJ&(N.EZZa%.,X#'LM$^>5dM]!mm%sWrrBlR]KHdcr r?b?fcS+Xe)%oXY5$P@H^e^XF'CEdPo:ti*Ejb,1Vc!faWI4BjK.H%1J&W&SW><_A G_luis5JtLZ93<'2,\/>`qOpUNpHoq?."C\nA!/m!::e>cTYs'O2$n>"PUY1ahe!=G;=0TGs^M3S[% p[68Nrj\Me$UW]B`?QAX.+pmqIG.p1'-GH_S7un@R#iZ[NC)b2Z.mMIq"P(R`l51r)Ild\*(j3N`@Bj+U9/T1`=1"3:C?s.CmZghV^X`"#%A Pd4DiJotj?4$W3"eO4kD/K.llP&TM?5U$<9r,#H 18jZLVuCcZjf@ST^0\b5TucMmn>-ZAAaqeLRYpg^%5* tnPjr%,PNI$P`DrDr5dD'J]91UkH]D%]IB"F(*&0&ujST_]JFT+sS)D[^?'dWe^LD o5ji>Kin_ho1d>ZXRm6@sAf9o9R30*jbt1+1#m@DYu*d!!SAWrr=(X_FSS:$QJ.k` !"?k?@)aUK?eL`@_U#!AO)\Q"g7_=[K*O?_Zrr\=AS[-u].`ae"`L].q@Hp56km NM*'RQ\U@=&sKh$Srrj.Ge%l"G;ESV,R>C4?*.Dr':4>^)cNhZe*1RJsP7'ehm/ud %],S*Hu^U@:2$Mj-EZS5q,#Hh6h2b8]Uo1.smHM'^5>;iV`$&^Y1V8^Pi'u_=/CCN X$JEhB1:MI*b/LPm66$Fo/T*8sF!WL!74K?E_B/1tTM O:j?g%,Cb"0DQPWlHmNC%AP26&J*>N03ZilX.\nMCaEf&:@G$_ZeWa5WoAkL"7dKR b.6Yrr@Y$Get:CpuVBCHG4qbG]7LXIQ[ ]'Q8*!ZL1g,>N-:-"sPI`HYach?,g20TUk9t-.iQ37[(qbjC@n 7.u3c$renl5sW(>@0>6MXB)Ug&D%NPJGNDJa&'k:qpLV:&Af*(5gq!Gs$GM#`i:\a DCb3.6-dTGH^;k*tS=Hm\$hT26=,Up6fGXTaMo4j.dTQIh,]_Gh*n]fiikKD(s'c, RLa*+'a:4n!]8BIVZANEc)[)AJWq-1?Y@o]49qcJ`j^-?O1S,D=9.99.2\;H$RRgo GR,,*.NIpR<.?O^Z4>5l4<8!eWSc3%ODAV2?ltHIkV/RZtu#1@!-t,*6bKD[f_67o H2"5SnTd(9^kN_I?Ro/@,jIbo/85\EYir!l5QrEoVTI`3=Wl27=B)#oS%bC*n"(/$ tWEaB8aL]u!+(;u&m[r8;mircm9I?;X #,NB>]naj,FiTk^cn$[VYImJiW4+GCs_H8#i=%UcPb%3j.(2&\Dj_'LDArOeTD$qN PVr?^H4>7j87Xt*QL!riV(B5GlZC'@qInkRH`>kGL-#nTFR;`nQ1KY]Ug'haQ/5!A =U4G0P"S\7iCR#pj12!EUOMgMIK>>PI8Dp'MC&n&k_ E+Fk!5loC[;E%Ae:,s-CX4UMfE17&`=raM53U*GpO/oqEfc^>m%KS_)WED'H%V,[^ 7>W*lX-4?Zf\5BIb0#d^=.!0e\mp+7YH>/E=1Q\ ;iojXS-ZLrSnMNaSu2>-]d]elTcIY=#!l`S(jDlXn;+15`BXeM_'KItt2Uh!nB?`(4=or J*3A>"[(Y5#=LSf.5LGil=>M+$G)#g.%:)J&,NBB*?`D/UM'f0,&bkIlIQbk0V=U0 DT8`/\!(rQ5J]7eiHLK;Hnm:D:P/;'&-oa'V3F.EXl(B*.$5QT,E$%*jP_F"fh>0W 9Z@1;VLA!%Ik1(NT8k-+T\[dnf]7_)p0f2'@:sFq\;:F:EHtgSD"EHi84rg_RbB,k FRIj,l[iNj6?[#L),_S+WR6Gk"h?*J9p8Q\_rNTBaq!q$Nf`?:RGC:&Riu?rr@Dqp Dd6Y4tA`.44l@uo/:L&+#J@T3:+P6NoQb5A)_NWPZkCsIq=;*s1\5qCl$b0Z1 kJcX d`Uqp(_9MEok$^&'Tg7KDk9,q>il(Cg^dRLfk^k`YRK\5J*NEhWD>AnOXA7>PXSGV RSg+],UqoEh0T HdYR2^bU)!-eV;H@]Fl+7OA0RRdAX"OZaeCElBj=Rc-CZ]L."PUDN"1P+dtIP8[^_ jcH[eET`-P/7\qW'.]YaToB:l1s*6!!b*#Jj"J[$'jM\Cj%XF`**8T.F(N7,1"X!W 9r#`5Fh*X$Qfu?19J"I6'=$Th]DIBl\]*>Uui>G/pu/bA9"2(33G$WpRWbo6,g_S% o0"5I:gm0]K%K3U.CG',b(/L(cte>aisf_rLY&_LUC1&G=r]+rp>+grr<28ZkjhR; pU#WggP9a$[*d:in!W!!&7hB p[g`/pD.;&B_q(rQs>$kstHA6ZXel2[>H+LDr&L!8"Em&)7!AT?!QCJ&+B6"mLLX4 :0t@'2e8nM&T@^hNOaNo%dI6f1&c$FLQ9X)^c+lI(7)WPJI,a[J5sUL>u1?Aag4^O pQE(^PcY6$[!pq>4^&X#(Sk7i`+ud37l%KnnFF::\VVEeabs&&7[C5Q0J94LY:4lg$$=2HQUJGSB988SY6fg3-1DL-Wi(s[BMbC?,. J[22ERW[sqH(ScR[h_(!!T%c@^o4?[t.R?RlDd2+^`<_f"LM/j%mVbA0eh_CSD[#5 %6t?UiW0J&_=Z7nF+D)M@KRc"\eG+R]h9aqqYjY*8=b$Xm0,eV3tjE0UuZ6:_[Oa2 GXC)5>"$E0:/D&ep)SK!^4"6C8]#>Nus-W^bGcgDHaL8j(Z\dT@1C,iTJ/Z!/OJI2 VOdSoLhhc+]l/p,4cd$m_3%laVc?4N;b^+Vu.:I`8;/U)?.eTQ\g)OnLF&\2!mchB WRrW+gmQKr2/5)raE0mnd]Y)*d@Va#>!W,^TscSW3/sBEd7*dhfr':q\@Bd4-J?"* Of[hIQUtOP==DV)d's56`J*VPrNWiA145F$:Np>ti?(<6mX96)iCAOh_;M?], B)P2:^8NN!!_IdYCaN$rr@q*)itRd9)+II:8`$dNcHFG4SIPqouB]''V=EK2i^GeM Z!&F!.lglD;d^9TZMk6I_*LNPE2,A"Q#hk.a;#<\F8E2B4CnjL>-h?G7N]!.t)]& mg%,^)Xb8Wgu5k\kLkbNObE)qK;]sf@_'9rcOd1OHLLfcecqWdGM^iJ1OjZLfg%:" t>B/SqAoi0DlI;9g/RW!.pJbg6OFWM*H<89Sn67@.PPtlG]M:?pn1FboT,6-(;=pAY-cf80G,_*9e&^\s'S%^iVo+Zq,\*Yd^b=@2QN` Hqt+p?gV&fT&I,O7UTrHl(`N%=C29!!a6`pJ\H0O[k5A)I(rl'7mMI/;72Mr\?\Fq ps(j,9WVDH?pM)UW#9!3_0)a-I1t^C%&bXaG#Jk$q*lO;Ta23 YU748c\ItgV6@=`P8[u`ENd]jGNQGHA0"^[foqN+0Vk_nh9b^rh"PqrrDg@GJYpMk #j$t9$k;i-h.&]8C@(U#D:$3ftV4d-J!VOGh1=B'qM8M0;3&`m`7MGb*2:SCVp)Oi /KeYGG"A#cN;4*pYe'8a9*&1[ge?nHl<"]ZJsm+HZ4ceETQQB:Yc95orj"_DBB;#V u.:qp0ZFYo-i,UXKUQB5p6W@aUU3NQ+4gnaS*l,j*,GoDNWmUYXo^?#=%+i&nEa0TmhS-X!#;tup6 )T1]rr=YD2t;C5^UsehQ 2Iq8179_DBjUn_C.A!2EMJdKhO9G=6hM2m/C!/Z]=F5%1'o*YaMR<]m:SE(1]?`_] =?nb!SgE0kb>O47.5b.>$\4K(EO-a?SdH#7=\A% q">\5TSA20Y9(oZ"\rc]1(*&JA^%:o<@rW8DZ/ATpc+HFL/VRUu4$2o3`WTkBQEE) Ypj5nBG ,(ee82'D7A%9"X@>.VQ`"h%]*Hn$K^5Rid1J7$TPK:4Pm2%$,1?<'cofYV?*gQ;?_ qu#-hJ/W%ddA`j'nhm97jZYS(1[&c#8t;dOc[!=H="8\XioI)ZrXY:+"[:\rS]m:V n0+nkFj^5gIpSjTsL'Y7ba_(XDS,geLUB`*eTPU\`TsW*tTMjZ&VOUV,b$7Cp8A!# F,Gc39P;K`HeA@r(:>6[r%mrUmG"uZ:/[[%N2']2\dEZWe,K\.rOYKHWc"i>KXF*! 5etJ;D9eO",r:.5TR?3-<"gio:PCmJXQ?bY&X7Y7QVZ+#lJY]k#nfiA[I;Oh8WQ>$ ^U,9Sknk`j3FOCOkRtK$](,u4-,e[m!\iI)TgS'd:oIn'EHZ%D9mNaQe=QU!^Mi;0$J:HKEnXpB]Gf"`:" &=+Eb"(0?iL)[lHacZ\r&f:)2]ar<+V%7(VbsikE35_Ala&ad)Y4CW>AZ:R7gq-gZ 3C]DRE(qq04BWq#C]IrD@q>qI\'=JN<,_TN]\49>%`\c-'6) Y,ArP0/ql?/s'k@3uNYGBW%X+2WOiW;L"L/_1&c*ho[37QdG9Sd5GnI63'g-\&sW2 5iAcpa$0(50W6X08[&+!sD2XWC3i3%jrn=51T+G3mY5&?@_RM9"/'Y-NCQC#R<7)'k?>R7U69I "ZT<-j%0Mk*p`WW.c?IT,>UG_H54$n4WK\rX+YS6gg+"9O!_$b@,X2jr`9n:&Y[Q= j@&[NCa52q*npaDd$b*&s#HXl%G3bX%?cANmPL*s!V$MX`DT_]bE=MiFI*CVr?UKd95T.k+%j)ukWa1>o6:*EmnB3>rIMUDpQlQK)m*1=SRe)U8.EIWIk4[J^DJUIL Z%?QSn#CTddFBMJ($K6Rd;rr@jkRNa^jnnamq8^ALDpr7A^Rm&0i@C4Ia@!7aVBW%*^^ ]g)+JbU/^!ri7QN:5lWrr?T5JI=>u\h:W7bp;^X>r$4=a7llh.fB1qj$_C5$q#+m/ -MR)Sk%s/*1iXt8Z"n\C(dj4;An)>+7+RRk-BA7."fR%7hUMX[.o6*e-rf(moqt#f "\NMb/D6>1)QS)#j['->gC$+WT"@6lLhLW]epaM$tSfiBEN!095FA[m_BY.AGUcE= 7dm;%JZ"%IP(MMIN7TU::$fjXBJbX4f!9me&L\6OO<56n^A6Nn]rSJEGEn]%6S3MN o1(iN;gWm!:WO/(OTcg4V,JE4se8.=Z'@Crm%pXZY,\+>Ae=)h@<0\NL7SSjCWp+n c&T@G^-Den;$CHisdiNg>7)'6X<;$Uu:$VNr%]];?"r6UT_E(%i&=+C%8-8em!*n_ +?UMRJrbXn5nNa_%2E1+2;XuIN>>G[I8m"/,1cq?"mB3+OQ-l;r7>VXQF37W^k:+" 1Stn$N2$n5A!]O*[nG.n@8Fp]PF4aAS#^u%\mUom3OCX!8r\\Q[QIqZ":c*UTSPa" 0DM&K&??QrY!!@-^M@1`BUYNI5^c4?5P6ZSpQq&>J_i$_O=GTZBA>,_]GCQfB"[`( *E6&pn@1!p*%t6FlM;>?PC.(6_WC?/aeh(V4F`IE60Mbm[7qPO!ZRBY]:47"3l6gr r<2Apj)D);>lIO"0)2mpueSk7p")H^:$i47r77Lc5.?hIaI"0_%_S3_^$l\SnJ5la S(PFb@.li/!!q:a?B`eho!4u>*"MsjQsJJ%tUiqM[PY#Pp5YOHXh;J.LA7PnuJd/Sm_A1UY5J?q+qU5ASRRJ&6@*/UTn6, ]sK?T\QQ53#N$o:T"rh*t:GD:Pt_^nB]GQG+?dY2NY4/PM*7]GD1$(0APD`A[:,cT1lK?eHZ*nRe;W^ +]97nWNAWhXa%3g=a*!6=GR=*B41DTFWdPl(sFOrrBlJ^)6,o1DDmZKPp1/OuOu,N -3$aCTcaiQXR*kgn%?hbjPV ."HB#O+9mK67UN>3`\RA+L8T)=ttlbQf4b-?D5mhI0jcg>51Ve$ D"1eTmkKuZ\A%?Kse#5Ra\m(3+Rig#\S>+'l\0ZCYpsEJ9SSJSLq7q`:&RBAVgV:o n\6NE]/NRNnr#=q9/d<"`F9so\Y;9)86P_GRMH=,h,W1*Hh9?WSHeXUYieSc*>u9R Idi[#sM4?/WBFs&(_g;kqrcMFK&c\;(+GY`1_J&[K.KDl.'i8<4;=1ss;h\874l?:X4j,t@B'M/YQ:kB[CG)Z?lDu_,8`I8hp-j%]+DM#\KppB%ZeK2?2joB'7iEM!b([.s=Pl"pi&Z1upEg<))R2&J=5hlVB"dp@I)V t/b(c"5+l0k##^m4Y+)I-5MK+cfh+CHNT2hr=*YjG?DbK5G HdCem-VNl[<0;OnPA9ma@H*H:[[D*UHIJpV#Vj+i_aT2Dj4ih"A`mq%H-94)=%.XO $T5L0"#8c`:,=eZ@/jaa!'([[5e&]ppU2&FH6%=>EU5AeLk>E>['tM8T,ln)f[t@O 5_8p&#U.X:7`s?;dncmMoO!'6:cZR(>(Vtrm,*#XT3*"T\^eZZPP,*6\;dFJ\"4=S ;urUo+&8pQ#!k=N`bbJMAS`5JT$Qd7W:9_EUk/c)(r%#dFQW?[RZ)0Lb;lli^*rZ# gNM^%t*OXXF3Q]eg+IXKGKbTN(&QTM0%4QH3;e%nsTR7I9aTMb1?HL`^H-P,$GLT' SDJ?^H,r>bJu-dcAM>E0(kXfJqkl4Ed#[ShDF;jCpn=OTXQN;%iYdY.fE4XQDufId2L9K2>b@%*1&,PCpPG5-plFDD( JE7$\,Od3DJk^\(`,3$7E5CM)>htE8c*PIqa038P=P,WLMpSiYgBNkkJS"UMN]ui$ :bM*l8P\]=c&4h")\.]^^"r=R,Eir!)FFIlSYb]ZT+')>EB/$_'^**[Ta. _/fDi:gK8k8>"1p2'a/Jq@A-9Pll.^Du4;e$[CK%qR7J&^M-L@O.#Ka8mbG&^J6h" FtnBW*fM/4YH>$N]?I"^:/l5aq($#*3q5*7mZgmFI$+4^7D0fdm9BSLbb9+Qs70BG 0a%O??N=73fWmR*A:0'@Vh7R^6Uu>@#jQp`)u2nbIG#G.8fD:A/G7Gg='<^a8WY5O NR,bWWpk3PQT)=LXZY2kVT@8-^H>G=V?!T8N4d/\i3L8Y!5e&F'fOJ>3b]Rdkm%nC M(/H6().,8s(9Z8e.\ASE#bdC4GT\,)Ruil-c,^4I6%:)gWq\!mCOV?4%N5BAHAN8aTL>prrA$an I;#"PYjd_W.J5]Z<5n`8;3j8\6f?(aMA_hJ^%d+!5_rUXhq9?>;TN8_n,!_I/#e3l m-'D'k.^#:^4%nUpg!6(gtgjK'2:fcL&skGSn^\fQ#KI26RQaF+%JncTR5-l5)0k\ XF=W&?%/Wa)(Q^&`5Idr+Gf\iLb]\4p_/gKW=jFLW91]k*P0uD'"oIFV8ep5C^@[C16XhRS]Ef#[PBb(E-DnS-j-Et]MU;fWgTuR8 bR>\2jC@]]D7s2c^16<..-tK4XII#Z)tm4a;8NNm ,g0rF8*/($#U&4NtlhblSkB2[mqCp'.V#T?9'u-kHQ+g!(d3qBuR4'>jk\K'?#gk( */klYl!5JYFbaoi3msN[\<^$"IdmFU[<'\SJW3[aNsR3&:T967XJ4H5)?'b,ZsIY[ 8<\H.KZd8j)ak/`rqEK=+L;N_.UD4rK7*["K1c*W6>1(W;*8WNb@-*b)tS[6D/9.b ]AXAr%X31dGh*^1T;!%gq?/`i)aQo0os2\XrE+7+,lLkVn[-"_e;o[Sg]Z@iM?QM4iA\oG![J!XR1$S)X@]&pqt?#`)K5!@j-ag3=COu?k!kK&!IddhX r%'DdB,oWq[n'!_^)O9R@V"'&.b/]+&Q8bm>LiuBU9eCHqg[:PJs+S]c'Y9o>(UMZ HWHl3+"Bo"0\XdCR+jP5A&q'm-g]ag+SIK=/UPb6b;PR2#Hr=E-Dj#Ti6o$blE0Y# -Pfd/@`f27XKJ`aM.iLb^[Gr^+#J-76&bj$P5GDR0,6X^,!?EY@5gB"DTVpcY[gp( WR=^@k.;@0]>=o7P]B$I$*o"p0kN%TC$@Q*Ai#E>7gRDN7)#O_]@gSQj$N5jICjp? 75pJ"%_sYO+ZgE3rT#JOqG'jM3]HLS=C&,ACnnPn61=#?4ssH!TEtj6In!JSR54C; X`sqdYV*M>_=cb8/N]k4\;i+pj;KH:XaCnRnnhV\"5Et.@N7SaQ'fh]OPbb0*<;UI (fO["_RO0iOoWXLPDYS[#5qW8bKTdBru5P*S#o#Ve?qQ,(Md'rXK&*Vr?NkTt/R@oZe,kl0/-U3Ej]"d1]: P9c+pe1KFr#@m$d.H-DlL2YdZH6q`NTO6FR#o70h6c4>7VgsU(hG:s'ip8"<&X1?a 'Zu>0UDR[&l9Si.=q;!LAVL$hDE.8)D].<+(6W(pMg'q>-ca.BTG^oYZOdI!9Ci=sFRnXs3.[l/&iH"b4?J]P2;WI_f>(Np9S8+ h=0W8$AFR+-Fft4rVipE8/Hf8Fn'f+'^cid_BmR@?"JdQhEu>Knchj;=C>6)"Gh<# PF`#@/ZG+%OR\F!!NAtQ/\tV0o"`,Q8-L'kh)&0MH'Z]i)^=(K:I*FYHYYmimkcVe MS&F[GPn9)EVC2=0V);@ZZaP!'qc`";-UP^2j!UUdlfQrCJPP^5ZUNDdc(caB:kI) s8<^N9"WJHOkmZ0/ef>VHJ.mmcrr_=dj,h,:tddUW1G"N^`iMmp+r7N:G-mE;oq-= RQ[NHpI]3JmEb'ZLIppCA* _M$X9FKJ!%">V+J&+a!?gVe,-`=p644K*2LVo9M).*Ip[BMDL\shLSJi2cb^XuWH7 +hTOn@b+gm>1;an=U:i\;1l]K]';o+&DKcpg7D'HYI9q!!V6.28r"9qX_L`C==\@c PQh=Cr<1S'9?>oJL2ro]5Uo?@jeGpnlNbX5O?/S]2mM5d-Zli1.BWS+]Y++_'3ce ?;nI_k[1(Z2jOZ^66qW'(&S/F\n_^MqI&4rr>([q![q,nFQtb$A\LBlJgM.1=\!od d`E:)+f9GDP.u>O'uC$kSC3UP.,5n(8: b4O`?9PcZ83g_d1,]Zp(uq1kI?=Z;gtc5:ElkS[3&3/4YCW=Ep90U.i2geh4TjWdN rh/(hEA6hJb,fjPIJnM6(ean2#0@a)ks96AHgCbK&$>?r1\RRNF;^ar[c#0!lO&hI PM@"YNikpe[q1EW2(d#:f^Qe2I;4)iL09&fhD2[B`]G&m$nXgoun Xp=EL/IoEp0d[gjoU"XX8";X.ben\p/F,onU8[n;-&&Z!mfe\<&W&\4H_a<'j&2^E aF4=59/at(eXPoaoJd%!5'dZtJkW%tu5 TKK\K#?SdLP:UMl:;X4TOa@?=5DOR`k3t%Ca=hWe>?'#;mkoGT4&LDi',?b:8CC!FG #ZN,4pqoBGg9:Z-j.mS?P2!phq^JkCH0iWA$K"66L0cE:3m#4m`u,j=71H(P@"'V& r(19,]$a6Ri@II*4c2@hiqUg,9O*DiNn$9l0W]S"r_rdq.5EE8MHqK(1dV(&6+o:2 GZ1oVkmL0nhbOIBS,q\$;J/e")@6`A(TfmK?"1H-bRqPLJ*!^i LB;D6ZZeine?a>Ftb2A\MKAU=ep0]=X<#Tl/Y&84r&=/_]%q)Xfc#U:=mfii9UaekWh;EUURncimb]iGocb%M!ZhR&EYl8lPjj&S:/l=E R^HHcQ<) $>\?..FS.\)^cXlQ+DEDr$\G+<^3)V![)j#oW3mT+cYe>'s<>?&#b]>XdTTeK-1.F beEl2_n("#7DD"Q5E'2bN_iD5T_LZBp[[>f;-"02)2(TU>^9?QMPb\$_;epd`p>X+ 9kic>8Z:"U3mg*/A*L,pr<ElfJ03i7'5Id3,O_fNe!n-=oRjS27)HS%_3edHijD>)4jJ Q]p38C@6kpMr0s;GSRb#=J#6$bOa<_cDZ=_V0_+O_H,I6Q(hH@QOoA%"Zm"a54H=r rCt8\)9K*?6/Guk[Z%/q%5`inEeS$R#3dfJ+:o'ur(>L<`IA0$4 _$k.obC-5,/nCA\T2VN?9PrMQGc4IVb5&kV6)$D7D93*?j@puiFT($^)Sj i,?j;EK5t\'/.G@n=bDMmSWX?pNcpDJR$O!i-kApj!(5(7BTFC>L(dC.Whh0/8<\+ euREoTsC k8#TobGp'hb.ak$QUm1+"gs'[lbEDrZ#G\lcj_KTAo`pfQ" CiDmGnlZ!`D$S9nE]<;$>ZT[Rgp\6>QhR#@i$f5"M03'1#Rf['EMsd7CAKBO2Kd@9 t@UZXqSU>PZCiA8Wn)(mJ#Sc!KJB._#l:14\*mA&%%8:oO2_Kd?@:gj>0FWNo>]mE WB>aOE9Uj>589=J$b5kn7pEDfB:W:.t8(D&nl_nikH&Nr1QgT*>-OCY_VS8H$U&Nilm$1@5*KG!oqKLWs5.+q1.-1]d<"MS))1i &1I>p%7J"r=AiWAD,6JuWOr-F*%I`*_cu9fIZHp,BRrV 5oB"$02ssR$?NuEYgAIAX&b$@l<@K^DLlQ0R2[Bem9-)O'%6feHP?agGIUC)"5efBcQ^>Ys?'Pj,KB/"u$6O4H:flf4)7F> O_E1r)<\LRYdA(TeaDiWoN3aLdi_;:;7]1pd)O?$n &>ie\pfpd_=>Q3eEq)3nF"&d_/4N2OunMc#4O<)7hHsLEW[>r_j^54K:3jZnM=OZd 'O1O#4GKT1m+`Ifd"G9Q?Qn&,(Z9EXp"fQJae$c$8#]HO5!;$iI1-I+%[+%=mWLbC UB8\^]P]hJu)sUL*pG6*"ZVG-f?43iE<84hA"GUoWS!/TO!.HG3;TUkSiXe!n=ku@GSf%(p= *rrMO0eaFeFs_]U>U$^iKkX@4_olC]pm"$GiP%qQ0r/i\`Y6.FS<[t)XX[i*N_+/A <&Pg7g&lS+&:sK.t5a/_ES$84$XY4Gff9-;SKjE!.lb()ufp5.pp1M$HC'n?"-13Z &Dl,e(!tr,Q>th`Xdh@3SG(K2ZqhW.7QNE/*bIU,FmUlr"X#+ZeOnEQFa>AVmk@>k (#Zh^-27"4@fDO"Xs.7*8XmW['E=DaIqnAA"J+"+,t],WTig/bKH:8G%g&:a?[Qh4 Y,R=MRPqHrX)`r\.2YYhF-2t?[ql\^9uJg9_u+-/>sSA*Ni-S@.V>;H+30nDS"`l^ Z0QfcOkM`4/8F4@=^F&S/SI*(2.Z3=8#Y`0YFh+7.pda,6S!<,SBk%?afEZjO1eUm 91>O&N/o%)8PLuN#$?/1&9D0m-B-P+0u3'mGh-UCfAIZni7sl#G\E&:Gb$6H&)YAr Sd3P2ZCnV#I`*2C/9_Ri;&RA'M7&!kP'u2IU8<37[#pkRrD=XS.H2Vf8+n#2Q^cbZ f8L0An&5GP#";g7lW]'K`HJ.OXPmn\!P?s:R+Hf4BK[Tn5\dFjRB@'QXm8*Ga@63% J''T)o!"9l+J#(bE1h=ENnJp(Rk0[rX+?h*hf6O+7-.k*#e4DJ"LEmFW:nhcj,2Q_ 8kC7P?e'VIMp7AE>Ot9Gc*1:]J,Mk<*UL%1FTHMIh-<,[CrBILA-jHUd3^sVS?:6! 8tTW$pV!uLT`>u&PPA=e!;_u&%$VAjl6TE)n-o_YK;h97'5DuFh3BSVc8XU_"gqV= bj_25TXK`4PjNm;f<1u)7_!EdWhjCVs-Le9Q7S*l%1E`D\'8$T(BP+$CD/<8Fq8Md ^-S\D)?H_=.4?SaS?((]T+B@qQ'F\3dG4uUC6kKl7[d=.6iOd!+kU/c/HoK:0YmD/ ]ZQ*\HlPOL=uXLgt`ZSP&'Xjjp$l<&egG$it_Frrr<2,rr@XoHp.8hq`$NjrZc.RN TRPgU=SbSHR*?gm8BQ#O>tAFXT3b_q`=`+eiIsR!/EH3!"irW=kr;jc)4s3[c1F4N Kl8Jl2B?GhP8rAam^+d0+?Xhq)VQYVb78XZ&%A-5MQ=c$T8L]B*!P[[J>laI`FK^O 2'VI5@]G%2;UtJ05/ >\M!nm&E:DU)#s]DhjBitMONrrBl$]QrJJ?eB#N6lmQ'1mjU/!'n'$[6o!SS!dDuO eRJo,k6cMJ)HR+[4d*F+F_8$%CE']=5h=cJ&@^;H=!GF*E"&#AMdVQLQ.Eg#)9m?\CTQrKt;LC460P%DIOrG^DffeMLQ(2eEir"NZTFS)mIGj[eQXCVg#Ni 0]#`8^E'>[(#CenA!u?`=EC3C-)*G2!;Nb`6o/Vb`"Zp0Ri;;^F7)ojRf)Ue_g-t4 >[.5ENWu[Ltc\em0JMda)ucXqd9?LIKK:=qec6inUA74D(ZhV80;?l0#[$`ZWU=.% ."H(?/VQ*d[aIUT&g+ANj*AZrE_jr?p$qeD6i.br@o`O/J s^p"pjSMrrY=%EQ@$k`8tDN9iS]__Wb!Ps$pq3!oj=je5>8]rqb2B$plPQ+"8MW,g 9_>KUKVE:\SaR"r8t,/:AE;sDhicL]=@B;];@pc6I:kO kZ@GdB\jeWsj1TB/BYNJ$R\ne*r"JXB46opnd#s%VQcJeg7qd:V;e+=t'f?6Q_Q\D JI`pa.BTFn#;%U$u*bj'UMi_ :iOYr*Q/`c_mkRnBO8Q=%#!Kko8b=7nc\MN#n5'&aK74NFe*V6QL )ptXkuj$'3dNb5S<@m`of16:RK29=rr@Z%HjB1>#pf$^XeoAS.@(jY[k/I?P(^g\A )!#,lfTqRbPhiWn6blaZgl;$m4%(T5Jm_1f$:%cUsR3-Gmo3q+E"4D12T#6f=cQ'rr<0:pa9S208P+b%\`DK7 Bk<\Hm.NsY750oC)1MFg/pbQ;$h2j=6mJgqToK2gtUf&AbJ?Dl:gcWnT"obflslH NE$nYGjAY!![-n>cV)m\lrtY"+Oq#]*!W3HXdf^5Pu;s!)BuLrr?[r!ab,?)Rc3=H sL<#.U(QH)[I_EXp>m"Qog,l#6=Ch%.A_=n6_g@ho-MX3`_BBppT>E@^?NT*7@6j\ ,`U_jZ,F3*oQdr_iNML93l3(anX,'VmEe.UZ6btp+/,Qo&c'G:jifm"Es$:e(;HtJ Gor(>>&<6pfkYeWsc>sXJr):N>.P01:!ldQZ1l?raW]X%6eVVp>u)0DgY]U4FaHj1 54GZE)6N7^^<=J^eb7p1hPY'^Q(hS]5 e8jW'K]JR;1a(<#AW99rHd(]r("/Sm.=Fnc"!Z*gZ7WI.o%h$[BX%Zpf>PBTdB,8?KGb;kl`1"NRQ%dj&h_[%n`2Z]p@Yrj_o0TZu]^JZQd+@>iY*a?)lP!thC_K]D+ 3Co^1To:jH2r6N[=.p2L@75ninJefI7%AiXRoY!p?Ls?8=DW=ORJJ\-'g[[aG9mi$ o]M`5,-JTCL(^Nn6Ni]4RG(%'3m!94@;,W6dCa[d1I'F(cYC=3sd%l\D97,+,]tLi LO$0a1%MO]6eTM[0pI3 e7ub7`6O#o)Z!ri%Ru/P!B14cPuZAI1l9Le(u%GB'+/Hkma+dSN>S+PP0?TUbg#`D NWP6EX$Mh%@3FANt"ThUt],0:M6A'gF?C.EBTlN\T&3?;@ihNP9?c\DGP4 I:"::'JbL*aQT3UO7'736jF8aQlfBr[T@RoeGFunNOL-D`kP@(QkeVf-nQ_5$DJ@R )&p.*#S_YX&c-W5AT#q^(+=kC?*5NG(a8QjOG?i4q5t8V"YY2b4&P(Wg$X5PAo>$O \2L!,0+`UhD4J?uI*.f!hSO oYROoO!/Q++l[;Vg*qjHVDmQ[,H8;-nd0Aagmt5A8,3,:q#Kh7>2sqo!sje;8KG!M rHR^O6jo]lIWU@M/P#MEASg&`lW.%&\QW8)4Dt3@rUIk#H`#R"+P*Y*Ve+'LICoMU Kd#T)8')4d,VV;l)npJTBPlM5klF7R$-NlI%U]1i#;5@g61dBrXnW0M4f6$IgfKTU IN`j8T[LFq**PO#4RCqb,';C8Wi^c<0@O53M6kc`HSMar$o7e\$C?PDD]$jB^G/P: r!trg9)$D*-r:kY;,MrC"d^tS#9IXEN&YTm%fO,p;P&%@j#$Egu]p>G(\.LSFs%k: [n(iIJZ2-!+n[n>ON0]kZVBK&SU0LjAmh(4#'%2\&q?\a]t?;1Sjdr`+sF.AG4T_) H5?_Ct:Dcjh9BKW,D&\>q4RR+1&mD ED&ULNbf+fAP13m(>2p092[&:O?_+j@letDg94&+:EbE=XL]J%!WjiO3=l>f 5*QVWn^^A\^ocNOPANb&maLUJBAanF!1:_8/]4a#9iTsa)ZE"I7dd?h"[43nI3iJ> MUmYYqo(0X#/53\720j.0p8>8LkE._6)SqHn3f2:S??BgM+^G?6@Uu,b>q]*c()d6 P'lmbB"g^],!]!Cuo`1D''/\F2]1:pn7e'(YU>-G+CT2Q0^%RXsT5sY8b?2%!cs76 N!L_F'b9n58?iMMbS?]DJcbsF_ZBMp:45X7uf?*.?JH$'am)9U_hm5^uPU7iR.,n* n]<*?OJGu`#=?JEU!o_;G.EW/DqdFZu0!-rpDRm\I@0[?D6SOU7AX`;4oV#2\@aWU]iNrqD+Y2A@D6fTZnt=4=ee?kXE_[;L KmX\Y'@P>]K+uBC<'Z/Hn413"'B5Sm4L"R5-aCW2j:kr8=Y:<@Q#'"E1jJUi3gV_H qh?'-e%H?D/W.!8gCl^>A+ah/a_>Dm;AjfNZ_JZaT4$Iq6l5^%u@t3DS@=Of\>_YE p=Ea0O&8b7S%*9TFpRK(q/AD=NKhSR>A[eV`dP0pnu);,kuGaY*H)5?UN;V.U6aJ< `2:07f&97,:_,'7a.%#?b$[5,\5&:_e9&H2u=d:S=L[4K)WXH4\k]h[DQcB0a@4`a >2(j5OSM:[>kT4#e<#gi jbTgpsCqJK>KbceELr.P:*Oo.N?A)aU,`YV\T(qfC8hhZE\Om=qAH CVFlG^^rN5#@C[_2_;IEHVJJJ0uQVlag`I(o#Gj[db&X4)9la8-EqXd+KW`73b'"i `@9i`LMM#af?I#nYQ5gi]DQ?gN!*f>IBE41gc8 Sfc^nQh]U0M$jZ8=GqP(a$Ki!mZ(#8Ngif9),G/LS\4g50d@_9f_Y/XR,%?*TYCpk P;3/GIWj)3SM!ZD:LTC'[lSMeN_uH*Zr&bC8,H%hDDL/@'-q[WL^XmjGfgQH1+!?O <-Dt)_]na;]Zl-RXAgaZ*\A]"GYJ`.0m"7*e!W\r,!Eli@C*%p,FSFobc"Yj*W-B6 /jHNOJlc`+>7U!g:Ik0>c\t\GjXRD5qAMBLb-:ijEo5UrWuiKHgp1W3Q=2IU9$/'N Jl6!K`;%(COBC84op,i*Y@jKNdfEf2O@pQ75N]6e&\+k;6"Jm1fuCe>)U[[(F`RTt#r'E+Y'+@ja8uZ&J9]3V\s7IFIG1o-Vuu/mgCs:dn7:D]] Kr4c='C5RfC^Xs/0Koq0B=qI(2^j("7tb_+7-c4P=P-R^qU4Y%72!qh($r+AqG3s? )9jY(#=DX^.00p7JgbG40jY"NkKJ%4dFRZU.KF:@6m#I=9ehgS$E(B?M:UF7*]Deh+!t2_[gA-t'l%7n*nJFTbd4+4S")5>0e5n\[NtmL?"8s64/jJ.s) >l"len%_;q_8BIS^blVO.B76N1ZpHE`tr%)d=f5XJJ!gjuiKdf>c_;;!i>C(EP3u[ Z#$An(Qume?YFjZhL(8WR'RV 7mO-1hY'KVHGgL]Y7jZaS%*53WSr=rX5XoA)^h*q`K6dd/GYB)T+ni>JqsIqLu??g '$">6R7J=8,BGm6-7Dl\%R/h-'VR\_gO^_O=[@^0083'R:\5T//I_ IFNkTofpkGCE-UY$8p(2i6m&3/tSfVl(M8[[jEcp(WtT3D7Ks'FjVbID78MnPnLb; T`*2ij(Q9``K$%$37W<_4M0/aMh+%4ZENYqpk]H"?,eiQZrC>A.lcEIjW]o4alt!5WtF3-]rHK>%&RD;fu":Z?`G/TcqBQU])+; D?ru3A6DjE#IgZX4+H5pchqD/O2Yr,]Q\Bku=_Se=%;Ts%rL83\VD]9.P*nej_)N_HaiOc)4P.Bpp c'etM#El,"/gBJiLYtsZ$\R/bjrY_H_aqA1h#1OYM'b7c:^)C4u,)WTF^8t8@3Ti= `0=f5Bn67o4RGTV@+L"lem04ASfJ,WQcAeZ,DI%*.r#&o='VTM3n2ON;]\enBtHCB HIRuY1/VPj06*@GpIk&^(*+-T9p+hS<#i.L&V,Vo_kUM-?t_Cf!W])!(!UZH?HdIk HsaFObahe>:A)S+)j2",6OiI!,$1o"6J#9Oi!"7uu5O5?r]rSl_CD5NCLS/HSXfiXk^S6((?@Is;IJ/VoIUlSl" RT#NIA?itf/joN!;mRup8lmDBV$E?j!MNRWC%Rmjk3jB7:c9VDm_"0M9jH<%/Wj+m Vi";-MlJ"nHZqCNBi=bZi!01JQRu$I)pqZHB7B!;b:r&i^k_qg8fgZ7P]%G_gj95P 5(gP!!R3;V1(2?C-6@n*>+mk!=W$Fq?1c`(X*`-2jdTMZ@fc,1'\ZUQIGg@'Dl"tp Q=66r-Im[b8Q'BEFYnB$Re$haDJqB*0cd`BTQ9:VSC0p@Pm#PBHSB(4&-r`"a8D87:`6-_"CJ+tR2i;UmM;r5NJJ )MZXg0==_bSM?!X73.HrX+/P:MKeK[F-Wj3r&L7en%Ngnlj-`.L61&ckgR+qo%ZsX #eT)'cZk8nTC@&^+]8pX_ZKYaPUR[FSe/3I%lm,$F(`_!@)dUE_5GU!W=g!+(!F_j NoJsDla`N93BSLCT,1QG,Qq#G"EPRVJH!WrOd!=ci+7ln^V4P)16Y-!iqNGogZUK6 1H;8i6N@YidV>OHGu5.+Eio"@,F[Ah7Jfma"5Nt=Rj]t^s6ptlJ\u"0'V ;LW/g7_`21&a%3`snF.[2AoDO/HFt4b[u!(iie)nq7ilpH6e+?N\/];b`9brUT5.7 j''-0qLH&=6V`r+S]=(btD40"$eM$VU%g.T)MO^4)Mc6O6+$NY_f52%=Pl[#7Q8.d)6s(YqoAj%) o:Hr:"Oc@TP?YND[Sq0ph*%GTXK_^qhMJ=?^3spg$Ycr8>G?Q$in*6:/,\V,P[62%ihAl'Ia!%`iW"DZ`a35FOVU%'d:nUH+#\+ju[077!'l B/6IFfJ4-UbJi-k_fPb66mErDA;J9H(Y[Ppg:!di,9HH3l\MbbC:74pba=1B7-'b< XumZ086oHo,*8#D>A7oWP0lSiC<@_Yn)WXoT(*hR<4poK')&a'\V+ca.H.#R0bXcd `R-/#i<^!36:ZSin8\giT.Gqm-ePlZ]s3i2JDYEh8HHS.Q`Wi)HJ0+D?3X-J2:['a 8R36`KP(\3]3\h\o!3sM?UO4B7pDN=$fZt%WVY_fF3';$9G>LCZ-jgn9@.7:Xo;NW p-cklYa'-ZJ3:kEiU'0X_u:a3+MQ[Ws(%4k-odHlBY`b[a=Z+2Uat,n7I;!V=^3oT #d@*pS\rA=@b.t$+R3q&XNph3#M6]#?&tI7I_Zd1ZON.rr?K]GahQ\CKF.NPUr#/Z D5Mm@gEB=#uS>EW(G9MVnLRH4<5`=T>UVV?QStu6aA@n&@5SH54lJ!0jd!Hi#WXj; m^--ai+7&IiZ6[bG]eu\+'ZZiEJGu:"&*L4.End$sH'EJOQhBR/EgY\:Qn0(XiSdV J-sW[IEJ%`d3B5Wncm7:t0*K36W!b4iq;YkTc:+W)@n>P&bm>IgS@Wl[KR)qu6X0G \=qJc.89eW#@f^*Nc*EJhUnY+V1EdM2qdAL+m!<#cIC8bJ_e7I_^iDf;?7g33@!2V#2#)%&fOXW<@GH mk2md=>Kp@SLl$HIHQ:;r5?7@=KASZQ*""\![]BR8K5Q5^/A:0s_EV"$BXhA)Y*S` a<@".F^1[$7hZ2`]Lk+=P-ekKU,a]_/7.-D`KrQmp$pCVWbHI)RLRsr)>da$lYWjg <4-,[Cr-l:0C[%FX;e5N.8K\:'CVud8dUS!$Bs2h\fnO0?)D*(=BM_lSNir)(N-uJ L/.ua]9c@JL6Ya>kjB>7@'"nr?G"boVN2PrNRYO/j^bjeKhRnP#rbq+i2:`(_URB; /.lN4tG!WRe$#BOYuO9-89mHUBCY9]C;q^MtfqDq];SA0/Rg[[ MGdRBq6X8EA0bP0g# @VSEmKY5>N"3LMNH>d4!"&>=r$7a(bh#nbXgXd=@:UuBm3<$=bcF*56#F>%D6/CnJ'RR"MN;'lW2FjXUE$iM0F)TVeIj\kp]FD5 Qmf9;6^];;g*H37cpVFG]M-N4sSQ>%h7i>QEl-SGH&Om&DNKQr?C/X)Zr*,Ep"8a( u]UUm9#(Er&4^N[C*Q.93A)GV#$m?$!ol"86u$slkG^MgNgaq>EA,X%(q;IXr.7=+jS$t>b&r.$c/k'=H>c<"?LqZg08g=omE7<, p#i2PdHQ(lD&;E#5@-t/ToW*5DhR/AZ&(A(q`Xgi`G_fQVGm4`0d+<+NY-%ttMJ`QhHu@m%J2FnHi]UB&( :0n&T+@U!Rn:#T/upcpcn"M"NMBNZ+.-Lp&&:8oFNhH]ebfI;j2%%m?c:bR_jZ%_- +Se)D')'Te:ltc,a-:Cg!CSr5^"c/o.VGO$*MIiqKA@e40&bV-cVT,j;PD-E-+/gC #V]`A?;+G'H*;?P/(mn5ldF-??bBn&BCMZ>(3NTpchfn[D/+d^U05.#+$L#q4:dQj Wtrm)Cgnh=jJ:B,k/!nn);gAL"D9*XY[rMe\kNI?6@U;ZZ15DO]@boN*1aDG=hj8% ]V4.X*V_QEMLE[TNp:;[LtrKVeV@Z(/ViI9$tp!,A?'u"3A>UA'"j%4ClsMSgNqS_ Z'TUhtU:3FC%/\4DPpoP&'Na6Fn@0)+Am699%hC\T6+%o*3j+J>mDC/Q__"iU(-k5 8C>K0B+s.DsfHJJ;IZ"!m;sU?.^l>ZHR:)=]MouNI],LO:9rFXo(Jdl/16=2pgdbA =e4?MT7/K=s:=W)1g)P@%]+^il<9Wc#u>@;q,#9p`\OJd3kCH:#d0!elc3.6g?5\* d`=jHWN5fY7J\CC(CX,r)Bo3\(C:0htApi/d70C%(k1tm:D+:"9M=Zn11C9!.qF[g WTTs"ASB8r$-C3gY56XI5As!4KNQ*I)IuiB+LQd,NekA\#T+: -)oeo1/f\$BEcU7C6)DP$jHX-qP,(r&DOV"qROr&&K>E9UVf;!^T]?O\?rZm-BpFLHj"R/lp1Amp;L4dr YesIlWDYFd)FeU8?);oRT<;%-ZYA?C&n7%D#XKMmtH#:KV&m)$b&FU2%[@C"PMi;2 uMG4(k-VShL'//7FWB-TAq"$?!>2cY4^>b@LScafH;R:*.ZhLIP%Htm-J>VT"D7l6O]S#L\@=Vd$$dNim.4>a^t2JF5$8.d3+<%`$H@WnaA+L2` dfob9=@:-,SE*4#gH-ZPK%S)!">A)^m[?AaP>3\mIMA(oV]-g(q*pEMa[?jD0b! 8IB]Kig1Z%bT#_,KXgh2WXPS0\jEMu(":g'S%Ll]j=F@=U84&oX+,'\g+ HdnYXs5siL'R567#%75J0.i:,E[MWqE_ ?4b$bc^mBH[:!>eQsiWFmTD4D]d\8>\[HVW&A@=)NNd1LR/)W>sQHTX&s_A#@''r&\5&T)oT"6qj>0B$ctGY1 %:uU27Ak1NF'oK$W3p"EGZT(OJGqgjhg5_%T(-P)4M9-!!3G/GJq)Klu:hFrZ,>Xl M?j,0B7[eOA?:rT7u]DM.DbuAW:k&i,,M=29g0.g30+J+MJ05Y;M5&$@#R;; kM"jAG\!_+dDdp*59ja9'hkJmO]*NE\J8Z4^1ARTbkaqAWFIaNA"JEZ-r&@auFjn] &I#>'UF;k)tC;Z^_$hPAE+o0n;#bI(u>*U^%%u-iZ"8g1nin\(p9\rMV`Y\6'DXnr^1"?DaC"RhH,QW%qPO7\/4J A*q4*tNa'nMc7TV74hO!4T?X)#/h'DDb-H9h7Q'L93jJ;C)hPD6TQsA3n-7a^ks-! 5JK2Q5]FoL:f7@h.h97oWukjWCq(7Zo50WI-B@>D_BiR@HGd&`\ecV;ice0*Y$\;D 7gO$R_?JRSX5(6m1SeDq^-e=Fkt?0i3i*?mu+QO[%I!3:&U]:g ?/_%)tP&2#%5aE#i2mkgPYN:YDXJ6A(2do:;<^IiZF&HfS<7[`a\#_Br[2llYOcRE k%9$NX6sm#Ofu*/"Y:6LQ,>'0TnQR/`i2nk>T/@Ga!/C96&:gelD/`u$iq %]Z4!%*4[fg,Bum)aHeH`.mS92G'%]N:PUr8u)6b[lq!RRk7LI)%HZA.IFq57H5kn OLM=%b#O7&8F-?8IJWj$Jn5FAs-dq1GJo6Bc]^]@>IuJJJFA[j%U3*rrB?(g>2/7H A7DVKZ*Js]O-MGI!dnSFOm hg;5`f8=_<)d2Yq\G1\upNH,nR`n05hAF_`NcT&IB b1L:ipK<8,GsO"N!f]EKE@C(p>6;N*=DN;`7?TQ@lrn29XHH),3s!Ik`,k/:M08MmOX2HFT>eZPG/![d*l9Z9i;78O47SiH1u\ h9]H-WnqF\'q_MXVqDO7PWXTNTJ*p4LsW?=@<:0!](HQ:eIl\41\M[pS_kopTXFel 7F4*4YG=3_pdh]0-u3,/5P[Z*_@fFGa6q?fWeEn&-l<2ngg;En=Y1FCi(ldko7K";3Veo,+6&&StL-@ZVCE0:Trck^ElK^[VPellrsJT(J'jfe3>a3H/%(<*9J,!`;3mJ6'>"*=DOG^[SW1! $1`*],qmbHJu"h2eSqSlrqf@n\ZnP\X.?7#[B*&hR5.h4fcR$4h&qEr!21FJ61GOL S=K8H]:=[cV=De\CRI$&Du8X#Bo:@Q:,T8\D+QN-]pY8?"NQ(_bg,#f1jgLZk"%!2 Tk1SlP&&E@#%LgJF#2G,]29[b%#[k#;RCXNgUoCKs1D5j*q;IH68('P/kAL*i!L/R q3&[rUR\O,]R'CDmVd.`\Ee6PC\Z2U[bJtLVFhC+5b93)XG6YT7_9G?>--?3lrV1q amQ%&NlCl2b9mI?%:@T[tDq3dC^3elFn4a,ggFrjO82T]oQc.bk]HcC"f6%rM;2\-!fq_/tC=.dLQ'eu6YF-8;f jC!E!Dlclpadf2M*\J>J.8FWq0;.146-4?A &@6S`*.8`(!X[;5l.jrag0`4)dg^!5sm^HF@6es-Id2/@R=.VR78(e# .aW3Xj6BUbjmtGG9sr5W&3a$R,h\-]AGfJmQ%CR]bR=3c%YEeDmdX#-_NK`%se56_ `r%CZPH_TTHTGo!Ot?KcT&'&U"*u=`QW..DkH,hb'iR<_f#\tWsQ!&!TfSU'oB^6h sp?AgK)'n9g+XMhY`c%jGoH*_*t;]o4d.?8VUdu_h&DlTFNa?`;V%2/W!l?`I^a.7,WN:6 4Y+%NH/ZsJ7=uVSkmUl5]^4sW<9khfeXZ3OmC=\=XR!#g3H8L`.u06*"V3t)99Z3g 4TbX[kiOS&Y![QNbZ9%N:1;h^pof@I&]SCH@&^n23a(%]]t4#!_tf7I[-+rBT$r17 jA]tG7h6&JpG<8@6]ZfY10Su`Q/HKKEq-,>Q,6q"-@'(_@=G>e.M.QRRWILOZO<-F7Q2o!Ign_PrZBafe1<[VO&N%i5Jo8Y'?=mm#"?E &nD%UVe[sWf[^LkKAFmDM.Sb8Vr+HGD2c4d3[s8.-IP%%h;b:6HM:L1#+p;WoDS_, 81TU\5S9mHPgBki$9>c3`I#amUM(tgbI!9gX:U.A'A!kN.K;]e['$.=O'J\EcY4I/ P8\Snc@f^orER!kbF4Vr59Xrr?q^1V\kPJr]M_ZXI%0_li7paN_OD*>(?6\(QhU62 0"?gfFM_rX4nnC?@AnE4hl7QnT3931Zsa$-I,1HPa4$0n4l`*RS`B&B6a(=lri5;03IX\0HB$ nhbAqp[&;B.&kX@!:\)B,PBkVKZYXSBq=El#BsEGi4Ohm\FgB[VELQK%&SmB7c1#P 1t6j2R1'qNF04)[\,O!S7f,$W6NT.T%ZmuD4F/0SqDdDl'_UMiL>'CFGQ[_hH!jUk /-Aj+]0Z@L]/mkao:a(C[>>R^m<>lfDZE8kOCa:nM=!sm?Wmgl!u-2r`>8hR%1,EA,;9EF8KLiCBcODo+9epC)c!bZEc 5ds23q&A)!2^G2)G#gs5;c\1[(hTpP3-%7`*OW/FA]?=?BQjB>6ei](!+H$nZJ3Qp s\9\&K*1mT,m]qdUD>5ahu?[/k?"(!&!Q/*'PS30^mHh+aAttm;<[iX*]7natFs3kir7)g PuT\'jjB(XlG=&6It#>iZ>Q)7^RWh*,sa0P?Q$f$HUm/)!<-87VDk#RH&c"BNeF'[ tHpSfVXG"C?qhRl7\f%D["D1Vud[A\(VbZQiLS-.k(dpNp6'u_&`sYa`F:o?97Rf] R3G!3up1jJm#/XdR_t&8N!'M?s=Kd=cD"WL]QQD^#FO#58Jo'RYSgG'9,LTS'?P1F V#\+jG$]r!E"ZogjjP,[WUK]CWF"%M.rp3j1c:4aN1?)DOQbGcpPDke\O@#E]Sj$J 3;9?i1@[fgDqmW&o+$NFbtMAp#tdPJ6BJp/@(HGJSpo#@qeIQ@659>1u!N54nXKuClT6KbT76Jh,VF&X()X47L,h@KC7gR":ZA@d>Al-Zj*qt=Wn^f1Z o7FKK'ie5HXm)'^a.GP`e5pVe&!V>gOMIN@b*RVgTMal2V/>`oAjL"I,i3 Els&3ourI1F!Kl3Njh#YDrHmnB4/hFFP*OJ`U#UH`+F*m]IVh])qmmVZ^O\:MaMX' \uF&pNjN*-Fp)naAQ&9S':C,SKTl##CnBE8:Km1nY 5i:jLP?q@:Kt"S(rY`_Ogop-P##>QHP&LaTf/&'8&h"Cle_csY)L<@Vs'S/c%=$^i ,4C)EqrIfgp-HBI[Iqu[.PMq*t\?Ui\CH5$+*T9>[#oUWQpT?[aobRRiYEF275pWS 192.8l9e_j#O:QdX3WWqQr/H0;hNlkZeD?-*lS5NOTV>K@+BlSd"V5Lb3&@nLq`g0'cKc+L6?m2&Tnm4(Si%VBUuA(N<6`, joh8YFROHM]*qCAN]MIYm>G`@q-=DU#[U+4NQ#\Z?foMh4.B`.- (p.Sj$jW\FUABJq]&E;g"L>ETP,B(eMWmR`]b6ReoY\@`euZ>d`0DF%3n.;=c,.IX 1D7qc2_/NXr#%V!#Kaj$K13UG`P,$eZWO6f,AePT6MT(-Y)t.XMDF`,VR63INL(Rh [j8*n^1QVfjaIC%U(qBj^o.65llQ"mh+snBRliD+`s4IO4b$D/E_e(;ajL,TBAe0X/Tc\F>+k%R"UV5Ab(Nr &t&[#4m3FZ*Cg!mbN#&+@U8WQ&]rhh[TZ4i.)>Ep%!NcV4hZ<6`&Q`qGi2T>Kc3_9 -Ls0^2hJW+]&AkF,Kgtp<^7.&,8)ai+,k$/Cm\aH;[#n8OeM2i4V&@_eDB0, lHHoo3T,hM*cS/n>T@&\"6IOXP'6QDe71XE,MKTfY V0o&0'6bba4On2X`O?VMetZ:cs_,2\8Rl,TFP]sV-DMq=K;Oc61=2ILZ-KfqbK[[E ^Inf@cZUY"`OW(abYhEW'7bpK>VX$:Z(8T'Ba)i4E3V,4kmR4lF@Y6bBAd*\$J00,ag3t'mh&j2hC5)>m9 -d;N5\CME5j;I]d_OFG.CTjSj#B0P/]>i1?*Y$^@L]CpN"J;hoQ6B:U_a"E]T8A]P Q=8)3?Xl\qnD`-7_Dr]fV`$1jRbMtP[ 4_p6iMh2^)mVR=4I7PnakC7d:X_2?4b7Griebd$Q_E=Ye_g.YN!DjeacU&;OC4T1f E:4ZJ3J=Ki2,"Mgj'sk*S&&59-KFPGWe*VJk$I1Z!;e`!6m\Ch'"=0-` fW0C/^?Bu[73gU1OYnt1Oq3=e"i7o(ra%:*@eY(S/=jWJhb+@ZiM>\>?d^SRt_cr? Csi;/fsV,^-]-e]-#%KUQ*n1b5a8[F%DCKM`Kk&3R8e4!(j"m'/>>FF/UY7TC_kYZ n$0<+?l/;V.=9Q8L06d#n]>3r[,$R5sBHMd_0Z!-j%Tt"c+1DqUCEB(.TM*EK'Ebg UZ1n+K<@DIIg@Tj>.5&B,Nk2!G%+1JVZ>c*-S=Kd:%j!(b\%^k-Lnp&ihlAD)!pYe !ul&[uYrY,W?38mL2"F39WRf!9iJF8F[H$cTLAJ/sST%[-HAnOIKAt"9*W)K[7+To Va"I&jg&n1_W@Y!&F_s1".5H--_O^L+-aI#Xu[#K=3][:'N`)*.%7M#\&c`L1?8#= T6O22^*$)CmG]>GI(q^\J\?&^=Q_,6eXHWSc:rh3h;XKA>DbJb`B&WP0opOL?2:AH^IJ>Y[%k-iufM `#o\B9<7IN)iI8bXr:d,67:[`@Pl$B_+r>URcR$.sVodY.XK1-?)]]Z-EY_I\!O4e @[rA]qs5:(@=QD8(q(,)*u-Frr>@[MPmZQ$LoI')sa%PX<#J"8N+XD7L0mtmGA+u. `:8Z(?$:A-.^m2X0dIYhG--.'?>R0KrF9_4nbP3_eH<]nEqtJFZ1?:iHPKHoW=Z[_ tVMlG1RgPNFKM?QrHa;hLMWs$1"40Tg+9ah/'U3o-B;ZAJ&cZ4iZje-in2_9;H;@@ =F&CAKtdL[j8eo!H.l"VHe#6">J8V[Pe,IMna%NGmH(_PH@n"/OoU:ji=H*p@ L!n'-tR6W0L]hj@$4;/G=.\N,'3:0T,/Pa6eRC`Ao*l8]K\7r7=Oe9aY]]e%R@g>cQ:tIQ 9U*>c*a3eCeAXRjj#pYe:1ZKdisN.6!u$4BSM"YUl;eWcaVq")HnJg*k<#AMaGkC" ]GuN.kJfQZ:8&acWhR;[rd$[6IPQ%V"%cPD)e)p)jgA+PG'D_n2kKg9:Zp='K7Oa$ eh<.,iW*[E(0ilc4@U.4r3pg"il[@,hEfB[CLJeDA-]GJ`T4Ai+M@@*g?+%_7gr=r (-R#iCeOB-KU2KIB$n-pfq@s3'@Fd2eh7Dd3ZKSHmbUk710(tb9O>,f4sq#B>,nFY !0\#>K^H!*UJ8kD^sS5/$pnE!,'ogrcQCjpgW:$EnoA`;8M?c0:])I!(J]%"3BMoP QB$2po;,8S(jJDg,\:^WZlJDa:8a*ggk'GU@@ *ne-P!P]h95P7S`Ya,PBps4)2S!M\``2s<7`IC%bqoA"&77[cBED9n/P=J`CIpA;) 5;?3f+C:f9!-Hl#fomC!:$X#C\pgtY9L>f@T\O\_Uo-YZX=a`?87o5kHpQ+_Fo;P5 pfEr-&m)5-`LQ9W9c\44"Ve-%nAEim;Ro(R<;Y%fnOrR<;$06pRhqaH+ZL$DH>k9K ErPH.\nM0D&=7&N/Zo1bo(nQW9O1A.;nM"QA&d];Fq/pQMH@4O/JljcWOL0f$,BE< KYu[)Z8H&LQG'Q:f#H%m9Pdi^P^b-K6d/0W7KP=,AlHj,TQBt)h@*3cWU=anF!EZg KWJd]4i#0[YPqKPn?]>_H;=EJdsm5%<.n"nNFS[La;O2gdaJ#)7SPeN&(9Q(p?s7O /sZ,X_W(6c1]h^63Xa+!(QKI$Sj"ecoF&E^p'/jZj?e7up5p6RW3R+Hr*Te]dfC-9>l3qNK75FYd:0f$QhJ0 c7oY4fb((<#+2>YZQKY4h,\(N,CdASoC]'GRB.d`4i! 4QFj5L-h:QVuuHoYgf5dj?Jn&>sRjCK`;capsF<<]tNDIHqZb]TAq\UuR>qro$;\! /KcXa?K4sf(]^]]NqL4@hB*V9SBr<5T&Eh]m!d9NdHVL:XMeF\$HH[)ib/%T>nA_K /^Xp]iO#0?E1gTa43g:)<^P7H=r'dkI(*?bAtbVZKVX'<>aFU+Qr'Q5T_YdSn*d)" 9ZqD=G\^45E/Wo6+l+sh>/&>\'nlF96\$HWH-aTB;c&u70#VtBB71K)ptO"&t:1$LqBqJ5nM$@4j.9T`t]Zk8C/A\SMYsKd#pk3R2:?QIk%h.p.pDjX&*LrpG+3[9a6Bc *^;ff8eCfX]Z*>`_D.GTuro"*G_:SS`6.aP)MIVTFG"*Z3QF9*:e?N-dCAjh$:&If -Q0u47pKZCh/]:P6G3=\B]+C!odH/9#[Edm@=1Vp$+H".8gZH_ir[e!lWiL;T#FS[ 4T$a/=>K5`^c_q$V9;d&rjSb%rYVrAH7m=-\/n0V*(t]H@BuLc%eB:g4+p)ciil&f c)%GfMnqSW!mq7!>qgppM8pY@LbBD]iCD%SB,k&DYC6sAkeCO([S3nmnG@qXW)&>TD[#Hp#196rIT? ;&cLbo*trg%)/]I+UU%J":<;)U`kQ,&juf@UD,-FWW1?H0)L5obhS"dEjAq7C9j?QjZS=1n;sDfKPANp9>c: l4a5mc###UZ9jc]_g=93_e_K^)YP&iR9*b1>0UP9,*9ja[O)ZeV8Cs#;>*(;5O.QW i:Tu*'R4,mN>q^Ik$'E;+hj!?J`t3R5eg#"hOCejEamAIg(RtDBlg$['t0p\][2'T 9h(JnP[,WUV8;,/1ds7#cD*eA:^AV@F#Vgk*#"kcR;55j.$0\o=$*;%XqeV),PPd3 9sCG>qC>3NYRFp+$K]M*guJ'UOV7%od`[2[CsiKZA;`'B43;9A"jK!1OpsfqD8i,/ eR&b;AD\%2lF)t"3\(K=g([L9#FsRbX .cna_#*<&q;Vn->\*!t)WinOHLk1JRTk\S\;Z@RYZ$A4qcn3?OY5]fChMp3aPHL/)='O-B7WEbd BqW528h39!6I5j"!3,:O%R1H++nl8`$a$#:Xp64:puHB1.qFH>BYI&9EC+DSC`%^- 'jT:377,3:pJ0cR:>!5#EeI\8+ur_K\d!2e9!dA%B!UF6Gs)m\#)LT]`<*I*X'+%D o^UEP'u`0c/6(bPRNicdj4JXdbsT=Zh?NPbu]cR1hU5 )8//%K3BOCBg+QQ'?WPid"]?]_CJ.fcIPpU3o8Rop\L[>72kGr7<*`'=F*N(aoY?S nJ4pnSc7'-V`.a$N[4sVWJ_VZ%[?+a%<:T%J\"q+YGXaJ`N*+KTnK``1qjDe4L'7Rqb"iq`3p s1PRm.'Ipf&7jF"H@JVFH';NR%Ck(*N0)'>rPK4lGN!%h\OB?R!Es,TFo8a>1]ZFI 4j7284a!'$bOP]k$h*dA#ML2\?Dtr_2*+*BO)Eo$F:Eh7eb.i4=V*tVNA !f3r#f&G*VCNb*+0[DS0(g(Wd/D9:,je"1Q2?u5T_oZ0 1"+#?`ZZu_[/&u/]5Q[OclV*nW&lE`nFhJi!P:5L"`:,CB`u]rB#EXf/6>78+8h5m <"=^0.uWE!g\UOq5![pCuC>K+,tQ$O"Qbu6sFABR)n5(;:s#_3BUf&aTd8Um4.XCT UKf(XE#Er7N#3f[qqs^d%:%7T[/[+i$\!pqtgrrLBXDs/4D=.U#M/Z=%$c(P;`^h?+]`;okF)`>pbQ,`8f#Qh=hY8l21D]R_kX _)nfGaYCsfJj8JJ;W*1GKK&0ik'&'`4dD+dd6.g97'A?BZudNd]>oJ!:-$DSUckhc 4ldY]`<;lLqEh0T\`;t/"Z!?>B= K_:!DBj>[*(OikXI1(a&?\KI-`qWK`][s1[FCt]pmSE+\PP&pg<>_kQ/_mLAhZ:V" acm>'N7hgj8K=`q^X%Km;:deeE*ot3+J)=D.?j,iIFsJ)2A6AC_@7n!;sJ(`UO6u/ ,WT@%uIBp]f/Hjf(Bo`i3TYH-+jg1Ll-^j&[j!%i-k4_?B=#@:W!\I'N/1M=;W$MT ;?fDKR?!2UZ%,XLQt_RTZ56eF,i?Sk.Qu;oOU3.GV#St7ZOXd0A^QdM?$l(,6fF'+ W7WWNp"j$c#>3"o(o?@:TkM[CRVfI^E-b`'aSBeq+nOCV/nS.FQD42+]j1Sj4]#>< W:BfRg9jLkLR5V:m'sC4)iJA-si=EEmI6/WM7+MOh1rVMX-I!+5$Qr7k:s!%)?lYc j!MH3eq6-:Qb\q!"k6Hd\jA"(-O]-,9bse$@1gu._`6,d4C-t+A`.^Y=`(Z;h\YDA 1SW^TW/F\NjJgo`AanNcHDGZ1BX.jqYJbXc5ciMWo2eFk-[p%m#=a=b28OK9>)L%hJ0dOh8tZ\F-&5%,h^O*]3*HS5q7`A`l6_ dd3<.S$WknkN6J4-gJcf&IA25i?Y;*l![7>51sp2NYfP(tI1TQ'=8NYefC%Wp1M&p m^7`[IB0N=4:7P];Q3(`k:cV[pRlB@_K:+)/^f%1Q3N:HZU"[g?BDW2i=a)FX-$o3 cc]Xd#Ir85T_[^_nE;#OMm<.e_@4LLF(.9#.AiR9-U%.,.LEU!WIC7Wkm+b)1S]a%;IFIWIO3R8\l"Nk95R9]al^o2C<^ZDi4c @5L[Y9h9q/j27QJeuk>\hSe7K'mi#BF@;Edcb8D"lmo cWtgdXWr9E7%;$E*+o;T5N11;sp')5:1DBl=u.g\ckJ)NgVmeW1*7OO9n_lSF,X2! 7mJ*(;rW.#7$du2':RN9SXo`5gO2=*RX\l'7t5EoV?XDbI/2PcNc9-/6TQq@V, Z7EUf'goDVk)?iUeP\9`Gfj<:--mc-;Vj+4m2qTS%Kp^hZ++Z8BsB_ON9hLaN5IA2 sda2!=.C*@m@hFgbpOFIL,Q`blBZAn&U[qi>c7qkuo[:X(7Q%2B8t>.oF,u'Tf97b ++&RHFCu!:eEMbggO7eqp5M9D%bBb+KFkg\_Ptdo3",^lUN#ki+7pB*2q$WF7325* _ZAeo&]EF9nqq)*/ktWPrY1X_?"@=C]b<[NCGo2GP]Yi#VFHIELbr< .QlN2^\;fM=R62F5QR(S@SdWgq[E3CM\(je]2*!]LO)M!Rfd!AKQnR\ ]NNb#!)!V["#>ipo`NJ%/;u"i#O%;\@,0?BuW\^Y*'PQd"Cm2RA,Oo*4cnGj9bnY% 9)t/n_]2920Wo8Hp57Ce@)oADC>=M0<3O2Y/nYfn"rJCk_lA8ZG0-n:]Gqk\LXSs?)00DHp?T,BZeff19WA]I*.#'6!II64@j>)eK)>O!7UeCnb#:H`S)W%g=FpOQS$3p3+-2 4g:Kims9.%hdYfGVI1[]`$M]3!r3u=6_j,M?*HSrrBl"A\,+/o#J_Y2k#`%bdSAf! +_'0:_C624)Nl^N"a#keY1tUfE)3pFS]UKibON+p%At,]J@ZHJ.:lu!:k=RKcKRl/ *[`9DH[mX`L0h?o-4?!,o[(YkN:rf][p6E*D=<1:UHHRe8@D'`EQo]M V!!`gJB>>kV.rL5oIf-dXXMLeplVF>$$Kdn$IS]AZFKglH4n\+^fGF%>!YXiKX&la >c-oL#RUW-`;L>m*K*a_caFT66_)YBlb8lJ3u$NG2dM^h=&q/_:/Aul5Feu;X4ls^ 7*[q6;$uL^e)lB@(Nh]5g=!-p/Y@5NdQ+hU$9-^rrBQdF);)nN!L8]c8Z*JJ[ZjT0 IR%`:\\JTI4BGanQr#0/RXIh@#%.)1N`b/#QPi!^tchihhmtS@jl_OXkd1j:AW]=: I^rD`p-*'NFCl1=]gAgg-Hh(XaOCi^e"B7iT7APePj<\c.QR4(gq-YU0Nc86H,3l" -S#oTc@-.U&5,B4<5>-TNNlFrNn&2/`k$Cf/NaGCk?in,b1BN:^?1DIa#M9rmS)4" ?M7`E8Y3B@a_2&HNL]H`]KJH4C"=_S2i$em[+.?=4gsqOS.Cm.T?IiH-^r#aY_Pfu%E=NAiTiI@V '\aT)l"YHr4"kZkAL@o1]d++rl*T'^SSanQ[_0N/sGCp)](LboY"c^63mf/2-&:F Xg^D 5;%%B/h#ml,?;?mO"^g3B/hE^?9YaP9B"c_(u8H\RWKH:b?K6'XENQ7LS)2A1 0:&q#IT#3pp\'\!nN[l8beXL$i$WIgBi*.6V@"<-1q%`H#9%rr@X\p]_QnG a%(S_CM`hjW8c\.sSO.kB@t79T1m=3'O'e5!nSa#VQH>B;%B#*AS k.Opd,%Sq83#lFXZOFhB85i]Bl:>.M;JR^Z+*(DU%*33jDCK0CgmE?3oQ*I/+hl\h s@,rDhai#^PftdZgWGJE:':bQHNr[m2QPqL-uueJ3&9AX'R+!Hj0$u4Z5MGHlgc`> <@Z7C2]i_Dg,UL\gDCCTsOYQ\S1;S#*MX5 R!H2,uei-&j+T?rlTPO2b%ELY)@..W3hlXW=KC%'>^rXKk+)tSQd0dWDV-*?dW(Jn 3gHeZK[r)3\&3Wh;j`(7gl!ghY8_`grp)N/_cCk\jqK44!`LPC0gr2+D&?[GS8d.> CbJ*OsXb"JK4&S]B(CS!Us-Pq[H]aB_n9[[GriZpJn]-7('S4nC?$S;3hFiXO;$+V -&sPh>dPIF'c3Q!!QNST_O$:!!MolQTR4cle@D:cV;1'j0lRcgtU#PK[T8ph%P:=/ BX`%kZ]$.e[ggYr@^s(g-6I"C>hVZ^.>Z\0:Pp0>].\mOJ".Lc2cqWc/8"tqagWDq ^VLWI4dV)$"39,_aPT]<1_QVRrih8KW;>>3YU8:!;rA"emDA-r)!,!)]O_&6KVco` .$`h_sWF-O-B!Oa32L7BCP4n4lQ45]h;"VpNrBfa Gn-`c1qToFhbR8h6d+'F5;.=C&fd59m>Rt/+LFpHUKq_bi&u'g6:=.%AK\"%24J$.b, Z6Ag2a7!OM/tD>1N'?$cgZ.O#ALX;BItUd6fLQ<0O]oLVnV[([dXHP1jnI4NcY"sI /a1^\qkWo\')fcA6#"\r<0/$9+D&I51BVgr"RP.iBF["+G'H[b@Fac$ofWEcdKKBl VRJ.Moq6r_58CXV"14jr\udtrrBB!_)tGl7>;jm.]s("1@q-h]c"-mMJlci8@1f+^ PL5Abdq&IZU'*CjDe,e.d*]EO/?7t5OO.?&n#M'#FAk!.*!m/"9>#h[2./a3G1FqCk+rU9qqr:7ne')`0lZG*I-^s-G*MS^'Qp"4K7E%4ERU[F J2l"V,m0A!V,(%es3'_gJ8r`RAj@(A0H-uZiL/m#uQ)gg.*4;pAY-Yd_d=Z,)^I4% ->Q>;0cKWEbS*4.;DV@K-=0E6:^6FWRqkh[+h.G40mF@9A,t\]E'0! deC\Tb9*'nd[_X;@+P[\KOVdne.`^8*)u^ORFHF1Q:8Aic8Bk\Hj"5V`jf!J3>+B6'CF1$+ST20 h:q/IOlF-@<02@D[kf0Ahem%M`K*#mpEGOn4V*\K($W"YfFXg'&#("]Na?s54;<"X 'B,urm%IJGrXIj"].+N$i&?5j?>3$]`.t`DTea._fmH$AasfY;jEe,+VsY4@bG`!% "^j;^7NqY8$i2o0e;W\]!&WA`nA5EN.hY\VJ4A"KHZ dg2I+7.qn\(e(:@d$)]ggK:p3cuHWp:gd(e$N7jnD1L:G8E2FDRgBbgeJc*"-kKZK Rqm1l!!q]`h3#o4EmT8SgVs(/I.+YCNqH7nO[V2"*VnC-R8a`*.Vh&MW(WiT?Mt6' :eu`A1N+.!Q?,`>XrUofZ0kkUflQG<3nA2B/n!M_<2o:5edb4_nmq+$JRhR5o5dCA CDS2;#^M-_i@5lH^aCSogn`@j)'NaV`B]Rk^/2lVqj5;m:c#^@$?u$*o4h3nt6LUP JCAaQ$R>\2YK(m>m5oW88[D^QI+t%fA1IW^BHm\-oDCjT=#KR6f JprY^Q*RDJ2l:jLA&((:F1YHM.M/liWln_pGP!>\"e ^1!FaeY6L4BE['nHheEp&9]//MV&ahkVI82G]d)]/rR@M<")u%TcI$9;;3*_pDL2) N:+q,7r!Eo4Ee;,just)+18q`I @<)+bq)s9=E'E?fXB1Yl77IlLJ,:L;3+kgPJ_^P"oC72pF=rIa:,pZ0N,[qU^j.7n +p(C@:YC?W"C984hC,PHJi:jjo-BM$F'&TT0)g3mI^:r,e.m?H=LV>EeEWO@XpR-k J@helnq;oSE/H0<]JG0O-foek;J[639eD"C>'/snE*hi4E-XuNS^FQjkE3D6>5%qOB=::e*:9?EK$?D9g7`9ZBF=pr B:n%V9?;UOCS?35&X+k#;9l^@n+/ASM'PJFA&sO2d:Ws"EIlZTES^0+QKUnI&[,G# 6S/MC[_Se7u-`q18!r,L`qT]Q1A`<78^SVh_"oT,`uGNf\Hp\&7.5h)hQ9c=K.]R? ^S#Zj/tZ*=2c9NENZu6KffJ,043.;Jlsqd6K\9t>]3EF6#+h;=au6=3b05jRK38RZ I@p_0':W$TJ5/'&$j9ZRpIJ!atg3f6R`.aJh,H#*6g^&Hn?V[U%>XYjT'E.P#U%uh eLSaL?eM6eVhPKlE\T]FQL#FRTGo]4!!lNiJR9^)4OCjYD3?4[e`r1%prK?K>h#a= #X?OQ&/fSN0O&0Y#bDkVunQB9QODVoSk,Z9'Y&=4,#WH#4UkB![p_I4gTc'Gae0/4pcETOAFFdeArPWfD"ou#%(OXG7='Rk\(8spa [p#r7RhI/WuQUMo:LV8.B*"d?"qS?Iiju+\kuIYr:mHg]9."(X(/Uk@N^6V'ERbM' 7"S^6\Kp&Uf=X)JWD4M`*i1>lT/Mn`u1c]7oT61"O,i$"jc=4V;Yeh4Yr)Y?.`BKJ'A#F5'?n&m$0a\nE9\UXN\YjPh BJPHRa6`L@%M@9H-<\H$38IZP\i'oJ&J2J6>hYI.Md3'rjf<7ff3kU,u^_EcL[SIs^epoYf\-d8%WKQHbQ 9G1-ec]0OI@rEJE&aoFC6;%^efRR^#.!(G!&;UnW_7Vh8EJN]lh($S9&;m:Q'G=0I ^M&IV\sop_)]:f!N.7=A(Y:i2&^4;\/@9H?WsEbq6B#fc`KO_X8qkHnt6JE`q`YQS Hn=QfC++C*^g!Za5rc,[an;$;j&hUrrCWLme+Z)/1-?Jgr#0Na5oQ*^)Hd_Y$$-+] 'p'MCj\$]X]]GZ-AV?;F_q\A-j0nNW(Nm\RMiC#V@3@#$/RW>mJ,r Uc`Cc`R]WHd#R.p&o[#GF%'oCiq^RFkg]bL:%8C/Xc8+"g-!B%bO>+56g;C>5=N&h mBkNr%kNK^D&dNTO/!?nNVdk8S]kMl1/*&)/Pr9CXN&CnXDkZZ*V!lFZgh`\+`Eef (u5nUM]YWd7VR=SH*t9Q07joBbD9C\jjIj0GltD:I4ZS&#aob-<;iQbU4J_"pa@?/ '"j-2r"+3`!5.EkM`kGVnrA?UmuOfEtI\aIK4KU:UehCY9\,*-,827Yc=T)X60@Jr X'2*_lH+S[<)2Jr"T=lAYe]'V=Ea-mBtYqY(,CQLNcLK# DrNXX&-Nom9W6!MgP4p.&T:t)8N1&r'_XbOBePNHPjU'E^HDlN]pnDYE[B2'nc4.M DS9%hnZs8J-:X2M24BOor)*o$Kq:LfJuZAj0sXg"!qKce5;SQELtgU&#l^Z6U%;F4 A\=bDK&/U"9!X_Pa\DZV=M\uNp\WRE-=56!kqdd5N&_pZcm(-QfFEcVoT=#]fV"Q) !gQgFas0<8*oh[!m9C>ZoaL=E/9Z>\GR+m5.eAUY'"HsC$.c->UpZE6[N=QWO//3A CW@ih%[dlr+d0?oPd=A/Yo# 6B:u6Yf-NIhUTu&d((JDrcn4H/&4kq9TB'he8HOl!F*p(T9l*M4)d\#Nb,^jGps/Q @&c=uZF^GrFCrrDgCa6i2dr nSVDe$U8!G^EQ^inLQsngiT?$(8mIR)Dl^)cJ4X`cs<@o=(6_YEPUO"-62<=0BfR: BtRp!A(fm!:cS@/&_)7[2,ItCn8'uo8kKOhcUNc>=h**K\4:pmbj%JTEt4;psM&5Z K/31lWgjRge8TR^2c3SiG-BGX[fn%S^+lYE\gfYNT/$7aT->/J2QtgQm._L3rRnqk uLQQ&V(BHIVbM]j/'@;)fAD2WlIqD0\q0@"07a\)uX@MOi@nh;Je]^ouQ1(*G_$Xk M/hmT'*dVg5Ca38LO/'%\?rm&6P\9JW;3/2(4_iQt$4'29SR3m!=_"`gXA4\Dr]:* A"dlDP2_ifu>H[hZu>6pF6!MY1t`6[_P,(H8_%9K &RN)P"2seNRbP^Y3V%c`^:)?>]?6l_/GBia:M@ 'n[S)n>U?+q6=^NDu%'12$Z"$r5)'.M_^nThEOUruf@#e'k .'7.`lo-H$-kaB!**E2N:ZnoR5lOF;%$EV:pMp_Oua3%duC`(Nqi@"gc$R1*_Bl4p ?P+lkZ9Un>XXsH3oK$L.Ti2,jVf5tG8^D\$33jJfO]W1&\%pXo]sIeo"<8m2X\25> ]KO;i3^(cim5i:6-*H3+%cNd7cd2dO/4=\pr's6P;b&Ram5F8JP;-B\&KJ#'s!7Sonb`Cie!9]Q9Rba%B2`I\;/#7*nQ?>uko DS+1X3p]=Q#6(N4YSTU*4"9n=RI,JgmYJOXL@W@>T@VYq6#s,*M`\SF"6n$!(!`H/ &C9q>F(:Cp'O;(!Q!M]p.COI!4%atmQh(BKj*!=6*+jF>#K*ZQhRrb27cuUM"7m#M C!,^OH;gZL\\G?cT09$eMKJp>?\&HYsXRH\Z\b)fs#\5aP+(?beN?@+A:u"I-j CrM5Ej@ALJihu*kM^'mX`qQ]G7i4g/onZ^b^YNShgbYWFakLupVkeTe<;'C?dK%p+5.[l^8fRLn RpdfQ@j5C4R)Lg9Da4Ael@eBTJcAF_B0']#l(F34rrm:%_p+'[1L@uk^Vi-u9?ot^S-6&g@;MRTL2$Ll?,GM.4.99#>0;U-C>q +q=e?O+Kn>4:R6__QsVZmjE@:4F+3'r>d:6cJR\A?t]R[iAb#ROp#LDqF*.^TAou& 9qcIRbeq2RS7*)[Yp:J!.<=LnD?kX9tuJUkg_a#'-M]X5Te*SL%#2`r\V'Tn&%=%] %(5DU[*s3'8A$]>/8S=QTiSuM^oP%2m'l#'HK%?:%\'grK,_r-I3QQ-U\d]2L$ .n^amM1.3iFe'#<^W%RUkfZApf#hc^4.m`%dJ-FhY]eS CQ@ipa,q?m/_D\Xg`lSp2'a/"@VGCh-\YZLLma\*N5Gp\Zrc+Ns7NO7ia)?RP>G:7 DH@ec@*L$&*iT=7jPn+,2Lpo>2=?7]CHOAS\4fNSdLEQHJGVg5:-B4Dj<)6*=k?5 I6?IMmV:Qf)GDCqbN!OqKA_6V`;E!PRIk%7;PZTp!>BU_4V>%B#jlVIJZS#,_*cXI gKW#Q?<;pE,0)[rr@WRrm?%P>(7&68$HcjGCDO2^S>'b8AESpb=bQErO"/3@LFLSO fCR^&)q^s'J\lrJ3ATZ/t[E.fRi']W>q2L*eU9hIl^b/r#*;UDel@kECs2 '4b%Yooe$l'#BfTDTXXn]lDL]bB>Vg,B 7[NK!W;o^?gqpaa1*rm4?[Q?rC1mj+"gdt!4%bNU^I,%OVOqUTD1U3G\hqlDgIH(:Ui_b;a29-D#9gR! Ve8*htT+5`VqHq\=:=k3q2jEQEn3:ng3p,/2F-[NJqU1YjSEO9tgQ,K4k+)!*K7$i A0oi[-T^dT'LF$4YQs;!*]?\K>Q!ig;n-j[^Iu'jq&`8B-WRY#35,sX=k$-;bHQCI 2BfJ]oAnY)AlL4$Q)se_N-s'TH`FI#0Kc_gUE%COdib"nC*HPAtnH[,7!/LRS%/a&tSOV]a\ abH.imVK9%d0EBHejgOdNHC\MiusX/AN/(r-,`,imn,]kT2oCiEHXbAj)3_9*@R`p IT'CN,IIn#/^;2BF%:0Cbf3rlir07+Tq8Iu%RHQGqEB'/Q`;Qb,N#* a5d0gLbb>"7s\#jVBs9WZbfg4*7D1S?i4[#hha6ltc'*^\B'4PH+W_Am=I`(48\h4 6acaCX%@fV8ep5F@g>RU6ZFm0#QfR\k'^f.P`gC^CgJGi/_4ar!BK3`NEoY$L%!`) LesiV&F(Ea-jD(i4!Z+UM.dKIETDt8H/[)/FHGqE^tGjG@tJq@[?8VUfr_TH L-(",Q?%QO),lWJ3DB>(PcCNi!#CP`JJK,P"GBY]Z`t1l!%>7QQ;?_Rlm"qAJ'V"3 He>.(G-m6oThPC,1RnR35T_C4R aA'mUropuX?#>=qUDtI&X6dj6oZ'%^\>ueh!11DHUbJQh:(dZ1h8'3j0.K>b:]2&M "WOu'1r20G\J=2f*]dOkVs7Va>Bi6D5;)p6:t1g7X`QgehkGr9;2gA8=\8@Z!WXM !,-2&$9TdK$mFLr5[R8!(rC;E[o&Q`)inAh8O;c3D"B.P6?=^PlEa*D,$r QC2:!;.K6Jur8#WG<:9qG_;n6ignZ:uM2#H,_pB#%Tn0)MAGLmK]+CB8lc4%Q`UFQ f63^nC]&,$Eq^bNcXt*Q.0JnGDM?]>aQ[kRjB=FcMmm#l!4p9#3HB(Omh'h@%^p,F 90AF?3cA(([YdES1YhnKC=iNYGLIB<;uqe5&ug0R+Hj=EBH'H`r5Jq4F(1K+-=`OM o3MYMg-94hLIa"Ob[;Z$F^5*MSLZ'n cgUV%2iDYjo'J*&8;I5!??,<4\$1dm0cHd@&#a\9mY.'RnITR(n01,qHM10_b(M$Ng89rl0MD /:hHVikCDnBHd_J2nU>T"V')CJ2+&>1?G3bsp[Rg[ci;?if(ZF,neu*C>5cfUoB"b M5/G[pLhWn_!:Xn`i*;/cO81]P+(Jar'`Y7".E$!-m)mHG%t.X:)&nZ8@\_5QD?Oh "RHPFnfhNCA_?3>8l5j93TpnMug69;g#[[;=D0(./!dFd(^(*i3/T_\O?5AiHks>N E%%c8%9,=I=/#C;LO10^)\-BVOnKXmZr,;jU?#b&ag?UqG]B0.Q>bVKU19#;E3@aE QI0t!<$I'GQ.XH#P`>O_C-:Ds'O=1J#Ui\(r.=(%=bD /V-:%$%U&B[>\F!W.@dF*htN!dSe._7,^j5`.PH7oPV4cEt6m84etASG]($2LkD#o 'bNZr"]t*GDBX^5E$LMM;gKo@AOQ.f/j V4>0k\@Jgpp\)EZed"CLnIMK7(uq$qK+'r"hSD:0.JS;5r>hi^1Ia6m`4gK"TWUM+ 8E%;lShHGbk#PX3T_9VfYd=H?%oeWiHN6iAN]#SK3;B=JF']=9'V7MEi[$"?^ZBc> ),]EAi,+;7+EnuM2i0O:GP/-#(STLA1Ypq'A&B#UNC*-Q-/-cV-a^=6+Ec;Rd,?0U E',OcCW]/C-i\8a7>t$6'%VbHHB6hEa^[7rkWEVrX. HRO*3iVT3-itoG8CdH1FZ/eE=#^ K-0L1G2FGK@f^f%/84ZRXa4'\\J@J!'6#'6aql+NDS[4V`=P(ZKUR$/9p4;3>AZo_ &?lrfM;a4ZiSA,VOq=k[5Q0o$b'h%c_`ppXFH(5/auQQmfqQ^Ii!6E,>-<.,2-`g+ q:mSLM03!,N^@l4EK)c/%lKg'7!:`;L'F+8GZ=.(47a]]PZWLFMAc/[Ml$6E]20ZE tFKP8#%Nu4fAJSrrD*2LAhJEIQ)[B_YSJpmfm+N#U>(@'l;p:-K6fq&j[5Dnpt<'" 5nSUC@U\=\O9Nihd!O_91ce)o-%"f*s_n,8ASjpp >cLR3.S!NMo-&it]<&*X_\YUZjuPi ioi[YE(5GK>Ua$5DX5U9<49XU__N/0h!'q^"Y*UP&`jiO,=ag%mDseqE'Vm(EXLZ( \2jC3n:l;F^o3**P3gImi@od`f_g%)[`9DP"nbgr(QVX+13JQr&K%4iCLUK"fkr(F <,F#3fE:Mg2;`%Ub[M^nm(?DpC-(g:1n1%%/N(4'` NmcK[+=Yf4W`b2g>XAB4 5Quk2^u.^UDRgX9Kks(B?$RKG*/j'5e6ZJnCth-GXG6VFN&Uk[''q\jM5.8Rs"_TQ /5/I[Xkk3(?G^XB/BVg!"&YG_tJWMf"4/#Hq!%u%de7$l"1pPYBRmtl/>1Ih%g USg%MK#[#Lm!PKh_7-QN;hBM#Trb-pj;#&1W6aE&3_ap0fSfcVtfGnf)cn.5%d9Aa bD+[:!^nD0ECOXO@=Mg_XEQ#$bdZcbMtgIT+a=_i\(Ad>>&\-hY;"^;5HQ5rS(N#^ h1)Z1'bs3?8l@2Y7LDprr<3(eLu'G;=KA!ItB8$*dGFq\(#dcUNiBM%h\+k.\7N?K ZYmM">RkE?qgHId@]T0WClM_[MHnB@$CH`a-D"dl/fTre-= ^bG:YF0FZ7C>D5l6K]TLfNcR*W.UM$JjZ,.\gX Su/2m`_ABT?Q$-!5>*J-gNr"eNO4_L@%"e2:KYUm__-4bE#=t^[4&@)dR[JDi!h/.FYGoi1C_a(:#h0U^;@*,1WqFr(F/%r#Z0PKFI>uGn4%U)MR)GTZ)9[-%3 jca5DJAbUBrULsOL1qRk9D6mH1dg:oUG=9Rj=?=MeMD2AK8D1?C4jbJ>8'dEQFm;` 7e7qP(W,-g^ULpUtC\t9G*?sY%m(,R3'%k4l,eUWng@+>!F]3Z*">S%QRi[Mk&t<6 /l5^6"`3hK?o9n`He%EVERthi P(fTX..:%RE.`9Zt-B^ME*&UVt$Dg9h/#\[>ntQHuNS=^c)kA3+KsW]MpiARW4&,S FSa65spo9)Ni1`UO[F@;T4,DWc!t7QT$CnYX2^Y"J3N_Y%q).8]ics7Qt$TrU4"aj*sc;8:Ye_0_j/)n*Ig-;i3dW:G%\!IU!g8)qsjr$jSIi>MgHn.iq9LjH.gb*Z47G:u9*E[Jg0fd]R%uk:` cGDcKK_=aES$(aaWnf+fc-dnCsW@kp2/lLVUd#R4e,Nno\52^#40>a_8B`hL5p/H+ )*>EG2,>)PtqmJ'QL.Y/+_QZT;eIlf[1s+@lq,h&itJa349',Y]Gqu"_p>sb6JW8] X-7B82YQB,A&_KAcn7_5T+a6G$F]K-3nP:k>N^qo6g#=4Q<91fYC)M9PP(\%+Id8( JG\o#^YS$8GZ-cO]iS&BjF_/9TEl\PR-e6NIemk#Er/O7a;B48rm%PoqJ("E+l*D_MKAg!YB N]VLL6VjGY8mBHe+6H:@5%po)0CI/IKa'-2ZT pjn0);(Nhb@'M'N]s>O%ifA.F'HI,St+B8F`=Pq.?*K7J)(r-J^j3c]^W/R[.d+eJ R,(sfa(KPLBE-LNnMAOEgi>KTorn#V;iaeSV3WMl(:RsPG1i6>XbVsgH#m3!sGgBj ]t2dH7/ET_l?:VEH(1E`sSV-[piIi/)Q,KXXKB.Jg_k#b8.^VB`gSA-ibt!BEJW6d VSQ#jL2V3;aoS^)gn._=WM5\?X>Dile[W$Xd68oFWHN*u_htSYh`P2HB[?jn&nU77B)]G9I] SaDm12UrI6*D*3nR\4F+rqcI*/8PtaEnCX%sjut[*`Y:q_q06_0:^e.?QiBjIShS" 8"h9kPQ(P_`fbFi:rl%I#--9FHHbQ1LgFGG69(N>0DM0nM[=P;#4.k$ ]co1?&dJ]!Z=eKC&n4_O&;!4iaPC8(C[eq:at!tb6kMh@Bm)&rZArL-gP-"^C5U/h i+00/hQI<$0#63=4>Y)Kq>1lC/?Y2;Iht#n])/tqD7*Vr"`%SJ)OTCA7RgUMa=8L+Q0')qqc5(Ihuoq)#39&JjY]:M?g-EZ"e`Lgt.bepC%$ r@$Y4A]oOqhp-j3)e/`8I(+*aGpQ"\33K&a4+&UUKa^#(cE4DlWNe'FeY,DDYnG/F ]ndu?Pgm%qUj>bYn\L.ar)r]%(f7ok-3d#OCEFkpi7k&E$7aC[`U>Mdt/tLgN^'nG nC_9F4]u]-GIT6[p?V$-ZL6)6YUIW.[$\:%k)H8I;6fiOgstK+a?+]J1Op\I(SJJ) 94*bc$\@E;u"DlJ&V)i\a[V:nDhLE4SX?flT/9pHAXl1JIrJ=>H'\&64VE\J2_OV7 R9#FA%0UtSl@Bhf+mftp.G*cnY:K('mp8FSSDlDk;CeQQBrV^XuCed!V9+):BPk-i n))K*u"Q-JklC3(RL_;La:GL03cBgC]MG2AeEe&;hA.m0L-)`Y%u"+ZCd3U-h5d-n )@*=i6X:N[X ;a65\TUr+'GA5-AR_Rgt9[i55\]j[*U#e23sk[j0+5Rj'/Qp]$th?'A^cOX%J2;9 XC-%Vb\UUSdhG#[6(j-XG51N?,p:q.A@'( K#,53k:Z5mAu#O#9J`l+8uT\n:/J^+n0^R'KXOc8mNWC2-h3@'ZSkti=NO2A*"G%dI%,l( pB\u(&n9M7(s@Nrr4X6_'`\Bi)O;3X@ Oj,*WUR=Ym;i%fMgbg(+6"r7FK7;3grM)6ZtVg/<&2R.4L#P-TkS_NS\]d@%\OA__ a`k\rl:TDe,3qhDa#_qVVSqOQZmB-fl&"D!PEto+[@QBT,3R.Wum2+c:X l/XLC)S/(H/LpS/T0hm"k0V+jP:f]8K]oM(Y8/*RMd=WN#CYdCg]eS/"$+.nEpg>^ '`;15MFT+^(5Qr:`VVhYg[u&$HI04:!'nu.Z.N!p+\d%97/&!#3VqA8N"i^g^-n Ooe6:D@uu(&W9T,[r%[:DkY?SFl'mngfjO,b+[#m,![-jhiQi?FVfmiVH&u[9Z8i6 APG%1<#uVl4YGGT`*[/rrB1c>$`c-ib^%!4\Jfl?>%R'b0)(k`Z'q%L:q6s+uiqaE XtE28qLn0-sn3535ueF+'J[9hZW^Nc(`/1[>G6b@b/fcm?E\#599\QVN3uf<#8[L' PE[Kp8r$[(]`6H2$Y@=?d.%l<`r(@;b8-"fFa1iJ2-J6L7H4.aO+6]Smu/!rr@TNg g[V_#\UVi@'+Mb#)YF.J/B?(^\ZL-Z_+Ri\p%6TkSUD32$mo.g_e#%#=<)*4+0`[i EmoKP#('Ff_=O05,E79C]qU" ^oB0&V4,sFOtT=h&;j>kA]FJN+@@CN^k5ZiiENdLG$_P3t-uHY^ZQkJA!]C8s,N#& :p4?7g.@E*4iIHo4O^@WV37.PH9F2Ka7@q:^"B_#RbPfbAp2?oYjdu_6gmZ3A2X.) &N`'bZO&%*NF7sFkj2V84OQ[X6@-nd\WO078V.n8eTfnG5>#>VtPiII$9TDfM4VqD Vn?J`!!0o5>ltLacFD]-d9ELSj30QP5(U0+1mIEGTF%S)_61Bi8EF%qBl?@C#ZH"X tg6UlWi.gL@):/WiD)i?;3+YaXj(K/.U]l:H0$hgtQ)8n=d5G:VK7Y=[(.Co9N^4\ e"J8*?HUQfPN!SFl!!H79sdr%j[tcr7Gn=J0^Ic8:T,Y_f4Zlp8[\.Jf+hsji9@7' \3(f%7dI60s6(I'^Fo%7%RtHObPOi5C5N`%r/coL%L:6&bq)bb:B67:sk"aI>n5([ 2OCC.?\:[^NXB7rYV\OYJQ)!U2=u#0iM:H[^(S!nm4l!JuD,`H1n:5T\@YuoSI*M% on`X#OrK/CI^:)FJ/ao$3V>kk&]id^a'0!;>q#0nge9!]W5R,Bp$j]rQB! :I57OSE0]NEo2&8fUH_fG6]u?8RR=]=O*'Bl%[mUE)6AmHoc2jL"peM K\iIO_qJM7NX(q'&5D%SM?^j[<9)0mi]'#C5qC^\!U%Rgd:Q%"jSlO8#:B4082M!W j.lH3MO'HnG`K(Ok)jG@m#3GCT#R/%JYD9`>$("N.OemJR*?P&o^XS!-t+6"O^kAh sHcY_)XU1"MZ&][P?$=CY..blQ]!L,+a.Nb;lK/\WYXD[^UA40e!q>r8<5R('*BgY A)NN%qn!Mj50#I)lIAt2Rg5YCi-`YQNr+`cf%UFn,+P@-a_EGGI-(K(3r9J*-O?f- j.OI>KsB;p+S8WCrD;E#nrh;No"e4R`FrBL9.d5QFtdbXmSgJ8rLgX*YYHmS=K6n^.ZFRhF&EG-OJluKd'U4>@,4 6UOP*ni-/E&^g&i,df,WHc&7d*oAPMWu3cnl,`;:td];lq2p+=4'(\KmjhBl0YJ7S h8E58Kf%9HY3M&3$0a[T"^KQQQNVYX74!s8F6"f%J]A1Z6FJ?bVLC.W+^CEFRmBjI08%g0nD%37/17n8\Jj1.Rq :f+Eo[=M#h"l_qb)rn`1@O]05\*o$bc`R\SJP*4Ko6$p0dG9boJWQ)fef0c++psq@ p-6KJYqb%5MI@X/>M>L>h:LcO+k/&`gJ.AN'%p90+?Z+$Q4&AoBg,h!,K_nj68fN2 Z,hG\r6M._c4/Ei:A5bYi0PBaibS%S&^Jam6YA]("`)G_8Mrd3L+@E j$0T1$ooON1XhbqOc_*r"m]==+m.^r]'Zt7I`O/;BG!sOP&D'gZ@N-*9V:EWkJ^f_ /R*lr):7ca2E;,Z/Anf^s%,lPGPd-mYd>74D3P/q)SD*,#,*bk@)/Lh1Jk^SfDHW- BMJ!II7m@Ec^A]-_(L'8+q^Hc)Z"sA2uFE2j,\a"0_gu6[IFuh* PZ4;X\r:m*g=N0&&h6CI`99@OV/YE*I;30Jf%?QM^1#3i.?5_?OD#crX6X&eRXL+4*N^n:Rj(a'@;!KrCoCb2I@Vg+?`^O0nBV:$lM^-*p(bfOtJgjbtN`H4#U gop@HVakt'$VS^UQSaf[m)Zrc1m1I>qo/gc''O%eT2uWE53S)2G!!pP\T>D;b=O,N p>oOXs/,Ak1-ob!@.'Q`"3c."G=e[5Sea2$Y(j&oE8YgNHd\TX8=FB\)XWZ"MY;V> HMSMW^@ndcJ&0^E8H[3"LG$ZW"(isK@'8rds_Q"1EQjL%%8+0K>`3eD`UOZ2*GtjQ M0FrZGoC'<@9tfTF:f#XA9LYbFTC!Iq[(KijH[KRNED\QChT:Xh7/LDl:693$MQAO B]kI,BCkHKfr:(!;smc1eW>O[eIgK(&3ulGkqr-R_GY'QoHr*9N+FI%,JplECubn#K%Jo^YP7.B&ciU;N8"LZk@nC?XNm(2>_W'P3AH#Y8Zm\%(H)K#SkO6%`+3!48APrWW3NdsMP`^D?UB=c^H6`MQhplP_+>W9W)@.G5Snnc`-u"D`a)ET\_q[ X-FA^[3]6^D:QCpYW>BO/DDiSRnhT>M3aT("2KQ2/PZj\7cF\)19@VZt1)UC5f)rm JpdBW;'+D[&B"JZ7FUWZ7WXOZ&^oiU2* ro)g49[[%>K>S&pn?_ke7'!E=m>Ys)K\h]+@_.Qnk&`3:^ujIUEc<$+FmjEO&FF*( OTN'nMcFZ4;m[]iQf$Dk"Fd6TCeAVXkXgdAU[c9]5`q>UHSDu:98i5^n+> g;6*pn-It(ANM[qaI'2MIt=T1i$ks-.4dp/55OMP7^:UXG%BYH8F-nnP=i&J3bXOKe=7&p_JY<*I#D"PV.pHYT6+- b5C2p&I''EVF\qcYbc'MJ%_4"iZM)OYB/5AJsn$5T9Y&]934I(MM+pSYr'eSKfMLi FA-Er\m_FiE\kJ=jsMkY9UMSH/+)6rrBaba+dpV%hqSE?%Z/N\]ZJBpWfmgG*ro3UK'LnElCAkd:5#@ X/uk!"Ka5PO2ONB\mm5Dgrti:Ao_5oOCe8**2pC[]Kq\4AgBuLh(;TjI@ u`M+.qE[G*7Ui-0F!P%P]-g-id`%`EjmHrD^9d9%.?D>lW_qDA_s7l)BD@A&GrKoE 2W6-4*rV10VT,k*+3rhm++UJBS)5ASdEa%5TL<2QZ6[Gf\Q"+ePP=Reu"G#8M#M]Y ;Buh9SbGg)SihqP[O=!(itC/#I)HhBtD:MHU:D8kX"O'!:@-f20@KH0O1^D0`YZ\U n:=^AE`8h__beo=\:oj:7h$j1I1Hg0@m9eDZ\U@PKEA!f,9WE,3pM3Mr_-L c;W_[$!UX5AlD9J2DBF6s0l\k4[dK!+@Ys*ouKIJ"8?5%9_NBL9qcdbaaLN\Cs53o :!:cl?5TlRjs/KR)j.a4\C5f5<@\8FG>Fm]X)sPfi3CD[!r"OJ0FF>Ke5L0a'H(&" %Gp4\"#Ku39./_hR'FL&f7oZY7'/^-R"@QTHT%Fh*1)K#O>PW(0-u(\!On>B%n<M;B)#JC+X=p<6&oh1,-]LCeM)c"n=#Kj]3bA?h0Ns<0G^O^h>nScNpV !7T5:WhU3"TJJ.+KhkCL\_dkAG8#Ag.%tKOmct[fdj$b5[hdlC#`p_mTgGD"_G6tA="!\>$h]UI1&ptu"Dlt;1DgSBb>q2#C= PPHGp"U'B6X3%UL;36Kk"32nj%V%)[>\u"2PW=7_+4!L*+j^^h%ieBT+):T:JS:eI [Zr-p?D9dKjU`I5/O]YIqcY,2SWh"pl`NodB@H^0&*Er8E1h7Bh6r6gHB>1nAjqBB ;XO^ViU6,ZR>2UD`0E:npU%igMrh?+.2j)NR@leeJ"F>d/W d6!sDBDa#@V]rX+%:*4iMVJhmgI:6[bF^.gH#96Y&4NcYc_SFgNMnug46X%$L*!h[ 71-j#&U9X1R:KI-Q\KQO7@SUcDRjQaSu5Vr!Rp_'$/P1UZ'cq+P]EoGoK$OY8lQ7_ WUW;*[kqSi>7@CX^091(@i1r rG4sob._[d^MHA.#frr=VsN0rAT3 6L:OY's$p%Sa85gOkRmo<5@dIN<[R7:q%"qR-;$Phe1P8l`E_+5HulT>NPK?P9-#; RnO[9))C,Y,<2/f32]<$"MFD>ce!N9XcZ;D'dDh&9F*aO2P'OYG0_8/,SPX[X_10m NM2KH@"_cbO5qChPP-HpnkB_O3!Z\7,L\.At-"%&Fk4#Vjjae!"WD^AA^WFKga=Nl ]`[A"`K.1[1C6KJT=/-%s\*S`>0$%hsp"'S""RBkr.H)ZB8Kfr$;:BK(Ah7n5@.7a $0jn*\XrhLUj^6Ye"9Bl.gsj8?\'^6Bd[7RO:ISS(M6M!c&Uk4rMl=2/?EU#?jc&+ C**'nG0e;n+1[#e+0.BfM@-Ln6;N9h\+q&Ht.B>-QN#[l4m;%f)McU)+d-QR!fT *5'cnDD0R#k#DKCKbV^BdO2/AT4t)*kW.nc/,@n?X-^Z(83i,:ej!->Ac1N':sKiC 4j;_YJ_N;)QMYA4277VOU,Nf9@TfBIGUf!.c3]"J3Tp!-UgoLBu`1\V*k3Y_Hhg=r r>:)fAJdk!:Wi-g-;S.ighI@t?Q8s=_rLYF;X"[Pnahj.c+!9e[1kUa\).3LB. BR?EUZiRROMc9cp`HsIJ2>MVVDi[>d%lu;9]j58FfY+KKB+Vq6&' $#]_'IZXs_"8\4!V9BR5@F6U^!5nbCO5BVO/]+E*tR,-'3Js)PF6!:=$nIZ.,a0ln @/JZ[tFU-rL`aiM8'BT:BgYZplB-7U1q+(/_>c#bq3aS3uKVo8Co66O)&hbcG3I&E .cDaKL0Q(;'ttg\bT6E?Q\I-;V!rBU!%5PC0-imO4lH!(QS?+?rJAq6!:k2)n6bJF R)16c&K0*"n./J%>9hu67;eO[("8rm7;,:>:\?Y 4Z^ef/B?Ybi6U"@99Z:^Pf;'I"C:L"2BVpjg*IcCMTjY$uuB2r\aRSIpo3hRtZog4 !#8_F89:X5PC-9Q?44)p5lcXGGneri5nP;T"-O-J5l==V0\XVN.bmfJ- _@_`&I$D+]\l?M+-E,bb'f'(>5oBrR^[l(#9>0kJ?o0JVd@V.T#!m ^ZGmLe*[!?Z%S`)!%g9*,eT$O#U/s@iD`^rc(E\lR6l2L`rN4%3SEJ'1"P'_lZ6Sl%;2 rbXK[\tNCGbHkrqrlh!oH2A/2KT73cKup81mNebd[3u%P?kVJW*W_$ZRccucm%`;W^!0*6QWI,)rJN#$P6$i-GYnq]3*r!Kf0?-gVc8c'@Gi+UniQ"LYG5=F4GE/UA .ghKjH*1%`b5IR5MF\TEAb_bYQ[ao1oKKrT&6Ylp(htoV/4ItWm168TJER)!fVVP\ @D0XMi3j62,La(2kRIk#oN-u;uZi9>NgtVLK(d8iu$Sl4-6&i4+1cE\+&7**#G\uX 8PY+LL(+'(jY`_`XQg#-cNYEcY4AfeXV;2L0#rN!Rr+ZRcO)_N-_=hPHEPslZH#5` 'agMYT<].\+&"01`qPMFk)3%_p<7H)2:[mEtj9IA17Wnp$8%Hh!iXGFF@W`edY72l V*I8rM=.o`:0:-Cr[#A`]B-fe*=[Kr&j9[@,UmL\^=a`m':CuPG8uPMHY/r"rZ#^&%rjhO%;itb:Y>*]RhsIVW;L"`_a9W@kX4E4o45fCWUBV"5[0f>[72,nF!-UBlT*LG@NIa;PSif4 +_d9oj8O7d%2cWZr#NPX2C%P_ma1N$6A/gkP.U4ofl'sdXE]kLW=]Q*Xf<`]7L)V> ?fr0E_LJ6QtMQ="HJ]I_0e?60>YD\?7%^?LZH(ReF\9n27n."V^r@%!)&>nJoH%fW *b"r*WhcE'5?`CgVg,YZ5u&ee`EAHn=I>Qrr^>Pha:iT5;R",E_cQ8`>0Q_(:+hiqA]tL @9p*?1$?MD;"6e($N5AN3lq5Bd-b=[FCpjOKbsO?\@#'-f#bQk`P'gl7)OSg,J7E1/8)K!?SA"(P])b9;"orR$^r#h3Ckp>eP]F1q<9 3#(lj>5$h,dS/O_1kE[A\]R5_&+N04ZhZd`#j^ML>0\Y4iXB$&-0=p&qCMjoNo1,# ?(kZr+5Bskf9C=@H/:45V3/hISAZ>n/J&`F;;3WHtr/WCU2[l@IX5eLMl=,,/)G4Z n`,nkOPdRnA[QPXEZi#Sa`M]4A4[,>L*gbQ5MUg7!\e4H_IU[>$DLQ=>N5`O,10r7 LWuTYu#b.%tAJ]!MO)oqr+0-ll5:07Z431j5lF5JGs#^F[+NR_`)5q*tBrH*tI0=R 1+-)9`(T(7<1W^c^kre]97XE?Y[:feHsM5fjiA*SI#'ih=ucb\&"kS7/ChZXCCoPIFBA)g\PdI,3VbCEN8YWWrV\%G`$?\a+C/MZ6X]c-*,0 M=s7+,p8'f=V^Sc\_KPC\qBf<3hU)4J\+RJ]E)pDLZ3q5=/k"n;G7(mt>:;o#98-B ]lN,D3+oHrrBCWLL\<\_9X,riMf1_fbMSk"p;0_ 84E20=a'Z-5Nr0[qbdpJorL/m5Q7,Og$Dhc %nh.6%aD1=68NTn4lLlaf"/P*p_Fe.:r#[_Kp^M)ZlfmrM?`QB^q%,SF-f,a7Q#8R NSiDNablAfn[dqSt=rG]RSl7YI%Hpen*=USSo]WH$:$1DjD+#$abX6O>)!5?G5Cf# ^eQ#*05%!prgL"KO`:>blib94FgI+@.W,#l!?C0+5,OH]@81@T>Xq,U*O^C:#(Q'q #O7,o(ic)#O=VeBqnAl>VCHndnu,UfJ&/)Cri Lc#l-^AdhQCc[Z;KTRXS2+TtQ96\>)#icIJhrkTr&s!h5DQ\^A(%-<1j:^bO<)X0P 1`$s[:lj=0ImCN%n@un:XXbWh=rl-!!VoDoQOtuBWhQ\W'p%R][::&RrNra0t@IB5 s7g&(%kA=htS],_!d4@ECFO#.!/,(E2(NV7^S6jlaQq?mL=V,h!%:M`QJGpJUg3]2 3Fn`AdadLZsf3m,S<9`d;OcP8Yu3:_E4q0hH8Z#i&]$ab9GurD)E]!Di*t4XJPj2p ,U2o>T`WU`bYD.pil6=a'T&=`;]fB]N).[H'%3#[G(tJrNg=YB0ZF,#u]Ob`o-k.6$OaE7=DTXmC@! J)7.A$#`\6/%'W(7sMa'O.iL0ZYPi$Kle^VB6OTZocB'EK1%Zf!"D.V;uCUX!riEN 2[eDB!>pU+(s=C`a2$)osl4Bj.ua$?D6kc%8,n[5K4:&E1VnWuE2;h9a)b@ZNgLG@_1-?(0:9Ge/% bHZ%d?O,j@p][mC&OHBItYDHe*->JH)J:9=\1eZoH'4tjmd#bDf<5RCm%Ope:&-1l UCE8Ru(!B:LVh^+cl#;j-S"n7q0"nrG#3*ar,kp41OU:6B?Tf!Kh6XkWHd16DGF?: 'n(TeV(G:B]X@AQ7Io_K$-lWdbm[D2p?R]aS\+,fsWZ]UrZ5Wp0%I6LJ*BrNV"5UCeH.2SP+7/.3c_@:V*2";"T@KB547iXIoB(k>%C+T6 8!8gH2Qk.#>ho#AcDa$\Ap_iEE$S$9.j_;Bk/<-@r==!XdaQ9qHr)(P(VnZ5T0:th'Cj5)W:nVTStP5[5"+>@ .pkF8F.9!IHoCYV&NRf@jm:*K$QCI^0n"+"9KlmKKg+#^,?a1-ccW6>SkV3/cq,p#5\pG@DFh_H2LB3>!)'AZ" 0k+@5>$6+!5L**RD:2RiTj;tU;Jd@D=1.TO1[[qQH.3`Uu)ibLF#4]L'R6F"hSHE7 O=g1*E\NRVgp#54J[DDA)n`.B9s,AaEH`/T']"Bjm"aD_&(guNS-tH)\aY>i%R/2o q2f'a$YjG@C8$%0u>R:q%l3iiji$&,\XXO':3#.@.5u;E QrV%Fd;Be0)()sW5!V_QRBOO!8fh9Bt(@\lbm:mG8::)6-t2%>HkVN/Y;58Lor*NR %[g,g.C>mj6mN?;pT"l^(Cb-T.g790p[YfkQtQiAA5B_,`a:OD A*johC-\+`I0cWC=\fQ[]oc3nP'sT,Li2jrrBoZ,>">6k!^l7hHAQY&dMV!FJ"CSn;?,)g.gr-m`I=*C`4?Vqe!9Dp ;+5eofFQaDe4!<#,n41K94&igXB- QNS@eP?^)f3U"F@J%k^kr(S4Y0drm%C'JR3QIfufBZ=Z/)s?q[5gDeeYbf'h=c3!: L8=I^+Sp[NT9I3cZ8k-*[A0tKK`DKb(YXj,RYt"3j.HC`^n*=BEP;errC&&.(=#B@ GY-^1$+Z6-9ei`7Jf:D[bG!_?\,A]ZoaRj`GFUG;E`X.B1r+d>Bk/SkP.F)41uhBS @u&#pDcc3A:UK6Ol!M3^)2XirPGD*-[;URkSXkX$m,)iBj\8DM *(q]Xmqaqctg);i5Ku<5%SEQ0Nf=sG?j0c!9Upun:0GYL#nHG;7b?Gj$,8MHoN1_f /7'u4!hJ$a2aX8M6,i:[A0#@2,in6&)gkaGYe%1pikc+(A=3W=P^:l>M_#s,5U=_I E8I>Gh"e@ ?(D1nsnai@\b*QYDU%-"G=bg>$m)mi&7(*#m"WZV%!EMqgQ`Bf>Ds[o@cEb/-d^X- Y/?hi&Sblpj5j,1cgfShs'N>F9p\!68?e@lb?Pb:+^)p\HrYj:.q8:/uSU2V:M&-:GWi,#bi umMBjZ<$_)=W;8l]OTmU1ZHsb!/NaQVg+iL]"RI,DJ_%h%@i,A^e:=^P_$=GHh5=Z&H;aH74dmZ6 [bEgc9^#A#FMReMP7"uh>.YkeQ_D[>QN>5c[r^)i$`&j=)B/JfdnUMrdM?t6>ia 1Oe0GJQc@hg@SpebhLW^OMY[+cUQqQ0;qn:[PLJm0<8t4@(QkM0-el,8V-mB2RQ33 EG=W"TV["c1*"0p3sHu;rYa0):kmsa[A%d4?cKoj`_0O+"06"-Q-A0W>3YPQf5-cN D%5tCY#m(')2]/\cGj_mC1_=f\dr4"4uWl^Z,jY_nr#[FaXd"nV;`K0=;VJnmc:KVcL7XKs,Rjff\T(j3prAN[ IV?Ec>h?grrDB8L_44+L/Pu_7a(f!:IA=b1%K,]('KVeBSc$urN5]hN)(?aLT,YA+\&M5oduE&L)uDo]J&o rlX+N@GkXQW_fcSo!S'OR`-G1Yu;;W@rBVAH)W:\LmUJ5Tb5qX5f_9>*GFm;B)Z>N WLcI`u#lJPC;uD$b1S]eSUTm];/jfgj9D'=R2d)njRUFD>sT!,p],PX7l;>[s"6X@ .KD<&"A^Vcj/9n%u>TdWh6WqUpa]Foo _[&C>VI:mYBp#J`BF:O]E>4A2cNEBY(XKX/%d'Z>>UUbQt_(*XsW?G/d5a`*tc12ohK5kW,%d kp;7%;aDG/8/8%3hN6NIg]$eKF_j;o3C#Y$]2q*Ze%C/`FVcF5gbu.TqqmH)f`+Zc if>TCMeA5olc>)"(rn-bo5H]:72Z,JB%:)2n'No'4'n0.^UgP&!_>!T2Y)>lV\f7g `3Q/4[*6jNP<2)#%risFIs(K'jO@%>6m(6Q*-oW!;Z[*<-"B9A*^4b Z:Yf0Ut^qiB;lsZ^L:E-V7u0oEpcL,O0"_X'l!MeOh9WQL_gQO/^0'!2f,241+O0; ]tHF5OOZdeXJ]ZVhJ]gArCU1/9//NNmugS8_"1&`#X$jV[BWq9hhNA?-(lTQH%G;Ro VU@?c'^pG7mWcsrr>Xkf@%CV"k$%\"Iop]7(@5PIC h7B_bO0p"+:LkgN9;Rj!&E\"380dCBUN!J0WQX:36l^1gjr``L#S#;N@G5dA<,G6! [lZ4i5XG3T-Kt'He(;#08/RE=l%_7bpBo.ThYl&IdnYb,MpOZ),&J81rF320pVI*$ e+mZ9g6haNqb4uhP^qH)<6f>p#_r/h1iBLg99$QQ8[M_Fb?2o41^X@CCmjMhT5D.6 #j+X@tr$OV9R+A5 T9_C\]<`1VpuFV(h8CnRb334#L:66+%cN(]LJJ77QPT^E@e8qd`hRg`reMjeG*h>O ,Ghh4udWtVqHij^NUn,/DWl"N1=tHMT##@Z_HcoZJ'%*(ah%`NWe:knAZf=Eac.#H4`bdNF^i8T`W4[Z]<-d-u<)4K0^%*D%CGX F4bfYD;9^*Kf_H8X""udl?>H3!T.DdC$*] Km8+pNhmcVjt3j@k4L^!/AT7PR^11Nd7Y9Iu%P'hNdfJ1?VfG(Qf$^",#+9. Acea7F:\a'_nDJF]d>!i4c^_H-e&_10EV94&[LPr40r3[<2uhGa$$kD9^>.Z$gtKWC=LK<`-4%]?E?B.#_8 8cgGc6M%<$NC+6mnKB9-8lXc#NYk`!Eg<[Lc6l"^!@QCWsBoim\;A(O;)1Pf+hi\Q OWrp*iUM,S.+fjetHdd/6;0S??)QhlTc1:1hN3Hk7S'\.Q.FTjn6r9O_IZTY9DU3#IbtM_R'ik0+fP[Dl$]"k9Pa.J3!BEgmi4K[/@_2T !Y-RQSM7CE^\4]m?f%"ULQ8IL::Rc5N4GnbgWJ6rrAXL]1[Jh^i+gAiEm:*lLX66p 6XKjU>3mM#bPeG,tAinI_6!fHnn%rOWleKcUrrUQA7B`5m*)G!1mu'nB\t.]OIo;( $27jB1;DJRck^a>k)$`h%F`l:ZB^.!-q;qQ$%D2k.Eb\qS;0jFnAp\3QGa Z@(4Obk8i18Gt]EVS._2seB?Qt$T2*R4L7EEpMgn@M]I2/2G895jI'A6Gd#Nq\Dh, V,*!Kf`B=dt9n*XnK0r*GXHb9.ATCkt1bcAMHO0J.[>mb@KO^N]r^[`,EO%IBW'W;jr`M?bD+ CfuB:U.+0Ht30V"S_F5Z#so^=C']VGA>4H`G]qHDBZN!1',235,0?kidNtkEZ5^EbUm6+fsj\G ;#DEOk;Up!-bTN`;uFO^E82!5ffO2G9l\m7\"b%&,J^6@ZkPC>Z>ZM4qlZ>&!K>[!WKf5Grf-p m9<2'BAi@IPe%lG!"5:KRMtUlSo qZpZe"HaQ\Jn:./o+rdrLCMIQK9]k[t7\"Pdom5!Us*BOi7q'm:@mTc%sXOWqR_:) )Gp'bRon5%S.Yr=5S>U^qUCnG<=#L?SMAU#3J(o.t:+Z2ME`OIq@lQD6sblA,p,R- j0':`;3d5XU.Xc\[P!LFcc!#>kG`4]"KWTZ4MP'-RqQ6Q[$F,Dhi^.he&J:3(Q,_5 bUh\Y"7hAQ/]OoIq5ChSk8hn&OR,cYQ=o'#Kla$IG]crUQL4R@s02!9sS9]p\Gf"m o-[,OEiI?Ju:=aQ"KmT\h>#d\)%+sniTWZ,WtYcUb4fG$@abM^Ob4Aa@Fe^`E]P[eA^ouj#Qc%D]k.[EtLqZX7j\C5)M`]U0Y$)iEp CkO:Z7l;dh+@!!(#cPtCgP[@m;fa!,JoZ1JPhmBfG0dHgc"R+8?Gn@@s9[Q(YT/L) ;MVh6U$JI'-qM0Ze+?[j$4?O8@(i\F0o.U%Q8rlN]A,[a7a=H=?A.NTQ18EI>OiC@ m72fCn&M)Y"A%WIX;EuDrLB\$JaK`NgpgeKl:k9!)7(W2R/X?*4GnX7L*\3p1rt22 VURH.j(7>ELqca+Hk-8*(g_=0-@.m!#gFJ:c]gn8T.rr?6+V^uC_CSIZ@4&_crW3n7eXWt,&/3-N\UjCAlU=n;Sb R?+^[!\mQ\;t]77nsj4Q]Bu1OQ"#`]6MC")T7H5IWL?GTU>-$)!X;uC!*lMY`h-_N "A=_S=\O(p!!JB=e9D_-,G_)c1CH)!(tYKSSbK\://Ba&!f[b_">\!f!-FJV&H-N? p6i'Y2PJ0m=EiqFV&F5OM^Ui#s@*"YeXbCNS3@EFJ&kR>.q>%`T5en1fKS&KD3-;j SDenF[Xc%RFb8mj6Vs2N+8+5QLr3BNoH^pmbUOJp-lS=I#Nu9oju0Nk>Jr*C(nE3G E+!F[^(V5Yl]Fl_isnb=guj*G-\RP1P^Q0dpIIkmoh4sGQ?a`/)%3#Cp ?UG.d]M];]CYK0/L:gEYc^q-lg=Jo"?/5;rOuBAE(C)SO=;Kl*.cigY=!.3p+lfZk 2SGsJO2?W!'9,8\'i/bf*Q^6;jJS%$.!!RAntIK)L]8bIOEYhJcu3I2p)[u1P!NUc V2[h>rT_`%[D:Q+%o8J21ZU1)(lMi)iWs6F29(+,H/r%FIGhX_5,j5X"f0HnsG7Bc &S8h36+YP[8VG3=feg@)JUWnYdY7bra[H?GN0n\/!b)uDmF+'l:e\k`uR#3m>*i]u@'@u^oaj bI5lE][>enI,&HT>UN,A&&j5i[ZHgNn.>V0r-ME8Ef-rRCB*s(s(tj"1$O[oY2.9? KN8:'3*Fu!OeK\$sdq/*OsEBZLmNT=P:diQS3F2_[Z^mEefd7kjL,Ur+2Xm( "Ve0/',q1DfHJ$b`UBC/DG^Z)iX.aj#ApXT+#h6&U6ga;KuJ(n8)Mb-'d,n#"5mEL 2b&nIG"kukHAd[,*!+)f1GKDRdT/YC8%FQ7T,;YZ%+- \cc"r4C3/h7%JU\Bj2AA$:8=d-e;5mX-C_SKKUb*,uFa)k?!P"(CSf].R35*`FG'5]C$Co0;8^ q^>1\:#b,Ig(;P?4-3TQhJ*jHX/Z9:$ce"an#DUi%b#YE8$>1inXmJW3a.F\qo`r` 2Orbl3QZ/CZ^]3A&6lC`h*`GBO;3$o\U+&L!4S^4oUu'1!KoJ<#G]!"^=",HQ3sBn .3AX)giLtCDN>rY7a-L27iU,P/4'l:dg`16sGKC7fWr--j.!-^LXMUr#+u5icoA@! )i\GP`Kr"7SCFXZ,r"@?^Sj/OqWu`"+UPq*sm(NN?8QPeMTqk)daS0EpdPRd\MFP8 `UU*@8pVqA#VK14Y(,_g3n>`CEWDcD/X%[W[4*G@2OEfK#9Ug7X4*RmPGI.1+d"RM )U$Z[FFZh9.F/IqdFMl#/MDoS.\#m!L_l,gD`oXjcY,1GG=B6("2%n,J1B=a_opX[ ptJ!,Tat=-chJdO gCkR\Knl3($L)arLcWTE/W^+G r3'o^?\;HlTc;uYO,cXmtTOj`83`JD=45XWbtpU2QL)FficBr5>j#U-hs=:rn;i9c BkVW&&Q]g;Iu%f]%"-gQ]"\H[P9_eB8i?Lgn_:1C/8HJUgbX4+XSK9=+I(hj52_n%H;+78umZUN^a0hiNPI.8 %itM%CE[PH`6j2DRR-0QVpO?A43/bn]o8R:65/q9d$r%o=0p5 @&Al&[dk"@qQCqaAuUPYcBh8\+YI]4>M2'.G^4+_fc6prA.-so\7rSqESQHJ7N$!o WH3jd)-W/*ceDAWgmr!A"F4ZJ1rR@oUOeqZL-S4_&n3.1O.k)[2.1@b8DIH\AJ@28 +j!_[J3$;:_IdNDYr;$a3q6j2Eu.Eh"`q3?G`/kai*d8/UX$+20*Knf*/6Zn6B"R2B&JO 9R^C1-N=L"3UToIb$+?pV[//n/oP$*;H5OKk@iP^r6G$rZLCmNne0:4(c*_9kh""$ e];6QBuTfa`e6j/1uO2mF_,?#lsr^G?*!BCouN1T&J1OQ4-$;q@?cl)T0Y(SG7j"8 Bg0lWF:Iq`p\C^:]k7[%];!t/Rq?QaWtE$oEa?j'Q"J?/]+[%c`I1fSiZ?WLOLRS'\.=#K [-JHacZ@"bPqP^5@c;%$sg:8KOK/n6-e8)#GA9+[D*'dAY1aFb:(SJT?auA:Jus<[ mnteU5B>8P1`7.R6Pr:$4]8fI8:OXq;&3iEMdIThXUt\O[7fnN)i]QBX>_ff;Q$Li F=uklfr9S5E0$UeVB2BhmM^2`fai19EKW-(%O<%c\8s6_gC!r:k@b^1"]>YEV5t81 K:lgRTVI(E=#rgREo5PrYi;8eW'J]a(Sd>!p#8m59kIqkNY+ZV7!,&]q%GikbmMEn F'/E'YKMHpar%&!F'LO-j-$kF?<]"At%l@jC?]WaS[bp2Y4D@l"Xc`[ie53W#kWf/ t$8!q2)[!`nef4#O4>lX\dNS'&!.<]^\Sf_-Ato(uY?@".;*R>:.Jj-,__XrrBgD<(9!YH"#r?f @Djk=Gt>6o:]Psq29tQqteiVB]!6/H [Ts7=2\!"gaOd(IaOHoa5#hp_5uC^7e4u?>H'3ka,o$]C_,]t*l<=t1eS,1Q;P1u% o;r+dXW^q[9KT^V3"o*R?&:P@QPS+e@If.jH_)E<(r7_fK-HQ53K=a>i&f@C(OP)7 2;rZ&n":%5%ks^>k.2bF*P#hdNJh[fclUB!>aQE(`DN!4QkAVJ.h]q:=;,?Ih_ C6+7*e9iS9'>jb1p'gPj&">!b@tTIm;4@KRi/!hX:K2E:L5Pgk*l"[8jb23o+j'Df hunGoVa(HLK%fB`3@p":C=2X*HGWiiEli>N9AoF0mjN%.m_Y^;f1LL+l\OK>"!3Yi WWi_YXf*,!D"5XOc&M.)'m]?o#55]=Cq%k6&&,n(*fg<\[M"pSuL^V3qD'2?Ufrm/ tN%EN0"86N03Ah>u]h0_YQXTh$Dtnb+N4Fbg+6H3!>A-ae0,Qj5GKBg>Y[\h)QUEj sK?r?SWBVjTu1V>r@CkoSX_.g;OZeMVOOcEgt^iGA\s%,T`PB=%U!pk*;=TcKb]5/Q=AA8$2&dR>$\Rrk?FZj^J"j#F.W^UJIXFWjh6n[fYZbp<,iS TcPT1;u(FU_6/b#f6GX!(X-gCt#QRm&m]u@(:QIM!dq_TiKlJM'JO0GTOl.kh[etn LfH0X8$kjZHa=4D_Gq.V6G2^5iXi,CJF:qnEnEUQkrZt0ehk>>G-o@YVlSQ3Pi``2 :tD.]##RZE!HYgJ3PL`X(Q8mS*_cUi0/h&[&;kd/$-sFq%Bc$:0bBn,MV*>[9;:5R '!aYEh$c[i&U&H6_nLdB8SOd\^GA)\VGONqm3nM.hKMm&4$Fq#.,2/R0-]ua]"URE V6:n/`MT!6)DPMiN&liYde2"A!;KF+HcGV`:K^`BUo-qAjAB!N:GW)l/abVE?:_h[ ogq'ZkuZ45UZ`^HoiC=W[\CWbFq,f,AB(!kY6B$KmjABqRf)8FO.U1OY6!%c$,VUG kPGc4CiC@$D-''rr@h'-I8?"CN$"`Wtiq;0lC`6PedmHo04eEWATaTOmCZ"E_mQil.Lsq aZ-J:\uI5ZWlqeP.EmOhPm:8[mGAShQdFkXh:pJmarpL:0KDtl.>3;1JTT7*Nt?Bf _$'e)eR0Q17jkNj-oIENr%k0_]O`E>%R0?Ntt#n9QON`GfCgN\?c%4(cc7+6r,JOerr?e=5oajr>SMehh4HUf4.-D6.4r\ZcQiVYop,9(r [N:UnBRpj_qe3$'LeuhDCc!u!1k-BfJ\3I!::#SUusc!?iZk:rg'-N^-,ti-JIGXS>9>`:*o]FD2LK5Te;aZPMsDP Gn?)#:ZKsDXdCZoJpHG;7G#mC,7Z2?R,ND>E!uGM=Fs?+n4`hen(-V;oCRt%,Y[2^ 9-\;M%MhU:\P@AR]IV#D&^imYT8H^Z^BXU1iK"&^F VHQ:l1^LUB$lrZbd"2hZc;0:)g6bJZ;*);M"'lNbtIbSp_=$gILu;/_d=$696P#dZ nE6N>FTDb$Z>tE7: %-EOD- Q Q q 667.28 85.39 490 262.5 re W* q q [1 0 0 1 0 0] cm 0 0 595.28 841.89 re W Q Q Q q 1 w [] 0 d 0 J 0 j [1 0 0 1 37 55.78] cm q [1 0 0 1 0 0] Tm 0 0 Td /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -9.625] Tm 0 0 Td /F82_0 12 Tf (\004) [6.036 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413 -9.625] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 419.67383 -9.625] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.34766 -9.625] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.34766 -9.625] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.02148 -9.625] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.01758 -9.625] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.69141 -9.625] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.36523 -9.625] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.69922 -9.625] Tm 0 0 Td /F82_0 12 Tf (\001) [3.624 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 469.69531 -9.625] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.36914 -9.625] Tm 0 0 Td /F82_0 12 Tf (\006) [6.096 0] Tj Q Q Q Q showpage %%PageTrailer pdfEndPage %%Page: 3 3 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0.706376 translate 0.9983 0.9983 scale 0 0 596 842 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 595.28 841.89 re W q q [1 0 0 1 0 0] cm q 1 w [] 0 d 0 J 0 j [1 0 0 1 72 805.89] cm q [1 0 0 1 0 0] Tm 0 0 Td /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -9.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.3418 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.01562 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.68359 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.35742 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.03125 -9.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.70508 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.37891 -9.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.375 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.04883 -9.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.04492 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.71094 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.37891 -9.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.37891 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.05273 -9.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.72656 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.39258 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.06641 -9.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.74023 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.4082 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.07422 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.74805 -9.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.41406 -9.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.08008 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08789 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.0957 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.76953 -9.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.76562 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.76562 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.77344 -9.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.76953 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 203.44336 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.11719 -9.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.11328 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.7793 -9.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.7793 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.44727 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.11328 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.78711 -9.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.11719 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.79102 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.46484 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.13867 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.80664 -9.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.80273 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.46875 -9.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.46875 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.14258 -9.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.47656 -9.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.47656 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.14258 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.47656 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.15039 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.1582 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.49219 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.16602 -9.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.83203 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.49805 -9.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.83203 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.50586 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.17969 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.8457 -9.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.8457 -9.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.8418 -9.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.51562 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.52344 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.19727 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.86328 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.53711 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.21094 -9.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.88477 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.55859 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.23242 -9.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 471.5625 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.23633 -9.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -24.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.68164 -24.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.35547 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -24.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.02148 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.6875 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.35547 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.68945 -24.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36328 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69727 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.37109 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.04492 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.71875 -24.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.04883 -24.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.04883 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.71484 -24.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.71484 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.38867 -24.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.38477 -24.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.38086 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.38867 -24.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.0625 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.72852 -24.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.72852 -24.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.72852 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.40234 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.07031 -24.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.74414 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.41797 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.08398 -24.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.0918 -24.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.76562 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.43945 -24.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.10547 -24.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.10547 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.77148 -24.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.44531 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.11914 -24.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.44922 -24.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.12305 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.79688 -24.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.46289 -24.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.46289 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.12891 -24.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.80273 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.47656 -24.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.81055 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.47852 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.48242 -24.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.47852 -24.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.15234 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.81836 -24.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.82617 -24.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.82227 -24.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.49609 -24.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.16211 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.83594 -24.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.83594 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.16992 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.83594 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.84375 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.17773 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.85156 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.52539 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.52539 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.19141 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.86523 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.53906 -24.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.87305 -24.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.86914 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.86914 -24.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.86914 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.54297 -24.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.2168 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.89062 -24.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 463.56445 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.23828 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 473.57227 -24.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.23828 -24.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.00781 -39.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.00391 -39.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.67383 -39.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.34766 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.68164 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.35547 -39.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.35156 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.01953 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.02344 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.69727 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.37109 -39.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.37109 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.04492 -39.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.71094 -39.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.37695 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.05078 -39.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.38477 -39.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.38086 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.05469 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.38867 -39.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.38477 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.05859 -39.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.05469 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.72266 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.38867 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.0625 -39.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.0625 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.39648 -39.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.4043 -39.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.4043 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.07812 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.08594 -39.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.08594 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.75977 -39.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.42578 -39.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.09961 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.77344 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.10742 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.78125 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.11523 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.12305 -39.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.78906 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.46289 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.46289 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.12891 -39.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.80273 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.46875 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.14258 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.81055 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.47656 -39.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.15039 -39.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.15039 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.82422 -39.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.1543 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.82812 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.49414 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.16797 -39.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.49805 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.83203 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.50586 -39.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.50195 -39.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.17578 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.84961 -39.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.18359 -39.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.85742 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 421.52344 -39.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.52344 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.18945 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.85742 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.53125 -39.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -54.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.01367 -54.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.00977 -54.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.68359 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.69141 -54.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.6875 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36133 -54.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.36133 -54.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.36133 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.36914 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.04297 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.7168 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.39062 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.06445 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.07227 -54.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.07227 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.73828 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.07227 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.74609 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.75391 -54.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.75 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.42383 -54.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.42383 -54.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.42383 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.09766 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.76562 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.76953 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.44336 -54.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.44336 -54.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.11719 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.79102 -54.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.46484 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.13867 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.80469 -54.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.80469 -54.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.80469 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.8125 -54.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.48633 -54.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.16016 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.49414 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.16797 -54.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.8418 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.17578 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.8418 -54.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -84.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.00586 -84.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.67188 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.67969 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.01367 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.6875 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.6875 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.35352 -84.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01953 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.68555 -84.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.68555 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.35156 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.01953 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.68555 -84.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.35938 -84.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.0332 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.70703 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.04102 -84.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.03711 -84.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.71094 -84.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.37695 -84.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.04297 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.70898 -84.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.04297 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.04297 -84.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.7168 -84.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.39062 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.06445 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.73047 -84.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.72656 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.40039 -84.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.07422 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.4082 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.08203 -84.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.41211 -84.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.4082 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.08203 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.75586 -84.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.42969 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.4375 -84.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.4375 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.10352 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.77148 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.44531 -84.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.44141 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.11523 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.7832 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.7832 -84.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.45703 -84.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.13086 -84.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.13086 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.80469 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.80469 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.13867 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.8125 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.14648 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.82031 -84.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.1543 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.82227 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.82617 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.5 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.50781 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.50781 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.18164 -84.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.17773 -84.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.17773 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.85156 -84.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.18555 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.51953 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.18555 -84.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.85938 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.85938 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.52539 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.19922 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.87305 -84.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 475.54688 -84.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -99.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -99.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.00391 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.67773 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.3457 -99.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.3457 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01953 -99.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.01562 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.68164 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.35547 -99.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.35547 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.02344 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.68945 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.36328 -99.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.35938 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.0332 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.70703 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.37305 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.70703 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.38086 -99.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.71094 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.37695 -99.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.05078 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.38477 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.05859 -99.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.05469 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.72852 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.40234 -99.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.73242 -99.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.39844 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.07227 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.07227 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.74609 -99.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.08008 -99.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.08008 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.74609 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.41406 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.08789 -99.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.08398 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.75781 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.42578 -99.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.42188 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.0957 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.76953 -99.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.76562 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.43164 -99.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.76562 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.09961 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.77344 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.77344 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.43945 -99.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.10547 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.77148 -99.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.77148 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.4375 -99.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.77148 -99.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.76758 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.44141 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.77539 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.10938 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.77539 -99.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.77539 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.44336 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.43945 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.11328 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.78711 -99.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.7832 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.44922 -99.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.7832 -99.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.45703 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.13086 -99.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.79688 -99.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.79688 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.46289 -99.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.13672 -99.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.81055 -99.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -114.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.01367 -114.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.34766 -114.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.69531 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.36133 -114.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.69531 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.0293 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.70312 -114.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.69922 -114.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.37305 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.03906 -114.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 89.37305 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.04688 -114.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.71289 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.38672 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.05273 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.38672 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.06055 -114.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.73438 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.74219 -114.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.41602 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.08984 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.75586 -114.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.08984 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.76367 -114.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.42969 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.76367 -114.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.75977 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.42578 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.42578 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.09961 -114.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.43359 -114.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.42969 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.10352 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.77734 -114.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.77344 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.43945 -114.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.77344 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.44727 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.11328 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.78711 -114.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.46094 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.12695 -114.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.12695 -114.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.12695 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.79297 -114.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.78906 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.45703 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\013) [7.356 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.46094 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.79492 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.46094 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.13477 -114.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.46484 -114.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.13867 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.8125 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.14648 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.48047 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.1543 -114.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.82031 -114.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.48633 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.16016 -114.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.49414 -114.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.16797 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.8418 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.50781 -114.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.18164 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.84961 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.8457 -114.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.51953 -114.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.51562 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.18945 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.18945 -114.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.86328 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 461.53711 -114.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.20312 -114.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -129.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -129.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.66992 -129.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.66992 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.67773 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.35156 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01953 -129.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.01562 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.68945 -129.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.68945 -129.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.68945 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.69727 -129.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.69336 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.36719 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.70117 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.03516 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.70117 -129.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.03516 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 129.36914 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.04297 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.7168 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.7168 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.38281 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.05664 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.73047 -129.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.73047 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.39844 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.06445 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.73828 -129.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.41211 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.74609 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.41211 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.08594 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.08594 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.75977 -129.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.42578 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.0918 -129.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.42578 -129.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.42578 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.09961 -129.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.77344 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.44727 -129.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.12109 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.79492 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.12891 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.79492 -129.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.12891 -129.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.80273 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.47656 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.15039 -129.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.48047 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.1543 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.82227 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.49609 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.16992 -129.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.84375 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.51758 -129.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.51367 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.1875 -129.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.18359 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.84961 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.18359 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.85156 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.51758 -129.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.19141 -129.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.86523 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.53906 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.87305 -129.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.54688 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.2207 -129.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -144.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -144.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -144.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -144.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.01758 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.69141 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.36523 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.03125 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.69922 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.37305 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.70703 -144.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.70703 -144.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.38086 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.05469 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.72852 -144.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.39453 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.06836 -144.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.40234 -144.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.07617 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.75 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.42383 -144.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.41992 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08789 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.75391 -144.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.75 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.42383 -144.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.75781 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.0918 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.76562 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.76562 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.43164 -144.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.09766 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.76367 -144.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.76367 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.42969 -144.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.76367 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.4375 -144.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.10352 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.77734 -144.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.45117 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.125 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.79102 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.45898 -144.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.45508 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.12891 -144.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.12891 -144.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.12891 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.80273 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.4707 -144.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.4707 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.14453 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.15234 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.82617 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.5 -144.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.17383 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.84766 -144.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.84375 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.51758 -144.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.51367 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.17969 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.84766 -144.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.51367 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.1875 -144.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.19531 -144.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.86133 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.53516 -144.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.20898 -144.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.20508 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.87891 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.55273 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.2207 -144.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.2207 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.88672 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.55469 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.22852 -144.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.22461 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.89844 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.23242 -144.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\022) [8.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33398 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.00781 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -159.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.67383 -159.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.34766 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -159.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.0293 -159.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.70312 -159.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36914 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.04297 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.37695 -159.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.05078 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.72461 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.39258 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.06641 -159.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.0625 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.73633 -159.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.73633 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.40234 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.07617 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.08398 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.75781 -159.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 145.42383 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.08984 -159.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.76367 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.4375 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.11133 -159.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.10742 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.77539 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.7793 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.45312 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.46094 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.12695 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.80078 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.80078 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.47461 -159.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.14062 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.80664 -159.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.14062 -159.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.13672 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.81055 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.14453 -159.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.14062 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.81445 -159.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.14453 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.47852 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.15234 -159.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.14844 -159.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.82227 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.48828 -159.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.48828 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.15625 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.83008 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.16406 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.49805 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.17188 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.8457 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.8457 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.51172 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.18555 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.85938 -159.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.19336 -159.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.86719 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.54102 -159.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.20703 -159.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.87305 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.88086 -159.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.88086 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.55469 -159.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.55469 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.55469 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.2207 -159.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.89453 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.56055 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.22852 -159.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.22852 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.89453 -159.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -174.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.34375 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.67773 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.3457 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.6875 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.36133 -174.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.36133 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.69531 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.36133 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.03516 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.70898 -174.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.375 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.04883 -174.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.37891 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.05273 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.72656 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.40039 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.06836 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.40234 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.06836 -174.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.74219 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.74219 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.4082 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08203 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.75586 -174.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.42969 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.09766 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.77148 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.44531 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.11133 -174.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.00586 -204.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.33984 -204.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.33594 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.00977 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.34375 -204.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.33984 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01367 -204.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.00977 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.67773 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.34375 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.01758 -204.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.01758 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.35156 -204.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.35938 -204.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.0332 -204.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.70703 -204.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.71484 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.38086 -204.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.05469 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.38867 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.0625 -204.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.05859 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.73242 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.40625 -204.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.73633 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.41016 -204.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.07617 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.75 -204.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.42383 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.09766 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.76367 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.09766 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.76562 -204.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.43945 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.10547 -204.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.10547 -204.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.10547 -204.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.7793 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.45312 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.12695 -204.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.45703 -204.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.13086 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.80469 -204.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.4707 -204.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.4707 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.13672 -204.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.81055 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.48438 -204.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.81445 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.14844 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.82227 -204.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.48828 -204.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.1543 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.82812 -204.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.82812 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.49609 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.16211 -204.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.16992 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.50391 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.17773 -204.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.17383 -204.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.84766 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.52148 -204.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.85547 -204.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.5293 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.19531 -204.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.19531 -204.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.19531 -204.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.86914 -204.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.53516 -204.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.53516 -204.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -219.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -219.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.33984 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.01367 -219.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.00977 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.67578 -219.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.67578 -219.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.34961 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.02344 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.03125 -219.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69727 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.36328 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.03711 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.71094 -219.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.37695 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.05078 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.71875 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.72266 -219.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.71875 -219.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.39258 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.05859 -219.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.06641 -219.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.73242 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.40625 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 145.40625 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.74023 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.41406 -219.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.74805 -219.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.74805 -219.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.42188 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.0957 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.76953 -219.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.43555 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.10938 -219.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.44336 -219.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.44336 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.11719 -219.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.11719 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.11719 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.7832 -219.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.45703 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.12305 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.45703 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.125 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.12891 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.80273 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.81055 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.48438 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.15234 -219.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.82617 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.5 -219.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.49609 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.16992 -219.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.50391 -219.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.17773 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.85156 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.52539 -219.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.52148 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.18945 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.19336 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.86719 -219.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.5332 -219.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.19922 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.87305 -219.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.54688 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.88086 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.55469 -219.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.55469 -219.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.22852 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.90234 -219.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -234.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -234.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.02148 -234.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.69531 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.36914 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.70312 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.36914 -234.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.70312 -234.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.37695 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.05078 -234.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.04688 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.7207 -234.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.05469 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.72852 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.39648 -234.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.07031 -234.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.06641 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.06641 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.06641 -234.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.06641 -234.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.74023 -234.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.40625 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.08008 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.41406 -234.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.08789 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.76172 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.42969 -234.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.42969 -234.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.10352 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.77734 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.45117 -234.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.11719 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.79102 -234.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.125 -234.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.79102 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.46484 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.46484 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.79883 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.47266 -234.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.80664 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.48047 -234.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.47656 -234.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.15039 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.1582 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.83203 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.50586 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.50586 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.83984 -234.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.51367 -234.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.84766 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.51562 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.51172 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.18555 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.85938 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.85938 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.5332 -234.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.20703 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.88086 -234.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.21484 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.21484 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.88867 -234.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.88477 -234.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.88477 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.55859 -234.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.55859 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.22656 -234.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.22266 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.88867 -234.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.88867 -234.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.5625 -234.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.89648 -234.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.57031 -234.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.24414 -234.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -249.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -249.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.66992 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.34375 -249.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.67773 -249.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.67773 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.35156 -249.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.35156 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.68555 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.35156 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.02539 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.69922 -249.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.36523 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.03906 -249.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.03516 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.70312 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.37695 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.05078 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.72461 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 129.39844 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.40625 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.08008 -249.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.75391 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.41992 -249.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.75 -249.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.41602 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.08984 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.08984 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.75586 -249.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.42969 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.0957 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.10352 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.77734 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.45117 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.11719 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.78516 -249.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.78516 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.45117 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.11914 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.79297 -249.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.78906 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.46289 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.13086 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.46484 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.13867 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.13867 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.80469 -249.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.4707 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.13672 -249.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.13672 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.80273 -249.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.13672 -249.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.81055 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.47656 -249.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.47656 -249.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.47656 -249.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.15039 -249.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.14648 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.14648 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.14648 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.82031 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.48828 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.16211 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.82812 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.50195 -249.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.49805 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.16602 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.50781 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.18164 -249.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.18164 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.51562 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.18164 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.85547 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.5293 -249.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.19531 -249.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.86914 -249.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -264.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.67773 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.01172 -264.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.68555 -264.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.68164 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.01562 -264.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.68945 -264.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.01953 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.69336 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.70117 -264.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 89.36719 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.0332 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.70703 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.38086 -264.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.04688 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.05469 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.72852 -264.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.72461 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.39844 -264.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.39844 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.06445 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.73828 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.74609 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.08008 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.75391 -264.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.75 -264.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.42383 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.09766 -264.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.09766 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.76562 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.76953 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.44336 -264.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.44336 -264.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.11719 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.79102 -264.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.46484 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.13867 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.80469 -264.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.80469 -264.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.80469 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.8125 -264.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.48633 -264.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.16016 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.49414 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.16797 -264.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.8418 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.17578 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.8418 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.50977 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.17578 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.84961 -264.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.8457 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.51953 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.19336 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.85938 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.19336 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.86719 -264.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.19727 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.87109 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.87109 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.87109 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.54492 -264.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.54102 -264.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.54102 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.21484 -264.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.22266 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.89648 -264.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.5625 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.22852 -264.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.90234 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.57617 -264.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.25 -264.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -279.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -279.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -279.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -279.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.02148 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.68945 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.35547 -279.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.36328 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.69727 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -279.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.03711 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.70312 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.37695 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.05078 -279.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.72461 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.39258 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.06641 -279.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.0625 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.0625 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.07031 -279.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.74414 -279.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.74023 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.41406 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.74805 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.41406 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08789 -279.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.41797 -279.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.41797 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.08398 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.75195 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.42578 -279.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.42188 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.0957 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.42969 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.09766 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\022) [8.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.43164 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.10547 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.77148 -279.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.77148 -279.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.44531 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.11914 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.12695 -279.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.12305 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.12305 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.79688 -279.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.79297 -279.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.4668 -279.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.4668 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.13477 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.80859 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.47461 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.47461 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.80859 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.48242 -279.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.8125 -279.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.8125 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.48633 -279.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.48633 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.82031 -279.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.81641 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.48242 -279.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.15625 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.83008 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.49609 -279.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.16211 -279.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.82812 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.83594 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.50977 -279.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.17578 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.50977 -279.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 421.50586 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.17188 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.17188 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.8457 -279.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.8457 -279.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -294.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -294.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -294.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.35547 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -294.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36719 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.0332 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.04102 -294.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.71484 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.38867 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.05469 -294.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.72852 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.39648 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.39258 -294.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.06641 -294.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.0625 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.73633 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.73633 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.73633 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 153.41016 -294.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.40625 -294.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.40625 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.08008 -294.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.41406 -294.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.41406 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.08789 -294.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.08789 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.08789 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.75391 -294.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.42773 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.09375 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.76172 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.76172 -294.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.43555 -294.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.43164 -294.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.42773 -294.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.10156 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.77539 -294.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.44922 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.11719 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\024) [7.704 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.7832 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.45117 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.125 -294.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.79102 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.46484 -294.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.46094 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.13477 -294.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.80859 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.14258 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.81641 -294.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.8125 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.48047 -294.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.14648 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.8125 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.48633 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.16016 -294.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.15625 -294.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.16406 -294.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.16406 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.83789 -294.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.83789 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 421.51172 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.18555 -294.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.85938 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.52539 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.19922 -294.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.87305 -294.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -309.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -309.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.00977 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.68359 -309.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.35742 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.69141 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.36523 -309.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.36133 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.0293 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.69531 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.36914 -309.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.36914 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.70312 -309.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.71094 -309.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.70703 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.38086 -309.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.38086 -309.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.38086 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.38867 -309.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.05469 -309.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.72852 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.40234 -309.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.07617 -309.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.07227 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.40625 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.07227 -309.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.40625 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.08008 -309.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.07617 -309.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.75 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.42383 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.0918 -309.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.76562 -309.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.43945 -309.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.43945 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.11328 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.78711 -309.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.7832 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.79102 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.125 -309.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.12109 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.78711 -309.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.46094 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.13477 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.80078 -309.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.4668 -309.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.13281 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.14062 -309.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.81445 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.48828 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.1543 -309.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.16211 -309.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.83594 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.50977 -309.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.17578 -309.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.8418 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.84961 -309.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.84961 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.51562 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.84961 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.52344 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.53125 -309.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.52734 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.20117 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.53516 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.20898 -309.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.20898 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.87695 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.21875 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.89258 -309.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.89258 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.22656 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.89258 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.56641 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.24023 -309.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.90625 -309.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.58008 -309.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -324.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -324.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -324.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.01367 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.67969 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.35352 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.02734 -324.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.02344 -324.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03125 -324.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.70508 -324.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.37891 -324.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.38672 -324.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.05273 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.71875 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.39258 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.06641 -324.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.0625 -324.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.07031 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.4043 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.07812 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.75195 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.75195 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.41797 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.0918 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.76562 -324.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.09961 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.77344 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.44727 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.11328 -324.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.78711 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.45312 -324.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.45312 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.45312 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.11914 -324.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.79297 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.80078 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.47461 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.14258 -324.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.81641 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.49023 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.15625 -324.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.49023 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.82422 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.49805 -324.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.16406 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.83008 -324.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.83008 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.49805 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.16406 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.83789 -324.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.16797 -324.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.16797 -324.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.8418 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.8418 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.50781 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.17383 -324.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.50781 -324.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.18164 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.85547 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.18945 -324.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.86328 -324.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.53711 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.21094 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.21875 -324.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.89258 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.56641 -324.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.24023 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.91406 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.24805 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.91406 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.58789 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.26172 -324.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.5957 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.26953 -324.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -339.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.34375 -339.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.01758 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.68359 -339.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.01758 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.69141 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.35742 -339.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.69141 -339.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.36523 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.03906 -339.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.03516 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.36914 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.04297 -339.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.03906 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.70508 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.37891 -339.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.05273 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.7207 -339.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.7168 -339.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.39062 -339.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.06445 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.39844 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.07227 -339.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.07227 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.74023 -339.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.41406 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.08789 -339.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.08789 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.08789 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.76172 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.0957 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.76953 -339.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.09961 -339.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.0957 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.76172 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.43555 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.10156 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.10156 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.77539 -339.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.44141 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.11523 -339.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.44922 -339.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.44531 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.11914 -339.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.11914 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.78711 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.79102 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.46484 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.13867 -339.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.13867 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.8125 -339.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.47852 -339.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.14453 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.81836 -339.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.15234 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.82617 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.5 -339.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.17383 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.83984 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.51367 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.1875 -339.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.52148 -339.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.19531 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.86914 -339.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.53516 -339.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.20117 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.875 -339.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 419.54883 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.88281 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.55664 -339.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.55664 -339.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.23047 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.9043 -339.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.00781 -354.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.00391 -354.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.67773 -354.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.35156 -354.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.68555 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.35352 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01953 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.69336 -354.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.02344 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.69727 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.37109 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.04492 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.71289 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.04688 -354.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.7207 -354.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.7168 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.05078 -354.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.72461 -354.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.05469 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.72852 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.39648 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.07031 -354.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.74414 -354.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.41016 -354.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.08398 -354.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.41406 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.74805 -354.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.74414 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.41016 -354.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.41016 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.74414 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.41016 -354.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.08398 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.75781 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.76562 -354.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.76562 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.43945 -354.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.10547 -354.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.7793 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.45312 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.78711 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.46094 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.79492 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.80273 -354.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.80273 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.46875 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.80273 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.47656 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.48438 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.1582 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.83203 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.50586 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.17383 -354.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.84766 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.52148 -354.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.19531 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.19531 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.86328 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\014) [6.78 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.19336 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.86719 -354.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.86719 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.86719 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.875 -354.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.875 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.54883 -354.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.54883 -354.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.54492 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.54492 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.21875 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.55273 -354.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.54883 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.22266 -354.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.22266 -354.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.22266 -354.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -369.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -369.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33594 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.00977 -369.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.34375 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.01758 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.68359 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.68359 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.01758 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.69141 -369.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.02148 -369.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.69531 -369.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.36914 -369.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.37695 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.05078 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.71875 -369.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.38477 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.05078 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.72461 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 129.39844 -369.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.39453 -369.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.06836 -369.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\010) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.00391 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.67773 -399.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.35156 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.02539 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.69922 -399.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.70703 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.38086 -399.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.04688 -399.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.71289 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.38672 -399.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.38281 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.38281 -399.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.05664 -399.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.05273 -399.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.72656 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.40039 -399.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.73047 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.4043 -399.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.40039 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.40039 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.4082 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.07422 -399.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08203 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 153.41602 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.08984 -399.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.75586 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.42188 -399.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.75586 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.08984 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.75586 -399.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.42969 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.42969 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.0957 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.76953 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.44336 -399.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.11719 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.78516 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.45898 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.12695 -399.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.12695 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.80078 -399.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.79688 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.46289 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.13672 -399.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.4707 -399.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.14453 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.81836 -399.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.49219 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.16602 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.17383 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.84766 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.52148 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.1875 -399.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.1875 -399.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.18359 -399.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.85742 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.53125 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.19922 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.86523 -399.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.86133 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.53516 -399.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.86914 -399.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.86523 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.53906 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.87305 -399.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.86914 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.54297 -399.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.53906 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.20703 -399.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.87305 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.54688 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.54688 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.2207 -399.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 461.55469 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.22852 -399.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -414.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.35352 -414.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.35352 -414.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.35352 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.01953 -414.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.34961 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.02344 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69727 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.69727 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.03125 -414.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.70508 -414.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.03906 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.70703 -414.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.37305 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.04688 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.04688 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.7207 -414.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.05469 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.7207 -414.73633] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.39453 -414.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.39453 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.06836 -414.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.39844 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.07227 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.74609 -414.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.41992 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.09375 -414.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.08984 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.76367 -414.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.75977 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 203.42578 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.09375 -414.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.75977 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.43359 -414.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.10742 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.77539 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.44922 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.7832 -414.73633] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.7832 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.45703 -414.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.13086 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.80469 -414.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.47852 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.15234 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.48633 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.15234 -414.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.48633 -414.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.16016 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.82617 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.5 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.50781 -414.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.17383 -414.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.84766 -414.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.84375 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.51758 -414.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.84766 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.51367 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.52148 -414.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.51758 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.18359 -414.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.18359 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.85742 -414.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.85742 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.52539 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\013) [7.356 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.5293 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.86328 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 421.5293 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.20312 -414.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.5332 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.5332 -414.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.20703 -414.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.88086 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 467.55469 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.22852 -414.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.00781 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.68164 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.68164 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.69531 -429.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.70312 -429.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.69922 -429.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.37305 -429.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.37305 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.04102 -429.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.71484 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.38867 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.05469 -429.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.38867 -429.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.05469 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.72852 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.72852 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.39453 -429.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.06836 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.73438 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.74219 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.41602 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.08984 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.76367 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.4375 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.44531 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.44531 -429.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.11914 -429.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.79297 -429.73633] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.79297 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.4668 -429.73633] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.14062 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.81445 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.48828 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.15625 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.83008 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.83008 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.49805 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\013) [7.356 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.50195 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.83594 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.50195 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.17578 -429.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.50586 -429.73633] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.17188 -429.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.8457 -429.73633] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.8418 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.51562 -429.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.8457 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.51953 -429.73633] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.19336 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.52734 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.20117 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.86914 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.54297 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.20898 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.20898 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.54297 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.2168 -429.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.54688 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.2207 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.55469 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.55469 -429.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.22852 -429.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.22461 -429.73633] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.2207 -429.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.89453 -429.73633] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.56836 -429.73633] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj Q Q q 72 85.39 490 262.5 re W* q q [1 0 0 1 0 0] cm 0 0 595.28 841.89 re W q /DeviceRGB {} cs [0 1 0] sc /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 162 201.89] cm 0 -30 288 30 re f* 0 -30 288 30 re S Q q /DeviceRGB {} cs [1 0 0] sc /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 162 129.89] cm 0 -30 360 30 re f* 0 -30 360 30 re S Q q /DeviceRGB {} cs [0.8863 0 0.4706] sc /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 162 309.89] cm 0 -30 180 30 re f* 0 -30 180 30 re S Q q /DeviceRGB {} cs [0 0 1] sc /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 162 273.89] cm 0 -30 216 30 re f* 0 -30 216 30 re S Q q /DeviceRGB {} cs [0 0.6196 0.8784] sc /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 162 237.89] cm 0 -30 252 30 re f* 0 -30 252 30 re S Q q /DeviceRGB {} cs [1 0.9255 0] sc /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 162 165.89] cm 0 -30 324 30 re f* 0 -30 324 30 re S Q q /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 144 325.89] cm [0 -1 1 0 0 0] cm 0 0 m 240 0 l S Q q /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 144 85.89] cm 0 0 m 400 0 l S Q q 1 w [] 0 d 0 J 0 j [1 0 0 1 72 301.89] cm q [1 0 0 1 0 0] Tm 0 0 Td /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 1.28271 -11.7373] Tm 0 0 Td /F35_0 15 Tf (\003) [11.43 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.77783 -11.7373] Tm 0 0 Td /F35_0 15 Tf (\007) [7.83 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.12012 -11.7373] Tm 0 0 Td /F35_0 15 Tf (\013) [8.205 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.28271 -11.7373] Tm 0 0 Td /F35_0 15 Tf (\011) [7.785 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.625 -11.7373] Tm 0 0 Td /F35_0 15 Tf (\017) [8.145 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.7876 -11.7373] Tm 0 0 Td /F35_0 15 Tf (\023) [4.815 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.78271 -11.7373] Tm 0 0 Td /F35_0 15 Tf (\007) [7.83 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.62012 -47.7373] Tm 0 0 Td /F35_0 15 Tf (\000) [10.095 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.45264 -47.7373] Tm 0 0 Td /F35_0 15 Tf (\016) [3.135 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.62012 -47.7373] Tm 0 0 Td /F35_0 15 Tf (\024) [8.115 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.78271 -47.7373] Tm 0 0 Td /F35_0 15 Tf (\011) [7.785 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.44531 -83.7373] Tm 0 0 Td /F35_0 15 Tf (\001) [10.065 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.27783 -83.7373] Tm 0 0 Td /F35_0 15 Tf (\026) [8.1 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.62012 -83.7373] Tm 0 0 Td /F35_0 15 Tf (\007) [7.83 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.9624 -83.7373] Tm 0 0 Td /F35_0 15 Tf (\017) [8.145 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.77295 -119.7373] Tm 0 0 Td /F35_0 15 Tf (\002) [10.755 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.44043 -119.7373] Tm 0 0 Td /F35_0 15 Tf (\022) [6.03 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.27783 -119.7373] Tm 0 0 Td /F35_0 15 Tf (\011) [7.785 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.62012 -119.7373] Tm 0 0 Td /F35_0 15 Tf (\011) [7.785 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.9624 -119.7373] Tm 0 0 Td /F35_0 15 Tf (\017) [8.145 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.44043 -155.7373] Tm 0 0 Td /F35_0 15 Tf (\006) [10.02 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.61768 -155.7373] Tm 0 0 Td /F35_0 15 Tf (\011) [7.785 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.95996 -155.7373] Tm 0 0 Td /F35_0 15 Tf (\016) [3.135 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.12744 -155.7373] Tm 0 0 Td /F35_0 15 Tf (\016) [3.135 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.29492 -155.7373] Tm 0 0 Td /F35_0 15 Tf (\020) [8.625 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.45752 -155.7373] Tm 0 0 Td /F35_0 15 Tf (\025) [11.655 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.7876 -191.7373] Tm 0 0 Td /F35_0 15 Tf (\004) [10.755 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.62012 -191.7373] Tm 0 0 Td /F35_0 15 Tf (\011) [7.785 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.9624 -191.7373] Tm 0 0 Td /F35_0 15 Tf (\010) [8.205 0] Tj Q Q q 1 w [] 0 d 0 J 0 j [1 0 0 1 72 347.89] cm q [1 0 0 1 0 0] Tm 0 0 Td /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.26123 -17.0166] Tm 0 0 Td /F35_0 22 Tf (\005) [12.98 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.30225 -17.0166] Tm 0 0 Td /F35_0 22 Tf (\015) [4.598 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.41455 -17.0166] Tm 0 0 Td /F35_0 22 Tf (\023) [7.062 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.74072 -17.0166] Tm 0 0 Td /F35_0 22 Tf (\016) [4.598 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.85303 -17.0166] Tm 0 0 Td /F35_0 22 Tf (\011) [11.418 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.20068 -17.0166] Tm 0 0 Td /F35_0 22 Tf (\020) [12.65 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.63916 -17.0166] Tm 0 0 Td /F35_0 22 Tf (\012) [7.964 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.07764 -17.0166] Tm 0 0 Td /F35_0 22 Tf (\002) [15.774 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.18994 -17.0166] Tm 0 0 Td /F35_0 22 Tf (\022) [8.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.75146 -17.0166] Tm 0 0 Td /F35_0 22 Tf (\007) [11.484 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.98682 -17.0166] Tm 0 0 Td /F35_0 22 Tf (\021) [12.628 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.42529 -17.0166] Tm 0 0 Td /F35_0 22 Tf (\014) [11.946 0] Tj Q Q Q Q Q q 1 w [] 0 d 0 J 0 j [1 0 0 1 71.72 54.78] cm q [1 0 0 1 0 0] Tm 0 0 Td /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -9.625] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -9.625] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -9.625] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -9.625] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.02148 -9.625] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.01758 -9.625] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.69141 -9.625] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.36523 -9.625] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.69922 -9.625] Tm 0 0 Td /F82_0 12 Tf (\001) [3.624 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.69531 -9.625] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36914 -9.625] Tm 0 0 Td /F82_0 12 Tf (\006) [6.096 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476 -9.625] Tm 0 0 Td /F82_0 12 Tf (\005) [6.132 0] Tj Q Q Q Q showpage %%PageTrailer pdfEndPage %%Page: 4 4 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0.706376 translate 0.9983 0.9983 scale 0 0 596 842 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 595.28 841.89 re W q q [1 0 0 1 0 0] cm q 1 w [] 0 d 0 J 0 j [1 0 0 1 36 805.89] cm q [1 0 0 1 0 0] Tm 0 0 Td /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -9.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -9.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -9.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.02148 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.68945 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.36328 -9.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.0293 -9.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.69531 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.36914 -9.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.36523 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.36523 -9.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.03906 -9.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.03516 -9.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.70898 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.38281 -9.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.71289 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.38672 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.05469 -9.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.7207 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.39453 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.39453 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.72852 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.40234 -9.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.40234 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.07031 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\022) [8.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 153.4043 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.07812 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.74414 -9.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.74414 -9.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.41797 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.0918 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.09961 -9.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.09961 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.77344 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.44727 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.11328 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.11328 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.78711 -9.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.45312 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.12695 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.79492 -9.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.79102 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.45703 -9.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.45703 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.13086 -9.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.46484 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.13086 -9.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.13867 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.47266 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.14648 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.82031 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.82031 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.48633 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.16016 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.83398 -9.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.16797 -9.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.16406 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.83789 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.17188 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.50586 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.17188 -9.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.17188 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.83984 -9.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.51367 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.1875 -9.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.86133 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.19531 -9.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.86914 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.54297 -9.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.53906 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.21289 -9.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.54688 -9.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.21289 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.88672 -9.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.56055 -9.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.55664 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.23047 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.9043 -9.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.02148 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.69531 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.36914 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.03711 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.71094 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.37891 -24.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.05273 -24.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.71875 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.39258 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.39258 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.06641 -24.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.0625 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.73633 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.4043 -24.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.07031 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.74414 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.74414 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.07812 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.75195 -24.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.08594 -24.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.75977 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.43359 -24.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.10742 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.78125 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.78906 -24.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.46289 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.13672 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.4707 -24.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.13672 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.81055 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.81055 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.14453 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.81836 -24.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.81836 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.48633 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.15234 -24.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.82617 -24.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 253.5 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.17383 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.50781 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.18164 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.84766 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.84766 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.18164 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.85547 -24.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.18555 -24.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.85938 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.5332 -24.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.19922 -24.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.86523 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.53906 -24.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.21289 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.54688 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.2207 -24.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.2207 -24.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.89453 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.56836 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.57617 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.25 -24.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.24609 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.24609 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.91992 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.58789 -24.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.58789 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.26172 -24.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -39.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -39.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -39.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.35547 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -39.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36719 -39.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.0332 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.70703 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.70703 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.04102 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.71484 -39.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.04883 -39.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.04883 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.72266 -39.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.72266 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.72266 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.38867 -39.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.0625 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.72852 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.39648 -39.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.39648 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.07031 -39.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.73633 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.74219 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\010) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.74609 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.41992 -39.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.09375 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.76758 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.44141 -39.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.44922 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.11523 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.12305 -39.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.79688 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.4707 -39.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.14453 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.81836 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.82617 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.5 -39.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.49609 -39.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.16992 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.84375 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.51172 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.18555 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.85352 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.52734 -39.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.19336 -39.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.85938 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.5332 -39.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.5293 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.5293 -39.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.20312 -39.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.19922 -39.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.87305 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.54688 -39.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.87695 -39.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.55078 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.22461 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.89844 -39.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.89453 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.5625 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.9043 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 419.57812 -39.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.57812 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.91211 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.57812 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.25195 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.92578 -39.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.5918 -39.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.26562 -39.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -54.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -54.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -54.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.01367 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -54.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.69531 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.36328 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.03711 -54.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.70312 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.37695 -54.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.05078 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.72461 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.39062 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.05859 -54.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.73242 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.39844 -54.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.39844 -54.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.39844 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.07227 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.74023 -54.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.74023 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.41406 -54.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.41016 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.07617 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.75 -54.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.75 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.41797 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.41406 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.08789 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.76172 -54.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.75781 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.42383 -54.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.75781 -54.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.75391 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.42773 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.76172 -54.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.75781 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.43164 -54.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.76172 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.76172 -54.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.43555 -54.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.10938 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.7832 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.44922 -54.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.44531 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.11914 -54.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.79297 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.12695 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.80078 -54.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.13086 -54.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.13086 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.80469 -54.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.4707 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.13672 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.4707 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.13867 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.80469 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.8125 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.48633 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.15234 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.82617 -54.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.5 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.16602 -54.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.16602 -54.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.16602 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.83203 -54.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.16211 -54.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.83594 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.50977 -54.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.18359 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.85742 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.86523 -54.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.86133 -54.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.53516 -54.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.20117 -54.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.86719 -54.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.5332 -54.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.01562 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.01953 -69.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.01562 -69.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.68945 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.35547 -69.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.0293 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.03711 -69.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.03711 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.71094 -69.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.04102 -69.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.71484 -69.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.38867 -69.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.39648 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.07031 -69.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.06641 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.74023 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.4082 -69.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.4082 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.07422 -69.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.07422 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.74805 -69.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.74414 -69.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.74023 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.74805 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.42188 -69.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.08789 -69.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.75391 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.42773 -69.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.42383 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.42383 -69.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.09766 -69.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.09375 -69.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.76758 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.44141 -69.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.77148 -69.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.77148 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.4375 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.10547 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.7793 -69.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.77539 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.44922 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.11719 -69.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.7832 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.45703 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.45703 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.79102 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.46484 -69.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.79883 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.47266 -69.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.14648 -69.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.8125 -69.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.48633 -69.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.82031 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.48828 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\022) [8.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.82227 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.49609 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.16211 -69.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.16211 -69.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.83594 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.50977 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.51758 -69.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.19141 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.86523 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 419.53125 -69.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.86523 -69.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.53906 -69.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.53516 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.20898 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.54297 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.20898 -69.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.88281 -69.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -84.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -84.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -84.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.00586 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.67383 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.33984 -84.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.01367 -84.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.6875 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.36133 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.69531 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.69531 -84.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.36914 -84.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.04297 -84.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.04297 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.7168 -84.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.38281 -84.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.04883 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.71484 -84.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.71484 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.38281 -84.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.05664 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.73047 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.4043 -84.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.73438 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.40039 -84.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.4082 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.08203 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.75586 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.75586 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.08984 -84.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.76367 -84.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.09375 -84.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.09375 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.09375 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.76758 -84.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.43359 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.10742 -84.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.10352 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.76953 -84.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.76953 -84.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.44336 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.11719 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.79102 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.45898 -84.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.45508 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.12891 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.80273 -84.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.79883 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.46484 -84.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.79883 -84.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.79492 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.46875 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.14258 -84.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.13867 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.80469 -84.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.13867 -84.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.80469 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.47852 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.47852 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.8125 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.48633 -84.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.82031 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.48633 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.16016 -84.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.16016 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.49414 -84.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.16797 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.83594 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.50977 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.84375 -84.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.83984 -84.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.51367 -84.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.17969 -84.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.8457 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.51172 -84.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.8457 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 467.51953 -84.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 471.51562 -84.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.18945 -84.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -99.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -99.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 17.34375 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.01758 -99.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.35156 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.02539 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.69336 -99.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.35938 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.0332 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.0332 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.70703 -99.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.70703 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.375 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\014) [6.78 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.70508 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.37891 -99.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.37891 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.37891 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.38672 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.06055 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.06836 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.73438 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.4082 -99.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.4082 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.74219 -99.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.75 -99.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.74609 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.41992 -99.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.41992 -99.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.41992 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.09375 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.76172 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.0957 -99.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.76953 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.10352 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.77734 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.45117 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.125 -99.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.45508 -99.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.45508 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.12891 -99.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.12891 -99.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.12891 -99.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.80273 -99.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.46875 -99.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.13477 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.80078 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.80078 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.4668 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.80078 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.47461 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.14844 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.81445 -99.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.82227 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.49609 -99.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.49219 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.16602 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.5 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.16797 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.83398 -99.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.50781 -99.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.18164 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.85547 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.18945 -99.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.86328 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.53711 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.21094 -99.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.20703 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.88086 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.21484 -99.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.21094 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.21875 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.89258 -99.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.56641 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.90039 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.9082 -99.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.9082 -99.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 475.58203 -99.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -114.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -114.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -114.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.02148 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.69531 -114.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.36133 -114.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02734 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.70117 -114.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.375 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.70898 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.38281 -114.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.38281 -114.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.05664 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.73047 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.73828 -114.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.73438 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.4082 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.74219 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.07617 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.74219 -114.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.74219 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.74805 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\010) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.75195 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.42578 -114.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.09961 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.77344 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.44727 -114.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.45508 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.45508 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.12891 -114.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.125 -114.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.125 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.79883 -114.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.13281 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.80664 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.47266 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.14648 -114.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.82031 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.48633 -114.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.48633 -114.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.48633 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.15234 -114.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.48242 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.15625 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.83008 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.83008 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.16406 -114.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.83789 -114.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.17188 -114.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -144.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.66992 -144.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.66992 -144.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.34375 -144.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.00977 -144.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.67578 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.3418 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.3418 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.00781 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.3418 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.01562 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.68945 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.35547 -144.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.36328 -144.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.0293 -144.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.70312 -144.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.69922 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.37305 -144.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.70312 -144.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.70312 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 129.36914 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.70312 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.37695 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.38477 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.05078 -144.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.72461 -144.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.72461 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.39844 -144.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.72852 -144.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.39453 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.06836 -144.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.74219 -144.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.73828 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.41211 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.08594 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.75391 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.42773 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.09375 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.76758 -144.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.44141 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.10742 -144.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.10742 -144.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.10742 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.77344 -144.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.76953 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.4375 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.44141 -144.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.4375 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.11133 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.78516 -144.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.78516 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.45898 -144.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.13281 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.80078 -144.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.47461 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.14844 -144.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.81445 -144.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.81445 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.48047 -144.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.1543 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.82812 -144.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.16211 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.83008 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.50391 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.16992 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.84375 -144.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.17383 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.83984 -144.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.84766 -144.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.84766 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.52148 -144.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.52148 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.85547 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.52148 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.19531 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.86914 -144.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 463.53516 -144.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.20898 -144.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -159.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.34375 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.01172 -159.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.67773 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.34375 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.01758 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.69141 -159.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.35742 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.36523 -159.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.03125 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.70508 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.70508 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.03906 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.71289 -159.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.04688 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.7207 -159.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.38672 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.05273 -159.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.72656 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.40039 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.07422 -159.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 153.4043 -159.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.07031 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.74414 -159.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.41797 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.08594 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.09375 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.76758 -159.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.76367 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 203.4375 -159.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.4375 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.10352 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.77734 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.78516 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.45117 -159.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.125 -159.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.125 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.79883 -159.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.12891 -159.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.80273 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.47656 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.14258 -159.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.15039 -159.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.82422 -159.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.49805 -159.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.50586 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.83984 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.51367 -159.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.17969 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.8457 -159.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.8457 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.51367 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.51758 -159.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.51367 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.1875 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.86133 -159.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.86133 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.53516 -159.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.20898 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.87695 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.55078 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.21875 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.89258 -159.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.55859 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.22461 -159.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.89844 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.57227 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.24609 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.91406 -159.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.58789 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.26172 -159.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.93555 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.93555 -159.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -174.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.3418 -174.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.3418 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.00781 -174.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.00781 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.68164 -174.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.67773 -174.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.67383 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.68164 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.01562 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.68945 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.36328 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.03711 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.70312 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.37695 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.04492 -174.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.71094 -174.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.38477 -174.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.38086 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.05469 -174.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.38477 -174.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.05859 -174.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.73242 -174.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.74023 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.41406 -174.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.41016 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.08398 -174.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.08398 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.75 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.42383 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.09766 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.76562 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.09961 -174.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.77344 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.10742 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.78125 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.45508 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.12891 -174.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.45898 -174.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.125 -174.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.79883 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.47266 -174.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.14648 -174.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.14258 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.47656 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.14258 -174.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.14258 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.81055 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.14453 -174.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.81836 -174.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.81445 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.14844 -174.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.82227 -174.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.15234 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.81836 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.82617 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.82617 -174.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.5 -174.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.17383 -174.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.17383 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.84766 -174.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.51367 -174.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.17969 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.8457 -174.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.17969 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.85352 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.51953 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.19336 -174.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.86719 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.5332 -174.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.5332 -174.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.5332 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.19922 -174.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.19531 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.86328 -174.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.53711 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.21094 -174.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.88477 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.55859 -174.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -189.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 5.33203 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.00586 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67969 -189.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.67578 -189.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.68359 -189.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.35742 -189.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.02344 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.69727 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.69727 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.37109 -189.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36719 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.04102 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.70898 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.04297 -189.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.7168 -189.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.71289 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.04688 -189.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.7207 -189.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.05469 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.72266 -189.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.39648 -189.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.0625 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.73633 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.73633 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.41016 -189.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 145.40625 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.08008 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.74805 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.74805 -189.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.42188 -189.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.0957 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.76953 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.44336 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.45117 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.78516 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.45898 -189.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.125 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.79102 -189.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.125 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.45898 -189.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.13281 -189.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.12891 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.46289 -189.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.13672 -189.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.4668 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.14062 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.80859 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.14258 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.81641 -189.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.48242 -189.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.14844 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.82227 -189.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.82227 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.49023 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.49414 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.16797 -189.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.83398 -189.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.5 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.17383 -189.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.84766 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.18164 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.85547 -189.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.85547 -189.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.5293 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.20312 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.21094 -189.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.88477 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.55859 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.23242 -189.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.5625 -189.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.5625 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.23633 -189.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.91016 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.57617 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.25 -189.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.92383 -189.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -204.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -204.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33594 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.33594 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.00977 -204.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.34375 -204.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.01758 -204.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.69141 -204.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.69922 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.37305 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.03906 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.71289 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.38672 -204.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.06055 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.73438 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.4082 -204.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.73828 -204.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.73828 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 129.4043 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.73828 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.41211 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.08594 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.75391 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.08789 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.76172 -204.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.75781 -204.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.43164 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.10547 -204.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.43945 -204.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.43945 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.10547 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.77344 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.44727 -204.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.44336 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.11719 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.78516 -204.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.45117 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.125 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.125 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.79883 -204.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.79883 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.4668 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.4707 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.14453 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.81836 -204.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.81836 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.49219 -204.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.1582 -204.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.82422 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.49805 -204.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.83203 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.16602 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.83984 -204.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.83594 -204.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.50977 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.17578 -204.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.50977 -204.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.18359 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.84961 -204.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.84961 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.51562 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.18359 -204.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.85742 -204.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.53125 -204.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.52734 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.86133 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.86914 -204.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.86914 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.54297 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.55078 -204.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.55078 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.22461 -204.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.2207 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.88672 -204.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 467.56055 -204.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.01562 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.68945 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.36328 -219.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.03711 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.70312 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.37695 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.05078 -219.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.38477 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.05078 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.05859 -219.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.73242 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.40625 -219.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.07227 -219.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.73828 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.41211 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.08008 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.07617 -219.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.75 -219.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.74609 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.41992 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.41992 -219.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.41992 -219.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.09375 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.76758 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.44141 -219.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.10742 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.78125 -219.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.11523 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.44922 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.12305 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.12305 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.78906 -219.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.45508 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.12109 -219.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.12109 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.78711 -219.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.12109 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.78711 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.46094 -219.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.46094 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.79492 -219.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.80273 -219.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.80273 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.47656 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.48438 -219.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.48438 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.1582 -219.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.1543 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.82031 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.49414 -219.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.49414 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.16211 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\013) [7.356 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.16602 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.5 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.16602 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.83984 -219.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.16992 -219.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.83594 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.50977 -219.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.18359 -219.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.17969 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.85352 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.52734 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.19531 -219.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.19531 -219.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.86914 -219.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.53516 -219.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.20117 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.86719 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.86719 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.5332 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.86719 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.54102 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.21484 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.88086 -219.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.88867 -219.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.5625 -219.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 463.55859 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 469.55859 -219.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -234.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.68164 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -234.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.35547 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.0293 -234.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.02539 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.69922 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.37305 -234.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.36914 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.03711 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.70312 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.37695 -234.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.37305 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.04688 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.7207 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.38672 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.7207 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.39453 -234.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.72461 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.39844 -234.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.06445 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.73828 -234.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.73438 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.4082 -234.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.08203 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.41602 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.08984 -234.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.41992 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.09375 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.75977 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.43359 -234.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.10742 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.77344 -234.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.77344 -234.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.77344 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.43945 -234.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.76953 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.76953 -234.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.44336 -234.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.11719 -234.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.11719 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.79102 -234.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.45703 -234.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.12305 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.78906 -234.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.78906 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.45703 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.12305 -234.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.78906 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.46289 -234.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.46289 -234.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.79688 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.4707 -234.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.14453 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.47852 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.15234 -234.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.82617 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.49414 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.82812 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.50195 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.50195 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.16797 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.50195 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.50195 -234.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.50195 -234.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.17578 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.17578 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.8418 -234.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.51562 -234.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.51562 -234.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.18945 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.19727 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.87109 -234.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -249.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 5.33203 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -249.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -249.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33594 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.34375 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.67773 -249.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.35156 -249.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.34766 -249.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.02148 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.69531 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36914 -249.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.04297 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.71094 -249.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.38477 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.05859 -249.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.38867 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.38867 -249.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.0625 -249.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.73633 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.41016 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.08398 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.75 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.75781 -249.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.43164 -249.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.10547 -249.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.10547 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.43945 -249.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.43555 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.10938 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.77734 -249.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.45117 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.125 -249.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 203.45508 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.12109 -249.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.79492 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.79492 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.46875 -249.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.14258 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.47656 -249.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.15039 -249.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.48438 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.1582 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.82422 -249.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.82031 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.49414 -249.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.16797 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.8418 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.51562 -249.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.18945 -249.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.18945 -249.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -279.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 11.33203 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.00586 -279.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.00586 -279.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.33984 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.01367 -279.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.6875 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.02148 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.69531 -279.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36914 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.03711 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.37109 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.04492 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.04492 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.71094 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.04492 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.04492 -279.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.04492 -279.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.71875 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.71875 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.38477 -279.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.05859 -279.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.05859 -279.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.73242 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.74023 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.41406 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.42188 -279.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.08789 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.75391 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.08789 -279.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.76172 -279.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.75781 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.76562 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.09961 -279.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.77344 -279.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.76953 -279.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.44336 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.11719 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.79102 -279.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.46484 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.13281 -279.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.80664 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.48047 -279.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.81055 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.81055 -279.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.48438 -279.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.1582 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.83203 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.50586 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.17188 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.17969 -279.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.85352 -279.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.52734 -279.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.52734 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.86133 -279.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.85742 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.53125 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.19922 -279.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.87305 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.54688 -279.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.87695 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.54297 -279.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.2168 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.2168 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.89062 -279.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.56445 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.89844 -279.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.57227 -279.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.90625 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.58008 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.24609 -279.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.24219 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.91602 -279.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.58984 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.26367 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.9375 -279.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 469.61133 -279.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 475.61133 -279.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -294.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -294.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.66602 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.33984 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.33984 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.00586 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.01367 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.67969 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.35352 -294.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.35352 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.6875 -294.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.69531 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.36914 -294.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.36523 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.03906 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.37305 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.04102 -294.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.71484 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.38867 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.72266 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.72266 -294.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.39648 -294.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.07031 -294.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.07031 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.74414 -294.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.41016 -294.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.07617 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.74219 -294.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.07617 -294.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.75 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.42383 -294.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.09766 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.77148 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.44531 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.11328 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.7793 -294.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.45312 -294.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.12695 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.80078 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.13477 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.80859 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.47656 -294.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.15039 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.82422 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.49023 -294.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.49805 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.83203 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.50586 -294.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.17188 -294.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.83789 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.51172 -294.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.51172 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.17969 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.85352 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.52148 -294.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.19531 -294.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.86914 -294.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.86523 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.19922 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.20703 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.88086 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.55469 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.22852 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.90234 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.57617 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.24414 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.58594 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.25977 -294.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.25977 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.59375 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.25977 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.93359 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.60742 -294.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.27344 -294.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.94727 -294.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -309.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.68164 -309.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.68164 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.35547 -309.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.68555 -309.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.35938 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.0332 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.36719 -309.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.04102 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.70703 -309.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.70703 -309.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.70703 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.04102 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.71484 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.38867 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.38867 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.05469 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.72852 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.40234 -309.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.73633 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 153.41016 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.08398 -309.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.75781 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.43164 -309.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.42773 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.10156 -309.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.09766 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.76367 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.43164 -309.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.10547 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.7793 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.44531 -309.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.7793 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.45312 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.12109 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.79492 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.46094 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.13477 -309.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.13086 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.79883 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.13281 -309.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.80664 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.14062 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.81445 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.48828 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.16211 -309.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.49219 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.49219 -309.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.16602 -309.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.83984 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.51367 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.17969 -309.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.17578 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.84961 -309.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.52344 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.85742 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.53125 -309.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.86133 -309.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.53516 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.20898 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.875 -309.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.88281 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.2168 -309.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.21289 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.87891 -309.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.55273 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.22656 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.89258 -309.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.55859 -309.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.22461 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.23242 -309.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.90625 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 461.57227 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.24609 -309.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -324.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -324.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -324.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67969 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.35352 -324.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02734 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.36133 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.03516 -324.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.03516 -324.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.70898 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.38281 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.39062 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.39062 -324.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.06445 -324.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.73828 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.41211 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.08594 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.75977 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.42773 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.42383 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.09766 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.77148 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.77148 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 153.44531 -324.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.11914 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.79297 -324.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.12695 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.80078 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.13477 -324.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.80859 -324.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.80469 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.80469 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.80469 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.47852 -324.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.15234 -324.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.81836 -324.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.49219 -324.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.82617 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.49414 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.49805 -324.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.49414 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.16797 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.8418 -324.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.8418 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.51562 -324.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.18945 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.85742 -324.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.53125 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.20508 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.87891 -324.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.20898 -324.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.88281 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.55664 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.23047 -324.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.22656 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.89453 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.56836 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.24219 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.91602 -324.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.91602 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.25 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.92383 -324.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.25781 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.93164 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.93945 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.93945 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.61328 -324.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.60938 -324.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.60938 -324.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.2832 -324.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -339.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.02148 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.36133 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.03516 -339.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.03516 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.70312 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.03711 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.71094 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.38477 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.05859 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.72461 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.39844 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.06641 -339.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.06641 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.73242 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.06641 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.74023 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.74805 -339.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.42188 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.0957 -339.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.76953 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.44336 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.11719 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.78516 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.45117 -339.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.44727 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.12109 -339.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.45508 -339.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.12891 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.80273 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.13672 -339.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.81055 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.47656 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.15039 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.1582 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.16602 -339.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.83203 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 253.50586 -339.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.51367 -339.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.51367 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.17969 -339.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.17969 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.85352 -339.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.84961 -339.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.8457 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.85352 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.52734 -339.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.19336 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.85938 -339.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.5332 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.20703 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.88086 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.54883 -339.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.22266 -339.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.89648 -339.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.9043 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.57812 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.24609 -339.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.91992 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.59375 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.25977 -339.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.93359 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.60156 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.60547 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.2793 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.28711 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.95312 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.96094 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.63477 -339.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.63477 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.30273 -339.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.30273 -339.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.97656 -339.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -354.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.34766 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -354.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.6875 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.36133 -354.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.35742 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.02344 -354.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.02344 -354.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69727 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.37109 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.37891 -354.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.05273 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.72656 -354.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.39258 -354.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.39258 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.05859 -354.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.73242 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.40625 -354.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.74023 -354.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -384.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.66211 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33594 -384.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.66992 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.67773 -384.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.67383 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.67383 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.00781 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.68164 -384.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.67773 -384.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.35156 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.01758 -384.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.01758 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.68555 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.01953 -384.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.69336 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.02734 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.70117 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.375 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.04883 -384.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.37891 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.05273 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.7207 -384.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.38672 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.05273 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.72656 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.40039 -384.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.39648 -384.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.4043 -384.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.07031 -384.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.74414 -384.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.74023 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.41406 -384.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.41016 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.07812 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.41211 -384.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.41992 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.75391 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.42773 -384.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.42383 -384.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.09766 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.76367 -384.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.09766 -384.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.76367 -384.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.4375 -384.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.43359 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.10742 -384.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.10352 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.77148 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.44531 -384.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.11133 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.44531 -384.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.44141 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.10742 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.10742 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.77344 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.44727 -384.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.78125 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.45508 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.12305 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.45703 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.12305 -384.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.79688 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.79688 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.46289 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.13672 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.81055 -384.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.48438 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.15234 -384.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.82617 -384.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 415.5 -384.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.17383 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.8418 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.8418 -384.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.51562 -384.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.18945 -384.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.18945 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.86328 -384.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 463.5293 -384.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.19531 -384.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.86133 -384.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -399.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -399.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.6875 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.36133 -399.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.35742 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.36328 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\010) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36719 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.04102 -399.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.71484 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.38867 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.0625 -399.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.07031 -399.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.74414 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.41797 -399.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.08398 -399.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.08398 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.75 -399.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.42383 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.09766 -399.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.42773 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.10156 -399.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.09766 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.77148 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.43945 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.11328 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.78711 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.46094 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.12891 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.80273 -399.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.47656 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.14258 -399.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.47266 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.14648 -399.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.14258 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.81641 -399.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.81641 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 253.48242 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.15625 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.16406 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.83789 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.50586 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.83984 -399.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.83594 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.50195 -399.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.17578 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.84961 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.51562 -399.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.18164 -399.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.84766 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.85547 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.5293 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.20312 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.87695 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.55078 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.55859 -399.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.22461 -399.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.89844 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.57227 -399.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.24609 -399.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.24219 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.57617 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.24219 -399.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.24219 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.91016 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.91406 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 421.58789 -399.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.25391 -399.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.91992 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.59375 -399.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.26758 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.60156 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.27539 -399.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.27539 -399.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.94922 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 469.62305 -399.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.02148 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.02148 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.69531 -414.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.36914 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.03711 -414.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.0332 -414.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.70703 -414.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.70312 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.37695 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.37695 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.71094 -414.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.70703 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 89.37305 -414.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.37305 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.70703 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.37305 -414.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.04688 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.7207 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.72852 -414.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.72852 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.40234 -414.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.07617 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.75 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.75 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.08398 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.75781 -414.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.0918 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.76562 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.43359 -414.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.10742 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.78125 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.11523 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.78906 -414.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.12305 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.79688 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.46484 -414.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.46094 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.13477 -414.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.80078 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.47461 -414.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.47461 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.14844 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.82227 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.49609 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.50391 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.83789 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.51172 -414.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.50781 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.18164 -414.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.51562 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.18945 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.52344 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.85742 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.53125 -414.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.52734 -414.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.20117 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.86719 -414.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.20117 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.875 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.54883 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.22266 -414.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.22266 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.55664 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.23047 -414.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.23047 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.89844 -414.74219] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.23242 -414.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -429.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.33984 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.01367 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.6875 -429.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.36133 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -429.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.69531 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.36914 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36914 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.04297 -429.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.37695 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.05078 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.38477 -429.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.05859 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.72461 -429.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.72461 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.72461 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.39844 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.07227 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.74609 -429.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.74609 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.08008 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.75391 -429.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.08789 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.76172 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.43555 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.43555 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.76953 -429.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.44336 -429.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.77344 -429.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.77344 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.44727 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.45508 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.12891 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.46289 -429.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.13672 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.81055 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.48438 -429.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.48047 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.14844 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.81445 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.48828 -429.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.1543 -429.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.82031 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.49414 -429.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.82422 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.49023 -429.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.49805 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.17188 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.83789 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.51172 -429.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.18555 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.85156 -429.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.85156 -429.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.85156 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.51758 -429.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.84766 -429.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.51367 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.1875 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.1875 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.52148 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.19531 -429.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.19531 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.86328 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.5293 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.20312 -429.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.86914 -429.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.53516 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.54297 -429.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.20898 -429.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.00781 -444.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -444.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.01367 -444.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.34766 -444.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.6875 -444.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.6875 -444.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.35352 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.02148 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.6875 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.36133 -444.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.03516 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.36914 -444.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.36914 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.03516 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.70312 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.37695 -444.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.37305 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.04688 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.71484 -444.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.38086 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.04688 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.7207 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.39453 -444.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.39062 -444.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.39844 -444.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.06445 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.73828 -444.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.41211 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.08008 -444.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.08008 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.74609 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.08008 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.75391 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.76172 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.76172 -444.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.43555 -444.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.10938 -444.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.10938 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.7832 -444.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.45703 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.13086 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.80469 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.47266 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.13867 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.8125 -444.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.8125 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.14648 -444.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.82031 -444.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -474.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.00586 -474.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.67188 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.67969 -474.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.67969 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.35352 -474.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.34961 -474.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.02344 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69727 -474.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.02734 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.36133 -474.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.03516 -474.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.03125 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.36523 -474.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.03906 -474.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.36914 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.04297 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.71094 -474.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.71094 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.38477 -474.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.71484 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.04883 -474.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.04492 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.71094 -474.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.38477 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.05859 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.72461 -474.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.39062 -474.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.05664 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.06445 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.73828 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.41211 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.08594 -474.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.08594 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.41992 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.09375 -474.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.09375 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.76172 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.75781 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.43164 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.10547 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.10547 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.7793 -474.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.45312 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.12695 -474.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.46094 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.13477 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.80859 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.48242 -474.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.48242 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.81641 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.49023 -474.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.82422 -474.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.82422 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.49805 -474.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.17188 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.83789 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.51172 -474.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.51953 -474.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.51953 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.18555 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.85352 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.52734 -474.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.52344 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.19727 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.86523 -474.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.86133 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.53516 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.20898 -474.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.20508 -474.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.87109 -474.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -489.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -489.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.36133 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02734 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.69531 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.36914 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.37695 -489.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.04297 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.7168 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.7168 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.38281 -489.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.05664 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.72266 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.73047 -489.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.4043 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.07812 -489.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.74414 -489.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.41016 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.41797 -489.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.41797 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.0918 -489.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.08789 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.75391 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.42773 -489.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 153.42773 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.0957 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.09961 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.77344 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.44727 -489.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.44727 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.12109 -489.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.78711 -489.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.45312 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.12695 -489.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.46094 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.13477 -489.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.80078 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.13477 -489.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.13086 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.79688 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.79688 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.46289 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.13672 -489.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.4707 -489.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.14453 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.81836 -489.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.48438 -489.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.15039 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.82422 -489.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.49805 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.83203 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.50586 -489.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.50586 -489.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.17969 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.85352 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.86133 -489.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.53516 -489.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.53125 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.53125 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.53125 -489.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.53125 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.20508 -489.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.20508 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.87891 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.55273 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.55273 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.88672 -489.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.56055 -489.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.89453 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.5625 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 419.34961 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.01562 -489.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.01562 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.68945 -489.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.68555 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.35938 -489.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.69336 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 467.36719 -489.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.02148 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.69531 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.70312 -504.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.37695 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.05078 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.72461 -504.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.7207 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.38867 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.0625 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.73047 -504.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 89.39648 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.07031 -504.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.74414 -504.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.74023 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.41406 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.08789 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.75586 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.42969 -504.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.10352 -504.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.76953 -504.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.44336 -504.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.77734 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.44531 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.11133 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.78516 -504.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.11523 -504.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.11523 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.78906 -504.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.78516 -504.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.45898 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.13281 -504.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.46289 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.79688 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.46289 -504.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.13672 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.13672 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.80273 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.47656 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.15039 -504.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.82422 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.49219 -504.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.49219 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.16602 -504.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.16211 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.83008 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.49609 -504.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.50391 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.17773 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.85156 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.51758 -504.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.19141 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.85742 -504.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.85742 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.85742 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.52344 -504.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.19727 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.20508 -504.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.87891 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.55273 -504.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.21875 -504.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.88477 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.89258 -504.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.88867 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.5625 -504.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.22852 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.90234 -504.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.90234 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.57617 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.25 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.92383 -504.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -519.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -519.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.00781 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.00391 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.67773 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.35156 -519.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.34766 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01367 -519.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.34766 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.02148 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.69531 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.36914 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.03711 -519.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.0332 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.70703 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.38086 -519.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.37695 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.04297 -519.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.37695 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.05078 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.05859 -519.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.05469 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.05469 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.72852 -519.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.39453 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.72852 -519.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.72461 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.39062 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.39062 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.06445 -519.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.39844 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.73242 -519.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.72852 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.39453 -519.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.06836 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.74219 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.4082 -519.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.07422 -519.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.74023 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.41406 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.08203 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.74805 -519.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.42188 -519.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.0957 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.76953 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.10352 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.77734 -519.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.77344 -519.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.44727 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.45508 -519.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.12891 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.80273 -519.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.47656 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.15039 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.82422 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.49219 -519.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.49219 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.16602 -519.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.16602 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.5 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.16602 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.83984 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.51367 -519.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.17969 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.85352 -519.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.18359 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.85742 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.52539 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.19922 -519.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.19531 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.86914 -519.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.86914 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.53516 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.20898 -519.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -534.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.01562 -534.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.68945 -534.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.68555 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.35938 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.69336 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.35938 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.0332 -534.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.36328 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.03711 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.04492 -534.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.71875 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.39258 -534.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.06641 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.74023 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.41406 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.08203 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.07812 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.75195 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.42578 -534.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 153.42188 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.08789 -534.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.42188 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\033) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.75586 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.42969 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.10352 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.10352 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.76953 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.44336 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.11719 -534.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.45117 -534.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.125 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.79883 -534.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.47266 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.14648 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.1543 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.82031 -534.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.82812 -534.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.50195 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.17578 -534.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.84961 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.18359 -534.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.85742 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.53125 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.20508 -534.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.20117 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.875 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.20898 -534.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.20508 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.21289 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.88672 -534.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.55273 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.22656 -534.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.22266 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.89648 -534.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.57031 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.9043 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.57812 -534.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.57422 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.24219 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.9082 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 421.58203 -534.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.25586 -534.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -549.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -549.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -549.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.01367 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.6875 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.69531 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.0293 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.03711 -549.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -549.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.71094 -549.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.37695 -549.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.04297 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.70898 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.70898 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.375 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.70898 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.38281 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.05664 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.72266 -549.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.73047 -549.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.4043 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.07031 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.74414 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.75195 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.41797 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.42578 -549.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.09961 -549.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.77344 -549.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.76953 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.10352 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 173.4375 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.10352 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.4375 -549.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.11133 -549.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.44531 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.11328 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\024) [7.704 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.7793 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.44727 -549.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.11328 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.78711 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.78711 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.12109 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.79492 -549.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.12891 -549.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.79492 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.46875 -549.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.14258 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.81055 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.81055 -549.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.48438 -549.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.1582 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.83203 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.50586 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.51367 -549.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.1875 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.86133 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.52734 -549.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.86133 -549.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.86133 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.53516 -549.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.53516 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.86914 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.53516 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.20898 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.88281 -549.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.54883 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.22266 -549.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.55273 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.55273 -549.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.22656 -549.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.90039 -549.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.90039 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.57422 -549.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.24023 -549.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.90625 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.57227 -549.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.57227 -549.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -564.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -564.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -564.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -564.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.68359 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.01758 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.68359 -564.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.01758 -564.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.69141 -564.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.36523 -564.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.37305 -564.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.03906 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.70508 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.37891 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.05273 -564.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.04883 -564.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.72266 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.39062 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.39453 -564.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.39062 -564.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.06445 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.73047 -564.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.73828 -564.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.4043 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.07812 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.07812 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.74414 -564.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.41797 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.08398 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.0918 -564.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.75781 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.43164 -564.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.43945 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.10547 -564.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.11328 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.78711 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.46094 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.13477 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.80859 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.81641 -564.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.49023 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.16406 -564.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.83008 -564.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.49609 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.16992 -564.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.84375 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.17773 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.85156 -564.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.85156 -564.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.52539 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.19922 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.20703 -564.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.20312 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.87695 -564.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.55078 -564.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.22461 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.22461 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.89844 -564.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.89844 -564.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -594.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33594 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.00977 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.68359 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.34961 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.68359 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.35742 -594.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.6875 -594.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.6875 -594.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36133 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.03516 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.70898 -594.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.375 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.04883 -594.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.38281 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.05664 -594.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.72266 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.05664 -594.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.05273 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.71875 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.71875 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.38477 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.05859 -594.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.39258 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.06641 -594.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.74023 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.40625 -594.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.40234 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.07031 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.73633 -594.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.74414 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.41016 -594.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.08398 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.41797 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.0918 -594.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.08789 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.76172 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.43555 -594.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.76562 -594.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.43945 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.11328 -594.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.78711 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.12109 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.79492 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.46875 -594.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.14258 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.81641 -594.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.8125 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.48633 -594.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.48242 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.14844 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.81641 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.48242 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.15625 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.82422 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.49023 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.16406 -594.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.83008 -594.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.49609 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.16992 -594.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.5 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.17383 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.8418 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.51562 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.18945 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.18945 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.52344 -594.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.19727 -594.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.52734 -594.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.52344 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.19727 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.87109 -594.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.86719 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.5332 -594.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.5332 -594.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.00391 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.67773 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.68555 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.35938 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02734 -609.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.02344 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.69727 -609.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.69727 -609.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69727 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.70508 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.37891 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.04688 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.38086 -609.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.05469 -609.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.05078 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.38477 -609.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.05859 -609.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.38867 -609.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.38867 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.0625 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.73633 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.40234 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.40234 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.07617 -609.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.74219 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.75 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.08398 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.75781 -609.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.75391 -609.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.42773 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.10156 -609.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.43555 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.10938 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.11719 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.79102 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.45898 -609.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.45898 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.13281 -609.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.80664 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.47266 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.14648 -609.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.82031 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.48828 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.49219 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.16602 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.17383 -609.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.83984 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.51367 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.51367 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.17969 -609.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.85352 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.51953 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.19336 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.86133 -609.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.85742 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.53125 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.20508 -609.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.20117 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.86719 -609.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.20117 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.875 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.88281 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.88281 -609.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.55664 -609.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.23047 -609.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.23047 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.9043 -609.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.57031 -609.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.23633 -609.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.90234 -609.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -624.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -624.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.02148 -624.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.69531 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.36914 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.70312 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.36914 -624.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36914 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -624.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.70312 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.37695 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.37695 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.71094 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.38477 -624.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.71875 -624.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.39258 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.06641 -624.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.74023 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.07422 -624.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.07422 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.74805 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.42188 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.08789 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08789 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.76172 -624.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.42773 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.43555 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.10938 -624.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.10938 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.44336 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.11133 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.78516 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.45312 -624.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.12695 -624.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.80078 -624.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.79688 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.13086 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.13867 -624.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.80469 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.4707 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.14453 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.81836 -624.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.48438 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.49219 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.16602 -624.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.16211 -624.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.83594 -624.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.16992 -624.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.84375 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.51758 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.18359 -624.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.51758 -624.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.51367 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.1875 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.86133 -624.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.53516 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.20898 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.87695 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\025) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.66406 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.33008 -624.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.33008 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.00391 -624.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.67383 -624.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.00781 -624.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.00391 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.67773 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.01172 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.3457 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.01172 -624.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.01172 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.67969 -624.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.3457 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.01953 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.01953 -624.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.69336 -624.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -639.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33398 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.00781 -639.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.00391 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.67773 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.3457 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01953 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.69336 -639.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36719 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.0332 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.70703 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.38086 -639.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.71484 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.38086 -639.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.05469 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.38867 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.0625 -639.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.05859 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.73242 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.40625 -639.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.40234 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.07031 -639.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.73633 -639.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 153.41016 -639.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.40625 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.08008 -639.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.41016 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.08398 -639.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.75781 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.42383 -639.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.75391 -639.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.75391 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.42773 -639.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.42383 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.08984 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.76367 -639.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.09766 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.43164 -639.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.10547 -639.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.10156 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.43555 -639.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.10938 -639.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 269.44336 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.11133 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.78516 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.79297 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.79297 -639.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.4668 -639.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.46289 -639.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.45898 -639.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.13281 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.80664 -639.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.81445 -639.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.48047 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.14648 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.82031 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.49414 -639.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.16016 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.16797 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.8418 -639.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.83789 -639.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.51172 -639.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.8457 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\035) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.51953 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.19336 -639.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.86719 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.54102 -639.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.53711 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.21094 -639.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.20703 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.87305 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.54102 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.21484 -639.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.88867 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.22266 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 480.89648 -639.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\015) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -654.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.00781 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.3418 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.01562 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.68945 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.36328 -654.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.69336 -654.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.68945 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.36328 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.69727 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.37109 -654.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.70508 -654.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.37109 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.03711 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.71094 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.38477 -654.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.38086 -654.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.05469 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.72266 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.39648 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.0625 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.73633 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.41016 -654.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.08398 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.75781 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.43164 -654.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.76172 -654.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.76172 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.43555 -654.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.10938 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.7832 -654.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.45703 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.13086 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.46484 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.13086 -654.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.46484 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.46484 -654.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.13867 -654.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.8125 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.48633 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.16016 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.16797 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.8418 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.50977 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.18359 -654.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.84961 -654.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.51562 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.18945 -654.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.18555 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.18555 -654.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.85938 -654.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.85547 -654.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.5293 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.20312 -654.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.5332 -654.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.20703 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.88086 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.54688 -654.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.88086 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.55469 -654.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.22852 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.5625 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.23633 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.9043 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\017) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.90039 -654.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.57422 -654.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 421.57031 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.24414 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.24414 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.91797 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.5918 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.26562 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.93945 -654.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -669.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -669.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 17.34375 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.01758 -669.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.01758 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.68555 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.35938 -669.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.02539 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.69141 -669.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.36523 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.03906 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.71289 -669.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.04297 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.70898 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.7168 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.39062 -669.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.38672 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.06055 -669.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.06055 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.72656 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.40039 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.4082 -669.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.4082 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.07422 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.4082 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.08203 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.75586 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.42383 -669.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.09766 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.77148 -669.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.4375 -669.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.4375 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.10352 -669.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.77734 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.45117 -669.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.78125 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.45508 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.12305 -669.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.78906 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.45508 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.12891 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.80273 -669.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.79883 -669.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.47266 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.14062 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\023) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.14453 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.81836 -669.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.81836 -669.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.49219 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.16602 -669.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.83984 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.51367 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.17969 -669.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.17969 -669.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.17969 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.1875 -669.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.86133 -669.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.53516 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.86914 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.54297 -669.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.2168 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.55078 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.2168 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.88477 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\011) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.55078 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.22461 -669.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.55469 -669.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.55469 -669.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.22852 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.22852 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.89453 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.56055 -669.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.89453 -669.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.56836 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.24219 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.57617 -669.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.25 -669.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.92383 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 477.59766 -669.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -684.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -684.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.02148 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.69531 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.0293 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.69531 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.36914 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.04297 -684.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.37695 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.05078 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.71875 -684.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.71484 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.38867 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.0625 -684.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.73633 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.40234 -684.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.73633 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.41016 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.07617 -684.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 129.41016 -684.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.08398 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.75781 -684.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.75391 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08789 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.76172 -684.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.75781 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.42383 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.09766 -684.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.77148 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.43945 -684.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.43555 -684.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.10938 -684.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.7832 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.11719 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.79102 -684.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.79102 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.45898 -684.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.13281 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.80664 -684.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.80664 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.80664 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.48047 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.81445 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.48828 -684.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.81836 -684.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.81445 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.48047 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.1543 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.82031 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.82031 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.49414 -684.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.16016 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.83398 -684.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.16797 -684.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.16406 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.83789 -684.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.83789 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.50586 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\021) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.50977 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.18359 -684.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.84961 -684.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.51562 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.18945 -684.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.86328 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.19727 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.87109 -684.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.87109 -684.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.54492 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.21875 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.22656 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\027) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.90039 -684.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.56641 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.24023 -684.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.91406 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.58789 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.25391 -684.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -699.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -699.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -699.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33594 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.00977 -699.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.00977 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.34375 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.00977 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.01758 -699.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.69141 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.36523 -699.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36133 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.03516 -699.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.03516 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.70312 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.71094 -699.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.71094 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.38477 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\034) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.05859 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.72461 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.05859 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.39258 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.05859 -699.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.39258 -699.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.06641 -699.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.0625 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.0625 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.0625 -699.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.05859 -699.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.73242 -699.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.39844 -699.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.06445 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.73047 -699.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.06445 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.73047 -699.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.4043 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.07227 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\012) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.73828 -699.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.41211 -699.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.08594 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.75977 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.09375 -699.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.76758 -699.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.44141 -699.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.4375 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.77148 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.7793 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.11328 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.78711 -699.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.7832 -699.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.45703 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.13086 -699.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.46484 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.79883 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.47266 -699.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.46875 -699.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.14258 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.80859 -699.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.80859 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.47656 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.81055 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.48438 -699.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.48047 -699.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.1543 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.82812 -699.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.16211 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.16211 -699.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.83594 -699.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.50977 -699.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.50977 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.18359 -699.74219] Tm 0 0 Td /F82_0 12 Tf (%) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.85742 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.53125 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.20508 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.87305 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\037) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.53906 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.21289 -699.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.21289 -699.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 475.54688 -699.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -714.74219] Tm 0 0 Td /F82_0 12 Tf ( ) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -714.74219] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -714.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.00977 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.68359 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.35742 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.02539 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.69141 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.36523 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.0332 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\020) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.69922 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.37305 -714.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.70312 -714.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.70312 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.36914 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.03711 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.71094 -714.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.70703 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.38086 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.04883 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.72266 -714.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.71875 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.71875 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.72656 -714.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.40039 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.07422 -714.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.07031 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.74414 -714.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.74414 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.41211 -714.74219] Tm 0 0 Td /F82_0 12 Tf (*) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.41211 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.07812 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.41211 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.08594 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.09375 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\036) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.75977 -714.74219] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.43359 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.76758 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.44141 -714.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.4375 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.11133 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.78516 -714.74219] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.11523 -714.74219] Tm 0 0 Td /F82_0 12 Tf ($) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.78906 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.46289 -714.74219] Tm 0 0 Td /F82_0 12 Tf (&) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.45898 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.13281 -714.74219] Tm 0 0 Td /F82_0 12 Tf (') [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.13281 -714.74219] Tm 0 0 Td /F82_0 12 Tf (\002) [2.292 0] Tj Q Q q 667.28 967.28 490 262.5 re W* q q [1 0 0 1 0 0] cm 0 0 595.28 841.89 re W Q Q Q q 1 w [] 0 d 0 J 0 j [1 0 0 1 36 53.67] cm q [1 0 0 1 0 0] Tm 0 0 Td /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -9.625] Tm 0 0 Td /F82_0 12 Tf (\006) [6.096 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413 -9.625] Tm 0 0 Td /F82_0 12 Tf (\031) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 419.67383 -9.625] Tm 0 0 Td /F82_0 12 Tf (#) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.34766 -9.625] Tm 0 0 Td /F82_0 12 Tf (\030) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.34766 -9.625] Tm 0 0 Td /F82_0 12 Tf (\)) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.02148 -9.625] Tm 0 0 Td /F82_0 12 Tf (!) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.01758 -9.625] Tm 0 0 Td /F82_0 12 Tf (\032) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.69141 -9.625] Tm 0 0 Td /F82_0 12 Tf (") [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.36523 -9.625] Tm 0 0 Td /F82_0 12 Tf (\() [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.69922 -9.625] Tm 0 0 Td /F82_0 12 Tf (\001) [3.624 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 469.69531 -9.625] Tm 0 0 Td /F82_0 12 Tf (\026) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.36914 -9.625] Tm 0 0 Td /F82_0 12 Tf (\006) [6.096 0] Tj Q Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer end %%DocumentSuppliedResources: %%+ font T3_35_0 %%+ font T3_82_0 %%EOF cups-2.2.7/test/document-a4.sla000664 000765 000024 00000163033 13255074424 016761 0ustar00msweetstaff000000 000000 \n" "\n" "\n" "" "" "" "" "
    StatusSuppliesMedia
    \n" "

    \n", title, !strcmp(client->uri, "/") ? " sel" : "", !strcmp(client->uri, "/supplies") ? " sel" : "", !strcmp(client->uri, "/media") ? " sel" : ""); } /* * 'html_printf()' - Send formatted text to the client, quoting as needed. */ static void html_printf(_ipp_client_t *client, /* I - Client */ const char *format, /* I - Printf-style format string */ ...) /* I - Additional arguments as needed */ { va_list ap; /* Pointer to arguments */ const char *start; /* Start of string */ char size, /* Size character (h, l, L) */ type; /* Format type character */ int width, /* Width of field */ prec; /* Number of characters of precision */ char tformat[100], /* Temporary format string for sprintf() */ *tptr, /* Pointer into temporary format */ temp[1024]; /* Buffer for formatted numbers */ char *s; /* Pointer to string */ /* * Loop through the format string, formatting as needed... */ va_start(ap, format); start = format; while (*format) { if (*format == '%') { if (format > start) httpWrite2(client->http, start, (size_t)(format - start)); tptr = tformat; *tptr++ = *format++; if (*format == '%') { httpWrite2(client->http, "%", 1); format ++; start = format; continue; } else if (strchr(" -+#\'", *format)) *tptr++ = *format++; if (*format == '*') { /* * Get width from argument... */ format ++; width = va_arg(ap, int); snprintf(tptr, sizeof(tformat) - (size_t)(tptr - tformat), "%d", width); tptr += strlen(tptr); } else { width = 0; while (isdigit(*format & 255)) { if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; width = width * 10 + *format++ - '0'; } } if (*format == '.') { if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; format ++; if (*format == '*') { /* * Get precision from argument... */ format ++; prec = va_arg(ap, int); snprintf(tptr, sizeof(tformat) - (size_t)(tptr - tformat), "%d", prec); tptr += strlen(tptr); } else { prec = 0; while (isdigit(*format & 255)) { if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; prec = prec * 10 + *format++ - '0'; } } } if (*format == 'l' && format[1] == 'l') { size = 'L'; if (tptr < (tformat + sizeof(tformat) - 2)) { *tptr++ = 'l'; *tptr++ = 'l'; } format += 2; } else if (*format == 'h' || *format == 'l' || *format == 'L') { if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; size = *format++; } else size = 0; if (!*format) { start = format; break; } if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; type = *format++; *tptr = '\0'; start = format; switch (type) { case 'E' : /* Floating point formats */ case 'G' : case 'e' : case 'f' : case 'g' : if ((size_t)(width + 2) > sizeof(temp)) break; sprintf(temp, tformat, va_arg(ap, double)); httpWrite2(client->http, temp, strlen(temp)); break; case 'B' : /* Integer formats */ case 'X' : case 'b' : case 'd' : case 'i' : case 'o' : case 'u' : case 'x' : if ((size_t)(width + 2) > sizeof(temp)) break; # ifdef HAVE_LONG_LONG if (size == 'L') sprintf(temp, tformat, va_arg(ap, long long)); else # endif /* HAVE_LONG_LONG */ if (size == 'l') sprintf(temp, tformat, va_arg(ap, long)); else sprintf(temp, tformat, va_arg(ap, int)); httpWrite2(client->http, temp, strlen(temp)); break; case 'p' : /* Pointer value */ if ((size_t)(width + 2) > sizeof(temp)) break; sprintf(temp, tformat, va_arg(ap, void *)); httpWrite2(client->http, temp, strlen(temp)); break; case 'c' : /* Character or character array */ if (width <= 1) { temp[0] = (char)va_arg(ap, int); temp[1] = '\0'; html_escape(client, temp, 1); } else html_escape(client, va_arg(ap, char *), (size_t)width); break; case 's' : /* String */ if ((s = va_arg(ap, char *)) == NULL) s = "(null)"; html_escape(client, s, strlen(s)); break; } } else format ++; } if (format > start) httpWrite2(client->http, start, (size_t)(format - start)); va_end(ap); } /* * 'ipp_cancel_job()' - Cancel a job. */ static void ipp_cancel_job(_ipp_client_t *client) /* I - Client */ { _ipp_job_t *job; /* Job information */ /* * Get the job... */ if ((job = find_job(client)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist."); return; } /* * See if the job is already completed, canceled, or aborted; if so, * we can't cancel... */ switch (job->state) { case IPP_JSTATE_CANCELED : respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job #%d is already canceled - can\'t cancel.", job->id); break; case IPP_JSTATE_ABORTED : respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job #%d is already aborted - can\'t cancel.", job->id); break; case IPP_JSTATE_COMPLETED : respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job #%d is already completed - can\'t cancel.", job->id); break; default : /* * Cancel the job... */ _cupsRWLockWrite(&(client->printer->rwlock)); if (job->state == IPP_JSTATE_PROCESSING || (job->state == IPP_JSTATE_HELD && job->fd >= 0)) job->cancel = 1; else { job->state = IPP_JSTATE_CANCELED; job->completed = time(NULL); } _cupsRWUnlock(&(client->printer->rwlock)); respond_ipp(client, IPP_STATUS_OK, NULL); break; } } /* * 'ipp_close_job()' - Close an open job. */ static void ipp_close_job(_ipp_client_t *client) /* I - Client */ { _ipp_job_t *job; /* Job information */ /* * Get the job... */ if ((job = find_job(client)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist."); return; } /* * See if the job is already completed, canceled, or aborted; if so, * we can't cancel... */ switch (job->state) { case IPP_JSTATE_CANCELED : respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job #%d is canceled - can\'t close.", job->id); break; case IPP_JSTATE_ABORTED : respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job #%d is aborted - can\'t close.", job->id); break; case IPP_JSTATE_COMPLETED : respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job #%d is completed - can\'t close.", job->id); break; case IPP_JSTATE_PROCESSING : case IPP_JSTATE_STOPPED : respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job #%d is already closed.", job->id); break; default : respond_ipp(client, IPP_STATUS_OK, NULL); break; } } /* * 'ipp_create_job()' - Create a job object. */ static void ipp_create_job(_ipp_client_t *client) /* I - Client */ { _ipp_job_t *job; /* New job */ cups_array_t *ra; /* Attributes to send in response */ /* * Validate print job attributes... */ if (!valid_job_attributes(client)) { httpFlush(client->http); return; } /* * Do we have a file to print? */ if (httpGetState(client->http) == HTTP_STATE_POST_RECV) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Unexpected document data following request."); return; } /* * Create the job... */ if ((job = create_job(client)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_BUSY, "Currently printing another job."); return; } /* * Return the job info... */ respond_ipp(client, IPP_STATUS_OK, NULL); ra = cupsArrayNew((cups_array_func_t)strcmp, NULL); cupsArrayAdd(ra, "job-id"); cupsArrayAdd(ra, "job-state"); cupsArrayAdd(ra, "job-state-message"); cupsArrayAdd(ra, "job-state-reasons"); cupsArrayAdd(ra, "job-uri"); copy_job_attributes(client, job, ra); cupsArrayDelete(ra); } /* * 'ipp_get_job_attributes()' - Get the attributes for a job object. */ static void ipp_get_job_attributes( _ipp_client_t *client) /* I - Client */ { _ipp_job_t *job; /* Job */ cups_array_t *ra; /* requested-attributes */ if ((job = find_job(client)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job not found."); return; } respond_ipp(client, IPP_STATUS_OK, NULL); ra = ippCreateRequestedArray(client->request); copy_job_attributes(client, job, ra); cupsArrayDelete(ra); } /* * 'ipp_get_jobs()' - Get a list of job objects. */ static void ipp_get_jobs(_ipp_client_t *client) /* I - Client */ { ipp_attribute_t *attr; /* Current attribute */ const char *which_jobs = NULL; /* which-jobs values */ int job_comparison; /* Job comparison */ ipp_jstate_t job_state; /* job-state value */ int first_job_id, /* First job ID */ limit, /* Maximum number of jobs to return */ count; /* Number of jobs that match */ const char *username; /* Username */ _ipp_job_t *job; /* Current job pointer */ cups_array_t *ra; /* Requested attributes array */ /* * See if the "which-jobs" attribute have been specified... */ if ((attr = ippFindAttribute(client->request, "which-jobs", IPP_TAG_KEYWORD)) != NULL) { which_jobs = ippGetString(attr, 0, NULL); fprintf(stderr, "%s Get-Jobs which-jobs=%s", client->hostname, which_jobs); } if (!which_jobs || !strcmp(which_jobs, "not-completed")) { job_comparison = -1; job_state = IPP_JSTATE_STOPPED; } else if (!strcmp(which_jobs, "completed")) { job_comparison = 1; job_state = IPP_JSTATE_CANCELED; } else if (!strcmp(which_jobs, "aborted")) { job_comparison = 0; job_state = IPP_JSTATE_ABORTED; } else if (!strcmp(which_jobs, "all")) { job_comparison = 1; job_state = IPP_JSTATE_PENDING; } else if (!strcmp(which_jobs, "canceled")) { job_comparison = 0; job_state = IPP_JSTATE_CANCELED; } else if (!strcmp(which_jobs, "pending")) { job_comparison = 0; job_state = IPP_JSTATE_PENDING; } else if (!strcmp(which_jobs, "pending-held")) { job_comparison = 0; job_state = IPP_JSTATE_HELD; } else if (!strcmp(which_jobs, "processing")) { job_comparison = 0; job_state = IPP_JSTATE_PROCESSING; } else if (!strcmp(which_jobs, "processing-stopped")) { job_comparison = 0; job_state = IPP_JSTATE_STOPPED; } else { respond_ipp(client, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, "The which-jobs value \"%s\" is not supported.", which_jobs); ippAddString(client->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_KEYWORD, "which-jobs", NULL, which_jobs); return; } /* * See if they want to limit the number of jobs reported... */ if ((attr = ippFindAttribute(client->request, "limit", IPP_TAG_INTEGER)) != NULL) { limit = ippGetInteger(attr, 0); fprintf(stderr, "%s Get-Jobs limit=%d", client->hostname, limit); } else limit = 0; if ((attr = ippFindAttribute(client->request, "first-job-id", IPP_TAG_INTEGER)) != NULL) { first_job_id = ippGetInteger(attr, 0); fprintf(stderr, "%s Get-Jobs first-job-id=%d", client->hostname, first_job_id); } else first_job_id = 1; /* * See if we only want to see jobs for a specific user... */ username = NULL; if ((attr = ippFindAttribute(client->request, "my-jobs", IPP_TAG_BOOLEAN)) != NULL) { int my_jobs = ippGetBoolean(attr, 0); fprintf(stderr, "%s Get-Jobs my-jobs=%s\n", client->hostname, my_jobs ? "true" : "false"); if (my_jobs) { if ((attr = ippFindAttribute(client->request, "requesting-user-name", IPP_TAG_NAME)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Need requesting-user-name with my-jobs."); return; } username = ippGetString(attr, 0, NULL); fprintf(stderr, "%s Get-Jobs requesting-user-name=\"%s\"\n", client->hostname, username); } } /* * OK, build a list of jobs for this printer... */ ra = ippCreateRequestedArray(client->request); respond_ipp(client, IPP_STATUS_OK, NULL); _cupsRWLockRead(&(client->printer->rwlock)); for (count = 0, job = (_ipp_job_t *)cupsArrayFirst(client->printer->jobs); (limit <= 0 || count < limit) && job; job = (_ipp_job_t *)cupsArrayNext(client->printer->jobs)) { /* * Filter out jobs that don't match... */ if ((job_comparison < 0 && job->state > job_state) || (job_comparison == 0 && job->state != job_state) || (job_comparison > 0 && job->state < job_state) || job->id < first_job_id || (username && job->username && strcasecmp(username, job->username))) continue; if (count > 0) ippAddSeparator(client->response); count ++; copy_job_attributes(client, job, ra); } cupsArrayDelete(ra); _cupsRWUnlock(&(client->printer->rwlock)); } /* * 'ipp_get_printer_attributes()' - Get the attributes for a printer object. */ static void ipp_get_printer_attributes( _ipp_client_t *client) /* I - Client */ { cups_array_t *ra; /* Requested attributes array */ _ipp_printer_t *printer; /* Printer */ /* * Send the attributes... */ ra = ippCreateRequestedArray(client->request); printer = client->printer; respond_ipp(client, IPP_STATUS_OK, NULL); _cupsRWLockRead(&(printer->rwlock)); copy_attributes(client->response, printer->attrs, ra, IPP_TAG_ZERO, IPP_TAG_CUPS_CONST); if (!ra || cupsArrayFind(ra, "media-col-ready")) { int i, /* Looping var */ num_ready = 0; /* Number of ready media */ ipp_t *ready[3]; /* Ready media */ if (printer->main_size != _IPP_MEDIA_SIZE_NONE) { if (printer->main_type != _IPP_MEDIA_TYPE_NONE) ready[num_ready ++] = create_media_col(media_supported[printer->main_size], "main", media_type_supported[printer->main_type], media_col_sizes[printer->main_size][0], media_col_sizes[printer->main_size][1], 635); else ready[num_ready ++] = create_media_col(media_supported[printer->main_size], "main", NULL, media_col_sizes[printer->main_size][0], media_col_sizes[printer->main_size][1], 635); } if (printer->envelope_size != _IPP_MEDIA_SIZE_NONE) ready[num_ready ++] = create_media_col(media_supported[printer->envelope_size], "envelope", NULL, media_col_sizes[printer->envelope_size][0], media_col_sizes[printer->envelope_size][1], 635); if (printer->photo_size != _IPP_MEDIA_SIZE_NONE) { if (printer->photo_type != _IPP_MEDIA_TYPE_NONE) ready[num_ready ++] = create_media_col(media_supported[printer->photo_size], "photo", media_type_supported[printer->photo_type], media_col_sizes[printer->photo_size][0], media_col_sizes[printer->photo_size][1], 0); else ready[num_ready ++] = create_media_col(media_supported[printer->photo_size], "photo", NULL, media_col_sizes[printer->photo_size][0], media_col_sizes[printer->photo_size][1], 0); } if (num_ready) { ippAddCollections(client->response, IPP_TAG_PRINTER, "media-col-ready", num_ready, (const ipp_t **)ready); for (i = 0; i < num_ready; i ++) ippDelete(ready[i]); } else ippAddOutOfBand(client->response, IPP_TAG_PRINTER, IPP_TAG_NOVALUE, "media-col-ready"); } if (!ra || cupsArrayFind(ra, "media-ready")) { int num_ready = 0; /* Number of ready media */ const char *ready[3]; /* Ready media */ if (printer->main_size != _IPP_MEDIA_SIZE_NONE) ready[num_ready ++] = media_supported[printer->main_size]; if (printer->envelope_size != _IPP_MEDIA_SIZE_NONE) ready[num_ready ++] = media_supported[printer->envelope_size]; if (printer->photo_size != _IPP_MEDIA_SIZE_NONE) ready[num_ready ++] = media_supported[printer->photo_size]; if (num_ready) ippAddStrings(client->response, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-ready", num_ready, NULL, ready); else ippAddOutOfBand(client->response, IPP_TAG_PRINTER, IPP_TAG_NOVALUE, "media-ready"); } if (!ra || cupsArrayFind(ra, "printer-config-change-date-time")) ippAddDate(client->response, IPP_TAG_PRINTER, "printer-config-change-date-time", ippTimeToDate(printer->config_time)); if (!ra || cupsArrayFind(ra, "printer-config-change-time")) ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-config-change-time", (int)(printer->config_time - printer->start_time)); if (!ra || cupsArrayFind(ra, "printer-current-time")) ippAddDate(client->response, IPP_TAG_PRINTER, "printer-current-time", ippTimeToDate(time(NULL))); if (!ra || cupsArrayFind(ra, "printer-state")) ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", printer->state); if (!ra || cupsArrayFind(ra, "printer-state-change-date-time")) ippAddDate(client->response, IPP_TAG_PRINTER, "printer-state-change-date-time", ippTimeToDate(printer->state_time)); if (!ra || cupsArrayFind(ra, "printer-state-change-time")) ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-state-change-time", (int)(printer->state_time - printer->start_time)); if (!ra || cupsArrayFind(ra, "printer-state-message")) { static const char * const messages[] = { "Idle.", "Printing.", "Stopped." }; ippAddString(client->response, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-state-message", NULL, messages[printer->state - IPP_PSTATE_IDLE]); } if (!ra || cupsArrayFind(ra, "printer-state-reasons")) { if (printer->state_reasons == _IPP_PREASON_NONE) ippAddString(client->response, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "printer-state-reasons", NULL, "none"); else { ipp_attribute_t *attr = NULL; /* printer-state-reasons */ _ipp_preason_t bit; /* Reason bit */ int i; /* Looping var */ char reason[32]; /* Reason string */ for (i = 0, bit = 1; i < (int)(sizeof(_ipp_preason_strings) / sizeof(_ipp_preason_strings[0])); i ++, bit *= 2) { if (printer->state_reasons & bit) { snprintf(reason, sizeof(reason), "%s-%s", _ipp_preason_strings[i], printer->state == IPP_PSTATE_IDLE ? "report" : printer->state == IPP_PSTATE_PROCESSING ? "warning" : "error"); if (attr) ippSetString(client->response, &attr, ippGetCount(attr), reason); else attr = ippAddString(client->response, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "printer-state-reasons", NULL, reason); } } } } if (!ra || cupsArrayFind(ra, "printer-supply")) { int i; /* Looping var */ char buffer[256]; /* Supply value buffer */ ipp_attribute_t *attr = NULL; /* Attribute */ static const char * const colorants[] = { "cyan", "magenta", "yellow", "black", "unknown" }; for (i = 0; i < 5; i ++) { snprintf(buffer, sizeof(buffer), "index=%d;class=%s;type=%s;unit=percent;maxcapacity=100;level=%d;colorantname=%s;", i + 1, i < 4 ? "supplyThatIsConsumed" : "receptacleThatIsFilled", i < 4 ? "toner" : "wasteToner", printer->supplies[i], colorants[i]); if (!attr) attr = ippAddOctetString(client->response, IPP_TAG_PRINTER, "printer-supply", buffer, (int)strlen(buffer)); else ippSetOctetString(client->response, &attr, i, buffer, (int)strlen(buffer)); } } if (!ra || cupsArrayFind(ra, "printer-up-time")) ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-up-time", (int)(time(NULL) - printer->start_time)); if (!ra || cupsArrayFind(ra, "queued-job-count")) ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "queued-job-count", printer->active_job && printer->active_job->state < IPP_JSTATE_CANCELED); _cupsRWUnlock(&(printer->rwlock)); cupsArrayDelete(ra); } /* * 'ipp_identify_printer()' - Beep or display a message. */ static void ipp_identify_printer( _ipp_client_t *client) /* I - Client */ { ipp_attribute_t *actions, /* identify-actions */ *message; /* message */ actions = ippFindAttribute(client->request, "identify-actions", IPP_TAG_KEYWORD); message = ippFindAttribute(client->request, "message", IPP_TAG_TEXT); if (!actions || ippContainsString(actions, "sound")) { putchar(0x07); fflush(stdout); } if (ippContainsString(actions, "display")) printf("IDENTIFY from %s: %s\n", client->hostname, message ? ippGetString(message, 0, NULL) : "No message supplied"); respond_ipp(client, IPP_STATUS_OK, NULL); } /* * 'ipp_print_job()' - Create a job object with an attached document. */ static void ipp_print_job(_ipp_client_t *client) /* I - Client */ { _ipp_job_t *job; /* New job */ char filename[1024], /* Filename buffer */ buffer[4096]; /* Copy buffer */ ssize_t bytes; /* Bytes read */ cups_array_t *ra; /* Attributes to send in response */ _cups_thread_t t; /* Thread */ /* * Validate print job attributes... */ if (!valid_job_attributes(client)) { httpFlush(client->http); return; } /* * Do we have a file to print? */ if (httpGetState(client->http) == HTTP_STATE_POST_SEND) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "No file in request."); return; } /* * Print the job... */ if ((job = create_job(client)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_BUSY, "Currently printing another job."); return; } /* * Create a file for the request data... */ create_job_filename(client->printer, job, filename, sizeof(filename)); if (Verbosity) fprintf(stderr, "Creating job file \"%s\", format \"%s\".\n", filename, job->format); if ((job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600)) < 0) { job->state = IPP_JSTATE_ABORTED; respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to create print file: %s", strerror(errno)); return; } while ((bytes = httpRead2(client->http, buffer, sizeof(buffer))) > 0) { if (write(job->fd, buffer, (size_t)bytes) < bytes) { int error = errno; /* Write error */ job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to write print file: %s", strerror(error)); return; } } if (bytes < 0) { /* * Got an error while reading the print data, so abort this job. */ job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to read print file."); return; } if (close(job->fd)) { int error = errno; /* Write error */ job->state = IPP_JSTATE_ABORTED; job->fd = -1; unlink(filename); respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to write print file: %s", strerror(error)); return; } job->fd = -1; job->filename = strdup(filename); job->state = IPP_JSTATE_PENDING; /* * Process the job... */ t = _cupsThreadCreate((_cups_thread_func_t)process_job, job); if (t) { _cupsThreadDetach(t); } else { job->state = IPP_JSTATE_ABORTED; respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to process job."); return; } /* * Return the job info... */ respond_ipp(client, IPP_STATUS_OK, NULL); ra = cupsArrayNew((cups_array_func_t)strcmp, NULL); cupsArrayAdd(ra, "job-id"); cupsArrayAdd(ra, "job-state"); cupsArrayAdd(ra, "job-state-message"); cupsArrayAdd(ra, "job-state-reasons"); cupsArrayAdd(ra, "job-uri"); copy_job_attributes(client, job, ra); cupsArrayDelete(ra); } /* * 'ipp_print_uri()' - Create a job object with a referenced document. */ static void ipp_print_uri(_ipp_client_t *client) /* I - Client */ { _ipp_job_t *job; /* New job */ ipp_attribute_t *uri; /* document-uri */ char scheme[256], /* URI scheme */ userpass[256], /* Username and password info */ hostname[256], /* Hostname */ resource[1024]; /* Resource path */ int port; /* Port number */ http_uri_status_t uri_status; /* URI decode status */ http_encryption_t encryption; /* Encryption to use, if any */ http_t *http; /* Connection for http/https URIs */ http_status_t status; /* Access status for http/https URIs */ int infile; /* Input file for local file URIs */ char filename[1024], /* Filename buffer */ buffer[4096]; /* Copy buffer */ ssize_t bytes; /* Bytes read */ cups_array_t *ra; /* Attributes to send in response */ static const char * const uri_status_strings[] = { /* URI decode errors */ "URI too large.", "Bad arguments to function.", "Bad resource in URI.", "Bad port number in URI.", "Bad hostname in URI.", "Bad username in URI.", "Bad scheme in URI.", "Bad/empty URI." }; /* * Validate print job attributes... */ if (!valid_job_attributes(client)) { httpFlush(client->http); return; } /* * Do we have a file to print? */ if (httpGetState(client->http) == HTTP_STATE_POST_RECV) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Unexpected document data following request."); return; } /* * Do we have a document URI? */ if ((uri = ippFindAttribute(client->request, "document-uri", IPP_TAG_URI)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing document-uri."); return; } if (ippGetCount(uri) != 1) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Too many document-uri values."); return; } uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, ippGetString(uri, 0, NULL), scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if (uri_status < HTTP_URI_STATUS_OK) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Bad document-uri: %s", uri_status_strings[uri_status - HTTP_URI_STATUS_OVERFLOW]); return; } if (strcmp(scheme, "file") && #ifdef HAVE_SSL strcmp(scheme, "https") && #endif /* HAVE_SSL */ strcmp(scheme, "http")) { respond_ipp(client, IPP_STATUS_ERROR_URI_SCHEME, "URI scheme \"%s\" not supported.", scheme); return; } if (!strcmp(scheme, "file") && access(resource, R_OK)) { respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS, "Unable to access URI: %s", strerror(errno)); return; } /* * Print the job... */ if ((job = create_job(client)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_BUSY, "Currently printing another job."); return; } /* * Create a file for the request data... */ if (!strcasecmp(job->format, "image/jpeg")) snprintf(filename, sizeof(filename), "%s/%d.jpg", client->printer->directory, job->id); else if (!strcasecmp(job->format, "image/png")) snprintf(filename, sizeof(filename), "%s/%d.png", client->printer->directory, job->id); else if (!strcasecmp(job->format, "application/pdf")) snprintf(filename, sizeof(filename), "%s/%d.pdf", client->printer->directory, job->id); else if (!strcasecmp(job->format, "application/postscript")) snprintf(filename, sizeof(filename), "%s/%d.ps", client->printer->directory, job->id); else snprintf(filename, sizeof(filename), "%s/%d.prn", client->printer->directory, job->id); if ((job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600)) < 0) { job->state = IPP_JSTATE_ABORTED; respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to create print file: %s", strerror(errno)); return; } if (!strcmp(scheme, "file")) { if ((infile = open(resource, O_RDONLY)) < 0) { respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS, "Unable to access URI: %s", strerror(errno)); return; } do { if ((bytes = read(infile, buffer, sizeof(buffer))) < 0 && (errno == EAGAIN || errno == EINTR)) bytes = 1; else if (bytes > 0 && write(job->fd, buffer, (size_t)bytes) < bytes) { int error = errno; /* Write error */ job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); close(infile); respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to write print file: %s", strerror(error)); return; } } while (bytes > 0); close(infile); } else { #ifdef HAVE_SSL if (port == 443 || !strcmp(scheme, "https")) encryption = HTTP_ENCRYPTION_ALWAYS; else #endif /* HAVE_SSL */ encryption = HTTP_ENCRYPTION_IF_REQUESTED; if ((http = httpConnect2(hostname, port, NULL, AF_UNSPEC, encryption, 1, 30000, NULL)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS, "Unable to connect to %s: %s", hostname, cupsLastErrorString()); job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); return; } httpClearFields(http); httpSetField(http, HTTP_FIELD_ACCEPT_LANGUAGE, "en"); if (httpGet(http, resource)) { respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS, "Unable to GET URI: %s", strerror(errno)); job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); httpClose(http); return; } while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE); if (status != HTTP_STATUS_OK) { respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS, "Unable to GET URI: %s", httpStatus(status)); job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); httpClose(http); return; } while ((bytes = httpRead2(http, buffer, sizeof(buffer))) > 0) { if (write(job->fd, buffer, (size_t)bytes) < bytes) { int error = errno; /* Write error */ job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); httpClose(http); respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to write print file: %s", strerror(error)); return; } } httpClose(http); } if (close(job->fd)) { int error = errno; /* Write error */ job->state = IPP_JSTATE_ABORTED; job->fd = -1; unlink(filename); respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to write print file: %s", strerror(error)); return; } job->fd = -1; job->filename = strdup(filename); job->state = IPP_JSTATE_PENDING; /* * Process the job... */ process_job(job); /* * Return the job info... */ respond_ipp(client, IPP_STATUS_OK, NULL); ra = cupsArrayNew((cups_array_func_t)strcmp, NULL); cupsArrayAdd(ra, "job-id"); cupsArrayAdd(ra, "job-state"); cupsArrayAdd(ra, "job-state-reasons"); cupsArrayAdd(ra, "job-uri"); copy_job_attributes(client, job, ra); cupsArrayDelete(ra); } /* * 'ipp_send_document()' - Add an attached document to a job object created with * Create-Job. */ static void ipp_send_document(_ipp_client_t *client)/* I - Client */ { _ipp_job_t *job; /* Job information */ char filename[1024], /* Filename buffer */ buffer[4096]; /* Copy buffer */ ssize_t bytes; /* Bytes read */ ipp_attribute_t *attr; /* Current attribute */ cups_array_t *ra; /* Attributes to send in response */ /* * Get the job... */ if ((job = find_job(client)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist."); httpFlush(client->http); return; } /* * See if we already have a document for this job or the job has already * in a non-pending state... */ if (job->state > IPP_JSTATE_HELD) { respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job is not in a pending state."); httpFlush(client->http); return; } else if (job->filename || job->fd >= 0) { respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED, "Multiple document jobs are not supported."); httpFlush(client->http); return; } if ((attr = ippFindAttribute(client->request, "last-document", IPP_TAG_ZERO)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing required last-document attribute."); httpFlush(client->http); return; } else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1 || !ippGetBoolean(attr, 0)) { respond_unsupported(client, attr); httpFlush(client->http); return; } /* * Validate document attributes... */ if (!valid_doc_attributes(client)) { httpFlush(client->http); return; } copy_attributes(job->attrs, client->request, NULL, IPP_TAG_JOB, 0); /* * Get the document format for the job... */ _cupsRWLockWrite(&(client->printer->rwlock)); if ((attr = ippFindAttribute(job->attrs, "document-format-detected", IPP_TAG_MIMETYPE)) != NULL) job->format = ippGetString(attr, 0, NULL); else if ((attr = ippFindAttribute(job->attrs, "document-format-supplied", IPP_TAG_MIMETYPE)) != NULL) job->format = ippGetString(attr, 0, NULL); else job->format = "application/octet-stream"; /* * Create a file for the request data... */ create_job_filename(client->printer, job, filename, sizeof(filename)); if (Verbosity) fprintf(stderr, "Creating job file \"%s\", format \"%s\".\n", filename, job->format); job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600); _cupsRWUnlock(&(client->printer->rwlock)); if (job->fd < 0) { job->state = IPP_JSTATE_ABORTED; respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to create print file: %s", strerror(errno)); return; } while ((bytes = httpRead2(client->http, buffer, sizeof(buffer))) > 0) { if (write(job->fd, buffer, (size_t)bytes) < bytes) { int error = errno; /* Write error */ job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to write print file: %s", strerror(error)); return; } } if (bytes < 0) { /* * Got an error while reading the print data, so abort this job. */ job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to read print file."); return; } if (close(job->fd)) { int error = errno; /* Write error */ job->state = IPP_JSTATE_ABORTED; job->fd = -1; unlink(filename); respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to write print file: %s", strerror(error)); return; } _cupsRWLockWrite(&(client->printer->rwlock)); job->fd = -1; job->filename = strdup(filename); job->state = IPP_JSTATE_PENDING; _cupsRWUnlock(&(client->printer->rwlock)); /* * Process the job... */ process_job(job); /* * Return the job info... */ respond_ipp(client, IPP_STATUS_OK, NULL); ra = cupsArrayNew((cups_array_func_t)strcmp, NULL); cupsArrayAdd(ra, "job-id"); cupsArrayAdd(ra, "job-state"); cupsArrayAdd(ra, "job-state-reasons"); cupsArrayAdd(ra, "job-uri"); copy_job_attributes(client, job, ra); cupsArrayDelete(ra); } /* * 'ipp_send_uri()' - Add a referenced document to a job object created with * Create-Job. */ static void ipp_send_uri(_ipp_client_t *client) /* I - Client */ { _ipp_job_t *job; /* Job information */ ipp_attribute_t *uri; /* document-uri */ char scheme[256], /* URI scheme */ userpass[256], /* Username and password info */ hostname[256], /* Hostname */ resource[1024]; /* Resource path */ int port; /* Port number */ http_uri_status_t uri_status; /* URI decode status */ http_encryption_t encryption; /* Encryption to use, if any */ http_t *http; /* Connection for http/https URIs */ http_status_t status; /* Access status for http/https URIs */ int infile; /* Input file for local file URIs */ char filename[1024], /* Filename buffer */ buffer[4096]; /* Copy buffer */ ssize_t bytes; /* Bytes read */ ipp_attribute_t *attr; /* Current attribute */ cups_array_t *ra; /* Attributes to send in response */ static const char * const uri_status_strings[] = { /* URI decode errors */ "URI too large.", "Bad arguments to function.", "Bad resource in URI.", "Bad port number in URI.", "Bad hostname in URI.", "Bad username in URI.", "Bad scheme in URI.", "Bad/empty URI." }; /* * Get the job... */ if ((job = find_job(client)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist."); httpFlush(client->http); return; } /* * See if we already have a document for this job or the job has already * in a non-pending state... */ if (job->state > IPP_JSTATE_HELD) { respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job is not in a pending state."); httpFlush(client->http); return; } else if (job->filename || job->fd >= 0) { respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED, "Multiple document jobs are not supported."); httpFlush(client->http); return; } if ((attr = ippFindAttribute(client->request, "last-document", IPP_TAG_ZERO)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing required last-document attribute."); httpFlush(client->http); return; } else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1 || !ippGetBoolean(attr, 0)) { respond_unsupported(client, attr); httpFlush(client->http); return; } /* * Validate document attributes... */ if (!valid_doc_attributes(client)) { httpFlush(client->http); return; } /* * Do we have a file to print? */ if (httpGetState(client->http) == HTTP_STATE_POST_RECV) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Unexpected document data following request."); return; } /* * Do we have a document URI? */ if ((uri = ippFindAttribute(client->request, "document-uri", IPP_TAG_URI)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing document-uri."); return; } if (ippGetCount(uri) != 1) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Too many document-uri values."); return; } uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, ippGetString(uri, 0, NULL), scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if (uri_status < HTTP_URI_STATUS_OK) { respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Bad document-uri: %s", uri_status_strings[uri_status - HTTP_URI_STATUS_OVERFLOW]); return; } if (strcmp(scheme, "file") && #ifdef HAVE_SSL strcmp(scheme, "https") && #endif /* HAVE_SSL */ strcmp(scheme, "http")) { respond_ipp(client, IPP_STATUS_ERROR_URI_SCHEME, "URI scheme \"%s\" not supported.", scheme); return; } if (!strcmp(scheme, "file") && access(resource, R_OK)) { respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS, "Unable to access URI: %s", strerror(errno)); return; } /* * Get the document format for the job... */ _cupsRWLockWrite(&(client->printer->rwlock)); if ((attr = ippFindAttribute(job->attrs, "document-format", IPP_TAG_MIMETYPE)) != NULL) job->format = ippGetString(attr, 0, NULL); else job->format = "application/octet-stream"; /* * Create a file for the request data... */ if (!strcasecmp(job->format, "image/jpeg")) snprintf(filename, sizeof(filename), "%s/%d.jpg", client->printer->directory, job->id); else if (!strcasecmp(job->format, "image/png")) snprintf(filename, sizeof(filename), "%s/%d.png", client->printer->directory, job->id); else if (!strcasecmp(job->format, "application/pdf")) snprintf(filename, sizeof(filename), "%s/%d.pdf", client->printer->directory, job->id); else if (!strcasecmp(job->format, "application/postscript")) snprintf(filename, sizeof(filename), "%s/%d.ps", client->printer->directory, job->id); else snprintf(filename, sizeof(filename), "%s/%d.prn", client->printer->directory, job->id); job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600); _cupsRWUnlock(&(client->printer->rwlock)); if (job->fd < 0) { job->state = IPP_JSTATE_ABORTED; respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to create print file: %s", strerror(errno)); return; } if (!strcmp(scheme, "file")) { if ((infile = open(resource, O_RDONLY)) < 0) { respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS, "Unable to access URI: %s", strerror(errno)); return; } do { if ((bytes = read(infile, buffer, sizeof(buffer))) < 0 && (errno == EAGAIN || errno == EINTR)) bytes = 1; else if (bytes > 0 && write(job->fd, buffer, (size_t)bytes) < bytes) { int error = errno; /* Write error */ job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); close(infile); respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to write print file: %s", strerror(error)); return; } } while (bytes > 0); close(infile); } else { #ifdef HAVE_SSL if (port == 443 || !strcmp(scheme, "https")) encryption = HTTP_ENCRYPTION_ALWAYS; else #endif /* HAVE_SSL */ encryption = HTTP_ENCRYPTION_IF_REQUESTED; if ((http = httpConnect2(hostname, port, NULL, AF_UNSPEC, encryption, 1, 30000, NULL)) == NULL) { respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS, "Unable to connect to %s: %s", hostname, cupsLastErrorString()); job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); return; } httpClearFields(http); httpSetField(http, HTTP_FIELD_ACCEPT_LANGUAGE, "en"); if (httpGet(http, resource)) { respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS, "Unable to GET URI: %s", strerror(errno)); job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); httpClose(http); return; } while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE); if (status != HTTP_STATUS_OK) { respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS, "Unable to GET URI: %s", httpStatus(status)); job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); httpClose(http); return; } while ((bytes = httpRead2(http, buffer, sizeof(buffer))) > 0) { if (write(job->fd, buffer, (size_t)bytes) < bytes) { int error = errno; /* Write error */ job->state = IPP_JSTATE_ABORTED; close(job->fd); job->fd = -1; unlink(filename); httpClose(http); respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to write print file: %s", strerror(error)); return; } } httpClose(http); } if (close(job->fd)) { int error = errno; /* Write error */ job->state = IPP_JSTATE_ABORTED; job->fd = -1; unlink(filename); respond_ipp(client, IPP_STATUS_ERROR_INTERNAL, "Unable to write print file: %s", strerror(error)); return; } _cupsRWLockWrite(&(client->printer->rwlock)); job->fd = -1; job->filename = strdup(filename); job->state = IPP_JSTATE_PENDING; _cupsRWUnlock(&(client->printer->rwlock)); /* * Process the job... */ process_job(job); /* * Return the job info... */ respond_ipp(client, IPP_STATUS_OK, NULL); ra = cupsArrayNew((cups_array_func_t)strcmp, NULL); cupsArrayAdd(ra, "job-id"); cupsArrayAdd(ra, "job-state"); cupsArrayAdd(ra, "job-state-reasons"); cupsArrayAdd(ra, "job-uri"); copy_job_attributes(client, job, ra); cupsArrayDelete(ra); } /* * 'ipp_validate_job()' - Validate job creation attributes. */ static void ipp_validate_job(_ipp_client_t *client) /* I - Client */ { if (valid_job_attributes(client)) respond_ipp(client, IPP_STATUS_OK, NULL); } /* * 'load_attributes()' - Load printer attributes from a file. * * Syntax is based on ipptool format: * * ATTR value-tag name value */ static void load_attributes(const char *filename, /* I - File to load */ ipp_t *attrs) /* I - Printer attributes */ { int linenum = 0; /* Current line number */ FILE *fp = NULL; /* Test file */ char attr[128], /* Attribute name */ token[1024], /* Token from file */ *tokenptr; /* Pointer into token */ ipp_tag_t value; /* Current value type */ ipp_attribute_t *attrptr, /* Attribute pointer */ *lastcol = NULL; /* Last collection attribute */ if ((fp = fopen(filename, "r")) == NULL) { fprintf(stderr, "ippserver: Unable to open \"%s\": %s\n", filename, strerror(errno)); exit(1); } while (get_token(fp, token, sizeof(token), &linenum) != NULL) { if (!_cups_strcasecmp(token, "ATTR")) { /* * Attribute... */ if (!get_token(fp, token, sizeof(token), &linenum)) { fprintf(stderr, "ippserver: Missing ATTR value tag on line %d of \"%s\".\n", linenum, filename); exit(1); } if ((value = ippTagValue(token)) == IPP_TAG_ZERO) { fprintf(stderr, "ippserver: Bad ATTR value tag \"%s\" on line %d of \"%s\".\n", token, linenum, filename); exit(1); } if (!get_token(fp, attr, sizeof(attr), &linenum)) { fprintf(stderr, "ippserver: Missing ATTR name on line %d of \"%s\".\n", linenum, filename); exit(1); } if (!get_token(fp, token, sizeof(token), &linenum)) { fprintf(stderr, "ippserver: Missing ATTR value on line %d of \"%s\".\n", linenum, filename); exit(1); } attrptr = NULL; switch (value) { case IPP_TAG_BOOLEAN : if (!_cups_strcasecmp(token, "true")) attrptr = ippAddBoolean(attrs, IPP_TAG_PRINTER, attr, 1); else attrptr = ippAddBoolean(attrs, IPP_TAG_PRINTER, attr, (char)atoi(token)); break; case IPP_TAG_INTEGER : case IPP_TAG_ENUM : if (!strchr(token, ',')) attrptr = ippAddInteger(attrs, IPP_TAG_PRINTER, value, attr, (int)strtol(token, &tokenptr, 0)); else { int values[100], /* Values */ num_values = 1; /* Number of values */ values[0] = (int)strtol(token, &tokenptr, 10); while (tokenptr && *tokenptr && num_values < (int)(sizeof(values) / sizeof(values[0]))) { if (*tokenptr == ',') tokenptr ++; else if (!isdigit(*tokenptr & 255) && *tokenptr != '-') break; values[num_values] = (int)strtol(tokenptr, &tokenptr, 0); num_values ++; } attrptr = ippAddIntegers(attrs, IPP_TAG_PRINTER, value, attr, num_values, values); } if (!tokenptr || *tokenptr) { fprintf(stderr, "ippserver: Bad %s value \"%s\" on line %d of \"%s\".\n", ippTagString(value), token, linenum, filename); exit(1); } break; case IPP_TAG_RESOLUTION : { int xres, /* X resolution */ yres; /* Y resolution */ ipp_res_t units; /* Units */ char *start, /* Start of value */ *ptr, /* Pointer into value */ *next = NULL; /* Next value */ for (start = token; start; start = next) { xres = yres = (int)strtol(start, (char **)&ptr, 10); if (ptr > start && xres > 0) { if (*ptr == 'x') yres = (int)strtol(ptr + 1, (char **)&ptr, 10); } if (ptr && (next = strchr(ptr, ',')) != NULL) *next++ = '\0'; if (ptr <= start || xres <= 0 || yres <= 0 || !ptr || (_cups_strcasecmp(ptr, "dpi") && _cups_strcasecmp(ptr, "dpc") && _cups_strcasecmp(ptr, "dpcm") && _cups_strcasecmp(ptr, "other"))) { fprintf(stderr, "ippserver: Bad resolution value \"%s\" on line %d of \"%s\".\n", token, linenum, filename); exit(1); } if (!_cups_strcasecmp(ptr, "dpc") || !_cups_strcasecmp(ptr, "dpcm")) units = IPP_RES_PER_CM; else units = IPP_RES_PER_INCH; if (attrptr) ippSetResolution(attrs, &attrptr, ippGetCount(attrptr), units, xres, yres); else attrptr = ippAddResolution(attrs, IPP_TAG_PRINTER, attr, units, xres, yres); } } break; case IPP_TAG_RANGE : { int lowers[4], /* Lower value */ uppers[4], /* Upper values */ num_vals; /* Number of values */ num_vals = sscanf(token, "%d-%d,%d-%d,%d-%d,%d-%d", lowers + 0, uppers + 0, lowers + 1, uppers + 1, lowers + 2, uppers + 2, lowers + 3, uppers + 3); if ((num_vals & 1) || num_vals == 0) { fprintf(stderr, "ippserver: Bad rangeOfInteger value \"%s\" on line %d of \"%s\".", token, linenum, filename); exit(1); } attrptr = ippAddRanges(attrs, IPP_TAG_PRINTER, attr, num_vals / 2, lowers, uppers); } break; case IPP_TAG_BEGIN_COLLECTION : if (!strcmp(token, "{")) { ipp_t *col = get_collection(fp, filename, &linenum); /* Collection value */ if (col) { attrptr = lastcol = ippAddCollection(attrs, IPP_TAG_PRINTER, attr, col); ippDelete(col); } else exit(1); } else { fprintf(stderr, "ippserver: Bad ATTR collection value on line %d of \"%s\".\n", linenum, filename); exit(1); } do { ipp_t *col; /* Collection value */ long pos = ftell(fp); /* Save position of file */ if (!get_token(fp, token, sizeof(token), &linenum)) break; if (strcmp(token, ",")) { fseek(fp, pos, SEEK_SET); break; } if (!get_token(fp, token, sizeof(token), &linenum) || strcmp(token, "{")) { fprintf(stderr, "ippserver: Unexpected \"%s\" on line %d of \"%s\".\n", token, linenum, filename); exit(1); } if ((col = get_collection(fp, filename, &linenum)) == NULL) break; ippSetCollection(attrs, &attrptr, ippGetCount(attrptr), col); } while (!strcmp(token, "{")); break; case IPP_TAG_STRING : attrptr = ippAddOctetString(attrs, IPP_TAG_PRINTER, attr, token, (int)strlen(token)); break; default : fprintf(stderr, "ippserver: Unsupported ATTR value tag %s on line %d of \"%s\".\n", ippTagString(value), linenum, filename); exit(1); case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : if (!strchr(token, ',')) attrptr = ippAddString(attrs, IPP_TAG_PRINTER, value, attr, NULL, token); else { /* * Multiple string values... */ int num_values; /* Number of values */ char *values[100], /* Values */ *ptr; /* Pointer to next value */ values[0] = token; num_values = 1; for (ptr = strchr(token, ','); ptr; ptr = strchr(ptr, ',')) { if (ptr > token && ptr[-1] == '\\') _cups_strcpy(ptr - 1, ptr); else { *ptr++ = '\0'; values[num_values] = ptr; num_values ++; if (num_values >= (int)(sizeof(values) / sizeof(values[0]))) break; } } attrptr = ippAddStrings(attrs, IPP_TAG_PRINTER, value, attr, num_values, NULL, (const char **)values); } break; } if (!attrptr) { fprintf(stderr, "ippserver: Unable to add attribute on line %d of \"%s\": %s\n", linenum, filename, cupsLastErrorString()); exit(1); } } else { fprintf(stderr, "ippserver: Unknown directive \"%s\" on line %d of \"%s\".\n", token, linenum, filename); exit(1); } } fclose(fp); } /* * 'parse_options()' - Parse URL options into CUPS options. * * The client->options string is destroyed by this function. */ static int /* O - Number of options */ parse_options(_ipp_client_t *client, /* I - Client */ cups_option_t **options) /* O - Options */ { char *name, /* Name */ *value, /* Value */ *next; /* Next name=value pair */ int num_options = 0; /* Number of options */ *options = NULL; for (name = client->options; name && *name; name = next) { if ((value = strchr(name, '=')) == NULL) break; *value++ = '\0'; if ((next = strchr(value, '&')) != NULL) *next++ = '\0'; num_options = cupsAddOption(name, value, num_options, options); } return (num_options); } /* * 'process_attr_message()' - Process an ATTR: message from a command. */ static void process_attr_message( _ipp_job_t *job, /* I - Job */ char *message) /* I - Message */ { (void)job; (void)message; } /* * 'process_client()' - Process client requests on a thread. */ static void * /* O - Exit status */ process_client(_ipp_client_t *client) /* I - Client */ { /* * Loop until we are out of requests or timeout (30 seconds)... */ #ifdef HAVE_SSL int first_time = 1; /* First time request? */ #endif /* HAVE_SSL */ while (httpWait(client->http, 30000)) { #ifdef HAVE_SSL if (first_time) { /* * See if we need to negotiate a TLS connection... */ char buf[1]; /* First byte from client */ if (recv(httpGetFd(client->http), buf, 1, MSG_PEEK) == 1 && (!buf[0] || !strchr("DGHOPT", buf[0]))) { fprintf(stderr, "%s Starting HTTPS session.\n", client->hostname); if (httpEncryption(client->http, HTTP_ENCRYPTION_ALWAYS)) { fprintf(stderr, "%s Unable to encrypt connection: %s\n", client->hostname, cupsLastErrorString()); break; } fprintf(stderr, "%s Connection now encrypted.\n", client->hostname); } first_time = 0; } #endif /* HAVE_SSL */ if (!process_http(client)) break; } /* * Close the conection to the client and return... */ delete_client(client); return (NULL); } /* * 'process_http()' - Process a HTTP request. */ int /* O - 1 on success, 0 on failure */ process_http(_ipp_client_t *client) /* I - Client connection */ { char uri[1024]; /* URI */ http_state_t http_state; /* HTTP state */ http_status_t http_status; /* HTTP status */ ipp_state_t ipp_state; /* State of IPP transfer */ char scheme[32], /* Method/scheme */ userpass[128], /* Username:password */ hostname[HTTP_MAX_HOST]; /* Hostname */ int port; /* Port number */ const char *encoding; /* Content-Encoding value */ static const char * const http_states[] = { /* Strings for logging HTTP method */ "WAITING", "OPTIONS", "GET", "GET_SEND", "HEAD", "POST", "POST_RECV", "POST_SEND", "PUT", "PUT_RECV", "DELETE", "TRACE", "CONNECT", "STATUS", "UNKNOWN_METHOD", "UNKNOWN_VERSION" }; /* * Clear state variables... */ ippDelete(client->request); ippDelete(client->response); client->request = NULL; client->response = NULL; client->operation = HTTP_STATE_WAITING; /* * Read a request from the connection... */ while ((http_state = httpReadRequest(client->http, uri, sizeof(uri))) == HTTP_STATE_WAITING) usleep(1); /* * Parse the request line... */ if (http_state == HTTP_STATE_ERROR) { if (httpError(client->http) == EPIPE) fprintf(stderr, "%s Client closed connection.\n", client->hostname); else fprintf(stderr, "%s Bad request line (%s).\n", client->hostname, strerror(httpError(client->http))); return (0); } else if (http_state == HTTP_STATE_UNKNOWN_METHOD) { fprintf(stderr, "%s Bad/unknown operation.\n", client->hostname); respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0); return (0); } else if (http_state == HTTP_STATE_UNKNOWN_VERSION) { fprintf(stderr, "%s Bad HTTP version.\n", client->hostname); respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0); return (0); } fprintf(stderr, "%s %s %s\n", client->hostname, http_states[http_state], uri); /* * Separate the URI into its components... */ if (httpSeparateURI(HTTP_URI_CODING_MOST, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, client->uri, sizeof(client->uri)) < HTTP_URI_STATUS_OK && (http_state != HTTP_STATE_OPTIONS || strcmp(uri, "*"))) { fprintf(stderr, "%s Bad URI \"%s\".\n", client->hostname, uri); respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0); return (0); } if ((client->options = strchr(client->uri, '?')) != NULL) *(client->options)++ = '\0'; /* * Process the request... */ client->start = time(NULL); client->operation = httpGetState(client->http); /* * Parse incoming parameters until the status changes... */ while ((http_status = httpUpdate(client->http)) == HTTP_STATUS_CONTINUE); if (http_status != HTTP_STATUS_OK) { respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0); return (0); } if (!httpGetField(client->http, HTTP_FIELD_HOST)[0] && httpGetVersion(client->http) >= HTTP_VERSION_1_1) { /* * HTTP/1.1 and higher require the "Host:" field... */ respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0); return (0); } /* * Handle HTTP Upgrade... */ if (!strcasecmp(httpGetField(client->http, HTTP_FIELD_CONNECTION), "Upgrade")) { #ifdef HAVE_SSL if (strstr(httpGetField(client->http, HTTP_FIELD_UPGRADE), "TLS/") != NULL && !httpIsEncrypted(client->http)) { if (!respond_http(client, HTTP_STATUS_SWITCHING_PROTOCOLS, NULL, NULL, 0)) return (0); fprintf(stderr, "%s Upgrading to encrypted connection.\n", client->hostname); if (httpEncryption(client->http, HTTP_ENCRYPTION_REQUIRED)) { fprintf(stderr, "%s Unable to encrypt connection: %s\n", client->hostname, cupsLastErrorString()); return (0); } fprintf(stderr, "%s Connection now encrypted.\n", client->hostname); } else #endif /* HAVE_SSL */ if (!respond_http(client, HTTP_STATUS_NOT_IMPLEMENTED, NULL, NULL, 0)) return (0); } /* * Handle HTTP Expect... */ if (httpGetExpect(client->http) && (client->operation == HTTP_STATE_POST || client->operation == HTTP_STATE_PUT)) { if (httpGetExpect(client->http) == HTTP_STATUS_CONTINUE) { /* * Send 100-continue header... */ if (!respond_http(client, HTTP_STATUS_CONTINUE, NULL, NULL, 0)) return (0); } else { /* * Send 417-expectation-failed header... */ if (!respond_http(client, HTTP_STATUS_EXPECTATION_FAILED, NULL, NULL, 0)) return (0); } } /* * Handle new transfers... */ encoding = httpGetContentEncoding(client->http); switch (client->operation) { case HTTP_STATE_OPTIONS : /* * Do OPTIONS command... */ return (respond_http(client, HTTP_STATUS_OK, NULL, NULL, 0)); case HTTP_STATE_HEAD : if (!strcmp(client->uri, "/icon.png")) return (respond_http(client, HTTP_STATUS_OK, NULL, "image/png", 0)); else if (!strcmp(client->uri, "/") || !strcmp(client->uri, "/media") || !strcmp(client->uri, "/supplies")) return (respond_http(client, HTTP_STATUS_OK, NULL, "text/html", 0)); else return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0)); case HTTP_STATE_GET : if (!strcmp(client->uri, "/icon.png")) { /* * Send PNG icon file. */ int fd; /* Icon file */ struct stat fileinfo; /* Icon file information */ char buffer[4096]; /* Copy buffer */ ssize_t bytes; /* Bytes */ fprintf(stderr, "Icon file is \"%s\".\n", client->printer->icon); if (!stat(client->printer->icon, &fileinfo) && (fd = open(client->printer->icon, O_RDONLY)) >= 0) { if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png", (size_t)fileinfo.st_size)) { close(fd); return (0); } while ((bytes = read(fd, buffer, sizeof(buffer))) > 0) httpWrite2(client->http, buffer, (size_t)bytes); httpFlushWrite(client->http); close(fd); } else return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0)); } else if (!strcmp(client->uri, "/")) { /* * Show web status page... */ _ipp_job_t *job; /* Current job */ int i; /* Looping var */ _ipp_preason_t reason; /* Current reason */ static const char * const reasons[] = { /* Reason strings */ "Other", "Cover Open", "Input Tray Missing", "Marker Supply Empty", "Marker Supply Low", "Marker Waste Almost Full", "Marker Waste Full", "Media Empty", "Media Jam", "Media Low", "Media Needed", "Moving to Paused", "Paused", "Spool Area Full", "Toner Empty", "Toner Low" }; if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0)) return (0); html_header(client, client->printer->name); html_printf(client, "

    ippserver (" CUPS_SVERSION ")

    \n" "

    %s, %d job(s).", client->printer->state == IPP_PSTATE_IDLE ? "Idle" : client->printer->state == IPP_PSTATE_PROCESSING ? "Printing" : "Stopped", cupsArrayCount(client->printer->jobs)); for (i = 0, reason = 1; i < (int)(sizeof(reasons) / sizeof(reasons[0])); i ++, reason <<= 1) if (client->printer->state_reasons & reason) html_printf(client, "\n
        %s", reasons[i]); html_printf(client, "

    \n"); if (cupsArrayCount(client->printer->jobs) > 0) { _cupsRWLockRead(&(client->printer->rwlock)); html_printf(client, "\n"); for (job = (_ipp_job_t *)cupsArrayFirst(client->printer->jobs); job; job = (_ipp_job_t *)cupsArrayNext(client->printer->jobs)) { char when[256], /* When job queued/started/finished */ hhmmss[64]; /* Time HH:MM:SS */ switch (job->state) { case IPP_JSTATE_PENDING : case IPP_JSTATE_HELD : snprintf(when, sizeof(when), "Queued at %s", time_string(job->created, hhmmss, sizeof(hhmmss))); break; case IPP_JSTATE_PROCESSING : case IPP_JSTATE_STOPPED : snprintf(when, sizeof(when), "Started at %s", time_string(job->processing, hhmmss, sizeof(hhmmss))); break; case IPP_JSTATE_ABORTED : snprintf(when, sizeof(when), "Aborted at %s", time_string(job->completed, hhmmss, sizeof(hhmmss))); break; case IPP_JSTATE_CANCELED : snprintf(when, sizeof(when), "Canceled at %s", time_string(job->completed, hhmmss, sizeof(hhmmss))); break; case IPP_JSTATE_COMPLETED : snprintf(when, sizeof(when), "Completed at %s", time_string(job->completed, hhmmss, sizeof(hhmmss))); break; } html_printf(client, "\n", job->id, job->name, job->username, when); } html_printf(client, "
    Job #NameOwnerWhen
    %d%s%s%s
    \n"); _cupsRWUnlock(&(client->printer->rwlock)); } html_footer(client); return (1); } else if (!strcmp(client->uri, "/media")) { /* * Show web media page... */ int i, /* Looping var */ num_options; /* Number of form options */ cups_option_t *options; /* Form options */ static const char * const sizes[] = { /* Size strings */ "ISO A4", "ISO A5", "ISO A6", "DL Envelope", "US Legal", "US Letter", "#10 Envelope", "3x5 Photo", "3.5x5 Photo", "4x6 Photo", "5x7 Photo" }; static const char * const types[] = /* Type strings */ { "Auto", "Cardstock", "Envelope", "Labels", "Other", "Glossy Photo", "High-Gloss Photo", "Matte Photo", "Satin Photo", "Semi-Gloss Photo", "Plain", "Letterhead", "Transparency" }; static const int sheets[] = /* Number of sheets */ { 250, 100, 25, 5, 0 }; if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0)) return (0); html_header(client, client->printer->name); if ((num_options = parse_options(client, &options)) > 0) { /* * WARNING: A real printer/server implementation MUST NOT implement * media updates via a GET request - GET requests are supposed to be * idempotent (without side-effects) and we obviously are not * authenticating access here. This form is provided solely to * enable testing and development! */ const char *val; /* Form value */ if ((val = cupsGetOption("main_size", num_options, options)) != NULL) client->printer->main_size = atoi(val); if ((val = cupsGetOption("main_type", num_options, options)) != NULL) client->printer->main_type = atoi(val); if ((val = cupsGetOption("main_level", num_options, options)) != NULL) client->printer->main_level = atoi(val); if ((val = cupsGetOption("envelope_size", num_options, options)) != NULL) client->printer->envelope_size = atoi(val); if ((val = cupsGetOption("envelope_level", num_options, options)) != NULL) client->printer->envelope_level = atoi(val); if ((val = cupsGetOption("photo_size", num_options, options)) != NULL) client->printer->photo_size = atoi(val); if ((val = cupsGetOption("photo_type", num_options, options)) != NULL) client->printer->photo_type = atoi(val); if ((val = cupsGetOption("photo_level", num_options, options)) != NULL) client->printer->photo_level = atoi(val); if ((client->printer->main_level < 100 && client->printer->main_level > 0) || (client->printer->envelope_level < 25 && client->printer->envelope_level > 0) || (client->printer->photo_level < 25 && client->printer->photo_level > 0)) client->printer->state_reasons |= _IPP_PREASON_MEDIA_LOW; else client->printer->state_reasons &= (_ipp_preason_t)~_IPP_PREASON_MEDIA_LOW; if ((client->printer->main_level == 0 && client->printer->main_size > _IPP_MEDIA_SIZE_NONE) || (client->printer->envelope_level == 0 && client->printer->envelope_size > _IPP_MEDIA_SIZE_NONE) || (client->printer->photo_level == 0 && client->printer->photo_size > _IPP_MEDIA_SIZE_NONE)) { client->printer->state_reasons |= _IPP_PREASON_MEDIA_EMPTY; if (client->printer->active_job) client->printer->state_reasons |= _IPP_PREASON_MEDIA_NEEDED; } else client->printer->state_reasons &= (_ipp_preason_t)~(_IPP_PREASON_MEDIA_EMPTY | _IPP_PREASON_MEDIA_NEEDED); html_printf(client, "
    Media updated.
    \n"); } html_printf(client, "
    \n"); html_printf(client, "\n"); html_printf(client, "\n"); html_printf(client, "\n"); html_printf(client, "\n"); html_printf(client, "
    Main Tray:
    Envelope Feeder:
    Photo Tray:
    \n"); html_footer(client); return (1); } else if (!strcmp(client->uri, "/supplies")) { /* * Show web supplies page... */ int i, j, /* Looping vars */ num_options; /* Number of form options */ cups_option_t *options; /* Form options */ static const int levels[] = { 0, 5, 10, 25, 50, 75, 90, 95, 100 }; if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0)) return (0); html_header(client, client->printer->name); if ((num_options = parse_options(client, &options)) > 0) { /* * WARNING: A real printer/server implementation MUST NOT implement * supply updates via a GET request - GET requests are supposed to be * idempotent (without side-effects) and we obviously are not * authenticating access here. This form is provided solely to * enable testing and development! */ char name[64]; /* Form field */ const char *val; /* Form value */ client->printer->state_reasons &= (_ipp_preason_t)~(_IPP_PREASON_MARKER_SUPPLY_EMPTY | _IPP_PREASON_MARKER_SUPPLY_LOW | _IPP_PREASON_MARKER_WASTE_ALMOST_FULL | _IPP_PREASON_MARKER_WASTE_FULL | _IPP_PREASON_TONER_EMPTY | _IPP_PREASON_TONER_LOW); for (i = 0; i < (int)(sizeof(printer_supplies) / sizeof(printer_supplies[0])); i ++) { snprintf(name, sizeof(name), "supply_%d", i); if ((val = cupsGetOption(name, num_options, options)) != NULL) { int level = client->printer->supplies[i] = atoi(val); /* New level */ if (i < 4) { if (level == 0) client->printer->state_reasons |= _IPP_PREASON_TONER_EMPTY; else if (level < 10) client->printer->state_reasons |= _IPP_PREASON_TONER_LOW; } else { if (level == 100) client->printer->state_reasons |= _IPP_PREASON_MARKER_WASTE_FULL; else if (level > 90) client->printer->state_reasons |= _IPP_PREASON_MARKER_WASTE_ALMOST_FULL; } } } html_printf(client, "
    Supplies updated.
    \n"); } html_printf(client, "
    \n"); html_printf(client, "\n"); for (i = 0; i < (int)(sizeof(printer_supplies) / sizeof(printer_supplies[0])); i ++) { html_printf(client, "\n"); } html_printf(client, "\n
    %s:
    \n
    \n"); html_footer(client); return (1); } else return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0)); break; case HTTP_STATE_POST : if (strcmp(httpGetField(client->http, HTTP_FIELD_CONTENT_TYPE), "application/ipp")) { /* * Not an IPP request... */ return (respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0)); } /* * Read the IPP request... */ client->request = ippNew(); while ((ipp_state = ippRead(client->http, client->request)) != IPP_STATE_DATA) { if (ipp_state == IPP_STATE_ERROR) { fprintf(stderr, "%s IPP read error (%s).\n", client->hostname, cupsLastErrorString()); respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0); return (0); } } /* * Now that we have the IPP request, process the request... */ return (process_ipp(client)); default : break; /* Anti-compiler-warning-code */ } return (1); } /* * 'process_ipp()' - Process an IPP request. */ static int /* O - 1 on success, 0 on error */ process_ipp(_ipp_client_t *client) /* I - Client */ { ipp_tag_t group; /* Current group tag */ ipp_attribute_t *attr; /* Current attribute */ ipp_attribute_t *charset; /* Character set attribute */ ipp_attribute_t *language; /* Language attribute */ ipp_attribute_t *uri; /* Printer URI attribute */ int major, minor; /* Version number */ const char *name; /* Name of attribute */ debug_attributes("Request", client->request, 1); /* * First build an empty response message for this request... */ client->operation_id = ippGetOperation(client->request); client->response = ippNewResponse(client->request); /* * Then validate the request header and required attributes... */ major = ippGetVersion(client->request, &minor); if (major < 1 || major > 2) { /* * Return an error, since we only support IPP 1.x and 2.x. */ respond_ipp(client, IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED, "Bad request version number %d.%d.", major, minor); } else if (ippGetRequestId(client->request) <= 0) respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Bad request-id %d.", ippGetRequestId(client->request)); else if (!ippFirstAttribute(client->request)) respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "No attributes in request."); else { /* * Make sure that the attributes are provided in the correct order and * don't repeat groups... */ for (attr = ippFirstAttribute(client->request), group = ippGetGroupTag(attr); attr; attr = ippNextAttribute(client->request)) { if (ippGetGroupTag(attr) < group && ippGetGroupTag(attr) != IPP_TAG_ZERO) { /* * Out of order; return an error... */ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Attribute groups are out of order (%x < %x).", ippGetGroupTag(attr), group); break; } else group = ippGetGroupTag(attr); } if (!attr) { /* * Then make sure that the first three attributes are: * * attributes-charset * attributes-natural-language * printer-uri/job-uri */ attr = ippFirstAttribute(client->request); name = ippGetName(attr); if (attr && name && !strcmp(name, "attributes-charset") && ippGetValueTag(attr) == IPP_TAG_CHARSET) charset = attr; else charset = NULL; attr = ippNextAttribute(client->request); name = ippGetName(attr); if (attr && name && !strcmp(name, "attributes-natural-language") && ippGetValueTag(attr) == IPP_TAG_LANGUAGE) language = attr; else language = NULL; if ((attr = ippFindAttribute(client->request, "printer-uri", IPP_TAG_URI)) != NULL) uri = attr; else if ((attr = ippFindAttribute(client->request, "job-uri", IPP_TAG_URI)) != NULL) uri = attr; else uri = NULL; if (charset && strcasecmp(ippGetString(charset, 0, NULL), "us-ascii") && strcasecmp(ippGetString(charset, 0, NULL), "utf-8")) { /* * Bad character set... */ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Unsupported character set \"%s\".", ippGetString(charset, 0, NULL)); } else if (!charset || !language || !uri) { /* * Return an error, since attributes-charset, * attributes-natural-language, and printer-uri/job-uri are required * for all operations. */ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing required attributes."); } else { char scheme[32], /* URI scheme */ userpass[32], /* Username/password in URI */ host[256], /* Host name in URI */ resource[256]; /* Resource path in URI */ int port; /* Port number in URI */ name = ippGetName(uri); if (httpSeparateURI(HTTP_URI_CODING_ALL, ippGetString(uri, 0, NULL), scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) respond_ipp(client, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, "Bad %s value '%s'.", name, ippGetString(uri, 0, NULL)); else if ((!strcmp(name, "job-uri") && strncmp(resource, "/ipp/print/", 11)) || (!strcmp(name, "printer-uri") && strcmp(resource, "/ipp/print"))) respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "%s %s not found.", name, ippGetString(uri, 0, NULL)); else { /* * Try processing the operation... */ switch (ippGetOperation(client->request)) { case IPP_OP_PRINT_JOB : ipp_print_job(client); break; case IPP_OP_PRINT_URI : ipp_print_uri(client); break; case IPP_OP_VALIDATE_JOB : ipp_validate_job(client); break; case IPP_OP_CREATE_JOB : ipp_create_job(client); break; case IPP_OP_SEND_DOCUMENT : ipp_send_document(client); break; case IPP_OP_SEND_URI : ipp_send_uri(client); break; case IPP_OP_CANCEL_JOB : ipp_cancel_job(client); break; case IPP_OP_GET_JOB_ATTRIBUTES : ipp_get_job_attributes(client); break; case IPP_OP_GET_JOBS : ipp_get_jobs(client); break; case IPP_OP_GET_PRINTER_ATTRIBUTES : ipp_get_printer_attributes(client); break; case IPP_OP_CLOSE_JOB : ipp_close_job(client); break; case IPP_OP_IDENTIFY_PRINTER : ipp_identify_printer(client); break; default : respond_ipp(client, IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED, "Operation not supported."); break; } } } } } /* * Send the HTTP header and return... */ if (httpGetState(client->http) != HTTP_STATE_POST_SEND) httpFlush(client->http); /* Flush trailing (junk) data */ return (respond_http(client, HTTP_STATUS_OK, NULL, "application/ipp", ippLength(client->response))); } /* * 'process_job()' - Process a print job. */ static void * /* O - Thread exit status */ process_job(_ipp_job_t *job) /* I - Job */ { job->state = IPP_JSTATE_PROCESSING; job->printer->state = IPP_PSTATE_PROCESSING; job->processing = time(NULL); while (job->printer->state_reasons & _IPP_PREASON_MEDIA_EMPTY) { job->printer->state_reasons |= _IPP_PREASON_MEDIA_NEEDED; sleep(1); } job->printer->state_reasons &= (_ipp_preason_t)~_IPP_PREASON_MEDIA_NEEDED; if (job->printer->command) { /* * Execute a command with the job spool file and wait for it to complete... */ int pid, /* Process ID */ status; /* Exit status */ time_t start, /* Start time */ end; /* End time */ char *myargv[3], /* Command-line arguments */ *myenvp[200]; /* Environment variables */ int myenvc; /* Number of environment variables */ ipp_attribute_t *attr; /* Job attribute */ char val[1280], /* IPP_NAME=value */ *valptr; /* Pointer into string */ #ifndef WIN32 int mypipe[2]; /* Pipe for stderr */ char line[2048], /* Line from stderr */ *ptr, /* Pointer into line */ *endptr; /* End of line */ ssize_t bytes; /* Bytes read */ #endif /* !WIN32 */ fprintf(stderr, "Running command \"%s %s\".\n", job->printer->command, job->filename); time(&start); /* * Setup the command-line arguments... */ myargv[0] = job->printer->command; myargv[1] = job->filename; myargv[2] = NULL; /* * Copy the current environment, then add ENV variables for every Job * attribute... */ for (myenvc = 0; environ[myenvc] && myenvc < (int)(sizeof(myenvp) / sizeof(myenvp[0]) - 1); myenvc ++) myenvp[myenvc] = strdup(environ[myenvc]); for (attr = ippFirstAttribute(job->attrs); attr && myenvc < (int)(sizeof(myenvp) / sizeof(myenvp[0]) - 1); attr = ippNextAttribute(job->attrs)) { /* * Convert "attribute-name" to "IPP_ATTRIBUTE_NAME=" and then add the * value(s) from the attribute. */ const char *name = ippGetName(attr); if (!name) continue; valptr = val; *valptr++ = 'I'; *valptr++ = 'P'; *valptr++ = 'P'; *valptr++ = '_'; while (*name && valptr < (val + sizeof(val) - 2)) { if (*name == '-') *valptr++ = '_'; else *valptr++ = (char)toupper(*name & 255); name ++; } *valptr++ = '='; ippAttributeString(attr, valptr, sizeof(val) - (size_t)(valptr - val)); myenvp[myenvc++] = strdup(val); } myenvp[myenvc] = NULL; /* * Now run the program... */ #ifdef WIN32 status = _spawnvpe(_P_WAIT, job->printer->command, myargv, myenvp); #else if (pipe(mypipe)) { perror("Unable to create pipe for stderr"); mypipe[0] = mypipe[1] = -1; } if ((pid = fork()) == 0) { /* * Child comes here... */ close(2); dup2(mypipe[1], 2); close(mypipe[0]); close(mypipe[1]); execve(job->printer->command, myargv, myenvp); exit(errno); } else if (pid < 0) { /* * Unable to fork process... */ perror("Unable to start job processing command"); status = -1; close(mypipe[0]); close(mypipe[1]); /* * Free memory used for environment... */ while (myenvc > 0) free(myenvp[-- myenvc]); } else { /* * Free memory used for environment... */ while (myenvc > 0) free(myenvp[-- myenvc]); /* * If the pipe exists, read from it until EOF... */ if (mypipe[0] >= 0) { close(mypipe[1]); endptr = line; while ((bytes = read(mypipe[0], endptr, sizeof(line) - (size_t)(endptr - line) - 1)) > 0) { endptr += bytes; *endptr = '\0'; while ((ptr = strchr(line, '\n')) != NULL) { *ptr++ = '\0'; if (!strncmp(line, "STATE:", 6)) { /* * Process printer-state-reasons keywords. */ process_state_message(job, line); } else if (!strncmp(line, "ATTR:", 5)) { /* * Process printer attribute update. */ process_attr_message(job, line); } else if (Verbosity > 1) fprintf(stderr, "%s: %s\n", job->printer->command, line); bytes = ptr - line; if (ptr < endptr) memmove(line, ptr, (size_t)(endptr - ptr)); endptr -= bytes; *endptr = '\0'; } } close(mypipe[0]); } /* * Wait for child to complete... */ # ifdef HAVE_WAITPID while (waitpid(pid, &status, 0) < 0); # else while (wait(&status) < 0); # endif /* HAVE_WAITPID */ } #endif /* WIN32 */ if (status) { #ifndef WIN32 if (WIFEXITED(status)) #endif /* !WIN32 */ fprintf(stderr, "Command \"%s\" exited with status %d.\n", job->printer->command, WEXITSTATUS(status)); #ifndef WIN32 else fprintf(stderr, "Command \"%s\" terminated with signal %d.\n", job->printer->command, WTERMSIG(status)); #endif /* !WIN32 */ job->state = IPP_JSTATE_ABORTED; } else if (status < 0) job->state = IPP_JSTATE_ABORTED; else fprintf(stderr, "Command \"%s\" completed successfully.\n", job->printer->command); /* * Make sure processing takes at least 5 seconds... */ time(&end); if ((end - start) < 5) sleep(5); } else { /* * Sleep for a random amount of time to simulate job processing. */ sleep((unsigned)(5 + (rand() % 11))); } if (job->cancel) job->state = IPP_JSTATE_CANCELED; else if (job->state == IPP_JSTATE_PROCESSING) job->state = IPP_JSTATE_COMPLETED; job->completed = time(NULL); job->printer->state = IPP_PSTATE_IDLE; job->printer->active_job = NULL; return (NULL); } /* * 'process_state_message()' - Process a STATE: message from a command. */ static void process_state_message( _ipp_job_t *job, /* I - Job */ char *message) /* I - Message */ { int i; /* Looping var */ _ipp_preason_t state_reasons, /* printer-state-reasons values */ bit; /* Current reason bit */ char *ptr, /* Pointer into message */ *next; /* Next keyword in message */ int remove; /* Non-zero if we are removing keywords */ /* * Skip leading "STATE:" and any whitespace... */ for (message += 6; *message; message ++) if (*message != ' ' && *message != '\t') break; /* * Support the following forms of message: * * "keyword[,keyword,...]" to set the printer-state-reasons value(s). * * "-keyword[,keyword,...]" to remove keywords. * * "+keyword[,keyword,...]" to add keywords. * * Keywords may or may not have a suffix (-report, -warning, -error) per * RFC 2911. */ if (*message == '-') { remove = 1; state_reasons = job->printer->state_reasons; message ++; } else if (*message == '+') { remove = 0; state_reasons = job->printer->state_reasons; message ++; } else { remove = 0; state_reasons = _IPP_PREASON_NONE; } while (*message) { if ((next = strchr(message, ',')) != NULL) *next++ = '\0'; if ((ptr = strstr(message, "-error")) != NULL) *ptr = '\0'; else if ((ptr = strstr(message, "-report")) != NULL) *ptr = '\0'; else if ((ptr = strstr(message, "-warning")) != NULL) *ptr = '\0'; for (i = 0, bit = 1; i < (int)(sizeof(_ipp_preason_strings) / sizeof(_ipp_preason_strings[0])); i ++, bit *= 2) { if (!strcmp(message, _ipp_preason_strings[i])) { if (remove) state_reasons &= ~bit; else state_reasons |= bit; } } if (next) message = next; else break; } job->printer->state_reasons = state_reasons; } /* * 'register_printer()' - Register a printer object via Bonjour. */ static int /* O - 1 on success, 0 on error */ register_printer( _ipp_printer_t *printer, /* I - Printer */ const char *location, /* I - Location */ const char *make, /* I - Manufacturer */ const char *model, /* I - Model name */ const char *formats, /* I - Supported formats */ const char *adminurl, /* I - Web interface URL */ const char *uuid, /* I - Printer UUID */ int color, /* I - 1 = color, 0 = monochrome */ int duplex, /* I - 1 = duplex, 0 = simplex */ const char *subtype) /* I - Service subtype */ { #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) _ipp_txt_t ipp_txt; /* Bonjour IPP TXT record */ #endif /* HAVE_DNSSD || HAVE_AVAHI */ #ifdef HAVE_DNSSD DNSServiceErrorType error; /* Error from Bonjour */ char make_model[256],/* Make and model together */ product[256], /* Product string */ regtype[256]; /* Bonjour service type */ /* * Build the TXT record for IPP... */ snprintf(make_model, sizeof(make_model), "%s %s", make, model); snprintf(product, sizeof(product), "(%s)", model); TXTRecordCreate(&ipp_txt, 1024, NULL); TXTRecordSetValue(&ipp_txt, "rp", 9, "ipp/print"); TXTRecordSetValue(&ipp_txt, "ty", (uint8_t)strlen(make_model), make_model); TXTRecordSetValue(&ipp_txt, "adminurl", (uint8_t)strlen(adminurl), adminurl); if (*location) TXTRecordSetValue(&ipp_txt, "note", (uint8_t)strlen(location), location); TXTRecordSetValue(&ipp_txt, "product", (uint8_t)strlen(product), product); TXTRecordSetValue(&ipp_txt, "pdl", (uint8_t)strlen(formats), formats); TXTRecordSetValue(&ipp_txt, "Color", 1, color ? "T" : "F"); TXTRecordSetValue(&ipp_txt, "Duplex", 1, duplex ? "T" : "F"); TXTRecordSetValue(&ipp_txt, "usb_MFG", (uint8_t)strlen(make), make); TXTRecordSetValue(&ipp_txt, "usb_MDL", (uint8_t)strlen(model), model); TXTRecordSetValue(&ipp_txt, "UUID", (uint8_t)strlen(uuid), uuid); # ifdef HAVE_SSL TXTRecordSetValue(&ipp_txt, "TLS", 3, "1.2"); # endif /* HAVE_SSL */ if (strstr(formats, "image/urf")) TXTRecordSetValue(&ipp_txt, "URF", 66, "CP1,IS1-5-7,MT1-2-3-4-5-6-8-9-10-11-12-13,RS300,SRGB24,V1.4,W8,DM1"); TXTRecordSetValue(&ipp_txt, "txtvers", 1, "1"); TXTRecordSetValue(&ipp_txt, "qtotal", 1, "1"); /* * Register the _printer._tcp (LPD) service type with a port number of 0 to * defend our service name but not actually support LPD... */ printer->printer_ref = DNSSDMaster; if ((error = DNSServiceRegister(&(printer->printer_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, "_printer._tcp", NULL /* domain */, NULL /* host */, 0 /* port */, 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError) { fprintf(stderr, "Unable to register \"%s._printer._tcp\": %d\n", printer->dnssd_name, error); return (0); } /* * Then register the _ipp._tcp (IPP) service type with the real port number to * advertise our IPP printer... */ printer->ipp_ref = DNSSDMaster; if (subtype && *subtype) snprintf(regtype, sizeof(regtype), "_ipp._tcp,%s", subtype); else strlcpy(regtype, "_ipp._tcp", sizeof(regtype)); if ((error = DNSServiceRegister(&(printer->ipp_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError) { fprintf(stderr, "Unable to register \"%s.%s\": %d\n", printer->dnssd_name, regtype, error); return (0); } # ifdef HAVE_SSL /* * Then register the _ipps._tcp (IPP) service type with the real port number to * advertise our IPPS printer... */ printer->ipps_ref = DNSSDMaster; if (subtype && *subtype) snprintf(regtype, sizeof(regtype), "_ipps._tcp,%s", subtype); else strlcpy(regtype, "_ipps._tcp", sizeof(regtype)); if ((error = DNSServiceRegister(&(printer->ipps_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError) { fprintf(stderr, "Unable to register \"%s.%s\": %d\n", printer->dnssd_name, regtype, error); return (0); } # endif /* HAVE_SSL */ /* * Similarly, register the _http._tcp,_printer (HTTP) service type with the * real port number to advertise our IPP printer... */ printer->http_ref = DNSSDMaster; if ((error = DNSServiceRegister(&(printer->http_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, "_http._tcp,_printer", NULL /* domain */, NULL /* host */, htons(printer->port), 0 /* txtLen */, NULL, /* txtRecord */ (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError) { fprintf(stderr, "Unable to register \"%s.%s\": %d\n", printer->dnssd_name, regtype, error); return (0); } TXTRecordDeallocate(&ipp_txt); #elif defined(HAVE_AVAHI) char temp[256]; /* Subtype service string */ /* * Create the TXT record... */ ipp_txt = NULL; ipp_txt = avahi_string_list_add_printf(ipp_txt, "rp=ipp/print"); ipp_txt = avahi_string_list_add_printf(ipp_txt, "ty=%s %s", make, model); ipp_txt = avahi_string_list_add_printf(ipp_txt, "adminurl=%s", adminurl); if (*location) ipp_txt = avahi_string_list_add_printf(ipp_txt, "note=%s", location); ipp_txt = avahi_string_list_add_printf(ipp_txt, "product=(%s)", model); ipp_txt = avahi_string_list_add_printf(ipp_txt, "pdl=%s", formats); ipp_txt = avahi_string_list_add_printf(ipp_txt, "Color=%s", color ? "T" : "F"); ipp_txt = avahi_string_list_add_printf(ipp_txt, "Duplex=%s", duplex ? "T" : "F"); ipp_txt = avahi_string_list_add_printf(ipp_txt, "usb_MFG=%s", make); ipp_txt = avahi_string_list_add_printf(ipp_txt, "usb_MDL=%s", model); ipp_txt = avahi_string_list_add_printf(ipp_txt, "UUID=%s", uuid); # ifdef HAVE_SSL ipp_txt = avahi_string_list_add_printf(ipp_txt, "TLS=1.2"); # endif /* HAVE_SSL */ /* * Register _printer._tcp (LPD) with port 0 to reserve the service name... */ avahi_threaded_poll_lock(DNSSDMaster); printer->ipp_ref = avahi_entry_group_new(DNSSDClient, dnssd_callback, NULL); avahi_entry_group_add_service_strlst(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_printer._tcp", NULL, NULL, 0, NULL); /* * Then register the _ipp._tcp (IPP)... */ avahi_entry_group_add_service_strlst(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipp._tcp", NULL, NULL, printer->port, ipp_txt); if (subtype && *subtype) { snprintf(temp, sizeof(temp), "%s._sub._ipp._tcp", subtype); avahi_entry_group_add_service_subtype(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipp._tcp", NULL, temp); } #ifdef HAVE_SSL /* * _ipps._tcp (IPPS) for secure printing... */ avahi_entry_group_add_service_strlst(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipps._tcp", NULL, NULL, printer->port, ipp_txt); if (subtype && *subtype) { snprintf(temp, sizeof(temp), "%s._sub._ipps._tcp", subtype); avahi_entry_group_add_service_subtype(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipps._tcp", NULL, temp); } #endif /* HAVE_SSL */ /* * Finally _http.tcp (HTTP) for the web interface... */ avahi_entry_group_add_service_strlst(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_http._tcp", NULL, NULL, printer->port, NULL); avahi_entry_group_add_service_subtype(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_http._tcp", NULL, "_printer._sub._http._tcp"); /* * Commit it... */ avahi_entry_group_commit(printer->ipp_ref); avahi_threaded_poll_unlock(DNSSDMaster); avahi_string_list_free(ipp_txt); #endif /* HAVE_DNSSD */ return (1); } /* * 'respond_http()' - Send a HTTP response. */ int /* O - 1 on success, 0 on failure */ respond_http( _ipp_client_t *client, /* I - Client */ http_status_t code, /* I - HTTP status of response */ const char *content_encoding, /* I - Content-Encoding of response */ const char *type, /* I - MIME media type of response */ size_t length) /* I - Length of response */ { char message[1024]; /* Text message */ fprintf(stderr, "%s %s\n", client->hostname, httpStatus(code)); if (code == HTTP_STATUS_CONTINUE) { /* * 100-continue doesn't send any headers... */ return (httpWriteResponse(client->http, HTTP_STATUS_CONTINUE) == 0); } /* * Format an error message... */ if (!type && !length && code != HTTP_STATUS_OK && code != HTTP_STATUS_SWITCHING_PROTOCOLS) { snprintf(message, sizeof(message), "%d - %s\n", code, httpStatus(code)); type = "text/plain"; length = strlen(message); } else message[0] = '\0'; /* * Send the HTTP response header... */ httpClearFields(client->http); if (code == HTTP_STATUS_METHOD_NOT_ALLOWED || client->operation == HTTP_STATE_OPTIONS) httpSetField(client->http, HTTP_FIELD_ALLOW, "GET, HEAD, OPTIONS, POST"); if (type) { if (!strcmp(type, "text/html")) httpSetField(client->http, HTTP_FIELD_CONTENT_TYPE, "text/html; charset=utf-8"); else httpSetField(client->http, HTTP_FIELD_CONTENT_TYPE, type); if (content_encoding) httpSetField(client->http, HTTP_FIELD_CONTENT_ENCODING, content_encoding); } httpSetLength(client->http, length); if (httpWriteResponse(client->http, code) < 0) return (0); /* * Send the response data... */ if (message[0]) { /* * Send a plain text message. */ if (httpPrintf(client->http, "%s", message) < 0) return (0); if (httpWrite2(client->http, "", 0) < 0) return (0); } else if (client->response) { /* * Send an IPP response... */ debug_attributes("Response", client->response, 2); ippSetState(client->response, IPP_STATE_IDLE); if (ippWrite(client->http, client->response) != IPP_STATE_DATA) return (0); } return (1); } /* * 'respond_ipp()' - Send an IPP response. */ static void respond_ipp(_ipp_client_t *client, /* I - Client */ ipp_status_t status, /* I - status-code */ const char *message, /* I - printf-style status-message */ ...) /* I - Additional args as needed */ { const char *formatted = NULL; /* Formatted message */ ippSetStatusCode(client->response, status); if (message) { va_list ap; /* Pointer to additional args */ ipp_attribute_t *attr; /* New status-message attribute */ va_start(ap, message); if ((attr = ippFindAttribute(client->response, "status-message", IPP_TAG_TEXT)) != NULL) ippSetStringfv(client->response, &attr, 0, message, ap); else attr = ippAddStringfv(client->response, IPP_TAG_OPERATION, IPP_TAG_TEXT, "status-message", NULL, message, ap); va_end(ap); formatted = ippGetString(attr, 0, NULL); } if (formatted) fprintf(stderr, "%s %s %s (%s)\n", client->hostname, ippOpString(client->operation_id), ippErrorString(status), formatted); else fprintf(stderr, "%s %s %s\n", client->hostname, ippOpString(client->operation_id), ippErrorString(status)); } /* * 'respond_unsupported()' - Respond with an unsupported attribute. */ static void respond_unsupported( _ipp_client_t *client, /* I - Client */ ipp_attribute_t *attr) /* I - Atribute */ { ipp_attribute_t *temp; /* Copy of attribute */ respond_ipp(client, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, "Unsupported %s %s%s value.", ippGetName(attr), ippGetCount(attr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attr))); temp = ippCopyAttribute(client->response, attr, 0); ippSetGroupTag(client->response, &temp, IPP_TAG_UNSUPPORTED_GROUP); } /* * 'run_printer()' - Run the printer service. */ static void run_printer(_ipp_printer_t *printer) /* I - Printer */ { int num_fds; /* Number of file descriptors */ struct pollfd polldata[3]; /* poll() data */ int timeout; /* Timeout for poll() */ _ipp_client_t *client; /* New client */ /* * Setup poll() data for the Bonjour service socket and IPv4/6 listeners... */ polldata[0].fd = printer->ipv4; polldata[0].events = POLLIN; polldata[1].fd = printer->ipv6; polldata[1].events = POLLIN; num_fds = 2; #ifdef HAVE_DNSSD polldata[num_fds ].fd = DNSServiceRefSockFD(DNSSDMaster); polldata[num_fds ++].events = POLLIN; #endif /* HAVE_DNSSD */ /* * Loop until we are killed or have a hard error... */ for (;;) { if (cupsArrayCount(printer->jobs)) timeout = 10; else timeout = -1; if (poll(polldata, (nfds_t)num_fds, timeout) < 0 && errno != EINTR) { perror("poll() failed"); break; } if (polldata[0].revents & POLLIN) { if ((client = create_client(printer, printer->ipv4)) != NULL) { _cups_thread_t t = _cupsThreadCreate((_cups_thread_func_t)process_client, client); if (t) { _cupsThreadDetach(t); } else { perror("Unable to create client thread"); delete_client(client); } } } if (polldata[1].revents & POLLIN) { if ((client = create_client(printer, printer->ipv6)) != NULL) { _cups_thread_t t = _cupsThreadCreate((_cups_thread_func_t)process_client, client); if (t) { _cupsThreadDetach(t); } else { perror("Unable to create client thread"); delete_client(client); } } } #ifdef HAVE_DNSSD if (polldata[2].revents & POLLIN) DNSServiceProcessResult(DNSSDMaster); #endif /* HAVE_DNSSD */ /* * Clean out old jobs... */ clean_jobs(printer); } } /* * 'time_string()' - Return the local time in hours, minutes, and seconds. */ static char * time_string(time_t tv, /* I - Time value */ char *buffer, /* I - Buffer */ size_t bufsize) /* I - Size of buffer */ { struct tm *curtime = localtime(&tv); /* Local time */ strftime(buffer, bufsize, "%X", curtime); return (buffer); } /* * 'usage()' - Show program usage. */ static void usage(int status) /* O - Exit status */ { if (!status) { puts(CUPS_SVERSION " - Copyright 2010-2015 by Apple Inc. All rights " "reserved."); puts(""); } puts("Usage: ippserver [options] \"name\""); puts(""); puts("Options:"); puts("-2 Supports 2-sided printing (default=1-sided)"); puts("-M manufacturer Manufacturer name (default=Test)"); puts("-P PIN printing mode"); puts("-a attributes-file Load printer attributes from file"); puts("-c command Run command for every print job"); printf("-d spool-directory Spool directory " "(default=/tmp/ippserver.%d)\n", (int)getpid()); puts("-f type/subtype[,...] List of supported types " "(default=application/pdf,image/jpeg)"); puts("-h Show program help"); puts("-i iconfile.png PNG icon file (default=printer.png)"); puts("-k Keep job spool files"); puts("-l location Location of printer (default=empty string)"); puts("-m model Model name (default=Printer)"); puts("-n hostname Hostname for printer"); puts("-p port Port number (default=auto)"); puts("-r subtype Bonjour service subtype (default=_print)"); puts("-s speed[,color-speed] Speed in pages per minute (default=10,0)"); puts("-v[vvv] Be (very) verbose"); exit(status); } /* * 'valid_doc_attributes()' - Determine whether the document attributes are * valid. * * When one or more document attributes are invalid, this function adds a * suitable response and attributes to the unsupported group. */ static int /* O - 1 if valid, 0 if not */ valid_doc_attributes( _ipp_client_t *client) /* I - Client */ { int valid = 1; /* Valid attributes? */ ipp_op_t op = ippGetOperation(client->request); /* IPP operation */ const char *op_name = ippOpString(op); /* IPP operation name */ ipp_attribute_t *attr, /* Current attribute */ *supported; /* xxx-supported attribute */ const char *compression = NULL, /* compression value */ *format = NULL; /* document-format value */ /* * Check operation attributes... */ if ((attr = ippFindAttribute(client->request, "compression", IPP_TAG_ZERO)) != NULL) { /* * If compression is specified, only accept a supported value in a Print-Job * or Send-Document request... */ compression = ippGetString(attr, 0, NULL); supported = ippFindAttribute(client->printer->attrs, "compression-supported", IPP_TAG_KEYWORD); if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD || ippGetGroupTag(attr) != IPP_TAG_OPERATION || (op != IPP_OP_PRINT_JOB && op != IPP_OP_SEND_DOCUMENT && op != IPP_OP_VALIDATE_JOB) || !ippContainsString(supported, compression)) { respond_unsupported(client, attr); valid = 0; } else { fprintf(stderr, "%s %s compression=\"%s\"\n", client->hostname, op_name, compression); ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "compression-supplied", NULL, compression); if (strcmp(compression, "none")) { if (Verbosity) fprintf(stderr, "Receiving job file with \"%s\" compression.\n", compression); httpSetField(client->http, HTTP_FIELD_CONTENT_ENCODING, compression); } } } /* * Is it a format we support? */ if ((attr = ippFindAttribute(client->request, "document-format", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_MIMETYPE || ippGetGroupTag(attr) != IPP_TAG_OPERATION) { respond_unsupported(client, attr); valid = 0; } else { format = ippGetString(attr, 0, NULL); fprintf(stderr, "%s %s document-format=\"%s\"\n", client->hostname, op_name, format); ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-supplied", NULL, format); } } else { format = ippGetString(ippFindAttribute(client->printer->attrs, "document-format-default", IPP_TAG_MIMETYPE), 0, NULL); if (!format) format = "application/octet-stream"; /* Should never happen */ attr = ippAddString(client->request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format); } if (format && !strcmp(format, "application/octet-stream") && (ippGetOperation(client->request) == IPP_OP_PRINT_JOB || ippGetOperation(client->request) == IPP_OP_SEND_DOCUMENT)) { /* * Auto-type the file using the first 8 bytes of the file... */ unsigned char header[8]; /* First 8 bytes of file */ memset(header, 0, sizeof(header)); httpPeek(client->http, (char *)header, sizeof(header)); if (!memcmp(header, "%PDF", 4)) format = "application/pdf"; else if (!memcmp(header, "%!", 2)) format = "application/postscript"; else if (!memcmp(header, "\377\330\377", 3) && header[3] >= 0xe0 && header[3] <= 0xef) format = "image/jpeg"; else if (!memcmp(header, "\211PNG", 4)) format = "image/png"; else if (!memcmp(header, "RAS2", 4)) format = "image/pwg-raster"; else if (!memcmp(header, "UNIRAST", 8)) format = "image/urf"; else format = NULL; if (format) { fprintf(stderr, "%s %s Auto-typed document-format=\"%s\"\n", client->hostname, op_name, format); ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-detected", NULL, format); } } if (op != IPP_OP_CREATE_JOB && (supported = ippFindAttribute(client->printer->attrs, "document-format-supported", IPP_TAG_MIMETYPE)) != NULL && !ippContainsString(supported, format)) { respond_unsupported(client, attr); valid = 0; } /* * document-name */ if ((attr = ippFindAttribute(client->request, "document-name", IPP_TAG_NAME)) != NULL) ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_NAME, "document-name-supplied", NULL, ippGetString(attr, 0, NULL)); return (valid); } /* * 'valid_job_attributes()' - Determine whether the job attributes are valid. * * When one or more job attributes are invalid, this function adds a suitable * response and attributes to the unsupported group. */ static int /* O - 1 if valid, 0 if not */ valid_job_attributes( _ipp_client_t *client) /* I - Client */ { int i, /* Looping var */ count, /* Number of values */ valid = 1; /* Valid attributes? */ ipp_attribute_t *attr, /* Current attribute */ *supported; /* xxx-supported attribute */ /* * Check operation attributes... */ valid = valid_doc_attributes(client); /* * Check the various job template attributes... */ if ((attr = ippFindAttribute(client->request, "copies", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetInteger(attr, 0) < 1 || ippGetInteger(attr, 0) > 999) { respond_unsupported(client, attr); valid = 0; } } if ((attr = ippFindAttribute(client->request, "ipp-attribute-fidelity", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_BOOLEAN) { respond_unsupported(client, attr); valid = 0; } } if ((attr = ippFindAttribute(client->request, "job-hold-until", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(attr) != 1 || (ippGetValueTag(attr) != IPP_TAG_NAME && ippGetValueTag(attr) != IPP_TAG_NAMELANG && ippGetValueTag(attr) != IPP_TAG_KEYWORD) || strcmp(ippGetString(attr, 0, NULL), "no-hold")) { respond_unsupported(client, attr); valid = 0; } } if ((attr = ippFindAttribute(client->request, "job-impressions", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetInteger(attr, 0) < 0) { respond_unsupported(client, attr); valid = 0; } } if ((attr = ippFindAttribute(client->request, "job-name", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(attr) != 1 || (ippGetValueTag(attr) != IPP_TAG_NAME && ippGetValueTag(attr) != IPP_TAG_NAMELANG)) { respond_unsupported(client, attr); valid = 0; } ippSetGroupTag(client->request, &attr, IPP_TAG_JOB); } else ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL, "Untitled"); if ((attr = ippFindAttribute(client->request, "job-priority", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetInteger(attr, 0) < 1 || ippGetInteger(attr, 0) > 100) { respond_unsupported(client, attr); valid = 0; } } if ((attr = ippFindAttribute(client->request, "job-sheets", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(attr) != 1 || (ippGetValueTag(attr) != IPP_TAG_NAME && ippGetValueTag(attr) != IPP_TAG_NAMELANG && ippGetValueTag(attr) != IPP_TAG_KEYWORD) || strcmp(ippGetString(attr, 0, NULL), "none")) { respond_unsupported(client, attr); valid = 0; } } if ((attr = ippFindAttribute(client->request, "media", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(attr) != 1 || (ippGetValueTag(attr) != IPP_TAG_NAME && ippGetValueTag(attr) != IPP_TAG_NAMELANG && ippGetValueTag(attr) != IPP_TAG_KEYWORD)) { respond_unsupported(client, attr); valid = 0; } else { supported = ippFindAttribute(client->printer->attrs, "media-supported", IPP_TAG_KEYWORD); if (!ippContainsString(supported, ippGetString(attr, 0, NULL))) { respond_unsupported(client, attr); valid = 0; } } } if ((attr = ippFindAttribute(client->request, "media-col", IPP_TAG_ZERO)) != NULL) { ipp_t *col, /* media-col collection */ *size; /* media-size collection */ ipp_attribute_t *member, /* Member attribute */ *x_dim, /* x-dimension */ *y_dim; /* y-dimension */ int x_value, /* y-dimension value */ y_value; /* x-dimension value */ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_BEGIN_COLLECTION) { respond_unsupported(client, attr); valid = 0; } col = ippGetCollection(attr, 0); if ((member = ippFindAttribute(col, "media-size-name", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(member) != 1 || (ippGetValueTag(member) != IPP_TAG_NAME && ippGetValueTag(member) != IPP_TAG_NAMELANG && ippGetValueTag(member) != IPP_TAG_KEYWORD)) { respond_unsupported(client, attr); valid = 0; } else { supported = ippFindAttribute(client->printer->attrs, "media-supported", IPP_TAG_KEYWORD); if (!ippContainsString(supported, ippGetString(member, 0, NULL))) { respond_unsupported(client, attr); valid = 0; } } } else if ((member = ippFindAttribute(col, "media-size", IPP_TAG_BEGIN_COLLECTION)) != NULL) { if (ippGetCount(member) != 1) { respond_unsupported(client, attr); valid = 0; } else { size = ippGetCollection(member, 0); if ((x_dim = ippFindAttribute(size, "x-dimension", IPP_TAG_INTEGER)) == NULL || ippGetCount(x_dim) != 1 || (y_dim = ippFindAttribute(size, "y-dimension", IPP_TAG_INTEGER)) == NULL || ippGetCount(y_dim) != 1) { respond_unsupported(client, attr); valid = 0; } else { x_value = ippGetInteger(x_dim, 0); y_value = ippGetInteger(y_dim, 0); supported = ippFindAttribute(client->printer->attrs, "media-size-supported", IPP_TAG_BEGIN_COLLECTION); count = ippGetCount(supported); for (i = 0; i < count ; i ++) { size = ippGetCollection(supported, i); x_dim = ippFindAttribute(size, "x-dimension", IPP_TAG_ZERO); y_dim = ippFindAttribute(size, "y-dimension", IPP_TAG_ZERO); if (ippContainsInteger(x_dim, x_value) && ippContainsInteger(y_dim, y_value)) break; } if (i >= count) { respond_unsupported(client, attr); valid = 0; } } } } } if ((attr = ippFindAttribute(client->request, "multiple-document-handling", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD || (strcmp(ippGetString(attr, 0, NULL), "separate-documents-uncollated-copies") && strcmp(ippGetString(attr, 0, NULL), "separate-documents-collated-copies"))) { respond_unsupported(client, attr); valid = 0; } } if ((attr = ippFindAttribute(client->request, "orientation-requested", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_ENUM || ippGetInteger(attr, 0) < IPP_ORIENT_PORTRAIT || ippGetInteger(attr, 0) > IPP_ORIENT_REVERSE_PORTRAIT) { respond_unsupported(client, attr); valid = 0; } } if ((attr = ippFindAttribute(client->request, "page-ranges", IPP_TAG_ZERO)) != NULL) { if (ippGetValueTag(attr) != IPP_TAG_RANGE) { respond_unsupported(client, attr); valid = 0; } } if ((attr = ippFindAttribute(client->request, "print-quality", IPP_TAG_ZERO)) != NULL) { if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_ENUM || ippGetInteger(attr, 0) < IPP_QUALITY_DRAFT || ippGetInteger(attr, 0) > IPP_QUALITY_HIGH) { respond_unsupported(client, attr); valid = 0; } } if ((attr = ippFindAttribute(client->request, "printer-resolution", IPP_TAG_ZERO)) != NULL) { supported = ippFindAttribute(client->printer->attrs, "printer-resolution-supported", IPP_TAG_RESOLUTION); if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_RESOLUTION || !supported) { respond_unsupported(client, attr); valid = 0; } else { int xdpi, /* Horizontal resolution for job template attribute */ ydpi, /* Vertical resolution for job template attribute */ sydpi; /* Vertical resolution for supported value */ ipp_res_t units, /* Units for job template attribute */ sunits; /* Units for supported value */ xdpi = ippGetResolution(attr, 0, &ydpi, &units); count = ippGetCount(supported); for (i = 0; i < count; i ++) { if (xdpi == ippGetResolution(supported, i, &sydpi, &sunits) && ydpi == sydpi && units == sunits) break; } if (i >= count) { respond_unsupported(client, attr); valid = 0; } } } if ((attr = ippFindAttribute(client->request, "sides", IPP_TAG_ZERO)) != NULL) { const char *sides = ippGetString(attr, 0, NULL); /* "sides" value... */ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD) { respond_unsupported(client, attr); valid = 0; } else if ((supported = ippFindAttribute(client->printer->attrs, "sides-supported", IPP_TAG_KEYWORD)) != NULL) { if (!ippContainsString(supported, sides)) { respond_unsupported(client, attr); valid = 0; } } else if (strcmp(sides, "one-sided")) { respond_unsupported(client, attr); valid = 0; } } return (valid); } cups-2.2.7/test/ippserver.man000664 000765 000024 00000010315 13255074424 016646 0ustar00msweetstaff000000 000000 .\" .\" ippserver man page for CUPS. .\" .\" Copyright 2014 by Apple Inc. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH ippserver 1 "CUPS" "28 August 2014" "Apple Inc." .SH NAME ippserver \- a simple internet printing protocol server .SH SYNOPSIS .B ippserver [ .B \-2 ] [ .B \-M .I manufacturer ] [ .B \-P ] [ .B \-c .I command ] [ .B \-d .I spool-directory ] [ .B \-f .I type/subtype[,...] ] [ .B \-h ] [ .B \-i .I iconfile.png ] [ .B \-k ] [ .B \-l .I location ] [ .B \-m .I model ] [ .B \-n .I hostname ] [ .B \-p .I port ] [ .B \-r .I subtype ] [ .B \-s .I speed[,color-speed] ] [ .B \-v[vvv] ] .I service-name .SH DESCRIPTION .B ippserver is a simple Internet Printing Protocol (IPP) server conforming to the IPP Everywhere (PWG 5100.14) specification. It can be used to test client software or act as a very basic print server that runs a command for every job that is printed. .SH OPTIONS The following options are recognized by .B ippserver: .TP 5 .B \-2 Report support for two-sided (duplex) printing. .TP 5 \fB\-M \fImanufacturer\fR Set the manufacturer of the printer. The default is "Test". .TP 5 .B \-P Report support for PIN printing. .TP 5 \fB\-c \fIcommand\fR Run the specified command for each document that is printed. .TP 5 \fB\-d \fIspool-directory\fR Specifies the directory that will hold the print files. The default is a directory under the user's current temporary directory. .TP 5 \fB\-f \fItype/subtype[,...]\fR Specifies a list of MIME media types that the server will accept. The default is "application/pdf,image/jpeg,image/pwg-raster". .TP 5 .B \-h Shows program help. .TP 5 \fB\-i \fIiconfile.png\fR Specifies the printer icon file for the server. The default is "printer.png". .TP 5 .B \-k Keeps the print documents in the spool directory rather than deleting them. .TP 5 \fB\-l \fIlocation\fR Specifies the human-readable location string that is reported by the server. The default is the empty string. .TP 5 \fB\-m \fImodel\fR Specifies the model name of the printer. The default is "Printer". .TP 5 \fB\-n \fIhostname\fR Specifies the hostname that is reported by the server. The default is the name returned by the .BR hostname (1) command. .TP 5 \fB\-p \fIport\fR Specifies the port number to listen on. The default is a user-specific number from 8000 to 8999. .TP 5 \fB\-r \fIsubtype\fR Specifies the Bonjour subtype(s) to advertise. Separate multiple subtypes with a comma. The default is "_print". .TP 5 \fB\-s \fIspeed[,color-speed]\fR Specifies the printer speed in pages per minute. If two numbers are specified and the second number is greater than zero, the server will report support for color printing. The default is "10,0". .TP 5 .B \-v[vvv] Be (very) verbose when logging activity to the standard output. .SH EXIT STATUS The .B ippserver program returns 1 if it is unable to process the command-line arguments or register the IPP service. Otherwise .B ippserver will run continuously until terminated. .SH CONFORMING TO The .B ippserver program is unique to CUPS and conforms to the IPP Everywhere (PWG 5100.14) specification. .SH ENVIRONMENT .B ippserver adds environment variables starting with "IPP_" for all IPP Job attributes in the print request. For example, when executing a command for an IPP Job containing the "media" Job Template attribute, the "IPP_MEDIA" environment variable will be set to the value of that attribute. .LP Enumerated values are converted to their keyword equivalents. For example, a "print-quality" Job Template attribute with a enum value of 3 will become the "IPP_PRINT_QUALITY" environment variable with a value of "draft". .SH EXAMPLES Run .B ippserver with a service name of My Cool Printer: .nf ippserver "My Cool Printer" .fi .LP Run the .BR file (1) command whenever a job is sent to the server: .nf ippserver \-c file "My Cool Printer" .fi .SH SEE ALSO PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp) .SH COPYRIGHT Copyright \[co] 2007-2014 by Apple Inc. cups-2.2.7/test/ipptool.c000664 000765 000024 00000507213 13255074424 015774 0ustar00msweetstaff000000 000000 /* * ipptool command for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include #include #include #ifdef WIN32 # include # ifndef R_OK # define R_OK 0 # endif /* !R_OK */ #else # include # include #endif /* WIN32 */ #ifndef O_BINARY # define O_BINARY 0 #endif /* !O_BINARY */ /* * Types... */ typedef enum _cups_transfer_e /**** How to send request data ****/ { _CUPS_TRANSFER_AUTO, /* Chunk for files, length for static */ _CUPS_TRANSFER_CHUNKED, /* Chunk always */ _CUPS_TRANSFER_LENGTH /* Length always */ } _cups_transfer_t; typedef enum _cups_output_e /**** Output mode ****/ { _CUPS_OUTPUT_QUIET, /* No output */ _CUPS_OUTPUT_TEST, /* Traditional CUPS test output */ _CUPS_OUTPUT_PLIST, /* XML plist test output */ _CUPS_OUTPUT_LIST, /* Tabular list output */ _CUPS_OUTPUT_CSV /* Comma-separated values output */ } _cups_output_t; typedef enum _cups_with_e /**** WITH flags ****/ { _CUPS_WITH_LITERAL = 0, /* Match string is a literal value */ _CUPS_WITH_ALL = 1, /* Must match all values */ _CUPS_WITH_REGEX = 2, /* Match string is a regular expression */ _CUPS_WITH_HOSTNAME = 4, /* Match string is a URI hostname */ _CUPS_WITH_RESOURCE = 8, /* Match string is a URI resource */ _CUPS_WITH_SCHEME = 16 /* Match string is a URI scheme */ } _cups_with_t; typedef struct _cups_expect_s /**** Expected attribute info ****/ { int optional, /* Optional attribute? */ not_expect, /* Don't expect attribute? */ expect_all; /* Expect all attributes to match/not match */ char *name, /* Attribute name */ *of_type, /* Type name */ *same_count_as, /* Parallel attribute name */ *if_defined, /* Only required if variable defined */ *if_not_defined, /* Only required if variable is not defined */ *with_value, /* Attribute must include this value */ *with_value_from, /* Attribute must have one of the values in this attribute */ *define_match, /* Variable to define on match */ *define_no_match, /* Variable to define on no-match */ *define_value; /* Variable to define with value */ int repeat_limit, /* Maximum number of times to repeat */ repeat_match, /* Repeat test on match */ repeat_no_match, /* Repeat test on no match */ with_flags, /* WITH flags */ count; /* Expected count if > 0 */ ipp_tag_t in_group; /* IN-GROUP value */ } _cups_expect_t; typedef struct _cups_status_s /**** Status info ****/ { ipp_status_t status; /* Expected status code */ char *if_defined, /* Only if variable is defined */ *if_not_defined, /* Only if variable is not defined */ *define_match, /* Variable to define on match */ *define_no_match, /* Variable to define on no-match */ *define_value; /* Variable to define with value */ int repeat_limit, /* Maximum number of times to repeat */ repeat_match, /* Repeat the test when it does not match */ repeat_no_match; /* Repeat the test when it matches */ } _cups_status_t; typedef struct _cups_var_s /**** Variable ****/ { char *name, /* Name of variable */ *value; /* Value of variable */ } _cups_var_t; typedef struct _cups_vars_s /**** Set of variables ****/ { char *uri, /* URI for printer */ *filename, /* Filename */ scheme[64], /* Scheme from URI */ userpass[256], /* Username/password from URI */ hostname[256], /* Hostname from URI */ resource[1024]; /* Resource path from URI */ int port; /* Port number from URI */ http_encryption_t encryption; /* Encryption for connection? */ double timeout; /* Timeout for connection */ int family; /* Address family */ cups_array_t *vars; /* Array of variables */ } _cups_vars_t; /* * Globals... */ static _cups_transfer_t Transfer = _CUPS_TRANSFER_AUTO; /* How to transfer requests */ static _cups_output_t Output = _CUPS_OUTPUT_LIST; /* Output mode */ static int Cancel = 0, /* Cancel test? */ IgnoreErrors = 0, /* Ignore errors? */ StopAfterIncludeError = 0, /* Stop after include errors? */ ValidateHeaders = 0, /* Validate HTTP headers in response? */ Verbosity = 0, /* Show all attributes? */ Version = 11, /* Default IPP version */ XMLHeader = 0, /* 1 if header is written */ TestCount = 0, /* Number of tests run */ PassCount = 0, /* Number of passing tests */ FailCount = 0, /* Number of failing tests */ SkipCount = 0; /* Number of skipped tests */ static char *Username = NULL, /* Username from URI */ *Password = NULL; /* Password from URI */ static int PasswordTries = 0; /* Number of tries with password */ /* * Local functions... */ static void add_stringf(cups_array_t *a, const char *s, ...) __attribute__ ((__format__ (__printf__, 2, 3))); static int compare_uris(const char *a, const char *b); static int compare_vars(_cups_var_t *a, _cups_var_t *b); static int do_tests(cups_file_t *outfile, _cups_vars_t *vars, const char *testfile); static void expand_variables(_cups_vars_t *vars, char *dst, const char *src, size_t dstsize) __attribute__((nonnull(1,2,3))); static int expect_matches(_cups_expect_t *expect, ipp_tag_t value_tag); static ipp_t *get_collection(cups_file_t *outfile, _cups_vars_t *vars, cups_file_t *fp, int *linenum); static char *get_filename(const char *testfile, char *dst, const char *src, size_t dstsize); static const char *get_string(ipp_attribute_t *attr, int element, int flags, char *buffer, size_t bufsize); static char *get_token(cups_file_t *fp, char *buf, int buflen, int *linenum); static char *get_variable(_cups_vars_t *vars, const char *name); static char *iso_date(ipp_uchar_t *date); static const char *password_cb(const char *prompt); static void pause_message(const char *message); static void print_attr(cups_file_t *outfile, int format, ipp_attribute_t *attr, ipp_tag_t *group); static void print_csv(cups_file_t *outfile, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths); static void print_fatal_error(cups_file_t *outfile, const char *s, ...) __attribute__ ((__format__ (__printf__, 2, 3))); static void print_line(cups_file_t *outfile, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths); static void print_xml_header(cups_file_t *outfile); static void print_xml_string(cups_file_t *outfile, const char *element, const char *s); static void print_xml_trailer(cups_file_t *outfile, int success, const char *message); static void set_variable(cups_file_t *outfile, _cups_vars_t *vars, const char *name, const char *value); #ifndef WIN32 static void sigterm_handler(int sig); #endif /* WIN32 */ static int timeout_cb(http_t *http, void *user_data); static void usage(void) __attribute__((noreturn)); static int validate_attr(cups_file_t *outfile, cups_array_t *errors, ipp_attribute_t *attr); static const char *with_flags_string(int flags); static int with_value(cups_file_t *outfile, cups_array_t *errors, char *value, int flags, ipp_attribute_t *attr, char *matchbuf, size_t matchlen); static int with_value_from(cups_array_t *errors, ipp_attribute_t *fromattr, ipp_attribute_t *attr, char *matchbuf, size_t matchlen); /* * 'main()' - Parse options and do tests. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ int status; /* Status of tests... */ cups_file_t *outfile = cupsFileStdout(); /* Output file */ char *opt, /* Current option */ name[1024], /* Name/value buffer */ *value, /* Pointer to value */ filename[1024], /* Real filename */ testname[1024], /* Real test filename */ uri[1024]; /* Copy of printer URI */ const char *ext, /* Extension on filename */ *testfile; /* Test file to use */ int interval, /* Test interval in microseconds */ repeat; /* Repeat count */ _cups_vars_t vars; /* Variables */ http_uri_status_t uri_status; /* URI separation status */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ #ifndef WIN32 /* * Catch SIGINT and SIGTERM... */ signal(SIGINT, sigterm_handler); signal(SIGTERM, sigterm_handler); #endif /* !WIN32 */ /* * Initialize the locale and variables... */ _cupsSetLocale(argv); memset(&vars, 0, sizeof(vars)); vars.family = AF_UNSPEC; vars.vars = cupsArrayNew((cups_array_func_t)compare_vars, NULL); /* * We need at least: * * ipptool URI testfile */ interval = 0; repeat = 0; status = 0; testfile = NULL; for (i = 1; i < argc; i ++) { if (!strcmp(argv[i], "--help")) { usage(); } else if (!strcmp(argv[i], "--stop-after-include-error")) { StopAfterIncludeError = 1; } else if (!strcmp(argv[i], "--version")) { puts(CUPS_SVERSION); return (0); } else if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case '4' : /* Connect using IPv4 only */ vars.family = AF_INET; break; #ifdef AF_INET6 case '6' : /* Connect using IPv6 only */ vars.family = AF_INET6; break; #endif /* AF_INET6 */ case 'C' : /* Enable HTTP chunking */ Transfer = _CUPS_TRANSFER_CHUNKED; break; case 'E' : /* Encrypt with TLS */ #ifdef HAVE_SSL vars.encryption = HTTP_ENCRYPT_REQUIRED; #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]); #endif /* HAVE_SSL */ break; case 'I' : /* Ignore errors */ IgnoreErrors = 1; break; case 'L' : /* Disable HTTP chunking */ Transfer = _CUPS_TRANSFER_LENGTH; break; case 'P' : /* Output to plist file */ i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Missing filename for \"-P\"."), "ipptool"); usage(); } if (outfile != cupsFileStdout()) usage(); if ((outfile = cupsFileOpen(argv[i], "w")) == NULL) { _cupsLangPrintf(stderr, _("%s: Unable to open \"%s\": %s"), "ipptool", argv[i], strerror(errno)); exit(1); } Output = _CUPS_OUTPUT_PLIST; if (interval || repeat) { _cupsLangPuts(stderr, _("ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\".")); usage(); } break; case 'S' : /* Encrypt with SSL */ #ifdef HAVE_SSL vars.encryption = HTTP_ENCRYPT_ALWAYS; #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]); #endif /* HAVE_SSL */ break; case 'T' : /* Set timeout */ i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Missing timeout for \"-T\"."), "ipptool"); usage(); } vars.timeout = _cupsStrScand(argv[i], NULL, localeconv()); break; case 'V' : /* Set IPP version */ i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Missing version for \"-V\"."), "ipptool"); usage(); } if (!strcmp(argv[i], "1.0")) Version = 10; else if (!strcmp(argv[i], "1.1")) Version = 11; else if (!strcmp(argv[i], "2.0")) Version = 20; else if (!strcmp(argv[i], "2.1")) Version = 21; else if (!strcmp(argv[i], "2.2")) Version = 22; else { _cupsLangPrintf(stderr, _("%s: Bad version %s for \"-V\"."), "ipptool", argv[i]); usage(); } break; case 'X' : /* Produce XML output */ Output = _CUPS_OUTPUT_PLIST; if (interval || repeat) { _cupsLangPuts(stderr, _("ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\".")); usage(); } break; case 'c' : /* CSV output */ Output = _CUPS_OUTPUT_CSV; break; case 'd' : /* Define a variable */ i ++; if (i >= argc) { _cupsLangPuts(stderr, _("ipptool: Missing name=value for \"-d\".")); usage(); } strlcpy(name, argv[i], sizeof(name)); if ((value = strchr(name, '=')) != NULL) *value++ = '\0'; else value = name + strlen(name); set_variable(outfile, &vars, name, value); break; case 'f' : /* Set the default test filename */ i ++; if (i >= argc) { _cupsLangPuts(stderr, _("ipptool: Missing filename for \"-f\".")); usage(); } if (vars.filename) { free(vars.filename); vars.filename = NULL; } if (access(argv[i], 0)) { /* * Try filename.gz... */ snprintf(filename, sizeof(filename), "%s.gz", argv[i]); if (access(filename, 0) && filename[0] != '/' #ifdef WIN32 && (!isalpha(filename[0] & 255) || filename[1] != ':') #endif /* WIN32 */ ) { snprintf(filename, sizeof(filename), "%s/ipptool/%s", cg->cups_datadir, argv[i]); if (access(filename, 0)) { snprintf(filename, sizeof(filename), "%s/ipptool/%s.gz", cg->cups_datadir, argv[i]); if (access(filename, 0)) vars.filename = strdup(argv[i]); else vars.filename = strdup(filename); } else vars.filename = strdup(filename); } else vars.filename = strdup(filename); } else vars.filename = strdup(argv[i]); if ((ext = strrchr(vars.filename, '.')) != NULL) { /* * Guess the MIME media type based on the extension... */ if (!_cups_strcasecmp(ext, ".gif")) set_variable(outfile, &vars, "filetype", "image/gif"); else if (!_cups_strcasecmp(ext, ".htm") || !_cups_strcasecmp(ext, ".htm.gz") || !_cups_strcasecmp(ext, ".html") || !_cups_strcasecmp(ext, ".html.gz")) set_variable(outfile, &vars, "filetype", "text/html"); else if (!_cups_strcasecmp(ext, ".jpg") || !_cups_strcasecmp(ext, ".jpeg")) set_variable(outfile, &vars, "filetype", "image/jpeg"); else if (!_cups_strcasecmp(ext, ".pcl") || !_cups_strcasecmp(ext, ".pcl.gz")) set_variable(outfile, &vars, "filetype", "application/vnd.hp-PCL"); else if (!_cups_strcasecmp(ext, ".pdf")) set_variable(outfile, &vars, "filetype", "application/pdf"); else if (!_cups_strcasecmp(ext, ".png")) set_variable(outfile, &vars, "filetype", "image/png"); else if (!_cups_strcasecmp(ext, ".ps") || !_cups_strcasecmp(ext, ".ps.gz")) set_variable(outfile, &vars, "filetype", "application/postscript"); else if (!_cups_strcasecmp(ext, ".pwg") || !_cups_strcasecmp(ext, ".pwg.gz") || !_cups_strcasecmp(ext, ".ras") || !_cups_strcasecmp(ext, ".ras.gz")) set_variable(outfile, &vars, "filetype", "image/pwg-raster"); else if (!_cups_strcasecmp(ext, ".tif") || !_cups_strcasecmp(ext, ".tiff")) set_variable(outfile, &vars, "filetype", "image/tiff"); else if (!_cups_strcasecmp(ext, ".txt") || !_cups_strcasecmp(ext, ".txt.gz")) set_variable(outfile, &vars, "filetype", "text/plain"); else if (!_cups_strcasecmp(ext, ".urf") || !_cups_strcasecmp(ext, ".urf.gz")) set_variable(outfile, &vars, "filetype", "image/urf"); else if (!_cups_strcasecmp(ext, ".xps")) set_variable(outfile, &vars, "filetype", "application/openxps"); else set_variable(outfile, &vars, "filetype", "application/octet-stream"); } else { /* * Use the "auto-type" MIME media type... */ set_variable(outfile, &vars, "filetype", "application/octet-stream"); } break; case 'h' : /* Validate response headers */ ValidateHeaders = 1; break; case 'i' : /* Test every N seconds */ i ++; if (i >= argc) { _cupsLangPuts(stderr, _("ipptool: Missing seconds for \"-i\".")); usage(); } else { interval = (int)(_cupsStrScand(argv[i], NULL, localeconv()) * 1000000.0); if (interval <= 0) { _cupsLangPuts(stderr, _("ipptool: Invalid seconds for \"-i\".")); usage(); } } if (Output == _CUPS_OUTPUT_PLIST && interval) { _cupsLangPuts(stderr, _("ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\".")); usage(); } break; case 'l' : /* List as a table */ Output = _CUPS_OUTPUT_LIST; break; case 'n' : /* Repeat count */ i ++; if (i >= argc) { _cupsLangPuts(stderr, _("ipptool: Missing count for \"-n\".")); usage(); } else repeat = atoi(argv[i]); if (Output == _CUPS_OUTPUT_PLIST && repeat) { _cupsLangPuts(stderr, _("ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\".")); usage(); } break; case 'q' : /* Be quiet */ Output = _CUPS_OUTPUT_QUIET; break; case 't' : /* CUPS test output */ Output = _CUPS_OUTPUT_TEST; break; case 'v' : /* Be verbose */ Verbosity ++; break; default : _cupsLangPrintf(stderr, _("ipptool: Unknown option \"-%c\"."), *opt); usage(); } } } else if (!strncmp(argv[i], "ipp://", 6) || !strncmp(argv[i], "http://", 7) #ifdef HAVE_SSL || !strncmp(argv[i], "ipps://", 7) || !strncmp(argv[i], "https://", 8) #endif /* HAVE_SSL */ ) { /* * Set URI... */ if (vars.uri) { _cupsLangPuts(stderr, _("ipptool: May only specify a single URI.")); usage(); } #ifdef HAVE_SSL if (!strncmp(argv[i], "ipps://", 7) || !strncmp(argv[i], "https://", 8)) vars.encryption = HTTP_ENCRYPT_ALWAYS; #endif /* HAVE_SSL */ vars.uri = argv[i]; uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, vars.uri, vars.scheme, sizeof(vars.scheme), vars.userpass, sizeof(vars.userpass), vars.hostname, sizeof(vars.hostname), &(vars.port), vars.resource, sizeof(vars.resource)); if (uri_status != HTTP_URI_OK) { _cupsLangPrintf(stderr, _("ipptool: Bad URI - %s."), httpURIStatusString(uri_status)); return (1); } if (vars.userpass[0]) { if ((Password = strchr(vars.userpass, ':')) != NULL) *Password++ = '\0'; Username = vars.userpass; cupsSetPasswordCB(password_cb); set_variable(outfile, &vars, "uriuser", vars.userpass); } httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), vars.scheme, NULL, vars.hostname, vars.port, vars.resource); vars.uri = uri; } else { /* * Run test... */ if (!vars.uri) { _cupsLangPuts(stderr, _("ipptool: URI required before test file.")); _cupsLangPuts(stderr, argv[i]); usage(); } if (access(argv[i], 0) && argv[i][0] != '/' #ifdef WIN32 && (!isalpha(argv[i][0] & 255) || argv[i][1] != ':') #endif /* WIN32 */ ) { snprintf(testname, sizeof(testname), "%s/ipptool/%s", cg->cups_datadir, argv[i]); if (access(testname, 0)) testfile = argv[i]; else testfile = testname; } else testfile = argv[i]; if (!do_tests(outfile, &vars, testfile)) status = 1; } } if (!vars.uri || !testfile) usage(); /* * Loop if the interval is set... */ if (Output == _CUPS_OUTPUT_PLIST) print_xml_trailer(outfile, !status, NULL); else if (interval > 0 && repeat > 0) { while (repeat > 1) { usleep((useconds_t)interval); do_tests(outfile, &vars, testfile); repeat --; } } else if (interval > 0) { for (;;) { usleep((useconds_t)interval); do_tests(outfile, &vars, testfile); } } if ((Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile)) && TestCount > 1) { /* * Show a summary report if there were multiple tests... */ cupsFilePrintf(cupsFileStdout(), "\nSummary: %d tests, %d passed, %d failed, %d skipped\nScore: %d%%\n", TestCount, PassCount, FailCount, SkipCount, 100 * (PassCount + SkipCount) / TestCount); } cupsFileClose(outfile); /* * Exit... */ return (status); } /* * 'add_stringf()' - Add a formatted string to an array. */ static void add_stringf(cups_array_t *a, /* I - Array */ const char *s, /* I - Printf-style format string */ ...) /* I - Additional args as needed */ { char buffer[10240]; /* Format buffer */ va_list ap; /* Argument pointer */ /* * Don't bother is the array is NULL... */ if (!a) return; /* * Format the message... */ va_start(ap, s); vsnprintf(buffer, sizeof(buffer), s, ap); va_end(ap); /* * Add it to the array... */ cupsArrayAdd(a, buffer); } /* * 'compare_uris()' - Compare two URIs... */ static int /* O - Result of comparison */ compare_uris(const char *a, /* I - First URI */ const char *b) /* I - Second URI */ { char ascheme[32], /* Components of first URI */ auserpass[256], ahost[256], aresource[256]; int aport; char bscheme[32], /* Components of second URI */ buserpass[256], bhost[256], bresource[256]; int bport; char *ptr; /* Pointer into string */ int result; /* Result of comparison */ /* * Separate the URIs into their components... */ if (httpSeparateURI(HTTP_URI_CODING_ALL, a, ascheme, sizeof(ascheme), auserpass, sizeof(auserpass), ahost, sizeof(ahost), &aport, aresource, sizeof(aresource)) < HTTP_URI_STATUS_OK) return (-1); if (httpSeparateURI(HTTP_URI_CODING_ALL, b, bscheme, sizeof(bscheme), buserpass, sizeof(buserpass), bhost, sizeof(bhost), &bport, bresource, sizeof(bresource)) < HTTP_URI_STATUS_OK) return (-1); /* * Strip trailing dots from the host components, if present... */ if ((ptr = ahost + strlen(ahost) - 1) > ahost && *ptr == '.') *ptr = '\0'; if ((ptr = bhost + strlen(bhost) - 1) > bhost && *ptr == '.') *ptr = '\0'; /* * Compare each component... */ if ((result = _cups_strcasecmp(ascheme, bscheme)) != 0) return (result); if ((result = strcmp(auserpass, buserpass)) != 0) return (result); if ((result = _cups_strcasecmp(ahost, bhost)) != 0) return (result); if (aport != bport) return (aport - bport); if (!_cups_strcasecmp(ascheme, "mailto") || !_cups_strcasecmp(ascheme, "urn")) return (_cups_strcasecmp(aresource, bresource)); else return (strcmp(aresource, bresource)); } /* * 'compare_vars()' - Compare two variables. */ static int /* O - Result of comparison */ compare_vars(_cups_var_t *a, /* I - First variable */ _cups_var_t *b) /* I - Second variable */ { return (_cups_strcasecmp(a->name, b->name)); } /* * 'do_tests()' - Do tests as specified in the test file. */ static int /* 1 = success, 0 = failure */ do_tests(cups_file_t *outfile, /* I - Output file */ _cups_vars_t *vars, /* I - Variables */ const char *testfile) /* I - Test file to use */ { int i, /* Looping var */ linenum, /* Current line number */ pass, /* Did we pass the test? */ prev_pass = 1, /* Did we pass the previous test? */ request_id, /* Current request ID */ show_header = 1, /* Show the test header? */ ignore_errors, /* Ignore test failures? */ skip_previous = 0, /* Skip on previous test failure? */ repeat_count, /* Repeat count */ repeat_test; /* Repeat a test? */ useconds_t delay, /* Initial delay */ repeat_interval; /* Repeat interval (delay) */ http_t *http = NULL; /* HTTP connection to server */ cups_file_t *fp = NULL; /* Test file */ char resource[512], /* Resource for request */ token[1024], /* Token from file */ *tokenptr, /* Pointer into token */ temp[1024], /* Temporary string */ buffer[131072], /* Copy buffer */ compression[16]; /* COMPRESSION value */ ipp_t *request = NULL, /* IPP request */ *response = NULL; /* IPP response */ size_t length; /* Length of IPP request */ http_status_t status; /* HTTP status */ cups_file_t *reqfile; /* File to send */ ssize_t bytes; /* Bytes read/written */ char attr[128]; /* Attribute name */ ipp_op_t op; /* Operation */ ipp_tag_t group; /* Current group */ ipp_tag_t value; /* Current value type */ ipp_attribute_t *attrptr, /* Attribute pointer */ *found, /* Found attribute */ *lastcol = NULL; /* Last collection attribute */ char name[1024], /* Name of test */ file_id[1024], /* File identifier */ test_id[1024]; /* Test identifier */ char filename[1024]; /* Filename */ _cups_transfer_t transfer; /* To chunk or not to chunk */ int version, /* IPP version number to use */ skip_test; /* Skip this test? */ int num_statuses = 0; /* Number of valid status codes */ _cups_status_t statuses[100], /* Valid status codes */ *last_status; /* Last STATUS (for predicates) */ int status_ok, /* Did we get a matching status? */ num_expects = 0; /* Number of expected attributes */ _cups_expect_t expects[200], /* Expected attributes */ *expect, /* Current expected attribute */ *last_expect; /* Last EXPECT (for predicates) */ int num_displayed = 0; /* Number of displayed attributes */ char *displayed[200]; /* Displayed attributes */ size_t widths[200]; /* Width of columns */ cups_array_t *a, /* Duplicate attribute array */ *errors = NULL; /* Errors array */ const char *error; /* Current error */ /* * Open the test file... */ if ((fp = cupsFileOpen(testfile, "r")) == NULL) { print_fatal_error(outfile, "Unable to open test file %s - %s", testfile, strerror(errno)); pass = 0; goto test_exit; } /* * Connect to the server... */ if ((http = httpConnect2(vars->hostname, vars->port, NULL, vars->family, vars->encryption, 1, 30000, NULL)) == NULL) { print_fatal_error(outfile, "Unable to connect to %s on port %d - %s", vars->hostname, vars->port, cupsLastErrorString()); pass = 0; goto test_exit; } #ifdef HAVE_LIBZ httpSetDefaultField(http, HTTP_FIELD_ACCEPT_ENCODING, "deflate, gzip, identity"); #else httpSetDefaultField(http, HTTP_FIELD_ACCEPT_ENCODING, "identity"); #endif /* HAVE_LIBZ */ if (vars->timeout > 0.0) httpSetTimeout(http, vars->timeout, timeout_cb, NULL); /* * Loop on tests... */ CUPS_SRAND((unsigned)time(NULL)); errors = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); file_id[0] = '\0'; pass = 1; linenum = 0; request_id = (CUPS_RAND() % 1000) * 137 + 1; while (!Cancel && get_token(fp, token, sizeof(token), &linenum) != NULL) { /* * Expect an open brace... */ if (!strcmp(token, "DEFINE")) { /* * DEFINE name value */ if (get_token(fp, attr, sizeof(attr), &linenum) && get_token(fp, temp, sizeof(temp), &linenum)) { expand_variables(vars, token, temp, sizeof(token)); set_variable(outfile, vars, attr, token); } else { print_fatal_error(outfile, "Missing DEFINE name and/or value on line %d.", linenum); pass = 0; goto test_exit; } continue; } else if (!strcmp(token, "DEFINE-DEFAULT")) { /* * DEFINE-DEFAULT name value */ if (get_token(fp, attr, sizeof(attr), &linenum) && get_token(fp, temp, sizeof(temp), &linenum)) { expand_variables(vars, token, temp, sizeof(token)); if (!get_variable(vars, attr)) set_variable(outfile, vars, attr, token); } else { print_fatal_error(outfile, "Missing DEFINE-DEFAULT name and/or value on line " "%d.", linenum); pass = 0; goto test_exit; } continue; } else if (!strcmp(token, "FILE-ID")) { /* * FILE-ID "string" */ if (get_token(fp, temp, sizeof(temp), &linenum)) { expand_variables(vars, file_id, temp, sizeof(file_id)); } else { print_fatal_error(outfile, "Missing FILE-ID value on line %d.", linenum); pass = 0; goto test_exit; } continue; } else if (!strcmp(token, "IGNORE-ERRORS")) { /* * IGNORE-ERRORS yes * IGNORE-ERRORS no */ if (get_token(fp, temp, sizeof(temp), &linenum) && (!_cups_strcasecmp(temp, "yes") || !_cups_strcasecmp(temp, "no"))) { IgnoreErrors = !_cups_strcasecmp(temp, "yes"); } else { print_fatal_error(outfile, "Missing IGNORE-ERRORS value on line %d.", linenum); pass = 0; goto test_exit; } continue; } else if (!strcmp(token, "INCLUDE")) { /* * INCLUDE "filename" * INCLUDE */ if (get_token(fp, temp, sizeof(temp), &linenum)) { /* * Map the filename to and then run the tests... */ if (!do_tests(outfile, vars, get_filename(testfile, filename, temp, sizeof(filename)))) { pass = 0; if (StopAfterIncludeError) goto test_exit; } } else { print_fatal_error(outfile, "Missing INCLUDE filename on line %d.", linenum); pass = 0; goto test_exit; } show_header = 1; continue; } else if (!strcmp(token, "INCLUDE-IF-DEFINED")) { /* * INCLUDE-IF-DEFINED name "filename" * INCLUDE-IF-DEFINED name */ if (get_token(fp, attr, sizeof(attr), &linenum) && get_token(fp, temp, sizeof(temp), &linenum)) { /* * Map the filename to and then run the tests... */ if (get_variable(vars, attr) && !do_tests(outfile, vars, get_filename(testfile, filename, temp, sizeof(filename)))) { pass = 0; if (StopAfterIncludeError) goto test_exit; } } else { print_fatal_error(outfile, "Missing INCLUDE-IF-DEFINED name or filename on line " "%d.", linenum); pass = 0; goto test_exit; } show_header = 1; continue; } else if (!strcmp(token, "INCLUDE-IF-NOT-DEFINED")) { /* * INCLUDE-IF-NOT-DEFINED name "filename" * INCLUDE-IF-NOT-DEFINED name */ if (get_token(fp, attr, sizeof(attr), &linenum) && get_token(fp, temp, sizeof(temp), &linenum)) { /* * Map the filename to and then run the tests... */ if (!get_variable(vars, attr) && !do_tests(outfile, vars, get_filename(testfile, filename, temp, sizeof(filename)))) { pass = 0; if (StopAfterIncludeError) goto test_exit; } } else { print_fatal_error(outfile, "Missing INCLUDE-IF-NOT-DEFINED name or filename on " "line %d.", linenum); pass = 0; goto test_exit; } show_header = 1; continue; } else if (!strcmp(token, "SKIP-IF-DEFINED")) { /* * SKIP-IF-DEFINED variable */ if (get_token(fp, temp, sizeof(temp), &linenum)) { if (get_variable(vars, temp)) goto test_exit; } else { print_fatal_error(outfile, "Missing SKIP-IF-DEFINED variable on line %d.", linenum); pass = 0; goto test_exit; } } else if (!strcmp(token, "SKIP-IF-NOT-DEFINED")) { /* * SKIP-IF-NOT-DEFINED variable */ if (get_token(fp, temp, sizeof(temp), &linenum)) { if (!get_variable(vars, temp)) goto test_exit; } else { print_fatal_error(outfile, "Missing SKIP-IF-NOT-DEFINED variable on line %d.", linenum); pass = 0; goto test_exit; } } else if (!strcmp(token, "STOP-AFTER-INCLUDE-ERROR")) { /* * STOP-AFTER-INCLUDE-ERROR yes * STOP-AFTER-INCLUDE-ERROR no */ if (get_token(fp, temp, sizeof(temp), &linenum) && (!_cups_strcasecmp(temp, "yes") || !_cups_strcasecmp(temp, "no"))) { StopAfterIncludeError = !_cups_strcasecmp(temp, "yes"); } else { print_fatal_error(outfile, "Missing STOP-AFTER-INCLUDE-ERROR value on line %d.", linenum); pass = 0; goto test_exit; } continue; } else if (!strcmp(token, "TRANSFER")) { /* * TRANSFER auto * TRANSFER chunked * TRANSFER length */ if (get_token(fp, temp, sizeof(temp), &linenum)) { if (!strcmp(temp, "auto")) Transfer = _CUPS_TRANSFER_AUTO; else if (!strcmp(temp, "chunked")) Transfer = _CUPS_TRANSFER_CHUNKED; else if (!strcmp(temp, "length")) Transfer = _CUPS_TRANSFER_LENGTH; else { print_fatal_error(outfile, "Bad TRANSFER value \"%s\" on line %d.", temp, linenum); pass = 0; goto test_exit; } } else { print_fatal_error(outfile, "Missing TRANSFER value on line %d.", linenum); pass = 0; goto test_exit; } continue; } else if (!strcmp(token, "VERSION")) { if (get_token(fp, temp, sizeof(temp), &linenum)) { if (!strcmp(temp, "1.0")) Version = 10; else if (!strcmp(temp, "1.1")) Version = 11; else if (!strcmp(temp, "2.0")) Version = 20; else if (!strcmp(temp, "2.1")) Version = 21; else if (!strcmp(temp, "2.2")) Version = 22; else { print_fatal_error(outfile, "Bad VERSION \"%s\" on line %d.", temp, linenum); pass = 0; goto test_exit; } } else { print_fatal_error(outfile, "Missing VERSION number on line %d.", linenum); pass = 0; goto test_exit; } continue; } else if (strcmp(token, "{")) { print_fatal_error(outfile, "Unexpected token %s seen on line %d.", token, linenum); pass = 0; goto test_exit; } /* * Initialize things... */ if (show_header) { if (Output == _CUPS_OUTPUT_PLIST) print_xml_header(outfile); if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout())) cupsFilePrintf(cupsFileStdout(), "\"%s\":\n", testfile); show_header = 0; } strlcpy(resource, vars->resource, sizeof(resource)); request_id ++; request = ippNew(); op = (ipp_op_t)0; group = IPP_TAG_ZERO; ignore_errors = IgnoreErrors; last_expect = NULL; last_status = NULL; filename[0] = '\0'; skip_previous = 0; skip_test = 0; test_id[0] = '\0'; version = Version; transfer = Transfer; compression[0] = '\0'; delay = 0; repeat_count = 0; repeat_interval = 5000000; strlcpy(name, testfile, sizeof(name)); if (strrchr(name, '.') != NULL) *strrchr(name, '.') = '\0'; /* * Parse until we see a close brace... */ while (get_token(fp, token, sizeof(token), &linenum) != NULL) { if (_cups_strcasecmp(token, "COUNT") && _cups_strcasecmp(token, "DEFINE-MATCH") && _cups_strcasecmp(token, "DEFINE-NO-MATCH") && _cups_strcasecmp(token, "DEFINE-VALUE") && _cups_strcasecmp(token, "IF-DEFINED") && _cups_strcasecmp(token, "IF-NOT-DEFINED") && _cups_strcasecmp(token, "IN-GROUP") && _cups_strcasecmp(token, "OF-TYPE") && _cups_strcasecmp(token, "REPEAT-LIMIT") && _cups_strcasecmp(token, "REPEAT-MATCH") && _cups_strcasecmp(token, "REPEAT-NO-MATCH") && _cups_strcasecmp(token, "SAME-COUNT-AS") && _cups_strcasecmp(token, "WITH-ALL-VALUES") && _cups_strcasecmp(token, "WITH-ALL-HOSTNAMES") && _cups_strcasecmp(token, "WITH-ALL-RESOURCES") && _cups_strcasecmp(token, "WITH-ALL-SCHEMES") && _cups_strcasecmp(token, "WITH-HOSTNAME") && _cups_strcasecmp(token, "WITH-RESOURCE") && _cups_strcasecmp(token, "WITH-SCHEME") && _cups_strcasecmp(token, "WITH-VALUE") && _cups_strcasecmp(token, "WITH-VALUE-FROM")) last_expect = NULL; if (_cups_strcasecmp(token, "DEFINE-MATCH") && _cups_strcasecmp(token, "DEFINE-NO-MATCH") && _cups_strcasecmp(token, "IF-DEFINED") && _cups_strcasecmp(token, "IF-NOT-DEFINED") && _cups_strcasecmp(token, "REPEAT-LIMIT") && _cups_strcasecmp(token, "REPEAT-MATCH") && _cups_strcasecmp(token, "REPEAT-NO-MATCH")) last_status = NULL; if (!strcmp(token, "}")) break; else if (!strcmp(token, "{") && lastcol) { /* * Another collection value */ ipp_t *col = get_collection(outfile, vars, fp, &linenum); /* Collection value */ if (col) { ippSetCollection(request, &lastcol, ippGetCount(lastcol), col); } else { pass = 0; goto test_exit; } } else if (!strcmp(token, "COMPRESSION")) { /* * COMPRESSION none * COMPRESSION deflate * COMPRESSION gzip */ if (get_token(fp, temp, sizeof(temp), &linenum)) { expand_variables(vars, compression, temp, sizeof(compression)); #ifdef HAVE_LIBZ if (strcmp(compression, "none") && strcmp(compression, "deflate") && strcmp(compression, "gzip")) #else if (strcmp(compression, "none")) #endif /* HAVE_LIBZ */ { print_fatal_error(outfile, "Unsupported COMPRESSION value '%s' on line %d.", compression, linenum); pass = 0; goto test_exit; } if (!strcmp(compression, "none")) compression[0] = '\0'; } else { print_fatal_error(outfile, "Missing COMPRESSION value on line %d.", linenum); pass = 0; goto test_exit; } } else if (!strcmp(token, "DEFINE")) { /* * DEFINE name value */ if (get_token(fp, attr, sizeof(attr), &linenum) && get_token(fp, temp, sizeof(temp), &linenum)) { expand_variables(vars, token, temp, sizeof(token)); set_variable(outfile, vars, attr, token); } else { print_fatal_error(outfile, "Missing DEFINE name and/or value on line %d.", linenum); pass = 0; goto test_exit; } } else if (!strcmp(token, "IGNORE-ERRORS")) { /* * IGNORE-ERRORS yes * IGNORE-ERRORS no */ if (get_token(fp, temp, sizeof(temp), &linenum) && (!_cups_strcasecmp(temp, "yes") || !_cups_strcasecmp(temp, "no"))) { ignore_errors = !_cups_strcasecmp(temp, "yes"); } else { print_fatal_error(outfile, "Missing IGNORE-ERRORS value on line %d.", linenum); pass = 0; goto test_exit; } continue; } else if (!_cups_strcasecmp(token, "NAME")) { /* * Name of test... */ get_token(fp, temp, sizeof(temp), &linenum); expand_variables(vars, name, temp, sizeof(name)); } else if (!_cups_strcasecmp(token, "PAUSE")) { /* * Pause with a message... */ get_token(fp, token, sizeof(token), &linenum); pause_message(token); } else if (!strcmp(token, "REQUEST-ID")) { /* * REQUEST-ID # * REQUEST-ID random */ if (get_token(fp, temp, sizeof(temp), &linenum)) { if (isdigit(temp[0] & 255)) request_id = atoi(temp); else if (!_cups_strcasecmp(temp, "random")) request_id = (CUPS_RAND() % 1000) * 137 + 1; else { print_fatal_error(outfile, "Bad REQUEST-ID value \"%s\" on line %d.", temp, linenum); pass = 0; goto test_exit; } } else { print_fatal_error(outfile, "Missing REQUEST-ID value on line %d.", linenum); pass = 0; goto test_exit; } } else if (!strcmp(token, "SKIP-IF-DEFINED")) { /* * SKIP-IF-DEFINED variable */ if (get_token(fp, temp, sizeof(temp), &linenum)) { if (get_variable(vars, temp)) skip_test = 1; } else { print_fatal_error(outfile, "Missing SKIP-IF-DEFINED value on line %d.", linenum); pass = 0; goto test_exit; } } else if (!strcmp(token, "SKIP-IF-MISSING")) { /* * SKIP-IF-MISSING filename */ if (get_token(fp, temp, sizeof(temp), &linenum)) { expand_variables(vars, token, temp, sizeof(token)); get_filename(testfile, filename, token, sizeof(filename)); if (access(filename, R_OK)) skip_test = 1; } else { print_fatal_error(outfile, "Missing SKIP-IF-MISSING filename on line %d.", linenum); pass = 0; goto test_exit; } } else if (!strcmp(token, "SKIP-IF-NOT-DEFINED")) { /* * SKIP-IF-NOT-DEFINED variable */ if (get_token(fp, temp, sizeof(temp), &linenum)) { if (!get_variable(vars, temp)) skip_test = 1; } else { print_fatal_error(outfile, "Missing SKIP-IF-NOT-DEFINED value on line %d.", linenum); pass = 0; goto test_exit; } } else if (!strcmp(token, "SKIP-PREVIOUS-ERROR")) { /* * SKIP-PREVIOUS-ERROR yes * SKIP-PREVIOUS-ERROR no */ if (get_token(fp, temp, sizeof(temp), &linenum) && (!_cups_strcasecmp(temp, "yes") || !_cups_strcasecmp(temp, "no"))) { skip_previous = !_cups_strcasecmp(temp, "yes"); } else { print_fatal_error(outfile, "Missing SKIP-PREVIOUS-ERROR value on line %d.", linenum); pass = 0; goto test_exit; } continue; } else if (!strcmp(token, "TEST-ID")) { /* * TEST-ID "string" */ if (get_token(fp, temp, sizeof(temp), &linenum)) { expand_variables(vars, test_id, temp, sizeof(test_id)); } else { print_fatal_error(outfile, "Missing TEST-ID value on line %d.", linenum); pass = 0; goto test_exit; } continue; } else if (!strcmp(token, "TRANSFER")) { /* * TRANSFER auto * TRANSFER chunked * TRANSFER length */ if (get_token(fp, temp, sizeof(temp), &linenum)) { if (!strcmp(temp, "auto")) transfer = _CUPS_TRANSFER_AUTO; else if (!strcmp(temp, "chunked")) transfer = _CUPS_TRANSFER_CHUNKED; else if (!strcmp(temp, "length")) transfer = _CUPS_TRANSFER_LENGTH; else { print_fatal_error(outfile, "Bad TRANSFER value \"%s\" on line %d.", temp, linenum); pass = 0; goto test_exit; } } else { print_fatal_error(outfile, "Missing TRANSFER value on line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "VERSION")) { if (get_token(fp, temp, sizeof(temp), &linenum)) { if (!strcmp(temp, "0.0")) version = 0; else if (!strcmp(temp, "1.0")) version = 10; else if (!strcmp(temp, "1.1")) version = 11; else if (!strcmp(temp, "2.0")) version = 20; else if (!strcmp(temp, "2.1")) version = 21; else if (!strcmp(temp, "2.2")) version = 22; else { print_fatal_error(outfile, "Bad VERSION \"%s\" on line %d.", temp, linenum); pass = 0; goto test_exit; } } else { print_fatal_error(outfile, "Missing VERSION number on line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "RESOURCE")) { /* * Resource name... */ if (!get_token(fp, resource, sizeof(resource), &linenum)) { print_fatal_error(outfile, "Missing RESOURCE path on line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "OPERATION")) { /* * Operation... */ if (!get_token(fp, temp, sizeof(temp), &linenum)) { print_fatal_error(outfile, "Missing OPERATION code on line %d.", linenum); pass = 0; goto test_exit; } expand_variables(vars, token, temp, sizeof(token)); if ((op = ippOpValue(token)) == (ipp_op_t)-1 && (op = (ipp_op_t)strtol(token, NULL, 0)) == 0) { print_fatal_error(outfile, "Bad OPERATION code \"%s\" on line %d.", token, linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "GROUP")) { /* * Attribute group... */ if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing GROUP tag on line %d.", linenum); pass = 0; goto test_exit; } if ((value = ippTagValue(token)) == IPP_TAG_ZERO || value >= IPP_TAG_UNSUPPORTED_VALUE) { print_fatal_error(outfile, "Bad GROUP tag \"%s\" on line %d.", token, linenum); pass = 0; goto test_exit; } if (value == group) ippAddSeparator(request); group = value; } else if (!_cups_strcasecmp(token, "DELAY")) { /* * Delay before operation... */ double dval; /* Delay value */ if (!get_token(fp, temp, sizeof(temp), &linenum)) { print_fatal_error(outfile, "Missing DELAY value on line %d.", linenum); pass = 0; goto test_exit; } expand_variables(vars, token, temp, sizeof(token)); if ((dval = _cupsStrScand(token, &tokenptr, localeconv())) < 0.0 || (*tokenptr && *tokenptr != ',')) { print_fatal_error(outfile, "Bad DELAY value \"%s\" on line %d.", token, linenum); pass = 0; goto test_exit; } delay = (useconds_t)(1000000.0 * dval); if (*tokenptr == ',') { if ((dval = _cupsStrScand(tokenptr + 1, &tokenptr, localeconv())) <= 0.0 || *tokenptr) { print_fatal_error(outfile, "Bad DELAY value \"%s\" on line %d.", token, linenum); pass = 0; goto test_exit; } repeat_interval = (useconds_t)(1000000.0 * dval); } else repeat_interval = delay; } else if (!_cups_strcasecmp(token, "ATTR")) { /* * Attribute... */ if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing ATTR value tag on line %d.", linenum); pass = 0; goto test_exit; } if ((value = ippTagValue(token)) < IPP_TAG_UNSUPPORTED_VALUE) { print_fatal_error(outfile, "Bad ATTR value tag \"%s\" on line %d.", token, linenum); pass = 0; goto test_exit; } if (!get_token(fp, attr, sizeof(attr), &linenum)) { print_fatal_error(outfile, "Missing ATTR name on line %d.", linenum); pass = 0; goto test_exit; } if (value < IPP_TAG_INTEGER) { /* * Add out-of-band value - no value string needed... */ token[0] = '\0'; } else if (!get_token(fp, temp, sizeof(temp), &linenum)) { print_fatal_error(outfile, "Missing ATTR value on line %d.", linenum); pass = 0; goto test_exit; } else { expand_variables(vars, token, temp, sizeof(token)); } attrptr = NULL; switch (value) { default : if (value < IPP_TAG_INTEGER) { /* * Add out-of-band value... */ attrptr = ippAddOutOfBand(request, group, value, attr); } else { print_fatal_error(outfile, "Unsupported ATTR value tag %s for \"%s\" on line %d.", ippTagString(value), attr, linenum); pass = 0; goto test_exit; } break; case IPP_TAG_BOOLEAN : if (!_cups_strcasecmp(token, "true")) attrptr = ippAddBoolean(request, group, attr, 1); else attrptr = ippAddBoolean(request, group, attr, (char)atoi(token)); break; case IPP_TAG_INTEGER : case IPP_TAG_ENUM : if (!strchr(token, ',')) { if (isdigit(token[0] & 255) || token[0] == '-') attrptr = ippAddInteger(request, group, value, attr, (int)strtol(token, &tokenptr, 0)); else { tokenptr = token; if ((i = ippEnumValue(attr, tokenptr)) >= 0) { attrptr = ippAddInteger(request, group, value, attr, i); tokenptr += strlen(tokenptr); } } } else { int values[100], /* Values */ num_values = 1; /* Number of values */ if (!isdigit(token[0] & 255) && token[0] != '-' && value == IPP_TAG_ENUM) { char *ptr; /* Pointer to next terminator */ if ((ptr = strchr(token, ',')) != NULL) *ptr++ = '\0'; else ptr = token + strlen(token); if ((i = ippEnumValue(attr, token)) < 0) tokenptr = NULL; else tokenptr = ptr; } else i = (int)strtol(token, &tokenptr, 0); values[0] = i; while (tokenptr && *tokenptr && num_values < (int)(sizeof(values) / sizeof(values[0]))) { if (*tokenptr == ',') tokenptr ++; if (!isdigit(*tokenptr & 255) && *tokenptr != '-') { char *ptr; /* Pointer to next terminator */ if (value != IPP_TAG_ENUM) break; if ((ptr = strchr(tokenptr, ',')) != NULL) *ptr++ = '\0'; else ptr = tokenptr + strlen(tokenptr); if ((i = ippEnumValue(attr, tokenptr)) < 0) break; tokenptr = ptr; } else i = (int)strtol(tokenptr, &tokenptr, 0); values[num_values ++] = i; } attrptr = ippAddIntegers(request, group, value, attr, num_values, values); } if ((!token[0] || !tokenptr || *tokenptr) && !skip_test) { print_fatal_error(outfile, "Bad %s value \'%s\' for \"%s\" on line %d.", ippTagString(value), token, attr, linenum); pass = 0; goto test_exit; } break; case IPP_TAG_RESOLUTION : { int xres, /* X resolution */ yres; /* Y resolution */ char *ptr; /* Pointer into value */ xres = yres = (int)strtol(token, (char **)&ptr, 10); if (ptr > token && xres > 0) { if (*ptr == 'x') yres = (int)strtol(ptr + 1, (char **)&ptr, 10); } if (ptr <= token || xres <= 0 || yres <= 0 || !ptr || (_cups_strcasecmp(ptr, "dpi") && _cups_strcasecmp(ptr, "dpc") && _cups_strcasecmp(ptr, "dpcm") && _cups_strcasecmp(ptr, "other"))) { if (skip_test) break; print_fatal_error(outfile, "Bad resolution value \'%s\' for \"%s\" on line %d.", token, attr, linenum); pass = 0; goto test_exit; } if (!_cups_strcasecmp(ptr, "dpi")) attrptr = ippAddResolution(request, group, attr, IPP_RES_PER_INCH, xres, yres); else if (!_cups_strcasecmp(ptr, "dpc") || !_cups_strcasecmp(ptr, "dpcm")) attrptr = ippAddResolution(request, group, attr, IPP_RES_PER_CM, xres, yres); else attrptr = ippAddResolution(request, group, attr, (ipp_res_t)0, xres, yres); } break; case IPP_TAG_RANGE : { int lowers[4], /* Lower value */ uppers[4], /* Upper values */ num_vals; /* Number of values */ num_vals = sscanf(token, "%d-%d,%d-%d,%d-%d,%d-%d", lowers + 0, uppers + 0, lowers + 1, uppers + 1, lowers + 2, uppers + 2, lowers + 3, uppers + 3); if ((num_vals & 1) || num_vals == 0) { if (skip_test) break; print_fatal_error(outfile, "Bad rangeOfInteger value \'%s\' for \"%s\" on line %d.", token, attr, linenum); pass = 0; goto test_exit; } attrptr = ippAddRanges(request, group, attr, num_vals / 2, lowers, uppers); } break; case IPP_TAG_BEGIN_COLLECTION : if (!strcmp(token, "{")) { ipp_t *col = get_collection(outfile, vars, fp, &linenum); /* Collection value */ if (col) { attrptr = lastcol = ippAddCollection(request, group, attr, col); ippDelete(col); } else { pass = 0; goto test_exit; } } else if (skip_test) break; else { print_fatal_error(outfile, "Bad ATTR collection value for \"%s\" on line %d.", attr, linenum); pass = 0; goto test_exit; } do { ipp_t *col; /* Collection value */ off_t savepos = cupsFileTell(fp); /* Save position of file */ int savelinenum = linenum; /* Save line number */ if (!get_token(fp, token, sizeof(token), &linenum)) break; if (strcmp(token, ",")) { cupsFileSeek(fp, savepos); linenum = savelinenum; break; } if (!get_token(fp, token, sizeof(token), &linenum) || strcmp(token, "{")) { print_fatal_error(outfile, "Unexpected \"%s\" on line %d.", token, linenum); pass = 0; goto test_exit; break; } if ((col = get_collection(outfile, vars, fp, &linenum)) == NULL) break; ippSetCollection(request, &attrptr, ippGetCount(attrptr), col); lastcol = attrptr; } while (!strcmp(token, "{")); break; case IPP_TAG_STRING : attrptr = ippAddOctetString(request, group, attr, token, (int)strlen(token)); break; case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : if (!strchr(token, ',')) attrptr = ippAddString(request, group, value, attr, NULL, token); else { /* * Multiple string values... */ int num_values; /* Number of values */ char *values[100], /* Values */ *ptr; /* Pointer to next value */ values[0] = token; num_values = 1; for (ptr = strchr(token, ','); ptr; ptr = strchr(ptr, ',')) { if (ptr > token && ptr[-1] == '\\') _cups_strcpy(ptr - 1, ptr); else { *ptr++ = '\0'; values[num_values] = ptr; num_values ++; } } attrptr = ippAddStrings(request, group, value, attr, num_values, NULL, (const char **)values); } break; } if (!attrptr && !skip_test) { print_fatal_error(outfile, "Unable to add attribute \"%s\" on line %d.", attr, linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "FILE")) { /* * File... */ if (!get_token(fp, temp, sizeof(temp), &linenum)) { print_fatal_error(outfile, "Missing FILE filename on line %d.", linenum); pass = 0; goto test_exit; } expand_variables(vars, token, temp, sizeof(token)); get_filename(testfile, filename, token, sizeof(filename)); if (access(filename, R_OK)) { print_fatal_error(outfile, "Filename \"%s\" on line %d cannot be read.", temp, linenum); print_fatal_error(outfile, "Filename mapped to \"%s\".", filename); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "STATUS")) { /* * Status... */ if (num_statuses >= (int)(sizeof(statuses) / sizeof(statuses[0]))) { print_fatal_error(outfile, "Too many STATUS's on line %d.", linenum); pass = 0; goto test_exit; } if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing STATUS code on line %d.", linenum); pass = 0; goto test_exit; } if ((statuses[num_statuses].status = ippErrorValue(token)) == (ipp_status_t)-1 && (statuses[num_statuses].status = (ipp_status_t)strtol(token, NULL, 0)) == 0) { print_fatal_error(outfile, "Bad STATUS code \"%s\" on line %d.", token, linenum); pass = 0; goto test_exit; } last_status = statuses + num_statuses; num_statuses ++; last_status->define_match = NULL; last_status->define_no_match = NULL; last_status->if_defined = NULL; last_status->if_not_defined = NULL; last_status->repeat_limit = 1000; last_status->repeat_match = 0; last_status->repeat_no_match = 0; } else if (!_cups_strcasecmp(token, "EXPECT") || !_cups_strcasecmp(token, "EXPECT-ALL")) { /* * Expected attributes... */ int expect_all = !_cups_strcasecmp(token, "EXPECT-ALL"); if (num_expects >= (int)(sizeof(expects) / sizeof(expects[0]))) { print_fatal_error(outfile, "Too many EXPECT's on line %d.", linenum); pass = 0; goto test_exit; } if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing EXPECT name on line %d.", linenum); pass = 0; goto test_exit; } last_expect = expects + num_expects; num_expects ++; memset(last_expect, 0, sizeof(_cups_expect_t)); last_expect->repeat_limit = 1000; last_expect->expect_all = expect_all; if (token[0] == '!') { last_expect->not_expect = 1; last_expect->name = strdup(token + 1); } else if (token[0] == '?') { last_expect->optional = 1; last_expect->name = strdup(token + 1); } else last_expect->name = strdup(token); } else if (!_cups_strcasecmp(token, "COUNT")) { if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing COUNT number on line %d.", linenum); pass = 0; goto test_exit; } if ((i = atoi(token)) <= 0) { print_fatal_error(outfile, "Bad COUNT \"%s\" on line %d.", token, linenum); pass = 0; goto test_exit; } if (last_expect) last_expect->count = i; else { print_fatal_error(outfile, "COUNT without a preceding EXPECT on line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "DEFINE-MATCH")) { if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing DEFINE-MATCH variable on line %d.", linenum); pass = 0; goto test_exit; } if (last_expect) last_expect->define_match = strdup(token); else if (last_status) last_status->define_match = strdup(token); else { print_fatal_error(outfile, "DEFINE-MATCH without a preceding EXPECT or STATUS " "on line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "DEFINE-NO-MATCH")) { if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing DEFINE-NO-MATCH variable on line %d.", linenum); pass = 0; goto test_exit; } if (last_expect) last_expect->define_no_match = strdup(token); else if (last_status) last_status->define_no_match = strdup(token); else { print_fatal_error(outfile, "DEFINE-NO-MATCH without a preceding EXPECT or " "STATUS on line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "DEFINE-VALUE")) { if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing DEFINE-VALUE variable on line %d.", linenum); pass = 0; goto test_exit; } if (last_expect) last_expect->define_value = strdup(token); else { print_fatal_error(outfile, "DEFINE-VALUE without a preceding EXPECT on " "line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "OF-TYPE")) { if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing OF-TYPE value tag(s) on line %d.", linenum); pass = 0; goto test_exit; } if (last_expect) last_expect->of_type = strdup(token); else { print_fatal_error(outfile, "OF-TYPE without a preceding EXPECT on line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "IN-GROUP")) { ipp_tag_t in_group; /* IN-GROUP value */ if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing IN-GROUP group tag on line %d.", linenum); pass = 0; goto test_exit; } if ((in_group = ippTagValue(token)) == IPP_TAG_ZERO || in_group >= IPP_TAG_UNSUPPORTED_VALUE) { print_fatal_error(outfile, "Bad IN-GROUP group tag \"%s\" on line %d.", token, linenum); pass = 0; goto test_exit; } else if (last_expect) last_expect->in_group = in_group; else { print_fatal_error(outfile, "IN-GROUP without a preceding EXPECT on line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "REPEAT-LIMIT")) { if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing REPEAT-LIMIT value on line %d.", linenum); pass = 0; goto test_exit; } else if (atoi(token) <= 0) { print_fatal_error(outfile, "Bad REPEAT-LIMIT value on line %d.", linenum); pass = 0; goto test_exit; } if (last_status) last_status->repeat_limit = atoi(token); else if (last_expect) last_expect->repeat_limit = atoi(token); else { print_fatal_error(outfile, "REPEAT-LIMIT without a preceding EXPECT or STATUS on line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "REPEAT-MATCH")) { if (last_status) last_status->repeat_match = 1; else if (last_expect) last_expect->repeat_match = 1; else { print_fatal_error(outfile, "REPEAT-MATCH without a preceding EXPECT or STATUS on line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "REPEAT-NO-MATCH")) { if (last_status) last_status->repeat_no_match = 1; else if (last_expect) last_expect->repeat_no_match = 1; else { print_fatal_error(outfile, "REPEAT-NO-MATCH without a preceding EXPECT or STATUS on ine %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "SAME-COUNT-AS")) { if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing SAME-COUNT-AS name on line %d.", linenum); pass = 0; goto test_exit; } if (last_expect) last_expect->same_count_as = strdup(token); else { print_fatal_error(outfile, "SAME-COUNT-AS without a preceding EXPECT on line " "%d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "IF-DEFINED")) { if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing IF-DEFINED name on line %d.", linenum); pass = 0; goto test_exit; } if (last_expect) last_expect->if_defined = strdup(token); else if (last_status) last_status->if_defined = strdup(token); else { print_fatal_error(outfile, "IF-DEFINED without a preceding EXPECT or STATUS on line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "IF-NOT-DEFINED")) { if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing IF-NOT-DEFINED name on line %d.", linenum); pass = 0; goto test_exit; } if (last_expect) last_expect->if_not_defined = strdup(token); else if (last_status) last_status->if_not_defined = strdup(token); else { print_fatal_error(outfile, "IF-NOT-DEFINED without a preceding EXPECT or STATUS on line %d.", linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "WITH-ALL-VALUES") || !_cups_strcasecmp(token, "WITH-ALL-HOSTNAMES") || !_cups_strcasecmp(token, "WITH-ALL-RESOURCES") || !_cups_strcasecmp(token, "WITH-ALL-SCHEMES") || !_cups_strcasecmp(token, "WITH-HOSTNAME") || !_cups_strcasecmp(token, "WITH-RESOURCE") || !_cups_strcasecmp(token, "WITH-SCHEME") || !_cups_strcasecmp(token, "WITH-VALUE")) { if (last_expect) { if (!_cups_strcasecmp(token, "WITH-ALL-HOSTNAMES") || !_cups_strcasecmp(token, "WITH-HOSTNAME")) last_expect->with_flags = _CUPS_WITH_HOSTNAME; else if (!_cups_strcasecmp(token, "WITH-ALL-RESOURCES") || !_cups_strcasecmp(token, "WITH-RESOURCE")) last_expect->with_flags = _CUPS_WITH_RESOURCE; else if (!_cups_strcasecmp(token, "WITH-ALL-SCHEMES") || !_cups_strcasecmp(token, "WITH-SCHEME")) last_expect->with_flags = _CUPS_WITH_SCHEME; if (!_cups_strncasecmp(token, "WITH-ALL-", 9)) last_expect->with_flags |= _CUPS_WITH_ALL; } if (!get_token(fp, temp, sizeof(temp), &linenum)) { print_fatal_error(outfile, "Missing %s value on line %d.", token, linenum); pass = 0; goto test_exit; } if (last_expect) { /* * Expand any variables in the value and then save it. */ expand_variables(vars, token, temp, sizeof(token)); tokenptr = token + strlen(token) - 1; if (token[0] == '/' && tokenptr > token && *tokenptr == '/') { /* * WITH-VALUE is a POSIX extended regular expression. */ last_expect->with_value = calloc(1, (size_t)(tokenptr - token)); last_expect->with_flags |= _CUPS_WITH_REGEX; if (last_expect->with_value) memcpy(last_expect->with_value, token + 1, (size_t)(tokenptr - token - 1)); } else { /* * WITH-VALUE is a literal value... */ char *ptr; /* Pointer into value */ for (ptr = token; *ptr; ptr ++) { if (*ptr == '\\' && ptr[1]) { /* * Remove \ from \foo... */ _cups_strcpy(ptr, ptr + 1); } } last_expect->with_value = strdup(token); last_expect->with_flags |= _CUPS_WITH_LITERAL; } } else { print_fatal_error(outfile, "%s without a preceding EXPECT on line %d.", token, linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "WITH-VALUE-FROM")) { if (!get_token(fp, temp, sizeof(temp), &linenum)) { print_fatal_error(outfile, "Missing %s value on line %d.", token, linenum); pass = 0; goto test_exit; } if (last_expect) { /* * Expand any variables in the value and then save it. */ expand_variables(vars, token, temp, sizeof(token)); last_expect->with_value_from = strdup(token); last_expect->with_flags = _CUPS_WITH_LITERAL; } else { print_fatal_error(outfile, "%s without a preceding EXPECT on line %d.", token, linenum); pass = 0; goto test_exit; } } else if (!_cups_strcasecmp(token, "DISPLAY")) { /* * Display attributes... */ if (num_displayed >= (int)(sizeof(displayed) / sizeof(displayed[0]))) { print_fatal_error(outfile, "Too many DISPLAY's on line %d", linenum); pass = 0; goto test_exit; } if (!get_token(fp, token, sizeof(token), &linenum)) { print_fatal_error(outfile, "Missing DISPLAY name on line %d.", linenum); pass = 0; goto test_exit; } displayed[num_displayed] = strdup(token); num_displayed ++; } else { print_fatal_error(outfile, "Unexpected token %s seen on line %d.", token, linenum); pass = 0; goto test_exit; } } /* * Submit the IPP request... */ TestCount ++; ippSetVersion(request, version / 10, version % 10); ippSetOperation(request, op); ippSetRequestId(request, request_id); if (Output == _CUPS_OUTPUT_PLIST) { cupsFilePuts(outfile, "\n"); cupsFilePuts(outfile, "Name\n"); print_xml_string(outfile, "string", name); if (file_id[0]) { cupsFilePuts(outfile, "FileId\n"); print_xml_string(outfile, "string", file_id); } if (test_id[0]) { cupsFilePuts(outfile, "TestId\n"); print_xml_string(outfile, "string", test_id); } cupsFilePuts(outfile, "Version\n"); cupsFilePrintf(outfile, "%d.%d\n", version / 10, version % 10); cupsFilePuts(outfile, "Operation\n"); print_xml_string(outfile, "string", ippOpString(op)); cupsFilePuts(outfile, "RequestId\n"); cupsFilePrintf(outfile, "%d\n", request_id); cupsFilePuts(outfile, "RequestAttributes\n"); cupsFilePuts(outfile, "\n"); if (request->attrs) { cupsFilePuts(outfile, "\n"); for (attrptr = request->attrs, group = attrptr ? attrptr->group_tag : IPP_TAG_ZERO; attrptr; attrptr = attrptr->next) print_attr(outfile, Output, attrptr, &group); cupsFilePuts(outfile, "\n"); } cupsFilePuts(outfile, "\n"); } if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout())) { if (Verbosity) { cupsFilePrintf(cupsFileStdout(), " %s:\n", ippOpString(op)); for (attrptr = request->attrs; attrptr; attrptr = attrptr->next) print_attr(cupsFileStdout(), _CUPS_OUTPUT_TEST, attrptr, NULL); } cupsFilePrintf(cupsFileStdout(), " %-68.68s [", name); } if ((skip_previous && !prev_pass) || skip_test) { SkipCount ++; ippDelete(request); request = NULL; if (Output == _CUPS_OUTPUT_PLIST) { cupsFilePuts(outfile, "Successful\n"); cupsFilePuts(outfile, "\n"); cupsFilePuts(outfile, "Skipped\n"); cupsFilePuts(outfile, "\n"); cupsFilePuts(outfile, "StatusCode\n"); print_xml_string(outfile, "string", "skip"); cupsFilePuts(outfile, "ResponseAttributes\n"); cupsFilePuts(outfile, "\n"); } if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout())) cupsFilePuts(cupsFileStdout(), "SKIP]\n"); goto skip_error; } PasswordTries = 0; do { if (delay > 0) usleep(delay); delay = repeat_interval; repeat_count ++; status = HTTP_STATUS_OK; if (transfer == _CUPS_TRANSFER_CHUNKED || (transfer == _CUPS_TRANSFER_AUTO && filename[0])) { /* * Send request using chunking - a 0 length means "chunk". */ length = 0; } else { /* * Send request using content length... */ length = ippLength(request); if (filename[0] && (reqfile = cupsFileOpen(filename, "r")) != NULL) { /* * Read the file to get the uncompressed file size... */ while ((bytes = cupsFileRead(reqfile, buffer, sizeof(buffer))) > 0) length += (size_t)bytes; cupsFileClose(reqfile); } } /* * Send the request... */ response = NULL; repeat_test = 0; prev_pass = 1; if (status != HTTP_STATUS_ERROR) { while (!response && !Cancel && prev_pass) { status = cupsSendRequest(http, request, resource, length); #ifdef HAVE_LIBZ if (compression[0]) httpSetField(http, HTTP_FIELD_CONTENT_ENCODING, compression); #endif /* HAVE_LIBZ */ if (!Cancel && status == HTTP_STATUS_CONTINUE && request->state == IPP_DATA && filename[0]) { if ((reqfile = cupsFileOpen(filename, "r")) != NULL) { while (!Cancel && (bytes = cupsFileRead(reqfile, buffer, sizeof(buffer))) > 0) if ((status = cupsWriteRequestData(http, buffer, (size_t)bytes)) != HTTP_STATUS_CONTINUE) break; cupsFileClose(reqfile); } else { snprintf(buffer, sizeof(buffer), "%s: %s", filename, strerror(errno)); _cupsSetError(IPP_INTERNAL_ERROR, buffer, 0); status = HTTP_STATUS_ERROR; } } /* * Get the server's response... */ if (!Cancel && status != HTTP_STATUS_ERROR) { response = cupsGetResponse(http, resource); status = httpGetStatus(http); } if (!Cancel && status == HTTP_STATUS_ERROR && http->error != EINVAL && #ifdef WIN32 http->error != WSAETIMEDOUT) #else http->error != ETIMEDOUT) #endif /* WIN32 */ { if (httpReconnect2(http, 30000, NULL)) prev_pass = 0; } else if (status == HTTP_STATUS_ERROR || status == HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED) { prev_pass = 0; break; } else if (status != HTTP_STATUS_OK) { httpFlush(http); if (status == HTTP_STATUS_UNAUTHORIZED) continue; break; } } } if (!Cancel && status == HTTP_STATUS_ERROR && http->error != EINVAL && #ifdef WIN32 http->error != WSAETIMEDOUT) #else http->error != ETIMEDOUT) #endif /* WIN32 */ { if (httpReconnect2(http, 30000, NULL)) prev_pass = 0; } else if (status == HTTP_STATUS_ERROR) { if (!Cancel) httpReconnect2(http, 30000, NULL); prev_pass = 0; } else if (status != HTTP_STATUS_OK) { httpFlush(http); prev_pass = 0; } /* * Check results of request... */ cupsArrayClear(errors); if (http->version != HTTP_1_1) add_stringf(errors, "Bad HTTP version (%d.%d)", http->version / 100, http->version % 100); if (ValidateHeaders) { const char *header; /* HTTP header value */ if ((header = httpGetField(http, HTTP_FIELD_CONTENT_TYPE)) == NULL || _cups_strcasecmp(header, "application/ipp")) add_stringf(errors, "Bad HTTP Content-Type in response (%s)", header && *header ? header : ""); if ((header = httpGetField(http, HTTP_FIELD_DATE)) != NULL && *header && httpGetDateTime(header) == 0) add_stringf(errors, "Bad HTTP Date in response (%s)", header); } if (!response) { /* * No response, log error... */ add_stringf(errors, "IPP request failed with status %s (%s)", ippErrorString(cupsLastError()), cupsLastErrorString()); } else { /* * Collect common attribute values... */ if ((attrptr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) != NULL) { snprintf(temp, sizeof(temp), "%d", attrptr->values[0].integer); set_variable(outfile, vars, "job-id", temp); } if ((attrptr = ippFindAttribute(response, "job-uri", IPP_TAG_URI)) != NULL) set_variable(outfile, vars, "job-uri", attrptr->values[0].string.text); if ((attrptr = ippFindAttribute(response, "notify-subscription-id", IPP_TAG_INTEGER)) != NULL) { snprintf(temp, sizeof(temp), "%d", attrptr->values[0].integer); set_variable(outfile, vars, "notify-subscription-id", temp); } /* * Check response, validating groups and attributes and logging errors * as needed... */ if (response->state != IPP_DATA) add_stringf(errors, "Missing end-of-attributes-tag in response " "(RFC 2910 section 3.5.1)"); if (version && (response->request.status.version[0] != (version / 10) || response->request.status.version[1] != (version % 10))) add_stringf(errors, "Bad version %d.%d in response - expected %d.%d " "(RFC 2911 section 3.1.8).", response->request.status.version[0], response->request.status.version[1], version / 10, version % 10); if (response->request.status.request_id != request_id) add_stringf(errors, "Bad request ID %d in response - expected %d " "(RFC 2911 section 3.1.1)", response->request.status.request_id, request_id); attrptr = response->attrs; if (!attrptr) add_stringf(errors, "Missing first attribute \"attributes-charset " "(charset)\" in group operation-attributes-tag " "(RFC 2911 section 3.1.4)."); else { if (!attrptr->name || attrptr->value_tag != IPP_TAG_CHARSET || attrptr->group_tag != IPP_TAG_OPERATION || attrptr->num_values != 1 || strcmp(attrptr->name, "attributes-charset")) add_stringf(errors, "Bad first attribute \"%s (%s%s)\" in group %s, " "expected \"attributes-charset (charset)\" in " "group operation-attributes-tag (RFC 2911 section " "3.1.4).", attrptr->name ? attrptr->name : "(null)", attrptr->num_values > 1 ? "1setOf " : "", ippTagString(attrptr->value_tag), ippTagString(attrptr->group_tag)); attrptr = attrptr->next; if (!attrptr) add_stringf(errors, "Missing second attribute \"attributes-natural-" "language (naturalLanguage)\" in group " "operation-attributes-tag (RFC 2911 section " "3.1.4)."); else if (!attrptr->name || attrptr->value_tag != IPP_TAG_LANGUAGE || attrptr->group_tag != IPP_TAG_OPERATION || attrptr->num_values != 1 || strcmp(attrptr->name, "attributes-natural-language")) add_stringf(errors, "Bad first attribute \"%s (%s%s)\" in group %s, " "expected \"attributes-natural-language " "(naturalLanguage)\" in group " "operation-attributes-tag (RFC 2911 section " "3.1.4).", attrptr->name ? attrptr->name : "(null)", attrptr->num_values > 1 ? "1setOf " : "", ippTagString(attrptr->value_tag), ippTagString(attrptr->group_tag)); } if ((attrptr = ippFindAttribute(response, "status-message", IPP_TAG_ZERO)) != NULL) { if (attrptr->value_tag != IPP_TAG_TEXT) add_stringf(errors, "status-message (text(255)) has wrong value tag " "%s (RFC 2911 section 3.1.6.2).", ippTagString(attrptr->value_tag)); if (attrptr->group_tag != IPP_TAG_OPERATION) add_stringf(errors, "status-message (text(255)) has wrong group tag " "%s (RFC 2911 section 3.1.6.2).", ippTagString(attrptr->group_tag)); if (attrptr->num_values != 1) add_stringf(errors, "status-message (text(255)) has %d values " "(RFC 2911 section 3.1.6.2).", attrptr->num_values); if (attrptr->value_tag == IPP_TAG_TEXT && strlen(attrptr->values[0].string.text) > 255) add_stringf(errors, "status-message (text(255)) has bad length %d" " (RFC 2911 section 3.1.6.2).", (int)strlen(attrptr->values[0].string.text)); } if ((attrptr = ippFindAttribute(response, "detailed-status-message", IPP_TAG_ZERO)) != NULL) { if (attrptr->value_tag != IPP_TAG_TEXT) add_stringf(errors, "detailed-status-message (text(MAX)) has wrong " "value tag %s (RFC 2911 section 3.1.6.3).", ippTagString(attrptr->value_tag)); if (attrptr->group_tag != IPP_TAG_OPERATION) add_stringf(errors, "detailed-status-message (text(MAX)) has wrong " "group tag %s (RFC 2911 section 3.1.6.3).", ippTagString(attrptr->group_tag)); if (attrptr->num_values != 1) add_stringf(errors, "detailed-status-message (text(MAX)) has %d values" " (RFC 2911 section 3.1.6.3).", attrptr->num_values); if (attrptr->value_tag == IPP_TAG_TEXT && strlen(attrptr->values[0].string.text) > 1023) add_stringf(errors, "detailed-status-message (text(MAX)) has bad " "length %d (RFC 2911 section 3.1.6.3).", (int)strlen(attrptr->values[0].string.text)); } a = cupsArrayNew((cups_array_func_t)strcmp, NULL); for (attrptr = response->attrs, group = attrptr ? attrptr->group_tag : IPP_TAG_ZERO; attrptr; attrptr = attrptr->next) { if (attrptr->group_tag != group) { int out_of_order = 0; /* Are attribute groups out-of-order? */ cupsArrayClear(a); switch (attrptr->group_tag) { case IPP_TAG_ZERO : break; case IPP_TAG_OPERATION : out_of_order = 1; break; case IPP_TAG_UNSUPPORTED_GROUP : if (group != IPP_TAG_OPERATION) out_of_order = 1; break; case IPP_TAG_JOB : case IPP_TAG_PRINTER : if (group != IPP_TAG_OPERATION && group != IPP_TAG_UNSUPPORTED_GROUP) out_of_order = 1; break; case IPP_TAG_SUBSCRIPTION : if (group > attrptr->group_tag && group != IPP_TAG_DOCUMENT) out_of_order = 1; break; default : if (group > attrptr->group_tag) out_of_order = 1; break; } if (out_of_order) add_stringf(errors, "Attribute groups out of order (%s < %s)", ippTagString(attrptr->group_tag), ippTagString(group)); if (attrptr->group_tag != IPP_TAG_ZERO) group = attrptr->group_tag; } validate_attr(outfile, errors, attrptr); if (attrptr->name) { if (cupsArrayFind(a, attrptr->name)) add_stringf(errors, "Duplicate \"%s\" attribute in %s group", attrptr->name, ippTagString(group)); cupsArrayAdd(a, attrptr->name); } } cupsArrayDelete(a); /* * Now check the test-defined expected status-code and attribute * values... */ for (i = 0, status_ok = 0; i < num_statuses; i ++) { if (statuses[i].if_defined && !get_variable(vars, statuses[i].if_defined)) continue; if (statuses[i].if_not_defined && get_variable(vars, statuses[i].if_not_defined)) continue; if (ippGetStatusCode(response) == statuses[i].status) { status_ok = 1; if (statuses[i].repeat_match && repeat_count < statuses[i].repeat_limit) repeat_test = 1; if (statuses[i].define_match) set_variable(outfile, vars, statuses[i].define_match, "1"); } else { if (statuses[i].repeat_no_match && repeat_count < statuses[i].repeat_limit) repeat_test = 1; if (statuses[i].define_no_match) { set_variable(outfile, vars, statuses[i].define_no_match, "1"); status_ok = 1; } } } if (!status_ok && num_statuses > 0) { for (i = 0; i < num_statuses; i ++) { if (statuses[i].if_defined && !get_variable(vars, statuses[i].if_defined)) continue; if (statuses[i].if_not_defined && get_variable(vars, statuses[i].if_not_defined)) continue; if (!statuses[i].repeat_match || repeat_count >= statuses[i].repeat_limit) add_stringf(errors, "EXPECTED: STATUS %s (got %s)", ippErrorString(statuses[i].status), ippErrorString(cupsLastError())); } if ((attrptr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT)) != NULL) add_stringf(errors, "status-message=\"%s\"", attrptr->values[0].string.text); } for (i = num_expects, expect = expects; i > 0; i --, expect ++) { if (expect->if_defined && !get_variable(vars, expect->if_defined)) continue; if (expect->if_not_defined && get_variable(vars, expect->if_not_defined)) continue; found = ippFindAttribute(response, expect->name, IPP_TAG_ZERO); do { if ((found && expect->not_expect) || (!found && !(expect->not_expect || expect->optional)) || (found && !expect_matches(expect, found->value_tag)) || (found && expect->in_group && found->group_tag != expect->in_group)) { if (expect->define_no_match) set_variable(outfile, vars, expect->define_no_match, "1"); else if (!expect->define_match && !expect->define_value) { if (found && expect->not_expect) add_stringf(errors, "NOT EXPECTED: %s", expect->name); else if (!found && !(expect->not_expect || expect->optional)) add_stringf(errors, "EXPECTED: %s", expect->name); else if (found) { if (!expect_matches(expect, found->value_tag)) add_stringf(errors, "EXPECTED: %s OF-TYPE %s (got %s)", expect->name, expect->of_type, ippTagString(found->value_tag)); if (expect->in_group && found->group_tag != expect->in_group) add_stringf(errors, "EXPECTED: %s IN-GROUP %s (got %s).", expect->name, ippTagString(expect->in_group), ippTagString(found->group_tag)); } } if (expect->repeat_no_match && repeat_count < expect->repeat_limit) repeat_test = 1; break; } if (found) ippAttributeString(found, buffer, sizeof(buffer)); if (found && expect->with_value_from && !with_value_from(NULL, ippFindAttribute(response, expect->with_value_from, IPP_TAG_ZERO), found, buffer, sizeof(buffer))) { if (expect->define_no_match) set_variable(outfile, vars, expect->define_no_match, "1"); else if (!expect->define_match && !expect->define_value && ((!expect->repeat_match && !expect->repeat_no_match) || repeat_count >= expect->repeat_limit)) { add_stringf(errors, "EXPECTED: %s WITH-VALUES-FROM %s", expect->name, expect->with_value_from); with_value_from(errors, ippFindAttribute(response, expect->with_value_from, IPP_TAG_ZERO), found, buffer, sizeof(buffer)); } if (expect->repeat_no_match && repeat_count < expect->repeat_limit) repeat_test = 1; break; } else if (found && !with_value(outfile, NULL, expect->with_value, expect->with_flags, found, buffer, sizeof(buffer))) { if (expect->define_no_match) set_variable(outfile, vars, expect->define_no_match, "1"); else if (!expect->define_match && !expect->define_value && !expect->repeat_match && (!expect->repeat_no_match || repeat_count >= expect->repeat_limit)) { if (expect->with_flags & _CUPS_WITH_REGEX) add_stringf(errors, "EXPECTED: %s %s /%s/", expect->name, with_flags_string(expect->with_flags), expect->with_value); else add_stringf(errors, "EXPECTED: %s %s \"%s\"", expect->name, with_flags_string(expect->with_flags), expect->with_value); with_value(outfile, errors, expect->with_value, expect->with_flags, found, buffer, sizeof(buffer)); } if (expect->repeat_no_match && repeat_count < expect->repeat_limit) repeat_test = 1; break; } if (found && expect->count > 0 && found->num_values != expect->count) { if (expect->define_no_match) set_variable(outfile, vars, expect->define_no_match, "1"); else if (!expect->define_match && !expect->define_value) { add_stringf(errors, "EXPECTED: %s COUNT %d (got %d)", expect->name, expect->count, found->num_values); } if (expect->repeat_no_match && repeat_count < expect->repeat_limit) repeat_test = 1; break; } if (found && expect->same_count_as) { attrptr = ippFindAttribute(response, expect->same_count_as, IPP_TAG_ZERO); if (!attrptr || attrptr->num_values != found->num_values) { if (expect->define_no_match) set_variable(outfile, vars, expect->define_no_match, "1"); else if (!expect->define_match && !expect->define_value) { if (!attrptr) add_stringf(errors, "EXPECTED: %s (%d values) SAME-COUNT-AS %s " "(not returned)", expect->name, found->num_values, expect->same_count_as); else if (attrptr->num_values != found->num_values) add_stringf(errors, "EXPECTED: %s (%d values) SAME-COUNT-AS %s " "(%d values)", expect->name, found->num_values, expect->same_count_as, attrptr->num_values); } if (expect->repeat_no_match && repeat_count < expect->repeat_limit) repeat_test = 1; break; } } if (found && expect->define_match) set_variable(outfile, vars, expect->define_match, "1"); if (found && expect->define_value) { if (!expect->with_value) { int last = ippGetCount(found) - 1; /* Last element in attribute */ switch (ippGetValueTag(found)) { case IPP_TAG_ENUM : case IPP_TAG_INTEGER : snprintf(buffer, sizeof(buffer), "%d", ippGetInteger(found, last)); break; case IPP_TAG_BOOLEAN : if (ippGetBoolean(found, last)) strlcpy(buffer, "true", sizeof(buffer)); else strlcpy(buffer, "false", sizeof(buffer)); break; case IPP_TAG_RESOLUTION : { int xres, /* Horizontal resolution */ yres; /* Vertical resolution */ ipp_res_t units; /* Resolution units */ xres = ippGetResolution(found, last, &yres, &units); if (xres == yres) snprintf(buffer, sizeof(buffer), "%d%s", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); else snprintf(buffer, sizeof(buffer), "%dx%d%s", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); } break; case IPP_TAG_CHARSET : case IPP_TAG_KEYWORD : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : case IPP_TAG_NAME : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_TEXTLANG : case IPP_TAG_URI : case IPP_TAG_URISCHEME : strlcpy(buffer, ippGetString(found, last, NULL), sizeof(buffer)); break; default : ippAttributeString(found, buffer, sizeof(buffer)); break; } } set_variable(outfile, vars, expect->define_value, buffer); } if (found && expect->repeat_match && repeat_count < expect->repeat_limit) repeat_test = 1; } while (expect->expect_all && (found = ippFindNextAttribute(response, expect->name, IPP_TAG_ZERO)) != NULL); } } /* * If we are going to repeat this test, display intermediate results... */ if (repeat_test) { if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout())) { cupsFilePrintf(cupsFileStdout(), "%04d]\n", repeat_count); \ if (num_displayed > 0) { for (attrptr = ippFirstAttribute(response); attrptr; attrptr = ippNextAttribute(response)) { const char *attrname = ippGetName(attrptr); if (attrname) { for (i = 0; i < num_displayed; i ++) { if (!strcmp(displayed[i], attrname)) { print_attr(cupsFileStdout(), _CUPS_OUTPUT_TEST, attrptr, NULL); break; } } } } } } if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout())) { cupsFilePrintf(cupsFileStdout(), " %-68.68s [", name); } ippDelete(response); response = NULL; } } while (repeat_test); ippDelete(request); request = NULL; if (cupsArrayCount(errors) > 0) prev_pass = pass = 0; if (prev_pass) PassCount ++; else FailCount ++; if (Output == _CUPS_OUTPUT_PLIST) { cupsFilePuts(outfile, "Successful\n"); cupsFilePuts(outfile, prev_pass ? "\n" : "\n"); cupsFilePuts(outfile, "StatusCode\n"); print_xml_string(outfile, "string", ippErrorString(cupsLastError())); cupsFilePuts(outfile, "ResponseAttributes\n"); cupsFilePuts(outfile, "\n"); cupsFilePuts(outfile, "\n"); for (attrptr = response ? response->attrs : NULL, group = attrptr ? attrptr->group_tag : IPP_TAG_ZERO; attrptr; attrptr = attrptr->next) print_attr(outfile, Output, attrptr, &group); cupsFilePuts(outfile, "\n"); cupsFilePuts(outfile, "\n"); } if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout())) { cupsFilePuts(cupsFileStdout(), prev_pass ? "PASS]\n" : "FAIL]\n"); if (!prev_pass || (Verbosity && response)) { cupsFilePrintf(cupsFileStdout(), " RECEIVED: %lu bytes in response\n", (unsigned long)ippLength(response)); cupsFilePrintf(cupsFileStdout(), " status-code = %s (%s)\n", ippErrorString(cupsLastError()), cupsLastErrorString()); if (Verbosity && response) { for (attrptr = response->attrs; attrptr != NULL; attrptr = attrptr->next) print_attr(cupsFileStdout(), _CUPS_OUTPUT_TEST, attrptr, NULL); } } } else if (!prev_pass && Output != _CUPS_OUTPUT_QUIET) fprintf(stderr, "%s\n", cupsLastErrorString()); if (prev_pass && Output >= _CUPS_OUTPUT_LIST && !Verbosity && num_displayed > 0) { size_t width; /* Length of value */ for (i = 0; i < num_displayed; i ++) { widths[i] = strlen(displayed[i]); for (attrptr = ippFindAttribute(response, displayed[i], IPP_TAG_ZERO); attrptr; attrptr = ippFindNextAttribute(response, displayed[i], IPP_TAG_ZERO)) { width = ippAttributeString(attrptr, NULL, 0); if (width > widths[i]) widths[i] = width; } } if (Output == _CUPS_OUTPUT_CSV) print_csv(outfile, NULL, num_displayed, displayed, widths); else print_line(outfile, NULL, num_displayed, displayed, widths); attrptr = response->attrs; while (attrptr) { while (attrptr && attrptr->group_tag <= IPP_TAG_OPERATION) attrptr = attrptr->next; if (attrptr) { if (Output == _CUPS_OUTPUT_CSV) print_csv(outfile, attrptr, num_displayed, displayed, widths); else print_line(outfile, attrptr, num_displayed, displayed, widths); while (attrptr && attrptr->group_tag > IPP_TAG_OPERATION) attrptr = attrptr->next; } } } else if (!prev_pass) { if (Output == _CUPS_OUTPUT_PLIST) { cupsFilePuts(outfile, "Errors\n"); cupsFilePuts(outfile, "\n"); for (error = (char *)cupsArrayFirst(errors); error; error = (char *)cupsArrayNext(errors)) print_xml_string(outfile, "string", error); cupsFilePuts(outfile, "\n"); } if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout())) { for (error = (char *)cupsArrayFirst(errors); error; error = (char *)cupsArrayNext(errors)) cupsFilePrintf(cupsFileStdout(), " %s\n", error); } } if (num_displayed > 0 && !Verbosity && response && (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout()))) { for (attrptr = response->attrs; attrptr != NULL; attrptr = attrptr->next) { if (attrptr->name) { for (i = 0; i < num_displayed; i ++) { if (!strcmp(displayed[i], attrptr->name)) { print_attr(outfile, Output, attrptr, NULL); break; } } } } } skip_error: if (Output == _CUPS_OUTPUT_PLIST) cupsFilePuts(outfile, "\n"); ippDelete(response); response = NULL; for (i = 0; i < num_statuses; i ++) { if (statuses[i].if_defined) free(statuses[i].if_defined); if (statuses[i].if_not_defined) free(statuses[i].if_not_defined); if (statuses[i].define_match) free(statuses[i].define_match); if (statuses[i].define_no_match) free(statuses[i].define_no_match); } num_statuses = 0; for (i = num_expects, expect = expects; i > 0; i --, expect ++) { free(expect->name); if (expect->of_type) free(expect->of_type); if (expect->same_count_as) free(expect->same_count_as); if (expect->if_defined) free(expect->if_defined); if (expect->if_not_defined) free(expect->if_not_defined); if (expect->with_value) free(expect->with_value); if (expect->define_match) free(expect->define_match); if (expect->define_no_match) free(expect->define_no_match); if (expect->define_value) free(expect->define_value); } num_expects = 0; for (i = 0; i < num_displayed; i ++) free(displayed[i]); num_displayed = 0; if (!ignore_errors && !prev_pass) break; } test_exit: cupsArrayDelete(errors); if (fp) cupsFileClose(fp); httpClose(http); ippDelete(request); ippDelete(response); for (i = 0; i < num_statuses; i ++) { if (statuses[i].if_defined) free(statuses[i].if_defined); if (statuses[i].if_not_defined) free(statuses[i].if_not_defined); if (statuses[i].define_match) free(statuses[i].define_match); if (statuses[i].define_no_match) free(statuses[i].define_no_match); } for (i = num_expects, expect = expects; i > 0; i --, expect ++) { free(expect->name); if (expect->of_type) free(expect->of_type); if (expect->same_count_as) free(expect->same_count_as); if (expect->if_defined) free(expect->if_defined); if (expect->if_not_defined) free(expect->if_not_defined); if (expect->with_value) free(expect->with_value); if (expect->define_match) free(expect->define_match); if (expect->define_no_match) free(expect->define_no_match); if (expect->define_value) free(expect->define_value); } for (i = 0; i < num_displayed; i ++) free(displayed[i]); return (pass); } /* * 'expand_variables()' - Expand variables in a string. */ static void expand_variables(_cups_vars_t *vars, /* I - Variables */ char *dst, /* I - Destination string buffer */ const char *src, /* I - Source string */ size_t dstsize) /* I - Size of destination buffer */ { char *dstptr, /* Pointer into destination */ *dstend, /* End of destination */ temp[256], /* Temporary string */ *tempptr; /* Pointer into temporary string */ const char *value; /* Value to substitute */ dstptr = dst; dstend = dst + dstsize - 1; while (*src && dstptr < dstend) { if (*src == '$') { /* * Substitute a string/number... */ if (!strncmp(src, "$$", 2)) { value = "$"; src += 2; } else if (!strncmp(src, "$ENV[", 5)) { strlcpy(temp, src + 5, sizeof(temp)); for (tempptr = temp; *tempptr; tempptr ++) if (*tempptr == ']') break; if (*tempptr) *tempptr++ = '\0'; value = getenv(temp); src += tempptr - temp + 5; } else { if (src[1] == '{') { src += 2; strlcpy(temp, src, sizeof(temp)); if ((tempptr = strchr(temp, '}')) != NULL) *tempptr = '\0'; else tempptr = temp + strlen(temp); } else { strlcpy(temp, src + 1, sizeof(temp)); for (tempptr = temp; *tempptr; tempptr ++) if (!isalnum(*tempptr & 255) && *tempptr != '-' && *tempptr != '_') break; if (*tempptr) *tempptr = '\0'; } if (!strcmp(temp, "uri")) value = vars->uri; else if (!strcmp(temp, "filename")) value = vars->filename; else if (!strcmp(temp, "scheme") || !strcmp(temp, "method")) value = vars->scheme; else if (!strcmp(temp, "username")) value = vars->userpass; else if (!strcmp(temp, "hostname")) value = vars->hostname; else if (!strcmp(temp, "port")) { snprintf(temp, sizeof(temp), "%d", vars->port); value = temp; } else if (!strcmp(temp, "resource")) value = vars->resource; else if (!strcmp(temp, "user")) value = cupsUser(); else value = get_variable(vars, temp); src += tempptr - temp + 1; } if (value) { strlcpy(dstptr, value, (size_t)(dstend - dstptr + 1)); dstptr += strlen(dstptr); } } else *dstptr++ = *src++; } *dstptr = '\0'; } /* * 'expect_matches()' - Return true if the tag matches the specification. */ static int /* O - 1 if matches, 0 otherwise */ expect_matches( _cups_expect_t *expect, /* I - Expected attribute */ ipp_tag_t value_tag) /* I - Value tag for attribute */ { int match; /* Match? */ char *of_type, /* Type name to match */ *next, /* Next name to match */ sep; /* Separator character */ /* * If we don't expect a particular type, return immediately... */ if (!expect->of_type) return (1); /* * Parse the "of_type" value since the string can contain multiple attribute * types separated by "," or "|"... */ for (of_type = expect->of_type, match = 0; !match && *of_type; of_type = next) { /* * Find the next separator, and set it (temporarily) to nul if present. */ for (next = of_type; *next && *next != '|' && *next != ','; next ++); if ((sep = *next) != '\0') *next = '\0'; /* * Support some meta-types to make it easier to write the test file. */ if (!strcmp(of_type, "text")) match = value_tag == IPP_TAG_TEXTLANG || value_tag == IPP_TAG_TEXT; else if (!strcmp(of_type, "name")) match = value_tag == IPP_TAG_NAMELANG || value_tag == IPP_TAG_NAME; else if (!strcmp(of_type, "collection")) match = value_tag == IPP_TAG_BEGIN_COLLECTION; else match = value_tag == ippTagValue(of_type); /* * Restore the separator if we have one... */ if (sep) *next++ = sep; } return (match); } /* * 'get_collection()' - Get a collection value from the current test file. */ static ipp_t * /* O - Collection value */ get_collection(cups_file_t *outfile, /* I - Output file */ _cups_vars_t *vars, /* I - Variables */ cups_file_t *fp, /* I - File to read from */ int *linenum) /* IO - Line number */ { char token[1024], /* Token from file */ temp[1024], /* Temporary string */ attr[128]; /* Attribute name */ ipp_tag_t value; /* Current value type */ ipp_t *col = ippNew(); /* Collection value */ ipp_attribute_t *lastcol = NULL; /* Last collection attribute */ while (get_token(fp, token, sizeof(token), linenum) != NULL) { if (!strcmp(token, "}")) break; else if (!strcmp(token, "{") && lastcol) { /* * Another collection value */ ipp_t *subcol = get_collection(outfile, vars, fp, linenum); /* Collection value */ if (subcol) ippSetCollection(col, &lastcol, ippGetCount(lastcol), subcol); else goto col_error; } else if (!_cups_strcasecmp(token, "MEMBER")) { /* * Attribute... */ lastcol = NULL; if (!get_token(fp, token, sizeof(token), linenum)) { print_fatal_error(outfile, "Missing MEMBER value tag on line %d.", *linenum); goto col_error; } if ((value = ippTagValue(token)) < IPP_TAG_UNSUPPORTED_VALUE) { print_fatal_error(outfile, "Bad MEMBER value tag \"%s\" on line %d.", token, *linenum); goto col_error; } if (!get_token(fp, attr, sizeof(attr), linenum)) { print_fatal_error(outfile, "Missing MEMBER name on line %d.", *linenum); goto col_error; } if (value < IPP_TAG_INTEGER) { /* * Out-of-band member attributes have no value... */ token[0] = '\0'; } else if (!get_token(fp, temp, sizeof(temp), linenum)) { print_fatal_error(outfile, "Missing MEMBER value on line %d.", *linenum); goto col_error; } else { expand_variables(vars, token, temp, sizeof(token)); } switch (value) { default : if (value < IPP_TAG_INTEGER) { /* * Add out-of-band value... */ ippAddOutOfBand(col, IPP_TAG_ZERO, value, attr); } else { print_fatal_error(outfile, "Unsupported MEMBER value tag %s for \"%s\" on line %d.", ippTagString(value), attr, *linenum); goto col_error; } break; case IPP_TAG_BOOLEAN : if (!_cups_strcasecmp(token, "true")) ippAddBoolean(col, IPP_TAG_ZERO, attr, 1); else ippAddBoolean(col, IPP_TAG_ZERO, attr, (char)atoi(token)); break; case IPP_TAG_INTEGER : case IPP_TAG_ENUM : ippAddInteger(col, IPP_TAG_ZERO, value, attr, atoi(token)); break; case IPP_TAG_RESOLUTION : { int xres, /* X resolution */ yres; /* Y resolution */ char units[6]; /* Units */ if (sscanf(token, "%dx%d%5s", &xres, &yres, units) != 3 || (_cups_strcasecmp(units, "dpi") && _cups_strcasecmp(units, "dpc") && _cups_strcasecmp(units, "dpcm") && _cups_strcasecmp(units, "other"))) { print_fatal_error(outfile, "Bad resolution value \"%s\" on line %d.", token, *linenum); goto col_error; } if (!_cups_strcasecmp(units, "dpi")) ippAddResolution(col, IPP_TAG_ZERO, attr, IPP_RES_PER_INCH, xres, yres); else if (!_cups_strcasecmp(units, "dpc") || !_cups_strcasecmp(units, "dpcm")) ippAddResolution(col, IPP_TAG_ZERO, attr, IPP_RES_PER_CM, xres, yres); else ippAddResolution(col, IPP_TAG_ZERO, attr, (ipp_res_t)0, xres, yres); } break; case IPP_TAG_RANGE : { int lowers[4], /* Lower value */ uppers[4], /* Upper values */ num_vals; /* Number of values */ num_vals = sscanf(token, "%d-%d,%d-%d,%d-%d,%d-%d", lowers + 0, uppers + 0, lowers + 1, uppers + 1, lowers + 2, uppers + 2, lowers + 3, uppers + 3); if ((num_vals & 1) || num_vals == 0) { print_fatal_error(outfile, "Bad rangeOfInteger value \"%s\" on line %d.", token, *linenum); goto col_error; } ippAddRanges(col, IPP_TAG_ZERO, attr, num_vals / 2, lowers, uppers); } break; case IPP_TAG_BEGIN_COLLECTION : if (!strcmp(token, "{")) { ipp_t *subcol = get_collection(outfile, vars, fp, linenum); /* Collection value */ if (subcol) { lastcol = ippAddCollection(col, IPP_TAG_ZERO, attr, subcol); ippDelete(subcol); } else goto col_error; } else { print_fatal_error(outfile, "Bad collection value on line %d.", *linenum); goto col_error; } break; case IPP_TAG_STRING : ippAddOctetString(col, IPP_TAG_ZERO, attr, token, (int)strlen(token)); break; case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : if (!strchr(token, ',')) ippAddString(col, IPP_TAG_ZERO, value, attr, NULL, token); else { /* * Multiple string values... */ int num_values; /* Number of values */ char *values[100], /* Values */ *ptr; /* Pointer to next value */ values[0] = token; num_values = 1; for (ptr = strchr(token, ','); ptr; ptr = strchr(ptr, ',')) { if (ptr > token && ptr[-1] == '\\') _cups_strcpy(ptr - 1, ptr); else { *ptr++ = '\0'; values[num_values] = ptr; num_values ++; } } ippAddStrings(col, IPP_TAG_ZERO, value, attr, num_values, NULL, (const char **)values); } break; } } else { print_fatal_error(outfile, "Unexpected token %s seen on line %d.", token, *linenum); goto col_error; } } return (col); /* * If we get here there was a parse error; free memory and return. */ col_error: ippDelete(col); return (NULL); } /* * 'get_filename()' - Get a filename based on the current test file. */ static char * /* O - Filename */ get_filename(const char *testfile, /* I - Current test file */ char *dst, /* I - Destination filename */ const char *src, /* I - Source filename */ size_t dstsize) /* I - Size of destination buffer */ { char *dstptr; /* Pointer into destination */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ if (*src == '<' && src[strlen(src) - 1] == '>') { /* * Map to CUPS_DATADIR/ipptool/filename... */ snprintf(dst, dstsize, "%s/ipptool/%s", cg->cups_datadir, src + 1); dstptr = dst + strlen(dst) - 1; if (*dstptr == '>') *dstptr = '\0'; } else if (*src == '/' || !strchr(testfile, '/') #ifdef WIN32 || (isalpha(*src & 255) && src[1] == ':') #endif /* WIN32 */ ) { /* * Use the path as-is... */ strlcpy(dst, src, dstsize); } else { /* * Make path relative to testfile... */ strlcpy(dst, testfile, dstsize); if ((dstptr = strrchr(dst, '/')) != NULL) dstptr ++; else dstptr = dst; /* Should never happen */ strlcpy(dstptr, src, dstsize - (size_t)(dstptr - dst)); } return (dst); } /* * 'get_string()' - Get a pointer to a string value or the portion of interest. */ static const char * /* O - Pointer to string */ get_string(ipp_attribute_t *attr, /* I - IPP attribute */ int element, /* I - Element to fetch */ int flags, /* I - Value ("with") flags */ char *buffer, /* I - Temporary buffer */ size_t bufsize) /* I - Size of temporary buffer */ { const char *value; /* Value */ char *ptr, /* Pointer into value */ scheme[256], /* URI scheme */ userpass[256], /* Username/password */ hostname[256], /* Hostname */ resource[1024]; /* Resource */ int port; /* Port number */ value = ippGetString(attr, element, NULL); if (flags & _CUPS_WITH_HOSTNAME) { if (httpSeparateURI(HTTP_URI_CODING_ALL, value, scheme, sizeof(scheme), userpass, sizeof(userpass), buffer, (int)bufsize, &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) buffer[0] = '\0'; ptr = buffer + strlen(buffer) - 1; if (ptr >= buffer && *ptr == '.') *ptr = '\0'; /* Drop trailing "." */ return (buffer); } else if (flags & _CUPS_WITH_RESOURCE) { if (httpSeparateURI(HTTP_URI_CODING_ALL, value, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, buffer, (int)bufsize) < HTTP_URI_STATUS_OK) buffer[0] = '\0'; return (buffer); } else if (flags & _CUPS_WITH_SCHEME) { if (httpSeparateURI(HTTP_URI_CODING_ALL, value, buffer, (int)bufsize, userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) buffer[0] = '\0'; return (buffer); } else if (ippGetValueTag(attr) == IPP_TAG_URI && (!strncmp(value, "ipp://", 6) || !strncmp(value, "http://", 7) || !strncmp(value, "ipps://", 7) || !strncmp(value, "https://", 8))) { http_uri_status_t status = httpSeparateURI(HTTP_URI_CODING_ALL, value, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if (status < HTTP_URI_STATUS_OK) { /* * Bad URI... */ buffer[0] = '\0'; } else { /* * Normalize URI with no trailing dot... */ if ((ptr = hostname + strlen(hostname) - 1) >= hostname && *ptr == '.') *ptr = '\0'; httpAssembleURI(HTTP_URI_CODING_ALL, buffer, (int)bufsize, scheme, userpass, hostname, port, resource); } return (buffer); } else return (value); } /* * 'get_token()' - Get a token from a file. */ static char * /* O - Token from file or NULL on EOF */ get_token(cups_file_t *fp, /* I - File to read from */ char *buf, /* I - Buffer to read into */ int buflen, /* I - Length of buffer */ int *linenum) /* IO - Current line number */ { int ch, /* Character from file */ quote; /* Quoting character */ char *bufptr, /* Pointer into buffer */ *bufend; /* End of buffer */ for (;;) { /* * Skip whitespace... */ while (isspace(ch = cupsFileGetChar(fp))) { if (ch == '\n') (*linenum) ++; } /* * Read a token... */ if (ch == EOF) return (NULL); else if (ch == '\'' || ch == '\"') { /* * Quoted text or regular expression... */ quote = ch; bufptr = buf; bufend = buf + buflen - 1; while ((ch = cupsFileGetChar(fp)) != EOF) { if (ch == '\\') { /* * Escape next character... */ if (bufptr < bufend) *bufptr++ = (char)ch; if ((ch = cupsFileGetChar(fp)) != EOF && bufptr < bufend) *bufptr++ = (char)ch; } else if (ch == quote) break; else if (bufptr < bufend) *bufptr++ = (char)ch; } *bufptr = '\0'; return (buf); } else if (ch == '#') { /* * Comment... */ while ((ch = cupsFileGetChar(fp)) != EOF) if (ch == '\n') break; (*linenum) ++; } else if (ch == '{' || ch == '}' || ch == ',') { buf[0] = (char)ch; buf[1] = '\0'; return (buf); } else { /* * Whitespace delimited text... */ cupsFileSeek(fp, cupsFileTell(fp) - 1); bufptr = buf; bufend = buf + buflen - 1; while ((ch = cupsFileGetChar(fp)) != EOF) if (isspace(ch) || ch == '#') break; else if (bufptr < bufend) *bufptr++ = (char)ch; if (ch == '#') cupsFileSeek(fp, cupsFileTell(fp) - 1); else if (ch == '\n') (*linenum) ++; *bufptr = '\0'; return (buf); } } } /* * 'get_variable()' - Get the value of a variable. */ static char * /* O - Value or NULL */ get_variable(_cups_vars_t *vars, /* I - Variables */ const char *name) /* I - Variable name */ { _cups_var_t key, /* Search key */ *match; /* Matching variable, if any */ key.name = (char *)name; match = cupsArrayFind(vars->vars, &key); return (match ? match->value : NULL); } /* * 'iso_date()' - Return an ISO 8601 date/time string for the given IPP dateTime * value. */ static char * /* O - ISO 8601 date/time string */ iso_date(ipp_uchar_t *date) /* I - IPP (RFC 1903) date/time value */ { time_t utctime; /* UTC time since 1970 */ struct tm *utcdate; /* UTC date/time */ static char buffer[255]; /* String buffer */ utctime = ippDateToTime(date); utcdate = gmtime(&utctime); snprintf(buffer, sizeof(buffer), "%04d-%02d-%02dT%02d:%02d:%02dZ", utcdate->tm_year + 1900, utcdate->tm_mon + 1, utcdate->tm_mday, utcdate->tm_hour, utcdate->tm_min, utcdate->tm_sec); return (buffer); } /* * 'password_cb()' - Password callback for authenticated tests. */ static const char * /* O - Password */ password_cb(const char *prompt) /* I - Prompt (unused) */ { (void)prompt; if (PasswordTries < 3) { PasswordTries ++; cupsSetUser(Username); return (Password); } else return (NULL); } /* * 'pause_message()' - Display the message and pause until the user presses a key. */ static void pause_message(const char *message) /* I - Message */ { #ifdef WIN32 HANDLE tty; /* Console handle */ DWORD mode; /* Console mode */ char key; /* Key press */ DWORD bytes; /* Bytes read for key press */ /* * Disable input echo and set raw input... */ if ((tty = GetStdHandle(STD_INPUT_HANDLE)) == INVALID_HANDLE_VALUE) return; if (!GetConsoleMode(tty, &mode)) return; if (!SetConsoleMode(tty, 0)) return; #else int tty; /* /dev/tty - never read from stdin */ struct termios original, /* Original input mode */ noecho; /* No echo input mode */ char key; /* Current key press */ /* * Disable input echo and set raw input... */ if ((tty = open("/dev/tty", O_RDONLY)) < 0) return; if (tcgetattr(tty, &original)) { close(tty); return; } noecho = original; noecho.c_lflag &= (tcflag_t)~(ICANON | ECHO | ECHOE | ISIG); if (tcsetattr(tty, TCSAFLUSH, &noecho)) { close(tty); return; } #endif /* WIN32 */ /* * Display the prompt... */ cupsFilePrintf(cupsFileStdout(), "%s\n---- PRESS ANY KEY ----", message); #ifdef WIN32 /* * Read a key... */ ReadFile(tty, &key, 1, &bytes, NULL); /* * Cleanup... */ SetConsoleMode(tty, mode); #else /* * Read a key... */ read(tty, &key, 1); /* * Cleanup... */ tcsetattr(tty, TCSAFLUSH, &original); close(tty); #endif /* WIN32 */ /* * Erase the "press any key" prompt... */ cupsFilePuts(cupsFileStdout(), "\r \r"); } /* * 'print_attr()' - Print an attribute on the screen. */ static void print_attr(cups_file_t *outfile, /* I - Output file */ int format, /* I - Output format */ ipp_attribute_t *attr, /* I - Attribute to print */ ipp_tag_t *group) /* IO - Current group */ { int i; /* Looping var */ ipp_attribute_t *colattr; /* Collection attribute */ if (format == _CUPS_OUTPUT_PLIST) { if (!attr->name || (group && *group != attr->group_tag)) { if (attr->group_tag != IPP_TAG_ZERO) { cupsFilePuts(outfile, "\n"); cupsFilePuts(outfile, "\n"); } if (group) *group = attr->group_tag; } if (!attr->name) return; print_xml_string(outfile, "key", attr->name); if (attr->num_values > 1) cupsFilePuts(outfile, "\n"); switch (attr->value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : for (i = 0; i < attr->num_values; i ++) cupsFilePrintf(outfile, "%d\n", attr->values[i].integer); break; case IPP_TAG_BOOLEAN : for (i = 0; i < attr->num_values; i ++) cupsFilePuts(outfile, attr->values[i].boolean ? "\n" : "\n"); break; case IPP_TAG_RANGE : for (i = 0; i < attr->num_values; i ++) cupsFilePrintf(outfile, "lower%d" "upper%d\n", attr->values[i].range.lower, attr->values[i].range.upper); break; case IPP_TAG_RESOLUTION : for (i = 0; i < attr->num_values; i ++) cupsFilePrintf(outfile, "xres%d" "yres%d" "units%s\n", attr->values[i].resolution.xres, attr->values[i].resolution.yres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); break; case IPP_TAG_DATE : for (i = 0; i < attr->num_values; i ++) cupsFilePrintf(outfile, "%s\n", iso_date(attr->values[i].date)); break; case IPP_TAG_STRING : for (i = 0; i < attr->num_values; i ++) { char buffer[IPP_MAX_LENGTH * 5 / 4 + 1]; /* Output buffer */ cupsFilePrintf(outfile, "%s\n", httpEncode64_2(buffer, sizeof(buffer), attr->values[i].unknown.data, attr->values[i].unknown.length)); } break; case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : for (i = 0; i < attr->num_values; i ++) print_xml_string(outfile, "string", attr->values[i].string.text); break; case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : for (i = 0; i < attr->num_values; i ++) { cupsFilePuts(outfile, "language"); print_xml_string(outfile, NULL, attr->values[i].string.language); cupsFilePuts(outfile, "string"); print_xml_string(outfile, NULL, attr->values[i].string.text); cupsFilePuts(outfile, "\n"); } break; case IPP_TAG_BEGIN_COLLECTION : for (i = 0; i < attr->num_values; i ++) { cupsFilePuts(outfile, "\n"); for (colattr = attr->values[i].collection->attrs; colattr; colattr = colattr->next) print_attr(outfile, format, colattr, NULL); cupsFilePuts(outfile, "\n"); } break; default : cupsFilePrintf(outfile, "<<%s>>\n", ippTagString(attr->value_tag)); break; } if (attr->num_values > 1) cupsFilePuts(outfile, "\n"); } else { char buffer[131072]; /* Value buffer */ if (format == _CUPS_OUTPUT_TEST) { if (!attr->name) { cupsFilePuts(outfile, " -- separator --\n"); return; } cupsFilePrintf(outfile, " %s (%s%s) = ", attr->name, attr->num_values > 1 ? "1setOf " : "", ippTagString(attr->value_tag)); } ippAttributeString(attr, buffer, sizeof(buffer)); cupsFilePrintf(outfile, "%s\n", buffer); } } /* * 'print_csv()' - Print a line of CSV text. */ static void print_csv( cups_file_t *outfile, /* I - Output file */ ipp_attribute_t *attr, /* I - First attribute for line */ int num_displayed, /* I - Number of attributes to display */ char **displayed, /* I - Attributes to display */ size_t *widths) /* I - Column widths */ { int i; /* Looping var */ size_t maxlength; /* Max length of all columns */ char *buffer, /* String buffer */ *bufptr; /* Pointer into buffer */ ipp_attribute_t *current; /* Current attribute */ /* * Get the maximum string length we have to show and allocate... */ for (i = 1, maxlength = widths[0]; i < num_displayed; i ++) if (widths[i] > maxlength) maxlength = widths[i]; maxlength += 2; if ((buffer = malloc(maxlength)) == NULL) return; /* * Loop through the attributes to display... */ if (attr) { for (i = 0; i < num_displayed; i ++) { if (i) cupsFilePutChar(outfile, ','); buffer[0] = '\0'; for (current = attr; current; current = current->next) { if (!current->name) break; else if (!strcmp(current->name, displayed[i])) { ippAttributeString(current, buffer, maxlength); break; } } if (strchr(buffer, ',') != NULL || strchr(buffer, '\"') != NULL || strchr(buffer, '\\') != NULL) { cupsFilePutChar(cupsFileStdout(), '\"'); for (bufptr = buffer; *bufptr; bufptr ++) { if (*bufptr == '\\' || *bufptr == '\"') cupsFilePutChar(cupsFileStdout(), '\\'); cupsFilePutChar(cupsFileStdout(), *bufptr); } cupsFilePutChar(cupsFileStdout(), '\"'); } else cupsFilePuts(outfile, buffer); } cupsFilePutChar(cupsFileStdout(), '\n'); } else { for (i = 0; i < num_displayed; i ++) { if (i) cupsFilePutChar(cupsFileStdout(), ','); cupsFilePuts(outfile, displayed[i]); } cupsFilePutChar(cupsFileStdout(), '\n'); } free(buffer); } /* * 'print_fatal_error()' - Print a fatal error message. */ static void print_fatal_error(cups_file_t *outfile, /* I - Output file */ const char *s, /* I - Printf-style format string */ ...) /* I - Additional arguments as needed */ { char buffer[10240]; /* Format buffer */ va_list ap; /* Pointer to arguments */ /* * Format the error message... */ va_start(ap, s); vsnprintf(buffer, sizeof(buffer), s, ap); va_end(ap); /* * Then output it... */ if (Output == _CUPS_OUTPUT_PLIST) { print_xml_header(outfile); print_xml_trailer(outfile, 0, buffer); } _cupsLangPrintf(stderr, "ipptool: %s", buffer); } /* * 'print_line()' - Print a line of formatted or CSV text. */ static void print_line( cups_file_t *outfile, /* I - Output file */ ipp_attribute_t *attr, /* I - First attribute for line */ int num_displayed, /* I - Number of attributes to display */ char **displayed, /* I - Attributes to display */ size_t *widths) /* I - Column widths */ { int i; /* Looping var */ size_t maxlength; /* Max length of all columns */ char *buffer; /* String buffer */ ipp_attribute_t *current; /* Current attribute */ /* * Get the maximum string length we have to show and allocate... */ for (i = 1, maxlength = widths[0]; i < num_displayed; i ++) if (widths[i] > maxlength) maxlength = widths[i]; maxlength += 2; if ((buffer = malloc(maxlength)) == NULL) return; /* * Loop through the attributes to display... */ if (attr) { for (i = 0; i < num_displayed; i ++) { if (i) cupsFilePutChar(cupsFileStdout(), ' '); buffer[0] = '\0'; for (current = attr; current; current = current->next) { if (!current->name) break; else if (!strcmp(current->name, displayed[i])) { ippAttributeString(current, buffer, maxlength); break; } } cupsFilePrintf(outfile, "%*s", (int)-widths[i], buffer); } cupsFilePutChar(cupsFileStdout(), '\n'); } else { for (i = 0; i < num_displayed; i ++) { if (i) cupsFilePutChar(cupsFileStdout(), ' '); cupsFilePrintf(outfile, "%*s", (int)-widths[i], displayed[i]); } cupsFilePutChar(cupsFileStdout(), '\n'); for (i = 0; i < num_displayed; i ++) { if (i) cupsFilePutChar(cupsFileStdout(), ' '); memset(buffer, '-', widths[i]); buffer[widths[i]] = '\0'; cupsFilePuts(outfile, buffer); } cupsFilePutChar(cupsFileStdout(), '\n'); } free(buffer); } /* * 'print_xml_header()' - Print a standard XML plist header. */ static void print_xml_header(cups_file_t *outfile) /* I - Output file */ { if (!XMLHeader) { cupsFilePuts(outfile, "\n"); cupsFilePuts(outfile, "\n"); cupsFilePuts(outfile, "\n"); cupsFilePuts(outfile, "\n"); cupsFilePuts(outfile, "ipptoolVersion\n"); cupsFilePuts(outfile, "" CUPS_SVERSION "\n"); cupsFilePuts(outfile, "Transfer\n"); cupsFilePrintf(outfile, "%s\n", Transfer == _CUPS_TRANSFER_AUTO ? "auto" : Transfer == _CUPS_TRANSFER_CHUNKED ? "chunked" : "length"); cupsFilePuts(outfile, "Tests\n"); cupsFilePuts(outfile, "\n"); XMLHeader = 1; } } /* * 'print_xml_string()' - Print an XML string with escaping. */ static void print_xml_string(cups_file_t *outfile, /* I - Output file */ const char *element, /* I - Element name or NULL */ const char *s) /* I - String to print */ { if (element) cupsFilePrintf(outfile, "<%s>", element); while (*s) { if (*s == '&') cupsFilePuts(outfile, "&"); else if (*s == '<') cupsFilePuts(outfile, "<"); else if (*s == '>') cupsFilePuts(outfile, ">"); else if ((*s & 0xe0) == 0xc0) { /* * Validate UTF-8 two-byte sequence... */ if ((s[1] & 0xc0) != 0x80) { cupsFilePutChar(outfile, '?'); s ++; } else { cupsFilePutChar(outfile, *s++); cupsFilePutChar(outfile, *s); } } else if ((*s & 0xf0) == 0xe0) { /* * Validate UTF-8 three-byte sequence... */ if ((s[1] & 0xc0) != 0x80 || (s[2] & 0xc0) != 0x80) { cupsFilePutChar(outfile, '?'); s += 2; } else { cupsFilePutChar(outfile, *s++); cupsFilePutChar(outfile, *s++); cupsFilePutChar(outfile, *s); } } else if ((*s & 0xf8) == 0xf0) { /* * Validate UTF-8 four-byte sequence... */ if ((s[1] & 0xc0) != 0x80 || (s[2] & 0xc0) != 0x80 || (s[3] & 0xc0) != 0x80) { cupsFilePutChar(outfile, '?'); s += 3; } else { cupsFilePutChar(outfile, *s++); cupsFilePutChar(outfile, *s++); cupsFilePutChar(outfile, *s++); cupsFilePutChar(outfile, *s); } } else if ((*s & 0x80) || (*s < ' ' && !isspace(*s & 255))) { /* * Invalid control character... */ cupsFilePutChar(outfile, '?'); } else cupsFilePutChar(outfile, *s); s ++; } if (element) cupsFilePrintf(outfile, "\n", element); } /* * 'print_xml_trailer()' - Print the XML trailer with success/fail value. */ static void print_xml_trailer(cups_file_t *outfile, /* I - Output file */ int success, /* I - 1 on success, 0 on failure */ const char *message) /* I - Error message or NULL */ { if (XMLHeader) { cupsFilePuts(outfile, "\n"); cupsFilePuts(outfile, "Successful\n"); cupsFilePuts(outfile, success ? "\n" : "\n"); if (message) { cupsFilePuts(outfile, "ErrorMessage\n"); print_xml_string(outfile, "string", message); } cupsFilePuts(outfile, "\n"); cupsFilePuts(outfile, "\n"); XMLHeader = 0; } } /* * 'set_variable()' - Set a variable value. */ static void set_variable(cups_file_t *outfile, /* I - Output file */ _cups_vars_t *vars, /* I - Variables */ const char *name, /* I - Variable name */ const char *value) /* I - Value string */ { _cups_var_t key, /* Search key */ *var; /* New variable */ if (!_cups_strcasecmp(name, "filename")) { if (vars->filename) free(vars->filename); vars->filename = strdup(value); return; } key.name = (char *)name; if ((var = cupsArrayFind(vars->vars, &key)) != NULL) { free(var->value); var->value = strdup(value); } else if ((var = malloc(sizeof(_cups_var_t))) == NULL) { print_fatal_error(outfile, "Unable to allocate memory for variable \"%s\".", name); exit(1); } else { var->name = strdup(name); var->value = strdup(value); cupsArrayAdd(vars->vars, var); } } #ifndef WIN32 /* * 'sigterm_handler()' - Handle SIGINT and SIGTERM. */ static void sigterm_handler(int sig) /* I - Signal number (unused) */ { (void)sig; Cancel = 1; signal(SIGINT, SIG_DFL); signal(SIGTERM, SIG_DFL); } #endif /* !WIN32 */ /* * 'timeout_cb()' - Handle HTTP timeouts. */ static int /* O - 1 to continue, 0 to cancel */ timeout_cb(http_t *http, /* I - Connection to server */ void *user_data) /* I - User data (unused) */ { int buffered = 0; /* Bytes buffered but not yet sent */ (void)user_data; /* * If the socket still have data waiting to be sent to the printer (as can * happen if the printer runs out of paper), continue to wait until the output * buffer is empty... */ #ifdef SO_NWRITE /* macOS and some versions of Linux */ socklen_t len = sizeof(buffered); /* Size of return value */ if (getsockopt(httpGetFd(http), SOL_SOCKET, SO_NWRITE, &buffered, &len)) buffered = 0; #elif defined(SIOCOUTQ) /* Others except Windows */ if (ioctl(httpGetFd(http), SIOCOUTQ, &buffered)) buffered = 0; #else /* Windows (not possible) */ (void)http; #endif /* SO_NWRITE */ return (buffered > 0); } /* * 'usage()' - Show program usage. */ static void usage(void) { _cupsLangPuts(stderr, _("Usage: ipptool [options] URI filename [ ... filenameN ]")); _cupsLangPuts(stderr, _("Options:")); _cupsLangPuts(stderr, _(" --help Show help.")); _cupsLangPuts(stderr, _(" --stop-after-include-error\n" " Stop tests after a failed INCLUDE.")); _cupsLangPuts(stderr, _(" --version Show version.")); _cupsLangPuts(stderr, _(" -4 Connect using IPv4.")); _cupsLangPuts(stderr, _(" -6 Connect using IPv6.")); _cupsLangPuts(stderr, _(" -C Send requests using " "chunking (default).")); _cupsLangPuts(stderr, _(" -E Test with encryption using HTTP Upgrade to TLS.")); _cupsLangPuts(stderr, _(" -I Ignore errors.")); _cupsLangPuts(stderr, _(" -L Send requests using content-length.")); _cupsLangPuts(stderr, _(" -P filename.plist Produce XML plist to a file and test report to standard output.")); _cupsLangPuts(stderr, _(" -S Test with encryption using HTTPS.")); _cupsLangPuts(stderr, _(" -T seconds Set the receive/send timeout in seconds.")); _cupsLangPuts(stderr, _(" -V version Set default IPP version.")); _cupsLangPuts(stderr, _(" -X Produce XML plist instead of plain text.")); _cupsLangPuts(stderr, _(" -c Produce CSV output.")); _cupsLangPuts(stderr, _(" -d name=value Set named variable to value.")); _cupsLangPuts(stderr, _(" -f filename Set default request filename.")); _cupsLangPuts(stderr, _(" -h Validate HTTP response headers.")); _cupsLangPuts(stderr, _(" -i seconds Repeat the last file with the given time interval.")); _cupsLangPuts(stderr, _(" -l Produce plain text output.")); _cupsLangPuts(stderr, _(" -n count Repeat the last file the given number of times.")); _cupsLangPuts(stderr, _(" -q Run silently.")); _cupsLangPuts(stderr, _(" -t Produce a test report.")); _cupsLangPuts(stderr, _(" -v Be verbose.")); exit(1); } /* * 'validate_attr()' - Determine whether an attribute is valid. */ static int /* O - 1 if valid, 0 otherwise */ validate_attr(cups_file_t *outfile, /* I - Output file */ cups_array_t *errors, /* I - Errors array */ ipp_attribute_t *attr) /* I - Attribute to validate */ { int i; /* Looping var */ char scheme[64], /* Scheme from URI */ userpass[256], /* Username/password from URI */ hostname[256], /* Hostname from URI */ resource[1024]; /* Resource from URI */ int port, /* Port number from URI */ uri_status, /* URI separation status */ valid = 1; /* Is the attribute valid? */ const char *ptr; /* Pointer into string */ ipp_attribute_t *colattr; /* Collection attribute */ regex_t re; /* Regular expression */ ipp_uchar_t *date; /* Current date value */ /* * Skip separators. */ if (!attr->name) return (1); /* * Validate the attribute name. */ for (ptr = attr->name; *ptr; ptr ++) if (!isalnum(*ptr & 255) && *ptr != '-' && *ptr != '.' && *ptr != '_') break; if (*ptr || ptr == attr->name) { valid = 0; add_stringf(errors, "\"%s\": Bad attribute name - invalid character " "(RFC 2911 section 4.1.3).", attr->name); } if ((ptr - attr->name) > 255) { valid = 0; add_stringf(errors, "\"%s\": Bad attribute name - bad length " "(RFC 2911 section 4.1.3).", attr->name); } switch (attr->value_tag) { case IPP_TAG_INTEGER : break; case IPP_TAG_BOOLEAN : for (i = 0; i < attr->num_values; i ++) { if (attr->values[i].boolean != 0 && attr->values[i].boolean != 1) { valid = 0; add_stringf(errors, "\"%s\": Bad boolen value %d " "(RFC 2911 section 4.1.11).", attr->name, attr->values[i].boolean); } } break; case IPP_TAG_ENUM : for (i = 0; i < attr->num_values; i ++) { if (attr->values[i].integer < 1) { valid = 0; add_stringf(errors, "\"%s\": Bad enum value %d - out of range " "(RFC 2911 section 4.1.4).", attr->name, attr->values[i].integer); } } break; case IPP_TAG_STRING : for (i = 0; i < attr->num_values; i ++) { if (attr->values[i].unknown.length > IPP_MAX_OCTETSTRING) { valid = 0; add_stringf(errors, "\"%s\": Bad octetString value - bad length %d " "(RFC 2911 section 4.1.10).", attr->name, attr->values[i].unknown.length); } } break; case IPP_TAG_DATE : for (i = 0; i < attr->num_values; i ++) { date = attr->values[i].date; if (date[2] < 1 || date[2] > 12) { valid = 0; add_stringf(errors, "\"%s\": Bad dateTime month %u " "(RFC 2911 section 4.1.14).", attr->name, date[2]); } if (date[3] < 1 || date[3] > 31) { valid = 0; add_stringf(errors, "\"%s\": Bad dateTime day %u " "(RFC 2911 section 4.1.14).", attr->name, date[3]); } if (date[4] > 23) { valid = 0; add_stringf(errors, "\"%s\": Bad dateTime hours %u " "(RFC 2911 section 4.1.14).", attr->name, date[4]); } if (date[5] > 59) { valid = 0; add_stringf(errors, "\"%s\": Bad dateTime minutes %u " "(RFC 2911 section 4.1.14).", attr->name, date[5]); } if (date[6] > 60) { valid = 0; add_stringf(errors, "\"%s\": Bad dateTime seconds %u " "(RFC 2911 section 4.1.14).", attr->name, date[6]); } if (date[7] > 9) { valid = 0; add_stringf(errors, "\"%s\": Bad dateTime deciseconds %u " "(RFC 2911 section 4.1.14).", attr->name, date[7]); } if (date[8] != '-' && date[8] != '+') { valid = 0; add_stringf(errors, "\"%s\": Bad dateTime UTC sign '%c' " "(RFC 2911 section 4.1.14).", attr->name, date[8]); } if (date[9] > 11) { valid = 0; add_stringf(errors, "\"%s\": Bad dateTime UTC hours %u " "(RFC 2911 section 4.1.14).", attr->name, date[9]); } if (date[10] > 59) { valid = 0; add_stringf(errors, "\"%s\": Bad dateTime UTC minutes %u " "(RFC 2911 section 4.1.14).", attr->name, date[10]); } } break; case IPP_TAG_RESOLUTION : for (i = 0; i < attr->num_values; i ++) { if (attr->values[i].resolution.xres <= 0) { valid = 0; add_stringf(errors, "\"%s\": Bad resolution value %dx%d%s - cross " "feed resolution must be positive " "(RFC 2911 section 4.1.15).", attr->name, attr->values[i].resolution.xres, attr->values[i].resolution.yres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : attr->values[i].resolution.units == IPP_RES_PER_CM ? "dpcm" : "unknown"); } if (attr->values[i].resolution.yres <= 0) { valid = 0; add_stringf(errors, "\"%s\": Bad resolution value %dx%d%s - feed " "resolution must be positive " "(RFC 2911 section 4.1.15).", attr->name, attr->values[i].resolution.xres, attr->values[i].resolution.yres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : attr->values[i].resolution.units == IPP_RES_PER_CM ? "dpcm" : "unknown"); } if (attr->values[i].resolution.units != IPP_RES_PER_INCH && attr->values[i].resolution.units != IPP_RES_PER_CM) { valid = 0; add_stringf(errors, "\"%s\": Bad resolution value %dx%d%s - bad " "units value (RFC 2911 section 4.1.15).", attr->name, attr->values[i].resolution.xres, attr->values[i].resolution.yres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : attr->values[i].resolution.units == IPP_RES_PER_CM ? "dpcm" : "unknown"); } } break; case IPP_TAG_RANGE : for (i = 0; i < attr->num_values; i ++) { if (attr->values[i].range.lower > attr->values[i].range.upper) { valid = 0; add_stringf(errors, "\"%s\": Bad rangeOfInteger value %d-%d - lower " "greater than upper (RFC 2911 section 4.1.13).", attr->name, attr->values[i].range.lower, attr->values[i].range.upper); } } break; case IPP_TAG_BEGIN_COLLECTION : for (i = 0; i < attr->num_values; i ++) { for (colattr = attr->values[i].collection->attrs; colattr; colattr = colattr->next) { if (!validate_attr(outfile, NULL, colattr)) { valid = 0; break; } } if (colattr && errors) { add_stringf(errors, "\"%s\": Bad collection value.", attr->name); while (colattr) { validate_attr(outfile, errors, colattr); colattr = colattr->next; } } } break; case IPP_TAG_TEXT : case IPP_TAG_TEXTLANG : for (i = 0; i < attr->num_values; i ++) { for (ptr = attr->values[i].string.text; *ptr; ptr ++) { if ((*ptr & 0xe0) == 0xc0) { ptr ++; if ((*ptr & 0xc0) != 0x80) break; } else if ((*ptr & 0xf0) == 0xe0) { ptr ++; if ((*ptr & 0xc0) != 0x80) break; ptr ++; if ((*ptr & 0xc0) != 0x80) break; } else if ((*ptr & 0xf8) == 0xf0) { ptr ++; if ((*ptr & 0xc0) != 0x80) break; ptr ++; if ((*ptr & 0xc0) != 0x80) break; ptr ++; if ((*ptr & 0xc0) != 0x80) break; } else if (*ptr & 0x80) break; } if (*ptr) { valid = 0; add_stringf(errors, "\"%s\": Bad text value \"%s\" - bad UTF-8 " "sequence (RFC 2911 section 4.1.1).", attr->name, attr->values[i].string.text); } if ((ptr - attr->values[i].string.text) > (IPP_MAX_TEXT - 1)) { valid = 0; add_stringf(errors, "\"%s\": Bad text value \"%s\" - bad length %d " "(RFC 2911 section 4.1.1).", attr->name, attr->values[i].string.text, (int)strlen(attr->values[i].string.text)); } } break; case IPP_TAG_NAME : case IPP_TAG_NAMELANG : for (i = 0; i < attr->num_values; i ++) { for (ptr = attr->values[i].string.text; *ptr; ptr ++) { if ((*ptr & 0xe0) == 0xc0) { ptr ++; if ((*ptr & 0xc0) != 0x80) break; } else if ((*ptr & 0xf0) == 0xe0) { ptr ++; if ((*ptr & 0xc0) != 0x80) break; ptr ++; if ((*ptr & 0xc0) != 0x80) break; } else if ((*ptr & 0xf8) == 0xf0) { ptr ++; if ((*ptr & 0xc0) != 0x80) break; ptr ++; if ((*ptr & 0xc0) != 0x80) break; ptr ++; if ((*ptr & 0xc0) != 0x80) break; } else if (*ptr & 0x80) break; } if (*ptr) { valid = 0; add_stringf(errors, "\"%s\": Bad name value \"%s\" - bad UTF-8 " "sequence (RFC 2911 section 4.1.2).", attr->name, attr->values[i].string.text); } if ((ptr - attr->values[i].string.text) > (IPP_MAX_NAME - 1)) { valid = 0; add_stringf(errors, "\"%s\": Bad name value \"%s\" - bad length %d " "(RFC 2911 section 4.1.2).", attr->name, attr->values[i].string.text, (int)strlen(attr->values[i].string.text)); } } break; case IPP_TAG_KEYWORD : for (i = 0; i < attr->num_values; i ++) { for (ptr = attr->values[i].string.text; *ptr; ptr ++) if (!isalnum(*ptr & 255) && *ptr != '-' && *ptr != '.' && *ptr != '_') break; if (*ptr || ptr == attr->values[i].string.text) { valid = 0; add_stringf(errors, "\"%s\": Bad keyword value \"%s\" - invalid " "character (RFC 2911 section 4.1.3).", attr->name, attr->values[i].string.text); } if ((ptr - attr->values[i].string.text) > (IPP_MAX_KEYWORD - 1)) { valid = 0; add_stringf(errors, "\"%s\": Bad keyword value \"%s\" - bad " "length %d (RFC 2911 section 4.1.3).", attr->name, attr->values[i].string.text, (int)strlen(attr->values[i].string.text)); } } break; case IPP_TAG_URI : for (i = 0; i < attr->num_values; i ++) { uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, attr->values[i].string.text, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if (uri_status < HTTP_URI_OK) { valid = 0; add_stringf(errors, "\"%s\": Bad URI value \"%s\" - %s " "(RFC 2911 section 4.1.5).", attr->name, attr->values[i].string.text, httpURIStatusString(uri_status)); } if (strlen(attr->values[i].string.text) > (IPP_MAX_URI - 1)) { valid = 0; add_stringf(errors, "\"%s\": Bad URI value \"%s\" - bad length %d " "(RFC 2911 section 4.1.5).", attr->name, attr->values[i].string.text, (int)strlen(attr->values[i].string.text)); } } break; case IPP_TAG_URISCHEME : for (i = 0; i < attr->num_values; i ++) { ptr = attr->values[i].string.text; if (islower(*ptr & 255)) { for (ptr ++; *ptr; ptr ++) if (!islower(*ptr & 255) && !isdigit(*ptr & 255) && *ptr != '+' && *ptr != '-' && *ptr != '.') break; } if (*ptr || ptr == attr->values[i].string.text) { valid = 0; add_stringf(errors, "\"%s\": Bad uriScheme value \"%s\" - bad " "characters (RFC 2911 section 4.1.6).", attr->name, attr->values[i].string.text); } if ((ptr - attr->values[i].string.text) > (IPP_MAX_URISCHEME - 1)) { valid = 0; add_stringf(errors, "\"%s\": Bad uriScheme value \"%s\" - bad " "length %d (RFC 2911 section 4.1.6).", attr->name, attr->values[i].string.text, (int)strlen(attr->values[i].string.text)); } } break; case IPP_TAG_CHARSET : for (i = 0; i < attr->num_values; i ++) { for (ptr = attr->values[i].string.text; *ptr; ptr ++) if (!isprint(*ptr & 255) || isupper(*ptr & 255) || isspace(*ptr & 255)) break; if (*ptr || ptr == attr->values[i].string.text) { valid = 0; add_stringf(errors, "\"%s\": Bad charset value \"%s\" - bad " "characters (RFC 2911 section 4.1.7).", attr->name, attr->values[i].string.text); } if ((ptr - attr->values[i].string.text) > (IPP_MAX_CHARSET - 1)) { valid = 0; add_stringf(errors, "\"%s\": Bad charset value \"%s\" - bad " "length %d (RFC 2911 section 4.1.7).", attr->name, attr->values[i].string.text, (int)strlen(attr->values[i].string.text)); } } break; case IPP_TAG_LANGUAGE : /* * The following regular expression is derived from the ABNF for * language tags in RFC 4646. All I can say is that this is the * easiest way to check the values... */ if ((i = regcomp(&re, "^(" "(([a-z]{2,3}(-[a-z][a-z][a-z]){0,3})|[a-z]{4,8})" /* language */ "(-[a-z][a-z][a-z][a-z]){0,1}" /* script */ "(-([a-z][a-z]|[0-9][0-9][0-9])){0,1}" /* region */ "(-([a-z]{5,8}|[0-9][0-9][0-9]))*" /* variant */ "(-[a-wy-z](-[a-z0-9]{2,8})+)*" /* extension */ "(-x(-[a-z0-9]{1,8})+)*" /* privateuse */ "|" "x(-[a-z0-9]{1,8})+" /* privateuse */ "|" "[a-z]{1,3}(-[a-z][0-9]{2,8}){1,2}" /* grandfathered */ ")$", REG_NOSUB | REG_EXTENDED)) != 0) { char temp[256]; /* Temporary error string */ regerror(i, &re, temp, sizeof(temp)); print_fatal_error(outfile, "Unable to compile naturalLanguage regular " "expression: %s.", temp); break; } for (i = 0; i < attr->num_values; i ++) { if (regexec(&re, attr->values[i].string.text, 0, NULL, 0)) { valid = 0; add_stringf(errors, "\"%s\": Bad naturalLanguage value \"%s\" - bad " "characters (RFC 2911 section 4.1.8).", attr->name, attr->values[i].string.text); } if (strlen(attr->values[i].string.text) > (IPP_MAX_LANGUAGE - 1)) { valid = 0; add_stringf(errors, "\"%s\": Bad naturalLanguage value \"%s\" - bad " "length %d (RFC 2911 section 4.1.8).", attr->name, attr->values[i].string.text, (int)strlen(attr->values[i].string.text)); } } regfree(&re); break; case IPP_TAG_MIMETYPE : /* * The following regular expression is derived from the ABNF for * language tags in RFC 2045 and 4288. All I can say is that this is * the easiest way to check the values... */ if ((i = regcomp(&re, "^" "[-a-zA-Z0-9!#$&.+^_]{1,127}" /* type-name */ "/" "[-a-zA-Z0-9!#$&.+^_]{1,127}" /* subtype-name */ "(;[-a-zA-Z0-9!#$&.+^_]{1,127}=" /* parameter= */ "([-a-zA-Z0-9!#$&.+^_]{1,127}|\"[^\"]*\"))*" /* value */ "$", REG_NOSUB | REG_EXTENDED)) != 0) { char temp[256]; /* Temporary error string */ regerror(i, &re, temp, sizeof(temp)); print_fatal_error(outfile, "Unable to compile mimeMediaType regular " "expression: %s.", temp); break; } for (i = 0; i < attr->num_values; i ++) { if (regexec(&re, attr->values[i].string.text, 0, NULL, 0)) { valid = 0; add_stringf(errors, "\"%s\": Bad mimeMediaType value \"%s\" - bad " "characters (RFC 2911 section 4.1.9).", attr->name, attr->values[i].string.text); } if (strlen(attr->values[i].string.text) > (IPP_MAX_MIMETYPE - 1)) { valid = 0; add_stringf(errors, "\"%s\": Bad mimeMediaType value \"%s\" - bad " "length %d (RFC 2911 section 4.1.9).", attr->name, attr->values[i].string.text, (int)strlen(attr->values[i].string.text)); } } regfree(&re); break; default : break; } return (valid); } /* * 'with_flags_string()' - Return the "WITH-xxx" predicate that corresponds to the flags. */ static const char * /* O - WITH-xxx string */ with_flags_string(int flags) /* I - WITH flags */ { if (flags & _CUPS_WITH_ALL) { if (flags & _CUPS_WITH_HOSTNAME) return ("WITH-ALL-HOSTNAMES"); else if (flags & _CUPS_WITH_RESOURCE) return ("WITH-ALL-RESOURCES"); else if (flags & _CUPS_WITH_SCHEME) return ("WITH-ALL-SCHEMES"); else return ("WITH-ALL-VALUES"); } else if (flags & _CUPS_WITH_HOSTNAME) return ("WITH-HOSTNAME"); else if (flags & _CUPS_WITH_RESOURCE) return ("WITH-RESOURCE"); else if (flags & _CUPS_WITH_SCHEME) return ("WITH-SCHEME"); else return ("WITH-VALUE"); } /* * 'with_value()' - Test a WITH-VALUE predicate. */ static int /* O - 1 on match, 0 on non-match */ with_value(cups_file_t *outfile, /* I - Output file */ cups_array_t *errors, /* I - Errors array */ char *value, /* I - Value string */ int flags, /* I - Flags for match */ ipp_attribute_t *attr, /* I - Attribute to compare */ char *matchbuf, /* I - Buffer to hold matching value */ size_t matchlen) /* I - Length of match buffer */ { int i, /* Looping var */ match; /* Match? */ char temp[1024], /* Temporary value string */ *valptr; /* Pointer into value */ *matchbuf = '\0'; match = (flags & _CUPS_WITH_ALL) ? 1 : 0; /* * NULL matches everything. */ if (!value || !*value) return (1); /* * Compare the value string to the attribute value. */ switch (attr->value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : for (i = 0; i < attr->num_values; i ++) { char op, /* Comparison operator */ *nextptr; /* Next pointer */ int intvalue, /* Integer value */ valmatch = 0; /* Does the current value match? */ valptr = value; while (isspace(*valptr & 255) || isdigit(*valptr & 255) || *valptr == '-' || *valptr == ',' || *valptr == '<' || *valptr == '=' || *valptr == '>') { op = '='; while (*valptr && !isdigit(*valptr & 255) && *valptr != '-') { if (*valptr == '<' || *valptr == '>' || *valptr == '=') op = *valptr; valptr ++; } if (!*valptr) break; intvalue = (int)strtol(valptr, &nextptr, 0); if (nextptr == valptr) break; valptr = nextptr; if ((op == '=' && attr->values[i].integer == intvalue) || (op == '<' && attr->values[i].integer < intvalue) || (op == '>' && attr->values[i].integer > intvalue)) { if (!matchbuf[0]) snprintf(matchbuf, matchlen, "%d", attr->values[i].integer); valmatch = 1; break; } } if (flags & _CUPS_WITH_ALL) { if (!valmatch) { match = 0; break; } } else if (valmatch) { match = 1; break; } } if (!match && errors) { for (i = 0; i < attr->num_values; i ++) add_stringf(errors, "GOT: %s=%d", attr->name, attr->values[i].integer); } break; case IPP_TAG_RANGE : for (i = 0; i < attr->num_values; i ++) { char op, /* Comparison operator */ *nextptr; /* Next pointer */ int intvalue, /* Integer value */ valmatch = 0; /* Does the current value match? */ valptr = value; while (isspace(*valptr & 255) || isdigit(*valptr & 255) || *valptr == '-' || *valptr == ',' || *valptr == '<' || *valptr == '=' || *valptr == '>') { op = '='; while (*valptr && !isdigit(*valptr & 255) && *valptr != '-') { if (*valptr == '<' || *valptr == '>' || *valptr == '=') op = *valptr; valptr ++; } if (!*valptr) break; intvalue = (int)strtol(valptr, &nextptr, 0); if (nextptr == valptr) break; valptr = nextptr; if ((op == '=' && (attr->values[i].range.lower == intvalue || attr->values[i].range.upper == intvalue)) || (op == '<' && attr->values[i].range.upper < intvalue) || (op == '>' && attr->values[i].range.upper > intvalue)) { if (!matchbuf[0]) snprintf(matchbuf, matchlen, "%d-%d", attr->values[0].range.lower, attr->values[0].range.upper); valmatch = 1; break; } } if (flags & _CUPS_WITH_ALL) { if (!valmatch) { match = 0; break; } } else if (valmatch) { match = 1; break; } } if (!match && errors) { for (i = 0; i < attr->num_values; i ++) add_stringf(errors, "GOT: %s=%d-%d", attr->name, attr->values[i].range.lower, attr->values[i].range.upper); } break; case IPP_TAG_BOOLEAN : for (i = 0; i < attr->num_values; i ++) { if ((!strcmp(value, "true")) == attr->values[i].boolean) { if (!matchbuf[0]) strlcpy(matchbuf, value, matchlen); if (!(flags & _CUPS_WITH_ALL)) { match = 1; break; } } else if (flags & _CUPS_WITH_ALL) { match = 0; break; } } if (!match && errors) { for (i = 0; i < attr->num_values; i ++) add_stringf(errors, "GOT: %s=%s", attr->name, attr->values[i].boolean ? "true" : "false"); } break; case IPP_TAG_RESOLUTION : for (i = 0; i < attr->num_values; i ++) { if (attr->values[i].resolution.xres == attr->values[i].resolution.yres) snprintf(temp, sizeof(temp), "%d%s", attr->values[i].resolution.xres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); else snprintf(temp, sizeof(temp), "%dx%d%s", attr->values[i].resolution.xres, attr->values[i].resolution.yres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); if (!strcmp(value, temp)) { if (!matchbuf[0]) strlcpy(matchbuf, value, matchlen); if (!(flags & _CUPS_WITH_ALL)) { match = 1; break; } } else if (flags & _CUPS_WITH_ALL) { match = 0; break; } } if (!match && errors) { for (i = 0; i < attr->num_values; i ++) { if (attr->values[i].resolution.xres == attr->values[i].resolution.yres) snprintf(temp, sizeof(temp), "%d%s", attr->values[i].resolution.xres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); else snprintf(temp, sizeof(temp), "%dx%d%s", attr->values[i].resolution.xres, attr->values[i].resolution.yres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); if (strcmp(value, temp)) add_stringf(errors, "GOT: %s=%s", attr->name, temp); } } break; case IPP_TAG_NOVALUE : case IPP_TAG_UNKNOWN : return (1); case IPP_TAG_CHARSET : case IPP_TAG_KEYWORD : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : case IPP_TAG_NAME : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_TEXTLANG : case IPP_TAG_URI : case IPP_TAG_URISCHEME : if (flags & _CUPS_WITH_REGEX) { /* * Value is an extended, case-sensitive POSIX regular expression... */ regex_t re; /* Regular expression */ if ((i = regcomp(&re, value, REG_EXTENDED | REG_NOSUB)) != 0) { regerror(i, &re, temp, sizeof(temp)); print_fatal_error(outfile, "Unable to compile WITH-VALUE regular expression " "\"%s\" - %s", value, temp); return (0); } /* * See if ALL of the values match the given regular expression. */ for (i = 0; i < attr->num_values; i ++) { if (!regexec(&re, get_string(attr, i, flags, temp, sizeof(temp)), 0, NULL, 0)) { if (!matchbuf[0]) strlcpy(matchbuf, get_string(attr, i, flags, temp, sizeof(temp)), matchlen); if (!(flags & _CUPS_WITH_ALL)) { match = 1; break; } } else if (flags & _CUPS_WITH_ALL) { match = 0; break; } } regfree(&re); } else if (ippGetValueTag(attr) == IPP_TAG_URI && !(flags & (_CUPS_WITH_SCHEME | _CUPS_WITH_HOSTNAME | _CUPS_WITH_RESOURCE))) { /* * Value is a literal URI string, see if the value(s) match... */ for (i = 0; i < attr->num_values; i ++) { if (!compare_uris(value, get_string(attr, i, flags, temp, sizeof(temp)))) { if (!matchbuf[0]) strlcpy(matchbuf, get_string(attr, i, flags, temp, sizeof(temp)), matchlen); if (!(flags & _CUPS_WITH_ALL)) { match = 1; break; } } else if (flags & _CUPS_WITH_ALL) { match = 0; break; } } } else { /* * Value is a literal string, see if the value(s) match... */ for (i = 0; i < attr->num_values; i ++) { int result; switch (ippGetValueTag(attr)) { case IPP_TAG_URI : /* * Some URI components are case-sensitive, some not... */ if (flags & (_CUPS_WITH_SCHEME | _CUPS_WITH_HOSTNAME)) result = _cups_strcasecmp(value, get_string(attr, i, flags, temp, sizeof(temp))); else result = strcmp(value, get_string(attr, i, flags, temp, sizeof(temp))); break; case IPP_TAG_MIMETYPE : case IPP_TAG_NAME : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_TEXTLANG : /* * mimeMediaType, nameWithoutLanguage, nameWithLanguage, * textWithoutLanguage, and textWithLanguage are defined to * be case-insensitive strings... */ result = _cups_strcasecmp(value, get_string(attr, i, flags, temp, sizeof(temp))); break; default : /* * Other string syntaxes are defined as lowercased so we use * case-sensitive comparisons to catch problems... */ result = strcmp(value, get_string(attr, i, flags, temp, sizeof(temp))); break; } if (!result) { if (!matchbuf[0]) strlcpy(matchbuf, get_string(attr, i, flags, temp, sizeof(temp)), matchlen); if (!(flags & _CUPS_WITH_ALL)) { match = 1; break; } } else if (flags & _CUPS_WITH_ALL) { match = 0; break; } } } if (!match && errors) { for (i = 0; i < attr->num_values; i ++) add_stringf(errors, "GOT: %s=\"%s\"", attr->name, attr->values[i].string.text); } break; default : break; } return (match); } /* * 'with_value_from()' - Test a WITH-VALUE-FROM predicate. */ static int /* O - 1 on match, 0 on non-match */ with_value_from( cups_array_t *errors, /* I - Errors array */ ipp_attribute_t *fromattr, /* I - "From" attribute */ ipp_attribute_t *attr, /* I - Attribute to compare */ char *matchbuf, /* I - Buffer to hold matching value */ size_t matchlen) /* I - Length of match buffer */ { int i, j, /* Looping vars */ count = ippGetCount(attr), /* Number of attribute values */ match = 1; /* Match? */ *matchbuf = '\0'; /* * Compare the from value(s) to the attribute value(s)... */ switch (ippGetValueTag(attr)) { case IPP_TAG_INTEGER : if (ippGetValueTag(fromattr) != IPP_TAG_INTEGER && ippGetValueTag(fromattr) != IPP_TAG_RANGE) goto wrong_value_tag; for (i = 0; i < count; i ++) { int value = ippGetInteger(attr, i); /* Current integer value */ if (ippContainsInteger(fromattr, value)) { if (!matchbuf[0]) snprintf(matchbuf, matchlen, "%d", value); } else { add_stringf(errors, "GOT: %s=%d", ippGetName(attr), value); match = 0; } } break; case IPP_TAG_ENUM : if (ippGetValueTag(fromattr) != IPP_TAG_ENUM) goto wrong_value_tag; for (i = 0; i < count; i ++) { int value = ippGetInteger(attr, i); /* Current integer value */ if (ippContainsInteger(fromattr, value)) { if (!matchbuf[0]) snprintf(matchbuf, matchlen, "%d", value); } else { add_stringf(errors, "GOT: %s=%d", ippGetName(attr), value); match = 0; } } break; case IPP_TAG_RESOLUTION : if (ippGetValueTag(fromattr) != IPP_TAG_RESOLUTION) goto wrong_value_tag; for (i = 0; i < count; i ++) { int xres, yres; ipp_res_t units; int fromcount = ippGetCount(fromattr); int fromxres, fromyres; ipp_res_t fromunits; xres = ippGetResolution(attr, i, &yres, &units); for (j = 0; j < fromcount; j ++) { fromxres = ippGetResolution(fromattr, j, &fromyres, &fromunits); if (fromxres == xres && fromyres == yres && fromunits == units) break; } if (j < fromcount) { if (!matchbuf[0]) { if (xres == yres) snprintf(matchbuf, matchlen, "%d%s", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); else snprintf(matchbuf, matchlen, "%dx%d%s", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); } } else { if (xres == yres) add_stringf(errors, "GOT: %s=%d%s", ippGetName(attr), xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); else add_stringf(errors, "GOT: %s=%dx%d%s", ippGetName(attr), xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); match = 0; } } break; case IPP_TAG_NOVALUE : case IPP_TAG_UNKNOWN : return (1); case IPP_TAG_CHARSET : case IPP_TAG_KEYWORD : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : case IPP_TAG_NAME : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_TEXTLANG : case IPP_TAG_URISCHEME : for (i = 0; i < count; i ++) { const char *value = ippGetString(attr, i, NULL); /* Current string value */ if (ippContainsString(fromattr, value)) { if (!matchbuf[0]) strlcpy(matchbuf, value, matchlen); } else { add_stringf(errors, "GOT: %s='%s'", ippGetName(attr), value); match = 0; } } break; case IPP_TAG_URI : for (i = 0; i < count; i ++) { const char *value = ippGetString(attr, i, NULL); /* Current string value */ int fromcount = ippGetCount(fromattr); for (j = 0; j < fromcount; j ++) { if (!compare_uris(value, ippGetString(fromattr, j, NULL))) { if (!matchbuf[0]) strlcpy(matchbuf, value, matchlen); break; } } if (j >= fromcount) { add_stringf(errors, "GOT: %s='%s'", ippGetName(attr), value); match = 0; } } break; default : match = 0; break; } return (match); /* value tag mismatch between fromattr and attr */ wrong_value_tag : add_stringf(errors, "GOT: %s OF-TYPE %s", ippGetName(attr), ippTagString(ippGetValueTag(attr))); return (0); } cups-2.2.7/test/make-ippeverywhere-print-tests.sh000775 000765 000024 00000005045 13255074424 022600 0ustar00msweetstaff000000 000000 #!/bin/sh # # Script that builds the print-job tests for all IPP Everywhere PWG Raster # documents. # for file in color.jpg-4x6 document-a4 document-letter gray.jpg-4x6 onepage-a4 onepage-letter; do for res in 150dpi 180dpi 300dpi 360dpi 600dpi 720dpi; do HAVE_RES="`echo HAVE_$res | awk '{print toupper($1);}'`" for type in black-1 cmyk-8 sgray-8 srgb-8 srgb-16; do if test -f pwg-raster-samples-$res-20111130/$type/$file-$type-$res.pwg; then HAVE_TYPE="`echo HAVE_$type | awk '{print toupper($1);}' | tr '-' '_'`" cat <Dependencies # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: echo Installing sample ipptool files in $(DATADIR)/ipptool... $(INSTALL_DIR) -m 755 $(DATADIR)/ipptool for file in $(DATAFILES); do \ $(INSTALL_COMPDATA) $$file $(DATADIR)/ipptool; \ done for file in $(TESTFILES); do \ $(INSTALL_DATA) $$file $(DATADIR)/ipptool; \ done # # Install programs... # install-exec: echo Installing ipptool in $(BINDIR)... $(INSTALL_DIR) -m 755 $(BINDIR) $(INSTALL_BIN) ipptool $(BINDIR) if test -x ippfind; then \ $(INSTALL_BIN) ippfind $(BINDIR); \ fi if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ cp ippfind $(SYMROOT); \ dsymutil $(SYMROOT)/ippfind; \ cp ipptool $(SYMROOT); \ dsymutil $(SYMROOT)/ipptool; \ fi # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Unnstall all targets... # uninstall: echo Uninstalling sample ipptool files from $(DATADIR)/ipptool... for file in $(DATAFILES); do \ $(RM) $(DATADIR)/ipptool/$$file; \ done for file in $(TESTFILES); do \ $(RM) $(DATADIR)/ipptool/$$file; \ done -$(RMDIR) $(DATADIR)/ipptool # # Local programs (not built when cross-compiling...) # local: ippserver ippserver-shared ipptool-static # # ippfind # ippfind: ippfind.o ../cups/$(LIBCUPS) ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ ippfind.o $(LIBS) echo Linking $@-static... $(LD_CC) $(LDFLAGS) -o $@-static ippfind.o ../cups/$(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # ippserver # ippserver: ippserver.o ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ ippserver.o ../cups/$(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # ippserver-shared # ippserver-shared: ippserver.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ ippserver.o $(LIBS) # # ipptool # ipptool: ipptool.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ ipptool.o $(LIBS) # # ipptool-static # ipptool-static: ipptool.o ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ ipptool.o ../cups/$(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # Dependencies... # include Dependencies cups-2.2.7/test/onepage-a4-300-black-1.pwg.gz000664 000765 000024 00000452372 13255074424 020735 0ustar00msweetstaff000000 000000 ‹xzRonepage-a4-300-black-1.pwgìýÿ$éy'ˆ½‘Ñ91$''†¤HQ«Î .)Q%ÝJ‚n—öUVhOk`/pº[œVÚ-tz^Ü­áó>ž2+£P´!æ0w~1àŸgkhĨmðzïl¢“Gi•#ædDq8왞é®ªÈªøâçóyވ̬®î!¥õÚ0–àtUE¼ïû¼ñÉ|ã}Þçý¼Ÿç?þGï·ÿÿðŸýÇÿè¿üßÿãÿùÿÎÿ~ÿóþÉÿÖüÿÚÿœ_×ÿÌçä¿_2¦ó·q¿ö¢ Ïÿ»ó÷¤îÿ|óö§þkczÿ÷µ²òŸó7íßîOÑþóú ÿ}áKÆ|ý7MçÿüëÆý¿þM]׿ßþïßþïßþïßþïÿOÿ÷OþË:üG¿3üíßúÍ×ûü·þ‹ÿâg­ÿš˜‰ùwùû¦óùy ;u§Ž?m*ù×3&ìÔ_0•[§7ä¥wÌÚd¯ãujOXÇ—:ùÕ:&ý9ÖryM«}Ú˜ÿeG«æ2­¼ò÷Y=p’baœ„ÕT:‰™Iu/™Ju7AõÄL?ej'fýÄ,¤þM­?ì$å3Õç×V÷XÝMLôËÆÌYÝ­Ëèj×+T®sÿÚ®Ke?eeyì_’ŽRû?‘™GêÇõÝZjû¬í¯Õ›Ú™ÔöÚÚ¥Ô.Y»Dí[šèó¦ê•¨ß/Q¿dýõ»r;—úýµúéÕúñçQ³X¯ÿ2î¯70° H‡¤Íî³ Faóh nž Bm ˜ü:»ÚBÊ*iarm Õª…K/‰ÝdÚ³Þe07AÂ$ ©?LbùÞ%Sýp;(¹ÉBês­ï'‘“ÌÖë{«úNb6ë—R_®®ê×~íÈ;ïÙþ_†…|'²Ï3qjé®ãÔl¢Î>mŸàÒ«#Ö«G¸® ç…M\ ‰ Ž¾ºj£WJã\Šu‹Ž|™c.ä35N¹æ| -–™éâC”/¬üÓ-»ÆŒùºÀ‰’Ÿ°PJ-ù¤åÒE—u¥øY·ŒLOþã_RïS¦Ç,$¸òU†åÁZ7ÎǹXîç”9+‹>þ”&2ås)=”òK.ý‘;ýRÞ eyŠâ¦»Þ•þ-¤¬éã²³êL¯”§Ìej¹éNyXf]”>—ÖL¯¯.*ÿôêØ¸öð† òIâ%•¹üi&øš †b«ÎLG>‡Ë Îk¼ÁŒ`YÖç5:嵟€ƒ¯¤ïˆઃïpdd ›Ð©‰eý$7an‚©ïÖ…´çHsËÜøEXg.Zf¯äå €èÕÒ©« V.ßb·¤Lµê—Ó©—øÆuŒ¯B~Ý—ßùælû%MTÆ•~EWû%ߢ*ÂCgEÓ¯¤–±Y ¯‚­/ä}³Ö±dŽŽ%qðC'©fÆï$ÅLþt:‰‹/¾ôJ^d›a²ñ'ÃD‹Ô¸#…L¼‹QW&S#5jéT"ψ¡ä˜%ÆË¦ªXúŸ,&˜iÓM iLº™” ã¿ë$õíÎþ@_4ò«|%:ÕAŸÛ'iÜÈ÷ùBÆ­“L=˜’öe¡¯×ô‰¼kz$7ª)š½°ê&ÕsEçßè ¡Bg¤‘N]xéøà8©Igtûòa¤ò‚¯cù ,ÜúP®˜2\ÖèŽ|å¤o×™ýÔ–øÔ\6UÉgÕ©/"ýÌ^ªÑùxñOµú´ð™_רLµ/®ö%c_ícÛ—ÉqÓö÷º¾øMÃñª/AÓóõ¾8ò25ýRªŒ;eÁßë”싼†dÈË=ô¥¬QŠ}á𕾌KôEÞRã"í—ûenGþ²«¯ ^ÓðE¬#ÿ¥²ŽÐbÜ“¹i5æÑ• v¥LÇR£è–|-I›YÇ|$]‘ýR^‹òÿAJ¾¥Xľ”Gèˉô…Uú…iûò¯l_úRFZFEû*ä½Ô/#¶ÕC³M‡à(<਎ÂÊÈ+¤Îù—©¥7˜ô²T>©:“—‚Lû¡¾çÏä¨áâ3:–ψ‚ÂLrøS|Bò›´:A«â0ÙŽ™Õƒ-‡ J=ÎÒ•I§~©í@êä†=㓦'ú‡¼:äÿ¹žøW{Â2Ò“0ÝèI(†ÐG§íIæâ©"6$­ø«žÈ`{cD'&Xœ F4fð™ô$p“,vgf8•*sò¿¢'‰‘_ÝdCúXj±‚4ð%Ã)úOuŠŽåŠ4ŒV§: å%S|±!™ö¥¡@8Œpí‰ÔYÈO±€¿f«žDÒq#ðáœáÃAqÎ<ÕÆ§#‚WïK£ßlf‚>¶|:hIõì§ó÷e†{¯w#Ä_R?`7àåvÌ‰ÇžÈ Ølz¢5¤'¹\e yŸ´ß1O®ô¤c~²êI,=aK=Áäÿ€c·™¾Ä1ä¤/y‰ÈO§<Ízðp/¤“g2Ä1ÊQCú"WYCÃjcý‰Çr½+c}±ãN±ƒ´ÔÃKË l_d@?*ží‹ö}ÐMÏ)/loà1kgúèÓ¼á¤J]H¹¢¸Ò™Lþ݇ç}²Ù·Ì×ûò‡æã ¦÷P(Þö’O¦°Ÿ¼Þ1ù_d~…ÏHgûºÔ²úÚ—u!Ó Ö1Í$_ ùF¸ò¡öŠÙFäÖy. 6ŸôÃ}q?~©¯ôb‚^L²g{‘®÷"f/?¹d&s}yøÀð+¹\—˾‹©Ï•¢¬à0®‡â(DòzCÎò²œrì>±~ Q79Ä•“fì²YFä3iÎ[ ]qŒòõñ‚^ø?M/Ä;*g©^ü'ê5>Ä{ÿúODî»X4×ËÉÆ'rC\ ùPÚOCfYùî”ù³ÇOñ¥hº¬u#}¶gAMì¤íE|¥>œÔU/¼¶©ö"|Q/dü˜ûk6m^],Fä]:(Í8ë•úâ¸!ü†øc·¼a ¾2\Žù²X RùoõÆ8–AÊQݼ1:f¹6J¯ïÂøJŠg»®uᆹìÛ$vÔtÀŒÌ'v øñú"Ó9e‚àcx*/c| ‚Ÿ¼ÈÙñù1,,pjý |>§sI&Ùægf¹ñ!ü$À‚·}Eˆs`]ŽÜ|ÃÕÜTw½/hËö¥z]×]·œ(Ìlrùš.éJ+DÇä÷ÔvJÆBå×RþAG4µÖ£vH^D€¥E5.ãWd,#rϘ|=–¹˜A\™ôž¥ý._4råS6(_÷J¼òÏðª‡Ð©´÷ŸáÒ—Xibþ†1ÿ+ƒ…Iæ_0—whì墯ZWÙ·æj"ÓÖì 6¼¾~5±W½ÕU¼I3¶€¾½Š­Š/h¸¾¹„—/:ئX¿˜êʼnùM^Ââ%Æ%,3›‹ \}Ѭ_ò1²¾(.´|{çÍE„ ?Ï}!3m."pšÿ¼˜òâ?ÆGI>Aiî·ÌØÝ¬ÏŠõÏb§çs†_A›'núïIé}|þnÚ•¦k'Û÷È‘—zö*ÊÞ˜‘ƒ_<¹—_2E .söKJÑ_gãi¼»Þx夯¼jÌ7¥s© ƒo¼bª>-9°ÔÿŒØÈ¶ #ÅÖVW¾æOíuÅ^áä}óÍ/š¢/ßô¬kÊW¤Ê‹MÞ“ÙaDl¾~­Mç›7¯ÚÌ`3V›77l>ƒaå¦;=üúE`(FóW®B*Fw\ ‰7 ŠÑo¬ ÐBáÇÆ“ZåζÿŸ6š^g4hŒÂus¦0oÁèFc1:£Ñ)ŒÆÑé–ËÀ§¼/§Ñ-1ºÛh¡±êK­rKªHå]kôk½ÏH½«Öê úlk#~® ³nÃlÉ‹kÍHøµI1ò ŽÖˆ,Åì.ÆsÑ3DÏËÔÈŽYÿÌ~&#é'qe¦Žž52À[¯Mñ·+Ϭr 8GÑ S ")pâäâ“ÉS˜,ñRìiavÙFU¼ÝǰVŽÅŽ«ö¤zÑÍLñlfIÝusÛ4 Tã>ÜAdÿ–—Ž)™\.äªø|°2C³¶ˆ´?6ÝCi÷D{ý¨—šm1ëL£éÆØqËåj÷Ý1|¨^ŒÚc™-Ò®4v*÷#ÝÜlKO¶û‘`:ºÁ'ù…–§—2t¿W`¡šuã%Ü>ùÙMGˆ3šU<2âÔ"Rî<„ã˜;G˜†žŽK³Ï6b0Ü5Gý‹ÓÞ·Å“ärVjÉâ¶”ÅíÒž2?ÁÎ\ùî~¶-mI%VuÞ/eލ/Äö@žô 1é›þþûhIŒ=³—R0ë½bÉ{tÊ}>ód$wâž4„ˆ™t®/Ÿ±ÉðTï³z.Ýî æ?’®Åó@žù(ÛKœl„‡ås|I¿“™/Ä9ñdÝãÔtå{æÔOSDÕc/Ô'˜æ? 1õÉ ÞEèînᾇ¹Þ›Y/ï#„žµ|Ø!2©L?¤ÝHV R/¬\lßfƒØŠ©S1÷d? Å‘%ŠTÎqSJ©ú'XŠŠ›‘íÀ)ÊKù50Áîzp?¤6:›EÚLűOª˜ ›OpKLÒ,r'0ØéäÁ‰¸]±ÏîO¤Ÿ÷±Æ÷LŠÔGÚ7ᙥÃ÷1a!õ´.dm'u@1Êp…tç¨Ä«S?vd )}G[~¼§»°âÛÖËÇð ‚„¦,Ää†|c8b@IjX”*ìs²Q*\±"µ-JtÀ–>‹Ò²X¡ä[”r—Ê~}(O*‰%¯|]Ì)nÆòp⟅ªß“ZqÀGpt P¹Ú×ã;«XKžKÁ u’‹x¸’…xÏŠT’Ïðgì1@(~v9Læð¨÷§ââ®,äç¥{G|vø4â‡]ÆR#HÀK(â¡,æåò>~´f°+ç~r.äJj´u±?›AL^Ê/ó{¬h‰;È &#¸ý¹óÎÜ™-Þž·=’ž's?¹#eï$‡É;»[঴YÏàia¥2¼l¡Ëc¡ôŒ¸É÷ÙySÎÍ-O;|,Íh—Üé.p¥D Ö‰7 €U¼ðæÁl(#Ù‹“ƒþÆsÝIn‹õîO‡òdqB¨â¡Ì»¨Œ+·?–òŽLºwœ…?M¼™? öçruÕb)ofžÅi.•´%]ZàEà.¤È`´”Ÿv¾~âÌ ‘Ü”BòRÎ¥—RI·œäiÎ1qGÚ›Ó¡³0ËE©$Рvd¤C®yÀLÙ;™åÙ Ÿ£q©—ùéäFM¼,ÈBY~Å2cÑG›S»òýþ¸pÅO ³ ò/ ,¡ø@‹ŸúiåVžÔ›`θ#SPV9,œKuYª¤ÁA*Õ"}ÃÝ0nîæA4‘OÜTЇÑ^àæžTÃ8“¢ûê;=qò‰Ž³íï ,“¨Bo+4{[~ÙqŠÏçèàcÜ9”9Õs®•\ä3ýžÔ/ÜÍ¿*¿,…Ù³½‹}°ƒ‹ÏÑÂò}?EÿCÂbX*q¾åϘυ¹:‡=ÿP:'}Ĉ–Ÿ šR°ÉCðõ¤´›í™½ ,Q`aqÌûnæäR\p‰Ü\Þ7+ q‰‚gqqåɈ‹Ùó2/å£y)ž¬@sÀEîæÒq±—¹—  MïÉ«F~¸Àeþ/»\Ї4¦¸ ñ²‘™~7íŲ4èÆ…õ£mNíêÃ.ý¨{” LïPì]öâ›N*ÞÂIOÊð“¤:q‘î,s3êÅ=qL¤!q'z‡©Ô‹r¶'¸H‘|`ûÒZ_j‹‘Tv¹½”²ûºª\¤æö ¤¯ä_q[XˆÑ¸ÀedÆ]à"¾ŒÏûÄEzõFêØÚ™xkÀe„Bð›âm'CGš©r .o¬ã"ŽÒ.æ .2§§âŸúwR ¤B\óñ6} Tçòê±›¢ìžù‡µ¸Ä&”÷ú©””ÇÑÈ5Çn¾‡Ò;2>Ò:&|—Å©•‘²”¢‡:ŒžÊìÃ_tqF:¶s^‰ˆã@æTWa ÞñÜNFâØË#a˜ˆƒ,¯™µ—÷B¹-Ï"ýÊÎ6†ù$-,A„OC^°\|Åeǯ#‹‹ipq‹G\¼ZìíȤêÖhÎɤz dN™éx,c42¬SC¸-4uNŠuh°²ƒ¶ÂÆ?ZÃæ©|hÄ„€FÜ‹M½Âf²Í“ÂøŠ þ§ôÙ”ÀÆ©?LëüpšïL€¹^°»¦“¬°™™-?™búÚ5s33îÔÌãNo 61°If2UwÌr˜Ä3g&“tRcy|æÆ(¼hÄOpÄ+"62¹Š+ÁÉz·c² ™Ýp¦[Ž8&Ñ.Á‰Ýïϸ€•ÂÅ¡N×O™÷}NטPœ]‚{ÉB&'YNe¾EÀT°á-_œ#|U­ÏçÄF*‹Ç$ý€»5pĸ’Ç’ Öå舱ù<Ÿ€Ž¿i Ý t\¸E[ô¯Åß[ÇçÄ[á3LŸÏðøž ‰ç?<ó<Á<Ã<…Ç\…Çß„çð|(}ŒŸN¨èÈÀêlŽ+ñœ7ÆÕh5®°,«èÎ`ñp©_ÅŽWÞj\õ‘Œ«ãj²W¨þD–o–_gÅæÀšl ,wÙ ¬b5°dpêK XÖ :°Œ¬óv`ìµoG–…Y²äÈò¯YÏEÇ„õóÑ‘E½YÖÝßgí¥ãÖÇíKg y TWèȺpô"td}þìkgRí%_;Òž<o‰£z¾ŽÎêµÖá8wS‚#‹¬çƒ#søEŸàHÿBþq“¸Ì¦¦[ÚIÜ 2bŠqޤ\÷P£,ûðmÎ{yW›CøÎÍ'Eéí^Ô‹Í8C@§?füËÆ½yìÈÈi3¨ž¾“:Ç °à¿&lªðôíLëšNÖÝ´ŒFbôêmÄsÚyü°”yœS·ÎãâöÞˆšÇ'í"ØûnÚwÍGc± =°sø`z 0§ëÀ8æƒñ&2}#îͶ¸©À>°À¤×s,_2Ó0—Ro—÷¥Â:.øã¦…e´ ‹ø7f‹¹é´Àf˜|Lq88 Œi€é~70ÝÃUB ïdO^¿Íp'üUõ$,,ð¾#qnBëÜxÆ®‚æ (Õu•@oîMŒ×ƒÙ"©"õL3šÞ÷¸JIL}lz3uz;dÀ„qÝSäA<ñ²P’S{…Ÿ…²˜I'\>¥áÌxfêÇ¡~¥¾“‹/ãT^V»€)¼l²_I½Ô‹ 6È8„/&e‚S™Ë+7ãŠ#irWFÒ})‹8DæÇÁAH0߯⇌Ѯx3ž´Ê ZšCÈAîæF’•‘”ƒNˆ§BÓ{öfä!Ä;1ïɬÇAö"d,eáæ;¦6âxÅâÀµ³ØàÈ ŽБ³ð T, j^±£'\>„2ã/íBJqjY¾àLM:©s w,Ôºn-U*Sß‘€’<á$—Kˆ LN}šâ©©ëQ©‰¼Škʇñ z­y:Ñhvý– %]Æáq†6m¸ø°U$ýÄóDúüîá¤3iÀ“+5íÃ9’&°s€S?£•'ÛLâ¥*ŸD#rj'q§,2ùÛqÊ\¹ï”o¤zxêÒIøÇOµQÜ*ßÀZy\Æã2ÃT.­§Ø&Á­nY˜òÐ) ˜Žu.­|¼Ÿá„VŠ 8ö s*ˆ&“â˜Ì˱êf :cÆÊ\ŒKz KÊd.íGƒãŒG äƒÀM1ôz4æaŠÈôñˆœÏ²‚VVqŸpéa¹°L¥‘]à"WàŠäèüåkp=MÑW©ÝŒ½~9ÂgŽ‚õ!p(n™±AT?”Q¿L•€†ChhÉ!RhÐá¡·BZxœri¦kqàæ¾s§®M=¢öt¬Ûkãòí(ß—(•ÜPä-§LGiP(H|0´=(ßk,½‹:p?‰‰¶åÎéàæèKAÀáP;ø.AõÌL}Ò‚ãW#óÄgÏ]‚ƒŸx¶ï)8,a÷£@}c¢ Á¦IIæ”òf£ÁŽùIN}O^>uêâhŠ[§onµh¸‹åØá&Wë{mnÍ=¾:æ*« ¥£ÒïàdQAæÞ™{lA‘†ŒäLÇZP‹—€ƒ'?â~]ðÏctÂL–ââHç`¾`jû­“èei]Š“Ø„àÎ †Td±ÝbØCe½d.'‘ åc”—Š`_ÝÀA\4µ¼ 1"ï~ƒøù ´€õRÇT;!¶~Ýʶ`öز+7_–~vqUn&hK¼y±š °. H?q‹Ì£ˆH‡½üe™üRã¬Q„‘òXÃh˘¯3ûwþ5c¶^3æVߘÝׯ\ÕT3³»º“ÿ6ÞåÎΫØ)—qjF«;^ü¼;]ÜÙÆçêÈÞÁp_¿c:¿®MêlíÆªÃ:]]œý§ÚU?‰mW'æ¯É#,&æKæUËÚù_È#î³øÏÅG‘š_4Ø…Ç”…uŒüæÖŸ’Ï‚4 ¬îFMÏrËãþª@Œ÷M€‚#×>+ȰsÓWPì¯ÉÇŽüèËF šW»×µï]i_>éW_1&½ad2¸é\cûœÖÐMB¹W¥Æ§6¬Ý\³Öm­á nµÝ]·vó3 n¼×Ìõh®N|…Ï3qe$K±WXd ØsRY|©½íkíõžµ·½²7zÆÞ =QÜZY‹£k,î\‹§Ÿ>ƒçÎg€"=è SºõíªAtd…A÷ ¤Ï1ÿì ù[®Ëج^dpë7QïÓ°öùKË[h9fË»¿›8cö’)¼©F¯Ê=ñŒÍ® Û]4“R´û•Ÿ±1y½ŸÐØÎFcWŸy£±T^.¯êÚ‘4Ö<¨xT£¯@ðç\Þ .T®‹òxq•ØëêðOÄÞK?õÁö€} ¿‰{+¯ñ|cW²~»ά‚9çâèÅÈW 0;R¦–_'½»”ÞOO7é‹/l¼ÑßÜø¥”¥©^ÔRÀÜeù|ñ"À«´ ¦ØèlMŒãŒ »Íw3.ÕHžX=eE*RF!f ùß ?ÛÂl{æÈDý=Ô%óxÔ{çNe]ô¾] ä{u,WœS™ÕùXæùA©±‘±4ÿ@!u ºe¼ ž ¢8<ÑŽÁtÁ7󘱘^¹_É –\PØÃ±úGR¡ûÝòðá2Å“23ðD>ê¾ ÊL  v†Ê¸ûn†ssdÏ ß0õQ?â†WÞƒ®Þ+ ü0#ºå!ŠØç¸Aè» Þ<Çå$û O”3$ýÂÄ¥ìÑQ½Ü—Ž‚’^Œz$Ãçì@Y€¡þ€Žª@SðvÆ8 G¯ÏœàH-ýJñĶáð8k€•eÜBƒ3¹€F¥¤ËëЈoD'®/ÝåGƺwôÜðˆã’±vØÀW&6¯ 8Õ/¿[‚ß­c#EìƒäðÖ¾ õua—ß“’ú ‰ãw\²Ç),d pP§$ëÔ#CemGÒ¿®šEŠøXN~Ô%$ÜŠu¬"ÌI]„ºH êl‡ì–‘ÙóqëdžÜ @ê´½W r–¥ýì&D€¼»õñ‘|°‚p¦[uÈ'ÂzYò[ªìxpuÐ?Yμٓ+ ‡­¿I—°–ϱêÕwR’nø@985wë¸]á@>ÎlpÅuŽc¥|‡îƒIÕ'N!qªî°YÔgÐð‚-PûµÃÓ•¬d”@UÊ®æÂ:'PòÙ €+žÉÆ2ÓB– â³¨H Y6PÉÑ×e¹ðÒ‘WÎuqYxõ‘ÃS˜r+µ`E‹ ™Y¬ÞRÑefÁZ,)d |$‚kûzø…ÏÈ`E ¨ðÁªÓ u&Þ2 0QŽwýYþÌÌÌýÙpºÀç> ögvL“ùw8‡3ê‰ D?:Ü Ì·ÐÌ®¹Å;çAœ8É; :c£‚PâͶœ©j _ª ™±‹pÔ®›ü?zSl&ƒ%s0'OÇÛÅKÔ,ÚCÇ‚h`3k®ïéÇl7y+F¤f `°E¸Ëö).I Ú%CÇ_ 4GŽÉë2×ùxtÅeh†hjË™»úÓàŽü ó18<òðRiþøGÒôáÌ#,ïD £$#°Ì|ÂÝ",bõ³sw˱°‚¸Õ –™K=©t›{ì30‘@bH Ïú{3q´'ý’°0X2¶{ˆH¡<`é$§f—%ìC\Jó ‹=‰'A”qHXäÉ„U3pQx—ï~êßI=~cAÂçþ¡¼ ±ºÙóÀ<1dž–€$ÓãZÁˆB°ö<”. ­4ãé°`ÌUþA¼`ìU`ÁxŠGR0&b¼•3p…0¯þîyà¾d†í‘žc 1–Žô”)F`Y¢C?ðT¼eÚð!.I ixöPzæ¥Ò.ºpL–Ðý‘a$O¾‚1«{ïeßÊòÉñáŒÎå’w\¾’Í,òcGZÁ 6×[ÜòŽÓÂ" –мî  O§–Ì•^:8Ý;õóOÃÙò%ÖÀ6OAF‹OÉ J¯A&B´=3W‘Ñç/Ìö 麽Cdö@ûØC ^‘‡Wdn(+eIØáëÅÝ#yœ%æÌ¸ Äà%O2õØ~'GæÑž,º•}b^ßîr'hÔ—ÅØ9ˆ0`ýàü“¹ “q?hñ”÷v°2¢#¿h[ê|W·?G;2)“§ÃßÐ?²Â”½ê¦˜É_æ–Ô c.9“Ãéïg<>$+ÅQª Ÿá’œ ÀâhÏÐåbG'dðC£Þ~.KÎÏ›sn°ÉâÊBuJ IÄæŽqI>‚¾!$t„°c%·¸tº,t×ÊœËRKQÉÁø¦Gç5×vÉHÒ}²A¶ÂåÌâÏKZÞ`ä±îKSǹS˜œÛm1€AvN‘Q; )üì§ 2%Aí³\ös@ãšÓ¾ôF€É×),0e€•Á2à–õ¨²…~çÝ£:ƒï'Ã; ä®È ò}Žé˜`Ï oY!„•nϘ3¹ÉÍ*>üÅžÁ«¨EC ÈìèœÚá†u} Ðp,¥ôÖ£BÀ HÖÿŸÌœy7hõ„ô8š gÛЂƒÍs¿>°‡Ô°p8¹J¹áó\’$ ™Çñ²”ƒ†³Ÿ0ÜV`[[\›ZW !o¡j ¡“M„àœ­!äÕë9ŠPö\„–¡”2V×4!@Å:@  ÿ @.òêjÝ£!þö€¼z  ŒÉ“ £ëª Р1ón>ŒU&Y°™ó3¤6)o\÷pŠ]³[¼Cœ•žnaÇJRžõ¡ÌÏgr”œ[øÍ· ©‡3rïrW÷çÌ’“·âK'©±ƒufçîPzÞìÐI ïÏ Òî÷; JÊv8Ì »çrWºu€èàQn;* Ñx6J¼!@äí*qüòpêNÝCé æð§Üd›ƒU#ý…,VßîÍm‚tL‚$~.FÁ'aä Ï/ÄÈŠÏÅè)èYÆBd–Ÿ£38EŠ‘ÿbŒœD½?ž´ÝÀèx£ Q?Güøð™q&ßÊt5ÎlŽ3½WÃlRí]f&¬?a˜™Iõ‚aö(ö±ÒQf@ßyá(› €.“´ñ¹‚“ o]dÊÀ‰ä‹V€*4âRëÞÆ ;^dòòPwç|+:8{h¼Ô\Æ[ƒÆLÖ¡©£½«ïhã}"48uk4¶ö 8;óÈ!6.±q¹y‰]/|É;Zgý]ƒwþØ›tö+`ä~Œ§Àœ™¯¯çÜöaÓ 3V’ʶCd0cš^j'ö>B«‰]¦nÓ2œ×Ïzâ*Å8ÛvZwx`ë|['vƒ‡zªóº8DÊzæ\¬UNªíÌnnn»æœŽ gs•£·PŸ³6x5±]~£%¦>h9Ù0†t’{0aƒWXæ&Ñv‡f(ý™­¦keÞ(,ä1**“ÌÖ±´»š­c£žJˆûA6²ôoÖ±| ka™É#¶°Ì½5X¢¹‹s\±ô‡1¬¡»`lä—¦ÒdË0FDÄaüiÁVâŠ{ó/¤‚ß",1ªÞ–Æ4†µOXp¬k_ŠbVÚC¿l Kl;æc7q¶+ÝK¤h¬A«R¢…%Š!Â2´°ì/Üi ‹ô‡1,¬É'÷¸œ ³+QМCm³ýv !ÚŽ¤K™­ßªÈ:±QÐ" ë*`À—QPК­GLÇ“:ƒµ2gµàH|»á§LÞã×ã ì^0JáZÔ«¨±ôDO’òÀåú{_ÖvuÁHh§>…Roô¹¤—Ähj‚»²Â¡Ë(†ÖZ$TÇ|¬\áº\¯ å¬¯®2&ZØñS‰ÓËUtp@qî-®[°Â:U°È*|í^¶«¯Û˜±´†©€¨ÁEZ• .<ù?H¥Ùï*.l¿Y˜£;kûzµ[p|”Ü35~ŽÀ­Ì„o¦ØU.ðUg°‘Zw(A†Í„LºñE—Û¸Nep~g•¢Ž)'®Ö.”¿|ñ»—àÞĆ;±ÞÝLi7Eˆ}i‡{Ãb©Cbù3~j55¾ñÔÞ¯qj ÂA1üeô„·Ñ†Ç6ÅÀÎ/8ù–q¾ŒWÀ«øçŸ`Ÿü‚=ô?4æÙËž\¾¦´ié.÷p¹+—Mï®»zãžibb¾`|Ërù"7ù_b@D÷~͘]ßTît·'½f*™»PÁMWnÞ48ž+X Må¸û9°€jô)c¶¾±Ùl¹0qðyc~_J~Ém[w•ŠrÓi­ëȬ ñòs/6Vm™XºéýŠšLG4Yƒ÷“™”[þ0‰Sd£l[“Mz·\ŃR¾Â–˜Ìi’,41Ú0¹##[¬‰ ûŒ†/éÙtáZNÏPc!SÛEWU‘f`&ÍPàXÇœBTþ¼¸ÌÀà³æÌMò\V›?§a@¾qg’Õ\¼P™ ""J# (¸ &‡ØÔ„îü·Š0÷’ŠúõI^âØlN­ÈÖÐŒ”Oæ~íWæÒo¹_cLZ`æÖßqíλOõ‡t¦'K&¼S1 ŽK˜;'0Xc«üúÕó 2m?ýïû‰…ð½*EÚÇõãÊã$Ï'x‹v¸•}1Щ;FšÄT঎jÓ‰H¨s·D\=£ü‹ ¥ Ï… Ôwá‚Á4ïkBú…ñëÔƒfÈy&M@¢!6Þ‚úíÇ)¼<&eðÅ!¤Ô:xè %m0¬_ÔKTÇõ’žÝëDëÁù0¶»§è Tg€ˆ•³AQ‘&¢2 äíb‚‚Ö¥Ô2D•¥žW)ø×®¾[ÊAÑ'{P.áÇŒ!tÙ[GIæpb/ÇPú–Tí•ÄERÖzROyÔº $Iè d­·¡ Tƒ>&Ó”ri <ç¬N(ßg`ù>ä蔃ÆkìV 2X8œüyŒ¿T ‚ìs=ê)ɼˆO{cës>’"-Н$îfº ¥ÜWcžªÃÒ¢ÓoÐAö|3×ð©ÓFRŸ Ì_ C‡"21ˆ»öí étÁP [ ù»0½ —´w’õ—‘…¢ãWñåøJU޵£ª"æ3@Ye†×:­í‹ù¹Ki7‡Á1Bñ]ÍÃPYtNÃÃÊË'²ÖÈ@îÓw‹Ì¿nî§áQ}'Ç€ºSC%d"_zìÍû<ÛïÉ«æ-q€ä…ôÁÈÏ'YåQ5bNè@èX rëü)f°(~E‘ˆ&^)¨Ú¾OeˆÏŒ£;?¦Ž ¥UâÃI B.†‘t@¤a:{6ñ²ßËüŒÍ»àÏ#@+mÔ´W/CT ´@T–"Lù°B{2… N¡F DdeYl7ää2 €P1™bèÉì³»Ø+v-lXÊàs±@ M€ÐÚnû DòtîÆ8•¶ ¶¯~<”iRĈ)ƒOr!ÿ&@0¤`ÖÅ7è Lw}=KWàüÝ.˜!’µ¿‡¬gîïK+bzË ]åëÎ-_g ‘±‡sœB8üFr i Òq kºy›è6¿¦TÍ@x gýØ]B~nqçnnË ¾qËÈ, "ï Ì-±¦@ÌT$Ȭ±Æ»zÍm1Åá9(KÄ´rˆ™™[âÒ6@x òX³Òq„Ꜧ›¡É˜»€-3iâ 8ÌxÊÜFý_±dB¾O8Rº64ÌïBš,ó„\†šù’€`N|Ê;%°CtéF`WϺ‰O.‡´sîsŠCòÛ}=;%@ôdÂËuAT`=t…v©C™Ý±j:…mU,œE¥÷û)fÉÜvöGˆ%Áuᦨq›Ël÷ÞHͨ/XŒ¹¥Ô1Ëžù{“{ÿÅh ® 1“‡ö„ŸÎÓ⌔M4ŽWh ,òã ƒo<¥E#eoî3xôÖð(ˆ‡S~ø"@xR…|jEä[ˆøoE.ÆØøê¤ãm-¾-$?ÕKglº,À½¨-"Œ•bû½S/ñDB{p²b‘Bõ D\9TFþm§Î›±رr§ÝÚ¦Ö "åÁÚpñÖ†Ë%7™á¿ç¶¿?"AziÇ ˆOgÚw0^F/aò­‘7ißä)ÚBâ¼qÿHüŸ ﯉Ëxxø³C"½|>$² RHÂk ™’ú:qëxÆ›ü`*3=tp/¹Ç2t’³Ã)%’)Ø$K OÞÂôz¾ÛòýN¢€Èôê$5çW?¹‡Ÿ‚GL}³ÝœKë]Á#Éçœaçă3lK1CÄ †‹[í¬ ¹ßL±—䯀û4³½ý)=ÒG;ÇJÛRå$nÇfx8‰ú¹4lñ€@ãÞ3xxsw-¼_ˆ‡AÞìE ÌAwã¬Áƒ‹DœŸ CYá"˜ú›xÜ’;KÀ!þ²i<p$Ñþ„”¡b ]\‡Ã_ÁáJó$Ò·,¶hŒì<pžm—% oŒ— Áñb¾N‰FÑç8k† ©)Ëf¢í0¶ÉÁÍѲ4š©Ö¢¡síSkÍë;–RÑ#ßÃn®™n/Fvº5ÅÚ`ÁF¶>XÐä§u áæ+ç•-±ŽÆ¦ÿÕ¢á§-?&Ô-±º'ÐÊ3iý/b¡‚(ØtSÿ‹k´0òW^‡gý¯(oü¯låýpƒÛpy;ÉT–g»Îí É’'¶—%ü/'ýÀ]ÃaÃÿ꘿é¶«8HõöKÑÿtmú2ß®Mµ”ÞÓ¹Kaàl¥Ó`£§#Uf-%&ÃÍè;ÍR‘J5ð92ƒa’ýáõE.á°4(6©Ñ)Veÿì{B Ï+ÜÔl&Ø>ÛÑ·zØxÊvÕå€ÊŽÂ0•º'0Äîmaè^!ê 1IÀª&‰„D0€âjtÖÍМ…¡¿ C;`… òƒ0Œ¡„ýC±AèØV™¡mªÑ Òµ0¨*P¶);ÒÛémah'·0äëye- ¡±ëõ8ˆ7…¿9(°H”¥sî<„Ás ŠÉú @pß6W×ë 2(ÂõAA5Vxäº^wÖÖë2(dyÍó¹Ç¥†X¦y9ÄáþÚ Á7ÁQ‰Õ»Bªïh8´=±>‹Œ‰¢¶$KuL<…øG"~Æ8TàwêS¹)ȬÚ' édq è@¿„ûéuÓy'Nö!QYÓ ¬‰&ø™Xêƒwrì úR8÷y®âφÓ)“¸vóP:/Ë3yO~X¸0Ö@‘Môĸ'¹t^KVP „ãe·…"Cƒj sh…÷$5Êl‘êìý²×KPŒwÅO¨qþY(NÝD¦Ñds…*ž“ÜV®0“äÊ:w“(ÁæÀ…JU(ZÊRaŠvGÃØ?HbüЩÓ8<“H‡dâïÅÔŸãt’ÜÁüX£âe£g·„æN‹±•@ÔÖÔ!ò¤CD(ÖD7—Ãi áq,@$½/ °Çm#(5f v#iŒù›bÃB4LJR/p¹¯‡hŽS=W!’+§ñ "×"Oˆb|‡äB$mØBë=õvõ’{ ¦RuàÖeãûfRLRuPŸcõ‚™èÔãú} N}dH¨7“2c“™+ëóäRNý$ÉM.µG ùûHìáÕ‰Ž)WLuf“J×.—“ú;—cTu±>¨x; «AÅèÔ[H¶h·šµKM-úïh©ä:¨ž‚h=I]´x8uàÔÇ ÊÙÒz¿¾Ïí§Ó@Z}3žŽ·-òÕðjyfRõjåÂÝ4lѸ¬#\uêÈ+¸ýô–‚áHû¾4……Ý€ «PŒI¶’Q{¤ýäüïäøÛ¯wìGoNÙdLc@;PØÁy"-k”'Ÿ3ų’¸§/“*\âž¹Ä2³â/&xwôÇTý”‹îw±w˽œ¸ïƒ¢Œ 8\„­Yh¨Hƒ¨”¯rPgœ¹´r!׺jÕšÜáÿž´]÷ãÏ S²¿ç/›¼÷­Ôt¥¾ü^ ä“ÖžÜÐ>±¿Ýü%sÙ‹ò¦<Ñï‹  ‡/“Iþ±ü;ƬÝôÖoú¸¹%7ÿCLëíÝŸÇ_Íí_6ΈÝÌæöìçñWs{Wk¯nç·_çmã¼¼ºkœßµ7¿,MÿQÓß?B_ÿaKÁøYHNÒEÕÏ|ƒ\ve~§†…%^c„o[ÉÈ9ƒ½èöÉ5¦G¥ú(Ò•›.õB®4-®lôNÓvW>«x³uè~üYµÒ>â—Úô6Ñk›öŠÊ|sÝÜõ*@ì˜5æä]û‡v[ÛÜsn¼µ2'먫æ\5‡Ä6^kÎF±‹…™6ævŸkk;îˆÏ»ÈBóŒ¹ÝßÒl54ç­ÌùÏšsZs€pçZ0s;dÄу¹gÀý–’î×ÍeæZ0±úDs®gí¯bLÃ8j̱ƶ_‘ïfú Jß°6Äl“1u[^#7£±ñ)\zIF1¾§=ycÖíÒFÆÓo¬?„Ø\kwOÖw컹¶ïŸÒn× H¯ƒµk»Ÿ#±kâa@¾:…®‚ âBÑ#D X–gwSKÑÿªæÖØ„¬±$Cšþ\îQDZ¬ út NPp¡¬rO«‰¼ŒÁÍ4äðœ!û‹K*ˆZADƒt”»Ý* RCä’’”>œ q*î*i›Äq—ÉaŠŠL *‹X º>z¤JTŒþƒCqûJ§è¥c'Ç?EO–ò§Ý¦‰Ä7+ºù8õòA”öåþø¸ÜÏå'Äøúñ¨‡Yë½~Ô‹‹n&%ºñv·è“TúY‰½ÍE?#ù™Ì2hEZY³}ib‘1²aôòq&¥úh‹÷Æ#áç>ZG`ðihÐÐÄ‚Çý£r?“'éE°Y r©ó! Ã:Û£Kû|64•õØâQy¨XIãýx°Ÿw¿PµÎ»ª'Ð?t̼@©/`Hó‘þ÷ß@HDJÇt„W`@¹b`†Û‚c‚‘Æl%¦!ØÆƒ^ûQ/¤cÕ´'ƒiæ2üië4XÀÎß½?C}À¤Xd}ù‡ïh[íòƒHáØSô³9š/÷ …B&*¦½AD§~ø›«Ùc ™A(ö ÁÀ\<T±´‘Roæ=ȬäÜá…C£b:Zb¦ý¡KÎHÒt7| XÀnˆCXšeÇQÃWÉeÞÑßGÞ*_CæO9Hh‡ ä?c¾ âádœ0Ï·ã1FR›ú¦ÒÇhèâ6p bŠ'âÞÇ&4$E gû#èg(Ñ:è_h^—wÄ]D(ñ®“îÔÀ"µqwJe‡†X`÷Ë‹Âìð¹`ˆvC5 €8 °U8)ïñÁ¨ÎªF‹í€O±Ø3¡bÑP Ô¶›yQáäV#äY,°7O,În™›Ü-޲yÄ_xW^•VºX¼¬P;@A ÝÊ`+SøðÐÔŽfùÀaï-l µ³p¤:ÌÀB È,<·ÌÃÙô·ô¹Q>‚¢4é­YÇ¢1)qe—hhx߃N±T¿éGëÌµŽ¥Ì震Ö`vE±ÁjÁPIÚÌ –On á‰Í~Cj…Ç ódÁ>`ÓiLaü±š!ѱ\ž>ƒ†!°c¢!îB ŠÌjª>¶ã¹ðcøT·æEäñ¸·g……Ø9œ1Ýó¢ì‚”¶†±`$ÒÚLÀÄ]Œ® ár—Ñ¢]+&•![á Q}'µGœ.”3¸æ8¬H¯ÑÓéÌ)qÆoaˤ̮‚¼‰ò>ÏÀp%ä® Ž\a:c؉†ò{} L`ëIÜ÷T~âÔÇãÖÈŠ¶*¨Ç4…ݧ~j}ƒ„ZÀ…òô¼­í Iƒ)=ˆ‘89Îà—vÿ ë.SkêY\êxÒââ¯péøoëÀ¤›ÀkÀ¸Ø¤:ç–)¯=ÿ5çÃuÒÅù*Á¥oºß¿eÛ9ê”—Ø ‚±3qs¤hÓn§\ÊtÉsM‘“7ë’ý SÇÊqQ`8ó˜ÓçÆ¯\bŸN½–¡BéitœÛ™~9뎤­¹ûô 2Ý22ƒud hø‰È€1ý³!#æ¯G'êʼ÷d`ì9Vd(Åø,0%€i @ÏŒ%#ÞðsÆÒ¤’yеcÉLªç%'/8–¤ÐÏ8–Ä|;–ر„:Œ6ËØ|ëyC ¦Ú¡ä¿`(!"½6”Üõ¡´_/ŸóŠ1A±c•)ªöú/[XêhϾb Óæ–Óµwoä4(È1ÁÜG~uý«ä_îPãBß½Ðãëm‚Ÿ÷ Š>r(\„tÀ"ìšîXºƒ…į^üÖ•e_.&߀dãírP9kÔ»ÆÙ:×¹Ù8ó-é¤Ì¯ÈÁ Ftr ë"pzvÌñB@¿½6=;q¼!Ó>e¼¸fvÞ²xà+‹éÙâ±K<Ät›JÌâv¬‹L HI<”òB2 ggéâÍˬÓ3x­1VÇ]Í(±š-SR‰¹ÿ¤xÜ’?Q<¾ÄçsÅàˆ ÇüЙ¯»n7¸±ôÈÔu‹Œ¿ rÎô&ús õܦôÜn6¾JL³ÖqÛ‚Ò®<¾Ü[¿ïÌäæÐ:n–qµÎ Ñqû3ë¸hHY¢Ñ$ ký¶‹ÛÓ ,àÒ M¬C†©ºôö,rå¨K¿GŒ»ê©Ä‚oÁ¢$5‡Iféõ‘2S¾ Gê8I¡v¶6Ij¬ßæEe@§0ÆÙ;¶` Ãå#ëX¡¥Æ§Ö|ú ¾<< ßäŽúô´áÕ@ù‘ [0c™Éo­AÏ‚r‹ ©`G\<íqar[WpÀËÅbŒP«`±c± zÒ¶¶X “*°¨ÌD±4BJcb‹û‘)@¹·Ç‹)„6ª‹,"¡JíJ/BfUä*£IEBʶ ¡þW—›H¸ëH À¬Ñ  X¨÷÷™Õ*gÍ.x?ÙD×ÿ)×ÿ š¼AÕß”ëÿ.×ÿDÂáò„ùa©Ç8η .èòŸGnFš ´àò½'‹öÉ2Ý:ýûq?¥r`16ãˆV¦I{vý/}£¡ÑÚúÒ&§Z”…qŠîYCºþo=7²îÚ<û£A\ôS"ÄTŸ¡†…²üïã/€D>hÂBn)9ÎdåÀH•²ûñ eÑHL2.4&ÝCLÀb¿P,d‚Ýr?ïgƒ¸D(®G/ ¹70Èq!fÆß…i ÃJb‡a¡?E}¹UôÔ¤B ]D…z £Bƒt€ó_òT® þkPØ(â’ÙY4 ˆ b:9¿m¨1¹–ª±E¤@3_mñB|‡¨¾ñ÷05D¬¼JC­ªöP7ƒ¥ ">m‚ˆ #­´0 “Qj1×ye ‘ãó\nCc=„xas?ׄýªÚâcÆý"\%ÙaéšAÄs›]ˆQÄ)‡ìû›Õdmà|ä#{|¥ƹ¢ã ¸q‹1œŸU’€Q—š@ôEÔÀó4S!ÏAçÑf ؤú¼¹×`cÑÄFóþ {!W9 DªÑaZph/d$Ú#8x°5p´tÍ8ôylÁÁÉÏœà´ldK^2ÅöNçð7l- ¡rL‡ ¸! “·LòÃvób†ÍnÐ(ÁÅI.ŒÌ¼É© zì̼…n^É?Ã~Æ®|ïëæEÌÍ òqÕV–ËE”¼‹ÝÐò~8åÞ…ü{–>4>è5 0eüHúGKܼø±›ÜÃÞÅÔŸÓ¦R6¸Ý±‹‹“ˆ³¯”ÅÖää$oî'‹ùjöý÷¶fLÊߤ>ˆÂ òpÍÇûøaÃ`ok¶ÚÛ<ÌðžÒ”Çpü˜p` É] Gªô"…‹éÝÊ‘2ä¯Ã á;òL4\AX÷¶üäM1t_ ¹‹[€ é qsë‘4äY¼9m*gãC”…u©J4¸¹õƒ “¼%³Ï™‚È(AfGŒ]F™ìrêZܰRˆ·B£c l}¦/ÙCæ£ °Ÿêb/ «—ÁÜžø|%šD&„â–¢aꀆoEh´žDž9“.¸Ò1/#Eµx%2(Èž—-ƒRˆýÐËI„Ó…/Ëôæ0¦Óü¥föe›ZáWù÷°Á룧¿./³_Àžï_7f}þ)oË»+Ï^$ú¿€ÍæÀT¹¡ÁFyõ¯)L±VÄG¸Ò­™¶H°Q$žl©Ü«EØúµÃdÖD“µ"•ŒŽÍ"Sp(’o®Jxu±^"¬SÐêµòªY/áרv+)ñwAÛù_ƒpð87ßl)$²ÆÛ~I·ÜóÏàÙÑîÈC½ê ¤Ë¦ÿ7M5(ñ¡¾¦lÏÏûà¤¿ÃÆvÖó#$ðˆögèZ¼¤43ú´1ßp˜ÒCJÉ—ö›/k‚¶z ò‘~Ãå–¶ @™Ávÿ7ýzCÞ ½n y0”YC©5¡úC™ÚzII#³ÆY®‡54Ým í~š²¤4äG_ÖÃËÔB5Sˆ)ˆ%d$N"ü¨g4S å_£¥ÙOcéðü‚—oXôJYÚËÙ» q³Í(Sù¸4J•iã’\‘D¼‡ÄãZv3€©È?·ÏYh.ﱞ3;'6 Ŧx+!…y©Ð˜–†n›}ˆLƒ¤pÀ*ßÇ·àøxFrñÈ“‘:Ž›p1 à Õ uÞ€m´†ŽGilt3í–"¹!=æ]4Yúä U Ð|ÑäèÃþ @ò!é~Îg‰•C¤ø€|‘f\ï4z†X¹TÑŠ q©r€n]b-çäçI“ #ÉÅìIF³vZšG•SlðPWCš­ec45´Ž6ÉLÁ-8h®]I)ÌP †™d0¶1¢.¸KR-ŒX^]Ä(&‡‚Œ~_Áù‰+8Ü0T÷ 8.t9xžâ@ÉHy¨t«%5÷êaÅXW€t´ 1K\°¥æW$òù€ÅËÃà º! (¹¤!b¢xÅŒ‰aD‰‰䔥4‰+òª}TLZ8Vj#ïMðÇÄvÞ…Ò…Ú0¤ Äâÿ²­T܆‡¶yò¾~RÇãPùË{9T™PBÇ8Yç1Ï4e½Ã%p@¦4'LÚ<úàÃ,ó!=d¿è½1"ÈŠñà })^îp¶Ì5Óy/–ß²¸LLb±(ËLY¢±\Q$shå}4Hzˆ aÉ1ÚyòWÔ¶õZ$âî‘"ÑC ¬/H¤] vÉÃáà—æ8‹Æ†Ht¡«Ü‹-Q…q§¸ œ‹‡® Q\E‚M <_20åÃð‘º)µ·y0í0ÃÁ4¸CRðGYYÆ™õnŒ„x6€ºà žt~¥æâ€h]_»Eé­yTÅaG³½:m‰ º(å›!ÔxÞ3™ÏŠ};6ÈAø½à™Go?wã‘ÍÀ²96š80Æ$¡j13µ ¥–óCÁGU,Ü¡DÛC̓.e}¤¯±œ”¥¬åŠ!Al‡†—¶ï5´öÝ2WÄ Or{úý¯w ƒÛ™Ñp4²OÂk …"'ùöò*O,Ûö-Ñ1ÇŒ‘Ãï²@\¿Û ±¿ŽÄ²yItÌÃHyt7kÉ9P˾éú㑼£Wd¥6¿ín'´P¨¾%~EWXÊã3Ï2c·è¿QŽvQ|„P¨Ôl˜â`ìœSbbFÏεzzÚhª™3eúÚµÔBA9N“Ü‹BÒ©YÇ\l™@w—.ä'Ä]:æ‰ñc°&åÃå»Ô+~Cüàh¿y CzŠ’QŠ]Aó/κÏý¸™]!h·¥Ò.ï7„öÝ’V ˆßIˆÄå–!ל*Ƈn“¼Ýá\„w Œ ùûˆ;͞Ē@øp½Žo)brŸêÉrÉIÖp$rEÂKb,`QºâX‰ŸÐìv!iEq >ˆTy4÷¦+_¬9¶V ¬ùò;Ú7î$g ‡É”ŽØ%œõ#{@KFHKÆøo™™…ÌÈ1ëqŒð\w|tŒpW {¹(³¯êÈf´ŽGN<ès&çËrO ¦ ïSõW k=Nê¦ùÆ Ã«s«Á|rf/›èl§.pVJÖ"â3äOZŸ½9PY*&¿£€­u"¢Ê4ÖgßAóï­ ñHþ»O†Äm!qVˆtA,ãZHŠqão §>$Áõ¸ôÖ@¾ £âÖk˜ *]· \XPÖ¤6Ä+Ë® ’•œ:¤Ûgѯ 3·$Œ·Aëèmà‚©q›ç›qú™tίªãbÈéEƒ2î—i£JÜ̯—œ_'X¦¿\’ÊáÀærŸZ¿Š9ÁÛgòM™sb/ÜIzÔHëÕo¤.r ¿á”—ÍÞO§,¢1ewÎÄ+°s,ô›ã¥ò_òC}°SNiHeüÔÛ¸Üî–ïQ´PÏw—ßþ«áAýâìzbé2±øxÇO‘0ãu Eô—…·PøʸÅS…üŒ÷LÖ ˆZ(2 …{˜©r¡¸´ñä£0Ü„}µ 6Á ú–b1i°ÈVX8×aáªXô™Xüß¶­™¹Nµ-ÓâfZ’A8Ó’åDêrìÇž/I]ݘj9Õ6ìŒW1&δCèLË9{‹Ã))·:Ñþh¡Ëzôl™8™]¥‘ØyvyËl¹è¦YØiV›ã4ûžåµ4³,¸'°‚9E®¨C¾%6W@Üj¸Â?+šõvìþ,š+8|o\4†[?% $Üܲ0Hð W0@tå0€>£ž—…!h`¸CИë±" ÇFK±Ø̱22†à·Ëg*•ÊcªMqÇã€Cãv꾇õY d'ùu€F¥ee0ïJ¢©¡H·MÅ OF–./náfºð‰6…Ë3À·\’åÄ„€AÇE#ËKŽm&Ó÷”ÍÒÌ¥`œÐˆ,?¦!¸`' ß0ö„Â: ®…¡¶0@Þƒ¢Æ*s„±JÒÈ Ç]‡aÒÀàc… 08×+‰ÜÚÏ=l`HQ¤–§`- xåÁÙ¦‘ɰ8;¤XˆÂB¼Ð·0€j†•Öˆ,Î@Ó9h`˜ý#!V)íj}–X­G\­[jÅæì‰ÈB,³Þ~igOÐ&H¬ÅX_fË\ó_ïç½#°EÚÙ3.£‚«ur9”Ác=ï‚ ʆ)íä‰d b@Œæ`j0·,˜¢?€Öë%è(¦›õ‹nn§ÏóA\òØŽS =Y—¸bï7ÎÄ,—ÅΠz –Ò1þýÀx¸Ý[–é˜Ó?ÀxRµNù ÞDڹȢ)~…Æ ýUõw/§4GÐÙm0¡$od5‹ÏAqî`ó6®Tzaº¥(3+»[íÃ*£Š‹56iÐ]ˆ CÇÏÄp¤Z†/EˆË¸„_Qȧ'õNPÑ*B‰‚š'JUYmšCÒ{I}sp`Ó°NíäÚ*D›cR) †_AG“ÈT §#*ÊH*W,½HGk9V.#h^K¥Ó–Œá7Ž6Cš°½l¦Y†85/JåÔ·º4 )¸mV/€çÂ`jŽ„( ß×g˜³Œ¨–!8¹8fXbÎ]óÔ…6¿¹UY jÝ:Þ#Nw<©pÉAEŒÇ|ê™M”Âz”ü:±ÊfÉÔ1B­. t4 ]]Ã<ðêÇ„ÈÔeæÕ™_ ù=Òï4šT°ª©\ ¤BÄ4:ê}KÔ'yŒêº„a/Ú'$)â9/ ‘ydðQæë$?‘Œ‹1Y]ÒÔH hQÙÓÂÇÆ &a%[¤CL^›…ƒÅ®7ß5^ò–Uj1Ëáb’-óAðŽLÚÃ{š©rˆÍ‘véÿÀMîQ Çß¡ ò<°±‚Ç!65o’,Ó¿?f87I„c¸T¹ê»ö .ÑÇ é˜3¥ïعøÒreÙ™e²N~€@ˆ´ÙèÍù–íbgcòAÄÔ~r7–^ßú%¤.†‚ö[þê÷§¯š‚Ù¼±Ñ7Ñ„a$*ÐL7ŠÝxóO1+Ͼ“"r9Œ4Iy£?Ëà­ˆ©Òµ´váO!°z­Rt\µ;Ç&äÔ¸bn)½ÁQ%È`ðœ>þü&6±›Ä†L@:²%Ïð‡è×o üÄÜ0¼ôàÎûÑ3Áæø 09xqûº‹#[=ž¬U׋x'ü;íµ×y ¤ {íëüÛKæËyõ÷ßÇÖëÄüCӳ܊¿‰ý߉ Iósðm(úêMJN/c«}§Ýj÷ =ý×t‹×rð?£:)µ“½NÆN_+PÞ2ÿþø2mtiÃm¸š%¥ÿ2ªm·T_e¶ÅÞþÜq~Õ\¦N4räƒhŒ}Zjß`Í›¦ú&ªR ¤œnm=ßêö'[Íaµg.dNxÆìvk6Û0Û[3»è¤1Ë\)/µ1+ïhämšÑìÎ/ªÈEðKª€á?c×L>ýS›-þêfUSFÌÞú´òDv³Ó­–"f¡qµõ¨KîB.Í`5–ƒZ¥ÊÉ-Àêt V§­ÕÙ¦ÕÚ“—4Ý•gúåõÖÍâç´eó¼–ùg­þ¦qšöøM@{Ù—[ÐÞÞÏ)>æyøðÏZ¡ùMÜÊ1ò‡Ë÷’ G$GôÈÓßÊ‘xs7 $¿÷34…¼/U± ¹Êº2öÄëÿèŽÉÇ 6‹÷ ×e[<>G³ÅôSI䑟3¢&RL©LS¤ž÷÷Sù¢"˜£$ªó.²Gðê{ô¨£—Ø;B³ùØçh,éÊÈ,ñd;l•ý«¤!2HLÿ™´KÔO¢¦Ò_c`ÂÁµÜ”ïê1)ç¸|£ì˜–ÌýÅäÝ2íðÊÌøXqMuÑ—’òBþ€q½L‘WË JñM¿] rfËÌ)¾LRJ• Äà4®9ÁvWïm¨Jç}·éÀâÞÛeQæ£qTaâäÆ(á~–i÷]îpœ³ ÈyÊfGåQ3ÏFîœK¹7ÎÍR½ìíà •w‚4‚ ï—ò²Ì–pœ”ߺ4Ò¦.Vrõù!Ó·(|å?¯„‘™BÌ8¨Ï nǨ͇â(CLüÑlw°m /‰ÉK˜QÂ.8•Uî¨3°|ùŒo3a ²#‡~ÍôéAã]‚…ÙŠÓªÎG“B¤tÌ'5ÖÄÙÊ‘cƦgÁ?CÃO"›è¥ C(ÿžÚ<-Fåžâ”Ì‹ù@ Ö`©w—6§ØÉDç‚ÂÍD€Çæ",’š¾ôSÅgUæšhÐpH-€Ãz»EHCÒU¶ã6 í[1xD±õ}ááE¡ÂDùŽ€0¹H+sÁï×w4¹`‹S¤R '&/Ì@ø>áGÉWz'-œ­€»<žÔç! qÞaÒ„î]¦^M—·ØÄJ}t,ò̧óÞbÙhT†Y'”@EÙK“b*>å!&âoª,#x$·B•˜)¡Jªé–•è›ûªÇˆ’fQ³ŠŽ¥¦¯ÁÄ^‚@"&ÀAÖë–ŸÜ•Z:¢â/DÅÚé"™íçh%™B±ûåÜ¡„bS'†BÀ­×ñ°#=OGþ¨öÁ·ÚŽôHÁ·¹Ä]0vŠÑJªC´®6¼œFÑI×"ˆ—‰V¶Ê*†¨|3@“pŸeqgByiï(s5 ÒÁš}£0 JŒ Ë…É^p‘§lm Q:žç²Žò#cÖ‚ØÃîr9 « rdA‘vK~¬ÒØ¡˜Ó" `Þ’ÌUT\EEÏС,”JÐEeŽô„-é$Ç+²W8“HFðxD9gbõyÀ‰º4D…ey‡2Ë]i"Ʊ2:ýHn!s8´—X ©ÏÅhÚséž'Šb§("ņúѨҋx"¬y¸‡½ëbÿé ì-HÕRæl®Öy^­ÿí¨ ¾ 5¦AzÐhØþ·¸Ñ…NÖTØ9öòÐìQyzâB¡kÈó´°8WAÉS£Êõ(Y’wÐxÃöhQÑý:¦cº-ë/éÃë¤;ÝPPò¿,(é µ Ü쯒n€r³· }Õ'Q‹JaQù¼9ÃKÅê#€„Pìêªåkþ¶ÉüÓŸUóV!ƒå>ö£vìö”€p‘nïså ‘çꩃd‚­ ¡ê7‰Ì•PøÊ¹#!†¥0¶¤t1‹À‚Ó©{èfDíÜÔ`_.­‡c–¾â²CÍh¦¤·é`äÆPÆ{OyÎ4ÐC®¢ŸÒ©F[Þp}ÎÈäíÅš¢'ÁëvcÀ3ÿ gæD‘ÁÖ¾W_ 7ýý}Äœò–÷P"‰Ÿ85ŠÌåt@rþ"  "-UìYdp¾£6@î Ó¤šæBȸ=¤·nÉt¸hŽ”Y„x%Dbp8<Ú pn ²x œ~+¦èûäóØõ*“, ;\ÒÓy öãX§i4Ü䊾‹ôôL~QÃÞ35Îi Ø™ÙÃâb‡ Re AF1_äoä]P€ÓZWr¯tÂÒ @àuCk¯ÈKæ -G¹äõá §ýé0â»-ŸAúÓAd®‡èB!rH™F·^„Ñ-ÅȬa„N’Þ| HÈæÍ1æÙÄ£v9:ÈH¢ŒÆy;ÊšÄ-kÃÌY 3MÙÆêK‡éà1ÌvìÚ¡>‚4yÿ̼iAúišÙh€ÆE»x¸Ð‘¶·>ÒÂ+#mOGšYiè%×?j·7†Ú"¬ÃFAýÖUˆxJ­^D~}ïyXÚý@ù­W]î@+¤Áǯã-øØš~öE^ÿ"ZÁsùHÙ­gÁÇœÒ5eÕ í7S±Ñ ‚ ÕQž§¤%;âédͤ®à0†¥Üô"S¦flwÄ:HØÄà!3¨l÷ò.±AØÂ)©j lz 5}²‰‰MÚ7œÕ™.J°Q¯¢ lzo›¾ [W'ï*4Ü14¡Aê(£Èp:߯Yr&¶0¤ ÷o˜Sé:…Y=¥^N¿AƬ#=‹Œs™®fȸ™®E†nEÆ5Ëq ÌÅv/Eœí”¢º¿†LßtWÈd9HkþNƒÌvãï¬!ó¾E&m1=il˜¼Æ8½Óu`ºæl¬}z—Ê.8­OLË„Ií´þM]0 ËÈJm„í‚°³¬¥“t’.WÛëç¯Â)wcj¿?Ù  †göÐtä¯&êaèhÒíhÚ³›Ù{ãégì’! }&±AêÁ¥ÍC£K]½ æôêEóHzg»ÄT5«‘T¬ã²÷ .ð3-.y³ Í.÷-.䈃|q’‘Á ° /” QX¢+òW‚%]ƒ%º–ôŰhé–µÌÜ =&Î<œ¹k4o* s3tg8Gùx×›âîBó€š`}¿²[¼#søíؽ3uZŠ’L¥ ‡L†‘,MoÓ¶B1 ,LZ©ï^/^À°8rxbw¥{L0*¸;húÐŒÙ0§oh˜ xØ«ü6ŽrÄó½¢djݸ‡<ë•1zû¾øs6€Ûò¶ÜCÝB\–±”yÔ‡#õ¤{½‚ ó^Ù1Ç£ÞÛÊâ1#6ªˆ Ê%T–ñw€È%º—«úzÿ;(Þ•QHJ8S]\èðõz!nWÌŠU¿ü¹A8ëWPsÙÐ/298i%µ£Ù2á¹d¦(û9°uAì¾ +K J˜™Æž|".B};öÒº˜Èz§)¡³iú(„‡ÂœLõ›pn”O C®A¥Færlðbf™ú¤ï(…ÆX¥E´@Äa~«K(=yŒ}¦‹"Ä»(°R’*ÀÁô6… 1’˜Ål˜ïÔlµŽ!!í!»ŽÀ4Až)&Ó„:g¤×3M}#‚mŒ¥iãÊ„š‹²(.ªLXùª(ÂÔ39EOê'éN…wh™C¨O¸Ðjp²z"jò‚š³},/ëŒXQ%€l#é;¤,5 ÎË; V¹Õ·tÉäº@ÚŒR8+à®Á´¦K¢g •_ónXE”VÉv–‘EIê4›8Š[¤š9‡Í‚Ãä0L(õÈ#ÆOÈRbHñÁm‘·Ï\%óááÜÕŽIÈ[qgþÔéäÍY°¿ðA(q䤉‘œ"”“-Ǽ¸ é,€ËŒìl1u@²ŒÜï[ ûst;¹ÀÆGˆøûÓ`?¡”d´£È†!OžøsY$ Ò‹E€œ® î$rÏ›¹æ'Ò2Î^Hwäo_Z’.£q|Žw}#ÇZH¢dÎŽ˜> ¼˜ [Ë\*ljƒg^ Éâå¡ô WÉÔgÔ†Ù$ñ°sT‚6JLSü¢Á¹Ü}Ç|ì¦xÝQr£`s,·”‡ú<\队ÈÃå†l!䊉)—.ft² šä!™WNÚ¢InÈtxaƒá±aE…êÚ¯J‹*ˆÉm¢¢)pT6$Lt£Iú½5T2gIQp&š÷5QQÄ‹·yuˆJ10#Ë6f˜£ß•n<’iÖ@d&S‚’D¹æ)Ïzƒì;èB.®›‚n¦ ¾PïP™$Ò3&l—åÑÚ7¿ †Ñ6öe ^×M» 0Ž ^m2fG"(äè©#|Q¤2k O¦ß ©(Fðä[àBD~ ®ÝWàæHÞ'¯1u¤Ì'GL0ÏRÈX¦Ô ɳUÅdÛb2°¤$¥}è¤Ü•¢6µbçåDÀ+(ð –]ä¦TÀbƃ|7åÉ|l;AÄ®/ÏsÇM¼0.Uà™e#=¿¿/nÇ©8/Kšh@‘?™æ„WPN6AAh @D…öÁ85ènJP^ù†potÃÜ׳)â# Å€PûyÝ#ñÓl Écœ"ë…û$.fr™@C™Š5R„ÍXù"ƒz|¢§¿¥¼¼xjæÈ‘¯”•p˜!Öz7•‘„—…| ô^"Äe•FÃ}gNd ›þœÛ—°b'í Gÿw‚Z3£Û/ ¸{2~ ÃÃû”•‹¾CXJMøóÈž¶•1”cŸëSv>˜pøàíÅg‘«#«!F`°õÂN£aÿ‹V'Êœú¼E¦ 2§~ºŒƒ¬ÎëÈ€ª dÞ{12Y‹ ò*p ™Fymi)<ëȤkȾS…F•åÏ«ØPëä:l\ó!©ïÏ‚sWÁ)ÈìWÐáé2Ð99“†tà®ëÁ6Ð@ þœ´ÓóÌìž!µläÂd1_ác?Œ[}—2?ƒM‚•«h@{¢M=3%JÖLá¾w,=eª“4ÌB7Ðæ¥ÐlQ§3™¥çVúOþlšªOÁé[œ‰bmþþ±-Vó÷X%üzvú¦XÊ6¤Û­€ÁÚô \ c'ðã+¸«Ó7i9Mþ*]—±iq‰((n“¢¢N^LWb$Ô2?*¹y.ž%SP¬ëû 5 Ê7 Êûý©äŠ•RM#±·~ÞM5Ú@2Ø€¤Xƒ„¸ð øª½’57Ϻ¾êç-­o–7~^†lQâç9é™s¢=Ó "PO úzÑÁ¡›1´Çï'ˆ?ñ(™¸§ £ßO€Ê±MýÙpe¸P%A¬n§”ÈzYÁx (ÎÞ™fßiF¬´îW\p¦A›¨QüÐÄ;vEQÀµAÔ¬“tÂçŠà½Œüµ1Ô BEƒw,*…ÌGw2ý®PÏD*ì®ÍuYTr‚ n}á”WÉ-*¹E…ê+A *Ô Ê+н¬Y%Ìål€²çãðÄú+ÂXP GAYÓTÁâq²Z< ß]dJøD\aQøÒ&èQP8QƒÖÞ‡± j8MÛ¥ùÌê4 Ý¡Y¢ Ä cƒ †áÍì#{§;ç©ÎÒs‹ x3·@1™2R™.À€Ñz Ã-Ò]ì =D"e˜úÓ…Rcüµ(<Á=á?µQ†9£ Ò>£ ècclp4Ê æÎUP¤•ý¹OP¦_àŒ“‚‚`Ž[1v3Ç]…Á(ùÝQT13mQYÜ}yÎCU * WQ`¥ç[Rwx•¸âcFE ¤!*8Ú†Ü@å0Ái±[Î •ÄTþ»¡Ã³\tæ0a·‡ÇÒŸÄÕ ×›€¡Ÿ 31åM‡®¢²?ãÁ,™@n{ QIãÖ ÑÙÙ’A ÁÁXÎ*.‘Pc™u¡O¼pšXæ%ñ‰.ˆM¯C‰çÂ:0ô` ?Vg6¡ø5•×#™q˜1’Yؼ?69 ÎK"$úæ~£Jrœ‘c‘jâ™6ÁP£Â€æ šԓëÑ<Õ³­ˆ÷–Þ³Ñ<ËšT5ûz°VQ¡k ²Åã¬OfZIJ¦­t1FÉ™Øæˆ5Qò±“ˆ!ÓäÙ«ÕjJ#¿ƒïªUe†¦ “G `Àt°ÊfϹR±u‰cf.:ÙP_A¡XJç Gjü'b'ìw4©{y%R~–^ì˜óy¿|H> åys&ÿpÔ–r)ÿÆãš¡åa ¬ì– ´‰Ï1Ç÷uË|Ä9=¶tA)ÿa;ÇNéƒ2åŽ „ƒò.vzFÔþ1Ø !íåÒ 2nºdiœ”SÅ nßÚGrRCÑA’qtfû8ý}Ú/3²–0³“%uËw¹éÒ%«©u¹Çn÷‘À(<Üc»ë"ÿ˜s»…è1!ê•ߊ„H÷éQ®-±/õ¾4Ò1Çã˜9>¥ì™ n”å-@}éŽê—¦_ŒìF=Ï:ˆ!á\zù=nÔ%Ò’SŒÌ¸0ýŒu*Øø~ƒ æ›ûýïa«îm3^fý²ß"ÓƒXÀi›by‹ ,¿­ºÈc)„ =nÖq×±ë°Ðdž”@óvŽíº^¹½‚拺Z3mO€uÒÄ„ÈæædkJ8R‰M,¤ ãwmµ€™7°oêÊ*ÃzÂÄ>UWÉ&å„c£ö¹Ó*ÿ\ìʘ[n ²ÿL>k–“™&ÜâSØhíh^!iÀÓTB¦gÜ© HZµOúŠC‹NõT&v8÷ß„€£qó¯ó›Vßä%Y’ýÏŒÙÝâÄ[ø Ë€-?úUœ!-6 þSÉŠ ) hüYhX˜Ù5¥)=Gêð¶´ËÒ2Û¬•n:±ów( ±Ö ¥åãNéÊ}¶tá]Wzûï@£4·¥Rº}N¾&û¸›…_cá¬)üï£\zµÜße Æü¿o*y+]5üw™h­LPGM™ ÈRÎâ?‡HÏßlEk¾M üþ²&©‹ÌÖÏI…ù§GæKÔòqæ]ŠÈózÆl}ñ!ý“)fz¦¢’SÑl½¢Ø×pó+°‹5濳Þr -Þ˜W]«´Ñº´ñªüüÒu+òq»Ñg6ìh9±Õ3æ÷^í]úÑ—Llí…±Ù=|©rØÛ‚½L¾Ñ]WP{XáoÉÏ×a/µö2övh"›¶œÚË`/¥½×´±—Ò^ØÚÛ½ü{;ò3¿jÏÖÞí½¾ÓÊ`î6©Ùþ9è…À`_ n»ˆ^›nc° ƒÛPç±T/w5%²Üî6m¹ºßì ”êÒ¾5˜Á |úß½0¢fç3òjð”WÍ}f Ê—VøÊ7îKÒÁлŠà/™Jðû/hÝÿ×Ôz0Ç·ÝlÙÖùÝ›ŸßõÏè×_;Håì>ÛúìåæÛ†Ö§üzKë32ö>Kð-p ¡9JFNgÝH1T£ÀDÀpLáRps˜|*õ|æ sf»gJqDTuŽÍ¬QƒúX|‘ì ¥.1œ o˜ T60'kê!ô½Èø“Ùh7ëhW8\¡TC* -Púnl¤gO}ŠÑO73Xþ¨Ö˜J†¹Ò<- ÿù$¬ä#È-„„eþûÑ„2ÿâ‚B¡ÒZ¼ëÎC.ï@™uÝ:öqeê´c¾T&iÒ QmŽ¥*r¿zïÕGç\ àíÎDÜY¹Wád[ì,3¤¥³`†»÷Qå^e–°ñ!~uëy†&‡uÂ@…&*\y ÈœùlÅØ´B†Ù’ ^29O=4ð˜¥!êJuäâp ¸®¸äW#ÿÍú;U`ê‚(œ†EA¼jæß;¢„ŠÂ@íÁÇ)‘R)ˆJ×½:_öpøQð'‚ƒü%àæ*RÉâ ]=h#FÆ’UàÖ?Á7@„hʪV1rÚÀæòä`îËgqW~'ÈAãÿ4.(ShÆ>î‹Ï y]êÙÑKVp­îNˆ»…jbÉA…CB" gp.Îbtä)i}ILà–2ò²J¨y”üÂË~)žò‘¸®G¥€rÙÛôGPç4 >åòî¦cq¬ZCÁ|¢§½22%ðçâ0?¥*ÀqVæëÖ«x»«Ú›„äûGô[âH3Æ×)Õó.åÿKýá9€·áö^ÜÒXâŒÔ#UýßYSnœÈ3?"þ@¡ˆ)wºÐGX`®}ÌÒ8:•ÞS2\7_ƒc„7D”–R‹ƒ7ÝR½ñ[~“…8œµ8Lg†ƒ~‡” —.œ‹_‡´@¼I "ÈÜÂé=¦fn˜Q|\@ÔeÆó-¨+•DìMçTv§<ògˆ4}Œ¢¾%OõÀøw¦xš9ƒ¤ˆ‹ãd$"FjÔ•»1‘xD7yɬ€ø5òýUrNGÔñç¨øxÇ|Y¡bŸª9‘ìšsýS¤ïá˜x3.Fö¸,÷óÄËÀU;&rĸsí©^‘§Rû¯éùX´vôH­Ž 0µšB–!¥É„n˜cbÏl·ƒÈVÒœAHÄÓ™,X:—êªá;bp13í»¹.Ÿ6ðœ4ÈŒÅ;‰ªi$¾Åy#D3AJáëàý 8$‚C>¢LŒÝ×t²àvÚâÀŽŠ/‡SÆûXÇtî+Æ¡bŒA7v n“[$PÝ¥ðK»3$ÏÆ39ˆCˆ³þážn¸p—†ê4“F…6Â<ÓCœ:²92©)ó4¸³Â¡RØç³¢KXËö1í(ÛÒHi° ÍÁ}ùt;åöºÊLÖ8ÑC` Ü€ÝÆ”2ÝÔŒ0{¦Û`ø€Ç ªbĎ΋þ¾¬™ÌjÞ')-˜q…áÂVwÊ'Eߌš}ÃÙ†îeÙq §Ñ œþ%%ˆúÊ[7ÛÐl,s3æñ7™kõ¨y˜©Hy*ÆÓ_S(Ì&ƒŠómÓo‘x*¿t‰D)ϪP Å¢ÿÆÑ ŠþuPðÔâý ,Ä×<‹î³X¨;Vÿ4h\*êš$NwNü+œÝ{ºŽ‡ºâOCY®Û!¹5Ж<‚)ç&"ð%i©ƒ0±!WÁ5ÇÁí#äq[‘ÉdêDÚ12jO¤Ú1è9ˆ‡"€Þ ’­¿£ÄoFÉŽ’‘héïÉ*Ñï‘à2ÂÆ_ <&£Ò$ЧÌYªÌâ™nõc¨ˆëÞ2y õ²=ƒ´4§EäàDнMDüç ²:ÔpüÙ ~&D<³Äj…Û;‚¨Ô ,\8¥>•'þgn“„t‹¤Ô9õ|ËIÞQÕA¤‘‚¸ÓI.äu—üSªòd&sV‘ÌBsx»vJšÝ y Sê)7âXÅ.nÐùMLÉ 6C9«:SÚ¿Ðúž“<Á>¥ñ~ÓÞ‘ §UD&Žo Ü{ÆÝ÷gŠ‡ÌšœWQÞOîÅÐVLfR­#ój"W”>„iÕøIü0°ÆW,Ü…Ó`q6Ô,¤tE’9±>w4âM4œÝGh`õ4œ-*%rß•5¼Bá*Kë`H±@¬C1Œ_ …·Eºùpj‚™T(¼D®¬AáX(2™Â«vzucBÑ:ÞVçBÞvrå©'¬%€Dæê@Ù?IGÁjv•ïÅy­M¯HTôììzîQŸP>e ±1¹.›É•H¬Í®;ô½ÕÏ™­†ÏÀ}^Ó\ ”†+Ìœ‡9äÍÉ$P2¶}a ¨c Æoq·ƒr(èÉ™,WËÉÏ-ßàÛµ0Ûâ«¥ u8&² ˆVƒ£Ö:|€ð`56öt¾§ tá!V)µÊ ÈØe=ß®Ðýu ò€@È㨚Tž¾.3ª™ìË¢ƒÑšÂÏy4ÿt²Ïg ä]‹i]¡€Ša¼F¡¨<" Á’ʼnŠ ZAq˜{”[±P6N¢P„ŽÊ¦¤õ¾˜o Øs(Öþé*Ô_VP g9T`Z(D1—É3¢’ô,ž@b¦~S(dùH©˜_åÉ™Dù½˜ZÉi¨ $e4ËúRæÑ!“ŸGÔï ¨ÏXÎxó”ügožL‹/ƒh‘øÍ»ž 7ìõY¹ê*¾ï$§ÁÝ$Jbc"g:›žû3™MßM‚9°®ú±æ[â”ÓÀ4ýi¦Ô³á½‰fU¿ú‰ÛΨӀ¹Ö!…mÙÏ2£þÛfÊǸ—¨Îá‰\¥šv”ÜIjZÏÕꚺ…‡Tv_–†0E=å±sˆ2¶ðLÌðáØå%Æ›>ádVøà\erü,@—ÞI<‘ü}¡§!$š7Þ€ö þ{²ØÊel{L€T»Ûà¾S„s!ϨN€ðÔ‘H&¡³Š)zdz׿ÂáÖÈ‘OÐ]êÇÐŒGØÞ0å²aúØ'@vž0Ó±41ÜA»'Ãó>õS$ø¡l~x Yäþ©cÓ0yt,]ʤžù…¬ öR€t41»ÒÚpʘ+È•ž :œ’°NöeÅî­åâhbf KÝ;˜³°_Ÿ§ºb‘:¨Qà (WQ}‡§nkS¬àØ3“%áÀ®Ò%$ã+¢aê¼pë{º­4É UWäYO=ì9õ±¼oPfnÃŒk~ú ÏêHZ8Iƒãsȱ¼O,,0Ä÷r2¯˜{PAi\±¤X‡"ȨtâH7¢…"¨ñ63ÜWÊ× ~r’B¾ß¼¯kè¿p_ u°I„+žSœÉJé°(íò«¤œôã¦îbÝOmT—DL¬,˜KטG­ÁÇ~YSd˜±g³o O½s Âã ñKrïÓ Hô˜~Ì”nöi¤Ýp-›Y2RVnsŒ#3ˆ?#6lºS¾Ì?–]4jP­ÇèãGLÿV÷3YþSL=Ó“¿Óþã™É7/XöÂT/ÈàÚ¼0÷f«*ŸáþÖ•¿Óõ¿«qoüÝ/£ßáb Ì¿kþ®åZL Ô"þ:ž÷u5ÈÃÿGvë\P0}_þ{Mî–¤~`ë¢3½’5ýˆÇñF_0Õ¶“ÊS‚“Ó‹>ýõÕo}6¤ 4(¥ÄÍö5 ˆÇo<ùù ‡ -µK™úSJÔÐ?]˜ 뼋¹ƒYoÒ×L)ë‚W»ÆÜìªm_,Ê‚ä¦ù&~«½uÛ.uQž±íƒham{›¶½Ö¶¬à×lc×ÙßÃۛƷM¶i|ú·ðÇ«øgmgÆ«I÷aÍOãüÝ•—é¢5ï“XŒËÚÆw‘]ge|ëë¿´ñøŠqp$’»É_Úz˜oXßÀÖóYO»L6SoïZàw@‰Øk§çYÿÔ -G¯â_eG¬=)ïª9ÆchïSʇw1BÒbb]˜PmŽˆ×[}&žòðÏ«øÇ7Жb¦ Œ©àêw‰qÁmk£·i£øËØèÿ,6øª #Â[6ŸåW“ˆšQLá–é{ö¬¸ 93±rR>öl'¼"ƒ'¸›R EÁW#`&塟û+·ø”úžøâšÓ_jž©tî)Žx pš1§Y Àƒ¾TØ‘Kˆ°:\ƒ¨Æ‰ÓKÅH:-–$Ø4'É\º.Á* (ÉRCQâYÙ'9JùÕ'J.QrW(=~ N¿šU¤H±B)ÀyXûä@i¡(í7˜_*NxUPxצy‚P Rb³Ô¿Œxõ<{ª{:©TÅÒøÏÅ÷T"p¡ÉË—ù -Sg1órJfŽjÄ\r !ßjJFv`ù¤.À¡çÑ ¦j­2 5»?pAQ¤.w¬p èûĪID¥ÃÍ­/£Ö0GŸ#Kü‘ Áðá݆žÏ׊Ç\rÈQ—F“©¹nÀÙU¬¶e)Ž,;ãˆ=Ä$[àJá¨ÅÄ…hl šÅ>¤u". j×9N Fï@ÎhÈ!<}@—Õ’CŽ4Ê=¤» Àq8ò™(Ê9rçxºê+:•§àHÝ¿MäK"±*Êè_d†À`Ì}Xœ8-Ð1qþÌÏCAf_sУÿP¥ÕÉ]2ˆ±é”Í0— ¢~<@:›A4îf]ù{L1‰Q7cTN®ˆžw³ñ ¥@älpÈl'E7›q7å©K-Km€"qä°‡‚}DÙú˜PcrHð ;£^DshE÷¢±žýD˜ 7j™wuÓQæ`WV&3ʇõ£1HYýtÔKå…,zy?nÌmó°i!7!…ýgø‰¾B-=àÙO ˆâ fÖƒüz÷0ï¶ KŸ@ë!žÙÇ]*yE–ºãdº!¸á“mCuFlFGˆ‘âèbÞ"RàVˆˆH¼k ±„’'/ݶo“Žyˆ„L¬„ lzÁ¡ø+â3(&âÄDÈ13eÈO@»¨å®:sżlñÄÝ€Ï$.<‹ÜM˜¡æ |ß"3 °9Ú"#%¦fÐm.‰ŒÏÔ?²Lî+4âçu6h†ó.Ò#Àô6Ç-6j.‹§ÍI󞢓º/š*¼±]îÉN|® ø–¿hÓñÔ5&cd™Ï;*®‡,›HÄ}÷óŒ!¯ã¿ ‡c¤„ä¢ wש/ÄC‘^ƒ‹ÕÁr‚¤H2Ž:5àù;†2€¶5²ã K-¨ß6ºäPÒ¤6þ~§Æ™ò÷¸ÑOU>ð“t,MêH5HÛ~ZìY|d0ŸÔŠnñLs7ŧ6ÝÊ{6©;sár…€ä.:œ¨ “Ûä1ˆ;þb“‰‡'->8—YZ€<ž;ý$€|œs´Î!¿[LfÓB ö-!e…‘·‰QÑ`ÄTñW0šlbÖXø…w#?G‚Ä`×0’Á›ï\Ò‚ä³I·®pêr…’<þIdZ”&µ¾†Áת3H²&R„K¦S18ŠÙ‡9aÚ6½o§<²¢ç2óv¿ë”…ªKâü$´1©ÅN)i‹(! H*#™ìÄ(¥+J}üF”8aó8gÝÛï€cN*H‹cò–tòî•X÷Åüi1’9Ø0ÕÍçG9yÛÆUZvQèô :a:WÉ(°ãh&ºüÁi[gpHŠ3çfp༦‹ýò%ÄÕ”Ÿ҃Œ)Ð9À!GÓ-ß¿¢¯BÔ/¿½†Ð¨AÈ@—•ý¤Ah¿\nä”9•@Lï FýŸ #é50*ûå~éß_aÔ-ÓFN©^¿‡8ÁÍCj‡ÞŠ|Û˜rÑŽs;à¨íÃB2µzwÒŽùÈO{">„`üÜÓÁ6ê%‹Êg5z´1Òö”³zEž‹i_FT~‘ö›‘vPéÌÞdƒ3¡ t)͉oÃ-޵Òæ`sFHâ a>‡œn§s¬Q+FÜ*·¾]¸kcMÅet‚‡\.6åÉ6áÉ4©&/D‡r1—SoB:ûÜÏ¢cÙ-kèDkè,G-1eáä :â æWÐq×Ñùp 㬃SÂè3à*ÿaª Ô…·3fKlÀñ×Áñ¬‹<4ƒðò¦·ìl'þÏ« )»vwØ`¾|×™™? (Â4½ 7baÈ1å¥dž¿Åe»>÷›>Þï©u€ææÖPIÖÇÀlgNò¯Â ¸ÈssS€!ïù¶tÀXvwüûÈòr¡X¬Oˆ<0⊵³<[08m\ ÈC Ýw8Éß¹ËxÌ47.Ð~LR¼ÎñN\»S…å–¢trV±n¡þ± œ•¹ÀÂ;|·[pæVüÄ2Õ ü—'Wpqn• ̽@3 *0úœÑœ~!‰ñ°·† °.Sâ2ÿ$\æ+\ðaþq¡1„ï—…âr[þhq¹#æôU#_ãÇE¨)reT¼{:µ?7²+J!—js§@†O ¤ìa”fbqñu I#|#%¯|_œ,3H³`ý •B»¤BÖ[H9í™*´ß—ÊLd%€…7RDq álH@ FpA´¦qÔ• ·ƒ´å€sƒí"Ë.‹Ká₇¬ŒFXp2&Ô­Q\@˜Àƒîk>eÒ\ìJ3„$ªâ‚´Æn6ê u£+ŒƒíAã´æšFZPX *¨€˜ÒRc0nˆ dª-»3á8o§Òˆ+2uæàÒ—nJ;NÞÏúQ¹ŸL žÌq â¢õ;æOzÑx¡´ü‚½”á—aš¼/0•‡å>ÚKA4 #id?c ´ÏÕ ÌÙ„%ÄØ²¥ÃLk7xCrü]†%òÞ~Žé¢/í”]y®.õXœ‹•=/º…uýŒMcµBô4Y-¯Rõ~ŽëÝbü½R. t„Õ5ÅÔ\ ºB­ó«&q¥¦c}ÆaVág“$Šˆ!SK]‘:^eA®z:õeTÇÊ;áå#ðL9˜K.¶kFT÷€Y—VúÝX|eØ ’UÔÖS WS]}äb]ŸfÔªv7 3ôôØ +”®¿õ4çÔ™fŽšÕo¶¢3šóŠšï©E ©ÁBWOÛòdk™·‹0©qb,``ÊDÀ Grúĩ­¹WÖ‚؉W_fDKšÑáZKK­ @ÚT¦–ZCš¹Wg¾¬uÿ„«¯Gòˆ¿_’ì" Ç0=¥ÈÍc.¿€Ò>>iüé=rr9ØýbÅè°tb¢OQ»úƒú @‘Š×ŸA"§NšÕ×kzýq°ŸÌà÷#þý™Nð.òð.Œ†8Ä1ÌnÇ|ì˯Ã{ØÆò’Ø]IqwÅMí.ÐNœïšá¤£ÁH˜á;SöCì~½4è&±7÷“-ÔG‹ÈCòƒØsæ~”ÌæP—z¼+»‡m¬ˆàÒ1ùÝIî1²k¤û Ëè$¦6e’¤Ýwž§çï!ý³qPþû3wq {É›ÑpÑ‘wý§^òöÐ~‘t› ¾a v_ÉÜøÓ®¹ÜBdl†Ì)R¥ÇD´$2 ž¦S£æra¤æºzð¿vçºùê:³rz =­ ¬ËaäP‡¼ŠAÓüàÞÏ9óØá¾33 ìá-¤iò¦ Þ]mæRŠ Íâ3°ƒ|IS­éCS&ABŠª4y q6è§ù3èWþ`ŠÝ®Ú›ËóþŽ1;ØöoóúŒÉYµ^œüó í|EK½‚mj?jÊ}Eé;,ú"?Z+¼-…Š—ÂySX•[X˜²‡²ÈØ,ü‹¸ô‰¥Ùx²YZu^XZ¦ýÍ^ãmw[ÿ(üU†š²ò–Z+»õ Âh‹¾1HÜ2û*('Ì3“¢ÃdŠ¢ÓUQ/™ÿ‹É½¶XÄkÅÄ:6„~‡†­Þ ûuÜþ=(÷ü¶õoA%è·[õ—Ϫ5™´¼j  pd={ƒ+)3úHÞ Ÿ`ç%«ù¢Ip0ÀAD*À;pS #ãd/‹ë覿Ä{…ÌÃé×5ïOÕ‹¾¡¤/3ú´17¿nÌ7}r*ȱØîšêÐ ±Y€Ä˜ªÉN8ñŠ,%ûìôÔN9pÒW¾j ám¼féuðÄ"ÚCÙC¯oênºy¡›j(¨øØ_Wœ°ÐC“˜†F¿Š¯‹¿˜XÊ×{©åÛXK;îèJnÇZŠÿYŠ`)†¥˜–f.D<Ì®XÚ…¥éš¥-±4[Yš·–â_+†ÝØZšŠ%ùk뫵Dº¶ø·(áS§W,È—qö™¦ÉŸNkdµ¬7—þ–¦1šdW ‘æòÏ4Xüüs`Àdmv®k.ÿ+6Wö™±YÜånÖŸ „Aä¤7ø²é˜ 8ÿ†š¥{¤ôe7ô¤KkЦ‹1Dý{ˆ9 ¢¼íG”Ç=ïǪh ;ˆÖÕcʾ@Â:'ëš²“q4Ž™T™'‰Æ¥kÖ=¦€ê(lËÊÉ‹¦, c5>µê—Á„zÉ܆~nÛiõ"R\gf+·©€‡½ýU8ï!Åai˜Ei›ÙZà`íOõqxú¢Qê+xáþóÀ muòæl8e¤á᜛“û̼d4¡îì#‘’Šá΂Xó*y³àjpö{z+ˆvQ`x'¹-ïwU>8¹ƒ@ÌÉd"B2 ‚‘¡_Fð4 “€±§ÇL =P·G>ïˆ)îéAQ—QÞ=†wÈiS0˜ßé6H²§Ž#GtÂ`ªfJvøŒ F0{HUrZš´Xô±¢‚R|?ˆsÀIKIAÈYc˜¸X  '¿Í³¨r ¯Xýó=b1ê¥<¬Šd<Ä‚l(äæéqë®@ +³’…²,x^r[OŽrJ†¨=UåÍc¦r†*=.Ñ6°€½4Õûî!^öþWfå]‘tFûÙPòÅØæ3òÙzñMi¸÷Žhƒ¦ÆNºM0þ´Ïs­-Ùu`ˆ^ àþÈûŽçcñVgö$°¸ö×àÀ‘ÕhŽü8n(yÇà:8n(ЛA6&¦åsná îþ……Ü®ð€ŸúTï*âW>fn4p Z8ÕUÁ÷'DþùQ3N27³c ˜"Ì Sø"© ¤\ÅÛŒ,8ÐòÁ6 ßÀñx$ Jo‹³ì݇¡æÉÄŠô«x¸&97аݧ{zðû+nw\rp‡ ¹b ÷øÒB0Èêûï[æWj¥·y©Å¸(xìØ½DŒ•¢Ã!«ÄÙÄJø¯–F2çþå$®B‚MÐyŽôP#Í™d ì«CºšýÚÔೞ¨¹€}Ÿ›¿æ)R"ëÔW^±M›dáÆù¹Âakx_Åé?.ÚNô6®RÑ9/_º„„D =ƒˆÌÎsEÄ‘ù÷_ò$ª*TASÞèyENRÚ˜! ? ƒ G¥yƒ¾e§Yg¾k˜tgŽã152휨j½ ÂT92´ÏtËÇ&;Éjž='i|zÎ?lžsÓoË0kÑŌۃ ‰nàíëΧ<ËÇs{t3²bù.ŠÀÇ‘›çsjI„¿”.ÂιË=¼vYû &G×c‚™ÉÌSŽ:"ÊÉãH3$ë¨@…ïÃâÿ4°ø–a2Ã…ÅÚ¿‚Ëîu¸ gÓ —Ý+¸¸É¢ÁÅ¿P±\ê£ëGÏáçÂQFzŠmNfL• Áúø)öL¥”óvùÏ Íis¶BGëCè¼B”n¡;OvÎ…!Û;†B;†F«1äµcÈ­C#+¹´cˆâœæˆd5DÁú ÚæÁõÀÈâûÜL°˜òêûÆ#Mþ¾òb1“J¼—¦=º–Õ›EÊàë‚Tª«‹¿òb¹diz”÷P°Ú"&bæ $¸9à÷ô@®Fø!içbªÁЬ– eñßË»2“=â¦þ” pm&6ã X@*j@xHHH4qcø†­ÏÃ1Å3¡ÅÙG¨x½´–ɬj²î*Ýgb|TšhkÂ#ã©à$´Ìu*6Ò-Ë$M3šS§™ŠŸÅãÃkñ <Å2ǽˆ=Ui8K¥ÃuHJ\É’(c!=ë©QDã¦E„‰î[DL÷çâ( RfK<1DÌUDþy r,:ÇÌ“ù̹#öoš½Weù'Þ¡WQ¼JŸþ½tÏú&2`‚,⚤NªãE9C2^²ªñá÷ôÇöu¦Rj5HÄñ´>ëÌ™·Xxvê6¦Þ;Sg~ËlAüò´…¹qŽZ¤‚ÇP¼TÄÈ:<ò›‰÷ñ®7uí¼«ŠžÀbÕJˆl.ôÇP°¹ìpO§Á!±ˆ‘FhK§]´,Xè¬+ Þ>D¢fÒÕçB\Ë&î‘'žc‹.Ùâ=f.‚ˆÌÿ&l¶âfÂýÓ@µF‰äC-à ,fîœr˜‚EÌ|@Ì?„òŒñÐ,,á'XaA}RÅ"`z$Á‚IŒhÁåDdH±H‹BEÑ¡ +q°Ž…,úÙ‡¡ÅBŸ#ÑtKÖ¦fIJTOU°pºÝ(½ eyµÿ&PUÅ"„ÄÙ¬õ1Y—0ª‚xâÇ!ƒ"iq—‰T¸ ê¯8$^"Í Ùs _ç?¡ç0ö¨"“NîVü±Ï 4û$ œÊO$TxÁ¢_*Æ•´,`$~ÞŽkŠsˆ÷ ½˜}ñÄ+×Ì,Œylø]•žޥƯAo`‚sùa\i…îíÁÕÉ›×§‹@(£²â)<Ü@¤A¼à¾¥¬eÜU&#ü~~Àc{Q}GQ–«Íäܵ‹mbwä/¹W»«$G8‚X¨ìžøx8$*:uˆï)6Õd ‹Í’«šú.°Á@ú‹ˆ”bEÌ€ûq¡¹1)Rföl"è$ 1åÜ-ë 9(JOûÊÚ:é:Ny¡œm(o̺N¹¨G…i¥Ó,ã1/€òCyð^65xJ­¼Öq oy5çNö¹ CVRAeï5áopÆÅQ€J·Ò¦û9Ë{en§`e#=)¿Kß¹$#›†9 ƒ/ƒG“:è]Fó]±BÍns:Èx’Ú]îIáÁhŠªd=þ¬`b."Â$ýÿȦnùp¥XlT×¼[.3œÚÌEFuÂ3‹ÑS`„2ÍðËÍÈæ*hK†× |w¿\¦À˜?²W¾K' éˆÐO)C¤œâi·Ì5þ` ˜>:ñ°Áå´v˜GIŸÛI✠2ØÆ–Ï“¹ÿÆÙi¸Ë:’{UVtxÁg¹vë{›+BV×HêÖïIŸ>’r¬iêÌL JÃøÑ# ñÂó…DBè¸èÈúNNS‚…`NR·ÚƒÔ u_þ«ß2ÔÉyË.tj&o£˜MjW94þ`Â!ex¸@¨ª€Xô–›RÄfOÕm|¨âœ¨ V?;<„úPzƒ‹à)‹Y‡€|\ƒ—qÞÿä ªž& Z"·Pl&Øðsêèy9šÈ¨cy¦ôS/ïÊêMÁ®€Fê&ÈÛlU¨î¬dìʲ˜œÒÀKø§£4½æ2iÑ [ÇUU‚Ú­^’ KᥗAö€%ë,VÄvjEaƒ¯ó÷ŒÙýëØþ¬1·&æW×®øLT„kÎßS™^+À°Ðr¸Öã5çÙkòÊX¿Æº“:{æZX§ÏØõ“˜×ŧvóuã[†˜ùx>윿†âŸÇÎý%ä ²HšHú9<ùMË >-‹ × »ŸÙÎG €Ó_oÚóVí}Ƙ›/=¿Mï…mVnúê+¹Y™ê>5]4 ¤‹1Ûàf ámêÀ4 ;h¸‹†ûe^kx28hØIoJÃÛ¶áìJã5\|BÃÛÒðH3™rס½ ¿ø(vþ² W?}Ã8q9ûk¶ÑÝ_1fë·åÅzsq ¶(îò2YHf·­sÏ:ÅÑî²3´xÀŒÆ ü0Ð|ÑèÌl(?$¹ƒS]§4t€Çˆtns‚ ã‡H }‘ü0þþÜÅÓ®#‚` ļctX­‚>´ˆàä½Y@+`xˆ •;Y8D¹”õ|[$«ˆ¸3tnȤ0¶ hx€À JÜ~9w[Dš²ÚD¶VÙF >ä§åMñLèû ø="¢ÙgБØ"ÊK2_4ºÙšcǹ@„й{Ö<ïIHdeñcåf0uÎ!Y!Y)ØëÖ3kQhc%8m¯zá7 q$냀yÂs % ° !CÂ5ÿϱOüIòºØÍF¸ 4 B*$@ ¬¶MÁŽô“ÂöW{c ™P~ˆ.1uù”DäqHìÀi®Sµƒ$ë±ÎßU(ï³üi›»% äÉO´YƇðÈž†}-&1¶1«DK˜ÃÅçΑÄCÃÇÜñR&’a÷Ó`ÂäpŒöÆ[|»`'¼cþ{Yê¥PP qÇ%()£Ä¾ê((ª±’=ŠŠµkwlݨ¹8š<ÇG§¨CP¬Šª((ƒþ>“J©ªxÔïŠÛñªèP?\öP%‡j9Ï4R5ºP5ÊÝP0˜ô(ôÍâíVao2ˆÉ8ÐÇqkD5¾É–è˜åõAÅA^¦þxÚ˜‚Ï—¥›(1îàdi¦îŸ¼ÌNàú@MæZ÷5b¢:A¹•vG§ «ƒ#é§=f¨ l»uГ ˜ Ti½ß•žåÊ ñJÙÛ‡s˜o€YPä뛪P;wuT_٨ǂâÈŠÜ¢² ý¡ª(ÈgŠI¡ºçŠÉbcÛF¬SÛ:L)LÉ¿úÙ)2ÆŽ"*Òjþjoð¨Í¶]ÛuC)Ù‡'(±%‚>:6‰,(C_@×D…ø2J%HXËq rPìè9ÕÈ/òº§Ên 8päÉtƃíïȘc@$ÛÓ J·¶¨4çú ‹f©ceYìa‘Q@V*h*˜ò3rkMà?Çqc£·ÊCHx¸™=9ŽSs<:þˆ=’ ÛÃLàóc?E*¦q_fe³XÏ ÃIÀQü€ª}õ_ü;ܹóBÑ9jѹýt˜6½Eç½ç£3Ù@G:°ŽN¾†<rl Ox¼º§hà4àFuroÖž«/~rϤ…G3A*àç+x:+t‹N¸†Nà߉I)µi=( ^*cBÕG¡°ãÌ[tvAT¶è€)¡|¦:‰Ü;NR-O¶%ðL1Ý%±b7…£‡ØA[©ïL¨n¢^63:p’“úçÕ \ZÈýX‚-L>…jÏ-±ÅY@¹Ôåád]Hat]5À!·hY VQ:>ä ea*æ; 0jDy Èï¨8ÅÈŒ¤Æq“údáìBta!‚4Srû šÍ•.r"ÏBtIˆ —ø"Œ– Fòv›#ÜW Žù\Ü5†> ½û)–v”xø/dkùHˆú¢Qæä…e_Ý_2æM½·f&¨Ö†´xеa¶Ì&Õžª‹?ƒgþ~½´ã a\—Â<:Τ0:žY©ðûÍ8cˆtsœ¹Ÿ8Î>xâÍÌn´ ½³»šØó´÷3óºº;ô*ìÜ.ð\öbÍŽRèän.,GW¦}±ÇÉINЃS¨¯g+§ kíRÚpFŽHH)trÇÓ4³»ÅNïKj7’‚cÁùNåcÓ‚õ›Â(n`6ºêñ0…\„çË´t_'.hÆôjFýx—IΊK·)LXþ+ù`Æ]øgt‹Æk¡)¸odê¦ßàzÁ‚}z›»½é·œgë+¹7]óovãÖ ”… Š,"¡[Gy›) Ãm©íb¡Ø\,Ø)«amðK«äZ¾hšÅ‚ bIãèª6‹F,Úqô_‰™‰ÒB°X8¶|ÝÆ”Õ1$ñI/ÜŽ!üf× šæ¤a(ëôîr›ý‰ 1û†9¥H"tü<û~yGÞ5@$Ü×Ì´¾JÊx)õIðܹSØ5¥,E¯@r‡4zB"ëDSYHBh ˆÑ@â_$ˆq‹+¹yÀÂ-$¤ñ’ÔHª.*£b)TÁ©5ò)LÄã $Ó+$~ZYHœ¨ºpá ßÏ„-$)R(Ÿ¢ ùÇlh†û30+ì2ótw4ò€é|h!Ù]ƒÄ#·DSŽ0€9Dj4Ý©é9æ”h½fÆ–%eNbˆK,ÌùúO±Ñx BŽÞÔ“æÕ¡©ƒ·Áä¶sbœ¿qXÔç¹}Cj %¤ª ¬a%ðpÉGá¸6öÍC†+v×0 L²:XLöŸÒŸ 1Æ·Ö1AÜʳ˜H×bÂðÒ “˓ʼnÛF¨ƒ@1Á§ì˜?æDvç®ÅÚŠAP@‘CZ–‰‡À#2(ËUó! ï.HøõT¤P™•˜t›¨ÌX¥[D%M-ÿÜgŽ{Œ¸ü:|®‹p±xSôÁ"£!à u@¾Pm¿6‚ø#&ÕùyY¯¢“àGW1ND,ÏuÉxá–Î!B ¡Wõ[:’¬MF9/@ ±AN•þÀª¥f”S*€Ú鈂y=ÊwT‡Öaˆtd†é¿Fÿ£pF“Ô†ƒM%XiŒ•`¡[t‡ÓͰyЄ»7°rõìbÚBŸyÔ†®Ï ‚+TVÚ°ÁŠÔåx:WuÆXÌT ûX =¼°ë*†ø‰¡DJ?·1ñ.ùQÙºíà2Õ².60ÐÁ`PÀx|TÅ@tó€ñsc;€£Ð/Æc˜eâÔsL™HžZv&æ̱SžÆ”¨±ó·S>V2 &pîa¤Tåp3ä‰LÊ}=¤D~ÈjÏzåiÚGŽY» c Ù£´–îFÞ‹I"à†—oë$îH»œû}¸_:Å;1Q»+KP>¤sØ£’Òìø1»˽²ÐÅhú´*õ0‡—Ké\ç…AqhŒ•ÂŒS»I%Åò^ù­x@|ìÖO)§ÍÖ]¿ŒôâÄ)ß->ŽyHL"Åçíjêø¡îšŒ‘=x|´Ï»åwÓf÷.ÆC³°¢ƒÝ·^:àyfé€6é°nàIO¾•97¥nà-{Å6RØîß1÷˜u :Hã¢Fªšñq Ž3ÂGiLÑ1X#lŒ Í¡EÁM\4²— óÀù™kÙ`pð;ï§ŸâÞ,¨d„8Õ s¹ƒÓøÓ(÷­êP•QáP\ޏöÁ 0ꌗ¿d[°I7°\xº«ÛÉ“(ÎxÖöž‹¿^Òfdä1m†«[ÁLeq!‹Œ|<Ì`½‚믉W»+uÿGòßWV×·äúî? Eäkü÷š{s3ÿÿýÊ•öþi$_ã¿×Ü«\Ü“õ^÷¶í½q™ÿ^{/ã½ìš6å-ô5þ{Í=Yù~ÿ~”“ ÊÉ¯àŸ¯¶º"ÿøLÌsÞÍ ¹k>‡×4…L=\Üçþ.õŒ¹õ‹²—bÿSSpãçw‘+_z¦â§4£Eì^S÷Ëî0^ß\:k¼îÅ9r× ‘¬i/I$®ÚA#™4²'%em—K#ÛHT„F°OgɯksYöœF3)@#õZ#ÝÍFzÒHÙ/94Iš6FRp»Û¶ÑGØzî¿ AÚ->±¨iƒ‰lØÈoËÄ;Õ×Ùs¦qYëz! 'ûÛWkð(ÞóªxÛ*HvÄï·© d†_ç'Åüvø¨v›*÷bg*U¾`.à>Æ<ï4»%_ŽÙ S- ¼Xðì¶U5‚3[»3S¨˜Tä?$; º,ëM1’§Ì·r êK“A.žæ-icÑ5CþvQʻ엘ÅA ¨X›…«–ÀaÛ ͨbvÅ€ nØ{C¤Û™R´i5$σ·ˆgþŒRäÁo©F.+²ÕÐ X‚ìÕ1YãÔ·å5”!÷\“ÜÉ™ÈïÉ»1ócH±¥þw“‡ä6|}‡øs€ÑTóÀQÖŒ24ƒ0Ÿ€Vh¼zÏ1OÈÍE/—vdº rÍùÊJgÌ$‡ +Îþ}™å˜’‡)åÀ7”A%±´û£Ü0t^„5Ž:‚Ñh>òïÊ"Z¼ ›N¯6£ú¨ŽSåäáŸM7ˆ%œ§íÓ;õC(_8*Þ§*óêL†è#*:ç¤ðñ}˜áãs]¼Ã*R“É3wòSsŽÀ2ôhÏü:Áó«ª]VHõ§$MS!M¸tt/ƒx-´Üà­ý+f¤bÚ]ø±*m°÷u1©#•æp͉…@,:ê'ŸÔéoÂ`tE©½»Â¸ÎɈ»ðnIoÈИ>‡S>‚ò±“Q\~È3FwÁ€É¶­Uäêìàhßé Ìxþ?;eM«‘òWúN¹¤ 3›¯¡{bx[7†¶AÜ•g†æuYƒ|¡,^KNΕÃþ.üŠG‡%é‘VÃG‘ûåEÌkH"Å ð ®–ªâ––!) å@ƒãò-Å$o1qË*ƈvS¬ð²éóeLH”ÿLLäÉ:*Çg1A½Èbb…OÇÚA@Ùbobú³Û¯"ÏeT,_öI­&];SÊ4¬Uï—‡ÉQ ‰#$K‘ú XÒ-$ø âq§4 ÉÛ øB²!ŒdÖ©òvœÔ~EÊÒÃdÈu‹<5ߎÏøJá•û‹‡TÝaŸÂ„ÜK0ae?ÃϬ>?(Œ'·e˜<á1ì”KÃò8‘û¦}O ± DŠÉ ð½ð° Òš§Чp¿òÅ…@ƒžŽ J ëË‚J´Ì‰óQèÊóMB_yŠÉúvûôR(¼ ékžlŸ^e+d v€øO*ï¿0¢°…<½GuÚôM>½iŸÞ×§Od(Æò2‡ãö RA…l,&ðñÓ=8¢R2Â¥’…Ìd>ˆÁ4Ï'‹«—©mñ=èWÄ!$BP „‘QC> J çŸUµï ÚãÃ0mÓ:·ªúð· ŽáÜŽ¡%¨¤M0änh ÁàÚLÚðxzçPOaëfËÜÂÃÏøðø›Up„)p§®ÌKæöøó.DO‚èÂhsÌpÞÒãDVžò` âØ×2O¶´7zè WކbÞ×Ó9<åNwa"à9o RYYŠÈÕ­ÊÓTtöô˜S]‰í™>}À£KòôfÆ>µO?Ã%<=™#y2ª?3ß„¿öôùCûôÚ>½«O/oø)æu=ã|ËLÁÒ¿å«óæÃÇöT‘»zø9Ž]áÇœ†o'x߈eš”;øTva¢}z–9Aß™ËCÖ‘8§ݺúø„éã/Cf뺋oh ç½ö«ŸS|ßÝ£/ƒ;B]àvÊ>ä)5‘]ýêÿÈ~õ3&{±aV£If0Žì f²¡:é57˜‹Çµ_}em  ÂG{fÛæ¶ ©œþbìåÕñÕGà_Š°ë¤¼räß0!EyÆAp"ð G¿ûËýôïVúøùÚã«ö„'Sö Þ[òh#ĉ¹ËÅãQxIðñ3ûøj¿¢æ»nÔ䨽°¯ñhlk!”-/¹‘>½C= }ühíñ‰å¥¥A2Š=CÂ0Þ{˜](o¡DZèDÏ9ŠoC}Œ80Ehq 1[Ë"ûPöó_PýOx6B_`•)$Žp^Ú2GЦW Z4½4΋ò-ýÛDYßJ®àÑxÐ¥Bo~(ÞØ~2k‰C§á’(å †ÔÎYßâP ¶t®â`ƒO-ËÂðàuY úW€Ø<ˆtÐÑ{ˆKB¼E‚yË®#1Þ@Â?Àô`úá¨ØY.ù¬–+Þÿ›¶kr%;³±íðƒô$YHO&YdVñ œua§nš™žêæhŽõÈæe.%™dVÓldÖ=z¢ÙHciðPXÚ1=Ðò°óqúÈTm£.ÒÑ!ꨧŠu•ÓEd%2Ü#³òvò\óõ ûûeßÀ.°‚h*úù.ZʱAüqb% +Ý#‡]j”Ö3³6=ÆiUçÒA|‚Áøy û@ãÓ÷ `À§ ÜW×ÑØÅô Fƒ~@ŒžSECŽÝ» Fø7ü-Àz0 àè4XÄÅ”ƒæå›@ÄDF@b±-MÚAcX-ˆ‘Õ6YÌtà õ´gZ¡#n0AL,â'2r ÜðF2-Y¡ðîG2ùu,;ב8sâƒC“é¶r ¾²qâÄŒ±ˆ„)ÿœzÕB®‰ ÑT])¤YÁ*r¯O¶‡ATã€û(WpØ Z&¿ ÿášX"|þ¹ C®z,f1 pp‡=DÜógÞO£-ÄXÑó($dÏÊ“qµì9¨ƒï:¹©;Öv\“•æ{Hí‡ËEpP¡-µly¬¿T§á²èúÄŽ¡cœº„a¥kì }6¶tÊĤC‹‚í°uÑ1–ÜE7cù¦¡€´×Œ£°‹YvŒîS˜Â.å&Œ¸Ÿ6QÔ†%ƒ¹7(ÜÅÂï[¥ÉÇÁ…WaE!ä2¯±¸ï4›ìׂ¨r ÊT,£ˆÐ 3 ¢*Õf wy„[ Q4÷ÿ;ñD[µ^ïî¡Du2¯«Ã¨FÆBïÞyöLç'à•P'ìÚÐÙ‰Ú& ÚvEuíÐÙZfǞʯI1’é_áöɪH5‚°Aäååt¢ë2C ”Ôšuü`Õ̳M+ZÖ¦\KÏ@ãô>4 R øFNKFÅ´fÄ<ÇÛt'»R®Ä‡`XLR0Ò†_² {aWˆ,QW{K~Ld˜^ ˆUM6åëï…ôyàýOè¢9j§I9‹kîŸteìÝÌȨœiï?"\¾¼ÿˆâ,@äH®´l ¼E#™Ûä¿À©ß>ƒm8\Iåî[¼ùn>eÑòE®Ý|s“{ ûPSŒúHìo_Bûû©nýÉðúÛ÷eBíò·/Óä>~ûûÉ8‡Ÿ‰Lž%Ìǧd1yÆÿ ,1ÞçýO*,i@ÂÞ?¹e³rÕ ÖöxÿQ)uÎVÊIé¥Ô”°ò‚ûÿW8…òèSQ yìàûÏå.ܲQ¤Ðç¿ g¾òU‹HFHè©RÌÎ…•‘òƒÃÁLÆßÌYáSú3'0Â-|ÆÏUmµ¢‡ö ª_†"® XX±b£ìó½éÀFn#kìygÓÁƒØ"²“ß@× þ…/ªB}9ûª€I7ðÖ2 X-¸àSµë ]Œ-^€”|ÍbÔ£¼ͲÔ¨©‹­Â¥ô}/ºcžBñ™"Du´!f/¥Œ¹')Eí¿(k9 ÿ®1ϘîoHë"è d¿aLï!jÝä‘@ޏa}¤ÿ0`Ù#píC§þp&øpºòáõ3»p­¶—ì6øÎÝèë8ü¿3æUƒoç׌Ùê`ûð¿£qǸZ¹ ä2–ÒI·`<¨ñƒÙúz}¡@õ_©/–O_úÒ «R €’‚'VJs¿wg½”m–òÇrd£.eãè‰D”m œ9Ê™nÀ AÎÆ–*Ì!ÌÆj9³ëåàÝZΫ˜G]+Ho+[½­­3‡ åè}myÈÙ_ÞÊIïÜÏóå„A²ZŽéáó‹é°˜oCB>Ùü4C€±h›RÀæ—¨a/ÿõ¯ú¯ÂÉOôg]æ×—i{õ2JulW —m}‰¢ËË^1çtÙ£²c¦öP='š¶9°Úæ¢O?(Ç>ðp»>:2´R y‚CL·b fÜÆ`/«^Ã[,Ð?iLîÀùMØ!§>¯ÛH# Ð8`Î,¼Ä˹~"w¡ú Å–vG)4åVÀk)ürh¬ö™74AOA\ ”2.bùŠmÀ¢iÎ4FƒÇ20†Ö d„gz-±ÇSÕ:gîýØ?„õµÅUĆ‹?e¾ =Œ!5o>  \Y×Ûñ½XKzd\>Å軿  œý!’—ã™ÌYÑ`G´˜:4ïÄ4ƒ°Zó.¶° ó`ó¨ÁÔ=ˆ± ¤:•QcÈCÐmE'Û(MN©Õ©Láyë3ƒ+“ñ\÷us(‘Î`àf%}ÊŸ¼ÿ'ªÉ‹ÅWA{]Æ—oâ#C”}=]…&rÍåãˆNÎî©Ç`fω/Ä!KFjÕ3X³0œõq·/„G§ºFôŽ„C1BH¨•8Fï÷xBÀ—ƒw¥êY¾ òˆÏ f8¥%rñj¼h­Ñ‹»3ƒÃ™¼!KÔ°%B–y-³ô«=%NžG«þgVµ`Ë#ÕñòGüÇýZàT ¯?F 2N•h¾üyT´‡Pˆ¸Š¬Š€\unкWð R@>æi#’(ñ3Ô3l“%4¬ÐÜ´ES !YJòîÕe B—D…@Ie{©Õi ‚µ¦/ Ê@;sæ²Wh€œtÆÓaVQCE­¶á„ ¬ Xûº}^›e¨àH®š› ‘8 ÌBuæS°.¢,ÜR‹^ãù¾€Zop±`Ùy#”P£¥,X€¬BO…èò}UJÈÑn«Q+¸–ø ͦ¤ÆëDñ*Wñ:¶xÉWu6I­ZU¸D /—Xj±cl^cÄr^p²Ã-.# òvÚMGHîNòN2rHíí Z3ü©š©°ÍÌ{aÑκG0ÃÌ»y®"s©ÐX@~È_Á s´—÷&J'èäM±P¡wH€ åoAéCiE'½žõ&`4“Ljî$=˜w"H›9"MÉ>oƒ#ò‡¤Bnd„få¡Â¼{DQjÏI'C–Öfònù86¦“áÚíqìsù¡µÆÞö÷§d‹„3iÁ[si ݶiŠí˜¿Œ "xMB®íÖGEúÃ;HY”À¤ežàðÇ;ænM¹˜H¡^ÔSu|.2ˆ!·öeTîø"oŸº«¤®Çø`I0‘3Pv(Ø;xDŠù.Nö£ ˆÀ[I,û^äNô ;¸ætÛÇÂL™…„ìLÜ’ÝÆQ©1ÆF?Rþ!‰Ô£{&ò[qhfz Ü~y²Qã2§. ½'σÐG‘q¡â1³7vSÉ›ÀAéÉaƒÌ†!¶î¬%4õOès ©ÌswæôrÌ[kÒLFK®ÖG攎?5.-ÂòÄUXŒ£Ç°ÇÔbCÊä@Fª<“›ºÏÍ*"“±H Úlгeü7¸K ¨Î£7!F³šÉ1xé•Õü@ƒž¨VÞÚUh¸Ih’1¸Æ Qf2y(Ü ¬ÜoöX( i布¢è`@.ÇyN^HŸ-Oÿë¬ã*áê1•²a©ÁD`íP-Îèž0Ì<©M&­sh ÛààD:¡ÞX~?aNd FЛ н €GµpVäò!Äð®E(û<„à>†xA!7­ìUWŸ™Za cϯ(²¿ŽQÂlž£àŒúÀÈ_bôP ]…ˆÏÊ>¾Ø|©V@R‹i¼RZ6MçdAt^wŠKÄ!a5Ùt$ñôZ NŽœâÝ µF Œ±ÜÔlMG†qÝ ’3  ‚I•m*ݲ:Êtéi©q?*¢®æÝ¤MƒZ¡~†ô ø wÃF¬R³dm*H0ý“Bó+«?_œ!gfώ悜ÿ0˜(ñh¦©uø®Q"s—w—ÿXPÙ#j@áØŸR·8º†ÒQ’}ð90uŠô6˜>h`éä9˜œ‚áðèyœòUo ±ÛeÂ[ržªB[Ÿ\GŠI]äü4H9Ÿƒ”ÜÏæçvºóTÂòûµš>ç_ësž.¶ÏQBäãºÓ-uñe‚dõ–}ê“ur Ÿ­v:å¸Ï÷¹O\¬T°{È´âzŸSfÇZŸ3˜%] ©ä ]Núê­]„HªMêR9áRÜòh¹§µc’Ë'ỵÿÏþµ‡’»Èô9Âò.‚Š‚诗›ããÔê#,‚:f«ùsðøe †qKySã·âåîúc[ ҹþÔ6ᡎƒ…Ç«l3ISrô—™ÙÇ\ φ…#¾…gFx¼i=ä»Gs]’Ç/=¼'ò?7äsôV€äÜá3d¸»­ »y6=\ ‡8èïƒ×áUëIøqPË—ÈH€Èk¬+ ÙR`KšÙµ È›ºëÃþC(ýë¨ïLêQŸ6Ýç´˜š?ÞÖ|m¦Æ(ŽTtà—ûÐÿ‘†ŠCũ¹Nt†°Ì†Šw1½0>òŒÅçÆPñÚzGò®¯^íìÈ#)¸´ø8ÑŸK z { º¸dÀ"Žnº ±ÅvE JÌA_þ„çóVüè9x¼i+¾UÃó*Š8ÙF-¥Iƒ_BWF¸H¾°<lä&6V')'6$ŠÜ“”Å&€#ý0Á–ŒHur`à§z¥DYg÷ÿg¹Ò±>HE­™Ðt,H&Pnd9Á`¿/äÊØŽu¡Š )gŸÈCÊSë|ƉÁ²g)ÿ¶™`¨!‡L?Ze‡¡m;n*kÝo:´ß¨ž€QãA&ñH`³¿DØL&C€(Á”4äÌ ³V6¾”Š))UdJ ­zmqë_qi„œÌ­qÁêq ò‚O3¯Æe z KX¤•»H=û´4¾Üñ¨x5*HPT0ÇìËTó(µrä_œ ­¸ƒ4¶Ïß n‰¶”Á*,õ„”‹íz úüIΆ“·“n2B¡3™ýï¥,at÷(ß,a`ùC;ºX~á†Ã% ¹›ø=¬Œ8 K±Ç¹cô¬­úë)·ÁZ^O:T£ÖBÃ^س°€¤“’#°a7é™Bݤ“ráa¥1摳2V‡ 9$¥Ùy: £ÛX.\ÀÀºJÆ;sÃÅl³Yò’c„¥MXðr”·Ó‘|ö’–¼¦Ï^ÖÅ’WOa)¤ôÄ.yéâXª«Rr—Æbe'âÕÒ˜nT(,RbKÞQXnîâª×³îÕ–À+,ô.ÊÐ:0~:JFÒaWW×µz(À*Ì;G¶IXVãÊŽW8í¤ÍŒ”WtYlö0ë˧—\”­tõ4O×}0|]à,¹~z±o-Ñ– ¨—º4­ÞdP$Y z†t|;ÀªbHŸ:‚ ”ÕPÀŠéq=Œ1Œ÷s»~ †cë`V•Ðhhâz£T;w¢ñ)FóJ×”a©Q¡{]mÁªÃj:\MR»VR£álh•ÔNäÚ jZ¼wê€çúò<0›X†$°˜éÉ㢹@æÑ]M!KáÞ˰†ì VÙùyÄTïkô d‰E¶ÁìÒbF>0V«s]¤_Qch‰²2#c²_ u\…X2w¡Ç°¸ÝY?níj¯Á­¯KÏpŒƒ K°ôüÐS£pÜtÚ¸^u.°ëÃ}lûp›®É'؇c$~.ŒŽùØÅ~Ë{Ø÷9¬í#7~À]Ÿg†[Dºõá±¹Wèw±…-°øFAàÄo*7ælp¨£ü^|8‡¡áÇ;Žnë &úö€·òS桸»gãk¤áŸTâø½·v‚©”ɡޑ2¥Öpƒ¨4C‘ØU’¡%¢Òf‡âÖp±ü‡¦ñ-´ëBqdÍ®v‘ .Ì}½¿=;Çü•ƒ}£wt»0ª7ËˆŽ”íc_碀#W (Lu»Ð­ÁÁÃÀ‚Ìí½?Ìwt»QÈÞWpàvzŠÍ§¸'/~¶ØoÍ䀌Hd¤˜9¾:îâöÞ©÷ Qœ‡Ò`P=ÄmùïÌð²DÆîR@Áª-ÜAâ3tÌ—µÃ†+ƒ:Äo[ðÃh«Z¸WÞýT7xÁ():S .˜—B£%4p×ðrª/T>,$¨ÞO'è&Hè½` [¾¨Ë\Ýäã„T‘ªQ¬Ý=µW[ÙOÐ夷Þau¹SRŠ¿³¹­@ºNd°^¹%÷ŽÍ–¼ìþÂ|ˆC„0ͨœì·ylóWÔe£cm9öÛ<ô†£{4­®–k‚±ù¶)°ûÁÌ·7äàN}p•]wÃѯ]<6ßÁ$-¼éóª_}T”±…Eöí†Òíflþ/°k){íèUcºJW¨Š\>’Áõ®aGí7XN$>?þ59 N€Z%:t¨ åc'ú‚ô{,•´qóÒW±\û='ÚzÁ¨RÍ+¦”ÐøcàOá­Õá¢ÄÍÆ|OªßzEJ+%J)Bj“Y‹¼«ëóå7„L°Zçë”' ꤖÖùeÜ…”äk¥ås•¦ÏUê²ÒMrZÖ*Ý\V,+u¦^´ñ‚’j´Òé—Az‘’ƒIØST±R*L¥ÖµZ¥u±×‹¶_à;­uûój-‚ù`úo·RÅw‹•¦ð-ðìhàuVJx¡!±/SžÃ×#¾CVº†ï°©ÔôïPh£@žTzRa„¯h}dÚ"'ý>«$ýwWêw_Ђ=(Æ\/½w‡ò¤Ž¥ôžD”¯€ÌóŠþXL¥Zz·)Ýþüi%cKo£ôN]z÷)=ùÛ”.E”`ÕHçÙºÓ$&Ÿ:¥JàBÄhgâJ€…i–}Ò–öáŠ7Wc•¥>¸©³A‚Î( ý•ð¢©W]Y3JJ¯3”¡]CšQ16Ø£Õƒ‹>ŸóÖᲸ Ò–6ž*Äc iand¶§d%,~ख|Ï©ýÒ¬qJŽrßÀ­xô€Mõ”Žoæ8 7*oò-Žòôy†¯¦ÑÌA¹ÕÙ`æd©”IAâù9y¤o=Kaf ‰X‹jÈ í€25§yOgPCw& 8øÑƒ»_ƒømÄhÍ$ôºçÄ—{r‚2—xÌ#AèRJ357‰öÉþ!]¥æÞ§ Y%¦áÇ%[Ïq{æÕ`¾M>9ø@ dÓZÒ‰Ïp ’ÆOÍœà8ïYþ9(Û$(Õð€3®ô³ByO ¤çö>+´"(„ËYðÄ!œ›v&™MÑ:ïiHOŽ‘‰;ag’¿Œ5ºˆbÌ ¥¤u’×#=‰Ç€D;bkcr€7 ,º`#IµŠÄЌړ%=€õ˜ |*o¬H„4˜k;ÅŸ Í!CVZNû‰=,ÇmB)JÈ)•„‹zÌkX^Ñ&†ì*J6Ë}£žšw?å!J"#ÍNW@ÿLªX„ª«Œ5\f”IxßI:úbÛkºª½¬H´€„´H‘èX$R„+`Å<·,˜>ÓDwM %b|¢½#ÚpI üs¬]ì§^˜cšŒ¨¾›-.x ú\u§4)2HS ÎÖèd¸ª*%û”ì-$ <Äú½=eý0C{l­e6l÷@’^N×i.ùû‘¤JÆ‘žÄcu÷Pë“!”q©~Á#µuJþ¦Å¢¢ÒU,ÿˆÌË/TÁa†uÎCØCÜ—1܈Â\ØÄniJ ŽØ}ãRÍgH¨:˜"Ѽ~A{ï@›2uâ6£`¼-õq”µ¾¢™Í? ìå‡Ðï‡ÁÅBÆç¶9UêuŒF ³þ¸Á"àr–|t0Cþ¼lÐøB9S Û#pæ |ÁÔh $”Øãâl© [tnóý7¸`7x`ÅŠpl(„ƒ¬÷Bþý|@ªqˆ â[D`4ý— í(È’"©Vh§ÐiÐŽâU™ â«.ò¶dt~„¹êwò&msí2úA3…$¨’ôÍØ.sL °W2%ŒhÈñhm–‚dLÅIs‘xðݼK.IÖIäE0$Ë{PJz!(+‘R`ö 'Ç1¶†™LÀ¡,—¢Ðõ±•)^ ¾ R#s³Ž¥ÈÒPÇRn C3R$Àa1¤ßt²^ˆ—PÛ‹ÉýH'÷ Åü ,s¤£ -a=¹g‹ ] ìJ,ÐŽFEÚKâªÆâ|ãá °ïùõ|Üe A3¢(ÈùšŒæŽµ3—× ª¼¹*é–!"ŸK*óë¯-È~¬¸H>¼Ž‹  %3Lƒ|²„ ŠŒœ-Çp¼øû“ºLÑ8­-µøÀgĦ™Ä{x$ÉÁŒ/Õí HÁz>•“‰¤o‘HÝõ |ué‘Ç‘ª(]=—A ßg¬¥Þ+Aa¡:“*˦Á*j×Dª

    ‰÷IØGò¨ÍT œŒZ˜Ø„—â?½Ö…T[{ ×=Ãvæžþ²>`L¹ÆHòêÚ.íÈ+Ó€ˆK¨XØ…?x*©´çÉÑcX¡xåP³C“¡Kwµ¤¦î&H3rÚ¼*ö䯨ŸŽË G ÑTOÉ@">˜!d:GÈ#¯zêŒã³ÄJ€¸VTD¥@,8 q+WS`œÿ©GŠž\ÃâÞ ¨žRó¯­°3›qõ#-x™´Änu¡¨øÕ¦TœÔKhøžôŽ-! ГÝ3lCf=S@\0kÏN®‡Ž¿|ìz¼ùó‹÷ÁQÁjvŽ x ƒCónâcpQ|›‹e?L’ȉMöÙħÊ=ÒÌߘ¬¿HZCèßÒ‚€Ððš Ä™²uçÒÔš1#X8ñ}Á@1¤Ïøob !’Éž6Ù¼ƒcóßV†M¸mðÉ!Õè(†ìß·°±i[æÒ9¤•¶§ûׇVÞ· Bõ€ ÿLúsffõ§fÐRƒ€¨Â;ÿÖë¶5ÙÁ¨w*õšASo°¬wõ‚ñâE4!áEê£^yZNQo´zñÄØ®ëÖõ*[æu;ôK+býÖVh‚ßA¯®•Õe¿²ZìÖ¤ˆ‘nø cI}””¼º†NT£óÊ*07—änIÉç”$?*ì¦Aq Ê{wLÑe½—¶",ð—½ïƒ‘ÑÆŒ?ïÉ#nÔ²‚N-dÚ“TbFX|KÚà¶mŠZÙýqÂë(eÿ9EéԀʜ $’ µ;º¢p‰Í.ª;Q –î9Œ± {h¯ƒ,¦ɈR¹Ìâ!D•ç]]ŽèÊ÷Rô¨ƒ6V Ǻ°éáá\à, $ìKnëz.%Ÿ:ÅqÚíe¦‡À¢øS.N$š„ý)Àpd¨(C)¦‡÷O*&p”›N;?W,l]€Íó8c)æ¢'Ѧ\7:ƒØbO-Éz0ãê¡sbë0£Ì,òŽ“ÓcQL Ø|IÑí"”’{Yû=xœEí÷Ô& ØÑƒftË<Ñ‘ (·$jŽ ¼ãTÚÕùSdšÈ!¥}ûz×#iýÛÛEÚ~ïX Ää[{DK2iªßÄF­”SœSÆ5Üã®¾Š‹äAÕ²_†O£u¨ßa5WÃ_ˆ0Á“¨š…ÄZ@ˆ+Ù˜‹ƒ—ɵ¡pí ìígá„G+R‡U¶–Ȭü¸b]°Í‘Èk ‚Á¥D~ 96gά°¿6T³<óL •ù7̉ÁÊ©ð´Ä}%h5©¡ÔH™"X•ªeÖ.C8è×'4ÉàÒºÂ8ÕÙÇЗƒ·üG 5PRÆ K¤¤›”`5QƤŒÈH TæƒEOE6ÕÄêv!Rˆ€åb¸ïQ—®‰xMõõ3Z`7Å*ZñŠ ÙT%=/CÞÔë•{A¬Üºi§©¥šÃìfJ;±bò\€ªKÙ`%ç?ÞS¿0=ªÔ̺äNZ ÇåS°Ú[K¢%ÏKˆ6’ëRNð.S}ŸÃ –GI¬ZŠsª5ÒR;[ôðö÷¡d8ˆ§Ð.Bºz_É…nüˆ7S™Gª—¨çÑ às¬·A;‰j¬Š¼xN%E?r›ó¡pÙŠ+¨Q^¢(n~‘ÍC©‚mm˜”y5ÕT~)\Âí´t@ùK0à#‰ w@wÇÐEÇr)ýé¦îäå:‹Ò›^oׄ.[¦Q)‘÷«*ÿ õNî<¨b"bTªp÷ï{s#Pê™\Á‘t6£Þl›ž¦ðý‚‰€ô6 1K÷æÞl WÑV”f§.¼G-ߛʥóØ':ñ½²0•+fƒé¡3‘=çCGÂðœ)=³´¸èГ›ÿt›î¤‡2•ñ ’)9ôQ¼{X¶J¦2§EŽË¼P*@3P;ŸÔ•4ˆúû9±.}ù­ÊPôŽUœ¢>-ŒÕ”µ÷AûñÒñPTŠÅ2¸v& àyEGã@9 jDc)r?ñHë "/FÔ:VÛ‚’âL!”}@AlϾ((R<6ý1_WP¨n"?'×vö) šÖ:&t|Mlvc¦Z:öKåµ2(*3… ±›èWeemÔQ[l¤V]i÷˜ôÿ‡]¬¯Á‘ê8µì2dXæÐ[X<ÑÐô°C¸zG'¢a¸@Wt R¤ „0=Ê>q'«g_$V$,¾’Ei¾–(U 톼B H@ÒÛ³Ã:ÄPÙ̲„ºKÌyï:¼V éÖÓaf¸;(6oD­Çk·ñ»2„öÌku;À‚+×ð(ï­€‚E²äºAü‘_âwQwÏÂBqœ”°ÐÌû´†eb¹ @];ú®ÕÀ¤+À`ÉÕ¬£ ã+ÀôÌÇP^ªã°Ý -À¸·Â2i`ù œRÚÉ‹KX œÁ…O6¢F%³¨üi2O=¯·åú˜”¨ß›Ó/ ¦óÇÈ'•ÙÎÐôýýŠÕ,°´s@P>ËñëF:4ÄráÓy§e&ü¥#‹—™óH™×òé3ƒ¬`ÊÖãÇmÜŠÖ5øi÷íVf9çäúØðÆœ SjqnRÉaè !GYžjov Vò\mm ÉysAGdt ä««MÂê·˜‹þ3Q5¹UØjs œR£ø{äJ7¨ øË¡‹@T¤~yÉ…€am¥¸ ¬0.‘øb B ÇEi­—0ÍGN•pBF´ñkdƹ"ãXd¶TQz?m´at‘“M>–Ljé×ÈÐQb¬r^ð}‡{ –6àLk½žš+ctÂ:˜´â"Pl‚GaÜ ØPÒÙ,°v0E’ÅÅ\°± ôX|qpa¨édñ”yòPr$º˜ª0ƒ éq4s§Ö1 ƒ§\ úñÅaÍ[Åž)áÜc£`$‡šG h5mXpH ¢²ö×mó1ü« î6â‹ròT±Š«Ùö*8oÜN àГ#>_‚ÊÕû7¡ã+:å æ•¡Ë+/>gDg»A‡ÐîßÏÙ <x¬àhŠÝu|¤A5>9÷-‹êx‡5@.ˆØèþ€R PZ3hð»ÇJÎQ«º†y¿8ª=KBùƒ›z–o{VPáBÁ‡‘ÿÙJÏ V{VÉÄèYæg9pþ=XíZǶkÉ<˜Òv¢p‚¾åXM‚ÊÊ™­w.uíYv.™âý‰< 5IË`ÿ Pœeçzc­s­’¢ø@„f 3=~x´Íi™)»5<„¬Êqy+<]®¼®ðô;:rÕ}©úa«9íÜt`M¡ø(÷Fñéì%ðeÇrÑ(Å’@—ãmÞŒÞx [2ÍÕ*ºòDͬˆ¢#W²Ü‹ÚÄÅ0ŸIѱñ XË6(X©§ò‰¡äJþ1EûÇѦeˆØŸslÑN÷™)Âa[­á ìMÙÉ¥-lÂ&°pT{çè6tE']C§Cúˆ‚“Ó´ j”"·Ø^'ý…ÀéÜ ŽiÀIÖÀ±¢› 8Cçñsà°èÓîŸÂdÄ‚#gôB¬ìÝŽíYÐ Ù]Ó[fæbíCBSeXp¢ ƒºüãï©ìÉЄÉF¤ƒBóÿ$7y“A½_Ï\ñD͈3'[ÐYìkÚ©´Û©ÌØvª òšé‡›|ÏΨt8™ uÔÈiÆsåF½ëÿС¼‹Žç Èܵž<¨½OM–äg£’•¾¢­ ‚³T8}Z¢Â•‘xMP¥ï c È;®(LJ‡0 `Añ`'õi\ œ`ÉÛô¹}aŸÃÔZ¡¦bÖ]¤ªhXî¥Öu[7;Š×YÏú‚ÒCÃpÒŒ.•ƳçgQO ÃL*öÈA‚ÔõÆÒ¼LôZK&Ò7xÜF‡aЈàÛ©,¥5œ!§:œ;ųPŠƒÿPk£%Æsµ ·Å涤ÉÊ—1=¡„VMÚ$E³n-@I ¾"Ë1¤kõêAŽÊ Û!Ÿµ,WОYÐFÈ:/Þ3kváj!-lp癜B2—ÄÅ™ÜAD¼Pƒ¹C>1(ˆêò÷Š~ÅYÖ‘²q«pÌ'5Tðn•/eˆ*lÈŒ[íb»Lú-XÕ. Nmi¦cεD k¥· ”x9QrVPª¿Ëc)h„M9ì‚ýsÊP~Ö!½¿ÆÇâO|öŰ_ÂÐçMøïpà ñ]¿¢ÙŽ©>Ž(¢$'xѨŠ`vÄÜktBºáðÖILŸ[!2Á;1ã“„—Áú'8Iñ2. «iæã—Cš )<ï²àH{_œ£˜ºó¹Ò¾˜pUHŒ8ï_¡@7á¤à¤ŸÈ…Cãg¼˜Vjdçc6ì‰ûØ–ÇkL•¦\“bõQÜO‰è $¢ž¥€TÂU#l)µð¡äŒ´ …ç"cK™ªx€rõ$ 6ÊÞ«ØNºB²ÈýÄÕTH·ÊàV Q« TpD2ªDÕ2ç>íÈü=ê–\Bq…²'öa*bÄØ÷ý`ïDžð2dDäÅÿQ¢£žùØ+ñL_m_HPT}<‘⣂"ªrâšg^µ¥×&þ›9´~ÿÛôr‹ã Â&®T÷T†§J¯JÒ#>’+¡["ÏýÜàEJW1ùœ®s •E¹È)£þlTÑNAÚŽRÚwèÿÃMs«Äý¸rÁ¢¨‡MäAŽ3"Ru%tú(‘p É_‹D^ä?@rèìtTlÖTï‚‘Ò3{ÐFn¡«˜¨xxÄ´½L%±¯„¼Ap¥ö껸‰´‰(ò4´#4>¥Ò’\>éIÈ’"Mi×]¡1 ŽÁa–01M pM)\’ÄahÁÖ>!”)œÑ¦ß¥3 a%ÿd‚TÀÐF]˜¢ùœKGÃÐ3„£"²m! <ùf[áé©’ÜLÍ>/’|@J’ ”:ÜŒlÁT7¼CHÉϬ+O7¹g½º©6Ç5çrå*BdÓ§£âi:£E-ÌÃuˆŠ%DiÛb›¢Œm˱Ȧ!OÓà‹ÙÃwƒXV0AŸI{©»!*H˜2]¦Tq1 H~ž:U*BN‡Šq )ËÆÅÇú-†V&uÑU3„*/õC(‹ÈŒY^—êŒT>~R@+!/`ŒçXZÁ\¦¯þ³~Tz*>…À.˜””ùØËÆ2 LǘÈç4Qñù1aL6DæËs©¤’ÈÅ<„ïnÅ !)O0Ê“|/ÛDæÿÔM™ä(Ÿ:#r½Û˜çb•<« #õ ç4Ø IïA“Dn§ fá[”FÙÓUÛ®a™»3?ÄLp)&Â2QæXˆ9ÜÙ?°³ƒÕ‘ôЩr˹ƉJsع; ÂZáa±‹+8!?ö§ð Ñ¡Ü–Ktõ‹•rè Â@‰Ø ,¦Í\j_<•ü#$FEƒðP×qQþL›9%ÊŠ%ݼ|ˆEµg8Uš$­Ç.XP¦Ê’ÙÓ¥oº¡5è‚‘¾”'RŠ# ìèj_(Ê­)tQÁnå¶¡• ¨àzÄÍœTä!™‚åcNPq€Š€Ã¸÷¹.ßQ³- ¨ª±‚ ñ †Ž”ÂCà H‹ŠjŒì⓽^Q9¤)Ž\Mš?oN¥»mÖþö°f‡õª T°ÁöjQ~ŠD÷~˜Ãà†CE¥Htu÷t×P¾¤¶òI)ƒºá”Áî"·&DöþÀ0CÏOÔõÇ6†ï¦^¨š r¹)í¢:VØ ¯Ö—kØô ¬FÃÌU¦ ¬ìdîš1¼ˆ,C§¾^;P‘kJªÐŒž Öàápñy¿.¼}ªƒÐCÊ¥xÊkVÕ[Ð×`éû:ï+,T%Ñ•çsÀ’}°Ô é’6h加Èãáã]³ ÒVcAIZ]­ Ýèå5T¢TîXTr ò¢EÅ*}]¢‡bÉs¨Ôê*8ÿd ‰(ß«¥Nʾ%ïkZ­‚’((Töé„쥖ög.zÐ9jqïèlh6;9M8FRvÊu ÃöRBT¸ÀÓNdìG"Þ&6¤hn¯T–¬ÛιƢÉvC¹Ð] ×fÕºs\$¨\võiXN *Ë4ÿ‡îoÑgD¬¸4ª—R7yyªBéØƒ¦8¶¶$¯¢ÝÃ4ŠºtlC¼ÙN¤÷¥°\ZXZEÑ ¤UTܶêÈÀ+–¸´‹ˆ –¸êU,j`†(?›Ò™„܉) [ ñKÞA¢gq¥Id'±¢éYŒ°¨ 1?Öß#Æ=jU•².(_R|Ps«ÔrÈú÷%9ºø@÷¤ï;Uƒ’õêZ² „)”4pǸËK±yÿ@ÉÎty\¯"J‹@¯qkéZ™êž\B8FîØAÂCí[(CPÂŒ•â#WHµÃÄJPÂ6\ƒm/µ9 ÝäK Š\ÑÇ &™9î\…?šø¹ ©œ @*H®M†¬ÒŸ R¿Jt¶Y$w ’c¹Êás0õo‡É_‡)¸&÷€‰ùƒ·Â„{¿¦© ä{ÊŠ™´b…ÉÁÚ)”BSl$÷]r³‰¬%õ,” s߉¹æ3Sœ ü8§ßHÌ“+ã¹ñ4ÏŸº‘¦)¥bŸÌl‹ˆ10O[Ô×8qéBTr1hmhQжIÚ9¦Ù›T2³»X‚”̆”t…LE,Aœn¥wº¢t ·x(ãz+¾Ú§H‚ŸÍqëÌiM}+J-S— ²è˜æ+”†ü|Œœx¶} FšˆYc”ÕIð–_é´¾(V0îüm0z´†QC/âfˆ ¸Ø× ZhCØ‘óG‹5€ä—CéVûT¢çµð)¸ÕnHwÀPŸ´—½Íô3<’¶\óñÚIúY±ö4Žh»”'4 :ÒÿPÊIÀ­ëla/^í°®³K¯AÝŒDÏnyA¼äʱÝ쳡õìfVl… §"É¥êÉ8}!7¬ê!Á7žƳÀ¸Bip)‡†Z$ƹ˜sãfC³!·~jqñõdÎé§}˜üv`Ì*0”OùE€Ô£ñÕS¹×dëÀÔ!ÙÐ`“¿sq—#è^f/›m¾ƒ¿éA¥ØØ '— ¾"§W™ŽÄˆ(QÊÑ(È‘Wù[Gz††dèÔƒ4’ºL‡3N{…eüÈ9 –1PäDdH¯ò6’R]Žóÿ|5’[@BYDÆ@wÉ'B¼[ßÃvøê:.=°Äs)5¸ ©‰f´¸5¸äK\Hº\>@phaéùãC)á:,é,Ñ °0úÉ–üjK§¾–œ¥Ln‚…º‘ ËZh˜¢Á½%,I=`?*eÒ¢¦Bø^¨NÊ%,ðx½PíØ“ªð"·%s,,3ë4$ý–¶åAÍ„ýHBøûÒ+šnT"$8€»v#(µØy›”3S‚ÖG@¥ÔÙÕ>§U°E¢~I’;u'Òy„Õ{¡PâŸ#½m*ÇV‘#øX_·Pï•r$†YCeŒ|† +q犦0K¨øðíõ!§¢¨ØƒÐ;əЩ¨ µ.wu}BþB¯5Õ9çAê-QÙu s¹ *ô"æLI(Y‰¤J’èBQ‰äV˜Þ¢ĨÎ]E¥1ü6ÿܦӕJåY¶"ß«‚·mo-À’,g⯣ÁÞ¡7à…¨á!V8˜Ð„ñ¨Ìd 9æ ÆF=(×M½òeý+¤$"wé0ˆ‚‹¼Ûögª-Çf¾­Ý)VUöQÀÌ›/‘„ðAM`tb7r¤‚ G♿A~ò®X´ÙÁËa}½´€k7HÉìIpár•b‚Ì&PpöbÅ™Z.W)"MòÒ*äŽ,lj—nΛ¹&¹]!CM§12ÖlNB>¨IïÉ'ÓAÏ@xÇ‘j&L9­!Bâ>ɡΌ4Ã:jG+Nr„#W²5f“8h¢?JQCZÚ‰/€ÕàA ö_\ÉíÌ ¿yÉ%ØÑ (Ÿ“(íÄçËb°*Z_9S :³x¿©\1**Cü{"ۊ܇DmŠl£-™?c6>¥ÿÉëy2®ç'Ò]U¾P è´¨|·«Ì,X{õ²òCXÇú”…á3E]kËÕ¿² ™_!óâ |ovDÕ]‘æ.'aHÞå$ì F8Ì]ÊžD5Z§(¢ÏT]™•b—þŠiºW«s°,\BuécmýBnêj×"õ©‹„` E!˜~ïƒÅ HŸýqÊi–$…=5`R³Öáu˜TKIÊX_Æ ¾´ÆøUÌIØÇµ¬ õa#Ü á‡–ùPîñW–Ã};Guïä ¾ )4 ö’˜ŽáÞe‘v°\°ÀF:y†unÁl+¬×œÇÈçæÚõFHÔý„ã½ 4Úf7µÁ¶ù0åC;âÊj"Ó¥ƒ,dH†Œbðôà û78›]"µÔЭ¯ÇR»Œù 4±+[û 'hG»øwà;šá²ÐŠ”x©TÂ[~Ii†]_£IEÑ‚H€üoØ`³ù³è%Ô(^0>rò j•“¿È }Œù(4H௺ØüE>Þ•&eÚ2ó!¯è¤/š«^ÄÒºF·‰]UÕ Ët”.dôdÒ÷ ƼÖÖjÖA†ÉpT3§ITéa˸ó}ìß1ÕHbþ¢M oä'dªn"wÚÅ–ûïHq¿‘îËT1»_5&ø;Rô|L^å8hÌ70{õ¢ß¡R’„ŸëéH¿C KUó—UšÂìØkfžøÙ×ÈCÒ^ó/JúMÛ¢1/JêÆá¢ô†ÖÑo'Ô«ð€ù²­©¹(¹é¢¶Sü./);E.8P‘+ºr?¡½ ƒ :zAé¹½ ]€¶Ä“ÿÓë'Þ5UUŸ'O”¯Ûfü§×[pþRÿ%öúÇæ?1¾¥Á|Md@¼€ûø‚N…Í –6®|¿òçK´núž;½t£—^¬Ï»Å½ýš-R5pM²Q_“»Âk’úš­[®ÙZ½&¸áçkÖÞ‰\x)%›/({M"9®éàšM^óºŽåÍ‹¶8[ú¯×ùF}ÃrÒÆúIѯ×wù ~?ÐM¹Ú@Ö1D¯¡øt™ñÌ/#,TRÙ}9-÷¦áØ0‹²Ø“³$²B$GežÜõ–Ú¦+6ðY-¦1”‡às6Ne@sÍ\ÞÀ#/ã‹dT92üÄ'@ß ‡n×#rœìX¯°s‘¡AFE¤aˆEðÔ­0ššD¾p¨%Ž>âëÓþ3°žŸ.h%“× èW‹*•œCû@.V¿¿—dôó*m´Åš& ×|Æ1"2؄ڊOž³â8†AŠÂéA+¨êeø¯[Ñ+E&ßr¡\ÑœtXÐ1FضoÎQQ{bò‡ aÈà û$å0”bsžI%ÜÀ/t×þŒÔ÷ø”ÙÂE…Ü”+d³ÇòW"%Ù†˜^«¨ê†€@,Ò]oH´Öð$lC@gÕ–tj.¬œ¥b|–e«M™ òµ¦àXóÍU˜™Oû‰MÛ/±ý<.en ˜kƒ3Ž/f?•‰¤¯^êæ]lÍšÅ.ôS\“r [&¶ : !ù؆®ÕqÅsš„Õ^΄LÞ—L“Æwð&ýû¸î3 hdÎ&Ó&ØÔ,ý8Ø3w5€ƒÓSèìq;½O=PlìoqQÞþZ“[)Þü[„püͧ˜¹M±£` ÍrÀöàgÈ;€Òd‚ä` ÑÀ¿ ¸=Ë Gn¯Ø|Ö­Ù=QNdŒÀ€ûT ³)Ã,`vl°dÉd » ¿mÔŠZ õ— ûy˜up¦@p-ka{=ã6´±àºSÝS^¶ O½| ÈÉ¡ï„ÏÀ]fé— ŽÏþ^æGÚ÷M‡©§wíÏ ¥¸OC;4—f ’¾õ‡f °5ë…¦[u °=Ñ>ëòD€è-ZðÈÚ¹û![€äzK’¦\)ù!×üýDÍ­›h±ˆˆi8ÁÍÁjù+ i.ú$V¸ÀßÔ½LÄUEþzó`ó¨m†`®K™"™A’ ¬¢‹¼~4 Yü!3.(ø”7%3«l“›p\ ‚¬Rqc+ À¹lEësѵh¯6"c#R3ÒF¼¾ÚˆŽmÄEÓ°¢Ö¾Œ¡|…ÍA×o·ª|ùm8úm šC@À²a ]äõÓºäÓ:wt> ]üB¿¹Ú§õ-×iíW¸éiFÚ4c·¯Í¨=fÝ‹ZÉ®uÈz®Yþ|;üÕvЪí‡Ú5H°Î±ËaZ1‚~<ØCÃ@B#8S½3³íˆÏçÚC±•íBÛlF|1×f̰ÔPÍê>Q€:~ó¹Vä|J˜ ­¸ ñ\Ú†û¨6#«¡³qÁvÒ9±îPÛá¢g^ìÏ4Õ|?ªýϤ!t›3ë ‰‚ç¾–\»*½Èm_Õv¬wÖþ.¿—ƒŒ6툛0>k@¡D×ó1„N´»6Í(ŠŒÍ¨ŸüZ ~½|b$N²¥Ï,|ÛM#ì3+ †lÄ}õŠ?Ä#ËŽ\Ì‚|Iî jžX©¶àr”²ÜÕŒWYu_ýTEO²MÕûÀ#«ÛtÕÄvÕ®4@ºêå<骇]®;³§rݸgº?`7‡ÞŠa?eXîêÃBʾ¹©6 éà‰ezËÐ ]¯6à)f·ÚÉÔÅa‡Å^欴 µ-{u z7~nfS:¹ÆI¥ý tí€Ó“ÙïÀÓï€Ë©.1•.”ïk¾ºÕ™Tä„åâ;Çõw0®°ÐàQÎ&ä*Q”õÑ„¨bŠš€¤7wÙ„ƒÔ×& ›.Xæ­ÉYH„CüÂ#MP.ÆZäÊñwhª=iÇï² Ú1±RWXq­HŵNеTNÒNüjVRÿÌvÌ> fN¼˜R_áPò æ¿ë* Wð؉Éhº·¡K‹ç¶kÞ÷f7·Å,¿Ð?ž/Ûr²-2e`[ðè‘Æœ3Øñ±-žn,³Q§Ô ê¯Í¦˜•¦\Ú¦@ù¡iËò»ù»Œã*dêž¿¿ó»Iõ?•©Æ¥%©z Ue. 9 2¬c!Çç‡EžxU»JmÈoÛq)í@ÁȪ«žê—ãìùFü%jïWÜñŸP%E#iD §I¸²$:†TÛ ¿Î;ê„¡'Ètª>H™…CÚèÉsÚqÂ,%ŽÕ¶ ¯ri¥jƒçÏ¥¬œdíÔ´ ±Ÿ/bÍä3iÀ³gPÒ“(j1ŠÌ(4×_¾ ˜r—2«ú-÷È–‘Ž0›ÿ²ùÄ[û$[ûÄù:V9ê¶y>Jž».\¿îWkú/𠙢b¯­”Ü/a)ä×ðÏ‹÷”¹~É”í({ WB­2«¥LéæÚå*ÈWU‹ûÇY·Ï¥n¡D_KôùÎËZj«ªX¨ÇB½µBåû2ù¾e g¾÷‚Zîš—\Òñ¡Džý»ZKt½–×–µDŸSË&jùM´¢µu5¶šŒÕàK²õÈÏSŽ•ÛZÏTNq¥Jê‘Þ³ÍzfM=3«ºŠ,#[Ëå¸é ê[l+ŠÍL*šüôßnEóëIŸ½†\f‘Ës¤Ÿݰ®)ág5vRh(e [EÙs}uxu_kŠÿ’ü0ÿà–‚Ís÷²µßlS°“ÚŸìs;MÁðÿÆÕ2±Q~µ+_v/ÿ·Tp¿ÄÍ@V^£°ê‘y³£y8.%²H(KÿTŽÍn½f‹ùW\sšƒiépF3â¼yŠ^ÈÈ‚ ,²/¼ãÌÔeWž|\ÈãšD±;ºŽŒ¼Ä޹%©.|:£B™pc§Jyç‚y2¸%ðKÎQ š¨T9I~²™ºŸò2´-Õ„('§ñ o1œO}Tªe·Ìj>œxJxq J¸òÜ^TÈÔ9õäÙÜGR'¾\ó1–¿™áƒ¥'yðËüØZË÷™ö £‰‹™7¡xW®{ ‘@ß¹¿€Ài as8ÐjÅð³ïã–ùó>¶FФ#IÍòåõKzc(¹‚…´‡5³ÜpÁÍôs)¼eÞƒû’ž²À®ÉÑc…Ø4()‹¢ø'Á@ú#âz*Aø‰nÁ<Ša(,õ3ZàqH„„÷¡Öt E*èUñ;ñÔ5‹¹Ü&¼Od4ÁÎâ&¦„ˆÇïM9» ÖSlJÆsT!¯3‰, è‘ÆEä¡‹d¡Ô¸|€Ë.”ÐÛø#X;ñ!Ü€¥ d~„39zf2š(–ÊãçaÀЇ¾|ƒX®œÓc¢Xò‡jäÇ!q‚³°†„¢% ‚3ØýÂEH´^BòÀB2µ¼+7HÜ©î¿bÓ÷mSLöŒÕʦ؄¥´oüxVW{ˆ¤Ü'Ö­\k@Ë¥Ÿ…u‡Q]‚RSp˜Zƒ´Ïå¾"Å ®´Ó¸T¶ÖÆ¥“ö[ÈòÀHU »³ç Å2õ8V}Ü+vœI-[Ì žcVƒEb(§Ü‡ˆý‚˜jÄ$cË [r-ЀíV¬<î—49f,–›:yè2—6õç]Øì2ý‰¦—ÐShL•Ï× ë-q"ó‹*\”̾yk—H›ñò~F>,x4 ¼ÇDÉS˜ §rK]óÿÆ „œ”ÃXU\2&tŠJŽtÉ2È‚Džðý !¡VËz°+6ÿc€„ ”Gõ6΃£ÒG˜ ?™öÐÜx †ƒ”¦ˆk´8Kž¨x˜ á@è*®Z(g¼/¢àZdޏ‰MJ™ç‘˜R’´ó>l†ááÛN»©G=]]’³°·wš«W±œTìåD¡“Žh}{”µa¾+#œµ5– CÉË yál‹w²o†Ptùù»˜ ^l}3ºëò¢ŽÚËü—ÆÆl‘„˜T…ñè-7%(Èœ•¦ÄYíH¬öɶ ½—çP ­$Åê}À ͉é#ܺ Q !2ï¼´ÿIžêrï ŠÁX+oŠB²/m“*iAÅËìÜÉtF ¬Ü¨y 0pòo-a2¬m¨ý‘ñŽÊ¡Ú$ó8P,k5uÌö‡NçäŒ~Ľ°§ÖÉ ŠSŒÅ¡ï¥¶O48ì:æm$Ë éÃKȵ¢WÈ>‘S’ü7ƸrìJÔüM¼•”¾e{D 38«‘;Éಒº9žÌ(üh—ƹ.-ŠÍp<ò]®ÁX_9v¢ËÈ4-FÅÌk ´KXŽíÚ4,ž»É–Fä wÔ‹¸ß'{{š¡4‘Â, nV?^6ðÛuKïYòçaØ]‡!‹Ð„*Â0í×ODVVl NÊ„¯àðHq0ß%!U«r‰˜~º†ÃÅ!³5ûHw’ê—8¼¸‚ÃÙ²8d¤¾vq_M“YŠÅa×Fî¬V3WS—·i;¼ux .Xά–¤ ‘*xß{S¬>ÈE­¸·‘­vìOâ4wO÷bx*|éM(¶©vsRüœ+æÊ‹v<8Ñý•‡ÃÔÌ‘ºáÑÇXÿ›³<­Ú1g.¹cSm&+Žyv(a¯"Þ7vB“LÉõ¦ÏÝFí™Ìræê ·cpæ ƒyK€Q@9è°€üzº†CÉõóÃmdž]s$˜iÅ™.BûŽAŒ…Ã\’´æX ubT+ÛˆõÛ@…cÛèÄÕ¡êQÈù— ‚L‹(Ü) d7kD¨'_D$µ]*&òÁù$žZ=U mÌ¡í&¦\Æã9ãñÒæ‚LATîAü¨dK 7ŒÇ%Ú˜rApYJ:Ò9¼ÆiaEȺKgE#AM,´Ïö&)Å+ažäT–Ù@ET¤,]²¶_ôJ—'˃ðèé˜ V—Ú[@?G\^ª¥„Lœâx‰(g "ȼŽÈ…E¤8^Äùövq@º7"mÿ…iGבžÓÿ¡ =*޹LfÁ:ª»HµðøŒMÝYé:t•¹Þuαѓy0Î@ZЮwa+ .Ï„1Ä$ן%çÎqŠ$—†¸&A¿ÉMßô(‘ RËÓàV÷›37‘Ök¿2%F“}´ãÈëä¦Ýû¸¨Ž4f’þ¶E#(- ÈKf°üë¡Wo  OÑ &ú;\‚ÆÑHWÑpÖÐp>¨÷Ô)ÿw%ãéþs`”Øtsn0üu0žÆ?ÔÑwfæ‰ šx›fÃ;ØÝS3½>ôÎÌ¯Ž¼FÆí+äŠÁCøSXðÞµCodMy1ò:Qêª ý{wˆ´ÌÙ»ÈÃè Gb„¥ÒWv4¯ûöÔX/ä ª–'`Dÿb;ê>B环²àçK´aQ8‚è*£hÃ;êÈ«Šü­ë8LìÆí¼gq˜?ÃÎuþ‚9sh#ó:ƒmqŽ<‡ÂÓŒÍ仸W¶ôk(Hio¡bEaŒ=qÕ‹XQ@P:]Ea5“ªï³‹‚ÆbOúÆ+aï;”ÐLVÀßfÆÉØô&¬ [DAÝ-róÜðúªðú<ëJX~dÖ°Ø:£Œ½ƒ”z™ ÌVÁšòº?pèÀ Í‘&#ÓÆ°8u? È2GÈtAO¥c±¶G@8’Vë6·|þ¦D P+ Ý°:3…e²Y>H›©ApKx¦™‹>‰$”÷™`ÂÍVÒ¬tÛ4C‰Õ;-M~# Q 3µ‰6QíVLOøÃLtnãe¼Å>2‚¤GŒ# ø´9AÈÝŒŽ$]1ˆí¼/))5°ŸXS”¾…AÚm“ƒBz¡40 Ý% ì.²ú"ËaMëAžLX`–Üå¼½Íù*×pè-Ü‹ È)vöò6‡Ã¼“ŒjžÎÊ W‹„ÌÜ{p íqýBÝŠ¥¬‚í ÝÝ`ul+ÀŠýÙ(âĽË0q/Ú0&ÆÅÖ–7‡1ã xÓ7Øúk›Ì#8šàìùK»åMϨƒ›`›áŒvÃ*¢-•£œ6侮k9±%PÀ(¼_ª½/d… "•¤A£ø1‚5#­áq <÷Ô@,ín[ʬÚÃU‚ ‡/YUƒËèüàJŠÊak,g-jd ò‡Q9¨#j-ªy¯[‰‚+'Á½Àyhe˜Š¨—ÖY„*¸L¨8eeQQˆ(™êBŒ —zªZFšBò™!¾J¼ú!¸¦»½¬–¥¾ Ù{<‹‚t_݂ț‘´4-®WA¢áºè)$‹P31¸s#1üÇhçP\Í“¾êiWbA MT+J´)rû+:ß³¹÷TŸåüæ2D²hVEØ'Lk™ÉÃ$㋈ õ¡È#+…b”ÌZÑ•ã]®ÿHzóB¸_ìÆ{u ÖîFi‚íúÈÇ>{Öø›sfÅœÈ<ý2«ëàc†ð|PUˆÎi€&ü´ç‚û8J¨ž„e ps™Sí³e†‚S?‚Š!ÝÀ0§©Aæ‰UPR}’ ä¥lšŽ”¨° y.¿Øg˜ï`z‡ùõû´vã©¢‚iË`߯í5žùº+¢c0™L2 F#ŒƒiÃXÆ>5/–p>xwêÁú8ˆAhœÏê °-{†%‹`¿%§Oÿ9?‘WïÒ¡xŠÅŽ÷íþZqˆcF®é^¼ÇF™G2¼f€µ|'ã)·+–y_7]¤Y`‹À'Çýù#ûÜsùˆØ.œÒÂ×Ñ«¼‚Ýù0B4þÙéHJ„E0™èþ »…oO,¤xügê4¼î;H£ò†oÍ)i`_”‹$&‘Âám ¯aä„ -Š/X'aÛZàÃO¡un[éÍî˜ FÇW:ó {iÜo翇2è·±íúßÈ/õ÷øsýƒçÎp§ø`*ÌϘëgÔš¡cóÈ?ccþŽ1P·Ä€›½h®†XNK_TJ™Æ¿ˆAw‚Ûš. ÿ¼€å”dCPé–ÇÔô<ò¯a3]¾ùï®øKÞµÂ;Zx™9á/ËUá ½*âÐYÖ‚¤ùç8g¬e³]×Ò*¾‚g*¸ZLç$X¾­ž6êiÛzœ[ë‘ä¹zLô ¨eM(}Ë»®Rf9¿ hXÓ–‹šn­U]C­U±¬ùxÿÆêiƒAzpCUɵªroHUPŠÅû™TÅÕ©T5[©JáˆU)cµªÜ«o—'i]ÓWh¼;½­²¯aehÚ»Z…A•ý¦É‘Buå8ÝøU”屬g[Lº^ <ìêbdڨŤ[¿Š$<7ýÛã'7ó ³ÓÌ{#«à o3yŽK,¶yK T:u”+ºööH¤ÀsŸÙù‹fs—ÐÀ䬪Ýt/Ì„DPÕ†V4¼r ‚—+9Y]~áŽkSÞB•Œ2#àǺña'‘‹-Dw¬ìùe:T(wÓQÚRøHòÂf• °îŽÄDFšŽZKúw4oÞa9T¢þ Uvr>,dh`I[´‹¨+ÑÒ’¥8à6¼å7ÏÚ?ÁÆÄPÇZÕARÍš˜©ÎÔ£.R`~{[)Õ “Âó&¹›&?Ä©Åc‰CG2Î#÷B•ÇÈ>ù ¶ù‹#j#@ô”ëh‹\K¯¼Z»áφů擠WÀ-ݤ¸(öÄ6G)´;ÿ ¨Œ dlö ʤÏ ®bE ^O©”õ5ªØÐAÛÂa¼veŒïW÷+‰*\,ÓdA1¨ë[ç]F—«‘·}†B&¨ Á©ä’LbEGâ ‰P@‘k¡¹™2YÐw«¿ôt}e̽erÄ—ÏD:Q7WÀØ9õ#ó{µœ .1C“VpŽÇÕI¥é·[ˆ‰ÔÁ6s4ù™™S®y tƈþ /5Œ\á*Å’Luš0DCþ“¦øh¶‹ð‰øø>²©Î,@ !ÚµŽ»©Ò&¼yC|b,BçØ»Ê(>j„š£|†â)ÛÉxvÁ°ZAÒ0“ X€V¤*Au!¿ „ؙZÌ, ªe]¨Ýr‚ Ò•¦s3gy©×¯«jïÒ¸+ùNàà$óZ.ëòiâóœ%Vó+)ïkJŸc¢ÿÒñVÞrh&N|v âqh¨Pî–!¯„ âV`ÀLí&×,ž jç]Çn³L‚ 3Ê?Q%@ÉØ`*Öèw¦’´Î=t4ýŸˆIX Ù¥e%¬ãù²¸@Û^L}þ9héµH&`¦¨ã/ ´È&¼ æ0 iŦúþjc‘ȉ³¹Ì^$%š)aû‹`r}HDÀ:wàúÓmˆ|n8 bÓ¥÷îŒÚŸg0ËÅß{±'`ÍÁ‚[LqÎHýx'1Ým¡TªZL$pÄtÌLÎ…Ë/Õ.¦œû(M^±Q2P„fA Ð"ž×Å\È5æ§JßÄ÷øàÌ}k÷+G Í$>h>ÅH)ÐØ–¨~Æ!%FS«d¡¸ ,ârÔwÕŽ7Ýu„¶ÇÕe&¡¡ãM$`§ ®õߘfÀ”ú •¸pa¶[HÃ[ÈIÂÙZá,‹=y€ó%J¶0/š•jô›‰|¤U3®ŽKŸ} Æ¿5.åêb.´™¸Ï$§â[)Ø›djn!1oY ŸæÆOÇw$ôEûh5Ë >Å¥b¹ìf(Kq›Ý>¶¯±2¬ÙÀÂ’Ä%".QcÁ+¸`Ù‘ +päÍ\`d•pÑŠþ½xâI¢{ÀKxŠK®^¿—ˆP«ésµ¬Ïõ²¸¼¨ºNÀ%S\2)ö²Æ4Ú~ú ¿h…¬ˆËˆÞw‘“m*0†¤~õc±…\(*¹œÏÆ­À"QWª°X2P ²|ï¨{ÆÏ¡nÆ-q‘Øj lª<Û…´™ t‰ÙÂ;™5ÁQSœpN©4ÖµÑ<Ã#Rªh&Cå•&RÂc›¼( ×üK)ñ{Ž\Êwˆ(zö¬¤ì,%×PµcCü>SΊê¡ùûÕíF·e0…ÊäP[âì²Lo¾nêÐe·$,[5•¦ ‡-sÈÊÔ²VÞM>ÅZ¼ÜT÷)lÅù>µ¤€„(±€~§ÍW¢íïýçª`Œ[,!òn‚h›i Á-MqhîÅóká|”¢éŽ<øž‡(„ŒS«©.©iÇ5×@‚Ï11’P2[ ‹’å6§ É—r$/ž_)_v4™u€éB£’¡¿ÚÑ*L-h×t©=MŽž4]͵]M“vû ç «ù¶«ùèj©ÆìµÆpÎa2@éWö5ž%Ÿ­ö5O§^}Ø€cîåªÕ RŒ¤¯íº&^ëkA¥&z¨toÙÕ°š]ª`T ‹öiëZOs`ã»ÖÓVžETù¯ŸEþú³È«>^yÕ›·4.wŸèRæªr“gaBx !¹`‰œ·u3BXÔ 0ƒÒÌ4%5m]‡f…ȇ-Û*DW cõ‰ÌÇ®#$Çn@Ô(0vsÚ¸"Á¦­æJ‡wÚÉÚŠ¹'½£;Cjp!g3Cb+?Ð#pyžC‘c± Ñ…£œÀ#Uèr¥´IΦ$UµúÏ4æ2°–ñÆ’À£k™S”k..×H2l$v1£”Nypê›0·¡ë\Í(¢1nÙƒ¬ú¼p„çÂVaGx‹Žw!Ažp{äŠDBœ5lÞí·öç@-¾ÍyIÇÂ\BÓ4—Ž@“»ö´ŠÍÓܬb#µ§óhϦ¯`ƒ•µ‹NBlš’jpÊM,ò*<›ÿ@gÊÂcº7À£¾Á˜-áÉ DÜ×ñ©`%ð‘F@ß¡>ø´CM×ÖÎõ>Œrk‹Þˆ‰Ûׯù÷˜¾§Ìa|àPÀTòï ˆ‘K_Âà/h¤»åÒüˆþ°$÷µÞà Nˆý„vˆ08¥óoæÖ¥¼Í]q“òTÞH_ (ÑY„ýk}êñДjü=ô\-h—’–¼T+ÕÞŠ*ûXP²PÂPv— è Æ5ÿTAÉ”FlÙRc¼ä`áM3ž™(&Ù*&¬¶Ædé_à´eþ?\9Îܺ…$4[!yƒ¾Å× ¡å}†wWcB­ûÞ$ïf#P׎¹¡ÇÌ™núvCÆhŒåïÓ%×ÚóF³‹H/¾äïrÔß›Á)ÅÃÝJð"EúûSäù™ÐEwúŽr*„M!½²gëåN! d#ägÂ5ù™[—rab¨îsÌe)àç€i­ú2iüÊþ'Â0ø­™‘ÆËñ{NjŽÚÛÖã·€²cAîŒLoáZk­@< [iA᎛%° 0‡}n¸àdãbvÎX¤¿?sõþ‚.ºeNÇ\šŸì±ÞˆÖþ2×(Øû[´¥Ü6'~×@™(ý<˜‚Kã×A9TÃ`½Ôm@9$¾4¬Y‚ÒÊ ãç4–KÜt‰ÿ}'§Z€šäÖûNF‰Xè:¾Gv¸°äååÀ>…ú“ŒBXš€.E*çÂXŒ´jÔÁ12'åòw`ÿ³KÉȽ ±¶êàÄŸ½–ì!9ÉÐ|W“”²µÍù¿¦˜®+ÝL†Sþî+¤0½´¿Ò‡ uˆZ¨©ÞbÑ·LÆGø·ŸZ½•OhŒ[»ófýx˜z¦ø\Ÿ¼z“9\Ìÿ‚ª'×™/¨ÞYTý<¨u9¹‡€v¹jE%A¤ÃfT%aZYG¶ÁU²Û’Ùã¥L°ê²TR„±[‰ 1îÍ쵡RR¬+¯ƒ%§T®;UÝQ+3jZe3×®Vƒçj§ö*ƒ ™<\˨—‚5±hðœ'µ1oÖsŠE=~;ƒ敌™Y'— =dÝDV” fY§UÀ¬ 4ÎÝĶ”=ÿIDŸ2Û 8m8ŸÑ3ŽRa{(N¦ÙW#zÄ:uYj›Pæì”·Ö)t+סõmª’eÒ¢b‘­qˆJ*&¡Šã6¶:˜g¦MÞJ¦­Âõ~›6xê|g=ïÂQ2*Â^:Ê–ÚâÖ¦¼rOí’HG·€Ô…"5*þTî¾e ¹¼í¨ß­”  m[8 LŸÈÙ4£#J¬<#JÎ%úï JXŒ¸êÑÕ·)êÂÒÐ)úwäX” JàÕ¤._ÇH~S½â=)öX^ú 7ty! —Æ.±‚½†é'}™‘¤ý\NÐ¥¨my‘ ÙÞ÷£¬î|gP·ðr¬S ïù‘\.= ÑR¨—eFÅÚ·S¶Ðo>Ĺp2 Æ©£U§ìuFf*R`õ4 ª<.‘r~]\™hÙrðp‚HÒ©íª†–ŒLk0ph¹ %áü¹§SP!7ÛÐú1åm£»]ñOS4мbò±#ܯ°Â…J‰»¼Œ‹é/ð°S"•¹>d \(%"ƒÒ±¹ïH{?“)8BãùÐ1G-5ëÔ4øÌúp:áæ0/±¯.Q<ˆ<&Ñ#ûÞ©¸¥…XKO9×Ã?pÎ]“Á‡7Àö·¯Çsä½#Cv % ,þWœãÆ‘Qwùß Õ¿lLðëòÿ˵miôc6~Ÿ~¤zÆW0•ßÀ9/™„ÚçOòpÒ®Ùµ'aeÚž´õûd§à$?ü9Nêऑ“ËIÝ—°[]P–VNÚlN2¯’bÏéÂñ¹sîÈ9ý*³•€u­²ŒOS{ܯ²Ž{qdƒ2uí¶ÿ[câÿ䢱ùJÃÔù*°h³ýëV©B)Z_7 [ØÁ?¿ÅÍ9Däÿ€Cd¶7èþúíeˆLïÞ5åw–å@§Å q;æ{ŽWúáw¤P'ú¢1É8¼á'L~df(“â»_¢Ï„÷Ûë¥oJ鯭—îiéé²ô×:VœÕ¹^|!¥ojéþo竘ÚÒ‡wAéAéíºtpxJ¬Îã­”Þ ³Ž ·h逨fÒA@À„^J—‡g÷ZÛYúzÛ}¶ÝYi;J÷Pº›|ÁJÒjÓ¦hXJѿҔj²/­÷ùè¶rÒe9Òõ´ĉÛRÎLÊ™/Ë¥ó¬)'jÊ‘¯¼LÍ6ÖQÿµË™]/çÕM,ä)$÷ÍT÷ž0cP›Ý>¼È_ .6ŸJ8_â·üŽ)°( :(Ê®Rªdd\K¼"@Äm0˜ kA¦–7Qén,HÜ#¯¯#R@°FM®dê2ArŰ-«¡èžâq¨4ªïmªêìO!Ep–XèÃ"’JzªÿÆG:ôTÔÔ­ÐL¾Iú§ÐybzÚiDmÙœþ·Ørb»!‰‰ð‹Xýšœi|WòÉ1Lƒ Xßâp¯hWö$#E$'"6D-¡«YüM¤*¾ ª¡ ›àç1­c"›žë˜üDša]‘éç›Ë#_¼Çc”Ç´äíÙ"š¤;éá=nè’¾ÃUq¹Jˆ ÖNÔXY%ˆÛ7ƒZ Ð>)4RÎ, (,ÅðžO"îåö”e¡Á|e‚Ù ñ*¾í·ì„D~å)%zûÊtaϱfÀHF¹òÊóÌh‡fyÓyòʯ„ÐÓ€VóqaüöFíóër²•¡÷¸2m“cì;û˜"µ´÷@²ÓS;hòL Ù0H9§º"³¾"8Ìœ5l~ͤ?Ò,X€³;6ØÄ«¢qË–ÄÓÊ{¸ë&Ƨônzæ½àGé‡C bPæXæ×ÐÖ.{ÄÅ1ïgê®›ŽïE•OXh,OG:þ¶Ìc®!ü}°‡©:55àž¾—ÓëSqŠw€ý€=ʆ€L‘XQ Ê)@Iû(¥Äãý1Õ’K7ïÃÁ[ÅcOðxÊF³$ÿF¾Pˆ;Ýí‡C (T÷¤ŒOi4,Ÿá.Á…H¬ ðo[kú7ƧkžlÃ7ã½¹5Ýå’Öºhöû3®ŒøQpk1\sÿ‹;³ ÜÔø›úÑrhÊe”fÎ}ØÖžÐxŽ3rˆHº‡è6Hí¢#p‹ÕIÄ”wTðÖòåÑHxàNý©q@³Aå/Ñ ;rOëFËàf¥@ó×;é°é"-M½…y“BÖù·Æ!ðà §8PäyÀµ¯ý™ 9_î¨Q®ÅÇîÁÝ×®=‡)}}WqÀJ×Tר*´Z;.¿)Î+c;ŠCä­ãàÌÜ·7`>R]f V%zon‡ $þ=ÕFC¦À}kŠŠw 9}ˆô (OSPsî)ö—¸N!]çÇðÌm™ËL-ά­Æ­æ¤=QZënËM›; B—Ò4{X!2Ãn†5“ÔÈôÁ5g=°Z蜋yÆ3¦eÈç y‡³Š“ ‚M0þ“›úfÀ¦ûýˆ‰Î¶V ГwÎÆÂíw¾0ÙÚžÛL˜î(9¤eÎUó†·'AuÖ™¨{ow AT0î® Ï}¢k5]Óþ12á[¦U?‚œ¬C Ëiø¡t €Ð2‹Ž¦A"“r„¡U,, © ¹.r%6c®£ëjk$† Ý¢eNØd‰èp#…šùÊoaHÁB×K *jÀô ¹“LÁË(¬¢3t6]ݬ>Ñ¥™Àx÷‘K§VUh¿¸Ì¸‹@ ƒ½ÆX÷6eG×p¨LÏ~Âd4™¿3gæ™DiÊÛ`´x5 Ç-¬7[õgc»°¬ »Fu: Ìá50”Pµ°ò¶Sü´oÆ WdÎI¦:#0•¾—râ¨4wAîÕ>!UÉ}œ¤Îq¡év‰‚…Á¥Í®O=¦}A@ùZh1a „À Êìgý½ŒÎ6—cõ•]A&繫š CêaêB¼7Eš2`í£0ŒÕé(aÒQà 5êÔËI0¹:æ ⣜Ù1ô[BåhËdl·Á!ìã|^¢8€¢Ô8ÐX×xÊPã[Åáœz€soÊ<ù§;îÜ×´y¤÷’‘r ïÛ)&ê6W ìTˆ‘I«9®Ìu}dâøÌ ’±‚8¸(vçL;º‚{,œkezkÞ¼bÌÙ—\¤íKa;Vµè”9JÁäÐ{ëÉæ1%ÊЩùF2tJ3B:k£C¸Ù¾%·3wá ûÑŽñtmƒ§ÌÐ=F¼M¬ÏŒuº Uï†/ÐV<ª¼¿Œ¬³s»ª)D”Ôò’—Hñ§¡í•GÓ'>V[\ãÂdB>Qb¤•½ÒSYhL_ûŒ>p©½oa‘#’í j‰1Êï#‡­†YfÖ8—ÿOQ~>S…ã’2ˆL;ËöàX;gjZ¦÷ð6’êÌ[UŽß$BŸîAà¸Fˆº°ÖÛDÖÖvf!²™Ù`à¬Æ‰*\ ÷T¥!«¤UçhB„ãYuýÇQ·¯|õr%w#CðMéŽ˧@h Íoå‹ ÃÓ«lÿsíBÈd”#çìB¨¥²Ë–U´»DˆÄË‘6¢ê^@gB@™™íÁM/8°f:gIôÿ²D—‘gŽÃV×X)Xe}U9“‡”šØ™jyž7@ôtœPë‚åTÏh!E”F¯ŽIËÅA5¤Öá‘äž”+U<—5:´ÜÓ¬ÌÏ8q¡íÓ ÁÁç„àøÐ-QíÊ»é´Å¯bÜr`ûØ9£nfÆ‘9ØŸZL[³Ý>)B:qù@9(±Óù ì*&ã*THÔ³¶„QH¯P"ÆÓ^"ouü!«:ÄøKÛÖc,ûŒ~Ñ™VÆaøÖ?Qg[žf¹LªÁ:yÒËáDûý°v™ŸÍŒçÏh{‹üîâûêÞà–t‰IYÒÈ¢QtX#‘vñdÁK)È}6©ÍŸéœt†Lj©^ÆØ!.6•MRüwÐS/[七*˼p‹È9½p;î´eÎ xHŸÚN6TI܉×E'igmã`—ÉÉÛÆµùk´….z“ß±Éñø¨…Q̲ÇÙ¹MÙ¯F˜~àF`0ë¨o ®öXr9bž;Ükùù¢›j²¿5.€Ùm4bÏ.ê0‡_ ÔëíÜà¿ì H–÷ÔÊÖÞoeÚp÷[ÆùUÜÜ—¤/þ{Ø‚ýßcÃú?7fCîýWñ=âñÈtyÄ«øa}dûÆ#(mh„zÄøÿ{à59ðmcºòÙú³oÚÏÆØ#wÒÿ3ÿ š¿^¶ì„¯+áCþéJ£î :)}ö‚üO¥ˆ;ä ¼ x8Gm:Ò*œ»ÑÒÒ;J÷€ˆº)çØÓ¥ç‡|ø¿°5Èô–®á,;Xçøµ:4ÿègU<]¯¯/ßT¹ü4\«Ná¡ÏØê6$$4p´6TyQE|i’²™n} Nl<‹‡/(Ñ¿Whªl±CxÆ>߈œð¬(…½„ŠWZ¡ÊhEP·†¯jBƽ±_¼ÁmÍðW›áÚf8 4C…7a ò¢¥fl²çšÑišíK4C.)7Ûu3º/£€;øç+(ÍèP¸Â6£½ŠÆ¿~3 øŸþk¶âó¿ü–ÓŽÔM‡_•uƒîøeû-Ñÿ=}fÑFf î¿] ý_¤<U¥©!²¿n­a*5Ìê¶µ† ®a{µ†ùz è?¿Lã©ãòÎ’`©êT>d6< éKƒá`êÒ"xË´°í‚ÒÃ/g,gf•ªATG3‡ò|Ý6þÌ¿™¼~äîó¢Ê™ƒÜÁu¬°EWcgó14Q3j¿:_vδlãÍô Æ¥ùéba ç-põÌɟЫñC MÝ1W£©~94°¶1—»# /›‡2U“à,¥¡_¿Tæs'?Jù|éÀrUºäàÀªŠLUó­ê‡6ºý0È) ‡L”ý‘ÑIÊæDú»[½I™V‰Ú\ù@°¸3ßÓ{V‡ûqÅ·fˆΠKöqå@¶Bîä}RC"¥³T¡ÿ£#~Â71KÉzŽ|z˘+i«ÜËUéã±áW»õ0µqÍg#ˆRú ȽÃZFî°_.áàZ¹ÂAÏåŸ+…# "Ú‰©J!Õr1ZÊç}8®å€|ù˜£ 1ĪåAyŽ3°Éª˜x8º,}FDªÁ&eD ™Þx_H+¸Ø¥6œ“*iǼ?†¡Ž”“ ô”[ú"(AõC€÷gþhf$ñuù4œ‡Ð{£ž ³üBÂ%i~E2Q 5j‡pãÙ@ô—æjÛŒ$ôŒ–É_QzÈÅ‘§õa¾ Ò5œ"ßSfÞÙ(ï›mêõl)ÒÒ2P5NÁ©‰Äô†ÞƒZâ%Ÿ©z(Ý NŒþÊh³abë{ðd2o$uDÔÃnSG]€²¶²U~©ÂtŽe¢ÂÍRåAæ.ßCZ{óDÂIºAK‹LÛ®Ü BUJþ qWy/'BEN;éE ‘ÕTLq¹`tDŒFŠQTäÖ½zÕiÅèŠÉ…‚”gÊ#"O1ë*m½Lð.W ù:Ní5œ°I–§ˆ8ñ=¨6ˆ m㮎`Ê Jç‚G͢ʩ‰Rì‰ÑUrAÊ%û¦¢ôdhqrŠ,]…ÏÚõ9¤E#|f¡ú©¤R—ÛÌ’ÜÒFü$ ƒui©r+«±Eû+lÜ~†_èmg`Í>FBHŠì PT¬ÝLXBHp/íO˜¢AÞGË|ˆqΫ>ȃd «,î•|7Æ–ö™z]&ƒ¼w„÷s2^À ©îƒ#§PƒÂUŽ^ɇY,Õ>]¸«¼òÕÆ›± e¤wM¤RMiÐV8èp°# 94O, I?su횊 O°îD!“òű¾Ùâ„; ÿ÷-8x 7é‡OQ-’1Hˆ:(ÔÊN°¢ @*/ýûÐWi¤R¶`‰ (JRŠ%?r’A{#G+"zžßƒÂÉ®C@J"$÷äpÅï4*_„-Ú¥€„c‚hÄîIÍã;%¤ÁMrڇ߮j2µ4æ!=q#ŠCƒlb¹'$ô Üð‘ääïO•C‚HJ™;­ó¨"oªMn‰â!1 ¦ãM~ß 0ìŸÙ23G¢Ô‘#çÉÌV€-‘*3WbМ[F¬H!«åP)&‡Ò 9]Ω;‡+ó™T@kÐgHJI%R@ŠKX@Bz˜c –çK@H¨±jÙk€à3ˆk[@`nŽ454wfÔ{YE$XAs•O”è4ÛÀ ¿¼-ÇBÂ/ff¶ÉŒ­‘vàn¶5å.RHðÁ $3%Ù@]™fΜ¶ë ÈäŸÁÅ„þ¹©UHút9°&¤©:·±Í³âç’Û¬GØÐÊü×BÒ7[0™JA:Él6%:M‹ž2ð| ö$0ïk§‚nâ*9Dy7ŸäP¨q²­FHgKxv‚äʬñ<ÎÍk9׬iõƒ§Ídx˜h ÉXÖuä«a ³eåÅQÑ!;éa6Ám£—É´ñ/èWòJRÿN²Ý%(†>ïú;É4H—û)%òMA…éCdËÊ‘ &[‚INLÅ„4îb÷¡p•é¾ ÍçKna±v‰Ä…j·ÀÜIݲvÖÒô¾¦œ¦@%wªE’•KíP41™‚’âû(I)[$È—ËXzÓ0EŽB» 9µó[¦¬Ÿ%Ÿvñõµ'ôØNºpi(¸Äl2:2˜-*2hlvèÈ ”Ù–yÒŽ6Í&˜¤)Ä3ËbÅ‚#Dú®©´éÊoëY˜t9ƒ;ÒbLòI1i“q“Îà঵¡WR óµQª çn`ÒR¥èg2²‚^ãpª}„s°ª$5wT:3›]$1¹;o„”'.—ñŒû4\ òî× G§ŠGÖ¼»M›ˆ{G¿Ž{· ¨Œ'ì2ȃ¨Mä'[²d×Dk€$7r6®%42óškÞWéib¼×€ˆ~¢!Þk´%ê×ñŒkC<(hˆ—.!ù !ÞAFÞ4ÂÞ!ÔSjDœÇ!$vÐ;?NfK©Á`¬@ˆPoc¾éŽÙ$Ì0U[€3å»"ü <ŽØÈGLj z /@„›µ’±Ï†T°‘;ClsŽMn†9ÍLA0"}'×`†â4%k:²£5… ¡‰£Ê‰fe¬þlHò9=?ÁãU85$EwPr–aÖùzÒžjHrø|R9ºcQBÒ]…d/¥Fa7ìÁà3©q0‹ÈHÉ›´ D:«ˆ¨@óMˆô‘Ü䊂)­Ÿ¼"‚J;éåÖDt´ŠHÞ:P ‚è HWâj˜•~?i‘¼A¤ÂÚã>fæ°ƒGÜ4Xµ’É h2°’a·é/çPûÔ…p¼G.Kš“¹ö1RšÊ®°„ÍuÀYYö˜­öè³Ú^C¥À”ŠH†LN3’ºZ`õ`E! @·a·©–݆«TÆáŠ‚“­t,K€/#hèžÂèÇv›)FÉV@°N}¬ÆC_Ùž‰Õ@T¤ïОœ„ÏÌû{™¿WúYU8‡K,o-"»ˆŽÈP€M)zÂ}{ ‰Ôµ ID„ä/¥B"@æÐ‹Í½T0GC" „”$ïä8aBiɪb s° O[y‰´ û€ß× ž"§ÜËÈ*ºf)ƒº# —ÄÝc48/þ”‹(˜É°š 84TÊ“wYLMðv :Ë•w(ƒ°”PìÅòè–¨Ûš¡RZòYp?QŽŠÄd5N­–ó¥ ÆïÄÊŠÁBµŒ;N|­ÇNc†*Eq<†ÿºGMèc {ÀÎñ¨9‚ôSË.‘Úš³ÆK;*£u¼ÄÁ‡¡ àù7ŠqÙ±$e™0@^H`‚{7`| cÃ'ÖR N î\)NpP!€‚ðc(KüQ¤P?HDª’]ÀÖ\îT"¸‘×89'_q*)˜]ý|@¡ÂsE*€@#xL?uàFéDlåQTP M®!5•c ¿rxÄG«@åø €öÜUÂRÕ²FêQi¸}`'$ p`îçÜ> ƒÌ,­e ŠÜ=™þ§üö´ÒNšª7Â~Eã’\fAõT¦"¡ö´>œK‘ìïT4Þ“¥îiOÁÆʲ§a…]íDŠ9  ˜6 Òd'¡Ï3+Hûw©ºJ˜ qVWFÿœê“„bï2¢kiÄÛ×rî È4h×!WiÁ湕"ƒ”ŠÌ•º¶œ*§2ÍÉ=Aæ*"@FÕE¤l¯Jð‰áÕ}ââ`%¸EæV(b)WÂ6Γª€M…6ÉX&#6Yy!½z–8·¨H!T š PÑÍ6O÷É" ÂOv! -ó×uU@åª ‘î-ß(M¤aÞ (Ÿ°e7Îw±Û&w%á^)3*îÁV½¨æÆŒœîedºjê·Á†îÂ\G`å.句v$¼« Kç½ÄÀâbAÂ5ù+J±±¼¯è«QøE”÷K Ã´5ÿÒ!WÛP ó°Ü¢e“ôÉVm7¬¹5_À7Fö 3jÆÎ Á]5!ßLn¢“ÚÆ›‘ܨü×ý¶4[ôÙ7éý!öê_5føUc²Wy½þžȉÃ9®¹ŠçÎ[¨< âpc0…œšx†«%ò”+~õH'x2ÃøÍ….mòB ËÍ‡ð°ƒø¸ñx æf펙úö$˜kp w;\vh6 ÊíIh÷fD8 ‚çE …ѬN¢¼Ãv*¾‹¤YßÜ^ljpê@<´@HølÅ;êÈr‰ÔEBáÄ©TôÒèf58™y“þª«Ì¡bI†4wˆÄ«àŸRä3¤6J‘Fþ0(GÌ ÃÁa½tJ<äÃxøÀÝâå\•S§IäÁF>%¶7z™ÐóA Ùî’d¬cͧññy6Vs¡*§«ci/7µ¤5¢/úé$[Þý*⊵ɂÆ`‰${ç¸"¹;MhÔãz$!WFH " qO'4&â!8?.$RËT[˜üÈX6_X;LXY†c%ùGµûæi^K§†l^õ!–ÀRè:,7¡Åd‘Í}]¦t:‚¯PB'"ÞQ\ŠœÖŸ¹æt¬ú*ÆG˜ÔsþŸÐ´A¦ 3«xi$ÀÒt_@ã6 .àù¯`BTÓ£¸76@«+‚ãªùhnw@¾x¶x"vyr œX)ð—Êâsç[d´u#r³¼“ô&ò£ù¸§ÛN؃Ãn/9É:ò&¥š÷o)#ýl4!í¦ÈõcyšðbNYQÞÆ‚–˜ðQÖMG8¥ÕËXAæ~¹½£bÛ\<:vB^^´³a'¥Ê¶\eèûÁs'ÈV{=ý§Ý˜Ía;íFhh:ÚËä }»:¶ÁÕËb#ÄîÏ6‰y{E'íårWc‡"“†…#‘cyn„5¹.œ|;I(!:$Dηˆ@ä/ª×0е(ÁÞIÆ65 ÜX’Þ• ®ÚIWx_ª.öPrX‘à ÊP*Ð#Ϻzî9~]"Ü”³;ÚPhÊ»ÎQ†Õ¾LбúF x—öæìø hvuÖUæØæIßáòÕ.V°},õaèÊI< ~¾tá9æúŒ¡ÑYBpEó~ Öà ³Î¸P (Ô: ,4ÙayB«!M($x²î@H!d/‰xäY@i lºÓ,]ÆáàÍЂ₶‚¤’€ 6Ãì|䯴{PWâdËKQL˜výäÛëP@ë$  /í°àVGŽ•Gjž`Ê qrb¡T‹Å³]UáäÕ‡-|Ϋ ¶tdz¿ŸšŠˆ ÛÁ$S(ßYB¾ Šy…‚t(³£O“rß$Þ°HQ¸‹ôÉ®"‘¹Ñ‰]<Í j¤àîú~D$.v¨Tmƒy‘ÑÅ}GÀËÌávzêþŽŒåááj=æixqb ‘¡§ÝAСL§mÅa ¢Ï±ºÅaá98Pü¹eN¿ 2øV†–óõ»gfºM¹ÕÞž!¡Ï|J™·Ì4tEË5'ØvDÓycƒíƒYÁœȃšì¦™q‚…6…6ƒÜ¾„%¶”A˜„©!TS²ýh BH Þ@8ÄqלyLšœo( `À{7§ÛölDZ3݆+½é6¿“àÞ!ê{#šmC… °ŽÚmÄŸ Ú8w£ ù¶O6üˆ7°7Ãw¬à æ iiSÖ6é—}jІ­ „uèF—¾µÏ„Äûié^ñŒ;Ò`Ë0܈Ø9R&¬¡-¯{GX[±w`ÔOåW‘I¬¡É©Ö.{áS5žûz> ¡~ ’ÿ†|ìW”gòÄȆvˆ,݇¿À® ™Ï=Ýž”XC"ó“-nàhç¯@XHþsì)$4ŒW ß Iv$Þóx $¹BÒ·Œ.Hú+ä„ä(Ãjà5$–.° ~9é ^bêð ¿ë›1érLm«G<3x²ÂŒ•bÎ{­¢è†*‘ƒÔ8ÈÞ(&=‰/ŠÜšt=jIÀdè³ÛSL4éM~äÃy^­6m…”b'í‚ t™2¡ndÝç\) ¨ôô™1«ëB\>]…ò¨$,í¾~¤ï#èn÷”ˆ““äi)è¶²‹ö(2mN6É2ðdëv®áâü-pùñ*.§«¸´ð9\òám¸øÌøü"¸8—KåÅ# íî}.0]ëk`(My 0Ú‰èMó‹u"ÿ~²Ò‰ŽW;Ä¥[M/RC ³{[7r¡¡Ãä­N>·ykÝgCJ3K8VîŸ`¹ÿãÕ~ôiÊžýq‰ë¦™*¿¥ kû¯¥Û$…¢²°OÛŒ˜ªÔ, •'ñîƒb ëS„¥¿„Ž gHÖeqÃ× Rañr«`°¥²&ŸûpÁÉ5*P¹T`¦Ç]B£">‚åk4öyk‚[PYÔÃ1÷ƒjX¶9"/ê™°Ór¸\xÀ8έÉèÙê ì¨èv=.çÛŠK±3ǩŠ#óy„O¦„Lcd¾o´¸”ø°™Í_˜%^…F¡Ù XK@PöÞ¦¼š[³Kn+qÜ@é°–¡hC—Õq¹Ó^¨ŒQ¢&N›jœv—góÇ Q¤M€ãÜ}ò-Ñ8ÞYAÃ37q±ºÐôæ(ÅÅ \(°hȱU4ffÞÄjŠÆeà3s‚+šãŸ{1âM6ÖK¤=ò=£Þ¡EãU³†Æ¼Aã3xÕFýmlôžjô.ñ­>3ÁП­€AOý Ù]é1JP¿Þc.¶HZë0œa8ælÂaCC‹Æ‡¶Çhü¾Úaž ¿¿AjÏOƒ½*²~>»ŠEÊæx@¡ßMmgɹ;Æø}ËÆïö‡1V‘•!õRDJêI¡(ÍXæUMQ(8¡(ªok(v•„±+Ý-ôoxx\ô37sn‡bb¡ð,°cm ˆà¯éÏÌ]…“iÏVöß »ÿ§AH(´­‘ÿFâ)ЫNÁQñ¦Ûë¤P‡öíf¢/y™è÷t¢£N™è?Ñ¡WæÂXHHHwaN{—s:Úø–ãîñ˜.~ ´`æ}}à½è¦ÎÊ\Ÿã. t®/#+æú21×q~ñõ\_έçú:_×¹>Îír4z==ê§]X¡É…lk$s}²x䃣Œr>rm8ªç·› ÉpqcŠI!ó,þŒÐ`¹•´¸ F4ÚËÛù() F2ÚË,ò––µ&åJKOÀqùg܈FÛ¢1W4Ò‘Öa°L“Ò˵kÁHFa0Ô¤¨…«88rÜŹ½H¾âõ”kWŠô ÞÇëY7Ñe˜£nd¸8*°4z8GÐÀ Z4j2’Q˵Blª—¸‘sí(¹.^q±0Ô™ÂÂ¡Öøš‹Í˜§]&0ª‡·hEP®G ج«Ò ¬¾M¸„‡ ŸMè=“Û@^Š96XXÔëíR!VCIè¡0NV[?s„ãÐ:öÔK… 0yä£#gUe9ÇR!=,ŽáÑ#ý&gÚå·í‚»®2bŠSÚæ«”‰x°é,1C  ˘#^”Fט-:Ù°ËÐùÐO —™oÇ¥p"ÀqªO¤¬.ÁÁ³]*¾X‚]j_u§á„_Ò• ChÉÊB³.ñZ]¶WáéWY O¤ðd5öG¸›/ Ç`ªp8fd|( ½¥p ÍS8t³ê~¤;N¡p&vÔâaÌ”¸e ŒÜÂ准FSìVïÉù¸[E,äN7 oXÀ¹y-ØÄ¸Öbf¾kX52^—mùýÃæÎŠÍpL/äÞóg—|þ ØP…’A¹*œQûõ”è™P!€¤ì#æØ\LîhÖ”œáÐ$„=8ý‚uͦÒÉÒ;üÛË!á±ÈLI;´0õ¨¨/íý]c¾bLÿ× ö«Æ ÿñß`3õ»<Ò d’¶#{ÌyîXÔ©µWI´S`ÍÏóÃëÇ’þÇ‚€}Ï„rpûïÉcêÿ*ÈÚ±oè‘;+G¤ÄR:;xcÓ]©é›¦ªòõÿš±54oƒ“ƒ÷_äûQþ’œï[ È9ÉW0ûú%còß›þ]S¶£¬c̦¯n&]l©ÃëEš÷ÛÆ5ðF:QgYˆ§…¸dl˜ájÇ·@žÏ\ÈrlI¡»¯àC9-xL‰—X2ÓNP²{sÉ©-Ù«KölÉÞjÉÞ %SFJÞöP2·+}âL[J²€ÅŽ|W_¨É,zFe• )zç«…Q½Á¢‹`üÛ*9ñ²µ9ŸG£¥ Âá×pØ’3ÿy8Š~èÊ@[é%¯~NY憲~eŒ¤Ë¾dSÚketP†²4¾ŸTC=þš^Á‡rZ—eÐàõ_¯W¬ËKƒ¥Ë žY‰U ™näòiä|ç¼-± ¡=ª£$ö) î4ºÃ GJr¨ù¨ÂîŒ ò5*uöºÀqÁM#°Ž2Ë´¨\HGP×<S\ž[Fex1Þû™|£ŸÝ^!éj¤CÂ}½îbðR“°"Çecò‚0úÓ]ÿGGaE +7ùpœ»Tå€o/…<Á˜ñf }Ȱɣ_NqÒ§Ôô*3Μ‹\µ>&¸®eù0i“‰x “6ìšÃ]Ù5ïô:ß@Íd|’PL$1A?%³$‡ñÍ\.„r#Y%÷ü÷  þ†@ÜD[R…`EŽo­¶äF vê›È¹wÕVì/>”ô±M®FÇâ»>Tþž‚¼€ïc¾=0@BŽC.,ÆÅƒS|:©sÛ^½LüvxÚcj±ƒ€hN¯/E–< H=É ‰Àâ˜-©ŸãyÈÕr‚Ë=Çà`†!ÊÂåeϸ—näT2”"-ƒdhHûÅ?ü ¯’ß=œj’jÂ!𣧨Ct˸HÖç1 “Vð«é‡ÈåÈØ@³§£f˼ïåò b h¦ãÈuÜ£#Îmõ‚fmyÕ<‘“R#zao/íL²vÂD%E¤“|ŸÄ‹H;™Q;%ÿ£#+Éü³!VmL›K!=9† =lGÞu'ùË9]$&¼ cP&Çö2æ,Ác='·ã[ˆ!#¬Jt'Ê¿À‹2¢½96xþ¬vÓÞëhêÍmÊKã¶ê¬Teàz€´±‰sk<¤ô2٠ꌅ¯%HÓÓ,HJKÚZ˜?J8žÐrj“LjOóg^‚Œ0´KsmK¸âyk}è2Ö¯‡¤Ô©ˆ¨{ D>²Æ=ÆBr)QUèAðÇrGµG–€ätÚqÌ¿ü®"Õˆ¤+ˆiZè*"ù[˜É0€¶‰„KDú¾®f/»Mª6/[Dú‘gD$ü®"’JÄö¢™ï2_í¿¥Â–@bÔ¸G!Á¹ß°ÂË;^.ƒ}®cØÉ’Yí¶áGpU¸ÚÁRþ°$ äs¼ˆKЀi™ÿ/˜ܼÀFž‚QrŠÄ)SªéáDežÂ;Á½È™qÙF¾ˆC0@nãH ¦z5Z ÕÍb†Ý™`yŒŒphìM7PµŒë¨ZÂã·f¸ð‰[-å…¸ä0Ñ|ƒttBsÂUãÇ{ñÔ *¨‚¤Aƒ~ ºÌŽd$’€ò³"ã.‘Ÿ/Vh˜¾/'],±qât —¾¹´Yùg³àž‘‡xÍ—žVŒ_„…‡¸'€gÃx1ĉÎ@ÐiŹçà onŠŒ¿ÇÓÁÜhpp·ViY31йPtp¾Æx\k‰tâÓ´ši/!,)H|¹«ö…$2ô&–;ÜíA:!?£ï«öC‰MB?&%E=ŠnUËtæ §:ËúÌq’Èóƒ[vÆÁé ^Å)Üi¸Ô…$¯VUÍ 4CjL?NŽ3eyÜZ§òD*øH\Pß³„dkH=ì ÁÍB¬×§Bö– @þ͹¤¯žýL€†·`ù,_}? w þ:@WöT•Dh!Qe¢Ž"ù1RÞV-Ë3ëR1"AZAâ&GÇ).Ô«3¡ Ÿ¾Ó a%•Ð[ó²× e”„ü]ŠuÆQ‘ˆtCõ‹:K75mÛ&RbªùÖ2|;EŠxÀX‡\hÈšÎ÷åĬ ñœ¥ÝÛx'W]Ó3 ÖœN´ (òAÒ¦g® ‡C5”Â>©4\­2Ñ&¥ün­¶¦Ø$Jíà ’zOt‹„TQLGùP1ºuä£:±_(D½¢w ¡G¡âøo Ðif¨¨{ŒâvfNJ„:ÅOj€ '¯V:W„Ð6Qþ§ß—sœAHndµÖÇkµRå‡ÝLÑÁÙ ŽnŸ&t»©ÝjTÑÁ¡èCë2 ß8ê“AÓô°Ïø2Êá¨;é$¶Éãï©sí„.‰ú=ˆÐPÉ-ƒä6Êv° õmÿšTµ÷åi“‘»xñ.V+}ºR© èÔ<pò*0! pjû¬&JŸa·*ø1·“Z`Ü_˜àBrî5Ûuûud¼ëÈDt DIù-Ȥ52.‘I™Ä»­ÖGp›·B™Ä"sÎa}`‚=0(r÷-ZJR=FÆÓ ò¢?žÊ#ÿŸ˜mèþ!¨‰–ÃúŸP]Ï(¥#°Ê3öÔC>kcúÔLIÇv¢WáL9¯é$7³QtD” "¥Ì¡-ä$;¤ÿ ‚òš€šÿ„@UÁ ¹µBiï„eéÍq®þZˆ ã#÷í©óÎ œà*$ ÏDæZÕíˆx‘é "“ç™kg@Ü#œ’%"²™wV1 A‘©E$¸‘·èÚ z·Vh,…»A$¬aÿ‘)„L?>¨­nN±¼ DÀ•Á³Õ/Ñ}rpF¼•‘ûO(Òi”²1öRO¦'¥=E»OäÅ‹º÷ÈLªöïa®YM-¹™™¢=G&?Tâ„…'ç×ðÒŽó'?}i¦N?ò$@Á·V~]†´ÛàÔ@ KOëysÚO Oî~?òrR"{‚K@  "O"_© ¥ ¡=…€ —þ:|X@0‡¢ñ¾êŒ@2¤D¿„ (ÔY$ìÃ\€dÜX0ÿbZ)%ûXœgSp·U(€¨ßDN% ­'T±—uÀ¬ÀXݬ›©ÿ„BÒ†n(®í Yòõ¸üÿ"ˆTÞžŒ•=2ì)³NÚH ,½Œì¨ÌŽ‹½¼ƒ“AŽ©i&7ÓTžpL¨ø>.hå‘á$“±˜ò'”_ßucÉe¬ t¹…[ªäšC'ï„ã1Ný†õú({Ê€½J‹ˆ^µk ç‚À䣟ëdÑ™ LÙK&/ÒFŽYu—¹¦É¨áu9e/5,†p4¯uHS†,³Ô~ÑæN.ÕC‘dÅÈJ8_Ay¤cŠ,$-ZczœíØÈåuiòHe‹s4PNã-ÝZõc`• ’m±’ÓW¦}ëý­Zß š.ùë’0B`!L9Ö,º,\ö-Àeð*µFè9~åã «±ãTû2 qRz£C‡\E1@èHìå*‡#;·&¢ÜÆeÑA[S9j«úÒ Ñ× ª§S†{œ2ØŒE¶Í³Žè~C(¹¹~L¶eFr—";~7³kœV=ÄÒÇpÑs³«”S« Å : (qÞ<¹‰Ÿ )?6h[õCƒs>±pía­·ºhÀ’™ŸT‘†”jOýœ!k¤(UF¡ :&RÐH Ô\Tîa—þ«i ”N>÷¥%˜¢>EN(ÔåÙ²âNšzŸ]¯+ÃêT¤ál}2Y;Ë7¢ötd2¸Ó²m±GH²¬‚àƒéqÂó²Ïn#mš ^ü¦ Þžúñ}2?á€nâTãn;ñ}ÐåªÙ¾o†Rv˜æR©e©ÜÌr¹àÅCÏ™_ÒújqCÛS„öÞ'6{ä«ðNBi6k·¡{S7TŠÕ®x6GÂ4Guœü zÿ8°[ðgÆ›oÖ–R¾¡q=SºsÄ¥Ó_RŠ÷]ç-SÈ RÉpêAš™ì|`0l‘Î$j¯FÎö¸LÒ271#‘søEcbì~aó{êòRÂO«YøS¸X`IKk„ý¹.7MÕ_žòþ¹k̶œšþ6¶‡»Øtÿ²Ì^6Æç'=cþá&ß‚ÿep×…y f&&ÃiúùÏò³üÝ3½»ÊOÁyDËy]ýügž·¹z†çoAj½º«¼œ—{8oK?çy*½*ȃá®êŒ†>ˆ„©-P>¯OŒMˆâ9OŒ_6‘œö²~ª§9Nü[ØiœÝ•¨->|Ù”ƒ8ú{üDNø¯M5. ´™³V•€%„èapŽg¼ ªÑˆ?·ÞË—5¯ÀK~“v8cóßó³MR^6ŒIÔF¾÷ïÍÿiå˜4˃):Ma]ÈÀ¨ÁÎÀW¨/Ý íG#µ"ÂÑ)~uåˆÊEèç«+ÚZÞWLÙýqâÒ¢ »ç2–÷À<¥VQ„FsÖÝ P´IÇHétuÇä=XT"¬ošÑ™”ôa‘˜za\Ï ´5 *êµep„ýW§H ŠWü£ŸS$PA>•³™øS$r­-°Ú²©ó…Ã%ŇX6riäakŒ )èOÕõÍÚpàˆô}›°?¦ÍGS¦Uœ-”Ѹ@ê¼ÇâO#lIÊÊ-iU—ù”¬ÍPª;µRe©º‡«›Ã\>µ„† _ALÕuXªE ª§qŠ!ƒXÊ…l™žÄõ¿[,Ç{3$þ?Ü›Ñ`2—£ƒ\-ÔaöÅÓC—…îÅ,3:Dö LqŽ¼Èµu‘[ˆ½[fZëõc󤻀Zþòý†³‘=†çškŒ¨í„†È†{Á²Dl I‰ ¿as‰C §çz:U/i£JqÎ1KD˜ÏwµÄ]0Yê7±Q&%Ö*‘Ø9»k÷¾˜IÑHcõ%kqKn|ÁòuÈß®i'+%Rú²:Ol‘Üà³:–É‹(R|ٖٳeî=Wfóål*#L¬‹"9T^ìJoË¡~yˤ³QŸgføÙPÏáRÊXÛ׊<‡ä²fBb¡¢¬‰é³ÄÓq¾”~EÖ­EnèŽL]ä”tUÐ1NßQMà”ìåøñ|)±ÛŠ«½)S€hÌÀmœ•"ÝkEÊsuµÈÀ|~‘ÁêS†¹õzã–;Ž;ßÒŽY"î‚àÄRBºõÜ?_æ ˜òäxc¥Èq¹‹"Arºø¼2—·¾©ªþ9ë²Lä¾ò±ª»'EÈßf±ö;²igg+?¤ëE^tMûû¡M/{«EÚŸ{~S‘«¿ÍÐYí“ûd“ãq0±J¶Ú'ݺOòg´+c‹–ØÜ7»æm%BÇ—¨¶?puÃqµÄ`ïö7| LuaBþ=‰®a2ÕžC® Ábc:0wêM´‰GºøÂAûSZ>.i¦2¥I0Ê;ø|ì8Rb0™;,q¦f³yM}˜v8M‰Ad ¶%^mÔ!Aú´ÑÝ”U?÷k!OÊpÊ£ÈË­KM¤ýˆ¦g¸m9/Y0ÉÆæ¿j¡*±ÊïªPb‰õ{–ƒø>©Þ”D:A?×q3½3Ì–W¡¤ž<ÑW™ÐÖ…cNZ%0P{#öi*$?É<êò3™kynçÒøMYÇ¥³´#Ç‹Ðhzjžè«ÜŒ-ýjÓ‹ºp)ð¡Í;–‰wÈK2×ýSì`ȇ0»¶?dn«-%È9½)v ¾Ý–ù°ÖÜ¥ d£UH©AÇŽó]úý²ˆÈU$p S°ë"¿-mX½5ôí~BÒæ¢Ü…6•g‰•R»û14(ÞJ4Ç?òËèî|M®¯’: Êÿ³³õU²TM¿þ`xÓCù WðÚõ¾¹vÉï]û£©î?·!æ‚­ÂOÎø#´ì4‰o¿f…ض%,Åöu)ÏÙ—4OÓl¼PÇŠ_ùELgµšnp‡;òÿÔ Ý,(#™† ¡åöup 4Ýszèݱv”_³YA¦ür]ÿ jš4m¸ BãDË6È›»hÁóí(·Tú|K^`änÀm#ŸýÑ×Ù àzƒ°r’ü²Šƒ€,ƒœ J´An´õB^¿À \z”ÀÚP¾ÿ¡²Â=•^Õw VW·ý5YiJIå=v^p&“­e{ÒÕöÀT±¿Öo½=xî{«í‰´=Þ­íÁ3#]m-Ñ èùõ°Ð¶Ú ¸YB%¨ì:h2Í¢ÍêɉãƒQé°=#ÛžvÓž®Ãöt_µZÎèæ½LšÓý:(JÆišSD¦‡3©#¹Éæ@Ë<¿Öð°?¿1ɲ1ÉÏjL/iç?ocúÆÍï6_,WU`ßÑ—_OE×7‘™ÿ85CKm'ë>¾øNŠ~äÈ´õÚ×!a›~¿b«Ã9ÿ&ªÃSÌÜTßx¥>Z7ÞÕ~*ݾ¶ëF/Ôù´ë” 3ª‡6Îê !O<°ª':ddÚ!› ‹ñ˜±Ò¬’<"‹,޼ƒ=27äÛ[æjCFeu¥ö iÇ\ uMЖCôûté?u ÿãêò‡k.PÐñ)mv”‹ruØ„µ­A“Ð+?¢ ¨ß¡ï&T1Q3­@iíÙ8woP¢ô'gŠ|Y«i$³s¤öxŠÚH¢?˜Ì^µÏól,;¬0A7÷ rNy]’R÷o†ð·ô«ýê(•(&”¡C$ Ãà/+Ø% gÞ8§¯¦”²&=âŠòĈdÌtªD.øøs ›Euð<ÿ)<¥MX¢ÔJ`T€O›é,à>éï1 9öYMP¶ÌG2*ƒr_=ÅNG]e‚&Ò2çÚZ²ð]óLFè«Ä•Ÿ^4ÿµ”>¤15S¿¢6T¥ P¬ùo†ê<úAñ©c—Âq^4X$shÄzÔ—,xãWººL`$‚ºGd<š¢ª`ÌniÔ¥Ó©Ò!õ§Øø´Ò$6>öUp…bÓ¯óž0y ®R±AîÀ%}<&’Zpœê3EgÌdX¶:¨r´æ¼:hXu…¬Ëæ1-Oek#p!SÎívDJ¿KnŠ|bzÅQ„º0m„ dÒ…;e¢Ò.Ë í¢Q¶ÊŠÚ¬#;ùàÙë|¥:´íP?f82C»­ñìqÁªl8Ê»Ö+ÓÐÛv¡tž`mP™öIF²lD/Jª7_võ$}‚àAÛ)ÇÆ¢ôžÄ£YãÌ+8fÂ7YÍ.Ùün‹žQçrƒ‹„!æ1”X6W°ÚÃý¨%gõŠl+:^V¸ÓãpT+娤rrŠ˜‚„48µ{6K¸PÚ\?&\]ÂÕmà¢e§[œ6`é–îÌnT]N,µU´®- Ê-϶pÙ¶.% ± =îm­ÂõÀ5©©DÚþ%^ÎqÒ­ñJ6—]/Ø— x<¡!çx_¾¥óÒSÚ0‡´¾ô²-ÜL'la½GúƒüÛ’©\9å ]7÷¥ fcv<Ø!p##ˆÇà_ó—»ýÖÕ½ÊOž#æ£@7Ž´×ÑTzˆùìu¥[#ô/TÏ üüÜG·)ž†£ø ­l¯“9›<]Á!ÙE› F¾<’òÌ‘ùÄD¿ðçWqɼÔúrŽÑÇÏsWqÙuˆ 0‹ OØr€"L'ˆKBËN¤•-‡Ëmœú‰âÛLhçí ä€ÒÕ„8œF¥Héj8†©gqÉ]ÅEŽlõ׸¨NZyS Xœg—÷j\R_q‡¨nn4Æ7ää§ÀEš–ýFî¥[uo> dF>è<ûÐÌ£œ‹Ét›ÑT™›;³ ìêl :8߀|]€Í£YËÎäUÑD`¡§ù?æÚSj¥àç‚E¢múEþåN@Å—èЙƒ72ƒVdåWŒcK¹Ž:)¬E`™‘i²a}&ÉË%,8GZp0uAŠã%™*;XkÀ®krž%£˜º¹Qî,óS÷ È•3ˆ®ÂB¦¹>s³³„e®ÇÛ–'CXèuŸoHéhð܉þ]ÃBÀ–¨†eGa ïºæÜbÀ2"Ž9š“…½Óp’ˆû–â"ÕX\ÜÛqq˜‰5üÜXÅÅS\䀩Û =›o .;ê*E4ÝècrÍwkËÎ×LM€—§‹yfµZRíCÐÜ‚:ý,wÌé®§fž9ºŽc>¸FÖ‡ó§—¸û`qÙ}"KØÙÔÝç¡í>šXŬGSæ¦Obk¯öô¹&š¶–}¢¥„8!œÊð}ȵHWI!؉äT#чS<<ò¶­è°& Ó¥l3ªÑI;:¬ ´ä RYʤ`Ö¥ƒ5ÝžH‚ÍœºÕr šŸÍöDðéì%ŠyŸ®Åç¬!åö Lz†= ЄLc.—Dì\¬ÓµˆdÆÜ²¥D(§»§EèRr”póä§+œD,A’H­©kAÊ¡sα‚„ÇVñä°|hÛ½R¯Ó€d²e8“aj–)¾:H ý= â$¥/?Hìa>•J0_¸Ìák¬L*Ê (µu7;²ÝÌ]éf˜ÈRfˆýv%2aj˜Ö¸û„ û~ÓÑHCaOsêùD Ó¥P@–;§¥ïk>e9®&­êÓ>Rˆ]Ýßоƒ›ºåW¹’ö§¾¿/8ùèlfå1”õýÛpbæÂuœ\ Þ48ùÍ«{¿J² äìr订$TA)XA)XC‰óÁU”l,ÜÜ%™lÝ[)¨ŽZÕg7€Äé¤6|¤à¨ 'IìCÀ!o¡’ÿ^¡±^ l?ˆ2ÐQ6çS¡K„¤"?5BðêÔ´ü§ 6BcŸ;Öô35Ú^CÇ ‹¨-ÎWÐqktœ•àçbìÕc½„€™Ù4Í`¯’ CüÈä³×¶TÓ ü’"r‚¶ã¤)ÁüùáÚ€o6¯÷%…ä0½Â>†€PÚm['ò?ÅDC·Hë¿2àƒfïBÆâ{ä­ñk>¨Çû;˜! ¿2Ú»œFÀ*´e¼ì[þ›8i}´l>,TiŠ$rO—áw0—:Fh¸'™»àÅ#6Ä´ó{È’:tÁj6i)¦‰˜sD‡Ò€—èI*(æAÔÀräÿPùÈ} ˜a*áá±Âò=Ga©s\áÜ隇¥ÉÇúd"­Ú†‡rË3¦žn®…‡GÄ%Œº6w Ké2<¼}˜· ½>±nGRÆx*õÃI¾—á±õkÎ7ñ£êÒ S`éDí£”‰ÎÍø.W’î°ÞÏã gMœÖ¢b® îHƒÞ´ö®©F2„pügêôą̈]h¯6#;Žk2Qfl{›q½ƒµõ•ظ¼ßû(µ$¶î±ç\ÂÂLêlÓaRÇ&aÉ…%SXXÝ { ,CÀ’t`ha9G*|Oa¡ƒm¾¤KTrE…^£DÊ|ÈéÕj8 À4…iÙz!ö5” ´Gð/%Y®ïF]E¾v¹„w$ˆÛÖ6 ´”‘îó× <í31‰ªŽ ¬ï6K Èïj‡&ÇEFŠº.Qèâû§ÍEÄr¸DaÙ?õEŸKÚ‡°¤4¨\çô—àJ àÙjtí&#µŸ6ž‚J?ÁÖ¬‡¾…ŇŒ¬›MMë®PÐ-+rGÔ­±­­»ÜÒ'}(kV($jy«ÐT7Ù“1¬ ºŒeŠå(,Ø‘w3¬A‹Á1Ó-§ôtJ˜áq’º…r¹\™!{ù–ê9òT`‘R0ñcVE`` ºŒœY¡$FÞIÃŽ¤N­CBà–}ˆKÐÊü ? ²Ió˜}J#¤}{¸*µî¡¥ŸŽ͘¶¦DÀD´i1¡s³‚ƒö¹Ëe-†1T&CG…Wf'¡ÈÉd:ШFþ¸ ñ4˜Ê9ðãAT##d1e°‘Ï€…M¤< (NäÏCËó™üö¸!¹a¡€ä†JX¥ÛÃ"ÔÜÞ\îÃÁƒ˜öœ2ÎÂàSK/4ºaÀ2ƒ¦J¢Ü¥zF”•Œ+¨îÉѺA3kDjb ã±`×ê±”{1ב!=­oc1Õ±"¿sw®§F. :—ûÛUTcGË!êåA¡¤6 íŒjìÐg‘;¤! P‰ñÖ›B>æÓ5àüXZ² ‡Rlœí ß ºˆ¸Kìz pz»9"¼7*3s9Ó ‰œ±ÈUpø,:Ö¦ m‘3µúäkfî9@깈àºÖÞt¸™K)Ÿ5à¤GftîÔíB%˜Î™2<ÏYÙ1æÐSê§ãRçdÏd\­"$!zwª¿ÄnõT0+Ù'}ä“NOöç8Ȱ}¢ó1í’Òmª«´žÙ¯3þŸ:tWس©§cçœN€< ËÏrÒ¸-x•œd"0/@¢ºh+šRO‡î¨Ø8ªöåO;;çmÔýRÐÒ>6Ò]îñ”HÇ0§ýŠä•qÙì æNõ±Ý<AÚϱ/ˆ‰ôªtÏâ_Sî‘…P«2®B¤[ƒ0÷TÊ r¹†‘ ø†¢#.*¸%|@Ǻ†·}‰Œòf{ðR¡'2Q|“  =Wã§p{°¾i°øI;‰©>>Ò 3ÎMµ'âè©¶xå±å4Ð}Zrƒðk0ܼ£œpñLóÊÀ”Ó)î˜ :‹H£HçÃj½BáàÙ¦¯ÚÐ-[€Úì°ÄQ .E/âÝ/™’24t&­jÃRž;ÐBàÉiÚ6WݬKJê5,h-.íl-G«€Nj šƒc-Û$õqªÿ*éòß’£á‹íú—àø"ý×Í!/üGJÓ †×ú<(Áþ¯,?Ÿÿ–<±þ1®ñ"|<»öñ4XýžÿØíe­tó¢ý<\ý|l^æŽâ¯®}öeh<ÖÍÿԤמgÅI)ç&ø/è)CÔ+r9Y¾œs×Ò]@tÿß®\&°~ïÅúÒß?ä+½ûkÆÐŠôùb¾¢ž˜)/>ý°û»+œy¹pºZ"w¿ -N‡†™•I‘s’‘¤È¯¨K§<’kªý7ðÕ4Eæœo6%þ:®“"·¿i‰I7ùŠ5ât±pß”éK™–øOãðt­Ll9¿i¹<7Üù+ÖDÒÕ¥o{ë,ó«ˆ3¥¼_6¦»Z”“Ü•~ŘÍúb$ùGšŠð Èþ]dhc~ù¹vØ‹Wj6×j6_‘í}¦|"„B‚¾5‘ Z¤ÚÁ%«”@Ó.íPÚÐ…Š¢Ró$ÔQD‹ªðÊIèÏèøÅX: `QíRïÀ Â;h$àãª>õZ·X+rw•ýÇœ3C ̱±wTh8"pA–Ù29Mëw‹Á;Æ¿nÃ$Œ~¿‹G2öÿ”ò/2|÷ð"» «D ë)“ë37žª±ã¢*G>™"ïSš0iæAl3/>ˆÜé?ŒóxyŠHQ<ºÞ‡9eêFÿ0æ"²ÐQ¸à3—‹°>ºÎ['Öìò§ów©É»Ø@;(íò *Þ‘ &‚ ñþ—p€xÌŸ!W{ŽîýØg™Íûñ¡Q;MÕcy3fîèK§¿©¹0p¬‰B†€ñÂ:H Çðv|M¹¤bá”.ïK‚$!U’A¼zÒyACUpL|M³°>•)c"—1Ê”åËEþLƒ Œ/ã91¸n…¦øxû ªŽß›z´ &òÎbr¡˜øÌ×8{“bˆlÒ}'~b¬æ"TÿäÍá`NKy(YX¶Hñ5Ê ©r&›0AÓºH‚@ÇJ5?¼`Î'"#J•#m%Ñ£2pƒnâU0þƾ<ëûh>5ïË¡õØ„œ ¼)yÒ%$x$h¸™ÜßG>¨µ‘Dâ¨Dá¼°ŠÆ- µ_ŽAʽZeP—oBëpqo‰MsÚyd±á½AH±ÁfÒÝžÚ†§EŽ¥½¬‡ªö@GW Ùì úÚ:Âàë!T묱¤ ñI ‚-Ðþ›Á z:W²Œ¤Owh·³7åö ÆÑü4šs&vˆÚzùÐU4®`(9ŸuÙsaj‰$HÚ#ÉP*ó (¸l¨F bUŸ¥ù>ç;|»¯ªƒG:ø¢®)É=Ž:lzÔzÙ±`ðüô\ŠÜHi À(°r0b0JÕ`’ÝdfÔû‘`LiŽM;ì§¿AÍac±ØÍ)ÍfØŽkÊE"´»J?'ÛŠÄ£¹¥3)ôÂ$/ÙQ(BÜL .\oð2…bƒo-W …c>•Ú€µmvÕí¾e ¾êÎi±xÄm%ÛMàäø{ˆ u—”Ác=t'>Ã3 ¬,Úª‡œLìÇ20ìà^&ì*C®!Ô'}`7™e„u{PÙžRï™ð¶dN¤Î5^¤8JõNª†˜Å$åð:æv40äç¨Á]þFä4¹…tL|¶¯ýå#í/5Jï;`fÚ`qŽk¥» !׳RI õ>˜Rñ–Àà¶ÝL¶,.ýÏÇ帨TÅ Èd·##wº2F]Í!¿aiU`±9Œ¥ Òj@¹TP¤¶§Ï¡r²DeÿTžlªv‡[ Òí„äZ—É*—·hCÙ¤X‡…fŒ½"iW?,=(º mãÓå9G–à‚ìI‰©ì [o&H¢™¹„%çVŽt—lSšEoLÅ¥G IHËiW«(¾\ Å¥ ÂK¾§ÃRÝS'‘pæÇ¸I³ »ùµXE» r~ÏrHìvâÒy]qùì\þÿìý[p$Yv ÏHÏW¤gVuuW³+àݤ(‰”Z‡#Yk.AI&É$Ù•4wæšñ#• mì~ÍÈ.Çæ§h  +æW[þΙüß›kóA²ÖÌ+Ùí›ÑÝW¬è&áèdu=2«Ò‘/8Ì^kŸãî ³ªøø­ ‰€?ö9¾â?ûœ³÷ZŒÐQ‘I…Å{,ƒ2ûœ° -,Ï;°ÐþK±&Õún‹Ëú§áò­Ó¸ ÿ¼¸00d¡Å\ÈT‰IéE=,…žÝ‰Ä·þ|HœøñÉ>$Ý«íCE¡9هņԉº˜Ç…k ¯èDòúí|³°´Ï߇ž|³Œ¡º6ú’X)²á=:…‰ƒÛï˜Ñv‚-&Ÿœ~áŠ{^L’“€Œ ÞÚ±—©"æ!ˆ@”ÀG\“˜fU¤ !¢ÓÏ oC¾°ÞÉ{Š \Ä›ëJîWQü©ÅÄëbrzHÖœ!«-‰àj•ÈÐi8&ÿº“’õ"$2ØÇnPþ¤½¦”Áí¢îɋΠŒh‡-• è_8*ËÓßÜñ¦*‡)¾ŒË”<ª–ø(—‘‚T„ZœªgB4ɳ‹{ŠÍ,ÕHÌ÷Û‘¹eÚ€"cófl~ØuÚftÚ6Y±#Õ˜„{U#-(òÿÎÏ•g‰ñ»mì@©x;ºm3ç¶ýºTy·qÛbç¶æ,X/ͼ©“Å”³ÆoKœß¶Ðo[¢‚f0—ª/ù ~Û®CD©Gv¿í׿í!#=šŽ'Tàˆº£Ì$ðÓQrïçÓ37´·­Oß¼KZŸ>q3ñéÅÙ/ ³Øu6|÷t×y¼’{™SÆ4¬‰uê³Æ©¿•.xhørÇ©gaè6Ö©Õ©ß°xðð°N}ƒGªSœ$"À ª5qz…Ô,àCý´0œÍÈ\J½¶Á=(x ® 'sßæ KFXðÍZ`Ó} äþoeÁ)4Æ@Êc OÑHÉ8*5B©Ò,ÆŠF-óÔ±CC)GX˜ !“VNøbL¸Ía¸ÉODC'|nv+ÉHÐX縅ðHå&u)‚iƒG”MSð'îÀˆ©ht®ÀdßÎ~ Ì»NÉ:U&7)š°0ø>‚‡Îêc’ãëR+Á¥%öƒ¢Ô# ƒ:örõh”z .Ä\»P ÎOTo®Q(  Ûé:Ðà*ÑÀ¡ÑW4’õ>¥  ñlɨh$`'ÜFÕ|H4Ú+À(†K®‹¬yØ'34hl+ áPÑ€Èå)< ‘ <úŠGŽÄ#!ó¡ÕÚ$òQðHGŸìžÅ£èg¤5䲕ò>è'àJÈS$ƒäšUÅB A è¡`b—±›¤r“\WtZ—ljÅåÀ®Ò!)r»®¸ +U<ÙÃm‚ÍÓöª × K»®8¹_CØñ¹ë8V*eS5ã (/x­[žZ¥39 ‹—/,"ßÇ:ƒ ‰¦äEA‘è>‰[Yd’dbu9_„\jf‚¶#–e¢þ áÒ"F\”FxÀ‘ŠN괧⪴EÜzcGŠ”ÙEi V¦¨½hlâ¢4eÊO D-NïL„žpOÈJf00qgHW¦ÇneÚØ•iÊb ½°Y„Ä5SˆH˜)B±¥3|õʬABž BŸ,™ùŸ‚ okþ®ŒÉv/ #Už>e! NéYv£‚1‰îtxóMlw$z’žÕ½bÇÓ‘%ÛŸ×[séZnPæNÆ® D‰m"c‡å't5V/Ó"î¦ âi63XchoÎc¤^Ø)ºìr3å†rR=ÙJ´1Å8Ü¢Àìð™r7ÃS,#Py°{‚ŒÝöê1EÛnò`׋‘ ‹ÝÒÒÂxn‡L‚&JVX^´W€Л“+óh³ ‹nzÜu–ÇLl²º™ 9IÈ]¯gÜŠûá¿(± yPlñø‚Ê^´KTæ‘Ŭ_°e-|ì„“û@j!y]Éü*$ÔA°’j}pÇo$1a†í[Lýklè²ûÆP–“‘ĸd·ÐóçeºÄFˆVÖº=zQE0Áj%oê®'¹LäÜムºg™q¤&«VWØÌ€V]áKW©Àçòoç@ÆÁÍÊ JœKÚ ¸þÿ-…òÌÚƒ@¿_ÆF:dÓ¿«gÿµrâ‚,“ÿÄKÙ$Øî^"o{w‰¼¾?å,—žYP4—dÑ©Knü´û©\qã+9`Ò\’t/I:—Ä'/Yû7ÈH´¼ˆþÎÉšü2â‚ÿ¸Îÿß0™ü?#hä4¡„€Ž`ú«xÚ¿-“÷וT¶q_2‡Wqò"öÝCRZükÞÉMòv¿z՘ߒҢ×õ꫾ŽS)î–Ÿô‚ü@XaaCi d€b*¿õ•®Í¥«$.il.Y›y_C ¼—¥føà‚P¦5:…Ñdi l´z£±:7³¾ †pVgõ&­Rü1zÃòOxÓÏfvçÏgvœ‚•’e4¬øàóô«¾‹²x '¬fΪ|Ójóïví™ê2Lü#c6νìÞ5ܻܽwYîÆfí2¾Š¤¢0åð æjuî-þÜ÷rÕckX_1u%Iv IIRè3áOµ ùþ§V.׬ôTc·šÀ·g ¸ý)1 2»Å%™<ƒ=É>×l”Ô@dVW*ÄáN ¤ ó•{S0}dTÛc!„€ƒÂJ°*~~žÚ™ZûC¤’‹ùÆýØk.]ÜI J™‡!e†ÚãŠàí@&hÆÐXÍ ž#W±Õ[À‡†DXíì2¡ôaŽ8Œ»zq§‡÷ÝþËG«ÍÏzJXÏèEG6H¤77wÏ[«A·6È"€,xuªTˆÍ‰¨zY ÿ8Œvä3 qÎP‰Ò§vÀhWÀ ÐãfÀüáýyLqÈt22——›RÕËêOâ'PèQ²bêcÔD¬®îða4Îå ¸E‡XÀJ[ ¸×k±²!×ÄâèJ¥B&„ÆV=+#À 4¾÷ð>b ˆßü|Ùµ±ÄÒ\!m’BTÜAànÅØã*A|÷Öw@“´…ë&5JѸf•†—GwÕ?Ð8_hàòÉsŠág#ZS`އÀn£nV&SƒŠ?ŽÙ.v¨†jáÚ!\Üþ Õûw1Eª(öê*Zuy t•.(E«‹Dç‡Ïâº`m¨wÙj`âE²Òp dQ’t±ö±F†T Ú©\d 1{*UC֠ר ! Kó3PbTòŽó«¨P¢´ÞäE¼uÓ‰Œ€Xy„F%H9Àm!ï€Ì1ƒhÞ)AÞ¿:æK ÑT)bêªP€¢Â%XB'ŠYšïaÈ ë{ùX@bð]ªÕ[$îÀè0±ÕôAÛì’ÞSÚdzƒ- „™Pù’ %ÐÂ$‡gRP…È£E ,Q д&݈.:dàÁ( FX0OQ¹»ªB‰s ±( +©k@±aLDzƒL†X7²æ¹!q.Ød[þcv\¶¦wk É?‡¨¥3ŒÊ6†dh†›Å5qkÅÈe³–É:•PZÏüx°I½MÄ›È]ÅV€KA&¦.p¥^Þßcì4@r#Õïd€ŒÃeˆ%>²*JbÕIp¡%pATLŽœ2©e¹Aq±1ÙÈŒ,.TÆl˜y»¸ JÐT0¾ U.“ê¢T×$.J|öË ÁE&ÿb$ þ‡2˜º6¦w*.ÐÝ\§ªfÂË‘¬E\¬2&3µÌžÜ°§5ÙÔŠbµ/aý‰ cò)¨BÜd1–bv#Mû3Œ»,âÉl2b†ÌfKÚH ½‘)FªÈ{Œùé©X6sFÎ_‘×§ª—^ZÚ”ù‡ê¿GÙG?s¡%èIRyuI]¨d¸¤ÏÌ{yŸbcì«™*@¬ T U"ÓÁìÉÍOÉa¡¢ f ò™ ‘3™0Áú¶"¹IEÆ3@&Ud@§±¢ÈôŒÊL)2rUƒÌf‹LÖÒÆJƒi‘AebÏ8d ~™,‘)„--0?Ë_ ØÉôä×`Ægƒ† UØæòºÊÜÒs×Ä1¶5ø]`¤p†mpㆂ“Ü«ŠîÊmŸñ ¹Ó–™G—1 2ƒy!¯§‰êȬNæŒùÏ A£òf‘‹KûzHf;^U„4ô‚;\ÈžÚIÑϦX³vqÀ`åãf€€$¡OYÍ­Äî A q“Jœ7Œ½g˜a-µP½M§”iccªe.f!*—,!~7áSp§ŠÈ°ÙFL“òf«ˆ}UÕKìmÎÎϸ„Pç›&¤>V8±&#Øô¨úÀ¤'¹•”Ñ¥Je~ßÂ#>cª·B„Ì6ÔBösj{Î3€zs¬@¡p…ç=.Öx§àYŠ|¬=Çý¬j¸•ôæeŸø ?Êâ#·Æ\æRÓXBtƒž²ïêÝ%fl‡.HpjŒÜ%c{õQ¬Ò—=¸wÁ®«”a ƱÞ00dW'Lâ±ÛÔ¥²;î+¹õÝdÐdØJY$ËN6¯ñ¤l©1J÷ÍO#Ì>bòeÛ5Y< ¶ÉW"²B<8Ϫ†[{½ ¥X®Û¤0ŠÌîÆXY†òíF ÎRQÁÊAÞ²Á3)·®Cy«Ëq¤],wixâµÁC"Ÿ š¹×Â4n` 4ˆþ׊^÷™€ ·äIóK§¿ Žè]U¡9ÕDªÆ{ꃗAåÁ)…̾§Ï€ÕÊK±z6XAc} `mœ ‰bÖ½RÁ¢øÊN’à®þ.™è±{m£5†| <^YÑï1ä½S´J‡h€Ò¨÷4åpð]¦ß’–¡qÜt‚VŸ5½KEÒ˜Ã<˜÷Í{Øœ´ì^Æy µ<4dQjã 6÷zeÙ'gÿ Ô3c”ËäÑ@k¹¿Mê급|ÇÚ%°ÂäÈKòt4>²ê˜X‡ÏB¼¥>ÖÝÚÚ¸îùMDAÔ[è~r™¢äbG Ka öªÜ“W± ¡ºî"éÔZÒ:U”·‹·}ï½³ûÞ†XBås¿¦„&|l ì{cŒ¨úšBÞåVWs+U±ã'ík*6¤ZBŽ–²oy®'N¡·Sfazr–©‘‰a*‰@˜bÐt—c‹Ròé(åÁcAi£@-¤¤)AøÁÛ£¬ÅèC©#¤)Nadú^Œ)¦ùù1Š:yH÷ïËÛî4D ɰœBZ:ë`ÃИ ¸«t©àz,Y›>,Én4Ü{Íòëâ`30ÅÆÇ>4¼3UÏôvrˆf²h‹Ï÷IsÂÀRŠO~¼…·“Po³ë@&ò½8ˆ¾|Óªu:©Í-ÐÙ  ©O¤•¤è$¡uÝTd¶5àåv‹Œé"3m!s`SdLƒLëJªÖ¥"ssrü(Ó ‘1™è3"ø$UpÈDg"“4ÈÜTdv™EdniÔ¶EfÁÄÜàqÁh0û©_ɹ¤.1Yu3ЮÜd€Ì˜Ð°W=±?{• 8¡D ƒQÀ4±Çè–w}&$kÐŒAj2¼liÿ˜ %Œˆ™™ éSßWÉܦO¡dL?dnSésì§¼ÕN=Ø£9“„inPƒmƲ8åÍ- ÚÙ“Ë _qC>ª(“Rùlj¨ƒTmèT꛹˜XÉ3˜Ü;ë&ÑÃcY`â±#< YE@ÁAM ]ò"&ƒ€‰ÁÒ‘Œ|¢Ô‚¼™Xr ŒÀÚFJ–š˜­"Á ‚Ü&éO­ìO xJSv‡„"žNó|J£¨ŠLVQEžT%ˆ;`°¾Æc–¥ÑåuNÓ/ c‰‹L «Ñf:âòƺcƒPØdTúÙ(eÌËA ‹±¡4ø$÷¬í¬Q[³‰“f#Æ'`HŸb†Ûèž )Z¡C$e¡xˆnB#4µ7Ëëóÿg‡t„Ôd kÂ)„¸$­§üRÐEe烥t½ŸòÔ@S¯‹¿÷TÙ V›r—^ù<µà”#HU’áyôÐñÊžÌà:¢3\Ð I”å¸LÉ·|háwîEF|ä.8v êjfTÓ¤^f檨ð~X„ÀÅXmÂFEFä*A-²wTcÓKÕéjJd |3ö›,Ôƒ¢Õá¡r6Ì¥¶.P1Ä-SöPð‰à­kü|ÂPÐ2jÅÎ<"M Lì˜?N;û"1‡ðÓq†+3E̤@Ú˜íêvÖ3O*¼5Â]+Ì\ŠNÖ"0Mؔ΄U²ˆÁ£1VšcÛßê¡Iˆeª2Ä®h=Hlˆ•lßÚ—ࡨæÕÏÄ!` _ŠF†‰§iÄÕi.LÓyðê'¸,'®øH˜¥4åÄ$‘Tö¹OË1–™¹ šTCµf‡d~$’çZyfpÑ'¡Õv¥bŽTGSüM i6"Þ¬ TÖL(§‰¢;OŒC*¨+P©ÎÓ>Fp¦Ö¼Ÿ0½ßÀ”!œ Ù€R(©'‡’HCÅlb$ºÊU¾à]ñIÀb1ò©G‰=}Á½G=Ë©ó{`ü3wumK#ó;î!Ýi˜×MMè1+F{ g‘«ˆý¬žù“†<Ø8Ã'P"<… ƒ.ªåFÓ ÐÏ çoîÏïË`ÿ§¸»U#~õÄúŒÉ¹Ix8Üÿ¤:#9˜/ÜRÛÑ3ÕâŒC†AíÚúÄ«H¯–ò§þ.Ÿ!CÊüQ«â.ç™S«!€JfO5mjo×é]BZÂ̽šz=ÈÝÞ¥g‰M¹³Oe‰Ê¿;ë©1¨}BmSE.ª„gµj`t†Õ±H !9´ƒ¨¡eÈÈÜXµîr ¢ÅÂS}N*IE±¿C!ˆ"O ê¡øS» ¼IÌ®aýV¿l̃gøÛâÒ¼…­í¿/š«2›¸¤‚koâì²1ÿ˜ú›¿ô²Ë¾ÈÓ#^72#¹ní-lóÛë–/©Ž ®“Ó¯¼níäuã¸>«\wœÖëäUqÖuoÛëä´½n¾#×ÝÄu‰\7»ªRJ7¾ÈSzM8Ÿ½ì9¥×øuvª¼/hYrJ®AN<1ßÀ¯ÑÿˆT z4+TQyS^ܗȽÅ™À1Z\GTÆÐiëøéeôšè ”vþ>ÖY(«Âz6Ìç:1¬rÑËh¸ï²¸¤J;·’Bdôè÷´”A,úà …ÎÙÛ@ã› QÜð¹róð…"½n‘ý…"ßî™6EºE¾-‡—¯‚âãD™YSæ[//se’íSQ”{óËDRŽš2£žó¼¢¾vù!'`ÍÖ_T9¤—@û)e柳Ìü³”¹$eÎXæ%päÞ™–YÊ òÐ(I&æ†+r†Ã(2Qå*Ü&“ˆ`%ÎPâRSâ”ÿôl Ù¥½.&¾„ü+4þÆ)ækØëÆx;ýÇ´”ÓRþ%ºBdÞ8…Šé¢bê¢E¦²¦èèül½w@ÞÏù ¦ã‰½Lõ@±ê1ŠÁÒÞ$åG‘b~†ˆ*ÃzåzWž3Çâkò ÐM6ýü‚)ÅU,Ι<‡“¹fúÙyZ>\gžÌÐzÉ;Ã.掊á Õ˜#™˜|h©£Ìºh8ÏÖ ö¥m”2[@G#×…² Â©uhäBNcBÿU–û߃¸zVæëå²YG®"\k¹öÃ2ˆËÜ/SHß=/å3,Ìòº­b®"¦P&ýps¿Ì‹5SŠ?[ˆK Ê¢#µAïþV‹çZ&Cy®ý:½(jT ½÷JÏžÛ¥ß+†…–ñáÚp$ • *±žJ’ˆ/È×CH›äf€?^ äör³ÌÈu.·ƒ²Üì(ëÛOËí)hëæeò ô}I£È)ØŒE$,ý€ÊRæ‡ð«RRM¿ðËC÷Ç·úõ 8Ø Fï[²j&èðêáuî×Y]‘3Qå5³Ã¼¼Dö èCä’Ûˆ8/tcw!# ŠW}äò P¨WŻÍ‘qº–™>Õ?)úƒðs• JQ:F"ËÁ]Tû8zÈ{sx³¡%Ôj9gû%xTˆW?äÌÞ}!s ࡬-i·ÔØ ÿ@xùSH±¦"ÆpÎ_`ÒÏr‹HJD¤pKž¦Þ×ÍT-Ð"’t‘Gb9âKŒFß`fp`1™0C±æVòæÉ÷*}àj€›î֪ἰ<ÆLMX\äÅe)PÑdâ2›ÏVwÁ$y¸…H#RP‚ìñÛ‚‘Š)o2*ÉÆPíú–±›9j¼þ€ùþ|:ß¹au˜Áùdì«î Àë+V·ç·ÅÔ-D>íë*˜íb+ñ Y¢ä†¹øs+¶c9&»äQ<£¢-ÂÞT#,ªdè˜ÒfÎC­%¥´AoÇ ež}¥½Ôp¨0Iî"¸ç—¬†é<ÍG„QôKÁ,º›D›;ÐuÆÖêªÑ9ÄN(Gç`‚OÉ Hpñÿ‡«vpâo„ÓÕ­YýhŸxà^ñNg I¸#P1™jIÒvËh¶ê›Ÿq š®z;®“,»pÈæ[3šC8í±ŠæQ2÷g”z ±X™úªb$ó[ó(Ä»þN´=e‘b÷—¬Hu†@P‚ CÒäÜÅ*Q#¾3JÆ1'›øm#¼ +S ·WY¦¹òâÿ7½#S]XSÍë½<Рv—ŠKJ±øýQ²fusHd…q% .9Zýœ(CðéÏ (UØÊ}(!xJû Y(T^aµ‚ ‚ÆßÄ¥ÜÏo­€ Ò@XçRÙŸFç‡kc•©‚.)w¹†¨0qDV˜ŽGª\¬[‚¼w|n@0kò ·Rl(d-ºÄ' Ä É,5¯–r¿‚<œ‚´-rbo`Ç_AÀ^@`À¶²«p 1ÞWT*\@Âè[Âq3 Â2‚‹zvTÄkÔÖ{r~y/ƒ¥È ÂȼÍ&F1:ÉŽ«¤–^ãÅ?àNÚÐÈ8¦Êâ{¹‡À$dí#E´ÔÃ8G¸rÎ((ÓwE¥Ï›Q5$ Ò†#ýaŽp*.%Jú‰«$Oz€ ¦¸j!‘QIf°õcÃè'Au%êu2`X³ÜÛˆO•÷ /À°™‚gáÚÑ 2.›…¼AáТ ×>ï‚àaCq_ù÷O¡ vˆBîPiÌÚËPxȰ²¯""Í[\QðÍCź?äÃW Äý#õ¹Å [Àà1ØV .8 VtÉøcÛÖa.ŽhnƬ­l¡™":ÏZ 6†jXVW\»”floÈ ù‘=¾_ËcìçX&o·³¨Ë‘ 9 ¬Z”áC +õ<ÞŸÔ.¯?J¹ &>ÃÊKª=‚’…9g{R¹PÇ‘.c»ð'XIÏd¡JÈ e{¨ÒóBUzV4¹}/‡''pèÑðtÎC$ýzÔÅ¢SË ûjàõ‹` *¥Êj顼`,ÜÍAS»XÅ éð½úC„©ŸF#´hˆÖ´{äÖ÷ÃW¥™á-륃­4D ¨v8_´sPÓæLªºâœÑÚM¸ ÑC8@Š@š…Žá„qPÐ^ã‹[²S0xãýØz`rà©iph_?U:†§TD: ƒQ@§@¼ñG>âTç¥8Pƒ’QÞÄaŸ\‹‡=‹CAî¥T¡ –2¤¼‹CÑÅ!w8Ø¡õfÝ:´’ßg׬2À3Œ¬oʘk"ʉV€Ô<Çb¯? ¦7xíÇàÆÔaUávüpŠè¦"Ð É Š{cL²M”Ü€´†]£EaH"g17»Ý!õ# ¬A¤¢Äf`Jüþ #òŒ¨ ˆ gض’ñT ¸=$Ö‘(‹ƒéŽ0õ·9–nÏÌîËQ!– iUÎÑ¥ÞX¨àí™úSCÕ¢ ¡ + « Ñ­i°MÓB©«/(àÞx5É ŸçR+Z Xv0sAÁ;Â4ô òJÂéŽgQÀ!R<îPLæ§SJI1?Z52‡Â®ÕY¢°ã) Ç+v¯ø‘Lé¥SH7Z òèn:Ù¬˜j±å,»ã¸ŠâÉ6R° ð‚}ñ\õQ-Ù/ÿ8Jjé1Ò5²ñ­<Ú+ ûA˜È4kWK›$°#*(Œ–æ‹é ‰_µ*ƉM¢PleÔ¿ÖK¢Œª4èV!Ç@gÅH•·r$pà8 ÈU¸éVÚFû_áW‹P`>, Á;ä[Xôk’ô^˜±æUô´Þf¨%;pˆ³€ãkÍÕ&"Ø+ù–ŒA' ¥ÂPy\6múÜa\ÏŸÖ XGÀër$¸hÁâÍE¤‹–ÏÏéø,@¿b«šä8&Ê~˜L=Œ#<Š £1 6ÇÊÜuÀP*.¾A'÷k9y°­Õw,FË6jEã¥óAñ*ù(ƒQ JU¦„) õ½Aïwœ`LB•±w Ñ"[ãFce†^~lÖ<†â Þö3Pþ¢¯†|—?A0Ízª:ìÏÀ0¨—%¯)ó¹ ¯‘q–É@[j¸L‘«|i(aÅyëòàÛùz™Ê@«Õ°Rï#¤4–OâÅ¡Veá6u°E´ô"F¤*"l™€)±ç}ê)BTüùžW¾H@ÞÅ!D‚¯?î—wà1¨ê:©Î¨\#a"Åå÷ÊçéºÊ™["¡Ù‚|M°€ ¼–ÍÒ+¤60žã»BRª\ß86Daù¨”oPËÇ‚y!¥ŒÐ¤Êf—Qù“x½´®Øzù‡'Þ3^ý~’è[fR@[&¥{ý3dOˆ¯õ½½Äîkcû•*ÎM³5^}ì×÷7¥Ïä/nÎ|oè³|(®wT­…›r»\OîÕ÷ÒqŠS?•ºÙ²¤3=F~ø_ufN¼eb™ÌS;*FФ† °°Š6Tб+„‚‘Ø_#ÌÐìI-ç+T¢qÓ•jüKÁþ,õ$°{W‡pøkЕ$Ê€èÃ:6µáºVäWlè® ™€/nåaD€ è+Û@%W[=Fy¿bV,o½ó4] ªÕà&¡Ÿ_!Á¦Mªñ$~u¯zcIZ|Ö%IJTÒ„Ù@é[j–~Ùxxš_Ä>î7ð$Tð€+8”áP†C¸jmñ®zûô¡¯ž84:ýg[RØÆIh~ÒìT,®ÉŸoq½Á$_¡§¸n3 ”ü;Òm˜¥¼á{s2^5#†í¿èô[ä¾Ü™[yKÓ·³×IÏ#òvMnÈyÃC“o|Y~G0+*ß*È9äº4¿¥e0ï/ÿô2 ’Êœ(¡(åí7ñAŠ QLO¾ì¶œìŒr ɲLùh”3@9ËoñmÛ–ÓoÊé7å䮜aSβ”Óï•%2N¯bO}¹¹ëeÏS†‰W“Væôãø®Dô›È£œ& Ê*½ìe¸áo–ò÷P‚™Øä¶7NÙ=WÕ¤4"D¯e¿JXø•wÌD$Й„Ü0bf3‰3“\Ui|03ýUê`­ ö¬Î7<êB7«Æ·1ùC00úùyp(‰í|òcwˆŒ)ó¤Ðj©’"#R”øPWG½—Réž&"ZU:“çXADêg®²0…¥aúè±¼­bÁËôèé9di€¥DÊÎÕBé\sûZ ѨG“Ú4r;Ù§9ñ$–ë ;QzG@äg+“,Heøšä¿êÇT`ç2Ö÷±n»r\yºÊ¾MCyÏ×›u&oS_\Eù:nͳ ^á Þ±QeÄ,.~ࢃt-ü¶¼œù’ÎY5Ää y»p·0ë5hÍŽ×÷Gäv˜ù_a/o dˆmŽ ØÂG•ÅÈq…af\É‹4nP§µ <{A$ž˜>Ñ{>r ³•`^-TbKœfŒÊÙQEªC'¼Ã2ßÖf„¿ÀèÎÍúBtD(….n<*7y—oŽdê?|§ÜלÆÖá±#ÄrŠúç -¯øÜD9ˆñݪJîdF Á2´$`èh¨^€W>ÃJĨ<„‘[ì ♳²·D®†3pDqÓè€äðù°ÈØŸÚG+4Ue`×>èÖ«Èà9€xˆÀ"„l/"Ôkx´ Ý!¸ž@Æúj#0v³‚=‚4b>Øa"OÒgñljCIü+A‰ÕÑgÕ²Qpê+N›p5!.‚€¾—C9bMÁ­58åËØâ4ÀÕËêê2ÔœÔ#@ªRŒaÓg,Õ1µPÅ uëêbE×ëgYD¸Í.Ö#™ iDØÇB7ýè¸þãÚºþ\çß8¨ßˆÔ°Ä%Ç©“±´#J'rçJRkñPA‡ãM=&uV $j¼ú(Ó-$Ì¡&ÕjÌÎ~ ÔnÜS6J«xóMˆ¡ÈyÑílEuHˆj(Ù-Ç Ý¨2&¼&‹Õ£Y"ö³q*ˆÕ[Ü\—_aV­¬Þ+âZ+Xé„$‘¤‘v\Éåâ#Õ èèñ•4¤dê:Þ„2+6ÈÉÿ!¯¤ XÝ&)ÉBÀ$f“[(j¬2¥µ|ùq Ð' Ñ=¶øxL‡{&åÆ| ŽÞñ^}WÎVœ+oåÌ–8 †HεÖLßI2ZnØÜçC½º”b,Àˆc×­´X”(Y¥è:Ã.ø ¹[r4aJ¼Š}“%¤À›G¯Á*ƒ?‹¾‰ óih1™Ó— žc7´k15#’],æDÉp%³+Ñ-„Eäb!äš\/÷žSÃJ?€¿å^Øxo—VoMCHfEñ|Sîæ*È.b—‘Ý 7äȰcn¬6YžízÓpkæ»'zo @át)˜…‹õ‘ªXD¤´«k*ò >DDJðÌ6o‹‘{(‰««PJ†ÍKšÈpå‡R–PõFzúMÁØ‘ûXÆ]Åz–µ¼‚˜XŸ]–~Iš¤&ºÇò |;[í3½·¡j>+ŒDëTA%“˜lXú ²˜À‘XƒTÀN… [ó°Ë‚{¥LÂò aA,­Ìü,,â„dÖyyN\J}.©”ø2 0Z)Lß³±„ܬŒ½šÀnÞJ£C* )ëhf˜ȾmÛcUˆWé;GH šÔd¢ rœÛØ’,¨+Rã‡2•ÏTÏ ‰ó]3ä-RdÄø‘vŸH©š)%ˆ r±#ÈðlÐl˜µs‹ w|ú›®PP‚TDÆ Åдç)º×Jl´Z9«5–Gy6ÁYØøµSÚ¹kÑ9²›ÄŸ[‡$ÒI°ö €äú€À¼&Ø(@a?'@‘.õÇZ€²f—]„ hýr„&-B!ò,BZ¯“-!Ü à• öGg(yËÕ ¯aÎ9ƒN´Å¶ˆæI k{ª–? éBó]AHiùgæÏw´ ÍÀD"!³LÍŒü;žæ°ÍA„4§çRÂŽEˆÕºinxTr/ÊM|Â"J–À{-#5CtzºÄPz¤å>vÏó€HkùÇV,,Ÿ ¢Ç DÈj ç÷·O4ã{‚O)×Þ{³…Ǭî~^xä~Â;¶‡9x¤(æ¶èÈ‘³Ñy.èlÎäžL¾´¨ÅFku›ŒÚàŒè™'§Þ=Wì¨m|,”€¬£§ZŹö.ƒ¤MBs$a ŽB:×-Ðt»¾UÇö僻°zõˇÖt쎙°QǼKØ9ñò‘ E×ú˜]KŽ`ìÖ­Þ¹ƒ®_mUÍcAËÆ¾x¸>Tùây.‡½c‰ÆƒXEvI„UTã..Ï*ÓÁE܉J¾”[Š ß+ª:ÂÈÁ³p©Ô©y ;&¸ûw,RÁ ˤ¤q‘ò&/&ožëÙÄt€A]Ƨ}š¸BÄå¶£ø|äFqŒ«#ÙEd6JÄ?›RÁ\N1‡ªëë4‰RKò)h~8Oš´¤%cÓ’êAçG fv)VÇLùóóüÎnÊ{,ÍwAZMß ¤€º,§Â›šù]˜¼ÑC&"o•xúP`‚ kËåd1 K‘’O(œP‰—3«x¬ôçK6×j—umàšßÞÚ]uZ®ÞŸ{|RT+Y¨aq+¾×4‘º†×Háë’éqãA»¤;®„ÚÕ¤Éq[1*xS'^㇤ÃÐuRò0¢—ÕL‘ã¢*×|ŸŠÃ"^éÓ¸[=¿Yñ-Æš½÷qªœ’'UwJv# †ª#KºÁ,ÉN ²$ëx£í}A}Œ¨e_S7-RLêo›ú8Eõ ¦-ÈÞ´!Nd1Ø™ª±¹y$Öƒú1 et’Ûaæ=ùe3™B‰ Dû:™ˆ&µLâþÕ3¡ç‚Ðf]öÙäæñ¤Txjåµ âËš+ów6'S¾—ŒŠf‰ÂCðÆ!6£°QÙ/¿›2£öÙá)H˜]‡¢Ãù#lOìe}ìFµ†)»¥¼™F2r¯ïËxþ‡¹É™0¬ë¦„Lh ÛHA†)ÄÀJå÷°…Fn†‘÷`DËC}HÕƒí£=‹Ì©ÄzHŠ=ÌLWV®È^ù<.¿—yáFôa9Œå¢åþOŠÅ­°¼¦ùÑÊv”žò¤ä÷ïÆL‘¥ší]kš5â#F‰`'z=¶YÙ#dwŸc°pÝÏ™ ޤçoAúAàb—nåºaýg˜ ²sÊÓc°6 ;’{­…Ãaj™&çM±ž˜õ)øâe—øCJìï3æTî¼À*ÓÀj"å»ê7ëM_㟩ˆ|ú?bûL¬B4÷… ¤êøïš+$ˆe–½pM¤×L›kâ(>ig׋vdÐ>yMTWÝk°.ñ’!.à’aYüwØ•þ„ÈßÂ.^2(ó…Kúî’¶ ¿ÎºUÖ"ÌÄÊÂqöÑBtIÈ ‘!îÿ9ùóu+3ëYýéÄ|­{©œ¼ú¦»ü¼ôÔËйÚ;óž•ÐÅ9,¹{Väžð2un4TßÞ“¾g¥{OÄ{VNßÃHÐÅm,¿ ´äže¹gx™ñöø0ÜFîùyÜ-íyå.X³©.˜" æêcò‚OaŸîus„hT²Ë˜U0ÌPìœrÃѧz³søzúÊ“ÃX$¹ü€ÄؤŸö¨\°DEÕj×Drù*˜¤($?+y‰À—Sûš$îì]‡ñW‚ûUT@œÄ«SÿqŽ{ìé×)Ö>Òõ'“úœ9@pÈÛ×õ§ ÷2ÜêGÀAPÇá·S„¤áóv7£ÑaPxPïòÂEtym¨|Yý•c÷Í1›¾ƒ;ë(0¨äP{[1µ2“º¦—û ^B}0²ÿØcFK,ÃÕ É¢P!FRì³B$pÒì›0–›˜w££˜£LS#l8Wë%–ŠÆQîsZþ~ºÉœ‹~º^¬k @Òs»†1™ö?{eMÖ5äeœ0,ôy<,÷KT‹ž‡ öʽÒË%jC0ÐÈ»}Þ©—O:Ý£t¸X«íN­ŠþYµJð§qÛëZ­˜Di¶Z 0£;Q-ÔûòÊÒÆÌáb½>X iˆSÆ~lý;­ØŒÅÚ¿¿ŠØýcªåëÛ+v +»K‹ÍbˆCÔ‰áÍ“-®aȺÆÒ &!Ø6~¥Ò± ɃJE2¤È¶6ÈéÞ*4w<ÿ7'ijsN™ SÔ,ƒ¨MFFæhS•2hQèÔ-6+šÛmk7è‘­MqM.‡¸iŒò ðY¦”è*³„íÏhkF^M¦ŒI€-Âgº•¹Š}PlJΙc ž86O¥Ý‡Ì2Hìï6b=³Ï»¹Mª´ªR®F.y;XhŒ˜_°‚ÐÝ2E‘mm0qÚR¾QðÃSêüºÚÜ47O×f`×5ô¹É°{ðÞÐÚX¾V­MüV[›™Aá··pˆ\v¼äæbmV° Êdó %€äæ©®¯14¸ØìÉk#m³é‰ª{ˆÜ‘ Upµyb5zß¶í¦g>¶_TŽ=Ø¥RNiêˆ*¾~§Õ0ïb•õÀ"Ü  ¤)™ vv€½>Ö¦Fm*0ŠÓá„Ðï^¦,¿Ç¼ùƬ²íludZ¾?{KnCjó´ù5:¶Õy±¬É)HdéÃÝ$îX‰ïöŒÑÔðÿ¸%f^0W=±Û v‘î­žžtݽF×]-ÐbŠ™a¸â´ŒJ-[é÷J^âÁÏôTKÞVë ­V¯©Õðt­Öm­ú¶Vk…7Ó™µž¨UvºVïHE ƀɋ9î-ÖJ–·P«úß—­e~…³a÷å!‡ ‡–¸Dçh˜.è„A¾²â;mì£^ü2»´_![Ã-pðcVxìԊ̾zùZ¯çM½HWSM@öòª¥Y«gU‹Ôþ•Œr'ªµ¤ÕJÄõ9 ÷ ;u¯  ÄîCY=| ÄT׬Âù=l‘pÂ.µº+³õ]ÖJ-ÌX+ƒöð…}È;`Ik5/wÌê.b³çR8jåÞ/\­¨…‘ûJ\¬ì]Ýj…³@«jµ Sнù]¬|ØjaŸÇб«…¶ZÁ©jUÐ…«w{âq£ì%»Z¹¯à`’Ô÷‚²†?k¾Ãj$ÏÝ{!æF@ݥǣß`°—¹J­Xðeý.ú¼ón0^ˆ,†¶W>JF_U¡¾7—üÔ½7“…EÌë›»÷æ&r}èÞ˜L+Ä÷æÛ¨É>ïF ªÃŒÆGmm À./Îì-tü :/NûJIº¡^T‰·øFÀ·ÔËáèáÐþ1 ýàºõH @r˜ÿ•wc1߸ €ö] ~ y¥2'Ær.Â`ëT]ô)uLÓ@~±.éÀÕeÀº¨ê’¢.Û¹çê2ضrÜû¼÷@p„müTæñ¶2Ãxˆœ&³`ˆ‘2ß‘O|M ³c65ý@ý,Üê×Ä9ü‡ÂNe~á×—Š/+ùšH猑F.°$ôhŒ"~Mò79_4î¦ =K×±µA.YÆ"ÊÕ–‚ÊUjh›q2Æ9Ââ›Æ”1q§¶+»Ì ' ybZ¹}²)5©V7Au¦6fuÒI¸)w‰‡ØAq¤T)3’ù$âl÷æG‰îsáϧ¬ßËŠ/l‡ÿÑ\— -Ùn©TC/±ìOfÉJÓÍôUä[1Àh¶Šá¹n?÷“èûÒçÃ9ÞX¤tÚÅ"j1SÚ¦jzfåBðVK˜±VîÈVÎ-f:*(0RU*—H}dEGú§ª@û©€U™(ü<Ê×l‘Ö°’/`abþ3 #Dšއ‹Ç£ÅãÞ—l¾ÅÒK®_~Éñk§íxéßX¨ËkWsþº¸1æsLˆ‘«I¦úu9”_ÀjÈÚ5ÜHF(Ÿ§ØJC„¶Î‡Û˜üŠ1k—¨é!ft¾‰¹jŤ®÷@ÄFÁ2 ™äߊ ±{+(°.Þ¥‘/Zùãó\¶¯ÒED_´wáÈ ¾!5ݰåE åy(/\(/ÀÙ™åÍÓ똷±ÓMF‰o¿¬Ä%«sJdÂДªÀ¸U^Nõê E&7š"©Ç,rÚÐËàý¢½'Á:“"o^¢ÿò9Š4«?­ÄÏ]⊟ºXµDÁÕl\<+hY} ë1$˜[Tµ@‡j~&ª¼å½Õ-eí²ü°Œ¾¿úé5X7§­¬åZõظùUË™á[hÌ'­`u™×ˆUÈ-ÛÖýEwµ³º6hÚ8å ­ˆ{MìçqÙ“LR!O‰ÛU-*ŸÓÔ¨RÜD9#Þƒ9KqcÊ¿Så8àt¹f‚✦1Õkãs*÷^BÖ«oÊW„“XR¾©Éx€ô¦ðV¦ŠÏ5“øA ñùóô+TO–Ù/ê¤çþo4“J¦pÅÆ9¬[KáÕÄ~SED©dùêxI Oƒ:㢉˜yd2¾Ý“Ž€1uV)tT瑽úϘ¥T,G‚‰Ãh`°0)†ÌŸ`¦ÄF”ÖdüV …”ÌsÞƒCÐê'%«šòÖãà . Ýü—ï`9¶ÈÇr<ˆ¢Â 9?¸A·“Ñ4ü6h„2©FÏ|ˆœ-9fÓ¦¨v±Vïá^,rÎ]ãݤg"˜Ì“¥h—Áoà’ü Ú5«sòÊøÔU+>ŠI)Cþ1(“¦LÌ|HïÀ“øDæ^ˆqClX0Ÿúsñ°g Æõ{»bñ}ÐMNÐ2ôüÄrJŽÀ»{ˆ ã ÏVxkþ#'ŸŒ\Wh,«èñ4T©ä]Ó1ç‚ï‚ 3‚…c2]ÉõG»¨“Ìã̇ð ÂyÌç² Æ«óâîZÕ…O@³ÚBƒÝju?l{>u:ÒÓŽ8ñ:8$è@Ãx>Ãå<4(+K…á«áŠÄP™èx™VËуÎBÆn{wkàXN©gíàù>¼8P‡*÷WÇ)ñA­æÓž9R|äéŸÄ«» @ïâöš"Ñ-@¤A 'A“$ä«|òž¸8vcû ëH%¤=‚òzÍœŸ^­¢y‚¾îjc‹ù-«õ>Ê $´‘+·R”DñäO2RË"ÿI%‰Ô{–ŽAÒ^UYÜ‚2ÊVS¦ÄŽgbñtHßÇ.üžå18„¬Ìšaÿ©‡×·º»-*qTNÙ¹G@Tºyé0¿û¸‚~bêo„h’tzæ® cRÓÊ"ˆ(ÿX<¢­"¨÷2f!å=oWTOö¹”\ïxãý` ’ÆO€ $,`KuÈí MNòŠ\ —•b\‚ =¥åà”S­Yëä`Ák÷¹ÂÂÉôßC¤Z…õ]dHyåˆo–Û¼¨[ŠÈÝút»òh¯¶€7 ù­˜uçfÃl´)¾«ÌY?è§äTêʃ•ÚÉ?Ä<òO2 +_3V ™ªÉzMþ5ºÀÉçÓf-aˆ«h²²N•ÞABIa*ó2NdN_ƒ‚1äULVfCùc%xZó5ˆ+4/ãÉ Æ=ÝLQµü«Àv!fœ®Ÿ³²ÍëU} ™Ž¯ŸÀ#¥â±†{Àè©x$ŒÖëÊ«™üT ÅJMc‡á#}¼å’U#Yx ëFƒ€€ð¡O‘>оÁ}p€ 206€x$$„RÉ\VÝc P@P=†<@Cyz)ê&Þð )D“­\óº)„ º“Ûö‘j‡JnÊÀ/0ÈI‡ICvùŽè°ñTøi“1 B/Ø|äë‚ýmè$S”³Àã£5.E!˜4xn¨P9S\h¶Æk &£.¼UÇJi¥BUþ4³ ?}©VÚc6ð`!Ïluާ •bþ¬t]BT¥ÛyžE@È ¡ˆ\h2_0¾Ú@2þl¤ÆB‚u”ðh Ç„d *Å|‰øæO Ívr€åôü Øj<Rùö.LÃ%o>Œéa'Ðh8JËи„mü$\Šn%Ð*(v¡9ë + #KT¹âéMjÝ rÓŽ ±ÃHö†™€°nnxæÊ3Êý†BŒý“XaÖÃ\—5Pš“¨Ûëf' v Æü£© ÚìDSJâX¶MHÕÙô>„ÄCKøi¸E½c„á#?n ©±¡¥ì©ì0ÂþP»‚|‹p¬îH4+Õ-PSÊCWÔ>šÏ¬¤ðÁËá2ô0dî˜ð„v|ÈW[pù0ÃzxC•‰ YÝéwT ç”Ø»IH*òhf]Ln@àX5Ÿ'eu'šãÏÜÑmÊ7÷¼AÅD”%%(GÒmvP1§Pa`Í1â½ñXÊ¥Û”ã 6'\ýÜêârCymË*Ãþå!Å¿¥ž~¯®¶RËùÑš*ùzX#(âœÄ$¨ÝîÕO)í½N#¥M Æe{ •× hì›'*yBi9’¹CË-9n|}€’‚í dÜdAVÂ]™4YêlÒmz*×)U) {ÎÆ)PƵ¾X™¿Ý…RÐø\¨lÕÕITj„"*bu`aHcµn*,2j– ay²‹TÄJú‘Þ‹\¢:ëâ}&\VNà6°â2(Õ!ÉùÔ·¼R&Ô=nâio0pYªJŒr¹jêa°z„…A{eµ æ+ÅÅóÊOp£Í·«ÑpSL3]±@¦Êoá±à%0¤™êiÚ b®“Æ`ä•–ïd:'°Í(ˆ§`·Ä.&Ó ‰ŒR]‚é`ÍSµà¤"."ã•êšäëÅÚ2/åvyøÙ€yê€|ñ".­y*~<èÀÂF…åi‹'¥Ê ™D¥*¥W”f½ –:°¬kXØ‘Àö”³É”] ‘:ƒe”ç^}·bhÄÙS}èPûJzú©ï–8ª’Êt!‘Q:º›¿‘8ÇÃáϰAd|ž§É,"þÝÌMÊèÛ "eN–"ò¼‹ˆÓP$G€„Ž{ÝÅÄ[À¤²Ž ƒ$˜íôù0áÐüèß{³%lÊìXÒiÁ»0øqxOSüqßv`Žwt`Žœ«¢a0·”Èà&{9-è~tÃ*‡ µÃò¿GÁ‡áïÉÈøêùü?LÁ*ÀÒBÌý츌8 [P>P €üx-«¬ñ&¢ã›y{Ñ:tè­D‹ÞJâs8^—#É{„Ä X"2k¯†{IƒHô™¹“Náfë¼-"rÓ©ï8D" ò@aiç €hHÉÈ’^ô•q¾÷|ƒ3îÔs8Æô݆ÂôïÙmHã Èm¯AbÔ‚—ò¹E.qH·¦}7û»—yWÅ·ƒë ÓDŠ1 "9›[¡ÝÙÎ}Îþ Çj06 ~ÇÀ* ÂÅŠU=n@¦å"(âd (¥ôÔòw-( êæˆ }¸]¬ç]µ^ËÁÀ‘VÁ‘¦ ƒE *<’Mðb!l‘i`1=^ƒV0ØPåÀñfj£iSõ^€Ïˆa§æ€øìK±Tª²2Â)™¡ #\7Á}ƒÐñˆ‘feÜš%­¯ÔXžŠÕEðkLk¥G˜ÔW)·õ»f”ëØUç”>9BÊ ž´Gaý3‰¸ì þ§Oò®HoÛ§\>Îm*3ÿFnS:(tQ!n3Ìj7 Ç“å¢r ¿%%lÍ¡¡_ŽœÇ`È??g5•ÊK÷¢ühb§ž[b¬–R‹ˆŒV:&`ÃÊ™3£,•2ÅÐ~XL°ßÎL'Äyv"¶ß£Xy4ðÀbtk;S$ÁjR[±’9]õæú¡Ô¯èêôvâ¨í©õ ÙA6þ“ÃÖ öÖsÄ«¼ï±ÎQˆú#RíKqŒ;¤l°”Òh5I¹Ù3†*íP"c¸Á)<ÈT:Œ¡`~Ó: õ‰¡0ÜáçO¬4Dóx Q*O£ÝH±‘y<$v?œï˜ùl§+ÒÛŒÞÁ@lÂÃæ!ô€¹û13«?‚–°½àž Þú æwÌêŽUöýaAžäЃø0Ã-žsœJa6ƒeô~wn 5fœª0^ÍÐ1¬@p„² ý+æKºÐ‘ë!Ð(y.ìsaQFÇïÕªÄF=šñÛ›ß*È”Øí1[¡fçUw†™õ´£á{Å”âûÍ}æÖ$>åq(3LºØzsº`vŽÛTöE*3.0îìBŒø‚)ƒ)¯† Õ`{~‡²Á—U¸€X]¢„°s)f ÄœõPh—«Z —œG…=E뢔÷ ÆûGƬ /$ý·Øpþ§ØGþ§ÆÈÑåŸÇçWí'ztÑBpöÑX.áh‚£S9Ðûg'"±çÄÝ8äò{^7•L¾l 2·V¾‚)€¦Âðµþ ?½DjÓ¯àÖe@JRoù–/›j%€î¯Xõ‘†på:ÒϸÙ_§Ë_QÁ šÃ _•=/aé:÷âKÆ|㊩®xž¼òcÞ’>?|M9‘²>¬Ë z¤ñ["Þ’"j‰;'Ë(:eôQÆÛRÆ[,ã­¯¶)£è”Ñ·eŒÉ¶r]YYsee]€¥W[PY¢„ü QP‚\ W®Á¨p1Žá³—@>›ÏXFuFËX²eÌz qeÌ0Ïœ2žø ˘±Œ™”±äM¥ ¹K¸(ãXÞŒs±Ô-iHZÙa¿Ö˜•^‹ÆY4KÇÚ{¶Ìê¶Æç, $¬ýa€¦\”vl!æhåïØçW[ãÓþR[áçµõš©‹¢ ³|ΈLJœzÊ&Ê ½Z¦9žCØ™ÏôIæ.ª.­¼5‹÷ŽÆTÇóæ _†¡ð*Gf”²óa§Ѫ`Ë ô-cÕé„mGb飦™!´XµzS,É—õÔ½k¾Q~¾© ôò‚¾ƒÝ‹çelF¿Åꌯ1sHÄž_Üòç0Z=öÊ?w°Ü,÷°5Ê×ɱ]BṼ°mN¡Úe¦¹2iUÜ,oë|©÷^Ù3ùa™ âõÏÿ>ŸŸq½C(èªÒm"»ªU;\ß.‘ŸÐ3ã¶?LÁ×J ŠßöÌñziú aÏ@¯µþ½ß-Ì L‡ëÉ:àIlÚC3¬^ÊM—ÍÕ•þ.Øø½K,s©2ï;¥o~FBÙïÉ×QR b¾La „ïár™A¸w²”õeæJ{"C^ý Þ£kÁ\qà 4nsJÖ®¨ °aHYE€~ùôë îIM• ÷)âhåœãto¡3 ’AäºÝ£,hÁžB‚ènP%\µ_jzÛ1b=ëûX…#Wz“òî‚Âç13᤮ąbxf¡ô{RpĬpðs„%T÷QbA&b8aP“¥8.]’ÝᘫÝñN¨”§E„hÜ@T2/AœÆžyFŽSÕ°]a°‚&jh¤j‘†uÑÅl§ñ"F“:uJ¸#qËÅå¾í5 •âO‹§z¸Õ¢Ia geB—®¹å‹çbÅêp’¯Pq*mÁMûêP ÐU æX$,øþ‚‡P¹ÜD‘¢äo9Ö¬ú„PI¡ªù !UUoÇ«Šæ»€ :¸3ŠÚj˜ô s³Õ£µÔ „ …[Ô‚ë™&›*aÕüéÔiãÐçuʶw<¨ê«y9 AýpxwNU”À·üaèm®¿ˆ\Ío9jˆê.FœÁÕa2ÿ‰­`¿–H͉Ôü‘8@ʧT0¨/<­’¼XE²Ñ\C„œ(kì™É‘zÝ•!hÌdt’šÎ· T,ÙëŒâ³Kðïõj¡»½ \©hH¶äð ­ij<…h7˜:Á\ò £æí(ôúæcÜ5¿+·-Ñ §„.…eÀP²c<|ÌoƒéÃ8Søš³0Yò¥ÂÉ\‘Ù hMÙªn€² µZ%éëæ<Ü…?ú3ŽŒ;tCýÇÂþÖ§x>µŠQ)K1Áâ 4jWpÀ4Fä™ 1©.䔿]Ñ5оª˜-²$±ß#á™ÒÃþ”z±V ¦ÑÏ¥ëÁ›¢m¬/‰÷öŸkDÝÜb~%{u1¶"gÒ^¦">øYŸÜ"c<u1çjM˜Œ-"kD¤² jØ"‚ù4@¤Fµ+ðøŒ)½ËŢ̌ã„Ï1þ&ò EAÈ¥°ˆŒqaµí* ‚Yݘœ|aj·ÒÉÀ3‘£\ÓÊ‘z‰ÛED4ƃbº‘œÖ±ô$ˆà&îÊ;D ®kB®~X\ϱΧZZ “º7á›S"âe–°‹¼_ "ª€dä)xíVæ;@8{kŃ)½¥€¬™uJ×Ú˜R’Vkw›C?6§,.R`RåƒJùlÈìaÈK^PØ­—ð3†þ¨ª¼žTX·Y9£ù1ÈÞ"…F¶0oC85f‘tƒ¸òb!3HEncèíª–® àá·äVÍÖè-»!H(\»F.°MñŽb/þÃ1,ó-%­R¦*qôŸŽ˜0”Ì ‹É˜d ˜œë`‚­±åæ2!9i“cb· )žP¤úª²Û@R`™ª"&&YϼO6°·[PøAP…ûkDå`dÞ¤ RÌpPTމÊ:d’aùˆ°\ÀÕ†2½ ‹¼j:¨Ä×,*ÇqÁÞÑöd·Š «ïÎB4im캱ªÛJó Cb¯˜« ƒ‚…HÃ)à¨~ý.fÏÚ™:ºªÃ{Ä!™ÞÈNG¡ŽeL>ž!ž…í ìÐYctß—Þ E'œ3cžN’ød%Y¢X4’I½ù‘æ½ÎæÄPÙR¹þñ@`ÜzNò`¾+WËŸ3š)5üt‰ð <(–[xîž‚'lᡜî+à)˜íÊg^À‡1Ú*É»ˆOpŸ' ø¿íE|¢>Ì|nÚÖ3CÈ:\)8e'á™và!GÔ Dß•«;ðPu¸ Oäà)ÏbÏRÚ.×µ(¬»B¶^’çžÙµ¡†©p¤J´¶oAø /Î$\ßb@K·o± î-ö­IÍqÕjÄißwâ™ö-™(az‡‰Ãbß ê¼Ó·ˆÎ¡Æî`R€Š¸ÎÅLînç’[x¶OÂS뱃‡*»Ÿ OÀ×E¯ÎOÃsˆWH}gOÑ ê÷aéE ŽxÑ9’éXýÔ½x*8~MÉ$l,`cêâ$6/”0ßn¡¡ñó4uûN1æ@Go%·ªÖ½?¨î.ƒ0!¹¢Ì`“A«@ÌÝ©óhtU‚»ÔíÅn”ŽßXÙ—RŽßGLWÆ¢Íc;€SÄÖ ò>ßÉý”Q4Ø‘"7§oŠ~aɆ¬ #¦Ÿ¬gÊâŠvçÔ¤Pð£ü Gúœ›W “+ßÁF‡o*?]/)1 *W£À˜·qWSi¹ëgc Ù`»\£ë\ò=L|˜E`R.å¤0ELF`j99(˜‚i×RÄè$2Þ)dŽú‰ ®F€æØ.Úpåí)™k=bS˜fZ ¹\²Ð*;-l®Úi— °Â²”tÆñ$p½‰i~JeÞTØ×ä̶ŸØy½tMÔïô¥ˆÊ Êhb¸ó­*fQv^ Î;’ªfa^ Uû†9Õ‘>â.9/¾M`ö£«:1P9]Ä$毄¤h!a t’ì HÀ§²É¿…dÜ@"UÝ8ÉâëEµ$ºXayßðâ$>Û,/’EHÈg°É5”ßK·7V™ã‘Ì!²Š…épDÌ|7bWÐÍ"JoC>îB½Øå€½jÐbýˆðÚñZæêrï6{?R½_¯¡ØDÚÊhýŸÁóÃÚârVDPÊ \;SD¦¸)RF°#õ ÿK©>•‘itœž"Èæ¥‰;ãôGmƒ‹oA*XØSV¡§ š"è");vÑÅÌq H ¢ë ‰Uj%¢jï”»•¨ðj(òZHV*ü2û#ÿUH ß+w™UB9žÖɼé7RŠÙ1úí0ÌÊßAä!  ‘k¦R#2˶ÌÁi‡:Å'!ÙáÅ m$þ%ŸBËg)Ë®¹l×tvÇ^º~Slx\žŸCô7§ŠïJ)à›CQéda@r¼ÒÉ AS½:É¢@ßT='¡/ ¨ã÷ýÏ/Š•Â!“[,, p˜È›N¯Æ6 ec\e$ªúô âB¸d3!êc Od‚ÙbôGüùó9xõ䎃Ä?2‚ו!\ýô«ùž­Dì¯AHØ)æDë1¶¤ ‰ ùb©Ïóˆ…êi<„ÞàÇ‹H}Äëò•i0^F»Qeä#0Ä‚šVª[š5…ɯïH˯céÿEÓ£:"L¡—?ŇtÓHI†øUY”ÈæÑ¼§âIE…N‰ªL)à*%@ÆX 9¤SÕ·“ záŸ×‹@²Ÿ¬ §XõƒŒkÏôrL± ˆ=ÔØ 9òêýÌ΃R©ùEË ­`ƒ(R‚øÜŸUáa&¯V¾9 I àp3Rñ{šÄ_Cõ´ Ð1¥N—{ò~H°ÐV\-6õ8µ’¢T1õäšÌ_]7”æ+‡%žÀ^A?T9 ¡÷sÆû%c~r­ÿÒ˜)±þ‘1o ±Mÿuc–þ¦1rANYØ¡"§&—+ÖpE*W¬È'Ü%ˆHç%ùY—ôi¥{‰‡K–í%isIb/ɺ—HUb[ŽñzzÁ¯u‹ùÇ8ù¯åÄâ`"gÿ}ûTWmDËÄüMåLÌcþGÿ0¨Ëw~cúõØOþ&ù.ÌËòû \ò@4Â?Ò‹1ÎÉÅk¤-ù¢Œ_uê§×5à‡êÆ¿uÞ”¹ƒF"ÿ—J¹åê?1u¶ —+ª©,“¾ôïb€ø„Š¿ ] Ð\€S×3Tí¥j1óû’`ža©ç)F|‚E…’Ú}D"Ì{ZoæXÒ†„uœOäØ-ð3Øóؾ–?F@AÞ)Æ9ìë™|˜°>—I&H9j,õÌO'µY¯ÓI2߯¥©ë.a º¼ÀèÁäŠÂÐVk*{|K‘j*•ŸƒÚin%’t <ÒUô„œ#zÑâÑǰ¡o«Ö;ñª  Ò@RõvcÊ÷þ Ø0êE¤”‰Ù,i¤3ê“ÿ2Þ®È×Qž5 xU{uX‘>˜‡Ga ‚Ž|’U°Æ=ø±…ã¯ZÅ·aBj”X‘=ä™—iÍ3Œhž‘Y;„‹yÀÊcÚKpå­Š¯’dÅ—‡ ’‰b`õy£­õanMlÿì6 Þ™¯šÝ`úÏfÁt‡û9`ƒF´É4ÚÚQáàF…i¨r*ÿ%ŠoR&ØŸqÙ"Ú?f{†E–`'T…á Q `‚ *Äɪ¿èÆ£§o„Dµ„] “ÕòÄ(RJS ðúÓYßn’Šš¬Þ1VEŒ½û¦‡ñ™–xÿ7A;ðw, ªÉ»5õ‰×À_­ªÂ‚ÒɦXjš!‘mŠÄ³›‹¬Ù”S , «È¤“šxDÁ( S¸~m›¦º¿D”ÖÔ˜}·ýÕ °CYâ[v-á‹ô †Õ°(Ü0úŠosíN£;ĘC!PcãP æìX‰"Ê]aÇ‚r¹Vƒvni7˜“‹à’„Z~lÜqnvˆzÃxã‘}"“¥b="ÇJuîkDWk(õ+ƒ+(+(55ÆÚ(zÙ6¤C¼ð>!âÐ3YHŽˆq°L&ˆ‚èõðòŠ]Bê“‘bBޝ"2ßWDÆ™UÄc´=ºÊË Wç±²"3¾7/ÇBL@ŽG±ØR‡ÕÃ`.c9òÔM6Smâ»SŽß´PnÏ0YAüR¨#ˆ?ÖˆªÎÍïXD¶æ?|) Ll«üù÷?©Ñ¬DlÄÄcu÷¦Åƒ$÷gà"x|ÝÅåAË8¿w#0ÞÙr`ôÌÑ|‡ÌÄ9R"µ¿p€UÒ Lã?”a_®‡ª°3!Ã~e•2 _;Ìhú¢æ"pD…}|”«ôðžÝ ÆýúúxÚv¹yŽX ½ŽÌÁ¨Á.ˆûãb‰LD> ŽÙšYRJNÁÁßåö‹aÐÌUtÍx£©Çá}Ó¶\ž2„FþÛ+,žŠîšGàÕ[Öa6ÓÙéSs(oòj1¹Ü!mér L ³‡`àCåÅ+ä0‹€jàÂU‰aÄЙºh§eéjänE¢ÞÚ³Šäs†ìʇªÚ‹X‚Ñ¢Ê"‘µH|§AbM‘Ø& ‘È$¨f F] ‰Š#@Án¯íMÍ0îŸô½Áý³D«-ßM½ýˆø4kí âänQ¥7º®ƒ$¡~Ås¥ÇÈü}„QIÿÉx€Ú¾’aÀOƒŒÈÿelV”7CéæctŽ»™g;8,@P¡»œ™‘&]Qêà” ð‰qu‡·É[‡dØH&J_£ýäž›¤ìì< zÂ{…UV5áfB’©Zö¸‹ÂÄL6‹€(¤¡ESFE”ää°aÿËÄÓH;صÛÂW6”+#—–ubæP°ª½ª«K&è)³F­<ó«ì{>/Òš#²j$VMBQ@bÜ¢°AQ$°ÂTŠ˜0Z"Ýð >õåÞ…Q©äFÑ[I„Y:%z­ìí|uS¼_ìB•w'˜òPàÃܧè9Òn®U$»TÛõ²˘¥ïn …P/MCIa‚ó% 0·‰TDìLƒÝ`——†)Þ’XÐKZ&¦Ù±"s©ÌÒÙ‘®z;°VAáà9òhæû±ºeg鑯ÊÁf®(äŠÂ½y,aØ Uªøl‡cÕëUñ‰jÆt¥)©^ı³`ès‰¤&e9¿žgѸ§hxóçÕå-ˆ¦^„;¸‡x¸Ü'ÄóªOìðøA·¼ùÏ•ây'Ø”9B8ó>ŠX wn0š VHKfV5Ø¥]å±QÍ`÷›ïCâb uízãc$´MÐzK½ñRupK]è>fž§<¿Œ¿8Pö ¬8NHláIü4¤p^…¦â> ¦vPõt]óH§(Ø—ãBnÑ©W'ÉnÁ¤½\o ôx#Èöðf+ [¨ßÖ§AäƒÇª Ètê ²ä9¥râØÄØÇb0w®¹¾G¢Zœ¢³UcÂy A½ŠÍsRY0;’¢¨id 4ªåÁtE3®¥>ÿ…Zˆ…FLo/NT(“{ÜLT^+ÃRÄa=WB‹ƒbx½›«ìAD¾ €“9ÇÖ>¶hD,û@¹ ïCdz½FÕÿHß%㌠ÀxôŽ«1(¿• ™Rî[$ŒÛyÞ‡Þ.Ôq¡sk>!“7ÕöclN0´óx½0CTå#jºkßÚÎïÐLè)‹»O¯ Ëû2eOu€ý²¿‹’ ¤¹ÈL>¥˜nNöºÇH)^—ƒLðMAƒtèoIå‡Ò¢û(ý“¦ÿˆ™ÁÅw^ñò¼F¥~—u€f”ûÅ“ _tº¸9ÅB s‹ÁѮ؈ƒŽškÙo¥JÎY•ŸR"¼ ùÚra`åsG!XOtóOn=†¿Àƒ!’Éû…•Ë…ðîJ·bgmìýfÝm9V#°k ‚V‘J½ +uD _éDE$qÜ*”ý¬Ÿs9îëÆ€õ!ÿ:|ã…¾*“„ ëiÌ—A+GÕSç<œ“wÎ%8—ȹrnÇÞ—‡ÙKlrM }ùÉÒ$_Ç¢Õ¿Â?“?‡½©ø%§êqý÷βøsاEØÀ› Æ?å”°’_@µ¡C‚×û·ø&6Ș“^ AëczãïšrÉOn€±V¥8ä«¿ñ Ü8  •ÙÙ¼j@ÎJ ¶g'm`®M~ù,ëòsõ+š‘þ:B ¾Ì¹›–€#~zÅʺð¼ö–ÒyTM™+"[óQÄŠŸ®¹"Ò51Ÿ%-"z³¢n‘+Â_,‚Ô§ ^ZÀŠ0|ër¶€> À¯yÏàõJ2cô›"†³ ·±ì±ˆáEJØØ"–?_ j æç/¢…é5ùãçp"ÒOŒ“ ¨ :êkzaW[ŠÒ?‡¥Î’6»ˆT!ëÔ¶6µ$­íš^Èv¦ ŒHÌSböyÎ’&íjIyVo¸˜i&dÕ$ünDxÌÁГ%pòâõÉÙL­ã©oõ,·ÌV ˆŒäo¬gùÛ;=ì‰z×Ãßä½4çkµ!ˆÌHq„p gA=(SstÓðN’õœïÔQ¾ãc\$Bã¥y_»&å7 I…(Ëäí¾aÌ5)ì &š$*—lù×ò.= â1ƒ#MdD­ŒÕ/á¯Î@F±e0lÖÙ±8)©oÒcê'9eQRw¾BàøҘÏüÔ¿§18·2É0`û¸‘¢Zšfhh½ ½€Ô– Ù¸ö8[Còá3ø+õéíðã°Ç(:­°\,ß^!© Ã52Z ê„©8æ›ý5hª„õ‰Â:ù ùDjKŠ»ªÜìS˹Hk’%VóüÆðŽ&Ê–÷$á8¶¢åä )o„cê j\½àÈ(n\©Ã¢ O82U(çBA…hõ³@?îÒ¡à\q ¶J"c½?²G£%þ6!(äRÓÉ«©[W¤ ¹ ×ȇQÃÐ3øyŠÜ-AIcUFJ”ÀžBíçw¼ò0¹Øˆ0•yÚP èbÁ š#’„ä3äÐ{¯—{eV‚àÎwqp]<DzglpÄÈ¢šÕ‡ÉC+ŒÆç–¿/gÈ]\~T¥Q¥ÃN,²`…mš*GØ€]£Q°äaqµ?„ýƒ}Á­á5L=C”13pÐW‚ççâ,î‘wF ® ›”G¼ ŠJ*—`‘YÀH7hÛ„Ýu &YWšB£ˆ±†òg±È” L̪ݴ˜ÖÄ>\Aîù×ÐÓî€à~ìÉ,jÜ`ÛÆõF™ ? j¤(´¨Iù‡©¢¶çPvP•šuŽƒ@­©ñõrŸ¨‰¡/àý?GcˆêÛV„; ¤ µÊhCb&ß-"'xÂ_ÌEÈð1'Ü6uQ!4öÛ5×@6¡£’êyDeÈ'?µ±XYc,£<Ø Áj«gR— í":pè¥Å΂}Ck{·Ì`S‚”[[9¤DÆÑ÷¢F&[…v=¤„ ±—ÓŠ‹л›Teluy)T`‘Ö8‘Œ—J ™Tc‚Ë ­®rÌÜ0;—)á°¸*®—X#øÐÒ.+SrrÓ¬:\ø(þtÇ“1fÇâ²CnèíqÑg½G‰H©!À4€Kl ›Y]ñ@¬±\f$‚övÓâò_èݨð ‹#‰–Ó[¨¹g¶œ›–ø-ÀÂÚ Tù¢§J²[Áa’AnSب À‚ý˜ 'E2·ˆ874§°¢Zz!ïwéF‡~‹LŽ‚=}£¹{¬ '2#ý3,¯1žÃ…šü$àÇ´vμè¼[zâ‰pÿç×°Ú<ç {ÑÙ‹Œ½õÝp¨ÜR›Ò·ã¯zÚ‰ä†ýH yÛ½YΙ§k¬©ÉôÅòEEDù*¬(´Ý7 •„"óÌ–³Ì`TÊó1¹‹ÉœF?¿9Uñb9DôC_y7H[±†zl"uÏ0[c ë@c» „©,‰5Ìù-óD° g¯°DîÏÕ©±¨p]hÅðþ]np9X´Æ8‘aƒVaÉuÃS÷Ð-0ù9s¼f+|¤È¤oš'CM¶ºõ#«€’¤¬¹¨Ž‡P2¹j èVˆYWpÖ†±—a…ˆà¬ 82XSH…åžæ4#éè9vlT@óŸ ®ÄÕ¡¾G¡…Vœzå±Z|šñÚE`?Å£W‚MŸ5pN>ñ(ýdïÆý sº­3Æâ|å\ýÄ;Ð vƒùÅš«ô3µGÅ „˜Ë,¼è Ô{ @•‚O9€Ê¹Þt¤€Ïè$>ƒE|Š|ŸQ¹ß+¬Á®C“xº Çš¾ ‘ôà €Š¦ø0ˆ—vñAfÌš«ô¡âS&|ß<‰”|`l˜Å+ŽÌ‹¶{­Ùȇ:l»W„9…$Ý ²yiDöhe Ú‡ŒJï¼Béä>Ê7$âÌǦé`)dt‹Ûì÷ê#krI®‹Ù[ÔTj¨=ÌÓvÐô0’Ûa²ò b³µÆ™œr.:¡(섢ƊjîfôöPïÀHÓ·ëì/†Ñ¤‹Qf;Ðú½£ZŒ@Zx"¯Qi»ÛiW„é˜Õ¨yDžƒèãS`Ý8$FdШÉäÜÁÜ!§0’©˜Ãˆü'Ô’2;«Þü#? 9inØðùÒ3³Nt@nšc•ã ÈZb¤ËH€–c>6Œ–"« ã™t.¸Û› ·GÔ]—³êcYŒæ‡$s™ÿðû½ù‘µ§Cº YÕèJ>ýPu<ÒŸøfл)Ÿù`·}Mk8ÊÎMoþ#Žé X9æ¥àTÖA]raÆVùú™ïœ€‡QÈK2Nx <ØVâ²ÈÃÓøl“º0³øì+bóKñ¹©é8ž|Á¬}ÐàcðÁ¹C²í!FØYƒ ™U´Ã‹¯í7Œ²ž2÷ÈÍZbœ·–v ÇÝæŽôù‘vzb0«÷ç‘5¨³»ü£Q*”•óFúý¦“á bÌû!V}l£Põ—Ô¶<¥Qlc–T½ñáÅ1âfWt=CÓz†z†K O¼Ÿ.Às7oà‘šþ¢xd"Óq !¾ðŸÞœ:Çp›6-8`¿çMá³-[c æ$œk¡Ž¡ê6®áhB™·kø¾nZu"‘!·Fi9 ˆDd~…Ú:no ËІª¤$…Å™<”Ùþ{„Åðk t±¼ µê‘Ãa‘A¿WóÒñÝÝ,ƒ©††d¦ãý¤6ø>#kL`ADkº¬¬:”²Ì‡d©EÛÿ¨Û-_c Ę¿œÓ¾Ôƒ1/C-fMöƒ÷Y[ÇE(',9sˆ_£xØÀâåë†aÇûiÿ»56ûéÀÂâ9XRÍ ‹§°ÃdТ7Sêh¾“"྅¥‰É‘ú®[c Ë(=1³€C\C9Ô¾Âòú¨önƒ¾<§0¶¶t…º°€ÒW®!„g]¡µHmÓ±Áy–ÈcœÖ(Ó‘0ÎÆ’qÚ ”‡˜ìgbR ŠŠv"„Þ¶ù€…Ë1T‡ÒN¤+XƒP5•l¡!Ó‘Ý dø‹ÓN4Iµ¢!.XGÁ5hýí*EºNr•ëí¤£`uÑ‹¢ š0ºJa{_Æx{☮R„ ¹<ó@&î岩DÙ„i9鄸$\F"ÇpÉ£»EH²1ש¶™§þ Žä•¢XÀ ¤p2Oi d¾«ÈèíXÕʤput‘!ïÅÜÖEÍaëë•W¥tU ×™""'O‘}óÊA¦ö±z†U-–¨È|vê)/ÞO"-¨ IȹE<`ÇU’‰}ñÖÑŒ|½¦Ã¯{ÈÑ{q+ÇÓN¨ŠÙl…sŠeoÏ#Ä®è!D»@ürvìÉá@ùá Í]oBÛ·wÂÊJòç6ÀäYw ÷ TÉ‘xN}oµ[̈Ö¼óq1ÕTi€y¡*xÊh¾ËéùγJ‰ð*q±OAôhêï®ê2 ˆm‘ÐÐ,õ`ušú†Ü{¯Ê¹)øŒW­×£È%Œ>a`Í|·ˆ œ§„ŸcΣëc‘+hÝc¤På›"ªÇkó¬è9näHx¼œ±Ræ=Cƒüv•zyW‘Kt•è•* ßîÈB§qã @ Ü=ø9$v2BÒ!•ª… øvÅÊcÌõ¨‚‡G6 Gœ*ôŒàF9¶{°“òDfk6ˆ%,"ŸØ8—Ç µë8¢X&*óÂÌq¥ÑCè ^zÌ@ܘYyŒJø'|Ë¥®FµW䂟ugg†)c•…A<¤Irû=/LXÏíìÌ«'.C›”Ò7+ìf>‡»±¸ß“úõ6Å´\\¢FE3=û$ÒÒR1n'gìŠjÄÊTÍäì8ÌÁ{!NНÖ@kyICCÚžnÖ†û4]¯Å¹ž ‰ûŽL˜Šzù±‘ƒ|u×±Q©œ"½éÐT"•ùÑn"Ò`ŒAµ`‡‘¡œôºkø5Špžy|˜­ùŠÐäÐÎÎ8Ý:bÖõûnÛPs¸²Ͷá'‘–;„Û†DHjm?‰n^§ä‚P†ßK U°9+£ª·_tãe¨q€dûuðÁeçÍဃ/eŽtyP씤y²Ÿ3*æhÝ0Üå ‚f(”€€{x:l˜NÏ~©ªCÏTE?¦ÊÃy´ijfÝ·õ PR_…!h´,ÅÞ9S®'&óͳ!X¦Š°—o0æd ì ûG›† ’fLö7yIxö%Á™—øÝKÂò2r×\3ýÝœ'ßÅkLôÏ0“;i&ˆ[3fé¬KL¯×^qAªâý-cèÚ“ñŠÇWÀþ11ÿ_á?7æ ¤ìÆ2eIA$‘ùv&ºjeh†¦ áð›•@޼Æ83ù’üýu]å}ÎþMüó˜ØEŠÉYFÅÄo‰©«N2&9a>Táê…@¤þ’©VL*uI¿m‡êti3Œ…LBÁë!ïBrMxS[*–ZÙ–ÆcrnÖ)-@ió/As%€bä+ÌLAq ŠKšâY1?«¸ó6€Ã•œQÞ [”OêyüE†x ðõj'ŠÌÙ^*ÎgOzÞ†Ÿ¬XDƒ3]kÊD¨LBå­€BÔr²_£wüYfñ—Ufr¢L3>U&¨ÇÉJsÙT2A»bÌд|1@‘û«S.°ˆ2ùú'¾;” Ó8”ÐG ý¿œž/–PÈdíd ˜ë»"–Ђ…FÖ”p&LþAú%äP*ÄO_@é5sD”QæØ PezðIq2è)SQéUMÉå LYó¶{&òÏys´Á@K¸r„Iâ öXž… ‡%± ÷CŽá “™&RyÚ –'L=Ƙ “q^DG» ašªŒ~ª6‰ÙCx¢Ù8G–žL÷­Ò-æ>˜deƃ¤èø–, v¨k$ ×”§\àÁ•©þ̃ÛluÇ„ó{P5›'fõ‡ ú¥OÙŒèhæA&-’*/ÉŸŠs<ß~wgÌ“Õ%\,~ Y•k¹y¹4ÿ=y—P¤íÅæI¸ùÃy¼´*]øGá¦Íwä¤ æq´š€„:aÖ™ØLæX„ƒäšÙ ì4qG€Hðï‡ÈÉ›š›KÑ.L„óžÉþtkt»Kó;&’bnɱcž“jV³Õ©oîàKÃ#½+ÞlÈ‹bòûâ+eö»¤{eLÄZàRE&˜O»Èˆ‡ëÍÿ”È„seÁ³ŽN"3ßAþ¢ ƒ‹ù@;\,ô‘-'µk„N¦á¦Š“ÈùÇ!ØÃQ'ØÃÿw½ùÇ ŽT.˜ÏŽ?Ǧ+À‘k0%Âï€N÷~âàQ+ò@ÏæŠOD|ä’ûòüžž•R4tãJyNÏùÒ‰¾9¹¸ŸuBÜÐ*“™B@ˆ> I_8t¯~`õS¼ír.Dl,d‚ÑàáîIƒ—Tnkts|Ä<Ù8%ìr8BÎAGá©@˜£ÇBÝ) AŸ[ÜiœÀu5nÀZv1aY¨yf‰I¨«[¬ŒAoXâ.ª.ä®q5®U§˜×ä‰ÃÎAJÑôñ8¡é£,ÚPA ¶ò’<‹Yîû ÿbÕ!‹I•$ígŸ0;· UÑ@E6x©Ç^†…“XAyÒ`%¥=×ɰªò–*'VÖƒÿÍËQJm ÛR‚‚E²I>)Û?ÐÚÆÓÜ‚i­Ì¡e-!qb.¿––cicäé1úºž¤¤ƒ©ü–tÜ~zõAÒàµ@.Óv8L¨z'í_îQ…6AÂ=!_‚*²òf¬Î!·ò¯ùOG¹]V±Ø5ùE¢g(aégfÄr3l–ªjkòQœ“uˆßÂ`ù­t„¬¤ý!ØœGÛÅ æòœøÉ†›¹‘kp .EJ=\üg\öJåo’B›Ÿ–….Ó•Ì$XMCÅûÙ0+÷€öƒ¿§Ì×áNë–ˆ‹Ý—‹Qñò=är=½¼P±‘²[l²’J¡ƒtHlÖ 4’Ñ&dë;ØüdÙ+®å#ChÒ!—YS „PXÌPñ…”¶)8áùšl˜ÈGDÞ#Wn¸ÕMBãñš5…¤å öP]ÿÄM ë¦VqÚüýÓâ‚[ÁhŠ~AU!N |‰@ó½Q™Ô(ª¬ 'ïËe¹®™fÿœ¢Áh}<<.TdÆdkˆLQ:¤45ÓîJmRŒÆg$‘Y‘IL7˜Œêº|¨{Р⪺ ƒÕ?ÔrŒ…¾‡Ôw»HŽUs¬k:g¬~25Î áÈd8Šå„­…IA>•š¬ü#ÿÐT˜0S%ÛiåÈÆxJ 4^gØ ²`ÁÓ Gd&£ÌOF™\¨Ðl`·ÉA“º¸”.4HÜ@øY2h¿ÝBÅ…ÆØX4@#sÞ±ë–Hš+ñÊ!Ó-4ûØOAŒBq©Gcªû­!^Ió+‰g ËNiİÑXd(÷A~¬ÂÂ^«À‹¼V¦ çVhÀªbÈëM"IJKRÓBs™ƒœ™|"ÿj(Þ½é9‡“³hoiÁëzâÐüdÉ#q´aJ{@õ bãB•̯a±éB¸6o)6 ‘F°Äâ±ÁÜ¿' κiÞ cjl“F#ÞÃŒÁf¸13ðM?»)^HŸÅ–ë~ºƒqš¢õ¸Ä×scc½ä Wûvã›L•e€h§ï> "½j×'»VöhÇPå]±¹Ñ`³OlìcΈbå)1]MºØì-ySÁfJlbÅÆXl¸‡{€Cé”)ƒ×(?X9±¸ ¹§"ÒÜùM¸i{¤ðìœÍ÷M\ä)xQâ%âƒbÍ .¯‚1í"6߉¹yÎ|A!$º[Þï%ÀÓ3Oà tì‰k4ƒ[|Äﮋ[M¿JlhÏ~v?Ňìƒm¿úd2SæNuJº:ï"+2²éHÇÊô>J§ S×1µ‚ÒNP£kÕL(Ħía¨¾´=7¤vR½J5³Á7«¢ÖÒq¥{Á”Géèrí_+­œŽ¸)ı ²îž£f<ìÁ8°DàR¢…ÉËtÿþØnÄwêÕ%žŒ õˆ²“Ñõ³ÕÉ¥„ˆ÷ŒO@4îB´FˆŽ ’4#ßb„TË5]^Ä(çä¹–é.nÀÍŠÒ‘¢wôÖ«`B©…©OÎÛH Òþ"H- N¥²xGGõ ÿ¦ ÅQ òLJ̆eÖÕ?YJ $L–q1vä¼ò¹î º(/ca&ŠÞ`Ô×ï0¬ÛÒa+L/Ãdôc;é{ ã. %Ï&͵Ãh(%{ ‘4ï@±Ø3ç,M—M#wÁ8pÐh$ºîcµ³Wünì)Hˆ›û@ê'º7J½{’XWëåv¯,ñlŸÒ°©_æ§@ò>ÿ¼—ƒ4X©¤c‚d@æx¤A¤o¤A ÒãÓ ñYßé‚Ôÿ 1þ¬–{ ½ü•$“×ß as²¿™IõÒþuœ“ýM_IQ}G»Ûaöìû‹½-goÓ¬™lµM.¯ïØ7’ N+à%ºc»ÚãÓ]ò´÷š¾¦bÄ~Æî濪»©Z_ï³»ù ÖdŠà%0M’¦è ˜BÀd5ääì³6…'‹ïíg¸0'= ƒTŽÄnF¨Š4á° 3È ¬ëíLõ˜ðûˆô5€éEx;†_[þÙ•^ Ö‡Ñ1Hb2°¬EîDN_ÉoAê0ë´ï$,¸ºUÛONŽÿ«´uø7ÞNgø/8üKëØíŒÿ¾] â>ÞÔ?5ú?S— áôæûSE)¡oTAžÈGOsöŽÅ9 ÷E”xCl]€á<^²¡ù‚ÒÉñÎSÝ¥‹)m!C• YÀ3ä©OøHÆçÊôt¦ %Î\:‰ý<c·ÅèM³³è> FoÁpÇ}Œ[)LNc¤îã*ÝÇÍ̯kl’ÕI1¼'BYÊúH®>òkÕXxžsä Ò Vøz ãC©ÅL->3âsÓ°¦V%d(þ:ÿÖwÿVëAnÀƒ\ìfnNV˜¦›ìH‰‡N8ñìÄ£ó2B4”ëg¹׉dž›xl 4º:ˆØÒ‰GÄÜ·§ˆ¢ÚÓy™zxÇÆö1À³‚ùæò&ú郾”ô kúØÿ"H̶à`[ßH<ÈîÜ#QŸÂ¨ÀÏ5Ut&f| Ô¡3iÑY:c9ÒA‡ôQ)8f*³eG!:ÁYèÈŒUÉgö Ñ3é`V S7yŸm»†mGê¾WºŽ•g8µ‚3ÞÊ=g7+†Ü1œ»dÕ›2e…8<åí4´ØÄÑ]\²Ì MKÂÑõà‰Ü:Ǩ]çÐÁ¾Ÿé:GašÁ^fóìGrD×9›ÆG]çÀŠRѲ qJÍP_(Ÿ“yˆE‹|ݬƒ‡‡ê^R´•îÂ:ÂÄ`ˆB§ûà:(T M~á6ÅÆƒÆzŠ¿u¥ÄùxÝzB2bCÖ—C¼`SƬŒèJxx/)÷Xå^ŒðÃTé{°¶³Ö®tŒ’ؤ]lŠub³F¥bƒ%n'6±)m~2":qÑO—±œÆ5/P(äCEG hÐ)U9Í. ¾›E?+)c¯™ #Vf]©ry@y¹àÈ/ÜÕ'S+òwŠu4g›aR:p²!VùT Eªñ½õl=ŃJMžT èÙ:áávZúÙú&Wm(×[,B»nÕ,¸BÈǼ`¿¢°ŠúÔû`ïgàd¬‚ª‘ö œªûâk§îÃÕiö.¬¸Ç9|à5)ÕÌÓšZ;n½5,T‡ç‰„ùXq¥>#î³~_I§©ÕŽQJ',óÖ+(áÐö°€™¼õa¦} [bc]sV‚µ°âzÒkÂòyçÆêu—\u93rC3¯Á D1§1ÇJµâµrHJisd1Ó‡9´Ê`"yÛ%}}¬¨é’>A“Û‘…W\ŽÅ|M~Û™š4. ¦ä<éKP“J½Àé´H g »3ÀèúvUÿ(v˜•©e*À äµóFþ]H„Ù‘’ú¡…ëʤ™ê¦îc !úþD—rçä[“hþ{Þ|·gžÏâ‚â2³Ú©Ü'âðŸpŸ(šßO¸‡ƒ»ù»Éªn%Á| ö¥ßƒÐé ‘Öô_UUþ¿¿­ƒ?Óÿçj3Ã{–L0¿oÏ›¿0ª+×NµÞŸÈ33ÿSÿýùŽY{F7ŠÄ6ÚþTM¬J±ó)®U”|n¥ù‚Ò^ƒRtOAšG#l2¢‚ïó;ÆAÌ_ Z}W .™ùŽ ´ú#»„4ÿþÌùGïÎè{oKE@f‘¹2²ûh¾`´#vÀ§9S&„P¯ùmÔ§\¡6 ’)Pâ–%ã;|°·¶Ãm4‡ÏÃ@ Õaõ‡ á6±¸„Ì€¶n³rOºžÄÐ鸌Mj5€3Ç«{*ãÃÍanæú¦¬©¶ÑÈùPY[ÑõL »©ÂÛˆ¢’†)5±\SÛ£§Ú@Ç“¡®ÜiÆ=ùð¤ÅKñÕÄcŒD½*ƒ`/ù‚89¹djô«‚Œlç¥Nˆõ{Á=Äëû*Üâk„§²Ì(yØ_ÄS½&Ïò>üvê'æ¦Ϙ_0å ¦Æ N÷qz §ûît2Àéü%§áÑ@Ð&{‰õ0¿ê<Ú®‰©ˆó†¥É9}ÁëÆÄgŸƒî/Ÿaøo@ê%'†)b‰®6=ƒ±Ðþ’”ï`äø³J_И±tùZËÞRÉèNž„N€ÛñèfùôpJƒ¸‚|øJJ²Ã@7ÇÆdÈ‘e*éü¼1?ÏСóTT‘jʇ·|i;,{ŕ탠båÚ"ÿI/!º‚A6×0“ÒW.UîFéÂnk þã7pä² Ü@ ÃWÃê·B[±2ËŸ±2Þ+*“³2ˆáX¬ÍÛ<Ô­Nઓ¹êÈŒìbïµ }¾žƒ‰Ìü3q"™…ð§gòµM0|‹‹iî³(A´”ŒâèÕ3ù`K±ÇX/¬jcD&WÜ¿¥U°—!i-Œ)_3&¡®†L埬¨ÔÓzÍXa1òá¤X îË”üA“î¹Þ¯¨ˆpèÜ«ïo>Eˆu] f9‹ÆùDÆîw£Û &É“§¤'ó°¾ Òž“¬Fc#!ô”€{)¥vÕ8öqP¯ *>ŠzêÕóôF“^ga—RÀ“œË¤=’³~]¹ê!Ù˜jÐ8…·ŽO(ñÉZ½)ÂÔ|ˆÚ{æQ¯S±0’æi-™ßG•‚Áé ’Õ9ýTd ¬î,1A¼¾%—V€Øû[óD©Ôgp.ñaÉ#Ë:ÙÃôÈ$ —©„&÷æ.€#§Êé øT?eÒTÜ]Ž"”èàþ*…%ŽÛHŽˆá\Wâ§öÌGp3:yÞ¹8o;Ñ.bÔÓ½¡^r¬ižMRoÏ7ÕÐ å¾Xÿʼnïû#Pšb…p>ƒhÆ«» ¢«J;DiëHGhP’ÙÀ’¥ !7ÝÄ'œgÞæ?AÜד%˶ºC×E>ßo€ò,P^”7ÿ390eξ3q…WçŽ?šÛùÌH0"€î3ÿ£TLfVfö"F2Ž`µ ˜2.'XmÙ<‹Õ»Zòüû«ç‚Õî’ØVLžÁ*åÜ$o®gc•/˜TX¾¢Ö,zò.ÆH#o£ŸŠ{5g´U’[‰Ú*Ã…ØX¨¶]öî¤Ãñ>L:¡äÛ`¤*‹ÜÜó[t:Þ‡°.Õ{)}õ~‚¤n[­&åÑn•L*E µ*m…©·ÜÀà2n‡ T[J9;áV¡½àµc|D”w©L•©Ê°h©Šc SCD6º†§™”€=sPX:¡pè e·¸|B¸ ®ð½fu ¨My±­Ùx+©¬F Òÿ´A¤`Ff¥q\ߪϢ3ÂKAb"P‘ I@ª¨ÃLŒ@Ïù4ګ傲Ñè'dÁè#øX¥4¤4ÒÞN…—øC$·©¦• ûöƇ'“»õ­l¼ dP{f$yä,ܤvu$¿,*£d\Yç˜Ì8¢àì2c« ‡¦qOº¸fÞ—ónâjÎmfƒíÌÆ ýOr•¸Þ¸©ªšÓÉX,/"T ñQÙN¨‹BÂF#eÿ<Ë¢.ß­clyŠÀ¼ŸiMÎ *ÃX#¥ z£ÆRm Pv¹‚ø‘]rK,Çr~2PK6OÖ鯴¯1¾ ”òÐxäl EqiT,•q!uYVwCP@²^È-6¨ªOP†1"¾ÌHAIÛiO@ÅkËt¼ƒ´ó¬¬ç@Ñ@²~ÚWP2®¤Ž˜7Kó ³B ›,ã¶œ{饃´Ø:ÁdP`Ƈ5LÚLâá&2Y“Üb‚á¿ {ÌOŠ b‰ÖAÏᵘº_pµ¬ùXi´ýÛXæzù’í?)õ\°þ( LÊmpÒ ãŽ‚ÍÌM ,.ñôÄLõdεWDAj){í?Œ<ò6>ç„ gÉÕR©'iÝÏär°÷¬`‡qM2›I¡2%8H!h¥¹â[*]…TFH=´ñ\ ¦ÏõÓ;Ð`Ñ]¹A;П–¤me$Ñ—–§ °ˆ»Ô¢ò¶Û‰iQ·Å¡’1âÝ¡ò¿„”w0¾Eå‘‘¯ðûbuLUE EÌÑ ÜÏ©¸#Èh6øX±†"ìB‰N בRb,AEH¸ñ] ‚*á€tÍ @¨<¦gÐAh°I„–m Õ²<ý qp¬êÞ·@{Jˆ>X€hXª‡íšOEhP&ýr¯‹Ð: Êï-Tî/⣼h]|À=öçÃÕèâóP³,<úé%è|¢è ËͳÀYÑ1 !Fæ³¾ á*×Â^ýcŒê1Gu15؈¯Sø÷‹%âJb2Í1hÆ^~dŦüSo í`–lH tÌþµâ›ªgáíœú|ùX .¸:ütF¿Â˜þ1û•<ófFi,\?PžwAÁs·¨˜å <³ Dúâ1/" XYTþ±ST’ET²ETŽAi¸|ÿ$(·@_2¤W‚ž%m@IO€¢´ JAPðX§PùQÔñs£Ñí%boº0¥f(÷b~Êc°m7CyH{ÞBÖ°;”‡‰cÓ¡¼`ÈwóC„%혷l,‘UÄÝA–ñ3ër,éø¯ ì!bŠnN²d9G½„ Ÿ¡†/é0)³— ãú©3Œß<åä܋ܚ:'G—'^tpñ¢Ÿ‘ªö³CŠRÿû˜û'€1 0Ë_ÆøS€àÝ|†[vèþmCÃ(wÀD¯¦ëÿi¼ÿ÷`¬ƒ«˜ë0³^ÚI`fŒƒS`"DÙu€Q÷æGôã1Y› b‡\/ÚqÍÆ&¹WKeª±JLafp/õ›Nôÿ%.)o)¹N„äÄ3‘æK§Q¢úÕBtúÚÎM^©LW…¥ÝgR ”óVØTv&=RÇíqŒEmèm…It—áL5>ŒÉ1qŽO ½h‚ÛP#.H/’KЉ@qÄs‹ Œ#¢RƒäµE¥XÁ‰ ¯A…äÍQBúŸejQÁÖõÝ”·~!åP9ÉW¤“K2Si¢1g˜á¨l—àŸEñd 1büÆ*ÌdreœÃwaùT¦©[Rfä@†ÕdXé:îãmígî=H5|‰1aõaƒY]¥ˆe/2MË)¥³Õ˜]}„’(ËE¥0Ì®2 À*%Ä”4®'(±Œ3Žæ>•ÇFŠ:h…»U!Ku ø¥”bõ}7…¨fUÉd¢—bÁ8,0Ñ’ë½úv¬Ù¼H˵+ì SàøÁTë§°Pn7r&ªÿÈâ…j!{ù¸;Óz±ÙÂ…¨pÁË Öm\¯…õAÚÀµ¿ÈI„Úþ”ša)”¨†™V ±2)–ê͹_?ŽÉMdZ¤>a„XK‰¤tI/ éN£1vÃ2™‡Â`‚Ò=¬èwAb©)áû©°-ÁH ´X»’1g˜h3ïPt÷C—ƒ¼ÌíIuÀH(øyæÏæ÷d‡Æ.ÆXDCíÚ… pzzæGÁ.E»7°óbGùwç¹ÄXëMo€äë§äcC+˜'º;ó›¨ WTžxóûq„ §Uðìxº‰ýSÝÏŠ4úiŽ #9îîxˆzÂvÖCÒÜþÄ9­Þ•Oä$p£<‹Dí¾s‘OòP·ãè'rE~Yõ›±{Ûü@ÊÀšÝ¾1óžêÞÌH2á”r ªSDSή‹«y/A¢Ÿ™ƒ•h§gw…ÁH¡:;Ш™SžFŽÌ±y A(£›Ì}{Ù ÌÓKªs#ž3ù*¥gAO¶Só"ç<ì`IH|å(YÅnöj ¶kÜò8ï`ŠúÑ Ú;b‹hVþ>jþ" ¾aÌÆ?4ˆE¯áóì×A¤ Ï8íÉée9=2£!öêåôÚwãzø ãòâxÙé%œžïàt"§oÊ霞µ§Ãùìe§•f(;Óø?AðÙÄüßÍÀ†#ý_Ålbþ¥1ÿ'„=\Õ/³ŽòŸGÀPCkeý2Ž hÌü¼1ß@@A|Á˜ßº,#Â%\Åøv*øDW(ôôš1éEUb´Ð„F_[´ôöeÐG‰¥L, N[z‹–áLåÎTvÂT~OAâ±]ê>Ó¶Vœ-¶ã†>‡13ùòY¶Š—Úš5¶¦§lÝü2Ãtäl% ³ëâu¼)LMü’?ÍÔ ˜z«±b:V~…¼Oy®5<×[úH0°Ñ>ѯèÃ\·1Š Y —˜Í=Âá=Äfе±Ü³Ž¤t=^Êñ!¸Ö¼->OÌ îsÖÚ:¶Çzÿ 5x0L µ,^MæÔ×{ g#O‘Õ0j¬#kZ‚)hËbÈ('X!WÃܯ dÀ^Á9{÷:ž l\¸ÿSÀŽCßFËOy·†Ÿÿ2žüÃA™˜2óÞw§”âŠAù]¶žy4(vâí—⼤ÃÑð8þŸ%Y÷ß+…@ìQ.3©B¯ñ'øUÉQ/¯gbV.‡ÈÎG#š¢t£x}åï®Ëp ‰GóÈC5ÞKú¸ ây$mþ•6뤔F¬ Kü9’ òÞâsäA‰¨4·ÈP¡Q¾žáÀãV†‡E.§ÄFüK€@¹á*ìCK†éÛõ-—àz4V1¯~&C†ml»ë™Íš¬èïÔ¤g‘±XÆô1âú*p &¿Ôã0H­-ƒÀX¯~.FУ ›¤¾ÞÀþÒ£P™#°ôåã NÈ`°øxu$@šÕø“ÚWŒŽ‰jªk´g>Bm°Üƒ*(^cöYD‰“±¢¦–B1æq_uºà¥+VuKGÁ8§P0šS{ŠÆãoSF,ijk4|ì¸S {00®áºÀeÔÔ„G•oq´;$aÉE®j™àkàBë†"?@*å[WÏ.ÐÈ€KÆèyædÊŒ£,:ä¹BB½¿ ób EÝÞˆ‘$Ç÷ç‚Ͷ£C*¦óF’˜"a{êû`‹ó5Ne†Ð‘Ã)¢LHjTOmÈLƨ»ÜÞéÍkWš²«>eü?G|w4G©ð`AõK_Šrw­\1„£òÉ­Aˆ¾T,ÐÒ^$M yÝ5¤µ=˜*‚”z¨þ2µ” ëi|“~ ,ú`ÕŸ‰1ŠE'»þN„lÂ`{NÕÃÝ` ºd*Kï" 3Ô%”¨!¥·íDñ®XˆåˆXB väÜö¿°}ëòç]2£Ë†âÿ~¿¤gä a®Æ·ªs‘"C6#R)Ã*f6•loM7žŒUߨÌXŸ±Ù&Cªõ1ˆuµo†r¬RóÀ\ )œÀZç˜0ñ =Ѻ–y, ç^@½ýqbP+¸öÅØg( ?FL%ToJ9²G°+:”Rím켇u¬”2¸ÇVy`·Êñ-¤ª¾:ΌŮñdІ/‹Mcã+&*T/æíö¸øC’h.ãȼ¼›øSbHÁødϦ§îPôÅ›õæÇ›Sº]öL½C@ Þ oyóÇ;š÷GsìÄ “}©™é’¹inHIÕ62õÀA~Ã7Ù’°A¯7/åqEŽvC.¯È[ˆà-¢9ùÎ|Úàf ‚KþПRÓÑ'2,KU±Ý„J>Ú±)„šŽ_7pŽYåÞJ¸ „¸b‡È´ƒbõlÄvr ˆ=ÑÅ#jñ˜jX3Âvb:<õ £”ì êobå‡ß9Ét’ÁÈÖ‹j¶6ÏÀÖÝO…dÚ䆃Oè _¼b"if%:N¯VLr]-f:í¡ë6=¬sꔀ'ºNñ-\Ô¶ Ø*Ç+RêÖl¾+¶¦4p9QîC™ŒeÝŽƒÙ‹§=ç®ÜÂIJjò*֪Π3ñîúBªû@£LîjßéÙž4=‡ukzÎ÷‹¥FXG¶]AÄè;¯™ª.: Üj@¡œêY ØåHA‘ s T ”ëõ!ãä^%`q$ kÇ‘µˆ ]¢Eä&[$ƒ‰C(¿ X{5 ¬V}•€jFñØ ǰXö`›©¶:2á9p¯+ûáÀŽ2” ¢tŒ=Q”ç^ÚOûÛ%Æ[)ö‡æ œ¹‘öb­Ï”÷5³¶ì›ÃK |PŸl@2ØÊ$$ÈûÛòò}Ñ/ÅéH‡2¿Üu"`ˆ*ëö”oÖ÷3p3Ÿ#Ú‘:R½9àš¡r Œ·§/UVE,Û˜‘w Ï"áu‘x‚¢ÿR ú§€(¤ Ø´^JnÈZ \[‘‘ý-ï^ ë`Ì‘±¾‰þ§!á)CÓ_@‚Ž‘ȬãñèT~ñȆY‚«Œâ¥{”3™í!rŽÎ8%™pܹ”ƒ ·äÈ78Üߢ3Î_pCU¸ #-cdüdAc猃WC‡oÐ74"[ÉÛWw&M7]ÿ`0DîD£ˆÄ©¿¯Á°¸G.ÁpœEÑ7¾a9LT´f':i@ZãpPè€!>Åâð #½Pã~mX÷ë®;Ž…!S¼bÌ,‘*”òqHZÈœÂ8ßS8𠇱ŒvòL˜6¤–x¥ƒƒ v8< ŒÅaƒ8X,³.X¡l1'qذ³àpØ17¤pŒ­$Ðñ1U‡$ïT&ÕžYɵƒ¨wœ8``•#;áÖÌóvöièVâÏì/ÌÔÃ$ÐqUŽ‘¢"ìÏÈL}æc|Ëц»‡»fU&LÛ;f7R:2<öÚhÄ€L};¨²–ßßáÜ÷È%«:ÓZ»:¤R?3uVÑ 3.,H: þç›f¡*X REÁ!ÚžYic‹´s€CsœÝ‚8ÌüÂ̰¯Þš3ûKa- RqŒ„!ÀÉuz“‘,TdŽ’]^‚×hUç¨6¼0@ž™0NÓ?eÇÞÃaSO+¯Ò.aÀ%r¥ƒA,oî C¨0ü¿&´›¶0§N¨‚TÙx„îU@='tx%sÊ‹Ûã˜v W@Î)„øÌ$õV"M¿t¦i§pâM8€% ó„zIÒ)d ÿƒšp²Y…y:P[ilê[™LÜ=C†0«ùäQ'J*SÔm"7ÀžÔY@ZÁ¤Þ„aö j4!qó‘í¢õfi||$ýëoÑÁ‚s$.^”ºøW%5Æä=M~òd…’U>ÅãÍÛ¶;õ$ãT €Ôã‚ÙN™Ú+¶ª VKüƸöçÐ8¹—«‘¤ÏÏ<î<ƒ×dÚLëäŽz‘(­õ1¹UnarÒlÆwÓ·˜çyK÷íY»Ÿ7„ÖJ·ÍEÙJ ÃMqõÞ jw#¸$TOAz:*ó>ã²A)`”U\nc3Œ?f½LŠÔpÁÈà 9õ\N ÅkäÀê•2¸­c“ÀÅEÔ`sd€=Qùã@‡×>£8ª„aR*N2¯|!VÎ!òƒq¾ˆ¿=HF¸FŠY³qæ°8 ^y”0Ì…„yŒæQâ^±4`¨s‰Ç‘’6]ÂàØ`<ɱ޷^y(ÏÁW*™ ¦†bIaê—¹Y/M¹]¦ëØíx8*‹‘œ“Z”Ïžx.'BÚÓµAŒ#¥˜øx³ô y(þVG½<ÈYÏ~ |<±ˆàQ¶^8t†ö™2¡ÒÃ2ž‚ÖÇ xlc…`Fžb½Œùs…˵Ïq<Ôö› #D¬Tž¤:¾J ‚dVIŒ'lˆx›Übò!5Š(n '\æÇÒmŸ¦ãôÒu($8%óýÇw ²dûÔ—Âç{?†®ýE™§}m¶NjéG|ì©<¡²‘t©I\,ëRqé~BKÒáB™MÕ…Øè™Ÿê>‹UQªcòï›°*®@G¬åS@!’ÚlÂ0»Õ”ª5÷¦éðs©íD5‚}j( <›Ä&È Öå%ÐSΓ¢–ƒuY°‘èQYïHRç%µÕƒ‰RM—ç`QyMBˆn0~‚„à C”n4Ö`TA®{â1g=1J›e`Á ù9ƒ5T¼—¤U5KKÁjY&d΋¹óV̓d,û`úý/K½Ì@¦ÆK|ݘÿ=¶ôÿ;|r"aŒÿ;Sú‰7ýÆkOÅN8•ù™»k(§†Éº;%/™î)Dxý=ž!]kÚ) ÊAÍ©Ú$ÝSA]àÔ¯b#,îžðæ39±ó«ËüWpü+ˆÞø¿ ââWÌ¿¶×ͯÊKåu©À¯–òo_þJ^ç±×x²æÉèWkù7¿p²~ÅÉ/Ë‹yò%^áÉs3ãs^1çózºú%9ñYl`ý53Ó\'¿kü¼Žh‹/5ÿ¼ò¦á›¹)ñó:ÂC¾ôõÿÀpSYgë_*Û›ÞÖŸÓ7}µþEþsú¦âÍeþhõ6Ì?ŸV½úÍ?zS¨?ŸvÓ\.Â!}󶹃ÜôÇ_:oÿ9…¯Üp‹?§núΗzöŸÓ7¿y—?Z½÷¥ªï>Èÿú{úëï鯿§¿þžþú{úëï鯿§¿þžþú{úëï鯿§ÿš¾§/e^é¾§/å^÷{òJû5½YV2Ãî|O_|Û/MñEûM}1?W~ÑÝöÆWÍ/ÊIùÍ/ëK @7ëo´ß×Ëfr®æoVõ þ]½á¾·/ã÷e’û­ñ¥²}óFûݽž¯Íí/Øoï0¨¿à¾=¹u"·Í­çe¶ù…öüBxA~ôËø‚|Áü î;|ý¼ ‚¹‘ß¼õ¹™Ƭ¾Þ~“¯ß2·åö[îvn¿î¾Ï×{fµ7¯ß½ß››Ý×{ÖŠoêk¿†ŒîÖÐñëw{µw·:¾;—¹¼ü¥òúû½º:x¿öä÷ëîû~«¦EQ§žÌš_Óû‚²<ûò]Vb|òZû…¾–µ®®šL ÙöðzF²„ åæÀÃñ¦€ˆ,`÷ÐaÆ– ¯¥®îšh¡äÍkfß+m!Ã×rsè•=i =iI¯»&ñÚop™ýÞûê?–ÅkÚ¬^gò=–ñ¤C#ãÍx¯µmìµ·±ÆÚ{?Õz)»B<°#¢)ì5WÈõ¯V¿X=¼'z_Ey×µ¾^Bö°§E°¼õëm[¼¾\!ÁMÞ =¬'Ö¯Ù6ùÚ6¹{Ò"ýjRW×]Û¼Ž ì€aû§ ëüºÂõ:à÷йz`? ¯·íõz(÷<öåããÓýë¶å¾IHi¹çä÷uׂ¯,}ÉùGÊUë¯ÕUe|ßZ/ŒßZŸ_ëÕù9y3‰ùCçk·ëù}_Zæ¹ÛrÐ5ñkç«`¾ëãe埯¢ùï\Ó¶þÚ¼š™ÐÇ;Hþ‰Íõ¶Í_¿åÍÏÉìœü¾n[þu±y޶ë;ñï\ëUáü;>^j~OÊùÁµž3ž˜Uk¼ššèZۮݭïÕ}y×»[Ïëë¶#\ß«ÏIèËÏu×®™z\‘Òôh¯9`êØ?\|@^ké5iñH8—ÕOëë¶\Ëꕟº–KZãuîŒGµ5~PG´~å,¯ËÖûøpͶÿkÒ4ûÒ ûy]×\Ë £úÍ2=‡æî7ªÿ¡”lþ×Ñ2×Ï¡eâs­mûáÛÕo‹}iñý·ëõâÚÛξØÕ¼²µÿÕúëe ÿÜW«¯•Y¨ ÿzY§^_­ËsŒÂ¶Õ‡hõЗVß_®Çõ5Ûè¯mH‹ëKKï³Í‡®ÍKÃTï#'tèÔqÐ8ò ö½_“+Îó§®ï‡¶±_Ã}iårtR‡®¹Ëe“ÌÙŽ*kû¾ÌÈOüÖø\ Šæb]~<ùC[äµÛò·4Äóh‘¡kîWÑÜÿ¸æÞÇÇß¹ªÍýÚ¼Ú1«}´Hüã…msoÕó{祽Ÿ¿K¶Á‡0 û”ãÌ窴ïùy´÷~¯òçü›ÖÅäy5Žr®¶Í=¼+÷Ik?·¾_‡¶µ‡ï×õÁyiæü„®¹_•ÏÅy%"„®:\ê$8Xä3¾Ú6È«hØ´Ãóhî¡mîòùf­éqîLGyk:Žœé8\4]Öô~iM¯æõaHÄOèÚâÕߨ×ÓóhêòÏ,®jKÙÏ£-žG«¼Ú¶ô«Ò¾ó@Úw€WßnŒK‘4.®:ë´ïß?¦.ÿ|­¼ª-=,ëÂÖzÞ±^\]®'E íp­[˜$¿²x\•×¹`ñÈü| m÷¢4¼ òûªmÛiñ\À‡kÝ m¯/XÓ^Ýš.\yûU¦Å3É.¢U_D«¾¬­ZL§Cg:µ¦‹ËxK_’V}ÍûŠmÕWИ/Jc¾„—]«¾Œ¦ç ³dl‘¦w¹mÕÒÚêKöçŠmÕöXtIœŠÇ—]£¾Œag9È[ËñÄYÎÂÖò\¬Ì/ñGõeÛ¨¥±Í¥Ñݹ,¿/»6}ù|½ú;ѦñÏîåó¶ás íNß,¸Ü6éË·êÛ÷.I“¾„&}ùÖË-ç²L>/¡E_D‹¾¬-ú Z´³¼ã·–/ß•{¥A_Bƒ¾lôÛ˜/Û †©.)÷¿U(® =_²PT~ E~Yš«üäh¿¶ÕEö˜´éz¿¸ìÚ3xô kXÚó¥ÆrÐò¥Úx‹†K5,íù²mÏ—¥¡ÙŸâ²kt—ä5_B{¾„ö|IÛó´çKht—J/4g¹Wñ%´æËoŸ2\¶†¥ùføŸFüÓZÃuë®5_B#¾¼¬¤m[4Ј/I#n>88ÂÌÁ¦-éØÂÁOMk–fÖýQÓ¡X ñ[^Ñ—\k—Cê,Yk9™8ËYÔZž‹÷³ê³kj—ñ†¾äZó%¼¡/×OÁî¥ó¶Ñ ¾hshxá¥nk6ïÊ~ßqmÙ–6ÝØýŽ´ãè›l̗И/¹Æ, ÂÚuì¢ ßGvZ±°mXÚôÁ¥÷›6'ÙF]4@ )EÐâÐ4aפaUZßS{@>\jÛ²Ê µåusY{†®üEÃ¥5\º–ì^›ÒØ›wÞÇòR6ë¶!_†*ðe´7iÄ^ÛÜЀ×Ñšñ‚^Ï/½}Ò°¸2—Ëâ=xã<úý‹Ú”/ƒýç Óx%OämܼŸ ÷6?£mÇ¡ qÙ½Ÿã‹ yH0¤KÇfl_Æî嬆åe|íXNšf KYc8i g‘5, úbÛŒñB¾6/g¶¶KÚÒøÓ´by‡x1óíòÅ Ãp›ÙÜøébÛŒñ>¾b.Ýj ÏOÆ›8üÞÄüç{áÕ³ K;†§ÁŸú’mÆÎ·p¯fE”8(ü¬…"™8(²¨…ÎÅœ çlhK6ô-œ³á ãÆpÞ6ñk7í>·vKkwxíìŠmtm{“ö{E²4é‹®%›Í+ÚÚêB|Ö.0‹+øpñmgÙNþªF;¾òUñ\36^c·ßÚ…W1.ÐŽ¯àÃEÛŽ_¹ñ3,f㊺¸¦²H°';(ª …B\ei³WÔ_¾±iÈlØ‘õ§];à­ÝŽÝ€våmäw1ÌÂMž[³®±ÑKv®-[qã#‹ß,Ϥø㯠­áåÙiÃâ&ßHû•¸Ì/5KÿøÇðá3Gô™­ÝÐÙÝì4añ‘ëÁ]LÍÓ‹¶ ‹‹ü®²s—_·³?¿âfñ…‡Ã²xÉ©mÄ:üEµœ¶–G­eLùF…LùøÓ¶b3ðÇNaâÐÒtbѨ3™¨uš±ÎþägâZ±üž ØŠ¥-^pÍxÁ²Ÿ5–M2p†£ ݆¬s?ùYuíXÙ‹ W¥á]è´ãèwl;®ƒ?¹à²ØÕöVÏ¢ ù]Û︆|–]4äè›®!û?n²Ùl솭Ýã wë{lK®;-™­øÍ¶›ñÀ-:ä-›ƒ"l1À ÃVÜbL^@»³ø Óˆ­]µfýÆl°h¶´fKׂ/È»òª¶³ÃN 6k4àÁo˜¢i¿ÆØFVô›ïz®ÍW>\xûUv¿*vÑròÁ¶Þ‹0w–a.Xü¶^y _°Í÷šíYíW®³@lX 0åˆÄ@ é4Þ h ]v{|¡m½Ñz¯ê:]tÊì¸5[„g˜ÅîÆ:Üý mÓ½o›Ø¼iºX„ÛÅúÛäl[.&^!›˜Ìò6;-÷‚´Ø«º÷î…[/7‹Å7ÿÇX|ã‚Ü7ƒž³;‹Î°ëߎåçéÛp/È+ qn1îu·ò–Yä40䑃!Ylf•mfûmëår~ª ÙYvîÝñKìjWzÂ…¶ý–Wõ§¸àÚY ¾Cj°¼mÁXH±¥ J“.´`1¬ ø·» Ø.[ÃÚxõŸ¯óφåÕt›0V–õ§mÀfrÕþ4ÍÏž:(‚´…(è?é$è¶`6ÞÚ6V5šñUm‚QÓ€gó¤á´1œƒ…6<·mxîÚðmhüé¶áðm¶MZ[²j[=‚…V<·­xîZ±›Ÿ4Ì%äï¸Vìÿ iÅ&¹jíÎ:vÑŠŸÚV\wZqm[ñãn+Žb‡„Ÿ5Hˆ] Dµ@äAfžböX׊ ÛŠën+nízŸÅî¾µ[vqqº­‰'|Õ¶áßÌ›6l6¯Ú–V Û–ÖnŠÈÏz§ Ÿa÷«ftÕ6á¯åMîØtZ°ÛÁϸӄ+mÂv{Ä!íO·LÞ°å`(ÂÅ|_°¼Šƒ¶s'$”Wqж`³âÌ­Yß™­ÂÅæ{_›¯š]hf¡¼4ƒ¶ýš%ìòýñÕóf·i½bÖ6²Ý Óx,¯ÙÖ{ûdë³ó m½æ&¶÷¾sU>´m78Ëìqp×ܵíÞï´Ýƒ«º¿w´m×l8 ÖZ bpU>,6°Ú6°Ú5\Û˜Ñp÷; ׬9£Öè ™/±Zžl¶Œí¡6¯Ãn³åf^zUœÛj/`dgóº*^ÄÙ­Önî½Ü®LÛØl¯~Õ,ÛV »ƒ3ì²Õþ¶Zi¾m¶Í&Þ©v[8V:8„‡­N» ´yÖ¶‰ºfûØ6ÛºÛlsguÜZ-β:·V±K}¿ÓjïŸl^|žƒk¶‘m¶à9°]•~¡ÙÊí·°Wmî·^nö;çá9¸fÙf ³ÑfÑl±'Mê§m¶ÒT‡v[ºi¶d¥´ ÈKò|‹BäPØ^lc•mcO;-—ûÑòƒåO±›¿ÌnaíîwÚ.÷¢å‡ÛÇlcçåM›ÙÆkw§µ•åC×Ê’…ÖkÖBm¼¿Ým¼g–Wmf[oýuîK[ã3 £Án„ÚzG§[oµE܆° ÃØÁ.6݉mºu§éÞ¶MwÜ4]*í~f»h¼«¶ñÎ]ã ´…ñg¡ñþ±m¼â<œoZï¬ifÉbëÛÖ;w­÷,»l½ß±­W|‡óMóže·Û|;Í·>«ùvpHZ²³phš~‚ÓÍ·ê6ß ±tíN¬]ñÎοÒp·™•Ýö˦kÿiÛ/Z˜þ“®Ÿ_hÀpȨŠW¶M×þÓ¶ßÖpÖ1Ì@ŠÐþ´íWšŸý :MØ¢ðR(²h·õÉ6,¿Ç¡¶á¨Û†;†ÓO3Œ†;ÿü8è4âdÕ66ùçüŸ¯M+ö;­¸c8:¿ÐŒm3®?­·Pø-& ãNkCìNn›[ÑiÇ•mÇu·‡AÃhnÅYíø?6íø7Ûv,†]kušñy¼m;^ë´ãâ¬vüõ¦­mÇ­á¼c¸8÷¯mÇkA'p<Ä»ø|§ ùøì6<9݆Åo=ßiÄ$~þl†»mxõd~³Ó~Ãß9£ýš$´­l-6ßw_Ö|ßì4Ýð›g4ݳm¢å>}EË}Üm¹Ÿãù¥™ýkŸµáþÅìþyÛm§y•emŠÁ$é3R Ý©3ò§ÍοxYâ4îú¯›ÏÛ§ÿ¯¤OÇ9}úšøX]úä°ô9»õg•Âï|®®ý™¥ÏñÎü¯pP ¬_õYÚï/¾zLêÚíºV'šïËܪâW^=…¿·*ý«r«¦™nUМiøsÍ>Í‹Ï>Å‹ïN꿪éAñ™|ŽùmÓ†¿Þ4óÛtq~»öç·Ÿ}þuæü6€?õ)ÜäÏ3Á}óÕ“Ûßù“Ûwƒ[ 6—e~ÐLl¿Ù¶ÝÙ§Ml?u]æÓ’¿¢u™ä¯h]fû/¼.cFUų좥ŽÃ—.*†Uì4]¯Yþ‹‚3¾6[îø3-*.˜=sUqóϳªœ7¯^TÜúó,*=±j×—Ú5Åݳ¬¢íÎíRø½ tÖ…vû©+µþ_É:¸ÿç\_{å:xÿϽ¾æZìZ»{s–ÙîæM=þƒO_ùöY‚¿ší›à¯fû&\Ü{t»7wÎØ½¹ßm²‘k²?nwo¶œÕp¡ÉÖ÷¼lëñÍN›Õ]1ìv¶Å6ÏÚëî:ÖŸc×ñL»/Ùu,>e×Q^°nëü7³vÛ1qÛƒù‰mÇßvÛŽkŸ²íX~ßm-k[ÑtGnßqãBÇÏ=Ùheü~å¦nwwûS¶ÍµÍE§ ÿ%ï› ûæwÎÚ7š}sýS OÃÉjpføÇñç ámlB˜tbÆgÅ&œ§ñòW[6é™ M`ÉËã?²³â?ò¡‹ÿHã?Ö^ÿQtñ×2׈G¿ßÆœi!ã«/ `’WpÕ ñòWÇØl.D0±Ñ~zS×îÙL› Lõé!LäµûÊ&ÿŒ¦¶Ñ/œ¾›w‚ïÌ®mÃææ…¦ ïg˜E«½U#ïîw"ï˜<(-øàB'únãåÁaWði±™Õ¯Š¾{Ú¾ÛxUôÝI³Ï_}×5믌¾œ}gÖ;Á£ÅÁ£f4°±£_Ë›ØQ³y–]ß¹ÐÑq'tôÌÐ;i°W^ܘ‡Ÿ1rÔ6»è´Ý3GóÏ8:`Î`8þñ+G§'Gç6ptÞ ½sÒ.GÃï¸ÀQþi# “Õ+gî†@Ÿ =¤gÆæŽ]lnÚ‰ÍíÆ@ïŸ]wc ƒ&:ìÆ@·–'>{tÑ ‚þÍÌA¯wƒ ‡6TÙ$ üÒæ5Žÿ·ó3b ‹n ô×r=úý6:o Ç ‘üf3_[t7«úròµ‹³òµó¾Ë×öé´7mzÑ´6iK? -mº¼Ü¤k£g(ù@áE>àõbºöIòÛ—ñÚ¨Ú´øÊsiñ…&÷@=¹}ùù€ü½È=;î¿h¸Œq†óàLê~^àhÞÌŽz@ßÃ'¨êxõ¢e˜†—»túV¶oæ—[æ‹ïeÍxýÁå†MÙ­j©´6 æ·ºwóõÀI.0sXDiËÃFއ!_>‹LCó•Ólûu—M#(œéqÒšÎBg:ž\>‹NC×lMÊ«£ÓРדtyÿ¢er)LËäÒæ¸6Y¯'l—E—Oãk¥åÓnÕÐi^cÚ[$‰¡wÜ$¾.Òiœ"‰™ÄŽÉÅ«Zæ’ÊsÌ%¹&IŒ4é+ KŒ:ÈpwwIbƉ3í-IŒ™8’˜,<“$†Ÿ?+GLØáˆ‰#Ç“DŽ;Ûs³?k¹ž3OÐM+ELøcGýÀRÄ\…½³,»é1ÿ[`ˆqó?‡FP84ÆI‹F84ÌäʧrÕ¹å>zZu¹üÊ™®ãÖtî;î£Ê|*÷‘´¸ JPTvÉ@b‡57®Ã•ƒ†ý¨hÙ¼Eö£õ†ý(oÙ¤¯\°+È^/é)ÌÂÂR\1pìGUaÖk<ë·Æ›¥7.(×Wú#ÐÖÌÀ²«qŽmjœ:¶©°hÙ·â±cßJÃA—ØK×”OðzMî+¯W]ßtˆ½¢Ü™Ž²Öt9ÓI´@ìUϱ}’ÙëÎ\™½t÷Â{»ŽØkõ;Ä^£ß2« Ä^õ[wHk¹ónKíu†mæ`͵×ü›-µ×Ì4r¢Þ1⺫wë›ÏØ©\m˜ët/xßãÚ²E¤òêØÑËùõÕ’Â8µÜ[¤—«z¹†¹î*hì΢®›¤ÎvX5¶«ÊŒw],^žâ®s‘:§¨ërG]·ž[êºkes]‹i×–«Q]œ“v~ þºmç×ѼÏšoôk®¡_ãnbÙq™´a­R3ñ- lfÆ×ºä»°%Z–]˼[“w‘z÷€Ïùq·æsZó Çí’ïVÑü¾XšûüÔòïzóSô»×ÏËA%ß­ç»×îÝ]ã“·¾P¿C¾ûÚ-¹A»/¿_»µhÙ—ßæ~þ{½'Åÿ ‡ÖÞï¯ks}^Å&êYó‰`Û6ø×¤ûÒÞ{w«y-YlÞïÕ=ié¾´ü×\‹¿NjK{ eª–ö83>iÄøõžèºÃÝQ7ÕòCÊé–ŒZeÿä£G1¬×\1´=ö´ ù¶ýEÆë}¯´Œ× õëÿÿöÎ'bˆ¢‡Ýl·…íl… NÀ…–‚;¤Y!ÑPnËaèöP‘t´”F$˜ùŽ- QPPM“ÈJ&ãäÿH)œ÷]à=;äo©FM‡jþ÷7ãþ„é£6H$D÷ÓGçŠZ÷¨™\ïz@¤1Ž-_üsvïh•[ttÁ§OÝ娩™xÞîfwÅ&øuz 4~Âõô¨£ý5¾`øŽuò½Æ² ~’q`ý<ñìq³Ýø„C ½¢cÑxÇRzkX¤\<Øíz4õ`/{,èf L.½˜ÅªíhêÙŸötz²Ñ›íq5ØäH£¨æâ;£b1=¯@UOîkOµÇv™vûzæÛä6Ëmø ïCéŽ']ó¤í7j½O¨û¾JÖýí”Y÷ÔH&dGˆN¢“è$:‰N¢“è$:‰N¢“èô:ýô?tqFõ×té«ß‚¥—äê‡%úú ú„B9]cups-2.2.7/test/onepage-a4.pdf000664 000765 000024 00000143421 13255074424 016552 0ustar00msweetstaff000000 000000 %PDF-1.4 %Çì¢ 1 0 obj << /Type /Catalog /Outlines 3 0 R /Pages 4 0 R /Dests 5 0 R /AcroForm 6 0 R /Names 7 0 R /Threads 8 0 R /PageLayout /SinglePage /ViewerPreferences << /PageDirection /L2R >> >> endobj 2 0 obj << /Creator (Scribus 1.4.0.rc5) /Producer (Scribus PDF Library 1.4.0.rc5) /Title <> /Author <> /Keywords <> /CreationDate (D:20110914150333) /ModDate (D:20110914150333) /Trapped /False >> endobj 9 0 obj << /Length 201 /Filter /FlateDecode >> stream xÚÒ= Ã0 àݧðÜAH–åØçq)]zÿµJ H%ªÓ Á|èÁó0gÌ4ô'ºÜtu§ÄD LE2î_~fBµÖÖ{h3EJ¤Á5Í´š+­íˈ\ÔËÂÁ]·Úa“ciç@«VàÊ›\ØLëɽO;úDæÓ¦z=PPñÂfZOÚ1FæÓ¦Ögm¾y4ùy9gñÉóûú-3ý3åž.içô ÕLp@éôÃ|Sª Fë_·™>Ø@×}|ú™·ô¦ï»‹ endstream endobj 10 0 obj << /Length 187 /Filter /FlateDecode >> stream xÚÒ±!à§pî@¹ç±iºôý×¢iÚ¤’^ÏáÌàÏuòR×ê±ëdåJ[dSãR±Î§<S#¬B¬?dÀnípÔ%dŒzH×ÔdÊÄØªÚ€LI…>·ØeÀngïßÂÝ1*è VÑWµÌ¢ÏD›ÚlþÄ"£D÷Yí2àŸSÙwwhÊH:“eä9ÞøC2•HR'mþê.³™²z[~WÌ,2L4ë'³¸Q¹]à ¬½”h endstream endobj 11 0 obj << /Length 422 /Filter /FlateDecode >> stream xÚ”Ír#! „ïósÞƒ ôƒÄóL*•KÞÿº ÆÆµ–“õaJþ,ºÕ¸9Ÿåœ†§×v~ÔÙ¸Yß‚£òùA‘FÊ5âvU6röÌÐe4+LuVבQ£¦çi!d], EˆA?•ÀîŒâ+iŒÊ"(Ü V5¨Ï3—¥õ:2 «HÐ2NµºN¶™€¿éÎèfܘ¼È`VHúPS{¯“g´1ÔÊp­â<­Œß1—µúd¿Bƒþ:={˜7¬­>äacM–ßÿ@e¥Ñµœ…Êøœ¢ºÌ¼Œù…=z¿×ñþŒ]Çÿ½—ný:¸6òÞÆ`».§¾SºÙ¶> stream xÚ…“MŽ#1…÷u ¯gø5ø<zÓ÷ßvUR–B§³ˆÐW`›Ç£35l.ù×3têí/Îà†ˆ ç¯}¿£p2â =Ž *ôHú {Ué`Bl;ódg ŸÕ5 À!n­GÀ˜‡7óv2É<Êš¬®hjtU[d´Î¾™ƒžaduE7Æãêˆ9E4 ï×Ý5।ȀÐõŠÔB¦¼MHQVßՑݬ8û¶¥…våy ÂÒ¦jUÌ÷®÷°ã¥…]s¸YN¬ L~ó™=ŽÏ™O뽓½òÍ ?‚Çñ{NQôµ]f#Ç#šÃý.éÍdÐeƒŠí l™#9pŠý‘euA%-zÚäfJ]gž"¿Ö¬¢š&S[ÖIVWË…£‰Ã]wWTS·ÓÀÓNcÙicC`zzÙ­ 73Iýi.©ê^‘Y]}WT¹Ÿ+¶¦68¿Z<—'ÍZPé¼f·M1ü™÷b©yA?{`¯þjÿþÿ‰Â endstream endobj 13 0 obj << /Length 593 /Filter /FlateDecode >> stream xÚm•KŽ$1D÷yŠ\ÔÈ€±ñyj4šÍÜ;íüHŦÛõÊ ª±ŸåÔvþ°ž ºøù›mĵ49E…vþË ÷F½Y°ÚȺ³¤ìs¤;}P5gŒÙ)â$sW¹OgTZ§2´#Š2ÿ 2Q¥ÂsßÍ>GFkr™Q†»mwWF¥’(5"7Üß =¼¦N'ôÅX¨Ï• Ææ¡H…"m»%£RÇ¥|¿¾U«¶À>L¾¾û#£Õ6{wût¢qÙûtØžÐ;¡Öøò'´Ý€ k3/•§jÅð'î³V˜Ô« ^ :¬÷Ð }#›•Ctê˜Sc\OACÍöLAXgý¬ÞI'ŠÉ3„Ͼa•kýÜb©ò¼Å_,~¾)£tËf/C­‘je/b–}A,då8:WÉÏãçø{þùuüãm¿ endstream endobj 14 0 obj << /Length 132 /Filter /FlateDecode >> stream xÚ…Ñ9 1 Ð^§PBh±ÇòyBšÜ¿'lEqaÄãðR;#£ÊÜê›xP3ò·"Ÿ _-©½P³bÚ€0)TüRšÝ$פ’«‹F´UÎK’}¦ÜäÉu˜ÈööRkNEÅý È“ß÷¿ÊÞ¼þÒoðÄÇ Þ5Ôe endstream endobj 15 0 obj << /Length 629 /Filter /FlateDecode >> stream xÚ•Kn%1Eço·dÀø³ž×jõ$ûŸöÅv}’BQgäœWPp¹¦L$å¤5}°$Ã?¦9ýæ·BÊbþ[&µ¡=}†´ ê uÙ§½_l™Ú¨9¬Sf«’X„r]I qÁ±妤E›yÉ$ž1 ê+ÂÈx±÷+¢Z+}‰.Ì;·åNV¼2ÔÐbõ¨§×£i×f)bºOˆhBµy=…YÙÅõX=4{Ò2xWÎÐÏ ³yôOfhŠnXÛs¨ƒ¬¡ü€–ÑËp%´goŽ!Ïa)Sö?D>™B¤Æ?“÷+zŠ÷ˆY0uÓ9­¼ˆ|BEÇ>–Œ©! Bk§ê&L¯ngPÙæûÏFd(OœŒPÎ,÷É^>û€gV+’g_ ±ei4<Ñ¡ÿ¶ìʳ‰†Ø'SÛ•7#É^ÑI¸0Õ¼¬À uÛÖ>e÷f]õ°µÙá f£Ò]ji}V‚»Pö»à—ÊòVB¤UÁgþŽ©r@U޽¡˜KfPo:\µŸ3ŠèÙº=d_¢£'ǩ♻`®Ëˆ¨r§> ]³š=H-ÛCßk–Í/–ÙÔ¯p¦>–«# Cm¥uÔ=‘hŸ¿Ã-ÿ¿ìýú{ÓM°ôWÅŸ!UxxÙNpsE—KÊÞUW¿{‡£ÂíØûðXŸ~â1¶Ç~ámýˆ2ÜØW0ÿÚæ7fF ЩǓޘTsºŒoÓ^WÙ6ów?éUo/û>]¢œ]?¡`K®Ïщ—rwŸÇåý€j){^ÛÆ½½fÀ¸Ém3#zMл÷y·áóÖF4œÀà ôç×ëò[ª\ endstream endobj 16 0 obj << /Length 370 /Filter /FlateDecode >> stream xÚm”9nÄ0 E{Âu€!¸JÔyirÿ6¤,XSqžÅíÙ&´á¦¼½ˆ7‹?&¸}R1èLî›Tß~–TÜ¡¶ÁÁ٣Њíe}’ÀUšHŽÈÚ<§x>ì0Œ_lÀ Öcî:g¼Ø^V”U Ze»3 Åš“Uè¡HN¾¢ä ‘½Å² ÞWŸl/+z1j8ǽ'»½ÿSV="`O-¸Wðö—åÞO*bÁVqjJ©“¯¨¸AŒì˜"¥ˆìè‚ÃêmÜ‹È^и^ÐÆ¶Ô¢ŽgöŠíeyûd.€”å†aÔáÑ^P:NÉ^DÐòiH†s‹¥dOš&o,†¡Q1TÂÓë'Tšw”ä¼·oÄÂô:Œ^À7oÀ8®]4a¨Ú%õŠR‹œaTJÉC@î Q¹ÙåÆOšÛèx1Íó5Qïs²˜{AµGtø£oë½|o_åPß® endstream endobj 17 0 obj << /Length 400 /Filter /FlateDecode >> stream xÚ“And! D÷œ‚õH±°±9ÏEÙäþÛ)ýÓ™¶4³ë~Œ«\6žµU•úÆR L[ýÍE]¨yò0j}DÔÏ”Z ò¹~qÇשn)»JF{ua°1(fR»™²X'Û¯]%:‚†  7fr”“P’†sOì*åî4í'ñƨX}œÊWyeŠãÚÕw XàOH̲ZÃÍÞH£“Ä’3'1¬ˆÚͺJþ Š`B‡É˜Ç”oµ Õ0ûy»›÷í¸)…­÷`tB‘‹3luH^ZÀÆéQðu©Z·3ÊÚ¿ÙUò“èBvä óŽõ¶4„£h•¥“o]ÐPQ§eE«³2뇯ÄÝh%ä*?ù4Ž#Œ(/“–ßÕ;Ë(ôb4c)É–çJWêÙU>pž6µéÉñgJÕ㬚}ä¢#i²£9û Œ*&òåÂZEÙk,HÃß ^&TThngž:;+:å^ôŒ²÷3E¤ãá5X|±[áJÐ+ͽxep³¾ÿ*SÖü= endstream endobj 18 0 obj << /Length 586 /Filter /FlateDecode >> stream xÚ•M’Ý „÷>…ש² !‰Ÿó8•Êfî¿M cã7PIfÅ| hµdÓ¼‡]y?"‡ÝðŸIØòf•B.÷C”¸d û× F6*±1Š—ìÜÖ;+eQ)ûQYŠžQ„J ûjèˆ^Ј<ŠDˆæ`¤©¥¬XaŸ½!âWX´ãÌð³Q-×*‰U¬ÎmE¥*åB)8Ó $ý•J©itn+ª¡RÊíö’ qö`…bžû½ˆôK-ÐGä E ±ë° þ•¤¾ ÄšC©Úä»I)äÏh i‹s›™2F]w6Ü>xPL±#\u†’Éší2zZäMÜKn+Ê)‘µ{ÂÏäÊðoNžq0ëLÅPlóK ¦\HS5Ê5µ³Wt0Ãê2õн£5M]Ä¿³sûÇλÇè#vÞwHé‚ãnO_­¨qêpp¬Ý=ŠV‰MÛƒ!éµÄ³WØkW{3&¯¼‹žÚÏXߪ/°äpß³¬ë*!Pnõ{Ató s*½êoÈÒíqp²Ç5K ‹_m B,ƒÙ}$œá@*·÷æi{®Fðÿ¡sû½¹°©u„XWw}-é`ˆîñæÔåÓ€óÕ}+Ñ W)BÂm.GÒf•Á|,ÏT4vQ^,gòNd×ó¡—¯ówÏt¨öbº~J½?f :*æ3þ®Ý\Yø`ÿõcûþ Šý endstream endobj 19 0 obj << /Length 139 /Filter /FlateDecode >> stream xÚÐ1Ã0ÐS0w@@K çqTuéý׺CbªP·,ë‰/}¬¼"£k¿´?]Ü\ÈCÔÐ"(ܘñYáA.F¡ýYQƒ•ƒÖ¸]ã‡5˜OŽ2•åtQ{J þ›+£fâ÷É?¸ÓˆJ-j%å"¦½¦öñÅä^å,9y*üúêx¿À å*t] endstream endobj 20 0 obj << /Length 94 /Filter /FlateDecode >> stream xڅα €@àݧpnµ.½ç¹ˆ–Þ͆"ð*ùùPø•+2šÆÒˆ&3.&d.Z‰ÏÁ=Ó &…\#ö¨A•ªO£ÿXƒïË«J–çg*ü 6\8‰—4ç endstream endobj 21 0 obj << /Length 488 /Filter /FlateDecode >> stream xÚ…•»®Û0 †w?…ç„x“¨çñAѥᅱ´%[A˜4C |à/ŠWÉ^öJþg~T.ûnAIwE­¤eÿ›A´Ý„í?ìØ¾[Š4hZJÎVõCIL{ÜÈÈâe,jyeÇ–Qî„ÐV&\¡\–­ú+]Qiqpu ‹u·ëÜôåå]<Þj­,à‹ïŒz$ÀqÑrOUêÕ^ãÎhC|‹Û/7kaƒÒ ÙÕm½Œc°^ü=†ÊYO¯ÏP[F½ÁÀ]G.ŠŽhÆìý%ñZW'ôa~sü²*'s×P0|}&ž«/VžCà3ÖŒ­ÚÌ’œUïš«c9ºbzNhUÏ.žÙ#5¬(³Ónæê„ª)H¸\Y½ëáÕlxU)£ÊµE‡x$€Ñ(1H4ÝÎZbBPE'&š½}3òI¼fÉÕ }جÂ;Y•“ù#Æé3ñ=ðÅŠL ÂÏÙªÍ,Yû¬am3{†cv]PöÜó©‘2«Í"cVÄë:§!£LôÚ+wÙïóµtHF©ù¸öéÃäÞTÅîg”¨@»jÜðܬûéšX5°s?¹:¡Ø ‡o¦:¶èÃHº^¾3ú°YÃw²*ïiž¯àØ>Û<߬ÛŸý÷¯íàåhB endstream endobj 22 0 obj << /Length 331 /Filter /FlateDecode >> stream xÚ}”=ŽÄ0…ûœ"õÈüÙø‚5ÌCP–8"!}9Îh1W'”Lg½¦ 8,½/…-º:£D}ÎÍ'À®F=™Ê{â¥bP0|¢²fn~aòŒ.Vn~ë¤ï¬h£ÍGplÏ9}Äà3t.ˆÝæn|fÇö9S„€ÇÙgìª^”j,1-‰€Æ„¹ú¾Œ_,6ëNTF7‹)½ò¡ŽÍʨX‡vÖã[}v£Å÷…‡OsE;ÕU2àøKï¦ÎÝPÖ÷ö¿*suB×w¦Ï…Í­Îèý«r'Çö»ÿ|mÿPæåp endstream endobj 23 0 obj << /Length 370 /Filter /FlateDecode >> stream xÚ}“MnÄ …÷œ‚u¥ZþÃÀyRUÝÌý·5„Ži‹f6“|$¶ŸßK©%cVÌïĹøMÌ”ÕZËl†]Z~œà‰(tk^¡ TQ?“Þ 3ùá•°‚Î+5†ÖÑ8“u /â#uƒR›Ou¥eAèEÆÔ~ÅŽJ¯èÿˆ»Ò‰*+Œ‹ù€ã—µ´2ä]éD}OÀ8zKu 2& ƆàÄßð·4©€«žº:°“l¬Þ;;@e Ý/‚:–âªÐ4#ØPýŸ²ØRŒ*¯ç¡à=ö†[…—•OO‰Üû¦òËè€ÏŒo‹çIº^Æë%ºÒW¢†kG\úrôq¤Á¨ñJSý9UšÒ«W=QöŒ¨:ÉèRïÜÙ¬ìÎÝ_*F £äÎz…ºò½OTýÙþ˜<ØH¯Üh0ñÜ^F—HòÞ;hL®Ô@ç— ƒíºƒÆÖ6öÜîÞûDñ˜üä¬ç ¾¥o”kî® endstream endobj 24 0 obj << /Length 516 /Filter /FlateDecode >> stream xÚm•IŽÜ0 E÷>…Öšà¨á<ÙäþÛ’Ü2Ú\ ?ÙÉÿ©2ì Kù".æ&X~ÓÅ*Ͱ6&$å_©be_õÉ8eŸ+sÀ`ê½;óM+4*´N±ÂdÁü넲çSgÄÞ@çÇÜFíÍú\ 6`Œ2Ô¹`…1ëü\•†à™ ÷*éO¦‘Þü:¡f¨ÏˆA,âDGô>;¡bijc– EHAW?½Œóë„’ö‡Yï,Pç.›‚„Ñï„*ƒvõtØÅøÄ{¼òú\ üFþÛ«aЦþ‘S$ÀÈyyÄ­ <=ÀÞ™ØÄs*µí¦Ô·’êç-ý<넪kµóñØ÷®Ç‘YÞÀ­tFC¿íöÕØÞÏØRúõ¦;Ϧód¸ú³Âd¾§dâFÝwëšÚSÂUv/‹®½)ûŒ­×ͨÛÎG©~»,£gª]Ïjõ9éÒ;Ô«¸ÞôÁš{pVCݧg¬þÈŽg¿)#ïºÏ¤ÑÞ±_µÆ|¼©wy[Ðõ³®ª[öÕ}eÔ°A,¦«í®FÕ3Û^Ëèan¥N-êÖ¿M5ãµ8ù O󾢨¨åqö¼ ¥Z£‚'óñç9J®ÿZ¬;áüžk—Š×¹ïÿˆÏõ·üùuý"E=Á endstream endobj 25 0 obj << /Length 332 /Filter /FlateDecode >> stream xÚ…”KnÃ0 D÷>…ÖBÔ:OŠ¢›Þ[JVL¡b\oâ;¾XOGºÝÏÙûÌü/¬~Z 2w¢ÊÙª¢+/†4Üëy픪®?ú,,噫®5ïÌò¥øŠé²>=©r‡RAzx!ól& ™ôÍ R õ“TáΪq?'"„˜› ‰ºÀ6Ì:ðBöš:h‘Ô}RíéFoêl0´H ^FnÑbØ©+: çh;h‘´á«zl¥÷sÙ:º^¥™ñتö>Y÷ìy|‡¯ãe ý“ endstream endobj 26 0 obj << /Length 341 /Filter /FlateDecode >> stream xÚ…”;nÄ0 D{Bu€üˆúœGA&÷oCjí•3Wôƒ†¦‡ck¡Œ¹ŽüNœÕn”Fþ TH‡4ÍèWþØ&­A-X%B3PzVµr– dÈ éPY­/10ŠM4Sy0”^¤ÛкõåBÀ«Úl¦ˆRï0ê/VõÞ†X¼õL$T IWbî døôM¡.2ÓÕ6°?‰Ú!Üh xáÊ>‘Ru+"t‘nÈXWõš™Q/OrGàN¬!»ª£“ÔÜ cƒc—¥>}Ž(36‘UÚº¯Ý—¹@h&Úæú¹â_”ë¹0KJ{ŒcÕ#³OdÚ;¶&þþ¤ÆŠYñp,¢Ò\bS ¬mÈÓ‡¦hAqóVDߌÇ8zÛçÐÍö#vUoªÁs­ÿ°™^Ÿ< wrUÞ“™¾òç[úëþäè endstream endobj 27 0 obj [ 533 718 672 621 618 590 522 531 519 547 209 209 824 543 575 508 321 541 ] endobj 28 0 obj << /four 9 0 R /A 10 0 R /D 11 0 R /P 12 0 R /S 13 0 R /T 14 0 R /a 15 0 R /c 16 0 R /e 17 0 R /g 18 0 R /i 19 0 R /l 20 0 R /m 21 0 R /n 22 0 R /o 23 0 R /s 24 0 R /t 25 0 R /u 26 0 R >> endobj 29 0 obj << /Type /Encoding /Differences [ 0 /four /A /D /P /S /T /a /c /e /g /i /l /m /n /o /s /t /u ] >> endobj 30 0 obj << /Type /Font /Subtype /Type3 /Name /Fo0S0 /FirstChar 0 /LastChar 17 /Widths 27 0 R /CharProcs 28 0 R /FontBBox [0 -210 824 728] /FontMatrix [0.001 0 0 0.001 0 0] /Encoding 29 0 R >> endobj 31 0 obj << /Length 189 /Filter /FlateDecode >> stream xÚ}‘1à E÷œÂs%,0`Ÿ'UÕ¥÷_k¢¦©&xòÃæs²B š q‚ݱ˜±õ{a‹^gôá°xéu†ÖeÌ›Ý%[—ëÊ}”3ù5ÏU©VF3¡9k\*”ÌÑÀ†;¡Pg—–ÃF.,Ú†.5‹"ApÛý¶P[&ºg8a‘Ø„Â6f¢äàî[÷¬{a³cø E霥 ˜êçi(Æm á'´ûÿí‡õ¤ÇmyûÙpÙ endstream endobj 32 0 obj << /Length 92 /Filter /FlateDecode >> stream xÚ3´4T0P†@ÒÐÀ@!ÅËÒ@ÏÂÈÂÐHÁ@Ïr1…à@=z–Ææ¦Ø„’¹°Å, -,ˆ%sáW s ¦²N ãHæÊPHÓâMŒ4† endstream endobj 33 0 obj << /Length 236 /Filter /FlateDecode >> stream xÚ’Án!E÷~ë&PTøžiš·éÿo‹/§Éð¦uç W/X ´Bf)À~klðÉIu4"V”V¹Àw_¨9j½4ŠÐ‘Èά;ýƒé¾r™‰Ø®lߢ#ý¯.”>–˜æÙ<Ñ 09²ê.´YpõuÏö¢ÊÓÊ•ìÊkUn yø¸Š?JÕýÚ€²ù}áJE’>å4PÊ|È·±Ÿú«‹Ø7ÀÉ™aÀ<±€2êôÙ‡=/rv]æÊu`¡9Ý,òÛWÅþ a íÂÞ}©ðõ‘~µV°I endstream endobj 34 0 obj << /Length 242 /Filter /FlateDecode >> stream xÚ…Ò=ŽD!àžSXo2P~<›Í6sÿvÑÍT’™W¼à5€˜E£öàüY†ÎÖ¾ŒÃµÒþÚó&ñŽ£»RR –ÒTšK1z|°•fª8´gôÊæ–·©j–odÁmÃ鈰¡ÏU¶ RNó¾+xo *Y4“x%sÁ‚‹®×º`Áç=Å¡_R$?¯=;ÎÓßg©cd5zfå­e× í95ÿScÏOe{BŠ=pùÂ!¨¬–7Š ØŽlÚiXž.´S Îœ¼¦Î¸ËÒ&ÑÑÎÝJ™#åÎ=Û…V½¨,»Ù~¾à‰ª­& endstream endobj 35 0 obj << /Length 461 /Filter /FlateDecode >> stream xÚm”1Î1…û9…ëHA€Ûç™_QšÜ¿ÍÃëÝ)–-Vžol ïÁÄì›sû-ÚCgû‘Ëç ¹8´©3­i}¶%©xä¦:ˆ-fÍî«ÜéJS'.aê¾ч“õ¤l|y_´5O$OÊ¬Ï í™×Ãî«¢:˜\µ©§>8Z@éNº/  N™UŒd¯bÚ‰|_UD\1Ýqêí¨mlÑ–BS[N²m˜Ç> stream xÚ…”M²Ü „÷>…×Y¨úƒó8•Ê&÷ߦ…±Šyóf1Å|ƒ@jµpï{Ù#ðåXûþ“·bój{¡’ŸýÏÝ Ø¨ÕÆu…Žm¥ …¨´oر­¨– ú?3&n`Å(¯+ˆ^QãJQ1Þ™´dff>stSªÝql+ê}®Š“Ú8G µ0H‚ŸÔ[fvl+êÞ¨µ ËÃÿaâL¨ed¾¢«­P–Ì´S5TŽÉòî7uA>Ö‘?Õ¦©³PŠ2¢Ô‚g 14øyË®J—ÈØ„¤£üª¤5»¡„ÿÊ9ëhF6ë¡2N»L'8ÿTý"ðÈ‹}íÕ'êû=‹ ßì4ÛÚPc‰ÙX@A±§Í>¡4ø{_·é)J> stream xÚÒ1à Ðݧ`î`aÀ6œ‡ªêÒû¯) HqÝfˆ¢§ÿ#“X(‡´›ŒG% wmH±å"Æy…וNPb¬©R²¨ƒÜ¥*ÇÖÁOJ&Ì%+›¶·—’æã=¾uð“…Òq.ËööR–ö—ÉÝdN)ñø –íí¥kßöÉ­d-Xæ7µhïž8Ö §°KÜÜg鮲/«ù:<Ãão2]” endstream endobj 38 0 obj << /Length 152 /Filter /FlateDecode >> stream xÚ…ÒK ! à}Nẋ`¢yÌy,¥›Þ[§Ð*Lª.$|懠ŠJÊɹoÒK#MwgÌ…¸a>Wz]éF‚ÎNQƒE+Å$o¬ÁºS a©½ mN%S4å5XwÖ| ¹‡6§‡ 1Úyë“/; ò§ŠlNó¬mž<êü>ÿUæäå“ü…Ïô¸Á7|¬ endstream endobj 39 0 obj << /Length 95 /Filter /FlateDecode >> stream xÚ…Î1 €0 Ð=§ÈìšÄ¶¿ç©ˆ‹÷_­ƒ"´j†?ðàÀÅÛÒvfM¼(K1 çðÞÓ Y£À 6¢JTd)˜?Vé;yUéåùÙ~…J¯±f5( endstream endobj 40 0 obj << /Length 113 /Filter /FlateDecode >> stream xÚ…Ð=€0àS0; RêyjŒ‹÷_ýIlš´Vòò…·`*ÈèáZvE—ˆ«€Rcfdâ{ðh©€‹QÒ$Ú£ ”è´ÄäöcÆ—i¦ù ª»M™L,ê2 ïÞ´R›7}B†· NGÌK¤ endstream endobj 41 0 obj << /Length 240 /Filter /FlateDecode >> stream xÚ…Ó½ŽÃ à§`¾Á² þáy¨N]úþë™ô®Iå2DÖ'ì€ML,c¶:^i¾Q² Ln’p<ù1Ó ŒœxE=-IÁšºÿc=­´¸—Z<3:4ÑÊzZiÅj©8Œa®ŒPQY2a,QO+­…!$ŽO•[‰sUq£%Læ¿Ù Unà-J^N³²žVóòŒ¶-ß®| p’k柩* ‰î$ö»Y%­=[Ù5÷Ôѽ÷z³<{ünÅd h#q/&#cÂ÷#¦úÁzÚ¯œë_íó?ufÝó÷Wúw³ endstream endobj 42 0 obj << /Length 155 /Filter /FlateDecode >> stream xÚ…Ò;à ÐSxî`aÀŸœ‡¨êÒû¯%•h¢b²žüAR"DPi—´PI`§ ‚¤dãqà=Ò”-%jp4c.YùÆj𔈙G ÎhßȳÖ™^ÇëlOÛŽJ”tc5¬3ûG¹Vvã’pk[˜ËñÞ#Ñž/ yjmÏË̱ß9u´ùO9«^ð|„„‚y* endstream endobj 43 0 obj << /Length 344 /Filter /FlateDecode >> stream xÚ…“Kn„0 †÷9ë.,'~…óPUÝÌý·µ ‘p(úâ·ÿhã3ÿ©­êò]‹TÑ& Æ·¼îè ¬ ôÖkËÐVHìÌjïØV2ʵ E¾‹‰z/ ;¬©»wFÅO¶jDD„†G˜ÉÜNM B‹{gTº·o‘Q¡û¥ßb="*ê᱕Œj£3Ž6ÀËÌÞ•¹wB/ÆÕ€÷nT€[̇„Á;ÅÈQA³jk=r“¸zó™'Ôwptû̶òlyŠçNfÏ›Äþ[ùl“8ýNÉ|3Ç0_)%Ñ:Ö÷ÌbpwÊìë£ás±nÐÆJWÐQ›‹5¡Ò䨇™ ‡Š&&è'YGîŒNÌŪ 9Ññ ¤70Ý—–Qv©ï2ÐÊ`CDQØ^Ý{š庞¢§ 4*1îðb1µ;½öðÌfÑd–×Ì3æ:X~¾ÊƇøl endstream endobj 44 0 obj << /Length 542 /Filter /FlateDecode >> stream xÚ”;Žä0 DsŸBñMˆ:‹Mæþé’²üÙ1ƒIêgH¢ªŠTÂR õòa)ê´ò7ÁÒ¸Ö¢¾,_c`³ÒâSS ¡)¬ í[;tÓ>Ì Š~HÆ|sB¥ ´NÝʧ)X3l…yk¬z[÷-¤†Í½è¬öøhtÄCn¶om&K…« Œ®Hét•@lÔbe¸tsÅu©E „ ¹H F°ÒæêBF ?ö-"é`SH¿`„¤®Y…P‡[¿Ã(ø8Dº‚®ÇÚ²P\¬£¯}Óf®@é±²S ¿E\,„~S2ã8çf,ÄQ…¸‚=J *DP§Ââò·ùšHëa'“§"\ôÝUÕáùÙž•ù†“uv—Þ½YÓ uV®µžžŽ±ªõÝ í+Ðõß­·§ýø#´o7BŒrýf]Ú¥”†ûyÄW] }üuKglãö!¡â+›«Vy©{³§’½CŸw‹kÖ§#ü˜0eW9«¼Z•}˜œš"Ô9¼ò„’7PlqæïZMeçØ¹Y¤÷M›Õ3u7óÊYéÊ@F݃eW„ñ=û=£7óY-Lwõè1©¯tF×¾iS[.‹­è?x¢ÿ^}BÿYq¿‘wä1U|Ø Jcë1éeNšî×àÑW'Ľošæ6ažüòç×öõ\Z2 endstream endobj 45 0 obj << /Length 679 /Filter /FlateDecode >> stream xÚm–Ë’d' D÷õ¬1 ôâñ=åpÌÆÿ¿u¢n{J;úp)RRJtc/µ˜—_,¥á.£üÍ/3šÂc‘Is˜ŽòoYd°xíÔg9{¿Ò/­R¯µð0ªÛ…›Òú Ì&5Çþ:P*cY˜D—Q'ë^¦†Ä÷+‚ûZ_±t¡µ¨9õªðAïWu"øº|“m4 ŸûÖÚ8ÊÕB‰W%ÞJX•Öæº7£.J+ ä 1ñúíŸlé§ú0‘A+$ßw=â÷¾s÷ŸÔ¯u§û ]…,¦“ÌWndz„аjŒ:o½ZÛ]±P­;¡ZIùÄQa»Õ-v¹Ã[v‚Á% eò?«u˜ý C®ÅˆËZ!|Ž >È¡¯ïÕû•À!s0{_5×È{S ·CsBWÍO‡´>I¶ÿx ø‘Z=&˨8Ó ±·Ò*è>^*†l'Ôêí´¬!që»*¤Ë«Ò uñXµÞ"îƒx+kÒB\–PŸ5êç½ïà†›I¶`8P‡Šãp¯=<š±åðojp+ïYäðÎɹùÍ.2û4vB‡7LIœøÅ‡­œS1¡U†ÿ±ú¹…õS±Œ®ÙèÛ7›ºíÉú0L[¾nIèÃlޏ›ç]†Ž:q-¯}S¸ç3±Ú3XõºÊÐ{ש5Ìò3]u6²= Ž>“Yûã–Œº{L'ÅÝ1W·í]]Sìz-¡ ¾9ÊÅg8õCž¯×2ú0Æ q^!Çt?Áеx{èˆúL6»blÜVÃKvꋘ¿¡Ém*¼×aRõJu·áÃî„ Œ;·í¶Q9´íˆ¾*ý YøÚÄ¢wÆ-(c°Þž@k¡žÑòÑXßÿI¼_¿Ë?½þž§q endstream endobj 46 0 obj << /Length 179 /Filter /FlateDecode >> stream xÚ…ÑKŠ н§pÝEÈÇ|<¥tÓûo[˜i1PA'IŒ1ûÈmyr²~¥ÆAà2$:îÕ… ‰Æ¤yÍ…¬v¡ÁWüa«UÊ“aZ¸vš ¾¥­V©džñÊH"Ào5ÞU ³`(Ü"2ÖQò5bhìþ>+WšÉ@_ÿößKe«UšÃŠïŸ¨lµJ%{ØCпْ¯>ìœù)«ÝûíÒž­pý endstream endobj 47 0 obj << /Length 690 /Filter /FlateDecode >> stream xÚ–IŽÜ0 E÷>…×Bˆƒ¦ó8²éûoó%Qe7ÌYYõlJ>©Êlg:µœ?YÎŒYÓù‹KFÒKkgQ³æó+‚š3Ù\‰øB9ùW™´æ”Îëx3)™ØRœÌTynÁêoove©Ô|°&””$_\Ç›iñc+ìÚ7ÂXíCx£j4,’µƒOÅ㻎ÖDu.D«¯z£¶‘ 5Á~0 K¡žáú)5û[.Bœºb¿–©L§®#¢pœz³Á:ê³V†ZèbístDÕ H d9¯üõ²K/ÝÏCºª½nEX%F¿±ŒÒØÊXDof)S-ÑhÂþê_§·°¨êΤåJ™‡µÔ­Ð›!î€ Ôj3ç7ã–¨#¥øN³+9(gv½¥é£î2ˆáY÷ŠÆâÁ&*3‘‚ÊÞõ_µ6Ù¾´N 3¸þÑv™¡òé‰u¥±/X©®˜Œê¯ê•½©psg0=HæÉCƒ<÷¹²PE(«~/Væ0“ÜŸ¡“755Ê#XxÞ½Ç-›kÐÐ3:c½ŽˆZUcã]}ήzXÔÍÊäíÙƒÁ3ó¬EôfÂÕãŽØÓ:ú²›‹ÞúrQ‡àËœ¼4´Vš)C¯.dÌØ2;s2-Ë73a煮øþ*5×9Ôÿ¾J®è~ù?t#HJòH¿Bª†%sÌbèùÕ3¦¶Œ`>îÁQ†Ìį«î#“+Úgî-©ŠQÎÛù±Ïj96 ½q›=† ¬Ê(Ø÷°0íÞ\°èƒ!…«4xCy®pÈêB¿!7õó0=yPòšs„Œ½á£ç7R1½öOP‹ù`á´‡„âN_·/nãy#ë0è]{.º¬ è£iŸ¿  •0hïüýãø JàÍ endstream endobj 48 0 obj << /Length 408 /Filter /FlateDecode >> stream xÚ”ÍŽÝ …÷y Ö•ÆÂ¿Àó¤ͦï¿í„ävÂ5›Àvl;Ξr O,ɱ)é7olA-jÁ)åþ¤? N¦Åó{°oïïvªRñáz1¼!»’ŽÕÏlß~¾i‘É\ß°Wë›J®ÔªiM®™ú¡'iˆ1V7Û·US’ðWV}zä|®ömEM*î•·ÆTrÇ;ýIöín­ì¾†å±“Pê¡ÍùúNoÆÑ¨!¡š¸0éГÑ6¢YPa9•G»õR ŠÃõ…P¿'Tƒ;–Ð¥£3ýT}EM|2X‡½7™x£2f²/èͽpÌaŸŠCaË¢9¯¨šQÑ15^ÏS©eFv±žõ“Š´9sƒ“e¬æ?bAoµÔÁÆ?`¥*z }þÚþôVþ endstream endobj 49 0 obj << /Length 385 /Filter /FlateDecode >> stream xÚm”Í®ã0…÷y ¯G*â׆çÉÕÕlæý·ƒ]'©Tvîg œ®5líEÜ4˜`û¡CQ£»7ò€aØþ•Tak4|Ÿ*veäè`³N ñ¦äÀ(Ù88Í»Ìý† ¾2^D»…À¬÷ÁΣ¢ÔÔfÁ†) ±Ùإϣ€€«gâº\¸g”pv˜©¼‘(,½ƒÏîÚãîy0†è4¨˜Å²a#è¸L‹tt±ì¸ ŒSÎïl²>ò°iÖ7}¬~˜’ìÉ©0}÷]ѧ_U_>¨3(SÞJJåkC *Ñ!õÏ“ ̨ٴ»ˆôt­Û2Òn5×DUÒ)Z3» Â|1s@šux\ ø°éÚ7eJ5kíF¯ÁîÛœXA‰cÏAzvñ~u7ãœÈ[Wfôad—nê±Ý%ûAdvA“-';î!òˆv£©ú ÌLü@y’ùLZð½f”°Ë%Ö=¿êç<þ¶ß?Çm ë< endstream endobj 50 0 obj << /Length 421 /Filter /FlateDecode >> stream xÚ”MŽä …÷9ë‘Úò?pžzÓ÷ߎ!¤È(îÖdSÔ—ž´iÁ"Z>ˆ‹ÆŸJ^~Ó¡È *Õ ާ|%l7¿)z @!¶X™ R‹—l„[(Ùìud”ºÁ(Æ;SYŒÔbÅ ì´ˆ9¸¢sq†ýUèL­EeEa¬¨vàP/±5¨ÝgißHÄAçl.úÐ!½ƒ[ ǪOØ úimHj}&©às:íVÛÙkB©õÕ¶ ÂpqØ,KÂfÃæ'ŒÑÔcÑÀaÅÁf¢å„J°¹ÅÚqm’„²ˆ™´¢áMŸ£¨Nèf• Ú @ÆîÕ›j“åÕÏ,²ùã—ï¤?Ƚòy¾'¯ã¾Êê>b£HÅ-Y_)ÝŒ¬_©u_;CØ¡Y¤j¤&¡Œm±È£é˜ãäŽ`ÞPdæ …Øþ)¿r@XßIϨb8:Ï&™ByÛŒ@ý¼2º™Ä•q¦QÆ1žŽh¬Rñ¼2*L׊Q½üôërÙltý¤qM'6#¿ô(îžÑ½[s/’] ”?¿Ž¿c½ÿ endstream endobj 51 0 obj << /Length 410 /Filter /FlateDecode >> stream xÚ”KŽ1 D÷} ­ Á¯>çé ˜Mî¿MI­q7bb0^ÉÏ"E‹‰ÂÅZù-/a\~ËáÊ4¸j©x~Êß”†5é ,‚Zj);Œú`Rsë¥UüÚ‹›’h 5ºîŸG­9±¢ö¯ÄÚ*ü`ç‘Q©ƒ†Î÷ŒeA‰N(j'Ð*ÕU‹h'_I^HéOšÀ² b (ì[JÇ ,±b3 }ÈVL‰´ÏÞµuš~0tœPëúÆÜ;µ%¿Ç ¯[섆8MfžNuMêfZ‘qu3ÇüN,”¦ˆ“‹A•«²+ú*ÚvÌ÷ ªe7á›íÂvЯ­Á5¨¿Í脪ŒmP4ТÃd(qÙé…¦ÇÞ ááXƒ»Q­Û‰ÿX…N›¼Ag¦~U w^ÕgËw¦+ùSvŸÇ­Žñ žícÑ3 £ïš¾g³¦ä¦Ôíâ¹·—,·“œÛVr$ÔüK¢{´=­çÞdôžás—ålx¦_ogTशÿqêvE¦Ô,~ÿ-= endstream endobj 52 0 obj << /Length 299 /Filter /FlateDecode >> stream xÚ}”AnÄ0E÷>…×] ÀÆà󤪺éý·Ån&v&‘Y/|üÄ…JÆÜý.¾R¶üIÉt&³Œ€ãÊ?wt*Œ…8BG `6by$Gz%d ²t‹]Ñf5ŠÓZj±íÒ{œ'‚nõdêi›_L¿wHh`çfR›g¡Š`ó­b%)¢¤ &Ý÷óqÂèœd.žFecGŠ(7‰6æ9u%oïYsD¹w¯¦ò™'b¾w©}úiUOgì«¿Y,æê€2:#]»u„ÑHÏèµ¾ZQÒúòCåü„“Ö N…«º±ëÛ‰Ø?õEYÊœ÷3óº#ׯ±]½èòóÌvçQäë\¸“]y;=Þ‚#}ç¯ô p9ä; endstream endobj 53 0 obj << /Length 557 /Filter /FlateDecode >> stream xÚ”K’Ü †÷>ëTY%¡pžžJe3÷ßFÜ8c&I¯Ü ×/IjK˜8§3&ñʘ>蕲b:%C³Z4}î ±‚t¦ V¨Ö-{Û›‚`ÓÙü”ºES@1?=‰rxŒç;L­@6‰ý™rÊ*À -ßáëØb&á¢`©`2nÞ"Øb®5,¤³V¨LâÆ 6ê$ÐòÈGñSì§ÜÒdeŒÇÈ®Áˆãç‰på"‘õWF®¢tïi5,¥R€z‚¯ãÉØÝ¹%Í ™[(ñFÙükÖy߈٦om€%ìGf4[d«BëúˆÑ,¹‘¦aWšÆqo¯'õ~‚Vñwõ,Vd¶Ø(ÓWºô^L°ÎœÄ_ Á^ÇŽ.¦.­~Ëî¯o7kƒljÿbþú¯7‹÷}ƒîo7÷NE(#iÐ^ГÖënS°“ÔGÃ/¸ìÕeïëÂÛœ€"Êè”ff@êøJÑk¤ë˜“ÇH?0yÛ†Û;D™p’Õ÷NØb)3ì“òê©Çæ{íÖáÿ¡×ñë œ§ZÙ.Ý>·t12Cl> stream xÚ…“1rÄ0E{Bu Bâ<ÚɤÉýÛ ¯×–ÇìÆ…Í<â’Þ3fU‰›4?(i+4Î'ÿÞÑUè¥S‰ÐH¤Êàߊÿ°‘>{Jí`]¸‡l>iñ<¼å©Œ0š °]ÙHeUhÈ&îGm*¬Ø ê÷Æ×Ý.ž{.^vû¤'{MáNÖÈÛU~ FúÉß_éÖÎ endstream endobj 55 0 obj << /Length 137 /Filter /FlateDecode >> stream xÚÐ1Ã0ÐS0w@`LÏã*êÒû¯aIl%Ôíb¡'?ˆVd4‹G¢lbø0£ÊVM*5efüdxR%/.%£ ÆoTžæþÃ:¬;G˜Ìæé$ö’:üח޾Ç0óå‚ â¤Q¤48öZÛ|¬óˆr—yòø+Äê¸=`¿Õs” endstream endobj 56 0 obj << /Length 258 /Filter /FlateDecode >> stream xÚ“AŽ!E÷žÂõ$@A=ÉlúþÛFSSe't¥wÔÂçC‘äˆ1‰ #Ùg% *PrŒJªŠr|zðD•7rÑ´nWtÏF¸Ï¼Äxl¯vdߢ¾ËsKÿB*•ÅÜEªÔš¹èâĸ댈ж*>áC.ô¥!QÎÇ310f|cæ‡Cs‡©è­Z,O'3×ÿ›{ôœ?õ sü™ÂàîæO$Ô@–m¥¼özÏö ð2·#òØ^íf˜vŠÙÝ ðÚ&)Ál³º{¸+LëpýxPdîƒm…+ØØµ¦P­i~ƒÞ]ÙÆßŸðÂÚÀ¥ endstream endobj 57 0 obj << /Length 95 /Filter /FlateDecode >> stream xÚ…Î1 €0 Ð=§Èìú[“¦ç©ˆ‹÷_­ƒ"´j†?ð¡‘ÛÜÚ™a¼€,I1ÏÊAÂ9¼÷tC†ŠGGQ¥B!®%ùUúN^Uzy~v…_¡ÒÆëD·Ð51 endstream endobj 58 0 obj << /Length 466 /Filter /FlateDecode >> stream xÚ…•=’Û0 …{Bu Aüò<ÊdÒìýÛ)Ê¢#¬ãÂÃùÌGx²iÛË®_K¡²ÿÆMZE÷½@éŸýë‰^@ÐA´JŠŽ-È BXå?ìØ>ïd°¦qvÆVõ²SZ‡;;·¢u¯¥«[<¥s¤Pg4ž?¯‚êýl*¦QÛÂŽ-£$ Èä]Ý*1EŠB,l¨ÊD€¥c¯À£§ÌQSœÈÕŽ{[F%nóo=Z8 o•gT]@¸÷ïfV£+ƒ±ÛüõØ2jzyÇáˆwùÂHd:ê„Þìêý“¬ÊW@;ú@â¶vQUÐ±ÊØªMwZ¸=ò¥VAOçJ1wͨ*C9;U#±gïAÚ™€}1êN¨bìÖí,<³"îà#s7;¶Œ ŪÅqóËM4°þsÏWBYqÎ9EfboÓPGúBЛ].<ɪ¼YôkLøÏ$¦éÃ."½ªIتMw¶˜‹nwäµÎ´sŒãùþÊ(^¿ú\c¢Ïy_]Êh7Y?æMz²ððÊWF1Nœj”é!ªAï92žùÊ( ½îÐÀ‡Ç7«Ú扡NèÍ.ždU>þh~Çöwÿókû±%O÷ endstream endobj 59 0 obj << /Length 317 /Filter /FlateDecode >> stream xÚ…”KnÅ E笂qþ^OžªNºÿi äWÅ¯Í ²N|ë‹"½å’kõ—x©\ò SU0ÂÞs2žüýD'Pì •4D[ ŠBA¯ÿa[ú»SD SG Ù]}Q*éð iftSsí‹m)¢¬ŒÛofˆ…‡C™^]Pa•:*ÿªmœGÔϸªj»bK•&P‹Jº•á«Ó±v «sïˆzºÀ8Üp³S}2Ÿn76ÕOz±#þ'¹+ÆfûIÞ“1«÷]Œ 2'±»6ìôé¡ ¯ÜmÏMÁ»ÖÎåÖaŒÇ]ë˜8+A›i{gJeªP犢8ó"CÐ5µ“m)¢ä7díx149îŠç!Êën•¡¯äü¬êbÔ¨ìê€^ìHáIîÊÇà-ØÒWþüH?ë´Ú endstream endobj 60 0 obj << /Length 353 /Filter /FlateDecode >> stream xÚ}“In! D÷œ‚u¤oyd8OGQ6¹ÿ6†nQ¬¿£Øåj£ž1‹äq6ÿ0ÁüIIÅ[nÄ–"¸¢€ –‰äÙÔÊP¬øêJ¥†@•Z·>»\ H5ă])¢Ò¼c/ªÕèé¨eWЍ¿PGµtW¡XNÆ¥@Á.Í«#º9s]®L›3²"™°ƒ«qæwT­Ao:û@^¸}ô´fœç§îÿPTe”¾Èk©ÕÓ²ÍNË6¥RAÛßjBoè+WEÏ›¸&M\¡Î9ÈÃõ6$oÑ•¾±€ÉÌÁ‘»ˆnFÎÊœî˜Åí+î·”}¥£<{ ìîòk¡ÓÄEݹ»šÁ,Înß܈€*·5 ×2ÿ‚͸ðÎl@7ˈ¬Í»ïh(ú\쮎è> ù«`sw¿o³óÕÇÉåØfÛYŶ”GtOk(o}ümÑT=ùë#ý}-âp endstream endobj 61 0 obj << /Length 448 /Filter /FlateDecode >> stream xÚ”MŽÛ0 …÷>…Ö†%ÇE1›¹ÿvHEŽ\˜è4@ç³(‘ï‘R´R‹YùÀ1Šú?åZ~ãa ƒ°÷xÑ¡±p/_)}3Åj¤5Cç‘@ƒŸØyü{¥(¶Ø;c÷èÛÊ&ÀûȨà¨i¡:`¨S?¥‚ΈóÈ(‰‚Õáå»^@Ý7*4 xT£ó脲´aý-È Í=Ïvp‹èŒŠyæg‹áÒ4j iEtBÝcÀ™9s©32†"êÎèfØ=³W>½JTƒ8 –EtFE;Œù¨o3Ó‘*Úº|4]ðØ'd­«üÄË./¯Î#6 ÁŸ”ÄžÑxµ‚A"öÁ°P(WH—¨ }vŽ?\§&p£Û´¤ðžMÖì<þweý颠øªÒÛUB©¯”næ?@1 Þ ®î´ k_"yI %²ëЍ«;¨Ëê­7ržÅgfNÊF¾jåâƒùjËóȨÐå"ªÂtx³ho[WEF7ÛƒË]×U H·³Ÿ”E–Ò1®2å§ÞßÃ|±¨úI‰}Ä9”ØÌ¿«ÅÄ•}½ ½Ÿt»Åî–ÌK,sÕ{ üùu|Üè,À endstream endobj 62 0 obj << /Length 399 /Filter /FlateDecode >> stream xÚ”9rÃ0 E{‚uf‚ÁÊå<ÎdÒøþm>eÚ”#ÆI>Äö!¯ž8Y¤wi-9Naœ>d³– G«ýK¥bݼ®ñ„$EjY¡Ë¶ºW‚ÚŽ4Œd¬‘p*dZźç‰+)®3êož`*?Øe[QÉ•Ã2GöU`å{ÎNºGºl XYôxF£àÉIœ©î-sŒâҔ¬1’ÇtG` # X“¡Y jÁ„Þ—#sŽ»åt´zE' ©Ô«ç%;znV²xÍàýòæA­Kxô_*û/xÙþ÷—¾6Ô>>LÑ^—t2ËŽ‘Á*äy—²0Å>1èaA•Û`pïQlïM{ ¾:'hêc°Aß#+®Sþ :',ø”Ü×i2 ¥žÞ³&Ì"õ5¬Ê- G”^ï±ÏÔ¤QíîØ /j_4¶'Ö«>SEl.ÏÞ’jì—ßû}¦sZ–m¯[ÓjªÐ@ú|Û¾•´: endstream endobj 63 0 obj << /Length 248 /Filter /FlateDecode >> stream xÚ…’;nÄ0 D{Bu ‚_}ΣE&÷oCÚ¬3‰ cð¤ÉcŠöе™¿Ä¥ Ö•¦0¥VŒ§~ÞÑ70`-E«$Tµñ[åï*sggìt;»‚Päè4álúª9õS:†rwB™ ,‚¢)àáþÊÖ@ô'[%£‚ýRÓm\ý íóVɨPE¯ *ãVswBy(Е]è•ÈöÌ~±¸ù2 PÌ¿f'2á”î„RïE;CÝ Pë C}UüD¹qóŒ’1Œ(« w ‚ƒq§ípwB_ì9¸wr:oãý+X壾¿•/Ú~ [ endstream endobj 64 0 obj << /Length 640 /Filter /FlateDecode >> stream xÚm•IŽÜ0 E÷u ­4!NÎSAMî¿Í§Û€Õ›V=[ùõI[ᔓrúaI†®9ýæfªÅ‹&v£ÚX<ý;AæJ¥rk‰K#sE˜û~ŽoŠSŽ?ì)$Ü*":žjõœZ£øŸcórgj=I%“[A`q¦>_èû9@ü ÇÞȘjUs’@­L¹kä™;5ÇòÉL y¤|¢Ve쎓}WÞ:õQdý¦*•Ø(If*så¾ôîTÕtÖü¦!aiG̈-”caRi¬IÊV bhSê-ÂHíëê‹­xÊL2Ð÷s€¨$sT*këZ^2|?x!c§È§^añpk}€uke)åˆÆÙÖµ[ß  Ú½}é¸åšá~sÞ`÷r÷e4ÓÚ-Z†¦ò`¸§•^IGõ7î֭—=ßTá–é CØuá*Ê\_þƒÜjŠˆkµ…4Û}¦ÍFÿÇÙ'ªpÝt‹V8~öÕ!óã›ygÁºV*B9®qä³;úD¥ëŠhðù|*ðÛœ87ƒæÊM¶V7sL$¾ÐºÌƒèM÷4»Í0ãz]{1Åœâ<-~¢§æar¶ýTÃ_«AN”1Ýö)Ä£õqÂ6ˆuá¡Ú‰âýUƒª¬³ÅeZe»¦÷‰ÆŒš®¸nÍQ(éÃ7‚›:ãÆÔÐ/3¢x]™™e²‘™`Ö͆¯½)>U‹1úE†ÿ Ùª-Ÿèƒå¶G ¼´ЉUl~Cã¼&Ëõ9T„›à¥e³7SØÚ†Ø?h½:†û-ëÍžbß4.zÚäf½­Ùƒb5æ›]CŸœIßñïçoúóëóÑêŽÔ endstream endobj 65 0 obj << /Length 321 /Filter /FlateDecode >> stream xÚ…”KnÄ0†÷9ëJƒƒÏ3UÕMï¿-ÎLcKAî.ú†Ÿ—;< $¾>ù5t%0ÇF½üdPŒPY›a÷Z> stream xÚ}”Knî …çYã+ÕÂ/l¯ç¯ªNºÿi1¥It¡ÉÈ|Á8>ÇD\J-MÊR‘¾PŒòއTkÚ¨T¨ù”¯ »ˆ5@C÷zÈ¢@覽2‚ˆö:vC‘´Þ™*(f×à,¼2Dý­Æ lýˆh3ÐÞ—´ñÅ+3ƒ³~‡wž„…Ü3×ÿÆßäu|–Ç7N2å¶ endstream endobj 67 0 obj << /Length 175 /Filter /FlateDecode >> stream xÚ}‘M C! „÷ž"ë.B~ŒÆóXJ7½ÿ¶±<¡`x.D>fÆ ©î@ÀW§ñ€'¡£y7 ¤uà“0ì¤á5v´&–¢Y2Ö_Ø= sB…ö˜ÅAÈ‘8hÊfI•ZÑm¨[ÇÎ+;Rw)R´íN¨4¾<\+š²„Ûeçà’Ùr'TGDZLm26KFcC(¾~¼g³dT†\mv«“ÄÔ§êXüIfyÃëQ¾íœq^ endstream endobj 68 0 obj [ 189 191 189 668 683 669 613 565 188 521 757 640 624 741 615 659 514 515 491 484 515 313 489 488 154 153 152 769 487 519 516 484 347 461 271 484 488 ] endobj 69 0 obj << /comma 31 0 R /period 32 0 R /semicolon 33 0 R /A 34 0 R /C 35 0 R /D 36 0 R /E 37 0 R /F 38 0 R /I 39 0 R /L 40 0 R /M 41 0 R /N 42 0 R /P 43 0 R /Q 44 0 R /S 45 0 R /V 46 0 R /a 47 0 R /b 48 0 R /c 49 0 R /d 50 0 R /e 51 0 R /f 52 0 R /g 53 0 R /h 54 0 R /i 55 0 R /j 56 0 R /l 57 0 R /m 58 0 R /n 59 0 R /o 60 0 R /p 61 0 R /q 62 0 R /r 63 0 R /s 64 0 R /t 65 0 R /u 66 0 R /v 67 0 R >> endobj 70 0 obj << /Type /Encoding /Differences [ 0 /comma /period /semicolon /A /C /D /E /F /I /L /M /N /P /Q /S /V /a /b /c /d /e /f /g /h /i /j /l /m /n /o /p /q /r /s /t /u /v ] >> endobj 71 0 obj << /Type /Font /Subtype /Type3 /Name /Fo1S0 /FirstChar 0 /LastChar 36 /Widths 68 0 R /CharProcs 69 0 R /FontBBox [-46 -210 769 729] /FontMatrix [0.001 0 0 0.001 0 0] /Encoding 70 0 R >> endobj 72 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 73 0 obj <> endobj 74 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 595.28000 841.89000 ] /Group 72 0 R /Length 180 /Filter /FlateDecode >> stream xÚµPA ¼ï+öÙB¾À¤7õh<áÁ{èÉïÛ6ei¬7# Ùa–Ù )4‘§“wKõ­ðé@b1/~ÑåÊàûi?H¦XØ…õF 6u3ÈÍ­X{à'éHãOV©X¹­Õʵ) zÿ1R늽t5S(A+ý-ÙŠmš€À Œ6UP©LâmŒ>lIì†aç™õsŒNP€OC¨j7²FWù—'fº/?úÔoÓ endstream endobj 75 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 76 0 obj <> endobj 77 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 595.28000 841.89000 ] /Group 75 0 R /Length 181 /Filter /FlateDecode >> stream xÚµPA ¼ï+ö%³€@_`âM=Ox0Æzòû¶ ,õf$!;Ì2;#Á yª1y·T¿>íI æÅ/º\|#ðaÚ’é–Ë•Lêgš{ Pzà'éHãO^ÖV/·ö*\•w4ó?f’ÞWé[¨jç Z“;1Ö+è´©‚FeobôaMb3 Ϭ¿Óéø4„ª6#[t•yb¦ûò¥oѬpX endstream endobj 78 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 79 0 obj <> endobj 80 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 595.28000 841.89000 ] /Group 78 0 R /Length 181 /Filter /FlateDecode >> stream xÚµPA ¼ï+ö%³…}IoêÑxƒ1öГ߷m`i¬7# Ùa–٘ѷ碳kuðé@b°,~ÑåÊà‡y?HæXØJÌW¢7±_@ié$@îŸt¦#M¿yùâe·^™+ò¦€jþÏL¶+þÒ×PÞ—4Öf´%;1m묠Ѧ *•Hœ Áù-‰Ý0ì<“þN£àÓªÚ¬ÑUþ剉îë—¾Ò&pX endstream endobj 81 0 obj << /Length 22235 /Filter /FlateDecode >> stream xÚå½MÏm½ŽÚÅÛFªIb;‰#¡+½ŸW¢u¤Û@´ *º¨ Áß'N2³öZÓ«„T*FQ‚sص÷3ý8Žã8ÃcüãOùç4þgü¿W²ÿsþóïþá§ü)ïÿÏÿþé?ýçñ·þËOéç?þïߟÅeÿVÛ¥ýüÃ_ÿòÓ¿ýó俇ößøËýiül­ÔìM…çJÉ?ÿÇÿ÷ëÿêþ·ñ½¿üÏcÉü쇩Ó¯¢]åç¿üÃOÿ.õÿçç¿ü}À×ëU+¿=ÿôõÌK«õýó”¢>ßÆç¹•ß^‚>Or¥ÜŠ~|þ× ÏsóœŸ5èó2þRæÚ>>ÿGÔçGäk+ûŽrÐç ¹Ÿç¨Ï÷‹kf…^¿}Ï’?>õÛ7ûí ¡²žÖ+qOŸï—¨ÏëÕRI úí{¹¸iϨœŸhüúã» Ÿ“zßK»9çáÿòYp…}_¯$Ô?ó~ØúS·åª ”ú2Û÷I;¨èY÷b­Pë/ã÷§Ô> Þ°õ/öûë£îûýKs¿Vr×QuVú¬<òoa5wº×ÏÒ#.ÿ¶ê}?nÿ)_’S®¨øÓî}?nÿ÷qþŠdAù¿Ûïß>ÏŸ°ßŸ¬þ(¹PåOiüþTš‚ê/Êcÿ•¢tþýG½vÐ݃8]9q!PýG<â¯ö {7ñˆ?aFµHhø¿3ªþ'QïûaùŸŠ¸ßóû¿î úƒêØÿÒésÿÕ¨ï·ñýÒªþ ù‡“¢º¤#ÿôª°øÓrI}Ü¿âÎk¿<ÿ–ºýþ¢õW ë:'ñâ/¬þáœ.MRQù‡s»¤éãüŠ?¦zi~Þÿ¢Îæ‘ÿôyÿjQß—‘ÿêóþ•¾?üÏÜQõ7—ÿœí_ û~»JâGÿ7,þ«ýþí‘ÿÃü_Å[ÿ¸økãû’ýϨó‡5_%—J úƒuœ?š« üßGü•" uþô±ÿ¨sÝeœÿ”8ìÙyä_{|åÉ|n9ƒú¿Bé¢qPþ²õÞ¢â_xì?M°þ“ðØåQÆù_Fþ-©¡Î½ˆ¤fÐýGÊ8ÿ:}¢nÒŸa¸ºˆ…aþ¯zõ¤„¾È¨?¼ï‡åß6âO(wÔù£ÉûýÃê/Ñ‘Æçtÿ–>ò¿Óÿÿ%ìûõê”?û/qÈ«4Îÿ^ pà¦ãoúþùß§oß{ý4Ôá¼|¼ÿþaÝ_û~—òùý°îk¿x]~Þ¿Ö}ªWZ—Ÿ÷õ˾ä?,ûøl^¾Þý•}Fñ“˜)¡Ö¿Úï?/ïþOqÀW×ÿQû¯•‹×å³þZnä-æ÷W½Ìýµÿ{Ãþþ9%×qpN7øùÝ€fÀ(§‚ª€2¿%ósäQl滊 ƒ x„í.7öÝ€0¢Õ5•‹+V“s™¸*?ò@$¶­>¦ÈV‹°’¶a߀°m¨É7à—H,n\9žûüÛÏz0[]áÀÇ%{Á,¥á-]P™rè`=?»Ï1XL LXóã8Ž‹Q—ÇqŠc…æëK‘d×q°p±%p:cˆËMýÙ æºÄõÇqÜFe˄͠ñÀî ÙlP{¶çŠR²‚¤<ûCqK`ÓAža©x$ã‚Ú jp¢KÓ|ÇdBɃ<ëÅdB&r ˆÃS¿1º˜þóØ…vò(H4;×ó0˜ž$úlPÄy@d,AâŽê² ê}¼•¤°—„`Ã:u«‚έ7Zø=Ã΂ÎWeñ§R Ë^yòa®f˜U³ˆ˜m®â “Ù Û“, ój)d˜L] سk@\ XA¢\:lÈ8ŒÊ³C„Ò¯BåY„a1ž×ó@äèˆ>.‡°h#*?ß Â–@-û³( ïëyñð3qèIº¬WM8ÆiˆDPˆÍÏ !$ÀÉù‘àdÈøÐ ÀÉú´z³VbÜO‡7’Aãã7€óýû5´te`ÆŒ¤«öÉ^‚‰?a÷÷+ƒJºœ ¯×ñû¯óýöÅÿQE˜úþ‹5ÿ7CÍ0d|Â’}~? ÀÙoöLÌúgƒ+ˆ>à8Ø’8@•²ˆY;µ&€³Pû\‚8 Ë€TY°ð“ "Q5Hó§„á'Ç6,Õà  Ä´ª7Ó'¦(åZ.cz˨»áð¾»q‰ÈÈFÙ,ærÊ:vU¥¨ã˜»øÄñ}¦¸… Â…ÌÏV-2nªófHùy(_1ãÜÜÈ1ø¾2ˆuSnÜ&HI®qÀ…B7p „Ü(;‡¹˜~r3ß‚2a«7õ2¦ ™øÉö¼ÆÅÀ¸oòcLè€÷ d²®úŸã\¡-êû™ç«å¯È I£¼öþý0Ýs½ŒßA>¿ƾhÒ»“z¿@øŒýqQïc~ÿžnÜæüéÕý~ÛT"߀8úËCüª@ò!þ{7 †•`tóîaÎÀldO‹w¯`Hß8ß %P²Øß"B•™›ë”5à“1~}ðg üí+…úœ«ÇSÞ3 Ž ¿Ý:Ô mØ’ëªD_§¦Ÿô—<Õ@©XëMøò€Á7ÛóFˆž¬·3¦$6ôdS~ž†qèÉ~ë!c‚ÐГ™&!8ÊK0)ÑAK`Ñ’DÆTÅ“þ’Ÿey,ýes.&‰ž4ð ®5)®ùÏ@öÉÍ8†9 È ’î\LÂb ™2®Óž;ŒÔ{ëh ´¸Ä1/vƒìtÓ&äbJtåä\ˆÂæè I¿3˜Šˆr¾3 !6 Ü\âz$7b³ Éyâð"\oÒ»wâæ åÊT½Q¾yˆ-½>o¦q#•å ¦0%ÕÃ;¨öÍ&—fçrü{$rNŸW³¸]`õ€&i¨Û±A÷Ô@C0:ÝZ¥ mØíõ=Æ5•ŽZ+f°¡%dÓ à,7`SOÉàXÅ€I·9K€)ËyÂ5Úó8ó·û¡´ FI¦2Ù1wC.ù2êIBeB£ýËÊöXÀu,A^N ¾iðQÐÆÍHûã4 $ú0­Ò©Ò…éMÚ¿ÒŸíú8Ú?ò Ë„ýH…b2¡$¾{1“É;¸¤BÆ;¸¥BAK@r3°b΂©Ú¼X1÷Ãz»žOüèÒ‹Ã$"#>t [#B–ú,J9Pµ™–b¦ ‘QÙiŒ Â:–Ày=ËU¯¾è0wà `i £šÕ¢Ù5 yQ/É;Ž»\}é•Qo7*¦(iÇeBù1yà`ˆ;d’ _})stÈ0˨Æê’¥è žƒ‹…[ùü~ d\ ꎙíM7ˆºcf »ûûÃ7†¾cÆXŽrÙ²âÊ0ŽnöTü鈡ݠÂ44…£(hT¹ @AAhEŽqä­]²ÔH@©XëÕV;Fþ¸Ú ÓÐêÕŽÀ,x=â@;I}ÂPÄ9Ý%˜–Äñ’s' ƒ-»6ELÁþy+ D÷Kxœ¨ŠˆäÈw7•# ò@1ùôçÅ$¼g IÊ„ÕpÔν Äk8êç½ nˆ×3€#é/Ù¹˜üÏ>Ù1ŒcIn$ù»q쓆"N•PõÀD¦Zq-r«={´†!HG È ÅlÉ ¥ùNÚAü›& ï\L k%Ý0fP–C}Ø!)l#® G z)ªÝ5 ³Þ@nPªq®M­NLÈT‹s›3¶˜ ”q;V™3¶˜mhô—ÈY±ãx¡ˆ1ÝrÉz¹1gÐX‚Å»z262èÞŸgAœê'› ›)Ê7€ëÀ°k‰^‰²5@1 zCh><EÄhOçk®íÀÇĹ$ %¨@ÚötîU 4¾xMu}ãØ8“QÂÃbÀÞîIê3s ”®¨ƒ2áÄÒñThùpA%§-ÂTÉ¥¢lbQ«,ÿðA+èòý(ŠÂ`,ö~žäy"¥_åœ75ëGü©çÜfõĤlç£(%ç’n8èTÊ¥úPXN¬ôÅa‘h}û…éú° l7¶ƒ©B]“š^m ™¡²² ôIò± aHw5šÚÙ:G½\³wZ…(:Q÷åd –Ù=åÄH:Açå#+ûaA ëZ‚Bй0*Dß‚¸80¢Î.p»QÒ¤@˜¡šˆ ìÎD&$¶ˆ"QÉ€‹)‰†4,^µž•¶7¼•‘F} L‰q« GY‰F˜¹¨Œ4*”²Æ±QÝd«P–ªèÞhzÛdòáƒHÈãF™€î œûMV÷áƒ_¯u©‹ÎFfóAv²Ø†zq:q´ôł߉#uMç¢"±š…gA3 ò³£· j˜§’+.'޳‘LææÃþQ®Nã×@ì-Å5PNœà»¥¹zä1öB°F÷,ˆ[…qoÜØ+”ìÞèYçƒÂ7úêÂ0^=è'ÐE*]}©¿*Áv}hÁ¨Ò–jÆÝÙ÷AØnlê[€¡‰ †ÄôJK þýûq/ÿrÕ%Åþa@Xë _ls0Þ@‘Xҭˊʆ[º¨õyŠÔ'–IsúáƒHâù"¥rßΫ,,ž’oAO4è‡aX¼>NçRÒ3+‡ÅAao„Ë·>*¨N6Øf•L”@)jL°y•ê/‘bͲº¸ ®õÒóêâ F1Û¤x< bQ`Ź/ı\Y7Ÿ÷CåêUë%’nn1ü ö‚U(Õ©ÖãâÀP`âUëa¬ƒ­ßô& :ÑphY'ó#êd2Ýæ2©QÉP`äÜâÇ ÖF³L¸XÛÂhc"‘s¾ÊžêÅde#žs-ˆcœZ…Nµžþġݸ̹Àl˜ Ò »¹²˜T]ª¸»3Óª›Jî¨Ýh„;œžY9‹WÅ· hÆÞ*Äeåf>PRØëaýuq¸³oAõRz!_07WÃâÝÈL>˜D|{¾³'Ð] Dnú%”Œ‹Ï{c ”ò¥[¾‰,W_lý :Ñðˆ®qù@*Ú…¾ø 9îÎK4t{ŸhÀ¶¨ @{Á$…¹•„ËH†ô|hA¹jrúˆHýâƒ8aåöÅ ÓÒÏÕÊeTi} h€â $¾jîÏž*ÅãRKGt•ùb^ÕIÁë™VqR@ºv™[0ò%âZoß~ »3‚È‚á«Øõ‚¡‰Ø uLVó@™oÍÚ—%+NÛ—%ˆÓ9f´ýK†) ÷ÃRŠñÀRúõ,ƒÞØÏÞ ¼´~?€"a©®aP<ª·äô‡cïA¸^I¨7Ø©œ¹û>ˆ£ÉóÁ"`z·à×0`ì‹·“”s=Ê× Ò ·£<ŠÄ6r¢¨S"Çcmh„ž5rÜ*ØØÊ åD…r§ò¼¬þ©ü[«àn«dr} Ýò™žÀ&­ÅÔHF x¶Œô,—3¶ò¼ÈJ Hý–ÎÐÈEÏÐH ð–34òA{ L€2ÒYÔ?˜ö‘"›.êPNìÂîÔÊq@y#î-ÚqçÂD2)îÞÈsdó ™F(²•úRâEù€ÒX­¸6’iñn1`йÀ6ÖªÉi¥…­Â¸½»>ˆ‹D¡[• êZÉÌ#ªs6r (ô[ÁT( U÷‰1îy)_Å}c¤@zÄ›°ôƧr[AqÐóÙíÆ.·00¨·n°Tׂ@‚F³À{è‹“g®—–ΠˉBÂÚ&,ôÞ<*J97X>*mÅA„"¼x„#á,œYtT g«P6(#ÙЈ×[#öŸ2ÍêÝÂâÀ†F6#æÆbJÑ´)¡05Ò¸­ÜZÕ¨¬lc+› Sü :lpÆó€&³AdûÕ{#­ CU¯j$ŸÄ5tùbáùÊÖÓÏ=zÕ 3Çh1¸>f¨¸ñ@X2®G±»ah2骺fd’´ÒQìnqQ”øˆZ‚fŠÝëU¥Aˆ°Ô XÈxL&4žÎ?j1•þ‚Þ4È$oN/Â^L.Î9ùÂëH VòM ŠƒÀ€ £L*/ívÐ*ÈK¼Sï&­BM‡9““ó¸*ßÌÁ ¤T<þÖæhŽÊV} â²²i%óÒƒÄT¨Ù”7»è¢ÖM±šœ“)ÎSí¦œaq`ZÉö®E°8 ûÙZœ)*·Ò[ƒÝU Ž˜ºseÔ N_|Íåq.0—«Iø‹qpÄtø›1u"U³€ŸõAXûp2D¦þ<™R R®œ×Wé̌ݨÍ9â‘c7Vïææ{jgq2R1]jGl h­×È´§vÏ‚8UÎqw{WzXÀ‘`À*©â"ÑžÚ¹i‡Ý™¦Nðæ8À䃩¼åÇ@{Áøsn„‹ÄJzƒ©P¦NpqN縷ñYß‚°Ý¨ÆYË„{ÛàžüS' M«W#…Ò‹··a˜À²\äv÷Ã^ùÈTz‘5ÒÔ Þ•ï´0 Œ«Ô«P€p2â@¼ %,ƽ±g¯B ƒÞ”± êT(a½4©ù°d‚â`œ7K&ÈÆËW¼*Mah={è—0”Î^$ÆÅŽ8¨^Xyù:;ubü#å«z]œ°8xÁд#ÞxªÿýÀ7çCɦ ýb@\Wýð* Jâ{ Çuo+žb&vô€°ÌN„¥0Z¾ ÂR-__ü˜0( ×WJ68õ¸sAÇnÜ#î ½ ê[ÈÊ7VaOÙƒVaÜÞý8È‘BÉ®)”œI;ÎY} ÂúÊBÈÔg'+lth %{ï œx/.4Ìe2÷;¦ƒ1™{È´Ë‹ ÓÁ˜€Ì͆é`%È@i½Á7ßëjó ¾ù0à—8"²Í…2À`Ýh ì­µÌ~ò‡a÷E#¡šíäw/*7ü´&2óýá8•l߀°ÓÈä×Òl§x ê0šêk³›Š#"µ1á 8xИôÚzèþð@ÌHw„lvö dB3 f#ýÂß™Ðì}õ¹âÀGéf¼eSµLjNÐV4&4!§*‰ƒÁÓ Í66Êã‚´…×@é ’kAJ‘ð§:A]*ß PuhLh›kåÃ)þÔtÎRXæƒ)ý†µ@} áO&ýÖœs! îÌ‚)— ÊH”³oA(Ù8{]W‡lsî€"ÑàO›st:ë°@œ®EØ*ÈØ M 0K¹EÇPÓÉeå ÀÂZ`,‹Dc:YÜK Žêä!kNµ* êú p¼_nþ)Ô^èt‹Ï}ÄA …?©âjeItŠI##­‘RÐÙh\l¾a°hW* –'ü‰[[\°ñ%äk¯˜ßêƒ@& êú .@[½[[Øn4€¶gA\$Vº¹ØP‘h’á=kÂA/¬>¨Åywã!Sã!ë‚»µIÏWÍN­(È9VA'Ptw.ã³½”„;KjWµR¶Kfß‚0¼à2Xü‚Cf,ø(b~|?ì•­øÄ=¶ª¿ê"š!ˆ`6L÷ÄU‡¾a¥YÉ—\žKu"#ä+…I/::Ð6¬â{ ΀6b`uq1K`òw®¢¶¡QÞx„õ±•F®&ò»Q0¸n» ùè,è#Û*‡01`pLׂ8(¢Á1Ç]™H¤0íšWû°à·HaÚEß*K³iµ/ú~P:·Ã«1 áö+Úß‚¸½`cKD•j¾d‰(|X¯£:[Ôõ¨;J> ¬Š‹›Õè¥%\N´aÚ oЇ •Gâú Ž#´›èdîþ° ’Z¿¬B ”ÆÝlt ;Q½9A‘hTsÐv:{{!NסâÜWiéÊy^2„ãƒJ½EYA•ªAR·(+j/ÔHDs6’ ×wïÖ–l\£ç<l\£ŠÓ˃_¥ · ùÄàò° ‘ÓOÿ3 ’*W–zÁ´‘Œ‘ÏæIq9‘mœs*d#Ÿçƒ¸U~³S‚Ng.G¤tkãzDšQùÀ†)›wwþ%»e¢A ný dŒä•Ö3(òAÁôA»ÑFVJ‘«ÒL8ëþ`ÎÅú>ÈŒ|¾R #ß=(Š:,¥0 K)*9û>ˆ“f½héÀ7“‘ϵ ldäD÷½1ޝâ½7‚bÓ͉ŠÄZo¹pT>hc– ¨J“V/2\.¬‹#JWßTH˜é†dÌèÔÅ{¬™!`Ðêÿþïþ‹È Γ/„õRóƒ2„‹kÔ%7;'c†÷ä–Æ¡äÃM‰Éíe6n2OmpÐ]Ÿ¿õ²Tú0`=ë0d>cÔIV/³ ‹¸§72­eôS{xãÓæÝ““˜TÜM—–œD†Æ4øUeÜa”í9eÑ…¤Â88fó-ˆ«2±@#å‰ë”ƒ•e#9ù¸F‚!‹Wš†à¸_BNiÇÏ)#sï„Û ö ãZ'\| ÅóH$s ゎfC޳¡TXu2ÁmÍj0ˆ›rÄt"\NìÆËÈ©À|`#«­WUØ^ ãר¬ˆ¨ »Á-RÃÝWiÂ-¤à.¬Dí0C‚â`|6¯Räç4Â`çFÆ^ "\ë†Êȉ½¦çnŒ“'6Ly!P}@-ù‚!M’Õ«•”'v㠚ܣY¥qq N•(<|°ÇÊ1}DÎæƒò<Æ%8¿€? v6½€? a~bƒ¯Z³À yi`î ,Ãrî q ØÉêÜbB›s_ˆÅšøß’#ÎlýžÙ1ÓEii`:Y܆4iÅLÆß½9JA« r8JA«` ⛣´ ƶ9Jß-|$ñ-ˆƒœX…²diAg£äúÅ‚°÷nâÊ9„ê-Œ :–@²×ÁÐH0¤ë‰—'Ui?ȃr¢XÔ½.ŽF $oQHq”_¯>á¥##5¯“gA÷-CŽœ(È^št³À{õ ƒ%ã,® ×Å)鯡¢2R?»{ïÎa]œ(VÞ/4+âsÀ¢l ïŠ)¶/ÆfÁŒ×¿”a³@è!G}X÷ÈÆÌ)Ù9I‡P0ccÕ7 .óÁ„ †©Ø˜Ë3†Å@}‘# Œ¡sË댡Ó5€Q±»m„ñ€R÷°æ44PêžÕÂäœÊᆿE¶Ÿ½¹!1a˜³VBÐ*P9¬„‚abc:¢ñï´HHh&`:ÊãT6UZ\>Ê…|  ôõ‹@&¦4ÉMŽh<¦4ÈÍx¹tØÁ ¡7' è¢hì”[R´ /‘Eà ʽƒ-˜’ížqФ‡P0\p&Ùž×ËûÙ˜A©7G(¦J#Ηöv:OH(97Æ8F>ãÏîkŒ‰Å| =ãšW MÔÖ¿#c¯ÞqÁ0µÚÀƆˆ¿[Р¡c²:ý£8vJ'Ó³D¡ü˜ªÎ¹J¥+WïÆ¼±ÓyCƒ1«À©ûqÈÐÙ@[0ltJÝ<˜i‚R7ÑÈ\®²™.@»QŒ‰mQ]`n,JÕÍu¹¹²I²rÉV¥±I²&í¸j}ŠÆo2Lµn’í7,V0¡š4”‘TüUˆËH mÈZ™{»Jñjå¸wÎ|dëÂ&yXPjXµnü˜ÄIp7W“lïI÷Öiü˜7ÈV4!Â=¹‹­‚îÞ8þ÷ã³ÎK ®Œ½PŠVØÉdì”}kO¡,àñÙÅŸ ZZ©kŒS©;eç5F‡¹¹Ššzî>(¨“oAXWWz¿jv`@açBIõ¢­³‚‰ƒ ³B€Áý껃S1$@tÕÝÄz3 캔M4>͛»ZÒj£‡â. tË+dh‰ûQ,¯¶ y‰EW 0Üä²³(,J=4¥ü ÙŽID†- qP!c¬?H¦WÈ„F³XCí2¬¤Ê]« ™ßTƒ¤®¾U…Œí"Ô3 Ž'U®¶ûf˜³ÀhJy÷Í*†Ž.é•vß “ s.—ÍìeX.š˜Ô\5Á$äÚN X2ÈÆž¾{‡ 8ÞfLFÎÜqsÅPtŽÚ¬íþ)È‚B¾q©ôKvSdãP78$îžX %¿ôA©J¾õ†;uX@¥)¬>™D©žq«Ð ŸÝk†ee#Ju-ˆÃ"ætôÊ1ŠQµÞzåD”š^9&+›jü­W^ÁÃÜBȧW­k ¿cª“rôu:¦@¹(­÷¬ÊEWÝr°ÃÅgôIÙŒ1Àf©7ìªc¸=ÚQÂÄÀì.p~Gõ[ZØüyèָZC"4>ÃÜrj:“ÄÒ0˜­»ÕµÁœ=¦ &sâÓ´ÁDa6r“ݰÀ„¡©ÛÜWåÒ×y)Mâ€úi6¡%?únAXȸ"mÞ³yTÍãTl›÷¬ƒš6í ”wº û¶LÒçUèÍ´¦r/@ ^m#Ð5IÇÏî‹s ‰?´:„±ûǶQÇéëì¦ æl$ÓßãþÌÊqãÜV¸>[z ÕwW4+s&ï²Ö40ý=mιçƒ~æ#â˜ö¬´ÒJ'{Vò,ˆË¦¿W{=æÖhå¾Ââ TQ\÷„¬>hë‘6P΋µ¼c~æ@9\…B6®åZv2õq:ke\c*üäE…Ö!š¤lüù®aJVôEƆ顰Õu‘±aösõ-¦V^C2 H´ajÏ‚8r…Qd÷m'lÆé|+~|PÍÎóRà@¹émq!X¥j ?Yæ¾0ÊŹ;ǽ2j¹LTpçB‘è½1*üŒ8ؤ͠—Î4²òfmFYЯ"Þ­-lppülÝÄјî¾áŒÐ³Ÿ˜â4†Ú° O&aS·IÏ“)nŒ—Mé©6ZнhÄ”žj©°ZYFt €òA>`aà^¨tˆ0÷…‘ | â‰[9Ô˜:Q”µ&„º¹~ùþïƒÄ‹íÀ߉¥YïÝ€¸Vñ ˆ$ÞS¬ dõ ,/.Åð/ %ó@çó@É·¸Î‡a”zËŠ|6É\nm›ˆª Áž™ž©8ÊF`¿T‘Ay@Ó4|’tr]Ñ@è&®CÚaA˜Ó°`ÝQA2$à$j-·™HÀ rä ñº}XÐ"ÅmÖíäÝ‚8†«‹Zͪ nlÏ #Ï‚¸H”‘’—þ(¨0™˜T×)“Z¼;Rœ¸Y0å/a-FýÂ(¯“²FÏVž4¯HËÊZ¿X@ò:[Vµ{½Qp¨ûzª7‰” ƒ6ç†@wÊåF‚N¦)¯c\°½0åuÜUH‘ò:u A~X*¯#sj£BQVxX†‚C€‘ΣBÉ¢"Àfõ-ëaN\ 4Rä(Ïé)ÐÍuŠ-qP•Fšoi™ Â$Çtd$ãÃu2í!iü]'+k &µ¤Þ,pbß‚0¼…¡bó¢Gý° ìY%«qØ#¢[àT¡0õ[à‰l«à=¯Å ü Î{_“HLꢉE½ðÕ<|àÜ\~Ì‚ÉÓ zé6,jWºÙ«Qq ýf¯FÅA/¾q°”¿X‡Ç”)’ ZÎÍ· êC.;dX‡yXÀ“ ÔSg›Ékº“xNŒ¬éj̽‘‹M ¤g[=Îãöž‹8}õ°Ýh3­{ZS¥qû c7¯‡†Lp ªoA ¢áô>RÏ@Þ!L”TlžsÉ’¢Va|V]ÈA˜ø5»ò¼f—Ä ™¯’‘÷F)Ãî£{7¤YÐú ‹˜| Ñí*› ó¾0ê£3¯éh;å=¯Ú sZÂñAØK× ‡ÇžêÁÉóÌv€xŒ™§?z2†èáEÐÉDðŒãÔ«îùAÌH9ô” ç— ã{ìN«u„É5&sKaR±½3çŶÂI¡6b Ë3‡íCª>Sq˜݈§Ühv½•²A» 'ãE\}3Æð"ÚÏÞ3:˜EÈÆ>eqÛ‰¦Wn°çV C;XYT•UIâÃæ\ â°ˆ½ ,¾â’`èÄÔçÙ^3òêÜaN…©ÙNÐKRµåÜ’r$°U皈ã/h¤fûFþ0†;ZéÊiêΡ| £JµË.mZ¸Ýhš¬s‚YJiÄÁêŸ2†‰-OêꟂú6™ojP˜n}¦ÅçÙ  Ù¡?C6&²:—Æ0† âvXJ1Õ:Iö}Ö: 9ZݨŒTŒ'U€g#Õ£Õ ³àhu£V¡ÚÁ»±Äá1르øô¢ì@:,°'\VîÆN¹&Û1‘ÈVìÑvÌÝy2tæRq·¶ÉЩ] ¬“5uëK‚õP&C§gA.—ô‹aqÀ/>@»±4ß‚°nWãÃsîLq¸\CþhÒŠÛ ÆRê¾2¥@Lªöê<¸Ç1tŽÓÙ{èŠÃ"Z}P–®õ` Ä<™dÔúÎ$”†Þ}#9B›w_CÁñˆï…#P·~Ä÷‡‘±Õ»3i$Kiñp¡ªñÞ+OJ‘,¥=kÂåÄ:V¡z·¶_"UãÙ¹¹ÆaÔ[¹êV‚ÃÜ™Dó $’¥t+ÁN¦NÂ5Y Šƒ>"Q6“•_Øä"ˆÛ‹#´`8€øc ˆ|æ@ƒ f®º|ñÀ/žb9:[yn‚ßÊô‹kæÇ.ˆ›ÓCùn€’„nptÌl•?cŒ©ü€MÆì‚°ÉïÔxl2Æ£$⾄ d¤}TDÈIÅaØäqì¦fädÐ%@X cƒ9©oA0°éû1'r6’ ÐUEd+1.gª_Vá°Ò”/Ù âXÒ!ƒÃdÄ,rè)A>(éÁŒ@õ-+såNÆÔ‡\ÜS æfàäÕ¶åÄÖ/Ùm+ŒŒ;òt60Ï‚8RÀQ¡äÌÀÓ™’“;ðt¦dàä0šÒ,Èþ鈃ìõÂ,èæƒ%oÚ]|Bƒó¡%, ªÖöÅ„¯‡Â‘Ð`Òg}Ä#©çŒD«PìâËlʦ£ÃÜæËrêÏÓ9Œ(õÊÊ¥ãòU(ž¡d±7H½€ÈbÅ· ¬Ä-_eKñ½[¶Ô,ÈÏ %‡Ê€úÎÝ9î¹ÛêƒÚ³Àv£¤ôÅ‚0ð‘‰ó õ;™$ËE¹j‚E¢sÕ°Á°Œ4a±[Œ?2X¬v§Z;&,vSa*Õ ‹õ^ºââ ßä|z`ò P>Дpè©ýÀäA«Ðèê9åŠ[…ÖH³ /@f… Íô«÷:aHDtÕÍ^!tDhÔ7 ®D5D躱Vá‡]nn¤0ªÔtDÓ+š^äà¢11`pÄ Æì‚6–`³ Tkv«¾auÙ8Šü% 8ÕvßaxÈá²fT*†«µX2æ4ÎÉ\°H¸0QhD¥h ¾ºF2@:iB÷P=¨*b¹Úª¯ ŠÌq"ì¡ú ¡ƒË6¥PýÈãXn¤…` idã«ñ¢íF# ÚãÜCPÙdü­uOÅŒÙDÏö=j¸ØuOÅT¨YÇnÜý PV6’Îq,dX> {ç&瞇ù°Y‹ÅD"Q>¨T̹@ãtÎ Y&¿™ žQh»„á^ä…ÈÄÔHFy#2A«`H}Ï‚8ªTCêoyÞw ÂÐG†Ô·g%X}@Í™¤·lV`Sæ‚2’Ø…—•MÕ@â8ôzi^˜‰“, ¦>`ÃÉ»«æ{eöV!,™FµÞù&#MÁð- Z;݆rêÄÈ›½vf®]ì"š¨ zÈ:V¡WÜÉÄFÿäù ް¶ÖC ʉÍVÁ»µÅaÀèÈó‚ö‚–#Q ʆ“ïYpÕ:wýbAö'ÉÇÅD¢d#¬õªuM§ìTë8¸ayµr9㈃îUi5 6â zUZ˜DE&&˜hºoA íET Ú FÞ\üQÜ*´M(ælEªïƒ¸UÐMhÑCê ÂP©=ïÏ¢nmFÎHy_A8VÁ¹/äx4¢bf¯ºïÍ ™¡ëG8^!Ó对U^2ªa­®¿¢!÷uQ1#„倃ŽÏ¾L½‡R!S»H‹èB!C“œqñ\¨ „ãË¢¹P4ÿrFŒ~ gTÈ­!.¶˜æ,Ôzµ=,…Ù†/Þ³R˜m˜S:²í˜T˜M’TÖ|f#f“$Í2;6˜qr3jÓŽ‹ãf¬k@äãf§rf™»oAÖàÜ l”õ‡ï—¨|xß Þ¿V™0z]> ø-°6_o9Hdm>‰Ó? {βÊtNó6?,W]Ãüï„¥ÂIœ>'é?< qµyâbPØD¥¡Ê_<UÖê{ l6×#í Û†M}"'•ÒbsmCcn_d ]ÐÏñ#JXeló!“´ &sûº¡2AÎé¾¢²±Ýxqz€1çî[×3·7â|Àô%Ãö¨ŒÚžü°€§µš Á…\Èþn7ZãÒóAÜ=µæ»[ª 漘kAozº'•P{ÁðàkR TŸdïI%T$ )þëäšÚq7WÒ‘‘úÔD­BÏ·Ž¨V¦Þ| âXŠçÄÚ|fÕœLÑû;‡MéX…Òœ.NÜdBÖ/>[›êoÈN“E¢ÓGŠ›ätë( v#TÈQ1eeãŽß* ZÙæeqb~Xð{ØÌ]ÊN#. ~œX°ÕH‹••›ú„½6ÐckI âÀPùknT©J: 8˜Üñžq>°©þˆ¸î¾ŒÓ™èdçBã„Û Â|™, û‚˜²‹gAÜÄšŒ“i±¢VA†+ *˜²‹ê‡g)»xÄe$Sv©ä@Á~ Rxo®q¬ÕjsÄõù¦n3'Öh*‚0‘Å&Ú{}"òâ˜³ÓØÝë`ä0H^{¡ ®V~!s©C§ö>¾‡¿ÙÓß ˆ{jßaK†Mv— Ì€Cþa@4X|"U|Dª(ì›*aôlÒ=¼úa@ÔYÐëÂæTÝã³ü©b°ægAû`ªxÄ!2mZg#´18U < âÊ"~aÄA«À/Œ8Èr™AµáÔQØ÷Lq˜ËØû–Ú 6ÑïZ–•m¤ßÒ2.+ÛL¿H~\â=ÔÐÉ­7Ü^0ƒž5á2’Mîô^ŸqvUK†dXN¤<â@ò3#bBåÊijcƒv£!2G•BŒóMÕk¦»³OLèb¯Õ‰dSõ®a©‰‡¹1™ŠA6¼O U Æ¥Óó\U1ÈäÝ~ ÔÈìÔÊŠ õ,Å„jòn,¨bàZ¨bÐ@*ùÖ’€YP.©Õ©ÒÂ,ÈÅ_…8$žÍŒl<$& ‘yã!1w&ÓQPšüO(ŒÛûÄÜ™X^(4Ê …†¹/p5Úä \›oAÜ*ŒÛ{ÖÉÿ„ÊH£BQì[ëŠD­þ*"2MKb͂⠗ƒ‡DYp”@õÁJ [›AM´ffXOULéɵà÷0 FVÞTL˜JUØô4=a½(9Œ@%‡‰Íé`Ä­B¡áƒEHE %‡‘Åé`Ä­B>ÈÞ),#5º•]P{¡2·:UZXF2¥šœú ¢R·¶ ¨›÷B#Ê*6Œ›müçš\ “(œ`xB_8,Añ„Þ($ f Äì׸ ƆÅÛs™U©éj¦…ú0à×8(\Ë© l Z;à 4¿ìA» §CJ‡Y#¿ ÙC 8 ä âèÐŒÞ ÕyE…}=Ä| 8 « ©À²‘QDÞàPYbOÝ|Šq0ò‘À’QD¶Òœ¶ FÀÄì$å?Àhõ@_CNhÖxZ5 ¦ ê‡$ˆæZw.ýц¾€|`OÝžôˆrÀ7_¤¤|² ¿ÈÈ0§3ù«D##`"çÎF“É/22Ð*°*0Ì•‘D¾XGhP *ÚöØž×`=(ŒBZ+3¬N$£7 • ]jˇˆëÝ‚88à¨û§FE¢QH{>ˆ“5 éJ9Ãj$²ÇöMF†¹±p2*0çÎyHõ0÷?û aöçzéÖþÂT(L|•-þ% ‚ÆmŠSƒziãÚìû ÎÉ_V!E·(Ë xŠÄb„l‹ÌS'r5:´œî\h£Rmν1Lv‡[;Ph:°LW—{:àÐnìõ€oDÐ8N¦âÜã FÐ8JÕgFâ@0ÞMÄ…Ù bʦ„ÅU(Õ¹¹Æ°xìFNô׫§EŸŒyó«Ð¼K˜ÊX…’;î½QÊX…ìÜXâ ±•¾XD3çîÜ™â 0­^TÛ³›Gˆ¥ä[·T¯¾ÝA‘ØÅ· n7IeóÐ`HRiJ#ó‘T’2%X¥Œ ¥‘V¥½`¡LRY Þý¨Ç¿}?N&õÅQYЕ26Dåâq*Õ‡(ëz ®IšŒÙ„lK°ª’‚ZÊ_ Ð8dpJ T0$™iá çJM‡(ãj•«$Âäf\µk„³­û„µ±uF¼ê¡êtú˜<РrÉY`vÑ„¦-&Q@4¡z5ZD#2ª4iBw×ìÝ‚†L6þ’³À”e™ÓX-Û Ù¸»÷È&f!ß$†Ò'ÆUdžN£2À•ÇFêú ¨tŒã«‚Û ÕVa‘îUª~±@"‰Jy!@ùÀF§Ú"*ƒN_,ËHÝ&—õ(#u›XYø/L•Hé5±jšä×Ä ¨ia£î]™#ñá­:7Æ8ö)­‘jLN$6 ¼;c˜£Fr-ˆóØÌŒskŒ£‹-òÅ‚°H,zåÜrÇõÑm²ÛóAŽ£‹µ¹!çò—•Œ×x=¨—ÝÆéÜÛ{œ ÞœÛ{qqçCŠépJ‡2÷Ý‚8|øÈìt0r ÃF¿&V0õÁ¯ß+˜s©ùÄ!Ryd¤š2.#1›p{Í hÁkf“M¼>{¯Ìq‘hDdî;ûoâõy«1‚öBÕK½‡Þ°Ê”Žwߺ%R:¾i¸·f#"+ÞéwQ)f7NšÐ‚¼3I6‚JäE²žY ŒÈ|ÏJ`r⤠Ýuì`Ô´ù¸0Õºˆ¡ô¥¬>˜ÈäM †©T ™¬êÜB‘ɾa‘XGVÞ²„ ÝhD¥´Ä@>h&›¾Ä0‘øBc6ˆhz=ŠÝ 2/óBcb~kªïAÒ†¡º04æš#m–Ò±{Œ´A†¶L°{“‡7&Û@{|±AÆ‹y`qP5™é~mÆhÌÔ„›0“‡š©¯áÉ’ÑüÅaP@ƒ,Æì‘éí 0©8[â¼iÙ Câݘ™WËù…ùÀl„LÉ· h]äÍÔÚ ¬C™Ë%9e`$r÷}Ç;YJSR\>˜,¥‹Â´ŠúÄù`Ü…Úó` ”˦ƒùh¾Ü6V¡vçd Û :VAøy2å8¼Cñ¤¾0 ÃNi‚œï€ñÁâI]Ó ˜ŒD9ùäHœoAœhù‹3tg'fu.laüdÊF`²²ñ¤jZ˜Z™Ä|°¦0Uٴ–ǭ¨‘4-q Ð*“».u Ð*Ôz7 &bãƒ{Á4p& ­/]&KéÒUÅA7ì8çB ÄÁ)7§‘ÇRÚ®’Š}åðcb*”Q£Â-¨¾q,6y\~žqœ€blµ½ânïÆêZ· …F,«TÙ^™·0+(# mKcÎnt˜Z17nå0µ‚ö‚æ/P$» Ú|„½óqñå‚ÞZÓ‹/·xR_,¥˜÷…ÉRº%‚ß-c§$CÞ oïB†>ònïaØRßq(4–#Œ©‘Dô °@>0ó=éélßþ*{‰Æbî½x v§«ï oÚ‹/S¡Hë¾q˜P-w-Ð@žT¯‹ó[$Ojvº8aí"SÁü˜ Á‡g3`¥…=dÄ.®ÅÌ·×C ¨˜‘‹ÁÕC{÷@ $³îöfðˆ{j…Å€OòzòWȸNyá‚2CY^¸`Ì.¨ÆÎ¸ôq2Ÿ0Š¢´[W 0n­j¢®båCŽøî?ã”ëonDÌ.0ò¥}IÄdÂþBF+†ƒëvH†Iu! Gù`“AU›kR T–ñ › Zya“ÄKøâfT;¤ù@Xq«`º´Ié¹ã˜›oA "4]£2Év.å6|{b 7ã8‹sSdFäKhM/‚vc7Œúš_E¢q3z>ˆC½¤± [c Ô1ù“‘ŒÒ· “:Î…­öêšû•¦°ŒDÆ ]¼ÆMd‡t-äf»‘—¬¦wD%]99÷ö°÷ÕÓÁûáÇï‡5¯.¶¡öÏïÇMÌ $ëÃq¥A÷ ˆË†tk,}x Ra¨Í\øá)ð3¡g„=-—»ƒûa€Ä5PwEï.hVñ ˆë_æ»…üa@TÏ¢éM-JD:*’…·ím/¸è0²©~¥g*Ž›LÖCžx/ÔyœÇß*ÕXA©([I°º‡>ø=pªw?|"~Ájè0\ VÃjLøoá½@gB½=P«`=Ü¥è*Ð;Þµ€#{¸«k:MÝfëi ö‚•'«{ˆò‘þôÉÐûaA˜îZÏ—p~žqÜ ]¯œ&C/h/ØTkŸENõûÄõ/ùÕ?ëİÞMíp\iIPo°saªÛPíÏœªnãYªn£)9½›_Õm\ âVaÔ¾âÔmަª…gSý®RäTÿbw@í›ê_Ü °Fªq+Tɸ¬l¯Ì=ÃêÄq"Üì ;§£jÊœŽª èläñ³] âTŽr¿96>,ø-R_§kzžÎ-R_§e¾¬È8½—@^ê[§jRø*ÞãJœÆP•ª–g7/Ђ£«:™&·ÂÒUAEb;º*(èÑUÎlS{äÝòr§‹lR–%Ñ­èª%•[ÕÔÕ•l>P`?Qr½µeP«`ŸußÚÂV†ˆ*î…Ch|Ö{íKq¼õžêUëbÜŒî{cرŒ|à¾7R ·‚º/]a3ŒÆþä½tÅíÕñÞÙÆ^XH}P…b*G}!õQP,58¯}¡¼›_/L(CXFŽÎÒÇ÷Ãu–>¾†}(¾qà õW ®h€ÈõÔÊBDóÀdòÿ0 BB÷…ùÍ€°ÂèH(&‹y`’b~‡ú7,“‡ª-A©O„bõ‹Š….á^<„ õkºªñžÁR±b+Ûñ‡$Ûò,È#ªbRW»] ¡©tµÝ.ùÀ„¦¨>Ï£@ l9q‡å‚lTCu=¯bòq6ùGÏ‚¸!ÞQ5^ÜŒ3! /R „¤úqÀ¡ÔõÌÚ 9Y’g¨½ÐÈ÷I¤Ô•» )u•§ˆ*(v Ï¡"±¿àÙ Û²ANÜU@PlÒ)eº+‘‰qêäÅ\˜×PÿšcÅÄI]¥¾Fy1wv"¹Gê?V!Löó=RŠDÛ¢ÉLjÚËM^ç‚"ŶxM³b²²ƒ}p 0Ø:xë!R՛ܕ›É@æg•7,¡rå\œé÷@©«-@ˆÊHSŒsMVcîÎ<Å8x:ó¨2“s:§@Hj&ív.0 xÒS¢VôÒ¼Æz1'“I]e‘ç³BXÄ·X„ œÈ"¾q@À’H´K9Øþ5£kŠmÙÛ®‡ÂFŒØ½  MmHTFê&I ×Kã94³0·6šº0‘8"à‹I½0÷šRñú9Ž™œþAØÐ̸µ^ÅŠ¤Ç*´0(âÈHêÝã éßCíÆR} %%ø*ìÝ™~‰Cn:*”&ÆÙrÇåD“”œpUš˜åæä=˜>¦ƒ1jƒÓ!¡Òk\³‘Ó…eå(V Àä~õ¾^¹CýR¯ZÑ»5¬±±, "ÁŒŽ¿”[QØÈøK{„ã10BàQ©°LgI“©} :KK öÝ€°³À‘e1}`bÀhB÷À–@yMg©hé8ªo@îdÔ7 sæñ³iyZFh‰æû"hL{±-’ L.7ăùÀÎÄ? 9cI{#‰ŸR¿X†O®c7Ž@$عœëؼ(.¤cЀŷ ®BWÃ,‚ ÁHü¨a.¼ 5΂v™&ó£:Å#Þ¨)Jô/>C¾¤~ðG˜½@㺚óê` ˆ ’ês:OŠÌþ´ˆEb£Û dó ž±xtP#é¼P |PÔß q¸ÔZ ”h/4õ-{_44àMúnDTnªTL…Bãöî®B Æ*,ÒL$lA{AéhÈP`‹t“Ù°ú:%‚Ag£T*ѳ>ˆÃdÊðû®öª`Hyïa%nŒB›þA zÐ? ÝXå 0]né‹a8´fD¥N'.ZEû@É· îdRýâƒßÃðˆåÖbö‚¤üÅ‚0.#ñV¯›G‘™],&"Óµ ŒüDˆa-æÖ&Ìzô—tˆJC XÒÁaîLRFVV­ —ŒÒ}wˉF¡íú ,#…v¥gW7Ž"³]¬÷ò«˜i…#—]1LDéˆEWÁh"^Fþò0 ìL¢t˜+f°¹fÀŠ™c”C«qÖq"Þ04Ì.ãD[Àì %Ñ®J01`D»(Áä£&Üœl2ÅÙä‹‘8¸ÉÆlCcìT– û‹‡ëÝ9P.ûf€ªö£ôB`U.Þä²oö£ ã&¼ñO ªÈ^Ú7þ©‚˜é‹ÉMØWß U¦Ã¿Ú bq°èb+„Ý >üK˜Òĸ oü¦6Éõ…{Eb“ƒ> ­ö#PV69̲æ'1ZÖþÅ‚°H´·~*Ï~AîÅú}M/bÎJ/¼æt¦üÂ;`NgÃÞhƒ ™j§Éü³Ð˜Œ4™5És7†¡Ðì­¿U`çd²â•lL¹l’gï$™k¼;›í´ õ…6e¤öB€2’&ß‚@,à‹é£Bx¼'¯-¦PLc"ñ¶Æ &+sz½õc"‘³|ñA˜”/£xÖÊ¿bsg®°¬Ìœ×ædbcþq{ÚÈËG^S;n7šXõ/½/–äû ŽŸÑ¸‡Ô¹/òòñ%ÅôÆ©xØN@»qT(D^­œ™‰…÷ÎÙÓÕ“R‚E¢ñòÝr˜˜ŠñòùÄáàxöÜL#'V§R ›-žBÍžq(4¦«ï‰NL$\®š¼:ñ—@¡fªN­‡B“‘öŒy1&´ ù>È‘BÍuÏÙƒ²r-¾¡BͤLÀ|0*”. (.[»êžìíFeß‚°j]FŽƒN_â ìtî#;ÍHvDׂ@~F½ìñ‹,yø€½»sÇ7È,ãK6½APú/Ùô†a^±]f´–M÷@XG›:»a(GêAgcb€ô°”6Ì8o9,¥ B“*tXJ1K rU]$L2tö Ç`Œp[4¼A¦TªŲlT#Š]¼?˜ ¬ý¨–7Èðd+¾aAØtÄ@çG9v5Pñc žp<¦èc xñ. ’”_2¦ ÈÉöAÏÀªÐ”i·’&d›Ys-‹ƒÜЫ`}Ïas{£Ÿ&[.ï—ÍbËôô¬LbÙrëÂ!‚2’ÍÎÕ¥Ø@\µéjûeSæfsK”;Φ<·ßAIí_-Ý·w ÂΩ8 ‹0T°áÓÛ~Wl^F›_Û:yâÓ÷»bqÕÒ™Õh¾S®÷-ÃäR9³ ÖÕ\µ 8`›A^XŒ«öfŠíFS®/%).ËK'´ ϳ . £_I;¬Nœý­•Ý@l¹â["1úYèÙÊMa« Æ’Z¸»Í«$θ†~²yɸ³ÑØrsmw2MŒþV¦­‚±åzMý0 ÞDÈ»Ï aèpã¢óÞùzë„E¢ ¸OaqPŒ“pM—c*U.íÌ«`Ngc˽µqA‘hy·§¶ -‰ƒ°Uh:VÁ«• CÈç/«6»Õ¿ÄAú+Ù^púÊqºñYü8Ôg£÷ΔÂTšm¾½Õ^pqÀƺ´-†§UÊaÇÄTi†Í¦­ Z…qwî› s{7ÕvÚœ`˜žêDFoF.ÌÉ$:Î…ÍÈ…9EÇ^P¾ö.™ŠÆËa0¤± ݹµZÐ| ÂòA±³±zX,GwÐ Üóê}±´IÞAd\‘‰ñÉAdv ÅÆàŽ™*A¸Å:f°¾ûˆ«ŒêáLî˜úb€ÆQ)? ˆÚ†5_\׬&Ô„£.ly½ê`òÀ( yÓ[`b@ÇlÌ.èéj”Ú³ˆèFÚ,…aA˜“ᯔ+l rª…9³!>À¨oA "4_’’s"ýV™ŽtÔ×ëf‡p en—µ äaAXunx‹Ý/éùÝ,#'·¥ ŠÄbxÌ¥ƒÙ!š"¹’rÆÝÒêÈÊ:>þðA(&µôÖpù@Ík‚µcô¬<ØxLÐn4}dêN…†‚Kéà11Š!Bo4$¦L¥üâÎÆäDÊõßϸ»‚q&ßšñÄÚ¬¾qH@–/H$grY¯›˜ŒD"‡Cä«6‡:¦…i¬Í­/±!P>° ¥¦g}·+ûÄ)¿ %³<+”@é·ziZ/¼ ½ Ã‚\m<² ¥§g/NÙ*”*N#ï—HÞèa†}Я²™>09‘MÕa«ÖcnïœÍåÙÎLq¨Ø6,ðîLq¨XÓÉf'#ýÀ¤¢,è— ZÕºv)°;›B󿻽1–áƒÍ7Z…:|° '@½U} Âj$nå*âTªq¨X¥‹¶.&( ù³¹³;D퇻¡à¼ÞzþÊt%ÚÒ™ÁôÒdül’¥3ƒ¹3.÷Æáar¢dý⃰8 áZZ; ä ®<Ÿ\ãVaòF{]Ý0„¸ ÜÞz‹{qÀN‡5d°ÛÙΡ¬Í^g;ޱ8û*§Ëá‘ÅAS?ãVÁÐÑݹ±òF·/P o4x:û>«•KJ—ñ ¬V.¦î!È;ÓAG×A¨WÿûqŒ\tó? ƒcõž ò€Q›âÔÀ°Æùv...Å„Q? à@ÊàE Ú…%ßd©  ,Ím†¿Å@•«­NPhÆ:9g@K`|µKò ´œ<ù^@ÛÐÀÉ‹˜´ _Ø`ÔiøÂƒ‚ gÃV~úà×@¦Ô¶fh?,CâQ»1¡„¡Ð8ݘPT$r½šÁ `›1›kA6¸_’§˜*Ë(ûœÝû° ;V¡Îá=”š±CÎÉ­ J˜Æ9ÕÆP>PÃN•)TVî¶ N—‘úØF8ËH” éTÉL©åÆ€.‹D‰ªP •ºÙ!Aç‚¡R5y¥zSªÞˆÌ8ø#’§´‘Ó7 CdŠ1djm¸|`˜P×q½#¹ù)?,¨˜ÐÍO‰ò1©/~JT(±€"Q©¤W©*µ¤Üq—wêÝ· iLêÕ¹/Äá!óÈn;= ûcLhn?= HÆÊÏs!Ђm¾´£VéÒ2ß¹AíÔ‰ ]¨W1Dffà^~s3‚r"—â[‡‡¬t³C‚ªõ‰ ]ªC¨8hÂ¥:„²ÀØà–êjºá!‘MI†‡DöÅ4¢Ý~b"Óx KÇÕÊ’›oAÐfF–îчaX@–‹–+"7"µ EnD&èÆ2RÁÀÝ¥¶«Ž¿†«Ò hׯ‚[«Pœ‡ÿ}kûã/?ý‡ñ?ÿxþñÿþé?ýçñïÿËø‘ÿ~üß¿ÿ)¯Ÿg{û9;nÇû»ÿð׿د‘þvÊ“ÿ‹>رäñkØ,‰ôõ[œÓí_ÚðHJòiÀ/a´a@6A»w~2`bXFÁÿi@2 öaÀÜLïüe@3U¢‡4Êîp”Æ“n|»ïÔ(Fµ1,˜ 4Öñyë¿`bÀDܸw7 G0nÝþóÿ*Šë½ÚúcÿüOÈ¿ýg«äôú&ŸüCûŸ1›äµö¹¿Œªg’ùì¯×–l\&yÎh­ÿò7çyþÁëþî§Qh4íÿð‡éñÃÒã›÷ÃF½Âù/éóƒéü«Ç|™~þ¹ó+þÝÞðÿá§ÿî/ endstream endobj 82 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 83 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 595.28000 841.89000] /BleedBox [0.00000 0.00000 595.28000 841.89000] /CropBox [0 0 595.28000 841.89000] /TrimBox [0.00000 0.00000 595.28000 841.89000] /ArtBox [0.00000 0.00000 595.28000 841.89000] /Rotate 0 /Contents 81 0 R /Group 82 0 R >> endobj 84 0 obj << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /XObject << /RE1 74 0 R /RE3 77 0 R /RE5 80 0 R >> /Font << /Fo0S0 30 0 R /Fo1S0 71 0 R >> /ExtGState << /RE0 73 0 R /RE2 76 0 R /RE4 79 0 R >> >> endobj 3 0 obj << /Type /Outlines /Count 0 >> endobj 4 0 obj << /Type /Pages /Kids [83 0 R ] /Count 1 /Resources 84 0 R >> endobj 5 0 obj << >> endobj 6 0 obj << /Fields [ ] >> endobj 7 0 obj << >> endobj 8 0 obj [] endobj xref 0 85 0000000000 65535 f 0000000015 00000 n 0000000207 00000 n 0000048889 00000 n 0000048935 00000 n 0000049012 00000 n 0000049033 00000 n 0000049067 00000 n 0000049089 00000 n 0000000410 00000 n 0000000682 00000 n 0000000941 00000 n 0000001435 00000 n 0000001896 00000 n 0000002561 00000 n 0000002765 00000 n 0000003466 00000 n 0000003908 00000 n 0000004380 00000 n 0000005038 00000 n 0000005249 00000 n 0000005414 00000 n 0000005974 00000 n 0000006377 00000 n 0000006819 00000 n 0000007407 00000 n 0000007811 00000 n 0000008224 00000 n 0000008316 00000 n 0000008520 00000 n 0000008634 00000 n 0000008834 00000 n 0000009095 00000 n 0000009258 00000 n 0000009566 00000 n 0000009880 00000 n 0000010413 00000 n 0000010910 00000 n 0000011150 00000 n 0000011374 00000 n 0000011540 00000 n 0000011725 00000 n 0000012037 00000 n 0000012264 00000 n 0000012680 00000 n 0000013294 00000 n 0000014045 00000 n 0000014296 00000 n 0000015058 00000 n 0000015538 00000 n 0000015995 00000 n 0000016488 00000 n 0000016970 00000 n 0000017341 00000 n 0000017970 00000 n 0000018337 00000 n 0000018546 00000 n 0000018876 00000 n 0000019042 00000 n 0000019580 00000 n 0000019969 00000 n 0000020394 00000 n 0000020914 00000 n 0000021385 00000 n 0000021705 00000 n 0000022417 00000 n 0000022810 00000 n 0000023210 00000 n 0000023457 00000 n 0000023625 00000 n 0000024034 00000 n 0000024219 00000 n 0000024421 00000 n 0000024491 00000 n 0000024596 00000 n 0000024950 00000 n 0000025020 00000 n 0000025125 00000 n 0000025480 00000 n 0000025550 00000 n 0000025655 00000 n 0000026010 00000 n 0000048320 00000 n 0000048374 00000 n 0000048675 00000 n trailer << /Size 85 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 49107 %%EOF cups-2.2.7/test/onepage-a4.ps000664 000765 000024 00002075773 13255074424 016443 0ustar00msweetstaff000000 000000 %!PS-Adobe-3.0 %XpdfVersion: 3.03 %%Creator: Scribus 1.4.0.rc5 %%Title: %%LanguageLevel: 3 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 595 842 0 () () %%BoundingBox: 0 0 595 842 %%Pages: 1 %%EndComments %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.03 0 %%Copyright: Copyright 1996-2011 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { /setpagedevice where { pop 2 dict begin /Policies 1 dict dup begin /PageSize 6 def end def { /Duplex true def } if currentdict end setpagedevice } { pop } ifelse } def /pdfSetupPaper { 2 array astore /setpagedevice where { pop 2 dict begin /PageSize exch def /ImagingBBox null def currentdict end setpagedevice } { pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def /pdfMakeFont16L3 { 1 index /CIDFont resourcestatus { pop pop 1 index /CIDFont findresource /CIDFontType known } { false } ifelse { 0 eq { /Identity-H } { /Identity-V } ifelse exch 1 array astore composefont pop } { pdfMakeFont16 } ifelse } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /xyshow where { pop /xyshow2 { dup length array 0 2 2 index length 1 sub { 2 index 1 index 2 copy get 3 1 roll 1 add get pdfTextMat dtransform 4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put } for exch pop xyshow } def }{ /xyshow2 { currentfont /FontType get 0 eq { 0 2 3 index length 1 sub { currentpoint 4 index 3 index 2 getinterval show moveto 2 copy get 2 index 3 2 roll 1 add get pdfTextMat dtransform rmoveto } for } { 0 1 3 index length 1 sub { currentpoint 4 index 3 index 1 getinterval show moveto 2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get pdfTextMat dtransform rmoveto } for } ifelse pop pop } def } ifelse /cshow where { pop /xycp { 0 3 2 roll { pop pop currentpoint 3 2 roll 1 string dup 0 4 3 roll put false charpath moveto 2 copy get 2 index 2 index 1 add get pdfTextMat dtransform rmoveto 2 add } exch cshow pop pop } def }{ /xycp { currentfont /FontType get 0 eq { 0 2 3 index length 1 sub { currentpoint 4 index 3 index 2 getinterval false charpath moveto 2 copy get 2 index 3 2 roll 1 add get pdfTextMat dtransform rmoveto } for } { 0 1 3 index length 1 sub { currentpoint 4 index 3 index 1 getinterval false charpath moveto 2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get pdfTextMat dtransform rmoveto } for } ifelse pop pop } def } ifelse /Tj { fCol 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 4 2 roll pdfTextRender 1 and 0 eq { 2 copy xyshow2 } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 3 index 3 index moveto 2 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse xycp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 4 2 roll moveto xycp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { pop pop pop pop } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { 0.001 mul pdfFontSize mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2/3 image operators /pdfImBuf 100 string def /pdfImStr { 2 copy exch length lt { 2 copy get exch 1 add exch } { () } ifelse } def /skipEOD { { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfIm { image skipEOD } def /pdfMask { /ReusableStreamDecode filter skipEOD /maskStream exch def } def /pdfMaskEnd { maskStream closefile } def /pdfMaskInit { /maskArray exch def /maskIdx 0 def } def /pdfMaskSrc { maskIdx maskArray length lt { maskArray maskIdx get /maskIdx maskIdx 1 add def } { () } ifelse } def /pdfImM { fCol imagemask skipEOD } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 2 lt { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource /CIDInit /ProcSet findresource begin 10 dict begin begincmap /CMapType 1 def /CMapName /Identity-H def /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Identity) def /Supplement 0 def end def 1 begincodespacerange <0000> endcodespacerange 0 usefont 1 begincidrange <0000> 0 endcidrange endcmap currentdict CMapName exch /CMap defineresource pop end 10 dict begin begincmap /CMapType 1 def /CMapName /Identity-V def /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Identity) def /Supplement 0 def end def /WMode 1 def 1 begincodespacerange <0000> endcodespacerange 0 usefont 1 begincidrange <0000> 0 endcidrange endcmap currentdict CMapName exch /CMap defineresource pop end end %%EndProlog %%BeginSetup xpdf begin %%BeginResource: font T3_30_0 8 dict begin /FontType 3 def /FontMatrix [0.001 0 0 0.001 0 0] def /FontBBox [0 -210 824 728] def /Encoding 256 array def 0 1 255 { Encoding exch /.notdef put } for /BuildGlyph { exch /CharProcs get exch 2 copy known not { pop /.notdef } if get exec } bind def /BuildChar { 1 index /Encoding get exch get 1 index /BuildGlyph get exec } bind def /CharProcs 18 dict def CharProcs begin /four { 533 0 19 0 533 719 setcachedevice q 311.53125 0 m 311.53125 0 311.53125 144.04688 311.53125 144.04688 c 311.53125 144.04688 18.5625 144.04688 18.5625 144.04688 c 18.5625 144.04688 18.5625 264.15625 18.5625 264.15625 c 18.5625 264.15625 329.10938 718.75 329.10938 718.75 c 329.10938 718.75 444.34375 718.75 444.34375 718.75 c 444.34375 718.75 444.34375 264.65625 444.34375 264.65625 c 444.34375 264.65625 533.20312 264.65625 533.20312 264.65625 c 533.20312 264.65625 533.20312 144.04688 533.20312 144.04688 c 533.20312 144.04688 444.34375 144.04688 444.34375 144.04688 c 444.34375 144.04688 444.34375 0 444.34375 0 c 444.34375 0 311.53125 0 311.53125 0 c 311.53125 0 311.53125 0 311.53125 0 c h 311.53125 264.65625 m 311.53125 264.65625 311.53125 509.28125 311.53125 509.28125 c 311.53125 509.28125 146.96875 264.65625 146.96875 264.65625 c 146.96875 264.65625 311.53125 264.65625 311.53125 264.65625 c h f* Q } def /A { 718 0 0 0 718 716 setcachedevice q 718.26562 0 m 718.26562 0 561.03125 0 561.03125 0 c 561.03125 0 498.53125 162.59375 498.53125 162.59375 c 498.53125 162.59375 212.40625 162.59375 212.40625 162.59375 c 212.40625 162.59375 153.32812 0 153.32812 0 c 153.32812 0 0 0 0 0 c 0 0 278.8125 715.82812 278.8125 715.82812 c 278.8125 715.82812 431.64062 715.82812 431.64062 715.82812 c 431.64062 715.82812 718.26562 0 718.26562 0 c 718.26562 0 718.26562 0 718.26562 0 c h 452.15625 283.20312 m 452.15625 283.20312 353.51562 548.82812 353.51562 548.82812 c 353.51562 548.82812 256.84375 283.20312 256.84375 283.20312 c 256.84375 283.20312 452.15625 283.20312 452.15625 283.20312 c h f* Q } def /D { 672 0 72 0 672 716 setcachedevice q 72.26562 715.82812 m 72.26562 715.82812 336.42188 715.82812 336.42188 715.82812 c 336.42188 715.82812 425.78125 715.82812 472.65625 702.15625 c 472.65625 702.15625 535.64062 683.59375 580.5625 636.23438 c 580.5625 636.23438 625.48438 588.875 648.92188 520.26562 c 648.92188 520.26562 672.35938 451.65625 672.35938 351.07812 c 672.35938 351.07812 672.35938 262.70312 650.39062 198.73438 c 650.39062 198.73438 623.53125 120.60938 573.73438 72.26562 c 573.73438 72.26562 536.14062 35.64062 472.17188 15.14063 c 472.17188 15.14063 424.3125 0 344.23438 0 c 344.23438 0 72.26562 0 72.26562 0 c 72.26562 0 72.26562 715.82812 72.26562 715.82812 c 72.26562 715.82812 72.26562 715.82812 72.26562 715.82812 c h 216.79688 594.73438 m 216.79688 594.73438 216.79688 120.60938 216.79688 120.60938 c 216.79688 120.60938 324.70312 120.60938 324.70312 120.60938 c 324.70312 120.60938 385.25 120.60938 412.10938 127.4375 c 412.10938 127.4375 447.26562 136.23438 470.45313 157.21875 c 470.45313 157.21875 493.65625 178.21875 508.29688 226.3125 c 508.29688 226.3125 522.95312 274.42188 522.95312 357.42188 c 522.95312 357.42188 522.95312 440.4375 508.29688 484.85938 c 508.29688 484.85938 493.65625 529.29688 467.28125 554.20312 c 467.28125 554.20312 440.92188 579.10938 400.39062 587.89062 c 400.39062 587.89062 370.125 594.73438 281.73438 594.73438 c 281.73438 594.73438 216.79688 594.73438 216.79688 594.73438 c h f* Q } def /P { 621 0 73 0 621 716 setcachedevice q 72.75 0 m 72.75 0 72.75 715.82812 72.75 715.82812 c 72.75 715.82812 304.6875 715.82812 304.6875 715.82812 c 304.6875 715.82812 436.53125 715.82812 476.5625 705.07812 c 476.5625 705.07812 538.09375 688.96875 579.59375 635.01562 c 579.59375 635.01562 621.09375 581.0625 621.09375 495.60938 c 621.09375 495.60938 621.09375 429.6875 597.17188 384.76562 c 597.17188 384.76562 573.25 339.84375 536.375 314.20312 c 536.375 314.20312 499.51562 288.57812 461.42188 280.28125 c 461.42188 280.28125 409.67188 270.01562 311.53125 270.01562 c 311.53125 270.01562 217.28125 270.01562 217.28125 270.01562 c 217.28125 270.01562 217.28125 0 217.28125 0 c 217.28125 0 72.75 0 72.75 0 c 72.75 0 72.75 0 72.75 0 c h 217.28125 594.73438 m 217.28125 594.73438 217.28125 391.60938 217.28125 391.60938 c 217.28125 391.60938 296.39062 391.60938 296.39062 391.60938 c 296.39062 391.60938 381.84375 391.60938 410.64062 402.82812 c 410.64062 402.82812 439.45312 414.0625 455.8125 437.98438 c 455.8125 437.98438 472.17188 461.92188 472.17188 493.65625 c 472.17188 493.65625 472.17188 532.71875 449.21875 558.10938 c 449.21875 558.10938 426.26562 583.5 391.10938 589.84375 c 391.10938 589.84375 365.23438 594.73438 287.10938 594.73438 c 287.10938 594.73438 217.28125 594.73438 217.28125 594.73438 c h f* Q } def /S { 618 0 36 -13 618 728 setcachedevice q 36.14062 232.90625 m 36.14062 232.90625 176.76562 246.57812 176.76562 246.57812 c 176.76562 246.57812 189.45312 175.78125 228.26562 142.57812 c 228.26562 142.57812 267.09375 109.375 333.01562 109.375 c 333.01562 109.375 402.82812 109.375 438.23438 138.90625 c 438.23438 138.90625 473.64062 168.45312 473.64062 208.01562 c 473.64062 208.01562 473.64062 233.40625 458.73438 251.21875 c 458.73438 251.21875 443.84375 269.04688 406.73438 282.23438 c 406.73438 282.23438 381.34375 291.01562 291.01562 313.48438 c 291.01562 313.48438 174.8125 342.28125 127.9375 384.28125 c 127.9375 384.28125 62.01562 443.35938 62.01562 528.32812 c 62.01562 528.32812 62.01562 583.01562 93.01562 630.60938 c 93.01562 630.60938 124.03125 678.21875 182.375 703.125 c 182.375 703.125 240.71875 728.03125 323.25 728.03125 c 323.25 728.03125 458.01562 728.03125 526.125 668.9375 c 526.125 668.9375 594.23438 609.85938 597.65625 511.23438 c 597.65625 511.23438 453.125 504.89062 453.125 504.89062 c 453.125 504.89062 443.84375 560.0625 413.32813 584.23438 c 413.32813 584.23438 382.8125 608.40625 321.78125 608.40625 c 321.78125 608.40625 258.79688 608.40625 223.14062 582.51562 c 223.14062 582.51562 200.20312 565.92188 200.20312 538.09375 c 200.20312 538.09375 200.20312 512.70312 221.6875 494.625 c 221.6875 494.625 249.03125 471.6875 354.5 446.78125 c 354.5 446.78125 459.96875 421.875 510.5 395.26562 c 510.5 395.26562 561.03125 368.65625 589.59375 322.51562 c 589.59375 322.51562 618.17188 276.375 618.17188 208.5 c 618.17188 208.5 618.17188 146.96875 583.98438 93.25 c 583.98438 93.25 549.8125 39.54687 487.3125 13.42188 c 487.3125 13.42188 424.8125 -12.70312 331.54688 -12.70312 c 331.54688 -12.70312 195.79688 -12.70312 123.04688 50.04688 c 123.04688 50.04688 50.29688 112.79688 36.14062 232.90625 c h f* Q } def /T { 590 0 21 0 590 716 setcachedevice q 233.89062 0 m 233.89062 0 233.89062 594.73438 233.89062 594.73438 c 233.89062 594.73438 21.48438 594.73438 21.48438 594.73438 c 21.48438 594.73438 21.48438 715.82812 21.48438 715.82812 c 21.48438 715.82812 590.32812 715.82812 590.32812 715.82812 c 590.32812 715.82812 590.32812 594.73438 590.32812 594.73438 c 590.32812 594.73438 378.42188 594.73438 378.42188 594.73438 c 378.42188 594.73438 378.42188 0 378.42188 0 c 378.42188 0 233.89062 0 233.89062 0 c h f* Q } def /a { 522 0 36 -12 522 530 setcachedevice q 174.3125 360.35938 m 174.3125 360.35938 49.8125 382.8125 49.8125 382.8125 c 49.8125 382.8125 70.79688 458.01562 122.0625 494.14062 c 122.0625 494.14062 173.34375 530.28125 274.42188 530.28125 c 274.42188 530.28125 366.21875 530.28125 411.14062 508.54688 c 411.14062 508.54688 456.0625 486.8125 474.35938 453.35938 c 474.35938 453.35938 492.67188 419.92188 492.67188 330.5625 c 492.67188 330.5625 491.21875 170.40625 491.21875 170.40625 c 491.21875 170.40625 491.21875 102.04687 497.79688 69.57812 c 497.79688 69.57812 504.39062 37.10938 522.46875 0 c 522.46875 0 386.71875 0 386.71875 0 c 386.71875 0 381.34375 13.67188 373.53125 40.53125 c 373.53125 40.53125 370.125 52.73438 368.65625 56.64062 c 368.65625 56.64062 333.5 22.46875 293.45312 5.375 c 293.45312 5.375 253.42188 -11.71875 208.01562 -11.71875 c 208.01562 -11.71875 127.9375 -11.71875 81.78125 31.73437 c 81.78125 31.73437 35.64062 75.20312 35.64062 141.60938 c 35.64062 141.60938 35.64062 185.54688 56.64062 219.96875 c 56.64062 219.96875 77.64062 254.39062 115.48438 272.70312 c 115.48438 272.70312 153.32812 291.01562 224.60938 304.6875 c 224.60938 304.6875 320.79688 322.75 357.90625 338.375 c 357.90625 338.375 357.90625 352.04688 357.90625 352.04688 c 357.90625 352.04688 357.90625 391.60938 338.375 408.45312 c 338.375 408.45312 318.84375 425.29688 264.65625 425.29688 c 264.65625 425.29688 228.03125 425.29688 207.51562 410.89062 c 207.51562 410.89062 187.01562 396.48438 174.3125 360.35938 c 174.3125 360.35938 174.3125 360.35938 174.3125 360.35938 c h 357.90625 249.03125 m 357.90625 249.03125 331.54688 240.23438 274.40625 228.03125 c 274.40625 228.03125 217.28125 215.82812 199.70312 204.10938 c 199.70312 204.10938 172.85938 185.0625 172.85938 155.76563 c 172.85938 155.76563 172.85938 126.95312 194.34375 105.95312 c 194.34375 105.95312 215.82812 84.96875 249.03125 84.96875 c 249.03125 84.96875 286.14062 84.96875 319.82812 109.375 c 319.82812 109.375 344.73438 127.9375 352.54688 154.78125 c 352.54688 154.78125 357.90625 172.35937 357.90625 221.6875 c 357.90625 221.6875 357.90625 249.03125 357.90625 249.03125 c h f* Q } def /c { 531 0 42 -12 531 530 setcachedevice q 523.92188 365.23438 m 523.92188 365.23438 388.67188 340.82812 388.67188 340.82812 c 388.67188 340.82812 381.84375 381.34375 357.67188 401.84375 c 357.67188 401.84375 333.5 422.35938 294.92188 422.35938 c 294.92188 422.35938 243.65625 422.35938 213.14062 386.95312 c 213.14062 386.95312 182.625 351.5625 182.625 268.5625 c 182.625 268.5625 182.625 176.26562 213.625 138.17188 c 213.625 138.17188 244.625 100.09375 296.875 100.09375 c 296.875 100.09375 335.9375 100.09375 360.84375 122.3125 c 360.84375 122.3125 385.75 144.53125 396 198.73438 c 396 198.73438 530.76562 175.78125 530.76562 175.78125 c 530.76562 175.78125 509.76562 83.01562 450.1875 35.64062 c 450.1875 35.64062 390.625 -11.71875 290.53125 -11.71875 c 290.53125 -11.71875 176.76562 -11.71875 109.125 60.0625 c 109.125 60.0625 41.5 131.84375 41.5 258.79688 c 41.5 258.79688 41.5 387.20312 109.375 458.73438 c 109.375 458.73438 177.25 530.28125 292.96875 530.28125 c 292.96875 530.28125 387.70312 530.28125 443.60938 489.5 c 443.60938 489.5 499.51562 448.73438 523.92188 365.23438 c h f* Q } def /e { 519 0 32 -12 519 530 setcachedevice q 372.07812 165.04688 m 372.07812 165.04688 508.79688 142.09375 508.79688 142.09375 c 508.79688 142.09375 482.42188 66.89062 425.53125 27.57812 c 425.53125 27.57812 368.65625 -11.71875 283.20312 -11.71875 c 283.20312 -11.71875 147.95312 -11.71875 83.01562 76.65625 c 83.01562 76.65625 31.73437 147.46875 31.73437 255.375 c 31.73437 255.375 31.73437 384.28125 99.10938 457.28125 c 99.10938 457.28125 166.5 530.28125 269.53125 530.28125 c 269.53125 530.28125 385.25 530.28125 452.14062 453.85938 c 452.14062 453.85938 519.04688 377.4375 516.10938 219.73438 c 516.10938 219.73438 172.35938 219.73438 172.35938 219.73438 c 172.35938 219.73438 173.82812 158.6875 205.5625 124.75 c 205.5625 124.75 237.3125 90.82812 284.67188 90.82812 c 284.67188 90.82812 316.89062 90.82812 338.85938 108.40625 c 338.85938 108.40625 360.84375 125.98438 372.07812 165.04688 c 372.07812 165.04688 372.07812 165.04688 372.07812 165.04688 c h 379.89062 303.71875 m 379.89062 303.71875 378.42188 363.28125 349.125 394.28125 c 349.125 394.28125 319.82812 425.29688 277.82812 425.29688 c 277.82812 425.29688 232.90625 425.29688 203.60938 392.57812 c 203.60938 392.57812 174.3125 359.85938 174.8125 303.71875 c 174.8125 303.71875 379.89062 303.71875 379.89062 303.71875 c h f* Q } def /g { 547 0 41 -210 547 530 setcachedevice q 59.07812 -34.1875 m 59.07812 -34.1875 215.82812 -53.21875 215.82812 -53.21875 c 215.82812 -53.21875 219.73438 -80.5625 233.89062 -90.82812 c 233.89062 -90.82812 253.42188 -105.46875 295.40625 -105.46875 c 295.40625 -105.46875 349.125 -105.46875 375.98438 -89.35938 c 375.98438 -89.35938 394.04688 -78.60938 403.32812 -54.6875 c 403.32812 -54.6875 409.67188 -37.59375 409.67188 8.29687 c 409.67188 8.29687 409.67188 83.98438 409.67188 83.98438 c 409.67188 83.98438 348.14062 0 254.39062 0 c 254.39062 0 149.90625 0 88.875 88.375 c 88.875 88.375 41.01562 158.20312 41.01562 262.20312 c 41.01562 262.20312 41.01562 392.57812 103.75 461.42188 c 103.75 461.42188 166.5 530.28125 259.76562 530.28125 c 259.76562 530.28125 355.95312 530.28125 418.45312 445.79688 c 418.45312 445.79688 418.45312 518.5625 418.45312 518.5625 c 418.45312 518.5625 546.875 518.5625 546.875 518.5625 c 546.875 518.5625 546.875 53.21875 546.875 53.21875 c 546.875 53.21875 546.875 -38.57812 531.73438 -83.98438 c 531.73438 -83.98438 516.60938 -129.39062 489.26562 -155.26562 c 489.26562 -155.26562 461.92188 -181.15625 416.26563 -195.79688 c 416.26563 -195.79688 370.60938 -210.45312 300.78125 -210.45312 c 300.78125 -210.45312 168.95312 -210.45312 113.76562 -165.28125 c 113.76562 -165.28125 58.59375 -120.125 58.59375 -50.78125 c 58.59375 -50.78125 58.59375 -43.95312 59.07812 -34.1875 c 59.07812 -34.1875 59.07812 -34.1875 59.07812 -34.1875 c h 181.64062 270.01562 m 181.64062 270.01562 181.64062 187.5 213.625 149.17188 c 213.625 149.17188 245.60938 110.84375 292.48438 110.84375 c 292.48438 110.84375 342.78125 110.84375 377.4375 150.14062 c 377.4375 150.14062 412.10938 189.45312 412.10938 266.60938 c 412.10938 266.60938 412.10938 347.17188 378.90625 386.23438 c 378.90625 386.23438 345.70312 425.29688 294.92188 425.29688 c 294.92188 425.29688 245.60938 425.29688 213.625 386.96875 c 213.625 386.96875 181.64062 348.64062 181.64062 270.01562 c h f* Q } def /i { 209 0 72 0 209 716 setcachedevice q 71.78125 588.875 m 71.78125 588.875 71.78125 715.82812 71.78125 715.82812 c 71.78125 715.82812 208.98438 715.82812 208.98438 715.82812 c 208.98438 715.82812 208.98438 588.875 208.98438 588.875 c 208.98438 588.875 71.78125 588.875 71.78125 588.875 c 71.78125 588.875 71.78125 588.875 71.78125 588.875 c h 71.78125 0 m 71.78125 0 71.78125 518.5625 71.78125 518.5625 c 71.78125 518.5625 208.98438 518.5625 208.98438 518.5625 c 208.98438 518.5625 208.98438 0 208.98438 0 c 208.98438 0 71.78125 0 71.78125 0 c h f* Q } def /l { 209 0 72 0 209 716 setcachedevice q 71.78125 0 m 71.78125 0 71.78125 715.82812 71.78125 715.82812 c 71.78125 715.82812 208.98438 715.82812 208.98438 715.82812 c 208.98438 715.82812 208.98438 0 208.98438 0 c 208.98438 0 71.78125 0 71.78125 0 c h f* Q } def /m { 824 0 62 0 824 530 setcachedevice q 61.53125 518.5625 m 61.53125 518.5625 187.98438 518.5625 187.98438 518.5625 c 187.98438 518.5625 187.98438 447.75 187.98438 447.75 c 187.98438 447.75 255.85938 530.28125 349.60938 530.28125 c 349.60938 530.28125 399.42188 530.28125 436.03125 509.76562 c 436.03125 509.76562 472.65625 489.26562 496.09375 447.75 c 496.09375 447.75 530.28125 489.26562 569.82812 509.76562 c 569.82812 509.76562 609.375 530.28125 654.29688 530.28125 c 654.29688 530.28125 711.42188 530.28125 750.96875 507.07813 c 750.96875 507.07813 790.53125 483.89062 810.0625 438.96875 c 810.0625 438.96875 824.21875 405.76562 824.21875 331.54688 c 824.21875 331.54688 824.21875 0 824.21875 0 c 824.21875 0 687.01562 0 687.01562 0 c 687.01562 0 687.01562 296.39062 687.01562 296.39062 c 687.01562 296.39062 687.01562 373.53125 672.85938 396 c 672.85938 396 653.8125 425.29688 614.26562 425.29688 c 614.26562 425.29688 585.45312 425.29688 560.0625 407.71875 c 560.0625 407.71875 534.67188 390.14062 523.4375 356.20312 c 523.4375 356.20312 512.20312 322.26562 512.20312 249.03125 c 512.20312 249.03125 512.20312 0 512.20312 0 c 512.20312 0 375 0 375 0 c 375 0 375 284.1875 375 284.1875 c 375 284.1875 375 359.85938 367.67188 381.82812 c 367.67188 381.82812 360.35938 403.8125 344.96875 414.54688 c 344.96875 414.54688 329.59375 425.29688 303.21875 425.29688 c 303.21875 425.29688 271.48438 425.29688 246.09375 408.20312 c 246.09375 408.20312 220.70312 391.10938 209.71875 358.875 c 209.71875 358.875 198.73438 326.65625 198.73438 251.95312 c 198.73438 251.95312 198.73438 0 198.73438 0 c 198.73438 0 61.53125 0 61.53125 0 c 61.53125 0 61.53125 518.5625 61.53125 518.5625 c h f* Q } def /n { 543 0 71 0 543 530 setcachedevice q 543.45312 0 m 543.45312 0 406.25 0 406.25 0 c 406.25 0 406.25 264.65625 406.25 264.65625 c 406.25 264.65625 406.25 348.64062 397.45312 373.29688 c 397.45312 373.29688 388.67188 397.95312 368.89062 411.625 c 368.89062 411.625 349.125 425.29688 321.29688 425.29688 c 321.29688 425.29688 285.64062 425.29688 257.3125 405.76562 c 257.3125 405.76562 229 386.23438 218.5 354 c 218.5 354 208.01562 321.78125 208.01562 234.85938 c 208.01562 234.85938 208.01562 0 208.01562 0 c 208.01562 0 70.79688 0 70.79688 0 c 70.79688 0 70.79688 518.5625 70.79688 518.5625 c 70.79688 518.5625 198.25 518.5625 198.25 518.5625 c 198.25 518.5625 198.25 442.39062 198.25 442.39062 c 198.25 442.39062 266.10938 530.28125 369.14062 530.28125 c 369.14062 530.28125 414.54688 530.28125 452.14062 513.92188 c 452.14062 513.92188 489.75 497.5625 509.03125 472.17188 c 509.03125 472.17188 528.32812 446.78125 535.89062 414.54688 c 535.89062 414.54688 543.45312 382.32812 543.45312 322.26562 c 543.45312 322.26562 543.45312 0 543.45312 0 c h f* Q } def /o { 575 0 40 -12 575 530 setcachedevice q 40.04688 266.60938 m 40.04688 266.60938 40.04688 334.96875 73.73438 398.92188 c 73.73438 398.92188 107.42188 462.89062 169.1875 496.57812 c 169.1875 496.57812 230.95312 530.28125 307.125 530.28125 c 307.125 530.28125 424.8125 530.28125 500 453.85938 c 500 453.85938 575.20312 377.4375 575.20312 260.75 c 575.20312 260.75 575.20312 143.0625 499.26563 65.67188 c 499.26563 65.67188 423.34375 -11.71875 308.10938 -11.71875 c 308.10938 -11.71875 236.8125 -11.71875 172.10938 20.5 c 172.10938 20.5 107.42188 52.73438 73.73438 114.98438 c 73.73438 114.98438 40.04688 177.25 40.04688 266.60938 c 40.04688 266.60938 40.04688 266.60938 40.04688 266.60938 c h 180.67188 259.28125 m 180.67188 259.28125 180.67188 182.125 217.28125 141.10937 c 217.28125 141.10937 253.90625 100.09375 307.625 100.09375 c 307.625 100.09375 361.32812 100.09375 397.70312 141.10937 c 397.70312 141.10937 434.07812 182.125 434.07812 260.25 c 434.07812 260.25 434.07812 336.42188 397.70312 377.4375 c 397.70312 377.4375 361.32812 418.45312 307.625 418.45312 c 307.625 418.45312 253.90625 418.45312 217.28125 377.4375 c 217.28125 377.4375 180.67188 336.42188 180.67188 259.28125 c h f* Q } def /s { 508 0 23 -12 508 530 setcachedevice q 23.4375 147.95313 m 23.4375 147.95313 161.14062 168.95312 161.14062 168.95312 c 161.14062 168.95312 169.92188 128.90625 196.78125 108.15625 c 196.78125 108.15625 223.64062 87.40625 271.96875 87.40625 c 271.96875 87.40625 325.20312 87.40625 352.04688 106.9375 c 352.04688 106.9375 370.125 120.60938 370.125 143.5625 c 370.125 143.5625 370.125 159.1875 360.35938 169.4375 c 360.35938 169.4375 350.09375 179.20313 314.45312 187.5 c 314.45312 187.5 148.4375 224.125 104 254.39062 c 104 254.39062 42.48438 296.39062 42.48438 371.09375 c 42.48438 371.09375 42.48438 438.48438 95.70312 484.375 c 95.70312 484.375 148.92188 530.28125 260.75 530.28125 c 260.75 530.28125 367.1875 530.28125 418.9375 495.60938 c 418.9375 495.60938 470.70312 460.9375 490.23438 393.0625 c 490.23438 393.0625 360.84375 369.14062 360.84375 369.14062 c 360.84375 369.14062 352.54688 399.42188 329.34375 415.53125 c 329.34375 415.53125 306.15625 431.64062 263.1875 431.64062 c 263.1875 431.64062 208.98438 431.64062 185.54688 416.5 c 185.54688 416.5 169.92188 405.76562 169.92188 388.67188 c 169.92188 388.67188 169.92188 374.03125 183.59375 363.76562 c 183.59375 363.76562 202.15625 350.09375 311.76562 325.1875 c 311.76562 325.1875 421.39062 300.29688 464.84375 264.15625 c 464.84375 264.15625 507.8125 227.54688 507.8125 162.10938 c 507.8125 162.10938 507.8125 90.82812 448.23438 39.54687 c 448.23438 39.54687 388.67188 -11.71875 271.96875 -11.71875 c 271.96875 -11.71875 166.01562 -11.71875 104.25 31.25 c 104.25 31.25 42.48438 74.21875 23.4375 147.95313 c h f* Q } def /t { 321 0 15 -12 321 702 setcachedevice q 309.57812 518.5625 m 309.57812 518.5625 309.57812 409.1875 309.57812 409.1875 c 309.57812 409.1875 215.82812 409.1875 215.82812 409.1875 c 215.82812 409.1875 215.82812 200.20312 215.82812 200.20312 c 215.82812 200.20312 215.82812 136.71875 218.5 126.21875 c 218.5 126.21875 221.1875 115.71875 230.70312 108.875 c 230.70312 108.875 240.23438 102.04687 253.90625 102.04687 c 253.90625 102.04687 272.95312 102.04687 309.07812 115.23438 c 309.07812 115.23438 320.79688 8.79688 320.79688 8.79688 c 320.79688 8.79688 272.95312 -11.71875 212.40625 -11.71875 c 212.40625 -11.71875 175.29688 -11.71875 145.5 0.73438 c 145.5 0.73438 115.71875 13.1875 101.79688 32.95312 c 101.79688 32.95312 87.89062 52.73438 82.51562 86.42187 c 82.51562 86.42187 78.125 110.35938 78.125 183.10938 c 78.125 183.10938 78.125 409.1875 78.125 409.1875 c 78.125 409.1875 15.14062 409.1875 15.14062 409.1875 c 15.14062 409.1875 15.14062 518.5625 15.14062 518.5625 c 15.14062 518.5625 78.125 518.5625 78.125 518.5625 c 78.125 518.5625 78.125 621.57812 78.125 621.57812 c 78.125 621.57812 215.82812 701.65625 215.82812 701.65625 c 215.82812 701.65625 215.82812 518.5625 215.82812 518.5625 c 215.82812 518.5625 309.57812 518.5625 309.57812 518.5625 c h f* Q } def /u { 541 0 69 -12 541 519 setcachedevice q 413.09375 0 m 413.09375 0 413.09375 77.64063 413.09375 77.64063 c 413.09375 77.64063 384.76562 36.14062 338.625 12.20312 c 338.625 12.20312 292.48438 -11.71875 241.21875 -11.71875 c 241.21875 -11.71875 188.96875 -11.71875 147.45312 11.23438 c 147.45312 11.23438 105.95312 34.1875 87.39062 75.6875 c 87.39062 75.6875 68.84375 117.1875 68.84375 190.4375 c 68.84375 190.4375 68.84375 518.5625 68.84375 518.5625 c 68.84375 518.5625 206.0625 518.5625 206.0625 518.5625 c 206.0625 518.5625 206.0625 280.28125 206.0625 280.28125 c 206.0625 280.28125 206.0625 170.90625 213.625 146.23438 c 213.625 146.23438 221.1875 121.57812 241.20312 107.17188 c 241.20312 107.17188 261.23438 92.78125 292 92.78125 c 292 92.78125 327.15625 92.78125 354.98438 112.0625 c 354.98438 112.0625 382.8125 131.34375 393.0625 159.90625 c 393.0625 159.90625 403.32812 188.48438 403.32812 299.8125 c 403.32812 299.8125 403.32812 518.5625 403.32812 518.5625 c 403.32812 518.5625 540.53125 518.5625 540.53125 518.5625 c 540.53125 518.5625 540.53125 0 540.53125 0 c 540.53125 0 413.09375 0 413.09375 0 c h f* Q } def end currentdict end /T3_30_0 exch definefont pop %%EndResource /F30_0 /T3_30_0 1 1 [ /four/A/D/P/S/T/a/c /e/g/i/l/m/n/o/s /t/u/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/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 /quoteleft/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/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont %%BeginResource: font T3_71_0 8 dict begin /FontType 3 def /FontMatrix [0.001 0 0 0.001 0 0] def /FontBBox [-46 -210 769 729] def /Encoding 256 array def 0 1 255 { Encoding exch /.notdef put } for /BuildGlyph { exch /CharProcs get exch 2 copy known not { pop /.notdef } if get exec } bind def /BuildChar { 1 index /Encoding get exch get 1 index /BuildGlyph get exec } bind def /CharProcs 37 dict def CharProcs begin /comma { 189 0 83 -142 189 100 setcachedevice q 88.875 0 m 88.875 0 88.875 100.09375 88.875 100.09375 c 88.875 100.09375 188.96875 100.09375 188.96875 100.09375 c 188.96875 100.09375 188.96875 0 188.96875 0 c 188.96875 0 188.96875 -55.17188 169.4375 -89.10938 c 169.4375 -89.10938 149.90625 -123.04688 107.42188 -141.60938 c 107.42188 -141.60938 83.01562 -104 83.01562 -104 c 83.01562 -104 110.84375 -91.79688 124.01562 -68.10938 c 124.01562 -68.10938 137.20312 -44.4375 138.67188 0 c 138.67188 0 88.875 0 88.875 0 c h f* Q } def /period { 191 0 91 0 191 100 setcachedevice q 90.82812 0 m 90.82812 0 90.82812 100.09375 90.82812 100.09375 c 90.82812 100.09375 190.92188 100.09375 190.92188 100.09375 c 190.92188 100.09375 190.92188 0 190.92188 0 c 190.92188 0 90.82812 0 90.82812 0 c h f* Q } def /semicolon { 189 0 83 -142 189 519 setcachedevice q 88.875 418.45312 m 88.875 418.45312 88.875 518.5625 88.875 518.5625 c 88.875 518.5625 188.96875 518.5625 188.96875 518.5625 c 188.96875 518.5625 188.96875 418.45312 188.96875 418.45312 c 188.96875 418.45312 88.875 418.45312 88.875 418.45312 c 88.875 418.45312 88.875 418.45312 88.875 418.45312 c h 88.875 0 m 88.875 0 88.875 100.09375 88.875 100.09375 c 88.875 100.09375 188.96875 100.09375 188.96875 100.09375 c 188.96875 100.09375 188.96875 0 188.96875 0 c 188.96875 0 188.96875 -55.17188 169.4375 -89.10938 c 169.4375 -89.10938 149.90625 -123.04688 107.42188 -141.60938 c 107.42188 -141.60938 83.01562 -104 83.01562 -104 c 83.01562 -104 110.84375 -91.79688 124.01562 -68.10938 c 124.01562 -68.10938 137.20312 -44.4375 138.67188 0 c 138.67188 0 88.875 0 88.875 0 c h f* Q } def /A { 668 0 -1 0 668 716 setcachedevice q -1.46875 0 m -1.46875 0 273.4375 715.82812 273.4375 715.82812 c 273.4375 715.82812 375.48438 715.82812 375.48438 715.82812 c 375.48438 715.82812 668.45312 0 668.45312 0 c 668.45312 0 560.54688 0 560.54688 0 c 560.54688 0 477.04688 216.79688 477.04688 216.79688 c 477.04688 216.79688 177.73438 216.79688 177.73438 216.79688 c 177.73438 216.79688 99.125 0 99.125 0 c 99.125 0 -1.46875 0 -1.46875 0 c -1.46875 0 -1.46875 0 -1.46875 0 c h 205.07812 293.95312 m 205.07812 293.95312 447.75 293.95312 447.75 293.95312 c 447.75 293.95312 373.04688 492.1875 373.04688 492.1875 c 373.04688 492.1875 338.875 582.51562 322.26562 640.625 c 322.26562 640.625 308.59375 571.78125 283.6875 503.90625 c 283.6875 503.90625 205.07812 293.95312 205.07812 293.95312 c h f* Q } def /C { 683 0 50 -12 683 728 setcachedevice q 587.89062 250.98438 m 587.89062 250.98438 682.625 227.04688 682.625 227.04688 c 682.625 227.04688 652.82812 110.35938 575.4375 49.07812 c 575.4375 49.07812 498.04688 -12.20312 386.23438 -12.20312 c 386.23438 -12.20312 270.51562 -12.20312 198 34.90625 c 198 34.90625 125.48438 82.03125 87.64062 171.39063 c 87.64062 171.39063 49.8125 260.75 49.8125 363.28125 c 49.8125 363.28125 49.8125 475.09375 92.53125 558.34375 c 92.53125 558.34375 135.25 641.60938 214.10938 684.8125 c 214.10938 684.8125 292.96875 728.03125 387.70312 728.03125 c 387.70312 728.03125 495.125 728.03125 568.35938 673.34375 c 568.35938 673.34375 641.60938 618.65625 670.40625 519.53125 c 670.40625 519.53125 577.15625 497.5625 577.15625 497.5625 c 577.15625 497.5625 552.25 575.6875 504.875 611.32812 c 504.875 611.32812 457.51562 646.96875 385.75 646.96875 c 385.75 646.96875 303.21875 646.96875 247.79688 607.42188 c 247.79688 607.42188 192.39063 567.875 169.92188 501.21875 c 169.92188 501.21875 147.46875 434.57812 147.46875 363.76562 c 147.46875 363.76562 147.46875 272.46875 174.07812 204.34375 c 174.07812 204.34375 200.6875 136.23438 256.82812 102.53125 c 256.82812 102.53125 312.98438 68.84375 378.42188 68.84375 c 378.42188 68.84375 458.01562 68.84375 513.1875 114.73438 c 513.1875 114.73438 568.35938 160.64062 587.89062 250.98438 c h f* Q } def /D { 669 0 77 0 669 716 setcachedevice q 77.15625 0 m 77.15625 0 77.15625 715.82812 77.15625 715.82812 c 77.15625 715.82812 323.73438 715.82812 323.73438 715.82812 c 323.73438 715.82812 407.23438 715.82812 451.17188 705.5625 c 451.17188 705.5625 512.70312 691.40625 556.15625 654.29688 c 556.15625 654.29688 612.79688 606.45312 640.875 531.98438 c 640.875 531.98438 668.95312 457.51562 668.95312 361.8125 c 668.95312 361.8125 668.95312 280.28125 649.90625 217.28125 c 649.90625 217.28125 630.85938 154.29688 601.07812 113.03125 c 601.07812 113.03125 571.29688 71.78125 535.89062 48.09375 c 535.89062 48.09375 500.48438 24.42188 450.4375 12.20312 c 450.4375 12.20312 400.39062 0 335.45312 0 c 335.45312 0 77.15625 0 77.15625 0 c 77.15625 0 77.15625 0 77.15625 0 c h 171.875 84.46875 m 171.875 84.46875 324.70312 84.46875 324.70312 84.46875 c 324.70312 84.46875 395.51562 84.46875 435.79688 97.65625 c 435.79688 97.65625 476.07812 110.84375 500 134.76562 c 500 134.76562 533.6875 168.45312 552.48438 225.34375 c 552.48438 225.34375 571.29688 282.23438 571.29688 363.28125 c 571.29688 363.28125 571.29688 475.59375 534.42188 535.89062 c 534.42188 535.89062 497.5625 596.1875 444.82812 616.70312 c 444.82812 616.70312 406.73438 631.34375 322.26562 631.34375 c 322.26562 631.34375 171.875 631.34375 171.875 631.34375 c 171.875 631.34375 171.875 84.46875 171.875 84.46875 c h f* Q } def /E { 613 0 79 0 613 716 setcachedevice q 79.10938 0 m 79.10938 0 79.10938 715.82812 79.10938 715.82812 c 79.10938 715.82812 596.6875 715.82812 596.6875 715.82812 c 596.6875 715.82812 596.6875 631.34375 596.6875 631.34375 c 596.6875 631.34375 173.82812 631.34375 173.82812 631.34375 c 173.82812 631.34375 173.82812 412.10938 173.82812 412.10938 c 173.82812 412.10938 569.82812 412.10938 569.82812 412.10938 c 569.82812 412.10938 569.82812 328.125 569.82812 328.125 c 569.82812 328.125 173.82812 328.125 173.82812 328.125 c 173.82812 328.125 173.82812 84.46875 173.82812 84.46875 c 173.82812 84.46875 613.28125 84.46875 613.28125 84.46875 c 613.28125 84.46875 613.28125 0 613.28125 0 c 613.28125 0 79.10938 0 79.10938 0 c h f* Q } def /F { 565 0 82 0 565 716 setcachedevice q 82.03125 0 m 82.03125 0 82.03125 715.82812 82.03125 715.82812 c 82.03125 715.82812 564.9375 715.82812 564.9375 715.82812 c 564.9375 715.82812 564.9375 631.34375 564.9375 631.34375 c 564.9375 631.34375 176.76562 631.34375 176.76562 631.34375 c 176.76562 631.34375 176.76562 409.67188 176.76562 409.67188 c 176.76562 409.67188 512.70312 409.67188 512.70312 409.67188 c 512.70312 409.67188 512.70312 325.20312 512.70312 325.20312 c 512.70312 325.20312 176.76562 325.20312 176.76562 325.20312 c 176.76562 325.20312 176.76562 0 176.76562 0 c 176.76562 0 82.03125 0 82.03125 0 c h f* Q } def /I { 188 0 93 0 188 716 setcachedevice q 93.26562 0 m 93.26562 0 93.26562 715.82812 93.26562 715.82812 c 93.26562 715.82812 187.98438 715.82812 187.98438 715.82812 c 187.98438 715.82812 187.98438 0 187.98438 0 c 187.98438 0 93.26562 0 93.26562 0 c h f* Q } def /L { 521 0 73 0 521 716 setcachedevice q 73.25 0 m 73.25 0 73.25 715.82812 73.25 715.82812 c 73.25 715.82812 167.96875 715.82812 167.96875 715.82812 c 167.96875 715.82812 167.96875 84.46875 167.96875 84.46875 c 167.96875 84.46875 520.51562 84.46875 520.51562 84.46875 c 520.51562 84.46875 520.51562 0 520.51562 0 c 520.51562 0 73.25 0 73.25 0 c h f* Q } def /M { 757 0 74 0 757 716 setcachedevice q 74.21875 0 m 74.21875 0 74.21875 715.82812 74.21875 715.82812 c 74.21875 715.82812 216.79688 715.82812 216.79688 715.82812 c 216.79688 715.82812 386.23438 208.98438 386.23438 208.98438 c 386.23438 208.98438 409.67188 138.1875 420.40625 103.03125 c 420.40625 103.03125 432.625 142.09375 458.5 217.78125 c 458.5 217.78125 629.89062 715.82812 629.89062 715.82812 c 629.89062 715.82812 757.32812 715.82812 757.32812 715.82812 c 757.32812 715.82812 757.32812 0 757.32812 0 c 757.32812 0 666.01562 0 666.01562 0 c 666.01562 0 666.01562 599.125 666.01562 599.125 c 666.01562 599.125 458.01562 0 458.01562 0 c 458.01562 0 372.5625 0 372.5625 0 c 372.5625 0 165.53125 609.375 165.53125 609.375 c 165.53125 609.375 165.53125 0 165.53125 0 c 165.53125 0 74.21875 0 74.21875 0 c h f* Q } def /N { 640 0 76 0 640 716 setcachedevice q 76.17188 0 m 76.17188 0 76.17188 715.82812 76.17188 715.82812 c 76.17188 715.82812 173.34375 715.82812 173.34375 715.82812 c 173.34375 715.82812 549.3125 153.8125 549.3125 153.8125 c 549.3125 153.8125 549.3125 715.82812 549.3125 715.82812 c 549.3125 715.82812 640.14062 715.82812 640.14062 715.82812 c 640.14062 715.82812 640.14062 0 640.14062 0 c 640.14062 0 542.96875 0 542.96875 0 c 542.96875 0 167 562.5 167 562.5 c 167 562.5 167 0 167 0 c 167 0 76.17188 0 76.17188 0 c h f* Q } def /P { 624 0 77 0 624 716 setcachedevice q 77.15625 0 m 77.15625 0 77.15625 715.82812 77.15625 715.82812 c 77.15625 715.82812 347.17188 715.82812 347.17188 715.82812 c 347.17188 715.82812 418.45312 715.82812 456.0625 708.98438 c 456.0625 708.98438 508.79688 700.20312 544.4375 675.53125 c 544.4375 675.53125 580.07812 650.875 601.79688 606.4375 c 601.79688 606.4375 623.53125 562.01562 623.53125 508.79688 c 623.53125 508.79688 623.53125 417.48438 565.42188 354.25 c 565.42188 354.25 507.32812 291.01562 355.46875 291.01562 c 355.46875 291.01562 171.875 291.01562 171.875 291.01562 c 171.875 291.01562 171.875 0 171.875 0 c 171.875 0 77.15625 0 77.15625 0 c 77.15625 0 77.15625 0 77.15625 0 c h 171.875 375.48438 m 171.875 375.48438 356.9375 375.48438 356.9375 375.48438 c 356.9375 375.48438 448.73438 375.48438 487.29688 409.65625 c 487.29688 409.65625 525.875 443.84375 525.875 505.85938 c 525.875 505.85938 525.875 550.78125 503.17188 582.76562 c 503.17188 582.76562 480.46875 614.75 443.35938 625 c 443.35938 625 419.4375 631.34375 354.98438 631.34375 c 354.98438 631.34375 171.875 631.34375 171.875 631.34375 c 171.875 631.34375 171.875 375.48438 171.875 375.48438 c h f* Q } def /Q { 741 0 43 -56 741 729 setcachedevice q 619.625 76.65625 m 619.625 76.65625 685.54688 31.25 741.21875 10.25 c 741.21875 10.25 713.375 -55.67188 713.375 -55.67188 c 713.375 -55.67188 636.23438 -27.82812 559.57812 32.23438 c 559.57812 32.23438 479.98438 -12.20312 383.79688 -12.20312 c 383.79688 -12.20312 286.625 -12.20312 207.51562 34.67188 c 207.51562 34.67188 128.42188 81.54688 85.6875 166.5 c 85.6875 166.5 42.96875 251.46875 42.96875 357.90625 c 42.96875 357.90625 42.96875 463.875 85.9375 550.78125 c 85.9375 550.78125 128.90625 637.70312 208.25 683.10938 c 208.25 683.10938 287.59375 728.51562 385.75 728.51562 c 385.75 728.51562 484.85938 728.51562 564.45312 681.39062 c 564.45312 681.39062 644.04688 634.28125 685.79688 549.5625 c 685.79688 549.5625 727.54688 464.84375 727.54688 358.40625 c 727.54688 358.40625 727.54688 270.01562 700.6875 199.45312 c 700.6875 199.45312 673.82812 128.90625 619.625 76.65625 c 619.625 76.65625 619.625 76.65625 619.625 76.65625 c h 411.14062 197.75 m 411.14062 197.75 493.17188 174.8125 546.39062 129.39062 c 546.39062 129.39062 629.89062 205.5625 629.89062 358.40625 c 629.89062 358.40625 629.89062 445.3125 600.34375 510.25 c 600.34375 510.25 570.79688 575.20312 513.90625 611.07812 c 513.90625 611.07812 457.03125 646.96875 386.23438 646.96875 c 386.23438 646.96875 280.28125 646.96875 210.45312 574.45312 c 210.45312 574.45312 140.625 501.95312 140.625 357.90625 c 140.625 357.90625 140.625 218.26562 209.71875 143.54688 c 209.71875 143.54688 278.8125 68.84375 386.23438 68.84375 c 386.23438 68.84375 437.01562 68.84375 481.9375 87.89062 c 481.9375 87.89062 437.5 116.70313 388.1875 128.90625 c 388.1875 128.90625 411.14062 197.75 411.14062 197.75 c h f* Q } def /S { 615 0 45 -12 615 728 setcachedevice q 44.92188 229.98438 m 44.92188 229.98438 134.28125 237.79688 134.28125 237.79688 c 134.28125 237.79688 140.625 184.07812 163.8125 149.65625 c 163.8125 149.65625 187.01562 115.23438 235.84375 93.98438 c 235.84375 93.98438 284.67188 72.75 345.70312 72.75 c 345.70312 72.75 399.90625 72.75 441.40625 88.85938 c 441.40625 88.85938 482.90625 104.98438 503.17188 133.0625 c 503.17188 133.0625 523.4375 161.14062 523.4375 194.34375 c 523.4375 194.34375 523.4375 228.03125 503.90625 253.17188 c 503.90625 253.17188 484.375 278.32812 439.45312 295.40625 c 439.45312 295.40625 410.64062 306.64062 312 330.3125 c 312 330.3125 213.375 354 173.82812 375 c 173.82812 375 122.5625 401.85938 97.40625 441.65625 c 97.40625 441.65625 72.26562 481.45312 72.26562 530.76562 c 72.26562 530.76562 72.26562 584.96875 103.03125 632.07812 c 103.03125 632.07812 133.79688 679.20312 192.875 703.60938 c 192.875 703.60938 251.95312 728.03125 324.21875 728.03125 c 324.21875 728.03125 403.8125 728.03125 464.59375 702.39062 c 464.59375 702.39062 525.39062 676.76562 558.10938 626.95312 c 558.10938 626.95312 590.82812 577.15625 593.26562 514.15625 c 593.26562 514.15625 502.4375 507.32812 502.4375 507.32812 c 502.4375 507.32812 495.125 575.20312 452.875 609.85938 c 452.875 609.85938 410.64062 644.53125 328.125 644.53125 c 328.125 644.53125 242.1875 644.53125 202.875 613.03125 c 202.875 613.03125 163.57812 581.54688 163.57812 537.10938 c 163.57812 537.10938 163.57812 498.53125 191.40625 473.64062 c 191.40625 473.64062 218.75 448.73438 334.21875 422.60938 c 334.21875 422.60938 449.70312 396.48438 492.67188 376.95312 c 492.67188 376.95312 555.17188 348.14062 584.95312 303.95312 c 584.95312 303.95312 614.75 259.76562 614.75 202.15625 c 614.75 202.15625 614.75 145.01562 582.03125 94.48438 c 582.03125 94.48438 549.3125 43.95312 488.03125 15.875 c 488.03125 15.875 426.76562 -12.20312 350.09375 -12.20312 c 350.09375 -12.20312 252.9375 -12.20312 187.25 16.10937 c 187.25 16.10937 121.57812 44.4375 84.21875 101.3125 c 84.21875 101.3125 46.875 158.20312 44.92188 229.98438 c h f* Q } def /V { 659 0 4 0 659 716 setcachedevice q 281.73438 0 m 281.73438 0 4.39062 715.82812 4.39062 715.82812 c 4.39062 715.82812 106.9375 715.82812 106.9375 715.82812 c 106.9375 715.82812 292.96875 195.79687 292.96875 195.79687 c 292.96875 195.79687 315.4375 133.29687 330.5625 78.60937 c 330.5625 78.60937 347.17188 137.20312 369.14062 195.79687 c 369.14062 195.79687 562.5 715.82812 562.5 715.82812 c 562.5 715.82812 659.1875 715.82812 659.1875 715.82812 c 659.1875 715.82812 378.90625 0 378.90625 0 c 378.90625 0 281.73438 0 281.73438 0 c h f* Q } def /a { 514 0 36 -12 514 530 setcachedevice q 404.29688 63.96875 m 404.29688 63.96875 355.46875 22.46875 310.29688 5.375 c 310.29688 5.375 265.14062 -11.71875 213.375 -11.71875 c 213.375 -11.71875 127.9375 -11.71875 82.03125 30.03125 c 82.03125 30.03125 36.14062 71.78125 36.14062 136.71875 c 36.14062 136.71875 36.14062 174.8125 53.46875 206.29688 c 53.46875 206.29688 70.79688 237.79688 98.875 256.82812 c 98.875 256.82812 126.95312 275.875 162.10938 285.64062 c 162.10938 285.64062 187.98438 292.48438 240.23438 298.82812 c 240.23438 298.82812 346.6875 311.53125 396.96875 329.10938 c 396.96875 329.10938 397.46875 347.17188 397.46875 352.04688 c 397.46875 352.04688 397.46875 405.76562 372.5625 427.73438 c 372.5625 427.73438 338.875 457.51562 272.46875 457.51562 c 272.46875 457.51562 210.45312 457.51562 180.90625 435.78125 c 180.90625 435.78125 151.375 414.0625 137.20312 358.89062 c 137.20312 358.89062 51.26562 370.60938 51.26562 370.60938 c 51.26562 370.60938 62.98438 425.78125 89.84375 459.71875 c 89.84375 459.71875 116.70312 493.65625 167.48438 511.96875 c 167.48438 511.96875 218.26562 530.28125 285.15625 530.28125 c 285.15625 530.28125 351.5625 530.28125 393.0625 514.65625 c 393.0625 514.65625 434.57812 499.03125 454.10938 475.34375 c 454.10938 475.34375 473.64062 451.65625 481.45312 415.53125 c 481.45312 415.53125 485.84375 393.0625 485.84375 334.46875 c 485.84375 334.46875 485.84375 217.28125 485.84375 217.28125 c 485.84375 217.28125 485.84375 94.73438 491.45313 62.25 c 491.45313 62.25 497.07812 29.78125 513.67188 0 c 513.67188 0 421.875 0 421.875 0 c 421.875 0 408.20312 27.34375 404.29688 63.96875 c 404.29688 63.96875 404.29688 63.96875 404.29688 63.96875 c h 396.96875 260.25 m 396.96875 260.25 349.125 240.71875 253.42188 227.04688 c 253.42188 227.04688 199.21875 219.23438 176.75 209.46875 c 176.75 209.46875 154.29688 199.70312 142.09375 180.90625 c 142.09375 180.90625 129.89062 162.10938 129.89062 139.15625 c 129.89062 139.15625 129.89062 104 156.5 80.5625 c 156.5 80.5625 183.10938 57.125 234.375 57.125 c 234.375 57.125 285.15625 57.125 324.70312 79.34375 c 324.70312 79.34375 364.26562 101.5625 382.8125 140.14063 c 382.8125 140.14063 396.96875 169.92188 396.96875 228.03125 c 396.96875 228.03125 396.96875 260.25 396.96875 260.25 c h f* Q } def /b { 515 0 65 -12 515 716 setcachedevice q 146.96875 0 m 146.96875 0 65.4375 0 65.4375 0 c 65.4375 0 65.4375 715.82812 65.4375 715.82812 c 65.4375 715.82812 153.32812 715.82812 153.32812 715.82812 c 153.32812 715.82812 153.32812 460.45312 153.32812 460.45312 c 153.32812 460.45312 208.98438 530.28125 295.40625 530.28125 c 295.40625 530.28125 343.26562 530.28125 385.98438 510.98438 c 385.98438 510.98438 428.71875 491.70312 456.29688 456.78125 c 456.29688 456.78125 483.89062 421.875 499.51562 372.5625 c 499.51562 372.5625 515.14062 323.25 515.14062 267.09375 c 515.14062 267.09375 515.14062 133.79688 449.21875 61.03125 c 449.21875 61.03125 383.29688 -11.71875 291.01562 -11.71875 c 291.01562 -11.71875 199.21875 -11.71875 146.96875 64.9375 c 146.96875 64.9375 146.96875 0 146.96875 0 c 146.96875 0 146.96875 0 146.96875 0 c h 146 263.1875 m 146 263.1875 146 169.92188 171.39062 128.42188 c 171.39062 128.42188 212.89062 60.54688 283.6875 60.54688 c 283.6875 60.54688 341.3125 60.54688 383.29688 110.59375 c 383.29688 110.59375 425.29688 160.64062 425.29688 259.76562 c 425.29688 259.76562 425.29688 361.32812 385.01562 409.67188 c 385.01562 409.67188 344.73438 458.01562 287.59375 458.01562 c 287.59375 458.01562 229.98438 458.01562 187.98438 407.95312 c 187.98438 407.95312 146 357.90625 146 263.1875 c h f* Q } def /c { 491 0 39 -12 491 530 setcachedevice q 404.29688 189.9375 m 404.29688 189.9375 490.71875 178.71875 490.71875 178.71875 c 490.71875 178.71875 476.5625 89.35938 418.20312 38.8125 c 418.20312 38.8125 359.85938 -11.71875 274.90625 -11.71875 c 274.90625 -11.71875 168.45312 -11.71875 103.75 57.85938 c 103.75 57.85938 39.0625 127.4375 39.0625 257.32812 c 39.0625 257.32812 39.0625 341.3125 66.89062 404.29688 c 66.89062 404.29688 94.73438 467.28125 151.60938 498.78125 c 151.60938 498.78125 208.5 530.28125 275.39062 530.28125 c 275.39062 530.28125 359.85938 530.28125 413.5625 487.54688 c 413.5625 487.54688 467.28125 444.82812 482.42188 366.21875 c 482.42188 366.21875 396.96875 353.03125 396.96875 353.03125 c 396.96875 353.03125 384.76562 405.28125 353.75 431.64062 c 353.75 431.64062 322.75 458.01562 278.8125 458.01562 c 278.8125 458.01562 212.40625 458.01562 170.89062 410.40625 c 170.89062 410.40625 129.39062 362.79688 129.39062 259.76562 c 129.39062 259.76562 129.39062 155.28125 169.42188 107.90625 c 169.42188 107.90625 209.46875 60.54688 273.92188 60.54688 c 273.92188 60.54688 325.6875 60.54688 360.34375 92.28125 c 360.34375 92.28125 395.01562 124.03125 404.29688 189.9375 c h f* Q } def /d { 484 0 34 -12 484 716 setcachedevice q 402.34375 0 m 402.34375 0 402.34375 65.4375 402.34375 65.4375 c 402.34375 65.4375 353.03125 -11.71875 257.32812 -11.71875 c 257.32812 -11.71875 195.3125 -11.71875 143.3125 22.45312 c 143.3125 22.45312 91.3125 56.64062 62.75 117.92188 c 62.75 117.92188 34.1875 179.20313 34.1875 258.79688 c 34.1875 258.79688 34.1875 336.42188 60.0625 399.65625 c 60.0625 399.65625 85.9375 462.89062 137.6875 496.57812 c 137.6875 496.57812 189.45312 530.28125 253.42188 530.28125 c 253.42188 530.28125 300.29688 530.28125 336.90625 510.5 c 336.90625 510.5 373.53125 490.71875 396.48438 458.98438 c 396.48438 458.98438 396.48438 715.82812 396.48438 715.82812 c 396.48438 715.82812 483.89062 715.82812 483.89062 715.82812 c 483.89062 715.82812 483.89062 0 483.89062 0 c 483.89062 0 402.34375 0 402.34375 0 c 402.34375 0 402.34375 0 402.34375 0 c h 124.51562 258.79688 m 124.51562 258.79688 124.51562 159.1875 166.5 109.85937 c 166.5 109.85937 208.5 60.54688 265.625 60.54688 c 265.625 60.54688 323.25 60.54688 363.53125 107.65625 c 363.53125 107.65625 403.8125 154.78125 403.8125 251.46875 c 403.8125 251.46875 403.8125 357.90625 362.79688 407.70312 c 362.79688 407.70312 321.78125 457.51562 261.71875 457.51562 c 261.71875 457.51562 203.125 457.51562 163.8125 409.65625 c 163.8125 409.65625 124.51562 361.8125 124.51562 258.79688 c h f* Q } def /e { 515 0 37 -12 515 530 setcachedevice q 420.90625 167 m 420.90625 167 511.71875 155.76563 511.71875 155.76563 c 511.71875 155.76563 490.23438 76.17188 432.125 32.21875 c 432.125 32.21875 374.03125 -11.71875 283.6875 -11.71875 c 283.6875 -11.71875 169.92188 -11.71875 103.26562 58.34375 c 103.26562 58.34375 36.625 128.42188 36.625 254.89062 c 36.625 254.89062 36.625 385.75 104 458.01562 c 104 458.01562 171.39062 530.28125 278.8125 530.28125 c 278.8125 530.28125 382.8125 530.28125 448.73438 459.46875 c 448.73438 459.46875 514.65625 388.67188 514.65625 260.25 c 514.65625 260.25 514.65625 252.4375 514.15625 236.8125 c 514.15625 236.8125 127.4375 236.8125 127.4375 236.8125 c 127.4375 236.8125 132.32812 151.375 175.78125 105.95312 c 175.78125 105.95312 219.23438 60.54688 284.1875 60.54688 c 284.1875 60.54688 332.51562 60.54688 366.6875 85.9375 c 366.6875 85.9375 400.875 111.32812 420.90625 167 c 420.90625 167 420.90625 167 420.90625 167 c h 132.32812 309.07812 m 132.32812 309.07812 421.875 309.07812 421.875 309.07812 c 421.875 309.07812 416.01562 374.51562 388.67188 407.23438 c 388.67188 407.23438 346.6875 458.01562 279.78125 458.01562 c 279.78125 458.01562 219.23438 458.01562 177.96875 417.48438 c 177.96875 417.48438 136.71875 376.95312 132.32812 309.07812 c h f* Q } def /f { 313 0 9 0 313 728 setcachedevice q 86.92188 0 m 86.92188 0 86.92188 450.20312 86.92188 450.20312 c 86.92188 450.20312 9.28125 450.20312 9.28125 450.20312 c 9.28125 450.20312 9.28125 518.5625 9.28125 518.5625 c 9.28125 518.5625 86.92188 518.5625 86.92188 518.5625 c 86.92188 518.5625 86.92188 573.73438 86.92188 573.73438 c 86.92188 573.73438 86.92188 625.98438 96.1875 651.375 c 96.1875 651.375 108.89062 685.54688 140.875 706.78125 c 140.875 706.78125 172.85938 728.03125 230.46875 728.03125 c 230.46875 728.03125 267.57812 728.03125 312.5 719.23438 c 312.5 719.23438 299.3125 642.57812 299.3125 642.57812 c 299.3125 642.57812 271.96875 647.46875 247.5625 647.46875 c 247.5625 647.46875 207.51562 647.46875 190.90625 630.375 c 190.90625 630.375 174.3125 613.28125 174.3125 566.40625 c 174.3125 566.40625 174.3125 518.5625 174.3125 518.5625 c 174.3125 518.5625 275.39062 518.5625 275.39062 518.5625 c 275.39062 518.5625 275.39062 450.20312 275.39062 450.20312 c 275.39062 450.20312 174.3125 450.20312 174.3125 450.20312 c 174.3125 450.20312 174.3125 0 174.3125 0 c 174.3125 0 86.92188 0 86.92188 0 c h f* Q } def /g { 489 0 32 -210 489 530 setcachedevice q 49.8125 -42.96875 m 49.8125 -42.96875 135.25 -55.67188 135.25 -55.67188 c 135.25 -55.67188 140.625 -95.21875 165.04688 -113.28125 c 165.04688 -113.28125 197.75 -137.70312 254.39062 -137.70312 c 254.39062 -137.70312 315.4375 -137.70312 348.64062 -113.28125 c 348.64062 -113.28125 381.84375 -88.875 393.5625 -44.92188 c 393.5625 -44.92188 400.39062 -18.0625 399.90625 67.875 c 399.90625 67.875 342.28125 0 256.34375 0 c 256.34375 0 149.42188 0 90.82812 77.14062 c 90.82812 77.14062 32.23438 154.29688 32.23438 262.20312 c 32.23438 262.20312 32.23438 336.42188 59.07812 399.17188 c 59.07812 399.17188 85.9375 461.92188 136.95312 496.09375 c 136.95312 496.09375 187.98438 530.28125 256.84375 530.28125 c 256.84375 530.28125 348.64062 530.28125 408.20312 456.0625 c 408.20312 456.0625 408.20312 518.5625 408.20312 518.5625 c 408.20312 518.5625 489.26562 518.5625 489.26562 518.5625 c 489.26562 518.5625 489.26562 70.3125 489.26562 70.3125 c 489.26562 70.3125 489.26562 -50.78125 464.59375 -101.3125 c 464.59375 -101.3125 439.9375 -151.85938 386.46875 -181.15625 c 386.46875 -181.15625 333.01562 -210.45312 254.89062 -210.45312 c 254.89062 -210.45312 162.10938 -210.45312 104.98438 -168.70312 c 104.98438 -168.70312 47.85938 -126.95312 49.8125 -42.96875 c 49.8125 -42.96875 49.8125 -42.96875 49.8125 -42.96875 c h 122.5625 268.5625 m 122.5625 268.5625 122.5625 166.5 163.07812 119.625 c 163.07812 119.625 203.60938 72.75 264.65625 72.75 c 264.65625 72.75 325.20312 72.75 366.21875 119.375 c 366.21875 119.375 407.23438 166.01562 407.23438 265.625 c 407.23438 265.625 407.23438 360.84375 364.98438 409.17188 c 364.98438 409.17188 322.75 457.51562 263.1875 457.51562 c 263.1875 457.51562 204.59375 457.51562 163.57812 409.90625 c 163.57812 409.90625 122.5625 362.3125 122.5625 268.5625 c h f* Q } def /h { 488 0 66 0 488 716 setcachedevice q 65.92188 0 m 65.92188 0 65.92188 715.82812 65.92188 715.82812 c 65.92188 715.82812 153.8125 715.82812 153.8125 715.82812 c 153.8125 715.82812 153.8125 458.98438 153.8125 458.98438 c 153.8125 458.98438 215.32812 530.28125 309.07812 530.28125 c 309.07812 530.28125 366.70312 530.28125 409.17188 507.5625 c 409.17188 507.5625 451.65625 484.85938 469.96875 444.8125 c 469.96875 444.8125 488.28125 404.78125 488.28125 328.60938 c 488.28125 328.60938 488.28125 0 488.28125 0 c 488.28125 0 400.39062 0 400.39062 0 c 400.39062 0 400.39062 328.60938 400.39062 328.60938 c 400.39062 328.60938 400.39062 394.53125 371.82812 424.5625 c 371.82812 424.5625 343.26562 454.59375 291.01562 454.59375 c 291.01562 454.59375 251.95312 454.59375 217.53125 434.32812 c 217.53125 434.32812 183.10938 414.0625 168.45312 379.39062 c 168.45312 379.39062 153.8125 344.73438 153.8125 283.6875 c 153.8125 283.6875 153.8125 0 153.8125 0 c 153.8125 0 65.92188 0 65.92188 0 c h f* Q } def /i { 154 0 66 0 154 716 setcachedevice q 66.40625 614.75 m 66.40625 614.75 66.40625 715.82812 66.40625 715.82812 c 66.40625 715.82812 154.29688 715.82812 154.29688 715.82812 c 154.29688 715.82812 154.29688 614.75 154.29688 614.75 c 154.29688 614.75 66.40625 614.75 66.40625 614.75 c 66.40625 614.75 66.40625 614.75 66.40625 614.75 c h 66.40625 0 m 66.40625 0 66.40625 518.5625 66.40625 518.5625 c 66.40625 518.5625 154.29688 518.5625 154.29688 518.5625 c 154.29688 518.5625 154.29688 0 154.29688 0 c 154.29688 0 66.40625 0 66.40625 0 c h f* Q } def /j { 153 0 -46 -210 153 716 setcachedevice q 65.4375 613.76562 m 65.4375 613.76562 65.4375 715.82812 65.4375 715.82812 c 65.4375 715.82812 153.32812 715.82812 153.32812 715.82812 c 153.32812 715.82812 153.32812 613.76562 153.32812 613.76562 c 153.32812 613.76562 65.4375 613.76562 65.4375 613.76562 c 65.4375 613.76562 65.4375 613.76562 65.4375 613.76562 c h -45.90625 -201.17188 m -45.90625 -201.17188 -29.29688 -126.46875 -29.29688 -126.46875 c -29.29688 -126.46875 -2.9375 -133.29688 12.20312 -133.29688 c 12.20312 -133.29688 39.0625 -133.29688 52.25 -115.46875 c 52.25 -115.46875 65.4375 -97.65625 65.4375 -26.375 c 65.4375 -26.375 65.4375 518.5625 65.4375 518.5625 c 65.4375 518.5625 153.32812 518.5625 153.32812 518.5625 c 153.32812 518.5625 153.32812 -28.32812 153.32812 -28.32812 c 153.32812 -28.32812 153.32812 -124.03125 128.42188 -161.625 c 128.42188 -161.625 96.6875 -210.45312 22.95312 -210.45312 c 22.95312 -210.45312 -12.70313 -210.45312 -45.90625 -201.17188 c h f* Q } def /l { 152 0 64 0 152 716 setcachedevice q 63.96875 0 m 63.96875 0 63.96875 715.82812 63.96875 715.82812 c 63.96875 715.82812 151.85938 715.82812 151.85938 715.82812 c 151.85938 715.82812 151.85938 0 151.85938 0 c 151.85938 0 63.96875 0 63.96875 0 c h f* Q } def /m { 769 0 66 0 769 530 setcachedevice q 65.92188 0 m 65.92188 0 65.92188 518.5625 65.92188 518.5625 c 65.92188 518.5625 144.53125 518.5625 144.53125 518.5625 c 144.53125 518.5625 144.53125 445.79688 144.53125 445.79688 c 144.53125 445.79688 168.95312 483.89062 209.46875 507.07813 c 209.46875 507.07813 250 530.28125 301.76562 530.28125 c 301.76562 530.28125 359.375 530.28125 396.23438 506.34375 c 396.23438 506.34375 433.10938 482.42188 448.25 439.45312 c 448.25 439.45312 509.76562 530.28125 608.40625 530.28125 c 608.40625 530.28125 685.54688 530.28125 727.04688 487.54688 c 727.04688 487.54688 768.5625 444.82812 768.5625 355.95312 c 768.5625 355.95312 768.5625 0 768.5625 0 c 768.5625 0 681.15625 0 681.15625 0 c 681.15625 0 681.15625 326.65625 681.15625 326.65625 c 681.15625 326.65625 681.15625 379.39062 672.60938 402.57812 c 672.60938 402.57812 664.0625 425.78125 641.59375 439.9375 c 641.59375 439.9375 619.14062 454.10938 588.875 454.10938 c 588.875 454.10938 534.1875 454.10938 498.04688 417.71875 c 498.04688 417.71875 461.92188 381.34375 461.92188 301.26562 c 461.92188 301.26562 461.92188 0 461.92188 0 c 461.92188 0 374.03125 0 374.03125 0 c 374.03125 0 374.03125 336.92188 374.03125 336.92188 c 374.03125 336.92188 374.03125 395.51562 352.54688 424.8125 c 352.54688 424.8125 331.0625 454.10938 282.23438 454.10938 c 282.23438 454.10938 245.125 454.10938 213.625 434.57812 c 213.625 434.57812 182.125 415.04688 167.96875 377.4375 c 167.96875 377.4375 153.8125 339.84375 153.8125 269.04688 c 153.8125 269.04688 153.8125 0 153.8125 0 c 153.8125 0 65.92188 0 65.92188 0 c h f* Q } def /n { 487 0 66 0 487 530 setcachedevice q 65.92188 0 m 65.92188 0 65.92188 518.5625 65.92188 518.5625 c 65.92188 518.5625 145.01562 518.5625 145.01562 518.5625 c 145.01562 518.5625 145.01562 444.82812 145.01562 444.82812 c 145.01562 444.82812 202.15625 530.28125 310.0625 530.28125 c 310.0625 530.28125 356.9375 530.28125 396.23438 513.42188 c 396.23438 513.42188 435.54688 496.57812 455.07812 469.23438 c 455.07812 469.23438 474.60938 441.89062 482.42188 404.29688 c 482.42188 404.29688 487.3125 379.89062 487.3125 318.84375 c 487.3125 318.84375 487.3125 0 487.3125 0 c 487.3125 0 399.42188 0 399.42188 0 c 399.42188 0 399.42188 315.4375 399.42188 315.4375 c 399.42188 315.4375 399.42188 369.14062 389.15625 395.75 c 389.15625 395.75 378.90625 422.35938 352.78125 438.23438 c 352.78125 438.23438 326.65625 454.10938 291.5 454.10938 c 291.5 454.10938 235.35938 454.10938 194.57812 418.45312 c 194.57812 418.45312 153.8125 382.8125 153.8125 283.20312 c 153.8125 283.20312 153.8125 0 153.8125 0 c 153.8125 0 65.92188 0 65.92188 0 c h f* Q } def /o { 519 0 33 -12 519 530 setcachedevice q 33.20312 259.28125 m 33.20312 259.28125 33.20312 403.32812 113.28125 472.65625 c 113.28125 472.65625 180.17188 530.28125 276.375 530.28125 c 276.375 530.28125 383.29688 530.28125 451.17188 460.20312 c 451.17188 460.20312 519.04688 390.14062 519.04688 266.60938 c 519.04688 266.60938 519.04688 166.5 489.01563 109.125 c 489.01563 109.125 458.98438 51.76562 401.60938 20.01562 c 401.60938 20.01562 344.23438 -11.71875 276.375 -11.71875 c 276.375 -11.71875 167.48438 -11.71875 100.34375 58.10938 c 100.34375 58.10938 33.20312 127.9375 33.20312 259.28125 c 33.20312 259.28125 33.20312 259.28125 33.20312 259.28125 c h 123.53125 259.28125 m 123.53125 259.28125 123.53125 159.67188 166.98438 110.10938 c 166.98438 110.10938 210.45312 60.54688 276.375 60.54688 c 276.375 60.54688 341.79688 60.54688 385.25 110.34375 c 385.25 110.34375 428.71875 160.15625 428.71875 262.20312 c 428.71875 262.20312 428.71875 358.40625 385.01562 407.95312 c 385.01562 407.95312 341.3125 457.51562 276.375 457.51562 c 276.375 457.51562 210.45312 457.51562 166.98438 408.20312 c 166.98438 408.20312 123.53125 358.89062 123.53125 259.28125 c h f* Q } def /p { 516 0 66 -199 516 530 setcachedevice q 65.92188 -198.73438 m 65.92188 -198.73438 65.92188 518.5625 65.92188 518.5625 c 65.92188 518.5625 146 518.5625 146 518.5625 c 146 518.5625 146 451.17188 146 451.17188 c 146 451.17188 174.3125 490.71875 209.95312 510.5 c 209.95312 510.5 245.60938 530.28125 296.39062 530.28125 c 296.39062 530.28125 362.79688 530.28125 413.57812 496.09375 c 413.57812 496.09375 464.35938 461.92188 490.23438 399.65625 c 490.23438 399.65625 516.10938 337.40625 516.10938 263.1875 c 516.10938 263.1875 516.10938 183.59375 487.54688 119.875 c 487.54688 119.875 458.98438 56.15625 404.53125 22.21875 c 404.53125 22.21875 350.09375 -11.71875 290.04688 -11.71875 c 290.04688 -11.71875 246.09375 -11.71875 211.17188 6.82812 c 211.17188 6.82812 176.26562 25.39062 153.8125 53.71875 c 153.8125 53.71875 153.8125 -198.73438 153.8125 -198.73438 c 153.8125 -198.73438 65.92188 -198.73438 65.92188 -198.73438 c 65.92188 -198.73438 65.92188 -198.73438 65.92188 -198.73438 c h 145.51562 256.34375 m 145.51562 256.34375 145.51562 156.25 186.03125 108.39062 c 186.03125 108.39062 226.5625 60.54688 284.1875 60.54688 c 284.1875 60.54688 342.78125 60.54688 384.51562 110.10938 c 384.51562 110.10938 426.26562 159.67188 426.26562 263.67188 c 426.26562 263.67188 426.26562 362.79688 385.5 412.10938 c 385.5 412.10938 344.73438 461.42188 288.09375 461.42188 c 288.09375 461.42188 231.9375 461.42188 188.71875 408.9375 c 188.71875 408.9375 145.51562 356.45312 145.51562 256.34375 c h f* Q } def /q { 484 0 35 -199 484 530 setcachedevice q 396.48438 -198.73438 m 396.48438 -198.73438 396.48438 55.17187 396.48438 55.17187 c 396.48438 55.17187 375.98438 26.375 339.10938 7.32813 c 339.10938 7.32813 302.25 -11.71875 260.75 -11.71875 c 260.75 -11.71875 168.45312 -11.71875 101.79688 62.01563 c 101.79688 62.01563 35.15625 135.75 35.15625 264.15625 c 35.15625 264.15625 35.15625 342.28125 62.25 404.29688 c 62.25 404.29688 89.35938 466.3125 140.875 498.29688 c 140.875 498.29688 192.39063 530.28125 253.90625 530.28125 c 253.90625 530.28125 350.09375 530.28125 405.28125 449.21875 c 405.28125 449.21875 405.28125 518.5625 405.28125 518.5625 c 405.28125 518.5625 484.375 518.5625 484.375 518.5625 c 484.375 518.5625 484.375 -198.73438 484.375 -198.73438 c 484.375 -198.73438 396.48438 -198.73438 396.48438 -198.73438 c 396.48438 -198.73438 396.48438 -198.73438 396.48438 -198.73438 c h 125.48438 260.75 m 125.48438 260.75 125.48438 160.64062 167.46875 110.59375 c 167.46875 110.59375 209.46875 60.54688 268.0625 60.54688 c 268.0625 60.54688 324.21875 60.54688 364.75 108.15625 c 364.75 108.15625 405.28125 155.76563 405.28125 252.9375 c 405.28125 252.9375 405.28125 356.45312 362.54688 408.6875 c 362.54688 408.6875 319.82812 460.9375 262.20312 460.9375 c 262.20312 460.9375 205.07812 460.9375 165.28125 412.34375 c 165.28125 412.34375 125.48438 363.76562 125.48438 260.75 c h f* Q } def /r { 347 0 65 0 347 530 setcachedevice q 64.9375 0 m 64.9375 0 64.9375 518.5625 64.9375 518.5625 c 64.9375 518.5625 144.04688 518.5625 144.04688 518.5625 c 144.04688 518.5625 144.04688 439.9375 144.04688 439.9375 c 144.04688 439.9375 174.3125 495.125 199.95312 512.70312 c 199.95312 512.70312 225.59375 530.28125 256.34375 530.28125 c 256.34375 530.28125 300.78125 530.28125 346.6875 501.95312 c 346.6875 501.95312 316.40625 420.40625 316.40625 420.40625 c 316.40625 420.40625 284.1875 439.45312 251.95312 439.45312 c 251.95312 439.45312 223.14062 439.45312 200.1875 422.10938 c 200.1875 422.10938 177.25 404.78125 167.48438 374.03125 c 167.48438 374.03125 152.82812 327.15625 152.82812 271.48438 c 152.82812 271.48438 152.82812 0 152.82812 0 c 152.82812 0 64.9375 0 64.9375 0 c h f* Q } def /s { 461 0 31 -12 461 530 setcachedevice q 30.76563 154.78125 m 30.76563 154.78125 117.67188 168.45312 117.67188 168.45312 c 117.67188 168.45312 125 116.21875 158.4375 88.375 c 158.4375 88.375 191.89062 60.54688 251.95312 60.54688 c 251.95312 60.54688 312.5 60.54688 341.79688 85.20312 c 341.79688 85.20312 371.09375 109.85937 371.09375 143.0625 c 371.09375 143.0625 371.09375 172.85938 345.21875 189.9375 c 345.21875 189.9375 327.15625 201.65625 255.375 219.73438 c 255.375 219.73438 158.6875 244.14062 121.32813 261.95312 c 121.32813 261.95312 83.98438 279.78125 64.6875 311.28125 c 64.6875 311.28125 45.40625 342.78125 45.40625 380.85938 c 45.40625 380.85938 45.40625 415.53125 61.28125 445.0625 c 61.28125 445.0625 77.15625 474.60938 104.5 494.14062 c 104.5 494.14062 125 509.28125 160.39062 519.78125 c 160.39062 519.78125 195.79688 530.28125 236.32812 530.28125 c 236.32812 530.28125 297.35938 530.28125 343.5 512.70312 c 343.5 512.70312 389.65625 495.125 411.625 465.09375 c 411.625 465.09375 433.59375 435.0625 441.89062 384.76562 c 441.89062 384.76562 355.95312 373.04688 355.95312 373.04688 c 355.95312 373.04688 350.09375 413.09375 322.01562 435.54688 c 322.01562 435.54688 293.95312 458.01562 242.67188 458.01562 c 242.67188 458.01562 182.125 458.01562 156.25 437.98438 c 156.25 437.98438 130.375 417.96875 130.375 391.10938 c 130.375 391.10938 130.375 374.03125 141.10938 360.35938 c 141.10938 360.35938 151.85938 346.1875 174.8125 336.92188 c 174.8125 336.92188 187.98438 332.03125 252.4375 314.45312 c 252.4375 314.45312 345.70312 289.54688 382.5625 273.67188 c 382.5625 273.67188 419.4375 257.8125 440.42188 227.53125 c 440.42188 227.53125 461.42188 197.26562 461.42188 152.34375 c 461.42188 152.34375 461.42188 108.40625 435.78125 69.57812 c 435.78125 69.57812 410.15625 30.76563 361.8125 9.51562 c 361.8125 9.51562 313.48438 -11.71875 252.4375 -11.71875 c 252.4375 -11.71875 151.375 -11.71875 98.39062 30.26562 c 98.39062 30.26562 45.40625 72.26562 30.76563 154.78125 c h f* Q } def /t { 271 0 18 -7 271 700 setcachedevice q 257.8125 78.60937 m 257.8125 78.60937 270.51562 0.98438 270.51562 0.98438 c 270.51562 0.98438 233.40625 -6.84375 204.10938 -6.84375 c 204.10938 -6.84375 156.25 -6.84375 129.875 8.29687 c 129.875 8.29687 103.51562 23.4375 92.76562 48.09375 c 92.76562 48.09375 82.03125 72.75 82.03125 151.85938 c 82.03125 151.85938 82.03125 450.20312 82.03125 450.20312 c 82.03125 450.20312 17.57812 450.20312 17.57812 450.20312 c 17.57812 450.20312 17.57812 518.5625 17.57812 518.5625 c 17.57812 518.5625 82.03125 518.5625 82.03125 518.5625 c 82.03125 518.5625 82.03125 646.96875 82.03125 646.96875 c 82.03125 646.96875 169.4375 699.70312 169.4375 699.70312 c 169.4375 699.70312 169.4375 518.5625 169.4375 518.5625 c 169.4375 518.5625 257.8125 518.5625 257.8125 518.5625 c 257.8125 518.5625 257.8125 450.20312 257.8125 450.20312 c 257.8125 450.20312 169.4375 450.20312 169.4375 450.20312 c 169.4375 450.20312 169.4375 146.96875 169.4375 146.96875 c 169.4375 146.96875 169.4375 109.375 174.07812 98.625 c 174.07812 98.625 178.71875 87.89062 189.20312 81.54688 c 189.20312 81.54688 199.70312 75.20312 219.23438 75.20312 c 219.23438 75.20312 233.89062 75.20312 257.8125 78.60937 c h f* Q } def /u { 484 0 64 -12 484 519 setcachedevice q 405.76562 0 m 405.76562 0 405.76562 76.17188 405.76562 76.17188 c 405.76562 76.17188 345.21875 -11.71875 241.21875 -11.71875 c 241.21875 -11.71875 195.3125 -11.71875 155.51562 5.85938 c 155.51562 5.85938 115.71875 23.4375 96.4375 50.04688 c 96.4375 50.04688 77.15625 76.65625 69.34375 115.23438 c 69.34375 115.23438 63.96875 141.10937 63.96875 197.26562 c 63.96875 197.26562 63.96875 518.5625 63.96875 518.5625 c 63.96875 518.5625 151.85938 518.5625 151.85938 518.5625 c 151.85938 518.5625 151.85938 230.95312 151.85938 230.95312 c 151.85938 230.95312 151.85938 162.10938 157.23438 138.1875 c 157.23438 138.1875 165.53125 103.51562 192.375 83.73438 c 192.375 83.73438 219.23438 63.96875 258.79688 63.96875 c 258.79688 63.96875 298.34375 63.96875 333 84.23438 c 333 84.23438 367.67188 104.5 382.07812 139.40625 c 382.07812 139.40625 396.48438 174.3125 396.48438 240.71875 c 396.48438 240.71875 396.48438 518.5625 396.48438 518.5625 c 396.48438 518.5625 484.375 518.5625 484.375 518.5625 c 484.375 518.5625 484.375 0 484.375 0 c 484.375 0 405.76562 0 405.76562 0 c h f* Q } def /v { 488 0 13 0 488 519 setcachedevice q 209.96875 0 m 209.96875 0 12.70313 518.5625 12.70313 518.5625 c 12.70313 518.5625 105.46875 518.5625 105.46875 518.5625 c 105.46875 518.5625 216.79688 208.01562 216.79688 208.01562 c 216.79688 208.01562 234.85938 157.71875 250 103.51562 c 250 103.51562 261.71875 144.53125 282.71875 202.15625 c 282.71875 202.15625 397.95312 518.5625 397.95312 518.5625 c 397.95312 518.5625 488.28125 518.5625 488.28125 518.5625 c 488.28125 518.5625 292 0 292 0 c 292 0 209.96875 0 209.96875 0 c h f* Q } def end currentdict end /T3_71_0 exch definefont pop %%EndResource /F71_0 /T3_71_0 1 1 [ /comma/period/semicolon/A/C/D/E/F /I/L/M/N/P/Q/S/V /a/b/c/d/e/f/g/h /i/j/l/m/n/o/p/q /r/s/t/u/v/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/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 /quoteleft/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/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont false pdfSetup 595 842 pdfSetupPaper %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0.706376 translate 0.9983 0.9983 scale 0 0 596 842 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 595.28 841.89 re W q q [1 0 0 1 0 0] cm q 1 w [] 0 d 0 J 0 j [1 0 0 1 35 767.89] cm q [1 0 0 1 0 0] Tm 0 0 Td /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\011) [6.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -9.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 17.34375 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.01758 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.34766 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.01367 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.6875 -9.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.6875 -9.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.36133 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.69141 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.36523 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.03906 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.70508 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.37891 -9.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.70898 -9.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.70898 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.375 -9.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.04297 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.7168 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.71289 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.38672 -9.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.7207 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.38867 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.38867 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.0625 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.73633 -9.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.73633 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.41016 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.41016 -9.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.74414 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.41797 -9.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.75195 -9.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.42578 -9.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.75586 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.42969 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.10352 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.76953 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.44336 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.10938 -9.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.10938 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.10938 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.77539 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.44922 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.45703 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.13086 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.79688 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.46289 -9.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.79688 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.46484 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\013) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.13086 -9.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.80469 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.47852 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.8125 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.48633 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.16016 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.83398 -9.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.83008 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.50391 -9.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.83789 -9.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.83398 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.8418 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.51562 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.18164 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.85547 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.5293 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.20312 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.86914 -9.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.53711 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.21094 -9.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.20703 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.88086 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.55469 -9.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.55078 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.22461 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.89258 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\017) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.23438 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.9082 -9.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.9082 -9.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.24219 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 480.9082 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 487.58203 -9.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 494.25586 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 496.92188 -9.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 503.5957 -9.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -24.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.68164 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.68945 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.35547 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.0293 -24.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.0293 -24.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.70312 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.0332 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.70703 -24.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.70312 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.36914 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.36523 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.03125 -24.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.36523 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.03125 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.03906 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\025) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.37305 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.04688 -24.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.7207 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.7207 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.38672 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.06055 -24.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.73438 -24.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.06836 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.74219 -24.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.73828 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.73828 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.73828 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.4043 -24.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.07812 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.07812 -24.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.41211 -24.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.08594 -24.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.41992 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.09375 -24.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.76172 -24.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.43555 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.10156 -24.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.43555 -24.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.43164 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.09766 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.09766 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.77148 -24.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.10547 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.7793 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.45312 -24.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.45312 -24.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.12695 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.80078 -24.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.79688 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.80469 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.80469 -24.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.47852 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.15234 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.81836 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.48438 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.15039 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.1582 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\004) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.82422 -24.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.49805 -24.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.49414 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.16797 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.8418 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\002) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.50977 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\006) [7.356 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.51367 -24.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.84766 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.51367 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.1875 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.51758 -24.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.51758 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.18359 -24.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.85156 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.52539 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.52148 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.19531 -24.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.86328 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 482.85938 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 489.5332 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 492.19922 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 494.86523 -24.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 497.53125 -24.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.35547 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\006) [7.356 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.35938 -39.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.69336 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 43.35938 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.0332 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36328 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.35938 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.0332 -39.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.36719 -39.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.04102 -39.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.375 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.04883 -39.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.04492 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.71875 -39.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.05273 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.7207 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 129.38672 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.38281 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.05664 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.73047 -39.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.72656 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.40039 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.06641 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.74023 -39.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.4082 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.08203 -39.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.75 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.41602 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.41211 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.08594 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.75977 -39.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.75586 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.42969 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.0957 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.76953 -39.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.4375 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.10352 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.77734 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.44531 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.11133 -39.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.78516 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.78516 -39.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.11914 -39.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.79297 -39.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.12695 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.80078 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.13477 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.80859 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.47461 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.14844 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.82227 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.49023 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\011) [6.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.16406 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.83789 -39.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.83398 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.50781 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.83789 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.50391 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.17773 -39.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.17773 -39.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.85156 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.18164 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.85547 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.5293 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.19531 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.86914 -39.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.19922 -39.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.19922 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.86523 -39.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.5332 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.20703 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.20312 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 482.87695 -39.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 486.21094 -39.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -54.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -54.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.35547 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -54.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -54.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -54.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36719 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.04102 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.71484 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.38086 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.05469 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.7207 -54.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.7207 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.7207 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.38672 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.06055 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.06836 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.74219 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.4082 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.07422 -54.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.4082 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.07617 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\017) [7.908 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.41797 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.0918 -54.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.0918 -54.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.42578 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.0918 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.76562 -54.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.43945 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.10547 -54.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.7793 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.10938 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.7832 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 219.45703 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.12305 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.78906 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.46289 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.13672 -54.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.4707 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.14453 -54.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.14453 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.81836 -54.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.49219 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.5 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.49609 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.16992 -54.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.16992 -54.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.16992 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.17773 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.85156 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.52539 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.19922 -54.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.86719 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\031) [1.836 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.5332 -54.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.20703 -54.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.20703 -54.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.54102 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.54883 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.22266 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.88867 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.88867 -54.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.22266 -54.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.89648 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.22656 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.90039 -54.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.57422 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.24023 -54.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.24023 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.23633 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.91016 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.58398 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.25195 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\006) [7.356 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.25586 -54.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 473.58984 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.25586 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 482.92969 -54.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.00586 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.67969 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.3457 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.35352 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.02734 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.70117 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.36719 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69727 -69.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.69336 -69.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.36719 -69.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.70117 -69.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.69727 -69.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.37109 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.70117 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.375 -69.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.04883 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.04883 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.72266 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.38867 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.0625 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.73633 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.40234 -69.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.40234 -69.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.40234 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.06836 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.39844 -69.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.07227 -69.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.74023 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.40625 -69.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.08008 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.08008 -69.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.41406 -69.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.08789 -69.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.42188 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.0957 -69.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.76953 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.44336 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.77344 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.44727 -69.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.12109 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.12109 -69.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.45508 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.12891 -69.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.46289 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.13086 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\005) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.79688 -69.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.4707 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.13672 -69.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 325.4707 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.14453 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.47852 -69.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.47852 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.15234 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.48242 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.15625 -69.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.15625 -69.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.49023 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.1582 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\013) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.82422 -69.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.49805 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.16406 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.83008 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.50391 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.83398 -69.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.83398 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.50781 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.83789 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.50391 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.17773 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.17773 -69.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 475.51172 -69.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 482.18555 -69.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 488.18555 -69.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.00586 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67969 -84.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.35352 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02734 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.35742 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.03125 -84.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.70508 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.37109 -84.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.70508 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\025) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.03906 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.71289 -84.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.38672 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.06055 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.72656 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.40039 -84.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.06836 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.73438 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.4082 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.07617 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.75 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.41602 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.08984 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.76367 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.42969 -84.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.42969 -84.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.42969 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.0957 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.42578 -84.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.42578 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.09961 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.10742 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.77344 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.44727 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.44727 -84.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.12109 -84.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.12109 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.78906 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\014) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.79297 -84.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.78906 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.46289 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.12891 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.13672 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.81055 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.48438 -84.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.48047 -84.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.81445 -84.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.14844 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.81445 -84.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.14844 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.82227 -84.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.15625 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.82422 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.49805 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.17188 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.83789 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.51172 -84.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.8418 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.51562 -84.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.18359 -84.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.85742 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.52344 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.18945 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.86328 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.85938 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.85938 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.5332 -84.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.5293 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.20312 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.87695 -84.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.20703 -84.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.54102 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.20703 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.88086 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.88086 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.54688 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.2207 -84.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.89453 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.56836 -84.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.90234 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 475.57031 -84.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 481.57031 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 488.24414 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 494.91797 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 497.58398 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 504.25781 -84.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -99.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.34375 -99.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.33984 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.00586 -99.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.33984 -99.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.67383 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 49.34766 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.34375 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.01758 -99.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.69141 -99.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.02539 -99.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.35938 -99.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.0332 -99.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.0293 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.70312 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.36914 -99.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 111.36914 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.03711 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.71094 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.38477 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.71875 -99.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.71484 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 151.38867 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.0625 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.73633 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.73633 -99.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.41016 -99.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.74414 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.41797 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.08398 -99.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.08398 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.08398 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.75 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.42383 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.42383 -99.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.09766 -99.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.43164 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.10547 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.7793 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.45312 -99.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.12109 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.78711 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.46094 -99.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.46094 -99.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.13477 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 298.13086 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.13672 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\003) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.14062 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.80664 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.47266 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.14648 -99.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.82031 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.49414 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.82422 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.49023 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.49805 -99.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.49805 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.17188 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 389.50195 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.17578 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.84961 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.51562 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.18945 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.85742 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.53125 -99.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.19922 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.19922 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.87305 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.54688 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.2207 -99.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.89453 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.90234 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 477.56836 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 484.24219 -99.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 490.24219 -99.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 496.91602 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 506.91211 -99.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\013) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -114.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.01367 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.34766 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -114.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\025) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -114.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.71094 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.71094 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.37695 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.05078 -114.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.72461 -114.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.05859 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.73242 -114.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.72852 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.40234 -114.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.73633 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.4043 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\012) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.40039 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.07422 -114.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.07031 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.74414 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.74414 -114.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.74414 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.41797 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.08398 -114.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.75781 -114.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.0918 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.76562 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.43945 -114.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.10742 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.78125 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.44727 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.12109 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.12891 -114.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.12891 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.79492 -114.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.12891 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.80273 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.81055 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.48438 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.15039 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.82422 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.83203 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 285.49805 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.17188 -114.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.50586 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.17969 -114.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.17578 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.84961 -114.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.52344 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.85352 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.52734 -114.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.19531 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.19531 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.86914 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.86523 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.86133 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.53516 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.20898 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.2168 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.21289 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.88672 -114.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.88672 -114.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.88672 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.89453 -114.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.89453 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.56836 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.24219 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.9082 -114.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.24219 -114.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 469.57617 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.24219 -114.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.24219 -114.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\003) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.00391 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.67773 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.35156 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.02539 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.69922 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.70703 -144.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.70703 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 57.38086 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.37695 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.05078 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.72461 -144.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.05469 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.72852 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.40234 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.07617 -144.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.07617 -144.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.41016 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.08398 -144.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.41797 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.0918 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.76562 -144.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.09961 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.77344 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.44141 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.10742 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.11523 -144.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.11523 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.78906 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.45508 -144.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.12891 -144.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.46289 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.13672 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.81055 -144.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.47852 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.14453 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.81836 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.81836 -144.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.15234 -144.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.82617 -144.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.16016 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\025) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.49414 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.16797 -144.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.8418 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.51562 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.18164 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.85547 -144.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.52344 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.19727 -144.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.87109 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.53711 -144.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.53711 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.20508 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\016) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.20898 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.88281 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.89062 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.56445 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.23047 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.23047 -144.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.56445 -144.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.23828 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.56836 -144.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.56836 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.24219 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.9082 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.57422 -144.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.24219 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.91602 -144.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.58398 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.25781 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.92383 -144.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.92383 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.92383 -144.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.92383 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.59766 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.27148 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.9375 -144.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.27148 -144.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 475.60547 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.27148 -144.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 487.60547 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 494.2793 -144.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 500.95312 -144.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 503.61914 -144.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\025) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.00781 -159.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.00391 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.67383 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 37.34766 -159.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.68164 -159.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.35547 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.68555 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.68164 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.35547 -159.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.35547 -159.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 89.35547 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.36328 -159.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.36328 -159.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.03711 -159.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.03711 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.03711 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.70312 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.37695 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.04297 -159.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.37695 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.04492 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\013) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.71094 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.38477 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.71484 -159.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.04883 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.72266 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.71875 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.39258 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.06641 -159.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.39648 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.07031 -159.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.74414 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.41797 -159.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.0918 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.09961 -159.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.77344 -159.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.44141 -159.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.11523 -159.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.11133 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.78516 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.79297 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.45898 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.13281 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.13281 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.79883 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.47266 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.13867 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.14648 -159.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.48047 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.14648 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.82031 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.82031 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.48633 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.16016 -159.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.83398 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.50781 -159.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.17578 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.84961 -159.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.52344 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.18945 -159.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.18945 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.18555 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.85938 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.86719 -159.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.20117 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.875 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.54102 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.20703 -159.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.88086 -159.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.21484 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.88867 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 467.55469 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.22852 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 480.90234 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 487.57617 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 490.24219 -159.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 493.57617 -159.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\012) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -174.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.34375 -174.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.33984 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.00586 -174.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.33984 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.01367 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.6875 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.02148 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.6875 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.36133 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.36914 -174.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.04297 -174.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.71094 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.70703 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.70703 -174.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.70703 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.38086 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.37695 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.05078 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.72461 -174.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.05469 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.72852 -174.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.40234 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.06836 -174.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.06836 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.73438 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.4082 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.08203 -174.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.41211 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.07812 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.08594 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.75977 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.09375 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.75977 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.43359 -174.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.43359 -174.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.10742 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.10352 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.10938 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\003) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.11328 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.78711 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.46094 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.13477 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.80859 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.81641 -174.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.81641 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.49023 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.16406 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.83789 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.50391 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.17773 -174.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.51172 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.18555 -174.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.85938 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.85938 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.5332 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.86719 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.86328 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.53711 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.21094 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.88477 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.89258 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.56641 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.24023 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.91406 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.58789 -174.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 461.58398 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.25781 -174.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.25391 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.91992 -174.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 481.58789 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 488.26172 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 494.93555 -174.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 501.60938 -174.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -189.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -189.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -189.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.00781 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.67383 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 31.34766 -189.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.6875 -189.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.36133 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.69141 -189.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69141 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.36523 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.03906 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.70508 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 89.37891 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.38672 -189.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.38672 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.06055 -189.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.05664 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.72266 -189.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.39648 -189.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.39648 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.06445 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\015) [8.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.39844 -189.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.07227 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.73828 -189.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.73828 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.41211 -189.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.08594 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.09375 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.76758 -189.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.44141 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.10742 -189.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.10742 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.10352 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.77734 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.78516 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.45898 -189.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.13281 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.80664 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.13672 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.81055 -189.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.81836 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.48438 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.15039 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.82422 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.49805 -189.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.49414 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.50195 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.50195 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.17578 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.84961 -189.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.84961 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.52344 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.52344 -189.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.85742 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.53125 -189.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.86523 -189.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.53906 -189.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.86914 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.86914 -189.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.54297 -189.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 399.53906 -189.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.53906 -189.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.21289 -189.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.21289 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.21875 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\003) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.22266 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.88867 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.55469 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.22852 -189.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.90234 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.57617 -189.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67969 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.35352 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02734 -204.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.36133 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.03516 -204.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.03516 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.70898 -204.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.38281 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.39062 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.06445 -204.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.73828 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.4043 -204.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.4043 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.40039 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.07422 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.08203 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.75586 -204.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.42969 -204.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.42578 -204.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.09961 -204.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.09961 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.76758 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.44141 -204.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.10938 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.7832 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.7832 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.7832 -204.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.45703 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.45312 -204.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.45312 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.12695 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.13477 -204.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.80859 -204.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.80469 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.47852 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.48633 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.16016 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.16016 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.16016 -204.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.83398 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.83008 -204.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.83008 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.50391 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 313.51172 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.18555 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.85938 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.85938 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.52734 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\004) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.19336 -204.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.86719 -204.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.86328 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.53711 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.21094 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.87695 -204.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.21094 -204.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.88477 -204.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.21484 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\025) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.54883 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.22266 -204.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.89648 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.89648 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.5625 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.23633 -204.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.91016 -204.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.24414 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.91016 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.58398 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.58398 -204.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.25781 -204.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 471.5918 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.26562 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 484.93945 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 491.61328 -204.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 498.28125 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 504.95508 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 507.62109 -204.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 513.62109 -204.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -219.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -219.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.67773 -219.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.67773 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.35156 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.02539 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.69141 -219.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.02539 -219.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.35938 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.02539 -219.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.02539 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.69336 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\016) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.69727 -219.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.37109 -219.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.37109 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.04492 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.71875 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.39258 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.06641 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.73242 -219.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.73242 -219.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.73242 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.74023 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.41406 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.08789 -219.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 171.42188 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.0957 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.76953 -219.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.10352 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.76953 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.4375 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\013) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.10352 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.77734 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.10742 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.77344 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.76953 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.44336 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.11719 -219.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.11328 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.78711 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.45312 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.12695 -219.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.79492 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.79102 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.46484 -219.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.46484 -219.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.46484 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.47266 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.14648 -219.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.82031 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.48633 -219.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.82031 -219.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.49414 -219.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.49023 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 360.16406 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.17188 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.83789 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.51172 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.18555 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.85938 -219.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.85547 -219.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.18945 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.85547 -219.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.18945 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.86328 -219.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.53125 -219.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.86523 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.53125 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.20508 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.20508 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.87109 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 453.54492 -219.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.21875 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.89258 -219.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 473.56055 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.22656 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 482.90039 -219.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -234.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.33984 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.01367 -234.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.6875 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.36133 -234.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.69531 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\016) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.36719 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.04102 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.04883 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.72266 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 89.39648 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.0625 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.73633 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.40234 -234.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 107.40234 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.40234 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.06836 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.74219 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.75 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.42383 -234.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.41992 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.41992 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.41992 -234.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.41992 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.09375 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.10156 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.77539 -234.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.44922 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.12305 -234.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.79688 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.80469 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 217.4707 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.14453 -234.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 227.47852 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.15234 -234.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.14844 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.82227 -234.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 251.49609 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.82617 -234.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.82617 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.5 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.49609 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.16992 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.84375 -234.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.17773 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.8457 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\013) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.51172 -234.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.18555 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.85156 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.51758 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.52539 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.19922 -234.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.87305 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.53906 -234.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.87305 -234.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.20703 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.88086 -234.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.87695 -234.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.21094 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.88477 -234.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.21484 -234.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.21484 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.88867 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.88867 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.5625 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.22852 -234.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.22852 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.22852 -234.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.22852 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.90234 -234.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.89844 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.56445 -234.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.23828 -234.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 473.57227 -234.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 479.57227 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 486.24609 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 496.24219 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 502.91602 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 509.58984 -234.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 512.92383 -234.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\010) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.00781 -249.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.3418 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.01562 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.68945 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.36328 -249.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.69336 -249.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.69336 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.36719 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.375 -249.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 67.37109 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.03711 -249.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.03711 -249.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.71094 -249.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.04492 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.71875 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.39258 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.06641 -249.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.74023 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.41406 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.08203 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\007) [6.78 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.41211 -249.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.08594 -249.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.08594 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.08594 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.09375 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.76758 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.43359 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.10742 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.78125 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.44727 -249.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.44727 -249.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 205.44727 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.11328 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.10938 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.77734 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.45117 -249.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.125 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.79883 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.12891 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.80273 -249.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.4707 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.14453 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.81836 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.49219 -249.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.48828 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.16211 -249.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.49609 -249.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.49219 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.5 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.17383 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.83984 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.51367 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.1875 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.86133 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.53516 -249.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.20898 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.20508 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.87305 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.53906 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.20508 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.87891 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.55273 -249.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.54883 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.55664 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.23047 -249.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.9043 -249.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.90039 -249.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.57422 -249.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.9082 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.58203 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.25586 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.92188 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 463.58789 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.26172 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.93555 -249.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 480.26953 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 486.94336 -249.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 492.94336 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 499.61719 -249.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 506.29102 -249.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.66211 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33008 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.00391 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.67773 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.35156 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.02539 -264.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.02148 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.69531 -264.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.69141 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.35742 -264.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.02539 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.69922 -264.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.37305 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.03906 -264.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.03906 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.70508 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.37891 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.05273 -264.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.38281 -264.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.7168 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.39062 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.05664 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.72266 -264.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.39648 -264.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.73047 -264.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.73047 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.4043 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.07812 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.74414 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.41797 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.42578 -264.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.42578 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.09961 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.09961 -264.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.77344 -264.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.76953 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.44336 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.11719 -264.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\013) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -294.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.00586 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.67188 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.67969 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.6875 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.36133 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.02734 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.70117 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69727 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.37109 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.04492 -294.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.37891 -294.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.05273 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.38281 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.05664 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.73047 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.39648 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 129.39258 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.06055 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\014) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.06445 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.73828 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.41211 -294.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.41211 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.08594 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.75195 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.41797 -294.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.0918 -294.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.42578 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.09961 -294.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.77344 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.43945 -294.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.77344 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.44727 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.12109 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 232.78711 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.46094 -294.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.79102 -294.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.79102 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 255.45703 -294.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.79102 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.46484 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.47266 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.13867 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.8125 -294.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.8125 -294.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.48633 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.81641 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.81641 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.49023 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.16406 -294.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.16406 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.83789 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.83789 -294.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.17188 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.8457 -294.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.17969 -294.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.85352 -294.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.18359 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.84961 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.52344 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.19727 -294.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.19336 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.86719 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.54102 -294.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.875 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 419.54297 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\014) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.54688 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.2207 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.88672 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.55273 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.22656 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.90039 -294.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.23438 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.9082 -294.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.9082 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 475.58203 -294.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 482.25586 -294.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -309.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -309.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.35547 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -309.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -309.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -309.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.36719 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.0332 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.70703 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.70703 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.37305 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.04688 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.71289 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.7207 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.39453 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.06055 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.73438 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 125.4082 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.07617 -309.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.07617 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.74219 -309.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.07617 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.75 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.75781 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.43164 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.10547 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.7793 -309.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.7793 -309.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.11328 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.78711 -309.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.12109 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.79492 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.46094 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.12695 -309.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.79492 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.46875 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.14258 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.80859 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 247.48242 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.14844 -309.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.14844 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.14844 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.81445 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.48828 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 281.49609 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.16992 -309.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.84375 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.50977 -309.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.50977 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.17773 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\004) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.84375 -309.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.83984 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.51367 -309.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.84766 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 345.52148 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.19531 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.5293 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.52539 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.19922 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.86523 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 383.53125 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.19727 -309.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.53125 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.19727 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.87109 -309.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.87109 -309.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.54492 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.54102 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.20898 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\014) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.21289 -309.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.20898 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.88281 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.55664 -309.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.55664 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.23047 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.9043 -309.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 485.57227 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 488.23828 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 494.91211 -309.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 500.91211 -309.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 507.58594 -309.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -324.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.00586 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.67383 -324.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.00781 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.68164 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.67773 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.35156 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.02539 -324.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 65.35547 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.0293 -324.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.03711 -324.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.37109 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.03711 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.71094 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.71094 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.37695 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.05078 -324.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.72461 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 123.39844 -324.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.06641 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.74023 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.74023 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.4082 -324.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.08203 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.74805 -324.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.08203 -324.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.07812 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.74414 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.74414 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.41797 -324.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.75195 -324.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.75195 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.41797 -324.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.08594 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.75977 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.75586 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.42969 -324.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.09766 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.09375 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.76758 -324.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.10156 -324.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.77539 -324.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.77539 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.44336 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\007) [6.78 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.77344 -324.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 289.44727 -324.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 295.44727 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.44727 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 311.45508 -324.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 317.45508 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.12891 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.13672 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.81055 -324.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 347.48438 -324.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.48047 -324.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.1543 -324.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.48828 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.48438 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.1582 -324.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.1582 -324.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.1582 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.83203 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 409.5 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\013) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.16602 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.83984 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.16992 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.84375 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 451.51758 -324.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.85156 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.85938 -324.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.85938 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 477.5332 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 480.19922 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 482.86523 -324.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 486.19922 -324.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -339.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -339.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.01367 -339.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.69531 -339.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.36328 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.03711 -339.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.70508 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.37109 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.04492 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.71875 -339.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.71484 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 85.38867 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.0625 -339.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.73047 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.4043 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.07227 -339.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.40625 -339.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.40234 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.06836 -339.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.06836 -339.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.40234 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.06836 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.74219 -339.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.41602 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.42383 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.08984 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.76367 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.76367 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.42969 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.10352 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.76953 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.77734 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.44336 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.10938 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.7832 -339.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.45703 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.12305 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.79688 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.46484 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\014) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 237.46875 -339.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.46484 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.13867 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.80469 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.8125 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.48633 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.15234 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.82617 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.83398 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.50781 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.18164 -339.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 303.51562 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.18945 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.85742 -339.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.85742 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.85742 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.53125 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.19727 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.87109 -339.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.86719 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.5332 -339.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.5332 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.20703 -339.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.88086 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.88867 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.89648 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.5625 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.55859 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.23242 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.90625 -339.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.90234 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.57617 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.24219 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.91602 -339.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.58398 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.25 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.92383 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.5918 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.26562 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.93164 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 475.60547 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 481.60547 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 488.2793 -339.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 492.27539 -339.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 498.94922 -339.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -354.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -354.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.01367 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.6875 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.36133 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\010) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -354.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.37109 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.04492 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.71875 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.39258 -354.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.72266 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.39648 -354.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.06445 -354.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.06445 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.73828 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.4043 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.07031 -354.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.73828 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.41211 -354.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.08594 -354.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.08203 -354.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.75586 -354.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.75586 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.42383 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\010) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.75781 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.76562 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 179.43164 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.43945 -354.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 195.43945 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.11328 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.7793 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 207.44531 -354.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.11328 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.78711 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 223.45312 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.12695 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.80078 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.46875 -354.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.46875 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.13477 -354.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.80273 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.47656 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 275.47266 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.14648 -354.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.81445 -354.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.14844 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.81445 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.48828 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.48828 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 310.1543 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.82812 -354.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.50195 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.17578 -354.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.84375 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.50977 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.18359 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.18359 -354.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.85742 -354.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.85742 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.52539 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\012) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.52148 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.19531 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.86914 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.86914 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.54297 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.2168 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.89062 -354.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.22461 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.89844 -354.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.57227 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 446.23828 -354.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.57227 -354.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.90625 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.58008 -354.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 469.57617 -354.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.91016 -354.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 479.58398 -354.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -369.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.66992 -369.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.66992 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.34375 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.01172 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\004) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.67773 -369.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.67383 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.34766 -369.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.68164 -369.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.68164 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.34766 -369.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.68164 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 89.35547 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.36328 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.35938 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.35938 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.02539 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.0332 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.70703 -369.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.38086 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.05469 -369.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.72852 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.73633 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.40234 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.07617 -369.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.41016 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.08398 -369.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.08008 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.75391 -369.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.42773 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.75781 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.43164 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.10547 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.7793 -369.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.7793 -369.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.11328 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.78711 -369.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.78711 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.45508 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\010) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.78906 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.46289 -369.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.79688 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.4707 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.14453 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.81836 -369.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.14844 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.14453 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.81836 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.49219 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.16602 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.17383 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.84766 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.51367 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.17969 -369.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 359.51367 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.18164 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.17773 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.85156 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.51758 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.19141 -369.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.19141 -369.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.86523 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.53906 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.21289 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.2207 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.89453 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 441.56836 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.24219 -369.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.24219 -369.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 457.57617 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.25 -369.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 473.58398 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.25 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 482.92383 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 488.92383 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 491.58984 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 498.26367 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 500.92969 -369.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.00781 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.00781 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.68164 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.35547 -384.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.35547 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 48.0293 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.70312 -384.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.37695 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.05078 -384.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.71875 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.39258 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.05859 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.72461 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 93.39844 -384.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.07227 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.74609 -384.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.41406 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.08789 -384.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.76172 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.43555 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.43555 -384.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\005) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.66602 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.01367 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.6875 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.02148 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.69531 -414.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36914 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.03516 -414.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.36914 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.03516 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.70898 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.70898 -414.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 82.04297 -414.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.7168 -414.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.05078 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\025) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.38477 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.05859 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.72461 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.39062 -414.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.39062 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.05859 -414.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.05859 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.73242 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.74023 -414.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.07422 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.74023 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.41406 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.41406 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.08008 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.75391 -414.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.42773 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.10156 -414.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.76953 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\025) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.10352 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.77734 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.44336 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.10938 -414.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.10938 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.77734 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\013) [7.68 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.44336 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 240.11719 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 253.44727 -414.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.44727 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.11328 -414.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.44727 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.12109 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.12891 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.79492 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 291.46875 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.46875 -414.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.14258 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.80859 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.47461 -414.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.80859 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.47461 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.14062 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.81445 -414.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.48828 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.1543 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.82812 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.49609 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\015) [8.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.83008 -414.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 369.50391 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.16992 -414.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.16992 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.84375 -414.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.51758 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.52539 -414.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.52539 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.19922 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.20703 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.87305 -414.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.54688 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 439.54688 -414.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 442.88086 -414.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 449.55469 -414.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.88867 -414.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.88867 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 471.5625 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 481.55859 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 488.22656 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\012) [9.084 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 498.22266 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 504.89648 -414.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 508.89258 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 515.56641 -414.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -429.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.00781 -429.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.68164 -429.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.67773 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.35156 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.01758 -429.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.35156 -429.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.35156 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.02539 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.02539 -429.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.02539 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.69922 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.0293 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.0293 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.70312 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.37695 -429.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.37695 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.05078 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 128.05078 -429.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.38477 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.05859 -429.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.39258 -429.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.06641 -429.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.39648 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.39648 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.07031 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.74414 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 181.41797 -429.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.0918 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.09961 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.77344 -429.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.44141 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.10742 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.11523 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.78125 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 233.45508 -429.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 239.45508 -429.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 246.12891 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 256.125 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 262.79297 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\010) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.12695 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.13477 -429.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 282.13477 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.80078 -429.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.80078 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.47461 -429.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.4707 -429.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.4668 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 315.47461 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.14062 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.81445 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.82227 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.49609 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.16992 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.84375 -429.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.51172 -429.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.51172 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.18555 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.85156 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 379.51758 -429.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 386.18555 -429.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.85938 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.52539 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.19141 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.86523 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.86133 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.86133 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.53516 -429.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.53125 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.20508 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.87891 -429.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.20898 -429.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.54297 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.2168 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.21289 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.88672 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 485.56055 -429.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 488.89453 -429.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\003) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 8.00391 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.67773 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 21.35156 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.02539 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.69922 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.70703 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.38086 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.71484 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.71094 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 77.38477 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.05859 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.73242 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.74023 -444.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.74023 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 109.40625 -444.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 116.07422 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 122.74805 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.74414 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.41797 -444.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.08594 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.75977 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.43359 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.10742 -444.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.78125 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.78906 -444.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.78906 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.45508 -444.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.45508 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.12891 -444.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.125 -444.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.12109 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.12891 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.80273 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.46875 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.14258 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.14258 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.81641 -444.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.8125 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.48633 -444.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.82031 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 271.48828 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\014) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 279.49219 -444.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.48828 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.16211 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 292.82812 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.83594 -444.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.16992 -444.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.84375 -444.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 316.83984 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.51367 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.17969 -444.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 335.51367 -444.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.51367 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.1875 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.86133 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.52734 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.20117 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.875 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.54297 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 380.20898 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.20508 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 396.87891 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 403.55273 -444.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.54883 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.22266 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.88867 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.5625 -444.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 430.23047 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.9043 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 443.57812 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.25195 -444.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.91992 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.91992 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 469.59375 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 476.26758 -444.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 482.26758 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 488.94141 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 494.94141 -444.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 498.27539 -444.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 504.94922 -444.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 508.2832 -444.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 514.95703 -444.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.00781 -459.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.68164 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -459.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.68164 -459.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.67773 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.34375 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 41.34375 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.00977 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.68359 -459.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.01758 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69141 -459.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 73.35938 -459.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 79.35938 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 86.0332 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 92.70703 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 95.37305 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.04688 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.7207 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 115.38867 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\005) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.05469 -459.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.72852 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.39453 -459.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.72852 -459.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.40234 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.06836 -459.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 155.40234 -459.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 159.39844 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.06445 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 168.06445 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.73828 -459.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.07227 -459.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.07227 -459.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.74609 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.41211 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.08594 -459.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.75977 -459.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.09375 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.76758 -459.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.10156 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.10938 -459.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.10938 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.7832 -459.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.7832 -459.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.11719 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.7832 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 267.45703 -459.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.13086 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.79688 -459.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.4707 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.4668 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.13477 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\014) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.13867 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.8125 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.48633 -459.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.48633 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.16016 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.82617 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.49219 -459.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.16602 -459.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.5 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.17383 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.84766 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.18164 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.85547 -459.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.85156 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.52539 -459.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.85938 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.5332 -459.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.20117 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.875 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.54883 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.21484 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 447.54492 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.21094 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.88477 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 462.88477 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.55078 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.22461 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.89062 -459.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.01367 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.6875 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 29.36133 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.03516 -474.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.70898 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 56.03906 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.71289 -474.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.38672 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 72.05273 -474.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.38672 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.06055 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.39453 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.06836 -474.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.06445 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.73828 -474.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.73828 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.40625 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\014) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 135.41016 -474.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 139.40625 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.08008 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.75391 -474.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.75391 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 165.42773 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.10156 -474.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.76953 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.44336 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.11719 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 194.7832 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.45703 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.12305 -474.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.12305 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.12305 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.78906 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.46289 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.4707 -474.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.80469 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.47852 -474.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.47461 -474.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.80859 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 259.48242 -474.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.8125 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.48633 -474.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.49414 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.16797 -474.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.16406 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.83789 -474.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 307.50586 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.17969 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.17969 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.17969 -474.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.85352 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.84961 -474.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.84961 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.52344 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.53125 -474.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.86523 -474.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 372.86133 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.52734 -474.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.52734 -474.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.86133 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.52734 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 394.20117 -474.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.875 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 407.54883 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.2168 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\006) [7.356 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.2207 -474.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 425.55469 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.2207 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.89453 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.22461 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.89844 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 461.57227 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 464.23828 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 470.91211 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 473.57812 -474.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 479.57812 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 485.57812 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 488.24414 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 494.91797 -474.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 2.66602 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.66211 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.33594 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.00977 -489.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.00586 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.67969 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.3457 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.01953 -489.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.6875 -489.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.36133 -489.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.35742 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.03125 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 76.70508 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 83.37305 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.04688 -489.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.7207 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 99.38672 -489.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.7207 -489.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.7207 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.39453 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.39062 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.06445 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 144.73828 -489.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 152.06836 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.73438 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 161.4082 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.4082 -489.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.74219 -489.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.41602 -489.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.75 -489.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.42383 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.08984 -489.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.42383 -489.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 203.41992 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.08594 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.08594 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.75195 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 221.42578 -489.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 230.75977 -489.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.75977 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 243.43359 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.10742 -489.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\010) [2.256 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.3418 -519.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.3418 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.00781 -519.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.67578 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.34961 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.3457 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01953 -519.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.6875 -519.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.6875 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.36133 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.03516 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.70117 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.375 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.38281 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.04883 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.05664 -519.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.39062 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.06445 -519.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 124.06055 -519.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.39453 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 134.06836 -519.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 141.39844 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.07227 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.74609 -519.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.74609 -519.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 167.41992 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.09375 -519.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.08984 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.09766 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\025) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 191.43164 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 198.10547 -519.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.7793 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 210.7793 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.44531 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 220.11914 -519.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.79297 -519.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.12695 -519.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.12695 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.80078 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.80078 -519.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 260.80078 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.4668 -519.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 266.80078 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 273.47461 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.48242 -519.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.81641 -519.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.49023 -519.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 297.48633 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 304.16016 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.82617 -519.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.82617 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.49414 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\014) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.49805 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.17188 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 340.8457 -519.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.8457 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.51953 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.18555 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.85156 -519.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 365.52539 -519.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.85938 -519.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 381.5332 -519.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.5293 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.20312 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.21094 -519.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.54492 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.21875 -519.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.21484 -519.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 419.54883 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.22266 -519.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.55664 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 436.22461 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.89062 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.56445 -519.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.89844 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.57227 -519.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.56836 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.24219 -519.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.91602 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 486.24609 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 488.91211 -519.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 15.33984 -534.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -534.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 25.34766 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 38.67773 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 45.35156 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.01953 -534.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 55.35352 -534.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 59.34961 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 62.01562 -534.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.01562 -534.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.34961 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.01562 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.68945 -534.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.36328 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.37109 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.04492 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.71875 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.72656 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.40039 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.06641 -534.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.06641 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 138.73242 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 145.40039 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\005) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.06641 -534.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.74023 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 163.40625 -534.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.74023 -534.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 178.74023 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 185.41406 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 188.08008 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.74609 -534.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 197.41406 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 204.08789 -534.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.08398 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 214.75781 -534.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.0918 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.75977 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.43359 -534.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 235.42969 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.10352 -534.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.4375 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.10352 -534.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.77734 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.10742 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.78125 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.11523 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 290.78906 -534.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.78516 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.45898 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.13281 -534.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.12891 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 322.13672 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 328.81055 -534.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.14453 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 338.8125 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.8125 -534.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 351.48633 -534.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.48242 -534.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 361.48242 -534.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.15625 -534.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 377.49023 -534.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.16406 -534.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.83203 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 393.49805 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.17188 -534.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.17188 -534.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.8457 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 422.8418 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 429.50977 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\014) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 437.51367 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.1875 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.86133 -534.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 456.86133 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 463.53516 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 466.20117 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.86719 -534.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 475.54102 -534.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 484.875 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 491.54883 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 498.22266 -534.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 502.21875 -534.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 505.55273 -534.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.99609 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 16.66992 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 23.34375 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 30.01758 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.02539 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.69922 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 53.37305 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 63.38086 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 70.05469 -549.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.05078 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.72461 -549.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.05859 -549.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 96.05859 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 102.73242 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.72852 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 119.40234 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.07617 -549.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.40625 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.08008 -549.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.08789 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.08789 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.76172 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.43555 -549.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 175.43555 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.10938 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.77539 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 187.44141 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.10742 -549.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.44141 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 209.4375 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.11133 -549.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.78516 -549.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 226.78125 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.44727 -549.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.78125 -549.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.11523 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.78906 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.78516 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 265.45898 -549.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 272.13281 -549.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 278.13281 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.80078 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\004) [8.196 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.4668 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.13281 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.80664 -549.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.80664 -549.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.14062 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.81445 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 331.48828 -549.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.82227 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 341.49609 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 348.16992 -549.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 354.83789 -549.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 358.17188 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.8457 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 370.8457 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 373.51172 -549.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.8457 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.8457 -549.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 388.8457 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.51953 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 401.51953 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.18555 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 410.85938 -549.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 416.85938 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 423.5332 -549.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 433.54102 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.21484 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.22266 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.88867 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 455.55469 -549.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.88867 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.5625 -549.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 469.55859 -549.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -564.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 3.33398 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 10.00781 -564.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 14.00391 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 20.67773 -564.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 27.35156 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 34.02539 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 40.69922 -564.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.36719 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.04102 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.71484 -564.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.04492 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.04492 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 80.71875 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 87.39258 -564.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 94.06641 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 100.74023 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 103.40625 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 113.41406 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.08789 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.76172 -564.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 132.76172 -564.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.0957 -564.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 140.0918 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 146.76562 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 153.43359 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.10742 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 166.78125 -564.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.11133 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.77734 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 183.45117 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.45117 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.125 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 202.79883 -564.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.13281 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.80664 -564.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.14062 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.81445 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 231.48047 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.47656 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.15039 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.82422 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.49805 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.17188 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.8457 -564.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.8457 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 287.51367 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\005) [8.028 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 296.17969 -564.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.85352 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.51953 -564.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.85352 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 321.52734 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.19336 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.86719 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 337.54102 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 344.21484 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.88086 -564.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.21484 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.88281 -564.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 363.55664 -564.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.55273 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 374.22656 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 384.23438 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 390.9082 -564.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 400.91602 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 406.91602 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 413.58984 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.26367 -564.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 426.26367 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 432.9375 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.60352 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.26953 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 440.93555 -564.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 450.26953 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.93555 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 459.60938 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.60938 -564.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 472.2832 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.94922 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 477.61523 -564.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 483.61523 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 490.2832 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 492.94922 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 499.62305 -564.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 505.62305 -564.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 508.95703 -564.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 515.63086 -564.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 9.33984 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.00586 -579.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 18.67383 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\025) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 22.00781 -579.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.00391 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 28.66992 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.34375 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.01758 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 44.68359 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 47.34961 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 50.01562 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 60.02344 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 66.69727 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 69.36328 -579.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 75.36328 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.0293 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\000) [2.268 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 84.69727 -579.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 91.37109 -579.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 98.03906 -579.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 101.37305 -579.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 105.36914 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 108.03516 -579.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 114.03516 -579.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 117.36914 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.03516 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 126.70898 -579.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 133.38281 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 143.39062 -579.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.06445 -579.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 154.06055 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 160.73438 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.74219 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 177.41602 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 180.08203 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 186.75586 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 196.76367 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 203.4375 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.10352 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 212.77734 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 218.77734 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 225.45117 -579.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 229.44727 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.12109 -579.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 242.78906 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.45508 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 252.12891 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 258.12891 -579.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 261.46289 -579.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 268.13672 -579.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.13672 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 280.14258 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\003) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 288.14648 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.82031 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 301.49414 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 308.16797 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.8418 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 324.84961 -579.58984] Tm 0 0 Td /F71_0 12 Tf ($) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 330.84961 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 333.51562 -579.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.84961 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 343.52344 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 353.53125 -579.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 357.52734 -579.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 364.20117 -579.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 367.53516 -579.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 371.53125 -579.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.20508 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 391.53516 -579.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 397.53516 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 404.20898 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.20508 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 420.87305 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\016) [7.38 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 428.87695 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 435.55078 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 445.55859 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 452.23242 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.90625 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 468.24023 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.91406 -579.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 481.58789 -579.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 485.58398 -579.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 492.25781 -579.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 501.5918 -579.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 507.5918 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 514.26562 -579.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6.67383 -594.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 13.34766 -594.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 17.34375 -594.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 24.01758 -594.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 33.35156 -594.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 36.68555 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 39.35156 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 46.02539 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 52.02539 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 54.69141 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 61.36523 -594.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 68.03906 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 74.71289 -594.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.38086 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.05469 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 90.7207 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.39453 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.06836 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 106.73438 -594.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 112.73438 -594.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 118.73438 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 121.40039 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 131.39648 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 137.40234 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\003) [8.016 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 145.40625 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 148.07227 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 150.73828 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 157.41211 -594.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 164.08594 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 170.75977 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 184.08984 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 190.76367 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 193.42969 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 200.10352 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 206.77734 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 213.45117 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 216.11719 -594.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.78516 -594.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.78516 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.78516 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 241.45898 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 244.125 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 250.79883 -594.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 254.79492 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.46094 -594.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 263.46094 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.13477 -594.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 276.80859 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.81641 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.49023 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 300.16406 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 302.83008 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 309.50391 -594.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 312.83789 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 319.50586 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\014) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 327.50977 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 334.18359 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 336.84961 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.51562 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 346.18945 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 352.86328 -594.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 356.19727 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.87109 -594.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.87109 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 375.54492 -594.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 382.21875 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 392.22656 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\027) [5.856 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 398.90039 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 405.57422 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 412.24805 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 414.91406 -594.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 418.24805 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 424.92188 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 431.5957 -594.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 438.26367 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 448.25977 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.93359 -594.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 458.92969 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\021) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 465.60352 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 471.60352 -594.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.9375 -594.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 478.93359 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 481.59961 -594.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 487.59961 -594.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 490.93359 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 493.59961 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 500.27344 -594.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 506.94727 -594.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 0 -609.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 6 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 12.67383 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 19.34766 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 26.02148 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 32.02148 -609.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 35.35547 -609.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 42.0293 -609.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 51.36328 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 58.03711 -609.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 64.70508 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 71.37891 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 78.05273 -609.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 81.38672 -609.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 88.06055 -609.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 97.39453 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 104.06836 -609.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 110.73633 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 120.73242 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 127.40625 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.07227 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 136.74609 -609.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.74609 -609.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 149.41992 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 156.09375 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 162.76758 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 172.77539 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\025) [3.756 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 176.10938 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 182.7832 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 192.7793 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 199.45312 -609.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 208.78711 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 215.46094 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\022) [5.892 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 224.79492 -609.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 228.12891 -609.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 234.80273 -609.58984] Tm 0 0 Td /F71_0 12 Tf ( ) [4.164 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 238.79883 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\036) [6.192 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 245.47266 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 248.13867 -609.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 257.47266 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.14648 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 270.82031 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 277.49414 -609.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 283.49414 -609.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 286.82812 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 293.50195 -609.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 299.50195 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 306.16992 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\014) [7.488 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 314.17383 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 320.84766 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 323.51367 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\032) [1.824 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 326.17969 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 332.85352 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.52734 -609.58984] Tm 0 0 Td /F71_0 12 Tf (") [3.252 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 342.86133 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 349.53516 -609.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 355.53516 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\037) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 362.20898 -609.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 368.88281 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 378.89062 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 385.56445 -609.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 395.57227 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\024) [6.18 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 402.24609 -609.58984] Tm 0 0 Td /F71_0 12 Tf (#) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 408.91992 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\030) [1.848 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 411.58594 -609.58984] Tm 0 0 Td /F71_0 12 Tf (!) [5.532 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 417.58594 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 427.58203 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\035) [6.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 434.25586 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\023) [5.808 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 444.26367 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\033) [9.228 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 454.25977 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 460.93359 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\026) [5.868 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 467.60742 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\034) [5.844 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 474.28125 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\020) [6.168 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 480.95508 -609.58984] Tm 0 0 Td /F71_0 12 Tf (\001) [2.292 0] Tj Q Q q 1 w [] 0 d 0 J 0 j [1 0 0 1 36 805.89] cm q [1 0 0 1 0 0] Tm 0 0 Td /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 130.03418 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\004) [11.124 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 142.04004 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\012) [3.762 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 147.04102 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\015) [9.774 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 158.03613 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\011) [9.846 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 169.03125 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\013) [3.762 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 174.03223 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\010) [9.342 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 189.04395 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\003) [11.178 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 201.0498 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\006) [9.396 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 211.06055 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\011) [9.846 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 222.05566 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\010) [9.342 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 236.39941 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\001) [12.924 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 249.39844 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\000) [9.594 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 264.41016 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\005) [10.62 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 274.06934 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\010) [9.342 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 284.08008 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\017) [9.144 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 294.09082 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\020) [5.778 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 305.08594 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\002) [12.096 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 318.08496 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\016) [10.35 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 329.08008 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\007) [9.558 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 339.09082 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\021) [9.738 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 350.08594 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\014) [14.832 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 366.09082 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\010) [9.342 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 376.10156 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\015) [9.774 0] Tj /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc 0 Tr [1 0 0 1 387.09668 -14.10449] Tm 0 0 Td /F30_0 18 Tf (\020) [5.778 0] Tj Q Q q /DeviceRGB {} cs [0 0.6196 0.8784] sc /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 36 136.89] cm 0 -100 100 100 re f* 0 -100 100 100 re S Q q /DeviceRGB {} cs [0.8863 0 0.4706] sc /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 177 136.89] cm 0 -100 100 100 re f* 0 -100 100 100 re S Q q /DeviceRGB {} cs [1 0.9255 0] sc /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 318 136.89] cm 0 -100 100 100 re f* 0 -100 100 100 re S Q q /DeviceRGB {} cs [0.0863 0.0784 0.0745] sc /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 459 136.89] cm 0 -100 100 100 re f* 0 -100 100 100 re S Q q 36 36.39 100 100 re W* q q [1 0 0 1 0 0] cm 0 0 595.28 841.89 re W q /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 36 86.89] cm 0 0 m 100 0 l S Q q /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 86 36.89] cm [0 1 -1 0 0 0] cm 0 0 m 100 0 l S Q q /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 53 119.89] cm 66 -33 m 66 -51.22606 51.22606 -66 33 -66 c 14.7746 -66 0 -51.22606 0 -33 c 0 -14.7746 14.7746 0 33 0 c 51.22606 0 66 -14.7746 66 -33 c h S Q Q Q Q q 177 36.39 100 100 re W* q q [1 0 0 1 0 0] cm 0 0 595.28 841.89 re W q /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 177 86.89] cm 0 0 m 100 0 l S Q q /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 227 36.89] cm [0 1 -1 0 0 0] cm 0 0 m 100 0 l S Q q /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 194 119.89] cm 66 -33 m 66 -51.2261 51.2261 -66 33 -66 c 14.7746 -66 0 -51.2261 0 -33 c 0 -14.7746 14.7746 0 33 0 c 51.2261 0 66 -14.7746 66 -33 c h S Q Q Q Q q 318 36.39 100 100 re W* q q [1 0 0 1 0 0] cm 0 0 595.28 841.89 re W q /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 318 86.89] cm 0 0 m 100 0 l S Q q /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 368 36.89] cm [0 1 -1 0 0 0] cm 0 0 m 100 0 l S Q q /DeviceRGB {} CS [0.0863 0.0784 0.0745] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 335 119.89] cm 66 -33 m 66 -51.2261 51.2261 -66 33 -66 c 14.7746 -66 0 -51.2261 0 -33 c 0 -14.7746 14.7746 0 33 0 c 51.2261 0 66 -14.7746 66 -33 c h S Q Q Q Q q /DeviceRGB {} CS [1 1 1] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 460 86.89] cm 0 0 m 100 0 l S Q q /DeviceRGB {} CS [1 1 1] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 510 36.89] cm [0 1 -1 0 0 0] cm 0 0 m 100 0 l S Q q /DeviceRGB {} CS [1 1 1] SC 1 w [] 0 d 0 J 0 j [1 0 0 1 477 119.89] cm 66 -33 m 66 -51.2261 51.2261 -66 33 -66 c 14.7746 -66 0 -51.2261 0 -33 c 0 -14.7746 14.7746 0 33 0 c 51.2261 0 66 -14.7746 66 -33 c h S Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer end %%DocumentSuppliedResources: %%+ font T3_30_0 %%+ font T3_71_0 %%EOF cups-2.2.7/test/onepage-a4.sla000664 000765 000024 00000123015 13255074424 016555 0ustar00msweetstaff000000 000000

    CUPS Software Test Report

    This software test report provides detailed test results that are used to evaluate the stability and standards compliance of the CUPS software.

    Document Overview

    This software test plan is organized into the following sections:

    cups-2.2.7/test/str-trailer.html000664 000765 000024 00000000022 13255074424 017262 0ustar00msweetstaff000000 000000 cups-2.2.7/test/test.convs000664 000765 000024 00000000630 13255074424 016162 0ustar00msweetstaff000000 000000 # Test file listing potential filters for conversions application/pdf application/vnd.cups-pdf 100 pdftopdf application/pdf application/postscript 100 pdftops application/pdf application/vnd.cups-raster 100 pdftoraster application/pdf image/urf 100 pdftourf application/postscript application/vnd.cups-raster 100 pstoraster image/jpeg application/pdf 100 imagetopdf text/plain application/pdf 100 texttopdf cups-2.2.7/test/test.types000664 000765 000024 00000000145 13255074424 016177 0ustar00msweetstaff000000 000000 # Test file listing potential MIME media types that are not in the standard mime.types file image/urfcups-2.2.7/test/testfile.jpg000664 000765 000024 00000616574 13255074424 016476 0ustar00msweetstaff000000 000000 ÿØÿàJFIF€€ÿáExifMM*ÿÛC  !"$"$ÿÛCÿÀC"ÿÄ ÿÄh  !1"AQaq‘2¡±Ñ#Bru³ÁÒ$34567RTUVbst’“”²áðS‚•¢Óñ Cvƒ´Â%&DWce–£¤Ô'EFd„…òÿÄÿÄG!1AQ"q23Ra‘±4¡ÁÑ#BSr’ð‚Ò$TáñCUb²Â“ÿÚ ?ìº(¢€(¢Š'ÒÏDèó‚äq4Ëlë“l¸Ûb44:²µ°;m¹>B¨æ¾¬~vC‘Úà.qæ¿Dm-6TXÕ‘]8®UÍÿR"…ïŽú[ãŦçߌV\?èÚ+W÷V’€¿ø^ì/œ9m¼ˆC¢·$0ö:ÆÂÒ¬wŒïNUÀ¼oÒ±éåÅé½0]88ÛÝq¾²@fHL€”-Å´4‚³¶I$y3!ãþ—¸¦WE}3¾Þ¬6»ë.ùz¶7ùåÐÓ…°F0HJÇ=CŸ"k>ël0ãΨ% ¤©D÷2j?ÑßðÿpÚx‡†d¹*Ü·VÊ][*oRp¬qžúåûY¹5ÐI—+OL“¸†Q µIô—~ŠâNK.ë 9”¤±ÀÜÕ¯õp[ü'ÐÝ®[÷iòþŒÔäÅ}b† ´¶žíZµ@Lx›¤Û]¥žèávù’nwÈëÛ­õl6{¯';èW yTï"¹nçtD¿«'Œ¸‘Ò‚8=e î êÂÈõý™ÏqªŽòçJLýOü1ÒlŽ”8„Nxê [ćPRÜJ^¬¨å½’AHO¬Ð@2(®RáÈÝ ðÕiÃ6·H> 7»K“îÑ%Ù]PÞJR¦Æ’>ú­:kã+’æñúOMòþ¸£O"Õcá·d.,¤ãÀ!€'<òG3œ;⌊ån(½ôÒWp‡D–Î(•ÃîµÃ‘®¼Qs‰”<§Ú @ÒA©'׿,TC‡8çú6â^“¾ñ}lj#p]µëw¥>²ÛÒxVâ2APäóÂqš¶(ȯŸvî®–ËçñM§¦»Çñ%ÂâÂ/5³!›C„jm!`6@ÎŽÈærœb¤Ý-ñòïÝ5qqIOÀ1­KôkpˆŽµ€pë弨…*[Š·¨¨wB­_èÂÆß_áñ èʮq\+nSeD¶°¢®ÁNOy©QEEPQ@QEQEEPQ@QEQEEPQ@QEQEEPQ@QEQEEPQ@QEQEEPQ@QEQEEPQ@QEQEEPQ@QEQEEPQ@QEQEEPQ@QEQEEPQ@QEQE;ߦ| 7àöÒäΡ}B¬9¤é÷oê®ú—::¼t}Ñáþ"CMÝeL‘&WTàp¼%=¡±ì¤m[´P‰ÀÝýP< î¬PøY«œ§âmçšiJá$’"ƒ¹;Žu8é;†úi·q\w8fßeã¾vÜÜgì×d°Ûh} =¤„ŒœgbGiC« è 9A©û-ÿS÷Y!µioŠ8ª{žƒή4v[t,0…²2¯.ì÷×BtEˆ`ôkcÅ0aÀ»Eˆ˜ïGˆ­M¶Ù@''HI;óÍJè 9“ó%éÁé²â¨Q ßŒÞ Z‘éiÀ­aZ•ö½… íiÏŠzâ‰Ü%Ðç ÄVî—UñEô€ÚQ#íòK¼¿tE Åqï¦î6âöý,Y<(»=ŠG^ ÃËBr¢‘ºQpgÏ5T†zk¸t5jèùÞáÛM¾Å.Ì ËA•qÖ®±k¤ä3“· 1]¥EË\mÃüeꂼqÇD\UÁ²U½¸¸³g¶M¸6ƒÖ¶RT“žyJ†<`ýôi|éK ^‘å3pL›Íûˆüy’„ËTs¯'ö¡EÅÜÝÕqÏÔåчqdž&º[fµ:bµËf)¦ßWyRGyÆøÆyóÞ¬Þ±Z8fÅÇb€Ì tFú¶ha)ý¤’I'rI&€¤:)°tçsâ‹d®>‰Ãœ9g¶7‡˜ƒ‡_¹, %JPÕ dd””ù ò!WÑßOüCl¹ðOðÿ ñC_RbqUÁM‰Y$`¤' IgdìIçµuÅw£>g‚øɬ<§Ñl†ˆåÒ1Ö(ұݕdã»5"¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š( ^îÖë,:é)c—œdòSæÁÂ(Ÿï}Õõ@ ]Uæ ]äQêSå“èugæÁÂ(Ÿï}~hüü"‰þ÷Ñ\§Š1\ò8u;åsèugæÁÂ(Ÿï}~hüü"‰þ÷Ñ\¨(®yz+ŸCªÿ4n þÄÿ{è£óFà¯á O÷¾ŠåJôúy$z+ŸCªÿ4^ þÄÿ{è£óEà¯áO÷¾ŠåaÊ€+žI£ÊçÐêŸÍ‚¿„1?Þú(üÑx+øCý` ôW|Ž=NydúOù¡ð^3õÁýüÑ8/øAýfŠï‘C¨òÉôGS~hœü ‰þ÷ÑGæ‰ÁŸï}Ë4c4ò(uY>ˆêoÍ‚ñŸ®Ÿï}~h¼ü!‰þ÷Ñ\±XŸU<ŽG–O¡Õ?š/b½ôW‡¤n ÿPÄÿ{è®VöV'<Š=G–O¡Õš?ÿ¢½ôR¤q· ­„>›ÔbÒþ*·Áù+’v©, [c4¥ì–Ê€'–õ›EQŠ’fœ5iU“LéAÆ|0y^#ü¿E(GØÖH¸´¡â3ôW<[Š–+ÀÆrGwŽ)úô'V•>.yã¼WWòÃSÔ£†S¾gbç_¢©[ºÞíÌÊ´¼Mm¡8ÖâÌÓƒƒ³/O®Îýõcåú+ß®¾ýõcåú*ŠK£öÕxú¿!ó”p8¦ þ—Ñ\CǤ>–c¥KZ»…L­¼)5l…;Ù$oµqUœ¶G-ÔêÅt¥ÀsÅ¿Þú+ÍW£ßáL÷¾ŠåK‡ Éa¥)'V*#%Õ1$¶°AO1ŠŒ«Î;¢j ¶ž”º?WÅâˆ'ú_Egù¦ðð–ûßEqTWÁ;&•)â‘Σå2è;4vQé?€G>'„?¥ôV*éK£ñÏŠ ÿ½ôW)ä¨îw¬‰ W|¢]öhìet±ÑÚ~7ÁÒú+Äô±ÑÒˆŠà’~ëè®/˜ÒJr#‚©èlwœT•yt"à‘ÜѺHày†˜â8‹Yxcˆ,ϧSSÚZ|F~Šåž±õ/F’¿¶9«·‚XŽû=JŽT6­”âå¹UÉ˼CfkôIí'ן¢šî= ðm¹%SoñX™V¯¢™¸‚Ôh©# U'Òì6Ä€2®Ô†XÜéx~l}c~0·ÿ¿ù5âºfè½<øÊÜ?§ù5Àî«JŠOq¤¯+);ÖEU–d>‘ðÿðÝý–³]âÌnBJ™R`(¤0G²ŸF⨩.;nðU•}tu¥1K‘ÝOl(IqIZ9`àïÏ …N”å+æ ô G*ç3Œ6ü„!R öÄ œVÉŠu¶”ã-õŠdç¨_ÃxBfâÚ–Tœ¥ ýG`¤ì79ü[‘N"´é§•]JäÕ¹qÖ¥%R­'×€qî"¶¶´¬“‘’*·³J¾Ç²¢äZ.I^•>”¸¯“ã¶÷ãÂSÓÖí® ¨l¯Ò·u)[檣sv’°q$4T*éÒ[8ÛˇVû)kº šBÏÚ áC¿¸gžv©Uºçâ×[[âÛ_5nROKœ³µÅtT{ˆ8ÆÃfô¦¤ÍlÊŽœ–í(”’;²qóxŠ«8·¤‹ÅÊBfqØ,#J””|r­;‚{ÆIÀïÆ}R±\¦‘zSUˈ¬ö驇:sl>¤u*Îéß|òûSî5DÛºEâ8:‡Â.H#®ôî;CÏnüó¨_ñ½Â}ìÏôvRˆÉÓ”§–Ä#·ñ€ªëJPZ§%7c¯[q -)# ׊u ) PŽ¿=³\Ýmé"ò«Dˆ±VÄVÊ m7Ú@Æœ…gm°<´ŒczK7‰®Ò 1ÉŽ­˜ õ$«ǯ•vœœÕÈÎyŽ’“taÊiµ•¥w ïòC#Џ~8Ë×HéŠ~6wùzë›ÅÎ[Ê1âúIdŒ„g8ßé­ñú×t8óe  ç+;ïìÇuIÝjÊûWÐèãÄ6`–ðƒ:dŽv^qê$ ÔïpûM!×.l¥µ 8•à¤÷òªJ#Äk^Œ!NØ9Ïd¹ÜŸ]Gn—°ü¤úkL`3Ú9'×îåU*ŽOºŽªõûÂ'áØ¸O?·ÉZé#‚JK¼E _:·Û>Ë÷ rŒ‡VÒ’¥êm)äwõí·u2q«Ã{8ƒËÃc¸ò磌Z¤%khMJç\'¤îWÅâXjìêØ(íî¥q÷²§¯qÐÈ­ùùyã›-Á«Tw¤¸©ßV¬ŒŽñ·Žsãë­é¾ ©!Jd©$œ“œì@=Þþu–xÊéÙE$žçbٸׅ¯Úƒm¼Ç“%Ô•6Ús•2y ×*t!sŽ÷K–Hì(¶ØëB°Ë…€ÀÓ“¾Nqã·UÖÜ5YUä$¬QEh8QEQEEPQ@QEQE§Ážþr×Ï\來xQÚº/§qžžÿp×Ï\ê¤^ŽZ^óÎÄ»U÷Ì„”¡H Œã<© ‘¤àü”£Fü믾®ŠkvQ'±£Hð¯4ÖòÝ+·8hÒ(Ó[úºõ-dàc5ÌÖÜ’ÍhÇ•(S%<Åln0Z5€| AÔKVuA·aÔ†›[‹PB ”¢põ’ T¤à‚2ï§» ›ížöó—fà5o€ä…¤±Öu !GÔ0;;ìIÍF:=2n°3"S ±­¶Š;##}G~^UJÅÁÍÇ¡o`ò§Ô^•{RÛం㺜wSd´Ç+üî•çVC¦ìˆJ†UvÄZ|¨Óå[Â[˜ªÆŒW…5¿E3 4Š |«nŠ4]¸°œ¦±)ò¥ E`S‘LÂÆ…*RÌ †³ÙgãêÏùÇÑZÊ{©¡÷UÌ¥½M–ÈÁHÙCÏüüÕåq‰µE[©·¥GàLãLqÃ¥B”4`ó?áNqÜJÑØN”ó+ ŠÁ|™”6VtD dùïçR'LTº²· À)VÜ·öWͨgy™ô²C½¶à¡•ƒãÇ?òk\‘¬•% dóò¦Èn®Ò’t«9mùÒæä•,'@ѾÎy‘ßê­˜8*U5)­Þàm@ó4§ÐäÜž¡OAÕ¾ 2v¦>,¾¢B] ¥ ˮʊ?Œψ‹ô]ÒÃü;y\K³jvÅ-Ýe*:•“º‡¯™¯N¶"PóUÊiaóêOÒÛjÉ$Ÿm1^¸…»]ò½«K×9©×Ò•õzZJIQJÈÁ^B}øÈÍû‚ñnj|H°%G}!Hq-¤äzÅ6^ø‡.zìÓÍ¡imÖZ€¡…cùƒ^lø²}Ü­2êXxæ»d~ Y/¼>ÍâËp{«} ãFF[6¨”˜ËeÕ²¤¤©¤éPPö±«#†¬7°µc‹-‡ã¶Ž¯[¨!J rïÁ¯à«c£ ?)£÷I?8ª°œME5VL¿„ŽnãV+­[ƒî¯@V6j±ÀñÀ^&¼¢PR5$lO#¶3ŠƒÝ¡M³Ê1¥·¤ýª†éPñ½ZÚUÝ õ1N„ ®ÄcXßI¯Šb°[ê<ëY|[,Pì(+ñ‚¤÷Ò5I$V¥È4Ëq{ ÖQƒÚ¦û¦•CSc*'qËå¯Tú¼)©‚ÒBœdäïÌmîÍFqÐѽHZÛZp¬ŽÏpî>ºlUÁˆj~9 BZƃ¹+$dž[oŸUªc—I) aœeN%[ž[|ü«6¢0Ë*l…9«ã¢j¥M÷U­ÔÆ„!N¥s&¸\C›€ÙØ g—ùð©OF‰Ä°Ãm(6Ú\%JF’’[VÇ?çqM/)ˆãRAp$ˆ÷5¢5á Ë2Ypý¥j;dì7åòÕ5)ªqzêJ¼‡”î8!'8UWó*RQÜM:?!s$)娜šL[Ôÿ.Uó~QûWì*kÔlh™¬àr¨ýÙ \êl¶…(ŠŠ>¤ÝJÛ;ÖŒ#;mìŽQ©wv6GiÕ (Œê[ * Näœ y“-4”¥8'jqá‹:äÜ£´ÒAYPÜŽ^uªµ8æä_Ny–fX}ð‚ZЉRêðwªÕfÆØl {+.±­¨l$o¤ ûê`˜=ÆõíQqQV,о¥yw° ¶JSš§ºF²·^”„a@áXïÓR! ¡A@UÒáoÒ]Ž«–äâµ+(ÀšÜâðšØË#Nq½a%£§¯-2Ë µoJ=ýÕ¥ œíJ)Þ¤˜±Œ…œV‹zÝÒ;‡|,Voc5ã =—4œÕ‘d%±uÛJ­­-?kƒRN ½u7B‚¬n;ê·á{˜vVNp7ºÉrm«Þ…rÁ5ê*‰¤Ìö±Ð7 Œwmë.(s¿M7f•ÖšW~9ÔþíyJmn+­í½s¿ÝL»‚Óœ¤(ûj8©¤¬Ž¥vB'&‘¬“N²UãH\Fk ع\ëï©Ë£|5¶ ¨Á\Eº§Àº÷pRƒ¿ˆ$m+ œ*Ñ”óõUcõ*ÿ€ü6tã³'Ï.Õ£W‰L·"^#¸Û—;Òb7¢;AÆÖ]¬s àdüçIm÷ȼK`˜í½õõ¡¥·¥JcVýYÎçaâ3Ë<ø¥åGe÷f´Â­ªF‡¤•-:¶ø£ã éÛÌÕ*‰ìðÕæ[ìLlEq+-­·õ!ah:p*=ÇÛ~úò«JT竺$š,'-îÚ`%ÅJ}ödº†·m@µg`p¥dŽ=• ãá~jÝeËw™Œ¡I[›˜Ìå./#±€‘ÝŒœãÎ(é:z:ŠÊЙ7™BAß$$1Èû³¨s’9׉ï’'JyNÈ[ï:u<ñ9*#õ `wl;€«)PY®¶,Z‹%^”Ó+”Øëó#BúÅNdVNç$Ÿ¦¤<#ÆÃuµÛ¥”œú<ÇvÉ är¤ƒçUŠÜQNœöAÉß¿é¬Ö<ðC`ç»Õ­ÆëRi[c¤-7޾Ê*¹="ÉqQ *¾º;Šßr³…N3«o3N7ž ¼4¤KˆÂdÇ#R„ ±äp'Ÿ‡¶©Ûk ;OL.¾æ0•î7îÏ=¼iöÁÅw¾”¶Ü”ÆsùÕÅki|³„³ËqƒçU©M;ÁüHN”eç!Ñøî´µ6á(X!:T’ÑQ~!d°éK²¢çléßJ1¿ÑVÝ¿¤nâý‹m¬Å|=k‰ÔÒ¿×R3“v'•eÄ]ØîY~ÚôˆK#(•¤ÆœóߟX"•1•”ÕŽÓèê™PpÍÚ)ÝkšBT0¢¬¨ã>\é÷áûéPZ–¬œlqÞ“qF¼[h vÑÓpmM© <9‚6åS¥YEèÊ«aÛÕ’Û\§†‰ y)ÉÐANÝØåKٖ؊§T§¨„jÈí(痈ޢ薴;ä‚2£°ÆþÚn·ÝæI‘)×8@ß;ŽgžÙñ«ª4ÚK™AëqÖõup É}ÇÐ%)#´sÏüûéJó8§~š^Ó^ Zlzbá)¥© -¥Jûb3§l{1Êœ’Nœ¼·”¤åX8P;{‡/^4ÔÃ2Du¾R–ŠAÈR°GŸ,cü(„N J9ŽÖ8çžÿU|ú‹oFz™µÔ“BS«s>¾­[€sÞjD°†â-ÍA YYÆPç `¶8†´ÊB\Q ÏÙ4ã¿ |ùò¨ç_æ6Ãp¢+Ò;d'gûŸ!òü*pR”³\ÙN ]Þ¤wŒî®\î%¶Š“ ¢Kh#G½jó? ö’ÅÔëÁQØ'JElu}bŠÕÍG}ë&ÔU„ eG–kпSti¨«"Àè_¤é¼ qL î9"Æò°ãgrÁ?lŸ/]en¸Aº[Ù¸@ÛñžHZAÈP5 H %jFëV9Üzü¶>ê›t=Òß„®è³¨¹*Ù!àÚ˜Õž©eXÊO,géykÑeu¹žt•â ·Ù–Úf‡X F„jåÏç¦5ô‡`BÀÄ¢7Hm9þõD¸û‹­’”Ëmc$ºÙuµ„¶ 7ÔBI¸ìqçŠæ ½#ñ"ç8#3œu˜ZýÄãæ¬ø|,*'~Eµ©J“[‹+¤‹Ci:!Îsm»(ûÕâÞ?EÊ Œ› 2ž×^üœèrpÆÙïªÏâ å¤H½<”ž}SM {ÒjãàÎáë· K7tI¹8´ãìï$x§ûªrTpí;;—SÀÕ­ÖÂnu\Oéì)ÄÙBÚu…‚TRBV<Ž*H®XøÓõ7þ5»…ìÜDâéÞŒžµÐá)YR@8#aŒ±žt¾}âÚÕÅPÓ=·QJˆVT6)9Æù¯K Ä£5i=7Ãû\tc:¸eo)ÑáæwqÅ{E(T `nGÍQ;ê¤6bÊ!'‘H$dü†­òÊM]H‹¤Óµ‡Ví°‚2YAÍbä¤d41ä)*®15%%zPØ*^ü#Çvsî¥ònÑD-l­—”•ht$'(JwÎ9çsøùT^2•“͸ÉÔg™n†Ó¡õE.• +PH(φçaãP~#ÕÚ F”Rµþˆêt„r $c‘ÿyâ«ãëW[n–û*ÔË­”à'ecbÜnsÌTrÓp~eÁ›{ï¥L(-„åD„“’HÉÇ/eQZ²“´J„Œ·Õ6ð¬Ù¨Öûˆ–âG qZÚo×_+'g3ÉoYJEU2Ù¢…Éqâ;éâé|xÖ› ÄR¼ªt¦áBMsД ÄR¾É(!#⚟t} ºÔµ’¡Ï¸T *[ëwI#56³N.2;0Ôó„$b­sIÆ dj§%uHºì×}O",DV{“S(ÍÍj9vLb€‘œæ›ú1áèö[Z$ɤ)9R•ζñzB¾ ¶kWÇPîïÒÄIFòøîÆ>$¿2†VP äEQÜt¯I”©É5lñM¡–múä;¡XÉQ<ÍU|PÚQ J8=üëµqÕ™Õ+¶ˆI"²X”Œ“°¾±Ð ‰­3nG2p('|m¿¶²v‰+£nå5£Nö¿1É«cL¥+šæ•+pÒOkgºœüT¡†@ÄdŸ¦«Öo²]^t¸­²|ª¦–N¸Î¶·s™=¨Í8 •œ`FÙ9š²Êj³ôá¸,‘Mõz¶)\¦\θÑHNrz¤ý—\@´•Eii'%!!?5.s†š ™v-J¸-HŠÐˆH8'u+;r'—¨šlâ.â ±õC’JR¼Æw% òÈ yww„𵩬ÆÈq.ˆ›¦¢›éoúJŠäÄ–šq¤+À(§Þi#³nH”0­µŠR»•Þu¹ˆ’Úo8ò£ÌŸ>T—Ñ\HS‰*t jR@ÒõÔéã+Rv½×´ÅŒú9€ÄÁÊ1É/fÞõÿcÛçÊ™,3©)ÆPKÊTV¬æ¦ÑjIP \ôÓMúÚ’JyW¦«v‹1ùÖ/<gJ¢Õ—Ou%XɧŒ–Ü)4ÄwÕ±3Ùõ,‚žølwi‘ÿ‰v§·+«0H!ÜüT?Ww¶¨Ž‚xæU³¢K®XäÇKÚÖé*Î^q\†1ÏÆfñ¼›ÜD!éhZ$§[ZNÞ¢7ÿ<ëMLѧtìducšÅ³pE­ë{—IN,ÅqJÔ$g:y÷×9ô·Ýa¸N|µ[o¨О©Áœ¤<”9ø+'?¤—N’îÐb¬$õ4téq°P'9ÜžìwŠ£úJã{‡\×q–¤¥Ã‘€ $óQÀÝG~{xóî«»ÚÖܺ:½ÝÍMjk­Ôòó«fÁûQáÏüïLÍJ=¯2|(º%§®) È*Ø÷b‘uNd6Û„ž`xÖÅ‹¶§V–YI*' ùþ:™[¬‰¶BhH@T™#'¿BFŸ-ëì¡„36[dÈue(J† ûl}¹5)ëªÔÛn8„ !' Ω›¾ˆœXà ‡š¥¥—JÁ.«#ç<ùVé±ãMq¤K Ã`’°£©9Îùõâ}C’ÐÀ /g²ŒŽcè¥.ðüü¶ K›8uì;ÇÍ\WDœ¢D®1®.ÌfÏr¤7!¾µ¥<4©!9Ø‘¹åJl“zAá°áµÜgÅæ×ZmYÆp…drrÎ6ñ§GC ñìÐ@CÖÙVÀ¬ÓÍÉÞ­½h²@I>û¹«²‘È’N ézâÜvÚâ8‚hä¹ €—3ß©;%[çö»)\É«4Žã«,˜×ÁC‰Òò{a ‘²‡e@g‘ÅsÕÑ!ÆÛ…„»‚£ïßþ4¤Cµ.:œ H CŒå+Açœ ÁóS„&´Ð’“‹.;·FÖ÷òm3},éêÜ@ZU§À²såŸÅ[Ýz6ã <çŸf'Ã^ÅQU«Û§˜ÿNü7ÒâÍÝ”Ý#$iëò@$ãW%nyX¸û…ß¶9pUå˜í4X‡•Õ¸Œ2Së#q‘çPr«Ißs½*…rl1g˜Ûé_\´à!iÁN9þ*…8t÷cqó×Rq|4q–B,—[<¾±¥²²—“¸Ø¥ÆÈRñ:»¶®vâî¾póÅ7x²ØP y¶•ß²‡Ìpk^ªyÚ2ª˜nÉwuFËs«LFÎÍ¡I#Í"·8¤\R ÉÅ4ÁžÓ-¡k)JO–kg‘„žô“Œƒ[S08È}··×-LºkS`È8ç¸ç»×ã±ÆZŒÛÁ/u²ôõ‹=”)Dwóرóö{k»µ2Ý$—Øyz0sº²w>c–=µ›­aí-¼Ù%¹êÏÆ<«ÅÄ·¦[mÉ¿B ÏKü6A^O„‚;½g}ù÷r®µ®4úžºÄôÅõ8© 'Àîó÷ ìºßƒŽXXìŠ(­DBŠ(  (¢€(¢Š¢Š(Š(  (¢€…tÑ“Àîàövþz£BR?ê’¯77«Û¦ £Á/i)<Ùß×T:ZZÊ”@Vç}³VFMDÍR+=Ù¨£sÚl¶ÊÕÄZÐêTZSÍ×X€Û|så^ñ ÑöP‹už ™—GˆÒ†;j gOyÉÀÿ9­î,^„g?fº%¢P\yÖ‚GÙ”“’{ÂUî¬Õ±rv;›ð|:”ûõeeÉu,˜¼GÃá²SpC©ðSk榇¸¾ß2×qth aL «ìXÏŸÆ>5 o1a´ãí”—R”e%D’@àíÈÖ¸è·Ëœc]U!…4Pó¥ õS`…`c™8Á?ˆUT«U©+òF¼V ‡§kݽ‹VÏ>=ÑÙ"1 m…$ Rà#!CÊœCyî÷ÕDü¶-7öàù»n™•ÄÖ•¡Mõ4r¡¶@ïwdØ\Æ1¸Œ-‡ã7ciJô5¨¥ÄP Üz½ÞZ¡]í$y5°jÙ ïÕtŠÃ"²êûG³¤xK$•º2rC>ÜÖ´¡|ÜPÏçVvs3¦–—-®¸VÃ+„bKŸi‡.KÚÔ¥¼ÐYÀZ€òØU_ôbµÚ8©§mÑ=<Ò›lvudr“ì«£‚Yê8JØÞ0DVÉõ”‚~zªºc}§¸–›s.FsC‰ öu£Pߺ¼ U•).mžžKÒkØAJˆux>';{+$€GŸ~Ô©kh$#«Ë‡›€ÖiT•´QÕÇ(núkÜU>T„¡²HHI$ì›Ñ%2µ!ØÎ¡I;‚œëÍfó¥8ÂVFR®GÇ•l{Ž…¡o)IQäO:J¬ù!1ê'2fh(ô…Ÿµ#jÔ·e0îqÈ$üâ¶9"CË yÈIÜyÖ—¡'P<¶®wzïõ4n¬_rÍ^ºÃ¬ej ݃βp¨àÙÄV°¦ÒæTÙÏq¦f´D”VìɦԴk²3žÊ³ôV¥'“»é@~@F–\HÎ4æ³øFäR mIVÇR@ÏË\Ršg\`÷a*:GyðªÞÿ4Ž;m.-¢ÌWr•œî‰8ßíjÔŽòVî†áïVN}•Hqzœ_\“2ð+Ây„ä|ãÛYñ—œ,Ë(EEÝÙä\Ô…{Ò»ÜM¬kA ÆòðÇ-¹öÀ·<¦ Tt’¡¶½Èä<*å,Ѻ=(âa(Þã­¿¶ð{×Ìd«còyþêÓR½DLxÍ¡ ˜…©A9$Œ—º²e™M¬FJt$…ùmêÛ5¹¦ßSÈÉØê+ÎÙÎ3îð¨FR½ŠÝxÞ缇îL½Ÿ²u͓ݹWãªá •º¶ZH*RˆHå½X|kLgô¥%+âÊQû(OqRy¤÷÷ƒQ;bP·B¹ i‚<êpî^È׊®åN3|…ð˜SL5!ZFBTœ7ÛßS~â GSyF°$üZˆµ,8z¼¸®Ð' R¸ÎuqÔHÁ Œ`Ô%5ÞGx~>Ye-¬[–IAÞ‚ùXBD6ÔN;‚OÈjÄR”x®wlaSPÒ¬•ì¢]ÞD~³ÆŽ½*q½+Èû\cou-¸Ûáͼ9pŽë©’´¥J liR”OÏÝ^}%ÙfrækúAYW£K.ëóHpnÇ9ÛšÞNY#¶N@Ûè©L) ‰¨J}`¬à‚qÌ·ÏËÔX,SÞ·*3­©-;©‚Æ}cži,à܉‚Þó«¸ëIYêHÉ퓎z»« ªºŽÏdx4­O\mµ)m&j’ÛÃ$cQçÁÇ…D®°]ꟑÔõ*ÎPÙ ä6ç÷RÛd—ÅèE§ØXAQNt£;z¹Ó]åà–d ÉJ‚’¤‚p=G;óö{«U,ñ•‘ µc%q·ˆ§ª:q[ªKà­À‚4¬·!òwS5ºc±Ê^B–O3ƒßçJ.qä:ö¦µ«¹eC–<Í37©…uk:V7=üû«Z¦œZ<ú²nBËÍÉùO‡ZÕÜ78ç¿ùõQŠX¿D’¼iXYN7#nÿùSkÅ>޵:¬);⫇–¶d'«Ò[@:ŠÞY«r+¢§'fØÿps\§Uâ³X…a´¬ŸY,÷wׇ$Ýý¬ò›ºg’T’£€9æ¤\/…›ºE…|ˆ©ÂKÈiZ]Sa„©X+È#´3ò6#â»â˸…p0P½KodrJ»ý½ßó¦ÃpëBC$ñ¯¦ÁðØÂu5}B…,±NGC_øvMµéËáyçÄ…%mJŒøÆB\Ô>:4¨oŒ³Ï4ɈL;„iÂm öô|îDàžco1Rôq¥pÕ2Ý(]ÊÐ̧•«B–BRV¤žìNÀdvE ™ ñW)ømÉJc“„º R’0J”w0°ª5øE:“sƒÊÍ•(§±,_Ü/ÙfÞ”¥Å+ÓÉ>cʤöæ!ðå™W+‚žӞÑÜš¡ØzuŠ|;‹lz4i'(B¢–Üt‚I;ds'<ÆØ«A sŒÌ™Ò’ÔR5¥e+¿> 8z¹–éÛþ¦xbj:sßÑp›q⩪‘•7 cÝ*ŠqVâÐIV1š—ñ%þ 6»F” )ÎáP+Š”¥”•—\<ñY«MÓZd—´Ž¸ÀK„'•Kº±Ä»qã Ïa#0øӉԕàiµƒì¨óí) JÀÚ•ô'9¨œvž°þÖÒævWÌ“X°ø‰º©5¡Ü5y:±D‡¥îEÍ߃l¶¨â:b)ý ÃzV¡XØœòå·*®z'½ÇBd[$¾†}Э2%Ü †8PNHÊwÜc9èyò‚P\*Ï r7ç\QÅk‘.f´î RT…QÛ%'ß«éiEO[j{ÓÅÔô¯tùFãQ"%—Ê êIÒp6¥G#ŒOžõâÒƒ5o!M‡î…¥Zן-XÎû•¿"rTÃÀ-YÝ_ÁP%¶‰‰ÕÕóÏÙ>)É=¡Ùßp9™×[ y›‘RPÑq·J4¸6ÀÊ@ÈöƒãšW‹pg£Ã±uT£Í•’:Ä„ç!##'»<«²–mNè”Ý'G‚ÀfB›!®ÎqËóáYðåܸ•!ÖÔ·’ÊœS„Œ«O!î¦/x7='Š#e)<‰Ö/VkM²âˆÒæ©Å¶Ó&ÒœŠw‚Œ™ËÅGQTû¬é SÅjKd«J·ÂR¬mŸ`§‰WI+áDIëÏX_J¤’2ç‘Þª~+Bn”Êõ+ì@È =ù©4 ’›áh–†#:댩 QmŽqå]p²Üê–gdßAº2ë’JÒ•¬­II'8Ü{ÍL‡p‘ ¦Pô o¿,ŒùÔÇ›qÈî) Î¥$í…gå«ZÄpÙÓþˆgÚ(âqÍ¡=¦À–^HR]Pû@žÍ<ª2TxVÆä0%®#™Cà àkÎqGÝZ ÌS (]>ľ½-7«!X)Î6ÈgÕQÊqÉîD®¶9³®òYˆ¶T9·©.jàú±L²–ä)ž‹1!/¤œ-¬ãmóâ9Õ‚ÜÆ]â§¢³ÚeþȰ´“œŸQÆ|ªÆ-$ñot¯%$w ¤§(´J I1ŠG¶K[·[éSº››BáÉ¼w99<±+²ô“¨[Qø®[EÝÕˆ`‰ ©G»®g å•{‘¹Ó¹Ó*Z{Þ¢o :µõ¨»€©äŒ÷' ²ŽÅ£v²Ùïl™P­=BÀR¬221þ2˜ÙÄdí€6ïÉç¸Xg¥¹Ji‡&F`é}ÆšX-ç? HäyLé·¹±!Ö²[V’Ÿo:x·tÇ–5›É–Þ)–„½‘ËJ¾Z”Tã¤]üC”$ûÚ ¼?h6üÝ¢Þ]ô‡ÊŠP—´ƒ„(çÌšžÝÝŸuŽÆTgZOe/Œ¯V1žÖæµZ¸ŽÅs™ã:Ül×6É-\-CN’F¶Ïe[’7>lDE›ˆlA»›Ð®­¶-$°øëÔyœl<Ú³bÒèœp±®»²Ô…}M¥]7ðòN“#³èîd×n×,t9ÀPí]2Z.öÙ˜ì8ð)w Õ{¡C˜íwï±®§­xfœ41NŒé<³ (¢´ (¢€(¢Š¢Š(Š(  (¢€(¢Š Ó“W'xñim§e%öÔpà,¸~êæ»—6Å¢SÉ‚÷§Çr"‘öDŸ7îßqËtÕ&üHý>äÖó>–ÈÒµé*Û|å9»3nžŠR—‰޳‘JˆÈü«-\D©NÜ‹cNÚÔEg¼Ý]¹ü#mƒy7Ï)MCZœeÁË8n^T–ñÆ6]{Š.¨mhm]KÉ(Ù)WVtœl¥`ùÔ¾Õ}Dh®;náæ£1)#S«{Q •”‚FߎÞ/v9wM“i‡)â£ÛJÊðNAÏcøÄïŒf°æƒ•ìÏEbê´—ÀdàèÈ®ŽulÊrTt•¡”éJP •d©@jÜøøm¹©»ÎD•q ‡~j=Á¤CBTÓ*Q=^@.g$ã|c95°q3vYR$Ú-ЉNP·•j!DjÀäSSÜk}ÒÒ Ìø6 ˜Œ ­;靖îTr{Í\ë;eŽˆÅ5)ÍÊní–òÙÂçfXØui6¤i­m-#P%IY'˜ÎçÊ«¾©þ‡‹[™-Mj@iå²4¨ÈèGº’»ÄÜF_µHq(šç礆mEA)ʶÈÙ#qËc'2¨Ó ^x ‰âüU0”+R’èÉH>9Û;uÕQ%©Øæ‹ºqíìï˜G?ü³¿ËR3ÆÐÛK}tI­¸P•Œ‘¸ÈÁÕËzp— ðó'¯»)ÇžnJä¶y Jµ‚…“°N¢1¶G…X¶¸‰Û´ÛÄ –©”-÷›#¬*Sy™Ê°q¶NÝÕˆiÙJåÒòyÚôíàËë£>/±ñg¶õ¡â!·£»€ëdl2;d^ÜŠ‡tݶýQ GÙÓ©GËziè+‡ø/†‚f=sŠ»Û-)—T„õk*9%³± ñ]lú¡.î|=>ÜÓi[)Ö™M¸Ú' ugo ĬªÇ)SJí%£+yüOfƒ·¦°úÇ$´Bþ^_-2«#u‡ä)9Æ} P áÛ4¤\^†â~2’Gi@aJÓÌçÞ°—Ã$ÍxªÉ#u2 ³»Ù[^%¹ZæŠXj :ÆïÚËBÙÅv)‰J´yZÞåòÓÇØT”­![äƒêªJ?¾ô¨ñÑjZZqz\ZРàsÏ¿6’åë‡XD_†Ñ!,ž¨6ëi ËI8V;±¹Û>U¢lÚ=Ì8¬2†°Øœ,'”§Äf°8 ìŸèT Î*ºêÇbÖ}mBxªç¶§bóÜuXÿÍ[U9t0éÔœ(ö¹¤o·fµ+e€wÏÅÅD>»&vÓc¿ #ÿ1¯Å’zÀVÜRžð2÷«ª”†ký=ëåãXdÚ ÇvUQƒÅÉxƒ?Ê…&‹#-0Ò|Ôu~1NÍœ¹0Z‚“ºAljªcŒ!È$IŽÊ’¯K[e#¹IÜò©¢8µÍ8u†”s¶’SôÕ}}»*GÈšÉ)}* îÙsØò5F&0W.£«Ð”°½Õ„¦Ð€q¨ç»å¥,ÊŒÈyÛ£HHÛ‘ù<{©’=Îj´õ²@Ôw8f”ÃxH—ªIqo62•j9ÛË•b”â–ÆºPr4ÃyŸIuzÔèm$iÆs± ü[[}”žÉäÄ{!´ú,‡P´hm½jO2’V‘ጃíÀ¦xkT–’ømHhä)J9†6õî=õŽPu˧B*ĺЀâ[ièë\mz´%C^ygÌâ”Oi‹z’Ì€ôV€IaÕõr¢vN£xß8‘ð4‡†/BÖ]2:… -!Ü‘ ”(¶ýý¯Ò"]×v–…%Æä]óe{|d¾s¿®­¤¥mt°ò§™n•ßèG]¼´î4Ày¬äÈ>Dhüu'%¦›ˆ¨-©/²/‡r±©À€Ù# ÜoàF1(whåÇâª*ÂÀ Jܱ¾ïcÀïNȹ%·ãjK%–Ãi@h+me@éä7ß»•];²š}îiÜ·üu (8 2S—Ͻ@zÍGŸi˜¿c) jÀÛ'z\åÊ0Ê"õ Ž0¥ ,ò€F‘œwdŸQ™ ¼à.uŒ£¬8!-ŽÏŽØõW)«+Åâ•GÝ­ÖS- uå¸NÉIïòütîË©}”á @J†ÉñÒ(–ýa8ΰÚ!¢T| =ÇT6BDœyoN*2ö(£ÓïXwᛣÑX™Ä}äÈ€¨é<‚5«PÀ9ž_E=5w˜»{-—)e ”6@Â{ž}†¢§¸í½NEŒµ¸•éBR†ö<¹V$Üœp¯Ñ”ìá$øç™5Gg=QeJí,æH½L[(gYÐÒ œŽ~|‡º–@~Ø,áÇTà’·—‘ϘÛÿd](œ´Ÿ°qÍ\«&"ÉR4)†òHí“ãGJ ¡B¬–¶§¢P€Ò[Õ« dçû¹Ë‘º†TÊRÉ%A°¥nOº½D} 6R2B{GH÷åZ&²¶Òâ\¬ œéÀòÍE5™hg”Óz!LˆŽ¬ªYÓ’žz±œoM/@q…©-jR‚†ç s¿>ì|´ècG§K™Øì¢3IBŽ”;Õœ“çE-t+rÔFëžh¥ä«R†RÚ„µ ¦ÒÂPäs’ÎÙ4æ´¹”u$w9¤×‚lq!!8Rqïk2h…Gx±ÖÔÃW•jzHŠó’0S•€|†kÎs¬Š­÷Œˆéy4é:] I#¸ŠÅNšŒ•ù3΄5±TfÓf‘už‚ìÉaJŒÙ$“ñ¶çã]4ÆKL =!¡Â„áž´éQï$ Ç#¶{ü*Ï™»x†ó`¶1Í8劆]øYèÍ8òmM dä=UíáñP“yž¬ßNjGMýNßÒFíEâ1ä®×%L4à%$$$¡IZHRT±{…I¸ƒ€îp_L{$»]Æ!wPbcªŽóyç…!*mjî Sz±ÍGIýNÜqÃ\izÓ:þËÉ|¼T¶Ö–ÒH'Qä=UÒq8‚Ìͱ2Pë®§Qsb0wØøVö¢ÑºšÍ¹Kñ4 ²îÙZŒ¸†2Ar+©B•ýª¾Ç†ÔHÈ 'PPÈ%9 z=‡.ðûœ2%; ljò9JIÁù©†wžôß1ËtôºÃQ*)Q*ÇŽ •¿â©snªÓÅ6ËÓM©§R§HOÇÁꯒ‡«3,WxMiË‘vìT±zøo|9:Ë,Á¸²¶8KéÜ+×L7(ÎFPÁ Aûdr5ÓüSnƒ~²7 %.¶ëam¯ÒFAª/ˆ­)„§#+ÉÐOÍ^Å^££Í•7} ¥6q¨|sZ­²Ý¶Ý#Ücc¬aÀ°;Ž9Q{iÎL«:HJ¼)¡ÔÝRø5ábsQi²‰T•9xük”N ás*#¹RÙ$²>p~jã¾1²Ü_âiw57!KZ”T„!G+PÜç:·8jýp²-à ѡÁ…¡C)>x¨°zqºHbdL!÷JÙu®ÒyƒÞŸüë×ÂñÔ¦­ç.G¤±‘Ä[©SÏŽó(8Óˆ$ä…¤‚=õ5à‹•Ù<0a=5K‚]Qe’v@Æ<<{iÎãobââ”R“ •¸‘Ï–}”ÒÜGÃh ¨¥†Øä­5k:”Ï®áÜ>8|R›wHp SŠRÒHGw'zIi]YW>u©rÒ–q¬c³½5K9\9ÛPÉߟ/—ä¬ zŸSˆÆdprUÀ¼“´õûE/‹DD­i|¸HÊ}TÏbe¦£  œZЉÎàgèÅ=™kê„ïœ(+#=N¥<ºDó©b{dÜ߸`º°ã¯)ô´ÏÃ×M޶Rw)’éëZKÉÂñÌà~")ä)JZX’{¾8ñEj¥ZêÌùlw tdåOn„·…Úy˜2RP㚃!Á Ü“â@¤OMr6BÀRU¥JQß>}ÛR®Œù¶Á’‚µa$„¬“yœ÷Šiš[ôœ2;%C VGY;ž´Oš—í©ÍI(#´{JQ#$ç|ó¯8F։׿ӡ@+H')$ òÎ*cjq‰µ²¶Ú l…(ä,uaÂlÂÄ }ô¶ÊTJ‚t탎ïxÔ»kè]‰»XEu/!kK©=jI*N~/dàclíí>4ÖËóc©æ£K‘ ^¥‡3ŒsõTÞ}Þ/çtÅ„‰ €|vœðrûý58µ9£^TFvÇ2<}µbƒJÇsÝšJL†ŠezL’6BÖîOöÖm°É8 :”áR‰Ü`ŸV1í4­¦›i°•ºÛi¥†kÈ€”¹Ñ†Fý¬ïƒøë¹ç€ëHê{!½I%(lsÈÁömJÊÜOZ§Üʆq“à|?Îõ¥ë­¯Ò“¨ ¡¼ø}©Wûj HêJG#µ2ÎÌom!´0€HOXr}ƒz“ôXûÉ™+2^q JJ–JFsœ]¢ihP€H;ãa·ÉOÝJS7I,†õ¡$\‰újmh@³gE‰éBT‰}Ó¥—BÈKxA:vîÈ'Ï4ÑÆWøÊe¸!ÖXZÕÖitî½#>‘ÜøR›ûdNº”‰hïȪÖäó¯Ý¥)×JÜô©iÂ"!Da dàíËΣÛSŽWZ’Ù·‡»½>) …§«JHÈѧÇËë­SþÌõ½zœ §å²ÏÉM6 ¯A`¯¬$ d­:T}bžƒðqþ2ÇÈj8˜«FÝIáßà ¹ÅK¬-ßzé…Ûs•••,©xwšp»Ë©œ¸PwÊwçãžúe¸>üíN°±¥‘¬¤ì{÷H匦¶8ê9zo\ö|õ%y§WlF“— cu“Q»ÌwŽK‹?kRˆ[$»3Ž4æ• Žàû)öÏÄªŽ¼¥ç"8¤èR£¥i<Ò|¼ŽEE—¨7±ÆyŠõiì ózµêYmN…ú—¸†*ºe´Z¹L-õ< ˆ®â3§¨pmçHØ @ÜWk×ϯ©1²Ÿª…Ô1Rð®×ÐZìKBªÍ¶®QEL¨(¢Š¢Š(Š(  (¢€(¢Š¢Š( ê·Òz Š?GÇoFN¯{«‰˜ ëͱ–uŒ¥«9æIïå¿•w'ÕHËôK)R¥6%4¬$ï±5Ɇ5¢ÙnZÕÞ·È×5½N‚PHÛž´f±Wo>…ÐZ\‰È—~Œó-©m§›fN¢æAÃ<Çw3N @¹©¶äyМ)í-—ú´·**W«8ßlS¢æ³†”ÛQÑ!`!¢ÚR•€1¶«—–+Z¦—‚Ÿšë‰ º)P o‚qíÚªï>E«Nb}2#²˜É˜âÀ9ÐYŒ(sÿ™­J#‚u)*:NÞ÷³;VPø‘æ¤;,$þ†\SŠHYÛÏpÛ5&áfn×WœSNÇŽÑ -IÀQ9+ȹdT&¥Y%fDb‰N¼™l¼€Ìtý-½ ^«Äü• 6#Ú„yþÅœ…c'H#Ÿ<+W:“¿jâäh—ãÑ€+i(ët¨ïÙA;ãaÜ9wÖ á³9}SV×µ¼Ù*uÓÔ'8À$oÿ*ªSRÝQh‹"ti(R›y!¶v[™Hïòþ\©di’h$0ëŽ`vR¢²%8yàŠ’ZxNÒˆNGê™br ;Ær°Jß¼wnyÓ{\2_‚©Ùq˜î8Jœ8m8B°cNv•œíÝQý›Ðë‹&^î:†z•¬<¥rQlvΑ‚qãN­_'ºZëîZl%\†IäsfÞtï zK^' (Ka!@ø°@;g9¤‰iöÞÝ(Z7Jt£%Dàz¼y‹éûÎ4Ç+}áj˜ç¥@p¥G[!µn¤1xÇ'½HsS°áYæ>$¥!­ ¶2ÆÇnóD;7ÂH‡w’’”•8µ¹°<€N9Ÿ<»éæ5¶$EÆù|SËJ@eµ–ž‘ÌîNØ©¢É+ØÃ‡íèµ@W§NySå !l •²Œd„“°Ûš·ò5¹11ž2‹â™c¶êt†»Nip!X´26åßSn"º¥V&%Û¡";Ëp€;u{á@€~6xÆj¹àÞ.UžMækÑL‰€êy÷NG‰*æI_IM^Kr³ÑìNøšÄݪԉ*²È[…ĵ–f$$eDkVB´¤l9û³Qy¬IŒæ‡£8ÑW-IÆGˆ=ãηp¯H²d¸›†µ-×ÝKA È CÇ,wœÖÖÝ[2¤‡ßeOu1Ûk˜ï'#øcÇjÙCRÕ]Lõ°ðšîhl3¬—$È- ”€”’}~Êx±Z¬ªêäÏT§ÔpRžÊ°Áå«ßN7:„Æ\€ŒÇZCEÄ$,sRUœãrwÜú« TÆÛ¹¥•HœZŽBÖâô4ðFü’qᚢ®6¤¯•èNžJëRCÄSáZå7 )n7¡Kq˜ !]“ß‚Nû{½D¯÷Ò\D ÖØQ^|élÈÔ¢6ÎÀ [òï"¦÷ym-¦{OZââÐâû(P–r5s#|© Â}‰Õ!3“[K¶Šu!g‘ßË7:Ç 4ÓÔÔâ­bë0%°b!³æÒ•ÙÖ‡»ã'ÛP+š\júòÈ $!iPÁPÛlxÕË2?. mE€Ó äõJç¾ÉñÎ2rwØÕ)Æ J8Öâ‚òÔ”¹Ùí¨§>?ã[cZu#‘øêd•š"¦šRÃ;…õyJFHå¸8ÿXe:AJ¢Â q•/*XïÊv?)÷TTºòã 2áëT£ƒ¢,ýih6\%]bЉÛb>šªIµ«; éî=½-Ù0¤CKkCr-« <µ!YõöqHžDFEµR Ii^q¤¨öµzþ0ÊØÓ(Di)%m”ŒŒãâŸg#MÍ2W 8¦q$4à çXǰ ì4Ù“šž[ÉŠÀ‚Ò0$•£#âÓ„Üb#Ž6µ·-:µ‰ éîðϾµYb°ÚØqÆu§P*lŒ<)ÓˆU¸r”øê–øHf:NJJR'Ë©_6…‹ íys#+r3s Œ­å>¢2‘¤òï§vdÇÂGçvÁøøÿ&™VTÓ©8$aYñèÅ`u‘¶w©5Ã-¤J¯ & Æ&EÞp[ÐRâ ¤íQ5bä$̈KyV5g!šu¼¶§®8H=¶™>öi»†âFvL—l)m¯$ì69Ú«I6Ñm\58S¹º¹®Kiħ¨QB‚Oêà •Ž]ԵųV±€9RkŠÊ HÆsÕ+æ©K I­Is0]­!=1ÒGxfµ7ih2„ºòÖ°œ(žóJä€O~ù¯ »*GEr#db,‘êÒR҄䬸¬bš¸‚TZÕÔ …$Œvˆñ§R÷m@wŸ} ¸>ÛŒ­­CVÙÚ®¬)ÆÐM'a¿†ž ,²O:[)e.ŽÅ‘Õ\ÁûRp*A0…¤8;ÆkÆ‚J¢ÍÌËI¥-Lî9Ö»¢=.±Šôõ‰Æ¯ ÖƒšõÄÖîÆ7º6vh€M†äYJ`·’‚5+¸m«ÅN¹õ&™ 0•°—U ¹Î*îán²ñ »2S'Óc:¦R°<@)Ï:@ÇDË\Ò§$yÕŒzýuæÏé. YÒ­,²_È× yEJ é‘®ˆâ<ß@ÌGVú—dly®’âü7`PãËM¼Ãðlу,€{N¹§n&U½vŦfRÈ +Æõù¿ã4±ün…h§–2[jÞ½nž t05 Þ­? ‰ßG÷v§to­@9%…ƒÜSËäÅV!ÜS®!*I9¨ô.&—i³Ìb;„¶²§<û³ò}GÞvTõ—_p¨«zý‹Œì{¶ß_‰ñTñ)Ó]LŸ{PìTi±”NN{édvtlw"³|(‘ŠùÊÒíÙDï-XÐr…â°yE(qÍû*ØàÒ×|¶­4Úšt8~Æ4êßÁ©`0ÊU’Gh¼7B4¹¥»{QŠ“«`wÆ£œûÅ4ÛZZÕ§[…D Tæ™2žK$% é üTŒ´Rî­Ïx¯I»;ªa£ÚRŒ°•< ]ì„ì1êÿ Òã -‚¥ºu¤à[Yc´2â÷ÛÕ[&0œ/s޶©Bq[¯‡©SHèeo`˜L(e HÝ^"”!׺ðâU¨wøŒÖ¸ °U¨…Uñ `ªÔ;š–”œ)*ØòåŒéŠü¾¦cr+ • ød‰öŽÆò§ jL(JNN pðùëSí´ô7Øp¨•$€|<ý‡zRI«³Ø¥‹xÊ7[Ñwp·æh´Ë¼ZظöƒÑØRG¦I'8ÒIûœ÷V="tÑ÷%Wâ‹$K‰-"{JiÃÏ–­ÓTç ÀB¸nŽ!=iÔ•<εJ/V¸qà©Õ4„¤|u`d'™Çž3Z2=Ó>z¤–f™ƒ°çYïÀš–F„êWP°âtŽüŽï o-L‘=qlí¹/@‰h•§Èý'žNiâ$¨‘àaÛPÞFBpHpwçÄü”Ùj»Ï7â4«CyRqÙÏËïªé·™Éâ’f-ÚøÞ¹†Ðu¶“œà¢ù<êybt)jnG\‡²s‚G[®qeÅ)xJñ¨çRÉó.ÒlJ/º¾­MåcªJsËÕ̲|Èö±K`¹ðÛÂUÂ+Œ¥´·¬åDç¾U·¢æJîS‚T–’Æäç9ÿV’pÌ… Tˆ-¬d¼¿,yŸ^=Ƭ>3nILv¢ÈRR§”é o§"š­·xÜˈâÉø ¡ÙC«S‰)Ií«Q ŒŽ}c¢s˜Dél†$7%*Qp!ì2¼¤$?lž[ošñ[츂UÕä%9ããßL0f8™*%M”€p9øû*È芞§²4„¥) ØÈ°œ§ÐÕ¾#îjBÕœsÇjµ+R×éN…­HІ7¯/™]‘'¬${Ôj¼C¼WŠ,¢¬Ýú û"ã¥G¯JJµXQüX¤Suq¸îÐc¨©°7úiT–d7è胕)ƃ„’6œüؤD” ËjBKJVÇ)ï-\Ysu Û™#$§F 6ÀÅF¤!É1Øh“öG¥ ãl}5"t¥Ø(QNXΡìH4ÆÔ†[j*àÔÓŠ$`jÿìS8¥mé–”Åh­çQŒßáγ•ma¶¢¸ZÚ¬SŒwÒÛ”ël¢rxmÝZ·¥LÛÄè-!‰…M6à) lÇwËR;v‹Kêjá´@鯇%"IXl¿Ù(ç˜ÎŽ~Úíªã?©ñù›¥Ž·ì9{±¤~åQçëÍveNÉ·¸QE2!EPQ@QEQEEPQ@T_UË—ú–mm)ÙcHunNvÀ®B±ØbÜ#5&õç"RFTº²îã°”„±¶sÝÜ+´¾©´ô_$¡½jYÛHV;\÷®ZS3g¯ÒãÆÔ–Òë ¨ŽgçʲW“R²4RI£ ’íРÄT;\fB©ŠƒijÒtîpr¤ÍðÅþï89s £©*Jzœ£ïH ØmêôŸˆôIv·î8L–œ}æõŽØ:pÇ—"}U/{‰™nܵ¶û‰e-© Œã9'Ë9ǨÖiMÅi̹FìK?„î귪q£)elö22Ï8õùî°ðü;,ŒË¸Ãyׯ¥ºGWËrt“€0Ùß×Qiý"IJ;J.‘¡:·ûœŸîUWM~ø¹r '«m­ ¡`¨œàœ?ùT9³«*eî‰ ´´ÈŽ¸Ð£­;—JŠUœ·;sís<ëLëŠò„†ÝØ$¼]ChÁÎÅKQÆþ'ÝUl><)‘:ÜàVzÆ£¡²FÆÉo¢“qü([m‚ûYYÔã‹Ö²<†|3Ï—™ª» 7©fub]wâpØv32!‡ºÎÊ[p/ ÎêV~7~y“Z×Ä.8––ôc#²ÚB“„ÈcNÙÛ‘5^ [IkÑ™*8ËΜ•m¾ûŸq¯vô7KÌ›BžYJ¥‘Z-ŠÜÛ%³8›u3sp²–È;Œr¦¾%âɲœJÓÔuz5ç°R3†ÒF ÈîñÞ¡÷;´7Ü*!**ÉêŸ Rhöù·9Ée˜s:Ò2*V1òUªŠÝ•¹’ÿ¯ù/‚Ôx‹@F ñyr¹Ï#ßMò8ºâ«‘2:ù0B†¾´%Gc–0÷ä)ÅžˆøÁ†R¸n[$—Ò{MK¤sí„‘ÏÏ–ôóý0¨ËOñ\;Cè^춤>VŸ2’>óåL´ÑÎÓMÊÙw©Å´¡ÇÔ¦Ki)*'ìC)<ö>ëiáÛîyžÄE0û”¨ºÀÙg—Ÿ:¼ìÜ7Ño0¥EŽ.¯¥IX“-:°A;¶ýž•À3&°ô‰mÂm)û*–…¼¬÷”%#¸lIM-‘Lª®¥&í†,\Æ~ ™ ÊœËi•ã¯ÃÕIn/ͳ³Áz#m‚´´ØÉsIܨ”÷N7û_}órâ>Šmp½Û1s‹ƒ /FÃcøÁ $çaÏ#Ê›!JèBr“rá¸RœBSß8Øòì¥=܇}vR̼Ö!;;Ü©£q,¶­Î)O<5#%(sä >Gš_â§ØluFJPד‚ah%C—q¦kÍ›êtu.2–îPRBBˆxèߘÖ|»ê¤–ùK{[œÛ}â9·wì×$œ gøÒFîP¤)¥9Ô£d£VF‘ÅuO [þ§9,»or,rV‚ôޱ*8ðPQ#×±¨p§ ýs]l\=%†¬ÝF¤Hy ·7Rn€¥hÉ # ì3œm8Ê;e°Ï~e_f½^‰e¶RòúÔ§«KZ”V¬¥|‘‘·ÑHøž4†8å]¡?apuñÝB´² U¸ØŽucðqGqK­²RcLd‡ZXu.5·4¸ø¥9F£+ÜnúC¸É»ÄЉ²K)K@% Ý$óWd•ô!); mÀ´à:#¼œŒ¤…džt ¢ KO>…cH ÒÈvÕz:[ëÛí+RÛn†Øù+@YqÙyÈ!'8<‡ËU©§r“Gtún•H.%@Œ¬`FÕ´õ¶’VIß’±þ4¹»Jп³D[Š ÀoŒÒ†XC°]€ÑÕÍKÔÁæjŠ–µÑt*ÛIàÊmˆ«u¹‚|_H/ퟄVJÔ¤%Dù‘½80—$N+©!i :y÷?- ºõÉÜ6p ”ŽÏ#Ž!©FI"Å]ÎZŒm4AÒNF/ùÞ¢os®¥Ù¶=™É‰yJBc²•' œ¥´ƒòŠŒZíª‡v˜”¡]RÈSe\‰újr»£cSŽ­D Ž=`ü´–ôÐôä ]Z€V>ØrÍTª(Éß™ezù £}ˆxŽD ‚¥á;üméE¶Ôjjµhu*Ԗư?6}Ô÷èí4 Òq¨j—wã¥)ye¼ îF‘¾9ò×#Q4ÌÔjÆ ¶hµ4¦ÙÊ£•¯²R0FTAϺo«AQR7ÜITë˜ýŒç'~u‰KFSKVA¼ö«éâ»5¡•ÝÍ3âù6Ò_ Rö) `ã—»4Ù`„Õ²l´‡; ¨àiÎÞÚZÀSHCxF‘¹ñÏu7‰hIÒppùó«)·›™ãmN-Þ½-¶Ö¢®y;âOu'qô*:ÐèÀVÇÙ5ëŽÚ•#Y­C; ×¶D7ð4ÁA¦ÐÒPœï€ÞÜSÉ´iB]냤ï§¯ÂøÝIÖÆU¬Ýï&}–Ñ¥ûªa`ÀJG ãf¢H°ÈŽðl‚œ§#`®êyÓ¡(cÞéivÔ¢’ 9Òq‘ŠÉÁŸ äíÞ_2Î!¦£ßGò+î¼!¤$öB $“¬xœ÷÷R˜ ©i!½* çŠkiA%;œ Ið¥ñä,¨’p¡Ý_ÓXœ1q‘ù,käØÜ¯H ¤Öo„’¢u`ìÀ‹—PP®ÚJ¢0 È÷}þ®l„éó¯‹Äa凨éË‘¶3RŽd –ðÁÀÓ=ðbHÁäÇ[./+«k ©Ë|‘ŒýˆŸqñVÞ “RfˆS´™·:\ZÔ êÐ7ÉïóV+ZÉ9îÅ5Ç—èëiÆö%:V<ñNkpõ«l;éR-3õ uÙ¤jmA 2Aï¢C‹u^ÀV NR¬û'qgN¯]VlœÕ‡[&Þ­» ÉØçÄ¢–ËÒä„6“ÞH¦K ¸[Ì@QJ€öãñÓêN¶Çhrɯn5[ “ä~[ÇN!'ÖÌG*>§5“¥)Wwyî¦çûM¸êPBRH*Î3N²VD`—’{T‡9·­+-Jö œ|˜¬ “åËÄž*-"qÂl8JØêN¥¹§OëO3^ñ²:‹:úîÊJW¾ø#B¼7÷Sg =‹=­°é <ÖY=çnu#â8N]¡%™ ´áO¶Œ¨ŒÚPñðÎõÈWÊí6]]^m®¬D[¦Þ…¡JR\’´$<€ä<©©•©\G,ƒ¥ô§å¥òmÏ٭η×Dy+?b ‚R|9ãÆ£íÌb-Â<‡ Heä©`o°æF+”ZÌÚeI;“k˜.ÛVlæà²r>6;ö¨Ÿ v¸Æñ‘ôš\ÿÙÞoÑ•.Ciô…:èùØ«8ÆvÆ~JOÁ¶ù©âXVÉ )ÒB‰Üró"·JÖ#bAk1“ ¢bƒQ†²"Uœ~*Ý=P%9¦Þ…êm œ6óßHUÃM(’§P¾zR¤lŸUi<2Ù q¶µlJŒŠ‚eÙãÔ®8@ÿëÔg¹ ù«)%¶¸u ’߿µ:‡øZôŸ„Ê‚” ‚py{Ra&Û2c²¹‚@6‚””¨œ ÷Û`~J¶-jWfг… @yÕ¨´¶×Úä£SîunO»!æÒÞ†Ò•‚~(z¹û1Q.áë€iÕÈ! ¸”é!?I©B­òRØm)BÆàV¡àO?’ª”Ò.ŠîØom·.o®TÇhRJ’¥Œà<>ƒ[ìÐ ½KÒò 2  >äicœXA\i„ÔÒ;°9Vé ÈŽÖ·P¸è; 7‚sÝë®g9d2]â˜ËKQ[ÔÊF:УŒs#o-üM#¹å´4(¤«À M9Ê/©—KO)²:»GžN=›¤‚›k!IVÎr ç㮬ӊñE´×yø O:¾½"ÞØÖ†ÉbÈìV§ž–ô2Ä”°¹²ñÏ}¿j·Ü¥»Ån@Â[kÒ•'cô “?meyë¥áW²›¢.¨³— !¥ÚÂu îÜeGnP\Cê+m\ò6ùêÄyŽÎ†Æ”$TFðéuâBHÄ÷œv8ž¤2à^>å?Ý*á ‹>‚˜Î¸áyO(aØ ÔZyÃÛ÷R»X“Ò–º¤-°çZT¡€…)8Ç¿Õ]ÒÚ’z»ÔüêGOÖÈNV‡çŸÒ®{;«´«‹~§{SÏtÙÂ÷€¤uimÌ‚®Ö}ÔòÇñ‡}v•N;0¢Š*GŠ(  (¢€(¢Š¢Š(Š(  (¢€«¾ª Eè­×ä4]B&°z° 5[ ½õƬ$¯Q®GŸÂ÷(¯·ÞõºXP ôŸLJ[û¬+#ÕçTUнËi½-r¶•pšãf4X·Ç:ΩZˆR±Œç½R®ÒÛBŸ}õºBÊIÇoeX1¸0"B\¹qWÖBr†e;î5ã'Ã`9Ô®ÑÑÿ©´¿3ŠÐÁJIq°Dx’'Ÿ:ãµµG{E} NF#G[òY+¼¥Ÿ]:ÛaÞ–‡­/×Xâ2U°õ÷T¯‰!ðÊg)®¶Ý¦ÇÈÖ»m¯èã'Ã9Úf]¢c͹$Ø éLrTUXÀ幪ìUÎæÇqy‚mwk”# Hq·‹N‡Ná;㱿»ŠàÏ/#ÒÞ k* ¥`娧?O–)žM‰õ¼€–ûÊú±¾|A>ÊöG ¥×¦¢ÊJ@’ã@Ÿ`TTîqÍ-Åq¡pº5›ƒAÕ’TÛ-6‘©³ÈêYÈï䓚˜[nœ!fG¤ØlÊŠéB›.IB_QJ†:†‘‘p‘ßãPámž„ˆ«;r*ڔĉ9*HSJHï#eK²\ÊFÇd¿ùÍÊ‹iŒ…«dú3-µ¨òä€ <5yŸlq+å¤:’—³œòÆÕSRšHKm?Ï’~)õÖ‡ L+AC? 'lóæFṎ‹¸û.{’¾È¨ó”¯Œµr,=”Þ¿A”…•=%•ƒRɤ/À”ÉÒÛ Z”wRTBG¸Ò‹s7Hm•)gâ’èÊãê²1Ev¸”¶-ÊTvÑñwüu©¶Þ'Rsld~fg&æd8ÓŽ¡ÆÁæ„e'mÍ'{ÓÛ{ì-ÈÒ6J“g³Ê¬GÆáôMl)åd™ùso*õ|*ãíá™Ë*hëXù‰Þ’¡WD©+Ô8F ’>Ò1ZT.Ä•õ²5 À.gñÔµê=ÆIá{—XR@@ïQRqòíê­ñì“P ÝÆÚPÿÅ÷C'áw€×Öy¬íIýr’:ä•cžk¶—¢GŸH¸0ãÈ §'–⓼¨­ºJñ¥G;d{é8ƒ!ᧆÛ`ŒV^j$ßíÏ}&æÈJ¤-Hœi Ÿ{é¹MfJ ¸2•C™ílyx׊»T®“'-6RÊTð OÆZ0yZ܆×Rà+ì-jÉ Æqÿ:mú䳤²‘5¥ ²29îõR¥q´îqŽãeÅ’vÈNþü×\jôds6nDH±Ò®¡  TZN¥)HÂÒ­ÿŒ)›Å²T Ïeåäa ÎG«mû©_ÃÖ•µ%BsJ*!(ç J£›ÝN[¤(%ZÖœ$ƒþ~JÖ5)æÕ¿dà“ËŸ…"KwZ\ôÔè)Ô³¾ÝØ¢5â ㄵ%+%IÆÞ£Þ\ˆ·;ì8ÎaÆ48S³„÷mΖÍ[N-—’ÙYoRqŽØùÇËQçïPVálÌ N¼ãq¶Oª·Hâ y ·#*i$-:yN-ùâ¢ã'bȦâÕ…JB”êŠ2”çÜŒâ²CÝIyЭ* ëÅ"rä´ä(ë’„'GØÐNN“‘òÖ „Èyæà¾¦Š”•#«=•-9*n×Hq– JKiøÀ<9Ò¶6‰‚s“Q³sq‰˜Ï+)ÈìÓ‘ôŠØíéL°…8Û¨J÷J”Ù‡~6ò®ä•ˆªs{&:¸”ï± <òyæ”ÛÛ[y@€À#;ã5 wˆ]S‹Ã.+B‰Aß4õ]ô²…<¦Ïs}Û~X÷ÔÜ'cª”ÓÕ1ÅZÛkI):Î9ÿŸ¢“Û[$Üb'' /´ay÷'娵߉$A’a\#;C+í¶¤à¤‘‘òlg‹^q+ê—…gã`Œ|Æ¥=Gs‹I{ Õ´ n8R°œçÈ}?%`ÛÈÖU¬$ãËj®•ÄsÚŽŒn¢r­»¨bãx’Èq„Ú¶+9õU‹9Èùç&4–{ $…÷wÒkÃí.ÞòCƒY!IÇ­?ˆš¹"ä‡\aÉ ¶àÁR ŽFw=o"G\ÚdÎ`¤… •mÝRx9Eflä ìÉú¥ H¥+x-Âêyw cô§ZkRÙPAä£ÊHÃaÕ¤¡µì äj‡¶3¨ÉrHv…*°dÜ¿¶i¥)#ÅG²>zGÃî·Å­»LGf-´"¥VÎ ã&fÇ}?9.…£À>\V¬nú§= {Î $\Ü>ÊŠËKÈZ0žôŸ ´ò² VG,žB¡½Gâ8ÌNsˆ-Ò#¯XZàÝdŸv)ñë‹=`IRôƒƒö5}ø¯àØšXª”Ô\’{¤Úksíð˜¨N”dôV…¾á)É@ߞƘx¶*äÃ-%¢µ,è :‰ÛïÏ*u…t…-n3B¶€ÖœãNsãꨧq—ªC†Pøý ‚B‚†ûyÖn‚Æ,m9:rIIr}M8‰Ó• F÷ºeNÍÑi¸&,–ô%+-:¥m…àíòs‡%O))*N¢¬dœcük]ƒ‡¯÷§g\¡ù®¼ÛÁ¡Ñ¹$yniÕŽâ(¾Ž†l’Ëmœ„‚¹WôÌ+ÁyÓ_~Q‰ ÓË?…ÅÄ9Ïç5!Å)<ÀÜgÔ9þ)U6\'²ë)z:ÊÛZB’|IáðÅíκ<›D¤°ú JÈ’ÇÊj®â{zeµ*Ó%’ ‡Jp’ ÎÞÜ×Å¡J«HÉ7¶äðTj$ã(µîÅÈ•¬äŠ“F@Db…oÖ g†ÃN¸Ga•%«öªVtƒëÒ¯q§V\T–u²5!=â¼Û4´G§Y¶²¤USØ[77ã¬4â°=dþ<ü•½—T˜¡)ÆJvõŠtâë5ÇáÄÊ É-<5--óIä}øÙH£ØïŠim|#)Q(PçεT¦ä”’Üúžƒ¦”ݘÜ8ÈVÇä¯5y<«c–«£Z‚á:1ÏnU¯Ð§«aÏuQØO£=U¥Îk⌣8 öV“ÉCoiõÔ•uk #xŠd‡mž™­9è®à+sŽTýè7'V”µÒ$çêà“TÚ‘ñ?H¤ªbc:zéÈKpPrBJ†B@O´Ÿñ¤ò{Ð;²O?óã[dZïž–Ù×ÜB¨èNrqø«Tˆ7U-AØ/¶ ¤ã&¨ÅÓm])&¬=Xx¯‡b[XpᘲŸeJŸy%aKÔr¬d··)·> ºuh—jšÏléu©ëO‚µ¥[z¼;é²ÛÑçÝ-­Í·p¬éq^CÍ·²°pFG=Á䎊¸íl† _T¤ˆ``26'<ÉßøÖ> VÝüOR.èTÑj” šJ Sw v)É Ö€Œú¹wRµÉèÅ1:–š½0‡ ‹Š4µaCt󇟛gæOÇÉ(.p•à¡-ê?c•x/¦’Ž‹zESÊ_Ö…Ó 9Þ>ïösù) Ö¶bDá öÕtºeIR:Õ4Œ¥Z’‘„¥d÷îOq ŒK2ìQ u7yû% a\Æ“§Q>»©½ž‰¸åg ể/©Äõj ±ÝGšpHäÒSg¿[Óp[L¢¤ž© u +*8Æ2N7¦^(Ÿ}·ÈeaÅFiy[L»­­_µ iLJ?]káû¿Å‘¥Ý¸zâÓ`:¯GRAdŽÎ6$ü¢¥×«uíLNL;MÁ.Õ‚”ºK€drÏ,TZrk1m6 ­½ÅVO³9-¥J‘ œi<¿È¥ËB]h¡Ì”Ÿ,š®ø~ÙÃàpÜ÷§Râ‹-$àãòïû`—Äâå¹Ö{”VˆÂž-€S«$‚“ñO«rycbƒsÍq‚ÿ{¸Z§”®.¢’u¨ ³“ÙÕ_§7=1&¡§.ujN’U²‡®¥\Ghj즜•ûƒ­!iBÜŒIîS~'»Ê¡ª·^Öúý2ÕsRZo)‡T4¶ØNûyÖ\‹F®hM7q#–+†å¥ßHë €õ‡GÊ•:­)‘îƒVycâ–Üžg— iûeáæH¶NH.èJDUœ£$íê­j¢2örî.—”P“ö4ž×ñ…F/¸œÔ•ëéJe´Û®©iN)Iˆ¾Â0q]G ß%<ÊŸ¶Ý.©AdÂpõ`r'×VÆIŒŽ$~Õ\¯L¶áHg)ÖJÂAß–{»‡¶¬À†ÃL4ä¤÷4' ïÒ3Œ÷cº™ì%tqö— å§—‡`:C`xÆõ`Îá.6v Ú§ñ#rK‡[Òí'«ÓŽ` Áω5Ekɤ™|IÜ•ýNî¶zT±EiÄ8mÒ•6F!•~HÚºæ¹/  %®ÑÒ¶^»Ë|©åu¦:Ú`À•'×Ç1ê®´­|Ùu3ÕË›ºQE^VQEQEEPQ@QEQEmõH:–:3qåœ%QÛ?m\Ô¹Q¦"ì«l)åô|ÕÒT©#¢÷ÈĶvÿZ¹’<ã={Í‚áW07Ê»s#ÐêR¥çVGÆvGÑJØLIiÒ’€n…sê=ô‰ëW^¢–d:Ò†ùIÜwf‘¼!Òâf!ä'´u$!~[§䮩3–F®!à›$ÜɃ/ ÔX: ¼ÀäO³º£^˜Ä7W`—M”­öT‡<’¤Òåñ½*zÈÜu ({ßä4ÍéÄó¤­ ÂŒ†ÊZ”ðÇ<Ô]‰ÆýJúÅd]¶~‰m”»œF2«Ý êÆ¢@ ¾—¸ÍAm§”€”}…gaôš¯Š°îNžóS»Ë¥&¨¨†ÆWì ëøÞÃ]BÆKNU©)ÛÕIÈNIÀ&•8úB @Á¤‰ÔTqÌÔÒЋ6´;JxVç^: áI†¯¶<¨Ö w=¡D1ÐU°HÈÜmκ3ƒî° ÛaÌ`­ ŠÎ¼“€JÝÛòÞ¹Þ#á·X5}[,Z¸Z×rDd¥eXH ý®r6åà6ÃÄb¦í¨ËšöñS¬JŠž¤¬`8Ó3%`ä{qPwR”¯?ñ eD´V„éÀVHï#89Ú£ä—]ñ$÷Õôb£¹;˜ƒ½lQïÅc&Œœó«@¾Ë ƹGxlBǸíøéòXm˜èS‘§°BJO·¾¢èVõ-’â× iÄŒŒµ|¿Ï¶°ccªfŠz1¹ˆ²‡^ô2… …@”ƒŒe8Ü|ûÒ®¹AÆc¨#'« I¼{#'5œù=C¡¹}IC'¬q Èærq°ÎG³zJËhiÅ=®-£šðHÒqå±òç¿¿辶Ÿˆâ$&d¤¥æÂVÐ*Ž\¼|6ÚœÚKH‰­Ä-´‡PÓœwó“ʘٚ´8¦$)µ²‡vqiÏÆN|Ç,÷Ó´1ðÌôÆBÛjPÔT0sßÜj…ù•d“©bQÂK•oˆäô†ŒÁ20µõY'aÏ*Æ<û²UÚ<£’C¡ ¸âœ()% wI ÁP¬+'žøï¤[¡§`!¶ÓØQp:•…¥9²6ÜgÒ)ßKáSµºÐ: ª9BÉŽ[JÅê[ 6ÛÐÜR £º•%)Î;Xð]øüÎ%.ó·ˆC>’ÉT)(û $i'RpTŒŒrGlÔ*8Tyl”Mn;Î}‘‰M(‚„)^8øÛc#ÊœaÝîW+Óv;Ü|]¤!F:ƒeL¤é!Cs°ÀÉ<Ç´fnöz ª81¶4) Ž$:P㨡%µe$òχ#Wu²ÑðHͰ㩌¶tê V„(÷òI í°ÕU7@›ªr¥%ˆÌ¡§\@N„„”äxiÏ=Ê*—q×Çáž\F^u*TOGˆ—•—¥¡IsNB¢?jüÅU(¹M$+T½+²€â)Œ]åúB%2e©Å—‰Rþ1Üäçš¼³à)®K޶ëÌ•c©lÒpy‘¹öò­pº‰2 ¤YP$䦱(>ü“ÙHÈ +}ò6Ç=«ÖŒm¢>]»»Ž¬G‘!Æb2S©nµœá#'Ø;ª{“iîI¨4›…ÞÚóÑÓëM(…ñ Î`çÍu#‹ª=Å7»û HB:¼ÌqAEXÀN¢un@ÛʹÙ4uIþâ9y\G¸Ê}ȸÉÐÅÆÐc„w!zR3äM2q7-™7R:Lµ4¦Üqµ¶ý€¯Fç²0­¶ÎùÇ}#´;ǰnñÐ»ÝÆRñ¯Ñk^´òí d|a¾ÝÔ¾s½!Jž§c\Ÿeµ¨È·´´#`6%$ùîMUÙ¸»šéÎÏbCжF|6”¨->‹£P |÷©zR””Œ¸ÖÝ ƒóf£Ý4¨¼!jCŽ<êÛq:–ûJ×Úæ¦þМçOvk_H.Mo‚¯&܇ܜ†ôt0’\* ¤ óœr¨K½2-[RFêÊ•Àtd|U ÅBúNÔØvG\îV<4ƒ¿¼Õ7ÂÒ:Cbålvzø©Ú*Cn7 ê!+)Îv;„mçGñâSjnl‰ä¡$õo¥I c–â¶C –W½ìQ*šZÂy/ã…ã§ ªá9ÙkÇíSgÞ_§Ø‹ja´ŽÒ‡kÖiŽle7v‰jWkÐ#³cÁIN§üŠsßO2\ËͲ‘ʽ ,oyëJÚ:‡4¯V@Nß-)×%.)IÀê“¡’ê¶V¸‹&+®/íÉ#ÕZœ®ŠR±¼(†T3ž×¿4Þ@gÅ-¹µƒ¶¯’“h[€´0?l‹ÐÏ-Åvæ²Ãk8å“O7!9ÄÆYm ¬€pFÝôÿiOØ0¬ªŠ¯™l°­L£QøT~ç)n;¡<Ï3O×ÑÛ—3Q”<Ú”R;[ó¥.§'¡×ßS×ì=aÏí_ü;•>À¨ÔüGæCbÇ-/þÊžƒXgS¾Ëãæ£ÜW¸{š’’gC`W¹­o<Û-—ZP„Œ•(à “qJìáž+ÜV¨ïµ!¤ºËˆuµrR}µ¶‘q’º XóŒW´W@bŒQE,bŠ+¶F…P…¢ŠÀ£Q@£Q@¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Šµú¤ÔÑ‹Ê8À˜ÁÜà|o\Ænţ،\á.#é®–ú§Ø2z'•$²ž^uͶ·ÄÈ. i+Û|xŸUqƒ+mþ1”¤Kµ\ zÀØq8Î~Ô“òRë¥ÁˆêmÈ¥÷I=–¸ƒM×+Ò!ƒ‹bÞð!@QÇ8ñ,º¤½ia Y#ýîT¾ÈC.é*õĉŠ}†³•‚ÂE<ü"‹MßÑ–ÒL50y:j{‰¢®j®­Éin7Õ¹¥aXΠ7ùëÙÑ]¼²%G–ˇ‚’~zƒ'bI6Ö—#h0Üíi<“ò<=TÜå›­½Â„¶„>´µ­<•žñæ)ÿ€zõpâÕ.7XˆÏÝÁÊÒ8ðù‡0ã1£¸ÈÖë¶êõ¡¸ö’¡{œÛAM¿ÑØ%›kˆTØh)iÔn—Ð’AIùkR`.å!Ë­µàÄ¥ õd¬ŠsÜ|3µ2ÚUèwÒÊÛjRÜAI(+;dwc7f2!ë»@(r;Ê êqÌIÇ«æùy³8ÈãÒ`7j™JÙ’Ók.4¡…%XÇ.íëoÚa˜-Ϲ…+ CdàÞqà)Eú,yKÆ zTÙ}×¶êÆA ñÁÏ:Nµªí4GcPlvP„í„ùŸ–­»kr#ªÍ†Xó §ÒðÓÔ¡°¢~ŠªúCà—,–§Â ~Öá굌ÊÏ ¯¾ÇËǹma¸L6äT%%cJÕ§*'—3æ>ZÙ*¤Ez42[y8qìGÓêð¨7qâÊøkP%YH'˜Îi4¦\PZƒz@HÒ®Z¶ßo]I¸Š"í݈R½!YAVùOw·Æ£’ÞN´¤Æyc•GTiNã¥bÝ%À¬!Y=úÀüuÐáÁA55âsÿ³²ä)Y*Z|Æ¡œÔ%.iWgÖ*Ió·Ò´ã9±AÒ £¸q[¤8U ÷¢T|)*llEM2-Ö¢â΄ú…a¤”ïÌVØêy—K€0v­ Q$žâhqž%%D ë )üÎm!+s¬Lôh#P!=ÝÿäŠå6ÆFÜë¥âNM¿£Î[Qƒz¡2ZS•8BN2IìóÛÚòøœã®¿“%õ r¥‹ˆSÊ–µ©;— ÉäqòwTp(g¾¥|K>d’‡–R”9Yóò;oLÈ~AÆ!²¯û±^®Í\Ï7ÞÐ@•ŒP\I>4êËÒÊJki@÷èX•žÝ‘¾_èÍIÅ ±± ÉØf¥/8™=^œ´„§s•+ãÝM ¸¥HЫK))J‰HB²vÏ,çÇÕÎ¤Š™6ÆÖPJt•% †uyøÙ+%^œŸy­I ul%¶c>ë‰Ôò”;‰ØcÃ×YY²±!ˆÏ¸¥%œ¬r2 “‚3ëjŸS¡¥Q##ncsÝ_:ßDxË%•‡ÛpM ¡¾wó`V&û¦´¯ÈÚb8 •zFœ-E9ZylÏIº=l3rZ ´¶$9œaÝ”ryá^U$kÔá Ԭ¨“/=½½Õ²ÁÄÊ“-P÷`F¬©§°6 ƒ¾N|+±ƒ’&¡%QÉìM8Õn.Ì€m¦2RàQx,)HQ9*Áøøb›-±ì¯MeØSëÒ®±HZÒzœl’GyÉ<³Ë"¤•GŸnx|zte8Û %Ý*ßš¶P*W1°I5—ƳJœüÞ †Zy§I-«;'(ÁNwVÙ8æ+;µò›½œ†¡Ã~[W †˜jCšd²òTT„‘«—h‚³¾Õ¿‡§Â‰Å¬È~ ¦â¥F8:uåkiCNÃQ)9ä4Édrd«È†ÌD)ðÑi¶¢¥¬v”¬öp0Aîïå´•Þâ†ÃNˆ­…¡Å¿…é#íÂrÆsÈUÆŸžÊäªTìã{nÂ5úàìRÎOZøt© #â¢v;œå[dæ©n1¿M»_œSò­²ó¢ÑV‡œ [’qœùxbº.}߇x_€œT—–c”™#·™*B€çÍ[žá\Ï&Ù.$Ju£Ô†µã;ãG*Ñ‚’›rkØŒœKöq<×oV#‘!nÎ JÊB°‘•TùÃðÂè)*J.[x{‡ü阢r€HÈ@$Ÿ.YÅZ6IiuO€%‚’âBH(I€}ZˆõšÞÕìy)]™! , $sÅl|ÉNNPqú"pA*î;VX”/b(i+kbÐôëzÃhÖ”¤“Ýß‘½Jn­”BÐË‹ çäO⦓hU¾áÂêTޝBv)8'sñ.cή.޲ O>´¨%U˧ÑL#} ã¶àaXNvÓ¸í íJãž¹(Çv6#?â=ô®Tg”•’uvæ3ìöÒÖÌhê[H+'9Wq{kð…¬#¸¶¶YShØ+‘ÇÚøStÝ·\"Ëk [K NFwÂ¥2â!çƒñ‘œãñÓ%å—šq¤mDœb‘’ت­&µ'Cz°º=·8ìn!áç–Ëɺ@*e"Cª%öûHdJHßæ®Ôw†RXiF5TšºæKâ3k_KÖþ!nDFÛâ+:IeNáÇ´gdé¶mþ>ª­ãÞ™à[²›‰2å:óÊÏR1…¥ Ú;YØT†LÖ£ðwOe„—¬÷`ËŽ,޹Ò½AÓÕìOåHçðD¼aÄ3$¡N@rb¤E”ËÃ:ÕÚ!#-=¬wcǺ¼úó¥IZz=—‰îàêMÎù»œ×T´Øµ8s3ø:3¬)õ%¼^p­gd•ϬԄ—µä€±¤ûi‡cCµØâ·uʋՀ’îd)Dä„òöÓ‹n%ÀRwÇ?WÓSW²¹çÖÈêÉÓ]Ûè+$„”©J)VÄç‘îùª•ã÷¸qˤ¨è“©ÿäš—þêUW‡ƒl•½‘²¡¾ÞuÏ3î‘z»8âÃnz3yP$—T5ÿøÒâ}£ÄV¼2m»kèYËÊvá'w¤-N¬Ÿr~SJÚ^©…jóÅkˆ „õc`F•(aN9f½èÅB9O-¼îâ‹Ó¸  ¼í­O(3-öµíÝ%Å·Þ”î)ªdÝn)D¤ã\«´ÕÒGe£f)Gq'&±‚\2P®iÍip­×{ÉçN–èªa°µî¢yV©;-J»2˜ÚL†Bq€®~X§Æœe†ÜPSžt؈åOä•ì7îªîëq‚šNáC¨}ë"ݵÜ®ýjA܎Ȧ{a!âUœʶ©¼¸„„œ{«bZ,¼]Æ´+EY;¶v/ÔüsÑ ˆÚ½øw*z*ÐÇDv,~ÕïùSÀkÀ«;T—‰®+Dd {šÂ½¥‹f¨Oª“¤é\+&Ýa´ˆÎHqL è* Np±ð£ì{Hy¨ñÜ}奶›IZÔ£€I5Ä̉*}P–×ßÂâ]gõýQ(„É$á”6G¬ÔÜaV3WL”3Eæ#¯ú9.7Zpm Mr*„\XÔ¡¿8öTƒ5Šp+ÜÔ©å§«$rMɶÏA¯kÑV)‘±–hÍyEw8±íåyNÐXÊŠÇ4f ±•ŽhÍ;Ac*3Xæ¼®:‚Æy£5ŽhÍAc*(е;£EW@QEEPQ@QEQEEPÇÕ3ѺÇ/Ϭz¹¼wßQp7>á]!õFi¬­!IôÖ2È=ªæõÊK(Û }¹gÕ\8!¼²â⨥…ÏRˆ?%V|Nú•gI>Y?ЧכZ…,„÷÷ ¯/ïFSŠ ¨/IÉÅ8¢0Õ²[Óu°@ÎÀ¨ g–Ù«„Xy» HXêô¶ß=Šó‚qQ[C ¢þ²’¥` xTÆÐÁi„è%NëÏA½I·¥‹RÓVû̘ñ_mRš)¶Ë Žãƒ·øÒ>=nm¢Àô¸E¹Îp‚œàç= ygËjÕð}ÒMÊZæ¡h#óÄw†pòWÞ 8sÅH®‘ÜŸ lxÝS+CˆRÒ’œgs±óÿ,ŠS±á¸ãàÔ©Äh/¥)߸c—¿æ©=°ˆ–ÈèW]’£©INBŠv=Ç4ËŠìE1È·T²Jò4„ç#~F•¿:æÿ£ªèíF8 !g_~ÿ/¶‰j¸†F¹YͲÙZÝZÜX©+¿ Hϰc;Öø¢àÌcÔˆ¶ü‚®«HqÕŽD•1î¤*¢^–ÿ¦9!2¢æ kHÀõü´² ðŒÛŠƒ>¤()Ç«îÖqŸøA/ve²²”$­$éÀßÃñVÇ›¾¹o6A泊oE¥‡[î†êqhзŽÃã>&jÕ=-Û'‹ƒE ºN¯QÁsæj¦îÉ¥rMÅìµx‰»¨ô–ޤœjÈ>ê­ç¶†2ãÊ $­©ÒËÄ©¼  6²ÈççSð”yÖ‹L÷c4¥Ë’sRŽ•s^HØÔ¥fI7 O\¥±sŒ¸Í‚„¥iÒB‚’¼ƒœ€*C ÎŽ¯KÌ6­')XG/^ûй Hr…ÈðØu›„¤0òs¨ö¹l‘špé#£øv )ºZ¥¶ÄW\Ö¨‹=¦Î>ÓÅ'ž,øl#¦ÄûB©O X§[˜K Ë+R”p£êMœCÁÊ´XSq’ò•9¡(FVBˆ% Žì€OÆ8ïßj²¸šÁ毘ᖱ¨¡$áC¿-n½-éœ'ÆÂ› WZ´ Gr †{÷Î>UÉ]jï¡DÚzÒ‡UAØñø­º“§³¤g§¾-ÆÛtjK-¢JIXG-iÙ[coóÏ4¦â€ÛCQRpªœe™\“ÓA%¼5¡KRF´òÕM?Ñ%¥çeÃom´’‚FyoÉŽG˜®_ŒÃlºJ›ÉP8Þº—ƒf3¢VÙJÔ»Z46¥Ö€9€v$nsÌå¿—ÅÜ”iµë"ÊVwð*Û³ÒJ’ÓÀ’³·–’Ð+SÚ#š©uäéñPó‰B‚ŽÆH÷¤æç `%äZkÖ‹y2Iw‡DCÂ{*pxv…xÚ\Ô×ïË©§áˆD*ps VÇ/vάIt¨ƒ¤…ƒÝQy–­’Mli»H_ÃÖ^Ââ AÈ*${ÉZc¬(œ“ÙNFÙòüt™·¢òuc)oñÓýºÚ©ÄeŨÁÞ|»ëÊ©6噞ÔTiSÊ!€“1ö¡-$+$¥Y 9ÁïåJ!½¢ë+qJÊ€c²¢3‚<9÷׳ õÚ•@ëÂuxÝ«$iq÷fÊR£ÆJBÀ)ÊžDsóª$ól_B¥4Ò[Ž×p€Ð ­#Ê! HoJ[oVàþØnN®™´Éôfe7+lá_\ó¶wÇ// Ùá<¬ƒ'SE ÛPÒ³ÝDƒ ä6Kh.!ÀP U¾<@çß¶)N6»“Ô²½]Tb®N`\­ÎXb[ †Ò–PÚRæTp1Ù$aJÜ»É$ê¿â››oÞˆjv?£»—qd~ÛHä|†üéo¥´ËMFy ,¶à[n àDÌdg~Æ¡ [ŒÍpÌSh¥-J)Ó”wç;VÜ4äÛ<ÜtœU‘*³Ï¸À’›Œ¿M† ð=çåóñßjñ-öûr¶–æÌqÁ$…¸#+²;à¸ÎÃ'=þ±\ˆÖQCo¡!^®`Ò«êÒïS a¦’ át,â¶Ûp6ÁWvƬÅRÍ5+hŠhâ;*2I»³6R_CmÇJY ”Œ(‰ßÇqŒßQ~.†#åôËp¶§Bz‚vÈ/·ýåFš ê[jJ‹knóÝíßË•i¼.-ub¬¤¬cR#8îß——º¨„Üd™æ9;Ü÷‚lVé³mò2‡ú§:Å)HÙgíAØ#qåßšžÏ)7yÐÔàP*JÈ!:‚R ÷§ä¦>‰ðR¢µÔ…'QH9'¿aþvæ)MÁÏý qôžÁyc<ò ˆ?=o‚²-Œl&'JÔ’AÁ– ’tŸ}{qŒäYE§3¿-·ÇÏ^Úõ™%µ¨ç§í¸óÛÕΙnˬ†{‚ÂYR ì…¥^úvõRW‡®”AIWÚ’7þãR^(ô~¸Åiµ!Æ›JÎã;”íÌãÕ£eåõÍèÈH^•… dsÈ*Š‹³‹K™ÒkÄ^ìb¥u‹pÎ׬mí­ Êº’½k`§ÆI诧#îR¢—’sÊ·•´’§Â’€qŸoblô®¬oCÚŸ ”©:SË×þE7ÝƒŽµºgŸŸâ¥M8¥´…«e‚•vÇ¿z×0 ÈC£¶0{°;ýU£9'xöIïØ¯ÍŠ–{eb’é%'<ë£"ÏMˇ ÜíNOS.¤…jPI’@Wú±z ²ÜÂ\Öc2éÖ#<qKÆs†ÈÊ·õ ó4œT•Ùš›Ë+"vìqÍpå: Z›nzJ‰ó *¤–E¿ð,ÐÚŒû)OV°—²‘Üä`£Èì®~tй–å©QÊkiF¥çÇLucm°>Z]ÂÉ?:„²„¡æT•iaIÖ}°{ù«ÙYeBóeW6FMiq£Š.—Fu¢l„•’¢¥±Í–Æ}æ›Û½ÜÂt›ŒŒwaT«XRmÍ:¤¡ÐêŠq±ïÒ<9mê=ÑpîG:ôiEJ73MÙŽó.÷56GÂ’À# ÿ ƒ\-… ZÛuÅ©N©_œç>;*D·r1H¤­!$«jÑMeØ¢Nâ;[ÝjRÒÉ+Nàždr÷ŽGüiù¦´£ 念VöÖíá°ÑÓÚ VߌƒŒxøTÑMhNN1Œ]lU¢®S’Ìl“…¡Y;àLÒ˜ ŒâÀíg>xÍ=I'r7$RIÍ$£HêðõÖŠr±\•Æh¬u’NޞтS½a :ƒ¤m¶ibP•H:‡e<ëµ%©ÈFÈò`(¼ï!áQ»ƒ…Ë“º±¥$€)þT­ÒÓÈ'¿×MÊ…Öº]Û¶)gvvJú 0Ò§^:I çæ¥r P-§ )B°C aÂÙ;£<¼k$£RWÍGŸ_r´Ž´èA=X’6Â^ïÿç¹SÔ¬sªó Ì·ÑU•äü3•8K†¾z»ý¤¼OB0¼Pµ*¬ò)xdnx«ŒFÎ!¡þµfxRÖrKÞs²“Ù·ÕSÅ áΉ'2Úe]– 7ƒ¾•\?ÐJ‡úª¿¨{†W"ë{ãI ž¥„‹tEñ–H[¤z€@Ï™§_ªúÝÄ]?†-9o~k ¬-ä ¶ÛŽ©IYûP$ž@»:/á«WpM·…í¯¶ê!4「ºéí-gÍJ$û@­ÆÐ•;Bi¿cG9GtJóFk¬šË5ÞЬË4f±£5Þу,њƪ]«2ͬh§jrǹ£5æh§h,eš3XÑšãªvÆY¯3^f¼ÍEÕ[W¹¬3^抨±šõ•koãVÊßBY¡r,(¢Š¸àQEEPQ@QEQEEPwÕBñÑ,·Ó͹,¨{ q±»Î•©EÞ¬g³]‰õV:¸È>×Îk‰ ”ä#:…ä©y륑ޣšŽNp).‘€5cä¢ëvm¼¡ ÖºføEm´µ­!ÂU Æ rL¶*ÄŠÛ)A8'ÀæŸZ∰Èe÷Tœ`¡‰¨t½1©$%g<éÁ¨MG'-¤wò¬ò©fZ©Üµx[¤›TIO¼„)@¥ÅÇPÁõã—®¬eÒÊ7[ož‰«e2à$:çˆj`¯NDSͱE.¥m !i9 Nʪ‡n×# ³/‰m9%¶ŠÖµ–—¯ƒòmôšˆðë’aŻƹ´¶‘ju‚­‚“öºO<{)¢ÛÄרëRóiÛïòó©¼¢q µÇb¥pÚLwsžxñùN5”ö('Or9:vµ¤!HX)ÊÀþ4õÂÖöÒÓRÔ½`hÔœi'Λ݀ش°™qId”¼Ëc+çœê÷z¹o´±0\•pyhûŠÞÈln=§6Û!Èq½Ý!'®K«.¡”åm j''Ž^ò<ª¡¿ÄEÂìô¡JŽ?#•Z|R]¥1[KimK$ç# ã΢^€ñ»JîÁØUh”t"–¨MDyN$(#gpÝÕnXÛˆV„䄨ŒãÏ»Âd6…7±Ïnt¯‡ ªB–œdWY×±:áyE,5¤©#‘ÚQÆr|*)Òðº¿Ä¶Õ¸î-î°î¡Œác´ãÞiå¹­ÆHGX„¤xœf›:Hâ SöÆ\C©2ZÙNâ‹r kq3òßF„ëœ,èÒù*QåÑ%†-)!Û«…Z,†›Ï2;ü“Ë×QÎ~árº–Â]s É@Æ4¿«=ÔïÅÍ"]a»Êi/8çØÐË€ém*•q¨Œ§Ú²yTeV1voRèÒ“Ø‹ôŠÃŸ™m¦ä뤾äÉp(¤iQÔG0{_.;ª±Œ´¤ä“ÝW¿¿jWGN BË…Æšn:õ)+У† #™Ø+–@5x±b°—Éøûz0óu!™¢s†YYEB\Žy…§mêë”ì¿ÌÒÚVÌ€˜ñ™CI:Ò’HÀ…+—";²jœ=ZBV‚~Zé¬òÞà‹TïH Ìp¶´`@9O<…«¿xÃÅk*P„Ÿ_É—aà¤ÚöÚcŒÈ)l¨ F¤Œî+Èo¶ì]rb©õj$§õ<ó«QޏRýë¸Iâsl¸jqJa¤ušJ “¤`ÙæçP Õ3l‰iwªBËe%^}ø÷šÝ‡Ä­ãEU°³¥iIhöŸø%j:™SgÃÑm®±¾ò=Kçô¦¡ Ñ+ëšð3œÿY?ŒV­žÂVÛx%EjÖ¢P0qœl9sñ© ·»jšûN²æGd(“zDÕ½µŒåñÀüT j òk<ð´åȽ֛µØ¤\’–ÕÛS© #²p;³¿ùÅcs³Ûr3q$2ÚJF‡ÞJRá*Á%[cc¿«>­H€È;Q­íDKg:ÕŠ¯ÈáÈv˜Çxqè‹}­*ià5%´+¬l§‘ÆÇ¾–Ú'¦B[m(8’’¼£$’ïÛΜ toƒœìrkL ØAA'žçzäð·V4ÓŸn&¼:äWHRÁ}¬vJ°1ÌwÁ T6ê™Ê K Ö¢J‡<Š›Ã³JžÒÜB¥OºRÛ)WZÈH>DÓçôwz¿:„DŸhHZÊ¢òÔ…(sJV„©*;ò×iRTµllCª¬‘e÷Üi?b°Ô|+r$†~ Ï0œWÃ_S—¦Ò¹R/Ö‰J5(¾·P”2¦ÆWœwÑÏÖ³M:xšÏrCÉÔˆø û ••U²š¶†xG[2ð‹o©m¼¿³(äÆ{²;©]®0ôç$¬ { '$äxrä=~TÔ®¾]œ¶@~J¹wHBúÊÀùjuÁ]ß ²UÂÿ)0"°„”©* íå·†Ï>êÇR­ ]ç"ø`jT•ãÐÆ-ú5“*^V¢­-4ŸŒµ9{»Ï³|Ö›…݆™JCl9 €Ì„«Ÿxß=5ñgñ5ŠCw[ì@äN·ÝeYJ;Ó‘€|)¬(¨ê=þUªXÔŽh»£-Js§7«SoW/NŒKÝkn±JU§=Äã oO(â…ÛÚl®RÙO"žÊÆrã#.ú…Ü[ZRUÔ€Ž±Ä'%VóååJyžZl¥L§´T > ;¼k7í왞ï5‡7&-ùÞ’Bõ-eÅ ùý¯žõ i„‰-ÝdGv_ZÚÕÖ6 Ò3³þyRé‘^U¥ÇÚ:4¬B°H’yC–§enÒK¸-¶î7ÀÜ‚þ|ªÊ²RV'u™Ì:êHPßBÀÇ/.t­¶¢¬œU#†§—U¤%¼@–sšVÊ’† ו”„‚FÊG¥Q®;`0’Q«ïÜÖ¸¤<ö¢¢Q’IÆudcñVÕ§S;'ru)*WpÁçÎ’ÇBPT+Dw{ª%oF$' ^’s¤ä‘¿—·íÑ¥ýþâQ$GTÕÈHB¢¬“¶g|Šl}J*qzòd«Äw|Õ•µB¶f¡Å ¶êI(Væ3ê®=ŠdÜet_”™c­JÑ¥} ŸÏnàîàiLJP”Þ£¬4 ÉL0GÆZð=Ô•m©—S— +I X#gŸ}m†¾®kN%™ª)XÝdž*§±²¾7‹ÕÛ]Äu—ÆþŒ„Žds>Õ-ävr?\ò&K„§•EÀ‘¤Vã9=>p}Íû´W2"Rq¥Hø«ÜŽ[ã—‰«a]ÓŽÇ%G<·9ÚA[I%I#Κ%J.œ#î—¬ÿýõ{ôÄêW µ¥+’è ÇÚ‚qŸ•GÙTd½3.oªpóªêš@î'aäk§WzÛжX ÈIçò¦«Ä»º`¨ZÄxòsã­— doç¿«ÂèÍX­ÇQý–’ÚJ®^·;J ãñT'…x±Û“¯Ûø‚TXb,n‡y)9ð<Ç}KŸ¹[T•8õÎ }Q•פ$ç‘çËñÓ5Å„óØ}zÇÅNHÕ´¤³¨°É&•ÝÝB"êIÉZ‚F7Ú“”cõ¥XÛ$UjÕXƒZÓŠp8 ![šÁÝ l§¼ƒHÞRÖã®'*íä3J£°§tîHýu{VD.uB®ièÆÎ3ö®óþYu5CÞ&«þ‰TZèöÔÙÛJ\ü*ê^ÛÛs¯Ÿ­é‰èS’QEoÒ‹nÅõþ"·­0ZQkªx(¶1ÚYIÁÎ26>uµt†·€.”“WÛogc‚us÷O¼…­RøÖÍ)¨pZL¨Jä•-A µŽâHì÷o ù¾1ÁV1©Çu¡éa1Žuì8_º[áû# ²ÝAVŽ­½DiÆI÷¬†ËNÜíÌ«Ó&²…¶”‚ìu|`¥ì÷U$ÇÚ’¯D»Å$¶­Ú})*õÁ¦Û‡­jí=V¥L9öª?1>£^f „púk&'4dùÞËäh«‰­'ššMx×Ûî3ý;‡ú@vß)ÌËŽ²²6iÀ0}DT®IÜSh qµtŠ9Ì´¬êÄ´­ýØuÇœå-î°ßm£5¾Ó‰ÛeFy·q«îèÿ›ƒÓøz|‘ÚJPí¾Jv Îm'(*Ï~Ü«ë£(aêSÂü²ÞïÙ¡å¸v±•Y+kc 8S¤.âP”Ûní cÿ±º†“ÏÙš”êó\&ókºÉj7ð´ûuÁjÒ܆GX•+#“¨Áï´1î©…’ñÆü0ð=à^`§ÿsžr <¿ÿçÛZ\Ù™;ltFE5ZðÇKv9ë/,?dŸÐ¤¥_rª•[8ž É z^Ž…¸àR{œnœæ«jQÜæRA‘ãFkGY‚7¯Bê7c+7×™¨¸1αë.ÆVoȯ …hëkÂð¥ÎªlQ¨W…b“õ£Æ±. ó¨Üê¦) ÷X¤eÏ:ÝÔLïd/eY^+u „àSøÍ/¯SèÊ*G+°QE¨€QEEPQ@QEQEEP?Õbz¸†Ó©}sx'&¾}Þ¤ÝJL £½E?Œm_@¾«WK= \Ý’‡[ Y®nùÖ%Ϋž0ùù+“ˆÄݦCü,÷¦KJm™iŒ¶wÔ5$¯6Ǻ‘[Y\é‰kBH*'¸TᶘŸl1ŸÊ!-Àâô:ˆ?ãJØÔªÉjm®O<9÷røÇÛŠ‹Õ'mÄ‘YLtçg»ß•"œþ^ê“æ¥šŸîp„f ³¦‡eêJz°ÛIíc¸ ?#Qµ€\[¸ ¨n3ÈV+HÕfWB*Ètƒ³¸©5­°$‚N TGv ÇÑî¦KK!äé*RŽ|O€©W4‰ mIRÔ°;¼}Xÿ;ÕU]‰-GÖí®:Ö¢ Ô;@÷VËk³l×tHŠê@BT;gi#Ë•I#GRc¨¥½ yoœSoÄd+Q Q8#~doï¬4±9léifLbºÐgáë~UHIÎ7Iý°ð#8"•N†Ô€Ãì¨(?jF}Õà‘‹qÞF¨î(ã=ç ùÔÎß©¶! ¬ j P?k¨ãä¯fW<™Ã,š¸¤EK JJ#•V9ž†áZÝ꓊Ž*}.|é[6b­%}JP­ZÊòAUL›|™—kœùR‘=m¼–¦Ó†Ð¬á¿>ò(ŽÅoÍqØM¾Î‡Ê¶ÀVùå°¨õÊå6;€ÊBíV’~CO‰e­Žïœv±Œì7¸\Y‹pm¡Î±o-hle ?mÝꮫ“ŠCÚ{Á¶U K|8žÑt¿ÇjÊÛÞ±b@\ÙOÃi*RF{Çq8ÀõçÝ»‰¤1ã%1äa*tz*ƒ¿j23ç¿:èÊU¶UÀ®ã|DIA+Kˆëƒ $äe+Y(QÙ*æ2g5]zÝœ[–Ó¥™ë°Ÿƒx‚g ^ݹÛXË([o¶”“­±Ý8' ø£ÌÓú]ÂzïoDe ¼³Ô÷ Žgb Á8ÛŸx©•²5Ž,iqíÓܺ&lÇZC¨h¤8‚yöÔ{;ìù øí„ð?i–¨®Ümal’ÊÊ»r~2~×<Žþ窉ÔÍûÏCSYRKb+z… ëR?ÁÓQr“; X[JB¡„ã³Ú½Yæ0:Ï‚ö± ÜX©m¦ó9«cŠÒ·WÏ9¤.\½'_­±ã^Å*J”lÝî`©UÍÞÆ«ŒIèã®Ê€ ÕýDbwE¼:Ìwзý y²¥à…r#Øî;¼ÈÇ(^®iœÊc’vûjë.ˆ¤8×Û=¦š[vÖ¼l§êÕÈž~Ìé}Œrõü™¯¯7àD¸òßÃ<6§m¬Å¶EvBšqHxÕnùçžXÅUnZìZÊŠFs¿ÙôÔ‡¦Gg^îÖCî¶PN®°‘œiH zÉöUXûa”²_ZN2!ZøD-Jòz³˜ºÎIE­,\KJvi´úõ:¨Iø¡¿}DíÀryïa­‰ryøÏÈõf½Œ¦ “F )ƽU¿¯H¨BDÅsqêڈϯãO²–Gs2dd¶ÇH>±^McuƒQ†a8Oýh÷ÒÆ`œ Z®š»’ÙN³½&xõ›Ö”D Ý' ØPP‡*å‰]WXîÞSÛIL”5 ¢V¬gu U©9Îr¬EY½]Z›`—à _#ð¶ÄirÛÒ™,'WØWèJÔr@“Úœâ} S‹PIYä6Éîº?_!8˜¦ñ1Ä%E:œÔÊp7N…’6ð"©©ùΑÔ:,âÇdA_ü#tj#ke‰Hu©‹Ö¥u¥N(l@ÂÂ~(p&ð5¶Û)n1ÁsåÉqÕ(°d­~µ¨“Ÿ#½P+ÒçÚc6‹Eñ1Ù µ”§Ú@©CTI:EÖÉä£ ¼üÕŽ¶U¼é;{ T1Žƒ¼R~#Ÿ[o°­ë“*ËvµÂŽ¥-J—¶Þ vñ§9#9'ô˜ñY<)§nꜶ‚Ãn”©¼¨¬c»#*¯zBéŒx½ØíñÉÛšP¢¶c¥¦Ð@øÁ¿3“P¡!Æ‚•T¤uÀ‚tà`ñΰO†ETÉFµÇk;ÂQVeùÒ×YßàÚ™[KyKkB2 8ú1TFåDÌä Ñ N6¥@dçêôp¸há¡‘3/ñ3ÌÕ… - Ž´/YÓœgÔ+ShCe”„êQZ½f·Åo[o'™êÊ“äS¿Ì¾£7kÎê˜H[h êÎÊ ïˬÉi9.f6’w%Юm3°²ÂJŠŠÂT{8À$ç¿»mŽôÙ!W¾º2âAÊŠF6Ó±¼†)¹¤ºý¬='Yq%Ål3±ÀÆÜóçî¯m’UÅ HJ°rTA:J†Äàü•‹&­‹¼Ñ-Œâ‘HV…%INÈæ‘·‘ßä¥ZC‘R UœóÚ‘ÂJÕ!!•%-¥ED‘“Ë<¼v¥$é#V‘°H;÷w{ê¦z«©­ —Ke:‚w>?çñVµ¤Ò®ÒU¾FÄàoê­ÉÐ É$•å (ò¤Ï¸¢BBHÛÈšáTÞ†/-MDzŽÎ6Á<þzÙli2îQ":Vóé ãmY4…-“„ù÷øW‘¦È‡*<¸ÝY\QÖ Cn`oº®¨ÝèQ|Íc”Ô‹qÃg]µb*”¥j*F¤¾yoJ¤—†“Œ÷š†ð<ùîq„ˆ1ý¨› §]Kª))PÊpûcn[ÔéµDJÂH|¯Ç|›üõC‰½K0üµ­â‘Í.5ñRJO,óî§nmifB\JR²”êp+8Z¼¿çLl»?%)QÀïç]+àÖÕùä4” 8OedŸŽ}¡%Ýdïi>•_?Î}Š¢F(Gò‹´Œ®¢>æšxO… ¹’üÆÉ”à)VFͤÙ'Äò÷U±u±Ä’øyqZ\‚¼ê#™V ¼q¯jÁV”kp¶ŒŒ($Ì«'•[ ÖV!*weðIJJ–2¥ä¥¤Œ°{»¹ÖµXÖ8Z´¤wYïßÕVGÁhS£°­';«ãÙ¾j ÒŒËí‰Ëz¬Iie÷שm…ÀwåF­…g'dAÓI]ˆ±!µ,,þxù³þM6]¸eB1q”iAÈÇ<“O}]xšõ2R/-4„¶–ú´¡‘ºÐ Ï3‘S×à!9HoQßÞ¯š¦ëÊÌ⤤®Ž!érØc^›q±¥KFýÔŸ†.m¼Ä|uż¡!kóçÖ}˜©OLèx¨ÅB5ui9 <é¶ÁjT —,»µ’B–4„ŽC9g öb½HÊðF)-G. âË#ö[ÄÖã¹Vë :šQÈŸ"Hõc¦÷—zøéH=äƒÌTk‚lŸ¶KºËŒÓÞ™#[s`„l26Ê÷ßR)¨-Ð5©9ð­4ÞÅ3PRº­ÀYÆ}U-¶CCiN‘È æ˜Õ Ã/Œ•dãšz¶Ê+u-(çš¶£ºÐ®;ê^½¬7Âÿ}U"CÞu_ðÍþ×o°Å‹&km:ÚTJNsº”Gu:'‹ìiÒMɬG¿Ù^-H·&mŒ’Z“6ßÁ¨J1‡qŸðk‰ë ·$Þ®iÆÅ¦6m ñ qXÇ•9#ŒlGúɾd ÑL–Þ*áèwë¥òá5M.Z“‡Ã…)a¬€5àeÂê¹ò" ¢ã­‰æOB%õMt{xº^O[ÜrLBÒQ1¶‘—JF2zO2{Žs·*å{½`ÄðèâçÓdh§ŠtâÔJ²ÏÄžŽ°¢SâK%IW±5rK´¨*?X I§‘O˜ß»Tw˜Ž|7qŒ´¡G ¼žÓN}ÊÆÆ”Z8Ȫ #½nÍ&šÜÈäÞ…Ëë†É”EÓuBP´õXCIiPGY«QÉÉ#IÛøÅ–ÙJåØ&vA*Wm <J9³á¶çWfº±q³JÂ]pmO¬wA1%QT]IÆU¯çEIÉÚ×c´Q[Ø|‡>ÇÄöü¦2žFÅHt6´¥C9HRNrqßÝIl,̵K•3‡eºÏÇaØ’‰(q$`oI¼¹ŠTaEi’¿è O¨šOlaVæ ”·RúÂ_RF«¼mùoâj¥R.Öв5iJ:½Itž-¹JŒÊnLé}¢møêÒ¦×h#ÈŒžðŸƽ°PU%±ÚAP:‡ˆª2íĶ&b<âDu–Ô©í‚6;8w‰µÂ|‹w·Ümµ8‚‰IëÀØ$¤œå=ÜÏ:œ©BQÖ6eY¤žŽèéºÖ\óªŒ>¨Û/µn}vy“”Ù/–]H\w0A`çqœ÷7õ](­(s„@˸RÓ(ìŒóÓÕŽìŠÌ°õÈÑÚA\ÕÊ#³ž„Ü„*C )Æó¸•o.ŠååôÏwE_-öâ¹.åIx½±câàŽ[SôãÇŽ´—-2Œ”ç¬JZXî"ºè«Ù2*®š£¯‹âµ91¦ÿDqÆPÀ—•úF¸g®âi¡'˜l„T~_q$òL»ÝÁìóÕ!GñÔ–sc·öB'qWÂ˽[ØÇ=r?Fî}/ôy»Š ;›QYùpbÛ}ÕeÇ£übNkÔDYä•’ÃÓD]ir;Ã:gàŽ%ãX<7h›"LÙ…ÀÙ £²…,äŸ$š·«þ¥HŽ7Óß 8P@J¤ïÿ¶v»â¶QŒcDÏ99;°¢Š*â!EPQ@QEQEEPQ@T?Uú]HHSŒŸY¯OÇ|Ni•#QRÂR³ÈdøWÒ/ª†etG2<€ NHi+Àšáë¯:>Ëo’•¥'RP­È#~uÆN.ă­n1dCZŠe TsžÉö³ì¨ýÆñp‘z¸Y£¬CÕ5ö=–àš•ÏØ1Zí3gZåC¬JlòñŽ1o¼LºÌœ˜êqrT]R†¥m“·²«¨›‹±:if»Ëy¶Y-¶Ø VÙçÊêN7Ȭw¬Ü¿*UñG"k™°u³9Ժ˺{!yÜóßqî-O¸*“)¹9ÔÒ@qâ‘Ët€<²JG³5¶ :ÞI RR øÜ¶òñ÷Õ‹Á²×f¹¡ÖÙ/Çt’V{*OÄqÈßÛÜcÄɨ¼»–ÓZê\6»ÞŒ’áе%O-²öŠƒ_Ð!¤9€€¤Ë%Yùª{ÇHÕ³‡¡Ûc)Ky éIRp¡ŽEG'añj§™5]F\%grNrTO?â¯3 Íç{*ÏBIÂÚzÜêBAZ]*[d€œ|£ŸuH8mõD%™¯e´-Kë±Ny¥CÇÕ±áØ·\Ê ÑÞGh¡@”«lòú+ÞÙbÁ.,ÖV‡ä àG·~í«è¡k#Å©¬˜ti%–‘2s}—å8ˆŽjÔqâNw¥“­Px~]Òàâˆn’èlä§%_еt –æXÔƒa¥¸Ûsç¾3룦YÉŽÌ[pì-íѰ6Ç´Ÿ’µ8§L¦ï´±RΕ)ÇBºå”B›†ü¶çLIµFvJÝ q Á#RÔ¬çašx}.q   §sžüçßI!-.¸âHѧ'ù*½Í+M†XíĉRšŒ†– ëRr‚|),÷ Èˆ‚—J[RÜ=a )€3¿/—•0qFµq¦Ê±‡;ýB›Ê\ ÂÖT*vHê«"t×ÚãX= !×iα‚ÙRT;ÂJŽÀjÉ8Ïv6çâ.&ºñÊ~ë%N¹¨¯™ÝGšŽyŸ:i[Àr¬¬¤s#¾¥ 0޶9*’‘#²_‘ بގHÁ'7¡ì¨•'e šo cs¥,»„—ûb¦Êìi^²ö6%Jî໊˜á $vTuüÐQ*J=[ÎØX®YÔà™5Ô<0ìYdeÙ «Ñâ„­´³§ã  (òQÁ8$íŸhò8º½(¯i« <¿aâyQäLt à’¤!Ü”ƒñ@Æs·}E¤pêŸYr;”µ€7çî©¡²‡e>ó,«/(¥€6¸r­.±¹Í2§@JŠŠžE#`“¹ÉæsšË‡®è¾áÅÏB±ëã¤vXYÇñ˜µŽ÷ôSôÔª]‚ îòRPÊS©I;±¬#ð»s­;EÔƒö3±Œúö÷×´¸]•y4õ#y£=íÒ?x..wG>ÕŠ\ÜT9^RžÊFJ½´²OF”°Û ñ•àãägΤñ¶ˆ³ÈçkÜfßWÅa×¢·¶ä÷Gb"|ùªŸ¤¾—"´ê¢¥}”­9ÈÆùðû~„è¹èLF›i²­K :—á¿ÉTK.Q+Xys4Äru½n%´ 'Qí·«H¬VXjXT§V´” xçsMlHnR’_jpà$ëåRØy¨ñ¢¡kZ°[mµ Ï>XÏ·l É[ZJÉØìhË2ŠZŒüjõ¾×mq¶Ü%kÑ™oZ±œ‘ËàäÕlˆ3§(¶§ÖîúÈ*ÎIïÍOo'6ß}u«›©yüƒ¯=“¸XÜ{*2óî Å”´X Àl¥CÛ=®ÿVyÖÜ?gFJ+BT›RBHñ•£öd sW٠ϬbŸ"ºë1ý%æºÐHø™ÎOŽF$™W% 4Ó{¬içžB–L˜ëy‹‚\P '|žáë;Œÿ‘tq Ç4´*RÒìß/óÃÍ>ÐVP“öÛ'Ç—?š›\-¥à…¾ÒV£ÉNNiEÂ$µÚdË«NT·¥üPq²qàwÇ™Ç*Œ²Ì©ªŽ TàN*Ø9 _äÔ)ÕR½‘Ûë™ ‚ùZó‚”6£i0Ë)Së_íB@ögºšâ0Üv‚œ)*@9pÒ ½Ð¥)LQ”•¨Èðç•JínvöÕŽ3îiy˜i ”) ZÔHÁ`F;ª'KqÄ¥\À#|ÿ‘Já)ÂRáB’ʲRTF;ñôR÷XîIR@<»ñQ‹»w ¥w¨ýc­ðÒKrd-Ì ¥A]ZvÂHîä}Y¯,nIZÒúÞBŠTœd“‚ ¦‹J&CL¡XQp§d‘þ}•$‚ÇÁ÷ qÐ’¤¥Ô«ugPRAçËoª¥£uÌ”|ë+0}¹ ©!€0;'n.)ÉÇZÖ…lBΕyœÒ á Ö'dîwVòŠÏBy!ZŽr>AN8„¶Ê¢«ƒhQAÈ'.gå« ˆSZ“f|Åöy œ)ÃèÊóíîPúµ_ SÂJB@tjÆǼUƽ¢Á :ê÷ÁÂ}ÜêÜàkšîöduï0ãÍ'KÉeY)p‘œàlsUI"ûÍ8NƒƒÉ æ}½õ,àÛ{1Û–Yl¤¬³‹Yøç‘Q;íôÔ.0˪FøRåU÷I\yÅ|?Ä‘`[/r#DI[l¥¤(lŸ·RsÍG¼T7QåE“š‚»:mQ‚^Ô;JÁ ; ÷|¦°Ñã%E÷›i$’¥-a9ïï®j® —¸ŠòùPÁëg8¡îÕŠöÚ·µ:µ8¬g*9&´®$¯)ü¹7dŽ—}°°±ÖÝჃñ¯™ß–|6Hã9J߉ +Ü3Žíª­m=”œV­:Û½[Wc‡6IâdYr8úÚ‡m¼ e(ög¢ükÇJí™Öøb²,å)\µ-cOxqƒÞùéJIt£Èr­…´®(YÁ5dpÔ¢ö9ÛMèC8G…nЕt»ÍbMÂoeí J9éNP{ÅKþh°¡)-¼§7PRAw'—!øÏª”´…Ò1ÞkÙ!¥­jú¾åVê2]‚þ„²}ÔÉwl‡  (zéöRR58NÊm4ÏeE Î’0F+]7b‰¡¹¹¶–Ôôg-yÃË냩;y¤×%† @$$'Ç$µ;ùñ*BTv"µ(^&w-HߪBzC’¨ÒQõºÈiÂéoµÕ |a²q’rHÀ©µŠÙtflØÐx¢ÝÄ+§Ô(’çX5e²±•ã;à¸äv ¶=¤¶¯Èi·}%A…4J_Wj:¹î;¾ÔW°Ýv ö]þÞË‘®R’¤¬2úPÞ1€œ$ )$탔Œ“¾|‰ÕŒ&ÚÜØ–ef;#ŒìÌ@pÏDµËZÚ,4$äd’O»ÕΆú@µLHeM[e°–ò‚ »)$ŒwÒXƒÖvî2œV§ê‹þ°(ê*ŒœlsÎ">ò!z0ü}:PÓ '?sŒúŽAª'Š¥6ìN0qÐt@·LªM°(«?l•”ûp ßÊ™.ö[zàª2#ç¯V€€ P ûlxçŽ{Sž™o(<áIt¤…¸Q=øHõ$H.©ôD·!çÒ„²¢¬Ú ¤dçaÚ5Ÿ·›•£©Ü–Ô]-w®L´39åØŒ`âb!d¨­8Ò=«- xuƒ»j†ÛíÒe™“T9¬Ö…$ ç|é?‹¦ðæI¸è›n¸ÂgiRCi*RÉ<ûJQVÃÁÎH‘=kˆô£)æ[/è. ‰µT¯ÙÚ2 ¢Þ¨¦ã¢BšfB\qå áC]Ô­®)¼Û˜ê˜¸>Ê5v’“Þ*CÇ\/Ó!\G zÛt¸g@)Q ç|÷€s±¨Ä˜@Z!HV\qÂAûn±IßÚk¥8Î9¢FJÎÌWdéýnRÄÙKB†‚æÝãþžãë½Ù>‡™o‡ÁB›}ì!@Áç‘Qwma!JaµX;«!;û÷ùj:©’ ·ÒRr‚¬·¯8#9ž|ªkb’Ž àÈ·9Ó8͹¼Â[Sª©m´êR< RùãíjØ•¡KsQæçòU‡Å-Ä|AÃÑ!Z­Kq+{2_i¼—$jtêPÈÈãlk£Øêö ®\cNeÁ!Ć—Itw|Õ¸[3)J€CÍsNÈu"ºZ=:Àz¶ððl8Œ É8¨Ÿ Íôã YÃn­ÌøÿaÁ¨ÅYhÎ7qò,©V[re)·kÆZRv$üÔ²×Å(1˜©gª[ªÀոυI®Öcr´Hˆ”eKAÑ·% ÇËUÝ»…x¡Ç›z5¢R…%NÞv=¢*=ÇvÎÝ“—miyz‚R…xTm€±tC2ÖR”¼à†ø5e3 a†ÜÊÔTœçIÆã#š§ð¤i·'$ýXYÝ kVàsÎG:£µ‚ÝWfÿ­§±¢K åÕÆ|s±Æic–ÉiImÙ]aIÒCˆ r¾*DxͰ\ëRÒu«™Àç[”t¶ ¤Ÿ3ŒŠÄëNçlL>§˜0côÁb[P–—>ÍÛ/kÒz‡3ßë®Ã®CúŸ”OK¶<4@*x§—Ø®¼¯O'(;õ+–áEV²!EPQ@QEQEEPQ@UßU)è’b‚ô%ž×†õÈ.Étú4¨Á\Ê–“ó+­þ«t/qPPI4r{·5ÃJºÇN„¹rm¿ äT$Ù8«’¯8ç¦o6qÕá²’=¹¦»„>!q±­Ê%DvPOñT£¹ÚmUú ¤ ’—ࢠÇÉJ“Ŭ*)K+Ö´Œ€~cQÔ™ˉuÆÔŽ­Ä©½ Ó¶Þu¶K+˜òd”:̨œgü+©qÏlïûZ¦tÞè¾3LpŒò#³Ö,ç|cÇnú”ÛïšZ†–‘’-â ÍÂ"#ÜØi.)žȒ®¬“  ÷ó«¸ÝêA•ðû3- $©l04¥E;kwž\»ê½â€ÜÛŠî+mIë Óƒ¤•§íG‚{öÎõ<¶eiܱ~¦¦Tx&|wô•Ç–¤h ÿžT‡¦¶ä·ÄÑÜs*mq¡G¿çÚ*_ÐLVâpCÎ9¥¾¶jוw¤%#ÛÈeC:qâs¯Q¡Aû"¢´µ8¼ !jÇdžî_-jqýÊbïY  ¶µ¥_?j2ÝÔÖÎÒ£m{©_0¥˜ÍvÉ F¡ŒþêEמ©JøÜχ:¥lhdŠsõÃ5Dgì˜÷)¿ æœ8‘$ßg¨+)ëÕ}% !zŠsŒU‹b"b#jðœac˜­Ò; dÖµ ¤;êG œH*×Ü¡šÉ’q¿#Ý@ITP 7IÅi ÜWb¾¨°Åt—E,óˆ·¢» #ì%IÒ”ŒåXÛ}ñšæöZà!XîÅtReüò’àK`©á’ QW4‘åê¤lÙfåa Á$¾Ã;{ªŒ&ÛsH“âœrS޽EÊ~D–—%mºµ:¼¥NÝðV}չܾ‘芄­mŽÊ³Œ+¿|ïÝŒw{éDˆó[o'™ØyœÖËl˜Ð¡Kzv–ìr–VG3¨mò|µ¶!ÊG—^­ZÊÒg¿ȶ۔z­/N4üeýsò¦æÑ©¤¸¶z™)PVr æT|û©ÎñÆVuÅi´úC®„­-`gÖM#aBdå°ãRÎ¥4µö’Þý­¹ò#zºj)^FyAút¤¥M!ZCˆ ¨%9Ôue†W£¾‡ Fµ¯p¹g壆¤A~ç5ÂRà%òR§›A*Áe#lœã¿¾%GTg^YS²É-¥ÌT“¾¬sÁÆj™VÈòÅXú"+~iä­É ¶I:IÇdœ€N|þJIcµªçn}æä¤u)%Æô¶È#Ï";·#žø~— Ž¡ð¥)öHêÒ€BÆ|½G•-±CK6FcëF¹ À V¬•žì€{»ù뎫Ëí!£ÜÉë},`‚{Cµ«Lwi)ØVB½t²ìĦd6]am»Œ”¸‚ö*“ÄŒë« „iÔ{KQÂSÈíÊ´ÆÙDU熋MÝãzÅàRC(Ô¬øKîÏ=2ô f vƤzÁ¨#ïÞpÞ'žØc“i…¹JŽúÑ3RÓIs—dïÞvÅ,pi÷Y8p¹§PÇ´žÿùÖjJY¢Y ©¡ÑÆÒó„”‘¾Ê;Œ{éÂ0)Z‚Þ‘œ÷ˆ­1œIQС¤ãHÆâ²­kS j+ÜmŒóš¥ô=%cK-'P8*Óž^¿óÊ¥zCŠH*; sšè(P žÎ£Ì°¦ä€‚B¾.3þ}ô±EE©®Qu¨.½éx%A*)È î>Ît·†˜q‹5¦,„áÑ)^¿¦½f;¯*4}#.):·Èó4ëèî&ímÅ6™)ÂN’óS‹Ò ̉ßoï'‰nМ[ŸMpŒ«@NÜ^-蟭–;ÐôÙì5K@?­_iä}£ úé‰VIƒˆæ©ÐtHœòú…’”¸J!GÈÏ-¼jGÁ–{z8’Éè1žÃÉSIP$6®y>5:Ž›I¥|ÄæÿÓ7ÛÝè«]Å*u=g£ ÚJFÊ:€ÎIåë=ÛÃ:Gâ Gñl;>‰ŠÖ^qIP VF”;À¼*×bÁdK™nÅoFøÏ¢$gÝPþ9ákc÷Ÿ°Å0T†þÆôp”¤§R»:FÄzÆwØŠîsYV§jͨk°É×—§K\9M¤¸\K)#?“·J­ñ˜¬6fmn­H~Zû*«Òtg!<Ï*|¶œII¯U®å™çÝ9¦‰ `餲²‰ÈøÛ{is{$z«Mа—1Èý5Ž>uMè7Guk}i*¹ú©îj•d÷Ó+'óÃCZó¶§èm-(î®ÔB›3 ”퀑H&«[]XÛ*Þž$6>.6¦çš࿵媢õ,b)Í)M´„Ì{#˜5:Z(åÞ{éë«û*s¾ÔÛvSq’]p“òÕðz•IX†ßãpJ@¼)³©[++Fr…ƒ*œŽ¶Asž´‚7¤¶áŽ¥€³ï¯Bv±’Z±$†š—1R SŠÆ|ðÇ:ËZôerß88öf¼šÂºÝ Z[)ßãoœêJòT€”¥Ò´òÆr@õ×Î×MÕ—‹= zE;u€ (y1Zypd)ŒxyÖN0àM0sÌïÈúé¬HpäêJÎp\! â|ªœ¾Àî-Uåa èRN;²sí¨?^1áCCsƒå’jH#¾„­+#Xîϲ™./Mš™ JÖS‚zµl¯miÃå§+²2wB~¼›=Ö0Ü*ˆ[t>žAk89Á=ÚP=‡Æ¦^P[#QÉÀ¢¨á¶šHq.(¯N3·4»±y´u ç[n¤ Œøêî¦Þ"=­=JÊ›I'š}ã4üåªJ’Ýçr?ÏÏH•þÒC# Ç=óš²”ÔTEêî:ð¼ø‘.–òÒ@mxH9Üžÿa?%o¸»Ãu="Û-YÉNRO¯IÔsÐTi•$'˜Òr+[PS¥ÄãpI¨Íg–kØêzX{fÕaai™§-@ ’Hñ]?R¤\›âÙÏuØ©·:\'Û'>uCH’ÀÀHúªGÀüoÄœqqËSý}¶Kš¥A|å·v*b…a dxsŒUõ Ý;ƒIê8tŒÛìtƒyŽÈu¦‘1e:J@ _µÏ4Yxv4y.HK-…¬êe#Nü†yVþ-âÓzâ©·x,-¦dhPmÐ ’ ÚB†{û@ïHãßæjÝs)$cØ+$D´;erX çÆj&y߬YIÛ¶qšaE쬠+OÆßlgËôµ»©qÖʆØÈÞ³¸È’’ë­¶T²­Â“­?%fF£¤8< }©œÞ-¥`äg ÈÅz««)yc*N¬cmóRÊÅÇÆÜ; 1öÄ`Ö$¨7€úNÄïMé¹Ç):´u™ÎHòÿ<«„ØÖH(Æ2Sÿ:Š‹8Ùi}OÒÕ‘dœ¼3ÿÉpøW]WýMòÚ¦{ihÑö| äç¨sük³«ÔÁ¦ ïÔ¦OP¢Š+Y¢Š(Š(  (¢€(¢Š¢Š(Š( )ÿ«—dôxa†Ôã®- BR2TwØWÏdðÝû©ÿ«5ô7ê¹ý„nƒÿšßÎk‡ãu0o*[ŦšQ wsÌžï]SR®GkNÄSërýûÓ/ú³K-– ÓIP]²PÏŠ N—vˆˆÉqJJ›Z€)#%9 ?ùi§’»cÒsÚS« «8:¼3íª–!¾Gs3}‰«ìfú— Ê-#!!HÛJŽãÞ÷Ò‰«”ײìgDî9Ö˜÷+„wLI#ZÃÁ)YR2}{Ÿ}Iãô…~jTc!Ô<ÛNiÒX9'Øjèԃݔ¦µH_ѵº+7'¼! 0”)hëeJðßo ³º?¼ÃƒÖÇ—2,xIYêÚÊRs¾î÷üôÁÂÜin˜È4.+Í2V¢çxJP9÷’JŽ<Xüw„̧\T²ô04ºÚt¸Hì‚G¬â´ªqqÍcž"MÚhÞ¾(±õJRn‘J‡ 5]ߤ·Ä³oWkhëD&ŽÎȯ½~®^UxÃâ«]·ìp¢Ìiµ‘ö7°Bˆ;“œÓÔ^.jK©b ggÈVá £d⩞Tœ*BûœÊ»ª. †LÅ€•„3GÕKtþÐs ï8çŒÔjí˺´¶ä¥Hqí!ÅíÚä\WíR;‡pî¾¾\/’c'…_Ôœ”(”’’1‚0OøÕo…qnHréèîºJ‘­A»o í*Jo] N¾M‘[t™.<1g±XdúSM— NðêÆØ$“½W~‰!m’¶°–Â9×EÚ¬Òç<ßW[Œ©@h¨ãžUhÙø&Ęe+Ræ8¦ºµ8áΜ÷¤r?ËR­EêÎP­7¢G ¹Z˜ÑèÏ%IÛcX[m³  äˆ®„Óλ]D2›¹¾–€ø¥«?uëò§»uºMªÛèò¤zn²†'–<¬ÕpŒnË•Zt|ĺp÷H»JxYæéqõ¨¨ãšÐï ßÐp‹DѾ5õ¤[úÒã¯6H;㑦k®eNQƒ¥;©)Ù^uU>CµgÍð¿ãõqÿº5¸p¿v¬óB»¾ÄkéøºC¶Ù1æ£GŒÖ·Ý|iJ@ï&¨‘ºyŸ6W¢p‚: å¶ ®ð”¨a ã™ýÍuMËdN3ÌŽ>g†x 8•Ú&Œ²ÑÞ…ðåí()MšY$sê^Üis¸Ì»)Û¤µHzKHyO¨“”¬¤òØi#`1Ü*,„¸éÒ€³¨á f­Z«²M²³…Â÷Õ®Ý)²7lÕåiCMp¾3¡ŸK1Q¯Z‰êÈN0@ïÜøøùS:Ó1]sV½9!<Ïxü÷ zµ[—þ­×ú¬…6“Ìàœn}^ VlEÖZ»Y’ÎàŸ´Æ)RJ²êRB6Ô3«éÿ>ÆèОÓ%çÞëã…M¡DcÄòÜc–9`zæv¨·Ù®9.j ,З>6äó¤œM ãpŒ¦-î.,¯àmãþ“É#}Å,C§¢aD†¸:^#V2”¬àƒÌ||Å:^ŽÜf¤‚¥rVã8îó©ŠÁ)¨îÛ%!zoKo!99í{‡¯5Ÿl™cÑ•†U…-?C|-¨ð|Ù%ˆm’žlFBêTtsÀ#>F¶ZZB) F=´ì‘“矒’0ÝåøþŠËkJEcI=Àžf”·Ã)꺙Ž&Gd«JFO}B<6œy²*³NãT¸o6´˜¥¡|AßÀmËÌÒ~ªIc" .”ö‚\HøŒg;øóÞ¢-¤[Ùí£ÒÞ„~ÈèKšNsÙ:€Ï>à÷VrâÄ‚œXÀ=Ûš»È¡m[:ëJ[˜¥Ùg´ãnœv€*ä’{¶Üš|¶K Ÿ!²û%2 B3¶ã¼îÎÔùdèÞÝ*ÞŸNmm:øOغáµïÈóùO*ŒÉ³¹Ã§-3!m¸žÃ‹Q+ZFÛr=õš¿£8Ù·b4gߺzŒ7<¼Ñv"ä­)8u Ò”åG²»Žj3ÅYŽÂKñà¸ì¥¨‡Æ ÈÀòÇ—!šÛs–ü‹Ê쟸Z€JÔ³•ç!^Ð~|Öû_Úì—"%ÄÁüîâ±õÈ‚6Ç*ÙO vh¶SsЄž¿æÓ(x}ŒÓ¼ _%ÆÐˆi-„õgJ°6Î;ó“žìšž1 ×|’ܥȈãÐÖ¤ãP€N÷ÛjtD6 —n-3¨á”žî|ëDí%©VNW!0-/95µÜaJRR€P@:JwêÎÜÇù4ôô)>ˆó+ë^S¹VR4ËóæÃΜgErØÃÌÉ}Âã©üô aÕèíqÎùÎÇÏ’OƒØK(ôuN2² $çÿ¿º²º1—3Ž´eø&c’T¿FWaYN´c³Þ)WV˜Sr£D@BVâZ Ö”ƒƒ¿Û à †5­lȵ¥·S¦õ ‰-oÕ/²r¬Œä'YÎÜ™äFbDRÚÁÐRwAÁpF|+®„_1Ø.£¿˸Ü^1pœ¸½"0À!*QÏÛ+$rÛ ƒ òÚÜ[Ö'ʜ祽;íî®å0€ÔxM!·ÒâCCudjå‚w­Ò-®"Di‘šˆ$°¡¨¥J@pyÿY ŒrœtŒÓ|øn®m¶CO2ÊC[€ÏÃ~\‡†ø¤ö»=ÌÏŽ\†øÐÚµ$ àãnóšÃˆI2ží™))ÊXZRIÛ³îùjUо2zRµLŒÂ™BŸKjoVrzÄrðåRÞÇ<äöü,-%0ÞIJHQ ØŸš¼bÝ5¾ã~×l÷ ëWR5òÍzÛ}¡RxH®fuÅ%¾S“ k‰ ôG€øØ îOù5Ší³‹dÎnär<ë°Zi>¸°‚Œp9â£ä±êqñ&ÿtã¤G¸·…¦+`IƤìOŸÉSy.²†#6‡Pµ6´…‘±>&Ÿþ¨¹5½e€SŸ’R3å¿Èkœí²#³1·&FT˜ÈWÙZJ´jOíA-)^ìÛ‡ÄJq½‹Nò§žº—Úd©h$>1;œ{é¹p‹Ä±®YXn#kpƒöÇIÂG™È¾oJ¼?†Ôü²Ë êØ„[(Ь`g/Pª†„î'ã üù:]wÒ%¨’5¤o»ŽB|³XðªWo<2òÔ¶´ãN.Mé¹Òö®2f[jyønÄPY±’²iN6¬ñãΟWÇ©/)v°˜š–…HP9À<ür}õµpý ž¾J‰€0¶œ›XÉåÈÖ§™joçQúº=NùO°A.2›q4Ë™HÔ´gÛí­Ieä´²¢•“„‘¨ïƒž[Sš[äwšP¬H©}]£Ê}ƒZ÷ZT¦µÆ¢1¶ß=*qHN]ÈÇi'gª•M{Õ ¥W>­Ž÷Tú ³aGq„­(PtÈç=Þîún™l[-=HQVÒÀùêF(;ƒF…°®®X€ü×ìglÿ஼©ªJ–ˆ²3ήQEtèQEEPQ@QEQEEPÕw·A÷S¾Î6võšäýîÄxï%+R›©C HÇ!äHõW^ýWJè:ꔌ¨¸Þ‰É®4áÿ²14ÛeöçX•§|ãÜ+3‘8q$Xñ,õì7ö6’––@$€†qQˆ ­Þ{Oh6à#|ÁÇ~ÁUc©Á,¹ )ÇRž³¨êÊŠÛ<Î1Èš«øI\©(J^.œàꑌ÷lyÖz3n.çZ5[žXy.¶®Èö“N‘í’¤¸”©K*Q'À‚7óÉÚ•3 ØÛ(êÐTHÕœ’w úö4©ôõ1ÖãM¸¡€tû~VJ¥Þ„.7)™’:¥g;vS·ÏO¶W‹$±.,õÛä#K‰#%'#ÄM°KÓü†Â’çX““Æ=_Ò÷%ÄëUï³´JHÏ4äŸ}EÎ\ƒ-»GOžø"ýÃí\¤%¦šCè{I:RQ$¨àrïÍ{Ã+@ôÔ½2cKIYF7 ߟ˜ÉÇ•R1 KŠˆj%OU¤ò¯ð¬'4#¾ˆáiÔ,‚‚pS°ÏÏòÖŠx©EYÊŒ&ÓgSD鈞°zKk³u©Ê¾È­ÄêÇdsÏqŽwÁ§(½!\îPÕÒmÓzøëR&>…$$#BˆYNçäMs'^¶%m­M)¤¯ h¬ã$äú¾5H¸?‰à95“}iJZ^)sBÈJŽÛo‚sŒo]SŒ¼K,¶:†øÖéÃó¾l4H¶©âK?¢2…RÉ!hÛÄÍX6®"±Ìh\`O`°¤•)@ÁÜ"*‰…r D`J”„¥e'%ÆPáß¼vÆ­Æã–šu¶[f*ýØÒP§ƒO–Ÿ(T B‚V Âu($¬o¾yäÒ黲2†–‰xEºÇ”ççFÖá#9òñ­×‡Õ­õ: AR·ä1¹öU0å5 ›ˆ%®LL(9©IÇhƒ­#cœ`“¶#–Úâ^ÞôYfáÅVç$%–ë?cR‚BV5` È'ãÚY†—Óa–VÔÛz‘,T?Öä-c:Y8~â~0ŸÃQÚ™>Sµ+Cl¤}òÉÒ{·Ÿ‰qo»ÃžÙáõ0L5²é*üòôƒ]øÀîñß¶iºîˆÅ~Âë`¥»ªÏxÆøÛÎÕl޽7=,ÏEÔžÚƒž>ÃV_¶§8}BÖ0®DãíGw@î±ãÅ“¯ ²¥iA9:¹!ê©ÿ6¬ZÖèJ‚ÎRŒ &¤çu¡\öTdõ‹K.%jF;ïϺœmÉuW-m)g¿}³½6C\¹• ¨·«²à9÷Σ¬¬-…+Wi·9¤ŽX8ÍS&®TÏ.±$8ÉK-¨Œà­‰ð¤PxeIRK¬„«!N¯²“ä;»»©î}ΰ.ŠÛ› º@×Ë–}cßC×+jBÔ$”‚’…„ƒäàÜ+J’|Ž6ª¤Ürã IRTûi èZr°{ˆ­ñïׄd ï Ž¹òޢ݂¥mSqwÞJ©Rcb¦J‹Ù_ˆχ,ÔåÃ×XdúE¹m(Ô©{pYâ{‘ì™ÓØg^{¼Ô¥¾ ¸IK‰–ÑÎ0¥8ñì«KnX¥$Q®ÂB¬¶”-G9ÀÍa‡ÃE qa‚´òŽG×WB£ðd±¦u±ÖòIì¨óÛ–û ¾zB« ÆXS8ucªpjùŽk½¤K3û å›Ì”ÅšÔ—ä¼$2[ÒÒr|y÷b²á»ƒ6˜c²‚ñ˪q×;@xóÚ¤Š·—èhx#;%YȲ1Šjs„'/!—°‘Ÿ¶±æqì©ÅÄ“Å8Á‡c¸·¢u à%]£‘çÝQ¡4¼Ò’ÊV¢'p< 8ütîïÜ[q˜2>*@¹4Û5Í ­ÃÔ$ˆ¤žXç]Ðê’#—˜/ÃCSãËS«BΠ> 5MíÑœ~ÑBœ }l¥Â• ägâ¢sá©ü¡æ¶vïõÒ„K–ÓA‘¡8U+†:Ìw®‹"9<Ž­YC»cÏmˆÏx&¾§§š=+Û¥Ž¸¾Ù.5‘GƳ¿?]C&Iyô­´ÒУ*N@<²<9T×êvmÖzJ³²„‘ÒPv=®µŸ ìZ¹ ºÎ¶[=£µlC8î¥N œŠÍ´gº§&|üv0e¯*Þ–µ$§Äb·6ØÛjTÛXNq½TäHæOªØ)¶bÇCa+yΰø” O³'ß\ïä”ÛiZG~6®•ú´u¶­3FTÚp+~Y |£¹mõLu!a Û'½^ª¾:£ÙÂkIæ”ÖIw ³úáõÈ‚ýÝiÒw«Bˆä”óǬŸ÷j²—¥ipw;ªiÁ=%Ü8zËðY·Ç•”+¨Rr…¡D’ % öδá¥Îò*âT«ÕøQÝüŒzk¾¢Uí6Gó­¼áÌ}»ÇãgÕËßPE!$ro:Û96æ]yEÅ)JuÕ+¿¥[¾‘%§ä¡ RYí,¶:ªsu$äÍ8|#νêR¡¶ õU‚ïDÜPÕµ2´ÆSŠÓö¬êã98ÀÆwõÂõÑÅÊ%½‰6å*c©k2ÚЮý>CÏz¥bèÞÙ‹{9ô "9ð­‰aCqï¥LÇ’©^Œ†\SÁE=XI*Èæ1^…é$oßšºéìBâT±ÜR0{«bc‚œc´>jT’Ùæ1í­©BUvì\n,a:JG³¾¶ÆNŠr)ÁL¤ŒŸ’½m„À>úåÅÄO4ÚÆJkZ"£¸Ò÷˜Îé8­hBó€O•p ŒsÜšÉ +‘éĶ0ãd{+yu…'!œšfcA×£Û-¢[î»sJ^qie_>{Õ—ÁöèÜ=HƒÕ6ykq@H'²2{€ª‚;ï°èu¡ ŽX5"áÛ…âtÖâ´§’±”¤g¼üU NîúR¨••‹=ûE©ééºMˆ™«J4¶Û§(NNçN7>º¤:I¶Ç…ÅÓ ÓaЄ„g˜å¿Ï]l³ÈTtu¤„¾FôÙsá+ νxj}n ¡ADióØóó¯7 ŠT'vîh©MÍÏÕžþTöØu]<]À\7Êú­±Ã!½¤?%ZPF 'žvÎØïª‡¨!DœwŽú÷0ø˜WMÄÅR›†â%!Yøµ­lƒÌS›lv·<ëpDdTO˜«ó¢±ó ˜êo¥kºHN·†î®°®`èuM”lZ9õ~Úéú¦m·©ªšQED´(¢Š¢Š(Š(  (¢€(¢Š¢Š( «ê«)OC“Ê“©!ö²¼RÞnú칎±%µ‘€I<òyçÆ²S©k¦K6–cBŸ HŒÚ—TVµùí·‡‰§»lðÛM­Ð2Œ«ç#ÏúU±û%¾TÖ¥)e·PFt¾{ë$ðýº9/•¬´®HY iöTÝx5frç¶„<ä%l ¨• 9:»,ûýÕªÖÏXqz—ñV£ÈíÝYI¸¢(!¶P”Œiìç¡rÛ#) KHÚ{òj.SøƒJ¬Î4éy·Æ¤Œ#PçŒoŸe6¯Òd­]^•†^Ôê”q¾Àý_%HòÚòžµ@‘…ããê¤Q¡²ˆŽEi4µkH'PÎäq]…F–§oa²?Vã¡n9’ö´€ŸµÁÙ^½€Å,‹ 8µ‰%!XRN@ÈÜoÍHÓj”‡“¬6€ @$g~yßÃä§KõkR@)Pɱƒ½Õkgr»\ÝUÒä+ƒÍ© [n”óßcË~îúyµô‡ÅËf¥`7Õ¶·T‘‚6;Ï9çz‹¨¸‰B2†Ù<Ïqä>šN¨“¤ËÕ¬£@$êNpÍDôÕ‘‰eKéOˆý&ƒêˆ ©iÊ´î?Ã4ïøÄUzcÅÙo+8N~"vñõûª¹¤!Å)¿#¸ÖÖd¥¶’ Wm¿®ŽR:´nWiÓ\u->¤8èlo²“¤f>SI–ò#:ãÎåi=nqË %#Õ’=›‚–ìl¥*%N={ròÍdü¤8ÛÈ.'#VøÏ´TnÎ6Øðô„\"6óº[Á%;iÆÃÇ¿¤Po ;.¶]ÂBÕàIÝËæ¨#êq˜ÚÉ9p¾@É'¬üõaX¡È••¢ØÄ¤©jk$vAç¿Æ­£w}N?hûbº"rÚêµ´´ò QO»Ç¾²ã.!nÔ§%#úJÈ(l¬¨¬wœ¤üàSH~[pÊ[eQõ¥)Jó‚;ˆNÛüµ ã¸:ÕôÎ ‡ IÔÑ)RT¬÷矪®ýš•ªl]‡Ãά¯ ]Öƒõâý6òÿÂ’b¶äfZ[CeKÒIΓñ¤íäsS+Bc5gaM-§†’¥¨ã™ªÆ‹ Ä¡v†ëaI<‡çÏÃ| ]l¼=ma.]|·)?ж[…'umŒ ŽüíYÔá)IAÝ#Ûâ|6t¨BRJ/§´±ÅÅ Hi1É+#ç¥z´|r<ÎE@~¸˜•ÒÒêA+Ò”œ«—ùöY:©®%.)xVJÜw/ióÓƒ†ä±¨.&ض R¢¤œàøŽDSk6ÙBÛv<…6N”6Qçǯzfâë¶èò-vw—"zˆCD ÁÛ%8ß8Î<ñO}ˆZ—mvöÅÝÔ,©Æ´ä)#9%'N}ä½3Å–¼%hÃ;[Žñ™eQ–ÃHz;î$©kÖž{xòñ÷ÔJù*$ºÓqiô+JœÎR¯ž¦¸Ü¡¤¡Å d„¨çN|*=ÅK œ©O8ñIp4Ú~2G=‡3Ë–ô”ÒW+ÃÑ©Z¢…5vùÇíANiBÁ ¢ G˽jT M¡/ )\‡Xwðä)—£ëÝæýv2]i¶â$Ÿµ“Þ{϶¬ÉB$Ø(7èŽ n¾}ýõÖvq•7i"Sx@) ­ZrU¡axÆþt!ÙÎ4]2C=úI Ÿf)î#늲KA!I#' ØóØìAð¥®@´Ë:Ú”ÚùH1ø‡†ÔVd¬E–PX&LÇ¥g#Q>g´4ü´2ÚÒTRàÛ ­@¨·d⟞±Åס:ж#ÛŠN»PqE ñ)u$¨z‰䮋Œëì[\e©yÇaG>ÜÒ¤JJ#!Æ¥çuli(€`‡—‘¨’AîbAüy­w)¥híCŽê6$dj¿=õÔÎî'x±9‰Q瓱¦y6Î+V„$çd¥iXÌ҇㤴BÞmµ HîöyÖ‚… 8˜ÒsË^G¿cŠ&Él3ÈágzÅ%§±Üqî©CvÕAé>Î\P+2šcŸÑÞE76%-Õ ‡<(+oPÜÔƒ¢—{¤{'XSMkþQ?ãVӓ̈ÎùYÓΧ.ÖmŽU±Ä£[lmVÉžv62žT¥wÖ-7Þ)m’{ª¦õ$Vý;pk|_ÁïÄÿ&#d¨‚|²wÿ à›”GU5¦™-˨XÆ’‘Ÿ,½}EvoÅq—[Ö…¤‚’v9®Fú¦:~Òâø¦Ö”¸þÌ1I'²qâ2=¾«iTOFz*Ê=ÆsL×”c¶ÉBAli*%Ù X<Ç?ÉŠÛŒ©/²´>•œ”ò¼{7÷Ó}â¡ä¥·N×Ì?óßWž¥ÖÆû,|Yñ $ýÒ€?%&L‡ÙqÔDuÆÒòJHä°¯ê5#áxË›Âwé@Ö½ZSâpùj,àR d kl^6üU\Û5Ö¤£ væ¿2yÑTŸ±5°¸o!`G8«§ˆ•aGݯV&Ò"*#N¥ì•¸œ¨ û»·ª‡ «:¸ƒŠš±!äÇ\·PޱCPG2N6ÎåW=²q%û†Ø–©­³¿²©Jµ$+=Äšó1îÉßb•–ë]lVÎÝÚ S ¡o9ÍA´n9S ÖäÛO<ÊÛ_xRw§{m‰§®3v•.<@ËCJ5åãp6çPKÕ¥fôÄ6­Å®¡·i¿H9$9«$wŽ[mZéR‹W¹)UjVH°øù‰mC×­‡N”ï$÷z¼«o!L\J‘C9ñó¨õ†Âô{äFàÊMëÆB²Þ;ûjÒ¹ôÉASe:[ÉÛÇþUçÕ‚§‰J<Ñ*r»¹]Èw¦™¯#'VäS…ÄjÍG%°ü·T€IÛ<¹úëÐ¥ œ¨ìÍÍÊŒºÓŸ](ÖÓÉÊH#ʘ 0óòˆï(§­GØÀÔ çŽêrS.ø®:–ÚñöÈ8ÑÜkC…µ*RMØr±Éƒk¼Å™5²ã,•:–ÂIÖ°‘±ß¿;WLýK|Tï|1ÈkkÑV‡’„8:´¥z†qŽcõË<µ!:”Ø>uØŸQß;jèåÎ |”9zx¨%CrÃd¥>¬«Yõ]RÐÁÄ#Í·¿"9r²L¹qw­” %«“à•¾7!SNà[é‰:\•L’ÚuH„p•glŽe#Ü~J…ñ÷añ—„<[&ë í÷U·‰nç¢li…è Oxð5–¼«I8ÅØå*qI6‹êL÷ž¸)Ä e*BNçˆÏÍM°nR·úÔ!]z~6’=ãÆ«÷øð»4¶^ Rp¥1žüwŠdEñiVßb½y‘ÂÉ«3K’D닧ŇE¹†.' y ×ë<ꟸ!.ÏyÔ`…¬«#¼žgßR¹·ÅËŽ¦HI`n@­–ÛÄ(1؈íšÒ°áx!*Z»÷'ú·á¤èGk²ší6!†#‰i.–Ô£„¬¨×‰lƒßVo^à]¡éŠ¥FOb:…(ç'lùŸ….NA$íÝ[hâ”×yY”T¢ã°Ø”¯=æ³ xÅ8µJXHÏyå^©¦ÂÂRw]^êÅ;(I«‰ÂvZrÑ ‡ÉÏNJÓ•©dêž-ýT³ƒìvû\XòÔà$¹œóO.DrÆãEâ™(_X­K'$êß9ç[Ÿ¸±s¨çMyR­UÇ#fµJ7½‹>%Á·Ò o,aCcÇæ¤sç¾µC²ÚrG<úê±g‹Ã3ÛZT²†Õ¨>ÚHâû|ï±Å…$í9¬²£4ïbWF®(¸ª[/"*[Ñ…§;ï—•SoFêÔF”wçš´y‡u§%ö§9Ã5½ÚÜ2,¡2œiPVþcνLÕ&â̸ˆ9+¢32]XãŽ%)NI­‘ønï&r¡«KÉøÚÎöþ*˜XílAq/¥jJyþÓ<ñôÓóMª+Eq¥½Ã•¼~7³é«ªc”$Ô\h6»Ì‹t[d¸[:Q²*Te!!×F¼lrøù«¤jŸáiž0²°óê}^š³©C|z;ÕpUô+:±ÌËT4AEUÇBŠ(  (¢€(¢Š¢Š(Š(  (¢€ª~ªÌþc“ð½¯kµá¹®9ŽÓ+m!J!JNB¶?â+°¾«}C¡;žœêë[Æ=f¸ÖÐCéK‹Ùxûn[wó±×Ñ’[ ›b:[)QQÀÛ'>þúMpòä› Ô²U¤$V÷Y-%àØÎFÙö i–Vãg­mÆ’ôóÜv¬P\رµûŠ--‚…%{(矟—:õw#hJ‚AN­*H<¶Î)Šãð¶Öœ@ _pó­Ö•²ÐPt:ò0I>>z„^¨í÷pv1Ñ9µ í £~|ñÝÌSs3ŵ¿¤!<ðO•e"ëJÐPãCN¤©]àz¶ÎiÒãNjZTÚÇ-[nGw–*p‚êJ$öÁ!²PÈlvIûlúý]Ôæ¦#Çk¯pv†U¨î*=Á±Ì˜ýiyG*Ò6äjam‚ñCªu!IÉNTrž_çßY*Ú2z‘z=HÓ³ã´òÑÓÏ=Ç;ÖQe¤¥jHÔ‚H=ôàçÇ}§rŽ©KI Ø“ù÷{u6^-k¶´”‚Œ O€ß–¤§ h޹_DdõÅ(HuD`òÊsOÐØC‘˯ %ÅXÁ#ÇÑöèâÞe¸¾¹jí! )NÛ3êò­w+ƒíÊÂÑÕ¬öô+‡._çjÍ7šY)ò!mt•obBÂX'9P Õ+‡eBXa.êÁIŽï*ÊÙq—%-65©YY ì‘·>ìÿÅ?YëÑÔÓ…e÷9¤Œ}?ãPíjÓz±)2+rCIy„¨§àgqãLHiçÝc§7Üý®wîß#z¸¬¼9mqÕϾÃJ˜aGX³¥\ð4¤yc R|{±LW»“¯^™áÈêOe± $°N¡«éÇy¶S¯‰¥hÜ­úÓ•öR7O0x­ÑÖ¥2¢@NNÇåÏJ"Z &CQ’ð làcÚ¡¾GÙg7×m¡(làùmœÕÝ´܉·!hRJr2>(É‘çŸUå%È ¤-eZ€îæGKÜ‚Ô5hMµeÀ Bœò&mÙÍ=ÔG·ºÛ@`%(Øm¶*=µöDÚž~Cm–Ã… =ϳå«[†\B¸f ~RiáÔ¤¯N¡’Bvß|ŒóÎûÒ+n8éS*žP…(aI YÏ|úÈ®×¥*×Og½ÄÇF4ê÷¤Þû[Ù··rB¨¶ëÙÞL´¾ TC,n04ãn`W¨·\í RØIŒ—•†ÒòÐ¥9Ž@œ²p¯¥]½g®ò8‚sŒ0‚ÀeZ”Ò‡Æø˜=³ËlíŽX+x¾×'Š­rCL½. TC+|Z ÕŒübqòmµc¥Œ}«MwUµz'~^ßiˆaÕ*ΜmïR+3Š¡Zçܸ8òî-Æi¶P[+ ²6ÈÕ‘ŽõyßÑÐC6_WÈO%¤º‰H•å Ùí'žGy#×Qep²&ÌTXOª:Óƒ+*׌¾F”¨r5ftlñmÈÁô=ª„²Ú’”äcl¡¶ §9ÉçWÔ©'$›öÐÑäø˜Óìãocë×RSÑÕIh€u:¤–Ò<•CzQ»¾¹ÖË,7“׌¾á ÆAÈÓŸǘ5bÝ#™ç¯×})¶›RÔÚ[ YÀÉcãcå¿1\ùzšÝæý*ôËO;öB†[' †NøòÎÃÚ+ÂW†6T.ÚÝ[TyØZ=†&2ÄK'´šp׆عF,æÙ=iy‚‚½ÇÈÎãL®S ÉL™‘€ r:² 2 ‰À™'øªß‡ JŠ…Þ¥±2#ÊlÀ¨-x'žž{ì0{‰î©=ºú¦¤zeɦÞR(h¨¸†F0U᫞çp6ù²œd–®Æž$áR«È³Ûž»{‡A×"¡Å[ŸB”¢•‘žCŸò)+±\k \FÐwÔ Hùw­_íò›náðd˜±ßÙ§ú„ ãÈ'¾šxžèÊÒ­à¸âõkŽçm°yz†7ñ«4Hó)áêUª¡k\UéN2¬…€“ö«ÎþªÚìɺZÖU”8¥—àÓŒrªžß`»Î{®¸ºa;Öå·\-{äã;mÞjÐáù{kzX*žÊ†Í‚TQƒˆz³ƒªiÁ25ðÕ)Ù[Q®ín“ å·)ð €±¹PÇ/–»Au¥«)‚áøÞ­±V –£Ý!6òá…Ô6 ßÏ#Ï•@/–‡“t,²~À>!^«5סBof#šZK:eŒ8rR—I#ÃlÓl”¶ã‰)hóí ³Ëop÷Ôœ³oBPÛ1Ú d£$n2Gp¢æãìÛ\TäfÓ¬‚0P3ã¸öm];r,ͶO"’ÒIÎT9á’0jAÑ‹*OHÖ5¸ØC¦kX|tï˾š#Ü^yäÒt$çH c–{†õbp´FÚâNy“ua%ZqžÖyxU”ír5H¾–Þ ¬ÚAÍ(Z{UëH:³Š”ž§Š¶6Çk)R¦Û;PÊ0‘±¥-§z¥³¨ÉÂqHïVˆwklˆY2ûeµ¥]é;þ|©Är£ ï]E;F'tËÑ´Î ¿¥ÀÖ¸…þ¯ZÁ Zua$9ã<ÅG8âw.‰'Ñ‹3¢h‡4¡ÃÌvуpH8®ôé…m|UcvÙs‰×—2–ðp¤ƒ± ÷cŸ°W/ôŸÑmû‡–ËÅŰêš–¦f6•jB\ßìnâv;ÌÖêu–»›éVnÊ[•õqà:áΔ»¸Nê#HåçPþ$JØ–ÌGc*3ñêÜmCEX>}ª•Ù£‡c(-.Œg`¡Ü|FØÏ:péO‡Ý¸[ ñ¼(‡Ñmç†Á=Kè5¯H#ÏPðÌ`í9EŸA‰³ÃѨ¹]{Æ.Œæ)«›Ž2êÚy © )RHïr«s‚xI¾®T§\x,ÞqÅ©I=äž|½ÕMpŠ2ºí’T œwâ­¾ ‡ .i–½1ÐÚ–ê»ÎÛçœV|bÓRØå ’¾äˉ8)÷›7 Kì:‡w-ëß'ÌUw?/òe‘è]^¥`­jÚ¬EÆav=¶Qm¶ÁXK‹ÛN}^ªnzû9·”Úä„)$…3ʲRíãÜŒ“(jQ¸»€8>!Wk”––RŒòFyéäòÏ4‹Š®ždÊsm{%'íR9 lvî$É:ß[Úy©GaX¸2;ëo´7ÅN4%J£uäN”SYŠæñ‚ê“Ë&™ÑmýiÊOˆ84ñÄHR¬mƒH#- È5èÓ}Ûœª•Í ŠÓK. ,ý²yÖ=Z²”âœK{xŠL÷=…X¤VãaW ÙÞ¿ñ]¢ÈÉ)\éMÇJ±ËZÂsìç_I-–è–‹LKT’ÌHl¡†9% H{…q§Ô}«½ôºÕéæT¨vHª|¨ŽÏZ¬¥±ëí)_êWk;¹©ËHžF>Yš]Mã6PçqR‚O²ÿwM)eÔnÙ û“JzA¹Úbqÿ±>`aÓr}IIq¬Œì1ÝMQçY\^¼0æúA÷¥É'¹t<Ô.CϤé!IW µÅL–B¤$’Ä ñ¨ê%Ãoáˆàg½ÔVô\ÛpèjñD÷!I'ä5\ÖŒ±[˜øý¹¾¹]D°„§b•JdBe¶_$§’J±‘ôÔyÈHRÕ5¬ É;{÷¬Y¹ ŠËp®¤¸º[p°ò¨ktœŽ«>C‘L–QÖ2ê1ñO1Z˜zCθ¡)8’­S>+džd,ƒL-ªxâb+!M~—ÎÀþ\êz!¹:êl†HÔŸy¬›B\e!Àævî"¡wè·×›càù…%`«sÚÜc;œSZ˜âèM\w‹é’£¬êÊF>/,í©:™^Ä+­Ë(Åx­!oÚy‚pk{ˆe )Å8„'R”T0Žj²TN6\(qŒÅ% + RW…ñ““¾öƒK×ÃSåL™*eÁnu­éZ9m¤06çŸuF5^ÉFûÈ›´ê¦ž¡Á”)' {Å&p?϶Ž¡csê¨/Z®6ëº,÷iiRÄu0u6Á!{íŸWv2qM|Wûf›l·¥KÀ´>•’9È÷|oŸÂª”ß$[YÚ唫ÍÂ2‰i‰eH8›ë†L†Êƒí­ 䤫#äÚª‡¯·ó^pÏ”¶ä’V]Qí¤íŒgƶZxšS\(H‰m+NqêÏüª*q¾¨±Áò-¨?!YWž±ôÓÓn8˜ ‡3‚à&ªeñAM¥2PìDÊ/Ëî1Ìòözé÷„çŽ!ŽòÐ㌸ÑØ¬g}YÝ“²eM4®Ñ7bâ¨èQqdz·­ÐoHIX}`¤†~ZŽ¢Ô²¯²H$y&¶.ØÂR@.“æ@©:Q+í,=?ÄHhå ȸև8Ì€[p¨wæš¶>;HW¬¸k߃b€0Ê ñ94ì 3“ŽŠø‰>‘,qt¯Y}Å’|£»ô×FW2ôA–zO±­ =k¼‘ú‡{릫]¥^áEU (¢Š¢Š(Š(  (¢€(¢Š¢Š( £ê®l»ÐÕÁ±Œ©ö†þ¿:ãøV…¨8™p*ÒT„+–2q¾wÎ=½ÕÙŸT§]ù˜¸c­y3XR²RB² ÎØë•_ Þ®¾‘.S—V¤FˆÒÈqÕiÒ•(ÿÕŽà*?µÕX1wº4ЄdĶÔ\í&•FýIÎü¶Û#ÏΙø›‡oÓ¦†aÃO2­!ÄêÉÏÆÇÍOŽA¼HêåÆ’Ý©‡ŠO¢õŠPm@P­Gp;ÉæA<ªMÃWF2#W2ÞŸ³Hs®ýô•'nxÉçÝXò¨êXéÅ芥ÞâïG,DiñtvÙåçXãµlm·”iR½!œù•w÷㺭èÑÕv¹[]jÛº-“…•! ß e ä¿"6Þ«jw“"é.F¨÷èsd !j É9ߟ¿tów‚Íî0K¥–ÈÊËZŽ6‚¡Ü**Ç\à1ëYhý•Ha`XÎywÕ©Â7×lö”Ûn?hk´Tã+BÒ¬ƒ¬ˆ; ñSTc™8²2§“R«¼p¬ˆ‘“Þ»¤â4ý„%ßžQc™Íj¶p7Ëê予-´§4´™•jV3¸F¢9s>Юü5tµÃD«KQÓ¸û ¢¥¨lZHÕËÉ?%W’ 5sÏC¹6c¥Í–Ñ(qI ÈÆÃ~ñÝš½ÃCŠQ–è7Á^øÌ;ã=tvç\Õ«S(Ge”`•r^A#9å¶è%ñƒÖÔ-ÒÊ‚Z°T¡”§|©:€ ’ V–]$⢉“¶x.?‰v–„ ¨ž­iÎBH8Ó…ì Áåäy¦ÃÜ>¤»†˜h¡cQJ°R3‘wßcc‚yÔRUúüüDFnG¢ „¨h8BHÜûüek½Ü-íó_}Md)m¨]ïæyçd}5eú¢ÖÖ%pKhu¥­p³6°¦ò®à0NÛç}û¼D~GÈŒ„HjQt# Ëm+RT~.àóϨû©ÎëÄQÉ\'@ o*„¤¨`€NÇ=ÝÃj;~)žÂJ´d„£mðùó¨7쉶|Ò®}[²_tkQˤ¾BÒ1ëÎþu â;óökã :…!)F\F ­98<¶<»ªäáùR'¼ÑÑ$¶•”6Ê”=­†Ø;ì Çf©^–a9+ŒæõI oZ€#8øêå¼ä+^”*FQ¶è]E©DžD8–ºLK«öé0²c¿NÚ€ ‚0)³ˆl ´q%žKòÛœfº¦ÝuL¥²¢4|`‘ýG¿Æ«Î¹LáÛŠ’WèÊVv?Õ‡Ò퇴~Êôt= v°6@$ü˜î¯ž¾ 'Üwþï¿ân”£V‹kq‡¤N ¿œ˜‹i0™QỒⓌ¨ î'•G¸#ˆ$ OÛå9¶Š”ïç‚TrHçãŸ=êöú‘m¸¹UžÊ¤ñys#ÄùÔOŒz=ƒv¼Ç‘eg¶3Ô©Oj* Y*VÀÇ-Ϙ®àøä¡‹Wöí±dèÔ§yÐvf»l”é·.Qœ){R´6”+N±’rB‰1Ùá\¸VsÖ{mÀηÉl*JšŽÚNr‘ºˆÛ$퓎[U‡ÁüôhQ‘r•E¶‚B*m;õº@´ã$×¼Wa¼Â–ìûbaz m•å0Ùqð¼nT\ î2ƒùþKé•]vQü?Êt$’©S½>o›ñ±UOãñæ¶¥ˆ¥†ÛaihèN’29àçbs½Hø{òx…×Wwa’ÂÃŒ0¤¶·HÒNãQóÛmùÔ"âøeK òZênPî””$(„çµæ¤òÛµËjeµN%/)h6â2OýkDc c¸g Ô×£wfÙxj]c5.Ërip• ¥Ie{uƒÄk Çûm–,‰ó•ðŠÓ…å§ZPX À$ëÎÇ~TUá4û7{hüzŽxW›ª“Iþ §÷¯¸j·Üï Ìa˜W7eA*ÔùXARS«Ãlœrߘ'©Bø¦ùØI…Ò’²†Pì„€wÁ:IÈÆqbEºß-•NeeÖßqK=v*m9F|F7sMwDd‹Í°©é ýÔ”6„¥]µ ÁÀϾ”êIIEÇRªøXºU+)ÙEíìý_BÃáî&•lûÁ´Æ},ºÀsV’¥¨ãPÈ drî©|x±fZ—vK-FJTó“=ÛÕ1í6÷.·BŽ]êÖ]ÎT1ºFÞ­êSÁúÉ×t5’i4Y+QÎI<…gŒZy‘©ÛQ{0¥Do)d:•t“ŒŸ Ôíâå —\QÒ“}¼éÑ‚[J V)Þ[O2 ¡ÜqVÎN¤œžåqŽX¨¢zœ‡ŽdžIçM­ jm*N9ƒO—×KÉÒ„ŽÈÉÚVÞ]h†Å3zêniÍHÖ§´šÔÍœ8zÙ&ý·Ù¢¤—çIn;xñZ‚sìÍI-H¹hwÇ@¼; ‡z$áö£Ci‡åÁf\µ%Sޏ€¢Ty’2¨TÉÊÝ3Pà1 ”éi†ÒÚ‚R0>jÖà®ÕØð««»œ-Ó}¡¹ý)_][ËF&¼œý{üµƒÂÑœì™Î‚~Û¦]0’ž“¯çR@ôçý¢+º™`¯ìEÀ°´ƒÌ ëÚ«8½ln§'• ¾²£h]dcîEb® A |.þÝÚGÓOí:È9V3¨ƒAl8TKÄ$Žg#ú£³BÛ‘×xURŠnnø W‘ì l…|&î¡ÉA°¾ž^Il„+*by{)(BT½ l>Ø(ì|*ÈÓ…¶"Û4H´—ë¹ÊY ÀÕƒí¤¨…)¹ÉS),ŽÙ±Ž\éÙÑ„n01Œ‚"IO¤cüðMY4úrh^‰×èBrœâSûwŽ|rA­Âñ7ô¹c9'ŸÄ¦ÇKx`cʱ ßâl{뮄©±ÈÜ¥—£>僳àcýÚÚÍÎZ\ZþœO‡\0}…8¦}iÈÈå·*ÜTrpEáé¿ûSbïJ”êҔܮ(hŽJ“¨h¼œõÂb G%J}…ƒŽáŒí¿*J˘9À¥,9Úã9ªe‡‚ZFNâ4Ø¢54”Æ0;ÆÃ,o„£¸ëêÝF>cKÐð;SŒgq¸'íTº1,MŒ)àI+X º6¦Ý“|ˆ4óÃÜ(«æD+«ì’{hÒ•ŽàAîçø±Nqe k%'ÃN>JØä”i899åÏ䨨k nûŠ™!¼’øPòhóÒ'.ÓT ˆÇwØGÓI&ÈZuv‡5¸úµ3åçZ©À¢JÃê.²O5£Ïì_ã^››ûý‘½¹å¾ZcnHIžÒ Ø1[}((”ë»óSq"’,N…å<ÿJv4, Ž±Ó°ÇýCžuÔ•Éý¹¯¥{ )…½ø+¬*ú^h (¢¬EPQ@QEQEEPQ@V¿T‹aÞŒl¤(ŒlF~Ú¹®Ì÷Áå§áJŽÙƒKSh[iH;áN”î;ýÕÓ?T9#£²B›AôÖ0\¤v»ð ǰ×4‹‡ [ÌiÒxft©.:Ñé ²Ò[#ôD`ëQVÊò'aÅ_2±}-S=Ÿ}Šû“&Zî“t›q.˜Í`+â êÕâ œ`ŽüÓÌ‹zÚ³"åÔÆE­ô„Æq·–”¢œ,Œ«­Yß`¬l‚qÏ qrµJ©´H‰ „)¤Épm(êûucšu d c`dJvd¨­·å*!Õ!½-¶ãjQNCe'â22|k›F…¢Ð’z;J‚Ì— ¼4¼%]O[ÕF8O`‚3¸À¼ïŠQcâ ×ðƒÒæ;?gfXŽ†Â†—A'¬p0ÛäšmøZú‹m,ŽÇN¦g'S‰H)ÐAʰ3ÈOª‘Ü Ï¸Euù³ZhHÔ½”ó¯,¨o­Cb6NÊÁå’j*÷bêÚ²Kvâ»EêÕ˜QdÅŽ¡ÆàGK©šú !G$œþµ'ná¥:¸rÖL…°Ó¨ëR2¬( ãc¤`8gØ®1ã”°vß³¶NÞ{Sì>¸èy÷ ræ ºždwî3\ìP”¡Cwyè^¦¢0èT”­hyÕ¬) žÎ’®g;« ͨj‘ :úÒÒ]PNNtŒr$z·ÆMIf1f´Ä`¥—šu_¢¡ÒûaC8ÒNwÛ»ÌW²x‚*ç°ù…-”éB„£d„ê>¼eISŠ+uo²#Q˜®$µÀêÀ)µy…`óÅHJ¸‚BÊ’©Xm::ô”·20“ßž[÷ølqÉ'CO­ Nµ·:ÿYÀïæ)\Y¯µÆRP‚æ+t, rû¯`©"ÕÜC!2£L×v´ËKKOÆ«*Ï"ÈçŠóÒ2Òf3N) ì8Ú@.äwçÊÕ*tÖ-]\«”!é JËZ ^ppV¬ |÷¦Û—ðõ½ˆŽõê!ÕiTŒ¤¯šŽÊÝ8ÀÎ3S ÷5Üø^\x¬M›¦ îil©9}´¶P :@ÀïÏËPÿ‚Ìù²Õq}´6ÑAh<æ…ºINAJH@œ€ Àîæg÷ Ê},8ÂÚ Ë‹)R“ŽíðvÜó°É¨Ä†Y|º§Ö–ð1ã\ßRèÉ­ÇN‘[WR|«€ Øý°ý?=pv38Êãï]fÂu$¨”¡$„- ¤xw88Û¾ªN–&<8É×PKzѯJFÊÕÝV[À2R…¡kx¯KMœ§VF¬gù;ª·ée­N{GÌà>U%‚í´<â•6AÜ; ë#Ô>*Õ¨”ܭωÄ$€ÚØì¨m߸Ϸ4²Ïw»4ùDIÈ} 2€è «Ý1ækÀÆ}š_°–Ÿ‹6RÇÅùè¾bº‰Êu¹P˜Tt-!®°j> NNðýö:·­TÜS¿ÉU¯$B ü#èêîQIÒ}µ1²ñŒ9šBd!^£šù|vFWÊâ—K›éVŒ•”®9Oèχ¤Çêâ2ì4êÔ ÀÄg8öT*óÃ\[ÂsÂ̯KLuknF·Ð1È¥C“æ3Š´`^P¬iP#v©ËÓ"õd‡›m³²–â€HòÉïª(q|] e“Ο&[%xÙœãgºË•y|\e9)ë°=c®+'­³†À rÆ6§:;¾¥ Üd-¨pÔ°­BCkKmà÷ðÏ*žqŸ+ˆo\lV¨Öטu.™Î¼[q¿èA$óïPã¼b¶]º=ŸpêU2íÇC Þ}Z†qãžñ_]KŽ`”"êJÍòÞß ?½‰ÑÄÖ§MÓ§µùþ\È¿_í#†$på©ÉD)Sm•êÉä‰$÷ dÕrÍÞëÂ×ipPÝ Tg² æ¡º{Dvs¾väE_v~¾@¯U©è‘ÞK-GФ€wÒ1€qžú€ô‡À|c}½N¸Ä…mmO½„$;€È(íÏÏ™å]£Å°n³§K*‹WnúßþÆ9Ó’Y›»E0ÓËißJßBTvO#<å¶BÂCª%gYqXÁÆ4q’s°©\›²ü•6‰†<’“ºUœû3ƒíÁ§û? *ÞÓJm,6œ6”$äá’N)Â\dөˆÙ`àŸ<þ:ùŒ‡kÚáî›·y~ièi8ÏI$Ê;ˆìrlw#Il»€),²“県wRq\Ru·ÒGo’‡•<ôÅwC·ˆ,5¯TfÖV´ã9V6ÿwÙšƒ =cÕ¼F *øÜÏÑﯷᵪ×ÂÂ¥UÞhùìE8Æ£KbV»üÇå-÷ºÀQ I)ðþ*“tná{Œì)X*º±Ù=ý¡½Wä~z[JCg‘IÜVvöÔâug¤»ë³=‚7ÏýbkÑ‚ï#4Õ“:ð§.Ÿ])hÄ£ &·2+“zžv6 ŠÞZÓζ-Im¥-GHHÉ> £ržú§xÍë#‡á2nm§°¤6Î=|½µÊ I<ˆ±Ïüþ:œôÏÅJâÎ;=$z+J,Eo±¤ã>²rjNyùÿÇRmËCöŽÂ)á° c¬µ‘€BBpùüfµ¸œnNO Î}Õ´nN{ÿÏùõVcIÏÅ<ñòüÕZg«ZŒ\4“¶0>ßxRÐJQÀîÏz¶9÷Ó‚kO<+qâ|?!½ ©•$œäsÿ>'jº³+ž'ƒxy[t ÂÖg)t`ŸÚ«'~)žÕtrÙrR]ÈÒ¿_;Ø—×ÚB€V‚sË#‘ò‘L7ò“Öô©;,xצáË‘ùÅ òrq›Ô°£\—iPVk²ðYÕ“œàò¨–âí½ô«S*;²ì¯Çq¤¾ ª‰C&¨Ü¥ŸFb¿„ÒRc<¾ä ü§×:ë/¹p”Ïg :|šügÛêÜæ9ÌS ÷C)ÒãáÄ€@ÎôŒ“äO/´a›sôÇŠ…àl6¤é}eXÒqâM*šâ¤¨%”x¯Ú4a;ã¾´+#<·1`öŠ:é¨Ï£y3¯ƒ¤ ¬u" =H·§ôgŽR§ñR ï'ø¦™~§>€eñbØân.eضBãÆ9K“|üRߟ3ݶõÙТƷÂf&”Úi´„¥ 9RÛS5JºY;RW+s†´,Õ5'vyÕ]Îéa(_” "sçprX®ú޵9´ ‚µ¤'E$ ûiß§ÙéZ÷ÖhÓ_írû"û©‚)Š•¡HËÛ䣴 ù|£•NV±®žÈwDô>¤­Ôãí¯Ùáí¯LÅ•þ†ÎÚœNÞêIé*u°:· TNu4€“˹X?5k}âÒ¶”æœrÊ„û»^ꤹ±L‘©å¡ Qß VO·»ˆÉHPI(Q­³íÅ7J“Öº2¸¡`óβ?¦A¬“"CŽnóŠÈÆh¥>üU‘ZlZã騫·¹+^?hJÊœ %#µ$çߊÑ!a‘‡eæ*Q>u¥)X!kXólÇV" t+ÁÇk=ÙPÞ°.¹õ wóòR$º>)p$óÂHÏøVIX;%¼ÞµóTˆ‹’²¯¶_´ø«.¹;€´díŒäÓxuiVßÁÝýÕ˜rVsØKVæ¸.9!{råÈþ²;Ê ÁH ò$é/r†Â•ô«ÞyÖä¼ïZ¥°ÉíjÆ|v\‘5!釒F¥“œò ï¥qŸJ—º·Ø oôS`sZ@)8Ø É¥Vôõ@ë lòì.ü÷{j†‹T‡¶-ED'9ʱY®Z‚v@ý¹ Óo]XI{¸a#‘crÅd¢ÚÊœHHN3‚•gÙìîªÒÔ•î&2âCaÄ,'˜o|ýÚnuiRòžyƒŸùùÑ!æ›Ï[):RvCcN<±“MïÈekp!9 Çd“?=h¦ŠdÇ$)Í ´P O#‘UfV¬•uN s 6ÔÙÔ6–^C'¬>pEdË’Ð3Ö%ÖþÔ‚0Ï®¤õ8YÿS뚺W²$µ¼HÑú‡;ë®kŽ>§'䯦+*Œ¶Û%ãàR?@sk±êØ-QSEPQ@QEQEEPQ@VÿTj’Ž–¥Œ¤M`‘œ}µs‹Ø />µƒ¸ha>ÒHÚº/ê•QGEï,'^%²tøö¹W,5!„!}cÉc}’‘œÝ€k.IIÓ½´'w"³›0‡`- )ç „,dÓ¸ã×ßPù éR#8 È >XðÝÖ©Õêd­ÄgIPO}9Û".BJ‹ƒ Ÿ¶o$güøÖKÜ·.Q8·L×ùâHScbùü¿Ž–Ã}ÖZt6¦ÛIûc«m€ÆÙ4¾ÛhrIH#«XÈÎO³Žšáû ’äõªn¼¸Ù(#»±±ß¿zíï©ÝDq¯3ÕmS ‹(·©)د–vAßÛŸU$·Ï¿"jL§†@ ŽØRB@;ÎÕbY®L§Ñ Ùg!ž¬¨¥–² g–üÁ9;î|jA}~ËoŸÄ—Þ|’[lDJÖHÛläí»¢Ey½„'†í7KÊ×!±èì•öµ¯:vÉQI=®íˆÁÏv)_ð®ÐûR!³×•'ì½JtƒŽÚß}¶Æ9î)tî“ã²Ê›¶pËŠmjÔ_uHm!Îz”°<‰ßz­¸ªç"â´Ê‘%·ÛZµ-:Óäã|ŸhöFé¢QŒ®:F²ZúòÊXžâTR²Úµ2?l€”«$¶ 3ߊGp‚¢þˈÔr’„€H T{†ù¦èr‘nmÅ"3J$¡´ã>dç'Ÿ–+ÖVT‚XêVŒXÎOv9ב;2[kšý†Ôüw|G…°5'‚¥ÏÖk÷we!!‰N¡¦u(!J€qÈ`lFOüª ´>„„Έëd¥Kc—,ŸœR¶¥Í‰1ƒ#RƒÙ=hwgüúé™­dæ)—é3[fRíª‡“„e‚²@ß–žÖT•—Œdç7Ý ïŒS$Ž2„û&r¤Ëy,Zuï¶IV‘ûöåT;M=­ ˆ¨è(BÞYQ#YpsÛ!DšÙîøÂ_q·“Œì y‚9ê¯R<­Wjóº¾ËOÁ¼]8.âÔ[x9ɯ·tijp’âT6Á>9ä9TiÅ廊Í!CåÍ’¦Ö™RVùKZÉ)J@äG†ÿ%1¼¬des°ç_Q•E%‘æÝ·v:%(u¶Ê\êôžG’¶Û'»å©¿CIÏI>î s5@ÒzÑ·=ÆÙÍ@Ù—Ñ It i8 Ž@çjšt½}%X€SE"s$òû"{Y Êæ»¬íg>5lkºµ8FªÚÉÛj®[ž Eîª÷ê‚âç8_L7Ãs§ŸGdƒÚH#´¡êõ>yΩ…¹4¤œ‘šãN˜x¶OqkÎ*W_'ؘÒ0Œýº’< †Þ@UU'–'Ö}áo‹N^lu¡^ùÆ+FväNÏâ­¨žYÎÿçΓ©CVFüÿÏÉXØjMEå6#·8>üúë³€vÏ<Ÿ:É@ ü·ÿ>ºðþ†N|Çùö×OÍhBU¥À3¶yãåùë)‰K‘Ô6å·•hš‡SeÄ• H$c)åŸÖä«-r$cßVífx±©ŠtØÃÁ®íÁ‡!dúÏËš¶ˆä™M:0áVøæ’|=¹¬¸a´"ÿtY@JT¬w÷÷xþ:Áé>‰wRו~ÈFàø‘íÍz“¼áÝÜü²iRÅÊ$q-–d¹á€RsÝR>–ä5z3ç-ŸˆsËÊš¸öœ—™IIÇ3ãJ­.£ºq’sŒùT'|·hô¡ÞY¢Jd¤¹ÚIì‘|i¢DWÖ£Úʳl̆êTÖq­g>³Iå\Õ>ÑdèWr½U iËÍÔJ¤tM˜9i$åVgÔÕÀ¸×¤F#ÝŒ›e¼‰qÄ…I öZJIÊ?€óRȼ—p”#¼Ò“=VÙ ëp°FJ‚°G†«dåErÕh}Oi ´†Ò0‡+çßôíÒ †™ƒÄ.LŠ bpëÑ"®Ð¢*áèïê©TËÜ{gZ¡ÇeåiTÈŠP dóRNG‰Ù]íSßC$©É#§­ åJ¶Ÿe2â\mi J’r" itmPœ‚¢±ÁÝ<-Ôt©|êb—WéöŽp>ʽ¶¨b¥»¤3-ïG º¢£ì·öŠ”ýP­És¥‹ÚYCªO¥½$žµ|ÍBã´âÕºPÑ?!!j÷ú±šã²‘€–â¸_Q…8>á“ËÈV/€HœâÞRëoîu¨-õHž„$«RtŸ $ãæ¹˜hK ¾Aí­+ß=¦ Næ¤-!¤¡¦ÔæU±Ë¿=ð1í¯q%µ 4Ú‡$„’¥~+ J†[÷ÎîíÁÎ)¹ÙÁ¾ÂîÎþ>ÓSGéu¤Œè—5 ?H¬1 6R•¿" E4‡:÷5-@2GË[’¨É=°VýœªHã EgK.2Ðï?çBP‡U—$:¡Ï‘ǾµuèJêô … â–Â~æºDrB¢µ”€¥¨Žj8¬ý#HÁKe'Àä|¸¦Ò—Ì6£æwùMd܇rKxJ‡‚q\’§F•ïÀ”6T‹šÔ²G4£ñâ™Ò¹%dõ çžå[ØQI*mk:·Ë\zòÛ5ùk8y p:ÄŸ—Ç®ŸZ@!O$åE¤ùs¨ŒiÅ.^$ãŸd’?<¥øO7­×:²”á*JÈ'ÌÈU3‰8±é e†CÏGm9ë6%C;ãÕãI$Þc<¥ºz¡°PNÞ¢}]ÔŒKµkF0#~cÀmkLû[îâ”uñ@Ç»üj $œ&ÍnKÃKÒR†4¡`$RE`­]RTm`iÊÝ9>ÁZåÝ( dX>þ%6ϸ¥ÖôäéÕ’qòœÕ±¹anÚŠ—\Xì¬{ÎE JRÖm':Õ¥GÜ­ýÔÜÄÐÒAêè” I®êÞåÎØ4æsñó¿ÉVL¶þ¦§]s¦+&ZJQ—ò®³Q'¨s»?8®Í®"ú–ÜŠ®š¬âW‡ò3”Ÿ°9ò×nÔã± ¢Š*@(¢Š¢Š(Š(  (¢€(¢Š¢Š( »ê¢HWD’ÒB” –FÌïÝ\µiá‹…Â ybChu:ºÅ’pÛ³]gõA%µpRëÈa³pŽâ¹ kÜšªøgˆ¬Ü8ä¬^Û… 6¤‘û±¹å¹¬¸ˆfh’›ŠÐ­Ùàö-¬0§‘ו”éNAW™Ûç'ÙRi7‰6¨(ŠÄG#²ãA#󮎰'läçVIï'ñSë$™R• ó1ˆ(¬,(çžHG*d½ñ|"—`¾IB4õn'KÉ$rÛŸyï5•Ó%Ëq‰W¤½9m=,G!§BvX‹ÝMo\Žø’óÅ:ÒTœ¥Î|³Ìz¶ó§«Œ{íÈÒ#½Ô¾¯K«/%*ç¹JÆqãŒû©u¶ÉÀ kEÒ{ó_Ӏ⥡)>¤„ííQ®vDÔ∳7Ç&4àbRã´¤€¤²×Wòyàwû«bJÔÚ”„ui*R–è8ßmD­‰Àó«WF-¶ÚQn·€Úœ!ã•c<Ƭ¿3“çȈ‹ÑD‚–ž 6ÙWXû!XÆçlwù×)>AVE@âæªÜìÍ]k jRFµá¾ø­EÂC ëKAX ÚÇvHÀ÷ó«^u‹¢yM ’ Á)Ðꔂ1Œ·b9Ÿ…\¸NÀT„5ƘIÒz¤iR”;ÉÉHÏ.c;ø T])ò,X=ƆS°–[×WÕ„²wØ÷îòó§ûOZ,;>à¢Ã+ "2òUÌéÛç¬æÅáFf ß-–’•ž´vŠ@9$“¿¨ü ïK\“f‡Ίú[Z-£Sksr :sžd3èéÉr8äžÃ—§„®–Ä…*ä48€ÛKQ,º@ÇhlRO-½ÕUú"Óç åD铤¶€ìçNœ$ l¬ŒwÓ‹P`JJ$År؈î³Ö:Ë—&ã¬/ë) ÎÇ~3Hï YÔ‡?«“ä„ú?^—’œŒ)$€vöy×4ÎÆË˜¶i‡ ܉‹º¡é`'!*m-‚BÒ¥' ²0Ÿ*Œ2¨“g¹*Ë€ëzKδ´‚…Y$‚®^}ø­ŒIŒ‡åÒ3¥"B׎ì±òmÏ}…#¿!‰óž€zÓR¢˜¤´¶@$( dœ‘È ê§Ñ2jInÄ\EÄ–¤­Àôuõ‰p¡*JR¥gãƒîû9Ö¾¹ÈvÜõÂñ úOUÑšlgH’FyŽD|´Ÿ‹:<¶Û.JMšK7›o£¥Æœ“pN°é¥Im!\Æ6w’7Äãèæ7—oó¯Q¯%Å>ÃRpÛ*IÀ-€'’ qßʧÙåŽçˆÉÂþ•ÄWÛ”4Çym4Ah†ÂVHʱœsÆ2¬`žgŸj0näºÛJAX)ZT¤xgf Üýj›.lK”†ÝuZWמµYNr<ÀÏ®–] ¹y›é…5%ÌhmE-§9ÀÆØßÇÕŠ8>G3+’¨[•‘ç> vz£Êl´ÿ¥©¢Ããz’r2¢ ^yŽú×aDƒr%¶›™ ŸÑCkP9²w8'¹»×L6»C0sª‹æÔ'T¥#NGvû÷rÚW QãDu h,ä%mê dl«'üøšã¦Ú¸Ð˜XàÈš\¹8ÌY%³¥Øk–ˆÏº”œ¨î¬ äôã¹÷¦¥©túCkö?ЋšÊµìUœxãz°oKqw.# ÐË­%*ÊŽI:½CMWý$ZîW jD;l—ôT$èh“•m߸Ï]„Œ”Ìõ!aç6û"¬ÖÀî~25Y±<;{Îö©ßÔ*¶¦Ã{I Z&ïÿÉUo±UЙ˘@6ÜîiK¥AV pvÅf,wóÙø&nÿ%F³kÐ&×9#À4ªåަ+e¥¼çZ\ ¨ #ñV^ˆÚžJÜu03¤|æi(²^†BmS@þDÖÔÙ/j›l±ßú ¨.ë=²ÃHNH`=ž5­öæ4v§øªØùW¬Ûoí­’Êy©•bœcFº¹¥.YdŒ©•iHñ®Y³¹–¤jN§nØŸ’²’eÇ{ YñIÈ5 ~Æ^m8%¥§p¤ Ÿ’±G¹Ü…¯n×V@¨¸Èíâ0³"Ok줓ÜFwõR…>â’Tµ$«;à Ÿ=©Í\<îéRd‘ö¸líI³Niï°ÅSÝö2}ûUrOš$šê9@½†­ÍDˉJ”K£8Ô1ËËzQn¸uS–¸ÊZšÁå”)@øã·¦6m4¹¼IZOñ njͳم/W0B påÉ•ÆèûiajŽÌ‚IWYÚR€øÏ#Ïð)».—«zii›°YÌ9CXÂVwõøÓ›(Ì%³"ÒòŽRào:»>Ê’×CCΡ÷šQ“o K#ìj#²ßÕöω¤©a¹O-m5²R îø×‘Y¼Çp–„(ŒgIÂÎÄrïï­±"½R\IO<ÁÆ9x ÔZ}×P~3ÈBl¬!AÞDƒ·>GßMÓ!L`uŽ4Òµ'í HõíÈüôãuDé®Iˆîµô5“þ}ôÔä{²È>ƒ+Ãfû«­>[¨Ÿ´Þ@I ;û¹ÔÛ 'ºV² q-ž_Ê¢ îÚæ©@¢í^%“±ùjsЋÕÒ¦}Á ŒÃRÙS¿„%ZIölwò¤¹¾ë;mnö®·0íDœã>ÖO׳Ÿî”ý49Ç*Ë*pßíËÒ3„ÈI'Ô3\œ[g…rèF~©.3rÉÃh´@”[™p6¬)-ý±òçŽî~F¹uD€@ûÆ×IüEÅn CŽ+© ¡ØysùM2.4‚{,9ýX+FnV¶Çí?G(áxv 1ÏÒÕ꿽/äçÇZ[V]Û¿–Ï•oz,ÞiŠñ?p}9ù+!ÎJÎb½ýþ{ª9%m“ÇQu}|Q”“ñN9röŸ]J86ÛÛZîZ;­Ii²{+HÆo TjjôbžÓ×Üß —v;3ó‘M7¶ô¾u/Y ŽGÄûóR+%ºtk*Ôa<‡unèS{ð‘åÈe5Ý­7U8t@’° “žï¤ûkׄrè|ujަ&s¶ìޏØR4Ž{šÉ '<Àù?Æœ…ŽîAÛ/'8ÃF¼K¿ïd¿êF¢º=,Òm1}²àÃÁ0§‘… %g‘õý5åòÎq´ê%‡”äc–<3H šð§0mrð1ÿTÏ}<ÚÓzi±e²kÌ i=QÔÙóïõU Z/='¾èíJ´ÝnòÑÐÝ„úšuµ ƒÙÔ1‘ãHU#[¢3û´£·ŠIï«Nólf}±…µm“×áÂè%JWŽ9’¢—~ ˜ñ.DeÔ“öŠAÆ}~e*÷iÊ-x‰N-¾ÍèD]ô»sú5”÷§}”Ñtƒ{³E»[_Lˆr›4àïæ>Uóª ƒm$*ÞÔ詤ìqäp¯­T€ö°'Ã8.õ­n:£¥;绕*j Á#õ2P#a–ÏÑ^ɶÝÝÕˆnl6ÔÒ²>LPᩨ)R‰SŠÉûŸó쥃h:$†”®H)Â÷ð94Š< Ê?D…'O/ÐÉïð¥)²ISÄ”r‚¬øòÆ>Z‹¹ÑÍS¡ `!§“¿aNCË~~¢R­o/K,¸ÊÝ?ƒŽ~4„Û%)XrÙ)#¹hlƒí5€·\ÚnÜñOqê7ùª9N¶e(GêÿLâ2i1ê¶Â‰#–‡ÍšÞbÝÊ4ü0«V“X|=[ú„+À ïíÿ µ±‚žu#ô!±­­É ˜Ø'n[|µày)‡+aöÈ'º°r=è’•C–|@lãä¥Å‹gêW¥tßdiQ[o)|êJqÉ…×q× ýIìÜ›éÂÇéqÞCAT´ƒÔ¯jv$QEHQ@QEQEEPQ@QESýV*(èbâ±Í/4~S\›m*v'ÙZ‰8ÇÏ]iõV´§ú¸2•-ö’™&¹-–,Û"u¸Z[Ö¢ŠA#Ü J%sÜp»G2`–ÂJŠ9œoZiÔÛÒ• ¥óŽÙîÀÇâ§=N!Å ))Ò5wŒóî¢IRp£ oÑÓ¥ˆVûŸgÏB"HÀŒo€urõ–¼»¨ü÷5m±;RÈ‹/²t­=H*BŽú²I¬|õ®[Ed%æÔœ‚Çbk«pAÞZÖ´8Á;ŽüÓß:Zâ»kŠ;IÎüö¦«ƒE§œ )9Æ9RîeÇo¶öÛÆµHoåCi’î²¼ÅþãYæ‘î­E‘žCÝKÜFù­*Oj¼ÒÔ'(Ç =Õ©iòêY§&µ-z퀜##âŠÁÄéxlÇ…) Øf°R58“]: HÖ6¼+\†ÇYñE)ZºÖ÷iU‘ÖÆ÷ѱ¢RÉÊ·¾ŽÉ¤ìð;ªynˆßScÈIl6¦·ÛÂiÝÔýŽ‘Io)5È«lnR O!î¤2[<±NáRY Œïʦ·8õCg8¨ýÑå4øl$ä½ÙWžÿEJBt®¢|B3)¾òŽHîó©-Î?4tŒï¤8ÃÈïl/Ë$~*ר¢S­Z––ʉ=ù#5²3I…”…il`Œüæ˜îŽICÉ”ÚÁp,öG5 Çã®ÊÅqܼz!0Õ9èýtWIH JHù÷ãÙ\÷õBÛæ˜·­m:âDeò mJ8w`êùÆÄW^ðâ¢Ø:>µC>h€ÚÐ¥:”¤w;d©_-rÏJ‘Å}6°‡ä¶ôvW­=V4¤•v¹“«>8ÎÕžÜÜ‹¢ì®]ü!Ûíò}%Ä4†Ún:23•d>aJ¯qÔýë ¥iXÔÜç5D?HôQ%>‘„¨œ)8N2<|;½´¥^ŒÛŽ*;Ê%¡¡m,aH=Ù÷>Ú„Ÿ}‘²·õC H4ж ÁR‡Ÿ*u”ésQ# @ê”1RÃC\¦µ¶SžêgsZTB¶ñ© ©Þ›çÇÔ5¤n9ùоÅrCA*ÍxZNElPî¬02jÒ­¾ì§n>@QŽóOÑg°âÜd!ĸÚI $a@xŒmPxhPŽ—?lIùiÁ‰Î$hR¶ïó¨¸#¹‹ Ñ}~"N‡Y?¥Œ¤ý˜Yí\WÓ­E&¹©A“ñ5hÁÈó5“uôkl‡ÊÚŠG‰Æß-:Ú–#Ba„¨Ž©´¤ï°EW“.«s®IèÆKåªãiXŸMµW4«Ôi¥ÂE[o­ÉŠ Þ#"tR1•Ú}½þÚf¾p%0©Ü2ø×3Jí§Èg[O¶™Lè½âWº”{«B”®t¶\w£:¶d4¶œO4¬`ŠH +Z³Ø¡Ýnnmj,(gºE$ÎdÿX>z^Æ#ÄR&€D¶–¢ “ë¨IhËé;Î#ê€Ï!^`xVæœsCn¡jð Ö‘ý;_Ó—Øzz›†<+ÐáZ˜ÿéÚþ˜¬½*?úv¿¦( ÛxQÙÏ!Xu­uEÞ±=X8*ÎÙðÍaéQt5ý!\°±¿ ò£o*Ñéqt5ý!Y¶óN“Õ­+ÀÉÒsâiac>Éð¯p;é9—ï LP&EýÐ×ô…6¤H_/ˆŸUë˜Ó§ÇjL&Åô…}¼hêÛ™¯LȪp!³€O?óçD5¬%<¬sKƒÿÇMi!›ÎÁÆ€dg?Š–ÙeÃLÄ„HJ”°æF7É ñSD¹±¢-2ל«r<{ªËRÒïgÀW‡ØR4Ü`­°´Jl¥C ŽñG±úa ªÂÎÍbB|©!¸ÁûÂ}Ƽrá<wãi3ª-ŠŽšÄâ‘›”/ôãÜkt„?ë¿Ý5Ó–xW‡ŒÝ!¥?Ñ4‚éÄ €T—]ì•awzÈ®7•]Œ‘oô@ÜUXg—ÛB•éËÆFÿ;ˆäV”JB?j>z‚t5¥îšâA)TåqüDTÜGé(¦"­Fª4l/´‡”àm+Ïr’+[®ë^¤6ÚNs²EdX"²CZNBª*En¤™à+Z”·#¦”6ÒTžÛiW­9¬˜dñNÛÐ2Bò×ÒärÒ|ÄÅ`ÿÕèÒ†a·«ÈS„F5«â£~Yî§xP޾ÆêÎqUʽŽFŒ¤ì†˜V”©`†Û ÚŠ“&bØCcýQXÆeÖΜ‚õ¢ûz¶Xà™×{”8’BK²KiÉä2O:ÍRnoSv’¦›`õž3Š$ $ø^"ÌÀøØWú¢“pÿpõöçÚnð¦DC¥•<Ó  ,c²OŽãÞ)j/v…—4\¢«w>ÌžÈñ;Ô,Í6zm°ÐÙ„ß‘Z™ ««Ô<¬eñ†9B^»ÁJ–­ zrU¶ÜüǾ½MÖÚã!Á.:Ûp °AÕŒx{ÅGS’ŒSÐÓ*Ëk–ò\RJŸÚ€)L{l³¥ ¼øZÞ¼Ùâ¸[ztf׫F Àß)÷­>ú‹_úOà»CèiëÃ.-Jõ^œ€A8åÌSR9m­‰jÌVœ(\D„ãž‘Š×$Âj.¢–’ñETWΟ¸j4© ÄaùA° •é 1äp=ôÝwéË…åÚd-ò5 °éûò°6Á礓¾ÛuÆŸ3–›,käÈ-FÓ¡­ds®]ée¡ ˆ\q½<‚V‚‡2RsáÝ¿ª¬I\9t–È9²ØÖ•Ö+$ÏÒqŽcjƒtÌŕٌ\­Wûr”%t¤v“˘=ÿЬŠIhJ’q•™X¾µcQp«ny¤Ž=B뺫†¾¥¡4Xå.S}b„€Á*#¨YÕžCsßzîZÛGÍ*–áEU¤BŠ(  (¢€(¢Š¢Š(Š(  (¢€¬>©ä)}ÊB¥J’ÐÀä×-Ka¦ÙCެ6ÈOžÇ*꿪@$ôfè_ÅôÆ3êÕ\•Ä1ÞžÁe …¨…¶ |Nã客¹î:éÈPo9yna~N>JÚäPYpuÁX÷óïÆÕ…¥ ·;./S­6•ŽÖå@çÝJVÈ”—Ô—JKIBÀ)ÆÚ´éîñùË&ä^ã6´”6êÜJˆÛ’s§ÃO´û*?zĨ⠕µ„=62\ e * Y ±;ηñ¹¶È°§ÛÞ\I-½‚°FIä}¤c*µº#rÌx/ë’êð¸]ÞZœSù8 Ò”`rÀN£ã‘*ê],ÅÔg’êËR˜›Â|FËeÙÙ+@ê)çg5³„cJ…Å–¥HŒã?žQú+e#ßtÖkÂ[qЂRPâu+?¶'Ÿ~1ÝI pêŠÞôÇ[×–z°¤3ƒššÅ;jŠ]3Å:… O†kRˆÉÁò¥Ó¬M9‚ä‰.ã`B‡ÍLÜJ‰Vût‰M?»h' Ç,wUQwbj7vB“G5â¼*¯W\¢]›eç[qµ7•¥Hò|1V· ²Ž!±¦á ‡4¤©·¸ÎÊõ毩JTâ¤öd¥FJR^¨”ì zÈídÒ F£¼ôyç6âP¡èêPsÝ9¬#q¬¼–T䄸¥iJUÐIðøµ[½ŠÐæ­Î{óZ”q[NÄÖ•ù×ÓCÛÒt$…f·¬Ö)NjW#mL_' ­$éÁ­«´¡{‘\ؘ£8¤Ò€êÏu8¸;'Ý'`s]NçF¥|sQ«¼EÉ}%9ì8êŽÞޤêYåL’ÜZbÏ ÈV¥h8å’üUaB†Âe2•d#SiJsæÀÓrá4¸î8¢â’®¯Ë´?—ÚpäVðV¬c<ˆßæ¤ÚÇÁí‡[*Q[©>X ÿåùk’!Nze¿Is¢¸‘%ML.¶ÛHB~*R3ñ»»±Žò}SýÆTÎ6~JÈP‹KÔ{Ö¢ó(Ô›ê{Ðm¼1kd)Mˆj’â‰ì—”àÏñ‡…7ô "Ýv¸„¥--j*ÏÅN¢yÛ í%hKJgEpÓ±Ãl´‘©Å©KÇ!ÚR°Iõ Ýp†Úã%jm×µ,'I9^XÊŠCºO…h†‡!…i 씩=œçRpIÉ?VØÚ§¯©™ Ç !mž¬jBÈ$wÌyÖÞ2¹ÈlCçÛœdjNVŸ²¾ƒòS+iÈÉÈæ:›]Ê ÊSÈmQùÍ!H:’9ñí©BW$ÐÀ§Á$)<Žø­J[jä}ô°ÂPmN Ì!u¤•hJ¹é#®LƒˆÛ>?VzÄŽÉù 7J8޵x$Óã¨$¤œƒLWVÜi IBˆûjøJåN660Jb´Ùä+zl¤]ÕŠö¦ˆ´ »<®®4|篒ÚHòYùiú<ü`ŽK=mòc“M8éõì‘ò)T­JÇ#S’ºG diÁCŸËNpî/0ê]fB›XäPp}^ªµ-m÷špqÛUT©’L±^›f¿Goñ\ûY-' IóÇ⨯p,ø-–Õ¦ã îÙÊ’<Àçì¤ñg$ʱãŠyµ^¤Â^¸’ dóÈ>±ßU§:oº%ËrØR^(#lAî¤×¶†Ô§–l+*QcsW î ÞZŒìà!Üh,¾Ò@N|új¶é‡§ðý±ÉNh‘çCÍ«e$äp Z± K£¤ã4D¤¦Ó!¢Ûf ”Fœ¥~¿Ú׬BJv`¨ À ÎÜöÓžãP[õ¢’ŸGXQK|Ôš7³ SR­¥njB€xàŠÈ§,Ù®z­'~eš†mJe/ ¤P…r*QN}â±B-*(»CV¼cì€söUp÷F)!»sÈYûb¤ŸÅ[Àæ«[ú°u¦§ÛO©ÍtüKÅ$¤]ài ßS˜ óðõÖÆ›³:2ÝêÞ¡ôãèªá\`åÕ)…k¶°¢âƒŠ `c3ï¤ñ¸Î3hO¦[Ôµ%YËdëÞ«„çìÉÊ ¤Ùh˜öÍaº@Óã×§­Øp^(D{µ¸¬œéô¤äŒwUlž5³R»lÀ GÓ^³ÆVôâß(ƒŒ6ßÓRœç5•³‘Š‹½ŸÄµl„A A*NÊÃéØÓÝ»‡,7#¡Üaôëm”úBqœ §»cœ“ÌUE/8vT„bl£²0Gq;U«ÀR‡hŒä˜‘íð’„°Óz’z×BÊõóÆ¯Š<{#¨¯ˆ©¬[F„$ÝÉT~²[5ˆÒ%MCŠ,¨QÀ[œli–÷Ãíõ…Ø­¡¶šÊÁô`ÊðÎBvÀ ò¨ÿñÇÁÒ SÏÑZŽQ“Ýã°ÍB¯œC2ïèx8-0XI)N¤åDc¿8ù{k=:Õ¯™—KObϱpÙa"l–ÔW )²U°Û$œcÃóò¨mîÑrjL?C·Ìu¶¥>¤2¥€S¤ç·;Š×ÑâèõÂ-¦Dµ**‹Î/´¼õDìqž`gÆ•:üØ–™\É’ûhkBŸ)NW§`”àwxwÔåZ£m3‘£f›ÐÔËü?·UɈë+=‘ãKâ3f”’¦nÖâ5(—†ÃΫ>'¸Ì‚ó.úo +  ì6òÒ}´ÔÏ©–œJ­Ívö8YÛp{ýBµ*õm¡–Tcw{—rlöÝÁ»ÛG<º~Šh‚ÒdßL7ßeʓ֬Jpœ ߺª¥qRBÐmHÂÈÏÙy`røµ*¹.q#4­‹„) # c¸ã–ߊª©R£i·±:t¢“KæX‚ÉnQÂ.FØJ–wþa&Ìà *+d¤g$oíM.ï*‚U(¥yQ Øü•ë|Cko¬aä%$¬YíóÕ½½oíù=?oÄ·‘kB“© êNq‘¸¦Ž áy—Ç¢ÚÒ•¥zóߌrU[Gâ¸L„€‰¨ß*Ò¡¾ãøÞ¿}mgŠ §T™¨Â³¹V~CQZ²VdéÒ…9]oâuoCª¸zs$„”ÎXÆˆŠœ¢Ožj˜ètGÁíI^§:Åä‚„êlÜ8ÀüUx­)ÝjxU »I`òOÚçÙY%Ä“º~J‡¦$| =g±F¼\vûœt®~šY8“d-%#r<«knè;+Þ3P¦ÚH£:3ÌuŠúiSM¤‡Þ÷Šúj.)œÔš5%XÆ¿g*q‡s 6P†ÒF µš‚03ÿ^ïõŠúj?ÒÝâE‹£éÒbNy‰¯­¨±TV­n,¤çb¬ç»ªjB$é)ÊJ1{—${±XP)'J‚O#àk›þ¬ ón7޵©Jn#aÇut­jǰà'ëôa"ûhã{T„^„·e¡¶;IyC^±Þ1“åÏcRΗ8Éž,¸.,ûvöÉЕ¼µk#’ô“¥'Ô=ë3”Rº=š8´ë+êŠêáw™ŽÌÇ„u¸ i Â9Èï;Ss7I¨I,Iu!C ÂÈÎ*gÑý®Ír¾A³]b}.@o¬me*N­’|þUk?Ч –“é`ç!AíÅ!$–¥˜ÉF55G7»>F¤’ãšÁÎsòÒ¸·û¶„6&JK,¯[A+!);n<û#ÝWUÏ¡K8?b›($ïÚ)?Š’ž„­å)P¹º;¾ õ÷TóÆÆURÊ’Mòå!²—®‘­K ZÎ5(UíÒ=Ô…ÇÔ´)ä•C}êæGApŸV‘yZSµg8óç[™úŸã´­ <çíIoOã¨æS¹ãÔ¤\/£^29ŒÒ‡TN01žX«>ÿÐü›qÕnÉRŽ.CÏfÕ·´ShèÒàéL‡c+;—šRºÏV+ŽE‘wÙRÃAN+}ñMòg+N7Zy€@«wF·&hnTu°!ÂRUŸŠAîÇ˶;èüË_JséñƒºFpÖÙñÆ}µµÍ“Q+EJZБ՜žâ(CêZ´i#$¨dßVSÊmHŠf2æFËLRÇyQVøâÍà_G Õ% #9:FUœø Ô³G‘Û>C·Ô´ÛIéâĦ݉ÀØ}uÜÕÇ?SÅ…62$,€ð( ÆaÌ·•v5l ï¹&ž¡EUÄBŠ(  (¢€(¢Š¢Š(Š(  (¢€­>©S§¢÷ÉØ Lçß\©ÇäCŽêt”’£¸ lqë-u_Õ(è½ôœ`ËdúÍrûAzDt)::­a#¸î>|WJ繊–ÚCÃ$¥Ä2â†ú²£øéöÍ!ç”ú¶ÝJtv@öS5®B¾¯JT´“¶puâ§]Iê/ì´ë}h~1OÅJŽ“œ«mr£´nA ]!pý¶ãÀ(mpÚ3™g¯ÊNç»ÇË~TÏп _SnO"é:%–Oo­iJ°Ó¤(¶V¸7Ïu…Ò3¾}e(ˆü£-„!†Š”•%dŒÛíê­äk_;|àã.Ûõý†Þœý8 § à(w Ë,u8EÒ“µÍ”°Ó—y#§ÛKf*K(È嬣I_ÇvØÚµ(x;¹W¬\ä¹g¶H‘jœô©,%ou!£¡Xûl­<ùŒgÙM+¿ISZl3›s–™ÇhçË.’j¸Êêån,\òsáPn”åz=„G R\ ö Ïâ÷Ô¥éå£[V0N¹ãè¥UâÛ?q<¶ú¥Zâ¦::³%Õ¨w$uCÀ ¶œ¢¥vË(¤¦œ¶(N%¬º< HÐB<¹ü¹«Ÿ¡™òX´õ Õ€”(“¶'ç¨Âú$šÃèz}þ`¯'Sgç¾T<)þ+QìÐŒeñ=…ƈҴ*6½[ïÞ½ F*Œà¡!’ÎÒ»‘?™(:T¶ØÁQ$©[“IXe¶p”¥Jœ`Õi>MÕ‘ð„70wmIHÿ{4®à¶ÂY‹r¹!„ % µ¤å†eqy3%¡BêªOÎzXž-[Ö§N9Ó7 °Ýå©¿>áÖ¥°¦”$‘¾û $|•½Þ€ö[ÕgÃá9ä׊ÏG ·ËÈ»„©†žJ›ŠÏ-«XR;©‘ζºd:s…ÈZ‰õ’sNpÛ‰ ‹–Øi? §V“-kʲyVhp)Y©;ŠÜ["$àœí]{oxåÝ dR÷ÉÊ’½ê¨GBlh Ë„T~ar‡<9§úJÿ ’¹³Æ£– ìµKÜŽ{ÌÔäÈ¥¡åÖ›a)*R 9óØ YKŠl¶t¥+P!Cläsï¤ „¡%k9ÅŽymZ`H“O°èûxP'–¢0®f¹Ì¶2ú¨du÷Û:‘n**QøÚ–@~]½~ªrèèDzôX™2 ¡Å8¥(øêÑŸ÷j%ÓmÂ×sfÃÔjôÖ`èuÕ•  ;óÖsßq½N8)¾ ¶›’¶—”‡00HÇÁ?ëê²A©æ¢Çy,(FK+Ii§Ó§9GwÉR¥ËiM«©ZV8sOÑPŽRd¦+åD•)²´ìFJ ÆÜñR‡Š—uµ± ‚œà{«[¦o-Dö»cÆ›ç-!“±¥î8„ <Í3JÞɪã+èMÇ™áI-Œì1Ê’Ie'Kˆ Ù©rԎѹ<©²Tæ’\?Åå﫱7°’DgúõÚ¯éúi®iiRŽðÐV¼®DO:W&kΤ„'Ë馉\¦À$*'äޤªô:©>g³ è%m´xƒœSsˆP "•¸Ú¿kH%G^åµ)Ã58Ö\ȺCcEï†%/ãum¶ß÷”~qJý'|(`ÓlLp•er7þ( ÿË[\uÒwÁõZ»TWÙ‹ºÔžFxÜs¦·ï0 i\™m•]wµ‰ÎÉ‹ï7·­‘ãIBqÔ´€âô§'Ä÷ ¨±ñƒÒ&1M½muÏRëo ¨söyÔfù{RŒÌ˜­ú2”KåÖŠÓÈ>uí²ãnväß Äm)ŠÉq§V5¤r5tTnÑ ²L¶/–Ú‹yÊw|yƒU¢®P¥Í–„ÍR$ÉÒÙ#) ljCÃŽ­O0]y§V¹HVZ9H’©•8(èuÜôï¶8¬”%Q[8HÀæ¡øª¿Ž…KuŠÊÓ€ å:²ºz\OÃÑýõÕo‰a+Ò4oŽý«·7á5¥ëèdž¸o BbTkuÂí‚d ëЉӤÀÏ¥îáûwÈ“É+èudj:R  ÁÜ Öî á[ó£{4©P™Aû;'BÔRµ’>7!Ï4‹ŽíWö¸mödqRìê-/£¶ÞTHV nI8Ï:›“KS "¥Zêv×fT׆ÓÏÃÒc6†œv…Å! ¨Htdøì7î›ÔqzòIQÎ{ÏuIo·Ÿ‡j¶0Ró°c,¹ êÖâ–1¹({ëÇ8~cvvž“öY!–ˉ'˜ÎÙ$ÏpÜê§VO^¦–¨³z/ྠ½pLƒöQ&QÔ‰.8ã‰%aG Æ1ŽUé×…,–h€­mFzCëBºµ(•#r{ëí–HV»"®v›Ò̂IJ”¸´ «lœ{ˆTçlºL™h¹Í-oÉy¤2;N ÀÛdƒþs\©ˆŒV†z²©Ú9Yt vÞ]ÖXí´ÌIluŽ%e]rrU©C¸€0qË<ß­9¿ À·ºê’´õnð ù‘œùRÎR»:§RÞcQï =|þJCgPGÃuC nCkÈØ9îU—¶r“Lõ]Ú"î2ŽêxŠcn)ZJ²@PçÈøý4ÑA›{8‘©hJ0kœ“Ÿ`Ú”t˜Ò"ñ£©%.)+#ÈÕšgâ5†â/©l)@çbT>/ž7Àî¤e}:†¬¯Ð¶z;ƒÃ0l1S*Öû\D¢§X–¼€­i9IÁÇèyÀ#Äó¨¯Ú%Á°@¼[ä•(4€‚TÚžÚ…vvÜm¨t{Ç3¸«­‘n˜a캤–_a^2’vÀÏ/f¶ñO®†¥ÁRËl´èØJÔŒ“`z{óV88ܦ2¿¼ß®ó¤[$Å’CŽD V@ÏeJ)Qø‘í¨lÉM<îK8=þu%’ûÒ.o¶ñ TÐú8øÊZ~R*è!Ò:ºÌô¼{(Ƕ§7gOÜӅ§Ûe·O5gÔ C´jĸ4FÍ-[ŸDN;=ÝŸñ®Ot!³+çfHp’·¢|MnGUðxyÇë …!#Ãþ:DyÒïG&"ug h¹í'oÅV2(FÕ ŒûjAÑý¡›ßZíRz—%ÀRHRR Šv î3³QÑñÇ®§mÒ]§vCªßù%Ô•›*ªÜ`Úèt—Ffßo— AˆÌKSm6 :Rûò©3KR1“¿ÜÔG†ŸHEÀhyDÌYì5«¸xÓÓ/¼~,i'Ö”#ç«[Íê%|·²Ü–RÄ(á­µ¸ÙB3¾ã<óê§÷”öµ(®J0y‚’}U¦BXQ:Híu­‚O®¤™tQŒ¦×õµoüu(|´–`BЧb‡:r•”ŸXÁù;¸ÒR¼õi–@¤²{@ ¡Jãjárc"4«-ÉBVà$e'Úœ oUšÚ™BLxŒ4âwÕèé*÷‘šZý¸¿­ÐNBÎ@íI ‘åH—*ã …¹-´KBFi‘‚°O~BŽ}¸®«ò&™#èÉ®«¤›p_w—?Ð®Š®~èÒB_ãŽR˜ôwKîÞ JG£»á]^Ž÷Op¢Š+I¢Š(Š(  (¢€(¢Š¢Š(Š( *ÿª|㢉$ ¬ Lå ã=®Y®X‘ÖªæÈi 4°êTæNØßqÕT² ¼öÓïW)O[I–¥ŽÂ´-HøÙçþ}t+–æ 9)ËtÁ@P Pj•ä“ãT²ÙŨáž#‚ôˆO<Ê{E^ठüði¾É)¸î‘•%çÐGVJwù£ˆ£Ã~"â‡^–õ ä®×,užŒâ'²o¶Þ_)U¶é0ØZ‘&>]-¼¥'ARR>.óžìã|Wœ/hbÇ&LŽ.‘5§cé(,Áuå/;¥aA!$däør­S·CáéW·&2ÓÉ|GJ5»§J“ÖX9øâ­©\shšÊWÕ¾âÒ¢µ¡ìƒÝ’qå^f/N¥DÚØÕK8AÅs ,ñ­¥–Qrf+Ku+tÎ!¥a$a[à$G#ÌSõÕëÖŽŽ!µÈ“%:R–¥´TAæ®y¾’»ÄW;‚Ó )d¸²G£µ•ždäóÝà*;y·Ü¤ß[}‡Ð#¶€—Ì¥eÒNIPP ÷žXîÉ­}–+æLøvÆÌ(C:]h ‚€s'¼æ½¹À‰„êóK`TYÞŒ¦“!Û%C½I´ÇרÈõŠÞ#ðšm”ʢÆcÌ,døá+@÷ ÍŒ‚•'+\•7Þ<â[<)V‰,·”¹ ©CqU¦[ÆÈHCÕj®$&c¼û®q+ 4‚²¶ä¼øÀç±R…Ww\ ¥ÅÛˆŠH92?ó$yןÃpd›§,ËÞ{˜>)K  «}ˆôuaÜgé RBT À<Í2Ün<<ʠ˺(Ž]tvÇ÷UR¨<(])pÝÂÛZr’ˆ¸È#Íf¾®„eJ†Jˆð±Õ)ÖŪԟOÀ’p4F…2ï%Å¢+a,e¶Ô²¥¨ç’A8'—*s{‰l€eRÖ€5Çu8÷¦¸6¶Ýh6×})anu…e)Ûc=ÛûÍ;½ÃviG¬D·5Àr0P÷…~*ò°Ðì¢Ôºš¸ž!bñ¤uDv,¸Ó¡‰1K̨-<"vˆó§Ž&·Ì´EQÉì«*ФóÆR¢»<ꛪPrí¾êÞ|`:¬E&¶Á¦2QhzÉQÞ—0Œ$§ˆm ½/Ñüßim÷À§{}úÅ%Hj5æÚóŠ!)Cr¥{€9®Nä …ÒF%QÈ4µðtœŠF°SP‰!¶HíäTbruU«Qÿ?-JdѨ•Ñ.ý™h¥N¯>Xé9l@PT©µc¼ä¦²»«6ç20á I'š±b>„­éÖ×Y’9aB’ßÊ™i-’IJ@õŠ®ÁãY vîÚDt¤>.ê8>üûE^èk†\ŽÄŠÜt]¥a?6jâ7b©æR¦P㎆ÜFÄ`'™ä¡Våêpf,XázTô¿bAÇʾµµ¡UG{ž[husXXP$÷a@Åì©©-8 ä?eQÒ¸¸@–¶œ+ZÑÚZ›ƒ{ör<ÁËÕR”;Ärb5)ö•ä…¶ôr'Ô}ã¸Öôä–d‹i%{6L¼Çme*'Gq$zé—E9 !„ú‰É5Z uÀ¯'I¾Õ!ô´UGœäyVí;5c_f­u¨ï$ºèËŠ*û£H‚uŠ^ðÁÁÁ:i3€ ö±ì©)µ„`ÐßßI÷T²@ø­|çü)s˜WÛR=?ž)?j‘ËÖM=˜¹ò¾’:•g‘¥‹ÔÈR)®õQÞpí¡µ+Ü3]JîÁŒö–ö––´ç­RÏÝ(ŸÇXHeH9©>ª_odµkˆÞ7Kú"…ùйɩ2V—ŒïŸukV0}Æœe¶Þ5$é&8²”¨{#;oŸU[tVÕˆÝÑÉ’gฅ¡ƒöD¶°FÁA[óµ{µ†ë}A%*JR¼ äSj·¾ã®¼†ÝurŠœ:SÞ²;Iùò§D¦L;KIg2^m s‚¬ê<ñÏVÙG,R ØØ•¥(Hm÷êÝ*OZµrçÊ¥ÿW63' k“Èö†OËLfCmK€ÁS«ÂT…ç'ÇIîÞŸ!…$¼¦ë*ÓŒ¼j¹²V¸ËÓ¤¤¯ˆãô”ª"2AÏÛ®¡6D!_¤¤`°q‘á½K®vWïm}b‘®KhV2O%”ç¿Çº´Ã±± ‰.-ع[}YP^£“¶àã^}V•͘U•(–WFwÐú1µ;%ä2ÓMºV㇠OÙWQ~7≼Im“Ç)µ¡IK’ÂK¸PÀ@=ÜŽÙ8çŠ" ¡l‹ éŠÌpT†2z´ä쬾I5ªD„§°Ž­(A!¾ÒFØîï¨O}"ŽPÀF3s›æ=Ä´F‹u³¾ê’^Dt¥ðÐ*ëHÂ@;gHmÏ=éǤ÷f¨ÃvK¬¯b”Jt7ÛîÎú˜ìVnÐÌ™ u¶¿l t¤‘ßâk¿\\Ÿ$ ©Kl¶„eÄö@HÈçâMdYœ®ÏK»e°µ÷L›Hý«®,Ë´ôVÛ€ŽžN6ã±ÙزE3¡n²…2¢Þ Ž@ÒqæsÜ+ÆW-–ÃM®7Vµ$()äg™Æ7®doFYÛBÊï Ii©³\y´º…%`$Œï¥X>úImiçï¸Ì¸û®+«Ci$ç`<ëZí³-RPì÷£¶—J””‡Ð¢F {³¶çÚ*uÑM÷†øjsÓîÑœ•)ÌzÍjPH:¶ ”ƒ¿=Ád³væqÕ»ø¾ã|~à«RÃ*t­j´¥04€¹Æ9’*ÇQ:¨6ôòzÒ¥uo -Pcl9gÄ÷ÕýÆ7x×® ´ñšè¦œye=lE«ìyÉ-:”‘¸_#Ëe`óÝö÷|nÔãr%Æ*`þ„T´äì0¡€=¦§E6ü *UÒÝE½[]gŽû­¸‡T–T‘M81‚sç·…0ð¬vÚâD°µ¥Âá[A:´…©AIJA=ç ©ë£þ)u›¸yëdGÝŽÑXp´@ät`€3«Ô¾ôÛª¥1wJlõŒ6–Õ”¯P=²9l~0òØW¹ZNç!$²¡’âópÜeöá2KrÔâV¢²½´yã¸÷wzê7Ä1ú›ì¦Æ1¬©8 îÅXa>ãJRÙ Ht8òSÍoikIÐNNܵc‰bãk4ò¤\KM%M€Ÿ¹Û“ÏÔ1JsBµ6¯tBÝN"­‘Ô®‰Cäå"<»YªêL1ÃOHŽãm½ž¬¨cV YÍ`t<ˆî­)RãÐ;ÉÏ/ÔçÈήT*'z—]!%õhBR} c-x;T²ô³ðhç /ò6M*ÞêÅ´mfÙJrððÈ©—E®õ]"[ŸÆBPæÙÿå¨TE à ”ôv´£#-:´¥·1“ñHüujÜÍ;dw:;„´H-âV ¥)XØSÚkVKîäy⣜’»{Ê% uç™ÇÚ¦¤m4žZýÕÉËSÇ’Y…(q¤ƒ‚¥ƒâ¼WˆÆvø…Äk&ƒ<ŠIóÅo+@ÀÆ@ñÇÑQΈä5´d-f”¡ ”‚RœúÍ`JÙ N{¾Ûç­­°â±©Jõgä®g;Ù±0—ønâ9W£-@÷ä þ*æû§fYÃ:T¯ôŠïî {+¨×*ŒëJÇÙSñFùç\íÄVïÏoEª{$ /Å<ǯލ¨Ü®—3ßà•#FMË“ÿ Äâ\U¸©-’„­!JÆÉRŽyøá!§ž7²=i™o¤Ä¸ÁfK AHN ñU‘îñ©F¼$íÿ8‚C2TpÒÖ b –Aö`gÌÒ^‘íKáž²Zg:}=cî-)zAÎøìæsUÔnKS~’»×[½=†þƒ®Rxe|GÄìÂ3½ Þ”•èÇXó{ç¼’}•rt?<7Àð£¶òdÎ’ã’œYVIå¶GÈ*ƒàë³ÖK»ÍHmInK ‰%¥§JÆÄƒà •{*÷èÖÕ­™ÔÒÓ©$<Áåå˲J²ŒÕjõ¿ÌÇÄ›«9T{;g¤Nu÷íIÒR•|Q+YR²ué#¿’”Œ!)>ÚµžEÉIRµ%8'×JÉPÝ+';{HÚÁ! dƒòÒÆÔÒ[Ô°üŽG»Æ¢JÂg”«´=C>U¢Lvº¢°Î¥yäf·J„+ì~ß–›'K%²€6pücÝ]%ÄO©¢JBUƒ•d~*G!Ç@[iY*Ô¬`wžF¶¬þJÐÞ”  ¥)Vçc>b»rÛXÅÄ$ IÝYé4€iJN5n7$§Ú:T@Ï2i;6JŽ1«ããC¢ÎÙ ñí…zYJŒ‡uõcŸGwʺ¨~N:@±¤ŸHsp1ÿ»»WÅzxOFF[…QZˆ…Q@QEQEEPQ@QE[}Që ôjµžBkÞ®P¹ÇkìujQÁß9çþ|+ª¾©´…ôVúJŠA–ÀÈîíW+ÌCäÉ”‘HB1Ë*9¢!-Æþ Œ…2õ+jg#çç÷Ó¥Æ%64µ)¥! ¯’OÈkh5id”žÚ–áØìs€<<=Ôçhl.;(’¢ÚòJ¶ÎP3øýÕìÄP›„­þgO¤4žµÙ*P äà}ƬÞ‰ñÁß .²:»Ç¢:ÃED‘€¥à’u|1ê¶Ô¤D*P¥êÀäFàRþâ~ á«@²Æ‹Q“rqÆÊI©ç; üÕ‰Éh"Ñn‹l cÏ·nŒÛjZ4$’Rƒ‚Q¹ï!&IeíÐV¥;ó¥–&f"<†®$*bRœ ä)*Ý*]Ãî|«)MåÔ òVMdE£Dä)µ’*-ÄX’øQN•éøÃ¿×S™­%@í½E¯ ”Ë?µ9¬Vyp­øa×íƒÖ§›?bxcÝT]ò3Ðn²á¸âRò7æØû«¥–ÎܪŠéf(‹ÆrH6ÛŸ&Ÿ&¥ôK剕'Í|ˆq*v‚‘ pÊ®N×pͽÒrR×VÕ:Snœ+ftdé_ ”çô9 Õ„ŸÇ_iŒàyt™fÚ® ¤ J@õÓä[å¾6 —¨ø ­ËŽilœ“Rþ¶°‰Æå=À¤ÆN²¥|VûóæF xµ ’¹®-ìI/7#¡¦¥¶®±Äõ½Q;¶“²Að<Ϻ£’îê¡ï'5œÙ+Ÿ5ù® ë+ ?jžIÁŠlŸñ²Ú¹N ˜”™ãË€§lûT[`À€—„”Äc®O' Pöé)=”Òø[R’²96+uj)Å$piVü©4Üd ­<2 œSÂF³‚qGÔHØ“Q{?Ì öºÕû¿Î*Æô"i**eY)!IõOÏMå!õ¤¼÷P’®Û¤ã@ÉÉöòSÒ a扇Ißl$g”TwŒÒ…pÜå¶±ÚBðIÁÏxÏÇRŠÔ-ʪ‡W9†Üw¬BÔœòËʯKòrç•<ØÔ`â›t,㻞ãÚ¨( ¦Ky!BºT[š‘vêC²AZÒ7Æ3ŒúþZÑ-®FeyÄöÛÕ«‰¢¹xˆìV¦´]†úÀ }­Ð#l¹ï½X½qM² 6x~D×e¿)ÍM„£fTNq’HÀÔUÈm·3I:RâeKc†Ø˜¤-†â8Ò¤…h’RæS_Æ8¦~¼[,W¦¦¦Ð™ˆÂ’³N€ý¡ ÛŽõ«<ñr”{+[Ÿ‰íC„ÂX‹ŒÓå—f½¾Òäℵ;@4\þQG$Ü@x¤ÕQ·4¹Åw÷dåØmÌ,´ÙQÒ46ðÎܪҀô^ „©,@›Âqž§XÏpÏ/^Þº‡µÂŒÙ5·ô†¹ €u‚®cn|†ªã–q³íþJno¶•©%C8¸ã%©ÔâÄR¬zëJJrA‚)\–JÎÄ„z÷4œÇ #H ¾/¹bV n‰% eZt¨ãr<27¦‹¤ÞÝ  s8ÉXæ7#\u§|vF纓ÝKiÔ• ³¸¤+5¸•=HÜ4N4Ü •!´«+* *9Ûãošíí)÷Üa'Iq²AåœVo2•óNˆ­–&J.‰:ò6úÅYÚ)22‹Qb9\&æ²®¹«` uj8Ç#M®pÁJPHlàîJˆÏ³«)Z±ñu òçZ´ 4jß9¹dÏ"8ʱæWÍðÝß)oZÀNœ…øóÛ´Ìá)kyO-L‘¹'$gÌùš²ÖÛ¯Û`œe`óM–¹ãÄ€>zg…¾]ZåbÝŽDuP–Þ8ûCG—"i:­´½hm|ð?Æ­d2ÊZÆ„­GšŠFOº…Åg^ „ƒë9÷×;(Þ嫉TJÍ$ˆÅc+B² Û•xåºJ‚\êP8!@íçš¶Ó 겜sï¡è­- eµ$’SŸ’¹Ù¢kˆË¡Vt©D8órTUN|b¢Nä“ßϾŸí*ì§-óÀT7RãQÉA¼!;í·~ø©— ¶®×R’6ÎÕä¸JTE©¶{`d½ˆùBTãbØq6˜å„¥[¸NUâ×"$ù]JåÅmà°Û'J%'e€ ß»=â«Û‡¦ãùÑ™å´,e€â€ IY$Gm!@øc—x«;¢«ã2ÍÆÈí¶\eGVtêÀ ÓàGgUžY§¶àß‚$,²¦áuaÄâIä‘«qœl–¥ZžféÂé:ƒdn¢NF@ïð5v2ር±ÖKplHlƒì$ ½´„tzÒmh}œƒ×€<7ýµ}8J*ËcÆÅñ/(•ÚIû ¶íÐïñx³-“­ Žû"µëÎØØ'˜ß]3ñFÆØñØ ù*ñár¦­$(à¸êœ£øª-Áj¶ÛxZ X ¥4•­X§‰>9ÛþTúÄ„%)Òœ#žUçÏš¼k7²kâxõª¹§CæA9À=ûVC8ì©*>tÛò2¡Öîw¥)x(v€>C\ÌÉ RÖ@Ør]gŒöR“ý,ƒòF—Q£â€³ZoPÉùê¸ÎÇH%ÖÒóD­ ú~ØT| m´QiÅ…v”°RG°dîåVkñÂÁN<©ž}©gWí…i…[èÎEºwi'â“!‹Q‘Ë×ZÖ¦öÖÊJ€åƒç¿«4ãqµJŒI-—ûdŒÓ;»¾‘¿díîüu¥5$gÕ C·ºAjDˆªµ9OËZ˜´Krâ§ q¾N¬°Rꊩ$oœ3ßH”µñ©žÍÈ÷`à[E(uÔä¥X =Àv·Vä÷«ê¹BÛíd‰[–~(kRܳª^6*d‡ö œ{© aömc-—4 ¡Ä”‘·,pç;Œ<—H`wsöÔÚÝÄ­Hk©„8… ) í$ƨ¨¦¹B¢eD°’sŒV•¤w(ûêÔ»ð•†ì ¶å&ÜùܤeM(ú¹§Ù‘åP{ï\m*üøÂ’ÒŽò¶×êPïò8>UØ,û=Cª£º#ÊI#ãf´¯¬OÅ^=Tâ¨*#)ROÉHä0ã@©HVÉ#z±ÂKtv5a-˜ØÃ®º* áÅÃo ÊÌ·)*XoN²|`|•¸+Ñ;IRU­d…$‚2¢ku'L]¹¥Š»k1'x²@µv^ÝøÝY$ˆòÈ;ü•èF2u)J=Äæ…%:F­‘®=®`àB°£á¾x¿VFÛ;…ážêñ+dc¿q“C¹WCz!;ªÒUÛ$œíã’}”h@sI><ˆ’‚²6óñ¥Îd@4žÐÎûÉȯ§R’ ÌÖ½lõÜÔヽf°•ãXN3€¬ÔnIjÌÜPRr'È|ô‰Å8‡5(d‘Ï5½hPRKZ4g 9;û©$ö]RUÕ§Plxó<èMSLI=ÌF)Y%#žÃÛXÂØŽ[f{J!%µ);üU{nõàŠ¥e…sR´g#ØM'EœÉqE¼)MîR#æ EÁ3]Ê ×Æ]ŸÒä©(qнYuð “Ï g‘­íL±Ç*Te§Wè¥aZIß/U1δ¨%Ö–”ä%ç )2ì-)ôw{C Í;orþÚO‘,nëf^ ƒÈvÐ+pˆÒ4·%€œ}ªÇ¾«§¬I8ß«Ÿº“·bu++ô„ãr‘“x®ößïWØZQçFZ‚›œÊ‰<ÐðÈöƒ‘L|iy\q)ÅÌnT¦Â³Ö+¼žó¶=|¹ÔY‡2‡›PÏÛ§ùiÂå\–r½`clûk¾KOÎR:ñ.1i-É´¬²Á’ò•-¦ ’¬a lSáŒRå2‰(Fm(pœ”Â~œ—/ IæÜû'[Û$–”©.—Vútžågäޢ㡂OW~f•2’PÉY{fˆm $¸­xçµ(ë^#Kä+Ĩ$~1ä}â½TG\:ÙÒþ‘“Õ§´‰O1ëåçKÛs™/æ’Î@ô !$`IPÑMHÐx"£|·ÉÁÉO—Ú¦¤ˆQɬ•_}›¡²7Œγ$nMjB’0semOgžþª­²fCCI8sHó¬ÛXZ ˉJAÆ¢v¬Aïë­nÇCªÊ€Vf–ÆOk «32KWq{Ẽ¹Ç¥)RÖmßÚÍ%k)XÉõ±N­XêÓ¨±Æq]l®Â”–›Jµ€šAùùÖHR^PÔN¾’~7°RQ§e;¨¯»zñoä $ žu©æÈZŽ’’|©!ù9õЂ£Û^u±áB¼MpšF QàgÛZÕšÍ^5­gtå/vtåYX#V+5›˜RJT2h9Oy#ºvÃïGÿ¯‹'ó¥ÿáÞ«Ö¨žH'åÍt„·4Džàn8[c­ ¤ãì’>@kZT¥\Ûlž¬H?lu°máÙW6ÛÙS}bˆã$¡YÏ{©À¾>¹[d%ZŠV… °5“ç5 -QÄÉiêÐÚi’qÏívÉö|µ èJ2=6æ'šéS lº D÷nFÛïQÄ­¶¡,¬”$+çs·Ð~JpàÛ…¯†¸†5Â[α */¸Ù$vÓ‚¥ÌgI>¯*äÕâÄt.Ðu²¨ª É(Ê2|¶›æ°•¶´¸””B‚¹]l,ǘÃsmÒë$¦Dg†<±Ué ‰>·8bLë΄’–Ô¶F‡{J7äÛ5š+[¸‹¸á\ÔoHiS㺭)mKû"%cÈûë}³ˆcÝ£‰ ÔÙSaÕ…„‚|{\üª†é#Ž­¼Sw:ÕPŒÆ”%§SkðwcßV݉—[µ4·ÂÃ΀ãiÒA#–2q Ÿ}SÄxFJ*¥îº2èU­‡w¶Œkéâ”̨Ë-5¥¨<²¦Š¢2@. ’úÝûŠ¡®«]Æèûí6½ P ¤”$a#rO }t±ŒV‘"´pŒ48dZ†¼Š±5ž"×ÐæËO qÒBj•…œu®4R„ù•ªï³pÀ‰ ˆ®¸Ó( JQ¹8ñ<¾z8{`ŠÍ;«·ÖÄʧ°¥E#\híGgªaõ§V op”¬ŠG‘ª³£¬ÍJÊé Á“2E)Qíƒ^ls‘RNÁê¬76±¢·2¬ReR;l ÅL‚Ðr/}‡ÕdPìZJÆœUiÜÒ“©df™d8L”2_çßñ¿åNë)I*˜%¬„Ísãóó$Õ”÷+©æˆm¿g¸• ö\Æ=Š (¸¹-™ ¡* A<ñ¹ÇÍÙ÷ùQ¡J}Å«W^SᤜçÞ=Õ±×›rC)q[”)mó„‘“í5dW2®v5Zº¤Dc ¶‡TãŠÎà•+aî-G')KX- ë¤c^“¥^îëØl%Om:·9Ö1±÷Ÿš´ZZ ¡µ‡Ûp¸…ŽÏi'#—-ª9]îO2C×ô[~ã+4ëŒK¢ ÏŽ§@.¯I@IÀKiR‡1’|@îß+ ô­Ã“^TÈra°r† O˜É%B¯o©í¹g‚îoGŠÓD”­Öµ>À•8 ß8ÛÙRØë¥ã­nuëx†Ü[èp807ØäwìGqÎ6ÎG^I¸µ¡®/}$üJdžeÝ"ÛÚôô¡õ¼:áXk ’ É;óÇwu:ªæŒv£¸=J—q Ê´%çˆ!¶ÁQIÜö¦’¶ÂÂHÕÈЧ kc4ªH\n̺“æ…îä|µ£Òa¸æ”ÂÔ¡Œr,s¤Å9VàÖó 8 m+HîP -;ÉœíºŠd5â•U1IµD”ãëRtZB†Ç}$Ó‹i,(t£À`{¹VfBÒ‚ -‘’vï$äÔ•9Gc¤^äFm…ôXZ]OØÔ:á t[ƒ¯HbBR²RžÒœiÇ"6ö÷õQo¤º°¶t ¤È;ç—>êg¿Ç”u Ê9 Ç/øU‰ÍnŽ7 s!ð¤öTR:4ç8ǸIaYC§¸Óô{TGK$u‰IÊÓÙüië[)(R­)ÔŒäàžcÕVgOFz -ÜXó%äíÞA©U»‹£¸‚…­*B†éXXï^I²Mo%! JÇÏH¤ÃœØÇRè$àißæò¨J”$ΦÑfÉ´Ù.u±˜23„îÑ>iæ=›yTfõdŸmI\†BØÎÍMŸow¨àÔm«•³Ö-~ØN8æ\~à­$aXß#ÌwÔ¢ªCgtFPŒ„/sÇ…jHæ°;iî§·.|-vÝÅl“öí£ìdù§—»ß*ÑÔÃÉu‡Ø[‰ u—†|xöйÔRžŒ¯$¢Í½­G:¹ø «§Z³‘ä1ŠõÌ¥JÔÞïÍd¤`¤‘ꬆxµc$n4àV d’8)òŠð2 ‚±¤ø$Ödïœh TÚÁJ1§žõ)ÆB‰=Ùjó` q·™¯U˳ã¹*®I$ h*Ôµ|ÒE[Gu,žg5â‚RA pã;|”¡IÂ53ßï yLÚ7Ñ“Ž{f†ÚGXµêWšò±Kí¶”^õ›.¡]­j÷×±Ô×#'2°ïHï¬W¥ kd s„|eØê­© jJ•žîy÷TnÅì7ȶ1'%cR†äAõøÒg,,©Ä¤6€ßx )#ÙÈÓÀJ¹ ÷ï½P;Ó3$†‡í –ÀKIßIHÉ>½±X·fZ›Âú·q°**ǮӜ䒟ƒôWªpd$œœîBI®æg{GÔeEY1ƒÌu™ÇÉZWdyÖ %<¹üÄ ’!`£}@y§sX8–öÈ ,W™b¨ÞìdD0=`FO<f¶¶„PQñÿry ) Û‘8'ßZChWh¡{wýÔ»*bn¬­C'9'ñVRãa!¥…¨¯IÎ9?u(Sgìž@¤W­¥#ã/ʨõ%NY5Dƒƒ å‚7ô¥sû”ÔÎvÏuGxL„14'Õü…>¡Ý²k%o=›¡æ¡BFùîó¥ Hæ>JJ—A¶¬ƒ›Œªäì)P^N5wdmY ã|«O[Œ`Š­\ÎO…Bì•Ä`)3ÉÀßÇjÜ‚‘^•E’Žæ–Q“€Añ­Å¡Œ Ö!cö {+<÷꾄í¨6Ú‚{e$÷iS)ÔÈ÷R0´[ÚRIÎ<«‚ÂÀT}Ôõsð­}b@Æv¬VèàŒÐåùBFvÎ;èBõ•m€;üi"[ˆRÒ¤%9ì’7î÷Vþ°r‚Ö6(Ö$Ö¢à¬Kžt:d¥V W•`\¬îÛÔ=R†õ¡Õ Œ+<¡Å¤‚}'R2³«¶É®Ø.ŽÆöfÐ0=)Âáöªúª £…qÝ“–Ò\ÿûWízXO0¦[…QZˆ…Q@QEQEEPQ@QEZ}R‡ZÜÃ&í6B†54…g’€ÀÏr©ÏtiwÒeqþ¥·ê*u!o¨x% rš°Ÿ*zƒ8%V§½ Ùò¤%¶¥>œŽøsÜqáT¬\[²8éEs KÒÚ)RÛLj;“Œr­6››oTQ)„-h+'Ï—-³QÓY°qL¹R:N¦rÙÈíþ¨Èçó\QpfM†CðÊV–™ÖÛ+§cŒŽ{íF#ØUŒ%µþý¥ñÁæŽe!ÂÂïðœ•J±ÞÖùRp”¹÷H#¤ž&“Ò$(ö+Œ¨qÐï^·ã­,¥jJH‚’r7äù*°à •êIuùsœ~é :€½~y<€Û‘Üš›Î¾)v¤BP[ªŠb«X m²rPIæždwŽU©V““SŠO“*x{YÅ’NáÞáí*ˆôgÞAÊ]yä©I>#¸‘*íòúÔý5áuñs–ËŒ›¢;« \a¾”ëKkFwÛµÈñ±¨½¦í6ÏnšÇ\ó.¿±©ZÜmXK‘׌“¨‚œddjïAÎþ㊓©S+~òâUÒ ßÓ£cÇ­â®1´èßÖ¦«Ø=0M–À³¹n¶A·-@m¶rž¯Ó¹ìœwüÜéû‹eC¶@‡2Ô˜©·¼ÐJô¶4êÆú²7#89ÏväšÎ«û ñàõ3%&’~òDåÊÞR4ΟåE ºÁúlëEV½EžèHa G}£•¥ ÐÚ†yÜsÜ6?<ÿ„z-“xˆì™wxvÄ4ÒÝSO$•„ öòÛNÙÆFÛÒUÒWfjØ)QžY=Mæç DŸM¿ÿ4Rqp‡“ùéë%âί[w¸âßs´92â:¥ Τ wÛ‘ÁØÔ27]¥zЦIäÒ8„Ö…^O›fO>&6”Çõ‚µü!÷K?Ó“‡x'‹o°Ä«}šk±{PJ¯QQû3L—ëtÛÁâÓÑ$§´%•%C}ˆÈß>;ŠâĦì†ÁV§ˆ“¿ÑšnnmÅ:5c8¨ÿ…u/Ô«;½%n²ÓªôÅJ@'Ròœ«5ŽNƒæs-­œ•¥Ì,—HR{ñËä­JxIŽ:§BA+ÒH-'é®ô0¡~äýXú+ÏB…û’?õb¨úÒÚe!äé»Üá Œ¤åyêôöRyŽ^¾U½§ ¶ÖÕä“çÜOwƒ ÷$êÇÑ^z ?Ü‘ÿ«EAqV¿wñ:ðÉó)ƒxªÇeàKû·K¤hÒœRÔuºêÒ–Z@RSH$+~[U¥jã^jÙ¹<_fuô´â•5¬•c~ú}ô(_¹#ÿT+ÃÿÝ#ÿV>ŠË,~·Ëø—( ’¸ÇžiM¹Ä¶%¤ìRf6Aùj?{âL$ÆUÖÑ)ô¤7%¬§$œä(`oΦʶÁ*Ï£3žîÀ¡paúV?õb¨XÅ{ÙüNºw)‹©à¼Ã∌«ž•¾‡P?ÖIÏÈj7.|Ÿ… :ƒ°SrR¬û3‘íºØ1@ý*Ïõb“®PK5ýZaÄmȪXtÎxUÞÜ÷èßÖ ÖåÚßÓÑÏýஆT8 Îí@W¾‡N¢Ë8'q Tß·îþ$V >g79t„N}-ŸéŠÔnP󴦦+¤%Ĉl6F?h+ÅÚã gpÉü•/­íû¿‰Ï SšŸŸCôË'ýqH•Œu­lAøÃ˜å]?r²ÂKÑ£âBEdÆiµ©)e¾µe>-›÷N< \ÊW+oå3ZÌìžÓèPó «Ç«d¬%lµ¹ç¤W¦ÈiÑoÖ þâ#ä¶ýæPo5 Õ)J} “œdR%Û!àJIÉ$oËËtƒ-ÇN2ËyÄ<Ã. ™oú"«|GÿbÃÿò9~M¥!Dµ-8îå^Z"=z\[éSyrß5Òm†›þˆ¨oI„D1¥?§[î «aÎòåÜ: -È?¤6½ƒÍ$ÿ)X—ÖIy¬òýTP3¸uiðÞÑ,\ÄKÊAÔ+Äê¬Q)²­ XHÆs‘ž—„$}¨¥¡¦BÎFÔqGQxEÔnG(ÝæAÇí…z—#„^k'¼(œÓóö攄 #Opïõ“óÖm¢3M!´2”ümCqë5Ñ%R6§[Ф™lãßZÛ(×öI,sïÞºCiì%ˆÎ)g¢Ä˜È[jAÏÛ¤wÓµG u#‹Ð6DÖBGßç5½ `# ”Á#¼(ÇKWĽÕuyW0æ)TH ޽n­ˆ‘GQXHõ#±¯µƒü Ryã¼ öó¥ 4\ 2âSŒç#åÿ ÓÕÒ+=AYo*zg1Ò{ª9‹Õ [å75**ßJu¼+”æËݽixŠòÂ4:“«Rt'×’yžêÀÅêFR|¶¯A}ô¸<ŸÆ)sžMJ÷HÜä¸nkÐúAIÇk +Õšõß[ìAX­!ÆÇiH?ÅÜVÄ—ñBØÓ?°‹ÁA»§co¥GÕ¼†óŽ qZÔôR­J Ǽq#´½ôÝ1†ÉÔA9IÅqÔKx(½Øàˆ¥o ƒË*åZÞ›#ì…@l0{½ôÛ)Ö„ô2•H@H.Â|OÍßJ-öþRd! qilv›d ÷8í«mÈÀîó1íµØçrLV©,›Z±öËÆkZ\C‹ SŒ9åÌS%êâên­µ:TAclÅåK˜Wr†RùmÔô…”¡iÒ“ä2Gª³¬rnÐW÷›±ÜXZp”å«åÐ’ðÌØ¬±% Ë`¾T’¥€HÀñ§¡r·þîýhúj_Ðc-? è´²…5ð‹!IvSV5åˆÑ ­äÄme#â„n~JõÖ5–mÏ&X—M¸ÛbEÖwßeMf.¶üþŸýjjy ‹ííÎq—¢FBÉ:°•¤1G2N=yð©gqŽì¢ˆÌ 83Øu’Gv\)-¤<µ­âSBïoÆó¢íÏìÉúk4Ýí„gÓ£ûäý5wϼØ`º¦¤* *(Òœày{E5Z8®Áuu)ŒÙ²€’F9òõÕU§ûÇ|µÛÍ*qw¶WŸ×'é¯x¶µÂ(?ʦ¬ ïðü0¼–œP iB¾sãꦗx¾Üû=mµ†ÝoöËo9Œ{jϪ!Îg:wÒSá{g/O‰ýr~š>¶ú£ÿÞ§é¨ßMÜ[$Úb[”„Iœ„¬6€0Ž~Ò*fD0òÆFÉQ=Äç®GÝYkpøSvÌzyÊ´35bØMâ×®1?®OÓ[wµŒfãlÿ×'éªvà4iy8Q Û;wüët­Â0O¢\f1¾Å­#ž{•’«ò(ueù%È·¾µãõJ&Gÿ9?Mb»Õ°'³>.{ðòsUì^8âøÊ»Ü’Fà:à;ÿç§è,q„d«"Ó ”K’Üœ*'8åÝ]ò:^³+q¬¶KâJ™½Úà ¹ÄÔæúsóó¯MîÔwøNõÉújÆ\exã(¶‹TæáEZÜV¥° Sz±­^Ð}Z<êîáŽ(àøPâðý¡…ÎôFÙu¶$ç+#$à³YëÐìüÄä#wçhA{µcõJõÉúk†­G•ÊõÉúk›xÎÃwà´3&¦\¢¹Ö$)µ' `ðq€O:­ºDÔ[%M‹m\çn1@qÑ€ÒT¡­zŽ8ÀÏ!«Î¥ 5ãy]2Êtó¦Ó,£yµŸÿ˜Ãþ¹?MkUæÙûáúäý5jW¡ÅlL½ÄCg¬K#­p'ã pÉåž|ñMŠŸlt6¸Öë…ÙÔ8I.¨¥•§p6@<‰ÂÍwÉãԻɛٓ5^-™Ú|SÿzŸ¦“›­¿Zˆgÿ˜9ùÔr;\IrÕ HpRêµõL5Ö¹¶ýØ8lqŠÓ?†TÂvìô·Ôëaä…«BT‚2q·¯5ÞÆ$–W³h³ú+ŸGHvV™’ËëÜ:PàQÇ£»]\·Ð}­È#XE½£—„àœ°î9÷w×RVºËkF1•¢îQE\TQEQEEPQ@QEQEiõJþÅïd=-žuT'Fx¶KËÒѵÏR@aÅŒ–†ú´ç¼í¿†Ý毿ªP‘уÄKgmsg [ý/ˆ!¥cZJÖAîH'èš·œ®_M^ ˜]øÆÞýÒ_]׺þ° P e$Œœ{GÖ<ó¶q¸¬­)d1Ö×°IŒÞŸ03î4Óx‡a»¡J–ÄÔ!)2ÚhZ’0B‡-C® ¼An¹Ù‡W(Úé´(©µâ¯ÚŸ^=}ÕçV£;÷40WÃJrÍf?ñ¿Ùx¦r.ÖÄYº _އ‰mò9òR¡Ëžܱ½kÃ6çáØZKÍ>•ëp8˩Ƒ­CǨÓÒÛã¨mÚoéºBôK›ŠS1TÑë„«aÛ‘Ü‚¾Ç¾¦7iöû¬-s­¥3Ò2™-+Â9kIçëçÊ»Rœç ºûz`§Š¢ÿh³/g/)Ã6Ù3Þi‰×å> ÔhÍîó$ìï;W÷ ðO X"­¹VæøŠøÛ`HqæÊ£1‘œ%' ?€£ÌÊA¨ßÛŸàÞ%qBb6»¼Ô$¡”–b X#’”€¥gÀ'–õ·ïï]8 q’ñøF+¯¢JPT­J Rެ÷é) îNÀøVšXwØÞ÷/­UÊ¥–ˆGÒäP[yá7aÚ¯pÊT†$·ûE·’œrñïڹˊ¸›½ú\÷!:Ì×ZH-R•ãJ”9(råœÕ»z—"kCÑR_ ÈZP ÔSÈdàdíáO»JRí“ JÕÙB°@òç"uj›c+Åsxmż§ÔÛ®­¼`•»±ß¿q¦YöYVä3×S'¬%L†›*ÀŽÈ]ÝÕ Š)ß©»ˆ´>¿Úø°›òIb$”‘! •£ãe:‚€>ƒí©µÊï}‹Årgß`=!nÎ K†§5%e£’¶–éRsü\T«‚øÎz8dL¶Ïµ_œiÂâ&º‡û#+R”” #´Tµf©(âY2mÑ"ÈB¤±zšqgK€F—1²´«|íßœç5:ó¯³!_±SWœo¯Uí,kWLwæ¢K³? "4•i˜V‚áQ#t|FÓ€”$"rKˆŽÁ¹@]™ÏM¶ÈX ! aXM¨w¾ü•ƒŽüW]Ü/w!ƒÂ 8ŒM˜ÛÆ“‚58yèBIV7Æø«óó'´Ná¥K¸Ü'ZzæÕÕ¾·[Ô²Ëêô‚„œdµ`nk%hª3×c•ñ0œrF_³ó$QzPv+h‡>*¢¥¬6•4¸$£$ƒêϨT ¤ž’à_¥¯†nQ"8ÚÒ—m· Úþضå‚26<¹U~ï_¬§8c‹UZ¾¥3ÔÖ¥- ø¡ÓŒ­o«˜ç½ ‘oîä6ÙôWÜÔ„ÿ¢ñN{Ó¾AÁ«•: ½”ÄéIs-NÇuÈÏÇZJvÆ®GæÇjqm¥Z†Ê•¸+W}!µ½Õ¶òÖ¦Û[[$gaRN8aî(½;¥¡†TóŠYÛ–ÃÚHßYÜUôØ”Vf¢Ú^Ñ¡ù/°K`ÆùkKt¶¤émCœT阜*9¶OµHƒ1žÂÞjA+J¹¥[¹Û×PN%´J³Ý\¶¸óRÙZBÚy•¥ÖÎá^^~55{\Nð¨á}¿¿Äñ¹kJÔVµw@ÿŸUu§Ô–Bº$mC`e¨ÿvÝqæ”%¤«N°Î~~úê¿©3‰lÍð3<8¹ÈMÏY¨ ‚PP€œc¸ÔߘØm²ô"¼­LI$+¨}§t+а­'Àã•Eú@ãë'¡Ÿ„›—!çÏa˜­…+$¨„iÏ¸Ö ½BW%¦¼¨t«ÃüSvU 6õ¾á’iõ$õ¸ß )'|w|õ>Ïžj™;³[‡¶ƒX:ëM4§]q ¡#*R”ÄšÈ(Aªm Î}õ¥l¤o¤ç»”æ“ÌË-å׌ì2yš¥¥Èšlmâ›ÔNáÉw»š[.8–R²€ÈÉ¥Ú™z3rP-­I> Ô3¦8¾Ž/ %jIz;…'br†ÔæÙÛš)òÆ„BµF·!1Ùe´23ñ¤7ßžFþƬK»qmXÊHÅk[@P”¥¼éR«ºšß’ªê ÓBNèˆ+Ð+#½zl y¤šWnãk &;Ž…œ’’=”ŸtåcNqÌüVÎ=f¸Ø°£­h¡K*ÀOÆ`X¨/qR÷PÊŸŠŽä},ây‹lqõ¤­%YïÀª^á-m6¹n¨¬œ«ÚGÏVRŠ–¬„´[›ž‘1ÙiuÉ« ÊRŒ{*mÁwµ¸ïRâƒo¤vÒGecÄUS¥ÇÖ…)Üê«æÿzŸít%Ä,&[ ‚2}€Ÿm[(FKBœ7ÕšJÙ2â”U¾³ßäG‡•2_ø†½¢R®GYØãHUĉÂfjy¹Ùï ïW]%«R¤ËQu÷7‡Ð*˜SrܱÉ"Úá®!‹rN\q*Õ²TÃ>4ã>ÞzƆÄü_¢©¾š¶ÜL¨Ä…§ôVû”*æáYì̂ӭ¬§°¥”ø*N’…è®2½ ¥XÎ jS Š‘Ü#uÌ>:wÊEE2HBãM¡:–BG‰4”z3Îд©C|½Þ4ì¤ À>±L’ŽýåèIŽ–Õ qÇHŒä,ü•š´êÇXÚÞ¬f»½šÂµ;wuZRA%YðÎ2{©†Dçܹ=!ÕÇ|Q$6˜ÙÆêðÎ<2w84ËubDûÜK@»³&c¯ý—«l(0„íÚQ9*Á;}JåG¶Ù!Ƶä…I^’µ$eÑ©J#œÿœUTežnì’Bk¼àúRXÂÊF0?j<¾~ú—ÂKZ]m+o[( X'dƒœgÀlj¾yÕÛ$<ÌymžJ“§¬…w-ö­ ÞÝ®tYNºìÛ›çZÐæ”¥ ãsÞ1È ãÅ$­k úÜÆ}æÜ»»Å¨ÿ 4áõÀ„¨÷àãáV/%‹Õ‰ØéŽÍ—Ò›a´l¼éRvNØ<‡Rþ”-«P`é8.,üQà)Òúö§@ôά2¯ÑJFFÛ¢³)8w¹UÄVÅM:Žïbõ蛉"ð]še’bËÒY­*O%”¥)ögM:ÍéRäûêm1ã4ÏvåG—#ëòÅRÑg8"´òp8”¨­)ØçΔ35î¹xB”•wdlkëèIºP·CÊ•g“d²wºíùW‘c-+-)Û‘øÀµ`ã'5»Šç¾›ƒ Îäègú¢ï<‡S¡ÆÕÙ;(^ºÒ© i(X)ÅhSd]8ô$üMÄR®7yW9XìçÀ¯j΢½’B²ƒÏ~úºø(œNIÛ5­JmHìœiÁ'•EÊä”V.WðÒ’¬-†p3þO¶’"ø†P¥Å’ÖHûbNÞÉuaÖÛŽâ›RPT´¡J9*$þ:oÊÉø¿-eu䙲XJ76q‡x‹,Vâ9½Ö(ŽíòN=Iáp"7 _­ÅçXsSa²Ú°­i}ºWZ:1„»ŸH“$¶„ŸBŠ´ óJGã4»-Ž›Üè}TV°é#¼œ+çÅSRYå©eÞ>åîñÚ7)%¨¥Ip…e8ßr*MKjN í ³ãHß²È[Í<䮼µ’±Žb²BCJø§=Ǻ§)F[Æ-1ñ§òŽÖ¡ŽáÝ[Ù”ûm¶á\óÈx“óÓkNÖ£ƒøé}·¬0KˆoSÒèì%)ÜòÔ}Å#ýcáT=®IÊȱú+ágø…«ýõ– ÒÄ5Ä€9ÊÊ4ønBqœwš–p7q%´Ê2-.¥`›û'ØÊr ” FO¯dôk`G p„ XNÖú³NÔ²¤:†YS«PB ”¥læMy8ÊJ<ȼ4efÎ>ú¤–õ©6ëŠê刨 ­$£–S¶GíHñÒÎx>ù~ø.Ðü·ÚuÖPή­ oXÉÜî‘ÝQn$7“zvThqÌ…È”RÛj8ì'$¤žX gÈUÊŸ‡œ½ÈXœˆ³}?©pFN4¸–ÜOd§¸©;úô¯)F9·/¦£J/-´Ce×€ãðû}v#:´Ëv*œ;´“©G8;ûªB䎶ٯ’ÑpQKpß *êÑ©@œ•ëÆi¤ÙÔâß~lÇp\„EjYío…(Ž|ÁÞ—C¶Afßwy¶†l!a8 7ùý±¢ƒÜ„ñ*IE¶ÿhÝÁ_#Mº½ÃVPòËEµ­ñ¼fÉ'pÛäåQÑ:}åv¦®+mÈí¶„0„¤!±‚žá“Ëb}µaôWs/Kâ÷ »Rb;+TóÕ{mC…«C¤-„i$â«¿×R‚M\Ž"n3jßÞRoÑë)o¬G«p-Ü©ÅOؤý¯üêýª€K|bGçt¬Kxé Ô²:©;möÃßWåjm=.’² (¢¸XQEQEEPQ@QEQE}ÓêsÛÌ.Cj¸G m*PÕÈn>qëM'‰8V)1mü'oìY=Y%JO<ê9#»³åï·þ¨ÉJƒÑºæ eLMaÁ¾9+5Îw.4²\¡GLÖ–›”•†Ñ*9 ¬dòVÄiùFF1Xñ1Í$‹a%£#ãV;ÔT)n2À¹©$)<µÌcnX8láî“ãÜ’ý§‰¢õJSzy´•4´‘öÉæŸXù+t˜lE¼5t·OôÈŒ:à/(è#tŒäýTÑf0¡Ûî2ÚЗåJql8Z#°¬$§'ÀêžV—x,¶ÓQÒ%¶åe’Ô«£u„–•èIyô­¨éÈ*Ù@¥IÀÇv9÷S‡q[Ý톮=T8í¼‘  ¥HÎTQŒ“ŒgÈ'dɆ‰©Šâ˜‹%u¤|BA G˜8çR ’L ¼Iiº¦‹ÊˆðêŠÒ°BI8Õ'àŒ÷T £=<«rùâëÔIÌb;h)YФöBp•c²wß—:§¸Ztžâ°[[ŸÎN•’’“ñIÎÙO-û<ñKú>ºªñ4ð«òU× «L…6I)HK­€6)ÂAÀÆ@YøÄÂLOKqæ B¤©¥n¦OÚœsÈåâ5}6¢œPI= ½™¨ö^!UņИS˜&:Ö :¥Ô6äNÀóª÷¤%ˆ\F/v™(·I`ä>Ø*À' Œo¨äw÷ŠA¾®Ë2uŠà™94ù ‚PP-«žRTî;ìi ¹¥qš;ó'54´¥¤´òt!§HAêûXÁ9È&2FOgæjÅàŸ‚8;…X.:•\'$¼ì Êô„éÔF•Ý’O¨Uü9Â6‡º¦B¦Gnì—"´„ ¥Qåã² :€/bI8ó€Üe\ÝC|1r™˜{oëÄ•$%+–¡‚yÖyÅJzlN*.:îZ#ŽdBâÉî]£àKSÝbp¤©—Ö($‘ú"•$d ê{à™vkò[†êo6KÂä k"@Z€Ñä±°)ñ<«)·Ý²F[$–â#^€BJ¶äR¼-C šð'àõD—ÒXiEM=Õuªe㌼Ïi:ÁϘõ¢«Í/8©,¯»°ª[–þ â[|V½W¨ÐÒ™2ÛhëYÖPT>0¶tãǤ¾(¾?o~íl}Æ£ºܦYíu+ÁyÎÉPljg˜¨¿ÂëïæZ —Qu”·[8P¼’S­$1ßê'¥Ö)R¬q}%ÅÆ¹¶ ã@HGaHÀ%*'#<²1ËvQŒ"£=ЃRY¢ÈÛl<ühß +­”ËII*RvåŸ+{iÒÂXS§«l­$žÀ'$SæéÁN ?kva˜Ì]S#¯*vt¯9Á8ƒ¹<¶3O-—1#u޾ ãºèìéÕ¨äm±ïª!‡©9¨ír5ªåM‹m6Íe/¹!˜ -$¡Rxïž7ç[ãñàùé~:Ô¸î"bI A²´œö±“¶Ùg!¡¤\á¹á0ØÒOTèê<´¨ ùáçÌnÅ.Ý|EÃà›¬g™L¸Šr;„e Iä°{ÁÈÛ˺µÔÂÓ¡}ú”P©)Kòÿ©&ã+»Òæ[.1Ýis¦—ha½I )QÉï>cÔkL$ë¶®,×e°u2ês¥ÔþÐøðysÝÞˆ¬.jŒž­l¡”,g;œ÷ïþ²‡}*-§IRÝ=‘ñ¼¼ëÈ›‹µVBpúÅ«?Ëàa--$¤¸Ú uda<`n’í«apß’Ç[¶Ö¦Ô@RNúN;ŽÞU–ÙЭó¹ï©¿pdþ °Æ›K-!(Kx(%@„ƒœ‚6ÜT“J1š’Ôdèפ›ßN“*ÖQ¦c=S­¾TRFrP†ø;ó>4·ˆ¯·þ'O×+šÊŽZÂR‘ŒžÒpçßç+k¢Û‰À~îœjÁêÓ¼w'zXïDé(R½LB€Ï`¶‘µPçJ÷/²E[o›s¶\Ù\9e‡´+Bô‚ÆjÈŸÓ×CBíÈ\8¯6¼©Ô3Ö’ ¶¥’"yg|R„tk¹•^.*ÀÉ qþí*WFvE# Ý®Áxµ¼‚?¹·ÉQr¦÷̃ß:VâëÕ¢E®uÙa2.¼FR ¶³§É4çÁ7ñ Çê[z-Ť0†ZjXQCiIQÂ’uv±ŸŠ”Dè¶ÂQ­ÙwG Êwu½»©LNޏV;jë•$ø»+qýšìŽXAÑçL·QÇr¯ûÓÑ­ÒT¢¸.êq¼`é žIÁÀÎIxÃ¥·ç®Ü¸ì6ÛI^¹a RF²žâAìààdòÍ5ž ád9ƒV¤ø*BñííyV×x‡Zì·kŽ”ãcñ¼6Üû*.Û½Ž¦‘ç×£· Cö{Õ &­(¨¨­‡A#;…ÈŽû Ml½.pœ…é•!Øe½I%æˆJÐU€3¿#|j»—ÖÒf¼Å¾3}Lè g P æ4ü´ª$ IŒRm0´Jê¶Àxsç\•(HJHµ‘Ò_IúáŠp6*Ô5hçZÏH<(¬|ŒAðÉÇÉU’„J`ÃBÓ²Hi9'²”!æt 6ÒNà¤$*N¹çD÷óBágSI¼GÓ¥DàüØïÍzxÓ†œ Ó|€q±ËÀUxKY '8ÏÅÞ²ëÛ‡¬TÕqÔD²7Øß¹KŠ©l4Ôr—”è!ÂN; w óÏÓ[cñŽR’†n,•©IHA;’®_绾¡¡ôç˳ZÖ¶~Õ´¤g`STQ\ª¥È±qa\¤4שSZ9è?ë ¯ ¨'ÈVIíµX¨ûJûoaa®ZÁÁìU&vBÚÓï¨Ð~ÜçÈÖ—1—·®¤¨ûGoì'.>Œl¤ûê'Ò ‰]¾WçÔwù*›Žy÷k»!iTl’G¤#¿×VÓ¥i'p«&ìn"¼Æõ™4 êeéíì4ûúÕ§I=“ƒNMÃKHP%h*Æu·Ÿ˜Ól)LCyN¾àBBHùÓƒW(O̦NQa¢9Ò*ßc‡^ëÝiÌá#«Ô3œÕU$3-iSsN”`'=¯‘I5iô–¶×c•‚´çøÂªiù‚ÕcHì© «¼÷¥UªšQ?;CÕÛ]#Q=hî*ÿ2ýêÝnnDy’PN‚Áõ9÷i*P¤vŒ4ûd6ó( -d&”öRô„-|‹ ü•a{XÈaÅ 6WT•ëÑÜ,ÔaÂ$ËqÀBά %9Ø~AR-4$”ÊmÔø8ÐðòÅ5™¬¯²ú!¬ø)Å#äX4zƒ°•­Qd%ÞÒ;êÈïR“óUÑÔ½U *'¬i\À=õ ±Y¥_%ú%–Ë6[ÚuÂRWâtàyššômcœç¢Ý1™VåÛÉ\“-•%INBtŒç*:‡-óUT”TZl¶1”¤²¢krQ-ÌÂóÈ6G6¡ Q ÁR€çV#~»H‚šHЗTµ¨}²ÉÎî‘áš­¸ÙÖ¸zö""J$ÃyJJ^Q -œ€¬räw÷êó*ÉènžtÕÙ’œe(Rˉ GÇñO® 7éW·"¡èqzÙ2\ ºZd”¥CH_3ÎÞül)CWÉÍ]eÄA€äI W©Íãa’0G<;ùÖé?Äíæríí°…´ã`§ZHíÌlGU•*Úè§U£#nðï˜ãòÂý1×:ñ-Ô¸ ¨l=^­û©»Š.7)눛í²Ö€°:ÈQXñÛÍ5t¾ó1b—sm#RÔyÿ‰¦«²ßĘqöu!.$`ãÇ Ç»¡Á_-Ç1†/ÚÞiµJ”þ½Ju ÆÛãnU • q#6î»=>G]†–äp”¤÷I9õà ±øíNGá¹KŽ HJSÜ5}˜ªë„x}é°®¼A!n5 l\sl!'»r2{ªçÇD…†‰V»£“ÔÄ„­n´²l'dïòÜÖr˜q†ã¥¹~Ÿ+Bðp°ws·ð5iXí0áØ.ßÃR§êa•úÒÐ$„©J'VIg;|ÕB~Ñ9Ø’F¸ë:Ðv#?yŠŒd›³h’hšÀ’ê,ÑP’¶ÙS R†¬·x¬šuÅêi„(¨¨$2I<¹s5œk*çÙc†µ¾†šJzÄê XÀûQ¹w÷šÞYv’Óˆy )GRAÛnúúJSýšFYGVÍ>¥Çê=A‘އp=e%>u²$'J œm``çZÀÁõo[D¦Ùt:„#¹õ ö\‡”„Û$Æt­ ë9ö«ñTó6q+1Ë…*œyÖØe.<®¥°´$edíŸ:o¹õñà9)ö¡>Rpâmiïc¬~Ûº‘ا3*rb[)mN-n/H$nBt‚FFØÍAÖ°Ú …Ò çÝW_L÷+]ï‡Y´pÜiraZ\ŒÊfáA­‘¡(ßš»G¸l;óT=ñàÕõu˜*'cžco,ÖHêm¦íÀúž"„Úîww3ªT‚€Hd¤šÕÒ4†œâfäEy§[u­+Ðr2 dw§ÕH8% c€í-<—L—‰ ¥¤¡K$¨Dù“©G¶¥Â‹$-µ¡2ži­ ÀH8ú'ÛŸ‹ÒNFz0n¦g̳¸s‚øWˆì-†5E’ëÚCímXÜe@$n3 ;¸ÉS¡Nbþ•Kí×.‚T·Zm¼·”]$#% æGÝ|µà±&ÇÀ‘-oÜd1F¿Î¨ à {òp3¿Åò©„«<8)’©-©Ô3*d4¨çÚm%³ï'j”›Ís~Xå’n÷èiørPã1Ôãα”ÓdØR°By`V•J»]Á Úœôy Ö¹ ÖÚ’vØî”m*‘rL4Ù—Ý™ÐßrT‘ $kë–Ô9á)G/:ÊeöÚ›ì—åÌgÐ'Îë]J Ö–RñYN“Õ±ú(æÙ\hÆ6i_þæ6˜—hóœŽÜÄZúä¿÷T¢KiÖâUŒžB˜m¦ŽØqà ¬%µç l€R@Î7÷SµÓ‹`\­Æ…&S®Ýߘ4 mº0[Æäg ¹´ð²ub#Š+\¥„J@ P'| `ó\ä[Q¹Þäç£0I;œsÿítMs_E²î*éVÅdës¨Öêú¸¤(g¨wmIÛjéJ¾Š´u<¹ÁÁÙ…QV (¢€(¢Š¢Š(Š(  (¢€(¢Š°ú§‚ODò‚ó£ÒZÕ šåh‚ÚíÆâµ5î j#ÈpÖTÏUù•Èëס¯JgZ°ö>UÇüOwL¥µ @ŒÖÊÚŽÃ8òäg­¹u)Xa0®n]å9dÖã)eN䄤eDÈã¸gº‘ÁÖÌøF*[CÚ:Å¡ÄéC¥)$§Vyùcóð——Ø³ðØ•g+~äéJF¤…¶w:’2…“!ÙıÛrtXÖ+Ädã,É!• 'mD„«>[àTUe(äo^©]Z—•Öì ¥”Û›¤F¦,²™m€¬¥c”§N :uö#¹U»Š®3¬œ.‘æc@S×â4”,ì5Ždmîò¦(\G2SqfHŽÚâÛŸ)~l/²T•ó fO*U'øv|µLÕr{­J\2ú0 @Âñ ç<ùó¼™Ó©B¼kΣÑòÛá{/N­7O.ãݧí& ËW‹K‚m½Gí´œ”y‚–^N],|K 7Áˆ БװÊð0 OÆ‚“Ï⊥îüðCi¹Ún¸¶œJ‹O3¥zrs…$yr U•Á¶¸s=0YBÒ—@묂¥¤g³«ðÈÈØì¯Äp°‡l¥¢øøG RRÊÕÒÝßSÉô¹0Ãјí–ÐðŽ´î0’RÞO– T·&užYr<å´¥º‡NŽJ)Î=µ{N¶ôWjZ§_ouÅ(¬®}ÁÇלä ;ûÁ4ëe™ÑuÚØ¹0¸VÛqŽÉÒCV„{Öÿ*ócÇÝOCFr]RÐõÖ …8%"Ñææ© MqÅǹ¬6¥¥YTyœ ¤‘„•$`sÝ(¥mÃVX|.˜öÛ;ʘ‰Tɇ(ZH)uK' XR†åt"HŒ¸è°ÉVmÖÑ")J’r0VÞ¤Ÿ±©¥Å.D·¹Ä)0ñ ÂS Dq¹”’BŠ@98Q8³WRâôå$ªFPü•¯ïØÇSQT´QË3eÉáÞ3b楹%—PC®–ÏehÉÎìšž^Xa ¹duöµˆƒIC¡žµXÔB”½ÉÂÉ8Û8Æ@Ž-D^3u¹ÏðëL¥J/2J‡y^ƒËŸ>tš"8yPá®lhïÛ±Õ¶9ÆÒ½‚Ô2Îä<+ÖŽ*1y’»±ª¬ÚU$—±5rµJmèNÓ,u´ÊŸ.鳨 xTÇ„ç!–üvši·d ¡¶ÑÙROñûIÉï)ÉÚ­Þo¡·m!§8:Éh:¹:ψZÞõg5ƒÖn¤Ìp³é³Zj}¥<Þ€°¢ê0~®³Kæûé”ãpq£ÜTÚ~ßž…='„å@µ1wº6Û}{©=CneN @QÓ±ÎFñ“‘µ%±¹!˜’!NSD?¾F4-#d§=8ó«ëø18]wKcÊâ{v¿IJíŽ 8ÚðBÔ5 ÔN ÝJÈb™j^}ýÞ¢ãÆ,<ã(( Yo´;C9ÔRIÈcâ›L†ºÇÌVXR“­-;¨;´¬àyVHøå¹=¦YqĨ6œŠFJ°2{³ŸÇŠØÄ·RJKËš’ÿ¶ÇËì¦6žJ;+JÓ¨í©²‘Ï–ÛÖØ¥•$¢­Õ’Îr¬žüv|jm+ÐxYR¤Vðî% Ogǘ'¸ï‘IŸŸ²û.)Ä+NùÕ߀vÛ»¼z©#þ’” ºòÝ~:R Q<Îp>üÒ OˆiÔ«F­%m¬ä{÷ÝŒ÷o½NÝ!ÅÙ®8¢„l F@FÚ¹øúöò­åa úÊ€HÏÅÛÇí|©"TÓšdês#´µŒó:Hßp|+D†šëZ/GKêÕ’œ ±x« ä3äu‘.¤QÔ¹älÙ;æ®úPÒ–Úµ ™@) à‚AÛ÷Žÿ¢rÝ)¶[E¡‚÷8'÷V”ÜÀoÒ©Ô’5i)Y’HçRIªÐñ'ZÒ±ßȃƒÌ íáXu9ž­JHVç|«ÜÓS²°¥3òNrÚ‚’¨œüÕšTî¥:Ö¿ÙQÚφÕ<¥7-å lð#p¤‚1ã½zâÝu#HeJð œøøšFëGBšh·ÌààŸg!Y·1 t»ÆÉÎá#õŠX‹bž±A-pFr⧬P¨ã}òsÝÝZ=0?c óRO/YÚ±C‰Sy@Õ“º’R*I2-£cΕ[_1R¿H:Ê1¾~×qÝIg8ôdä“é5‹®:>Ê¢<§9ù9Rbµ.Db FN/“58î#dÐ÷ŠsÝYb½ nF% AŽút³ÆŠ ­K‡̹ŽÛ`÷wÑ ÓC…·Z@o+8ÎiwQ2,@ÓqÚ‘•’JNÛêƒ`ˆt¢Ó Úš1ã¶ÀSƒVŒÕYsJ̼!§H–Î@9;¡c5jtЉoÚÒöÊV1«o»ª·v9^T§[‡Õ¤)j}”8‚w «n]øÛ'ctj(CR™E¹ M°ÚK%.¨à$²ØQù5šRã†Þ+òJÖ~@âÇÉNÈnLkhn,WP]N§^JTO0¥Í¼ñiß[+uÄ©IA••+9ðÖÒóì'*u”®E¢LÂu2¡ŽÈÍ3p©‹Ï³9pLDI“Õ¸°é ó€9QÆÓ̌➠‘è­’y63åìù…EšÒå:ßZæÎ(cZ†µtzªÉw“Hª–S¬Z‰hà.jÛd‹Ô4/>êpëÊïS„¾<±¶ØåP.%¼<ä«…Õ:¤­ qh^®ÈN”§–Ào·Žj7Â\[:é`rÍpЧœ‰kyÍKÙ*JOšHÙ=üé¾$©p–ä8ÑMÝ¥©7•|BT@æ9çâ¼™Òqwžèúì*xˆEÓ[êýp´ÙX³ÛSùíæ5¾ît¥¤¤ …(î9€$ïŽDˆmç†ä?!©Ó]eô¯wa¡'@ÀÜg:–Iï$ wo³ÓSæÝÜRæÚ˜mJRT¦ÜgAÈ éÉßrð¢l'c!×Z@e JFæw,lyØÚu”žt2L°g…j…%òèJ”Òä+Qʉ:Uå¾<«B¸pü+2© ¨¡‰ d6¥(ožáÌVˆÜ^L§ãÉ€ãN ŽÂŽ‘œ@8 òÏ>úOx¿kJÝC/­QBÚ*Àß¿™Æwú*Š˜ŠqvI§ð<ñÖü·®w¶m-å,!@¹·3ÏÜÍ=J¸[a!-9%´! :ˆÀååPéËEÎÓ&å R”ë)h<·+ÏôR¯i¤|5c7KŠ[t©,Œ©Åx ªiÕ«ÛZËäE“²m—+aiÇ´7%]BAIÎ¥l9zóáµ,×ÚaÒ–µÒ•dŒ§c¹Î{É5GežY‘;+g*ßn€ØËN´P↢2ø¦—¿ÅÅÇÒúZqNèμ€œçíó¨íãSòqJNTÐ'l’i:Ö”á ’NÀ$s¯£…5•©2PÕÊîhyæÖïYö<¤¤rÔFã¿ä­7‹4·ž-Re4¾y9ðÎi¢Â°«‚¿DXw$ù ·¬ŠPÛ‰ÓÚ.ç¿'ñW'5OD‹©Puo¨÷‡ä»ÑO}Àó¶øñðG"§e m‘ûT|´ËÐÄ;t¾3´ü.¢-¢Z\|iש ½8HÏh„§ÆŸ%¢y²Í´7!MÆu—ß(Ûcºr|{HÛ¸êuúžc–\¸Ë‹l©mÇe¶ŽÖ² ãéZ‰V4¤´ždsÚ¸äò6BÖе:Mº1?ŶÕl‡Úâppé)XBdöR„¤i À$¶ð®^éJ2mó Trã™ÂO/ úòk¥ÑÃ÷ËÇ\fÊšÜàÛ]„¨ì€âßZP]ʉ”êÀÂrN9×8qTÆx§¥»s,­¢ãIV7å…+=Üò>z6¬Î§–6'ÏÄDðÄ%v[e Jòq¸GøÒ‚R÷°.)[hmõ: pŽu/”¤¶€¥`§™î¦+½Æˆ/°Þ·’´) [G NvβB{ûŽkJ‰Ýî×ë Ý-³žúú”„8§’è(;éÒr>JðŒÞ%â(Ó]fLR†Ê¢°ÊšÏ5•¥#Ä纶vŠ 2.wš³Ôt{feÒC uZ­–¯²¿ˆ¥ï<˜Nk¢xžÎÕï‡äÚ{ªmð¥c8Âå‘áŽuè„£ð 3”™Oì—SŽÒÏv|/Iܸ@h¾lv¾éÐ>s_7‰ÄJ¥\Ë‘¶5e!©áæø?®ì;|}PKN-ì0ÚV°A9PPß8w×![vãµOšc: K®%´¸AÐÆ Æþ³][Ó¢¬7PÄl¡æÐC1î ¡N”œé#;ŽüxUÝŸ¢ž‹]žÔ~ã+““¦¡.õ ë) +‘k é9Þ·aq-ê6Û9–0½•ˆ”Þ.œ»Ó)bTn¯Òu°§n:”B¹ Žxæ7åÈlý.cˆ‡)¸Å‰JÕ(©RÒ·—[«r8ïÎ)(á[RáµG¦ÎZ´–$º]q[d4Þœòðº÷‡Zàn ¼IŠbÆL ÂCQn«Ü’à $¥]ÙÈ­Å­O”YÝuɵ¾µ˜q¸†æ‚ÞËsì)+ßs¶’9m«ÛNˆw…m‡vM†Åj†ëb•-ÔºÈ+`âwŽCœXf¹E™sŠ·[‹‡^j3ï<¥ƒ¥°t'±ñ¶ÜæµEéJ]í«7 D³AC‘ØB’’¥4ßZ#8Î…AŇГvB[D[îáo´#ˆe)?¡> Smd(••ëÒß}9Þœø³£ôð䦛Znd¾œ¥×æ%¤ds6P¡ÏΓq}îåfµZ®G‡&AÊ–¹HuhN$€@H$ofá åöó|˜ýÖé&rãÅp±¯ g¬m#;góÞ¥‘§b§ˆœµOBeÐ婸ý'Ù$³Ó ­Ô)¶W×:á,9ƒ­IÔÁÈÉæ+§+œì(ª+†$ÍŽÿT—ÚÐ>ެéØg<»ó]WÆ9Uг¹êŠ(©¢Š(Š(  (¢€(¢Š¢Š(Š( *ߪ´½Ñ¶”­ \–>'×\c/‡[’ãPî1º•¼ãlŬÐÞ ‰RŠ†Ç˜³ËÃØÿU¢ÖßB·%£:’óE8çœ×Ø8¥èÒ’©‹qXÁÀA ‘Ë íVÃUb-´Näp¤ûC8HÛFF¶ÒJð6Éåæj9p–èŽØl8¦Ô IÈ ‘¹Žú›ZxòÖ¸ø˜¢ ëèä- §øÄò5‡Æ´ËŒßGi"GTr3‚âå nccÏÙ^&+$ÜÓÔ¦tÜždõ+¯äÆ’‡Ù’ÙJAë´œ8Â’|ˆçì§» þ‡5·­N¶Ò}ƒ•.99H?ÆI8Ç‚”¯RK¬´<™M+RKGF“ÎÀi¤]´žµÛµGô™ [¥ÌT¨öùÍü3)rŸxê С9ÇmDä+c¶;È;V?#ž)Nsw|ô=J´Qj+âMxǃø‘“(¢Ö%ÄXë[[_GY§´€¬cî§Î¸h[H†òÙüðµñ”®ÈÈ%)HÈÎQ‘¿ª‘ËbA³¢éÃw[ßcJÕÕ( -#˜WqwŸ.êmºñD{¼1z„‡]Zw×5yöJUËÃÝη`«:Ñ^ÚëëKM5_§ýHÿHR¸ñ„ÆÛ./CêJu$m„÷mÈ|ÔåÑåþoßcÉbcñl©·iX)IØŸoYJ‘p[“~ÎÊHJŸaZôcmûÆ2yÏi£%ã%tfÄVu$§%ÏÚ;9Ü©ZLgtàuc²N6<Æsáí©wq×[øNo?-»‹L„©´¾Ðsì#êóºJä?lOq5_·úR:Ø×GNãpØæ{ˆËË5µ¹W L–Ÿ˜“%¶NRð)î 6#–õš­(Õ©&Þ‘‚4ºnä\E{(Kˆ‘-JÀKjÑèâ¬nßZ8(ÉS3¦>¡³ «w„¨“«°>è‚}uRλCJ›v#o¿×d¶ÒH»j²8 4y<"ÛÒ–B¡Ç²²‚ÐFß‹aãD¨*tÞ„éÓ7x’Û A2#&S®!+}• VÞ¼Ž\±XÌM¥Jmùñœë\YQêØR»G¢Gˆß!=ûS?¦Z``[gECO€•6Ì•µw’ŸŠ1Ì';ò¹+aÖßd_pgGÒ•ã™'RŠsžò3êîÏ·0èýâØˆ*LwJ’½#­PN{²¡åózësZv2P—c«)ÀH PQõ•j?,Bj"æÌmÇÚ *S®=Ö»ž{g n6çå¸Õ"û 1D—-ñ jоáœ<ìi•XâÍ'd>­Ø%Õ†šsìií¬«çaòý©9•ª`[aÈèÓÛû+x'¿b’O:¬o¹1ƒŒDâ ò›*ZR¼¸£ÏNµ+¸÷bÛ8›ˆ„e¶ô–æu|õ»¥X瀃SŒ2LJ©—2س^“*Rƒkj *#'#) üôœ%jKÅ’—S‘²”¡§;óÕ’v¨[<|`ÇaOÛ¦/*!Ô4¤ xIϯj[nã[ÉN¶Ä9 ÈRI yœ¶{êN6(ìæÉN)KŠSKPJÜm]i*Ý$÷Ÿ>TÁuµ¿.èüèå,º§5…줟Œ6žÄãzÝ7ˆ-Œ0†¾+B›( €RFùH#˜åJ-×&äÂJ¤¤G^€BUs¾p2sí®GGtK¿ì/ˆÄ¶Š•C®,äeÁŽ@ö<«{²¤$„HjÿnTU·iaN:Ão°âVÊÐí '<·üÃnTŽeÁ˜Ó˜€ä’—ÝÉK`œgÕœzªÄŒ×mØtdÆtu‰Hmdl¤ŒŸ—|ùV•½Ú!ÇÐ¥òû"2>QŠL© ¶’ã`cH#äÎ)K‘å·izâã n*T¥(„¤|”7xÞºÚŽäUæì‘‘JÃyiG~¦ÛÈ?5&JÀÔTÒÊÎÅAEöV0Ÿ…*2^eaöòÁÿ"² wãzAqµÆþþu$BLÉ·˜@ ©#8û!ÏÏÝY©õ¨á6A<”Ž(¤ºñ=€„'Å@çå˜*ÒrâNFùFþáR±ÂÌã´C<É é¤ÒöJº¼uŸ$§#ÙZ Ê@)pï9cʲSÁM¥+S™ý¨ÈÇ»jêG.imÅ)8¾«'SŸefÁdl8µju$å#üp+[©[Á!(u(8!AGµî5ëóô\äáÄE\÷Õdw;M÷‘'#zËưY9¬IªE]"$‚OÛ$|ô¨ãÚ¢òuÆt³%öŽ­D!diÊÍ å@ëdÜçkS…)Â’FÄyÔ:0ô µ·3¬¼Xq :œêHß cz®.ºÝm¸‘›’˜èÂÎâ‰W-ô‚=˜«¤¶KVÖA’ì‚]N ˆŽ~Y݃Z:ÔÆ*êÆ:ÀÎyŸÛ¨ÅVÂŒf³H¦s’•‘îW¨j3†Ê;KYNÁTÏ#à+Ñ-1ßarKS*ŽÉBR3¶ @$ âµ6Xêã°~ãû’+nëP"4…É[üür¬{GßOÑøÎœÕæ*‘@)†Tc‡”œ#`·0qOÛà¸×Rà}O,jJOÅAÆùå¾hâ±&×n–ÊÒ¶ÜCˆ$…r üõ–šs•›=êø¸R¥8ÑÙ/™Ð{Õ›‰ìí\ØIààºÙBñ¾2#Ͼ£\VË AZ€´æPsóS]¥ÖãpE¥jëR¤²”¥m ’‘ŒÇ*ñ õ„¡è,H“!÷R·SYïʇñ²9Õ3evÞˆÇO¥O,²´¬´ÂÙK½b· N $Ÿv=¢‘&Õ Éa¬$((’œclœ`äf‘1zaà—ö)*i/7`µû_çœ t³E1ÚqnÈô‡ÝÓÖ¨d' `lI#o=êmF¬–ÍšI  +zŸ¸1s\o«pÈZVÓ‰Æ0°­Ô=¹ÔËlâXÖ¨&ÛÇDµ%þ´8Ò€Hê»G‘ÆÎù¥Ý X'ÜŸnTvÕ%´7£ªJ€(> Ž:p¥ŽØÏ Çjeº9Sˆ× Hh(êï Ô;¹Τ•åkZÄHo[æØÒ&Ýnaéo‚–sZÇ~ärå¹ñ©=·Œf³±ÖÔ`·µ¨÷’HðÈØyRN °Ú¤¡&ÄâeMgva¥Ýl`+:Hìiîæ–išÛs„Íñpx¾ÖÓpÛ—„ •7xœ'+é;`òª'JJWNËÄY¡ÇŠ.3/îݬJnÇ› 8P”£P9ωÀóÛÙY7|ãI J.¦KM¨œ>wç…c=Þª²ÛáîfF\–bÛ”Ò>2Ù}IHïCÙQ+äÛU­û’-Šx³5Ô8V;@gãç`N9Žuš›º9(ÝjG/é’óͺ–ŠAl%;àä÷ÓBB½@¨(wçqO92“C+u!Æ’£ƒâIÞ±Y ”ÓkR@$ùWÔЕ鞆{Xsà?wâ8VÅ)N%÷Ùhœo…:€wõf´[ArcI+pAJÊqÌç¿–i\]…Ä–Ùm4Üp™%*ÑÏ$¤Ÿq÷ÐÛQ£ñZàËuIJ%˜î¯ iN½*#=øÏ?ÏY÷¸{¨»‹¢•\­ëÎae“j ê›oS„ºÛŠXÆÛ޳oo,Tg¡î1á~à9Šž§ÍÚ|§–¨­5•¶„¤!¤¨œ$n ½µÑ3.öktä;2;QÒ46B†“‚Sâ{°*ƒ³ð¬G'ˆÖêÚpúd¤iJs–J*W='XÊ6s޲М¦š–ÅʈóükÆw wÀÑ£\iï©@6Ê”ü¬vž{c–œçßU*ÔÏ t–¹ >ìf¢8†\S­m©Æ5¬é#ž¥2ß;Šéþ¶ÛmkLhhê¿>ÚB\+í…«“¹R '¼!Žné õKãkâóŸýtÛYÇíB+TØ‹y´$O^Ù—•%§d8‰!‚¹]°‘ÚOÚ ‘ßM¿JzáN> Ÿ@yÇ…lpâùé E‡T¢¬ª”¢ylƒ¿Í[¡[.ã1V -jŒ †‘­kJ‡>îÁϬx×HžHA~½ãê6´o¢AV>2Aüt©·âÏÇÐ*Ímã‹>›ÚY…M4ÈÀÆ­HÏÉH§šJGRžu}ÓŠ!JI]º[7=»‰¥Á¥9qduθR$4µ'Z°Aø‰AÇ.ÕH8žÒ,œ*›Ò8JyÖó¡µ Ê’ñ·*VvêüÅC¸!’ÏAI[¿Î&±žá訥\BÒGÜÊIÓs•%*ÈÌX»gâý¯¯å¬´éG[¡R¤¯£%¼#k7¨R§ o²P§F[L¡²–P¤àlT ”rAØË5èäË=2GD‡P”­O°Ú;µ+$òÓÿĔ癷˔–½4/©„^Òz˜ãÿnýü* Л*WMB´•\µG‚5nH¨´V¤ÞåÄñý?§ûÔt¸ÊUè«Oç‡mÎ@v•‘¾çj‰tÒÚ!ñÔ¶˜oG@ÔÊÖ¤}’sR^"gN\S¡¿;¼zÿêž]üê=Ó$)*éð„ÇXbR’¦Âïõr9Ï>ú‚óþò&¼˜ ôbóŽ?tô‚s©ŽÊsJ‰Ï<öø ïUgÉ‘õáÃ¥Çàc¨%K$ÏøU™Ãíü*Rœ‘¯ýH¤=5QPyÕάàƒË|Š†Ú¸Jùe¿Y®—H/ņ̖CŽ-µ$¨ÀîÎÜêRjÈìtlté⫟G2û¶»E¹×$竆T”ëtêR”qäOÆÏ.Uèùë‹Þ\µÍ—PŽ@~2Š]JKíj)#ptê©çØâhvkŠbæ½×]qÄBê@+qc*ÇñÂyd‘ŸÙ`èÚõà ‚ãkvétE0¯C’ÁZÇÛ©8±Œ¾ÕJ9„tV$v×sê‡à¿H~S΋k¥jIQ%§Ómnhœ ÍsOp5ޱ"ýpn÷6C OZÚi·ø€cs¤ä(ød¶z‡ê”J×уÈFJ–Èí Žçruêl ¹o?r.«²ŽeE' ùwÎß)¬õ•ä‹¡%vk\hv ¨í²†‚Fo( îÛpqÏå¨ÍÊþìÉŽÄ!Å‚ • ºVÀùz¼…GxÓŽuŒ¸Ñ’âTçÆYVBGñ{óêÀ¤½É·Diá6BZZÜØçñõš¯):mœ’ÉbWz}0í 0”n¥d güä{ê5`¹Ü¤KÂÖËRêYmEY` xyàc>;åÅ7$9Õ¹Ò¦RCm/9ÎIÉõu4 Z›’Ïai8s Çgü*œ )Í_Ràá 7e¡Æ‹ø„ÚâH£¢<´þÕñúÏ€^ sË"ªk,ù® …ÅCËJ¿B|$ùò©¿¾ä‰,ùz£Ê=rÙs˜ÁHÆéÓËÔ{Å'™e¸ ¤–¤-—48ü‚IÛpUÏ#lýU©(Á»,É+ŽüÄMÜ®¯BcÃj[´êê[ w’pwÛ?E6_¬èáÕ¨H€¹OjZu:½I #Õ߈8Á&섆ííå]”‚´‚¡ç§Ÿùå[¯.^ƒÕ]Ô䨇ImÀæŽ@\ÆÁ#Àª©Q§NR”yîNS“Jû"6Õñ/ÈCI´ÛÒ— HHS æ 5oëÎ?;ɇ ›¢¥i‡( ZÙw[@÷g=ûý¯«žÔž%¤2è™BF­‚TR4öSœùó½n´0·îޏ°KŒ€@ Ü­Yû;Dm\÷Ób"¨ï·é‰‡za¥8’‡TG,jßey·.Uªñ6Lëƒ1š#õd0´—ÔGýgV•Ž·™Žì†Ü!JØRΕ•w€9ãaã¹îåE®D'¹SÒïTZZ²NAÀCüMvQË »{™ð¼Øªº›|÷™”¥Ô­{­yÉ+ dd ŒÏ‘­üUÃò8vâ·`-E´$: ÒãJ#<†9ƒ¸ð "~$K~¶j”ëŠÔPIÇvs… ñážYÁ¹÷fep‹d8—%Äp¡¬ì¬¨§;‚AÔ°ßRÆø¢“GLƒ5õ¨“oqL%Å „ç á#'rINÇ'j\ñôY›n4ûI­8ÆSŸ¶ÝÀœcÇê„ÃmßnmIDi…Q9ÂR¼òÜà‘±ÛmérÚn]Z°þ\(ë•êQÁÝ[`œ¹ñçIi©$ý.÷t®/½&3mëçJ÷žY${=p©qè.[e9Õ5!AM½)iÞãíÜøgÄg¶ÌmÕCM®*”JH)t'm''9Ûn~ºrÊœ1¦9qn;j˜Í·§†BvVMwB,n¸1'†îˆ”Ú46\êßh ’¿/qþr)ÒîyÈmÁXqÙ)D <ˆÇ#Æp)â—™ºð«®-¶“*;}[«Ü8 žÒrœùsçÊš8DvíO©j”!)VéLjÿ>¹ˆ™CŠ«Oµn+[q¥¨¾’HÛÇx÷г¸i™Ÿ[‘ÄX‰_V¼©Ç[K‰HhQûýC¾ºé Ÿou .+ý¥Mxm‡gÚâ¬ÈlhJ\ZÚÊu0Tq¤{OBjð¹ ºl?ž½N¥r$)+#b©>Ž€?-«ýcjl´×¥$ŽØp-K>;¥GÚ2}U±¸qƒa¹â“…>‘“ÞJ@ù½µ½†ã2ÊÛ·%ÇÊòRç¥^À¤÷ïƒYnQvarSiaFôd6—“¡¦d<•¸AðS¨ œú³Q¶ã[8Ä%R–˜«·ED'ÜV·£îÆ6ï#;R¹î»Rš‚Êt$©EON<5üùó<ª3cŽa]'\Ó©’¤©km ÊUœöHðåŽxçäd©Ý^ú“¥_&ašûÁR—}\[\Õ¼ØF¶’óz¡¶tà`ã#ñÖwº!Ä:Ëê|©´©`c)$d£'Ç,ãxV›Üù »û2#Áw†rRÉ;‚'8óÚ²aÇÖïçN+[éqå!Y÷ÔòÏ™¯·Œ–œÏÃÜDÞ:”KlãÄEk~ÍÄ“&tWÜ[`†ô¨á½yöRÕŽ'X(jý„ø¦ZÊ+áñ{‹=OÏv\¶4hÒ$ö‰ÙG*·¨´3ûЏ eSbNY@PY^r6Ý>–F*d›Ì÷´µCp„iШYò¬çoT°]®(V…0þÌs $åÜ{žÎurò _®bI-ÛÁmhHZVNJrO!œ¾Z„àä_O»ÉØd¸ˆæ,×íòˆRÔmAµåG8Ry¿v1L¼håËáØ÷8%NGBCcWØðNpHŒždû©}ÊåpX n„ÒÓ’KˆÔ2p6ÁÎ1“ãM,].eñЭ±"•êy9׬Œà€¢NÛW!Nªz= Õ«ƒ©®K?c$­ñ•©òÛÅ—Ñ%ĶrÚ€æÜïKâ[t¨ëL›„éd¹Õ¾…­±‚t“œ‘±9Î6Ú‘ÄŒZJe8à[®$¾‚G°¢•¡(Q8ˆ…“ñÔ¦·÷ó5>És<¹âà’c!› C¶«£1*!M(+BüŽrF1±îÏ};[§Å¸8â’û#ì‰J³0AÁ5) GV—‚ÅlèöʶFa“6 ·_z•ë<ÍX´V2Ö©ºØÉ·¤!HKˆÎÀ ŸŸ?ç¡ù pòCG;åãÃlV×$¾@¨crŸ:ÁÙ ¡ @ñФН¡âåGJÂL’ÙÆÉåïȬn; êRT®âU·¯h$©œ¹ZvÖ)3†Z’­-¶[ÈJ0îÉ4ˆ¶¹‹m¤vRÙÉÖ£ƒêÉ­ðRäGJ†@y#-©¸8Ú$´¦óûnØùw¥wÓYƈëp»ù⤷%NÙÕ‰{‡z*:Ëg=Tx>-;Ã}†íl¥É ¥JqD võ²ÄçS写qZ’XØWqñºW£ËRKð!,ôd˜Um‚ÒbÐåµ’ÚÒ°NH9ñªæàèiäH e༔ƒÏ¹M«ç«/¤¦XjÒ; ޵$õhÓš®å²ûŽ£ªy¶À@ÈT·ZϱÙGÌ3UÒb¹¥ äBWݹÿy±^a•ÕZ•þ¤#óKD9»Kgý¦÷ã½0fs2X>_“ó¶j˺­Dz@%´Œ›Ò=ZIâi¾ì”¦äîA8;jð'æ§;cjLt¡E*RAÎ……xæ¤wvV»ƒ…%%8ÄáÜZWÏ\+‹³gBuÇRëE×;[£ª;yä©DûMJm®k·5O::…8¤¥hX^Ûs9Ôa…|d7‘J Æm™IXJR®Y °>T$*«TbÑr­dî^|"á< Ä-I)'IðV*!Ű£‹«³d)Õ %`K…:¶‘Žý<Î0MJx²ÿh+u! ^Kj ;ó Òy¶Û{ÑÞëQ)ç‚”õŽ‚9m±OŽ+×yš)y¨«î²­ÉºO×:J*Kn,$‚Nsœg÷yÒ¾tðï=bVÊ%³” ¬)by€¢r#>c¸T‘‹]¹©Ë˜Äd¥Õ´Q;êH C‘; 黊í+žß^ÞïÇR_co¶NÊ`;x¦¡N•›“.[´H-Òš›2#¼ÓÈQ#Sg)sª¤ìÛ•Åö”ò“ µÛ`à`r$w“Ï&¥Ð–›H˜«|—fZºÀÙ õgÀgÛ¿«Â«N!ia÷PQÀñÞ©íÔ¥•r7â¸^# Fj-%±;èúíÓÁ%¦.œ[®,£)lçJAñÂFGvUQ&øŽäíöc°Ÿq–d‡‹€8·Û$¨lNçl˺ž“Ö-lÆeį-! PI<ÔIǶ‘1%>C‰eEk œ…xŽcü÷Uq­y7#ZhK-HÙ‘YÜÇëœL‚N²Tr­÷õæ¤RMá-¡É֍ް­Öô—@ç¥[3ë­²-+•sb"»/<´!I)άmëÁtô;œ(ë´ÐJRÚ¢BA}iNÞU9µ(ß¡R}J• ¾ôxN!)êƒ+QPÓ Úˆ’$%KŽ[Ó‚I?'œúÙe¶”‚#¤ç8ΠqìëT&e¼Ž¥:æÄcV<ëèé_$| nM:z׌õ\n ²Ãq$8_y}”ž¨ ü ƒÝZøÆ\fxöå&Þ©u—Ɋµáq+—h\ª»¾0ã)µ¡(RNBW¨Kõ ²aئ_î¶B޹‘ã†Ê‘¾QïæPp|ê©ÆÒsfŠOL£­ªéu»\íKº?5õ™½j–âÒ[*B;$½ÝÕ5…!áÂ7fVóši¸-)a‘<½jçN<3Ñ<˜lÇ‘u¸„*)[‰K;œ©:NIÛ–¯u ~´âQt¹©h(Ò´=+)N­j:QéNv98ªûXOH•dkqò=öÝf¹G…Ö—Ü‹peÇŒ’â‚L̶%®dlsÈSü;Ž2»5:"Ò…N’ø*PÊ\Ilwi>Ê›ÝxχàGLKk(|%/F„´ižxðÁÈï5^p5âTž+ž¸ÑYë¤I–´7ÖSÖ:•`€3°>U%|¬äãe¦å“Ó(%˜È )©[•nwóû)Z·84Ô¦¸ŠIo®’Ä$)EcÐ7ç«QÆÇpE4Í‹i%»¥õ·Š›Z‹aJ’)aϸV}Ê»)=È'¬9Ä—0G¤( ŠhPÛ&´_&[®7Õ·â¶€+lõx*Õ…gÚÑ謌iui>I"µß*³,ŒGX}M+]ë¢G#Ý!¢K? ¾BTHæÛ`îð«Eîá÷"¥‰0¦@ÇW%żœ¶Ë'»j¢>¦î‘,ö^‹.VÖ^D«•¹Ç%¸ÃhÖ•­HI9ÏŸ†ÛoVRúNvc“´Yœ›ØÍ´õŠ šAãtö4 óçÝμ<ªÆ6¸Î?à&íИˆ‡.’(e°€HŽ­ð;þŠÅ=#^L7ãXA…>6†uéºB<°@D ã5¼ñ]êãÆœ¹Ö%¦ãdÄ¿ƒ²hÒ£‚ JNyo\ÃF}ª»üEkdv,.'áËx‹á•?q·OR¥= â•/VO"FtïŒOn™ÃÖvd7 ß"K²—_yõkuÅ€wVä„ãò½Ë—MwYàø ””~z˜•`z“ŸòLÞ0B–ž·ŒrêÉÀåÝ^•Ï;Ý%‘.)LðLw‚T²¸šÉÛ` <ùŠœZ\Û{_Œ¨ëXÊšVå'8ïæ¨d‹•ÜKé‡áäci #úK¦Ç/PQôΕSÝ2SV3\m3Ž7\ãÉ™oš˜±J–\ZÓ¥)?õO¨ƒ±íiçŸ<Öû½›‰æÛçBKïêIDFÊ›m âHÐFœcKhB’q‘¿#Í‘w¾_dñŸLäÈPO°%´Iºp?h;ŠæcrV—¾‘H»"Ú­Ô–d‹*RÒ¾0á°$&c„à¿;»ãSê£xw Hã‹v~¹Â{ÒVL‰Ex#ÑÝÈí(îv«Ê´ÑóH=,‚Š(«H…Q@QEQEEPQ@QESýV.¸ÇB÷'™@[ˆuµ%$d ®½Ç•pŒ¹e(­(Ê8HòÅ}ú¥¦G·ô^üÙmõ‘Ù–ÊÜFý¤…n6Þ¸‡Ýá+¤Pç À—FA-¥J-,xaYÇ–*š&‹©\"$T º¤¨ÛÎ0T@ååY¢4‡¦[J BRÎÛàÒÄÅêÙSs°†€Ü$êZ†Û`r» ­†ç4ñmÔ9¡1Š~+x+<‰ÎÄzª9›-Ø·¦TVÐêý˜¨YRW€·yiOÜz©¶ÛrHðD4Èë#õªíœ©Y8V4÷¿€ÅeÃ×5År[eˆÜý Ì'<ñŒÌòùë+M²ÄÕµ!¯‡äNq¦Ò¶ËrN²…jÎF䃾;#j•ô! Ý„9Çž%8°Gx#ÚF0wÏ:tâ6nV—RJá/fÒ• È òFw÷TWÑØôî¾;ÚÜÎ¥¥ ÀQõžîü|ü*ZX‹“–ãÏÚ—Ã×7 e$ÆZƒn¡µ”’°7‚=Dw Cn“è®Èn Ÿ.* Ò #˜Á'ÛR™‹ÇÊsJe’@©Z2¤¨ã¿mCm·Fá¸ÃRUJSn(díàqëîßñÊk‘{K›éN0•-æB\S‹mµ«OzRÈ$yä)/ À~WªÍ 4iO<òÛi™-«rwIÀ9îÀ=ÔþÜCà˜ñ¦”õ­/¬ý¼|lý¶¨œÛ¶Î#Uú*5†d‡Ãd€’5ç ïT«^íˆ4Ðëö»¤2¡zC–Ù ¸¥&3êÕÕ#ž’HÀÆp7Üãjmsáw.)‚ûîºúr…%¹N¶¥we#V“ì¥WÉ08æ[×ÈŒÉ7=af2Æ 0^“̉ ó<¹Ò;JQ §¦©*‡>òpy,rHžyÝêÅR§­¹ËÌc¼¤#Šb²K‡«m¤ºT­Jñí±æ9à“Y—h›cE™ *JS’¤í¾¢vxsȨ|w.$¼Ève<ûŠÔ–ۃ܇, ³ê§Þ'¸üh¥ÎnmÍMõR$¶ŸÐšÛìE@¥E^W'i<«s±MjaÑíÞÓ ‹]é¢å²x\wÆýáÙXÆOŽ2LcÇ„˜¡l/ÒpkKÅ zÀ93Xî¨]¦Ëh“eGYÄVp·4­h[ÊB›Wµ$ymKm·‹G E}ò»êÙh¦>¬•-c'Dz~ûÒQÌw6VyÒ‹n´ˆ±°•„!9 ƒ’@<‡vÞ>TY¸VxE¦lT uI×1née¨©Dò$ݱ¦XÏ\.WÄß.05½Š.Û dã9ÑŽáŒçŸ}:ñ ߊﬦ ýD jN£2t·Ý‚­9+#ÅDàòçKÚÉ=Žå”¹nm-ývqz¤Eh›]¼¥*qI:79NvÛQ€q²|Ià^‘ÙÞ‡$‚2¤´5ug vVs·pd÷D¬0¦Y§¦ád¾Ë€²œ(¶3¨g$ìSär*K]¿àô.{mÊ”PJ‚[ È籟pÔ®U^.1±¶MÊ ¿ÓiyÍ<ô))Ç·öoZ߸Æq®¢d¶€v eŸ2¬}þÊḦ¯KS %õ%'>²sKQ1¾¥µ„¨áGD`Ÿ +ã+ä®eK‘§Ô͘ª—¥",é èe°„Ÿ:Ñ8+¯Sm´˜Ii%)Ü•¹'<ó·ÑX6Ê:Å5çÖvKMIîÉîùë{±›€ÓŽHkìà±7ŸÛ`íÝ€HÏ9ŒºÛƒJph-‚’7ÖFô‘QâGX„¨å'4í'C¼ÀÜŒã,V¤´Ò@Hìøó÷U«DPÓ= †×­ (§æÅoi—0®®\„…åoòƒK^ (œ'=ÿÕZÒˉa9ßì+£<ÖÌÖ†e§t\dmÏ:Oâ­n³0 ›¤¿aHüT¤)¤€Tóa=û‘Yá§KyPù&sµ«ë Þ‚?ž_•$g“¨p¬Z³ÛRê$¤ç‰Ó«XNÇ8ïÅn ex+Âvÿ%32SzÜrµ½¦‘ÕÒèNåIÓî"•*sªV´ 'pB |óŠg r26æG¶½g°ÓŠJ3‡:­Ä’»CšÝ¸h&3„÷áÞµ¥2^Iô¾±d‘«cëÅ$D…:²’âÂÆÄ•môRÀ ÂQÖ¸4÷ …vÖhÍ-¨ý™A l@€|;ŽkRòâ‰iÕŒŸ ÏÉšÍÔ¬¶VwÜ’rE`"/«!NƒÜ¬”oDŽf}Ų¥# ”HN|¼èmI †VBFÙÁ>±Ah+²â– ¶µ­!²2Ö±ÈÅ]°½ÏV´V¶”µJH>êSf’—®  œ8ŸŒŒtÇYëeçV3¯—¿5ê'%†ß”ˈ=BK‰Þ¤´,§ç¢~œç˜­©Æ7çUô.>L²¯Î¡!õœÎyãñT…ÔbèqÕ'+I8'âó{«"œ[ÑžÆVIÑqn U2ë…ňt€ ߘ8I‹%#îAüt™=±Ï–Äg•oŽ2‘Î jãk5îël„å¾Ó-Öœ^¥ih“§˜ãð?¨ð;ãmµ¶Îjmx»ÄB˜më‹¥”á%äövåŒíH~´¤orýh5ØÖ”U¬U:*NälðO…càÔçà üªñ\ÄàdÀl}Ö‘ÿš¤K¿Ù¹|!=ý±X'ˆl©^Uq3]íåÑòeÔb‰Á|F‡rA'<ñÝʼÈI$æÞ§Öãð5±5#B1î½|ö ¤¸#³Ö¾ ’Ä«áK,ìÌ•r³¨¥Q¢Ý\ÐÃú’£çÈøçž9Öø–/R¶Ê©IYYRQ•+ì ÿ>U"¿1Ýàè›Sm1/K)þ×9ùNkF”eÏS澑¹.Ö1á$•öi¹¡—–ÂY ì…v#š·øvì‹gHüü²ÒmËbB]X^V—K¤vFø:Û¸ãÈÕ 6öý¢c‰Õ¶ä­%ÇT5‚¡°õT–Á!÷¿<ÈZ–øŽòËà’4  ŸP9ƨՃdá+[~âæ#ÀvXYq•†×)ÀÙXô$d¨ïžá\ù €çÊ·"wRâ[q¤ºÙSÈHÒ§iVÚ‰[cïõêáe* áò–Vém™% Sƒ*:[IÜîqƒþsSH¼Fd_`Û@x~ ޼ޝIT²¼ÛF{¹Õ4é*JÑÛÙ:3ŽÜÈ­Êq%OH–ÊŠÔ£¤•·;;œ èÛTÊTÓ|E6ZãW—’¢Ð!8ô–ÆOvºº^Ñ(K¼Åpý•ÞŸI'HY@'Çâ×2Úô›ÂÝKksÞp¥$àu¹ÉÇv@÷в/s‰Ýê=Ú–ˆ™JYqy|ð¡ø©½kü÷A)¶¾­÷øÎ7òïN6¨²CVsS+}×§´…EñÝν]‚è²tFPR`z2um•’’}ž~uÒeîqËýôESk UïJ{*K)Üsø©§õ¡Ð…•,”¸)ìi½Pž¶Þä8@p)¾É=ÇT¥Ù«[N °´•$€yà⮟yܪœ¬Œº˜Ûu‡€æ¤ÃxE.vwõ(¥^Êéþ½ñ3³~²ÙBˆÛâ4°ðBÝ%a[’¬c»r F‘ðÓÊ=´é î¡] ÂxUõÕããO‡ÿ\ÿÞÉæyòåßUU¥Îí\¯<¢¬‰3üiÆÉâx–,&×5¶TÒ’‚èÔ’Ju` ÷gßÒKœk-«\)öç Hx7"#†RâÒZTœiÁQIñ¨‰B~¸ÐÞ‘§Zë ÿÝÖ~0Øúéo °QqáÃm‡}2»NdèíñËG²„nÔN*’v»$¼"öÍé’œØPfB¤^Ÿ°IÒ0sË4èl–æÛCéjÐZwuöÞy½KREVÐWÕð•õ$¥\¢_ dÔ‹’ÚxrÞ2¥/ó¢qéhW(QêÆãŸËžñYÝ6ÛÔÝ»žÒJõ²ÔÌÖb¥|?é/îÓ,Ú‚”¡§VAë9`áŠT”¡‹›V§/ž‡-ý%¶#Ãm%Cr2¬ »üª.ús¤xü´&Æ¢zÌ€8;Ï¿÷VÊévÙÔõ)K)ÃEXa@ßQçþùªû?Ùæ¹e—k‘mk–d®Pê”íúââÕ±GTÒqåñD#Ül“fËŽÅÎäy×¥­ F\°2N£Ž[U¨èmPÜ·Ò—“ ¨í«|¸®|á%¥28¥×m±¥°K%À31`‚ W†hìÈÕÒ›ktY}Üíš­¶ÏL¹R™–èSŠ˜û­ 0èPÃÌFqÝ]\›Ñ×õD¶´­+I™/t¶>#ýÃçïç]e^(¨«#-u¬|QEi@QEEPQ@QEQEEPGÕ`âèbâë %æÊdó®³5¦_e:”¼„ä ”{³]éõ\°ä®„n‘Úηm)ÀÉÉ&¸–\)‘š‹ˆ2]C-úÐʆOy8s$ÕUËi膻%¥3žI”Î<ßÝJ•k‰Ô¸=…kÒ°£œ cs¸Û祳xfS­0ô4- %Ö]hìyå*ó廫(ìßYH/%çTR iGxm·¾¨i­M IŠszíR'7r_’$ h% +¹;îŸW*h¹°¦a„õHeàQÂ@Éßsâw;úñΜäþ´¿ÇB”NWqá‚S³[Wkœë.¥È´¸Œ”$“áæ|«SÄÆTò¸êR©8ÊêFò¹ ±ÛdFVÅ=Rñ‚±œcº™$Æ”™ |8ÓM(ee¾ïY>u àE»oY¯f5AÀ©Rƒ. ‚ùn“Èã»—Ýã΂ûÐW3ÉÔN¸ÉC‰R{Ž¡ê;yŠÍ%gtN2MebIqš¿pº]qÔ·rƒŒ)JÀÞ9zûÇxÁ¦™Ö€µ!²Î—[QÖR VǸäwÒciî²ÚÌÆÐ¢r”#$rÀÜ g>à«ÜÛûŒÚ8ƒ‡XRKkžóâ!@lT­–1ááRÝhE÷^ºŒü7Áá‹íÆR¥¸~އ2{NDòǘåãµJúM¸úOUÃÜ?ríqVV_ê̇NÅöp‘²Aß;g½þ$¸A¶7‡ør\·ÔÃŽ¼³Î­;s·vh¢ì3kt3¦½Ã¼-ðä…Êw%ÔêL`­Šuxžÿù¯‚¢ðÃðvñ~M¶aY iè®:’Þ6ݰ{óÏÊ’Y,r_Óî‘ä£ÉJµÊ¿»ŸË/І›s¬ôUœ-ÈÏ-€öî+•%ÊÄ¡m†fšàû,ÿL‹x¹ÜB’¦Ù†Ée ÒAZð ˆÓ_ݯüU!¿ÎÏ5¡ ¥E´Ô£ñ•±>=Ù©ªŒwÃq”ÒJrF…a'|Š T¶é$?o…WÚµ²,Tã{¶C⣈âZµAžе8ÚV ‘öØÜŒDâ¼´YŒ|I’…=$+!C%#nàF3çôTÁ ´Ê€¥`î”dîu½l²]IÂJF$cׂjrÚÅŠ0\ÆÊT4.2œ$`ånØÅzÜ܈l̤r;±ê§µÇHž©ZNÚU“êâZÔ€n¨ÿ`·ÏQÕ’îÆ:È-·„àŒoúõuÌ¡Ô[a)ßüiÌ1ÈõúHX*샜Ë'ouxïZâpâÒ[' BAǬýË>‡s.¢7 8:±1”¥M«(';yàÒTÛžžäT²V¦R„6¥cžãaï§3-¾’éB2{HI Õ·}%ô)ïFHLÄE`´½®Ú°Fh.Y«i¦“2bÚ’HÍÈ0¡¦BÓâ;)RúÅç¤éHõçÕZÓnL£Ö5%³¸$¶•+³€·2Ìh ´f>µ Ècr| '8òÛÕCÓ¥–‚RÄ‘ÜF‘÷)©kÈóÚö±oJ½L¥â2x¤¨}Êp|Î)ÇÜ}XÔâÀ:°TUƒãŒs¥l3sZŠ€i 9¨¡)'ד^>äÄ‚ÚXKç9.”Ä>jšDlú[NÒÉær“µy©!ÎÖIíqŸiÞ…úrÕöVØc)I?5$ꥅœEbqØ5+qo©.i=¢O=ó“ì¯u!iûIºH–挟E{Ô5’Z™¹TW·ætã#Ù¾‚Y‹IwRZBˆý²v¥™­eM“žE;U*r•ŽÔwˆÆÙhšÉÞ ôGvïꈮ­‰d¶–3iÅ%?dZ”AÎ8õâ¶*BA*JG<«J~,w´ç;¤üÕꓨôŽ{ ÒÈ:wäjr{kZR’£ƒ¹ÆÂ³CéÉR“«žFvå·``<´’¦rtŸ£•bÄ ,;«¨uDr=Y®èK±KaKRR °ŒççN1¤§NËÀVùW}6¢4‚RµÆwPïÐkaD¤©?Ý ø6v®YpwÕ p,d¯ æH5á‘*PG2~^új-M[Ú’ÓçvÐlJeƒ‚Ë ÿ’~ZeG;7ÐrT„©:RÙN);ÒJÊ„ždoŠIÕÌ$‚ÓøÇ0‚=Ü&,­Î~-±Ì’7¼¨Îàa)_Û';oËë0ôy,Fi/:û%  «!dìi:„µ/h 8ÈÂpiÖÆä–T¶LwBã"Žöyw%Nôì1q5¶É³SÅ76êꥳÖÌ\ý©Òr¥g~` Žt‚ß×ܧ–‰%o„…¬6 ïà=™;R•Ù”·XPaÇž+umJ^£‚IÀß$œœU©ÂlDáËkªn|G¦ÉP\Œ- |Tà<ûÉò¯ ´åE^ÎRþþöÒ2€Ü¨á)}!”iû)k@ <Žûæ–‡{&›d^S6rzÌ% @JJ”9ÖÔÊŽFD†¿¦+u ÊpNJÌ­´Æ«½ª;ó Ž­—Ì㙤鵰?êǺžd?IÙö‰û±Hn3Ql¥Åä$öˆÏ~øt¤á´q³B-¬rêÓî­‚ÚÎ> ÷S‹@v:_‘•ЮɰhF;zK?Ö Œ*©ÞÉéì Ió~e)$¤m[þ‹°J·<²šÛ1l†ÃíG˜XÀÛMÓ$=A-©¤«b•‚GvøõÖ MzÊ¢Töð!)Yè,ô&‡Ú ÷КÐ)X‘8§›WŽ+råÅR4%qP3ûaŸ}kUfå–1oð;› …ZìŠ]CDãlÖ¾¶/?IgúÁB]ŸÓLÿLUölи(Α]`¢âÒ£­eÒ  3Þscþ˜ Ì` I}‚®X.ŸmBTó+4YJ´©MNÍÛ­Ñb¸?dRq£#•B8¢}·‡îÆt<€×£³aYØyäì©Â&Å ~xdgÅÁL\Bã÷›D8–¥¡H~jÒ¡ƒÏÏ/XöViá!—-V—Å»®çvÕµè*á/‚ß··f[n1Õ’®ÉknÐVû;©ƒˆ8† Î8±Éa.¼Ä]jÈNJÒ¬c8ÀÎÎ*7*<ö®7²Øn «I}˜Í8–žRpI ó#>Í©×ÜŠÿ®]ÖÜäf—¡”®:ú ²G2 BFæp3Šœ)dYb¬Œ8¬eL\ÝZ®ì±m\HüØo¹qf-¬¥å4ä´¤cJT7Ç2•§g;š"÷kr ö•]y|˜î4JS ÛøÊœàýtÁÆe¨÷õ?‰ SiSa±­¶Î44ä'âçªÙÂ,¢ö¹Š¼:õ­ 6l¸Ùíq€ÆñÀßaí¢qœ¶F6îôq;®-æZ±•êH*šjSýT¦#´þJT{ˆòöR®2ôö$à´üÄ%°52…aD¾q‘µG¢±w¹>Ê—ošÂ™Ø-Ô)$dà‘òç¿Î¾Ž†”ã~†{ ß²µ*I‘2à†ZA Q œ“‚v=ÕptmÀìß. Ø¡Ì[m" ¯—\'YBw‚‰öUA!7ø,õQíâZ–èQSÌ©Í;ymS~ønççðÇ·`e1äu+I\+:C`¨žÊG‡ã…|Ùn™dæ]w>‹Ø³X.×'®Ån¢#ÙB¶u”wžÕ<87„Y˜»Óq/ åm)¬ukÂR1§–Äï¹åšðÄûe’ÛÅ,Nã)\Ir¼ÁƧ£>„åR’ Žc=É 98Ç:‡ZïÐmñ7NøMÜŽ­AÇÒ¤ƒœì•`îùåžš›M·rM¤ìû[œ‹ 3nï¾p©Hs%)Q)QA ' %j*#™ èÖ\¯K–Éc¬SKë#%Eõmߥ#ÙŠ”}~²Ô˜±íÝYÛBÂ@uØ*s«Èܨ¸NHߟxÛº¡œ%i möeI´ i#Z”NNéòçX–Žäeª,«eÝ êaRˆ#!Iú·ùE:–ÁíS{Ö®á·-Ò­weÜ¥. jc¡YÂË…[ƒŽàÞu‡Ãöõ¹Ô¥K«HÔ…ëÎ1mPÖºÎ-»¤R³TW%Õgã8£ï4˜©LÈÓÚBß1zÚ°¢G¸Rtµ=dj¸ øÆPùÅj'fn´ ¹uˆÐÔúû»>ÓÑ÷ [_và™ªe*q#L‚ÊÛJÐá)PÖ”qšä…-ÞK6sS;l2Z,—wxgˆ¡>Ö©ñn¢BÚ ¡­8Û#z‘ñ”8× ½ëÌrÔ¶q ¨êëRS”U¤‚Êòuº}‘Ž !Soræß= ¦ý×AC‰Õ‘œœq‘¶iòçq¼1we„^- ë[*ZXq@¥C=ŽÛ÷ëk“»]NE¥•®C»ö·âñÌI×'“ ¶ãRVØZ[QŒ¦ÆS“«´®^U¢|]é5ÎÓrHìuJ[Fê’Ùqœ“”gaöØ­W+ìx¬-µM—%I@RÖÄ–Õ¨áD„àNÀ{|©¶#÷‰ržb?ÀèΩ)rYNláIçr ÷¼!idÊIMgÏî,ÁrºHeÔ:ÔA Æ1ƒãU· ‹u²õzbéz‘lnci ¿8T—Òæ d*Rü90¼q|&V·‡Z18p $±Œ„Ëaì4Ö›w ¿Áj*r@ŒUÀ: Ð?µJʾ61ã\¥Ͷrsͤã¢ÖáHéê5ÎÝ>LèÎIw¾*í0êñ‚¢p3§Ãoeu sCv[,“¬²¡ÜÛ— ¼ê@/…¬ù;[ éê×EÝ«;´º ¢Š*Ò¢Š(Š(  (¢€(¢Š¢Š(Š( +¿ª;rº>ôgŽ–ÜœÂTvØy×>ýlðúRÕ1%¼`«Zq¹Ç…^¿U Ž3Ñ,·Zqm¸‰ )*IÁ'pG*åž.7|eoC—)¤ V^R²NÊ$wVL­4”0²«JUµ‰Bø~Ä•[Î8² @QË î­­pÕ¬4 ^žé ýƒ|`x#qÏqHn·›7ˬ6dËK]q¶µ>ê²°Ü«}éÂWŒÄl¾êçì„äŽÿ!Pìäù™TÉ+v+K¨+ —âÖ“VšÑ"ÅÉ:CÜN W†T1Þ1°Ï>ê‡ÎJDù!9 >°2¬ŸŒ{ûêqaqMØ ¤1,ehp%*ß?>­½ÛU7w±»‡ì`§{ÜáëKN%ŒJN0 Î9gqK ŽÐ”) ƒ5Ü,ÃN<@LJA8…÷½ÌS¡Ä((VT;#Ìÿ“OÌ@iþŽÄŽ¡/>&éIR:Í ð@Î*$äíq[éQUo½‡ƒc¶KFÇw}ž´¤džîʈÛ;|¦–É·ØÙj³IŠ—0 ßZP{%xòÛÞj/Ø×X‚ä6z¬ï!*8;l6<¨¹CŒlÅæ£²ÛÉu#(H9©Ê jf£ûY¨>cóñ,¥Ö˜i”º·rnBIøW,V„pþ€  )Nu¥CSÉÆGaÚÛ²@ðÛÛL\*ÑC–½!ZØóñNûøsöTê\Ça <ÊÔuƒ¹ìù󪔮hÆa¼šj7½Æw#pûRVĦ´¸êpmài4ˆ–=ÖÌÜi{¥~™:†{‚Þ2¼ÓäI˜¶Ê›%J}¯·zAÇn;ƒ,oÂB59)ô­^˜˜äá ãrFª”;ÒÊJ¶BЍž¬~fÑoyH×mt¥µ’Uð”e¥c¸l÷¨û)L˜Ü?´ªE©ô²Hq.´° ä‡ ñçøê±uaùóC©IÒ¤cìáÞiÏw.|ª_Á03…îm4ÃeäÉhnžiêÝ8ÍI¾þRRÁÛ «Ü{ŒÇ Ü’±ˆq²@Au) ƒƒöØÏ·‘¤Ê²FÂQ 2$TâHÁ9 Ÿ Rn†ì³©ôv‹‰XHín3Œãþ><êq,ãN­ÆŠRW¶ùP9 `øm¿‘ñ5ס…ÊÄVÙffQ÷TúT‚´äÆVùvxî8T-¨@ I@TÈè*õvÎûsüR‡ÙRä%-«QÆNR|ŽsôUsÒÛ-¢÷o},¡ø ZÆ9¨-i$í¾À{ªµ4a)võT/aõÈ-u]{‹XëA¹FNU·‹¼¹ü•½Ûm«CÅ ÇPZIeH’Ó€?j‚¡ïÉÑä›kv+‘¹úCHha—™6òÈÖr0”q¹8ØlitWØ/Ƙ”©FTn©EÂ’I dœ‘±øŠ®êᙕ¸ŽÉ±rcZŠœÕ!r†ÔIãm±œÔ[¤?±ñ­Õ œ Kt }ºªk“)Ha´(èJŠA Îç9ÛÕP®’sõõxÈÇçÇ¿ª¢´›¢ßêpªJì»è0êVGi^Ó^•¨d“¿:ÒAÏ:È(àž{ן™Ÿ[•>Fæ–s’¢1[‚–R¢… nsÊ“¶NàœÖÒH !a$§ îv2}HN »$dêÎØQõçβRÇ=j¶&µ¤ïα' v±ã“e§:ÒŸˆyŽqYuĤ’­ÏpåZq§ýu˜^‘¸#5Ï©>Î=°Ã<†‚J’áÒW3݃ë¤Ï"Dw\CëQQqÜŽÐ+V m³ºäÊsñÖÉÀçå¾=Uè)/8~ʰ±¹íkP#=ø Œ÷ãέMölÇ4–*+Øÿ!#ÙÇÇ g»Æ™®JiC+=£öÛò4òA)QÁÀÍ"Ö¬µJh§EM1ŽË=ȲLÖ¥d´JºŸÊÜ) *$ðF*/|ˆâ]C©J’¤¨¨c©æÍ0J‡¯¬ äk¸ˆþò+áÕ¬ÝòØpo­.vÒžz¿§`¶Ü@”ʶԠòN1¨÷ûwÿ ª'Å7'`FŒâV—”° P 4í<Šsáû³+m2:²¶F—ROqæ=c窲ÍAK“6ªÔeUÓ[¡ÖJ’~Ü„’JUËòyyÐQÚ[ŠW.gjÖúCB[Vƒ”žãX’U§'Ûj‚lÒàÅE¬(”`ƒ@u`iÕN¥ëIl‚•`Y ¸’V}õÜÎÅ}œo±µO‚6õÒ«"úË“ *ûqÝœn)¸œäááK¸u#á¶ÚJÓ¹õŠ»'ÚÄÅÄ –¦œ‰eâÃðÞTK²Ù9þ0ûaî5¹Ú.V—?=6¾¨«xd¡^Þãäw«U-%$ש<ŽA÷ÿÊ·–RêKO¶‡­ŠV¤¨yŽGå¯^–.T÷ÕŸJ ”ò~ÈŒsë¬J“ŒŸ}O¯üm—í®ˆ¡tž­^I<Áò9öT6ti\ M޶‰øª#ez#^,D*®ë)”ZÜJ”¯žMf’Gy¬‚sñUYƒ…m_r¶³ÞMf·3F„žúô'#©è$Ö@Ÿ3^`ŠÈ¶ÕÓ—3škµl'j ±º-ŽL yXÝ )d¡ó SÀÅjI¹³ÚO†|+™RZrrÜRÄP¸Î>¢IÀó5‹QË­©Ä©'¸ó5#TÛk–eD(I ä( `Ó;Ö÷Øc¯ õJ+ÍV¥}Ã5Âl‰-èl:­@ySúarjc8Ò†@ ÓB]RH-’#[bFrAZÖ{³¨šëJ÷bì”ô]%‹˜KékBõ)9•\r·È{ªXx69×:Ú&Wæ$ê[j:³Z¼ .á5°ë¨%+‚”vó‹K\ÄàÉ4«sJs±¬ð^E³Å[N°ÞÎ4 |Š‚† ãæ£÷«˜ie, V ^ˆ´ç¾’Ln:»!¥6™Ná8ìãZ°151YI çïŒÒþZ¸¶rŠiõ¨g‘:Îæ˜[H' vqœ¤÷wŸmJm©E…¡ Ћcº%!@°IîÎõä¹JØÓZŠÒ“¬‚¡Ü´ã$÷gÈV™ X Vø9Øs4Sge‚_º;Átéýt¸:4ãWºš¸Nuµé-ƸÁš—* žµ(I#íH;‚{·ö–ªóa…® v2TÚžlä:“]Ç'ßUÑù˜+)ÓvÈÙ𛀆ëðâÈt d„ œê¦uþÜë¥3œ”œ€³é©=ω®÷DºÝ« 0I×v NIrJIðªÂ÷Â|P™2'!Öæ:òŠ–®ÖIÎÚ¿ÍY–ŠBjEj‹rÉ"Ý1)DE0’yçÔ9SÊÅ­„>âÚqͰp¢ëží7×àNTIáæ@Vq+O¬Ul»2\|7!£Ìê_ãV*Ù<âØJ3z™ô—z…"Dx[iVâôé+Yåç€>*Œ2ëÝXËõê¬î€¿r~I))ZÊ“¥\†vÁZTt£¬5få&ÏcÅÃΠ^XîæhCëÕ³®N9šF¥g›™Ïvõæq¯ ¨¿´ö ºõç²â±ë5yÎ}býæ›{`ç“o¡“\h”j­šuÌ~ˆ¯y©gñ4‹¥%cÊë‚pé#¼{ÍCX=üêOÑóì³Å¶õHin„/#¹[gÙš²Œœf‹jÂ5)´Õô&_^U;)… †ÁÿC ”ƒA‡Æ÷?ÑŸy´Ÿ¹5g$Ùc•‡1ËH¯}·²>Ã9‰¯o'V|çoo2 Ü>nÒHT™¤gž”•|¦ŸíýÇÈ2ïÝ/Hù)íî)WÚ#À Hï:¯úÃï®åŠ#*µ¥Îij£nµØ¸æÅ"#m‡Œ‡H981ÝÎçÕWõs‡E—g&ô•biJÈëV3ÿÈvº>¡;_CÎÄ_>¬(¢Š@QEEPQ@QEQEEP_ÕPBzœIÒíoá¹®Vè¡ 8æß¨>ÊwþƯ¦º£ê«8èròí|æ¹c¢gŒØÎá,¾üf°b½"=|˜J¿ß!]åèŽq-é 8ü‡T–´;”z°S§m‡²µ*Ká©/-Aö'{]²vÊwî­DôcÆ·÷u?­.¾Ò1ñ´í¾üü)*/e‡-ŒTé^Ã$ }§¸yU¨òÊY3ßPîyd;žÑ«ÀÓX ¬ªPIl•§Jñ¾þ5V¸=)þÖåj#ßV ¼c‚‡œÇçp¼‚<±øëÕ³ÚâJÔ£ýò+î+u¿®i¨Ž•èJ’;H#=;êkh•ÔtsÖê—-DR<ŽT<~J‚ñ;£áù„’rPwîcôu»§¢;ª)BV¥äy(ÇDÒ•ÙÌeü’á™Ë’ÒÙÕiHANPÓZ³±—i­Ç\vË,Ò:ÛV§BwÛ²µó犲eXާT$-IÑ„…$HØTþ´5k•))Ë©»<ÿO2œ[G›„v¯hèþR#ñ|â ¨.áC#½*žb¡ý4!Aû3Ýaw1œF¢1ÉÂ@öj+žü% 8òÒ¥(’ㄤ’2v; ç¸m½D:[›L;J} [.HJ€s'« ûÁùj]ÓvÄÄEÀs’Ͷc.@nZC¨p¡Â0”3‚’?kî­³$~r„磈èCêJR‡ÈPs}€Æãä¬:'1ÖJ&´ë¬¥jB1¸ü·#å¯x†m)BÜý)8À j%DŸ F¬¥èÚ'ŠVǯ9ØfÎÕn‚[^R³¨` ÷òåM=$ŒñÍß™üøïáZøjDo†™mçJ[PXVV@Iï±[úAŒ§¸Òì¦ä)±én€=µxÖZŠô_¸ö0¶O~éÀbyxPH)=þªÙèJÀüú¼øÆ~jj'L×’±ö¡)üi¬5ÕŸBªé¢0í ¨žêÉJØçNèÏ:ñP–&{˜Îý”gûµš ):³&R”9iBGâ®ä·2=£nù@(¾’Gz³©cc°­~‚­’&>Sþ ¡Ëb‰R½>`#íPR1òW{;óPÒóY´£IӤ绱¶µ4§A9NïÞ“¦D“ûl¼ ~jؘHH¦ÈòK«Û䢂¾¬J´ÚÑ\< 7ÈŽ8:´‡A:ùlk î•ÊëAeå:ëXæ§œ zðw¤>€"árB¾0Pw'Ç æ±K,Æa1Øq×¢¥8rI'8õoßRi*m&Q)bc9+hÑžW¤áCêÖ· ÛÉ<ëÅ•Œçl ý”d¬ õÕjæ©ÙÜiº0ó“ë8¦(S„²œmϰ«°êGqñ©Dà… ± #G®¬¥c‚NFþ[ÖªM;Åž6.. T†è{¹¶™ÖÕ²„¥ÚÇ$¸>*‡‡‡¨Ò8·!":d>ÚY’Ñ ËIØ,ä¯î8> ƒÜs£‡föLGˆR;$ï”ÖÛíE¡öê^RNàî;w—Ö7ŒmÙÏbùÊU`±Uß5ýÿv$¶õuñ 9 Z2¦ò6#¼yŸn¦ßŽáÃo4¢>0BÁ¤‘b²ÛZŠÔØÆ£Ìâ—K*Z’‚z·#d¨s1öŠÊ­{¥êY5 –\ÖCJAuX äç}¨nS lòywoƒ[[*PÀÆ{¶¯TFFù÷eu¸ÛcLÚ´kTÈàeN„÷î 9ð¤–^½°„<u$œã é¿A99Ž8_ZoqÈç­8Îqñ…[‡·iSòjš­Ÿ÷¹h0¥`gPOvU‘øÿ϶•¶ãeZ[ñÎÀú³IRwIiÁÌunÔ´‚FPây’Œûë^çÁÝ_Œ˜Â"mÉ2Ðâ#´’ – ’|yrçÞE:[x%7&Ö‹‘„¸©-¼âu£–ÉïIØ÷‚2EW×¢[ã»RcÉJ_ŽÓèÇzT ŽãÞGùÚ¦JB!èqEN¸6>¾uóœsŠb0RT¨iu¿?q,¤µ=ô*Âbdž–åõd¡öf(¹«Ú¢“ê#Vßz.âK|_M·­«¼P¢•þÆâš~bO•L8và»]ŵ¤Ž­G Û˜ï«7…p©Hw¬Ô¬ä/ïîÁ¯š£ô§‰pÊž~tÞÒ×þÁÒŒ´9vw _á4§fÙ.q‘•-èŽ% xäŒShAæ>£]…&\vnŠB›}*$(‚¼÷ ÷ª¿¤Îa_ý×…Ûbô$­Ø‰Z<ööwò'Ã}gúyOQSÅABüÓº÷ô*ž«Ø£ˆ à^ŠN½hZ›u*JÒJT•#˜#¸×©Vãú"×cV z=õ ÷UXP•[½é &¶]Œg…jY ñãJ'\]˜è$à•4ó­íá)繨eB÷Œõ*X¶¡àݼ¶ â•¶ûãεÄOX Jƒ[Wnw^FHñ¨¶¶:‡N°›ËìáIi¼ïW/2ˆ‰RšÓÔ²0‘¶UV9ž‚Ò¢¤í‚GÛzê}m’ÛÖ°ˆ‡r¤ƒßX1.R~ÂÈ’‹•мˊi 'Ú¡’Ô·\$øÒÖ'áurJR¢N9Ó-ÞèÌ<,v‚»«, ïdXR!9ÕqTÖô(ž±yÁþ9¦A '*S+V$éÓ¿øyRž“%õ¼TûÉ@Ã…KŒóRª:Ü)Á@#8È$Qï¨ÕÒlú¬ÿ‡†ƒâ¥cëvÛ·Ìxûëmº\vµu< ßSJ)PÀÈ ‚œàœŠffQS‰ÔⓃ’J²3Þwåë¥S§²XW£2ʺ̧«RVΜý¶NrN{Ϙ®G©¡Ê/ºàÍ——S5ö产[RT²†ÂKÙÉ!x'|ž~õV-©O¸T÷Xq²P#=ÃsH\ƒºúÅnqŸYßÊ·—Òu!Ztä…#Ü6ùö®92Õ vµš¸ùÐU¤wiÛ—¯Î–‹Ó ¡]bTNÚSÞ¶£nKm½`'Ë)ÉÏ~wRW§G%J$sÁ g•q6ʪa¨OqEærnª ~3ñAl)^ÿ¢’l„àGwÉZ‘ÖMs©¶£¬tî@ÁÛÇ=ÞÜT‚×ÂN(.N£¾†¿?Ц“kR‡VľÑ–@вê†z§€IØœcc쩪8rÔÚ0bù©DšÖíŠÕÈÄHõL¤|­rDHc¬êÐŒ¨|d”‘Œû<©AX@äð¾¤ç‡m¡D¡µ òØÖ_[ÑæàóS*:±*Û‘T,•v’p{ÉöÖ‰A8$óÀ§ËÆA(ZˆóÚ™·KVINSß’wφõ%’ÄEó4@–R÷Tá Ÿ‹žú‘ÛS!—¼)+DæFy”ÁÎôõòÃèJÆAª!mQ³]JY8‹Æ×=:d6ÛÅ;(€R}~뉣KÀ[ªaG¹|½õ_uSžF1¥jÆvÏ? TÙÁNAÜ`ƒVÃ8–ÏJ|¬ËIˆÒd%+o+J†BÈ#×JÛµ¾~:‚}f œ/Ä’m†ÔVìEÛYåæŸË×V´$¹.;R¡¸Ó© B‚FàסF¤j-Bxw®ÝGž‡á&?I675•µÑËoЮ˜®zèÎ4æúB±8ú–[ëÜ<³èî×BÔç¹ãb%šAETJŠ(  (¢€(¢Š¢Š(Š(  (¢€¬þ©hŠŸÑsð’­*~[-ƒžYV+—,ü5>ÉqDØï:·Ñ´¯HIO#ÚI'Þªº·ê€ÇÖ sû¾?÷ª„œ–Z“”>RòˆÈpŒ«Œì;¼+!,ȶ§➌f‡\”ýÇë~܇å(¸ñvKã%D(ì6÷W’¬-­ÔuËISg2œœsßR³š}[MhOP‡’„eR¢œc>Õþˆš%õÍEqÆ’ Öæã–4ïñòU™ ÓHRK¯Ý+Q*$2sÐO~9ÔŠ †ØˆQ’â@êðÚTæH8ñçjrk¬C(mM/¬´†ÉÕæ|;©,¶ÚßT¥¡c‘FÙ þÛüûë›–J¬æ­&2_8E‹µåÇ×&Cå ’9|¸Ò»$[…™…[-ÒÏV WZ¥°òÏÅ œmNͶ…'I‚Ú RT‰¾TšT ÊYAi(9IiC|ï¿,z…p:’k+z¤O»ˆvë¬ëѨAÎ6%~Úk¸ÛyvùÓôhJW• +$œ@óóæsN,[å4⤥HPI  'Ërvßä¥Ò m4²ävµÌãg¿o*馨e²pdD¤Kjâ¢ð9GZT­$ì«^)áõ6øk\Æ’â›ÕØHÀÈÜã}ëyŽáš$z$t u›žÅÛßÝHbJÛ¥×cEKIQFûYæ{±œ‘þw¦äœœ·drçÂV;½Á·$\Gèy:VN¿¿'jWèlÚ ¡›|§g$”4AòÎyžCžjA(¼¸Ì4—ưX'OxÇ—w3Ze©Õ­MëKd‘¾øÉ9ÆÁïÔfoBébc¥s_vB›]ZÁ'#¶ÙÀù+e½¤ÁT—Xy êXBt‚FÄdíü0*BÜwš+¥°·”¨µ·p'ðçG¡½"N‡h¤8{°wú“ÏÏÙ]%žVµôÛžr[mK~[ x -J#°~\ø{+bîajŽ…¥ÀH!aIÒ“¾ÇÝ·ŽEaq”üW±(;¡¡—HÉßâùü•ìdÊ¡•% `6p©A`ä`co<û)b/8œT‚·”[Ö®«IÐvÛ˜=Ùß¼ºÇSËûáIBÝ'=iûmI¦<êWÛ*V 0­Ï¾¼åf´>µÉÇπ薥ºÇXËKpçZ§Ø}Ôu7«*e@¤òÀÛ訸‘u\îª9RY''Š;Ͼ·ÏräÌrèyù v”–Îç¹åSìµI³?•»6¢ô$}UÃ8ê•‘ä+ÔǸ¤ $mœ „ªórScÑý)*ÿæ/o’³nçxFV°U¶6Q©º©Lx”[óIÉ1-“×9à«ä­kjY:’ÉÀ üâ”ðG½'qœ1>×jf<µ“2GT…y¤n¢<ÀÇiãžé;ƒëïVÔ®&@2¢ÈëZ–änŸõ€Ís°’æsëjV[ž2Ôå8–ÃzJ”U€‘ŸÜ(‘c.© i9 ÝHÒ }£cPót¾ŽåÿY[—ļL¤¡+}Ò”|€î§bù²ÇÄcudþ“©’Hû Ïú™­ÌÛžt%gWkq€“êïüU4µ )$`ÖÆ•Œ§ YŒ÷¥ÞÅ*KM‚•”)ÀHÁQÿtÖ°¥•’—‡rtœQÏâ­‹ ~>¡‚ã_Œžãìåÿ*Lªë“8©«^æÑÕë¥jÎê|ÂxiX½FJ ÛI'mÅ1ý·:uáoÕ¶1œêO!¿Æ~oµHóø•ù-Gì-FÜ+kIÇv7üX5°©Ô£ViÆ<ÇùõÒfþ6<;ŽB÷~*öc‹f;Ž)Ò*ø ão Ô|"EK)ÙSxÍéP‘©ÀñqÁ +b|1V”)cAï¶ÇºµªÉÅÑm­ð„™—W‘)ç;È(QB}@í'Æš-º‡KdöTr+⸾68êŽTÖ‘º^ÛnN÷Ð~·Ý"Jx°Û¡GI)P#ƒóÜ|¶5.·q[&¼ôf3³ì¨å>ÎUWÏ Ùnɽ–vÁuiRÔÉ#ã`J9ìÄçÔ÷ âÅÂr˜VYq!H' ò>ѽxxì'Ô‚n=z>„à‹56»Œô4 _á]â¬iÇÊVàS¿ã>T¸p|˜©nLyM©äéRt¤+ÈŸ¢©çÖ­d|G:ÊEÆoTR©­¶Ñ€•¸TðÞ°ygÝv÷(ôt³Âåq·›\d(ÊÉŒ•±·†Ê8ïúÉªÍæžŽòš}§u;) II°jááy ÂSŽ8†ÒHæpIçßʵ_›EÝä¡h}m±­ÒàòÁÏãUúŸãn† ­Þ²··MX_£Õ±ò½6’æÞȨ’£šÌ³C2Q˜“¬±â­-'ú€åêÞ˜åÛlϾY™V×3„<ÊlŸfkÕ¥ô†Œ§¿ѯô#·JjO¦ÄB·°…/™xšUu³Ìµ,)䥯T~Æóg(W·¸ùRf–7¯vXUŠœÓ>>¾¦nXÙ®LÈ·ƒ”å@R˜Ì8ò³¡XõV Êi ê¥ KqÔ;±]mؤu¶±Õœ:jBR°Ou2³%}å ùÖðörTâ}dÕL’°îT… Þ0)d;ÃÐÆ”ò¨òf#V|Nk4’èÊñU¸'¹!ÞåvrcÁÖœ)ÓÉ4–cÊ’}~f’­èí#aƒâ)¹ª;7Ú@ü×T¥ÙÛ#*9RÇRÀRŽ{ñHœhe]瓜Žÿ’ˆN9U¢$“7H!Æð؃¸?纶Ú,o^œC»¢(;¹§uú¼üéeŽÊ«¬ä¶´‚Ãxë0ŸåVlKb"GHÂP ctUµƒx¨J“ežB›Pë£2AûdXߨj²CyI\À§“蘲É!(t€FJNÊù «(Uìê&s…zƒ:sƒ¯‘§qåŠ ¨%Åj#Â;µwW?ts3Òˆÿ¼83ãùÝÚèög¹ùõx¨ÊÈ(¢ŠHQEEPQ@QEQEEPÿOx< Œ«HøB>þª¡ßy…I\ÄŒ”nŸ óï«ß§åõ|…íµÂ9Üíñ«Ÿn3Ñ¥¼—!†ÚAuÕ8ò’ŒóÙ*'r9 Ɉó2\†Úia5©@l”èVryìŸóŠTĦƒ)iÏds§Pù?Îj÷ÂT”<Ýþ Z3”§®X>¿± ü”¦7ÛâXMÆÞTⱨu ©GÖÞÛû«;±oe>„© *GX©kB²AIÛÔsI. KéqMI[ŽKjÁÆø=ç—nSŠUÕQ«)läs#cãì¯zבÙCŒáj%G|§`~ô!s\nª2d9)À† µœù¨‚O†w¬_t!×4"`S„,.€$äxc¼Ö©“¦DXL`ÛÁÅjRK* $ö¶VýûmšIsâ(¶çÑá|ŠËªm.„&Úâ´ƒÈd9ìñ®4N1”¢®/‘-´%À¦å-XJð'¸ã–1ãDN©IW\ä…J) /!9ÈåuFdqM­N”þN®Å±a'—4•ïË<ë|Ü óZ‰ˆÖ‰ä! ¶imJÁ;•(‘œxÓM‰ö5»‹øt–ãî¸ê ë202{ýT‘*¶©·KP%U¥Ä†–œ ñÌúùyíJm†‚Ý`ƒö=ùz‡—º´)+mZRÔ¤ ¬¥)Ûüp¾ˆ¨Â𙩍O)Q—Õ­*@A d Dxùy×®4µ$…[Ÿ $”me[cöþ¯uF¯¼Zlóú$¸µ¤-[$ Áîù¨‹ÅŒK´?q”ÔÖ‘Ä6¥¡ÄŽÒ´à%¥œöO‡u.›±w“ÔTûKh;ÈÈqhvÚéi­”â‹x;°*åÝž^êñج&cs¢YJt©aM…“·ßcË#Ÿ1'ˆ­IeÞªè·_))W¦­ îR2sÏ1Z¢ñ´Ápƒa~+`-J˜´žÑ8ÀR0FÄž{ãÆ§‘¤T»ÎÄ–zb´Ë‚E½Ä·§V –Æù`ûÍm†É¡iƒÕ)¡€¬ ƒ‘€sœ÷ΡÍqñ”ú#;n^—”–Î$î;ý¯ÉS¤!!ÇD¢RÙªª¸Š¡Ý ¶¨râ–Ê@(ø¥*=ù§;‡XxB³ßy©VV”cZíSåžgßIEÜùxÒw²Z”/XÛ´q5ÎÔ‰2å¸ÊT\9RR¢>x¦¿DGmN:îœjÊœ#Hß?5*™)ûÂUÊRõ?)å>æFê$œoÝšÓ-É-†°\[km¼œd”œ|¦«rmÚçÙQ¢”’Õ/ÈÐ!0û(y·Ÿ)ZB‡Ùxò5‹–óŒzLœöeVëwãY"F‚‡›F•$÷n+ Ëò¦wÒe‘ÃÓ”œy!©ØŠKÑIRä¡j(yÅv>yñ÷Öö’€–íÚl}¢T³û©Zˆ+k \ÇÈk&ÀÐ3ÎŽ¬¶ÁS“ºÊB\H!¦ÚÀÀKyÀ÷Ô~c!r¤7žäœ{ JVŸU4ÉŽ ÇV1 ÏË]¥SVUŽÃÞ)#WJÔ“ÕaÄrÏÛ z¨¤´9äÈhvsë$·JnTT8ƒŒŽGå¨b!®dYëßö3Ý Ù_Vð[jåã¶|A¬ßHK™OÄPÔœwyzÇ*Ó’Ÿžý«kJKˆê°?µÈÕkTow‹±­\ð)Ó…·½G$§`qö›7`ƒN\3„Þ*N¡¨“¶wv~Ö&$ÿá*/ag$’Œ`%g$£"¿9ÕY&8 à Iç±ð8­ÂBHì<ßè5éxbÔ#4¬.B·q„Ž{úñ[”[> Zâ¦o\h³­_ŸmJqµ¤ý³[uj̧ý_:@ƒæ*©¸\%[îI— ‡[ÿ#â*mÃ|IðÒP°#KÆí(ì¯4žÿW?ž¾oÂ{çMw[oÂú“iò%±îD$!Ôˆ<#vÕoëõ½ùç–u”“âSÈó>úN°kÄ©``+Æ'MÞ›±dZæ,€‹£G¦^• c¨YÛÄR·e³×6ŒZ”šBŒðJ¤|ô×´–ܸõ òÃ$í†\ʳÜ4¨OÍ0u.¶­!*Ï:[oÍÄiqnn— ,ö’µ~;óYŹ2óÁ¦àJ˜Ã¤u3€²TBÁæ¡ÈÜóÁç^Æ‹T“ËY{Ñùe:ÒNÕ>#JÒ´¨^%Ç1¾â¤NÚÒµH#•']¼ç°‡{}¢f÷NQ³j× *Èȥ͸¼i+8ðÍ(0])í,$y Òcõ$vñ®9&rÆ QÎyøÖ—Rs¹õÑ%ô¡]©"ßOÆ*¢L |DØ7I# ßÌÒš?k¨‘Ú=œœ}ôãyÁ”Û«ÝF¬g8öÖv«t‰’†â¸é HsJÈJ‰9VO ÿ=Õã×_µ‘÷¼:¬a„…úÙm½ô”8BNÊÙ$`ø÷Žï@œg¸ƒšñjJ˜ŸÀ¤-:Ryb¹:nR48¢Ä´¢´d‹£ËB²¥eDúëgÍÜRO$ ’;éó£¢É´é4¨g‘ãHŽ;~i.‚ëºGÉSŽÇ™ n®/$úŒ*jMÑ.BËqo¬{*ÒÇÅçŸlðãÀ¶2Ãh ¤63Îæœ.‘V¾nˆÓZ®rz·éÁ*9A8¤Œ7$FbBsåSk‘òÎÝ´I´—€ãg}%Ò‚Að§©NÇPN7¨âi‡ItàãÚ[Ò¢@"¸‘žLߨ•1çP ÒÊ Î3° röçÙPûzži«‘GXÂØp/J°ÜlLîW–ÇŒ¸K qiRHÉÁÆ0=•·ÇvDñ×’·¢ëªÎwÎqŸY«›JE)<÷ä9„im'ÃÙH¥O‰î§Y)ŒÒHBA?lyV[—¡•öò# áLRÅÑ¥$vzÄŽýêNñHmÁ0sƒLΤ*k$ú >U.Fœ?¤Šö¯˜ùÄð"<‘Œ #)Nàã»Î’¥µ%CJTC’“Ïuxó§ÛûvÆ2g@Ò}Xßüûi¡Á–›8d© (‚wä9÷šËî+Ó´®(„ód¥@ãm”NÝÙ>ÚV˜ä« ` Î|¿ÏùïòÚÙ*RP•ö¡XïØ{iÙ¨Ç9JN6ÀOxöþ|kŒ¾œ.‹—¡Ë²gñw !G.êQW¬Gté åîíªoŒ¸rá¨é[¯$ü‹ßEu {±nQMô?1âPPÄÊ+«ù…Q]0…Q@QEQEEPQ@QE\ýQ.)®ŽTâFT™¬<{UË<{*{|3)eki.èmi ÀP<Áÿ8®¨ú¡”Ò:<+y:›˜+#WrÇHG“ÂRW°†ÛÚ„¤­Îج˜’ü5X§Ôª•°¥Ö?Õ¨çé-ÿxR"¤¨cI¿‡H_[’Qÿ½µýñ^rGÒKX²ð¸Îy‰G+Ì•¥+;îwåòró¤ÉKu×ÐÚ9 OZ‚N@Çr‡‡Ë˼®ÔQ%Å*+n8ãª9-'$äïòsò­RW”…&Þ’„œ$$nHÀ>u¬ùdlmÿiÖÆ•a³žþ[øžú«:OCìñrš}ÀéôfTÙÒ„”ò÷æ¬ÆÒ‘1DF)mIHÁÐ7ß<:­úa O°0¤@` úŽÕ]O4ßßíýÄXà‘Ý·Iz.GYÇ–ÆÈÈRœçü’ª,Ù N¡Ê¥]:A´dãìŠþ5 ¢/¼rº½x2Ñ\‚¤´¤MHwGe:’3=ýÔšsÈiÐ]¹è%” íߎêÍÆe‡Ø}+l4P oVA:ðñûi<†¥ÈSÅÆ˜J´§Y ƒìÏ}j±ò¨­8õHUó°ï[†÷9ó<ȧ> J\àëêÚÜÓ""€IÁæàütÝÒBo©!(Mç³ß¹¯,×YŽâIÑ[eÅ6¨„¡äjIÅ'~ý³ŸeR½)íË^’þõD¦[@>ŠöNýjvíŸâÓj”Úo© ¸Ù1®Ò³‚|ñ¨ëyz[ö„ˆ¶À‰:±tý•I8ßÀwæ”p‡O¿@¿&sPÚ-AÔ‘€[ž%lmYžD#%$ßT6CV%²¼ã O/]]/³ M¹òd‚VÐAíãbrsòT‚—F6;羯ip¼ÓÝzSŒ£IF sŽc>^5’‰éñMãï+Þ“TLøá(@ÛZÔJy·4‡£â}’ÑHPvÙ1:IÀ8ag%;tª_Zb€¶tê*8o>?øŸuGø-Ç“ÄêR1e-ҢÀcÚk²óÑ,6¸9/[2jÚ ·Å^—T@Rœï ð_•;ð³©_O; —˜t…,çìˆV7QÔÌó—”ÀR¾š’—¸!9F;½tåÓ. âðÔ‹ŒÇ˜(^qõ‚’6φkj3¸’Z{Š?ïò1Q—»æ}ž©J“ö~Hlë)).c;P¤$Œ‚žkQ ñ>êô÷+ä¬7g¶âŒ$+[í‚;²)3¨-«~Ï€ßÝ[ßmJBð¡¸È¤êjJ“ ú:G톬üõt^š˜ªÁ©hM¬¶€à?yÒe¡ uÕ¥EZ•¨íË4àb'H;mÌš¼n:IíŒ÷j?Mw2ܯ²›î‘Ùu·KŒº¦×ŸŒ’F}¢•¥)Zœ^µŸ¶VI÷ÒΤg#³Kc>'Õ\VÑÚX(ÆWg3ζ2¿²8Œ`¤ƒËÄW©HòÕ@­Vƒ¤døîEQÉžŠY\R$ø÷øÖáì¯JT I )8ídóð¡|ë—¶åŽ9¯cK§v»ðà8öØNs’k[„ %JÒ³œòØÖ¹n©2´6Ê\^B}ãMG3Ð¥ÍR‹¸¡Ä© ê‰O¶´êÂNÀ«8ÛíF?Ïz—Cù)-ãø‹Ô=õš NFHÜxÓÌgícqžlrs’@õRTƒqeÆ\;Tÿ)´­$M1ÜckÈØyÕÔ䤲³ÍÅR•ªÝ1…yæ„8;SU†jc©{ôFû'ÏÀÓ©doYœ%fzôªÆ½54ow HpmÈ+—üþ:_Ã'7†qŸŒ;üÅ5ÇV‚FÁÍ;XQ¢ì„©\”7÷êü7¥‰‰i…©àOK‰i 'í•‚Ÿ“5égáV“””†'#r~Ѝa@„w\ýŸãîªóÜdÞt4çYÕ´®ÁNIÇ?+Ô¦µ> ýØ…KP##F~ZÐË`¥*h€yíµnºäJR³§-þ:öß»{ïçµN¢¹tËGO†R‡¥46íœ,z•ßí©4"µJ.©…w¥ÑŒ{FÕq ¾óšñ-°s^M~F«ºV~Ây,“q·!:ŒÆþ*²}Ÿº8»¢eÆ{ ¤%!´©øÄA?(ª…FyT«€&úBV¢꺕yêØ|¸ª¨ðÈQ¼¯vNI—BÜ ÕMô‚À‡ÅÒ›ä™)7ç‘…x5m©`ûü*ºé†y¨SQ”© Sz‡0~2óUÑ‚–†ü.!áê)¢‡”ҷɬ„‡”û”¯Œ’2‚|qÜ}T‘©£WS,Üýª¾ŠP¦Á5\©dzŸK Z«âî¿LøÍòËò¦¼•%•i,µ‘’FÄžxçQ‰³—l»Èˆ¦þÈÒÊ;FÙ÷`Ó×G3ˆÚk8jH-,g™ÆSòãÞi/K–ä±}LÔ§J$ dã’†ßG¾¯§J-ZÇÊq¹T­7»ØjzRŸ>‘%ÐOpΟUHøGŒ—gŠüW£µ.;ç:‰Ýö–  }@_N¤šð¢=Êê¸îJ:Öuzp¥n½ÕÙPMYŸ.ðݳPdò7==‚¤NH:[Ô¬·unfê]%¹.¤/ÅGIѱ¨MÉÃn¹=´¥:PGíqÈûF),™B’·*R¾)úk§VPŠGë8”)púxj©TQV×û÷"zÃó]mn²ÛÊd}º“ËÝÌyÒ³\Õ§Z²O*hÅr-Cn<µÖ;†ys§øÊÞó|øìºÉ#+Ü{:ö°ôêT§Ú%™ùç£GŒ”)¾ëÕ{/ÈÃ(PÊŠ‰õÖ‡P¸%)ñ5(nÛjŸ ¹‘ aÑ”-•œFõ‰€¬‡žÁ@¢£åÙ˜;7ÈM gÚ u¤¸¤l ¼1áOq[ÀNÀwêOkŽ—›èt§>êpKõæÕiÔlôéÔ“¦¢ù™'GŽÔãÂWgí7ÌaçšC‰êäC…¾ý%Ccç·¬s¦÷b©mòÁÇn‰¦99®FM;¢3Qœ\XçÓ æÐŽ™bµK¶¹w¸Äôh˜¬LÊ9uçœß.¯>¼ãž Œo£®Œ.W®Œ-7G”¦.2P£Žõ¶]ÐÚ”;ó¹Á4¦²Ý"v‹…¾$¥ åæR¿fã•Yq¸¦àË(m(ŽR„!)d %!% 8À1Ë'œÖŸ(„•¦ŒÊl:J‹ö”„Ë/p\¤N1ÊÈû"AêÖ“‚2<ò=§H"Ü-|UìQ¥7‚¡žÒûaâ*sÅÜv"Ùd&åk·IŽð-©§½+ÔGg_ÅHÛ¹8ª%sÛnïév¶žo´T”’”‚~/˜ÆÛûê‡{ÃcÛÃÔž&7ª²Íl×?o èâ81dJeÈÌmIÀQY)öêϾ”\l¯ .¨óòÇÓHà.-É´ÌcSRZÁ[gšÃΚ›qZÐ)%'b¤ƒó×/rŠ®£å£áeõi:›Y¦É|9#tŒyÓͼL[j\‰ Y÷|”ÉÄפÁA;Žj5$gm¡Žñc[ì€êîȦØÖäÄŽã¸Ë‡rk®§Ÿœ˜ò@мõ{òÁïóÅ:KÒ´$0¡ûê3Mnr:ŒO#*ÊNRw­.BS©*—u83©ò¤glniÎe¹ Ä+B€VžGŸùõUI’r³+kªƒN©%X$àùÓkKN¸É í-ÀðߟÈiÛˆ*qÍ»B£ÖÆUÚ;„å XÃj²ýÖmÂÆõaâ‹"öÐEŸPFŸWu28ŒŒàjÒA:sœü}]ÔýăM³«î¤÷øyóöÓC›>œ0èí/Çþf²#ô*Ñ»BÎBÊÀ $ @<‡™ß»ÙòÓê±§­À Vä€3êîù>Zf°€]ðF2 'ãóø·§2rÚug??l;¶?ç5ÆË)Sî–¿B2âNˆ1„¼éÛù¾šé:çˆíŽÂãË XÀKËNwçwk£ëßK,Rö”ñ))âe(ìŠ(¡€(¢Š¢Š(Š(  (¢€(¢Š¢Š( ×ê’t1Ñ“¯„LdêqÚç\£Åò›•Áz©AåÚ.„«)Iʱêåòg¾ºÃêh?Ñ«ŒžK˜À?Ò®_TX*€ìYL75€ TÞT…$ãdœdøžU—¯¡m¨IIò*œ/zsᦿö’Ø'3îþ8©Ù³ðú™Bš°ÃJÔS”™œãÚ¶ßÎÛ©ÝžÙl/(s¯q] {$ [î+¢ÓÜõåÄ©8´¢ÉdÄ$¸¥9%Ô¥·¤¤„„¤dŒråƒßM‹tu*B§¤/)RHQ#» ÎÙRëm•’æ³ãû\d þOrèiyõ”9¡)WˆØz¼êÖìxÉXCny÷\[OIYq#t%#|òÛ–ËP~™‚GsÜDhü†¬{”ÔB*OWÖ„«)G€تצç‹Q…˜L“·®ª¨ïôþæCR‘œvÒpr7åËæ©7EçWÚ1þ˜ÿuUÓ¨ Š“ôX±õ÷hJ¾Õþ~ZUU+9#Ù­uFWèË:ܤ7Ôu‹®aIÂ<9ÖkTn½Âß]© ß!YŸ~ø­8¡)µCq SšŠÚVVÝY;{}u»D¥<¥Çz6Bt¬ÉÆ7ý¶ÇzÒ|¹Sqë®.èÈh§SgôL‚­ùÒ®Ù]ÆîÜù§ZeJB׫Kž|¹Ô²ãj·]…Om’´, @—?/u,µZ`Z–µÚæ®]+«R{DgäyÒË6co•Z‡d†8vX;µ¾ØñT‰ðñ&I‚í¾Åh\Ò…ÅPí€R¯“æÆÕ4mɉžã\2JS€¥´0wÎ6ßùkLÅ8¶z§¯.¾•+J€};@€ð>Ê·2èeŒäž¥,!è‡Ü ŸÇW´v–€ÚÝN¬6”BJ‰ÎG€ñî¦;m’ßN¸«%ÔU”jFv8ÂwüU!KÝÑ\'OÇÓßÇ*ª1Qzâ1.µ´!]()n[RRµ‚µ“ßä|=µà¸2eñ$&Ùy×Ò·4,#l%@‚INø“V]Æ4'PÌt!çIYÃyÆÄüm½”šÓjKEÆQ4Ê‘ÙNÇæy×d“ÔíGgMÆÛˆ×ÀSÃJIK9QvÖ#^±Á3â\Z™ª1JRB’—IN9;Èïî§j,ÉSëŠÃ‰XØ(ÏÊAõí[‡X¸Ê a†€JNøÛʧŸ™—4ú•]ÆÕ4Ý¥™–Úƒªì¡+#9êGÆÓÄ2’rp²2yó5bF}ØÎ–ƒI ) ŽØ÷TO¤SoøzæÊúÄÊnâö„ -G™'¸¶>ØïXñ½9?ßá¶ñ‹[&DÇuß8¼& # G~tÖÒ˜E jxïÏo—jòòûO¯ÏÕÊOpÎ+-ñ¶¼zéB &œ W¤8'IÒ—vyÓ©ºÁôd·èhVƒÜÓh'>`d×lréòÊGíNkài|É1d>˜ëh€¤ïævçX%QƒägXú+Ä’ð^è¥)ê4¬õO=co’±J™еmÞ¡·¸W=䕽S@HöùV&JÖµe+JJG†ç>Üæ·¨6p2æ~è}˜%-½Z„€ Æs“ž[’O+Ô®m*‘Ó˜¥d``ž[ƒË>UŠùš~ôF«Z£C²ÐÒòR¶’• äïî¤è‚À°1àiKÀ„#–ÊûëÄrÎûÕ—qZœ!9jJ6BBG­¸8Û<÷=Ö+rA¬›q@”• àà€F}UÎwdÒ´RG¦;Äè:|NÔ×5´i'R=ôí­A@§JHäR1^-÷Ô]Ur2IÜåZNq± yÕC–‰,@8P˜©Dgû q)PȤÛ[‰p)J#8ÜùR,…D”b:{ ݳà|+]Hª‘ºÝF¤°ÕrËÍ‘!§žp®k@ãRTœážúfæ2)Ó†ˆ&ò5 ãÖ*¼7¥‰³‰}Ò§7”óLEvS%´Öywg誢{ë}çqZ–⊔|Îõ9ã©N"Ô!h, ÙÀß¿ €¼®É÷W±Ih| ¹• ‹Ç.¬|õ¶XìúóZ®$‰E_Ä#Ÿgd´ Ï’«³-€´G=»° f¶229V ; ç¿ð¬°œçµìQªìX£d÷šßå²êFÊB‚’|ÜV”””sW¶²ŽØqÀ¢¢¢ÕÝ\{"ôbPz7æÂþç#;Ó?ÇôΔÚ[ :Ÿ-'sýÓ’1˜m”¾Ù $'A9Èx’ R܆]i`­µ¶A|ó¯>.Ò¹kE$û-¼’i3qžcôÔûR2>Zp–ÊãIv;Ÿ¥”âAÅjÕ“°å[ÜT·#’ƒ¼]ö™OEŸJˆ*iįaŽG5ct“ »têê”ëIØüàû*´çªÕ´­øZ2\Ö®¶?V³‘Ü<ýU Ç-š!):Žòw)WŒçU+:~ÑÞãëð4ùÂO¼AưBJÄ+cóד˜-¼äw’2…¨I¢2ÜgƒŒ¤!@äÜjÇM3Ã¥+ÅØ”ô£m\wš½ÇN´œ7!#Ë‘÷mìµ½O²©(Kñ¡¨eYŸï–0—>$–·þ)ÿUD˜[æ:Ú+)[de9¨ÓWÓš=š·M8Ëf5ß®áß$°ëÅ.2áH OeiûSŽý±M³.OÌX„6ßzPœ|MI¸öÞ‰–(Wö¥Ö’#ILjÙ$üžñáM<dGÝSluôÄQJ–ÆIÇ0~Þªö¨â\¡«Øð«RJl²ºœãÖI¶çSq\J›>yÈ÷Œûjl½%XÇ}7ð­–' Ùž–àÔVã®cRÔ|qÝÜ-u`+5‚¬”¤Ú#ylF^™·¤¯ñS’ÕMö… S3û¡Gæ§486Þ³T󙢺(ŽÀPÒ¡µ9Ä@Nr)¹‰Õ‚iÞÖÓ쮦BW#·fL)èw àÓ¬gBÚêóŠ‹R£§ãS×dÛ¬’%:¢Ê2í•ÈiÀ®ni‚sHbãûÄ%NW%¡Ô|dç$( üµò´ÃN 9«¸R3o~K«ŸpÊ”òËŠßbI¥iIe²R*Û•XôáN1VÜWÉ"B:§§óÙ(Û>[²¬ø3ïí&;RÖPÚÀï=¡Ý÷Õ³‡bYøÊ›ï6™) üç ülþØŽï_w®¢œiŲøªÜër¢©K !IIÃxðð${jU)G+ortáÛI+wzþ…•|yQÒ¸î!m¬l¤+"¢Ükú"ŸÒT„UžÎF~J«­IÖÇJ¡Èq•dd±õŽG»Kaqü¢ßQsˆÓé;#²O³qX#U&›%ˆàÕmzzüÈÿ[­ø•Zå¢ZÜBÜRÆrÚOÅB·Æ~1Ú¦ õr!Æ 椃óÓ¿[ò¤»:Ë»ñÛt¿‘åòÓüT£´„R²’yûjÊÓSÕGc:Ù¡d&z´åÌzÆÔšÿ(¢9@RÎ|NqN)챕d«íw曆¢K‹pÉååT¤WtÞ¤òÑÉ#¼ãäÿMlˆ–¤F^p¢èßç4ÿpê›o+N¥JO‰?òÕjÃרƒ$aD«>'¾¤ô‰ëpÕŸíD‹ˆÕ©Øñ•¹'Yß]þfšÉÛÖ•rñ8îäks²=2sòÎzµ© ;Àæ~sYÁŽd+#`rV¤øòq쬧è/¾ôZYê˜N£¹D’Fä|ÿ-Jx$Iªr¡ÑⓃ׵óšáËÛò]‹„º ²HÁÇug¬µ'XìI´*:[ëŠËJ9Z€ îæ=Ôš#úKJR挜%ÕéIî8ϲ«ÛuÝqÂZNN0„àúü;¾JP8ŽKoJ-.(-…'pòª¤ék‰qRâŸ<ðV Û¿Æ•9r„ÐBP§Jõöû<†yùã—üª;eÕÇÖ…<ëŠs8W? [>|ˆ¨ë\t6v¯ð¨ä¹Û-Éá¾Cvf„)AÀ­.#–9Ëuéeæâ†ÖÂÒ¡èmdí‰ùˆ¨œ;›ÑnÉy€…ºê’†ÒNÙ*åÝÍYaðó,®àÕ™é(BP\0õC$f¹(]X¿W²©šÅj yS¯ªJxšÝè%)”$¤µ•“û\øU7Cöä *-™99È· Ÿ•5›w&}.´m¨q'!i· Ÿ„íUª:›§Ä¢Òˆ¢Ûz€‰°’…µ’¢‚’ug9ÉÁú+|ËŽõ´ãPŸËiÆ„v¶Àûló‡§Ê[o”$¼­¶Ç=ðØnqì¬L÷Ëå¶ZÐW„”’sêÞ¯Êyy3‘vBB–Ì7ò¤‚ª6rp1¾=@W³fºòv#Ipµ¹d¨ l;ÁïÞ ±î²•-Õ¥n ¬­e9íg9ï­¦äâœÂë‹Ý:“óË9ðÅs)Ô¬Lg.BÚ[oCiAÄ ©NŒx$ãÕ±¬í¬º”¤!B’ '<ðyŒœl¶ M͸=,¾Óo©jÂS•,íå“ôæ·9v™íNuÍ râÈIdž|·Ç…2³Œ³â¹$8ËXPÈÁ lGˆßŸ=¹r¤ò'ú>”‡P²¢¢ iXÎy§5\'‰d<—ßë\Xdj'#Hß¼ù÷Ó|^ ”ëg$¹$œiÝùQEh¶å¿¡Jy°±Õ„‚Ž6ä|Åhƒ)’Y\–„¨hÁø ìyÔû–˜ x`ºTI wž^êB½Ìp.¢JÈë1­JW#í5Nl]ο 4„™PÕ¤a9ÀÆÙß~^T‘‰®2éKn¶´‚¢p‚0s“ßãòb¡ ßÜyRPÂ빿®³³Î–úå¼µ­ÆÔ R«³°Ûs·}s('iü™­ êF@Ømÿ/ Žt†®¯îÉV})ÐOmTÞüûÚÖ ¡®×زáÈ<ü|VfÇêŽÀŽ|ª*ñØóå^¬tù2Íý3ÌÁçëB@J>05䲄gö§>ñX¡}¬Šä‰ÄrkÅoÒ“HÔ0B©R\8å½@´P”¥#9pÜt¿~€ßrŸA#ÈŸSRVUŒŠ|à ¥q$e v¡ƒüR?B~k%YnGo8­N4ují(÷’I^VØPµŽ~ÙŠÍ·’£ÏÙ^q~¥_ÇÕˆ\YKéây”T}:’O㫤ˆ‘jnj@*޽þåG>*ºPÒI¯BŒ³D¦[ž…ûêÆà'úÛQ:§TŒäð®ÿ]VÊNÛ ó·ÓS>]QfsZ`¡x'žrÌ+µu‰Äõq« nð^IIŒ«O ±±&}µ*©×ÇÚ“)9*޼ò䓱üU’’‡4ƒËb2*T¥x‘š³&œ;\¡¨åM+RsÜ“ôž“qänà„Œ84;ÛGÝ·²™¸ZB¢Þ˜$—V¯<òùqS‹›— ØŽì•§O¨÷}BO$pª˜‘éVi‰ bb JOŽ>˜TU‹\þâFË~–|) W0Îþ žœJ…;~Ë/yƒR.*މ#ÝOeHH_¨î=ܽÕtfá-9”T•™?¶ëIy•…€¤‘Þ huGP¨Ç]äeÛ]VTßi¬÷Žñìçí© «Â†Mu™Üln¶/ •ôêüT©N”úé¶ôªFÿõʬÖð'sЦ§žË©®è±2N{ý”¢<§%ol¥CzPÁÔS±&…Ýs®6Rà=ùäb™nqD–ÒË‹ÃHVµ yëVv<ª;Ä‹0Ý îphÃë=K©'²#wG’첆Á µ°áaq«;i½Ia2&-Z`ÇXì•~Ý_Å)¤VˆNÌ}¶R?DX >4¢,˜òx‰Î¹*ÒËå,|^¬ãÕïÍmK™êFš¶R["é+®½2ã“NzåŒx!àH'.ÛeôX"#/´¦s - •(îN}[R/ƒ&Êe !-'´Ù[xPõv¦~'µñ$yK™&®GçÖ#´<ûÅ[ròÎvÍ¡[_!¦ßz‘8-¥ÃÕù î“î4• êÊA;oÈý4ÿÅm·2+rÛP.¶4¬Í=ÇÙøê<Ò’A #²9WÍá^5zydϤÃTºZQ®hJ’T<ÏåS˜…L²„ ‚3°åP8R)QyÉöüø§ˆÄ%E/+˜ØïìªâÏ;ŠájVïG‘-3†‘·ÏMÓæ¡)Ròs¶)¢]É´’ñÝÙ¦Ç.¥ÅàjHßVfG‡VZ¤yu”¥’AÒq­\6 åÑJß 4£°'»Ê‘Ï’·Õ¹ÈõT¢³ž("à”ª+J t( sáßQ¾g•æØIUšÛ[{…vkÊêâ*’Èu©=„ŽòO,Õ‡iáq[OZ\xŽcâ§??ËR渷„œÂYm*l2)cwë;ÃìPÛW‡ÙS^,%8o«3b¸Þ&¦YWâ11¶›êÚa- w%8Ÿ£«íP}Ôø««#tYKž§'wˆ”×.W­N…lV[Cœæïù‹zÐ+º¨¨J GS±ÁHè®â•Ž ½êŒiüµ‹ý\p¸¾¿ƒ¶tÆ»Ù]ïEG²BçÁèÒí¯ƒï§#\WÉÇ? Ý3£«´Æº·ø2òS¨+ho¤äz…wEì¹Á/tWx2š’× _BÛPP#¸ÛÖ“NjàÎ,) ð…Üãüê÷ä×qÑNÈê›G ž âìa<uÿŒöÿîÐ87ŒÁàÛ¿.èΟÅ]ÍŠ1NÉÎÎk£þ +_ ñZÉQÓ݉$þ×γk€oÍ‚¡ÂÜBTFçGyrý§…wì‘ÌÌáµt{z+JÓÂWÔ¨ "=žXý¯…xz=¾ë_ ßÔO<Á_äWrÑNÈfg §€/©l4žâPØûCŸvŠMqèÎï8ï qÀhkÆÃ´®í¢’9™œž‹îaZ7òJ4’a»¹Æ3€œgÙZYèžâÚ’¯­n%QO#è«üŒüµÞÔS²C38EÎ/k`´8gˆÀ#|Åpû~%4'¡›àwWÀœHPt Ç÷kè-ìÐÌÎ_D·•Œ/‡8 rDE¤r–AèóŠbéJlœLRÊ} {ûtgÝ´S²B秃¸”Â×Ó¨`“ ßÉ­qÁüX÷Ïq®½:‚òÈZ º¤žÑäBw®ã¯4Šª¶U†V͘l°•{D®p à¾1þ _¿ÙÏ~M{õ—Æ9á;÷û9ßÉ®ýÒ(ÓY~«‡¬Ï[íOQ|NÆß…/ßìç&²OñŽœ¿rýîwòk¾°(À§ÕPõ˜_Hê§|‹âp7ÖoòúÓ¿³üšððgÿïßìç&»ïb£õT=fOí-_Q|NúÌã çëNýþÎwòkÑÁ\`AÿÙ;÷?Þç&»ïzó5ÕÂáë2/é%Wû‹âp2x/ŒFßZ—ßö{¿“K¦ðw*+|*ê€éß'øµÝx£Ϫ¡ë2_iªÚÝšøœ83Œ?‚wïös¿“GÖgdì¥÷ýžïä×|b½Å ‡¬ÃúMUþâøœ® ã~´ï»cÿåÎþMxx7Œs¿ _¹ïÿ«üšïÊ+¯…CÖgÒZ«÷Äà1ÁœcËëNý·ÿNwòkÁ|cÖ•}iß»³ÿ«î~Ö»ûæ(¸\ïI*6»‹âp/Ögïßìç&ƒÁœaÌpûýœ÷ä×}bŒW>©¬É¿¤õ_þšøœ8/ŒB•Ž¿sýîw}‡ñh<Æ8ß„¯Þ¯ƒžüšïý4b¥õ\=b¥ôŠ¢ýÅñ>vÜ8ŒÝ'ƒø€çÿ¦½ù4áÀ\Ʊç˜ò¸CˆÚFPµÛ^Œ²S_@€Þ½Æõ|0Q;˜+q9Õ¿v×8KŽ83‹z3±xZþè)RN :q¸îÓŸ}EÞà~7Òö7ˆ½–Ç¿&¾ŠÑW*)+\ÁÚ³æ„þãµ<’8'‰HÁåjËøµ­<LjåÁKêø%ÿɯ¦tS±]NªÍr>l3À¼v@ÿØ®%ÿ«òiB8Ž@ß‚øŒúío~M}Å']IyCè|â Æü¾³8“ý˜÷äÔ›£î âö.¯>ÿ ߘ d¥=e¹Ôƒ’9e>UÞûùW˜¨Ë ¤­rKÓ½ŽFOñ!ÿg.Àÿ2sŸôkÖøs‰O.»àøÂp~*ëŒW¸ª>®¬OËeÐãùü/Ä’#­…ðíámº‚…Cs¿ýZ¬®Æñ¤¸Ðá+óº“nuIPñM} Å«iàÔ9‘x¦ù;“Áw´ƒ’ìx¯ µà¹ *3¯ß#çr8+ÐB‡ñAÈ?=ù5aÆáÎ*“·—ô)IÉJ :>¬Wgâ¼»<*—2+×#øÏ€xµÉ›…o‹.v]Jmî“‘ÈìŸ ]bá.,‡Ì)|)~N › ]¹Ñ·0wOùÅw^+ÌSÉU­s¾Pï±óÞ'ñÕ²ê—[á Qe|Ómx…è÷ŠŸ/†ø—¨KÆoD( 'ÐÕ“Ý5Ù`QSìR­ùdŽâ”­ìpÝçÂGçwÿv½)Å'ÿéËÇö'>ŠìÌW˜¨<2n÷%Íic޼R9påàþŸE(g†ø (g‡nÿØœú+¯ñF)ä±êwÊC–#ðÅùLåŠè9z"þŠOáž5¹\hðñ¦›t„f ¸R{Žqå]ÉŠ1S§AC™eUî+]‘ƒëJB ÒU¼êމ¤r¥ý¾ }$ÄXØ®NcÆÔ¸WWbŒWn”—z¢º5úã{Œ-çÃÒ¢¶‰+ZŸTe $uÉ =ÕzÑŠ(ÝÌUjv’ÍkQ\* (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  3LœyĶÞàë§]Ü(…mާÝÓñ•ŽIj$$y‘\Õh…õDôµÃqü6oƒá¾•=e³GoôVÆtëPß ÆÅZ³Ï¬(ªc¢>•gDèZ?tĉ;64Ã÷eÂq¥>­´,6žÐ8Øc š–˜:7øó{3ŠõÅ׃ a—z¥¸NCºtÎq ,ú*”wxŽwÕuõ™ì¦xnÓþ™p‹Õ£JÞQ:T¥¨`8ÙØµHlý;ôOwãp»ŒaȺ8ïRÒRÓS®gRéN…Ý…oݚʢ«î‘:gè×£û³vž*âfaOZBý :úГÉJ ¥ZAóÁ=Õ1áÛÕ«ˆ¬‘/vIÌÏ·Ll8ĆŽR´ÿÏ Ž`‚ áEPQ@QEQEEPQ@QEQEEPQ@QEQEEPQ@QEQEEPQ@QEQEsMÜKÒuëꇵtgÑ··Ãÿú˜Í˜ã‘Ðâµ,åYBˆØ$mûj¤(®fès¤‘8k¦>+èÿ¥^%‡z‰g³*ìåɦ”°„ÔIÒ„œiYÈ œ§j³$tËÑõÞÑsk‡ø¾)–Õû |ÇwDfSÙ¯±¶Rtüb0@ ŠÍ4U=ÑßHv.èç†?4‘âݧÞ[~D[›Œ8Ú%6•j hJPSº‚sJ›ú¢úrÃ&öž5è±ßLu¤Æx:V HÒÑFµ:€ÆÛš×¢¢rúHàxœÏIâ8mpëÈ jjµi^N Æ¢¬‚4ã;¶¤t¿Ñßµ=Îâ6¦{EéH[.2¶Ûo¥i§Ìg‡Oª;2ãiØÎK DWÕ¡”/B– ”[ žê^:Ià‹?[x¾ã~i‹%̶!IêœW^\H @IVHãÔ¶ŒŠmâÌÍ¿\ê`ÂŒ¹/,ŒiBRTv=ø«—-/ýP5Úfñßñj8.ÂçÀÖæÒuÉJ Z€Î däd$ ÈkES=tŸq¸t&çô¢¿%Ze9l©­z8t$!IsIr°Ý@ãÂ¥]ôÁÑ×HW îâF§ÌŽkaL¸ÊÊ3I%:†ãqœw„QTBü}zâ’:W}¿!-Ã÷  ¶ÌpÞ°êõàvÊÛT«ƒºq賋øŸëo‡ø¶4»™$6ÑeÖÃÄ …-!+>£¿1‘@XÔTˆºdèÛ‡î—U׉Øb}¹æX“0êÖ—m IÖHß Î7Î1I8Ó§^Џ;ˆñ±ä‚¬¶Ã¯u$ò (I ;ò'"€²h­ù‘.cσ!©1d´—Yyµ!Ä(e*ss[èŠ(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š( 9÷êü~[]:Ü}}K×X¨•§ýT­üµ¥ÜQÓuÚ}» +pHpø^Ûn€‡¨B\TÔ†BZa±ûbvÇ¿‘««8jÏÆ1;‡/ñ.Û9¾­æ‰ÆwFà‚r U/ÿRWF—d®K×»ªmÆÙjd””FÖ’’´¤ c;gº€¨øÆwqçB= ðÏ]å\.\_Äj}÷—„¯¨CŠlr%ÔŸ–§]2X¸>ÑÄü%Ñ'tskºÞ”ê¯-Å“)lÁkJtuÒ?f$6FÜ;õb­özá&®œ=>«ƒ£˜ö¦ËÃ@:J–4ö•°9ÛqHºNèC„ú@ã§°”¶•%)QêÉ%*$iQÆj­¼ðµõ{Ñ]xG„xj<››rãö;<2…%J2^VJ²5wœ”Ÿ éw>§î?2Ǻ;b–-¾™NICÙ’·ÓÉÒ²'cÆØ­\#õ>ð? qM—Š"J¾I¼ÚB‚%Ë›×)íI)û&¡È$àà œºB¿M}P|oťǧDáÆ_IÁ …õN€| HÿXR©q”¨<ÃÏZú.áó\i0§B¸h¸NJtêVTIt«!GøÆ+¥ t#Àñx'ˆxAÆ&L·q ÕΞ©eÒò´IP)yæ›z(úžx£«òo¶Ñq¹\šIDgî/‡Ldˆl€68Î3Y (9Åö*ãÞ”¸V/t‰ÁW—./­ÖÞTf€Ák!Ah)J€ì°IõtÿÔôlkèo†äðå•vKd¨¾Ô:§:’µ(+r5|åPiR¿F²/’¦‰æ K¯~ÒÌ∋Vs‚5c=Ú¶îÅ]öÈQm¶øöø,7,f’Ó 6œ%´$”ÜP (¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š( ʸÛà.ºAúªzE½ôwÅ‘xrM˜3mrSì‡5#HIBAJ€í2O/ ì’2*ÑßGñÕŒaRÚÜn01]]mèîä»·HM91W»¤4ÃyKtÐÒt`!8Ûâ'¼Ó>ƒø6/E—NŽvê›5ÖW¥KsÒG^µëBÏoN1–Ò9rÏÏ6Æã»ÑÇD=ÁáÜQÄïDUý˜÷ ‹f t­kX[ÉIû&Ú»'»<õbš8FDÛdÞžøÂàÍŠ,ÛmY´Ùêá¥çW††@SIÉæNO}týOüÄ÷kÍÙW«l‹4í̪ß3©.Ç@!(Y<‰‚ µÅúø'ñ DUÚ=«ˆ%5&cMÊImZ’”œ„çòsÂ=ðÝŸêD¸]³0xŽç¯J~jÆ^í·Ö„y$a¢ý祛çFœ>~Í`à :gÜFr…ÎRÊYlù„¡*ö,U÷Ó¯[z6è¥0c¸]„ÆMž 8mëQ%…êïÂ@$wR©£gz9è’${Œn¦õtW¦Ü¡ÚmJCgîSŒŽåP}Z2%Æú›¸¡Q5jXŽÛšѪCa_&k>ãŽàO©“†ø–TÆþ ‡dŒ†JK; ÚFF\+È#Ç9Æ Z »0å¨Í´Jú̲QÚ<´Ÿ®8†ô}fâ~$‘cá>‘:;â+›’$ÝRúVã¡n0âTBµm°P Ï·±:9è׆¸‚äp™¹[$¸ë¦[Å:\/QÀÈ êªêÕõ*ôgêÜ…½}™niþ½»D™Ú¡…ç#)=dç¿4µÑÛØüanÍÈTX®(©L¶P PI$’DzŸ«Ä$! B@# ö€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(¼Èñé‚]Æ/GwfìÓbûLlC€ì‰IŽ”¼éI <”59’@À5ÌÓ8’ï'†nv–/|CmzÕ|¼¢üì¥Ë¸‰H‡6ú‚T¶u¥g@Åع"½®w¼]8›‚8®å7Šï®qe­.;Û!n¬²Ž±ä¤!e °®­¥NPÓ„K@®„Šò$FjCy(uiÈÁÁÊ(¢€(¢¼WÅ =ÈñdxŠæN$—Ä—N-â §ñÄ·Ú>—o\™— ßyIiˆÑPI™í¨¼‘ÚXÀÉ8Z½Â»ü+Ìø‘í—™LÍjOÈ”dHeô$)—4ý™•!—RR­)@Z×…Ð<< è{ˆãq' 8ó)¹âÉ,ÊTöÂqÕ¡ë)@!Iy)Ïd’J¢Š(ŒEV¿T”‹Ì~‹¥‹îM¦á&LhM9)+p¾òÐ Oèšµ' v"€²u'ÄW¹"¨««²î80«7ÜUÉ) »j“ÔÛàÅC\U$«¼µ²¬v –î Ä7Nœ’Ì[³†ÅÉl®@¿¨·èÑTµ.DT•'­È:Žw@#Ä…ÈñíPñþâˆ<1ijîw'W)hilJ\¶yÝIû#Δ­iÔË©Np¢î@JPjû  (¢€(Èñ ò®sáþ-ºÜþ¨We^'LhMÊã jñÕ°ÓqBׯ)ÒR¥¬áPV¢€0È‘â+Ü\áÇWäžï7NãIN*Ö_jS’f¦-²:•ªfR¥iqÞ½IqNã³ñyàSmŠM๠|ºE‘f¿. ÉNñ$‰FKÈCE§#/H×Úp¤´­(+øÇ ÅÔ ƒÈÑP>†x²7Ú'8<Ëiðä‡$¤%õ© BÙG i $+ œ™åQEEPQ@QEQEEPQ@QEQEEPQ@QEQ‘ãAåTq_AâÎ=ˆš´YlÈDp†â?5Üi%ZÖ”8“¨óÀØ ýÈñdxŠäY¼cÆË¶q%ªÝÆW¢Ï9%ë|²¶Õ&{Šœ"ÅiÕií£ZÈjÊ|*y3‰¸§„8ºì¾5¼L6çäõýTE¸í­çm@,¥M%:Á*ÂZt’ ‘/ê Å@:Sé>ÑÀbÐÔÄHzEÎS-¶–â¼à ޱyBÚJ5('™Ç®£ŸTWq ^¶Êá§.-Âa§®·g Of´Cm£€:ࣂ¥‚@AøšNœÐGˆ¯23ŒŠå‹‡q,Y)âHœMx\¯Ü¡5BRäHVå-ÇÞ —Œ‚ŽÐ €õ5ú˜nÜGÄíI™Å×;£7k LÚ×h}åv>Ä…úKÛý•Çud²@Àß&€¼ëÍIñ\ýP÷!¶ô}¯†¯×:MÂ$ ´±­Å‡ÞKZPu ·«VO¬TÝ%tÅvŽ!¸q5¶÷/©wŸj‹iÊLgX‹Jq×2¥™*@; ú§õ^‚#\Ì•ôœ"q;\f´]XnL÷¤¡·Òú¡´·Œ6u¶p}„I!9ÆjØèÛŽ ^,‹Œ‰3Vô"eL×a mI*GP1öFÂP@RGl¥JÇkp,ó#ÄT¢Þ’í\}ñ.]a»|·Z ~;­!M%JJ*ZR7Т@Ý<Ž SBãÒ|Ø—\9Ä÷{ý¾àXBfªCzç·’ä°v ¥ …ay$¨jÆHE‘â(UÈíôÄsx›†ívËçÆáû½¦ßuÞsÉqè/Mu×RN”””¡´9§ IÎÙêûtdB·³·q ¶óŠqjÀÆT¥T|I;Ð I™¯5\ÿ{âŽ4Gñ½H¥\IláËS¬°L$ºëêBIPS‰mÌj<ÊAÀÆ"ñ½ÆÝ!ˆ<]vêì“™nØáR ·5I»8à ­=´†'Õžá@u¾¡â+Ò@æj…Å·Ç·ÚçÛxÂÑe“nƒ>ñ%Õ&UÉS\OT#¥:’¥!§%J'^ Ûzg²tÃÅи^ñv·F…uf ¯^'*ç)À¿E~k­F‹$×VÖA;n‘蘢 qWqt»ìé¶ût[[‹ð-ËiŪCå—TÚÖà=”Œ§ç–ÙSÓ«û .7 çáÉ®5™-°°V±¬¡N!A°µ Žã‘ &Y"¼ÈñÉ^üUtáÕ/ñ,7­ Æt·.S/¿"á"ਨakBq€p€5kÉåSdqOð‡\Ñljª‚ô´ÈSpÔeYmn¬¥ORÚ›-‚U¥-œ¼šÿÈñ yUaÒd™wÎl\Ýîe’Üå¶UÞç&Ž¡çiM6†’àÝS¥J#| îj¤Ž#á‹h·Yî6Þ2µX]€Ìû´·”™75ß°¡€’¤©Himåj=³È è‚¢¹¦×ÒÿÂáûýÖÖÄ+£P—{˜«œ§˜‹˜ë1¢Ç IaDg²2‘‚M[]qoq}Æý2UºÝÁàü C‹T—ÔÒô­k² 0rH<±¸Ê ¼QT—J7>&WJ1™á®)˜¥[•D»l`„D‹jSë˜âö+q8KiÈ#ãcÐfGˆ¯A‘¹‚Ã/¤Ùö$‡*ó|ƒÄ6ÓëªdÞ£ˆì°óN;ª;´®¯J‚u$ë:€rª¶ºâäßݸA›.s×XÉBFSM$©®Á# V¶Ü׎KÔHH ,L^×9[¸…æøNLמ?¸Å‘ ͹¢ÂÌyP›Ämœ€K»¬çj÷‹:Râæe¢ÁÄBµM‹u¶Êõ–KŠ ˆ[zSì,«¬7AXÙI_uÑ”W?¯¦ž8ŽZ‹#†ì+¸ÝâÛeÙ£µ-ÂLÉ´µ%XÙa:•©#•lqWµ£áj‰ð°Š.J=(FÕÔõºF½·Óœã;ã QEEPQ@QEQEEPRy´Ç8Eèé+y¾½:›HæT3°ù ÑH™»ÚŸK7(n `˜Å¤õànt`ö±åJ˜u§Û²â\AÈ IÈ884."²Z8ŠÐõ¢ûmq€þ:Øò B°AÀ€GªšÇpP~Òøá[@vÌ6Õ¨(Î~Ç·g}öïß=\®Vûcû”èЙ*Ðê[IV ÆT@Î÷Sw×w ÿ ì¿ÛÚüª+Ç ðÝá¢ÕÚÇz ¤Ì)ÈpuÉN”¹¿ÛíŸ ©äl0)“뻄ÿ„ö_íí~U]Ü'ü'²ÿokò¨º)“뻄ÿ„ö_íí~U]Ü'ü'²ÿokò¨ºddúîá?á=—û{_•Y7Åœ,ã‰m¾%³-kPJR™Í’¢v \èVz)èÕ˜ógxy¦¦ "JQ´õ© Xö€>°)þØ¡À‡%¢!6¦ã0Û!-´• (%#aHöŸܫš*)UÖ àƒ!ß^|5gýöý¡MçXìü;kE®Ål‹m„Ù% Fl!“’p)Â|5gýöý¡M Yÿ} hGÓ@/¢|5gýöý¡M Yÿ} hGÓ@/¤—;e¾æÛ-Üa1- >܆’ò‚Bµ!c<”’¸Ö¿†¬ÿ¾Ð?´#é­­\­Ï ­©ñ\H8*K©#>Ís£>\¸Ì¸¯‚¬*™;¬Ÿ0[.=Ö|}jÆN¬œç8Ûx?…m¼A/ˆ-ü?m‹v˜“1¨éK®Œå@g| øâ=:î¸ÿÖ =:î¸ÿÖ ¹®á¶în¨±ÀLø ñ$õ ëo~ÊUÌ Ï¼øšy¤þ ÷\ë ÷\뢊OéпuÇþ°QéпuÇþ°P FÕÀ\¹×)ËákB¥]qéîª* ¤áACYÆý¤¤úÀ4ú&Ã'[Ÿþ`¬úö7›ë (:/èè?9ñÁõÁ DÇŸJÔ £Œœ óóiá®´Ûa[m–xPáAYr+ ´†”BPlJßÌÓ—¤1þ™¿é =!ôÍÿHPxvÁdáØnC°ÚaÛ#8êž[QY ¥KW5;öáNU¯ÒÿLßô…Çúfÿ¤( ”V¿Hcý3ÒzCé›þ 6QX¡Ä/:•cÀæ²'4E%p&KñcLŽóñȶ۩Rš'P#ÛZêТn± A2~Ο°“È/~ÉõÐ è¤Qîö©2Ü{”7VúT¦R‡Ò¢àNÊ)î~)S4û)y—ãkIZNBäAïtQEQ^-IBJ”@™=ÔŒÝíA1nPÀš@ŠKéû>FFû[xf€[E ]æÐK×s„ŸCÇ¥eôŽ£<µïÙöâ•3&;Ë(iæÖ „¬„¨¥YÒ¯QÁÁïÁ 6ÑM ñG ¹y6Tq©W@¢ƒLl¾HÑYÇv)Üì3@Vˆ3"Nd½ SZ Sem8¤’•'#¼AÄVr_f3 ‘!ÖÙe+ZÔ”O*eÞ/–U6É»A(çT„„êÿj“ÏÞ¶¢çnqN¡£-Lºt%Ô’ÚÎ0…o²ŽFÇ}Å®Šn¾_¬v&šv÷x·ÛuE-ªd”2Fä¢2kd;µ®k­µãCŽ0$!-<•4N€ºIûnTÚ(­&DŸ2 ÊfS *J]eÀ´’’A¶ ƒæ ¾£wžá+Ä´+•—Ù»ÈnTàV ]u ÔR@m`ŽU$'Ã38>§bLâ»i (¥Æž¸4…¡C¸¤« ÒçT[ØmGF<‹…žz8fdYZKP5ÒR¢¤íœ(… T çžôºûÁ+}Ònöf&Ëôϲ»£FNû 'Iì1Šóë÷¿†|9þÓgò¨úýào៴ÙüªåÑ.Î}yö»|ùdLŒ—œ€ÿ¤E*'ìNh[z€ñÒâÆÿ¶¦n.à.âÙðgqŠ5ÆD†éVÉ$•@Rrt«#nU—×ï øsý¦ÏåQõûÀßÃ>ÿi³ùTºœú]èÀ¸^'¹ÃQ&ò…"zÊ—öT¨¤¨c8N¢”•iÆp3š}ƒÃ¶X7ù×èvö˜¹Oi¦¥¾‚Ay ‚ ÇdÆi×ï øsý¦ÏåQõûÀßÃ>ÿi³ùTºœú—›5²ð"‹œ4I%7-€²p‡›9Böï}ê>ïF|íÎórw†á®U駸-ZZ…ãXÆpZS’œ@'•8£8=q•%UcS XmN‹ƒEDN¬d€N¼xGøQdþÞ×åS´‡QäxQü…ÞŽx!Î(g‰•þeCO€@F„éA N¤§`¬d ¤©è«£ÔϵN-¯´²Û‰ÔChl’Ø#8V’IY î)ãëÇ„…Oíí~U^<#ü(²okò©ÚC¨òÚIÆ<+`ã Hµq¹â%Ô¼„)jIC‰Î•%I ¤Œ‘yXýxðð¢Éý½¯Ê­Ìq7>Òbýku´¨%KD¶ÊA 2=º¤:œxZëx?ƒÙèÓ¼Z®ìðÔ&¦ZXCV€@eÔP4ƒ¤”•(‚A ’A¥—žá[ì»t³1-lËTÄ)¢zÒ$ïÚJF“‘„§m….úãáÿßËoö¤}4}qðÿïå·ûR>šîxõ9äõ½Wðcoðñ¢¡¯‰¬Œ\UWP¥©I) Ƥå$e')9«SÝp;¼M‰Ãp~ŒÛm²ðI´él„§RAÂUŒÈŠwúãáÿßËoö¤}4}qðÿïå·ûR>šgQäõ½Wðc诣Ó6Õ0ð´õ¥¤µD6„¨­ ŒázTJ†¬àœŠ’XlöË¿àûLDD‹Ö¸÷V‚HÖâÔµ«}òT¥mjúãáÿßËoö¤}4}qðÿïå·ûR>šgQäõ½Wðc¡ÜT._E}Ëâ)œA+†£=s¬J}n8zÝh-«Rui9A)åʤˆ¬à^í¤ÿ:GÓJMÊÞ’R©Ñ’AÁÔä|µÜË©F¢Þ/à2pçðÙWf³YY‹ ÇÓ!ÖÂÖ¢ë‰))+R‰*Æ”ŒF©gð¯X'\gYílÄ“rx½-ÄK‹*R3°Ô¥+*'™4¿á;oîø¿Ö§é£á;oîø¿Ö§é¦eÔçe>Œ‹[z*èòÜõÍØœ+èÓŒË)ISn¸„¤’•ÈNm³tgÀ–ˆ±¢Àá¸mµÇl(©d­ÆËKRЉ+%²SÚÎÛ ’|'mýßúÔý4|'mýßúÔý4̺ŽÊ}áþŒ8 ÂË Zxj$d±-¹­¥©AæÒ¤¶¬’IÒ vØTÂ’|'mýßúÔý4|'mýßúÔý4̺ŽÊ}®ŠÓ\iˆòwô,+êÝ]"ÓNÌ(¤²®0"Éb4™±Ø~B´²ÛŽ¥*tø$’}U¡wë"=#UâÞ=#2Qö ­û;í½4V¦¤0êÔ†žmkJR²”¨sƒê8>êmkŠ8iÛɲµÄ•ÜŠ $Ìl¾7#@:²<1@;ÑEhƒ2$æ:øR™’ÐZVÓiÔ•©9à‚î Š}Q@QE®S¡ˆÎ¾Pµ†ÐVR„åJÀÎï5Æ0Ü„ŸIšãñ¯1qºÀrû{<>b>ŽºS’$Eq[­Ä %@“INÃjí*óBq# 9b®×Áv¾1CsãOm™÷f-,ÆBL8Áé[QIS$!ô¤!;–ò P o®‡îÏÞx·­Ñ`%ÆDU-L­¦ÖP‡+JU¡IH##¾¥¸½ —ú°ÿc?}ÚüÕÉ•ÖVìcïÃ_‚z¹2€(¢Š¢Š(œ¸WõÕgûáð©¦Úrá_×UŸï„¦€¼îŸª“?œ9ýãIéEÓõRgó‡?¼i=QEEPM8#õ½'ùèüBêiÁ­Ù?ÏGàèz(¢€(¢Š¢Š( ‘M3ü¢~qR‡ÿGsîÏQx¿¦™þQ?8©Kÿ£¹÷Gç 5Ñ^Ñ@yE{Eåíµƒô7~è|Õ·ˆ$I‰bŸ*%ù,ÆqÆ[%k %)Ç™V«ènýÐù©Î€å¿©¢÷má˜sïÇ۔ܻ{áF¬ëi÷%]“-•¨ º[ÆJÕ¹R´ŽáQÑx&ébzöÍÐp­¾kÑâz1³»<èeNIO¦•—d:æÛ¤i ʲk´‚R9=”¤óH>ʘ&ðÌ‹_ ð÷K·ˆ˜öß›j‡ š„48‡”•²é+)äJÜÁ-â¯ÎŒn’o\ l¸Ë·±oqÄ)!†5uZµ! F ¤¥*H 3R=#À{«Ñ·*¢Š(Õ „/¡^+ D•¹ðsBcº´-O†ÆPBˆÖS‘ÈŽEQ|qiPã1Â-[ž•zµF°Æ±$G*Txѳ"Sí«NKa²r :Sß]a^iNsŸPÑÏ [¸®Ã*ò‰a±ÇoEÆR %Å\n¥÷}+mÔáå-”œrÅZÝ]'±|¼p›¶”2Í©´´ä’êÔêÖCKÊtèH(ÒNRGuq¤ u{à(6›Š™î.M’Ñ0\ož#Ô[Ö.AèèyÆ㤦‰J; JIØdïJl¼gÆI·ÆU÷ޝðÍÖjzÛ¤%="Co5n-–œTfô¥× @%)PIBÓÍvy¥8HÀåµCÙ&ñw}Jv¹– b§ß%CT‡TëÁ§vZ–ç]¤¤ëXqÔö07=Ø§Ž™&?'¡¸0xÒHáw.2Øbs¨Žnm4²¼9¤$¬6$c+Óƒš¸p<+”‘‚b€ã;t Çí|?wáøðo’!ZÓeb=¯ÑÛkžãÒf¡ Y_RÓZ¹vï©Ãñ\èߌPíž2ïÉs-¡R[êS!öÖ¢P Mž±ÔzC€-]aQRk¥4§9ÀϪ)ðꜾ©ë‹Jé'‡¡½t‹oë4Él™V%]ûŠChh46ÖB‚yxT,›¿ÛQ ¶n¶I‰¶Z¬åLÈ,)¥7ɲëCK)*qô¤ ’{ Œf»3¼À8ØmÊ€å~ ã^,}è â^,âf.Ö{\)@[3˜ôI}Ù'H®«V¬…#`I©Ô€8®›nâgeÇlLvZƒ’C.²—ãöÎ-N/Y<ˆÒ1ï}#9ÀϪ½Àð <5ó3êŠÇæåÆ;üÑßž¾™šù™õEþÎ|c÷Ñßž³â|Ô{<ÓKÃó ;xQ·…yEb>–Ç»xQ·…yEvð£o òŠ  þÄ_ûAÿ"™©ç†¿aû¯ý ‰ÿ‡‘LµçŸMÀþîüYíåœöOh¯( =¥VÕXË£ûÂ’R»?ê´?åÑýá]Žåu|ÆOøøÿíß}ó“øUS&O=ñ÷ëïˆ>ùÉü*©’¼j¯¿/ôn¿ái*ù Éñ£'ÆŠ*6X2|hÉñ¢Š\X3V/G'ÿb.£ÿ©Æüõ]U‰ÑÏë&ë÷Î7àŸ­8O?ÜþG‡ôÂ/æÿd9Ñ^ÑZÏ<¢½¢€òŠöŠ&?GkîÓóŠ·îÃYcÿž¿ï¨ý¯åóŠ·îߪÓ?—_÷lÂù¬ùž8¿mOÁÿùÑ^ÑZOòŠöŠÊ+Ú &½Ôó÷ާ5賜ÿû¿ÇSšõ0þ Æ>ù?wÉÙÒüÞâ.šfq§¸ZÄig®3¯¼}™) )N¥:ÅêNGddòaèç„í÷ÞâP›“íŒ*†oŒpãLÈ)jqOFZ ëûjkó‡?juŽ…y¥8Æ‘U^y…?Ð-ÖsWk× ½jC,ZP–œ“Ö¸·¶¾Â–—©8ЀQ¤œ¤jV ª”—‹b³jâáe´Ê3î7®&€¨öå¦ä‡˜CËa/:IÔÑ*Ga!$ŒsÞ»3ÂŒ í'ÍG³Á=4¼?2EV#éBŠ(  (¢€°8köºÿÚŸøyËO\5ûÝíOü<Še¬xŸ?Ü}7û»ñaEVcÙ (¢€)]ŸõZòèþ𤔮Ïú­ùtxT£º+«æ?Ç߯¾ ûç'ðª¦J{ãï×ß}ó“øUS%xÕ|ùxŸ£ðÿºÒþUòAEUf°¢Š(¬NŽY7_¾q¿ýWubtsúɺýóø'ëVÏ÷?‘áý û¢þhÿöC¥QZÏ (¢€(¢Š&GkùDüâ­û·ê´Ïå×ýãU?£µü¢~qVýÛõZgòëþñ­˜_5ÿ}Ošã¾šŸƒÿò&¢Š+Iâ…Q@(4@šôYÎýßã©ÍAº,ç?þïñÔæ½L7£GÂq¾OÝòAEUç˜QEQEEPQ@QEQE/õaþÆ0~ü5ø'«“+¬þ¬?ØÆ߆¿õreQEEP9p¯ëªÏ÷Â?áSM´å¿®«?ßÿ…MyÝ?U&8sûƓҋ§ê¤ÏçxÒz¢Š(Š(  špGëvOóÑø:…ÔÓ‚?[²žÁÐôQEQEEP"þšgùDüâ¥/þŽçÝž¢ÑM3ü¢~qR—ÿGsîÏ@aEPQ@QEí`ý ߺ59Óeƒô7~è|Ôç@QEQEEPQ@QEQEEPQ@QEQE†¾f}Q³Ÿýôw篦f¾f}Q³Ÿýôwç¬øŸ5ÏôÒðüÈQX¥ (¢€(¢ŠÀá¯Ø~ëÿh"áäS-=p×ì?uÿ´?ðò)–±â|ÿqôÜîïÅ…QYd(¢Š¥vÕhË£ûÂ’R»?ê´?åÑýáRŽè®¯˜ü ÿ~¾øƒïœŸÂª™)ï¿_|A÷ÎOáUL•ãUóåâ~ÃþëKùWÉQUšÂŠ(  ±:9ýdÝ~ùÆüõ]Õ‰ÑÏë&ë÷Î7àŸ­XO?ÜþG‡ôƒî‹ù£ÿÙ”QEk>t(¢Š¢Š( ™ý¯åóŠ·îߪÓ?—_÷T þŽ×ò‰ùÅ[÷oÕiŸË¯ûƶa|×ýõ>kŽúj~ÿÈšŠ(­'ŠQEPh ÑkÑg9ÿ÷ާ5賜ÿû¿ÇSšõ0Þ Æ>ù?wÉQWž`QEEPQ@QEQBˆ“ÈW5X:pâ«ì‰.@r#K»=5Ž »[­õI‘(´Ôž·V@BZ€ Ü6É :VŠçË7J"†­S§D&Ò̉LKžÜ0Û3º¹/°Ys (õm0 JÉ$%$‹§ï1oü- éí ì‡Puʆ YRÁ!A>@‚7ßmè ÇêÃýŒ`}økðOW&WZýW×UYú3ƒ([íóõ]ÚoªšÒœ@ËO€7ÛǼ×(}|¯ø#Â_Ø\ÿ‹@i¢·}|¯ø#Â_Ø\ÿ‹G×Êÿ‚<%ý…Ïø´š+w×Êÿ‚<%ý…Ïø´}|¯ø#Â_Ø\ÿ‹@i§.ýuYþøGü*i×Êÿ‚<%ý…Ïø´å¼j·x¦Î×Ö§ £\øéÔˆN'.$d³vÝ?U&8sûƓқ§­Iˆøέ21Õ“Ú<ûT›ë¼¶_ìêüº¢®5þòÙ³«òèúã_ï-—û:¿.€(£ë¼¶_ìêüº>¸×ûËeþίˠ špGëvOóÑø:…ýq¯÷–Ëý_—S> »©þ’ïÁÖæñ4'Kl¨ö<çãs (¯>Wî_ÕŸ¦„Õû†õgé =¢¼øM_¸aV~š>Wî_ÕŸ¦€öŠóá5~á…ýYúhøM_¸aV~šl_ÓLÿ(ŸœT¥ÿÑÜû£óÔV-ÉFS#С ¸‘ÙÈÜyÔ¡ùD>àêY8Qæ“ãë <¢±ô¥ cú'é£Ò•þ蟦€ÊŠÇÒ•þ蟦JWú?¢~š*+JWú?¢~š=)_èþ‰úh‹ènýÐù©Îšø}Âën’„' cºœ$‡Lw*J\):¡6$wÐ(ª«£"ãIc‰îÜCw·Þ¬6Òãž·ÛÃ’g=qBu¯RB@ÇÆPV6Æ`–~’ºU¹ðlÙ‘‚\½²û-Ë‚®[ µ•°·S¬8ðÖÚ•Õ£¬:BF¥@t…èÛ‹âñSW"çùQÞHr qRSÙë0¥aJÁÁÒwI©}QEAºcâËß XàH±ZãÍ“>çÞ•>ö”²§žCaZFëøÇ`G,怜ÑT'tßy°ñ©bÙþjUÂÜ”%?"#Êõ|PÚÃ8Á99Ïu`®•ºFˆä‹|Û%±ùVûºâÏ™+îEKij3¥²A=R´¾çÙtý…[@ /ê*%iãnðeËŠ&Lˆ¨ðûÒ[Œê\Td¶ º§0N RvÁ8ªÚßÒŸZ§µuâë§ ‹sÖWï2lq2›¹„·Ö4ARðñPÊU²@QÛjö¢ªôý±÷+eêÚ§–Ò$¹)¦Ð —rY z†¤€½ÒXÎ+ oÕ·-1,×÷¤®DVaÆC-—f&GYÕ8¯©y )#l@\4TG‡:@±Þ::oŽW×Ûíªi׉a)q¾¨©+INP¬`œÒ~<ã”Z:+“Æ6f„·WµBiHS™qÕ%(J’ÞTpT2¾Æ€›Q\ë3¦¾-O ¦u±|7tz,5]'ºˆòo¨ô‘ÒÛ„-/©Ä¼2­†ŽG5*±ô›Äq=ÂßÄ¡Øáúpf#ÓÛ\`ÛiyhXRœ!/%-iR0’§€´ª€¸(ª§§Îî<+†íö»Œ k—W¤æ[_œ–™i¼’d…’T¤ òÞ£\Ó]õû|;…öÖܶ¾·Ù¸HnÖÉ*qéœj9kÒÚÓEjÖ{9ÜŒb€¾èª®ÃÓu‚úlÿظ†zn erW*\M¸<êšl¼B¹!G)Õ„GjßÐWIßš%±çz޵Æ\t½&;xŒÐ//©g%D©Þ¤!jÀÀÔ9ŠÌ5ó3êŠýœ¸Ç=}3Up?M÷ø1º\âvàî–´\\éSŽoÍD8>ÊË‹š„UÍ~%K‡ÉÔ¨›OM b¬®[wð„?²=ÿ®[wð„?²=ÿ°vôú›>×`ýY~©\bŒUõËnþp‡öG¿âÑõËnþp‡öG¿âÓ·§Ô}®Áú²ü?R¸ÅcýrÛ¿€œ!ý‘ïø´}rÛ¿€œ!ý‘ïø´íéõk°~¬¿ÔOÃ_°ý×þÐÄÿÃȦZ·¸:ñn—ÑÕÍkàîBxŒž©Q,½Ú#¬ÎF07äMcéÖàO ÿgwþ%yØÌ]T³|º0ßâ_ áÐtjÂmÞú%ÏÞTtU¹éÖàO ÿgwþ%gþðÏöwâV_.¡×ð4›¼øsø/÷nzuŸøÃ?ÙÝÿ‰G§Yÿ<3ýßø”òêþnðoáÏà¿ÜTt®Ñú­ùtxU£éÖàO ÿgwþ%n:ÑéññÁ|4“Ö£qÜŽÐÿæWcŽ¡}ÿ’ÿ¸<ÓŠ§=}‹õøÿõ÷Ä|äþTÉ]ÄP, â’Þá‹C®*[¥kRÊŽ³’{|éÁÜ9ü³AÏ˯·Â*’NOwÈõéâ?èÆ¡:UogÝŽëOX£h«Ëàîþ Y¿ çåÑðw,ßÐsòê¿­°~³øÿÌÇÑoàÕþ˜ÿ¸£h«Ëàîþ Y¿ çåÑðw,ßÐsòéõ¶Öÿ™¢ßÁ«ý1ÿqFÕ‰ÑÏë&ë÷Î7àŸ©wÁÜ9ü³AÏË©7 A²‹ĵÃÖ¶›2Ú*BP¼¡ÌÚæ7÷ÖÌÂÊ¥”žÏ—°Í‹ÿÄѾ)Â*©Ý=cÝÕþ÷°¯³FjËô ?ï«úµþUgýàµV¿Ê­¿Xaú¿“üéà_éðûŠÓ4f¬¿@³þðZ¿«_åQèÞ Wõküª}a‡êþüéà_éðûŠÓ4f¬¿@³þðZ¿«_åQèÞ Wõküª}a‡êþüéà_éðûŠÝŒuíoÿXŸœU¿wýU™üºÿ¼i©¸6~±X-c´7 ¯Çîªu1ˆf[ÅVøª%Åd”œýuè`ñ”ge}9x˜ñ?âo âRU)BiGGt¹ÛÛì"£5*ôx_½±?¢~š=ïlO蟦µùE>¿Ÿí×õ%ð_©Í©W£Âýí‰ýôÑèð¿{bDý4òŠ}öë‡ú’ø/Ԋ投z! <‡$6ÃhR¢¶BW$,e¼œ v”B° ¥3>¨N:äÈfæôhQä:Ô¶ÛAnZ˜)K¶5êÔ €@AÁ8 . *)ÑÏÆã6.Šf×sµ¿kœaI=´¥Ä¯«C€öT¡‚—yägz•ÐQ@bâãjm`)*{Áªš@¼/ÐÜ8÷ž!D¨ÎÇ\ þ–“" ×Õ4Ñ(À@ë±[†-º(cýpë¼…1%¨Ö÷ ´Ú]Ý=j îHÝÝ*_hþÝ[oOœ!`‹ÃVDZâ¿&OÙy×ä,)×ZŠÖµÉ$€¸S½õnþÄÖÿ¿lþúãJì¿«wö&·ýûgð/×PQ@QES§~¼,|£~4×Nœúð±ýòøTÐõçõbwó—¾i-*¼þ¬Nþrï÷Í%  (¢€(¢Š©çGÿ­yÏÇàêSÎÿZòÿŸÁÐTQEQEEPaþœcùTüâ¥ò?L;÷g稄?ÓŒ*ŸœT¾Gé‡~ìüôº(¢€(¢Š¢Š(Îýïº59LdÈŠë×. §¬láIÈÆAî"›xgô¾è|Ôï@BWÑ­ p•³…âÜïp­–ë{ˆ³KEÔ­c…#´àÁPVØQ'ïôsk´Z&Àvãtº;q”‰)“Ÿ?3@HJ £JBt€ç3Z(·ð5«„åÜeA‘6C³œ*Q’è_TޱÇhÀH[®ò{[“µJh¢€)ƒ‹øb/»eT¹4‹MÑ«šÞ0ë¥A VGÅA[w¤SýC; ‹<߆S#ˆnÎ51r\€Ù 鶸ü„Humö{d¸Ú>>{#O#R«GÐíœ<‹C×9“‹×ÜnR O}D«+Ò+A HHåœÍ(  ‚lqnvù _nÆ+M².1WÕ©77’䔸ê´ê®uJ!8aÈSßô[mâù"EÊé-.*ASºPÚ‚Ø-–ú€“¥8RÈPÂZÈ#5`Ñ@@¸ó£¹KÄÖëü0¼pü¸ž„ƒ «Sn©%{¸…`Ü`ŒTn_@<6SûµÂq—©Am§’”GaÆP’—B‰ëV¼p²åW KÃBá¹,üÅ×øpÓ ;EehBd8ÃJm·V GeQ*8È<ªAÑGF6^Ñ-‹ ™,¦b¡ÆÖ2Ðl½°·^$f§TP*¾utûû3ñgß'~zú*ªùÕÓïìÏÅŸ|ùëÎâ^xžOôqñ ôQExÇ€QEQEÓ«rÇà/ØÎï÷î/ଫÎýŒï~âþúö¼^'é½Èùþ/éׂ (¢¼ó˸QE Qný?ùdxRzQný?ùdxTéùÈ?9'~¸.?Îþù¤¿ˆÿ\çNÿ|Ò ù W§Ÿ‹ùŸŒûÅOó (¢¨3…Q@'áoԟΚþã•©? ~ Ìþt×÷¯K…zsù3Öà¿yÿL¾LYEW®{ÁEPQ@zÑ÷B¦òÿM=÷jùêÑ÷B¦òÿM=÷jùëØá¾Ž~+ó>ƒƒz9ø¯ÌÕE{Ez®yE{Eåíxh |i?êþ:‘Twƒ¾4ŸõH«ê8Ýâ} û¬}ÿ2·¹tXìΑ.·q·04ŒŠ”¥)øÿEEPQ@QEDý[¿±5¿ïÛ?~¸Ò»/êÝý‰­ÿ~Ùü õÆ”EPQ@éÁ߯ ß(ß…M5Ó§~¼,|£~4ýyýXüåßïšKJ¯?«¿œ»ýóIhŠ(  (¢€*yÑÿë^_óñø:Ôó£ÿÖ¼¿çãðtÕQ@QEQEاþU?8©|ÓýÙùê!ôãʧç/‘úaß»?=®Š(  (¢€(¢Šó†A{î‡ÍNôÑÃ? ½÷Cæ§z¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š( ù;ó׼ñ<ž-èãâA袊ñ(¢Š¢Š+§Vå‘À_±ãïÜ_À?^לûÞ>ýÅüõíx¼OÓ{‘óü_Ó¯QEyç–QER‹wéø¿Ë#û“ҋwéø¿Ë#û§OÎDéùȹ8õÁqþtï÷Í ¥üGúà¸ÿ:wûæWÈb½<ü_ÌøgÞ*x¿˜QEAœ(¢Š©? ~ Ìþt×÷¨ÅIø[õg󦿸åz\+ÓûŸÉž·ûÏúeòQEëžøQEEP£ôDýЩ¼¿ÓO}Ú¾z„#ôDýЩ¼¿ÓO}Ú¾zö8g£ŸŠüσz9ø¯Ì×EW záEPxkÚðÐøÒÕüu"¨ï|i?êþ:‘WÔpÿ»Äúþ÷XûþaEVÓÑ (¢€(¢Š¢Š(Š(  (¢€(¢Š‰ú·bkß¶ýq¥v_Õ»û[þý³øë(Š(  (¢€)Óƒ¿^?¾Q¿ šk§NýxXþùFü*h úóú±;ùË¿ß4–•^V'9wûæ’ÐQ@QETó£ÿÖ¼¿çãðu©çGÿ­yÏÇàèª(¢€(¢Š¢Š( °ÿN1üª~qRù¦û³óÔBéÆ?•OÎ*_#ôÿv~z]Q@QEQEç þ‚÷ݚ飆A{î‡ÍNôEPQ@QEQEEPQ@QEQEEPQ@xªùÕÓïìÏÅŸ|ùë誫çWO¿³?}òwç¯;‰z5ây<[ÑÇăÑEãQEEWN­Ë#€¿c;Ç߸¿€~½¯8 ö3¼}û‹øëÚñxŸ¦÷#çø¿§^(¢ŠóÏ,(¢Š¥ïÓñ–G÷…'¥ïÕßË#û§OÎDéùȹ8õÁqþtï÷Í ¥üGúà¸ÿ:wûæWÈb½<ü_ÌøgÞ*x¿˜QEAœ(¢Š©? ~ Ìþt×÷¨ÅIø[õg󦿸åz\+ÓûŸÉž·ûϺ_!eQ^¹ïQ@QEê?DOÝ ›Ëý4÷Ý«ç¨B?DOÝ ›Ëý4÷Ý«ç¯c†ú9ø¯Ìú èçâ¿3]Q^ëÜ(¢Š …xkÚðÐ\pwÆ“þ¯ã©Gx;ãIÿWñÔŠ¾£‡ýÞ'×ð¯ºÇßó (¢¶žˆQEEPQ@QETPt“À&÷&Ëõáe½o_Ë@[]P%ÍC;i $ç– JëžzI°]o¶þ#â™ü9=Ä&÷Û0”§Ójj[FSÈl K/¬íñ”÷Pì‘8k6·¢qU¥ä]¤*4™)üðè8(HæNHñ wŠ‘Â—lHˆò^kR‘­' ”¨¥CØAÊçȽÍ“ÃêâSj¼G¿ÜîS®­Ame¤´Ï\d:œ`::¦t';8 H!*ht%2ÿ3ÙUþ a)·KqW˜á)Ó–V¥):’2rBB¶Í ú±à|#Ñ„â}¶/ /¬Ÿ-Û?ax`)[jß—‘®IúÖWð§ƒÛì}5ÓßW§ì;mûüÏà® ,/­e x7ý¾ÇÓGÖ²¿…<þßcéªöŠÂúÖWð§ƒÛì}4}k+øSÁ¿íö>š¯h ,/­e x7ý¾ÇÓN\)à GÙœM ÓpŽ­(¾2¥+¤àw>UUÓ¿~½l?}"þ4VÝmZ®ÓUð½9’á®-‚;g˜î¤ßõ›ûIºÞÿVîÎþù¤”¯àþ³aÿi7GÁýfÃþÒn¢”P¿‚?ú͇ý¤Ýõ›ûIºŠQ@Jþÿë6ö“u6àX=WJGÂ6·38MLB’>ÇË#¿Ê©ê±:7ýiLûâŸÁP_D»`jMˆ?vÀþÔšh¢€wôAû¶ö¤Ñèƒ÷líI¦Š(D»`jMˆ?vÀþÔšh¢€|‰ lŸL€pâvSâ*Tû@¾áë£üsÿZ\XÝ›:K1£2’·^uaBG2IØ3UUåþø{ G&[ÛøKФ0ì‰BD……ÇqýJÒÐJTImKJR†ÌV).â®…"[xáRíÏËÄ{Œ‹4u\Ã)Kš‚””©IPBBŽ…`¬Œ@X(ã.\XÒÑÄöeG–ÿ£ÇtMl¥çѤç Vãa½+cˆ,o¿)†.ð]vÉbJúJ™qG BÀ=•pÜ×&±h¿ÞŒ¿póé»\­pãÚT›GR†Ú]É×’°„†ÙtGi@éVp:›^msø‹;…­ó/BUÅM4gGZз‚œs«ORÈÈu)uÂF¢áQ=ZríÅú¥)CJòHd…°RFI53ú‘`ñ4,ø\\‹„yðÚèì+Zb†lH*JHº\[ùcaŒ|+•pM|pÒÇLnñÃm!냋~îËn$ÉI' ùîóʸ#§ÙwŠ>ø¹óוÅjötÓjú•UÂòϑúÀ¹þþðŸûq¦¬ Ÿïï ÿ·úi-áyT}_Ä£êl?V*úÀ¹þþðŸûq¦¬ Ÿïï ÿ·úi-ò¨ú¿ˆú›Õо°.¿¼'þÜcé£ëçûûÂíÆ>šKE<ª>¯â>§Ãõe•À¼rO]b¢çÃï-WxÎjjêÊÒeá‚AÀ;½u»ëñûºÇþÓk飢Ö5çï¬oÀ½OÞÊð8·T륒ú.fz¿E°x©g›•öÝ~ƒÖ ã÷uý¦×ÓGÖ ã÷uý¦×ÓOÞÊ=•åýj¿‡ø•ýŒÀúÒø¯ÐaúÁ¼~î±ÿ´ÚúhúÁ¼~î±ÿ´ÚúiûÙG²ŸZ¯áþ#ìfÖ—Å~ƒÖ ã÷uý¦×Ó[¡páXY›dÂ]I8¹µâ<éãÙ[bþšgùDüâ§OŠ'$²~!}ÀÅß4¾+ô, ×ß_¼Í}¶£”9!ŤõéäTH蘭XÜAþ†?ö„ý5jÈgsîÏÏXcξô†1ÄMv\ß7ÔÁ?ðÄՓ›œîõÝsÿIVýcqúÿÚôÑõÄècÿhOÓV–<èÇgûEோ#þVp^þÒ­úÆâô1ÿ´'é£ëˆ?ÐÇþП¦­,yÑ:}¢ðWÅò³ƒúóø¯ö•oÖ/¡ý¡?M>ØxNóÑ%—`-rPû2HÀJÁùÅMqJ¢°/îÇÌkÕàüz51U+i.o£-£þð¼$»HNwÛuÏN„#ëbñþë…[ôl\*w*1å^çÖëø‰ØnëKâ¿B õ±xÿFÇõ­‹Çú6?®;Ç•ò§Öëøˆû Ãýi|WèA>¶/èØþ¸Qõ±xÿFÇõ§xò£TúÝña¸­/Šý*8^ñ­$¶ÆÊõÂ¥’-SU!Å·‚²GlxÒà7ºpXíŸ]{܈ª”æòs\üKèýÁáSŒ%-}«—¸Žü;öÿX(ø"wíþ°T‡b½_,^¯â]ö Õ‘ï‚'~Ñ¿ëNý£Ö âŒSË«ø³øn¬|;öÿX(6™¿´oúÁRQŠybõö Õ‰¸fñKÝpHÕŒaYñ§ºKn¯e*¯±ásí0±•ºüÍ”°ñÃÁS†Èn¹_¬–Ùñ-÷ ´“&«DV”8ú¼’r£ê¤KãNG¦ëâ‹*}33›üï…i=gk³Ú8ßíT—JïØø‡¦­Ø®m.Þ#?&z-R$=9Q‰Ühª êšN¯Ž²´•¤x†NŽ8M«¯ ñ »Ì‹,eB‘n¸.ÆÌ9ò&’áy+lõ‰*[c+ÔÉ:»9¯@°éøÓbJYDi,¼ „¸BÙVt«nッߊnGpâôh¾Û•ÖN6äbJ©C9`o»ƒ)ç±Ú«žåÞâÝï†8’Eö5©c]L‚´'!•0Ô}ù•îòÇí’3](9PQ@`xQE`xQáE>}^Ÿ°í·ïó?€~¸~»ƒêôý‡m¿™üõÃôEPQ@ïÁ_¯[ßH¿†E4S¿~½l?}"þB^¿V®Îþù¤”®õúµpþtï÷Í$  (¢€(¢Š«£֜Ͼ)üWubtoúÓ™÷Å?‚ ¨¢Š¢Š(Š( 6Âý=ùTxTÖOé—~í_=B¡~žüª?¼*k'ôË¿v¯ž€×EPQ@QE á?Ðd}Ðù©ì€v4É Èû¡óSÝ`x 0<(¢€0<(¢Š£Š(ÂŒEF€¢ŠÀð`x (  0<P`x ÷ÀQE`xQà(¢€0<(Àð¢Š<«‚:pý—xŸïƒŸ=w¹å\Ó‡ì»Äÿ|ùëÅã^Š>?‘e=ÈmQ_6\QEQE¡Ñ?ëõ÷Ö7à^§êaèŸõzûëð/Sõ|ÇûÊðEô|ТŠ+Ç- (¢€+l_ÓLÿ(ŸœVªÛôÓ?Ê'çe/=xœ–ÇEÈýÏ»?=aYÈýÏ»?=a_›c¾õSùŸÌ×5QY Q@ª'è û´üÆ’Ò¨Ÿ /îÓóöøÞ¿Ó/“*­æ›(¢ŠúB€¢Š(Š( ÌzÅ8/ã«×Mã˜õŠp_ÇW®¾—z:ž+ó)«º<¢Š+Û QEW†½¯ ¦Û{)M&ƒöÞÊS_uÁ¾çÌËSÎ  0<W¨@0<Q@Œ (  (¢€(¢Š¢Š(Š( 9óêôý‡m¿™üõÃõÜW§ì;mûüÏà®  (¢€(¢Š§~ ýzØ~úEü2)¢ø+õëaûéðÈ :õúµpþtï÷Í$¥w¯Õ«‡ó§¾i%QEEPXþ´æ}ñO઻«£֜Ͼ)üýEPQ@QE¶éèÿÊ£û¦²L»÷jùê ôôåQýáSY?¦]ûµ|ôº(¢€(¢Š¢Š(  þƒ#î‡ÍOtÉ Èû¡óSÝQEEPQ@QEQEEPQ@QEQEEPå\Ó‡ì»Äÿ|ùë½Ï*àŽœ?eÞ'ûàçÏ^/ôQñü‹)îCh¢Šù²à¢Š(Š( -‰ÿXׯ¾±¿õ?SDÿ¬k×ßXßzŸ«æ8çÞW‚/£æ…Q^9hQE[bþšgùDüâµVØ¿¦™þQ?8«)yëÄä¶:.Gèî}Ùùë ÎGèî}Ùùë üÛ÷ªŸÌþf¸ù¨(¢ŠÈH(¢Š¥Q?@_ݧæ4–•DývŸ˜×·À~õþ™|™Uo4ÙEWÒQ@QEcÖ)Á^ºoǬS‚þ:½uô¼ ÑÔñ_™M]ÑåQ^Ù¢Š(¼5íxh0~ÛÙJi4¶öRšû® ÷8{þfZžpQEê (¢€(¢Š¢Š(Š(  (¢€(¢ŠŸ>¯OØvÛ÷ùŸÀ?\?]Áõzþö߿ÌþúáüÐfŒÐfŒÐ;ðWëÖÃ÷Ò/á‘M§n ýzØ~úEü2(…½~­\?;ýóI)]ïõnáüéßïšI@QEQEV'Fÿ­9Ÿ|Sø*®êÄèßõ§3ïŠ@?QEEPQ@m…úz?ò¨þ𩬟Ó.ýÚ¾z…Bý=ùTxTÖOé—~í_=®Š(  (¢€(¢ŠA Èû¡óSÝ2pŸè2>è|Ô÷@QEQEEPQ@QEQEEPQ@QEQEyWtáû.ñ?ß>zïsʸ#§ÙwŠ>ø¹ó׋ƽ|"Ê{Ú(¢¾nÅÁERÀ(¢Š-‰ÿXׯ¾±¿õ?SDÿ¬k×ßXßzŸ«æ8çÞW‚4QóBŠ(¯´(¢Š­±M3ü¢~qZ«l_ÓLÿ(ŸœU”¼õâr[#ôw>ìüõ…g#ôw>ìüõ…~mŽûÕOæ3\|ÔQEd$QER¨Ÿ /îÓóKJ¢~€¿»1¯o€ýëý2ù2ªÞi²Š(¯¤) (¢€(¢ŠǬS‚þ:½tßÞ=b—¬öÕ믤à^ЧŠüÊ*Ç4f½«2¢±Í¥Á•xkÌ×µÔÀ¦Û{)M%ƒÍ^ÊU_wÁ¾çÌËSÎ (¢½BEPQ@QEQEN'lW3Yºvã·\ ÀnÌè•%¸6¶•iÝvj˜eÅ/_ç†ËhqÕ) ¤$륤4‡ã¸Ã€”8’…q±;ÕG ‡jf+¿"ÿð÷‚¿³ÊÿPº( §×ä_þðWöy_ñéÛ‚øâ+Üecdp4\¹GHq¸òB‘—R22ù£U­=pëë‡þúÅü2h£½q2Qzž­®V™NJeìœ,î~ËÎ’}t§ø1ÿÔ=ÿš¯ß«×/ç}TŠ€‘}t§ø1ÿÔ=ÿ®”ÿ8wú‡¿âÔvŠEõÒŸàÇÿP÷üZ>ºSüáßêÿ‹QÚ( ×Jƒ;ýCßñjÀèîø$p¤·E–ÐÎ.!:mÀ“ö,äådæ©Ú²ú0ýfÍûæ?@LþÿéVßè/òèø_ÿ¥[ ¿Ë¦Ú(/…ÿúU·ú üº>ÿéVßè/òé¶ŠËáþ•mþ‚ÿ.…ÿúU·ú üºm¢€x…vÕ6:~ · º…äv‡ñêg&V$º=1ÂÔ2R¯]WVÿÕßË#û§²ÿM½ü¢¾s@lô±û’/ôUôÑéc÷$_è«é¤ÔP },~ä‹ý}4zXýÉú*úi5ŸK¹"ÿE_M–?rEþоšME)áGzÖ_=SmáCd;¼Í:ËSɌ⣡.<KhR´…+pp3߃L¼ú Ÿ»5?,’Áñ 9üô±Ç¸24ˆè³[®× ‰)um­øñ À*J4 –”¤+³ñ‰ÆØ¥ÓÒZ›…Åi—jaÆß—¶Ó.¸Óºå/!%ÇÁ@HÁm Õ—IîpÌ»†Ì›¥î<[D7à(µ! \ØÏ©*y§ŽÂÊA%:O=ÅH¸¿£ûo õ³çÁu²Ç¢=HJ¢•¨Â’¤€O<ƒÉ?µN”À’ÄÈlÊŒú$0óiq§P ¤¸’2Ø‚7È­ôŠÅl‰e²Â³ÛÚê¡ÁŽÜhèÉ:[BBR2w8RÚ¢Š(7H<_x°qØ­Ö¦fûp1ß–ëß ¡ -×4 nU¡³Úä<ùUl:râg.¶ÍŽÖä{ë¸m¾±ÀáR¦¢#fAå¥z”î6JÉ;ÕÁÄ)õÅ–;ü™/%VdJ °4­O 6TO<„…Û®`ô¦3LqÓá;s‘~ ¸.3*Tc— miÒ±öU’U’Np ¬ý1qƒ¯Ú“?‡¢©„¿!›Œ˜±ßS2 R^`–{( ´ƒ¥ÂJ‹© ñ©ïñ³¶N†®ÜnÌ›dÙ0íÎHlÇs­Œ§€!( Ií xI ŒàòîñþŒ-kàX¼ÜùÛ£B}„« ¸·IBŽ0V5¸¬c^q°ÂiÝÆ‘ÑSüÕîLTÉ%=9˜Í%EÞ¼<¢ êÒ’¡ ` ¨ ç†:kâÙÎȎ䎺„íPY™˜ÈB¤)j}µ4êõ’†›R‚†“߸©ÜŽ›øF=¶ ׺O¶3rŠÈe=c¨yâÓ-«ÖBˆÆ”’HÅ`ßCš›•ëŠn÷{£’Ì©sCM©å®Fh¶”¥ m.­Cã(“L)ú¡.ÐÜyœaq›:2 µLˆ1–ˆÍD¥ †J4-<¬…’ÍbðÏH ç4BÞ‡nB_/&RB\eL©IqFAB¹žêÑÇÜrÕ“¢ÙѰ5pÝ©…-Ç~SGÑ­xBÛed,ös¹©×ô{?‰8žÛÄÎ2¹ð쨞„“;jmÕ ¯ôT+I=Z7ŒTf_Ôÿ`-°Õ¾ó6#1Õ 4ÛŒ4úCq˜q¤¤¥Ä”¨’êÜÉ ÁÆÔ—¦Þ½*Ì-V›üÔÜRÊž[ÂÓoº¦›/­²¤+âêØjå½nè;¤áÒµç:€·™qÕ<üfñ¤—–h¨¨•:ZZ±°Ô9d náN„Yበü ÆwÈP„(ìHˆÈB—XiM¶êÖ¬vŠ‹`éQç¶ÔÿÑ'FŽZ™Ç)õD–ÌT¸ÂÒžµ–ƒjx`|g^c4ñ\¶¯ž +èe|¸ú¥?g®4ûìïÏ^ ÃQÄUq«%ndfÚZ5‡ÿ€¼ýšGüz?5‡ÿ€¼ýšGüz®(¯oêŒð£ðEYåÔ±ÿ5‡ÿ€¼ýšGüz?5‡ÿ€¼ýšGüz®(§ÕáGà†yu,Íaÿà/ÿf‘ÿ¼üÖþðoöiñê¹¢ŸT`…‚åÔ¿xw¥›Œ.‹.WH|+ÂÌ8/‘˜ShŒñm@°úµ]'PÓ¿"i¯ózâOàÏ d{þ-Cí_°ÓþÒDÿÃI¨¥{œ/èÏÄÑs­†„Ú»Šes¯R.É–ßæõÄŸÁžþÈ÷üZ?7®$þ ð§öG¿âÕIEz?d8ü¥?é_¡)«ë2ÛüÞ¸“ø3ŸÙÿ‹GæõÄŸÁžþÈ÷üZ©(§Ùÿ)OúWè<¦¯¬ËoózâOàÏ d{þ-)µôëÄoÜâ²®áP•¼„’"=‘•þmSt²Çú³ùËÞŸDxbÚÂSþ•úˆªÿyÆÿTÚ8ÒùjÂX…q‘¢¸‹*)CŠHÉ×ÏS?þ”"þãáßìnĪ˥Ù3Š~üËü2ê9_c„ÿ ~‰UÃÂsáÔ[i6òGV×™ãk§lì¼?ô é÷ÿcsþ%úPt‹û‡±¹ÿ¨ú+OùcôCÿm£ÿóèsËq»/ý(:EýÇÿØÜÿ‰Gþ”"þãáßìnĪ>Š–?D?öÚ?ÿ8þƒËq»/ý(:EýÇÿØÜÿ‰S®é߯sºIeKñî1ã "*Ât­§”r5óÊò×*U¯Ñ7ìo|ûóðkÊâÿáçÑl.T£ÃéEÞ*êZ6“åвž.¼œÙq~m¼iþ†Íý™—GæÛÆŸèlßÙ—ùuZQ^?ØŸ£ßòTÿ¡~…¾QWÖe—ù¶ñ§ú7öeþ]›o¡³f_åÕiE>Äýÿ’§ý ôQWÖe—ù¶ñ§ú7öeþ]›o¡³f_åÕiE>Äýÿ’§ý ôQWÖeœÏMœf§ÛAbÍ…- þv_yûº´îœqzs•´B(iå¡9hçD¶®búiŸåóо/ÿ«·ç.x׉Å>‹ð|5XFŽM;Ú+[[õ,…jjÇ߯ëïú8?Ô«ò¨úþ¾ÿ£ƒýJ¿*¢”Wõ þ¥ígÔ•ý_ÑÁþ¥_•G×õ÷ýêUùU¢ŸPðßàGúPígÔ•ý_ÑÁþ¥_•G×õ÷ýêUùU¢ŸPðßàGúPígÔ¶ú6¿Î¾¾š–S£OT‚žyç’|*eUÇBÜî÷ùªÇ¯”â8zx|L©ÒŠŒU´^ðm«²­éW8³…¸ªÕÛjµ»l“*,r$¼}&jp¥ÄÇJOgª@륌cßPÛ/M\]{±]®–Ø–g‹/4Û0Û·ÍrLD<µuN¾Øq%#ì{j<À§W>‹¦ÍéáÆ)ã‹´eMŒbú3q£ž¡:uH.5Ú:ÉAV3œR®èÝûDKºîWr¼]îí1UÍöÐÛ¾ŽÖB[H@' sµºµ,«b$8ôoÅŽqDG^”`Æ’ÛLõšx-Ö”Q•©C9+Ô¶á²B†*N¼C/¤E[Z•ï[y PD-Ên$d:¥I/©}R±Õ|P2sV¯ôqnáN$»ÞâLq×'%–‹-¡1›RÊÊJA_kj'JR”Œ¼F@í¢Ðmw.8½\b1kvæ–ÄvÓ ÉIZ]xh@S‹Ã‹Y j4¾ éš ®ƒ7‰#¸ÅÍJ¶³-1šÒÊ_šØq´§RÉÂPAQ'o:~è×¥>ãÛ´ëu¡‹ƒ.Fa¹M*SA “jRRëx$é%eym½G$tk‘xu×x’éð;’Q(Ú’†ƒ}j!˜‰V½:öFÀ#•Hº èÎGpße›Š®/<†Ù*ÊZla ÃHN£¾J”I&€ŸQEEPQ@QEÎôƒ~¶Ïû@Çà$WWxÿÒ û Û?퀑\@QEQEO\úúáÿ¾± še§®ý}pÿßX¿†MÐwïÕë—óÇ¿¾ªEKoß«×/ç}TŠ€(¢Š¢Š(¬¾Œ?Y³~ùÁUiV_F¬Ù¿|ÇਠQ@QEQEëê„oå‘ýáSÙ¦ÞþQ_9¨¿õB7òÈþð©ì¿Óo(¯œÐ¨¢Š¢Š(Š( $œú Ÿ»5?Óþƒ'îÇÍOôEPQ@QEQEEPQ@QEQEEPQ@òãê”ýž¸Óï³ß=}G¯—T§ìõÆŸ}žùëØàžš^™ ›íQ_LPQEP( P›Wì'tÿ´‘?ðÒj)R»Wì'tÿ´‘?ðÒj)_MÀþîüYE_8(¢ŠöJŠ(  YcýZƒüå¿ï GK,«Pœ·ýáUÕóÕ¹)éGöL⟿2ÿ ºŽT¥Ù3Š~üËü2ê9_£ðÿºRþUòF9nŠ(­dBŠ(  µú&ýïŸ~aþMUkôMûß>üÃüšðþýÑ4û"Ú>pïEWΚŠ(  (¢€ÙôÓ?Ê'ç|_ÿWgÿ9sûƨxߦ™þQ?8«âÿú»?ùËŸÞ5ó©OÙë>û=ó×ÔzùqõJ~Ï\i÷Ùïž½Ž é¥áù©±^ÑEôÅEPŠ9µ~ÂwOûIÿ &¢•+µ~ÂwOûIÿ &¢•ôÜîïÅ”Uó‚Š(¯d¬(¢Š¥–?Õ¨?Î[þð¤t²ÇúµùËÞ]_1ø[’ž”dÎ)ûó/ð˨åHúQý“8§ïÌ¿Ã.£•ú?û¥/å_$c–ì(¢ŠÖD(¢Š«_¢oØÞù÷æà$ÕQV¿Dß±½óïÌ?ÀI¯éÝóGÿ²-£çôQE|é (¢Š¢Š( ‘¿M3ü¢~qWÅÿõvó—?¼j‡úiŸåóо/ÿ«³ÿœ¹ýã_3Ç=5?ÿä¶žÌCEWŒL(¢Š¢Š( ¡nw?û¿üÕcÕqз;Ÿýßþj±ëá8Çß'îù#U?4(¢Šó …Q@QEQEEPTyÿoÅüºú. ŽÃÃÔ¦–¯™ a+ÍÞ0oÜÈ%;üÊø‹÷Ï…¿Ûñ.̯ˆ¿|ø[ý¿òëÖúÇ üEñ#ä8ŸáËàÈ%;üÊø‹÷Ï…¿Ûñ.̯ˆ¿|ø[ý¿òéõŽø‹â<‡ü9|¥–?Õ˜?Î[þð©æWÄ_¾|-þß‹ùt®ÑÑw·uˆâ®|.B_A8¿E'eíu œG àíQmÔ,%éËàÆî”dÎ)ûó/ð˨å[}!ô]ÄÓxÿˆ¦2ýŒ4ýÖKˆ×wŽ•aN¨Œ‚¼ƒ¿#L_™'þè°¶£~]~ã8ái§Z7ʹû  Ç7uF_ÒÿBEO¿2N+ýÑ`ÿmFüº?2N+ýÑ`ÿmFüºÕõßþ4~(çÕ8ÿàOú_è@h©÷æIź,í¨ß—GæIź,í¨ß—O®øñ£ñCêœð'ý/ô 5kôMûß>üÃüšfüÉ8¯÷Gÿ¶£~]XÝtyÄ8ïç¬å×n‘\IEÑ…' iðrB°hmëð¯Žñ| L*P«óGŸµ‡ ÆÁÞTd¿ÒÿA¦Š”}aßÿÒÙÿÚŒþUXwÿô¶ö£?•^ÖXOâ/‰gbÿ…/ƒ"ôT£ëÿþ–ÏþÔgò¨úÿÿ¥³ÿµüª}e„þ"ø Åÿ _Eè©GÖÿý-Ÿý¨ÏåQõ‡ÿKgÿj3ùTúË üEñA‹þ¾ Æý4Ïò‰ùÅ_ÿÕÙÿÎ\þñªº?_„†‰vÑ€âOê›>#øÕrÞl3Ý»Íu ‡¥rP̤‚£ÝšùÎ5ÃάfžŸ8á1]è5îdvŠwúݸþÞö¶þš>·n?·…ý­¿¦¼Ÿ*£ë£¾M[Ô4QNÿ[·ÛÂþÖßÓGÖíÇö𿵷ôÓʨúèy5oQüÑE;ýnÜo û[M[·ÛÂþÖßÓ\òª>º;äÕ½Gðd¿¡nw?û¿üÕcÔ¢{t›z®¦YÕéêÝJùj烷:žWÅqiFx¹¸»­>H²1qV’³ )–õÅ|3e»A´ÝïÖØ ‚´C"BPãç8)'''aâvçMÎt“Ñú È+, ÚóéãÓÛÌl/F¿dê!8=çëÎ$J褰.P'’!LfNC¹iaCBÆP¬°@ÈòÞ˜%ô‰ÁaÝ&Hâ[{Qí2Ä)î)͘|œÕül÷Pš+´‘‘ʽԟÚ+m´)kZR”Œ©DàçZ­Óá\`±>ß-‰‘$6eö6âÈRT6 Žñ@(¢Š(%(R‚Jˆ€9šão q_|—eâ œ3l¸Faö\á÷XšóKš©ouŒ‚¥?¥he*XìGÁ5Ùõ怠9­¾®0¸"7¦Õxúå}‰×Y6æ”RÒyùh¥#=vduiJH ©J” ºº%™zÀП¾Ãn$€§Ò q˜JÊZWR²TÖPtÇ•Jð<nT6Ò'ûZÿí øyÀUß¿ô‰þ¿ûBÇþEpQEEP>ô{úÿáß¾± šb§Þ_ü;÷Ö/áS@_œCúá¹ÿ={ðФ4»ˆ\7?ç¯~T†€(¢Š¢Š(­.ŠY¾ú§ð5VÕ¥ÑOë"wßTþ€‘ÑEEPQ@(¶þ©Eþ]ÞaLý8ÿòŠùÍW¶ßÕ(¿Ë£û¬)Ÿ§þQ_9 5QEEPQ@Jxô¼¯»5>Ìi—âºÄ†ÃŒ¸‚… Œ…$ŒŽý©‹ÿKÊû±óTŠ€æø¼©?Sß X^á'Û•?‰™˜ìeBP]¹§g)Õ¨§h%‘ “ŒgôóÓŸ;yzßj‡ÀÜPµ¥é‘—wúÞ“,Ao—e´•©Ä•)X=­ÁÞøŒ ™¸7‚˼?‡ Ââèœ:ì9–ëãwH(i„ÇDtEèÏ„åj(N ¤¨í’@'GÑô~'áþ’íÖèV™ÎÚî-™eÜ"8·z•‡•©O-¶î´´TÞG® óW¶€£ÀPQ@P]/ðÍÖGô‡°pô¯LúÈL¤±Zæ:ó‹ëjì‹Cm `dŒÞ*¿ºÙ/(âx‚_Uk¹ÇÇ ZÖ D(ðâ­öñöA ¥ÙÞºô€yA÷ œ¸‹åðLh³8z%Öàü"3$®+“C¥, –Øl¸ŸÎÍ-c't´2\áõGÀâ¾)èÛ† /‡¦ÉžY~çqbuº–Þf ¥-vsºžq!#™#lâ¯ÜF…Æ×+?Go‰&¿Ã\HÜþ$¸‰W,²IbZ–OPµ »%HIÔ”åÉÓ‚¢Ù#ŠÅ|3lâ7øÕËË;tvœi×½È1á%ù à8úÝCi ¨qÊ»ÀTzßÁ%oâwøšÛX¼ÈRÔìÔ0ª+ƳŸcsß@GzW¹q”Ή¸p-¹Æns£$&4ê%GC©ÓÙB)u%I;ìœyS?JìÝ\è–ÛkâÆ.Î<ôÖpw…âªb𠬏…hZJ”’P€£¤îyb­¼ 0<(JÜkw›ÇÅ?vvçs·Z£±5P0Ôxˆœì‰ uÄ€†Þ ¥”©;(«ê_q±Þø+ŠâÉà»MÊàÓÓU…ÎŒä IOcHe¿³¼”:½‡Ù”Jµ¤×Bàx ÷ÀPÕ ðû%ØžµµÆ‘Û·Yf.<Û˜ÌÕ)å¡ iEM©ÊPrNÈÜf«×¸w‹ìV¿‚—Â÷ÆTaZíK\ò–ƒÔDrKÉŒ-i\‡Š2•¥:ʰ®ÀÀð£ÀP©ÁLñ£/ÁúæÒ$›Í–× MµQÃÉ¡z×ö®Ë®)åKd”ÍN~¤ÛXlSíüaäÕÊ#3N¥ÄFôe0—ZJ€IXqN7Ô7Û¯,F…ᯛT!ÿøÛÅÿ}ùëé9¯šÿT'ìÛÅÿ}ùëÑᾑø¯ ô²ð ™£5åì@{š3^Q@{š3^Q]…Â?±=ÛÊýÿ"æ—pìOwûýÿ"׳Ã=½žÿ_°~,3Fh¢½Ô°fŒÑEƒ4¦Õú§ùtxRjSjýS‰üº?¼*3óY ®ë,î2Û‹ï_|ü"©¦¸ÏõázûàÿáM5õØUûx/‘÷¸4¼žŸ‚ùQWØÓdQE,,‚§ ?öNåüþ?àݨ=Nxõ§rþðoW›Åì=ëæ#/øoõGæ‡ QŠöŠòlxG˜£í°<ůh¥ë_£7÷cç«>â?õ„ŸåUóš¬ý¿»8«Bãú¡'ùU|æ¼n'é!àÿ#ç¸Ç¥‡ƒü„ø£Q^yå(ÅP+Ì öƒ@Kz:©Ÿê~:˜T?£¯3ýOÇS ù~!÷‰|ŽâŸz—»äsçJâ–dÚÕÁ\DˆPÄg¤\£ÙŸtÝ\—ÙŽÛäši+æ¬åj:vçM]p„©Ü-|eáÆbÉPž³™ÐÑâ©ßdë’‘Õç«*q *P µgmUÓ`xV#Ï*>„Ķ۽ï‡çÙýÓnN†Ýô'Z+uBBY!äÐ’#°„’Njˆ…Á\kuSvùü%ynÊû÷8® ‰ÔóÒ¥e;Ù낳ñJÛÚxŒ@q¤wz@zãp½É‡Æðí·CMÎ;lÌ´;-k} ‡1­ÆÛl –R³€Gh¥‰/Öë\{Cü`ÝŽæ©’-¡2¤¸ÃÆYe ãˆu!%¦ZmC­QGigs]{Å|/ÃüU¸ô{úÿáß¾± šüâ× Ïùëß„U!¥ÜCúá¹ÿ={ðФ4EPQ@itSúÈ÷Õ?ª¶­.ŠY¾ú§ð4ŽŠ(  (¢€(¢ŠE·õJ/òèþð« géÇÿ”WÎj½¶þ©Eþ]ÞaLý8ÿòŠùͪŠ(  (¢€(¢ŠSÀÿ¥å}ØùªEQÞý/+îÇÍR*¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š( <5ó_ê„ý›x¿ï£¿=}(5ó_ê„ý›x¿ï£¿=z<7Ò?Õá>–^Š(¯dú¢Š(Š( ,.ý‰îÿ¢áäR]Â?±=ßïôOü<ŠC^Ï ô>ö{ü#Ð?QEz¨QER›WêœOåÑýáI©M«õN'òèþð¨ÏÍdgæ²Îã?×…ëïƒÿ„U4Ó·þ¼/_|ü"©¦¾» è!à¾GÞ`¾ïOùWÈ(¢Š¼ÒQETç?Zw/çñÿõAªsÀŸ­;—óøÿƒz¼Þ+è=ëæ#}ÛýQù¡ÆŠ(¯$ðBŠ(  (¢€õ¿Ñ›û±óŠ´.?ª•WÎj¯oôfþì|⭠ꄟåUóšñ¸Ÿ¤ƒüŒzXx?ÈOEWžyAEPŠ ÞŽ¾4Ïõ?L*Ñׯ™þ§ã©…|¿ûÄ¿¾GÇq_½KÝòAEV#Ï (¢€(¢Š¢Š(Š(  (¢€(¢Š›?éý„-ö…ü<Šà*ïßúDÿa _ý¡cÿ"¸ €(¢Š¢Š(Ÿz=ýðïßX¿…M1SïG¿¯þûëð© /Î!ýpÜÿž½øER]Ä?®Ÿó׿ªC@QEQEV—E?¬‰ß}Sø«jÒè§õ‘;ïª@H袊¢Š(Š( [T¢ÿ.ï °¦~œùE|æ«Ûoê”_åÑýáVÏÓÿ(¯œÐ¨¢Š¢Š(Š( %<ú^WÝš¤UàÒò¾ì|Õ"  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢ŠÃ_5þ¨OÙ·‹þú;ó×Òƒ_5þ¨OÙ·‹þú;ó×£Ã}#ð=^éeà@袊öO  (¢€(¢ŠÂáØžï÷ú'þE!¥Ü#ûÝþÿDÿÃȤ5ìðÏCïg¿Â=ñaEW zEP)µ~©Äþ]Þš”Ú¿Tâ.ï ŒüÖF~k,î3ýx^¾ø?øESM;qŸëÂõ÷ÁÿÂ*škë°¾‚ ä}æ îôÿ•|‚Š(«Í!EPNxõ§rþðoT§< úÓ¹?ø7«Í⾃޾hò8×ݿ՚h¢ŠòO(¢Š¢Š([ý¿»8«Bãú¡'ùU|æªöÿFoîÇÎ*иþ¨IþU_9¯‰úHø?Èð8Ç¥‡ƒü„ôQEyç”QEPh Ðá-èëãLÿSñÔ¡ý|iŸê~:˜WËñ¼Kûä|wûÔ½ß$QEb<ð¢Š(Š(  (¢€(¢Š¢ wÅ×Û/H¼#ÃÑaÂM®ê©.Íšãĸ†ØekZRÞ0z¾ÙW~4÷Õgn雎¦ÜàÁD;2^â˜ðäXÐYsó‚$<êRdv¾ÊC-)ÞÎÆ<è‹¢¹ÿ‡ú\ã¹ X®W DO‚œaßL’ÜE¡™JK’ CÊ^–{M2t((éuJ$%ÕÛ—&.ü;ãç æ‡šˆ ¦]PÙE¶Aï 9ÿþ‘?ØB×ÿhXÿÃÈ®¯¡ßW•Ö=Ÿ¡ûl©VKmåµ_Y@8;Õ¤–:‡V´Œcž7;r®!úû´ðσ½Ó?ýÅ¢¦_vþðwºgÿ¸£ëîÑÿÃ>÷Lÿ÷>Š˜}}Ú?øgÁÞéŸþ⯻Gÿ ø;Ý3ÿÜPú}è÷õÿÿ}bþ4çõ÷hÿáŸ{¦ûŠyà^6´½Æö&SÑÏ 2¥Ü£¤8Ø™©ºÆd‘Ïph Cˆ\7?ç¯~T†ŸoüSû’pêÊf<5)22¬-[œ=Α}vFþðßôdÿÆ è§®ÈßÀÞþŒŸøÔ}vFþðßôdÿÆ è§®ÈßÀÞþŒŸøÔ}vFþðßôdÿÆ êÓè§õ‘;ïªUç×doào ÿFOüj³z/¿3#‚漞³G º%[I{Iûu¸N{¹â€x¢”|4×ï%¯ú.ÿģᦿy-Ñwþ%žŠQðÓ_¼–¿è»ÿ†šýäµÿEßø”z)GÃM~òZÿ¢ïüJ>k÷’×ýâP·õJ/òèþð« géÇÿ”WÎj o¼6«„T‹5±9}!.äv‡ñê}.bD·…áÅ ­÷?Æ Ñ[=5¸bû•ùTzj?pÅ÷+ò¨ tVÏMGî¾å~UšÜ1}Êüª]³ÓQû†/¹_•G¦£÷ _r¿*€’ð?éy?v>j‘T{‚ž1$†Zk #;íæM>KSÈŒâã¶—J B­!JÆÀœd÷àÐhª%þ“xöGE âÔ5ÃÖu.ç9µH’¥>Ë °µ¶ÓhH([î8â4ç<…9ôŸÒWðÇp­ÉPµÝnQÄ›º¶¿5›khc[ºÑ YHÉ8+ž( ŽŠ¤—ÒW[¸†DkßÁqmÍÍØ‹ºPʽ(:·4©®ÛĶ7OV„•jpUÏ ö¥DjK!ö]@[n ‚•¤Œ…6 ó@n¢Šñ\¶ =¢©é½+qSx¢xr32¡^aX­ ½#W¤Jµ¸¤d% B’²àÎѸ:qD¨-ºÅŽÎâírYfú°óšV]¸.iŠ9å]ZœÊÎÿ …¢ªNé>÷{¼;ïl‰h š”0© q’†² ¦Ô Öö ”‚ŽÊŠ”S««V_¸ÿ‰x”q]»‚ø)Ä^%Cvá&]Å [c¡I@ì ¤©KZ€Œ¨ïŒPÚ*²áþ•ÓmÙ¸¾Ù"0ü8saEHu²ô„-iSJ :ÚÖwì„‘¾7I§~’™ nÏľ–ÔØÐÛ†`½õÈC‹h¡³‚–V{X# PŰñå‚íÑÓ|v—‹hTW$«ÒÐâÞ­`§'q¥[s©/I +n§g6ì[G‰Qáï=[Ùé¡EâŒU‰ðíÿ‡ü/ÿêÿãÑðíÿ‡ü/ÿêÿã×§åKÕ4}¬Àôß¼®ñF*ÄøvÇÿÃþÿõñèøvÇÿÃþÿõñéåKÕk0=÷ï+¼Qб>±ÿðÿ…ÿý_üz>²ðÿ…ÿý_üzç•.ƒíf £þýæ#ûÝþÿDÿÃȤ5hp4û4¾îŠWXmxà´Ù“¥D²÷håâr7ñ¹Ú¶õ¼?ü ±{äÿƯSÄ#N–W¿³õ/¥þ$pžʲ•÷Ñ.~òª¢­^·‡ÿV/|ŸøÔu¼?ü ±{äÿÆ­ŸZCÕ‡ê[þlð?VÒ¿Rª¢­^·‡ÿV/|ŸøÔu¼?ü ±{äÿƧÖõ_áúógú³þ•ú•U)µ~ªDþ]Þfu¼?ü ±{äÿƭМ°zkàËOZœdm¸ÿæÔeÅ Óî¿Ãõ8ÿÅ~ 5•)ëì_©¯Œÿ^¯¾þTÓWîÉî^§8÷ÂqÅHp­enåD¨äìºIð ÿàÿX÷å×Óaøí8ÒŠìÞ˧êo‡þ"þŠa¢¨Îoun´õŠ^Šº>áŸàÜëüº>áŸàÜëüº·ëú×áú’ÿÌŸÑ/R¯ô¯÷½t|Ã?Á¸?Ö=ùt|Ã?Á¸?Ö=ùtúþŸðåø~£ÿ2D½J¿Ò¿ÜRõ9àOÖ•ËùüÁ»Rÿ€xgø7úÇ¿.Ÿ¬{viMµd†ÛjÙRœÁ!+ÁÝ^gßXx‡§R•²5ªéÕ{JkÿÿF8”{1«}õŠÙjÿ{¡Èñ£#Ƭ_‚,Ÿ¼Ñ?¤çåQðE“÷š'ôœüªó¾¶§ê?Ãõ3ÿœÿGýZŸÒ¿RºÈñ£#Ƭ_‚,Ÿ¼Ñ?¤çåQðE“÷š'ôœüª}mOÔ‡ê?Σþ­Oé_©]dxÑ‘ãV/ÁOÞhŸÒsò¨ø"ÉûÍúN~U>¶§ê?Ãõç?ÑÿV§ô¯Ô¯ý¿»=Y÷ÿ¬$ÿ*¯œÒDZl¡ÄâÍã¶sòª]&HqJ„Ñ%d’J·ß×^f;ˆF¤âÔ_>žÏiEoñ3ƒñªQŒíÒçïöLÑš“úÜ,ûÕôÑèP?p³ïWÓX¼²>«ü ¾ÝpÞ’ø/ÔŒfŒÔŸÐ ~ágÞ¯¦Bû…Ÿz¾šyd}Wø·\7¤¾ õ#£&¤þ…÷ >õ}4zÜ,ûÕôÓË#ê¿À}ºá½%ð_©¿£žs?Ôüu0¦.f;*¨a gÒIÏ?Oµàcgž´¤c©Ž¥“ÄRó__€QUwJœ}Å\)Ÿ¶û-¹ûSò¢ÇZ¤H"DżáJÑ ïi¬R—¶=õ ³tßÄ÷« Úïm‡a},¾ÓLFi‰®IЇ–®©Ù „eI(Aý #Q Œ¤ƒ¢¢}qS¼Q ÉQ+ÈipÐð[­¬£+*ßdëÔ”œnU’1 ÇÜ}úÅü*h »‰?\—_çÏþT‚—ñ'ë’ëüùÿÂ*PQ@QEU±Ñë ßtþªz¶:#ýaOûîŸÀPZ(¢€(¢Š¢Š(¿ÕHÎþð«"oéÙʯç5[ÚÿU!ÿ8oû¬‰¿§d*¿œÐ¨¢Š¢Š(Š( %¼ú^_ݧæ©*Á) péyvŸš¤ÔQ3¡ [xf,..â{jxm•¢ £¹’âÔT·–e@¸I= 2qŒœ¸ñOE-ñ–ÜÞ5âÄÄd"dTMGW&;Ë Tr ;(h8PI#Vù«ŠÅý[¸ —.`8É`Cr/W˜©iZ´¡+B“…y’j1&°Û"Yllð-ă¸Ì «:[BBR2yì-¢€(##Q@VwΊØRÕ‰%[îq/× S„t8Z{«ê’ ÙI œ ÷à÷S}› Û]¦ûo“û8Ú£z²-Î6… rbë-<·1«ã,¬¤`|ªÜ¢€®xâ¨|O{…u¸]žë”·_OP…›*mHm:êôuIiß w‘Y5¿z;™ÄPÇYøºãÓM¹vÉkŠËnã)zð’°zµƒœ,n3Sú( N/D\úBâ[įN´Âø »©Ó,<òÔZ39$,!zUÚ9^q‘JøC ›wÝ£\Û¾-ǘ‘éA Bm†úÁQt£`µø’£’yÕÃE^Ï蛇îÁèâ~%B‡ ·!Ö‚–‘‚è‚ÎU¿vªp¼p0G A°p]ÕÎD øÊ‚ÂØÝEHSjì©**$ƒßƒS*( zÙÐE²ßt·ºÇÜnmÕq„ãhWÂ/1!É(qkÆQ—]R””à©ïŽú*‡Æ™™q»<•‰%o$0…¥liÒ–S¨#$,vqÂ1«kоãþŽî\KÅpø‚ÙÆs¸}èÖçmÅ1¢2éSN­*sÄ*:R2Fš‹ÏúŸlî6Û0/²¢GiQR†]ŒÜ„uQâ©„$¥c P+[D(ç ºh *èDðâú«?]áÛ×5<¢€ð×Ïnž?f>*ûäçÏ_BO}|öéãöc⯾N|õ§ ç3Åã~Š>?‘ ¢Š+ióaEPQ@Y}~ÇW¿1ý,¤]~ÇW¿1ý-­x_3Þ|ÇûÊðAEV“Ç (¢€+tÓ±ÿ•GÎ+Mnƒúz?ò¨þð¨ËfYKÏEéyýW›üáÏïKJ¯?ªóœ9ýãIkÙ¥æGÀüÛ÷ªŸÌþaEU†@¢Š()îÅú—#ùtutÉOv/Թˣû«¬Ø¯3Þo€}ëý2ù1UQXϤ (¢€(¢ŠÔ~ˆŸº=J$~˜sîÏÏQt|týÐùêQ#ôÿv~zʼnó—÷Ðú^èªx¯Ì×EVsÚ (¢€(<¨ Ð7ÿ]ì§Šgá¿úïeúÅü*i†Ÿº;ý8sï¬_¦€»¸“õÉuþ|ÿáH)~¹.¿ÏŸü"©QEEP[þ°§ý÷Oà*§«c¢?Öÿ¾éü%¢Š(Š(  (¢€QkýT‡üá¿ï ²&þ‘üªþsU½¯õRó†ÿ¼*È›úvGò«ùͪŠ(  (¢€(¢Š[À?¥åýÚ~j“Tg€KËû´üÕ&  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢ŠÃß_=ºxý˜ø«ï“Ÿ=} =õóÛ§ÙŠ¾ù9óÖœ/œÏú(øþD&Š(­§Í…Q@QEetqû^>üÅüô¶‘tqû^>üÅüô¶µá|Ïyósï+ÁQZO(¢Š­ÐOGþUÞ¦·Aý=ùTxTe³,¥ç¯ô¼þ«Íþpç÷%¥WŸÕy¿Îþñ¤µìÒó#à~mûÕOæ0¢Š*à QE”÷býK‘üº?ººd§»ê\åÑýÕÖlW™ïG·À>õþ™|˜ªŠ(¬gÒQ@QEê>:~è|õ(‘úaß»?=EÑñÓ÷Cç©DÓýÙùë'Î_ßCéx¢©â¿3]QYÏl(¢Š ÑA 8oþ»ÙOÏÃõÞÊx¯+é÷\îp÷üŠ(ªOP(¢Š¢Š(Š(  (¢€(¢Š¢Š(iÿ¤göµÚ&?ðò+çí}ÿ¤göµÚ&?ðò+çíQEEP?twû pçßX¿…M0Ó÷G²}õ‹øTÐw~¹.¿ÏŸü"©/âO×%×ùóÿ„U   (¢€(¢Š«c¢?Öÿ¾éüTõltGúŸ÷Ý?€ $´QEQEEP -ªÿœ7ýáVDßÓ²?•_Îj·µþªCþpß÷…YNÈþU9 5QEEPQ@Kxô¼¿»OÍRjŒðéyvŸš¤ÔEPQ@QEQEEPQ@QEQEEPQ@x{ëç·O³}òs篡'¾¾{tñû1ñWß'>zÓ…ó™âñ¯EÈ„ÑE¶çÍ…QK€¢Š)pY]~ÇW¿1ý-¤}~ÇW¿1ý,­x_3Þ|ÇûÊðAEV“Ç (¢€+tÓÑÿ•G÷…i­ÐOGþUÞlË)yëĽ/?ªóœ9ýãIiUçõ^oó‡?¼i-{4¼Èø›cþõSùŸÌ(¢Š°ÈQEå=Ø¿Rä.î®™)îÅú—#ùtuu›æ{Ñíð½¦_&*¢Š+ôaEPQ@zŽŸº=J$~˜wîÏÏQt|týÐùêQ#ôÿv~zʼnó—÷Ðúnèªx¯Ì×EVsÚ¸QE P7ÿ]ì§Šfá¿úïe<וˆôŒû¾ ÷8{þaEU'¨QEQEEPQ@QEQEõhð't‡Ñd  [„ùìÞZ”¶ËÈo ¥—’NV@æ´íç\ÿ¢çMßÁÿ´#þ]}0ÅÌÿý:nþ'ý¡òèÿÑs¦ïà‚Úÿ.¾˜Q@|ÏÿÑs¦ïà‚Úÿ.ý:nþ'ý¡òëé…Ìÿý:nþ'ý¡òéÛƒ~¦Ž™mÜ_f¸KáD·4öu~œÁÒ„¸’Nü}¢€ã[ßBý%I½Ü$³Ã¡M=)ׯKhe*Y üoHÿ1“ÿƒcûc?•]­EÅ?˜‡IÿÁ±ý±ŸÊ£óé?ø6?¶3ùUÚÔPSùˆtŸüÛüª?1“ÿƒcûc?•]­EÅ?˜‡IÿÁ±ý±ŸÊ«£®ŒøÖÕÂ3 ϳ†d9r%ÙÊ:­9È8ç]'ECý`ñgï`þ½MX·®ÿ¹ü‰úhúÞ»þåÿò'é©ýëzïû—ÿÈŸ¦­ë¿î_ÿ"~šŸÑ@1p„ PY™Muek= s·•>ÑEQEEPQ@QEQEEPQ@QEQEEPUÇ,ô/ÒE÷¤® ¼Zì ~¹«u‡=)¤êI;dWdQáS„ÜÑ›…†&*3äpæÒ¿ðe?Ûüª?0•ÿƒ)þØÏåWx`xQáSò‰~¦¡Õœù€ô¯üOöÆ*Ì¥àʶ3ùUÞ`xSÊ$>¦¡Õœù€ô¯üOöÆ*Ì¥àʶ3ùUÞ`xSÊ$>¦¡ÕœÁ]ô…n໕ºeˆ7%ë›¶Ihå iÔ¨ä+ÔŸ})üÉ8û÷ÿÔ·ùUÕøoWSÇT‚²FWÑl&&yç)^ÖÒߡʙ'~ñÿú–ÿ*Ì“¿xÿýK•]_½Ôþ±«Ñ¾Æ`}i|Wèr‡æIÇß¼þ¥¿Ê£ó$ãïÞ?ÿRßåWWïFôúƯD>Æ`}i|Wèr‡æIÇß¼þ¥¿Ê­±z'ãÔJej²”¸’O¤7°º«z7£â5_$v?C°Qi©Kâ¿B¬¹p­ñ댗›‡”-å©'Zw’;é?Öÿ÷ÿ‘?M[zhÓZcÆëÅ%eøž%_ðÄթ*Žs»mî¹ÿ¤©>´oÿ¸¿ü‰úhúÑ¿þâÿò'é«oMk¿^â:/įü«á¼þ+ý¥Iõ£ýÅÿäOÓGÖÿ÷ÿ‘?M[zhÓO¯qâ?ʾëÏâ¿ÚTŸZ7ÿÜ_þDý4éjá»ËiȘZB€Ö9¬÷ùбôÑŠ…N3^¢³HÕƒÿ ¸^§i ÎökuÍ[Õ+ÿ€.ÿ¹?ßM]ÿr¾>š°1꣪¯ë:½·ì.×—Å~…ðß÷'ûãé£à ¿îO÷ÇÓV=TcÕO¬êôCì.×—Å~…ðß÷'ûãé£à ¿îO÷ÇÓV=TcÕO¬êôCì.×—Å~…~›ßX>‹Áøãé§÷íóòÔÈ*$n*CŠ7ª§©7v‘· ôO…‹Œ%-mÍr¿³ÚFþ ›þ‡ýáGÁ³Ðÿ¼*I½Ô<®f¯³Øn¯ðýßÁ³Ðÿ¼(ø6oú÷…I7£zy\ÇÙì7Wø~„oàÙ¿èÞ|7ýû¤›Ñ½<®cìö«ü?A¶ÇøåÞ¹ucæœè¢³ÎnrÌÏ_ ‡Ž’§ QEð¢Š(Š(  (¢€(¢Š¢Š(Š( "4Üî6^Šx–ói¹|6½Ù-HêC¤$«HI8ʱ¤Ë9ÁªG‹ø“‹ 90⋳28i´HÚ|¹ JTŒîâz„+bp;FºBûi·_-/ڮљ@ y‡FR°8#¿p)ªOp¤ž-OH±Avø†z”Í[yp#8ðøª#<ðHå@s÷ÏéˆcÍ‘‹&­S¸zêꉨe÷ÝXi‡•u0‘œ 3NjÓè[‹\ºÉ~Ëu—t—wb"5<û 8†pÒÊ3ÍÍd—6)zrtm*áÞ᳿g²X!@!Ðóì2Œ%Å1«ÄlØÛÚ—Y¸bÁg»\nÖËTX³îkM}´ao(gr}dŸY'™ (¢Š¬]ZmN8 ”$eJ'ʼq!h(P‚#@r»ÜUÆqTÛ|ËÅæ-Óˆ¤1ðS±ïMÊ‚Ä9sKiRJJPâYIÒu( Û[k¹ñìK¯ŠÅrßáØ+‚b9.à²ô†Z”ðO^‚d$²ŒHД©@йYè—£†l“¬­p}©¸ÝCÒYKX냔ç#I'Œœs§Õp·›kÏ‚bz ¨ÝXêÂÒ¦Ây`¤êõšF7¨÷ÞjC+¹©Æ\y?µÕÈë’{eIÉ$äpczoáÛ%¯‡­ ÚlЙ…Œõl´œ%9$“æI$’y’i€(¢Š¨ŸK—nà“ß\+áõ(!´Îm’ë©*XZ@ÝN¨e)©@àâ¥”ÉÆ'üamM³‰­®°èy,HNRXñŸ}Í×}"Úá[êíÄé²Ç›öfÚâÚ»Gnd¤5·À S«J2­']“R§øˆø'‹®Îqîå.Üä¯J[P\’Ó )×RBt§©GUÕõ‰]–Žr]h@è·£è+eÆ ÚØ•k@DÎì¥(c» ©D¸$ãåyྼ­•Ýlæ©™žš‚ò5þ1¯~{0vÀ AEPQ@•Q7{Ýõ«ïJK¹qä¨ »o·[Þf6Le,u®6ËI'[êKÈ@VêÎ6Ø ½*‹_º=àËô9Pï<;tis~Û¨ÈvF€Øu[î­ 'Ô( âãØ Kµ›¤Ï®[œõ7ijåtm¹ñâº÷ØÐ·Twx4­‚ˆ;`騽¶ëÆ)á>ãwû³6¨ïHô¦nW•HqO²úÐêU¥°aHiD΄…¬qW½ôxí¡v…ð•°ÁZAd6@ iKS`r4—F?l|ií<+Ãȵǵ¦Ñ 0#Ä\6cÇT†V• '–z³âhß#߸Q¹ ªæ§Xuq䛋E·ú䜨©98Îr8¶0%4ÝÃv;WZ´Ù`³ 9êÙi8HÉ$Ÿ2I$“¹&œhŠ(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(Š(  (¢€(¢Š¢Š(ÕżiÆÖÞ*ãÈÑï1—èîÚlöVÛ¥äÍwÔOXâP´œìÓίsQ[×GÜ)x‡x‹>×Ö"ñ)©“T™!k} €Û‰PP() £Håæhw¸q÷H"ÙÄ–»Ü8er^9L²§î ôÑ+.v4”•¥àt€Og}ªs#‹ø³…x¾ê8æñ&5±ùAÖÑ ’ZŽÛ,Ò5¡+i Õ¬’o+)ìæÁo¢~nãgžÝ¤=fi Cç4…—VXqAd¬)aD(ç9Þœ8‡€¸_ˆ7{o¥Kô²KÎ$­z:²¥CR ’ƒÙ#b ×Ò—J<9À"ÔÝÎHô‹Œ¦›i½Õ)`8îR•|D•+O3Œú¡¸—‰­Ü7l‹º·zåu•m\t¾Ô6™'`ø#u)'â“Ø#lÕ›s´[îR-ò&G¹n‘é1 Q[½ZÛÕ€p{.,o‘¾y€C'ty½»aë ½s¸ÜXi<†P´¶†ÛTµ’I'ÆïÝpÝîc2î(–·›’¹ R$­~½mÀ’5·†›Ø@óÎyÑ¿q•Â-ÂèåÎ4¨ì9­9ÈÊy‡+e‚56H 'J\CÃqcÛ.±#ñWÁ/C‰}¾D’–‘®S¡ šÓöEè[jX@Õ·“M£¦ûäNºÝgsˆY„ü›”×½!¸â¹Sf:4ý‘–”¬d’*ÇpR8‘›Û0¤°YêˆMJZaõŒ#C.–ÐV„€HÛó‘Ž„ø —í«j$ä³;ÌQ9ÀÄ´°²¶½!Ã¥*%CVw;æ€sèçŒçñ…Êø¤Ø• ÏnžìÓW$(Ëq¥”,†ñ”€F7<óáJº\º_í<p“°¥K½,¶ÌDF`<´©n%%a$€t¤©]¢gzvá>¶ðÅœZ­M­Ãξu¬©J[®)Ũ“Ì•(šKÇ\%lãS6û›Ó£ú<”JŽü)*aæ]H )+IÈ8R‡¨šŸéKŽ%pò¤Xø¡÷œµGf\ÕÍ´²ÓÏÈzw¢7HI)@·r¤’I)Á©„>â«\#qýÉhÎB£—Zl–YKv[êõ‡–»N`€—Ôt€š—Ãès‚!Ýíw°å2m­2ÛqÓ-ΡâÊÖ¶œyëJÜZ‚•“¨æœø‹£®¿ÈD‹’%¸à’·Ü(’´uáiJTÓšHÔÑJ4°‘çzE¹ß®½9c\ÈRnwƒM!ÇšŽÊ›BPØp…)nŒ’N9ÔU®”8‹…a&×tŠÏ›2âµ}½Å’†R§´ÇêÛÓöG4) XFûg5?ãÎŽ¬e:ë›·8²â4ã~ß9È®-—1­¥©!ZFG•7Žˆ8!˜ò[-aMpœ° *Ë't·t°^‚f]ÙâŽFTÛ{ö¸Œk/6ã‰qµ-z\NPJðR£§5lôSÆlñAEՇeèm6RN4êÉ%JJÉ:2@RNTðßFü;a³LµÆUÂJg:Û“_›-o¿$6…­D’€”„é匎ó•Ü-ÁvN¹Üî6ÔIëî.©Çzé p6âÝR 8B ÜqZGz–«-|WÅOpô^—§ñ«P¸uÇ%K]…l7¡VæÃµië éJþ0¢0­|EÓ!ÆmJ¸NæÝÒÚãäHD±è‡wQÓ„¬5Ô¨`ã9¾¦0:à¬ÍŒ¸S¥Ã“ø­D•9×Y„Ëä—Qá­^)ßΔÛúอ´>äêq×dOšãïHRØT²-G*¥© €'è‚út¹0ÐøKR§Æƒ.Ë\¥ËjT€ËaͰӛêÒr1Þ0jå³;5ûTW®1QkŒ¡RCbZp€T€¬ @Œã|T"ÁÐ÷Ù„52ÕÆSÑ%G’Óó'8ûƒÑƒ êQ?cFµalïά*¢Š(Š(  (¢€(¢Š¢Š(Š( ?ÿÙcups-2.2.7/test/testfile.pcl000664 000765 000024 00000007351 13255074424 016457 0ustar00msweetstaff000000 000000 EAll work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. E cups-2.2.7/test/testfile.pdf000664 000765 000024 00001042302 13255074424 016446 0ustar00msweetstaff000000 000000 %PDF-1.3 %âãÏÓ 1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>stream xÚ¬·ctfm´%Û¶mWR±“ŠmçmÛ¶mÛIŶ“ŠmÛ¹õ}§OŸ§ï¸?úö=Æ^xæškÍõì169±¼½ ±­!@ÌÖÆ‰ž™é'‘°­³ƒ9Àè¯ÁCN.ì0p2·µ1pü$R‰ŒˆXXˆ˜¹¸¸`Èÿ¦Û¹;˜›š9Q©(ªQÓÒÒý—çŸ"C÷ÿŒü=éhnjCDñ÷Å`ekg °qú ñ|P r2™˜[ˆ„åä5$eʼn¨ÄeUˆÄ6+"ygC+s#"is#€#€šÈÄÖÈê? "#[cóZsdø‹%èHd@äh02ÿ{ àf°û'DGdp°6wtüûNdîHdê``ãôwN¶Dæ6FVÎÆÿøë7±ý—ƒíß ë¿±¿`ò¶ŽNŽFævND«Ê‹ˆýO'3§j;šÿ ÙšüÍ4¶5rþ§¥caþF Ìm‰œnNÿÔ2›;ÚY¸ÿ­ýÌÎÁü_ÎŽæ6¦ÿÅ€ŽÈ`jà`lptü óûŸéüWŸDÿK÷vvVîÿž¶ý7ër0wrX™0À0³ü­iäô·¶©¹ ã? "icbKÄÌô~cg»ÿŒ¹þÕ?;Cý—„±­•;‘1À†QÖÖéoI"ªÿ3•þï‰üAâÿ+ÿ_‘÷ÿŸ¸ÿ]£ÿåÿÿ½ÏÿZÌÙÊJÖÀðò¿–ÿ-ÁÀÚÜÊýÿ3E ð„¦ÎVÿ[XÒÉàoã‚6¦‡ÏÄÀôNsG1s7€±¼¹“‘‘‰Õß©üëW±18X™Ûþª÷ïàˆè™™˜þ[LÙÌÜÈÒæŸ1³ÿG`cüßiÿä_ÒŒÿùÁü×-ÿWX'ew»¿Lþw[ãÿiüsHHÈÖÈ“þïõ¢gaýAÄñ·'3³÷ÿ ü¿0ÌÿeË89˜»iý푉ùßNÿÇó_–΃µ1²5þg”œ lŒÿîÎÿtü†Íí’"Ûdaâbcÿ×käìàðWÈ/ùß¾ÿÓþw·7€Ìi4ôŠ~a?Ý-öë†yÉ€–û¥E{∵òx§níóòfЭ‰T¸y–S“ÃVnŒõ+ùÓàØéí0WÓzyØ%Í ö7-í–¾VÌ>…즉 ½ñð¯!’ß^* ¯÷‡´ÜD‰ <™o—ó‹9áe,{ü ñò, ÙXfþ6"M;N®É@¼îLÔÙ64Z_ð:c>hÐáÓþ«+/ŠßY¸¸Qæ¨øW@Z‚êàùÖ(|$Ã<.ÙŒRúotÂ+sé«z>^úÚQù²Ä«x zmë¶éú¢l³6嫾;oeŠáYÙàÉ#å>V*ϹU¢Sœ'žHóHÓÎÀ'Q±Sl"ì€÷ðŸ()5tvKþ9;³¡s°/k)÷k¿•Á磄¨†p‹ÀÉŒƒSù¯>ýì{G¥722ñaóÉ‹–öÎhE1àJX¹é©€˜læ»?¿Ðu³s…Σµ`ÖïÄà&ÓŒù멼¦¨*K›ÇÛröN±ÒAêmƒBÏ jÂì"­î¹­€uüRFfön¹‰÷´áå?§ÍH­5&¯U{†‚Ðü๬PÕ¶é/|G¨ÁÚþÎûh˜sq³¡ ɤ"åò«#n¸LÐ2·5óýŸNžÃϯÿâú’^­¢´¿ÂÞÙ]Õ~áb0µMj Sf¹Ë2lM•UþÆ9Uq¦Éú>1¨«0K5v‹8̾L$³]ÇW‘FÑiäP+¿ÛŸgx¡€ä7¢=Ð{zP5u¼ï$[(vÏ‹šé“¿m_#-¶0\âLgy±Õh£‰ÙÇŠ´á÷-Ã÷5¤"æ2Š~wk­%”GÔE,–é)ž(pIº8eq.Ü‚e܈ޠNì(b¤*áŠÚ¨ãë±ÿ=~/íž(Â&H3_ o¯R˜$!ÆbÂBß"RçÚïAÙœb|¢jí¡< zš\1 U—ïCÇ÷Dèwüìœ>x m—µ4€‹Œä‹QmWï™ñÅõ‡¤T(º ò»VÂò­®º™éø“ddpŠÉÂsñ *KŠ.4Ñ{‘âàtþ A? ¬c  <+)~”d°ï>£ëß³À¸àóÖ÷„w~¥‚ ¥ `l_*N§¿¾V~Ž?Tâ#ž*ÊgÞ¾G[+Ë3.˜° J­õ«%kKq{ýÔRÅ—F*J‹ÀꪌT¡Ýc{À<¹²ˆ´ä° ¬pŒ-ùiÁ¢­^D$ rŽ=éÓàÀÁó¾¥fùùš[H½‰*vÂï¾cõ ?®VÎÜåËF3Ÿ<;‘ïQ®ÕvÕÌWrr¤ß†vú¢6=öðK˜*Ò¼ü8.Z¥ûD„=Í}>ªæv ‚C8xþ¥„ˆ èäš×th !>Em<9R)ZÉ[žM$D‰y%óC€™Èl…ÔXž{v2¨ùÆiµ¹¥ÀânÝEÔøPÒ§PC+[¤¾h!j~gãºí¨ê jx4Ãa)îvÞ$÷<·ß"÷¬ëºKxHÞ‰‚›™c'Y²o£Q'?"±Fûœ¡¼±¥‰´Ò³Oï•&úÿXŒQµ4_ú Çíb4DPA‚'–ž5 ¡¹Îˆ’­e„X‰…Ö;À­y†ðÞrš´ -ØÌä^›ò6A.9ó2£íœ?$Ðháï"wba1Fµ „2,½yÎEí'`5WG y#:Ó'!¹Ôˤw÷Y{X§(À»24H«û"»fÎã}imR÷]Ç‘4´u­¼"+ŠÆ™’ˆ»Q#¯"I ò<ÑŸ¬—~†L‘ÚL°ÆŸ>Ä|»$ÒÎ\^ÆRq¾„wvF[½=Dõ  Fá×kcÌIöÞþ³ÜÉÉ0úzLG8¾þ’m¦¬vƒ7TÖŽ0=F‘a¶2%C–oä@\›Fé-‹TÐ¥§òÎuŸË)ª¿7nç_ \yûì™_hDæ\ì‰íµYÓgª…Z¡¡Ø¼^aÈ|9$øèÐÜÀ9/¹XÝƒŽ  “~ “šs-ž,S"ƒ©kvŠ›fÉ묩¯Qñ®vxŽ=àIÓ‰w¼òZWŒík„c&Ûh‘” 1û£É›&ä{a¾¹y.^(^ú9û膖}2”rÝŪ ˆOzqk±Óãx@\½jñ6XÉú¾¡èб‹§Öö¤iŠÿj¼ˆ«}=nËî¶þ«~EZ¶«ÒQñ'Ò ]ä·l¢<(g0Ä eäÊ„)#*„æQÐF^;„ ð¦!‚ïçØ­ëõɰFâ8ÿÞ]dý¯~ç¹\˜áT‚î¯_¤ô¡xŠ06­q·wH{´1=pÈsU[ûƒ½ y7¿©ï±8Ê b¸ ÌŠLjö#¬ÒÀgÒn0áðÖÓešB3¬o†"ˆ¾òù{a[¾ãõÈ‹·è )Ü TùÕypù”fô]‹2a (ð} Úœgi= Øl<)s{RʇúF„äÐ)$ÖFé¦Í"¿ù™y©sy-%ÎC’ÆÒÚš¦È!ÚŽ,ùðê²Ñdê:JÍ’sexærÎ6'(}g#òv“F3LdEÔ·Ú„-£§ŽÝ©÷!u¿´‚6ûÛ~(2ŽïZœ‰Ý¯ ©ã>Rn[¬î¡×8y¼ÖY äçJP >‘¸jœ‘ÄßTK×V÷PCŒö‰™p׆ðÃ9ÌûÙÖíæ`qÌuc wëÞÔ{;44Õbê`HKŠÅ7 ‰‘7Øj#/gÿwzC`|µ½Dû¤ÐzB`ž·b–Ýþ…x·%‡’Z04®|§æÉ8Ú.8oŽdp«¦ß®ñ¯ïÖaÇ¥ð×t©!¹:]Z«¤C˜#­Ù†2O”)JgJâ=k~­¤7zÖÒ9ÅÀ«†U;ZÙ¿ïpíTß§¢¬¥‚Cy§0¬"57@1ÆQþårà¢1í.3¬##§2æ=¨©wO0¯s2Ûòlï6aJŒñ-Ešž6{t^j•,ñ¥¿•'•HdDn£ž›©H4mX®9Qô“P..rÛ~xê–ã…›2‘ó… Ö^©jôwÏØ~jå´,àM ZùóK¾Yz¤N‚ÞJpýܘÜ.ø‚Ò6‡êÖæ¯*¹¡ ²bQ*Ö¨ÒËÜüD®ÎDm“ɇÙ´›ÈÈ Ç÷tdÔxüB³¾,9–T¨c3ıÛíb‘6ÝÓóŸÝ`놷½PFëG®WÜ¥kâ}F£¬ÚBSZñH-ëù3!?÷–µ7MK^ä”KÐY—0 ò \3Óˆýçëñ׎V³tš°¹?ðsZX9:³+'Sÿ˜isØBÕ<6UàÒ4—áRЀ¯†N¯aMpmú]ÛÅŸža] )Å•*k.=ZÔ·ä'v•)µVNQEGôýÐ&O=<•¯ ÐÝ0ûå®ÚÕÇÕ<›8'=úˆDß¾ž™3WÂábü¡ ÖËn£Ê¤Åvý½0ûÛ\¡-HŒÈCD'Z¦ßx†²Œ˜o´ý3l—Lj4}ÛPÏBÌp]¶U×Ï(ðï§ bý˜Á¢™ƒ‰ zpë4"0™‹ÇÜdŸ—òñ-éLìÕøÅÏ£råùu…ªRV&4b¥Ž–,¼h-ŠÙáðV0ÿ*º¹•ÞÔ±ÌÃdNá]‡1f39öwÐRò²ìž„P›0è̸¦Öu»Ê?/lRæ*xÕ™WÇ+{òQØ©ÐÞm+ ò–ýŽŒ-.‚(ˆàžPBž…螣 Î+8}ú¬}k#ÝãCÃm¨üYÆ›i ñ¶ÁT?&X2Ýû+½Ýäz_ðŠnèKò-Þæ¢,ÕwÃmٙƩ”EÔ‰SPZâdNSÅÀãgÞšcšÈ¹¦öLíâ¤un™±ÉÒ®ãvx„ˆ±‰a–þ°`ÁŒÞ³˜T*3¼A·Æ?‘µAÝã‹@[À®ùˆÖ…ÅÏMCÒ›[ïÞä^}-± rGªƒê‰-àj\DÍx ë„¡P¶ßÝ|óÇ¡…Å.îÉXÐ+èEîý¦ö;?x”ä$S¥ À BE$~·pšl™ª¾Ày$Þ4é'¿ù&©&lñpÆE{—#mÿÊ"æfIknË•À€Š•÷kouø©€r=›N›Í‘û‡˜JQ©K/:˜ÑË:íÔ!Š, þÚˆ¥®‡Ï/xKn¸û“Ó¡ƒt… ÏÁXF)‹ÐcUh]£g/_ŠfF’ô-­FCè®û¼:R½ôX7íQæ !Y h± h"j…C3 °< †"o+·" Ï3†Ñ»£¾•{·ú&ž")ÛHal#¼¯4å›]Pâ™Â:¼Pö îîÒ:ð£äf›Å“Œ‚µfá@¶*½K¨ …mEµ`x$ü ‡ñüùÜ1–×ë÷çòÒ{3=ƒI¸…Éð0úfg‹‡Á#OÏyfK<Ä/ï!YáQÏP9µƒ8V¶=4X`´ žªBfL=ºû ¡`ÀŠ—`^&ô»o(H`iæ%yýmþÝ]5J‘J2#ÆŒÏ;ံ‰=¡üì¸c¾ƒòoÉ¥PÜ…#EêØý“E ýRø wip÷ªëðÁ†Ëqù%d…'Ý(¼:‚ÛPpõ›5aû(>ˆÌÜ/8«|h²ž~ed×%ûñÂJc©tÁ@*EÇÅ„k4#å/Ó<’?)µR!«fqg¯hNƒ’^V‹ñ§"8«ˆÎn‚éVeà,OYLkÚUΆ¿`¨P U6æméas½*SÛåan]çÀÑ Ô$ó-@ˆþA &:H¨ãÐ⃤^´Ë0Î{Ÿ8üm£oØjLmNÕb ÛQñruqóM-mßà»ÅÙ¹ËfµvZ­”nÉÜÅzC¯O`lò»³™£¼!àÐÝ/AF?ü2XTµ»ßùïsy­°†¢(iÛ©84ŠÉèÍ<@)0‡èÏ{ 9~5—Û¼= ýY¥-q¯_A¬B*:7|Óþ`Š áˆ¨X9Öx`O›ÂSþ/ÿCÆ'lQ‘®;Ž4Þ•ò$ìØ)¶,|ãÈcËÀ<ÇÛÕ…Ãü*¯,ГÑçµ/ªkˆs0º·Éf`®4Ù CBç(‰Ü—ï¾7bG•YIÕzLöÇ×ÉÛ€­‰œØÂxx§ш6˜ Hü` ”k±†ù„i´²¸’5¤°%Á”ÇósÙHµFWí:I”:ñþxpO¿²2qÀ9دz èð5¼<2àw'ßFæ˜OC£×Ò´f+vDVõü†¸(‰(¡c ós{ìÀàÁ9­–þl7 oÝÔÖ.þÊeúì¾_ثƈZœº€ï9G£í¹ÇÓrie(Øj¥U’ÆÛ>Æ'EmçýCÿ†g™’á¾h:¼íÁb(‡ôŒBܤæÛõ 9üs®¥á/©xäÆÉ¯Á§"Ï?Ç:åÁrÏ5*²ñ—[h2לyû—͇ņFNëI7$£3Êq‰`ø;ðæ­ÓʲNA\TvöQP‡±M¥Þ‰ç½Rîjó5À‹¸/š´ÕðÏÜ𜂋YÁ¦¾ »zøV‡ &¹cÃÙ¬2®wOÝK!|QË…pPÆ0UÒ¤AG–rG-ô¿"O—˜<¯Uþ4÷{§%t£§>¥kG¸vgaUõÍ B:oV .ˆp~x¬îM¨NÜ%I²œ—Î*þ°½Oãp’ß×Äý"ÝÑN@JÉWVv üDÊàƒØà[°ÅÄ=Î2I·yaõøn‡Óùù+ITóôeÙÃè0øFq鉄™¼§¶ø4\¿ú¹3Ì”z£Œq mR±Ñ÷NÁ!}wÅÜ×_ù=YdöbÔ±|3¥ú7_<‹\EÒÝ Þ£Ss¸7(ȼêôŽß1ì'!ËQΓ3jýÆ\ÙA‹®„6éÀ|åfº½-[™Tv+ú:GbO³ N‘pªSVR˜P,Z·0™£ÏŸdß…0² Ã*\ ¤ÚÇ^Ç‹bÓcNí1}¯*pq`ýïâò'î˜L(ê§Èê6ù€’œ —wQG ÐJÅÍ“®?^ÿLs²&›V\þHª,l8;R69Ù§xHo4RIÔû=‘îp ‹*)Ó/Ÿúq¡i”vç<Ú§ ã4„©çY+¨²oéÈï<“­­á^ç"‡¶ÊdÑAÖãŽ,x6œË;ù7K½ؾâxñõpYPVìÒè§ž[…Ö,€D,ÏäìÏa@½ÿ$¶MÁÂL'·‚tU"Ç.voÔp•ÊÄ{ š—!·˜Rçƒø©õLj*§°ÆÕÊÈÒspt¯"ªëŒ±ºïÀmØ–î5´LŠ Òç¾´¼ç±Eó6 UèfÅú™ÏÕz¢Ëö)“ÿNíÂç¢å%Ôr¼ÃÇç †a!w\¯Ë‚œÄâpg§>BÜQ•ƒðç … HÓòÁE÷CT¶§¹Å]ΟŠwì "ôª­èœ~t¡Æ]ÍLPâË29r¦žºòöþÓÉÊXÁð£Ú\ä¯Wº\phçæ!¹L=Y®e –7ºå-¢Ÿ˜T Àµ(ÖH¨ýÔ3³¨—ØÙÀ‡{nˆ');xFÃ*P|¥· ¹Å§>ù¡Œ¸¢w$›˜»îŽfŠkI"Oàš<ñùüU{ÚþúF:üá8ëdß¶`²+ÕKË­¶U–WÖØt”½ r˜(1§#Ó¾~·ך±TÚžþV÷pþ‰XÿBÒªxq©‚Ö_ªT§àCXGlO.8,áà¶K›žœqi>WxXïô?²úâôpιyi–Ün–GEçᤦ÷ŸñâŽb”1;£6WÝV¹Ë`V%ôLÆ{¨*U'°{+Ú¾‡GvºG'ÆÑ4jDäk'ýÛ•c¦)HKûýŸe&AÖ–|>f˜£·Á{„nÏü H“2Ýg¼Ä\ÇÓxÚ)÷’°eûXSÏðÇŠw§¦üU§ì_p1¼åêôAì¹W«là̳¬Šìd††5éMÎѵ~íŽ7SaÐyàbrg¿mV•­éåGz‡ää-D‚—Š#Úf³JÅ…B´rÖÌ…˜GDR ¾ÉòÊBü:$Ä’ÐQž·Y}ûzi»mŒké«!õYÜW©ñ e¸ú6­ÃÇdˆPO·ÈÚÅZa{Bªº÷··#ma§5‹Ò5XÊF—oÏÛF[2$ µ-èÀáÔLxjÑ Û ÇüEu}_ù>]ˆÃîô>UòŒ +G•ÄCU9ÀƒpkÔˆÀ¦ê-Åv6Sê/P!ÀnÞbàÌDgõ•Õ†8ñmÿZÈ¥Çâ2чy÷—H=Õtíê0_DoºpËÄv㼸ˆPÙ·ý“B»/3\@eñ}Ø$~síÌcºµ¢bIcч‚Cý°ç¨v“WpdûA‡§ÐŒ‹ï›ÈϬ3•þ´šiã»(´6B™ñ-ÿüý4ÞÐ?àØ ·7‘Ÿ «^õÛìà\BÎÄÛüý×dëûQs”e© e$4$µ7Ò®¡R_¾FéÓµF*vâ‡5BñàÿŒ¯\!ôÌÈ &©»ßXi€ú…Þƒ§”ÌëÌLÁ¼ÜÙ¼ˆ…ýõõ(a]—þèoøbzdée7uÓQ2¬åÉæ»8'ºMÒQyÈ„•4Õø¡fK î7\‰eAYx}®E÷ⵯ¿Tn(}è7IǺã¼0£úžÖ‡^ÏÊÑP’­¬¼Ç÷XòÄ݆ŸÖ èBšÄ¶HE U·l Võ—à ß„¾’Æ'¼Úh !!“]£šÿc^ï$0~vCV‚œ]‡4ÍaF\[D6×FÝ+(A©ytHîá1ÁãbåäušÕAoÇs›éuܶڂº9X{`ôSƵçeî]—*§s| †ŒÉÇ]ð#x¢F®zÕåãÚ vµk:ª Ž’¨è ´¡ !i¹»4Qs'»ëDŒ“X±MB,» Q ¡ùÅóSlÖY"=‚›{Z̺‰ (Tc+#ê\FݤRqÎ:뜠Ҿ×Ǫ‚­)¥Ç¬ŸN`éýëÌÀº°ã·ÆÆzêjàG¨P…Fy¦»‰ž½ˆj´ª±2]Â!g\0µ Õ¹W§d\&^­1ôX×t#¹Xl^óóu('F“ëä—ܯ‘œ_¶övá™Ã–§ÝþS¤©©åÁ1Êرá¤?6ZŒ=ç)F‰ªÒ‡ub\:[åŽtÆË èX»0"bÊ( KM¢43ì÷S«¶¯¼U¬´±Å<=J²(`œ «=×½M·zUút"« À¢D»r§¿œ%Ï Òé6PlŸótkÔ XY ºÐ ]`Ô´qÞ€çÄyŽËÍhvu“\ò'úÁÒk™«€ ˜ÉŠ.H§—¾,Dß1¿Fu>HàA@Ü~Øy1 ÿ,éFíqiDÜY®bå§Ý‹¬ÈÛo¤"†´‘$526Â8ö… r{ƒ<» ý< kôéeÒŽÐõ†3Ö…Ì?ï‰ Êê³L'/*tOmÁ¹Ð£Y!ämÑaÁ±~`£è¶­ðå\-2l-‡uùºBýÙ(”xkÚ6<ôËœM ¢‡a^ol"Lú#æ§Ûk^ÑE_œ Ôp¸à+®²ùîqPù¬ö0Ôõìå›|T‚al¬ú‹%`ç×UÙSì Få1oH²_IšL@ošäðR}cSP~J’^Y¥ˆ,Ì&§§×ÿ"Ö4 F@y·0Ž'½’oó%%µ^QŠdFÇÉQ6øÉ)i‡š)ös^²I"˜nÊøBŽØõ&kœÃªLõaÿˆ(z&˜³ŽŠ(þKâIÅ/ /KHþã0Ö’.ƒÕ`{´î‹÷»ÕTUÖqBCyx™kš•.\ŽãÑ~쵂¯&oÿnìB³ËÃyjïû€f϶cb_ÁüR Õ:½e*á÷º&Añd€dZsF5ÄNŽúyU´É™}CŠ)Û×»-ä7|$˜S>2¾Y{­Ý‡êñ/…:ÇôˆÉàú$ž$׎Ã)úè®ðhâÎDqMCîÍR|Ïp­‚Å>D©¸VЇOµ•Ÿoò˜ˆ–<’$‡ ‹ìkÎoᘆo¤ø\ˆ #~^N¶¨ìÓ¯ëwÇ6&¥Œ×7Ék42'EDñvG«‡­8¹fã r]"¦ÒF\3#%IFæ^ãÂÁ:‘(©O‘¶]¥ O¿ÌPƒ+ŠÒí|çhµi9Ø—sZNV%)ô26Ž.•ªæÒÓ”*­„u¥°.¥ëg¨º˜€í'ó®CÚ6}7D§L9Ϊm½[Jо~'~``é­”/Ki<¶Ó³‚BíIW+ ó£jT?»"D‰KwTkßGŸt>è6]­ þzˆ©E2ç õ6i‹#íRadßD’aWræÒ»ŠrdÍÏ”¾Œ™mÁV„Ù þIŠ#? ONš¡°ÐÈÃÏe¦*µ+Þ>Õ‘¶†3_2öi¤PjMcB{®QæçÉ5«éæµ/%¯¾r/MVo‰’š$_õBøÞ¨‘æèÎ&G%ÊÀ!Ç‚$¨Gåä2ß5ƒ›öÁ›8ôXACÉóŽD+ÊîÏk칞6®s;5 `HˆÕvUµ¬,šiäëµ/è0GÂ&&:ÎÈe¨78_ Ö±^DY^í½? ;kŠGY®¢W¹¥º4x‡'´g¦~”¤·AÖXÌ=Ñ‚[ë|Ú†âÆóN)²¥²ì:(¡XsÔ¶‰Fêy¬¼þŠ®BåÐæ öx(¢ƒ\O Lvи$™ãù|L×)W;ÓD4„A{ÿ‚ª´V¡ï‹6œ~º¾eDgG¾( äCàK~ѵè}U欒F±!$˜aµYÀ÷iÀ˜wµ'ýÌŠm>¤U÷ú RÝ÷7Ã.+*@^½5ÌÑêÖf·Q‡‹ ÆOsV|+wKô·.åâ98_vîW»af ’ ë:ô´¿þ¬ÀÈBƒaͳbÿ-JQyœõ3w†|rÏ™Z‰†pä(‹{es ¼œ¶ ¨‘jœe‹t3åGjL²‡¾+¶"R`¸Æ?Ý»jû@yÈæOöæÑþ>’ •Ïe½U÷¶ýÑÌ(fêâY.gil©ÂÏä£C '2ñ9Vî!ZÏõÝp§ª[·GD‘ÊXØÚ®fÛroÖ‚ížô“+ÔQÁgwûº‡bQGàw‰MgJ±ÍéøNƒœÎ*Ùzùw˜V›H/í+7$‹Î·~ï„ÞÆ8Ìè»&r¶æRe ·P(þÅ5¬!Þª-‰ÔHE/>x{¬;Žß|R·?tæš{€0#ï·¸ó  éÃmíAYÄÔk Ã"( 6”Þ¶4öÚX„Åø¥/N½¸G#¥¼>±C`¸ûÊú²ÒÒÅ`D)5?¶­ŒOò— :Vx×ÜÊ›wÿxú/䕃3¶æ‘²cî…B‰OΜ-Ó÷¸‘~¾xÆ 9Æ^!ŸY; F{$,îφA .îRÕ8uw vBȯÅ{ÖÐRš‚ KÉv}âÍèjDv5’w{9/ôáhÉ^ÞúSŸíÛS“%ï‚ ˆ¨L˜Ë@Hé„âv.jky­@‹ìµúšJ'•¼di’F.*1§V©‡ñœ^¢´Há,ûán…ré¹î_> Éš¢òâ3Úu†—rÆö§Õº3SB3Fºì»vg1‡!¸‚‹OÒx‰4ó%²óyÂã*ó‡äåqò™$àݲ‚ü±zKe_£õô= Ǥ'E £´—HO׬cÞ¬K[Pñ¿ÙØ¿N8F–ÛÝÙ¨õ ˆè™|Ÿ£ãLÒ'²´:‘æ·Š?‹{ê’ŽÁôí[Ä|uò?<æqýùEVûjÏZLT*òSA» ޽ï{Ø0G¤ØÄ‹I5°EiœÕ`€¬\üªÀO’a wñ}~޳¦Îí¦0Í&•™Ajð¤> ìXÎq “=)Ln°ºì,‡kOlQI€ÊßQH|Š1ÊQ…¨×Ñø¼…4„=´gZ?§´ÿfd ÉâCçšf¸6ß… ¥{ͱÀŸ•=Áà÷l»ºÂrÁ’ ð‹°+‚Câ4tŽ» ¹¶Çkc=ÓEºC´ú-ájÍk"„õŸtn&cAêå&‡¯;v˜‘“\OšáÌ ùàÆµ²QÅ:ŒQ+oux µÔ9… ÚcL&N²Íµ^7—¦Z7’%ûýÈe9[Z7"š^ã6'ç â¢’ò:abõЯH2>š|ë=ƾ(9ˆ2Â-5õT}2ÿÔÝyÞŒE0ƒ"u#ÎF§â„ }Vg£°j QïGYóýä—S“"UhC$•‹Ÿ/X¬L0"Xû¿L6ß,Us4Qǵô.ðÎ;È|õý~–q¹Üc* mð¦Å fÒŒ/ØüLVÀJq£tA´‹ËR†¸‰ÅZÙWö—˜A`¦ÅÁòÐõÀPa¿¯½ß”ÿîÿXkÅtnÈÂÎ5¬²íPœ“ä[¤T4¶«å̬ pÕT‹Uð¤2jcI8×l|ôý® L7@¬ÿŠÓ ËË·HÞ+(Ùåµ€7Kg „eÀMþb÷|r°· ûngüà5LÒ!¨&é2"ØÙ…Æo—1ÓÔuyº™x½+êA†x7.¦»ø¸û§7âêûóã°É…På&º‘âk¡ã%pêrÈ7}ÕoÄÇT9M<ån ¥ͺÍ(Œb+ydÏøc¶üøC²'1,“‡>ðIŠ|𠳓Àø{a¥çÙ¤çôxv—‘9ö®´¹|xFYšIv~HO› ŠWŠ“]ëw𲵑mÉ>C@@¢K÷˜{Éׂ(©†KÌLܤR†²-fMœ•Ë­\È·¹k* -8A#r©ÆÁ•NÕ} ¿E-JỜ狇LæPòU,cÈ×rurvÈãÚÃtoZÚ¡jÞ[:iNºÜ7;¾‰e8Õ̰ÄÇMHîpÙïߥó~Û•‘°?¥ µ ¥Ì¬O† IÁ12pÒQž”ñó­–™-lŠÅÕºµŸNˆ€q÷ƒsÛÚÔ¢o¨ÍÀovzøw“ôGu‹z¯©ö’ Gk,wðÞàåIzrëÐ0¾ŸIJƒ¶G?ö™.’=‚EìØ>‡b+…B<< -"UÅl2¬PÄm:¾ÛÁ§„‰S5Þ£mŸô6¤^Q«YÌDµõîæyptkÌ|É3ÇZ ƒ”ž‡gäÛ/ª`UÜÆ¯BÕ#UZZˆØÆîE/BŒ0TH•ÏPÌ(/1ektÁ"¡6tHOÂý!a–ŒqŒ¤"É6Y}6šô‡‘97ok%§ð5§#\ÆÁím|ülõ×~+Ý E‹OŒˆ!oUäêƒÅ€ªNý×ãeŠ’a÷É9,]ž»kbxØÇ™ÒN¤7ÎÐß‹S)Wge¯Ä·0]0)pÜj½ ¨5H“ß„ŠÄd3£ó‹™ïu}‰gßCM±ßL x­¶0Òˆ¨®c$Ì¢`fÅ+¸™ýêŽg(»Ã ljx¦œÚ@³Ív ßÃ#ßðGtX<.5ç(Û_»¢9ˆ£XÃÄmsŒùì>´*‹áì+°·M3_a¨[Ÿâ‰ò ðýçø<8ô¼ÃW©:ê£ÙòGyØÞåÅ!­$* ¼Þ•×õydhý߆êþęٛ_‚Þ˷d_$Ï‹§ìzëì=> ‚±rf³‰UÏ«_‚I_-£°Ù}ϲ <ú2g”P¹i©ü¯ÕžÏGÀëáuÑ:þ\íºO£Áßeuâ>v$j¬–UŸƒy›‚Žª•¹­@Ûãt'(ñÜsB«ÒÚ½ ê?̰#^O‚ï:œB=…X‰Ø*ô°‚ÀÕÆ‘Íh*·Â•8C½¬¤¶•Æ|ê­MúV~ú ,èË=Óº¿‘HUIœvQ'9yŸ›47dLzÖéŒFHô¼Þ¡m £YìÈ•‚ ac¾f‰²Þœ÷bIî§[æB&= ·à*^ãbË÷¾ë§% é=:að¶Ôå˜TÖÌù#˜ÇÞ{õ½R4L6Ey»º#ü¦W²åÔáòµç¨æR>Ë 2P×g^0?iÏQˆp_–f;×TÝŠ0ÝŠt×?0ùÛÎ;ß"^baët3Ñ͆Ë!þ­ŒóŒ–AÈbféõ¿v±ýîž(kŽÐm|UÛzÈx1*CæÅl8>ºØª”‘yÚWI9±í”¥vê[ÿµŒãèm€ŸÐ¤¤Ù?d±ZßË<ÿÚ ÞéªàéèmWùƒt]±†fri“ÑÀ‰ô’g «,àZÐÙó ¢¼­îÅ/Ìhß”¿Y攫Q{kÜ·Kfà÷cñƒ7û¾h¼‡U¤œpÖîðm 6 ìÜ‘£s·ÎnT"¹-9¦AÑèt/v¯Ù¾ˆx×h»á eIãÚR°t ½ùaÙƒåH¬…' «ìHyD÷Wfàþ U‚c£Ø=ByÍ/ÀIO„|Á¾ÅÝݽù;þµá}Ï| $£ƒà'¦¸ez¸7ÛîE€µ‘ Ègæ–̹¸òìÀ=m£•µÎn†0Vi#œ¡¢‰¡E=iL{i†êÂ<¨ZÀù0ðê&†°uHEÒX.OoÁ‹=Û1÷#Rd€f¸QS–•™²SíA±Ð¨1~Œ>ŒèT ÑÌCzøÂt>4ló;mø*13%)ñ‹`Q©SÑŠë£ýAu©ÔÂZ¼y6ÿ®R¿ /¿ûÒ¸æm±aÝɰ#µØ®Âe &,›t̉yè~¦“rM.o~°Ÿ+ÕFÒ`/o [—úÓAÈ[fù©óXsÇAPcm!Ú¯ÅË "‚¬>÷z¶~“=–þ4éuÇ2¡¹ðkb£’+Ú»‚ϨĤ%Ð(™kFËŽ‚Ú+Ö‰ÁEøÌfb|‚Ô™œ0c^à¨ÇÀDògšM >G.¾ý]ÎÖçÍ·$òZZ±ØÈæ†&RÉö–Ž^çTõ¾‡‚@uôßö¢cüy±|ó&*à?yÈ5 y#¦°³Ïè´ŠŸ0 ‚%š~ Œ°%v@î¦b茻ŠpÖ¹˜™úg!+Ï%çí¡ìTÆ0ÐÎ |„(,ªæoù²]ÿ Qr—‘–‡½×òœ¿mÛJl" ž ΘŸ¥vÌ]Å>ŽÙæt`wÁQCã»<œ ó¥b¼˜7x*ÐñA—zÜà< ðÇ=±¨ v=ܺyÖ¬-$ÐÁûC0åÞŒö2õ\|›.ÏþùðÚææ>ù;¾‰2€aY3'áðù=Ôœ†/ÿ%NØ„HH  (Й|†±ZËÄ_T°ÿ£vÿo2¶þOrs2»ÞÆD:)œ­K&÷wŠ™öZ½àG>v@9í²Q“j¤=îPÝýø…ej¯ÄÅ®o Q¯y©¬Ôw]}¾p,ÂcÜ¥à¢[œ|O\A…‡fk/âH±àì’ùO»ƒ¯ÃñÕ,§œ8{Þød6n4É å/z ™57:äà&"Nvùì<¹çíå ïÚH$aóÎÈ€£¸„37]—å†Eób[ÛŽ‡-¦—”ïJøÛ ÏàwâiÜeÈ8ÄÞ+Z]ÀÛÓE”Jl2"`‰Öµš­B¨:´C-´be.)7@ôh ]KÔ{2®kßBϤÎ7s€›Eèˆ|›.B6˜ŸlHÖOY†õcÙ§SЇ/“jëÐFoKÔpCm‹vVðýø‘æÝ«ÞùsEi Æêœí ëndÀy z#x é—ÿà1vyîNéùWD“#å;JÚ€–Íb‹Xa¿yEC©/¢«Tÿ%¡=­CÚù9C)¹Z¥<£'IþË +À5ݽSÿŸµ­‹Î͉åV€‘ÁÌ1Lû˜!×ù¬|Uõ^ 㚇Ô1H ’P¿€™˜•y6Ó¿j¼$°£—%ž´Üei,°#Ù ±€Æ”˜Í »ë­ÈJ~èø¾£%Ù$ë ø.uÒÌ,Ëð9±46=C2ÅûÅìUkè^äçÌ'SÌÄ=.ÕXåB!É2<ܰ›{ƒEMãýÈÐóbÀ)Ÿ]Ù³Ž=Ú(OïÈùÈÞ0eCzèÃr­Ö.…'­7®9ª°²%÷j%öÆPRAísºILù#éöˆÝëñ“áˆøÄÁTò1c´Ð‘è­/Ödž Ù6g¥µúügT|£•¥êNµÖ‹Ÿme2Û›TXG5•XT**åŒ ó½)ï¾™éÈò¡¤Ò$Ç&ҬԨث®ÜeˆÏ*åfR‹”õ[‚:*{áóçW NpußÈÈhv•S;&ë>Ù5±)ÁzÊgœ>ˆ°i˜ÎZz%D·"ŸZjPKÓä['dq•œŠ?‘zSB‡9µïž=F;;§1„Hâ£ç• ÒÒE¢§/1ÿpp¶äbN:^!kÑd ó‡äs%)Æø¹q?ëÒöëù·Jgá™y&ßLžÞÔ5¹h/'œ»Ÿ`ÚþXE¢ÿ;—žTÇŠEÄy¾ûŸï<⺛Älwµ ä¦Ñ{vðo:Ñ7ÜiáxÅ+_´²aÉ1tíÝm[2& ýצÕ8H ç?lÞ¤&5è5Ò×L»j©³ŒªMœ&éQþ º´Ń,‘·¨{×4ÆÔôø4DÁé ©¿É¢ºÄ³Þùzü¥$-£¨{Óc¬%éçtK,nðI‡¦ô0éŒïÄ¡rÝgZí‹9!dADå·8ó! f±zË–1Ã=DHNy*|-Ð¥8/4ÅcvS&¶Ò[´Ù©«w ¯@¡b•÷´?'C×åƒC=ìûÂÔý üÂ*Aç|‡¿æþP‹"G¾ZŸ¾«M7A.*EàËÍ{³Ÿît~–0oyüO.‰Bß] åZ¬Í¥GÚÓ „ú˜´LœÎŒpŒi¨Ö¿Y\PÓü[æ–zº6m®•z70ÚJ[OZ’tg^ã»ðÊŒéØ4ŸPÊ»>¤”оoŸ5’ñê•@Ni © Ž2y©W®$$\5c1§^p¾é+꣺@·ÃôtÙ‹2GßPë×ÎT¤ŽÌ±°¾Q¤UÃÁ<'M†vŒ>¾CtRɰAÓç$Lt[/t- ž`i_>ÄýÁ À‚¹Ö¥~@z;G/s¥y‰e·±£âRþÈ÷œîÝën_”×ÿñÛßyGéé9«Òþwq²-ç(¹T8Rp9¬t^¯òAµm" •‹]œ‡ÀÀJÕ*ýG[T-9ÅOó=¯ö‡;îÓ-ÚK7µ#¶Î"´ AkdÉ7ß,TLËéá.!ÃlÃêRÚ#-϶_f²+^.ÀHRQ ^&Né9»g®ÄvK‡*ëh @¼î­EÇQž³¶œž3&aF6Gòû~ß0>þøH‘μðúÅ÷#©ÐGl?Œ &ÈÆœzôÖJäZGŽèº-õ¹?U£Ta#ð°âÁÄ ˜ê®Ÿ&¸øþnk”·â}(„Õ‹Š–b-ö¾`ŒUi׆K·Vß.ÝK+DíJ2Ðä îét6Q÷•FÄŽ@-¼ÈÔwêÀ4w•Ë'’éÁÔ .Ní‘E˜þÀ¶Ù¨ ¼}E`G¡ÀW”Sü|²ÑXÔf“š#×§¸«í~'wìt‡—>sò&mœ% ã)ãÅ":Ù;šèD;5qDj=Æ`>Ô\á”**ÐagàÎ,‹’¦È/ µÒBž™ñ¦&€rƵªªn¶(:‡,TÓiLØ%ë)&å}»ÇÁf0u懡DäÖ"WØÊáI{D#B´£ñÍkÛPã‘Ì9(Ã5þøE¶¾^-~?/_Z£úëEÊÐ×k˱텚œë¹÷Ep6ð¼?\±©Œœ†HöX<Û²8”¼qhÂÛØ;ÐŒŒª@¼ç„׿´îÉêSY¬nW¸°òëËLä ‡üxa3àËlâüOæum2z+Zàcã Ô ÐVð¹Aæ³`ˆ¥[¡ 5ý2ÕôŽ]–sW#GC(Ô€{—(1À×Lÿ¥cŒ[‰É‰æì”!H }m¸"WXYXMŸB!ÇÉ÷7ÛÑ0òw༈»О'#yíò^ꋳ<5†4wn8ÒéåÁ"|Åi«6Ë-òç·´GXùÜOú×¢JÇéôz¨PÂ!Œ<³Z7ÎŽ§V2®eþ2QFþÍc4®=<_I/y^󆺌·O ´ÜÚ8;ÄÌ? áw!CˆÖœ‹ZýÌÈ<"áj‡àm>yÜzú=°7f︶ø‰G*þñĨx$¹¹ÆY¥Táüä*^ÆZÑïKfÞ¯oÀVš ž•ô/po¾¤Ó.·ï¦H‘Yjeωœ/2/VyÆÑ#F‘’©¿,ÅT­¹{ÑšÛtjO¤ÕUž`«”ă۫öÎ/(Í´Õóüú;=ª¬Æ¨<þÙ̳¸ÒÁ•¯ô×SJlçôh–¡8àßêÅGæ<ˆf‘rŽJ5¬Õu´ rÌS…¢ë(×ÅR•(õË ›§ãÈ„hãwhû ƒ‰ZµM²ÝT&V*ùد0Köí¥Nœ’d=ù&õÃW‚iu 0*7Ë ºVºJÊÎêæ@¦Æ•ŽñVµˆ­°ê_;7»¡+{Ë"8{KpvúD£­n»]œ&ïëÛzÞ|`´D«ŸêI;e‹wg®+æI½»?è_FÑ7ÆÙ_|ÓØ°ÎE…8“ ¶* åKLá¥ì_ì +(³E¶p‰¤ä®Òáõ©È„¦ˆÊ)“†Iì:¯ï>‚ †˜ŒŽ>ZMK¹7y'™J£è ³î^Ãm_¹£’Оy¯QMdz <Ÿœ5\çžšýÊ4pM8ЉvÑîZ -þ±ADõèRD­ÅÀ§e¥"îóapK±Ÿî;_{DM¹gÚàºÂÄÆ¨6àïZiðs¾áiŸUéÇWëÖý‹QN+IÖ38·ÛÑàiF•ü£Ò  Ä¸RÙpm­Ø6š•ýÙ2‹é=Ó8•M½,!-,¨`í[„ëz_8ž$ä?O¨Éìôe‰úsAeUÏU±Â(àÁ˰ ¸¶ötrò{ÀÑHô‚KYµK·8o½¿¯4r{Ë\Ë|@ܶ¡(Nxƒž/ê½·ó'y¯Ž+P”¦é·§"_$Ä:Ž]+—~æ3Âgqâ0í#=»ÆOŒð9’ÆHE(ÐÈFKFòOžƒ€ó…ÕЈ“ÆÁI‰ƒÏ“”2ª8 ¥vÐ0ÍRý™½Ã¾Ç LÜ3e¿v)Jƒ¡ü¢6õþS!Nw›#*vøþRBUbg„65œ$a¾¥«' •AõW®*¦ ÉÊ ŸÇ‰Œ0lãZP{­ïÞË¿”î)"Ü€d ï‡Ûsê°iŠÒÛrÍͲ“çûÉMŸÈ~tP.i'¢ð×ÒòÑ”d÷¦jÀxrጱÝèñ5ܼ\Nð93?ÿÀüVÚ­çÚãì.àÓA[ «¶ŸÅoM¤î\©šÔÕæ)ÀÝ {[“Þ-ШÄ#LœEèÁ=àN”fÚ¸Ïˈ¤àYÁ¦F-«¹ §œ|yéM²ih±¦2øÅ}žV_ùioúÀfV¹ûéÈab!±üœþñu~@?_,ã%)ÝT’ü¡*=Í|PÓŽê­½­¿]Š‚D*©ÎaPëzF9ÝŸ¶ã…²ý 4“ÜͲ>±r⨖C¦ÊÑ 3CØ]&rÞ Ë¤Æµð¾L—‹úÓÊðOž¤Ÿn–‡ÈùšEgEê%/ ©–Œ•†ãÝ„©-Çp[Ýh-®AQŠ ß Ÿ2£Arôºv©„Ú:ݼXh…6/ð¢N¼C›=»ÚÏý„˜ëÒŸˆð±þ«Á…Cެ† UE%ó&`—¦u)š –{Ó· îî?ÅxѾ™ÓS;Ùq®Ù¿ÉÚQýÅ@nÖàÇûÇ3V<ÖÎlÃ’7Ê?Ca×1ckϘUZ¿„ŠÑ 7B¶6u¤ é|*.â»]®&@`¯UÙÕßò<ŠïáOñAI£n\”ÍÞÂwÂÃHpÐPùH°‡Z_õBðg÷éˆ õ†¼òµ"¡ò>ÎD4žSžpøN }ɾÇÍøV Fñ 2&ªAõAqšÑ¯ˆÿ!WÝ uÝ {GD  ‰¹Œné*}”p ƒÎ¾êíØ¦öXu‡º‹º<ãª^ޝ±ûHkã`›žûŠB’ôÀ7Šþ]$îÑÊ«QMÜfÆ–Øã)JeyßTˆéCf ¬×PÃÛ ” „þ+"­Âgobé‰%ø‘û¥7g›$T{»ó_‘] ±9ö Ñ‹[!i!Ò"ñPD6…iª0)€¹"[¸9ô”X„¹K rCR²ß` "°bV†ËQO½ªOŠ:eù’ú·ÉJE¸G^óßkmã\ó)w}Eðƒ%èP^ÀÙyõB€zç~WäSR_#¼Y¥@7ú˜gŠîlBSt®·E¹Û]ÛU¼ ±X2{¾ÌN¡¨ÞÆ“X¥t¢íFÌ1ÕdTžÿ#-’¿Ü»+¹…÷6>4õœºú;Ýq3‡6FLïÛ©˜3™^ÚB¿Ô©†}2ègûë}æ (ï“G˽‘1T„ïep‰"—Ý‹}–a3•5âŠË줩w_`©õü›Ø°mxþŽcâèGãùÊX|°⺠.½ã1Dôò0§XNÖ OqöÎÂ*“ lTàDš8`ü¨•J4{uˆ2š€—NËìÚpûÀUfcu"ŸÝ™^™&]øp¼‹ŒÆ4­¼jöE™'G[‘#I=F¾Ä‰¾ëgë—¨ÞשÉs 7ÆQdϽÂ.\¥‰Òç•Lq6ïNLC¦Çóa£éi‰#›Ý¹¥“Ì*€ºÞžé•Í99 nœ]<·$´Ê»2ƒ¾Rƒ±Œ´Wå{ ,0.åWýOÛœVælŸßNÉÿª¸_`Ð+§–”úºGjš1à x©.A{¢6â3dtÈ&3Áº¸|_•xF j+@'“¿š—º8oÅ0&HâY€!/jX,Þ'xÆw ¿³ÅѸ£t­¯jÛ÷Ü”_%ífÔ@³’,_%_²?Øöâ¦[“»"V„µ1$+uu—3E²)ºbÁâÃ[ÚìÑHõ²ó¼÷9›ßß?y—®¦—$[ÆG1n¡WHNË•ãg#OÐ.‹ ¬=)¿(-ÿ@¼ ºŽU#M”=³|ǧfr ¼)²Ð—©VÀñqwðÔ*Ü´sÍèѺ5´Wú‚˜ó½"Î]P!ï‡û4IßG؆PŸ÷µ›vÀÛ®D?3oî-a]~í(O3[È¢kôbÞ–û/½Rä·V]ŒeµN£mP‹Ï WŠI¢fR'ÍáùvŽþ„”ñ»·Ûƒp#!˜\rƒÔ{.@²z&„(ªïç_k/‡d¨INX'W7XËœ¤o©2ƒkÌȵVJiõ­ˆ R¯ÃúXiR†‚Çp€óh‹eçü$Ò£®¶t´£!Y'(DÝצî >“ˆøö1ÎrQrM÷&å‘-ÜÌŒe-ÖÉ`„b0=†Xàò÷³QBînù;dÖ2lM×܃'Žqîw ‚æº6ŽÙUSìþ"“¤ä/ƒ¼‘HǬé{}œ¸§$½³¯föާ3¡z¾°;ñHb‘2–•‰ó0ê¿©júÇ&Pµ¦ÿ95g˜¡ê3 ›ã0ë‹E$ù5D&46öi«Z¥;Ìî¬6±DUtï§èÞsR+ç%懂,·Ó‘'33g‰[¿¾–j\ÆSªµé³Ygkð…¹q2©ZÏÊMÄZuN£4éë„ÖüŽ?Äø—Ekíd»“µ“TŸðÕ5"uØä*fdÅàìíIJ~Ôš°¹e¾Á¨.Xsvk³}…`IÌâü¦Z¯aéa¶4⦞ðYuLcØ’Œ"'rÐpØ?ìo¥¬sJö^@¿ÞR}œ±eßduKÿ!ê?ð¯v©=R^ɲŒQ¯ì°NÈ2=ÖɰØSš4ü<ØÎ·•ŽŽ»þÔ1¸ùOR’÷ø ´»ýÕovÔ.zŒ½ÎF@/n}X-9™ æî'¢Äay‹7ܵyŽé÷Q!h·m&‹䤚ùl‰Ò5ò¶©n]¤tᛈסóž¨dt™Ä혔¡­ó=A¶ü.aM€‡ôÈNC{o<³-¸9 ãÇF=¢-pV¾v¸wc&F䋸2·îøÜ7ìŽé½þ­Œ'ëßד>ýO#n»¾…·ñ²Ö'A;2IÒG`OVì‰ ‡?ì8W‹ïv£ICd§-MHb6à Hâ·]…4êPºþ´á‘‰ŠâhÁWÀÊÆ(¢2yo¼rqÒG<ØŽS•ݽ±ü:¨ß=X†7ñš‹ƒ:ýë_eZˆ8îÍhN#·,uÎï¼ï”4JÎjÛãUŽÇ/çÎê°c¨•ôç?†v9¾ æs3„ˆ°[A’!¾fÃbÂ?è[9)0¿äÁ+•&ÿ/ÞÃ#¡Yía qŽqÂE—ØIúv6‘ST¤ –]Mrì”Úa 7f«9ª¶„á4ý¥±±›þºRª ¥Ùœ¾\‚Ûªf7æÞºJ9à QjCPÒ–¼¿àT…š‰Çérz1vþb°È7äìå1©PÀ=1ž2Up2 ·[ÒåÛ¦søš²ïÏ6î9L~ëvbKÈ@ú†å‹/XGTËkýýv0AëäTNZÁt­ë!Æ/fÊO\28–ºp—‚Þ4¦u·¢ÇöØË’OÞ]÷u´ð¶Ž.\/x‹½êðmŽÂ\˽X'À°?ÖÍdðÐsó-_”ƒ–DåìlQ…ºÜðA¦_I¨È1t©®•Žv¢õ¯Fž‹vÈ3x,_û‹×±»»> Ë|—†Ã¾*Þ^zúŒ ‰&Y¥›Ä!âˆE¡ãNáxd.õ‡¦Ö}ìß³õë@Ò"•…4z5gÌvƒzNMh0OáÅ9³\4µ›Ž2“EF˜)xÅäß•ZEN¢cÃÊ]qó1‚£ùüµ¨¯×¦R f;ÉÚ@ &ò…ïFÐáêø¬±ñË€^9†ÐKÅ…?ÆH•äÚáÌ·I»Cœ³.©vÕÜ6PÑ ûœ˜„Õû4$Îæ~ò]ÒGgQÉõOˆv<&—°m”‹íI$–îãÐj´W^Ž‹,¸&;[ÏO¡`‡ õ+gS ƒ0q‡õ,>‡ ó˜µÊÈø¤ÔGXMÙ Í®¤¡Ï K;ñª¸µÎ¶Ë4ˆg*¦½“‚ÛÁؼþ’ûõÚSXD<¶àrTé8Îg‡²» íÒÓY8sz—{^¤(’R Xøûµ<™KW8#yéI ip¹€á½øÏŸL<^ ön†î“ÿçþTmåA6KË7!¶7%qúyñÖrúÒ`ÁmËß>CvçÿVÒ§¬ZÃ_ËÛÎ,œå#»æ!†±<¦g›0‰y®|aÚnh6“$ÆËÇÝì6NZ†prfÀ´Yî{,þXNR›ÿÜ錢óÙ0Z§M>ØC ¿:Iþ.ÏÙļŸïÒ&þœŠ—:Ðr«oq>Mð-ͧ¬SY²ÖR>v³íluýSºXØb„bdbkžpØ€m›2$+tzg»+EgX@ÓO…*¨/¦°1í$Úà/l÷ˆ¡{“hQ•Ûr%œÎû,5ÁÒnwÌ£Õj‚|2BžvÖÝi¶Sv†¹¬ÿVêaPQEKÀ/l`÷U®ö¯®56»ú#øá¥Qø­Ñ{d(âtCq^ºNœÖò87”˜®ðçîOæ…f"ÌŽnÑAî_ž4<¶i\KáàöfÂyu˜;õWÀJÏÁ’'¡­~lDÀ)ü~݈m$·à)¹Ã•&ˆ»û–—!™§³'–ÒrWÞƒ§@"‘ÁOìßy˜ÅÉkÚÞ€øVŠP….í09i 3)‘ysÂÓ, —e¶º°g;Çìý»ûê˜ &8C9·ñ%‘ÙgÔþä¯Â=âÔ¹Út/BiÆÉ9õü2£€@s U­s?#M[À:XêçµõÌúò^Ü…RÏÈÙ\`ë®7ש|¡7éÔ¤½,ÓJïÖd³ôö#&¬B™!×û<#Q„þ™i w_VnÂX0Ó#re&÷çõ¯Ýq·~a=ÜOÆ>ßIëYæ3zÀ¤¶Ý‡.wlœÐ̸a0S"Øs!$õ—ІÁ†¿ ˆç3Î8ä×ÁºSxÅb›ü—€`Y™Ô,\уº×é@pä…iÚ.Qƒþ ®«CPº)®Å‚Çݒ寴BN¨b›ÉræOòHœ$U“ðuUÊj+%–G”Ï1ËÓ®\"š¹¸Â˜Àn½ðñYí-=}üsê´‘ ÿ[ X|ÙênoÄ]cÀ—f"MƒFˆ %‹)÷ ®yb›TH3’˜Œò0¯@w>S39MÙ›¡5mG0«"Ʀ`¿®VH“Ý­{}­ÑjÝ!ӖϦÃÜ€Râ÷IýYJÞ /ýÓfÉ›HlU¦é‘äÒ,Ë„? 3cgjòõ²Ñ·ïfÌòñ-Å cwkÿ°X× œvÜéluHr×,‚ Ã?Ôœ“TÍÒkmt;C¾Õص9BHIÁI]®sNˆZ}0ßbD¦òÙ{ýN “ö›¯9ê!æãG¤|î¿€?s¹x­¿Ïg‰»Žn%cއݚŒ‡qW¹4-ÎÚÅMHz²iO4 < .>€Ÿ&×áó¹ø1%äh2d ~-‰8ö—Ž%Ý P³Ø¡'—˨–2¾Ò`‘c8¨®u{e~j }ÜÓ¿Ýÿ>H¸GQ’W6Ñ1 IüC‡óíácù•ëõ_ËB\ïW)Ù›ØòÀrãl1#ç\ØåÞIÀ1Ä&4VéFÈÈèŸÙ   3ÐÞÅ%—µÆ“2‘§½ÅÎÚ•ÜÚVù®‚PTçîgEŒËfaÅŽJOÀË_É3Ð2*qk,Ô0£­HÚ³ÔËéÒ?- #hÏÄáõI\:’”.Æ!Ô\r6Fæ”´¨Íý*³ÿÀ™¢)th')ª:AOå†XÜ‘pÂG¶â?5ļ_ø0 ôbòîôÛ¬_ÑX¦XWù¶ÜQ’ß±iܶV!ʲñ°{Ò/AU¨éâ¶8CÞ^ÁÈ4Ò. 5Å.4H.­ÃkL®*®‰§(Nb³ÈK`kÐ_u¼11 -Ó²ÀŠàsO¤‰Õö¹¢Ã‹"ñÑ€>åפØÞDä«Ô–¡Þ ļ–Ð(F?©Î• þ釟=ÓùÐßCõU¾…C7öÐ_|A©ÙǨ°Òt–‚ÔŸXÝ_f±*e Ùò&ÑßeÍú&˜ ¢Z’d[†¶F)?‹ýãdÄ}*òÇ »çzp¥q/,Âo=fõ¾,0zHæø‡öÓ!ã+½‡']Äa](à ñZÒcû7BNVݦá{™‹E¾lÆÂŽ3”¨vLž²ß\be“µÆeÕPÔ`ryÒ®Ÿ7¼+ $+ PKuô×IQr¶—î!x4¨¤û|Ámož‹´¾ŠëP–ƒÜç%$ŸÌMé}˜†tZ¶l>/dÝŠ·š¡gñˆ×–]Á·`·râ‚Ûñ2Ió†¬h˜þ¿â>>‹,3à¦üI8Pì²æØ1ÑïÊ<.Èî.9E™ Õ‹íé}zC¶÷9ë„^¬ö±ëþ‡` Ì]€KíKVv<á¯YÀ{IÜyŠDS"—­sÕÔ6£g‚—Ì'öª¢ªÌɪ›oTY‘ŒVÏIž9 æóyP²¹É¾nÚ q[\ H4ϰYtxç`+ ,OxðnÞ.pœíp{p¤!³„ò §©©Ò$Ý8?(²ÓÇ©Å?]Lk|7&ßÏU#‹á²O§ Ì­=5gä‘…ëÙ—v£hýüùÒð¢79…:m.Ö]TÞæžÕØÓê^5o”ï%mÒgýžÜœÖ>t?)›ÌJE#;×e, g÷A`?“% }6žœÄÌmíVt‡À[ª™+V§c rŽ9F©Û$þV©VeÉÞ¦Â%‘‰DG—AʇH’‚Àá2¨¡2ØcÁþpÊW;TW}·1¯Ž ˆ ŠDû’¬£®Xypa€xŒ» ¶¹ZNž¦o›9¿á$D¦Df‘§½°>Ùðz§Y!fñRŸ4Íæÿí4y«ÏËÞ4ŽHÆ•° Yê‡B?fl=6(ˆD~ƒáOkR„,t+‰ñ:ÍkŸÅ ¾,§×íQ=C¶¬AîÚAkÿüÅÈD«-#ÔÜ ²ÕPLéç Ùæiݪ4Lc¡·V2ù¡ÀÚ8…ÚJ÷âC䤯I=e•»mV°5‘•rYåž3kªó[ÑÎÅÍç5'.¼ÊèÔJëÒ³&Æþ¢¶™AÖT.ËD×’£Ïw£Ð‡®™ÿ)g·Ý‡Xu›—®­x' /¾ãz¢Ü±×/l{ … Špа¾,h0ïŽ $±ÎAï‡:M}ÌP€‹ý”äÜ)ª0v¼Èd¤6…ê%ªüsëÞá–Z¥£˜˜])ðŽQ'µks4ØŽ¶8¤ÝæJý ItÓ•6±¶jT´ÛS‘W÷ð–Ì¢^6;I&L*ÑqX¤HŸ‘E?¾ÛÞ×·M˜èò2Qx]X)[¢—ò•ªbH©ÍÔñkbŽì»Q9pžvêJ·CÎÈ&bæ¼diÉ <<x“(ÓÕ±â–ÆC1füH|›`LCF?¤S;Ê6(noZnë/œ4½ÞE•IZ6_ˆ]’hTñeJÏG8JT–¨w.¡@'Q “X*f% ¤Hµý¾h5Õ˜dB–$›’̪?ÖD\š¿'õœ°als3ÇßNæJÈÅ»/úÁï+0å '^`Ïd»âÆqÜü:¤­Ö3G†/úfR‚[ÈHBsnG®ieÇ['P^í̧Ä>å`ðgñª*ýd/vÎŽ*ªóˆPð×WÍ€Œ’qn–ûÀ}§† úpή(ˆÀí<¿•†D52¶®Ù©&e\zAl8:SØòƒ*NgF šÜƒ~Øì•÷R’PÔAr9üBî6$Ê—ö‚t\ÅçlÇÆ{ÙŸ!€øÀ·ûISœŒÄtÂ\ ÞIqÿ2žQ¼úw“FÔhh5£­f3üµàö~ ©ÎØò¾ôÒ@E>²íÖ­²"xª[˜_¡@ɃM8u=òOŒæÚÑžÅLÁöË…‰†i™Y%bÊÙ_ ¥²«ä¨µKE}BèÃ:-QÀAšrû”ý§ŽÍ’½*Ežì©FŸ5äÄ}µ1rmî =pBí³/]óÕ‚T{±Ô_z[pÓßN»ãk yŽ 2ý*…°OÖqC䲇¥,Z|ÍxˆÅGc…¯há-—ÔK0bY<0µ±Æ×‹~ïÃÌ_TâK,<§´¬ý%åTˆ ¯@n¤ÃÆâ;U ±•%˜§èæHよ²®¶Äqƒ8YŠ+þM+ÆW2Ú0Lÿ>nð•¶_Ö Ú‡ì$¦’x¿æ\\Ð2ŸjHk…%·î¤÷®VÂc<Ø5C&žŠÍmqõØ/ß½ç÷÷±®æs(T’2âl¥P…¶èMž.t“© FTòó–å|_v÷æ»å#Ûû¦çf8»£M %§ž:)OçñÌ(£´Å}ÖýÄŽT…SK%á¼´÷€Er9êïÔ¾ÒñÙ…ó‰Û"@ 'œ”…Q¦´¡½ ÿÉB‹´=Çnûü!‚!o`´ãD :ÖÀùŸ‰òLœ>2‡z’}„ÂД9Ê‹qå•sê›ýI’2Þ8’žÊ©ÎC°lú}¡»íý¥laÿl$ôY±8pÕýë‚ÙO®]mQRÞi3“YFA©q;k¾GèhÉ3ÍtÇ]·ºäÞÈ^ú¡N­l %;Ç•e{æŒÏùîj£…ÏùâÅ=šä…Ç“äèÿP²·BO昼_7Ããæ³ÃT2F¢ç T5½øঘâ6¶IgÐa$‡·¸Ñ åßvÚ Ø–g§«7_Òg-Ë«$åP-ÛЋ M”ñνÌ÷íH@\¼Ã7t¦ŒRüo&AÿA<˜O‹C½ý{*45ñZð~ô— >J ¹GÁéÊ'Ì£[ѽ hu´XsŒ¢DøŒ(r‹tâ\¸Äü•¥l§^Ei­0‚ïJÝ5 ³·K–vE8Yo÷$;rG¡Dn BdDýG)˜F 髽´*ù8šÄR½»£¡:–‰%xŸ¹Ù"Qý;;ë,aíÛ7 En;þ_@9âU|ERO€‡[¯?ð_Q†Ÿ¹u–‹Û+IXœzñà…% Geteô€·>$Çg1¬«g=w—}:,LV¶‘4n¾XœaœQ]4øÆ¡u'ÕØ1ÅÔÿ'Ì9%âL™#Çûž¯ ºH-;u€zÈ]Í Þ]šà°{z?Ixe è§à€0 ¸Ã™~ݺ'=Òá² Üï­;3.mJÁÿ­„agß×FÚøJò’Ôô$%nÕ¬NO€ipPÕD§êÉç÷xOÐFó½ Y\¥æ½`}%Nx­Ü^ö¬I@ì†Z\#[kàž Ÿ,Ö×i`¨C¸ä3—ªÃËÚ…ÍÒôÛ|():w‚V5™*øó³‹D€Ù¡9±f#E¨«ácJwIl?WY})…éåG«.™Ê5x”A¼Ýíé©âk@–„­¾þ@ÖðuÁyéÌåžeC · DCßòªoðo"KnE[ÆO¸žì‘ä„S©t›M`(Çä¨0‘Ø^ªö5ÐÕ)ÃÍѸGšÀô Œ(K¶x¥Gò½w»ÈmE`COzÑ“w`¦ªU¶Ï©ÿŒœ–VæÈòN #t(¼Qß ™¶Äž>úæÔ9ææ˜tn»Äa%Ž ø œGÌ¢{-˜+rÉ |ò<Öânn(n4‹‰DŽ$€Ÿœ_=KLºS?V!¿ºÛwlcGFp<Ÿsº‰±– Id ÆT幦×3׬ǟ'_ÿ²Só‰ªH„F‹³M¡ç—ä;nŒ¯^Œ“š:'0å~Ûg{·>?ÂU™÷.S³z_™}.Ø÷¨,•û®¸ˆ;ßÖ{£¦LÜVËLõ°kFám˜‹ìÎúËžp#׿\Ï]eªf¡z³a¾yñ2¥xó«û—– `4ðRÙÕ¯Üyx.É$”:_š=–ž×9’TÿgØöh÷ÅoΡÿÜòGJÈI]:ô¶×î >6œ p…‚ i;9ŠÏŽCU2ä9ã s“|S@.EŸJ£Sœ÷©š?QÀ0}]ø·wWé.¢õð»OwÓMÓUfXpµŸ×øOÇÝ l]1‚Ûw‚|¦¢ +ŒƒÄêJC.ô:M •,ÆË¾R©ðÍfS‰sÞAÿéÅÏUòPkžþåºåæ;ÜõR„™¤|cÈ0"`g„Þ/F©É#Zî=OqÔ•› ýŷ猌 É”@Â&=ºË4<\d…wõa Pê±ÏÐ$ï9AÇÊ dë­K,°Z“ÛÃFÔGg½(^—yÆÊ ª¡ç9=¾ƒÈÓE\ßëÀæKT·7â˜Ý¦"| Kº‡ª>Çúnºì9æï%7Õ—C‘Ó9ÙüB˜=®äGÈ#ó_Ž#!¬t”8qs-¾—HþhY"cçq?'àÔ››\·¤å]åNk€ …dPÿÓ®_({®OC‹ ®ž'æÊ >®­¾C&„ýù“’UD¦€&£Á™}åÐc Õ S^fáÁ#=#–k5EÇC9¹r•¿¤ FÄ,… ^êË›GÅ“¼m¸cS:†ºà•ÞŽÊC-MÝIª` '~uÜ?\f1â S‚Ëx%úÛwCϧŽ%-y¶¡–ÕL/ë…×^Ê%ÿ€±Ùᇖ  üGÄ:!;ñA´‹Ãª©?¨bEFh9Fe¿Õ-þLãžýuC˜©DÃýú˜ì3{ª¯‰5èÏAj×þEÿñ?Æ5@PCùèBè9ºj(q,¨Z' ±5·/P&è!u†)éO/x élYéö'û_%=üsG銚3³¦¥5¼a†oQ=ë˜,J­¿ºÃÿp§3_@ÕHžHåííïsÙ2Gœb;%îŒOvÔñ®EÚêJ®Ýžø$ŽøÈ¥¾ÍÑê˜x>·£IQ±”,–Å=àm;üå9ìgÁI·‚h…>\rô…ø¢{v…iåBAöXuâ—2’ÏHÿ‘Ô^¾Ö'®ŸfÒ"² ýÔ[Ï3)™à½¸nFë<ü·Ü­ÏÕ l~?7樒Û?WâP r¤ŸrwÝj,€Bi‚3ÓZi›ì¥ÛÚm%Ô¡ỏ;ðÜ.3û½}íê<9`<‹~Zƒ:ÍÕW Јt›²2aSfhybÇånЉÍ{ %ÊúZ€õÄÏ3­ðÑ“~%g9Ô‘÷¿÷¥#Û`c(Áa켿œ@D'¡aŠåÔ퀟ŒÊ÷"QL”ì[î!ù1Û§œîåìö˜ë„«-bOX³b*x„L嘲ÎóޝâYÒ,{¦e† ¼Ý¥ŒÄ_f>²d(Ú¨^w…6:iÒy –ï]–!Õ0Bô/yIbþ¤nFó{ŠÑûvü\òhCøÌbQ9Ç_´-Úq§RºÄ)NL ‚‰üFÚ^ýœ‘½¦Ð'Q‹~è²uZ–b}X¬¦tÑRz…îÔãÆ(n}Y±Êæ¹·ééYše#äiÍ3¹½œLDãÁ«–l–x½ פàòÐz 8ÎÞp6ÐSMhJb¡zÖJòy q±Ë¦Gg*!Óùdl¢ö¸$©o¡wÆ'‚wPKº“c%õúJ°¡]Á,^“Íî¥+îÛx¥x(Ø>l8¹úóÜN·'>Î>¤H*bB£5†,,7ùÉí•÷{ Ni²/ÇÜ÷мšPBŽÄø½ ¯ˆkM—“ Óä)mˆ÷Çm– Á.pòËzŸN>6fe«?Kd@õ^ê&Üžà k·v71t SwfI ŒG#¿´ Sp­²CjÜâ"Á:Äéñz戌KNo:rNcfºb‚!£‡Ø«àJÖ“‡ÃÓR‹Òú¥²+ÿ?¤”õûúÄ÷qÉÇ@+•X ZÄ»:ö’§ ²ÈQú\ñ>ì>›Z ·(»»QÓ·­‹ ñzcè/¯Ù?‹q·¯ãR‡ONÆÓ4«gGQš¸èG·¼í3ëTX¨(àtçK¦!½Íþ¦{j½ ÇQK¡¯ðÔÐÀËNBÕ¨~9]šÍÐ,Ì" qSB rXFš:ÍŒŒÝ¶kƃk@&ýŸRj¢uÐl1yå’O&¢P”罨½&¯Äδ‰dÔüJñß°Y[ÅÖqL2ñ]ÇNš:sàü•ç­Òµô,Æ0$bKª ´ÝDx2´áÛ§{ß­Ò#˜ŸŽ•Œušª7“dÆïìp$Š*zóÖVÝêý›S3…Fæ~^XŠ…qg­ù"\öÆAõáœ>gŠ(™íÚÈ1µr#±¾êßܼo%Ó/Ê#6È.8VèGûl±9iW$%ª¬ƒ 3Þn†£¨]*f§ÖE«E#—¿Û‹&án%gFÍ x©Y6OÞmíÜÐôA¦º2Ǽ+°•ºÉç‘·ÕqÊÒÜ›ƒ²ù›7&`}œ¾X´™¡7S·üÜâ ÐRŽÐï¹²É'õ|xÆ&$Š¢¸5 yDʼnf†¦as쟀,Lc:B°†3M*HxSÐ ${æNRŸ–­/‹9"¦ }AMÞÇo•Rù¸Õ‹Ž4óY­y++å &Û^t—.|IÃ<Ù¹b ¦t’¾Zü£¨p€\ Q"?§xP*.Œ_î¢v™…„©XBÅòûhhmYþ$ ÍÞ›dc¼l{Ò ƒeð …y{¹õ>ÎÁg\~æ6ÐÙç}½‰g…^äÔ€óö•ÿ »ø Úö¸$(@Ï¥ºs¾¹Qô§‹ÌØ^ÌàÀòïo2ŠÑÝlÀIZ3´¤Ö¥ ¤mzÌïöîVEÒkY¯51ù_e‰Î­o A¯0gøŠ /ìÑ5Åf‚Û+E§§7ÀdîšO@K·*p³¯05““$~ÇQ$‚W˜e$ #Í„yò,D¡ëÄè0ت†æ =Ø­¥ þƒë ÞÏÚ@Zï´~l§Ý³vܲ7÷¬ÄÓéòk¨Þ‰@Ê:žu–:8ø,H`rö êõu*cÌLûßf"²è„øšž3p²â[}1¾¥Eáp}ú‹ëÂi¥1EÇK…ÕŠ˜JTÊò*õTà|öþÂhn¼\Ò1µø\ÁÇãß6”oñ÷t>/#X ëÀd›ªÃua–¦ÞnùÔ¶´À[á‹épÊ{™Þñá-Ö6ˆ*É]œfFø$;DÎÎzdÄIµ{›8ysÆô…ßÇLj-!¡ÞÂܨYEÁP3é®&[ÀTrwÏjzk#\H-Zœ­\|ýd—ø” Ek4q^å˜8s@›0`òÓλHŸC*K?¨ºM gFa¨nºí´Bímìª"{ˆ ø€•¯rsqôR'n´ áum~Цä(ÍËK¥Æõq¸z Q@?8Õ¿¯²J­3¯Û9 T‰•ŒqO¡Vβ2Ò{~CÊañÈ1J4UõË ¯÷Ïfl’'iÃtÒG/`rýÈõCùåé¿u"ƒŒÒ+["cP ½‘2Òé±j\¤‰Í: N;·°]Ì¢c61•Á@Äõ²å0.±´}gªG7?;¦~Ð_dÞ+ïà7k¯Å÷UüȃÍy:¼äL>C×áïFÿºÜ–­O¢²N1)ÔD‘*‹’Ñ,ó’rb$ЦûpL vÂ+²­ ¢Dnû3Ž-k ÿ kCÈÎÈx™v ÓÔì´î Ñ›N¬·µ-øs޳«;ÔÎW÷&õ×.„¼ØÒâPž‰5]rŸHû7V•Šcõ‹K™œœ¶süÏ›>–ÊÿÈŸ’*åÚ7 @çrø”’«ÎË<£îM¢ýçÞûÖÅ;|ÐÎEqÓ<…u0m†öÜ&P—l°¥iáŸU”¯Ñ ˆ}àòº ¦F—b:¿-]Ámn]E µñÏýø[ þîßD\n&Þ`­—ϽE¬Wœ\Ûs°ÐêÉ" ñúBwó/²óQMÄ"ïj‚hµ1l´ÛG6Ý ŸÏ¯¤nˆ¯}㥅2êªm×£>"'ÖA¨³#ã›ÕD0&Ó‰©aç [Ù¥½—\«¬î”!”xfƒªõw<;/ÙÉ'}îÌæK¤ba×f÷Á¾SâòËY*ȸdQìx~­i¾¶£„H®_;èÑâïŒHá,©£XØ ´ÖêâZº€$OQ†A³GSï³µ,2(©7~Û7Âî%Ú×Dnþjòwïú¡âóΦX/úúæ K¾…}žµÂÉbN£Š$ж)QÙ:CfªAH‡c‡J©8»I%cÑj‰Ó Ø"íï2°¼a¹1߆ç¿þô PÈ{¹Àªv» -÷JòVí!¿"ë6WS’7$뺯i™š‰•*Ué…×ëV3nû†m*á™þwê=wÜRšDbt¦©g…jÏÊÔx"³ëHap<À’Ýg<×å¨`&µà‰L‚(i@uŽÌÞðÔÁ9—©èKê ÉÞv(@U“›D*Ä@„¸Œ‰®€€E ^µ* )œXýÅ81 Xø ã²àÂ'Õµ"Æc¬>)—zt%°-FéS$N#]H'æè•ªJj*øù<#nQöl:KíÆ÷Ÿ8[’ìñŠ)SÍøRWu¹½ñJ#ó¿®oÿL˜—|­nBÖbÜ#§µå!5I[Â&,ÇqÅ _ËÆ(íýÐ@*4d¥³ê¼W…‡>«¨³ ÈÁB SJè%‚Ü¢vÅQ‹Âß—p†mUØi™²äc„à¾S’èº;–´}{_ÜB²pöñ+j hbì MãLk1½z>1÷‹ÖùÅeWyÉ ìéæk—¼—©JÑ@’ê½æ3Ùëû4ˆ¤Ó˜FÓejK¬(¿¢˜ßR Wv1„ÂßõiZš¿)ºÉŠ`™d*0ÏCR;³Ùqɘ¿õ”„þ#KS…綈Š}ÜØ²u,C:žf”ópÞ$Ž5‡bŽ oÞ ›§-x2Ä¥©ýx¿î‘ï†î.^¯|QØ<5ÇDCàÕ£“cIæ{Y”—¤wžÚ¢! >ΰ*.ãjÝ^Äk P/ ®W/v¶½¥¾ûxv— 4ú›ˆëW*¥UáRY]&@½ô÷îEWáÕt§)·!wœcÖn/ïAŸ«œ¾¤û¹ñÑàRD™e³âòSɇ„"o§ÔÀã ²!ÿ=›!FÈô°¡fЉØñ†Ó¤¥Á~j)ű³©ŽL¶¦ß,T]‘+[RÆî‹jáßí,¯^›wŠ9B ÇcIIGÔ@2yœï¥n»@T€aÄãÂΰÀôýEÙáýXüÖZkìrr.™Æ@šö{ﲚ4‹ã/`<©Ÿyé2¿Zæßù°1õHÛÑÞ "•¬H¬£õ„]‰ î…ÆdöÆZ”<ðoü{¢¯rº‰c N"FѺÇ?rÁC7¯9æéõÒ„IPI£ºo“KÜ1OL¾Ú̯عòܳ.mò6Ž—R²«c3XµHÉS²õŸ‚ZŽçY‚1MÕÛOÉÑ>,ÐÞð‹‰0ý§×v%íôŸ¶It>ÊÓþ_¸R$êòJ,]òûÙ°/OßiÂÌÛôCpéˆïÞöÝ×™%‹>Ò ÷ÝïÙ:\©Ø“Ë/™ë9x*í}˜J”ËV»_YŽZ†ÖPž¾uŸýl,—l‰LáÛɳo ûvÊàÄÍ…³Â0 Of˜hL†‚A+Î8Ô^§Ùþf¯) 2T‘ëŽy–!rL¶x¾}“e^¬÷ _eœ9Þë³HɲêOë´Yv=’º¶…íÓ—ࡎæ.œ­\-´`Wüý õˆ½¶å¢²>Ž'tùmˆ>‘pÆ¥@^¼ 7Û¸âwdº:õ#κd|Z2L¹_ç;Ã>z·ûXÒÆ#µ´ès\ÅwÊ>Þ¢šè’-F$©#ÿvò”玸Á&/…«½®çW3™ÞcÁ–’$]άFÓŸ¹Û *”·í²¸:Q\Ï«ƒèTа֑ ®…Qz#Ù•õ /U’éÛ=NoËÐ`˜Œñ˜‡Á“¢–6Ì·ÙpT É ‚Pgµ'mk"8—I!ÎWn+âü€ù»ÁÚÓñÞÖý@c½$E&äËæïÞÁæh;x^ïÐ5¤ý!}må9iñŒ&÷˜Áhú±¿ðO%ùù<3q©kbC:üâ«ÑQźéUPgÈ-ÿÎàqŒxƒTzFp‚|a,Oû%¡¼íÉíÚÔý5¦»§J+u¡ùSL&Šc/´GB¹Œwë[¼Èbí1ÈÐo;aÕªŽÆÍL}ë›ú`†D0Þ—Ó­Ý¡Ü~\bØ1TI2 ÅŠí±ù 'ÄQÍyýd5H[ÙÇè/dNÉ…]>²ja|QÁ$çä.X˜H«:yWåÐÌG[Ò·¡Ûtº°˜˜DÕ@'žÖ6kÞóÌ8ù²IÖ?{›¥Ù• %©ô•Ã_¼÷æVsåoö¤öE»Hßl¢lNèdÖm'”îƒÑl¼£k¹³¸Óñî¼;EÓ;½Ü ‚³ëûlÌœ®Ì©ÃØIE½ÉY˜ÓH)Gœä5»|ò6œ~§Î6šë» •A7¶sÌÒbm.òç€^ÅÅ/\$oô%l%`–Êk®Û.*E3ÄÉîñ<¾Aoxé/¿ŽX|é=(õWuS!ˆm"ê?)’õRGÑJ±±—±A£qür‚òûZX\¡9”ö°#qÒŸ¦ÞsW§0³léÉÙ&d¤Ù0)Œ¦Å-ÛBGÇý´ä¦0ÁNò)x|xÿŽ×4 Ù ê#€‘’ÞÚ®À¨d;Ǻsg={D þ– ;µ¤¾`ãUü{åäv/HÐStl°¡U (ú¸ÈЧð|Œø~ˆ:*³Œ,€½bpE•þäKÚŠ2ÂÏe;r åðªCÛ€ùŸÊAŽd´£ƒÇ9­¼ø¾ YžšpìR³æ1æÎÄäËuÚ¹iS®Á5B"Sò¯CãuèÈH I@Úûî™–•›dÀvµA¹h¿‚ÛÙgÚöûÿ ÄhÇUÇΡ_P9“Ä芔‰#Ž284vˆñr®·>K&˜à: ¢¤ÉÀŠÇꀽxüÌŸòak>–ÎtƺicYˆ+5ÎoaÉÀ•Xná)d| è°&E§xéH–®ü>Du[GžOr©JC¶¾ ¼]Fº-Ò¯ïäz‚`]ù· 6£êþ‰[øÍe¨·wpoy×sÕ´Æ9­[vå?Uü[»®ñV 8ÃÌð× ÄË´• ƒ"˳tr#“á™”NÛ4o*_´)Ovåm}®û×p]4V…(ç‘Ñ«žƒ¼MA>l+óŒà–cUA†ºRe®XׯK-¾vÀ¬d5$ðY.+ž7sÆA¹\&)  —×¢ÅÁ`Ñx i^‡€v$•^—KèðórÏœ[^JÄòm…g‡ÖÆñïŽ ßˆ•eP‰¥ 9®ÑäÖg ÛLq¯€b*§Óc°$$Ç¡9‡¨tÌ‹ÛÏ;ƒ\#Ü•&ÚŽHœ'9Ña¸‚8 Ù7sóˆP#k†*Bþ/;\á1×#k}M÷lPŽ¡ý„¼Ä\½!ጟK¡Ì×Éáíùz€1ÏóPx…Lúï¹D–nU‚ Máz7¬¤t0Åûøa|;Ì+…Øq‹¼1 x-û+Þ±î}}h’hŸÆ.v“õ,é´„G]‡*úÄÉ îú´÷UX“:šù…åPwl}ñþ?uBáð Ñ´hš<’\Âw(ÁAéÁÀ B's²Å¹É+O‘Ôìg«sÈd¥ÄKéÂáæ•Sd~QVÿ‰=B`YÈSp Weè:•RpÀYÐÚ‚9OšÝî3ðÀíìtá[­ñ©ã4½izñý°zëÕNõ¶„XYéÓ€Äaш&ˆÁ°×Y™Û5 bÂkØq@æ~¤Åaø÷qÛýH—©ù4m:аD@ íØOEºç²{$ÔO©(©ÎuÖO©Mi¸¥—b9ÌêÆŸšûnwúœíA»jå²(q䶸‘ÉéT'ZIÕE8Ö"ŸÞ=ëMRXØRÔ!õ@œˆ¯Nç€ï>Jû³ôbò@mDòéÔ ¯Üš[ Ö0&]Ÿ<Åò#Ž9žÐ?WœßÉ•©á›¤‚ pà9޳Pˆgʼˆàù%j0Ã%8Ò§ÿDCìßßM`¥–)¤çTÓ ÏïbZ/¥q¸u,Á³Ô8…Íó¦È‘+"2^„RMrÚø(Ý Öç¥:§½§íܽÀ™!|¦úÜ?Æ<>Vj¢ÐOØýáÔ[®ûs¥>ɘbqÌsÈl}R0f"w¶0y#`½9ŧ¦¯>òIÎYÖ&:hU¦ª–5vùÙI£ÝêOÝDŠ¢.3m·ì­úɤÍܸΔx» Ô“êX%ðžAn…+úäø p›¬éSg’Uá gÏ*åœ^—àXÆ?p /L^­æ†2üS—Aâ‘í²²B\ª¨*Cz¸x¶·ï¬ì‘°¶ VˆÈ"sãZVtYdŸ²?Å9¼óЛê­\C5òç”JÅB0ŠÁì~ÞÐJÛÒƒn>2Fâ «H¥no¿2êxQÝôu}옙_9¤±%WÏf"¸%Ë_üØúUȱZñgø=r¯æ³yWpw ^Ôãlƒ¡oH—¬óêºxå}ÞÞ×o‘G™wb`!oÅ&!×ä·”æêÙÀ眮  ™û¡X‚µïÌúŽâžØøWâÔˆ¦öOÍù™…ÆWE’jÑãxLu1ï$°$C£!…‘JÊ¢3 L&åk¶¥‡Mz' G™ôÏ õûÈHÌž#[zwÔ¸¯ª:EoÌ,/”A©:+ß;c·›€¿‚®#·I„@Ø©Ír’÷K|Zsº@Íñ`§YkÕCjñön¸m³ A›v¦éÏd»Ô­@Ü•\‰cr*"“ Q”ÌÖûPÂÞ·‡‚]r ÜbÍ2ßvSóöΕ4˜ƒ'1€©K­Èªî‰.Egô¹Ìà¯f™jð¼c¾ 8½qá츧(ߟùÀmÇÍ…\EcûGÉW#µYQrÝÌV.pxÔºy/Ï{Ÿæt°í BÃs£ žq)nóÆÈÈ <ÑåZHßã@‡ÕAi,ï–sÇÎÞ‡š·PÌ۾ȩ—ïàªîØ;¶£(tíwa"þú6öF¶:æ'4ÆØXyG’Ëq’{§•ñnÃh…GÄ^ûEè…~*U’ñr3# B5c‡,ŒÆ]ŒX¹à~Î*G4€…f Lëì\`êdÄÄ<Æk*XºH²ã<ï6u‹¢[üŠÚÞå#Lˆ=Ü$î»Î6f`Ë.xáºöè¹E÷7°¹+*;@I°ˆÖòšhØ×CÚ’YR»¾%·òÈ?eƾ³n¸Úa°á ¡ÕØ®„²íM6æ[YÕ(bùd¯‰‚ÙÞlýz~iN"¥ÔÌ;‰[ˆh­ÙP ùKêû {­‰Cã®d¡6´x‚ú’íÈ!Ö%enßSsê-2ÁvÆxgdüš×¤ä‰ÆÀey@^Y¹ŽdËc4ƒ¤“‘¸*dëÎN&aÌÒŽ^jüÊBS¯ ¯¢Äù?Ø×¥“^Ea´ž¼Sõ{ù;’̽O*³Œ}⡚?ƒùµÏ¢ Ái5|æ'K¼äRDØN½T¥áÇ"n;eHêP)¾5¼a¦èÄT߆<³ªÂø2ÕJ…‡Á¹·(Ðn˜W2K ˆpìº <ÑÀ[HbÔú¥F6]‚õ²yóŽV÷Y(ºwè5ONÙ¸®4i+§vPè0}|ÛÄK‡X ¾b»Ç¯ÓPZ0šlϯ1®°K<½þhbvÿ8uÒõÕ¾^ ·”ÖßÈô…fý[$ˆ82Ÿw:Û'ç+È¿eámÛBÅúæ}õý…¶ï$™Ö«jc •ZMhjX4¿ÑüI­Û*ÓLs!fz|ʳ”|çÄþ<ÒNŒlmÒ.íìÄdn¤'wgPÑT„3~Øp …®Ó§`_y´þå(}ÁærzÓ5’‚î!×V·KÕbxÈÅ!3߃ÖHÉkü<–õ { © ë‘äâÒ ßyÓ°Ð’ÜédáîS-¹ÞÔ}¤¦œˆ{*•œ/ּ̣umÓP2–ÑZú’DÞÑF§–N]ÀéïbüÁ %a<,´‡áe*0›ÙÀ!çG½g©ðq¤;X–Ö<¨“Ý+ÍÆÔ*üÊ·2mLõ ‘ínjH•Ze.•Û¿hoÓ1³ãÍH•ºÅ#–íFä/Gq­zNÈ MdÅþùEæð-}háo¹ÞM•§pç窉@ºŸOËáJRÌŠ{ƒ"Z·¾Ç½61 Õó¶°ÃùÅ«$lÿŽ–²<@جM©]‘T°Ï¶{f|±ûµ3Ð17l‡ø—’U~>mEoy¬~ö~›´mÑÆ%>· õ½Ý¿SDUn!þarbøêsû}¬unÎü6a.²Uü¸kÌ%<¦;•g‚$.×èÍOq~_)p.6rñ4òæ1Dj1 îh)Ù®`!8Ù‹‰).Ý6ß·{ă"ìÆøw„­g.d`L|ö£áÓp±®¥•­[¨ß*em%ÛoWµûõ#ÌëÉUuf>¤ÍB†.Êŵ8+·ŒÕû0pV­dÞô3c–b@L§ž•_ò—£y~2Ÿ§5y-v¨›|*Ó 4v“œòG½ßÅàŽ«ßW8íì3>Ÿ¤z'ÇSÚ¤6ÍÎ…ê%+\}ÈÖFþ)±aj ƒ7Òcr2ºÈZÐÏq0rŽªr×(9‰CÅúˆí*½H¼Öú¶åt³!æ}ˆ"õÐ=6éRì7ω– ¶ø“µœ(ûä<¸òƒX›p^Ë §ÄØÊ» í DÇð[Œß)a†'áœl£GEƒR©YRmPHº„ßÞq~Að§Š g#¼¥Tø‘®Ø~r¡X™‹Áv FórpùÚ¤¥æj0Þ`\‘CûŽs°É÷2jÉÕ߆Љ‰=â+òÍ=ÿ±Ä`cŒÉ?_•™R·ãÀOµÆ†¨8Ç×ÌÖ¾eÍ™ƒ°\Ä%ˆ>‰,{¡“Æ{9Õ.ëTŠt>ì)T™ò~ü&Gû˜ALç µ rX-Œ=²¾Àå|màè%$ †rÈ@Ȱ¨zb›ëàÙ¯j‚|:3-f Ù~,ÏÉò¬*­FàŒ7pZàë[5èàäú““£ç+¢WÞÔ8OÛg¼Ç®—Q0f“pѵ`oÅ|îbëÑþ¸{é¾lÛ8_œ5ÈkõâÑš,£jràÒïk{íÓ#«Äy æ.÷(†“yvá1Þ?,¾à¿ýS÷±ÚÃêc¤`éŒÍókA¾}HK¿wÑ/¤v¶²«óë+W:&%Vò|òÁ„·.õ'MÜÐÕß""IÙ믜3N—9ªøÏ”\&¥IǹXöTJ#+¯Äi•¡,BøÎG’úA–ú·£©tjô*ÖT†ñŸ·½¿ ¥þ²¡ ÄïÚpÞCþÓ¶•'¡³M¬3—±Ò —~éÕ„c8.ܨc"<ØŸ“ãû$ujÐþ•šÄFRÑÇJn༖LQs£—ÉÏ™.yíš×u„Öd¶à&¯A_Øj/ˆ© 0ñX]‚¡ëÜÀ³Íf„¯t*]™è§ Ü~Z{VUÓí/þÁ]T7àb«€þ£8Z-ØÅÓ>ËÃÄ1<$ô¼íõ &Ǽ6 2‡hv‹°«ij¢¡ù€ S•sQÜVïB¦ç3Û)²·¶¬b5Çí}ø»çÂç?ÿ+гÌÛÜ‘ÔWûzk~òoûLn‘ –|:B–Mî튒Šç)ø¨ÖûTÏóÉÚ[Ö|Ƈ;•„ªg›ÄOUúc¹òÁ‡ÑWµÅmUÜñ¯Yâ €¹“öO ,Ôê š¥œHsyý/&¹ lÞo$Eˆ¦›=f“iÖ*_Äå€Ö£…ÅÌ<ýÅU—"ÝiâE–çËFƒK—SÉnú1[ …ßwö©çdÿK$¹ E!´aqƒºp./_«Ž#™8´»ÏOßT í§ÔP¾2Æ;e(q9ÊǾ›å8âÆ9z¼²±»èr>”p+¥È )wyu”ЈÖTF›EmÛÜ í–&y‚ïӵ׿À€>ÆKóe=äs èø|N2Gtw¢›S0‰Œ4ŠË3M&M˜jÐ3BýÓ<Ôóa‚ﺳüSiR®MÅ6“ûQì'QxRc$<+rÆXïŸwžïÕz1†5gçDõ&L‰G—݉yB„ rfº‘fŠÐ¬RÿY…L©\…»T$Äu1ò%~Û â5±ÈÁܾ-ÑáàÁ´ym0¾ä Û‰Lôæ&÷9"4÷oFüC–²QYÚAn†}¼^ð[²Ò"‰ñWظhzLquµî2Ñ¡äy¸:Vì”Ñÿ §aVŠòÌé©(,QõÍè—¢­Ê~®äšAힻژ¤/ÌÏiHV¸e][´ÊXj-<ïûÏq¢¤€b£*: Àû±CÉý\*â>03Â×l׋Éû‰—i'çi+ ¢Ÿ‡¶ºÓ¾qÜ¢…¯²Ì&ÔÙ»Ì&y$Š<Ãà0¥8ñ¨œÎùv#,³ jóž-¼-ž‹[u$6Ÿº…×ÁC£NƒzD ±†uª~ØÃÛ«ÿ_<˜Y2qà’ûÍ>â§IKÁ”<+_–Ÿ+C.ôÞëhº1ÜR:È {©&lL¥ô®5§ˆ§,$m÷”“¬ö ÔíC=ÖOÒªE]•{½…A஄ ·ÊÚ ‚¿…ÄzòñMçù=¼•m±#câß08W[dÊ…?ÕAq¹ < F#…#3opSü;~7DÁÑ'p)gy8Àá3o“ÏZNš&÷`äPícë¾È 1æ‡bž*¶vù¢ÊùÀQsAŠ™´ðíãèMˆÜz ö•½Nüþ¨0€Éý šnl›?y3÷µSŠp³6Ô$Iì*^ÍHítÜoHÉ$?¹ Ûà´#Áé s°.â’RÜ$MºuÄ á‘øw+" ¬Ùg2¾i 1ÂJØ“ä(gó_!°óTâJ;ìÓ´ÔÝÆª¶âz’y{Öï¯v¤9ƒ’Ÿ^*FÌÅÍ»;XÞ\arÏJ›ø›„iI>¡ÍýòªnL…Û¯—ãWlÑ´ŠÏ’m¯#Kãj¯†ùH¾xbê™À6†BF›\éPmòÌã2R½ F·ðYª½œ"¤(dx•&Y2&;Õiûs®|õUƶÒˆ>jx7ŽCò[e>RËâÚNtÏë‰=ÔóÛ'+? ¼Á_G‹1YÁ^ü žUm§Ž ç·&y²ÿ¼‰J$dæÏ¹ÇBIâb"2N}9¼y_tÜGµ Åb!‰øò—»d™É¥rAµ¡š£¿5kî=O7y׆Seí;t—Ž‚DÅô]RzãͲ…óÇäi³óhn®ÈV¤½³,¹àJ[>¥Bÿó2ºüJd&´`³ºœWyÒM}W`æ¼¾b¾‹Ó…3[¢­(èVõàÜÊ|¾@á‡[#åbj4ÅOa3äÁm¯î>é6ƒÜ“yàýbÛüû„¾Ð MDQç*~ úh×8σÊ:Ï—GO³˜t^ÁP™Úxƒ»@l±îj;Wíw‹eÉ.¢ªða™œþÇÚ1rñÙë^$éF—öŒí6]}ÑX6³âšÝË£Ã+ü×;.Áù¿ÍuØTµömûöÛF2ö1ÿ„ßCCzT7:|&T’oN‰ “‘VèÁ„)à« h›…‰VLÅ€ùÊAÕù+€ÙC§=cN€Ó€’w×P§ßsŠ:Œ°c¨  Lb¶2¤¢«•¨úq)®Ç’ô8§N§+Òãñh!ΚŽã;Óãh|±ìÔx¡âCªH1£ ŽòÎ}Í  y,ÍmðúN•ÚœGèÈÒ¥êÏÛpåŠ=ª(4Ñ‘{æøL&$$4PU ´MÔƒøéôL`–¨Åºüâ4åbÀš™9u—!ÅfCY_ „ÎdÑŸ¶àœ&F!GÕy ¥®œÛÊ3Üæ¾Œ1ù—UK}³à­„î’ž<pÓ×Ekþäç™K ËÏmBÈRWBF "`©× y"†Í‰ zÙûćjΨb~+:Ëî¥Rü{¬¹Ëimœ+F<&§'ìI•˜mļ; .[%´ÿ‰´¸Ÿ|Ú¹€§JMÜ»ækåt/~æL˜Äj0—E„?ã¢CáÉý7ãEÌ»§ËCEÚö*./½V„ô¼4  Ÿü7Úmñ#’ ¸-ïg\ø ñö~,·èìæ ñÕÞA»àûíüϵ˜8¹ )!M¼q/>ßWCPè*O¦¢w©Ù—žÉe™•r]9»–—T¹$òóœ1…Ð:Òº·ã\²ç"D«h4ªŒJâ@:EMŒt‰ªHΰ B‰×ÖÊ¿ z"ÁJ€3°—Ÿ^rÅØäôÊNÞ²‰æ¤&iïw7±¹í³¦~`Å™‡»¯N7ìÏIÒt/LII‚Š ™Ø ±¢¹«7S+Š<á“z¢­l»¾j ´ÍÃ:ºâà?á˜À¸y oÄ(ý ;BHÆo0\£s¸ìå*©×,=´éR-N*x2²Ég‰1)— hü#<äe‚? Êå­é+)N n³ §Ññ[ä ƒlôÃÖ?#çí”ìoÒ ¶"nšY~Yj&ZIn÷ ë¼Óxs¾ðQ+Çä/aðâøÂ”g’*E–'­á™Ì°ëV@lÝéMÑ^ÁzÅÕ ™{ö›¡¹ºñQ¬Òßhš+ɉI[ä½(÷çJ„´EÅ”ì×'ÝSi‘0ƒGD• ñ÷3ÀüÉFœc2cúèd2j‚Œ÷¨¬n™ ±ö|þ, EÚ>HØt+šGÒÜ rmCn[ N+`°i½ÅQ±û¬ˆˆXES|5±/Þ€óM\˜?ÈÄ;dÔÏîºLj²¿âó¸½t6N³²„E>`‹õ”Ò‘¯• %eiRÊòâsdøZq¬ü¡½Ys_Œ—i„”®\èïN±æ¯Þ—Ϫ ÁÙs¤ën¼\’lŒ@#ž•%_q£äGH›§è({§!rAKVŒy„àMQƒ$7F†·Æš¼7^uγ KfîcÞLÙÉ·?¸ÒeºêZf½a.|'Kƒ¿‚±ÈoÈívA~{C†— PDHpp2e[¨”VËè³ã¦7is›uôò¦=i„¢^\Ø,äß¾•†OI³¨[4£dŒ:a+(âAØÛ·& (ñd©Ì×um‹ç÷Ð,W9 ªºÈJx,¥A¢2È_(ˆs(HŠ› YK|biQâñaJî«.)K¿‰™lÆ ¥d& ݹeˆöì|þÍÃõ¼€9‚ÎÂÆ·Éõ°æ2fô[ÑUDË¿Eøµ¼ôl‹‘ùØ d´i3¬y0U›o…(A­-´;éqÛzô$ èýâ§& î½ºŒÝÁç£q¼ÐPg}®pyUWÏg39È©ƒÜ²€»ú¯ !Òk1‘LèšXs1¨ 0ÞÄÓ±ŒXaD¤N›ƒ/ÿ~ù™x'ÎTr˜köi¶¦O´x2hÝi¦Fh~’Œ—ûJ7·‚^³¡í¬Í¹Ã/D'¢ Ѻh+Ãו‹"“±´k›„;œÛŠm¨l‘ß>Ê)RH¥eAå'.€ØÍÚÍ>dfÜéþŠŸ$ôyÔŽIÏbýÕáYÍ{3HÀf±ŸƒŽiUOú##éÅoàYPŽŸôDÀ÷ÕÁ§qQ™ËºËÉ¢Gë¶X­ieûUè/+gâ&Zá0…ÒpÌ& r]ë=YÂi–ÈìFºÊH,0öËÊç~_áL™8Jš³K«È!AÞÄý'Î"½¶J£ Vé+˜>ùN¾^³D^q6¶èœ1p¤Wrõ]âù²¹+¤Êø ó6Û²c²Ë—ÄotY®ód“¾zÈ*x¯D¼ÏÓYZUÏôÃòªEþF´kí / ˆ’ebßiR ÈMÚbEJûÇr.Wê\rQ\)š¾M…?@~šªÁ$÷ÇYp³4ÒôHuåŽN~%.Œ½u³‰RŒ®iŠ£¨EsOF 1{¹œ÷º2>d#.˜Z¥¡óêÀê õ;&-ÌOï^´Ü锃‘43ü¦>ž<öQ©ßøT¶ÁB0}yy!^ÓSõ&åÞk1 ÚÀTÉuq|í:h¿;Ñ ~©kÎÎqVÍ.³¹µ¬‹[öŽD>¥ùâ6Ô€r .bXÏ%ÍŸ+£Ì›ØWn}ê|Þd °SP ?QæHt#g?üÂd‚-/?;dÓïÕTÁ×ÉÓi]åÍ©5í.‰a]wâM”ƒjŽlO¡° hy$v€^$ô“L>>“lè(¼aÏ'3”ìQäÓï¶ÂPéô¬‘¸ 0G©ìDÉÙPöAùAý‚:•­ò÷èñÕ7ÆmÄêAþ±Ô8L¦^IdŠ+ÍvåCU/?×G$Ÿ¨9‡VQ1ý/óÿ€ÿcSC'{[C'k˜ÿzìI¹endstream endobj 4 0 obj<>endobj 5 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]endobj 6 0 obj<>stream xÚ¬ºel]Ý’-jŠ™™½ÍÌÌÌÌ̸ͰÍÌ13SbfffÇL1s3Û1ÓËùN÷í«~OzÒ½ýcIkÖ¨Y5ªFÍ)-iQ’ª¨3ŠZ8™YJ99‚Y™Xø@K7F5'SGÀ_'<%¥¸«¥)èä(a ²äh[Z$,ÍllV^^^xJ€¸“³·+ÐÚ ÑTÓ¦¥§gø/Ë¿\fÞÿ‰üÝé´vPý}ñ°´wrv°tý ñ¼QÝÒ²±Xí-âÊ*º²JÒi%M€´¥£¥«©=@ÅÝÌhPš[:ºYÒ¬œ\öÿ^Ì-€ÿ*Íéo,Q7€)ÀÍÙÒøw›¥—¹¥ó¿ €³¥«ÐÍíï;è°v5uýíÈ t4·w·ø¿v+§9»:ýõpø‹ý ¦âär3w:ƒ³ªHHý›'ÈÆô¯ÜnÀ¿0ÀÉꯧ…“¹û¿Júûæ/ 2:º@–^ å2³XÝœíM½ÿæþÌÙø w7 £õ1`¸ZZ›ºZØ[º¹ý ó7ö¿ºó_uþ·êMí½ÿÙíô×ÿâ¹YÚ[1Á³²ýÍiú›ÛèÏü¯!‘u´r°²üÛnáîüŸ˜‡¥ë? ¢ù×ÌÐþ%ajáähï °°´‚gVrýM  ù?S™éNäÿ‰ÿGþ‘÷ÿNÜÿ®ÑÿvˆÿoÏó-åno¯dêðwþ¹\ÿ\.ÿ/'S ½÷ÿ¯›¶å¿‰©YZ»Û›ºþwXdú·¢ŽÖE`abù·è&ô²´P‚ÌmV¦ö»ó]ÓÑÂÒÕèhùWÅ`deaùo˜† ÐÜÎñ_íæü7déhñß©ÿæâÌÿûåù¤òWd†·ó_6ÿÁ_ÑÉâ-þµQLÌÉ àËÈÊÅ`dãaý{¶þRàeãðÿÿHòO ÖÿZ+š‚\^ý¿•²°þSï<ÿµ2üoa$Í,þ5ê SG‹¿“ô¿ ÿQ6ÐÅÝRVâo±l,¼ìÿÎeîîêúWÖŽüßêÿsýϤ[ZzYšÃŸÄÁ­˜ 2Üà=o³É†ôõ9/l 9SÆ4&ºŒRé—·Ân¬ä£€¹ f×í‚x‡gʇá[¨“›QÞæŠ¯tÃxŸôôÛ&úñûTJ[V¢ŒÊ¤£r#d=o~šÏCwºôü€”Eœ—‹…ŸùQ•ål¿„¡™’ UØTópm‚%šwAži`‚Þ,´yŽÄtúHº†ã˜pQ3Á«+OjŸ¹›>º±@ ¢K0}Q/ߢхš639rærŠYÉ(üGsòû¬¿>œÑ:fÐ[¡¢ä¸–õ”î;Ž2¬²5)Hªù£lìŽ1K¸˜¦3Zý6ýX;Ø+j÷µS‚_Rº–Ôþ £Jã׆°öýúØ1Í7TÅê¡àª.y);ïɨÔð“„-þlŒGiÝ_ºA¥öåm†ÄçppèòkJåá „póL„% ]sN‚T]<¤Àzg"$G¼ýÈ2Ç⽸—ŸbÊ iÊñœ³!¿×üvú9޾j;;ÌÚ’K ó`~1…'Ÿ(]½“Ôúhóò|gÝôU¬®`šÓ~¤õq«MÄš™Z’?3ÿ¤ÛæËù | -¦Q†gv³™ @³LœNP¶×´.Çá¸â ÿIü€®0¾½½Ç6؈…þ¸+è’a¤,ÑËÐÔò8&?¹/9<ôù"šUòT›!º°¤æ¢þ<Ýß±f ¸õ 'óOý.×1˜Hø}ÐØË†ž.šD†åù@k%šÉÑ…g×o©bðGY)1é IéáÒÏù¼³`¾ßŠr²Îù(#æT¦_Ø©õTOøU<Ð×8󺄄Øî)BÖ|Uý‘ºhóLñ9ŽÞ¾‡"gL(¹l'!zj†Û/á‹êÆò“³ç‘Ä=`©Z¯¥]ÌàÙ–¯Õ3ã€Ä&/qóYÑ Tµ¿3íÛÀD ¦C D»ö¼/ œ«&hÈ K4E”N³k·¼l1üù'¦ÖýÓó«êNß#qÿARÀè¨Öž]Líxˈ"²wñuð¬ï•DLIƒtÝþúI;'wYbS€Ô¢¾Ÿ¾­¢†÷ñßìkèv _ÁðDHÊïµ”ï îo³T8'¤<´-Eàœó•ch™òýˆ‚€œ/ǯdYü¼ä X}26éü¼Ñ&Ë“h-j½øzýO¦¿i+ÖúÂ6 w;Ë ekšE«&T÷Ÿ|[±yµ¥cdÑOƒÜ…aÉ[‘ z5›£¬oÿøbCm]ŽÅâ:â)™ëÎǵÿPÖº†T•§C~¬?ÍÁÜæ¬Ï«Î×®¹½œF±ië°ð)Æ’Oš`Ó4ƒçìႺÔ÷Í5týATZZäGY«Púųj?œæ[éù’÷fCoùZ<€¥/,DÂ5G Glñ—6YÇÿèR^Å·ô©9Û.˜¨S‘Þ 4dM»AX€€D­ÆL]E÷gNˆE­‚ª«ZæºaÓ› XmSÕg ùqx›Ã¿{`ˆ[pŒåÁ£ŸY‘-°Ú¤À¡™Ò¨…}t{[Ë+Oa¶š%;q|šÚçË´ˆ…AyJ (­ \g‹‹$ôC \>H\Œ•£dü ¦£cKýdÑ@ÎMz;¥áÂwA;Nú¼-Uî+G…9êíxJéç,ü~e”¡¹¶´•‡80»12Gš{ÑøD]G›èmnŽØ<£«Ì6F›Ü#„‡ër±0V5§‡:Ër`,7$(Ê8³¹l_<¦pK7Ÿc#. I7ƒ‡:Ëû&ÌÅ3\LŸ ó~Ðg⦡x «L™Ñk:[gÐlr¦0xWäØ5SÉÏ«'ÛelØQü󫊘€X4ôm=oš]¢¥Ÿîê± £]Ñ; ÔY”µl`¶ð&»±@`¦‚)Î$‚™£­óW÷¬!À[àó`äøÔc›8ÛÖ¶šßÄ"Cƒ‡™I~Ù«µ÷]±«ä ƒ<ô—_f2±µìÚ‡‚yÞFaì¸yÈ¢B^©¢ÄÜÁQ9à‰Ó¹@‰I$ÒÄâç’ ÝïÊFãû”k™°uõi;Õ=7 ÏþÝ[DòaXš"ì!¸ÒEÓ ›Óî Ê¸ýzö=»¼°©ÜŽ•ÿÀc?çˆM¬Ãz5õË6Yd¯°H ‰vr=_òp}û$«ô7<ñ¤$Í?Ù6ªEcúÝå?dÒY% ´’ØnŠD®ÎøPÓÇ_Ÿ¢¬gCF¤gHðO?é9‹uð›Äì¾&,Ê­å]ƒ/ü«y‘x‚ÿ¥íOJd÷€ev½>&Dø±"êuX™ZÉÿæ‹qé¶ÀT÷s‘z,A{ãˆÙÁ5”qü ãÚ¿ù¨d=‚‘«n>ék•yM ±‰@=UíнŽH+ªæÃøº£õ´SñÇ£ ׯ^ÓBøwgþwNe¡Â*Álî`â¥W¤Æ.Òµ{®Ü‰˯J¨ìL„yk2TÙÍó$Y±†ƒ¦˜EˆˆÝò¦ßÅß'º/ñ~ù@;Ø%$óíˇt¿­¸Åñ+ ˜-L®ryð8Ó OÀèU] .s^²póY"ä䆗ֵë í(#ÂBùÇÑ2%ý9ÈÈ|×ù¯[!8Áֈг£Ýén«71(8YмNy2p€ý8ðÄuó»íâR'ª±1}ýžà7¥½—| ù:üºIµÊŽôͳá|úÀýœðNž÷·ÓX^ ]®vœÌÀ à²’!“©c™Ð5Õá WŽ–È  GiÞÌ1¡e CÕCŒ3º]6AÛAxúh¼í„°é UASxD½Ôqª±ñþŸô2LtÖ%-;B›¸{:µ ”CZŸf·ÂÐbù±ñ¸=[Å‘›zu¡=Åž×zÜpoR¸FãÕów;Œ7¢#hÿ·Kµ_ýU†›eédÏxT\8æí)àÆ2—ÖÒ×à$@U\K7ŠªoJˆr&EMªO³K¹ôé}p™`nG~'‚ü]==x;)ì+i *hÊpížã²Ëù?äFŸdÎètœ‰0¢j‚¬œ«ÍNàòIù‹}‚iN×¢o¬Ì5úÂñÉGåyŒ×ßàùÐ|®#îÁÄ[JlU˜iÙò'~»n$¤ vGò°’ÊÐ{R“ÄÜÊ©ž1$ÔÞwŠÎƒÚõ¢6Ûá õ'Ã]2ê"¸EYv*:ÅŒ` fú"Yn‹«µÏLݰڛÊÁáP«@VJ7ÑË qÒxÏTªæÐ5á›Að e5¿H’oòßõ[A¢\“5¨ä0¸' Ý‚/#v Â,ê çÎIPLUrY¹uÖØA“³€';FÁÇãYøèé;Iä1 õ—oN”°£¯³Fb>ìb¾¨ÃÐbÄÝ7tQiÛ½:Hî÷‘|NÜ×^¼RcÓÁIß!9}<Þ7_u×­ÃRRê²KO¤ßþ$Ú‘ZNL­ûkàJEׄöã§<°Ö>Mû›Õ½_ÄòûHåpL¾ˆãí`>>hB{…‚qðfŽŽ¦aþkÖ©ZÓ“„.:ù•tçjûÅO¸cq?]á…¾s=QÚùO}«d¢à¼fg:üÕ†§2*òžM‚UháÅ~ÑzŠ!5CA[# V# ²Ù7¢aµŒ9÷á@Yo5þ³ÝÊžø‘¿xì­BŽ×X©xÏdº~,#¶oÁÿ!UDÎ:ž læ“ûеön¡Ï½»ˆœ¶÷m‘‰”']bFßw öTÓfÎíBj4$süUI'ø öµZóL–n)o®3—ÑG zr] žo j‚#®8…ã[QÜDBVáAœ­?Z|ûóÝ »±¦÷ =säfÆxÊènÎó¶­ªj/°„-šy3QtªqǸ5ªFÇâØ&2oT³½m>ö[Q³²ý%‚“¥¤ÜOÂé½ÈÑhËB}Dåî¥ ¡USâ×/¿j šuܧVí;r‘·ý‹Î`„ÕÁi°«»à3éÀؼ¸PÞˆË,£U›¼k=]Tf¾ZpgìÝÉçBÑE$D©åÏû 1JÍ”EY^-dÏç*«CÄ`¬…hJn-k?ë|£«'Ã’5£ÆM#Ôoºµ«’¯IíÉÓöà…«oÞQ—^ŸMHcõëû—NËŽ÷àY]½duuj^?Ö³)Ïpù…e–¿ª`Wª„³eóõDSÁÿQÎ䌇õþ‚KRºœdÒ­³•ÖÆìt1.eft‘{п—-˜ùâç-ÊGŬ‡ét<±åžî°L“k3àÁ³´‚ÅתKÁ§h¡B­jÓŽ¥í¿û m: Ýv§¦C-söë-ÔÏá”Ë#†²õW% Ä7ÅÐ^>áàŽ(|f\¡ì<šÍ©ºö×|ºU²°ø:ƒÃÜwù&|èkIÉ­¢-¼Z”Ña4ó„6)nr’Ëc<÷M(ÛEÅÞÉöÁ·˜a`“ï–}8ËréýÕaFùG-°sØ®QYÜâ<«7XE·UXŒlsñ:”·Â Úez|TÙh½Ã=^óòÜNÓ?nCF jZó^ÆóM1¿Â?HDbåXqóœà6`>93¥ºê©÷‘¬eÅ{ˆ¾=à&"Ñ Œe_¾M~„s=—.d·²òìó}ëƒ>+= 3ÿ)ªa8ž]JëU·¨ »˜5¡êA¯úÒš)ösÞš]ó³G֗¬¸‹ýÔ<c|æ?óôÍ»ŠŒùÔCßæ ²ï4ÅKºõë%%^}ŽlSyjU$>Üòyíò]5ÛK휘{sþžŸµâû…aHfÓ;éü‡ôʸ֛…f÷<›¬³,ÿ†±Š2߯zôúq€Ž'âò]'D¨ƒPöÖA8EÓwëÕ·>Žú~bõÀ- †¤+šÒ/m£#uïkü;ÄîØw†/ý,#2RRl>o¥‹Ë_éï]ïþ¤òÆ|%QyzÎ/v?žP]Bgî¬ÈÄ¥“Äa—ØÑÌû_qÅÁQ„dLBW r‚A¦mí M¦á?ÛKÉÎV.f‰hßñV|ÊNÍ;$ Ѓc[b KÙþ仈—‘¶°ý*æ;Zg {Ä…æ•SKNã!“G‘ïjéGðUÚ1ãÐü=âÔÙ1,#ÓݯJüÝ>ƒ}°Æn›«c¶ØÜYRÓH *+ |§ô2Ž€j1ˆâWZ†ì!êC i….Fnñá+¼¦Ìo4¦£N‚z„óBrLA˲a™Àc”WÀa¥­E”*+žÂÁÔÏ—("|'ÝÍè[]]iµ&Þ’øR‘"Hå ¸žðn5Œ7Ê|Êx¡XÉ+,¢Ê°¡ç×4âQ®=±Ç0m Dû}•n…°q”ú£!« 'Õ‰Î:'”t;ŸmëÏâ”—–> ¹Ñë“wbAóôinÝ$9¼Ù\]AÑ—B鉑¡6 /s&Ús¯—åõiß^¡~ðÔYðÖæù˜# f)ê‘j¡Šj i ˜—ë;r2וŠVr[²âÁræ²AÍrpj4^ƒ,1C=!ÝÒ ¡¯}>+â|êü*±Y(K[˜«U¯&0÷ Üu¾º¼¤ˆÓ–Ρ ‡Š ¦Rs¹º kÕÞÐUSÞI:ƞÏ žü¯mùMó?ÿÈÓç•[¸“3#?1K„ëk›Q|Y`XZ·yNn‡I (êI>éyÄï„iFŸŠdH‰!×®{)®íŠ5h|ŽßРRÍkƒÕQWE¼Ùµb“ ¼¤è3Ƽ7œà´æ“ñJ)ÿ ÿx<÷ +ÈÆ'ˆÜéêζT üß¡ŒIÂ(q5~õÛ–XhØ@qvd„'g28vF7ùpιcînR›Dª™‹ý‰Å‚g΂¥æõA ¬÷öëêøÅí߯¯îˆ e—8–«äëùˆõu@¿zçƒW…ò>„KJ8¿5ðbŽc­b˜×…ÄI…ÆØÔÁ ád'ìnÄ…¥$ò7åQæSG]€&oÌ-LùeùAÆìØ)vòZñ¦ZMv„ÊWpTª1»÷Õ_.ˆZw=V´)*, æ¾õà°[6Éô“XýN»ùFfl”žoó_$XW^€z† ÛäG ùðÉõ yQþ29Æõ 8.=¸+·µwã…T°¡¢<÷á1—»óT[¾"_W<Û t m;~&bNKRÓüçÚ9~O.¿IîÖ<šîÒ‚i•õ…ÑÏŒ°™v7ó,R6íÛ1*§«^ô©-E©Ê²Út"(̲<›¹»µzK´™ñ/ÅV(<{0…Î)HÂ`ô™ÀÉO¥¢š ÿñV2¹µ\;µLø;ä Ý÷Z|pcLˆ_ÆcáAËE™€çÆ«RÓíOW4tyîã R$|(èùø”OËý¢>nnw?üú{Æ$É›ï)£¤¶œf­®F¯<¨³`ˆ)Á%üà @prAÕRyœ„ņ"æÃƒ94¾œ[ñªÀâAvæü:±ÒL;øÅç455µŸøÏs?ýCÕt't‰<€ÄÆPº—ÂVm’çôqÖ6sºrèdËÒÓ…—ºèÞ­àB.1‹Á:Y¥¿—\ÇÓŸ¨vèrsÚ_ èÓõù×ÙòòíÚ ÈD•Á!LçY›J¿}ÉDLø¼Q™º±Â«ƒ ?A¤i{?ŒÅUÑÑ""`Ê÷Véœ9å³$´®Gë™´ÜïÆücì*¦ŠR ^tºÈÚ·îº#e M¼h‰/68§{mÜjÉõbîi\•”{«$ú²Fð³)mdÖª Š^]†ƒ8³jYÅí=„¡™KqDÁ¯unƒG7' *Áë%2~+R–m³Ïµ%A@ë5"Yù¢‡ÐE,\Ô™·ÍoÁU€ÄJ&Z¯—·—$"!Øîç5:žuÓ‚™îŸsÎQ¬@¤ z]Ò*m¸ð ‰6ëÐcp žÖ™D^Äi6ÂvKï*/‹¯=L¦S>ˌۙDw3FªÀß ˆÍG†%‘j„kãÐËÁ?¹xǃ\›… Œò5qàoh¾$§Án/JrÏ0¦åói¿mi´·‘#Zµàì+ìŠãcÚY'(˜oP"ap|­Û…I‡ÜÈt å…p0iùžç Y}P¾Íu?Ö1=_è ÁÃt…§P;¨•wÞe†ÖRa˜Ò&^šã_ÒV¼GÆÙgVz‘ä[‹"×SL÷].ô"Îg¦àѦ“P*øë‰÷7!W!Ìç†ÙÍKãDޖךHÃ7²ûö4î´;ðÄÛA³mÛ.0òÇ7RY)#‡(¦YUˆíècrÔEnò°UzLý)RP;‘I2Ð’P&zPÁæ"üQÇ‹~¥$dã׫øS(=Å<ÍHjrdÎsÁ®@ü{D+µTfrOxg,³¼ilž1§„Ü¢úxvFÜX$sv'?¥¹Ã'Ü+±v¼§±Æ¤s–«F翱FðsB9ÑÿÔíó,dÊž;j¢Ùd$~¥‚ãÅÔ#O?¦_*.âÉG! ,,¼V\I‘ŽÎÁöLœ‘¦2ƒ^b…ÍŠÉ^L4w/¬©…‡9UÄ¿æôE´h#5’¡ª¿‰b\tœ«‘é‚kÂÖб҂‹ $?1®É(¬Ã7:ýH·¥5×<:ÎÙ‡´CmÕ¬¢mhˆ&êýh²U)üt_Ú³hVõI9ñt{,Ö‚gÐ[”ôáÂp¨ˆ§ êÁ¨­Ð¤WŽuìóT6+…•¸j1#æ #Öx+MQA%V›ôW»pö_Œê·›eé/×Åêô](ÛéR¯âç¾xl¡³ÉÓâH¾áÜLÜß…w©Ì9H³¤:=ÖQ½Lu&¦àÑ"NåKÒ:Õ—$-]gLnãô¶ åC½µ$z»ÎEZú¡0P5mB•”5RßÀ;ç‘ò\ZŽH´·i‹ÁÖ—+¼ÅÙ/É)«ñy·®|¥f!1`pû°ìz1,q€:¶‚OL­ˆÒ¨øg3u ^jý7s¤¯µ¿ØK<ªs4r‡ùéÌShq»(m ‹C‹ÂL“†r/ ‰ËS´d2Zr[²BJ(Ö”F¥8²~ÌRU86‘eBjHn·†ô¸%½XÜÕØ¼Õ­¥}š ên: +ùªÆ3)üä»Dá¨hðUd[Ѹ ý©˜°Š­Rç\ÙÎz?”Ÿß’çHíL| ¢à½ôtÜÏ ÇÉ¿rN7…s‹ß®·éÛæòb—Ä ”´Ä¹hZç}mDêšOÏ¿Ëcç õZKµøéôÌõÍk¹–b@­ö˜ïÏUqLN²_–.+ñ AÝ*WI² C±Üãoañºž¡ÑuW¦Yÿ…ŸŠ›t/Ü]Ãuõô{=¹½&-¾ù¥s/gcqµ+CµMá¾z›ï*t¹ï‘I+Œ±Ï ~Šõ˜0<Ñ+kӪș¦×ç¶}ÈÍcÂ8z¿çÂësKóËvê”!$ßX¡Q0ÆigkÎð¸á¸‘ÜD-’ C 'ayWŸÂƽp3ô̲¦w|eß$TÓPíFÚ.qT98‹”Å j%4Ÿ7A¸ë–7… Kºž¬4h,„£ â£3i>BC¡5üµ;.›ª&yú%~𱕡sð•xnH€Û) sfü žŸ± I}€®´‰iÔ™•òÔ#äí¿J±ñU“㵡½y×7(Ìp£;of„N|ÎÂùžÈ¬þûû×Íñ*":9 j[†lúà3]´—{“®Âù¬K{±Â$tÔ‡ôÏBR÷›oE ÆŽ-þ_àbù ¦ -„çü¹©71¤»Ýfk…õ?ïîS÷Í<{Æ’u¤Ùep»‘â±?óÊ%Ó±BIË¿mø.úUÖnhÒ ¿UH2ŠI«î©ê[«(¬.&(’ö‰ÛFˆ_P ÇÏNŠ{ä5‚#ú¥¹zÖrëc¨×VœÏ£°xÍÑUÄ×ÅŸ™uÁà&Ÿ )Hõ:Ñgz®`É lÂuº¦w‡5 œšŽÖðÝEÎÝ¢v¬4´íB?øh^(’qY½vUˆß;à|5a†p°ö2hXØyd›WOûa8ûBý®AÅ;7$—7%…E-þÑ«ûÚ¢óFº/'’ÔnvYB+V—´.HÛ ¨°pö¢0íÏÜ`\ä=8$fi6‹VZí"2;·NL‰O»KÎx)¾¬bá ñ”C·²Q•íÖ›ƒå3m§+vœ‚k™ªßÌJ8 å.;f~­e9î¯Q¨7é ;0®Í¥¤$/k,Ëîͦ‰Ÿrº®T>=õKAiFªéq-Š9‡K¤éê _“<Ó&¦ÌV¿ DZI0µOÔ?¹n]¹B˜²ÓÌk_ñ:qÕa1ÌeÖ6È$Èàá„©k¨ízsfl¬÷s‘ñµZ§‚¿ö'ø×Vò˜×_Y–k¹ûÇËÞòÏ9N‚ó@ÖyWló×Cμ7Ðu螌K©þšÅ¬¦?ŽX[ƒ VÙ—6‘õh¦“ úCÜ÷}‹¼2õ§}öE†7ù[ÑI^&£k" xûës.„ºl¹Íðç°Žä²”Ý ræÛLáäÄŽüáP•ðƒñ4‡ ×i*ø7RÑÜ“E ƒ:qž[›$ý… =•$Q¦2ldªoÀ)ZÊUœë°÷ŒñMfg=íå­[U¨à"QÅb“»sº¨™ŽìåÂ9/ན-¹H$BEx‡§ΪÓñû #±¼º@\[q‚%ÓÍPÝä©ÓŒpò.‹ë æ·n•&œ;Dð¢ë¶—¨ø%7ã«ûUë¢Îk¶4à–A¤1I@l\êIþvæ¶CEþBÛµO܆Gr̽£ÉŽcâ¼’„¬¹%·~ž÷î. ©n³LûÞ—H atX—öU¸#†û\Þ¼dþãPùWú¶‘B;'å}ªÌ…éÞ¯˜%õ;XB*$Ÿê Iöd\Í·(Í}ݦ_=(6ɽVIF½Ý~½…)DŽÄèΙ´^+N ¬ ¥Ýù[¦Ç…ñÛíbq-M“u™ç$»Þm•ËI¼{5߸KÜ!™ôæðÔ|Ò tDŽf2£*‰àÏGß0I9êµ>©$ÝSG˜:~×ã2X_~iwo­àÞŒwúN¡d¾\JÓ½¶4*Äø°u Szí`DÅ rµ¨ t­/Ú #•šŒ…þ¸Â8ÐæAMŒ='ÍÌ´™}÷Ä+B,2o’Ðñ¾Äó ºäpH Íõ­ÔÌD2Äó¶1\Ý8.Öú`G~ܯ9ê‰_ L7A†‚ZeîìfX…k#2ÂY‘”tá´ºðy²æi¸¥ã¿{KØöÎgЊ>ç©éÓ•0šþ;[¦p¢a·x,1\qú3ö‰úƒaê½)'¿Iû›ýrå¸RmÌÌÅ×p5K<·Î_0ŒiÄóø„#›‚¨8*„²¬{=®ÂÊ2éñ—Ãìrêz5½iÈ`ÐŒ”yøâÞÉ?â!ô½)a™G^„çšì‰<êüÀ­§ÚÈH6ÂíÞ¼©U¥0…IQHî2±Åñ¾þiGw{ÓüM3À] îUJ ÉðÍâçRéQ±p–. IÛòGKN€=ùý£Åä3XL29¥£­özwfùin»”­ÁÖ¬ˆ€0¯U³ßif¥êàñ™yã×êŽìtäj&"‚Çкly:øäŸgX¾µ5e1Ô€Á•¢î?ñ ÐPëÃ!Ýk¬fä¹qŠXd´¼³ãSÏÃ"BÏ‚-2Ð+æÑ´,¥ûÓt3ƧPZ´:¼iŒ¤º«v—a9ûKéâtȬÑ­\aÔ2yà¿¥<ñÙAïJª‰fƒ³~âp(m(©•PñfEö‘»-Œ(ü¦ÐhH¨¦S3¯û¾i®üã¿>õ$Ì®¹"0ß¾ìÏ)È&‡ chG4ÉÌÓ"Véëæu O5,…ÇïÑúS-?Á”ˆ2fßŠïøŠ Ú–Ã5¨ÝÍC1¯wôÐÄ^# .1ôÜ"t6žGˆÓAú5”bs©—ø¥JÏ>žâ@§NDt3²[œ½]õ ú´æ B¬^wz]"c ¾Ž¡¯-¤EàªÈc/ËRç8s3¡kLµ§?ž$7ô‰þðЬûá·)•_á1íG°«WáŒ?¢nåɤҶƒß÷ §,n_jUN`‹¹þØÉ¸+ÈO êp!lJÜ0ùv%ТKM;_`‡ #ó@Q¨¦ròÁ(½O8›{¢¨7 ˜ªS——q6þäg b÷a…¨y”$åo7Üìyûª ë¿ó\¬í=í¨JW²¤Ò·ù´eª¾™“stip?j¹$Ñn.Åᘌ¡£}¨øeïÐéYæ&ÅcT4ý2WþD_àlœUKJÏ,3"àB‘ù’àœ8bLëÒ$4Þáíc^ø–ë}c!+7%h®FËáhŽb±ÙõÄž7×ó*º?=Öm,•Òmçõæ|%yI¹¾×ErF86´6Q5ñ e¹ÂœÅŠJž¥Dðââ*ŸYTÁ©¸è±+¢ó<Ìžir O'ùFç”~—_戳Áç¨X?P9?ëd ævsèìùáøëkìNg%ì~Ÿ „·æ/´CwLNˆEk®¹ÆQ]ÛN§™“B•ÂÒ¨øþô[¹N Äü [²€d3+'‹Ä·°¯EÄVjó{QËñØŠf±¯ûøò%Ê ô;ŽòatÂ8¢>v1‡:'“8T#ôäíÁSO|µ`†åû¹Ø+'*h â£!¯=7ɯ8ÊÍjHàÊ¥WbiëÚt÷8¦VìwõÖfÏA93¦žèN»–Áû–Ò3>æu&éÊÍ&;áÛyG,t¢Y}lÓ´Q}ÒoäK«Ë­AB‰l5ÓmC)¨é?±wÛ`ÃÛ‚^æYHc¨·ÞàcÙPõ*õÍ®‚ ì‹·•^SìféŽ\PŒQ{oaxL t}a·Ç¨lÞnº²§µtqŸ/ÈÈñƒxÜâ|5µLÉm-¦‘ùMf›±¼6¾WRÉilÏò´·¤g*·×Ÿ¹-aß7ˆµ¬öpt©0º3¯*æÀ¹²n¡³ÁŸæÅ¦ù‚®I”Û}ˆ´ €úlꇳ·«D-¢óŒË{Zÿyÿd¥ºýÁ3öÅ9C·¶·H¸ïRâñ{&cé’±vb£ O|Óß¿æ0ÄŠƒØÚ8.øµlsìÔc” Z× Š¹]쎣$E;Ö­Ódj„‚é~ÕßÜß9dz©8rx`/‰‹šî~âpcË jvÇë‘OðmöWÂ!§©ŒsªN̺@KæS7¡k~×D‰ž’ßUØéÿÁŒ£3ïe»˜½·¿qÑá3#=L|ê7Güùc'—Q cÜ{ºb Z¬MÿÍ#ÀÌÃÝJ~Œu‘îqÒöήÍ‘^3d¥‰R@–‡~ymC¤·¢Gûeq¸w—1r¹w— ·‡(vÁE1¶×Ó1]%û·“*6C¼Å²K~„(Ò§…<è Çÿ"ý3 ¿Úy:j[L2;àïW_ÐÒgÙÚ»úƒ2œÐYÄ… —‡oq\BŸ1ÁË“8Fyþp±>þͨX¾oNK£o^" ÑÍW²Ë¢#<ÆJ$§|âä‚<ßl&EsÔŸ<+ò¦¾2XºžýiÉlxq$²” %ŠK}Çõ„v‚½–m¥ß6[Ï•žý½‚Ö …¢}ŽªkÒšßÅV¤P4IÇ]2)ñŠJi!€¾¢K2 Ç\dO}ŽT“Ε»-Cpåo¥—ðAñ×yÕS£ ÂÄR]­%3.úp`¸‡lÿ*áP„Ú)p5š1Ô²NI!ê‹á€†GÁv‡¹ ûß  {Ï8ÔQ’HÛöÂy}š.éÃÖQVU8¶;5«*Bõáh¿ø°ß™)2Î8 #8’«ýBÀ9aŒ2w¬Ò ªÙýþ&¢‰°d›%½™ ½±µLú G±GQØi)ØÞrºe–RÕØIÅVB5ÁÓyûãd!×ĭ‘TXºA¯Ùø3K"PCŽñ|2l_…åfï$(÷¤÷A\Á %„wþ÷o¨©Ê¤â«Þ¦b©áô!Lkɸ‡Ö‡¼ï¬±½èŠ`Íu‘.u¢àλ˜ ¬%ÈW8í3•ŠpÙðGƒJùäï–z‡úß¹òØ –ë?²Ìoæð’ ½¿R®‡}¶Ð¸eé:'ËÝ<ºd]òä D¬ûX $ ÷øCëS–bqÂö–õAPñ†…¶csU Yù1‡·©M·Nùþª—é{¦m£ÓÅíKpáfLµFÃÁ«'W‘úÛqµ…x½+˜Íüªîˆ #A\‰õpN[„D=küç_çÑâYf¾Ý·Àúâ™éüê¡§#í”–éÕäÝöh¾Â|Úú¯‡Y«}°ò=mq0ÛÍÿY7K) ¾I\yÍWݽš—_ráÓMÎaZÿ|¸ƒÄ¨wA–Ù»âê[·ä¹,Ôoë_‚¸grj½»õ$Gâàvâls_ÀÉHeE2i›¿]µ¤üÚ®“óˆÊÝ2 ö‹“?wþòQ0ÚV^š’žFÒú®q{¿ÒmF!Ê:•jS«D{d ÿr†‡°¼wÓ{λ頬P¤yxYzÂO"î9ŒÎ)­†#m¡y“­2-°º¾ä|÷û”;êëâ8íTv©iX-Tï©f,£3ýÒFÿÍuk ?ÆF2KJ>l(E½têÉö¦òú½(å ûg_ÙbdmÅA?ÅF<[ˆ€áRÀ§Í5cùÌ5Õ„}še€bçòeâ7à?ÿˆx#îµÊ„45(Ü[ŸzFç™eãd956¬EØiÖóÃiþ9I;-«7í&?Í€Þ3à“·sê²m››>ªèüpË,Ej\]YÌ –àµ>£§ÑïœÐ¼B¥ó¾Znûâ«+‡Å¥k7èMTMEі׫~ãëjkýû¾ÆAc+múÄn|¿–Î~Îô5zt Q÷.[nu&ÿwBiw øìLúÁYý¾~å!ç×_{Ç#þ7±ú¯Ë7$¤±¯d‰q=úÄdž{x ¡` ´]xƒhï3ºrf2”ksMø«¬Ô*i[QÍZ#ç£,‘µ`™8ŠÖwžzæ}gš-?óÉÏ!mö (l£¢H`ɮǀ߲Wz׌UöØöe›fšŸË~(›ÚQôk—JVÈ•lK„VR|n<ë6v¶ÂG.äLiê|ŽaÀÙO2ƒ¯%ŠÅèB›#ä¦^B¡Äð>á‘Ç•ØÜ'öxš•ÛñåªpVƒ;T{¡°×ÚÉAѬܕz´‰ÀÍÿ^&b¢Ë`Nn3%Æ@VûÎÃ5ìc«ö‰¬î(óþ¼¯y3†Âæ=D/r©þªÝ4 Zúùk°ò¬àÛÇ49lzXÀÅ<¼›‚ÚG¿Nž«_aã:: q$é‚Dˆ¨ajì§ >É!ªybKã‹ÕÔÍ'„l‰±vJžá—tE<æß(©õUõðeè³%aÁ)E04ðD7õ)žC4£jGlö"H3‹GX ¨H(ˆ¥;¥âû…äͯ¾!õЗƒ,3 !ô¢7_wgÝBBgÌlåuo«5uk"g8• œDbk‰·òž!¨Ý.(` z ’$Ö3¹ë…M繫ˆRú‹Ê [,vVœF#¦ÇÔe¯YòËK®ËjC'ý¢džÈ‡(Ìս͑>bÖÈpתv¦1gÚè©ù}ÁælD® ЋÎ^Cª [¬)I¤¹9©ø‘^Ou×TEõysEwž3:ÞPU’’·Écz9ð˜àÌìlæN.ÞUPs… èw—›(¾Ž„[¯6™)+øImbøÙvµ<#7á¼pÔ±œÚ}Y ¼@]1=SCàg·à2f ¦>q:#½\ÇÌ’šãGl:8)àç.‘Ìo.…³i±ÄÚrä;Àáå|§èØŠ ¤.¸g§fCnS8îÝÎø>¶…ú`ª˜xD_̉¢ ©1á;x#™×¸¨ïî]žVñe΢k»Í2Ï~¹ýW|Ì—Í1 ªIEþÖÔ¢u‹ââÎ&㢠í^ÌÉ;¨†zF;QbwRjhÂ!°ûxˆ;ö k€•œc«YÀb ´OìA¯“,ºr‚í4PÓ±'=e¬~7IQ{;ŒM€º!jÒ¯}Åq¿H µ¨cÃaå˜\]©µÝÖ…N5sµF²ðûïßf½Šb)Óñˆ<³ú3x8d‰^J?Õÿ@ë¿€û9©žìL~AÒÀ0Þ­(ïÕ)hÁ8ÈYWt‰\Ä DèØ [Ù=øŽ`ìã§+jèÅÑulœd毬¯›éštz¼u°GW&¬ ¹.Ê¢ÎZø lSö‰©Yžë êgIíMU¯ ·â(j°÷Žf„…¯]Ô„²÷ª2)üo1:Τ?kk¢"Á–_Wô ThÕ3W\˸âBBÅŸ2(#k½Ë¤m>AýÊÊb‚á€OÛÛk}$fçü8ÙJÈLÙÈßgšåº¥i&-U7ý–YÄ=X&sÊšhozX×'»ìÊ2( µ'ÙÇé/ç’„òZ~\Ú!ç×……ÂVN¥ÕØÛ¾ê‚cœsjñ|é8ð ª5áâ"ú¤Ò(#ÇÜÙ© ¼éjœéÍ QB9]4O X¼j6놈×èNC‘û¹ £°‚9]åëïxÔ_B7¸‚)§VøÀ½Wô÷q3m˜\žÏ=é¶ô?¦¢·Þy(Þkzx4YGO…2Ók2š9M’Xþ^Ní‡ø¤?å? ã)ò ‘@Œš^n)a…Öq(¸3äÿµL1œ÷˜áˆ¹ýxA·Jʆª½áŠZøûíëJ~âªC²ÛÏÜ&"\r"Çs±G )IVk§ÈZÓ-þ<çƒÑpŒ{›Œ›Cs,|ÐÞùÏBò8䵑~KcØÃÆáÜ¡$Ÿ1uæYdš òÓ߆ý¤-€£½F—Ú[ÓF³úîÒÈÒǪGº>*íÞUœ”†HéÑ·»æ¨{NÊ垃‘yïA€ä×3ÐàTê¯ßµQO3„ŠëЗ ö÷GlCÚöÆ-ƒ›µ.$rs¢ó"3ÂÆúè—>ɇ·ã)©ëg6­æã÷Ó„U¿öŸ½òÍüAÉB¼)z½?7ºËSc‰GÒ¹ws¶ý Ó±F£Š!Û@n•‡t[š+éëÌñJP\«'ˆ Õ8/o™d;žbGµû±ùàÈÑ]Gå…L« 5Íò²¶¬%z!Lj‘ö@&í³×<“uîx_DKþÎ닊W³ ßÀé¼cÎ|û›ï&9¢ÓÂ×Öfhׯ‹¥#ãà²Q¼–ÊÝHx¢UÑA·exí7Z¥ZºæuÙoÄÞa̱˜ÎãzÄÑùÞpÕ; I1=Îïd©µ-n|tçZo(ø/¢Y®´Ÿ¸NM09Rë}½X7îÊ!‚4yçkãtŒæÎäK©”Ê9ݦÖÉ´š[=¯åEFIÙÔ9ÔU­!ýÕ£å?u;³_>Í +<êO¦ OŒtû^U±·Û~"ÌƆ;WÜÛÊ¢qjrxÚ“?yxP†˜.°'VÛG% ‰CoÒ鈈&(ì)ær<ç¾/k åàÝЄ¬­·w¸{óƒ•[§ÖÜgÖè Ñ8 vçÅ2J§s!»³ çÔ|xQƒÅálœ’Føßú P ›X¯¨‘ÙÝux9IuÉ(ø´ô²Â°±]øË²Ì ±}Œ?.õ7íàÈí^„ )RFŪ!Á»—ê°èúÞFˆS s-ÈÃ\°†qC ”¥«‚Æ_Œ§ÀäðAU-ÿ³ÏaÛû¦¼Ümÿ!»°¤2Áf{e\–÷|mjˆË²È™7!5(ªȪ°FóUÕ%íÄ8q·nwµ¾;ë§dgm¿ýÆÖú![å3Öþ‘ŠÐÆ¿/ÛÒŠ´åÅ>?ƒgc”af³ n¬¹|óëlŸL* ^#ª(à{DMx¢';ö³¤z[м7Úº‘:^W€äÂc&gU°|–ÄX‡ñ«ˆ4‚¨’¬\^~¶¯qݶ¢V#‰yÅøÑÕú—áKÃ…3J§|‘4]Iùgd»òg\!"/ƒˆ¦Û¢gRô!®ëûÖÄs›o!Y¢GíA®is_8Tø«ÞºU"70ãmœÔÊ@ž*}»x¿Ø\W$ 0 †!ºþ+P%â9IyýÌñd+’¢CcL“Bk-íýjÈ^›  w{ï«$ý•TðÈ D…¤}Mæ=U“©¨7X ŸÙ#±@õUO˽N.8¬Ç¡³×T}vþÞï±tÓ0ôý.Ÿì#Ñ®ÂÝÌÂMìÔ•IOÁø Ͻßtõ'™i‘¬²ok%hIÄ.3a<¿žJ_F{DÛ(©AøÚðÈÑ,CèÆùf]~iþÙr Õ¦vÞF!`îB£¾!Ag°±š£jšŒ´; éÞomƒpkazŠZ(Îþ®Ï(/ô#@®"¾l™û+‚€Zý7ƒxçyÈJu¿éSpWhÈ(:ÉÇbøC’î¶Õ{™X‚n£ã}qBû?g}Ä\ùÇ LN6hJÇ…˜IíYª@r èÖL™éÊN¸ÍÑÚ mð@r?çuI~àUœ>—Sú@WîX|ƺ¿øÏ; Ô»ÿ@£¸ F¡V¹öáë£éÞæûebA¸GÿP_é3¥jK³³h˜ö¤ÿCÓŠÊW®%Lï2¤që!0SY(„À–ÚK¡_ìñU¯Ÿ/¿Kks`„¸6“Ê ¼tש½Y6ó{”CÈbFo†2þ™†¾ëƒöF­t…ŠÒÈXN÷§è}í OÅ‚çБŠt𞬠1Iø,Ç¢Þà¼|ûbÇKP•]²gÓª^qŒÅ¡ð­¶Œ|i²à0ÐèÑ¡i¬ —Kt’ö,ÍVµËÙhy%ä+Ï«e¿ñ'øïWc1[ÛèÐÀ÷ØAg0¯ä,“åÖ™‰a %H%ú6¼74bÑ…†ìM‡/‚Y(í )(îõšp@Ë‘ª~ìVnœArÐáß}4.¤ºï"¡—Tt¡²—f"Ѹ̱¾¨ß.+@·[Âlè»Ëm)"’"mX/jvLÐÚÏ©©ü˜‰’¹ŽÛ¤ÚiñV\PS9ïb¨ ðÁ£}äÞ¶D¡_[ÞÃMiýÅ· OWóÉ®¨÷#ÂE¿Þ¼}á3T¸jý*ë>|BÀtè†5¶ÀÌ׼ȫ“=(÷»º÷zw×(öŒED]«€j›¹8³q*¶[>¦±qF—Ó¹mËgÂ,‰yV8¹Ó«æŸô¹²uSUfŠã)0BûÁ’·ÔŸ\å*r©b‰Jº+»¹µgêÔ[¬.$Æ– ÷î´…zŠîÁŸÜ3ˆõ¯…F[gØ4 /–áSï[íèZì}¯vi«5´¬ê|˳ùÚÛ¹¨å¦Îו]®)dš:ŒwÌÔʲé(—W@k²Eœó£57ƒ[{|78m89Ö‹;  ÄW•3}ŠEjõ„ç†aäd@Röf¶R·<ŽßÞÊiù‡ý(7Aç#po Tã¦p¹Â°Î¨Àžd3„uèál¸YÇ¢Ço='E—û6eM¸%uÕzø'_°E;iTï-KšE·0‹”_ëg¨Ž©žf¾ÙB Lsë㣚èIâß/÷á?ø’ŒJ¢Â&:zŽ‘W!ŸzÐÐZ‰m~‚“ Þ€ÿ-*~ä÷®Ø¢\Øböƒ{‹g_‹>x'fjåUœŸIF`í!JÄŒ¸“X‘äì mŠ}qÖk <È’þ*V€ã€M­E¹ÀÚ'%YŽêU²TG’q¹ñ=Шžùe¨ÿ¦ÌKwêÙüú¦[u§t«©…\ÖûŸ¯F`¢ÈçøÊQéÛâ–IS‰°Ùä\í¶^ãLžÀŸõÜ%Ž!DtÇìç3OsÑg»O¤øªÂ5¼†6ˆ´>ü*ÞŽ˜ð•üK3„$mcr9FŒQ‹Ku*Ó(¬á›–Áº¹÷Ü™aÅ*ÖšjÒäçF–@þ±³3s f ¢DäÄsŒý8dšqw¦ÅfÊíÛ5æ¹Aîz·6ñ«.*H`·`þê^úæ9ÃΧ؃÷!Å-jc(R‚ €| ê·æÖË™qíǹ…3Q³VvHHœ­ýÝì~Ìc[œ@ÀÒ#ÿþ"\ˆ¦Ùì{ú¿²·_›Q½m~l§~6k+ÖyFÊËéPˆ°È!‡“ Éÿ+CïeâD/ú0Zì•r°4è í×ñTm¯‘§Nõú©4¢= ¿dj¬N²ø©õü£›íÔ1D†ÌŒR¦>àä\êj(ÎìÕQÕiTí´{ì3Ù-×táºùî*d UáHCêfËdC4†€Ãw ÿöL¥\„n³êÖ Ôãü øß*^¦î» 6YAX™ªï~S¯ÕÎ0¾“òÜò5V¦êòŸ°Ò—O N5'%[òí±ÝáVï*oO~=ù"¹FkíÊš5y*!±!÷·õ œm*ÿZ(=œ`سša‹ôMÈ@ì¸I¿Ì¹§ƒvG¥·¶ìJØ0€X#·§ƒxbÂØ†P£Ó‹ùÁ.77o>@`òЕáò”’ï€râXÜÑibAÚ5_,‘¨RPy¹}v K²4ù^Qu Q‚Tl¥öke³ý•ß0uˆÐ¥a,a¤­^)Jo=˜ë½‹*/«ÿH§ž—ü~z« ñúŸœrJwßÅ>RQ<ñÙÜ•Ê{ÂXñP§ð”çÛ‘é‘Eñq^µ·…Ò«hcª‰—+øRO€Â=ƒšu¼Æ­›¬W&êšKÔNŸÍÐÿ‚ BD òò)i€MZˆÓŒ #ÑE8]‰cƒ´•úWµê¥€d®#ågük<ýv—>À'ßHv…së¾ÑtÍ_LY#3ÆÞ gà0»Ò67 –®£º¹$Ñ–eŠv:ŽÄ(Îà¹GÒåšÔü¢Àu99Íæ*–)0ÓÐê¼u¬bÀ]ÀY"MžU—{܈öv2?ÌÀþÍv! ,~P„ÅØªlÓÂQÄ9»×º8Õ: 2)›¾;Ÿøfg}_ísïúý&fç…án‡„ð™ÝQpíïbªC‘ëáQ<†Jb*RÆDôÜ3Õ^PP¢ÏV=f1§rÐáTÇ=ypµè'! 1´WǧdÛb= ô7¸@YvöDÖ<#ÝÚƒúMÖგYå¡EÜØý­5½oqÏ’h°CwéÚØé¾Ãß’ÂñçïѬê%¬¹!™Ù± ‘QƒchÑ¢!Zrë Ù‹lªÀ(pciXüŠ®|¬©Z;Ψ¢$=ËgÓ»Cß’ȲSÖE!è.ýx QÆ)¨…"T$¨º\´N(`åö@ËóÇ.@xSÑgÔ]ö?dB¡Ð¤ö‰Ýn§ÑÞ—ø\WÞv\Ö²ó@0/]¢ZåCÜ‚mÑ´Õ¡Ùÿ;±R9ØÒÛÈm$Vo* ¦ë¦<™ý>‚¦lùàèÄ3Æ/¿øi°„ â3ÀãC»D™aƒ;¢’=ªâXäk"Ï€yuiªô#Ãã©þRîjÂDËhö”U–o‹X¯~JÄsÖSXòà<Þ¸À6öR¦« ˜0ý.(âónèÈöì1p€à`ÄÉO[TÍâN4Mß÷/»ˆŽí\]I*„8ïÀ 7Ôz&Â3£] 0`x’í’\Uä°ßÎÊ`‘À/Üij…©0HÁ ¬×òT…Àw›>aýyM¢™E_,Ää‡BÁn]æÿÛØ× Y0 ´h+µ¤_˜¨ÿpŸA=ñ0ÍMS´‘5ÿ§£ü~ùÃWNµÉ¤ƒdôÏ´›ûÌùB¿q¥ZÙ,®e¿þW<Öfž&iÒ6ªÿõfjж÷0šüÀ2õ–-Ip±„›O5 Â7aþƒÌ…ÉR%“í|ž*´°ƒà¤ áþ5¾À—M"Ýy®ÛS{jÄÓ˜.À^ªḧËrY^5—á{ üP Jý•¸á~ƒiù1„-M^®¯¨"­D0@2vV°ÒÜjM$…˜—ÄuoQ‡œ±“z[#:·l dɯ³Ü]‘:ݱ¼4˜€9‘áyð›J®ÿÛ Af»Ã¨wQy¤§ š|Ëñ߯•$K }¾á*>¼8 öމDlý?¨ïs¥5ǹ‚Qä·¾ú_j…÷N G̉GìAKŸ(p²õÍ÷3ºÕ ÅeòTôˆ/0³W>a=]äÏH;Ïy•u €Ýϗ悸qËî Ÿ/—5lóüè9: ™€ææYÕó£CÊà_êÃQ€·§3"‹þ*úµéð=Ï a>Ü÷;›úNäø¦ô¶ž¯ŸFz‚òÅÒZ-1daPª›ø†c¹~ýJÝ—D¨ÂÑù×_e XÍÔµ75:˜oã¾Zwåzyd†2À+H.6PÙ oµLí[Ø"Ò'º_üY÷iÐg1Á¾g“°{~xŸçÃ[X…Šðœ¶Å„;‡IX7O.:~‡*èŠv<š¹Îfú¿QTEr™AmtíÖ*wÓ pꀞ³·—²\øóãzÇG™òÚèÙ%˜^·Í·§ŽÓîîªòš®u|9pÖ÷]G¾îP]M ‡ yj> õÒÓ‘pÎ~S<ú§øHnó’~  “þ™¸)|+˜Æ!]KP’S8ºYWŒ™e^’.´ïÄ´&Û(Å3<äö ø‰gv͆†¹Tð<áÿ™hï:m–›(3ÿoH¾A_³E¶?üìØl†¼³¤ßÓdOIÿUg ^ûÞbÀÓéŽYMºz´Öþ¯zÈî ß²· nò†Ô× tareCÿ Ó­ÊF"™ÙÊÎhJZÂ`4N­¨™ÏAL¨„çX´vƒšëäA-ßïŸð°¡¸ÂM))‹"Ë(Ç K¼8J…6¾>âõe{…M–¢¦†l Zöî"lœ Í]…»nᣠ2àêàµo£V(¶Ô¶„¶Çk4ú­¤‚rS=ä§3­¬ÔÅê­Ç2¢WBŒ\zánø[UŸ° épèñi‘ .^Bü®ÝqÊ6¿=IÀÜð¨ÀÊ[i®1O°´‘¢²)I;5ö:â]»fY'ù{(RMfnÃ>K¨¿¬ÚpPÒ=”TÚØZ×±j ÁL/5í®Ž”s?çë$"BO>k؃‹•hp\aÞÅÞ7HÙè‚ð3EʆªÄRÈWW%ª%ߊʦÀÉŒÚmÕõ#²oÛ¨*ä7jPM†÷ò™Ëcèíbɤ%ØÛŽÀÈ”@d!•îîÍÿsxæé‰o9j[¯¸ˆ †!ºþ+1¶ `‡` J‘•¥0é|졦Z~=¥5•.ø•%’gŠÎiýg*gËzˆ3_µWÒ)ÿÐ8Æ—¡®æöbfæ¿Óäš3¿ åè'[tûZœn³’=Ø'4ÔG¥ßsüà6—ŽŽÑCâ\büÎÃð@·ÁßšÛÈ?%]…'n^G÷„xí”9dsÂT6«²Œ}ÖORÑ»Lv3îþ}ãÛšƒ'èütÉml nåBÝl‰ë£”І¤*ŠÊì›è$Ñ"y‚Ãá'MËVq>ÞMí|™á òw0Êc¬uX‡·æ¢%9«ph€Ï8ój,R˜9õ¥ÚƵçü¨tŽ…ÍOç+’x+Ú÷·áÙQ™n¦£ICÍŸJþÇ å*I‘“LQ¦‰6M-ÿn[î7[~¨ Ū6ޤü¤4Ñî£Cž¦9Šr` 'ôÊÁϸG1¡ _¡\·\O®ç„?a«>h„wØÏ#D£°^bŸº=¼“Œnµáðkí®ì—èü”°%|jÅÍSàdÁ‘<Ýßëx°ãÀ$Ï5 n›_{qát(ïjY/ƒ> ó¯àNGJ6v¬­Þ0ÚäæG ë3Xþ #°«ødÊÇ^KÜ8Û÷dX¤Y¿8®ûÃÄÇÂȸ$I»v¯ÊÎ@‰¹¦ƒ¾Äbb1&DÃ6Dõ°]õ›°YÜ1¾oÕ!u„í›e£)À4 ù¶ [äê_%R¨ìœû˜cIN ‡§%õ ‡'¥]Å8KáhEGJ_Äà˜Õ§¨uÚ…ƒoäÖ:ö†ŽþÚ߈­,ûY™c0|q†ÈÍÉø¶&–pÂ2ÕvBe_íFÔ•*OÖŠ Ã/æ9Åf4È=çädë¤XtUßlÆôµ™“ÌcG[»ŒFÔvÝ]½ÓÙc85±áMµ-Ä£yý©÷¿¨`UÛj HQ¦ÕZ†Bõæ9Wyç2-ç‘—gÉ%œSS~—¡Cß„Wª „§ñï³rÙÎâÏÞY€ge/@EWÛ‰Pù™¶ÜƒËßÿ ú`†¡ õKëá ÍHÉAN@Bßµ “ïT:áN*´ýý@ÃÑ´ 4hìÈá”ò(NôšsQÔØ§ü°vMÇÓç€åD°ÒÁ6%¹8ö:¢¨~©"ú–ÊÂöGcäffìo‹ÛÌoÁ#Ë|‘;u@bý„*"8‰äW¡÷ ×’’¶ ‹’—ø¶ [ä¬BxtcµSòëYÛ¾åãs^;¿¥[sÆÅáe†oÜ„+ÒU5цô÷Wú5†æ¦øp³#ôߟ«[©ß~Œíë¼4Pë—-ß)=˸ßÞ3ðœ0S¦ÐútxSúmB. Âu4I.9¸ñE iŽa3ÌãÒc»Â¨{Xä/@‡Õˆºú5ÿõm´­Gï }”bpodšn›ezÊÁéšµ–íºmøG„^ÿMëfœÛz·$iŒQ©ïô½ÃÄ#HémV‰Ü]êö8À²@Mfj‚ ì.°Õ¨¥l0QNyVh2Ÿ+8?·ä.„›£ÚhŽG[æÎúC©¼ÒÿµóãªÝlGzÞþñÒÛÃ9I÷ûÉò‹¾î·d…Rô8ÇÌcä=T© 9ë[xe»rÀ¹éÏâáÂÌ–t¥Ã9øŒìîªx܃‚*‘pƒ,šÎ |€7›ù’ÞXˆ¶ åÚŠóéçš°¬Cxôý¤m}3›|e!³¼N¾Aï_“g?‡îC¼[]én=`šÓ4rz€¿QITÑñ“ñ»•#ã¦zôø†œ­‹“Xñ›þ6æçôL½cËF`q¿ya4›$§<ÒI)©u£2Œë%JÕc¨0™Cà€l\‘>^Í·jKަ(A„Ü{>RÍ{iW‡-*¦|UMcÊ€‰IŒƒO `U¡ƒ8|ü¬SMªßÐXn“°³“~Ñɦ–ÏWj¤,2‰e¸Î<£õÐvj ÓÙÞ¯öu¦žÇqeÖ ‡Uo`û‘)'7|Li­ ·ÂÒ*>1‡¿Hû}ºT&–mê„)(aÒä\p<=8Ò oˆæL»ávJ¦ŸÄ1YìÒÞŒìä˜ìøŸý2Çoçê?Ø45 VLËn£–û× azˆ/%ÁµôxI£t‰Uàè%®Ú`_;‹@6 l&”Ûºø‚øÞ°@”O4íÖïÞ˜•8§× b Ò ÷œë ¾QBLг‹žêÿ,IbÝjóûèÇôo—}zzÒ|Ð=våj#@rq!Ý_¬o­+q­4ðîDÀˆõá×ì?b/RQz‹">?—¦È o÷BDs»þ¥TŽ/&B^ßÛ^³'¡n`Hü¤?¦£µb²¡.þß¾N”ôÈØ±{ðÃzkûá2P& È«ú€°tš òîfà]zÏii}ŒŸS°ta”’IïɆÕVÅãHç£JR‡-üfÕ…®1€5©^j &.Ê”Ìa¥&O¥½©Q¨ªZ·DŽ6<7 þܘ?3’¸6P»õ Øéo~Æã›‘äã\Â:ú¥ù¸Ò+\w™M’ùJ„©+j¡Ö:¿@ûbÜkÂ%BS†u¹]Œò¶Éœ¸†8 II9;ðn€›kŠWì‹"mLî óLº£\㔃=½>{‰2ÜË(ÚHjYë›yæVBVà°ˆ{u—"§´€Ž/¸Y¾nÛ|»Ó\­]˜ÿåÐ_j%¹&aoÏlܘŽQH¤64Ó²±ƒ_F_¾.8²l(ÓØÅø(Iêmã¶ä22±c°FV0z~ݳU¤n?ÂÒ\˜1F”Jj~äÓXóã†Fþ‹:d ·7Ð$ŒVLÇ\M~ÁÇ#³0d>éË)rš©³6”•IAÉþ¯Kï—ø‚¼k}ØÅ8–湊éÏZ³,›ÚÚ¾p^ÁÔQ_ H| &DyšºQY“Ç>ÓJMër7÷ŒÍ>>W$D9NÙ®˜ô±ã‘ß6”V=]I$•øÇ$š$ÂBŸ}±Ä¤1´¢±èܾ(E|ç´$^:z ‡®­Ï–ôu}[Ë׈ÇzŸ³hkÛÉ'Fxø>ùdhŨʃ¤l{æ&c»­½Å[ ¾mÁÞW5 Ð&0”ºWÁUž;†¢`ü{? ­­¥¹ûVš(#WõÏÔÎà+1¬`W7dÝþ´4Çò¹^È϶:£[eQBçq;ïGÒFRî5™ç?Ó’8øæˆ5DÑȧ—;CÜ" R¢®×ó0x‰¢"¨0…uÅ¢¢)°i+i²ö±x\¼¢«ˆø–`ÁÄf«£ìvöâà•ÆDNé]ôEà–W™ÑÑ2[$Ž ,ô òYî6$Ÿ:2¸d–Dy¢ª'’µ[·B.„~Pcfõ±[Ážd'IgPе5;d(«ºÇþâÓ!ÉÆÞ?è£GIŽ_Wñ•ÍÑàåN} £Èøþ#_G>48(í3QOñmn_ØL®ˆáhÐÁm­d À˜­Kb‰Ë^9hõÓÚK([t›*W$¤37¹öÍü}˜þpÜÛ˱ÍíAª$Šœ7>,"¿WnÕX¿é…Õ3ô^Xí„óGôòMœIÏŠISªèùNÈ™òÆ9Rƒ„µ&ÿߢ02ý±ÌÝ¢*õ(ŽñÏ’•»wÿTðÌÊÂxºÍÔ©„ì¹o0Å3üHt½;ŠP¶)šþÏ$*tz’®Üì>³„xœ¡ ÿº™4¶ø~O[A¦®£¦E˜DzÇÝö0†SöIz±3㪅UÍ›µ­\\Ô¢ô„7[`0:Ÿ(JC7Âïªv`µò½a¥« È+µ‚Î*ü4W~¸‚»‘ÛúÖý¼åuªcV•&µ;Òÿ»þÓ8çHHöJjG‘T*iôpû˜ÃíƒBðêîWüêldl­ˆãârEʃª’­¥¹ÞMO;‡“™}[€A©™] Š*c`a‹Ÿõ~€•m?°@.òiY¬Ëý±~¥„ºWÅP÷‹œ07‡mF6VœÕ”þ2°äá"’ ¯yd¼1£âNT7sî3s´svzJì15Å;L±5¿äº2´¨T®¿„Èzë¨È!£o£ãùiù­ Cz¸OSZígJð\GtuªÍC¬·êÄŠ;${âøØ,¢—á?cA¨¹ú«ûÜhÆë]¢-r8|ëàaeÆ:¾ÙÌ’·jË·x£ìvA¸x½vëÒx,“ë«RQHØ>é;sK¹KQ7ëY^jN¥žQšIT1& B¬¼bQà[ÝúšÕß³`c®mË+W+ŽV~$oÿeмáÂ…œålB$ûS_±ulqɵïwé‚_Ì~ƒõÏ!ñ8¥  "@ùº,5I~VõS¨vr¾ò‘BÇÇÄÇ_•ï£xºÊûAÀ›AîÚËÜ@ë¹B³®+ÓÙ&Û«‘ncÑ↠S³Äc¤äYU$GE’à˜y7©@ ÝÝÓ©ˆòàŒÁA(5ÓÔb§ÞõJOÚ zYh—…6–(Lù §”¶VäÅþ•E nÕ»~p®lMí9<ñtN+ÁIÍ®½œK:Özf¯ ÐSdeðgupLs­Éû-;ˆÞ¿D䋆õ]S*ß3ÝWg´î¶‰ĪGi¢¡Ëü¹EnšP~W`˜(’äRÔ¦#®|‹ÜFèÆfí€sð¬‚yh¢]Z¶®Káâ¸ýˆ¾%@e!Ôæ <â@îñ’úêž8R)fiùwÐ’×Nn¿!“!É Ä´—¾E/šº•sóraßLžèüÙºG¢©ÎÚæst¾ù]”Ž+Ñ¿gXv÷Šk™2é$î#o bÖ"Ú ´çÛÙjm º¡åe?Æ•¬3VW?<ÇÔJþ+¶ÃȤƒKyäC‘A?Bÿ9¿ 󒙵݀ >O…“Kêoüö^{x(0=>Ù5Sd7wR j þõŽ¿åDÐa1ÓK±Ð¸^·Yeηû‹ñOÍGÙ#Šá݈›èB3ÌSÿH¸'Õ Ò­3ƒÁÍR ÙqÄ~€&tGí$Ë4nŠHFm`®¸b03SÓ Ö<éeu=]Íñj"Oe€U€ôëÿ‡¹ˆüìâ A#·ºzçJçFbp»TO†ñ7ÍEý0¢p1ÎBWZŽXÿ{é]oD× ·oIoÚ :YÏÄÅÎ Æ—^×VYm‹&ÞØ:>¤¡2§Z%XÆ/0"jzdÉ¿0­~rX}ä=\nf@ÅÇ–<«05ðóU€gºµaf|èÍ( „·ÖÿPjûþ˜Fë¦Á—,ÃÁ¹-Pö±ðÑè[®¶7b=ØÝ…æ\jEmîoHð…ï)'¨³Ä0N:è¾-2Â2ŸšPص‰éWYg_»¨„G‚ ÷; Ï…Ôàù L›³7«ì4Mî¬ÈíQÙ:…[c óÐðw‰¬ Ä9A‹Žó X6J™÷dB ~1~Œ'Ë0KM’%ÐpNÑ?ôªiIøER0ž²#÷&öê-(Áv` Öï$Ä)–ã mž³=wKg>ØÅ–™Ž—’úlSZœ²Ëø¥ü; ´ß'bþŒÎÀ¡Õ± ± =!µÉ“Y/((­ŠKžÆØ‘kûkµµ“®Â÷_Ôó×l ›†§•ò{ Ø(^ø†3üÏ:ðõý!7swÙããa>oK-jÏÝ@\AÙ½ÂkEô¤þyêÆ3’SkGLØI(‚6±þ¶ïM—s­iÉÈ-—h°ì9@ö–¬eÏø¨¥ŸÛ΂ôÔi{ç+{ÕfŸ¨¿ìŸu&Tiå{ФT¥N{7tâ‹«Y]Ã,ŽftJ[ÛômÛ ëvx\Ã_6”fÞÀÏÆŽX5з·û^äßåÖ-=J“‘馷SÃÙ çJ~þfʶÿýÊ’÷Ä"®8ÚâÉ1/âüt:©ä/×”J«©Ñ_ú£†$?;š"ÿ†ùŒœã´¨9”<’¦1ËÅô“ž2 hçòè¶+h*æðˆ)€ ;"¡ù\$%ßB¨œv¯×Y-~uG¼[mw²³ÊœÑguû3gu@Ýv{Í4;0.E-õV#dçÌÇÈ›py¢°Ú¯>fíÍ-[+he™°²ªúž[Š·£<+ ÔÒr½~Ï_ðÉøÈ‡§œÜÝÚ ±¢_SÕˆKÏô§“¦¢ø9²,WTŽª–}<)„£zßR¿ÛIk*˜½8h$ æ(H ÓEºˆ¬Æ—wwÐršV©§ù¨)—GrÃK$lbâÓa²()Ü«„ujW% Wy?³k¼#V8ànêÉ%Œ5Yôà ,0dCt¼.ñ ¶¨–)ǯm[´Õ÷;/WŠbœ[•…M{”-wœ%g(s›Š‚BK NÎ#S“ŽŽêEžèÌTž^2D£E0©ˆ %š 5mH5|5ŽÚÁ£lÐW¥–¦q,Ô[ YUý7®R¦ø¼†ª•Ù0ˆ¸£ÓM"=öè‚ô/ž+cY±MÞŠmõ¬æ€-ßM„j[Ë–c÷×ÖÁóxÑ=\P u·ä´iÊ–°4ºâ-úÄzý(­Šóþi$æ¤H„ÚÈ™à02M X.“‹·ê[†›W“ç¢gz°Aà°ðö°Ø‹÷©˜î<ãX¯?ºóOn&Œäá"§V#MKÇþ¬(~G¸R6„šXh²*†“¹Ï'`Sá(å·*{Ý75ýRʤ‚a `EØø$r‰&53ÆV [½&ÔÏ[¹d€…"/…iõªàSûG8ßÀ<&än<š‹§ŽÐã øKUÎP·^É}bª,ïmF¸ÈÅn±JËN«4¼‹¬_|–<üN·Æ€ÏQÓ¥ûð á°¿\r0'-~£¿Ÿ‘¢ïkæ"vR²÷Éé2¼ÖmYÔ1ƒcÙЇ “Ë}h[oG &¾éÎÎ/ä˜iF!7^•óHާ$«/=‰]!#Œ\æèÓ¹û\f¯ï{Ì¿8Ó=N£ï%®ŒJ â͙ڊˆºÜUû›J£ßrÁ“cÙ*ÒÀžÓìÅK½%îø„ÿµYn«ñ¹KP^*Ïã¾JJG<Ó¾Møœ0:ǃæÓê\³‚{ÀÜ೸N!¶Êc'±8Ø¿¬}-C<%\æÑ-mñ_nõï‹¡­ô=Ml§Ü˜’ wpÙ;g*ç/2‘¤ø:VÓ‹ºÆ®iä:?@£bÕ…ãÕãv’BÁqƆHMPã‰Ê»ØŒ¾MÿׇÑ'±gMÔ FÌrQºzv4K¾þè ¹ ÒŠè6Ÿ¿³§€$#öyQïMµ²ŒN¾Aæ—ÖÖ±ƒñu,’1¸EËšÕb3F¢Dï¾ÓŽK‰g ²Z)É^P{Ò{ûZæ-šDoÌ”ù&7‰¤©•¾eÃXâl"wnæÃ,|º ðŽµ¼„¯i nšZo:Q_ç$'gÑíƒUß´fðÿD‰/ÒÑ ØÚ¿ôoÕ—ž4ëÁlc&í|áÍŽ€( O“^U¹xâfÐ¥y~åó<†6!Ëf¢ÞßvHÁ¥’`è.çvÃøU”úµÃ–ˆr ?5ñ.'¹Nf½ âV’› !¬|/«+‚ô)a;ÐÌÄ€ñoþŠøÊïT¢Gç܆¦Ws®ú ãPç­®~!”ú5‹¾Ý5.dèÞÉ ÛAð„¥K@´^=å©Ä³ðfoµð.ð¥9ÂM !Weê'ó´?˔̫Ÿ™² ž Üì}úª×ÆZ¦j.N'6*`Ø<ïð_îú¼ ý÷·„*u+‡a¿óΑMTL¸&ÚÞûýª&5¼àÒG$š5þ0úÎ å_à•Mé-VT~mEÈ?)õ\‰@åÔ€]3Ëå‘YÃ~iÔ3hö‹‡¸ ë›Ï ³ÊÍ–¾SìmB`}©$ÿº0yü| îºÅm8®Œ^{Ÿ“êyUÕö“~ƒtVIŒ£³ï˜ŒZº×4w9€@Šnç©è(wdrÑs•Ôýu¦(6÷ûüG©’È ¢Ç„/Êí.7ãU?í» ¾†n¢zËc<šP!ŠØ¡&x–¤ƒi³þÌÇhXžøÒC†öýóU…4†Éœàk"Ï|èPwgâù¬]PˆeA:´œ;±#3sOkïë}PhpµÐTHîÂz<ßË;˜—Òúˆ¥5_0W!áÃó§rEot_æåW‡.‡¼³™Qæƒ\w5.õ1Ç_Yƒ¾{|ì¦Z†€»¢C© ·-‘K›D<¡Àe˜Í+úêó7'¿Øm=EáâõâxÁ¸ÍÁ©HVæ fß8Ž!ŸK]±cÙò»q^n^rÈÍæÕq´=ÜE«îšNàå¥,ÀpÒj„êY­E²§=¿?>íË«Àá qÿÿêfÆ^·¢ró+vßDEšà˜žœ6üosKÈZCƒó€Çp­¢nÝuTÐF—ÓM…‘å÷…Åà☤äLþÐÁðÖ5Ù%í.ÜNo®«‡™ü O…¸\Ðm'Ãl¹9¡DU‡“Ù}g£@gtyjò‰ÛlÙ šZ£Íhpí=ˆ’+Äc³ÉX µo3浉 uɃº®öè’<%†gýAÉØfA¸"#o“ KÕÌ;2ã`ezX„á_Ë›&Œ–tw€8#ùgf‰<,*[¸{ñ´vfXÔ\Û¢™Ô¦›¿~l°£HšÓGERå¢ý Ú-ÚýåY'ݰ‡«Ñ×'åxL˜6–*â- ²40Q–ò+~J^Ž8'wÕ¼BéwÂOÊŽ_ÍKÇGR_£‘ÞS²”7nÓÒmÇÔJ»ÝpàIù•öÂ@Èðæq´z…íÝCv(‚@ÑØü±mÛ¶mÛ¶mÛ¶mÛ¶mÛIz=«Sow /‡CŸ‚1"v.êˆ[Jý›jäÇƲæ›zÔ¨ía˜°0ŽÛ¼‡ÙÖZçÒ>‹uíÝHƒ`겟ŸöªÉ2ñ‡ÌŽL3p*åGF!U+|9×­Ão<Ùö3ƒ‰“r¼îŠ4àuÚS:X-¼£úêYç|ˆ¹Ua™bÖÛ:QæERćÿú¼±¸ÒF¶IS° ß·~…ˆ› Ò w²Ê¥ŸÉ•mñ“[ljnéߦ,ív-ÓÅW6«b#~A&ðž?<óRÕX9‹oô"r=D&¾,ÒKŸ5ô`¡ê_Äø }¼ªÎ©Þ$×Yz®"509ô ‹¼«©¢7»§Ö<^™ÅŒ°0/‹¼JÀDQ ]L\Ñó\'’ÚúqÞ;ògçò†›Ënsô€tî†è†µ$o%ÇÈXÑ÷|‚L—ö?—G¹"j4ˆA<ÆN/»Â'ûø%†Ôžd—‘(I§-¤½CQ傇±&Ý–ƒ£"{QÌ´l¨C×*Zeû{“pŽ_˜k&ÓÛ‹ýGëÖ˜FŽì[µ÷½-I;]‰«Ã¨%£O#ÈæTIy¦Öµ@{hÌá¯(8c'OëKõå©Â°+“-ö·hÍM€«J–f¸Äïr’Û#EÔÇ `b}s§ùZñëA|sÑÈkôU±ÒÍœƒ¸yoHütê%@¹bѰ’ZVÐPYª_¢#UÜIž4U¡€vÑúšuþ-¹ÄÑ8Ó&Š•žÌ2KèžÆøçÕE{~Û-U YQÆN{th¸= Ö‰0|¨oŸ©~V¥¬ØBQ$Ö~2ãzŸ)U”†ÂVãâf`[èá¹þ¿­ÇhèõAÑ8®kMIöì}ÄÑl<ÿ¡¾6x#_â]蝹@)Óh×P¶äaɶéB*2wOf…yé…5ƒB Ð3õ¸§&Û¾¡1†3t†õ˜h>'(º[NŠ7ÿn©ò%ý·œBüàM" ·Ã§è­¼ÚâpMç¦Q ôo\ó'VA¿Q[Ø]ãQ?®“ìt¨J=m÷†,$üëì‘Ôkd"p1êì$?<èö› ôtóƒr÷ÄÈ4äyÚáA6ËH2z„aÉ>þ»øJr†ŽOèü-%œÏûog˦°ïóò+eó®ºÆÎÁÙM•ƒüó-’$æ]êSãûîBK*üOaïQ⬗ïäqõÌλՒ[~¯mCeÈ% œÁ,âÊ'ýЙ¿z{Ú3È ÆZœÙ÷HIŽœnýTàpÓ‹1^9.óC„‰RXv‘¿CaÎ-É•ó>£OæåUÔ³™õú£ª-d•iMF÷ŒŠ8]G›8¸ôðŠŒew„1ó9)¶ôü©­À­îÛĘÿvÌÍ íŽkÒÌ3;ÜΪG çxˆÈÖ_¨,b”²qöUÕ¿B‹µ.®¨jBöÍ“KQBl A?é’Sw†ÂhÛ•‘ ¼-¤úŸ b•ü¼ š[I¸¾*%Q,¸ ¡ì¯û¾s´¥@¢gžS\Œ™ËmT£:ú¨ŒÙ‰Bú„æ#ªj+µ²6D‡ ²ýÔvLòÂ èš µ’WWG:‘Fôr^ST&ÚþYÛ=ktŠzSÌ<Í–^ Tê¢bJ~¾ÂrÌã\XÞ§&ÿhس©',iöS@dåXpÙ_D£j^Ìÿˆzí–vCnܤYñ–ÃÜKë¯âöÛd¤gnÒ’ö挔Î2.’æßÔÊÓ>:Þl…Ïù5=& Žhܾó뺫ˆ…‰,-Ga® É\½<ÄÿuW{XSù£9ZàëKa_7á “£{øð#Æ<âeTMìÊýüð•vN‹¨ÏDÌ´ƒºi=JÇÙ´R#ívÇ@\Ê‚h¬+oúìq{\˜c!c%Gs‡Ö]CLŒ6eøÎ ‘ÀÈøcÜÕ`šÙáŽÌ&SŽ#ÕÞ±¥Œæœ¸!¿QÆom=¼1`n‹÷`žoó°Õ¶˜à'Möþn£Zã5lÃ.Ê:ÝBì‚´LtúÓÏ-&1!oßU1 5ñžÉ‘:u'þSþ8Xoà° LÀ$:Zv™“¬J»ñQwÏV– Î,*p>‹#xòÆ9¨aôÒš™¸ÌÐʃØu/ œž¢î›ôH'Õ݉™SÖì7¶uCdïPB/¹ÛƧŽ7çL2讪 ÃÃ5ÓEÖï»ÆŒÍÎ1êtUt^~²Œ‚æ©1ïù@Ô*ï"œÿªÔ¿}ó&¥N¤€=?6}oȔǑҼÅlò"?^t; §è•p 4 —i„lø=“¬;º§>yò“ë´;m`&";ëÆêoNj>("UÎN޲kæõï‰FЗÏz±÷È^ÆÏ”n„ó÷ó"3<ÄI¯lè1:PD‡‡í8þ92IE.à†l9àÞr§ÞÑeÌßy‚§v'Ã6L»õð¶Å(‰å•ßÇΓD—胹½¼À3Žª×÷–òA( `»<Î&ÌØãèBHÝÙÞ-. !±*qÊpkF¼"²|º²¦ÿä3qGtCöÚ;oš&7T³Zl›&Šùç’hj“@/)©¨‡Ÿ\D PîEÐ@axoTAiý«ãIXeû]Çi+Mˆ8wèð£D-¿Oì1rìàtí¸[™Êk¥QÕœ-ƒ§Fm'„aÒqHà90(½Ø·Ž uàsahTêmEHmÛ•´TÅ"42¼ÀêF4°Ïg %oÚèªÚ7Dx°6Ëáɯ%t$6…$¸À~ª½RÌá<Ï;ä¢çÙŸ8’Ç8Ék5'C]±I¯e·¸¸pž5Î_¤,¯@ æSɦ³Áµ½my{~¶Ý§ØÕøÈ©ePj°‘ðìbò°kx‘áJ×gÝ󟵖]ì<µâ"ÝçãÈ/ÚäÍ>– u($ñuˆð]ùBò Ò"í<Á‘!ÒÞæ½|^wªÙ?¬c%˜–ÔûF‡|0QÒmóØ™ÍpDfñ(4¢RÁ§Õ K7ùÞ+`ˆXÉn‚¨CúXýˆzMD²wì!T"Ö§¨§wÐsñ ~'[ÔÏÀj(‹j¶oèCŽÚå­±ú¸Á «è)ƒgRW<]êâó«}ŽkcìjŒ1§Ì‡"9<ÊuÿpËSM„çÀݘê°ãôZ\1[íÌ6€¬ÂÚofpûX€G›ˆ;¥.MØ©thA"‹$óØ `«?÷Þôm¶¾œ¾×&AŒä¼ Ñ“AÓ·uÖ -ZMWáÙ\×ô7Ð陉’Š„ ¹Ux.›~/£ÝÊ3†ÚûÅ ¶©äi>pÄýÐê@r¤œ¾iâ7¸2|dÀ )Å—œOmKe`+Þå_=øÐñE÷,`p5í0,4yRE\€…ta<—„δ1Ø~N”‚c±»&ž%Ñx±®³—šÀ‘GAí—ñÚ/~G› ”&Ì“`Ãß{x&°.(/ÅÒ¸ Q*'óc‰ì³Yæã…Æ-5ì»u"ƒ…ÞN—Ò`C4MyDzÍmwmVñÃÓˆ)™]hªƒh&b°ê‘7OB<Œ »‰öJvÂæxýœÁR´ër¨!¯~’,…£:®Rð,Ôµ¤þGtС»&Äòx#]’ˆp•5«‰Sù˯Ræï瑲HÜêk¨‹¹qç–n^øQ#šäÉo°Äºà¢Æ”ÒæS ç87RÃ•Ž™1ÎIЂôsSõ‘þÔ”ó™…oexbÅ)rŸcê F„>Jij-s‡E¾«ñ=ÅÜ(+95yã{~T F0º}ü@0 ÄK8RtÇàôwjlT¨£e­á¥ñYÝx Óp*òÉBqÅí²#œzÞ™î(ܺ­Žk ~s%ÍÙkÁTR+Źá`a!¾,  ¯óE²<·”?+=hNÝÊ»´ªb²c5Ø—¤lª‹.[~”sC¹å ÛšÔæ.)9ŸÑ¼™^³;ÒἌKZ 6®[ñÝë§N¿N>¥³¿T¹vf œEëØHÀßÒB(n0ÈÔ ø-”ÒK(Ý,¸ ö/ÔqÌ~S>´;n÷Ïsòs_ÁF”N†ž_ s;XÎt“¡vÙÎXê¹ùÔ* ྇£wó-ù’!|ª{ ½¦ndB71ú„°âVÔ_&},¿K)rôîw`O8à#Á½àŸŠO„Ó"jˆý93Ú|U¾´‡˜örNÙÅ’mŸAúvBӭ蓎!Q V²ñP&’Ñ 8\Üqûô}ˆU³X‘¡Ýl錓èE–°¬8s%©lÚ¤’Ql÷ý‘òŸa™‹¿b”}Ó'¾YÈG(öœOÈ÷=®”Í¢ÉÇÎdK?Y}Z´…qÌWM¦%p  äšC›^P^ü=\ ˜*ï‡MÁ ¯š4¤•²…R§L]©ëŸpq…Þ×nQ¥±M9þæÙ$=Â3<¥?+ÑžQ„ lY%ÁUˆ–¾èk-º×s%;’Ž:¹×-žÇº±¯-£(ka5›?ÆÜ™¿«Î^wÝR¯WiÊŽPá›ÙðÏ…¹y]¼ ¿ Ž”Õ-UÛŒ„ ÍÎ@„Œ\PhšZRù% Æ_iô>6ÛzqZO°Ý·ýwèØe)ÀàäMtßSÀ;Ž©ƒÞèÓ àŽ$#g•ð({í\øÌ ©ÈÏÄO_â,ëåP€à®^gù—l¿ÁUì/¡Rh–‡iˆ6^,p÷a]—¦M8”îèèUæM¢žòý E?Èì€ÇæÂ O$÷‡µüC©ÿÞj0Yj®gÁ”Ùs¸f(ÒþRŠÄ 0Qµ!…QX¢+:¿è˜‚Á{q!{*KVŒ¶2t5ïZÍ+2ˆ'Ú¡Ÿ—c;5»~¼ú%?›ì‘^#ëü¡´3¤Ð“`>(Õ}£(¬5ÌÈ`Tå7§¹e µS=W÷I/Jçþ{…©]‡¾¹¯o$š`qã·[y´dh±f GU¬dž/ÂÓ?–_NÌ …µŸp7Ͼ®Â°cZÄ'Küãà¡¯Ž‹K)$GB{•þá§4¯ScpœÖ¶ª‘ù%y&›¶{óC9Ü<›Ì»;†Ò¸øÍ€¦Ù•wæ„BÍW} ì¶axJÉhµð°{¾‹†¢ F‰ù #¾Ä¥]”y‡“£ä8Ö¡›\Øxª¼¡ä$äÊVÙZ÷>ƒ° /xøç,ÆÜÄiïóV}¯ç¼&"¢9¾Î”EûM€Á÷|„ Ñêçâ¨Q²DïJ¯è„¥œ7–&ù¨;ÄdZs‰ÙZèbq5oÆþ{†-R):”† íyì¢dÿea-~´¾ð6ÔS# Ð3ŸÔÍIãbÍ,En`U$ñ•ë±ÞP@Ž 0|ñ®×e÷é×§³àŸ2®*zjÃl·¶lÚÎkR¶Í+…Ò·ÒâTñ0:!±ä$Ή‚5û»_pto°!¦P‰·åñPûøïm÷gôIÜžEýÁZäZ(±mn G[vÁ[Ì>uv.ö,4| \–>ë¢eÒ!%V{UÙ%«4plÈðºà0Éú«úAŒúHšQÇ%‹êÑÆ,­Ê…Ø­1 òš!âï4þ]ô»0ÇÏTÕtM-Ë7s24úg¬&ñ 3‹Œ(Ë›,Àø™ ÌObl¼“sx t7è\»Ñí)N7sÒ.¾}]¯–Q“¶É%æ˜*¶u†ÓCtøW¯ªôññ™¡|éà­´ÛºƒÂ«ˆ Ä•Í °-Jû%ügÈÅyÊîT¿t~D®9>ôK9T²¢ØÏŒ”‰BGvñ/Óõ½²{xÔQîBLÖû´.V;sŽ~ò}Ñú§ÀR7³íª*·‚¹òjhAWïúik¿²´‹Ý)•—• Euøc!#v&;³½õ<ÚQÃú hètÜ!k$¹Ä‘þìS÷£-„0)NŸðu @–¼VᲩ?ãæ¸ÊÆ©/f¥ø¯+|5±íIJeJÀÚ—Ó$±ÌcŽzž>ðÖ˜‡„}?é:±Æa:#´Ñóˆ' v "ƒääJº|e·‡öÝÇiXF1/š¶´¾¿QÖÝêrµUdªõ;õpÙÚi—ÝÝeŦµ›ÊÝ&gý`›;Šš60v±àuó,úì{æ–H ¾"ô\W% ¡¼ý&Æj#þ8:½þùaQF:°/R¬QÚ»j`ɇôZɳʊMa'0 +¿á—Œsà K>Úd¼cÔ`ÙÖ°Äi¬æ¢ôU\Ge“,ì,o?™oc±LH®˜Œûòÿ¢u<Aá90\«}Vôx‘ó*¼Á”®È¦Oà×>5Б㙬÷nxXùDôN±GÆ\³ùù¡„RסP쥕 ðSÏcÑD¦ž3~4ø¯Â«»FÔMöê¾â>\t$+ù@+Z¢CéTèYaQ ¥+ aÕñh][Çw „#úÁ-ÒšdTI ’q\ÇMÐ ¯N·§™]™L:ç«-¥|_%˜cÃ>9Tö>:03y8-(­ fºb™’â˜Ë 1ò:98¡»cÙ•1®æ4ó9BÒíòJ]ˆ¨„þ«%–Þ®/ #p@“\Ñ ¶Ê'k ³MRÆÊUÉóÎrÜœt¶{¨Ì¯ò™(æ $ŸŽ<Òhø)^BVzþû®ú‚ê %!vˆqÜ¢b&?†Ë©`6£rMsë!%ÏÁn'™d/»¿’…›¦ÔãŽ9I~زMA…-à4Ä8AWNÉ\±ÚQ¡ÑÀFÌìníšÞK%NËÞ–Œ!z P "u{ï÷Þé+krŠh¹ó6…Ã.ý(Ý`O¬d  zle±*ú¤d¿Àñùº4“çç)ô¾”Ï×2‚8Læ4nyq_­D|Lùz%EpIG¤æ{1õ=fZ1?·ãÌ™/üÊ Ý´zGnññÉ@ðÄw0IZÏn¦Ô‡ ˜¯`=¶-Y‚Àn†‡æ “vûï/T_$Ÿ5ï) ™ïÅ—Þ&£z§u›>)2¾'Ê&ÛÓŸÊj(±v}½»®”Aûç|œu·ˆ­J5° 2d€o%¥i‘lmFj3‹ùýjbwO&r‹þ¶RuMì%Š•çÑ­º ãd™•9SUW)С–…hPJÏ%r§Äôï˳Þå` «éÕý¨úü°a¾+ÞNŸß×Ìê`sÈrÔ«ã¾XÛ”À†>HЮÏÈ óƒ[¿@4±oè.öM÷†»z;”Ï Ó«gVp WOzœ·Ž#o 'Í›ms—Œ´í!Ú5æ&B~‚rÁ¡czŠÊÚU™e†ÿã‚¥«r³_P¨K™þh„$-yUÞoÛ}‘9ÑŸÂÝÒ"¼†ÚÃÁº±¾Ò¹ÉÂÒý"UÕîý¼{Ù{ ¦:Ë¿õ¥fò‚û1S ¬ÍÀ¸ZÀoËæñ„Ô‡‰ J /»™Y{D¤›u›ùص"Xikv2ýÍÅJ5.ïKMÉw 뮬…íQ¤N@ÿÄ“±/Q3÷M¡ÁH½UÜLrø†þÕ¸!’Î^¡{¡p_V³Û£?C½>ŠAÚ2-r +\ÍhCÎM©­à‘`ì話¤2uå!¶ïÑ S冓‚"'ÄÀšå¾ŠÎK"'ü`O¸qÓñ,C‡á—½šÿvs4™Ö$kÒmxúÏ'òƒ.XðÅ;nûõMy÷k$Ê™e ƒÐÚë£çxT¬g©áAЀ-Kˆü볎ÎÓŸ¹¯O^[ÏEz (ƒX6î¯AÙ:ÄËÙSGì2mÛÊ¿ý@ %{°ÃÎm}èÙDVƒœ1®]x´¶k8ŒÄ¯jpÎuIÏÛ­íÖ+Ÿ%¨’Ñ' ðA®TâÝ5 •Yú|œù(àæ©…9<ìGß[Èi!ì*”z¹Ú8¢È!jj‹[gú‚¢h|Þ©M:pûg­š[g(ÿ„/¶ûª˜ùÈC%ö<úc'aR#Nz³0™ïÌ&³–Â/Ô5±›òzGÓ1ÂP¢f…†;y õr€`HgUÿUÐÕ9б›&Jm©¨ËD†hÌX¢,×lL}£Wnù—ážmÉøÿþMÚ­<@¬ í<%ἇ-†‡—ÔdHÉ6tby½Û—iþfXœTß±ä.*T¼m—ð®{r“(ð‡]x¼!cžGàÖNv²ø;ømóó ©+o¤QAͯj6$ñ£EΧ,áöñÎn›4íx5ÅâžÚsš¡”]!ˆ,Î%õæ=ÝHaLl‘Ë7ý¹G\]Ä±Í º7óQ)· +ˆ`õ#QÙeÞ‹FÃó|üèþ¹¡þݰ/L«5n<÷FO^ßd½ò:ÿ¤\Nn`þt ÖqD.ö™µim2PZ™@˜ª=Ùà£l–VÀqÛ§§iŠö£ÑÄ &Ï­º^LîISt¯x˜‰9ÆžÁ©AέPFˆçü oOÅSÿ`“¤»4¾ž¨#¦÷ž¨5–Æqƒ»‡|eu_ü÷.¾d ÜÆA>ïùW‹`Z`hÂó= [iTôXŒÑŸÇt~-_eG¢&@•î§¼N­yh´ä5\{̹úrª¿¢"Ìyc]Ñ ¤a» ¾p(£`М†Ëî—:aExnIå™m¹|LŒ§{±¸Œ^ÿ´ãE` ¥æ}°6_Å(ºŒ‡ú±yžþÚ¬Ï0D‹¯ª%<|áoPeI£·¥NP³“<nK“4r·Cì´)ýHjß§ó›‡Rx|/Íí÷láÚŸÿì;»»½i)Øx¶FåÅ Y\Ÿ[ºaE\Dõ>6s¿fˆôã¾ÂÑ2CÒ|Q!ÛDãtµ;vm¦Ó VA©àĦ(Ìæ£o¾÷1&ºkfýé[ã9i?söÀc̹$æþŠT™*–2ˆ¸Aâ¿qHƒuX¡$|û&Ž×j8~çÈv°^•Ï£ªÃLDóW”uVì'›¡Tý¬e$©¶Os\nø§ W¡¥^Æ¿—¢YA ŸFÀ–&›•ò9o›ûÂΔ‡,”†@z3Ž"n:+ ôý@=nG"´ŒûÛË0¥éLçËß/kÖ¤ûµ}fúüÆ_¼(^žˆNFÑûä2çÑÂA#+rß2gðÚ‚èÕn¨ý#Åa¢ðš«˜Ct @]:U•;O'‹kHæ§/c<ã'~“¬fš{½ÎNÛ«ª|c©Qi!¤'7ÖzïÜË~UȲƒ7ú®¬Š‘4L98{ã+Ýâ[ ½6â /ìYbpçØìˆ ÁÙ£‰ÖuÒŽû1äÌn4ËÒ~¥½ùªr|•ü(à2-Gy[›þC®ÁÌÞY¨óÁßÙ/¿É/–¬Ü ¼VlÞbZk ¡¡õóŬËÍyÜaÃ{˜Œ¯'JVî^X™’Òot%8s&ÈÒU†[7BRiÛ!ÅïÂnZ [÷—Q~«ãÞÜ>üµ©â¾)u^ªaYLK/ÖƒÍFŸ:Ê^9²®åíf›E©Ñ®Ì6Ÿ´Â%=™¡Lz¦¬–²€ýŒ¯·È®MÈ‹UÒœ÷m…/«þ7ÊFíè4Gõg©á¤Ã…Xo´uIc…xŸ/ \Z¿áèzVãFþ#›qÅñœ ÌUQ0 òÛߦÇ:=åÙÖ¤Â@õQ#_RF¸á‚BO ’`oÓ—Æ>š! Møäõ 1©\sHÞ‚—ùórZª[›ý³Yô)ÏЛ]‘¦*ÁX‰¯n6è]4–þZèOôÄ @(%NñAXµYbÌËÚ4¥÷ç·714~ú µ„¾^ÐK–)vÜ '¤Ï¡9' :‡ëºwšéŽ;èÖÔÝÛ 0£z·ñ–ÛñEÀKA.ý¢\“Ö‚Ï­žÖÌvSÜà3,mšmáªmŽuȲâÍnGä{d å2D¥Èiˆ¥5ýL ­µe2õƒµf¯·“úÙ õ“ i-ý¤!S±V]Ìeºhqá{*Ô õ›y:&è"€1IMLÄžñü#¢ëŸ¸K—<*4W>žÙ¿C2G 'Fµ¦ w_QÚs™/+­sc;±VÍÑÍ~§®¸AÁŽxjøuJÖ­–P“ÙwޱߏúN’¶{#ê;ܧþKbNê0W5‰^™Á©¹ §6ÎáºT÷Í »äwO! ý2ºò/ñ +5"3Ž¥q $@.…v:2çI£ Ä€_÷,ö9Ì){Ô¨›ø%XÕVi¥ßÛ3 ÆÛnö /Ô˜íÂÌ1R‘-Š¿Ô2Ø®ÎTÊO‚•ßçí/]Tm ÔJ{ùâw£¥AŒA×Lù]‡À+¼]Ø+BmKóœ%H­ôv— C’tø°j@y0 ‘4˜gä2\í¤sH‡*:åäeÚ*#Âu˜¹²©èQ06‚ P¤¢ÃœHŠ †ƒZŒëݲ¬é¨w‘o=.m'°VÆrü`X&u¨nµ5GüK«šjÀŶÁ2 „t„ò¹h²]¥dñ=zöLáé©i)ÂÿiIF‹0H‚SO•Et³Uß÷p,™´ ¤2_FbFƒ-xqüô9ô¨™k¿Îš«,ѧÌúÚÝé©Ù¹Ñ!Ùê"Okª,˜¼î‚ýÆs›bÁØ€6dèärø2:X?7a©j Äú¼pãÂÖë:µ·uó>”†ájm ÜFé¥PB•ÈeÿIÞ£°æoÜ8{eH_1Ó­ŸlÍñ½ Âúʳ cJ‹~¶ºXþ0OˆŠ8¦®)Ø<«U¿A¨V,xìî5­&(ôš^[”›*$›ÍÈ g_0¼‚èh AŸ¦¬lzpc¬E–1CªFÀÿ6#´š¿&ªôªŠctY¿$û,>ÝÐ(Bá o+_P ·µ}ìœ €,Í\\]MÑ ‡HÛÞV;—–á'cð<‰˜Ó*Ì>îILÞÛôyzïÆøÆèñ ó†{ì?wŒL2AdF*¢Q¦ßÝ>ý:é@g9)ãFÜyÌcu8•ÜOtŠn)¢á†^RÛ a´O2ü‹…§ªânÕz·e¯ ôG‰ Ç¢Êplö¢õJ޶·ªÖ­ÉÈìõz.?—ªIptv,Š‡Ð®i>‰âd‘¢ñ¸^ž ÇñŠ‘á¾®ñ}“k ˜>á÷j‹& j;²ª•ÃþJ¯Õ-\”é– g ‹à’Nºw·V1Fi'b¦ç³j­òãÖ<——hmÄllŒBœiÈ{})|ÿ-û­ˆd8±¸˜äs á»×€¢üþJðFÌ¥ ^´úe“ —•æ«L¤MŒËªjø*ìMzes î­ø‹.'Ò@t£Ð0Y&y˜“yœVžÃ÷Õ2>¦+LeWÖÿñ„Å7Vp™U$` ¾È¶õ×˳ôKŸ¡W³ bQ…ܤ5òiåÑa3坯öËu+Ãx òÕE‘ÉÌW-ðC ¥èhŒÁ3¶Ú:á%Úá$w«KIÀo;‘(Ki‚ 4º¦“FWÙ&OÈdXæðCÁ§ï ˲ l¾D]véléÉ-íh5¤¸€Î‚ÔíIÂ[˜¶šŠ!€òyA©ùdGZTÆ5Œ$þíÙ¹¤¾êrm€þÞžG“¤'gªÒLò}M$IqK×M’6ˆ+èžEA#ðzúA#ÊÔL^fë”*»œÔîúµ1ÎÅV5ò>ÌŒ&´ª²ú ïGŽó‰â™†ª×™gzßsN%SèÄŒyR‡xt-?Ìæ4ÕB=Ö“¼æìÖÚÍÍ,ù¸Õh”þ‡ìEßYJy—ñý÷“´Ùø]H¤zŠL‡M¾_šË³L>õW¯ïTþ—ø‡ñ¥åžþÖ ¹Ýƒ‹j}„nb†ÜŸr²¸Ûäàƒ4ÝÕÏ)[v"sqùZühÇáøòÒæ^bú6ï&×ÓÊ}ú·a­ž~Öp¹D©(e¿\$€ÎBív¨¯á3’·ÕÐ÷­í±rþ.VSršæÆë—€íÇ=<×å̺_tå¼™ ‘Î 8»1Ø]t9o{*„Ï[;S‘ ¿Ir¸)=©k%Ù¹"0‹'Þ¾q¸M ÞžÞeTDxdZÖ稕z³E¿ÿøu©Yp[Õ3³H NxÉ*i/‘Ô«ÜûúÀu|æM‡^§wâÄÓü»\¤DlJÞÄJ>œúéK ˆÁ7ñÒ>Ö⥮ŽN+«ÁÈ­W¹µ¨#%Vñ¤udÿÚ7TÏ}WÚt\¿Dg) ÷QeÜB§=u”«O²3aÙÀ.k dío·Í«ØÈpôÓJÌ¿ÎV©V³Uí‡ÉÀ¡&³©n8­šypÞøu çíîh\YáFWDEšZW4’‰lK…W­ŠƒžRæ¥ÔôHÁcÕº§ÿpMeU™ÜF›š&vvˆf=–»Q$qIº§Ý‡%M#!µi™ù£X®g ¢K‹ðdËY„èЇ !ÌŸ$nù[Ó“–!{ëãÉ#§RûÚ(…hMåZ§'%T£¤2±yòñ½=Cîã»A‡³d YsÂлbæ›>š˜2qSd×ü{Ÿ+«è•AÕúIÑJ_öå‰pZLR—ÕŒ©@ƒ¸ä¥Z”Mƒ‰‹lï8ƒXq¼‹!NU:q–“òû{„©à9/qpÞN½ö©„«U>^,ËãåõNKwÔ.v$Ý ˆœ>†¼ÔFÈÇæÆ«5ô­`¤cW½-®¾Ü.Á*òº>endobj 8 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 333 408 500 500 833 778 180 333 333 500 564 250 564 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 600 500 600 333 500 444 1000 500 500 333 1000 556 333 889 600 600 600 600 333 333 444 444 350 500 1000 333 980 389 333 722 600 600 722 600 333 500 500 500 500 200 500 333 760 276 500 564 333 760 333 400 564 300 300 333 500 453 250 333 300 310 500 750 750 750 444 722 722 722 722 722 722 889 667 611 611 611 611 333 333 333 333 722 722 722 722 722 722 722 564 722 722 722 722 722 722 556 500 444 444 444 444 444 444 667 444 444 444 444 444 278 278 278 278 500 500 500 500 500 500 500 564 500 500 500 500 500 500 500 500]endobj 9 0 obj<>stream xÚ¬·c”$\³%\f—í,Û¶muÙ•eÛ6»ÐevÙ¶m«Ëî²íé÷yçÎïÎ÷kæþÈ\ybGìÀŽsÖJrb%UzaS{c „½ =3@ÍÒèL/íbdciøka‡#'u¹XÚÛ‰¹y@S€ÐÀÂ`æææ†#ˆÚ;x:Yš[¸¨ÔU4¨iiéþÓò/€±ç #-Íí¸mìlv.)þ¯U@€‹`fiˆ**iI+H¨$Ô’@; “‘ @ÉÕø_½ÈYšíœÔ3{'€Í¿{;S˵æÌð—KØ`pvšXþ z˜þÑ€N¶–ÎÎ,æNFv.gàb°´3±q5ýWíföÿäàdÿ×Ãö/ö—LÉÞÙÅÙÄÉÒÁð7«’˜Ä¿ët±0rùWngË¿0ÀÞ쯧©½‰ë¿ZúûKóu1²´s¸=\þ•Ë0µtv°1òü›û/™ƒ“å?e¸:[Ú™ÿgt' ¹‘“© ÐÙù/Í_îMç?ûüoÝ98Øxþmÿ×ÿªÁÒÅhcÆÇÌò7§‰ËßÜæ–vpŒÿÚi;3{3Ó¿í¦®ÿ¹þÕ¿v†úoF¦öv6žS £‚½Ëß”ªÿ;•þûDþoø¿EàÿyÿßÄý¯ýo—øÿõ>ÿWj W#Û¿ ðÏëP±·5²üûù?|l-m<ÿïÿê¦üw}*@sW#§ÿ ÿ›[ØÎü¯ôÌì ìÿ6[:KXzM•,]L,fF6Çô]ÝÎèdciü+ç?“üÄÄô_05 Kk»ÍýßÐÎô¿ÿW¡Jgüÿ<£ÿ`JåvQótþ'±†¼½éÿ:ü+RDÄÞàMÏÌÁ  gádú{ËþÞ3n6ßÿŸ,ÿ1ÿçYÞÈÅÉÒ ÃÄÀÄÄ øûýŸÿ<éýq;{Ó-ˆª‹‘éßú_†ÿÙ·¥£+PZìo·,LܬœÿXM\œþ üÏåÿÛþœÿÙy Ðhw »bXÐOwƒó²a™A2 £Ã~aõ‹=iÄVm¼C?™öiy3äÆL6Ò2Ë¥Ñi+7Îö…üqðâäf˜»q½,â‚fç‹–vËP'nŸBaÓL˜^‘xXfˆ¤ëÝGìeàîP‹–´À—ùz1¿˜YÞ^ʲ'ÅðK‰E9Û"ÐN¬qÇÅý'¿'u¶!Î'‚–Þ˜:lätàï•g•¯¬ /<<­K4‚KaMÈ|Û(TÛ¦¶¬XƒŠf(ÛÃtˆÄ©Kck¤2×ßMñƒà3¢½l®Ë6í–$?ËMâË;Dâ}²úi[‰xûͲÁÖŸæéë˶ ¤Ù¶Àã‚¶E¬%Y¾®jaáh ~¹ñWý64Øj |eÝ ºõøü-ñˆ\ÿ]­:à(µó ðÒáAmòyfÓÅaŠ-‚£#K(‚Åíädtè/£ôHm¾of IÊQCôÆß¥á“ê Ê[ •·?‘°Ý¼ÃŒ{³F´®Ë¢ÓnDѶŸ8u.^¨1·×Â(_5-/5È­¾Ø—¼uÝ·t×?Ä7cã^9~N>õ‡—u æþˆò·œvÇ…S2Êi¾ª÷„e0²8Aí¹2•QõÖ´ŸÔíA´J 鎚^û˜Ñc¼ØBò¢«Gxœr¯­èØÅ5Nq¼G6ñôIÁæ¯kã‡óÄ|±ØÙIßéã‡î¥T=­°¯oËBüËÑJ]qUhÄeÞ¯R8uÑ'½IÐmíóŽGO6™ªúبUýh½&¯¼ûBåÛ€Œz6{Ç,çɃîe¿i2ÀÝ ºñsŸ"ä0‡ ä§ø4HœfB$Óa&lhŸU=ö"§lú1º$ܰG\Qˆ À"T2kÚg]U°<`™üF«ß?L¸køƒÀÞÕ™EQ€oC]‚è?c$É~ÈÞìt®A5ì{<]Fܘ4»Àûƒ¬ø—Feç‚1å6aLÌM=zFNM¾ñM´ö±ôH™¥­œcM¦B‘$vGúmµ›:æ+x[ø÷–m7¸ÁÙ¶çPÚN󰔯¬Ÿ>¦õI9S¶Ø¡z;æ’õƒïʹÅÈç=ˆ‰ü3M¾,‰· ÷ò¬CÅMÝþJÀ|›šZ Ýóùó°HAÝ.a†?‚X³¶y4ÁÎ$Î/æjýÛ¸a;Àív:ÈÓFphàøqvå5ŠŒ¡ë ÎrÅax‘=ÚŽ}Ç^6'©Yºb5~/G¢ÀDÆDŸÊ¦…å`‡Er LÜS3µü}Uæ®×‚êÕë Âôî§:­"íO•Q¨š°€iÂJáü"­ÃÙ=o&Ķ„[)‰f°£døªÀ¶Èüû*{³k¿Xm‰ðKƒ ( ¢NgûßãJ3ov Ñáx) H|ÛZ•0¥iqD¤^ÜWSô´ß»û_PÌõÎ`]pøü—i‚S$³«^6• j¨Ì«m¨|1_ ¡kеïßLO¥C9-—” óÈdöuÄI=ôJjžÑÕÄ~ £®mvÀÞjë¤JiR¥pºÌSŒ5¼õœló/øj}È·ãU©–^IµÊƒé¦6ktìã@ hºcõç^Â)š–ýžußÙ¨îÐ-kL­ºÌØô‘Y¢0ä9$º1c¹}|kè@ª ßÑêsòhdB[ƒúÆ>OQt0A*Šú¶KwË Ö ]5™õôhMU\`÷S 4ÑÀ+ÐeoŸ=ñçÈ| À…U&D(€.”j4Ømø…_#ZòµåáZ5þKÍÑ„:†ø€.uò×äJõå‡Wû§¶KQþ¶TÇœÓäŸ)ZÃsb ƒ¥óü°Šâiûf~hQR&Ön#ü¨9û²_d7‚æFÀ®­Š.Ú¯f6ŽŸLˆÒF‚.ì-?5rö•WS×4Q¦Ä­1ÕqPK³Yœ³Á÷D¿¹O§Vº7Dv€ïû]Å×CWÖîn¢HJCð˜Ò›~T¾!fô¬¡bo똾.ÖË‘C@ÂEàçùMçóšQ:5{}¨¶}_ˆÏLa/¨ˆXg.­“£öÍÂRÌ=À3bœ„¤‡ésƒ¨]߃àÞóÌ®;²6ä…¹“!þ)GðJÀý3ÍN)^Ó½:Pð«eãJ¾Og 8o`o´Îå N‡³l© }¥±Û@±å“Kn@Jïe24Ö¤§ùÛ(tk,üs§T%ÍMäøÕ\Þ±>ˆsµ×Uþv+dõ~Eõq ü(W[‹$h¢Ë6¤R®œä”én[ÞºàÓ‰g~6¥HÌQ;ÉòB ,ÛoºåêÙ{UÔt ¾t­¾‰?ï›æd §[/b:ñÔíž/ÝK$ƪÕÈ_õŠZ½ Ñ‘ôR¹îö%A?!ØN±yüðSxn—@irEâ;Åúóx—1?Á´X¸S³ÁSR^/ýµElQ¸÷@Òj˜x8ö#M¿•Ó"+Anm*N¥ZØWTؠױϒŠÈ~ÜSxe’«6ûSŸoõ2õ]k¬snûÉð ?åUÐKIÅÑjݱwo꯶Cp 1:ôäxÏ3mö Öa5={(µÕV×ÝRÌ2 Ç‹Ï|ìîÆïài;šÐ&®`’åÒùñ¨Lšž{L‡åÚ}.¤%}ÞÝÁ5ßP‘Nq}<ð~ßœKѲEP ìOÁîTP=ŒXr¦ößÝ—¥ôkD‘˜ì*p ûj†NŠTÈ¡æ¤ðäâ ¥¢5?ŠB0¬ù1zó“mÜ Šˆ°K³dQVîHÈ<äæáYn»ÖùFÒíw÷;€lÌ%o=®ënR¬… ÄžõE¼¾O]΢Úííjˆ`+}ßuÊÔd| tGWc=õ×Z/54<¹NuÔ;ß³F|TÚ­nU%(;öaDð·?š7ªÁÝê>òr)_–xUå½DNåç¥uüÚ~4u=y=Í0ý™[}ÏÊy‰¾‡…Æ ƒ—’’g˜Dm¿0h¶çP‹aï¤mqÿM’ ³ 2dÌ„§^u½Z¨«%Ÿ€¶ ÅLŒ î´/T\IƘ?“KîQÀdˆwêã€=”vÆ™>½‰F§ŽÛ±yÆUì7©1BŠD‘ª+mB~(m¯vå¢üe…rĵ¨¿5•(º?g–:ôÕy68ØU~ñÁÐã+µÞ½ªÜrŽslœ?Àšž•–Ý;UΔ>ç&tÍ"V¾ËéVÖjÊŦ?7xæ Y®ß»`U¼ahФ-ÓéW$ý¶á‚}¼ÌÅ¡¬‹ˆþ ê¾rÙÃ?[N~LƒeEç[£f ]µ à´ ƒX¨íÚlˆß§ØXí’v«—yà&W]aåA üéò§;Ý­%„·à.:__Ș\{VwÅ›£íRû`0¾‹§i„륮Vö¢P‰¦ õOXª±œ2¨üäWTûνÑüÌ6{•I}Ìmx¾ Ÿ{…1~Ü´ý÷ƒ‰;_“ Å@˜Ÿ›\ t\<ÆÐO7lî…%0ÄíÖ?BÉMñ6³&rúUr¾œFÍh,¥ïð[å»"ÈGÚÓ‰†%½™.Z•±Ì¹Pwð[™½Ö©ga$b‚©;zÝøÛUg©À7oNû/vÜGôtú6TúÙÄE„²Gنņn©ul‘ÑÊbû<·fË¿@“ÃÜâwêÌŒ‡V„=º‹)Îq'ÅÂ?wLØ«Àè¹å‹·¼ø"¥ÍØÄsàFLÑ’q8¹I—¬æõK!ã”,;k 8åÀ—l.PP´Ÿ|›´Ã?  ‚¶†¢¿)®òT¼­¿·‘3N®ñÍ—õ%M ÒµÓÙÕÃ!‚p¼ó­î}ì‡ÀÒ£¤ª­ÉE C­(Ÿ¨bÇœq+—ϘÂòÂ%XA4‰=΃Ú‡­î’º‹Âó"ªU9ñ e…½×T”Ÿž¤Á@€{ÞcCµ ¬°ÀÙYƒ©ºŠïç©]¼UíŸH;A3o<Á‘ž/’e­þܪ9Ù}]qЋ}Ý-´Q‡¯†MÍjìÜtǸØÂ­7œ×`zöœ1/¹¯Ø¨‚ƒŠØÑ¬`ÙÃsŒŸà•n¥Œ ¼V댴L‚δt$éà¢x)iŠš\Ô#ºèPL1–­ *v£v…}ÊÍrwˆp˯ךvèÛcþ"H‰ûö{#Ot]§3¨þÒó2„W`¶H†Ü‘àéo÷îÝL¹óÆ<Î c_ˆ(¾;Ú»*õöC›Ú˜õvõÙ`ý2b ti·V7®*7§lƒˆ‘2_óàþ‡mœ¾ß n_%û„¯Fö¦¢ü{§S+íàÁÅæ‚îà&—{X@Fç/Ô\ý~©ä¯óµúE’ò5%#¢Þ[G~üpOE‘ï`ð·|º½0}¿X•ÑEí¦¯rª»WϲºsYzÏ*søµŽU|¡^ǘƒ¨îÀAXÞ¨}Çri)ž…±¾W7™³1ÒqËÔ7Œ±6qÀçÙT‚Þ'.Òm³ïïÑz”kSµÈõJ#§'$kj¹þ“I°ã´Eê{¾yQm[µwÔ4Qs0¿%à8yhÝÿ(98krEe“F+%vbîçò²4[W3Fm ²ìœ°ª¾A{KdDÄq—¡ãòAdÆ®¾îxμ†ˆyXºPp/ôOÉŽ I¬W§ºá=…†Wú½`0I’ð?Ø6OX{D•ÈÇ),L£7qÅìÔ$1o™@Ü~žýH?Cï(âLŠ·u9Œ2C`3†Vf9âj»e—’ËîŽß©Êa¯O)ÜÀ¡ý™lìlJ“&«#º­{¼m¯èfäœHÊÿñ ý™ Š ¤ÎwE$¸{OV‹åä®7œ<+owT8}„GièÃîïôæ_þ‚³°8¶i£0ÏÞàl‡53Jì‡D;›o[ l€%NÎ Æ`¶ò§›í–¤1v3¹µàÙE$/Ì2Ÿ"¡#Ììh<ø!+(ž ê»Ð…÷žq€ó.ŸÔ¤±"‹A°Ãf…Ìß»5έ­Ô¡)ÜŸ÷g__.¦ ?ƒß”Ó‹_É7¼4ø¡¥ÍkgøÌ@cîT²6Xž½âUôñÈ^`ÜꜞÔ0ñl©ßäýÚÇÂN²2«‰%¢Ž·Ž>\×M³©šµ?’qˆøèøiKïâOÓŸDò ËåLb™"{©í“©ñ³y¥°üG½£æˆÅÓÏáHœ·>3>וHÌö4¶'9L­¡Êçâ+€N‘© )·“¥¨Ã¡>ùªÿÅ?|(1ù› ²g{Êâ -È>ø³M¼êbKøí™-£úáÍÂ×âD ÜãÏêƒäÇ¿Ôý5*l!©™\5êr(!‰!É ø’¥s »BRŸ•ûL¿bœîûvåI8ò ³C‰ÏM|çɹ(”®Ü n³kß Ÿg‡Æ×íë -<ÈxÀ.´¬U+Øß—Tš”^ÉÙ8Ö (ýC)7%ŠÛI¿‰ø=…`g†»€Æ[®¦êªÁSÜŒåè—캥Ʊkgª²ñ5èôÕ5€Ø"Ëcª¨H¹úc¢¯¥êÝ5Øðf‡'Â( K°Ì‹r¨xÇ[¥J3̲øiì—#pLÁ„”€¤ÕÏ(”Ä](’yÃ%ô1&@òXÉïy9VƒÌAœ™œ÷uA‘ŒþIùòdmŸž˯ê¥÷σ£ÁÆ€{pŠ$V>’{âfâ„Ä e±É¸þ›nÌ8 ºô u`Ny¤Žpa)$äPŸu7¬¨‡rJsé— ‡<ãî7Ø/’”BdHT:ÞÄŽ±”àÞnÇ€úýíƒ5Ò4Æö',×З–×WÇH|ê{ß]KY¡0ð<¶þC½T„§ÌÁ¹“rÂrè–fo¸-[\Š qÌœ/œ¤ÉÍbÂïKBq•â’AAuúj6$ÙqtCT‘ð}Þ¯!§O—bx5šõeæj4QYùi± “ö¹i¹æ**œ¯VÄ]³I9y”²˜-,Z^søÇ‚Ü+Õsiݶ¶XDfª4ç  9QžªØ.±ÇÛÆèkòóåmE¶(2°&‡ pPôéÊ^ìâØ˜³¢<[‘… iß$¬ú#8Í<©B•ÌÓ†óØ¥évSgiýÒf¥{³-i?±›¤ùýØ¡ùR»h¸KÑÞ¥sÞ dºýxfFRÏ@KÝGÉ.·]úZ‹¨–²cV”a¦–°¸^õR9‰”?AúÊñö…#c=ÞÞ`‰Ä*¾?°¥Ñ_ag8¡ÚëÒ‚@éšc)‘‹ƒw|«‘¿Vùƒ\ã—¯[@¦ å”Ñ8ÖþyÚ‘ÏB¸ÿ©§VLDdíga2ÏFòL_ÒQ¾6!Ólè…âçkûæôv9eµu§q¬íê-ÅO¿ë%÷=eÏS»^þ"íEC[1‹iÄž1m Ùé´v¡ð7ïKBÍèÎKÄ„u+q°ÔûÍ™‘4…‚ß? B;!À4× ×Ë ›à1m‰âÁV"°O°›Îfø…þ¾™‡A°JÕµ¿s¼ à".‰Q <;ÅñVˆd<± ;W!ñßëTµ¡†³˜ÉÒ*?_+mO„ǪŒÈ‹Œ=ÁÉu¸]èNÓ/ $ÉúGmmÎ5¾ŽåÒ8 [™1çSGŒhiÞ¯Bvø »ÐÜF½iÒqÚ<‚Žox¤Ø'¹TA¹»±Ö'ŽÎˆr‹PA!–îƒ,è4—²ð8s=]åo–— D#“Û8K•FHjTÎ)ÿë´&!•‡}KòV ûyÃç…ˆ06Éw„8fÊfÖ¥©+ é ¥1Â7[}. au ^‡lL’mHÐ:PP‡±7Óöì8W% `,¯¤d,†Œ\VWó4àúdüÝ4²ƒ•9ɱŽVÆ‚¹õ$™åÍpÿa¤é.­/.ðñ+‰ ^¢0é‘ó«Ã‚þÞ& ?€.¤º8nEoºhnÏ‹k¸që^m›DH@$V¯Rü0µRÈ; £3‰°-±kê…hRä°ÃnL©t7ÅVL höEI”©ù®_{„”T¾ê¹ªjî²4<…B:Q$8±íVµÒè=y\ÔÃL[ȦաŒxg-´pñÿîi/*¢ì¿¢ž;mŽö¨"UQêV솣k–ãI‡ð©Ë§Lñ=. v?¡ðj–Ó9„Iz ¦â‰F¤a Ó5ïªTmn |u‘>3x °Ôà‘·§ˆ^v `#[ÕP«Hž7‚ME êy˜¸åít9ÌdåSç@]äîש‡±$Ô#löâ¶™—¤ŒB¦ÒûÍ]c#¿Ø—*»1ö‹â®~Ø.¡Ù‰©âA·+Rd¸"±KðGÎÓò}_jFõOöÖçà¯á޳ÈÎ*Œd¿I‚™b(oô¦'cœ¡DO3ÔØºŹ+xϘ“¯Ñ•¢k[ùˆ¡Uƶöïõ!óf3º ÁÒ-ÙùRȶèR²KI„² ABD]ÄøI.?! ç“õ¦†®¹!óp"AÚËx¯ÁÌ4.-O(· Ãߪ›ßn/5Cml^ÇÅΑÇ{44ÛräªNº™p^Y¬VŸ]™¿†û¬]ᨦ¡m[ØoG$”Ô•…€­é íNRÇf¸X³á{牦æàKÛïÖ%Ɇ˜ ³r(‡ðºÆzLÚò €V¸ïwjp^ĵÈBÿ‘o]ˆÑ€õÅã_þ{>>¯ø!vr1ö÷:ÂÝbŽ@›¶.Z ‚]XÛœ„6é<2Úby§Ï÷~ÊÀg.VIò»Ð?ÏtÖÒ~vLA 9Žô15j ‹KBˆ×—#uä½6V.‹Ë›—w¶Ötír6Ʊ&ĉÞéhs?óõ«l¶¥7 8à<) Ѭ‚žöÈQD07­º¡k[—dƒ1 ~[O#çîºg/œý `‹o< nE.Ûµª 6žN%IÀè²ËÜž&3]µ  BqÉÑÖÑT-÷Ît)ïòÓ:7gÊŸ?¬Ó$Ÿ_,Ãù½]lòMJ’œN †¾»Ï¥Üá÷€™Ù•‘ù:‡ª…Zß‚@ç»0ëâõq¨Á{‹y÷;°^ô~‰êÆ.+…¥+Æ¢ªDp‡P "”ÑqJÅ'çÕ†ÔÉùñ@‹ãÕðmW5AæÅæ"¥gÒÔÎkÜQ…™7]åž2 *\™{½+À|µPšé™µŠÍáI^‡úÁÃö¤¬êüe-´þÇêÚ\k»ü@¡šPæT^«•*#$á¼ØOó"!QÅ‹Äßö÷:Ñ’³ oW´«h´V [T掜ªÀúÁð¼|¼äáñ&ÞÏ_Ž7Gls™öD¡Wة׶æ?~$3ÖàdA7kZy´=þÄÔn·€Ñó[9lYLC¢#‚»M‡4îä`O縮^;·¡ó°Þ}œÌ?…béV…>ñôà‡'P)üvßÉÁ¢€{"5¬ËÁ¼¨˜g'½ÈбºÎÏžbrµCªøkǵíóT]¿²p%¶9&ÿ+ù:"7ñ*¹ºlmíöË!êË¢”ïýIª[²xpvÉö*þ~¸ÚîÛ‹y}·N ÇŸ[8¬2_vKg¢ƒŠHÖ—öˆÌ?êm -­>E̼½3¨÷«Ê¨¦Ø 2©³t¯Kû ¬é4ošF…d£˜˜fùn[ç‡oï/ߺ¨ÿ'irkú\7_M*7ñlÅ ŠH;›ñÚÙ=¾™ö÷tc¢³NÝ\ñWQ ‡Ò¦'Ý®&Š]év?@Úa©“””β{é,‰¦«áÊ9df,´¸½„íMã·ÈJX} |¥‰àrjšá~¼Ö(wó]®M£û½íwð ÛO8×¼²˜ÆZ!×(“¥HzPÛBM —cû^öNÎØ!Qî6Ùˆ£|+¿ž³%rìàXUPÉ-†N:&)ÈAöq__ÿ‡`r«‰±­\F,áx,…® —ré@kŒ¯8ÿUd61‡¤è HúÍžmþ"ÿž‰èHÙ-·lS€?bv[ÍqÖœ ùKlÝqŽbT­ëï`Ë8üÌñ“æ U¦ Øn¼(#–iÍ[0{w·ˆ\ÊSmï-ÍU6Ø$ˉä9KVª6Ý 71ø4Ó#ñÑ Ñ…s»Ê ¢`'*páêÒˆ×ÏW2Âèîö5¶]XËœŽ™µÍ»À;N8!ââ¸m ¹SU»øgÓÑ`>…ÂékÄ»N‡P]„YÒbk#+Ð}¯í?À.´%\´< äÎýÏx/[Ù€¸{0…*ÝA}þHž­<Ýþ2S*Ç·E‚ ýß2ÏUƒ[s¬¸Q3K¿_V©Èrw•˜Æ ÷ÎÐŽ: ÖiÈ<o8‰ŽüƒƒªÐž-5×iúVÀÉ_[H aŽà1;xÍ1¦Yý;OâIóWð¾GC™ƒeMÁß%‘mÓy6þÅKµÑ"Ùm°ïk-bæVq.I%@pñqðËr™åçHŸøƒ5åÑü”IMme¹IaóäÁ+Ô¯h&/Ù%h¢ºaä‡-–¢Ð¬‰ û˜HIΞ?,!ýDv+5HÓ{œa1?©M­Ê0h1£y!/½Üb¢¯¦8îûôYY_m!UÈw·jÞrg$æÈº‘ÂL])jQ8ìqq¶ÚS)žô=ÜôDðô\¶ y%dA­]PŒY™»,ÊfåÛ%¢púoF. ô®ÔŽúŽ¢cƒ)¹#àB{é,ýUf+D†oÅk3éïl¼±7PUÏ•†ëÆèRO¨Šˆ)~y/t§ÚJ›ô`//@(²ÇùÙœã'c6÷ f¥ÀÞŸBâ gl,€T¥{'n*>3¾3ªküÖ0p˜d+yI0ïeKHÏ(s ÑkpçO›W£Ë‰!`—Ç·Ñ ûóÚ"¥îK×<ÔÛŠÍošhÖÝf*ÉÜUÐ%I­ Œ«@Hý‚6eYÖÛEsÕ. ¦*Ñ_Œ€!žôåíUîè‚—X¢WP%N÷ûã(9µDj ÜÊÔ¦™‹ Ýc¬“ Gã‘KQcÖÄrkYæ,Šþ6_H‚N™Ö_laöÏ h‹(uy±4r—¾}?Û»$ñy3jz¿žÓG"åñDÞ7rGrD]ЦC°þÖþéñ2ŽsÝ¢¿(6ôOøŸ=õíüEêhÕONü°J*oäŸßÝ|'Öj­u–…ßฌ?ÿ³ªMë%Ö‰…Ù'×káÿØY2ßð<ñYX´xTiŽ7¸;7S4Já³i×Óe_ß*åCfÖÿ°¾˜Æ‘©×f!XC=jähÒ€~˜%·ëÿ±©!>ŒNýÕ' g­¬‚vŽ¥u5É?–7B…6ëç ŒJaä/úA<³/KU¹¸ÔÎ&é«’AI¯"­âÖØèuC«ÖÈÃrKõþ’ W¾¡WÈzìÝ{Q±Ü×mvê´>¾8W‡µ4ðIŽÑ±ž¡ªìò›  4µ¾ŠfQåFësÃ~_’wÜ_—šL[È5-~:´ª6ª}ûÊÓq^M!^u‚òSh`˨¼.n¹®àÁ^‰DKæôêT;É4GZ ÐÉlÖeœSŠŸóE5w Ž‘Mî]nÎlø 8Ø…µ[ŠF‡1£[L [fD˜0/жÁÇRÍBC Jè‡]Ü!®½b´òÀMòR¯EïwX„’‘Ñr…4)í6|ÉC-:;05ïƒrÔKw¬·Vù¸N³ûAØoƒèhëóñÌWœ5>}jp.Vb 8M0¢d{…(rHÔÛŒuA”FÉ0uœîTšs¥:¨³H¡£H&•=;ààBIæ—Hôaø^ô¦†ÁAÑqÛÖ¶30áÁ­+ÙmÙ~¸™Ì³ŽàçOpƒ¼u‹®D[ØÊ+i Œ›zDV£š§bè„ ¯÷ásnÔ-P å'ŠHç˹ÖŽK£"öH1°Ä+sýryj‹úîÓdMjÅ® O?u·ìˆ)²+ÄÏâ’^ÎXDÏ¿T“ zeïBØâÖX!¡%ŸÀŠ™îk¢CÎn6BNÊ÷PØT•»!°õT‰ŠRcöOýÍÿ$݆½0­Á?3 ºñ@Εqm¾©üðØ+h-ðšu;)Ä¹Ž –âÊfRa“¶…Ã¥ÖXøú¥žo+øÃ*ÛPW4ÜéUyRý3×O¹C™UAÆÕé†È¶ßÇ,íTûPHÏÈä%½\ ÐÂöÆšj1•Y¹u¸‘çJîŽWPfÇ—Ç*̾ z´¯7"çs¹xŠ¡³Bd®%Y¾R(5Œv~S8õR;H8ÅÄ!ÅÎ+Æ)ÓÿDžüX¤J·Æ#ÀŽÙ&ÝhT‚roÞÄBÄþR/2I«a ô–”)ˆ‹Ú±ÑŒ0Øk‹[R­“ÆYtUw¹uÿœ§Ùõz}½¾”PŒuîîÌ9ïƒy1nñõÖµ¼fv|šOÏØŠýk¸¥<£«*<ƒÊDP wá{ˆA`óÆÁZ¥~Lê,c0½g4d¯`hhP‰š;C…ͨ”ièy3CU¤sµ{-C`Ã=mª“*¾N##Ô ¡½WI(Ýo^ë…¾GZIqzó2dwj£œ„VvØý-!0/çÇ 8uÒÕ÷Ì”ÅûU]9ùO‹fTg,§õt«ä+_Vãm=‹3ó~üuªøÓ¸0eöƒ´)B‹z‚™Ü XVŽN¹°í\yÌÜ[‘ vœ“&FêÁ²ç«3ô‰ 3x¿0’*UܟΓÜÇÅ•àÒ›R´#´3-”×óé3Y`}C>];Í…c¹'ãDŸ÷Éß H£Ò3? cãvéeÛ3^§&É88›Mªv ±%kÙX‰xKä÷0:‰‡nÇ_U¼pùϱ ²œ#Q-Ø›#D7Šš·ÄDñJXÞ|k‹ ߉7õ ­‡g»¿{' õû {Ìb1‚½7a¿Cx1qŸaú¾<œ}ø4…‚ j"7Gu9ý¼WyU¸{»•]ÈqáÂ24$oÈ;‡³“§øÉ‡R‰œŒž÷øã–‚aA´¦Ã‹—?)¨=à ãå<ÿTqZ%ê9™1>šHI€ü¾ a Â¬Á5z…i6-°+L8U½€ôÈ‚»"ÊÎhk‰µ^3¡Þ“ÆlÎô8ÓvZí¸!±Ê›xË +»ãj ¤yp|—öa§õ¢¢˜.-U×WÚoxQQ8TMÍ!„€ÞDÕ…|FÜMz¹˜ ^hbV£IÍ}x°D¹‘—¿r#îªæEO㯃I÷Qtú\¸˜NÏ@üÔ%Ÿø¦ßç*Š_×ì”V𢏕¶+˜CÉ•Kn»?kÓ?}8ãÿç·A¼½ÛçïÔ¨ [¡æ"0o"­Ä·>_:héÔÊû¨X1ÞɆÅvB’\ĸ/<±•¢Äã"’æ?ÂÒÈ;E¯Íj5 ëŸÑ^áØ ñ¼9…¾J|#ýg÷¬Q7†À·*Ñ ,XÿÐ UítƒpÖN1¦¹üŽõ„†¡)÷*7,l–5XÑyµOÓnDHõìÜqwl ¡Güo¥ý„†"ëS]8]Íf9•ºÊša¯6…$šÄb+“ÇþÒ?©Ú3B9K§ÔækÛÆªulÎhiøh~kͰ=ëjW:î¯*J>ì°Iq°â„¡)77Ww O¾P½êîivÆéÊ\£‹Yb¨ZJìæ}…[]¶õmK;ÉEý¹†O¨(à£Ù¢t¶|šÛ9v“Þ¢Í÷öÜ·„GøÒ®“ŽT¶‹øf>ÐýtÙ¥¢avwÇK"4¯×,ø¹ÇÿrjÙN£r[B†ë¯" Nÿfµ3ïxBÖ+MÞ‹iv§oo·'#È©ï£Öµ UbŒ‰ƒLQÖ½"›1G¨ë¯Â/ä—VÅHf nvû Sé¹M42›ºÑ¾ˆ:tmäE6[@%®s.b6÷`î½·¥iϤãðRc“Gÿ’I%ØúO~5(âd€*öÖ¢Ôu—êÑ|­ ÃL¬_õ2©y¬T0ŠÍØDùEYâ/˜˜0/ƒj„%}‰5/IÞ‰ƒ`¸¦ù=« j9}Õ.PÐÀµ±¶ïâ¾Þ¦º›$ÝÍ!ûXSZJ°‡tÓJDú¬ ì? ÓziY«×Rz×bX‚¢“ÂôŠ’2_E OF§·±Æj(ÂQˆ |r¯ŠP²;„y.ŽA T7µ’•åbÂÑcçîÄíöË/3ŠÝÃxÁS—(MÎ@_½ŠºOõÞs$¿õL¾æ¡ÿjÑüô¤ÓýE( Vy]p¼-ï £?ò(¸¸ÐÞyòðÄÀ#–íŒèج ²Ñäs.ÙcªÁæUE¡\º,"gc“E…¾Ô7u KqœóxÉHWHdj:âñÀÔŒç)_^ID ë½étøMÆ#§5¾/Q°§tíÎç.3D÷Ñ™Ÿ¿h\›áÉ¢ËÝî’°°©QA¥6x׫艼no–‹áÇFlRæe£òîlàRlK½ o ê Y2âǵq¹Eè±Ê«ŸqøìÛB'Ð2Ÿf_N¢¿ÄdíËL„¤u%H¢²æÂ%­NN;©ëPG×vá[±~‹Üì^×$ /úãâÂtTé²À,ek _g9_¦, ró÷-W°¹t«È9Ö…Û[•®FÝÓ%£› ”­[eÝUœk»CšX*œH{£Â…³W!zÎv€î,ÿ"ºZ¥\•Ð*ð%—Ò8éìí ö“_s¤úŒ ´5´4³0;›bƒñ“Éû `=EúÊ•xþ!ÎÊ›õfµà(Ñ] ï<ù÷#|ƒ.H*l±¤MÊØšx¹â(‡]Zý÷=j–L³y¾‹}ƒuÇ®Ýbª÷„Ï-¦W7£˜^NŸJB„,ñ:)ŠÄãA)?"Wp·ý|öå Kfè9'<;Êo‹,j½ ÐyIÀðdãÒíÚ8ï%p•±š‹«i;!LÚ²R+‚Ó]®‘×`,„JdýÛ9g^NŒsýÔëFùð¹ {R’æ²göÈ5ˆë‘Ô¯sxGì2ù3mglˆ˜nI·—¯'&g½¨ë¢ƒKqÐÌâ/ß{O‡ŸbH«ud![O0%O|:‡ÂHþ}+²[%žL÷ó߈DQC]Onôx¤Eûà vÄÌ}F@Œ,÷T¡vL-LƯ’Ð$@ßœ¬Ãm-Çð|:S‚w.ŠQ=—Ä®(CŸ©"MâPŸNã;Kk¸—[%®$âIšɸ~Ï?_Á Â^®¾Ö¬²Ö =û]“"ÝÉÀº|RÿLe{”S¥oAþÔdM2ô}>\ & Ÿ~,F5fji{†›M Ò¨¿äÅzæJ‰dhÎõÊñ‡8¾l1=¬š-€a¯ò|óŸ´ÉÁ§ÿÝÊ•>hõkiP¨˜Ñ5ÀEuÜã8\O¾ð3¡˜bŒ -=·Åœˆ¨à’ö@ÞKL|–÷²aóôçñ¤´z„TF@A3 )5 ÞîvzRºn93eÖŸÞ(ÖΪ£µ­×+®¥61ßT_y{ú+^°:{M„ó3†ƒ?§RX¾‘ ä OÏÈÈ[ÝàMCœ;OØÖ y_9…KÜ绘O,ß,5síž|žŒæFÉêg û䪳ÞÑôw$1 ÈN?k9žKa!i Â̽'ëÀõ69[Í2Vm°¹,Á´ þÜÖ(áQ¡8òN…•˜O¨£•ñe>hÔp‚CK)4™ëMA¿é6ªiˆ; øÝ´«˜|`â‹É6ƨßÝŠ3Õ„ÚÕfç/V¨÷þ‹Ûù‰¯߈ ÀöO¨?òÊ2|Bù}®Vó,Cßá:‚¹âgí~ÈŽÔÆµRéœVjÒò~àÖ*À'%CL RÁ0tXÊ·à|®—<ƒ7üF ®ÎB-½µl@Öº²•ÈòÙt)¥ErPâtr5ÉÐÚ¤wA•U ¹+D@©%I!­á+©~Ùu^¨¹y£z=¬ûºÿ¦Æ`ÉAËŠãíx<3à´ÿ¡'Et,gºR2 ³'Ö‰»˜Ð a,øók>¥&TeÝGyîúmehT?«ÌXåߺ)Ñ7±þhw¥DÈ É: sÌö!8ÎÈ*ŽÇXBOj95n€´‡òø0tÎåž­3X7q þl¦‰Ã˜ŸÆÕeð2KáaAŸÔŸZ€£½¾¨-+ZÐÍÛ)S^w®%ăe>.7TB$DA³â¡©X[éÁÄ+Õ“j†ÜópÇ6Îr$#ö®ž(AaAKñ9úî¶zsÀ«mÁH$þU‡#Y;»2zd}€KW×YpÐQ%þ¦»B{ÀB¥€`¿D8ZY{£!Q‡îJ”? É}®Lm.OôÇÓFEŠ«ž*´RÐöx(¯a }qãUpY³û“‡Ókx·ïþ[ª—Ùd×|B@Ñ 7&Nböx:(yGäjSr;Ë‚®–s9‘|Kö É€GWBå ÌXÂY—&âBýq™ß/î„Ëï <‰«[5Íaäód`úåPH/³NwbèCŠ»Úº¥`©ÄFvÇ|^]Jƒy-ÌYíÝ4€ªÔuqó×ßmFþ›êÛCŒ¢u’nŒ”ä ÕFËûêAÆK5Ë{¡r gBvKžMª¡ÌžÛ«ëÀ©üäœKŒA§®náxšížHLyGÊã‡Åæ–1 Çëzoè=“ЦyŸ×£½—K2«{´üüY›dV³äB*ÑæÆ%‚ wð“°Sz˜×@£“ »Ïº—ª|‰Áö*ø|Eñ)!ÂlšÅ³3.{B6hôÊ×Ó’ï-]¿×‹r¾ã€Œ€HNÉdd¾m pGÒºe—"•=ëXÐŒspÀeâRiõê ¶¿ôŠ7À@qއ¢,Yà2ÙœLÜ®05Õ¯±Ãq”gÓ‹$Ókʡ͟ËLñ­w_c–|¡™”]#»²@l¬]*ҙťh=¶|êÛù°ÝFò¸Ç£«4t"436-cêù"b¾JjqÕç÷¡ƒ¡ÅóOlXf€’Dȸ®U ·`àrô#I[äžc‚‚òA:Öjƒ¡ñ#·õk®8Úb›¯Ä à'[šÆÁé ƒ>ŸÆªŠ ¶ÛÎ_ÙxíA{B/åôµ£ÞIÝucÝ™õAQ_Týº§{LÜ5qN‹k:ㆴÀoœœö¶å„¾â\zg¾æ)¶9®K®YÁu”„3¤=ú£¿„Vmà2è‡Íp®ì/Êó9@¹»Ô³4a ÒjÏï‹8wg †óS÷Þ£öfqv‡ ÀbFý߸ä·ÎìÅϨâR¬N4ˆú"6Ôrò½t钢ƕÖY« Y¶—<Û#7¥”‚?h(tþðÐ0Žº˜N èá1Cƒ÷P*Ó΢¶?›‚@˜(\O“î )ð9Ã;2·éë]¶>ÇÝ%§a—84ÞLòL½“†[CΨàÓxÔܸ©L6Žú–3l×»°y)¢¤¨`ìú~›õ|‹ìÁ¬}õm0ÂÞ­¥ŒY~™ýc(.ÞøóìtÚ_ìÉ5Ç|†Ê`M-Bx²Ö\ 'ÒäÒ/#NÕnó€J{&;*7¿"Y¢îGLã²ð9Õj út&Ü£¸»ðg‚>cš¨n ¶ÊeÑw¯¸k£ýHûÛ¨ýu~ó_ «+¦702$ß{ÅORŒu(ᯗa?”ÕùáËÆö¬˜ï ft4û•nÑ·½žQ†­(žaàŸ­sÔtŽï‡qV9ãÃóOìÌVeæ)l@i¼r|[éIçøÑHÎQ¨èCû@±“sŠìzîØyÊ)¡Ã'{]ÞcºöIfUbZ,‰c>î…A©NVýþ42*ëå•ÃF«®º$¡×(ú&ñÄžG`Sì!Œ<.’”ŠC1^.tÈIÃ2Þ§4¡ë^uí$°«@ëbôž¼PœœPðV÷õ¸Ò+ä'gG*ë{AäTtoÇQ¥ÔM·wj†þdR¼~Ä'»#Ë ³Ìu6´ì ku|׎"†­…¢ i TÈèJ3q•‰`&ÈÏ1yͲBEø  Ì,K/Y¯õô/Û£oMû‡Ú©»‡¥æyÚúªµÏZ–VÌ/¿f!¿¹Ò¼e¥æ&›» síâ¶>Q¯–T˜ÏL{ÉÛɘŸÜ«ÞQHg}´T³ý­¦Ïîë¯ÚÏûÑÊA j±¦yU’†­OL,ëR·e¬ô}òMäç;ñð†ò·Êfü~ˆN¼â’~ {”¾»‹BܽɱIj¤± ÞV#Âu³³Ž©ÆÙf šã2c γoÛüQ9õ•ÓýR^.°Ô„-‰|MưF)( Ú)”*béבPÇ‘r; „ÉU98èסWÁç:Ãê!Ë… cyVãžDïDÏš¼ÍÊú- ljšœô.ÚMÎr÷ˆ±Lö©ý õœÃ‰úßšºR†é“ÑïÁ¥{0™F<ù…zUšR X=‘ÆVZ©ÛåP»š,üÉ휌þ“%_Cg ÿ…íµ`"… ¶Q"ûJ€–«Ê¦xËûP‹Œ†×•Àõ ´Ò!¼°ç3Ô q®CWDl\ògTÚÙìwE·s÷Uvv£h$˰שÉt9Fñ¦·NÄ—À{J£ŒßÃáˆ~|ð!¥­sbFÇV1ÍÏ5Ð ·^Zâ¶o‡â- lŠ]k7Sš°kÏ÷Ë^¦”ndò«ô3 Òî?S¸'d ÛZFúRß±œbxm°y¬Ë³Ï¢H(–2üù 1Y­ñ KÁÞ3Ÿ˜-†Ê¨¿â‡aDç\ ®#¬|¨‹üx­hVÕÐ].ޱJi›ü8_çÆ‘ÂT„Dz ](óR6¹f•Ñ# ¡8IÃgYYâË$¨)23K )@cœï{xÀC™Ù9Ç(ÔðÞÓ'm‹##@»2e¡$Û—: báö‹ï,±j;öî3²îÒå-ö½õ"P]؆šÖÆ¿#4ÌÕö}„}sƒçA ^Òžî}Im]NIFÑ«^ÖÅãò‰³ö¦q÷• C!™rŸL£ª½º|ݧ.©3—- e 7^ÎÙÊ—f¤§?–dY¾9ݦ¾1¬(<ƒß2âÊs¥¡_³4,¹|v ì×5B»ÝGq¶çâ!A_ïpΉ‹Q©B-ÂwõªÝ™Ï.â ¿<à/‹n þì×~§Xä6¢›k÷Rg­`?ŸÎßJ=1¬LTe¿ÓI—·µ‡(3ã0'ŒÅk1Ð×w¹WeÃ70T`tÊâfö*|Ëì‡%ÕXdàQ­öZ½× R'E ´I­ä¼¯û£?|ZöÕO…<—ËeˆÙ»¢Œ™b=ô¡‚øÀ×pH™ÌiIJçîe<¸|¶bëlã/Ý‹ÓdE}@—V·ófGq`;¹¿ùº^ö !Qmõ9Áwnû ‹àÓ—n.ðZç,èò›Ä1Á:­­¼f<<dX;h§:í®Hn¯7y¥(Ê?ú,eABDÒfpî‚ÿêI“§÷´g ج¯vå›RPYöf¸6áwîuœF!h¼RÑ_B’0 "Ml…`¥ ŠÞžÔ¡ít5ÚSF”‡ä¥øˆõQ§3hªüB¾ ~@¨#®=Píò>Önî½m™©ª«0ùrŠjž‡£ùüÀ±ÞYMw{ˆ)•ˆ32V8À¨Èy@¯ü @ò¿‘ªhy0QK›ƒa Gâ‘æˆá hŠÐ Ss,hå5ÉžAgn^«/³ æW™HC»}P}eŠâ‰5hØ?Äå‚n¾êPÑgð~¥VZ»qî‹_åýgÌ3iõ¥–~Az5"Т±òlSi©Iõƒ½›_ì[šBöŽh]û×Úú\°ÄldzØyÇ$LmÝ?’u,ZC. R¸ž\OC;›r`NÉÏç¦+] ù%ìÞûö›Äù Dò{÷¬gh*‹šc'‚X©)-8H‰¨o¶xob÷Biº*Ïéí¸€¦W~´<dº™ò­RZÆÍ9oýÞ WÏì×Ð 8°·]j ÆXÖNÁ¿þÐu19 anm«#ßm1”(ïÄE/ ‹ ` `–4ðgQ²I^ßn ªÿu·ìõ[¿‰âÉv§t1ºi]«€C%Ì$3•$ãpµ¶0`ûEò2‰ä"±”çu!§ÉÁa§L<Œí¥²IKtÔ_p-ñ˜ôí+ÚËûÍ­ö®9ˆTüÊF ÇM í¿ËÅSˆ¨„Ö­šqôÎ_Z§t¸P5~s4x9DXS”Ôèpµz6Ö?+Sí,.•9Œ é+Øø\ãrÝ¥ñ=À1…Ùy`ýq¦áϘÁÛ#DšS+ªEòÛY^…0R—vûZ¼6`Ç8qâýá[Êô4䩺_8¡ºId¾õwuH¸ßæ)vŽû=)ô=W÷IO¬ú ´õh£³È»s°RÛ“@“Ò”ëV¤ØûÎ ¯r?Øög\OdÎþŠ„Œ'°ÅN0;çвÜ~ÝWßVèÄ?ᯫ¼³™—-x¾qÑnŒ×¡ƒBŸ¥(Ë̱ßTZ"%×‡à’”¸FI¬È¶]UzA³Žú³wxƒ2ô·Y·?¯Þ¹˜OÊ îÈytÉPœK Ò!ø‰ÍU‘ñÌ#kï9”Ä+e}Œ¬f1‡·ŒRîò…!lúc×÷.¤Y/;Ä+ÌO¡z|ÄqãeûÓ¡‹ü·×øÚ.» À5'A×öV­yÀTr'ÞŸùaG÷ò¡iÔƒèpX2²£A+›Ù¦ÿƒ˜AATâ~ò\`B™+=[BÚaí„NÙ»Ž[&<Â}•]ë{EÐà‰$­™!å€ìàsã+á¹¹ëô»›®<˜šê=£Î툅RežÈTw§þðÖL™Óš÷Ÿ—퉨ÑcíרWgjâü²( £/¤;7¦Â|î è¨~:fé«T¸ä~įœ ê®=šÊë“¢$§!òrq\òNjT !ÉÓ~§ß…AH ŠR#s¹0ÌÕŒ Ûú"<öápvTgÕdóhG‚ŸtX‡5¸3ÃÅãä“C^ìw½9‚³DáFZtÛ4²‘Îý‡ñ “½nð¼{ƒSG6/etÔŸç=¬Œeï¶V<Õ¼sqô £–ÆÞ»ã߆™fÂ…lÞ%‚ê’õÿ#` {¯ ÙúY?çÆõÍsaDà$Æ“.áæ°¹"WŽ^Üø4q°­ÀW™ŽoŒÎ£Ur …=A¦«¬ãIŠÄ—µäŒX£ï!ÈÔ©îY¡/k¸"900Õ9@Pü%O|6ip@¢Æç à9DÊçÛ)”µwßæS³Æ]íǽ¸âƒ9ó65i°krËn\fV´•×è;¦mšÏ é*rìðœÜ¦‚)Ó2Ÿ*× G.‹µÞZA2&®¾ÒW sÅ+G6N$PrÏ,K §²Áe3ÝÇ!û|ÔAO“ØÝ¼rŠ~³ŽÉ‘³Ð÷€vë\‘çxÒ8ù½wiIUnüú ð×éÖ¶Zjü´cuòÒÏ— ëg¢³Lz³ áS‘Jù…aW;/L_1›7-D}ª“\jª¶•9s·|ª1‡s–NûÄœ6§p u›l[E~M½¸Ï´´Ë¸vã-ƒJeÓ Íʰö¨oÒa›ŸKNOÂ/ “ü·¶Ÿ‡cÀkä˜ÌZq¢‡"bÄæŒ —¡âº«"ƒSy•Ý;^aq ²Wœ3÷:>/ÜoC[鶇½HnþÖÞ[TÙË_ôÅZ(4ºŒ¶òm™Ön±6LËù)BwQäÜû 4Å@Z5[\8§ðÅ߉÷Ù= ъ׾f£ïmO;i8\.ÌПZ¯±_¦@ëæåsqn•­zâøî$ÆU³æÅÖC=Fiìz(È4ööÄ¥`DË6qÕúöÍæ–SH–÷©vÃ-“%J«Ÿ¯$¶ ©$ܧZ/ÛçÙtHuüË þ£‚{gUܹ%L`mê%€@ÇÙIíîÌ:ÆbˆÏ¼ýSŒÝŠzyš!kô?„âžiÜï5ýP™¶€ÜéZ•å÷QŠ”¿‘Þ…ÐíÛIèw/ðæ~á”;ùT€(™ï<¢S®R* ùÐ0ÂÓ°ÉÕÊbp¶™*·aV “âB?#8‡÷"ƒu ëÙ¼ÌéÐÝY‰˜‹fY‹–‡vÀÝL¥ûÅÞ$)ì >z÷î“¢æp&všO K1;I:¡Ž®¼†ž.´4Û÷,ËôE­”o5¨ƒ¿ßQ“¤K³CV埛¸Ž„GC X™7ÇpÖGœ{B_ýÇîµýsÄ]‘ Íe><æ<_qÚ?BcMrÞõT•{i«}Æ鄪Þ6Qwľi~ÛZƒ\q±ØÇiŒÀòœ`.×GÊY0(ºúR!Åo ySïŸÞHÙR´²ó9Y.n¨å›jæì¥œwåÈ´|c+Ʊ¡´’&1*¿ò»žÉÇ!í]ÕÁ¤”vÆœ®Pݾ ^¹(øÔÙRè¥p©ÇãEü†ÙL¨³“2²/,CÃÖÌÖÁ¬öÙp`a–[6E®2B[ï,µ®gNæ²±½_&¡ç'ü¿¼ƒ„ ){Í)â•É¾ë© IU'KóI«pÊÀ…ÀvÁžÐtARP)¦%ôWe8C ]Î#éD9jIùÙp§¶¬÷š ˜M”›µRNðú)Þ©ÄoVë½éf éòãå€Íøé¹êÏ<0æ–½Óäbü\Ÿyž5ÂÿäZiBÏßpŒ°¤eÐEçYnûA9ËlçÔ\kƒ!$Ø•HŒ#Ö4ÃãáîP\¨¤´:ާlÌ®¸—Ñ`ñ&ײ ’IßÖb ƒï©" rö@K¦6Û¦ˆ‡Öi’ Xn%Y³kÏ+ÒýªöuÛ]zÆõ›€Ü'%{Àzi¿¸i–S±’¼þ«ÂÓH툈'Ü/çà1éMN`ç.‘Ø-¾súm–¦V×úÇl²B¤4ɾÌ)«.©ùüÆð ÝÛÀãÖê™/ø«s^eÚùÙ‰_\LÊ?X¯fÖ 8„gßÌzM0Èðü^)¼AKðkQ!’„íE\šSW*ÙÙѦâùS¼õYÁ)‚‡VmKÐv묶4Z *Þï–åS(d*“ž\ºbÍ"!Öî(ÑPƒä­ùI+ÇÅëî¶í*^(ðýŠ;T5õ`áÛï¯DóÚ÷sa!ÞÝ^œJëç7UbZÑiËBþа€à ÔJžeŒÖ7ÑafØqiKV¯Y(·ÒlÃ`#8ÇOñ;kà-ü»ÛoÙmÃÛ½‚ŸÚreè¬ð® Ç ŽRú£Qg¤ÇÀÇá‘òV 4ÿZr‘Úq6’šµ6ôÖ(PÅ×"á<õº(n$ì½P„7ÚÚ símoBñ-h–±ÈÙ9k$pR*йÀfáR|½“…_Æœòk¨â¦¯ÓdÌÌVäñz;[Íÿ ×`ûBMÞga××"Û‚þ4Û¢NJ®Ÿ¯À$–iÛjD™¤;´ž ÇøÑÇ=“‡kÆWX¦‰ho?&;ÀÈ6we¢‡³ðiIÐ%ZƒÂså‹ÇSº©MÚ„óÀ´â™0°Yk„mqâ-|2Ýj%¯îvèË=PM-%Q.òÏ¡};äꎧåºÅŸ§;H ¦}NÃ+ ‡êÌ ¤NŒ:¿LÁƒ$_s<mº yÈDEM”=Ê»¥nò†Ãbí-l4õÈimÇ`™ÅT}ÀÏ¥€oøÈfž²Þ„·ΕE /ÕÚ5–>Ÿ!”Á´†Bòó• E!Á Ý ü ‘UKiúùïz€úN«£»Tl5wèzÞ“Ôãû´‹ëç¨æhÀµLjçqw>†‡\¤üÆG]7x0¸#JŠUÔDÒ;_!(9Q¶ÆôwuËÕž~½r4ØäYmÚŸ67ç6./ƒä zßëŒß§lêÀj*ÛrçË’ªÇ&¼¨õ7Ú~w?ÇüºÀ5'3}ÈÖ$€Õaê«Wp¾×c³DÆ QòVh·ˆbQUòœ¦Ö«ãOtÞv¶­² ¬æá¾1[`ªÉ3"kÌå2$¼P@»wÒˆÕkÑTókM©G)Œârîhë Ø!ø¹•‚c[Ã!ÂÅÜ/:ò‰fKÍ.ŸßçB;¦'‰ŠNT⿦¼ô"ɤ¤kËBx†pH¥Ä‰¶²(“îBœßHª‹c›Oõh}Ô5àîéW70ÛçømDúeaòÓ+­¦]¿ ë©ÞóÆ?¡×‡i ÊZ^ü%蟔)d¯r‡…ª:¿Z ¨ß/pó[ÜîÚëQMDPÚ x7ÿ7huc‡ÅÕßå¢63‰ª´âÙ¿O'ájþJÃX5ëF›HWQ—. ”p'¼ªCAJÆÔBÉïr³¨êIV ZÃðÏŒjc¿8§cò aYÑUó&{V1äËp8KZ»e…( ®~ïÆ\}(½Ê-2O^žMÍàì;º›võx˶XQ&õ0+r­Uw<|¯ci —NqG_×Çi ¤Hd ¤À¢ä cá9*‰Ù£jü, `²†É~‰O©aTô¶ÜO"phfg˜—(&ô‡b¹[‡`F)³âÌšMLç?PïÐ$‘zðzÉî‰H™¼.=Eòµ[ Z²©oèl™Ñs59Áð:­Ó‡Úu@úðpùGìdçIC}ÿÌÈÖxM‹Ív”䵤ÖåòÖïÛ&D¹ž~T,»nP”I{Á•6^€¥”é J‹OÈ{VWðÿ"w|mΣ{8îSä)ðLïhYÎðÍXv7ª¾—8i–ˆ¡á²»¼žñʰ#òöú°îi?8T–C§aJ½3‚º«Î ¤ä·“X_ôÏg íŽö2õŒŸÉ©Žä¢t?z5ÇL…K<7`c"ûÿñJró¶ØÁ ä딡/R Ç$Ë€\ž(1ÓM&ÅüN¤Gfk‚èNÆEM?#3•G¾¼«2ï>5—ƒ³RT­Ð  áKwÊDJ}qSï¥e)p¥Éö$añãB-x2c×ix¹!ªñH˨±HÑçÓJõº¥Ý.cLˆ%ŒƒÐØ{„ŒbÝw8 IW ¦[­*ÍrÍé7U`¨¢^ÜR)!T¬ú[Âã‡¥ß %Ý“Ònâ µUâE Ú|ˆº´ {#SLâüÑë;ý—ä4›ç}˜u¦á-–$”¼«Xª¥mø*¨'­¶L\ÿèi^4×/ˆ¢¿n‹ƒ±6´ÿð%k¡ŽAf7[Ðá‹·'n‘žœÀr3´ŸüqÜfòú‘í0Ÿ­õÍ•néî5¸®’yùÇÅ.pã‡!Fb¢üõw.¨Ýƒ"l%Ã&CC«—Ù¨ˆÌ€´/ÌÃVÀªó'}Þð3æµaùñ €xASö÷/€ñ×™‚«h ûYjð \}cˆø[“<Ý댒Ùs„õŸ7¼ìŒ†žÖ>ÀO¢«àF£®—U~€T±É;L,ãKûãÂ.+›2£üäBQ›OCÊÂL#¯£!ÊîÒ¢<¶lÓÉËM˜È‘¹§òŠÜRGöy&Ã>°5J}[1]Ÿ¯ÛO Gl ¦ó#‘°zèZ£í¢¯¾9ˆ`%WªŠ¶IÈ“Q‘rÚjÌÀ¦ðð4qa§‚uu ¹—›æ€´³ÕÖ6àà]J°¿õ§ˆ±¾ŠBF©ŽØ* §#ÏÝøvÐÍ/º ÂÖ!jû-¨Ÿ+˜b¡$E6ç‘FUcUSíéÌÒ}èΨaMQ…Ð-êØÿ7—AGjXƒÄ†„:ÛÈCŒüu—ûq—ƒñ¼ÆqÅÝÆl 7ä×G¾Áp”!ðÉÚê‹!Ç¡Ýè¼íúeü®ñºpºû,•ÄdOtŽ÷ªSI‹ì19*‡¥—!›v…þ$`¥ß¯¸èLtdÝZï jƒÖiÉCÇ8÷÷…C~Ôù.®¯>¤ê¼œ,eœ8®œd5ÇÓàíQÀ ?É::öÇοO©çØAÃÚn)rÑ”sØ8ƒ-(Wþ/ò‹G¾HBùg»q¢¥©eèxr`\¶ Ñ)À«‘ÛIÞâ—ÑÙЭ÷l~œKÃPµª-® é¼I”¬¢lâѱ٧—«éÅŽsÁKœ=kó =CZ?÷JZéÒžÀ©ƒwºt;úô›hC7WñÉ<µ{JvWˆºýù-YWS¤ƒ´…L[¾6‹‡?øùp6›vÜÁJã©ÞŽWœöeþ@tâò| ¡´n¸Ÿñäíº“žBù=¹uí›ðNˆî¹ÉT¦¶0-,¯ãp›3|'ñ“R\ c]º})iVCª5W*»]z$Ú±oÙДTÅ6¬0)žÒ«—’N4»[”_ÒXó&¦½?p²€ç[8×IOö>ýO|=©‹%¸ÙÓU¾,e{“ìÁ\Ì‚„œ\ê–ô$q¬[CE¸Kàï¶óN‰¼’'Éf :%?ÀnëÑã­mì0=»]äi·“:ûð¿jT»qk•#\’…CnXhçVx'ºpwFã[¶"¹>:¿¸aétDVÆì^°Î ‹{žÅ’ð—i)­lapžö¨‰™þ±TlÒÉ¾Ì JÐE¡W,F‰C®]ØÔŒZß°’—¯XÒ%Y¿¦ìJÝÔ[àê,³U¥ ó í4™½€p²ƒÎpnüZ²)UTúìÿ85eܲ¥–¶`ñÅ"Ïm7çLRL÷ÈIü#Új]µ’ÙÈAÇ…”ï|Œhü»r-bQÃØ°Õ3Lõ‹%IÍu51}Z3Ñ–÷Äšl+ØW±ö‡†M¦W, ™˜ +´îRj.®$fÆ@ËI '°½´E¥Ùµéïö“Ò>ìG½%{`¨Cªj05Óº`I£¹¨(Z,DÜ6Â6'/ísKDí>Yçi ùí¯ÐÓàR0^[‰FEÞ¯r)¥NHkY†Ð©nöÖœ;wä‹.1ìò5Y5¬¶£nkkLšÛ`XA³ò¬p^ÏïÆ+Ñ"Œr\¦Á7Iö:ð–©ÓòºËÐf ŠðNŒà1YZQi×·ýÈ øÄ¯UœƆ,†%úŒ©ƒñ*û0 ’F2¡WEÙ&¡Í³¶f£‚ )ÕÃZ¨¥ƒƒ ™mÜt©{—½ŒÎ;Rc§Œy¸¡•Œ®áYŽ Jå …‡*® 0¹euPDÝXÍš…8Ìä¤ÏªLÊÕCÛçðig¬WÒ^M-„²p”žOU• ˆt©ÎëaÔnJ.ÈuÉõÝÆôYjH_«ÝµaÑDAÇ]w¤´ÏKäÄxÙbåo¥à³‡6®Ðʲ`ƒË®¹8ò†ê‘Ní8ÒèeöÕzœYcF6²h{@±r™&z c‰°¨Î0åî6ŒõA†ž:éÌ{` ;f¶Ëq¤¥$ý˜³Ù¥~¹-¡jË{qü„-h ¼4‡ÈŒfï1×-½6hÂ…±lÜm…5ÈŸÞÝÿxÿ»0‚TrËpœxk ï?¿xû(wcnEÒ$³…ª_éîÇYO9ÊÁ2âÚ‰æÓ°1ÈìûZÖT(m\,-Žóƒ $:µ·´’jU–Öà¤g^éËBšr¨Æ~ÀšÑŸ+“R®v èÚÁIŒº¦BѶÇP¨m7,ÀèKʆ'‘O½‹OŒg[²´û†×·È®F¸ Y~ Fû±í)•ï½À³T<رÙFýç,hh¤VÖøiˆª$ÑÓª¨†¨JÖ’ ‘.¯4¹/<4 WÁ’žš¹k!þB–‰ì0¡ÿç¦Û®&íGmH­Ê³ãâÛÈ{¶dcx¨ à–é‡õ{’Éô¨Í>;a€§çé¥z6Ô^êȹ¶ëâ†üŠ}Ó9¡ò«jüB·Ò4x Qn%Th’¸Ô§õ=£¼„¤° {è°”Ï⮚þxQð*-UIÝÜö#»åÒ!`Kà¥[5?a5h–cÌ@@½¥¶`0 m¶ð½rö'þ±^hñ°KÜ@µLL&ĉû“G„y³ŠY‘Šåbî2Ù1* µ®¯kô²°¯áµ£ZnŸ¢D‰]³Úx˜ñ>•1þœ»´°æeíÄÆµgüê(¥ï ¢H™S/PÉÍoç,Gú 2òSöt˜÷×nd]Á¯Ñ"®k‚xáF‹?†s%±¶ûdѹKì–~döì:c¯sO9ÖM~²ÄÉþ1dsnk³Õ²ÒF_KyL …Çbˆ-‡¤ÑHýÕ7!¸Q&þX#W»I‘ýó3&ß;$€àŽS!]ëQ6Î «Æ@ª*gi¬7‰Œ‡V®!{YÆèû ÜlÜù ¸å„þ¬‘ë§K>á¾ì ?¤O£@»Æiöbìð±k¼ôŸ8þ“>ê½Ù'pôÞýüØDYmÀ•ù'Y]p¸£éu”³:3hŸH|ûzls¾Äb5hÝÏ£˜Eaë(UQ¯Þ58ë‚V½;¥lÓ¤©È=AKÚ[y&(þZ ‰M3ëyv¯êjº›ËLòî©ê3vO•Î#]ìI(å`õ)µ "aéZÄô(ÅñÈczj‡âM*l»"ªȪ°F¯3‰¾?û]lÙ˜C[Z÷Ú™¿;{ O Oâcé×(t®! ŠJç²Þêî6Ï5‰›uÝbsÜPŒw–‚<¬‚×o3YøÏiÜ$ÿvE98¦¬‹¼*Ýò'ɺú*ú«C™z“3ö¤–b†ç˜A/¿¼Ä8éeí!:¥ÊdÜžaÔQÑC°Rß>Íîý&B½Ó~㟊#Õô¸÷ßm5¢úûÒˆåU$rICLtóJB&gêôR¶+Ú`éÀŽšr9]|Jiý*Õ¸ f°H› yb±1þ¾vA‡tÔª=¼G´¾š¡ØôÆ#´LþØf0qM¶_^ãƒûXß" B<ˆ>÷nÝ`Å OÊÆÀ°NMt fzòtÍÍVÏOꧨr×Éw¡D,}-­ñMxë5çs™|SÿtÛ0ñ”>!æäxr4KÕÙµ r¼ßbwøžå÷T™uêr9²V¢ó쎮¨´ÒÝYíEcCë§þîÐÖG „OÃôbZÏÛ­o½:7{ô ¯ðˆq«;\¤è8_û1v© ~ÎÒƒ‘:ÔÅpåp¢ÍŽ ^M°°‰™vê$Ì\ç?–¨ÍÓŽš¹tßîø„(š±é÷,ÑAz¸cÂa_ÿèÕõSv@öA[Yä ·= Ýu¹¸x¬­È«á"e:ôÜdÅѵͅE)Õ \´69•äLÔÜY"FD»V5á[)Ó‘“-ytŒ© ~ì*ãäq£&LóÐé&ž¥~Z8z®…­ \ºýƒ„C†•=y°¬ó‡˜ ¨‘ d÷dÈŸ¼E²q*ÅÞøcóÈkÐN?Õ†8¼ïƒ-Œ0ÉßÈ0sÂ8›m()¥.’y¾˜f¨Ö#xг|àœé,¿Ð¤`’¿Ë«þÒ×Hª©ú MD޶Îc«FkØÿPÎwv$1+ä3n~ÁTóôüÖ¾áAº°]·q! ¡`æ³*€¼•¸hkS%¸áªAø§â&n¬Ùµ‘$ªÝ{–;—ß)à—Ü+ÜG@e`ò¸ÚÍN9 ±O¹a&ë—‘äfK$Îäê ëÅÿª_8·o5NI—ªB €51EF ÉJ*\ ÇrTò:ÇÚÏ‹HÁJ…'­Ø6i-<ðˆ’ÇžcÌ ì¢›˜ÃW7LÿÊ vû3—m| ŽìK$,`³ÖÀfDÜ0(ÀIš<¿A›JÕ ¦h©ÖwÚ GÐBD]ÃIšxíÚÔ=Ôa,¤Ôqå¤N ¾ @®âµÆuÛu<¹"&86ûVyO 8;LRŠ€èœ±‰¼Igþk„5êÏx²$å¾çPnlP±#Á‚QWQƒ‹p…þó=1“á¥v2Yü¶:ä%Ií¡í s640 .ER¶UãŽæD—DDÚšB?é¶D 't||žX\;È»‘ˬ3P%KfBv+7ÇÄèÊ”93Zf ^»Ê\{+F:&°‡;}ÊyO¢š*}FJ‰¼ˆ‹–›qÚ«’¬I·iö®¾ç¸€èòG0zåYƕܯ_»\£j{©+Ÿ0þÖkÙ)‘2ëè$zS×ÀqÓå1c@ƒáäJwíG¯{•4âÒPƒ7¤â7>k„ê4™X ½1Ï™ÞGÌ4>ç¬]yV†ÿm9Fö§¢´á8Žj6a;Р錯VCO°øÖAÜXôu£‚²Oᄹ°bØÚXuÒ’„y™œÀÊû ëÕ¯ÄËôÑÒóxy¡wÑëQk ‡Nª¥¥?´ ã7Sâé“a‡äÞQHhrG ¿TÆt[C†Õh[§¦%û[¢Î›)u‹m¥#¸•Ö|Ó˜ßMîi)d8ç ¾8t&ÇÖVÒv.ZË©„m.úŽI@t¡Gs¼Ê¯ü² ‚×÷(©Íî¹ÄÇ1çtO”Wõµuë‹ ÒYÀ [6\ª5I Q[´¢áíµÚ²ÖA§_6B7VÊô£¶ÔµR^¡L|f›ÛbU?šµÑà7ÖÚÙš=pmä›#N ¬cÛöí׊}âÜhþÓÞ¹²u†àF·ë);ÀKfŒ\d¼¾þœýýHiÖ$»ˆEª¸ªÚÙ±‚^ƒÆ¿'–Õ›}  §Õ@|:\Þâ«tTáWöA›{iûÑUkþpRµJ+‚êðÈ¡¡a´šäËq«>ü÷¾5™YMÚkÇ 6E9úoú-stÜ$½†ºù¾®[¥¤®Mî2üfHRos&,ç)7ØÛ 4ª‘²0t_Jg‘N€°HdŽÍŠŽ@¹ êër¯ CB/f㥑–*t›•Gà•wB1…îTNsÑT”ѱŕóbët%§s#ØIÛΉã•õÎÿ?$‰d `å)«€[“aH¤îËgëó›“x¼ø¢-é`„×¢ÐD{~UÁ ŽmªeM–Îö½ÐEä Ø…4=mïSWñ¯……ÏÍm#Ùý X‚Tša ya€¬„.:6ÚŒµåù^CØ•@qß º¬£–#,YàØÈ†›ØrA±$TVÉö÷Dg(¡¬!Ô¨8ß…–à ˜­ÈˆzTÏÈa~¯/ëf¼1Ð*“­¤ÌX(ÌÖêU<1WøÇ$Ìoc—2·Œö¶?Ñî‚;œuð2àY<ÊwuÿçÁae6ô[š^)…9ãC6ü§²±Óö(]ìõU*y¸‚N+{ Ÿó›=AðS>©×ê× en bPaè(#_-cc*Ý€Œ&‘Û¡ÇQ³xùÓ(èAÓ”( äÙ!ò,ôUk› ]jô>,bæº4õ°@&‰a¾Ví‰ؼçx›ä <Ÿ!FûÙŒmj‡ÎaöP|´oôPGm¨®dSˆNîGÍ…f³êUË­r% ¡ž–k¿Â=Ÿ§=Ô5~=Sù'c#©9Ég²°Ì³ÄZè=Èà(¼ÂýC)*¿qZªPpÓJ”X·Åú17ïäœÅ¾Í*a]dÆý¾ÆÜaõÖã©fðþ™ìbUa#ƒô|üʺ:eÒû0’ÂÑÑoéŽtY4 †ÚVìƒöoY£~­Õ#%µAá¹]‘¥‘à8Ò ¸/j­öÌÊ#fžeP´<‘`sõ<þéÜ]Ȇ&$·=[Ã15ËrVj~døÞÃí¶ñ.#òZ¯l; x×¥3¼ñýžOí ¸î•<7¨#ŒæÿCÙ·àð¤¤d¥òþ½CûoÖüÊA•Öù³Vö·]˸êj ÿPåvߦÛÍ×dtɲ;ê¥Ðþqc­ma-T&¦]ó^¿¶ÛQ¯Ó§¯'Ê<ªÜF¾Fu~¡YØ@eSx¦(‘>‹ž Kv×/v>Œó„õÏeØ©ï­tïÊüÂ`R4$WEýËü¦ Õ‹É<9—2YúÖŽ˜V¢ëd’[^ÿ̺ÉÜ5 AÊgtt‡l Na`T¿ò=sþë†y³²ÒûѪѫ°àZ„c ­d¿ÿL¹³Š''uëÒÓHbÈO,Ž>¤a’‘u¹Í†ƒ²ƒÌüž€qF³› Bš€ÂÆOßpQn~w:áõOHÆ}i·ê`˜®Øûƒ—zÆ¢ ê!)}²ΑIКî) àŒcú»éÁîÆñ${÷Ä»àÅ.0êsc¤v–£1ŠoØã/#Ús, ÁyÈ-ùçbØ`¾LK¬4ýX e–œ!þcïmbss½•'“ Þâfß6Kš‹óôÆ…ùK?Âáæ{\.êÚ»÷ éݹ±¯¤¡=ŸÀA,+åš»gQM- 0«G}(=áÐg}Æ“<<õ*ˆ–zåìÒ.´Ÿ Y*3—°¶­gÒl.¶ŽôGäLÈ¿<ìú6S¤µÿÇ}kÍ€ê¥Ä€lgîÏib5‚Í~´>I@Tšt&¾ÝÖ mÛW@%)©ºdp‡¥o–Z“QkÏ.'«#~+ŸaÌ‰ÕÆËogÑB¾èšøšVÿMÂie{ð¿Wñý{êÂzóûè[óÿñUf¬)N#õ`BWK·­88îæÌ  ÁÝÏqz’a¤íV¥ºy¯(6ÓÂ*Gq³ð…ƒ,ݰ–T ¦>¹P3Ðö Fâ\˜yß÷bÒÿc—øuù¦)ƒ„T;u[JÜ=ݹ1݈¢È·K™”!cÈÙ<aBÄ1Vö¤èâ­;Ò‘4›«Sš¨ü<ð+¸÷+ÇË•:¿'ÎqÊchCNÕßZMû'²¨Pb¹ 1¿²Ü»%êjP’$Ï#¢Œ\ô¬•HàCBa žŸ7Ò……¶Õ‘cí^?j¿)â ‹•/-*Œu+x¬ˆ(Fb%z^!ƒ€Ó]5flé,7Ê7ÁÚgv€¾cöyîMñUξlÝɳç¶sH‹Ë’*×ñ$-ÙO—‘Bmf¢ºAÅcÉžWeGÍ%â Å«ì"›C6…Ût–j³¸-ÏI¨Ù…ÈŽ 1À'o¹ž_³I¾%œÕé´[GÞ¼‡Œ|[Lˆëàqíÿ.$éÝZ´Ià èE’OÔTög“k2Pç1[‡”OròVfà'Ë–Y™Šµ„ˆ¶%+Õï]Ãa—Ë ¿ˆþS>úШ=t#¹Š%5ªG·é¥C­]Ç¡Àà;qÝÊÅ[–v ÿ/ÔÜŽù»n\D„¦^òRŒÓL«¿ßh°ÝéOï:IOòâ̱È-9i§Êòî_e5*E[h))*ÀªdV‘°¥¦]ð|ˆB&ŠñÍá&XסٗVëõxUÿä"]­>wZü÷ê’¿Í7ƒÂ_e…A®”Ò_^x¿S¶Ó ÁÕ@åE©¥ä˜Iú^®£ ñùZLM˜D9•¶ÿ„×t†e@ÃdrøÞb®JX£š:ËBņ9'ëX(ç_V´¢‡ö:™ˆJamwà_KÐêÕö‘¦'wãºK(@†»ÎêÞƒ93ä ¡4#Ã`ž†Æ‚Êíünç*M—ñ,lý‰©8lñ¦}Àm_”ƒÜD wrv®ÞŽð‰^—¶¹ &`™¢§’70±³©AC/™ùšÄQ§es8‘&à/EdU&ç­8uüu]½éܹ‹çÆNguÂñ3êg=ŒOzb!ïðؑϓ”‹ù_ˆß1Q°àILô!d®^óæ5³'àâ§üŽõ~º1µt>ëè©àßRUNâ-Iä ¹kS[ú±ÒwD¾èÉw/¹˜‘ÐÆ’"þY·’Æ•à‚ßWøh‹ÔõdxX­CDïкbô8à#PFÔð"±Û«gGòûe'`¥à‹ô[,w.©¡^vtqîÂÕû2;ÐyY»¥Û¦»"ðz;Ñr.0ö†'€öêicíBKõPóʶ4ì¤UœG%‘ÃÉÕNÄF.n¹$`J]%æüÌ^hžùÏxê²aeº+Ûé¹Â!OwãQu7œ#s¯˜.AYÿ/æUoÃeÅ`Êáñ£K[¾ Hz škkFØ~äÍþqHïu ýZG|Äã k ÒiÝífjE[Ó(©m‹>¤8P>é|m°#¶õ¶Ö£»fˆ6Ùó_o]4 s!¤ÍZ/ùB½R‡Ó·eq½ÙÀOÿ¾ãêkï'á¶ëVaâúE"ÔI ÒiîåÛ}q…Ê2òQ„ݮƌ©éèÁñ6Ù8Û.èåÿráþ¶lµ®qCë¦A’¼&ÛžEeìv¡†¨¬ïsw­m’yü‘”â„fÎf|8gìWd÷íÜU즊ÁŒÅ1Zp¹ŽqÏ'Q˜ôÛbvë½.7Øk ÆjÅ¥~Æ ÷€]®¥„,-€Ç2ÁîŽ8ÙYòÇw¡‰$®‚:ð亊cÝG¯Õ{6ÝB†"ï$òyÍi´ôá̈ç=ŠýçdþÈAFÎ’SßO‰é¢}æH¯`5CF¨TZˆ3|‰Ú*,¿Ø2“˜ á ˆ5+æcÎ×Å*š/ÌÕçÄý:?ø¿ÜÝ–g¼‰s .öËéx¬›ÔË”²368àbYý¿yQéí¹3>PQɲe§œx0 ïBîBó¾_´­ˆ³¢¶rû+Óá߸ëÇ£Ò´Y£»T­LU´£Âý²˜tc`ë~ò­\™{y¸›ÙD¡éÉCç6_ˆwBMÀ(ߨ‘‚ø›/æ:AX[æà™DˆQ¹½Nn%#ç$»Mp;ÆÌÜ CÏÉL²USv©Qd_ŠØ–-QZÏgÐ6Í…Ôÿ*Ý–¼RüYJ«o[2Œ ãa†­q¢ ÂE`öv¤ÙW=ˆ‚¼[ÆËöÚF‡ µ)l/¹S)rÒ’-–GÎÔ}£# ÁFÏTL¤Š9"#÷_©?…ÆVcRw¸?û0Äœ ‹ódï\tçíÜCæ…Þžn–§§Cè©0_„u—¥°ÅCx•Ùs©ÀŒ+çR» 'îž”^ë"®4D¦ð0´êGdLSl§fN¾ðh ¦÷w^s À–Ú»+վʣ]k€Õò(í¬ñ6pÅDúŠJ{ƒ !žÓà©î¾/²>³ raþj@-Ÿ/·›í#qï~/dðQ4or†kÉÉåÊP„›A}b&‚¯©zÂç¹N2÷åþãS#ïÍ! )þöýjïSAeÓûæ«*Ü›P­†û€ ;ÆÑ2P¤eo¼|HôRÙdñ×nk 'xÖÞV¨ã‰ï»Ç«¢BZÎ+nÀB¿þVYÈQoš0Ü¥ß åÅÄâ1Áª¡g–ô‰º½E·ˆÓx0›Ž'‡"ZóM(uÔæè>Ú~Äh…^¯c;¬=ÊpèkGâ&%þÈó*;¥¹Üã¹á%Ô•fw“—Nhdžˆ7m”RšW92ìshUÇxë¾vÅUí{ ÞsáÓÔa¯BÛ·!äÿ)SO}&¸ñ”4Í™~;ãYœ „ ‘ñ·¾²ÞX}eL“¸¸S4³z¶fôF`n²N8g/á/ Òé8>£Þ@÷^»WlØ)Üþž¹6qØîi ÔE#ªM•râƒðu¡U•Õ¼–!úK&ŸX,jІó‡ÄS¹= ÚCÊ3¯Å»UæG¦~ͲðOÉgF£?ÃRûíA¯Ê ®´çÍí×–%C¢Aš7¤!¸Â‹l#ub¸ksZ§¢¨á^µ€¸È9QµP´O•!Åfwýg[›üP”ÛêBÌ8÷‡=)ÌÝãú}·a~F—ä¼6Þ¯×,ì‚dœêOÒýóR±(,ãZÏÂJ?æ!†¬‚΋þ«›P`ˆÛœØ×(¸Î*z)<°,Éæ¦kîîm€dì`Ef9Ôœ[7eAí§¬É ?yŸB3 S“H¯¤Ö)~Û´â,„\g‹&¢§Ú)œY ”Ÿ8O$z+[òiˆ·gÀÁÿŽâ/•¯f»7{Û0ù~kA½­áz?ÚyŸ@õAañ·G¹E€u%ÿ^Kßù£H|Ê:KQ²…´Ï݈t}¼Q¡Ô·¤ÙñvÁ‘Fjd Ç t½3é¹&äÈ@½üÍ ²«Ù¤Œ÷…ÁÛ:üIVZ­‘_¬"‹›sV(ÎaOP"·¼Ž›ýô¥VgÚžD‘˾1{N1ÐÞ[쇕pªõ”!-Ô {ëÁ•Yh,§Õºf'yU¯=Ò^X.#r˜{m¿Éøj5¢ÿ§¨Žé‡ûL]ÑÀòµÓ·5|mã½ð¡µžaMfL)Ý·ÏÅÕ\6doâÀ-ŽÕ3Ü…ùÚ]%óº­"tÉqs–hÕšh€²ÇWw±î †4u@©sĽ¤0jlth¾‚A€Õ8¶s묋@bÅo>wKìæ}ß­)~Ãþ¯债)¿ÔµÈí^};‡!ÄÓŽ† EWäqãÍ‚¿»Ñ=’eÕýE>Ø÷]MàC2oq |øTÂÖþsb!`-„•|KÖ¾î}Û—T…÷­“ —¯–;>À%6qA·@Õî3c=|6 ªmrh7ô>¬gìýo¬®3aõLÐ7¿‚ÿ Õôà’ÌLËpz`PwÌ(® b[4èê]* àñ_¡qÌÍê:T…‡Â©|;ïz=òï<¤u½ÀÉD¸MºÆš`ˆÇÑÚÅñ÷Nï…/{¨­U¸hà€Gê=ݠаìº8“.aÇ6ا5ÕÀó dÈriŽæŒbD¼o„/ý”@¤ `ZL1È ¡uÐï[¿ï#yöIÉ-œ¯”£§j߀”c.îcÁt²þU=ƒË"±è^Âð”«ÔˆÂ{'Èç´cãΟfŠÓ~Œ¢}œæò’ ‰îÁ¶1tb[ª×Úsìën€}be{³tíÂþTl7ý5›hÞF%©j· ”:B¡ŸºÝ©j ‚ž€Ãýs°õ!?KÁýN¡Ó¦#cCºyåØóéŸrŸàÝ–½Ò¡ ×(ÑQO!ŠpGTpy+ÞóýF÷9§hv† ™Ýé3wù…+CȯGDGE’qì¤*£râÉ)Kt¸¨°Q⃠?Ÿ›ð鳓`MA‘Ú žò§†Ófd—›{ƒ‰œ3[ÿag¥L0ñ"K%oÜiK-ÙŸt™`ðVÿ)D8m˜§Œìá÷(pOõÒgÔÆÝhîWòÉãÛÎ;jx¥vìbtf¤¥<ìté K扜aŠ;ºoËÊ䉋“:¤ÁA þM¾~DÕ „3vÎ!$ªHJæÒåFŒ1HÍZšë§ˆZ¯2æ\§ÁbÂ[¸æÃ£—,m´º¨'VPþ(Móë1¼øOÌGG¨Gmç° " Æ>Ž “¦±‡7ÜE°û4GŒ@xýå@º¦rć3pà ¶Ë¡ú”Ÿ!.qìÞqyd ðØÔ»t‘S»X ­ ¦7•ÄÆ®€¾ïPvÙ±-íîS$ryêmu[¶Gj+m{ÎÒ±$0KìBÍobaè˜ûáèªáí—Ãv( €cÛ¶mÛ¶mÛ¶mÛ6olÛ¶m'óþavs¦ö]‹Þ•ÿø÷”É÷Ø‹Ï>ÑÔöi9¿O¡a)"¾€¶rSm;áÍü¿”Ö%Êéø±·¯;‹RB7AÕn¹à‡€\H«•hp¼Ô ]8³‡p`]áo \ñß°Õо¤kÆ-»Žþä=ô‚£²)ÛÝÅ]u= ï&rö'Øæ2Ô†"KÂ’<§¡¯G. ¼4;žJFƒd“–ÄûÁϕեÕd˜;£ÄvÉH4RØJN±¹ ÍЊÅÖ ­ ¤Û#4EÒK`!+ˆÞ‚¿í÷ÊÂÈ Í{å#9y(úANÆõÚ²ÍQ»Ã Ê(‚täŽ~ïBžcs§[©–ÈŒvƒÁ6®Â~@¶“fÞ­XrW³ô”ë>¾8)rÆýoKíŒ †UÆ‹Š%¯Z-r!nG$ðII‘Í9(Ùž9žU(¢žß9̨ÒÁXÈ¿ë¼8bTØýß‹e¾²v ïSD†òûƒ”Ç®j¯Ï:Ÿ¢ÑÉ=K –åÜé¥zWœ”uyÀ=W¹ˆ^í·Å„}Á1¯œä‘a÷êÛÈŒ6zƒ¤èªî‰wÐ0 ñ¦›d~Á"âå³¢õڣ݇rtE ž»/Óý³l4å€/: „<{ðe{³=zHÚºW1?بqZQx÷L±-4r˜o-!½+I*¹™øðEþÊLŽ®7q€4È«óQ}ýÓ!ÛHÆ×îö¨YÆÂ†YŸ¾HÜ p hæÿæôÀ—d»$™öüXu±¼ùˆ½¬BgའPÇš[Àl\¥’s*‘¨¾GÑ&ÒéåN½+-æðI‘* ^’ñx¶ æu]øˆ†éÅ*¦ÁºêÁB9ÿb³!"k1ûÉÿSPžÈ642Õ“Ì,[ó=KÓ\ %ê›Ô¦ñ^IVô™~ШLÓ…õ gƘ۫1/Ÿ¥˜|MG¦È]Ûj¡$!3oÅyFñËè%"W=0+MµÖYúâIt| ÃQ/¸~…G¯ŽÊä-q´Y§¹aÿ±O”ä¯TL7'^ÿùžäXÚÑh¦$r’eE£b8¼Ä\8ÙãO_©`8]:Æ^³îZj«®¾Òv_ü9Þ׳Þ&çÞæ% pÇj‹×7´ÿAúè¡?Å“Â@bôûm•n Ù²X ,:Û â'˜Q£×áÉÔ ÉËq”åÁWuàŽ|f²=3ŽùG”"ÑY¤¨J—4¼¾ŒÀÎûQL¢öd);Ò#u¶†aAÅ=~«{ƟݺÅ^7ãiÊ¡ñjïÝn™’îEõ¼C˜p€qrèÛxáãÂeêEþj‹Eqž+†Çj—l4YÙBE9½Ý˦P\@/"'ð– à>(ÏÔœ×çH™ m‚“ ¼Až¾%rMu„Á³– Çîxß'r¥t›Ý¶,}œè?Vœê’Ï 'йê›r "âѺ} ŽM½«‡ÓB3Æò¦£™ÝħWIžùóK¼ˆóŽÊ·|=‹ÝoŽ |ÓAêɹlPÁ"£’$l6Ež¥]¢_Ê9K`‚Ej1ÝÜZè'>ü»Ü=gYÁ:•–‰@9MtáÔ1niHgW1“>§6Jn­çð1/æ1¬®-{—g"OEÊsb—ÊÉÏJÿH„¹ƒ‰`JÊé0¬´õhSôÛVÛhŠ€+á÷B†LD^ÒÕllX®ÅÄ(n¾ÃkvÈ[s´A|Õ¸‘Báäí}—Šÿ>X¢Õrôœ'ÍÀõÏPWiqÐ1B—§QÐnð½P‚N²µg6¦þBDK§WÔ÷ôt0KuáN|g¶ Õ^¼/zA£…E:&ùÕÜPç](üh+÷½Š—­" oå¶ü§=©]]Ž©Og,òŠ££¬7ùˆYeï,©Ñùµ?íÔYÕÇ7F€½×k‡|QÏ(ŸÏöIǺÆwõÍà"P¢+¡’àcŒjÈR%Y:[yÌpYkÌq=M³¦LæèUÐÒ\_+f%Œ4ÊsJiÀz:“,#d®¡æ@“W·:{( ?äõ$fgúÞòÇÎÓ‘-J:%«$ŠGŒ^ŸæÈòevx~.%’áKwiI¦Î/KD .p½Þ ><~wcƒ?$ãvп¸ÿäµkzœ‡U<¤Ý»iJ¥mtéµÉL,FF—5³é—·¬è º#ç¯P($;Î]¸>5Œh‘ÝAâ»Ál:)»{Ïwò`©Ogl©Òç¦þ>iù¡R?Ý$–è-p‚RtÁÔ´a6ƒ´ê{Á«:vQÞÏå¤w^xÓæ* óåJ5lñÀ1ÀJ Á£|™`o5 ¤ŒÑѸ8ÜM<-H oPþµ gF/+\úC{ûAv–åÑmÈ´×­ÀsúQê£=wY(ÕQ0ßÛBQ‘ 0¥+–ÜJ§Ð«ò;#ž¬ÍèÙ ôÎ*a«a„»f%),â‡ã¸3Ì,Ö.ún±»évò"¦|µ`¤îC×ЋeD`C9ž"õ§Ê¶Þä`‚¿BBK°ÔE¯91IóHÝ`¸V¤Þ(ƒôÁ_ìki¥1´ÉòК0¡C“ŸÐ–G ñìŒ}œÚ\&öÃÇeÛ×ò£žeŸ,]mc®ãðxÌ@Û|sZi°¯ÁV¶wMO!•ÓX_çæöV㮲~,Þ‚{j…õã/í*´-ûžœ€‚†æWÈz$å]öþæÞèÚ€|ôV"þ¯Þ‰ °íîbºms|”ñʰîDAÂë@Ñ ÜÓµ•<‰tE§pGºùÏu©…²£]Îó„â = ¾ð[™–Ȱƿ¥Ü“”û[®ãD_”ÇšØB¿£YŒ·³-õ³ç¥ qóÈü j§XEi²¨VL8—‚¯# ˜Œ“fýÜùè)éMU)DO8‘¸ßÿ2»‰Û ‚ö™—½˜ähÔ¥ýX–«ñu‡i./ÞQݬ JB+Ç´r"G‹®Ù&@w¥mV¢À=ªZ,Þ1ö£«è{¶yîÛ•"Ÿ%”?Èãו—‚þ»¿³ö­Á¸ÂÁ ô=û+Âçj.4ø¬HÁcjao>Ø9W¦ªÿÁG°®¼œ>ŠÌaìë\bz¡”ZQe+°4wÔKÂý9ÕÕJ:ÐÏ}FA€Á÷œ…‘ÜygÌ5DnúUÜ"ÇêSTtÛˆkóŸÎ»*®KŽ!^ šm‘˜œsI)¸.}ÌÚgˆà -ÏQº’b¤0ƒ?K§£t›Ë\Á¹ï|\äUg¼íRO½£cÉÊ\U_¯^¼fóÚ­`Þ÷aɼ/›D±žÂ:9æ4o£«žÜÏ.¼w[0„„•o¢_«ÆÑ?t C©eæäÙÈ•wzØ€z±dõø«©>²á{øWœ"ñ“»e-Õ¢CÄ„˜œñ,Ĩ ?ãɾÂÐÅf÷ŠÛÕ§¶e:Y^©Û1ý(ì1Ö¼ÛBw¡Y]`Ý1ë\@Çm~`w ò.^12¾´ˆ£‘_ Zœ~*+«¶avýïMŠKžÜäàAKãYòbŸ¢ÀII+Šò5ŠÍr‹=¾Ñ¦£èWÄÅ2j <º•”H‹„à+=³¶l Fé‘cÁëŸC`YmõRc, ŽlÊxÑMsF @%º@ù8~Tbƒ…è¬ü©ûàqxGö‰Ck ‘‚° SÈkÏ2ÿ=©lt«!óð9ïB!Žú hº?÷“Rt ö»Æ"?[[“FG”äva|šìI'Þ>5QíÚ¾êžX…tÏ\¸²×ZÃlÆ0˜ˆìV>­tva†GNÀ©åèêtþþ›œißãÜñ9öùT©PJ™YºƒçÏ ¾®…£^”²ÊR+§Olª9†¤ uÙ•ØY9ìbœtntN<þëÉò»ö'B²¨È»Åhvö&+lïrR“†U¾f°ò'œñ6 ‰dížžiËBæ+£™Ì§sµ£lN&NŠ‘MT1^ã ,ô)fjÆ{.i[­¡Ö®œUÅTèHöé‚ Ì>ªäs\¿Ÿe™'Mù½üÕ<Á/Aÿ8iX‰gÒÆÓ‡š…Öé›íÜÎÝ©I8Ø^Šqòy5yK_Æ£ãX¸†²=ÀSPÁC/âœ|¢[àbÑs”ž=!ÅÕNüáÚ¸XŽ@Sž§oóM„¶o¦µäدg8l:X‰±ˆ•¼n¸”f. r:- bxPZ¢"m÷챚In+Ù5b[æÃŽñ±Þ:YU}¥µN>Î ¡›R€±…̧CŠßl–¡žwäCJ"ZÐi™ˆ¦þÒ°Qã$ô#ÄŸÕ{ÉÉ3…¶å,ègo5Ù‡Š÷äÒè1‡€ü¢ß£ó C>ã(ãlaË´–úìÙÿ0{£dòÊWG""{,yÌl•¼uzÆ ˆ?îô>8 Pa?I4‡'ÑL‘áø>¼U9;ÈC\+uC+íåå‡6h}A**fc(¤J¡»S+ëQXê£ñÏL›¼sÍ"ñljt9€4žyq¶Yœ¤Gׯ¯V’m…èŠí¹#ÒÉÏ_µ³¸‡Q Þp»ÿ¼ GÇÇóáP(}6ÑZ"_«¢×K¤´én£ú>™ÉMC…”ÕPýœo}Hl•D&0ô".Õ}7‰â\sQ¤ämÍ„8Ö#^’Ö Ú…»€æOšÃÂK‰kž\Ñò¬6ý5±^ã12<Âg0¨¼|î}0P§¢hx*üñóÞŽŸ2¯ço ¿‡^²8 gΘ' —3Äm<êï[`‚ ¨3*¢ÒFŠå“I$LXvY©ª…k¤qV‡8íÊœÀñ 4Â;¯)Ü–\!²e/sÿ]¡óóNíäø˜øxoýÕá”;¨Êv8Ü?µ¼áâ¦R¹Î÷-¾[+C@‹/¯x¤ñM=É ûNýª´²Û½ZN6øQàRë~*ïžÁçºA¬øðáJ%¯š ?1»Qb„?l3©zL/ʧæ!üìɚµKÁ¾w3lIp3tçÆ8ÿ·Ú¸ØÑjÄ›)ª4‘ìO&’Ê6“º8تô/¡ÅNûT è x ΀>¿½lÈ™ú"ÁÃ^qóàl|¾}ÍFÞ†ÛvõÕ„'Ö]»> Gú‚›Úùü¸J ázåÞ’K>?VÕ¹ozGÒ:×\^ŒÇaV0›ºØõ¢³[Š®™¦ÜÀ¸ð]˜ßõÝ‚ÞjÇÜ>7ìöv„ÑÄ'H8Q¼Ÿ4ox`ó^“—ÉõX¸ƒD¨ݼàÜØ¢w.šDLÝG—Ü}mp‰¥Â$K« i?b  Çûº¢ð£"šî5Ø^kÞÕxÃ`)2ŠsB(›ñÞxuêèŽÓ¢}°þ\ã¯ã( #ÔWíÊx,z¼ UdlæÏº—6ï?ði+ÖÛr#Ĩ8?à´5–'³ª ´hTgRÎâc‰ìÖŸÿš“ 0«ZãË£òìzìO;It‹©£›´_×n©}µ"¢—'z´ŸÏVʃQ[}yÑ'q°½B¢‡–¬Gߣè‹yÚ‹´YoÄ€.e­M-×[Uæ0æ";s%N êGì—ù£dÉšúÕ±¥Þ‰9!²ŸšÆòš(°Çl…œvª÷Ö…#Œ½BÀÃ8l€«7.Ž]¹ù­þÌa鯕ŒåS޳ÆÔáË\µzy¤ê°ÅºØû-L¸rnZ_d3‹&ŸbÞÝš"U+½©®†ûòŸyû­ßãüDÞl ž±ªejyKBB ¨ûÓµªåŒî‹¬ž¿ÔÏPÒ`#òɽO44a 'Õ»òosštg\)<8s5“Ik‘·.ðÞ›%Yf9ºr¬¹}'ývÝ™ü4;š?ÉšeC ?Èm||$W9·Þ»hNÌÖßLëØJ„¼¸ÓzI‹u(“Ñ,ÏTóñ¦À<.Pü¤7æ¦^b (Gzui—gMáè‹ùy¦®˜õ#®¡aàÖç×/tzù`³Ù¤¢pôýŸ{i7# ïÞÙâµ~Þ¼¼öÃ8¹È’kô8˜I/@€ï«öIzùaüñ¤Zòº$ƒ’ÛLàÒ‹4äŽÔÊMÃ_~Èq?Uè5D¤¢K’r«ÍeÃïŸï„ñ³ô4ÒÛnözºO³nxg¹>óç+Ü;•Kr’¸Â]–¶uÆGÏlŒÀüI‚Q'{-€ws“Štó™ŸIˆ²"Š##Óˆšï*Ý6 âE™h°~JÃ_î†Y±&rR¾5*š„²ô Û-e²®åc,í:…QWD䡘ƒ7±.Ÿ{1Ä7c¡~HþpŠZÅ™!U¦‹|ЀH‰}üñ!ÂuÏɸ*Ù7/añ¨{z˜–Ëëá]“>MÄ©ŠeŸY…L°Ô4àâ´ïAè‰JD?ŠÜjìÓí':K ÿ»Sò$íñ;ŸNÖ×¶pÖ¬ð°ÁE›Õ¨¾C/<&…ÛZ„‹jëI÷•(/]8çFzÉj(¬íÊÇîìd gP!õø/` YtÀȰKH?žÃ(‹p«"ÏA!Îü$»äÌ$*¼ÇVèèú9l=ï'ôÕPäÊËØ*W ø ÄX6¯(ÄÛR{fÉX:d þÅxÉ–mÌ┛˓œ T$: ¦dÕý˜À'å,6-›p°»÷Q{‹ï»¨Zv;¯ ‚5>Rl¸ î—ýÀ\ÙJ7à´› âA…oÉá¾É¥Æw-°žŠÃSÒPÛX;Ø›–:Ù Úa7¸õ\3˜{(Û¡Oråö¼ý.~ðüÛœËmäÅÈiŽÓÐì®#Hñ:ÈÓk½‰Yïõøw)ØÄÂ8aÿBÛ¿8V,®„+±Ò¡¸À§Æ]{PùÖ¶Îw“ 1âËQp”u°ƒÛV †ÒýÙ£%œ™J拎b¬v¸4ž¨¸ Ôô°\¨|½&}Õm)Á' Œ\%mz¤ÃÎ2ÕÈrH)³#=b‡YSmé~ã’˜TC@ø”£Ó4À`” TàŠ>ò(ÅøpãPMð¿ì*™Â·\ `ÖN«ùN&y謁3 %>øÒkȹæ_Ʊu”½°À:öÔAóæöˆ ߨZŒ¯G=_LõæLŒhT2ªcw~`͉&ÌÐÃEÿªš¯!DOä7xGêêNâŸàú ìºTSŒ—žÁÓ÷QÚ Os¹M¶£cˆ–LX™ÝLÐÙS­Q­ÛºñÀyÌ\ËtßN-\¸«”cu¸Š°®YÀŒêP`ÊvÎ’‚‘à9…:¹¯lXz/N÷®ëD‡$Œ© DÓª•vS~­¸=ïk‚FJÌÂhžò»l^ÃÉŸ%hU`Ø…e‡t $@912ƒ0 iTê´¹ˆsA¨»õåÄW~TQNz–Ì{¤{”àP=lfÍïPS•ôlVjôe1Å’H4'a~{ó Ûj|ªo_µçc½ªKØÕéqélGÆ@d‚ÊíÛ¬€r6¦ò:49ø_Ê…ëÙ*œÃõ½YÚÐP¬bLß%÷©ÚO…ëáe§f:šA=›ñL‡„OÅÒ[â~ÜGëŒ~\è'…(ˆº¾®…$VÛŽµ¿c²,ù´û@Íñz¯€Š£Å æ‚*4.h;ZñiBÜ”\ 0¢Ÿ¶[Bö‚bf²Ô7¯G­š’8PýoÖ0®£hHÛè…îüED¦Ýb‰[Â'&°5…I…ȤW†9,[ŽðÚÉFQKóíÕdS1Ą|ͤrqÜamà‹vF:«hÂæä¢8c´7«Ónš,MDÂÛÃÊÐJTød¾§¹Â(ÈÞ¸¶Yèzõt$0õí­K,LJã6çKfž;§»öÚ&-úÕlÄØ‡9ãǪäÚiŒûZ°ÝÎé8+¿%[ò¢?Õæ¤åéJå“™äôÔÕ —I-¨Q<¶dòµs`)&ŒŽ~äYÍ?L¶«: #1cìý SOøx&f%¢×’(sÐ'. DÖÞ9£QÊ” SÆó–‡|_E·e˜â—±Òt/}Ô^l|Uù8Ð1‘ÀŠüA1óC‹ƒ™ÒU–†hð®ñzpò[fñ v¼ìÚÛoòš±®tDqi„Z$—ˆjÐ:ˆeø®p‘ÛÊ·TÔÌ;þñ¢‰¡Xû«dRê göÁ>üêÖŸã¿_Y3ÂáÒÁ-1TÇx4 ^Z¡ W§ `Sx:8f†åòP#¥>r uzò§½LRL Äz’(ê#¦ù”f˜& /}pš~»Õ< ƒô„+é#Ðöœ)ãìüÛ(­×KÂB¼K)QØ'Ħ¥çbÜTP‘uI$¤°Cþ­Rƒ [ޤ ðÄúM² êQ/ÍàÜB·f Ž™Á^ 5ª;+/LŠ¥Ð{.Ik¯ óÕ•õbœi'ɸ؃–G?²v,Ÿû÷œ„•oáØÉe`BÜiiGK£ø~¿TnP)‹\ÂÁMÙ/øÕŸ0c®ŒèJ&iE3ñCïÔòtί[A£¢£lwqñdà¯ËÊÚ…L‰Oº»a¯œt"õtEÒÄf›­bëåík©W?>(; / zúéFqϾLùR_*IÓ3yw|“Q¦Bàñ¹'œÿû64KZ¨üÆu´ ­–ôHçn ¯å¡t À®¼œþûœËphk+þÆYGçz38ènˆÎ4Ž"ò!,·ž.\Ü‚h-l»Î#n+áµ¹{´Þ19D2è¤iDÄ2ßßì«l^¬3¿ZíËv2§ãEœZ×âª=¨©ÚÚ(–³ø +^ç!9BY,Úµ U¸sÿŠâˆH¹±‡|ÿÛìÂT‚æî÷ät’=÷ˆš16‰`Ôñ2xï÷(D$JCǧ[4æ}ÿ²G1Ãc® ûÀè=ì%_‚Ý}$Þ‹u;˜äEÓ×—9>j²Réš,b$Ožm~Û«ÚÊX[Š|­}»¬îcn8®á¨ÿ„„ýb>Åøçþñ½¡¼Ëì¼pùñ•ï\h{*íya)fd¾| 2àÏzNò5k¢·.ÚxÂ/´9°¦®Wî@±Ñ}%Êq/5¤å ):Œ“Š Æí„â:Ž›ò¾¿ìåe£o®¡Öå}|0=åë÷å‡:1Xò³í*Põ|ÃâÜs£’%ûQñ¸JÒ§é-bE¡] Κ\®ÂÄ¥x,z{*C³˜?=(îM—ã¸òÆ/”5V¨­PbëÏ>êº ©.¾0åoÒ8ŠÒ³NnŸ™^·ùÒÄb·ü1¹±ª<;f†‡¨¸W)+¹~^ñý‡~³ã™Fóâ*ø@MŒØè¬–™úo"HÅvï÷¿oríJˆ••E,.òÕò£´+Íî5´Éº( îµézµß?pìõÙs Ú(x0¿yœJQ®ñô´{: wôp¤ ä†þ甌hYJŒp­U*µ°iž=¦$)ÛKmQVf Þ•ŒköÏhc݈ s©¥(>cX±ï¥#zöÆìؤš±®`ýÜ){ÊÓö`8U«!Ô}Jˆ×wbd<Ð ‹ ²jU2ò*ÿ=T?•«D‚Jä; é½”¥ÅµŠ›Ë!ÅT{µ€l`Ö¶õh}÷L°ÉÓ^ožH ii«²¶ Œ}6Zj^LÚTÜ5wBÛ^MÝwÒ, b{ón¶^u:ˆà5úe?.ÍÔg­DÁ>’”oº >7pŠ$¨œAû!-r4’È,ÙŸ†ûH‡ŽôðíÍé ×½5é“Q´*v§wºª˜wTf81êãrþcHÁ¶ªíör¯µ#·üÈŠLùt¸`)7!9}™gÓXT©XâX`µEžƒiÌ m¿iå8ÔõøØsT!S.¼K©~H=üV'?±:óûbj1Ûsoêâ俤p}ø€™›Sñ.¨<Ÿ3@6±h î§YßHÚO î€jù!/d yà×{Ȩn~¥äƧõš¥™îîý³ßPÍÍ©Üí†Ì¡ÓÞb¥º$®ÂXv@’ùt„''+·)ý%Vláê[6ÊY&É;(N Vyld#BÏçšYRŸWéÞ"——%±<î¡ó0žŽ²ö!·þÐcÆ,º!»g¨ü£Ù¯<¸vþNã©„Ô·×qÍþÖ`T{RìÝÊRgWÔÌg@ÜÜ1`Ù­],°‚j"÷Ê™f µ…+ܽ£¢Z?ÛÙŽïÈb™ Ä:8îÔ)˜ße<ÎvBix ß<:=­A‘eðà§Þ1éÜX0Œ ²¶1“´ ªKS¹y]´°  *¿!‡ò»TÔË.µ^?8i@L{Z'?ëì'ÈíK íï÷'ãéMücM›y;+Ú~ÖŒx\ ý5Q3ÿvÜQˆ=¬îƒEé'—ü‡3j}]z´ý›ÛyÊ !!ÏÌ0°§U#>qxVûfJ$GÄ;Jç”6Ö²M[ë©·MÜáaP2æƒ »hÚ¾¬~¢B(—fDÂÒo,š¹løú±¾¦[yÎXåj۸Ⱥ¤ °»îºa™M_Y*Òèî· ãn÷ÔPöNB1÷\¦­{áwk]w¹§‘ø!9“&†67dSÈ·Ñð¾$PüIz;§©8¼‰ó¶ê³ìÚCàPø:î«ÚIíN›>> ­Ä²û¤]éT: ¤ÌÇb=—`¼¹¶« j¡²"axSÀ\®<ºDÉZ½¤¬V{ÈÕÓ¶ƒ Óeœg˜©!¡œ*ÅÆ9Ä––‘‘Á>˜ÚRF¼ôü0ˆå¡h_ùKWv90Ž÷}fðz¡~5®r£§ç j@íÔ{GƒÒ¶ãæ³EÐ|+ïÿJ"DûËÿÚU`—6]/ßÔ·„& Å“w+Wª’ï¨\)czÆ•d#‡²nIzƒa,G»^V_›r¥eÅü[®šG©ÉÀí†GMÒþñ ÆûyGp_’dºYˆèµ°ºs¶&>Š|sl[G5øû‡:Y„“õ¹Â%Þ¨&/¨ç"µX”ß*ö¶˜½™–Õ)èw‰ècøsÒÜ«æ°eõ6DØ'ÁÈæ‡Dû#lYаwL¦{œ¤}MîiÇÌ$ôG®„ÍŒs C]?Ñ?õȯ Ý<Ó.Ê}R§ZQK’ª¬7±¢î׉0ŸQ¸ÎsXô…¯ Ÿçûõ;{Mò…ÞtÎÁaZ’º ­|󬉻ç/LŒÈhÌùOîü$G¾¸¸ÒÚ›µòY ÅT)Gb⹕‚êÛ{ÀR•¿ü8t|¾˜œÖsH‚l´c_#ªÁábmZP ýkf¯]M)šàÊó°;ÿ|ñ¥ÿÈñ?€`S*›/ËY5˜ýq0G¯Ž* Ü ¥w†Ì•מ†«8Ø™G¾6**oΕ=ÕQ >>ºØ²ãˆ¯$̈ÏÑÚÚÕãeP `'7Ï"ƒ²N¨±¨¸/‹ê*LmãïµåÝzÿ&W.G†ìòÇ “yÚ?û­'X .²î1º¡Î[*m‹’*€]³lÂÂî³lŠLnîö>P1ß>…£.õWÔrÉ€«x\T+Ì|€¹éÔ`ÅØŸ{{l®vŸT(—!XŒýÛ#ºó2Ó‘ÖSˆ.Ó’ÈþíêwTUašë1Ó²¨ÕÛlä“l»¢#4iÐL0I¯Z‹œŒÛïhqg[Ìàóc²¹º£²+&_ª^™¡õË2*¤¬ã“.›ƒJj KUoó«¿qW¤5[º>%§p"Øb :Eä°KùÑo y˜S\ýõ.e!ñ€¨v…l÷Lïz‘Anñ¼Sú]Ã;˜=®ˆDòl…‹¤—&'ð1÷é™Á˜g?àð½Ýð'Á‹Ršs ²O¸Œ—¸-•Lw+:¹âvÒ«äXås­zgRøvi¦Dðþe©žN#©k’Õ†²ÖÖËÂd1óÍéªï„‘^GÄ5Ãk®­™¾úH-J+Çëù]VÿųQI½·BóWÇëÚV.!X)M7øA‘B±÷ï ¿M&êH+¾¦óTÏ¡¹TðU•à¦'Š¢7w¦yâáÂfÜÌ™‰÷zÑy‹ÍOÙéT¼-¬EçvdGEç~°Ž±9ýc¾îTQ!§5rêÜhþ§=Àä r°Õ­lõíói¨ ÆQ`Þ¥zižŽyÄ’¢l›+ )âç/.v6zÚÍE¶“’²0-]ä§³JèJ DûØ¥r $ùç4:‘¸òìîµ`&:üUÃ,ÚÕ9,Ãõ»{ZÞ6’û>YYœÓu:¹ÏtR‘µ`0ÛãÓ¸ñÄ$ªH*ÊᦠÔÐݯˆ»a†nM0rɯ¥?Þ8"»Á¡6’ÈÿµX‘“3¦!Ó•Œ¹ÌA}8Ò°B~ír±' RÖÌI˜N6yF•+XÍ´R[F|ì%¢á¦dZ¾"ü—¶\ºØî#ãôç|¾j !¡.%Ge‚w,?#÷¥qeµº7`<Ót_¯uß+½iÙíáÃÍEø`ƒÜlh„o0—%\ר½eîsg=&Êš^øë¬2ÌÈq 4ù5´³N: A7F§JJ_XA\ˆG®Ê…Hþj-£Ë¾£ü‚J‰rÈ,Zi,|2f}4%‚Ì‹€´Ì˜÷Ô ”æûñãˆo˜^VGÄ9Iõ. 3O6:3»V°2ÿ`¹9y°Ð yßÍp ÃÝYdúÄ6cZaoà ZhIøÎáðAwCwÇ4…Ú7¸Ø“ ^F_e/b®³³ ;.<ºfQ €£¢ŽÍÇXÓiД.—ñNQíõá“ïv9Ÿk3Ê£3- àÆ»Zµ4å«ÃÃF¤§LRT¾4à›63Hb bÌâ-ü7ë%«Òc>.îFöÉúb8¥  wš(RÇæ˜Õ1!‡Õ—ºÄl9VÖ'iRþ‰•ÛöH’ßUzÿHØ?0_ØÒ°ïòX¡p4¸g‹‹¢~ÃV9 áaLÝ…†ZwÇž:š{â.Rek˜¸7L¶VwŒ H;ÏçCfÀª–ÖôòÕå!l¥k#FU˜V¾ÍL´â¾)ò6’Rü¦\lÈßç†Í|N_E›I=‰ËOGÖu¼|™¤ê¤{ÉæíUæúÂöopjŸQÉX Àw¢óF>Í=›{ÒѹßùO¥µJå‹õDæ×ÜõM.¸ $ì̳¾ŸÆF{&ॴ•¤öˡԲõœP^#ÜÁvƒn Δ*Sëp‘–^øn±'ÇÙž”ÑõÖˆ*4»[¦öù¶XÐêÞÀþwB §">ȼL1>„H™Î0SSÛ$´Ò®œ×ˆÅîý1>K×Cí­žz Yƒ‰î©*zŽs#ƒc< 7ƒ!”2dÆ©À±w œ¾iXþCså6¼õP,Åš¤NÊ#GöÇ¥ÜD JëÖbNáš4èÁ®{¡ ö=ü·ö”ë^sýÈÉ©2ƒo”\iª¯L‰P«,8.ŽˆG=cd!ú¹½¬J¿‰i䵸ì¨ù=4Hü«l59ÞvkEô1áÚKÁ” Ÿ·?Ýj¼÷Xù‰VCšá Ôÿ þOŒmL \ìm ¬¡þq8ÁÙendstream endobj 10 0 obj<>endobj 11 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 333 420 500 500 833 778 214 333 333 500 675 250 675 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 400 275 400 541 600 500 600 333 500 556 889 500 500 333 1000 500 333 944 600 600 600 600 333 333 556 556 350 500 889 333 980 389 333 667 600 600 556 600 389 500 500 500 500 275 500 333 760 276 500 675 333 760 333 400 675 300 300 333 500 523 250 333 300 310 500 750 750 750 500 611 611 611 611 611 611 889 667 611 611 611 611 333 333 333 333 722 667 722 722 722 722 722 675 722 722 722 722 722 556 611 500 500 500 500 500 500 500 667 444 444 444 444 444 278 278 278 278 500 500 500 500 500 500 500 675 500 500 500 500 500 444 500 444]endobj 12 0 obj<>stream xÚ¬·sp¥—.ÛvvlÛv:¶mÛì˜Û¶m;ÛNÇvnÿ¾ïÌÌ©¹·êV3ìªwùYëYëÝ{“)(Ó ™Ø™ŠÛÛ¹Ð1Ñ3r$MmÜL], E622'SCK{;QCSn€º© @ÔÔÀÌ `âââ‚!ˆØ;x:Yš[¸(U•Ô©hhhÿKó ÀÈó?,#-ÍíäÜLmìlMí\þ¦ø?T65¸X˜Ì,mL"ò šRrJ 9U€„©©“¡ @ÁÕÈÆÒ kiljçlJ0³wØü[ÛÛ™XþÓš3ýß\BÎC€³ƒ©±åß0ScS‡L´S'[Kgç¿ÏKg€¹“¡Ë߸Ø,íŒm\MþðWofÿ/@Nö=lÿÚþ&S°wvq6v²tpü­ª *þoœ.†.ÿÔv¶ükØ›ýõ4±7vý§¥Ùþ¦ùku1´´s¸˜z¸üSËÈ`béì`cèù·ößdN–ÿ‚áêligþ_hN¦æ†N&6¦ÎÎÓüÍýÏtþ«OÀÿÖ½¡ƒƒç¿¢íÿåõŸ,]œMmÌèa˜˜ÿÖ4vù[ÛÜ҆៑²3³01þ[oâêð67S§ ˆòŸ¡ú ÂÐÄÞÎÆ`bjà gÿwL”ÿg,ÓÿÏ‘ü?@ñÿÁÿ#ôþß‘ûß9úߎøÿöžÿ{jqW9CÛ¿ 🯖ÿ—‹¡­¥çÿ“ºé¿A)™š»Ú:ýw³”‹áßæ…ìÌÿÀHÏøo¥¥³¸¥‡©‰‚¥‹±ÀÌÐæïdþ¥Wµ31u²±´3ýË࿆ cbcúo6 Kck»FÍöït¦v&ÿø_Rþ›á¿^›ÿ2(ü¥×EÅÓá/–ÿ…þ‡½É ÿ„ Û{¼é˜8XtÌœl¯Š‘ ÀÅÆâûÿQâ_‰˜þKþaèâdéÐþÛçß ºý_Ÿÿ’tÿ[1;c{“BÙÅÐÎäïý§â5méèj*%ú·UfF.Fæi]œþú¯cÿÛûÈÿÚqSSSc˜³èƒÂÚ[ì×MË âAmm¶K«¶ÄQ[•‰N½$šçå­Ÿ·f2–Y.MNÛ¹±¶¯dOCw`g·#\Måá—ÔCØß44ÛÚ±är[fBtòD#ÒÃÄÝ>ª ¯ƒ÷Gš4<€ÄÞÌ·ËùÅœˆŠŽ2æ}ú_ ÌŠÙXv¢M».îÉ@|žŒTÙvÔÚ_ðšºã~hÐ3«+/JßY›^¸¸šÑ–¨øW@ÚBàù¶‘(üvÆl4:,n´±R‹l²éÜny²¤6EUiÜsÎÄ3·ÛÃÄã$åµÑƒ´Ò¡,žDAEc)/Ù²Ïýsvk Ï£Òî»ú¼RØÓÂF­x3ãÍËŽæ>XFAB“ÌÕÙ]âàÕ;lðªË)‘@™L’€c˜µ„.îÉÂ{;È/çs¡&l‹Ýßx JxÐócPà¦Ý‡JüÞŽÉíþƒõ ·Àq(/¯g Ò¼Ì%È®ñ©ú6L’ëlaAÁÕöÅŽ ÕB7V§g²[»ô%|¯ÓL‚Ân€\¹m2庸ãVG·Z jKíÕQÂ;Áì‡åR {G}h'"»›ét)9+]Ü·}-qÈEÏ;Dèk‡!ÛÐ_aÙRí˜ÅäúGÕ°æ™H Ú²E úžDRÝxVß]¨•dˆ¡<žÇhü‹2µÃÓàü ò¿”;<ó¬JGâíÄàNT0„;.b5Þ2›-Ê·aE2îü™e\jÑj¡ÚVuÚ6|n×™ö³“$*MÛø–cýãÑjh,†À‰Ý±Þ¥MvóµR( ×8…´`œE[‘yfcò׳Nj¹ dzâ¦Mî³ø“€ëá! QˆUJücsƒç% _ÕR7p„ïW°ªz!³¯¾òE²X3ôËÔ×µ%Îw|dºm-Æs¤ù^³à¡$ü¦ mÅ—×Û¼MZ¸m°M|¸Ø!‚¥‚ÿ>j«ß•:2+ Wô¿B6µêW´îí»ÍÈꔺ€yø„Y±Þ#ä¯ÕÈVnÎëï½å…I#»Sg„ˆ)áâÏ™Æ-ÙåTôÝà<œ¸[L“½¡B£Ì]à áû mQjA“!ðµWœóöôË1¿œõ…n­Ã”Ðqã²<ò‘Œ”µÌCp‡åÝ7<–õ€òòvQä ù¦ñš ð¸§8ÃB|ú«l²:jÅ´™ò¤6¾ãén˜B¸Öø]*ÛŠ+HnØÄUÓ¯}·N•x‰6Ia{ê³×0¦ÎØiô‡ù«IÞ²½˜g²•àWwíOi'x£ïËF'ƒÓê0Ü+zÄaš5rÉH¿[ÍgžÃO)|¹×bvÁîÕÎ)e›|•ù7‚°‰D·.¬Wã?ê5ÑV2Ïê9U±H½6YÒ'î´È™áuv¡ŠïÞsAöâQøa]Þý$úŠÄ >d›COt*`BÒ}1Ê?Κ°NÇØêÔ—’yŠÇ+ÜêaiõÄŽ~O3¿ÅÙÈ 4DÞÓ}¬d!®ÔüV¹:{ˆ‡œÚïoÏŒ{Qe˜âÈÜÆ8V¡<`ÕôÃ@?·.šÓç9 4”òRÑn”¸¢å½ XÈ…Ò6et#š²ÿ¼‘n²ì.´ p![¿îÍø hµõ”¸~aË«nu3½šw …ãq-ŬO^ºÖ*¦žrÇ ³’„„ªƒ}Xm¬ý’‰xØeWÎNúPÛºò\>ÈàÅ)V§Ô t•ÖVÅ?ìÊYäsPº)#¥xÆuˆPÖU¸åÑxèJàÛÎåÎÚ¥ø¸R޾ h°p) {®ÿ )¬DZÉ÷0§‚iæÀ=¢0Èy§—Ú)-Δ¯ÜMٺ¤Ä6HÊh.)tJl8gúGܨŽÓöœ åùz_ƒ}/s|¦4™Ò“ÖåU•^ëªBšrÓ‰/ôž!P[%W[ç)ØHÏœ5’r*ÒÔ^¶{ü´A‰Ä|Ã¢Í Ù]&4„ÔÓ-¨o:±äTÓz_Ht†[²íÆÁ…véP.éqq5œÙ™2)’(v=¸7WuÕñô9<털½¦ÑÞ¸ä™;dIST…?œ 6²…3†ñƒž$Ë`êcÙæúK¨l`Ĥ’‡q½ßU¢5±Â4QèÒ‰€KÙ;¾³×Vð>I>µ=2 = ó4k‰¢}d*hÒ³ÅÅ.ÄnЀbð [˜¶‘&ø~Ž•_²|jkÔ8„ ò"N·Ž/«¤ð{aº¬ž9}ÊÐìŽèž>ò'\˜ºäf–'>õùö[ ¸~Nâ­1)Rf˜òÛ}"ç^à!³0@ÞN/}ÎŒr€k(MÏwU¾x°ôÝ‹`4®äª¼| @_|‹¹ˆ-<âéÂì ÖɤÆmÛ–V"ß“ìÇtüa^D1†c/!ÿÄ„Yþõ/(`Ý>=ôÄÅ/V<¶§çc’<…Û’¶–+u‚‘rX©•Ÿ™Ç¥7U†»­˜™³1.¦ß3a«VY•Ó‘°œðÙ.NMg_ˆàsùA8¹5zS5,4º5I¾‡ï•<®‹»l»öMÔöÐŒŒÑš]šŽCžñà"‘^dŸPaýMφ~¥-7žŠmœ»î^‘ÇfÕð¸ã_å}ç3qî+5ÛW2]N½_”;Sıí\RÙ}tv´>œ–Æìa=Èx”BŽ9æí¯uÍãz·®j„ $³øîNS †Î¡œ{¿Á¯3.ÖÒPp±‚¤%¿“aò-A燅/h6nØ+GV¾¤¬°· ®AKììuÙhŒPxdlOry(_%ΩìmâÛRÚ‘ì(nÏ…ÔÍPäºd}ç@’»D|YyTœÛ• nžMÃfeÑÿ:Ëu—œU:òÖ‚ñʆPUQÑMü¢ìÖ¸I¡“|¥)Îq-»é9÷©WÀ¹$gÀN„Ç¢(£ÏE>-ñ2=5åîÞºÏÏaªì¡µq ¦Ø‡?•о$úVÚÖ”›E|¿æìÈŠÝFѾV[i)d¯? È+lNÌþ͹_ê«pX1‘Øf[b¢ˆñø*¶ ‘d=™3ÅüŠMØ[Àv6ƒÕÀòÝ ÚÉ£«<2ëù»!÷Šè[7"{DèDµ^³Ô˜¼RŠÊ<çyIåÐûjàgûÓîÄ­ÐÞì§‘A½þjžàÝš:Û’6¡û¸?xe\qa$µ÷¥6äÖ£4OùÅ[3‘ŃÊ|0J@k& ¼:(„1éÔiÓ‚h0'ôäÅ"þQͨ˜¾/âïuã«Á­×Ú²ùµBW¸þ¼é™Tç‰KkfÇqÆgÛEÂðž1 Ô,.ØÁu¼n(íýýAÊWcÇ8Õqáªb× ^¡@ò3³Z–øƒ÷).ƒk½½¢,ëPm×sâŠ4ˆÙÔËÞ£Ér ˆa£4¥¸P+û5ß‹òèS¸HðI<Ý ü¡Ë,Tynµ@‰jÛ-w0ú*ÊZõ{ŸÎµMklu¹ìš|_ºk0U>±—w…ïÆ°Â1”¥0üÎÌqGíÜa>B]u M%á&ÁÃq ­Ä#ø—2S„¤£ÓáË¿j'E—„@ÃÌ ”b)Amï 0©ÚJe>äF0õÏ_™š×#CïòÖ¦0”Ä/s  Ž&7mHöY·S äå-“S{“ž7׿¤T=y,?žÛK‡Q]øðÈwBp¨r³•Òʘ‡“P‹!äÎ5F2n_ëáDv/r ßµ®ÃK– ©Åz…©N¢õÞPcÛXOÜÎ %PG¿ˆ#ûéÎʉÂöÄÁ¤t£ºP"H˜’7ØOPLÙ†OñåW$Ì<Êlbmå—(h”^Cït <)C€op¿ xÇ{^…”MtÔ/Í 8Á’ŸÂø@vK~˜cÀiº+Õl‡'ƒ&Ì”®j`*¬æ• ”ÑßO„-½Ë\Èïó$Y…hë?\^ïIÒö7ñ:ø‘ÍA‡ìzÚ¨r3'ž]B ݰlpa°é5–µ75OT%¥ëžMX©:kžÖV¹D¹?é•Ê֕éŸNí0' .cñaGöÜ;§¬óMX‡˜=¾pãLŠ’|ÒÂá|-þy‚^”ô{'7+–³è¸. Õ7Ò hŠÄf.ñÚÃûF`$À„¸-=JeRØà§õ¯¤hƒ™ˆˆª }[57çô µc”üéIv—SÙtjÒëÁF¬sçG‘xǹ:U­×i¹af…kóµÖŠ/x~» _ä–É:Gä Ç£- OVnÉ?(횦=A¢øÕ8úAê?>T××V‚…¿k>`ÉÊ?šTð3R¸É-™aþFQËhðÛtÂà7Ûq•Ã^}3\º£…£Fe]®*«&R \Äæ?xçMÇ<ÞM5«¡ã?^ü¹Œ…;øPçŸR%d{õ·ÿT`sñ[ÚÎÒ»8ÿ&EdŒ}Æøä—sáUóÉT¹èéß´`ÃÂý(*ÉîR-Z,Efh*b¶ƒ‘3‰el3té.ƒ6bÕ_¼~QѤ—d;FÉlQA6ltXKú²°GªÇQ''ŒÖê'Ï’§a€þ~؆7¬§ðX ZÿžˆÈÙ2ID(Ú;*p1ÜxÅ[´áæüt™°ëQѾé»ðšÁ“YÙ*läèÛ}ðë ´“Wv€0.S¢âMì˃ËTeé\Ыu}œPÿ ð3#ï'cU?ÐÃÇ”©šèòÖa¡úè]Mš[/-C=XW­ƒþÖº‘kGv¥rÌ‹Ö\k¦ZmŽüsC?¯Á/VÏ7y£ûü€nÑœÁ›ˆ|ûð2¾6êÇùe…"Ó‰UäãëÜUñá—à¶°æìjÁ=ÞFù¥ž0¤1D!cƒ!ËjèÍÞvÞKçÀs$¿mÍv õ…GlIµ< E ¬8½bÃÔà_ëÍE[wN‘Ö+ÒÃX§'Ü\q{&Å\8Ïã! 5~>;kF?æ2ÛOŒ¦år@Êï;ê´}ý²pÑa„-xÇ.%6¯;j±ÏjD@ŒÏcçÜ?tíKuR¢Ù.„Ë`ÊÞµX ØbÞúJ³°UþÁÄÚàÉ1(XäåÜ7À&'.³õm”õø;­‡õö›½uÃB¶7&÷Œ „ÏJ{nº—îç[¿9¸â¤Þ7ÿèÔ§{žç£ëûá<=>Q/Is‘ù&ôé³jvWÀçᎠzÛbª& îûåé=x‡ï 8d@@(3ZŠƒný1 áÕa'?v$9Ê+&¬Bhk³½]qG¬är TË_X»¯7qkÖ œž\bf+-ÄhpHµû€©rÛå’g’;Ë”?l§’o¢zjÿ`ïc’,®mm>L/×2íq(pÇʹè LápH¼œÄ$¤Kßm'Xtd¾çX¨R¹è´OPG ¼™ú³ê=t3oõÙà46—­µ TnÇsës¤uà¾QJ!öÝýÅ´X öw6·øêÇ4-â´ÎeñÅ9 Â.åÛ*ˆô;#½¼æxÆÌü›…ç!g†-a ;]hëo=P½.I†KãWؘ§®Î„è–¢fºðYŒâLP/Qÿ豨µÈ‡-F£é´2‡~¾®#€ÜeºG.$Rl%åiY„ý¯“í†ûâ2ÏŽaåû½4ÊnÅ1®º$ _%Yà ‡“:;œb…eŠóëbºŒô"_$‡ÈAºEç\þM€~×Úƒæ°`ú'Ù|5N ±®"YáÌ]‹¿20WæF$/,@«ÞQlé%uÁ™``¦ÿæñAã‘> ‰"X}Õ4s*&©–¼Êçp/S’%rͲJfÃG|º96Í&nCä~ol.¹¯"¢*™‚ã£\POÑû¾«?ÕQ»˜èò¥ƒÝ„I£ÿ°ÇÓñk;ÿø5°*O$ظ>Jq7]·ž¯ëSýiëíúaýƒ¦¥g7 qÔ®±Ænç’2±`s«ú”…T¡ék&,!(SÃvo!®ï€Zÿ€»Þ• ¦›ï¡~Š=N‚…†= v&êú/žÜØN˜wÙ™ÓÒ9@Á‹ëŸ¤åöÑB·3]3M¥á¹³“CHeÄñGX;"®@ÞÂÑUj!Õ7)¡ôÂn>‹Í©T†\ЛãÀç’b¢œlAìÊÇ!SqÇj+ïä`…•nnòˆâҹݨï—t@öð4Ž…fZ«g¨eAü6í´ú,²/dÖ¡Ü-.DËKñYŽòß2íh½Ø¥ŸœyŒÄ±À[[vw¡‹+ÐS‡‡3Bõë-¹–¼$ç’¢ÖÆî#Ü{a\ÃfÉ¿+Úâ0$P$TíÔM*~\ÚÞ‡üSe;”¶šä›yo«pbNÙhéÁ ~yÿêo÷±Þþƒ¶üŽÃë勵z2}ÑšFŒ*,7Þuñb‹ 2.À˜]¦6®!&R9Nì°Å Xð# WÙøÃ×Ä-=ø‡ùDCšÕ=BáÝŽ}+¹ËG‡ й95hûÓ2fçìÆ“~nXez;®"*Ôç!cÁ‘¹—Ù]“ªžÔÈDY~fˆõ|äyA˜·Æ,á+vÂ*:¡Í UØí2AÌøï_O^™Á¢9”äÄo6n7¢sºöÓ‰ëj+ÌñºÐõe.Ç£kXhÃõ?›è‹Ñì0ûA‚2Í+ízrg€‚~cSr´ÙÛ“ý ~zv1 î`¯1lÚ…#ç!}ìPPK½¶É1…—„'æ_ƒ~kíBUemåêT]•yX&+ƒ–4IGž!"MÅÉÇ¥2&Ðr4éK(Ѭq¯AŒV¡fú% e¹Ò$ ¬I¡AGÑw®ù”±¦/µ(læ>ãazÌ0ΰVZ¾ú@w†]§oØÐZFü ·Ñ~ì{Y“«:öÚ\èò'Л5#í(aRùý´>@*ŽÞxpd¦–E|y?Þr¦/©°¯ú`=Ë“†7CŒÓœÙuøÍGÙxä¨F¾Rk°ÆpœÓQ8ŧÒtš'íTg7Ρ¡ê]÷™_.“œ$¼ÑÊc’€!ËÌ@<Ô9±+ t¾0Ó9‡àóFÏ8çV¯i4álÿòh˜4ÙZ“*éåKH9Ã…{=-èØßÓ/ú•ò[[Ô&Y<’'H«Mh}È<©p"ëqÆYàw¬ÚÇ0ϾÏÕ‘åõï”9ã¯Æ@Ó^ÔKX?1pO>Án½KBÕólÍrÒ„oÓHüö=µˆRF„$ð5kŠƒŠ“¼«1_äcL™·þ˜‹ae1å}¹,ò1Ç5Mê/|“ðw3ÞtAªÜü@àæQ{ º\¿cF¤ã"¿Ì<ÊÄäµù`×ãÜ$Š@z¦õ˜ß;;l—¥*t\;üô«ó!ƱÄTiÞ Éˆ^ç;ì\‘ã-£Žâí»”&w*¿·3«·Ï#™½dëײËîüÂÔ¶^Wé–}Xì<ÐìëÜøx ‰Ü³µŸÂtÂA@N-å0+ï±ÁÓCÕ¥¹>! úVcüRdÉ̺t×iŠçókEã#Mví½Ù€@vµ÷Õ»„ÈWTsaý`*ûI‘¥]£N;wªÁ€1ü£íGìDW¦ 4e©‰à’pˆðè(t žw²6‚ä½:á Äì1õ:(¶åy‡%1Û%€ˆv‡fuäõ¸Jƒ‚ª+Žù|#–à­½8›^\»ìc3Dœ-©ã¬$"ûý‰”BG!ùõéÞ¾îÍ#;šhWô²¹:„¶;h4„Îk§)SQÒOjÆL,lERɸ`\ez5<¾MxvÿÝ{Ð\‘r7$ƒ¨¶új£܆¾&ú&¿/÷çOŸZq!èÞ°»Z…Ü?g®SŸ¨æ5«†oúÞR˜h8lž-•µœo ¹QWÓeíjnDŠ#ï7˜~íüs>ïyQ…©ògw8^+ªÎjkés݆ٚÚÂd#sv“Q'Ÿ(Ñ~œÔ×:)ËLYÛÜo¹1»EB†3¨šÿÕÀ/ÇIu÷>kE3½@§€mÛLñft'ÑeºšîØ©ŠTÈ ˜7‘Hý¡{½àáø+ýŽèœ«€¢€GׄŕùRY¾ØGà¼úšC¾½·R¤av=¨Ç)˜kðþ~-AÚÅå¾ÅŽ¡R X™mW“7Ã=mO4tH>EÅØ„år:7A!'¸²3\*0  ²I5ÆÈ¶.§ä%Ϧç‡ùÑèÅKx…‡œ¡1N•.Û2ƒc2½†“ŠeŒÌbv)ö1véLƒ${Ö¼9Ïüç„ÀKªQ¨ÝØ/¦l¯+ì”÷™HˆS7`©g1æ¬ð±y³¦a¢mÒ=è"£$ËÍã$5-Ò«—Ï—n*7|5ĶÔ"÷ùnì xù¸b» pG¾n’ü¤_KSapUjÁÚgçe™Â æ±Bc„íý¨­{’«EZ[geÜj‰y3ã3,^ ù«-·«lfô¬rÒjgC1²>TˆP*z:ŬðN^énêçÏù*ÙÙhn•õѨÅ`êýgªA$åkK¬æB&jÜ4!œŸÕ¯ìÔ(Ó&u¾{Ì Ì™@$)}¦[JÁ«çÒz·IêÀôÊÝÈ¢ªUŸiAÁPÁ;ž£N¿ªH± Ì“õo0Z\jo½„cÆØi‹ôÁˇÒÜ%´çл•‹°™êÁC+ÿ¤ù;ÞSŒŽêÔ`Ï'táUkØXVôGöt”AeÉŒ䪱. ·ÑyŒGÞÇâ-+ˆT-Ž”¦%°ð”hî>KÏb{s¾,ò~­ŒøÜDIÔæÒ»u¾Û£غ®f0TãbA˜ŠDSf?)&€¯ÌÓè h«^“ÊÝÿdD‡ÔAΡê†1³,86ÐH¿$b?ÕMDE”Èõ`žz r&ù×4•F­˜–}X.Î=ÁëŸÑp#òDÁVŸX‹[øD!cܱ–mÇãPþÇ7ØÃóYê>/²ü¦v+¯9Œëb˜2®™û€9·{T0 ùLà],pHËÁœ² îÍ“›ˆŒ~2Îó:¨é´t7•PãùžœúMÒi‚”©¦CˆÖbç°½>­’Ól-,œ`Œƈ>RšC«O`x¼á±uœ"…½z³HÄð¡¥EHL*#!UѺ úi´Ž2g½lâ3äòåõ-âÀi[$l¯jTߥÕM½Y}§.ä ¥W Žbøåw†É¹·)%¶¸GçÓò/f„·ìXi±M9~€Â¬B:.hT=2ëd¸„35¬2„[«VF fª–jEr!n(qiñ\Þ 0Q|܈*иÖý¢-\ÏÍf¥·†–¡R¥¢3¹CîMp›õ‚'U­ÇvhÂÒ½ÏV£W{ðrXõðÕÈÇ–Œ\ß -Ï~8Q¼¡½'_#ên o׃Œ†Û©šh¾Ô³;ÎR%!mµ¢ä¬ÊØnyÐúL7…òåÇ ÝZ’ 6Åo(¿í1^ñ1qT‚76! róÒ0ðÂ9Äê³ù’ êÛ•†Bjoíßñ u@®» $}üÛ¾—áfCõ‘bËÑNêÏ÷‡Ò q¥ÖTÞ“å«Wh,@—jEWuëE²ùãp' ÞïGvV\T}»ÚrI¾w8´½Ð,€eK+ÈÒ·­?_Øgâ2ݺ!ÈnÞN®É&¨ï½ÿ(´Ô11ÎWIËCÁW+æËO”ÀXpú ²s\23½?éënÕáM«ï 7Èׇ6F¢“Ÿ]lIã¾D)1 )QŒ5ûÐ(Dp7.*·–¶/!TšQ~ì³;½4£Á5P‰B{*Õb-HDp 0Áßý>>íú¡%¤Š•«o&…&Çë{c§€;ÍìÛÕk¦ aîæ#'x{]Ô;rEÞ –d9Ûô•Òötæ› »U@NµJ]Ì"^\ôŠæKµ_ÒœBE_OÒþÐeu ËÒ@¤[*E:0¤a™«îšÌ§|?¬)RªhÆ û~êÿ éÄif°ÏðèW~”ûKÜâm÷Q¿pŒQ!ºgiI‘èïg&2óñ‘£T‘wÃQ Û)Þ…³ìïùJjC{Û d§<9Q-ÊÇ)ÿÆâ2þî‡ý ©ù¡÷e•KcoL”kÑ®ÒÚ¯`7¿HÝœF&Ò©‘Guq‚ yºuêÞ—‘ù¿MjñÆ@ü¸eàH΋æ—º„bì#Ø%x<Ï`Kf^&ûÓ°×@7͈+†§ù±ß¥ñ;÷šŒCu3¹ƒè‰ŸˆÙöƒZLQ½^½4Ù~±þÞÜÃ|QO­)QnÁ@§¿²Õ¢Ã˜‘lÑZ¼Âÿjã$\„ñº¡ÓL3ß••)1÷+Qá—w˜ì‡hLˆ¦ÁÈîÞjíoKmItN¹/Õʤ Ømšz/»Û2O kquh‹½¬Cˆ×°Žû¨÷¼óÿkݽD¾ªš#Ȉ.£¢6þäx‘*õ­'D¢ƒÐæÑ¼öés[«±-u Æ8ø x\hÆÙ`zŠÅ}^ë­’&[ÊÖ †.ÛÞ×5*ðVK´†A&þ($¯™TãPñù£cy‡_¨¿Jº ~ø. U’ù¶šø¾‡Bíáwêû7žÁ®Ææ„™ÎH_ÙJ¹n^gÀíÆmû H‹väœÚ‹ì'…:¼ô'ÈÖå0óò›©f“ Ñu; aÜJ[ke…¶˜Ôe *UGºT/0œ6í–˜`T®;Ø‘·û«I~‘Èź—NTµD škrz~lÎýÉ~–ðÂB¼WT+r…Œ\xÔåH›í;Gšl f8çT&ƒ¾kq§·‚ý (©ÔYÓäwX¦¾†kâ´R™d¶#ÕGrÂâ ºpíŽ^€,¦ä¥·ðÝʲ}†ŒÓl S3À¶/¥)Þ},R¬»Ãäg'¥¯IߢÅcÓ##qs%ZkVMy²–Cz„G™zþÃDŒF€æ×Ù‘qP¬"ÏYð0P Së§ž–ÐJÄ´MàD¸2&À–ÝB´Vá•~D¾Ç¤•vï6’•ÌÞ£t1É©K҇훞°™°_)…Œ\eòšUÌO‹xP8ãùKì!%.±õ§É»j9¢TÉ"¦p'5Èê°<Ð8}Nr•®/Éå+ŒM« ÃÞÁǯPY-ÁäÐÎZÏmø.Â`kÌÖŸ ôªÀ@ý ¯–‘­6ÐYš#qø»äñi®5ßçH±{Üõä£" FJV0}ß÷ƒ‘!}óc-Ä–+š¸ññ|È€èæ˜›PÞÔn¢mwzeGvíýåÆ9M{ããG•ê?X‘6†ÆFÏPŸ OH Kˆ5ïð7JŠ ;¬åÖ~£›n‹iWœï Ÿõ»îˆ/ ¶N‚ÁÌúô¸ óy„6(dEæ½Rè²CnåÌy ¾Î#l%êëüq]ƒÄ¾E+im=8n¢/ÚH=A¡žï¤yºKâó>r0GÈ)ò$*RLÂâþ—¯VØá–&äòV™Y]˜?jB>™}°×@æ ââk/›ßq‰Æ½ð:†ó‘“NÓÞ ÁÀP¿»,ðÐV ‹«Ï<•3ZTÛ©h[ÙFVk¡ìo9OZ~aE²•Y®VÓ°ïš VqSðêkÍvõ³¶wÍÝ£ 9ÐÒ¹4E9¤ }) *hI¡¹=èÏEňãè·€õªé߯DX§HZ,/dÜ—á‚ð”ó‚Ú»¿á„ÿºo’”=váäºtº:¤‡Ë÷ýr¿Ž­(ŽÜí×H‚³áç5a>›oð®Ü%'M–=ÿպ͟VŸiK¾Á†ª–\“üô¶öÔ¥%ÓÎFî‰Õ;?ïxvL…Œˆp^ÿ¾‡¸é|¢÷1ÅrS0ÊÁ[ÁM ëÙ^ žŽ ýçƒÃ0~óŠ3»îÝ/Xì²zòˆûhžOÚ ý¦þ;AÜXì+Fkù‡ZïX°ôèKs™ŠŒé“ÁáÕ«ì%µ‰˜åܘiÅNþß34BÅM«4föí>¤ŸóÕ³4‚”?ŽR?­8!M"ZA!l¶1/Iǧ›ð¥•Hüp»¸á9D-̹p‹ÄzAëªÏ‘kdË_ì¡ÏD¶}¼ÏðÀVx¥ë±IˆÉ2d5PÕ~`Y€šþœ>föviÁ(c¿Y¥— Ðg’o>ÁÝ.Œº ®.ëʹ…“ÎwkTäòÒo?¬¾h¦ÂšÞ˜ ["Ò 6/ÇvÂ¥”¸¡K·­ƒI\¸Íy˜F¼Á—(OXº¤÷Ã÷…5üŽeQ¾½aþŽÖ™ïJŽ CÊhxj“-Ïi„ÍØù‰üˆ÷ËI_”j1ì¸çræ¤u|æ2ûµr‡¯Ò´Ô)zl/1†…Q·Ä<Ö«¸­ùÎéYTÖBÿ3Ý=È¿x »X5Î}ΠÖð["ÎÄA_Ä)î&[fÆÖ&›p–W%mpÄD¸6Šƒ•«“ëR£äézÛ›o¢–üŠ­ùA›jÎlY¥ eÔŸwû³<7;Š4O¡íqõ ˜Ö-À¯­çáìCƦ!’9‚Dý¤»âHiäÑ™–½/·buq÷Ã3mŸ 40œ7~BªÜ¥âeÚÐ1pµU…Ý’½ûàqu±MAŽ$×Q+‡=Gñ©ª@¤‚óº 4s0£}Ìc¶úò.½a#Ã1t‰=ë]>Ê42Ö,}Tl°ÂâP"‰ÒÕH?Ë $üŠrV'ò顊ˆÎCËè ±–TäMÇN^³‰ºTé§Áö)‡¢ë{ÜBŒí:I‰ƒ¦8gªEŸ^òǼà Ðœý‘2G¿»iC&—mRlÃyÌe¸Ú¹+FO<—›xlIOHï ¥hlj¹aû¦ðygƒx‹ÏLÆž)n(aMœÒÓ{<šŽý€4Þ3Vb;5Q+”±ÒW`SMÃÜ1(ˆqk0a– Xl³æØ¯MM~š)ƒzÛ9r{»É鄬øöóÄ *˜´@«zr‹ÐxÀ#­¶ã ±åƒ+eý0øy&;þP²öÇzñYÐ4bñ©™E0ŽÏ™YÓà-m¢ÉÍ繪%›3€tÕ‹›i¸¶õµÍT3î~[ŠmÝ0¢' Àü±Û × »ºÄ„Ù7²äêm]‚Q‰Òò6IÃÓ´·‘)sÙ÷ë!ÒÞr{÷ø$7t§#PR<­wé'4ï •à=Gü–<6_äÖ|µ™«™‚œÛ#.È´6RÄ/ý{9a»Pݱé¨(0¸)à©(l«?vüDôÔb¼ìÎÁ<™ WC³7ü1¦¥p’rq×äv†”\moªLº˜®Ã=`a‘Å|ýÈ¿gÕxõÝ¥šü1JÙÍßi°73ÙØ•úY¸ö›…ÄÀ!s}¢áèÐÃïºÙoýYNmÌ´:Ù•‹4Ùá¡­åí ’ZW<ûe@nHÿ(ÃòI÷ש·ÚÖõNR¤}ÉIåf¦Á‡ÛÁÈö”ÍWˆ¨¸S²öÎi:v³.Ê×¹¢…(à›Ïáßíìð¬šðËÉàË%³ÝÚ6KÉ36·=!žUªn§ÜËŠQ OòßZoI7a§ˆ­CñJ®ö J‹l„ÝÛ MäÉš¼HÂ4Ǻ縖úîÊG&× 2Ý$#)ˆI7¾5 ,¸Ð`*æäZòš*Ôõ’á'8£ËT¨ß4õ¾ ·tAÜ\¯d”YzÙÀÝò¬`ØîëRd³RÏŠÁüÁŒ²i¤SUUdßÇç×i 9Evßõ´ß—XuOÑ“hF$J–ö‡v<Ôǵû·  òžµŒq넳]+ÚwýV¤{à™n²•ûAø7 þU?¡¿™,•ÁD“ç­‘Êsˆà<©ö¼Ê‹0™¯ðr/¬úÀí)ÿþ2y$^™USÛr6¢’OVäWéÌü”Ç^Aœ0‘ˆ/'½º®þtôïÀG‘`C< ‹:õõ£1kW)€é®.:ÂÅ7îÖÐËôT‚(þzoFSØt݆ýE¿9€|þT,‹½TdÕJ¢<”1†cJø |¸tßÅ&³Ë÷CáʯC¯x‡h?€-ƒœ@;@'H›¶Ûsv´=˜g)‚&Œm2Ô^˜ˆó¡¨þ~L]Û2cŽvˇñÔÕÒ‹ÓFÎZ…!—~NÛ0 0¨Å…%_T¢yŒˆ¾ÙÓ¯[ ~0‰e ó™õ›ÊƒÊA‚&¬q”ßhV»Á u8",ºxK½¬ý`Ülµ_¼#à7Œ‚B~\)QáN£óÐ.Î/’\†û0MA$Sojsi Qú.@¹öžkùl+ãÁxZÈ”°´™•3Œ„Œ°} ‚­Efìš-Î2³¼Ûdã§U8õø'§+ÜïªYˆ¿¥ëtîÄòhÕç<ˆmõÑ0ÉÁ ·‘9í'<üNn[–R.]1ùèéáî…ðRýx¨G <êáöð¾^tG,„D„!#éð‹Ówß²dRåºê¯ûŽ Âµ‹]2LÄ3©[-y¶!e/_ÐmÈæ‡‡×Yx¡fýh¬ÄÔvƒ“‚ÇMŒÌÛŸ®G 3DsôüŒ œ 6lשvYuPÖ‚ö©úg!ÕÒ—G@å­Xò¼eülíÛåÜÌß)Ũý¡ÚŸ´0!×ê‹ããÁ”±zLòQe׌Tk9 ¶b,޽YÓÊ,‡’Z(Y59Ð ¥±’˜—£cšôÙÞÍêÏü)÷Ãjñ’ƒBT ‡ì^èÜÁñ̶b>×y%A‹ø¸‘F'îÁ]n;_o¤u¡70AB¾Ç¥|Å=XÅ>„jz¨Ýþðkž ûƒG…¦â‘7…z¤Feµñ^°CôáÅ\¡óÊ’-*£±±œæm QNäšæÇŠyC°hæ &-‚­¦YIMç7‘Xm¥VÆLˆƒŒ ›¦U57<·ßµ â)!-•WþÅYÐ;«“OóP}_o›}-ä饻^WÓåÖ.è )~{ ÓRôë5)e}[=F`¢ [e\“CwwPÀqR@b-°”ñ²ïéÝL›§6D¼Lñ‹ ¤Ñ‹{í’pãøŠäÞ©#•€!ë‚w°ð¤±æGâóÙKòŽIîQ:nÞ]Âj£æ«Ô½Zè–kð—L_aa”ûB°õÀòÐÇ´ý%Gd1lu;¾¹ÏšØ Eo„‡lÞú†.‚œ¼9ô2È–z¬¶NmÝU¹¼aÍ8Ò*©Ï7d*Y1é²næçô–š¸ˆõ”nGÿÏM½öš îæâˆ¨ÄéÙüŽá  ÆÈPqc帇XÈÄ8¹€»äôï-Že®X˜Psóàrà¤6¬1ßMÑÞl³S1¢/:ä´—9ö’“Ë…è2;U†1òLK3Hõü3žÈnQ¯RB¨>×Újä}ñ29é6½šÞ Zqx™pU[}Ž(´éa×™G“s̽úÞå³”äá*÷/±Ð”£Ê;°ñ ™¬»™ª9oéKÎb¢dƒŽhgäUs±iÕ é„¡KWÀ0®C!Ø3¥„·Q r!g±ÉîÛ Ð €òÇUA’d=‹A—|¨3ýšá½Yç»}5•ð:<Ç VÂ8²$ª‚83õQ{÷–Ô¡‡v‡]ž¨e½ t7¯¾<¶ÌØÄt®ËOD¯R‹÷¾¨û  åªwb怬þ@ydú]ú{æbÊ Œr?zæVÇWhô“ݤxGeJ,?JZbl7ÊŒ¤Â Èd2¼?»øþd…DvO4 c1›¥l‚N:Õêôv*zƒï-›,,i·³JÕÂ÷R±U·=*I›ˆú|8þ‚%/*fW(ZgÂéÛ\ÝÜG:ÖÏ-vaЗv㻳3šêì'Ú>°í„ÔçyPW¥Q€ÐìÇ ´@õ§C©ù¡ËF¹vèÿ8x…ñupŒátP…°Ÿm5¡ÚŸA¡7*X~CÀX]¹OÈ]‘–Ç-ƒŠ*5±|0Çý¶|dõþÀrR¾Pun÷€*]VÉtuy$ÃË{4L¡»¢Ú³ð$rŸ4@ àþJ{l¸Ê,aE·6Яk8löÚhWÁÆÀ1UM`®…eác±î¸w{24\­hȯ¯L“=™Õ5PéÃðó›!«Àt¨b“ÒÐK"ÕÍYÅô;ª+ûü!ÂIïŽ ÃÄiñ*»70–9LóYÈøR°sÅ„Î1Å–£l JÇ_è'ç±-(dª$P¬œ+-F>fõÛEd0 ä#NÏdz¢ænÑm7-Š=–U©<ÙXçÄh8ír1CCÛ°d¯XaÇÈb;¿ f±?Q ²NpǤ™2–q,i¤#5ýœÒ ƒcdéÛ7¼˜"HNayyŒœQ¼1ôÞé饪"B?æÁÜh?_ióz‚“H1ÞÔ˜ÿ¤Š"¼‹Ì®Ûö»•b]D qx#¶1´çùf ‘ö#-ùaó.1}]4~Ä=£ /uÄçÚÕµdäšµÔä”è+»c˜Ñƒ|¥zäWË‚ôšØ}D/²Ö­C ‚óZŒ,¦œ0:ÉëÙ³õr0²f~æOQIffËÅÕŠ žÝ9wRH!Ú=êÏ6D¶©Pœ¥Fq$T¬„ó:¦,´}¶Q¦›ïƒª¾˜ÚÊôÖ³–€„÷q>@-÷‡Å˜m‡meòˆnèuüY± 9¸ebH„c<Žœ€ùŒÜŒÖ †dà\£Í±®v^ š×L¹Âþ˜}§@é¶Q Fl4%ÒX•+o¥z…u6N&òî ý @ö¿Xx˜ÒBêeÕCw=Tæ¡;I+p²ÚÐ I±´Ã šê ÚôYØX5“p`vÖ/L@ï0Wm"怒öªz€‘B.™;Wx•šµu)TTŒ{G}êc~ ï8ž”Ë%ûù)ôÉ“¨þ,KY]™ïkçèô‰Ì´èq8Ó6}÷–¤i þÒǰSªSË)Ä%\‰?wIÄF¯nÑü»À¬¾§íuŒzöÅc£X®.ˆS×®•Á˜‹‡¨#9>IÒ1pŽï$wWeÅ6Ïö[_e̼Åô.§$23M}™ìLžòÃ$SþÓ®©ð"ùÉô6Ëb >èɦóYw±7ÜH᥎|—QdNSã.´r¦·`ØJ”w\×ÀÚEi‹xÉÕ !ÒÛ²‚ZfÑA).L3Daˆ¬—Pc±:­ä)Q kÜm+®Á»ž«.Ê®˜é˜‰&gZ—b.Ò~3=§˜…^Di ´ZÿÊ„‚¦Óß"0ð¬t¨r¯o++S}„ÿÄwc¬ c¡W÷lv¬¤Ü»¡Ï¤ÚÉëV/eÃÛ‰Ò AÉÌ=KnÒò7+@Ÿ!!RB¿'€ûF‰m:Ç!CßBã¬=”ÈælZŠ®óZƒt0:f ‰@cƒ,ÕÙ÷9ë½0-ò«]ƒî;~Òô¢‘„<Ýñ“*&¶™£Ï îH? UÏç¨I'¸OÌSÉÉÔávµ ¹ƒAÈfêíŒfïß`2Uµ¨*jߨÀ]î¤Fx(FÃ#÷'ÕF³Õ8¢®ŽÁ¬ ¶“A;·£š 0ùÙS3ȱÞ@×'Ÿ7?sË|&TN«\ÀRfU mȯà<ˆþAÅÈØ¹ÎQ«r É@û[ øØÈææŠò›þÊÿ1’ðñ#Ë— ‚ä}Á€×ÚVb˜¼}ϹƅBvÿt±uÖœQY úÏ ÊËŸ[š&ÜB²R âà·T;-¢¦+ê,,œì UÚT [¦]š¡a,ÜÔD¡vˆæ£ºþ¥²<ƈÂ3åM¶(ºU¾f¸‚‹C߸ÓÀJ–l„ IkѨ²Xë㇛]½óýµùRapïêíÕ|¶ñÕŠ-íÛ 3ñyùœÀË;rC³\:ö@«ôµW´Í”ûlÿ´ÿpWN¬¹¯M#M#[_÷âK#ø¿+F‘%iÄ{¨/Ä&ÙƒEþæÀUAÀÛB>åÄT^yöv4ç Á‚ûñ„eyÛBÊO~¼&MÞr:E¼I„Ø[ôýQŒ-È¥3YÞ,ؾО––o§ Ž/óûÁpÝN¼Ý ünhÅ ÷?À˜ëŠºTž?oj9}‡!¾öjà,áQÉ2·Ú9ÀƒØñkæ^'â‡vs†„ŽQ²åç^ÃÊÞ[Ó‹Ï.dÎJÀz£–o–”Uıè>Z ÑÇlŽš:ŒÎ€eƒ¼‹TŒ=è˜ðŸâ~nû…y.xèœàL\6 Ð(ž .ìy«®¬?ç?¼='Aìš¾²½áö…¢Ž…Š«. Äâ†ßõ4Œ”3òS]C¹ÝxÛ™.{ï¨{ž)¨ow¼<öt¨8–æ)<ú'ÄÝ ìVÓò·8º¸²+‚£SØ÷B‡W|û±BŠÝŠš\Û}èc£”€]8~ì­oÒ^fì‚=Ó1ÛY¸‹")#FX:Š¿5Õ¡zÿä*`]rø€3üŸ*Ó™»HjB‡vÀ’iЂ‘ÞAýH{–O0snùü»ßjÄ ½gMwÙVP¸ŸýrËdÉÅvÈ* ?Y|ry•X#ò¸Sð»åf±óA;ði#c~è´ÑÐ>*}îeSºG›Ä=vkd›Ú/•Æ®ƒ¾{•Ȇ±Ó”‚D}zÔ¿(šÞòWÝ{æ×[é\q*Ê?Ň’4­aø†6œ¿ðÚ+B¡øªô>SLJizpÆQ²<à T9ä¯)v<Ф¾gÏÊ*X’6T Nnüµ°/CGûJ)<Ž5OÊuiíÌtHÈ]г MÖÅ{ÿÃ6bOºÒ˜a©±¾ÂÁÝ/!& l—³Q t¹]Úˬ ¼æÖê|›­Ê4?AäxÖ“pŽ^ cßím«ôgal ¥ãÇš‹À­†`òÁÔâ´äûn îBÂÑ‚î ,}òÅŠ'BðßÁ<üYa3${ØBܶS³"ã©äXSEõ*A¤Sæ$ÆÊíøŽªÚ˜E÷ÔÈ}‹,´4ÄV/ꋃºÈ募O¸ê>Ár-#è’©û ©$M‘ZÊåH´£ìøÈ%•;zÚa”að%yñ˜ðj?+]„4®÷(Ýôëî.ðß&<岯 (~D–Íq>Hd¼Âu‰•i¬jù|%×ÓTôÞôËß+ÔàQG­ÞvLäæeòw¸í[°mö‘ÂQÚ:Âõuô©yÿñ][]§@aþŰ€ÅÝ n áÆi(þ%Áš .€3( Ò-1ZGäm¢.’ÀþÌ+X²…P3m¡KžÁg?«»zR-z"à…íV‡|_f§\v‘·*ÔB½fÓ69 ;¥ˆ{´Ïk覊Ù1v+p',m4ߺœÚ`¥Óü¢M ö‹íf)Œ§o0×þƒ^<õŽM,î€^$;Ó î2éorÎ$gãî š‡K¢3€ÖÒÚ@„‡®^Ï>Ã0‘®A'´ ²÷zÃU¹°-å²™àËÓ{‘IÓ®bþ”(Ô…\£Àú‡šÇm†‹¯R9¸ù²Tz(ïÐ{œ\eÞ¯>õÞéW¡§3†ÁýXsV~ޏgÕó*[ÍE‘¢ÿʈz„ÝP}™üÅ©NH>Ÿ*ñx4Ìš\2ºtuÓÎRXþ›:¹\à-¤šœb5¹  %øè×¼÷ŽÓ"ø°ÁОze}që—6gË3n˜E©Dq²’IM ¡{àyPB¥Ü=º–l‘¿ƒ¯F2Æ‘_œ~GŽICšV£ÏõnŽ8Yéê[·Á;è"“”zDÒÂÄïdo›aAqÚ¸ø¥Ë­Š³$ÈÚg‹ö¢—“Š<˜nч"ž-È.‘)Òòød‡Ð­¸ÎɺÁO3¿—‡±ûŒB‡,B$^#üg^h —Ù@·«”Ì4¤èã$¾DÄqù]Í땹^>”~à”`ã=°f¸è„º¨ ¡üZ®"HøH;4ðœk…ºú¸4cL —ñ®Ét8Lúòäf„û³óY©cœÀ˜@GÛã/”t;w&ÓÊå¼ib).ºgUãXðíJû¸¹1‡¡!~šž2œµšQ˜`^y EˆZdã=…àœˆ­ë­µÞcQm¨j(ž“òÛ,W™ 3w––}Qp·ùÒTÃmL¼YºÛŸ2eÂ-µù05tòó,”bmö¶+{…ó‘è€S•Ç(RA9¶—Àt^1Î&ØóNŒgð°¶.ˆ`Gcη7M±Ó½ä,²j"•ég46}?¶É¸x~¶_§CP±¤tN’ýÕKÝŒ„H뱄¾KÏ]mXž¹n½»7{»À™2Nn‘ñµÿüäiô–ÁÞåУý¤—HòUc%ӥРr‹†¢yìœä0(?Ü=˜¬X¡ØRÙéß5ª©nN9Û« _$Lî¤xqSíš’ÁA€íÚ-I×Í84¢K6NÚ[rÞýÌÜ^X»µ!Õ9öQ|赚¥ÊƒÑRŽõ´3ó@ã ȇˆTßÃÑ2³V˜œa”'(+ã?ÞLþòuö.r«7»/(îíÿCPÔ=o_[ºÊ]dÉOS3>o m“¤åAØ …ùKÐR#9T€Pf7]°-^‚óùTMš¤ß™¿Ãî_*âvÚ;ûu™°.Z0ô3•E ­M¹Æ§4üßÞ}Ú§)’Á˜¬´~>ø»§ùËv<Ø—ÇüF3Ðä¤]AÅîòZ*m\ùò‘É6ÏL1ä]]⮾„éät¶˜T7aÕ"x4劌‚7‡ÜÉð3èÄb„ÅÛÕ.dú¤7ΪéU“/͵à…ÁÎtÕØ˜l ¥8ÈW'ÆOVDgdнÍÂVÍÝõ9@B^C´!Ðyót)×ÕÖ:ìVØc-®Õ&~°dÿ˺²Iz¹P\vî¼ß14Ù(ª¹»ýöƒ—ƒD8°`=¾u2’YÇi“ª0Ñ«2·ï¦jX#á=ƒÌ„šq½¦ ¸A¦†q³%²“çyE•ë9@\­„6’餋Ù犅ÂÒÌ TÈ«{_›¬è¦d´™ÐŒõõðPm˜×û§ž çá bfÕtÙß2-Mà­÷aó!SKH7Å6 I¹Ì†ÒÿäÄœ-4,§T×K& 2Zèê_§Úîÿ΋ ðçCDL?°°?‚ù‘MÛÎèíº!7ï;oš\o0LdÇd N´yîî fˆ )M¼8È_™Ò2Š[‹È»¤ì§«ï •34°´¬À­¿L1o†!¼ Pg{GD4ÐL2ô>öèØOlêÓéŠ1ÃOÑ€³?dTiüGk2%£SL­Xèœ7P€-ö£¶hc¼h§B=F:¨ÁbÆ“°ó¤CehÒ8|à‘ÐcPwôáíQç–D7 WCé±^Þ»x¡@`¢TQt¬Í}ЄœKúÄàYÜ!®ì;j‡Á« ˆÖÕ¾îrKo…Ðd0üRÂ.À`ì4|ŽöJK5ˆOù©e¼ikm¿Ü{ý,à¶;B•UÃ, ”Yl€ ôj|i¶¼° òÀ¡Çhüò:Žÿó…Ùxln8´O3Ó_ÛßÉîQ ÷Uýý²ŽäÉÊ‹ð®‚þvéè "è^Ú>OØ Åï:îÆ7]â=]íSÆ\Ëí5ç¹À× Ðþùp`,;vÜy[TZbUí'‰½Ó,+#„1ŸŠ&¨6òåÙ;Š-¶ VÆTv^¡4Hš½aQBå1jzF¯Ë©r×D { Êb”M+‘T¢©O|?A†•ÑÝ—p­ÓZL±¦JE*É ÜÓGÂ&á6‰t¬4âU¸nšbf¼jµ–tYOïu»ãã‰ÝQ6Ù¹€p';\2ik¥m¼ªµ(C¹³?Ïí7dÑü`TäÊÞ&è – éNf÷9ºÑ÷e¨Û{>€ø±ÁºX4ö¢xÔpxÖt-V¨HH`§îÕŒ°Ilö­8 ûä QÇJúf'vâŽc¸9¸Yd‡pUEÉ@ÓôYØÖGaá/®,úâm²Ë:€W%¥ Ú(ÂÜ5O|rëkxÙb6Eõ1OdŠ¯Ð¬—‘ùa(ÛLÇ£Ì4øR¦¦–Ê›Ö<Û͞Ю…s«¥Š1c;äàZ$3½iŽûò¦[Aï¶Þ¢ ò˜ —7*οìMÆÚÏ‚?ÅÑkÑ'§0ÊÈ:Ò_Àm"†0ë@ÀÚ§M]N(Ì£J”¡¯«ÑŸ„ÂÒÛÍ[ð\7îË–T|:µðC|çn ˆÀ+Ü—uFgC"6sw•›ÁW0.ϹµñùrRÜÝ  qó w¯ÏBd½;ê¹b­*ö~‘ì+‘‚D ü›7*ÃÛèZßÏ/ÒC,„ã'ñ^ù' +[Žx¯ñçña§QÊn;¬|*Ïõ©Ž¹SÈý(3 édW¤VZ½B+Ç TÖ2»ÄMÎ=g»"uت³å€èœÝ1NXééÆ˜ÅVkÆ©¢N/ź\1Hî°„»ÅYÒ¦B0¬mƒAcTÁzšþˆM “ãD|’n KìÎò…âÆÉH¯!ЍEƒ_¥â‘à‰<_£"!‚RßTe×3Ãìxb³»t•ݸ“öÉ VÛ=éÍx¯.ê”)•A6˜OwÉïNjܨ(ÞÛâ?/<&™$ dç/È®ƒ[ãY;Õ÷ÄÃËoqy`KïØé 1²÷&=`NS {MC~ï€1´ùËKFÐ*°^!¯“¤\»P^î½AkæA á´,7ª{© ´¨vLjRN*WéݾV ŒVUßùÅ“+ }Çn¹þpj1ts>­º3§‡|ïv_å6F™¾t‹Œ‡-¸9ˆ¢V\{R#z7Rs5?@€sTì¡UI€á;7þ&¸WPäs*û€¿E$7syèvˆsÒéÀ…»°ƒ0òo}<­äâöîªäÄg¬–HmÌúI¬ê3G³%ʼBì óã£tƒ5|¹;þáÐ#)*¡!á{Åï®››•ô Sø·¶ê±n¤¶±ÁSXz Ñ< KÞ\~_úçhœÉ*2xd¬…d¦†š`†2Ù.Ù„Ä*W¥‰Šà—GÓwì ìÕ:"”Í Ê¾:§€™ÂÏJBb`?{°ÂšÈuùÌv™÷ZqSõ&\`Ó»Àùì€ÝkfÃXÀ±ú°bKƒó,XÙr×-R¢§Y~Z}-ÖÕhGëõýÜdŽŸúµ*–S4^ë‡;7ÝðapûÊË|ªCÛ“f.šd‚ô;êdškj÷Ôk‡E}`aù½:á®ãæã I3P„CÆê±meçÀûUÓ*ƒO°¦ªvÙjŠÛ_ ~ËÍŠº;îu0)cnøKrÞë9w¥ŠxW¨úOx°(ÊÃî<~}aÿ Ö€ÏRÔÞìEã“ÉÇÁ”è´†.{ñ•T b1s%„½±OÖR¾ä¦#J7~0·Àçî{5m?îÈþÄ">˜¯O#à ÚU«×|0ûR¥#¦¤8kr”‡w+‘¾”‹z›öô žqfP¼RÞ÷ÿ!i6îËÔ-‚B!nÄÞ|Ó)×»z»€¸¸yG)Öák­m3 {뼞ªqr¨a^8©—h¾â¹¿@ÀnKWopþU•úEU'»©Påj2öÔ:°„–vûB ÕÝ{ÒêÙU{µ«£XfÿYqªÃs&UšÄ©ÍfÊ{v(ä/‡‡cŸ‚M‚Ý’t ðwŽë*MQõþ–Û»bܶ¹YØÄCÖ4œíûÏ”‹­º6@L‡윰ÍÞù·î)ôDئPÍÔUYýÿc“Í…mg~ȧÑxƒþsy¢gBü÷…È”.î‹ ÒðQ„í̵<žnÉ0¿Ùæþjó{¿Y•ï0éÑÊÖa?:ðÆ•'ëÒJ9™‹ˆíÎ .½K³TxuºO “q[tØþYÕ£­'Gê2þ´aöŽHØKlÿâ¸"Ù$æ{ñyzF†²‚_þî·Û¸]~DdˆsÖWOÉJŽˆ³Ðn+øgª EŽô‚A§ËÃ7{yßUæ#š,ç©ç‡ >ìÆÃìõÏ+œ©'ü&­ÁÎÅÕ…„Åœ«Â£‰î¢pß¹áï}oðU…lÁïâMhw´U¢}ªáC*Ñsv’R8°>ˆåÑðªÿæ¢MY6ª Î¶ßþpo8gŽ6qx 6ôfÄú€‡£ôÞãšeÒ»L§€m¬™™ƒ÷zË'\_ñz1$ŒÇXÄB,<—`NÓ­?©â¸£1ö:òVO:ÌÕÍüM;ʼnæÇ¼~ü=É—úž÷[<6É™oõF%ÐSc>£å€¨Vßç „g/0¦"†l¬wx>Ö {B•wCç£k÷Ô£å>SÙ$é¹V‚hü0)¥õ[Çr 6ò¢)Iío©üÜ;'£wŽûz6ä%ž` P­•šÁ}V`mûÖ¹ZuMÕÛÈÆöÇÛÇjòšººÿ/U%ôFœÙWšF™=>ÊÕ?eÈ}PÕÏ3I•nƒ9æÛ€ ÙÁ÷ZG ®‡s.¤ˆ]1)§M„\Ñ«ìö%>þâìÁ£+TEíwû/˜gFûë%»¾ÑcêDåÍ£ÇÑTLô ¿Dj>_S£¬qÖÀWé!%Ç-óthsN£`|FÄ¿ðrëÜ{‘ »«¨ðTÇgÒ|U!ÚØÒ`5º=ÓmQùÐΚæÿk™oó¾î;^ðD3¢êV'^¨70Ÿí<ðöûû×ùWø^G‹ÏâfF‰½VG¨Ú‘žpå5ÙÑÖG±Ïs$R:£Èô1Ý*´tÏ%¤ÊVÙ÷íu‘.qúC§Žè|%‘+E|ÄqL¥U :ùó¹dÔ,ÈþƒÄO­[KofÌ£•=CPí,!ù#FXüqàxÔìÇz\<—3ÆÔB/¡Í‰ö‘3­vqßRÙ¶-Dñ¡àœ£@w0ïT¥Rí miÊB·žRúW0äx6ž/Èå™#Øý©öYX! þ×Ö%yrçRœÄ/Â-Ö´‚îÇØŠƒ‘h`¤T-D³ªÐòB¨",ØG±ò‹6V»Â~„´{äÂ­ÎÆ0ݺä¢ÅµÔ^ýˆÌ%(,Á}W§;•ì§~›ÈW*GjY €[4Q&MÒÍSƒ¦’ÿHÁBú d)mœ±îªéßʸò»âÅÕ4€_‚Á‘>…¹V§g…˜s` )Í:ºqâ|xè©®Dž“[‡»¸ÎL×~ ê}˜¬•AÄ==â|k¸eòlХߎ‡É/fؼ½©;hmø¾Ë'D?Rü.hï«P¦„ˆ/ZúçJ-+ C1.¼jœ™ad/S•Í¡V)ÅpëQ€³\V&Á¯Ã@¹Ÿí@c—íÿîÞ2÷«ì$—ÂØãáš ×Vc¯\7Èó^…غߦMjød]‘Ú±§ÉVµ(àÖÙ,‰¼Uîk³ug# à×X1f?´w}F˜¡—3¡ÓÈNÁÉÇþÐ<Àkï ŠôEЦ~Ñ—È$¡yÒÑA4œdíBÿ31»T£µœ“0c Ü)d£Q*ÀÑe˜šKt%ÃÂç±5¡ˆBâë´öLöcÈãv*¾™¸ëÆíï´”ËdB6¿7;=K7]ÚV>)Ó7Jý2ð´ü€Q0$ ¶VöV¾²7Þ͵ªÇCñ1V'Pµ@ÌKz¦EEË…8rU BÊõ ú%мw‰Æï „ _¯ÒQHw/Yµ!šß<_Ü¡‹Ú‘ö/¬/.)ïÒZxXÃ]Ÿ›‡}ئ7cÎ €9Ê´Ç?'¦hD/] lV[R¡\EQˆ÷3½ÞðÒ Ç>¯¹­ý‚õÏ…ø<¾öË—¡çݤ¼ú.’a£%Ÿ,ònf K1ä®Bu=u*ÝÍë:>ˆˆ$w8¦÷Š.Ô,¡›þgôˆØ“Ç2ò¬.íDå´ãÎ^a?ËŽx–^œÓÅ8&G½Ã[­¶ß~žž87Ü1hHv@"¸\6A«=r|UIˆƒp/^k)y8S- Èœo{$ÞCî> ]µl }i3N¢çYãJ§»«Þú×|01µ¹b²:Æõ=×ÂÃ?„{¶íæ´¯ÑÂ8áÈ_Wú§‰¾>$ê.¿ßleGq’…lEÄ-³À]§_ƒÔ(+#”Ä£ ²FC mpíža[×Y~œ†I2F;¿Ã8)§tKöÞŒù9cœ 4:_Êø ZfÙY¾9:Âêï?ògëã›ë\"¨ ^ž¶8ýâ<7ØYJfë*l…|ZùûyGa“S/d­ZîU_4»÷^ÒG3?öðµÐÌ G’Ò¦Iæ-ù±ÂÖœÙ:E‡ Û~<—,æ]ZUçnM¼˜}’ÌI*·‘ð«e2ÇñEù0fÂg¡[MíuoösS40bê (Ð,÷iÈ0-C¿Š&þÔé(¿°@÷ò q‚` ØFæ–UÀ\ýj÷t‹ïƒNMüæøŽšÄ¦r½cÇQ]2 °z0àS‚:/߆ª0¸Á÷áUˆó¬ÁõX”äÏi‹Bè<7ø(Ô×ÄðZëô¶÷=vŒÄŽÐÊY›Ñûäm¦‡P R(Þ–ì øÞV=²ó`¢ù GQ³’Dv.Kfþ×Ôq=þA 0ºí?×…¸Vþ¦±µ«…õV”¸‹O×1Τ5E9‹ž®uŒ5.‡õ2±tûu¡®\¥Õù3LÄpM1có+Ìÿ°õË©¢‘:'o4ƒ«l«Éä=áö.ìú³Þ@˜ƒdŸ¡º5`Æ]Úð„ZZéc7­–½dmŒúäùÔ·¸7nbùJøiÊøÂ,¬+Ý{ÙµÉLÄqëÊ+©ú×ò~°Ÿ¾†ûãÏ«ôkZÍYß´6KN-ÊžùW¦~ɆCŠÍ~ ¡ æj½2Ɉi)ºE!ßé ŠwÔ ŽCiVÃȺ?s´r_uw·½$ç‹n3L¸;@VÁ™ÕE `r~§…žþjIn|w: `– iK{™å%JƒÛøÂ›€Ï0½Eë}÷È1ý:Ò5^ïÜÝ{»bT£Uv:Cîúà}ÆVÀå RY†ÕJé¾l³yÍ„sJQ O›Eºj¦z{Z—·¿x"lj58PE—9ó·3vÄZh°i:ªl=˜B¥2ceÍÇ»ðO2P0%¨MÏ^ænÁ‡ì¡ÌäR˜c!&np]h\Evg Âu¯w/ÝF±#ø#C®[e®EŸ¹Å$dP³V„‰RJØ4ÔUD &K¿¹ñƒTtÍÙ3³Ïÿ‡ØË²°I°RŸÀ˜«jÕÑí­ÿ!‡uÛÍ踯 = dù?ói’Œ@¸b­DïšB'óñ8?*æêUͰ¢NP¯ðòÐËv¦üYX8€ÐjÇåç—ùÑý™Mþ„bû¥ÁÉ•µÓ÷Ÿ.PºÜ†&wJÛL£è)å, LKϙ݅¸µíêÒP¹yº5y¾°QEržù׆ŸÄ³Ø±) ÕŸ¢ŠCT)n×±äÏó®”zYüÛµ754Ÿ…fЂçú˜?l¿âD±©ÀƒÐÞÒBÌàìÃÅ7°z4§ñ¥)é¾»êBâö‚‹pˆžF<Åìµ»ê[èr ”Fr ùjÖ# ÇC¡¿75&ÏU Úóê|=z4 õÔ)Üý³NŒäKCM/æc<~QÐ8øåeZS`¸[8 BWjœ”¦`hÎfKÌ^žÄµ£zñ¡a› Ø D³ÄèLouä ÜJPŠA-ŸÑÄUJ`‰+¹«±a‰äŒñÓÉEȵÊKlnç@3Ö¸ â,òk©H¨Â`’ [Ô fáÌÐ"A’oâ®Íe‰ÛÃ¥§ytEšxxFzé_<ªF;¬3ö:W‹b¡(¡ÅzO²ÂÊN‰ö´{‡+úx¥`®«…󃤫rQ9X ÈÇ äÐú}M§ç¶e¬|Ô¾”›7Ý‹8s¨J*|a<´M,„i‹SÌ_éÖz37œ™ kS‰¹Ú$LN ·vþa'—ŠºfR»ÛÆ´ÈÄëß¹Ø2©pX†¼·éz>ž˜°GêÎÃ{ÈxQrù¨?ž/žb1âl˜loJÍwf¦ã« þâihkYÚiCOG̾˭«p’Ån‹Ì#6ÀQ! Z/~jú,Ķ…B`Ww¤“õÞzåM>×k̰@ëµEdp¹VÊå´™®XkÏ*€Z¹Þw6õûD¸»××ñ°H0¾C‚w A©ž^ z‰d$/‘¿®_ô9ïSL]9€ð!›iâfPÙ(/ƉŠ\±ˆîŸ(ƺbfç@ÅqO6‡ßTízÒVXï¯ì©X:ÉÞÿ‰÷Ê´PµÏNªPñ¤Æm Ø}×Õ(íÊ¢ŒÛ¾QÅ,aŸ­ïó÷ŸIûX^µPÚ9 Îúâ„êäÉÙ¢6²À»3n$P½wzç­“’>°#½B$£¡nþd3*Ÿ]|¯Ý‚rB64ÑŠ(‹å²A¨¤=i>õ`Dºz¥¸™ÜvW¢øc<,AÌ©õc™˜É°µÆ×²wùOi ¸÷¿gK²³p“7”›çþ0ÑP÷}6% ´ ,k_‘Ûûçcà`ÝÚ½ö¥wÂÖˆ«ÿxØc4ÀìÀmm¶iÅHó(VP…ªLú ^8gÆý¼mú“»y]ÿJ5tîròÿØýÅ ³q‹±i$Ï}2áuŒÄ‡÷zŒœZó— csÏ­Z^XÔ¦’¤;ºÖT¼at˜|ûº“Dd¼x§þæ/Œ5c‡A#zÛw5 #‡É®st”íyõÈtsvmLf5}|xáÌűݪfǹ.\$ˆ †Õ7ו:œ ³)°"ñÎuuÄg³xpËfb(ä˜È:k”N Ð/IXhL5Gf1-zó9Ôø§Yí ü‘Vs m¬p«CUOlz®˜äÄÈg{â‡Qކ9ÄSN«8;u”|YöÆ­/*·øú@ÏŒg¸ÄJ!3‘ÍvÚø-¶#cÕ ãE²õÛÐÊ–i:ÑÖeò—ï–%åX­ê9 Âdm?%#(18¼xñÑÜtÅòêWm&ª)‰‚Ú¿Sqá{èUe{¡ZF冰Lz`߉mØÜw¶Í½¢"[«Tµ>¤°{! ŠÀ/úMZ[•º.à$îr€ÂoS½5I\›µdžHíË>'îôï‹/c{æNUt?ÂÄ%Ýë8&!ݼޓrŸMcÃÚÔܼY(®h@:ÇÒëýÞ|¿ß's韉ZáT-ùºåšêxëáªCüÞŸò)ež¾¯«qoÿz’B£i´Ø.Çc©yn–u:¨¹Ôc1–º¢Wn_²ÿ¯ý¶  ä;² hö¯äûï‹mD,„TÀÖ[é:SÜþö$†;âŠöì³VKýç2J<€ÉqͱÑíûŠ8[7‰çÏ·AP•¶Ú$iþíS¿ÅT¢ïoáÿðÞ¾f‚@þf¼.§8ç·/úÙc}A”ÌK]ï2Žeµ|3Ûh‡ü("" ÔiŽŒÜ&†œIï4q´ØQà§ç%V»ÿ̫Ė`¼âžËñ.Äã£QB»²œlmX²ÆDÚ°&*þÙ⼓,cœšÜ|¿³Ý*8—Fv¤dÔÊP5üE môWKõH=rË·»ÎMF¢}8{@³ j¼rÇ'ë6›®©™ò @QJ#³üþ†9’ﻈ(fíÓ eÙ',lðÑ} »>Í«Èû0®1ˆ‚áóØA©­e„wtŒþ6|¸MAàSH®¼²¡¡—ÏHèn[À¾€eLËhµÔðÅ~Á½;¦6LpýDO60%'„õþ@ <`G/eÅIŠÖg¹^%N½°¿dmF™Á=¼.´HŽÔà‹w,¿®yQ¨8+q/³;ü4±Pþ)¯ABt¼Â„]Úª®hh€ÁA€ÃD˜h][ã`·b±-ˆüVóϳë^ÝLd Ô¹ÏHÜä¶P€÷Ö Ë)P‰°° õ›¶Œ§®ìâk^r{ÞÂ_·óÁ¶ÖFÇQ"†nœyS•tÂÄž_¤`¢™ ˆFhÁnWA†îDôü3ž¢ðˆóí1¤ÔS ½ÙÏXÇ£ÔGQw½n#]R5hqT–m‹B‡¡(‘Ú‘«‡v|§Q@à9Í‹ä³D9Ñ\:yùúÅVÀ[§-,„Kª .÷2úÓÒäaȱÓèU€ºÐÂPOU$Üó8úê|aæñ®”‰*/P:!³ðn•ˆ˜I0C‘xÌÊY3ƒº¤J!•ë¨^m(Â7‚ñÆQ¨è´×€· ËNªÞ&Ö=ãÁ Á‹“#îL†æöX"%´qUi ž”¯ø™Mct¸øiRé{'üªNuQ&ÃÂŽyV)§õ†ÚôxgÆe/nnÆwеÐMŽI``¸rú+Á"íöl 7nëKÍ…Ñi…JõSžÖÿ®#Qéþ:Ej,¡.}ѧò*5HL¾ ¤¨2¯{›jýM»€–gúsùirøÏH—»»v °aq€‡[y!ˆ·nþnkòslLtV6„¥¨49Á”4œÍû¨Z—ÄZ¡Ù‰FK¢àR+‹rúÄ¥fÚ.“eòÅÁ:šRà|‰>”ÓíK½^³ñhã^ëà>Ñ«=€9pv²Ùùòøº#Ñ5ÔŸq=Kå‹g}%HWbb)мû'þ*!ùr ò‘ÂÉèWÃ×çœ1ç+JŒaõ]•Séa"¬È¼ø!ùCçÞ ¿Žô~нÜÙ 7+äa ãp´Ö;xݴȈ#ºþÿ/ê€#]ì³ò^ÆéAxÌ݇¾Œ“We‰Õ*¡J!O´èG;B› @s¥cħÙsÿ6><| uiÔg%‘/¨­˜d¸«ÜŠÉ{1óókÝ¡ ( a#ýØÁâ½K^ÒœF%jëºx(lßG•¸Á•ß+CÂH#ˆÄÃÉ‘À%7.νÑÜw&~wã+  ƒ)w"¨Ww:'Ð5cÐþc c'ñ_G&5$E‹ü „ßà# Æ$íq;5=ψ¿Ð?gç;Ár»½{še˜Lɹvã_r vD,Ûg ÃKx­Žyq®[¨Ç+Tâÿ½`~E°F˜Ž?8³=é¤jÉqÐã.o¥fh¦@í„w–ëKx¹¯•ˆßè ¢7¡ŽUIŒ-÷þ12-} “!CŠÄÈëçÍÿiSÑŠÑÂW3ÔQžâ"_Í"Z±ü×îÌ:æîÐDÆ#~ˆzÜ”—Žª:¬ËFfOÑ(ÕHÏIÓ>¿Êǽ0Ä­md42÷š­Tª¶)`…˜ˆ ÑUv,hœSZF``]8¦M€»ôŒQ¦õõÝÒŸýÕ V,¦reoãp¹l`}Ä—Ysù,5ƒ‚¹L*‹c6¨! huW\â ?ó¥Á'N«ã'ÏÏèÎò?ŽLV±‘™X¢ßšR­W øðã…tQ4n8¬enÏ¡a˜“fÍÓ8A‚cPÿ•â îAYÊÁ†5<0ˆONШ6cÒ õ…>]šY8  ˜×⎠4Ô Äê8°ƒªBÙ Uðm,çô0˜ÞÙÉf•þP1•Úß —ôa‰½Yüi;:Ãàˆ¥A_2 Ù®F›ˆÓ•ÂÐX€¿›mZ6i“RØ… pê²?A€O­_Ýì2Ö×ÅœLƒàfl°ڀëúbI>AE˜,S•Ìå0€¢©ñ)¼ÑŽ€²Âs'ßøZÅ×Dµ°az×肹ëÉygͽ®®Ÿ!ó dÙrˆ*¹Z<¶Ý¥¹ û!Á™Õ‹<ïk•þZ$›YúPc÷Z2l@ÄÞg¡Æ;µD‰6Ù9ˆ!@ÿpnu.ã©Þ\v¡xòÇï4B’œÅJ”ä±O3‹Eô:ìú¢ñß‘å‰5Þöjd›ÜŤ9͘•?gÁä8K›Žø)Ét§vª(RÅ» L–¾H%‘IÈöwUë¢ñ —Ê× 3oÆ«`Š\ÓJŸïôßÛMß.n|{5†;;“aòl‡:hHíï4ÙºÜka%aƒ3! ‹íJ9@w¯ÌÍ‚ÏÂ3Æ—i9QbÐ99óQlâ¸ÑòvÏO™’j‡+sê¿öɳ÷•›èšCÓðÖÙ¬¤ûIÞfð§ÃI° Ýv„6÷Ž›ÁÒ"Ô?¹(ùnED¼ì{º´Ð\iŠ¡Ûè¶¢}/‡‡aÆŠ«²j!sÇ.N‰4Û£bdckp9¾×HfJüft;A“ €»?>`ÂqWì nZ€ B5Ïí\óÜôì|l5ø†$Í9)Ü2Ëß\øî †ý 6èÝd™¯9J?õ÷ê$i^ÊÖé(êè:UnPÄ‘;l-L92’Âã  =¾Êíî£&â¤=¿Èaþ™OËeÐD”¬ §°a\6R}‡Ó N¢’"›báöut¼4ž—¼ñV˜û¥îPúËIÐ\w'"ñDV—­Æ6Ô½ÃõOaW©Y*sµb³"ùÃjVP¸Ç}$dŽ„Q³©3$Œ§Î×QÅëa-ïEŸØøÃ†±f¡#Jß9‚ÿ<¸}T4†|e ?·g‰êÕÔxkN.¯ rqÊ©˜îK£ôûa±Â2K?JëЯv*1hÒóS.…·»:é³ý¾^wìAÜ‘‹Ñ"Ÿ[ØT”¦¼‘X¯™Æ˜ËÇ#„dUyȈŽnõ9^sAµ#lk,Qáµä·û\¦iŠRb7^†ùž/†h‘à36€Æ´ãX‹î}“²áýû­6CÉcÇi{«(±0"¾¬¬Çõ^žÈÉ„‹fÉŠ`µ¾í×–fÉ"4Õõ/!öŸFÏÔ°D1#fÙO;-À^yö”üF5Þþk‹)Å«ëéfçÞëÛÃæÃWÍ;s– Ô—a™œ¼§¥%ãõó+P†#·çÜ@$yáÕåÑÿðݤ=Qs:j„UÝë— `BÀ8v³Ý­Ä U;(Uõ0%1¡ÅÉ€ÍA«½Àè2D7Òæ4Rx ZA"#¯­â'¯ðHA îkBÓîy¥e“ãñYV 41- ûÀ½ë¡TI®G‘ý -¦s·<qýå‡'狼yÅgWj“µAãÐ9+ðþñx©¬ZÇ ‰ƒf‰«ªW2kßêÜÂõŠHJç ™{\¾Bb\qéŸý…HÂOδS¸ËÃÌ%¬aÝ—[!•ÏøfÆD˜”-"ò¬9€3=sø¸(ÙÜZy %“ ÿ"´ðNÎn$›DI}FOi§Ý´'o˜pGÃfÐã±;¢ú‹›«~M­UDÓùºte5ö&(p²ó_Ì+œì®í®aY˜‚°]%v$³îZ0½ÕyÞˆð%Ü>çBRÊ2²TpÑÓeâS0j'gè2 oðû\³4-èþ•sX£^¸M·Rƒ¸[D̬yÓós\ß8­gËÅF¿ÜÒ”o_†uÐ=SÿòÁ}cù F²fIºÖ6w§¬êô¸¹¡‰ZéiÅøX­L£M×z)>øY9–KÁö&{ŸN ÜOª"sï¬Ý¹Û® žáуJÅ0áì+À×`Úp«/øÖPÎ<äß"Ï@Îu·Ö7Ç›¶¯¹ùê¯b[ñ ™‹’dÛ¦-åF1×—Mh¤ó¼/°8ü¹–í5HWbÔPõÎðc#ÿc&MÂöÆuÁŠŸþM)ƒ¦£6 ®LÅ©C\iH)·Hqå+³©Ö§YcUçT1M5…è¾>À; ”vh/5i1 b¶{³KE×ÓÞ<\c{«‘Ã>šzWcQ<} ¨Íþ– ¶¡Ýdãpª½&¦à9PigØÒùŸ=ëÜ­-EŸ¸‚Nºðì=ì§JS:¬|Š!€X:p¾öàÇ¨Š¯Çñ—ë¿Àœ^s‘uôÚ^èbu}Ѹ1–Ì«6ªBªÛv˜-í!2IÑ:F…zÅ?µâ¤){@)º§‰Æ‹<ãbb|ôš…E§bÏx>DZ[Cð7UeÅs`Ì£¬b[z© Ç`s6ô½únª£fºr/y9·RÙ,&%Á3â¹=£pÅhd¢ßyÙA÷Õ%¢è—þ<¯±w¼©_œ¨ý:n¢nÌ6ñÇ‹Ðþ2²bxý¾\÷-Kð¯xîMYÐíȵ¸f¿GÅÿVøâX}Ô|ÞÄE—døÖ°ÓáXÈ/pã ©ôƒè’'»i&Ѩš-í6‘W)ÎíH9+{òá}!”6ËÚÖ®âÍ™AäU’ª±M~ÉVåC±âÃä½ÍôüZí¾ŒuuÐõ°á—f®OG<Žû×"ŠŽ[¢ú\?¦Ã5éÆã/¼UÉ¡é æë?$¶ =§–Æ]?¶ézĉQõHöh:#™+®•Unò¾®!Â+–VçcM¯ù¹O|¹ é—L)›[¸ôÙÑ*&iÖ)æ{Cä Cš°ØCÁŠÖðy$oYqåë¦ìGQ0ÁL2\jÕ$#ðʘ°"©m1£ŽäèœÑ˜9ó©A†• êbw"`p­eƒ!Ÿh=pœà²Õar™;ò©95O»î3EÞ<ÊŸµOrQÝÃSo ‰–§ «ï¶s§ÄHŒãÉ}f6ìOgŒ'±JýDøL¹>%}DkGÌ}½ÜÍfù´Mù?Sf„ÈDœ.á /¥"K§‰ø=ŽýbP,%.Vº;+.Äã8§Zoz!®Úñ‹'Ýí]ñœ=ÊÓKîDÔ£Rñé(Î' }\|^~±å¹ûZ9u€t*pè\ƒÔÅ'=<ì™Þû,»àÙî…Þç*{x{¯ I(ÞÊ#!QŸÈfZ -=•qÐóxàšs͡ѡG,‡?° gk<úBè^w/LÄ<(ÛI ¸ú.K‹zç?Cé`;µ Ë;eˆ:o¿ÑñR9˜Ý¢ë¦+£Þñg¡‹<³!Ï }(È‚ç7gFÉÏŸwšï‘ôÿ4ES¨SŸ]ˆoc–È‹< [–·„/{íêlK?¶ö8©€ç¬3ÅP½bqíDûRµÓ ØI£âe¾_æEj£—ÇÐß-çû-ôCÀPd“Äd²DV­§"œãaÏ12³bSâ¥W¼E‹8ŸÎB#EwoU=íœçÜ–]`gE.#åfb ›Ä†Å·KêôRGAXoæk¦.5ªÖ|Q­l›³ÃVó.èµý£øúþ1Ý¿Ad¼‡ú •ÇlÝΩÿ²#›;¼Ja¨ ÊE—&Ç:èÀÏ@Ø´u ˜¤G0Üä§–e©ÌÍÖkÙä¶÷]ì±²’;fŽ£ü&±t#Ëä6B š T·I÷ûñÒAi®ušš)žç`¼¯•Å–‰\œ¯]¸*ÃÍhúVYÑOB\W“³8•õ<š„àÃ<ÝÅFEš£§œDL7ÂF§¶‘Cs½$äbBu‹Q±ß¿nJ¹1·AÝ>¡Â· EÄ„ï8è&:î^b0øuüü8ÓÔÖ¸¾óÀJÆ€O8ü0ÀMŸtºâ£yuMg}&‰ 8#éôǾ+Xžù+ X¶¹IýѽõüHBÑÈ€Íküxˆ x!èY¸ðJ­u ¹ÐÞËš!ÿ‚sFmp>L8¹8À%n±W ö¬D¿»¬±×êÒ“Àã,@—˜XUÓLâQbͪ4·ö->)®OY©úŸƒ³1°™gmá?éè4ÔŽôd‡¬Èÿ­]‚\[óÙAÀ{šâã §º©+b†d0Õ(àm_Â~®ŸEgib³„¼K†%¬ºÍý´9ÒAº¯Š‰ÓgÊ@iæÉðà[RS1h¨©¼ŸTJYH©›¶§ånxž4ª¢­O]Åä’ßšîá,m´ûp†¡I_DŸ¡c=¸µˆõMËŸ¥8Qð/&#N5H’ß¿QsT6²ªUéŒWYV<ç;çSb]ÖUEâOL,gÀ(È‹‰8³¦ ¯~)Œ…ÆÆ(ƒÄÏHmÕ¶êpâ&)eøãÕ5 j²Hìû©‘Þ¹dV%â$â–sÁßëôciDËçmî@R2Vlî˾>Ü Ë™"´£ïšGaùÆžeÞZÐBmI´iPÔc7aŸ†¯Î¥¡7b?Vi AÛRbÄ$ñŽ£úcQrÓÿ6Ñšµi­äÑ䥑¼qÎ ‘Θ;æ0u€‰%½x‚Ñö¤Û½À&`[0ô¯1¹> p ¦r[Yyë‰ãK?•¤ŸßXjšñ1‹7½–É8ߑ泦ÝB²ï£õ¥ß–ÁíÕÌz˜‹ÌLwAL5ªjÈf±°ø5"æˆêmÌC:ì!Í)ô> æÿù6!­F§®îJ'ò©–¶q@ÁØËMòù¦°Ï˜oÙ$÷Y¤$) £v4ø#%Ïeqñ"Õu»08Î[HÍë\Áâ¤ã¤O¬g»eÉÊRe_œýÃ}´Ox—ãf5Mÿ¡©„«~ÚñL¶úlu“./)Œ]ÿŠE«îk‚—Êã\îÿhðè¯)Voô uOLOýÉ”ÀBTVv·÷ÐJÔí$'ëHOÕ:…Ä3Qám¾ "ìm=ó7ýî+ñÃð.±ÊÄQáûå=S¢‡0‚°çýŠ8È“°ü{w†Ë’幨Õq‘º}·.ÌØž,o;F̾4eN&TéÏëÕ–í!iƒ¼fv;€ _‰pN‰6©î@"d‚Éreòœø­íè ³…7‘->_+‚hnŠZz¹€22WJB 0Á†‹_=l­5»)6‘jµ&3]Ò+ €€À«Ãm÷É ³§soÕßEHŒbÐò-°Rœ9}¸Ø2‰lÑL±tÚð~ës²s´R~RYy"<ˆP^­nïRp[ûƒd:Á3zåÿÅôbT¾ˆm¨ {=ì’eša]÷ÅÊ%ãÊì$þEDeØ>hÎ^ýio^®Q«Õ’üžXLkÈ‚ˆv”|ùn×ué»N€v|ìs%ôˆÐt"ijU¤â®Ê=Ü`3®:<þ ¸‘Ñ™Jh¡÷Žn<1Z=8A¼dt!gbA#_Jp€áݰåôõ–¾ìÝÙ8ŽE«¿¦b[¡AÃÚæø·DW Ø€Y7MϪ¡úYŠ:.û1°¬dRn §‚àmª¦|YF IöLôK|׎ÄV_JenÛÙJØ­IÔ/Y‘Pgð œ&+&GªÜâŸÁ° ><ÜWãÃþîŒ0>¬»ØÅ›l?°2Dk¼ÂlŠÖáºÃ1­:÷ å}¢bbS\5†BíÕë?ŒÀq1&„0 EH†í±‘0–YÛ§ ¹Ì- Ëã:2¬HRfÖÜ¢ ‡äÉ-—"Â5·µ!"×ãŠz0rÎÿpÞÏùýß·?¹±ÁÁãMMKe{ïï’vIf|ÐÅ6ÌpÑŒ‚^÷03åM9~ºÝºì(­^’|úô Ä·ö,ók›ŽùtÉòtq”І—•«Ý›9Ѻ#Kù²€7k¼Z×jÜ…Á©…þÀý~ù ®s²ØfУ¤Ä‡³ŒŽžR«®Ã4²{Ö¡ÕñyMwÏèšoí #âžfµÃ@êР ×~Ëíü‹;ëŒ QÒÓŽvK¬ß«hAÀA£ßþsljKÝèdDÆ­Lv Ly¥:}%!xiû1øDæÁA ]beYïµ#£g´‰üKÐ.0ä;"=ÎÕ_!5OƒÝŽéÄ®ƒ¤ÿÜè-/{Àª×B?ÇFûCÛ”}˜mQ9®°Õùý88Ž ãØ ÇŒ]ˆß¸<ùõn"‡j%g+ ÖÒÆ{gíIªLÉ{*¼¡ÇEú€åljöå FXŠ5aÜ· ?tËŒ­¸9¢ŸˆÊjK •¦.Š€¨ÍÕ%)x˜ºPÔ+þ"†ýurözÖ>Ux]3糩ì9pç[÷®½Bn}™˪0¨9Œøª¹[±.xóôJÈŸ5Úx$ £m8+U#,7R0è¯ó?Ó¼ÇVeà®mj\>L}ܨŽ.¢»iP+8Š/Ьs²ç‘&Úï8mò'¯•’£`•BDÌÝ3•þ1kY¢'ÖI9Dü«Y‚³¾Vº@5Ü¿Ñåå•ÈÆ\–ù¾XZrßf7¯ŠˆØ (‘Ì3-¨TÞ•aËTBŸsÛúï‹Y€®Ù|HÙ+QuÎ{Ê‹;šÏ] 27{oÁpá3ô];ÏåÔ›ô…Ö*Í}Š4,BŠ‘ú')Bìs}hj[T›á.ÐÞVþzT¼U½N;†Òj¸7ßfKÌí<àïïJÕNÌ3Ô¿'.óûü ÓRdŸ“„ ¡,|L›«0ñ`›ê™0âX Ýa`Ì8Òå7ü\´ÈÚm…h_‘°M’Ó"…UÍòâOh6œõ#iHÏ?oG{oTr›‚¯0°óuhˇÆCÏY¯šA²£c¼è¦LzšØ/XbÈ‘5nç™ÈD„Um€º«Geصû¯Î[¢(ŽXÎEdŸ×ùu£¬ðiÖ¤{míÇ©yÑN"­ð• ÙO§‰‘õš£w$­ ÿ)ì3I/áÜ‘4ó;OÇw+bî B¯4sºm6j”g×Ü\—AÉméy<š…œ¹ø¨y®|ŽÅU|ë&r]M7~ë]ЖöŒÈŸC»ãæ[µ³eß'Ê¢ôâqœEÄ-ê'D8$ûàêk—’ÏLxBh9é!ŽÖÚm²[µ5<’IÞG ûÒEqÞðŽ HŒåï^óÃR¦îÛ³8ðG¸ì¸GáL› ?²Ëï¤Vè›MÎñ!(ßU*ýõP?ˆYáUÙ8åM؆„ãVBb·žØwþ´ËHñì1ñ½[7e¦mALgLK¬­Œž~¸Ýà ªê6Ƨ\2ú^{nçbf‘S¾ß$aJ#¹Ãå–âö·ƒª>¦ôŽ7K…€×tÙWM¹d™YãB²) :wŽ÷att10\îÞ?Dì‹ú½Î¢‚Ø«d!Ä‹#^Æ6ñ4Ÿ—Ù›ÂEjÖ«@‹T%P©Axþ9Yø[R¦Ø”·¼Jן+”ðü0r/‘Š@/mÇ]¸©u0 [êCªJ-€X¡[Ô­Œ˜·Ü Æ©ƒ÷ƒ Îkxɪ?ÂôA)_•¸»Îkü™’ëx=@q'kȵ2íùå[ZË@ö˺UÿÍ•ƒ>|íq‡H»!á>äW›ÁˆÈëÕq %kòRi$î 6dêÞ1ì­Ü• JãYÝx"RÏÚ9¦(…t••&ÓÏÀKfŸ‘¸šNwCYï~›fók5%ôÎþ•`¨{U¹Y¦ÃW2úä10\‘ôflIüã Ðþ–³£ ÷s&>õœ¿àdV)GÁ¶a'(5㊶°Ÿº-ãªNüŸÞ¶$`†xÌÚÚ5(®m½>݈6çýý{ˆz ¤>«šÔIÒ°øøˆžgô˜os 7/Ø9ªÎ±Ä oß°”÷môTpìsw5 ´ÿa™3ù3òNK°<=êâNöÿ—ÉüøŸH7|#£ÃC}#É2ÿän:–endstream endobj 13 0 obj<>endobj 14 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 278 278 355 556 556 889 667 191 333 333 389 584 278 584 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 600 556 600 222 556 333 1000 556 556 333 1000 667 333 1000 600 600 600 600 222 221 333 333 350 556 1000 333 1000 500 333 944 600 600 667 600 333 556 556 556 556 260 556 333 737 370 556 584 333 737 333 606 584 351 351 333 556 537 278 333 351 365 556 869 869 869 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 666 666 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278 278 278 556 556 556 556 556 556 556 584 611 556 556 556 556 500 555 500]endobj 15 0 obj<>stream xÚ¬ºcpem·.[;+¶mÛ›+¶mÛFÇêØIǶm§cuŒ¯ßgŸ½÷©÷;¿ÎÙ?fÕ¼¯1®qZ«j’+©Ð ›Ú%ìí\虘xR@7 ‹¥‰½ˆ½)ௌŽœ\Ô häbio'fäähMb@ €™››Ž jïàédiná Rû®AMKK÷ß’™Œ=ÿSó×ÓÙÒÜ@ñ÷Å hcï` ´sùâÿÚQ¸Xf–6@€¨¢’–´‚$€JRA ´:Ù”\m,Mr–&@;g 5ÀÌÞ `󀉽©å¿JsføKØ`pvšXþuz˜þ¥¢8l-ÿ¾,æNFv.{àb°´3±q5ý€¿r3û98Ùÿµ°ý«ûLÉÞÙÅÙÄÉÒÁð7«’˜Äàt±0rùWngË¿j€½Ù_KS{וôîo˜¿Z#K;g€ ÐÃå_¹ŒSKg#Ï¿¹ÿsp²ü†«³¥ù# 8ÍœLm€ÎÎÃüý¯îüw€ÿ­z#ϼíÿ±ú/ –.Î@38f–¿9M\þæ6·´ƒcüלHÛ™Ù˜™þCnêêðŸ:7 Ó? ¢ú×ÌPÿadjogã 0šÁ1*Øÿ) €êÿŽe†ÿ9’ÿ(þ!ø„Þÿ7rÿ£ÿíÿ¿Þç-ájc£`dûwþk¿þµ_þvF¶–6žÿfùïFÀÿ@ö íbô·|a;ó¿010ý‡ÐÒYÂÒhªdébb03²ùÛ›äjv¦@'K;à_ÿi€ž™ýßtª–&Övÿj6÷?* é¿£þKË?˜ÿm{þ£Uú˲‹ª§Ã_@ÿ ¿¼½éþå+"bïð¦gædг2qþ½\L¬n6nßÿCž1ÿ÷YÞÈÅÉÒ ó·X&æJþ_ÏŸôþ-Œ¸‰½é¿æBÅÅÈÎôï(ý—àUnéè ”°3±0q3±ý#5qurúËë?wþoþóüϨ@¸ß±°+†Eýt·8/›–Y$::ì—V…ìÉ#¶ªãú)´OË[!·f²‘–9.MNÛùq¶/äƒw¿o‡¹›6*".iq¾hi· uâ(¶Ì„鉇e†HºÞ}ÔÀ^î´hyÉ |Ù¯—ó‹y‘•å,û‚P ‰…J,ʹØvbM».î© üžLÔ¹v„4:ŸˆZzc~è°‘Ó«+Ïß¿r6½ðð´b,Ñ®@t„5! l£Pì€IGE­ùc¶A(S3ì.rüœ"ž¤¶g5&î÷Å ÞS•áu†›&¯$o¸ìˆ3ô™)ÖxdÙˆ}—ÔêZ¿§a‡êÌu¿RÚAà„”Î¬dÝwÝ'•=ÏíçÀ €gz¿¡M{]µe"0–ú#ô¥þ:ÞPž.ÂàðÜ·u7Þýú£¬ ‚þ)—piñýtF20pDS8¬‘Ã$;!¦šY¦í,ÊÂ>ÇZGkâ6k‡9/Ež½\œ¯¿ÕÝ…~€¥Boª}låPÙ5ñP…¥ùyR©ˆJªO¡ÌSwXˆ¬ÀÔáDq13ƒ²6Šgö°RÏÀFdè>ZÈr_8–e¦"guM†,$Ø 7a®x 0þ™‘ÝÒ˜3*A¤t s–ö03OéÑ‘‹ZÒ»éñ’Òq}3:“–ñfq, q,÷‹Dýy …¬+`IK~½@ÒÇâgù¿Øº91ǘ½Ó%Ukúm(ük¢áÓ48ù`Ó‰;}ÑdªŒ¤ž¡¡¯8¡é+C¨toîUxqºË#mçû’½]±`¾C…Ó”f‘÷hÞGBåk/§Îð&eº)~†TR4Hn?YdÀ‡@¢—ÄÈ›¯”5^B6ê\û—'–¾Wia""QW£G÷}@tøÂèù æö]‰{$š6F‡a]åŸi¯™éb9¦ý˜›ð{¹.•>`ß;ƒ­ßwö:ÿî¶ÕßG¡›×íøxË/œãKEÅ_WFh˜wíóV|$ô0…*°"v/ÏÔå^)dª Fþ¸Šƒ.v'€øá¥ênj bãšO@q#ö”&Sù]‚¦ `²FJr_ØyT¾ ßÜ4µ$ðkŸwœ7¹ŒÍ¬Mê—â—t>W½åËñ¯lÍØeôaOs3ÀàüâŒö2߃íÏÎR½/è1³ –füùj‚„Üqn|wÜL˜Z4åfÄMg!x0öÃÁ=“m\¹2ÞÏS¡aá)ÃŽBb}üCœ^yNH¤'lÐy§£’Mæ_½ï‘—¨«LB3M)½²>H¹»” ÚùkÚѳx{8 ôZèZI>it7:EUÁü=«™"8~Z«¨™AI!Ë®Mؽ[¥6Çk ög׿Bƒ¦Ø‹Ô"AGés¦öìØ©µÅc“ÎËe¦ºô;}ú²:ȳòÿ°—ì‹Éjt”ãé ˆÚ ŒO´9œHT¿µÛŠa”9"vRº½5aóæžŽãe‰åþz˜oòN¯ P°¬¯þ!ßNZø£­SÐȪ˰C&òñzt3OÐ-*ÃN/+8Ó0æµMåæ1ÏK¹H‘Ìõî“arË^c*d3X_t¥‚1€É£kÙ³ÿ=l­B•×+ðEjÆ¥Œtc®’‘`ÝPKõa!ÛÖ`h¯u6𼆖¨±†Úä*l#_ÿ9¹U'øŽñÉ>±8Ðà³Õî¬v;ASTb#-ZE]ý 2âñ$b ìç(œ¶ì‘Ì¢Šú›öä-BDFðèúŽñ«Ž6–kF01C\l)w A*ÐL #+v#¯‚5vxÔƒ^ƒ¾Fd柯+jh•꜈&Ñ ¸ß55Õd$ 9yšå'Z¥“ߌ¯A}=6°Ûè[pm ®óä±ç˜¢“—W`/p÷íHc‰¥KÏ ,0X#À€ |g†SËƧê< rqìžIØdó'çÛóмÎé’äMܳ2ÙÊ\â…q¤})ù– Ûœ,E>Ÿ€Þ>÷… VÝV³±È=Uˆ ²‡w-N¥]•¿rS3×ßË,Š ½Ú‘žG²lO€ ïd×}¸¼¨ÉÚWÒ¶x–ó uâ},Š_4O/»½Tÿ:P Î tRúõ­â¸‚eR˜är~³‹æ}–dÎl#´•^|Xcô-äizÓþî !`ñÕ¾½åX"ÞœCùÑÿÌ:² )É(J9 aT|6—Èç©Ú< _¤42­‹'zžFºÁ±†pX&¯†Óü½t¬ö‘òѽÜ,  ízd$ ¢žMoµ^𵦯8ŸÂB =%ÛòÊE¡!£½ÝJ¤6—æÎɪގ²;Ù5÷îÔ[¯À9¨—÷#6EÐÖ#^Åjâd¥J’9†Ór1^ƒÓ…½¶½'g¬²” flÉœ‹G^Ìð…·{XŒ³p{T¦¶+ Äßé ™˜öña&€¹¢øœvQ'Iô¢•[ü”Úe¶ Jˆ2S7ò\@¬5F‰ÙfÏX#‘‹Óï“ûvrY«£bˆ§˜E*þ«`„„ùfðTÓ•:æ-jvÄý]Æšw`A“BµßUº—‹O z‹§•þ¥IͱRU´þpQËÝ3$&LÚÛÆ@<€0rÉ,lÀ]DŸ—šŽ_Q~óåKV`Héö³oÍ#Úóù-Ò_ùŽh—atM+zñoù‹·ƒÓf_g˜Ø^ÇÃM'â?G3j*v…튒zànJ5r“‰—>5 ÷ÚtLÌçs8é|aGz¼%évò CÕº’ª=ð`Q]ö;ÑÕ’tÙ~¹Bù6‰mJ<¡Q>{ä i©ÆQiÞÉ,95¢€..O8D¢™oÚ”¯77ˆ¸C›ä™%Ûr½wù\ÈYp›º ¸¥]¦“5›X¶0Ïœ´u@¬OÕ»ÈXù P‰VC‰}puì›iǼAK„p]ª‰Ñ î½]á†|î®&Òb•|üÁ%,±b½ ­ù0êí=¤hbÞƒC,æŠx„PÝÓ*âWã)Õ EEU§4¾0¯îàÅU ŽLHÅÅujWp:E|ˤ—A†¬«ÂF{žHz„&8»©Ä3‘㟂ö'¨ ±cÔýŒCœj"ŠÏ×ç„ÄwŠ,´ …™¸„æ5%£µ®TÚþÂWU‡Æ_"è©mH\õ{# ÷ûºC$Eeû=©¢õbXDÊYi0õ¶Š¦àOÁÍá¢S–?ánüÍu=m#9çu¸(ÕùxÚ"-öBŠ_~j k4nocˆ0‚Å ¾Òà²Û”ÅU‘ôÜ1ËåGj­¶Xü0÷q>½'Xëdª >"ßÌíVÜü•K'®Ç $lt÷ðÎ~ÐÔ[3ÀñPßõ*B&HJmÞñÜíSk%ìmY‹È6ð3]M#†ÍcË œú¾œ^j<(ër{z`aƒ›É¿«ëÕ8ßO•멾DÝYÊïEÈr òþág¹›ºßôÀ*Ñ–Æ&ù–:¥,ã4´¢23Õ-¯å$ç6îgþ¢1þ…êá.B< ‰’1øÊ¶ÈßBQj,ºÃ!‡N;ªzÄxßóå9}å[%Ù^ç”Y6©‘—HhÝ›ñR֚ʠ’=4fïäpršQÅÃxXä±câp¥* v¦‡Ê-R@÷dðøùÍhÎðJùé´h`óõ8ß½“G[Ä@™r ¯ÓÅDÍ.Ú³’ý¶ €›ç5Kº¡™VÎÛhûIL½ƒfhnПI¹ÏÀ:y¬ÀåkÑÔ"4Vö£ó$O-¡ËìèLÀ:þ=_[¸cÍi ÚZH á.úq‹ú]/arfµÜodnBDaÍ ´>‘”“Ãógœ7¸9õz›@L„b÷ŸzLeeÑ ˆjÒ¤ ­WԛÉ›Ù=¸*&VÜÜzùÛeËá UPH¦+iúpNDM4Ñ©ºë¸”;m¼"«vL âieX±];¬¼¸¨;tSì®ùsÓ$5^bG¦¨¸û7Î}(Š2QhK@Ê6T`"-*]&­3Yl÷Ûî^PÚöýdå1¤ª©m@efØÂ™TW.2;ŸËo„'ó"Û~Só ”Þ¥Óp'?õá2÷”È“æ}Lý…ȃ2TÑ1ägÕeq¥ª^HHŒÃ~Ð.ØÞ§T.mõ¢oµ_på+;èyqÓ!Ý *c#–¥~!T“¡l” ämn eZûÕ8 ¼DɋْuÕžõ• ×á͘u1!Åæ¸2|Þ<~­‚\Ý{×¢t+ÕN-ÿú÷X« Œâ¯MvZZ]c›*ùJÿÖoÅ þcßLY¤ÒJ4WÂ7“‡Üž-‡€¼Ÿg;?6#±AêÕõ c.¾JJú1,$ãÌõx„°´Ëžì]wX €Ê/¼ ùåÕ…SÌùsõò¬(Eo`› ²ú(÷q f'o3M0ßv½³ß‡÷ÝQ+~òØ"¬š—èøÍíÇsÄEA3µ•ÙÓ% r“²ðb'Ò³Ä)±¸D˜z‡†m<çm£bfÛü³[®NÙgcÞx"úë¬m”bõ›SL½½:’ëÜÏÑÓãó²’°I)Ä÷¯I›ñ“å_:ç Ô·ó½Z]UX%yÞã£t†œÆý¨„7 xBÀA|‘Àa_ËÙÝáUÄÈݳ“NŠ ¹©®ãŸX*'k¡ú < &ÔÎ STG] YYÅ+k.M׿&ÍÃdØ«]ö♿bKÂÀƧ.Cü­£.3…ÊqiÕwû>úÁˆ¯þ¼1)#¢(†BF¢„ˆ‰Åè…wÏ£íÞ-ùön¦ÛõË4ŽÚJV=ʺlªôKiçÌØIÛCRLqfZj¸¯Æ18›‹Z©H·‰|̾<ä^·–H?‘ Ürt°]½3ȱƒ~z‚IŸó¼F7Á4Z-ûw ìF)ò{àí47}cI5î@ïp&íttó2Tèj3&tObñÍfýD~f® FÏ4ïËžš_³hqöµ£7IC¼c¶°šÎ²iwƒÆBÞWÿàÆl¾‹ÕbgA.ÒÿnAO²>Ÿªa8>#êIÇ? ÇP#îàe\ÛBjçBÃ}%ˆzµ#§)<™‚ì}E–åWFý"ƒ£ö½„)há¡®Y\Õøó{×Wßê M›z!3ƒ¨J=ÉèÞ¬B®‘HÑèh°Š±ëò‰ÁYR9±té ‹ŠBËfŽWÅWön”À²¾ƒÕ¦dÙköÚòð®Þ†¼³E$tü«‘¡—]È uî>Ì@êæ>E¹77ôQ-ØìÆã{¨ ÔG@p-óýp-ð8Œ(é‚L`TŠþ´«ëÏXºo’Ä!$»Û'³Á³±ö&²EbEG€e±µ³Ί²ªiF<˜¶6WÅ‹€Œ ‘žPÞ´™”ÙðäN¡2D°Žµûù(È»%®ô@W©†¯þ×–0à€&8Â}e-»'³¾jžÙRø`a¥àðŠ +§:Û3×þ.þ3ƒŒ¾PGmVsV9Y¡µ %8´~°gç&(ô¨NY% ¶©&"‹Qf;Xü>IÍe¬ºMah$Vgp˜C}ÞyO{ôèðøMŠ«‘õú[m_ÈÀ/y‡r•i¶UÑ×^ ­ôuá.Á%’ž¶«I™÷|²#}#ï!Ž›{YÝ8hr{lœ¤e6<¿¯½cÎ=4ܽ=oL²=Œ¦ FMä¯uTZo‰S€ Dë ÏÔè+Â&ºWhvPñª¥†­+ùá¸ÆO t÷ÌJcå5<ëÓ­œØ±)׿1¸¥ï•—l\ϽEn¹ì2þms<@ÏŸç‹T:—$M?¢qžàº8½·©P•E7›GoùµÎNDX•OÓeF¼¿Šú~Öž|!{r]a‡¡ö–ü§ 2²LJ˷!`°ïDüäí¸Èèe+ð»éQÉÄ×Gåüæïµ‚Vz‰:E±u›i§‚³ó:¤­%ȱýCr¨*ܾ¨cŠD Z0:¨Õ_šr§LpÁ´—Û•X>Êõâf!âëBpBÕ_é91ÅÁ l¡Åýx\ùÂ]H°¦ {'Š'+c,!˨ۓð˜nž²Ÿ0;Ri’¯_ò”(ÌR$úß „Êñã›®*ÐbUÒ5Ì}“«÷ħ ƒ‡€›c»þ$Q‹ » ®GĪþغ!åt2­f¤7^ì`ë<…õDì'[ëvþLÇ„¥âPIo-Ʀ{ç lê¯û…3y0륾“ ðú8¦Q¥>Z—Ÿ1•¾Çè9e–Q#¼Õ†pf›ÎÓL“š“|ÁêHÓ½fÄÂΉ»&ƒvú‡©ùNŽó{|úäÛ ˜l»aøGôd°Mº&Lï|Ú*qu¬~]"î²¶>¶¼sðbSd6†œæ±$Q¯ @X¥]†ñx ‰mGg™”ÞYv¥Dw’ærûé­PÕªaï÷¶ ø¬úTßk^!­š7AËVIŠšÄ¬$ ègòúh’KØ>xQ4<7²ðÒÚäy—ï}.£Ñ{ú~~iFS¨ÞĽH ¯€.RÝ‘CË)Íé-ÛcÎ|… 7òЄ?÷TŠYع`šAÓ ¥]°&¿‘^yÞ´U`X »Ä™£­G Ä_hDnYXG]|0Ÿ‘h:£ÁÏP«ùóîÃ2Y;ù9y.G¢z§3Í×NÀ( B~Y4Îó" ãûYO=ÞêÜ¥‡»_?x—ûª ‘1ûžWÑåe/+™ƒ îUm~ô¨†YÉù/,.”F{,lm0,¡×QQ‚ßOž¿ ܪڔ Y.[üFlÏ0 ð¯ÇZ2¯cÆîJÕ6TÝDQ '€”ײŠ=ÕÛ.UÕKHt!to œñ<#aS°2Á\¦%4¬ Ñð•ì»×oªGWîÛœDôÔ|Ái*ZO"f7ø?ÚmÀ˜KxåõìSz'Z.ÜÛ§e™O ùf’y•ëü:Ýz aQJ£ðLY$[1uÕ¡§_¶k^£hµÑpZ†ÑS…ëôÀ°Õ„-•x ¬¦*Ïo‡€Ï\k¦ÝˆÙyÝÅP‹<˜„x«v¤7oè&uUòölÀcbÏ2³|ù½Å¥y[Ù ªÙßOÝ*ŠˆGõæ3 øÓ¯@Ë¡¯‚$ܪî¹> lúŸé:ª$4¼…Üð­·ÁÀ©íEO’ËRÿRd—îw¡_t·SäáMö SݶÐ4õ[GÛ²öã²1"ˆ0¡»8µœI:<4-DT»T8sÛ„d«$÷ú‘åœêR‚{[×ptà ;g(Œì9EZ¬àR‹:iüŒÈ›Kõ[¾H‘Ò§÷{[ãt­î™ø—@?¹âò3èŠõ–c½U1¦¥ÄE³‚z¨„èÞ›šÔo¸¾Q8LÍÂÍÈbXƒNmä¬N€Ô2H•·âáŒJõˆy}м²:ȳ“ lÏWYÍ›ø¼³Ý&KŽÇó2ô‰Wá‚Byˆ ¡£>€{~ Õ’tŒ~ãŽn%Ô)ÔÄò*°†ºÁ.}iœŸÒûe“%® 6àÛŸ›è`ø1i?ÓÊ'”ðÃ.<¶aˆªže ‡£°å­/Ÿ´©t:žnõ•¹MSqøOƒ~Žm§"bãÓY}_–Ï×)ÔZô½x³œ'ï-W[seúbg01Ô´¸£)Œ7‘çI¾ëÛŒÚ÷ë$~˜#LIXK¿Äßg!ÝÔƒŒ¨²Ëö¨/Ã_q™Óz½µ{‚Zéý 9ž N±æå!CÄĤ7ÜŠˆ/üSmàQê=pøJÞB]îõ©Ï^ŠõUUäSYUGLíoW4×hô‰Ã*H'~Gª"ópêBÆ±Ë =É$Ÿv´7C•T8Ð’?“ÍBh·AÁÓÁE{«&}ë×k´•¸&˜¦à·:*y0…ñµ³Gu¿Ì×÷O®h•¹ÔãÐ(•'ÒŸ¹Ná^´ô:xNg2…è(÷ëÁ›ÉYq(ÅUø/Ëtjµ©ªÑƒØ³{c)†1Ù(èÇÐâìMüAùénÞà–WÔØPñs{«B§’º-ÕÂKñ,z®>H¨ò1ê'ß=Ôs»^¬c=[´*1 NjǂC´KÀÇ•€Ä–¦be}WKBœxíJq¾ó ’³JÎÛ7Ó¤•v³Ì‡h[UÀH¦¿Ö¸tÿ㬙ÑEË0ÅGÎÕ]^'MÒL'óš(5)ó —nÃ)˜Ù¡ïàTkü¯šœcv~´E(µ¯ìÚ K ²=ìØ(Y3ÌUÞøKGÚ’>Øz ÄÆdô‚6”/ãAÎ?¿îîaZá‚îéZa èd÷/i;ÓüŽ^]1ˆeµÆ Øi¬PÀª¶ÚÛ&³?’ ™ûhŽŽM,¬ ¤|­Gÿ¨'Ózõ¶‹ÚÎÉ…—}%<†7;`ù³ôå{½„“™ã-æZ1 ?J»¢¬4S•2¬d…®=úä–Ë(òa?û¼^Á?ÒøµsîXïÕ‚jÓ†?$èWc‚UìÐQ ÔF/ÿYJ”QsÀ4pV漬ÆRßyçh>Æ2øO¥°à¨©ã›ùÙÝñyŒAêNÒdgë;Œ/ñÓ¯u¬§I²+ÛÑP8ÁÀÖæž¸_ª}bˆçB¼H³ÉÇÄ'Ðã¤_póÍòBoò5nnp·ÌÁº¡dVï܇ Dhìä:ÆMˆAuì®È‰ŒöæÃ=B_Âv[-œ¤úìÇd²­‰žKštsP¯É¥]NÔW¾•æ2,2î5Ÿ·Á3¶h×§Fƒ,Õs—`_F3 •ñ~î´¿’2û‰f-e‹DpLË*÷4t)Tëì&|–¾“AbI}}ögÇ÷J0ЦX¶<ø"fŽ<²GäÛëZò÷¢I>MãÎ?k`Ou 0zù è€k¸T†¸¾Í!,‘*Á6E©Œ¾ý.þÚðA·{Í5*ù’Øt"rh„òuF¬y°V¯{HŽÝ¡¸"dh ø#1Ö&FÚl+î2+y^.µcuŸON@Ð;†™ Ö©eI½õ¡)Ow›ß|Æ¥Tâz‹QiáÚn@^ø-ô™J&¶Î^Ùû10Ç+|žcÜÍ èè›ãÓýªö—²‚*áÆÎÊ ¡Ùy,Ø›‘Mºþò_ÓX¯Å ø“Yת$r¹&ýѹééƒTkâù½ãnKØ,ì\*fxÝÆ¤L î@*D GùkΑ©þ1¥#XAwvyzªù˜‰V„˺ûÊn* A<ùh:{=\_VÛ0uà–ƒn]`Ýjvó*Ò¹ßÜ µ†> TÐT³†ÿh*YJaçÀ}‚‚h™ˆð舻ڂ|Ó(ÇáîûuïvU7Ç·:ÆvÆÓ ĉPÊ…—;ÅlÃ,IhÙ)`£†ïìš^ÜWG*¹|Fº^ĸÃøôŸaŒ5Æpd,\$’ÕüŽecñºTv¶iƧÔ#j&;(÷›@^¯ºPj©,mn¿é Ï]ò%IÑ"GÔ¤<:_0Í]õ÷¹Vžàðà^hóXto¿Foˆí›²cgäA.”¸®Ó`ÔŸÒNºÊ+³Çå¿F•£È`ò0ø"o…RHá&{nкg ÜAcfDÛÍ'°#ú„Q˜ÌPc `…[kc>pÏoçÑåå+»"<¬³¨¡;VlEx°#˜=âedØ.VΘµ\qC«‚ø‹â0¤×){~6ÊŽü¬¼•îpçщžk¡ºß¤·ª‘1 Y 퓉έ;K­—±Ö3…À˸…ëgeîq ôŠ-µŸ u`´’¢Žî4bäá#XØÕÅ܆MÙÆë“¤f*‹“q¾IàÌäÏn5öeAygAJK±aCK°&ÀTö^ó{ÐujgU[š‚æEøÊ–†÷‰Ì(¿$´›Hói © Ò¼ÖïvMB|o~O ÎWLzÈ4z+ÑD±¯Ý‡"=ˆ,¨kè¯y,ãSÃ,À.]n}òôµaÝëé GVÂ>Ì©§0YŽË!aÛ¨^\ÅÔgÝÄr›q¦Z÷99ýy’ÖTu»ùhA±U q“/ÆqÃÈ)ès°¥¿}lŽšy•^¸\ob¯»q‹Ó˜B†o~Ü6šNˆð@3œZè£ûÎ ÇžÝ(ÉÃ2¨¼Pk¢K°‹àÿÆE£=w訔AÖh[Üǽä#ûТd0“(2ºj¶Þ²–hIºîtßÔ¨8EDéd®. À+ÃÄ…„â®l“.­Á݈çÁ>Õ;Lf¨8‘tAìqKŽfP¹Ï=›™–¶ÝÎiÁÊjGn„ç õ•žC÷÷u;^x‹$h®~˜Ó’ïó½¹ {C˜Îi³nNæBƒ‘ojPû&%pta;êéÉÜJ‡Ù°E´M¦ÌŽrp†l®ã|-Å›·Ò©QÚ‹¸¸~JƒøåÕÖNñy‡Ùš<‘âë* aÒˆŽÒN'¤Ü+oתü¡2_2Øí"ªž­«îg¶kö³WtfCò§ÜâÁ¡¶6Á@÷íÙ¯dó/Ê» `Dçú¢Ë˜!´;Í­U´‡º(ntë¼»v„q„ðíŽ@@Â3x¢?œhȨÒ{“.ØLXˆ¤S€¨O­g¹ÉÒžWÎðŠ¢83 ‘(Ó·lwâ^¦¯¹ë¸é‹±Q“X|Fñ…`7‚¡¹s€¿‰ÛÙ-—9˜‡yiWÞÞ·Ÿ¨ æƒcG• ŸÚ]Ÿ¢³I£˜t¥0DTô^f²j·Zä‘î&pýÊ$ml_”Ý1vi‡çƒéoÞ—'`nNÙ5÷÷ÅáÀ¥Úó‰…ë;Ä&—R7CàV«O@—¼œ>¼©¤Ë\ñq1ñ ¯GqUƺ†£&¨u¶-ר Ÿ¯«…(=ÃÍoÚëøúLv©Û,‡S:*üZ'Õ÷ž’‹QʉK—ú†&{2„s# \Bé:µmºH Ã=gHÝ75Ÿ¼ |ÐX4MøqžJºÆI”ðÚÜÚÕNö½jÙH&ÏŽð?v™™ª†r‘­q–Œ#É&jŠËUúmL†cÏÞÿK”@ÊG_=wN|D~G?+±»SüR\þÆfÍŠ‚0!"3N¯º;&6dŒK9ì¬I½þ:ˆœŠ+^ Qög)øqÃ=Òe›á4aì#ŠXô¡xªi|Ý0ȯªF˜?1g⟳ Äo$9$T½3tª.Ô4è î‹¡Äsªuû™i—¨‰ßØ¢‰ãŸ<ô&.l²Ù•‹Í"Fú’G£ äî[.~.žÊžUÜ8É8µu£DzšñïÐã(-óÀ\ç9ÌÍ;ŸÛ軌ÖÓA-Éd$¨ûlþ”ã›*;žåÑHY)ÊìªÝHÇrh·3î׆éÈE ÏL“²¡ºí® —‡Ç6(ýpuûdïƒ ª#PC9_=ñ^l}½\ƒ;M·†……tÙÉA6!Ú£ìlçnÓ¼Ge½í N ”?N‡ÄÍ­>lQXÀ\Ý«uÎÚS;=ÐíZOÑçjÓm¥hÀË)5€:¬„@ ¡%×C_÷_ÝîÓqµËÂÞ£kÀÏÚ›ÜÛ°ÓTˆ·ÜY<_Oç?^yáf¬á8îà ;áð̮˱½«Ó¤%Çß"º‰è +á¤^“3—í.(&se g2Æìžg7謩⠜ù´DÈA5Ê ©µ[/¹Ô¥Z®V$0!$•áѧw­stRØñ›¿Ù$‡Ü:̦þ.û:DTŠ´Lm‘Já&Éãžà¡Nw•fMA˜d,瘷?ÒË¥•=†È½ £Ï3ŸêF9Ä“ÊNEoKƒ¼«=}Éú¯‘ÁãuöR9––¡Ü Y4 uŠog†§â"ïåõ ¶6|õþ´4°³S?©¼¯Ž ·àlj3‚ë—+,ïZ¦ªÂ&å™;††!z~´ûÂÇBbþxªRÊöšq¾Ò•Ö‰»Xø‚ßI4×W  Ùnõø³µþîæ}?ܶ’A‡`p;¨ÖcN[d.ªÞbª ¬L3°ÇÏæv¡ þ"Õ‘•XÃ\ÒnÝ»Jµé–:Áx‹˜¨â7M!y}||ç~ ®Áé¸Ráã™/{@aÉÁ3;Ý–½ËÎMV&‡èãH‡fc¿ wܵj¥+"¼Ë¿`}Õ« ÐÜ*…«šS[±SÚ¦é×ëkêÀjý|eÙÅ-bªP·C‘ÅP¿ç·åëè|¼Måfàª3†Kem_7vcDZƒàAåE: K$¿Ló£"šÇ ™W[¯ªvBT]fÂÆO#ARŸlî sªKTÿû;1ýÂd1ÖG ‡«Í]®3©Í\Õpé5YÌÜa`Ë…™ú\òÒ6j¦†JQ&Ëé—!ãÛîî¤Uµ£•œý–ºéFšE&"›ŠÅw &‹!¼aÔ÷ñ„•8êÜ­U%uiL[X§•Y¾jñäů¡Wïïw›zs §²'îÝ…/öóx(ÅÉúk ԈƕGVò4Ë,z9¢=8ÂZކ/çÞ=á=Õ 8ùh[’ÉÖÀ5®oÇþ8F›}BrÙi“±dŠÍ?Å [j-W{ Xãó/ sžb€È»fx»r·Ì¨Öt1Td§:Æ}ãf…ÂÖŠøI =±ÐIÔäR¨ Z4À³gGNÝjvóÁ.lAa¬J<È…¤ûª™I›Ñ©«øò*F»ªSòlÐ8šREÿø˜Y'elçáŽvËÊßÌׯ-}à/ãNÚi¹»¤Hâ¡ÔèèõïÈWçìá9\«áãA?ÁóÝ? ÐlíB°ßgƺ??xãF-•¿1œ¶ˆ=Ìþ¨¸%k4sÞ&G¢bψš\\¡úšz£lj—Ê:’8]AWØŽÝä£}9S‰(ëPö˜šÌ—˜Ò*'šQð‰¦Ú¢"óžFøú–äºâ±L\ßÔ".ÈÝÛÑw*´“˜„(¦—cI ÊæÞèÌé¯Ëq ¸ YyQX„snOÕ;v‘Væû†LÏKà3Œ|bèŽlòÙ7AŽ»{ˆöâ»o˜8èjWÐT°- $ôD/ùwCL#ð¡=R9$Ï7ý÷wdñÙ²ôpú—ïèuÁŸûôxy"’H§ ¼•E×ٵɭR+…°6+H?(×å X‚ûñÎA>Û?oKÉù“G½y¾%½tOyŽ7$• *qüÑâ0nþ”ÙÇŤ åo+ʽpºhº#ßgiQóÓޥИÝFÓAkÇ;wÚ9t„=ñ€U ãõð~Q8öå$ 5´Ge¢ÜáýXJ—ŒBÑ~Ï“ôôa·“Ũ}«Ýc?glùhiN™ÎÇ«Œ’·ðžÀ«<–qöhzèý «à# w4W›ê‰åÑÎr‚ ‹ìvŸÑIqa“&4ö3Ч¿ÌѸT†éžvúA@%ïÞ6Kg¸¨÷Q-‚]¶Ã½µÊ wZæÕ1;¨‘OŒ§9f–Å%ŸH†ƒåV³u×fžJ÷7L<´œëJ»ˆ½pV:AJ•߯®fÓ‘ß7iŠP¿4XK>u2œv*¨?†ƒ£úŠl f‡ç¸«dx7íÄQU,ߊ1ÊËå ~ º ONõÖIzDð3ªÁ]N(pÊN®‹®ç¾,ŸÈ€´ƒµç7C®+$’gùÒ¡Û…ÕœMešvd‡›¸H±Á§Š•ÏÚ冡bô ? âN³Ó¥ñ'*=HR_-ÎðÔÒ×dº)o¯_cU ­Ä/¤[çã?¸eñW¡% ç|@ Â#»Lº†±}çWÖ˜à9Þ™e§$¸Z¸hƒ,O³}§ó@=¥MGï-ð­ë£µ.#hTO›¿óæŒOv 6¶©bÌï&†Œö–&Ý1î¬p)®IðQx_š-0›±Û ÔyÞ[5%ûmÁ½ Ø$ü£³°G¥¿oþ0²lïkå)êWí=ïè~€*"ÌÒô.1ýÔpDÖ§iŒ-“nâÀ9دaâjTUÏà©·8@_ :2‡íÒ‰Äÿ|^/Gv*ý%VX”Âò0’ç¤…àœ€ºáAdÜÒ03BrYt´;Ý»ƒõFìŠ` Û ^ÝQûvtdË™ô;!mo"K2…Mg~(aï½å°†>¯Ô2/Ð'˜máûÈóë@ŒÀ3mít`$¬KVÚr.t_¸’*ÈtÝAc+)õQ€3Ž_I穨»{1Ô\Ò»ð˜Ì—®bc0äú¸m¸ýRU'œ²Þ§“ ]¡ÌSÇŽ¾‰–ýØ{ÏÁø½hF±8U{Ý8·ÜŠTü`ª©‚Â<7ÛmÉ£´¼vÊc#´†[´eès?i<8£MT¾ÿ9B2™é«g\ó¸ªD©•˜sMO?`‰š0?µÕ‰á?+Ðâäþ{Éɽ|sþÎh©IÇJêŠ xˆÆ6f!N¼@Ì֭ܺFfƒŸÄqT´ž~}d!í-ÃTÞbúóªMº:7œåGrŸ“ì5ß…ÂRL¸=¹;Lù"÷·×Q():º©]øÏÝ,å/4õ¥IÑÛËù³Ìg»¦ê š~(ÿ‘&Íö¾ðûáW$„v_ÿ0O²» jíå·`žq¯w±æ‚_ à{)ȶ ø4<çò·KåöVü½1ûZ<•ˆ÷DA¬N_U÷iRéÅ3á,Còœé°¼ãÇ·ˆ¹—=Wûì·$…3ERJÒW“FM_åµÍ¿Äfæ#çøÖ¿ø½L›—ŸöA##vy‡Š1*w°\‘TŽq]º"WhˆwIg8=;š$µÊÁîtƒR©h0q ³£¨ªÙ}[‘Êìì7«;¬ÀðP¶Ì(ýžÆË[‡†ÀRˆî›ë{¤Og˧‘²ý´Òí¼¡:P2æeƒ4E#ñqH“üµ‹D\[&ò±%F·‘SÊ' ¿èm¤Zà Ò^XÆHcÅil¸Qɹé"™SІÆJ¿¨¸qÊ eúéÞÝ£²´%4¶w~‰šiÜÌŠni{ôstE¿Ä)šÖšô/ˆZc6Â$æ!8ᘦ¼êÍŸÉydÍಉ$¶bØ—»n‚•˜µ†wèá:ð”ü~÷ÎvÃP”›î\ñxÏ Jg"&ëVÖ!@Ú¶ÃÝìÖ^ÍÞ)í#Xð\"|Íô삦V ªúþqžª´ëZç4’ž{ñUï ´UEÁz»·ÿµ}q»e=4èÌ+5l¤—ó›ÃN"§Äá‡Qt3UòD‹ù–~L|Ý2N¡ô…ÙÕ°7¬Ó¨ó¢˜$?XóÃää"ô‘3òá¸#%§*>™˜;Ø"CʤŸa?MëøÄên7ëñBGBËØ«yKHB"±i}+Ž_î­ee‹ÀÌ®M%À©wN/+!(?(‘ zå[ݰ›K$F¨ý¢ØÙí«Æ³«Ô|û„@ ì)±cŽæeû$yȶ ‹$ ˜I"Bâñ†2»ê¨ÆW³Ò¡,s¥ü„æqtäÝHlG’®IE4dH“”“8ȬÀuÑ»ƒZaˆÀƒ£±º×o0">ÅãØ½Ø86¥ð*ä*W“0Ô¾'¯ï™5³¥N åm#¬„)‚}èüÂùKwîC!(–…+è-ÁrïϽÉáÝ5±ëTiXî‹–ˆ­¦JïOC]šŠ°Eäzvžæœâ‘BÖ #Û¹‘µôȆü³]» -jOÐ*;£‰Ïê¬ Ii!ü+Ñ¢•üXáDiö±e‰º¦‰™p.i@‹—0®[ÃÏ¡{ïÛl~%ˆFS’«~*Bù’'uï“ÇMýB»µ%'ãxÔûQ¹Ö{>ÓWÜ‘Êè]Ç­~âÙ¯(³˜ãpÆï%ÃßJhöh$Ò~JÛ¤pS`mñŒ®p³&sñžþì= yÅiÆ),¨”ë¤Ø‡gDâk2lù)§'ð'­óWbukÆaÖ7=Ó˜ø²“: ´~)KR ]’L}fa´§¿õ¢ ÷+'ƒváèŸ0æ÷ã»Ø]\%%ª~kù{ž?~³Zjð]·d x`|ò+G$ÊRôûÉÀ³:^†[ ùëzí› R±³©¸5rúÖd–²M‘®ƒos å»8ôT–#n©bE²ã’`ò¡d5¥ž>Ì&Ç]w¼7;¸ž|®Xg¨PLÝHªÞ@e²ˆŠÉ¥¢Ïí燘Ÿ0ñ?ÖðÒ“X(EŽÓ­ò(4:C¥z0)C† ²·4Õid^Üò®ŒÓšÔ½¦sé¥ìctþé×@*§[|[v¹h¹ÓÃmB嫈µ™Ò«³Áùö¸`ô0Äø“¿Ûïó…WšñêågscÌD+J±¹àž wäX›|'DÀÅõ¤Ë§•yÔ©CøuOP ¯?½¡¯‰hYt¹ò`•”椸Q£°Ñµ–©/ nH¦Ùpëæ,vÉvËóV: ³îŠð‚éQ–a;šŽY¢±þ¨×Þ!º¡3fÒňý®Ⱦjë\8Ü>~˜Ùîëa´„ w¸ˆjD)—Ôpª±$1‹D˽d-ì*xòæAþÖèÍÎÿü®²êcÝÏXβwÇ­çPVããóx.¦k…8…¤9/ˆÍú„S=eó0ψî­]K m\ñ&м¥AäÀÖ~lNœ!OWPôˆìô»(ûÇ%áÿ@÷¿ªH!•îIäçX‡1À€ºWþÍmP·Þs½¹w㘤ŽWaÙ Ðó³ÂVu íœÎª2NzÅ5YÉ—{’ÉÔMƒp©Ï.É´´oä½Ñ¾ËOXàÙ¶@ÖÑ\òð/î[ºz_Öñÿ–§-ˆçNhõƒpoôI‚às[LžQY"FÓŠs[ø Àì_CÜ’³›±HÀZ2âì»ÑgýRáû ¬af3ý©ú¢váD¬OnEv ñ-iE¯µQr3ê˜sZíˆu2ÌÌAÍ,mrî4Ÿžœêé•3e°»#U’zÞ39h}©ûñîô§# ¡ç‹u2ø ÛLpÚ„¼s¼Ø@`—^a·ø¿è°pl)²!I* ?õˆg1HðL ê² IÎ{@CœŠŸöº5Ï@½¬µ™«ÖÜc³Ñ%À€k"{F¦H¡QJ¼Ä¦ËÔ«Š&Ý. !•L{ò¹X\øa>1¯eE[¿üzã:êƒ\kCÊÙjTÄ.l½6SVI½ ÀM ûm05Y–RèÅqp•8ã²áêpƒ¦#8ߦs}þ=‘q½.M£¢³6¬ÁcATþ¸a+E°*•bu2ö£ÈË‹cÒ.è>Áóî|Àò‹GdC¿ìÂшÍK4ê:é" E1«:œèÃd’é:ÿ'»Ú†¦´!œiã>ÃXp òzÕ²¬ãv˜+2©lzSMFoµïÉ‹FæÝ@¤œA·®ÃžœùÉZ"eÅò‚ذ¼rÌIÜ$|޼KØ4-…åÚЋ%ß­þÓ&T½ ¥ßÝÂ¥Uáé„‘ð‹˜ÉW=Æ$ÈŸùË0m…~Ñ ð®ã³\m$;ë)a¾ÕkÜ ß<\×' «—_9f jÅŽå˜ÑDíQÌ>9>`Ùá<Š˜‚Oå[x‚Ö£·$Ùq¬g'/’SwÊQ¡BÜæ`«~;+E¡ý„i‚ý™¦ÂüO2ò`êÿ_Lã >5J‘ßD# “|‚òQ¥–=xbü$ëËA¾q¬mfº qCÑGÌÓï}ÚF&[éIcÝÚœCßAGNWò‚¡Þ Ioâ¹7KàP=¯Õ£Ænôô|îÖÃ,·v}·Ôß{?YëµyŽºˆjI†Q˜Í\æ(2ž%âÀ'”Z,,–ý\ØÊ®6:݇ô±ÝÚïxôOeÛ¦Ý!ÒÒaòæVöYÆ”ŒÜ›'º›Ë—¸ÈÞøÆf!uJÅzİfŸÉBtãøn2t©¹­‹Ýv˜xÿ^nõ’Õ#kxî.¬4(Í1# ®æó0&™ëB(¡ bã¾ø©B¸¤¸ÀvâÎFT(]"sDŸçÒºÓA™$®ëQýNöC¾žÀ}g„]ÅíeCLÜ©À¸tk¯†>¤’ð…lÜï„ÌGâÅŽ}õ¼–é ÖÃjÂ,7ÄÂ_ÿõ\öé|¨{ºÈ·qŒ4L»W™Ë_A’!IKM¢ããúI¼„Xk@-±¶,u^âì âd÷iì—BÔŠŒ„€Ùåÿ÷3h¦0Šªœ£ #*\Ço7C—LŠà«4yìÄôT'Ã;ŒYhðEY°­vJ½‘€× Å}ÙÈ.H])Ùêp#H­G#AÆ1œP kÿ¥ÖIGÛ9ÃEšú9m6oÊ®¡©åñè«yÃåóÍŠ\êƒ?´n8²=·_OÌŽ7~˜Å“ ®J–¡žñu!N³’ªÒ!Ö¨ å e¦–±7JÞxʹ9VÞ)ŸáeÚ¬‰ÄVóØIXÑMqjåÈAê·n¼aÍÔËß×3,•FS-„âðCyQ cÛ*YGÿR¹çúÙàù@ãœÓÔÛ¶7L£÷ñE}åwAåô¸RóNHb+mS^q€{E¨ñø§j6{²êƒ,¬¦/¢þ½¨Ø¾bź×n©xÛm]ZQên%³Ž?fã=  vð¼tİB«¨*záF4løuN³Æ''´}Ðð¨v…äøó4êh©©ôÊfø9FÛ¯:åoåuF§N84Ζ `91T×M¨îë“¼ß ­•ô}Òq¥ïvÇÝÒëºÞlTê“m‹1æŸQ§šsÖ®$ÁQ®è`çí¹6.S²£‡fB‚ŽªUÇꎟenCÛà%6ävº{—Ϫ–¯u°‡µ}ã[ÁËûÎð(DÕ o4Þ#5bòn¥…O-¤³Z½'šV³[Ü2ëœ{NÚŸ>LÀw6¥¬Ô¸ó)õ_|Ã")KçÕçSúƒZ.·÷Ì|É¿£Ü-Š›Ó!Ô0š»0TB*n8~’[‡ $¸;€æã,™Å8 "Ì'“’ÛÒÉkN.å¶NÓØá¯s«yd[bñ]9òE±w0øÃo,iÎ^‡3ù íÚ#÷P&:’ȈŠé7”CLcQ. %tÙ­éêöK®mã¨'u‹"ÛIòHÑzÅètÉq#|ñóÃ.[n 5HŠÃ»HÜÐaA‘B¿¬pã&>Bei/å*– –B…CÐd¥|>Ó˜Lùgí'©‘!÷A/*‘{—© *·é7‰Š.Üš•ù6¼çµ€ X ‚z²atñÄcË{*A®ô:ο¼È Rø”€l¢ ê‹«ìßüþàZc3]ááW«ÈQ$fÂ˹÷#fÀL¯ 5­Š|øõäOýݹbbÇïË6 d߉BjMë‡î˜î M‚1 ð¯šo‘Ú|+T£ÓžÈ{®Mæ J®ýÄ‚µN¥#•Þx´¢Ic„˜©¤y|Ætz'…ë+[÷~7;.X"ñ(ASU`%ò×ë ØhNLXɨf Ç\*!¸¾gM ªÿQÔ€ÍT{:!§íäg²ÿЇÖK‹Ð™¹'˜/§oÜsNS³ e>Ö&<Ñx.Xa ç›ê·Ë»~ÛŠ«ésBªÿ@yZNBHBY<6®öJSÜfE^F%>¸¬7ìcÞ)]^‚ú_õ!t~t–ÅhjªæZînB…sT?}K}ÃqƒgÅŠSx7׃Î6( гÒÎÃÙ •HÏRÏ0E‰Ì9È:ÀtEGŸ€„S¼TÐÇ OEÿ ·Y>.úª:ÈÙÆTŸ­<¢ùĒȧnqêF>±.M<3t6ÛXø´”#ÌžúçU‹¥?Û< cýÄì•N™Þ$v d‰š-jï@%…ó“(Gw„õ׋ºB" Ü7[ðÅg¾®{÷Ò|ÝÉÊsM_õvF` ú‘\÷©7¾±H.«-¦_‘7J+rwn#<#ý';ûWMMåAþMgÅìcä=û;Ú£8£àÁ“w±Ul¨nÐáFÉhÇãŒÉ¥UûðŽÝÉ4•ÐÇ67~|Ëõ›çÍZdö¡ŒÑÖ>\6 N¼’ì$ÖU™GuS¹g+Þƒð#*«sÙm+ÓZkÃ}8Ýâ±½ˆMÚ• =KiŠ¿BF/RMË©ªß™°;x¸¹è>7D=É,•qt1(ѧÝu¹§ÆsƒÊãh¢ÎÂ}Í5â7X Lš‰D«°U‰v`,xÔöî¢:U·§Á¯J»IÓyf-§&‘J»˜}#NPÓ?wU{Èraî˜@¨ßÅÄÅàå‰ZJ.Œ!ÞûùŸ½¤­¶•g•€–¨J184éãIÓ:Y>çÚtb(ŽÚ`„ TœjöšÒþuA9Õ5Á‡z‚y´ÀW> tµC¿ W$¯Ù˜R”gÜûïbl¸´Yî{-šC•OÜ뤟 Ûí¼ìU™Æ‘7þN³Öz%žï:ZÞ¦@Øß‚Xô2{w£œ Ž’l¯3F7è ‹ú®wiìª!ox¶ ßt²€^3óák±ÒÿVц”¦K1Jm6F—)ûì[ ¾·ç÷ Òç”~OaçìgÏԼ鶚YVr1}‡Œ ,žº'‰ã>ÕŸ`°m¸BÞaj’ÀÇeS‡Íô™!¼ÜΫíBw+3*«Î$þ7k¦d*ÿ‰ç¢5ú^aáXs"vŸíäBÖøîDs‚¨üÜ,»[MóÛ󶳘ºÔíŠÅ4eÒ~@Î_…B:åqÄÒêŠ}T¶¶póõïÚ| GhМÀÖ$mHÏ7oGó꜎Ä(O¡aGXš-=­}M¬¸‰^\Ö +ýhbuܨ{NÊ垃©´V°´§Ðâµ1Õûæ(Ñ™çqzW‰BÂ&x™rneƘb4–QN UÐ6€ ð{Ï»Á&ÁBâsŽpÁ÷ˆ÷ò‹JªjÏ\Ÿ 7ŠêÒû^ü¼Íš)tzÉ×VsCÿ?Ó‘^” q9´cV ¬ØÉžx¨ÛQæ@rV ׌¶ÑÍÊ´îÏ}ìýx#§#”ÿ±“?ªÁñ¢9¼»¼ Ç@Š9^÷h…ùßJX‰9û@6$P¾f)>]M! áõi¤ÀèžYUõ¯ø ¨8Ôð>M ‡6é?+e?×%‘ž+`:éÏf¾K½Fè\_púyà˜¿Kä¥{Û9ð/hÈÏ=iûy…BÓT\;±6^FÜ`ÁÓBÉC"î–üÏ’…WoOGΡxj,ž{ëCßXf8µÄŸVAéþòB2B}[B=Ë—×vÍèD¶‰F>â\-4ϯ¨ Á¦Ëôn[Šß|Q.ã锩-VM­¿¨3#¬ò ±™O9¡ g´³-´«ØÎ÷ ¹Ñ¼”‘m^ò©—ãu_Î%~… ðØý‰·Û8ÑeRÂ3;Ä¡§2a•_<„,ߟéÈ¿K«/äò¶ëe ¸Œ’ÿý3§{ỡÛkÎ3jýaJ˜oSJ¹ y¥˜¬Ü4ËÛ/­tHîÓ¿´Kð?ÔW ]»˜™û=ñ‹7\€%ƒÜê¬8>D‡ƒ[Û}ª“pÎÓý⧺gC—cøÐôš"ÄŸ•‡_4b+±ÛÂTAž6Æ6¼2<v]Þt)Þ¡P rWôµ<e¿UÙXÐ,æß‹ç.àt{¸…ˆ„õ8C· ÄI»•,wÿK¶yO7ð­ÅêÝ÷h‹œÑ1·ðKˆ‹k@‘oAmù%;CíïÙ°/쎠 ²)^à_!¨O‰`]ñ´Ú×w†Çþ´P(U@è üÊøà½ýÚ³ÄN]%âkæ.A)ácÙ,–‘…¡âÚ@ö՜޿V¡¥`ç(šúbÌóﲎ”¤VjöT©ÇÃK|4ׯ1ÖkªHëåFüÉcÓÓ궛Яs±â¾?ùµm>èǼNN)r0‚8Hú«åPcNWQ(Y¸LG`Ùà ™øbqïMÅñ$ý÷AÍ¿7,Æ@Ï©÷¿-~Õ|1dv;°Ùõp3Ÿ¸“?'ðöOö‚¬ŽÞÃó°CQS`S¬ÅÀÿbŒžëq=¼µµßÙO™óPþlCF9ø”Ì\¿‡nNßi5³²â»W%ñQ#ÕŠ +M]<&¡(ã®[gÌ݈LPzZ7ýoØöuŸ’zýŠ‚°ªxIŒà™øç ±°ˆ½é ìpOŽ„èáVé`¾Õ³¡VÊùbÖ ð0iö &†=dÇ&Ƀ³7ÿ Gö9‰Ž =ÊøM oâ›Ú«ü±¶5dv›ìöÕÝ’¢ˆL-´c•-%áSœÛ&dkŒ\¯D\Ó†ÈW÷aÝîÓ|*£p-Bíϛ¯±K Å 4êTŸ{…‹U­M`…í³e.æ)òþë2Õã¦n1y’d¼œV_n/&²7d3ú4|:ç‘®5®Ä͉$Y65âªZzÄ„kÎXxãNìþ쉥IªM³ÀLTd`"d%ûs»!ëƒ**â_Ôùñ£g%óõ.å·1¯mW°Pœ¥\@úøÅ˜RR8¹‡!åï2`…òÙ¦O’¸ Í/ø…¶5·‚ÛÅ™îÖÔVí˜{ úLƒ¹g®Él“ø¥äí>k½a£Á1ÂÑåg‘bej^£ExW|ÎÑŒÕî ³÷ݲÁäqÁq9aÓɶd©¸Š ‡f–$ ûíw°Íé¤îkzss¯¨,>²Ýoÿïÿ’le2](—@ñ™n:!BGÌ(JTZÆÃÓbƒ3¬ý­RÒ4Œ¨8³dBÖ›)k€æºæ2ãðXÛCäq”L¬©fÝÌ}¸Ë1¿¬G0†êëhIÝë– îM²­ÇºÈlªªÀŒ†-áøqÁ#÷W:þi3­ó0õÒµÜr')håË|ºÔ\ØD›×­œµî€©LA­8žg˜ÕS§A¦)ósÛ’âI›G9_6B’'âtÙz4…=,ÏÓ|­¢ Ñ~ü ."¿ÕH¥Y| ‰Õs¯…H-öÙÁd»Hå]«ý³‹ÕEóáÊÓ"¯¨DˆkJ?”|±QAš¹0&ýïToš¾VpJÄgèVÿ¡h! X\W{í':ËkC âK9ç;m«ý¡’öÆ4aQ´¬HƒWo½?ⲯšßs aÔlà:)‰v¬öUÿILx7û…±¹4mtÇV¡«ÎÍGf1Pë¬e‰ÈIAóeW[ì žgïÀ ½+…,KϤ+ J¹ß™ãÞV#èªÖ—¾%¼¢ºž† œ—Ž€Ý¤ˆf?¯‹!P×h8¬ó˜‡<Ù´lÙ<›ê-Wl«Ý‘¿<ø6›ÔÃéßàap‡ë= d€a V±QÁ_‰[lšÆ?ÚÉAñmv ÎÔÑ~„KÆ¢XsÄÿƒñµ¥[Óëöåešú#p a1¹›š’¯1æ€N]ˆRJTedg¢zkÓÀý¶P¼wáÖ‡Òé±w¥mA@ ãŒš´iö©Y}/Ùq…ÈbkìƒñdÁ6ݹO¸n 4,HÙsÕÑÜû›$QÛD¼cÅå _gð]_hiP_К&³%¸@Èþ—áÊõB†e»ì¾Çhš­E|`_¥±D)™gdŽ¡oYË(¼Ñ¢ÀwÓÅÇ&{ïáôc7ý#KÈ+ƒ kWË÷Au®ðÓ­œ0§Ÿ2‡ùÿg?C¥¶ Ÿ!ëì.=y»ÉJÐ[Wb4â8ß“QýHöiz¤SÁ,I¢mϪ \÷i«¹9”Ã2xý"J§o> P†•Ìzü ö”šCd,‘¬Î ,füµ8>ÑõÐ|1mØÎ8¤îä)Õz˜©íp5{¾­ûÐøäÓâÌúÌ :÷µK¥¿¹Û0T£ŸÖ‘=ØÙúD3¶%i¼5cýŽ)óêÙ ØzöäKKÒÝÂT'×Vó*¿yÍÏ37a&À¹'Fè&§‹W–] #}äVèK2NØ]õë eœ#¥BÕ?#Ž2ÀÊ]ýÛBïEþd-üƈyªH¡ÔÅ·dX:™Ö¡ÿÛ}õiçË#ññç“åaˆ-ç4Úw—±-W'kmøYÑé"×òj8•åç‹Ê­TnÆLê–‰+ï‡ñ³%#vnÖÀûœˆu¸ œø'µˆîÚËKºïã`1‰Ö;¥O°2Ϥ.R4ÍÑÚ |ÂjГå sÁØ<”sÝö%ïx^…®ÎÕ–²Áê‘€º¥L Œ£ì9c^ØÌÅAáÇ÷ÃCËþ¢‹ ¥àn>x㬣ӹsubó$5l鱤úŸOj—ÞÒuu»× ÓS©›Ô*ÌkžâfûE” •÷»^DY¤`+Ý.¾2£6@}°n…ì:ù€’1Hf2d¾6ANòünþý­7—•Þ\n¡ƒ©¶Ð¯c,(ÂêÇZP¶ªaC¼ÖoÛÞdËë Pʯ|õ9•Lç>U¶0Ù¶ñ"Η‚¡]°{òÇ’ ôGt‹?áJL^o“ye^±C{ò†ä}Œ‰˜ÊA¥µøÐeÏ]÷„nÜî…â.–„Sœ¢D¾³ÞöGÔy¤Ô „È­¾¤1¤»TkÀþ ûSÊta[à|,‡­g ¡š´ lºÉ»ðb„šbà9‚°ç)ì…H}/",ß…–ËO‡ö±&?© O" eú…RÚ3.÷™¥²šçKS`{ T âÌ­§17*×ónð“lÛ',ŒÈö♓__ÿWÙ.xú޲ÐMCpùíCÀÏîḆE¦õjÄøúݳ@ã ;>P¹WNëUçˆL<'´Ž&>l˜žÆ£H””‡¾OJˆèXYï@”ÀÛm'LÀUª”dx·‰sàdŒuú Ft FÏØ¯¼û³ÌQ­­I;OoP±SýHa²ÇBõÎÄî{TÍßÓû0Tßôo ˵¯,]î}öxd·{Èè.³þf]ÜÄŽÈ+ÐÞZ½ ©3cª-òDM®;æT£¯d¢g¸ÑFß±a|ùÊÈ?ïyaW?ëæ×Ïà–V´Èz»â1xú_*kE™ñLï"ç›å¹ëÐÂð^üH¬).jJ÷nÑL´êoÜðs?L%žõ-r¼É£äÂß'˜?jÿ¬¯WïV¥I/tÊߚ؅[ªë•± LcÉ-H+³#Ý)#fcljÛœÉË ¢™íñÏ&ša®ÄRÛ=Ô W®¼²ŒäwH9u|S¾Ò‡êÚµ¨³$®éîøŒÁŠ˜èÙ†H°zbP‹êúLgÉ)Þ²Ìîï=ì?{‘oÁk0mµ9‘v¦èxqߤ‘„/x>(u…ƒþ$u’.V×n nª­¹e¾ƒ’cmò˜8Ï2ý:üTY]Ë*m§XônÌÚÛÎòÛ‹§ ”¨ÐþŸ~«à&*ô•‰žï˜i@¨AN^ã8+¾ÑEM h±ÇÛòhëÑ‚‚ÅØÇg 1ºœ—%!V˜D+«ž»uõí&Sײ¹õ%NN2¾¹Õ·W’à‘ÎÍŠÁ—2ƒBÛ¯>Ê¢ÿy¹“öµÒ©ê<{¼âhö¦é"dNJŒ…9öÀ½}®‘՛ɩm“K*[mû{ÐÅ‘ìÒ!£®¢K“i80ÀÇúþ®OÀ‡¹x€dð;øÆ;UŒ»M/ÕCk ¼ßÖ<7&gqz[ÞÔo¼2‘2¢áå0R=hv@üÇæ|”eöÁ+å&xOíŽkU:_hº&–[>ì™ÿ`ˆN_êq‹€¹“ãçë׉#UÔ¸%šñt¸ o$3¼ày,§>ô\q5à ,U£¯œ:ÚŒs•_~áÖ!µÄu ¶¦œ·–÷Ñí5ß!‰KPZW³ÚÿöÌ kÇ3×G`E ÓÆ¥8J@`7 Ô ´1Å 3@)€ÈïÂ/@ŽÉxÀâ ê¾2¾pF6auŽÒânªÄËClT_¡4пðM­lTÄ4o+4n@å.×0黚iݳ¼ßìë©!hœÝêÁÝÐÍ|ÝbSç‘‘ óB_zÔ­]‘EöS˜ ‘¸,àÞŠµˆö‘sTMž ޡė¬FpÅu&ªƒíJ`hfÏ+­ —Ù¿´0ÏËã–·`ÂTôÕbñ¹Ó5ÛèCÞuÆŒY"ËGcñšØŠgr´ÙMݰô‚çéÍÈñúÀ[ÆÞ=]χ'Cã,EtŠž …~Ъ99•/'ðD­6w³jœ‘ÍBþÝêª3]†fó×HúNÓ\ÚÎ&¡-‰ÌÌ Ü m^ˆ+%À‰ãTšé)ƒ»¢hI”„‘àô8?w–•É©iDÁE“‚åB§ížC*…h÷󸵵𛞢Æô>:€%ž&‰ù¼_Z¦#T¹·yL@!æU錷¸“à Ÿú¦@­MÞ e¤ÅÒ„)°×Ì&ŽÙ˜ysS‚(N«Ð¾Qðµ_Ÿ>Î&ƒŽÖíNVÖd0 4󔇺Ð*¯’Ž"ªöóÔ-O­P¥bõs„MÒ!Ȱ왋DÞ®<õ’É=ø7ÈP!wîç¹{m”û&“G^žä—.•¿¤´uõÍ™²»ÝjøðÙ賦™¥Â,ˆ§ nQÌï]1žá& ðg mâápn_1hóò%j×K_ZŠùv+‰Œü (E5…+ŒÙÅ”ly†•KñÓУÊgÜ®Z%ûšvœ9afŸü´ôoΜ+…hË7ÿ|Øgn‚ÖrHøØ‡4:vXÒå)™Ì5s·ŠÍ—O$÷5UÓJÅZ­é©]ž˜¯ÕPmws->ý(¤Ÿ)˜‚8 f·ïÃV\XÜlßs­'%8šzãƒ-<2¹Ñ§›MãšÔ–Áåâ«¿n†Ûl­ëÞÝbE¸:†ˆ–ç1~qôÏëR\lÀÚ×ii±ïž-¦§ˆ.ä™{‘Ätßá¤çïÆ³ËMk[þäTÿÅAì.+†žÎÍцzãI®¯æ5Þž¨-¾_É=HÖq¢åÖÐÆ/ @ å=zkfÈ0óXuLTð"öÿAÛ•†XÉO|ô f±gÛ"‰O“Õ^ÇþUÁ?Ú\jv£»£ÔæíÈ–×¹ §øI8)©ï[%=›]tŸÐÁÇŽð)ÓH}÷Œ)ýÅI$½Œã¬¸'?b‘'ÚÚXEü M¥'+±9ƒL”ˆ²aªñ›ëu–GX~4º¶Ùl¨›èMŽð„õÔÁýæKæÎàÛ;»YöZ‡G³ªj¸£pѹ2âf8Pl¬7˜/ufÐKÉÌ ˜Ñ`]̬v§U#OŠZY=´‰tâŒIòVŽ'¨HK.hf…zkß.ükí=èûþã”D–®ý ñ¿É¼Ç–‰lnû¦… |n ö+ÑDÕš¢:&]Ûã•°dC¼g h1­3ëvZàœœÿ{»·œë‘+Ù·B@DÀÚè6Ÿ.NSPuÈnCøà QHbý5•8L5èðDêÿÎT®.¦¤Yƒj’NKÉ×,N$¿èCÌ!,i}‘úcÖ ,ý)޹PyC‡)ç^“+Qmù Ûœý{eQm#ö×ýï$?9w¶To7duÌÐÕøTØ=e¸ã mÎeBi³Lº–•v„øm“ä9Ni+ŽÚ±<õs”•`Ñ¡ yV6'`£ã!?›·ð›«<—Û«ÄÑh|_ ¼Ê‹¦_]D×鋈ÅaLUC·þL–ŸÏéÍ],ÓL1L¶Þ±“ÕwƒµÒ ø’® f\sfNäˆ8æN3¦Ë7k1a«DlðÕL§þONxâúÀÝ^VÔ%×L0~¼Ý»&[ÌåúÕ¢ÔÊ—õÊ,éåYÎÿ´÷ÍU[ä8赫r5”ú3GI6ËOÝ[½ípy¶½Ï|õKºòÏ*;™ŸËYVåyÍq«&10‚³íiž€Hð»¾á'øÇò ¢±±ZAX) i(‰‚n4öDZ’„¾bþLô9ȹc–椋æ¿åX}w×”n‘c憡æ©7`5˜Eñd’ô;ÄXŸÕv£%°™*™¾×˜YkŸêÅÆÐO#5'½9ÅaëyµET[¯VÞuF²ÆÅ›õ·P¼‡ €×ujÚnИ/O'¡Úú+·?c”@'ŸZ^i½ótˆUÆãh–³y×þ’"µ C¥‚$«úÇ›ò –† î0o›ÏåbÇ­{}È!uröçëC{/UËJ¶Ç›bÉð·yøðjÞ6Uèì¡ö|¯'†(Sû·ÐÜù*®:µ¦åÞd:§ 4‹x‚'öž;Ø ü©uMOŠ÷åqžbü6 0ù¼ ‘F Šm·/{ˉD]ÏÄ,<€K›¥·˜’Å3¢Ÿi´e¿dhG‚äÖØó7n²ôŰÓfÏ ÿ$¾ Ã]Wœc‰Ç”µdj¢mžgV• ˜àßu8Mç‹èrl-§Q·’kC“ D¤ö䕯úB¡º__®æë`óç”;ߎ­ŒË«™ª³#މO–.#6†Ë»“n†iê¢!=.7Z7EK‹Žõ°@[Ÿ ¹@äRŸeê oO?7¯½oAŽ0f£Ð=ÔØw" 3s?”Uн.Ú‘©âCº2~ÍËV97ÿ0VZœ2ýˆOÝ}&N”’TGƒ®ÌmŸ/ÐW1¹ã %#ýX({dÐ{].Ö2ž¶^ÐìVoA×ô” ñî˜!á›À®£û‡Š`Š÷yäÈÄŸ'F”‡$wÞyØÁ9µÑÐ2+ÆøÎ’5p`(øêóRn€¢°!Ç茷øJ <ø· ¢¦õuö³hÃßC-!z †÷¹|OùÜ¿˜y] þŠ‹¢:æ!ÊwÈZ´°Q…~ŽAìeÔsô‡ÔÁeñÊÓé6M-:Už©ç¨Ýš…ù¥{ð)B— \óaÑØô]a…Uà-Có%zˆ±ÌÔ¬¼óŒÄ¡s©­†OܳJ ÔPð!d¬„¦ÈT¡;Ÿóçl6JÝX†iÀY~”éÈð¸âñå àðõ (üˆ:U ]¤aøå;K¤’§ÈT}e—ˆÓFîâø=ð¦¢J¯ªL&[ŽXJL¥°°^žA]n(AäMɇ=fûº)g[€Î…ÀÕTæŽ}†scäáoòÒƒtÏ­V(oUïðV^ˆÜfKþœÛúVÃñ¿<œYdÂcÌB@ƒÂº›kBÕw'Ó‹žâSó”yž°¶›3¶M3^Gø@¬Ž ñ.åRxh§ÂïÞ\E?g’ƒ6ŠŽ}e4<øÞî–ÊöŸºêW¹Ž¯ Ö|XÎ]¦™¤>†Ä`ÒOj0ÔZ&ÿ³ ©¨/¢?ÎL¶>;©”Ïi‰3[¯l½ã¾½Y²ëjVE¢å~ˆ‹¢_Ž’D½SÊj_’À­ÇÖ´éÝÏ—~ƒI!m~Óψ)ZÑqxf $½RKŒ2M9HÈmuês`Qºµ•Sw,¡É²<Ô4LßûΪx©d,é/™ØGfë’YæI17C)‚a „Ñ&lÁk ‰™/ÞŠòøpLBÖŽ?©Å) é‘j7ÿî3p˜oCÉ»)Ûõ« –÷a²¹g™ä˜¾†mÔÝ.ó¢”þÇÚUÎYÜ®]§„­ÿUýÞ~#ÑýÄsSF~t2À2E‰½ÊžT!(F wêTZ ì-,ÅTÐ w¢œÂ~‹v¾KtvJ·=‚Ÿ9ðSà2u;y=lWåèäy*L}CO„ú)Óš" h‘6kö@pÓ@!+_ÿ¡œ?¸ÎÂihÌ+3J$Èÿ$À9³a˜›LÈêJ:zt›ñšã0=7?UlMöºm®P­î(§ÅúJ¹9"øu‰ÄéT¼'Cjç£Øø€ PøL ãG:×ÈaBãD} £ð·ú‰Ž*5 ¨:t.ªmâ3ÊvÙŽ]ê*Ešm±êØÒ “˜F‹Pý£]%ë|®üÎ):û‹âÚ?ëÅöú޳”ħiþC Owöá-«!¡‘#àÒf5CYžkÛ3”Õ‹Ð`ˆyOv¡>œêWÏüÎÄB™×Q*{|RC “Z'Ió隥í+«ö±ÏÙƒ6b2Öçèiïñ+}ƒû*? hFÐ^¿ùÀ‰F·CÿÛRcÝ’d3Ü¬Ãøš©«ŒÐuÑ\ŽáÇÉ7í‚7…qPý÷%ˇņïÿë±aK8Ò“–Xm¤Å ·m È~ Ô Zß_5ÃáÚv¸äèå×l†\ 6È5Æ”Ž–B`ÿxb3{´¢u3 éÆEÅ_Hr—„/¢ž‹nRjнÈG! žL®«CQi3¿ â@û¹rƒÝX¼Qâ_ÞÞ`Fõ7ÕRìñzÒ‹ô„ `ü:îÅîû,üö'£{b–3GÅUa© "Pk:zº½Üà¢v%vÿŠ(*X"®iXÓK%C;‚¨l±²ÇÆ·(Ö:Ü‚ç,«‡‡qÁÓˆGWºök€0¦Ã;‘ÁW™sž´OÁC*dzڔÿÑ!àòÖ”ÍÛÑ€g);èʼÎ6ÿÏšw=ci¨ ”4•#"9¤Ц+ðêÔ4†°1P‘ó"þ,o ^òɱ.×w¾›ƒ:‘ªHlQIÆþ±dGšn<ù[Ž ÝÌ7ô¦Íªky”ÿ‹Ü’0êá‡?¸<µY&¢5ÿ[.eÌ£¬Ä*ÍÒÚ~]žÞC“®âÊ~p¢&Nrs±ŸÁ5eoîõ„{²¹mŠÄNÉí\<làŒÁä™lâ¼£w?ržÉûwÆS®¶dýŸmÀú!! ÈK;–§ôÏY,B<eÁ ¡oÊkK3;_¸Õ+ioχ¢1OrTÍWuÄLÃé9a@ýX¶%÷HèêÜ31ùœÜ+Vÿ‘ õ@ÊPûÉD W;°wP0Ñò¬ÕÁ®&Ô53 á Ë%O¯¼ t¨-–Õ275EéL4C£Î~£ü;àsþ.ëà,5‚©úîb7@Æfñ ¡•µ ¼á$‹òÞYÌ)kØÖšãRŠþ»ö¬pGjöiн¨¨|Z(n}±¤ãÄ‚.Tb|Qƒz«e—ìÌo(G|fsåÏ6=¢€Sû·å¸ƒä÷XJÎG0Š8¦ª%:®åiè‡w¸Ló:ºçÄ‘’³R“ÀäÁÈ]}ã~øA˜ö›¤Äi¯HåÝ^Sï®GÀ>˜U¡ÂT;î^GQü° #kqü ÷Ë!!b'‘hB3˜äƒui%§[¯£Ù2Ðö·»˜Q½Ó=waaöëÃbò?Œ7M„îé^ý W®,BÝsýxé¾i}+ »¨7Ð#¸»”ö¿‹‰îÈ‘K‚">÷MéIÕãàRY§ÿ#îtuÎ&–Ç'¶fX—¤AÑàÛ“½j-‡ìÝLâúå+ÿ{bû+†;ÕÛ:›9:¬~Ö•™±Ö6ÔG袺ñvœÁØ~Ó¼TÓB/;É®šVš‘¼I™‚²ÎÒÖ„çÌycäÈtûo#n _!LED±%ºUC0MO÷³ú/¼0Äè0üÙ«VäóǸarÆÿ.{ž¡Œc¹‚ºŒoã‘ W3õ˜(Ù8&]ˆØ«stä…é‚q,å܈c5 }ôgÒ»(ÕúÏò¨§`ñ|ûbLH»÷q;ÄŠY ðDnå(û‚|œgõFñâþ!áÙ€ƒ‰z®÷ºë®Î©õÇXð† K;mÄD?˜-ÔWc4—ÚËÕ²£@¯%`—ÍDû6݌ߣ¬††DK€ßv†F›ö·½¬vª^§6à³Â¾v&éÁxúï¢SÒ]•/œ-#l#N\WNñ› *Š´¥@ŒY­g|HÖÈ´× ÔeñO¦¯%»,Â… Ÿ^»ÏÎÿ´£>K81?€p N-WâÁ“ò í{l¸e#””2V’kå ‡Èà(1 ¡gx«j ÷{s (˜\C1aÑä½eŽžm…~±ƒ=Ò—;>}DO"ì‰2€€T[·¯ÝJâœO Þ‘ " ˜>yé á.=h–0ˆÒ¹ÊÖÜ*"Ø5Ø€Arº_¤Ó­øü€á¸€D=¬‹¬ÕeϪ-ÁÊNA€De;q4ð~Ò“ÇÊ!6ÇQòcüyfýŽeÉOà{;OM‰Æw-=rýØ‹ž+©µÊÛJ嵄ÃK¾²ÐE3åå³}×ÀèRÏä•0óР9K6’k“”º[y7E2NQN/ièy”7û”£tÙ‹‰­“añ€ <).·^3“§¹Xûñü2zŠXâ¨Í0 iƒÎ¥ÎñhÊïuÒ䥠kWlÃâÀøNÃb~§ñíà*µ¤ÕùL˜p®šæRIm¦‹Gøós-ßè ã|ÿÛ˜>@j™tùÖf]õ±&TÌìáÛ¥NЊ½ûì-‚#àu`s iº(œïÅ6‰zBh°Œ¶âT ©«Bñ¿îØ€ÐÞõ‰Æ€÷‡ ¥…š»P^ÔYY|Ò»Nü¦…a›«ó*D¾lœêYß)N9ŒkX7˜Ÿ¬µ´4!‡«f Š ÿÇV¿¢¿@`8$…µã#»–ý"Å¥¢GŒFñÕ«ø­v³ê´œjcJ(ëbã ¾)#b+½ÃÞÝ;¾B-]„í¢Ö冷ϖDÆ…#LšàŽ.åÇç¾z†£ÄÍkÒß®ŽR­CR_Y†´©¥ÉßȆ޵Óá¿ó*š•4Ç¿þ­é’›VXÿ¾ëöoz=gZõZ«n¾‰$#Bûº'„Ç€¼Û²úÛè\Ù/ô'éfïüŠÑfÛï?7#˜Ì£BNùîªB¢šõ5½PB‰"•záƒM´° å÷¸C‹éÆ\¹û ‰?yó›ûçÆw öLiˆl¹Í§Œ[C€LŸÌçÀÈ®¶Àדè7=~¸øéXÿ´$âGá|³©fwýì”\èã÷“Y3cñÉÊVõÇ GPö…°ÜA'×R³= =1î’£}«ÛDLé8½Þx?bð2ÓÁŽ„Þú^$G (ÍZÒ¤rHºª*mÛ#ßêŒ)4Õ÷F÷,+÷ÒÅÑÉÐó¨_*ßøÖVD¸¨?ANCÒù¬³­u¡V¦‡BŒE‹S¢$ n¡$ý¥X½¥AÔ«´;1§¢½’J@•ÊÏia΂æ|ð–£:ŸúÙb_òÝÐR”öýõ›Ïï„…¯é'Và 1ï*Á°é˜sŽ9˜…[Ê¥ ’eZ( á[vr7?™LTÔìÑùF¨×¶v!‡­7ÔŒc^432˜‚Èœu³Ù?5yD³ ï-fþþë`Ò¤˜rT¦ƒÁ?ÍYìð1¤\n^¸ïQ¢FXŸgµüï )pÕ„ERö úBοÌÀ»°( "¢å8üŒCGÓšú¹à:픑£™4-Z­âr‘s9x¿G ¹|E?õLªs÷›B3,HH.ô“Êaпµ>üœÕrÖoXïlÄÊ>b΢‹nÚ¤¼~•8Xõèå°²+tM…”%|‡MP³Ä†< {»‘e&§Ëš‚çQ(P8O+Güƒ¤(»+Iåγ„lKÜÛàwKy ¶".ú|·. ø³&ø¶É_zjÏ„2©‰©Ð´“uЬ”„;‚É ”fˆwœ1 °¥Ê¢ŠnéY7ÅÄ‚I;Ó¿#Ô‡q>ÄRjhÐ<ˆ¡-&÷ÑVøQÁ£Ö$.©vc=¸|§æÿXé¹íõæ˜4tåâ‡éò>iG܇©÷ ë¡ßª¡Ö˜ùb¦2ÑO5>Íæ>ÂZNE圷bMl<ì±ýn7éQ41à¡Ö¶3Ï*б'ŠÍ‡Åu¨¥-ÔõŠ»¡l_ëáœQ|d[¿å¶ÁÃÔ!W}7vÀ·Z6¹|$Æ$d•j†QØSV´j8´Kx ÅO2¾Uâ„Ç,|UÒ f%0C×n± 8¬ “Ñ9^.eߦeê×U Ôm“Ð<_ ½ï òt-s°5×Û{Xâ˜XlÛoSMYÑ)ƒ–y%?eÓdV‘wJÈèþ®f€ž4Æ)fo Ì™qWÅÈ…ãa“ÍÚBñ}ìâœBÃÑžÐcÄHÍND ŠPÝI3޽VÝi?È>ª˜­U¦““‰çò¬¨Ú6%'ðµ7åÎîfòž}×þ#¯|à±&¿4ÁLþbøì œÍJÈhxÉÔ¡ÆÍ]‘³®µ3c˜Î‰>aèÔÙ£C“ X'!í×ù?ŒÀqš‡¡ÇcO´$‘›¦È5Œž‘kII®h„¥]FjßÊæœ<Ž\™›axr=®Üæ(_£9&9–XMOžHÓóüÏoß×÷ó¼ÿ<$:LŸZJø}ðHˆhn›{Wn>¨ƒŠw#:ëí:[3s"‚š[Ž¢¶ÚÒi$0ù¤Äæ¯÷:.¹' B&ü…PM⠛徨'–¯¯ã#w ûpªh²%¸mq›œÒbßoÑ_ÇÉKD “üíÊÆ½8-ñ{}[Šä·ÚbæXKÎDYb±å'HX¤¸iÌVºÂwWй8î"í·ˆ<‘‡Æ ϶Q¯îSýÿ¦ÌýZº¶ie#°$6l'@ý3<Õã“ÛΠÕQ^ŸQC‹]Üð¶•=¦]µç{7ЖûbëzÛ¦R× Îçÿ‚´@»‚.ý³GJòp̺J ]çÆpõ³°&À[w¤ÉJYº¹òòä°è‰àÑBy•uˇS†–’•òˆ½«Íg€JBÅ$0¯fâÖYîG¥Í° ªº^)u‚lM‘ŽeÚÈÌCÉG$ÂAü³ÝþR*J…­ËüJÒ8|ÿû‡âj3=ùèØ˜ÃhhäLƒ*ÅWN :97H•ŽG)Y[xþ³Qºªºòg­K—]Vñ»“ôaE[BN¹žA¯w¸ØLžë1s-Iÿúº‚’s?íúZg_]#ô2á+ø85ôÙNöäìÌòñd8p×â¼-WŽÀÓ ¯œtX—Z)ì3^#Eÿ¹ð^]Õ{)ˆì§­}½[ñ!áI»õPUQ˜! ñzß+»Ì=ض;YÐ^C ©}þ'šõ2Þ–wÒgw^E`ßvIªµ=¬¥‚L{^Оì;K2KõqM´´Ñ¾A£E>K;q0˜d¶YA’B!¿½âêGú&Å¿´åÂÕ'*¿|2墎ÍPcÆ. ô6›ŸP(ò0ZÍ“R^K¡°WêË;O¯5äÀ<‰~õÈ7Þkâ¹~|±KW_É+:®UgFû»ë+š]Î=äa×÷Ùó.1%åÂ)ÉÜÇŒÒ#?Ó>ãŸÂ†/ÈÞ©žÑm˜ÏÐîÑÅ ½ZqRü‰»Ô€1)|§9°éIRx~~°Ä íXÿߟÊSl ÁVùž€’…M%[[GH—¨¶JU%LŸoDZAÁbû/R¥å$æÓúK*˜ t#&Ç‘X)ÌÍx·±žOmmÆnµ‡|—ŸNÜaãnx#à÷qs)‘Ývd(æCTKéM~­¶8û™–å2Žïˆ|cÐð™ãÁOÚs#©éJˆ¸(3â£\þ-´º;:-ÕhÝùYño6Õ¡Y–‘-£ÅQVtÖÓ}怨ð%u“ÇÕ¢;L×7g¬bnΦί‹g ÅiŽ<½¶G«Ž;/³?ô•Ïèþ"Ó9-ñHg„ã &´¿M]›K§Ö€šàçHøäìJ×BjäîCèys"™Ÿ” Êç©Zø*d=9{•Þù.@jˆ†Än³Øñ)ÉSû Æ`®•Év<‡2”¼q" ¶ÊÄ7ãun¯±S«ûï Ù_k*·yg“Î]¶ßz³'³îÝKpëÿ8dj¾·ªd念Ëh]"äÓ´*Дjïàõé/.Ñ˾Kß»Òÿ`}ËHÐìp³Ùs„oõAüÜøF„!ïIÔ_Î+„;m§ïš1ôP46_¿ S%ªÑªeW£fÊ"H¢.t@m3ꨦuþŒ´vSˆmÜ•Æþw±ÍzX–/³?~u¿îëXxQÿþÓ©vUSÏßìŸß¡Ò~`HòÊ‚·ØwÚÂ%‘ÚZÒ—äž~¿!ʬUö7ЋRŠõM ŸãKÆbÎÜ÷ùÌ= G sœ#²vEQìÙ䟨Fê9“ È@µÛ̪&IKªV¹_gU§=r{é¤YóÃ,˱Û,Ø.úKç‚´«ºº¿CZ|³ã°eØ'ñÄúôš¤èSGÁkt=É!h*F¸ôjÔxi1±iIÙ¬ã\èžP½$S,å;V÷ *Sô*NöQ¶[}7÷X"ëÁöõˆ'­’ ™0ú—IýøŸ‚"nbñ‘è@l¸Ô߀Y]Àendstream endobj 16 0 obj<>endobj 17 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 278 333 474 556 556 889 722 238 333 333 389 584 278 584 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 333 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 600 556 600 278 556 500 1000 556 556 333 1000 667 333 1000 600 600 600 600 278 278 500 500 350 556 1000 333 1000 556 333 944 600 600 667 600 333 556 556 556 556 280 556 333 737 370 556 584 333 737 333 606 584 351 351 333 611 556 278 333 351 365 556 869 869 869 611 722 722 722 722 722 722 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 556 556 556 556 556 889 556 556 556 556 556 278 278 278 278 611 611 611 611 611 611 611 584 611 611 611 611 611 556 611 556]endobj 18 0 obj<>stream xÚ¬¸uXÔ]Û6JKФ„ÀHw§„ Ò!H0Ä C‰€ ‚ÒÒ%t·4ˆHƒ”´tíÁç~nßïØÇ·ýþ!‡ë¼ÖïZçë\k ÃCu-)Kˆ9P†qðpr?hy8˜CìÜÜð·6ƒ4hAÀ2f0à#€¶ à© ÀËàÁfHC=  k@GS ±‚¹™Aì8|¢ÀÜãÆŸÿ7K Àl€+= ýTÝ@QMÀ,¯¦‚P3{€º‹¹=È ²‚,+`ÿŸÀ¶Ývæ„û’r˜œ øg@w  ã‰à„:€œáÿ€œÖP30 h €A °…½‹å 8nO ܉#Ÿá·Á©CœaÎP# _U]Fî?QyndÑhq+¬müç0ù+¯7 éàbÁ¯¸èMã@!ŽèM¾oÍçý}+¸¹~X‚¬¬ 7¿°‚¹ÑNK+1w7ú ¿.ýMCð÷ùr…‹Øqúî8¹¸ÿýÚú^§HÅt^ðk;ù5Û¬©aä£ÚŒ•ÇÓ‡J´ /uPNÛV ØD±£bIg[#c©!ùŸsycpFg¨ój¤Ùø‚e*æanqHâÜ,)`jVÃ+<ƒç=ÞÄX!_|¿Nžh^'AIi"¢ÚF2”ÒGOw%Z‰q½_ìCÿÂé ®—nÉäó€-Ž4Àu¢½ðÚ8@ãÝPÐ+2ÜÞdM6R¬Jd¨ªª%iRtý¦­ê<ö…ûƒ“ nÂr/Úô€ ééÖôë.:×Ù•˜ìhÚ'úk'{DûûÄ#Òñ×è:¶ÁH}]×Cd¡­Á&‹œ§çÚIH‹âr1ä èGÏ^×a Ås­ÒñiTT§[ + K»¹†þ¢[âPØrã 2W¹:vK7´Ê/³+(;h÷x5¿ã¤Ô뎒¬I`Þn‰¨w&ãUráLØ9ñ“ºšÙV ¼’{^Æù/#YôÍ™#ڰȆ0{ X5R¹gÚ͘]µöÇ1mt8¦Æq• ­õa:övÌ´ˆŒhÀÀ㉽ˆùÑþå þÒ÷‹ GSG€^üÀY(ãÄ#`"×qzÎYÎ1ä䮿-‡¥—ðÓu‰vó˜‡Û¤Y.Mj»’Ib-ênó40v¹-é^hŒ ïr¨»9½…ˆÕ«Þ6 I{M¥$Q×ðñìFéã°—Ffw›6‡Ñ#®6¬¿æÕ–L5‰ >Ò 5C\>—f9zÌ©ó‹M¬^y~:ÿ²Ä¤ØC,Ðx¬ƒ§nä;{ÝHýˆÆmuàÏÆ÷Üç ¸œæ¾ýø2¤6‡R™Å+´&­õ¸ó'Ï ã/v„UbQù+üµìË ¦üåý• vUr¬·ªï±{Ø·iaj2=«˜Ã Så,F¾;¢f~˜û¼›ÿ¹Ž½õ.¾9ïŒÕÙÃhз^!™\òÁÂ6ô‹V©ŸA²*î¾ ØØX¡VõÄ,ì.Œz?}œ:F‹Ì›£Ó|GÐ é‚iþóŒs·ËeÈCª&{²òÜ3Wñ£öé\~Š}«*~y’{(èñôÅÕ~ª†Ø$î›ÇL.k½­šðó™ê~ð´bÀV'¦Uº>á?rs¦ÈüøˆÌ[“à›ÈþúKÁ%Hq{ŠÅ]0M-Fï”àý·yó(‚ÉýÀ Ó¬¾/F—‹Vº3¡‚Vb¹œÔ±ýúXÞ¼1Ä<ÖV ÿ`lôÚ¾¤öÉÏý¢3^Ž}ò½mfÿ–ÑýÓ!ÚôtÐÔÉ~°ËñÊäçr9›**ˆÛÔm\"Íš„˶«@·8cOÃÍ™³È“I(! Z&5¡OÖ<2Ññxè­Qþ}òiÈË•¶×ûaŸ~‘ïÒÌÅÕ ÃîXF^‘;ò ¿_Ÿ´tЄîrhÙ&‰_iØÎýK§Ì*ˆÚÔ–èÛPêw¦ÁO=Há2\ŽeaÐùHð ¯á/‡r&‹l@ߥ‰wiQp¿ÇQ÷ÊÚ¾¬~cðк¤Œª®ög2&„ê,í St Œ­“—Ž*éÞeàÄO_û#V™ggƨ]oèCÆ~µçúE?\áí4UAOÐÕ¼Hæ"ý¨5.öÁ…ã²WånÒ[åáÖa’Vc™‡›Ë„ŸœX°K‡VJËÚÙõ³6E6̺î):|ÍÚuuI{®s¨G«¤§ø%ƒ2jÑíB_!ª 4Õ¼—ù]³Fû!CÝ]Jå9¾FéâÓÇHÛF¦LJ×ÍÚþ¥ÈTár&ºu)hW5a+O[ï)ßùnÜ= •’fàm¢:×\Wº0O›ÃPdûéÞãØò(®Ü3º×ÛÐ~^,ŒC»7 Í+U_z$¬jT'YÔ•'iàø0…qñr“Á­W/µo$Ó:eSº;FþŒ@§H`³G¸nRöõZ笻hø„Õ!I[„ÕJ`Š×çØG©Q¼QÛ¿âFÜ¡¶Ig.bƒ’êcÒvð4f¡‘1?Û;"ÄQ•˜ øéÚ‘šåÒbH²¾KÜԙΣø`j²ïÑå@sUaêéb‹FG\ÂÞÚ‚ÄFT%ÌþKèÒ}óˆE—ñÊ/äÓ­âÝ€jÖÀ¼Á痺Ω¢Š,Ö©{#|îYÒ2¸§šâ¢û“¾ŸÜoÇsÁJrû?¦Xž=/5¿®ãjȪ>Á‡U5róÖåø$¨“¹ëú(d«•¦‘úïÆT,ßÉ W`(˜v:+ª`-x)µ w=BÑõDORñ{†ÞúÁع¤c×-’íôhc^·xñ­² • äIlF}Ýð=žÇߥ¬~ld5pcqG? ªnRƒ"sõ$÷ w¸sÕDÒœn„\Èž«£zõeËÙ—m…a¥ºÜ°(ÉÚi-–~øêz"_[[½+U<Ž;7•›¸Ã{k„ ˆ Ÿ¿µ’׈O‹žQœhå?òÊ¢$m8\f÷skíwné9²‰¥¶*Ò¡˜þñÊiH·/jaö~²¦L¿•d].Õ;Û‡€ìvp@­ ©ˆJ45wqjÓJ(ê:W§ç•o 3J$£ úˆ'†¬þÒ&t—R²We—¥j¯ÅŸ'öœJC!áò{ÀüsŒÿÞ:¸<Ì=\?¹Æ×°³´Ý^(2œt£ÚÚ‹“ÚPZñÆö0ª£/ÒËœœæÁ[Ñj?Býö2ü8³1Öï»OÉ©1Dmƒ~Íw=ˆÐë\:°ë$Éâ–X`µã©Û„¶÷FÍ¦Ž°^®íGšrù3šÕiÉ÷X‡Ù¥÷Cݲ<¸@­ü!‡¨Ò9Vá-=‚‰‚'q”kÝÆt#Ë^[NáØ¬s¾¶}çߨäŠYø ºx§Z^€a^W•O¤Þreº{NÇÈêÒ=Me?[Õ£‰{rÑUÝqÄ=&†–¥Ý:=\& ÈC‰úõóä«¢H|EëCâ¢×ò,z}\“V”Ã~$%RVXV©AáÐ…š£˜vE‚¸ðÚ°Þ®6LÝÁTˆÔž©ÄXü/WȨ†w° žÐ½§Ú:C8n |êRE/`m‡ˆfÅ—^Ó¢aÝ)šÀN\°øâ„ÏÒ<öµÎ+´l0a^K­2g¡™ywü½·ÀYÍ ‹Ük´Îùܦ ’S9ùŽ ÉŸí¬vÓï´úlEìÚ 1_®Â0«Ý­~–ûî¦ÏïC¡a‘w aݬ“´ =*e²T!¨)O¤1¼„¾¥Ë}ËwÚüàS}øžmRl¹“ä ayü‘îWð]ó¦]n«¾n‘OþÜr½Ë•±'ö•ãÛ¡Z¾m‰ÀÈÕŠœâ¸îÒhôÁÞëLÜ®îûÝÝ%$ã%î.þ j Ÿ÷–øŸ‡l÷øÛ÷O°í†Ù‹g~%íâ:%$Špð睊s"Ç>娕—º ­ÄÖÚ»çqOó®Ë<òL~¼d°ÏPÙˆBµDd.Î×A¹ÿ3gÏÊ$QlWzÑR»¡O™2‘»QÈ\«ñx,tŸÌK7w޶}•íËA½#"‰¢"E>xSm\]¾©?{Ê/ßòäò á º¡Uäkǧ¥øDË9n*÷Õssm® 7 pçŽlÖÃ@×/¿£ŒTÞñÁõ‹ÅG„¾ýѪ)\‰çQbWÕÖ“§1âgÝ«<ûä‹=„þˆ wÈr¶Ñ²5JK«'RQÅl2Âá­8±Ød¿¼Š—Í¢˜M^iêv›lëª/ ƒTb®tŸÛ>à»ï¸ø6çƒ yœo¼þeÁÃ_€àúøXâaž¹µže]åκj:PäÌÛB]¾cÇ󟹭¢[3zóáÑÀ'¸%” š¥ž¶Çø¨š×õ]¢¡žoú&ù©a/{]ÌÕ¯Ôcójd}ð åÀRÉ%$ç‰HXg¸Ù"ΙYy±ñÁ¼RÁ±!&5ó»Ý.ÃÆ2Làçù=eb­Á«‹Bƒ+|ׯàa“ÚhEWÒí•Qoe6 ìGB w‚Ð/–Vãdl:«•©¿þÂub4ÃÙÐ|õš?™­ {ªÅøûˆ~8VµVBóœ÷ÚÊå#÷èm Ÿ®ª÷³ý¯ÑØï=¾gúm› E²ŠyÏÁ„*Dªø®ÇKFeŸyRåµw]á¢öÆxöð}õ£æJò0¯YuqreYTîyÕ¨á]°mý% ŽF·¦»wWÉБ4Ž Äœ>Љ]x—Á‡¼`²¢®Q¢Ç`UúZõ˜DÖ8ËÐd%{é¢Ë; Õƒ¼,ãÓì7Çg—Zô<‰“ZX?OK¼,¶²[¤•1êû¤·©žv­ÈÖ(á9£±ŸÝ’WÓa¹ïù\éú÷¿$¶u¿gÔÀp&Uz—˜ë„òœ¯§’á§…AKG}máÇù³TB¤aÙ¹ {ý»Ôd~q9oæE ©§"‘8j| Úy¼’t½¯óÒIx¬“Û?ö€ªƒ2hÀçë1'iMÒ£¦ËLð®F¥¥ØS-‰MšÐ–ˆc$h,ÒèÙ³Æ_IZ¹AgÓx†8´SÁ­wfØÓ40NiR»èúì“›~8Eå¶wžC{4wܽ~BÛGÓ`¼Å?¤ƒ/sÖälkl!\0€»•Ê„…PñžŠ¶%ýÎ0uw!3ùLÁ^‘òƒ©’uöæe0¹°öUYø¸ôF!ÝNO§JãúÔÃÖdD¾!ÒÇá%:§Ë±ÁËçb®Ûi³,ŽüT¹žŒ½viòã1Ex¸>¿¹ÝM{´NÝLóP)o¸æ1Ž3û¶ 9íj[ ‘¡A°´f¯‘\ w±M´¾sxE»; øì…þè§ÎÄ"ŒtñŽ(²+m]§§šÃwÈ‘ íNÖ`½þè $é²9õ;»îÎÖ•áV‘´(~¤GLŒ>¯÷=€»§3fçw¥úƒE‘LÏ“"`<¢ë­NgDñ’E–û#¹Æª÷ÊV†”­÷qG+÷ê¼Ëá ÖÝL£Ò݈.˜3”æs)Ó£\e_†}´Ñ^*ßTHrX:\ºÔXê·ûòʉÐÜl¤–AûþõÁgÌvßڲݑ’Ë+é5›£bD*}òúC’BçLœ Þ»¿j«˜ÈøÚùÌ–(?¸gìJªÙQž{¿£×»–0—÷µßg¥ýÌêüMvX¨Õm*Öõ3ÏËT°Áä;ÊÇ+âÅçÑ—èK\3ž8´Ù‚šÊÊ­â0˺36é€!Œ¬¸æc9ÿ³Ò‘|I¹èƒCÔ°½-°R5&†0'žH©só³(”6°f 09ácõi¹:¸ˆO¢‰Ó.ùÝž n ëU©‡ž9)ãf7ÊøyäuÛCMHîÓ¶z.[ˆü;:Åpl‘š¤ýìD·ÙX§ÞÑœ\•ܶã)¯Žu£§¬n;wÈÉûß4ú,’eå58aLJ×|¦· ÂüТ ö¬>Ê6Œ’º{lÇÔµèP*¾ZcªîÐ*èf>‹Œ˜%¢ëDïÙÚJ”¼÷6Q¹Z Ͳ(^/GK[’ÛýÝWÒòåªo½®þ§¬Ê0F7Ðì*ÁòVêɹOtC …¸$¯ ‘!'ª³z¦ôà3•¢ ›ÂL›Ó÷3ãk¼{[$÷’% tíMI†XÀ/‘Å ýJ)¶¨)q y 'k“õ-r|AFwz,À悈A\¾$gÆ^ÉÒ¥Šgi~?KRÙ{8vJJï[ß;a™]ÿõynP÷u`˜RaˆÀý\5¼¯½ìxM`ìZܯ¶(EfAÙ4x\í_qwS]ré‘kÑãœZ߇w†þ Æ}vå©¡½–yõ~—$á,.dìÛSy)^²ìvmÙâ(Þ×d›Ö ™© F±å½Æny<Ê@¹Y«Q Ks¤Ê̵®¤¶Êõäû{z&Ã,,ãÝ(CéAúi¯0 r0ƒáVDýã÷c‰$É ZÿJÎÙ ^nË žw’³‹šÛe_lµäSK|Lõøíl_ ¸ÿÐ$Û=Ó<½tÔœ./?‘ ~Y@.bbé–f9zZ‘y%"_õ¹*¬5¸s'„‹ÿdû­©¡ý“9ÿ êïCHÓŒ¿ÒWë8>ä1~ve{HX/†RØû^Jú¢—üî´ØËN–åMÈý4bå×Åocé ôSß6ÿxÅV.a¦ßD"Ï{d LjÁÕÿRw´7CçžÑÏ0Ôµ°3«84ú5‰iö§—)ÏÊvE[û/·Ü&,À“ü¨÷t0®»DÄ>6ÿz,¿3æÀ’Кm^Ö»M\D´EtÈ_eÕ ì7^=;ŽDçË#d¼ÐT)IŽOУÕÖmoE”ª÷S=ÿëUvº6¾só[@›æ/;¯nãf3Ü¡p®Ç/´L&°B¼åÙ–³h#eIcc¨‡.“. ,"Ò5èt8ºѹ»sÀ‡©DS†Ï–©xœNÚò#аQÚ`©€79qã‚èü¸jI6dùŸpÓמ¾¡ë¦Üëzl6Ói–°bîŽ=ÛÀùF@+Ô€äjCz€Ü<žôæ°^Ý+³ìl$××þóÛœyqù5¹æäÔk‡L¨Ûi¹júªßÁòÛò1~Á ×·z&®ÃKO||܉§”Ž[®C/ýZW×—Žæk*/ý¼*V+¼‰îÇv.&ñõ”À–Ç}4ŒëYÞÐe /ÀHÐP»ßâ2>+ñ 蜴l!Ëd· D2°?ÚWO÷mìvFyý!È߸65ñ´fUTȱ‚Ú}ù#ʵ€ñc¿GLíã;„2:¾²Sízs º$ ±~>‘¤óm1È©Iµ%)œmÞ̇&T¾u8Æ$}Ê5×eâ=Å?`ÉŠû“5Ob¡PŠ›  h1ZÂ߯ýîò7¼»%¾ hTMnÉ:-[­!}Ãb±4L'ÜOqÍðÒÝ~;å{õÓ0în¶Ð¥ÇØ ‡^¡¯‡Ó Ï«fÄ+ÐFKFì.c]©Ð‹,þÒKÓîòïø(.ü®ª$ Ë0ñ=ºòIÚf i»ï®‹XX r\½Ì³W¬è÷‹±d¶;¹=âO„)9Þ©z—Öiã£gíµ¹WéìïÍzkàÒ\Y°€§1¤?=˜Òy)<­±g¡ÀÛXM£Eg2ý¨ø¾û}W¡$J‰›™Ìà±;cìĬÀüœtÊ%C]×ýè9ŽS‡ÍÑs#t!f)ó‘Ü_]ÈchIAcGxª×tØX«ô<-»…ïbÐanÏéÛ: J$1µP†^Œ!›#ÉˆŠ–ûî€C^ûž¼Ø-0£ÐÉ¢ŒÙrˆ»w_£y g°~;'æÚ.èÝÛªnÑàUyÇf¯5w¶b!OÔCä^µìÓ^˜X‰6Kqëû~'“¤©RÂßýÔÐ%V!k•~ñŸ…K§Fœ—²Ì ¦ûÑÓ¿ømV¿cT=rýú£`ð¡‹¶NUŸÍîèãbáT4ÿmkÏ™û{‘¦s¡S¼Â+X6Oæç9'jtý2+Ué{Âé¡sœRŠ:"µp/‘’wÎü¶Õ V;ؤ¨)`r·ûx2*×r_jCòû\Í9}ü”m+Ÿ‰}ÕㄇMþ¥¶>)Ëô[¥o‡R/.FYÍzÞ4}¾¯Öþ _IXµÓ²•³Ò©?.%Mìä¢ÌÛn}~n)°sÏj3sÕZf6ø­>± ÿPè›Ûœd#áëP’m?ôlºÇ˜În˜O¡#¹:m§¶€Üfë(H—»„â"Ñ¢_eâ‹ÿR®ÃÈ'ðEæ[“ÅL@v¾"/C·ñ}%¿pw¯ïyÏx‹X×Ñ™YÔ¦†§°­É_&ã "‡Íʱyn”öŒ‹—–¯D2@0¶"aß§ /ù­2Â"#ðvÚ¯\„-<üò®Ø!¦ôIˆ–Œ"ëT6ˆ7ZÀÅgØËÿ¸~†šÐ^Ä¡Y Üçd¢9ýÊ_'@IÛºo1ÒâÛa7P&ûJK>çÝÐ$5J:¥ŸðyëYsuäŸ6o?}ˆMʯá:˜Õ\ö2ï+P ÑÐ%|îJ}¾­ áÕÈínœ-w©@ú¨˜zÜïU:5y„!ß&e¿0ŽÎ"ÑœÜLFìQêTØ?úü¢¹¿ô% …ÂqIúD¶K1[~Ïy{zÈZÖœè¥qêáÏOZ ³_ÎHY„ûÑA¬r÷¿ìwÚò?Ѫ4M!|P¹Î™(Ç`tï)~®^ݹ¯Âä)R­…’„ué±YÓá/RŽ2桬q}ØvÞ.É”f_ÔIÔ£«×O[6¨k›Ñ"e—óõ–›cÌÂÔË[II$åH‡È•òy±ÃÜM˜·W`{¾î-Ö?2+?™=nÔ¯ôÏÔ¢¥×¯ZQêÎÇ< (u¥&±f4¹–ì“pÁ²8¹Ÿ¢hDkîO¨e=\øœ,Ê(;ï ŸÐ„[@üP-~ᨃ Gx©—RéG„ŸÇSœžç‰ëuÞxdbWÁó ¢½qîøUÒ/G[ëëí:"üŸsË}yNø3& år–GÎ4Ï´Ä[ÉçÎ)~>F—çú>$†ø¬{æZ±ÇÝÒÕ~Úky“(9N ¹úoNyÏïÌ~G@ú[ ±V|ýýrrÒô|Ö3À½p/bG'$|–Pô´; Ð7$H2¶D³ÿ–Mà˜‚æ“­¹¦ó1ÉÊ×DÕ+éE4ócïäH#–†.kµõÆüð—k(TÌŠFÚ®áH¬‚¶lŸDp–ƒ–ÝIˆj°=žË§Ó~¨S+k¤µÎûÏíõÍ€7áN5~} ¥Júì<šÑ†Úy-'Ò®å_,yiGí-”¶V˜Ú°Ð¶'ðä+ðBMtÞ•·ÜÇVˆiëïî>d‘áP¤$dB#ʲé©—Ú˜Æìz%”Þmž2AjxÆâO"ùè§Š4—7ÄEX£O x‘¥0ôî’ËW’B\$3¬†“ùŠøÙÖ¼Á|Rf[9óE]·0B£ŠiôÍ|«oßž“R}|GúÕ(Zœr'ç«y~õ‚]1jœ¥éÂá³$S<êX“·ûCïy`´2‹NLÈl¸ô0oû2Fz•ŽTÝwéû~±*½C±î®¢”Ä¡V:^Ϩ1™vï5”ÑQ$…õͲ–¥u3ÞäWÖ¯®[PêÌô.ömí#ŽŠ÷¬ºwGô†m÷BÑŸÊ”ÿ:¢™e÷/r #••á®’ ×ûjO¢IÖ¹kRL³Èê•e¶nÚzï'X¦ÁgÃãåƒÎªÇ&±«†G_žÌè¤~Z>D•?¶^ª­´òn‹tÂß[A+¾e.%û'›Üó!¡^×û£h "Påò1æu"¯oÖX3‹«œ¤Ý¸=¦}{PÏLÙ3‹Üq6Ó„ìg¸32ªùZò~Åü/ϼüGó„§ßH¡®¼;šÑçE118®¦î‘x•p-Êv° ƒ6N u¨ŽéU×/Kkª”:…úMXÑÔ¡[‹fîX ¿¿ŒšHÍhàÃe¯1¤ói–Š—ø¹H™LuùΈ˜¸²»a<‹m_ø"™_…¯JÖˆñ×PQk–ÜÞ`é–Åc9æ$5ÑCr0c¸æ £ãšKñ–ZòD6òV)O#œ³ÛtØ‚ˆÒêå’Lþþ€ò³}îoœï ÚQTjî”°|ÑýèfeW“]l>ãŽ/1Ä,À±d»{­¸ë´§Q[þÈÈÑ „[Xø¦>2¿0ü@­IÒ†‰7•7G›‰shy‡C¬#› + àéÝÈ»{³9ø4Ù†â"Ý.‚‰ÑͲÅÎ#³Ì• G x®k0 ñ‹ªÃÓ¬ùHÂô¢@Ÿ½jÜÒýBqòǶ t¿èÉC¡¶‡öA-ä¤"8nè~w:õG²PØz¹ O¡e/ÑðïС™Ä=ˆÑùÚ]Œ+Y™ÌØóÌÈ”ìoÅ­Åd¢„çnö~}ü¦Ó*Û×…gŸÍ“_ÜýnÅÕf0M¶Öñ&B‘È ¯å[#1YÈ=Fe%Šš\$ÍÙGª(bï ñÐs[ÕŠ€¾‹_sX—°¼VñxzP柢ü4 £ KXÚØ|!:ï—ªºû ÷ÔÜØKãà\›~›a-%SDpÖ„GœèàcpIb6¨Œ½è!ue˜ã‘Óan»sºþûqæ±øN6ä™ôx‘„Q¢ —éµüàPU«Á…’ä@G¯@ÆŸ¢š¶~+ÔÕÎ<;úèë©ó¶3GµøADãéqÃr–˜­0AÎnÕu?fˆ*A”–_„‘ÆÝÒÂKßðÓhÛ·"Ç|oýzÞÚ?÷Ôùù2 Ÿg6¸w#ðšIʸ†›¶«š%îKŽUV“?Ç¢¶”j‚lê¶õO–Q¨.¤§(~>ú©{µ>®3Õ.°-(Àwõ0Ž€òíë/ñÌ”¯ã¹2ç;^°‹êÌ|uSb”øAÉ!]ô®´_ èÙúbÇJ2¸Òsœëu:&òeÐŒþó>Ø,Õëöu•û¸|¢>Í-ÀåìóP)mÛxa¢{¯‰‰`Ïôâð\.åî5:á»°îUUîêÇ=çî"é-¼”!¢OOÝýÉ4_Å{rp3¾áKx«+Ú Ds^Ã+&…>Šö›LÖf††÷kèGkzf @ß¹Áküàůî~lPPÊGŸæ`“0¬ìڕˬ¨½ïå~ZòÝ¡G“ÙiÓØþµ¿ë I–HõE«ÚIól‰né²2šÂºþl6mEÄ…{Ëñ®û|êlAöFåƒU[BÉŒ‹Ú¢Ed?6—AºÎ LY”ëïÕëå¬=‘e.HŸW¼Zu&-͘g:†…R슼`o"›a{Àà fšnY1Wñ.ó ÊS «7fµ>ŽL°Ó¾ßÁoÓ§’ôÑyΘ°Æ„"9ÜÒ™øŠ5ªý •6èP׿ܔÿ°D~%Hó#èî¾J´’-õûžO ]²]V&¨­Æk°jŽCH(K"ß&‡û€ê g2â"eTãïÈ5Å™œ×û­ѯ(áÔ©bßI1•góJå®ôØÜämÒ6@2Ìxˆô²Jª™ÜéñýO‹XßÙû õóJ—’>?¸«ôaƒ?É’‰:Þd¨òp,AUÍBWvÕáËáÃÞA›9•@½¡7 ì™ÌZ_šðHPÚª©áž5>%yð·só:TƸèúбW®²TúO&sRŒM4Ð4ÃCîG2ÛJ‘Ôþœì¥ÀÝ#Z `Ñj=ã*#¿Ó±ôZúJZ3 J~5˜[‘S'|ÛähQx{—ƒFë×1­½û'ýÞ9¿IÝ2êx§ˆjÏœÂLšq¦òOƒ’ ܃ãLs9‚Ï9¥ÛnKØ÷’êI‡²O«Ž;ÓÚ'ÅÄù©ÐåöÞ½ Ÿó]›³$qð1ÁâÞäVj\àWJ‹t@—\'úzœš’‹¦ºŽd•-âùÁê _áÈ 5Ñpöù2¼àíâ\ÉOñ#Æû ¬ò…¿nïGŒ¦xÝ ¤®‰g¶/͵ž€b™d/ÕZŸ=;×ë©Ç ÷›Lu~óÉÔr纄*•4íIÝáÏ”Cö¿¿D–f¥b}Äõ¶¸L/Çè×U°ÓǪ9$F.½¼º2 _ÖVÛðà?KP@úÂNpõFܧ£2ÖµGÜž4…¡v-ãKwå”Ó±K•àT»­É†—âõ¦:’QM½:í”ÍŠÏoņùAX¼©1ó–N(ס|{yý‹ /7̃€"ÍùeÓS&8¯ 5ü9ç ò»óv£¥ˆzYtµüõ(ƒŸm¥í-ΉÎX¹çD.Úœš›U1†½8§þc;Kºmœ.²Îa'ÊÚíû{É¡V@±¯‹Œ]ì—ýAÛ#vÛ§½È„mžì_¾¸ß•–ÙóY‡…~Ü‹ŸÊÁ)—¡a¢þÄÿ¡ïdÕxènJˆ‰œ|ÓŽÁßËì†Aú^°­Êå¡~SKIVtpâUX:ÞG×aA»å£R€pÂé®þõ‡ë9¥É'¦8iŸ‚¦Œh Å©ÊÂÆ‰E ‹ÉÅ›‡ãlË–GIC]égßGR2¬Xbì±ÙÈu:xÏ»Q;5º/d ªÃN)Ç$¬0’$ö9™Û”‹}‹ ¯Ô'µuĪBùªçÖ$ŸP:²%ì³Ñ댄v˜°…!¯tn…x=¹’Ít°1>^!µ8y såžMçŸÔSÕÌRì’þ>þ𯙕n,ÿWâ ]_y°ÒC ±Ýw5ìΜl$øËÍÆd!ZZ«ìTÕ±=C/Öî'Z>å7r}ll¦ >íFÀä¡^N-2ó4¬”[©Ã/¤òóˆO«tE<ÿþ<%4ÐÓ«IBä¸Ð¦W' /}q)àµQ°_p«ÊÔ…F­º"í<7£N»Å€7Ap%&QP»µòx††Z±Ì&aÚ˜BåS“íñ ½$¦ÛI7Ð3k”ö¥ëKr§¾Gyv†'UÈ JK÷èqÝ—>«¬ey\Up`ôZœÔà–VÆ”ýxçUÊ62uB$°÷øÕc#£â'(‚k-Tí/âåW')å[“™‘Ìj{9Ÿ~ÍDýLX|B¢.jgbÞ4àÉÊ™µDã‘ÔPô%Œe“*º)D)¼ë— É0Í«vÜ»ùÂ%Ï’RBždi._ êM±I¾7þNÝ”{§ƒù¬ÝëòÚ£"ŸÖÜLJýHÍ\Ñê©§&)ÕÝ1 ܬÁ›+6媖“è”ì„wU‹ñ­b9Ü}'ÏͶ u8*+ %Àû‘g-STßæ¤ßãPзUކŠè(T*‡u\DÉ.˜ðbìày Êöˆ³0øEóåðæê@3µmÍD[P”"x˜Àš±´_ï^¤¾C#y‹¿“´@œ/öî¢9lýŽÂFû×à\”tîÔÅŠØl¾o!ä]¦¶It°ƒ{U&¿ë\ð¥ýÓœ•H\–¬x—Liþòp:•±(íû4½rÅ‘A˜œï©Á x9æöqö"cì㙄ÐùÕ°°,’»æuÆa¾”[\úÈ•¶ç½>fY’ªƒ·«64S8‘g´qܦ nÏ,³"pécË7¯¸êÀJÆ’i]{JïOéb1:6%Ð&¥šÄ/äÆÄ¯Oæ·È–=Vu‰dYѾ>h_œ«¶/Þ³Z"Órm.½ÈDR‚£ºxi+ÃùÑÖ(8»VLps…¶²Ý”¸uÍÌZÊ ©íjÝòÛe§ÒéùxP†º¹Cß›x›=ÙÓ*ÆÓœ7>J÷Ý× 1lk·Q4 ÑnŒý¿H•©q½_¾]ªž í {=ºÔëÅÞº+•Æþ|øšþL¸y^^b.Édé¥ÿ8RÖ5ºŽÕ¶wß¡#Ôür@ìóÞ’4Ÿ²f‡d§n—sÿ›ñ`ÑÓ6™‘_ްpö0¢ *a;öz^NÇ=wjfMç¼®h—ì/y”}\Ê]®’tMsÕF‰–@óTW Þ§qËP„ˆðÆ·f‘%„âk<ËËx?JF1ö9yõ[\…Iø™”x¥­˜4æ}‰Ð~¶ät=>ÁÆ+|nfF|àõ"f&½C Sð™­OBêcñÙ°èG:6>Þù>&-Âæ_Ý’=Ï‚Q|™ÝÙl¿Ôý€61«Äˆßgç€^2Ó%ÝzïhW6U˜rMÂlýƒ°@ëQ]z–+º¥…áZ±áˆèÑ‘ å]”@ù¶ûqŠwDe]ÙÎã^Žp³U}r 2p ‹‚G/ÃåˆþD¬‚ÌÛ,ä~%dªÆ·Ž!wòF)ù"¤€Ñ)¥LoêG®CP¸~<–êuGpôÅËÌ Ûå û%;q^¿öáoåÎZ*Œh#½o›CSòQã$øuï>›OÝ¡Wž¯*¦Xl#¹xAtI®hÃù\»[32ô:Ip’Ѷ=tÝ{¾Ä©þüoiœlg/ˆV»gÓ HñsÛ\º|4Ê´køüÃ3¶> ’Sâ¬òáçö‚““Ç,FÊ}×ôE“«¶Ö&_×ÜÒÍŸ7¯\5Φ±ç¬S¾+™SRÞ¢˜ä…æj‡éB;¬Uß(Ì.ÒWÞ$"±‡*¿Êép–íÏÉÓ—º½LÞe>ÛÔû+y²Iv“„Šyý[‚oéÔÝáÍO¾lÁ=vàØrõr¦çÎîA/ SœXZÔ;œ~Î(`îÒ{Ô]íͽš ܲÓã©JøIžr*Da[•!X>šø9]Rúá*‹“bŒpÂ\…< eܽ'hRµ—¡k©ŒÖ2T®ŽÄ"ƒ_]½¸GFÞo´pL–™|$þ\{L|ß>t%­Žôå4Ÿ!«ÀQq5þ¥#Ï—zo2,úý§RN ƒ©×~|4ÆR:×âS‹xBñaz ³LKÐÑ ¸‡eçG¨îõ4 ¸÷ †Wg¥¥…’ÓDßÄioZ`ÔHq°[këjÄtõYrlÊç/ñù£yU ø>[ŸãéùÅU˶£DŒèù1"ÇöåAÇk‹“®d#Kák†w—¶ƒ6xÕ€TE(œ¡îb*÷ýw 8Þy)¼ªO(º~ªbœjùøPƒ¹ £t3…®«é’|Üø0"ˆ9[”Rý]„§=È©¶PG0Ò$4ÀÛÁˆ bÑ‚FøQ¨amFVEs\8šÐEü¾e‘àð‡Â6¤æ"èF ß]·nPجËöw|aþ]aÓÅV3PM3“æ÷?e” ƒ:£ºÇõOl÷’1§N…˜9z:6š#9UÉ;zÜ{œI¬×"Nôx­¤ÉÆ-^2ó&³o\gcdÁñɯtjž‰¡¡ L¦±£ ¹ì©•·å#v†¹„fDDZªâNZÎ ðÞy¹Oû—ùÇ™·›ß?É©Å{ØÚÏ4ñDßÚž¤¥Ê’ô¸zAÕ1׆赓~* l${þÈë͸D;¦:»ä×ïç‡z¬¬>„” 8H²#¤Ã¸I›¾¤¿$ýž¹Íβ‡)¶:µP7DEµ8gsÊo>äÚÕ£õ­`Šçãr„FÄ ÖÃo)ßÏÜúõ¾÷uæ‹>I¦J³YæÏBµä)hÁÄNö›Jr|H®Be¤µGŸYÕzC9æ,®±d¾[ 'íìàkeEqiï6 héº{ÐmAÝ9âÙTÝ鞯}/'‹±ˆÒ@Âñ­±;ÿªUÂrÿA ºëÒsÖ•`Aéñ VÈõþÇâYM2›ð$¢º÷RñI2[®ckÁSåSþTgcÄÓ«tB²uj´—ÞrVÈ$Wb“ŽØ¹¶½Cž1_òíÊð\ÃM5CT HL½“ëO®žBÄøÐL*v2{J˜×ð«|„’û)‡ÈËE´FÔ öÆ»¾óžêE®CÓR¸ož÷ÁIši<ÉOFuŸµ};J]±‡ØyŸqlÿå2JÝDÒ~Ÿ úɼÄwÚ#êèíOŠ˜ÙÂïf[x)p4]óÕ .ûñQªf=62#©9‰D›ä¥$ÓF‘!¥/MQ*©•Ù2ø½(JfÑ»mm1yíÓõ*:¿¸ò>w}ùÎqLVŠJ…ß¹ÿâÆ%È€,÷|î\ä/b<Ñ©ÏSÌlˆkv ZúD×Òï§÷¸B_B/ìÈ Õ# _ ‘=mVênÓ®qŽ kœML„b¹0Ãdg[Ú¤YŽíl(æŒ&iÚ naõ®Ã|A¥ç·5uà$”þ.~P4'öƒ™æŒXDöÎ%ª0XçÁȬx5šþ”ÞÏ¡Œé'Žú¯4Ì]#¨o‰Jˆ3Nà·³²S'kUP–a”ÓÉw^è¬Ç¾ d,Ÿ%çkÖ·­'µ;= t‘G³|®Ê2·ó."´\Šº,®IÆA‚Õ|Â9ŒR) °m÷èå ©JuÍŒˆ¸™;ߢº7ã3øuMJk¿²×1ò«Ÿ²ô<g)fuÙ\‹Þ„UíšGöª¼É™y+^ºžt?ﵦR¹ØåÁëµ§è¿’îîqãnÓrF‹~¤ìÐb=ƒrEž2¨(qÁTõqÎg¼$¯Ñ ÙŽ$IǬÉ gƒ5鞪P ¾Ý;2òÜÊ ½W:—ùðS¸ÿ’ûÀˆŽ‘¬¸yû“ØÏØ[Ö|ùEç ç+²³ÑË„ÝéEhS]šæë¬BíÃu ß¿guMßÉ#Ã$ëîä%Ö^)l™'?SÆoõ ’NõV—ˆÈÄ´Œú˜—˜«)®ËÞôwEŠáoŒVY¨8`ñ"Io¬OK‰l|‚Œæ )"™4ÅÆ¿ð«g°V On U “‰q»&gÞS+w¯aë36}NñŒ`Á=f>“³Ô'6ÚyŒ‹tö/~뤂ÏGƒB_\S gÄJÈXʼnŽ9…Û'¤‰”9*¬ˆ8~ì%z鲜ý‘´ãMÆr—zSâ³€+«"ö㫨îÀ‘„õŸW:âM|ŠDåwQWšÄçÍï4Éäo¨\øÊב¨šÇ5ȕر„¡œ£ƒªz5‰Ìž¼ÔÓ½vxõZÊG´|;øQœ×вVnÈhHÃ!LÃnA^1¹”#ÅÇ|fy{Ó1ç²…N¸`ˆÊ1y€rfbžó+ßȦîy1Pë›e|e ļÝyht‹8Xbh¶×Iwðƒ>ÅvOªÅmÄ›çÚ{êû—¨¾QÏäâìÎÉ2ƒ'8s5hKMYK"Žä9 _·üÑÑD>û<ÃŒÈzÅõ]®öYB\jÜžÿ‚EG Èg/0à­åõ”lÈŠ.ìÅÃÒI oÏ,d¿¸í¯‡Î§/5¥½}KïîÏè3šeå%¡Ù}z]øŠ5’Wh“öT=\»\ #=ÿ²âÂv¦PãÞˆnŠâÃ0éÎ/‚–,ŸçŠ+ÙK=ÀvmêøÕ¦… «=W2¾öþ¢/®ï~PŽ@‹h‰½¸óy´.òÅý¨ @Uè+ï´ý+å“#äY…Šn‹b[|£ž‹,³§A&—Ù[¼ÛY°T0œBU;x0Õ%¶÷sÅÿŸöÎaÍ€1¢mÛ¶mÛ¶mÛ¶m[Ó¶m۶͹Ý=üYä ²Ë—z€³®ÚÔ¹ÔIp›I5+Â÷)ÇùøS§}Åëu²„} t'15AÀú9G}J†ÂAÑÆþç6re)ãÄ+Ë’e2-x3íëCÉN)Tiй=Ê%®üz¤ {ÖŸ{-ò̱…g¼‡冨ªïcê†m>RÒ‰yõn’ÄÁY„Ðæ öKt‚;šj—ñÀ¤\ŠE.ûB¨-X¯{ =QW¹Ìïïm{§êÅ·ôŒ ØÙe öh-cV_!æç‹¹ ÍÇG³ÀGH(ž!¶„dúa[&,ï{Ý~£ø˜Bž¶ a~õƒÿXì66Q!x}­â3Ûɀ䭡´; f•ýIœRF*ý"ˆiØÈ’Š‘˜IJ·ܘSIŽ-sG©{ưÁ`˜í7Œ…Ü6(õe™ ^¯›hëÂÌ­T— as÷$‹Uà )n3ΈÈΛ9g±0Ôñ*CåBŠŒÛÕuK*ʒݵ陂¿gnÐïz‡ž¤8f‘Cå‘ݰæñjÄKÚ$‰É1µ?@ä¯i"b€ô 5©Ó­xO‡¤Ô\.=Yßÿ^ŠËd¯\ÐwÓº¤ME±?{«`åßDH"ôú;/Xþ‹Òª[ŒZ¦ù8§Sk7'žl¶˜\Œ:wZ¶At=2”“ÆÖ+ÌeäÁªˆã¾ Ëq ú˜v¸@58÷á)ZTEüïÅ Þß7KN»Se¾béž5~„!èåÊŽÛã¿sW>d¹?Á38(û⮜^6•áœâ‡À'E>e„­ ôðÃ9žWûëüOäø÷n1ÖèG?mPôh` ¼nõ;Ã>Tq–>¾~¢‡›/µæà‘Zêû½7þwÙ$®Ónx=N®S?Æ!zu™8ÎÆÀl#h!ŽŒ(³ŠTìÏÖóE;±t½óƒAé_ž8¹Ð<ò}¼ÎMõX¼m"±ÀÁ©×&U9›uoÁ=FÔZn3×hûPU›v_ÒÕLµÝƒ¦¾t8 Ô^\ü(Oe%ˆXhˆoæP±GβC™ÀÅÊû,"9màI¼å .¥`Kb‘êó@»N!þÙìšr9ºÛu0âFÚ ÌÞ‡wL¯\ÆÇ¤j×Âq·»E*ÀÇv@Ëõ Çè à$o0óI÷úŽYLþ*t¼“¹…qÏøºU•p3ôÁ÷ÀüLúu^*½™‘¡\câ#…Šö¯¤´:”’<0Q鼇( ãA˜Dç¨Ã y¬!*ÓNVÄ­•Gë/åu´VéÛ¦»X\›OÏ”¶E ²2T¦•1° S-ó£ÇØÅíÖý¢ÌÊ…Ésœo d X(¡fëüýTú±„UõnwŠæÓ­p2òyà4t<_eþ´<)nïnC-²Å`Œ¤[¦ÔåèPW§oØ%²“ˆ¦Ž.¼’9©úÝ8ÞòDxÓx0~óUWG«‹Ek1”ìÑ `)êß–´Ü­2Ƨ‰_u:0*šã þdÿ¨æK£àXüÁÅ+Ö ™…µòO°\‰€!'Üj¸Ô©»›W£fQ½öÕ|pÙ]àK-?1&»\cU©“þõçfÞáX¶¥ÇŒ¾¨7QžKå¬z“\òcÕ u`u5"´ †’.\w‡ ¿@² 5“9´ŒZ/2"Uk9Hëë±-£äHÚ=3åÖEÑ[C;õ}çÊÍ”úÚЬ»Ä‹U Ïx†JœÔy‰]jÉw¨ƒ'6:oñ¾±-F—}Ë|ÉPc£Ê«©¹ ÿ6f±ØÑІs]—•‚!‘³ÌýkîAz,Ø¿ò¹Dq‰R\÷ÊøŒsÜZÓ¿BÚ*s @$>BI†)lß¹úðÚ0&J·pß\÷3•€o¥¾g ’Äk§þv±ÉìH$t(‘;f…Y€ÿø@VÁUšz|¡èÇÞaktfzá?8´R‡€¶)ßÌ£6ýœ9" N’ÒÍ© †0;QVú1uáÉ'ɬԦ`z1‰êQ~Æ&Æ÷ºÊÕ‹Ôð á¢eÊ8*våEÞ‰r!EŠÆÊrâ£ö™c7 l‘)‚†m…ƒè\›i ª©°¥¡ƒç]h,Ö(–‡~DT¶®i_²=°âX±fâEØiͶô£ê5:š'›¸COÎ}&ß݈´Dœ äŽî*¸$•ü^# ëÁæ „×̆à>”‰LúÝ5V ³Ñ¥ò¯cL{Ù œòò\OKŸ¾¯‚´h /Œ' ´±œn:7CÔF¤¤ÂEÓoÌM´àÖW•qÿþûX™)½ ÔàÚµŸ‰3˜«P\U¨}7 ^ªZoÅ›žX¼†3¸™ú5ëËÚË+ç”Ûc‡Ðê’NÙQ:!³Ø$dR˜çC³Èçç„÷‹[·‰6 +•)¢É5aµÌ`-q%Dý¡K2t4ªmå—5uÑ /ƒ@ Šá9ªFò[ÇìïÖõÆÖÊßöN›cwÍ$QÊ3…SŒJàˆì‰é¾à5ÀIÖNG»Š´õÁstxÚ¸ÕÞo£Â®'S¶i—íBgÆøµù«*.maµ{/©•½˜(; þÐ7µª¾Ü·Ì¿z -õï •6tÀ71´(YoØs5?÷}jc8 a™d:ú¢ºã\žªq æ Of æ“[Ç4CÌœ›£k§ÿ„¯ZÌíN…fþÌÌÈt"l­³ÄŒÜãÃÎô¾›×t/®Q#Tð.ñÉrˆø…öèöÈ•liô d4ÆËMx÷œA²¦†µhà`çœH8|N߀¿ºà}“^lŸ'x;w÷lüñŠ þÞ9’›ûÛz‚>TaœÊ 'Ï\Û*~ÜØ éI@Sf8°ÿí½?ðçóy Ç2Ωx²â¡UÊ*.!Ç.#1°Pn 2<ÛÝeÞ¦„jz°Q:CZ8 )©ÿÄNÃâ"÷ænx?ÇÄŸü¹µœ‰Wá>‘p n÷êÊ‘K´<ø©MïZ&¡ø0)kšv¨PÖÞ›Ÿ³"6Šæé"ƒíèºE›'ªàŒbSÓ#QW¦È«~£ôZ÷Ž ñk L+Æê¶`£ªÜ«ÒcÏaç•©gþ۔Ƀ³Nƒœnhv©×z`IH2oócíÍÝÐe?,Wäü6£ú@Kjò«dÒËP=I=~Ñ<6t–r•ý3¾gW&Ïh¥çu©@é41 ]iÞeu@†tsûüCr´…o¡ ƒñY ‡š¯»Áå6€ƒ@4¾èÁõl\K¶ R[[€‰5Y—ˆÂ\ó-èd/ýÈpp%ákKÊÁ9®ÔBf8¶•’š¬Êª+%.úLß*ÊK4Þ€º„ó5”ÔÎG9$úñ^çi' ÖªýŽ„þöT4' þ§¤œ³E†0ñ‚‡^½)~Í õÕ™4§7– ,U¿Fýl­ˆw‹@Ç”N#¿E‚¯Úf×SMo¹®0¬ßøíº†™Šx¦%·OUâ*‘°áÌ÷|¡Ke@ôš³r>­ š“Œq€[/<°ã"Ëû<óMn€ÐžnÔBÝq_,Û{°ÈgÁÓ5Ä÷å•5î6P ·4©<Ú›­‹q?áù† M®ªJ''à\;¾ýŒÍæì$/ØEšvYÜèq‚G<µÏ!þ˜µ}V®g~e·]E ¹3m£/fâ7/Øg…[ã¿T¢Ê¾ß«Pßç×b;$@aî­øÇ[þ»út±°Vxò‘KâÒ„í‚tvMÌË X/Áô›æ óÝ«£ :”{;±R1Œ·Í­hB+CÓ£‹±fF%ž\›·bd@½—$:ÔHø‹ú|ó4ªâ$9Ø‹~6}>×öªûììššÜB3ê¢å › ?zC(f’5óö«¯ôKOgHÔ·J5ñX‚8q²yR¦DD/tŒÙp„-”=MÕT|“®³é‚^eÐÄÞ¬ÆÔðÿ·€Ûþˆ‹>³‘Hy\ oˆKÀ_-Â%¸åaå5]U0/ƒÁ•0ÖùRM²H(²iüûQì~ Õ¤ÛêàÉ­™x§L¯Kƒ@w"x;³Š–túíÏ‹èŸy`Þv¤V¬ß<ý˜†’1NÖgtN«ÓL\ë:$”#ñ„ª[eqÜ€•Zœùh¥Ž€ Ïßš™€ãÆ\J;2«p^;̧?èZV×Áó ™òSk=ªøP°[£3 vðJ0F¿¹R׬Öñ:OCì„ÖNÃÄîeDºxO·êNý“–eu ¬;¬WŠþîn{ßó¨° ^¦€5œav¹©_ã‚;FÎ…™€hóuxÄo¦7ð÷ Em“wYçí;ÀbSÍ=æ*ÚØÑZ9Á)týP%ýÌpx@`Ù‹a¾½Ut÷½ò¡ª¼þ´òd['L»NlܤþêsÝüØ#Ñ}ÃgÙ¼$‡µB˜£âÚÐ×,i3w«¤æ7ÚuÏ{Hå‹×D –i3ÍybåY®vÐ? ^.H‘agRï2‹^£½íBIð2ѽö¹ÎÚébNÈ{ M‚,`û´¼¢´g÷& » 4÷«síîÚ€¨þa0•ÌаÁÀf"èŽqÒ/}Ðy€b·z[å‹8¥’]ïCÌÏ…o׌jl]Bñó¸­ÍÑ¿À>í yVüÁQ/'Õ~MC¤cÍÝqØ©Þ0–—óãø¤¥¨y#ÒÌÏqá¾5ñ²®§ºx­…¾Fe  ƒÚM~Ö¶K—Éq¬›v$€À•u!nƒ‘uÕK^¿\N Sk¼\zSí”a@~Í|;¥^? gFA½€ˆW=ݵvt ü0õ绣j|oӭª¬v‡]ò5ÖÅK\¸IWôéÅg2ÖËÕ$wÂk)°p’ aê¦äÖ™lSdŽÚ;]ÍÛ5G°ªz¢‚«”©\ˆW©oÕ›oX*ÁLåÒÁ”—ÑÑbrOÛ’7æT|½Ñ¸¾ê0&EXLJèGþÔ”?¬·cSÑâ)ç´"!szxl04ؿΚÔù.gÅÆ¢@>9§ÒоÍ^öqŽ+žóÛD¤Ë¸ê¹û›L#\ì|«ÅƒP-3æÜš^ëÕìÞ¿ZÐBRHÐÛXY¸¼4ã0ÊÁ|yle]mÓçiÈ|4}†ž˜$‡Vöà²F@¤$–söAÌ¥ªÇŽö‹wÑ/;EÄü»‘έ³g‚´_H3/ºá/ûáŽp‹@õóæ£JÖ^ð3j¾"ÑE $^0ìQ馯èE^CX¬Ô k“Á1"58vHJ4£¢`6ÄÙTœÈ?ØHu7÷’Ôº¨êŽ f€XîrAל¾Ý ņ•qdètIÔý.O•Ë—:­\ ´„â²€,R¢Á»{¿§ýË„ÝýŠ^áp†PY9ÿàUGFF¼Áí1 0ùÛÚ£ÖÃö’„îü2…L!ó.ãS½ÜÞî0¢»H+ñçòXoƒyE4ܾª¬ÝáÅÜ8L㼿ý1~r¬QÔŒUßBó7Ù,}ä£Z?²äT]$†^ªÐi¸ú׌ÆŠ)íŠ`ÈP’#6áУ´NŸüí5ª÷ÚsÄÏï¾]’ÐÓ¬%î@Å5.\£|dNž6Å¨Íø¾‚Ÿ4þä}hé/c€8û6d©:ÐÃü}o†W(>û[Y ém:¹™l‚­æö¥H°²žj¤Ã¯>m •‚ú÷í ’Ã{YW=`Œlièh~`¨ >Î~ó»µ>æÚ¸Nì&5\¶¬b2ÿýšzᮕ#ä°( ĵë'yÔ¶÷ ªöZAM:i°±Œ ѸrŽYÙH±àä4¿$Ë*t¾ËöóHTÕïÄ€ùÚÛëétá(ù»)m¬@FäÿiàOSÝ ¦¼*L.qŠ7 ±BÈ¡zÏ w4èXŽg;¿_8”ÕnϽæKz;Ç&,žúª0L×ʪûT½·™¶‹ý7d·8ÒôÚeÇ.å³:ˆ^ú„Ÿ² Š[§C¹_¤m‡)ªWèÂ]¥ÿ4³ðÔk€54ÿa.›æ‹Ñ™FÑÌá1‰V›?¡´¯  åžMÙ0Ì’ø¬m‘fP-,¸ªÈ% ödÀ0ÆG_@¿…ÌB»-Å ºÔ¸êk)¢jÒLµ„©Xº¹Ç6br¾ç+Çü®xóàËË\"øK·”."L«¾¦¤â–†&HìÿÊø¼§R Ê¿'qóe¿ÛIO‡JaïY2_¨ëQ·#voŽJ&ï/¯ÞS—‚ÆL…À*íkÔrM]Üí/{È©zL£{Ml‘£pÓèTFÈЈÃô d\8ס÷¬ò8*ËX¢5Ãfaüúã%‘¯,s¼ zЩb`CŠ5ǰåèQB3bDâ§Ÿ¯„e«CÅ´A ù ÑÍÅsT4a{&qS”8j«ÕGHWç_˜k|ƒ\}õ.ùA.\'×fƒ?݉j²tÔ(a|–8i lÚûÛÎËÿȧÿýݱ@çJïY´fðg´ñ9®ÌèE›Ú‡=Á&;Œ< ‰  @0~3Cs´˜µØ‰†ö‹,ä³ï ç@eÀ¬Œ›ÖœÊ©|{IеFK0œ¤\Å„c¡N¸âä *»øLI€`ã÷˜ H`àèѽQÀˆ¤ÒzÎô°”&kç}ØJPQìu×vÀÉÎÚÇîÈ~[ãHõÀÛzd³ ªÔ2ƒõ¶CmÂcT¶È>ãÉG¹wcÞLÅð”O0‹‡ßÈh®zXnKa÷˜Ò—T|Ý)²iP¼k[»]? Ac‚÷kÚ–3ìî=˜6(˜•‚Fœë'ýºlZ¶Ã{K-ví*¹\)ª®Ûùq4ÎÆJº]Ô>«°#žÏp<bdƒ oÆ'gÚ§@ê³ußÖhs§A{¤èK¸9ežwSj”4ì &tÉQ°¸·ZÅä9&;ü[7šzw¯UôR^tÄi@M<05,‡(²1Eá½JqbÇÙkVù}~‡YxÄ”ëἃ٧œÓà) Vxç¿Î%{dAÞ™T1Ÿ8B lôXÖ†b$“™J`,ß®*×êiq"Fþ®^º×¯îŽqúƒë@ÍOiž¢²ó–ÄáUAö·¡\* Nkæ,ŽùVÍÚ+ôü¶RJ;ŽØƒ¤Ï]ÿÓ!Þ…ËúJ%ð®.IÖL‘H)Oª/ËD9øÓ]æ§nbCÈô Œ¤ÏX({ð*2[Gé[¾„¬+^W§{àÝh;>ûš%Šâm+n[[³žJÕ…½ ìdl^j®Ü=áø«O›8ðáX ôײl¹ýI©ªixü ÞÖÑŒ±q'Î>à;Ý0<„K'Õ'‡eÝÍ ´;ußpwÊy×)vµÓð… þ¬Œÿ%`ŽÆÖ§õø¥2œhWËÎÐQ{zgüšÿ>?Ðmv¶<Wþôo’» ò}¸­Œh¶È<$"Šò Yø³¤GTAwjÛ‹8ð­*‡‰«ö‰'?ñ= \ü4¿øjoñJõ%ï⧤ђVŒ?¼ˆ‡ »@‘ôÆe["ÀZ*ûIí`¾« ­È†æzg$ŠwùCH÷% )1t½å@7‡ Ûm)»ò0²ã;á¨Ñ¡Uš¼*»~Å#k>Ô½Œ õ+ƒ—… KöÓø]‚øÎÙÃK=‚ó~¿—=õÎññ26œ…„©¶âc&d]¸"ÀˆŽV¨"½×Å\5FµQ~™V[Í!NáÃÈ©]Ì:6¤[±ƒWDÑ eF ÓYÉ&Ï2þ53ì†iºlåàHè Ë„1’³ÓQ>ïwÓÉ™å¸I÷¼+r©´?Œõâàûtæ+Áþ`a=²ùûJADµCxyòêMCm2:•…†l„ÐsU·¸ä­ ½âd :ÿ&¾êón-%¿Ø1Ë“U<ÔÉ{_i[üRQ¸Vö@w×îôÖEV€i•y –s8Á_–3ý€Ü幨/cÉá:ѱ¼pj|ùY¶d”%`·‡nv–Ï»`F\c¥Êç :àÑë ‹û®‹`Ïî1«ñhQ"üÌ€r†wèÿéftõìjñ€h ÖjLO`¥D`Ðöᣕ茙S¢WŸ,nOc”1´W–ÊN¹[O:™*”`ËÓç$Õä×6KÇ…Ï#»³ešÇ&ÓŒ¡»à0¾RÅÜAkön^À‘[ ²éI¢´(3È$Ü×w^ÈW–*ùœAÎ 4òÜÒÄ8«MUãn ,"J(0ܲ0ö~Õ!~Åìd@†·£kÛ ùBbÙÓ%3“+KŽ—k=€åO˜Ûm>â­Îð÷X­™%ã&2›âE&ƒ«Ñ·?Û&g+'kØ P0ZghªñÇW;0ÉߌTÔ¸Høk'íŸÍó—0×BM†¯"û ùîÞ…;_ÚdÆeEÁÑ×p´Wüa‰ öµÒ‡6Š]¯Z°÷ß±v/žËŽXto‰·R@|¿e“ÕN­ÀÑ!Ù)È ¤MÁ9ô{ Rî#"Àp Gu5Yùé]qÉ0ôi¥tÜkt’8Ò0¬ªY]ÂÂõÀ÷ç›§ž4-s­þÓÑËI›í©º.×FY™·ÞUzVQ]Nô£ww»:¿#~~Ý£× ñËn.Ñá'Èïo~Èr·ûnñðÆa<ùÀ·YÜŠ.hˆ[õÆÂ°óïÃM9¼Çú25eëF*aÏÈ‚Ì-¤¨ÜfwI¼›"­,¥z@¢ÂÔjvÛ«hæi¨þ)˜µ·÷+ý¿XmP¯þI‹ÒíR)g‹ü®Ì&/@ö >3|Ñ–¿Àòk ëé[“wp¬cõ%ü.zö¢üä7VJ•AJ‚sÞ¿(Ôþ Ó÷2R_Pè¤Z´Y¯ Fcº5\¬Ú’‰S¸i‚Rš¯®Â(ß«Ï[Œ§3 ²/~j2~jÒŠÙ…¹` "µaŸ÷8{1Šzh–ØÉÃ뤅aLMŸ½Û_ÎäÏâÆd÷/yÊu;,¸ÓË?öæ:³)à]¼ßUÒ£w¨S÷ð‘ç׉º*¦o}BP'îÁ8x—×a§z®8¢?ŠîÎÜW£‹˜•³°ê•â´s|Ñxq ë1dBL}=gN96æô±„žúGN×?û[ö¯{4áö)œš„è\Ã€Š—–hƧI«½Ž8šü /Ús¨1à»Õ4CK#dñ‹¢E~„æH`F‚b¾­Ÿðb'=pÜ6]ãVq¯Ä¾”tÉGþ„é÷Þ‚CgO½iJO²¬Ëÿà9.ž+;cQ MNR…ö¥€2'rQæL ž'œ¤>ÔËÁ>à+*åc¿ ‰§9Ùß?Îã;ôþJoz¢›6žþƒ ÏüK"k÷yÖLS~øgØí^5ìYiî¦÷Ÿ]˾ùƒ¹æÖƒ¦Ù¶tŸ?¶+|+SŠÅ‚ Ó Kk©'!è¹A©ŠçåwÓjI¸ýLVœ$ˆu qÛ:«õDå¨ ï Ëf{žõ‘}3ö•/l ¼Ç”Dϯ¸ŠjmˆÆ&•üÇvÍeVN`ózà9ã'&a…œò.+äî5Ï¡“»¸ús&¤v'rµX(ÆÆˆïà²ÿ‚>Æ]AtÉg‡šn¼"UetáÂe“ㆩ‚*KY›óK ß`º³”)k…ïó=•{”Kì]ád,]q¹&ñ¡^앹ÝRò çž.ÕÐrYÝöFC8–¯k²Ó0´-e:}E ŒÆÂC¾±Ç I(j‹Y{rY=”íp`u…A§Ñ‘½CðS¡(y!¬ÈÅîÄÚ"r÷QÜ'ö¨—ËÓ¸·8¯KNðÒ‹áo?Äé‰WG½M¸E ¬ô†Ñúƒ ¦ö|Qz:UV²q>Ê’ ØŽtys×02F,KÊUÓ×–‡ý€šDJñæÎ»¡f]ºíÙk ïv1FüO=BÙ`QLåêöÓ0“F ¥fùn\,àö=´GtHs|´t-åº;=é/œ¬ýˆ >j€fìsÕJ%ãèÛmôƒÀ†Þ¢¶b𿊤ùgŸ«yeÿø±×/cö@¼$ Ò1[F5òé—w"É‚k±Â^gÝÒ7\‘’«½~ƒ°mØ‹¨7kqØØr«©m šÏ iê\e£¡å€ò4Ì\,מaŠflDp9U…lÌ—$CC‡h®3¿S×L”®×ÏšÍÉuG}˜ézÌÌþŒT\™ê¯AÐö;¿1L}íd7Ú‰(‡üQŸ-ÝÛëtò0¯ì†º5ƳK>c ì˜æ ˜r„à-?úðýÁCAsv5²[q ç ø–€ B…o$j4T(^1“¥‰/ÆÛ£³£PƤ Ê2…@Ü=4ÇÃÃQ,£¼nñ ÎÚ¦œB¶hµËþct¿“ UŽçáÞ ~;Û ¤|_ü}‰J7h†ò´¾{H;áøuß nAôñ¸á…\ʤT†‘Ÿq¶pË0P¼wè-mžÏ,x¢Ý!¸–;Ä0=éªfýÛ‰amƒ:¹3ÂUÍ8+1ªëq-ü€nË!>0roHH‹þøàAäœñ±I™”™œC¢Æ|nÅÛ2Ýã|ð¾Yî½äÖ !(µÎxd“zðô[?°"W’Z9rþ¡Dàš‹(¨gqÃàãÆäkÑ)A9’GL¬§˜Þ}F ¾A´wl›Š¹öS´³x¹ž“ÅàOƒëÔÒñöÞ ñšÏA±G ×ʪÿ¦Z³#wÞ/k˜éßéB•=/1²XÊ,šˆGrdíÚIÃc‹’Hs†ªT8n£ñ Vw¶‚"PÄ_ØfJüŸ–æÌ$Ç õbŒ4p•}Û›ÏÆ²KgÉΚ“1E2xAëœG¢˜h»…â:7ŽÄØÜnÕöxM^ziKò7{'é1±)c“Û“?’?VgñÜÃðj¨~§i ÇiXžümï(1h+ÆÐæ¨)œÖµ!kœŠ’n“JŸ?—Sd2^¾öøÓ hÄPl­ìÏ÷AY.õyy•cˆPì#Y5®QçC", .‡í›±?àV` ú¡s!üîõˆzĘêŸÜÅí±žNn”".ù†¬†%Dr&fQ^–TýòI@§ :Ô˜©ŸA4žžÜ¯üE–â§Ì‡“y&ÔÌòÔUSÈž%Ÿ}.HŸè̶|x<yóÐâ}ÿ­°Rr(¼A”ÀâÆ2óøBÀæ³Fù Ǭ%Ö› †4]aŽ -Š–ìx rÁüŒGרá}®œ3_¸òPˆÏÎjÚr™^@¦äÚ’“gTS§% fr4ì¹rƒàfw—‹QŸgÿy‡ï1Å.ƒ# ÛNŸðܪaÚ×xt¾eÉ:Á`Õ{ÞXì̈+;pñó ÐDáèøbŠ·Ë¹ ‘ (U œ}6q¸^ †?ÂéÐÛÒš)Büp•9¯Út*ã¦7‘Î` îAÓ74äƒÑWà‘F‡Í+ŸR÷æ26©YÕ ªnØ&-™µ6w+\Û½®Â}õÝäz²!>Â(͸:h­â¿Á b 6+T4ëžç÷íj`¶s1¶êv™f| bÙÈ|Ú†‚¡Iþ ®#ÎèóYB寂ÈéæõÔ×à]†y8»QÜ≞ÄS- ûÂêR63)Õuô†Dßu³¥êN§ý ú4¸¥_5DZ@u¥ÈÚ”)é1Ôïd]w™s‡ØN,Íh ÓNëê·.Gï*Ê~AK‘L C-ƒß°‹ bzÏo~FgFÃ7¨Ó,ßÄèÖ›¼ìÖ–]€sv{ahO¿B~ Km°R™£¬·%?4¥¾Ð´ÉR_ÜXð¸ÄŸl/£aÎXòBfk§Nk°üíÚ§˜pË-Q~'£(Ù0ºÆD’s¢{Ü#Wìd]–\ U™R>EY]³ŠÃN>=sÚyC#Ž_Z»6ã(J{’ÉÈ@m;Ëök^B¯ÙcŸÜ\Wꆃůt…m*Óä÷î7­tºª fO‡½©qåÕQªkôcï‹ Œ‚ü ú ÉÖšqô'ô « "w˜îò5‘º ¼8q;á”g¤ÿ »ù¦ér©&~8é O"îÙ?-Ty ÎÜ]Ål×fOÅ{“f€²7µ‚ôùÔÛ Z›îRç‰A6…x¼rRÂû|à0Ú=ßjO ‡ÝrP€SŠ3lë.V)íj®äËþ®Ñ¢܉h!ù @å®Ýþáï8GŸ&e’ IìÈF¯‰{[R¦îr¯¶@¥îúÌI†è¨Ò?”ám} "w޲ÓãZÔYÌá=é¡6B‰}¦uªD¢¡#2 •ËÈ{T*oà‡a•dOúnäÆ9ìÿn:#ö"ãßןœ¨T»)΢»ø5¿PêÝ‹Øëø•¹è Y™™(j±F¢'ó«Ç¶ôÏNôUGLÂÙö®$Å~VÀ‚x•ß$g±Ôÿ[5Ø“.qCu´¾³C7[ºjZ³ÉÕ %œ‡CžHNEþùJþÃÎ8кâmíàÚ)›i¦õFQAZ^DC ·Öã¬ÇºRÙª’DGº­2føG:J™¥Æ6À¾#­I;ªk Y4˜lsïÄ2ÆÍ\1Eu±³Í‰wqEW0 $í{«U¸ò‚oFpg+h˜_ΛªW⪃+¢v¸=NOŽ"'°ÅaVMÖ?ÊÎ}{F…)áðáÚ@£‰ªœ›КΕÜ7ݵ٣ou6ÏE‰•ƒ(€Eßxü ?g§å”õlVºx V6Yvù«Äcu‰D+j#;¥q“ŒÆ÷<“ÄÓí ‰Ë'I>¡šÊý‚š9¤E/ù T†@jë;Íû]ä ÊŽh!‡r„(‹)œžå6‘ÝýoIç—¤’1^í¨,êTJ¤Wk§{^)Çz}§øñq½€Í·Ñ‹”{ç~¥9Ÿ~þ´Uºß» Ÿ.¬FŨ0¶±¥S®÷'¼jo«÷ìÉÔV~ãbÂïÀÄp–È6ìzÅ|³QÄs]fåVº¶¸Ç¨Ó·{Âë¤y²Îz©måÓ:yàå³nˆDS˜°µÛÖ»åáýå0ˆ(E#_9až?)ÈÍ-(&·í1™“G®¾`ŸÑ=ÊÍPö‚!Î'ÇU0yÂ4‰œR`_mØ*é­WÁ]>õqÚû2¿s Žpm‡AÃãmº®9¿„„Kº1“m«Ë¯‘¨3‚wý€ÿf[66’¯“#SÎJ¾¥»4áö¸´j[¬æ(! zøª6k3µÈRû¨å²^…H"©ŽîÇ8•º®NüÇé<ƒ ²„‘­ȬgBQÚθUD}N¹ï/üÀŸ$DOj{íš¿„Ší /o»s•(ÿ Fàì'!x7©þÖ]/‹ìÂ8¸4U¤Õ’Aå£ÃFRïë°Ðlø‡]¼V;{=VÝÂ¯Ðø&%{m•‹‰Âý2Ÿ9íô˜å`«Ër«Y¢‚FàÆÀg ZÃ30` ’=©ü}¬´Emº!ó,Ãø÷2¤’±×Äà pÞ4Ž ßæ`ŒZÂ|êÁT)ÌøèÏÐÅT%.í”à´M§€ Y`C•§î6#ßêtðL^ÏöV XÝÕžEŒ¢ÀOà«iq^a;*yû ­rëÄ%$H$€&¿Úl-˜e…ÝBÔàçJkÒ;§>8é>K;Vfô¹î2\å[Kß¼5<È`4Pñ<Ũ£LöêËZ ™_3WBŸz%”ªb¦€¿vûÂÃÈ’ãïܯ†1±õ1H®5´<&I2øÚ£öëÆÿÂüÄá?5Y!‚AK^Å¥dKêׯ¬Ÿ4ý¤ðóÕ*i‘_ø7úÁ1ü C²ù$ˆ­Œ-epÚùì^Lõ/*ç'WÖˆøt1 ¡;*O®Õên-š E³ë?§)Â)õ/ qöMµÓûË%u˜`gãëp¶ %/l²¬WiXïtÁ ·ƒaï>šU;•Ná B9¥’9viˆ‡Ä¸Ç‡*ïNÔ òrÀ÷ñÝW#ÑA¦"sQòçNMvþB¥° „~o”òà9= -z}¿%mGufP7R꼒ܨõ¢„_ŸÅÕAôÒ¢¬ œáÉ#…T“^7°Š8ª0§®WËÚ0õN›Üµ›¬À§¾½©– Ó _û/%£ÌdaRÞ½ s<°'lƒˆIHÅ$ä7fé̳•Ûή¦rs5b°ÌE©h?f–Æb©‰ž´ ÅTC ¦S ±‹ïzÄý=m½4~L«X½ó2‹ÞOB»ã—ñhÀþ£Ço>Á÷ÞR¿-I•Û-l©µf¼¾‹BúRþGh¸Bñ´¤²á÷±ô;¾v¬½êñú2”U{Àöi‘w‹ùQ÷Zoó§ì¤,"LU³D£g8$ÃÙÚMw^<¥U ïéL'fÔÀDw% A-Õ%åú"I*Ôš ­VåslçféŒyÓ=‹u¶_m|.F§fp=½îkÓÛ½ÅfÉÌcB;w&\Ò}mò¡9”ý%pƒÛ M°Y‹^¨óÏxE+µ¡»<ŠO'³q»¹y´›P ÍE„L–_`OÚZº…ã|`1ÈgÞ/7×­Õ‡=3µèkÿ)¬D›ÚloîeÊ*!’ÓgQ=7÷8dù‚'].Y-XöW(:= °û:™Í”DHIù¼+æµÜö3›øƒiô?—à äœd`$Çd±ð³ç_$¼‘D_ù?|’A¹ÌßAÞë\ïÖˆb×ʸyïXÿ.]~h`¨•>jw:㥺6Ì‚’uá·Â!åÀ¨¯^oÙíì …ƒ2®—â:,òç=.›qlážò»Ÿ. 蜊£¿ê=0űFÔG¬í‹Ê[œ¸ÞÖPƒ¹Å3…'GâÔÉÄmä¿6ós¥#³ÆÁz(xVjé ØGƒÍ‡ñt¤!9§÷2&e¿·êŒüí’8eô¼\á.¤?Êø0¥:aMCD:L²ô°_é¿ÿÖA/Ï_Œ€}¨ ºû†æ»S;y»Fñ<#³)Ù0 ‡Ë[!Æ©'éf³týøÂ®ÍÕ¼~½/kÏgÏ’o[òØy˜þ—ùÀÿ €©Ýk]ÿÛ2ó_oºa‰endstream endobj 19 0 obj<>endobj 20 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 333 713 500 549 833 778 439 333 333 500 549 250 549 250 278 500 500 500 500 500 500 500 500 500 500 278 278 549 549 549 444 549 722 667 722 612 611 763 603 722 333 631 722 686 889 722 722 768 741 556 592 611 690 439 768 645 795 611 333 863 333 658 500 500 631 549 549 494 439 521 411 603 329 603 549 549 576 521 549 549 521 549 603 439 576 713 686 493 686 494 480 200 480 549 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 762 620 247 549 167 713 500 753 753 753 753 1042 987 603 987 603 400 549 411 549 549 713 494 460 549 549 549 549 1000 603 1000 658 823 686 795 987 768 768 823 768 768 713 713 713 713 713 713 713 768 713 790 790 890 823 549 250 713 603 603 1042 987 603 987 603 494 329 790 790 786 713 384 384 384 384 384 384 494 494 494 494 600 329 274 686 686 686 384 384 384 384 384 384 494 494 494 600]endobj 21 0 obj<>endobj 22 0 obj<>endobj 23 0 obj<>endobj 24 0 obj<>endobj 25 0 obj<>endobj 26 0 obj<>endobj 27 0 obj<>stream xÚíÜ]Ž« Àñš>øèXŠK+Kc)ÎHæ…I™ÜܛީÎQPÀ¯ÿyjRN­¢òQð~ƒp¯W_¨·?ÑüVâm„ú/¥)ªš‰œlª{åTUý?ISݤª˜ªf©Bêó-ë^Hµïi…Týž¦Š¨ý ­.¢ºAZUDí†yª™ÉË£Žòšj?Ê« ¨ÏQÞ½€êFyÕ2.æ;8;.ú÷>…ªµ}¤S›]©F:©Íú:üDõNKÕýj‹ŠŠŠŠŠŠŠŠŠ:© aBzǨ¨¨¨¨¨¨¨¨¨ÇS§ÇìϬ–êqlªªMÔv‹>]Š™PTTTTTTTTTTTTTTTTTTTÔ|ªŸyffâ#µªò«f/j»_uÝÌJ·õ‘_µ{QC>ÏëÇU^í•S]Ù–E]Å—Eõ:nôõ(jW©fÑåºVµ‹ªðZÕ-ªÂAª•ªæü ãߣy2M¨ÃÛ–Qí’Ó¤:éȹáÒĺ:³#€P;C.ëIÕÅ×àêôN+Ô§t£›ßÕ"›:¹ƒ‡tðêÕªºñ'S}$¦öR=Yº M*5.lH“ãJª—.Šc©]Ð åJªz/ÇRMP£ãJª¹ù¨:¨s}%µ«Î †µ±Î¡†üØ;êUW£žQ•Ç›P¬ö õЪœ¥EEEEEEEEEEEEͧš¸â*ªãŠ7›üVTTTTTTÔôªÐôAEåÊAEEEEEEEEEEBíižÿ­¡¢¢¢¢¢¢¢¢¢†«Û´ý5½+TTTTTÔkªÂP jzµ:¿*4pQQQQQQQQQQQ÷®~C†Ùýendstream endobj 28 0 obj<]/Filter/FlateDecode/Width 941/Height 341/BitsPerComponent 4/Length 5709 >>stream xÚíÝOhYžðŸlUÜÑŽÙÞ ™Ël$3£ã0½½§Ñ²f™Cj˜/1 sÉQ06º ;ILg˜…9F_}XØKCÏmºuÑE ÈÂB_èÂ’ÆÚ÷~ï½úcý‰¤ª’^•¾‰õϲª>zïý~¿úó,Ù[ÞN÷²Ë lªÌ°þõËÆ?ÿÐ%oq~ñ÷Ï¿ŠÿCÔ)½Ëõt±¾þÍÇ­É/þñu¼¢šbÖ±~yÏûØ››Û÷õrosÓ{xûó8Y·*i]~’ÖïÿCõ»¹íû£Väþ½’ê‘ÿõëØX?i¦uy‘Ö÷?UtoÒwtG5Û_~ÖT°*ÔɦAÙx`Áš(ëå¸ïv\áÞøG`µ›õ1¦æfŠ^ÊÖùw°ÚÌ*›êö¬‘  ™VkY/wES'Ä vý¬v²~/tæÌËâûð5Xmdª¹½ySòRDW°&ÃzYš¯ö;âÜÅ’Y_ŠÏð±w†ž÷yþÑʰþ>šªt½¾dÖ]™FÖëÿDU•®?^*ëKú¸yJk`õYßíEeÝ!úb™¬/¤èóX}Ö'Ô2][&+cX=Öo£wÁªþÙ¤?ôßñ‹ë5ù¥Ùü5°tJÎ]ñÀO)÷ŒÃ©Û¤d‰YO]º%~çöOÖ"³:ù–ß&ÍúYô.XuÃ7áï¼›¸/::ë§Î3þy&w =—ä@ûDÜ[×áT€õLýÍçÛuîýï¿J–õ’ÖãÙ£¼K’œ· ³¾$Ú~ÆÃë³Sñvó©Ðuo5Ÿ’PüXÈX?Í=;+}Ô|N7—Çz#YÖo)¦cÊ“zá¤Y¹En‹·ùwÄÍSÑR›¥O^äÔ°ë±îŠg_¬7Ÿ¯7—ÈúƒdYßäâ:¤tc‰¬ÍÑífIŒ¨/ï6é™|!££ÝÛ<îYK2¼Êéñ8£¬»kq±ÞYŸÄº‘xñpGt½äǽB·ßGûºVµ]c‰‰ç„ÿ’4«Ûñaeg¹¬",ÏZZ1VŠ•–Ǻ©5ìù™jˆ5¾ ÖVÖËxÒ•â\,•î*MWü|z[ ~zͯ@©±õŒYÝg™g}ky‰¬¥“YŽÃ‘pɰžæ8>udÔ”qÔ  ßV‘p†Y¿ÏF'ü„öšg»ëÍ'2o½«YÏhKä­ÏštKå­·Îv™õIîîYéX§Œ„—ÈúR'J§ª®¤X9™]WÅ&u/Ǭ§ºÊ”iÖµ,°6]"ç–øù”rw=Ö³ß?n•d%ØùDÅQOI´ãŒ³ÆWŽX&kÊzIž5¾â!Xmb­ÔV‹XwãÚ1—«E¬å¸v£oƒÕ"VÑ{ÆrÐËúXmb݉çµ=°ZÅZ)Çq@éV¬v±Šn8òáßë°ÚÆZ‰~²F¬ö±V¢žZU«¬•h'BVÀj'«t÷´å\¬¶²òõæºÈÀv¬ö²ÊÞtŽK‚ø}7X­d­T6g¿€Ïf°$V+YeP;Óå¶Báóü¬«wÍÃŲØé.Žw%'šŸ5ÅW(]O«gö¡KYËÏÍZ_½ Ï.žÕŒš/<;jž›5Ñ%á 8H«l”›ã¿¡›÷ÇìÅ«í¬ìto³ÍmnïMØ9Ö4°Î¼Ï¬`+XÁ V°‚¬`+XÁ V°‚¬`+XÁ V°‚¬`+XÁ Öl²–Fâ_¦­ ש«õ¬|°ËÐá»ÖT³–ESÝ>ÕŠö*å-°¦–µ´Î¶WG#Œ­©fU C½ð‡X_]þÖå³–U÷{oË\?€Êòj0r¸½³&ÏçØ¦ÑW{‰ÿðw°ÆÇzg=pÅ;yµ>Ûİr8'kšOÖ¸ž&V/ܘ»â¢ÉÞ!î„ÅS¢o.ÍÎ:aN«*ÎÁY,k™ÔËW]Ò¬²‡.ÏÎú« ¬öÓºTSÉʽqic%ÃÊÑŒ!Óë¯&|ˆêQ#­K=¬kê¿ëÚXÖ9?XÄj"a°f‰U¥5°f‰uÇ”#¸Ù^[9©k Y+¤Š‡~$d¥±‘0Xíf½Ã¥þu?o °ÊÇJ`M#+—•dO,«LkWXwÇV™Àj9«¼êè–MÙkelM¬–³~h±Žõ„È9›Ymì×™qûØ%òߟøyî‹ÄƒV_oÛÂéD+†Y%¢+è—SÞc%°^9 ©RÊYÆêЦZ Ðg•7ªyy`0åÜ€™S>Ö+áÔš]¬'Ü…b˜õ˜u)Zwôëªy2¬êXG^îÛVÆ“zaVáfxu£>bÒ/kÄã„fUïpüh kcßDLîXSÃêÅDÃpNܯæW½Vñ¢<2˜¬gmŒd­:B’xC°£†Y25}¬&Á‘GÔ<ò‡`n½+àègÊ[©eåøyõÑïʼfµË4åñÁövÂzy`òV¦ p‚5 !ÓñáhV‘ÖêˆIwÌ`õŽPÓ••'Ì•³DVN[¤Þ+þç £l¹`5¬ro\N3ºgaÞš7Q^¡ëïÇQ°ü¬†U4Ò{ÄÇ®•Öìc­³žh³ªŠ(þ3¬n ÊTÝÐòj³ªS4˜UÀÄG"Þ±µA\ê?07k]f7ª1â°z¬kêHÄIÓm/“µ®GMNSeTdXM2ãwÈè„M'|‡·ÎZ™&ÌóºÔÝèLÑ¡ªnx‘ð‰WŽð»b°†YyÈ-YqÐË\¬kþœV9°f†Uñº³7怰¦’•-K[cOÔkJóÖu™·Ê«„”Ñ g‡µäW™ÖÀš¥š0í?Ž ¬8è¬`+XÁ V°‚¬`+XÁ V°‚uÙ¬¸æa&YS|…Òu°Ž[ê¸ðlY“]¬üT`¸¼§/VõrÒ!¢³²~má|G¿[AÖmÅÅZ¦ 7àß&]w<»¬nŒ¬6vÂoéæ*²Ö×âb½“³‘õ³I“?d—õm..Ö’ÛOdO«Èú.®ÁµLÿ`#«KÎ*²ÜõxXw­ „D´’¬oâIqvèši+Ù˜¸&Ïúžb]Kô3Yß Öß­"«h®[qŒ¬VL"m%×°^ºÑ»á+»:N[ÉÆÄu¬ƒo£wÃ%ú±•ª"m%û‘E°ŠuÏEU½n§*ïôÛXQV±ò¹hªë–ªä5ÝUe½ÜpMˆŽ«%Ê_ØÊÊûº­úDÿ¥®pÁŸùm²¬ÒuÞx¸L«¾gV«¢¹ßGŸ«yjV„róuÀV]i«e‰ë›ëÄYÿI®g8n‘W~ù¹½ªœ¶Z–¸¾ °ÞLžuð^„¹™zâ²hªÎ«êmhUâú]€õáX—²Áæ¦n±÷ä…~~a³*§­–%®ÿ`}µVÑ`ùÚ¬›SÅ;›|Ñ9«›êÀ«jÕà`½X «ý€¬2µU¥­¶%®ÖÁ¢Xƒïÿ¨¶Enûþ(ÒûÜ÷ŠMõO_ì_Þ|s-þI ù²ŠåËc×üåÍÍíûz¹·¹iu>¤ay¯?¯¥‰ëõŲŠåucÜù û׃”,ïôG¶4q½±pV¹üõËÆþ~༧üþ~ãó¯)Zþ¦?¹¥‰ëÍ¥°¢·‹A*—·Io¿h‰ëÃ%³¦uùLo?K×W`¶Z›¸^€5BÚjmâ:«¥0Jâšk¤´ÕÒÄõ:X#¥­–&®7À)mµ4q½ V[ÿ(‰ëC°FJ[-M\_5RÚjiâzÖHi«¥‰ë¬ÑÒV+×Öj^%T]¢`̓u¬Â´SALMÑcq¿Ö*è›QªLÜ ‹6«ªˆâ?y2±ÊÖ¸Y{2‚íc*è›QJýÄ¥þs#Ð>åÇcC&°ÆÈ*ïtœvÏwd»-ôûn-kÝì~«êtÕc­z™X“Jp >«Ètú]Gè2u¿Uî,d…FSwB9¬q³º}ÅZ䆻¤ƒ^Àw'¬ÊÌ*ÆÖÃ6X³ÆÚ?—õ'°f‚Õ»/–Þ!9Ö²Òp .kÓèJÎÌ_J?kÛÛ@½¶Ü v³ÒŒ¬]ÀWÕ­ù!Sqú5Z+µÙX]ÑTϧY2ÃÚöòV™Üˆ»]ÇjÖ¾[œ‰µËïìVŒUW™j&&*ÎÉZßW݈µ3k‡A;Îj±¶üšpQ DsׄÈêW±Å½žìa]‹H?ÅñA‹ÅUѬ÷˜Ÿ©É_réqÏ•ßcïV¿§~ÝérD&£é·EÇÙÿðâ¦ö —I¬'ñuµ~ Š-¿™¢%¶¸Â"^ žêÉ·S ®ycóKò‡¬wnñ¯;*$+¨{æ¦a±Æ29¡*v§ÈU´«sÎÕôSüX;Ô›ÊgˆI€µE{öoÉ—ó¯Kk¾çÒôõq°Æ‘à¯T±ecí9ª“yÊ•}sxt¹8ª~© ¾æVßQ/$ÙpÌØ¥éëã+ÀJ'äTy?͵#ç9j_ºxJî•;véEÌ[ƒUì‚l˜Ý¢a5OLDï³¶™ßäq¸¥úhu‹TEÓ×ÇW`låÔŸ¤Ÿ<|”ŽÔŪvØñî¹°ìsåÎŽŠƒt;&ó”’ ±’úo$kïð|V•¼O]·$N”5/Üòòèˆz^4Ì y6αfÍ >>·ª…U¸!V™’±Š¶§a2õ'²ŠÀé0ÌêN__Ö#s KýˆqøÉ*›nãÄ1‡¿DHpUìŽ#C“½’×8©­Ãõ£K“X»2“b¶>¾ ¬êPa=‰A•Ìá‡ê)>P-2«_ÅîpÔ«;\ɪßÇ­ià–)GL[õhªY»êÞÔõñÕbQ)ÌëFTVÑüÂUlW‡G*dRO M ‹*.Œf-C&y«GÓ×ÇWŠU^RÀM€µ®bËZ ç­âAS–õ£×!TÞ:ŠÕ‘•%Ã*߬EÓ×ÇWŠÕÍÌøXõ>¶@[M™È<%>]1¸c® ©?fl•ñ{ѰªLE°†Yõ ê^[OòY9›ô«ØòŸŒ…Ã5a•éå\×vuMxT$Üß ñ.šU¼Ùcw†šðJ±ªIÖø«Vyþò1-à —ÅE³Z¬G2a¥“·êK äçÏ[gXzN¬IŒ­¼{$XeROE©2Ͳ­ `M‚UxÉópN¼š°T#Ô„§_\ª5Öñ;h6>0½d¬‹ëƒW’õÁAøÐˆãG ™Àš$k5/WN“§ÌU°¦œµ~5BÒçÑ5Ýc«KáSZOF\¥¬i ™pXÁ V°‚¬`+XÁ ÖÕb=Ä¥,G³.øŸ.ÅøV\xvkš·Ìàx?½ËÃ$Yÿ7ÉOîÒЉ&œøÞ¾:Èú27kš?Õ[°‚¬`+XÁ V°‚¬`+XÁ V°‚¬`+XÁ V°‚¬`+XÁ V°‚¬`+XÁ V°‚¬dýS#½Ë«$7à7I~òêðu<â\ê—8gÌRMõ98äàŒ¹‘K=Åç·Žg­¥vÃtÁ V°‚¬`+XÁ V°‚¬`+X­d=':œòÕ<Þ„Žî”P…´Š™aåúl{Êõ›z½cb5“Å…³ÒÇÿŸUiæT²ÆJ–²ÊغòºqŸAµSÕfyÖÝÞÌS¨d‰•»ºš¬<ö•7î3ô̬­ü‹…¾™ÇuuYÍÆ°ŽÕÌŒ>Õg`~ýPï=k/œ5֎ͬ½¶«§F–S{vyÖV5ɧÓ?ÎÍlæêUü¦znÝó6¿²|eàwÔt šË÷xŒ§UóŠ~€Õ™êê‚6°ê9O»zö[ž ÕÛzrkͲÞq±½!VHɹs ÌÚR‘Oîê…F2ZÒp× ³†^éß23ýª˜QOÉÛŽÑF±Æw E¢°·’j‚bÁ×rBÛ¤0ÛzÇ2‘óXƒu r¤ÕÓ£› ´%pÁ !rfmû½Šš;ðJÿÏ£-'ä®É¯¸'§kv§šF;¬çNß[I¹vµN‘«¿õ:4ÛzÇÄÚSs-Ë6ØR^rOb¦»¯ñ(ª¹›.†Y¹õRð•þ­NMͳîð›»5þmõ7bb½¹äGÎ-­V’×N°ÊÆØzb“Í´Þq•#z‡jô6ŽÇš¬[ÔL}- ¢æ ±ÊŽ¥|eøw„§žX[~ùcºI´§ºï¿\Ø‘·¶¸1Š¥Sà9äC[o¦õޝxØ“ó²ÊÑÖ]²l`ú»x…Õ-šy´=V¾ üÎù¡K>«z¡îö㈄ç^âꄹÇU+I¦“©õ¯l½™Ö;Κ°Ðje+„É™ÀÚ*šÒ¡™Îk“Xeðå†XÅ÷Xýl°ÊfªWÒ°Ê|~˜uêõއUÕ ¥cAçç®÷ý^7ÌÚqLéPþnq«ë¨!6ĪþFFXý•Ô¬N78fY§[ïxXÕlç²aqjõg#efA¿ÂÚ%óDÏ”#&­zTѬ®º÷çÅ™4³š¡³­û.™Ñ…¶ÞLëSk5]Id©I ¬<2dê‘÷ÁtñPGÂíѬ¡Iþ–7ÄfƒUo¢– Ë Þz3­w\å§­Z×C¤•øl?ó ³öý}6Yê眻 òÖQ¬5ñ&kÇi÷¨¨ÿF6XeMܬ¤ÌNÛ–\Ùz3­wlåR#¹Kæžø`ªÊä ³ºþ[ºzcK¥o#ÇVñ”K†5Pm¡,„LzËé•ä€)†¶ÞLëW$|HªTÙr”·^¯&|•µCÁ¼HÕ8UMx«X¡šú ó;tÉ9Ÿº&œ V¹"z%eåWÕm¸Y·Þ,ëg‚ãOÖ,ö³.i™‘µUkY-;œ ¬q°vã(€€Õ>ÖX³Ø ÷Á V°‚¬`+XÁ V°‚¬`+XÁ V°®ëa¶/e9?kz/ey(X3~áÙùYÓ¼eþ òÝHendstream endobj 29 0 obj<>stream xÚíÝM²œ8`aée/&ÌaN`úH³œ•QßLGÑ´Ô‚HI€þRRªž_{¦Ãµp®úª •‰Éq¼ð‚ã+Λ;•fîÕ¥n„³‚‚±®¸WضáJ±ðµU„ØDSñO1¶’T‚òÂOå[âaDÔž¡¬Í%s•ÆÚ±@â• _-%Qµ6Š’UBó(m“††v# åÝ1~5¥KŠÕ”,ªµ¢xQÍeUܬxÀºYцu³¢êf1¶U…©”$ÌÂ~ƒ¶3ƒ†ˆm‡ÈÁÃô`áz0‚숔h¨U äw ‡0"w“8ˆÐBDè¡"ó)ÌDè¡=t„Ð:Bèƒ=!|Ž,ÐÂ'ô@Ï ôÐø'ôÐø'ôÐø'ë¡'ðOƒAOàŸÐCWàïÐCWàsÅIjK ] åÀoX`—Xíøºh´Á Ô\ Þ S¬Ti´Å‘= ͵rfˆ•(ìxÞ`€¿·;×-R•an¾ê¸šÊGëHAq“¦\BµWÆáGÖÌ€mòX4N¡R匿r •¬NœJJ°Ú¬U$objªÎãBÅ+›oبÆLWÀê“q'ä<Õùßâ•®ÏàÃpÔzTg¨³WªŒ(Z“W²Œ0¸Q%¢÷!K¹qîbðŠ×2#W ZÁÓU…Ó?Ñ×åäN¼ Úk»I¯Q…³]AÛ•Ou8uö6sC¡â,ëŸ=ñ5ÅÀ÷ƒkHst<•`Y?_Sæèx+8ÕPW£ks T&æÙ‘Èü\j^++AÙàÊdEv„EÕt«Á(ÍÜ@aÝ(„ƒªkƒ½²±Yó1Póýu£Q;ËF)ÅÍÞê àŽ 3%ìhÊô§&SÐët<*·{Ô£F¢‚ú0¶ µv)§½R?Cm=Jþ u|¼ïRÃßLqÊÜëg©}~Eq3žg‡Ê†ÅMèØ&Lÿa»£s8æ¦r¦wšuîhn‚€+mǹZ7h?Õ*;•3y;`j>ÜWÂö½q'ª¬wÎS ‘2@½o«ñpùS±H™©œ}SÃá†=¨²ŸÿÚP[¨ÌTng£b_ éæÏÕ;Õvþ{+7LòêÜ`DGâS §ÖP™©œ9 ²·\i«TAÙH¾íuµ„j²ê<Æ}j¨9Tf*gòJzµÞj·J”¤¨)Tv*g¦Ç õ[¨>ßê€\…ÛõÛ*3•³³nÐUõ{¨ÞµÅJÚŒú}ˆÔVVÊ*—‡ÿ`²À’’ƒßS¾FŠWü^ù•}Õ9•ó¹7JÕ³§Ø`‰”¨©Ñ÷6 ûª9SG¢l϶ðPÉG©\MÁò¯¡š*jöÑXÄ—@™  ˜ jñ‘_d¨tMM¼í·z ÕPVæèpîå67lò=jwêЙ²$ÓÛ\êS¨˜Sª¨\ö.šÊNåÆP ]JÖÕªãR²¨”S)3•^Q®?l¨#Râ:ùÙ­l?ßT‰’bNéP™ÑÃ~uæó÷T^æœy¿Òë+Ê~©_êcÔôÿ£þôoþIVÊ{U\L sêËmÆkÑ %ì?ÊvPªÌÈAÙ£ùµ(Ó£Ê ƒíß×ødiÊ ÆÓ1óI»RÕlºX6ÛEšRnu#íÏL‘šÍ\SòRæŒh2 1üÕ.Ò”i&£ÎMs‹Ç9Œ<ÜÉꊚÍÈÜ„}s‹¡š*Jy¥RÅ ê<ö çš ·ø#Ô¨ñYÃó£r8×Í-êóXQö|»S÷ÿÜ Jjrr¯¿Š’Ôà²Ñüõ` +;ÖìéZ ÔÛ#®¤íìùZtÊî oÃ^TæÌûo)åf`OK»!Q™«U.e>© WÚ0ákÑ«‰•¸ä²Ÿ¸ÅPé‚r§½ÜáIJºšwe®æ‚ÚmäÌh÷^|Zyâÿ))ÛOîo/"Uÿ.*;ŸqÊ.ÒÔ3¿‰J{¥SµÕîÕ+ñ¯[%cì³³¸Õµª–Ô|Üç&®ÅªHj-ªÝ«d Ï)QAM^M=J{¥‰êL u]hr-’[ù­Üâó³Q®”¿¨åZ ”ª©Ñ«‘¦´¿5}’ˆÉjJ¯hý%5t)NVáµúœÜݼ_Ñ/ ï\äîæ%ÝÇ!©]@tÏYí¨Zz”êV[Ò¨š{”¦ªèÞ%MÝ™#µS•DÕHTC—ŠîêÎüšâá=tÀˆ;X¤FÜUØ+*¹£Óv•×Ôß_)hIÿšÒ5Ó”»ÛTÒÒW½¤d|­¢¥oI ¤ä½î)Ö4Å Šõ¨–ˆÉÖ4‰Ò-ÅÜ9¤›ž÷ô~sÒ Ö:½#þ5Å))¥Ò;ýIw"ËT Jrˆ´‚ékž*Ù¥–Lm„„º•"$dµ#(wÄï™Ò„fÖYM Êþ*S;áÖq•ÕúB™Õ¡TKy5Bež×K!T@ª¬ðfƒRÑE4lGjδ+ihDÉfƒI¤*Žj†^ÔÕÖ|PíG7CUÚ[Å> ¡¦FàƒŠIÐ*À£°êLÍJ5­éÔª¥#ÐúQ¼D¼ÂU£F4ÕTͨW£ö‘Âë}5ê, ¼¶X£¦o«¹Œ¨fZ½V•.ÔgV«~¤ÒXa5¸ÖJ0bÅkU²ÕÇÔPÞM’Êx¢R&LeFk¦ÍÅÖJ*þ©rU7È#…Ö‚‹WQ—U\wn.Ä=­˜2,­`Zk1V Á¬d¬´‰ý•MXxÃ-‹Ã”Ö«±zˆ~Y©þá½ÝÝÞR­Åë×ÒïZE*ÙÕÝIêH©Ph^7•¢ò­œ òz°‚ æLI‚Z2E©eºfj§7WgÖ#S½¹újÏbÕŒ9ð}5uDiràCµ“ßU—ØwA=•“ñúØ‚ø®ÚÎ ª5„‘Ú©!ì©–Ô8ÈA,U\´,ìªL¾”&£§âúQP1‰´`tT­_‹JÓ‚‘( eFGåÿ©¢$¥;žh°U6‹ü¤†ú32$e³ÈO Øª (›E}²ÆÜPª™„õ‰!í§®ðfÜ©OBY›ŠðXì /¼ATµwƒ)¨õ3EU¶6ÔÞˆEáé?¢’îeµ×·ªôT#Ù8s­“;èɰÖ3žð2P?¯V8ճ¥su/>]ë¿Ì¥¢Ÿendstream endobj 30 0 obj<]/Filter/FlateDecode/Width 431/Height 511/BitsPerComponent 4/Length 5955 >>stream xÚí_{£,‡Õ˜sÛgsnÓÍyv¯Í¹»­ç£â÷ÿ*oó§ (ÈÌŠ}ËÁs=íBÃ-ÃoLßÉý7—Sï¿÷ûýËÓ¹|üÏþÏûÚ¹ÄÛþ©Htåéùõ}\â÷‹I‚ÛÿY—ømcú,ϯõZ¸ðP7´?kàz{IÈ%Ýבsý+^y>EÌõ›KåÓ!š±ò;fž¹ÞÊĽüWGÆÕ½$^Jú×ïÄ[ÉNÑp‰2ñY^#árÖ ¿Cæ‰K¼$ÞKúsq®®HB”ÿæú—*Y½$ׯ$XIO‹qyÖAO`7ÖGù¹—(’$F0ˆRÕòcv®Y°X`°,¬‹QK_<`XIr˜‰+¸ßrsÐl®™±>Àê9¸ŽÉì%›ëo²@Ùçj“EÊÀ\]± A!~…gi¬A Ú+Ñ ê£suɢ劫X– 9Å`™ãÅ`ž‹,öD.±±¹Ø¡-]œI¶árqC zznÇZ2ÔL.æp±Ò©9C–3¹X<7’1d)« £í‡ìÀâ*æ²Á»7+¼H=øßÕpI{ç$œ\ålS‹Ÿy•Ó¹º°È`)‹,ò©Ÿ+’¥³rLs-„EÛP¹šŒcŠ5‘«\ ‹¶£qu^<$¬praàoáõ£÷ZZ'Co‘¼g,Òí«…«ñÎ8•£Ã‡ƒ'ÕHkÿ\„Ôx.᤹–Žoˆf.Xtr]Ë_¶!‚—JÖ*%×Á‡Ì™\´É°ÃrUK9dž(gX.‚nú€¥ä"¸›a8+¤hâÇuŒÂ =Éq\h!M:RW»°Gf(Ø Ã…Wü^p¶ÅpqˆEë3WËÌ–°ÚÎUÅ"”;عŠH4žÔŸÜÊÕÆ5\Èˬ\UdÃ…ôaµ«ˆl¸Ozgáê¢qÉ´.å®&ºáÂE‰™…«Œlv¡¥¬žänÎ&¹Ú‡ ·”Or!U> eEÙ$WQdHTŽ).¬ÊÏŒ…š§ .¤Êçssõ$®ÊŸfçBâf‚+‚½5¶!ff®6F‘G Zmä‚Eí€F®2RÕÀ™ÒÖÄ%bU ÜÔߘ¸ZZh¨z²ÇOcÿü=Üži£¨r‹õóG|Ç€DíP\;#—Pn5•ÐJt­µ«¤Å“\#×ícdÃ8Ÿ À™^9Ž+1s¤^>Ü,Ñ–œéu@rŒ\ô|k†˜Y’빀輦¹r#×Õö²Ç dž”>Ós•Dç5Í•™¹Z!(«ô3FpxÀr}—†ë¡í-Þ 1J_ë¸:j eáÚ¹"XQöJìCúÚ+ÇsmÌ\Õç#*(‹ï+ˆ@^k+¡¼…+1sµ·¿ÕQÌ1QrWA4C+×ÁÈuý¬íõWø-;«°m4\‚j†V®ÜÌu¼•ã3T§í¶TÃÕRÍÐÊ•š¹®öN\´HA²W®±\›{m-×Õ8ž¨;ÇȨ^9ë±\ÛâSž´\’HQV©%Ξ€*;Špš‚݆ÙÊ\ˆ=›Á$v²¢f®ÎÀÕÜx:º!6‚î &±ÿ0Üÿs?ú´íi®’#ÊѰ|‘ÄUi¹Ä½G²! „]!:4šD.†\­–«¹Wnè±/Bffß~¥Í/Y3G~jÈu¼kŒ ç[x®Žã•‘>©ðš¸Bå’þbIŽ}K{€øèp‡ñ%Û1W£á’SQ*²!íðrxÂhS=æê4\²Þ´äE๎,ÙÙĦsÝlUá*ä K^„‰÷é"q•,ÙNÌûí=ͺXæR3¢Ž2ž*6(uN³!sUŠa7Rÿ-‡ÆÅßã½&?{-—qŠåuR5õší¤»¼ø4}žá )•«aÊág¹NÖø¸ìÑ|Ú¯ªVæ³Ur•¼(*z®‚EÅÎ%\ä0b®ÎQcåj¹Ñaä\ÍW“ÃWÅŽãæ:ò£Ã¨¹Ê¯&ó7®â«Éዳ5¿.ñådþÊÕ~9™Çr­BæåE àÜrüѼ¸~[ÉóIâªØ2/×y>é~›<½*Û~ÝÞÑu>m´mkdØdœ[> ¸û6ÃÉYk¹v®žKžI?î\%Û}éñ ª3èâ†ÃµÑruúóå‚í¾ô3t1áp%Z®RîÀß´ÑÛ«)7uÐŇë ájÆ*(·œa¹6†ðå ãÊ9\¹†«?FÏ\Wƒ5åÎ º˜q¸²1×§h¤OÅÝîå–s4×Aϕ긆×ùP\£;€w9?û“·âf68®í$×åÿÞÊDéÁVu,µŽk§uEj<Šh$;™ÏÃ6@…;;×íEø›Ñ©ÃßD¹ wqÃá5jpû8@mb\RZŠ:ÄÜžaר‘zètËãTuÂp=Òˆ4Yò[m®a£R Ì/49ô„˳Ó\ÂÀU™¹r×°Ñ`¦\Ì2TÕc¸?h²ÿõ\)‡kÐhxñTà¹Ò\šë|v.M£vè`÷å0áaæÎ5Ö Íu>;—é`®[/'~¸„ë¨×yÍu>׸Q¥u°€ £òÞE‹{έÚÅñu>׸Q©uD(®-Š«Õû¯ÖGi®ó!¸ÆŒ\­'®Jo¼=ÂAÇ×ù\ãF…Ö¡¸v.‘Œyr¢¹Î‡á52r5ü0JêÃí+èu¥æ:†kÔH®þøDשw\í´]]çÃp¹€Fõú1쪎ºxm×°‘WæÊu¿MkC‡×ùP\ÃFF®Ê#×I?е¾‹Ãë|(®a##בözƒ3lïº8¼Î‡â6*iªw®ÒWZ¸¤PUéâà:ŽkЈϕ!¹ÒƒôÛ›_¾m{ìô]\çÃq •’b+\….)ÿPŽ7®Û¹¾‹ƒë|8®A£QÕ`¹ò·Néu\Òû¡4]¼ˆ6•KmtFDÕ+ ËÕNq©×ù\š;€rX®­WgŠçïAeIäR5éR\¹D`.a¸Å¡¹Î‡äRµÉ –kçÄÕOr‡Ki$¡yWÇáRê+o\öÜÃC@.å:–KmTi’ñ?¸Úe¹*—Ò¨yœ*?6yçj9\J#!÷²½Ç.ËJ\‚Ã¥6*ç_ÿW’K¾Î‡æR5£óʸ—Úh –.—å2Š«˜æê8\j#ueœ£à’®óá¹”««¹Næ.V.µ‘šF.ëöFêÈU&òíVðS¹þÊ‹Åf®û› ]®a£ÒV„®xÊÛ%ÿð¿Çûç­\kÉòA°o³­.·÷ÊU~s}s­kóE¹òurß\ß\ß\ß\ß\8®í7×7Wx®Äëc僾WJ©»,׿Ë;ÌÒWLw)uæz^_S_6$½aNSW ?©J4¥Œ½sæ*Géjž¾|<5®Ëà:©›¡¸þŽW4ê˼ºÇaÇ_Ì*+×A} a¸„æDI}¡asß⨛GV®Ý\ [Z—ò¤o ê2¸¶½25Ãpº£2çA¡¤É ë2¸rÕR‚puŸOOr]ùÕµÓzm]W¦|t®æ~P(~I*Ià#»B[—ÏՆ䪤ëãûH.ë‘|n¨«Ûæ×ªz¼Ó„ä*%YõÐ@é…̆º4®ô~|ú1‰³`\…¼ W”þa<õD]Wv•Ë%žWþjqŸ`­š¤­«KâÚÜÇÇ“Éçáj?ÝS`@MÒÖÕ%qåò£ÛºqYÒïÿÜ=}”$VµtGÊ\—Äu¾ÿuL» \™éÎã*Lé8·3åN‚)&Rwð\ÇÛß;ÿåS0®k$x2Ä™2ŒuI\ÕM†Î–^ãºu>ŸôÖ%“âSÎuI\ðÈ~Mû`\÷}ÔÛë?’/6×Õr;/Ím¾žÝW8.)dÐÛêÓÛÜ}±¹.…«½Àñü‡Ý¸¦ÎõäzÊ{‰›q­±.…«»ýxvËŽ\Sç°•ö‡²8®­u)\"¹¿};Íåt¾,Œ™¥å(«Å\—ÀÕßóå·á¸Y´i=ÉQ—ÂuuÌ·’KzÑ–J¡û’9S] ×Õ1·’ëó"ì(—J—l:YÇuuÌí¥¾—5ïë_¡›5¥ö¡èëâýòÅ Öçÿ¦.ùlo/ãEMcXäè긚‹^Ürx®Go7ƒPꄪKàº:æ‹[žƒëS2㤙ªKàº:æ‹[vä¾[´ƒ©º.ñéŶsq=¯í\ƒº®«c¾Šä$—K>öùU2Õ¹¦êR¸>L0ëû§A¸T÷ ÖÍNS] ׇd¤íÕ1:rÕ¸ýC ×T] ×y¤›äþ¢º`\™b[é$—©.… ®—aS—˽›RùçrRç§êR¸šëÍšÌë0½üÚÉë‘kª.…«}8õ`\<žÇÁÇ :;U—ÂÕ=V“\.÷¯mÓ?C­ƒ‘kª®%žWÞ¶%ÔSA®õöqi^,NÕ¥pIï… ÇUM¬Õ†\uI\%ŽËé^v7QuÈ5Q—ÁU»smqé6ÃЫ˜ë’¸ªÑopuf…quÜý(•îOe’Ëéýê^Ì~’Ë\—Äez?«_.©³¯½…ËX—ÄÕÞ}ú4—ÓFöÙ½ƃ—ºNÅñ½=·Bùz½y¾ŠÏñ=KÑÇ÷b}sÍÏeÝò:¹ªÿ[®z•\ö ŽÓ*¹\Ìß\ós9-,W͵]%—ø¿åÊWÉe_€m¾(W¶N®â ¾ŽßÇñ͵×ñ ¾¸ïñ9¬’ ¾(WóDÇï5[ªØ^öºsüº¥Š­ËÜ÷FH5~¸¢ ¤lRW;~/çR¥Bq« 8l¡ö{oc 8J›}!¿§8¶¶Â¦È-àHP\°¶€CXý-òûÍ# 8Z×ê¾¾±`¢­è3X§ `Ì5:Ç|´Ê`ä%:VZÝ`ÜAt¬°Ž øcs`ö°Pö™ëìj(}‰leÙÚÕPþ 2ÖØ; ¨™«ìÆ(ƒlv´G}€Š##s`¥]ä'œq =¢¯€stQ }‡°-ÀlTBß"´p •Ð"H\Õ¨„¾BtC“ЗÓäTŒ)¢/ìîë“K¬HèFº¡Ç ýv5rx¸Êõbƒ™1€ ¹"Ä £pÐc…>Y‹¦2W»ADôh¡$BìPôh¡ÏW"‡[™ !ô‘ ì z´ÐG"G”Z=cޱú’¸š•DRV!¸%@ú|²‘©\¡ÏV!¹Ê…غIW!ÛW¹á(p*øEÄ!ð†…p´H/ „1G…ì#ôAŒ`3Ûª›!B#ðÌØí è)‚¸zF\Õ &ú.(öC"éÑw­¡' ÇÒ ýŽèI±ð³?ú†«Œ~‚áï€d¼KO°#z¢@OŽe'>r’sXx‚µø¥bå…'áôH*ºpˆH8‡ž( N0Ê!ÐÆyÑ5å ˆ —Ü䨢Ž.¹ÉAÙjâÄ\Pé;Ê$âH/¨ô¤i 6]NéKJ×€ª¤‹í¶ ’¦uj.fˆ[Ú¹Žñ"mûzúÛEj†r,d—¾!64Cò g!C<Òž7ЭxCÄÐÈKœe ±!>nèl±$Nè9,Ñ ••pÌü‹•†ú°¡çL°ÙWÍ%UÍ gM°™“,[²÷ž5ÁfvaynkÈgVAï°¦èÌÊÁˆZ³Üž;æ(é38Û#3Ç-À€7Ig•ú#cÂóñÌ(õ‚ó˜ûwæ +Žãî4oÀXÓ¸²:Û€áz³Ep!•~¦+XÏøjžc† ÀŸ©ó XÁ ë€íç°†éL/A³È)Ñ㸎X°CõArµ‘ ˜(¸A8ôN†8øª¥eB Ý*z7C ºp|«Þ̓j=öéîÐ\xC (­ƒÍ@ïjˆi½°ÆkÅ Ü6¤%þMøfhäÉÒ–Ø9IôΆHK' Γ6wF[¡~g œgmïÜ9Z 8ûú SL޲>ž˜ÿËÑõ‘‚‡‰ëß‹ý#|pOåjHæS;(š•“¹D²˜(Ü'ø1rŸ`¢ôð¡àÉ<T¤y½cpÑ>á£ü7³N„:àawA² wUüåÇDÀÇzÕ# Ë€—ýÉœæÄ2KøŠÒî`?gRÂéÃ`ð¨M®êAÆš¸þ<ÿÃ:x¶ØÔÊÙ\}Á~Ó9ªü¦̉ÏÕ°¸’ôu°?ظ˜–$ÏuàÁš^Y¹ª„[ð_:ÿV²¦qïÂ%~yFYc÷Âûë'.‡;ϳW›9¾1©,Ë;—Ë€]ÑÞÍûwÁþ»;G.ê2Lk¯ï£qoûÂåqõ®\]â§<=ï÷ûŸïåm¿)ÿÚΙËÇ€y/¶üG —ˆkçËM.W|vðÂÝ€Ù·¾p\bmÃ…ä"œÚÌQzH®¾ˆ‰ëä«]×p¡¹X;4¾öÉÕEõë}rE£õ¸ã <—(Ö¢ñ4.î΢AãŠB:°ç½.±+¤qE`‰è£C×â–ˆÏ: qu+±B*×Âñ/á›Èµ¨%Rr_¨\KzgÊñ•kÁÀž”4GæZlŠÑÒ^è\ M1bbƒk™)F<Ûep-2ŨY.JzàšÁæš];è©r<®™µƒ‘Èäe¼RèÂ5§(²R‡¹\óñ2ÉØ\Œ´ŸY—3×L‹1æ®9üsʽHáÂÞùYšN\¡Á’Oݸª¢K²°#WHí”íÊÌ-ß™‹œChaâŸ+IJÅ1]Ý—Yt¿7á…«~mñÕ½G~¸>lÑße§>®^¼Ä3X>¹< Ùó©«¿e𧯾øäâ§Vߨ^ýõÄ/—Cz5"u{I..™_ª\²çŸ¾û‚‹˜Ÿî¼ç" ×GyÇeǧÏ‚||0®Ë¨Y òiÿê³Cr]†í÷þI?N¯ï!?74×uàÎ7ö/Oçò¼ß¿¾¿ÿÈY¸(ð?­—Îendstream endobj 31 0 obj<>endobj 32 0 obj<>endobj 33 0 obj<
    >endobj 34 0 obj<>endobj 35 0 obj[32 0 R 34 0 R]endobj 36 0 obj<>endobj 37 0 obj<>endobj 38 0 obj<>endobj 39 0 obj<>endobj 40 0 obj<>endobj 41 0 obj<>endobj 42 0 obj<>endobj 43 0 obj<>endobj 44 0 obj<>endobj 45 0 obj<>endobj 46 0 obj<>endobj 47 0 obj<>endobj 48 0 obj<>endobj 49 0 obj[36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R]endobj 50 0 obj<
    >endobj 51 0 obj<>endobj 52 0 obj<
    >endobj 53 0 obj<>endobj 54 0 obj<
    >endobj 55 0 obj<>endobj 56 0 obj<
    >endobj 57 0 obj<>endobj 58 0 obj<
    >endobj 59 0 obj<>endobj 60 0 obj[51 0 R 53 0 R 55 0 R 57 0 R 59 0 R]endobj 61 0 obj<>endobj 62 0 obj<>endobj 63 0 obj<>endobj 64 0 obj<>endobj 65 0 obj<>endobj 66 0 obj<>endobj 67 0 obj<>endobj 68 0 obj<>endobj 69 0 obj<>endobj 70 0 obj<>endobj 71 0 obj<>endobj 72 0 obj<>endobj 73 0 obj[62 0 R 64 0 R 66 0 R 68 0 R 70 0 R 72 0 R]endobj 74 0 obj<>endobj 75 0 obj<>endobj 76 0 obj<>endobj 77 0 obj<>endobj 78 0 obj<>endobj 79 0 obj<>endobj 80 0 obj<>endobj 81 0 obj<>endobj 82 0 obj<>endobj 83 0 obj<>endobj 84 0 obj<>endobj 85 0 obj<>endobj 86 0 obj<>endobj 87 0 obj<>endobj 88 0 obj<>endobj 89 0 obj<>endobj 90 0 obj<>endobj 91 0 obj<>endobj 92 0 obj<>/XObject<>>>/Annots 35 0 R>>endobj 93 0 obj<>stream xÚ•WMsÛ8½ûWtå°“©’h’¢$jç”8¶ã-g¢±•ÍTM|€HHbL J«¿¯AR–é$SSq¥D¢?^w¿î¿Eâ_DÓ˜Fʶgßh: Rÿ63Š‚„&QøÃó›QHï4ýq!DŽÿÝ]ŸÅãzãdD´¥x: âö©¤û³Óç-¢ŸNOŸq:žÁñÉi<ůd#œ&Ѳ͟¾]ôÁ˜5_Í(i±¢Q˜I˜ÒÆ“”¹ÂYöú¢;iv…Ü“^‘ÛÈ__φQqLÃ8ôë ½ÝjEŸ~¿ù“æ¦P®Pkº?X'·f“`2é¤ÿ+- ž_%EŒ#A £ÄRä‚ÿ©ËEá0ðqÁPšÒ05"Šl#$bÜKét)ìîõÊí…‘€¢ó:s¶QMƒ)cè4/tu0Åzã(šÍÒ!\Œô¦,éŽ_Zº“aË<ðÚñ, ÆñêI0y‹Mai¿)œ¬D% åÒf¦XJËI¢Ÿ¤¤ :å˜ãiŒ’„FÞä‡ç ‰a@_^¿ºø4¿¦:Jƒ?×|õå× ª´qbYJ*'ù?'•-ðèc%a0Ÿ¤¦êðZ—VÚø@žy =›4Þ¿ÄãÉsÿ“|jÄÈ ÉZJ6šË,u%sZ~P0Fl»—«Âl©Ô™pP)TK?4yBü^—åa¯u> ÂJŽÒm„£`·R‘•eÉÞ3ÔEš¬則6>²…Ê$óam£ëõ†¶0¥(ñ Ÿœæ…u(xí´±ÄdaûÍBi?µÂ)ذצÌ÷E.ƒV?ž¾ÞäyáЀR(`Ø ~"üu ;Q”¾lxɬú̶è3ŒÑg¹$øjã\õïóóý~duemÖ¯‚¦˜LS.|ŽâÆç[‘=®™ÊŸ×‹añ̀ȑ­ûÂmŠ–ÂœGð¡™@®›¤æZIª­¿x>ì5õèci豿•æQ–ò@·…’½TzŸHÜ;!¹kÀöÛù;P—þº»ºˆ¢éìš’Jz³ø×› N©qÐbƒ–}é}/MßZµX+O'osþb= ŽÊ=BNSÉŽªÆ‘ývRå\íØÉ–-"ÏahÖ±^Éä¶œ [WÜtl¶ç]Ã¥!w¨¤ì¬÷éq'«Rdr+•kÀ¹ïÇç±@̬ã¯ÛùZhŽ"‰¼Pøu;ÐFï%3SuuÚôsbNÝa¨ªµô¹Y+‚ß‚¦™¨Ä²(ÁÚzƒ¨ÒÇÏkÃ[(…E°?RøNÁŒ ­ ÎÀâv&pXè|‡Z “?…ê´º&XϽ­Èå'YY#Îu/ö›±r4ÿx:‚ÆŸ!¿QÖ®v>?—¥Ìœçº'^ó¨U‘YºTk@% zŽAÝ›ËËKÏ]þƒt$ o8%ÝL<§3]2åoæsVû°V«óÌŠ a{®¯´A†<€Å[êféšä‘õ¯qT±ðüóu vq5„ßHmÚª~Ú^4Ò ˆPB?W5YÇéã'( }û8­Ñ‚;ëU°ôÅII}t"ߊÇj3 9gþˆ¾ê¥ôœcòžÌ÷,w'9Cêû„\œæòeºXÚí¨•åÀÆÞ£UÍ‚'ÂÂe}[Õp‹ñS*žD“hô@VFïx\ŸŒ2rî´“ywdÒ„üŸGAH{ÎR–Éʆ´¸òÙS€@EÛ”wò[-­{IñíÌø0­³šŸyê}Ìœ^"á¨ÖÝ, {?ÌàGý„.œí'z ÕóYW¹_Ò- l%³b…r>™y_ÄצlsÒÌßÕçõ,ö¢ðyªêeÙšëy.$ºÒ–½·TE:?©²x”½0`$ÕW}%Q[)xä5˜w8–Šýc Wº`³/*»”`y3#C̺<)­.kOeŽ3™9&÷Óüî³ÔïþÚ‚ˆ]²¯Ô†E¾ÏªR:Œ¾­ÎAeúÑe­¹ÿd`ËR6œÎ}]x½hæs·‰\d&ä íÀ†êþ¶[ÊL{™ªŒ_ _€'´/Ÿy ¢ªºŠÙã=°çye¤|º‹µ‘愵Óî@Úv놮ÿD×Rù 2÷|Àe CÃ6W[>¾-–ë¸'ÖóÚ*ýø¦ôÞßv?¼&ñ4ÁÕ«­jn­\eƒ ް~ƒø`¿¼^ &ŽÚÖÆ¨åænó¿éÅf¦o“˺Uï–)Ê€†jð8·pYÃÂÀ©ÇÂs¥Ãç¹›‹‘¶±’Õ%´ß ¾žMñ—õÚ69H»O |I%³_‹iNÆþ&ûâ#ñニ•á4œýsê}D&i¤i‚Á–s¹8ûãìÿ1³øÜendstream endobj 94 0 obj<>/XObject<>>>>>endobj 95 0 obj<>stream xÚ¥VMoÛ8½ûW rJK¶dDz÷–4 šE?\Dö MQ6‰THÊ®÷×ï )Ë¥ÝÅn#r>ß{3Ôó()þ%0[Ð×£g˜Íñ"§I¼„ì*NažLc?¹O—p«áËè&Mã)ÚõÿÌ&wsHÈKt_,3È 5…œ_–ºUÅ6­¥A‰”­âNjÅ*éŽp`XQˆœY7Fï¸ëØFz]úƒ·_×Àu!â7ù·Ñ¢tÏ1×¥¿H⤅ ³J+¸_¯'tÆTAñ-ÔLõ¡Î%€P;¦¸¨…rà 6B(0â¹ÖaÀ º¶¦Ë›ÌÌÛZal ×Òí°‚éúZ²ª0 ”ºªô!„h˜ã;ŒZ ¬²Ë†µa¬›ßT¢¶àA Q±ÜAZ«Kw`FxLѽÇU0×b,ÏänI(‰fiêVX¹Uðy/Ì^ŠC°;S¥Òvä“€Z[‡Iå¤Ú‚="µíD   ûbÆË€#„õ>`ùNmE¾Ø§}¿…´ìßšû¦7˜¤ó$Z*i1°“H ×5òX“½,NQ„!½¸Ö‚T¥65#vIQ•æX‰ÀˆZ;A~[ð“Ab2 ¾<±€ÂTB 2c¸“[D'ÆîôÁz ¡Ð$m¶LÉ?C:¡ãñO²iœf3Œ¿HâÙeèƒDĬí n%£zzÎæÄEÔ»§«@ÝC€S˜F÷9MÌɆøað>ÏÃ`7È8°¦©$ï BWE…’áIë¨çd–€õ׿€ðÉd€Ü^2š6X~È{›q˜á¾"VY Œ;+쪨, ]lNE"PhÞÒ<úRDZƒ¤µVÒi,l;îFü¬­†"] ʈmI`P¡qÇöLV ðÔ°”€ן|’¡vÔzÖ êëJþˆ¼ÑèÁP¥¬|hŠ·aüI šã—ìOÏ´¿Õª$ÙÖî$Òõà/¬K²¦3ü>/XObject<<>>>>>>endobj 97 0 obj<>stream xÚ…WÛrÛ8 }ÏW`ò”ÎΦ¹¼mš&©wÚ®wãììC_hж™P¤ÊK2þû¼È²ât§3X„Àààúy01þ›Àù |8Þ|šŒ«1>ìþ³+x{ “ Ì—h{vqó:aΖÆ Þ4ÌKΔÚ@-¼à^êøµ<Ç#0K`°”JT0_ '€YÁ‰›h÷e>ŸöYXð&:±Ô‚ßÍÞßžuF“Õ ¢8º6Ú íGóM› Ð#¼L¨š®ß}ûînæC[¦ë¡Õ—›«ÏC3+~á¼#û‚{:›•ç°Æçjþ8ø ²‡ÿe-4°áÕ3+1¦?ÍbxÿëXî…®G·èý ¨ þÉ…|ÆL¿H¿~}[mxh(‰©R¯î\_`m«°Ô^ýÞp/üÈy+X3x³Ê±žœU§+–¾M¿Ý7‹ìðu°A¥ä8PÑR®Ø3“Š-Ò&ÑEÆ”[Þ¤ÜÁ£YPµt-ó|ΠŸH/ÕL÷Çß“‡"-1©N™±ÞD8-ƒÈì6΋¯•|M':‚t »’F@s3¼;yIA%ïÌ¢u7 ¦ðA!VL!Êg782u†KæK¥?Žô]VS+cñ¸ÜÍׯ8‘0:±¤’²„.•*‘ô¸š‚O æx;=Væ…¸åg  äá¾jÏfŸsqkḕ‹Ô œµl!•ôOH@Ìb:m<<ô>C·÷øVë»ÓȬ?ÖÛè­ÿÒ佨å4¿Võ€Zi£G{œ#È%õ+«kIÁж‰²&¬ÖÃFà¡u·Ñ䕞xáOy’Á…¶5¶»j+©ªäã&§YäN.S*¯f÷p5›î^Bç%ÓÅ„ é™Ô.>¹Vp¹”|KqŽÉ šS|)¨èÑP3a VÂûVêDt<ä\8GÆV8,þ‚gÉ’šIQ[¦eˆ×hܤ‚­äS"†%R!!ûqÑý¾Ú—(±þ­5Ï’¸tMŠ‹¯“àFBÑ»ïðõnö•Ô@z¼}‹íÀ! ÐaO~S€OÂ> %61Žû$ÿµi0¦Ú½Q–6£LÝ×½In:Ÿ<¹)â^Ì÷’ñÌTLµ ÊÄQâøS®ƒüF9Ï|Ȳ™Ð 3UK‡{ÆßkCžý 3`D£0·nm^P&ü‹±OÛVúqt˜ÿþ#ôÃïö¾‚xaÍKdVVhÒÉzŸ l3Xãh•„/jy‡µÚKÉ$ZD:¶êQ9§P¡¤Šœ ®ûÙ^n²é*oŒÂè^'k¥ï’Há:”ûIšW‡8*ëBcê(µ±¦Iƒµ4DRê ™÷C£Ö)"Gƒg©}›ÄI¨ÞbëU@ÈØ•e J$¡5Mš¯a–bh6©MGi¥Y–;Íš¨Î¥\©­Œ6$ë9¯&$Ñè2¢L›$Jj®BÝ« ÐÇqêO?SCÛí/½Â?uhh‰n¸iqÈ$zLûTïÒ|Ii‚§È< À.ît<$åmo)é)oÓß&R™R4˜¡†­ò ¥Ç½ad™£ w&ôþŒ½1Å*ø”—­ÚݘlÐD¿–Yœ¶BQxˆ·¼(ïÏ ­(afÐ{gúX)q FòJ]’ønÖ.Y¬>ޱ?¦_d5(¸òзÝÏ÷<(cÊ}¸±âþçDšH m‡áÓ¸ñ‚rwÚFqD"í©Œv¿âòí‘MEEíÈwý’–H’D\ò®E­0¸5#Ää—YD\é6Ìì²fž ¤fK”ò¿ëò˜ˆiEïÿö…l†›÷Â2»Ù«Ý ¡ÓPÅì*s[ª6ôŒe,nÞ\ô×úü9ÕßBÉ.¹´%£d1?úÛID·0¤{K¦©gÒ—²|[µÿI1 W•mŸåfHt鑸ŸiÞOh Ý­©¬f9““ÉEuz9³gÕEO ¡Ý³/E±¯“š=|Ÿþ—>ç(4¾ÈÙ¨ø/ó‡ìR®Bž2ôA•úôb\]\œbñÐæ=¹™ü}𠦱˜endstream endobj 98 0 obj<>/XObject<<>>>>/Annots 49 0 R>>endobj 99 0 obj<>stream xÚ…WÛrÛ6}÷WlõdÏHŒ¨»ú&ÛuÇ™\ÔÊžôÁ/ JHHPH;þûž(’¢Uw’±¼ZìîÙ³À?/Bâ_Hãÿ²‹a0Ä7õ¿ÿ¼Ï‚!¦‹`AÍùà )m*ÝdÌ ›ÍYçֵČ–a°léZbFáhL[Jït< &ìtÌ+Á9mDâsÙRzÃpŒ<ÒQ%°®%Â0é×È5žž(Û2´ÓIíÇi[2´h³YK냇ŽVÝ M&•Žq†-e[æ2/j?¬½~èNÙч;TbB Æk¶À/±S é!º¼Ñ©c{õðýâÃgãÏ Fsœ»\ÑÖ ƒÉwFd¤, ²)‘R¢ÒB*ö¢ ËnpLé‚bQ*rœŒå³Š$冴,^róƒ¢\k*×£S’F€¸!7 "„i*Ó>ÄêÓãæºOŸÖ·}º_¯û$ju8lr¸(èéò£,n•ç§«V  5’Á?«XƤ4Ý<®7aPqo àfõùzEÏÒX˜Ñ(¢Rc¯v{ä¨t”–±äì7Ÿ¯kZž.=sʹK›mí!ÏÓ§Ëðéê”ÕK sTEBÓVRièEû#¦a‡° LŽçUé³úMé8±÷ŽÚΫš¹í»/ÕëÊèLq‘>+¦ T¿öëÕÁö¨ԔkÔ0z‰ï h(ð;NXƳÿlÇ¥ŽAÖã—ûú ##…ÊvRÛÊH ’"Úƒt$dHÄ\"ÄP†òMòW!µuEDŽês-‹<ÊSPÏ_ :,/-ÙÕ6GW•I·§ª¼ž®ú” ‡72¹µƒC* ˜eMæ±J•iA*!ã#;à¤Ú¦²Û8+¨¹CêT}‘_ó\=K7q¦´²<+özÊ4¾…WD©’  ´(-º×dóL¢e¬ìrȸ•zQŠúôÈÓábµ+àêRbò ÛËc裙㿪¬KÃöi[ŒF·›µºP™ †-3f‹çD“›ªÃ°7Àì¦ã+ZJÔ·Ëžkýj>-õŽø·û^Ÿ^ö Ñ¡ø¦BîB”Ež!¿ˆ›[B:ÜT•[å­Yk@ow¼48ù´úÐÃø2)t«v¹N_fŽu¤S:¢¼7ŽÅ#¦•¦gPáȹ>d|ì!J…Em¹TÑeåÇT¸íû-Áå8‘I³“”¡WÕ!•µSu›Ìb‡!•:9U‘*Ž‘{>ÿÆ·|ó‚§ïù¶žÆSG~Yº†ßËj’8)>™(ƒ!ž…J&¨i{SqÉÞPçÀÌŠÄ×7ÍE<ØŠTèˆÛ+)ukÏKÍîc² í•¶¯¸LïM®›Èd{䎜u"{Hö·wöë ÝIQ lûJùÏ={<ÐÜ"w¥†ŸäèÇõ‚8ˆ­J‘·´¿³7<„ë^h_Õƒ_Ëø2 ˆeˆ5ükËÏÐZ +6åá›âÄdôÖäVíx¥¯J°äš‡)=1Ÿ3âÛ6ÇÒÚ€0Üò§È&ïZ¦Œ8oºÙ ½ë˜NϘæQ™Û[d³3‡âž›¿=vç^/§Çoáµq–ÇåÛ£ó-­ù5«#éÏð„õµVüMmÃwÚßÇ'Q³ðœÙ#ºtpËÝ~_·Ê׃ˆ®—Ñ9/ßä–VÕåTÝ÷ì)oÑW-м&!?ëø“iRµâÿ¼&›1ÀxÊÌ-á¦àøœRÇàî7²0 ×;ß0”"ßTÍñoK÷x¬v£_Vïí3qšlÏ-µŸ%_Á¼)œ;íe\¦˜%Žð‚þéFöÙ/ªìù¼É2ÄŸ¤sd¥éë3O ò®nÞ›<Ë€†ŸMõ£6¯è¢¬j9ïc0.Ýlñ·“ñ"˜-—¾:mæÿx¸øëâ_)—lÂendstream endobj 100 0 obj<>/XObject<<>>>>>>endobj 101 0 obj<>stream xÚ•VMoÛ8½çW |Yw«¶ë:Î1 Z M½°ƒî¹Ðm³‘H•¤ìº¿~ß’âhëí. ¤†8œyóæÍ ¿hˆ#ºÓ›)¥ÅÙõòl˜ ñ±ýc7ôúnB£-×°Î.h™…£!-Ó~jôZm*+©´J{i©5ù­¤LîT*IeR{µV©ðÊhRzmlQÿv$vBåb•Ës:ƒé`îWNZÚ+¿%A¹ržÌúÕòëÙ£7É úíå:–#+pÓâºÐde~PzCԺ󆞴ÙÓ~+|{I|›FÖØ»ƒó²Hêãi2áKœh¹gçR8I"w9¥y•±'Z‰ôI"$I‹ëgR*!þï׋ÛèG¥«ï -ª²4Ö·æÁª“åÂ䂪ÈÈsZ1ÓfZ3FHW­œüV1m¥ðé¶Á ¿¾»¤Ñ$–n0¾ŒIŒºZÏ\ld"š?Wz0æJ÷oæ %£ç,ÝèUôSÂÒ…[ÉÒš©çL™ ³ίfÕÆö…8p:|ª¬× eR nš ;pJÎi{å« $†ÿ„¹tç¡ØZüSú4¡[¹Uî;pQwáœI•ð2ëÄ“tÖ% (RèŠ蘆*ƒ²£@SS8äJã°dHŽV‡Vw§KñØÀxºª`N‰}r¢µ­xaÛèõW$ådÊ YH¿5‘ü#{.K Ù;nòãϵâéAçêIvø¸N¥Àçôs<™m<€pOƒã½±™£žŠ­•BŸ¶GÜ9ž‡@©5†É›NìÀÅJscÕÿ9ƒƒ©ì‰^}VnQæ²@wpå-äJ 1äôéöm ›‚•FÈä î?üÙZüD¹ -·H,^e¡k(.«ãøz†Äë÷ó28Ì^–¾ßˆë´†&¬!+SoìÒ†©ö«n Â(²öª‹Wé±ßk4¿²fϘ{¯h-…‡¬ë…x’u6Á#8ÄÂ,ùxuï¸S:œ|áÏJ ½@™*4âÒ`¤ Œ¬Âx *wsƒàx_pb¸aj(ߨÑÄ´—ìÇu­·*õqÞÿÌ%Šƒîa1¡<}™löÜÛ¢Ÿz5 ‘ÌÐ ~™–Ur¼e<ë§ú7ÄÚwâÓ“2y|u²vo_ÔÎÛ*eŽé lóë"2ƒ˜/ÜøGel½€O™+Ø„IÅ”ÝA•±cè= "lºåØ`WX&¡w÷~‚Ÿw’a&˜²q2¬åí¶¦Ê³(¦vc›ÄåwìlHXu¡vaûeŠk²ªâÄjÇœ¨•q’¥)X2iÅ-üoÓ‘—sËMv|¶ÐÈÆhæÄšj³å–<@L;Å9¡°q»Å1(“ïXì­ò^êîÓ#+”æL8 ^‰o˜ÐRP¨( y|‚ü¡ùóùó8ŠÐ¬\K+5/Úž¦á4XÅuøÏ»:‹ö¡¥ÞÍŸïÁ‹@üVÅš(ýôU¶½áº:RÊû9Ío>6NÎù[‡‡Úg%6‚–ÜOØÓà¯^Mõ»“·4Î)Þߦòe/Ö,”Ñ«¹,2¼o°£;±ÛÅ…Ã\ùCðµ‘Xðá™8 ¼à¿vÁ&v–pSøÿC,×Y˜êç47Î/R«Jß·w±Ö^~÷<ÿ#©¬Ì`Ý|‚ wÌ^U ±ðkî{¯yó|Q:æëOóàû*Wó+ˆŒ«óšÕ G£Y2¹Ñtz‘LÙÍ•¦Ï;ží€\ï¯ìH/¬±yCã"Ìv6h| .†—ìbÄ/·ð² MfÃd6›€aüåÝò쳿õ¯endstream endobj 102 0 obj<>/XObject<<>>>>>>endobj 103 0 obj<>stream xÚ•WMsÛ6¼ûW¼ÉÉ™‘hIVüq«c×wÒDËm¹€$(!†­¨¿¾û’’Û™Ž3†ÞǾÝüýhJüLéôŒÿeåÑûåÑ$™àeÿ«^ÑÉ휦SZX{vqNË<|šÐ2;^®%-¬ó÷Y­*O…Ò^Ö¤»¡T8™“- úðé>¬±ÎÅuï’w“„x³‘›nWUÛ'•KGe“­)•/ß.¿Mh<=MfÈ{\ɺ°u)L&i£üšÖjµ–õ¸–ÎêÆ+kElt$LN®©*[{„Dnú(Ÿ¤¦Óý‚µ0«F¬$Røa’6ãì,™sÆ®ÆÅÍí^w»Î<¾Ë™ÔZO_ª¼ g ¿5bÖ¶¤YËGúd­I€yP•h¼-…WÙ°M®ÈeB+³ú &¤T‡ç¹R 3J‹„µÔJ¤š*-2YrM,T9œ:¤ ë…§pÔpŸÊÐõÃ➦Éä%x¼üÑOŸGß·˜ª\Õ2ãÑ—1™0$ËÁ k 0FÊ\æ!ÁÉí%Mç‘qãÙeLu™ÐÝbA÷1r\¶#æxÆÄ<^Ô6Ûб–@‰ž”SŒ ïb‚Ø"vyÇl«Mº6§¤ÊJøPšÖ¼‡×Öò{ƒnònq›,è)8G$Ÿð¾Viãeüo `ÈV- Ö€raÂý«ëT”ã?l¶ÝK“o•–ƒ¤ûÉ0z½/Zæ#.Ûnx–<ÿ(&ºß‚5%ýEÂ]|“Ù²B°Tiå·ôõeÑ7pwCUáÉíd‡uWƒ®ÇpÌ ÎüëÛ}¢Ç„1,rPÛ½<ä)l;_@Á ¥Aè/LºUO5.¸ÚícX1ãR ã"¡± ‚UAè²~ûà†DÁàŒ7µÖX^Ñ z °w8V*ç¬ó—r‡øy®xR£¿ÂtmmCÞÒ£”U(_™`o§±*f YC!ÑÚòÈXÊ@jçÇøþ³Ov0€w¹Üy«ˆÑðÑÖÑhßwïøÞ#زrààÔ¿rD»›Í(Zªe(ýzØ0[ÂÿÄ,”$4"B‹á Mœd]äª(poÅ»Ûök^ÈiBÿÈ”®rf®óñˆ¢;Þ[ˆ_™ù¤ó)úçã ª•G¬Ô@W¡àa,ÕE,Û }ZÃ]1Á½½½ ­Ü³í„K%ßMÌš§‡:Ù­ C=´qø<_ÄÞvà´ô`fM¡V8LBùƒìøèk«c“2¶éúÜ;+Ï[ÈNgëûîžù ƒ;}ÞäŒ×^‘¶>"kQU’UMh£G>ð@Ûø˜üØî.²•ÈÃéÝ¥äyb?×Z¸þ€h|µtõçû+\EèÖÚGjûìŠA“ 0 Q¾Ý(\,„¤œáô= Aøé•ÅinI7ÙcÈC€ö+%3Ù^ ZÆp| â™…!¯ÚBÄš7 ‡SÚRø¢Åx:½Hæ—Süa4I.Ò†>ÞL¬u–kè ¡>Ý}‰fÊØÅ»w1Æç“KqÆoçóyr1;Ãñæ"¡Ûp¹ôý}yô×ÑÎ`rDendstream endobj 104 0 obj<>/XObject<<>>>>/Annots 60 0 R>>endobj 105 0 obj<>stream xÚ¥V]sâ6}ϯ¸³OÉ4¼àä©$!mf?B²ÍC^„-@%¿ï‘ÄG`ÊN;LKòý8çÜ{•¿ÎŠñ“P¿CÝåÕYÅØÙ=¾ývÖíE1õ:<+J²$Ê6«’Æáðc?‰z8ì|ììVûÃ8 –Wl‡Õî0MÓ(õ‡Ùnµ;Ä^æÎºÝ¨îèfrœ£žSû>¥$¡É `zYŸ&…?Ši’Ÿ³%%›–œ„$»à$ù›%ÍKÎ '5£ñàËÍ º˜ü8‹©Õé!…Iq>Y)škV/DÎJXZ®g,ç†lɉÕ5gš¤‚K“sÉñÆ,5pzû43´âeÑ|r;µV?xnÝߥ(à‹m‚&!‚~º¶¦ÈªØ¤™Ò² œIšº½ f¯}ûT9è°ÕICú këëvûµ©MdT£s?sInƒÍ–¯–·êyÈÈó™F±…œÓˆI^ÒËù‡çÑèÃËÅ?dÿŽ zkU{«ÿ•ôjµŠêÅ:j¤kÍ»ˆ Þ¶¢,ÛouÝ>‰àkSq­C ¢hš‰,šK*´XúÛX¥+ñÊm1§œKªXYw¥²ÑÕcø,ä«Ór ps~y¤ÙÞæ_BË&£]:¿@ZŸÄs/$+Ëõ%AAR+IÃñ(„§"£fv…2t5gB®VmõÙ‚öZØXÆÕ»×ÊìÅ9ÂôŸ¤B­ `©ªí=#~0»¢¤¿ÔõŽk®™¯“ñÚX^z2når?dÁµb?ò,7°<€:\kyðÒÚÆkåu0|Ø;Û¢‹qåâ£!œÆ[©0xŠ&·æè£4MÒ„B× ñ]€¹;7€hÜË©§G¿+L¶•RÅ%}Aå–NðNÜCvOãÁö2Nâ_’¨ã·ß®zq|têjËqñëv´žœ?ßøŒ£¥Q"'Ù}‡6ëG>cg»•ySœƒ¢Òµs`¾…›Óë}S=ì+ñå¼Ðlf_.BÀl0ƒäW þWñŽ’1«—Ž5ÌûófužZI’y­~|åsÛês8PÓ tg)⛾ÛNÎþ8û*3 endstream endobj 106 0 obj<>/XObject<<>>>>/Annots 73 0 R>>endobj 107 0 obj<>stream xÚ}TÁrÚ0½ó{LfbÇcCoI 3¡uA™é!Õ^À,¹’€ò÷]Ù˜¤éÀx¼z;oßî[ùwAD?ƒÄÿóª…œ‹/þ’QBÏ âa88–-4‡ AöÁ Š’pDŸ‚Ž¢0ö„}:lƒ4ŒÛZ Ô'¨Ÿ6µZ¨ ý)[¨õ9ÇT¡r,nÿ8T…ª€Z'~J„²ª%V¨œp¥V Wà6÷h^Qâˆj¯l­µD«­Ê}ª¥;\èÈ„”¢(Õ…”–Å÷aÖaîPê ®©9ÖŠ|³µ³0SÖ•nëÐkâ˜o”–zýAŧ‹Ùqb˺ŸJ…íI|×D«á‚k1}`,ŸóýCñY`EƒêÜøˆ£ÅÉ9Ç|+]YoM­-ÂÉܹ(%L¼3–Fjáåj>›O^®!ÆßëO0Ç¢À5Úk%ì¢Ö#%G†7BÙ©îäBÀ#çY·D·Ó1°Ô¯fC<èÓöû Q`%Ì«m“Þö7hVý8ä]ùY<ýxÛÓe3ÛxxΖí²yw}d a°9q] Z í¼Óa°Ô+·§<_>endobj 109 0 obj<>endobj 110 0 obj<>0<>]>>>>endobj xref 0 111 0000000000 65535 f 0000000015 00000 n 0000000246 00000 n 0000001812 00000 n 0000046400 00000 n 0000046580 00000 n 0000047619 00000 n 0000092460 00000 n 0000092640 00000 n 0000093682 00000 n 0000137947 00000 n 0000138137 00000 n 0000139178 00000 n 0000174041 00000 n 0000174227 00000 n 0000175274 00000 n 0000210064 00000 n 0000210255 00000 n 0000211301 00000 n 0000241498 00000 n 0000241681 00000 n 0000242725 00000 n 0000242859 00000 n 0000242997 00000 n 0000243138 00000 n 0000243276 00000 n 0000243419 00000 n 0000243539 00000 n 0000244335 00000 n 0000250328 00000 n 0000253555 00000 n 0000259733 00000 n 0000259785 00000 n 0000259870 00000 n 0000259920 00000 n 0000260005 00000 n 0000260035 00000 n 0000260135 00000 n 0000260236 00000 n 0000260337 00000 n 0000260438 00000 n 0000260539 00000 n 0000260640 00000 n 0000260741 00000 n 0000260842 00000 n 0000260943 00000 n 0000261044 00000 n 0000261145 00000 n 0000261246 00000 n 0000261347 00000 n 0000261454 00000 n 0000261512 00000 n 0000261597 00000 n 0000261667 00000 n 0000261752 00000 n 0000261812 00000 n 0000261897 00000 n 0000261958 00000 n 0000262043 00000 n 0000262099 00000 n 0000262184 00000 n 0000262235 00000 n 0000262299 00000 n 0000262382 00000 n 0000262445 00000 n 0000262528 00000 n 0000262606 00000 n 0000262689 00000 n 0000262755 00000 n 0000262838 00000 n 0000262904 00000 n 0000262987 00000 n 0000263053 00000 n 0000263136 00000 n 0000263194 00000 n 0000263226 00000 n 0000263258 00000 n 0000263512 00000 n 0000263553 00000 n 0000263595 00000 n 0000263637 00000 n 0000263679 00000 n 0000263721 00000 n 0000263763 00000 n 0000263805 00000 n 0000263847 00000 n 0000263889 00000 n 0000263931 00000 n 0000263972 00000 n 0000264014 00000 n 0000264056 00000 n 0000264098 00000 n 0000264203 00000 n 0000264424 00000 n 0000266291 00000 n 0000266498 00000 n 0000267710 00000 n 0000267895 00000 n 0000269543 00000 n 0000269732 00000 n 0000271374 00000 n 0000271551 00000 n 0000273003 00000 n 0000273180 00000 n 0000274759 00000 n 0000274950 00000 n 0000276152 00000 n 0000276333 00000 n 0000277030 00000 n 0000277085 00000 n 0000277199 00000 n trailer <]>> startxref 277372 %%EOF cups-2.2.7/test/testfile.ps000664 000765 000024 00000041535 13255074424 016325 0ustar00msweetstaff000000 000000 %!PS-Adobe-3.0 %%BoundingBox: 0 0 612 792 %%Pages: 1 %%LanguageLevel: 1 %%DocumentData: Clean7Bit %%DocumentSuppliedResources: procset testprint/1.3 %%DocumentNeededResources: font Helvetica Helvetica-Bold Times-Roman %%Creator: Michael Sweet, Apple Inc. %%CreationDate: D:20070606214000+0500 %%Title: Test Page %%EndComments %%BeginProlog %%BeginResource procset testprint 1.3 0 % % PostScript test page for CUPS. % % Copyright (c) 2007-2011 Apple Inc. % Copyright (c) 1993-2007 Easy Software Products % % These coded instructions, statements, and computer programs are the % property of Apple Inc. and are protected by Federal copyright law. % Distribution and use rights are outlined in the file "LICENSE.txt" % which is included with the CUPS source distribution. % /SEXTANT { % Draw a color wheel sextant... % (name) white radius r g b SEXTANT - % Loop through 100 shades... 0 0.010101 0.98 { % Set the color... dup 0.75 le { % Get "white" value % Start from black dup 0.75 div % val2 = val / 0.75 0 index 5 index mul % R = R * val2 1 index 5 index mul % G = G * val2 2 index 5 index mul % B = B * val2 4 -1 roll pop % Discard val2 } { % Fade to white dup neg 1 add 4 mul % val2 = (1 - val) * 4 0 index 5 index mul % R = R * val2 1 index neg 1 add add % + (1 - val2) 1 index 5 index mul % G = G * val2 2 index neg 1 add add % + (1 - val2) 2 index 5 index mul % B = B * val2 3 index neg 1 add add % + (1 - val2) 4 -1 roll pop % Discard val2 } ifelse setrgbcolor % Set the color... % Draw the polygon... newpath % Start a new path... dup 5 index mul % r1 = radius * val 0 0 3 -1 roll 0 60 arc % Draw the inner arc dup 0.010101 add 5 index mul% r2 = (radius + 0.010101) * val 0 0 3 -1 roll 60 0 arcn % Draw the outer arc closepath % Close the path fill % Fill it... pop % Pop value... } for % Draw a line around the polygons... pop pop pop dup % Pop R, G, B, start 0 setgray % Black newpath 0 0 moveto % Center 0 0 3 -1 roll 0 60 arc % Arc around octant closepath % Back to center stroke % Stroke it... % Draw the label... dup % Save radius dup 30 cos mul % X = radius * cos(30) exch 30 sin mul % Y = radius * sin(30) moveto % Position label gsave 30 rotate % Rotate label dup 0.05 mul % Offset to the right exch -0.05 mul % and down... rmoveto % Offset label show % Show label grestore } bind def /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 % (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 % power n NUMBER - 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 % height CUPSLOGO % Start with a big C... /Helvetica findfont 1 index scalefont setfont 0 setgray 0 0 moveto (C) show % Then "UNIX Printing System" much smaller... /Helvetica-Bold findfont 1 index 9 div scalefont setfont 0.25 mul dup dup 2.0 mul moveto (UNIX) show dup dup 1.6 mul moveto (Printing) show dup 1.2 mul moveto (System) show } bind def %%EndResource %%EndProlog %%Page: 1 1 gsave % Determine the imageable area and device resolution... initclip newpath clippath pathbbox % Get bounding rectangle 72 div /pageTop exch def % Get top margin in inches 72 div /pageRight exch def % Get right margin in inches 72 div /pageBottom exch def % Get bottom margin in inches 72 div /pageLeft exch def % Get left margin in inches 4 setlinewidth % Draw wide lines 0 setgray closepath stroke % Draw a clipping rectangle /pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft /pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom 72 72 dtransform % Get device resolution per inch /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 pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33) /mediumFont /Helvetica findfont % mediumFont = Helvetica pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5) /smallFont /Times-Roman findfont % smallFont = Times-Roman pageHeight scalefont def % size = pageHeight (nominally 11) % Draw rulers along the edges... /CENTIMETER 72 2.54 div def /MILLIMETER 72 25.4 div def /Times-Roman findfont % Font for ruler numbers 11 scalefont setfont % 11 points gsave % Left side inches pageLeft 72 mul 0 translate % Offset left edge 1 setlinewidth % Draw normal lines 72 72 pageTop 72 mul { % Height inches dup dup 0 exch moveto 24 0 rlineto stroke % Draw tic mark 24 exch pageHeight sub moveto % Draw number 72 div cvi 10 string cvs RIGHT } for 0.5 setlinewidth % Draw thin lines 18 18 pageTop 72 mul { % 1/4 inches 0 exch moveto 15 0 rlineto stroke % Draw tic mark } for 9 9 pageTop 72 mul { % 1/8 inches 0 exch moveto 6 0 rlineto stroke % Draw tic mark } for grestore gsave % Bottom inches 0 pageBottom 72 mul translate % Offset bottom edge 1 setlinewidth % Draw normal lines 72 72 pageRight 72 mul { % Width inches dup dup 0 moveto 0 24 rlineto stroke % Draw tic mark 3 add 27 pageHeight sub moveto % Draw number 72 div cvi 10 string cvs show } for 0.5 setlinewidth % Draw thin lines 18 18 pageRight 72 mul { % 1/4 inches 0 moveto 0 15 rlineto stroke % Draw tic mark } for 9 9 pageRight 72 mul { % 1/8 inches 0 moveto 0 6 rlineto stroke % Draw tic mark } for grestore gsave % Right side centimeters pageRight 72 mul 0 translate % Offset right edge 1 setlinewidth % Draw normal lines CENTIMETER CENTIMETER pageTop 72 mul { % Height centimeters 0 exch moveto -24 0 rlineto stroke% Draw tic mark } for 1 1 pageTop 2.54 mul { % Height labels dup -24 exch CENTIMETER mul pageHeight sub moveto % Draw number cvi 10 string cvs show } for 0.5 setlinewidth % Draw thin lines 0 0.5 CENTIMETER mul pageTop 72 mul { % 1/2 centimeters 0 exch moveto -15 0 rlineto stroke% Draw tic mark } for 0 MILLIMETER pageTop 72 mul { % Millimeters 0 exch moveto -6 0 rlineto stroke % Draw tic mark } for grestore gsave % Top centimeters 0 pageTop 72 mul translate % Offset top edge 1 setlinewidth % Draw normal lines CENTIMETER CENTIMETER pageRight 72 mul { % Width centimeters 0 moveto 0 -24 rlineto stroke % Draw tic mark } for 1 1 pageRight 2.54 mul { % Width labels dup CENTIMETER mul 3 add -24 moveto % Draw number cvi 10 string cvs show } for 0.5 setlinewidth % Draw thin lines 0 0.5 CENTIMETER mul pageRight 72 mul { % 1/2 centimeters 0 moveto 0 -15 rlineto stroke % Draw tic mark } for 0 MILLIMETER pageRight 72 mul { % Millimeters 0 moveto 0 -6 rlineto stroke % Draw tic mark } for grestore % Offset page to account for lower-left margin... pageLeft 72 mul pageBottom 72 mul translate % Set text font and color... mediumFont setfont % Font 0 setgray % Color 1 setlinewidth % Draw normal lines % Draw the color wheel... gsave % Position the wheel on the left side... pageWidth 18 mul % x = pageWidth * 1/4 * 72 pageHeight 54 mul % y = pageHeight * 3/4 * 72 translate % Size the wheel... wheelSize % Draw the colors... dup (C) 3 -1 roll 0 1 1 SEXTANT 60 rotate dup (M) 3 -1 roll 1 0 1 SEXTANT 60 rotate dup (Y) 3 -1 roll 1 1 0 SEXTANT 60 rotate dup (R) 3 -1 roll 1 0 0 SEXTANT 60 rotate dup (G) 3 -1 roll 0 1 0 SEXTANT 60 rotate dup (B) 3 -1 roll 0 0 1 SEXTANT 60 rotate pop grestore % Label the color wheel... pageWidth 18 mul % x = pageWidth * 1/4 * 72 pageHeight 43 mul % y = pageHeight * 19/32 * 72 moveto % Position the text (Color Wheel) CENTER % Show the text centered % Draw the gray ramp... gsave % Position the gray ramp in the center... pageWidth 36 mul % x = pageWidth * 1/2 * 72 pageHeight 54 mul % y = pageHeight * 3/4 * 72 wheelSize sub % - wheelSize translate % Loop through 100 shades... 0 0.010101 0.98 { % Set the color... dup setgray % Set the grayscale... % Draw the polygon... newpath % Start a new path... wheelSize -0.2 mul % X = -wheelSize / 5 1 index 2 mul wheelSize mul % Y = val * 2 * wheelSize moveto % Move there... wheelSize 0.4 mul 0 rlineto % Right side... wheelSize 0.2 mul % X = wheelSize / 5 1 index 0.010101 add 2 mul wheelSize mul % Y = (val + 0.010101) * 2 * wheelSize lineto % Move there... wheelSize -0.4 mul 0 rlineto % Left side... closepath % Close the path fill % Fill it... pop % Pop value... } for 0 setgray % Black newpath % Start a new path wheelSize -0.2 mul 0 moveto % Bottom left wheelSize 0.4 mul 0 rlineto % Bottom right 0 wheelSize 2 mul rlineto % Upper right wheelSize -0.4 mul 0 rlineto % Upper left closepath % Close the path stroke % Stroke it... 0 wheelSize -0.2 mul moveto % Center bottom for label (K) CENTER % Center K at bottom 0 wheelSize 2.05 mul moveto % Center top for label (W) CENTER % Center W at top grestore % Label the gray ramp... pageWidth 36 mul % x = pageWidth * 1/2 * 72 pageHeight 43 mul % y = pageHeight * 19/32 * 72 moveto % Position the text (Gray Ramp) CENTER % Show the text centered % Draw radial lines... gsave 0 setlinewidth % 1 pixel lines % Position the lines on the left side... pageWidth 54 mul % x = pageWidth * 3/4 * 72 pageHeight 54 mul % y = pageHeight * 3/4 * 72 translate % Size the wheel... wheelSize % Loop at 1 degree increments 0 1 359 { pop % Discard angle - not used 0 0 moveto % Start line at the center dup 0 lineto % Draw to the radius 1 rotate % Rotate 1 degree } for pop % Discard radius - not needed anymore stroke % Draw lines... grestore % Label the lines... pageWidth 54 mul % x = pageWidth * 3/4 * 72 pageHeight 43 mul % y = pageHeight * 19/32 * 72 moveto % Position the text (1 Degree Radial Lines) CENTER % Show the text centered % 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 2 index sub % y -= height pageWidth 28 mul % width = pageWidth * 1/4 * 72 3 index % height 0.5 setgray rectfill % Draw a shadow pageWidth 4 mul % x = pageWidth * 1/16 * 72 pageHeight 36 mul % y = pageHeight * 1/2 * 72 2 index sub % y -= height pageWidth 28 mul % width = pageWidth * 3/8 * 72 3 index % height 4 copy 1 setgray rectfill % Clear the box to white 0 setgray rectstroke % Draw a black box around it... pop % Discard height % Label the imageable area... pageWidth 4 mul % x = pageWidth * 1/16 * 72 pageHeight 37 mul % y = pageHeight * 1/2 * 72 moveto % Position the text mediumFont setfont % Font (Imageable Area) show % Show the text smallFont setfont % Font pageWidth 14 mul % x = pageWidth * 3/16 * 72 pageHeight 36 mul % y = pageWidth * 1/2 * 72 pageHeight -2 mul add % y -= 2 * smallFont height % Page Size inches 2 copy moveto % Move to x & y (Page Size: ) RIGHT % Label 100 pageWidth NUMBER % pageWidth (x) show % "x" 100 pageHeight NUMBER % pageHeight (in) show % "in" % Page Size millimeters pageHeight sub % Move down... 2 copy moveto % Move to x & y 10 pageWidth 25.4 mul NUMBER % pageWidth (x) show % "x" 10 pageHeight 25.4 mul NUMBER % pageHeight (mm) show % "mm" % Lower-left inches pageHeight 2 mul sub % Move down... 2 copy moveto % Move to x & y (Lower-Left: ) RIGHT % Label 100 pageLeft NUMBER % pageLeft (x) show % "x" 100 pageBottom NUMBER % pageBottom (in) show % "in" % Lower-left millimeters pageHeight sub % Move down... 2 copy moveto % Move to x & y 10 pageLeft 25.4 mul NUMBER % pageLeft (x) show % "x" 10 pageBottom 25.4 mul NUMBER % pageBottom (mm) show % "mm" % Upper-right inches pageHeight 2 mul sub % Move down... 2 copy moveto % Move to x & y (Upper-Right: ) RIGHT % Label 100 pageRight NUMBER % pageRight (x) show % "x" 100 pageTop NUMBER % pageTop (in) show % "in" % Upper-right millimeters pageHeight sub % Move down... 2 copy moveto % Move to x & y 10 pageRight 25.4 mul NUMBER % pageRight (x) show % "x" 10 pageTop 25.4 mul NUMBER % pageTop (mm) show % "mm" % Resolution dots-per-inch pageHeight 2 mul sub % Move down... 2 copy moveto % Move to x & y (Resolution: ) RIGHT % Label 1 xResolution NUMBER % xResolution (x) show % "x" 1 yResolution NUMBER % yResolution (dpi) show % "dpi" % Resolution dots-per-meter pageHeight sub % Move down... moveto % Move to x & y 1 xResolution 39.27 mul NUMBER % xResolution (x) show % "x" 1 yResolution 39.27 mul NUMBER % yResolution (dpm) show % "dpm" % Interpreter Information... 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 2 index sub % y -= height pageWidth 28 mul % width = pageWidth * 1/4 * 72 3 index % height 0.5 setgray rectfill % Draw a shadow pageWidth 40 mul % x = pageWidth * 9/16 * 72 pageHeight 36 mul % y = pageHeight * 1/2 * 72 2 index sub % y -= height pageWidth 28 mul % width = pageWidth * 3/8 * 72 3 index % height 4 copy 1 setgray rectfill % Clear the box to white 0 setgray rectstroke % Draw a black box around it... pop % Discard height % Label the interpreter info... pageWidth 40 mul % x = pageWidth * 9/16 * 72 pageHeight 37 mul % y = pageHeight * 1/2 * 72 moveto % Position the text mediumFont setfont % Font (Interpreter Information) show % Show the text smallFont setfont % Font pageWidth 49 mul % x = pageWidth * 11/16 * 72 pageHeight 36 mul % y = pageWidth * 1/2 * 72 pageHeight 2 mul sub % y -= 2 * smallFont height % Language level 2 copy moveto % Move to x & y (PostScript: ) RIGHT % Label (Level ) show % "Level " 1 languagelevel NUMBER % Language level % Version pageHeight 2 mul sub % Move down... 2 copy moveto % Move to x & y (Version: ) RIGHT % Label version show % Version ( \() show % " (" 1 revision NUMBER % Revision (\)) show % ")" % Product pageHeight 2 mul sub % Move down... 2 copy moveto % Move to x & y (Product: ) RIGHT % Label product show % Product name % Serial Number pageHeight 2 mul sub % Move down... moveto % Move to x & y (Serial #: ) RIGHT % Label 1 serialnumber NUMBER % S/N % Draw the label at the top... pageWidth 36 mul % Center of page pageHeight 66 mul % Top of page (11/12ths) moveto % Position text bigFont setfont % Font (Printer Test Page) CENTER % Show text centered % Draw the copyright notice at the bottom... pageWidth 17 mul % Center of page pageHeight 10 mul % Bottom of page moveto % Position text (Printed Using CUPS v1.3.x) show pageWidth 17 mul % Left side of page pageHeight 8 mul % Move down... 2 copy moveto % Position text smallFont setfont % Font (Copyright 2007-2018 Apple Inc., All Rights Reserved. CUPS and the CUPS logo are trademarks) show pageHeight 2 add sub % Move down... 2 copy moveto % Position text (of Apple Inc., One Apple Park Way, Cupertino, CA 95014, USA.) show pageHeight 2 mul 4 add sub % Move down... moveto % Position text (Need help? Contact your operating system vendor or visit "http://www.cups.org/".) show % Then the CUPS logo.... gsave pageWidth 4 mul pageHeight 4 mul translate pageWidth 15 mul CUPSLOGO grestore % Show the page... grestore showpage %%EOF cups-2.2.7/test/testfile.txt000664 000765 000024 00000007344 13255074424 016522 0ustar00msweetstaff000000 000000 All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. All work and no play makes Johhny a dull boy. cups-2.2.7/test/testhp.ppd000664 000765 000024 00000021640 13255074424 016151 0ustar00msweetstaff000000 000000 *PPD-Adobe: "4.3" *% *% "$Id$" *% *% Test HP PPD file for CUPS. *% *% Copyright 2007-2013 by Apple Inc. *% Copyright 1997-2005 by Easy Software Products. *% *% These coded instructions, statements, and computer programs are the *% property of Apple Inc. 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 file is *% file is missing or damaged, see the license at "http://www.cups.org/". *% *FormatVersion: "4.3" *FileVersion: "1.7" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "TESTHP.PPD" *Manufacturer: "ESP" *Product: "(CUPS v1.5)" *cupsVersion: 1.7 *cupsManualCopies: True *cupsFilter: "application/vnd.cups-raster 50 rastertohp" *cupsFilter2: "application/vnd.cups-raster application/vnd.hp-pcl 50 rastertohp" *ModelName: "Test HP Printer" *ShortNickName: "Test HP Printer" *NickName: "Test HP Printer CUPS v1.7" *PSVersion: "(3010.000) 550" *LanguageLevel: "3" *ColorDevice: True *DefaultColorSpace: RGB *FileSystem: False *Throughput: "1" *LandscapeOrientation: Plus90 *VariablePaperSize: False *TTRasterizer: Type42 *UIConstraints: *PageSize Executive *InputSlot Envelope *UIConstraints: *PageSize Letter *InputSlot Envelope *UIConstraints: *PageSize Legal *InputSlot Envelope *UIConstraints: *PageSize Tabloid *InputSlot Envelope *UIConstraints: *PageSize A3 *InputSlot Envelope *UIConstraints: *PageSize A4 *InputSlot Envelope *UIConstraints: *PageSize A5 *InputSlot Envelope *UIConstraints: *PageSize B5 *InputSlot Envelope *UIConstraints: *Resolution 600dpi *ColorModel CMYK *OpenUI *PageSize/Media Size: PickOne *OrderDependency: 10 AnySetup *PageSize *DefaultPageSize: Letter *PageSize Letter/US Letter: "<>setpagedevice" *PageSize Legal/US Legal: "<>setpagedevice" *PageSize Executive/US Executive: "<>setpagedevice" *PageSize Tabloid/US Tabloid: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" *PageSize A4/A4: "<>setpagedevice" *PageSize A5/A5: "<>setpagedevice" *PageSize B5/B5 (JIS): "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" *PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize EnvMonarch/Envelope Monarch: "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion: PickOne *OrderDependency: 10 AnySetup *PageRegion *DefaultPageRegion: Letter *PageRegion Letter/US Letter: "<>setpagedevice" *PageRegion Legal/US Legal: "<>setpagedevice" *PageRegion Executive/US Executive: "<>setpagedevice" *PageRegion Tabloid/US Tabloid: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" *PageRegion A4/A4: "<>setpagedevice" *PageRegion A5/A5: "<>setpagedevice" *PageRegion B5/B5 (JIS): "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" *PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion EnvMonarch/Envelope Monarch: "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: Letter *ImageableArea Letter/US Letter: "18 36 594 756" *ImageableArea Legal/US Legal: "18 36 594 972" *ImageableArea Executive/US Executive: "18 36 504 684" *ImageableArea Tabloid/US Tabloid: "18 36 774 1188" *ImageableArea A3/A3: "18 36 824 1155" *ImageableArea A4/A4: "18 36 577 806" *ImageableArea A5/A5: "18 36 403 559" *ImageableArea B5/JIS B5: "18 36 498 693" *ImageableArea EnvISOB5/B5 (ISO): "18 36 463 673" *ImageableArea Env10/Com-10: "18 36 279 648" *ImageableArea EnvC5/EnvC5: "18 36 441 613" *ImageableArea EnvDL/EnvDL: "18 36 294 588" *ImageableArea EnvMonarch/Envelope Monarch: "18 36 261 504" *DefaultPaperDimension: Letter *PaperDimension Letter/US Letter: "612 792" *PaperDimension Legal/US Legal: "612 1008" *PaperDimension Executive/US Executive: "522 756" *PaperDimension Tabloid/US Tabloid: "792 1224" *PaperDimension A3/A3: "842 1191" *PaperDimension A4/A4: "595 842" *PaperDimension A5/A5: "421 595" *PaperDimension B5/B5 (JIS): "516 729" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension Env10/Envelope #10: "297 684" *PaperDimension EnvC5/Envelope C5: "459 649" *PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension EnvMonarch/Envelope Monarch: "279 540" *OpenUI *MediaType/Media Type: PickOne *OrderDependency: 10 AnySetup *MediaType *DefaultMediaType: Plain *MediaType Plain/Plain Paper: "<>setpagedevice" *MediaType Bond/Bond Paper: "<>setpagedevice" *MediaType Special/Special Paper: "<>setpagedevice" *MediaType Transparency/Transparency: "<>setpagedevice" *MediaType Glossy/Glossy Paper: "<>setpagedevice" *CloseUI: *MediaType *OpenUI *InputSlot/Media Source: PickOne *OrderDependency: 10 AnySetup *InputSlot *DefaultInputSlot: Tray *InputSlot Tray/Tray: "<>setpagedevice" *InputSlot Manual/Manual Feed: "<>setpagedevice" *InputSlot Envelope/Envelope Feed: "<>setpagedevice" *CloseUI: *InputSlot *OpenUI *Resolution/Output Resolution: PickOne *OrderDependency: 20 AnySetup *Resolution *DefaultResolution: 300dpi *Resolution 150dpi/150 DPI: "<>setpagedevice" *Resolution 300dpi/300 DPI: "<>setpagedevice" *Resolution 600dpi/600 DPI: "<>setpagedevice" *CloseUI: *Resolution *OpenUI *ColorModel/Output Mode: PickOne *OrderDependency: 10 AnySetup *ColorModel *DefaultColorModel: CMYK *ColorModel CMYK/CMYK Color: "<>setpagedevice" *ColorModel RGB/CMY Color: "<>setpagedevice" *ColorModel Gray/Grayscale: "<>setpagedevice" *CloseUI: *ColorModel *DefaultFont: Courier *Font AvantGarde-Book: Standard "(001.006S)" Standard ROM *Font AvantGarde-BookOblique: Standard "(001.006S)" Standard ROM *Font AvantGarde-Demi: Standard "(001.007S)" Standard ROM *Font AvantGarde-DemiOblique: Standard "(001.007S)" Standard ROM *Font Bookman-Demi: Standard "(001.004S)" Standard ROM *Font Bookman-DemiItalic: Standard "(001.004S)" Standard ROM *Font Bookman-Light: Standard "(001.004S)" Standard ROM *Font Bookman-LightItalic: Standard "(001.004S)" Standard ROM *Font Courier: Standard "(002.004S)" Standard ROM *Font Courier-Bold: Standard "(002.004S)" Standard ROM *Font Courier-BoldOblique: Standard "(002.004S)" Standard ROM *Font Courier-Oblique: Standard "(002.004S)" Standard ROM *Font Helvetica: Standard "(001.006S)" Standard ROM *Font Helvetica-Bold: Standard "(001.007S)" Standard ROM *Font Helvetica-BoldOblique: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow: Standard "(001.006S)" Standard ROM *Font Helvetica-Narrow-Bold: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow-BoldOblique: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow-Oblique: Standard "(001.006S)" Standard ROM *Font Helvetica-Oblique: Standard "(001.006S)" Standard ROM *Font NewCenturySchlbk-Bold: Standard "(001.009S)" Standard ROM *Font NewCenturySchlbk-BoldItalic: Standard "(001.007S)" Standard ROM *Font NewCenturySchlbk-Italic: Standard "(001.006S)" Standard ROM *Font NewCenturySchlbk-Roman: Standard "(001.007S)" Standard ROM *Font Palatino-Bold: Standard "(001.005S)" Standard ROM *Font Palatino-BoldItalic: Standard "(001.005S)" Standard ROM *Font Palatino-Italic: Standard "(001.005S)" Standard ROM *Font Palatino-Roman: Standard "(001.005S)" Standard ROM *Font Symbol: Special "(001.007S)" Special ROM *Font Times-Bold: Standard "(001.007S)" Standard ROM *Font Times-BoldItalic: Standard "(001.009S)" Standard ROM *Font Times-Italic: Standard "(001.007S)" Standard ROM *Font Times-Roman: Standard "(001.007S)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(001.007S)" Standard ROM *Font ZapfDingbats: Special "(001.004S)" Standard ROM *% *% End of "$Id$". *% cups-2.2.7/test/testps.ppd000664 000765 000024 00000021262 13255074424 016164 0ustar00msweetstaff000000 000000 *PPD-Adobe: "4.3" *% *% "$Id$" *% *% Test PS PPD file for CUPS. *% *% Copyright 2007-2011 by Apple Inc. *% Copyright 1997-2005 by Easy Software Products. *% *% These coded instructions, statements, and computer programs are the *% property of Apple Inc. 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 file is *% file is missing or damaged, see the license at "http://www.cups.org/". *% *FormatVersion: "4.3" *FileVersion: "1.1" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "TESTPS.PPD" *Manufacturer: "ESP" *Product: "(CUPS v1.1)" *ModelName: "Test PS Printer" *ShortNickName: "Test PS Printer" *NickName: "Test PS Printer CUPS v1.1" *PSVersion: "(3010.000) 550" *LanguageLevel: "3" *ColorDevice: True *DefaultColorSpace: RGB *FileSystem: False *Throughput: "1" *LandscapeOrientation: Plus90 *VariablePaperSize: False *TTRasterizer: Type42 *UIConstraints: *PageSize Executive *InputSlot Envelope *UIConstraints: *PageSize Letter *InputSlot Envelope *UIConstraints: *PageSize Legal *InputSlot Envelope *UIConstraints: *PageSize Tabloid *InputSlot Envelope *UIConstraints: *PageSize A3 *InputSlot Envelope *UIConstraints: *PageSize A4 *InputSlot Envelope *UIConstraints: *PageSize A5 *InputSlot Envelope *UIConstraints: *PageSize B5 *InputSlot Envelope *UIConstraints: *Resolution 600dpi *ColorModel CMYK *OpenUI *PageSize/Media Size: PickOne *OrderDependency: 10 AnySetup *PageSize *DefaultPageSize: Letter *PageSize Letter/US Letter: "<>setpagedevice" *PageSize Legal/US Legal: "<>setpagedevice" *PageSize Executive/US Executive: "<>setpagedevice" *PageSize Tabloid/US Tabloid: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" *PageSize A4/A4: "<>setpagedevice" *PageSize A5/A5: "<>setpagedevice" *PageSize B5/B5 (JIS): "<>setpagedevice" *PageSize EnvISOB5/Envelope B5: "<>setpagedevice" *PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize EnvC5/Envelope C5: "<>setpagedevice" *PageSize EnvDL/Envelope DL: "<>setpagedevice" *PageSize EnvMonarch/Envelope Monarch: "<>setpagedevice" *CloseUI: *PageSize *OpenUI *PageRegion: PickOne *OrderDependency: 10 AnySetup *PageRegion *DefaultPageRegion: Letter *PageRegion Letter/US Letter: "<>setpagedevice" *PageRegion Legal/US Legal: "<>setpagedevice" *PageRegion Executive/US Executive: "<>setpagedevice" *PageRegion Tabloid/US Tabloid: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" *PageRegion A4/A4: "<>setpagedevice" *PageRegion A5/A5: "<>setpagedevice" *PageRegion B5/B5 (JIS): "<>setpagedevice" *PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" *PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion EnvC5/Envelope C5: "<>setpagedevice" *PageRegion EnvDL/Envelope DL: "<>setpagedevice" *PageRegion EnvMonarch/Envelope Monarch: "<>setpagedevice" *CloseUI: *PageRegion *DefaultImageableArea: Letter *ImageableArea Letter/US Letter: "18 36 594 756" *ImageableArea Legal/US Legal: "18 36 594 972" *ImageableArea Executive/US Executive: "18 36 504 684" *ImageableArea Tabloid/US Tabloid: "18 36 774 1188" *ImageableArea A3/A3: "18 36 824 1155" *ImageableArea A4/A4: "18 36 577 806" *ImageableArea A5/A5: "18 36 403 559" *ImageableArea B5/JIS B5: "18 36 498 693" *ImageableArea EnvISOB5/B5 (ISO): "18 36 463 673" *ImageableArea Env10/Com-10: "18 36 279 648" *ImageableArea EnvC5/EnvC5: "18 36 441 613" *ImageableArea EnvDL/EnvDL: "18 36 294 588" *ImageableArea EnvMonarch/Envelope Monarch: "18 36 261 504" *DefaultPaperDimension: Letter *PaperDimension Letter/US Letter: "612 792" *PaperDimension Legal/US Legal: "612 1008" *PaperDimension Executive/US Executive: "522 756" *PaperDimension Tabloid/US Tabloid: "792 1224" *PaperDimension A3/A3: "842 1191" *PaperDimension A4/A4: "595 842" *PaperDimension A5/A5: "421 595" *PaperDimension B5/B5 (JIS): "516 729" *PaperDimension EnvISOB5/Envelope B5: "499 709" *PaperDimension Env10/Envelope #10: "297 684" *PaperDimension EnvC5/Envelope C5: "459 649" *PaperDimension EnvDL/Envelope DL: "312 624" *PaperDimension EnvMonarch/Envelope Monarch: "279 540" *OpenUI *MediaType/Media Type: PickOne *OrderDependency: 10 AnySetup *MediaType *DefaultMediaType: Plain *MediaType Plain/Plain Paper: "<>setpagedevice" *MediaType Bond/Bond Paper: "<>setpagedevice" *MediaType Special/Special Paper: "<>setpagedevice" *MediaType Transparency/Transparency: "<>setpagedevice" *MediaType Glossy/Glossy Paper: "<>setpagedevice" *CloseUI: *MediaType *OpenUI *InputSlot/Media Source: PickOne *OrderDependency: 10 AnySetup *InputSlot *DefaultInputSlot: Tray *InputSlot Tray/Tray: "<>setpagedevice" *InputSlot Manual/Manual Feed: "<>setpagedevice" *InputSlot Envelope/Envelope Feed: "<>setpagedevice" *CloseUI: *InputSlot *OpenUI *Resolution/Output Resolution: PickOne *OrderDependency: 20 AnySetup *Resolution *DefaultResolution: 100dpi *Resolution 75dpi/75 DPI: "<>setpagedevice" *Resolution 100dpi/100 DPI: "<>setpagedevice" *CloseUI: *Resolution *OpenUI *ColorModel/Output Mode: PickOne *OrderDependency: 10 AnySetup *ColorModel *DefaultColorModel: CMYK *ColorModel CMYK/CMYK Color: "<>setpagedevice" *ColorModel RGB/CMY Color: "<>setpagedevice" *ColorModel Gray/Grayscale: "<>setpagedevice" *CloseUI: *ColorModel *DefaultFont: Courier *Font AvantGarde-Book: Standard "(001.006S)" Standard ROM *Font AvantGarde-BookOblique: Standard "(001.006S)" Standard ROM *Font AvantGarde-Demi: Standard "(001.007S)" Standard ROM *Font AvantGarde-DemiOblique: Standard "(001.007S)" Standard ROM *Font Bookman-Demi: Standard "(001.004S)" Standard ROM *Font Bookman-DemiItalic: Standard "(001.004S)" Standard ROM *Font Bookman-Light: Standard "(001.004S)" Standard ROM *Font Bookman-LightItalic: Standard "(001.004S)" Standard ROM *Font Courier: Standard "(002.004S)" Standard ROM *Font Courier-Bold: Standard "(002.004S)" Standard ROM *Font Courier-BoldOblique: Standard "(002.004S)" Standard ROM *Font Courier-Oblique: Standard "(002.004S)" Standard ROM *Font Helvetica: Standard "(001.006S)" Standard ROM *Font Helvetica-Bold: Standard "(001.007S)" Standard ROM *Font Helvetica-BoldOblique: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow: Standard "(001.006S)" Standard ROM *Font Helvetica-Narrow-Bold: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow-BoldOblique: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow-Oblique: Standard "(001.006S)" Standard ROM *Font Helvetica-Oblique: Standard "(001.006S)" Standard ROM *Font NewCenturySchlbk-Bold: Standard "(001.009S)" Standard ROM *Font NewCenturySchlbk-BoldItalic: Standard "(001.007S)" Standard ROM *Font NewCenturySchlbk-Italic: Standard "(001.006S)" Standard ROM *Font NewCenturySchlbk-Roman: Standard "(001.007S)" Standard ROM *Font Palatino-Bold: Standard "(001.005S)" Standard ROM *Font Palatino-BoldItalic: Standard "(001.005S)" Standard ROM *Font Palatino-Italic: Standard "(001.005S)" Standard ROM *Font Palatino-Roman: Standard "(001.005S)" Standard ROM *Font Symbol: Special "(001.007S)" Special ROM *Font Times-Bold: Standard "(001.007S)" Standard ROM *Font Times-BoldItalic: Standard "(001.009S)" Standard ROM *Font Times-Italic: Standard "(001.007S)" Standard ROM *Font Times-Roman: Standard "(001.007S)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(001.007S)" Standard ROM *Font ZapfDingbats: Special "(001.004S)" Standard ROM *% *% End of "$Id$". *% cups-2.2.7/test/validate-job.test000664 000765 000024 00000001133 13255074424 017372 0ustar00msweetstaff000000 000000 # Validate a test page using Validate-Job { # The name of the test... NAME "Validate file/ticket using Validate-Job" # The operation to use OPERATION Validate-Job # Attributes, starting in the operation group... GROUP operation-attributes-tag ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri $uri ATTR name requesting-user-name $user ATTR mimeMediaType document-format $filetype GROUP job-attributes-tag ATTR integer copies 1 # What statuses are OK? STATUS successful-ok STATUS successful-ok-ignored-or-substituted-attributes } cups-2.2.7/test/waitjobs.sh000775 000765 000024 00000002025 13255074424 016312 0ustar00msweetstaff000000 000000 #!/bin/sh # # Script to wait for jobs to complete. # # Copyright 2008-2009 by Apple Inc. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # # Get timeout from command-line # if test $# = 1; then timeout=$1 else timeout=360 fi # # Figure out the proper echo options... # if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then ac_n=-n ac_c= else ac_n= ac_c='\c' fi echo $ac_n "Waiting for jobs to complete...$ac_c" oldjobs=0 while test $timeout -gt 0; do jobs=`../systemv/lpstat 2>/dev/null | wc -l | tr -d ' '` if test $jobs = 0; then break fi if test $jobs != $oldjobs; then echo $ac_n "$jobs...$ac_c" oldjobs=$jobs fi sleep 5 timeout=`expr $timeout - 5` done echo "" cups-2.2.7/templates/add-class.tmpl000664 000765 000024 00000002043 13255074424 017701 0ustar00msweetstaff000000 000000

    Add Class

    Name:
    (May contain any printable characters except "/", "#", and space)
    Description:
    (Human-readable description such as "HP LaserJet with Duplexer")
    Location:
    (Human-readable location such as "Lab 1")
    Members:
    cups-2.2.7/templates/add-printer.tmpl000664 000765 000024 00000003142 13255074424 020260 0ustar00msweetstaff000000 000000

    Add Printer

    {?current_make!?:} {?current_make_and_model!?:}
    Name:
    (May contain any printable characters except "/", "#", and space)
    Description:
    (Human-readable description such as "HP LaserJet with Duplexer")
    Location:
    (Human-readable location such as "Lab 1")
    Connection: {device_uri}
    Sharing: Share This Printer
    cups-2.2.7/templates/add-rss-subscription.tmpl000664 000765 000024 00000004507 13255074424 022134 0ustar00msweetstaff000000 000000

    Add RSS Subscription

    Name:
    (May contain any printable characters except space, "/", "?", and "#")
    Queue:
    Events: Job Created
    Job Completed
    Job Stopped
    Job Options Changed
         Queue Stopped
    Queue Added
    Queue Modified
    Queue Deleted
         Server Started
    Server Stopped
    Server Restarted
    Server Security Auditing
    Maximum Events in Feed:
    cups-2.2.7/templates/admin.tmpl000664 000765 000024 00000014160 13255074424 017141 0ustar00msweetstaff000000 000000

    RSS Subscriptions

    {notify_subscription_id?{[notify_subscription_id] }
    NameEventsQueue Name
    {notify_recipient_name}
     
    {notify_events} {notify_printer_name?{notify_printer_name}:All Queues}
    :}
    cups-2.2.7/templates/choose-device.tmpl000664 000765 000024 00000003235 13255074424 020567 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modify {printer_name}:Add Printer}

    {CUPS_GET_DEVICES_DONE?
    {printer_name?:} {op=add-printer?:}
    Current Connection\: {current_device_uri}
    Local Printers\: {[device_uri]{device_class!network? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    :}}
    Discovered Network Printers\: {[device_uri]{device_class=network?{device_uri~[a-z]+://? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    :}:}}
    Other Network Printers\: {[device_uri]{device_class=network?{device_uri~[a-z]+://?: {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    }:}}
    :

    Busy Indicator Looking for printers...

    } cups-2.2.7/templates/choose-make.tmpl000664 000765 000024 00000003543 13255074424 020247 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modify {printer_name}:Add Printer}

    {printer_name?:} {op=modify-printer?:}
    Name: {printer_name}
    Description: {printer_info}
    Location: {printer_location}
    Connection: {device_uri}
    Sharing: {?printer_is_shared=?Do Not:{?printer_is_shared=0?Do Not:}} Share This Printer
    Make:
     
    Or Provide a PPD File:
    cups-2.2.7/templates/choose-model.tmpl000664 000765 000024 00000004100 13255074424 020420 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modify {printer_name}:Add Printer}

    {printer_name?:} {op=modify-printer?:}
    Name: {printer_name}
    Description: {printer_info}
    Location: {printer_location}
    Connection: {device_uri}
    Sharing: {?printer_is_shared=?Do Not:{?printer_is_shared=0?Do Not:}} Share This Printer
    Make: {PPD_MAKE}
    Model:
    Or Provide a PPD File:
    cups-2.2.7/templates/choose-serial.tmpl000664 000765 000024 00000002565 13255074424 020614 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modify {printer_name}:Add Printer}

    {printer_name?:}
    Connection: {device_uri}
    Baud Rate:
    Parity:
    Data Bits:
    Flow Control:
    cups-2.2.7/templates/choose-uri.tmpl000664 000765 000024 00000002025 13255074424 020123 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modify {printer_name}:Add Printer}

    {printer_name?:}
    Connection:
    Examples:
        http://hostname:631/ipp/
        http://hostname:631/ipp/port1
    
        ipp://hostname/ipp/
        ipp://hostname/ipp/port1
    
        lpd://hostname/queue
    
        socket://hostname
        socket://hostname:9100
    

    See "Network Printers" for the correct URI to use with your printer.

    cups-2.2.7/templates/class-added.tmpl000664 000765 000024 00000000175 13255074424 020216 0ustar00msweetstaff000000 000000

    Add Class

    Class {printer_name} has been added successfully. cups-2.2.7/templates/class-confirm.tmpl000664 000765 000024 00000000663 13255074424 020614 0ustar00msweetstaff000000 000000

    Delete Class {printer_name}

    Warning: Are you sure you want to delete class {printer_name}?

    cups-2.2.7/templates/class-deleted.tmpl000664 000765 000024 00000000153 13255074424 020557 0ustar00msweetstaff000000 000000

    Delete Class {printer_name}

    Class {printer_name} has been deleted successfully. cups-2.2.7/templates/class-jobs-header.tmpl000664 000765 000024 00000000034 13255074424 021332 0ustar00msweetstaff000000 000000

    Jobs

    cups-2.2.7/templates/class-modified.tmpl000664 000765 000024 00000000222 13255074424 020726 0ustar00msweetstaff000000 000000

    Modify Class {printer_name}

    Class {printer_name} has been modified successfully. cups-2.2.7/templates/class.tmpl000664 000765 000024 00000004260 13255074424 017156 0ustar00msweetstaff000000 000000

    {printer_name} ({printer_state=3?Idle:{printer_state=4?Processing:Paused}}, {printer_is_accepting_jobs=0?Rejecting Jobs:Accepting Jobs}, {server_is_sharing_printers=0?Not:{printer_is_shared=0?Not:}} Shared{default_name={printer_name}?, Server Default:})

    Description:{printer_info}
    Location:{printer_location}
    Members:{?member_uris=?None:{member_uris}}
    Defaults:job-sheets={job_sheets_default} media={media_default?{media_default}:unknown} {sides_default?sides={sides_default}:}
    cups-2.2.7/templates/classes-header.tmpl000664 000765 000024 00000000142 13255074424 020727 0ustar00msweetstaff000000 000000

    {total=0?No classes:Showing {#printer_name} of {total} class{total=1?:es}}.

    cups-2.2.7/templates/classes.tmpl000664 000765 000024 00000000776 13255074424 017516 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
    Queue NameDescriptionLocationMembersStatus
    {printer_name}{printer_info}{printer_location}{?member_uris=?None:{member_uris}}{printer_state=3?Idle:{printer_state=4?Processing:Paused}}{printer_state_message? - "{printer_state_message}":}

    Printers

    {have_samba?
    :}

    Classes

    Jobs

    Server

    {SETTINGS_ERROR?

    {SETTINGS_MESSAGE}

    {SETTINGS_ERROR}
    :
    {ADVANCEDSETTINGS?

    Server Settings\:

    Advanced
    Share printers connected to this system
            Max clients\:
             Allow printing from the Internet
             Advertise web interface
    Allow remote administration
    {have_gssapi? Use Kerberos authentication (FAQ)
    :} Allow users to cancel any job (not just their own)
    Preserve job history
            Maximum jobs (0 for no limit)\:
            Retain Metadata\:
            Retain Documents\:
    Save debugging information for troubleshooting
            Max log file size\:

    :

    Server Settings:

    Advanced
    Share printers connected to this system
             Allow printing from the Internet
    Allow remote administration
    {have_gssapi? Use Kerberos authentication (FAQ)
    :} Allow users to cancel any job (not just their own)
    Save debugging information for troubleshooting

    }

    }
    } cups-2.2.7/templates/command.tmpl000664 000765 000024 00000000634 13255074424 017470 0ustar00msweetstaff000000 000000

    {title} On {printer_name}

    {job_state>5?:Busy Indicator }Printer command job {job_state=3?pending:{job_state=4?held: {job_state=5?processing:{job_state=6?stopped: {job_state=7?canceled:{job_state=8?aborted:completed}}}}}}{job_state=9?:{job_printer_state_message?, "{job_printer_state_message}":}}

    cups-2.2.7/templates/de/000775 000765 000024 00000000000 13255074424 015541 5ustar00msweetstaff000000 000000 cups-2.2.7/templates/edit-config.tmpl000664 000765 000024 00000001110 13255074424 020230 0ustar00msweetstaff000000 000000

    Edit Configuration File

    cups-2.2.7/templates/error-op.tmpl000664 000765 000024 00000000171 13255074424 017613 0ustar00msweetstaff000000 000000

    {?title} {?printer_name} Error

    Error:

    Unknown operation "{op}"!
    cups-2.2.7/templates/error.tmpl000664 000765 000024 00000000174 13255074424 017202 0ustar00msweetstaff000000 000000

    {?title} {?printer_name} Error

    {?message?{message}:Error}:

    {error}
    cups-2.2.7/templates/es/000775 000765 000024 00000000000 13255074424 015560 5ustar00msweetstaff000000 000000 cups-2.2.7/templates/fr/000775 000765 000024 00000000000 13255074424 015560 5ustar00msweetstaff000000 000000 cups-2.2.7/templates/header.tmpl.in000664 000765 000024 00000003312 13255074424 017703 0ustar00msweetstaff000000 000000 {refresh_page?:} {title} - CUPS @CUPS_VERSION@@CUPS_REVISION@

    {title}

    cups-2.2.7/templates/help-header.tmpl000664 000765 000024 00000003204 13255074424 020224 0ustar00msweetstaff000000 000000
    {TOPIC?:}

    Search in {HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:All Documents}}:

    {QUERY?

    Search Results in {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:All Documents}}\:

    {QTEXT?:} :

    No matches found.

    }
    :} {HELPTITLE?
    :

    Online Help

    This is the CUPS online help interface. Enter search words above or click on any of the documentation links to display online help information.

    If you are new to CUPS, read the "Overview of CUPS" page.

    The CUPS home page also provides many resources including user discussion forums, answers to frequently-asked questions, and a form for submitting bug reports and feature requests.

    } cups-2.2.7/templates/help-printable.tmpl000664 000765 000024 00000000562 13255074424 020760 0ustar00msweetstaff000000 000000 {HELPTITLE} cups-2.2.7/templates/help-trailer.tmpl000664 000765 000024 00000000000 13255074424 020425 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/ja/000775 000765 000024 00000000000 13255074424 015543 5ustar00msweetstaff000000 000000 cups-2.2.7/templates/job-cancel.tmpl000664 000765 000024 00000000157 13255074424 020047 0ustar00msweetstaff000000 000000

    Cancel Job {job_id}

    Job {job_id} has been canceled. cups-2.2.7/templates/job-hold.tmpl000664 000765 000024 00000000167 13255074424 017551 0ustar00msweetstaff000000 000000

    Hold Job {job_id}

    Job {job_id} has been held from printing. cups-2.2.7/templates/job-move.tmpl000664 000765 000024 00000001136 13255074424 017566 0ustar00msweetstaff000000 000000

    {job_id?:}

    {job_id?Move Job {job_id}:Move All Jobs}

    New Destination:
    cups-2.2.7/templates/job-moved.tmpl000664 000765 000024 00000000337 13255074424 017734 0ustar00msweetstaff000000 000000

    {job_id?Move Job {job_id}:Move All Jobs}

    {job_id?Job {job_id}:All jobs} moved to {job_printer_name}.

    cups-2.2.7/templates/job-release.tmpl000664 000765 000024 00000000175 13255074424 020242 0ustar00msweetstaff000000 000000

    Release Job {job_id}

    Job {job_id} has been released for printing. cups-2.2.7/templates/job-restart.tmpl000664 000765 000024 00000000161 13255074424 020301 0ustar00msweetstaff000000 000000

    Reprint Job {job_id}

    Job {job_id} has been restarted. cups-2.2.7/templates/jobs-header.tmpl000664 000765 000024 00000001324 13255074424 020232 0ustar00msweetstaff000000 000000 {?which_jobs=?:

    } {?which_jobs=completed?:
    } {?which_jobs=all?:
    }

    {?which_jobs=?Jobs listed in print order; held jobs appear first.:{which_jobs=Jobs listed in ascending order.?:Jobs listed in descending order.}}

    cups-2.2.7/templates/jobs.tmpl000664 000765 000024 00000005250 13255074424 017006 0ustar00msweetstaff000000 000000 {#job_id=0?: {[job_id] }
    IDNameUserSizePagesStateControl
    {job_printer_name}-{job_id}{?phone? ({phone}):}  {?job_name=?Unknown:{job_name}}  {?job_originating_user_name=?Withheld:{job_originating_user_name}}  {job_k_octets}k  {job_impressions_completed=0?Unknown:{?job_impressions_completed}}  {job_state=3?pending since
    {?time_at_creation=?Unknown:{time_at_creation}}:{job_state=4?held since
    {?time_at_creation=?Unknown:{time_at_creation}}: {job_state=5?processing since
    {?time_at_processing=?Unknown:{time_at_processing}}:{job_state=6?stopped: {job_state=7?canceled at
    {?time_at_completed=?Unknown:{time_at_completed}}:{job_state=8?aborted:completed at
    {?time_at_completed=?Unknown:{time_at_completed}}}}}}}} {job_printer_state_message?
    "{job_printer_state_message}":}
    {job_preserved>0?{job_state>5?
    :}:} {job_state=4?
    :} {job_state=3?
    :} {job_state<7?
    :}  
    } cups-2.2.7/templates/list-available-printers.tmpl000664 000765 000024 00000001171 13255074424 022604 0ustar00msweetstaff000000 000000

    Available Printers

    {#device_uri=0?

    No printers found.

    :
      {[device_uri]
    • {device_make_and_model} ({device_info})
    • }
    } cups-2.2.7/templates/Makefile000664 000765 000024 00000006456 13255074424 016624 0ustar00msweetstaff000000 000000 # # Template makefile for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 1993-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include ../Makedefs # # Template files... # FILES = \ add-class.tmpl \ add-printer.tmpl \ add-rss-subscription.tmpl \ admin.tmpl \ choose-device.tmpl \ choose-make.tmpl \ choose-model.tmpl \ choose-serial.tmpl \ choose-uri.tmpl \ class.tmpl \ class-added.tmpl \ class-confirm.tmpl \ class-deleted.tmpl \ class-jobs-header.tmpl \ class-modified.tmpl \ classes.tmpl \ classes-header.tmpl \ command.tmpl \ edit-config.tmpl \ error.tmpl \ error-op.tmpl \ header.tmpl \ help-header.tmpl \ help-trailer.tmpl \ help-printable.tmpl \ job-cancel.tmpl \ job-hold.tmpl \ job-move.tmpl \ job-moved.tmpl \ job-release.tmpl \ job-restart.tmpl \ jobs.tmpl \ jobs-header.tmpl \ list-available-printers.tmpl \ modify-class.tmpl \ modify-printer.tmpl \ norestart.tmpl \ option-boolean.tmpl \ option-conflict.tmpl \ option-header.tmpl \ option-pickmany.tmpl \ option-pickone.tmpl \ option-trailer.tmpl \ pager.tmpl \ printer.tmpl \ printer-accept.tmpl \ printer-added.tmpl \ printer-cancel-jobs.tmpl \ printer-configured.tmpl \ printer-confirm.tmpl \ printer-default.tmpl \ printer-deleted.tmpl \ printer-jobs-header.tmpl \ printer-modified.tmpl \ printer-reject.tmpl \ printer-start.tmpl \ printer-stop.tmpl \ printers.tmpl \ printers-header.tmpl \ restart.tmpl \ samba-export.tmpl \ samba-exported.tmpl \ search.tmpl \ set-printer-options-header.tmpl \ set-printer-options-trailer.tmpl \ subscription-added.tmpl \ subscription-canceled.tmpl \ test-page.tmpl \ trailer.tmpl \ users.tmpl # # Make everything... # all: # # Make library targets... # libs: # # Make unit tests... # unittests: # # Clean all config and object files... # clean: # # Dummy depend... # depend: # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: $(INSTALL_LANGUAGES) $(INSTALL_DIR) -m 755 $(DATADIR)/templates for file in $(FILES); do \ $(INSTALL_DATA) $$file $(DATADIR)/templates; \ done install-languages: for lang in $(LANGUAGES); do \ if test -d $$lang; then \ $(INSTALL_DIR) -m 755 $(DATADIR)/templates/$$lang; \ for file in $(FILES); do \ $(INSTALL_DATA) $$lang/$$file $(DATADIR)/templates/$$lang >/dev/null 2>&1 || true; \ done \ fi \ done install-langbundle: # # Install programs... # install-exec: # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Uninstall files... # uninstall: $(UNINSTALL_LANGUAGES) for file in $(FILES); do \ $(RM) $(DATADIR)/templates/$$file; \ done -$(RMDIR) $(DATADIR)/templates uninstall-languages: for lang in $(LANGUAGES); do \ for file in $(FILES); do \ $(RM) $(DATADIR)/templates/$$lang/$$file; \ done \ $(RMDIR) $(DATADIR)/templates/$$lang; \ done uninstall-langbundle: cups-2.2.7/templates/modify-class.tmpl000664 000765 000024 00000001524 13255074424 020443 0ustar00msweetstaff000000 000000

    Modify Class {printer_name}

    Description:
    Location:
    Members:
    cups-2.2.7/templates/modify-printer.tmpl000664 000765 000024 00000002415 13255074424 021021 0ustar00msweetstaff000000 000000

    Modify {printer_name}

    Description:
    (Human-readable description such as "HP LaserJet with Duplexer")
    Location:
    (Human-readable location such as "Lab 1")
    Connection: {device_uri}
    Sharing: Share This Printer
    cups-2.2.7/templates/norestart.tmpl000664 000765 000024 00000000201 13255074424 020061 0ustar00msweetstaff000000 000000

    Change Settings

    The server was not restarted because no changes were made to the configuration...

    cups-2.2.7/templates/option-boolean.tmpl000664 000765 000024 00000000350 13255074424 020772 0ustar00msweetstaff000000 000000 {keytext}: {[choices]{text}} cups-2.2.7/templates/option-conflict.tmpl000664 000765 000024 00000000330 13255074424 021152 0ustar00msweetstaff000000 000000

    Error: The following options are conflicting:

    Please change one or more of the options to resolve the conflicts.

    cups-2.2.7/templates/option-header.tmpl000664 000765 000024 00000000131 13255074424 020600 0ustar00msweetstaff000000 000000

    {group}

    cups-2.2.7/templates/option-pickmany.tmpl000664 000765 000024 00000000377 13255074424 021177 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/option-pickone.tmpl000664 000765 000024 00000001665 13255074424 021015 0ustar00msweetstaff000000 000000 :} cups-2.2.7/templates/option-trailer.tmpl000664 000765 000024 00000000131 13255074424 021012 0ustar00msweetstaff000000 000000
    {keytext}:
    {keytext}: {iscustom=1?{[params] }
    {paramtext}: {params=Units?:}

    cups-2.2.7/templates/pager.tmpl000664 000765 000024 00000002347 13255074424 017153 0ustar00msweetstaff000000 000000
    {PREV?{PREV>0?
    :}
    : }
    {NEXT?
    : } {LAST?
    :}
    cups-2.2.7/templates/printer-accept.tmpl000664 000765 000024 00000000317 13255074424 020770 0ustar00msweetstaff000000 000000

    Accept Jobs On {is_class?Class:Printer} {printer_name}

    {is_class?Class:Printer} {printer_name} is now accepting jobs.

    cups-2.2.7/templates/printer-added.tmpl000664 000765 000024 00000000202 13255074424 020563 0ustar00msweetstaff000000 000000

    Add Printer

    Printer {printer_name} has been added successfully. cups-2.2.7/templates/printer-cancel-jobs.tmpl000664 000765 000024 00000000330 13255074424 021704 0ustar00msweetstaff000000 000000

    Cancel Jobs On {is_class?Class:Printer} {printer_name}

    All jobs on {is_class?class:printer} {printer_name} have been canceled.

    cups-2.2.7/templates/printer-configured.tmpl000664 000765 000024 00000000354 13255074424 021657 0ustar00msweetstaff000000 000000

    Set Default Options for {printer_name}

    {OP=set-class-options?Class :Printer }{printer_name} default options have been set successfully. cups-2.2.7/templates/printer-confirm.tmpl000664 000765 000024 00000000673 13255074424 021173 0ustar00msweetstaff000000 000000

    Delete Printer {printer_name}

    Warning: Are you sure you want to delete printer {printer_name}?

    cups-2.2.7/templates/printer-default.tmpl000664 000765 000024 00000000572 13255074424 021160 0ustar00msweetstaff000000 000000

    Set {is_class?Class:Printer} {printer_name} As Default

    {is_class?Class:Printer} {printer_name} has been made the default printer on the server.

    Note: Any user default that has been set via the lpoptions command will override this default setting.
    cups-2.2.7/templates/printer-deleted.tmpl000664 000765 000024 00000000157 13255074424 021141 0ustar00msweetstaff000000 000000

    Delete Printer {printer_name}

    Printer {printer_name} has been deleted successfully. cups-2.2.7/templates/printer-jobs-header.tmpl000664 000765 000024 00000000034 13255074424 021710 0ustar00msweetstaff000000 000000

    Jobs

    cups-2.2.7/templates/printer-modified.tmpl000664 000765 000024 00000000227 13255074424 021311 0ustar00msweetstaff000000 000000

    Modify Printer {printer_name}

    Printer {printer_name} has been modified successfully. cups-2.2.7/templates/printer-reject.tmpl000664 000765 000024 00000000325 13255074424 021004 0ustar00msweetstaff000000 000000

    Reject Jobs On {is_class?Class:Printer} {printer_name}

    {is_class?Class:Printer} {printer_name} is no longer accepting jobs.

    cups-2.2.7/templates/printer-start.tmpl000664 000765 000024 00000000302 13255074424 020660 0ustar00msweetstaff000000 000000

    Resume {is_class?Class:Printer} {printer_name}

    {is_class?Class:Printer} {printer_name} has been resumed.

    cups-2.2.7/templates/printer-stop.tmpl000664 000765 000024 00000000300 13255074424 020506 0ustar00msweetstaff000000 000000

    Pause {is_class?Class:Printer} {printer_name}

    {is_class?Class:Printer} {printer_name} has been paused.

    cups-2.2.7/templates/printer.tmpl000664 000765 000024 00000004751 13255074424 017541 0ustar00msweetstaff000000 000000

    {printer_name} ({printer_state=3?Idle:{printer_state=4?Processing:Paused}}, {printer_is_accepting_jobs=0?Rejecting Jobs:Accepting Jobs}, {server_is_sharing_printers=0?Not:{printer_is_shared=0?Not:}} Shared{default_name={printer_name}?, Server Default:})

    Description:{printer_info}
    Location:{printer_location}
    Driver:{printer_make_and_model} ({color_supported=1?color:grayscale}{sides_supported=one-sided?:, 2-sided printing})
    Connection:{device_uri}
    Defaults:job-sheets={job_sheets_default} media={media_default?{media_default}:unknown} {sides_default?sides={sides_default}:}
    cups-2.2.7/templates/printers-header.tmpl000664 000765 000024 00000000144 13255074424 021142 0ustar00msweetstaff000000 000000

    {total=0?No printers:Showing {#printer_name} of {total} printer{total=1?:s}}.

    cups-2.2.7/templates/printers.tmpl000664 000765 000024 00000000775 13255074424 017726 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
    Queue NameDescriptionLocationMake and ModelStatus
    {printer_name}{printer_info}{printer_location}{printer_make_and_model}{printer_state=3?Idle:{printer_state=4?Processing:Paused}}{printer_state_message? - "{printer_state_message}":}
    } cups-2.2.7/templates/pt_BR/000775 000765 000024 00000000000 13255074424 016157 5ustar00msweetstaff000000 000000 cups-2.2.7/templates/restart.tmpl000664 000765 000024 00000005055 13255074424 017540 0ustar00msweetstaff000000 000000

    Change Settings

    Busy Indicator Please stand by while the server restarts...

    cups-2.2.7/templates/ru/000775 000765 000024 00000000000 13255074424 015577 5ustar00msweetstaff000000 000000 cups-2.2.7/templates/samba-export.tmpl000664 000765 000024 00000003315 13255074424 020453 0ustar00msweetstaff000000 000000

    Export Printers to Samba

    {error?

    Unable to export printers to Samba\:

    {error}

    Consult the error_log file for more information.

    :

    This page allows you to export printers to Samba so that Windows clients can access them through the Network Neighborhood or Network Places icons on their desktop. You must previously install the Windows PostScript printer drivers as described in the cupsaddsmb(8) man page.

    }
    Printers:
    Export All Printers
    Samba Username: (required)
    Samba Password: (required)
    cups-2.2.7/templates/samba-exported.tmpl000664 000765 000024 00000000060 13255074424 020756 0ustar00msweetstaff000000 000000

    Printers exported to samba successfully.

    cups-2.2.7/templates/search.tmpl000664 000765 000024 00000001022 13255074424 017307 0ustar00msweetstaff000000 000000
    {WHICH_JOBS?:} {ORDER?:}

    Search in {SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?Classes:{SECTION=jobs?Jobs:Printers}}}:

    cups-2.2.7/templates/set-printer-options-header.tmpl000664 000765 000024 00000001475 13255074424 023251 0ustar00msweetstaff000000 000000

    Set Default Options for {printer_name}

    {HAVE_AUTOCONFIGURE?:}

    {[group_id] {group}     }

    cups-2.2.7/templates/set-printer-options-trailer.tmpl000664 000765 000024 00000000701 13255074424 023452 0ustar00msweetstaff000000 000000
    cups-2.2.7/templates/subscription-added.tmpl000664 000765 000024 00000000105 13255074424 021626 0ustar00msweetstaff000000 000000

    Subscription {subscription_name} has been added successfully.

    cups-2.2.7/templates/subscription-canceled.tmpl000664 000765 000024 00000000101 13255074424 022317 0ustar00msweetstaff000000 000000

    Subscription #{notify_subscription_id} has been canceled.

    cups-2.2.7/templates/test-page.tmpl000664 000765 000024 00000000235 13255074424 017740 0ustar00msweetstaff000000 000000

    Print Test Page On {printer_name}

    Test page sent; job ID is {printer_name}-{job_id}.

    cups-2.2.7/templates/trailer.tmpl000664 000765 000024 00000000332 13255074424 017507 0ustar00msweetstaff000000 000000
    cups-2.2.7/templates/users.tmpl000664 000765 000024 00000001575 13255074424 017220 0ustar00msweetstaff000000 000000
    {IS_CLASS?:}

    Allowed Users For {printer_name}

    Users:
    Allow these users to print Prevent these users from printing
    cups-2.2.7/templates/ru/add-class.tmpl000664 000765 000024 00000002365 13255074424 020336 0ustar00msweetstaff000000 000000

    ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°

    Ðазвание:
    (может Ñодержать любые Ñимволы, кроме "/", "#" и пробела)
    ОпиÑание:
    (РаÑширенное опиÑание группы, например, "ДуплекÑный принтер")
    РаÑположение:
    (МеÑтораÑположение группы, например, "Кабинет 55")
    СоÑтав группы:
    cups-2.2.7/templates/ru/add-printer.tmpl000664 000765 000024 00000003622 13255074424 020711 0ustar00msweetstaff000000 000000

    Добавление принтера

    {?current_make!?:} {?current_make_and_model!?:}
    Ðазвание:
    (может Ñодержать любые Ñимволы, кроме "/","#" и пробела)
    ОпиÑание:
    (раÑширенное опиÑание, например, "HP LaserJet Ñ Ð´ÑƒÐ¿Ð»ÐµÐºÑной печатью")
    РаÑположение:
    (меÑтораÑположение принтера, например, "Кабинет 55")
    Подключение: {device_uri}
    СовмеÑтный доÑтуп: Разрешить ÑовмеÑтный доÑтуп к Ñтому принтеру
    cups-2.2.7/templates/ru/add-rss-subscription.tmpl000664 000765 000024 00000005353 13255074424 022562 0ustar00msweetstaff000000 000000

    Добавление подпиÑки по RSS

    Ðазвание:
    (Может Ñодержать любые Ñимволы, кроме "/", "#", "?" и пробела)
    Очередь:
    СобытиÑ: Ðовое задание
    Задание выполнено
    Задание оÑтановлено
    Изменены параметры заданиÑ
         Очередь оÑтановлена
    Очередь добавлена
    Очередь изменена
    Очередь удалена
         Сервер запущен
    Сервер оÑтановлен
    Сервер перезапущен
    Проверка безопаÑноÑти Ñервера
    КоличеÑтво Ñобытий в ленте:
    cups-2.2.7/templates/ru/admin.tmpl000664 000765 000024 00000016722 13255074424 017575 0ustar00msweetstaff000000 000000

    Принтеры

    {have_samba?
    :}

    Группы

    ЗаданиÑ

    Сервер

    {SETTINGS_ERROR?

    {SETTINGS_MESSAGE}

    {SETTINGS_ERROR}
    :
    {ADVANCEDSETTINGS?

    Параметры Ñервера\:

    Дополнительные параметры
    Разрешить ÑовмеÑтный доÑтуп к принтерам, подключенным к Ñтой ÑиÑтеме
            ÐœÐ°ÐºÑимум клиентов\:
             Разрешить печать из интернет
             Разрешить доÑтуп через веб-интерфейÑ
    Разрешить удаленное админиÑтрирование
    {have_gssapi? Разрешить аутентификацию Kerberos (FAQ)
    :} Разрешать пользователÑм отменÑть любое задание(не только их ÑобÑтвенные)
    ВеÑти журнал заданий
            ÐšÐ¾Ð»Ð¸Ñ‡ÐµÑтво заданий (0 без ограничений)\:
            Ð—апиÑывать метаданные(Retain Metadata)\:
            Ð¡ÑƒÑ‰ÐµÑтвующие документы(Retain Documents)\:
    СохранÑть отладочную информацию в журнале
            ÐœÐ°ÐºÑимальный размер журнала\:

    :

    Параметры Ñервера:

    Дополнительные параметры
    Разрешить ÑовмеÑтный доÑтуп к принтерам, подключенным к Ñтой ÑиÑтеме
             Разрешить печать из интернет
    Разрешить удаленное админиÑтрирование
    {have_gssapi? Разрешить аутентификацию Kerberos (FAQ)
    :} Разрешить пользователÑм отменÑть любое задание(не только их ÑобÑтвенные)
    СохранÑть отладочную информацию в журнале

    }

    }

    ПодпиÑка по RSS

    {notify_subscription_id?{[notify_subscription_id] }
    ÐазваниеСобытиÑОчередь
    {notify_recipient_name}
     
    {notify_events} {notify_printer_name?{notify_printer_name}:Ð’Ñе очереди}
    :}
    cups-2.2.7/templates/ru/choose-device.tmpl000664 000765 000024 00000003461 13255074424 021216 0ustar00msweetstaff000000 000000

    {op=modify-printer?Изменение {printer_name}:Добавление принтера}

    {CUPS_GET_DEVICES_DONE?
    {printer_name?:} {op=add-printer?:}
    Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½\: {current_device_uri}
    УÑтановленные принтеры\: {[device_uri]{device_class!network? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    :}}
    Ðайденные Ñетевые принтеры\: {[device_uri]{device_class=network?{device_uri~[a-z]+://? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    :}:}}
    Другие Ñетевые принтеры\: {[device_uri]{device_class=network?{device_uri~[a-z]+://?: {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    }:}}
    :

    Ожидание ПоиÑк принтеров...

    } cups-2.2.7/templates/ru/choose-make.tmpl000664 000765 000024 00000004241 13255074424 020671 0ustar00msweetstaff000000 000000

    {op=modify-printer?Изменение {printer_name}:Добавление принтера}

    {printer_name?:} {op=modify-printer?:}
    Ðазвание: {printer_name}
    ОпиÑание: {printer_info}
    РаÑположение: {printer_location}
    Подключение: {device_uri}
    СовмеÑтный доÑтуп: {?printer_is_shared=?Ðет ÑовмеÑтного доÑтупа:{?printer_is_shared=0?Ðет ÑовмеÑтного доÑтупа:Разрешить ÑовмеÑтный доÑтуп}} к Ñтому принтеру
    Создать:
     
    или иÑпользовать файл PPD:
    cups-2.2.7/templates/ru/choose-model.tmpl000664 000765 000024 00000004620 13255074424 021055 0ustar00msweetstaff000000 000000

    {op=modify-printer?Изменение {printer_name}:Добавление принтера}

    {printer_name?:} {op=modify-printer?:}
    Ðазвание: {printer_name}
    ОпиÑание: {printer_info}
    РаÑположение: {printer_location}
    Подключение: {device_uri}
    СовмеÑтный доÑтуп: {?printer_is_shared=?Ðет ÑовмеÑтного доÑтупа:{?printer_is_shared=0?Ðет ÑовмеÑтного доÑтупа:Разрешить ÑовмеÑтный доÑтуп}} к Ñтому принтеру
    Создать: {PPD_MAKE}
    Модель:
    или иÑпользовать файл PPD:
    cups-2.2.7/templates/ru/choose-serial.tmpl000664 000765 000024 00000003021 13255074424 021226 0ustar00msweetstaff000000 000000

    {op=modify-printer?Изменение {printer_name}:Добавление принтера}

    {printer_name?:}
    Подключение: {device_uri}
    СкороÑть передачи:
    ЧетноÑть:
    Биты данных:
    Управление:
    cups-2.2.7/templates/ru/choose-uri.tmpl000664 000765 000024 00000002261 13255074424 020553 0ustar00msweetstaff000000 000000

    {op=modify-printer?Изменение {printer_name}:Добавление принтера}

    {printer_name?:}
    Подключение:
    Примеры:
        http://hostname:631/ipp/
        http://hostname:631/ipp/port1
    
        ipp://hostname/ipp/
        ipp://hostname/ipp/port1
    
        lpd://hostname/queue
    
        socket://hostname
        socket://hostname:9100
    

    Смотрите раздел "Сетевые принтеры" Ð´Ð»Ñ Ð²Ñ‹ÑÑÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð³Ð¾ адреÑа вашего принтера.

    cups-2.2.7/templates/ru/class-added.tmpl000664 000765 000024 00000000230 13255074424 020634 0ustar00msweetstaff000000 000000

    ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°

    Группа {printer_name} уÑпешно добавлена. cups-2.2.7/templates/ru/class-confirm.tmpl000664 000765 000024 00000001013 13255074424 021230 0ustar00msweetstaff000000 000000

    Удаление группы {printer_name}

    Предупреждение: Ð’Ñ‹ дейÑтвительно хотите удалить группу {printer_name}?

    cups-2.2.7/templates/ru/class-deleted.tmpl000664 000765 000024 00000000203 13255074424 021201 0ustar00msweetstaff000000 000000

    Удаление группы {printer_name}

    Группа {printer_name} уÑпешно удалена. cups-2.2.7/templates/ru/class-jobs-header.tmpl000664 000765 000024 00000000046 13255074424 021763 0ustar00msweetstaff000000 000000

    ЗаданиÑ

    cups-2.2.7/templates/ru/class-modified.tmpl000664 000765 000024 00000000255 13255074424 021362 0ustar00msweetstaff000000 000000

    Изменение группы {printer_name}

    Группа {printer_name} уÑпешно изменена. cups-2.2.7/templates/ru/class.tmpl000664 000765 000024 00000005516 13255074424 017611 0ustar00msweetstaff000000 000000

    {printer_name} ({printer_state=3?ожидает:{printer_state=4?печать:приоÑтановлен}}, {printer_is_accepting_jobs=0?не принимает заданиÑ:принимает заданиÑ}, {server_is_sharing_printers=0?нет ÑовмеÑтного доÑтупа:{printer_is_shared=0?нет ÑовмеÑтного доÑтупа:разрешен ÑовмеÑтный доÑтуп}} {default_name={printer_name}?, Сервер по умолчанию:})

    ОпиÑание:{printer_info}
    РаÑположение:{printer_location}
    СоÑтав:{?member_uris=?Ðет принтеров:{member_uris}}
    По умолчанию:job-sheets={job_sheets_default} media={media_default?{media_default}:неизвеÑтный} {sides_default?sides={sides_default}:}
    cups-2.2.7/templates/ru/classes-header.tmpl000664 000765 000024 00000000173 13255074424 021361 0ustar00msweetstaff000000 000000

    {total=0?Ðет групп:Показать {#printer_name} из {total} группы{total=1?:es}}.

    cups-2.2.7/templates/ru/classes.tmpl000664 000765 000024 00000001162 13255074424 020132 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
    ÐаименованиеОпиÑаниеРаÑположениеСоÑтавСтатуÑ
    {printer_name}{printer_info}{printer_location}{?member_uris=?Ðет принтеров:{member_uris}}{printer_state=3?ожидает:{printer_state=4?печатает:приоÑтановлен}}{printer_state_message? - "{printer_state_message}":}
    } cups-2.2.7/templates/ru/command.tmpl000664 000765 000024 00000001011 13255074424 020104 0ustar00msweetstaff000000 000000

    {title} Ð´Ð»Ñ {printer_name}

    {job_state>5?:Ожидание }Обработка Ð·Ð°Ð´Ð°Ð½Ð¸Ñ {job_state=3?в очереди:{job_state=4?удерживаетÑÑ: {job_state=5?обрабатываетÑÑ:{job_state=6?оÑтановлено: {job_state=7?отменено:{job_state=8?прервано:завершено}}}}}}{job_state=9?:{job_printer_state_message?, "{job_printer_state_message}":}}

    cups-2.2.7/templates/ru/edit-config.tmpl000664 000765 000024 00000001217 13255074424 020666 0ustar00msweetstaff000000 000000

    Редактирование файла конфигурации

    cups-2.2.7/templates/ru/error-op.tmpl000664 000765 000024 00000000240 13255074424 020236 0ustar00msweetstaff000000 000000

    {?title} {?printer_name} - ошибка

    Ошибка:

    ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ "{op}"!
    cups-2.2.7/templates/ru/error.tmpl000664 000765 000024 00000000214 13255074424 017623 0ustar00msweetstaff000000 000000

    {?title} {?printer_name} - ошибка

    {?message?{message}:Ошибка}:

    {error}
    cups-2.2.7/templates/ru/header.tmpl.in000664 000765 000024 00000003447 13255074424 020342 0ustar00msweetstaff000000 000000 {refresh_page?:} {title} - CUPS @CUPS_VERSION@@CUPS_REVISION@

    {title}

    cups-2.2.7/templates/ru/help-header.tmpl000664 000765 000024 00000004226 13255074424 020657 0ustar00msweetstaff000000 000000
    {TOPIC?:}

    ПоиÑк {HELPTITLE?в {HELPTITLE}:{TOPIC?в {TOPIC}:по Ñправке}}:

    {QUERY?

    Результаты поиÑка в {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:вÑей Ñправке}}\:

    {QTEXT?:} :

    Ðе найдено Ñовпадений.

    }
    :} {HELPTITLE?
    :

    Справка

    Это Ñправка CUPS. Введите выше Ñлова Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка в Ñправке и нажмите "ПоиÑк", чтобы показать результаты поиÑка.

    ЕÑли вы пока мало знакомы Ñ CUPS, прочтите раздел "Введение в CUPS". Опытные пользователи могут обратитьÑÑ Ðº разделу "Что нового в CUPS 1.6".

    Веб-Ñайт CUPS так же Ñодержит большое количеÑтво реÑурÑов Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ñ„Ð¾Ñ€ÑƒÐ¼, ответы на чаÑто задаваемые вопроÑÑ‹ и форму Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации ошибок и пожеланий.

    } cups-2.2.7/templates/ru/help-printable.tmpl000664 000765 000024 00000000562 13255074424 021406 0ustar00msweetstaff000000 000000 {HELPTITLE} cups-2.2.7/templates/ru/help-trailer.tmpl000664 000765 000024 00000000000 13255074424 021053 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/ru/job-cancel.tmpl000664 000765 000024 00000000212 13255074424 020465 0ustar00msweetstaff000000 000000

    Отмена Ð·Ð°Ð´Ð°Ð½Ð¸Ñ {job_id}

    Задание {job_id} отменено. cups-2.2.7/templates/ru/job-hold.tmpl000664 000765 000024 00000000242 13255074424 020171 0ustar00msweetstaff000000 000000

    ПриоÑтановка Ð·Ð°Ð´Ð°Ð½Ð¸Ñ {job_id}

    Задание {job_id} приоÑтановлено. cups-2.2.7/templates/ru/job-move.tmpl000664 000765 000024 00000001367 13255074424 020222 0ustar00msweetstaff000000 000000

    {job_id?:}

    {job_id?Перемещение Ð·Ð°Ð´Ð°Ð½Ð¸Ñ {job_id}:Перемещение вÑех заданий}

    ПеремеÑтить на принтер:
    cups-2.2.7/templates/ru/job-moved.tmpl000664 000765 000024 00000000523 13255074424 020357 0ustar00msweetstaff000000 000000

    {job_id?Перемещение Ð·Ð°Ð´Ð°Ð½Ð¸Ñ {job_id}:Перемещение вÑех заданий}

    {job_id?Задание {job_id}:Ð’Ñе заданиÑ} перемещены на {job_printer_name}.

    cups-2.2.7/templates/ru/job-release.tmpl000664 000765 000024 00000000250 13255074424 020662 0ustar00msweetstaff000000 000000

    Разблокирование Ð·Ð°Ð´Ð°Ð½Ð¸Ñ {job_id}

    Задание {job_id} разблокировано. cups-2.2.7/templates/ru/job-restart.tmpl000664 000765 000024 00000000237 13255074424 020733 0ustar00msweetstaff000000 000000

    ПерезапуÑк Ð·Ð°Ð´Ð°Ð½Ð¸Ñ {job_id}

    Задание {job_id} запущено заново. cups-2.2.7/templates/ru/jobs-header.tmpl000664 000765 000024 00000001460 13255074424 020661 0ustar00msweetstaff000000 000000 {?which_jobs=?:

    } {?which_jobs=completed?:
    } {?which_jobs=all?:
    }

    {?which_jobs=?Jobs listed in print order; held jobs appear first.:{which_jobs=Jobs listed in ascending order.?:Jobs listed in descending order.}}

    cups-2.2.7/templates/ru/jobs.tmpl000664 000765 000024 00000005676 13255074424 017450 0ustar00msweetstaff000000 000000 {#job_id=0?: {[job_id] }
    ÐомерÐазваниеПользовательРазмерСтраницСтатуÑУправление
    {job_printer_name}-{job_id}{?phone? ({phone}):}  {?job_name=?ÐеизвеÑтное:{job_name}}  {?job_originating_user_name=?ПриоÑтановлено пользователем:{job_originating_user_name}}  {job_k_octets}k  {job_impressions_completed=0?ÐеизвеÑтно:{?job_impressions_completed}}  {job_state=3?Ð’ очереди
    {?time_at_creation=?Unknown:{time_at_creation}}:{job_state=4?ПриоÑтановлено Ñ
    {?time_at_creation=?Unknown:{time_at_creation}}: {job_state=5?Создано
    {?time_at_processing=?Unknown:{time_at_processing}}:{job_state=6?ОÑтановлено: {job_state=7?Отменено
    {?time_at_completed=?Unknown:{time_at_completed}}:{job_state=8?Прервано:Завершено
    {?time_at_completed=?Unknown:{time_at_completed}}}}}}}} {job_printer_state_message?
    "{job_printer_state_message}":}
    {job_preserved>0?{job_state>5?
    :}:} {job_state=4?
    :} {job_state=3?
    :} {job_state<7?
    :}  
    } cups-2.2.7/templates/ru/list-available-printers.tmpl000664 000765 000024 00000001341 13255074424 023231 0ustar00msweetstaff000000 000000

    ДоÑтупные принтеры

    {#device_uri=0?

    Ðе обнаружено ни одного принтера.

    :
      {[device_uri]
    • {device_make_and_model} ({device_info})
    • }
    } cups-2.2.7/templates/ru/modify-class.tmpl000664 000765 000024 00000001637 13255074424 021076 0ustar00msweetstaff000000 000000

    Изменение группы {printer_name}

    ОпиÑание:
    РаÑположение:
    СоÑтав группы:
    cups-2.2.7/templates/ru/modify-printer.tmpl000664 000765 000024 00000003042 13255074424 021444 0ustar00msweetstaff000000 000000

    Изменение принтера {printer_name}

    ОпиÑание:
    (раÑширенное опиÑание принтера, например, "HP LaserJet Ñ Ð´ÑƒÐ¿Ð»ÐµÐºÑной печатью")
    РаÑположение:
    (меÑтоположение принтера, например, "Кабинет 55")
    Подключение: {device_uri}
    СовмеÑтный доÑтуп: Разрешить ÑовмеÑтный доÑтуп к Ñтому принтеру
    cups-2.2.7/templates/ru/norestart.tmpl000664 000765 000024 00000000324 13255074424 020515 0ustar00msweetstaff000000 000000

    Применение изменений

    Сервер не был перезапущен,поÑкольку не произошло изменений в конфигурации...

    cups-2.2.7/templates/ru/option-boolean.tmpl000664 000765 000024 00000000350 13255074424 021420 0ustar00msweetstaff000000 000000 {keytext}: {[choices]{text}} cups-2.2.7/templates/ru/option-conflict.tmpl000664 000765 000024 00000000475 13255074424 021612 0ustar00msweetstaff000000 000000

    Ошибка: Ñледующие параметры конфликтуют:

    Измените один или неÑколько параметров Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы избежать конфликта.

    cups-2.2.7/templates/ru/option-header.tmpl000664 000765 000024 00000000131 13255074424 021226 0ustar00msweetstaff000000 000000

    {group}

    cups-2.2.7/templates/ru/option-pickmany.tmpl000664 000765 000024 00000000377 13255074424 021625 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/ru/option-pickone.tmpl000664 000765 000024 00000001731 13255074424 021435 0ustar00msweetstaff000000 000000 :} cups-2.2.7/templates/ru/option-trailer.tmpl000664 000765 000024 00000000153 13255074424 021444 0ustar00msweetstaff000000 000000
    {keytext}:
    {keytext}: {iscustom=1?{[params] }
    {paramtext}: {params=Units?:}

    cups-2.2.7/templates/ru/pager.tmpl000664 000765 000024 00000002342 13255074424 017574 0ustar00msweetstaff000000 000000
    {PREV?{PREV>0?
    :}
    : }
    {NEXT?
    : } {LAST?
    :}
    cups-2.2.7/templates/ru/printer-accept.tmpl000664 000765 000024 00000000427 13255074424 021420 0ustar00msweetstaff000000 000000

    Прием заданий {is_class?в группу:на принтер} {printer_name}

    {is_class?Группа:Принтер} {printer_name} теперь принимает заданиÑ.

    cups-2.2.7/templates/ru/printer-added.tmpl000664 000765 000024 00000000241 13255074424 021214 0ustar00msweetstaff000000 000000

    Добавить принтер

    Принтер {printer_name} уÑпешно добавлен. cups-2.2.7/templates/ru/printer-cancel-jobs.tmpl000664 000765 000024 00000000404 13255074424 022334 0ustar00msweetstaff000000 000000

    Отмена заданий Ð´Ð»Ñ {is_class?Class:Printer} {printer_name}

    Ð’Ñе Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð´Ð»Ñ {is_class?class:printer} {printer_name} были отменены.

    cups-2.2.7/templates/ru/printer-configured.tmpl000664 000765 000024 00000000466 13255074424 022311 0ustar00msweetstaff000000 000000

    ÐаÑтройки по умолчанию Ð´Ð»Ñ {printer_name}

    {OP=set-class-options?Группа :Принтер }{printer_name} теперь иÑпользует параметры по умолчанию. cups-2.2.7/templates/ru/printer-confirm.tmpl000664 000765 000024 00000001025 13255074424 021611 0ustar00msweetstaff000000 000000

    Удаление принтера {printer_name}

    Предупреждение: вы дейÑтвительно хотите удалить принтер {printer_name}?

    cups-2.2.7/templates/ru/printer-default.tmpl000664 000765 000024 00000001015 13255074424 021577 0ustar00msweetstaff000000 000000

    УÑтановка {is_class?группы:принтера} {printer_name} по умолчанию

    {is_class?Группа:Принтер} {printer_name} уÑтановлены на Ñервере по умолчанию Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… заданий.

    ПримечаниÑ: вы можете переопределить Ñто поведение Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды lpoptions.
    cups-2.2.7/templates/ru/printer-deleted.tmpl000664 000765 000024 00000000207 13255074424 021563 0ustar00msweetstaff000000 000000

    Удаление принтера {printer_name}

    Принтер {printer_name} уÑпешно удален. cups-2.2.7/templates/ru/printer-jobs-header.tmpl000664 000765 000024 00000000046 13255074424 022341 0ustar00msweetstaff000000 000000

    ЗаданиÑ

    cups-2.2.7/templates/ru/printer-modified.tmpl000664 000765 000024 00000000310 13255074424 021730 0ustar00msweetstaff000000 000000

    Изменение принтера {printer_name}

    Параметры принтера {printer_name} уÑпешно изменены.cups-2.2.7/templates/ru/printer-reject.tmpl000664 000765 000024 00000000437 13255074424 021436 0ustar00msweetstaff000000 000000

    Отмена заданий Ð´Ð»Ñ {is_class?группы:принтера} {printer_name}

    {is_class?Группа:Принтер} {printer_name} больше не принимает заданиÑ.

    cups-2.2.7/templates/ru/printer-start.tmpl000664 000765 000024 00000000433 13255074424 021313 0ustar00msweetstaff000000 000000

    Возобновить работу {is_class?группы:принтера} {printer_name}

    {is_class?Группа:Принтер} {printer_name} теперь принимает заданиÑ.

    cups-2.2.7/templates/ru/printer-stop.tmpl000664 000765 000024 00000000464 13255074424 021147 0ustar00msweetstaff000000 000000

    ПриоÑтановить {is_class?группу:принтер} {printer_name}

    {is_class?Группа:Принтер} {printer_name} {is_class?была приоÑтановлена:был приоÑтановлен}.

    cups-2.2.7/templates/ru/printer.tmpl000664 000765 000024 00000006316 13255074424 020166 0ustar00msweetstaff000000 000000

    {printer_name} ({printer_state=3?ожидает:{printer_state=4?печать:приоÑтановлен}}, {printer_is_accepting_jobs=0?не принимает заданиÑ:принимает заданиÑ}, {server_is_sharing_printers=0?нет ÑовмеÑтного доÑтупа:{printer_is_shared=0?нет ÑовмеÑтного доÑтупа:разрешен ÑовмеÑтный доÑтуп}} {default_name={printer_name}?, По умолчанию:})

    ОпиÑание:{printer_info}
    РаÑположение:{printer_location}
    Драйвер:{printer_make_and_model} ({color_supported=1?цветной:черно-белый}{sides_supported=one-sided?:, дуплекÑÐ½Ð°Ñ Ð¿ÐµÑ‡Ð°Ñ‚ÑŒ})
    Подключение:{device_uri}
    По умолчанию:job-sheets={job_sheets_default} media={media_default?{media_default}:unknown} {sides_default?sides={sides_default}:}
    cups-2.2.7/templates/ru/printers-header.tmpl000664 000765 000024 00000000147 13255074424 021573 0ustar00msweetstaff000000 000000

    {total=0?Ðет принтеров:Принтер {#printer_name} из {total}}.

    cups-2.2.7/templates/ru/printers.tmpl000664 000765 000024 00000001135 13255074424 020343 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
    ÐаименованиеОпиÑаниеРаÑположениеДрайверСтатуÑ
    {printer_name}{printer_info}{printer_location}{printer_make_and_model}{printer_state=3?ожидает:{printer_state=4?печатает:приоÑтановлен}}{printer_state_message? - "{printer_state_message}":}
    } cups-2.2.7/templates/ru/restart.tmpl000664 000765 000024 00000005153 13255074424 020165 0ustar00msweetstaff000000 000000

    Применение изменений параметров

    Ожидание ДождитеÑÑŒ перезапуÑка Ñервера...

    cups-2.2.7/templates/ru/samba-export.tmpl000664 000765 000024 00000004273 13255074424 021105 0ustar00msweetstaff000000 000000

    ЭкÑпорт принтеров в Samba

    {error?

    Ðевозможно ÑкÑпортировать принтеры в Samba\:

    {error}

    ПоÑмотрите файл error_log Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ подробной информации.

    :

    Эта Ñтраница позволÑет добавить принтеры в Samba так, чтобы клиенты Windows могли получить доÑтуп к ним через значок Сетевое окружение или Сетевые Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð½Ð° их рабочем Ñтоле. Ð’Ñ‹ должны уÑтановить на Windows драйвер принтера PostScript как опиÑано на Ñтранице руководÑтва cupsaddsmb(8).

    }
    Принтеры:
    ЭкÑпортировать вÑе принтеры
    Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Samba: (обÑзательный параметр)
    Пароль Samba: (обÑзательный параметр)
    cups-2.2.7/templates/ru/samba-exported.tmpl000664 000765 000024 00000000116 13255074424 021406 0ustar00msweetstaff000000 000000

    Принтеры уÑпешно ÑкÑпортированы в Samba.

    cups-2.2.7/templates/ru/search.tmpl000664 000765 000024 00000001071 13255074424 017741 0ustar00msweetstaff000000 000000
    {WHICH_JOBS?:} {ORDER?:}

    ПоиÑк {SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?группы:{SECTION=jobs?заданиÑ:принтера}}}:

    cups-2.2.7/templates/ru/set-printer-options-header.tmpl000664 000765 000024 00000001634 13255074424 023674 0ustar00msweetstaff000000 000000

    УÑтановить параметры по умолчанию Ð´Ð»Ñ {printer_name}

    {HAVE_AUTOCONFIGURE?:}

    {[group_id] {group}     }

    cups-2.2.7/templates/ru/set-printer-options-trailer.tmpl000664 000765 000024 00000000701 13255074424 024100 0ustar00msweetstaff000000 000000
    cups-2.2.7/templates/ru/subscription-added.tmpl000664 000765 000024 00000000130 13255074424 022252 0ustar00msweetstaff000000 000000

    ПодпиÑка {subscription_name} была уÑпешно добавлена.

    cups-2.2.7/templates/ru/subscription-canceled.tmpl000664 000765 000024 00000000115 13255074424 022752 0ustar00msweetstaff000000 000000

    ПодпиÑка #{notify_subscription_id} была отменена.

    cups-2.2.7/templates/ru/test-page.tmpl000664 000765 000024 00000000403 13255074424 020363 0ustar00msweetstaff000000 000000

    Печать пробной Ñтраницы на {printer_name}

    ÐŸÑ€Ð¾Ð±Ð½Ð°Ñ Ñтраница отправлена на печать;Ðомер Ð·Ð°Ð´Ð°Ð½Ð¸Ñ {printer_name}-{job_id}.

    cups-2.2.7/templates/ru/trailer.tmpl000664 000765 000024 00000000604 13255074424 020137 0ustar00msweetstaff000000 000000
    cups-2.2.7/templates/ru/users.tmpl000664 000765 000024 00000001777 13255074424 017652 0ustar00msweetstaff000000 000000
    {IS_CLASS?:}

    ДоÑтуп пользователей на {printer_name}

    Пользователи:
    Разрешить Ñтим пользователÑм печатать Запретить Ñтим пользователÑм печатать
    cups-2.2.7/templates/pt_BR/add-class.tmpl000664 000765 000024 00000002266 13255074424 020716 0ustar00msweetstaff000000 000000

    Adicionar classe

    Nome:
    (Pode conter qualquer caractere imprimível, exceto "/", "#", e espaço em branco)
    Descrição:
    (Descrição legível para humanos, tal como "HP LaserJet com Duplexador")
    Localização:
    (Localização legível para humanos, tal como "Laboratório 1")
    Membros:
    cups-2.2.7/templates/pt_BR/add-printer.tmpl000664 000765 000024 00000003406 13255074424 021271 0ustar00msweetstaff000000 000000

    Adicionar impressora

    {?current_make!?:} {?current_make_and_model!?:}
    Nome:
    (Pode conter qualquer caractere imprimível, exceto "/", "#" e espaço em branco)
    Descrição:
    (Descrição legível para humanos, tal como "HP LaserJet com Duplexador")
    Localização:
    (Localização legível para humanos, tal como "Laboratório 1")
    Conexão: {device_uri}
    Compartilhamento: Compartilhar essa impressora
    cups-2.2.7/templates/pt_BR/add-rss-subscription.tmpl000664 000765 000024 00000004770 13255074424 023144 0ustar00msweetstaff000000 000000

    Adicionar inscrição RSS

    Nome:
    (Pode conter qualquer caractere imprimível, exceto espaço em branco, "/", "?", e "#")
    Fila:
    Eventos: Trabalho criado
    Trabalho concluído
    Trabalho parado
    Opções do Trabalho alteradas
         Fila parada
    Fila adicionada
    Fila modificada
    Fila apagada
         Servidor iniciado
    Servidor parado
    Servidor reiniciado
    Auditoria de segurança do servidor
    Máximo de eventos no Feed:
    cups-2.2.7/templates/pt_BR/admin.tmpl000664 000765 000024 00000015343 13255074424 020153 0ustar00msweetstaff000000 000000

    Impressoras

    {have_samba?
    :}

    Classes

    Trabalhos

    Servidor

    {SETTINGS_ERROR?

    {SETTINGS_MESSAGE}

    {SETTINGS_ERROR}
    :
    {ADVANCEDSETTINGS?

    Configurações do servidor\:

    Avançado
    Compartilhar impressoras conectadas a este sistema
            Máximo de clientes\:
             Permitir impressão a partir da Internet
             Anunciar interface web
    Permitir administração remota
    {have_gssapi? Usar autenticação via Kerberos (FAQ)
    :} Permitir aos usuários cancelar qualquer trabalho (não apenas os seus próprios)
    Preservar o histórico de trabalhos
            Máximo de trabalhos (0 para sem limite)\:
            Reter metadados\:
            Reter documentos\:
    Salvar informação de depuração para solução de problemas
            Tamanho máximo do arquivo de log\:

    :

    Configurações do servidor:

    Avançado
    Compartilhar impressoras conectadas a este sistema
             Permitir impressão a partir da Internet
    Permitir administração remota
    {have_gssapi? Usar autenticação via Kerberos (FAQ)
    :} Permitir aos usuários cancelar qualquer trabalho (não apenas seus próprios)
    Salvar informações de depuração para solução de problemas

    }

    }

    Inscrições RSS

    {notify_subscription_id?{[notify_subscription_id] }
    NomeEventosNome da fila
    {notify_recipient_name}
     
    {notify_events} {notify_printer_name?{notify_printer_name}:Todas as filas}
    :}
    cups-2.2.7/templates/pt_BR/choose-device.tmpl000664 000765 000024 00000003262 13255074424 021575 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modificar {printer_name}:Adicionar impressora}

    {CUPS_GET_DEVICES_DONE?
    {printer_name?:} {op=add-printer?:}
    Conexão atual\: {current_device_uri}
    Impressoras locais\: {[device_uri]{device_class!network? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    :}}
    Impressoras de rede descobertas\: {[device_uri]{device_class=network?{device_uri~[a-z]+://? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    :}:}}
    Outras impressoras de rede\: {[device_uri]{device_class=network?{device_uri~[a-z]+://?: {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    }:}}
    :

    Ocupado Procurando impressoras...

    } cups-2.2.7/templates/pt_BR/choose-make.tmpl000664 000765 000024 00000003744 13255074424 021260 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modificar {printer_name}:Adicionar impressora}

    {printer_name?:} {op=modify-printer?:}
    Nome: {printer_name}
    Descrição: {printer_info}
    Localização: {printer_location}
    Conexão: {device_uri}
    Compartilhamento: {?printer_is_shared=?Não compartilhar:{?printer_is_shared=0?Não compartilhar:Compartilhar}} esta impressora
    Fabricante:
     
    Ou forneça um arquivo PPD:
    cups-2.2.7/templates/pt_BR/choose-model.tmpl000664 000765 000024 00000004272 13255074424 021440 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modificar {printer_name}:Adicionar impressora}

    {printer_name?:} {op=modify-printer?:}
    Nome: {printer_name}
    Descrição: {printer_info}
    Localização: {printer_location}
    Conexão: {device_uri}
    Compartilhamento: {?printer_is_shared=?Não compartilhar:{?printer_is_shared=0?Não compartilhar:Compartilhar}} esta impressora
    Fabricante: {PPD_MAKE}
    Modelo:
    Ou forneça um arquivo PPD:
    cups-2.2.7/templates/pt_BR/choose-serial.tmpl000664 000765 000024 00000002655 13255074424 021622 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modificar {printer_name}:Adicionar impressora}

    {printer_name?:}
    Conexão: {device_uri}
    Taxa de dados (Baud Rate):
    Paridade:
    Bits de Dados:
    Controle de Fluxo:
    cups-2.2.7/templates/pt_BR/choose-uri.tmpl000664 000765 000024 00000002055 13255074424 021134 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modificar {printer_name}:Adicionar impressora}

    {printer_name?:}
    Conexão:
    Exemplos:
        http://hostname:631/ipp/
        http://hostname:631/ipp/port1
    
        ipp://hostname/ipp/
        ipp://hostname/ipp/port1
    
        lpd://hostname/queue
    
        socket://hostname
        socket://hostname:9100
    

    Veja "Network Printers" para a URI correta a ser usada para sua impressora.

    cups-2.2.7/templates/pt_BR/class-added.tmpl000664 000765 000024 00000000206 13255074424 021217 0ustar00msweetstaff000000 000000

    Adicionar classe

    A classe {printer_name} foi adicionada com sucesso. cups-2.2.7/templates/pt_BR/class-confirm.tmpl000664 000765 000024 00000000700 13255074424 021612 0ustar00msweetstaff000000 000000

    Excluir classe {printer_name}

    Aviso: Você tem certeza que quer excluir a classe {printer_name}?

    cups-2.2.7/templates/pt_BR/class-deleted.tmpl000664 000765 000024 00000000162 13255074424 021565 0ustar00msweetstaff000000 000000

    Excluir classe {printer_name}

    A classe {printer_name} foi excluída com sucesso. cups-2.2.7/templates/pt_BR/class-jobs-header.tmpl000664 000765 000024 00000000041 13255074424 022336 0ustar00msweetstaff000000 000000

    Trabalhos

    cups-2.2.7/templates/pt_BR/class-modified.tmpl000664 000765 000024 00000000225 13255074424 021737 0ustar00msweetstaff000000 000000

    Modificar classe {printer_name}

    A classe {printer_name} foi modificada com sucesso. cups-2.2.7/templates/pt_BR/class.tmpl000664 000765 000024 00000004654 13255074424 020173 0ustar00msweetstaff000000 000000

    {printer_name} ({printer_state=3?ociosa:{printer_state=4?processando:pausada}}, {printer_is_accepting_jobs=0?rejeitando trabalhos:aceitando trabalhos}, {server_is_sharing_printers=0?não compartilhada:{printer_is_shared=0?não compartilhada:compartilhada}} {default_name={printer_name}?, padrão do servidor:})

    Descrição:{printer_info}
    Localização:{printer_location}
    Membros:{?member_uris=?None:{member_uris}}
    Padrões:job-sheets={job_sheets_default} media={media_default?{media_default}:desconhecido} {sides_default?sides={sides_default}:}
    cups-2.2.7/templates/pt_BR/classes-header.tmpl000664 000765 000024 00000000150 13255074424 021734 0ustar00msweetstaff000000 000000

    {total=0?Nenhuma classe:Mostrando {#printer_name} de {total} classe{total=1?:s}}.

    cups-2.2.7/templates/pt_BR/classes.tmpl000664 000765 000024 00000001043 13255074424 020510 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
    Nome da filaDescriçãoLocalizaçãoMembrosEstado
    {printer_name}{printer_info}{printer_location}{?member_uris=?Nenhum:{member_uris}}{printer_state=3?ociosa:{printer_state=4?processando:pausada}}{printer_state_message? - "{printer_state_message}":}
    } cups-2.2.7/templates/pt_BR/command.tmpl000664 000765 000024 00000000656 13255074424 020502 0ustar00msweetstaff000000 000000

    {title} em {printer_name}

    {job_state>5?:Busy Indicator }Trabalho de comando de impressora {job_state=3?pendente:{job_state=4?retido: {job_state=5?processando:{job_state=6?parado: {job_state=7?cancelado:{job_state=8?abortado:completo}}}}}}{job_state=9?:{job_printer_state_message?, "{job_printer_state_message}":}}

    cups-2.2.7/templates/pt_BR/edit-config.tmpl000664 000765 000024 00000001212 13255074424 021241 0ustar00msweetstaff000000 000000

    Editar arquivo de configuração

    cups-2.2.7/templates/pt_BR/error-op.tmpl000664 000765 000024 00000000211 13255074424 020614 0ustar00msweetstaff000000 000000

    Erro {?title} {?printer_name}

    Erro:

    Operação desconhecida "{op}"!
    cups-2.2.7/templates/pt_BR/error.tmpl000664 000765 000024 00000000172 13255074424 020206 0ustar00msweetstaff000000 000000

    Erro {?title} {?printer_name}

    {?message?{message}:Erro}:

    {error}
    cups-2.2.7/templates/pt_BR/header.tmpl.in000664 000765 000024 00000003352 13255074424 020715 0ustar00msweetstaff000000 000000 {refresh_page?:} {title} - CUPS @CUPS_VERSION@@CUPS_REVISION@

    {title}

    cups-2.2.7/templates/pt_BR/help-header.tmpl000664 000765 000024 00000003614 13255074424 021237 0ustar00msweetstaff000000 000000
    {TOPIC?:}

    Pesquisar em {HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:todos os documentos}}:

    {QUERY?

    Pesquisar resultados em {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:Todos os documentos}}\:

    {QTEXT?:} :

    Nenhum resultado encontrado.

    }
    :} {HELPTITLE?

    {HELPTITLE}

    :

    Ajuda online

    Essa é a interface de ajuda online do CUPS. Forneça expressões de pesquisa acima ou clique em qualquer um dos links de documentação para mostrar a informação de ajuda online.

    Se você é novo no CUPS, leia a página "Visão geral do CUPS".

    A página inicial do CUPS também fornece muitos recursos incluindo fórums de discussão de usuários, respostas a perguntas frequentes e um formulário para enviar registros de erros e pedidos de melhorias.

    } cups-2.2.7/templates/pt_BR/help-printable.tmpl000664 000765 000024 00000000562 13255074424 021766 0ustar00msweetstaff000000 000000 {HELPTITLE} cups-2.2.7/templates/pt_BR/help-trailer.tmpl000664 000765 000024 00000000000 13255074424 021433 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/pt_BR/job-cancel.tmpl000664 000765 000024 00000000167 13255074424 021056 0ustar00msweetstaff000000 000000

    Cancelar trabalho {job_id}

    Trabalho {job_id} foi cancelado. cups-2.2.7/templates/pt_BR/job-hold.tmpl000664 000765 000024 00000000216 13255074424 020552 0ustar00msweetstaff000000 000000

    Reter trabalho {job_id}

    Trabalho {job_id} foi retido para não ser impresso. cups-2.2.7/templates/pt_BR/job-move.tmpl000664 000765 000024 00000001165 13255074424 020576 0ustar00msweetstaff000000 000000

    {job_id?:}

    {job_id?Mover trabalho {job_id}:Mover todos trabalhos}

    Novo destino:
    cups-2.2.7/templates/pt_BR/job-moved.tmpl000664 000765 000024 00000000410 13255074424 020732 0ustar00msweetstaff000000 000000

    {job_id?Mover trabalho {job_id}:Mover trabalhos}

    {job_id?Trabalho {job_id} for movido:Todos trabalhos foram movidos} para {job_printer_name}.

    cups-2.2.7/templates/pt_BR/job-release.tmpl000664 000765 000024 00000000213 13255074424 021241 0ustar00msweetstaff000000 000000

    Liberar trabalho {job_id}

    Trabalho {job_id} foi liberado para impressão. cups-2.2.7/templates/pt_BR/job-restart.tmpl000664 000765 000024 00000000172 13255074424 021311 0ustar00msweetstaff000000 000000

    Reimprimir trabalho {job_id}

    Trabalho {job_id} foi reiniciado. cups-2.2.7/templates/pt_BR/jobs-header.tmpl000664 000765 000024 00000001376 13255074424 021247 0ustar00msweetstaff000000 000000 {?which_jobs=?:

    } {?which_jobs=completed?:
    } {?which_jobs=all?:
    }

    {?which_jobs=?Jobs listed in print order; held jobs appear first.:{which_jobs=Jobs listed in ascending order.?:Jobs listed in descending order.}}

    cups-2.2.7/templates/pt_BR/jobs.tmpl000664 000765 000024 00000005406 13255074424 020017 0ustar00msweetstaff000000 000000 {#job_id=0?: {[job_id] }
    IDNomeUsuárioTamanhoPáginasEstadoControle
    {job_printer_name}-{job_id}{?phone? ({phone}):}  {?job_name=?Desconhecido:{job_name}}  {?job_originating_user_name=?Retido:{job_originating_user_name}}  {job_k_octets}k  {job_impressions_completed=0?Desconhecido:{?job_impressions_completed}}  {job_state=3?Pendente desde
    {?time_at_creation=?Unknown:{time_at_creation}}:{job_state=4?Retido desde
    {?time_at_creation=?Unknown:{time_at_creation}}: {job_state=5?Processando desde
    {?time_at_processing=?Unknown:{time_at_processing}}:{job_state=6?parado: {job_state=7?Cancelado em
    {?time_at_completed=?Unknown:{time_at_completed}}:{job_state=8?Abortado:Concluído em
    {?time_at_completed=?Unknown:{time_at_completed}}}}}}}} {job_printer_state_message?
    "{job_printer_state_message}":}
    {job_preserved>0?{job_state>5?
    :}:} {job_state=4?
    :} {job_state=3?
    :} {job_state<7?
    :}  
    } cups-2.2.7/templates/pt_BR/list-available-printers.tmpl000664 000765 000024 00000001232 13255074424 023610 0ustar00msweetstaff000000 000000

    Impressoras disponíveis

    {#device_uri=0?

    Nenhuma impressora encontrada.

    :
      {[device_uri]
    • {device_make_and_model} ({device_info})
    • }
    } cups-2.2.7/templates/pt_BR/modify-class.tmpl000664 000765 000024 00000001571 13255074424 021453 0ustar00msweetstaff000000 000000

    Modificar classe {printer_name}

    Descrição:
    Localização:
    Membros:
    cups-2.2.7/templates/pt_BR/modify-printer.tmpl000664 000765 000024 00000002617 13255074424 022033 0ustar00msweetstaff000000 000000

    Modificar {printer_name}

    Descrição:
    (Descrição legível para humanos, tal como "HP LaserJet com Duplexador")
    Localização:
    (Localização legível para humanos, tal como "Laboratório 1")
    Conexão: {device_uri}
    Compartilhamento: Compartilhar esta impressora
    cups-2.2.7/templates/pt_BR/norestart.tmpl000664 000765 000024 00000000272 13255074424 021077 0ustar00msweetstaff000000 000000

    Alterar configurações

    O servidor não foi reiniciado porque nenhuma alteração foi feita na configuração...

    cups-2.2.7/templates/pt_BR/option-boolean.tmpl000664 000765 000024 00000000350 13255074424 022000 0ustar00msweetstaff000000 000000 {keytext}: {[choices]{text}} cups-2.2.7/templates/pt_BR/option-conflict.tmpl000664 000765 000024 00000000370 13255074424 022164 0ustar00msweetstaff000000 000000

    Erro: As seguintes opções estão conflitando:

    Por favor, altere uma ou mais opções para resolver os conflitos.

    cups-2.2.7/templates/pt_BR/option-header.tmpl000664 000765 000024 00000000131 13255074424 021606 0ustar00msweetstaff000000 000000

    {group}

    cups-2.2.7/templates/pt_BR/option-pickmany.tmpl000664 000765 000024 00000000377 13255074424 022205 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/pt_BR/option-pickone.tmpl000664 000765 000024 00000001713 13255074424 022015 0ustar00msweetstaff000000 000000 :} cups-2.2.7/templates/pt_BR/option-trailer.tmpl000664 000765 000024 00000000160 13255074424 022022 0ustar00msweetstaff000000 000000
    {keytext}:
    {keytext}: {iscustom=1?{[params] }
    {paramtext}: {params=Units?:}

    cups-2.2.7/templates/pt_BR/pager.tmpl000664 000765 000024 00000002332 13255074424 020153 0ustar00msweetstaff000000 000000
    {PREV?{PREV>0?
    :}
    : }
    {NEXT?
    : } {LAST?
    :}
    cups-2.2.7/templates/pt_BR/printer-accept.tmpl000664 000765 000024 00000000357 13255074424 022002 0ustar00msweetstaff000000 000000

    Aceitar trabalhos na {is_class?classe:impressora} {printer_name}

    A {is_class?classe:impressora} {printer_name} agora está aceitando trabalhos.

    cups-2.2.7/templates/pt_BR/printer-added.tmpl000664 000765 000024 00000000217 13255074424 021577 0ustar00msweetstaff000000 000000

    Adicionar impressora

    A impressora {printer_name} foi adicionada com sucesso. cups-2.2.7/templates/pt_BR/printer-cancel-jobs.tmpl000664 000765 000024 00000000357 13255074424 022723 0ustar00msweetstaff000000 000000

    Cancelar trabalhos na {is_class?classe:impressora} {printer_name}

    Todos os trabalhos da {is_class?classe:impressora} {printer_name} foram cancelados.

    cups-2.2.7/templates/pt_BR/printer-configured.tmpl000664 000765 000024 00000000451 13255074424 022663 0ustar00msweetstaff000000 000000

    Configurar opções padrão para {printer_name}

    As opções padrões da {OP=set-class-options?classe :impressora }{printer_name} foram configuradas com sucesso. cups-2.2.7/templates/pt_BR/printer-confirm.tmpl000664 000765 000024 00000000705 13255074424 022175 0ustar00msweetstaff000000 000000

    Excluir impressora {printer_name}

    Aviso: Tem certeza que deseja excluir a impressora {printer_name}?

    cups-2.2.7/templates/pt_BR/printer-default.tmpl000664 000765 000024 00000000725 13255074424 022166 0ustar00msweetstaff000000 000000

    Definir a {is_class?classe:impressora} {printer_name} como padrão

    A {is_class?classe:impressora} {printer_name} foi definida como a impressora padrão no servidor.

    Nota: O padrão de qualquer usuário que tenha sido configurado via do comando lpoptions vai sobrepor esta configuração padrão.
    cups-2.2.7/templates/pt_BR/printer-deleted.tmpl000664 000765 000024 00000000171 13255074424 022143 0ustar00msweetstaff000000 000000

    Excluir Impressora {printer_name}

    A impressora {printer_name} foi excluída com sucesso.cups-2.2.7/templates/pt_BR/printer-jobs-header.tmpl000664 000765 000024 00000000041 13255074424 022714 0ustar00msweetstaff000000 000000

    Trabalhos

    cups-2.2.7/templates/pt_BR/printer-modified.tmpl000664 000765 000024 00000000235 13255074424 022316 0ustar00msweetstaff000000 000000

    Modificar impressora {printer_name}

    A impressora {printer_name} foi modificada com sucesso.cups-2.2.7/templates/pt_BR/printer-reject.tmpl000664 000765 000024 00000000372 13255074424 022014 0ustar00msweetstaff000000 000000

    Rejeitar trabalhos na {is_class?classe:impressora} {printer_name}

    A {is_class?classe:impressora} {printer_name} não está mais aceitando trabalhos.

    cups-2.2.7/templates/pt_BR/printer-start.tmpl000664 000765 000024 00000000326 13255074424 021674 0ustar00msweetstaff000000 000000

    Resumir a {is_class?classe:impressora} {printer_name}

    A {is_class?classe:impressora} {printer_name} foi resumida com sucesso.

    cups-2.2.7/templates/pt_BR/printer-stop.tmpl000664 000765 000024 00000000310 13255074424 021515 0ustar00msweetstaff000000 000000

    Pausar a {is_class?classe:impressora} {printer_name}

    A {is_class?classe:impressora} {printer_name} foi pausada.

    cups-2.2.7/templates/pt_BR/printer.tmpl000664 000765 000024 00000005420 13255074424 020541 0ustar00msweetstaff000000 000000

    {printer_name} ({printer_state=3?ociosa:{printer_state=4?processando:pausada}}, {printer_is_accepting_jobs=0?rejeitando trabalhos:aceitando trabalhos}, {server_is_sharing_printers=0?não compartilhada:{printer_is_shared=0?não compartilhada:compartilhada}} {default_name={printer_name}?, padrão do servidor:})

    Descrição:{printer_info}
    Localização:{printer_location}
    Driver:{printer_make_and_model} ({color_supported=1?color:grayscale}{sides_supported?, 2-sided printing:})
    Conexão:{device_uri}
    Padrões:job-sheets={job_sheets_default} media={media_default?{media_default}:desconhecido} {sides_default?sides={sides_default}:}
    cups-2.2.7/templates/pt_BR/printers-header.tmpl000664 000765 000024 00000000160 13255074424 022146 0ustar00msweetstaff000000 000000

    {total=0?Nenhuma impressora:Mostrando {#printer_name} de {total} impressora{total=1?:s}}.

    cups-2.2.7/templates/pt_BR/printers.tmpl000664 000765 000024 00000001050 13255074424 020717 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
    Nome da filaDescriçãoLocalizaçãoMarca e modeloEstado
    {printer_name}{printer_info}{printer_location}{printer_make_and_model}{printer_state=3?Ociosa:{printer_state=4?Processando:Pausada}}{printer_state_message? - "{printer_state_message}":}
    } cups-2.2.7/templates/pt_BR/restart.tmpl000664 000765 000024 00000005122 13255074424 020541 0ustar00msweetstaff000000 000000

    Alterar configurações

    Busy Indicator Por favor, aguarde enquanto o servidor é reiniciado...

    cups-2.2.7/templates/pt_BR/samba-export.tmpl000664 000765 000024 00000003642 13255074424 021464 0ustar00msweetstaff000000 000000

    Exportar impressoras para o Samba

    {error?

    Não foi possível exportar impressoras para o Samba\:

    {error}

    >Consulte o arquivo error_log para mais informações.

    :

    Essa página permite que você exporte impressoras para o Samba para que clientes Windows possam acessá-las através dos ícones de Ambiente de Rede ou Locais de Rede nas suas áreas de trabalho. Você deve primeiro instalar os drivers de impressora PostScript do Windows como descrito na página de manual do cupsaddsmb(8).

    }
    Impressoras:
    Exportar todas as impressoras
    Nome do usuário do Samba: (obrigatório)
    Senha do Samba: (obrigatório)
    cups-2.2.7/templates/pt_BR/samba-exported.tmpl000664 000765 000024 00000000070 13255074424 021765 0ustar00msweetstaff000000 000000

    Impressoras exportadas para o samba com sucesso.

    cups-2.2.7/templates/pt_BR/search.tmpl000664 000765 000024 00000001041 13255074424 020316 0ustar00msweetstaff000000 000000
    {WHICH_JOBS?:} {ORDER?:}

    Pesquisar em {SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?classes:{SECTION=jobs?trabalhos:impressoras}}}:

    cups-2.2.7/templates/pt_BR/set-printer-options-header.tmpl000664 000765 000024 00000001561 13255074424 024253 0ustar00msweetstaff000000 000000

    Definir opções padrões para {printer_name}

    {HAVE_AUTOCONFIGURE?:}

    {[group_id] {group}     }

    cups-2.2.7/templates/pt_BR/set-printer-options-trailer.tmpl000664 000765 000024 00000000701 13255074424 024460 0ustar00msweetstaff000000 000000
    cups-2.2.7/templates/pt_BR/subscription-added.tmpl000664 000765 000024 00000000121 13255074424 022632 0ustar00msweetstaff000000 000000

    A inscrição {subscription_name} foi adicionada com sucesso.

    cups-2.2.7/templates/pt_BR/subscription-canceled.tmpl000664 000765 000024 00000000112 13255074424 023327 0ustar00msweetstaff000000 000000

    A inscrição #{notify_subscription_id} foi cancelada.

    cups-2.2.7/templates/pt_BR/test-page.tmpl000664 000765 000024 00000000315 13255074424 020745 0ustar00msweetstaff000000 000000

    Imprimir página de teste em {printer_name}

    Página de teste enviada; o ID do trabalho é {printer_name}-{job_id}.

    cups-2.2.7/templates/pt_BR/trailer.tmpl000664 000765 000024 00000000353 13255074424 020520 0ustar00msweetstaff000000 000000
    cups-2.2.7/templates/pt_BR/users.tmpl000664 000765 000024 00000001700 13255074424 020214 0ustar00msweetstaff000000 000000
    {IS_CLASS?:}

    Usuários permitidos para {printer_name}

    Usuários:
    Permitir que estes usuários imprimam Impedir que estes usuários imprimam
    cups-2.2.7/templates/ja/add-class.tmpl000664 000765 000024 00000002131 13255074424 020271 0ustar00msweetstaff000000 000000

    クラスã®è¿½åŠ 

    åå‰:
    説明:
    ("両é¢ã‚りHP LaserJet" ã®ã‚ˆã†ã«äººãŒèª­ã¿ã‚„ã™ã„説明)
    場所:
    ("研究室1" ã®ã‚ˆã†ã«äººãŒèª­ã¿ã‚„ã™ã„場所)
    メンãƒãƒ¼:
    cups-2.2.7/templates/ja/add-printer.tmpl000664 000765 000024 00000003246 13255074424 020657 0ustar00msweetstaff000000 000000

    æ–°ã—ã„プリンターã®è¿½åŠ 

    {?current_make!?:} {?current_make_and_model!?:}
    åå‰:
    ("/"ã€"#"ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚’除ã表示å¯èƒ½æ–‡å­—ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™)
    説明:
    ("両é¢ã‚りHP LaserJet" ã®ã‚ˆã†ã«äººãŒèª­ã¿ã‚„ã™ã„説明)
    場所:
    ("研究室1" ã®ã‚ˆã†ã«äººãŒèª­ã¿ã‚„ã™ã„場所)
    接続: {device_uri}
    共有: ã“ã®ãƒ—リンターを共有ã™ã‚‹
    cups-2.2.7/templates/ja/add-rss-subscription.tmpl000664 000765 000024 00000005057 13255074424 022527 0ustar00msweetstaff000000 000000

    RSS 購読を追加

    åå‰:
    ("/"ã€"?"ã€"#"ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚’é™¤ãæ–‡å­—ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™)
    キュー:
    イベント: ジョブãŒä½œæˆã•れãŸ
    ジョブãŒå®Œäº†ã—ãŸ
    ジョブãŒåœæ­¢ã—ãŸ
    ジョブオプションãŒå¤‰æ›´ã•れãŸ
         キューãŒåœæ­¢ã—ãŸ
    キューãŒè¿½åŠ ã•れãŸ
    キューãŒå¤‰æ›´ã•れãŸ
    キューãŒå‰Šé™¤ã•れãŸ
         サーãƒãƒ¼ãŒé–‹å§‹ã—ãŸ
    サーãƒãƒ¼ãŒåœæ­¢ã—ãŸ
    サーãƒãƒ¼ãŒå†èµ·å‹•ã—ãŸ
    サーãƒãƒ¼ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚’監査中
    ãƒ•ã‚£ãƒ¼ãƒ‰å†…ã®æœ€å¤§ã‚¤ãƒ™ãƒ³ãƒˆæ•°:
    cups-2.2.7/templates/ja/admin.tmpl000664 000765 000024 00000015004 13255074424 017531 0ustar00msweetstaff000000 000000

    プリンター

    {have_samba?
    :}

    クラス

    ジョブ

    サーãƒãƒ¼

    {SETTINGS_ERROR?

    {SETTINGS_MESSAGE}

    {SETTINGS_ERROR}
    :
    {ADVANCEDSETTINGS?

    サーãƒãƒ¼è¨­å®š\:

    詳細
    ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã«æŽ¥ç¶šã•れã¦ã„るプリンターを共有
            æœ€å¤§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆæ•°\:
             インターãƒãƒƒãƒˆã‹ã‚‰ã®å°åˆ·ã‚’許å¯
             ウェブインターフェイスを公開
    リモート管ç†ã‚’許å¯
    {have_gssapi? Kerberos èªè¨¼ã‚’使用 (FAQ)
    :} 所有者以外ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚‚ジョブã®ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã‚’許å¯
    ジョブã®å±¥æ­´ã‚’ä¿å­˜
            æœ€å¤§ã‚¸ãƒ§ãƒ–æ•° (0 ã¯ç„¡åˆ¶é™)\:
            ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’ä¿æŒ\:
            ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ä¿æŒ\:
    トラブルシューティングã®ãŸã‚ã«ãƒ‡ãƒãƒƒã‚°æƒ…報をä¿å­˜
            æœ€å¤§ãƒ­ã‚°ãƒ•ァイルサイズ\:

    :

    サーãƒãƒ¼è¨­å®š:

    詳細
    ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã«æŽ¥ç¶šã•れã¦ã„るプリンターを共有
             インターãƒãƒƒãƒˆã‹ã‚‰ã®å°åˆ·ã‚’許å¯
    リモート管ç†ã‚’許å¯
    {have_gssapi? Kerberos èªè¨¼ã‚’使用 (FAQ)
    :} 所有者以外ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚‚ジョブã®ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã‚’許å¯
    トラブルシューティングã®ãŸã‚ã«ãƒ‡ãƒãƒƒã‚°æƒ…報をä¿å­˜

    }

    }

    RSS 購読

    {notify_subscription_id?{[notify_subscription_id] }
    åå‰ã‚¤ãƒ™ãƒ³ãƒˆã‚­ãƒ¥ãƒ¼å
    {notify_recipient_name}
     
    {notify_events} {notify_printer_name?{notify_printer_name}:ã™ã¹ã¦ã®ã‚­ãƒ¥ãƒ¼}
    :}
    cups-2.2.7/templates/ja/choose-device.tmpl000664 000765 000024 00000003364 13255074424 021164 0ustar00msweetstaff000000 000000

    {op=modify-printer?{printer_name} ã®å¤‰æ›´:プリンターã®è¿½åŠ }

    {CUPS_GET_DEVICES_DONE?
    {printer_name?:} {op=add-printer?:}
    ç¾åœ¨ã®æŽ¥ç¶š\: {current_device_uri}
    ローカルプリンター\: {[device_uri]{device_class!network? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    :}}
    発見ã•れãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—リンター\: {[device_uri]{device_class=network?{device_uri~[a-z]+://? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    :}:}}
    ãã®ä»–ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—リンター\: {[device_uri]{device_class=network?{device_uri~[a-z]+://?: {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    }:}}
    :

    Busy Indicator プリンターを探ã—ã¦ã„ã¾ã™...

    } cups-2.2.7/templates/ja/choose-make.tmpl000664 000765 000024 00000003655 13255074424 020645 0ustar00msweetstaff000000 000000

    {op=modify-printer?{printer_name}ã®å¤‰æ›´:プリンターã®è¿½åŠ }

    {printer_name?:} {op=modify-printer?:}
    åå‰: {printer_name}
    説明: {printer_info}
    場所: {printer_location}
    接続: {device_uri}
    共有: ã“ã®ãƒ—リンターを共有{?printer_is_shared=?ã—ãªã„:{?printer_is_shared=0?ã—ãªã„:ã™ã‚‹}}
    メーカー:
     
    ã¾ãŸã¯ PPD ファイルをæä¾›:
    cups-2.2.7/templates/ja/choose-model.tmpl000664 000765 000024 00000004234 13255074424 021022 0ustar00msweetstaff000000 000000

    {op=modify-printer?{printer_name}ã®å¤‰æ›´:プリンターã®è¿½åŠ }

    {printer_name?:} {op=modify-printer?:}
    åå‰: {printer_name}
    説明: {printer_info}
    場所: {printer_location}
    接続: {device_uri}
    共有: ã“ã®ãƒ—リンターを共有{?printer_is_shared=?ã—ãªã„:{?printer_is_shared=0?ã—ãªã„:ã™ã‚‹}}
    メーカー: {PPD_MAKE}
    モデル:
    ã¾ãŸã¯ PPD ファイルをæä¾›:
    cups-2.2.7/templates/ja/choose-serial.tmpl000664 000765 000024 00000002700 13255074424 021175 0ustar00msweetstaff000000 000000

    {op=modify-printer?{printer_name}ã®å¤‰æ›´:プリンターã®è¿½åŠ }

    {printer_name?:}
    接続: {device_uri}
    ボーレート:
    パリティ:
    データビット:
    フロー制御:
    cups-2.2.7/templates/ja/choose-uri.tmpl000664 000765 000024 00000002135 13255074424 020517 0ustar00msweetstaff000000 000000

    {op=modify-printer?{printer_name}ã®å¤‰æ›´:プリンターã®è¿½åŠ }

    {printer_name?:}
    接続:
    例:
        http://hostname:631/ipp/
        http://hostname:631/ipp/port1
    
        ipp://hostname/ipp/
        ipp://hostname/ipp/port1
    
        lpd://hostname/queue
    
        socket://hostname
        socket://hostname:9100
    

    ã‚ãªãŸã®ãƒ—リンターã«ãµã•ã‚ã—ã„ URI ã«ã¤ã„ã¦ã¯ã€"ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—リンター"ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

    cups-2.2.7/templates/ja/class-added.tmpl000664 000765 000024 00000000222 13255074424 020601 0ustar00msweetstaff000000 000000

    クラスã®è¿½åŠ 

    クラス {printer_name} ã¯æ­£ã—ã追加ã•れã¾ã—ãŸã€‚ cups-2.2.7/templates/ja/class-confirm.tmpl000664 000765 000024 00000000721 13255074424 021201 0ustar00msweetstaff000000 000000

    クラス {printer_name} ã®å‰Šé™¤

    警告: 本当ã«ã‚¯ãƒ©ã‚¹ {printer_name} を削除ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿ

    cups-2.2.7/templates/ja/class-deleted.tmpl000664 000765 000024 00000000174 13255074424 021154 0ustar00msweetstaff000000 000000

    クラス {printer_name} ã®å‰Šé™¤

    クラス {printer_name} ã¯æ­£ã—ã削除ã•れã¾ã—ãŸã€‚ cups-2.2.7/templates/ja/class-jobs-header.tmpl000664 000765 000024 00000000041 13255074424 021722 0ustar00msweetstaff000000 000000

    ジョブ

    cups-2.2.7/templates/ja/class-modified.tmpl000664 000765 000024 00000000242 13255074424 021322 0ustar00msweetstaff000000 000000

    クラス {printer_name} ã®å¤‰æ›´

    クラス {printer_name} ã¯æ­£ã—ã変更ã•れã¾ã—ãŸã€‚ cups-2.2.7/templates/ja/class.tmpl000664 000765 000024 00000004571 13255074424 017555 0ustar00msweetstaff000000 000000

    {printer_name} ({printer_state=3?待機中:{printer_state=4?処ç†ä¸­:åœæ­¢}}, {printer_is_accepting_jobs=0?ジョブを拒å¦ä¸­:ジョブをå—ã‘付ã‘中}, {server_is_sharing_printers=0?éž:{printer_is_shared=0?éž:}} 共有{default_name={printer_name}?, サーãƒãƒ¼ã®ãƒ‡ãƒ•ォルト:})

    説明:{printer_info}
    場所:{printer_location}
    メンãƒãƒ¼:{?member_uris=?ãªã—:{member_uris}}
    デフォルト:job-sheets={job_sheets_default} media={media_default?{media_default}:䏿˜Ž} {sides_default?sides={sides_default}:}
    cups-2.2.7/templates/ja/classes-header.tmpl000664 000765 000024 00000000200 13255074424 021314 0ustar00msweetstaff000000 000000

    {total=0?クラスã¯ã‚りã¾ã›ã‚“:{total} 個ã®ã‚¯ãƒ©ã‚¹ã®ã†ã¡ {#printer_name} 個を表示中}。

    cups-2.2.7/templates/ja/classes.tmpl000664 000765 000024 00000001014 13255074424 020072 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
    キューå説明場所メンãƒãƒ¼çŠ¶æ…‹
    {printer_name}{printer_info}{printer_location}{?member_uris=?ãªã—:{member_uris}}{printer_state=3?待機中:{printer_state=4?処ç†ä¸­:åœæ­¢}}{printer_state_message? - "{printer_state_message}":}
    } cups-2.2.7/templates/ja/command.tmpl000664 000765 000024 00000000713 13255074424 020060 0ustar00msweetstaff000000 000000

    {printer_name} ã® {title}

    {job_state>5?:Busy Indicator }プリンターコマンドジョブ {job_state=3?ペンディング中:{job_state=4?ホールド中: {job_state=5?処ç†ä¸­:{job_state=6?åœæ­¢ä¸­: {job_state=7?キャンセル:{job_state=8?破棄:完了}}}}}}{job_state=9?:{job_printer_state_message?, "{job_printer_state_message}":}}

    cups-2.2.7/templates/ja/edit-config.tmpl000664 000765 000024 00000001136 13255074424 020632 0ustar00msweetstaff000000 000000

    設定ファイルã®ç·¨é›†

    cups-2.2.7/templates/ja/error-op.tmpl000664 000765 000024 00000000214 13255074424 020203 0ustar00msweetstaff000000 000000

    {?title} {?printer_name} ã®ã‚¨ãƒ©ãƒ¼

    エラー:

    "{op}" ã¯æœªçŸ¥ã®æ“作ã§ã™!
    cups-2.2.7/templates/ja/error.tmpl000664 000765 000024 00000000207 13255074424 017571 0ustar00msweetstaff000000 000000

    {?title} {?printer_name} ã®ã‚¨ãƒ©ãƒ¼

    {?message?{message}:エラー}:

    {error}
    cups-2.2.7/templates/ja/header.tmpl.in000664 000765 000024 00000002744 13255074424 020305 0ustar00msweetstaff000000 000000 {refresh_page?:} {title} - CUPS @CUPS_VERSION@@CUPS_REVISION@

    {title}

    cups-2.2.7/templates/ja/help-header.tmpl000664 000765 000024 00000003726 13255074424 020627 0ustar00msweetstaff000000 000000
    {TOPIC?:}

    {HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:ã™ã¹ã¦ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ}}内を検索:

    {QUERY?

    {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:ã™ã¹ã¦ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ}}ã®æ¤œç´¢çµæžœ\:

    {QTEXT?:} :

    マッãƒã™ã‚‹ã‚‚ã®ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚

    }
    :} {HELPTITLE?
    :

    オンラインヘルプ

    ã“れã¯ã€CUPS ã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ˜ãƒ«ãƒ—インターフェイスã§ã™ã€‚ オンラインヘルプ情報を表示ã™ã‚‹ã«ã¯ã€æ¤œç´¢èªžå¥ã‚’上ã«å…¥åŠ›ã™ã‚‹ã‹ã€ ドキュメントリンクã®ã„ãšã‚Œã‹ã‚’クリックã—ã¦ãã ã•ã„。

    ã‚ãªãŸãŒ CUPS ã«ã¤ã„ã¦åˆå¿ƒè€…ãªã‚‰ã€ "CUPS ã®æ¦‚è¦" ページを読んã§ãã ã•ã„。

    CUPS ホームページ ã§ã‚‚〠ユーザーディスカッションフォーラムã€FAQ〠ãƒã‚°å ±å‘Šã‚„機能リクエストを申請ã™ã‚‹ãƒ•ォームã¨ã„ã£ãŸã€ 多ãã®ãƒªã‚½ãƒ¼ã‚¹ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚

    } cups-2.2.7/templates/ja/help-printable.tmpl000664 000765 000024 00000000562 13255074424 021352 0ustar00msweetstaff000000 000000 {HELPTITLE} cups-2.2.7/templates/ja/help-trailer.tmpl000664 000765 000024 00000000000 13255074424 021017 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/ja/job-cancel.tmpl000664 000765 000024 00000000231 13255074424 020432 0ustar00msweetstaff000000 000000

    ジョブ {job_id} ã®ã‚­ãƒ£ãƒ³ã‚»ãƒ«

    ジョブ {job_id} ã¯ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•れã¾ã—ãŸã€‚ cups-2.2.7/templates/ja/job-hold.tmpl000664 000765 000024 00000000220 13255074424 020131 0ustar00msweetstaff000000 000000

    ジョブ {job_id} ã®ä¿ç•™

    ジョブ {job_id} ã¯å°åˆ·ã‚’ä¿ç•™ã•れã¾ã—ãŸã€‚ cups-2.2.7/templates/ja/job-move.tmpl000664 000765 000024 00000001215 13255074424 020156 0ustar00msweetstaff000000 000000

    {job_id?:}

    {job_id?ジョブ {job_id} ã®ç§»å‹•:ã™ã¹ã¦ã®ã‚¸ãƒ§ãƒ–ã®ç§»å‹•}

    æ–°ã—ã„宛先:
    cups-2.2.7/templates/ja/job-moved.tmpl000664 000765 000024 00000000442 13255074424 020323 0ustar00msweetstaff000000 000000

    {job_id?ジョブ {job_id} ã®ç§»å‹•:ã™ã¹ã¦ã®ã‚¸ãƒ§ãƒ–ã®ç§»å‹•}

    {job_id?ジョブ {job_id}:ã™ã¹ã¦ã®ã‚¸ãƒ§ãƒ–} 㯠{job_printer_name} ã«ç§»å‹•ã—ã¾ã—ãŸã€‚

    cups-2.2.7/templates/ja/job-release.tmpl000664 000765 000024 00000000223 13255074424 020626 0ustar00msweetstaff000000 000000

    ジョブ {job_id} ã®è§£æ”¾

    ジョブ {job_id} ã¯å°åˆ·ã‹ã‚‰è§£æ”¾ã•れã¾ã—ãŸã€‚ cups-2.2.7/templates/ja/job-restart.tmpl000664 000765 000024 00000000215 13255074424 020673 0ustar00msweetstaff000000 000000

    ジョブ {job_id} ã®å†å°åˆ·

    ジョブ {job_id} ã¯å†å°åˆ·ã•れã¾ã—ãŸã€‚ cups-2.2.7/templates/ja/jobs-header.tmpl000664 000765 000024 00000001404 13255074424 020623 0ustar00msweetstaff000000 000000 {?which_jobs=?:

    } {?which_jobs=completed?:
    } {?which_jobs=all?:
    }

    {?which_jobs=?Jobs listed in print order; held jobs appear first.:{which_jobs=Jobs listed in ascending order.?:Jobs listed in descending order.}}

    cups-2.2.7/templates/ja/jobs.tmpl000664 000765 000024 00000005405 13255074424 017402 0ustar00msweetstaff000000 000000 {#job_id=0?: {[job_id] }
    IDåå‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚µã‚¤ã‚ºãƒšãƒ¼ã‚¸çŠ¶æ…‹åˆ¶å¾¡
    {job_printer_name}-{job_id}{?phone? ({phone}):}  {?job_name=?未知:{job_name}}  {?job_originating_user_name=?隠匿:{job_originating_user_name}}  {job_k_octets}k  {job_impressions_completed=0?䏿˜Ž:{?job_impressions_completed}}  {job_state=3?{?time_at_creation=?Unknown:{time_at_creation}}
    ã‹ã‚‰ä¿ç•™ä¸­:{job_state=4?{?time_at_creation=?Unknown:{time_at_creation}}
    ã‹ã‚‰ä¿ç•™ä¸­: {job_state=5?{?time_at_processing=?Unknown:{time_at_processing}}
    ã‹ã‚‰å‡¦ç†ä¸­:{job_state=6?ã«åœæ­¢: {job_state=7?{?time_at_completed=?Unknown:{time_at_completed}}
    ã«ã‚­ãƒ£ãƒ³ã‚»ãƒ«:{job_state=8?ã«ä¸­æ–­:{?time_at_completed=?Unknown:{time_at_completed}}
    ã«å®Œäº†}}}}}} {job_printer_state_message?
    "{job_printer_state_message}":}
    {job_preserved>0?{job_state>5?
    :}:} {job_state=4?
    :} {job_state=3?
    :} {job_state<7?
    :}  
    } cups-2.2.7/templates/ja/list-available-printers.tmpl000664 000765 000024 00000001253 13255074424 023177 0ustar00msweetstaff000000 000000

    利用å¯èƒ½ãªãƒ—リンター

    {#device_uri=0?

    プリンターãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。

    :
      {[device_uri]
    • {device_make_and_model} ({device_info})
    • }
    } cups-2.2.7/templates/ja/modify-class.tmpl000664 000765 000024 00000001537 13255074424 021041 0ustar00msweetstaff000000 000000

    クラス {printer_name} ã®å¤‰æ›´

    説明:
    場所:
    メンãƒãƒ¼:
    cups-2.2.7/templates/ja/modify-printer.tmpl000664 000765 000024 00000002447 13255074424 021420 0ustar00msweetstaff000000 000000

    {printer_name} ã®å¤‰æ›´

    説明:
    ("両é¢ã‚りHP LaserJet" ã®ã‚ˆã†ã«äººãŒèª­ã¿ã‚„ã™ã„説明)
    場所:
    ("研究室1" ã®ã‚ˆã†ã«äººãŒèª­ã¿ã‚„ã™ã„場所)
    接続: {device_uri}
    共有: ã“ã®ãƒ—リンターを共有ã™ã‚‹
    cups-2.2.7/templates/ja/norestart.tmpl000664 000765 000024 00000000227 13255074424 020463 0ustar00msweetstaff000000 000000

    設定変更

    設定ã«ä½•も変更ãŒè¡Œã‚れãªã‹ã£ãŸãŸã‚ã€ã‚µãƒ¼ãƒãƒ¼ã¯å†èµ·å‹•ã•れã¾ã›ã‚“ã§ã—ãŸ...

    cups-2.2.7/templates/ja/option-boolean.tmpl000664 000765 000024 00000000350 13255074424 021364 0ustar00msweetstaff000000 000000 {keytext}: {[choices]{text}} cups-2.2.7/templates/ja/option-conflict.tmpl000664 000765 000024 00000000373 13255074424 021553 0ustar00msweetstaff000000 000000

    エラー: 以下ã®ã‚ªãƒ—ションã¯ç«¶åˆã—ã¾ã™:

    ç«¶åˆã‚’解決ã™ã‚‹ãŸã‚ã«ã€1 ã¤ä»¥ä¸Šã®ã‚ªãƒ—ションを変更ã—ã¦ãã ã•ã„。

    cups-2.2.7/templates/ja/option-header.tmpl000664 000765 000024 00000000131 13255074424 021172 0ustar00msweetstaff000000 000000

    {group}

    cups-2.2.7/templates/ja/option-pickmany.tmpl000664 000765 000024 00000000377 13255074424 021571 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/ja/option-pickone.tmpl000664 000765 000024 00000001735 13255074424 021405 0ustar00msweetstaff000000 000000 :} cups-2.2.7/templates/ja/option-trailer.tmpl000664 000765 000024 00000000155 13255074424 021412 0ustar00msweetstaff000000 000000
    {keytext}:
    {keytext}: {iscustom=1?{[params] }
    {paramtext}: {params=Units?:}

    cups-2.2.7/templates/ja/pager.tmpl000664 000765 000024 00000002266 13255074424 017545 0ustar00msweetstaff000000 000000
    {PREV?{PREV>0?
    :}
    : }
    {NEXT?
    : } {LAST?
    :}
    cups-2.2.7/templates/ja/printer-accept.tmpl000664 000765 000024 00000000427 13255074424 021364 0ustar00msweetstaff000000 000000

    {is_class?クラス:プリンター} {printer_name} ã®ã‚¸ãƒ§ãƒ–ã®å—ã‘付ã‘

    {is_class?クラス:プリンター} {printer_name} ã¯ã‚¸ãƒ§ãƒ–ã‚’å—ã‘付ã‘るよã†ã«ãªã‚Šã¾ã—ãŸã€‚

    cups-2.2.7/templates/ja/printer-added.tmpl000664 000765 000024 00000000240 13255074424 021157 0ustar00msweetstaff000000 000000

    プリンターã®è¿½åŠ 

    プリンター {printer_name} ã¯æ­£ã—ã追加ã•れã¾ã—ãŸã€‚ cups-2.2.7/templates/ja/printer-cancel-jobs.tmpl000664 000765 000024 00000000454 13255074424 022305 0ustar00msweetstaff000000 000000

    Cancel Jobs On {is_class?クラス:プリンター} {printer_name} ã®ã‚¸ãƒ§ãƒ–ã®ã‚­ãƒ£ãƒ³ã‚»ãƒ«

    {is_class?クラス:プリンター} {printer_name} ã®ã™ã¹ã¦ã®ã‚¸ãƒ§ãƒ–ã¯ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•れã¾ã—ãŸã€‚

    cups-2.2.7/templates/ja/printer-configured.tmpl000664 000765 000024 00000000445 13255074424 022252 0ustar00msweetstaff000000 000000

    {printer_name} ã®ãƒ‡ãƒ•ォルトオプションã®è¨­å®š

    {OP=set-class-options?クラス :プリンター }{printer_name} ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚ªãƒ—ã‚·ãƒ§ãƒ³ã¯æ­£ã—ã設定ã•れã¾ã—ãŸã€‚ cups-2.2.7/templates/ja/printer-confirm.tmpl000664 000765 000024 00000000741 13255074424 021561 0ustar00msweetstaff000000 000000

    プリンター {printer_name} ã®å‰Šé™¤

    警告: 本当ã«ãƒ—リンター {printer_name} を削除ã—ã¦ã‚ˆã„ã§ã™ã‹ï¼Ÿ

    cups-2.2.7/templates/ja/printer-default.tmpl000664 000765 000024 00000000750 13255074424 021550 0ustar00msweetstaff000000 000000

    {is_class?クラス:プリンター} {printer_name} をデフォルトã«è¨­å®š

    {is_class?クラス:プリンター} {printer_name} をサーãƒãƒ¼ã®ãƒ‡ãƒ•ォルトプリンターã«è¨­å®šã—ã¾ã—ãŸã€‚

    注æ„: lpoptions コマンドã§è¨­å®šã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ‡ãƒ•ォルトã¯ã€ ã“ã®ã‚µãƒ¼ãƒãƒ¼ã®ãƒ‡ãƒ•ォルト設定を上書ãã—ã¾ã™ã€‚
    cups-2.2.7/templates/ja/printer-deleted.tmpl000664 000765 000024 00000000210 13255074424 021521 0ustar00msweetstaff000000 000000

    プリンター {printer_name} ã®å‰Šé™¤

    プリンター {printer_name} ã¯æ­£ã—ã削除ã•れã¾ã—ãŸã€‚ cups-2.2.7/templates/ja/printer-jobs-header.tmpl000664 000765 000024 00000000041 13255074424 022300 0ustar00msweetstaff000000 000000

    ジョブ

    cups-2.2.7/templates/ja/printer-modified.tmpl000664 000765 000024 00000000257 13255074424 021706 0ustar00msweetstaff000000 000000

    プリンター {printer_name} ã®å¤‰æ›´

    プリンター {printer_name} ã¯æ­£ã—ã変更ã•れã¾ã—ãŸã€‚ cups-2.2.7/templates/ja/printer-reject.tmpl000664 000765 000024 00000000413 13255074424 021374 0ustar00msweetstaff000000 000000

    {is_class?クラス:プリンター} {printer_name} ã®ã‚¸ãƒ§ãƒ–ã®æ‹’å¦

    {is_class?クラス:プリンター} {printer_name} ã¯ã‚¸ãƒ§ãƒ–ã‚’å—ã‘付ã‘ãªããªã‚Šã¾ã—ãŸã€‚

    cups-2.2.7/templates/ja/printer-start.tmpl000664 000765 000024 00000000344 13255074424 021260 0ustar00msweetstaff000000 000000

    {is_class?クラス:プリンター} {printer_name} ã®å†é–‹

    {is_class?クラス:プリンター} {printer_name} ã¯å†é–‹ã—ã¾ã—ãŸã€‚

    cups-2.2.7/templates/ja/printer-stop.tmpl000664 000765 000024 00000000344 13255074424 021110 0ustar00msweetstaff000000 000000

    {is_class?クラス:プリンター} {printer_name} ã®åœæ­¢

    {is_class?クラス:プリンター} {printer_name} ã¯åœæ­¢ã—ã¾ã—ãŸã€‚

    cups-2.2.7/templates/ja/printer.tmpl000664 000765 000024 00000005425 13255074424 020132 0ustar00msweetstaff000000 000000

    {printer_name} ({printer_state=3?待機中:{printer_state=4?処ç†ä¸­:ä¸€æ™‚åœæ­¢ä¸­}}, {printer_is_accepting_jobs=0?ジョブを拒å¦ä¸­:ジョブをå—ã‘付ã‘中}, {server_is_sharing_printers=0?éž:{printer_is_shared=0?éž:}} 共有{default_name={printer_name}?, サーãƒãƒ¼ã®ãƒ‡ãƒ•ォルト:})

    説明:{printer_info}
    場所:{printer_location}
    プリンタードライãƒãƒ¼:{printer_make_and_model} ({color_supported=1?カラー:白黒}{sides_supported=one-sided?:, 両é¢å¯})
    接続:{device_uri}
    デフォルト設定:ãƒãƒŠãƒ¼={job_sheets_default} 用紙サイズ={media_default?{media_default}:䏿˜Ž} {sides_default?䏡颿Œ‡å®š={sides_default}:}
    cups-2.2.7/templates/ja/printers-header.tmpl000664 000765 000024 00000000214 13255074424 021532 0ustar00msweetstaff000000 000000

    {total=0?プリンターã¯ã‚りã¾ã›ã‚“:{total} å°ã®ãƒ—リンターã®ã†ã¡ {#printer_name} å°ã‚’表示中}。

    cups-2.2.7/templates/ja/printers.tmpl000664 000765 000024 00000001022 13255074424 020302 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
    キューå説明場所メーカーã¨ãƒ¢ãƒ‡ãƒ«çŠ¶æ…‹
    {printer_name}{printer_info}{printer_location}{printer_make_and_model}{printer_state=3?待機中:{printer_state=4?処ç†ä¸­:åœæ­¢}}{printer_state_message? - "{printer_state_message}":}
    } cups-2.2.7/templates/ja/restart.tmpl000664 000765 000024 00000005106 13255074424 020127 0ustar00msweetstaff000000 000000

    設定ã®å¤‰æ›´

    Busy Indicator サーãƒãƒ¼ãŒå†èµ·å‹•ã™ã‚‹é–“ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„...

    cups-2.2.7/templates/ja/samba-export.tmpl000664 000765 000024 00000003776 13255074424 021060 0ustar00msweetstaff000000 000000

    プリンターを Samba ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ

    {error?

    プリンターを Samba ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“\:

    {error}

    ã‚ˆã‚Šè©³ç´°ãªæƒ…å ±ã«ã¤ã„ã¦ã¯ error_log ファイルをå‚ç…§ã—ã¦ãã ã•ã„。

    :

    ã“ã®ãƒšãƒ¼ã‚¸ã¯ã€Windows クライアントãŒãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—上㮠マイãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ ã‚„ ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®å ´æ‰€ アイコン経由ã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã€ãƒ—リンター㮠Samba ã¸ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã‚’許å¯ã—ã¾ã™ã€‚cupsaddsmb(8) man ãƒšãƒ¼ã‚¸ã«æ›¸ã‹ã‚Œã¦ã„るよã†ã«ã€ 事å‰ã« Windows PostScript ドライãƒãƒ¼ã‚’インストールã—ã¦ãŠãå¿…è¦ãŒã‚りã¾ã™ã€‚

    }
    プリンター:
    ã™ã¹ã¦ã®ãƒ—リンターをエクスãƒãƒ¼ãƒˆ
    Samba ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å: (å¿…é ˆ)
    Samba ã®ãƒ‘スワード: (å¿…é ˆ)
    cups-2.2.7/templates/ja/samba-exported.tmpl000664 000765 000024 00000000121 13255074424 021346 0ustar00msweetstaff000000 000000

    プリンター㯠Samba ã«æ­£ã—ãエクスãƒãƒ¼ãƒˆã•れã¾ã—ãŸã€‚

    cups-2.2.7/templates/ja/search.tmpl000664 000765 000024 00000001050 13255074424 017702 0ustar00msweetstaff000000 000000
    {WHICH_JOBS?:} {ORDER?:}

    {SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?クラス:{SECTION=jobs?ジョブ:プリンター}}} 内を検索:

    cups-2.2.7/templates/ja/set-printer-options-header.tmpl000664 000765 000024 00000001564 13255074424 023642 0ustar00msweetstaff000000 000000

    {printer_name} ã®ãƒ‡ãƒ•ォルトオプションã®å¤‰æ›´

    {HAVE_AUTOCONFIGURE?:}

    {[group_id] {group}     }

    cups-2.2.7/templates/ja/set-printer-options-trailer.tmpl000664 000765 000024 00000000701 13255074424 024044 0ustar00msweetstaff000000 000000
    cups-2.2.7/templates/ja/subscription-added.tmpl000664 000765 000024 00000000111 13255074424 022215 0ustar00msweetstaff000000 000000

    {subscription_name} ã®è³¼èª­ã¯æ­£ã—ã追加ã•れã¾ã—ãŸã€‚

    cups-2.2.7/templates/ja/subscription-canceled.tmpl000664 000765 000024 00000000115 13255074424 022716 0ustar00msweetstaff000000 000000

    購読 #{notify_subscription_id} ã¯ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•れã¾ã—ãŸã€‚

    cups-2.2.7/templates/ja/test-page.tmpl000664 000765 000024 00000000317 13255074424 020333 0ustar00msweetstaff000000 000000

    {printer_name} ã®ãƒ†ã‚¹ãƒˆãƒšãƒ¼ã‚¸å°åˆ·

    テストページをé€ä¿¡ã—ã¾ã—ãŸ; ジョブ ID 㯠{printer_name}-{job_id} ã§ã™ã€‚

    cups-2.2.7/templates/ja/trailer.tmpl000664 000765 000024 00000000332 13255074424 020101 0ustar00msweetstaff000000 000000
    cups-2.2.7/templates/ja/users.tmpl000664 000765 000024 00000001667 13255074424 017614 0ustar00msweetstaff000000 000000
    {IS_CLASS?:}

    {printer_name} ã«è¨±å¯ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼

    ユーザー:
    ã“れらã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å°åˆ·ã‚’è¨±å¯ ã“れらã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å°åˆ·ã‚’ç¦æ­¢
    cups-2.2.7/templates/fr/add-class.tmpl000664 000765 000024 00000002124 13255074424 020310 0ustar00msweetstaff000000 000000

    Ajouter une classe

    Nom :
    (Peux contenir n'importe quel caractère sauf "/", "#", et espace)
    Description :
    (Description compréhensible comme "HP LaserJet Recto/Verso")
    Emplacement :
    (Emplacement compréhensible comme "Lab 1")
    Membres :
    cups-2.2.7/templates/fr/add-printer.tmpl000664 000765 000024 00000003230 13255074424 020665 0ustar00msweetstaff000000 000000

    Ajouter une imprimante

    {?current_make!?:} {?current_make_and_model!?:}
    Nom \:
    (Peux contenir n'importe quel caractère sauf "/", "#", et espace)
    Description :
    (Description compréhensible comme "HP LaserJet Recto/Verso")
    Emplacement :
    (Emplacement compréhensible comme "Lab 1")
    Connexion : {device_uri}
    Partage : Partager cette imprimante
    cups-2.2.7/templates/fr/add-rss-subscription.tmpl000664 000765 000024 00000005054 13255074424 022541 0ustar00msweetstaff000000 000000

    S'abonner à un flux RSS

    Nom :
    (Peux contenir n'importe quel caractère sauf "/", "#", et espace)
    File :
    Evénements : Tâches créées
    Tâches finies
    Tâches stoppées
    Options de tâche modifiées
         Files arrêtées
    File ajoutée
    File modifiée
    File supprimée
         Serveur démarré
    Serveur arrêté
    Serveur redémarré
    Audit de sécurité du serveur
    Nombre maximum d'événements :
    cups-2.2.7/templates/fr/admin.tmpl000664 000765 000024 00000015302 13255074424 017547 0ustar00msweetstaff000000 000000

    Imprimantes

    {have_samba?
    :}

    Classes

    Tâches

    Serveur

    {SETTINGS_ERROR?

    {SETTINGS_MESSAGE}

    {SETTINGS_ERROR}
    :
    {ADVANCEDSETTINGS?

    Paramètres du serveur \:

    Avancé
    Partager les imprimantes connectées à ce système
            Nombre maximum de clients \:
             Autoriser l'impression depuis Internet
             Annoncer l'interface Web
    Autoriser l'administration à distance
    {have_gssapi? Utiliser l'authentification Kerberos (FAQ)
    :} Autoriser les utilisateurs à annuler n'importe quelle tâche (Pas seulement les leurs)
    Conserver l'historique des tâches
            Maximum jobs (0 for no limit)\:
            Conserver les meta-données \:
            Conserver les documents \:
    Enregistrer les informations de debug pour la résolution de problèmes
            Taille maximum du journal système \:

    :

    Paramètres du serveur \:

    Avancé
    Partager les imprimantes connectées à ce système
             Autoriser l'impression depuis Internet
    Autoriser l'administration à distance
    {have_gssapi? Utiliser l'authentification Kerberos (FAQ)
    :} Autoriser les utilisateurs à annuler n'importe quelle tâche (Pas seulement les leurs)
    Enregistrer les informations de debug pour la résolution de problèmes

    }

    }

    Abonnements RSS

    {notify_subscription_id?{[notify_subscription_id] }
    NomÉvénementsNom de la file
    {notify_recipient_name}
     
    {notify_events} {notify_printer_name?{notify_printer_name}:Toutes les files}
    :}
    cups-2.2.7/templates/fr/choose-device.tmpl000664 000765 000024 00000003340 13255074424 021173 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modifier {printer_name}:Ajouter une imprimante}

    {CUPS_GET_DEVICES_DONE?
    {printer_name?:} {op=add-printer?:}
    Connexion courante \: {current_device_uri}
    Imprimantes locales \: {[device_uri]{device_class!network? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    :}}
    Imprimantes réseaux découvertes \: {[device_uri]{device_class=network?{device_uri~[a-z]+://? {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    :}:}}
    Autres imprimantes réseaux \: {[device_uri]{device_class=network?{device_uri~[a-z]+://?: {device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}
    }:}}
    :

    Indicateur d'occupation Recherche en cours...

    } cups-2.2.7/templates/fr/choose-make.tmpl000775 000765 000024 00000003645 13255074424 020664 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modifier {printer_name}:Ajouter une imprimante}

    {printer_name?:} {op=modify-printer?:}
    Nom : {printer_name}
    Description : {printer_info}
    Emplacement : {printer_location}
    Connexion : {device_uri}
    Partage : {?printer_is_shared=?Ne pas:{?printer_is_shared=0?Do Not:}} partager cette imprimante
    Marque :
     
    Ou donner un fichier PPD :
    cups-2.2.7/templates/fr/choose-model.tmpl000664 000765 000024 00000004203 13255074424 021033 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modifier {printer_name}:Ajouter une imprimante}

    {printer_name?:} {op=modify-printer?:}
    Nom : {printer_name}
    Description : {printer_info}
    Emplacement : {printer_location}
    Connexion : {device_uri}
    Partage : {?printer_is_shared=?Ne pas:{?printer_is_shared=0?Do Not:}} partager cette imprimante
    Marque : {PPD_MAKE}
    Modèle :
    Ou donner un fichier PPD :
    cups-2.2.7/templates/fr/choose-serial.tmpl000664 000765 000024 00000002644 13255074424 021221 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modifier {printer_name}:Ajouter une imprimante}

    {printer_name?:}
    Connexion : {device_uri}
    Baud/s :
    Parité :
    Bits de données :
    Contrôle de flux :
    cups-2.2.7/templates/fr/choose-uri.tmpl000664 000765 000024 00000002071 13255074424 020533 0ustar00msweetstaff000000 000000

    {op=modify-printer?Modifier {printer_name}:Ajouter une imprimante}

    {printer_name?:}
    Connexion :
    Exemples :
        http://hostname:631/ipp/
        http://hostname:631/ipp/port1
    
        ipp://hostname/ipp/
        ipp://hostname/ipp/port1
    
        lpd://hostname/queue
    
        socket://hostname
        socket://hostname:9100
    

    Voir "Imprimantes réseaux" pour construire l'URI à employée avec votre imprimante.

    cups-2.2.7/templates/fr/class-added.tmpl000664 000765 000024 00000000244 13255074424 020622 0ustar00msweetstaff000000 000000

    Ajouter une classe

    La classe {printer_name} a été ajoutée avec succès. cups-2.2.7/templates/fr/class-confirm.tmpl000664 000765 000024 00000000716 13255074424 021222 0ustar00msweetstaff000000 000000

    Supprimer la classe {printer_name}

    Attention: Etes-vous sur(e) de vouloir supprimer la classe {printer_name}?

    cups-2.2.7/templates/fr/class-deleted.tmpl000664 000765 000024 00000000220 13255074424 021161 0ustar00msweetstaff000000 000000

    Supprimer la classe {printer_name}

    La classe {printer_name} a été supprimée avec succès. cups-2.2.7/templates/fr/class-jobs-header.tmpl000664 000765 000024 00000000037 13255074424 021744 0ustar00msweetstaff000000 000000

    Tâches

    cups-2.2.7/templates/fr/class-modified.tmpl000664 000765 000024 00000000264 13255074424 021343 0ustar00msweetstaff000000 000000

    Modifier la classe {printer_name}

    La classe {printer_name} a été modifiée avec succès. cups-2.2.7/templates/fr/class.tmpl000664 000765 000024 00000004652 13255074424 017572 0ustar00msweetstaff000000 000000

    {printer_name} ({printer_state=3?En attente:{printer_state=4?En cours d'impression:Arrêté}}, {printer_is_accepting_jobs=0?rejette les tâches:accepte les tâches}, {server_is_sharing_printers=0?Non:{printer_is_shared=0?Non:}} partagée{default_name={printer_name}?, imprimante par défaut:})

    Description :{printer_info}
    Emplacement :{printer_location}
    Membres :{?member_uris=?Aucun:{member_uris}}
    Par défaut :job-sheets={job_sheets_default} media={media_default?{media_default}:inconnu} {sides_default?sides={sides_default}:}
    cups-2.2.7/templates/fr/classes-header.tmpl000664 000765 000024 00000000155 13255074424 021342 0ustar00msweetstaff000000 000000

    {total=0?Pas de classes:Affichage de {#printer_name} sur {total} classe{total=1?:es}}.

    cups-2.2.7/templates/fr/classes.tmpl000664 000765 000024 00000001044 13255074424 020112 0ustar00msweetstaff000000 000000 {#printer_name=0?: {[printer_name] }
    Nom de la fileDescriptionEmplacementMembresÉtat
    {printer_name}{printer_info}{printer_location}{?member_uris=?Aucun:{member_uris}}{printer_state=3?Inoccupé:{printer_state=4?En cours d'impression:En pause}}{printer_state_message? - "{printer_state_message}":}
    } cups-2.2.7/templates/fr/command.tmpl000664 000765 000024 00000000720 13255074424 020073 0ustar00msweetstaff000000 000000

    {title} sur {printer_name}

    {job_state>5?:Busy Indicator }Commandes de tâche d'impression {job_state=3?en attente:{job_state=4?retenu: {job_state=5?en cours d'impression:{job_state=6?annulé: {job_state=7?canceled:{job_state=8?annulé:terminé}}}}}}{job_state=9?:{job_printer_state_message?, "{job_printer_state_message}":}}

    cups-2.2.7/templates/fr/edit-config.tmpl000664 000765 000024 00000001175 13255074424 020652 0ustar00msweetstaff000000 000000

    Édition du fichier de configuration

    cups-2.2.7/templates/fr/error-op.tmpl000664 000765 000024 00000000203 13255074424 020216 0ustar00msweetstaff000000 000000

    {?title} {?printer_name} Erreur

    Erreur:

    Opération inconnue "{op}"!
    cups-2.2.7/templates/fr/error.tmpl000664 000765 000024 00000000176 13255074424 017613 0ustar00msweetstaff000000 000000

    {?title} {?printer_name} Erreur

    {?message?{message}:Erreur}:

    {error}
    cups-2.2.7/templates/fr/header.tmpl.in000664 000765 000024 00000003357 13255074424 020323 0ustar00msweetstaff000000 000000 {refresh_page?:} {title} - CUPS @CUPS_VERSION@@CUPS_REVISION@

    {title}

    cups-2.2.7/templates/fr/help-header.tmpl000664 000765 000024 00000003204 13255074424 020633 0ustar00msweetstaff000000 000000
    {TOPIC?:}

    Search in {HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:All Documents}}:

    {QUERY?

    Search Results in {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:All Documents}}\:

    {QTEXT?:} :

    No matches found.

    }
    :} {HELPTITLE?
    :

    Online Help

    This is the CUPS online help interface. Enter search words above or click on any of the documentation links to display online help information.

    If you are new to CUPS, read the "Overview of CUPS" page.

    The CUPS home page also provides many resources including user discussion forums, answers to frequently-asked questions, and a form for submitting bug reports and feature requests.

    } cups-2.2.7/templates/fr/help-printable.tmpl000664 000765 000024 00000000562 13255074424 021367 0ustar00msweetstaff000000 000000 {HELPTITLE} cups-2.2.7/templates/fr/help-trailer.tmpl000664 000765 000024 00000000000 13255074424 021034 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/fr/job-cancel.tmpl000664 000765 000024 00000000227 13255074424 020454 0ustar00msweetstaff000000 000000

    Annuler la Tâche {job_id}

    La tâche {job_id} a été annulée. cups-2.2.7/templates/fr/job-hold.tmpl000664 000765 000024 00000000220 13255074424 020146 0ustar00msweetstaff000000 000000

    Retenir la tâche {job_id}

    La tâche {job_id} a été retenue. cups-2.2.7/templates/fr/job-move.tmpl000664 000765 000024 00000001310 13255074424 020167 0ustar00msweetstaff000000 000000

    {job_id?:}

    {job_id?Transférer la tâche {job_id}:Transférer toutes les tâches}

    Nouvelle destination:
    cups-2.2.7/templates/fr/job-moved.tmpl000664 000765 000024 00000000472 13255074424 020343 0ustar00msweetstaff000000 000000

    {job_id?Transférer la tâche {job_id}:Transférer toutes les tâches}

    {job_id?Job {job_id}:Toutes les tâches} transférée(s) vers {job_printer_name}.

    cups-2.2.7/templates/fr/job-release.tmpl000664 000765 000024 00000000245 13255074424 020647 0ustar00msweetstaff000000 000000

    Libérer la Tâche {job_id}

    La tâche {job_id} a été libérée. cups-2.2.7/templates/fr/job-restart.tmpl000664 000765 000024 00000000242 13255074424 020710 0ustar00msweetstaff000000 000000

    Réimprimer la Tâche {job_id}

    La tâche {job_id} a été relancée. cups-2.2.7/templates/fr/jobs-header.tmpl000664 000765 000024 00000001540 13255074424 020641 0ustar00msweetstaff000000 000000 {?which_jobs=?:

    } {?which_jobs=completed?:
    } {?which_jobs=all?:
    }

    {?which_jobs=?Affichage des tâches dan l'ordre d'impression; les tâches maintenues apparraissent en premier.:{which_jobs=Affichage des tâches dans l'ordre croissant.?:Affichage des tâches dans l'ordre décroissant.}}

    cups-2.2.7/templates/fr/jobs.tmpl000664 000765 000024 00000005537 13255074424 017425 0ustar00msweetstaff000000 000000 {#job_id=0?: {[job_id] }
    IDNomUtilisateurTaillePagesÉtatContrôle
    {job_printer_name}-{job_id}{?phone? ({phone}):}  {?job_name=?Inconnu:{job_name}}  {?job_originating_user_name=?Withheld:{job_originating_user_name}}  {job_k_octets}k  {job_impressions_completed=0?Inconnu:{?job_impressions_completed}}  {job_state=3?en attente depuis
    {?time_at_creation=?Unknown:{time_at_creation}}:{job_state=4?retenu depuis le
    {?time_at_creation=?Unknown:{time_at_creation}}: {job_state=5?en cours d'impression depuis
    {?time_at_processing=?Unknown:{time_at_processing}}:{job_state=6?arrêté: {job_state=7?annulé depuis
    {?time_at_completed=?Unknown:{time_at_completed}}:{job_state=8?annulé:terminé depuis
    {?time_at_completed=?Unknown:{time_at_completed}}}}}}}} {job_printer_state_message?
    "{job_printer_state_message}":}
    {job_preserved>0?{job_state>5?
    :}:} {job_state=4?
    :} {job_state=3?
    :} {job_state<7?
    :}  
    } cups-2.2.7/templates/fr/list-available-printers.tmpl000664 000765 000024 00000001217 13255074424 023214 0ustar00msweetstaff000000 000000

    Imprimantes disponibles

    {#device_uri=0?

    Aucune imprimante trouvée.

    :
      {[device_uri]
    • {device_make_and_model} ({device_info})
    • }
    } cups-2.2.7/templates/fr/modify-class.tmpl000664 000765 000024 00000001554 13255074424 021055 0ustar00msweetstaff000000 000000

    Modifier la classe {printer_name}

    Description :
    Emplacement :
    Membres :
    cups-2.2.7/templates/fr/modify-printer.tmpl000664 000765 000024 00000002460 13255074424 021430 0ustar00msweetstaff000000 000000

    Modifier {printer_name}

    Description :
    (Description compréhensible comme "HP LaserJet Recto/Verso")
    Emplacement :
    (Emplacement compréhensible comme "Lab 1")
    Connexion : {device_uri}
    Partage : Partager cette imprimante
    cups-2.2.7/templates/fr/norestart.tmpl000664 000765 000024 00000000275 13255074424 020503 0ustar00msweetstaff000000 000000

    Modifier les paramètres

    Le serveur n'a pas été redémarré car la configuration n'a pas été modifiée...

    cups-2.2.7/templates/fr/option-boolean.tmpl000664 000765 000024 00000000350 13255074424 021401 0ustar00msweetstaff000000 000000 {keytext}: {[choices]{text}} cups-2.2.7/templates/fr/option-conflict.tmpl000664 000765 000024 00000000374 13255074424 021571 0ustar00msweetstaff000000 000000

    Error: Les options suivantes sont incompatibles entre elles :

    Veuillez modifier une ou plusieurs de ces options pour résoudre les conflits.

    cups-2.2.7/templates/fr/option-header.tmpl000664 000765 000024 00000000131 13255074424 021207 0ustar00msweetstaff000000 000000

    {group}

    cups-2.2.7/templates/fr/option-pickmany.tmpl000664 000765 000024 00000000377 13255074424 021606 0ustar00msweetstaff000000 000000 cups-2.2.7/templates/fr/option-pickone.tmpl000664 000765 000024 00000001715 13255074424 021420 0ustar00msweetstaff000000 000000 :} cups-2.2.7/templates/fr/option-trailer.tmpl000664 000765 000024 00000000163 13255074424 021426 0ustar00msweetstaff000000 000000
    {keytext}:
    {keytext}: {iscustom=1?{[params] }
    {paramtext}: {params=Units?:}

    cups-2.2.7/templates/fr/pager.tmpl000664 000765 000024 00000002443 13255074424 017557 0ustar00msweetstaff000000 000000
    {PREV?{PREV>0?
    :}
    : }
    {NEXT?
    : } {LAST?
    :}
    cups-2.2.7/templates/fr/printer-accept.tmpl000664 000765 000024 00000000417 13255074424 021400 0ustar00msweetstaff000000 000000 H2 CLASS="title">Accepte les Tâches sur {is_class?la classe:l'imprimante} {printer_name}

") || !_cups_strcasecmp(line, "")) loc = parent; else if (!value) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing value on line %d of %s.", linenum, ConfigurationFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } else if (!parse_aaa(loc, line, value, linenum)) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown Location directive %s on line %d of %s.", line, linenum, ConfigurationFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } } cupsdLogMessage(CUPSD_LOG_ERROR, "Unexpected end-of-file at line %d while reading location.", linenum); return ((FatalErrors & CUPSD_FATAL_CONFIG) ? 0 : linenum); } /* * 'read_policy()' - Read a definition. */ static int /* O - New line number or 0 on error */ read_policy(cups_file_t *fp, /* I - Configuration file */ char *policy, /* I - Location name/path */ int linenum) /* I - Current line number */ { int i; /* Looping var */ cupsd_policy_t *pol; /* Policy */ cupsd_location_t *op; /* Policy operation */ int num_ops; /* Number of IPP operations */ ipp_op_t ops[100]; /* Operations */ char line[HTTP_MAX_BUFFER], /* Line buffer */ *value, /* Value for directive */ *valptr; /* Pointer into value */ /* * Create the policy... */ if ((pol = cupsdFindPolicy(policy)) != NULL) cupsdLogMessage(CUPSD_LOG_WARN, "Duplicate on line %d of %s.", policy, linenum, ConfigurationFile); else if ((pol = cupsdAddPolicy(policy)) == NULL) return (0); /* * Read from the file... */ op = NULL; num_ops = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { /* * Decode the directive... */ if (!_cups_strcasecmp(line, "")) { if (op) cupsdLogMessage(CUPSD_LOG_WARN, "Missing
before on line %d of %s.", linenum, ConfigurationFile); set_policy_defaults(pol); return (linenum); } else if (!_cups_strcasecmp(line, "") && op) { /* * Finish the current operation limit... */ if (num_ops > 1) { /* * Copy the policy to the other operations... */ for (i = 1; i < num_ops; i ++) cupsdAddPolicyOp(pol, op, ops[i]); } op = NULL; } else if (!value) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing value on line %d of %s.", linenum, ConfigurationFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } else if (!_cups_strcasecmp(line, "JobPrivateAccess") || !_cups_strcasecmp(line, "JobPrivateValues") || !_cups_strcasecmp(line, "SubscriptionPrivateAccess") || !_cups_strcasecmp(line, "SubscriptionPrivateValues")) { if (op) { cupsdLogMessage(CUPSD_LOG_ERROR, "%s directive must appear outside ... " "on line %d of %s.", line, linenum, ConfigurationFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } else { /* * Pull out whitespace-delimited values... */ while (*value) { /* * Find the end of the current value... */ for (valptr = value; !isspace(*valptr & 255) && *valptr; valptr ++); if (*valptr) *valptr++ = '\0'; /* * Save it appropriately... */ if (!_cups_strcasecmp(line, "JobPrivateAccess")) { /* * JobPrivateAccess {all|default|user/group list|@@ACL} */ if (!_cups_strcasecmp(value, "default")) { cupsdAddString(&(pol->job_access), "@OWNER"); cupsdAddString(&(pol->job_access), "@SYSTEM"); } else cupsdAddString(&(pol->job_access), value); } else if (!_cups_strcasecmp(line, "JobPrivateValues")) { /* * JobPrivateValues {all|none|default|attribute list} */ if (!_cups_strcasecmp(value, "default")) { cupsdAddString(&(pol->job_attrs), "job-name"); cupsdAddString(&(pol->job_attrs), "job-originating-host-name"); cupsdAddString(&(pol->job_attrs), "job-originating-user-name"); cupsdAddString(&(pol->job_attrs), "phone"); } else cupsdAddString(&(pol->job_attrs), value); } else if (!_cups_strcasecmp(line, "SubscriptionPrivateAccess")) { /* * SubscriptionPrivateAccess {all|default|user/group list|@@ACL} */ if (!_cups_strcasecmp(value, "default")) { cupsdAddString(&(pol->sub_access), "@OWNER"); cupsdAddString(&(pol->sub_access), "@SYSTEM"); } else cupsdAddString(&(pol->sub_access), value); } else /* if (!_cups_strcasecmp(line, "SubscriptionPrivateValues")) */ { /* * SubscriptionPrivateValues {all|none|default|attribute list} */ if (!_cups_strcasecmp(value, "default")) { cupsdAddString(&(pol->sub_attrs), "notify-events"); cupsdAddString(&(pol->sub_attrs), "notify-pull-method"); cupsdAddString(&(pol->sub_attrs), "notify-recipient-uri"); cupsdAddString(&(pol->sub_attrs), "notify-subscriber-user-name"); cupsdAddString(&(pol->sub_attrs), "notify-user-data"); } else cupsdAddString(&(pol->sub_attrs), value); } /* * Find the next string on the line... */ for (value = valptr; isspace(*value & 255); value ++); } } } else if (!op) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing directive before %s on line %d of %s.", line, linenum, ConfigurationFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } else if (!parse_aaa(op, line, value, linenum)) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown Policy Limit directive %s on line %d of %s.", line, linenum, ConfigurationFile); if (FatalErrors & CUPSD_FATAL_CONFIG) return (0); } } cupsdLogMessage(CUPSD_LOG_ERROR, "Unexpected end-of-file at line %d while reading policy " "\"%s\".", linenum, policy); return ((FatalErrors & CUPSD_FATAL_CONFIG) ? 0 : linenum); } /* * 'set_policy_defaults()' - Set default policy values as needed. */ static void set_policy_defaults(cupsd_policy_t *pol)/* I - Policy */ { cupsd_location_t *op; /* Policy operation */ /* * Verify that we have an explicit policy for Validate-Job, Cancel-Jobs, * Cancel-My-Jobs, Close-Job, and CUPS-Get-Document, which ensures that * upgrades do not introduce new security issues... * * CUPS STR #4659: Allow a lone policy. */ if (cupsArrayCount(pol->ops) > 1) { if ((op = cupsdFindPolicyOp(pol, IPP_VALIDATE_JOB)) == NULL || op->op == IPP_ANY_OPERATION) { if ((op = cupsdFindPolicyOp(pol, IPP_PRINT_JOB)) != NULL && op->op != IPP_ANY_OPERATION) { /* * Add a new limit for Validate-Job using the Print-Job limit as a * template... */ cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Validate-Job defined in policy %s - using Print-Job's policy.", pol->name); cupsdAddPolicyOp(pol, op, IPP_VALIDATE_JOB); } else cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Validate-Job defined in policy %s and no suitable template found.", pol->name); } if ((op = cupsdFindPolicyOp(pol, IPP_CANCEL_JOBS)) == NULL || op->op == IPP_ANY_OPERATION) { if ((op = cupsdFindPolicyOp(pol, IPP_PAUSE_PRINTER)) != NULL && op->op != IPP_ANY_OPERATION) { /* * Add a new limit for Cancel-Jobs using the Pause-Printer limit as a * template... */ cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Cancel-Jobs defined in policy %s - using Pause-Printer's policy.", pol->name); cupsdAddPolicyOp(pol, op, IPP_CANCEL_JOBS); } else cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Cancel-Jobs defined in policy %s and no suitable template found.", pol->name); } if ((op = cupsdFindPolicyOp(pol, IPP_CANCEL_MY_JOBS)) == NULL || op->op == IPP_ANY_OPERATION) { if ((op = cupsdFindPolicyOp(pol, IPP_SEND_DOCUMENT)) != NULL && op->op != IPP_ANY_OPERATION) { /* * Add a new limit for Cancel-My-Jobs using the Send-Document limit as * a template... */ cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Cancel-My-Jobs defined in policy %s - using Send-Document's policy.", pol->name); cupsdAddPolicyOp(pol, op, IPP_CANCEL_MY_JOBS); } else cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Cancel-My-Jobs defined in policy %s and no suitable template found.", pol->name); } if ((op = cupsdFindPolicyOp(pol, IPP_CLOSE_JOB)) == NULL || op->op == IPP_ANY_OPERATION) { if ((op = cupsdFindPolicyOp(pol, IPP_SEND_DOCUMENT)) != NULL && op->op != IPP_ANY_OPERATION) { /* * Add a new limit for Close-Job using the Send-Document limit as a * template... */ cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Close-Job defined in policy %s - using Send-Document's policy.", pol->name); cupsdAddPolicyOp(pol, op, IPP_CLOSE_JOB); } else cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Close-Job defined in policy %s and no suitable template found.", pol->name); } if ((op = cupsdFindPolicyOp(pol, CUPS_GET_DOCUMENT)) == NULL || op->op == IPP_ANY_OPERATION) { if ((op = cupsdFindPolicyOp(pol, IPP_SEND_DOCUMENT)) != NULL && op->op != IPP_ANY_OPERATION) { /* * Add a new limit for CUPS-Get-Document using the Send-Document * limit as a template... */ cupsdLogMessage(CUPSD_LOG_WARN, "No limit for CUPS-Get-Document defined in policy %s - using Send-Document's policy.", pol->name); cupsdAddPolicyOp(pol, op, CUPS_GET_DOCUMENT); } else cupsdLogMessage(CUPSD_LOG_WARN, "No limit for CUPS-Get-Document defined in policy %s and no suitable template found.", pol->name); } } /* * Verify we have JobPrivateAccess, JobPrivateValues, * SubscriptionPrivateAccess, and SubscriptionPrivateValues in the policy. */ if (!pol->job_access) { cupsdLogMessage(CUPSD_LOG_WARN, "No JobPrivateAccess defined in policy %s - using defaults.", pol->name); cupsdAddString(&(pol->job_access), "@OWNER"); cupsdAddString(&(pol->job_access), "@SYSTEM"); } if (!pol->job_attrs) { cupsdLogMessage(CUPSD_LOG_WARN, "No JobPrivateValues defined in policy %s - using defaults.", pol->name); cupsdAddString(&(pol->job_attrs), "job-name"); cupsdAddString(&(pol->job_attrs), "job-originating-host-name"); cupsdAddString(&(pol->job_attrs), "job-originating-user-name"); cupsdAddString(&(pol->job_attrs), "phone"); } if (!pol->sub_access) { cupsdLogMessage(CUPSD_LOG_WARN, "No SubscriptionPrivateAccess defined in policy %s - using defaults.", pol->name); cupsdAddString(&(pol->sub_access), "@OWNER"); cupsdAddString(&(pol->sub_access), "@SYSTEM"); } if (!pol->sub_attrs) { cupsdLogMessage(CUPSD_LOG_WARN, "No SubscriptionPrivateValues defined in policy %s - using defaults.", pol->name); cupsdAddString(&(pol->sub_attrs), "notify-events"); cupsdAddString(&(pol->sub_attrs), "notify-pull-method"); cupsdAddString(&(pol->sub_attrs), "notify-recipient-uri"); cupsdAddString(&(pol->sub_attrs), "notify-subscriber-user-name"); cupsdAddString(&(pol->sub_attrs), "notify-user-data"); } } cups-2.2.7/scheduler/conf.h000664 000765 000024 00000023663 13255074424 016241 0ustar00msweetstaff000000 000000 /* * Configuration file definitions for the CUPS scheduler. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Log levels... */ typedef enum { CUPSD_LOG_PPD = -5, /* Used internally for PPD keywords */ CUPSD_LOG_ATTR, /* Used internally for attributes */ CUPSD_LOG_STATE, /* Used internally for printer-state-reasons */ CUPSD_LOG_JOBSTATE, /* Used internally for job-state-reasons */ CUPSD_LOG_PAGE, /* Used internally for page logging */ CUPSD_LOG_NONE, CUPSD_LOG_EMERG, /* Emergency issues */ CUPSD_LOG_ALERT, /* Something bad happened that needs attention */ CUPSD_LOG_CRIT, /* Critical error but server continues */ CUPSD_LOG_ERROR, /* Error condition */ CUPSD_LOG_WARN, /* Warning */ CUPSD_LOG_NOTICE, /* Normal condition that needs logging */ CUPSD_LOG_INFO, /* General information */ CUPSD_LOG_DEBUG, /* General debugging */ CUPSD_LOG_DEBUG2 /* Detailed debugging */ } cupsd_loglevel_t; typedef enum { CUPSD_ACCESSLOG_NONE, /* Log no requests */ CUPSD_ACCESSLOG_CONFIG, /* Log config requests */ CUPSD_ACCESSLOG_ACTIONS, /* Log config, print, and job management requests */ CUPSD_ACCESSLOG_ALL /* Log everything */ } cupsd_accesslog_t; typedef enum { CUPSD_TIME_STANDARD, /* "Standard" Apache/CLF format */ CUPSD_TIME_USECS /* Standard format with microseconds */ } cupsd_time_t; typedef enum { CUPSD_SANDBOXING_OFF, /* No sandboxing */ CUPSD_SANDBOXING_RELAXED, /* Relaxed sandboxing */ CUPSD_SANDBOXING_STRICT /* Strict sandboxing */ } cupsd_sandboxing_t; /* * FatalErrors flags... */ #define CUPSD_FATAL_NONE 0 /* No errors are fatal */ #define CUPSD_FATAL_BROWSE 1 /* Browse bind errors are fatal */ #define CUPSD_FATAL_CONFIG 2 /* Config file syntax errors are fatal */ #define CUPSD_FATAL_LISTEN 4 /* Listen/Port bind errors are fatal */ #define CUPSD_FATAL_LOG 8 /* Log file errors are fatal */ #define CUPSD_FATAL_PERMISSIONS 16 /* File permission errors are fatal */ #define CUPSD_FATAL_ALL ~0 /* All errors are fatal */ /* * Printcap formats... */ #define PRINTCAP_BSD 0 /* Berkeley LPD format */ #define PRINTCAP_SOLARIS 1 /* Solaris lpsched format */ #define PRINTCAP_PLIST 2 /* macOS plist format */ /* * ServerAlias data... */ typedef struct { size_t namelen; /* Length of alias name */ char name[1]; /* Alias name */ } cupsd_alias_t; /* * Globals... */ VAR char *ConfigurationFile VALUE(NULL), /* cupsd.conf file to use */ *CupsFilesFile VALUE(NULL), /* cups-files.conf file to use */ *ServerName VALUE(NULL), /* FQDN for server */ *ServerAdmin VALUE(NULL), /* Administrator's email */ *ServerRoot VALUE(NULL), /* Root directory for scheduler */ *ServerBin VALUE(NULL), /* Root directory for binaries */ *StateDir VALUE(NULL), /* Root directory for state data */ *RequestRoot VALUE(NULL), /* Directory for request files */ *DocumentRoot VALUE(NULL); /* Root directory for documents */ VAR cups_array_t *ServerAlias VALUE(NULL); /* Alias names for server */ VAR int ServerNameIsIP VALUE(0); /* Is the ServerName an IP address? */ VAR int NumSystemGroups VALUE(0); /* Number of system group names */ VAR char *SystemGroups[MAX_SYSTEM_GROUPS] VALUE({0}); /* System group names */ VAR gid_t SystemGroupIDs[MAX_SYSTEM_GROUPS] VALUE({0}); /* System group IDs */ VAR char *AccessLog VALUE(NULL), /* Access log filename */ *ErrorLog VALUE(NULL), /* Error log filename */ *PageLog VALUE(NULL), /* Page log filename */ *CacheDir VALUE(NULL), /* Cache file directory */ *DataDir VALUE(NULL), /* Data file directory */ *DefaultLanguage VALUE(NULL), /* Default language encoding */ *DefaultLocale VALUE(NULL), /* Default locale */ *DefaultPaperSize VALUE(NULL), /* Default paper size */ *ErrorPolicy VALUE(NULL), /* Default printer-error-policy */ *RIPCache VALUE(NULL), /* Amount of memory for RIPs */ *TempDir VALUE(NULL), /* Temporary directory */ *Printcap VALUE(NULL), /* Printcap file */ *FontPath VALUE(NULL), /* Font search path */ *RemoteRoot VALUE(NULL), /* Remote root user */ *Classification VALUE(NULL); /* Classification of system */ VAR uid_t User VALUE(1), /* User ID for server */ RunUser VALUE(0); /* User to run as, used for files */ VAR gid_t Group VALUE(0); /* Group ID for server */ VAR cupsd_accesslog_t AccessLogLevel VALUE(CUPSD_ACCESSLOG_ACTIONS); /* Access log level */ VAR int ClassifyOverride VALUE(0), /* Allow overrides? */ LogDebugHistory VALUE(200), /* Amount of automatic debug history */ FatalErrors VALUE(CUPSD_FATAL_CONFIG), /* Which errors are fatal? */ StrictConformance VALUE(FALSE), /* Require strict IPP conformance? */ SyncOnClose VALUE(FALSE); /* Call fsync() when closing files? */ VAR mode_t ConfigFilePerm VALUE(0640U), /* Permissions for config files */ LogFilePerm VALUE(0644U); /* Permissions for log files */ VAR cupsd_loglevel_t LogLevel VALUE(CUPSD_LOG_WARN); /* Error log level */ VAR cupsd_time_t LogTimeFormat VALUE(CUPSD_TIME_STANDARD); /* Log file time format */ VAR cups_file_t *LogStderr VALUE(NULL); /* Stderr file, if any */ VAR cupsd_sandboxing_t Sandboxing VALUE(CUPSD_SANDBOXING_STRICT); /* Sandboxing level */ VAR int UseSandboxing VALUE(1); /* Use sandboxing for child procs? */ VAR int MaxClients VALUE(100), /* Maximum number of clients */ MaxClientsPerHost VALUE(0), /* Maximum number of clients per host */ MaxCopies VALUE(CUPS_DEFAULT_MAX_COPIES), /* Maximum number of copies per job */ MaxLogSize VALUE(1024 * 1024), /* Maximum size of log files */ MaxRequestSize VALUE(0), /* Maximum size of IPP requests */ HostNameLookups VALUE(FALSE), /* Do we do reverse lookups? */ Timeout VALUE(DEFAULT_TIMEOUT), /* Timeout during requests */ KeepAlive VALUE(TRUE), /* Support the Keep-Alive option? */ KeepAliveTimeout VALUE(DEFAULT_KEEPALIVE), /* Timeout between requests */ FileDevice VALUE(FALSE), /* Allow file: devices? */ FilterLimit VALUE(0), /* Max filter cost at any time */ FilterLevel VALUE(0), /* Current filter level */ FilterNice VALUE(0), /* Nice value for filters */ ReloadTimeout VALUE(DEFAULT_KEEPALIVE), /* Timeout before reload from SIGHUP */ RootCertDuration VALUE(300), /* Root certificate update interval */ PrintcapFormat VALUE(PRINTCAP_BSD), /* Format of printcap file? */ DefaultShared VALUE(TRUE), /* Share printers by default? */ MultipleOperationTimeout VALUE(DEFAULT_TIMEOUT), /* multiple-operation-time-out value */ WebInterface VALUE(CUPS_DEFAULT_WEBIF); /* Enable the web interface? */ VAR cups_file_t *AccessFile VALUE(NULL), /* Access log file */ *ErrorFile VALUE(NULL), /* Error log file */ *PageFile VALUE(NULL); /* Page log file */ VAR char *PageLogFormat VALUE(NULL); /* Page log format */ VAR mime_t *MimeDatabase VALUE(NULL); /* MIME type database */ VAR int NumMimeTypes VALUE(0); /* Number of MIME types */ VAR const char **MimeTypes VALUE(NULL); /* Array of MIME types */ #ifdef HAVE_SSL VAR int CreateSelfSignedCerts VALUE(TRUE); /* Automatically create self-signed certs? */ VAR char *ServerKeychain VALUE(NULL); /* Keychain holding cert + key */ #endif /* HAVE_SSL */ #ifdef HAVE_ONDEMAND VAR int IdleExitTimeout VALUE(60); /* Time after which an idle cupsd will exit */ #endif /* HAVE_ONDEMAND */ #ifdef HAVE_AUTHORIZATION_H VAR char *SystemGroupAuthKey VALUE(NULL); /* System group auth key */ #endif /* HAVE_AUTHORIZATION_H */ #ifdef HAVE_GSSAPI VAR char *GSSServiceName VALUE(NULL); /* GSS service name */ VAR int HaveServerCreds VALUE(0); /* Do we have server credentials? */ VAR gss_cred_id_t ServerCreds; /* Server's GSS credentials */ #endif /* HAVE_GSSAPI */ /* * Prototypes... */ extern void cupsdAddAlias(cups_array_t *aliases, const char *name); extern int cupsdCheckLogFile(cups_file_t **lf, const char *logname); extern int cupsdCheckPermissions(const char *filename, const char *suffix, mode_t mode, uid_t user, gid_t group, int is_dir, int create_dir); extern int cupsdCheckProgram(const char *filename, cupsd_printer_t *p); extern int cupsdDefaultAuthType(void); extern void cupsdFreeAliases(cups_array_t *aliases); extern char *cupsdGetDateTime(struct timeval *t, cupsd_time_t format); extern int cupsdLogClient(cupsd_client_t *con, int level, const char *message, ...) __attribute__((__format__(__printf__, 3, 4))); extern void cupsdLogFCMessage(void *context, _cups_fc_result_t result, const char *message); #ifdef HAVE_GSSAPI extern int cupsdLogGSSMessage(int level, OM_uint32 major_status, OM_uint32 minor_status, const char *message, ...); #endif /* HAVE_GSSAPI */ extern int cupsdLogJob(cupsd_job_t *job, int level, const char *message, ...) __attribute__((__format__(__printf__, 3, 4))); extern int cupsdLogMessage(int level, const char *message, ...) __attribute__ ((__format__ (__printf__, 2, 3))); extern int cupsdLogPage(cupsd_job_t *job, const char *page); extern int cupsdLogRequest(cupsd_client_t *con, http_status_t code); extern int cupsdReadConfiguration(void); extern int cupsdWriteErrorLog(int level, const char *message); cups-2.2.7/scheduler/cups-deviced.c000664 000765 000024 00000044153 13255074424 017657 0ustar00msweetstaff000000 000000 /* * Device scanning mini-daemon for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "util.h" #include #include #include #include #include /* * Constants... */ #define MAX_BACKENDS 200 /* Maximum number of backends we'll run */ /* * Backend information... */ typedef struct { char *name; /* Name of backend */ int pid, /* Process ID */ status; /* Exit status */ cups_file_t *pipe; /* Pipe from backend stdout */ int count; /* Number of devices found */ } cupsd_backend_t; /* * Device information structure... */ typedef struct { char device_class[128], /* Device class */ device_info[128], /* Device info/description */ device_uri[1024]; /* Device URI */ } cupsd_device_t; /* * Local globals... */ static int num_backends = 0, /* Total backends */ active_backends = 0; /* Active backends */ static cupsd_backend_t backends[MAX_BACKENDS]; /* Array of backends */ static struct pollfd backend_fds[MAX_BACKENDS]; /* Array for poll() */ static cups_array_t *devices; /* Array of devices */ static uid_t normal_user; /* Normal user ID */ static int device_limit; /* Maximum number of devices */ static int send_class, /* Send device-class attribute? */ send_info, /* Send device-info attribute? */ send_make_and_model, /* Send device-make-and-model attribute? */ send_uri, /* Send device-uri attribute? */ send_id, /* Send device-id attribute? */ send_location; /* Send device-location attribute? */ static int dead_children = 0; /* Dead children? */ /* * Local functions... */ static int add_device(const char *device_class, const char *device_make_and_model, const char *device_info, const char *device_uri, const char *device_id, const char *device_location); static int compare_devices(cupsd_device_t *p0, cupsd_device_t *p1); static double get_current_time(void); static int get_device(cupsd_backend_t *backend); static void process_children(void); static void sigchld_handler(int sig); static int start_backend(const char *backend, int root); /* * 'main()' - Scan for devices and return an IPP response. * * Usage: * * cups-deviced request_id limit options */ int /* O - Exit code */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ int request_id; /* Request ID */ int timeout; /* Timeout in seconds */ const char *server_bin; /* CUPS_SERVERBIN environment variable */ char filename[1024]; /* Backend directory filename */ cups_dir_t *dir; /* Directory pointer */ cups_dentry_t *dent; /* Directory entry */ double current_time, /* Current time */ end_time; /* Ending time */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ cups_array_t *requested, /* requested-attributes values */ *exclude, /* exclude-schemes values */ *include; /* include-schemes values */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ setbuf(stderr, NULL); /* * Check the command-line... */ if (argc != 6) { fputs("Usage: cups-deviced request-id limit timeout user-id options\n", stderr); return (1); } request_id = atoi(argv[1]); if (request_id < 1) { fprintf(stderr, "ERROR: [cups-deviced] Bad request ID %d!\n", request_id); return (1); } device_limit = atoi(argv[2]); if (device_limit < 0) { fprintf(stderr, "ERROR: [cups-deviced] Bad limit %d!\n", device_limit); return (1); } timeout = atoi(argv[3]); if (timeout < 1) { fprintf(stderr, "ERROR: [cups-deviced] Bad timeout %d!\n", timeout); return (1); } normal_user = (uid_t)atoi(argv[4]); if (normal_user <= 0) { fprintf(stderr, "ERROR: [cups-deviced] Bad user %d!\n", normal_user); return (1); } num_options = cupsParseOptions(argv[5], 0, &options); requested = cupsdCreateStringsArray(cupsGetOption("requested-attributes", num_options, options)); exclude = cupsdCreateStringsArray(cupsGetOption("exclude-schemes", num_options, options)); include = cupsdCreateStringsArray(cupsGetOption("include-schemes", num_options, options)); if (!requested || cupsArrayFind(requested, "all") != NULL) { send_class = send_info = send_make_and_model = send_uri = send_id = send_location = 1; } else { send_class = cupsArrayFind(requested, "device-class") != NULL; send_info = cupsArrayFind(requested, "device-info") != NULL; send_make_and_model = cupsArrayFind(requested, "device-make-and-model") != NULL; send_uri = cupsArrayFind(requested, "device-uri") != NULL; send_id = cupsArrayFind(requested, "device-id") != NULL; send_location = cupsArrayFind(requested, "device-location") != NULL; } /* * Listen to child signals... */ #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */ sigset(SIGCHLD, sigchld_handler); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); sigaddset(&action.sa_mask, SIGCHLD); action.sa_handler = sigchld_handler; sigaction(SIGCHLD, &action, NULL); #else signal(SIGCLD, sigchld_handler); /* No, SIGCLD isn't a typo... */ #endif /* HAVE_SIGSET */ /* * Try opening the backend directory... */ if ((server_bin = getenv("CUPS_SERVERBIN")) == NULL) server_bin = CUPS_SERVERBIN; snprintf(filename, sizeof(filename), "%s/backend", server_bin); if ((dir = cupsDirOpen(filename)) == NULL) { fprintf(stderr, "ERROR: [cups-deviced] Unable to open backend directory " "\"%s\": %s", filename, strerror(errno)); return (1); } /* * Setup the devices array... */ devices = cupsArrayNew((cups_array_func_t)compare_devices, NULL); /* * Loop through all of the device backends... */ while ((dent = cupsDirRead(dir)) != NULL) { /* * Skip entries that are not executable files... */ if (!S_ISREG(dent->fileinfo.st_mode) || !isalnum(dent->filename[0] & 255) || (dent->fileinfo.st_mode & (S_IRUSR | S_IXUSR)) != (S_IRUSR | S_IXUSR)) continue; /* * Skip excluded or not included backends... */ if (cupsArrayFind(exclude, dent->filename) || (include && !cupsArrayFind(include, dent->filename))) continue; /* * Backends without permissions for normal users run as root, * all others run as the unprivileged user... */ start_backend(dent->filename, !(dent->fileinfo.st_mode & (S_IWGRP | S_IRWXO))); } cupsDirClose(dir); /* * Collect devices... */ if (getenv("SOFTWARE")) puts("Content-Type: application/ipp\n"); cupsdSendIPPHeader(IPP_OK, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); end_time = get_current_time() + timeout; while (active_backends > 0 && (current_time = get_current_time()) < end_time) { /* * Collect the output from the backends... */ timeout = (int)(1000 * (end_time - current_time)); if (poll(backend_fds, (nfds_t)num_backends, timeout) > 0) { for (i = 0; i < num_backends; i ++) if (backend_fds[i].revents && backends[i].pipe) { cups_file_t *bpipe = backends[i].pipe; /* Copy of pipe for backend... */ do { if (get_device(backends + i)) { backend_fds[i].fd = 0; backend_fds[i].events = 0; break; } } while (bpipe->ptr && memchr(bpipe->ptr, '\n', (size_t)(bpipe->end - bpipe->ptr))); } } /* * Get exit status from children... */ if (dead_children) process_children(); } cupsdSendIPPTrailer(); /* * Terminate any remaining backends and exit... */ if (active_backends > 0) { for (i = 0; i < num_backends; i ++) if (backends[i].pid) kill(backends[i].pid, SIGTERM); } return (0); } /* * 'add_device()' - Add a new device to the list. */ static int /* O - 0 on success, -1 on error */ add_device( const char *device_class, /* I - Device class */ const char *device_make_and_model, /* I - Device make and model */ const char *device_info, /* I - Device information */ const char *device_uri, /* I - Device URI */ const char *device_id, /* I - 1284 device ID */ const char *device_location) /* I - Physical location */ { cupsd_device_t *device; /* New device */ /* * Allocate memory for the device record... */ if ((device = calloc(1, sizeof(cupsd_device_t))) == NULL) { fputs("ERROR: [cups-deviced] Ran out of memory allocating a device!\n", stderr); return (-1); } /* * Copy the strings over... */ strlcpy(device->device_class, device_class, sizeof(device->device_class)); strlcpy(device->device_info, device_info, sizeof(device->device_info)); strlcpy(device->device_uri, device_uri, sizeof(device->device_uri)); /* * Add the device to the array and return... */ if (cupsArrayFind(devices, device)) { /* * Avoid duplicates! */ free(device); } else { cupsArrayAdd(devices, device); if (device_limit <= 0 || cupsArrayCount(devices) < device_limit) { /* * Send device info... */ cupsdSendIPPGroup(IPP_TAG_PRINTER); if (send_class) cupsdSendIPPString(IPP_TAG_KEYWORD, "device-class", device_class); if (send_info) cupsdSendIPPString(IPP_TAG_TEXT, "device-info", device_info); if (send_make_and_model) cupsdSendIPPString(IPP_TAG_TEXT, "device-make-and-model", device_make_and_model); if (send_uri) cupsdSendIPPString(IPP_TAG_URI, "device-uri", device_uri); if (send_id) cupsdSendIPPString(IPP_TAG_TEXT, "device-id", device_id ? device_id : ""); if (send_location) cupsdSendIPPString(IPP_TAG_TEXT, "device-location", device_location ? device_location : ""); fflush(stdout); fputs("DEBUG: Flushed attributes...\n", stderr); } } return (0); } /* * 'compare_devices()' - Compare device names to eliminate duplicates. */ static int /* O - Result of comparison */ compare_devices(cupsd_device_t *d0, /* I - First device */ cupsd_device_t *d1) /* I - Second device */ { int diff; /* Difference between strings */ /* * Sort devices by device-info, device-class, and device-uri... */ if ((diff = cupsdCompareNames(d0->device_info, d1->device_info)) != 0) return (diff); else if ((diff = _cups_strcasecmp(d0->device_class, d1->device_class)) != 0) return (diff); else return (_cups_strcasecmp(d0->device_uri, d1->device_uri)); } /* * 'get_current_time()' - Get the current time as a double value in seconds. */ static double /* O - Time in seconds */ get_current_time(void) { struct timeval curtime; /* Current time */ gettimeofday(&curtime, NULL); return (curtime.tv_sec + 0.000001 * curtime.tv_usec); } /* * 'get_device()' - Get a device from a backend. */ static int /* O - 0 on success, -1 on error */ get_device(cupsd_backend_t *backend) /* I - Backend to read from */ { char line[2048], /* Line from backend */ temp[2048], /* Copy of line */ *ptr, /* Pointer into line */ *dclass, /* Device class */ *uri, /* Device URI */ *make_model, /* Make and model */ *info, /* Device info */ *device_id, /* 1284 device ID */ *location; /* Physical location */ if (cupsFileGets(backend->pipe, line, sizeof(line))) { /* * Each line is of the form: * * class URI "make model" "name" ["1284 device ID"] ["location"] */ strlcpy(temp, line, sizeof(temp)); /* * device-class */ dclass = temp; for (ptr = temp; *ptr; ptr ++) if (isspace(*ptr & 255)) break; while (isspace(*ptr & 255)) *ptr++ = '\0'; /* * device-uri */ if (!*ptr) goto error; for (uri = ptr; *ptr; ptr ++) if (isspace(*ptr & 255)) break; while (isspace(*ptr & 255)) *ptr++ = '\0'; /* * device-make-and-model */ if (*ptr != '\"') goto error; for (ptr ++, make_model = ptr; *ptr && *ptr != '\"'; ptr ++) { if (*ptr == '\\' && ptr[1]) _cups_strcpy(ptr, ptr + 1); } if (*ptr != '\"') goto error; for (*ptr++ = '\0'; isspace(*ptr & 255); *ptr++ = '\0'); /* * device-info */ if (*ptr != '\"') goto error; for (ptr ++, info = ptr; *ptr && *ptr != '\"'; ptr ++) { if (*ptr == '\\' && ptr[1]) _cups_strcpy(ptr, ptr + 1); } if (*ptr != '\"') goto error; for (*ptr++ = '\0'; isspace(*ptr & 255); *ptr++ = '\0'); /* * device-id */ if (*ptr == '\"') { for (ptr ++, device_id = ptr; *ptr && *ptr != '\"'; ptr ++) { if (*ptr == '\\' && ptr[1]) _cups_strcpy(ptr, ptr + 1); } if (*ptr != '\"') goto error; for (*ptr++ = '\0'; isspace(*ptr & 255); *ptr++ = '\0'); /* * device-location */ if (*ptr == '\"') { for (ptr ++, location = ptr; *ptr && *ptr != '\"'; ptr ++) { if (*ptr == '\\' && ptr[1]) _cups_strcpy(ptr, ptr + 1); } if (*ptr != '\"') goto error; *ptr = '\0'; } else location = NULL; } else { device_id = NULL; location = NULL; } /* * Add the device to the array of available devices... */ if (!add_device(dclass, make_model, info, uri, device_id, location)) fprintf(stderr, "DEBUG: [cups-deviced] Found device \"%s\"...\n", uri); return (0); } /* * End of file... */ cupsFileClose(backend->pipe); backend->pipe = NULL; return (-1); /* * Bad format; strip trailing newline and write an error message. */ error: if (line[strlen(line) - 1] == '\n') line[strlen(line) - 1] = '\0'; fprintf(stderr, "ERROR: [cups-deviced] Bad line from \"%s\": %s\n", backend->name, line); return (0); } /* * 'process_children()' - Process all dead children... */ static void process_children(void) { int i; /* Looping var */ int status; /* Exit status of child */ int pid; /* Process ID of child */ cupsd_backend_t *backend; /* Current backend */ const char *name; /* Name of process */ /* * Reset the dead_children flag... */ dead_children = 0; /* * Collect the exit status of some children... */ #ifdef HAVE_WAITPID while ((pid = waitpid(-1, &status, WNOHANG)) > 0) #elif defined(HAVE_WAIT3) while ((pid = wait3(&status, WNOHANG, NULL)) > 0) #else if ((pid = wait(&status)) > 0) #endif /* HAVE_WAITPID */ { if (status == SIGTERM) status = 0; for (i = num_backends, backend = backends; i > 0; i --, backend ++) if (backend->pid == pid) break; if (i > 0) { name = backend->name; backend->pid = 0; backend->status = status; active_backends --; } else name = "Unknown"; if (status) { if (WIFEXITED(status)) fprintf(stderr, "ERROR: [cups-deviced] PID %d (%s) stopped with status %d!\n", pid, name, WEXITSTATUS(status)); else fprintf(stderr, "ERROR: [cups-deviced] PID %d (%s) crashed on signal %d!\n", pid, name, WTERMSIG(status)); } else fprintf(stderr, "DEBUG: [cups-deviced] PID %d (%s) exited with no errors.\n", pid, name); } } /* * 'sigchld_handler()' - Handle 'child' signals from old processes. */ static void sigchld_handler(int sig) /* I - Signal number */ { (void)sig; /* * Flag that we have dead children... */ dead_children = 1; /* * Reset the signal handler as needed... */ #if !defined(HAVE_SIGSET) && !defined(HAVE_SIGACTION) signal(SIGCLD, sigchld_handler); #endif /* !HAVE_SIGSET && !HAVE_SIGACTION */ } /* * 'start_backend()' - Run a backend to gather the available devices. */ static int /* O - 0 on success, -1 on error */ start_backend(const char *name, /* I - Backend to run */ int root) /* I - Run as root? */ { const char *server_bin; /* CUPS_SERVERBIN environment variable */ char program[1024]; /* Full path to backend */ cupsd_backend_t *backend; /* Current backend */ char *argv[2]; /* Command-line arguments */ if (num_backends >= MAX_BACKENDS) { fprintf(stderr, "ERROR: Too many backends (%d)!\n", num_backends); return (-1); } if ((server_bin = getenv("CUPS_SERVERBIN")) == NULL) server_bin = CUPS_SERVERBIN; snprintf(program, sizeof(program), "%s/backend/%s", server_bin, name); if (_cupsFileCheck(program, _CUPS_FILE_CHECK_PROGRAM, !geteuid(), _cupsFileCheckFilter, NULL)) return (-1); backend = backends + num_backends; argv[0] = (char *)name; argv[1] = NULL; if ((backend->pipe = cupsdPipeCommand(&(backend->pid), program, argv, root ? 0 : normal_user)) == NULL) { fprintf(stderr, "ERROR: [cups-deviced] Unable to execute \"%s\" - %s\n", program, strerror(errno)); return (-1); } /* * Fill in the rest of the backend information... */ fprintf(stderr, "DEBUG: [cups-deviced] Started backend %s (PID %d)\n", program, backend->pid); backend_fds[num_backends].fd = cupsFileNumber(backend->pipe); backend_fds[num_backends].events = POLLIN; backend->name = strdup(name); backend->status = 0; backend->count = 0; active_backends ++; num_backends ++; return (0); } cups-2.2.7/scheduler/cups-driverd.cxx000664 000765 000024 00000234560 13255074424 020276 0ustar00msweetstaff000000 000000 /* * PPD/driver support for CUPS. * * This program handles listing and installing static PPD files, PPD files * created from driver information files, and dynamically generated PPD files * using driver helper programs. * * Copyright 2007-2018 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "util.h" #include #include #include #include #include /* * Constants... */ #define PPD_SYNC 0x50504439 /* Sync word for ppds.dat (PPD9) */ #define PPD_MAX_LANG 32 /* Maximum languages */ #define PPD_MAX_PROD 32 /* Maximum products */ #define PPD_MAX_VERS 32 /* Maximum versions */ #define PPD_TYPE_POSTSCRIPT 0 /* PostScript PPD */ #define PPD_TYPE_PDF 1 /* PDF PPD */ #define PPD_TYPE_RASTER 2 /* CUPS raster PPD */ #define PPD_TYPE_FAX 3 /* Facsimile/MFD PPD */ #define PPD_TYPE_OBJECT_ANY 4 /* 3D (AMF/STL/g-code) PPD */ #define PPD_TYPE_OBJECT_DIRECT 5 /* 3D (AMF/STL/g-code) PPD over any connection */ #define PPD_TYPE_OBJECT_STORAGE 6 /* 3D (AMF/STL/g-code) PPD for storage to SD card, etc. */ #define PPD_TYPE_UNKNOWN 7 /* Other/hybrid PPD */ #define PPD_TYPE_DRV 8 /* Driver info file */ #define PPD_TYPE_ARCHIVE 9 /* Archive file */ #define TAR_BLOCK 512 /* Number of bytes in a block */ #define TAR_BLOCKS 10 /* Blocking factor */ #define TAR_MAGIC "ustar" /* 5 chars and a null */ #define TAR_VERSION "00" /* POSIX tar version */ #define TAR_OLDNORMAL '\0' /* Normal disk file, Unix compat */ #define TAR_NORMAL '0' /* Normal disk file */ #define TAR_LINK '1' /* Link to previously dumped file */ #define TAR_SYMLINK '2' /* Symbolic link */ #define TAR_CHR '3' /* Character special file */ #define TAR_BLK '4' /* Block special file */ #define TAR_DIR '5' /* Directory */ #define TAR_FIFO '6' /* FIFO special file */ #define TAR_CONTIG '7' /* Contiguous file */ /* * PPD information structures... */ typedef struct /**** PPD record ****/ { time_t mtime; /* Modification time */ off_t size; /* Size in bytes */ int model_number; /* cupsModelNumber */ int type; /* ppd-type */ char filename[512], /* Filename */ name[256], /* PPD name */ languages[PPD_MAX_LANG][6], /* LanguageVersion/cupsLanguages */ products[PPD_MAX_PROD][128], /* Product strings */ psversions[PPD_MAX_VERS][32], /* PSVersion strings */ make[128], /* Manufacturer */ make_and_model[128], /* NickName/ModelName */ device_id[256], /* IEEE 1284 Device ID */ scheme[128]; /* PPD scheme */ } ppd_rec_t; typedef struct /**** In-memory record ****/ { int found; /* 1 if PPD is found */ int matches; /* Match count */ ppd_rec_t record; /* PPDs.dat record */ } ppd_info_t; typedef union /**** TAR record format ****/ { unsigned char all[TAR_BLOCK]; /* Raw data block */ struct { char pathname[100], /* Destination path */ mode[8], /* Octal file permissions */ uid[8], /* Octal user ID */ gid[8], /* Octal group ID */ size[12], /* Octal size in bytes */ mtime[12], /* Octal modification time */ chksum[8], /* Octal checksum value */ linkflag, /* File type */ linkname[100], /* Source path for link */ magic[6], /* Magic string */ version[2], /* Format version */ uname[32], /* User name */ gname[32], /* Group name */ devmajor[8], /* Octal device major number */ devminor[8], /* Octal device minor number */ prefix[155]; /* Prefix for long filenames */ } header; } tar_rec_t; /* * Globals... */ static cups_array_t *Inodes = NULL, /* Inodes of directories we've visited */ *PPDsByName = NULL, /* PPD files sorted by filename and name */ *PPDsByMakeModel = NULL; /* PPD files sorted by make and model */ static int ChangedPPD; /* Did we change the PPD database? */ static const char * const PPDTypes[] = /* ppd-type values */ { "postscript", "pdf", "raster", "fax", "object", "object-direct", "object-storage", "unknown", "drv", "archive" }; /* * Local functions... */ static ppd_info_t *add_ppd(const char *filename, const char *name, const char *language, const char *make, const char *make_and_model, const char *device_id, const char *product, const char *psversion, time_t mtime, size_t size, int model_number, int type, const char *scheme); static int cat_drv(const char *name, int request_id); static int cat_ppd(const char *name, int request_id); static int cat_static(const char *name, int request_id); static int cat_tar(const char *name, int request_id); static int compare_inodes(struct stat *a, struct stat *b); static int compare_matches(const ppd_info_t *p0, const ppd_info_t *p1); static int compare_names(const ppd_info_t *p0, const ppd_info_t *p1); static int compare_ppds(const ppd_info_t *p0, const ppd_info_t *p1); static int dump_ppds_dat(const char *filename); static void free_array(cups_array_t *a); static cups_file_t *get_file(const char *name, int request_id, const char *subdir, char *buffer, size_t bufsize, char **subfile); static int list_ppds(int request_id, int limit, const char *opt); static int load_drivers(cups_array_t *include, cups_array_t *exclude); static int load_drv(const char *filename, const char *name, cups_file_t *fp, time_t mtime, off_t size); static void load_ppd(const char *filename, const char *name, const char *scheme, struct stat *fileinfo, ppd_info_t *ppd, cups_file_t *fp, off_t end); static int load_ppds(const char *d, const char *p, int descend); static void load_ppds_dat(char *filename, size_t filesize, int verbose); static int load_tar(const char *filename, const char *name, cups_file_t *fp, time_t mtime, off_t size); static int read_tar(cups_file_t *fp, char *name, size_t namesize, struct stat *info); static regex_t *regex_device_id(const char *device_id); static regex_t *regex_string(const char *s); /* * 'main()' - Scan for drivers and return an IPP response. * * Usage: * * cups-driverd request_id limit options */ int /* O - Exit code */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { /* * Install or list PPDs... */ if (argc == 3 && !strcmp(argv[1], "cat")) return (cat_ppd(argv[2], 0)); else if ((argc == 2 || argc == 3) && !strcmp(argv[1], "dump")) return (dump_ppds_dat(argv[2])); else if (argc == 4 && !strcmp(argv[1], "get")) return (cat_ppd(argv[3], atoi(argv[2]))); else if (argc == 5 && !strcmp(argv[1], "list")) return (list_ppds(atoi(argv[2]), atoi(argv[3]), argv[4])); else { fputs("Usage: cups-driverd cat ppd-name\n", stderr); fputs("Usage: cups-driverd dump\n", stderr); fputs("Usage: cups-driverd get request_id ppd-name\n", stderr); fputs("Usage: cups-driverd list request_id limit options\n", stderr); return (1); } } /* * 'add_ppd()' - Add a PPD file. */ static ppd_info_t * /* O - PPD */ add_ppd(const char *filename, /* I - PPD filename */ const char *name, /* I - PPD name */ const char *language, /* I - LanguageVersion */ const char *make, /* I - Manufacturer */ const char *make_and_model, /* I - NickName/ModelName */ const char *device_id, /* I - 1284DeviceID */ const char *product, /* I - Product */ const char *psversion, /* I - PSVersion */ time_t mtime, /* I - Modification time */ size_t size, /* I - File size */ int model_number, /* I - Model number */ int type, /* I - Driver type */ const char *scheme) /* I - PPD scheme */ { ppd_info_t *ppd; /* PPD */ char *recommended; /* Foomatic driver string */ /* * Add a new PPD file... */ if ((ppd = (ppd_info_t *)calloc(1, sizeof(ppd_info_t))) == NULL) { fprintf(stderr, "ERROR: [cups-driverd] Ran out of memory for %d PPD files!\n", cupsArrayCount(PPDsByName)); return (NULL); } /* * Zero-out the PPD data and copy the values over... */ ppd->found = 1; ppd->record.mtime = mtime; ppd->record.size = (off_t)size; ppd->record.model_number = model_number; ppd->record.type = type; strlcpy(ppd->record.filename, filename, sizeof(ppd->record.filename)); strlcpy(ppd->record.name, name, sizeof(ppd->record.name)); strlcpy(ppd->record.languages[0], language, sizeof(ppd->record.languages[0])); strlcpy(ppd->record.products[0], product, sizeof(ppd->record.products[0])); strlcpy(ppd->record.psversions[0], psversion, sizeof(ppd->record.psversions[0])); strlcpy(ppd->record.make, make, sizeof(ppd->record.make)); strlcpy(ppd->record.make_and_model, make_and_model, sizeof(ppd->record.make_and_model)); strlcpy(ppd->record.device_id, device_id, sizeof(ppd->record.device_id)); strlcpy(ppd->record.scheme, scheme, sizeof(ppd->record.scheme)); /* * Strip confusing (and often wrong) "recommended" suffix added by * Foomatic drivers... */ if ((recommended = strstr(ppd->record.make_and_model, " (recommended)")) != NULL) *recommended = '\0'; /* * Add the PPD to the PPD arrays... */ cupsArrayAdd(PPDsByName, ppd); cupsArrayAdd(PPDsByMakeModel, ppd); /* * Return the new PPD pointer... */ return (ppd); } /* * 'cat_drv()' - Generate a PPD from a driver info file. */ static int /* O - Exit code */ cat_drv(const char *name, /* I - PPD name */ int request_id) /* I - Request ID for response? */ { cups_file_t *fp; // File pointer ppdcSource *src; // PPD source file data ppdcDriver *d; // Current driver cups_file_t *out; // Stdout via CUPS file API char message[2048], // status-message filename[1024], // Full path to .drv file(s) scheme[32], // URI scheme ("drv") userpass[256], // User/password info (unused) host[2], // Hostname (unused) resource[1024], // Resource path (/dir/to/filename.drv) *pc_file_name; // Filename portion of URI int port; // Port number (unused) // Pull out the path to the .drv file... if (httpSeparateURI(HTTP_URI_CODING_ALL, name, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_OK) { fprintf(stderr, "ERROR: Bad PPD name \"%s\".\n", name); if (request_id) { snprintf(message, sizeof(message), "Bad PPD name \"%s\".", name); cupsdSendIPPHeader(IPP_NOT_FOUND, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); cupsdSendIPPString(IPP_TAG_TEXT, "status-message", message); cupsdSendIPPTrailer(); } return (1); } if ((fp = get_file(resource, request_id, "drv", filename, sizeof(filename), &pc_file_name)) == NULL) return (1); src = new ppdcSource(filename, fp); for (d = (ppdcDriver *)src->drivers->first(); d; d = (ppdcDriver *)src->drivers->next()) if (!strcmp(pc_file_name, d->pc_file_name->value) || (d->file_name && !strcmp(pc_file_name, d->file_name->value))) break; if (d) { ppdcArray *locales; // Locale names ppdcCatalog *catalog; // Message catalog in .drv file fprintf(stderr, "DEBUG2: [cups-driverd] %d locales defined in \"%s\"...\n", src->po_files->count, filename); locales = new ppdcArray(); for (catalog = (ppdcCatalog *)src->po_files->first(); catalog; catalog = (ppdcCatalog *)src->po_files->next()) { fprintf(stderr, "DEBUG2: [cups-driverd] Adding locale \"%s\"...\n", catalog->locale->value); catalog->locale->retain(); locales->add(catalog->locale); } if (request_id) { cupsdSendIPPHeader(IPP_OK, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); cupsdSendIPPTrailer(); fflush(stdout); } out = cupsFileStdout(); d->write_ppd_file(out, NULL, locales, src, PPDC_LFONLY); cupsFileClose(out); locales->release(); } else { fprintf(stderr, "ERROR: PPD \"%s\" not found.\n", name); if (request_id) { snprintf(message, sizeof(message), "PPD \"%s\" not found.", name); cupsdSendIPPHeader(IPP_NOT_FOUND, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); cupsdSendIPPString(IPP_TAG_TEXT, "status-message", message); cupsdSendIPPTrailer(); } } src->release(); cupsFileClose(fp); return (!d); } /* * 'cat_ppd()' - Copy a PPD file to stdout. */ static int /* O - Exit code */ cat_ppd(const char *name, /* I - PPD name */ int request_id) /* I - Request ID for response? */ { char scheme[256], /* Scheme from PPD name */ *sptr, /* Pointer into scheme */ line[1024], /* Line/filename */ message[2048]; /* status-message */ /* * Figure out if this is a static or dynamic PPD file... */ if (strstr(name, "../")) { fputs("ERROR: Invalid PPD name.\n", stderr); return (1); } strlcpy(scheme, name, sizeof(scheme)); if ((sptr = strchr(scheme, ':')) != NULL) { *sptr = '\0'; if (!strcmp(scheme, "file")) { /* * "file:name" == "name"... */ name += 5; while (*name == '/') name ++; if (!strstr(name, ".tar/") && !strstr(name, ".tar.gz/")) scheme[0] = '\0'; } } else scheme[0] = '\0'; if (request_id > 0) puts("Content-Type: application/ipp\n"); if (!scheme[0]) return (cat_static(name, request_id)); else if (!strcmp(scheme, "drv")) return (cat_drv(name, request_id)); else if (!strcmp(scheme, "file")) return (cat_tar(name, request_id)); else { /* * Dynamic PPD, see if we have a driver program to support it... */ const char *serverbin; /* CUPS_SERVERBIN env var */ char *argv[4]; /* Arguments for program */ if ((serverbin = getenv("CUPS_SERVERBIN")) == NULL) serverbin = CUPS_SERVERBIN; snprintf(line, sizeof(line), "%s/driver/%s", serverbin, scheme); if (access(line, X_OK)) { /* * File does not exist or is not executable... */ fprintf(stderr, "ERROR: [cups-driverd] Unable to access \"%s\" - %s\n", line, strerror(errno)); if (request_id > 0) { snprintf(message, sizeof(message), "Unable to access \"%s\" - %s", line, strerror(errno)); cupsdSendIPPHeader(IPP_NOT_FOUND, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); cupsdSendIPPString(IPP_TAG_TEXT, "status-message", message); cupsdSendIPPTrailer(); } return (1); } /* * Yes, let it cat the PPD file... */ if (request_id) { cupsdSendIPPHeader(IPP_OK, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); cupsdSendIPPTrailer(); } argv[0] = scheme; argv[1] = (char *)"cat"; argv[2] = (char *)name; argv[3] = NULL; if (cupsdExec(line, argv)) { /* * Unable to execute driver... */ fprintf(stderr, "ERROR: [cups-driverd] Unable to execute \"%s\" - %s\n", line, strerror(errno)); return (1); } } /* * Return with no errors... */ return (0); } /* * 'copy_static()' - Copy a static PPD file to stdout. */ static int /* O - Exit code */ cat_static(const char *name, /* I - PPD name */ int request_id) /* I - Request ID for response? */ { cups_file_t *fp; /* PPD file */ char filename[1024], /* PPD filename */ line[1024]; /* Line buffer */ if ((fp = get_file(name, request_id, "model", filename, sizeof(filename), NULL)) == NULL) return (1); if (request_id) { cupsdSendIPPHeader(IPP_OK, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); cupsdSendIPPTrailer(); } /* * Now copy the file to stdout... */ while (cupsFileGets(fp, line, sizeof(line))) puts(line); cupsFileClose(fp); return (0); } /* * 'cat_tar()' - Copy an archived PPD file to stdout. */ static int /* O - Exit code */ cat_tar(const char *name, /* I - PPD name */ int request_id) /* I - Request ID */ { cups_file_t *fp; /* Archive file pointer */ char filename[1024], /* Archive filename */ *ppdname, /* PPD filename in archive */ curname[256], /* Current name in archive */ buffer[8192]; /* Copy buffer */ struct stat curinfo; /* Current file info in archive */ off_t total, /* Total bytes copied */ next; /* Offset for next record in archive */ ssize_t bytes; /* Bytes read */ /* * Open the archive file... */ if ((fp = get_file(name, request_id, "model", filename, sizeof(filename), &ppdname)) == NULL || !ppdname) return (1); /* * Scan the archive for the PPD... */ while (read_tar(fp, curname, sizeof(curname), &curinfo)) { next = cupsFileTell(fp) + ((curinfo.st_size + TAR_BLOCK - 1) & ~(TAR_BLOCK - 1)); if (!strcmp(ppdname, curname)) { if (request_id) { cupsdSendIPPHeader(IPP_OK, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); cupsdSendIPPTrailer(); } for (total = 0; total < curinfo.st_size; total += bytes) { if ((size_t)(bytes = (curinfo.st_size - total)) > sizeof(buffer)) bytes = sizeof(buffer); if ((bytes = cupsFileRead(fp, buffer, (size_t)bytes)) < 0) { if (errno == EINTR || errno == EAGAIN) { bytes = 0; } else { perror("ERROR: [cups-driverd] Read error"); break; } } else if (bytes > 0 && fwrite(buffer, (size_t)bytes, 1, stdout) != 1) break; } cupsFileClose(fp); return (0); } if (cupsFileTell(fp) != next) cupsFileSeek(fp, next); } cupsFileClose(fp); fprintf(stderr, "ERROR: PPD \"%s\" not found.\n", name); if (request_id) { snprintf(buffer, sizeof(buffer), "PPD \"%s\" not found.", name); cupsdSendIPPHeader(IPP_NOT_FOUND, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); cupsdSendIPPString(IPP_TAG_TEXT, "status-message", buffer); cupsdSendIPPTrailer(); } return (1); } /* * 'compare_inodes()' - Compare two inodes. */ static int /* O - Result of comparison */ compare_inodes(struct stat *a, /* I - First inode */ struct stat *b) /* I - Second inode */ { if (a->st_dev != b->st_dev) return (a->st_dev - b->st_dev); else return (a->st_ino - b->st_ino); } /* * 'compare_matches()' - Compare PPD match scores for sorting. */ static int compare_matches(const ppd_info_t *p0, /* I - First PPD */ const ppd_info_t *p1) /* I - Second PPD */ { if (p1->matches != p0->matches) return (p1->matches - p0->matches); else return (cupsdCompareNames(p0->record.make_and_model, p1->record.make_and_model)); } /* * 'compare_names()' - Compare PPD filenames for sorting. */ static int /* O - Result of comparison */ compare_names(const ppd_info_t *p0, /* I - First PPD file */ const ppd_info_t *p1) /* I - Second PPD file */ { int diff; /* Difference between strings */ if ((diff = strcmp(p0->record.filename, p1->record.filename)) != 0) return (diff); else return (strcmp(p0->record.name, p1->record.name)); } /* * 'compare_ppds()' - Compare PPD file make and model names for sorting. */ static int /* O - Result of comparison */ compare_ppds(const ppd_info_t *p0, /* I - First PPD file */ const ppd_info_t *p1) /* I - Second PPD file */ { int diff; /* Difference between strings */ /* * First compare manufacturers... */ if ((diff = _cups_strcasecmp(p0->record.make, p1->record.make)) != 0) return (diff); else if ((diff = cupsdCompareNames(p0->record.make_and_model, p1->record.make_and_model)) != 0) return (diff); else if ((diff = strcmp(p0->record.languages[0], p1->record.languages[0])) != 0) return (diff); else return (compare_names(p0, p1)); } /* * 'dump_ppds_dat()' - Dump the contents of the ppds.dat file. */ static int /* O - Exit status */ dump_ppds_dat(const char *filename) /* I - Filename */ { char temp[1024]; /* ppds.dat filename */ ppd_info_t *ppd; /* Current PPD */ /* * See if we a PPD database file... */ if (filename) strlcpy(temp, filename, sizeof(temp)); else temp[0] = '\0'; load_ppds_dat(temp, sizeof(temp), 0); puts("mtime,size,model_number,type,filename,name,languages0,products0," "psversions0,make,make_and_model,device_id,scheme"); for (ppd = (ppd_info_t *)cupsArrayFirst(PPDsByName); ppd; ppd = (ppd_info_t *)cupsArrayNext(PPDsByName)) printf("%d,%ld,%d,%d,\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\"," "\"%s\",\"%s\"\n", (int)ppd->record.mtime, (long)ppd->record.size, ppd->record.model_number, ppd->record.type, ppd->record.filename, ppd->record.name, ppd->record.languages[0], ppd->record.products[0], ppd->record.psversions[0], ppd->record.make, ppd->record.make_and_model, ppd->record.device_id, ppd->record.scheme); return (0); } /* * 'free_array()' - Free an array of strings. */ static void free_array(cups_array_t *a) /* I - Array to free */ { char *ptr; /* Pointer to string */ for (ptr = (char *)cupsArrayFirst(a); ptr; ptr = (char *)cupsArrayNext(a)) free(ptr); cupsArrayDelete(a); } /* * 'get_file()' - Get the filename associated with a request. */ static cups_file_t * /* O - File pointer or NULL */ get_file(const char *name, /* I - Name */ int request_id, /* I - Request ID */ const char *subdir, /* I - Subdirectory for file */ char *buffer, /* I - Filename buffer */ size_t bufsize, /* I - Size of filename buffer */ char **subfile) /* O - Sub-filename */ { cups_file_t *fp; /* File pointer */ const char *datadir; /* CUPS_DATADIR env var */ char *bufptr, /* Pointer into filename buffer */ message[2048]; /* status-message */ #ifdef __APPLE__ const char *printerDriver, /* Pointer to .printerDriver extension */ *slash; /* Pointer to next slash */ #endif /* __APPLE__ */ if (subfile) *subfile = NULL; while (*name == '/') name ++; if (strstr(name, "../") || strstr(name, "/..")) { /* * Bad name... */ fprintf(stderr, "ERROR: [cups-driverd] Bad PPD name \"%s\".\n", name); if (request_id) { snprintf(message, sizeof(message), "Bad PPD name \"%s\".", name); cupsdSendIPPHeader(IPP_NOT_FOUND, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); cupsdSendIPPString(IPP_TAG_TEXT, "status-message", message); cupsdSendIPPTrailer(); } return (NULL); } /* * Try opening the file... */ #ifdef __APPLE__ if (!strncmp(name, "System/Library/Printers/PPDs/Contents/Resources/", 48) || !strncmp(name, "Library/Printers/PPDs/Contents/Resources/", 41) || (!strncmp(name, "System/Library/Printers/", 24) && (printerDriver = strstr(name + 24, ".printerDriver/Contents/Resources/PPDs")) != NULL && (slash = strchr(name + 24, '/')) != NULL && slash > printerDriver) || (!strncmp(name, "Library/Printers/", 17) && (printerDriver = strstr(name + 17, ".printerDriver/Contents/Resources/PPDs")) != NULL && (slash = strchr(name + 17, '/')) != NULL && slash > printerDriver)) { /* * Map ppd-name to macOS standard locations... */ snprintf(buffer, bufsize, "/%s", name); } else #elif defined(__linux) if (!strncmp(name, "lsb/usr/", 8)) { /* * Map ppd-name to LSB standard /usr/share/ppd location... */ snprintf(buffer, bufsize, "/usr/share/ppd/%s", name + 8); } else if (!strncmp(name, "lsb/opt/", 8)) { /* * Map ppd-name to LSB standard /opt/share/ppd location... */ snprintf(buffer, bufsize, "/opt/share/ppd/%s", name + 8); } else if (!strncmp(name, "lsb/local/", 10)) { /* * Map ppd-name to LSB standard /usr/local/share/ppd location... */ snprintf(buffer, bufsize, "/usr/local/share/ppd/%s", name + 10); } else #endif /* __APPLE__ */ { if ((datadir = getenv("CUPS_DATADIR")) == NULL) datadir = CUPS_DATADIR; snprintf(buffer, bufsize, "%s/%s/%s", datadir, subdir, name); } /* * Strip anything after ".drv/", ".drv.gz/", ".tar/", or ".tar.gz/"... */ if (subfile) { if ((bufptr = strstr(buffer, ".drv/")) != NULL) bufptr += 4; else if ((bufptr = strstr(buffer, ".drv.gz/")) != NULL) bufptr += 7; else if ((bufptr = strstr(buffer, ".tar/")) != NULL) bufptr += 4; else if ((bufptr = strstr(buffer, ".tar.gz/")) != NULL) bufptr += 7; if (bufptr) { *bufptr++ = '\0'; *subfile = bufptr; } } /* * Try opening the file... */ if ((fp = cupsFileOpen(buffer, "r")) == NULL) { fprintf(stderr, "ERROR: [cups-driverd] Unable to open \"%s\" - %s\n", buffer, strerror(errno)); if (request_id) { snprintf(message, sizeof(message), "Unable to open \"%s\" - %s", buffer, strerror(errno)); cupsdSendIPPHeader(IPP_NOT_FOUND, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); cupsdSendIPPString(IPP_TAG_TEXT, "status-message", message); cupsdSendIPPTrailer(); } return (NULL); } return (fp); } /* * 'list_ppds()' - List PPD files. */ static int /* O - Exit code */ list_ppds(int request_id, /* I - Request ID */ int limit, /* I - Limit */ const char *opt) /* I - Option argument */ { int i; /* Looping vars */ int count; /* Number of PPDs to send */ ppd_info_t *ppd; /* Current PPD file */ cups_file_t *fp; /* ppds.dat file */ char filename[1024], /* ppds.dat filename */ model[1024]; /* Model directory */ const char *cups_datadir; /* CUPS_DATADIR environment variable */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ cups_array_t *requested, /* requested-attributes values */ *include, /* PPD schemes to include */ *exclude; /* PPD schemes to exclude */ const char *device_id, /* ppd-device-id option */ *language, /* ppd-natural-language option */ *make, /* ppd-make option */ *make_and_model, /* ppd-make-and-model option */ *model_number_str, /* ppd-model-number option */ *product, /* ppd-product option */ *psversion, /* ppd-psversion option */ *type_str; /* ppd-type option */ int model_number, /* ppd-model-number value */ type, /* ppd-type value */ send_device_id, /* Send ppd-device-id? */ send_make, /* Send ppd-make? */ send_make_and_model, /* Send ppd-make-and-model? */ send_model_number, /* Send ppd-model-number? */ send_name, /* Send ppd-name? */ send_natural_language, /* Send ppd-natural-language? */ send_product, /* Send ppd-product? */ send_psversion, /* Send ppd-psversion? */ send_type, /* Send ppd-type? */ sent_header; /* Sent the IPP header? */ size_t make_and_model_len, /* Length of ppd-make-and-model */ product_len; /* Length of ppd-product */ regex_t *device_id_re, /* Regular expression for matching device ID */ *make_and_model_re; /* Regular expression for matching make and model */ regmatch_t re_matches[6]; /* Regular expression matches */ cups_array_t *matches; /* Matching PPDs */ fprintf(stderr, "DEBUG2: [cups-driverd] list_ppds(request_id=%d, limit=%d, " "opt=\"%s\"\n", request_id, limit, opt); /* * See if we a PPD database file... */ filename[0] = '\0'; load_ppds_dat(filename, sizeof(filename), 1); /* * Load all PPDs in the specified directory and below... */ if ((cups_datadir = getenv("CUPS_DATADIR")) == NULL) cups_datadir = CUPS_DATADIR; Inodes = cupsArrayNew((cups_array_func_t)compare_inodes, NULL); snprintf(model, sizeof(model), "%s/model", cups_datadir); load_ppds(model, "", 1); snprintf(model, sizeof(model), "%s/drv", cups_datadir); load_ppds(model, "", 1); #ifdef __APPLE__ /* * Load PPDs from standard macOS locations... */ load_ppds("/Library/Printers", "Library/Printers", 0); load_ppds("/Library/Printers/PPDs/Contents/Resources", "Library/Printers/PPDs/Contents/Resources", 0); load_ppds("/Library/Printers/PPDs/Contents/Resources/en.lproj", "Library/Printers/PPDs/Contents/Resources/en.lproj", 0); load_ppds("/System/Library/Printers", "System/Library/Printers", 0); load_ppds("/System/Library/Printers/PPDs/Contents/Resources", "System/Library/Printers/PPDs/Contents/Resources", 0); load_ppds("/System/Library/Printers/PPDs/Contents/Resources/en.lproj", "System/Library/Printers/PPDs/Contents/Resources/en.lproj", 0); #elif defined(__linux) /* * Load PPDs from LSB-defined locations... */ if (!access("/usr/local/share/ppd", 0)) load_ppds("/usr/local/share/ppd", "lsb/local", 1); if (!access("/usr/share/ppd", 0)) load_ppds("/usr/share/ppd", "lsb/usr", 1); if (!access("/opt/share/ppd", 0)) load_ppds("/opt/share/ppd", "lsb/opt", 1); #endif /* __APPLE__ */ /* * Cull PPD files that are no longer present... */ for (ppd = (ppd_info_t *)cupsArrayFirst(PPDsByName); ppd; ppd = (ppd_info_t *)cupsArrayNext(PPDsByName)) if (!ppd->found) { /* * Remove this PPD file from the list... */ cupsArrayRemove(PPDsByName, ppd); cupsArrayRemove(PPDsByMakeModel, ppd); free(ppd); ChangedPPD = 1; } /* * Write the new ppds.dat file... */ fprintf(stderr, "DEBUG: [cups-driverd] ChangedPPD=%d\n", ChangedPPD); if (ChangedPPD) { char newname[1024]; /* New filename */ snprintf(newname, sizeof(newname), "%s.%d", filename, (int)getpid()); if ((fp = cupsFileOpen(newname, "w")) != NULL) { unsigned ppdsync = PPD_SYNC; /* Sync word */ cupsFileWrite(fp, (char *)&ppdsync, sizeof(ppdsync)); for (ppd = (ppd_info_t *)cupsArrayFirst(PPDsByName); ppd; ppd = (ppd_info_t *)cupsArrayNext(PPDsByName)) cupsFileWrite(fp, (char *)&(ppd->record), sizeof(ppd_rec_t)); cupsFileClose(fp); if (rename(newname, filename)) fprintf(stderr, "ERROR: [cups-driverd] Unable to rename \"%s\" - %s\n", newname, strerror(errno)); else fprintf(stderr, "INFO: [cups-driverd] Wrote \"%s\", %d PPDs...\n", filename, cupsArrayCount(PPDsByName)); } else fprintf(stderr, "ERROR: [cups-driverd] Unable to write \"%s\" - %s\n", filename, strerror(errno)); } else fputs("INFO: [cups-driverd] No new or changed PPDs...\n", stderr); /* * Scan for dynamic PPD files... */ num_options = cupsParseOptions(opt, 0, &options); exclude = cupsdCreateStringsArray(cupsGetOption("exclude-schemes", num_options, options)); include = cupsdCreateStringsArray(cupsGetOption("include-schemes", num_options, options)); load_drivers(include, exclude); /* * Add the raw driver... */ add_ppd("", "raw", "en", "Raw", "Raw Queue", "", "", "", 0, 0, 0, PPD_TYPE_UNKNOWN, "raw"); /* * Send IPP attributes... */ requested = cupsdCreateStringsArray( cupsGetOption("requested-attributes", num_options, options)); device_id = cupsGetOption("ppd-device-id", num_options, options); language = cupsGetOption("ppd-natural-language", num_options, options); make = cupsGetOption("ppd-make", num_options, options); make_and_model = cupsGetOption("ppd-make-and-model", num_options, options); model_number_str = cupsGetOption("ppd-model-number", num_options, options); product = cupsGetOption("ppd-product", num_options, options); psversion = cupsGetOption("ppd-psversion", num_options, options); type_str = cupsGetOption("ppd-type", num_options, options); if (make_and_model) make_and_model_len = strlen(make_and_model); else make_and_model_len = 0; if (product) product_len = strlen(product); else product_len = 0; if (model_number_str) model_number = atoi(model_number_str); else model_number = 0; if (type_str) { for (type = 0; type < (int)(sizeof(PPDTypes) / sizeof(PPDTypes[0])); type ++) if (!strcmp(type_str, PPDTypes[type])) break; if (type >= (int)(sizeof(PPDTypes) / sizeof(PPDTypes[0]))) { fprintf(stderr, "ERROR: [cups-driverd] Bad ppd-type=\"%s\" ignored!\n", type_str); type_str = NULL; } } else type = 0; for (i = 0; i < num_options; i ++) fprintf(stderr, "DEBUG2: [cups-driverd] %s=\"%s\"\n", options[i].name, options[i].value); if (!requested || cupsArrayFind(requested, (void *)"all") != NULL) { send_name = 1; send_make = 1; send_make_and_model = 1; send_model_number = 1; send_natural_language = 1; send_device_id = 1; send_product = 1; send_psversion = 1; send_type = 1; } else { send_name = cupsArrayFind(requested, (void *)"ppd-name") != NULL; send_make = cupsArrayFind(requested, (void *)"ppd-make") != NULL; send_make_and_model = cupsArrayFind(requested, (void *)"ppd-make-and-model") != NULL; send_model_number = cupsArrayFind(requested, (void *)"ppd-model-number") != NULL; send_natural_language = cupsArrayFind(requested, (void *)"ppd-natural-language") != NULL; send_device_id = cupsArrayFind(requested, (void *)"ppd-device-id") != NULL; send_product = cupsArrayFind(requested, (void *)"ppd-product") != NULL; send_psversion = cupsArrayFind(requested, (void *)"ppd-psversion") != NULL; send_type = cupsArrayFind(requested, (void *)"ppd-type") != NULL; } /* * Send the content type header to the scheduler; request_id can only be * 0 when run manually since the scheduler enforces the IPP requirement for * a request ID from 1 to 2^31-1... */ if (request_id > 0) puts("Content-Type: application/ipp\n"); sent_header = 0; if (limit <= 0 || limit > cupsArrayCount(PPDsByMakeModel)) count = cupsArrayCount(PPDsByMakeModel); else count = limit; if (device_id || language || make || make_and_model || model_number_str || product) { matches = cupsArrayNew((cups_array_func_t)compare_matches, NULL); if (device_id) device_id_re = regex_device_id(device_id); else device_id_re = NULL; if (make_and_model) make_and_model_re = regex_string(make_and_model); else make_and_model_re = NULL; for (ppd = (ppd_info_t *)cupsArrayFirst(PPDsByMakeModel); ppd; ppd = (ppd_info_t *)cupsArrayNext(PPDsByMakeModel)) { /* * Filter PPDs based on make, model, product, language, model number, * and/or device ID using the "matches" score value. An exact match * for product, make-and-model, or device-id adds 3 to the score. * Partial matches for make-and-model yield 1 or 2 points, and matches * for the make and language add a single point. Results are then sorted * by score, highest score first. */ if (ppd->record.type < PPD_TYPE_POSTSCRIPT || ppd->record.type >= PPD_TYPE_DRV) continue; if (cupsArrayFind(exclude, ppd->record.scheme) || (include && !cupsArrayFind(include, ppd->record.scheme))) continue; ppd->matches = 0; if (device_id_re && !regexec(device_id_re, ppd->record.device_id, (size_t)(sizeof(re_matches) / sizeof(re_matches[0])), re_matches, 0)) { /* * Add the number of matching values from the device ID - it will be * at least 2 (manufacturer and model), and as much as 3 (command set). */ for (i = 1; i < (int)(sizeof(re_matches) / sizeof(re_matches[0])); i ++) if (re_matches[i].rm_so >= 0) ppd->matches ++; } if (language) { for (i = 0; i < PPD_MAX_LANG; i ++) if (!ppd->record.languages[i][0]) break; else if (!strcmp(ppd->record.languages[i], language)) { ppd->matches ++; break; } } if (make && !_cups_strcasecmp(ppd->record.make, make)) ppd->matches ++; if (make_and_model_re && !regexec(make_and_model_re, ppd->record.make_and_model, (size_t)(sizeof(re_matches) / sizeof(re_matches[0])), re_matches, 0)) { // See how much of the make-and-model string we matched... if (re_matches[0].rm_so == 0) { if ((size_t)re_matches[0].rm_eo == make_and_model_len) ppd->matches += 3; // Exact match else ppd->matches += 2; // Prefix match } else ppd->matches ++; // Infix match } if (model_number_str && ppd->record.model_number == model_number) ppd->matches ++; if (product) { for (i = 0; i < PPD_MAX_PROD; i ++) if (!ppd->record.products[i][0]) break; else if (!_cups_strcasecmp(ppd->record.products[i], product)) { ppd->matches += 3; break; } else if (!_cups_strncasecmp(ppd->record.products[i], product, product_len)) { ppd->matches += 2; break; } } if (psversion) { for (i = 0; i < PPD_MAX_VERS; i ++) if (!ppd->record.psversions[i][0]) break; else if (!_cups_strcasecmp(ppd->record.psversions[i], psversion)) { ppd->matches ++; break; } } if (type_str && ppd->record.type == type) ppd->matches ++; if (ppd->matches) { fprintf(stderr, "DEBUG2: [cups-driverd] %s matches with score %d!\n", ppd->record.name, ppd->matches); cupsArrayAdd(matches, ppd); } } } else if (include || exclude) { matches = cupsArrayNew((cups_array_func_t)compare_ppds, NULL); for (ppd = (ppd_info_t *)cupsArrayFirst(PPDsByMakeModel); ppd; ppd = (ppd_info_t *)cupsArrayNext(PPDsByMakeModel)) { /* * Filter PPDs based on the include/exclude lists. */ if (ppd->record.type < PPD_TYPE_POSTSCRIPT || ppd->record.type >= PPD_TYPE_DRV) continue; if (cupsArrayFind(exclude, ppd->record.scheme) || (include && !cupsArrayFind(include, ppd->record.scheme))) continue; cupsArrayAdd(matches, ppd); } } else matches = PPDsByMakeModel; for (ppd = (ppd_info_t *)cupsArrayFirst(matches); count > 0 && ppd; ppd = (ppd_info_t *)cupsArrayNext(matches)) { /* * Skip invalid PPDs... */ if (ppd->record.type < PPD_TYPE_POSTSCRIPT || ppd->record.type >= PPD_TYPE_DRV) continue; /* * Send this PPD... */ if (!sent_header) { sent_header = 1; if (request_id) { cupsdSendIPPHeader(IPP_OK, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); } } fprintf(stderr, "DEBUG2: [cups-driverd] Sending %s (%s)...\n", ppd->record.name, ppd->record.make_and_model); count --; if (request_id) { cupsdSendIPPGroup(IPP_TAG_PRINTER); if (send_name) cupsdSendIPPString(IPP_TAG_NAME, "ppd-name", ppd->record.name); if (send_natural_language) { cupsdSendIPPString(IPP_TAG_LANGUAGE, "ppd-natural-language", ppd->record.languages[0]); for (i = 1; i < PPD_MAX_LANG && ppd->record.languages[i][0]; i ++) cupsdSendIPPString(IPP_TAG_LANGUAGE, "", ppd->record.languages[i]); } if (send_make) cupsdSendIPPString(IPP_TAG_TEXT, "ppd-make", ppd->record.make); if (send_make_and_model) cupsdSendIPPString(IPP_TAG_TEXT, "ppd-make-and-model", ppd->record.make_and_model); if (send_device_id) cupsdSendIPPString(IPP_TAG_TEXT, "ppd-device-id", ppd->record.device_id); if (send_product) { cupsdSendIPPString(IPP_TAG_TEXT, "ppd-product", ppd->record.products[0]); for (i = 1; i < PPD_MAX_PROD && ppd->record.products[i][0]; i ++) cupsdSendIPPString(IPP_TAG_TEXT, "", ppd->record.products[i]); } if (send_psversion) { cupsdSendIPPString(IPP_TAG_TEXT, "ppd-psversion", ppd->record.psversions[0]); for (i = 1; i < PPD_MAX_VERS && ppd->record.psversions[i][0]; i ++) cupsdSendIPPString(IPP_TAG_TEXT, "", ppd->record.psversions[i]); } if (send_type) cupsdSendIPPString(IPP_TAG_KEYWORD, "ppd-type", PPDTypes[ppd->record.type]); if (send_model_number) cupsdSendIPPInteger(IPP_TAG_INTEGER, "ppd-model-number", ppd->record.model_number); } else printf("%s (%s)\n", ppd->record.name, ppd->record.make_and_model); /* * If we have only requested the ppd-make attribute, then skip * the remaining PPDs with this make... */ if (cupsArrayFind(requested, (void *)"ppd-make") && cupsArrayCount(requested) == 1) { const char *this_make; /* This ppd-make */ for (this_make = ppd->record.make, ppd = (ppd_info_t *)cupsArrayNext(matches); ppd; ppd = (ppd_info_t *)cupsArrayNext(matches)) if (_cups_strcasecmp(this_make, ppd->record.make)) break; cupsArrayPrev(matches); } } if (!sent_header && request_id) { cupsdSendIPPHeader(IPP_NOT_FOUND, request_id); cupsdSendIPPGroup(IPP_TAG_OPERATION); cupsdSendIPPString(IPP_TAG_CHARSET, "attributes-charset", "utf-8"); cupsdSendIPPString(IPP_TAG_LANGUAGE, "attributes-natural-language", "en-US"); } if (request_id) cupsdSendIPPTrailer(); return (0); } /* * 'load_drv()' - Load the PPDs from a driver information file. */ static int /* O - 1 on success, 0 on failure */ load_drv(const char *filename, /* I - Actual filename */ const char *name, /* I - Name to the rest of the world */ cups_file_t *fp, /* I - File to read from */ time_t mtime, /* I - Mod time of driver info file */ off_t size) /* I - Size of driver info file */ { ppdcSource *src; // Driver information file ppdcDriver *d; // Current driver ppdcAttr *device_id, // 1284DeviceID attribute *product, // Current product value *ps_version, // PSVersion attribute *cups_fax, // cupsFax attribute *nick_name; // NickName attribute ppdcFilter *filter; // Current filter ppd_info_t *ppd; // Current PPD int products_found; // Number of products found char uri[1024], // Driver URI make_model[1024]; // Make and model int type; // Driver type /* * Load the driver info file... */ src = new ppdcSource(filename, fp); if (src->drivers->count == 0) { fprintf(stderr, "ERROR: [cups-driverd] Bad driver information file \"%s\"!\n", filename); src->release(); return (0); } /* * Add a dummy entry for the file... */ add_ppd(name, name, "", "", "", "", "", "", mtime, (size_t)size, 0, PPD_TYPE_DRV, "drv"); ChangedPPD = 1; /* * Then the drivers in the file... */ for (d = (ppdcDriver *)src->drivers->first(); d; d = (ppdcDriver *)src->drivers->next()) { httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "drv", "", "", 0, "/%s/%s", name, d->file_name ? d->file_name->value : d->pc_file_name->value); device_id = d->find_attr("1284DeviceID", NULL); ps_version = d->find_attr("PSVersion", NULL); nick_name = d->find_attr("NickName", NULL); if (nick_name) strlcpy(make_model, nick_name->value->value, sizeof(make_model)); else if (_cups_strncasecmp(d->model_name->value, d->manufacturer->value, strlen(d->manufacturer->value))) snprintf(make_model, sizeof(make_model), "%s %s, %s", d->manufacturer->value, d->model_name->value, d->version->value); else snprintf(make_model, sizeof(make_model), "%s, %s", d->model_name->value, d->version->value); if ((cups_fax = d->find_attr("cupsFax", NULL)) != NULL && !_cups_strcasecmp(cups_fax->value->value, "true")) type = PPD_TYPE_FAX; else if (d->type == PPDC_DRIVER_PS) type = PPD_TYPE_POSTSCRIPT; else if (d->type != PPDC_DRIVER_CUSTOM) type = PPD_TYPE_RASTER; else { for (filter = (ppdcFilter *)d->filters->first(), type = PPD_TYPE_POSTSCRIPT; filter; filter = (ppdcFilter *)d->filters->next()) if (_cups_strcasecmp(filter->mime_type->value, "application/vnd.cups-raster")) type = PPD_TYPE_RASTER; else if (_cups_strcasecmp(filter->mime_type->value, "application/vnd.cups-pdf")) type = PPD_TYPE_PDF; } for (product = (ppdcAttr *)d->attrs->first(), products_found = 0, ppd = NULL; product; product = (ppdcAttr *)d->attrs->next()) if (!strcmp(product->name->value, "Product")) { if (!products_found) ppd = add_ppd(name, uri, "en", d->manufacturer->value, make_model, device_id ? device_id->value->value : "", product->value->value, ps_version ? ps_version->value->value : "(3010) 0", mtime, (size_t)size, d->model_number, type, "drv"); else if (products_found < PPD_MAX_PROD) strlcpy(ppd->record.products[products_found], product->value->value, sizeof(ppd->record.products[0])); else break; products_found ++; } if (!products_found) add_ppd(name, uri, "en", d->manufacturer->value, make_model, device_id ? device_id->value->value : "", d->model_name->value, ps_version ? ps_version->value->value : "(3010) 0", mtime, (size_t)size, d->model_number, type, "drv"); } src->release(); return (1); } /* * 'load_drivers()' - Load driver-generated PPD files. */ static int /* O - 1 on success, 0 on failure */ load_drivers(cups_array_t *include, /* I - Drivers to include */ cups_array_t *exclude) /* I - Drivers to exclude */ { int i; /* Looping var */ char *start, /* Start of value */ *ptr; /* Pointer into string */ const char *server_bin, /* CUPS_SERVERBIN env variable */ *scheme, /* Scheme for this driver */ *scheme_end; /* Pointer to end of scheme */ char drivers[1024]; /* Location of driver programs */ int pid; /* Process ID for driver program */ cups_file_t *fp; /* Pipe to driver program */ cups_dir_t *dir; /* Directory pointer */ cups_dentry_t *dent; /* Directory entry */ char *argv[3], /* Arguments for command */ filename[1024], /* Name of driver */ line[2048], /* Line from driver */ name[256], /* ppd-name */ make[128], /* ppd-make */ make_and_model[128], /* ppd-make-and-model */ device_id[256], /* ppd-device-id */ languages[128], /* ppd-natural-language */ product[128], /* ppd-product */ psversion[128], /* ppd-psversion */ type_str[128]; /* ppd-type */ int type; /* PPD type */ ppd_info_t *ppd; /* Newly added PPD */ /* * Try opening the driver directory... */ if ((server_bin = getenv("CUPS_SERVERBIN")) == NULL) server_bin = CUPS_SERVERBIN; snprintf(drivers, sizeof(drivers), "%s/driver", server_bin); if ((dir = cupsDirOpen(drivers)) == NULL) { fprintf(stderr, "ERROR: [cups-driverd] Unable to open driver directory " "\"%s\": %s\n", drivers, strerror(errno)); return (0); } /* * Loop through all of the device drivers... */ argv[1] = (char *)"list"; argv[2] = NULL; while ((dent = cupsDirRead(dir)) != NULL) { /* * Only look at executable files... */ if (!(dent->fileinfo.st_mode & 0111) || !S_ISREG(dent->fileinfo.st_mode)) continue; /* * Include/exclude specific drivers... */ if (exclude) { /* * Look for "scheme" or "scheme*" (prefix match), and skip any matches. */ for (scheme = (char *)cupsArrayFirst(exclude); scheme; scheme = (char *)cupsArrayNext(exclude)) { fprintf(stderr, "DEBUG: [cups-driverd] Exclude \"%s\" with \"%s\"?\n", dent->filename, scheme); scheme_end = scheme + strlen(scheme) - 1; if ((scheme_end > scheme && *scheme_end == '*' && !strncmp(scheme, dent->filename, (size_t)(scheme_end - scheme))) || !strcmp(scheme, dent->filename)) { fputs("DEBUG: [cups-driverd] Yes, exclude!\n", stderr); break; } } if (scheme) continue; } if (include) { /* * Look for "scheme" or "scheme*" (prefix match), and skip any non-matches. */ for (scheme = (char *)cupsArrayFirst(include); scheme; scheme = (char *)cupsArrayNext(include)) { fprintf(stderr, "DEBUG: [cups-driverd] Include \"%s\" with \"%s\"?\n", dent->filename, scheme); scheme_end = scheme + strlen(scheme) - 1; if ((scheme_end > scheme && *scheme_end == '*' && !strncmp(scheme, dent->filename, (size_t)(scheme_end - scheme))) || !strcmp(scheme, dent->filename)) { fputs("DEBUG: [cups-driverd] Yes, include!\n", stderr); break; } } if (!scheme) continue; } else scheme = dent->filename; /* * Run the driver with no arguments and collect the output... */ snprintf(filename, sizeof(filename), "%s/%s", drivers, dent->filename); if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_PROGRAM, !geteuid(), _cupsFileCheckFilter, NULL)) continue; argv[0] = dent->filename; if ((fp = cupsdPipeCommand(&pid, filename, argv, 0)) != NULL) { while (cupsFileGets(fp, line, sizeof(line))) { /* * Each line is of the form: * * "ppd-name" ppd-natural-language "ppd-make" "ppd-make-and-model" \ * "ppd-device-id" "ppd-product" "ppd-psversion" */ device_id[0] = '\0'; product[0] = '\0'; psversion[0] = '\0'; strlcpy(type_str, "postscript", sizeof(type_str)); if (sscanf(line, "\"%255[^\"]\"%127s%*[ \t]\"%127[^\"]\"" "%*[ \t]\"%127[^\"]\"%*[ \t]\"%255[^\"]\"" "%*[ \t]\"%127[^\"]\"%*[ \t]\"%127[^\"]\"" "%*[ \t]\"%127[^\"]\"", name, languages, make, make_and_model, device_id, product, psversion, type_str) < 4) { /* * Bad format; strip trailing newline and write an error message. */ if (line[strlen(line) - 1] == '\n') line[strlen(line) - 1] = '\0'; fprintf(stderr, "ERROR: [cups-driverd] Bad line from \"%s\": %s\n", dent->filename, line); break; } else { /* * Add the device to the array of available devices... */ if ((start = strchr(languages, ',')) != NULL) *start++ = '\0'; for (type = 0; type < (int)(sizeof(PPDTypes) / sizeof(PPDTypes[0])); type ++) if (!strcmp(type_str, PPDTypes[type])) break; if (type >= (int)(sizeof(PPDTypes) / sizeof(PPDTypes[0]))) { fprintf(stderr, "ERROR: [cups-driverd] Bad ppd-type \"%s\" ignored!\n", type_str); type = PPD_TYPE_UNKNOWN; } ppd = add_ppd(filename, name, languages, make, make_and_model, device_id, product, psversion, 0, 0, 0, type, scheme); if (!ppd) { cupsDirClose(dir); cupsFileClose(fp); return (0); } if (start && *start) { for (i = 1; i < PPD_MAX_LANG && *start; i ++) { if ((ptr = strchr(start, ',')) != NULL) *ptr++ = '\0'; else ptr = start + strlen(start); strlcpy(ppd->record.languages[i], start, sizeof(ppd->record.languages[0])); start = ptr; } } fprintf(stderr, "DEBUG2: [cups-driverd] Added dynamic PPD \"%s\"...\n", name); } } cupsFileClose(fp); } else fprintf(stderr, "WARNING: [cups-driverd] Unable to execute \"%s\": %s\n", filename, strerror(errno)); } cupsDirClose(dir); return (1); } /* * 'load_ppd()' - Load a PPD file. */ static void load_ppd(const char *filename, /* I - Real filename */ const char *name, /* I - Virtual filename */ const char *scheme, /* I - PPD scheme */ struct stat *fileinfo, /* I - File information */ ppd_info_t *ppd, /* I - Existing PPD file or NULL */ cups_file_t *fp, /* I - File to read from */ off_t end) /* I - End of file position or 0 */ { int i; /* Looping var */ char line[256], /* Line from file */ *ptr, /* Pointer into line */ lang_version[64], /* PPD LanguageVersion */ lang_encoding[64], /* PPD LanguageEncoding */ country[64], /* Country code */ manufacturer[256], /* Manufacturer */ make_model[256], /* Make and Model */ model_name[256], /* ModelName */ nick_name[256], /* NickName */ device_id[256], /* 1284DeviceID */ product[256], /* Product */ psversion[256], /* PSVersion */ temp[512]; /* Temporary make and model */ int install_group, /* In the installable options group? */ model_number, /* cupsModelNumber */ type; /* ppd-type */ cups_array_t *products, /* Product array */ *psversions, /* PSVersion array */ *cups_languages; /* cupsLanguages array */ int new_ppd; /* Is this a new PPD? */ struct /* LanguageVersion translation table */ { const char *version, /* LanguageVersion string */ *language; /* Language code */ } languages[] = { { "chinese", "zh" }, { "czech", "cs" }, { "danish", "da" }, { "dutch", "nl" }, { "english", "en" }, { "finnish", "fi" }, { "french", "fr" }, { "german", "de" }, { "greek", "el" }, { "hungarian", "hu" }, { "italian", "it" }, { "japanese", "ja" }, { "korean", "ko" }, { "norwegian", "no" }, { "polish", "pl" }, { "portuguese", "pt" }, { "russian", "ru" }, { "simplified chinese", "zh_CN" }, { "slovak", "sk" }, { "spanish", "es" }, { "swedish", "sv" }, { "traditional chinese", "zh_TW" }, { "turkish", "tr" } }; /* * Now read until we get the required fields... */ cups_languages = cupsArrayNew(NULL, NULL); products = cupsArrayNew(NULL, NULL); psversions = cupsArrayNew(NULL, NULL); model_name[0] = '\0'; nick_name[0] = '\0'; manufacturer[0] = '\0'; device_id[0] = '\0'; lang_encoding[0] = '\0'; strlcpy(lang_version, "en", sizeof(lang_version)); model_number = 0; install_group = 0; type = PPD_TYPE_POSTSCRIPT; while ((end == 0 || cupsFileTell(fp) < end) && cupsFileGets(fp, line, sizeof(line))) { if (!strncmp(line, "*Manufacturer:", 14)) sscanf(line, "%*[^\"]\"%255[^\"]", manufacturer); else if (!strncmp(line, "*ModelName:", 11)) sscanf(line, "%*[^\"]\"%127[^\"]", model_name); else if (!strncmp(line, "*LanguageEncoding:", 18)) sscanf(line, "%*[^:]:%63s", lang_encoding); else if (!strncmp(line, "*LanguageVersion:", 17)) sscanf(line, "%*[^:]:%63s", lang_version); else if (!strncmp(line, "*NickName:", 10)) sscanf(line, "%*[^\"]\"%255[^\"]", nick_name); else if (!_cups_strncasecmp(line, "*1284DeviceID:", 14)) { sscanf(line, "%*[^\"]\"%255[^\"]", device_id); // Make sure device ID ends with a semicolon... if (device_id[0] && device_id[strlen(device_id) - 1] != ';') strlcat(device_id, ";", sizeof(device_id)); } else if (!strncmp(line, "*Product:", 9)) { if (sscanf(line, "%*[^\"]\"(%255[^\"]", product) == 1) { /* * Make sure the value ends with a right parenthesis - can't stop at * the first right paren since the product name may contain escaped * parenthesis... */ ptr = product + strlen(product) - 1; if (ptr > product && *ptr == ')') { /* * Yes, ends with a parenthesis, so remove it from the end and * add the product to the list... */ *ptr = '\0'; cupsArrayAdd(products, strdup(product)); } } } else if (!strncmp(line, "*PSVersion:", 11)) { sscanf(line, "%*[^\"]\"%255[^\"]", psversion); cupsArrayAdd(psversions, strdup(psversion)); } else if (!strncmp(line, "*cupsLanguages:", 15)) { char *start; /* Start of language */ for (start = line + 15; *start && isspace(*start & 255); start ++); if (*start++ == '\"') { while (*start) { for (ptr = start + 1; *ptr && *ptr != '\"' && !isspace(*ptr & 255); ptr ++); if (*ptr) { *ptr++ = '\0'; while (isspace(*ptr & 255)) *ptr++ = '\0'; } cupsArrayAdd(cups_languages, strdup(start)); start = ptr; } } } else if (!strncmp(line, "*cupsFax:", 9)) { for (ptr = line + 9; isspace(*ptr & 255); ptr ++); if (!_cups_strncasecmp(ptr, "true", 4)) type = PPD_TYPE_FAX; } else if ((!strncmp(line, "*cupsFilter:", 12) || !strncmp(line, "*cupsFilter2:", 13)) && type == PPD_TYPE_POSTSCRIPT) { if (strstr(line + 12, "application/vnd.cups-raster")) type = PPD_TYPE_RASTER; else if (strstr(line + 12, "application/vnd.cups-pdf")) type = PPD_TYPE_PDF; else if (strstr(line + 12, "application/amf") || strstr(line + 12, "application/g-code") || strstr(line + 12, "application/sla")) type = PPD_TYPE_OBJECT_ANY; } else if (!strncmp(line, "*cups3DWorkflows:", 17)) { int is_direct = strstr(line + 17, "direct") != NULL; int is_storage = strstr(line + 17, "storage") != NULL; if (is_direct && !is_storage) type = PPD_TYPE_OBJECT_DIRECT; else if (!is_direct && is_storage) type = PPD_TYPE_OBJECT_STORAGE; else type = PPD_TYPE_OBJECT_ANY; } else if (!strncmp(line, "*cupsModelNumber:", 17)) sscanf(line, "*cupsModelNumber:%d", &model_number); else if (!strncmp(line, "*OpenGroup: Installable", 23)) install_group = 1; else if (!strncmp(line, "*CloseGroup:", 12)) install_group = 0; else if (!strncmp(line, "*OpenUI", 7)) { /* * Stop early if we have a NickName or ModelName attributes * before the first non-installable OpenUI... */ if (!install_group && (model_name[0] || nick_name[0]) && cupsArrayCount(products) > 0 && cupsArrayCount(psversions) > 0) break; } } /* * See if we got all of the required info... */ if (nick_name[0]) cupsCharsetToUTF8((cups_utf8_t *)make_model, nick_name, sizeof(make_model), _ppdGetEncoding(lang_encoding)); else strlcpy(make_model, model_name, sizeof(make_model)); while (isspace(make_model[0] & 255)) _cups_strcpy(make_model, make_model + 1); if (!make_model[0] || cupsArrayCount(products) == 0 || cupsArrayCount(psversions) == 0) { /* * We don't have all the info needed, so skip this file... */ if (!make_model[0]) fprintf(stderr, "WARNING: Missing NickName and ModelName in %s!\n", filename); if (cupsArrayCount(products) == 0) fprintf(stderr, "WARNING: Missing Product in %s!\n", filename); if (cupsArrayCount(psversions) == 0) fprintf(stderr, "WARNING: Missing PSVersion in %s!\n", filename); free_array(products); free_array(psversions); free_array(cups_languages); return; } if (model_name[0]) cupsArrayAdd(products, strdup(model_name)); /* * Normalize the make and model string... */ while (isspace(manufacturer[0] & 255)) _cups_strcpy(manufacturer, manufacturer + 1); if (!_cups_strncasecmp(make_model, manufacturer, strlen(manufacturer))) strlcpy(temp, make_model, sizeof(temp)); else snprintf(temp, sizeof(temp), "%s %s", manufacturer, make_model); _ppdNormalizeMakeAndModel(temp, make_model, sizeof(make_model)); /* * See if we got a manufacturer... */ if (!manufacturer[0] || !strcmp(manufacturer, "ESP")) { /* * Nope, copy the first part of the make and model then... */ strlcpy(manufacturer, make_model, sizeof(manufacturer)); /* * Truncate at the first space, dash, or slash, or make the * manufacturer "Other"... */ for (ptr = manufacturer; *ptr; ptr ++) if (*ptr == ' ' || *ptr == '-' || *ptr == '/') break; if (*ptr && ptr > manufacturer) *ptr = '\0'; else strlcpy(manufacturer, "Other", sizeof(manufacturer)); } else if (!_cups_strncasecmp(manufacturer, "LHAG", 4) || !_cups_strncasecmp(manufacturer, "linotype", 8)) strlcpy(manufacturer, "LHAG", sizeof(manufacturer)); else if (!_cups_strncasecmp(manufacturer, "Hewlett", 7)) strlcpy(manufacturer, "HP", sizeof(manufacturer)); /* * Fix the lang_version as needed... */ if ((ptr = strchr(lang_version, '-')) != NULL) *ptr++ = '\0'; else if ((ptr = strchr(lang_version, '_')) != NULL) *ptr++ = '\0'; if (ptr) { /* * Setup the country suffix... */ country[0] = '_'; _cups_strcpy(country + 1, ptr); } else { /* * No country suffix... */ country[0] = '\0'; } for (i = 0; i < (int)(sizeof(languages) / sizeof(languages[0])); i ++) if (!_cups_strcasecmp(languages[i].version, lang_version)) break; if (i < (int)(sizeof(languages) / sizeof(languages[0]))) { /* * Found a known language... */ snprintf(lang_version, sizeof(lang_version), "%s%s", languages[i].language, country); } else { /* * Unknown language; use "xx"... */ strlcpy(lang_version, "xx", sizeof(lang_version)); } /* * Record the PPD file... */ new_ppd = !ppd; if (new_ppd) { /* * Add new PPD file... */ fprintf(stderr, "DEBUG2: [cups-driverd] Adding ppd \"%s\"...\n", name); ppd = add_ppd(name, name, lang_version, manufacturer, make_model, device_id, (char *)cupsArrayFirst(products), (char *)cupsArrayFirst(psversions), fileinfo->st_mtime, (size_t)fileinfo->st_size, model_number, type, scheme); if (!ppd) return; } else { /* * Update existing record... */ fprintf(stderr, "DEBUG2: [cups-driverd] Updating ppd \"%s\"...\n", name); memset(ppd, 0, sizeof(ppd_info_t)); ppd->found = 1; ppd->record.mtime = fileinfo->st_mtime; ppd->record.size = fileinfo->st_size; ppd->record.model_number = model_number; ppd->record.type = type; strlcpy(ppd->record.filename, name, sizeof(ppd->record.filename)); strlcpy(ppd->record.name, name, sizeof(ppd->record.name)); strlcpy(ppd->record.languages[0], lang_version, sizeof(ppd->record.languages[0])); strlcpy(ppd->record.products[0], (char *)cupsArrayFirst(products), sizeof(ppd->record.products[0])); strlcpy(ppd->record.psversions[0], (char *)cupsArrayFirst(psversions), sizeof(ppd->record.psversions[0])); strlcpy(ppd->record.make, manufacturer, sizeof(ppd->record.make)); strlcpy(ppd->record.make_and_model, make_model, sizeof(ppd->record.make_and_model)); strlcpy(ppd->record.device_id, device_id, sizeof(ppd->record.device_id)); strlcpy(ppd->record.scheme, scheme, sizeof(ppd->record.scheme)); } /* * Add remaining products, versions, and languages... */ for (i = 1; i < PPD_MAX_PROD && (ptr = (char *)cupsArrayNext(products)) != NULL; i ++) strlcpy(ppd->record.products[i], ptr, sizeof(ppd->record.products[0])); for (i = 1; i < PPD_MAX_VERS && (ptr = (char *)cupsArrayNext(psversions)) != NULL; i ++) strlcpy(ppd->record.psversions[i], ptr, sizeof(ppd->record.psversions[0])); for (i = 1, ptr = (char *)cupsArrayFirst(cups_languages); i < PPD_MAX_LANG && ptr; i ++, ptr = (char *)cupsArrayNext(cups_languages)) strlcpy(ppd->record.languages[i], ptr, sizeof(ppd->record.languages[0])); /* * Free products, versions, and languages... */ free_array(cups_languages); free_array(products); free_array(psversions); ChangedPPD = 1; } /* * 'load_ppds()' - Load PPD files recursively. */ static int /* O - 1 on success, 0 on failure */ load_ppds(const char *d, /* I - Actual directory */ const char *p, /* I - Virtual path in name */ int descend) /* I - Descend into directories? */ { struct stat dinfo, /* Directory information */ *dinfoptr; /* Pointer to match */ cups_file_t *fp; /* Pointer to file */ cups_dir_t *dir; /* Directory pointer */ cups_dentry_t *dent; /* Directory entry */ char filename[1024], /* Name of PPD or directory */ line[256], /* Line from file */ *ptr, /* Pointer into name */ name[256]; /* Name of PPD file */ ppd_info_t *ppd, /* New PPD file */ key; /* Search key */ /* * See if we've loaded this directory before... */ if (stat(d, &dinfo)) { if (errno != ENOENT) fprintf(stderr, "ERROR: [cups-driverd] Unable to stat \"%s\": %s\n", d, strerror(errno)); return (0); } else if (cupsArrayFind(Inodes, &dinfo)) { fprintf(stderr, "ERROR: [cups-driverd] Skipping \"%s\": loop detected!\n", d); return (1); } /* * Nope, add it to the Inodes array and continue... */ dinfoptr = (struct stat *)malloc(sizeof(struct stat)); memcpy(dinfoptr, &dinfo, sizeof(struct stat)); cupsArrayAdd(Inodes, dinfoptr); /* * Check permissions... */ if (_cupsFileCheck(d, _CUPS_FILE_CHECK_DIRECTORY, !geteuid(), _cupsFileCheckFilter, NULL)) return (0); if ((dir = cupsDirOpen(d)) == NULL) { if (errno != ENOENT) fprintf(stderr, "ERROR: [cups-driverd] Unable to open PPD directory \"%s\": %s\n", d, strerror(errno)); return (0); } fprintf(stderr, "DEBUG: [cups-driverd] Loading \"%s\"...\n", d); while ((dent = cupsDirRead(dir)) != NULL) { /* * Skip files/directories starting with "."... */ if (dent->filename[0] == '.') continue; /* * See if this is a file... */ snprintf(filename, sizeof(filename), "%s/%s", d, dent->filename); if (p[0]) snprintf(name, sizeof(name), "%s/%s", p, dent->filename); else strlcpy(name, dent->filename, sizeof(name)); if (S_ISDIR(dent->fileinfo.st_mode)) { /* * Do subdirectory... */ if (descend) { if (!load_ppds(filename, name, 1)) { cupsDirClose(dir); return (1); } } else if ((ptr = filename + strlen(filename) - 14) > filename && !strcmp(ptr, ".printerDriver")) { /* * Load PPDs in a printer driver bundle. */ if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_DIRECTORY, !geteuid(), _cupsFileCheckFilter, NULL)) continue; strlcat(filename, "/Contents/Resources/PPDs", sizeof(filename)); strlcat(name, "/Contents/Resources/PPDs", sizeof(name)); load_ppds(filename, name, 0); } continue; } else if (strstr(filename, ".plist")) { /* * Skip plist files in the PPDs directory... */ continue; } else if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_FILE_ONLY, !geteuid(), _cupsFileCheckFilter, NULL)) continue; /* * See if this file has been scanned before... */ strlcpy(key.record.filename, name, sizeof(key.record.filename)); strlcpy(key.record.name, name, sizeof(key.record.name)); ppd = (ppd_info_t *)cupsArrayFind(PPDsByName, &key); if (ppd && ppd->record.size == dent->fileinfo.st_size && ppd->record.mtime == dent->fileinfo.st_mtime) { /* * Rewind to the first entry for this file... */ while ((ppd = (ppd_info_t *)cupsArrayPrev(PPDsByName)) != NULL && !strcmp(ppd->record.filename, name)); /* * Then mark all of the matches for this file as found... */ while ((ppd = (ppd_info_t *)cupsArrayNext(PPDsByName)) != NULL && !strcmp(ppd->record.filename, name)) ppd->found = 1; continue; } /* * No, file is new/changed, so re-scan it... */ if ((fp = cupsFileOpen(filename, "r")) == NULL) continue; /* * Now see if this is a PPD file... */ line[0] = '\0'; cupsFileGets(fp, line, sizeof(line)); if (!strncmp(line, "*PPD-Adobe:", 11)) { /* * Yes, load it... */ load_ppd(filename, name, "file", &dent->fileinfo, ppd, fp, 0); } else { /* * Nope, treat it as a driver information file or archive... */ cupsFileRewind(fp); if ((ptr = strstr(filename, ".tar")) != NULL && (!strcmp(ptr, ".tar") || !strcmp(ptr, ".tar.gz"))) load_tar(filename, name, fp, dent->fileinfo.st_mtime, dent->fileinfo.st_size); else load_drv(filename, name, fp, dent->fileinfo.st_mtime, dent->fileinfo.st_size); } /* * Close the file... */ cupsFileClose(fp); } cupsDirClose(dir); return (1); } /* * 'load_ppds_dat()' - Load the ppds.dat file. */ static void load_ppds_dat(char *filename, /* I - Filename buffer */ size_t filesize, /* I - Size of filename buffer */ int verbose) /* I - Be verbose? */ { ppd_info_t *ppd; /* Current PPD file */ cups_file_t *fp; /* ppds.dat file */ struct stat fileinfo; /* ppds.dat information */ const char *cups_cachedir; /* CUPS_CACHEDIR environment variable */ PPDsByName = cupsArrayNew((cups_array_func_t)compare_names, NULL); PPDsByMakeModel = cupsArrayNew((cups_array_func_t)compare_ppds, NULL); ChangedPPD = 0; if (!filename[0]) { if ((cups_cachedir = getenv("CUPS_CACHEDIR")) == NULL) cups_cachedir = CUPS_CACHEDIR; snprintf(filename, filesize, "%s/ppds.dat", cups_cachedir); } if ((fp = cupsFileOpen(filename, "r")) != NULL) { /* * See if we have the right sync word... */ unsigned ppdsync; /* Sync word */ int num_ppds; /* Number of PPDs */ if ((size_t)cupsFileRead(fp, (char *)&ppdsync, sizeof(ppdsync)) == sizeof(ppdsync) && ppdsync == PPD_SYNC && !stat(filename, &fileinfo) && (((size_t)fileinfo.st_size - sizeof(ppdsync)) % sizeof(ppd_rec_t)) == 0 && (num_ppds = ((size_t)fileinfo.st_size - sizeof(ppdsync)) / sizeof(ppd_rec_t)) > 0) { /* * We have a ppds.dat file, so read it! */ for (; num_ppds > 0; num_ppds --) { if ((ppd = (ppd_info_t *)calloc(1, sizeof(ppd_info_t))) == NULL) { if (verbose) fputs("ERROR: [cups-driverd] Unable to allocate memory for PPD!\n", stderr); exit(1); } if (cupsFileRead(fp, (char *)&(ppd->record), sizeof(ppd_rec_t)) > 0) { cupsArrayAdd(PPDsByName, ppd); cupsArrayAdd(PPDsByMakeModel, ppd); } else { free(ppd); break; } } if (verbose) fprintf(stderr, "INFO: [cups-driverd] Read \"%s\", %d PPDs...\n", filename, cupsArrayCount(PPDsByName)); } cupsFileClose(fp); } } /* * 'load_tar()' - Load archived PPD files. */ static int /* O - 1 on success, 0 on failure */ load_tar(const char *filename, /* I - Actual filename */ const char *name, /* I - Name to the rest of the world */ cups_file_t *fp, /* I - File to read from */ time_t mtime, /* I - Mod time of driver info file */ off_t size) /* I - Size of driver info file */ { char curname[256], /* Current archive file name */ uri[1024]; /* Virtual file URI */ const char *curext; /* Extension on file */ struct stat curinfo; /* Current archive file information */ off_t next; /* Position for next header */ /* * Add a dummy entry for the file... */ (void)filename; add_ppd(name, name, "", "", "", "", "", "", mtime, (size_t)size, 0, PPD_TYPE_ARCHIVE, "file"); ChangedPPD = 1; /* * Scan for PPDs in the archive... */ while (read_tar(fp, curname, sizeof(curname), &curinfo)) { next = cupsFileTell(fp) + ((curinfo.st_size + TAR_BLOCK - 1) & ~(TAR_BLOCK - 1)); if ((curext = strrchr(curname, '.')) != NULL && !_cups_strcasecmp(curext, ".ppd")) { httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "file", "", "", 0, "/%s/%s", name, curname); load_ppd(name, uri, "file", &curinfo, NULL, fp, next); } if (cupsFileTell(fp) != next) cupsFileSeek(fp, next); } return (1); } /* * 'read_tar()' - Read a file header from an archive. * * This function skips all directories and special files. */ static int /* O - 1 if found, 0 on EOF */ read_tar(cups_file_t *fp, /* I - Archive to read */ char *name, /* I - Filename buffer */ size_t namesize, /* I - Size of filename buffer */ struct stat *info) /* O - File information */ { tar_rec_t record; /* Record from file */ while ((size_t)cupsFileRead(fp, (char *)&record, sizeof(record)) == sizeof(record)) { /* * Check for a valid tar header... */ if (memcmp(record.header.magic, TAR_MAGIC, 6) || memcmp(record.header.version, TAR_VERSION, 2)) { if (record.header.magic[0] || memcmp(record.header.magic, record.header.magic + 1, 5)) fputs("ERROR: [cups-driverd] Bad tar magic/version.\n", stderr); break; } /* * Ignore non-files... */ if (record.header.linkflag != TAR_OLDNORMAL && record.header.linkflag != TAR_NORMAL) continue; /* * Grab size and name from tar header and return... */ if (record.header.prefix[0]) snprintf(name, namesize, "%s/%s", record.header.prefix, record.header.pathname); else strlcpy(name, record.header.pathname, namesize); info->st_mtime = strtol(record.header.mtime, NULL, 8); info->st_size = strtoll(record.header.size, NULL, 8); return (1); } return (0); } /* * 'regex_device_id()' - Compile a regular expression based on the 1284 device * ID. */ static regex_t * /* O - Regular expression */ regex_device_id(const char *device_id) /* I - IEEE-1284 device ID */ { char res[2048], /* Regular expression string */ *ptr; /* Pointer into string */ regex_t *re; /* Regular expression */ int cmd; /* Command set string? */ fprintf(stderr, "DEBUG: [cups-driverd] regex_device_id(\"%s\")\n", device_id); /* * Scan the device ID string and insert class, command set, manufacturer, and * model attributes to match. We assume that the device ID in the PPD and the * device ID reported by the device itself use the same attribute names and * order of attributes. */ ptr = res; while (*device_id && ptr < (res + sizeof(res) - 6)) { cmd = !_cups_strncasecmp(device_id, "COMMAND SET:", 12) || !_cups_strncasecmp(device_id, "CMD:", 4); if (cmd || !_cups_strncasecmp(device_id, "MANUFACTURER:", 13) || !_cups_strncasecmp(device_id, "MFG:", 4) || !_cups_strncasecmp(device_id, "MFR:", 4) || !_cups_strncasecmp(device_id, "MODEL:", 6) || !_cups_strncasecmp(device_id, "MDL:", 4)) { if (ptr > res) { *ptr++ = '.'; *ptr++ = '*'; } *ptr++ = '('; while (*device_id && *device_id != ';' && ptr < (res + sizeof(res) - 8)) { if (strchr("[]{}().*\\|", *device_id)) *ptr++ = '\\'; if (*device_id == ':') { /* * KEY:.*value */ *ptr++ = *device_id++; *ptr++ = '.'; *ptr++ = '*'; } else *ptr++ = *device_id++; } if (*device_id == ';' || !*device_id) { /* * KEY:.*value.*; */ *ptr++ = '.'; *ptr++ = '*'; *ptr++ = ';'; } *ptr++ = ')'; if (cmd) *ptr++ = '?'; } else if ((device_id = strchr(device_id, ';')) == NULL) break; else device_id ++; } *ptr = '\0'; fprintf(stderr, "DEBUG: [cups-driverd] regex_device_id: \"%s\"\n", res); /* * Compile the regular expression and return... */ if (res[0] && (re = (regex_t *)calloc(1, sizeof(regex_t))) != NULL) { if (!regcomp(re, res, REG_EXTENDED | REG_ICASE)) { fputs("DEBUG: [cups-driverd] regex_device_id: OK\n", stderr); return (re); } free(re); } return (NULL); } /* * 'regex_string()' - Construct a regular expression to compare a simple string. */ static regex_t * /* O - Regular expression */ regex_string(const char *s) /* I - String to compare */ { char res[2048], /* Regular expression string */ *ptr; /* Pointer into string */ regex_t *re; /* Regular expression */ fprintf(stderr, "DEBUG: [cups-driverd] regex_string(\"%s\")\n", s); /* * Convert the string to a regular expression, escaping special characters * as needed. */ ptr = res; while (*s && ptr < (res + sizeof(res) - 2)) { if (strchr("[]{}().*\\", *s)) *ptr++ = '\\'; *ptr++ = *s++; } *ptr = '\0'; fprintf(stderr, "DEBUG: [cups-driverd] regex_string: \"%s\"\n", res); /* * Create a case-insensitive regular expression... */ if (res[0] && (re = (regex_t *)calloc(1, sizeof(regex_t))) != NULL) { if (!regcomp(re, res, REG_ICASE)) { fputs("DEBUG: [cups-driverd] regex_string: OK\n", stderr); return (re); } free(re); } return (NULL); } cups-2.2.7/scheduler/cups-exec.c000664 000765 000024 00000010067 13255074424 017175 0ustar00msweetstaff000000 000000 /* * Sandbox helper for CUPS. * * Copyright 2007-2014 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * Usage: * * cups-exec /path/to/profile [-u UID] [-g GID] [-n NICE] /path/to/program argv0 argv1 ... argvN */ /* * Include necessary headers... */ #include #include #include #include #include #include #ifdef HAVE_SANDBOX_H # include # ifndef SANDBOX_NAMED_EXTERNAL # define SANDBOX_NAMED_EXTERNAL 0x0003 # endif /* !SANDBOX_NAMED_EXTERNAL */ # pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif /* HAVE_SANDBOX_H */ /* * Local functions... */ static void usage(void) __attribute__((noreturn)); /* * 'main()' - Apply sandbox profile and execute program. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ const char *opt; /* Current option character */ uid_t uid = getuid(); /* UID */ gid_t gid = getgid(); /* GID */ int niceval = 0; /* Nice value */ #ifdef HAVE_SANDBOX_H char *sandbox_error = NULL; /* Sandbox error, if any */ #endif /* HAVE_SANDBOX_H */ /* * Parse command-line... */ for (i = 1; i < argc; i ++) { if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'g' : /* -g gid */ i ++; if (i >= argc) usage(); gid = (gid_t)atoi(argv[i]); break; case 'n' : /* -n nice-value */ i ++; if (i >= argc) usage(); niceval = atoi(argv[i]); break; case 'u' : /* -g gid */ i ++; if (i >= argc) usage(); uid = (uid_t)atoi(argv[i]); break; default : fprintf(stderr, "cups-exec: Unknown option '-%c'.\n", *opt); usage(); } } } else break; } /* * Check that we have enough arguments... */ if ((i + 3) > argc) { fputs("cups-exec: Insufficient arguments.\n", stderr); usage(); } /* * Make sure side and back channel FDs are non-blocking... */ fcntl(3, F_SETFL, O_NDELAY); fcntl(4, F_SETFL, O_NDELAY); /* * Change UID, GID, and nice value... */ if (uid) nice(niceval); if (!getuid()) { if (setgid(gid)) exit(errno + 100); if (setgroups(1, &gid)) exit(errno + 100); if (uid && setuid(uid)) exit(errno + 100); } umask(077); #ifdef HAVE_SANDBOX_H /* * Run in a separate security profile... */ if (strcmp(argv[i], "none") && sandbox_init(argv[i], SANDBOX_NAMED_EXTERNAL, &sandbox_error)) { cups_file_t *fp; /* File */ char line[1024]; /* Line from file */ int linenum = 0; /* Line number in file */ fprintf(stderr, "DEBUG: sandbox_init failed: %s (%s)\n", sandbox_error, strerror(errno)); sandbox_free_error(sandbox_error); if ((fp = cupsFileOpen(argv[i], "r")) != NULL) { while (cupsFileGets(fp, line, sizeof(line))) { linenum ++; fprintf(stderr, "DEBUG: %4d %s\n", linenum, line); } cupsFileClose(fp); } return (100 + EINVAL); } #endif /* HAVE_SANDBOX_H */ /* * Execute the program... */ execv(argv[i + 1], argv + i + 2); /* * If we get here, execv() failed... */ fprintf(stderr, "DEBUG: execv failed: %s\n", strerror(errno)); return (errno + 100); } /* * 'usage()' - Show program usage. */ static void usage(void) { fputs("Usage: cups-exec [-g gid] [-n nice-value] [-u uid] /path/to/profile /path/to/program argv0 argv1 ... argvN\n", stderr); exit(1); } cups-2.2.7/scheduler/cups-lpd.c000664 000765 000024 00000120036 13255074424 017026 0ustar00msweetstaff000000 000000 /* * Line Printer Daemon interface for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #define _CUPS_NO_DEPRECATED #include #include #include #include #include #include #include #include #ifdef HAVE_INTTYPES_H # include #endif /* HAVE_INTTYPES_H */ #ifdef __APPLE__ # include #endif /* __APPLE__ */ /* * LPD "mini-daemon" for CUPS. This program must be used in conjunction * with inetd or another similar program that monitors ports and starts * daemons for each client connection. A typical configuration is: * * printer stream tcp nowait lp /usr/lib/cups/daemon/cups-lpd cups-lpd * * This daemon implements most of RFC 1179 (the unofficial LPD specification) * except for: * * - This daemon does not check to make sure that the source port is * between 721 and 731, since it isn't necessary for proper * functioning and port-based security is no security at all! * * - The "Print any waiting jobs" command is a no-op. * * The LPD-to-IPP mapping is as defined in RFC 2569. The report formats * currently match the Solaris LPD mini-daemon. */ /* * Prototypes... */ static int create_job(http_t *http, const char *dest, const char *title, const char *user, int num_options, cups_option_t *options); static int get_printer(http_t *http, const char *name, char *dest, size_t destsize, cups_option_t **options, int *accepting, int *shared, ipp_pstate_t *state); static int print_file(http_t *http, int id, const char *filename, const char *docname, const char *user, const char *format, int last); static int recv_print_job(const char *name, int num_defaults, cups_option_t *defaults); static int remove_jobs(const char *name, const char *agent, const char *list); static int send_state(const char *name, const char *list, int longstatus); static char *smart_gets(char *s, int len, FILE *fp); static void smart_strlcpy(char *dst, const char *src, size_t dstsize); /* * 'main()' - Process an incoming LPD request... */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ int num_defaults; /* Number of default options */ cups_option_t *defaults; /* Default options */ char line[256], /* Command string */ command, /* Command code */ *dest, /* Pointer to destination */ *list, /* Pointer to list */ *agent, /* Pointer to user */ status; /* Status for client */ socklen_t hostlen; /* Size of client address */ http_addr_t hostaddr; /* Address of client */ char hostname[256], /* Name of client */ hostip[256], /* IP address */ *hostfamily; /* Address family */ int hostlookups; /* Do hostname lookups? */ #ifdef __APPLE__ xpc_transaction_begin(); #endif /* __APPLE__ */ /* * Don't buffer the output... */ setbuf(stdout, NULL); /* * Log things using the "cups-lpd" name... */ openlog("cups-lpd", LOG_PID, LOG_LPR); /* * Scan the command-line for options... */ num_defaults = 0; defaults = NULL; hostlookups = 1; for (i = 1; i < argc; i ++) if (argv[i][0] == '-') { switch (argv[i][1]) { case 'h' : /* -h hostname[:port] */ if (argv[i][2]) cupsSetServer(argv[i] + 2); else { i ++; if (i < argc) cupsSetServer(argv[i]); else syslog(LOG_WARNING, "Expected hostname string after -h option!"); } break; case 'o' : /* Option */ if (argv[i][2]) num_defaults = cupsParseOptions(argv[i] + 2, num_defaults, &defaults); else { i ++; if (i < argc) num_defaults = cupsParseOptions(argv[i], num_defaults, &defaults); else syslog(LOG_WARNING, "Expected option string after -o option!"); } break; case 'n' : /* Don't do hostname lookups */ hostlookups = 0; break; default : syslog(LOG_WARNING, "Unknown option \"%c\" ignored!", argv[i][1]); break; } } else syslog(LOG_WARNING, "Unknown command-line option \"%s\" ignored!", argv[i]); /* * Get the address of the client... */ hostlen = sizeof(hostaddr); if (getpeername(0, (struct sockaddr *)&hostaddr, &hostlen)) { syslog(LOG_WARNING, "Unable to get client address - %s", strerror(errno)); strlcpy(hostname, "unknown", sizeof(hostname)); } else { httpAddrString(&hostaddr, hostip, sizeof(hostip)); if (hostlookups) httpAddrLookup(&hostaddr, hostname, sizeof(hostname)); else strlcpy(hostname, hostip, sizeof(hostname)); #ifdef AF_INET6 if (hostaddr.addr.sa_family == AF_INET6) hostfamily = "IPv6"; else #endif /* AF_INET6 */ hostfamily = "IPv4"; syslog(LOG_INFO, "Connection from %s (%s %s)", hostname, hostfamily, hostip); } num_defaults = cupsAddOption("job-originating-host-name", hostname, num_defaults, &defaults); /* * RFC1179 specifies that only 1 daemon command can be received for * every connection. */ if (smart_gets(line, sizeof(line), stdin) == NULL) { /* * Unable to get command from client! Send an error status and return. */ syslog(LOG_ERR, "Unable to get command line from client!"); putchar(1); #ifdef __APPLE__ xpc_transaction_end(); #endif /* __APPLE__ */ return (1); } /* * The first byte is the command byte. After that will be the queue name, * resource list, and/or user name. */ if ((command = line[0]) == '\0') dest = line; else dest = line + 1; if (command == 0x02) list = NULL; else { for (list = dest; *list && !isspace(*list & 255); list ++); while (isspace(*list & 255)) *list++ = '\0'; } /* * Do the command... */ switch (command) { default : /* Unknown command */ syslog(LOG_ERR, "Unknown LPD command 0x%02X!", command); syslog(LOG_ERR, "Command line = %s", line + 1); putchar(1); status = 1; break; case 0x01 : /* Print any waiting jobs */ syslog(LOG_INFO, "Print waiting jobs (no-op)"); putchar(0); status = 0; break; case 0x02 : /* Receive a printer job */ syslog(LOG_INFO, "Receive print job for %s", dest); /* recv_print_job() sends initial status byte */ status = (char)recv_print_job(dest, num_defaults, defaults); break; case 0x03 : /* Send queue state (short) */ syslog(LOG_INFO, "Send queue state (short) for %s %s", dest, list); /* no status byte for this command */ status = (char)send_state(dest, list, 0); break; case 0x04 : /* Send queue state (long) */ syslog(LOG_INFO, "Send queue state (long) for %s %s", dest, list); /* no status byte for this command */ status = (char)send_state(dest, list, 1); break; case 0x05 : /* Remove jobs */ if (list) { /* * Grab the agent and skip to the list of users and/or jobs. */ agent = list; for (; *list && !isspace(*list & 255); list ++); while (isspace(*list & 255)) *list++ = '\0'; syslog(LOG_INFO, "Remove jobs %s on %s by %s", list, dest, agent); status = (char)remove_jobs(dest, agent, list); } else status = 1; putchar(status); break; } syslog(LOG_INFO, "Closing connection"); closelog(); #ifdef __APPLE__ xpc_transaction_end(); #endif /* __APPLE__ */ return (status); } /* * 'create_job()' - Create a new print job. */ static int /* O - Job ID or -1 on error */ create_job(http_t *http, /* I - HTTP connection */ const char *dest, /* I - Destination name */ const char *title, /* I - job-name */ const char *user, /* I - requesting-user-name */ int num_options, /* I - Number of options for job */ cups_option_t *options) /* I - Options for job */ { ipp_t *request; /* IPP request */ ipp_t *response; /* IPP response */ ipp_attribute_t *attr; /* IPP attribute */ char uri[HTTP_MAX_URI]; /* Printer URI */ int id; /* Job ID */ /* * Setup the Create-Job request... */ request = ippNewRequest(IPP_OP_CREATE_JOB); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", dest); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); if (title[0]) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, title); cupsEncodeOptions(request, num_options, options); /* * Do the request... */ snprintf(uri, sizeof(uri), "/printers/%s", dest); response = cupsDoRequest(http, request, uri); if (!response || cupsLastError() > IPP_STATUS_OK_CONFLICTING) { syslog(LOG_ERR, "Unable to create job - %s", cupsLastErrorString()); ippDelete(response); return (-1); } /* * Get the job-id value from the response and return it... */ if ((attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) == NULL) { id = -1; syslog(LOG_ERR, "No job-id attribute found in response from server!"); } else { id = attr->values[0].integer; syslog(LOG_INFO, "Print file - job ID = %d", id); } ippDelete(response); return (id); } /* * 'get_printer()' - Get the named printer and its options. */ static int /* O - Number of options or -1 on error */ get_printer(http_t *http, /* I - HTTP connection */ const char *name, /* I - Printer name from request */ char *dest, /* I - Destination buffer */ size_t destsize, /* I - Size of destination buffer */ cups_option_t **options, /* O - Printer options */ int *accepting, /* O - printer-is-accepting-jobs value */ int *shared, /* O - printer-is-shared value */ ipp_pstate_t *state) /* O - printer-state value */ { int num_options; /* Number of options */ cups_file_t *fp; /* lpoptions file */ char line[1024], /* Line from lpoptions file */ *value, /* Pointer to value on line */ *optptr; /* Pointer to options on line */ int linenum; /* Line number in file */ const char *cups_serverroot; /* CUPS_SERVERROOT env var */ ipp_t *request; /* IPP request */ ipp_t *response; /* IPP response */ ipp_attribute_t *attr; /* IPP attribute */ char uri[HTTP_MAX_URI]; /* Printer URI */ static const char * const requested[] = { /* Requested attributes */ "printer-info", "printer-is-accepting-jobs", "printer-is-shared", "printer-name", "printer-state" }; /* * Initialize everything... */ if (accepting) *accepting = 0; if (shared) *shared = 0; if (state) *state = IPP_PSTATE_STOPPED; if (options) *options = NULL; /* * See if the name is a queue name optionally with an instance name. */ strlcpy(dest, name, destsize); if ((value = strchr(dest, '/')) != NULL) *value = '\0'; /* * Setup the Get-Printer-Attributes request... */ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", dest); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(requested) / sizeof(requested[0])), NULL, requested); /* * Do the request... */ response = cupsDoRequest(http, request, "/"); if (!response || cupsLastError() > IPP_STATUS_OK_CONFLICTING) { /* * If we can't find the printer by name, look up the printer-name * using the printer-info values... */ ipp_attribute_t *accepting_attr,/* printer-is-accepting-jobs */ *info_attr, /* printer-info */ *name_attr, /* printer-name */ *shared_attr, /* printer-is-shared */ *state_attr; /* printer-state */ ippDelete(response); /* * Setup the CUPS-Get-Printers request... */ request = ippNewRequest(IPP_OP_CUPS_GET_PRINTERS); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(requested) / sizeof(requested[0])), NULL, requested); /* * Do the request... */ response = cupsDoRequest(http, request, "/"); if (!response || cupsLastError() > IPP_STATUS_OK_CONFLICTING) { syslog(LOG_ERR, "Unable to get list of printers - %s", cupsLastErrorString()); ippDelete(response); return (-1); } /* * Scan the response for printers... */ *dest = '\0'; attr = response->attrs; while (attr) { /* * Skip to the next printer... */ while (attr && attr->group_tag != IPP_TAG_PRINTER) attr = attr->next; if (!attr) break; /* * Get all of the attributes for the current printer... */ accepting_attr = NULL; info_attr = NULL; name_attr = NULL; shared_attr = NULL; state_attr = NULL; while (attr && attr->group_tag == IPP_TAG_PRINTER) { if (!strcmp(attr->name, "printer-is-accepting-jobs") && attr->value_tag == IPP_TAG_BOOLEAN) accepting_attr = attr; else if (!strcmp(attr->name, "printer-info") && attr->value_tag == IPP_TAG_TEXT) info_attr = attr; else if (!strcmp(attr->name, "printer-name") && attr->value_tag == IPP_TAG_NAME) name_attr = attr; else if (!strcmp(attr->name, "printer-is-shared") && attr->value_tag == IPP_TAG_BOOLEAN) shared_attr = attr; else if (!strcmp(attr->name, "printer-state") && attr->value_tag == IPP_TAG_ENUM) state_attr = attr; attr = attr->next; } if (info_attr && name_attr && !_cups_strcasecmp(name, info_attr->values[0].string.text)) { /* * Found a match, use this one! */ strlcpy(dest, name_attr->values[0].string.text, destsize); if (accepting && accepting_attr) *accepting = accepting_attr->values[0].boolean; if (shared && shared_attr) *shared = shared_attr->values[0].boolean; if (state && state_attr) *state = (ipp_pstate_t)state_attr->values[0].integer; break; } } ippDelete(response); if (!*dest) { syslog(LOG_ERR, "Unable to find \"%s\" in list of printers!", name); return (-1); } name = dest; } else { /* * Get values from the response... */ if (accepting) { if ((attr = ippFindAttribute(response, "printer-is-accepting-jobs", IPP_TAG_BOOLEAN)) == NULL) syslog(LOG_ERR, "No printer-is-accepting-jobs attribute found in " "response from server!"); else *accepting = attr->values[0].boolean; } if (shared) { if ((attr = ippFindAttribute(response, "printer-is-shared", IPP_TAG_BOOLEAN)) == NULL) { syslog(LOG_ERR, "No printer-is-shared attribute found in " "response from server!"); *shared = 1; } else *shared = attr->values[0].boolean; } if (state) { if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) == NULL) syslog(LOG_ERR, "No printer-state attribute found in " "response from server!"); else *state = (ipp_pstate_t)attr->values[0].integer; } ippDelete(response); } /* * Next look for the printer in the lpoptions file... */ num_options = 0; if (options && shared && accepting) { if ((cups_serverroot = getenv("CUPS_SERVERROOT")) == NULL) cups_serverroot = CUPS_SERVERROOT; snprintf(line, sizeof(line), "%s/lpoptions", cups_serverroot); if ((fp = cupsFileOpen(line, "r")) != NULL) { linenum = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { /* * Make sure we have "Dest name options" or "Default name options"... */ if ((_cups_strcasecmp(line, "Dest") && _cups_strcasecmp(line, "Default")) || !value) continue; /* * Separate destination name from options... */ for (optptr = value; *optptr && !isspace(*optptr & 255); optptr ++); while (*optptr == ' ') *optptr++ = '\0'; /* * If this is our destination, parse the options and break out of * the loop - we're done! */ if (!_cups_strcasecmp(value, name)) { num_options = cupsParseOptions(optptr, num_options, options); break; } } cupsFileClose(fp); } } else if (options) *options = NULL; /* * Return the number of options for this destination... */ return (num_options); } /* * 'print_file()' - Add a file to the current job. */ static int /* O - 0 on success, -1 on failure */ print_file(http_t *http, /* I - HTTP connection */ int id, /* I - Job ID */ const char *filename, /* I - File to print */ const char *docname, /* I - document-name */ const char *user, /* I - requesting-user-name */ const char *format, /* I - document-format */ int last) /* I - 1 = last file in job */ { ipp_t *request; /* IPP request */ char uri[HTTP_MAX_URI]; /* Printer URI */ /* * Setup the Send-Document request... */ request = ippNewRequest(IPP_OP_SEND_DOCUMENT); snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); if (docname) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "document-name", NULL, docname); if (format) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format); ippAddBoolean(request, IPP_TAG_OPERATION, "last-document", (char)last); /* * Do the request... */ snprintf(uri, sizeof(uri), "/jobs/%d", id); ippDelete(cupsDoFileRequest(http, request, uri, filename)); if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { syslog(LOG_ERR, "Unable to send document - %s", cupsLastErrorString()); return (-1); } return (0); } /* * 'recv_print_job()' - Receive a print job from the client. */ static int /* O - Command status */ recv_print_job( const char *queue, /* I - Printer name */ int num_defaults, /* I - Number of default options */ cups_option_t *defaults) /* I - Default options */ { http_t *http; /* HTTP connection */ int i; /* Looping var */ int status; /* Command status */ int fd; /* Temporary file */ FILE *fp; /* File pointer */ char filename[1024]; /* Temporary filename */ ssize_t bytes; /* Bytes received */ size_t total; /* Total bytes */ char line[256], /* Line from file/stdin */ command, /* Command from line */ *count, /* Number of bytes */ *name; /* Name of file */ const char *job_sheets; /* Job sheets */ int num_data; /* Number of data files */ char control[1024], /* Control filename */ data[100][256], /* Data files */ temp[100][1024]; /* Temporary files */ char user[1024], /* User name */ title[1024], /* Job title */ docname[1024], /* Document name */ dest[256]; /* Printer/class queue */ int accepting, /* printer-is-accepting */ shared, /* printer-is-shared */ num_options; /* Number of options */ cups_option_t *options; /* Options */ int id; /* Job ID */ int docnumber, /* Current document number */ doccount; /* Count of documents */ /* * Connect to the server... */ http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL); if (!http) { syslog(LOG_ERR, "Unable to connect to server: %s", strerror(errno)); putchar(1); return (1); } /* * See if the printer is available... */ num_options = get_printer(http, queue, dest, sizeof(dest), &options, &accepting, &shared, NULL); if (num_options < 0 || !accepting || !shared) { if (dest[0]) syslog(LOG_INFO, "Rejecting job because \"%s\" is not %s", dest, !accepting ? "accepting jobs" : "shared"); else syslog(LOG_ERR, "Unable to get printer information for \"%s\"", queue); httpClose(http); putchar(1); return (1); } putchar(0); /* OK so far... */ /* * Read the request... */ status = 0; num_data = 0; fd = -1; control[0] = '\0'; while (smart_gets(line, sizeof(line), stdin) != NULL) { if (strlen(line) < 2) { status = 1; break; } command = line[0]; count = line + 1; for (name = count + 1; *name && !isspace(*name & 255); name ++); while (isspace(*name & 255)) *name++ = '\0'; switch (command) { default : case 0x01 : /* Abort */ status = 1; break; case 0x02 : /* Receive control file */ if (strlen(name) < 2) { syslog(LOG_ERR, "Bad control file name \"%s\"", name); putchar(1); status = 1; break; } if (control[0]) { /* * Append to the existing control file - the LPD spec is * not entirely clear, but at least the OS/2 LPD code sends * multiple control files per connection... */ if ((fd = open(control, O_WRONLY)) < 0) { syslog(LOG_ERR, "Unable to append to temporary control file \"%s\" - %s", control, strerror(errno)); putchar(1); status = 1; break; } lseek(fd, 0, SEEK_END); } else { if ((fd = cupsTempFd(control, sizeof(control))) < 0) { syslog(LOG_ERR, "Unable to open temporary control file \"%s\" - %s", control, strerror(errno)); putchar(1); status = 1; break; } strlcpy(filename, control, sizeof(filename)); } break; case 0x03 : /* Receive data file */ if (strlen(name) < 2) { syslog(LOG_ERR, "Bad data file name \"%s\"", name); putchar(1); status = 1; break; } if (num_data >= (int)(sizeof(data) / sizeof(data[0]))) { /* * Too many data files... */ syslog(LOG_ERR, "Too many data files (%d)", num_data); putchar(1); status = 1; break; } strlcpy(data[num_data], name, sizeof(data[0])); if ((fd = cupsTempFd(temp[num_data], sizeof(temp[0]))) < 0) { syslog(LOG_ERR, "Unable to open temporary data file \"%s\" - %s", temp[num_data], strerror(errno)); putchar(1); status = 1; break; } strlcpy(filename, temp[num_data], sizeof(filename)); num_data ++; break; } putchar(status); if (status) break; /* * Copy the data or control file from the client... */ for (total = (size_t)strtoll(count, NULL, 10); total > 0; total -= (size_t)bytes) { if (total > sizeof(line)) bytes = (ssize_t)sizeof(line); else bytes = (ssize_t)total; if ((bytes = (ssize_t)fread(line, 1, (size_t)bytes, stdin)) > 0) bytes = write(fd, line, (size_t)bytes); if (bytes < 1) { syslog(LOG_ERR, "Error while reading file - %s", strerror(errno)); status = 1; break; } } /* * Read trailing nul... */ if (!status) { if (fread(line, 1, 1, stdin) < 1) { status = 1; syslog(LOG_ERR, "Error while reading trailing nul - %s", strerror(errno)); } else if (line[0]) { status = 1; syslog(LOG_ERR, "Trailing character after file is not nul (%02X)!", line[0]); } } /* * Close the file and send an acknowledgement... */ close(fd); putchar(status); if (status) break; } if (!status) { /* * Process the control file and print stuff... */ if ((fp = fopen(control, "rb")) == NULL) status = 1; else { /* * Copy the default options... */ for (i = 0; i < num_defaults; i ++) num_options = cupsAddOption(defaults[i].name, defaults[i].value, num_options, &options); /* * Grab the job information... */ title[0] = '\0'; user[0] = '\0'; docname[0] = '\0'; doccount = 0; while (smart_gets(line, sizeof(line), fp) != NULL) { /* * Process control lines... */ switch (line[0]) { case 'J' : /* Job name */ smart_strlcpy(title, line + 1, sizeof(title)); break; case 'N' : /* Document name */ smart_strlcpy(docname, line + 1, sizeof(docname)); break; case 'P' : /* User identification */ smart_strlcpy(user, line + 1, sizeof(user)); break; case 'L' : /* Print banner page */ /* * If a banner was requested and it's not overridden by a * command line option and the destination's default is none * then add the standard banner... */ if (cupsGetOption("job-sheets", num_defaults, defaults) == NULL && ((job_sheets = cupsGetOption("job-sheets", num_options, options)) == NULL || !strcmp(job_sheets, "none,none"))) { num_options = cupsAddOption("job-sheets", "standard", num_options, &options); } break; case 'c' : /* Plot CIF file */ case 'd' : /* Print DVI file */ case 'f' : /* Print formatted file */ case 'g' : /* Plot file */ case 'l' : /* Print file leaving control characters (raw) */ case 'n' : /* Print ditroff output file */ case 'o' : /* Print PostScript output file */ case 'p' : /* Print file with 'pr' format (prettyprint) */ case 'r' : /* File to print with FORTRAN carriage control */ case 't' : /* Print troff output file */ case 'v' : /* Print raster file */ doccount ++; if (line[0] == 'l' && !cupsGetOption("document-format", num_options, options)) num_options = cupsAddOption("raw", "", num_options, &options); if (line[0] == 'p') num_options = cupsAddOption("prettyprint", "", num_options, &options); break; } if (status) break; } /* * Check that we have a username... */ if (!user[0]) { syslog(LOG_WARNING, "No username specified by client! " "Using \"anonymous\"..."); strlcpy(user, "anonymous", sizeof(user)); } /* * Create the job... */ if ((id = create_job(http, dest, title, user, num_options, options)) < 0) status = 1; else { /* * Then print the job files... */ rewind(fp); docname[0] = '\0'; docnumber = 0; while (smart_gets(line, sizeof(line), fp) != NULL) { /* * Process control lines... */ switch (line[0]) { case 'N' : /* Document name */ smart_strlcpy(docname, line + 1, sizeof(docname)); break; case 'c' : /* Plot CIF file */ case 'd' : /* Print DVI file */ case 'f' : /* Print formatted file */ case 'g' : /* Plot file */ case 'l' : /* Print file leaving control characters (raw) */ case 'n' : /* Print ditroff output file */ case 'o' : /* Print PostScript output file */ case 'p' : /* Print file with 'pr' format (prettyprint) */ case 'r' : /* File to print with FORTRAN carriage control */ case 't' : /* Print troff output file */ case 'v' : /* Print raster file */ /* * Figure out which file we are printing... */ for (i = 0; i < num_data; i ++) if (!strcmp(data[i], line + 1)) break; if (i >= num_data) { status = 1; break; } /* * Send the print file... */ docnumber ++; if (print_file(http, id, temp[i], docname, user, cupsGetOption("document-format", num_options, options), docnumber == doccount)) status = 1; else status = 0; break; } if (status) break; } } fclose(fp); } } cupsFreeOptions(num_options, options); httpClose(http); /* * Clean up all temporary files and return... */ unlink(control); for (i = 0; i < num_data; i ++) unlink(temp[i]); return (status); } /* * 'remove_jobs()' - Cancel one or more jobs. */ static int /* O - Command status */ remove_jobs(const char *dest, /* I - Destination */ const char *agent, /* I - User agent */ const char *list) /* I - List of jobs or users */ { int id; /* Job ID */ http_t *http; /* HTTP server connection */ ipp_t *request; /* IPP Request */ char uri[HTTP_MAX_URI]; /* Job URI */ (void)dest; /* Suppress compiler warnings... */ /* * Try connecting to the local server... */ if ((http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL)) == NULL) { syslog(LOG_ERR, "Unable to connect to server %s: %s", cupsServer(), strerror(errno)); return (1); } /* * Loop for each job... */ while ((id = atoi(list)) > 0) { /* * Skip job ID in list... */ while (isdigit(*list & 255)) list ++; while (isspace(*list & 255)) list ++; /* * Build an IPP_OP_CANCEL_JOB request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * job-uri * requesting-user-name */ request = ippNewRequest(IPP_OP_CANCEL_JOB); sprintf(uri, "ipp://localhost/jobs/%d", id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, agent); /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(http, request, "/jobs")); if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { syslog(LOG_WARNING, "Cancel of job ID %d failed: %s\n", id, cupsLastErrorString()); httpClose(http); return (1); } else syslog(LOG_INFO, "Job ID %d canceled", id); } httpClose(http); return (0); } /* * 'send_state()' - Send the queue state. */ static int /* O - Command status */ send_state(const char *queue, /* I - Destination */ const char *list, /* I - Job or user */ int longstatus) /* I - List of jobs or users */ { int id; /* Job ID from list */ http_t *http; /* HTTP server connection */ ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr; /* Current attribute */ ipp_pstate_t state; /* Printer state */ const char *jobdest, /* Pointer into job-printer-uri */ *jobuser, /* Pointer to job-originating-user-name */ *jobname; /* Pointer to job-name */ ipp_jstate_t jobstate; /* job-state */ int jobid, /* job-id */ jobsize, /* job-k-octets */ jobcount, /* Number of jobs */ jobcopies, /* Number of copies */ rank; /* Rank of job */ char rankstr[255]; /* Rank string */ char namestr[1024]; /* Job name string */ char uri[HTTP_MAX_URI]; /* Printer URI */ char dest[256]; /* Printer/class queue */ static const char * const ranks[10] = /* Ranking strings */ { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" }; static const char * const requested[] = { /* Requested attributes */ "job-id", "job-k-octets", "job-state", "job-printer-uri", "job-originating-user-name", "job-name", "copies" }; /* * Try connecting to the local server... */ if ((http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL)) == NULL) { syslog(LOG_ERR, "Unable to connect to server %s: %s", cupsServer(), strerror(errno)); printf("Unable to connect to server %s: %s", cupsServer(), strerror(errno)); return (1); } /* * Get the actual destination name and printer state... */ if (get_printer(http, queue, dest, sizeof(dest), NULL, NULL, NULL, &state)) { syslog(LOG_ERR, "Unable to get printer %s: %s", queue, cupsLastErrorString()); printf("Unable to get printer %s: %s", queue, cupsLastErrorString()); return (1); } /* * Show the queue state... */ switch (state) { case IPP_PSTATE_IDLE : printf("%s is ready\n", dest); break; case IPP_PSTATE_PROCESSING : printf("%s is ready and printing\n", dest); break; case IPP_PSTATE_STOPPED : printf("%s is not ready\n", dest); break; } /* * Build an IPP_OP_GET_JOBS or IPP_OP_GET_JOB_ATTRIBUTES request, which requires * the following attributes: * * attributes-charset * attributes-natural-language * job-uri or printer-uri */ id = atoi(list); request = ippNewRequest(id ? IPP_OP_GET_JOB_ATTRIBUTES : IPP_OP_GET_JOBS); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", dest); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); if (id) ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", id); else { ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, list); ippAddBoolean(request, IPP_TAG_OPERATION, "my-jobs", 1); } 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... */ jobcount = 0; response = cupsDoRequest(http, request, "/"); if (cupsLastError() > IPP_STATUS_OK_CONFLICTING) { printf("get-jobs failed: %s\n", cupsLastErrorString()); ippDelete(response); return (1); } /* * Loop through the job list and display them... */ for (attr = response->attrs, rank = 1; attr; attr = attr->next) { /* * Skip leading attributes until we hit a job... */ while (attr && (attr->group_tag != IPP_TAG_JOB || !attr->name)) attr = attr->next; if (!attr) break; /* * Pull the needed attributes from this job... */ jobid = 0; jobsize = 0; jobstate = IPP_JSTATE_PENDING; jobname = "untitled"; jobuser = NULL; jobdest = NULL; jobcopies = 1; while (attr && attr->group_tag == IPP_TAG_JOB) { if (!strcmp(attr->name, "job-id") && attr->value_tag == IPP_TAG_INTEGER) jobid = attr->values[0].integer; if (!strcmp(attr->name, "job-k-octets") && attr->value_tag == IPP_TAG_INTEGER) jobsize = attr->values[0].integer; if (!strcmp(attr->name, "job-state") && attr->value_tag == IPP_TAG_ENUM) jobstate = (ipp_jstate_t)attr->values[0].integer; if (!strcmp(attr->name, "job-printer-uri") && attr->value_tag == IPP_TAG_URI) if ((jobdest = strrchr(attr->values[0].string.text, '/')) != NULL) jobdest ++; if (!strcmp(attr->name, "job-originating-user-name") && attr->value_tag == IPP_TAG_NAME) jobuser = attr->values[0].string.text; if (!strcmp(attr->name, "job-name") && attr->value_tag == IPP_TAG_NAME) jobname = attr->values[0].string.text; if (!strcmp(attr->name, "copies") && attr->value_tag == IPP_TAG_INTEGER) jobcopies = attr->values[0].integer; attr = attr->next; } /* * See if we have everything needed... */ if (!jobdest || !jobid) { if (!attr) break; else continue; } if (!longstatus && jobcount == 0) puts("Rank Owner Job File(s) Total Size"); jobcount ++; /* * Display the job... */ if (jobstate == IPP_JSTATE_PROCESSING) strlcpy(rankstr, "active", sizeof(rankstr)); else { snprintf(rankstr, sizeof(rankstr), "%d%s", rank, ranks[rank % 10]); rank ++; } if (longstatus) { puts(""); if (jobcopies > 1) snprintf(namestr, sizeof(namestr), "%d copies of %s", jobcopies, jobname); else strlcpy(namestr, jobname, sizeof(namestr)); printf("%s: %-33.33s [job %d localhost]\n", jobuser, rankstr, jobid); printf(" %-39.39s %.0f bytes\n", namestr, 1024.0 * jobsize); } else printf("%-7s %-7.7s %-7d %-31.31s %.0f bytes\n", rankstr, jobuser, jobid, jobname, 1024.0 * jobsize); if (!attr) break; } ippDelete(response); if (jobcount == 0) puts("no entries"); httpClose(http); return (0); } /* * 'smart_gets()' - Get a line of text, removing the trailing CR and/or LF. */ static char * /* O - Line read or NULL */ smart_gets(char *s, /* I - Pointer to line buffer */ int len, /* I - Size of line buffer */ FILE *fp) /* I - File to read from */ { char *ptr, /* Pointer into line */ *end; /* End of line */ int ch; /* Character from file */ /* * Read the line; unlike fgets(), we read the entire line but dump * characters that go past the end of the buffer. Also, we accept * CR, LF, or CR LF for the line endings to be "safe", although * RFC 1179 specifically says "just use LF". */ ptr = s; end = s + len - 1; while ((ch = getc(fp)) != EOF) { if (ch == '\n') break; else if (ch == '\r') { /* * See if a LF follows... */ ch = getc(fp); if (ch != '\n') ungetc(ch, fp); break; } else if (ptr < end) *ptr++ = (char)ch; } *ptr = '\0'; if (ch == EOF && ptr == s) return (NULL); else return (s); } /* * 'smart_strlcpy()' - Copy a string and convert from ISO-8859-1 to UTF-8 as needed. */ static void smart_strlcpy(char *dst, /* I - Output buffer */ const char *src, /* I - Input string */ size_t dstsize) /* I - Size of output buffer */ { const unsigned char *srcptr; /* Pointer into input string */ unsigned char *dstptr, /* Pointer into output buffer */ *dstend; /* End of output buffer */ int saw_8859 = 0; /* Saw an extended character that was not UTF-8? */ for (srcptr = (unsigned char *)src, dstptr = (unsigned char *)dst, dstend = dstptr + dstsize - 1; *srcptr;) { if (*srcptr < 0x80) *dstptr++ = *srcptr++; /* ASCII */ else if (saw_8859) { /* * Map ISO-8859-1 (most likely character set for legacy LPD clients) to * UTF-8... */ if (dstptr > (dstend - 2)) break; *dstptr++ = 0xc0 | (*srcptr >> 6); *dstptr++ = 0x80 | (*srcptr++ & 0x3f); } else if ((*srcptr & 0xe0) == 0xc0 && (srcptr[1] & 0xc0) == 0x80) { /* * 2-byte UTF-8 sequence... */ if (dstptr > (dstend - 2)) break; *dstptr++ = *srcptr++; *dstptr++ = *srcptr++; } else if ((*srcptr & 0xf0) == 0xe0 && (srcptr[1] & 0xc0) == 0x80 && (srcptr[2] & 0xc0) == 0x80) { /* * 3-byte UTF-8 sequence... */ if (dstptr > (dstend - 3)) break; *dstptr++ = *srcptr++; *dstptr++ = *srcptr++; *dstptr++ = *srcptr++; } else if ((*srcptr & 0xf8) == 0xf0 && (srcptr[1] & 0xc0) == 0x80 && (srcptr[2] & 0xc0) == 0x80 && (srcptr[3] & 0xc0) == 0x80) { /* * 4-byte UTF-8 sequence... */ if (dstptr > (dstend - 4)) break; *dstptr++ = *srcptr++; *dstptr++ = *srcptr++; *dstptr++ = *srcptr++; *dstptr++ = *srcptr++; } else { /* * Bad UTF-8 sequence, this must be an ISO-8859-1 string... */ saw_8859 = 1; if (dstptr > (dstend - 2)) break; *dstptr++ = 0xc0 | (*srcptr >> 6); *dstptr++ = 0x80 | (*srcptr++ & 0x3f); } } *dstptr = '\0'; } cups-2.2.7/scheduler/cups-lpd.xinetd.in000664 000765 000024 00000000357 13255074424 020507 0ustar00msweetstaff000000 000000 service printer { disable = yes socket_type = stream protocol = tcp wait = no user = @CUPS_USER@ group = @CUPS_GROUP@ passenv = server = @CUPS_SERVERBIN@/daemon/cups-lpd server_args = -o document-format=application/octet-stream } cups-2.2.7/scheduler/cups.sh.in000664 000765 000024 00000006756 13255074424 017062 0ustar00msweetstaff000000 000000 #!/bin/sh # # Startup/shutdown script for CUPS. # # Copyright 2007-2013 by Apple Inc. # Copyright 1997-2007 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # #### OS-Dependent Information # # Linux chkconfig stuff: # # chkconfig: 235 99 00 # description: Startup/shutdown script for CUPS. # # # NetBSD 1.5+ rcorder script lines. The format of the following two # lines is very strict -- please don't add additional spaces! # # PROVIDE: cups # REQUIRE: DAEMON # #### OS-Dependent Configuration case "`uname`" in *BSD*) IS_ON=: ECHO=echo ECHO_OK=: ECHO_ERROR=: ;; Darwin*) . /etc/rc.common if test "${CUPS:=-YES-}" = "-NO-"; then exit 0 fi IS_ON=: ECHO=ConsoleMessage ECHO_OK=: ECHO_ERROR=: ;; Linux*) IS_ON=/bin/true if test -f /etc/init.d/functions; then . /etc/init.d/functions ECHO=echo ECHO_OK="echo_success" ECHO_ERROR="echo_failure" else ECHO=echo ECHO_OK=: ECHO_ERROR=: fi ;; *) IS_ON=/bin/true ECHO=echo ECHO_OK=: ECHO_ERROR=: ;; esac #### OS-Independent Stuff # # Set the timezone, if possible... This allows the scheduler and # all child processes to know the local timezone when reporting # dates and times to the user. If no timezone information is # found, then Greenwich Mean Time (GMT) will probably be used. # for file in /etc/TIMEZONE /etc/rc.config /etc/sysconfig/clock; do if test -f $file; then . $file fi done if test "x$ZONE" != x; then TZ="$ZONE" fi if test "x$TIMEZONE" != x; then TZ="$TIMEZONE" fi if test "x$TZ" != x; then export TZ fi # # Don't use TMPDIR environment variable from init script, as that can # cause cupsd to set TempDir to a user's temporary directory instead # of the default... # unset TMPDIR # # Make sure we have the standard program directories in the path # since some operating systems don't provide a standard path on boot-up... # if test "x$PATH" = x; then PATH="/bin:/usr/bin:/sbin:/usr/sbin" else PATH="/bin:/usr/bin:/sbin:/usr/sbin:$PATH" fi export PATH # # See if the CUPS server (cupsd) is running... # case "`uname`" in SunOS*) pid=`ps -e | nawk '{if (match($4, ".*/cupsd$") || $4 == "cupsd") print $1}'` ;; Linux* | *BSD* | Darwin*) pid=`ps ax | awk '{if (match($5, ".*/cupsd$") || $5 == "cupsd") print $1}'` ;; *) pid="" ;; esac # # Start or stop the CUPS server based upon the first argument to the script. # case $1 in start | restart | reload) if $IS_ON cups; then if test -x /sbin/portrelease; then /sbin/portrelease cups fi if test "$pid" != ""; then kill -HUP $pid else prefix=@prefix@ exec_prefix=@exec_prefix@ @sbindir@/cupsd if test $? != 0; then $ECHO_FAIL $ECHO "cups: unable to $1 scheduler." exit 1 fi fi $ECHO_OK $ECHO "cups: ${1}ed scheduler." fi ;; stop) if test "$pid" != ""; then kill $pid $ECHO_OK $ECHO "cups: stopped scheduler." fi ;; status) if test "$pid" != ""; then echo "cups: scheduler is running." else echo "cups: scheduler is not running." fi ;; *) echo "Usage: cups {reload|restart|start|status|stop}" exit 1 ;; esac # # Exit with no errors. # exit 0 cups-2.2.7/scheduler/cups.xml.in000664 000765 000024 00000013507 13255074424 017240 0ustar00msweetstaff000000 000000 cups-2.2.7/scheduler/cupsd.h000664 000765 000024 00000013127 13255074424 016424 0ustar00msweetstaff000000 000000 /* * Main header file for the CUPS scheduler. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers. */ #include #include #include #include #include #include #include #include #include #include #include #include #ifdef WIN32 # include #else # include #endif /* WIN32 */ #include "mime.h" #if defined(HAVE_CDSASSL) # include #endif /* HAVE_CDSASSL */ /* * Some OS's don't have hstrerror(), most notably Solaris... */ #ifndef HAVE_HSTRERROR # ifdef hstrerror # undef hstrerror # endif /* hstrerror */ # define hstrerror cups_hstrerror extern const char *cups_hstrerror(int); #endif /* !HAVE_HSTRERROR */ /* * Common constants. */ #ifndef FALSE # define FALSE 0 # define TRUE (!FALSE) #endif /* !FALSE */ /* * Implementation limits... */ #define MAX_ENV 100 /* Maximum number of environment strings */ #define MAX_USERPASS 33 /* Maximum size of username/password */ #define MAX_FILTERS 20 /* Maximum number of filters */ #define MAX_SYSTEM_GROUPS 32 /* Maximum number of system groups */ /* * Defaults... */ #define DEFAULT_HISTORY INT_MAX /* Preserve job history? */ #define DEFAULT_FILES 86400 /* Preserve job files? */ #define DEFAULT_TIMEOUT 300 /* Timeout during requests/updates */ #define DEFAULT_KEEPALIVE 30 /* Timeout between requests */ /* * Global variable macros... */ #ifdef _MAIN_C_ # define VAR # define VALUE(x) =x # define VALUE2(x,y) ={x,y} #else # define VAR extern # define VALUE(x) # define VALUE2(x,y) #endif /* _MAIN_C */ /* * Other stuff for the scheduler... */ #include "sysman.h" #include "statbuf.h" #include "cert.h" #include "auth.h" #include "client.h" #include "policy.h" #include "printers.h" #include "classes.h" #include "job.h" #include "colorman.h" #include "conf.h" #include "banners.h" #include "dirsvc.h" #include "network.h" #include "subscriptions.h" /* * Reload types... */ #define RELOAD_NONE 0 /* No reload needed */ #define RELOAD_ALL 1 /* Reload everything */ #define RELOAD_CUPSD 2 /* Reload only cupsd.conf */ /* * Select callback function type... */ typedef void (*cupsd_selfunc_t)(void *data); /* * Globals... */ VAR int TestConfigFile VALUE(0); /* Test the cupsd.conf file? */ VAR int MaxFDs VALUE(0); /* Maximum number of files */ VAR time_t ReloadTime VALUE(0); /* Time of reload request... */ VAR int NeedReload VALUE(RELOAD_ALL), /* Need to load configuration? */ DoingShutdown VALUE(0); /* Shutting down the scheduler? */ VAR void *DefaultProfile VALUE(0); /* Default security profile */ #ifdef HAVE_ONDEMAND VAR int OnDemand VALUE(0); /* Launched on demand */ #endif /* HAVE_ONDEMAND */ /* * Prototypes... */ /* env.c */ extern void cupsdInitEnv(void); extern int cupsdLoadEnv(char *envp[], int envmax); extern void cupsdSetEnv(const char *name, const char *value); extern void cupsdSetEnvf(const char *name, const char *value, ...) __attribute__ ((__format__ (__printf__, 2, 3))); extern void cupsdUpdateEnv(void); /* file.c */ extern void cupsdCleanFiles(const char *path, const char *pattern); extern int cupsdCloseCreatedConfFile(cups_file_t *fp, const char *filename); extern void cupsdClosePipe(int *fds); extern cups_file_t *cupsdCreateConfFile(const char *filename, mode_t mode); extern cups_file_t *cupsdOpenConfFile(const char *filename); extern int cupsdOpenPipe(int *fds); extern int cupsdRemoveFile(const char *filename); extern int cupsdUnlinkOrRemoveFile(const char *filename); /* main.c */ extern int cupsdAddString(cups_array_t **a, const char *s); extern void cupsdCheckProcess(void); extern void cupsdClearString(char **s); extern void cupsdFreeStrings(cups_array_t **a); extern void cupsdHoldSignals(void); extern char *cupsdMakeUUID(const char *name, int number, char *buffer, size_t bufsize); extern void cupsdReleaseSignals(void); extern void cupsdSetString(char **s, const char *v); extern void cupsdSetStringf(char **s, const char *f, ...) __attribute__ ((__format__ (__printf__, 2, 3))); /* process.c */ extern void *cupsdCreateProfile(int job_id, int allow_networking); extern void cupsdDestroyProfile(void *profile); extern int cupsdEndProcess(int pid, int force); extern const char *cupsdFinishProcess(int pid, char *name, size_t namelen, int *job_id); extern int cupsdStartProcess(const char *command, char *argv[], char *envp[], int infd, int outfd, int errfd, int backfd, int sidefd, int root, void *profile, cupsd_job_t *job, int *pid); /* select.c */ extern int cupsdAddSelect(int fd, cupsd_selfunc_t read_cb, cupsd_selfunc_t write_cb, void *data); extern int cupsdDoSelect(long timeout); #ifdef CUPSD_IS_SELECTING extern int cupsdIsSelecting(int fd); #endif /* CUPSD_IS_SELECTING */ extern void cupsdRemoveSelect(int fd); extern void cupsdStartSelect(void); extern void cupsdStopSelect(void); /* server.c */ extern void cupsdStartServer(void); extern void cupsdStopServer(void); cups-2.2.7/scheduler/cupsfilter.c000664 000765 000024 00000112305 13255074424 017457 0ustar00msweetstaff000000 000000 /* * Filtering program for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include #include "mime.h" #include #include #include #include #include #if defined(__APPLE__) # include #endif /* __APPLE__ */ /* * Local globals... */ static char *DataDir = NULL;/* CUPS_DATADIR environment variable */ static char *FontPath = NULL; /* CUPS_FONTPATH environment variable */ static mime_filter_t GZIPFilter = /* gziptoany filter */ { NULL, /* Source type */ NULL, /* Destination type */ 0, /* Cost */ "gziptoany" /* Filter program to run */ }; static char *Path = NULL; /* PATH environment variable */ static char *ServerBin = NULL; /* CUPS_SERVERBIN environment variable */ static char *ServerRoot = NULL; /* CUPS_SERVERROOT environment variable */ static char *RIPCache = NULL; /* RIP_MAX_CACHE environment variable */ static char TempFile[1024] = ""; /* Temporary file */ /* * Local functions... */ static void add_printer_filter(const char *command, mime_t *mime, mime_type_t *printer_type, const char *filter); static mime_type_t *add_printer_filters(const char *command, mime_t *mime, const char *printer, const char *ppdfile, mime_type_t **prefilter_type); static void check_cb(void *context, _cups_fc_result_t result, const char *message); static int compare_pids(mime_filter_t *a, mime_filter_t *b); static char *escape_options(int num_options, cups_option_t *options); static int exec_filter(const char *filter, char **argv, char **envp, int infd, int outfd); static int exec_filters(mime_type_t *srctype, cups_array_t *filters, const char *infile, const char *outfile, const char *ppdfile, const char *printer, const char *user, const char *title, int num_options, cups_option_t *options); static void get_job_file(const char *job); static int open_pipe(int *fds); static int read_cups_files_conf(const char *filename); static void set_string(char **s, const char *val); static void sighandler(int sig); static void usage(const char *opt) __attribute__((noreturn)); /* * 'main()' - Main entry for the test program. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i, /* Looping vars */ list_filters = 0; /* Just list the filters? */ const char *command, /* Command name */ *opt, /* Current option */ *printer; /* Printer name */ mime_type_t *printer_type, /* Printer MIME type */ *prefilter_type; /* Printer prefilter MIME type */ char *srctype, /* Source type */ *dsttype, /* Destination type */ super[MIME_MAX_SUPER], /* Super-type name */ type[MIME_MAX_TYPE]; /* Type name */ int compression; /* Compression of file */ int cost; /* Cost of filters */ mime_t *mime; /* MIME database */ char mimedir[1024]; /* MIME directory */ char *infile, /* File to filter */ *outfile; /* File to create */ char cupsfilesconf[1024]; /* cups-files.conf file */ const char *server_root; /* CUPS_SERVERROOT environment variable */ mime_type_t *src, /* Source type */ *dst; /* Destination type */ cups_array_t *filters; /* Filters for the file */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ const char *ppdfile; /* PPD file */ const char *title, /* Title string */ *user; /* Username */ int all_filters, /* Use all filters */ removeppd, /* Remove PPD file */ removeinfile; /* Remove input file */ int status; /* Execution status */ /* * Setup defaults... */ if ((command = strrchr(argv[0], '/')) != NULL) command ++; else command = argv[0]; printer = !strcmp(command, "convert") ? "tofile" : "cupsfilter"; mime = NULL; srctype = NULL; compression = 0; dsttype = "application/pdf"; infile = NULL; outfile = NULL; num_options = 0; options = NULL; ppdfile = NULL; title = NULL; user = cupsUser(); all_filters = 0; removeppd = 0; removeinfile = 0; if ((server_root = getenv("CUPS_SERVERROOT")) == NULL) server_root = CUPS_SERVERROOT; snprintf(cupsfilesconf, sizeof(cupsfilesconf), "%s/cups-files.conf", server_root); /* * Process command-line arguments... */ _cupsSetLocale(argv); for (i = 1; i < argc; i ++) { if (argv[i][0] == '-') { if (!strcmp(argv[i], "--list-filters")) { list_filters = 1; } else if (!strcmp(argv[i], "--")) { i ++; if (i < argc && !infile) infile = argv[i]; else usage(NULL); } else { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'a' : /* Specify option... */ i ++; if (i < argc) num_options = cupsParseOptions(argv[i], num_options, &options); else usage(opt); break; case 'c' : /* Specify cups-files.conf file location... */ i ++; if (i < argc) { if (!strcmp(command, "convert")) num_options = cupsAddOption("copies", argv[i], num_options, &options); else strlcpy(cupsfilesconf, argv[i], sizeof(cupsfilesconf)); } else usage(opt); break; case 'd' : /* Specify the real printer name */ i ++; if (i < argc) printer = argv[i]; else usage(opt); break; case 'D' : /* Delete input file after conversion */ removeinfile = 1; break; case 'e' : /* Use every filter from the PPD file */ all_filters = 1; break; case 'f' : /* Specify input file... */ i ++; if (i < argc && !infile) infile = argv[i]; else usage(opt); break; case 'i' : /* Specify source MIME type... */ i ++; if (i < argc) { if (sscanf(argv[i], "%15[^/]/%255s", super, type) != 2) usage(opt); srctype = argv[i]; } else usage(opt); break; case 'j' : /* Get job file or specify destination MIME type... */ if (strcmp(command, "convert")) { i ++; if (i < argc) { get_job_file(argv[i]); infile = TempFile; } else usage(opt); break; } case 'm' : /* Specify destination MIME type... */ i ++; if (i < argc) { if (sscanf(argv[i], "%15[^/]/%255s", super, type) != 2) usage(opt); dsttype = argv[i]; } else usage(opt); break; case 'n' : /* Specify number of copies... */ i ++; if (i < argc) num_options = cupsAddOption("copies", argv[i], num_options, &options); else usage(opt); break; case 'o' : /* Specify option(s) or output filename */ i ++; if (i < argc) { if (!strcmp(command, "convert")) { if (outfile) usage(NULL); else outfile = argv[i]; } else num_options = cupsParseOptions(argv[i], num_options, &options); } else usage(opt); break; case 'p' : /* Specify PPD file... */ case 'P' : /* Specify PPD file... */ i ++; if (i < argc) ppdfile = argv[i]; else usage(opt); break; case 't' : /* Specify title... */ case 'J' : /* Specify title... */ i ++; if (i < argc) title = argv[i]; else usage(opt); break; case 'u' : /* Delete PPD file after conversion */ removeppd = 1; break; case 'U' : /* Specify username... */ i ++; if (i < argc) user = argv[i]; else usage(opt); break; default : /* Something we don't understand... */ usage(opt); break; } } } } else if (!infile) { if (strcmp(command, "convert")) infile = argv[i]; else usage(NULL); } else { _cupsLangPuts(stderr, _("cupsfilter: Only one filename can be specified.")); usage(NULL); } } if (!infile && !srctype) usage(NULL); if (!title) { if (!infile) title = "(stdin)"; else if ((title = strrchr(infile, '/')) != NULL) title ++; else title = infile; } /* * Load the cups-files.conf file and create the MIME database... */ if (read_cups_files_conf(cupsfilesconf)) return (1); snprintf(mimedir, sizeof(mimedir), "%s/mime", DataDir); mime = mimeLoadTypes(NULL, mimedir); mime = mimeLoadTypes(mime, ServerRoot); mime = mimeLoadFilters(mime, mimedir, Path); mime = mimeLoadFilters(mime, ServerRoot, Path); if (!mime) { _cupsLangPrintf(stderr, _("%s: Unable to read MIME database from \"%s\" or " "\"%s\"."), command, mimedir, ServerRoot); return (1); } prefilter_type = NULL; if (all_filters) printer_type = add_printer_filters(command, mime, printer, ppdfile, &prefilter_type); else printer_type = mimeType(mime, "application", "vnd.cups-postscript"); /* * Get the source and destination types... */ if (srctype) { /* sscanf return value already checked above */ sscanf(srctype, "%15[^/]/%255s", super, type); if ((src = mimeType(mime, super, type)) == NULL) { _cupsLangPrintf(stderr, _("%s: Unknown source MIME type %s/%s."), command, super, type); return (1); } } else if ((src = mimeFileType(mime, infile, infile, &compression)) == NULL) { _cupsLangPrintf(stderr, _("%s: Unable to determine MIME type of \"%s\"."), command, infile); return (1); } /* sscanf return value already checked above */ sscanf(dsttype, "%15[^/]/%255s", super, type); if (!_cups_strcasecmp(super, "printer")) dst = printer_type; else if ((dst = mimeType(mime, super, type)) == NULL) { _cupsLangPrintf(stderr, _("%s: Unknown destination MIME type %s/%s."), command, super, type); return (1); } /* * Figure out how to filter the file... */ if (src == dst) { /* * Special case - no filtering needed... */ filters = cupsArrayNew(NULL, NULL); cupsArrayAdd(filters, &GZIPFilter); GZIPFilter.src = src; GZIPFilter.dst = dst; } else if ((filters = mimeFilter(mime, src, dst, &cost)) == NULL) { _cupsLangPrintf(stderr, _("%s: No filter to convert from %s/%s to %s/%s."), command, src->super, src->type, dst->super, dst->type); return (1); } else if (compression) cupsArrayInsert(filters, &GZIPFilter); if (prefilter_type) { /* * Add pre-filters... */ mime_filter_t *filter, /* Current filter */ *prefilter; /* Current pre-filter */ cups_array_t *prefilters = cupsArrayNew(NULL, NULL); /* New filters array */ for (filter = (mime_filter_t *)cupsArrayFirst(filters); filter; filter = (mime_filter_t *)cupsArrayNext(filters)) { if ((prefilter = mimeFilterLookup(mime, filter->src, prefilter_type)) != NULL) cupsArrayAdd(prefilters, prefilter); cupsArrayAdd(prefilters, filter); } cupsArrayDelete(filters); filters = prefilters; } if (list_filters) { /* * List filters... */ mime_filter_t *filter; /* Current filter */ for (filter = (mime_filter_t *)cupsArrayFirst(filters); filter; filter = (mime_filter_t *)cupsArrayNext(filters)) if (strcmp(filter->filter, "-")) _cupsLangPuts(stdout, filter->filter); status = 0; } else { /* * Run filters... */ status = exec_filters(src, filters, infile, outfile, ppdfile, printer, user, title, num_options, options); } /* * Remove files as needed, then exit... */ if (TempFile[0]) unlink(TempFile); if (removeppd && ppdfile) unlink(ppdfile); if (removeinfile && infile) unlink(infile); return (status); } /* * 'add_printer_filter()' - Add a single filters from a PPD file. */ static void add_printer_filter( const char *command, /* I - Command name */ mime_t *mime, /* I - MIME database */ mime_type_t *filtertype, /* I - Printer or prefilter MIME type */ const char *filter) /* I - Filter to add */ { char super[MIME_MAX_SUPER], /* Super-type for filter */ type[MIME_MAX_TYPE], /* Type for filter */ dsuper[MIME_MAX_SUPER], /* Destination super-type for filter */ dtype[MIME_MAX_TYPE], /* Destination type for filter */ dest[MIME_MAX_SUPER + MIME_MAX_TYPE + 2], /* Destination super/type */ program[1024]; /* Program/filter name */ int cost; /* Cost of filter */ size_t maxsize = 0; /* Maximum supported file size */ mime_type_t *temptype, /* MIME type looping var */ *desttype; /* Destination MIME type */ mime_filter_t *filterptr; /* MIME filter */ /* * Parse the filter string; it should be in one of the following formats: * * source/type cost program * source/type cost maxsize(nnnn) program * source/type dest/type cost program * source/type dest/type cost maxsize(nnnn) program */ if (sscanf(filter, "%15[^/]/%255s%*[ \t]%15[^/]/%255s%d%*[ \t]%1023[^\n]", super, type, dsuper, dtype, &cost, program) == 6) { snprintf(dest, sizeof(dest), "%s/%s/%s", filtertype->type, dsuper, dtype); if ((desttype = mimeType(mime, "printer", dest)) == NULL) desttype = mimeAddType(mime, "printer", dest); } else { if (sscanf(filter, "%15[^/]/%255s%d%*[ \t]%1023[^\n]", super, type, &cost, program) == 4) { desttype = filtertype; } else { _cupsLangPrintf(stderr, _("%s: Invalid filter string \"%s\"."), command, filter); return; } } if (!strncmp(program, "maxsize(", 8)) { char *ptr; /* Pointer into maxsize(nnnn) program */ maxsize = (size_t)strtoll(program + 8, &ptr, 10); if (*ptr != ')') { printf("testmime: Invalid filter string \"%s\".\n", filter); return; } ptr ++; while (_cups_isspace(*ptr)) ptr ++; _cups_strcpy(program, ptr); } /* * See if the filter program exists; if not, stop the printer and flag * the error! */ if (strcmp(program, "-")) { char filename[1024]; /* Full path to program */ if (program[0] == '/') strlcpy(filename, program, sizeof(filename)); else snprintf(filename, sizeof(filename), "%s/filter/%s", ServerBin, program); if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_PROGRAM, !geteuid(), check_cb, (void *)command)) return; } /* * Add the filter to the MIME database, supporting wildcards as needed... */ for (temptype = mimeFirstType(mime); temptype; temptype = mimeNextType(mime)) if (((super[0] == '*' && _cups_strcasecmp(temptype->super, "printer")) || !_cups_strcasecmp(temptype->super, super)) && (type[0] == '*' || !_cups_strcasecmp(temptype->type, type))) { if (desttype != filtertype) { filterptr = mimeAddFilter(mime, temptype, desttype, cost, program); if (!mimeFilterLookup(mime, desttype, filtertype)) mimeAddFilter(mime, desttype, filtertype, 0, "-"); } else filterptr = mimeAddFilter(mime, temptype, filtertype, cost, program); if (filterptr) filterptr->maxsize = maxsize; } } /* * 'add_printer_filters()' - Add filters from a PPD file. */ static mime_type_t * /* O - Printer type or NULL on error */ add_printer_filters( const char *command, /* I - Command name */ mime_t *mime, /* I - MIME database */ const char *printer, /* I - Printer name */ const char *ppdfile, /* I - PPD file */ mime_type_t **prefilter_type) /* O - Prefilter type */ { ppd_file_t *ppd; /* PPD file data */ _ppd_cache_t *pc; /* Cache data for PPD */ const char *value; /* Filter definition value */ mime_type_t *printer_type; /* Printer filter type */ if ((ppd = _ppdOpenFile(ppdfile, _PPD_LOCALIZATION_NONE)) == NULL) { ppd_status_t status; /* PPD load status */ int linenum; /* Line number */ status = ppdLastError(&linenum); _cupsLangPrintf(stderr, _("%s: Unable to open PPD file: %s on line %d."), command, ppdErrorString(status), linenum); return (NULL); } pc = _ppdCacheCreateWithPPD(ppd); if (!pc) return (NULL); printer_type = mimeAddType(mime, "printer", printer); *prefilter_type = NULL; if (pc->filters) { for (value = (const char *)cupsArrayFirst(pc->filters); value; value = (const char *)cupsArrayNext(pc->filters)) add_printer_filter(command, mime, printer_type, value); } else { add_printer_filter(command, mime, printer_type, "application/vnd.cups-raw 0 -"); add_printer_filter(command, mime, printer_type, "application/vnd.cups-postscript 0 -"); } if (pc->prefilters) { *prefilter_type = mimeAddType(mime, "prefilter", printer); for (value = (const char *)cupsArrayFirst(pc->prefilters); value; value = (const char *)cupsArrayNext(pc->prefilters)) add_printer_filter(command, mime, *prefilter_type, value); } return (printer_type); } /* * 'check_cb()' - Callback function for _cupsFileCheck. */ static void check_cb(void *context, /* I - Context (command name) */ _cups_fc_result_t result, /* I - Result of check */ const char *message) /* I - Localized message */ { (void)result; _cupsLangPrintf(stderr, _("%s: %s"), (char *)context, message); } /* * 'compare_pids()' - Compare two filter PIDs... */ static int /* O - Result of comparison */ compare_pids(mime_filter_t *a, /* I - First filter */ mime_filter_t *b) /* I - Second filter */ { /* * Because we're particularly lazy, we store the process ID in the "cost" * variable... */ return (a->cost - b->cost); } /* * 'escape_options()' - Convert an options array to a string. */ static char * /* O - Option string */ escape_options( int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { int i; /* Looping var */ cups_option_t *option; /* Current option */ size_t bytes; /* Number of bytes needed */ char *s, /* Option string */ *sptr, /* Pointer into string */ *vptr; /* Pointer into value */ /* * Figure out the worst-case number of bytes we need for the option string. */ for (i = num_options, option = options, bytes = 1; i > 0; i --, option ++) bytes += 2 * (strlen(option->name) + strlen(option->value)) + 2; if ((s = malloc(bytes)) == NULL) return (NULL); /* * Copy the options to the string... */ for (i = num_options, option = options, sptr = s; i > 0; i --, option ++) { if (!strcmp(option->name, "copies")) continue; if (sptr > s) *sptr++ = ' '; strlcpy(sptr, option->name, bytes - (size_t)(sptr - s)); sptr += strlen(sptr); *sptr++ = '='; for (vptr = option->value; *vptr;) { if (strchr("\\ \t\n", *vptr)) *sptr++ = '\\'; *sptr++ = *vptr++; } } *sptr = '\0'; return (s); } /* * 'exec_filter()' - Execute a single filter. */ static int /* O - Process ID or -1 on error */ exec_filter(const char *filter, /* I - Filter to execute */ char **argv, /* I - Argument list */ char **envp, /* I - Environment list */ int infd, /* I - Stdin file descriptor */ int outfd) /* I - Stdout file descriptor */ { int pid, /* Process ID */ fd; /* Temporary file descriptor */ #if defined(__APPLE__) char processPath[1024], /* CFProcessPath environment variable */ linkpath[1024]; /* Link path for symlinks... */ int linkbytes; /* Bytes for link path */ /* * Add special voodoo magic for macOS - this allows macOS * programs to access their bundle resources properly... */ if ((linkbytes = readlink(filter, linkpath, sizeof(linkpath) - 1)) > 0) { /* * Yes, this is a symlink to the actual program, nul-terminate and * use it... */ linkpath[linkbytes] = '\0'; if (linkpath[0] == '/') snprintf(processPath, sizeof(processPath), "CFProcessPath=%s", linkpath); else snprintf(processPath, sizeof(processPath), "CFProcessPath=%s/%s", dirname((char *)filter), linkpath); } else snprintf(processPath, sizeof(processPath), "CFProcessPath=%s", filter); envp[0] = processPath; /* Replace string */ #endif /* __APPLE__ */ if ((pid = fork()) == 0) { /* * Child process goes here... * * Update stdin/stdout/stderr as needed... */ if (infd != 0) { if (infd < 0) infd = open("/dev/null", O_RDONLY); if (infd > 0) { dup2(infd, 0); close(infd); } } if (outfd != 1) { if (outfd < 0) outfd = open("/dev/null", O_WRONLY); if (outfd > 1) { dup2(outfd, 1); close(outfd); } } if ((fd = open("/dev/null", O_RDWR)) > 3) { dup2(fd, 3); close(fd); } fcntl(3, F_SETFL, O_NDELAY); if ((fd = open("/dev/null", O_RDWR)) > 4) { dup2(fd, 4); close(fd); } fcntl(4, F_SETFL, O_NDELAY); /* * Execute command... */ execve(filter, argv, envp); perror(filter); exit(errno); } return (pid); } /* * 'exec_filters()' - Execute filters for the given file and options. */ static int /* O - 0 on success, 1 on error */ exec_filters(mime_type_t *srctype, /* I - Source type */ cups_array_t *filters, /* I - Array of filters to run */ const char *infile, /* I - File to filter */ const char *outfile, /* I - File to create */ const char *ppdfile, /* I - PPD file, if any */ const char *printer, /* I - Printer name */ const char *user, /* I - Username */ const char *title, /* I - Job title */ int num_options, /* I - Number of filter options */ cups_option_t *options) /* I - Filter options */ { int i; /* Looping var */ const char *argv[8], /* Command-line arguments */ *envp[17], /* Environment variables */ *temp; /* Temporary string */ char *optstr, /* Filter options */ content_type[1024], /* CONTENT_TYPE */ cups_datadir[1024], /* CUPS_DATADIR */ cups_fontpath[1024], /* CUPS_FONTPATH */ cups_serverbin[1024], /* CUPS_SERVERBIN */ cups_serverroot[1024], /* CUPS_SERVERROOT */ final_content_type[1024] = "", /* FINAL_CONTENT_TYPE */ lang[1024], /* LANG */ path[1024], /* PATH */ ppd[1024], /* PPD */ printer_info[255], /* PRINTER_INFO env variable */ printer_location[255], /* PRINTER_LOCATION env variable */ printer_name[255], /* PRINTER env variable */ rip_max_cache[1024], /* RIP_MAX_CACHE */ userenv[1024], /* USER */ program[1024]; /* Program to run */ mime_filter_t *filter, /* Current filter */ *next; /* Next filter */ int current, /* Current filter */ filterfds[2][2], /* Pipes for filters */ pid, /* Process ID of filter */ status, /* Exit status */ retval; /* Return value */ cups_array_t *pids; /* Executed filters array */ mime_filter_t key; /* Search key for filters */ cups_lang_t *language; /* Current language */ cups_dest_t *dest; /* Destination information */ /* * Figure out the final content type... */ for (filter = (mime_filter_t *)cupsArrayLast(filters); filter && filter->dst; filter = (mime_filter_t *)cupsArrayPrev(filters)) if (strcmp(filter->dst->super, "printer")) break; if (filter && filter->dst) { const char *ptr; /* Pointer in type name */ if ((ptr = strchr(filter->dst->type, '/')) != NULL) snprintf(final_content_type, sizeof(final_content_type), "FINAL_CONTENT_TYPE=%s", ptr + 1); else snprintf(final_content_type, sizeof(final_content_type), "FINAL_CONTENT_TYPE=%s/%s", filter->dst->super, filter->dst->type); } /* * Remove NULL ("-") filters... */ for (filter = (mime_filter_t *)cupsArrayFirst(filters); filter; filter = (mime_filter_t *)cupsArrayNext(filters)) if (!strcmp(filter->filter, "-")) cupsArrayRemove(filters, filter); /* * Setup the filter environment and command-line... */ optstr = escape_options(num_options, options); snprintf(content_type, sizeof(content_type), "CONTENT_TYPE=%s/%s", srctype->super, srctype->type); snprintf(cups_datadir, sizeof(cups_datadir), "CUPS_DATADIR=%s", DataDir); snprintf(cups_fontpath, sizeof(cups_fontpath), "CUPS_FONTPATH=%s", FontPath); snprintf(cups_serverbin, sizeof(cups_serverbin), "CUPS_SERVERBIN=%s", ServerBin); snprintf(cups_serverroot, sizeof(cups_serverroot), "CUPS_SERVERROOT=%s", ServerRoot); language = cupsLangDefault(); snprintf(lang, sizeof(lang), "LANG=%s.UTF8", language->language); snprintf(path, sizeof(path), "PATH=%s", Path); if (ppdfile) snprintf(ppd, sizeof(ppd), "PPD=%s", ppdfile); else if ((temp = getenv("PPD")) != NULL) snprintf(ppd, sizeof(ppd), "PPD=%s", temp); else #ifdef __APPLE__ if (!access("/System/Library/Frameworks/ApplicationServices.framework/" "Versions/A/Frameworks/PrintCore.framework/Versions/A/" "Resources/English.lproj/Generic.ppd", 0)) strlcpy(ppd, "PPD=/System/Library/Frameworks/ApplicationServices.framework/" "Versions/A/Frameworks/PrintCore.framework/Versions/A/" "Resources/English.lproj/Generic.ppd", sizeof(ppd)); else strlcpy(ppd, "PPD=/System/Library/Frameworks/ApplicationServices.framework/" "Versions/A/Frameworks/PrintCore.framework/Versions/A/" "Resources/Generic.ppd", sizeof(ppd)); #else snprintf(ppd, sizeof(ppd), "PPD=%s/model/laserjet.ppd", DataDir); #endif /* __APPLE__ */ snprintf(rip_max_cache, sizeof(rip_max_cache), "RIP_MAX_CACHE=%s", RIPCache); snprintf(userenv, sizeof(userenv), "USER=%s", user); if (printer && (dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, printer, NULL)) != NULL) { if ((temp = cupsGetOption("printer-info", dest->num_options, dest->options)) != NULL) snprintf(printer_info, sizeof(printer_info), "PRINTER_INFO=%s", temp); else snprintf(printer_info, sizeof(printer_info), "PRINTER_INFO=%s", printer); if ((temp = cupsGetOption("printer-location", dest->num_options, dest->options)) != NULL) snprintf(printer_location, sizeof(printer_location), "PRINTER_LOCATION=%s", temp); else strlcpy(printer_location, "PRINTER_LOCATION=Unknown", sizeof(printer_location)); } else { snprintf(printer_info, sizeof(printer_info), "PRINTER_INFO=%s", printer ? printer : "Unknown"); strlcpy(printer_location, "PRINTER_LOCATION=Unknown", sizeof(printer_location)); } snprintf(printer_name, sizeof(printer_name), "PRINTER=%s", printer ? printer : "Unknown"); argv[0] = (char *)printer; argv[1] = "1"; argv[2] = user; argv[3] = title; argv[4] = cupsGetOption("copies", num_options, options); argv[5] = optstr; argv[6] = infile; argv[7] = NULL; if (!argv[4]) argv[4] = "1"; envp[0] = ""; envp[1] = content_type; envp[2] = cups_datadir; envp[3] = cups_fontpath; envp[4] = cups_serverbin; envp[5] = cups_serverroot; envp[6] = lang; envp[7] = path; envp[8] = ppd; envp[9] = printer_info; envp[10] = printer_location; envp[11] = printer_name; envp[12] = rip_max_cache; envp[13] = userenv; envp[14] = "CHARSET=utf-8"; if (final_content_type[0]) { envp[15] = final_content_type; envp[16] = NULL; } else envp[15] = NULL; for (i = 0; argv[i]; i ++) fprintf(stderr, "DEBUG: argv[%d]=\"%s\"\n", i, argv[i]); for (i = 0; envp[i]; i ++) fprintf(stderr, "DEBUG: envp[%d]=\"%s\"\n", i, envp[i]); /* * Execute all of the filters... */ pids = cupsArrayNew((cups_array_func_t)compare_pids, NULL); current = 0; filterfds[0][0] = -1; filterfds[0][1] = -1; filterfds[1][0] = -1; filterfds[1][1] = -1; if (!infile) filterfds[0][0] = 0; for (filter = (mime_filter_t *)cupsArrayFirst(filters); filter; filter = next, current = 1 - current) { next = (mime_filter_t *)cupsArrayNext(filters); if (filter->filter[0] == '/') strlcpy(program, filter->filter, sizeof(program)); else snprintf(program, sizeof(program), "%s/filter/%s", ServerBin, filter->filter); if (filterfds[!current][1] > 1) { close(filterfds[1 - current][0]); close(filterfds[1 - current][1]); filterfds[1 - current][0] = -1; filterfds[1 - current][0] = -1; } if (next) open_pipe(filterfds[1 - current]); else if (outfile) { filterfds[1 - current][1] = open(outfile, O_CREAT | O_TRUNC | O_WRONLY, 0666); if (filterfds[1 - current][1] < 0) fprintf(stderr, "ERROR: Unable to create \"%s\" - %s\n", outfile, strerror(errno)); } else filterfds[1 - current][1] = 1; pid = exec_filter(program, (char **)argv, (char **)envp, filterfds[current][0], filterfds[1 - current][1]); if (pid > 0) { fprintf(stderr, "INFO: %s (PID %d) started.\n", filter->filter, pid); filter->cost = pid; cupsArrayAdd(pids, filter); } else break; argv[6] = NULL; } /* * Close remaining pipes... */ if (filterfds[0][1] > 1) { close(filterfds[0][0]); close(filterfds[0][1]); } if (filterfds[1][1] > 1) { close(filterfds[1][0]); close(filterfds[1][1]); } /* * Wait for the children to exit... */ retval = 0; while (cupsArrayCount(pids) > 0) { if ((pid = wait(&status)) < 0) continue; key.cost = pid; if ((filter = (mime_filter_t *)cupsArrayFind(pids, &key)) != NULL) { cupsArrayRemove(pids, filter); if (status) { if (WIFEXITED(status)) fprintf(stderr, "ERROR: %s (PID %d) stopped with status %d\n", filter->filter, pid, WEXITSTATUS(status)); else fprintf(stderr, "ERROR: %s (PID %d) crashed on signal %d\n", filter->filter, pid, WTERMSIG(status)); retval = 1; } else fprintf(stderr, "INFO: %s (PID %d) exited with no errors.\n", filter->filter, pid); } } cupsArrayDelete(pids); return (retval); } /* * 'get_job_file()' - Get the specified job file. */ static void get_job_file(const char *job) /* I - Job ID */ { long jobid, /* Job ID */ docnum; /* Document number */ const char *jobptr; /* Pointer into job ID string */ char uri[1024]; /* job-uri */ http_t *http; /* Connection to server */ ipp_t *request; /* Request data */ int tempfd; /* Temporary file */ /* * Get the job ID and document number, if any... */ if ((jobptr = strrchr(job, '-')) != NULL) jobptr ++; else jobptr = job; jobid = strtol(jobptr, (char **)&jobptr, 10); if (*jobptr == ',') docnum = strtol(jobptr + 1, NULL, 10); else docnum = 1; if (jobid < 1 || jobid > INT_MAX) { _cupsLangPrintf(stderr, _("cupsfilter: Invalid job ID %d."), (int)jobid); exit(1); } if (docnum < 1 || docnum > INT_MAX) { _cupsLangPrintf(stderr, _("cupsfilter: Invalid document number %d."), (int)docnum); exit(1); } /* * Ask the server for the document file... */ if ((http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption())) == NULL) { _cupsLangPrintf(stderr, _("%s: Unable to connect to server."), "cupsfilter"); exit(1); } request = ippNewRequest(CUPS_GET_DOCUMENT); snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", (int)jobid); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "document-number", (int)docnum); if ((tempfd = cupsTempFd(TempFile, sizeof(TempFile))) == -1) { _cupsLangPrintError("ERROR", _("Unable to create temporary file")); httpClose(http); exit(1); } signal(SIGTERM, sighandler); ippDelete(cupsDoIORequest(http, request, "/", -1, tempfd)); close(tempfd); httpClose(http); if (cupsLastError() != IPP_OK) { _cupsLangPrintf(stderr, _("cupsfilter: Unable to get job file - %s"), cupsLastErrorString()); unlink(TempFile); exit(1); } } /* * 'open_pipe()' - Create a pipe which is closed on exec. */ static int /* O - 0 on success, -1 on error */ open_pipe(int *fds) /* O - Pipe file descriptors (2) */ { /* * Create the pipe... */ if (pipe(fds)) { fds[0] = -1; fds[1] = -1; return (-1); } /* * Set the "close on exec" flag on each end of the pipe... */ if (fcntl(fds[0], F_SETFD, fcntl(fds[0], F_GETFD) | FD_CLOEXEC)) { close(fds[0]); close(fds[1]); fds[0] = -1; fds[1] = -1; return (-1); } if (fcntl(fds[1], F_SETFD, fcntl(fds[1], F_GETFD) | FD_CLOEXEC)) { close(fds[0]); close(fds[1]); fds[0] = -1; fds[1] = -1; return (-1); } /* * Return 0 indicating success... */ return (0); } /* * 'read_cups_files_conf()' - Read the cups-files.conf file to get the filter settings. */ static int /* O - 0 on success, 1 on error */ read_cups_files_conf( const char *filename) /* I - File to read */ { cups_file_t *fp; /* cups-files.conf file */ const char *temp; /* Temporary string */ char line[1024], /* Line from file */ *ptr; /* Pointer into line */ int linenum; /* Current line number */ if ((temp = getenv("CUPS_DATADIR")) != NULL) set_string(&DataDir, temp); else set_string(&DataDir, CUPS_DATADIR); if ((temp = getenv("CUPS_FONTPATH")) != NULL) set_string(&FontPath, temp); else set_string(&FontPath, CUPS_FONTPATH); set_string(&RIPCache, "128m"); if ((temp = getenv("CUPS_SERVERBIN")) != NULL) set_string(&ServerBin, temp); else set_string(&ServerBin, CUPS_SERVERBIN); strlcpy(line, filename, sizeof(line)); if ((ptr = strrchr(line, '/')) != NULL) *ptr = '\0'; else getcwd(line, sizeof(line)); set_string(&ServerRoot, line); if ((fp = cupsFileOpen(filename, "r")) != NULL) { linenum = 0; while (cupsFileGetConf(fp, line, sizeof(line), &ptr, &linenum)) { if (!_cups_strcasecmp(line, "DataDir")) set_string(&DataDir, ptr); else if (!_cups_strcasecmp(line, "FontPath")) set_string(&FontPath, ptr); else if (!_cups_strcasecmp(line, "RIPCache")) set_string(&RIPCache, ptr); else if (!_cups_strcasecmp(line, "ServerBin")) set_string(&ServerBin, ptr); else if (!_cups_strcasecmp(line, "ServerRoot")) set_string(&ServerRoot, ptr); } cupsFileClose(fp); } snprintf(line, sizeof(line), "%s/filter:" CUPS_BINDIR ":" CUPS_SBINDIR ":/bin:/usr/bin", ServerBin); set_string(&Path, line); return (0); } /* * 'set_string()' - Copy and set a string. */ static void set_string(char **s, /* O - Copy of string */ const char *val) /* I - String to copy */ { if (*s) free(*s); *s = strdup(val); } /* * 'sighandler()' - Signal catcher for when we print from stdin... */ static void sighandler(int s) /* I - Signal number */ { /* * Remove the temporary file we're using to print a job file... */ if (TempFile[0]) unlink(TempFile); /* * Exit... */ exit(s); } /* * 'usage()' - Show program usage... */ static void usage(const char *opt) /* I - Incorrect option, if any */ { if (opt) _cupsLangPrintf(stderr, _("%s: Unknown option \"%c\"."), "cupsfilter", *opt); _cupsLangPuts(stdout, _("Usage: cupsfilter [ options ] [ -- ] filename")); _cupsLangPuts(stdout, _("Options:")); _cupsLangPuts(stdout, _(" --list-filters List filters that will be used.")); _cupsLangPuts(stdout, _(" -D Remove the input file when finished.")); _cupsLangPuts(stdout, _(" -P filename.ppd Set PPD file.")); _cupsLangPuts(stdout, _(" -U username Specify username.")); _cupsLangPuts(stdout, _(" -c cups-files.conf Set cups-files.conf file to use.")); _cupsLangPuts(stdout, _(" -d printer Use the named printer.")); _cupsLangPuts(stdout, _(" -e Use every filter from the PPD file.")); _cupsLangPuts(stdout, _(" -i mime/type Set input MIME type (otherwise auto-typed).")); _cupsLangPuts(stdout, _(" -j job-id[,N] Filter file N from the specified job (default is file 1).")); _cupsLangPuts(stdout, _(" -m mime/type Set output MIME type (otherwise application/pdf).")); _cupsLangPuts(stdout, _(" -n copies Set number of copies.")); _cupsLangPuts(stdout, _(" -o name=value Set option(s).")); _cupsLangPuts(stdout, _(" -p filename.ppd Set PPD file.")); _cupsLangPuts(stdout, _(" -t title Set title.")); _cupsLangPuts(stdout, _(" -u Remove the PPD file when finished.")); exit(1); } cups-2.2.7/scheduler/Dependencies000664 000765 000024 00000051666 13255074424 017460 0ustar00msweetstaff000000 000000 auth.o: auth.c cupsd.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/file-private.h ../cups/ppd-private.h \ ../cups/ppd.h ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h \ client.h policy.h printers.h classes.h job.h colorman.h conf.h \ banners.h dirsvc.h network.h subscriptions.h banners.o: banners.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h ../cups/dir.h cert.o: cert.c cupsd.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/file-private.h ../cups/ppd-private.h \ ../cups/ppd.h ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h \ client.h policy.h printers.h classes.h job.h colorman.h conf.h \ banners.h dirsvc.h network.h subscriptions.h classes.o: classes.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h client.o: client.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h colorman.o: colorman.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h conf.o: conf.c cupsd.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/file-private.h ../cups/ppd-private.h \ ../cups/ppd.h ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h \ client.h policy.h printers.h classes.h job.h colorman.h conf.h \ banners.h dirsvc.h network.h subscriptions.h dirsvc.o: dirsvc.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h env.o: env.c cupsd.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/file-private.h ../cups/ppd-private.h \ ../cups/ppd.h ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h \ client.h policy.h printers.h classes.h job.h colorman.h conf.h \ banners.h dirsvc.h network.h subscriptions.h file.o: file.c cupsd.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/file-private.h ../cups/ppd-private.h \ ../cups/ppd.h ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h \ client.h policy.h printers.h classes.h job.h colorman.h conf.h \ banners.h dirsvc.h network.h subscriptions.h ../cups/dir.h main.o: main.c cupsd.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/file-private.h ../cups/ppd-private.h \ ../cups/ppd.h ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h \ client.h policy.h printers.h classes.h job.h colorman.h conf.h \ banners.h dirsvc.h network.h subscriptions.h ipp.o: ipp.c cupsd.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/file-private.h ../cups/ppd-private.h \ ../cups/ppd.h ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h \ client.h policy.h printers.h classes.h job.h colorman.h conf.h \ banners.h dirsvc.h network.h subscriptions.h listen.o: listen.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h job.o: job.c cupsd.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/file-private.h ../cups/ppd-private.h \ ../cups/ppd.h ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h \ client.h policy.h printers.h classes.h job.h colorman.h conf.h \ banners.h dirsvc.h network.h subscriptions.h ../cups/backend.h \ ../cups/dir.h log.o: log.c cupsd.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/file-private.h ../cups/ppd-private.h \ ../cups/ppd.h ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h \ client.h policy.h printers.h classes.h job.h colorman.h conf.h \ banners.h dirsvc.h network.h subscriptions.h network.o: network.c ../cups/http-private.h ../config.h \ ../cups/language.h ../cups/array.h ../cups/versioning.h ../cups/http.h \ ../cups/md5-private.h ../cups/ipp-private.h ../cups/ipp.h cupsd.h \ ../cups/cups-private.h ../cups/string-private.h \ ../cups/debug-private.h ../cups/array-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h policy.o: policy.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h printers.o: printers.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h ../cups/dir.h process.o: process.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h quotas.o: quotas.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h select.o: select.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h server.o: server.c ../cups/http-private.h ../config.h ../cups/language.h \ ../cups/array.h ../cups/versioning.h ../cups/http.h \ ../cups/md5-private.h ../cups/ipp-private.h ../cups/ipp.h cupsd.h \ ../cups/cups-private.h ../cups/string-private.h \ ../cups/debug-private.h ../cups/array-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h statbuf.o: statbuf.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h subscriptions.o: subscriptions.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h sysman.o: sysman.c cupsd.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h sysman.h statbuf.h cert.h auth.h client.h \ policy.h printers.h classes.h job.h colorman.h conf.h banners.h \ dirsvc.h network.h subscriptions.h filter.o: filter.c ../cups/string-private.h ../config.h \ ../cups/debug-private.h ../cups/versioning.h mime.h ../cups/array.h \ ../cups/ipp.h ../cups/http.h ../cups/file.h mime.o: mime.c ../cups/string-private.h ../config.h \ ../cups/debug-private.h ../cups/versioning.h ../cups/dir.h \ mime-private.h mime.h ../cups/array.h ../cups/ipp.h ../cups/http.h \ ../cups/file.h type.o: type.c ../cups/string-private.h ../config.h \ ../cups/debug-private.h ../cups/versioning.h mime.h ../cups/array.h \ ../cups/ipp.h ../cups/http.h ../cups/file.h cupsfilter.o: cupsfilter.c ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/file-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h mime.h cups-deviced.o: cups-deviced.c util.h ../cups/array-private.h \ ../cups/array.h ../cups/versioning.h ../cups/file-private.h \ ../cups/cups-private.h ../cups/string-private.h ../config.h \ ../cups/debug-private.h ../cups/ipp-private.h ../cups/ipp.h \ ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/dir.h cups-exec.o: cups-exec.c ../cups/string-private.h ../config.h \ ../cups/file.h ../cups/versioning.h cups-lpd.o: cups-lpd.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h testlpd.o: testlpd.c ../cups/cups.h ../cups/file.h ../cups/versioning.h \ ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h \ ../cups/pwg.h ../cups/string-private.h ../config.h testmime.o: testmime.c ../cups/string-private.h ../config.h ../cups/dir.h \ ../cups/versioning.h ../cups/debug-private.h ../cups/ppd-private.h \ ../cups/cups.h ../cups/file.h ../cups/ipp.h ../cups/http.h \ ../cups/array.h ../cups/language.h ../cups/pwg.h ../cups/ppd.h \ ../cups/raster.h ../cups/pwg-private.h mime.h testspeed.o: testspeed.c ../cups/string-private.h ../config.h \ ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.h \ ../cups/http.h ../cups/array.h ../cups/language.h ../cups/pwg.h \ ../cups/debug-private.h testsub.o: testsub.c ../cups/cups.h ../cups/file.h ../cups/versioning.h \ ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h \ ../cups/pwg.h ../cups/debug-private.h ../cups/string-private.h \ ../config.h ../cups/ipp-private.h util.o: util.c util.h ../cups/array-private.h ../cups/array.h \ ../cups/versioning.h ../cups/file-private.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h cups-driverd.o: cups-driverd.cxx util.h ../cups/array-private.h \ ../cups/array.h ../cups/versioning.h ../cups/file-private.h \ ../cups/cups-private.h ../cups/string-private.h ../config.h \ ../cups/debug-private.h ../cups/ipp-private.h ../cups/ipp.h \ ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/dir.h ../cups/ppd-private.h \ ../cups/ppd.h ../cups/raster.h ../ppdc/ppdc.h cups-2.2.7/scheduler/dirsvc.c000664 000765 000024 00000133224 13255074424 016574 0ustar00msweetstaff000000 000000 /* * Directory services routines for the CUPS scheduler. * * Copyright © 2007-2018 by Apple Inc. * Copyright © 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #include #if defined(HAVE_DNSSD) && defined(__APPLE__) # include # include # include #endif /* HAVE_DNSSD && __APPLE__ */ /* * Local globals... */ #ifdef HAVE_AVAHI static int avahi_running = 0; #endif /* HAVE_AVAHI */ /* * Local functions... */ #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) static char *get_auth_info_required(cupsd_printer_t *p, char *buffer, size_t bufsize); #endif /* HAVE_DNSSD || HAVE_AVAHI */ #ifdef __APPLE__ static int get_hostconfig(const char *name); #endif /* __APPLE__ */ static void update_lpd(int onoff); static void update_smb(int onoff); #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) # ifdef __APPLE__ static void dnssdAddAlias(const void *key, const void *value, void *context); # endif /* __APPLE__ */ static cupsd_txt_t dnssdBuildTxtRecord(cupsd_printer_t *p, int for_lpd); # ifdef HAVE_AVAHI static void dnssdClientCallback(AvahiClient *c, AvahiClientState state, void *userdata); # endif /* HAVE_AVAHI */ static void dnssdDeregisterAllPrinters(int from_callback); static void dnssdDeregisterInstance(cupsd_srv_t *srv, int from_callback); static void dnssdDeregisterPrinter(cupsd_printer_t *p, int clear_name, int from_callback); static const char *dnssdErrorString(int error); static void dnssdFreeTxtRecord(cupsd_txt_t *txt); static void dnssdRegisterAllPrinters(int from_callback); # ifdef HAVE_DNSSD static void dnssdRegisterCallback(DNSServiceRef sdRef, DNSServiceFlags flags, DNSServiceErrorType errorCode, const char *name, const char *regtype, const char *domain, void *context); # else static void dnssdRegisterCallback(AvahiEntryGroup *p, AvahiEntryGroupState state, void *context); # endif /* HAVE_DNSSD */ static int dnssdRegisterInstance(cupsd_srv_t *srv, cupsd_printer_t *p, char *name, const char *type, const char *subtypes, int port, cupsd_txt_t *txt, int commit, int from_callback); static void dnssdRegisterPrinter(cupsd_printer_t *p, int from_callback); static void dnssdStop(void); # ifdef HAVE_DNSSD static void dnssdUpdate(void); # endif /* HAVE_DNSSD */ static void dnssdUpdateDNSSDName(int from_callback); #endif /* HAVE_DNSSD || HAVE_AVAHI */ /* * 'cupsdDeregisterPrinter()' - Stop sending broadcast information for a * local printer and remove any pending * references to remote printers. */ void cupsdDeregisterPrinter( cupsd_printer_t *p, /* I - Printer to register */ int removeit) /* I - Printer being permanently removed */ { /* * Only deregister if browsing is enabled and it's a local printer... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdDeregisterPrinter(p=%p(%s), removeit=%d)", p, p->name, removeit); if (!Browsing || !p->shared || (p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_SCANNER))) return; /* * Announce the deletion... */ #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) if (removeit && (BrowseLocalProtocols & BROWSE_DNSSD) && DNSSDMaster) dnssdDeregisterPrinter(p, 1, 0); #endif /* HAVE_DNSSD || HAVE_AVAHI */ } /* * 'cupsdRegisterPrinter()' - Start sending broadcast information for a * printer or update the broadcast contents. */ void cupsdRegisterPrinter(cupsd_printer_t *p)/* I - Printer */ { cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdRegisterPrinter(p=%p(%s))", p, p->name); if (!Browsing || !BrowseLocalProtocols || (p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_SCANNER))) return; #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) if ((BrowseLocalProtocols & BROWSE_DNSSD) && DNSSDMaster) dnssdRegisterPrinter(p, 0); #endif /* HAVE_DNSSD || HAVE_AVAHI */ } /* * 'cupsdStartBrowsing()' - Start sending and receiving broadcast information. */ void cupsdStartBrowsing(void) { if (!Browsing || !BrowseLocalProtocols) return; #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) if (BrowseLocalProtocols & BROWSE_DNSSD) { # ifdef HAVE_DNSSD DNSServiceErrorType error; /* Error from service creation */ /* * First create a "master" connection for all registrations... */ if ((error = DNSServiceCreateConnection(&DNSSDMaster)) != kDNSServiceErr_NoError) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create master DNS-SD reference: %d", error); if (FatalErrors & CUPSD_FATAL_BROWSE) cupsdEndProcess(getpid(), 0); } else { /* * Add the master connection to the select list... */ int fd = DNSServiceRefSockFD(DNSSDMaster); fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); cupsdAddSelect(fd, (cupsd_selfunc_t)dnssdUpdate, NULL, NULL); } /* * Set the computer name and register the web interface... */ DNSSDPort = 0; cupsdUpdateDNSSDName(); # else /* HAVE_AVAHI */ if ((DNSSDMaster = avahi_threaded_poll_new()) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create DNS-SD thread."); if (FatalErrors & CUPSD_FATAL_BROWSE) cupsdEndProcess(getpid(), 0); } else { int error; /* Error code, if any */ DNSSDClient = avahi_client_new(avahi_threaded_poll_get(DNSSDMaster), AVAHI_CLIENT_NO_FAIL, dnssdClientCallback, NULL, &error); if (DNSSDClient == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to communicate with avahi-daemon: %s", dnssdErrorString(error)); if (FatalErrors & CUPSD_FATAL_BROWSE) cupsdEndProcess(getpid(), 0); avahi_threaded_poll_free(DNSSDMaster); DNSSDMaster = NULL; } else avahi_threaded_poll_start(DNSSDMaster); } # endif /* HAVE_DNSSD */ } #endif /* HAVE_DNSSD || HAVE_AVAHI */ /* * Enable LPD and SMB printer sharing as needed through external programs... */ if (BrowseLocalProtocols & BROWSE_LPD) update_lpd(1); if (BrowseLocalProtocols & BROWSE_SMB) update_smb(1); #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) /* * Register the individual printers */ dnssdRegisterAllPrinters(0); #endif /* HAVE_DNSSD || HAVE_AVAHI */ } /* * 'cupsdStopBrowsing()' - Stop sending and receiving broadcast information. */ void cupsdStopBrowsing(void) { if (!Browsing || !BrowseLocalProtocols) return; #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) /* * De-register the individual printers */ dnssdDeregisterAllPrinters(0); /* * Shut down browsing sockets... */ if ((BrowseLocalProtocols & BROWSE_DNSSD) && DNSSDMaster) dnssdStop(); #endif /* HAVE_DNSSD || HAVE_AVAHI */ /* * Disable LPD and SMB printer sharing as needed through external programs... */ if (BrowseLocalProtocols & BROWSE_LPD) update_lpd(0); if (BrowseLocalProtocols & BROWSE_SMB) update_smb(0); } #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) /* * 'cupsdUpdateDNSSDName()' - Update the computer name we use for browsing... */ void cupsdUpdateDNSSDName(void) { dnssdUpdateDNSSDName(0); } # ifdef __APPLE__ /* * 'dnssdAddAlias()' - Add a DNS-SD alias name. */ static void dnssdAddAlias(const void *key, /* I - Key */ const void *value, /* I - Value (domain) */ void *context) /* I - Unused */ { char valueStr[1024], /* Domain string */ hostname[1024], /* Complete hostname */ *hostptr; /* Pointer into hostname */ (void)key; (void)context; if (CFGetTypeID((CFStringRef)value) == CFStringGetTypeID() && CFStringGetCString((CFStringRef)value, valueStr, sizeof(valueStr), kCFStringEncodingUTF8)) { snprintf(hostname, sizeof(hostname), "%s.%s", DNSSDHostName, valueStr); hostptr = hostname + strlen(hostname) - 1; if (*hostptr == '.') *hostptr = '\0'; /* Strip trailing dot */ if (!DNSSDAlias) DNSSDAlias = cupsArrayNew(NULL, NULL); cupsdAddAlias(DNSSDAlias, hostname); cupsdLogMessage(CUPSD_LOG_DEBUG, "Added Back to My Mac ServerAlias %s", hostname); } else cupsdLogMessage(CUPSD_LOG_ERROR, "Bad Back to My Mac domain in dynamic store!"); } # endif /* __APPLE__ */ /* * 'dnssdBuildTxtRecord()' - Build a TXT record from printer info. */ static cupsd_txt_t /* O - TXT record */ dnssdBuildTxtRecord( cupsd_printer_t *p, /* I - Printer information */ int for_lpd) /* I - 1 = LPD, 0 = IPP */ { int i, /* Looping var */ count; /* Count of key/value pairs */ char admin_hostname[256], /* Hostname for admin page */ adminurl_str[256], /* URL for the admin page */ type_str[32], /* Type to string buffer */ state_str[32], /* State to string buffer */ rp_str[1024], /* Queue name string buffer */ air_str[1024], /* auth-info-required string buffer */ *keyvalue[32][2], /* Table of key/value pairs */ *ptr; /* Pointer in string */ cupsd_txt_t txt; /* TXT record */ cupsd_listener_t *lis; /* Current listener */ const char *admin_scheme = "http"; /* Admin page URL scheme */ /* * Load up the key value pairs... */ count = 0; if (!for_lpd || (BrowseLocalProtocols & BROWSE_LPD)) { keyvalue[count ][0] = "txtvers"; keyvalue[count++][1] = "1"; keyvalue[count ][0] = "qtotal"; keyvalue[count++][1] = "1"; keyvalue[count ][0] = "rp"; keyvalue[count++][1] = rp_str; if (for_lpd) strlcpy(rp_str, p->name, sizeof(rp_str)); else snprintf(rp_str, sizeof(rp_str), "%s/%s", (p->type & CUPS_PRINTER_CLASS) ? "classes" : "printers", p->name); keyvalue[count ][0] = "ty"; keyvalue[count++][1] = p->make_model ? p->make_model : "Unknown"; /* * Get the hostname for the admin page... */ if (strchr(DNSSDHostName, '.')) { /* * Use the provided hostname, but make sure it ends with a period... */ if ((ptr = DNSSDHostName + strlen(DNSSDHostName) - 1) >= DNSSDHostName && *ptr == '.') strlcpy(admin_hostname, DNSSDHostName, sizeof(admin_hostname)); else snprintf(admin_hostname, sizeof(admin_hostname), "%s.", DNSSDHostName); } else { /* * Unqualified hostname gets ".local." added to it... */ snprintf(admin_hostname, sizeof(admin_hostname), "%s.local.", DNSSDHostName); } /* * Get the URL scheme for the admin page... */ # ifdef HAVE_SSL for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); lis; lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) { if (lis->encryption != HTTP_ENCRYPTION_NEVER) { admin_scheme = "https"; break; } } # endif /* HAVE_SSL */ httpAssembleURIf(HTTP_URI_CODING_ALL, adminurl_str, sizeof(adminurl_str), admin_scheme, NULL, admin_hostname, DNSSDPort, "/%s/%s", (p->type & CUPS_PRINTER_CLASS) ? "classes" : "printers", p->name); keyvalue[count ][0] = "adminurl"; keyvalue[count++][1] = adminurl_str; if (p->location) { keyvalue[count ][0] = "note"; keyvalue[count++][1] = p->location; } keyvalue[count ][0] = "priority"; keyvalue[count++][1] = for_lpd ? "100" : "0"; keyvalue[count ][0] = "product"; keyvalue[count++][1] = p->pc && p->pc->product ? p->pc->product : "Unknown"; keyvalue[count ][0] = "pdl"; keyvalue[count++][1] = p->pdl ? p->pdl : "application/postscript"; if (get_auth_info_required(p, air_str, sizeof(air_str))) { keyvalue[count ][0] = "air"; keyvalue[count++][1] = air_str; } keyvalue[count ][0] = "UUID"; keyvalue[count++][1] = p->uuid + 9; #ifdef HAVE_SSL keyvalue[count ][0] = "TLS"; keyvalue[count++][1] = "1.2"; #endif /* HAVE_SSL */ if (p->type & CUPS_PRINTER_FAX) { keyvalue[count ][0] = "Fax"; keyvalue[count++][1] = "T"; keyvalue[count ][0] = "rfo"; keyvalue[count++][1] = rp_str; } if (p->type & CUPS_PRINTER_COLOR) { keyvalue[count ][0] = "Color"; keyvalue[count++][1] = (p->type & CUPS_PRINTER_COLOR) ? "T" : "F"; } if (p->type & CUPS_PRINTER_DUPLEX) { keyvalue[count ][0] = "Duplex"; keyvalue[count++][1] = (p->type & CUPS_PRINTER_DUPLEX) ? "T" : "F"; } if (p->type & CUPS_PRINTER_STAPLE) { keyvalue[count ][0] = "Staple"; keyvalue[count++][1] = (p->type & CUPS_PRINTER_STAPLE) ? "T" : "F"; } if (p->type & CUPS_PRINTER_COPIES) { keyvalue[count ][0] = "Copies"; keyvalue[count++][1] = (p->type & CUPS_PRINTER_COPIES) ? "T" : "F"; } if (p->type & CUPS_PRINTER_COLLATE) { keyvalue[count ][0] = "Collate"; keyvalue[count++][1] = (p->type & CUPS_PRINTER_COLLATE) ? "T" : "F"; } if (p->type & CUPS_PRINTER_PUNCH) { keyvalue[count ][0] = "Punch"; keyvalue[count++][1] = (p->type & CUPS_PRINTER_PUNCH) ? "T" : "F"; } if (p->type & CUPS_PRINTER_BIND) { keyvalue[count ][0] = "Bind"; keyvalue[count++][1] = (p->type & CUPS_PRINTER_BIND) ? "T" : "F"; } if (p->type & CUPS_PRINTER_SORT) { keyvalue[count ][0] = "Sort"; keyvalue[count++][1] = (p->type & CUPS_PRINTER_SORT) ? "T" : "F"; } if (p->type & CUPS_PRINTER_MFP) { keyvalue[count ][0] = "Scan"; keyvalue[count++][1] = (p->type & CUPS_PRINTER_MFP) ? "T" : "F"; } snprintf(type_str, sizeof(type_str), "0x%X", p->type | CUPS_PRINTER_REMOTE); snprintf(state_str, sizeof(state_str), "%d", p->state); keyvalue[count ][0] = "printer-state"; keyvalue[count++][1] = state_str; keyvalue[count ][0] = "printer-type"; keyvalue[count++][1] = type_str; } /* * Then pack them into a proper txt record... */ # ifdef HAVE_DNSSD TXTRecordCreate(&txt, 0, NULL); for (i = 0; i < count; i ++) { size_t len = strlen(keyvalue[i][1]); if (len < 256) TXTRecordSetValue(&txt, keyvalue[i][0], (uint8_t)len, keyvalue[i][1]); } # else for (i = 0, txt = NULL; i < count; i ++) txt = avahi_string_list_add_printf(txt, "%s=%s", keyvalue[i][0], keyvalue[i][1]); # endif /* HAVE_DNSSD */ return (txt); } # ifdef HAVE_AVAHI /* * 'dnssdClientCallback()' - Client callback for Avahi. * * Called whenever the client or server state changes... */ static void dnssdClientCallback( AvahiClient *c, /* I - Client */ AvahiClientState state, /* I - Current state */ void *userdata) /* I - User data (unused) */ { int error; /* Error code, if any */ (void)userdata; if (!c) return; /* * Make sure DNSSDClient is already set also if this callback function is * already running before avahi_client_new() in dnssdStartBrowsing() * finishes. */ if (!DNSSDClient) DNSSDClient = c; switch (state) { case AVAHI_CLIENT_S_REGISTERING: case AVAHI_CLIENT_S_RUNNING: case AVAHI_CLIENT_S_COLLISION: cupsdLogMessage(CUPSD_LOG_DEBUG, "Avahi server connection now available, registering printers for Bonjour broadcasting."); /* * Mark that Avahi server is running... */ avahi_running = 1; /* * Set the computer name and register the web interface... */ DNSSDPort = 0; dnssdUpdateDNSSDName(1); /* * Register the individual printers */ dnssdRegisterAllPrinters(1); break; case AVAHI_CLIENT_FAILURE: if (avahi_client_errno(c) == AVAHI_ERR_DISCONNECTED) { cupsdLogMessage(CUPSD_LOG_DEBUG, "Avahi server disappeared, unregistering printers for Bonjour broadcasting."); /* * Unregister everything and close the client... */ dnssdDeregisterAllPrinters(1); dnssdDeregisterInstance(&WebIFSrv, 1); avahi_client_free(DNSSDClient); DNSSDClient = NULL; /* * Mark that Avahi server is not running... */ avahi_running = 0; /* * Renew Avahi client... */ DNSSDClient = avahi_client_new(avahi_threaded_poll_get(DNSSDMaster), AVAHI_CLIENT_NO_FAIL, dnssdClientCallback, NULL, &error); if (!DNSSDClient) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to communicate with avahi-daemon: %s", dnssdErrorString(error)); if (FatalErrors & CUPSD_FATAL_BROWSE) cupsdEndProcess(getpid(), 0); } } else { cupsdLogMessage(CUPSD_LOG_ERROR, "Communication with avahi-daemon has failed: %s", avahi_strerror(avahi_client_errno(c))); if (FatalErrors & CUPSD_FATAL_BROWSE) cupsdEndProcess(getpid(), 0); } break; default: break; } } # endif /* HAVE_AVAHI */ /* * 'dnssdDeregisterAllPrinters()' - Deregister all printers. */ static void dnssdDeregisterAllPrinters( int from_callback) /* I - Deregistering because of callback? */ { cupsd_printer_t *p; /* Current printer */ if (!DNSSDMaster) return; for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_SCANNER))) dnssdDeregisterPrinter(p, 1, from_callback); } /* * 'dnssdDeregisterInstance()' - Deregister a DNS-SD service instance. */ static void dnssdDeregisterInstance( cupsd_srv_t *srv, /* I - Service */ int from_callback) /* I - Called from callback? */ { if (!srv || !*srv) return; # ifdef HAVE_DNSSD (void)from_callback; DNSServiceRefDeallocate(*srv); *srv = NULL; # else /* HAVE_AVAHI */ if (!from_callback) avahi_threaded_poll_lock(DNSSDMaster); if (*srv) { avahi_entry_group_free(*srv); *srv = NULL; } if (!from_callback) avahi_threaded_poll_unlock(DNSSDMaster); # endif /* HAVE_DNSSD */ } /* * 'dnssdDeregisterPrinter()' - Deregister all services for a printer. */ static void dnssdDeregisterPrinter( cupsd_printer_t *p, /* I - Printer */ int clear_name, /* I - Clear the name? */ int from_callback) /* I - Called from callback? */ { cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdDeregisterPrinter(p=%p(%s), clear_name=%d)", p, p->name, clear_name); if (p->ipp_srv) { dnssdDeregisterInstance(&p->ipp_srv, from_callback); # ifdef HAVE_DNSSD # ifdef HAVE_SSL dnssdDeregisterInstance(&p->ipps_srv, from_callback); # endif /* HAVE_SSL */ dnssdDeregisterInstance(&p->printer_srv, from_callback); # endif /* HAVE_DNSSD */ } /* * Remove the printer from the array of DNS-SD printers but keep the * registered name... */ cupsArrayRemove(DNSSDPrinters, p); /* * Optionally clear the service name... */ if (clear_name) cupsdClearString(&p->reg_name); } /* * 'dnssdErrorString()' - Return an error string for an error code. */ static const char * /* O - Error message */ dnssdErrorString(int error) /* I - Error number */ { # ifdef HAVE_DNSSD switch (error) { case kDNSServiceErr_NoError : return ("OK."); default : case kDNSServiceErr_Unknown : return ("Unknown error."); case kDNSServiceErr_NoSuchName : return ("Service not found."); case kDNSServiceErr_NoMemory : return ("Out of memory."); case kDNSServiceErr_BadParam : return ("Bad parameter."); case kDNSServiceErr_BadReference : return ("Bad service reference."); case kDNSServiceErr_BadState : return ("Bad state."); case kDNSServiceErr_BadFlags : return ("Bad flags."); case kDNSServiceErr_Unsupported : return ("Unsupported."); case kDNSServiceErr_NotInitialized : return ("Not initialized."); case kDNSServiceErr_AlreadyRegistered : return ("Already registered."); case kDNSServiceErr_NameConflict : return ("Name conflict."); case kDNSServiceErr_Invalid : return ("Invalid name."); case kDNSServiceErr_Firewall : return ("Firewall prevents registration."); case kDNSServiceErr_Incompatible : return ("Client library incompatible."); case kDNSServiceErr_BadInterfaceIndex : return ("Bad interface index."); case kDNSServiceErr_Refused : return ("Server prevents registration."); case kDNSServiceErr_NoSuchRecord : return ("Record not found."); case kDNSServiceErr_NoAuth : return ("Authentication required."); case kDNSServiceErr_NoSuchKey : return ("Encryption key not found."); case kDNSServiceErr_NATTraversal : return ("Unable to traverse NAT boundary."); case kDNSServiceErr_DoubleNAT : return ("Unable to traverse double-NAT boundary."); case kDNSServiceErr_BadTime : return ("Bad system time."); case kDNSServiceErr_BadSig : return ("Bad signature."); case kDNSServiceErr_BadKey : return ("Bad encryption key."); case kDNSServiceErr_Transient : return ("Transient error occurred - please try again."); case kDNSServiceErr_ServiceNotRunning : return ("Server not running."); case kDNSServiceErr_NATPortMappingUnsupported : return ("NAT doesn't support NAT-PMP or UPnP."); case kDNSServiceErr_NATPortMappingDisabled : return ("NAT supports NAT-PNP or UPnP but it is disabled."); case kDNSServiceErr_NoRouter : return ("No Internet/default router configured."); case kDNSServiceErr_PollingMode : return ("Service polling mode error."); case kDNSServiceErr_Timeout : return ("Service timeout."); } # else /* HAVE_AVAHI */ return (avahi_strerror(error)); # endif /* HAVE_DNSSD */ } /* * 'dnssdRegisterCallback()' - Free a TXT record. */ static void dnssdFreeTxtRecord(cupsd_txt_t *txt) /* I - TXT record */ { # ifdef HAVE_DNSSD TXTRecordDeallocate(txt); # else /* HAVE_AVAHI */ avahi_string_list_free(*txt); *txt = NULL; # endif /* HAVE_DNSSD */ } /* * 'dnssdRegisterAllPrinters()' - Register all printers. */ static void dnssdRegisterAllPrinters(int from_callback) /* I - Called from callback? */ { cupsd_printer_t *p; /* Current printer */ if (!DNSSDMaster) return; for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_SCANNER))) dnssdRegisterPrinter(p, from_callback); } /* * 'dnssdRegisterCallback()' - DNSServiceRegister callback. */ # ifdef HAVE_DNSSD static void dnssdRegisterCallback( DNSServiceRef sdRef, /* I - DNS Service reference */ DNSServiceFlags flags, /* I - Reserved for future use */ DNSServiceErrorType errorCode, /* I - Error code */ const char *name, /* I - Service name */ const char *regtype, /* I - Service type */ const char *domain, /* I - Domain. ".local" for now */ void *context) /* I - Printer */ { cupsd_printer_t *p = (cupsd_printer_t *)context; /* Current printer */ (void)sdRef; (void)flags; (void)domain; cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdRegisterCallback(%s, %s) for %s (%s)", name, regtype, p ? p->name : "Web Interface", p ? (p->reg_name ? p->reg_name : "(null)") : "NA"); if (errorCode) { cupsdLogMessage(CUPSD_LOG_ERROR, "DNSServiceRegister failed with error %d", (int)errorCode); return; } else if (p && (!p->reg_name || _cups_strcasecmp(name, p->reg_name))) { cupsdLogMessage(CUPSD_LOG_INFO, "Using service name \"%s\" for \"%s\"", name, p->name); cupsArrayRemove(DNSSDPrinters, p); cupsdSetString(&p->reg_name, name); cupsArrayAdd(DNSSDPrinters, p); LastEvent |= CUPSD_EVENT_PRINTER_MODIFIED; } } # else /* HAVE_AVAHI */ static void dnssdRegisterCallback( AvahiEntryGroup *srv, /* I - Service */ AvahiEntryGroupState state, /* I - Registration state */ void *context) /* I - Printer */ { cupsd_printer_t *p = (cupsd_printer_t *)context; /* Current printer */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdRegisterCallback(srv=%p, state=%d, context=%p) " "for %s (%s)", srv, state, context, p ? p->name : "Web Interface", p ? (p->reg_name ? p->reg_name : "(null)") : "NA"); /* TODO: Handle collisions with avahi_alternate_service_name(p->reg_name)? */ } # endif /* HAVE_DNSSD */ /* * 'dnssdRegisterInstance()' - Register an instance of a printer service. */ static int /* O - 1 on success, 0 on failure */ dnssdRegisterInstance( cupsd_srv_t *srv, /* O - Service */ cupsd_printer_t *p, /* I - Printer */ char *name, /* I - DNS-SD service name */ const char *type, /* I - DNS-SD service type */ const char *subtypes, /* I - Subtypes to register or NULL */ int port, /* I - Port number or 0 */ cupsd_txt_t *txt, /* I - TXT record */ int commit, /* I - Commit registration? */ int from_callback) /* I - Called from callback? */ { char temp[256], /* Temporary string */ *ptr; /* Pointer into string */ int error; /* Any error */ # ifdef HAVE_DNSSD (void)from_callback; # endif /* HAVE_DNSSD */ cupsdLogMessage(CUPSD_LOG_DEBUG, "Registering \"%s\" with DNS-SD type \"%s\".", name, type); if (p && !srv) { /* * Assign the correct pointer for "srv"... */ # ifdef HAVE_DNSSD if (!strcmp(type, "_printer._tcp")) srv = &p->printer_srv; /* Target LPD service */ # ifdef HAVE_SSL else if (!strcmp(type, "_ipps._tcp")) srv = &p->ipps_srv; /* Target IPPS service */ # endif /* HAVE_SSL */ else srv = &p->ipp_srv; /* Target IPP service */ # else /* HAVE_AVAHI */ srv = &p->ipp_srv; /* Target service group */ # endif /* HAVE_DNSSD */ } # ifdef HAVE_DNSSD (void)commit; # else /* HAVE_AVAHI */ if (!from_callback) avahi_threaded_poll_lock(DNSSDMaster); if (!*srv) *srv = avahi_entry_group_new(DNSSDClient, dnssdRegisterCallback, NULL); if (!*srv) { if (!from_callback) avahi_threaded_poll_unlock(DNSSDMaster); cupsdLogMessage(CUPSD_LOG_WARN, "DNS-SD registration of \"%s\" failed: %s", name, dnssdErrorString(avahi_client_errno(DNSSDClient))); return (0); } # endif /* HAVE_DNSSD */ /* * Make sure the name is <= 63 octets, and when we truncate be sure to * properly truncate any UTF-8 characters... */ ptr = name + strlen(name); while ((ptr - name) > 63) { do { ptr --; } while (ptr > name && (*ptr & 0xc0) == 0x80); if (ptr > name) *ptr = '\0'; } /* * Register the service... */ # ifdef HAVE_DNSSD if (subtypes) snprintf(temp, sizeof(temp), "%s,%s", type, subtypes); else strlcpy(temp, type, sizeof(temp)); *srv = DNSSDMaster; error = DNSServiceRegister(srv, kDNSServiceFlagsShareConnection, 0, name, temp, NULL, NULL, htons(port), txt ? TXTRecordGetLength(txt) : 0, txt ? TXTRecordGetBytesPtr(txt) : NULL, dnssdRegisterCallback, p); # else /* HAVE_AVAHI */ if (txt) { AvahiStringList *temptxt; for (temptxt = *txt; temptxt; temptxt = temptxt->next) cupsdLogMessage(CUPSD_LOG_DEBUG, "DNS_SD \"%s\" %s", name, temptxt->text); } error = avahi_entry_group_add_service_strlst(*srv, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, name, type, NULL, NULL, port, txt ? *txt : NULL); if (error) cupsdLogMessage(CUPSD_LOG_DEBUG, "DNS-SD service add for \"%s\" failed.", name); if (!error && subtypes) { /* * Register all of the subtypes... */ char *start, /* Start of subtype */ subtype[256]; /* Subtype string */ strlcpy(temp, subtypes, sizeof(temp)); for (start = temp; *start; start = ptr) { /* * Skip leading whitespace... */ while (*start && isspace(*start & 255)) start ++; /* * Grab everything up to the next comma or the end of the string... */ for (ptr = start; *ptr && *ptr != ','; ptr ++); if (*ptr) *ptr++ = '\0'; if (!*start) break; /* * Register the subtype... */ snprintf(subtype, sizeof(subtype), "%s._sub.%s", start, type); error = avahi_entry_group_add_service_subtype(*srv, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, name, type, NULL, subtype); if (error) { cupsdLogMessage(CUPSD_LOG_DEBUG, "DNS-SD subtype %s registration for \"%s\" failed." , subtype, name); break; } } } if (!error && commit) { if ((error = avahi_entry_group_commit(*srv)) != 0) cupsdLogMessage(CUPSD_LOG_DEBUG, "DNS-SD commit of \"%s\" failed.", name); } if (!from_callback) avahi_threaded_poll_unlock(DNSSDMaster); # endif /* HAVE_DNSSD */ if (error) { cupsdLogMessage(CUPSD_LOG_WARN, "DNS-SD registration of \"%s\" failed: %s", name, dnssdErrorString(error)); cupsdLogMessage(CUPSD_LOG_DEBUG, "DNS-SD type: %s", type); if (subtypes) cupsdLogMessage(CUPSD_LOG_DEBUG, "DNS-SD sub-types: %s", subtypes); } return (!error); } /* * 'dnssdRegisterPrinter()' - Start sending broadcast information for a printer * or update the broadcast contents. */ static void dnssdRegisterPrinter( cupsd_printer_t *p, /* I - Printer */ int from_callback) /* I - Called from callback? */ { char name[256]; /* Service name */ int printer_port; /* LPD port number */ int status; /* Registration status */ cupsd_txt_t ipp_txt, /* IPP(S) TXT record */ printer_txt; /* LPD TXT record */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdRegisterPrinter(%s) %s", p->name, !p->ipp_srv ? "new" : "update"); # ifdef HAVE_AVAHI if (!avahi_running) return; # endif /* HAVE_AVAHI */ /* * Remove the current registrations if we have them and then return if * per-printer sharing was just disabled... */ dnssdDeregisterPrinter(p, 0, from_callback); if (!p->shared) return; /* * Set the registered name as needed; the registered name takes the form of * " @ "... */ if (!p->reg_name) { if (p->info && strlen(p->info) > 0) { if (DNSSDComputerName) snprintf(name, sizeof(name), "%s @ %s", p->info, DNSSDComputerName); else strlcpy(name, p->info, sizeof(name)); } else if (DNSSDComputerName) snprintf(name, sizeof(name), "%s @ %s", p->name, DNSSDComputerName); else strlcpy(name, p->name, sizeof(name)); } else strlcpy(name, p->reg_name, sizeof(name)); /* * Register IPP and LPD... * * We always must register the "_printer" service type in order to reserve * our name, but use port number 0 if we haven't actually configured cups-lpd * to share via LPD... */ ipp_txt = dnssdBuildTxtRecord(p, 0); printer_txt = dnssdBuildTxtRecord(p, 1); if (BrowseLocalProtocols & BROWSE_LPD) printer_port = 515; else printer_port = 0; status = dnssdRegisterInstance(NULL, p, name, "_printer._tcp", NULL, printer_port, &printer_txt, 0, from_callback); # ifdef HAVE_SSL if (status) dnssdRegisterInstance(NULL, p, name, "_ipps._tcp", DNSSDSubTypes, DNSSDPort, &ipp_txt, 0, from_callback); # endif /* HAVE_SSL */ if (status) { /* * Use the "_fax-ipp" service type for fax queues, otherwise use "_ipp"... */ if (p->type & CUPS_PRINTER_FAX) status = dnssdRegisterInstance(NULL, p, name, "_fax-ipp._tcp", DNSSDSubTypes, DNSSDPort, &ipp_txt, 1, from_callback); else status = dnssdRegisterInstance(NULL, p, name, "_ipp._tcp", DNSSDSubTypes, DNSSDPort, &ipp_txt, 1, from_callback); } dnssdFreeTxtRecord(&ipp_txt); dnssdFreeTxtRecord(&printer_txt); if (status) { /* * Save the registered name and add the printer to the array of DNS-SD * printers... */ cupsdSetString(&p->reg_name, name); cupsArrayAdd(DNSSDPrinters, p); } else { /* * Registration failed for this printer... */ dnssdDeregisterInstance(&p->ipp_srv, from_callback); # ifdef HAVE_DNSSD # ifdef HAVE_SSL dnssdDeregisterInstance(&p->ipps_srv, from_callback); # endif /* HAVE_SSL */ dnssdDeregisterInstance(&p->printer_srv, from_callback); # endif /* HAVE_DNSSD */ } } /* * 'dnssdStop()' - Stop all DNS-SD registrations. */ static void dnssdStop(void) { cupsd_printer_t *p; /* Current printer */ /* * De-register the individual printers */ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) dnssdDeregisterPrinter(p, 1, 0); /* * Shutdown the rest of the service refs... */ dnssdDeregisterInstance(&WebIFSrv, 0); # ifdef HAVE_DNSSD cupsdRemoveSelect(DNSServiceRefSockFD(DNSSDMaster)); DNSServiceRefDeallocate(DNSSDMaster); DNSSDMaster = NULL; # else /* HAVE_AVAHI */ if (DNSSDMaster) avahi_threaded_poll_stop(DNSSDMaster); if (DNSSDClient) { avahi_client_free(DNSSDClient); DNSSDClient = NULL; } if (DNSSDMaster) { avahi_threaded_poll_free(DNSSDMaster); DNSSDMaster = NULL; } # endif /* HAVE_DNSSD */ cupsArrayDelete(DNSSDPrinters); DNSSDPrinters = NULL; DNSSDPort = 0; } # ifdef HAVE_DNSSD /* * 'dnssdUpdate()' - Handle DNS-SD queries. */ static void dnssdUpdate(void) { DNSServiceErrorType sdErr; /* Service discovery error */ if ((sdErr = DNSServiceProcessResult(DNSSDMaster)) != kDNSServiceErr_NoError) { cupsdLogMessage(CUPSD_LOG_ERROR, "DNS Service Discovery registration error %d!", sdErr); dnssdStop(); } } # endif /* HAVE_DNSSD */ /* * 'dnssdUpdateDNSSDName()' - Update the listen port, computer name, and web interface registration. */ static void dnssdUpdateDNSSDName(int from_callback) /* I - Called from callback? */ { char webif[1024]; /* Web interface share name */ # ifdef __APPLE__ SCDynamicStoreRef sc; /* Context for dynamic store */ CFDictionaryRef btmm; /* Back-to-My-Mac domains */ CFStringEncoding nameEncoding; /* Encoding of computer name */ CFStringRef nameRef; /* Host name CFString */ char nameBuffer[1024]; /* C-string buffer */ # endif /* __APPLE__ */ /* * Only share the web interface and printers when non-local listening is * enabled... */ if (!DNSSDPort) { /* * Get the port we use for registrations. If we are not listening on any * non-local ports, there is no sense sharing local printers via Bonjour... */ cupsd_listener_t *lis; /* Current listening socket */ for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); lis; lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) { if (httpAddrLocalhost(&(lis->address))) continue; DNSSDPort = httpAddrPort(&(lis->address)); break; } } if (!DNSSDPort) return; /* * Get the computer name as a c-string... */ # ifdef __APPLE__ sc = SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("cupsd"), NULL, NULL); if (sc) { /* * Get the computer name from the dynamic store... */ cupsdClearString(&DNSSDComputerName); if ((nameRef = SCDynamicStoreCopyComputerName(sc, &nameEncoding)) != NULL) { if (CFStringGetCString(nameRef, nameBuffer, sizeof(nameBuffer), kCFStringEncodingUTF8)) { cupsdLogMessage(CUPSD_LOG_DEBUG, "Dynamic store computer name is \"%s\".", nameBuffer); cupsdSetString(&DNSSDComputerName, nameBuffer); } CFRelease(nameRef); } if (!DNSSDComputerName) { /* * Use the ServerName instead... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "Using ServerName \"%s\" as computer name.", ServerName); cupsdSetString(&DNSSDComputerName, ServerName); } /* * Get the local hostname from the dynamic store... */ cupsdClearString(&DNSSDHostName); if ((nameRef = SCDynamicStoreCopyLocalHostName(sc)) != NULL) { if (CFStringGetCString(nameRef, nameBuffer, sizeof(nameBuffer), kCFStringEncodingUTF8)) { cupsdLogMessage(CUPSD_LOG_DEBUG, "Dynamic store host name is \"%s\".", nameBuffer); cupsdSetString(&DNSSDHostName, nameBuffer); } CFRelease(nameRef); } if (!DNSSDHostName) { /* * Use the ServerName instead... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "Using ServerName \"%s\" as host name.", ServerName); cupsdSetString(&DNSSDHostName, ServerName); } /* * Get any Back-to-My-Mac domains and add them as aliases... */ cupsdFreeAliases(DNSSDAlias); DNSSDAlias = NULL; btmm = SCDynamicStoreCopyValue(sc, CFSTR("Setup:/Network/BackToMyMac")); if (btmm && CFGetTypeID(btmm) == CFDictionaryGetTypeID()) { cupsdLogMessage(CUPSD_LOG_DEBUG, "%d Back to My Mac aliases to add.", (int)CFDictionaryGetCount(btmm)); CFDictionaryApplyFunction(btmm, dnssdAddAlias, NULL); } else if (btmm) cupsdLogMessage(CUPSD_LOG_ERROR, "Bad Back to My Mac data in dynamic store!"); else cupsdLogMessage(CUPSD_LOG_DEBUG, "No Back to My Mac aliases to add."); if (btmm) CFRelease(btmm); CFRelease(sc); } else # endif /* __APPLE__ */ # ifdef HAVE_AVAHI if (DNSSDClient) { const char *host_name = avahi_client_get_host_name(DNSSDClient); const char *host_fqdn = avahi_client_get_host_name_fqdn(DNSSDClient); cupsdSetString(&DNSSDComputerName, host_name ? host_name : ServerName); if (host_fqdn) cupsdSetString(&DNSSDHostName, host_fqdn); else if (strchr(ServerName, '.')) cupsdSetString(&DNSSDHostName, ServerName); else cupsdSetStringf(&DNSSDHostName, "%s.local", ServerName); } else # endif /* HAVE_AVAHI */ { cupsdSetString(&DNSSDComputerName, ServerName); if (strchr(ServerName, '.')) cupsdSetString(&DNSSDHostName, ServerName); else cupsdSetStringf(&DNSSDHostName, "%s.local", ServerName); } /* * Then (re)register the web interface if enabled... */ if (BrowseWebIF) { if (DNSSDComputerName) snprintf(webif, sizeof(webif), "CUPS @ %s", DNSSDComputerName); else strlcpy(webif, "CUPS", sizeof(webif)); dnssdDeregisterInstance(&WebIFSrv, from_callback); dnssdRegisterInstance(&WebIFSrv, NULL, webif, "_http._tcp", "_printer", DNSSDPort, NULL, 1, from_callback); } } /* * 'get_auth_info_required()' - Get the auth-info-required value to advertise. */ static char * /* O - String or NULL if none */ get_auth_info_required( cupsd_printer_t *p, /* I - Printer */ char *buffer, /* I - Value buffer */ size_t bufsize) /* I - Size of value buffer */ { cupsd_location_t *auth; /* Pointer to authentication element */ char resource[1024]; /* Printer/class resource path */ /* * If auth-info-required is set for this printer, return that... */ if (p->num_auth_info_required > 0 && strcmp(p->auth_info_required[0], "none")) { int i; /* Looping var */ char *bufptr; /* Pointer into buffer */ for (i = 0, bufptr = buffer; i < p->num_auth_info_required; i ++) { if (bufptr >= (buffer + bufsize - 2)) break; if (i) *bufptr++ = ','; strlcpy(bufptr, p->auth_info_required[i], bufsize - (size_t)(bufptr - buffer)); bufptr += strlen(bufptr); } return (buffer); } /* * Figure out the authentication data requirements to advertise... */ if (p->type & CUPS_PRINTER_CLASS) snprintf(resource, sizeof(resource), "/classes/%s", p->name); else snprintf(resource, sizeof(resource), "/printers/%s", p->name); if ((auth = cupsdFindBest(resource, HTTP_POST)) == NULL || auth->type == CUPSD_AUTH_NONE) auth = cupsdFindPolicyOp(p->op_policy_ptr, IPP_PRINT_JOB); if (auth) { int auth_type; /* Authentication type */ if ((auth_type = auth->type) == CUPSD_AUTH_DEFAULT) auth_type = cupsdDefaultAuthType(); switch (auth_type) { case CUPSD_AUTH_NONE : return (NULL); case CUPSD_AUTH_NEGOTIATE : strlcpy(buffer, "negotiate", bufsize); break; default : strlcpy(buffer, "username,password", bufsize); break; } return (buffer); } return ("none"); } #endif /* HAVE_DNSSD || HAVE_AVAHI */ #ifdef __APPLE__ /* * 'get_hostconfig()' - Get an /etc/hostconfig service setting. */ static int /* O - 1 for YES or AUTOMATIC, 0 for NO */ get_hostconfig(const char *name) /* I - Name of service */ { cups_file_t *fp; /* Hostconfig file */ char line[1024], /* Line from file */ *ptr; /* Pointer to value */ int state = 1; /* State of service */ /* * Try opening the /etc/hostconfig file; if we can't open it, assume that * the service is enabled/auto. */ if ((fp = cupsFileOpen("/etc/hostconfig", "r")) != NULL) { /* * Read lines from the file until we find the service... */ while (cupsFileGets(fp, line, sizeof(line))) { if (line[0] == '#' || (ptr = strchr(line, '=')) == NULL) continue; *ptr++ = '\0'; if (!_cups_strcasecmp(line, name)) { /* * Found the service, see if it is set to "-NO-"... */ if (!_cups_strncasecmp(ptr, "-NO-", 4)) state = 0; break; } } cupsFileClose(fp); } return (state); } #endif /* __APPLE__ */ /* * 'update_lpd()' - Update the LPD configuration as needed. */ static void update_lpd(int onoff) /* - 1 = turn on, 0 = turn off */ { if (!LPDConfigFile) return; #ifdef __APPLE__ /* * Allow /etc/hostconfig CUPS_LPD service setting to override cupsd.conf * setting for backwards-compatibility. */ if (onoff && !get_hostconfig("CUPS_LPD")) onoff = 0; #endif /* __APPLE__ */ if (!strncmp(LPDConfigFile, "xinetd:///", 10)) { /* * Enable/disable LPD via the xinetd.d config file for cups-lpd... */ char newfile[1024]; /* New cups-lpd.N file */ cups_file_t *ofp, /* Original file pointer */ *nfp; /* New file pointer */ char line[1024]; /* Line from file */ snprintf(newfile, sizeof(newfile), "%s.N", LPDConfigFile + 9); if ((ofp = cupsFileOpen(LPDConfigFile + 9, "r")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open \"%s\" - %s", LPDConfigFile + 9, strerror(errno)); return; } if ((nfp = cupsFileOpen(newfile, "w")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create \"%s\" - %s", newfile, strerror(errno)); cupsFileClose(ofp); return; } /* * Copy all of the lines from the cups-lpd file... */ while (cupsFileGets(ofp, line, sizeof(line))) { if (line[0] == '{') { cupsFilePrintf(nfp, "%s\n", line); snprintf(line, sizeof(line), "\tdisable = %s", onoff ? "no" : "yes"); } else if (!strstr(line, "disable =")) cupsFilePrintf(nfp, "%s\n", line); } cupsFileClose(nfp); cupsFileClose(ofp); rename(newfile, LPDConfigFile + 9); } #ifdef __APPLE__ else if (!strncmp(LPDConfigFile, "launchd:///", 11)) { /* * Enable/disable LPD via the launchctl command... */ char *argv[5], /* Arguments for command */ *envp[MAX_ENV]; /* Environment for command */ int pid; /* Process ID */ cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0]))); argv[0] = (char *)"launchctl"; argv[1] = (char *)(onoff ? "load" : "unload"); argv[2] = (char *)"-w"; argv[3] = LPDConfigFile + 10; argv[4] = NULL; cupsdStartProcess("/bin/launchctl", argv, envp, -1, -1, -1, -1, -1, 1, NULL, NULL, &pid); } #endif /* __APPLE__ */ else cupsdLogMessage(CUPSD_LOG_INFO, "Unknown LPDConfigFile scheme!"); } /* * 'update_smb()' - Update the SMB configuration as needed. */ static void update_smb(int onoff) /* I - 1 = turn on, 0 = turn off */ { if (!SMBConfigFile) return; if (!strncmp(SMBConfigFile, "samba:///", 9)) { /* * Enable/disable SMB via the specified smb.conf config file... */ char newfile[1024]; /* New smb.conf.N file */ cups_file_t *ofp, /* Original file pointer */ *nfp; /* New file pointer */ char line[1024]; /* Line from file */ int in_printers; /* In [printers] section? */ snprintf(newfile, sizeof(newfile), "%s.N", SMBConfigFile + 8); if ((ofp = cupsFileOpen(SMBConfigFile + 8, "r")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open \"%s\" - %s", SMBConfigFile + 8, strerror(errno)); return; } if ((nfp = cupsFileOpen(newfile, "w")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create \"%s\" - %s", newfile, strerror(errno)); cupsFileClose(ofp); return; } /* * Copy all of the lines from the smb.conf file... */ in_printers = 0; while (cupsFileGets(ofp, line, sizeof(line))) { if (in_printers && strstr(line, "printable =")) snprintf(line, sizeof(line), " printable = %s", onoff ? "yes" : "no"); cupsFilePrintf(nfp, "%s\n", line); if (line[0] == '[') in_printers = !strcmp(line, "[printers]"); } cupsFileClose(nfp); cupsFileClose(ofp); rename(newfile, SMBConfigFile + 8); } else cupsdLogMessage(CUPSD_LOG_INFO, "Unknown SMBConfigFile scheme!"); } cups-2.2.7/scheduler/dirsvc.h000664 000765 000024 00000004627 13255074424 016605 0ustar00msweetstaff000000 000000 /* * Directory services definitions for the CUPS scheduler. * * Copyright 2007-2012 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Browse protocols... */ #define BROWSE_DNSSD 1 /* DNS Service Discovery (aka Bonjour) */ #define BROWSE_SMB 2 /* SMB/Samba */ #define BROWSE_LPD 4 /* LPD via xinetd or launchd */ #define BROWSE_ALL 7 /* All protocols */ /* * Globals... */ VAR int Browsing VALUE(TRUE), /* Whether or not browsing is enabled */ BrowseWebIF VALUE(FALSE), /* Whether the web interface is advertised */ BrowseLocalProtocols VALUE(BROWSE_ALL); /* Protocols to support for local printers */ #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) VAR char *DNSSDComputerName VALUE(NULL), /* Computer/server name */ *DNSSDHostName VALUE(NULL), /* Hostname */ *DNSSDSubTypes VALUE(NULL); /* Bonjour registration subtypes */ VAR cups_array_t *DNSSDAlias VALUE(NULL); /* List of dynamic ServerAlias's */ VAR int DNSSDPort VALUE(0); /* Port number to register */ VAR cups_array_t *DNSSDPrinters VALUE(NULL); /* Printers we have registered */ # ifdef HAVE_DNSSD VAR DNSServiceRef DNSSDMaster VALUE(NULL); /* Master DNS-SD service reference */ # else /* HAVE_AVAHI */ VAR AvahiThreadedPoll *DNSSDMaster VALUE(NULL); /* Master polling interface for Avahi */ VAR AvahiClient *DNSSDClient VALUE(NULL); /* Client information */ # endif /* HAVE_DNSSD */ VAR cupsd_srv_t WebIFSrv VALUE(NULL); /* Service reference for the web interface */ #endif /* HAVE_DNSSD || HAVE_AVAHI */ VAR char *LPDConfigFile VALUE(NULL), /* LPD configuration file */ *SMBConfigFile VALUE(NULL); /* SMB configuration file */ /* * Prototypes... */ extern void cupsdDeregisterPrinter(cupsd_printer_t *p, int removeit); extern void cupsdRegisterPrinter(cupsd_printer_t *p); extern void cupsdStartBrowsing(void); extern void cupsdStopBrowsing(void); #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) extern void cupsdUpdateDNSSDName(void); #endif /* HAVE_DNSSD || HAVE_AVAHI */ cups-2.2.7/scheduler/env.c000664 000765 000024 00000013011 13255074424 016061 0ustar00msweetstaff000000 000000 /* * Environment management routines for the CUPS scheduler. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" /* * Local globals... */ static int num_common_env = 0; /* Number of common env vars */ static char *common_env[MAX_ENV]; /* Common env vars */ /* * Local functions... */ static void clear_env(void); static int find_env(const char *name); /* * 'cupsdInitEnv()' - Initialize the current environment with standard variables. */ void cupsdInitEnv(void) { /* * Clear existing environment variables... */ clear_env(); #if defined(__APPLE__) /* * Add special voodoo magic for macOS - this allows macOS * programs to access their bundle resources properly... * * This string is replaced in cupsdStartProcess()... */ cupsdSetString(common_env, ""); num_common_env = 1; #endif /* __APPLE__ */ } /* * 'cupsdLoadEnv()' - Copy common environment variables into an array. */ int /* O - Number of environment variables */ cupsdLoadEnv(char *envp[], /* I - Environment array */ int envmax) /* I - Maximum number of elements */ { int i; /* Looping var */ /* * Leave room for a NULL pointer at the end... */ envmax --; /* * Copy pointers to the environment... */ for (i = 0; i < num_common_env && i < envmax; i ++) envp[i] = common_env[i]; /* * NULL terminate the environment array and return the number of * elements we added... */ envp[i] = NULL; return (i); } /* * 'cupsdSetEnv()' - Set a common environment variable. */ void cupsdSetEnv(const char *name, /* I - Name of variable */ const char *value) /* I - Value of variable */ { int i; /* Index into environent array */ /* * If "value" is NULL, try getting value from current environment... */ if (!value) value = getenv(name); if (!value) return; /* * Do not allow dynamic linker variables when running as root... */ if (!RunUser && (!strncmp(name, "DYLD_", 5) || !strncmp(name, "LD_", 3))) return; /* * See if this variable has already been defined... */ if ((i = find_env(name)) < 0) { /* * Check for room... */ if (num_common_env >= (int)(sizeof(common_env) / sizeof(common_env[0]))) { cupsdLogMessage(CUPSD_LOG_ERROR, "cupsdSetEnv: Too many environment variables set!"); return; } i = num_common_env; num_common_env ++; } /* * Set the new environment variable... */ cupsdSetStringf(common_env + i, "%s=%s", name, value); cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSetEnv: %s", common_env[i]); } /* * 'cupsdSetEnvf()' - Set a formatted common environment variable. */ void cupsdSetEnvf(const char *name, /* I - Name of variable */ const char *value, /* I - Printf-style value of variable */ ...) /* I - Additional args as needed */ { char v[4096]; /* Formatting string value */ va_list ap; /* Argument pointer */ /* * Format the value string... */ va_start(ap, value); vsnprintf(v, sizeof(v), value, ap); va_end(ap); /* * Set the env variable... */ cupsdSetEnv(name, v); } /* * 'cupsdUpdateEnv()' - Update the environment for the configured directories. */ void cupsdUpdateEnv(void) { /* * Set common variables... */ #define set_if_undefined(name,value) if (find_env(name) < 0) cupsdSetEnv(name,value) set_if_undefined("CUPS_CACHEDIR", CacheDir); set_if_undefined("CUPS_DATADIR", DataDir); set_if_undefined("CUPS_DOCROOT", DocumentRoot); set_if_undefined("CUPS_FONTPATH", FontPath); set_if_undefined("CUPS_REQUESTROOT", RequestRoot); set_if_undefined("CUPS_SERVERBIN", ServerBin); set_if_undefined("CUPS_SERVERROOT", ServerRoot); set_if_undefined("CUPS_STATEDIR", StateDir); set_if_undefined("DYLD_LIBRARY_PATH", NULL); set_if_undefined("HOME", TempDir); set_if_undefined("LD_ASSUME_KERNEL", NULL); set_if_undefined("LD_LIBRARY_PATH", NULL); set_if_undefined("LD_PRELOAD", NULL); set_if_undefined("NLSPATH", NULL); if (find_env("PATH") < 0) cupsdSetEnvf("PATH", "%s/filter:" CUPS_BINDIR ":" CUPS_SBINDIR ":/bin:/usr/bin", ServerBin); set_if_undefined("SERVER_ADMIN", ServerAdmin); set_if_undefined("SHLIB_PATH", NULL); set_if_undefined("SOFTWARE", CUPS_MINIMAL); set_if_undefined("TMPDIR", TempDir); set_if_undefined("TZ", NULL); set_if_undefined("USER", "root"); set_if_undefined("VG_ARGS", NULL); cupsdSetEnvf("CUPS_MAX_MESSAGE", "%d", CUPSD_SB_BUFFER_SIZE - 1); } /* * 'clear_env()' - Clear common environment variables. */ static void clear_env(void) { int i; /* Looping var */ for (i = 0; i < num_common_env; i ++) cupsdClearString(common_env + i); num_common_env = 0; } /* * 'find_env()' - Find a common environment variable. */ static int /* O - Index or -1 if not found */ find_env(const char *name) /* I - Variable name */ { int i; /* Looping var */ size_t namelen; /* Length of name */ for (i = 0, namelen = strlen(name); i < num_common_env; i ++) if (!strncmp(common_env[i], name, namelen) && common_env[i][namelen] == '=') return (i); return (-1); } cups-2.2.7/scheduler/file.c000664 000765 000024 00000021672 13255074424 016224 0ustar00msweetstaff000000 000000 /* * File functions for the CUPS scheduler. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #include #include #ifdef HAVE_REMOVEFILE # include #else static int overwrite_data(int fd, const char *buffer, int bufsize, int filesize); #endif /* HAVE_REMOVEFILE */ /* * 'cupsdCleanFiles()' - Clean out old files. */ void cupsdCleanFiles(const char *path, /* I - Directory to clean */ const char *pattern) /* I - Filename pattern or NULL */ { cups_dir_t *dir; /* Directory */ cups_dentry_t *dent; /* Directory entry */ char filename[1024]; /* Filename */ int status; /* Status from unlink/rmdir */ cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdCleanFiles(path=\"%s\", pattern=\"%s\")", path, pattern ? pattern : "(null)"); if ((dir = cupsDirOpen(path)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open directory \"%s\" - %s", path, strerror(errno)); return; } cupsdLogMessage(CUPSD_LOG_INFO, "Cleaning out old files in \"%s\".", path); while ((dent = cupsDirRead(dir)) != NULL) { if (pattern && fnmatch(pattern, dent->filename, 0)) continue; snprintf(filename, sizeof(filename), "%s/%s", path, dent->filename); if (S_ISDIR(dent->fileinfo.st_mode)) { cupsdCleanFiles(filename, pattern); status = rmdir(filename); } else status = cupsdUnlinkOrRemoveFile(filename); if (status) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to remove \"%s\" - %s", filename, strerror(errno)); } cupsDirClose(dir); } /* * 'cupsdCloseCreatedConfFile()' - Close a created configuration file and move * into place. */ int /* O - 0 on success, -1 on error */ cupsdCloseCreatedConfFile( cups_file_t *fp, /* I - File to close */ const char *filename) /* I - Filename */ { char newfile[1024], /* filename.N */ oldfile[1024]; /* filename.O */ /* * Synchronize changes to disk if SyncOnClose is enabled. */ if (SyncOnClose) { if (cupsFileFlush(fp)) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to write changes to \"%s\": %s", filename, strerror(errno)); cupsFileClose(fp); return (-1); } if (fsync(cupsFileNumber(fp))) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to sync changes to \"%s\": %s", filename, strerror(errno)); cupsFileClose(fp); return (-1); } } /* * First close the file... */ if (cupsFileClose(fp)) return (-1); /* * Then remove "filename.O", rename "filename" to "filename.O", and rename * "filename.N" to "filename". */ snprintf(newfile, sizeof(newfile), "%s.N", filename); snprintf(oldfile, sizeof(oldfile), "%s.O", filename); if ((cupsdUnlinkOrRemoveFile(oldfile) && errno != ENOENT) || (rename(filename, oldfile) && errno != ENOENT) || rename(newfile, filename)) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to finalize \"%s\": %s", filename, strerror(errno)); return (-1); } return (0); } /* * 'cupsdClosePipe()' - Close a pipe as necessary. */ void cupsdClosePipe(int *fds) /* I - Pipe file descriptors (2) */ { /* * Close file descriptors as needed... */ if (fds[0] >= 0) { close(fds[0]); fds[0] = -1; } if (fds[1] >= 0) { close(fds[1]); fds[1] = -1; } } /* * 'cupsdCreateConfFile()' - Create a configuration file safely. */ cups_file_t * /* O - File pointer */ cupsdCreateConfFile( const char *filename, /* I - Filename */ mode_t mode) /* I - Permissions */ { cups_file_t *fp; /* File pointer */ char newfile[1024]; /* filename.N */ snprintf(newfile, sizeof(newfile), "%s.N", filename); if ((fp = cupsFileOpen(newfile, "w")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create \"%s\": %s", newfile, strerror(errno)); } else { if (!getuid() && fchown(cupsFileNumber(fp), getuid(), Group)) cupsdLogMessage(CUPSD_LOG_WARN, "Unable to change group for \"%s\": %s", newfile, strerror(errno)); if (fchmod(cupsFileNumber(fp), mode)) cupsdLogMessage(CUPSD_LOG_WARN, "Unable to change permissions for \"%s\": %s", newfile, strerror(errno)); } return (fp); } /* * 'cupsdOpenConfFile()' - Open a configuration file. * * This function looks for "filename.O" if "filename" does not exist and does * a rename as needed. */ cups_file_t * /* O - File pointer */ cupsdOpenConfFile(const char *filename) /* I - Filename */ { cups_file_t *fp; /* File pointer */ if ((fp = cupsFileOpen(filename, "r")) == NULL) { if (errno == ENOENT) { /* * Try opening the backup file... */ char oldfile[1024]; /* filename.O */ snprintf(oldfile, sizeof(oldfile), "%s.O", filename); fp = cupsFileOpen(oldfile, "r"); } else cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open \"%s\": %s", filename, strerror(errno)); } return (fp); } /* * 'cupsdOpenPipe()' - Create a pipe which is closed on exec. */ int /* O - 0 on success, -1 on error */ cupsdOpenPipe(int *fds) /* O - Pipe file descriptors (2) */ { /* * Create the pipe... */ if (pipe(fds)) { fds[0] = -1; fds[1] = -1; return (-1); } /* * Set the "close on exec" flag on each end of the pipe... */ if (fcntl(fds[0], F_SETFD, fcntl(fds[0], F_GETFD) | FD_CLOEXEC)) { close(fds[0]); close(fds[1]); fds[0] = -1; fds[1] = -1; return (-1); } if (fcntl(fds[1], F_SETFD, fcntl(fds[1], F_GETFD) | FD_CLOEXEC)) { close(fds[0]); close(fds[1]); fds[0] = -1; fds[1] = -1; return (-1); } /* * Return 0 indicating success... */ return (0); } /* * 'cupsdRemoveFile()' - Remove a file securely. */ int /* O - 0 on success, -1 on error */ cupsdRemoveFile(const char *filename) /* I - File to remove */ { #ifdef HAVE_REMOVEFILE /* * See if the file exists... */ if (access(filename, 0)) return (0); cupsdLogMessage(CUPSD_LOG_DEBUG, "Securely removing \"%s\".", filename); /* * Remove the file... */ return (removefile(filename, NULL, REMOVEFILE_SECURE_1_PASS)); #else int fd; /* File descriptor */ struct stat info; /* File information */ char buffer[512]; /* Data buffer */ int i; /* Looping var */ /* * See if the file exists... */ if (access(filename, 0)) return (0); cupsdLogMessage(CUPSD_LOG_DEBUG, "Securely removing \"%s\".", filename); /* * First open the file for writing in exclusive mode. */ if ((fd = open(filename, O_WRONLY | O_EXCL)) < 0) return (-1); /* * Delete the file now - it will still be around as long as the file is * open... */ if (unlink(filename)) { close(fd); return (-1); } /* * Then get the file size... */ if (fstat(fd, &info)) { close(fd); return (-1); } /* * Overwrite the file with random data. */ CUPS_SRAND(time(NULL)); for (i = 0; i < sizeof(buffer); i ++) buffer[i] = CUPS_RAND(); if (overwrite_data(fd, buffer, sizeof(buffer), (int)info.st_size)) { close(fd); return (-1); } /* * Close the file, which will lead to the actual deletion, and return... */ return (close(fd)); #endif /* HAVE_REMOVEFILE */ } /* * 'cupsdUnlinkOrRemoveFile()' - Unlink or securely remove a file depending * on the configuration. */ int /* O - 0 on success, -1 on error */ cupsdUnlinkOrRemoveFile( const char *filename) /* I - Filename */ { if (Classification) return (cupsdRemoveFile(filename)); else return (unlink(filename)); } #ifndef HAVE_REMOVEFILE /* * 'overwrite_data()' - Overwrite the data in a file. */ static int /* O - 0 on success, -1 on error */ overwrite_data(int fd, /* I - File descriptor */ const char *buffer, /* I - Buffer to write */ int bufsize, /* I - Size of buffer */ int filesize) /* I - Size of file */ { int bytes; /* Bytes to write/written */ /* * Start at the beginning of the file... */ if (lseek(fd, 0, SEEK_SET) < 0) return (-1); /* * Fill the file with the provided data... */ while (filesize > 0) { if (filesize > bufsize) bytes = bufsize; else bytes = filesize; if ((bytes = write(fd, buffer, (size_t)bytes)) < 0) return (-1); filesize -= bytes; } /* * Force the changes to disk... */ return (fsync(fd)); } #endif /* HAVE_REMOVEFILE */ cups-2.2.7/scheduler/filter.c000664 000765 000024 00000030617 13255074424 016571 0ustar00msweetstaff000000 000000 /* * File type conversion routines for CUPS. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include "mime.h" /* * Local types... */ typedef struct _mime_typelist_s /**** List of source types ****/ { struct _mime_typelist_s *next; /* Next source type */ mime_type_t *src; /* Source type */ } _mime_typelist_t; /* * Local functions... */ static int mime_compare_filters(mime_filter_t *, mime_filter_t *); static int mime_compare_srcs(mime_filter_t *, mime_filter_t *); static cups_array_t *mime_find_filters(mime_t *mime, mime_type_t *src, size_t srcsize, mime_type_t *dst, int *cost, _mime_typelist_t *visited); /* * 'mimeAddFilter()' - Add a filter to the current MIME database. */ mime_filter_t * /* O - New filter */ mimeAddFilter(mime_t *mime, /* I - MIME database */ mime_type_t *src, /* I - Source type */ mime_type_t *dst, /* I - Destination type */ int cost, /* I - Relative time/resource cost */ const char *filter) /* I - Filter program to run */ { mime_filter_t *temp; /* New filter */ DEBUG_printf(("mimeAddFilter(mime=%p, src=%p(%s/%s), dst=%p(%s/%s), cost=%d, " "filter=\"%s\")", mime, src, src ? src->super : "???", src ? src->type : "???", dst, dst ? dst->super : "???", dst ? dst->type : "???", cost, filter)); /* * Range-check the input... */ if (!mime || !src || !dst || !filter) { DEBUG_puts("1mimeAddFilter: Returning NULL."); return (NULL); } /* * See if we already have an existing filter for the given source and * destination... */ if ((temp = mimeFilterLookup(mime, src, dst)) != NULL) { /* * Yup, does the existing filter have a higher cost? If so, copy the * filter and cost to the existing filter entry and return it... */ if (temp->cost > cost) { DEBUG_printf(("1mimeAddFilter: Replacing filter \"%s\", cost %d.", temp->filter, temp->cost)); temp->cost = cost; strlcpy(temp->filter, filter, sizeof(temp->filter)); } } else { /* * Nope, add a new one... */ if (!mime->filters) mime->filters = cupsArrayNew((cups_array_func_t)mime_compare_filters, NULL); if (!mime->filters) return (NULL); if ((temp = calloc(1, sizeof(mime_filter_t))) == NULL) return (NULL); /* * Copy the information over and sort if necessary... */ temp->src = src; temp->dst = dst; temp->cost = cost; strlcpy(temp->filter, filter, sizeof(temp->filter)); DEBUG_puts("1mimeAddFilter: Adding new filter."); cupsArrayAdd(mime->filters, temp); cupsArrayAdd(mime->srcs, temp); } /* * Return the new/updated filter... */ DEBUG_printf(("1mimeAddFilter: Returning %p.", temp)); return (temp); } /* * 'mimeFilter()' - Find the fastest way to convert from one type to another. */ cups_array_t * /* O - Array of filters to run */ mimeFilter(mime_t *mime, /* I - MIME database */ mime_type_t *src, /* I - Source file type */ mime_type_t *dst, /* I - Destination file type */ int *cost) /* O - Cost of filters */ { DEBUG_printf(("mimeFilter(mime=%p, src=%p(%s/%s), dst=%p(%s/%s), " "cost=%p(%d))", mime, src, src ? src->super : "???", src ? src->type : "???", dst, dst ? dst->super : "???", dst ? dst->type : "???", cost, cost ? *cost : 0)); return (mimeFilter2(mime, src, 0, dst, cost)); } /* * 'mimeFilter2()' - Find the fastest way to convert from one type to another, * including file size. */ cups_array_t * /* O - Array of filters to run */ mimeFilter2(mime_t *mime, /* I - MIME database */ mime_type_t *src, /* I - Source file type */ size_t srcsize, /* I - Size of source file */ mime_type_t *dst, /* I - Destination file type */ int *cost) /* O - Cost of filters */ { cups_array_t *filters; /* Array of filters to run */ /* * Range-check the input... */ DEBUG_printf(("mimeFilter2(mime=%p, src=%p(%s/%s), srcsize=" CUPS_LLFMT ", dst=%p(%s/%s), cost=%p(%d))", mime, src, src ? src->super : "???", src ? src->type : "???", CUPS_LLCAST srcsize, dst, dst ? dst->super : "???", dst ? dst->type : "???", cost, cost ? *cost : 0)); if (cost) *cost = 0; if (!mime || !src || !dst) return (NULL); /* * (Re)build the source lookup array as needed... */ if (!mime->srcs) { mime_filter_t *current; /* Current filter */ mime->srcs = cupsArrayNew((cups_array_func_t)mime_compare_srcs, NULL); for (current = mimeFirstFilter(mime); current; current = mimeNextFilter(mime)) cupsArrayAdd(mime->srcs, current); } /* * Find the filters... */ filters = mime_find_filters(mime, src, srcsize, dst, cost, NULL); DEBUG_printf(("1mimeFilter2: Returning %d filter(s), cost %d:", cupsArrayCount(filters), cost ? *cost : -1)); #ifdef DEBUG { mime_filter_t *filter; /* Current filter */ for (filter = (mime_filter_t *)cupsArrayFirst(filters); filter; filter = (mime_filter_t *)cupsArrayNext(filters)) DEBUG_printf(("1mimeFilter2: %s/%s %s/%s %d %s", filter->src->super, filter->src->type, filter->dst->super, filter->dst->type, filter->cost, filter->filter)); } #endif /* DEBUG */ return (filters); } /* * 'mimeFilterLookup()' - Lookup a filter. */ mime_filter_t * /* O - Filter for src->dst */ mimeFilterLookup(mime_t *mime, /* I - MIME database */ mime_type_t *src, /* I - Source type */ mime_type_t *dst) /* I - Destination type */ { mime_filter_t key, /* Key record for filter search */ *filter; /* Matching filter */ DEBUG_printf(("2mimeFilterLookup(mime=%p, src=%p(%s/%s), dst=%p(%s/%s))", mime, src, src ? src->super : "???", src ? src->type : "???", dst, dst ? dst->super : "???", dst ? dst->type : "???")); key.src = src; key.dst = dst; filter = (mime_filter_t *)cupsArrayFind(mime->filters, &key); DEBUG_printf(("3mimeFilterLookup: Returning %p(%s).", filter, filter ? filter->filter : "???")); return (filter); } /* * 'mime_compare_filters()' - Compare two filters. */ static int /* O - Comparison result */ mime_compare_filters(mime_filter_t *f0, /* I - First filter */ mime_filter_t *f1) /* I - Second filter */ { int i; /* Result of comparison */ if ((i = strcmp(f0->src->super, f1->src->super)) == 0) if ((i = strcmp(f0->src->type, f1->src->type)) == 0) if ((i = strcmp(f0->dst->super, f1->dst->super)) == 0) i = strcmp(f0->dst->type, f1->dst->type); return (i); } /* * 'mime_compare_srcs()' - Compare two filter source types. */ static int /* O - Comparison result */ mime_compare_srcs(mime_filter_t *f0, /* I - First filter */ mime_filter_t *f1) /* I - Second filter */ { int i; /* Result of comparison */ if ((i = strcmp(f0->src->super, f1->src->super)) == 0) i = strcmp(f0->src->type, f1->src->type); return (i); } /* * 'mime_find_filters()' - Find the filters to convert from one type to another. */ static cups_array_t * /* O - Array of filters to run */ mime_find_filters( mime_t *mime, /* I - MIME database */ mime_type_t *src, /* I - Source file type */ size_t srcsize, /* I - Size of source file */ mime_type_t *dst, /* I - Destination file type */ int *cost, /* O - Cost of filters */ _mime_typelist_t *list) /* I - Source types we've used */ { int tempcost, /* Temporary cost */ mincost; /* Current minimum */ cups_array_t *temp, /* Temporary filter */ *mintemp; /* Current minimum */ mime_filter_t *current, /* Current filter */ srckey; /* Source type key */ _mime_typelist_t listnode, /* New list node */ *listptr; /* Pointer in list */ DEBUG_printf(("2mime_find_filters(mime=%p, src=%p(%s/%s), srcsize=" CUPS_LLFMT ", dst=%p(%s/%s), cost=%p, list=%p)", mime, src, src->super, src->type, CUPS_LLCAST srcsize, dst, dst->super, dst->type, cost, list)); /* * See if there is a filter that can convert the files directly... */ if ((current = mimeFilterLookup(mime, src, dst)) != NULL && (current->maxsize == 0 || srcsize <= current->maxsize)) { /* * Got a direct filter! */ DEBUG_puts("3mime_find_filters: Direct filter found."); if ((mintemp = cupsArrayNew(NULL, NULL)) == NULL) { DEBUG_puts("3mime_find_filters: Returning NULL (out of memory)."); return (NULL); } cupsArrayAdd(mintemp, current); mincost = current->cost; if (!cost) { DEBUG_printf(("3mime_find_filters: Returning 1 filter, cost %d:", mincost)); DEBUG_printf(("3mime_find_filters: %s/%s %s/%s %d %s", current->src->super, current->src->type, current->dst->super, current->dst->type, current->cost, current->filter)); return (mintemp); } } else { /* * No direct filter... */ mintemp = NULL; mincost = 9999999; } /* * Initialize this node in the type list... */ listnode.next = list; /* * OK, now look for filters from the source type to any other type... */ srckey.src = src; for (current = (mime_filter_t *)cupsArrayFind(mime->srcs, &srckey); current && current->src == src; current = (mime_filter_t *)cupsArrayNext(mime->srcs)) { /* * See if we have already tried the destination type as a source * type (this avoids extra filter looping...) */ mime_type_t *current_dst; /* Current destination type */ if (current->maxsize > 0 && srcsize > current->maxsize) continue; for (listptr = list, current_dst = current->dst; listptr; listptr = listptr->next) if (current_dst == listptr->src) break; if (listptr) continue; /* * See if we have any filters that can convert from the destination type * of this filter to the final type... */ listnode.src = current->src; cupsArraySave(mime->srcs); temp = mime_find_filters(mime, current->dst, srcsize, dst, &tempcost, &listnode); cupsArrayRestore(mime->srcs); if (!temp) continue; if (!cost) { DEBUG_printf(("3mime_find_filters: Returning %d filter(s), cost %d:", cupsArrayCount(temp), tempcost)); #ifdef DEBUG for (current = (mime_filter_t *)cupsArrayFirst(temp); current; current = (mime_filter_t *)cupsArrayNext(temp)) DEBUG_printf(("3mime_find_filters: %s/%s %s/%s %d %s", current->src->super, current->src->type, current->dst->super, current->dst->type, current->cost, current->filter)); #endif /* DEBUG */ return (temp); } /* * Found a match; see if this one is less costly than the last (if * any...) */ tempcost += current->cost; if (tempcost < mincost) { cupsArrayDelete(mintemp); /* * Hey, we got a match! Add the current filter to the beginning of the * filter list... */ mintemp = temp; mincost = tempcost; cupsArrayInsert(mintemp, current); } else cupsArrayDelete(temp); } if (mintemp) { /* * Hey, we got a match! */ DEBUG_printf(("3mime_find_filters: Returning %d filter(s), cost %d:", cupsArrayCount(mintemp), mincost)); #ifdef DEBUG for (current = (mime_filter_t *)cupsArrayFirst(mintemp); current; current = (mime_filter_t *)cupsArrayNext(mintemp)) DEBUG_printf(("3mime_find_filters: %s/%s %s/%s %d %s", current->src->super, current->src->type, current->dst->super, current->dst->type, current->cost, current->filter)); #endif /* DEBUG */ if (cost) *cost = mincost; return (mintemp); } DEBUG_puts("3mime_find_filters: Returning NULL (no matches)."); return (NULL); } cups-2.2.7/scheduler/ipp.c000664 000765 000024 00001152422 13255074424 016074 0ustar00msweetstaff000000 000000 /* * IPP routines for the CUPS scheduler. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * This file contains Kerberos support code, copyright 2006 by * Jelmer Vernooij. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #include #ifdef __APPLE__ /*# include extern CFUUIDRef ColorSyncCreateUUIDFromUInt32(unsigned id); # include */ # ifdef HAVE_MEMBERSHIP_H # include # endif /* HAVE_MEMBERSHIP_H */ # ifdef HAVE_MEMBERSHIPPRIV_H # include # else extern int mbr_user_name_to_uuid(const char* name, uuid_t uu); extern int mbr_group_name_to_uuid(const char* name, uuid_t uu); extern int mbr_check_membership_by_id(uuid_t user, gid_t group, int* ismember); # endif /* HAVE_MEMBERSHIPPRIV_H */ #endif /* __APPLE__ */ /* * Local functions... */ static void accept_jobs(cupsd_client_t *con, ipp_attribute_t *uri); static void add_class(cupsd_client_t *con, ipp_attribute_t *uri); static int add_file(cupsd_client_t *con, cupsd_job_t *job, mime_type_t *filetype, int compression); static cupsd_job_t *add_job(cupsd_client_t *con, cupsd_printer_t *printer, mime_type_t *filetype); static void add_job_subscriptions(cupsd_client_t *con, cupsd_job_t *job); static void add_job_uuid(cupsd_job_t *job); static void add_printer(cupsd_client_t *con, ipp_attribute_t *uri); static void add_printer_state_reasons(cupsd_client_t *con, cupsd_printer_t *p); static void add_queued_job_count(cupsd_client_t *con, cupsd_printer_t *p); static void apply_printer_defaults(cupsd_printer_t *printer, cupsd_job_t *job); static void authenticate_job(cupsd_client_t *con, ipp_attribute_t *uri); static void cancel_all_jobs(cupsd_client_t *con, ipp_attribute_t *uri); static void cancel_job(cupsd_client_t *con, ipp_attribute_t *uri); static void cancel_subscription(cupsd_client_t *con, int id); static int check_rss_recipient(const char *recipient); static int check_quotas(cupsd_client_t *con, cupsd_printer_t *p); static void close_job(cupsd_client_t *con, ipp_attribute_t *uri); static void copy_attrs(ipp_t *to, ipp_t *from, cups_array_t *ra, ipp_tag_t group, int quickcopy, cups_array_t *exclude); static int copy_banner(cupsd_client_t *con, cupsd_job_t *job, const char *name); static int copy_file(const char *from, const char *to, mode_t mode); static int copy_model(cupsd_client_t *con, const char *from, const char *to); static void copy_job_attrs(cupsd_client_t *con, cupsd_job_t *job, cups_array_t *ra, cups_array_t *exclude); static void copy_printer_attrs(cupsd_client_t *con, cupsd_printer_t *printer, cups_array_t *ra); static void copy_subscription_attrs(cupsd_client_t *con, cupsd_subscription_t *sub, cups_array_t *ra, cups_array_t *exclude); static void create_job(cupsd_client_t *con, ipp_attribute_t *uri); static void create_local_printer(cupsd_client_t *con); static cups_array_t *create_requested_array(ipp_t *request); static void create_subscriptions(cupsd_client_t *con, ipp_attribute_t *uri); static void delete_printer(cupsd_client_t *con, ipp_attribute_t *uri); static void get_default(cupsd_client_t *con); static void get_devices(cupsd_client_t *con); static void get_document(cupsd_client_t *con, ipp_attribute_t *uri); static void get_jobs(cupsd_client_t *con, ipp_attribute_t *uri); static void get_job_attrs(cupsd_client_t *con, ipp_attribute_t *uri); static void get_notifications(cupsd_client_t *con); static void get_ppd(cupsd_client_t *con, ipp_attribute_t *uri); static void get_ppds(cupsd_client_t *con); static void get_printers(cupsd_client_t *con, int type); static void get_printer_attrs(cupsd_client_t *con, ipp_attribute_t *uri); static void get_printer_supported(cupsd_client_t *con, ipp_attribute_t *uri); static void get_subscription_attrs(cupsd_client_t *con, int sub_id); static void get_subscriptions(cupsd_client_t *con, ipp_attribute_t *uri); static const char *get_username(cupsd_client_t *con); static void hold_job(cupsd_client_t *con, ipp_attribute_t *uri); static void hold_new_jobs(cupsd_client_t *con, ipp_attribute_t *uri); static void move_job(cupsd_client_t *con, ipp_attribute_t *uri); static int ppd_parse_line(const char *line, char *option, int olen, char *choice, int clen); static void print_job(cupsd_client_t *con, ipp_attribute_t *uri); static void read_job_ticket(cupsd_client_t *con); static void reject_jobs(cupsd_client_t *con, ipp_attribute_t *uri); static void release_held_new_jobs(cupsd_client_t *con, ipp_attribute_t *uri); static void release_job(cupsd_client_t *con, ipp_attribute_t *uri); static void renew_subscription(cupsd_client_t *con, int sub_id); static void restart_job(cupsd_client_t *con, ipp_attribute_t *uri); static void save_auth_info(cupsd_client_t *con, cupsd_job_t *job, ipp_attribute_t *auth_info); static void send_document(cupsd_client_t *con, ipp_attribute_t *uri); static void send_http_error(cupsd_client_t *con, http_status_t status, cupsd_printer_t *printer); static void send_ipp_status(cupsd_client_t *con, ipp_status_t status, const char *message, ...) __attribute__((__format__(__printf__, 3, 4))); static void set_default(cupsd_client_t *con, ipp_attribute_t *uri); static void set_job_attrs(cupsd_client_t *con, ipp_attribute_t *uri); static void set_printer_attrs(cupsd_client_t *con, ipp_attribute_t *uri); static int set_printer_defaults(cupsd_client_t *con, cupsd_printer_t *printer); static void start_printer(cupsd_client_t *con, ipp_attribute_t *uri); static void stop_printer(cupsd_client_t *con, ipp_attribute_t *uri); static void url_encode_attr(ipp_attribute_t *attr, char *buffer, size_t bufsize); static char *url_encode_string(const char *s, char *buffer, size_t bufsize); static int user_allowed(cupsd_printer_t *p, const char *username); static void validate_job(cupsd_client_t *con, ipp_attribute_t *uri); static int validate_name(const char *name); static int validate_user(cupsd_job_t *job, cupsd_client_t *con, const char *owner, char *username, size_t userlen); /* * 'cupsdProcessIPPRequest()' - Process an incoming IPP request. */ int /* O - 1 on success, 0 on failure */ cupsdProcessIPPRequest( cupsd_client_t *con) /* I - Client connection */ { ipp_tag_t group; /* Current group tag */ ipp_attribute_t *attr; /* Current attribute */ ipp_attribute_t *charset; /* Character set attribute */ ipp_attribute_t *language; /* Language attribute */ ipp_attribute_t *uri = NULL; /* Printer or job URI attribute */ ipp_attribute_t *username; /* requesting-user-name attr */ int sub_id; /* Subscription ID */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdProcessIPPRequest(%p[%d]): operation_id=%04x(%s)", con, con->number, con->request->request.op.operation_id, ippOpString(con->request->request.op.operation_id)); if (LogLevel >= CUPSD_LOG_DEBUG2) { for (group = IPP_TAG_ZERO, attr = ippFirstAttribute(con->request); attr; attr = ippNextAttribute(con->request)) { const char *name; /* Attribute name */ char value[1024]; /* Attribute value */ if (group != ippGetGroupTag(attr)) { group = ippGetGroupTag(attr); if (group != IPP_TAG_ZERO) cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdProcessIPPRequest: %s", ippTagString(group)); } if ((name = ippGetName(attr)) == NULL) continue; ippAttributeString(attr, value, sizeof(value)); cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdProcessIPPRequest: %s %s%s '%s'", name, ippGetCount(attr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attr)), value); } } /* * First build an empty response message for this request... */ con->response = ippNew(); con->response->request.status.version[0] = con->request->request.op.version[0]; con->response->request.status.version[1] = con->request->request.op.version[1]; con->response->request.status.request_id = con->request->request.op.request_id; /* * Then validate the request header and required attributes... */ if (con->request->request.any.version[0] != 1 && con->request->request.any.version[0] != 2) { /* * Return an error, since we only support IPP 1.x and 2.x. */ cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Bad request version number %d.%d", IPP_VERSION_NOT_SUPPORTED, con->http->hostname, con->request->request.any.version[0], con->request->request.any.version[1]); send_ipp_status(con, IPP_VERSION_NOT_SUPPORTED, _("Bad request version number %d.%d."), con->request->request.any.version[0], con->request->request.any.version[1]); } else if (con->request->request.any.request_id < 1) { /* * Return an error, since request IDs must be between 1 and 2^31-1 */ cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Bad request ID %d", IPP_BAD_REQUEST, con->http->hostname, con->request->request.any.request_id); send_ipp_status(con, IPP_BAD_REQUEST, _("Bad request ID %d."), con->request->request.any.request_id); } else if (!con->request->attrs) { cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s No attributes in request", IPP_BAD_REQUEST, con->http->hostname); send_ipp_status(con, IPP_BAD_REQUEST, _("No attributes in request.")); } else { /* * Make sure that the attributes are provided in the correct order and * don't repeat groups... */ for (attr = con->request->attrs, group = attr->group_tag; attr; attr = attr->next) if (attr->group_tag < group && attr->group_tag != IPP_TAG_ZERO) { /* * Out of order; return an error... */ cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Attribute groups are out of order", IPP_BAD_REQUEST, con->http->hostname); send_ipp_status(con, IPP_BAD_REQUEST, _("Attribute groups are out of order (%x < %x)."), attr->group_tag, group); break; } else group = attr->group_tag; if (!attr) { /* * Then make sure that the first three attributes are: * * attributes-charset * attributes-natural-language * printer-uri/job-uri */ attr = con->request->attrs; if (attr && attr->name && !strcmp(attr->name, "attributes-charset") && (attr->value_tag & IPP_TAG_MASK) == IPP_TAG_CHARSET) charset = attr; else charset = NULL; if (attr) attr = attr->next; if (attr && attr->name && !strcmp(attr->name, "attributes-natural-language") && (attr->value_tag & IPP_TAG_MASK) == IPP_TAG_LANGUAGE) { language = attr; /* * Reset language for this request if different from Accept-Language. */ if (!con->language || strcmp(attr->values[0].string.text, con->language->language)) { cupsLangFree(con->language); con->language = cupsLangGet(attr->values[0].string.text); } } else language = NULL; if ((attr = ippFindAttribute(con->request, "printer-uri", IPP_TAG_URI)) != NULL) uri = attr; else if ((attr = ippFindAttribute(con->request, "job-uri", IPP_TAG_URI)) != NULL) uri = attr; else if (con->request->request.op.operation_id == CUPS_GET_PPD) uri = ippFindAttribute(con->request, "ppd-name", IPP_TAG_NAME); else uri = NULL; if (charset) ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, charset->values[0].string.text); else ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "utf-8"); if (language) ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, language->values[0].string.text); else ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, DefaultLanguage); if (charset && _cups_strcasecmp(charset->values[0].string.text, "us-ascii") && _cups_strcasecmp(charset->values[0].string.text, "utf-8")) { /* * Bad character set... */ cupsdLogMessage(CUPSD_LOG_ERROR, "Unsupported character set \"%s\"", charset->values[0].string.text); cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Unsupported attributes-charset value \"%s\"", IPP_CHARSET, con->http->hostname, charset->values[0].string.text); send_ipp_status(con, IPP_BAD_REQUEST, _("Unsupported character set \"%s\"."), charset->values[0].string.text); } else if (!charset || !language || (!uri && con->request->request.op.operation_id != CUPS_GET_DEFAULT && con->request->request.op.operation_id != CUPS_GET_PRINTERS && con->request->request.op.operation_id != CUPS_GET_CLASSES && con->request->request.op.operation_id != CUPS_GET_DEVICES && con->request->request.op.operation_id != CUPS_GET_PPDS)) { /* * Return an error, since attributes-charset, * attributes-natural-language, and printer-uri/job-uri are required * for all operations. */ if (!charset) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing attributes-charset attribute"); cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Missing attributes-charset attribute", IPP_BAD_REQUEST, con->http->hostname); } if (!language) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing attributes-natural-language attribute"); cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Missing attributes-natural-language attribute", IPP_BAD_REQUEST, con->http->hostname); } if (!uri) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing printer-uri, job-uri, or ppd-name " "attribute"); cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Missing printer-uri, job-uri, or ppd-name " "attribute", IPP_BAD_REQUEST, con->http->hostname); } cupsdLogMessage(CUPSD_LOG_DEBUG, "Request attributes follow..."); for (attr = con->request->attrs; attr; attr = attr->next) cupsdLogMessage(CUPSD_LOG_DEBUG, "attr \"%s\": group_tag = %x, value_tag = %x", attr->name ? attr->name : "(null)", attr->group_tag, attr->value_tag); cupsdLogMessage(CUPSD_LOG_DEBUG, "End of attributes..."); send_ipp_status(con, IPP_BAD_REQUEST, _("Missing required attributes.")); } else { /* * OK, all the checks pass so far; make sure requesting-user-name is * not "root" from a remote host... */ if ((username = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_NAME)) != NULL) { /* * Check for root user... */ if (!strcmp(username->values[0].string.text, "root") && _cups_strcasecmp(con->http->hostname, "localhost") && strcmp(con->username, "root")) { /* * Remote unauthenticated user masquerading as local root... */ ippSetString(con->request, &username, 0, RemoteRoot); } } if ((attr = ippFindAttribute(con->request, "notify-subscription-id", IPP_TAG_INTEGER)) != NULL) sub_id = attr->values[0].integer; else sub_id = 0; /* * Then try processing the operation... */ if (uri) cupsdLogMessage(CUPSD_LOG_DEBUG, "%s %s", ippOpString(con->request->request.op.operation_id), uri->values[0].string.text); else cupsdLogMessage(CUPSD_LOG_DEBUG, "%s", ippOpString(con->request->request.op.operation_id)); switch (con->request->request.op.operation_id) { case IPP_OP_PRINT_JOB : print_job(con, uri); break; case IPP_OP_VALIDATE_JOB : validate_job(con, uri); break; case IPP_OP_CREATE_JOB : create_job(con, uri); break; case IPP_OP_SEND_DOCUMENT : send_document(con, uri); break; case IPP_OP_CANCEL_JOB : cancel_job(con, uri); break; case IPP_OP_GET_JOB_ATTRIBUTES : get_job_attrs(con, uri); break; case IPP_OP_GET_JOBS : get_jobs(con, uri); break; case IPP_OP_GET_PRINTER_ATTRIBUTES : get_printer_attrs(con, uri); break; case IPP_OP_GET_PRINTER_SUPPORTED_VALUES : get_printer_supported(con, uri); break; case IPP_OP_HOLD_JOB : hold_job(con, uri); break; case IPP_OP_RELEASE_JOB : release_job(con, uri); break; case IPP_OP_RESTART_JOB : restart_job(con, uri); break; case IPP_OP_PAUSE_PRINTER : stop_printer(con, uri); break; case IPP_OP_RESUME_PRINTER : start_printer(con, uri); break; case IPP_OP_PURGE_JOBS : case IPP_OP_CANCEL_JOBS : case IPP_OP_CANCEL_MY_JOBS : cancel_all_jobs(con, uri); break; case IPP_OP_SET_JOB_ATTRIBUTES : set_job_attrs(con, uri); break; case IPP_OP_SET_PRINTER_ATTRIBUTES : set_printer_attrs(con, uri); break; case IPP_OP_HOLD_NEW_JOBS : hold_new_jobs(con, uri); break; case IPP_OP_RELEASE_HELD_NEW_JOBS : release_held_new_jobs(con, uri); break; case IPP_OP_CLOSE_JOB : close_job(con, uri); break; case IPP_OP_CUPS_GET_DEFAULT : get_default(con); break; case IPP_OP_CUPS_GET_PRINTERS : get_printers(con, 0); break; case IPP_OP_CUPS_GET_CLASSES : get_printers(con, CUPS_PRINTER_CLASS); break; case IPP_OP_CUPS_ADD_MODIFY_PRINTER : add_printer(con, uri); break; case IPP_OP_CUPS_DELETE_PRINTER : delete_printer(con, uri); break; case IPP_OP_CUPS_ADD_MODIFY_CLASS : add_class(con, uri); break; case IPP_OP_CUPS_DELETE_CLASS : delete_printer(con, uri); break; case IPP_OP_CUPS_ACCEPT_JOBS : case IPP_OP_ENABLE_PRINTER : accept_jobs(con, uri); break; case IPP_OP_CUPS_REJECT_JOBS : case IPP_OP_DISABLE_PRINTER : reject_jobs(con, uri); break; case IPP_OP_CUPS_SET_DEFAULT : set_default(con, uri); break; case IPP_OP_CUPS_GET_DEVICES : get_devices(con); break; case IPP_OP_CUPS_GET_DOCUMENT : get_document(con, uri); break; case IPP_OP_CUPS_GET_PPD : get_ppd(con, uri); break; case IPP_OP_CUPS_GET_PPDS : get_ppds(con); break; case IPP_OP_CUPS_MOVE_JOB : move_job(con, uri); break; case IPP_OP_CUPS_AUTHENTICATE_JOB : authenticate_job(con, uri); break; case IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS : case IPP_OP_CREATE_JOB_SUBSCRIPTIONS : create_subscriptions(con, uri); break; case IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES : get_subscription_attrs(con, sub_id); break; case IPP_OP_GET_SUBSCRIPTIONS : get_subscriptions(con, uri); break; case IPP_OP_RENEW_SUBSCRIPTION : renew_subscription(con, sub_id); break; case IPP_OP_CANCEL_SUBSCRIPTION : cancel_subscription(con, sub_id); break; case IPP_OP_GET_NOTIFICATIONS : get_notifications(con); break; case IPP_OP_CUPS_CREATE_LOCAL_PRINTER : create_local_printer(con); break; default : cupsdAddEvent(CUPSD_EVENT_SERVER_AUDIT, NULL, NULL, "%04X %s Operation %04X (%s) not supported", IPP_OPERATION_NOT_SUPPORTED, con->http->hostname, con->request->request.op.operation_id, ippOpString(con->request->request.op.operation_id)); send_ipp_status(con, IPP_OPERATION_NOT_SUPPORTED, _("%s not supported."), ippOpString( con->request->request.op.operation_id)); break; } } } } if (con->response) { /* * Sending data from the scheduler... */ cupsdLogMessage(con->response->request.status.status_code >= IPP_BAD_REQUEST && con->response->request.status.status_code != IPP_NOT_FOUND ? CUPSD_LOG_ERROR : CUPSD_LOG_DEBUG, "[Client %d] Returning IPP %s for %s (%s) from %s", con->number, ippErrorString(con->response->request.status.status_code), ippOpString(con->request->request.op.operation_id), uri ? uri->values[0].string.text : "no URI", con->http->hostname); httpClearFields(con->http); #ifdef CUPSD_USE_CHUNKING /* * Because older versions of CUPS (1.1.17 and older) and some IPP * clients do not implement chunking properly, we cannot use * chunking by default. This may become the default in future * CUPS releases, or we might add a configuration directive for * it. */ if (con->http->version == HTTP_1_1) { cupsdLogMessage(CUPSD_LOG_DEBUG, "[Client %d] Transfer-Encoding: chunked", con->number); cupsdSetLength(con->http, 0); } else #endif /* CUPSD_USE_CHUNKING */ { size_t length; /* Length of response */ length = ippLength(con->response); if (con->file >= 0 && !con->pipe_pid) { struct stat fileinfo; /* File information */ if (!fstat(con->file, &fileinfo)) length += (size_t)fileinfo.st_size; } cupsdLogMessage(CUPSD_LOG_DEBUG, "[Client %d] Content-Length: " CUPS_LLFMT, con->number, CUPS_LLCAST length); httpSetLength(con->http, length); } if (cupsdSendHeader(con, HTTP_OK, "application/ipp", CUPSD_AUTH_NONE)) { /* * Tell the caller the response header was sent successfully... */ cupsdAddSelect(httpGetFd(con->http), (cupsd_selfunc_t)cupsdReadClient, (cupsd_selfunc_t)cupsdWriteClient, con); return (1); } else { /* * Tell the caller the response header could not be sent... */ return (0); } } else { /* * Sending data from a subprocess like cups-deviced; tell the caller * everything is A-OK so far... */ return (1); } } /* * 'cupsdTimeoutJob()' - Timeout a job waiting on job files. */ int /* O - 0 on success, -1 on error */ cupsdTimeoutJob(cupsd_job_t *job) /* I - Job to timeout */ { cupsd_printer_t *printer; /* Destination printer or class */ ipp_attribute_t *attr; /* job-sheets attribute */ int kbytes; /* Kilobytes in banner */ job->pending_timeout = 0; /* * See if we need to add the ending sheet... */ if (!cupsdLoadJob(job)) return (-1); printer = cupsdFindDest(job->dest); attr = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME); if (printer && !(printer->type & CUPS_PRINTER_REMOTE) && attr && attr->num_values > 1) { /* * Yes... */ cupsdLogJob(job, CUPSD_LOG_INFO, "Adding end banner page \"%s\".", attr->values[1].string.text); if ((kbytes = copy_banner(NULL, job, attr->values[1].string.text)) < 0) return (-1); cupsdUpdateQuota(printer, job->username, 0, kbytes); } return (0); } /* * 'accept_jobs()' - Accept print jobs to a printer. */ static void accept_jobs(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer or class URI */ { http_status_t status; /* Policy status */ cups_ptype_t dtype; /* Destination type (printer/class) */ cupsd_printer_t *printer; /* Printer data */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "accept_jobs(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } /* * Accept jobs sent to the printer... */ printer->accepting = 1; printer->state_message[0] = '\0'; cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, printer, NULL, "Now accepting jobs."); if (dtype & CUPS_PRINTER_CLASS) { cupsdMarkDirty(CUPSD_DIRTY_CLASSES); cupsdLogMessage(CUPSD_LOG_INFO, "Class \"%s\" now accepting jobs (\"%s\").", printer->name, get_username(con)); } else { cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" now accepting jobs (\"%s\").", printer->name, get_username(con)); } /* * Everything was ok, so return OK status... */ con->response->request.status.status_code = IPP_OK; } /* * 'add_class()' - Add a class to the system. */ static void add_class(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - URI of class */ { http_status_t status; /* Policy status */ int i; /* Looping var */ char scheme[HTTP_MAX_URI], /* Method portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ cupsd_printer_t *pclass, /* Class */ *member; /* Member printer/class */ cups_ptype_t dtype; /* Destination type */ ipp_attribute_t *attr; /* Printer attribute */ int modify; /* Non-zero if we just modified */ int need_restart_job; /* Need to restart job? */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_class(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Do we have a valid URI? */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (strncmp(resource, "/classes/", 9) || strlen(resource) == 9) { /* * No, return an error... */ send_ipp_status(con, IPP_BAD_REQUEST, _("The printer-uri must be of the form " "\"ipp://HOSTNAME/classes/CLASSNAME\".")); return; } /* * Do we have a valid printer name? */ if (!validate_name(resource + 9)) { /* * No, return an error... */ send_ipp_status(con, IPP_BAD_REQUEST, _("The printer-uri \"%s\" contains invalid characters."), uri->values[0].string.text); return; } /* * See if the class already exists; if not, create a new class... */ if ((pclass = cupsdFindClass(resource + 9)) == NULL) { /* * Class doesn't exist; see if we have a printer of the same name... */ if ((pclass = cupsdFindPrinter(resource + 9)) != NULL) { /* * Yes, return an error... */ send_ipp_status(con, IPP_NOT_POSSIBLE, _("A printer named \"%s\" already exists."), resource + 9); return; } /* * No, check the default policy and then add the class... */ if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } pclass = cupsdAddClass(resource + 9); modify = 0; } else if ((status = cupsdCheckPolicy(pclass->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, pclass); return; } else modify = 1; /* * Look for attributes and copy them over as needed... */ need_restart_job = 0; if ((attr = ippFindAttribute(con->request, "printer-location", IPP_TAG_TEXT)) != NULL) cupsdSetString(&pclass->location, attr->values[0].string.text); if ((attr = ippFindAttribute(con->request, "printer-geo-location", IPP_TAG_URI)) != NULL && !strncmp(attr->values[0].string.text, "geo:", 4)) cupsdSetString(&pclass->geo_location, attr->values[0].string.text); if ((attr = ippFindAttribute(con->request, "printer-organization", IPP_TAG_TEXT)) != NULL) cupsdSetString(&pclass->organization, attr->values[0].string.text); if ((attr = ippFindAttribute(con->request, "printer-organizational-unit", IPP_TAG_TEXT)) != NULL) cupsdSetString(&pclass->organizational_unit, attr->values[0].string.text); if ((attr = ippFindAttribute(con->request, "printer-info", IPP_TAG_TEXT)) != NULL) cupsdSetString(&pclass->info, attr->values[0].string.text); if ((attr = ippFindAttribute(con->request, "printer-is-accepting-jobs", IPP_TAG_BOOLEAN)) != NULL && attr->values[0].boolean != pclass->accepting) { cupsdLogMessage(CUPSD_LOG_INFO, "Setting %s printer-is-accepting-jobs to %d (was %d.)", pclass->name, attr->values[0].boolean, pclass->accepting); pclass->accepting = attr->values[0].boolean; cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, pclass, NULL, "%s accepting jobs.", pclass->accepting ? "Now" : "No longer"); } if ((attr = ippFindAttribute(con->request, "printer-is-shared", IPP_TAG_BOOLEAN)) != NULL) { if (pclass->type & CUPS_PRINTER_REMOTE) { /* * Cannot re-share remote printers. */ send_ipp_status(con, IPP_BAD_REQUEST, _("Cannot change printer-is-shared for remote queues.")); if (!modify) cupsdDeletePrinter(pclass, 0); return; } if (pclass->shared && !ippGetBoolean(attr, 0)) cupsdDeregisterPrinter(pclass, 1); cupsdLogMessage(CUPSD_LOG_INFO, "Setting %s printer-is-shared to %d (was %d.)", pclass->name, attr->values[0].boolean, pclass->shared); pclass->shared = ippGetBoolean(attr, 0); } if ((attr = ippFindAttribute(con->request, "printer-state", IPP_TAG_ENUM)) != NULL) { if (attr->values[0].integer != IPP_PRINTER_IDLE && attr->values[0].integer != IPP_PRINTER_STOPPED) { send_ipp_status(con, IPP_BAD_REQUEST, _("Attempt to set %s printer-state to bad value %d."), pclass->name, attr->values[0].integer); if (!modify) cupsdDeletePrinter(pclass, 0); return; } cupsdLogMessage(CUPSD_LOG_INFO, "Setting %s printer-state to %d (was %d.)", pclass->name, attr->values[0].integer, pclass->state); if (attr->values[0].integer == IPP_PRINTER_STOPPED) cupsdStopPrinter(pclass, 0); else { cupsdSetPrinterState(pclass, (ipp_pstate_t)(attr->values[0].integer), 0); need_restart_job = 1; } } if ((attr = ippFindAttribute(con->request, "printer-state-message", IPP_TAG_TEXT)) != NULL) { strlcpy(pclass->state_message, attr->values[0].string.text, sizeof(pclass->state_message)); cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, pclass, NULL, "%s", pclass->state_message); } if ((attr = ippFindAttribute(con->request, "member-uris", IPP_TAG_URI)) != NULL) { /* * Clear the printer array as needed... */ need_restart_job = 1; if (pclass->num_printers > 0) { free(pclass->printers); pclass->num_printers = 0; } /* * Add each printer or class that is listed... */ for (i = 0; i < attr->num_values; i ++) { /* * Search for the printer or class URI... */ if (!cupsdValidateDest(attr->values[i].string.text, &dtype, &member)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); if (!modify) cupsdDeletePrinter(pclass, 0); return; } else if (dtype & CUPS_PRINTER_CLASS) { send_ipp_status(con, IPP_BAD_REQUEST, _("Nested classes are not allowed.")); if (!modify) cupsdDeletePrinter(pclass, 0); return; } /* * Add it to the class... */ cupsdAddPrinterToClass(pclass, member); } } if (!set_printer_defaults(con, pclass)) { if (!modify) cupsdDeletePrinter(pclass, 0); return; } if ((attr = ippFindAttribute(con->request, "auth-info-required", IPP_TAG_KEYWORD)) != NULL) cupsdSetAuthInfoRequired(pclass, NULL, attr); pclass->config_time = time(NULL); /* * Update the printer class attributes and return... */ cupsdSetPrinterAttrs(pclass); cupsdMarkDirty(CUPSD_DIRTY_CLASSES); if (need_restart_job && pclass->job) { /* * Reset the current job to a "pending" status... */ cupsdSetJobState(pclass->job, IPP_JOB_PENDING, CUPSD_JOB_FORCE, "Job restarted because the class was modified."); } cupsdMarkDirty(CUPSD_DIRTY_PRINTCAP); if (modify) { cupsdAddEvent(CUPSD_EVENT_PRINTER_MODIFIED, pclass, NULL, "Class \"%s\" modified by \"%s\".", pclass->name, get_username(con)); cupsdLogMessage(CUPSD_LOG_INFO, "Class \"%s\" modified by \"%s\".", pclass->name, get_username(con)); } else { cupsdAddEvent(CUPSD_EVENT_PRINTER_ADDED, pclass, NULL, "New class \"%s\" added by \"%s\".", pclass->name, get_username(con)); cupsdLogMessage(CUPSD_LOG_INFO, "New class \"%s\" added by \"%s\".", pclass->name, get_username(con)); } con->response->request.status.status_code = IPP_OK; } /* * 'add_file()' - Add a file to a job. */ static int /* O - 0 on success, -1 on error */ add_file(cupsd_client_t *con, /* I - Connection to client */ cupsd_job_t *job, /* I - Job to add to */ mime_type_t *filetype, /* I - Type of file */ int compression) /* I - Compression */ { mime_type_t **filetypes; /* New filetypes array... */ int *compressions; /* New compressions array... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_file(con=%p[%d], job=%d, filetype=%s/%s, " "compression=%d)", con, con ? con->number : -1, job->id, filetype->super, filetype->type, compression); /* * Add the file to the job... */ if (job->num_files == 0) { compressions = (int *)malloc(sizeof(int)); filetypes = (mime_type_t **)malloc(sizeof(mime_type_t *)); } else { compressions = (int *)realloc(job->compressions, (size_t)(job->num_files + 1) * sizeof(int)); filetypes = (mime_type_t **)realloc(job->filetypes, (size_t)(job->num_files + 1) * sizeof(mime_type_t *)); } if (compressions) job->compressions = compressions; if (filetypes) job->filetypes = filetypes; if (!compressions || !filetypes) { cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_PURGE, "Job aborted because the scheduler ran out of memory."); if (con) send_ipp_status(con, IPP_INTERNAL_ERROR, _("Unable to allocate memory for file types.")); return (-1); } job->compressions[job->num_files] = compression; job->filetypes[job->num_files] = filetype; job->num_files ++; job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); return (0); } /* * 'add_job()' - Add a job to a print queue. */ static cupsd_job_t * /* O - Job object */ add_job(cupsd_client_t *con, /* I - Client connection */ cupsd_printer_t *printer, /* I - Destination printer */ mime_type_t *filetype) /* I - First print file type, if any */ { http_status_t status; /* Policy status */ ipp_attribute_t *attr, /* Current attribute */ *auth_info; /* auth-info attribute */ const char *mandatory; /* Current mandatory job attribute */ const char *val; /* Default option value */ int priority; /* Job priority */ cupsd_job_t *job; /* Current job */ char job_uri[HTTP_MAX_URI]; /* Job URI */ int kbytes; /* Size of print file */ int i; /* Looping var */ int lowerpagerange; /* Page range bound */ int exact; /* Did we have an exact match? */ ipp_attribute_t *media_col, /* media-col attribute */ *media_margin; /* media-*-margin attribute */ ipp_t *unsup_col; /* media-col in unsupported response */ static const char * const readonly[] =/* List of read-only attributes */ { "date-time-at-completed", "date-time-at-creation", "date-time-at-processing", "job-detailed-status-messages", "job-document-access-errors", "job-id", "job-impressions-completed", "job-k-octets-completed", "job-media-sheets-completed", "job-pages-completed", "job-printer-up-time", "job-printer-uri", "job-state", "job-state-message", "job-state-reasons", "job-uri", "number-of-documents", "number-of-intervening-jobs", "output-device-assigned", "time-at-completed", "time-at-creation", "time-at-processing" }; cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_job(%p[%d], %p(%s), %p(%s/%s))", con, con->number, printer, printer->name, filetype, filetype ? filetype->super : "none", filetype ? filetype->type : "none"); /* * Check remote printing to non-shared printer... */ if (!printer->shared && _cups_strcasecmp(con->http->hostname, "localhost") && _cups_strcasecmp(con->http->hostname, ServerName)) { send_ipp_status(con, IPP_NOT_AUTHORIZED, _("The printer or class is not shared.")); return (NULL); } /* * Check policy... */ auth_info = ippFindAttribute(con->request, "auth-info", IPP_TAG_TEXT); if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return (NULL); } else if (printer->num_auth_info_required == 1 && !strcmp(printer->auth_info_required[0], "negotiate") && !con->username[0]) { send_http_error(con, HTTP_UNAUTHORIZED, printer); return (NULL); } #ifdef HAVE_SSL else if (auth_info && !con->http->tls && !httpAddrLocalhost(con->http->hostaddr)) { /* * Require encryption of auth-info over non-local connections... */ send_http_error(con, HTTP_UPGRADE_REQUIRED, printer); return (NULL); } #endif /* HAVE_SSL */ /* * See if the printer is accepting jobs... */ if (!printer->accepting) { send_ipp_status(con, IPP_NOT_ACCEPTING, _("Destination \"%s\" is not accepting jobs."), printer->name); return (NULL); } /* * Validate job template attributes; for now just document-format, * copies, job-sheets, number-up, page-ranges, mandatory attributes, and * media... */ for (i = 0; i < (int)(sizeof(readonly) / sizeof(readonly[0])); i ++) { if ((attr = ippFindAttribute(con->request, readonly[i], IPP_TAG_ZERO)) != NULL) { ippDeleteAttribute(con->request, attr); if (StrictConformance) { send_ipp_status(con, IPP_BAD_REQUEST, _("The '%s' Job Status attribute cannot be supplied in a job creation request."), readonly[i]); return (NULL); } cupsdLogMessage(CUPSD_LOG_INFO, "Unexpected '%s' Job Status attribute in a job creation request.", readonly[i]); } } if (printer->pc) { for (mandatory = (char *)cupsArrayFirst(printer->pc->mandatory); mandatory; mandatory = (char *)cupsArrayNext(printer->pc->mandatory)) { if (!ippFindAttribute(con->request, mandatory, IPP_TAG_ZERO)) { /* * Missing a required attribute... */ send_ipp_status(con, IPP_CONFLICT, _("The \"%s\" attribute is required for print jobs."), mandatory); return (NULL); } } } if (filetype && printer->filetypes && !cupsArrayFind(printer->filetypes, filetype)) { char mimetype[MIME_MAX_SUPER + MIME_MAX_TYPE + 2]; /* MIME media type string */ snprintf(mimetype, sizeof(mimetype), "%s/%s", filetype->super, filetype->type); send_ipp_status(con, IPP_DOCUMENT_FORMAT, _("Unsupported format \"%s\"."), mimetype); ippAddString(con->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_MIMETYPE, "document-format", NULL, mimetype); return (NULL); } if ((attr = ippFindAttribute(con->request, "copies", IPP_TAG_INTEGER)) != NULL) { if (attr->values[0].integer < 1 || attr->values[0].integer > MaxCopies) { send_ipp_status(con, IPP_ATTRIBUTES, _("Bad copies value %d."), attr->values[0].integer); ippAddInteger(con->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_INTEGER, "copies", attr->values[0].integer); return (NULL); } } if ((attr = ippFindAttribute(con->request, "job-sheets", IPP_TAG_ZERO)) != NULL) { if (attr->value_tag != IPP_TAG_KEYWORD && attr->value_tag != IPP_TAG_NAME) { send_ipp_status(con, IPP_BAD_REQUEST, _("Bad job-sheets value type.")); return (NULL); } if (attr->num_values > 2) { send_ipp_status(con, IPP_BAD_REQUEST, _("Too many job-sheets values (%d > 2)."), attr->num_values); return (NULL); } for (i = 0; i < attr->num_values; i ++) if (strcmp(attr->values[i].string.text, "none") && !cupsdFindBanner(attr->values[i].string.text)) { send_ipp_status(con, IPP_BAD_REQUEST, _("Bad job-sheets value \"%s\"."), attr->values[i].string.text); return (NULL); } } if ((attr = ippFindAttribute(con->request, "number-up", IPP_TAG_INTEGER)) != NULL) { if (attr->values[0].integer != 1 && attr->values[0].integer != 2 && attr->values[0].integer != 4 && attr->values[0].integer != 6 && attr->values[0].integer != 9 && attr->values[0].integer != 16) { send_ipp_status(con, IPP_ATTRIBUTES, _("Bad number-up value %d."), attr->values[0].integer); ippAddInteger(con->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_INTEGER, "number-up", attr->values[0].integer); return (NULL); } } if ((attr = ippFindAttribute(con->request, "page-ranges", IPP_TAG_RANGE)) != NULL) { for (i = 0, lowerpagerange = 1; i < attr->num_values; i ++) { if (attr->values[i].range.lower < lowerpagerange || attr->values[i].range.lower > attr->values[i].range.upper) { send_ipp_status(con, IPP_BAD_REQUEST, _("Bad page-ranges values %d-%d."), attr->values[i].range.lower, attr->values[i].range.upper); return (NULL); } lowerpagerange = attr->values[i].range.upper + 1; } } /* * Do media selection as needed... */ if (!ippFindAttribute(con->request, "PageRegion", IPP_TAG_ZERO) && !ippFindAttribute(con->request, "PageSize", IPP_TAG_ZERO) && _ppdCacheGetPageSize(printer->pc, con->request, NULL, &exact)) { if (!exact && (media_col = ippFindAttribute(con->request, "media-col", IPP_TAG_BEGIN_COLLECTION)) != NULL) { send_ipp_status(con, IPP_OK_SUBST, _("Unsupported margins.")); unsup_col = ippNew(); if ((media_margin = ippFindAttribute(media_col->values[0].collection, "media-bottom-margin", IPP_TAG_INTEGER)) != NULL) ippAddInteger(unsup_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-bottom-margin", media_margin->values[0].integer); if ((media_margin = ippFindAttribute(media_col->values[0].collection, "media-left-margin", IPP_TAG_INTEGER)) != NULL) ippAddInteger(unsup_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-left-margin", media_margin->values[0].integer); if ((media_margin = ippFindAttribute(media_col->values[0].collection, "media-right-margin", IPP_TAG_INTEGER)) != NULL) ippAddInteger(unsup_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-right-margin", media_margin->values[0].integer); if ((media_margin = ippFindAttribute(media_col->values[0].collection, "media-top-margin", IPP_TAG_INTEGER)) != NULL) ippAddInteger(unsup_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-top-margin", media_margin->values[0].integer); ippAddCollection(con->response, IPP_TAG_UNSUPPORTED_GROUP, "media-col", unsup_col); ippDelete(unsup_col); } } /* * Make sure we aren't over our limit... */ if (MaxJobs && cupsArrayCount(Jobs) >= MaxJobs) cupsdCleanJobs(); if (MaxJobs && cupsArrayCount(Jobs) >= MaxJobs) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Too many active jobs.")); return (NULL); } if ((i = check_quotas(con, printer)) < 0) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Quota limit reached.")); return (NULL); } else if (i == 0) { send_ipp_status(con, IPP_NOT_AUTHORIZED, _("Not allowed to print.")); return (NULL); } /* * Create the job and set things up... */ if ((attr = ippFindAttribute(con->request, "job-priority", IPP_TAG_INTEGER)) != NULL) priority = attr->values[0].integer; else { if ((val = cupsGetOption("job-priority", printer->num_options, printer->options)) != NULL) priority = atoi(val); else priority = 50; ippAddInteger(con->request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-priority", priority); } if ((attr = ippFindAttribute(con->request, "job-name", IPP_TAG_ZERO)) == NULL) ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL, "Untitled"); else if ((attr->value_tag != IPP_TAG_NAME && attr->value_tag != IPP_TAG_NAMELANG) || attr->num_values != 1) { send_ipp_status(con, IPP_ATTRIBUTES, _("Bad job-name value: Wrong type or count.")); if ((attr = ippCopyAttribute(con->response, attr, 0)) != NULL) attr->group_tag = IPP_TAG_UNSUPPORTED_GROUP; return (NULL); } else if (!ippValidateAttribute(attr)) { send_ipp_status(con, IPP_ATTRIBUTES, _("Bad job-name value: %s"), cupsLastErrorString()); if ((attr = ippCopyAttribute(con->response, attr, 0)) != NULL) attr->group_tag = IPP_TAG_UNSUPPORTED_GROUP; return (NULL); } attr = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_NAME); if (attr && !ippValidateAttribute(attr)) { send_ipp_status(con, IPP_ATTRIBUTES, _("Bad requesting-user-name value: %s"), cupsLastErrorString()); if ((attr = ippCopyAttribute(con->response, attr, 0)) != NULL) attr->group_tag = IPP_TAG_UNSUPPORTED_GROUP; return (NULL); } if ((job = cupsdAddJob(priority, printer->name)) == NULL) { send_ipp_status(con, IPP_INTERNAL_ERROR, _("Unable to add job for destination \"%s\"."), printer->name); return (NULL); } job->dtype = printer->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE); job->attrs = con->request; job->dirty = 1; con->request = ippNewRequest(job->attrs->request.op.operation_id); cupsdMarkDirty(CUPSD_DIRTY_JOBS); add_job_uuid(job); apply_printer_defaults(printer, job); if (con->username[0]) { cupsdSetString(&job->username, con->username); if (attr) ippSetString(job->attrs, &attr, 0, con->username); } else if (attr) { cupsdLogMessage(CUPSD_LOG_DEBUG, "add_job: requesting-user-name=\"%s\"", attr->values[0].string.text); cupsdSetString(&job->username, attr->values[0].string.text); } else cupsdSetString(&job->username, "anonymous"); if (!attr) ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "job-originating-user-name", NULL, job->username); else { ippSetGroupTag(job->attrs, &attr, IPP_TAG_JOB); ippSetName(job->attrs, &attr, "job-originating-user-name"); } if (con->username[0] || auth_info) { save_auth_info(con, job, auth_info); /* * Remove the auth-info attribute from the attribute data... */ if (auth_info) ippDeleteAttribute(job->attrs, auth_info); } if ((attr = ippFindAttribute(con->request, "job-name", IPP_TAG_NAME)) != NULL) cupsdSetString(&(job->name), attr->values[0].string.text); if ((attr = ippFindAttribute(job->attrs, "job-originating-host-name", IPP_TAG_ZERO)) != NULL) { /* * Request contains a job-originating-host-name attribute; validate it... */ if (attr->value_tag != IPP_TAG_NAME || attr->num_values != 1 || strcmp(con->http->hostname, "localhost")) { /* * Can't override the value if we aren't connected via localhost. * Also, we can only have 1 value and it must be a name value. */ ippDeleteAttribute(job->attrs, attr); ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "job-originating-host-name", NULL, con->http->hostname); } else ippSetGroupTag(job->attrs, &attr, IPP_TAG_JOB); } else { /* * No job-originating-host-name attribute, so use the hostname from * the connection... */ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "job-originating-host-name", NULL, con->http->hostname); } ippAddOutOfBand(job->attrs, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-completed"); ippAddDate(job->attrs, IPP_TAG_JOB, "date-time-at-creation", ippTimeToDate(time(NULL))); ippAddOutOfBand(job->attrs, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-processing"); ippAddOutOfBand(job->attrs, IPP_TAG_JOB, IPP_TAG_NOVALUE, "time-at-completed"); ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation", time(NULL)); ippAddOutOfBand(job->attrs, IPP_TAG_JOB, IPP_TAG_NOVALUE, "time-at-processing"); /* * Add remaining job attributes... */ ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id); job->state = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_ENUM, "job-state", IPP_JOB_STOPPED); job->state_value = (ipp_jstate_t)job->state->values[0].integer; job->reasons = ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "job-incoming"); job->impressions = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions-completed", 0); job->sheets = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-media-sheets-completed", 0); ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, printer->uri); if ((attr = ippFindAttribute(job->attrs, "job-k-octets", IPP_TAG_INTEGER)) != NULL) attr->values[0].integer = 0; else ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-k-octets", 0); if ((attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD)) == NULL) attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME); if (!attr) { if ((val = cupsGetOption("job-hold-until", printer->num_options, printer->options)) == NULL) val = "no-hold"; attr = ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-hold-until", NULL, val); } if (printer->holding_new_jobs) { /* * Hold all new jobs on this printer... */ if (attr && strcmp(attr->values[0].string.text, "no-hold")) cupsdSetJobHoldUntil(job, ippGetString(attr, 0, NULL), 0); else cupsdSetJobHoldUntil(job, "indefinite", 0); job->state->values[0].integer = IPP_JOB_HELD; job->state_value = IPP_JOB_HELD; ippSetString(job->attrs, &job->reasons, 0, "job-held-on-create"); } else if (attr && strcmp(attr->values[0].string.text, "no-hold")) { /* * Hold job until specified time... */ cupsdSetJobHoldUntil(job, attr->values[0].string.text, 0); job->state->values[0].integer = IPP_JOB_HELD; job->state_value = IPP_JOB_HELD; ippSetString(job->attrs, &job->reasons, 0, "job-hold-until-specified"); } else if (job->attrs->request.op.operation_id == IPP_CREATE_JOB) { job->hold_until = time(NULL) + MultipleOperationTimeout; job->state->values[0].integer = IPP_JOB_HELD; job->state_value = IPP_JOB_HELD; } else { job->state->values[0].integer = IPP_JOB_PENDING; job->state_value = IPP_JOB_PENDING; ippSetString(job->attrs, &job->reasons, 0, "none"); } if (!(printer->type & CUPS_PRINTER_REMOTE) || Classification) { /* * Add job sheets options... */ if ((attr = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_ZERO)) == NULL) { cupsdLogMessage(CUPSD_LOG_DEBUG, "Adding default job-sheets values \"%s,%s\"...", printer->job_sheets[0], printer->job_sheets[1]); attr = ippAddStrings(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "job-sheets", 2, NULL, NULL); ippSetString(job->attrs, &attr, 0, printer->job_sheets[0]); ippSetString(job->attrs, &attr, 1, printer->job_sheets[1]); } job->job_sheets = attr; /* * Enforce classification level if set... */ if (Classification) { cupsdLogMessage(CUPSD_LOG_INFO, "Classification=\"%s\", ClassifyOverride=%d", Classification ? Classification : "(null)", ClassifyOverride); if (ClassifyOverride) { if (!strcmp(attr->values[0].string.text, "none") && (attr->num_values == 1 || !strcmp(attr->values[1].string.text, "none"))) { /* * Force the leading banner to have the classification on it... */ ippSetString(job->attrs, &attr, 0, Classification); cupsdLogJob(job, CUPSD_LOG_NOTICE, "CLASSIFICATION FORCED " "job-sheets=\"%s,none\", " "job-originating-user-name=\"%s\"", Classification, job->username); } else if (attr->num_values == 2 && strcmp(attr->values[0].string.text, attr->values[1].string.text) && strcmp(attr->values[0].string.text, "none") && strcmp(attr->values[1].string.text, "none")) { /* * Can't put two different security markings on the same document! */ ippSetString(job->attrs, &attr, 1, attr->values[0].string.text); cupsdLogJob(job, CUPSD_LOG_NOTICE, "CLASSIFICATION FORCED " "job-sheets=\"%s,%s\", " "job-originating-user-name=\"%s\"", attr->values[0].string.text, attr->values[1].string.text, job->username); } else if (strcmp(attr->values[0].string.text, Classification) && strcmp(attr->values[0].string.text, "none") && (attr->num_values == 1 || (strcmp(attr->values[1].string.text, Classification) && strcmp(attr->values[1].string.text, "none")))) { if (attr->num_values == 1) cupsdLogJob(job, CUPSD_LOG_NOTICE, "CLASSIFICATION OVERRIDDEN " "job-sheets=\"%s\", " "job-originating-user-name=\"%s\"", attr->values[0].string.text, job->username); else cupsdLogJob(job, CUPSD_LOG_NOTICE, "CLASSIFICATION OVERRIDDEN " "job-sheets=\"%s,%s\",fffff " "job-originating-user-name=\"%s\"", attr->values[0].string.text, attr->values[1].string.text, job->username); } } else if (strcmp(attr->values[0].string.text, Classification) && (attr->num_values == 1 || strcmp(attr->values[1].string.text, Classification))) { /* * Force the banner to have the classification on it... */ if (attr->num_values > 1 && !strcmp(attr->values[0].string.text, attr->values[1].string.text)) { ippSetString(job->attrs, &attr, 0, Classification); ippSetString(job->attrs, &attr, 1, Classification); } else { if (attr->num_values == 1 || strcmp(attr->values[0].string.text, "none")) ippSetString(job->attrs, &attr, 0, Classification); if (attr->num_values > 1 && strcmp(attr->values[1].string.text, "none")) ippSetString(job->attrs, &attr, 1, Classification); } if (attr->num_values > 1) cupsdLogJob(job, CUPSD_LOG_NOTICE, "CLASSIFICATION FORCED " "job-sheets=\"%s,%s\", " "job-originating-user-name=\"%s\"", attr->values[0].string.text, attr->values[1].string.text, job->username); else cupsdLogJob(job, CUPSD_LOG_NOTICE, "CLASSIFICATION FORCED " "job-sheets=\"%s\", " "job-originating-user-name=\"%s\"", Classification, job->username); } } /* * See if we need to add the starting sheet... */ if (!(printer->type & CUPS_PRINTER_REMOTE)) { cupsdLogJob(job, CUPSD_LOG_INFO, "Adding start banner page \"%s\".", attr->values[0].string.text); if ((kbytes = copy_banner(con, job, attr->values[0].string.text)) < 0) { cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_PURGE, "Aborting job because the start banner could not be " "copied."); return (NULL); } cupsdUpdateQuota(printer, job->username, 0, kbytes); } } else if ((attr = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_ZERO)) != NULL) job->job_sheets = attr; /* * Fill in the response info... */ httpAssembleURIf(HTTP_URI_CODING_ALL, job_uri, sizeof(job_uri), "ipp", NULL, con->clientname, con->clientport, "/jobs/%d", job->id); ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_URI, "job-uri", NULL, job_uri); ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id); ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_ENUM, "job-state", job->state_value); ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_TEXT, "job-state-message", NULL, ""); ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-state-reasons", NULL, job->reasons->values[0].string.text); con->response->request.status.status_code = IPP_OK; /* * Add any job subscriptions... */ add_job_subscriptions(con, job); /* * Set all but the first two attributes to the job attributes group... */ for (attr = job->attrs->attrs->next->next; attr; attr = attr->next) attr->group_tag = IPP_TAG_JOB; /* * Fire the "job created" event... */ cupsdAddEvent(CUPSD_EVENT_JOB_CREATED, printer, job, "Job created."); /* * Return the new job... */ return (job); } /* * 'add_job_subscriptions()' - Add any subscriptions for a job. */ static void add_job_subscriptions( cupsd_client_t *con, /* I - Client connection */ cupsd_job_t *job) /* I - Newly created job */ { int i; /* Looping var */ ipp_attribute_t *prev, /* Previous attribute */ *next, /* Next attribute */ *attr; /* Current attribute */ cupsd_subscription_t *sub; /* Subscription object */ const char *recipient, /* notify-recipient-uri */ *pullmethod; /* notify-pull-method */ ipp_attribute_t *user_data; /* notify-user-data */ int interval; /* notify-time-interval */ unsigned mask; /* notify-events */ /* * Find the first subscription group attribute; return if we have * none... */ for (attr = job->attrs->attrs; attr; attr = attr->next) if (attr->group_tag == IPP_TAG_SUBSCRIPTION) break; if (!attr) return; /* * Process the subscription attributes in the request... */ while (attr) { recipient = NULL; pullmethod = NULL; user_data = NULL; interval = 0; mask = CUPSD_EVENT_NONE; while (attr && attr->group_tag != IPP_TAG_ZERO) { if (!strcmp(attr->name, "notify-recipient-uri") && attr->value_tag == IPP_TAG_URI) { /* * Validate the recipient scheme against the ServerBin/notifier * directory... */ char notifier[1024], /* Notifier filename */ scheme[HTTP_MAX_URI], /* Scheme portion of URI */ userpass[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ recipient = attr->values[0].string.text; if (httpSeparateURI(HTTP_URI_CODING_ALL, recipient, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_OK) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Bad notify-recipient-uri \"%s\"."), recipient); ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_URI_SCHEME); return; } snprintf(notifier, sizeof(notifier), "%s/notifier/%s", ServerBin, scheme); if (access(notifier, X_OK)) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("notify-recipient-uri URI \"%s\" uses unknown " "scheme."), recipient); ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_URI_SCHEME); return; } if (!strcmp(scheme, "rss") && !check_rss_recipient(recipient)) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("notify-recipient-uri URI \"%s\" is already used."), recipient); ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_ATTRIBUTES); return; } } else if (!strcmp(attr->name, "notify-pull-method") && attr->value_tag == IPP_TAG_KEYWORD) { pullmethod = attr->values[0].string.text; if (strcmp(pullmethod, "ippget")) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Bad notify-pull-method \"%s\"."), pullmethod); ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_ATTRIBUTES); return; } } else if (!strcmp(attr->name, "notify-charset") && attr->value_tag == IPP_TAG_CHARSET && strcmp(attr->values[0].string.text, "us-ascii") && strcmp(attr->values[0].string.text, "utf-8")) { send_ipp_status(con, IPP_CHARSET, _("Character set \"%s\" not supported."), attr->values[0].string.text); return; } else if (!strcmp(attr->name, "notify-natural-language") && (attr->value_tag != IPP_TAG_LANGUAGE || strcmp(attr->values[0].string.text, DefaultLanguage))) { send_ipp_status(con, IPP_CHARSET, _("Language \"%s\" not supported."), attr->values[0].string.text); return; } else if (!strcmp(attr->name, "notify-user-data") && attr->value_tag == IPP_TAG_STRING) { if (attr->num_values > 1 || attr->values[0].unknown.length > 63) { send_ipp_status(con, IPP_REQUEST_VALUE, _("The notify-user-data value is too large " "(%d > 63 octets)."), attr->values[0].unknown.length); return; } user_data = attr; } else if (!strcmp(attr->name, "notify-events") && attr->value_tag == IPP_TAG_KEYWORD) { for (i = 0; i < attr->num_values; i ++) mask |= cupsdEventValue(attr->values[i].string.text); } else if (!strcmp(attr->name, "notify-lease-duration")) { send_ipp_status(con, IPP_BAD_REQUEST, _("The notify-lease-duration attribute cannot be " "used with job subscriptions.")); return; } else if (!strcmp(attr->name, "notify-time-interval") && attr->value_tag == IPP_TAG_INTEGER) interval = attr->values[0].integer; attr = attr->next; } if (!recipient && !pullmethod) break; if (mask == CUPSD_EVENT_NONE) mask = CUPSD_EVENT_JOB_COMPLETED; if ((sub = cupsdAddSubscription(mask, cupsdFindDest(job->dest), job, recipient, 0)) != NULL) { sub->interval = interval; cupsdSetString(&sub->owner, job->username); if (user_data) { sub->user_data_len = user_data->values[0].unknown.length; memcpy(sub->user_data, user_data->values[0].unknown.data, (size_t)sub->user_data_len); } ippAddSeparator(con->response); ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-subscription-id", sub->id); cupsdLogMessage(CUPSD_LOG_DEBUG, "Added subscription %d for job %d", sub->id, job->id); } if (attr) attr = attr->next; } cupsdMarkDirty(CUPSD_DIRTY_SUBSCRIPTIONS); /* * Remove all of the subscription attributes from the job request... * * TODO: Optimize this since subscription groups have to come at the * end of the request... */ for (attr = job->attrs->attrs, prev = NULL; attr; attr = next) { next = attr->next; if (attr->group_tag == IPP_TAG_SUBSCRIPTION || attr->group_tag == IPP_TAG_ZERO) { /* * Free and remove this attribute... */ ippDeleteAttribute(NULL, attr); if (prev) prev->next = next; else job->attrs->attrs = next; } else prev = attr; } job->attrs->last = prev; job->attrs->current = prev; } /* * 'add_job_uuid()' - Add job-uuid attribute to a job. * * See RFC 4122 for the definition of UUIDs and the format. */ static void add_job_uuid(cupsd_job_t *job) /* I - Job */ { char uuid[64]; /* job-uuid string */ /* * Add a job-uuid attribute if none exists... */ if (!ippFindAttribute(job->attrs, "job-uuid", IPP_TAG_URI)) ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uuid", NULL, httpAssembleUUID(ServerName, RemotePort, job->dest, job->id, uuid, sizeof(uuid))); } /* * 'add_printer()' - Add a printer to the system. */ static void add_printer(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - URI of printer */ { http_status_t status; /* Policy status */ int i; /* Looping var */ char scheme[HTTP_MAX_URI], /* Method portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ cupsd_printer_t *printer; /* Printer/class */ ipp_attribute_t *attr; /* Printer attribute */ cups_file_t *fp; /* Script/PPD file */ char line[1024]; /* Line from file... */ char srcfile[1024], /* Source Script/PPD file */ dstfile[1024]; /* Destination Script/PPD file */ int modify; /* Non-zero if we are modifying */ int changed_driver, /* Changed the PPD? */ need_restart_job, /* Need to restart job? */ set_device_uri, /* Did we set the device URI? */ set_port_monitor; /* Did we set the port monitor? */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_printer(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Do we have a valid URI? */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (strncmp(resource, "/printers/", 10) || strlen(resource) == 10) { /* * No, return an error... */ send_ipp_status(con, IPP_BAD_REQUEST, _("The printer-uri must be of the form " "\"ipp://HOSTNAME/printers/PRINTERNAME\".")); return; } /* * Do we have a valid printer name? */ if (!validate_name(resource + 10)) { /* * No, return an error... */ send_ipp_status(con, IPP_BAD_REQUEST, _("The printer-uri \"%s\" contains invalid characters."), uri->values[0].string.text); return; } /* * See if the printer already exists; if not, create a new printer... */ if ((printer = cupsdFindPrinter(resource + 10)) == NULL) { /* * Printer doesn't exist; see if we have a class of the same name... */ if ((printer = cupsdFindClass(resource + 10)) != NULL) { /* * Yes, return an error... */ send_ipp_status(con, IPP_NOT_POSSIBLE, _("A class named \"%s\" already exists."), resource + 10); return; } /* * No, check the default policy then add the printer... */ if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } printer = cupsdAddPrinter(resource + 10); modify = 0; } else if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } else modify = 1; /* * Look for attributes and copy them over as needed... */ changed_driver = 0; need_restart_job = 0; if ((attr = ippFindAttribute(con->request, "printer-is-temporary", IPP_TAG_BOOLEAN)) != NULL) printer->temporary = ippGetBoolean(attr, 0); if ((attr = ippFindAttribute(con->request, "printer-location", IPP_TAG_TEXT)) != NULL) cupsdSetString(&printer->location, attr->values[0].string.text); if ((attr = ippFindAttribute(con->request, "printer-geo-location", IPP_TAG_URI)) != NULL && !strncmp(attr->values[0].string.text, "geo:", 4)) cupsdSetString(&printer->geo_location, attr->values[0].string.text); if ((attr = ippFindAttribute(con->request, "printer-organization", IPP_TAG_TEXT)) != NULL) cupsdSetString(&printer->organization, attr->values[0].string.text); if ((attr = ippFindAttribute(con->request, "printer-organizational-unit", IPP_TAG_TEXT)) != NULL) cupsdSetString(&printer->organizational_unit, attr->values[0].string.text); if ((attr = ippFindAttribute(con->request, "printer-info", IPP_TAG_TEXT)) != NULL) cupsdSetString(&printer->info, attr->values[0].string.text); set_device_uri = 0; if ((attr = ippFindAttribute(con->request, "device-uri", IPP_TAG_URI)) != NULL) { /* * Do we have a valid device URI? */ http_uri_status_t uri_status; /* URI separation status */ char old_device_uri[1024]; /* Old device URI */ need_restart_job = 1; uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, attr->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); cupsdLogMessage(CUPSD_LOG_DEBUG, "%s device-uri: %s", printer->name, httpURIStatusString(uri_status)); if (uri_status < HTTP_URI_OK) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Bad device-uri \"%s\"."), attr->values[0].string.text); if (!modify) cupsdDeletePrinter(printer, 0); return; } if (!strcmp(scheme, "file")) { /* * See if the administrator has enabled file devices... */ if (!FileDevice && strcmp(resource, "/dev/null")) { /* * File devices are disabled and the URL is not file:/dev/null... */ send_ipp_status(con, IPP_NOT_POSSIBLE, _("File device URIs have been disabled. " "To enable, see the FileDevice directive in " "\"%s/cups-files.conf\"."), ServerRoot); if (!modify) cupsdDeletePrinter(printer, 0); return; } } else { /* * See if the backend exists and is executable... */ snprintf(srcfile, sizeof(srcfile), "%s/backend/%s", ServerBin, scheme); if (access(srcfile, X_OK)) { /* * Could not find device in list! */ send_ipp_status(con, IPP_NOT_POSSIBLE, _("Bad device-uri scheme \"%s\"."), scheme); if (!modify) cupsdDeletePrinter(printer, 0); return; } } if (printer->sanitized_device_uri) strlcpy(old_device_uri, printer->sanitized_device_uri, sizeof(old_device_uri)); else old_device_uri[0] = '\0'; cupsdSetDeviceURI(printer, attr->values[0].string.text); cupsdLogMessage(CUPSD_LOG_INFO, "Setting %s device-uri to \"%s\" (was \"%s\".)", printer->name, printer->sanitized_device_uri, old_device_uri); set_device_uri = 1; } set_port_monitor = 0; if ((attr = ippFindAttribute(con->request, "port-monitor", IPP_TAG_NAME)) != NULL) { ipp_attribute_t *supported; /* port-monitor-supported attribute */ need_restart_job = 1; supported = ippFindAttribute(printer->ppd_attrs, "port-monitor-supported", IPP_TAG_NAME); if (supported) { for (i = 0; i < supported->num_values; i ++) if (!strcmp(supported->values[i].string.text, attr->values[0].string.text)) break; } if (!supported || i >= supported->num_values) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Bad port-monitor \"%s\"."), attr->values[0].string.text); if (!modify) cupsdDeletePrinter(printer, 0); return; } cupsdLogMessage(CUPSD_LOG_INFO, "Setting %s port-monitor to \"%s\" (was \"%s\".)", printer->name, attr->values[0].string.text, printer->port_monitor ? printer->port_monitor : "none"); if (strcmp(attr->values[0].string.text, "none")) cupsdSetString(&printer->port_monitor, attr->values[0].string.text); else cupsdClearString(&printer->port_monitor); set_port_monitor = 1; } if ((attr = ippFindAttribute(con->request, "printer-is-accepting-jobs", IPP_TAG_BOOLEAN)) != NULL && attr->values[0].boolean != printer->accepting) { cupsdLogMessage(CUPSD_LOG_INFO, "Setting %s printer-is-accepting-jobs to %d (was %d.)", printer->name, attr->values[0].boolean, printer->accepting); printer->accepting = attr->values[0].boolean; cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, printer, NULL, "%s accepting jobs.", printer->accepting ? "Now" : "No longer"); } if ((attr = ippFindAttribute(con->request, "printer-is-shared", IPP_TAG_BOOLEAN)) != NULL) { if (ippGetBoolean(attr, 0) && printer->num_auth_info_required == 1 && !strcmp(printer->auth_info_required[0], "negotiate")) { send_ipp_status(con, IPP_BAD_REQUEST, _("Cannot share a remote Kerberized printer.")); if (!modify) cupsdDeletePrinter(printer, 0); return; } if (printer->type & CUPS_PRINTER_REMOTE) { /* * Cannot re-share remote printers. */ send_ipp_status(con, IPP_BAD_REQUEST, _("Cannot change printer-is-shared for remote queues.")); if (!modify) cupsdDeletePrinter(printer, 0); return; } if (printer->shared && !ippGetBoolean(attr, 0)) cupsdDeregisterPrinter(printer, 1); cupsdLogMessage(CUPSD_LOG_INFO, "Setting %s printer-is-shared to %d (was %d.)", printer->name, attr->values[0].boolean, printer->shared); printer->shared = ippGetBoolean(attr, 0); if (printer->shared && printer->temporary) printer->temporary = 0; } if ((attr = ippFindAttribute(con->request, "printer-state", IPP_TAG_ENUM)) != NULL) { if (attr->values[0].integer != IPP_PRINTER_IDLE && attr->values[0].integer != IPP_PRINTER_STOPPED) { send_ipp_status(con, IPP_BAD_REQUEST, _("Bad printer-state value %d."), attr->values[0].integer); if (!modify) cupsdDeletePrinter(printer, 0); return; } cupsdLogMessage(CUPSD_LOG_INFO, "Setting %s printer-state to %d (was %d.)", printer->name, attr->values[0].integer, printer->state); if (attr->values[0].integer == IPP_PRINTER_STOPPED) cupsdStopPrinter(printer, 0); else { need_restart_job = 1; cupsdSetPrinterState(printer, (ipp_pstate_t)(attr->values[0].integer), 0); } } if ((attr = ippFindAttribute(con->request, "printer-state-message", IPP_TAG_TEXT)) != NULL) { strlcpy(printer->state_message, attr->values[0].string.text, sizeof(printer->state_message)); cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, printer, NULL, "%s", printer->state_message); } if ((attr = ippFindAttribute(con->request, "printer-state-reasons", IPP_TAG_KEYWORD)) != NULL) { if (attr->num_values > (int)(sizeof(printer->reasons) / sizeof(printer->reasons[0]))) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Too many printer-state-reasons values (%d > %d)."), attr->num_values, (int)(sizeof(printer->reasons) / sizeof(printer->reasons[0]))); if (!modify) cupsdDeletePrinter(printer, 0); return; } for (i = 0; i < printer->num_reasons; i ++) _cupsStrFree(printer->reasons[i]); printer->num_reasons = 0; for (i = 0; i < attr->num_values; i ++) { if (!strcmp(attr->values[i].string.text, "none")) continue; printer->reasons[printer->num_reasons] = _cupsStrRetain(attr->values[i].string.text); printer->num_reasons ++; if (!strcmp(attr->values[i].string.text, "paused") && printer->state != IPP_PRINTER_STOPPED) { cupsdLogMessage(CUPSD_LOG_INFO, "Setting %s printer-state to %d (was %d.)", printer->name, IPP_PRINTER_STOPPED, printer->state); cupsdStopPrinter(printer, 0); } } if (PrintcapFormat == PRINTCAP_PLIST) cupsdMarkDirty(CUPSD_DIRTY_PRINTCAP); cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, printer, NULL, "Printer \"%s\" state changed.", printer->name); } if (!set_printer_defaults(con, printer)) { if (!modify) cupsdDeletePrinter(printer, 0); return; } if ((attr = ippFindAttribute(con->request, "auth-info-required", IPP_TAG_KEYWORD)) != NULL) cupsdSetAuthInfoRequired(printer, NULL, attr); /* * See if we have all required attributes... */ if (!printer->device_uri) cupsdSetString(&printer->device_uri, "file:///dev/null"); /* * See if we have a PPD file attached to the request... */ if (con->filename) { need_restart_job = 1; changed_driver = 1; strlcpy(srcfile, con->filename, sizeof(srcfile)); if ((fp = cupsFileOpen(srcfile, "rb"))) { /* * Yes; get the first line from it... */ line[0] = '\0'; cupsFileGets(fp, line, sizeof(line)); cupsFileClose(fp); /* * Then see what kind of file it is... */ if (strncmp(line, "*PPD-Adobe", 10)) { send_ipp_status(con, IPP_STATUS_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED, _("Bad PPD file.")); if (!modify) cupsdDeletePrinter(printer, 0); return; } snprintf(dstfile, sizeof(dstfile), "%s/ppd/%s.ppd", ServerRoot, printer->name); /* * The new file is a PPD file, so move the file over to the ppd * directory... */ if (copy_file(srcfile, dstfile, ConfigFilePerm)) { send_ipp_status(con, IPP_INTERNAL_ERROR, _("Unable to copy PPD file - %s"), strerror(errno)); if (!modify) cupsdDeletePrinter(printer, 0); return; } cupsdLogMessage(CUPSD_LOG_DEBUG, "Copied PPD file successfully"); } } else if ((attr = ippFindAttribute(con->request, "ppd-name", IPP_TAG_NAME)) != NULL) { const char *ppd_name = ippGetString(attr, 0, NULL); /* ppd-name value */ need_restart_job = 1; changed_driver = 1; if (!strcmp(ppd_name, "raw")) { /* * Raw driver, remove any existing PPD file. */ snprintf(dstfile, sizeof(dstfile), "%s/ppd/%s.ppd", ServerRoot, printer->name); unlink(dstfile); } else if (strstr(ppd_name, "../")) { send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("Invalid ppd-name value.")); if (!modify) cupsdDeletePrinter(printer, 0); return; } else { /* * PPD model file... */ snprintf(dstfile, sizeof(dstfile), "%s/ppd/%s.ppd", ServerRoot, printer->name); if (copy_model(con, ppd_name, dstfile)) { send_ipp_status(con, IPP_INTERNAL_ERROR, _("Unable to copy PPD file.")); if (!modify) cupsdDeletePrinter(printer, 0); return; } cupsdLogMessage(CUPSD_LOG_DEBUG, "Copied PPD file successfully"); } } if (changed_driver) { /* * If we changed the PPD, then remove the printer's cache file and clear the * printer-state-reasons... */ char cache_name[1024]; /* Cache filename for printer attrs */ snprintf(cache_name, sizeof(cache_name), "%s/%s.data", CacheDir, printer->name); unlink(cache_name); cupsdSetPrinterReasons(printer, "none"); /* * (Re)register color profiles... */ cupsdRegisterColor(printer); } /* * If we set the device URI but not the port monitor, check which port * monitor to use by default... */ if (set_device_uri && !set_port_monitor) { ppd_file_t *ppd; /* PPD file */ ppd_attr_t *ppdattr; /* cupsPortMonitor attribute */ httpSeparateURI(HTTP_URI_CODING_ALL, printer->device_uri, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); snprintf(srcfile, sizeof(srcfile), "%s/ppd/%s.ppd", ServerRoot, printer->name); if ((ppd = _ppdOpenFile(srcfile, _PPD_LOCALIZATION_NONE)) != NULL) { for (ppdattr = ppdFindAttr(ppd, "cupsPortMonitor", NULL); ppdattr; ppdattr = ppdFindNextAttr(ppd, "cupsPortMonitor", NULL)) if (!strcmp(scheme, ppdattr->spec)) { cupsdLogMessage(CUPSD_LOG_INFO, "Setting %s port-monitor to \"%s\" (was \"%s\".)", printer->name, ppdattr->value, printer->port_monitor ? printer->port_monitor : "none"); if (strcmp(ppdattr->value, "none")) cupsdSetString(&printer->port_monitor, ppdattr->value); else cupsdClearString(&printer->port_monitor); break; } ppdClose(ppd); } } printer->config_time = time(NULL); /* * Update the printer attributes and return... */ cupsdSetPrinterAttrs(printer); if (!printer->temporary) cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); if (need_restart_job && printer->job) { /* * Restart the current job... */ cupsdSetJobState(printer->job, IPP_JOB_PENDING, CUPSD_JOB_FORCE, "Job restarted because the printer was modified."); } cupsdMarkDirty(CUPSD_DIRTY_PRINTCAP); if (modify) { cupsdAddEvent(CUPSD_EVENT_PRINTER_MODIFIED, printer, NULL, "Printer \"%s\" modified by \"%s\".", printer->name, get_username(con)); cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" modified by \"%s\".", printer->name, get_username(con)); } else { cupsdAddEvent(CUPSD_EVENT_PRINTER_ADDED, printer, NULL, "New printer \"%s\" added by \"%s\".", printer->name, get_username(con)); cupsdLogMessage(CUPSD_LOG_INFO, "New printer \"%s\" added by \"%s\".", printer->name, get_username(con)); } con->response->request.status.status_code = IPP_OK; } /* * 'add_printer_state_reasons()' - Add the "printer-state-reasons" attribute * based upon the printer state... */ static void add_printer_state_reasons( cupsd_client_t *con, /* I - Client connection */ cupsd_printer_t *p) /* I - Printer info */ { cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_printer_state_reasons(%p[%d], %p[%s])", con, con->number, p, p->name); if (p->num_reasons == 0) ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "printer-state-reasons", NULL, "none"); else ippAddStrings(con->response, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "printer-state-reasons", p->num_reasons, NULL, (const char * const *)p->reasons); } /* * 'add_queued_job_count()' - Add the "queued-job-count" attribute for * the specified printer or class. */ static void add_queued_job_count( cupsd_client_t *con, /* I - Client connection */ cupsd_printer_t *p) /* I - Printer or class */ { int count; /* Number of jobs on destination */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_queued_job_count(%p[%d], %p[%s])", con, con->number, p, p->name); count = cupsdGetPrinterJobCount(p->name); ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "queued-job-count", count); } /* * 'apply_printer_defaults()' - Apply printer default options to a job. */ static void apply_printer_defaults( cupsd_printer_t *printer, /* I - Printer */ cupsd_job_t *job) /* I - Job */ { int i, /* Looping var */ num_options; /* Number of default options */ cups_option_t *options, /* Default options */ *option; /* Current option */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "Applying default options..."); /* * Collect all of the default options and add the missing ones to the * job object... */ for (i = printer->num_options, num_options = 0, options = NULL, option = printer->options; i > 0; i --, option ++) if (!ippFindAttribute(job->attrs, option->name, IPP_TAG_ZERO)) { if (!strcmp(option->name, "print-quality") && ippFindAttribute(job->attrs, "cupsPrintQuality", IPP_TAG_NAME)) continue; /* Don't override cupsPrintQuality */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "Adding default %s=%s", option->name, option->value); num_options = cupsAddOption(option->name, option->value, num_options, &options); } /* * Encode these options as attributes in the job object... */ cupsEncodeOptions2(job->attrs, num_options, options, IPP_TAG_JOB); cupsFreeOptions(num_options, options); } /* * 'authenticate_job()' - Set job authentication info. */ static void authenticate_job(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Job URI */ { ipp_attribute_t *attr, /* job-id attribute */ *auth_info; /* auth-info attribute */ int jobid; /* Job ID */ cupsd_job_t *job; /* Current job */ char scheme[HTTP_MAX_URI], /* Method portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "authenticate_job(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Start with "everything is OK" status... */ con->response->request.status.status_code = IPP_OK; /* * See if we have a job URI or a printer URI... */ if (!strcmp(uri->name, "printer-uri")) { /* * Got a printer URI; see if we also have a job-id attribute... */ if ((attr = ippFindAttribute(con->request, "job-id", IPP_TAG_INTEGER)) == NULL) { send_ipp_status(con, IPP_BAD_REQUEST, _("Got a printer-uri attribute but no job-id.")); return; } jobid = attr->values[0].integer; } else { /* * Got a job URI; parse it to get the job ID... */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (strncmp(resource, "/jobs/", 6)) { /* * Not a valid URI! */ send_ipp_status(con, IPP_BAD_REQUEST, _("Bad job-uri \"%s\"."), uri->values[0].string.text); return; } jobid = atoi(resource + 6); } /* * See if the job exists... */ if ((job = cupsdFindJob(jobid)) == NULL) { /* * Nope - return a "not found" error... */ send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), jobid); return; } /* * See if the job has been completed... */ if (job->state_value != IPP_JOB_HELD) { /* * Return a "not-possible" error... */ send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job #%d is not held for authentication."), jobid); return; } /* * See if we have already authenticated... */ auth_info = ippFindAttribute(con->request, "auth-info", IPP_TAG_TEXT); if (!con->username[0] && !auth_info) { cupsd_printer_t *printer; /* Job destination */ /* * No auth data. If we need to authenticate via Kerberos, send a * HTTP auth challenge, otherwise just return an IPP error... */ printer = cupsdFindDest(job->dest); if (printer && printer->num_auth_info_required > 0 && !strcmp(printer->auth_info_required[0], "negotiate")) send_http_error(con, HTTP_UNAUTHORIZED, printer); else send_ipp_status(con, IPP_NOT_AUTHORIZED, _("No authentication information provided.")); return; } /* * See if the job is owned by the requesting user... */ if (!validate_user(job, con, job->username, username, sizeof(username))) { send_http_error(con, con->username[0] ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED, cupsdFindDest(job->dest)); return; } /* * Save the authentication information for this job... */ save_auth_info(con, job, auth_info); /* * Reset the job-hold-until value to "no-hold"... */ if ((attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD)) == NULL) attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME); if (attr) { ippSetValueTag(job->attrs, &attr, IPP_TAG_KEYWORD); ippSetString(job->attrs, &attr, 0, "no-hold"); } /* * Release the job and return... */ cupsdReleaseJob(job); cupsdAddEvent(CUPSD_EVENT_JOB_STATE, NULL, job, "Job authenticated by user"); cupsdLogJob(job, CUPSD_LOG_INFO, "Authenticated by \"%s\".", con->username); cupsdCheckJobs(); } /* * 'cancel_all_jobs()' - Cancel all or selected print jobs. */ static void cancel_all_jobs(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Job or Printer URI */ { int i; /* Looping var */ http_status_t status; /* Policy status */ cups_ptype_t dtype; /* Destination type */ char scheme[HTTP_MAX_URI], /* Scheme portion of URI */ userpass[HTTP_MAX_URI], /* Username portion of URI */ hostname[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ ipp_attribute_t *attr; /* Attribute in request */ const char *username = NULL; /* Username */ cupsd_jobaction_t purge = CUPSD_JOB_DEFAULT; /* Purge? */ cupsd_printer_t *printer; /* Printer */ ipp_attribute_t *job_ids; /* job-ids attribute */ cupsd_job_t *job; /* Job */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cancel_all_jobs(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Get the jobs to cancel/purge... */ switch (con->request->request.op.operation_id) { case IPP_PURGE_JOBS : /* * Get the username (if any) for the jobs we want to cancel (only if * "my-jobs" is specified... */ if ((attr = ippFindAttribute(con->request, "my-jobs", IPP_TAG_BOOLEAN)) != NULL && attr->values[0].boolean) { if ((attr = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_NAME)) != NULL) username = attr->values[0].string.text; else { send_ipp_status(con, IPP_BAD_REQUEST, _("Missing requesting-user-name attribute.")); return; } } /* * Look for the "purge-jobs" attribute... */ if ((attr = ippFindAttribute(con->request, "purge-jobs", IPP_TAG_BOOLEAN)) != NULL) purge = attr->values[0].boolean ? CUPSD_JOB_PURGE : CUPSD_JOB_DEFAULT; else purge = CUPSD_JOB_PURGE; break; case IPP_CANCEL_MY_JOBS : if (con->username[0]) username = con->username; else if ((attr = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_NAME)) != NULL) username = attr->values[0].string.text; else { send_ipp_status(con, IPP_BAD_REQUEST, _("Missing requesting-user-name attribute.")); return; } default : break; } job_ids = ippFindAttribute(con->request, "job-ids", IPP_TAG_INTEGER); /* * See if we have a printer URI... */ if (strcmp(uri->name, "printer-uri")) { send_ipp_status(con, IPP_BAD_REQUEST, _("The printer-uri attribute is required.")); return; } /* * And if the destination is valid... */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI? */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if ((!strncmp(resource, "/printers/", 10) && resource[10]) || (!strncmp(resource, "/classes/", 9) && resource[9])) { send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } if (job_ids) { for (i = 0; i < job_ids->num_values; i ++) { if ((job = cupsdFindJob(job_ids->values[i].integer)) == NULL) break; if (con->request->request.op.operation_id == IPP_CANCEL_MY_JOBS && _cups_strcasecmp(job->username, username)) break; } if (i < job_ids->num_values) { send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), job_ids->values[i].integer); return; } for (i = 0; i < job_ids->num_values; i ++) { job = cupsdFindJob(job_ids->values[i].integer); cupsdSetJobState(job, IPP_JOB_CANCELED, purge, purge == CUPSD_JOB_PURGE ? "Job purged by user." : "Job canceled by user."); } cupsdLogMessage(CUPSD_LOG_INFO, "Selected jobs were %s by \"%s\".", purge == CUPSD_JOB_PURGE ? "purged" : "canceled", get_username(con)); } else { /* * Cancel all jobs on all printers... */ cupsdCancelJobs(NULL, username, purge); cupsdLogMessage(CUPSD_LOG_INFO, "All jobs were %s by \"%s\".", purge == CUPSD_JOB_PURGE ? "purged" : "canceled", get_username(con)); } } else { /* * Check policy... */ if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } if (job_ids) { for (i = 0; i < job_ids->num_values; i ++) { if ((job = cupsdFindJob(job_ids->values[i].integer)) == NULL || _cups_strcasecmp(job->dest, printer->name)) break; if (con->request->request.op.operation_id == IPP_CANCEL_MY_JOBS && _cups_strcasecmp(job->username, username)) break; } if (i < job_ids->num_values) { send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), job_ids->values[i].integer); return; } for (i = 0; i < job_ids->num_values; i ++) { job = cupsdFindJob(job_ids->values[i].integer); cupsdSetJobState(job, IPP_JOB_CANCELED, purge, purge == CUPSD_JOB_PURGE ? "Job purged by user." : "Job canceled by user."); } cupsdLogMessage(CUPSD_LOG_INFO, "Selected jobs were %s by \"%s\".", purge == CUPSD_JOB_PURGE ? "purged" : "canceled", get_username(con)); } else { /* * Cancel all of the jobs on the named printer... */ cupsdCancelJobs(printer->name, username, purge); cupsdLogMessage(CUPSD_LOG_INFO, "All jobs on \"%s\" were %s by \"%s\".", printer->name, purge == CUPSD_JOB_PURGE ? "purged" : "canceled", get_username(con)); } } con->response->request.status.status_code = IPP_OK; cupsdCheckJobs(); } /* * 'cancel_job()' - Cancel a print job. */ static void cancel_job(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Job or Printer URI */ { ipp_attribute_t *attr; /* Current attribute */ int jobid; /* Job ID */ char scheme[HTTP_MAX_URI], /* Scheme portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ cupsd_job_t *job; /* Job information */ cups_ptype_t dtype; /* Destination type (printer/class) */ cupsd_printer_t *printer; /* Printer data */ cupsd_jobaction_t purge; /* Purge the job? */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cancel_job(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * See if we have a job URI or a printer URI... */ if (!strcmp(uri->name, "printer-uri")) { /* * Got a printer URI; see if we also have a job-id attribute... */ if ((attr = ippFindAttribute(con->request, "job-id", IPP_TAG_INTEGER)) == NULL) { send_ipp_status(con, IPP_BAD_REQUEST, _("Got a printer-uri attribute but no job-id.")); return; } if ((jobid = attr->values[0].integer) == 0) { /* * Find the current job on the specified printer... */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * See if there are any pending jobs... */ for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs); job; job = (cupsd_job_t *)cupsArrayNext(ActiveJobs)) if (job->state_value <= IPP_JOB_PROCESSING && !_cups_strcasecmp(job->dest, printer->name)) break; if (job) jobid = job->id; else { /* * No, try stopped jobs... */ for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs); job; job = (cupsd_job_t *)cupsArrayNext(ActiveJobs)) if (job->state_value == IPP_JOB_STOPPED && !_cups_strcasecmp(job->dest, printer->name)) break; if (job) jobid = job->id; else { send_ipp_status(con, IPP_NOT_POSSIBLE, _("No active jobs on %s."), printer->name); return; } } } } else { /* * Got a job URI; parse it to get the job ID... */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (strncmp(resource, "/jobs/", 6)) { /* * Not a valid URI! */ send_ipp_status(con, IPP_BAD_REQUEST, _("Bad job-uri \"%s\"."), uri->values[0].string.text); return; } jobid = atoi(resource + 6); } /* * Look for the "purge-job" attribute... */ if ((attr = ippFindAttribute(con->request, "purge-job", IPP_TAG_BOOLEAN)) != NULL) purge = attr->values[0].boolean ? CUPSD_JOB_PURGE : CUPSD_JOB_DEFAULT; else purge = CUPSD_JOB_DEFAULT; /* * See if the job exists... */ if ((job = cupsdFindJob(jobid)) == NULL) { /* * Nope - return a "not found" error... */ send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), jobid); return; } /* * See if the job is owned by the requesting user... */ if (!validate_user(job, con, job->username, username, sizeof(username))) { send_http_error(con, con->username[0] ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED, cupsdFindDest(job->dest)); return; } /* * See if the job is already completed, canceled, or aborted; if so, * we can't cancel... */ if (job->state_value >= IPP_JOB_CANCELED && purge != CUPSD_JOB_PURGE) { switch (job->state_value) { case IPP_JOB_CANCELED : send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job #%d is already canceled - can\'t cancel."), jobid); break; case IPP_JOB_ABORTED : send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job #%d is already aborted - can\'t cancel."), jobid); break; default : send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job #%d is already completed - can\'t cancel."), jobid); break; } return; } /* * Cancel the job and return... */ cupsdSetJobState(job, IPP_JOB_CANCELED, purge, purge == CUPSD_JOB_PURGE ? "Job purged by \"%s\"" : "Job canceled by \"%s\"", username); cupsdCheckJobs(); if (purge == CUPSD_JOB_PURGE) cupsdLogMessage(CUPSD_LOG_INFO, "[Job %d] Purged by \"%s\".", jobid, username); else cupsdLogMessage(CUPSD_LOG_INFO, "[Job %d] Canceled by \"%s\".", jobid, username); con->response->request.status.status_code = IPP_OK; } /* * 'cancel_subscription()' - Cancel a subscription. */ static void cancel_subscription( cupsd_client_t *con, /* I - Client connection */ int sub_id) /* I - Subscription ID */ { http_status_t status; /* Policy status */ cupsd_subscription_t *sub; /* Subscription */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cancel_subscription(con=%p[%d], sub_id=%d)", con, con->number, sub_id); /* * Is the subscription ID valid? */ if ((sub = cupsdFindSubscription(sub_id)) == NULL) { /* * Bad subscription ID... */ send_ipp_status(con, IPP_NOT_FOUND, _("Subscription #%d does not exist."), sub_id); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(sub->dest ? sub->dest->op_policy_ptr : DefaultPolicyPtr, con, sub->owner)) != HTTP_OK) { send_http_error(con, status, sub->dest); return; } /* * Cancel the subscription... */ cupsdDeleteSubscription(sub, 1); con->response->request.status.status_code = IPP_OK; } /* * 'check_rss_recipient()' - Check that we do not have a duplicate RSS feed URI. */ static int /* O - 1 if OK, 0 if not */ check_rss_recipient( const char *recipient) /* I - Recipient URI */ { cupsd_subscription_t *sub; /* Current subscription */ for (sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions); sub; sub = (cupsd_subscription_t *)cupsArrayNext(Subscriptions)) if (sub->recipient) { /* * Compare the URIs up to the first ?... */ const char *r1, *r2; for (r1 = recipient, r2 = sub->recipient; *r1 == *r2 && *r1 && *r1 != '?' && *r2 && *r2 != '?'; r1 ++, r2 ++); if (*r1 == *r2) return (0); } return (1); } /* * 'check_quotas()' - Check quotas for a printer and user. */ static int /* O - 1 if OK, 0 if forbidden, -1 if limit reached */ check_quotas(cupsd_client_t *con, /* I - Client connection */ cupsd_printer_t *p) /* I - Printer or class */ { char username[33], /* Username */ *name; /* Current user name */ cupsd_quota_t *q; /* Quota data */ #ifdef HAVE_MBR_UID_TO_UUID /* * Use Apple membership APIs which require that all names represent * valid user account or group records accessible by the server. */ uuid_t usr_uuid; /* UUID for job requesting user */ uuid_t usr2_uuid; /* UUID for ACL user name entry */ uuid_t grp_uuid; /* UUID for ACL group name entry */ int mbr_err; /* Error from membership function */ int is_member; /* Is this user a member? */ #else /* * Use standard POSIX APIs for checking users and groups... */ struct passwd *pw; /* User password data */ #endif /* HAVE_MBR_UID_TO_UUID */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "check_quotas(%p[%d], %p[%s])", con, con->number, p, p->name); /* * Figure out who is printing... */ strlcpy(username, get_username(con), sizeof(username)); if ((name = strchr(username, '@')) != NULL) *name = '\0'; /* Strip @REALM */ /* * Check global active job limits for printers and users... */ if (MaxJobsPerPrinter) { /* * Check if there are too many pending jobs on this printer... */ if (cupsdGetPrinterJobCount(p->name) >= MaxJobsPerPrinter) { cupsdLogMessage(CUPSD_LOG_INFO, "Too many jobs for printer \"%s\"...", p->name); return (-1); } } if (MaxJobsPerUser) { /* * Check if there are too many pending jobs for this user... */ if (cupsdGetUserJobCount(username) >= MaxJobsPerUser) { cupsdLogMessage(CUPSD_LOG_INFO, "Too many jobs for user \"%s\"...", username); return (-1); } } /* * Check against users... */ if (cupsArrayCount(p->users) == 0 && p->k_limit == 0 && p->page_limit == 0) return (1); if (cupsArrayCount(p->users)) { #ifdef HAVE_MBR_UID_TO_UUID /* * Get UUID for job requesting user... */ if (mbr_user_name_to_uuid((char *)username, usr_uuid)) { /* * Unknown user... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "check_quotas: UUID lookup failed for user \"%s\"", username); cupsdLogMessage(CUPSD_LOG_INFO, "Denying user \"%s\" access to printer \"%s\" " "(unknown user)...", username, p->name); return (0); } #else /* * Get UID and GID of requesting user... */ pw = getpwnam(username); endpwent(); #endif /* HAVE_MBR_UID_TO_UUID */ for (name = (char *)cupsArrayFirst(p->users); name; name = (char *)cupsArrayNext(p->users)) if (name[0] == '@') { /* * Check group membership... */ #ifdef HAVE_MBR_UID_TO_UUID if (name[1] == '#') { if (uuid_parse(name + 2, grp_uuid)) uuid_clear(grp_uuid); } else if ((mbr_err = mbr_group_name_to_uuid(name + 1, grp_uuid)) != 0) { /* * Invalid ACL entries are ignored for matching; just record a * warning in the log... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "check_quotas: UUID lookup failed for ACL entry " "\"%s\" (err=%d)", name, mbr_err); cupsdLogMessage(CUPSD_LOG_WARN, "Access control entry \"%s\" not a valid group name; " "entry ignored", name); } if ((mbr_err = mbr_check_membership(usr_uuid, grp_uuid, &is_member)) != 0) { /* * At this point, there should be no errors, but check anyways... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "check_quotas: group \"%s\" membership check " "failed (err=%d)", name + 1, mbr_err); is_member = 0; } /* * Stop if we found a match... */ if (is_member) break; #else if (cupsdCheckGroup(username, pw, name + 1)) break; #endif /* HAVE_MBR_UID_TO_UUID */ } #ifdef HAVE_MBR_UID_TO_UUID else { if (name[0] == '#') { if (uuid_parse(name + 1, usr2_uuid)) uuid_clear(usr2_uuid); } else if ((mbr_err = mbr_user_name_to_uuid(name, usr2_uuid)) != 0) { /* * Invalid ACL entries are ignored for matching; just record a * warning in the log... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "check_quotas: UUID lookup failed for ACL entry " "\"%s\" (err=%d)", name, mbr_err); cupsdLogMessage(CUPSD_LOG_WARN, "Access control entry \"%s\" not a valid user name; " "entry ignored", name); } if (!uuid_compare(usr_uuid, usr2_uuid)) break; } #else else if (!_cups_strcasecmp(username, name)) break; #endif /* HAVE_MBR_UID_TO_UUID */ if ((name != NULL) == p->deny_users) { cupsdLogMessage(CUPSD_LOG_INFO, "Denying user \"%s\" access to printer \"%s\"...", username, p->name); return (0); } } /* * Check quotas... */ if (p->k_limit || p->page_limit) { if ((q = cupsdUpdateQuota(p, username, 0, 0)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate quota data for user \"%s\"", username); return (-1); } if ((q->k_count >= p->k_limit && p->k_limit) || (q->page_count >= p->page_limit && p->page_limit)) { cupsdLogMessage(CUPSD_LOG_INFO, "User \"%s\" is over the quota limit...", username); return (-1); } } /* * If we have gotten this far, we're done! */ return (1); } /* * 'close_job()' - Close a multi-file job. */ static void close_job(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI */ { cupsd_job_t *job; /* Job */ ipp_attribute_t *attr; /* Attribute */ char job_uri[HTTP_MAX_URI], /* Job URI */ username[256]; /* User name */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "close_job(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * See if we have a job URI or a printer URI... */ if (strcmp(uri->name, "printer-uri")) { /* * job-uri is not supported by Close-Job! */ send_ipp_status(con, IPP_BAD_REQUEST, _("Close-Job doesn't support the job-uri attribute.")); return; } /* * Got a printer URI; see if we also have a job-id attribute... */ if ((attr = ippFindAttribute(con->request, "job-id", IPP_TAG_INTEGER)) == NULL) { send_ipp_status(con, IPP_BAD_REQUEST, _("Got a printer-uri attribute but no job-id.")); return; } if ((job = cupsdFindJob(attr->values[0].integer)) == NULL) { /* * Nope - return a "not found" error... */ send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), attr->values[0].integer); return; } /* * See if the job is owned by the requesting user... */ if (!validate_user(job, con, job->username, username, sizeof(username))) { send_http_error(con, con->username[0] ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED, cupsdFindDest(job->dest)); return; } /* * Add any ending sheet... */ if (cupsdTimeoutJob(job)) return; if (job->state_value == IPP_JOB_STOPPED) { job->state->values[0].integer = IPP_JOB_PENDING; job->state_value = IPP_JOB_PENDING; } else if (job->state_value == IPP_JOB_HELD) { if ((attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD)) == NULL) attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME); if (!attr || !strcmp(attr->values[0].string.text, "no-hold")) { job->state->values[0].integer = IPP_JOB_PENDING; job->state_value = IPP_JOB_PENDING; } } job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); /* * Fill in the response info... */ httpAssembleURIf(HTTP_URI_CODING_ALL, job_uri, sizeof(job_uri), "ipp", NULL, con->clientname, con->clientport, "/jobs/%d", job->id); ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_URI, "job-uri", NULL, job_uri); ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id); ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_ENUM, "job-state", job->state_value); con->response->request.status.status_code = IPP_OK; /* * Start the job if necessary... */ cupsdCheckJobs(); } /* * 'copy_attrs()' - Copy attributes from one request to another. */ static void copy_attrs(ipp_t *to, /* I - Destination request */ ipp_t *from, /* I - Source request */ cups_array_t *ra, /* I - Requested attributes */ ipp_tag_t group, /* I - Group to copy */ int quickcopy, /* I - Do a quick copy? */ cups_array_t *exclude) /* I - Attributes to exclude? */ { ipp_attribute_t *fromattr; /* Source attribute */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "copy_attrs(to=%p, from=%p, ra=%p, group=%x, quickcopy=%d)", to, from, ra, group, quickcopy); if (!to || !from) return; for (fromattr = from->attrs; fromattr; fromattr = fromattr->next) { /* * Filter attributes as needed... */ if ((group != IPP_TAG_ZERO && fromattr->group_tag != group && fromattr->group_tag != IPP_TAG_ZERO) || !fromattr->name) continue; if (!strcmp(fromattr->name, "document-password") || !strcmp(fromattr->name, "job-authorization-uri") || !strcmp(fromattr->name, "job-password") || !strcmp(fromattr->name, "job-password-encryption") || !strcmp(fromattr->name, "job-printer-uri")) continue; if (exclude && (cupsArrayFind(exclude, fromattr->name) || cupsArrayFind(exclude, "all"))) { /* * We need to exclude this attribute for security reasons; we require the * job-id attribute regardless of the security settings for IPP * conformance. * * The job-printer-uri attribute is handled by copy_job_attrs(). * * Subscription attribute security is handled by copy_subscription_attrs(). */ if (strcmp(fromattr->name, "job-id")) continue; } if (!ra || cupsArrayFind(ra, fromattr->name)) { /* * Don't send collection attributes by default to IPP/1.x clients * since many do not support collections. Also don't send * media-col-database unless specifically requested by the client. */ if (fromattr->value_tag == IPP_TAG_BEGIN_COLLECTION && !ra && (to->request.status.version[0] == 1 || !strcmp(fromattr->name, "media-col-database"))) continue; ippCopyAttribute(to, fromattr, quickcopy); } } } /* * 'copy_banner()' - Copy a banner file to the requests directory for the * specified job. */ static int /* O - Size of banner file in kbytes */ copy_banner(cupsd_client_t *con, /* I - Client connection */ cupsd_job_t *job, /* I - Job information */ const char *name) /* I - Name of banner */ { int i; /* Looping var */ int kbytes; /* Size of banner file in kbytes */ char filename[1024]; /* Job filename */ cupsd_banner_t *banner; /* Pointer to banner */ cups_file_t *in; /* Input file */ cups_file_t *out; /* Output file */ int ch; /* Character from file */ char attrname[255], /* Name of attribute */ *s; /* Pointer into name */ ipp_attribute_t *attr; /* Attribute */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "copy_banner(con=%p[%d], job=%p[%d], name=\"%s\")", con, con ? con->number : -1, job, job->id, name ? name : "(null)"); /* * Find the banner; return if not found or "none"... */ if (!name || !strcmp(name, "none") || (banner = cupsdFindBanner(name)) == NULL) return (0); /* * Open the banner and job files... */ if (add_file(con, job, banner->filetype, 0)) return (-1); snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id, job->num_files); if ((out = cupsFileOpen(filename, "w")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create banner job file %s - %s", filename, strerror(errno)); job->num_files --; return (0); } fchmod(cupsFileNumber(out), 0640); fchown(cupsFileNumber(out), RunUser, Group); /* * Try the localized banner file under the subdirectory... */ strlcpy(attrname, job->attrs->attrs->next->values[0].string.text, sizeof(attrname)); if (strlen(attrname) > 2 && attrname[2] == '-') { /* * Convert ll-cc to ll_CC... */ attrname[2] = '_'; attrname[3] = (char)toupper(attrname[3] & 255); attrname[4] = (char)toupper(attrname[4] & 255); } snprintf(filename, sizeof(filename), "%s/banners/%s/%s", DataDir, attrname, name); if (access(filename, 0) && strlen(attrname) > 2) { /* * Wasn't able to find "ll_CC" locale file; try the non-national * localization banner directory. */ attrname[2] = '\0'; snprintf(filename, sizeof(filename), "%s/banners/%s/%s", DataDir, attrname, name); } if (access(filename, 0)) { /* * Use the non-localized banner file. */ snprintf(filename, sizeof(filename), "%s/banners/%s", DataDir, name); } if ((in = cupsFileOpen(filename, "r")) == NULL) { cupsFileClose(out); unlink(filename); cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open banner template file %s - %s", filename, strerror(errno)); job->num_files --; return (0); } /* * Parse the file to the end... */ while ((ch = cupsFileGetChar(in)) != EOF) if (ch == '{') { /* * Get an attribute name... */ for (s = attrname; (ch = cupsFileGetChar(in)) != EOF;) if (!isalpha(ch & 255) && ch != '-' && ch != '?') break; else if (s < (attrname + sizeof(attrname) - 1)) *s++ = (char)ch; else break; *s = '\0'; if (ch != '}') { /* * Ignore { followed by stuff that is not an attribute name... */ cupsFilePrintf(out, "{%s%c", attrname, ch); continue; } /* * See if it is defined... */ if (attrname[0] == '?') s = attrname + 1; else s = attrname; if (!strcmp(s, "printer-name")) { cupsFilePuts(out, job->dest); continue; } else if ((attr = ippFindAttribute(job->attrs, s, IPP_TAG_ZERO)) == NULL) { /* * See if we have a leading question mark... */ if (attrname[0] != '?') { /* * Nope, write to file as-is; probably a PostScript procedure... */ cupsFilePrintf(out, "{%s}", attrname); } continue; } /* * Output value(s)... */ for (i = 0; i < attr->num_values; i ++) { if (i) cupsFilePutChar(out, ','); switch (attr->value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : if (!strncmp(s, "time-at-", 8)) { struct timeval tv; /* Time value */ tv.tv_sec = attr->values[i].integer; tv.tv_usec = 0; cupsFilePuts(out, cupsdGetDateTime(&tv, CUPSD_TIME_STANDARD)); } else cupsFilePrintf(out, "%d", attr->values[i].integer); break; case IPP_TAG_BOOLEAN : cupsFilePrintf(out, "%d", attr->values[i].boolean); break; case IPP_TAG_NOVALUE : cupsFilePuts(out, "novalue"); break; case IPP_TAG_RANGE : cupsFilePrintf(out, "%d-%d", attr->values[i].range.lower, attr->values[i].range.upper); break; case IPP_TAG_RESOLUTION : cupsFilePrintf(out, "%dx%d%s", attr->values[i].resolution.xres, attr->values[i].resolution.yres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); break; case IPP_TAG_URI : case IPP_TAG_STRING : case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : if (!_cups_strcasecmp(banner->filetype->type, "postscript")) { /* * Need to quote strings for PS banners... */ const char *p; for (p = attr->values[i].string.text; *p; p ++) { if (*p == '(' || *p == ')' || *p == '\\') { cupsFilePutChar(out, '\\'); cupsFilePutChar(out, *p); } else if (*p < 32 || *p > 126) cupsFilePrintf(out, "\\%03o", *p & 255); else cupsFilePutChar(out, *p); } } else cupsFilePuts(out, attr->values[i].string.text); break; default : break; /* anti-compiler-warning-code */ } } } else if (ch == '\\') /* Quoted char */ { ch = cupsFileGetChar(in); if (ch != '{') /* Only do special handling for \{ */ cupsFilePutChar(out, '\\'); cupsFilePutChar(out, ch); } else cupsFilePutChar(out, ch); cupsFileClose(in); kbytes = (cupsFileTell(out) + 1023) / 1024; job->koctets += kbytes; if ((attr = ippFindAttribute(job->attrs, "job-k-octets", IPP_TAG_INTEGER)) != NULL) attr->values[0].integer += kbytes; cupsFileClose(out); return (kbytes); } /* * 'copy_file()' - Copy a PPD file... */ static int /* O - 0 = success, -1 = error */ copy_file(const char *from, /* I - Source file */ const char *to, /* I - Destination file */ mode_t mode) /* I - Permissions */ { cups_file_t *src, /* Source file */ *dst; /* Destination file */ int bytes; /* Bytes to read/write */ char buffer[2048]; /* Copy buffer */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "copy_file(\"%s\", \"%s\")", from, to); /* * Open the source and destination file for a copy... */ if ((src = cupsFileOpen(from, "rb")) == NULL) return (-1); if ((dst = cupsdCreateConfFile(to, mode)) == NULL) { cupsFileClose(src); return (-1); } /* * Copy the source file to the destination... */ while ((bytes = cupsFileRead(src, buffer, sizeof(buffer))) > 0) if (cupsFileWrite(dst, buffer, (size_t)bytes) < bytes) { cupsFileClose(src); cupsFileClose(dst); return (-1); } /* * Close both files and return... */ cupsFileClose(src); return (cupsdCloseCreatedConfFile(dst, to)); } /* * 'copy_model()' - Copy a PPD model file, substituting default values * as needed... */ static int /* O - 0 = success, -1 = error */ copy_model(cupsd_client_t *con, /* I - Client connection */ const char *from, /* I - Source file */ const char *to) /* I - Destination file */ { fd_set input; /* select() input set */ struct timeval timeout; /* select() timeout */ int maxfd; /* Max file descriptor for select() */ char tempfile[1024]; /* Temporary PPD file */ int tempfd; /* Temporary PPD file descriptor */ int temppid; /* Process ID of cups-driverd */ int temppipe[2]; /* Temporary pipes */ char *argv[4], /* Command-line arguments */ *envp[MAX_ENV]; /* Environment */ cups_file_t *src, /* Source file */ *dst; /* Destination file */ ppd_file_t *ppd; /* PPD file */ int bytes, /* Bytes from pipe */ total; /* Total bytes from pipe */ char buffer[2048]; /* Copy buffer */ int i; /* Looping var */ char option[PPD_MAX_NAME], /* Option name */ choice[PPD_MAX_NAME]; /* Choice name */ ppd_size_t *size; /* Default size */ int num_defaults; /* Number of default options */ cups_option_t *defaults; /* Default options */ char cups_protocol[PPD_MAX_LINE]; /* cupsProtocol attribute */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "copy_model(con=%p, from=\"%s\", to=\"%s\")", con, from, to); /* * Run cups-driverd to get the PPD file... */ argv[0] = "cups-driverd"; argv[1] = "cat"; argv[2] = (char *)from; argv[3] = NULL; cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0]))); snprintf(buffer, sizeof(buffer), "%s/daemon/cups-driverd", ServerBin); snprintf(tempfile, sizeof(tempfile), "%s/%d.ppd", TempDir, con->number); tempfd = open(tempfile, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (tempfd < 0 || cupsdOpenPipe(temppipe)) return (-1); cupsdLogMessage(CUPSD_LOG_DEBUG, "copy_model: Running \"cups-driverd cat %s\"...", from); if (!cupsdStartProcess(buffer, argv, envp, -1, temppipe[1], CGIPipes[1], -1, -1, 0, DefaultProfile, NULL, &temppid)) { close(tempfd); unlink(tempfile); return (-1); } close(temppipe[1]); /* * Wait up to 30 seconds for the PPD file to be copied... */ total = 0; if (temppipe[0] > CGIPipes[0]) maxfd = temppipe[0] + 1; else maxfd = CGIPipes[0] + 1; for (;;) { /* * See if we have data ready... */ FD_ZERO(&input); FD_SET(temppipe[0], &input); FD_SET(CGIPipes[0], &input); timeout.tv_sec = 30; timeout.tv_usec = 0; if ((i = select(maxfd, &input, NULL, NULL, &timeout)) < 0) { if (errno == EINTR) continue; else break; } else if (i == 0) { /* * We have timed out... */ break; } if (FD_ISSET(temppipe[0], &input)) { /* * Read the PPD file from the pipe, and write it to the PPD file. */ if ((bytes = read(temppipe[0], buffer, sizeof(buffer))) > 0) { if (write(tempfd, buffer, (size_t)bytes) < bytes) break; total += bytes; } else break; } if (FD_ISSET(CGIPipes[0], &input)) cupsdUpdateCGI(); } close(temppipe[0]); close(tempfd); if (!total) { /* * No data from cups-deviced... */ cupsdLogMessage(CUPSD_LOG_ERROR, "copy_model: empty PPD file"); unlink(tempfile); return (-1); } /* * Open the source file for a copy... */ if ((src = cupsFileOpen(tempfile, "rb")) == NULL) { unlink(tempfile); return (-1); } /* * Read the source file and see what page sizes are supported... */ if ((ppd = _ppdOpen(src, _PPD_LOCALIZATION_NONE)) == NULL) { cupsFileClose(src); unlink(tempfile); return (-1); } /* * Open the destination (if possible) and set the default options... */ num_defaults = 0; defaults = NULL; cups_protocol[0] = '\0'; if ((dst = cupsFileOpen(to, "rb")) != NULL) { /* * Read all of the default lines from the old PPD... */ while (cupsFileGets(dst, buffer, sizeof(buffer))) if (!strncmp(buffer, "*Default", 8)) { /* * Add the default option... */ if (!ppd_parse_line(buffer, option, sizeof(option), choice, sizeof(choice))) { ppd_option_t *ppdo; /* PPD option */ /* * Only add the default if the default hasn't already been * set and the choice exists in the new PPD... */ if (!cupsGetOption(option, num_defaults, defaults) && (ppdo = ppdFindOption(ppd, option)) != NULL && ppdFindChoice(ppdo, choice)) num_defaults = cupsAddOption(option, choice, num_defaults, &defaults); } } else if (!strncmp(buffer, "*cupsProtocol:", 14)) strlcpy(cups_protocol, buffer, sizeof(cups_protocol)); cupsFileClose(dst); } else if ((size = ppdPageSize(ppd, DefaultPaperSize)) != NULL) { /* * Add the default media sizes... */ num_defaults = cupsAddOption("PageSize", size->name, num_defaults, &defaults); num_defaults = cupsAddOption("PageRegion", size->name, num_defaults, &defaults); num_defaults = cupsAddOption("PaperDimension", size->name, num_defaults, &defaults); num_defaults = cupsAddOption("ImageableArea", size->name, num_defaults, &defaults); } ppdClose(ppd); /* * Open the destination file for a copy... */ if ((dst = cupsdCreateConfFile(to, ConfigFilePerm)) == NULL) { cupsFreeOptions(num_defaults, defaults); cupsFileClose(src); unlink(tempfile); return (-1); } /* * Copy the source file to the destination... */ cupsFileRewind(src); while (cupsFileGets(src, buffer, sizeof(buffer))) { if (!strncmp(buffer, "*Default", 8)) { /* * Check for an previous default option choice... */ if (!ppd_parse_line(buffer, option, sizeof(option), choice, sizeof(choice))) { const char *val; /* Default option value */ if ((val = cupsGetOption(option, num_defaults, defaults)) != NULL) { /* * Substitute the previous choice... */ snprintf(buffer, sizeof(buffer), "*Default%s: %s", option, val); } } } cupsFilePrintf(dst, "%s\n", buffer); } if (cups_protocol[0]) cupsFilePrintf(dst, "%s\n", cups_protocol); cupsFreeOptions(num_defaults, defaults); /* * Close both files and return... */ cupsFileClose(src); unlink(tempfile); return (cupsdCloseCreatedConfFile(dst, to)); } /* * 'copy_job_attrs()' - Copy job attributes. */ static void copy_job_attrs(cupsd_client_t *con, /* I - Client connection */ cupsd_job_t *job, /* I - Job */ cups_array_t *ra, /* I - Requested attributes array */ cups_array_t *exclude) /* I - Private attributes array */ { char job_uri[HTTP_MAX_URI]; /* Job URI */ /* * Send the requested attributes for each job... */ if (!cupsArrayFind(exclude, "all")) { if ((!exclude || !cupsArrayFind(exclude, "number-of-documents")) && (!ra || cupsArrayFind(ra, "number-of-documents"))) ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "number-of-documents", job->num_files); if ((!exclude || !cupsArrayFind(exclude, "job-media-progress")) && (!ra || cupsArrayFind(ra, "job-media-progress"))) ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-media-progress", job->progress); if ((!exclude || !cupsArrayFind(exclude, "job-more-info")) && (!ra || cupsArrayFind(ra, "job-more-info"))) { httpAssembleURIf(HTTP_URI_CODING_ALL, job_uri, sizeof(job_uri), "http", NULL, con->clientname, con->clientport, "/jobs/%d", job->id); ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_URI, "job-more-info", NULL, job_uri); } if (job->state_value > IPP_JOB_PROCESSING && (!exclude || !cupsArrayFind(exclude, "job-preserved")) && (!ra || cupsArrayFind(ra, "job-preserved"))) ippAddBoolean(con->response, IPP_TAG_JOB, "job-preserved", job->num_files > 0); if ((!exclude || !cupsArrayFind(exclude, "job-printer-up-time")) && (!ra || cupsArrayFind(ra, "job-printer-up-time"))) ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-printer-up-time", time(NULL)); } if (!ra || cupsArrayFind(ra, "job-printer-uri")) { httpAssembleURIf(HTTP_URI_CODING_ALL, job_uri, sizeof(job_uri), "ipp", NULL, con->clientname, con->clientport, (job->dtype & CUPS_PRINTER_CLASS) ? "/classes/%s" : "/printers/%s", job->dest); ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, job_uri); } if (!ra || cupsArrayFind(ra, "job-uri")) { httpAssembleURIf(HTTP_URI_CODING_ALL, job_uri, sizeof(job_uri), "ipp", NULL, con->clientname, con->clientport, "/jobs/%d", job->id); ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_URI, "job-uri", NULL, job_uri); } if (job->attrs) { copy_attrs(con->response, job->attrs, ra, IPP_TAG_JOB, 0, exclude); } else { /* * Generate attributes from the job structure... */ if (job->completed_time && (!ra || cupsArrayFind(ra, "date-time-at-completed"))) ippAddDate(con->response, IPP_TAG_JOB, "date-time-at-completed", ippTimeToDate(job->completed_time)); if (job->creation_time && (!ra || cupsArrayFind(ra, "date-time-at-creation"))) ippAddDate(con->response, IPP_TAG_JOB, "date-time-at-creation", ippTimeToDate(job->creation_time)); if (!ra || cupsArrayFind(ra, "job-id")) ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id); if (!ra || cupsArrayFind(ra, "job-k-octets")) ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-k-octets", job->koctets); if (job->name && (!ra || cupsArrayFind(ra, "job-name"))) ippAddString(con->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_NAME), "job-name", NULL, job->name); if (job->username && (!ra || cupsArrayFind(ra, "job-originating-user-name"))) ippAddString(con->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_NAME), "job-originating-user-name", NULL, job->username); if (!ra || cupsArrayFind(ra, "job-state")) ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_ENUM, "job-state", (int)job->state_value); if (!ra || cupsArrayFind(ra, "job-state-reasons")) { switch (job->state_value) { default : /* Should never get here for processing, pending, held, or stopped jobs since they don't get unloaded... */ break; case IPP_JSTATE_ABORTED : ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "job-aborted-by-system"); break; case IPP_JSTATE_CANCELED : ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "job-canceled-by-user"); break; case IPP_JSTATE_COMPLETED : ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "job-completed-successfully"); break; } } if (job->completed_time && (!ra || cupsArrayFind(ra, "time-at-completed"))) ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-completed", (int)job->completed_time); if (job->creation_time && (!ra || cupsArrayFind(ra, "time-at-creation"))) ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation", (int)job->creation_time); } } /* * 'copy_printer_attrs()' - Copy printer attributes. */ static void copy_printer_attrs( cupsd_client_t *con, /* I - Client connection */ cupsd_printer_t *printer, /* I - Printer */ cups_array_t *ra) /* I - Requested attributes array */ { char printer_uri[HTTP_MAX_URI]; /* Printer URI */ char printer_icons[HTTP_MAX_URI]; /* Printer icons */ time_t curtime; /* Current time */ int i; /* Looping var */ /* * Copy the printer attributes to the response using requested-attributes * and document-format attributes that may be provided by the client. */ _cupsRWLockRead(&printer->lock); curtime = time(NULL); if (!ra || cupsArrayFind(ra, "marker-change-time")) ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "marker-change-time", printer->marker_time); if (printer->num_printers > 0 && (!ra || cupsArrayFind(ra, "member-uris"))) { ipp_attribute_t *member_uris; /* member-uris attribute */ cupsd_printer_t *p2; /* Printer in class */ ipp_attribute_t *p2_uri; /* printer-uri-supported for class printer */ if ((member_uris = ippAddStrings(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, "member-uris", printer->num_printers, NULL, NULL)) != NULL) { for (i = 0; i < printer->num_printers; i ++) { p2 = printer->printers[i]; if ((p2_uri = ippFindAttribute(p2->attrs, "printer-uri-supported", IPP_TAG_URI)) != NULL) member_uris->values[i].string.text = _cupsStrRetain(p2_uri->values[0].string.text); else { httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri), "ipp", NULL, con->clientname, con->clientport, (p2->type & CUPS_PRINTER_CLASS) ? "/classes/%s" : "/printers/%s", p2->name); member_uris->values[i].string.text = _cupsStrAlloc(printer_uri); } } } } if (printer->alert && (!ra || cupsArrayFind(ra, "printer-alert"))) ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_STRING, "printer-alert", NULL, printer->alert); if (printer->alert_description && (!ra || cupsArrayFind(ra, "printer-alert-description"))) ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-alert-description", NULL, printer->alert_description); if (!ra || cupsArrayFind(ra, "printer-config-change-date-time")) ippAddDate(con->response, IPP_TAG_PRINTER, "printer-config-change-date-time", ippTimeToDate(printer->config_time)); if (!ra || cupsArrayFind(ra, "printer-config-change-time")) ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-config-change-time", printer->config_time); if (!ra || cupsArrayFind(ra, "printer-current-time")) ippAddDate(con->response, IPP_TAG_PRINTER, "printer-current-time", ippTimeToDate(curtime)); #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) if (!ra || cupsArrayFind(ra, "printer-dns-sd-name")) { if (printer->reg_name) ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-dns-sd-name", NULL, printer->reg_name); else ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_NOVALUE, "printer-dns-sd-name", 0); } #endif /* HAVE_DNSSD || HAVE_AVAHI */ if (!ra || cupsArrayFind(ra, "printer-error-policy")) ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-error-policy", NULL, printer->error_policy); if (!ra || cupsArrayFind(ra, "printer-error-policy-supported")) { static const char * const errors[] =/* printer-error-policy-supported values */ { "abort-job", "retry-current-job", "retry-job", "stop-printer" }; if (printer->type & CUPS_PRINTER_CLASS) ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY, "printer-error-policy-supported", NULL, "retry-current-job"); else ippAddStrings(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY, "printer-error-policy-supported", sizeof(errors) / sizeof(errors[0]), NULL, errors); } if (!ra || cupsArrayFind(ra, "printer-icons")) { httpAssembleURIf(HTTP_URI_CODING_ALL, printer_icons, sizeof(printer_icons), "http", NULL, con->clientname, con->clientport, "/icons/%s.png", printer->name); ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-icons", NULL, printer_icons); cupsdLogMessage(CUPSD_LOG_DEBUG2, "printer-icons=\"%s\"", printer_icons); } if (!ra || cupsArrayFind(ra, "printer-is-accepting-jobs")) ippAddBoolean(con->response, IPP_TAG_PRINTER, "printer-is-accepting-jobs", (char)printer->accepting); if (!ra || cupsArrayFind(ra, "printer-is-shared")) ippAddBoolean(con->response, IPP_TAG_PRINTER, "printer-is-shared", (char)printer->shared); if (!ra || cupsArrayFind(ra, "printer-is-temporary")) ippAddBoolean(con->response, IPP_TAG_PRINTER, "printer-is-temporary", (char)printer->temporary); if (!ra || cupsArrayFind(ra, "printer-more-info")) { httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri), "http", NULL, con->clientname, con->clientport, (printer->type & CUPS_PRINTER_CLASS) ? "/classes/%s" : "/printers/%s", printer->name); ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-more-info", NULL, printer_uri); } if (!ra || cupsArrayFind(ra, "printer-op-policy")) ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-op-policy", NULL, printer->op_policy); if (!ra || cupsArrayFind(ra, "printer-state")) ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", printer->state); if (!ra || cupsArrayFind(ra, "printer-state-change-date-time")) ippAddDate(con->response, IPP_TAG_PRINTER, "printer-state-change-date-time", ippTimeToDate(printer->state_time)); if (!ra || cupsArrayFind(ra, "printer-state-change-time")) ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-state-change-time", printer->state_time); if (!ra || cupsArrayFind(ra, "printer-state-message")) ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-state-message", NULL, printer->state_message); if (!ra || cupsArrayFind(ra, "printer-state-reasons")) add_printer_state_reasons(con, printer); if (!ra || cupsArrayFind(ra, "printer-type")) { cups_ptype_t type; /* printer-type value */ /* * Add the CUPS-specific printer-type attribute... */ type = printer->type; if (printer == DefaultPrinter) type |= CUPS_PRINTER_DEFAULT; if (!printer->accepting) type |= CUPS_PRINTER_REJECTING; if (!printer->shared) type |= CUPS_PRINTER_NOT_SHARED; ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-type", (int)type); } if (!ra || cupsArrayFind(ra, "printer-up-time")) ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-up-time", curtime); if (!ra || cupsArrayFind(ra, "printer-uri-supported")) { httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri), "ipp", NULL, con->clientname, con->clientport, (printer->type & CUPS_PRINTER_CLASS) ? "/classes/%s" : "/printers/%s", printer->name); ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", NULL, printer_uri); cupsdLogMessage(CUPSD_LOG_DEBUG2, "printer-uri-supported=\"%s\"", printer_uri); } if (!ra || cupsArrayFind(ra, "queued-job-count")) add_queued_job_count(con, printer); copy_attrs(con->response, printer->attrs, ra, IPP_TAG_ZERO, 0, NULL); if (printer->ppd_attrs) copy_attrs(con->response, printer->ppd_attrs, ra, IPP_TAG_ZERO, 0, NULL); copy_attrs(con->response, CommonData, ra, IPP_TAG_ZERO, IPP_TAG_COPY, NULL); _cupsRWUnlock(&printer->lock); } /* * 'copy_subscription_attrs()' - Copy subscription attributes. */ static void copy_subscription_attrs( cupsd_client_t *con, /* I - Client connection */ cupsd_subscription_t *sub, /* I - Subscription */ cups_array_t *ra, /* I - Requested attributes array */ cups_array_t *exclude) /* I - Private attributes array */ { ipp_attribute_t *attr; /* Current attribute */ char printer_uri[HTTP_MAX_URI]; /* Printer URI */ int count; /* Number of events */ unsigned mask; /* Current event mask */ const char *name; /* Current event name */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "copy_subscription_attrs(con=%p, sub=%p, ra=%p, exclude=%p)", con, sub, ra, exclude); /* * Copy the subscription attributes to the response using the * requested-attributes attribute that may be provided by the client. */ if (!exclude || !cupsArrayFind(exclude, "all")) { if ((!exclude || !cupsArrayFind(exclude, "notify-events")) && (!ra || cupsArrayFind(ra, "notify-events"))) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "copy_subscription_attrs: notify-events"); if ((name = cupsdEventName((cupsd_eventmask_t)sub->mask)) != NULL) { /* * Simple event list... */ ippAddString(con->response, IPP_TAG_SUBSCRIPTION, (ipp_tag_t)(IPP_TAG_KEYWORD | IPP_TAG_COPY), "notify-events", NULL, name); } else { /* * Complex event list... */ for (mask = 1, count = 0; mask < CUPSD_EVENT_ALL; mask <<= 1) if (sub->mask & mask) count ++; attr = ippAddStrings(con->response, IPP_TAG_SUBSCRIPTION, (ipp_tag_t)(IPP_TAG_KEYWORD | IPP_TAG_COPY), "notify-events", count, NULL, NULL); for (mask = 1, count = 0; mask < CUPSD_EVENT_ALL; mask <<= 1) if (sub->mask & mask) { attr->values[count].string.text = (char *)cupsdEventName((cupsd_eventmask_t)mask); count ++; } } } if ((!exclude || !cupsArrayFind(exclude, "notify-lease-duration")) && (!sub->job && (!ra || cupsArrayFind(ra, "notify-lease-duration")))) ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-lease-duration", sub->lease); if ((!exclude || !cupsArrayFind(exclude, "notify-recipient-uri")) && (sub->recipient && (!ra || cupsArrayFind(ra, "notify-recipient-uri")))) ippAddString(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, "notify-recipient-uri", NULL, sub->recipient); else if ((!exclude || !cupsArrayFind(exclude, "notify-pull-method")) && (!ra || cupsArrayFind(ra, "notify-pull-method"))) ippAddString(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_KEYWORD, "notify-pull-method", NULL, "ippget"); if ((!exclude || !cupsArrayFind(exclude, "notify-subscriber-user-name")) && (!ra || cupsArrayFind(ra, "notify-subscriber-user-name"))) ippAddString(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_NAME, "notify-subscriber-user-name", NULL, sub->owner); if ((!exclude || !cupsArrayFind(exclude, "notify-time-interval")) && (!ra || cupsArrayFind(ra, "notify-time-interval"))) ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-time-interval", sub->interval); if (sub->user_data_len > 0 && (!exclude || !cupsArrayFind(exclude, "notify-user-data")) && (!ra || cupsArrayFind(ra, "notify-user-data"))) ippAddOctetString(con->response, IPP_TAG_SUBSCRIPTION, "notify-user-data", sub->user_data, sub->user_data_len); } if (sub->job && (!ra || cupsArrayFind(ra, "notify-job-id"))) ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-job-id", sub->job->id); if (sub->dest && (!ra || cupsArrayFind(ra, "notify-printer-uri"))) { httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri), "ipp", NULL, con->clientname, con->clientport, "/printers/%s", sub->dest->name); ippAddString(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, "notify-printer-uri", NULL, printer_uri); } if (!ra || cupsArrayFind(ra, "notify-subscription-id")) ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-subscription-id", sub->id); } /* * 'create_job()' - Print a file to a printer or class. */ static void create_job(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI */ { int i; /* Looping var */ cupsd_printer_t *printer; /* Printer */ cupsd_job_t *job; /* New job */ static const char * const forbidden_attrs[] = { /* List of forbidden attributes */ "compression", "document-format", "document-name", "document-natural-language" }; cupsdLogMessage(CUPSD_LOG_DEBUG2, "create_job(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, NULL, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check for invalid Create-Job attributes and log a warning or error depending * on whether cupsd is running in "strict conformance" mode... */ for (i = 0; i < (int)(sizeof(forbidden_attrs) / sizeof(forbidden_attrs[0])); i ++) if (ippFindAttribute(con->request, forbidden_attrs[i], IPP_TAG_ZERO)) { if (StrictConformance) { send_ipp_status(con, IPP_BAD_REQUEST, _("The '%s' operation attribute cannot be supplied in a " "Create-Job request."), forbidden_attrs[i]); return; } cupsdLogMessage(CUPSD_LOG_WARN, "Unexpected '%s' operation attribute in a Create-Job " "request.", forbidden_attrs[i]); } /* * Create the job object... */ if ((job = add_job(con, printer, NULL)) == NULL) return; job->pending_timeout = 1; /* * Save and log the job... */ cupsdLogJob(job, CUPSD_LOG_INFO, "Queued on \"%s\" by \"%s\".", job->dest, job->username); } /* * 'create_local_bg_thread()' - Background thread for creating a local print queue. */ static void * /* O - Exit status */ create_local_bg_thread( cupsd_printer_t *printer) /* I - Printer */ { cups_file_t *from, /* Source file */ *to; /* Destination file */ char fromppd[1024], /* Source PPD */ toppd[1024], /* Destination PPD */ scheme[32], /* URI scheme */ userpass[256], /* User:pass */ host[256], /* Hostname */ resource[1024], /* Resource path */ line[1024]; /* Line from PPD */ int port; /* Port number */ http_encryption_t encryption; /* Type of encryption to use */ http_t *http; /* Connection to printer */ ipp_t *request, /* Request to printer */ *response; /* Response from printer */ ipp_attribute_t *attr; /* Attribute in response */ /* * Try connecting to the printer... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "%s: Generating PPD file from \"%s\"...", printer->name, printer->device_uri); if (httpSeparateURI(HTTP_URI_CODING_ALL, printer->device_uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) { cupsdLogMessage(CUPSD_LOG_ERROR, "%s: Bad device URI \"%s\".", printer->name, printer->device_uri); return (NULL); } if (!strcmp(scheme, "ipps") || port == 443) encryption = HTTP_ENCRYPTION_ALWAYS; else encryption = HTTP_ENCRYPTION_IF_REQUESTED; if ((http = httpConnect2(host, port, NULL, AF_UNSPEC, encryption, 1, 30000, NULL)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "%s: Unable to connect to %s:%d: %s", printer->name, host, port, cupsLastErrorString()); return (NULL); } /* * Query the printer for its capabilities... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "%s: Connected to %s:%d, sending Get-Printer-Attributes request...", printer->name, host, port); request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer->device_uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "all"); response = cupsDoRequest(http, request, resource); cupsdLogMessage(CUPSD_LOG_DEBUG, "%s: Get-Printer-Attributes returned %s", printer->name, ippErrorString(cupsLastError())); // TODO: Grab printer icon file... httpClose(http); /* * Write the PPD for the queue... */ if (_ppdCreateFromIPP(fromppd, sizeof(fromppd), response)) { if ((!printer->info || !*(printer->info)) && (attr = ippFindAttribute(response, "printer-info", IPP_TAG_TEXT)) != NULL) cupsdSetString(&printer->info, ippGetString(attr, 0, NULL)); if ((!printer->location || !*(printer->location)) && (attr = ippFindAttribute(response, "printer-location", IPP_TAG_TEXT)) != NULL) cupsdSetString(&printer->location, ippGetString(attr, 0, NULL)); if ((!printer->geo_location || !*(printer->geo_location)) && (attr = ippFindAttribute(response, "printer-geo-location", IPP_TAG_URI)) != NULL) cupsdSetString(&printer->geo_location, ippGetString(attr, 0, NULL)); if ((from = cupsFileOpen(fromppd, "r")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "%s: Unable to read generated PPD: %s", printer->name, strerror(errno)); return (NULL); } snprintf(toppd, sizeof(toppd), "%s/ppd/%s.ppd", ServerRoot, printer->name); if ((to = cupsdCreateConfFile(toppd, ConfigFilePerm)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "%s: Unable to create PPD for printer: %s", printer->name, strerror(errno)); cupsFileClose(from); return (NULL); } while (cupsFileGets(from, line, sizeof(line))) cupsFilePrintf(to, "%s\n", line); cupsFileClose(from); if (!cupsdCloseCreatedConfFile(to, toppd)) { printer->config_time = time(NULL); printer->state = IPP_PSTATE_IDLE; printer->accepting = 1; cupsdSetPrinterAttrs(printer); cupsdAddEvent(CUPSD_EVENT_PRINTER_CONFIG, printer, NULL, "Printer \"%s\" is now available.", printer->name); cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" is now available.", printer->name); } } else cupsdLogMessage(CUPSD_LOG_ERROR, "%s: PPD creation failed: %s", printer->name, cupsLastErrorString()); return (NULL); } /* * 'create_local_printer()' - Create a local (temporary) print queue. */ static void create_local_printer( cupsd_client_t *con) /* I - Client connection */ { ipp_attribute_t *device_uri, /* device-uri attribute */ *printer_geo_location, /* printer-geo-location attribute */ *printer_info, /* printer-info attribute */ *printer_location, /* printer-location attribute */ *printer_name; /* printer-name attribute */ cupsd_printer_t *printer; /* New printer */ http_status_t status; /* Policy status */ char name[128], /* Sanitized printer name */ *nameptr, /* Pointer into name */ uri[1024]; /* printer-uri-supported value */ const char *ptr; /* Pointer into attribute value */ /* * Require local access to create a local printer... */ if (!httpAddrLocalhost(httpGetAddress(con->http))) { send_ipp_status(con, IPP_STATUS_ERROR_FORBIDDEN, _("Only local users can create a local printer.")); return; } /* * Check any other policy limits... */ if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } /* * Grab needed attributes... */ if ((printer_name = ippFindAttribute(con->request, "printer-name", IPP_TAG_ZERO)) == NULL || ippGetGroupTag(printer_name) != IPP_TAG_PRINTER || ippGetValueTag(printer_name) != IPP_TAG_NAME) { if (!printer_name) send_ipp_status(con, IPP_STATUS_ERROR_BAD_REQUEST, _("Missing required attribute \"%s\"."), "printer-name"); else if (ippGetGroupTag(printer_name) != IPP_TAG_PRINTER) send_ipp_status(con, IPP_STATUS_ERROR_BAD_REQUEST, _("Attribute \"%s\" is in the wrong group."), "printer-name"); else send_ipp_status(con, IPP_STATUS_ERROR_BAD_REQUEST, _("Attribute \"%s\" is the wrong value type."), "printer-name"); return; } for (nameptr = name, ptr = ippGetString(printer_name, 0, NULL); *ptr && nameptr < (name + sizeof(name) - 1); ptr ++) { /* * Sanitize the printer name... */ if (_cups_isalnum(*ptr)) *nameptr++ = *ptr; else if (nameptr == name || nameptr[-1] != '_') *nameptr++ = '_'; } *nameptr = '\0'; if ((device_uri = ippFindAttribute(con->request, "device-uri", IPP_TAG_ZERO)) == NULL || ippGetGroupTag(device_uri) != IPP_TAG_PRINTER || ippGetValueTag(device_uri) != IPP_TAG_URI) { if (!device_uri) send_ipp_status(con, IPP_STATUS_ERROR_BAD_REQUEST, _("Missing required attribute \"%s\"."), "device-uri"); else if (ippGetGroupTag(device_uri) != IPP_TAG_PRINTER) send_ipp_status(con, IPP_STATUS_ERROR_BAD_REQUEST, _("Attribute \"%s\" is in the wrong group."), "device-uri"); else send_ipp_status(con, IPP_STATUS_ERROR_BAD_REQUEST, _("Attribute \"%s\" is the wrong value type."), "device-uri"); return; } printer_geo_location = ippFindAttribute(con->request, "printer-geo-location", IPP_TAG_URI); printer_info = ippFindAttribute(con->request, "printer-info", IPP_TAG_TEXT); printer_location = ippFindAttribute(con->request, "printer-location", IPP_TAG_TEXT); /* * See if the printer already exists... */ if ((printer = cupsdFindDest(name)) != NULL) { send_ipp_status(con, IPP_STATUS_ERROR_NOT_POSSIBLE, _("Printer \"%s\" already exists."), name); goto add_printer_attributes; } /* * Create the printer... */ if ((printer = cupsdAddPrinter(name)) == NULL) { send_ipp_status(con, IPP_STATUS_ERROR_INTERNAL, _("Unable to create printer.")); return; } printer->shared = 0; printer->temporary = 1; cupsdSetDeviceURI(printer, ippGetString(device_uri, 0, NULL)); if (printer_geo_location) cupsdSetString(&printer->geo_location, ippGetString(printer_geo_location, 0, NULL)); if (printer_info) cupsdSetString(&printer->info, ippGetString(printer_info, 0, NULL)); if (printer_location) cupsdSetString(&printer->location, ippGetString(printer_location, 0, NULL)); cupsdSetPrinterAttrs(printer); /* * Run a background thread to create the PPD... */ _cupsThreadCreate((_cups_thread_func_t)create_local_bg_thread, printer); /* * Return printer attributes... */ send_ipp_status(con, IPP_STATUS_OK, _("Local printer created.")); add_printer_attributes: ippAddBoolean(con->response, IPP_TAG_PRINTER, "printer-is-accepting-jobs", (char)printer->accepting); ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", printer->state); add_printer_state_reasons(con, printer); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), httpIsEncrypted(con->http) ? "ipps" : "ipp", NULL, con->clientname, con->clientport, "/printers/%s", printer->name); ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", NULL, uri); } /* * 'create_requested_array()' - Create an array for the requested-attributes. */ static cups_array_t * /* O - Array of attributes or NULL */ create_requested_array(ipp_t *request) /* I - IPP request */ { cups_array_t *ra; /* Requested attributes array */ /* * Create the array for standard attributes... */ ra = ippCreateRequestedArray(request); /* * Add CUPS defaults as needed... */ if (cupsArrayFind(ra, "printer-defaults")) { /* * Include user-set defaults... */ char *name; /* Option name */ cupsArrayRemove(ra, "printer-defaults"); for (name = (char *)cupsArrayFirst(CommonDefaults); name; name = (char *)cupsArrayNext(CommonDefaults)) if (!cupsArrayFind(ra, name)) cupsArrayAdd(ra, name); } return (ra); } /* * 'create_subscriptions()' - Create one or more notification subscriptions. */ static void create_subscriptions( cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI */ { http_status_t status; /* Policy status */ int i; /* Looping var */ ipp_attribute_t *attr; /* Current attribute */ cups_ptype_t dtype; /* Destination type (printer/class) */ char scheme[HTTP_MAX_URI], /* Scheme portion of URI */ userpass[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ cupsd_printer_t *printer; /* Printer/class */ cupsd_job_t *job; /* Job */ int jobid; /* Job ID */ cupsd_subscription_t *sub; /* Subscription object */ const char *username, /* requesting-user-name or authenticated username */ *recipient, /* notify-recipient-uri */ *pullmethod; /* notify-pull-method */ ipp_attribute_t *user_data; /* notify-user-data */ int interval, /* notify-time-interval */ lease; /* notify-lease-duration */ unsigned mask; /* notify-events */ ipp_attribute_t *notify_events,/* notify-events(-default) */ *notify_lease; /* notify-lease-duration(-default) */ #ifdef DEBUG for (attr = con->request->attrs; attr; attr = attr->next) { if (attr->group_tag != IPP_TAG_ZERO) cupsdLogMessage(CUPSD_LOG_DEBUG2, "g%04x v%04x %s", attr->group_tag, attr->value_tag, attr->name); else cupsdLogMessage(CUPSD_LOG_DEBUG2, "----SEP----"); } #endif /* DEBUG */ /* * Is the destination valid? */ cupsdLogMessage(CUPSD_LOG_DEBUG, "create_subscriptions(con=%p(%d), uri=\"%s\")", con, con->number, uri->values[0].string.text); httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)); if (!strcmp(resource, "/")) { dtype = (cups_ptype_t)0; printer = NULL; } else if (!strncmp(resource, "/printers", 9) && strlen(resource) <= 10) { dtype = (cups_ptype_t)0; printer = NULL; } else if (!strncmp(resource, "/classes", 8) && strlen(resource) <= 9) { dtype = CUPS_PRINTER_CLASS; printer = NULL; } else if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if (printer) { if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } } else if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } /* * Get the user that is requesting the subscription... */ username = get_username(con); /* * Find the first subscription group attribute; return if we have * none... */ for (attr = con->request->attrs; attr; attr = attr->next) if (attr->group_tag == IPP_TAG_SUBSCRIPTION) break; if (!attr) { send_ipp_status(con, IPP_BAD_REQUEST, _("No subscription attributes in request.")); return; } /* * Process the subscription attributes in the request... */ con->response->request.status.status_code = IPP_BAD_REQUEST; while (attr) { recipient = NULL; pullmethod = NULL; user_data = NULL; interval = 0; lease = DefaultLeaseDuration; jobid = 0; mask = CUPSD_EVENT_NONE; if (printer) { notify_events = ippFindAttribute(printer->attrs, "notify-events-default", IPP_TAG_KEYWORD); notify_lease = ippFindAttribute(printer->attrs, "notify-lease-duration-default", IPP_TAG_INTEGER); if (notify_lease) lease = notify_lease->values[0].integer; } else { notify_events = NULL; notify_lease = NULL; } while (attr && attr->group_tag != IPP_TAG_ZERO) { if (!strcmp(attr->name, "notify-recipient-uri") && attr->value_tag == IPP_TAG_URI) { /* * Validate the recipient scheme against the ServerBin/notifier * directory... */ char notifier[1024]; /* Notifier filename */ recipient = attr->values[0].string.text; if (httpSeparateURI(HTTP_URI_CODING_ALL, recipient, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_OK) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Bad notify-recipient-uri \"%s\"."), recipient); ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_URI_SCHEME); return; } snprintf(notifier, sizeof(notifier), "%s/notifier/%s", ServerBin, scheme); if (access(notifier, X_OK)) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("notify-recipient-uri URI \"%s\" uses unknown " "scheme."), recipient); ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_URI_SCHEME); return; } if (!strcmp(scheme, "rss") && !check_rss_recipient(recipient)) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("notify-recipient-uri URI \"%s\" is already used."), recipient); ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_ATTRIBUTES); return; } } else if (!strcmp(attr->name, "notify-pull-method") && attr->value_tag == IPP_TAG_KEYWORD) { pullmethod = attr->values[0].string.text; if (strcmp(pullmethod, "ippget")) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Bad notify-pull-method \"%s\"."), pullmethod); ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_ATTRIBUTES); return; } } else if (!strcmp(attr->name, "notify-charset") && attr->value_tag == IPP_TAG_CHARSET && strcmp(attr->values[0].string.text, "us-ascii") && strcmp(attr->values[0].string.text, "utf-8")) { send_ipp_status(con, IPP_CHARSET, _("Character set \"%s\" not supported."), attr->values[0].string.text); return; } else if (!strcmp(attr->name, "notify-natural-language") && (attr->value_tag != IPP_TAG_LANGUAGE || strcmp(attr->values[0].string.text, DefaultLanguage))) { send_ipp_status(con, IPP_CHARSET, _("Language \"%s\" not supported."), attr->values[0].string.text); return; } else if (!strcmp(attr->name, "notify-user-data") && attr->value_tag == IPP_TAG_STRING) { if (attr->num_values > 1 || attr->values[0].unknown.length > 63) { send_ipp_status(con, IPP_REQUEST_VALUE, _("The notify-user-data value is too large " "(%d > 63 octets)."), attr->values[0].unknown.length); return; } user_data = attr; } else if (!strcmp(attr->name, "notify-events") && attr->value_tag == IPP_TAG_KEYWORD) notify_events = attr; else if (!strcmp(attr->name, "notify-lease-duration") && attr->value_tag == IPP_TAG_INTEGER) lease = attr->values[0].integer; else if (!strcmp(attr->name, "notify-time-interval") && attr->value_tag == IPP_TAG_INTEGER) interval = attr->values[0].integer; else if (!strcmp(attr->name, "notify-job-id") && attr->value_tag == IPP_TAG_INTEGER) jobid = attr->values[0].integer; attr = attr->next; } if (notify_events) { for (i = 0; i < notify_events->num_values; i ++) mask |= cupsdEventValue(notify_events->values[i].string.text); } if (recipient) cupsdLogMessage(CUPSD_LOG_DEBUG, "recipient=\"%s\"", recipient); if (pullmethod) cupsdLogMessage(CUPSD_LOG_DEBUG, "pullmethod=\"%s\"", pullmethod); cupsdLogMessage(CUPSD_LOG_DEBUG, "notify-lease-duration=%d", lease); cupsdLogMessage(CUPSD_LOG_DEBUG, "notify-time-interval=%d", interval); if (!recipient && !pullmethod) break; if (mask == CUPSD_EVENT_NONE) { if (jobid) mask = CUPSD_EVENT_JOB_COMPLETED; else if (printer) mask = CUPSD_EVENT_PRINTER_STATE_CHANGED; else { send_ipp_status(con, IPP_BAD_REQUEST, _("notify-events not specified.")); return; } } if (MaxLeaseDuration && (lease == 0 || lease > MaxLeaseDuration)) { cupsdLogMessage(CUPSD_LOG_INFO, "create_subscriptions: Limiting notify-lease-duration to " "%d seconds.", MaxLeaseDuration); lease = MaxLeaseDuration; } if (jobid) { if ((job = cupsdFindJob(jobid)) == NULL) { send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), jobid); return; } } else job = NULL; if ((sub = cupsdAddSubscription(mask, printer, job, recipient, 0)) == NULL) { send_ipp_status(con, IPP_TOO_MANY_SUBSCRIPTIONS, _("There are too many subscriptions.")); return; } if (job) cupsdLogMessage(CUPSD_LOG_DEBUG, "Added subscription #%d for job %d.", sub->id, job->id); else if (printer) cupsdLogMessage(CUPSD_LOG_DEBUG, "Added subscription #%d for printer \"%s\".", sub->id, printer->name); else cupsdLogMessage(CUPSD_LOG_DEBUG, "Added subscription #%d for server.", sub->id); sub->interval = interval; sub->lease = lease; sub->expire = lease ? time(NULL) + lease : 0; cupsdSetString(&sub->owner, username); if (user_data) { sub->user_data_len = user_data->values[0].unknown.length; memcpy(sub->user_data, user_data->values[0].unknown.data, (size_t)sub->user_data_len); } ippAddSeparator(con->response); ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-subscription-id", sub->id); con->response->request.status.status_code = IPP_OK; if (attr) attr = attr->next; } cupsdMarkDirty(CUPSD_DIRTY_SUBSCRIPTIONS); } /* * 'delete_printer()' - Remove a printer or class from the system. */ static void delete_printer(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - URI of printer or class */ { http_status_t status; /* Policy status */ cups_ptype_t dtype; /* Destination type (printer/class) */ cupsd_printer_t *printer; /* Printer/class */ char filename[1024]; /* Script/PPD filename */ int temporary; /* Temporary queue? */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "delete_printer(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Do we have a valid URI? */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } /* * Remove old jobs... */ cupsdCancelJobs(printer->name, NULL, 1); /* * Remove old subscriptions and send a "deleted printer" event... */ cupsdAddEvent(CUPSD_EVENT_PRINTER_DELETED, printer, NULL, "%s \"%s\" deleted by \"%s\".", (dtype & CUPS_PRINTER_CLASS) ? "Class" : "Printer", printer->name, get_username(con)); cupsdExpireSubscriptions(printer, NULL); /* * Remove any old PPD or script files... */ snprintf(filename, sizeof(filename), "%s/ppd/%s.ppd", ServerRoot, printer->name); unlink(filename); snprintf(filename, sizeof(filename), "%s/ppd/%s.ppd.O", ServerRoot, printer->name); unlink(filename); snprintf(filename, sizeof(filename), "%s/%s.png", CacheDir, printer->name); unlink(filename); snprintf(filename, sizeof(filename), "%s/%s.data", CacheDir, printer->name); unlink(filename); /* * Unregister color profiles... */ cupsdUnregisterColor(printer); temporary = printer->temporary; if (dtype & CUPS_PRINTER_CLASS) { cupsdLogMessage(CUPSD_LOG_INFO, "Class \"%s\" deleted by \"%s\".", printer->name, get_username(con)); cupsdDeletePrinter(printer, 0); if (!temporary) cupsdMarkDirty(CUPSD_DIRTY_CLASSES); } else { cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" deleted by \"%s\".", printer->name, get_username(con)); if (cupsdDeletePrinter(printer, 0) && !temporary) cupsdMarkDirty(CUPSD_DIRTY_CLASSES); if (!temporary) cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); } if (!temporary) cupsdMarkDirty(CUPSD_DIRTY_PRINTCAP); /* * Return with no errors... */ con->response->request.status.status_code = IPP_OK; } /* * 'get_default()' - Get the default destination. */ static void get_default(cupsd_client_t *con) /* I - Client connection */ { http_status_t status; /* Policy status */ cups_array_t *ra; /* Requested attributes array */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_default(%p[%d])", con, con->number); /* * Check policy... */ if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } if (DefaultPrinter) { ra = create_requested_array(con->request); copy_printer_attrs(con, DefaultPrinter, ra); cupsArrayDelete(ra); con->response->request.status.status_code = IPP_OK; } else send_ipp_status(con, IPP_NOT_FOUND, _("No default printer.")); } /* * 'get_devices()' - Get the list of available devices on the local system. */ static void get_devices(cupsd_client_t *con) /* I - Client connection */ { http_status_t status; /* Policy status */ ipp_attribute_t *limit, /* limit attribute */ *timeout, /* timeout attribute */ *requested, /* requested-attributes attribute */ *exclude, /* exclude-schemes attribute */ *include; /* include-schemes attribute */ char command[1024], /* cups-deviced command */ options[2048], /* Options to pass to command */ requested_str[256], /* String for requested attributes */ exclude_str[512], /* String for excluded schemes */ include_str[512]; /* String for included schemes */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_devices(%p[%d])", con, con->number); /* * Check policy... */ if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } /* * Run cups-deviced command with the given options... */ limit = ippFindAttribute(con->request, "limit", IPP_TAG_INTEGER); timeout = ippFindAttribute(con->request, "timeout", IPP_TAG_INTEGER); requested = ippFindAttribute(con->request, "requested-attributes", IPP_TAG_KEYWORD); exclude = ippFindAttribute(con->request, "exclude-schemes", IPP_TAG_NAME); include = ippFindAttribute(con->request, "include-schemes", IPP_TAG_NAME); if (requested) url_encode_attr(requested, requested_str, sizeof(requested_str)); else strlcpy(requested_str, "requested-attributes=all", sizeof(requested_str)); if (exclude) url_encode_attr(exclude, exclude_str, sizeof(exclude_str)); else exclude_str[0] = '\0'; if (include) url_encode_attr(include, include_str, sizeof(include_str)); else include_str[0] = '\0'; snprintf(command, sizeof(command), "%s/daemon/cups-deviced", ServerBin); snprintf(options, sizeof(options), "%d+%d+%d+%d+%s%s%s%s%s", con->request->request.op.request_id, limit ? limit->values[0].integer : 0, timeout ? timeout->values[0].integer : 15, (int)User, requested_str, exclude_str[0] ? "%20" : "", exclude_str, include_str[0] ? "%20" : "", include_str); if (cupsdSendCommand(con, command, options, 1)) { /* * Command started successfully, don't send an IPP response here... */ ippDelete(con->response); con->response = NULL; } else { /* * Command failed, return "internal error" so the user knows something * went wrong... */ send_ipp_status(con, IPP_INTERNAL_ERROR, _("cups-deviced failed to execute.")); } } /* * 'get_document()' - Get a copy of a job file. */ static void get_document(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Job URI */ { http_status_t status; /* Policy status */ ipp_attribute_t *attr; /* Current attribute */ int jobid; /* Job ID */ int docnum; /* Document number */ cupsd_job_t *job; /* Current job */ char scheme[HTTP_MAX_URI], /* Method portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ char filename[1024], /* Filename for document */ format[1024]; /* Format for document */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_document(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * See if we have a job URI or a printer URI... */ if (!strcmp(uri->name, "printer-uri")) { /* * Got a printer URI; see if we also have a job-id attribute... */ if ((attr = ippFindAttribute(con->request, "job-id", IPP_TAG_INTEGER)) == NULL) { send_ipp_status(con, IPP_BAD_REQUEST, _("Got a printer-uri attribute but no job-id.")); return; } jobid = attr->values[0].integer; } else { /* * Got a job URI; parse it to get the job ID... */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (strncmp(resource, "/jobs/", 6)) { /* * Not a valid URI! */ send_ipp_status(con, IPP_BAD_REQUEST, _("Bad job-uri \"%s\"."), uri->values[0].string.text); return; } jobid = atoi(resource + 6); } /* * See if the job exists... */ if ((job = cupsdFindJob(jobid)) == NULL) { /* * Nope - return a "not found" error... */ send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), jobid); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, job->username)) != HTTP_OK) { send_http_error(con, status, NULL); return; } /* * Get the document number... */ if ((attr = ippFindAttribute(con->request, "document-number", IPP_TAG_INTEGER)) == NULL) { send_ipp_status(con, IPP_BAD_REQUEST, _("Missing document-number attribute.")); return; } if ((docnum = attr->values[0].integer) < 1 || docnum > job->num_files || attr->num_values > 1) { send_ipp_status(con, IPP_NOT_FOUND, _("Document #%d does not exist in job #%d."), docnum, jobid); return; } snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, jobid, docnum); if ((con->file = open(filename, O_RDONLY)) == -1) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open document %d in job %d - %s", docnum, jobid, strerror(errno)); send_ipp_status(con, IPP_NOT_FOUND, _("Unable to open document #%d in job #%d."), docnum, jobid); return; } fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC); cupsdLoadJob(job); snprintf(format, sizeof(format), "%s/%s", job->filetypes[docnum - 1]->super, job->filetypes[docnum - 1]->type); ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format", NULL, format); ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "document-number", docnum); if ((attr = ippFindAttribute(job->attrs, "document-name", IPP_TAG_NAME)) != NULL) ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_NAME, "document-name", NULL, attr->values[0].string.text); } /* * 'get_job_attrs()' - Get job attributes. */ static void get_job_attrs(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Job URI */ { http_status_t status; /* Policy status */ ipp_attribute_t *attr; /* Current attribute */ int jobid; /* Job ID */ cupsd_job_t *job; /* Current job */ cupsd_printer_t *printer; /* Current printer */ cupsd_policy_t *policy; /* Current security policy */ char scheme[HTTP_MAX_URI], /* Scheme portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ cups_array_t *ra, /* Requested attributes array */ *exclude; /* Private attributes array */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_job_attrs(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * See if we have a job URI or a printer URI... */ if (!strcmp(uri->name, "printer-uri")) { /* * Got a printer URI; see if we also have a job-id attribute... */ if ((attr = ippFindAttribute(con->request, "job-id", IPP_TAG_INTEGER)) == NULL) { send_ipp_status(con, IPP_BAD_REQUEST, _("Got a printer-uri attribute but no job-id.")); return; } jobid = attr->values[0].integer; } else { /* * Got a job URI; parse it to get the job ID... */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (strncmp(resource, "/jobs/", 6)) { /* * Not a valid URI! */ send_ipp_status(con, IPP_BAD_REQUEST, _("Bad job-uri \"%s\"."), uri->values[0].string.text); return; } jobid = atoi(resource + 6); } /* * See if the job exists... */ if ((job = cupsdFindJob(jobid)) == NULL) { /* * Nope - return a "not found" error... */ send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), jobid); return; } /* * Check policy... */ if ((printer = job->printer) == NULL) printer = cupsdFindDest(job->dest); if (printer) policy = printer->op_policy_ptr; else policy = DefaultPolicyPtr; if ((status = cupsdCheckPolicy(policy, con, job->username)) != HTTP_OK) { send_http_error(con, status, NULL); return; } exclude = cupsdGetPrivateAttrs(policy, con, printer, job->username); /* * Copy attributes... */ cupsdLoadJob(job); ra = create_requested_array(con->request); copy_job_attrs(con, job, ra, exclude); cupsArrayDelete(ra); con->response->request.status.status_code = IPP_OK; } /* * 'get_jobs()' - Get a list of jobs for the specified printer. */ static void get_jobs(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI */ { http_status_t status; /* Policy status */ ipp_attribute_t *attr; /* Current attribute */ const char *dest; /* Destination */ cups_ptype_t dtype; /* Destination type (printer/class) */ cups_ptype_t dmask; /* Destination type mask */ char scheme[HTTP_MAX_URI], /* Scheme portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ int job_comparison; /* Job comparison */ ipp_jstate_t job_state; /* job-state value */ int first_job_id = 1, /* First job ID */ first_index = 1, /* First index */ limit = 0, /* Maximum number of jobs to return */ count, /* Number of jobs that match */ need_load_job = 0; /* Do we need to load the job? */ const char *job_attr; /* Job attribute requested */ ipp_attribute_t *job_ids; /* job-ids attribute */ cupsd_job_t *job; /* Current job pointer */ cupsd_printer_t *printer; /* Printer */ cups_array_t *list; /* Which job list... */ int delete_list = 0; /* Delete the list afterwards? */ cups_array_t *ra, /* Requested attributes array */ *exclude; /* Private attributes array */ cupsd_policy_t *policy; /* Current policy */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_jobs(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ if (strcmp(uri->name, "printer-uri")) { send_ipp_status(con, IPP_BAD_REQUEST, _("No printer-uri in request.")); return; } httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (!strcmp(resource, "/") || !strcmp(resource, "/jobs")) { dest = NULL; dtype = (cups_ptype_t)0; dmask = (cups_ptype_t)0; printer = NULL; } else if (!strncmp(resource, "/printers", 9) && strlen(resource) <= 10) { dest = NULL; dtype = (cups_ptype_t)0; dmask = CUPS_PRINTER_CLASS; printer = NULL; } else if (!strncmp(resource, "/classes", 8) && strlen(resource) <= 9) { dest = NULL; dtype = CUPS_PRINTER_CLASS; dmask = CUPS_PRINTER_CLASS; printer = NULL; } else if ((dest = cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) == NULL) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } else { dtype &= CUPS_PRINTER_CLASS; dmask = CUPS_PRINTER_CLASS; } /* * Check policy... */ if (printer) policy = printer->op_policy_ptr; else policy = DefaultPolicyPtr; if ((status = cupsdCheckPolicy(policy, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } job_ids = ippFindAttribute(con->request, "job-ids", IPP_TAG_INTEGER); /* * See if the "which-jobs" attribute have been specified... */ if ((attr = ippFindAttribute(con->request, "which-jobs", IPP_TAG_KEYWORD)) != NULL && job_ids) { send_ipp_status(con, IPP_CONFLICT, _("The %s attribute cannot be provided with job-ids."), "which-jobs"); return; } else if (!attr || !strcmp(attr->values[0].string.text, "not-completed")) { job_comparison = -1; job_state = IPP_JOB_STOPPED; list = ActiveJobs; } else if (!strcmp(attr->values[0].string.text, "completed")) { job_comparison = 1; job_state = IPP_JOB_CANCELED; list = cupsdGetCompletedJobs(printer); delete_list = 1; } else if (!strcmp(attr->values[0].string.text, "aborted")) { job_comparison = 0; job_state = IPP_JOB_ABORTED; list = cupsdGetCompletedJobs(printer); delete_list = 1; } else if (!strcmp(attr->values[0].string.text, "all")) { job_comparison = 1; job_state = IPP_JOB_PENDING; list = Jobs; } else if (!strcmp(attr->values[0].string.text, "canceled")) { job_comparison = 0; job_state = IPP_JOB_CANCELED; list = cupsdGetCompletedJobs(printer); delete_list = 1; } else if (!strcmp(attr->values[0].string.text, "pending")) { job_comparison = 0; job_state = IPP_JOB_PENDING; list = ActiveJobs; } else if (!strcmp(attr->values[0].string.text, "pending-held")) { job_comparison = 0; job_state = IPP_JOB_HELD; list = ActiveJobs; } else if (!strcmp(attr->values[0].string.text, "processing")) { job_comparison = 0; job_state = IPP_JOB_PROCESSING; list = PrintingJobs; } else if (!strcmp(attr->values[0].string.text, "processing-stopped")) { job_comparison = 0; job_state = IPP_JOB_STOPPED; list = ActiveJobs; } else { send_ipp_status(con, IPP_ATTRIBUTES, _("The which-jobs value \"%s\" is not supported."), attr->values[0].string.text); ippAddString(con->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_KEYWORD, "which-jobs", NULL, attr->values[0].string.text); return; } /* * See if they want to limit the number of jobs reported... */ if ((attr = ippFindAttribute(con->request, "limit", IPP_TAG_INTEGER)) != NULL) { if (job_ids) { send_ipp_status(con, IPP_CONFLICT, _("The %s attribute cannot be provided with job-ids."), "limit"); return; } limit = attr->values[0].integer; } if ((attr = ippFindAttribute(con->request, "first-index", IPP_TAG_INTEGER)) != NULL) { if (job_ids) { send_ipp_status(con, IPP_CONFLICT, _("The %s attribute cannot be provided with job-ids."), "first-index"); return; } first_index = attr->values[0].integer; } else if ((attr = ippFindAttribute(con->request, "first-job-id", IPP_TAG_INTEGER)) != NULL) { if (job_ids) { send_ipp_status(con, IPP_CONFLICT, _("The %s attribute cannot be provided with job-ids."), "first-job-id"); return; } first_job_id = attr->values[0].integer; } /* * See if we only want to see jobs for a specific user... */ if ((attr = ippFindAttribute(con->request, "my-jobs", IPP_TAG_BOOLEAN)) != NULL && job_ids) { send_ipp_status(con, IPP_CONFLICT, _("The %s attribute cannot be provided with job-ids."), "my-jobs"); return; } else if (attr && attr->values[0].boolean) strlcpy(username, get_username(con), sizeof(username)); else username[0] = '\0'; ra = create_requested_array(con->request); for (job_attr = (char *)cupsArrayFirst(ra); job_attr; job_attr = (char *)cupsArrayNext(ra)) if (strcmp(job_attr, "job-id") && strcmp(job_attr, "job-k-octets") && strcmp(job_attr, "job-media-progress") && strcmp(job_attr, "job-more-info") && strcmp(job_attr, "job-name") && strcmp(job_attr, "job-originating-user-name") && strcmp(job_attr, "job-preserved") && strcmp(job_attr, "job-printer-up-time") && strcmp(job_attr, "job-printer-uri") && strcmp(job_attr, "job-state") && strcmp(job_attr, "job-state-reasons") && strcmp(job_attr, "job-uri") && strcmp(job_attr, "time-at-completed") && strcmp(job_attr, "time-at-creation") && strcmp(job_attr, "number-of-documents")) { need_load_job = 1; break; } if (need_load_job && (limit == 0 || limit > 500) && (list == Jobs || delete_list)) { /* * Limit expensive Get-Jobs for job history to 500 jobs... */ ippAddInteger(con->response, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "limit", 500); if (limit) ippAddInteger(con->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_INTEGER, "limit", limit); limit = 500; cupsdLogClient(con, CUPSD_LOG_INFO, "Limiting Get-Jobs response to %d jobs.", limit); } /* * OK, build a list of jobs for this printer... */ if (job_ids) { int i; /* Looping var */ for (i = 0; i < job_ids->num_values; i ++) { if (!cupsdFindJob(job_ids->values[i].integer)) break; } if (i < job_ids->num_values) { send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), job_ids->values[i].integer); return; } for (i = 0; i < job_ids->num_values; i ++) { job = cupsdFindJob(job_ids->values[i].integer); if (need_load_job && !job->attrs) { cupsdLoadJob(job); if (!job->attrs) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_jobs: No attributes for job %d", job->id); continue; } } if (i > 0) ippAddSeparator(con->response); exclude = cupsdGetPrivateAttrs(job->printer ? job->printer->op_policy_ptr : policy, con, job->printer, job->username); copy_job_attrs(con, job, ra, exclude); } } else { if (first_index > 1) job = (cupsd_job_t *)cupsArrayIndex(list, first_index - 1); else job = (cupsd_job_t *)cupsArrayFirst(list); for (count = 0; (limit <= 0 || count < limit) && job; job = (cupsd_job_t *)cupsArrayNext(list)) { /* * Filter out jobs that don't match... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_jobs: job->id=%d, dest=\"%s\", username=\"%s\", " "state_value=%d, attrs=%p", job->id, job->dest, job->username, job->state_value, job->attrs); if (!job->dest || !job->username) cupsdLoadJob(job); if (!job->dest || !job->username) continue; if ((dest && strcmp(job->dest, dest)) && (!job->printer || !dest || strcmp(job->printer->name, dest))) continue; if ((job->dtype & dmask) != dtype && (!job->printer || (job->printer->type & dmask) != dtype)) continue; if ((job_comparison < 0 && job->state_value > job_state) || (job_comparison == 0 && job->state_value != job_state) || (job_comparison > 0 && job->state_value < job_state)) continue; if (job->id < first_job_id) continue; if (need_load_job && !job->attrs) { cupsdLoadJob(job); if (!job->attrs) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_jobs: No attributes for job %d", job->id); continue; } } if (username[0] && _cups_strcasecmp(username, job->username)) continue; if (count > 0) ippAddSeparator(con->response); count ++; exclude = cupsdGetPrivateAttrs(job->printer ? job->printer->op_policy_ptr : policy, con, job->printer, job->username); copy_job_attrs(con, job, ra, exclude); } cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_jobs: count=%d", count); } cupsArrayDelete(ra); if (delete_list) cupsArrayDelete(list); con->response->request.status.status_code = IPP_OK; } /* * 'get_notifications()' - Get events for a subscription. */ static void get_notifications(cupsd_client_t *con) /* I - Client connection */ { int i, j; /* Looping vars */ http_status_t status; /* Policy status */ cupsd_subscription_t *sub; /* Subscription */ ipp_attribute_t *ids, /* notify-subscription-ids */ *sequences; /* notify-sequence-numbers */ int min_seq; /* Minimum sequence number */ int interval; /* Poll interval */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_notifications(con=%p[%d])", con, con->number); /* * Get subscription attributes... */ ids = ippFindAttribute(con->request, "notify-subscription-ids", IPP_TAG_INTEGER); sequences = ippFindAttribute(con->request, "notify-sequence-numbers", IPP_TAG_INTEGER); if (!ids) { send_ipp_status(con, IPP_BAD_REQUEST, _("Missing notify-subscription-ids attribute.")); return; } /* * Are the subscription IDs valid? */ for (i = 0, interval = 60; i < ids->num_values; i ++) { if ((sub = cupsdFindSubscription(ids->values[i].integer)) == NULL) { /* * Bad subscription ID... */ send_ipp_status(con, IPP_NOT_FOUND, _("Subscription #%d does not exist."), ids->values[i].integer); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(sub->dest ? sub->dest->op_policy_ptr : DefaultPolicyPtr, con, sub->owner)) != HTTP_OK) { send_http_error(con, status, sub->dest); return; } /* * Check the subscription type and update the interval accordingly. */ if (sub->job && sub->job->state_value == IPP_JOB_PROCESSING && interval > 10) interval = 10; else if (sub->job && sub->job->state_value >= IPP_JOB_STOPPED) interval = 0; else if (sub->dest && sub->dest->state == IPP_PRINTER_PROCESSING && interval > 30) interval = 30; } /* * Tell the client to poll again in N seconds... */ if (interval > 0) ippAddInteger(con->response, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "notify-get-interval", interval); ippAddInteger(con->response, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "printer-up-time", time(NULL)); /* * Copy the subscription event attributes to the response. */ con->response->request.status.status_code = interval ? IPP_OK : IPP_OK_EVENTS_COMPLETE; for (i = 0; i < ids->num_values; i ++) { /* * Get the subscription and sequence number... */ sub = cupsdFindSubscription(ids->values[i].integer); if (sequences && i < sequences->num_values) min_seq = sequences->values[i].integer; else min_seq = 1; /* * If we don't have any new events, nothing to do here... */ if (min_seq > (sub->first_event_id + cupsArrayCount(sub->events))) continue; /* * Otherwise copy all of the new events... */ if (sub->first_event_id > min_seq) j = 0; else j = min_seq - sub->first_event_id; for (; j < cupsArrayCount(sub->events); j ++) { ippAddSeparator(con->response); copy_attrs(con->response, ((cupsd_event_t *)cupsArrayIndex(sub->events, j))->attrs, NULL, IPP_TAG_EVENT_NOTIFICATION, 0, NULL); } } } /* * 'get_ppd()' - Get a named PPD from the local system. */ static void get_ppd(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI or PPD name */ { http_status_t status; /* Policy status */ cupsd_printer_t *dest; /* Destination */ cups_ptype_t dtype; /* Destination type */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_ppd(%p[%d], %p[%s=%s])", con, con->number, uri, uri->name, uri->values[0].string.text); if (!strcmp(ippGetName(uri), "ppd-name")) { /* * Return a PPD file from cups-driverd... */ const char *ppd_name = ippGetString(uri, 0, NULL); /* ppd-name value */ char command[1024], /* cups-driverd command */ options[1024], /* Options to pass to command */ oppd_name[1024]; /* Escaped ppd-name */ /* * Check policy... */ if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } /* * Check ppd-name value... */ if (strstr(ppd_name, "../")) { send_ipp_status(con, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, _("Invalid ppd-name value.")); return; } /* * Run cups-driverd command with the given options... */ snprintf(command, sizeof(command), "%s/daemon/cups-driverd", ServerBin); url_encode_string(ppd_name, oppd_name, sizeof(oppd_name)); snprintf(options, sizeof(options), "get+%d+%s", ippGetRequestId(con->request), oppd_name); if (cupsdSendCommand(con, command, options, 0)) { /* * Command started successfully, don't send an IPP response here... */ ippDelete(con->response); con->response = NULL; } else { /* * Command failed, return "internal error" so the user knows something * went wrong... */ send_ipp_status(con, IPP_INTERNAL_ERROR, _("cups-driverd failed to execute.")); } } else if (!strcmp(ippGetName(uri), "printer-uri") && cupsdValidateDest(ippGetString(uri, 0, NULL), &dtype, &dest)) { int i; /* Looping var */ char filename[1024]; /* PPD filename */ /* * Check policy... */ if ((status = cupsdCheckPolicy(dest->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, dest); return; } /* * See if we need the PPD for a class or remote printer... */ snprintf(filename, sizeof(filename), "%s/ppd/%s.ppd", ServerRoot, dest->name); if ((dtype & CUPS_PRINTER_REMOTE) && access(filename, 0)) { send_ipp_status(con, IPP_STATUS_CUPS_SEE_OTHER, _("See remote printer.")); ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, dest->uri); return; } else if (dtype & CUPS_PRINTER_CLASS) { for (i = 0; i < dest->num_printers; i ++) if (!(dest->printers[i]->type & CUPS_PRINTER_CLASS)) { snprintf(filename, sizeof(filename), "%s/ppd/%s.ppd", ServerRoot, dest->printers[i]->name); if (!access(filename, 0)) break; } if (i < dest->num_printers) dest = dest->printers[i]; else { send_ipp_status(con, IPP_STATUS_CUPS_SEE_OTHER, _("See remote printer.")); ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, dest->printers[0]->uri); return; } } /* * Found the printer with the PPD file, now see if there is one... */ if ((con->file = open(filename, O_RDONLY)) < 0) { send_ipp_status(con, IPP_STATUS_ERROR_NOT_FOUND, _("The PPD file \"%s\" could not be opened: %s"), ippGetString(uri, 0, NULL), strerror(errno)); return; } fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC); con->pipe_pid = 0; ippSetStatusCode(con->response, IPP_STATUS_OK); } else send_ipp_status(con, IPP_STATUS_ERROR_NOT_FOUND, _("The PPD file \"%s\" could not be found."), ippGetString(uri, 0, NULL)); } /* * 'get_ppds()' - Get the list of PPD files on the local system. */ static void get_ppds(cupsd_client_t *con) /* I - Client connection */ { http_status_t status; /* Policy status */ ipp_attribute_t *limit, /* Limit attribute */ *device, /* ppd-device-id attribute */ *language, /* ppd-natural-language attribute */ *make, /* ppd-make attribute */ *model, /* ppd-make-and-model attribute */ *model_number, /* ppd-model-number attribute */ *product, /* ppd-product attribute */ *psversion, /* ppd-psverion attribute */ *type, /* ppd-type attribute */ *requested, /* requested-attributes attribute */ *exclude, /* exclude-schemes attribute */ *include; /* include-schemes attribute */ char command[1024], /* cups-driverd command */ options[4096], /* Options to pass to command */ device_str[256],/* Escaped ppd-device-id string */ language_str[256], /* Escaped ppd-natural-language */ make_str[256], /* Escaped ppd-make string */ model_str[256], /* Escaped ppd-make-and-model string */ model_number_str[256], /* ppd-model-number string */ product_str[256], /* Escaped ppd-product string */ psversion_str[256], /* Escaped ppd-psversion string */ type_str[256], /* Escaped ppd-type string */ requested_str[256], /* String for requested attributes */ exclude_str[512], /* String for excluded schemes */ include_str[512]; /* String for included schemes */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_ppds(%p[%d])", con, con->number); /* * Check policy... */ if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } /* * Run cups-driverd command with the given options... */ limit = ippFindAttribute(con->request, "limit", IPP_TAG_INTEGER); device = ippFindAttribute(con->request, "ppd-device-id", IPP_TAG_TEXT); language = ippFindAttribute(con->request, "ppd-natural-language", IPP_TAG_LANGUAGE); make = ippFindAttribute(con->request, "ppd-make", IPP_TAG_TEXT); model = ippFindAttribute(con->request, "ppd-make-and-model", IPP_TAG_TEXT); model_number = ippFindAttribute(con->request, "ppd-model-number", IPP_TAG_INTEGER); product = ippFindAttribute(con->request, "ppd-product", IPP_TAG_TEXT); psversion = ippFindAttribute(con->request, "ppd-psversion", IPP_TAG_TEXT); type = ippFindAttribute(con->request, "ppd-type", IPP_TAG_KEYWORD); requested = ippFindAttribute(con->request, "requested-attributes", IPP_TAG_KEYWORD); exclude = ippFindAttribute(con->request, "exclude-schemes", IPP_TAG_NAME); include = ippFindAttribute(con->request, "include-schemes", IPP_TAG_NAME); if (requested) url_encode_attr(requested, requested_str, sizeof(requested_str)); else strlcpy(requested_str, "requested-attributes=all", sizeof(requested_str)); if (device) url_encode_attr(device, device_str, sizeof(device_str)); else device_str[0] = '\0'; if (language) url_encode_attr(language, language_str, sizeof(language_str)); else language_str[0] = '\0'; if (make) url_encode_attr(make, make_str, sizeof(make_str)); else make_str[0] = '\0'; if (model) url_encode_attr(model, model_str, sizeof(model_str)); else model_str[0] = '\0'; if (model_number) snprintf(model_number_str, sizeof(model_number_str), "ppd-model-number=%d", model_number->values[0].integer); else model_number_str[0] = '\0'; if (product) url_encode_attr(product, product_str, sizeof(product_str)); else product_str[0] = '\0'; if (psversion) url_encode_attr(psversion, psversion_str, sizeof(psversion_str)); else psversion_str[0] = '\0'; if (type) url_encode_attr(type, type_str, sizeof(type_str)); else type_str[0] = '\0'; if (exclude) url_encode_attr(exclude, exclude_str, sizeof(exclude_str)); else exclude_str[0] = '\0'; if (include) url_encode_attr(include, include_str, sizeof(include_str)); else include_str[0] = '\0'; snprintf(command, sizeof(command), "%s/daemon/cups-driverd", ServerBin); snprintf(options, sizeof(options), "list+%d+%d+%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", con->request->request.op.request_id, limit ? limit->values[0].integer : 0, requested_str, device ? "%20" : "", device_str, language ? "%20" : "", language_str, make ? "%20" : "", make_str, model ? "%20" : "", model_str, model_number ? "%20" : "", model_number_str, product ? "%20" : "", product_str, psversion ? "%20" : "", psversion_str, type ? "%20" : "", type_str, exclude_str[0] ? "%20" : "", exclude_str, include_str[0] ? "%20" : "", include_str); if (cupsdSendCommand(con, command, options, 0)) { /* * Command started successfully, don't send an IPP response here... */ ippDelete(con->response); con->response = NULL; } else { /* * Command failed, return "internal error" so the user knows something * went wrong... */ send_ipp_status(con, IPP_INTERNAL_ERROR, _("cups-driverd failed to execute.")); } } /* * 'get_printer_attrs()' - Get printer attributes. */ static void get_printer_attrs(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI */ { http_status_t status; /* Policy status */ cups_ptype_t dtype; /* Destination type (printer/class) */ cupsd_printer_t *printer; /* Printer/class */ cups_array_t *ra; /* Requested attributes array */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_printer_attrs(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } /* * Send the attributes... */ ra = create_requested_array(con->request); copy_printer_attrs(con, printer, ra); cupsArrayDelete(ra); con->response->request.status.status_code = IPP_OK; } /* * 'get_printer_supported()' - Get printer supported values. */ static void get_printer_supported( cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI */ { http_status_t status; /* Policy status */ cups_ptype_t dtype; /* Destination type (printer/class) */ cupsd_printer_t *printer; /* Printer/class */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_printer_supported(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } /* * Return a list of attributes that can be set via Set-Printer-Attributes. */ ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE, "printer-geo-location", 0); ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE, "printer-info", 0); ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE, "printer-location", 0); ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE, "printer-organization", 0); ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE, "printer-organizational-unit", 0); con->response->request.status.status_code = IPP_OK; } /* * 'get_printers()' - Get a list of printers or classes. */ static void get_printers(cupsd_client_t *con, /* I - Client connection */ int type) /* I - 0 or CUPS_PRINTER_CLASS */ { http_status_t status; /* Policy status */ ipp_attribute_t *attr; /* Current attribute */ int limit; /* Max number of printers to return */ int count; /* Number of printers that match */ cupsd_printer_t *printer; /* Current printer pointer */ cups_ptype_t printer_type, /* printer-type attribute */ printer_mask; /* printer-type-mask attribute */ char *location; /* Location string */ const char *username; /* Current user */ char *first_printer_name; /* first-printer-name attribute */ cups_array_t *ra; /* Requested attributes array */ int local; /* Local connection? */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_printers(%p[%d], %x)", con, con->number, type); /* * Check policy... */ if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } /* * Check for printers... */ if (!Printers || !cupsArrayCount(Printers)) { send_ipp_status(con, IPP_NOT_FOUND, _("No destinations added.")); return; } /* * See if they want to limit the number of printers reported... */ if ((attr = ippFindAttribute(con->request, "limit", IPP_TAG_INTEGER)) != NULL) limit = attr->values[0].integer; else limit = 10000000; if ((attr = ippFindAttribute(con->request, "first-printer-name", IPP_TAG_NAME)) != NULL) first_printer_name = attr->values[0].string.text; else first_printer_name = NULL; /* * Support filtering... */ if ((attr = ippFindAttribute(con->request, "printer-type", IPP_TAG_ENUM)) != NULL) printer_type = (cups_ptype_t)attr->values[0].integer; else printer_type = (cups_ptype_t)0; if ((attr = ippFindAttribute(con->request, "printer-type-mask", IPP_TAG_ENUM)) != NULL) printer_mask = (cups_ptype_t)attr->values[0].integer; else printer_mask = (cups_ptype_t)0; local = httpAddrLocalhost(&(con->clientaddr)); if ((attr = ippFindAttribute(con->request, "printer-location", IPP_TAG_TEXT)) != NULL) location = attr->values[0].string.text; else location = NULL; if (con->username[0]) username = con->username; else if ((attr = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_NAME)) != NULL) username = attr->values[0].string.text; else username = NULL; ra = create_requested_array(con->request); /* * OK, build a list of printers for this printer... */ if (first_printer_name) { if ((printer = cupsdFindDest(first_printer_name)) == NULL) printer = (cupsd_printer_t *)cupsArrayFirst(Printers); } else printer = (cupsd_printer_t *)cupsArrayFirst(Printers); for (count = 0; count < limit && printer; printer = (cupsd_printer_t *)cupsArrayNext(Printers)) { if (!local && !printer->shared) continue; if ((!type || (printer->type & CUPS_PRINTER_CLASS) == type) && (printer->type & printer_mask) == printer_type && (!location || (printer->location && !_cups_strcasecmp(printer->location, location)))) { /* * If a username is specified, see if it is allowed or denied * access... */ if (cupsArrayCount(printer->users) && username && !user_allowed(printer, username)) continue; /* * Add the group separator as needed... */ if (count > 0) ippAddSeparator(con->response); count ++; /* * Send the attributes... */ copy_printer_attrs(con, printer, ra); } } cupsArrayDelete(ra); con->response->request.status.status_code = IPP_OK; } /* * 'get_subscription_attrs()' - Get subscription attributes. */ static void get_subscription_attrs( cupsd_client_t *con, /* I - Client connection */ int sub_id) /* I - Subscription ID */ { http_status_t status; /* Policy status */ cupsd_subscription_t *sub; /* Subscription */ cupsd_policy_t *policy; /* Current security policy */ cups_array_t *ra, /* Requested attributes array */ *exclude; /* Private attributes array */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_subscription_attrs(con=%p[%d], sub_id=%d)", con, con->number, sub_id); /* * Expire subscriptions as needed... */ cupsdExpireSubscriptions(NULL, NULL); /* * Is the subscription ID valid? */ if ((sub = cupsdFindSubscription(sub_id)) == NULL) { /* * Bad subscription ID... */ send_ipp_status(con, IPP_NOT_FOUND, _("Subscription #%d does not exist."), sub_id); return; } /* * Check policy... */ if (sub->dest) policy = sub->dest->op_policy_ptr; else policy = DefaultPolicyPtr; if ((status = cupsdCheckPolicy(policy, con, sub->owner)) != HTTP_OK) { send_http_error(con, status, sub->dest); return; } exclude = cupsdGetPrivateAttrs(policy, con, sub->dest, sub->owner); /* * Copy the subscription attributes to the response using the * requested-attributes attribute that may be provided by the client. */ ra = create_requested_array(con->request); copy_subscription_attrs(con, sub, ra, exclude); cupsArrayDelete(ra); con->response->request.status.status_code = IPP_OK; } /* * 'get_subscriptions()' - Get subscriptions. */ static void get_subscriptions(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer/job URI */ { http_status_t status; /* Policy status */ int count; /* Number of subscriptions */ int limit; /* Limit */ cupsd_subscription_t *sub; /* Subscription */ cups_array_t *ra; /* Requested attributes array */ ipp_attribute_t *attr; /* Attribute */ cups_ptype_t dtype; /* Destination type (printer/class) */ char scheme[HTTP_MAX_URI], /* Scheme portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ cupsd_job_t *job; /* Job pointer */ cupsd_printer_t *printer; /* Printer */ cupsd_policy_t *policy; /* Policy */ cups_array_t *exclude; /* Private attributes array */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_subscriptions(con=%p[%d], uri=%s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (!strcmp(resource, "/") || (!strncmp(resource, "/jobs", 5) && strlen(resource) <= 6) || (!strncmp(resource, "/printers", 9) && strlen(resource) <= 10) || (!strncmp(resource, "/classes", 8) && strlen(resource) <= 9)) { printer = NULL; job = NULL; } else if (!strncmp(resource, "/jobs/", 6) && resource[6]) { printer = NULL; job = cupsdFindJob(atoi(resource + 6)); if (!job) { send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), atoi(resource + 6)); return; } } else if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } else if ((attr = ippFindAttribute(con->request, "notify-job-id", IPP_TAG_INTEGER)) != NULL) { job = cupsdFindJob(attr->values[0].integer); if (!job) { send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), attr->values[0].integer); return; } } else job = NULL; /* * Check policy... */ if (printer) policy = printer->op_policy_ptr; else policy = DefaultPolicyPtr; if ((status = cupsdCheckPolicy(policy, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } /* * Expire subscriptions as needed... */ cupsdExpireSubscriptions(NULL, NULL); /* * Copy the subscription attributes to the response using the * requested-attributes attribute that may be provided by the client. */ ra = create_requested_array(con->request); if ((attr = ippFindAttribute(con->request, "limit", IPP_TAG_INTEGER)) != NULL) limit = attr->values[0].integer; else limit = 0; /* * See if we only want to see subscriptions for a specific user... */ if ((attr = ippFindAttribute(con->request, "my-subscriptions", IPP_TAG_BOOLEAN)) != NULL && attr->values[0].boolean) strlcpy(username, get_username(con), sizeof(username)); else username[0] = '\0'; for (sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions), count = 0; sub; sub = (cupsd_subscription_t *)cupsArrayNext(Subscriptions)) if ((!printer || sub->dest == printer) && (!job || sub->job == job) && (!username[0] || !_cups_strcasecmp(username, sub->owner))) { ippAddSeparator(con->response); exclude = cupsdGetPrivateAttrs(sub->dest ? sub->dest->op_policy_ptr : policy, con, sub->dest, sub->owner); copy_subscription_attrs(con, sub, ra, exclude); count ++; if (limit && count >= limit) break; } cupsArrayDelete(ra); if (count) con->response->request.status.status_code = IPP_OK; else send_ipp_status(con, IPP_NOT_FOUND, _("No subscriptions found.")); } /* * 'get_username()' - Get the username associated with a request. */ static const char * /* O - Username */ get_username(cupsd_client_t *con) /* I - Connection */ { ipp_attribute_t *attr; /* Attribute */ if (con->username[0]) return (con->username); else if ((attr = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_NAME)) != NULL) return (attr->values[0].string.text); else return ("anonymous"); } /* * 'hold_job()' - Hold a print job. */ static void hold_job(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Job or Printer URI */ { ipp_attribute_t *attr; /* Current job-hold-until */ const char *when; /* New value */ int jobid; /* Job ID */ char scheme[HTTP_MAX_URI], /* Method portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ cupsd_job_t *job; /* Job information */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "hold_job(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * See if we have a job URI or a printer URI... */ if (!strcmp(uri->name, "printer-uri")) { /* * Got a printer URI; see if we also have a job-id attribute... */ if ((attr = ippFindAttribute(con->request, "job-id", IPP_TAG_INTEGER)) == NULL) { send_ipp_status(con, IPP_BAD_REQUEST, _("Got a printer-uri attribute but no job-id.")); return; } jobid = attr->values[0].integer; } else { /* * Got a job URI; parse it to get the job ID... */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (strncmp(resource, "/jobs/", 6)) { /* * Not a valid URI! */ send_ipp_status(con, IPP_BAD_REQUEST, _("Bad job-uri \"%s\"."), uri->values[0].string.text); return; } jobid = atoi(resource + 6); } /* * See if the job exists... */ if ((job = cupsdFindJob(jobid)) == NULL) { /* * Nope - return a "not found" error... */ send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), jobid); return; } /* * See if the job is owned by the requesting user... */ if (!validate_user(job, con, job->username, username, sizeof(username))) { send_http_error(con, con->username[0] ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED, cupsdFindDest(job->dest)); return; } /* * See if the job is in a state that allows holding... */ if (job->state_value > IPP_JOB_STOPPED) { /* * Return a "not-possible" error... */ send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job #%d is finished and cannot be altered."), job->id); return; } /* * Hold the job and return... */ if ((attr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_KEYWORD)) == NULL) attr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_NAME); if (attr) { when = attr->values[0].string.text; cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED, cupsdFindDest(job->dest), job, "Job job-hold-until value changed by user."); } else when = "indefinite"; cupsdSetJobHoldUntil(job, when, 1); cupsdSetJobState(job, IPP_JOB_HELD, CUPSD_JOB_DEFAULT, "Job held by \"%s\".", username); con->response->request.status.status_code = IPP_OK; } /* * 'hold_new_jobs()' - Hold pending/new jobs on a printer or class. */ static void hold_new_jobs(cupsd_client_t *con, /* I - Connection */ ipp_attribute_t *uri) /* I - Printer URI */ { http_status_t status; /* Policy status */ cups_ptype_t dtype; /* Destination type (printer/class) */ cupsd_printer_t *printer; /* Printer data */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "hold_new_jobs(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } /* * Hold pending/new jobs sent to the printer... */ printer->holding_new_jobs = 1; cupsdSetPrinterReasons(printer, "+hold-new-jobs"); if (dtype & CUPS_PRINTER_CLASS) cupsdLogMessage(CUPSD_LOG_INFO, "Class \"%s\" now holding pending/new jobs (\"%s\").", printer->name, get_username(con)); else cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" now holding pending/new jobs (\"%s\").", printer->name, get_username(con)); /* * Everything was ok, so return OK status... */ con->response->request.status.status_code = IPP_OK; } /* * 'move_job()' - Move a job to a new destination. */ static void move_job(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Job URI */ { http_status_t status; /* Policy status */ ipp_attribute_t *attr; /* Current attribute */ int jobid; /* Job ID */ cupsd_job_t *job; /* Current job */ const char *src; /* Source printer/class */ cups_ptype_t stype, /* Source type (printer or class) */ dtype; /* Destination type (printer/class) */ char scheme[HTTP_MAX_URI], /* Scheme portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ cupsd_printer_t *sprinter, /* Source printer */ *dprinter; /* Destination printer */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "move_job(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Get the new printer or class... */ if ((attr = ippFindAttribute(con->request, "job-printer-uri", IPP_TAG_URI)) == NULL) { /* * Need job-printer-uri... */ send_ipp_status(con, IPP_BAD_REQUEST, _("job-printer-uri attribute missing.")); return; } if (!cupsdValidateDest(attr->values[0].string.text, &dtype, &dprinter)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * See if we have a job URI or a printer URI... */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (!strcmp(uri->name, "printer-uri")) { /* * Got a printer URI; see if we also have a job-id attribute... */ if ((attr = ippFindAttribute(con->request, "job-id", IPP_TAG_INTEGER)) == NULL) { /* * Move all jobs... */ if ((src = cupsdValidateDest(uri->values[0].string.text, &stype, &sprinter)) == NULL) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } job = NULL; } else { /* * Otherwise, just move a single job... */ if ((job = cupsdFindJob(attr->values[0].integer)) == NULL) { /* * Nope - return a "not found" error... */ send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), attr->values[0].integer); return; } else { /* * Job found, initialize source pointers... */ src = NULL; sprinter = NULL; } } } else { /* * Got a job URI; parse it to get the job ID... */ if (strncmp(resource, "/jobs/", 6)) { /* * Not a valid URI! */ send_ipp_status(con, IPP_BAD_REQUEST, _("Bad job-uri \"%s\"."), uri->values[0].string.text); return; } /* * See if the job exists... */ jobid = atoi(resource + 6); if ((job = cupsdFindJob(jobid)) == NULL) { /* * Nope - return a "not found" error... */ send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), jobid); return; } else { /* * Job found, initialize source pointers... */ src = NULL; sprinter = NULL; } } /* * Check the policy of the destination printer... */ if ((status = cupsdCheckPolicy(dprinter->op_policy_ptr, con, job ? job->username : NULL)) != HTTP_OK) { send_http_error(con, status, dprinter); return; } /* * Now move the job or jobs... */ if (job) { /* * See if the job has been completed... */ if (job->state_value > IPP_JOB_STOPPED) { /* * Return a "not-possible" error... */ send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job #%d is finished and cannot be altered."), job->id); return; } /* * See if the job is owned by the requesting user... */ if (!validate_user(job, con, job->username, username, sizeof(username))) { send_http_error(con, con->username[0] ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED, cupsdFindDest(job->dest)); return; } /* * Move the job to a different printer or class... */ cupsdMoveJob(job, dprinter); } else { /* * Got the source printer, now look through the jobs... */ for (job = (cupsd_job_t *)cupsArrayFirst(Jobs); job; job = (cupsd_job_t *)cupsArrayNext(Jobs)) { /* * See if the job is pointing at the source printer or has not been * completed... */ if (_cups_strcasecmp(job->dest, src) || job->state_value > IPP_JOB_STOPPED) continue; /* * See if the job can be moved by the requesting user... */ if (!validate_user(job, con, job->username, username, sizeof(username))) continue; /* * Move the job to a different printer or class... */ cupsdMoveJob(job, dprinter); } } /* * Start jobs if possible... */ cupsdCheckJobs(); /* * Return with "everything is OK" status... */ con->response->request.status.status_code = IPP_OK; } /* * 'ppd_parse_line()' - Parse a PPD default line. */ static int /* O - 0 on success, -1 on failure */ ppd_parse_line(const char *line, /* I - Line */ char *option, /* O - Option name */ int olen, /* I - Size of option name */ char *choice, /* O - Choice name */ int clen) /* I - Size of choice name */ { /* * Verify this is a default option line... */ if (strncmp(line, "*Default", 8)) return (-1); /* * Read the option name... */ for (line += 8, olen --; *line > ' ' && *line < 0x7f && *line != ':' && *line != '/'; line ++) if (olen > 0) { *option++ = *line; olen --; } *option = '\0'; /* * Skip everything else up to the colon (:)... */ while (*line && *line != ':') line ++; if (!*line) return (-1); line ++; /* * Now grab the option choice, skipping leading whitespace... */ while (isspace(*line & 255)) line ++; for (clen --; *line > ' ' && *line < 0x7f && *line != ':' && *line != '/'; line ++) if (clen > 0) { *choice++ = *line; clen --; } *choice = '\0'; /* * Return with no errors... */ return (0); } /* * 'print_job()' - Print a file to a printer or class. */ static void print_job(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI */ { ipp_attribute_t *attr; /* Current attribute */ ipp_attribute_t *doc_name; /* document-name attribute */ ipp_attribute_t *format; /* Document-format attribute */ const char *default_format; /* document-format-default value */ cupsd_job_t *job; /* New job */ char filename[1024]; /* Job filename */ mime_type_t *filetype; /* Type of file */ char super[MIME_MAX_SUPER], /* Supertype of file */ type[MIME_MAX_TYPE], /* Subtype of file */ mimetype[MIME_MAX_SUPER + MIME_MAX_TYPE + 2]; /* Textual name of mime type */ cupsd_printer_t *printer; /* Printer data */ struct stat fileinfo; /* File information */ int kbytes; /* Size of file */ int compression; /* Document compression */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "print_job(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Validate print file attributes, for now just document-format and * compression (CUPS only supports "none" and "gzip")... */ compression = CUPS_FILE_NONE; if ((attr = ippFindAttribute(con->request, "compression", IPP_TAG_KEYWORD)) != NULL) { if (strcmp(attr->values[0].string.text, "none") #ifdef HAVE_LIBZ && strcmp(attr->values[0].string.text, "gzip") #endif /* HAVE_LIBZ */ ) { send_ipp_status(con, IPP_ATTRIBUTES, _("Unsupported compression \"%s\"."), attr->values[0].string.text); ippAddString(con->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_KEYWORD, "compression", NULL, attr->values[0].string.text); return; } #ifdef HAVE_LIBZ if (!strcmp(attr->values[0].string.text, "gzip")) compression = CUPS_FILE_GZIP; #endif /* HAVE_LIBZ */ } /* * Do we have a file to print? */ if (!con->filename) { send_ipp_status(con, IPP_BAD_REQUEST, _("No file in print request.")); return; } /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, NULL, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Is it a format we support? */ doc_name = ippFindAttribute(con->request, "document-name", IPP_TAG_NAME); if (doc_name) ippSetName(con->request, &doc_name, "document-name-supplied"); if ((format = ippFindAttribute(con->request, "document-format", IPP_TAG_MIMETYPE)) != NULL) { /* * Grab format from client... */ if (sscanf(format->values[0].string.text, "%15[^/]/%255[^;]", super, type) != 2) { send_ipp_status(con, IPP_BAD_REQUEST, _("Bad document-format \"%s\"."), format->values[0].string.text); return; } ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-supplied", NULL, ippGetString(format, 0, NULL)); } else if ((default_format = cupsGetOption("document-format", printer->num_options, printer->options)) != NULL) { /* * Use default document format... */ if (sscanf(default_format, "%15[^/]/%255[^;]", super, type) != 2) { send_ipp_status(con, IPP_BAD_REQUEST, _("Bad document-format \"%s\"."), default_format); return; } } else { /* * Auto-type it! */ strlcpy(super, "application", sizeof(super)); strlcpy(type, "octet-stream", sizeof(type)); } if (!strcmp(super, "application") && !strcmp(type, "octet-stream")) { /* * Auto-type the file... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job ???] Auto-typing file..."); filetype = mimeFileType(MimeDatabase, con->filename, doc_name ? doc_name->values[0].string.text : NULL, &compression); if (!filetype) filetype = mimeType(MimeDatabase, super, type); cupsdLogMessage(CUPSD_LOG_INFO, "[Job ???] Request file type is %s/%s.", filetype->super, filetype->type); snprintf(mimetype, sizeof(mimetype), "%s/%s", filetype->super, filetype->type); ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-detected", NULL, mimetype); } else filetype = mimeType(MimeDatabase, super, type); if (filetype && (!format || (!strcmp(super, "application") && !strcmp(type, "octet-stream")))) { /* * Replace the document-format attribute value with the auto-typed or * default one. */ snprintf(mimetype, sizeof(mimetype), "%s/%s", filetype->super, filetype->type); if (format) ippSetString(con->request, &format, 0, mimetype); else ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format", NULL, mimetype); } else if (!filetype) { send_ipp_status(con, IPP_DOCUMENT_FORMAT, _("Unsupported document-format \"%s\"."), format ? format->values[0].string.text : "application/octet-stream"); cupsdLogMessage(CUPSD_LOG_INFO, "Hint: Do you have the raw file printing rules enabled?"); if (format) ippAddString(con->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_MIMETYPE, "document-format", NULL, format->values[0].string.text); return; } /* * Read any embedded job ticket info from PS files... */ if (!_cups_strcasecmp(filetype->super, "application") && (!_cups_strcasecmp(filetype->type, "postscript") || !_cups_strcasecmp(filetype->type, "pdf"))) read_job_ticket(con); /* * Create the job object... */ if ((job = add_job(con, printer, filetype)) == NULL) return; /* * Update quota data... */ if (stat(con->filename, &fileinfo)) kbytes = 0; else kbytes = (fileinfo.st_size + 1023) / 1024; cupsdUpdateQuota(printer, job->username, 0, kbytes); job->koctets += kbytes; if ((attr = ippFindAttribute(job->attrs, "job-k-octets", IPP_TAG_INTEGER)) != NULL) attr->values[0].integer += kbytes; /* * Add the job file... */ if (add_file(con, job, filetype, compression)) return; snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id, job->num_files); if (rename(con->filename, filename)) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to rename job document file \"%s\": %s", filename, strerror(errno)); send_ipp_status(con, IPP_INTERNAL_ERROR, _("Unable to rename job document file.")); return; } cupsdClearString(&con->filename); /* * See if we need to add the ending sheet... */ if (cupsdTimeoutJob(job)) return; /* * Log and save the job... */ cupsdLogJob(job, CUPSD_LOG_INFO, "File of type %s/%s queued by \"%s\".", filetype->super, filetype->type, job->username); cupsdLogJob(job, CUPSD_LOG_DEBUG, "hold_until=%d", (int)job->hold_until); cupsdLogJob(job, CUPSD_LOG_INFO, "Queued on \"%s\" by \"%s\".", job->dest, job->username); /* * Start the job if possible... */ cupsdCheckJobs(); } /* * 'read_job_ticket()' - Read a job ticket embedded in a print file. * * This function only gets called when printing a single PDF or PostScript * file using the Print-Job operation. It doesn't work for Create-Job + * Send-File, since the job attributes need to be set at job creation * time for banners to work. The embedded job ticket stuff is here * primarily to allow the Windows printer driver for CUPS to pass in JCL * options and IPP attributes which otherwise would be lost. * * The format of a job ticket is simple: * * %cupsJobTicket: attr1=value1 attr2=value2 ... attrN=valueN * * %cupsJobTicket: attr1=value1 * %cupsJobTicket: attr2=value2 * ... * %cupsJobTicket: attrN=valueN * * Job ticket lines must appear immediately after the first line that * specifies PostScript (%!PS-Adobe-3.0) or PDF (%PDF) format, and CUPS * stops looking for job ticket info when it finds a line that does not begin * with "%cupsJobTicket:". * * The maximum length of a job ticket line, including the prefix, is * 255 characters to conform with the Adobe DSC. * * Read-only attributes are rejected with a notice to the error log in * case a malicious user tries anything. Since the job ticket is read * prior to attribute validation in print_job(), job ticket attributes * will go through the same validation as IPP attributes... */ static void read_job_ticket(cupsd_client_t *con) /* I - Client connection */ { cups_file_t *fp; /* File to read from */ char line[256]; /* Line data */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ ipp_t *ticket; /* New attributes */ ipp_attribute_t *attr, /* Current attribute */ *attr2, /* Job attribute */ *prev2; /* Previous job attribute */ /* * First open the print file... */ if ((fp = cupsFileOpen(con->filename, "rb")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open print file for job ticket - %s", strerror(errno)); return; } /* * Skip the first line... */ if (cupsFileGets(fp, line, sizeof(line)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to read from print file for job ticket - %s", strerror(errno)); cupsFileClose(fp); return; } if (strncmp(line, "%!PS-Adobe-", 11) && strncmp(line, "%PDF-", 5)) { /* * Not a DSC-compliant file, so no job ticket info will be available... */ cupsFileClose(fp); return; } /* * Read job ticket info from the file... */ num_options = 0; options = NULL; while (cupsFileGets(fp, line, sizeof(line))) { /* * Stop at the first non-ticket line... */ if (strncmp(line, "%cupsJobTicket:", 15)) break; /* * Add the options to the option array... */ num_options = cupsParseOptions(line + 15, num_options, &options); } /* * Done with the file; see if we have any options... */ cupsFileClose(fp); if (num_options == 0) return; /* * OK, convert the options to an attribute list, and apply them to * the request... */ ticket = ippNew(); cupsEncodeOptions(ticket, num_options, options); /* * See what the user wants to change. */ for (attr = ticket->attrs; attr; attr = attr->next) { if (attr->group_tag != IPP_TAG_JOB || !attr->name) continue; if (!strncmp(attr->name, "date-time-at-", 13) || !strcmp(attr->name, "job-impressions-completed") || !strcmp(attr->name, "job-media-sheets-completed") || !strncmp(attr->name, "job-k-octets", 12) || !strcmp(attr->name, "job-id") || !strcmp(attr->name, "job-originating-host-name") || !strcmp(attr->name, "job-originating-user-name") || !strcmp(attr->name, "job-pages-completed") || !strcmp(attr->name, "job-printer-uri") || !strncmp(attr->name, "job-state", 9) || !strcmp(attr->name, "job-uri") || !strncmp(attr->name, "time-at-", 8)) continue; /* Read-only attrs */ if ((attr2 = ippFindAttribute(con->request, attr->name, IPP_TAG_ZERO)) != NULL) { /* * Some other value; first free the old value... */ if (con->request->attrs == attr2) { con->request->attrs = attr2->next; prev2 = NULL; } else { for (prev2 = con->request->attrs; prev2; prev2 = prev2->next) if (prev2->next == attr2) { prev2->next = attr2->next; break; } } if (con->request->last == attr2) con->request->last = prev2; ippDeleteAttribute(NULL, attr2); } /* * Add new option by copying it... */ ippCopyAttribute(con->request, attr, 0); } /* * Then free the attribute list and option array... */ ippDelete(ticket); cupsFreeOptions(num_options, options); } /* * 'reject_jobs()' - Reject print jobs to a printer. */ static void reject_jobs(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer or class URI */ { http_status_t status; /* Policy status */ cups_ptype_t dtype; /* Destination type (printer/class) */ cupsd_printer_t *printer; /* Printer data */ ipp_attribute_t *attr; /* printer-state-message text */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "reject_jobs(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } /* * Reject jobs sent to the printer... */ printer->accepting = 0; if ((attr = ippFindAttribute(con->request, "printer-state-message", IPP_TAG_TEXT)) == NULL) strlcpy(printer->state_message, "Rejecting Jobs", sizeof(printer->state_message)); else strlcpy(printer->state_message, attr->values[0].string.text, sizeof(printer->state_message)); cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, printer, NULL, "No longer accepting jobs."); if (dtype & CUPS_PRINTER_CLASS) { cupsdMarkDirty(CUPSD_DIRTY_CLASSES); cupsdLogMessage(CUPSD_LOG_INFO, "Class \"%s\" rejecting jobs (\"%s\").", printer->name, get_username(con)); } else { cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" rejecting jobs (\"%s\").", printer->name, get_username(con)); } /* * Everything was ok, so return OK status... */ con->response->request.status.status_code = IPP_OK; } /* * 'release_held_new_jobs()' - Release pending/new jobs on a printer or class. */ static void release_held_new_jobs( cupsd_client_t *con, /* I - Connection */ ipp_attribute_t *uri) /* I - Printer URI */ { http_status_t status; /* Policy status */ cups_ptype_t dtype; /* Destination type (printer/class) */ cupsd_printer_t *printer; /* Printer data */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "release_held_new_jobs(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } /* * Hold pending/new jobs sent to the printer... */ printer->holding_new_jobs = 0; cupsdSetPrinterReasons(printer, "-hold-new-jobs"); if (dtype & CUPS_PRINTER_CLASS) cupsdLogMessage(CUPSD_LOG_INFO, "Class \"%s\" now printing pending/new jobs (\"%s\").", printer->name, get_username(con)); else cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" now printing pending/new jobs (\"%s\").", printer->name, get_username(con)); cupsdCheckJobs(); /* * Everything was ok, so return OK status... */ con->response->request.status.status_code = IPP_OK; } /* * 'release_job()' - Release a held print job. */ static void release_job(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Job or Printer URI */ { ipp_attribute_t *attr; /* Current attribute */ int jobid; /* Job ID */ char scheme[HTTP_MAX_URI], /* Method portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ cupsd_job_t *job; /* Job information */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "release_job(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * See if we have a job URI or a printer URI... */ if (!strcmp(uri->name, "printer-uri")) { /* * Got a printer URI; see if we also have a job-id attribute... */ if ((attr = ippFindAttribute(con->request, "job-id", IPP_TAG_INTEGER)) == NULL) { send_ipp_status(con, IPP_BAD_REQUEST, _("Got a printer-uri attribute but no job-id.")); return; } jobid = attr->values[0].integer; } else { /* * Got a job URI; parse it to get the job ID... */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (strncmp(resource, "/jobs/", 6)) { /* * Not a valid URI! */ send_ipp_status(con, IPP_BAD_REQUEST, _("Bad job-uri \"%s\"."), uri->values[0].string.text); return; } jobid = atoi(resource + 6); } /* * See if the job exists... */ if ((job = cupsdFindJob(jobid)) == NULL) { /* * Nope - return a "not found" error... */ send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), jobid); return; } /* * See if job is "held"... */ if (job->state_value != IPP_JOB_HELD) { /* * Nope - return a "not possible" error... */ send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job #%d is not held."), jobid); return; } /* * See if the job is owned by the requesting user... */ if (!validate_user(job, con, job->username, username, sizeof(username))) { send_http_error(con, con->username[0] ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED, cupsdFindDest(job->dest)); return; } /* * Reset the job-hold-until value to "no-hold"... */ if ((attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD)) == NULL) attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME); if (attr) { ippSetValueTag(job->attrs, &attr, IPP_TAG_KEYWORD); ippSetString(job->attrs, &attr, 0, "no-hold"); cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED, cupsdFindDest(job->dest), job, "Job job-hold-until value changed by user."); ippSetString(job->attrs, &job->reasons, 0, "none"); } /* * Release the job and return... */ cupsdReleaseJob(job); cupsdAddEvent(CUPSD_EVENT_JOB_STATE, cupsdFindDest(job->dest), job, "Job released by user."); cupsdLogJob(job, CUPSD_LOG_INFO, "Released by \"%s\".", username); con->response->request.status.status_code = IPP_OK; cupsdCheckJobs(); } /* * 'renew_subscription()' - Renew an existing subscription... */ static void renew_subscription( cupsd_client_t *con, /* I - Client connection */ int sub_id) /* I - Subscription ID */ { http_status_t status; /* Policy status */ cupsd_subscription_t *sub; /* Subscription */ ipp_attribute_t *lease; /* notify-lease-duration */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "renew_subscription(con=%p[%d], sub_id=%d)", con, con->number, sub_id); /* * Is the subscription ID valid? */ if ((sub = cupsdFindSubscription(sub_id)) == NULL) { /* * Bad subscription ID... */ send_ipp_status(con, IPP_NOT_FOUND, _("Subscription #%d does not exist."), sub_id); return; } if (sub->job) { /* * Job subscriptions cannot be renewed... */ send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job subscriptions cannot be renewed.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(sub->dest ? sub->dest->op_policy_ptr : DefaultPolicyPtr, con, sub->owner)) != HTTP_OK) { send_http_error(con, status, sub->dest); return; } /* * Renew the subscription... */ lease = ippFindAttribute(con->request, "notify-lease-duration", IPP_TAG_INTEGER); sub->lease = lease ? lease->values[0].integer : DefaultLeaseDuration; if (MaxLeaseDuration && (sub->lease == 0 || sub->lease > MaxLeaseDuration)) { cupsdLogMessage(CUPSD_LOG_INFO, "renew_subscription: Limiting notify-lease-duration to " "%d seconds.", MaxLeaseDuration); sub->lease = MaxLeaseDuration; } sub->expire = sub->lease ? time(NULL) + sub->lease : 0; cupsdMarkDirty(CUPSD_DIRTY_SUBSCRIPTIONS); con->response->request.status.status_code = IPP_OK; ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-lease-duration", sub->lease); } /* * 'restart_job()' - Restart an old print job. */ static void restart_job(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Job or Printer URI */ { ipp_attribute_t *attr; /* Current attribute */ int jobid; /* Job ID */ cupsd_job_t *job; /* Job information */ char scheme[HTTP_MAX_URI], /* Method portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "restart_job(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * See if we have a job URI or a printer URI... */ if (!strcmp(uri->name, "printer-uri")) { /* * Got a printer URI; see if we also have a job-id attribute... */ if ((attr = ippFindAttribute(con->request, "job-id", IPP_TAG_INTEGER)) == NULL) { send_ipp_status(con, IPP_BAD_REQUEST, _("Got a printer-uri attribute but no job-id.")); return; } jobid = attr->values[0].integer; } else { /* * Got a job URI; parse it to get the job ID... */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (strncmp(resource, "/jobs/", 6)) { /* * Not a valid URI! */ send_ipp_status(con, IPP_BAD_REQUEST, _("Bad job-uri \"%s\"."), uri->values[0].string.text); return; } jobid = atoi(resource + 6); } /* * See if the job exists... */ if ((job = cupsdFindJob(jobid)) == NULL) { /* * Nope - return a "not found" error... */ send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), jobid); return; } /* * See if job is in any of the "completed" states... */ if (job->state_value <= IPP_JOB_PROCESSING) { /* * Nope - return a "not possible" error... */ send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job #%d is not complete."), jobid); return; } /* * See if we have retained the job files... */ cupsdLoadJob(job); if (!job->attrs || job->num_files == 0) { /* * Nope - return a "not possible" error... */ send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job #%d cannot be restarted - no files."), jobid); return; } /* * See if the job is owned by the requesting user... */ if (!validate_user(job, con, job->username, username, sizeof(username))) { send_http_error(con, con->username[0] ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED, cupsdFindDest(job->dest)); return; } /* * See if the job-hold-until attribute is specified... */ if ((attr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_KEYWORD)) == NULL) attr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_NAME); if (attr && strcmp(attr->values[0].string.text, "no-hold")) { /* * Return the job to a held state... */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "Restarted by \"%s\" with job-hold-until=%s.", username, attr->values[0].string.text); cupsdSetJobHoldUntil(job, attr->values[0].string.text, 0); cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE, NULL, job, "Job restarted by user with job-hold-until=%s", attr->values[0].string.text); } else { /* * Restart the job... */ cupsdRestartJob(job); cupsdCheckJobs(); } cupsdLogJob(job, CUPSD_LOG_INFO, "Restarted by \"%s\".", username); con->response->request.status.status_code = IPP_OK; } /* * 'save_auth_info()' - Save authentication information for a job. */ static void save_auth_info( cupsd_client_t *con, /* I - Client connection */ cupsd_job_t *job, /* I - Job */ ipp_attribute_t *auth_info) /* I - auth-info attribute, if any */ { int i; /* Looping var */ char filename[1024]; /* Job authentication filename */ cups_file_t *fp; /* Job authentication file */ char line[65536]; /* Line for file */ cupsd_printer_t *dest; /* Destination printer/class */ /* * This function saves the in-memory authentication information for * a job so that it can be used to authenticate with a remote host. * The information is stored in a file that is readable only by the * root user. The fields are Base-64 encoded, each on a separate line, * followed by random number (up to 1024) of newlines to limit the * amount of information that is exposed. * * Because of the potential for exposing of authentication information, * this functionality is only enabled when running cupsd as root. * * This caching only works for the Basic and BasicDigest authentication * types. Digest authentication cannot be cached this way, and in * the future Kerberos authentication may make all of this obsolete. * * Authentication information is saved whenever an authenticated * Print-Job, Create-Job, or CUPS-Authenticate-Job operation is * performed. * * This information is deleted after a job is completed or canceled, * so reprints may require subsequent re-authentication. */ if (RunUser) return; if ((dest = cupsdFindDest(job->dest)) == NULL) return; /* * Create the authentication file and change permissions... */ snprintf(filename, sizeof(filename), "%s/a%05d", RequestRoot, job->id); if ((fp = cupsFileOpen(filename, "w")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to save authentication info to \"%s\" - %s", filename, strerror(errno)); return; } fchown(cupsFileNumber(fp), 0, 0); fchmod(cupsFileNumber(fp), 0400); cupsFilePuts(fp, "CUPSD-AUTH-V3\n"); for (i = 0; i < (int)(sizeof(job->auth_env) / sizeof(job->auth_env[0])); i ++) cupsdClearString(job->auth_env + i); if (auth_info && auth_info->num_values == dest->num_auth_info_required) { /* * Write 1 to 3 auth values... */ for (i = 0; i < auth_info->num_values && i < (int)(sizeof(job->auth_env) / sizeof(job->auth_env[0])); i ++) { if (strcmp(dest->auth_info_required[i], "negotiate")) { httpEncode64_2(line, sizeof(line), auth_info->values[i].string.text, (int)strlen(auth_info->values[i].string.text)); cupsFilePutConf(fp, dest->auth_info_required[i], line); } else cupsFilePutConf(fp, dest->auth_info_required[i], auth_info->values[i].string.text); if (!strcmp(dest->auth_info_required[i], "username")) cupsdSetStringf(job->auth_env + i, "AUTH_USERNAME=%s", auth_info->values[i].string.text); else if (!strcmp(dest->auth_info_required[i], "domain")) cupsdSetStringf(job->auth_env + i, "AUTH_DOMAIN=%s", auth_info->values[i].string.text); else if (!strcmp(dest->auth_info_required[i], "password")) cupsdSetStringf(job->auth_env + i, "AUTH_PASSWORD=%s", auth_info->values[i].string.text); else if (!strcmp(dest->auth_info_required[i], "negotiate")) cupsdSetStringf(job->auth_env + i, "AUTH_NEGOTIATE=%s", auth_info->values[i].string.text); else i --; } } else if (auth_info && auth_info->num_values == 2 && dest->num_auth_info_required == 1 && !strcmp(dest->auth_info_required[0], "negotiate")) { /* * Allow fallback to username+password for Kerberized queues... */ httpEncode64_2(line, sizeof(line), auth_info->values[0].string.text, (int)strlen(auth_info->values[0].string.text)); cupsFilePutConf(fp, "username", line); cupsdSetStringf(job->auth_env + 0, "AUTH_USERNAME=%s", auth_info->values[0].string.text); httpEncode64_2(line, sizeof(line), auth_info->values[1].string.text, (int)strlen(auth_info->values[1].string.text)); cupsFilePutConf(fp, "password", line); cupsdSetStringf(job->auth_env + 1, "AUTH_PASSWORD=%s", auth_info->values[1].string.text); } else if (con->username[0]) { /* * Write the authenticated username... */ httpEncode64_2(line, sizeof(line), con->username, (int)strlen(con->username)); cupsFilePutConf(fp, "username", line); cupsdSetStringf(job->auth_env + 0, "AUTH_USERNAME=%s", con->username); /* * Write the authenticated password... */ httpEncode64_2(line, sizeof(line), con->password, (int)strlen(con->password)); cupsFilePutConf(fp, "password", line); cupsdSetStringf(job->auth_env + 1, "AUTH_PASSWORD=%s", con->password); } #ifdef HAVE_GSSAPI if (con->gss_uid > 0) { cupsFilePrintf(fp, "uid %d\n", (int)con->gss_uid); cupsdSetStringf(&job->auth_uid, "AUTH_UID=%d", (int)con->gss_uid); } #endif /* HAVE_GSSAPI */ /* * Write a random number of newlines to the end of the file... */ for (i = (CUPS_RAND() % 1024); i >= 0; i --) cupsFilePutChar(fp, '\n'); /* * Close the file and return... */ cupsFileClose(fp); } /* * 'send_document()' - Send a file to a printer or class. */ static void send_document(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI */ { ipp_attribute_t *attr; /* Current attribute */ ipp_attribute_t *format; /* Request's document-format attribute */ ipp_attribute_t *jformat; /* Job's document-format attribute */ const char *default_format;/* document-format-default value */ int jobid; /* Job ID number */ cupsd_job_t *job; /* Current job */ char job_uri[HTTP_MAX_URI], /* Job URI */ scheme[HTTP_MAX_URI], /* Method portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ mime_type_t *filetype; /* Type of file */ char super[MIME_MAX_SUPER], /* Supertype of file */ type[MIME_MAX_TYPE], /* Subtype of file */ mimetype[MIME_MAX_SUPER + MIME_MAX_TYPE + 2]; /* Textual name of mime type */ char filename[1024]; /* Job filename */ cupsd_printer_t *printer; /* Current printer */ struct stat fileinfo; /* File information */ int kbytes; /* Size of file */ int compression; /* Type of compression */ int start_job; /* Start the job? */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "send_document(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * See if we have a job URI or a printer URI... */ if (!strcmp(uri->name, "printer-uri")) { /* * Got a printer URI; see if we also have a job-id attribute... */ if ((attr = ippFindAttribute(con->request, "job-id", IPP_TAG_INTEGER)) == NULL) { send_ipp_status(con, IPP_BAD_REQUEST, _("Got a printer-uri attribute but no job-id.")); return; } jobid = attr->values[0].integer; } else { /* * Got a job URI; parse it to get the job ID... */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (strncmp(resource, "/jobs/", 6)) { /* * Not a valid URI! */ send_ipp_status(con, IPP_BAD_REQUEST, _("Bad job-uri \"%s\"."), uri->values[0].string.text); return; } jobid = atoi(resource + 6); } /* * See if the job exists... */ if ((job = cupsdFindJob(jobid)) == NULL) { /* * Nope - return a "not found" error... */ send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), jobid); return; } printer = cupsdFindDest(job->dest); /* * See if the job is owned by the requesting user... */ if (!validate_user(job, con, job->username, username, sizeof(username))) { send_http_error(con, con->username[0] ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED, cupsdFindDest(job->dest)); return; } /* * OK, see if the client is sending the document compressed - CUPS * only supports "none" and "gzip". */ compression = CUPS_FILE_NONE; if ((attr = ippFindAttribute(con->request, "compression", IPP_TAG_KEYWORD)) != NULL) { if (strcmp(attr->values[0].string.text, "none") #ifdef HAVE_LIBZ && strcmp(attr->values[0].string.text, "gzip") #endif /* HAVE_LIBZ */ ) { send_ipp_status(con, IPP_ATTRIBUTES, _("Unsupported compression \"%s\"."), attr->values[0].string.text); ippAddString(con->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_KEYWORD, "compression", NULL, attr->values[0].string.text); return; } #ifdef HAVE_LIBZ if (!strcmp(attr->values[0].string.text, "gzip")) compression = CUPS_FILE_GZIP; #endif /* HAVE_LIBZ */ } /* * Do we have a file to print? */ if ((attr = ippFindAttribute(con->request, "last-document", IPP_TAG_BOOLEAN)) == NULL) { send_ipp_status(con, IPP_BAD_REQUEST, _("Missing last-document attribute in request.")); return; } if (!con->filename) { /* * Check for an empty request with "last-document" set to true, which is * used to close an "open" job by RFC 2911, section 3.3.2. */ if (job->num_files > 0 && attr->values[0].boolean) goto last_document; send_ipp_status(con, IPP_BAD_REQUEST, _("No file in print request.")); return; } /* * Is it a format we support? */ cupsdLoadJob(job); if ((format = ippFindAttribute(con->request, "document-format", IPP_TAG_MIMETYPE)) != NULL) { /* * Grab format from client... */ if (sscanf(format->values[0].string.text, "%15[^/]/%255[^;]", super, type) != 2) { send_ipp_status(con, IPP_BAD_REQUEST, _("Bad document-format \"%s\"."), format->values[0].string.text); return; } ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-supplied", NULL, ippGetString(format, 0, NULL)); } else if ((default_format = cupsGetOption("document-format", printer->num_options, printer->options)) != NULL) { /* * Use default document format... */ if (sscanf(default_format, "%15[^/]/%255[^;]", super, type) != 2) { send_ipp_status(con, IPP_BAD_REQUEST, _("Bad document-format-default \"%s\"."), default_format); return; } } else { /* * No document format attribute? Auto-type it! */ strlcpy(super, "application", sizeof(super)); strlcpy(type, "octet-stream", sizeof(type)); } if (!strcmp(super, "application") && !strcmp(type, "octet-stream")) { /* * Auto-type the file... */ ipp_attribute_t *doc_name; /* document-name attribute */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "Auto-typing file..."); doc_name = ippFindAttribute(con->request, "document-name", IPP_TAG_NAME); filetype = mimeFileType(MimeDatabase, con->filename, doc_name ? doc_name->values[0].string.text : NULL, &compression); if (!filetype) filetype = mimeType(MimeDatabase, super, type); if (filetype) cupsdLogJob(job, CUPSD_LOG_DEBUG, "Request file type is %s/%s.", filetype->super, filetype->type); snprintf(mimetype, sizeof(mimetype), "%s/%s", filetype->super, filetype->type); ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-detected", NULL, mimetype); } else filetype = mimeType(MimeDatabase, super, type); if (filetype) { /* * Replace the document-format attribute value with the auto-typed or * default one. */ snprintf(mimetype, sizeof(mimetype), "%s/%s", filetype->super, filetype->type); if ((jformat = ippFindAttribute(job->attrs, "document-format", IPP_TAG_MIMETYPE)) != NULL) ippSetString(job->attrs, &jformat, 0, mimetype); else ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format", NULL, mimetype); } else if (!filetype) { send_ipp_status(con, IPP_DOCUMENT_FORMAT, _("Unsupported document-format \"%s/%s\"."), super, type); cupsdLogMessage(CUPSD_LOG_INFO, "Hint: Do you have the raw file printing rules enabled?"); if (format) ippAddString(con->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_MIMETYPE, "document-format", NULL, format->values[0].string.text); return; } if (printer->filetypes && !cupsArrayFind(printer->filetypes, filetype)) { snprintf(mimetype, sizeof(mimetype), "%s/%s", filetype->super, filetype->type); send_ipp_status(con, IPP_DOCUMENT_FORMAT, _("Unsupported document-format \"%s\"."), mimetype); ippAddString(con->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_MIMETYPE, "document-format", NULL, mimetype); return; } /* * Add the file to the job... */ if (add_file(con, job, filetype, compression)) return; if ((attr = ippFindAttribute(con->request, "document-name", IPP_TAG_NAME)) != NULL) ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "document-name-supplied", NULL, ippGetString(attr, 0, NULL)); if (stat(con->filename, &fileinfo)) kbytes = 0; else kbytes = (fileinfo.st_size + 1023) / 1024; cupsdUpdateQuota(printer, job->username, 0, kbytes); job->koctets += kbytes; if ((attr = ippFindAttribute(job->attrs, "job-k-octets", IPP_TAG_INTEGER)) != NULL) attr->values[0].integer += kbytes; snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id, job->num_files); if (rename(con->filename, filename)) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to rename job document file \"%s\": %s", filename, strerror(errno)); send_ipp_status(con, IPP_INTERNAL_ERROR, _("Unable to rename job document file.")); return; } cupsdClearString(&con->filename); cupsdLogJob(job, CUPSD_LOG_INFO, "File of type %s/%s queued by \"%s\".", filetype->super, filetype->type, job->username); /* * Start the job if this is the last document... */ last_document: if ((attr = ippFindAttribute(con->request, "last-document", IPP_TAG_BOOLEAN)) != NULL && attr->values[0].boolean) { /* * See if we need to add the ending sheet... */ if (cupsdTimeoutJob(job)) return; if (job->state_value == IPP_JOB_STOPPED) { job->state->values[0].integer = IPP_JOB_PENDING; job->state_value = IPP_JOB_PENDING; ippSetString(job->attrs, &job->reasons, 0, "none"); } else if (job->state_value == IPP_JOB_HELD) { if ((attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD)) == NULL) attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME); if (!attr || !strcmp(attr->values[0].string.text, "no-hold")) { job->state->values[0].integer = IPP_JOB_PENDING; job->state_value = IPP_JOB_PENDING; ippSetString(job->attrs, &job->reasons, 0, "none"); } else ippSetString(job->attrs, &job->reasons, 0, "job-hold-until-specified"); } job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); start_job = 1; } else { if ((attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD)) == NULL) attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME); if (!attr || !strcmp(attr->values[0].string.text, "no-hold")) { job->state->values[0].integer = IPP_JOB_HELD; job->state_value = IPP_JOB_HELD; job->hold_until = time(NULL) + MultipleOperationTimeout; ippSetString(job->attrs, &job->reasons, 0, "job-incoming"); job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); } start_job = 0; } /* * Fill in the response info... */ httpAssembleURIf(HTTP_URI_CODING_ALL, job_uri, sizeof(job_uri), "ipp", NULL, con->clientname, con->clientport, "/jobs/%d", jobid); ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_URI, "job-uri", NULL, job_uri); ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", jobid); ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_ENUM, "job-state", job->state_value); ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-state-reasons", NULL, job->reasons->values[0].string.text); con->response->request.status.status_code = IPP_OK; /* * Start the job if necessary... */ if (start_job) cupsdCheckJobs(); } /* * 'send_http_error()' - Send a HTTP error back to the IPP client. */ static void send_http_error( cupsd_client_t *con, /* I - Client connection */ http_status_t status, /* I - HTTP status code */ cupsd_printer_t *printer) /* I - Printer, if any */ { ipp_attribute_t *uri; /* Request URI, if any */ if ((uri = ippFindAttribute(con->request, "printer-uri", IPP_TAG_URI)) == NULL) uri = ippFindAttribute(con->request, "job-uri", IPP_TAG_URI); cupsdLogMessage(status == HTTP_FORBIDDEN ? CUPSD_LOG_ERROR : CUPSD_LOG_DEBUG, "[Client %d] Returning HTTP %s for %s (%s) from %s", con->number, httpStatus(status), con->request ? ippOpString(con->request->request.op.operation_id) : "no operation-id", uri ? uri->values[0].string.text : "no URI", con->http->hostname); if (printer) { int auth_type; /* Type of authentication required */ auth_type = CUPSD_AUTH_NONE; if (status == HTTP_UNAUTHORIZED && printer->num_auth_info_required > 0 && !strcmp(printer->auth_info_required[0], "negotiate") && con->request && (con->request->request.op.operation_id == IPP_PRINT_JOB || con->request->request.op.operation_id == IPP_CREATE_JOB || con->request->request.op.operation_id == CUPS_AUTHENTICATE_JOB)) { /* * Creating and authenticating jobs requires Kerberos... */ auth_type = CUPSD_AUTH_NEGOTIATE; } else { /* * Use policy/location-defined authentication requirements... */ char resource[HTTP_MAX_URI]; /* Resource portion of URI */ cupsd_location_t *auth; /* Pointer to authentication element */ if (printer->type & CUPS_PRINTER_CLASS) snprintf(resource, sizeof(resource), "/classes/%s", printer->name); else snprintf(resource, sizeof(resource), "/printers/%s", printer->name); if ((auth = cupsdFindBest(resource, HTTP_POST)) == NULL || auth->type == CUPSD_AUTH_NONE) auth = cupsdFindPolicyOp(printer->op_policy_ptr, con->request ? con->request->request.op.operation_id : IPP_PRINT_JOB); if (auth) { if (auth->type == CUPSD_AUTH_DEFAULT) auth_type = cupsdDefaultAuthType(); else auth_type = auth->type; } } cupsdSendError(con, status, auth_type); } else cupsdSendError(con, status, CUPSD_AUTH_NONE); ippDelete(con->response); con->response = NULL; return; } /* * 'send_ipp_status()' - Send a status back to the IPP client. */ static void send_ipp_status(cupsd_client_t *con, /* I - Client connection */ ipp_status_t status, /* I - IPP status code */ const char *message,/* I - Status message */ ...) /* I - Additional args as needed */ { va_list ap; /* Pointer to additional args */ char formatted[1024]; /* Formatted errror message */ va_start(ap, message); vsnprintf(formatted, sizeof(formatted), _cupsLangString(con->language, message), ap); va_end(ap); cupsdLogMessage(CUPSD_LOG_DEBUG, "%s %s: %s", ippOpString(con->request->request.op.operation_id), ippErrorString(status), formatted); con->response->request.status.status_code = status; if (ippFindAttribute(con->response, "attributes-charset", IPP_TAG_ZERO) == NULL) ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "utf-8"); if (ippFindAttribute(con->response, "attributes-natural-language", IPP_TAG_ZERO) == NULL) ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, DefaultLanguage); ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_TEXT, "status-message", NULL, formatted); } /* * 'set_default()' - Set the default destination... */ static void set_default(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI */ { http_status_t status; /* Policy status */ cups_ptype_t dtype; /* Destination type (printer/class) */ cupsd_printer_t *printer, /* Printer */ *oldprinter; /* Old default printer */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "set_default(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK) { send_http_error(con, status, NULL); return; } /* * Set it as the default... */ oldprinter = DefaultPrinter; DefaultPrinter = printer; if (oldprinter) cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, oldprinter, NULL, "%s is no longer the default printer.", oldprinter->name); cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, printer, NULL, "%s is now the default printer.", printer->name); cupsdMarkDirty(CUPSD_DIRTY_PRINTERS | CUPSD_DIRTY_CLASSES | CUPSD_DIRTY_PRINTCAP); cupsdLogMessage(CUPSD_LOG_INFO, "Default destination set to \"%s\" by \"%s\".", printer->name, get_username(con)); /* * Everything was ok, so return OK status... */ con->response->request.status.status_code = IPP_OK; } /* * 'set_job_attrs()' - Set job attributes. */ static void set_job_attrs(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Job URI */ { ipp_attribute_t *attr, /* Current attribute */ *attr2; /* Job attribute */ int jobid; /* Job ID */ cupsd_job_t *job; /* Current job */ char scheme[HTTP_MAX_URI], /* Method portion of URI */ username[HTTP_MAX_URI], /* Username portion of URI */ host[HTTP_MAX_URI], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ int event; /* Events? */ int check_jobs; /* Check jobs? */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "set_job_attrs(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Start with "everything is OK" status... */ con->response->request.status.status_code = IPP_OK; /* * See if we have a job URI or a printer URI... */ if (!strcmp(uri->name, "printer-uri")) { /* * Got a printer URI; see if we also have a job-id attribute... */ if ((attr = ippFindAttribute(con->request, "job-id", IPP_TAG_INTEGER)) == NULL) { send_ipp_status(con, IPP_BAD_REQUEST, _("Got a printer-uri attribute but no job-id.")); return; } jobid = attr->values[0].integer; } else { /* * Got a job URI; parse it to get the job ID... */ httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)); if (strncmp(resource, "/jobs/", 6)) { /* * Not a valid URI! */ send_ipp_status(con, IPP_BAD_REQUEST, _("Bad job-uri \"%s\"."), uri->values[0].string.text); return; } jobid = atoi(resource + 6); } /* * See if the job exists... */ if ((job = cupsdFindJob(jobid)) == NULL) { /* * Nope - return a "not found" error... */ send_ipp_status(con, IPP_NOT_FOUND, _("Job #%d does not exist."), jobid); return; } /* * See if the job has been completed... */ if (job->state_value > IPP_JOB_STOPPED) { /* * Return a "not-possible" error... */ send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job #%d is finished and cannot be altered."), jobid); return; } /* * See if the job is owned by the requesting user... */ if (!validate_user(job, con, job->username, username, sizeof(username))) { send_http_error(con, con->username[0] ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED, cupsdFindDest(job->dest)); return; } /* * See what the user wants to change. */ cupsdLoadJob(job); check_jobs = 0; event = 0; for (attr = con->request->attrs; attr; attr = attr->next) { if (attr->group_tag != IPP_TAG_JOB || !attr->name) continue; if (!strcmp(attr->name, "attributes-charset") || !strcmp(attr->name, "attributes-natural-language") || !strncmp(attr->name, "date-time-at-", 13) || !strncmp(attr->name, "document-compression", 20) || !strncmp(attr->name, "document-format", 15) || !strcmp(attr->name, "job-detailed-status-messages") || !strcmp(attr->name, "job-document-access-errors") || !strcmp(attr->name, "job-id") || !strcmp(attr->name, "job-impressions-completed") || !strcmp(attr->name, "job-k-octets-completed") || !strcmp(attr->name, "job-media-sheets-completed") || !strcmp(attr->name, "job-originating-host-name") || !strcmp(attr->name, "job-originating-user-name") || !strcmp(attr->name, "job-pages-completed") || !strcmp(attr->name, "job-printer-up-time") || !strcmp(attr->name, "job-printer-uri") || !strcmp(attr->name, "job-sheets") || !strcmp(attr->name, "job-state-message") || !strcmp(attr->name, "job-state-reasons") || !strcmp(attr->name, "job-uri") || !strcmp(attr->name, "number-of-documents") || !strcmp(attr->name, "number-of-intervening-jobs") || !strcmp(attr->name, "output-device-assigned") || !strncmp(attr->name, "time-at-", 8)) { /* * Read-only attrs! */ send_ipp_status(con, IPP_ATTRIBUTES_NOT_SETTABLE, _("%s cannot be changed."), attr->name); attr2 = ippCopyAttribute(con->response, attr, 0); ippSetGroupTag(con->response, &attr2, IPP_TAG_UNSUPPORTED_GROUP); continue; } if (!strcmp(attr->name, "job-priority")) { /* * Change the job priority... */ if (attr->value_tag != IPP_TAG_INTEGER) { send_ipp_status(con, IPP_REQUEST_VALUE, _("Bad job-priority value.")); attr2 = ippCopyAttribute(con->response, attr, 0); ippSetGroupTag(con->response, &attr2, IPP_TAG_UNSUPPORTED_GROUP); } else if (job->state_value >= IPP_JOB_PROCESSING) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job is completed and cannot be changed.")); return; } else if (con->response->request.status.status_code == IPP_OK) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Setting job-priority to %d", attr->values[0].integer); cupsdSetJobPriority(job, attr->values[0].integer); check_jobs = 1; event |= CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED; } } else if (!strcmp(attr->name, "job-state")) { /* * Change the job state... */ if (attr->value_tag != IPP_TAG_ENUM) { send_ipp_status(con, IPP_REQUEST_VALUE, _("Bad job-state value.")); attr2 = ippCopyAttribute(con->response, attr, 0); ippSetGroupTag(con->response, &attr2, IPP_TAG_UNSUPPORTED_GROUP); } else { switch (attr->values[0].integer) { case IPP_JOB_PENDING : case IPP_JOB_HELD : if (job->state_value > IPP_JOB_HELD) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job state cannot be changed.")); return; } else if (con->response->request.status.status_code == IPP_OK) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Setting job-state to %d", attr->values[0].integer); cupsdSetJobState(job, (ipp_jstate_t)attr->values[0].integer, CUPSD_JOB_DEFAULT, "Job state changed by \"%s\"", username); check_jobs = 1; } break; case IPP_JOB_PROCESSING : case IPP_JOB_STOPPED : if (job->state_value != attr->values[0].integer) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job state cannot be changed.")); return; } break; case IPP_JOB_CANCELED : case IPP_JOB_ABORTED : case IPP_JOB_COMPLETED : if (job->state_value > IPP_JOB_PROCESSING) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Job state cannot be changed.")); return; } else if (con->response->request.status.status_code == IPP_OK) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Setting job-state to %d", attr->values[0].integer); cupsdSetJobState(job, (ipp_jstate_t)attr->values[0].integer, CUPSD_JOB_DEFAULT, "Job state changed by \"%s\"", username); check_jobs = 1; } break; } } } else if (con->response->request.status.status_code != IPP_OK) continue; else if ((attr2 = ippFindAttribute(job->attrs, attr->name, IPP_TAG_ZERO)) != NULL) { /* * Some other value; first free the old value... */ if (job->attrs->prev) job->attrs->prev->next = attr2->next; else job->attrs->attrs = attr2->next; if (job->attrs->last == attr2) job->attrs->last = job->attrs->prev; ippDeleteAttribute(NULL, attr2); /* * Then copy the attribute... */ ippCopyAttribute(job->attrs, attr, 0); /* * See if the job-name or job-hold-until is being changed. */ if (!strcmp(attr->name, "job-hold-until")) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Setting job-hold-until to %s", attr->values[0].string.text); cupsdSetJobHoldUntil(job, attr->values[0].string.text, 0); if (!strcmp(attr->values[0].string.text, "no-hold")) { cupsdReleaseJob(job); check_jobs = 1; } else cupsdSetJobState(job, IPP_JOB_HELD, CUPSD_JOB_DEFAULT, "Job held by \"%s\".", username); event |= CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE; } } else if (attr->value_tag == IPP_TAG_DELETEATTR) { /* * Delete the attribute... */ if ((attr2 = ippFindAttribute(job->attrs, attr->name, IPP_TAG_ZERO)) != NULL) { if (job->attrs->prev) job->attrs->prev->next = attr2->next; else job->attrs->attrs = attr2->next; if (attr2 == job->attrs->last) job->attrs->last = job->attrs->prev; ippDeleteAttribute(NULL, attr2); event |= CUPSD_EVENT_JOB_CONFIG_CHANGED; } } else { /* * Add new option by copying it... */ ippCopyAttribute(job->attrs, attr, 0); event |= CUPSD_EVENT_JOB_CONFIG_CHANGED; } } /* * Save the job... */ job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); /* * Send events as needed... */ if (event & CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED) cupsdAddEvent(CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED, cupsdFindDest(job->dest), job, "Job priority changed by user."); if (event & CUPSD_EVENT_JOB_STATE) cupsdAddEvent(CUPSD_EVENT_JOB_STATE, cupsdFindDest(job->dest), job, job->state_value == IPP_JOB_HELD ? "Job held by user." : "Job restarted by user."); if (event & CUPSD_EVENT_JOB_CONFIG_CHANGED) cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED, cupsdFindDest(job->dest), job, "Job options changed by user."); /* * Start jobs if possible... */ if (check_jobs) cupsdCheckJobs(); } /* * 'set_printer_attrs()' - Set printer attributes. */ static void set_printer_attrs(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer */ { http_status_t status; /* Policy status */ cups_ptype_t dtype; /* Destination type (printer/class) */ cupsd_printer_t *printer; /* Printer/class */ ipp_attribute_t *attr; /* Printer attribute */ int changed = 0; /* Was anything changed? */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "set_printer_attrs(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } /* * Return a list of attributes that can be set via Set-Printer-Attributes. */ if ((attr = ippFindAttribute(con->request, "printer-location", IPP_TAG_TEXT)) != NULL) { cupsdSetString(&printer->location, attr->values[0].string.text); changed = 1; } if ((attr = ippFindAttribute(con->request, "printer-geo-location", IPP_TAG_URI)) != NULL && !strncmp(attr->values[0].string.text, "geo:", 4)) { cupsdSetString(&printer->geo_location, attr->values[0].string.text); changed = 1; } if ((attr = ippFindAttribute(con->request, "printer-organization", IPP_TAG_TEXT)) != NULL) { cupsdSetString(&printer->organization, attr->values[0].string.text); changed = 1; } if ((attr = ippFindAttribute(con->request, "printer-organizational-unit", IPP_TAG_TEXT)) != NULL) { cupsdSetString(&printer->organizational_unit, attr->values[0].string.text); changed = 1; } if ((attr = ippFindAttribute(con->request, "printer-info", IPP_TAG_TEXT)) != NULL) { cupsdSetString(&printer->info, attr->values[0].string.text); changed = 1; } /* * Update the printer attributes and return... */ if (changed) { printer->config_time = time(NULL); cupsdSetPrinterAttrs(printer); cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); cupsdAddEvent(CUPSD_EVENT_PRINTER_CONFIG, printer, NULL, "Printer \"%s\" description or location changed by \"%s\".", printer->name, get_username(con)); cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" description or location changed by \"%s\".", printer->name, get_username(con)); } con->response->request.status.status_code = IPP_OK; } /* * 'set_printer_defaults()' - Set printer default options from a request. */ static int /* O - 1 on success, 0 on failure */ set_printer_defaults( cupsd_client_t *con, /* I - Client connection */ cupsd_printer_t *printer) /* I - Printer */ { int i; /* Looping var */ ipp_attribute_t *attr; /* Current attribute */ size_t namelen; /* Length of attribute name */ char name[256], /* New attribute name */ value[256]; /* String version of integer attrs */ for (attr = con->request->attrs; attr; attr = attr->next) { /* * Skip non-printer attributes... */ if (attr->group_tag != IPP_TAG_PRINTER || !attr->name) continue; cupsdLogMessage(CUPSD_LOG_DEBUG2, "set_printer_defaults: %s", attr->name); if (!strcmp(attr->name, "job-sheets-default")) { /* * Only allow keywords and names... */ if (attr->value_tag != IPP_TAG_NAME && attr->value_tag != IPP_TAG_KEYWORD) continue; /* * Only allow job-sheets-default to be set when running without a * system high classification level... */ if (Classification) continue; cupsdSetString(&printer->job_sheets[0], attr->values[0].string.text); if (attr->num_values > 1) cupsdSetString(&printer->job_sheets[1], attr->values[1].string.text); else cupsdSetString(&printer->job_sheets[1], "none"); } else if (!strcmp(attr->name, "requesting-user-name-allowed")) { cupsdFreeStrings(&(printer->users)); printer->deny_users = 0; if (attr->value_tag == IPP_TAG_NAME && (attr->num_values > 1 || strcmp(attr->values[0].string.text, "all"))) { for (i = 0; i < attr->num_values; i ++) cupsdAddString(&(printer->users), attr->values[i].string.text); } } else if (!strcmp(attr->name, "requesting-user-name-denied")) { cupsdFreeStrings(&(printer->users)); printer->deny_users = 1; if (attr->value_tag == IPP_TAG_NAME && (attr->num_values > 1 || strcmp(attr->values[0].string.text, "none"))) { for (i = 0; i < attr->num_values; i ++) cupsdAddString(&(printer->users), attr->values[i].string.text); } } else if (!strcmp(attr->name, "job-quota-period")) { if (attr->value_tag != IPP_TAG_INTEGER) continue; cupsdLogMessage(CUPSD_LOG_DEBUG, "Setting job-quota-period to %d...", attr->values[0].integer); cupsdFreeQuotas(printer); printer->quota_period = attr->values[0].integer; } else if (!strcmp(attr->name, "job-k-limit")) { if (attr->value_tag != IPP_TAG_INTEGER) continue; cupsdLogMessage(CUPSD_LOG_DEBUG, "Setting job-k-limit to %d...", attr->values[0].integer); cupsdFreeQuotas(printer); printer->k_limit = attr->values[0].integer; } else if (!strcmp(attr->name, "job-page-limit")) { if (attr->value_tag != IPP_TAG_INTEGER) continue; cupsdLogMessage(CUPSD_LOG_DEBUG, "Setting job-page-limit to %d...", attr->values[0].integer); cupsdFreeQuotas(printer); printer->page_limit = attr->values[0].integer; } else if (!strcmp(attr->name, "printer-op-policy")) { cupsd_policy_t *p; /* Policy */ if (attr->value_tag != IPP_TAG_NAME) continue; if ((p = cupsdFindPolicy(attr->values[0].string.text)) != NULL) { cupsdLogMessage(CUPSD_LOG_DEBUG, "Setting printer-op-policy to \"%s\"...", attr->values[0].string.text); cupsdSetString(&printer->op_policy, attr->values[0].string.text); printer->op_policy_ptr = p; } else { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Unknown printer-op-policy \"%s\"."), attr->values[0].string.text); return (0); } } else if (!strcmp(attr->name, "printer-error-policy")) { if (attr->value_tag != IPP_TAG_NAME && attr->value_tag != IPP_TAG_KEYWORD) continue; if (strcmp(attr->values[0].string.text, "retry-current-job") && ((printer->type & CUPS_PRINTER_CLASS) || (strcmp(attr->values[0].string.text, "abort-job") && strcmp(attr->values[0].string.text, "retry-job") && strcmp(attr->values[0].string.text, "stop-printer")))) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Unknown printer-error-policy \"%s\"."), attr->values[0].string.text); return (0); } cupsdLogMessage(CUPSD_LOG_DEBUG, "Setting printer-error-policy to \"%s\"...", attr->values[0].string.text); cupsdSetString(&printer->error_policy, attr->values[0].string.text); } /* * Skip any other non-default attributes... */ namelen = strlen(attr->name); if (namelen < 9 || strcmp(attr->name + namelen - 8, "-default") || namelen > (sizeof(name) - 1) || attr->num_values != 1) continue; /* * OK, anything else must be a user-defined default... */ strlcpy(name, attr->name, sizeof(name)); name[namelen - 8] = '\0'; /* Strip "-default" */ switch (attr->value_tag) { case IPP_TAG_DELETEATTR : printer->num_options = cupsRemoveOption(name, printer->num_options, &(printer->options)); cupsdLogMessage(CUPSD_LOG_DEBUG, "Deleting %s", attr->name); break; case IPP_TAG_NAME : case IPP_TAG_TEXT : case IPP_TAG_KEYWORD : case IPP_TAG_URI : printer->num_options = cupsAddOption(name, attr->values[0].string.text, printer->num_options, &(printer->options)); cupsdLogMessage(CUPSD_LOG_DEBUG, "Setting %s to \"%s\"...", attr->name, attr->values[0].string.text); break; case IPP_TAG_BOOLEAN : printer->num_options = cupsAddOption(name, attr->values[0].boolean ? "true" : "false", printer->num_options, &(printer->options)); cupsdLogMessage(CUPSD_LOG_DEBUG, "Setting %s to %s...", attr->name, attr->values[0].boolean ? "true" : "false"); break; case IPP_TAG_INTEGER : case IPP_TAG_ENUM : sprintf(value, "%d", attr->values[0].integer); printer->num_options = cupsAddOption(name, value, printer->num_options, &(printer->options)); cupsdLogMessage(CUPSD_LOG_DEBUG, "Setting %s to %s...", attr->name, value); break; case IPP_TAG_RANGE : sprintf(value, "%d-%d", attr->values[0].range.lower, attr->values[0].range.upper); printer->num_options = cupsAddOption(name, value, printer->num_options, &(printer->options)); cupsdLogMessage(CUPSD_LOG_DEBUG, "Setting %s to %s...", attr->name, value); break; case IPP_TAG_RESOLUTION : sprintf(value, "%dx%d%s", attr->values[0].resolution.xres, attr->values[0].resolution.yres, attr->values[0].resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); printer->num_options = cupsAddOption(name, value, printer->num_options, &(printer->options)); cupsdLogMessage(CUPSD_LOG_DEBUG, "Setting %s to %s...", attr->name, value); break; default : /* Do nothing for other values */ break; } } return (1); } /* * 'start_printer()' - Start a printer. */ static void start_printer(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI */ { int i; /* Temporary variable */ http_status_t status; /* Policy status */ cups_ptype_t dtype; /* Destination type (printer/class) */ cupsd_printer_t *printer; /* Printer data */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_printer(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } /* * Start the printer... */ printer->state_message[0] = '\0'; cupsdStartPrinter(printer, 1); if (dtype & CUPS_PRINTER_CLASS) cupsdLogMessage(CUPSD_LOG_INFO, "Class \"%s\" started by \"%s\".", printer->name, get_username(con)); else cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" started by \"%s\".", printer->name, get_username(con)); cupsdCheckJobs(); /* * Check quotas... */ if ((i = check_quotas(con, printer)) < 0) { send_ipp_status(con, IPP_NOT_POSSIBLE, _("Quota limit reached.")); return; } else if (i == 0) { send_ipp_status(con, IPP_NOT_AUTHORIZED, _("Not allowed to print.")); return; } /* * Everything was ok, so return OK status... */ con->response->request.status.status_code = IPP_OK; } /* * 'stop_printer()' - Stop a printer. */ static void stop_printer(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI */ { http_status_t status; /* Policy status */ cups_ptype_t dtype; /* Destination type (printer/class) */ cupsd_printer_t *printer; /* Printer data */ ipp_attribute_t *attr; /* printer-state-message attribute */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "stop_printer(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } /* * Stop the printer... */ if ((attr = ippFindAttribute(con->request, "printer-state-message", IPP_TAG_TEXT)) == NULL) strlcpy(printer->state_message, "Paused", sizeof(printer->state_message)); else { strlcpy(printer->state_message, attr->values[0].string.text, sizeof(printer->state_message)); } cupsdStopPrinter(printer, 1); if (dtype & CUPS_PRINTER_CLASS) cupsdLogMessage(CUPSD_LOG_INFO, "Class \"%s\" stopped by \"%s\".", printer->name, get_username(con)); else cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" stopped by \"%s\".", printer->name, get_username(con)); /* * Everything was ok, so return OK status... */ con->response->request.status.status_code = IPP_OK; } /* * 'url_encode_attr()' - URL-encode a string attribute. */ static void url_encode_attr(ipp_attribute_t *attr, /* I - Attribute */ char *buffer,/* I - String buffer */ size_t bufsize)/* I - Size of buffer */ { int i; /* Looping var */ char *bufptr, /* Pointer into buffer */ *bufend; /* End of buffer */ strlcpy(buffer, attr->name, bufsize); bufptr = buffer + strlen(buffer); bufend = buffer + bufsize - 1; for (i = 0; i < attr->num_values; i ++) { if (bufptr >= bufend) break; if (i) *bufptr++ = ','; else *bufptr++ = '='; if (bufptr >= bufend) break; *bufptr++ = '\''; bufptr = url_encode_string(attr->values[i].string.text, bufptr, (size_t)(bufend - bufptr + 1)); if (bufptr >= bufend) break; *bufptr++ = '\''; } *bufptr = '\0'; } /* * 'url_encode_string()' - URL-encode a string. */ static char * /* O - End of string */ url_encode_string(const char *s, /* I - String */ char *buffer, /* I - String buffer */ size_t bufsize) /* I - Size of buffer */ { char *bufptr, /* Pointer into buffer */ *bufend; /* End of buffer */ static const char *hex = "0123456789ABCDEF"; /* Hex digits */ bufptr = buffer; bufend = buffer + bufsize - 1; while (*s && bufptr < bufend) { if (*s == ' ' || *s == '%' || *s == '+') { if (bufptr >= (bufend - 2)) break; *bufptr++ = '%'; *bufptr++ = hex[(*s >> 4) & 15]; *bufptr++ = hex[*s & 15]; s ++; } else if (*s == '\'' || *s == '\\') { if (bufptr >= (bufend - 1)) break; *bufptr++ = '\\'; *bufptr++ = *s++; } else *bufptr++ = *s++; } *bufptr = '\0'; return (bufptr); } /* * 'user_allowed()' - See if a user is allowed to print to a queue. */ static int /* O - 0 if not allowed, 1 if allowed */ user_allowed(cupsd_printer_t *p, /* I - Printer or class */ const char *username) /* I - Username */ { struct passwd *pw; /* User password data */ char baseuser[256], /* Base username */ *baseptr, /* Pointer to "@" in base username */ *name; /* Current user name */ if (cupsArrayCount(p->users) == 0) return (1); if (!strcmp(username, "root")) return (1); if (strchr(username, '@')) { /* * Strip @REALM for username check... */ strlcpy(baseuser, username, sizeof(baseuser)); if ((baseptr = strchr(baseuser, '@')) != NULL) *baseptr = '\0'; username = baseuser; } pw = getpwnam(username); endpwent(); for (name = (char *)cupsArrayFirst(p->users); name; name = (char *)cupsArrayNext(p->users)) { if (name[0] == '@') { /* * Check group membership... */ if (cupsdCheckGroup(username, pw, name + 1)) break; } else if (name[0] == '#') { /* * Check UUID... */ if (cupsdCheckGroup(username, pw, name)) break; } else if (!_cups_strcasecmp(username, name)) break; } return ((name != NULL) != p->deny_users); } /* * 'validate_job()' - Validate printer options and destination. */ static void validate_job(cupsd_client_t *con, /* I - Client connection */ ipp_attribute_t *uri) /* I - Printer URI */ { http_status_t status; /* Policy status */ ipp_attribute_t *attr; /* Current attribute */ #ifdef HAVE_SSL ipp_attribute_t *auth_info; /* auth-info attribute */ #endif /* HAVE_SSL */ ipp_attribute_t *format, /* Document-format attribute */ *name; /* Job-name attribute */ cups_ptype_t dtype; /* Destination type (printer/class) */ char super[MIME_MAX_SUPER], /* Supertype of file */ type[MIME_MAX_TYPE]; /* Subtype of file */ cupsd_printer_t *printer; /* Printer */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "validate_job(%p[%d], %s)", con, con->number, uri->values[0].string.text); /* * OK, see if the client is sending the document compressed - CUPS * doesn't support compression yet... */ if ((attr = ippFindAttribute(con->request, "compression", IPP_TAG_KEYWORD)) != NULL) { if (strcmp(attr->values[0].string.text, "none") #ifdef HAVE_LIBZ && strcmp(attr->values[0].string.text, "gzip") #endif /* HAVE_LIBZ */ ) { send_ipp_status(con, IPP_ATTRIBUTES, _("Unsupported 'compression' value \"%s\"."), attr->values[0].string.text); ippAddString(con->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_KEYWORD, "compression", NULL, attr->values[0].string.text); return; } } /* * Is it a format we support? */ if ((format = ippFindAttribute(con->request, "document-format", IPP_TAG_MIMETYPE)) != NULL) { if (sscanf(format->values[0].string.text, "%15[^/]/%255[^;]", super, type) != 2) { send_ipp_status(con, IPP_BAD_REQUEST, _("Bad 'document-format' value \"%s\"."), format->values[0].string.text); return; } if ((strcmp(super, "application") || strcmp(type, "octet-stream")) && !mimeType(MimeDatabase, super, type)) { cupsdLogMessage(CUPSD_LOG_INFO, "Hint: Do you have the raw file printing rules enabled?"); send_ipp_status(con, IPP_DOCUMENT_FORMAT, _("Unsupported 'document-format' value \"%s\"."), format->values[0].string.text); ippAddString(con->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_MIMETYPE, "document-format", NULL, format->values[0].string.text); return; } } /* * Is the job-name valid? */ if ((name = ippFindAttribute(con->request, "job-name", IPP_TAG_ZERO)) != NULL) { int bad_name = 0; /* Is the job-name value bad? */ if ((name->value_tag != IPP_TAG_NAME && name->value_tag != IPP_TAG_NAMELANG) || name->num_values != 1) { bad_name = 1; } else { /* * Validate that job-name conforms to RFC 5198 (Network Unicode) and * IPP Everywhere requirements for "name" values... */ const unsigned char *nameptr; /* Pointer into "job-name" attribute */ for (nameptr = (unsigned char *)name->values[0].string.text; *nameptr; nameptr ++) { if (*nameptr < ' ' && *nameptr != '\t') break; else if (*nameptr == 0x7f) break; else if ((*nameptr & 0xe0) == 0xc0) { if ((nameptr[1] & 0xc0) != 0x80) break; nameptr ++; } else if ((*nameptr & 0xf0) == 0xe0) { if ((nameptr[1] & 0xc0) != 0x80 || (nameptr[2] & 0xc0) != 0x80) break; nameptr += 2; } else if ((*nameptr & 0xf8) == 0xf0) { if ((nameptr[1] & 0xc0) != 0x80 || (nameptr[2] & 0xc0) != 0x80 || (nameptr[3] & 0xc0) != 0x80) break; nameptr += 3; } else if (*nameptr & 0x80) break; } if (*nameptr) bad_name = 1; } if (bad_name) { if (StrictConformance) { send_ipp_status(con, IPP_ATTRIBUTES, _("Unsupported 'job-name' value.")); ippCopyAttribute(con->response, name, 0); return; } else { cupsdLogMessage(CUPSD_LOG_WARN, "Unsupported 'job-name' value, deleting from request."); ippDeleteAttribute(con->request, name); } } } /* * Is the destination valid? */ if (!cupsdValidateDest(uri->values[0].string.text, &dtype, &printer)) { /* * Bad URI... */ send_ipp_status(con, IPP_NOT_FOUND, _("The printer or class does not exist.")); return; } /* * Check policy... */ #ifdef HAVE_SSL auth_info = ippFindAttribute(con->request, "auth-info", IPP_TAG_TEXT); #endif /* HAVE_SSL */ if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK) { send_http_error(con, status, printer); return; } else if (printer->num_auth_info_required == 1 && !strcmp(printer->auth_info_required[0], "negotiate") && !con->username[0]) { send_http_error(con, HTTP_UNAUTHORIZED, printer); return; } #ifdef HAVE_SSL else if (auth_info && !con->http->tls && !httpAddrLocalhost(con->http->hostaddr)) { /* * Require encryption of auth-info over non-local connections... */ send_http_error(con, HTTP_UPGRADE_REQUIRED, printer); return; } #endif /* HAVE_SSL */ /* * Everything was ok, so return OK status... */ con->response->request.status.status_code = IPP_OK; } /* * 'validate_name()' - Make sure the printer name only contains valid chars. */ static int /* O - 0 if name is no good, 1 if good */ validate_name(const char *name) /* I - Name to check */ { const char *ptr; /* Pointer into name */ /* * Scan the whole name... */ for (ptr = name; *ptr; ptr ++) if ((*ptr > 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/' || *ptr == '#') return (0); /* * All the characters are good; validate the length, too... */ return ((ptr - name) < 128); } /* * 'validate_user()' - Validate the user for the request. */ static int /* O - 1 if permitted, 0 otherwise */ validate_user(cupsd_job_t *job, /* I - Job */ cupsd_client_t *con, /* I - Client connection */ const char *owner, /* I - Owner of job/resource */ char *username, /* O - Authenticated username */ size_t userlen) /* I - Length of username */ { cupsd_printer_t *printer; /* Printer for job */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "validate_user(job=%d, con=%d, owner=\"%s\", username=%p, userlen=" CUPS_LLFMT ")", job->id, con ? con->number : 0, owner ? owner : "(null)", username, CUPS_LLCAST userlen); /* * Validate input... */ if (!con || !owner || !username || userlen <= 0) return (0); /* * Get the best authenticated username that is available. */ strlcpy(username, get_username(con), userlen); /* * Check the username against the owner... */ printer = cupsdFindDest(job->dest); return (cupsdCheckPolicy(printer ? printer->op_policy_ptr : DefaultPolicyPtr, con, owner) == HTTP_OK); } cups-2.2.7/scheduler/job.c000664 000765 000024 00000432471 13255074424 016062 0ustar00msweetstaff000000 000000 /* * Job management routines for the CUPS scheduler. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #include #include #include #ifdef __APPLE__ # include # ifdef HAVE_IOKIT_PWR_MGT_IOPMLIBPRIVATE_H # include # endif /* HAVE_IOKIT_PWR_MGT_IOPMLIBPRIVATE_H */ #endif /* __APPLE__ */ /* * Design Notes for Job Management * ------------------------------- * * STATE CHANGES * * pending Do nothing/check jobs * pending-held Send SIGTERM to filters and backend * processing Do nothing/start job * stopped Send SIGKILL to filters and backend * canceled Send SIGTERM to filters and backend * aborted Finalize * completed Finalize * * Finalize clears the printer <-> job association, deletes the status * buffer, closes all of the pipes, etc. and doesn't get run until all of * the print processes are finished. * * UNLOADING OF JOBS (cupsdUnloadCompletedJobs) * * We unload the job attributes when they are not needed to reduce overall * memory consumption. We don't unload jobs where job->state_value < * IPP_JOB_STOPPED, job->printer != NULL, or job->access_time is recent. * * STARTING OF JOBS (start_job) * * When a job is started, a status buffer, several pipes, a security * profile, and a backend process are created for the life of that job. * These are shared for every file in a job. For remote print jobs, the * IPP backend is provided with every file in the job and no filters are * run. * * The job->printer member tracks which printer is printing a job, which * can be different than the destination in job->dest for classes. The * printer object also has a job pointer to track which job is being * printed. * * PRINTING OF JOB FILES (cupsdContinueJob) * * Each file in a job is filtered by 0 or more programs. After getting the * list of filters needed and the total cost, the job is either passed or * put back to the processing state until the current FilterLevel comes down * enough to allow printing. * * If we can print, we build a string for the print options and run each of * the filters, piping the output from one into the next. * * JOB STATUS UPDATES (update_job) * * The update_job function gets called whenever there are pending messages * on the status pipe. These generally are updates to the marker-*, * printer-state-message, or printer-state-reasons attributes. On EOF, * finalize_job is called to clean up. * * FINALIZING JOBS (finalize_job) * * When all filters and the backend are done, we set the job state to * completed (no errors), aborted (filter errors or abort-job policy), * pending-held (auth required or retry-job policy), or pending * (retry-current-job or stop-printer policies) as appropriate. * * Then we close the pipes and free the status buffers and profiles. * * JOB FILE COMPLETION (process_children in main.c) * * For multiple-file jobs, process_children (in main.c) sees that all * filters have exited and calls in to print the next file if there are * more files in the job, otherwise it waits for the backend to exit and * update_job to do the cleanup. */ /* * Local globals... */ static mime_filter_t gziptoany_filter = { NULL, /* Source type */ NULL, /* Destination type */ 0, /* Cost */ "gziptoany" /* Filter program to run */ }; /* * Local functions... */ static int compare_active_jobs(void *first, void *second, void *data); static int compare_completed_jobs(void *first, void *second, void *data); static int compare_jobs(void *first, void *second, void *data); static void dump_job_history(cupsd_job_t *job); static void finalize_job(cupsd_job_t *job, int set_job_state); static void free_job_history(cupsd_job_t *job); static char *get_options(cupsd_job_t *job, int banner_page, char *copies, size_t copies_size, char *title, size_t title_size); static size_t ipp_length(ipp_t *ipp); static void load_job_cache(const char *filename); static void load_next_job_id(const char *filename); static void load_request_root(void); static void remove_job_files(cupsd_job_t *job); static void remove_job_history(cupsd_job_t *job); static void set_time(cupsd_job_t *job, const char *name); static void start_job(cupsd_job_t *job, cupsd_printer_t *printer); static void stop_job(cupsd_job_t *job, cupsd_jobaction_t action); static void unload_job(cupsd_job_t *job); static void update_job(cupsd_job_t *job); static void update_job_attrs(cupsd_job_t *job, int do_message); /* * 'cupsdAddJob()' - Add a new job to the job queue. */ cupsd_job_t * /* O - New job record */ cupsdAddJob(int priority, /* I - Job priority */ const char *dest) /* I - Job destination */ { cupsd_job_t *job; /* New job record */ if ((job = calloc(sizeof(cupsd_job_t), 1)) == NULL) return (NULL); job->id = NextJobId ++; job->priority = priority; job->back_pipes[0] = -1; job->back_pipes[1] = -1; job->print_pipes[0] = -1; job->print_pipes[1] = -1; job->side_pipes[0] = -1; job->side_pipes[1] = -1; job->status_pipes[0] = -1; job->status_pipes[1] = -1; cupsdSetString(&job->dest, dest); /* * Add the new job to the "all jobs" and "active jobs" lists... */ cupsArrayAdd(Jobs, job); cupsArrayAdd(ActiveJobs, job); return (job); } /* * 'cupsdCancelJobs()' - Cancel all jobs for the given destination/user. */ void cupsdCancelJobs(const char *dest, /* I - Destination to cancel */ const char *username, /* I - Username or NULL */ int purge) /* I - Purge jobs? */ { cupsd_job_t *job; /* Current job */ for (job = (cupsd_job_t *)cupsArrayFirst(Jobs); job; job = (cupsd_job_t *)cupsArrayNext(Jobs)) { if ((!job->dest || !job->username) && !cupsdLoadJob(job)) continue; if ((!dest || !strcmp(job->dest, dest)) && (!username || !strcmp(job->username, username))) { /* * Cancel all jobs matching this destination/user... */ if (purge) cupsdSetJobState(job, IPP_JOB_CANCELED, CUPSD_JOB_PURGE, "Job purged by user."); else if (job->state_value < IPP_JOB_CANCELED) cupsdSetJobState(job, IPP_JOB_CANCELED, CUPSD_JOB_DEFAULT, "Job canceled by user."); } } } /* * 'cupsdCheckJobs()' - Check the pending jobs and start any if the destination * is available. */ void cupsdCheckJobs(void) { cupsd_job_t *job; /* Current job in queue */ cupsd_printer_t *printer, /* Printer destination */ *pclass; /* Printer class destination */ ipp_attribute_t *attr; /* Job attribute */ time_t curtime; /* Current time */ const char *reasons; /* job-state-reasons value */ curtime = time(NULL); cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCheckJobs: %d active jobs, sleeping=%d, ac-power=%d, reload=%d, curtime=%ld", cupsArrayCount(ActiveJobs), Sleeping, ACPower, NeedReload, (long)curtime); for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs); job; job = (cupsd_job_t *)cupsArrayNext(ActiveJobs)) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCheckJobs: Job %d - dest=\"%s\", printer=%p, " "state=%d, cancel_time=%ld, hold_until=%ld, kill_time=%ld, " "pending_cost=%d, pending_timeout=%ld", job->id, job->dest, job->printer, job->state_value, (long)job->cancel_time, (long)job->hold_until, (long)job->kill_time, job->pending_cost, (long)job->pending_timeout); /* * Kill jobs if they are unresponsive... */ if (job->kill_time && job->kill_time <= curtime) { if (!job->completed) cupsdLogJob(job, CUPSD_LOG_ERROR, "Stopping unresponsive job."); stop_job(job, CUPSD_JOB_FORCE); continue; } /* * Cancel stuck jobs... */ if (job->cancel_time && job->cancel_time <= curtime) { int cancel_after; /* job-cancel-after value */ attr = ippFindAttribute(job->attrs, "job-cancel-after", IPP_TAG_INTEGER); cancel_after = attr ? ippGetInteger(attr, 0) : MaxJobTime; if (job->completed) cupsdSetJobState(job, IPP_JOB_CANCELED, CUPSD_JOB_FORCE, "Marking stuck job as completed after %d seconds.", cancel_after); else cupsdSetJobState(job, IPP_JOB_CANCELED, CUPSD_JOB_DEFAULT, "Canceling stuck job after %d seconds.", cancel_after); continue; } /* * Start held jobs if they are ready... */ if (job->state_value == IPP_JOB_HELD && job->hold_until && job->hold_until < curtime) { if (job->pending_timeout) { /* * This job is pending; check that we don't have an active Send-Document * operation in progress on any of the client connections, then timeout * the job so we can start printing... */ cupsd_client_t *con; /* Current client connection */ for (con = (cupsd_client_t *)cupsArrayFirst(Clients); con; con = (cupsd_client_t *)cupsArrayNext(Clients)) if (con->request && con->request->request.op.operation_id == IPP_SEND_DOCUMENT) break; if (con) continue; if (cupsdTimeoutJob(job)) continue; } cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT, "Job submission timed out."); } /* * Continue jobs that are waiting on the FilterLimit... */ if (job->pending_cost > 0 && ((FilterLevel + job->pending_cost) < FilterLimit || FilterLevel == 0)) cupsdContinueJob(job); /* * Skip jobs that where held-on-create */ reasons = ippGetString(job->reasons, 0, NULL); if (reasons && !strcmp(reasons, "job-held-on-create")) { /* * Check whether the printer is still holding new jobs... */ printer = cupsdFindDest(job->dest); if (printer->holding_new_jobs) continue; ippSetString(job->attrs, &job->reasons, 0, "none"); } /* * Start pending jobs if the destination is available... */ if (job->state_value == IPP_JOB_PENDING && !NeedReload && (!Sleeping || ACPower) && !DoingShutdown && !job->printer) { printer = cupsdFindDest(job->dest); pclass = NULL; while (printer && (printer->type & CUPS_PRINTER_CLASS)) { /* * If the class is remote, just pass it to the remote server... */ pclass = printer; if (pclass->state == IPP_PRINTER_STOPPED) printer = NULL; else if (pclass->type & CUPS_PRINTER_REMOTE) break; else printer = cupsdFindAvailablePrinter(printer->name); } if (!printer && !pclass) { /* * Whoa, the printer and/or class for this destination went away; * cancel the job... */ cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_PURGE, "Job aborted because the destination printer/class " "has gone away."); } else if (printer) { /* * See if the printer is available or remote and not printing a job; * if so, start the job... */ if (pclass) { /* * Add/update a job-printer-uri-actual attribute for this job * so that we know which printer actually printed the job... */ if ((attr = ippFindAttribute(job->attrs, "job-printer-uri-actual", IPP_TAG_URI)) != NULL) ippSetString(job->attrs, &attr, 0, printer->uri); else ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri-actual", NULL, printer->uri); job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); } if (!printer->job && printer->state == IPP_PRINTER_IDLE) { /* * Start the job... */ cupsArraySave(ActiveJobs); start_job(job, printer); cupsArrayRestore(ActiveJobs); } } } } } /* * 'cupsdCleanJobs()' - Clean out old jobs. */ void cupsdCleanJobs(void) { cupsd_job_t *job; /* Current job */ time_t curtime; /* Current time */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCleanJobs: MaxJobs=%d, JobHistory=%d, JobFiles=%d", MaxJobs, JobHistory, JobFiles); if (MaxJobs <= 0 && JobHistory == INT_MAX && JobFiles == INT_MAX) return; curtime = time(NULL); JobHistoryUpdate = 0; for (job = (cupsd_job_t *)cupsArrayFirst(Jobs); job; job = (cupsd_job_t *)cupsArrayNext(Jobs)) { if (job->state_value >= IPP_JOB_CANCELED && !job->printer) { /* * Expire old jobs (or job files)... */ if ((MaxJobs > 0 && cupsArrayCount(Jobs) >= MaxJobs) || (job->history_time && job->history_time <= curtime)) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Removing from history."); cupsdDeleteJob(job, CUPSD_JOB_PURGE); } else if (job->file_time && job->file_time <= curtime) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Removing document files."); cupsdLogJob(job, CUPSD_LOG_DEBUG2, "curtime=%ld, job->file_time=%ld", (long)curtime, (long)job->file_time); remove_job_files(job); cupsdMarkDirty(CUPSD_DIRTY_JOBS); if (job->history_time < JobHistoryUpdate || !JobHistoryUpdate) JobHistoryUpdate = job->history_time; } else { if (job->history_time < JobHistoryUpdate || !JobHistoryUpdate) JobHistoryUpdate = job->history_time; if (job->file_time < JobHistoryUpdate || !JobHistoryUpdate) JobHistoryUpdate = job->file_time; } } } cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCleanJobs: JobHistoryUpdate=%ld", (long)JobHistoryUpdate); } /* * 'cupsdContinueJob()' - Continue printing with the next file in a job. */ void cupsdContinueJob(cupsd_job_t *job) /* I - Job */ { int i; /* Looping var */ int slot; /* Pipe slot */ cups_array_t *filters = NULL,/* Filters for job */ *prefilters; /* Filters with prefilters */ mime_filter_t *filter, /* Current filter */ *prefilter, /* Prefilter */ port_monitor; /* Port monitor filter */ char scheme[255]; /* Device URI scheme */ ipp_attribute_t *attr; /* Current attribute */ const char *ptr, /* Pointer into value */ *abort_message; /* Abort message */ ipp_jstate_t abort_state = IPP_JOB_STOPPED; /* New job state on abort */ struct stat backinfo; /* Backend file information */ int backroot; /* Run backend as root? */ int pid; /* Process ID of new filter process */ int banner_page; /* 1 if banner page, 0 otherwise */ int filterfds[2][2] = { { -1, -1 }, { -1, -1 } }; /* Pipes used between filters */ int envc; /* Number of environment variables */ struct stat fileinfo; /* Job file information */ int argc = 0; /* Number of arguments */ char **argv = NULL, /* Filter command-line arguments */ filename[1024], /* Job filename */ command[1024], /* Full path to command */ jobid[255], /* Job ID string */ title[IPP_MAX_NAME], /* Job title string */ copies[255], /* # copies string */ *options, /* Options string */ *envp[MAX_ENV + 21], /* Environment variables */ charset[255], /* CHARSET env variable */ class_name[255],/* CLASS env variable */ classification[1024], /* CLASSIFICATION env variable */ content_type[1024], /* CONTENT_TYPE env variable */ device_uri[1024], /* DEVICE_URI env variable */ final_content_type[1024] = "", /* FINAL_CONTENT_TYPE env variable */ lang[255], /* LANG env variable */ #ifdef __APPLE__ apple_language[255], /* APPLE_LANGUAGE env variable */ #endif /* __APPLE__ */ auth_info_required[255], /* AUTH_INFO_REQUIRED env variable */ ppd[1024], /* PPD env variable */ printer_info[255], /* PRINTER_INFO env variable */ printer_location[255], /* PRINTER_LOCATION env variable */ printer_name[255], /* PRINTER env variable */ *printer_state_reasons = NULL, /* PRINTER_STATE_REASONS env var */ rip_max_cache[255]; /* RIP_MAX_CACHE env variable */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdContinueJob(job=%p(%d)): current_file=%d, num_files=%d", job, job->id, job->current_file, job->num_files); /* * Figure out what filters are required to convert from * the source to the destination type... */ FilterLevel -= job->cost; job->cost = 0; job->pending_cost = 0; memset(job->filters, 0, sizeof(job->filters)); if (job->printer->raw) { /* * Remote jobs and raw queues go directly to the printer without * filtering... */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "Sending job to queue tagged as raw..."); } else { /* * Local jobs get filtered... */ mime_type_t *dst = job->printer->filetype; /* Destination file type */ snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id, job->current_file + 1); if (stat(filename, &fileinfo)) fileinfo.st_size = 0; if (job->retry_as_raster) { /* * Need to figure out whether the printer supports image/pwg-raster or * image/urf, and use the corresponding type... */ char type[MIME_MAX_TYPE]; /* MIME media type for printer */ snprintf(type, sizeof(type), "%s/image/urf", job->printer->name); if ((dst = mimeType(MimeDatabase, "printer", type)) == NULL) { snprintf(type, sizeof(type), "%s/image/pwg-raster", job->printer->name); dst = mimeType(MimeDatabase, "printer", type); } if (dst) cupsdLogJob(job, CUPSD_LOG_DEBUG, "Retrying job as \"%s\".", strchr(dst->type, '/') + 1); else cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to retry job using a supported raster format."); } filters = mimeFilter2(MimeDatabase, job->filetypes[job->current_file], (size_t)fileinfo.st_size, dst, &(job->cost)); if (!filters) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to convert file %d to printable format.", job->current_file); abort_message = "Aborting job because it cannot be printed."; abort_state = IPP_JOB_ABORTED; ippSetString(job->attrs, &job->reasons, 0, "document-unprintable-error"); goto abort_job; } /* * Figure out the final content type... */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "%d filters for job:", cupsArrayCount(filters)); for (filter = (mime_filter_t *)cupsArrayFirst(filters); filter; filter = (mime_filter_t *)cupsArrayNext(filters)) cupsdLogJob(job, CUPSD_LOG_DEBUG, "%s (%s/%s to %s/%s, cost %d)", filter->filter, filter->src ? filter->src->super : "???", filter->src ? filter->src->type : "???", filter->dst ? filter->dst->super : "???", filter->dst ? filter->dst->type : "???", filter->cost); if (!job->printer->remote) { for (filter = (mime_filter_t *)cupsArrayLast(filters); filter && filter->dst; filter = (mime_filter_t *)cupsArrayPrev(filters)) if (strcmp(filter->dst->super, "printer") || strcmp(filter->dst->type, job->printer->name)) break; if (filter && filter->dst) { if ((ptr = strchr(filter->dst->type, '/')) != NULL) snprintf(final_content_type, sizeof(final_content_type), "FINAL_CONTENT_TYPE=%s", ptr + 1); else snprintf(final_content_type, sizeof(final_content_type), "FINAL_CONTENT_TYPE=%s/%s", filter->dst->super, filter->dst->type); } else snprintf(final_content_type, sizeof(final_content_type), "FINAL_CONTENT_TYPE=printer/%s", job->printer->name); } /* * Remove NULL ("-") filters... */ for (filter = (mime_filter_t *)cupsArrayFirst(filters); filter; filter = (mime_filter_t *)cupsArrayNext(filters)) if (!strcmp(filter->filter, "-")) cupsArrayRemove(filters, filter); if (cupsArrayCount(filters) == 0) { cupsArrayDelete(filters); filters = NULL; } /* * If this printer has any pre-filters, insert the required pre-filter * in the filters array... */ if (job->printer->prefiltertype && filters) { prefilters = cupsArrayNew(NULL, NULL); for (filter = (mime_filter_t *)cupsArrayFirst(filters); filter; filter = (mime_filter_t *)cupsArrayNext(filters)) { if ((prefilter = mimeFilterLookup(MimeDatabase, filter->src, job->printer->prefiltertype))) { cupsArrayAdd(prefilters, prefilter); job->cost += prefilter->cost; } cupsArrayAdd(prefilters, filter); } cupsArrayDelete(filters); filters = prefilters; } } /* * Set a minimum cost of 100 for all jobs so that FilterLimit * works with raw queues and other low-cost paths. */ if (job->cost < 100) job->cost = 100; /* * See if the filter cost is too high... */ if ((FilterLevel + job->cost) > FilterLimit && FilterLevel > 0 && FilterLimit > 0) { /* * Don't print this job quite yet... */ cupsArrayDelete(filters); cupsdLogJob(job, CUPSD_LOG_INFO, "Holding because filter limit has been reached."); cupsdLogJob(job, CUPSD_LOG_DEBUG2, "cupsdContinueJob: file=%d, cost=%d, level=%d, limit=%d", job->current_file, job->cost, FilterLevel, FilterLimit); job->pending_cost = job->cost; job->cost = 0; return; } FilterLevel += job->cost; /* * Add decompression/raw filter as needed... */ if ((job->compressions[job->current_file] && (!job->printer->remote || job->num_files == 1)) || (!job->printer->remote && job->printer->raw && job->num_files > 1)) { /* * Add gziptoany filter to the front of the list... */ if (!filters) filters = cupsArrayNew(NULL, NULL); if (!cupsArrayInsert(filters, &gziptoany_filter)) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Unable to add decompression filter - %s", strerror(errno)); cupsArrayDelete(filters); abort_message = "Stopping job because the scheduler ran out of memory."; goto abort_job; } } /* * Add port monitor, if any... */ if (job->printer->port_monitor) { /* * Add port monitor to the end of the list... */ if (!filters) filters = cupsArrayNew(NULL, NULL); port_monitor.src = NULL; port_monitor.dst = NULL; port_monitor.cost = 0; snprintf(port_monitor.filter, sizeof(port_monitor.filter), "%s/monitor/%s", ServerBin, job->printer->port_monitor); if (!cupsArrayAdd(filters, &port_monitor)) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Unable to add port monitor - %s", strerror(errno)); abort_message = "Stopping job because the scheduler ran out of memory."; goto abort_job; } } /* * Make sure we don't go over the "MAX_FILTERS" limit... */ if (cupsArrayCount(filters) > MAX_FILTERS) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Too many filters (%d > %d), unable to print.", cupsArrayCount(filters), MAX_FILTERS); abort_message = "Aborting job because it needs too many filters to print."; abort_state = IPP_JOB_ABORTED; ippSetString(job->attrs, &job->reasons, 0, "document-unprintable-error"); goto abort_job; } /* * Determine if we are printing a banner page or not... */ if (job->job_sheets == NULL) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "No job-sheets attribute."); if ((job->job_sheets = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_ZERO)) != NULL) cupsdLogJob(job, CUPSD_LOG_DEBUG, "... but someone added one without setting job_sheets."); } else if (job->job_sheets->num_values == 1) cupsdLogJob(job, CUPSD_LOG_DEBUG, "job-sheets=%s", job->job_sheets->values[0].string.text); else cupsdLogJob(job, CUPSD_LOG_DEBUG, "job-sheets=%s,%s", job->job_sheets->values[0].string.text, job->job_sheets->values[1].string.text); if (job->printer->type & CUPS_PRINTER_REMOTE) banner_page = 0; else if (job->job_sheets == NULL) banner_page = 0; else if (_cups_strcasecmp(job->job_sheets->values[0].string.text, "none") != 0 && job->current_file == 0) banner_page = 1; else if (job->job_sheets->num_values > 1 && _cups_strcasecmp(job->job_sheets->values[1].string.text, "none") != 0 && job->current_file == (job->num_files - 1)) banner_page = 1; else banner_page = 0; if ((options = get_options(job, banner_page, copies, sizeof(copies), title, sizeof(title))) == NULL) { abort_message = "Stopping job because the scheduler ran out of memory."; goto abort_job; } /* * Build the command-line arguments for the filters. Each filter * has 6 or 7 arguments: * * argv[0] = printer * argv[1] = job ID * argv[2] = username * argv[3] = title * argv[4] = # copies * argv[5] = options * argv[6] = filename (optional; normally stdin) * * This allows legacy printer drivers that use the old System V * printing interface to be used by CUPS. * * For remote jobs, we send all of the files in the argument list. */ if (job->printer->remote) argc = 6 + job->num_files; else argc = 7; if ((argv = calloc((size_t)argc + 1, sizeof(char *))) == NULL) { cupsdLogMessage(CUPSD_LOG_DEBUG, "Unable to allocate argument array - %s", strerror(errno)); abort_message = "Stopping job because the scheduler ran out of memory."; goto abort_job; } sprintf(jobid, "%d", job->id); argv[0] = job->printer->name; argv[1] = jobid; argv[2] = job->username; argv[3] = title; argv[4] = copies; argv[5] = options; if (job->printer->remote && job->num_files > 1) { for (i = 0; i < job->num_files; i ++) { snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id, i + 1); argv[6 + i] = strdup(filename); } } else { snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id, job->current_file + 1); argv[6] = strdup(filename); } for (i = 0; argv[i]; i ++) cupsdLogJob(job, CUPSD_LOG_DEBUG, "argv[%d]=\"%s\"", i, argv[i]); /* * Create environment variable strings for the filters... */ attr = ippFindAttribute(job->attrs, "attributes-natural-language", IPP_TAG_LANGUAGE); #ifdef __APPLE__ strlcpy(apple_language, "APPLE_LANGUAGE=", sizeof(apple_language)); _cupsAppleLanguage(attr->values[0].string.text, apple_language + 15, sizeof(apple_language) - 15); #endif /* __APPLE__ */ switch (strlen(attr->values[0].string.text)) { default : /* * This is an unknown or badly formatted language code; use * the POSIX locale... */ strlcpy(lang, "LANG=C", sizeof(lang)); break; case 2 : /* * Just the language code (ll)... */ snprintf(lang, sizeof(lang), "LANG=%s.UTF-8", attr->values[0].string.text); break; case 5 : /* * Language and country code (ll-cc)... */ snprintf(lang, sizeof(lang), "LANG=%c%c_%c%c.UTF-8", attr->values[0].string.text[0], attr->values[0].string.text[1], toupper(attr->values[0].string.text[3] & 255), toupper(attr->values[0].string.text[4] & 255)); break; } if ((attr = ippFindAttribute(job->attrs, "document-format", IPP_TAG_MIMETYPE)) != NULL && (ptr = strstr(attr->values[0].string.text, "charset=")) != NULL) snprintf(charset, sizeof(charset), "CHARSET=%s", ptr + 8); else strlcpy(charset, "CHARSET=utf-8", sizeof(charset)); snprintf(content_type, sizeof(content_type), "CONTENT_TYPE=%s/%s", job->filetypes[job->current_file]->super, job->filetypes[job->current_file]->type); snprintf(device_uri, sizeof(device_uri), "DEVICE_URI=%s", job->printer->device_uri); snprintf(ppd, sizeof(ppd), "PPD=%s/ppd/%s.ppd", ServerRoot, job->printer->name); snprintf(printer_info, sizeof(printer_name), "PRINTER_INFO=%s", job->printer->info ? job->printer->info : ""); snprintf(printer_location, sizeof(printer_name), "PRINTER_LOCATION=%s", job->printer->location ? job->printer->location : ""); snprintf(printer_name, sizeof(printer_name), "PRINTER=%s", job->printer->name); if (job->printer->num_reasons > 0) { char *psrptr; /* Pointer into PRINTER_STATE_REASONS */ size_t psrlen; /* Size of PRINTER_STATE_REASONS */ for (psrlen = 22, i = 0; i < job->printer->num_reasons; i ++) psrlen += strlen(job->printer->reasons[i]) + 1; if ((printer_state_reasons = malloc(psrlen)) != NULL) { /* * All of these strcpy's are safe because we allocated the psr string... */ strlcpy(printer_state_reasons, "PRINTER_STATE_REASONS=", psrlen); for (psrptr = printer_state_reasons + 22, i = 0; i < job->printer->num_reasons; i ++) { if (i) *psrptr++ = ','; strlcpy(psrptr, job->printer->reasons[i], psrlen - (size_t)(psrptr - printer_state_reasons)); psrptr += strlen(psrptr); } } } snprintf(rip_max_cache, sizeof(rip_max_cache), "RIP_MAX_CACHE=%s", RIPCache); if (job->printer->num_auth_info_required == 1) snprintf(auth_info_required, sizeof(auth_info_required), "AUTH_INFO_REQUIRED=%s", job->printer->auth_info_required[0]); else if (job->printer->num_auth_info_required == 2) snprintf(auth_info_required, sizeof(auth_info_required), "AUTH_INFO_REQUIRED=%s,%s", job->printer->auth_info_required[0], job->printer->auth_info_required[1]); else if (job->printer->num_auth_info_required == 3) snprintf(auth_info_required, sizeof(auth_info_required), "AUTH_INFO_REQUIRED=%s,%s,%s", job->printer->auth_info_required[0], job->printer->auth_info_required[1], job->printer->auth_info_required[2]); else if (job->printer->num_auth_info_required == 4) snprintf(auth_info_required, sizeof(auth_info_required), "AUTH_INFO_REQUIRED=%s,%s,%s,%s", job->printer->auth_info_required[0], job->printer->auth_info_required[1], job->printer->auth_info_required[2], job->printer->auth_info_required[3]); else strlcpy(auth_info_required, "AUTH_INFO_REQUIRED=none", sizeof(auth_info_required)); envc = cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0]))); envp[envc ++] = charset; envp[envc ++] = lang; #ifdef __APPLE__ envp[envc ++] = apple_language; #endif /* __APPLE__ */ envp[envc ++] = ppd; envp[envc ++] = rip_max_cache; envp[envc ++] = content_type; envp[envc ++] = device_uri; envp[envc ++] = printer_info; envp[envc ++] = printer_location; envp[envc ++] = printer_name; envp[envc ++] = printer_state_reasons ? printer_state_reasons : "PRINTER_STATE_REASONS=none"; envp[envc ++] = banner_page ? "CUPS_FILETYPE=job-sheet" : "CUPS_FILETYPE=document"; if (final_content_type[0]) envp[envc ++] = final_content_type; if (Classification && !banner_page) { if ((attr = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME)) == NULL) snprintf(classification, sizeof(classification), "CLASSIFICATION=%s", Classification); else if (attr->num_values > 1 && strcmp(attr->values[1].string.text, "none") != 0) snprintf(classification, sizeof(classification), "CLASSIFICATION=%s", attr->values[1].string.text); else snprintf(classification, sizeof(classification), "CLASSIFICATION=%s", attr->values[0].string.text); envp[envc ++] = classification; } if (job->dtype & CUPS_PRINTER_CLASS) { snprintf(class_name, sizeof(class_name), "CLASS=%s", job->dest); envp[envc ++] = class_name; } envp[envc ++] = auth_info_required; for (i = 0; i < (int)(sizeof(job->auth_env) / sizeof(job->auth_env[0])); i ++) if (job->auth_env[i]) envp[envc ++] = job->auth_env[i]; else break; if (job->auth_uid) envp[envc ++] = job->auth_uid; envp[envc] = NULL; for (i = 0; i < envc; i ++) if (!strncmp(envp[i], "AUTH_", 5)) cupsdLogJob(job, CUPSD_LOG_DEBUG, "envp[%d]=\"AUTH_%c****\"", i, envp[i][5]); else if (strncmp(envp[i], "DEVICE_URI=", 11)) cupsdLogJob(job, CUPSD_LOG_DEBUG, "envp[%d]=\"%s\"", i, envp[i]); else cupsdLogJob(job, CUPSD_LOG_DEBUG, "envp[%d]=\"DEVICE_URI=%s\"", i, job->printer->sanitized_device_uri); if (job->printer->remote) job->current_file = job->num_files; else job->current_file ++; /* * Now create processes for all of the filters... */ for (i = 0, slot = 0, filter = (mime_filter_t *)cupsArrayFirst(filters); filter; i ++, filter = (mime_filter_t *)cupsArrayNext(filters)) { if (filter->filter[0] != '/') snprintf(command, sizeof(command), "%s/filter/%s", ServerBin, filter->filter); else strlcpy(command, filter->filter, sizeof(command)); if (i < (cupsArrayCount(filters) - 1)) { if (cupsdOpenPipe(filterfds[slot])) { abort_message = "Stopping job because the scheduler could not create " "the filter pipes."; goto abort_job; } } else { if (job->current_file == 1 || (job->printer->pc && job->printer->pc->single_file)) { if (strncmp(job->printer->device_uri, "file:", 5) != 0) { if (cupsdOpenPipe(job->print_pipes)) { abort_message = "Stopping job because the scheduler could not " "create the backend pipes."; goto abort_job; } } else { job->print_pipes[0] = -1; if (!strcmp(job->printer->device_uri, "file:/dev/null") || !strcmp(job->printer->device_uri, "file:///dev/null")) job->print_pipes[1] = -1; else { if (!strncmp(job->printer->device_uri, "file:/dev/", 10)) job->print_pipes[1] = open(job->printer->device_uri + 5, O_WRONLY | O_EXCL); else if (!strncmp(job->printer->device_uri, "file:///dev/", 12)) job->print_pipes[1] = open(job->printer->device_uri + 7, O_WRONLY | O_EXCL); else if (!strncmp(job->printer->device_uri, "file:///", 8)) job->print_pipes[1] = open(job->printer->device_uri + 7, O_WRONLY | O_CREAT | O_TRUNC, 0600); else job->print_pipes[1] = open(job->printer->device_uri + 5, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (job->print_pipes[1] < 0) { abort_message = "Stopping job because the scheduler could not " "open the output file."; goto abort_job; } fcntl(job->print_pipes[1], F_SETFD, fcntl(job->print_pipes[1], F_GETFD) | FD_CLOEXEC); } } } filterfds[slot][0] = job->print_pipes[0]; filterfds[slot][1] = job->print_pipes[1]; } pid = cupsdStartProcess(command, argv, envp, filterfds[!slot][0], filterfds[slot][1], job->status_pipes[1], job->back_pipes[0], job->side_pipes[0], 0, job->profile, job, job->filters + i); cupsdClosePipe(filterfds[!slot]); if (pid == 0) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to start filter \"%s\" - %s.", filter->filter, strerror(errno)); abort_message = "Stopping job because the scheduler could not execute a " "filter."; goto abort_job; } cupsdLogJob(job, CUPSD_LOG_INFO, "Started filter %s (PID %d)", command, pid); if (argv[6]) { free(argv[6]); argv[6] = NULL; } slot = !slot; } cupsArrayDelete(filters); filters = NULL; /* * Finally, pipe the final output into a backend process if needed... */ if (strncmp(job->printer->device_uri, "file:", 5) != 0) { if (job->current_file == 1 || job->printer->remote || (job->printer->pc && job->printer->pc->single_file)) { sscanf(job->printer->device_uri, "%254[^:]", scheme); snprintf(command, sizeof(command), "%s/backend/%s", ServerBin, scheme); /* * See if the backend needs to run as root... */ if (RunUser) backroot = 0; else if (stat(command, &backinfo)) backroot = 0; else backroot = !(backinfo.st_mode & (S_IWGRP | S_IRWXO)); argv[0] = job->printer->sanitized_device_uri; filterfds[slot][0] = -1; filterfds[slot][1] = -1; pid = cupsdStartProcess(command, argv, envp, filterfds[!slot][0], filterfds[slot][1], job->status_pipes[1], job->back_pipes[1], job->side_pipes[1], backroot, job->bprofile, job, &(job->backend)); if (pid == 0) { abort_message = "Stopping job because the sheduler could not execute " "the backend."; goto abort_job; } else { cupsdLogJob(job, CUPSD_LOG_INFO, "Started backend %s (PID %d)", command, pid); } } if (job->current_file == job->num_files || (job->printer->pc && job->printer->pc->single_file)) cupsdClosePipe(job->print_pipes); if (job->current_file == job->num_files) { cupsdClosePipe(job->back_pipes); cupsdClosePipe(job->side_pipes); close(job->status_pipes[1]); job->status_pipes[1] = -1; } } else { filterfds[slot][0] = -1; filterfds[slot][1] = -1; if (job->current_file == job->num_files || (job->printer->pc && job->printer->pc->single_file)) cupsdClosePipe(job->print_pipes); if (job->current_file == job->num_files) { close(job->status_pipes[1]); job->status_pipes[1] = -1; } } cupsdClosePipe(filterfds[slot]); for (i = 6; i < argc; i ++) if (argv[i]) free(argv[i]); free(argv); if (printer_state_reasons) free(printer_state_reasons); cupsdAddSelect(job->status_buffer->fd, (cupsd_selfunc_t)update_job, NULL, job); cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job, "Job #%d started.", job->id); return; /* * If we get here, we need to abort the current job and close out all * files and pipes... */ abort_job: FilterLevel -= job->cost; job->cost = 0; for (slot = 0; slot < 2; slot ++) cupsdClosePipe(filterfds[slot]); cupsArrayDelete(filters); if (argv) { for (i = 6; i < argc; i ++) if (argv[i]) free(argv[i]); } if (printer_state_reasons) free(printer_state_reasons); cupsdClosePipe(job->print_pipes); cupsdClosePipe(job->back_pipes); cupsdClosePipe(job->side_pipes); cupsdRemoveSelect(job->status_pipes[0]); cupsdClosePipe(job->status_pipes); cupsdStatBufDelete(job->status_buffer); job->status_buffer = NULL; /* * Update the printer and job state. */ cupsdSetJobState(job, abort_state, CUPSD_JOB_DEFAULT, "%s", abort_message); cupsdSetPrinterState(job->printer, IPP_PRINTER_IDLE, 0); update_job_attrs(job, 0); if (job->history) free_job_history(job); cupsArrayRemove(PrintingJobs, job); /* * Clear the printer <-> job association... */ job->printer->job = NULL; job->printer = NULL; } /* * 'cupsdDeleteJob()' - Free all memory used by a job. */ void cupsdDeleteJob(cupsd_job_t *job, /* I - Job */ cupsd_jobaction_t action)/* I - Action */ { int i; /* Looping var */ if (job->printer) finalize_job(job, 1); if (action == CUPSD_JOB_PURGE) remove_job_history(job); cupsdClearString(&job->username); cupsdClearString(&job->dest); for (i = 0; i < (int)(sizeof(job->auth_env) / sizeof(job->auth_env[0])); i ++) cupsdClearString(job->auth_env + i); cupsdClearString(&job->auth_uid); if (action == CUPSD_JOB_PURGE) remove_job_files(job); else if (job->num_files > 0) { free(job->compressions); free(job->filetypes); job->num_files = 0; } if (job->history) free_job_history(job); unload_job(job); cupsArrayRemove(Jobs, job); cupsArrayRemove(ActiveJobs, job); cupsArrayRemove(PrintingJobs, job); free(job); } /* * 'cupsdFreeAllJobs()' - Free all jobs from memory. */ void cupsdFreeAllJobs(void) { cupsd_job_t *job; /* Current job */ if (!Jobs) return; cupsdHoldSignals(); cupsdStopAllJobs(CUPSD_JOB_FORCE, 0); cupsdSaveAllJobs(); for (job = (cupsd_job_t *)cupsArrayFirst(Jobs); job; job = (cupsd_job_t *)cupsArrayNext(Jobs)) cupsdDeleteJob(job, CUPSD_JOB_DEFAULT); cupsdReleaseSignals(); } /* * 'cupsdFindJob()' - Find the specified job. */ cupsd_job_t * /* O - Job data */ cupsdFindJob(int id) /* I - Job ID */ { cupsd_job_t key; /* Search key */ key.id = id; return ((cupsd_job_t *)cupsArrayFind(Jobs, &key)); } /* * 'cupsdGetCompletedJobs()'- Generate a completed jobs list. */ cups_array_t * /* O - Array of jobs */ cupsdGetCompletedJobs( cupsd_printer_t *p) /* I - Printer */ { cups_array_t *list; /* Array of jobs */ cupsd_job_t *job; /* Current job */ list = cupsArrayNew(compare_completed_jobs, NULL); for (job = (cupsd_job_t *)cupsArrayFirst(Jobs); job; job = (cupsd_job_t *)cupsArrayNext(Jobs)) if ((!p || !_cups_strcasecmp(p->name, job->dest)) && job->state_value >= IPP_JOB_STOPPED && job->completed_time) cupsArrayAdd(list, job); return (list); } /* * 'cupsdGetPrinterJobCount()' - Get the number of pending, processing, * or held jobs in a printer or class. */ int /* O - Job count */ cupsdGetPrinterJobCount( const char *dest) /* I - Printer or class name */ { int count; /* Job count */ cupsd_job_t *job; /* Current job */ for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs), count = 0; job; job = (cupsd_job_t *)cupsArrayNext(ActiveJobs)) if (job->dest && !_cups_strcasecmp(job->dest, dest)) count ++; return (count); } /* * 'cupsdGetUserJobCount()' - Get the number of pending, processing, * or held jobs for a user. */ int /* O - Job count */ cupsdGetUserJobCount( const char *username) /* I - Username */ { int count; /* Job count */ cupsd_job_t *job; /* Current job */ for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs), count = 0; job; job = (cupsd_job_t *)cupsArrayNext(ActiveJobs)) if (!_cups_strcasecmp(job->username, username)) count ++; return (count); } /* * 'cupsdLoadAllJobs()' - Load all jobs from disk. */ void cupsdLoadAllJobs(void) { char filename[1024]; /* Full filename of job.cache file */ struct stat fileinfo; /* Information on job.cache file */ cups_dir_t *dir; /* RequestRoot dir */ cups_dentry_t *dent; /* Entry in RequestRoot */ int load_cache = 1; /* Load the job.cache file? */ /* * Create the job arrays as needed... */ if (!Jobs) Jobs = cupsArrayNew(compare_jobs, NULL); if (!ActiveJobs) ActiveJobs = cupsArrayNew(compare_active_jobs, NULL); if (!PrintingJobs) PrintingJobs = cupsArrayNew(compare_jobs, NULL); /* * See whether the job.cache file is older than the RequestRoot directory... */ snprintf(filename, sizeof(filename), "%s/job.cache", CacheDir); if (stat(filename, &fileinfo)) { /* * No job.cache file... */ load_cache = 0; if (errno != ENOENT) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to get file information for \"%s\" - %s", filename, strerror(errno)); } else if ((dir = cupsDirOpen(RequestRoot)) == NULL) { /* * No spool directory... */ load_cache = 0; } else { while ((dent = cupsDirRead(dir)) != NULL) { if (strlen(dent->filename) >= 6 && dent->filename[0] == 'c' && dent->fileinfo.st_mtime > fileinfo.st_mtime) { /* * Job history file is newer than job.cache file... */ load_cache = 0; break; } } cupsDirClose(dir); } /* * Load the most recent source for job data... */ if (load_cache) { /* * Load the job.cache file... */ load_job_cache(filename); } else { /* * Load the job history files... */ load_request_root(); load_next_job_id(filename); } /* * Clean out old jobs as needed... */ if (MaxJobs > 0 && cupsArrayCount(Jobs) >= MaxJobs) cupsdCleanJobs(); } /* * 'cupsdLoadJob()' - Load a single job. */ int /* O - 1 on success, 0 on failure */ cupsdLoadJob(cupsd_job_t *job) /* I - Job */ { int i; /* Looping var */ char jobfile[1024]; /* Job filename */ cups_file_t *fp; /* Job file */ int fileid; /* Current file ID */ ipp_attribute_t *attr; /* Job attribute */ const char *dest; /* Destination name */ cupsd_printer_t *destptr; /* Pointer to destination */ mime_type_t **filetypes; /* New filetypes array */ int *compressions; /* New compressions array */ if (job->attrs) { if (job->state_value > IPP_JOB_STOPPED) job->access_time = time(NULL); return (1); } if ((job->attrs = ippNew()) == NULL) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Ran out of memory for job attributes."); return (0); } /* * Load job attributes... */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "Loading attributes..."); snprintf(jobfile, sizeof(jobfile), "%s/c%05d", RequestRoot, job->id); if ((fp = cupsdOpenConfFile(jobfile)) == NULL) goto error; if (ippReadIO(fp, (ipp_iocb_t)cupsFileRead, 1, NULL, job->attrs) != IPP_DATA) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to read job control file \"%s\".", jobfile); cupsFileClose(fp); goto error; } cupsFileClose(fp); /* * Copy attribute data to the job object... */ if (!ippFindAttribute(job->attrs, "time-at-creation", IPP_TAG_INTEGER)) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Missing or bad time-at-creation attribute in control file."); goto error; } if ((job->state = ippFindAttribute(job->attrs, "job-state", IPP_TAG_ENUM)) == NULL) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Missing or bad job-state attribute in control file."); goto error; } job->state_value = (ipp_jstate_t)job->state->values[0].integer; job->file_time = 0; job->history_time = 0; if ((attr = ippFindAttribute(job->attrs, "time-at-creation", IPP_TAG_INTEGER)) != NULL) job->creation_time = attr->values[0].integer; if (job->state_value >= IPP_JOB_CANCELED && (attr = ippFindAttribute(job->attrs, "time-at-completed", IPP_TAG_INTEGER)) != NULL) { job->completed_time = attr->values[0].integer; if (JobHistory < INT_MAX) job->history_time = attr->values[0].integer + JobHistory; else job->history_time = INT_MAX; if (job->history_time < time(NULL)) goto error; /* Expired, remove from history */ if (job->history_time < JobHistoryUpdate || !JobHistoryUpdate) JobHistoryUpdate = job->history_time; if (JobFiles < INT_MAX) job->file_time = attr->values[0].integer + JobFiles; else job->file_time = INT_MAX; cupsdLogJob(job, CUPSD_LOG_DEBUG2, "cupsdLoadJob: job->file_time=%ld, time-at-completed=%ld, JobFiles=%d", (long)job->file_time, (long)attr->values[0].integer, JobFiles); if (job->file_time < JobHistoryUpdate || !JobHistoryUpdate) JobHistoryUpdate = job->file_time; cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdLoadJob: JobHistoryUpdate=%ld", (long)JobHistoryUpdate); } if (!job->dest) { if ((attr = ippFindAttribute(job->attrs, "job-printer-uri", IPP_TAG_URI)) == NULL) { cupsdLogJob(job, CUPSD_LOG_ERROR, "No job-printer-uri attribute in control file."); goto error; } if ((dest = cupsdValidateDest(attr->values[0].string.text, &(job->dtype), &destptr)) == NULL) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to queue job for destination \"%s\".", attr->values[0].string.text); goto error; } cupsdSetString(&job->dest, dest); } else if ((destptr = cupsdFindDest(job->dest)) == NULL) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to queue job for destination \"%s\".", job->dest); goto error; } if ((job->reasons = ippFindAttribute(job->attrs, "job-state-reasons", IPP_TAG_KEYWORD)) == NULL) { const char *reason; /* job-state-reason keyword */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "Adding missing job-state-reasons attribute to control file."); switch (job->state_value) { default : case IPP_JOB_PENDING : if (destptr->state == IPP_PRINTER_STOPPED) reason = "printer-stopped"; else reason = "none"; break; case IPP_JOB_HELD : if ((attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_ZERO)) != NULL && (attr->value_tag == IPP_TAG_NAME || attr->value_tag == IPP_TAG_NAMELANG || attr->value_tag == IPP_TAG_KEYWORD) && strcmp(attr->values[0].string.text, "no-hold")) reason = "job-hold-until-specified"; else reason = "job-incoming"; break; case IPP_JOB_PROCESSING : reason = "job-printing"; break; case IPP_JOB_STOPPED : reason = "job-stopped"; break; case IPP_JOB_CANCELED : reason = "job-canceled-by-user"; break; case IPP_JOB_ABORTED : reason = "aborted-by-system"; break; case IPP_JOB_COMPLETED : reason = "job-completed-successfully"; break; } job->reasons = ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-state-reasons", NULL, reason); } else if (job->state_value == IPP_JOB_PENDING) { if (destptr->state == IPP_PRINTER_STOPPED) ippSetString(job->attrs, &job->reasons, 0, "printer-stopped"); else ippSetString(job->attrs, &job->reasons, 0, "none"); } job->impressions = ippFindAttribute(job->attrs, "job-impressions-completed", IPP_TAG_INTEGER); job->sheets = ippFindAttribute(job->attrs, "job-media-sheets-completed", IPP_TAG_INTEGER); job->job_sheets = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME); if (!job->impressions) job->impressions = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions-completed", 0); if (!job->priority) { if ((attr = ippFindAttribute(job->attrs, "job-priority", IPP_TAG_INTEGER)) == NULL) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Missing or bad job-priority attribute in control file."); goto error; } job->priority = attr->values[0].integer; } if (!job->username) { if ((attr = ippFindAttribute(job->attrs, "job-originating-user-name", IPP_TAG_NAME)) == NULL) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Missing or bad job-originating-user-name " "attribute in control file."); goto error; } cupsdSetString(&job->username, attr->values[0].string.text); } if (!job->name) { if ((attr = ippFindAttribute(job->attrs, "job-name", IPP_TAG_NAME)) != NULL) cupsdSetString(&job->name, attr->values[0].string.text); } /* * Set the job hold-until time and state... */ if (job->state_value == IPP_JOB_HELD) { if ((attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD)) == NULL) attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME); if (attr) cupsdSetJobHoldUntil(job, attr->values[0].string.text, CUPSD_JOB_DEFAULT); else { job->state->values[0].integer = IPP_JOB_PENDING; job->state_value = IPP_JOB_PENDING; } } else if (job->state_value == IPP_JOB_PROCESSING) { job->state->values[0].integer = IPP_JOB_PENDING; job->state_value = IPP_JOB_PENDING; } if ((attr = ippFindAttribute(job->attrs, "job-k-octets", IPP_TAG_INTEGER)) != NULL) job->koctets = attr->values[0].integer; if (!job->num_files) { /* * Find all the d##### files... */ for (fileid = 1; fileid < 10000; fileid ++) { snprintf(jobfile, sizeof(jobfile), "%s/d%05d-%03d", RequestRoot, job->id, fileid); if (access(jobfile, 0)) break; cupsdLogJob(job, CUPSD_LOG_DEBUG, "Auto-typing document file \"%s\"...", jobfile); if (fileid > job->num_files) { if (job->num_files == 0) { compressions = (int *)calloc((size_t)fileid, sizeof(int)); filetypes = (mime_type_t **)calloc((size_t)fileid, sizeof(mime_type_t *)); } else { compressions = (int *)realloc(job->compressions, sizeof(int) * (size_t)fileid); filetypes = (mime_type_t **)realloc(job->filetypes, sizeof(mime_type_t *) * (size_t)fileid); } if (compressions) job->compressions = compressions; if (filetypes) job->filetypes = filetypes; if (!compressions || !filetypes) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Ran out of memory for job file types."); ippDelete(job->attrs); job->attrs = NULL; if (job->compressions) { free(job->compressions); job->compressions = NULL; } if (job->filetypes) { free(job->filetypes); job->filetypes = NULL; } job->num_files = 0; return (0); } job->num_files = fileid; } job->filetypes[fileid - 1] = mimeFileType(MimeDatabase, jobfile, NULL, job->compressions + fileid - 1); if (!job->filetypes[fileid - 1]) job->filetypes[fileid - 1] = mimeType(MimeDatabase, "application", "vnd.cups-raw"); } } /* * Load authentication information as needed... */ if (job->state_value < IPP_JOB_STOPPED) { snprintf(jobfile, sizeof(jobfile), "%s/a%05d", RequestRoot, job->id); for (i = 0; i < (int)(sizeof(job->auth_env) / sizeof(job->auth_env[0])); i ++) cupsdClearString(job->auth_env + i); cupsdClearString(&job->auth_uid); if ((fp = cupsFileOpen(jobfile, "r")) != NULL) { int bytes, /* Size of auth data */ linenum = 1; /* Current line number */ char line[65536], /* Line from file */ *value, /* Value from line */ data[65536]; /* Decoded data */ if (cupsFileGets(fp, line, sizeof(line)) && !strcmp(line, "CUPSD-AUTH-V3")) { i = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { /* * Decode value... */ if (strcmp(line, "negotiate") && strcmp(line, "uid")) { bytes = sizeof(data); httpDecode64_2(data, &bytes, value); } /* * Assign environment variables... */ if (!strcmp(line, "uid")) { cupsdSetStringf(&job->auth_uid, "AUTH_UID=%s", value); continue; } else if (i >= (int)(sizeof(job->auth_env) / sizeof(job->auth_env[0]))) break; if (!strcmp(line, "username")) cupsdSetStringf(job->auth_env + i, "AUTH_USERNAME=%s", data); else if (!strcmp(line, "domain")) cupsdSetStringf(job->auth_env + i, "AUTH_DOMAIN=%s", data); else if (!strcmp(line, "password")) cupsdSetStringf(job->auth_env + i, "AUTH_PASSWORD=%s", data); else if (!strcmp(line, "negotiate")) cupsdSetStringf(job->auth_env + i, "AUTH_NEGOTIATE=%s", value); else continue; i ++; } } cupsFileClose(fp); } } job->access_time = time(NULL); return (1); /* * If we get here then something bad happened... */ error: ippDelete(job->attrs); job->attrs = NULL; remove_job_history(job); remove_job_files(job); return (0); } /* * 'cupsdMoveJob()' - Move the specified job to a different destination. */ void cupsdMoveJob(cupsd_job_t *job, /* I - Job */ cupsd_printer_t *p) /* I - Destination printer or class */ { ipp_attribute_t *attr; /* job-printer-uri attribute */ const char *olddest; /* Old destination */ cupsd_printer_t *oldp; /* Old pointer */ /* * Don't move completed jobs... */ if (job->state_value > IPP_JOB_STOPPED) return; /* * Get the old destination... */ olddest = job->dest; if (job->printer) oldp = job->printer; else oldp = cupsdFindDest(olddest); /* * Change the destination information... */ if (job->state_value > IPP_JOB_HELD) cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT, "Stopping job prior to move."); cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED, oldp, job, "Job #%d moved from %s to %s.", job->id, olddest, p->name); cupsdSetString(&job->dest, p->name); job->dtype = p->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE); if ((attr = ippFindAttribute(job->attrs, "job-printer-uri", IPP_TAG_URI)) != NULL) ippSetString(job->attrs, &attr, 0, p->uri); cupsdAddEvent(CUPSD_EVENT_JOB_STOPPED, p, job, "Job #%d moved from %s to %s.", job->id, olddest, p->name); job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); } /* * 'cupsdReleaseJob()' - Release the specified job. */ void cupsdReleaseJob(cupsd_job_t *job) /* I - Job */ { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReleaseJob(job=%p(%d))", job, job->id); if (job->state_value == IPP_JOB_HELD) { /* * Add trailing banner as needed... */ if (job->pending_timeout) cupsdTimeoutJob(job); cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT, "Job released by user."); } } /* * 'cupsdRestartJob()' - Restart the specified job. */ void cupsdRestartJob(cupsd_job_t *job) /* I - Job */ { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdRestartJob(job=%p(%d))", job, job->id); if (job->state_value == IPP_JOB_STOPPED || job->num_files) cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT, "Job restarted by user."); } /* * 'cupsdSaveAllJobs()' - Save a summary of all jobs to disk. */ void cupsdSaveAllJobs(void) { int i; /* Looping var */ cups_file_t *fp; /* job.cache file */ char filename[1024], /* job.cache filename */ temp[1024]; /* Temporary string */ cupsd_job_t *job; /* Current job */ time_t curtime; /* Current time */ struct tm *curdate; /* Current date */ snprintf(filename, sizeof(filename), "%s/job.cache", CacheDir); if ((fp = cupsdCreateConfFile(filename, ConfigFilePerm)) == NULL) return; cupsdLogMessage(CUPSD_LOG_INFO, "Saving job.cache..."); /* * Write a small header to the file... */ curtime = time(NULL); curdate = localtime(&curtime); strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate); cupsFilePuts(fp, "# Job cache file for " CUPS_SVERSION "\n"); cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp); cupsFilePrintf(fp, "NextJobId %d\n", NextJobId); /* * Write each job known to the system... */ for (job = (cupsd_job_t *)cupsArrayFirst(Jobs); job; job = (cupsd_job_t *)cupsArrayNext(Jobs)) { if (job->printer && job->printer->temporary) { /* * Don't save jobs on temporary printers... */ continue; } cupsFilePrintf(fp, "\n", job->id); cupsFilePrintf(fp, "State %d\n", job->state_value); cupsFilePrintf(fp, "Created %ld\n", (long)job->creation_time); if (job->completed_time) cupsFilePrintf(fp, "Completed %ld\n", (long)job->completed_time); cupsFilePrintf(fp, "Priority %d\n", job->priority); if (job->hold_until) cupsFilePrintf(fp, "HoldUntil %ld\n", (long)job->hold_until); cupsFilePrintf(fp, "Username %s\n", job->username); if (job->name) cupsFilePutConf(fp, "Name", job->name); cupsFilePrintf(fp, "Destination %s\n", job->dest); cupsFilePrintf(fp, "DestType %d\n", job->dtype); cupsFilePrintf(fp, "KOctets %d\n", job->koctets); cupsFilePrintf(fp, "NumFiles %d\n", job->num_files); for (i = 0; i < job->num_files; i ++) cupsFilePrintf(fp, "File %d %s/%s %d\n", i + 1, job->filetypes[i]->super, job->filetypes[i]->type, job->compressions[i]); cupsFilePuts(fp, "\n"); } cupsdCloseCreatedConfFile(fp, filename); } /* * 'cupsdSaveJob()' - Save a job to disk. */ void cupsdSaveJob(cupsd_job_t *job) /* I - Job */ { char filename[1024]; /* Job control filename */ cups_file_t *fp; /* Job file */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSaveJob(job=%p(%d)): job->attrs=%p", job, job->id, job->attrs); if (job->printer && job->printer->temporary) { /* * Don't save jobs on temporary printers... */ job->dirty = 0; return; } snprintf(filename, sizeof(filename), "%s/c%05d", RequestRoot, job->id); if ((fp = cupsdCreateConfFile(filename, ConfigFilePerm & 0600)) == NULL) return; fchown(cupsFileNumber(fp), RunUser, Group); job->attrs->state = IPP_IDLE; if (ippWriteIO(fp, (ipp_iocb_t)cupsFileWrite, 1, NULL, job->attrs) != IPP_DATA) { cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to write job control file."); cupsFileClose(fp); return; } if (!cupsdCloseCreatedConfFile(fp, filename)) { /* * Remove backup file and mark this job as clean... */ strlcat(filename, ".O", sizeof(filename)); unlink(filename); job->dirty = 0; } } /* * 'cupsdSetJobHoldUntil()' - Set the hold time for a job. */ void cupsdSetJobHoldUntil(cupsd_job_t *job, /* I - Job */ const char *when, /* I - When to resume */ int update)/* I - Update job-hold-until attr? */ { time_t curtime; /* Current time */ struct tm *curdate; /* Current date */ int hour; /* Hold hour */ int minute; /* Hold minute */ int second = 0; /* Hold second */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSetJobHoldUntil(job=%p(%d), when=\"%s\", update=%d)", job, job->id, when, update); if (update) { /* * Update the job-hold-until attribute... */ ipp_attribute_t *attr; /* job-hold-until attribute */ if ((attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD)) == NULL) attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME); if (attr) ippSetString(job->attrs, &attr, 0, when); else attr = ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-hold-until", NULL, when); if (attr) { if (isdigit(when[0] & 255)) attr->value_tag = IPP_TAG_NAME; else attr->value_tag = IPP_TAG_KEYWORD; job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); } } if (strcmp(when, "no-hold")) ippSetString(job->attrs, &job->reasons, 0, "job-hold-until-specified"); else ippSetString(job->attrs, &job->reasons, 0, "none"); /* * Update the hold time... */ job->cancel_time = 0; if (!strcmp(when, "indefinite") || !strcmp(when, "auth-info-required")) { /* * Hold indefinitely... */ job->hold_until = 0; if (MaxHoldTime > 0) job->cancel_time = time(NULL) + MaxHoldTime; } else if (!strcmp(when, "day-time")) { /* * Hold to 6am the next morning unless local time is < 6pm. */ curtime = time(NULL); curdate = localtime(&curtime); if (curdate->tm_hour < 18) job->hold_until = curtime; else job->hold_until = curtime + ((29 - curdate->tm_hour) * 60 + 59 - curdate->tm_min) * 60 + 60 - curdate->tm_sec; } else if (!strcmp(when, "evening") || !strcmp(when, "night")) { /* * Hold to 6pm unless local time is > 6pm or < 6am. */ curtime = time(NULL); curdate = localtime(&curtime); if (curdate->tm_hour < 6 || curdate->tm_hour >= 18) job->hold_until = curtime; else job->hold_until = curtime + ((17 - curdate->tm_hour) * 60 + 59 - curdate->tm_min) * 60 + 60 - curdate->tm_sec; } else if (!strcmp(when, "second-shift")) { /* * Hold to 4pm unless local time is > 4pm. */ curtime = time(NULL); curdate = localtime(&curtime); if (curdate->tm_hour >= 16) job->hold_until = curtime; else job->hold_until = curtime + ((15 - curdate->tm_hour) * 60 + 59 - curdate->tm_min) * 60 + 60 - curdate->tm_sec; } else if (!strcmp(when, "third-shift")) { /* * Hold to 12am unless local time is < 8am. */ curtime = time(NULL); curdate = localtime(&curtime); if (curdate->tm_hour < 8) job->hold_until = curtime; else job->hold_until = curtime + ((23 - curdate->tm_hour) * 60 + 59 - curdate->tm_min) * 60 + 60 - curdate->tm_sec; } else if (!strcmp(when, "weekend")) { /* * Hold to weekend unless we are in the weekend. */ curtime = time(NULL); curdate = localtime(&curtime); if (curdate->tm_wday == 0 || curdate->tm_wday == 6) job->hold_until = curtime; else job->hold_until = curtime + (((5 - curdate->tm_wday) * 24 + (17 - curdate->tm_hour)) * 60 + 59 - curdate->tm_min) * 60 + 60 - curdate->tm_sec; } else if (sscanf(when, "%d:%d:%d", &hour, &minute, &second) >= 2) { /* * Hold to specified GMT time (HH:MM or HH:MM:SS)... */ curtime = time(NULL); curdate = gmtime(&curtime); job->hold_until = curtime + ((hour - curdate->tm_hour) * 60 + minute - curdate->tm_min) * 60 + second - curdate->tm_sec; /* * Hold until next day as needed... */ if (job->hold_until < curtime) job->hold_until += 24 * 60 * 60; } cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSetJobHoldUntil: hold_until=%d", (int)job->hold_until); } /* * 'cupsdSetJobPriority()' - Set the priority of a job, moving it up/down in * the list as needed. */ void cupsdSetJobPriority( cupsd_job_t *job, /* I - Job ID */ int priority) /* I - New priority (0 to 100) */ { ipp_attribute_t *attr; /* Job attribute */ /* * Don't change completed jobs... */ if (job->state_value >= IPP_JOB_PROCESSING) return; /* * Set the new priority and re-add the job into the active list... */ cupsArrayRemove(ActiveJobs, job); job->priority = priority; if ((attr = ippFindAttribute(job->attrs, "job-priority", IPP_TAG_INTEGER)) != NULL) attr->values[0].integer = priority; else ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-priority", priority); cupsArrayAdd(ActiveJobs, job); job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); } /* * 'cupsdSetJobState()' - Set the state of the specified print job. */ void cupsdSetJobState( cupsd_job_t *job, /* I - Job to cancel */ ipp_jstate_t newstate, /* I - New job state */ cupsd_jobaction_t action, /* I - Action to take */ const char *message, /* I - Message to log */ ...) /* I - Additional arguments as needed */ { int i; /* Looping var */ ipp_jstate_t oldstate; /* Old state */ char filename[1024]; /* Job filename */ ipp_attribute_t *attr; /* Job attribute */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSetJobState(job=%p(%d), state=%d, newstate=%d, " "action=%d, message=\"%s\")", job, job->id, job->state_value, newstate, action, message ? message : "(null)"); /* * Make sure we have the job attributes... */ if (!cupsdLoadJob(job)) return; /* * Don't do anything if the state is unchanged and we aren't purging the * job... */ oldstate = job->state_value; if (newstate == oldstate && action != CUPSD_JOB_PURGE) return; /* * Stop any processes that are working on the current job... */ if (oldstate == IPP_JOB_PROCESSING) stop_job(job, action); /* * Set the new job state... */ job->state_value = newstate; if (job->state) job->state->values[0].integer = newstate; switch (newstate) { case IPP_JOB_PENDING : /* * Update job-hold-until as needed... */ if ((attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD)) == NULL) attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME); if (attr) { ippSetValueTag(job->attrs, &attr, IPP_TAG_KEYWORD); ippSetString(job->attrs, &attr, 0, "no-hold"); } default : break; case IPP_JOB_ABORTED : case IPP_JOB_CANCELED : case IPP_JOB_COMPLETED : set_time(job, "time-at-completed"); ippSetString(job->attrs, &job->reasons, 0, "processing-to-stop-point"); break; } /* * Log message as needed... */ if (message) { char buffer[2048]; /* Message buffer */ va_list ap; /* Pointer to additional arguments */ va_start(ap, message); vsnprintf(buffer, sizeof(buffer), message, ap); va_end(ap); if (newstate > IPP_JOB_STOPPED) cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job, "%s", buffer); else cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job, "%s", buffer); if (newstate == IPP_JOB_STOPPED || newstate == IPP_JOB_ABORTED) cupsdLogJob(job, CUPSD_LOG_ERROR, "%s", buffer); else cupsdLogJob(job, CUPSD_LOG_INFO, "%s", buffer); } /* * Handle post-state-change actions... */ switch (newstate) { case IPP_JOB_PROCESSING : /* * Add the job to the "printing" list... */ if (!cupsArrayFind(PrintingJobs, job)) cupsArrayAdd(PrintingJobs, job); /* * Set the processing time... */ set_time(job, "time-at-processing"); case IPP_JOB_PENDING : case IPP_JOB_HELD : case IPP_JOB_STOPPED : /* * Make sure the job is in the active list... */ if (!cupsArrayFind(ActiveJobs, job)) cupsArrayAdd(ActiveJobs, job); /* * Save the job state to disk... */ job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); break; case IPP_JOB_ABORTED : case IPP_JOB_CANCELED : case IPP_JOB_COMPLETED : if (newstate == IPP_JOB_CANCELED) { /* * Remove the job from the active list if there are no processes still * running for it... */ for (i = 0; job->filters[i] < 0; i++); if (!job->filters[i] && job->backend <= 0) cupsArrayRemove(ActiveJobs, job); } else { /* * Otherwise just remove the job from the active list immediately... */ cupsArrayRemove(ActiveJobs, job); } /* * Expire job subscriptions since the job is now "completed"... */ cupsdExpireSubscriptions(NULL, job); #ifdef __APPLE__ /* * If we are going to sleep and the PrintingJobs count is now 0, allow the * sleep to happen immediately... */ if (Sleeping && cupsArrayCount(PrintingJobs) == 0) cupsdAllowSleep(); #endif /* __APPLE__ */ /* * Remove any authentication data... */ snprintf(filename, sizeof(filename), "%s/a%05d", RequestRoot, job->id); if (cupsdRemoveFile(filename) && errno != ENOENT) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to remove authentication cache: %s", strerror(errno)); for (i = 0; i < (int)(sizeof(job->auth_env) / sizeof(job->auth_env[0])); i ++) cupsdClearString(job->auth_env + i); cupsdClearString(&job->auth_uid); /* * Remove the print file for good if we aren't preserving jobs or * files... */ if (!JobHistory || !JobFiles || action == CUPSD_JOB_PURGE) remove_job_files(job); if (JobHistory && action != CUPSD_JOB_PURGE) { /* * Save job state info... */ job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); } else if (!job->printer) { /* * Delete the job immediately if not actively printing... */ cupsdDeleteJob(job, CUPSD_JOB_PURGE); job = NULL; } break; } /* * Finalize the job immediately if we forced things... */ if (action >= CUPSD_JOB_FORCE && job && job->printer) finalize_job(job, 0); /* * Update the server "busy" state... */ cupsdSetBusyState(0); } /* * 'cupsdStopAllJobs()' - Stop all print jobs. */ void cupsdStopAllJobs( cupsd_jobaction_t action, /* I - Action */ int kill_delay) /* I - Number of seconds before we kill */ { cupsd_job_t *job; /* Current job */ DEBUG_puts("cupsdStopAllJobs()"); for (job = (cupsd_job_t *)cupsArrayFirst(PrintingJobs); job; job = (cupsd_job_t *)cupsArrayNext(PrintingJobs)) { if (job->completed) { cupsdSetJobState(job, IPP_JOB_COMPLETED, CUPSD_JOB_FORCE, NULL); } else { if (kill_delay) job->kill_time = time(NULL) + kill_delay; cupsdSetJobState(job, IPP_JOB_PENDING, action, NULL); } } } /* * 'cupsdUnloadCompletedJobs()' - Flush completed job history from memory. */ void cupsdUnloadCompletedJobs(void) { cupsd_job_t *job; /* Current job */ time_t expire; /* Expiration time */ expire = time(NULL) - 60; for (job = (cupsd_job_t *)cupsArrayFirst(Jobs); job; job = (cupsd_job_t *)cupsArrayNext(Jobs)) if (job->attrs && job->state_value >= IPP_JOB_STOPPED && !job->printer && job->access_time < expire) { if (job->dirty) cupsdSaveJob(job); if (!job->dirty) unload_job(job); } } /* * 'cupsdUpdateJobs()' - Update the history/file files for all jobs. */ void cupsdUpdateJobs(void) { cupsd_job_t *job; /* Current job */ time_t curtime; /* Current time */ ipp_attribute_t *attr; /* time-at-completed attribute */ curtime = time(NULL); JobHistoryUpdate = 0; for (job = (cupsd_job_t *)cupsArrayFirst(Jobs); job; job = (cupsd_job_t *)cupsArrayNext(Jobs)) { if (job->state_value >= IPP_JOB_CANCELED && (attr = ippFindAttribute(job->attrs, "time-at-completed", IPP_TAG_INTEGER)) != NULL) { /* * Update history/file expiration times... */ if (JobHistory < INT_MAX) job->history_time = attr->values[0].integer + JobHistory; else job->history_time = INT_MAX; if (job->history_time < curtime) { cupsdDeleteJob(job, CUPSD_JOB_PURGE); continue; } if (job->history_time < JobHistoryUpdate || !JobHistoryUpdate) JobHistoryUpdate = job->history_time; if (JobFiles < INT_MAX) job->file_time = attr->values[0].integer + JobFiles; else job->file_time = INT_MAX; cupsdLogJob(job, CUPSD_LOG_DEBUG2, "cupsdUpdateJobs: job->file_time=%ld, time-at-completed=%ld, JobFiles=%d", (long)job->file_time, (long)attr->values[0].integer, JobFiles); if (job->file_time < JobHistoryUpdate || !JobHistoryUpdate) JobHistoryUpdate = job->file_time; } } cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdUpdateJobs: JobHistoryUpdate=%ld", (long)JobHistoryUpdate); } /* * 'compare_active_jobs()' - Compare the job IDs and priorities of two jobs. */ static int /* O - Difference */ compare_active_jobs(void *first, /* I - First job */ void *second, /* I - Second job */ void *data) /* I - App data (not used) */ { int diff; /* Difference */ (void)data; if ((diff = ((cupsd_job_t *)second)->priority - ((cupsd_job_t *)first)->priority) != 0) return (diff); else return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id); } /* * 'compare_completed_jobs()' - Compare the job IDs and completion times of two jobs. */ static int /* O - Difference */ compare_completed_jobs(void *first, /* I - First job */ void *second, /* I - Second job */ void *data) /* I - App data (not used) */ { int diff; /* Difference */ (void)data; if ((diff = ((cupsd_job_t *)second)->completed_time - ((cupsd_job_t *)first)->completed_time) != 0) return (diff); else return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id); } /* * 'compare_jobs()' - Compare the job IDs of two jobs. */ static int /* O - Difference */ compare_jobs(void *first, /* I - First job */ void *second, /* I - Second job */ void *data) /* I - App data (not used) */ { (void)data; return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id); } /* * 'dump_job_history()' - Dump any debug messages for a job. */ static void dump_job_history(cupsd_job_t *job) /* I - Job */ { int i, /* Looping var */ oldsize; /* Current MaxLogSize */ struct tm *date; /* Date/time value */ cupsd_joblog_t *message; /* Current message */ char temp[2048], /* Log message */ *ptr, /* Pointer into log message */ start[256], /* Start time */ end[256]; /* End time */ cupsd_printer_t *printer; /* Printer for job */ /* * See if we have anything to dump... */ if (!job->history) return; /* * Disable log rotation temporarily... */ oldsize = MaxLogSize; MaxLogSize = 0; /* * Copy the debug messages to the log... */ message = (cupsd_joblog_t *)cupsArrayFirst(job->history); date = localtime(&(message->time)); strftime(start, sizeof(start), "%X", date); message = (cupsd_joblog_t *)cupsArrayLast(job->history); date = localtime(&(message->time)); strftime(end, sizeof(end), "%X", date); snprintf(temp, sizeof(temp), "[Job %d] The following messages were recorded from %s to %s", job->id, start, end); cupsdWriteErrorLog(CUPSD_LOG_DEBUG, temp); for (message = (cupsd_joblog_t *)cupsArrayFirst(job->history); message; message = (cupsd_joblog_t *)cupsArrayNext(job->history)) cupsdWriteErrorLog(CUPSD_LOG_DEBUG, message->message); snprintf(temp, sizeof(temp), "[Job %d] End of messages", job->id); cupsdWriteErrorLog(CUPSD_LOG_DEBUG, temp); /* * Log the printer state values... */ if ((printer = job->printer) == NULL) printer = cupsdFindDest(job->dest); if (printer) { snprintf(temp, sizeof(temp), "[Job %d] printer-state=%d(%s)", job->id, printer->state, printer->state == IPP_PRINTER_IDLE ? "idle" : printer->state == IPP_PRINTER_PROCESSING ? "processing" : "stopped"); cupsdWriteErrorLog(CUPSD_LOG_DEBUG, temp); snprintf(temp, sizeof(temp), "[Job %d] printer-state-message=\"%s\"", job->id, printer->state_message); cupsdWriteErrorLog(CUPSD_LOG_DEBUG, temp); snprintf(temp, sizeof(temp), "[Job %d] printer-state-reasons=", job->id); ptr = temp + strlen(temp); if (printer->num_reasons == 0) strlcpy(ptr, "none", sizeof(temp) - (size_t)(ptr - temp)); else { for (i = 0; i < printer->num_reasons && ptr < (temp + sizeof(temp) - 2); i ++) { if (i) *ptr++ = ','; strlcpy(ptr, printer->reasons[i], sizeof(temp) - (size_t)(ptr - temp)); ptr += strlen(ptr); } } cupsdWriteErrorLog(CUPSD_LOG_DEBUG, temp); } /* * Restore log file rotation... */ MaxLogSize = oldsize; /* * Free all messages... */ free_job_history(job); } /* * 'free_job_history()' - Free any log history. */ static void free_job_history(cupsd_job_t *job) /* I - Job */ { char *message; /* Current message */ if (!job->history) return; for (message = (char *)cupsArrayFirst(job->history); message; message = (char *)cupsArrayNext(job->history)) free(message); cupsArrayDelete(job->history); job->history = NULL; } /* * 'finalize_job()' - Cleanup after job filter processes and support data. */ static void finalize_job(cupsd_job_t *job, /* I - Job */ int set_job_state) /* I - 1 = set the job state */ { ipp_pstate_t printer_state; /* New printer state value */ ipp_jstate_t job_state; /* New job state value */ const char *message; /* Message for job state */ char buffer[1024]; /* Buffer for formatted messages */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "finalize_job(job=%p(%d))", job, job->id); /* * Clear the "connecting-to-device" and "cups-waiting-for-job-completed" * reasons, which are only valid when a printer is processing, along with any * remote printing job state... */ cupsdSetPrinterReasons(job->printer, "-connecting-to-device," "cups-waiting-for-job-completed," "cups-remote-pending," "cups-remote-pending-held," "cups-remote-processing," "cups-remote-stopped," "cups-remote-canceled," "cups-remote-aborted," "cups-remote-completed"); /* * Similarly, clear the "offline-report" reason for non-USB devices since we * rarely have current information for network devices... */ if (strncmp(job->printer->device_uri, "usb:", 4) && strncmp(job->printer->device_uri, "ippusb:", 7)) cupsdSetPrinterReasons(job->printer, "-offline-report"); /* * Free the security profile... */ cupsdDestroyProfile(job->profile); job->profile = NULL; cupsdDestroyProfile(job->bprofile); job->bprofile = NULL; /* * Clear the unresponsive job watchdog timers... */ job->cancel_time = 0; job->kill_time = 0; /* * Close pipes and status buffer... */ cupsdClosePipe(job->print_pipes); cupsdClosePipe(job->back_pipes); cupsdClosePipe(job->side_pipes); cupsdRemoveSelect(job->status_pipes[0]); cupsdClosePipe(job->status_pipes); cupsdStatBufDelete(job->status_buffer); job->status_buffer = NULL; /* * Process the exit status... */ if (job->printer->state == IPP_PRINTER_PROCESSING) printer_state = IPP_PRINTER_IDLE; else printer_state = job->printer->state; switch (job_state = job->state_value) { case IPP_JOB_PENDING : message = "Job paused."; break; case IPP_JOB_HELD : message = "Job held."; break; default : case IPP_JOB_PROCESSING : case IPP_JOB_COMPLETED : job_state = IPP_JOB_COMPLETED; message = "Job completed."; if (!job->status) ippSetString(job->attrs, &job->reasons, 0, "job-completed-successfully"); break; case IPP_JOB_STOPPED : message = "Job stopped."; ippSetString(job->attrs, &job->reasons, 0, "job-stopped"); break; case IPP_JOB_CANCELED : message = "Job canceled."; ippSetString(job->attrs, &job->reasons, 0, "job-canceled-by-user"); break; case IPP_JOB_ABORTED : message = "Job aborted."; break; } if (job->status < 0) { /* * Backend had errors... */ int exit_code; /* Exit code from backend */ /* * Convert the status to an exit code. Due to the way the W* macros are * implemented on macOS (bug?), we have to store the exit status in a * variable first and then convert... */ exit_code = -job->status; if (WIFEXITED(exit_code)) exit_code = WEXITSTATUS(exit_code); else { ippSetString(job->attrs, &job->reasons, 0, "cups-backend-crashed"); exit_code = job->status; } cupsdLogJob(job, CUPSD_LOG_INFO, "Backend returned status %d (%s)", exit_code, exit_code == CUPS_BACKEND_FAILED ? "failed" : exit_code == CUPS_BACKEND_AUTH_REQUIRED ? "authentication required" : exit_code == CUPS_BACKEND_HOLD ? "hold job" : exit_code == CUPS_BACKEND_STOP ? "stop printer" : exit_code == CUPS_BACKEND_CANCEL ? "cancel job" : exit_code == CUPS_BACKEND_RETRY ? "retry job later" : exit_code == CUPS_BACKEND_RETRY_CURRENT ? "retry job immediately" : exit_code < 0 ? "crashed" : "unknown"); /* * Do what needs to be done... */ switch (exit_code) { default : case CUPS_BACKEND_FAILED : /* * Backend failure, use the error-policy to determine how to * act... */ if (job->dtype & CUPS_PRINTER_CLASS) { /* * Queued on a class - mark the job as pending and we'll retry on * another printer... */ if (job_state == IPP_JOB_COMPLETED) { job_state = IPP_JOB_PENDING; message = "Retrying job on another printer."; ippSetString(job->attrs, &job->reasons, 0, "resources-are-not-ready"); } } else if (!strcmp(job->printer->error_policy, "retry-current-job")) { /* * The error policy is "retry-current-job" - mark the job as pending * and we'll retry on the same printer... */ if (job_state == IPP_JOB_COMPLETED) { job_state = IPP_JOB_PENDING; message = "Retrying job on same printer."; ippSetString(job->attrs, &job->reasons, 0, "none"); } } else if ((job->printer->type & CUPS_PRINTER_FAX) || !strcmp(job->printer->error_policy, "retry-job")) { if (job_state == IPP_JOB_COMPLETED) { /* * The job was queued on a fax or the error policy is "retry-job" - * hold the job if the number of retries is less than the * JobRetryLimit, otherwise abort the job. */ job->tries ++; if (job->tries > JobRetryLimit && JobRetryLimit > 0) { /* * Too many tries... */ snprintf(buffer, sizeof(buffer), "Job aborted after %d unsuccessful attempts.", JobRetryLimit); job_state = IPP_JOB_ABORTED; message = buffer; ippSetString(job->attrs, &job->reasons, 0, "aborted-by-system"); } else { /* * Try again in N seconds... */ snprintf(buffer, sizeof(buffer), "Job held for %d seconds since it could not be sent.", JobRetryInterval); job->hold_until = time(NULL) + JobRetryInterval; job_state = IPP_JOB_HELD; message = buffer; ippSetString(job->attrs, &job->reasons, 0, "resources-are-not-ready"); } } } else if (!strcmp(job->printer->error_policy, "abort-job") && job_state == IPP_JOB_COMPLETED) { job_state = IPP_JOB_ABORTED; message = "Job aborted due to backend errors; please consult " "the error_log file for details."; ippSetString(job->attrs, &job->reasons, 0, "aborted-by-system"); } else if (job->state_value == IPP_JOB_PROCESSING) { job_state = IPP_JOB_PENDING; printer_state = IPP_PRINTER_STOPPED; message = "Printer stopped due to backend errors; please " "consult the error_log file for details."; ippSetString(job->attrs, &job->reasons, 0, "none"); } break; case CUPS_BACKEND_CANCEL : /* * Cancel the job... */ if (job_state == IPP_JOB_COMPLETED) { job_state = IPP_JOB_CANCELED; message = "Job canceled at printer."; ippSetString(job->attrs, &job->reasons, 0, "canceled-at-device"); } break; case CUPS_BACKEND_HOLD : if (job_state == IPP_JOB_COMPLETED) { /* * Hold the job... */ const char *reason = ippGetString(job->reasons, 0, NULL); cupsdLogJob(job, CUPSD_LOG_DEBUG, "job-state-reasons=\"%s\"", reason); if (!reason || strncmp(reason, "account-", 8)) { cupsdSetJobHoldUntil(job, "indefinite", 1); ippSetString(job->attrs, &job->reasons, 0, "job-hold-until-specified"); message = "Job held indefinitely due to backend errors; please " "consult the error_log file for details."; } else if (!strcmp(reason, "account-info-needed")) { cupsdSetJobHoldUntil(job, "indefinite", 0); message = "Job held indefinitely - account information is " "required."; } else if (!strcmp(reason, "account-closed")) { cupsdSetJobHoldUntil(job, "indefinite", 0); message = "Job held indefinitely - account has been closed."; } else if (!strcmp(reason, "account-limit-reached")) { cupsdSetJobHoldUntil(job, "indefinite", 0); message = "Job held indefinitely - account limit has been " "reached."; } else { cupsdSetJobHoldUntil(job, "indefinite", 0); message = "Job held indefinitely - account authorization failed."; } job_state = IPP_JOB_HELD; } break; case CUPS_BACKEND_STOP : /* * Stop the printer... */ printer_state = IPP_PRINTER_STOPPED; message = "Printer stopped due to backend errors; please " "consult the error_log file for details."; if (job_state == IPP_JOB_COMPLETED) { job_state = IPP_JOB_PENDING; ippSetString(job->attrs, &job->reasons, 0, "resources-are-not-ready"); } break; case CUPS_BACKEND_AUTH_REQUIRED : /* * Hold the job for authentication... */ if (job_state == IPP_JOB_COMPLETED) { cupsdSetJobHoldUntil(job, "auth-info-required", 1); job_state = IPP_JOB_HELD; message = "Job held for authentication."; if (strncmp(job->reasons->values[0].string.text, "account-", 8)) ippSetString(job->attrs, &job->reasons, 0, "cups-held-for-authentication"); } break; case CUPS_BACKEND_RETRY : if (job_state == IPP_JOB_COMPLETED) { /* * Hold the job if the number of retries is less than the * JobRetryLimit, otherwise abort the job. */ job->tries ++; if (job->tries > JobRetryLimit && JobRetryLimit > 0) { /* * Too many tries... */ snprintf(buffer, sizeof(buffer), "Job aborted after %d unsuccessful attempts.", JobRetryLimit); job_state = IPP_JOB_ABORTED; message = buffer; ippSetString(job->attrs, &job->reasons, 0, "aborted-by-system"); } else { /* * Try again in N seconds... */ snprintf(buffer, sizeof(buffer), "Job held for %d seconds since it could not be sent.", JobRetryInterval); job->hold_until = time(NULL) + JobRetryInterval; job_state = IPP_JOB_HELD; message = buffer; ippSetString(job->attrs, &job->reasons, 0, "resources-are-not-ready"); } } break; case CUPS_BACKEND_RETRY_CURRENT : /* * Mark the job as pending and retry on the same printer... */ if (job_state == IPP_JOB_COMPLETED) { job_state = IPP_JOB_PENDING; message = "Retrying job on same printer."; ippSetString(job->attrs, &job->reasons, 0, "none"); } break; } } else if (job->status > 0) { /* * Filter had errors; stop job... */ if (job_state == IPP_JOB_COMPLETED) { job_state = IPP_JOB_STOPPED; message = "Job stopped due to filter errors; please consult the " "error_log file for details."; if (WIFSIGNALED(job->status)) ippSetString(job->attrs, &job->reasons, 0, "cups-filter-crashed"); else ippSetString(job->attrs, &job->reasons, 0, "job-completed-with-errors"); } } /* * Update the printer and job state. */ if (set_job_state && job_state != job->state_value) cupsdSetJobState(job, job_state, CUPSD_JOB_DEFAULT, "%s", message); cupsdSetPrinterState(job->printer, printer_state, printer_state == IPP_PRINTER_STOPPED); update_job_attrs(job, 0); if (job->history) { if (job->status && (job->state_value == IPP_JOB_ABORTED || job->state_value == IPP_JOB_STOPPED)) dump_job_history(job); else free_job_history(job); } cupsArrayRemove(PrintingJobs, job); /* * Clear informational messages... */ if (job->status_level > CUPSD_LOG_ERROR) job->printer->state_message[0] = '\0'; /* * Apply any PPD updates... */ if (job->num_keywords) { if (cupsdUpdatePrinterPPD(job->printer, job->num_keywords, job->keywords)) cupsdSetPrinterAttrs(job->printer); cupsFreeOptions(job->num_keywords, job->keywords); job->num_keywords = 0; job->keywords = NULL; } /* * Clear the printer <-> job association... */ job->printer->job = NULL; job->printer = NULL; } /* * 'get_options()' - Get a string containing the job options. */ static char * /* O - Options string */ get_options(cupsd_job_t *job, /* I - Job */ int banner_page, /* I - Printing a banner page? */ char *copies, /* I - Copies buffer */ size_t copies_size, /* I - Size of copies buffer */ char *title, /* I - Title buffer */ size_t title_size) /* I - Size of title buffer */ { int i; /* Looping var */ size_t newlength; /* New option buffer length */ char *optptr, /* Pointer to options */ *valptr; /* Pointer in value string */ ipp_attribute_t *attr; /* Current attribute */ _ppd_cache_t *pc; /* PPD cache and mapping data */ int num_pwgppds; /* Number of PWG->PPD options */ cups_option_t *pwgppds, /* PWG->PPD options */ *pwgppd, /* Current PWG->PPD option */ *preset; /* Current preset option */ int print_color_mode, /* Output mode (if any) */ print_quality; /* Print quality (if any) */ const char *ppd; /* PPD option choice */ int exact; /* Did we get an exact match? */ static char *options = NULL;/* Full list of options */ static size_t optlength = 0; /* Length of option buffer */ /* * Building the options string is harder than it needs to be, but for the * moment we need to pass strings for command-line args and not IPP attribute * pointers... :) * * First build an options array for any PWG->PPD mapped option/choice pairs. */ pc = job->printer->pc; num_pwgppds = 0; pwgppds = NULL; if (pc && !ippFindAttribute(job->attrs, "com.apple.print.DocumentTicket.PMSpoolFormat", IPP_TAG_ZERO) && !ippFindAttribute(job->attrs, "APPrinterPreset", IPP_TAG_ZERO) && (ippFindAttribute(job->attrs, "print-color-mode", IPP_TAG_ZERO) || ippFindAttribute(job->attrs, "print-quality", IPP_TAG_ZERO) || ippFindAttribute(job->attrs, "cupsPrintQuality", IPP_TAG_ZERO))) { /* * Map print-color-mode and print-quality to a preset... */ if ((attr = ippFindAttribute(job->attrs, "print-color-mode", IPP_TAG_KEYWORD)) != NULL && !strcmp(attr->values[0].string.text, "monochrome")) print_color_mode = _PWG_PRINT_COLOR_MODE_MONOCHROME; else print_color_mode = _PWG_PRINT_COLOR_MODE_COLOR; if ((attr = ippFindAttribute(job->attrs, "print-quality", IPP_TAG_ENUM)) != NULL) { ipp_quality_t pq = (ipp_quality_t)ippGetInteger(attr, 0); if (pq >= IPP_QUALITY_DRAFT && pq <= IPP_QUALITY_HIGH) print_quality = attr->values[0].integer - IPP_QUALITY_DRAFT; else print_quality = _PWG_PRINT_QUALITY_NORMAL; } else if ((attr = ippFindAttribute(job->attrs, "cupsPrintQuality", IPP_TAG_NAME)) != NULL) { const char *pq = ippGetString(attr, 0, NULL); if (!_cups_strcasecmp(pq, "draft")) print_quality = _PWG_PRINT_QUALITY_DRAFT; else if (!_cups_strcasecmp(pq, "high")) print_quality = _PWG_PRINT_QUALITY_HIGH; else print_quality = _PWG_PRINT_QUALITY_NORMAL; if (!ippFindAttribute(job->attrs, "print-quality", IPP_TAG_ENUM)) { cupsdLogJob(job, CUPSD_LOG_DEBUG2, "Mapping cupsPrintQuality=%s to print-quality=%d", pq, print_quality + IPP_QUALITY_DRAFT); num_pwgppds = cupsAddIntegerOption("print-quality", print_quality + IPP_QUALITY_DRAFT, num_pwgppds, &pwgppds); } } else { print_quality = _PWG_PRINT_QUALITY_NORMAL; } if (pc->num_presets[print_color_mode][print_quality] == 0) { /* * Try to find a preset that works so that we maximize the chances of us * getting a good print using IPP attributes. */ if (pc->num_presets[print_color_mode][_PWG_PRINT_QUALITY_NORMAL] > 0) print_quality = _PWG_PRINT_QUALITY_NORMAL; else if (pc->num_presets[_PWG_PRINT_COLOR_MODE_COLOR][print_quality] > 0) print_color_mode = _PWG_PRINT_COLOR_MODE_COLOR; else { print_quality = _PWG_PRINT_QUALITY_NORMAL; print_color_mode = _PWG_PRINT_COLOR_MODE_COLOR; } } if (pc->num_presets[print_color_mode][print_quality] > 0) { /* * Copy the preset options as long as the corresponding names are not * already defined in the IPP request... */ for (i = pc->num_presets[print_color_mode][print_quality], preset = pc->presets[print_color_mode][print_quality]; i > 0; i --, preset ++) { if (!ippFindAttribute(job->attrs, preset->name, IPP_TAG_ZERO)) { cupsdLogJob(job, CUPSD_LOG_DEBUG2, "Adding preset option %s=%s", preset->name, preset->value); num_pwgppds = cupsAddOption(preset->name, preset->value, num_pwgppds, &pwgppds); } } } } if (pc) { if ((attr = ippFindAttribute(job->attrs, "print-quality", IPP_TAG_ENUM)) != NULL) { int pq = ippGetInteger(attr, 0); static const char * const pqs[] = { "Draft", "Normal", "High" }; if (pq >= IPP_QUALITY_DRAFT && pq <= IPP_QUALITY_HIGH) { cupsdLogJob(job, CUPSD_LOG_DEBUG2, "Mapping print-quality=%d to cupsPrintQuality=%s", pq, pqs[pq - IPP_QUALITY_DRAFT]); num_pwgppds = cupsAddOption("cupsPrintQuality", pqs[pq - IPP_QUALITY_DRAFT], num_pwgppds, &pwgppds); } } if (!ippFindAttribute(job->attrs, "InputSlot", IPP_TAG_ZERO) && !ippFindAttribute(job->attrs, "HPPaperSource", IPP_TAG_ZERO)) { if ((ppd = _ppdCacheGetInputSlot(pc, job->attrs, NULL)) != NULL) num_pwgppds = cupsAddOption(pc->source_option, ppd, num_pwgppds, &pwgppds); } if (!ippFindAttribute(job->attrs, "MediaType", IPP_TAG_ZERO) && (ppd = _ppdCacheGetMediaType(pc, job->attrs, NULL)) != NULL) { cupsdLogJob(job, CUPSD_LOG_DEBUG2, "Mapping media to MediaType=%s", ppd); num_pwgppds = cupsAddOption("MediaType", ppd, num_pwgppds, &pwgppds); } if (!ippFindAttribute(job->attrs, "PageRegion", IPP_TAG_ZERO) && !ippFindAttribute(job->attrs, "PageSize", IPP_TAG_ZERO) && (ppd = _ppdCacheGetPageSize(pc, job->attrs, NULL, &exact)) != NULL) { cupsdLogJob(job, CUPSD_LOG_DEBUG2, "Mapping media to Pagesize=%s", ppd); num_pwgppds = cupsAddOption("PageSize", ppd, num_pwgppds, &pwgppds); if (!ippFindAttribute(job->attrs, "media", IPP_TAG_ZERO)) { cupsdLogJob(job, CUPSD_LOG_DEBUG2, "Adding media=%s", ppd); num_pwgppds = cupsAddOption("media", ppd, num_pwgppds, &pwgppds); } } if (!ippFindAttribute(job->attrs, "OutputBin", IPP_TAG_ZERO) && (attr = ippFindAttribute(job->attrs, "output-bin", IPP_TAG_ZERO)) != NULL && (attr->value_tag == IPP_TAG_KEYWORD || attr->value_tag == IPP_TAG_NAME) && (ppd = _ppdCacheGetOutputBin(pc, attr->values[0].string.text)) != NULL) { /* * Map output-bin to OutputBin option... */ cupsdLogJob(job, CUPSD_LOG_DEBUG2, "Mapping output-bin to OutputBin=%s", ppd); num_pwgppds = cupsAddOption("OutputBin", ppd, num_pwgppds, &pwgppds); } if (pc->sides_option && !ippFindAttribute(job->attrs, pc->sides_option, IPP_TAG_ZERO) && (attr = ippFindAttribute(job->attrs, "sides", IPP_TAG_KEYWORD)) != NULL) { /* * Map sides to duplex option... */ if (!strcmp(attr->values[0].string.text, "one-sided")) { cupsdLogJob(job, CUPSD_LOG_DEBUG2, "Mapping sizes to Duplex=%s", pc->sides_1sided); num_pwgppds = cupsAddOption(pc->sides_option, pc->sides_1sided, num_pwgppds, &pwgppds); } else if (!strcmp(attr->values[0].string.text, "two-sided-long-edge")) { cupsdLogJob(job, CUPSD_LOG_DEBUG2, "Mapping sizes to Duplex=%s", pc->sides_2sided_long); num_pwgppds = cupsAddOption(pc->sides_option, pc->sides_2sided_long, num_pwgppds, &pwgppds); } else if (!strcmp(attr->values[0].string.text, "two-sided-short-edge")) { cupsdLogJob(job, CUPSD_LOG_DEBUG2, "Mapping sizes to Duplex=%s", pc->sides_2sided_short); num_pwgppds = cupsAddOption(pc->sides_option, pc->sides_2sided_short, num_pwgppds, &pwgppds); } } /* * Map finishings values... */ num_pwgppds = _ppdCacheGetFinishingOptions(pc, job->attrs, IPP_FINISHINGS_NONE, num_pwgppds, &pwgppds); for (i = num_pwgppds, pwgppd = pwgppds; i > 0; i --, pwgppd ++) cupsdLogJob(job, CUPSD_LOG_DEBUG2, "After mapping finishings %s=%s", pwgppd->name, pwgppd->value); } /* * Figure out how much room we need... */ newlength = ipp_length(job->attrs); for (i = num_pwgppds, pwgppd = pwgppds; i > 0; i --, pwgppd ++) newlength += 1 + strlen(pwgppd->name) + 1 + strlen(pwgppd->value); /* * Then allocate/reallocate the option buffer as needed... */ if (newlength == 0) /* This can never happen, but Clang */ newlength = 1; /* thinks it can... */ if (newlength > optlength || !options) { if (!options) optptr = malloc(newlength); else optptr = realloc(options, newlength); if (!optptr) { cupsdLogJob(job, CUPSD_LOG_CRIT, "Unable to allocate " CUPS_LLFMT " bytes for option buffer.", CUPS_LLCAST newlength); return (NULL); } options = optptr; optlength = newlength; } /* * Now loop through the attributes and convert them to the textual * representation used by the filters... */ optptr = options; *optptr = '\0'; snprintf(title, title_size, "%s-%d", job->printer->name, job->id); strlcpy(copies, "1", copies_size); for (attr = job->attrs->attrs; attr != NULL; attr = attr->next) { if (!strcmp(attr->name, "copies") && attr->value_tag == IPP_TAG_INTEGER) { /* * Don't use the # copies attribute if we are printing the job sheets... */ if (!banner_page) snprintf(copies, copies_size, "%d", attr->values[0].integer); } else if (!strcmp(attr->name, "job-name") && (attr->value_tag == IPP_TAG_NAME || attr->value_tag == IPP_TAG_NAMELANG)) strlcpy(title, attr->values[0].string.text, title_size); else if (attr->group_tag == IPP_TAG_JOB) { /* * Filter out other unwanted attributes... */ if (attr->value_tag == IPP_TAG_NOVALUE || attr->value_tag == IPP_TAG_MIMETYPE || attr->value_tag == IPP_TAG_NAMELANG || attr->value_tag == IPP_TAG_TEXTLANG || (attr->value_tag == IPP_TAG_URI && strcmp(attr->name, "job-uuid") && strcmp(attr->name, "job-authorization-uri")) || attr->value_tag == IPP_TAG_URISCHEME || attr->value_tag == IPP_TAG_BEGIN_COLLECTION) /* Not yet supported */ continue; if (!strcmp(attr->name, "job-hold-until") || !strcmp(attr->name, "job-id") || !strcmp(attr->name, "job-k-octets") || !strcmp(attr->name, "job-media-sheets") || !strcmp(attr->name, "job-media-sheets-completed") || !strcmp(attr->name, "job-state") || !strcmp(attr->name, "job-state-reasons")) continue; if (!strncmp(attr->name, "job-", 4) && strcmp(attr->name, "job-account-id") && strcmp(attr->name, "job-accounting-user-id") && strcmp(attr->name, "job-authorization-uri") && strcmp(attr->name, "job-billing") && strcmp(attr->name, "job-impressions") && strcmp(attr->name, "job-originating-host-name") && strcmp(attr->name, "job-password") && strcmp(attr->name, "job-password-encryption") && strcmp(attr->name, "job-uuid") && !(job->printer->type & CUPS_PRINTER_REMOTE)) continue; if ((!strcmp(attr->name, "job-impressions") || !strcmp(attr->name, "page-label") || !strcmp(attr->name, "page-border") || !strncmp(attr->name, "number-up", 9) || !strcmp(attr->name, "page-ranges") || !strcmp(attr->name, "page-set") || !_cups_strcasecmp(attr->name, "AP_FIRSTPAGE_InputSlot") || !_cups_strcasecmp(attr->name, "AP_FIRSTPAGE_ManualFeed") || !_cups_strcasecmp(attr->name, "com.apple.print.PrintSettings." "PMTotalSidesImaged..n.") || !_cups_strcasecmp(attr->name, "com.apple.print.PrintSettings." "PMTotalBeginPages..n.")) && banner_page) continue; /* * Otherwise add them to the list... */ if (optptr > options) strlcat(optptr, " ", optlength - (size_t)(optptr - options)); if (attr->value_tag != IPP_TAG_BOOLEAN) { strlcat(optptr, attr->name, optlength - (size_t)(optptr - options)); strlcat(optptr, "=", optlength - (size_t)(optptr - options)); } for (i = 0; i < attr->num_values; i ++) { if (i) strlcat(optptr, ",", optlength - (size_t)(optptr - options)); optptr += strlen(optptr); switch (attr->value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : snprintf(optptr, optlength - (size_t)(optptr - options), "%d", attr->values[i].integer); break; case IPP_TAG_BOOLEAN : if (!attr->values[i].boolean) strlcat(optptr, "no", optlength - (size_t)(optptr - options)); strlcat(optptr, attr->name, optlength - (size_t)(optptr - options)); break; case IPP_TAG_RANGE : if (attr->values[i].range.lower == attr->values[i].range.upper) snprintf(optptr, optlength - (size_t)(optptr - options) - 1, "%d", attr->values[i].range.lower); else snprintf(optptr, optlength - (size_t)(optptr - options) - 1, "%d-%d", attr->values[i].range.lower, attr->values[i].range.upper); break; case IPP_TAG_RESOLUTION : snprintf(optptr, optlength - (size_t)(optptr - options) - 1, "%dx%d%s", attr->values[i].resolution.xres, attr->values[i].resolution.yres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); break; case IPP_TAG_STRING : case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_URI : for (valptr = attr->values[i].string.text; *valptr;) { if (strchr(" \t\n\\\'\"", *valptr)) *optptr++ = '\\'; *optptr++ = *valptr++; } *optptr = '\0'; break; default : break; /* anti-compiler-warning-code */ } } optptr += strlen(optptr); } } /* * Finally loop through the PWG->PPD mapped options and add them... */ for (i = num_pwgppds, pwgppd = pwgppds; i > 0; i --, pwgppd ++) { *optptr++ = ' '; strlcpy(optptr, pwgppd->name, optlength - (size_t)(optptr - options)); optptr += strlen(optptr); *optptr++ = '='; strlcpy(optptr, pwgppd->value, optlength - (size_t)(optptr - options)); optptr += strlen(optptr); } cupsFreeOptions(num_pwgppds, pwgppds); /* * Return the options string... */ return (options); } /* * 'ipp_length()' - Compute the size of the buffer needed to hold * the textual IPP attributes. */ static size_t /* O - Size of attribute buffer */ ipp_length(ipp_t *ipp) /* I - IPP request */ { size_t bytes; /* Number of bytes */ int i; /* Looping var */ ipp_attribute_t *attr; /* Current attribute */ /* * Loop through all attributes... */ bytes = 0; for (attr = ipp->attrs; attr != NULL; attr = attr->next) { /* * Skip attributes that won't be sent to filters... */ if (attr->value_tag == IPP_TAG_NOVALUE || attr->value_tag == IPP_TAG_MIMETYPE || attr->value_tag == IPP_TAG_NAMELANG || attr->value_tag == IPP_TAG_TEXTLANG || attr->value_tag == IPP_TAG_URI || attr->value_tag == IPP_TAG_URISCHEME) continue; /* * Add space for a leading space and commas between each value. * For the first attribute, the leading space isn't used, so the * extra byte can be used as the nul terminator... */ bytes ++; /* " " separator */ bytes += (size_t)attr->num_values; /* "," separators */ /* * Boolean attributes appear as "foo,nofoo,foo,nofoo", while * other attributes appear as "foo=value1,value2,...,valueN". */ if (attr->value_tag != IPP_TAG_BOOLEAN) bytes += strlen(attr->name); else bytes += (size_t)attr->num_values * strlen(attr->name); /* * Now add the size required for each value in the attribute... */ switch (attr->value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : /* * Minimum value of a signed integer is -2147483647, or 11 digits. */ bytes += (size_t)attr->num_values * 11; break; case IPP_TAG_BOOLEAN : /* * Add two bytes for each false ("no") value... */ for (i = 0; i < attr->num_values; i ++) if (!attr->values[i].boolean) bytes += 2; break; case IPP_TAG_RANGE : /* * A range is two signed integers separated by a hyphen, or * 23 characters max. */ bytes += (size_t)attr->num_values * 23; break; case IPP_TAG_RESOLUTION : /* * A resolution is two signed integers separated by an "x" and * suffixed by the units, or 26 characters max. */ bytes += (size_t)attr->num_values * 26; break; case IPP_TAG_STRING : case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_URI : /* * Strings can contain characters that need quoting. We need * at least 2 * len + 2 characters to cover the quotes and * any backslashes in the string. */ for (i = 0; i < attr->num_values; i ++) bytes += 2 * strlen(attr->values[i].string.text) + 2; break; default : break; /* anti-compiler-warning-code */ } } return (bytes); } /* * 'load_job_cache()' - Load jobs from the job.cache file. */ static void load_job_cache(const char *filename) /* I - job.cache filename */ { cups_file_t *fp; /* job.cache file */ char line[1024], /* Line buffer */ *value; /* Value on line */ int linenum; /* Line number in file */ cupsd_job_t *job; /* Current job */ int jobid; /* Job ID */ char jobfile[1024]; /* Job filename */ /* * Open the job.cache file... */ if ((fp = cupsdOpenConfFile(filename)) == NULL) { load_request_root(); return; } /* * Read entries from the job cache file and create jobs as needed. */ cupsdLogMessage(CUPSD_LOG_INFO, "Loading job cache file \"%s\"...", filename); linenum = 0; job = NULL; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { if (!_cups_strcasecmp(line, "NextJobId")) { if (value) NextJobId = atoi(value); } else if (!_cups_strcasecmp(line, " directive on line %d of %s.", linenum, filename); continue; } if (!value) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing job ID on line %d of %s.", linenum, filename); continue; } jobid = atoi(value); if (jobid < 1) { cupsdLogMessage(CUPSD_LOG_ERROR, "Bad job ID %d on line %d of %s.", jobid, linenum, filename); continue; } snprintf(jobfile, sizeof(jobfile), "%s/c%05d", RequestRoot, jobid); if (access(jobfile, 0)) { snprintf(jobfile, sizeof(jobfile), "%s/c%05d.N", RequestRoot, jobid); if (access(jobfile, 0)) { cupsdLogMessage(CUPSD_LOG_ERROR, "[Job %d] Files have gone away.", jobid); /* * job.cache file is out-of-date compared to spool directory; load * that instead... */ cupsFileClose(fp); load_request_root(); return; } } job = calloc(1, sizeof(cupsd_job_t)); if (!job) { cupsdLogMessage(CUPSD_LOG_EMERG, "[Job %d] Unable to allocate memory for job.", jobid); break; } job->id = jobid; job->back_pipes[0] = -1; job->back_pipes[1] = -1; job->print_pipes[0] = -1; job->print_pipes[1] = -1; job->side_pipes[0] = -1; job->side_pipes[1] = -1; job->status_pipes[0] = -1; job->status_pipes[1] = -1; cupsdLogJob(job, CUPSD_LOG_DEBUG, "Loading from cache..."); } else if (!job) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing directive on line %d of %s.", linenum, filename); continue; } else if (!_cups_strcasecmp(line, "")) { cupsArrayAdd(Jobs, job); if (job->state_value <= IPP_JOB_STOPPED && cupsdLoadJob(job)) cupsArrayAdd(ActiveJobs, job); else if (job->state_value > IPP_JOB_STOPPED) { if (!job->completed_time || !job->creation_time || !job->name || !job->koctets) { cupsdLoadJob(job); unload_job(job); } } job = NULL; } else if (!value) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing value on line %d of %s.", linenum, filename); continue; } else if (!_cups_strcasecmp(line, "State")) { job->state_value = (ipp_jstate_t)atoi(value); if (job->state_value < IPP_JOB_PENDING) job->state_value = IPP_JOB_PENDING; else if (job->state_value > IPP_JOB_COMPLETED) job->state_value = IPP_JOB_COMPLETED; } else if (!_cups_strcasecmp(line, "Name")) { cupsdSetString(&(job->name), value); } else if (!_cups_strcasecmp(line, "Created")) { job->creation_time = strtol(value, NULL, 10); } else if (!_cups_strcasecmp(line, "Completed")) { job->completed_time = strtol(value, NULL, 10); } else if (!_cups_strcasecmp(line, "HoldUntil")) { job->hold_until = strtol(value, NULL, 10); } else if (!_cups_strcasecmp(line, "Priority")) { job->priority = atoi(value); } else if (!_cups_strcasecmp(line, "Username")) { cupsdSetString(&job->username, value); } else if (!_cups_strcasecmp(line, "Destination")) { cupsdSetString(&job->dest, value); } else if (!_cups_strcasecmp(line, "DestType")) { job->dtype = (cups_ptype_t)atoi(value); } else if (!_cups_strcasecmp(line, "KOctets")) { job->koctets = atoi(value); } else if (!_cups_strcasecmp(line, "NumFiles")) { job->num_files = atoi(value); if (job->num_files < 0) { cupsdLogMessage(CUPSD_LOG_ERROR, "Bad NumFiles value %d on line %d of %s.", job->num_files, linenum, filename); job->num_files = 0; continue; } if (job->num_files > 0) { snprintf(jobfile, sizeof(jobfile), "%s/d%05d-001", RequestRoot, job->id); if (access(jobfile, 0)) { cupsdLogJob(job, CUPSD_LOG_INFO, "Data files have gone away."); job->num_files = 0; continue; } job->filetypes = calloc((size_t)job->num_files, sizeof(mime_type_t *)); job->compressions = calloc((size_t)job->num_files, sizeof(int)); if (!job->filetypes || !job->compressions) { cupsdLogJob(job, CUPSD_LOG_EMERG, "Unable to allocate memory for %d files.", job->num_files); break; } } } else if (!_cups_strcasecmp(line, "File")) { int number, /* File number */ compression; /* Compression value */ char super[MIME_MAX_SUPER], /* MIME super type */ type[MIME_MAX_TYPE]; /* MIME type */ if (sscanf(value, "%d%*[ \t]%15[^/]/%255s%d", &number, super, type, &compression) != 4) { cupsdLogMessage(CUPSD_LOG_ERROR, "Bad File on line %d of %s.", linenum, filename); continue; } if (number < 1 || number > job->num_files) { cupsdLogMessage(CUPSD_LOG_ERROR, "Bad File number %d on line %d of %s.", number, linenum, filename); continue; } number --; job->compressions[number] = compression; job->filetypes[number] = mimeType(MimeDatabase, super, type); if (!job->filetypes[number]) { /* * If the original MIME type is unknown, auto-type it! */ cupsdLogJob(job, CUPSD_LOG_ERROR, "Unknown MIME type %s/%s for file %d.", super, type, number + 1); snprintf(jobfile, sizeof(jobfile), "%s/d%05d-%03d", RequestRoot, job->id, number + 1); job->filetypes[number] = mimeFileType(MimeDatabase, jobfile, NULL, job->compressions + number); /* * If that didn't work, assume it is raw... */ if (!job->filetypes[number]) job->filetypes[number] = mimeType(MimeDatabase, "application", "vnd.cups-raw"); } } else cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown %s directive on line %d of %s.", line, linenum, filename); } if (job) { cupsdLogMessage(CUPSD_LOG_ERROR, "Missing directive on line %d of %s.", linenum, filename); cupsdDeleteJob(job, CUPSD_JOB_PURGE); } cupsFileClose(fp); } /* * 'load_next_job_id()' - Load the NextJobId value from the job.cache file. */ static void load_next_job_id(const char *filename) /* I - job.cache filename */ { cups_file_t *fp; /* job.cache file */ char line[1024], /* Line buffer */ *value; /* Value on line */ int linenum; /* Line number in file */ int next_job_id; /* NextJobId value from line */ /* * Read the NextJobId directive from the job.cache file and use * the value (if any). */ if ((fp = cupsFileOpen(filename, "r")) == NULL) { if (errno != ENOENT) cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open job cache file \"%s\": %s", filename, strerror(errno)); return; } cupsdLogMessage(CUPSD_LOG_INFO, "Loading NextJobId from job cache file \"%s\"...", filename); linenum = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { if (!_cups_strcasecmp(line, "NextJobId")) { if (value) { next_job_id = atoi(value); if (next_job_id > NextJobId) NextJobId = next_job_id; } break; } } cupsFileClose(fp); } /* * 'load_request_root()' - Load jobs from the RequestRoot directory. */ static void load_request_root(void) { cups_dir_t *dir; /* Directory */ cups_dentry_t *dent; /* Directory entry */ cupsd_job_t *job; /* New job */ /* * Open the requests directory... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "Scanning %s for jobs...", RequestRoot); if ((dir = cupsDirOpen(RequestRoot)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open spool directory \"%s\": %s", RequestRoot, strerror(errno)); return; } /* * Read all the c##### files... */ while ((dent = cupsDirRead(dir)) != NULL) if (strlen(dent->filename) >= 6 && dent->filename[0] == 'c') { /* * Allocate memory for the job... */ if ((job = calloc(sizeof(cupsd_job_t), 1)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Ran out of memory for jobs."); cupsDirClose(dir); return; } /* * Assign the job ID... */ job->id = atoi(dent->filename + 1); job->back_pipes[0] = -1; job->back_pipes[1] = -1; job->print_pipes[0] = -1; job->print_pipes[1] = -1; job->side_pipes[0] = -1; job->side_pipes[1] = -1; job->status_pipes[0] = -1; job->status_pipes[1] = -1; if (job->id >= NextJobId) NextJobId = job->id + 1; /* * Load the job... */ if (cupsdLoadJob(job)) { /* * Insert the job into the array, sorting by job priority and ID... */ cupsArrayAdd(Jobs, job); if (job->state_value <= IPP_JOB_STOPPED) cupsArrayAdd(ActiveJobs, job); else unload_job(job); } else free(job); } cupsDirClose(dir); } /* * 'remove_job_files()' - Remove the document files for a job. */ static void remove_job_files(cupsd_job_t *job) /* I - Job */ { int i; /* Looping var */ char filename[1024]; /* Document filename */ if (job->num_files <= 0) return; for (i = 1; i <= job->num_files; i ++) { snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id, i); cupsdUnlinkOrRemoveFile(filename); } free(job->filetypes); free(job->compressions); job->file_time = 0; job->num_files = 0; job->filetypes = NULL; job->compressions = NULL; LastEvent |= CUPSD_EVENT_PRINTER_STATE_CHANGED; } /* * 'remove_job_history()' - Remove the control file for a job. */ static void remove_job_history(cupsd_job_t *job) /* I - Job */ { char filename[1024]; /* Control filename */ /* * Remove the job info file... */ snprintf(filename, sizeof(filename), "%s/c%05d", RequestRoot, job->id); cupsdUnlinkOrRemoveFile(filename); LastEvent |= CUPSD_EVENT_PRINTER_STATE_CHANGED; } /* * 'set_time()' - Set one of the "time-at-xyz" attributes. */ static void set_time(cupsd_job_t *job, /* I - Job to update */ const char *name) /* I - Name of attribute */ { char date_name[128]; /* date-time-at-xxx */ ipp_attribute_t *attr; /* Time attribute */ time_t curtime; /* Current time */ curtime = time(NULL); cupsdLogJob(job, CUPSD_LOG_DEBUG, "%s=%ld", name, (long)curtime); if ((attr = ippFindAttribute(job->attrs, name, IPP_TAG_ZERO)) != NULL) { attr->value_tag = IPP_TAG_INTEGER; attr->values[0].integer = curtime; } snprintf(date_name, sizeof(date_name), "date-%s", name); if ((attr = ippFindAttribute(job->attrs, date_name, IPP_TAG_ZERO)) != NULL) { attr->value_tag = IPP_TAG_DATE; ippSetDate(job->attrs, &attr, 0, ippTimeToDate(curtime)); } if (!strcmp(name, "time-at-completed")) { job->completed_time = curtime; if (JobHistory < INT_MAX && attr) job->history_time = attr->values[0].integer + JobHistory; else job->history_time = INT_MAX; if (job->history_time < JobHistoryUpdate || !JobHistoryUpdate) JobHistoryUpdate = job->history_time; if (JobFiles < INT_MAX && attr) job->file_time = curtime + JobFiles; else job->file_time = INT_MAX; if (job->file_time < JobHistoryUpdate || !JobHistoryUpdate) JobHistoryUpdate = job->file_time; cupsdLogMessage(CUPSD_LOG_DEBUG2, "set_time: JobHistoryUpdate=%ld", (long)JobHistoryUpdate); } } /* * 'start_job()' - Start a print job. */ static void start_job(cupsd_job_t *job, /* I - Job ID */ cupsd_printer_t *printer) /* I - Printer to print job */ { const char *filename; /* Support filename */ ipp_attribute_t *cancel_after = ippFindAttribute(job->attrs, "job-cancel-after", IPP_TAG_INTEGER); /* job-cancel-after attribute */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job(job=%p(%d), printer=%p(%s))", job, job->id, printer, printer->name); /* * Make sure we have some files around before we try to print... */ if (job->num_files == 0) { ippSetString(job->attrs, &job->reasons, 0, "aborted-by-system"); cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_DEFAULT, "Aborting job because it has no files."); return; } /* * Update the printer and job state to "processing"... */ if (!cupsdLoadJob(job)) return; if (!job->printer_message) job->printer_message = ippFindAttribute(job->attrs, "job-printer-state-message", IPP_TAG_TEXT); if (job->printer_message) ippSetString(job->attrs, &job->printer_message, 0, ""); ippSetString(job->attrs, &job->reasons, 0, "job-printing"); cupsdSetJobState(job, IPP_JOB_PROCESSING, CUPSD_JOB_DEFAULT, NULL); cupsdSetPrinterState(printer, IPP_PRINTER_PROCESSING, 0); cupsdSetPrinterReasons(printer, "-cups-remote-pending," "cups-remote-pending-held," "cups-remote-processing," "cups-remote-stopped," "cups-remote-canceled," "cups-remote-aborted," "cups-remote-completed"); job->cost = 0; job->current_file = 0; job->file_time = 0; job->history_time = 0; job->progress = 0; job->printer = printer; printer->job = job; if (cancel_after) job->cancel_time = time(NULL) + ippGetInteger(cancel_after, 0); else if (MaxJobTime > 0) job->cancel_time = time(NULL) + MaxJobTime; else job->cancel_time = 0; /* * Check for support files... */ cupsdSetPrinterReasons(job->printer, "-cups-missing-filter-warning," "cups-insecure-filter-warning"); if (printer->pc) { for (filename = (const char *)cupsArrayFirst(printer->pc->support_files); filename; filename = (const char *)cupsArrayNext(printer->pc->support_files)) { if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_FILE, !RunUser, cupsdLogFCMessage, printer)) break; } } /* * Setup the last exit status and security profiles... */ job->status = 0; job->profile = cupsdCreateProfile(job->id, 0); job->bprofile = cupsdCreateProfile(job->id, 1); /* * Create the status pipes and buffer... */ if (cupsdOpenPipe(job->status_pipes)) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Unable to create job status pipes - %s.", strerror(errno)); cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT, "Job stopped because the scheduler could not create the " "job status pipes."); cupsdDestroyProfile(job->profile); job->profile = NULL; cupsdDestroyProfile(job->bprofile); job->bprofile = NULL; return; } job->status_buffer = cupsdStatBufNew(job->status_pipes[0], NULL); job->status_level = CUPSD_LOG_INFO; /* * Create the backchannel pipes and make them non-blocking... */ if (cupsdOpenPipe(job->back_pipes)) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Unable to create back-channel pipes - %s.", strerror(errno)); cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT, "Job stopped because the scheduler could not create the " "back-channel pipes."); cupsdClosePipe(job->status_pipes); cupsdStatBufDelete(job->status_buffer); job->status_buffer = NULL; cupsdDestroyProfile(job->profile); job->profile = NULL; cupsdDestroyProfile(job->bprofile); job->bprofile = NULL; return; } fcntl(job->back_pipes[0], F_SETFL, fcntl(job->back_pipes[0], F_GETFL) | O_NONBLOCK); fcntl(job->back_pipes[1], F_SETFL, fcntl(job->back_pipes[1], F_GETFL) | O_NONBLOCK); /* * Create the side-channel pipes and make them non-blocking... */ if (socketpair(AF_LOCAL, SOCK_STREAM, 0, job->side_pipes)) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "Unable to create side-channel pipes - %s.", strerror(errno)); cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT, "Job stopped because the scheduler could not create the " "side-channel pipes."); cupsdClosePipe(job->back_pipes); cupsdClosePipe(job->status_pipes); cupsdStatBufDelete(job->status_buffer); job->status_buffer = NULL; cupsdDestroyProfile(job->profile); job->profile = NULL; cupsdDestroyProfile(job->bprofile); job->bprofile = NULL; return; } fcntl(job->side_pipes[0], F_SETFL, fcntl(job->side_pipes[0], F_GETFL) | O_NONBLOCK); fcntl(job->side_pipes[1], F_SETFL, fcntl(job->side_pipes[1], F_GETFL) | O_NONBLOCK); fcntl(job->side_pipes[0], F_SETFD, fcntl(job->side_pipes[0], F_GETFD) | FD_CLOEXEC); fcntl(job->side_pipes[1], F_SETFD, fcntl(job->side_pipes[1], F_GETFD) | FD_CLOEXEC); /* * Now start the first file in the job... */ cupsdContinueJob(job); } /* * 'stop_job()' - Stop a print job. */ static void stop_job(cupsd_job_t *job, /* I - Job */ cupsd_jobaction_t action) /* I - Action */ { int i; /* Looping var */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "stop_job(job=%p(%d), action=%d)", job, job->id, action); FilterLevel -= job->cost; job->cost = 0; if (action == CUPSD_JOB_DEFAULT && !job->kill_time && job->backend > 0) job->kill_time = time(NULL) + JobKillDelay; else if (action >= CUPSD_JOB_FORCE) job->kill_time = 0; for (i = 0; job->filters[i]; i ++) if (job->filters[i] > 0) { cupsdEndProcess(job->filters[i], action >= CUPSD_JOB_FORCE); if (action >= CUPSD_JOB_FORCE) job->filters[i] = -job->filters[i]; } if (job->backend > 0) { cupsdEndProcess(job->backend, action >= CUPSD_JOB_FORCE); if (action >= CUPSD_JOB_FORCE) job->backend = -job->backend; } if (action >= CUPSD_JOB_FORCE) { /* * Clear job status... */ job->status = 0; } } /* * 'unload_job()' - Unload a job from memory. */ static void unload_job(cupsd_job_t *job) /* I - Job */ { if (!job->attrs) return; cupsdLogJob(job, CUPSD_LOG_DEBUG, "Unloading..."); ippDelete(job->attrs); job->attrs = NULL; job->state = NULL; job->reasons = NULL; job->impressions = NULL; job->sheets = NULL; job->job_sheets = NULL; job->printer_message = NULL; job->printer_reasons = NULL; } /* * 'update_job()' - Read a status update from a job's filters. */ void update_job(cupsd_job_t *job) /* I - Job to check */ { int i; /* Looping var */ int copies; /* Number of copies printed */ char message[CUPSD_SB_BUFFER_SIZE], /* Message text */ *ptr; /* Pointer update... */ int loglevel, /* Log level for message */ event = 0; /* Events? */ cupsd_printer_t *printer = job->printer; /* Printer */ static const char * const levels[] = /* Log levels */ { "NONE", "EMERG", "ALERT", "CRIT", "ERROR", "WARN", "NOTICE", "INFO", "DEBUG", "DEBUG2" }; /* * Get the printer associated with this job; if the printer is stopped for * any reason then job->printer will be reset to NULL, so make sure we have * a valid pointer... */ while ((ptr = cupsdStatBufUpdate(job->status_buffer, &loglevel, message, sizeof(message))) != NULL) { /* * Process page and printer state messages as needed... */ if (loglevel == CUPSD_LOG_PAGE) { /* * Page message; send the message to the page_log file and update the * job sheet count... */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "PAGE: %s", message); if (job->impressions) { if (!_cups_strncasecmp(message, "total ", 6)) { /* * Got a total count of pages from a backend or filter... */ copies = atoi(message + 6); copies -= ippGetInteger(job->impressions, 0); /* Just track the delta */ } else if (!sscanf(message, "%*d%d", &copies)) copies = 1; ippSetInteger(job->attrs, &job->impressions, 0, ippGetInteger(job->impressions, 0) + copies); job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); } if (job->sheets) { if (!_cups_strncasecmp(message, "total ", 6)) { /* * Got a total count of pages from a backend or filter... */ copies = atoi(message + 6); copies -= ippGetInteger(job->sheets, 0); /* Just track the delta */ } else if (!sscanf(message, "%*d%d", &copies)) copies = 1; ippSetInteger(job->attrs, &job->sheets, 0, ippGetInteger(job->sheets, 0) + copies); job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); if (job->printer->page_limit) cupsdUpdateQuota(job->printer, job->username, copies, 0); } cupsdLogPage(job, message); if (job->sheets) cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job, "Printed %d page(s).", ippGetInteger(job->sheets, 0)); } else if (loglevel == CUPSD_LOG_JOBSTATE) { /* * Support "keyword" to set job-state-reasons to the specified keyword. * This is sufficient for the current paid printing stuff. */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "JOBSTATE: %s", message); if (!strcmp(message, "cups-retry-as-raster")) job->retry_as_raster = 1; else ippSetString(job->attrs, &job->reasons, 0, message); } else if (loglevel == CUPSD_LOG_STATE) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "STATE: %s", message); if (!strcmp(message, "paused")) { cupsdStopPrinter(job->printer, 1); return; } else if (message[0] && cupsdSetPrinterReasons(job->printer, message)) { event |= CUPSD_EVENT_PRINTER_STATE; if (MaxJobTime > 0) { /* * Reset cancel time after connecting to the device... */ for (i = 0; i < job->printer->num_reasons; i ++) if (!strcmp(job->printer->reasons[i], "connecting-to-device")) break; if (i >= job->printer->num_reasons) { ipp_attribute_t *cancel_after = ippFindAttribute(job->attrs, "job-cancel-after", IPP_TAG_INTEGER); /* job-cancel-after attribute */ if (cancel_after) job->cancel_time = time(NULL) + ippGetInteger(cancel_after, 0); else job->cancel_time = time(NULL) + MaxJobTime; } } } update_job_attrs(job, 0); } else if (loglevel == CUPSD_LOG_ATTR) { /* * Set attribute(s)... */ int num_attrs; /* Number of attributes */ cups_option_t *attrs; /* Attributes */ const char *attr; /* Attribute */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "ATTR: %s", message); num_attrs = cupsParseOptions(message, 0, &attrs); if ((attr = cupsGetOption("auth-info-default", num_attrs, attrs)) != NULL) { job->printer->num_options = cupsAddOption("auth-info", attr, job->printer->num_options, &(job->printer->options)); cupsdSetPrinterAttrs(job->printer); cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); } if ((attr = cupsGetOption("auth-info-required", num_attrs, attrs)) != NULL) { cupsdSetAuthInfoRequired(job->printer, attr, NULL); cupsdSetPrinterAttrs(job->printer); cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); } if ((attr = cupsGetOption("job-media-progress", num_attrs, attrs)) != NULL) { int progress = atoi(attr); if (progress >= 0 && progress <= 100) { job->progress = progress; if (job->sheets) cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job, "Printing page %d, %d%%", job->sheets->values[0].integer, job->progress); } } if ((attr = cupsGetOption("printer-alert", num_attrs, attrs)) != NULL) { cupsdSetString(&job->printer->alert, attr); event |= CUPSD_EVENT_PRINTER_STATE; } if ((attr = cupsGetOption("printer-alert-description", num_attrs, attrs)) != NULL) { cupsdSetString(&job->printer->alert_description, attr); event |= CUPSD_EVENT_PRINTER_STATE; } if ((attr = cupsGetOption("marker-colors", num_attrs, attrs)) != NULL) { cupsdSetPrinterAttr(job->printer, "marker-colors", (char *)attr); job->printer->marker_time = time(NULL); event |= CUPSD_EVENT_PRINTER_STATE; cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); } if ((attr = cupsGetOption("marker-levels", num_attrs, attrs)) != NULL) { cupsdSetPrinterAttr(job->printer, "marker-levels", (char *)attr); job->printer->marker_time = time(NULL); event |= CUPSD_EVENT_PRINTER_STATE; cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); } if ((attr = cupsGetOption("marker-low-levels", num_attrs, attrs)) != NULL) { cupsdSetPrinterAttr(job->printer, "marker-low-levels", (char *)attr); job->printer->marker_time = time(NULL); event |= CUPSD_EVENT_PRINTER_STATE; cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); } if ((attr = cupsGetOption("marker-high-levels", num_attrs, attrs)) != NULL) { cupsdSetPrinterAttr(job->printer, "marker-high-levels", (char *)attr); job->printer->marker_time = time(NULL); event |= CUPSD_EVENT_PRINTER_STATE; cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); } if ((attr = cupsGetOption("marker-message", num_attrs, attrs)) != NULL) { cupsdSetPrinterAttr(job->printer, "marker-message", (char *)attr); job->printer->marker_time = time(NULL); event |= CUPSD_EVENT_PRINTER_STATE; cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); } if ((attr = cupsGetOption("marker-names", num_attrs, attrs)) != NULL) { cupsdSetPrinterAttr(job->printer, "marker-names", (char *)attr); job->printer->marker_time = time(NULL); event |= CUPSD_EVENT_PRINTER_STATE; cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); } if ((attr = cupsGetOption("marker-types", num_attrs, attrs)) != NULL) { cupsdSetPrinterAttr(job->printer, "marker-types", (char *)attr); job->printer->marker_time = time(NULL); event |= CUPSD_EVENT_PRINTER_STATE; cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); } cupsFreeOptions(num_attrs, attrs); } else if (loglevel == CUPSD_LOG_PPD) { /* * Set attribute(s)... */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "PPD: %s", message); job->num_keywords = cupsParseOptions(message, job->num_keywords, &job->keywords); } else { /* * Strip legacy message prefix... */ if (!strncmp(message, "recoverable:", 12)) { ptr = message + 12; while (isspace(*ptr & 255)) ptr ++; } else if (!strncmp(message, "recovered:", 10)) { ptr = message + 10; while (isspace(*ptr & 255)) ptr ++; } else ptr = message; if (*ptr) cupsdLogJob(job, loglevel == CUPSD_LOG_INFO ? CUPSD_LOG_DEBUG : loglevel, "%s", ptr); if (loglevel < CUPSD_LOG_DEBUG && strcmp(job->printer->state_message, ptr)) { strlcpy(job->printer->state_message, ptr, sizeof(job->printer->state_message)); event |= CUPSD_EVENT_PRINTER_STATE | CUPSD_EVENT_JOB_PROGRESS; if (loglevel <= job->status_level && job->status_level > CUPSD_LOG_ERROR) { /* * Some messages show in the job-printer-state-message attribute... */ if (loglevel != CUPSD_LOG_NOTICE) job->status_level = loglevel; update_job_attrs(job, 1); cupsdLogJob(job, CUPSD_LOG_DEBUG, "Set job-printer-state-message to \"%s\", " "current level=%s", job->printer_message->values[0].string.text, levels[job->status_level]); } } } if (!strchr(job->status_buffer->buffer, '\n')) break; } if (event & CUPSD_EVENT_JOB_PROGRESS) cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job, "%s", job->printer->state_message); if (event & CUPSD_EVENT_PRINTER_STATE) cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, job->printer, NULL, (job->printer->type & CUPS_PRINTER_CLASS) ? "Class \"%s\" state changed." : "Printer \"%s\" state changed.", job->printer->name); if (ptr == NULL && !job->status_buffer->bufused) { /* * See if all of the filters and the backend have returned their * exit statuses. */ for (i = 0; job->filters[i] < 0; i ++); if (job->filters[i]) { /* * EOF but we haven't collected the exit status of all filters... */ cupsdCheckProcess(); return; } if (job->current_file >= job->num_files && job->backend > 0) { /* * EOF but we haven't collected the exit status of the backend... */ cupsdCheckProcess(); return; } /* * Handle the end of job stuff... */ finalize_job(job, 1); /* * Try printing another job... */ if (printer->state != IPP_PRINTER_STOPPED) cupsdCheckJobs(); } } /* * 'update_job_attrs()' - Update the job-printer-* attributes. */ void update_job_attrs(cupsd_job_t *job, /* I - Job to update */ int do_message)/* I - 1 = copy job-printer-state message */ { int i; /* Looping var */ int num_reasons; /* Actual number of reasons */ const char * const *reasons; /* Reasons */ static const char *none = "none"; /* "none" reason */ /* * Get/create the job-printer-state-* attributes... */ if (!job->printer_message) { if ((job->printer_message = ippFindAttribute(job->attrs, "job-printer-state-message", IPP_TAG_TEXT)) == NULL) job->printer_message = ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_TEXT, "job-printer-state-message", NULL, ""); } if (!job->printer_reasons) job->printer_reasons = ippFindAttribute(job->attrs, "job-printer-state-reasons", IPP_TAG_KEYWORD); /* * Copy or clear the printer-state-message value as needed... */ if (job->state_value != IPP_JOB_PROCESSING && job->status_level == CUPSD_LOG_INFO) { ippSetString(job->attrs, &job->printer_message, 0, ""); job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); } else if (job->printer->state_message[0] && do_message) { ippSetString(job->attrs, &job->printer_message, 0, job->printer->state_message); job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); } /* * ... and the printer-state-reasons value... */ if (job->printer->num_reasons == 0) { num_reasons = 1; reasons = &none; } else { num_reasons = job->printer->num_reasons; reasons = (const char * const *)job->printer->reasons; } if (!job->printer_reasons || job->printer_reasons->num_values != num_reasons) { /* * Replace/create a job-printer-state-reasons attribute... */ ippDeleteAttribute(job->attrs, job->printer_reasons); job->printer_reasons = ippAddStrings(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-printer-state-reasons", num_reasons, NULL, NULL); } else { /* * Don't bother clearing the reason strings if they are the same... */ for (i = 0; i < num_reasons; i ++) if (strcmp(job->printer_reasons->values[i].string.text, reasons[i])) break; if (i >= num_reasons) return; /* * Not the same, so free the current strings... */ for (i = 0; i < num_reasons; i ++) _cupsStrFree(job->printer_reasons->values[i].string.text); } /* * Copy the reasons... */ for (i = 0; i < num_reasons; i ++) job->printer_reasons->values[i].string.text = _cupsStrAlloc(reasons[i]); job->dirty = 1; cupsdMarkDirty(CUPSD_DIRTY_JOBS); } cups-2.2.7/scheduler/job.h000664 000765 000024 00000014604 13255074424 016061 0ustar00msweetstaff000000 000000 /* * Print job definitions for the CUPS scheduler. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Constants... */ typedef enum cupsd_jobaction_e /**** Actions for state changes ****/ { CUPSD_JOB_DEFAULT, /* Use default action */ CUPSD_JOB_FORCE, /* Force the change */ CUPSD_JOB_PURGE /* Force the change and purge */ } cupsd_jobaction_t; /* * Job request structure... */ struct cupsd_job_s /**** Job request ****/ { int id, /* Job ID */ priority, /* Job priority */ dirty; /* Do we need to write the "c" file? */ ipp_jstate_t state_value; /* Cached job-state */ int pending_timeout;/* Non-zero if the job was created and * waiting on files */ char *username; /* Printing user */ char *dest; /* Destination printer or class */ char *name; /* Job name/title */ int koctets; /* job-k-octets */ cups_ptype_t dtype; /* Destination type */ cupsd_printer_t *printer; /* Printer this job is assigned to */ int num_files; /* Number of files in job */ mime_type_t **filetypes; /* File types */ int *compressions; /* Compression status of each file */ ipp_attribute_t *impressions, /* job-impressions-completed */ *sheets; /* job-media-sheets-completed */ time_t access_time, /* Last access time */ cancel_time, /* When to cancel/send SIGTERM */ creation_time, /* When job was created */ completed_time, /* When job was completed (0 if not) */ file_time, /* Job file retain time */ history_time, /* Job history retain time */ hold_until, /* Hold expiration date/time */ kill_time; /* When to send SIGKILL */ ipp_attribute_t *state; /* Job state */ ipp_attribute_t *reasons; /* Job state reasons */ ipp_attribute_t *job_sheets; /* Job sheets (NULL if none) */ ipp_attribute_t *printer_message, /* job-printer-state-message */ *printer_reasons; /* job-printer-state-reasons */ int current_file; /* Current file in job */ ipp_t *attrs; /* Job attributes */ int print_pipes[2], /* Print data pipes */ back_pipes[2], /* Backchannel pipes */ side_pipes[2], /* Sidechannel pipes */ status_pipes[2];/* Status pipes */ cupsd_statbuf_t *status_buffer; /* Status buffer for this job */ int status_level; /* Highest log level in a status * message */ int cost; /* Filtering cost */ int pending_cost; /* Waiting for FilterLimit */ int filters[MAX_FILTERS + 1]; /* Filter process IDs, 0 terminated */ int backend; /* Backend process ID */ int status; /* Status code from filters */ int tries; /* Number of tries for this job */ int completed; /* cups-waiting-for-job-completed seen */ int retry_as_raster;/* Need to retry the job as raster */ char *auth_env[3], /* AUTH_xxx environment variables, * if any */ *auth_uid; /* AUTH_UID environment variable */ void *profile, /* Security profile for filters */ *bprofile; /* Security profile for backend */ cups_array_t *history; /* Debug log history */ int progress; /* Printing progress */ int num_keywords; /* Number of PPD keywords */ cups_option_t *keywords; /* PPD keywords */ }; typedef struct cupsd_joblog_s /**** Job log message ****/ { time_t time; /* Time of message */ char message[1]; /* Message string */ } cupsd_joblog_t; /* * Globals... */ VAR int JobHistory VALUE(INT_MAX); /* Preserve job history? */ VAR int JobFiles VALUE(86400); /* Preserve job files? */ VAR time_t JobHistoryUpdate VALUE(0); /* Time for next job history update */ VAR int MaxJobs VALUE(0), /* Max number of jobs */ MaxActiveJobs VALUE(0), /* Max number of active jobs */ MaxHoldTime VALUE(0), /* Max time for indefinite hold */ MaxJobsPerUser VALUE(0), /* Max jobs per user */ MaxJobsPerPrinter VALUE(0), /* Max jobs per printer */ MaxJobTime VALUE(3 * 60 * 60); /* Max time for a job */ VAR int JobAutoPurge VALUE(0); /* Automatically purge jobs */ VAR cups_array_t *Jobs VALUE(NULL), /* List of current jobs */ *ActiveJobs VALUE(NULL), /* List of active jobs */ *PrintingJobs VALUE(NULL); /* List of jobs that are printing */ VAR int NextJobId VALUE(1); /* Next job ID to use */ VAR int JobKillDelay VALUE(DEFAULT_TIMEOUT), /* Delay before killing jobs */ JobRetryLimit VALUE(5), /* Max number of tries */ JobRetryInterval VALUE(300); /* Seconds between retries */ /* * Prototypes... */ extern cupsd_job_t *cupsdAddJob(int priority, const char *dest); extern void cupsdCancelJobs(const char *dest, const char *username, int purge); extern void cupsdCheckJobs(void); extern void cupsdCleanJobs(void); extern void cupsdContinueJob(cupsd_job_t *job); extern void cupsdDeleteJob(cupsd_job_t *job, cupsd_jobaction_t action); extern cupsd_job_t *cupsdFindJob(int id); extern void cupsdFreeAllJobs(void); extern cups_array_t *cupsdGetCompletedJobs(cupsd_printer_t *p); extern int cupsdGetPrinterJobCount(const char *dest); extern int cupsdGetUserJobCount(const char *username); extern void cupsdLoadAllJobs(void); extern int cupsdLoadJob(cupsd_job_t *job); extern void cupsdMoveJob(cupsd_job_t *job, cupsd_printer_t *p); extern void cupsdReleaseJob(cupsd_job_t *job); extern void cupsdRestartJob(cupsd_job_t *job); extern void cupsdSaveAllJobs(void); extern void cupsdSaveJob(cupsd_job_t *job); extern void cupsdSetJobHoldUntil(cupsd_job_t *job, const char *when, int update); extern void cupsdSetJobPriority(cupsd_job_t *job, int priority); extern void cupsdSetJobState(cupsd_job_t *job, ipp_jstate_t newstate, cupsd_jobaction_t action, const char *message, ...) __attribute__((__format__(__printf__, 4, 5))); extern void cupsdStopAllJobs(cupsd_jobaction_t action, int kill_delay); extern int cupsdTimeoutJob(cupsd_job_t *job); extern void cupsdUnloadCompletedJobs(void); extern void cupsdUpdateJobs(void); cups-2.2.7/scheduler/libcupsmime.exp000664 000765 000024 00000000503 13255074424 020156 0ustar00msweetstaff000000 000000 _mimeAddFilter _mimeAddType _mimeAddTypeRule _mimeDelete _mimeDeleteFilter _mimeDeleteType _mimeFileType _mimeFilter _mimeFilter2 _mimeFilterLookup _mimeFirstFilter _mimeFirstType _mimeLoad _mimeLoadFilters _mimeLoadTypes _mimeNew _mimeNextFilter _mimeNextType _mimeNumFilters _mimeNumTypes _mimeSetErrorCallback _mimeType cups-2.2.7/scheduler/listen.c000664 000765 000024 00000015263 13255074424 016602 0ustar00msweetstaff000000 000000 /* * Server listening routines for the CUPS scheduler. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" /* * Make sure the IPV6_V6ONLY is defined on Linux - older versions of * glibc don't define it even if the kernel supports it... */ #if defined(__linux) && !defined(IPV6_V6ONLY) # define IPV6_V6ONLY 26 #endif /* __linux && !IPV6_V6ONLY */ /* * 'cupsdDeleteAllListeners()' - Delete all listeners. */ void cupsdDeleteAllListeners(void) { cupsd_listener_t *lis; /* Current listening socket */ for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); lis; lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) #ifdef HAVE_ONDEMAND if (!lis->on_demand) #endif /* HAVE_ONDEMAND */ { cupsArrayRemove(Listeners, lis); free(lis); } if (cupsArrayCount(Listeners) == 0) { cupsArrayDelete(Listeners); Listeners = NULL; } } /* * 'cupsdPauseListening()' - Clear input polling on all listening sockets... */ void cupsdPauseListening(void) { cupsd_listener_t *lis; /* Current listening socket */ if (cupsArrayCount(Listeners) < 1) return; if (cupsArrayCount(Clients) == MaxClients) cupsdLogMessage(CUPSD_LOG_WARN, "Max clients reached, holding new connections..."); else if (errno == ENFILE || errno == EMFILE) cupsdLogMessage(CUPSD_LOG_WARN, "Too many open files, holding new connections for " "30 seconds..."); cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdPauseListening: Clearing input bits..."); for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); lis; lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) cupsdRemoveSelect(lis->fd); ListeningPaused = time(NULL) + 30; } /* * 'cupsdResumeListening()' - Set input polling on all listening sockets... */ void cupsdResumeListening(void) { cupsd_listener_t *lis; /* Current listening socket */ if (cupsArrayCount(Listeners) < 1) return; cupsdLogMessage(CUPSD_LOG_INFO, "Resuming new connection processing..."); cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdResumeListening: Setting input bits..."); for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); lis; lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) cupsdAddSelect(lis->fd, (cupsd_selfunc_t)cupsdAcceptClient, NULL, lis); ListeningPaused = 0; } /* * 'cupsdStartListening()' - Create all listening sockets... */ void cupsdStartListening(void) { int p; /* Port number */ cupsd_listener_t *lis; /* Current listening socket */ char s[256]; /* String addresss */ const char *have_domain; /* Have a domain socket? */ static const char * const encryptions[] = { /* Encryption values */ "IfRequested", "Never", "Required", "Always" }; cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartListening: %d Listeners", cupsArrayCount(Listeners)); /* * Setup socket listeners... */ for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners), LocalPort = 0, have_domain = NULL; lis; lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) { httpAddrString(&(lis->address), s, sizeof(s)); p = httpAddrPort(&(lis->address)); /* * If needed, create a socket for listening... */ if (lis->fd == -1) { /* * Create a socket for listening... */ lis->fd = httpAddrListen(&(lis->address), p); if (lis->fd == -1) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open listen socket for address %s:%d - %s.", s, p, strerror(errno)); #ifdef AF_INET6 /* * IPv6 is often disabled while DNS returns IPv6 addresses... */ if (lis->address.addr.sa_family != AF_INET6 && (FatalErrors & CUPSD_FATAL_LISTEN)) cupsdEndProcess(getpid(), 0); #else if (FatalErrors & CUPSD_FATAL_LISTEN) cupsdEndProcess(getpid(), 0); #endif /* AF_INET6 */ continue; } } if (p) cupsdLogMessage(CUPSD_LOG_INFO, "Listening to %s:%d on fd %d...", s, p, lis->fd); else cupsdLogMessage(CUPSD_LOG_INFO, "Listening to %s on fd %d...", s, lis->fd); /* * Save the first port that is bound to the local loopback or * "any" address... */ if ((!LocalPort || LocalEncryption == HTTP_ENCRYPT_ALWAYS) && p > 0 && (httpAddrLocalhost(&(lis->address)) || httpAddrAny(&(lis->address)))) { LocalPort = p; LocalEncryption = lis->encryption; } #ifdef AF_LOCAL if (lis->address.addr.sa_family == AF_LOCAL && !have_domain) have_domain = lis->address.un.sun_path; #endif /* AF_LOCAL */ } /* * Make sure that we are listening on localhost! */ if (!LocalPort && !have_domain) { cupsdLogMessage(CUPSD_LOG_EMERG, "No Listen or Port lines were found to allow access via " "localhost."); if (FatalErrors & (CUPSD_FATAL_CONFIG | CUPSD_FATAL_LISTEN)) cupsdEndProcess(getpid(), 0); } /* * Set the CUPS_SERVER, IPP_PORT, and CUPS_ENCRYPTION variables based on * the listeners... */ if (have_domain) { /* * Use domain sockets for the local connection... */ cupsdSetEnv("CUPS_SERVER", have_domain); LocalEncryption = HTTP_ENCRYPT_IF_REQUESTED; } else { /* * Use the default local loopback address for the server... */ cupsdSetEnv("CUPS_SERVER", "localhost"); } cupsdSetEnv("CUPS_ENCRYPTION", encryptions[LocalEncryption]); if (LocalPort) cupsdSetEnvf("IPP_PORT", "%d", LocalPort); /* * Resume listening for connections... */ cupsdResumeListening(); } /* * 'cupsdStopListening()' - Close all listening sockets... */ void cupsdStopListening(void) { cupsd_listener_t *lis; /* Current listening socket */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStopListening: closing all listen sockets."); cupsdPauseListening(); for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); lis; lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) { #ifdef HAVE_ONDEMAND if (!lis->on_demand && lis->fd != -1) { httpAddrClose(&(lis->address), lis->fd); lis->fd = -1; } #else if (lis->fd != -1) { httpAddrClose(&(lis->address), lis->fd); lis->fd = -1; } #endif /* HAVE_ONDEMAND */ } } cups-2.2.7/scheduler/log.c000664 000765 000024 00000103620 13255074424 016060 0ustar00msweetstaff000000 000000 /* * Log file routines for the CUPS scheduler. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #include #ifdef HAVE_ASL_H # include #elif defined(HAVE_SYSTEMD_SD_JOURNAL_H) # define SD_JOURNAL_SUPPRESS_LOCATION # include #endif /* HAVE_ASL_H */ #include /* * Constants for log keys from PWG 5110.3 (PWG Common Log Format)... */ #define PWG_DeviceUUID "DUU" #define PWG_Event "E" #define PWG_LogNaturalLanguage "NL" #define PWG_Status "S" #define PWG_ServiceURI "URI" #define PWG_UserHost "UH" #define PWG_UserName "UN" #define PWG_UserURI "UU" #define PWG_ServiceIsAcceptingJobs "IAJ" #define PWG_ServiceState "ST" #define PWG_ServiceStateReasons "SR" #define PWG_ServiceUUID "SUU" #define PWG_JobID "JID" #define PWG_JobUUID "JUU" #define PWG_JobImagesCompleted "JIM" #define PWG_JobImpressionsCompleted "JIC" #define PWG_JobDestinationURI "JD" #define PWG_JobState "JS" #define PWG_JobStateReasons "JR" #define PWG_JobAccountingID "JA" #define PWG_JobAcountingUserName "JAUN" #define PWG_JobAccountingUserURI "JAUU" /* * Local globals... */ static _cups_mutex_t log_mutex = _CUPS_MUTEX_INITIALIZER; /* Mutex for logging */ static size_t log_linesize = 0; /* Size of line for output file */ static char *log_line = NULL; /* Line for output file */ #ifdef HAVE_ASL_H static const int log_levels[] = /* ASL levels... */ { ASL_LEVEL_EMERG, ASL_LEVEL_EMERG, ASL_LEVEL_ALERT, ASL_LEVEL_CRIT, ASL_LEVEL_ERR, ASL_LEVEL_WARNING, ASL_LEVEL_NOTICE, ASL_LEVEL_INFO, ASL_LEVEL_DEBUG, ASL_LEVEL_DEBUG }; #elif defined(HAVE_VSYSLOG) || defined(HAVE_SYSTEMD_SD_JOURNAL_H) static const int log_levels[] = /* SYSLOG levels... */ { 0, LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO, LOG_DEBUG, LOG_DEBUG }; #endif /* HAVE_ASL_H */ /* * Local functions... */ static int format_log_line(const char *message, va_list ap); /* * 'cupsdCheckLogFile()' - Open/rotate a log file if it needs it. */ int /* O - 1 if log file open */ cupsdCheckLogFile(cups_file_t **lf, /* IO - Log file */ const char *logname) /* I - Log filename */ { char backname[1024], /* Backup log filename */ filename[1024], /* Formatted log filename */ *ptr; /* Pointer into filename */ const char *logptr; /* Pointer into log filename */ /* * See if we have a log file to check... */ if (!lf || !logname || !logname[0]) return (1); /* * Handle logging to stderr... */ if (!strcmp(logname, "stderr")) { *lf = LogStderr; return (1); } /* * Format the filename as needed... */ if (!*lf || (strncmp(logname, "/dev/", 5) && cupsFileTell(*lf) > MaxLogSize && MaxLogSize > 0)) { /* * Handle format strings... */ filename[sizeof(filename) - 1] = '\0'; if (logname[0] != '/') { strlcpy(filename, ServerRoot, sizeof(filename)); strlcat(filename, "/", sizeof(filename)); } else filename[0] = '\0'; for (logptr = logname, ptr = filename + strlen(filename); *logptr && ptr < (filename + sizeof(filename) - 1); logptr ++) if (*logptr == '%') { /* * Format spec... */ logptr ++; if (*logptr == 's') { /* * Insert the server name... */ strlcpy(ptr, ServerName, sizeof(filename) - (size_t)(ptr - filename)); ptr += strlen(ptr); } else { /* * Otherwise just insert the character... */ *ptr++ = *logptr; } } else *ptr++ = *logptr; *ptr = '\0'; } /* * See if the log file is open... */ if (!*lf) { /* * Nope, open the log file... */ if ((*lf = cupsFileOpen(filename, "a")) == NULL) { /* * If the file is in CUPS_LOGDIR then try to create a missing directory... */ if (!strncmp(filename, CUPS_LOGDIR, strlen(CUPS_LOGDIR))) { /* * Try updating the permissions of the containing log directory, using * the log file permissions as a basis... */ mode_t log_dir_perm = (mode_t)(0300 | LogFilePerm); /* LogFilePerm + owner write/search */ if (log_dir_perm & 0040) log_dir_perm |= 0010; /* Add group search */ if (log_dir_perm & 0004) log_dir_perm |= 0001; /* Add other search */ cupsdCheckPermissions(CUPS_LOGDIR, NULL, log_dir_perm, RunUser, Group, 1, -1); *lf = cupsFileOpen(filename, "a"); } if (*lf == NULL) { #ifdef HAVE_SYSTEMD_SD_JOURNAL_H sd_journal_print(LOG_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno)); #else syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno)); #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ if (FatalErrors & CUPSD_FATAL_LOG) cupsdEndProcess(getpid(), 0); return (0); } } if (strncmp(filename, "/dev/", 5)) { /* * Change ownership and permissions of non-device logs... */ fchown(cupsFileNumber(*lf), RunUser, Group); fchmod(cupsFileNumber(*lf), LogFilePerm); } } /* * Do we need to rotate the log? */ if (strncmp(logname, "/dev/", 5) && cupsFileTell(*lf) > MaxLogSize && MaxLogSize > 0) { /* * Rotate log file... */ cupsFileClose(*lf); strlcpy(backname, filename, sizeof(backname)); strlcat(backname, ".O", sizeof(backname)); unlink(backname); rename(filename, backname); if ((*lf = cupsFileOpen(filename, "a")) == NULL) { #ifdef HAVE_SYSTEMD_SD_JOURNAL_H sd_journal_print(LOG_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno)); #else syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno)); #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ if (FatalErrors & CUPSD_FATAL_LOG) cupsdEndProcess(getpid(), 0); return (0); } /* * Change ownership and permissions of non-device logs... */ fchown(cupsFileNumber(*lf), RunUser, Group); fchmod(cupsFileNumber(*lf), LogFilePerm); } return (1); } /* * 'cupsdGetDateTime()' - Returns a pointer to a date/time string. */ char * /* O - Date/time string */ cupsdGetDateTime(struct timeval *t, /* I - Time value or NULL for current */ cupsd_time_t format) /* I - Format to use */ { struct timeval curtime; /* Current time value */ struct tm *date; /* Date/time value */ static struct timeval last_time = { 0, 0 }; /* Last time we formatted */ static char s[1024]; /* Date/time string */ static const char * const months[12] =/* Months */ { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; /* * Make sure we have a valid time... */ if (!t) { gettimeofday(&curtime, NULL); t = &curtime; } if (t->tv_sec != last_time.tv_sec || (LogTimeFormat == CUPSD_TIME_USECS && t->tv_usec != last_time.tv_usec)) { last_time = *t; /* * Get the date and time from the UNIX time value, and then format it * into a string. Note that we *can't* use the strftime() function since * it is localized and will seriously confuse automatic programs if the * month names are in the wrong language! * * Also, we use the "timezone" variable that contains the current timezone * offset from GMT in seconds so that we are reporting local time in the * log files. If you want GMT, set the TZ environment variable accordingly * before starting the scheduler. * * (*BSD and Darwin store the timezone offset in the tm structure) */ date = localtime(&(t->tv_sec)); if (format == CUPSD_TIME_STANDARD) snprintf(s, sizeof(s), "[%02d/%s/%04d:%02d:%02d:%02d %+03ld%02ld]", date->tm_mday, months[date->tm_mon], 1900 + date->tm_year, date->tm_hour, date->tm_min, date->tm_sec, #ifdef HAVE_TM_GMTOFF date->tm_gmtoff / 3600, (date->tm_gmtoff / 60) % 60); #else timezone / 3600, (timezone / 60) % 60); #endif /* HAVE_TM_GMTOFF */ else snprintf(s, sizeof(s), "[%02d/%s/%04d:%02d:%02d:%02d.%06d %+03ld%02ld]", date->tm_mday, months[date->tm_mon], 1900 + date->tm_year, date->tm_hour, date->tm_min, date->tm_sec, (int)t->tv_usec, #ifdef HAVE_TM_GMTOFF date->tm_gmtoff / 3600, (date->tm_gmtoff / 60) % 60); #else timezone / 3600, (timezone / 60) % 60); #endif /* HAVE_TM_GMTOFF */ } return (s); } /* * 'cupsdLogFCMessage()' - Log a file checking message. */ void cupsdLogFCMessage( void *context, /* I - Printer (if any) */ _cups_fc_result_t result, /* I - Check result */ const char *message) /* I - Message to log */ { cupsd_printer_t *p = (cupsd_printer_t *)context; /* Printer */ cupsd_loglevel_t level; /* Log level */ if (result == _CUPS_FILE_CHECK_OK) level = CUPSD_LOG_DEBUG2; else level = CUPSD_LOG_ERROR; if (p) { cupsdLogMessage(level, "%s: %s", p->name, message); if (result == _CUPS_FILE_CHECK_MISSING || result == _CUPS_FILE_CHECK_WRONG_TYPE) { strlcpy(p->state_message, message, sizeof(p->state_message)); if (cupsdSetPrinterReasons(p, "+cups-missing-filter-warning")) cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, p, NULL, "%s", message); } else if (result == _CUPS_FILE_CHECK_PERMISSIONS || result == _CUPS_FILE_CHECK_RELATIVE_PATH) { strlcpy(p->state_message, message, sizeof(p->state_message)); if (cupsdSetPrinterReasons(p, "+cups-insecure-filter-warning")) cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, p, NULL, "%s", message); } } else cupsdLogMessage(level, "%s", message); } #ifdef HAVE_GSSAPI /* * 'cupsdLogGSSMessage()' - Log a GSSAPI error... */ int /* O - 1 on success, 0 on error */ cupsdLogGSSMessage( int level, /* I - Log level */ OM_uint32 major_status, /* I - Major GSSAPI status */ OM_uint32 minor_status, /* I - Minor GSSAPI status */ const char *message, /* I - printf-style message string */ ...) /* I - Additional args as needed */ { OM_uint32 err_major_status, /* Major status code for display */ err_minor_status; /* Minor status code for display */ OM_uint32 msg_ctx; /* Message context */ gss_buffer_desc major_status_string = GSS_C_EMPTY_BUFFER, /* Major status message */ minor_status_string = GSS_C_EMPTY_BUFFER; /* Minor status message */ int ret; /* Return value */ char buffer[8192]; /* Buffer for vsnprintf */ if (strchr(message, '%')) { /* * Format the message string... */ va_list ap; /* Pointer to arguments */ va_start(ap, message); vsnprintf(buffer, sizeof(buffer), message, ap); va_end(ap); message = buffer; } msg_ctx = 0; err_major_status = gss_display_status(&err_minor_status, major_status, GSS_C_GSS_CODE, GSS_C_NO_OID, &msg_ctx, &major_status_string); if (!GSS_ERROR(err_major_status)) gss_display_status(&err_minor_status, minor_status, GSS_C_MECH_CODE, GSS_C_NULL_OID, &msg_ctx, &minor_status_string); ret = cupsdLogMessage(level, "%s: %s, %s", message, (char *)major_status_string.value, (char *)minor_status_string.value); gss_release_buffer(&err_minor_status, &major_status_string); gss_release_buffer(&err_minor_status, &minor_status_string); return (ret); } #endif /* HAVE_GSSAPI */ /* * 'cupsdLogClient()' - Log a client message. */ int /* O - 1 on success, 0 on error */ cupsdLogClient(cupsd_client_t *con, /* I - Client connection */ int level, /* I - Log level */ const char *message, /* I - Printf-style message string */ ...) /* I - Additional arguments as needed */ { va_list ap, ap2; /* Argument pointers */ char clientmsg[1024];/* Format string for client message */ int status; /* Formatting status */ /* * See if we want to log this message... */ if (TestConfigFile || !ErrorLog) return (1); if (level > LogLevel) return (1); /* * Format and write the log message... */ if (con) snprintf(clientmsg, sizeof(clientmsg), "[Client %d] %s", con->number, message); else strlcpy(clientmsg, message, sizeof(clientmsg)); va_start(ap, message); do { va_copy(ap2, ap); status = format_log_line(clientmsg, ap2); va_end(ap2); } while (status == 0); va_end(ap); if (status > 0) return (cupsdWriteErrorLog(level, log_line)); else return (cupsdWriteErrorLog(CUPSD_LOG_ERROR, "Unable to allocate memory for log line.")); } /* * 'cupsdLogJob()' - Log a job message. */ int /* O - 1 on success, 0 on error */ cupsdLogJob(cupsd_job_t *job, /* I - Job */ int level, /* I - Log level */ const char *message, /* I - Printf-style message string */ ...) /* I - Additional arguments as needed */ { va_list ap, ap2; /* Argument pointers */ char jobmsg[1024]; /* Format string for job message */ int status; /* Formatting status */ /* * See if we want to log this message... */ if (TestConfigFile || !ErrorLog) return (1); if (level > LogLevel && LogDebugHistory <= 0) return (1); #ifdef HAVE_SYSTEMD_SD_JOURNAL_H if (!strcmp(ErrorLog, "syslog")) { cupsd_printer_t *printer = job ? (job->printer ? job->printer : (job->dest ? cupsdFindDest(job->dest) : NULL)) : NULL; static const char * const job_states[] = { /* job-state strings */ "Pending", "PendingHeld", "Processing", "ProcessingStopped", "Canceled", "Aborted", "Completed" }; va_start(ap, message); do { va_copy(ap2, ap); status = format_log_line(message, ap2); va_end(ap2); } while (status == 0); va_end(ap); if (job) sd_journal_send("MESSAGE=%s", log_line, "PRIORITY=%i", log_levels[level], PWG_Event"=JobStateChanged", PWG_ServiceURI"=%s", printer ? printer->uri : "", PWG_JobID"=%d", job->id, PWG_JobState"=%s", job->state_value < IPP_JSTATE_PENDING ? "" : job_states[job->state_value - IPP_JSTATE_PENDING], PWG_JobImpressionsCompleted"=%d", ippGetInteger(job->impressions, 0), NULL); else sd_journal_send("MESSAGE=%s", log_line, "PRIORITY=%i", log_levels[level], NULL); return (1); } #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ /* * Format and write the log message... */ if (job) snprintf(jobmsg, sizeof(jobmsg), "[Job %d] %s", job->id, message); else strlcpy(jobmsg, message, sizeof(jobmsg)); va_start(ap, message); do { va_copy(ap2, ap); status = format_log_line(jobmsg, ap2); va_end(ap2); } while (status == 0); va_end(ap); if (status > 0) { if (job && level > LogLevel && LogDebugHistory > 0) { /* * Add message to the job history... */ cupsd_joblog_t *temp; /* Copy of log message */ size_t log_len = strlen(log_line); /* Length of log message */ if ((temp = malloc(sizeof(cupsd_joblog_t) + log_len)) != NULL) { temp->time = time(NULL); memcpy(temp->message, log_line, log_len + 1); } if (!job->history) job->history = cupsArrayNew(NULL, NULL); if (job->history && temp) { cupsArrayAdd(job->history, temp); if (cupsArrayCount(job->history) > LogDebugHistory) { /* * Remove excess messages... */ temp = cupsArrayFirst(job->history); cupsArrayRemove(job->history, temp); free(temp); } } else if (temp) free(temp); return (1); } else if (level <= LogLevel) return (cupsdWriteErrorLog(level, log_line)); else return (1); } else return (cupsdWriteErrorLog(CUPSD_LOG_ERROR, "Unable to allocate memory for log line.")); } /* * 'cupsdLogMessage()' - Log a message to the error log file. */ int /* O - 1 on success, 0 on error */ cupsdLogMessage(int level, /* I - Log level */ const char *message, /* I - printf-style message string */ ...) /* I - Additional args as needed */ { va_list ap, ap2; /* Argument pointers */ int status; /* Formatting status */ /* * See if we want to log this message... */ if (TestConfigFile && level <= CUPSD_LOG_WARN) { va_start(ap, message); vfprintf(stderr, message, ap); putc('\n', stderr); va_end(ap); return (1); } else if (!ErrorLog && level <= CUPSD_LOG_WARN) { va_start(ap, message); #ifdef HAVE_SYSTEMD_SD_JOURNAL_H sd_journal_printv(log_levels[level], message, ap); #elif defined(HAVE_VSYSLOG) vsyslog(LOG_LPR | log_levels[level], message, ap); #else vfprintf(stderr, message, ap); putc('\n', stderr); #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ va_end(ap); return (1); } else if (level > LogLevel || !ErrorLog) return (1); #ifdef HAVE_SYSTEMD_SD_JOURNAL_H else if (!strcmp(ErrorLog, "syslog")) { va_start(ap, message); sd_journal_printv(log_levels[level], message, ap); va_end(ap); return (1); } #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ /* * Format and write the log message... */ va_start(ap, message); do { va_copy(ap2, ap); status = format_log_line(message, ap2); va_end(ap2); } while (status == 0); va_end(ap); if (status > 0) return (cupsdWriteErrorLog(level, log_line)); else return (cupsdWriteErrorLog(CUPSD_LOG_ERROR, "Unable to allocate memory for log line!")); } /* * 'cupsdLogPage()' - Log a page to the page log file. */ int /* O - 1 on success, 0 on error */ cupsdLogPage(cupsd_job_t *job, /* I - Job being printed */ const char *page) /* I - Page being printed */ { int i; /* Looping var */ char buffer[2048], /* Buffer for page log */ *bufptr, /* Pointer into buffer */ name[256]; /* Attribute name */ const char *format, /* Pointer into PageLogFormat */ *nameend; /* End of attribute name */ ipp_attribute_t *attr; /* Current attribute */ char number[256]; /* Page number */ int copies; /* Number of copies */ /* * Format the line going into the page log... */ if (!PageLogFormat) return (1); strlcpy(number, "1", sizeof(number)); copies = 1; sscanf(page, "%255s%d", number, &copies); for (format = PageLogFormat, bufptr = buffer; *format; format ++) { if (*format == '%') { format ++; switch (*format) { case '%' : /* Literal % */ if (bufptr < (buffer + sizeof(buffer) - 1)) *bufptr++ = '%'; break; case 'p' : /* Printer name */ strlcpy(bufptr, job->dest, sizeof(buffer) - (size_t)(bufptr - buffer)); bufptr += strlen(bufptr); break; case 'j' : /* Job ID */ snprintf(bufptr, sizeof(buffer) - (size_t)(bufptr - buffer), "%d", job->id); bufptr += strlen(bufptr); break; case 'u' : /* Username */ strlcpy(bufptr, job->username ? job->username : "-", sizeof(buffer) - (size_t)(bufptr - buffer)); bufptr += strlen(bufptr); break; case 'T' : /* Date and time */ strlcpy(bufptr, cupsdGetDateTime(NULL, LogTimeFormat), sizeof(buffer) - (size_t)(bufptr - buffer)); bufptr += strlen(bufptr); break; case 'P' : /* Page number */ strlcpy(bufptr, number, sizeof(buffer) - (size_t)(bufptr - buffer)); bufptr += strlen(bufptr); break; case 'C' : /* Number of copies */ snprintf(bufptr, sizeof(buffer) - (size_t)(bufptr - buffer), "%d", copies); bufptr += strlen(bufptr); break; case '{' : /* {attribute} */ if ((nameend = strchr(format, '}')) != NULL && (size_t)(nameend - format - 2) < (sizeof(name) - 1)) { /* * Pull the name from inside the brackets... */ memcpy(name, format + 1, (size_t)(nameend - format - 1)); name[nameend - format - 1] = '\0'; format = nameend; attr = ippFindAttribute(job->attrs, name, IPP_TAG_ZERO); if (!attr && !strcmp(name, "job-billing")) { /* * Handle alias "job-account-id" (which was standardized after * "job-billing" was defined for CUPS... */ attr = ippFindAttribute(job->attrs, "job-account-id", IPP_TAG_ZERO); } else if (!attr && !strcmp(name, "media")) { /* * Handle alias "media-col" which uses dimensions instead of * names... */ attr = ippFindAttribute(job->attrs, "media-col/media-size", IPP_TAG_BEGIN_COLLECTION); } if (attr) { /* * Add the attribute value... */ for (i = 0; i < attr->num_values && bufptr < (buffer + sizeof(buffer) - 1); i ++) { if (i) *bufptr++ = ','; switch (attr->value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : snprintf(bufptr, sizeof(buffer) - (size_t)(bufptr - buffer), "%d", attr->values[i].integer); bufptr += strlen(bufptr); break; case IPP_TAG_BOOLEAN : snprintf(bufptr, sizeof(buffer) - (size_t)(bufptr - buffer), "%d", attr->values[i].boolean); bufptr += strlen(bufptr); break; case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : strlcpy(bufptr, attr->values[i].string.text, sizeof(buffer) - (size_t)(bufptr - buffer)); bufptr += strlen(bufptr); break; case IPP_TAG_BEGIN_COLLECTION : if (!strcmp(attr->name, "media-size")) { ipp_attribute_t *x_dimension = ippFindAttribute(ippGetCollection(attr, 0), "x-dimension", IPP_TAG_INTEGER); ipp_attribute_t *y_dimension = ippFindAttribute(ippGetCollection(attr, 0), "y-dimension", IPP_TAG_INTEGER); /* Media dimensions */ if (x_dimension && y_dimension) { pwg_media_t *pwg = pwgMediaForSize(ippGetInteger(x_dimension, 0), ippGetInteger(y_dimension, 0)); /* PWG media name */ strlcpy(bufptr, pwg->pwg, sizeof(buffer) - (size_t)(bufptr - buffer)); break; } } default : strlcpy(bufptr, "???", sizeof(buffer) - (size_t)(bufptr - buffer)); bufptr += strlen(bufptr); break; } } } else if (bufptr < (buffer + sizeof(buffer) - 1)) *bufptr++ = '-'; break; } default : if (bufptr < (buffer + sizeof(buffer) - 2)) { *bufptr++ = '%'; *bufptr++ = *format; } break; } } else if (bufptr < (buffer + sizeof(buffer) - 1)) *bufptr++ = *format; } *bufptr = '\0'; #ifdef HAVE_SYSTEMD_SD_JOURNAL_H if (!strcmp(PageLog, "syslog")) { static const char * const job_states[] = { /* job-state strings */ "Pending", "PendingHeld", "Processing", "ProcessingStopped", "Canceled", "Aborted", "Completed" }; sd_journal_send("MESSAGE=%s", buffer, "PRIORITY=%i", LOG_INFO, PWG_Event"=JobStateChanged", PWG_ServiceURI"=%s", job->printer->uri, PWG_JobID"=%d", job->id, PWG_JobState"=%s", job_states[job->state_value - IPP_JSTATE_PENDING], PWG_JobImpressionsCompleted"=%d", ippGetInteger(job->impressions, 0), NULL); return (1); } #elif defined(HAVE_VSYSLOG) /* * See if we are logging pages via syslog... */ if (!strcmp(PageLog, "syslog")) { syslog(LOG_INFO, "%s", buffer); return (1); } #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ /* * Not using syslog; check the log file... */ if (!cupsdCheckLogFile(&PageFile, PageLog)) return (0); /* * Print a page log entry of the form: * * printer user job-id [DD/MON/YYYY:HH:MM:SS +TTTT] page num-copies \ * billing hostname */ cupsFilePrintf(PageFile, "%s\n", buffer); cupsFileFlush(PageFile); return (1); } /* * 'cupsdLogRequest()' - Log an HTTP request in Common Log Format. */ int /* O - 1 on success, 0 on error */ cupsdLogRequest(cupsd_client_t *con, /* I - Request to log */ http_status_t code) /* I - Response code */ { char temp[2048]; /* Temporary string for URI */ static const char * const states[] = /* HTTP client states... */ { "WAITING", "OPTIONS", "GET", "GET", "HEAD", "POST", "POST", "POST", "PUT", "PUT", "DELETE", "TRACE", "CLOSE", "STATUS" }; /* * Filter requests as needed... */ if (AccessLogLevel == CUPSD_ACCESSLOG_NONE) return (1); else if (AccessLogLevel < CUPSD_ACCESSLOG_ALL) { /* * Eliminate simple GET, POST, and PUT requests... */ if ((con->operation == HTTP_GET && strncmp(con->uri, "/admin/conf", 11) && strncmp(con->uri, "/admin/log", 10)) || (con->operation == HTTP_POST && !con->request && strncmp(con->uri, "/admin", 6)) || (con->operation != HTTP_GET && con->operation != HTTP_POST && con->operation != HTTP_PUT)) return (1); if (con->request && con->response && (con->response->request.status.status_code < IPP_REDIRECTION_OTHER_SITE || con->response->request.status.status_code == IPP_NOT_FOUND)) { /* * Check successful requests... */ ipp_op_t op = con->request->request.op.operation_id; static cupsd_accesslog_t standard_ops[] = { CUPSD_ACCESSLOG_ALL, /* reserved */ CUPSD_ACCESSLOG_ALL, /* reserved */ CUPSD_ACCESSLOG_ACTIONS,/* Print-Job */ CUPSD_ACCESSLOG_ACTIONS,/* Print-URI */ CUPSD_ACCESSLOG_ACTIONS,/* Validate-Job */ CUPSD_ACCESSLOG_ACTIONS,/* Create-Job */ CUPSD_ACCESSLOG_ACTIONS,/* Send-Document */ CUPSD_ACCESSLOG_ACTIONS,/* Send-URI */ CUPSD_ACCESSLOG_ACTIONS,/* Cancel-Job */ CUPSD_ACCESSLOG_ALL, /* Get-Job-Attributes */ CUPSD_ACCESSLOG_ALL, /* Get-Jobs */ CUPSD_ACCESSLOG_ALL, /* Get-Printer-Attributes */ CUPSD_ACCESSLOG_ACTIONS,/* Hold-Job */ CUPSD_ACCESSLOG_ACTIONS,/* Release-Job */ CUPSD_ACCESSLOG_ACTIONS,/* Restart-Job */ CUPSD_ACCESSLOG_ALL, /* reserved */ CUPSD_ACCESSLOG_CONFIG, /* Pause-Printer */ CUPSD_ACCESSLOG_CONFIG, /* Resume-Printer */ CUPSD_ACCESSLOG_CONFIG, /* Purge-Jobs */ CUPSD_ACCESSLOG_CONFIG, /* Set-Printer-Attributes */ CUPSD_ACCESSLOG_ACTIONS,/* Set-Job-Attributes */ CUPSD_ACCESSLOG_CONFIG, /* Get-Printer-Supported-Values */ CUPSD_ACCESSLOG_ACTIONS,/* Create-Printer-Subscription */ CUPSD_ACCESSLOG_ACTIONS,/* Create-Job-Subscription */ CUPSD_ACCESSLOG_ALL, /* Get-Subscription-Attributes */ CUPSD_ACCESSLOG_ALL, /* Get-Subscriptions */ CUPSD_ACCESSLOG_ACTIONS,/* Renew-Subscription */ CUPSD_ACCESSLOG_ACTIONS,/* Cancel-Subscription */ CUPSD_ACCESSLOG_ALL, /* Get-Notifications */ CUPSD_ACCESSLOG_ACTIONS,/* Send-Notifications */ CUPSD_ACCESSLOG_ALL, /* reserved */ CUPSD_ACCESSLOG_ALL, /* reserved */ CUPSD_ACCESSLOG_ALL, /* reserved */ CUPSD_ACCESSLOG_ALL, /* Get-Print-Support-Files */ CUPSD_ACCESSLOG_CONFIG, /* Enable-Printer */ CUPSD_ACCESSLOG_CONFIG, /* Disable-Printer */ CUPSD_ACCESSLOG_CONFIG, /* Pause-Printer-After-Current-Job */ CUPSD_ACCESSLOG_ACTIONS,/* Hold-New-Jobs */ CUPSD_ACCESSLOG_ACTIONS,/* Release-Held-New-Jobs */ CUPSD_ACCESSLOG_CONFIG, /* Deactivate-Printer */ CUPSD_ACCESSLOG_CONFIG, /* Activate-Printer */ CUPSD_ACCESSLOG_CONFIG, /* Restart-Printer */ CUPSD_ACCESSLOG_CONFIG, /* Shutdown-Printer */ CUPSD_ACCESSLOG_CONFIG, /* Startup-Printer */ CUPSD_ACCESSLOG_ACTIONS,/* Reprocess-Job */ CUPSD_ACCESSLOG_ACTIONS,/* Cancel-Current-Job */ CUPSD_ACCESSLOG_ACTIONS,/* Suspend-Current-Job */ CUPSD_ACCESSLOG_ACTIONS,/* Resume-Job */ CUPSD_ACCESSLOG_ACTIONS,/* Promote-Job */ CUPSD_ACCESSLOG_ACTIONS /* Schedule-Job-After */ }; static cupsd_accesslog_t cups_ops[] = { CUPSD_ACCESSLOG_ALL, /* CUPS-Get-Default */ CUPSD_ACCESSLOG_ALL, /* CUPS-Get-Printers */ CUPSD_ACCESSLOG_CONFIG, /* CUPS-Add-Modify-Printer */ CUPSD_ACCESSLOG_CONFIG, /* CUPS-Delete-Printer */ CUPSD_ACCESSLOG_ALL, /* CUPS-Get-Classes */ CUPSD_ACCESSLOG_CONFIG, /* CUPS-Add-Modify-Class */ CUPSD_ACCESSLOG_CONFIG, /* CUPS-Delete-Class */ CUPSD_ACCESSLOG_CONFIG, /* CUPS-Accept-Jobs */ CUPSD_ACCESSLOG_CONFIG, /* CUPS-Reject-Jobs */ CUPSD_ACCESSLOG_CONFIG, /* CUPS-Set-Default */ CUPSD_ACCESSLOG_CONFIG, /* CUPS-Get-Devices */ CUPSD_ACCESSLOG_CONFIG, /* CUPS-Get-PPDs */ CUPSD_ACCESSLOG_ACTIONS,/* CUPS-Move-Job */ CUPSD_ACCESSLOG_ACTIONS,/* CUPS-Authenticate-Job */ CUPSD_ACCESSLOG_ALL /* CUPS-Get-PPD */ }; if ((op <= IPP_SCHEDULE_JOB_AFTER && standard_ops[op] > AccessLogLevel) || (op >= CUPS_GET_DEFAULT && op <= CUPS_GET_PPD && cups_ops[op - CUPS_GET_DEFAULT] > AccessLogLevel)) return (1); } } #ifdef HAVE_SYSTEMD_SD_JOURNAL_H if (!strcmp(AccessLog, "syslog")) { sd_journal_print(LOG_INFO, "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s", con->http->hostname, con->username[0] != '\0' ? con->username : "-", states[con->operation], _httpEncodeURI(temp, con->uri, sizeof(temp)), con->http->version / 100, con->http->version % 100, code, CUPS_LLCAST con->bytes, con->request ? ippOpString(con->request->request.op.operation_id) : "-", con->response ? ippErrorString(con->response->request.status.status_code) : "-"); return (1); } #elif defined(HAVE_VSYSLOG) /* * See if we are logging accesses via syslog... */ if (!strcmp(AccessLog, "syslog")) { syslog(LOG_INFO, "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s\n", con->http->hostname, con->username[0] != '\0' ? con->username : "-", states[con->operation], _httpEncodeURI(temp, con->uri, sizeof(temp)), con->http->version / 100, con->http->version % 100, code, CUPS_LLCAST con->bytes, con->request ? ippOpString(con->request->request.op.operation_id) : "-", con->response ? ippErrorString(con->response->request.status.status_code) : "-"); return (1); } #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ /* * Not using syslog; check the log file... */ if (!cupsdCheckLogFile(&AccessFile, AccessLog)) return (0); /* * Write a log of the request in "common log format"... */ cupsFilePrintf(AccessFile, "%s - %s %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s\n", con->http->hostname, con->username[0] != '\0' ? con->username : "-", cupsdGetDateTime(&(con->start), LogTimeFormat), states[con->operation], _httpEncodeURI(temp, con->uri, sizeof(temp)), con->http->version / 100, con->http->version % 100, code, CUPS_LLCAST con->bytes, con->request ? ippOpString(con->request->request.op.operation_id) : "-", con->response ? ippErrorString(con->response->request.status.status_code) : "-"); cupsFileFlush(AccessFile); return (1); } /* * 'cupsdWriteErrorLog()' - Write a line to the ErrorLog. */ int /* O - 1 on success, 0 on failure */ cupsdWriteErrorLog(int level, /* I - Log level */ const char *message) /* I - Message string */ { int ret = 1; /* Return value */ static const char levels[] = /* Log levels... */ { ' ', 'X', 'A', 'C', 'E', 'W', 'N', 'I', 'D', 'd' }; #ifdef HAVE_SYSTEMD_SD_JOURNAL_H if (!strcmp(ErrorLog, "syslog")) { sd_journal_print(log_levels[level], "%s", message); return (1); } #elif defined(HAVE_VSYSLOG) /* * See if we are logging errors via syslog... */ if (!strcmp(ErrorLog, "syslog")) { syslog(log_levels[level], "%s", message); return (1); } #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ /* * Not using syslog; check the log file... */ _cupsMutexLock(&log_mutex); if (!cupsdCheckLogFile(&ErrorFile, ErrorLog)) { ret = 0; } else { /* * Write the log message... */ cupsFilePrintf(ErrorFile, "%c %s %s\n", levels[level], cupsdGetDateTime(NULL, LogTimeFormat), message); cupsFileFlush(ErrorFile); } _cupsMutexUnlock(&log_mutex); return (ret); } /* * 'format_log_line()' - Format a line for a log file. * * This function resizes a global string buffer as needed. Each call returns * a pointer to this buffer, so the contents are only good until the next call * to format_log_line()... */ static int /* O - -1 for fatal, 0 for retry, 1 for success */ format_log_line(const char *message, /* I - Printf-style format string */ va_list ap) /* I - Argument list */ { ssize_t len; /* Length of formatted line */ /* * Allocate the line buffer as needed... */ if (!log_linesize) { log_linesize = 8192; log_line = malloc(log_linesize); if (!log_line) return (-1); } /* * Format the log message... */ len = _cups_safe_vsnprintf(log_line, log_linesize, message, ap); /* * Resize the buffer as needed... */ if ((size_t)len >= log_linesize && log_linesize < 65536) { char *temp; /* Temporary string pointer */ len ++; if (len < 8192) len = 8192; else if (len > 65536) len = 65536; temp = realloc(log_line, (size_t)len); if (temp) { log_line = temp; log_linesize = (size_t)len; return (0); } } return (1); } cups-2.2.7/scheduler/main.c000664 000765 000024 00000143402 13255074424 016225 0ustar00msweetstaff000000 000000 /* * Main loop for the CUPS scheduler. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #define _MAIN_C_ #include "cupsd.h" #include #ifdef HAVE_ASL_H # include #elif defined(HAVE_SYSTEMD_SD_JOURNAL_H) # define SD_JOURNAL_SUPPRESS_LOCATION # include #endif /* HAVE_ASL_H */ #include #include #ifdef HAVE_LAUNCH_H # include #endif /* HAVE_LAUNCH_H */ #ifdef HAVE_SYSTEMD # include #endif /* HAVE_SYSTEMD */ #ifdef HAVE_ONDEMAND # define CUPS_KEEPALIVE CUPS_CACHEDIR "/org.cups.cupsd" /* Name of the KeepAlive file */ #endif /* HAVE_ONDEMAND */ #if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO) # include #endif /* HAVE_MALLOC_H && HAVE_MALLINFO */ #ifdef HAVE_NOTIFY_H # include #endif /* HAVE_NOTIFY_H */ #ifdef HAVE_DBUS # include #endif /* HAVE_DBUS */ #ifdef HAVE_SYS_PARAM_H # include #endif /* HAVE_SYS_PARAM_H */ /* * Local functions... */ static void parent_handler(int sig); static void process_children(void); static void sigchld_handler(int sig); static void sighup_handler(int sig); static void sigterm_handler(int sig); static long select_timeout(int fds); static void service_checkin(void); static void service_checkout(int shutdown); static void usage(int status) __attribute__((noreturn)); /* * Local globals... */ static int parent_signal = 0; /* Set to signal number from child */ static int holdcount = 0; /* Number of times "hold" was called */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) static sigset_t holdmask; /* Old POSIX signal mask */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ static int dead_children = 0; /* Dead children? */ static int stop_scheduler = 0; /* Should the scheduler stop? */ static time_t local_timeout = 0; /* Next local printer timeout */ /* * 'main()' - Main entry for the CUPS scheduler. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ char *opt; /* Option character */ int close_all = 1, /* Close all file descriptors? */ disconnect = 1, /* Disconnect from controlling terminal? */ fg = 0, /* Run in foreground? */ run_as_child = 0, /* Running as child process? */ print_profile = 0; /* Print the sandbox profile to stdout? */ int fds; /* Number of ready descriptors */ cupsd_client_t *con; /* Current client */ cupsd_job_t *job; /* Current job */ cupsd_listener_t *lis; /* Current listener */ time_t current_time, /* Current time */ activity, /* Client activity timer */ senddoc_time, /* Send-Document time */ expire_time, /* Subscription expire time */ report_time, /* Malloc/client/job report time */ event_time; /* Last event notification time */ long timeout; /* Timeout for cupsdDoSelect() */ struct rlimit limit; /* Runtime limit */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ #ifdef __APPLE__ int use_sysman = 1; /* Use system management functions? */ #else time_t netif_time = 0; /* Time since last network update */ #endif /* __APPLE__ */ #if defined(HAVE_ONDEMAND) int service_idle_exit; /* Idle exit on select timeout? */ #endif /* HAVE_ONDEMAND */ #ifdef HAVE_GETEUID /* * Check for setuid invocation, which we do not support! */ if (getuid() != geteuid()) { fputs("cupsd: Cannot run as a setuid program.\n", stderr); return (1); } #endif /* HAVE_GETEUID */ /* * Check for command-line arguments... */ fg = 0; #ifdef HAVE_LAUNCHD if (getenv("CUPSD_LAUNCHD")) { OnDemand = 1; fg = 1; close_all = 0; disconnect = 0; } #endif /* HAVE_LAUNCHD */ for (i = 1; i < argc; i ++) if (argv[i][0] == '-') for (opt = argv[i] + 1; *opt != '\0'; opt ++) switch (*opt) { case 'C' : /* Run as child with config file */ run_as_child = 1; fg = 1; close_all = 0; case 'c' : /* Configuration file */ i ++; if (i >= argc) { _cupsLangPuts(stderr, _("cupsd: Expected config filename " "after \"-c\" option.")); usage(1); } if (argv[i][0] == '/') { /* * Absolute directory... */ cupsdSetString(&ConfigurationFile, argv[i]); } else { /* * Relative directory... */ char *current; /* Current directory */ /* * Allocate a buffer for the current working directory to * reduce run-time stack usage; this approximates the * behavior of some implementations of getcwd() when they * are passed a NULL pointer. */ if ((current = malloc(1024)) == NULL) { _cupsLangPuts(stderr, _("cupsd: Unable to get current directory.")); return (1); } if (!getcwd(current, 1024)) { _cupsLangPuts(stderr, _("cupsd: Unable to get current directory.")); free(current); return (1); } cupsdSetStringf(&ConfigurationFile, "%s/%s", current, argv[i]); free(current); } break; case 'f' : /* Run in foreground... */ fg = 1; disconnect = 0; close_all = 0; break; case 'F' : /* Run in foreground, but disconnect from terminal... */ fg = 1; close_all = 0; break; case 'h' : /* Show usage/help */ usage(0); break; case 'l' : /* Started by launchd/systemd/upstart... */ #ifdef HAVE_ONDEMAND OnDemand = 1; fg = 1; close_all = 0; disconnect = 0; #else _cupsLangPuts(stderr, _("cupsd: On-demand support not compiled " "in, running in normal mode.")); fg = 0; disconnect = 1; close_all = 1; #endif /* HAVE_ONDEMAND */ break; case 'p' : /* Stop immediately for profiling */ fputs("cupsd: -p (startup profiling) is for internal testing " "use only!\n", stderr); stop_scheduler = 1; fg = 1; disconnect = 0; close_all = 0; break; case 'P' : /* Disable security profiles */ fputs("cupsd: -P (disable sandboxing) is for internal testing use only.\n", stderr); UseSandboxing = 0; break; case 's' : /* Set cups-files.conf location */ i ++; if (i >= argc) { _cupsLangPuts(stderr, _("cupsd: Expected cups-files.conf " "filename after \"-s\" option.")); usage(1); } if (argv[i][0] != '/') { /* * Relative filename not allowed... */ _cupsLangPuts(stderr, _("cupsd: Relative cups-files.conf " "filename not allowed.")); usage(1); } cupsdSetString(&CupsFilesFile, argv[i]); break; #ifdef __APPLE__ case 'S' : /* Disable system management functions */ fputs("cupsd: -S (disable system management) for internal " "testing use only!\n", stderr); use_sysman = 0; break; #endif /* __APPLE__ */ case 't' : /* Test the cupsd.conf file... */ TestConfigFile = 1; fg = 1; disconnect = 0; close_all = 0; break; case 'T' : /* Print security profile */ print_profile = 1; fg = 1; disconnect = 0; close_all = 0; break; default : /* Unknown option */ _cupsLangPrintf(stderr, _("cupsd: Unknown option \"%c\" - " "aborting."), *opt); usage(1); break; } else { _cupsLangPrintf(stderr, _("cupsd: Unknown argument \"%s\" - aborting."), argv[i]); usage(1); } if (!ConfigurationFile) cupsdSetString(&ConfigurationFile, CUPS_SERVERROOT "/cupsd.conf"); if (!CupsFilesFile) { char *filename, /* Copy of cupsd.conf filename */ *slash; /* Final slash in cupsd.conf filename */ size_t len; /* Size of buffer */ len = strlen(ConfigurationFile) + 15; if ((filename = malloc(len)) == NULL) { _cupsLangPrintf(stderr, _("cupsd: Unable to get path to " "cups-files.conf file.")); return (1); } strlcpy(filename, ConfigurationFile, len); if ((slash = strrchr(filename, '/')) == NULL) { _cupsLangPrintf(stderr, _("cupsd: Unable to get path to " "cups-files.conf file.")); return (1); } strlcpy(slash, "/cups-files.conf", len - (size_t)(slash - filename)); cupsdSetString(&CupsFilesFile, filename); free(filename); } if (disconnect) { /* * Make sure we aren't tying up any filesystems... */ chdir("/"); /* * Disconnect from the controlling terminal... */ setsid(); } if (close_all) { /* * Close all open files... */ getrlimit(RLIMIT_NOFILE, &limit); for (i = 0; i < (int)limit.rlim_cur && i < 1024; i ++) close(i); /* * Redirect stdin/out/err to /dev/null... */ if ((i = open("/dev/null", O_RDONLY)) != 0) { dup2(i, 0); close(i); } if ((i = open("/dev/null", O_WRONLY)) != 1) { dup2(i, 1); close(i); } if ((i = open("/dev/null", O_WRONLY)) != 2) { dup2(i, 2); close(i); } } else LogStderr = cupsFileStderr(); /* * Run in the background as needed... */ if (!fg) { /* * Setup signal handlers for the parent... */ #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */ sigset(SIGUSR1, parent_handler); sigset(SIGCHLD, parent_handler); sigset(SIGHUP, SIG_IGN); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); sigaddset(&action.sa_mask, SIGUSR1); action.sa_handler = parent_handler; sigaction(SIGUSR1, &action, NULL); sigaction(SIGCHLD, &action, NULL); sigemptyset(&action.sa_mask); action.sa_handler = SIG_IGN; sigaction(SIGHUP, &action, NULL); #else signal(SIGUSR1, parent_handler); signal(SIGCLD, parent_handler); signal(SIGHUP, SIG_IGN); #endif /* HAVE_SIGSET */ if (fork() > 0) { /* * OK, wait for the child to startup and send us SIGUSR1 or to crash * and the OS send us SIGCHLD... We also need to ignore SIGHUP which * might be sent by the init script to restart the scheduler... */ for (; parent_signal == 0;) sleep(1); if (parent_signal == SIGUSR1) return (0); if (wait(&i) < 0) { perror("cupsd"); return (1); } else if (WIFEXITED(i)) { fprintf(stderr, "cupsd: Child exited with status %d\n", WEXITSTATUS(i)); return (2); } else { fprintf(stderr, "cupsd: Child exited on signal %d\n", WTERMSIG(i)); return (3); } } #if defined(__OpenBSD__) && OpenBSD < 201211 /* * Call _thread_sys_closefrom() so the child process doesn't reset the * parent's file descriptors to be blocking. This is a workaround for a * limitation of userland libpthread on older versions of OpenBSD. */ _thread_sys_closefrom(0); #endif /* __OpenBSD__ && OpenBSD < 201211 */ /* * Since many system libraries create fork-unsafe data on execution of a * program, we need to re-execute the background cupsd with the "-C" and "-s" * options to avoid problems. Unfortunately, we also have to assume that * argv[0] contains the name of the cupsd executable - there is no portable * way to get the real pathname... */ execlp(argv[0], argv[0], "-C", ConfigurationFile, "-s", CupsFilesFile, (char *)0); exit(errno); } /* * Let the system know we are busy while we bring up cupsd... */ cupsdSetBusyState(1); /* * Set the timezone info... */ tzset(); #ifdef LC_TIME setlocale(LC_TIME, ""); #endif /* LC_TIME */ #ifdef HAVE_DBUS_THREADS_INIT /* * Enable threading support for D-BUS... */ dbus_threads_init_default(); #endif /* HAVE_DBUS_THREADS_INIT */ /* * Set the maximum number of files... */ getrlimit(RLIMIT_NOFILE, &limit); #if !defined(HAVE_POLL) && !defined(HAVE_EPOLL) && !defined(HAVE_KQUEUE) if (limit.rlim_max > FD_SETSIZE) MaxFDs = FD_SETSIZE; else #endif /* !HAVE_POLL && !HAVE_EPOLL && !HAVE_KQUEUE */ #ifdef RLIM_INFINITY if (limit.rlim_max == RLIM_INFINITY) MaxFDs = 16384; else #endif /* RLIM_INFINITY */ MaxFDs = limit.rlim_max; limit.rlim_cur = (rlim_t)MaxFDs; setrlimit(RLIMIT_NOFILE, &limit); cupsdStartSelect(); /* * Read configuration... */ if (!cupsdReadConfiguration()) return (1); else if (TestConfigFile) { printf("\"%s\" is OK.\n", CupsFilesFile); printf("\"%s\" is OK.\n", ConfigurationFile); return (0); } else if (print_profile) { cups_file_t *fp; /* File pointer */ const char *profile = cupsdCreateProfile(42, 0); /* Profile */ char line[1024]; /* Line from file */ if ((fp = cupsFileOpen(profile, "r")) == NULL) { printf("Unable to open profile file \"%s\": %s\n", profile ? profile : "(null)", strerror(errno)); return (1); } while (cupsFileGets(fp, line, sizeof(line))) puts(line); cupsFileClose(fp); return (0); } /* * Clean out old temp files and printer cache data. */ if (!strncmp(TempDir, RequestRoot, strlen(RequestRoot))) cupsdCleanFiles(TempDir, NULL); cupsdCleanFiles(CacheDir, "*.ipp"); /* * If we were started on demand by launchd or systemd get the listen sockets * file descriptors... */ service_checkin(); service_checkout(0); /* * Startup the server... */ httpInitialize(); cupsdStartServer(); /* * Catch hangup and child signals and ignore broken pipes... */ #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */ sigset(SIGCHLD, sigchld_handler); sigset(SIGHUP, sighup_handler); sigset(SIGPIPE, SIG_IGN); sigset(SIGTERM, sigterm_handler); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); sigaddset(&action.sa_mask, SIGTERM); sigaddset(&action.sa_mask, SIGCHLD); action.sa_handler = sigchld_handler; sigaction(SIGCHLD, &action, NULL); sigemptyset(&action.sa_mask); sigaddset(&action.sa_mask, SIGHUP); action.sa_handler = sighup_handler; sigaction(SIGHUP, &action, NULL); sigemptyset(&action.sa_mask); action.sa_handler = SIG_IGN; sigaction(SIGPIPE, &action, NULL); sigemptyset(&action.sa_mask); sigaddset(&action.sa_mask, SIGTERM); sigaddset(&action.sa_mask, SIGCHLD); action.sa_handler = sigterm_handler; sigaction(SIGTERM, &action, NULL); #else signal(SIGCLD, sigchld_handler); /* No, SIGCLD isn't a typo... */ signal(SIGHUP, sighup_handler); signal(SIGPIPE, SIG_IGN); signal(SIGTERM, sigterm_handler); #endif /* HAVE_SIGSET */ /* * Initialize authentication certificates... */ cupsdInitCerts(); /* * If we are running in the background, signal the parent process that * we are up and running... */ if (!fg || run_as_child) { /* * Send a signal to the parent process, but only if the parent is * not PID 1 (init). This avoids accidentally shutting down the * system on OpenBSD if you CTRL-C the server before it is up... */ i = getppid(); /* Save parent PID to avoid race condition */ if (i != 1) kill(i, SIGUSR1); } #ifdef __APPLE__ /* * Start power management framework... */ if (use_sysman) cupsdStartSystemMonitor(); #endif /* __APPLE__ */ /* * Send server-started event... */ #ifdef HAVE_ONDEMAND if (OnDemand) cupsdAddEvent(CUPSD_EVENT_SERVER_STARTED, NULL, NULL, "Scheduler started on demand."); else #endif /* HAVE_ONDEMAND */ if (fg) cupsdAddEvent(CUPSD_EVENT_SERVER_STARTED, NULL, NULL, "Scheduler started in foreground."); else cupsdAddEvent(CUPSD_EVENT_SERVER_STARTED, NULL, NULL, "Scheduler started in background."); cupsdSetBusyState(0); /* * Start any pending print jobs... */ cupsdCheckJobs(); /* * Loop forever... */ current_time = time(NULL); event_time = current_time; expire_time = current_time; local_timeout = 0; fds = 1; report_time = 0; senddoc_time = current_time; while (!stop_scheduler) { /* * Check if there are dead children to handle... */ if (dead_children) process_children(); /* * Check if we need to load the server configuration file... */ if (NeedReload) { /* * Close any idle clients... */ if (cupsArrayCount(Clients) > 0) { for (con = (cupsd_client_t *)cupsArrayFirst(Clients); con; con = (cupsd_client_t *)cupsArrayNext(Clients)) if (httpGetState(con->http) == HTTP_WAITING) cupsdCloseClient(con); else con->http->keep_alive = HTTP_KEEPALIVE_OFF; cupsdPauseListening(); } /* * Restart if all clients are closed and all jobs finished, or * if the reload timeout has elapsed... */ if ((cupsArrayCount(Clients) == 0 && (cupsArrayCount(PrintingJobs) == 0 || NeedReload != RELOAD_ALL)) || (time(NULL) - ReloadTime) >= ReloadTimeout) { /* * Shutdown the server... */ #ifdef HAVE_ONDEMAND if (OnDemand) break; #endif /* HAVE_ONDEMAND */ DoingShutdown = 1; cupsdStopServer(); /* * Read configuration... */ if (!cupsdReadConfiguration()) { #ifdef HAVE_SYSTEMD_SD_JOURNAL_H sd_journal_print(LOG_ERR, "Unable to read configuration file \"%s\" - exiting.", ConfigurationFile); #else syslog(LOG_LPR, "Unable to read configuration file \'%s\' - exiting.", ConfigurationFile); #endif /* HAVE_SYSTEMD_SD_JOURNAL_H */ break; } /* * Startup the server... */ DoingShutdown = 0; cupsdStartServer(); /* * Send a server-restarted event... */ cupsdAddEvent(CUPSD_EVENT_SERVER_RESTARTED, NULL, NULL, "Scheduler restarted."); } } /* * Check for available input or ready output. If cupsdDoSelect() * returns 0 or -1, something bad happened and we should exit * immediately. * * Note that we at least have one listening socket open at all * times. */ if ((timeout = select_timeout(fds)) > 1 && LastEvent) timeout = 1; #ifdef HAVE_ONDEMAND /* * If no other work is scheduled and we're being controlled by * launchd then timeout after 'LaunchdTimeout' seconds of * inactivity... */ if (timeout == 86400 && OnDemand && IdleExitTimeout && !cupsArrayCount(ActiveJobs) && # ifdef HAVE_SYSTEMD !WebInterface && # endif /* HAVE_SYSTEMD */ (!Browsing || !BrowseLocalProtocols || !cupsArrayCount(Printers))) { timeout = IdleExitTimeout; service_idle_exit = 1; } else service_idle_exit = 0; #endif /* HAVE_ONDEMAND */ if ((fds = cupsdDoSelect(timeout)) < 0) { /* * Got an error from select! */ #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) cupsd_printer_t *p; /* Current printer */ #endif /* HAVE_DNSSD || HAVE_AVAHI */ if (errno == EINTR) /* Just interrupted by a signal */ continue; /* * Log all sorts of debug info to help track down the problem. */ cupsdLogMessage(CUPSD_LOG_EMERG, "cupsdDoSelect() failed - %s!", strerror(errno)); for (i = 0, con = (cupsd_client_t *)cupsArrayFirst(Clients); con; i ++, con = (cupsd_client_t *)cupsArrayNext(Clients)) cupsdLogMessage(CUPSD_LOG_EMERG, "Clients[%d] = %d, file = %d, state = %d", i, con->number, con->file, httpGetState(con->http)); for (i = 0, lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); lis; i ++, lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) cupsdLogMessage(CUPSD_LOG_EMERG, "Listeners[%d] = %d", i, lis->fd); cupsdLogMessage(CUPSD_LOG_EMERG, "CGIPipes[0] = %d", CGIPipes[0]); #ifdef __APPLE__ cupsdLogMessage(CUPSD_LOG_EMERG, "SysEventPipes[0] = %d", SysEventPipes[0]); #endif /* __APPLE__ */ for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs); job; job = (cupsd_job_t *)cupsArrayNext(ActiveJobs)) cupsdLogMessage(CUPSD_LOG_EMERG, "Jobs[%d] = %d < [%d %d] > [%d %d]", job->id, job->status_buffer ? job->status_buffer->fd : -1, job->print_pipes[0], job->print_pipes[1], job->back_pipes[0], job->back_pipes[1]); #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) cupsdLogMessage(CUPSD_LOG_EMERG, "printer[%s] reg_name=\"%s\"", p->name, p->reg_name ? p->reg_name : "(null)"); #endif /* HAVE_DNSSD || HAVE_AVAHI */ break; } current_time = time(NULL); /* * Write dirty config/state files... */ if (DirtyCleanTime && current_time >= DirtyCleanTime) cupsdCleanDirty(); #ifdef __APPLE__ /* * If we are going to sleep and still have pending jobs, stop them after * a period of time... */ if (SleepJobs > 0 && current_time >= SleepJobs && cupsArrayCount(PrintingJobs) > 0) { SleepJobs = 0; cupsdStopAllJobs(CUPSD_JOB_DEFAULT, 5); } #endif /* __APPLE__ */ #ifndef __APPLE__ /* * Update the network interfaces once a minute... */ if ((current_time - netif_time) >= 60) { netif_time = current_time; NetIFUpdate = 1; } #endif /* !__APPLE__ */ #ifdef HAVE_ONDEMAND /* * If no other work was scheduled and we're being controlled by launchd, * systemd, or upstart then timeout after 'LaunchdTimeout' seconds of * inactivity... */ if (!fds && service_idle_exit) { cupsdLogMessage(CUPSD_LOG_INFO, "Printer sharing is off and there are no jobs pending, " "will restart on demand."); stop_scheduler = 1; break; } #endif /* HAVE_ONDEMAND */ /* * Resume listening for new connections as needed... */ if (ListeningPaused && ListeningPaused <= current_time && cupsArrayCount(Clients) < MaxClients) cupsdResumeListening(); /* * Expire subscriptions and unload completed jobs as needed... */ if (current_time > expire_time) { if (cupsArrayCount(Subscriptions) > 0) cupsdExpireSubscriptions(NULL, NULL); cupsdUnloadCompletedJobs(); expire_time = current_time; } /* * Delete stale local printers... */ if (current_time >= local_timeout) { cupsdDeleteTemporaryPrinters(0); local_timeout = 0; } #ifndef HAVE_AUTHORIZATION_H /* * Update the root certificate once every 5 minutes if we have client * connections... */ if ((current_time - RootCertTime) >= RootCertDuration && RootCertDuration && !RunUser && cupsArrayCount(Clients)) { /* * Update the root certificate... */ cupsdDeleteCert(0); cupsdAddCert(0, "root", cupsdDefaultAuthType()); } #endif /* !HAVE_AUTHORIZATION_H */ /* * Check for new data on the client sockets... */ for (con = (cupsd_client_t *)cupsArrayFirst(Clients); con; con = (cupsd_client_t *)cupsArrayNext(Clients)) { /* * Process pending data in the input buffer... */ if (httpGetReady(con->http)) { cupsdReadClient(con); continue; } /* * Check the activity and close old clients... */ activity = current_time - Timeout; if (httpGetActivity(con->http) < activity && !con->pipe_pid) { cupsdLogMessage(CUPSD_LOG_DEBUG, "Closing client %d after %d seconds of inactivity.", con->number, Timeout); cupsdCloseClient(con); continue; } } /* * Update any pending multi-file documents... */ if ((current_time - senddoc_time) >= 10) { cupsdCheckJobs(); senddoc_time = current_time; } /* * Clean job history... */ if (JobHistoryUpdate && current_time >= JobHistoryUpdate) cupsdCleanJobs(); /* * Log statistics at most once a minute when in debug mode... */ if ((current_time - report_time) >= 60 && LogLevel >= CUPSD_LOG_DEBUG) { size_t string_count, /* String count */ alloc_bytes, /* Allocated string bytes */ total_bytes; /* Total string bytes */ #ifdef HAVE_MALLINFO struct mallinfo mem; /* Malloc information */ mem = mallinfo(); cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: malloc-arena=%lu", mem.arena); cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: malloc-used=%lu", mem.usmblks + mem.uordblks); cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: malloc-free=%lu", mem.fsmblks + mem.fordblks); #endif /* HAVE_MALLINFO */ cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: clients=%d", cupsArrayCount(Clients)); cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: jobs=%d", cupsArrayCount(Jobs)); cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: jobs-active=%d", cupsArrayCount(ActiveJobs)); cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: printers=%d", cupsArrayCount(Printers)); string_count = _cupsStrStatistics(&alloc_bytes, &total_bytes); cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: stringpool-string-count=" CUPS_LLFMT, CUPS_LLCAST string_count); cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: stringpool-alloc-bytes=" CUPS_LLFMT, CUPS_LLCAST alloc_bytes); cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: stringpool-total-bytes=" CUPS_LLFMT, CUPS_LLCAST total_bytes); report_time = current_time; } /* * Handle OS-specific event notification for any events that have * accumulated. Don't send these more than once a second... */ if (LastEvent && (current_time - event_time) >= 1) { #ifdef HAVE_NOTIFY_POST if (LastEvent & (CUPSD_EVENT_PRINTER_ADDED | CUPSD_EVENT_PRINTER_DELETED | CUPSD_EVENT_PRINTER_MODIFIED)) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "notify_post(\"com.apple.printerListChange\")"); notify_post("com.apple.printerListChange"); } if (LastEvent & CUPSD_EVENT_PRINTER_STATE_CHANGED) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "notify_post(\"com.apple.printerHistoryChange\")"); notify_post("com.apple.printerHistoryChange"); } if (LastEvent & (CUPSD_EVENT_JOB_STATE_CHANGED | CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_PROGRESS)) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "notify_post(\"com.apple.jobChange\")"); notify_post("com.apple.jobChange"); } #endif /* HAVE_NOTIFY_POST */ /* * Reset the accumulated events... */ LastEvent = CUPSD_EVENT_NONE; event_time = current_time; } } /* * Log a message based on what happened... */ if (stop_scheduler) { cupsdLogMessage(CUPSD_LOG_INFO, "Scheduler shutting down normally."); cupsdAddEvent(CUPSD_EVENT_SERVER_STOPPED, NULL, NULL, "Scheduler shutting down normally."); } else { cupsdLogMessage(CUPSD_LOG_ERROR, "Scheduler shutting down due to program error."); cupsdAddEvent(CUPSD_EVENT_SERVER_STOPPED, NULL, NULL, "Scheduler shutting down due to program error."); } /* * Close all network clients... */ DoingShutdown = 1; cupsdStopServer(); /* * Update the KeepAlive/PID file as needed... */ service_checkout(1); /* * Stop all jobs... */ cupsdFreeAllJobs(); /* * Delete all temporary printers... */ cupsdDeleteTemporaryPrinters(1); #ifdef __APPLE__ /* * Stop monitoring system event monitoring... */ if (use_sysman) cupsdStopSystemMonitor(); #endif /* __APPLE__ */ cupsdStopSelect(); return (!stop_scheduler); } /* * 'cupsdAddString()' - Copy and add a string to an array. */ int /* O - 1 on success, 0 on failure */ cupsdAddString(cups_array_t **a, /* IO - String array */ const char *s) /* I - String to copy and add */ { if (!*a) *a = cupsArrayNew3((cups_array_func_t)strcmp, NULL, (cups_ahash_func_t)NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); return (cupsArrayAdd(*a, (char *)s)); } /* * 'cupsdCheckProcess()' - Tell the main loop to check for dead children. */ void cupsdCheckProcess(void) { /* * Flag that we have dead children... */ dead_children = 1; } /* * 'cupsdClearString()' - Clear a string. */ void cupsdClearString(char **s) /* O - String value */ { if (s && *s) { free(*s); *s = NULL; } } /* * 'cupsdFreeStrings()' - Free an array of strings. */ void cupsdFreeStrings(cups_array_t **a) /* IO - String array */ { if (*a) { cupsArrayDelete(*a); *a = NULL; } } /* * 'cupsdHoldSignals()' - Hold child and termination signals. */ void cupsdHoldSignals(void) { #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) sigset_t newmask; /* New POSIX signal mask */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ holdcount ++; if (holdcount > 1) return; #ifdef HAVE_SIGSET sighold(SIGTERM); sighold(SIGCHLD); #elif defined(HAVE_SIGACTION) sigemptyset(&newmask); sigaddset(&newmask, SIGTERM); sigaddset(&newmask, SIGCHLD); sigprocmask(SIG_BLOCK, &newmask, &holdmask); #endif /* HAVE_SIGSET */ } /* * 'cupsdReleaseSignals()' - Release signals for delivery. */ void cupsdReleaseSignals(void) { holdcount --; if (holdcount > 0) return; #ifdef HAVE_SIGSET sigrelse(SIGTERM); sigrelse(SIGCHLD); #elif defined(HAVE_SIGACTION) sigprocmask(SIG_SETMASK, &holdmask, NULL); #endif /* HAVE_SIGSET */ } /* * 'cupsdSetString()' - Set a string value. */ void cupsdSetString(char **s, /* O - New string */ const char *v) /* I - String value */ { if (!s || *s == v) return; if (*s) free(*s); if (v) *s = strdup(v); else *s = NULL; } /* * 'cupsdSetStringf()' - Set a formatted string value. */ void cupsdSetStringf(char **s, /* O - New string */ const char *f, /* I - Printf-style format string */ ...) /* I - Additional args as needed */ { char v[65536 + 64]; /* Formatting string value */ va_list ap; /* Argument pointer */ char *olds; /* Old string */ if (!s) return; olds = *s; if (f) { va_start(ap, f); vsnprintf(v, sizeof(v), f, ap); va_end(ap); *s = strdup(v); } else *s = NULL; if (olds) free(olds); } /* * 'parent_handler()' - Catch USR1/CHLD signals... */ static void parent_handler(int sig) /* I - Signal */ { /* * Store the signal we got from the OS and return... */ parent_signal = sig; } /* * 'process_children()' - Process all dead children... */ static void process_children(void) { int status; /* Exit status of child */ int pid, /* Process ID of child */ job_id; /* Job ID of child */ cupsd_job_t *job; /* Current job */ int i; /* Looping var */ char name[1024]; /* Process name */ const char *type; /* Type of program */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "process_children()"); /* * Reset the dead_children flag... */ dead_children = 0; /* * Collect the exit status of some children... */ #ifdef HAVE_WAITPID while ((pid = waitpid(-1, &status, WNOHANG)) > 0) #elif defined(HAVE_WAIT3) while ((pid = wait3(&status, WNOHANG, NULL)) > 0) #else if ((pid = wait(&status)) > 0) #endif /* HAVE_WAITPID */ { /* * Collect the name of the process that finished... */ cupsdFinishProcess(pid, name, sizeof(name), &job_id); /* * Delete certificates for CGI processes... */ if (pid) cupsdDeleteCert(pid); /* * Handle completed job filters... */ if (job_id > 0) job = cupsdFindJob(job_id); else job = NULL; if (job) { for (i = 0; job->filters[i]; i ++) if (job->filters[i] == pid) break; if (job->filters[i] || job->backend == pid) { /* * OK, this process has gone away; what's left? */ if (job->filters[i]) { job->filters[i] = -pid; type = "Filter"; } else { job->backend = -pid; type = "Backend"; } if (status && status != SIGTERM && status != SIGKILL && status != SIGPIPE) { /* * An error occurred; save the exit status so we know to stop * the printer or cancel the job when all of the filters finish... * * A negative status indicates that the backend failed and the * printer needs to be stopped. * * In order to preserve the most serious status, we always log * when a process dies due to a signal (e.g. SIGABRT, SIGSEGV, * and SIGBUS) and prefer to log the backend exit status over a * filter's. */ int old_status = abs(job->status); if (WIFSIGNALED(status) || /* This process crashed, or */ !job->status || /* No process had a status, or */ (!job->filters[i] && WIFEXITED(old_status))) { /* Backend and filter didn't crash */ if (job->filters[i]) job->status = status; /* Filter failed */ else job->status = -status; /* Backend failed */ } if (job->state_value == IPP_JOB_PROCESSING && job->status_level > CUPSD_LOG_ERROR && (job->filters[i] || !WIFEXITED(status))) { char message[1024]; /* New printer-state-message */ job->status_level = CUPSD_LOG_ERROR; snprintf(message, sizeof(message), "%s failed", type); if (job->printer) { strlcpy(job->printer->state_message, message, sizeof(job->printer->state_message)); } if (!job->attrs) cupsdLoadJob(job); if (!job->printer_message && job->attrs) { if ((job->printer_message = ippFindAttribute(job->attrs, "job-printer-state-message", IPP_TAG_TEXT)) == NULL) job->printer_message = ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_TEXT, "job-printer-state-message", NULL, NULL); } if (job->printer_message) ippSetString(job->attrs, &job->printer_message, 0, message); } } /* * If this is not the last file in a job, see if all of the * filters are done, and if so move to the next file. */ if (job->state_value >= IPP_JOB_CANCELED) { /* * Remove the job from the active list if there are no processes still * running for it... */ for (i = 0; job->filters[i] < 0; i++); if (!job->filters[i] && job->backend <= 0) cupsArrayRemove(ActiveJobs, job); } else if (job->current_file < job->num_files && job->printer) { for (i = 0; job->filters[i] < 0; i ++); if (!job->filters[i] && (!job->printer->pc || !job->printer->pc->single_file || job->backend <= 0)) { /* * Process the next file... */ cupsdContinueJob(job); } } } } /* * Show the exit status as needed, ignoring SIGTERM and SIGKILL errors * since they come when we kill/end a process... */ if (status == SIGTERM || status == SIGKILL) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "PID %d (%s) was terminated normally with signal %d.", pid, name, status); } else if (status == SIGPIPE) { cupsdLogJob(job, CUPSD_LOG_DEBUG, "PID %d (%s) did not catch or ignore signal %d.", pid, name, status); } else if (status) { if (WIFEXITED(status)) { int code = WEXITSTATUS(status); /* Exit code */ if (code > 100) cupsdLogJob(job, CUPSD_LOG_DEBUG, "PID %d (%s) stopped with status %d (%s)", pid, name, code, strerror(code - 100)); else cupsdLogJob(job, CUPSD_LOG_DEBUG, "PID %d (%s) stopped with status %d.", pid, name, code); } else cupsdLogJob(job, CUPSD_LOG_DEBUG, "PID %d (%s) crashed on signal %d.", pid, name, WTERMSIG(status)); if (LogLevel < CUPSD_LOG_DEBUG) cupsdLogJob(job, CUPSD_LOG_INFO, "Hint: Try setting the LogLevel to \"debug\" to find out " "more."); } else cupsdLogJob(job, CUPSD_LOG_DEBUG, "PID %d (%s) exited with no errors.", pid, name); } /* * If wait*() is interrupted by a signal, tell main() to call us again... */ if (pid < 0 && errno == EINTR) dead_children = 1; } /* * 'select_timeout()' - Calculate the select timeout value. * */ static long /* O - Number of seconds */ select_timeout(int fds) /* I - Number of descriptors returned */ { long timeout; /* Timeout for select */ time_t now; /* Current time */ cupsd_client_t *con; /* Client information */ cupsd_job_t *job; /* Job information */ cupsd_printer_t *printer; /* Printer information */ const char *why; /* Debugging aid */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "select_timeout: JobHistoryUpdate=%ld", (long)JobHistoryUpdate); /* * Check to see if any of the clients have pending data to be * processed; if so, the timeout should be 0... */ for (con = (cupsd_client_t *)cupsArrayFirst(Clients); con; con = (cupsd_client_t *)cupsArrayNext(Clients)) if (httpGetReady(con->http)) return (0); /* * If select has been active in the last second (fds > 0) or we have * many resources in use then don't bother trying to optimize the * timeout, just make it 1 second. */ if (fds > 0 || cupsArrayCount(Clients) > 50) return (1); /* * Otherwise, check all of the possible events that we need to wake for... */ now = time(NULL); timeout = now + 86400; /* 86400 == 1 day */ why = "do nothing"; #ifdef __APPLE__ /* * When going to sleep, wake up to abort jobs that don't complete in time. */ if (SleepJobs > 0 && SleepJobs < timeout) { timeout = SleepJobs; why = "abort jobs before sleeping"; } #endif /* __APPLE__ */ /* * Check whether we are accepting new connections... */ if (ListeningPaused > 0 && cupsArrayCount(Clients) < MaxClients && ListeningPaused < timeout) { if (ListeningPaused <= now) timeout = now; else timeout = ListeningPaused; why = "resume listening"; } /* * Check the activity and close old clients... */ for (con = (cupsd_client_t *)cupsArrayFirst(Clients); con; con = (cupsd_client_t *)cupsArrayNext(Clients)) if ((httpGetActivity(con->http) + Timeout) < timeout) { timeout = httpGetActivity(con->http) + Timeout; why = "timeout a client connection"; } /* * Write out changes to configuration and state files... */ if (DirtyCleanTime && timeout > DirtyCleanTime) { timeout = DirtyCleanTime; why = "write dirty config/state files"; } /* * Check for any job activity... */ if (JobHistoryUpdate && timeout > JobHistoryUpdate) { timeout = JobHistoryUpdate; why = "update job history"; } for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs); job; job = (cupsd_job_t *)cupsArrayNext(ActiveJobs)) { if (job->cancel_time && job->cancel_time < timeout) { timeout = job->cancel_time; why = "cancel stuck jobs"; } if (job->kill_time && job->kill_time < timeout) { timeout = job->kill_time; why = "kill unresponsive jobs"; } if (job->state_value == IPP_JOB_HELD && job->hold_until < timeout) { timeout = job->hold_until; why = "release held jobs"; } if (job->state_value == IPP_JOB_PENDING && timeout > (now + 10)) { timeout = now + 10; why = "start pending jobs"; break; } } /* * Check for temporary printers that need to be deleted... */ for (printer = (cupsd_printer_t *)cupsArrayFirst(Printers); printer; printer = (cupsd_printer_t *)cupsArrayNext(Printers)) { if (printer->temporary && !printer->job && (!local_timeout || local_timeout > (printer->state_time + 60))) local_timeout = printer->state_time + 60; } if (timeout > local_timeout && local_timeout) { timeout = local_timeout; why = "delete stale local printers"; } /* * Adjust from absolute to relative time. We add 1 second to the timeout since * events occur after the timeout expires, and limit the timeout to 86400 * seconds (1 day) to avoid select() timeout limits present on some operating * systems... */ timeout = timeout - now + 1; if (timeout < 1) timeout = 1; else if (timeout > 86400) timeout = 86400; /* * Log and return the timeout value... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "select_timeout(%d): %ld seconds to %s", fds, timeout, why); return (timeout); } /* * 'sigchld_handler()' - Handle 'child' signals from old processes. */ static void sigchld_handler(int sig) /* I - Signal number */ { (void)sig; /* * Flag that we have dead children... */ dead_children = 1; /* * Reset the signal handler as needed... */ #if !defined(HAVE_SIGSET) && !defined(HAVE_SIGACTION) signal(SIGCLD, sigchld_handler); #endif /* !HAVE_SIGSET && !HAVE_SIGACTION */ } /* * 'sighup_handler()' - Handle 'hangup' signals to reconfigure the scheduler. */ static void sighup_handler(int sig) /* I - Signal number */ { (void)sig; NeedReload = RELOAD_ALL; ReloadTime = time(NULL); #if !defined(HAVE_SIGSET) && !defined(HAVE_SIGACTION) signal(SIGHUP, sighup_handler); #endif /* !HAVE_SIGSET && !HAVE_SIGACTION */ } /* * 'sigterm_handler()' - Handle 'terminate' signals that stop the scheduler. */ static void sigterm_handler(int sig) /* I - Signal number */ { (void)sig; /* remove compiler warnings... */ /* * Flag that we should stop and return... */ stop_scheduler = 1; } #ifdef HAVE_ONDEMAND /* * 'service_add_listener()' - Bind an open fd as a Listener. */ static void service_add_listener(int fd, /* I - Socket file descriptor */ int idx) /* I - Listener number, for logging */ { cupsd_listener_t *lis; /* Listeners array */ http_addr_t addr; /* Address variable */ socklen_t addrlen; /* Length of address */ char s[256]; /* String addresss */ addrlen = sizeof(addr); if (getsockname(fd, (struct sockaddr *)&addr, &addrlen)) { cupsdLogMessage(CUPSD_LOG_ERROR, "service_add_listener: Unable to get local address for listener #%d: %s", idx + 1, strerror(errno)); return; } cupsdLogMessage(CUPSD_LOG_DEBUG, "service_add_listener: Listener #%d at fd %d, \"%s\".", idx + 1, fd, httpAddrString(&addr, s, sizeof(s))); /* * Try to match the on-demand socket address to one of the listeners... */ for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); lis; lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) if (httpAddrEqual(&lis->address, &addr)) break; /* * Add a new listener If there's no match... */ if (lis) { cupsdLogMessage(CUPSD_LOG_DEBUG, "service_add_listener: Matched existing listener #%d to %s.", idx + 1, httpAddrString(&(lis->address), s, sizeof(s))); } else { cupsdLogMessage(CUPSD_LOG_DEBUG, "service_add_listener: Adding new listener #%d for %s.", idx + 1, httpAddrString(&addr, s, sizeof(s))); if ((lis = calloc(1, sizeof(cupsd_listener_t))) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "service_add_listener: Unable to allocate listener: %s.", strerror(errno)); exit(EXIT_FAILURE); return; } cupsArrayAdd(Listeners, lis); memcpy(&lis->address, &addr, sizeof(lis->address)); } lis->fd = fd; lis->on_demand = 1; # ifdef HAVE_SSL if (httpAddrPort(&(lis->address)) == 443) lis->encryption = HTTP_ENCRYPT_ALWAYS; # endif /* HAVE_SSL */ } #endif /* HAVE_ONDEMAND */ /* * 'service_checkin()' - Check-in with launchd and collect the listening fds. */ static void service_checkin(void) { cupsdLogMessage(CUPSD_LOG_DEBUG, "service_checkin: pid=%d", (int)getpid()); #ifdef HAVE_LAUNCHD if (OnDemand) { int error; /* Check-in error, if any */ size_t i, /* Looping var */ count; /* Number of listeners */ int *ld_sockets; /* Listener sockets */ /* * Check-in with launchd... */ if ((error = launch_activate_socket("Listeners", &ld_sockets, &count)) != 0) { cupsdLogMessage(CUPSD_LOG_ERROR, "service_checkin: Unable to get listener sockets: %s", strerror(error)); exit(EXIT_FAILURE); return; /* anti-compiler-warning */ } /* * Try to match the launchd sockets to the cupsd listeners... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "service_checkin: %d listeners.", (int)count); for (i = 0; i < count; i ++) service_add_listener(ld_sockets[i], (int)i); free(ld_sockets); } #elif defined(HAVE_SYSTEMD) if (OnDemand) { int i, /* Looping var */ count; /* Number of listeners */ /* * Check-in with systemd... */ if ((count = sd_listen_fds(0)) < 0) { cupsdLogMessage(CUPSD_LOG_ERROR, "service_checkin: Unable to get listener sockets: %s", strerror(-count)); exit(EXIT_FAILURE); return; /* anti-compiler-warning */ } /* * Try to match the systemd sockets to the cupsd listeners... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "service_checkin: %d listeners.", count); for (i = 0; i < count; i ++) service_add_listener(SD_LISTEN_FDS_START + i, i); } #elif defined(HAVE_UPSTART) if (OnDemand) { const char *e; /* Environment var */ int fd; /* File descriptor */ if (!(e = getenv("UPSTART_EVENTS"))) { cupsdLogMessage(CUPSD_LOG_ERROR, "service_checkin: We did not get started via Upstart."); exit(EXIT_FAILURE); return; } if (strcasecmp(e, "socket")) { cupsdLogMessage(CUPSD_LOG_ERROR, "service_checkin: We did not get triggered via an Upstart socket event."); exit(EXIT_FAILURE); return; } if ((e = getenv("UPSTART_FDS")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "service_checkin: Unable to get listener sockets from UPSTART_FDS."); exit(EXIT_FAILURE); return; } cupsdLogMessage(CUPSD_LOG_DEBUG, "service_checkin: UPSTART_FDS=%s", e); fd = (int)strtol(e, NULL, 10); if (fd < 0) { cupsdLogMessage(CUPSD_LOG_ERROR, "service_checkin: Could not parse UPSTART_FDS: %s", strerror(errno)); exit(EXIT_FAILURE); return; } /* * Upstart only supportst a single on-demand socket file descriptor... */ service_add_listener(fd, 0); } #endif /* HAVE_LAUNCHD */ } /* * 'service_checkout()' - Update the KeepAlive/PID file as needed. */ static void service_checkout(int shutdown) /* I - Shutting down? */ { cups_file_t *fp; /* File */ char pidfile[1024]; /* PID/KeepAlive file */ /* * When running on-demand, use the KeepAlive file, otherwise write a PID file * to StateDir... */ #ifdef HAVE_ONDEMAND if (OnDemand) { strlcpy(pidfile, CUPS_KEEPALIVE, sizeof(pidfile)); if (cupsArrayCount(ActiveJobs) || /* Active jobs */ WebInterface || /* Web interface enabled */ NeedReload || /* Doing a reload */ (Browsing && BrowseLocalProtocols && cupsArrayCount(Printers))) /* Printers being shared */ { /* * Create or remove the "keep-alive" file based on whether there are active * jobs or shared printers to advertise... */ shutdown = 0; } } else #endif /* HAVE_ONDEMAND */ snprintf(pidfile, sizeof(pidfile), "%s/cupsd.pid", StateDir); if (shutdown) { cupsdLogMessage(CUPSD_LOG_DEBUG, "Removing KeepAlive/PID file \"%s\".", pidfile); unlink(pidfile); } else { cupsdLogMessage(CUPSD_LOG_DEBUG, "Creating KeepAlive/PID file \"%s\".", pidfile); if ((fp = cupsFileOpen(pidfile, "w")) != NULL) { /* * Save the PID in the file... */ cupsFilePrintf(fp, "%d\n", (int)getpid()); cupsFileClose(fp); } else cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create KeepAlive/PID file \"%s\": %s", pidfile, strerror(errno)); } } /* * 'usage()' - Show scheduler usage. */ static void usage(int status) /* O - Exit status */ { FILE *fp = status ? stderr : stdout; /* Output file */ _cupsLangPuts(fp, _("Usage: cupsd [options]")); _cupsLangPuts(fp, _("Options:")); _cupsLangPuts(fp, _(" -c cupsd.conf Set cupsd.conf file to use.")); _cupsLangPuts(fp, _(" -f Run in the foreground.")); _cupsLangPuts(fp, _(" -F Run in the foreground but detach from console.")); _cupsLangPuts(fp, _(" -h Show this usage message.")); #ifdef HAVE_ONDEMAND _cupsLangPuts(fp, _(" -l Run cupsd on demand.")); #endif /* HAVE_ONDEMAND */ _cupsLangPuts(fp, _(" -s cups-files.conf Set cups-files.conf file to use.")); _cupsLangPuts(fp, _(" -t Test the configuration file.")); exit(status); } cups-2.2.7/scheduler/Makefile000664 000765 000024 00000032054 13255074424 016575 0ustar00msweetstaff000000 000000 # # Scheduler Makefile for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 1997-2007 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include ../Makedefs CUPSDOBJS = \ auth.o \ banners.o \ cert.o \ classes.o \ client.o \ colorman.o \ conf.o \ dirsvc.o \ env.o \ file.o \ main.o \ ipp.o \ listen.o \ job.o \ log.o \ network.o \ policy.o \ printers.o \ process.o \ quotas.o \ select.o \ server.o \ statbuf.o \ subscriptions.o \ sysman.o LIBOBJS = \ filter.o \ mime.o \ type.o COBJS = \ $(CUPSDOBJS) \ $(LIBOBJS) \ cupsfilter.o \ cups-deviced.o \ cups-exec.o \ cups-lpd.o \ testlpd.o \ testmime.o \ testspeed.o \ testsub.o \ util.o CXXOBJS = \ cups-driverd.o OBJS = \ $(COBJS) \ $(LD_CXXOBJS) LIBTARGETS = \ $(LIBCUPSMIME) \ libcupsmime.a UNITTARGETS = \ testlpd \ testmime \ testspeed \ testsub PROGRAMS = \ cupsd \ cupsfilter \ cups-deviced \ cups-driverd \ cups-exec \ cups-lpd TARGETS = \ $(LIBTARGETS) \ $(PROGRAMS) # # Make everything... # all: $(TARGETS) # # Make library targets... # libs: $(LIBTARGETS) # # Make unit tests... # unittests: $(UNITTARGETS) # # Clean all object files... # clean: $(RM) $(OBJS) $(RM) $(TARGETS) $(UNITTARGETS) convert $(RM) libcupsmime.so libcupsmime.dylib # # Update dependencies (without system header dependencies...) # depend: $(CC) -MM $(ALL_CFLAGS) $(COBJS:.o=.c) >Dependencies $(CXX) -MM $(ALL_CXXFLAGS) $(LD_CXXOBJS:.o=.cxx) >>Dependencies # # Run oclint to check code coverage... # oclint: oclint -o=oclint.html -html $(CUPSDOBJS:.o=.c) $(LIBOBJS:.o=.c) -- $(ALL_CFLAGS) # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: echo Creating $(SERVERBIN)/driver... $(INSTALL_DIR) -m 755 $(SERVERBIN)/driver echo Creating $(SERVERROOT)... $(INSTALL_DIR) -m 755 -g $(CUPS_GROUP) $(SERVERROOT) echo Creating $(SERVERROOT)/ppd... $(INSTALL_DIR) -m 755 -g $(CUPS_GROUP) $(SERVERROOT)/ppd if test "x`uname`" != xDarwin; then \ echo Creating $(SERVERROOT)/ssl...; \ $(INSTALL_DIR) -m 700 -g $(CUPS_GROUP) $(SERVERROOT)/ssl; \ fi if test "$(STATEDIR)" != "$(SERVERROOT)"; then \ echo Creating $(STATEDIR)...; \ $(INSTALL_DIR) -m 755 $(STATEDIR); \ fi echo Creating $(STATEDIR)/certs... $(INSTALL_DIR) -m 511 -o $(CUPS_USER) -g $(CUPS_PRIMARY_SYSTEM_GROUP) \ $(STATEDIR)/certs echo Creating $(LOGDIR)... $(INSTALL_DIR) -m 755 $(LOGDIR) echo Creating $(REQUESTS)... $(INSTALL_DIR) -m 710 -g $(CUPS_GROUP) $(REQUESTS) echo Creating $(REQUESTS)/tmp... $(INSTALL_DIR) -m 1770 -g $(CUPS_GROUP) $(REQUESTS)/tmp echo Creating $(CACHEDIR)... $(INSTALL_DIR) -m 770 -g $(CUPS_GROUP) $(CACHEDIR) if test "x$(INITDIR)" != x; then \ echo Installing init scripts...; \ $(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/init.d; \ $(INSTALL_SCRIPT) cups.sh $(BUILDROOT)$(INITDIR)/init.d/cups; \ for level in $(RCLEVELS); do \ $(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/rc$${level}.d; \ $(LN) ../init.d/cups $(BUILDROOT)$(INITDIR)/rc$${level}.d/S$(RCSTART)cups; \ $(LN) ../init.d/cups $(BUILDROOT)$(INITDIR)/rc$${level}.d/K$(RCSTOP)cups; \ done; \ $(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/rc0.d; \ $(LN) ../init.d/cups $(BUILDROOT)$(INITDIR)/rc0.d/K$(RCSTOP)cups; \ fi if test "x$(INITDDIR)" != x; then \ echo Installing init script...; \ $(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDDIR); \ $(INSTALL_SCRIPT) cups.sh $(BUILDROOT)$(INITDDIR); \ fi if test "x$(LAUNCHD_DIR)" != x; then \ echo Installing launchd configuration files...; \ $(INSTALL_DIR) $(BUILDROOT)$(LAUNCHD_DIR); \ $(INSTALL_DATA) org.cups.cupsd.plist $(BUILDROOT)$(LAUNCHD_DIR); \ $(INSTALL_DATA) org.cups.cups-lpd.plist $(BUILDROOT)$(LAUNCHD_DIR); \ fi if test "x$(SMFMANIFESTDIR)" != x; then \ echo Installing SMF manifest in $(SMFMANIFESTDIR)...;\ $(INSTALL_DIR) $(BUILDROOT)/$(SMFMANIFESTDIR); \ $(INSTALL_SCRIPT) cups.xml $(BUILDROOT)$(SMFMANIFESTDIR)/cups.xml; \ fi if test "x$(SYSTEMD_DIR)" != x; then \ echo Installing systemd configuration files...; \ $(INSTALL_DIR) $(BUILDROOT)$(SYSTEMD_DIR); \ $(INSTALL_DATA) org.cups.cupsd.path $(BUILDROOT)$(SYSTEMD_DIR); \ $(INSTALL_DATA) org.cups.cupsd.service $(BUILDROOT)$(SYSTEMD_DIR); \ $(INSTALL_DATA) org.cups.cupsd.socket $(BUILDROOT)$(SYSTEMD_DIR); \ $(INSTALL_DATA) org.cups.cups-lpdAT.service $(BUILDROOT)$(SYSTEMD_DIR)/org.cups.cups-lpd@.service; \ $(INSTALL_DATA) org.cups.cups-lpd.socket $(BUILDROOT)$(SYSTEMD_DIR); \ elif test "x$(XINETD)" != x; then \ echo Installing xinetd configuration file for cups-lpd...; \ $(INSTALL_DIR) -m 755 $(BUILDROOT)$(XINETD); \ $(INSTALL_DATA) cups-lpd.xinetd $(BUILDROOT)$(XINETD)/cups-lpd; \ fi # # Install programs... # install-exec: echo Installing programs in $(SBINDIR)... $(INSTALL_DIR) -m 755 $(SBINDIR) $(INSTALL_BIN) -m $(CUPS_CUPSD_FILE_PERM) cupsd $(SBINDIR) $(INSTALL_BIN) cupsfilter $(SBINDIR) echo Installing programs in $(SERVERBIN)/daemon... $(INSTALL_DIR) -m 755 $(SERVERBIN) $(INSTALL_DIR) -m 755 $(SERVERBIN)/daemon $(INSTALL_BIN) cups-deviced $(SERVERBIN)/daemon $(INSTALL_BIN) cups-driverd $(SERVERBIN)/daemon $(INSTALL_BIN) cups-exec $(SERVERBIN)/daemon $(INSTALL_BIN) cups-lpd $(SERVERBIN)/daemon if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ for file in $(PROGRAMS); do \ cp $$file $(SYMROOT); \ dsymutil $(SYMROOT)/$$file; \ done \ fi # # Install headers... # install-headers: if test "x$(privateinclude)" != x; then \ echo Installing private header files into $(PRIVATEINCLUDE)...; \ $(INSTALL_DIR) -m 755 $(PRIVATEINCLUDE); \ $(INSTALL_DATA) mime.h $(PRIVATEINCLUDE); \ fi # # Install libraries... # install-libs: $(INSTALLSTATIC) echo Installing libraries in $(LIBDIR)... $(INSTALL_DIR) -m 755 $(LIBDIR) $(INSTALL_LIB) $(LIBCUPSMIME) $(LIBDIR) if test $(LIBCUPSMIME) = "libcupsmime.so.1"; then \ $(RM) $(LIBDIR)/`basename $(LIBCUPSMIME) .1`; \ $(LN) $(LIBCUPSMIME) $(LIBDIR)/`basename $(LIBCUPSMIME) .1`; \ fi if test $(LIBCUPSMIME) = "libcupsmime.1.dylib"; then \ $(RM) $(LIBDIR)/libcupsmime.dylib; \ $(LN) $(LIBCUPSMIME) $(LIBDIR)/libcupsmime.dylib; \ fi if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ cp $(LIBCUPSMIME) $(SYMROOT); \ dsymutil $(SYMROOT)/$(LIBCUPSMIME); \ fi installstatic: $(INSTALL_DIR) -m 755 $(LIBDIR) $(INSTALL_LIB) -m 755 libcupsmime.a $(LIBDIR) $(RANLIB) $(LIBDIR)/libcupsmime.a $(CHMOD) 555 $(LIBDIR)/libcupsmime.a # # Uninstall the scheduler... # uninstall: $(RM) $(SBINDIR)/cupsd $(RM) $(SBINDIR)/cupsfilter $(RM) $(SERVERBIN)/daemon/cups-deviced $(RM) $(SERVERBIN)/daemon/cups-driverd $(RM) $(SERVERBIN)/daemon/cups-exec $(RM) $(SERVERBIN)/daemon/cups-lpd -$(RMDIR) $(STATEDIR)/certs -$(RMDIR) $(STATEDIR) -$(RMDIR) $(SERVERROOT)/ppd -$(RMDIR) $(SERVERROOT)/interfaces -$(RMDIR) $(SERVERROOT) -$(RMDIR) $(SERVERBIN)/driver -$(RMDIR) $(SERVERBIN)/daemon -$(RMDIR) $(SERVERBIN) -$(RMDIR) $(SBINDIR) -$(RMDIR) $(REQUESTS)/tmp -$(RMDIR) $(REQUESTS) -$(RMDIR) $(LOGDIR) -$(RMDIR) $(CACHEDIR) $(RM) $(LIBDIR)/libcupsmime.1.dylib $(RM) $(LIBDIR)/libcupsmime.a $(RM) $(LIBDIR)/libcupsmime.dylib $(RM) $(LIBDIR)/libcupsmime.so $(RM) $(LIBDIR)/libcupsmime.so.1 -$(RMDIR) $(LIBDIR) -if test "x$(privateinclude)" != x; then \ $(RM) $(PRIVATEINCLUDE)/mime.h; \ $(RMDIR) $(PRIVATEINCLUDE); \ fi if test "x$(INITDIR)" != x; then \ echo Uninstalling init scripts...; \ $(RM) $(BUILDROOT)$(INITDIR)/init.d/cups; \ $(RMDIR) $(BUILDROOT)$(INITDIR)/init.d; \ $(RM) $(BUILDROOT)$(INITDIR)/rc0.d/K00cups; \ $(RMDIR) $(BUILDROOT)$(INITDIR)/rc0.d; \ $(RM) $(BUILDROOT)$(INITDIR)/rc2.d/S99cups; \ $(RMDIR) $(BUILDROOT)$(INITDIR)/rc2.d; \ $(RM) $(BUILDROOT)$(INITDIR)/rc3.d/S99cups; \ $(RMDIR) $(BUILDROOT)$(INITDIR)/rc3.d; \ $(RM) $(BUILDROOT)$(INITDIR)/rc5.d/S99cups; \ $(RMDIR) $(BUILDROOT)$(INITDIR)/rc5.d; \ fi if test "x$(INITDDIR)" != x; then \ echo Uninstalling startup script...; \ $(RM) $(BUILDROOT)$(INITDDIR)/cups.sh; \ $(RMDIR) $(BUILDROOT)$(INITDDIR); \ fi if test "x$LAUNCHD_DIR" != x; then \ echo Uninstalling launchd files...; \ $(RM) $(BUILDROOT)$(LAUNCHD_DIR)/org.cups.cupsd.plist; \ $(RM) $(BUILDROOT)$(LAUNCHD_DIR)/org.cups.cups-lpd.plist; \ fi if test "x$SYSTEMD_DIR" != x; then \ echo Uninstalling systemd files...; \ $(RM) $(BUILDROOT)$(SYSTEMD_DIR)/org.cups.cupsd.path; \ $(RM) $(BUILDROOT)$(SYSTEMD_DIR)/org.cups.cupsd.service; \ $(RM) $(BUILDROOT)$(SYSTEMD_DIR)/org.cups.cupsd.socket; \ fi if test "x$(SMFMANIFESTDIR)" != x; then \ echo Uninstalling SMF manifest file...;\ $(RM) $(BUILDROOT)$(SMFMANIFESTDIR)/cups.xml; \ fi if test "x$(XINETD)" != x; then \ echo Uninstalling xinetd configuration file for cups-lpd...; \ $(RM) $(BUILDROOT)$(XINETD)/cups-lpd; \ fi # # Make the scheduler executable, "cupsd". # cupsd: $(CUPSDOBJS) $(LIBCUPSMIME) ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o cupsd $(CUPSDOBJS) -L. -lcupsmime \ $(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \ $(LIBPAPER) $(LIBMALLOC) $(SERVERLIBS) $(ONDEMANDLIBS) \ $(DNSSDLIBS) $(LIBS) $(LIBGSSAPI) $(LIBWRAP) cupsd-static: $(CUPSDOBJS) libcupsmime.a ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o cupsd-static $(CUPSDOBJS) libcupsmime.a \ $(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \ ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(LIBPAPER) \ $(LIBMALLOC) $(SERVERLIBS) $(ONDEMANDLIBS) $(DNSSDLIBS) \ $(LIBGSSAPI) $(LIBWRAP) # # Make the cupsfilter utility. # cupsfilter: cupsfilter.o $(LIBCUPSMIME) ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o cupsfilter cupsfilter.o -L. -lcupsmime $(LIBS) $(RM) convert $(LN) cupsfilter convert cupsfilter-static: cupsfilter.o libcupsmime.a ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o cupsfilter-static cupsfilter.o libcupsmime.a \ ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(SSLLIBS) \ $(DNSSDLIBS) $(LIBGSSAPI) # # Make the device daemon, "cups-deviced". # cups-deviced: cups-deviced.o util.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o cups-deviced cups-deviced.o util.o $(LIBS) # # Make the driver daemon, "cups-driverd". # cups-driverd: cups-driverd.o util.o ../cups/$(LIBCUPS) ../ppdc/$(LIBCUPSPPDC) echo Linking $@... $(LD_CXX) $(LDFLAGS) -o cups-driverd cups-driverd.o util.o \ -L../ppdc -lcupsppdc $(LIBS) # # Make the sandbox execution helper, "cups-exec". # cups-exec: cups-exec.o echo Linking $@... $(LD_CC) $(LDFLAGS) -o cups-exec cups-exec.o $(LIBS) # # Make the line printer daemon, "cups-lpd". # cups-lpd: cups-lpd.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o cups-lpd cups-lpd.o $(LIBS) # # libcupsmime.so.1 # libcupsmime.so.1: $(LIBOBJS) echo Linking $@... $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(LIBS) $(RM) `basename $@ .1` $(LN) $@ `basename $@ .1` # # libcupsmime.1.dylib # libcupsmime.1.dylib: $(LIBOBJS) libcupsmime.exp echo Linking $@... $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \ -install_name $(libdir)/$@ \ -current_version 1.0.0 \ -compatibility_version 1.0.0 \ -exported_symbols_list libcupsmime.exp \ $(LIBOBJS) $(LIBS) $(RM) libcupsmime.dylib $(LN) $@ libcupsmime.dylib # # libcupsmime.la # libcupsmime.la: $(LIBOBJS) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) \ -version-info 1:0 $(LIBS) # # libcupsmime.a # libcupsmime.a: $(LIBOBJS) echo Archiving $@... $(RM) $@ $(AR) $(ARFLAGS) $@ $(LIBOBJS) $(RANLIB) $@ # # Make the test program, "testlpd". # testlpd: testlpd.o ../cups/$(LIBCUPSSTATIC) cups-lpd echo Linking $@... $(LD_CC) $(LDFLAGS) -o testlpd testlpd.o ../cups/$(LIBCUPSSTATIC) \ $(COMMONLIBS) $(LIBZ) $(SSLLIBS) $(DNSSDLIBS) $(LIBGSSAPI) # # testmime # testmime: testmime.o libcupsmime.a ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testmime.o libcupsmime.a \ ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(SSLLIBS) \ $(DNSSDLIBS) $(LIBGSSAPI) echo Running MIME tests... ./testmime # # Make the test program, "testspeed". # testspeed: testspeed.o ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o testspeed testspeed.o ../cups/$(LIBCUPSSTATIC) \ $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) $(LIBGSSAPI) # # Make the test program, "testsub". # testsub: testsub.o ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o testsub testsub.o ../cups/$(LIBCUPSSTATIC) \ $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) $(LIBGSSAPI) # # Lines of code computation... # sloc: echo "cupsd: \c" sloccount $(CUPSDOBJS:.o=.c) $(LIBOBJS:.o=.c) cups-driverd.cxx cups-lpd.c 2>/dev/null | grep "Total Physical" | awk '{print $$9}' # # Dependencies... # include Dependencies cups-2.2.7/scheduler/mime-private.h000664 000765 000024 00000001525 13255074424 017704 0ustar00msweetstaff000000 000000 /* * Private MIME type/conversion database definitions for CUPS. * * Copyright 2011 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #ifndef _CUPS_MIME_PRIVATE_H_ # define _CUPS_MIME_PRIVATE_H_ # include "mime.h" /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Prototypes... */ extern void _mimeError(mime_t *mime, const char *format, ...) __attribute__ ((__format__ (__printf__, 2, 3))); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_MIME_PRIVATE_H_ */ cups-2.2.7/scheduler/mime.c000664 000765 000024 00000053046 13255074424 016234 0ustar00msweetstaff000000 000000 /* * MIME database file routines for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include #include "mime-private.h" /* * Local types... */ typedef struct _mime_fcache_s /**** Filter cache structure ****/ { char *name, /* Filter name */ *path; /* Full path to filter if available */ } _mime_fcache_t; /* * Local functions... */ static const char *mime_add_fcache(cups_array_t *filtercache, const char *name, const char *filterpath); static int mime_compare_fcache(_mime_fcache_t *a, _mime_fcache_t *b); static void mime_delete_fcache(cups_array_t *filtercache); static void mime_delete_rules(mime_magic_t *rules); static void mime_load_convs(mime_t *mime, const char *filename, const char *filterpath, cups_array_t *filtercache); static void mime_load_types(mime_t *mime, const char *filename); /* * 'mimeDelete()' - Delete (free) a MIME database. */ void mimeDelete(mime_t *mime) /* I - MIME database */ { mime_type_t *type; /* Current type */ mime_filter_t *filter; /* Current filter */ DEBUG_printf(("mimeDelete(mime=%p)", mime)); if (!mime) return; /* * Loop through filters and free them... */ for (filter = (mime_filter_t *)cupsArrayFirst(mime->filters); filter; filter = (mime_filter_t *)cupsArrayNext(mime->filters)) mimeDeleteFilter(mime, filter); /* * Loop through the file types and delete any rules... */ for (type = (mime_type_t *)cupsArrayFirst(mime->types); type; type = (mime_type_t *)cupsArrayNext(mime->types)) mimeDeleteType(mime, type); /* * Free the types and filters arrays, and then the MIME database structure. */ cupsArrayDelete(mime->types); cupsArrayDelete(mime->filters); cupsArrayDelete(mime->srcs); free(mime); } /* * 'mimeDeleteFilter()' - Delete a filter from the MIME database. */ void mimeDeleteFilter(mime_t *mime, /* I - MIME database */ mime_filter_t *filter) /* I - Filter */ { DEBUG_printf(("mimeDeleteFilter(mime=%p, filter=%p(%s/%s->%s/%s, cost=%d, " "maxsize=" CUPS_LLFMT "))", mime, filter, filter ? filter->src->super : "???", filter ? filter->src->type : "???", filter ? filter->dst->super : "???", filter ? filter->dst->super : "???", filter ? filter->cost : -1, filter ? CUPS_LLCAST filter->maxsize : CUPS_LLCAST -1)); if (!mime || !filter) return; #ifdef DEBUG if (!cupsArrayFind(mime->filters, filter)) DEBUG_puts("1mimeDeleteFilter: Filter not in MIME database."); #endif /* DEBUG */ cupsArrayRemove(mime->filters, filter); free(filter); /* * Deleting a filter invalidates the source lookup cache used by * mimeFilter()... */ if (mime->srcs) { DEBUG_puts("1mimeDeleteFilter: Deleting source lookup cache."); cupsArrayDelete(mime->srcs); mime->srcs = NULL; } } /* * 'mimeDeleteType()' - Delete a type from the MIME database. */ void mimeDeleteType(mime_t *mime, /* I - MIME database */ mime_type_t *mt) /* I - Type */ { DEBUG_printf(("mimeDeleteType(mime=%p, mt=%p(%s/%s))", mime, mt, mt ? mt->super : "???", mt ? mt->type : "???")); if (!mime || !mt) return; #ifdef DEBUG if (!cupsArrayFind(mime->types, mt)) DEBUG_puts("1mimeDeleteFilter: Type not in MIME database."); #endif /* DEBUG */ cupsArrayRemove(mime->types, mt); mime_delete_rules(mt->rules); free(mt); } /* * '_mimeError()' - Show an error message. */ void _mimeError(mime_t *mime, /* I - MIME database */ const char *message, /* I - Printf-style message string */ ...) /* I - Additional arguments as needed */ { va_list ap; /* Argument pointer */ char buffer[8192]; /* Message buffer */ if (mime->error_cb) { va_start(ap, message); vsnprintf(buffer, sizeof(buffer), message, ap); va_end(ap); (*mime->error_cb)(mime->error_ctx, buffer); } } /* * 'mimeFirstFilter()' - Get the first filter in the MIME database. */ mime_filter_t * /* O - Filter or NULL */ mimeFirstFilter(mime_t *mime) /* I - MIME database */ { DEBUG_printf(("6mimeFirstFilter(mime=%p)", mime)); if (!mime) { DEBUG_puts("7mimeFirstFilter: Returning NULL."); return (NULL); } else { mime_filter_t *first = (mime_filter_t *)cupsArrayFirst(mime->filters); /* First filter */ DEBUG_printf(("7mimeFirstFilter: Returning %p.", first)); return (first); } } /* * 'mimeFirstType()' - Get the first type in the MIME database. */ mime_type_t * /* O - Type or NULL */ mimeFirstType(mime_t *mime) /* I - MIME database */ { DEBUG_printf(("6mimeFirstType(mime=%p)", mime)); if (!mime) { DEBUG_puts("7mimeFirstType: Returning NULL."); return (NULL); } else { mime_type_t *first = (mime_type_t *)cupsArrayFirst(mime->types); /* First type */ DEBUG_printf(("7mimeFirstType: Returning %p.", first)); return (first); } } /* * 'mimeLoad()' - Create a new MIME database from disk. * * This function uses @link mimeLoadFilters@ and @link mimeLoadTypes@ to * create a MIME database from a single directory. */ mime_t * /* O - New MIME database */ mimeLoad(const char *pathname, /* I - Directory to load */ const char *filterpath) /* I - Directory to load */ { mime_t *mime; /* New MIME database */ DEBUG_printf(("mimeLoad(pathname=\"%s\", filterpath=\"%s\")", pathname, filterpath)); mime = mimeLoadFilters(mimeLoadTypes(NULL, pathname), pathname, filterpath); DEBUG_printf(("1mimeLoad: Returning %p.", mime)); return (mime); } /* * 'mimeLoadFilters()' - Load filter definitions from disk. * * This function loads all of the .convs files from the specified directory. * Use @link mimeLoadTypes@ to load all types before you load the filters. */ mime_t * /* O - MIME database */ mimeLoadFilters(mime_t *mime, /* I - MIME database */ const char *pathname, /* I - Directory to load from */ const char *filterpath) /* I - Default filter program directory */ { cups_dir_t *dir; /* Directory */ cups_dentry_t *dent; /* Directory entry */ char filename[1024]; /* Full filename of .convs file */ cups_array_t *filtercache; /* Filter cache */ DEBUG_printf(("mimeLoadFilters(mime=%p, pathname=\"%s\", filterpath=\"%s\")", mime, pathname, filterpath)); /* * Range check input... */ if (!mime || !pathname || !filterpath) { DEBUG_puts("1mimeLoadFilters: Bad arguments."); return (mime); } /* * Then open the directory specified by pathname... */ if ((dir = cupsDirOpen(pathname)) == NULL) { DEBUG_printf(("1mimeLoadFilters: Unable to open \"%s\": %s", pathname, strerror(errno))); _mimeError(mime, "Unable to open \"%s\": %s", pathname, strerror(errno)); return (mime); } /* * Read all the .convs files... */ filtercache = cupsArrayNew((cups_array_func_t)mime_compare_fcache, NULL); while ((dent = cupsDirRead(dir)) != NULL) { if (strlen(dent->filename) > 6 && !strcmp(dent->filename + strlen(dent->filename) - 6, ".convs")) { /* * Load a mime.convs file... */ snprintf(filename, sizeof(filename), "%s/%s", pathname, dent->filename); DEBUG_printf(("1mimeLoadFilters: Loading \"%s\".", filename)); mime_load_convs(mime, filename, filterpath, filtercache); } } mime_delete_fcache(filtercache); cupsDirClose(dir); return (mime); } /* * 'mimeLoadTypes()' - Load type definitions from disk. * * This function loads all of the .types files from the specified directory. * Use @link mimeLoadFilters@ to load all filters after you load the types. */ mime_t * /* O - MIME database */ mimeLoadTypes(mime_t *mime, /* I - MIME database or @code NULL@ to create a new one */ const char *pathname) /* I - Directory to load from */ { cups_dir_t *dir; /* Directory */ cups_dentry_t *dent; /* Directory entry */ char filename[1024]; /* Full filename of .types file */ DEBUG_printf(("mimeLoadTypes(mime=%p, pathname=\"%s\")", mime, pathname)); /* * First open the directory specified by pathname... */ if ((dir = cupsDirOpen(pathname)) == NULL) { DEBUG_printf(("1mimeLoadTypes: Unable to open \"%s\": %s", pathname, strerror(errno))); DEBUG_printf(("1mimeLoadTypes: Returning %p.", mime)); _mimeError(mime, "Unable to open \"%s\": %s", pathname, strerror(errno)); return (mime); } /* * If "mime" is NULL, make a new, empty database... */ if (!mime) mime = mimeNew(); if (!mime) { cupsDirClose(dir); DEBUG_puts("1mimeLoadTypes: Returning NULL."); return (NULL); } /* * Read all the .types files... */ while ((dent = cupsDirRead(dir)) != NULL) { if (strlen(dent->filename) > 6 && !strcmp(dent->filename + strlen(dent->filename) - 6, ".types")) { /* * Load a mime.types file... */ snprintf(filename, sizeof(filename), "%s/%s", pathname, dent->filename); DEBUG_printf(("1mimeLoadTypes: Loading \"%s\".", filename)); mime_load_types(mime, filename); } } cupsDirClose(dir); DEBUG_printf(("1mimeLoadTypes: Returning %p.", mime)); return (mime); } /* * 'mimeNew()' - Create a new, empty MIME database. */ mime_t * /* O - MIME database */ mimeNew(void) { return ((mime_t *)calloc(1, sizeof(mime_t))); } /* * 'mimeNextFilter()' - Get the next filter in the MIME database. */ mime_filter_t * /* O - Filter or NULL */ mimeNextFilter(mime_t *mime) /* I - MIME database */ { DEBUG_printf(("6mimeNextFilter(mime=%p)", mime)); if (!mime) { DEBUG_puts("7mimeNextFilter: Returning NULL."); return (NULL); } else { mime_filter_t *next = (mime_filter_t *)cupsArrayNext(mime->filters); /* Next filter */ DEBUG_printf(("7mimeNextFilter: Returning %p.", next)); return (next); } } /* * 'mimeNextType()' - Get the next type in the MIME database. */ mime_type_t * /* O - Type or NULL */ mimeNextType(mime_t *mime) /* I - MIME database */ { DEBUG_printf(("6mimeNextType(mime=%p)", mime)); if (!mime) { DEBUG_puts("7mimeNextType: Returning NULL."); return (NULL); } else { mime_type_t *next = (mime_type_t *)cupsArrayNext(mime->types); /* Next type */ DEBUG_printf(("7mimeNextType: Returning %p.", next)); return (next); } } /* * 'mimeNumFilters()' - Get the number of filters in a MIME database. */ int mimeNumFilters(mime_t *mime) /* I - MIME database */ { DEBUG_printf(("mimeNumFilters(mime=%p)", mime)); if (!mime) { DEBUG_puts("1mimeNumFilters: Returning 0."); return (0); } else { DEBUG_printf(("1mimeNumFilters: Returning %d.", cupsArrayCount(mime->filters))); return (cupsArrayCount(mime->filters)); } } /* * 'mimeNumTypes()' - Get the number of types in a MIME database. */ int mimeNumTypes(mime_t *mime) /* I - MIME database */ { DEBUG_printf(("mimeNumTypes(mime=%p)", mime)); if (!mime) { DEBUG_puts("1mimeNumTypes: Returning 0."); return (0); } else { DEBUG_printf(("1mimeNumTypes: Returning %d.", cupsArrayCount(mime->types))); return (cupsArrayCount(mime->types)); } } /* * 'mimeSetErrorCallback()' - Set the callback for error messages. */ void mimeSetErrorCallback( mime_t *mime, /* I - MIME database */ mime_error_cb_t cb, /* I - Callback function */ void *ctx) /* I - Context pointer for callback */ { if (mime) { mime->error_cb = cb; mime->error_ctx = ctx; } } /* * 'mime_add_fcache()' - Add a filter to the filter cache. */ static const char * /* O - Full path to filter or NULL */ mime_add_fcache( cups_array_t *filtercache, /* I - Filter cache */ const char *name, /* I - Filter name */ const char *filterpath) /* I - Filter path */ { _mime_fcache_t key, /* Search key */ *temp; /* New filter cache */ char path[1024]; /* Full path to filter */ DEBUG_printf(("2mime_add_fcache(filtercache=%p, name=\"%s\", " "filterpath=\"%s\")", filtercache, name, filterpath)); key.name = (char *)name; if ((temp = (_mime_fcache_t *)cupsArrayFind(filtercache, &key)) != NULL) { DEBUG_printf(("3mime_add_fcache: Returning \"%s\".", temp->path)); return (temp->path); } if ((temp = calloc(1, sizeof(_mime_fcache_t))) == NULL) { DEBUG_puts("3mime_add_fcache: Returning NULL."); return (NULL); } temp->name = strdup(name); if (cupsFileFind(name, filterpath, 1, path, sizeof(path))) temp->path = strdup(path); cupsArrayAdd(filtercache, temp); DEBUG_printf(("3mime_add_fcache: Returning \"%s\".", temp->path)); return (temp->path); } /* * 'mime_compare_fcache()' - Compare two filter cache entries. */ static int /* O - Result of comparison */ mime_compare_fcache(_mime_fcache_t *a, /* I - First entry */ _mime_fcache_t *b) /* I - Second entry */ { return (strcmp(a->name, b->name)); } /* * 'mime_delete_fcache()' - Free all memory used by the filter cache. */ static void mime_delete_fcache( cups_array_t *filtercache) /* I - Filter cache */ { _mime_fcache_t *current; /* Current cache entry */ DEBUG_printf(("2mime_delete_fcache(filtercache=%p)", filtercache)); for (current = (_mime_fcache_t *)cupsArrayFirst(filtercache); current; current = (_mime_fcache_t *)cupsArrayNext(filtercache)) { free(current->name); if (current->path) free(current->path); free(current); } cupsArrayDelete(filtercache); } /* * 'mime_delete_rules()' - Free all memory for the given rule tree. */ static void mime_delete_rules(mime_magic_t *rules) /* I - Rules to free */ { mime_magic_t *next; /* Next rule to free */ DEBUG_printf(("2mime_delete_rules(rules=%p)", rules)); /* * Free the rules list, descending recursively to free any child rules. */ while (rules != NULL) { next = rules->next; if (rules->child != NULL) mime_delete_rules(rules->child); if (rules->op == MIME_MAGIC_REGEX) regfree(&(rules->value.rev)); free(rules); rules = next; } } /* * 'mime_load_convs()' - Load a xyz.convs file. */ static void mime_load_convs( mime_t *mime, /* I - MIME database */ const char *filename, /* I - Convs file to load */ const char *filterpath, /* I - Path for filters */ cups_array_t *filtercache) /* I - Filter program cache */ { cups_file_t *fp; /* Convs file */ char line[1024], /* Input line from file */ *lineptr, /* Current position in line */ super[MIME_MAX_SUPER], /* Super-type name */ type[MIME_MAX_TYPE], /* Type name */ *temp, /* Temporary pointer */ *filter; /* Filter program */ mime_type_t *temptype, /* MIME type looping var */ *dsttype; /* Destination MIME type */ int cost; /* Cost of filter */ DEBUG_printf(("2mime_load_convs(mime=%p, filename=\"%s\", filterpath=\"%s\", " "filtercache=%p)", mime, filename, filterpath, filtercache)); /* * First try to open the file... */ if ((fp = cupsFileOpen(filename, "r")) == NULL) { DEBUG_printf(("3mime_load_convs: Unable to open \"%s\": %s", filename, strerror(errno))); _mimeError(mime, "Unable to open \"%s\": %s", filename, strerror(errno)); return; } /* * Then read each line from the file, skipping any comments in the file... */ while (cupsFileGets(fp, line, sizeof(line)) != NULL) { /* * Skip blank lines and lines starting with a #... */ if (!line[0] || line[0] == '#') continue; /* * Strip trailing whitespace... */ for (lineptr = line + strlen(line) - 1; lineptr >= line && isspace(*lineptr & 255); lineptr --) *lineptr = '\0'; /* * Extract the destination super-type and type names from the middle of * the line. */ lineptr = line; while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\0') lineptr ++; while (*lineptr == ' ' || *lineptr == '\t') lineptr ++; temp = super; while (*lineptr != '/' && *lineptr != '\n' && *lineptr != '\0' && (temp - super + 1) < MIME_MAX_SUPER) *temp++ = (char)tolower(*lineptr++ & 255); *temp = '\0'; if (*lineptr != '/') continue; lineptr ++; temp = type; while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\n' && *lineptr != '\0' && (temp - type + 1) < MIME_MAX_TYPE) *temp++ = (char)tolower(*lineptr++ & 255); *temp = '\0'; if (*lineptr == '\0' || *lineptr == '\n') continue; if ((dsttype = mimeType(mime, super, type)) == NULL) { DEBUG_printf(("3mime_load_convs: Destination type %s/%s not found.", super, type)); continue; } /* * Then get the cost and filter program... */ while (*lineptr == ' ' || *lineptr == '\t') lineptr ++; if (*lineptr < '0' || *lineptr > '9') continue; cost = atoi(lineptr); while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\0') lineptr ++; while (*lineptr == ' ' || *lineptr == '\t') lineptr ++; if (*lineptr == '\0' || *lineptr == '\n') continue; filter = lineptr; if (strcmp(filter, "-")) { /* * Verify that the filter exists and is executable... */ if (!mime_add_fcache(filtercache, filter, filterpath)) { DEBUG_printf(("mime_load_convs: Filter %s not found in %s.", filter, filterpath)); _mimeError(mime, "Filter \"%s\" not found.", filter); continue; } } /* * Finally, get the source super-type and type names from the beginning of * the line. We do it here so we can support wildcards... */ lineptr = line; temp = super; while (*lineptr != '/' && *lineptr != '\n' && *lineptr != '\0' && (temp - super + 1) < MIME_MAX_SUPER) *temp++ = (char)tolower(*lineptr++ & 255); *temp = '\0'; if (*lineptr != '/') continue; lineptr ++; temp = type; while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\n' && *lineptr != '\0' && (temp - type + 1) < MIME_MAX_TYPE) *temp++ = (char)tolower(*lineptr++ & 255); *temp = '\0'; if (!strcmp(super, "*") && !strcmp(type, "*")) { /* * Force * / * to be "application/octet-stream"... */ strlcpy(super, "application", sizeof(super)); strlcpy(type, "octet-stream", sizeof(type)); } /* * Add the filter to the MIME database, supporting wildcards as needed... */ for (temptype = (mime_type_t *)cupsArrayFirst(mime->types); temptype; temptype = (mime_type_t *)cupsArrayNext(mime->types)) if ((super[0] == '*' || !strcmp(temptype->super, super)) && (type[0] == '*' || !strcmp(temptype->type, type))) mimeAddFilter(mime, temptype, dsttype, cost, filter); } cupsFileClose(fp); } /* * 'mime_load_types()' - Load a xyz.types file. */ static void mime_load_types(mime_t *mime, /* I - MIME database */ const char *filename) /* I - Types file to load */ { cups_file_t *fp; /* Types file */ size_t linelen; /* Length of line */ char line[32768], /* Input line from file */ *lineptr, /* Current position in line */ super[MIME_MAX_SUPER], /* Super-type name */ type[MIME_MAX_TYPE], /* Type name */ *temp; /* Temporary pointer */ mime_type_t *typeptr; /* New MIME type */ DEBUG_printf(("2mime_load_types(mime=%p, filename=\"%s\")", mime, filename)); /* * First try to open the file... */ if ((fp = cupsFileOpen(filename, "r")) == NULL) { DEBUG_printf(("3mime_load_types: Unable to open \"%s\": %s", filename, strerror(errno))); _mimeError(mime, "Unable to open \"%s\": %s", filename, strerror(errno)); return; } /* * Then read each line from the file, skipping any comments in the file... */ while (cupsFileGets(fp, line, sizeof(line)) != NULL) { /* * Skip blank lines and lines starting with a #... */ if (!line[0] || line[0] == '#') continue; /* * While the last character in the line is a backslash, continue on to the * next line (and the next, etc.) */ linelen = strlen(line); while (line[linelen - 1] == '\\') { linelen --; if (cupsFileGets(fp, line + linelen, sizeof(line) - linelen) == NULL) line[linelen] = '\0'; else linelen += strlen(line + linelen); } /* * Extract the super-type and type names from the beginning of the line. */ lineptr = line; temp = super; while (*lineptr != '/' && *lineptr != '\n' && *lineptr != '\0' && (temp - super + 1) < MIME_MAX_SUPER) *temp++ = (char)tolower(*lineptr++ & 255); *temp = '\0'; if (*lineptr != '/') continue; lineptr ++; temp = type; while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\n' && *lineptr != '\0' && (temp - type + 1) < MIME_MAX_TYPE) *temp++ = (char)tolower(*lineptr++ & 255); *temp = '\0'; /* * Add the type and rules to the MIME database... */ typeptr = mimeAddType(mime, super, type); mimeAddTypeRule(typeptr, lineptr); } cupsFileClose(fp); } cups-2.2.7/scheduler/mime.h000664 000765 000024 00000012557 13255074424 016243 0ustar00msweetstaff000000 000000 /* * MIME type/conversion database definitions for CUPS. * * Copyright 2007-2013 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #ifndef _CUPS_MIME_H_ # define _CUPS_MIME_H_ # include # include # include # include /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Constants... */ # define MIME_MAX_SUPER 16 /* Maximum size of supertype name */ # define MIME_MAX_TYPE IPP_MAX_NAME /* Maximum size of type name */ # define MIME_MAX_FILTER 256 /* Maximum size of filter pathname */ # define MIME_MAX_BUFFER 4096 /* Maximum size of file buffer */ /* * Types/structures... */ typedef enum { MIME_MAGIC_NOP, /* No operation */ MIME_MAGIC_AND, /* Logical AND of all children */ MIME_MAGIC_OR, /* Logical OR of all children */ MIME_MAGIC_MATCH, /* Filename match */ MIME_MAGIC_ASCII, /* ASCII characters in range */ MIME_MAGIC_PRINTABLE, /* Printable characters (32-255) in range */ MIME_MAGIC_STRING, /* String matches */ MIME_MAGIC_CHAR, /* Character/byte matches */ MIME_MAGIC_SHORT, /* Short/16-bit word matches */ MIME_MAGIC_INT, /* Integer/32-bit word matches */ MIME_MAGIC_LOCALE, /* Current locale matches string */ MIME_MAGIC_CONTAINS, /* File contains a string */ MIME_MAGIC_ISTRING, /* Case-insensitive string matches */ MIME_MAGIC_REGEX /* Regular expression matches */ } mime_op_t; typedef struct _mime_magic_s /**** MIME Magic Data ****/ { struct _mime_magic_s *prev, /* Previous rule */ *next, /* Next rule */ *parent, /* Parent rules */ *child; /* Child rules */ short op, /* Operation code (see above) */ invert; /* Invert the result */ int offset, /* Offset in file */ region, /* Region length */ length; /* Length of data */ union { char matchv[64]; /* Match value */ char localev[64]; /* Locale value */ char stringv[64]; /* String value */ unsigned char charv; /* Byte value */ unsigned short shortv; /* Short value */ unsigned intv; /* Integer value */ regex_t rev; /* Regular expression value */ } value; } mime_magic_t; typedef struct _mime_type_s /**** MIME Type Data ****/ { mime_magic_t *rules; /* Rules used to detect this type */ int priority; /* Priority of this type */ char super[MIME_MAX_SUPER], /* Super-type name ("image", "application", etc.) */ type[MIME_MAX_TYPE]; /* Type name ("png", "postscript", etc.) */ } mime_type_t; typedef struct _mime_filter_s /**** MIME Conversion Filter Data ****/ { mime_type_t *src, /* Source type */ *dst; /* Destination type */ int cost; /* Relative cost */ char filter[MIME_MAX_FILTER];/* Filter program to use */ size_t maxsize; /* Maximum file size for this filter */ } mime_filter_t; typedef void (*mime_error_cb_t)(void *ctx, const char *message); typedef struct _mime_s /**** MIME Database ****/ { cups_array_t *types; /* File types */ cups_array_t *filters; /* Type conversion filters */ cups_array_t *srcs; /* Filters sorted by source type */ mime_error_cb_t error_cb; /* Error message callback */ void *error_ctx; /* Pointer for callback */ } mime_t; /* * Functions... */ extern void mimeDelete(mime_t *mime); extern mime_t *mimeNew(void) _CUPS_API_1_5; extern mime_t *mimeLoad(const char *pathname, const char *filterpath); extern mime_t *mimeLoadFilters(mime_t *mime, const char *pathname, const char *filterpath); extern mime_t *mimeLoadTypes(mime_t *mime, const char *pathname); extern mime_type_t *mimeAddType(mime_t *mime, const char *super, const char *type); extern int mimeAddTypeRule(mime_type_t *mt, const char *rule); extern void mimeDeleteType(mime_t *mime, mime_type_t *mt); extern mime_type_t *mimeFileType(mime_t *mime, const char *pathname, const char *filename, int *compression); extern mime_type_t *mimeFirstType(mime_t *mime); extern mime_type_t *mimeNextType(mime_t *mime); extern int mimeNumTypes(mime_t *mime); extern mime_type_t *mimeType(mime_t *mime, const char *super, const char *type); extern mime_filter_t *mimeAddFilter(mime_t *mime, mime_type_t *src, mime_type_t *dst, int cost, const char *filter); extern void mimeDeleteFilter(mime_t *mime, mime_filter_t *filter); extern cups_array_t *mimeFilter(mime_t *mime, mime_type_t *src, mime_type_t *dst, int *cost); extern cups_array_t *mimeFilter2(mime_t *mime, mime_type_t *src, size_t srcsize, mime_type_t *dst, int *cost); extern mime_filter_t *mimeFilterLookup(mime_t *mime, mime_type_t *src, mime_type_t *dst); extern mime_filter_t *mimeFirstFilter(mime_t *mime); extern mime_filter_t *mimeNextFilter(mime_t *mime); extern int mimeNumFilters(mime_t *mime); extern void mimeSetErrorCallback(mime_t *mime, mime_error_cb_t cb, void *context) _CUPS_API_1_5; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_MIME_H_ */ cups-2.2.7/scheduler/network.c000664 000765 000024 00000016220 13255074424 016767 0ustar00msweetstaff000000 000000 /* * Network interface functions for the CUPS scheduler. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers. */ #include #include "cupsd.h" /* * Local functions... */ static void cupsdNetIFFree(void); static int compare_netif(cupsd_netif_t *a, cupsd_netif_t *b); /* * 'cupsdNetIFFind()' - Find a network interface. */ cupsd_netif_t * /* O - Network interface data */ cupsdNetIFFind(const char *name) /* I - Name of interface */ { cupsd_netif_t key; /* Search key */ /* * Update the interface list as needed... */ if (NetIFUpdate) cupsdNetIFUpdate(); /* * Search for the named interface... */ strlcpy(key.name, name, sizeof(key.name)); return ((cupsd_netif_t *)cupsArrayFind(NetIFList, &key)); } /* * 'cupsdNetIFFree()' - Free the current network interface list. */ static void cupsdNetIFFree(void) { cupsd_netif_t *current; /* Current interface in array */ /* * Loop through the interface list and free all the records... */ for (current = (cupsd_netif_t *)cupsArrayFirst(NetIFList); current; current = (cupsd_netif_t *)cupsArrayNext(NetIFList)) { cupsArrayRemove(NetIFList, current); free(current); } } /* * 'cupsdNetIFUpdate()' - Update the network interface list as needed... */ void cupsdNetIFUpdate(void) { int match; /* Matching address? */ cupsd_listener_t *lis; /* Listen address */ cupsd_netif_t *temp; /* New interface */ struct ifaddrs *addrs, /* Interface address list */ *addr; /* Current interface address */ char hostname[1024]; /* Hostname for address */ size_t hostlen; /* Length of hostname */ /* * Only update the list if we need to... */ if (!NetIFUpdate) return; NetIFUpdate = 0; /* * Free the old interfaces... */ cupsdNetIFFree(); /* * Make sure we have an array... */ if (!NetIFList) NetIFList = cupsArrayNew((cups_array_func_t)compare_netif, NULL); if (!NetIFList) return; /* * Grab a new list of interfaces... */ if (getifaddrs(&addrs) < 0) { cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdNetIFUpdate: Unable to get interface list - %s", strerror(errno)); return; } for (addr = addrs; addr != NULL; addr = addr->ifa_next) { /* * See if this interface address is IPv4 or IPv6... */ if (addr->ifa_addr == NULL || (addr->ifa_addr->sa_family != AF_INET #ifdef AF_INET6 && addr->ifa_addr->sa_family != AF_INET6 #endif ) || addr->ifa_netmask == NULL || addr->ifa_name == NULL) { cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdNetIFUpdate: Ignoring \"%s\".", addr->ifa_name); continue; } /* * Try looking up the hostname for the address as needed... */ if (HostNameLookups) httpAddrLookup((http_addr_t *)(addr->ifa_addr), hostname, sizeof(hostname)); else { /* * Map the default server address and localhost to the server name * and localhost, respectively; for all other addresses, use the * numeric address... */ if (httpAddrLocalhost((http_addr_t *)(addr->ifa_addr))) strlcpy(hostname, "localhost", sizeof(hostname)); else httpAddrString((http_addr_t *)(addr->ifa_addr), hostname, sizeof(hostname)); } /* * Create a new address element... */ hostlen = strlen(hostname); if ((temp = calloc(1, sizeof(cupsd_netif_t) + hostlen)) == NULL) { cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdNetIFUpdate: Unable to allocate memory for interface."); break; } /* * Copy all of the information... */ strlcpy(temp->name, addr->ifa_name, sizeof(temp->name)); temp->hostlen = hostlen; memcpy(temp->hostname, hostname, hostlen + 1); if (addr->ifa_addr->sa_family == AF_INET) { /* * Copy IPv4 addresses... */ memcpy(&(temp->address), addr->ifa_addr, sizeof(struct sockaddr_in)); memcpy(&(temp->mask), addr->ifa_netmask, sizeof(struct sockaddr_in)); if (addr->ifa_dstaddr) memcpy(&(temp->broadcast), addr->ifa_dstaddr, sizeof(struct sockaddr_in)); } #ifdef AF_INET6 else { /* * Copy IPv6 addresses... */ memcpy(&(temp->address), addr->ifa_addr, sizeof(struct sockaddr_in6)); memcpy(&(temp->mask), addr->ifa_netmask, sizeof(struct sockaddr_in6)); if (addr->ifa_dstaddr) memcpy(&(temp->broadcast), addr->ifa_dstaddr, sizeof(struct sockaddr_in6)); } #endif /* AF_INET6 */ if (!(addr->ifa_flags & IFF_POINTOPOINT) && !httpAddrLocalhost(&(temp->address))) temp->is_local = 1; /* * Determine which port to use when advertising printers... */ for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); lis; lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) { match = 0; if (httpAddrAny(&(lis->address))) match = 1; else if (addr->ifa_addr->sa_family == AF_INET && lis->address.addr.sa_family == AF_INET && (lis->address.ipv4.sin_addr.s_addr & temp->mask.ipv4.sin_addr.s_addr) == (temp->address.ipv4.sin_addr.s_addr & temp->mask.ipv4.sin_addr.s_addr)) match = 1; #ifdef AF_INET6 else if (addr->ifa_addr->sa_family == AF_INET6 && lis->address.addr.sa_family == AF_INET6 && (lis->address.ipv6.sin6_addr.s6_addr[0] & temp->mask.ipv6.sin6_addr.s6_addr[0]) == (temp->address.ipv6.sin6_addr.s6_addr[0] & temp->mask.ipv6.sin6_addr.s6_addr[0]) && (lis->address.ipv6.sin6_addr.s6_addr[1] & temp->mask.ipv6.sin6_addr.s6_addr[1]) == (temp->address.ipv6.sin6_addr.s6_addr[1] & temp->mask.ipv6.sin6_addr.s6_addr[1]) && (lis->address.ipv6.sin6_addr.s6_addr[2] & temp->mask.ipv6.sin6_addr.s6_addr[2]) == (temp->address.ipv6.sin6_addr.s6_addr[2] & temp->mask.ipv6.sin6_addr.s6_addr[2]) && (lis->address.ipv6.sin6_addr.s6_addr[3] & temp->mask.ipv6.sin6_addr.s6_addr[3]) == (temp->address.ipv6.sin6_addr.s6_addr[3] & temp->mask.ipv6.sin6_addr.s6_addr[3])) match = 1; #endif /* AF_INET6 */ if (match) { temp->port = httpAddrPort(&(lis->address)); break; } } /* * Add it to the array... */ cupsArrayAdd(NetIFList, temp); cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdNetIFUpdate: \"%s\" = %s:%d", temp->name, temp->hostname, temp->port); } freeifaddrs(addrs); } /* * 'compare_netif()' - Compare two network interfaces. */ static int /* O - Result of comparison */ compare_netif(cupsd_netif_t *a, /* I - First network interface */ cupsd_netif_t *b) /* I - Second network interface */ { return (strcmp(a->name, b->name)); } cups-2.2.7/scheduler/network.h000664 000765 000024 00000002424 13255074424 016775 0ustar00msweetstaff000000 000000 /* * Network interface definitions for the CUPS scheduler. * * Copyright 2007-2010 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". */ /* * Structures... */ typedef struct cupsd_netif_s /**** Network interface data ****/ { int is_local, /* Local (not point-to-point) interface? */ port; /* Listen port */ http_addr_t address, /* Network address */ mask, /* Network mask */ broadcast; /* Broadcast address */ size_t hostlen; /* Length of hostname */ char name[32], /* Network interface name */ hostname[1]; /* Hostname associated with interface */ } cupsd_netif_t; /* * Globals... */ VAR int NetIFUpdate VALUE(1); /* Network interface list needs updating */ VAR cups_array_t *NetIFList VALUE(NULL); /* Array of network interfaces */ /* * Prototypes... */ extern cupsd_netif_t *cupsdNetIFFind(const char *name); extern void cupsdNetIFUpdate(void); cups-2.2.7/scheduler/org.cups.cups-lpd.plist.in000664 000765 000024 00000001617 13255074424 022106 0ustar00msweetstaff000000 000000 Disabled Label org.cups.cups-lpd ProcessType Adaptive EnableTransactions EnablePressuredExit ProgramArguments /usr/libexec/cups/daemon/cups-lpd -o document-format=application/octet-stream Sockets Listeners SockServiceName printer SockType stream UserName @CUPS_USER@ inetdCompatibility Wait cups-2.2.7/scheduler/org.cups.cups-lpd.socket000664 000765 000024 00000000224 13255074424 021627 0ustar00msweetstaff000000 000000 [Unit] Description=CUPS LPD Server Socket PartOf=org.cups.cups-lpd.service [Socket] ListenStream=515 Accept=yes [Install] WantedBy=sockets.target cups-2.2.7/scheduler/org.cups.cups-lpdAT.service.in000664 000765 000024 00000000237 13255074424 022635 0ustar00msweetstaff000000 000000 [Unit] Description=CUPS LPD server Documentation=man:cups-lpd(8) [Service] ExecStart=-@CUPS_SERVERBIN@/daemon/cups-lpd StandardInput=socket User=@CUPS_USER@ cups-2.2.7/scheduler/org.cups.cupsd.path.in000664 000765 000024 00000000230 13255074424 021264 0ustar00msweetstaff000000 000000 [Unit] Description=CUPS Scheduler PartOf=org.cups.cupsd.service [Path] PathExists=@CUPS_CACHEDIR@/org.cups.cupsd [Install] WantedBy=multi-user.target cups-2.2.7/scheduler/org.cups.cupsd.plist000664 000765 000024 00000002246 13255074424 021067 0ustar00msweetstaff000000 000000 Label org.cups.cupsd ProcessType Adaptive EnableTransactions EnablePressuredExit ExitTimeOut 60 KeepAlive PathState /private/var/spool/cups/cache/org.cups.cupsd ProgramArguments /usr/sbin/cupsd -l EnvironmentVariables CUPS_DEBUG_LOG /var/log/cups/debug_log CUPS_DEBUG_LEVEL 3 CUPS_DEBUG_FILTER ^(cupsDo|cupsGet|cupsMake|cupsSet|http|_http|ipp|_ipp|mime).* Sockets Listeners SockPathMode 49663 SockPathName /private/var/run/cupsd cups-2.2.7/scheduler/org.cups.cupsd.service.in000664 000765 000024 00000000322 13255074424 021772 0ustar00msweetstaff000000 000000 [Unit] Description=CUPS Scheduler Documentation=man:cupsd(8) [Service] ExecStart=@sbindir@/cupsd -l Type=simple Restart=always [Install] Also=org.cups.cupsd.socket org.cups.cupsd.path WantedBy=printer.target cups-2.2.7/scheduler/org.cups.cupsd.socket.in000664 000765 000024 00000000226 13255074424 021625 0ustar00msweetstaff000000 000000 [Unit] Description=CUPS Scheduler PartOf=org.cups.cupsd.service [Socket] ListenStream=@CUPS_DEFAULT_DOMAINSOCKET@ [Install] WantedBy=sockets.target cups-2.2.7/scheduler/policy.c000664 000765 000024 00000026046 13255074424 016604 0ustar00msweetstaff000000 000000 /* * Policy routines for the CUPS scheduler. * * Copyright 2007-2011, 2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #include /* * Local functions... */ static int compare_ops(cupsd_location_t *a, cupsd_location_t *b); static int compare_policies(cupsd_policy_t *a, cupsd_policy_t *b); static void free_policy(cupsd_policy_t *p); static int hash_op(cupsd_location_t *op); /* * 'cupsdAddPolicy()' - Add a policy to the system. */ cupsd_policy_t * /* O - Policy */ cupsdAddPolicy(const char *policy) /* I - Name of policy */ { cupsd_policy_t *temp; /* Pointer to policy */ if (!policy) return (NULL); if (!Policies) Policies = cupsArrayNew3((cups_array_func_t)compare_policies, NULL, (cups_ahash_func_t)NULL, 0, (cups_acopy_func_t)NULL, (cups_afree_func_t)free_policy); if (!Policies) return (NULL); if ((temp = calloc(1, sizeof(cupsd_policy_t))) != NULL) { cupsdSetString(&temp->name, policy); cupsArrayAdd(Policies, temp); } return (temp); } /* * 'cupsdAddPolicyOp()' - Add an operation to a policy. */ cupsd_location_t * /* O - New policy operation */ cupsdAddPolicyOp(cupsd_policy_t *p, /* I - Policy */ cupsd_location_t *po, /* I - Policy operation to copy */ ipp_op_t op) /* I - IPP operation code */ { cupsd_location_t *temp; /* New policy operation */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdAddPolicyOp(p=%p, po=%p, op=%x(%s))", p, po, op, ippOpString(op)); if (!p) return (NULL); if (!p->ops) p->ops = cupsArrayNew3((cups_array_func_t)compare_ops, NULL, (cups_ahash_func_t)hash_op, 128, (cups_acopy_func_t)NULL, (cups_afree_func_t)cupsdFreeLocation); if (!p->ops) return (NULL); if ((temp = cupsdCopyLocation(po)) != NULL) { temp->op = op; temp->limit = CUPSD_AUTH_LIMIT_IPP; cupsArrayAdd(p->ops, temp); } return (temp); } /* * 'cupsdCheckPolicy()' - Check the IPP operation and username against a policy. */ http_status_t /* I - 1 if OK, 0 otherwise */ cupsdCheckPolicy(cupsd_policy_t *p, /* I - Policy */ cupsd_client_t *con, /* I - Client connection */ const char *owner) /* I - Owner of object */ { cupsd_location_t *po; /* Current policy operation */ /* * Range check... */ if (!p || !con) { cupsdLogMessage(CUPSD_LOG_CRIT, "cupsdCheckPolicy: p=%p, con=%p.", p, con); return ((http_status_t)0); } /* * Find a match for the operation... */ if ((po = cupsdFindPolicyOp(p, con->request->request.op.operation_id)) == NULL) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCheckPolicy: No matching operation, returning 0."); return ((http_status_t)0); } con->best = po; /* * Return the status of the check... */ return (cupsdIsAuthorized(con, owner)); } /* * 'cupsdDeleteAllPolicies()' - Delete all policies in memory. */ void cupsdDeleteAllPolicies(void) { cupsd_printer_t *printer; /* Current printer */ if (!Policies) return; /* * First clear the policy pointers for all printers... */ for (printer = (cupsd_printer_t *)cupsArrayFirst(Printers); printer; printer = (cupsd_printer_t *)cupsArrayNext(Printers)) printer->op_policy_ptr = NULL; DefaultPolicyPtr = NULL; /* * Then free all of the policies... */ cupsArrayDelete(Policies); Policies = NULL; } /* * 'cupsdFindPolicy()' - Find a named policy. */ cupsd_policy_t * /* O - Policy */ cupsdFindPolicy(const char *policy) /* I - Name of policy */ { cupsd_policy_t key; /* Search key */ /* * Range check... */ if (!policy) return (NULL); /* * Look it up... */ key.name = (char *)policy; return ((cupsd_policy_t *)cupsArrayFind(Policies, &key)); } /* * 'cupsdFindPolicyOp()' - Find a policy operation. */ cupsd_location_t * /* O - Policy operation */ cupsdFindPolicyOp(cupsd_policy_t *p, /* I - Policy */ ipp_op_t op) /* I - IPP operation */ { cupsd_location_t key, /* Search key... */ *po; /* Current policy operation */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindPolicyOp(p=%p, op=%x(%s))", p, op, ippOpString(op)); /* * Range check... */ if (!p) return (NULL); /* * Check the operation against the available policies... */ key.op = op; if ((po = (cupsd_location_t *)cupsArrayFind(p->ops, &key)) != NULL) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindPolicyOp: Found exact match..."); return (po); } key.op = IPP_ANY_OPERATION; if ((po = (cupsd_location_t *)cupsArrayFind(p->ops, &key)) != NULL) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindPolicyOp: Found wildcard match..."); return (po); } cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindPolicyOp: No match found."); return (NULL); } /* * 'cupsdGetPrivateAttrs()' - Get the private attributes for the current * request. */ cups_array_t * /* O - Array or NULL for no restrictions */ cupsdGetPrivateAttrs( cupsd_policy_t *policy, /* I - Policy */ cupsd_client_t *con, /* I - Client connection */ cupsd_printer_t *printer, /* I - Printer, if any */ const char *owner) /* I - Owner of object */ { char *name; /* Current name in access list */ cups_array_t *access_ptr, /* Access array */ *attrs_ptr; /* Attributes array */ const char *username; /* Username associated with request */ ipp_attribute_t *attr; /* Attribute from request */ struct passwd *pw; /* User info */ #ifdef DEBUG cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdGetPrivateAttrs(policy=%p(%s), con=%p(%d), " "printer=%p(%s), owner=\"%s\")", policy, policy->name, con, con->number, printer, printer ? printer->name : "", owner); #endif /* DEBUG */ if (!policy) { cupsdLogMessage(CUPSD_LOG_CRIT, "cupsdGetPrivateAttrs: policy=%p, con=%p, printer=%p, owner=\"%s\", DefaultPolicyPtr=%p: This should never happen, please report a bug.", policy, con, printer, owner, DefaultPolicyPtr); policy = DefaultPolicyPtr; } /* * Get the access and attributes lists that correspond to the request... */ #ifdef DEBUG cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdGetPrivateAttrs: %s", ippOpString(con->request->request.op.operation_id)); #endif /* DEBUG */ switch (con->request->request.op.operation_id) { case IPP_GET_SUBSCRIPTIONS : case IPP_GET_SUBSCRIPTION_ATTRIBUTES : case IPP_GET_NOTIFICATIONS : access_ptr = policy->sub_access; attrs_ptr = policy->sub_attrs; break; default : access_ptr = policy->job_access; attrs_ptr = policy->job_attrs; break; } /* * If none of the attributes are private, return NULL now... */ if ((name = (char *)cupsArrayFirst(attrs_ptr)) != NULL && !_cups_strcasecmp(name, "none")) { #ifdef DEBUG cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdGetPrivateAttrs: Returning NULL."); #endif /* DEBUG */ return (NULL); } /* * Otherwise check the user against the access list... */ if (con->username[0]) username = con->username; else if ((attr = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_NAME)) != NULL) username = attr->values[0].string.text; else username = "anonymous"; if (username[0]) { pw = getpwnam(username); endpwent(); } else pw = NULL; #ifdef DEBUG cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdGetPrivateAttrs: username=\"%s\"", username); #endif /* DEBUG */ /* * Otherwise check the user against the access list... */ for (name = (char *)cupsArrayFirst(access_ptr); name; name = (char *)cupsArrayNext(access_ptr)) { #ifdef DEBUG cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdGetPrivateAttrs: name=%s", name); #endif /* DEBUG */ if (printer && !_cups_strcasecmp(name, "@ACL")) { char *acl; /* Current ACL user/group */ for (acl = (char *)cupsArrayFirst(printer->users); acl; acl = (char *)cupsArrayNext(printer->users)) { if (acl[0] == '@') { /* * Check group membership... */ if (cupsdCheckGroup(username, pw, acl + 1)) break; } else if (acl[0] == '#') { /* * Check UUID... */ if (cupsdCheckGroup(username, pw, acl)) break; } else if (!_cups_strcasecmp(username, acl)) break; } } else if (owner && !_cups_strcasecmp(name, "@OWNER") && !_cups_strcasecmp(username, owner)) { #ifdef DEBUG cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdGetPrivateAttrs: Returning NULL."); #endif /* DEBUG */ return (NULL); } else if (!_cups_strcasecmp(name, "@SYSTEM")) { int i; /* Looping var */ for (i = 0; i < NumSystemGroups; i ++) if (cupsdCheckGroup(username, pw, SystemGroups[i])) { #ifdef DEBUG cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdGetPrivateAttrs: Returning NULL."); #endif /* DEBUG */ return (NULL); } } else if (name[0] == '@') { if (cupsdCheckGroup(username, pw, name + 1)) { #ifdef DEBUG cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdGetPrivateAttrs: Returning NULL."); #endif /* DEBUG */ return (NULL); } } else if (!_cups_strcasecmp(username, name)) { #ifdef DEBUG cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdGetPrivateAttrs: Returning NULL."); #endif /* DEBUG */ return (NULL); } } /* * No direct access, so return private attributes list... */ #ifdef DEBUG cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdGetPrivateAttrs: Returning list."); #endif /* DEBUG */ return (attrs_ptr); } /* * 'compare_ops()' - Compare two operations. */ static int /* O - Result of comparison */ compare_ops(cupsd_location_t *a, /* I - First operation */ cupsd_location_t *b) /* I - Second operation */ { return (a->op - b->op); } /* * 'compare_policies()' - Compare two policies. */ static int /* O - Result of comparison */ compare_policies(cupsd_policy_t *a, /* I - First policy */ cupsd_policy_t *b) /* I - Second policy */ { return (_cups_strcasecmp(a->name, b->name)); } /* * 'free_policy()' - Free the memory used by a policy. */ static void free_policy(cupsd_policy_t *p) /* I - Policy to free */ { cupsArrayDelete(p->job_access); cupsArrayDelete(p->job_attrs); cupsArrayDelete(p->sub_access); cupsArrayDelete(p->sub_attrs); cupsArrayDelete(p->ops); cupsdClearString(&p->name); free(p); } /* * 'hash_op()' - Generate a lookup hash for the operation. */ static int /* O - Hash value */ hash_op(cupsd_location_t *op) /* I - Operation */ { return (((op->op >> 6) & 0x40) | (op->op & 0x3f)); } cups-2.2.7/scheduler/policy.h000664 000765 000024 00000003261 13255074424 016603 0ustar00msweetstaff000000 000000 /* * Policy definitions for the CUPS scheduler. * * Copyright 2007-2010 by Apple Inc. * Copyright 1997-2005 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Policy structure... */ typedef struct { char *name; /* Policy name */ cups_array_t *job_access, /* Private users/groups for jobs */ *job_attrs, /* Private attributes for jobs */ *sub_access, /* Private users/groups for subscriptions */ *sub_attrs, /* Private attributes for subscriptions */ *ops; /* Operations */ } cupsd_policy_t; typedef struct cupsd_printer_s cupsd_printer_t; /* * Globals... */ VAR cups_array_t *Policies VALUE(NULL); /* Policies */ /* * Prototypes... */ extern cupsd_policy_t *cupsdAddPolicy(const char *policy); extern cupsd_location_t *cupsdAddPolicyOp(cupsd_policy_t *p, cupsd_location_t *po, ipp_op_t op); extern http_status_t cupsdCheckPolicy(cupsd_policy_t *p, cupsd_client_t *con, const char *owner); extern void cupsdDeleteAllPolicies(void); extern cupsd_policy_t *cupsdFindPolicy(const char *policy); extern cupsd_location_t *cupsdFindPolicyOp(cupsd_policy_t *p, ipp_op_t op); extern cups_array_t *cupsdGetPrivateAttrs(cupsd_policy_t *p, cupsd_client_t *con, cupsd_printer_t *printer, const char *owner); cups-2.2.7/scheduler/printers.c000664 000765 000024 00000430651 13255074424 017154 0ustar00msweetstaff000000 000000 /* * Printer routines for the CUPS scheduler. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #include #ifdef HAVE_APPLICATIONSERVICES_H # include #endif /* HAVE_APPLICATIONSERVICES_H */ #ifdef HAVE_SYS_MOUNT_H # include #endif /* HAVE_SYS_MOUNT_H */ #ifdef HAVE_SYS_STATVFS_H # include #elif defined(HAVE_SYS_STATFS_H) # include #endif /* HAVE_SYS_STATVFS_H */ #ifdef HAVE_SYS_VFS_H # include #endif /* HAVE_SYS_VFS_H */ #ifdef __APPLE__ # include #endif /* __APPLE__ */ /* * Local functions... */ static void add_printer_defaults(cupsd_printer_t *p); static void add_printer_filter(cupsd_printer_t *p, mime_type_t *type, const char *filter); static void add_printer_formats(cupsd_printer_t *p); static int compare_printers(void *first, void *second, void *data); static void delete_printer_filters(cupsd_printer_t *p); static void dirty_printer(cupsd_printer_t *p); static void load_ppd(cupsd_printer_t *p); static ipp_t *new_media_col(pwg_size_t *size, const char *source, const char *type); static void write_xml_string(cups_file_t *fp, const char *s); /* * 'cupsdAddPrinter()' - Add a printer to the system. */ cupsd_printer_t * /* O - New printer */ cupsdAddPrinter(const char *name) /* I - Name of printer */ { cupsd_printer_t *p; /* New printer */ char uri[1024], /* Printer URI */ uuid[64]; /* Printer UUID */ /* * Range check input... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdAddPrinter(\"%s\")", name); /* * Create a new printer entity... */ if ((p = calloc(1, sizeof(cupsd_printer_t))) == NULL) { cupsdLogMessage(CUPSD_LOG_CRIT, "Unable to allocate memory for printer - %s", strerror(errno)); return (NULL); } _cupsRWInit(&p->lock); cupsdSetString(&p->name, name); cupsdSetString(&p->info, name); cupsdSetString(&p->hostname, ServerName); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, ServerName, RemotePort, "/printers/%s", name); cupsdSetString(&p->uri, uri); cupsdSetString(&p->uuid, httpAssembleUUID(ServerName, RemotePort, name, 0, uuid, sizeof(uuid))); cupsdSetDeviceURI(p, "file:///dev/null"); p->config_time = time(NULL); p->state = IPP_PRINTER_STOPPED; p->state_time = time(NULL); p->accepting = 0; p->shared = DefaultShared; p->filetype = mimeAddType(MimeDatabase, "printer", name); cupsdSetString(&p->job_sheets[0], "none"); cupsdSetString(&p->job_sheets[1], "none"); cupsdSetString(&p->error_policy, ErrorPolicy); cupsdSetString(&p->op_policy, DefaultPolicy); p->op_policy_ptr = DefaultPolicyPtr; /* * Insert the printer in the printer list alphabetically... */ if (!Printers) Printers = cupsArrayNew(compare_printers, NULL); cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdAddPrinter: Adding %s to Printers", p->name); cupsArrayAdd(Printers, p); /* * Return the new printer... */ return (p); } /* * 'cupsdCreateCommonData()' - Create the common printer data. */ void cupsdCreateCommonData(void) { int i; /* Looping var */ ipp_attribute_t *attr; /* Attribute data */ cups_dir_t *dir; /* Notifier directory */ cups_dentry_t *dent; /* Notifier directory entry */ cups_array_t *notifiers; /* Notifier array */ char filename[1024], /* Filename */ *notifier; /* Current notifier */ cupsd_policy_t *p; /* Current policy */ int k_supported; /* Maximum file size supported */ #ifdef HAVE_STATVFS struct statvfs spoolinfo; /* FS info for spool directory */ double spoolsize; /* FS size */ #elif defined(HAVE_STATFS) struct statfs spoolinfo; /* FS info for spool directory */ double spoolsize; /* FS size */ #endif /* HAVE_STATVFS */ static const int nups[] = /* number-up-supported values */ { 1, 2, 4, 6, 9, 16 }; static const int orients[4] =/* orientation-requested-supported values */ { IPP_PORTRAIT, IPP_LANDSCAPE, IPP_REVERSE_LANDSCAPE, IPP_REVERSE_PORTRAIT }; static const char * const holds[] = /* job-hold-until-supported values */ { "no-hold", "indefinite", "day-time", "evening", "night", "second-shift", "third-shift", "weekend" }; static const char * const features[] =/* ipp-features-supported values */ { "subscription-object" }; static const char * const versions[] =/* ipp-versions-supported values */ { "1.0", "1.1", "2.0", "2.1" }; static const int ops[] = /* operations-supported values */ { IPP_OP_PRINT_JOB, IPP_OP_VALIDATE_JOB, IPP_OP_CREATE_JOB, IPP_OP_SEND_DOCUMENT, IPP_OP_CANCEL_JOB, IPP_OP_GET_JOB_ATTRIBUTES, IPP_OP_GET_JOBS, IPP_OP_GET_PRINTER_ATTRIBUTES, IPP_OP_HOLD_JOB, IPP_OP_RELEASE_JOB, IPP_OP_PAUSE_PRINTER, IPP_OP_RESUME_PRINTER, IPP_OP_PURGE_JOBS, IPP_OP_SET_PRINTER_ATTRIBUTES, IPP_OP_SET_JOB_ATTRIBUTES, IPP_OP_GET_PRINTER_SUPPORTED_VALUES, IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS, IPP_OP_CREATE_JOB_SUBSCRIPTIONS, IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES, IPP_OP_GET_SUBSCRIPTIONS, IPP_OP_RENEW_SUBSCRIPTION, IPP_OP_CANCEL_SUBSCRIPTION, IPP_OP_GET_NOTIFICATIONS, IPP_OP_ENABLE_PRINTER, IPP_OP_DISABLE_PRINTER, IPP_OP_HOLD_NEW_JOBS, IPP_OP_RELEASE_HELD_NEW_JOBS, IPP_OP_CANCEL_JOBS, IPP_OP_CANCEL_MY_JOBS, IPP_OP_CLOSE_JOB, IPP_OP_CUPS_GET_DEFAULT, IPP_OP_CUPS_GET_PRINTERS, IPP_OP_CUPS_ADD_MODIFY_PRINTER, IPP_OP_CUPS_DELETE_PRINTER, IPP_OP_CUPS_GET_CLASSES, IPP_OP_CUPS_ADD_MODIFY_CLASS, IPP_OP_CUPS_DELETE_CLASS, IPP_OP_CUPS_ACCEPT_JOBS, IPP_OP_CUPS_REJECT_JOBS, IPP_OP_CUPS_SET_DEFAULT, IPP_OP_CUPS_GET_DEVICES, IPP_OP_CUPS_GET_PPDS, IPP_OP_CUPS_MOVE_JOB, IPP_OP_CUPS_AUTHENTICATE_JOB, IPP_OP_CUPS_GET_PPD, IPP_OP_CUPS_GET_DOCUMENT, IPP_OP_RESTART_JOB }; static const char * const charsets[] =/* charset-supported values */ { "us-ascii", "utf-8" }; static const char * const compressions[] = { /* document-compression-supported values */ "none" #ifdef HAVE_LIBZ ,"gzip" #endif /* HAVE_LIBZ */ }; static const char * const media_col_supported[] = { /* media-col-supported values */ "media-bottom-margin", "media-left-margin", "media-right-margin", "media-size", "media-source", "media-top-margin", "media-type" }; static const char * const multiple_document_handling[] = { /* multiple-document-handling-supported values */ "separate-documents-uncollated-copies", "separate-documents-collated-copies" }; static const char * const notify_attrs[] = { /* notify-attributes-supported values */ "printer-state-change-time", "notify-lease-expiration-time", "notify-subscriber-user-name" }; static const char * const notify_events[] = { /* notify-events-supported values */ "job-completed", "job-config-changed", "job-created", "job-progress", "job-state-changed", "job-stopped", "printer-added", "printer-changed", "printer-config-changed", "printer-deleted", "printer-finishings-changed", "printer-media-changed", "printer-modified", "printer-restarted", "printer-shutdown", "printer-state-changed", "printer-stopped", "server-audit", "server-restarted", "server-started", "server-stopped" }; static const char * const job_creation[] = { /* job-creation-attributes-supported */ "copies", "finishings", "ipp-attribute-fidelity", "job-hold-until", "job-name", "job-priority", "job-sheets", "media", "media-col", "multiple-document-handling", "number-up", "output-bin", "orientation-requested", "page-ranges", "print-color-mode", "print-quality", "printer-resolution", "sides" }; static const char * const job_settable[] = { /* job-settable-attributes-supported */ "copies", "finishings", "job-hold-until", "job-name", "job-priority", "media", "media-col", "multiple-document-handling", "number-up", "output-bin", "orientation-requested", "page-ranges", "print-color-mode", "print-quality", "printer-resolution", "sides" }; static const char * const pdf_versions[] = { /* pdf-versions-supported */ "adobe-1.2", "adobe-1.3", "adobe-1.4", "adobe-1.5", "adobe-1.6", "adobe-1.7", "iso-19005-1_2005", "iso-32000-1_2008", "pwg-5102.3" }; static const char * const printer_settable[] = { /* printer-settable-attributes-supported */ "printer-geo-location", "printer-info", "printer-location", "printer-organization", "printer-organizational-unit" }; static const char * const which_jobs[] = { /* which-jobs-supported values */ "completed", "not-completed", "aborted", "all", "canceled", "pending", "pending-held", "processing", "processing-stopped" }; if (CommonData) ippDelete(CommonData); CommonData = ippNew(); /* * Get the maximum spool size based on the size of the filesystem used for * the RequestRoot directory. If the host OS doesn't support the statfs call * or the filesystem is larger than 2TiB, always report INT_MAX. */ #ifdef HAVE_STATVFS if (statvfs(RequestRoot, &spoolinfo)) k_supported = INT_MAX; else if ((spoolsize = (double)spoolinfo.f_frsize * spoolinfo.f_blocks / 1024) > INT_MAX) k_supported = INT_MAX; else k_supported = (int)spoolsize; #elif defined(HAVE_STATFS) if (statfs(RequestRoot, &spoolinfo)) k_supported = INT_MAX; else if ((spoolsize = (double)spoolinfo.f_bsize * spoolinfo.f_blocks / 1024) > INT_MAX) k_supported = INT_MAX; else k_supported = (int)spoolsize; #else k_supported = INT_MAX; #endif /* HAVE_STATVFS */ /* * This list of attributes is sorted to improve performance when the * client provides a requested-attributes attribute... */ /* charset-configured */ ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_CHARSET | IPP_TAG_COPY, "charset-configured", NULL, "utf-8"); /* charset-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_CHARSET | IPP_TAG_COPY, "charset-supported", sizeof(charsets) / sizeof(charsets[0]), NULL, charsets); /* compression-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "compression-supported", sizeof(compressions) / sizeof(compressions[0]), NULL, compressions); /* copies-supported */ ippAddRange(CommonData, IPP_TAG_PRINTER, "copies-supported", 1, MaxCopies); /* cups-version */ ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_TEXT | IPP_TAG_COPY, "cups-version", NULL, CUPS_SVERSION + 6); /* generated-natural-language-supported (no IPP_TAG_COPY) */ ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_LANGUAGE, "generated-natural-language-supported", NULL, DefaultLanguage); /* ipp-features-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "ipp-features-supported", sizeof(features) / sizeof(features[0]), NULL, features); /* ipp-versions-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "ipp-versions-supported", sizeof(versions) / sizeof(versions[0]), NULL, versions); /* ippget-event-life */ ippAddInteger(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "ippget-event-life", 15); /* job-cancel-after-supported */ ippAddRange(CommonData, IPP_TAG_PRINTER, "job-cancel-after-supported", 0, INT_MAX); /* job-creation-attributes-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "job-creation-attributes-supported", sizeof(job_creation) / sizeof(job_creation[0]), NULL, job_creation); /* job-hold-until-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "job-hold-until-supported", sizeof(holds) / sizeof(holds[0]), NULL, holds); /* job-ids-supported */ ippAddBoolean(CommonData, IPP_TAG_PRINTER, "job-ids-supported", 1); /* job-k-octets-supported */ ippAddRange(CommonData, IPP_TAG_PRINTER, "job-k-octets-supported", 0, k_supported); /* job-priority-supported */ ippAddInteger(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "job-priority-supported", 100); /* job-settable-attributes-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "job-settable-attributes-supported", sizeof(job_settable) / sizeof(job_settable[0]), NULL, job_settable); /* job-sheets-supported */ if (cupsArrayCount(Banners) > 0) { /* * Setup the job-sheets-supported attribute... */ if (Classification && !ClassifyOverride) attr = ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY, "job-sheets-supported", NULL, Classification); else attr = ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY, "job-sheets-supported", cupsArrayCount(Banners) + 1, NULL, NULL); if (attr == NULL) cupsdLogMessage(CUPSD_LOG_EMERG, "Unable to allocate memory for " "job-sheets-supported attribute: %s!", strerror(errno)); else if (!Classification || ClassifyOverride) { cupsd_banner_t *banner; /* Current banner */ attr->values[0].string.text = _cupsStrAlloc("none"); for (i = 1, banner = (cupsd_banner_t *)cupsArrayFirst(Banners); banner; i ++, banner = (cupsd_banner_t *)cupsArrayNext(Banners)) attr->values[i].string.text = banner->name; } } else ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY, "job-sheets-supported", NULL, "none"); /* jpeg-k-octets-supported */ ippAddRange(CommonData, IPP_TAG_PRINTER, "jpeg-k-octets-supported", 0, k_supported); /* jpeg-x-dimension-supported */ ippAddRange(CommonData, IPP_TAG_PRINTER, "jpeg-x-dimension-supported", 0, 65535); /* jpeg-y-dimension-supported */ ippAddRange(CommonData, IPP_TAG_PRINTER, "jpeg-y-dimension-supported", 1, 65535); /* media-col-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "media-col-supported", sizeof(media_col_supported) / sizeof(media_col_supported[0]), NULL, media_col_supported); /* multiple-document-handling-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "multiple-document-handling-supported", sizeof(multiple_document_handling) / sizeof(multiple_document_handling[0]), NULL, multiple_document_handling); /* multiple-document-jobs-supported */ ippAddBoolean(CommonData, IPP_TAG_PRINTER, "multiple-document-jobs-supported", 1); /* multiple-operation-time-out */ ippAddInteger(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "multiple-operation-time-out", MultipleOperationTimeout); /* multiple-operation-time-out-action */ ippAddString(CommonData, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "multiple-operation-time-out-action", NULL, "process-job"); /* natural-language-configured (no IPP_TAG_COPY) */ ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_LANGUAGE, "natural-language-configured", NULL, DefaultLanguage); /* notify-attributes-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "notify-attributes-supported", (int)(sizeof(notify_attrs) / sizeof(notify_attrs[0])), NULL, notify_attrs); /* notify-lease-duration-supported */ ippAddRange(CommonData, IPP_TAG_PRINTER, "notify-lease-duration-supported", 0, MaxLeaseDuration ? MaxLeaseDuration : 2147483647); /* notify-max-events-supported */ ippAddInteger(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "notify-max-events-supported", MaxEvents); /* notify-events-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "notify-events-supported", (int)(sizeof(notify_events) / sizeof(notify_events[0])), NULL, notify_events); /* notify-pull-method-supported */ ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "notify-pull-method-supported", NULL, "ippget"); /* notify-schemes-supported */ snprintf(filename, sizeof(filename), "%s/notifier", ServerBin); if ((dir = cupsDirOpen(filename)) != NULL) { notifiers = cupsArrayNew((cups_array_func_t)strcmp, NULL); while ((dent = cupsDirRead(dir)) != NULL) if (S_ISREG(dent->fileinfo.st_mode) && (dent->fileinfo.st_mode & S_IXOTH) != 0) cupsArrayAdd(notifiers, _cupsStrAlloc(dent->filename)); if (cupsArrayCount(notifiers) > 0) { attr = ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "notify-schemes-supported", cupsArrayCount(notifiers), NULL, NULL); for (i = 0, notifier = (char *)cupsArrayFirst(notifiers); notifier; i ++, notifier = (char *)cupsArrayNext(notifiers)) attr->values[i].string.text = notifier; } cupsArrayDelete(notifiers); cupsDirClose(dir); } /* number-up-supported */ ippAddIntegers(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "number-up-supported", sizeof(nups) / sizeof(nups[0]), nups); /* operations-supported */ ippAddIntegers(CommonData, IPP_TAG_PRINTER, IPP_TAG_ENUM, "operations-supported", sizeof(ops) / sizeof(ops[0]), ops); /* orientation-requested-supported */ ippAddIntegers(CommonData, IPP_TAG_PRINTER, IPP_TAG_ENUM, "orientation-requested-supported", 4, orients); /* page-ranges-supported */ ippAddBoolean(CommonData, IPP_TAG_PRINTER, "page-ranges-supported", 1); /* pdf-k-octets-supported */ ippAddRange(CommonData, IPP_TAG_PRINTER, "pdf-k-octets-supported", 0, k_supported); /* pdf-versions-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "pdf-versions-supported", sizeof(pdf_versions) / sizeof(pdf_versions[0]), NULL, pdf_versions); /* pdl-override-supported */ ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "pdl-override-supported", NULL, "attempted"); /* printer-get-attributes-supported */ ippAddString(CommonData, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "printer-get-attributes-supported", NULL, "document-format"); /* printer-op-policy-supported */ attr = ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY, "printer-op-policy-supported", cupsArrayCount(Policies), NULL, NULL); for (i = 0, p = (cupsd_policy_t *)cupsArrayFirst(Policies); p; i ++, p = (cupsd_policy_t *)cupsArrayNext(Policies)) attr->values[i].string.text = p->name; /* printer-settable-attributes-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "printer-settable-attributes-supported", sizeof(printer_settable) / sizeof(printer_settable[0]), NULL, printer_settable); /* server-is-sharing-printers */ ippAddBoolean(CommonData, IPP_TAG_PRINTER, "server-is-sharing-printers", BrowseLocalProtocols != 0 && Browsing); /* which-jobs-supported */ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY, "which-jobs-supported", sizeof(which_jobs) / sizeof(which_jobs[0]), NULL, which_jobs); } /* * 'cupsdDeleteAllPrinters()' - Delete all printers from the system. */ void cupsdDeleteAllPrinters(void) { cupsd_printer_t *p; /* Pointer to current printer/class */ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) { p->op_policy_ptr = DefaultPolicyPtr; cupsdDeletePrinter(p, 0); } } /* * 'cupsdDeletePrinter()' - Delete a printer from the system. */ int /* O - 1 if classes affected, 0 otherwise */ cupsdDeletePrinter( cupsd_printer_t *p, /* I - Printer to delete */ int update) /* I - Update printers.conf? */ { int i, /* Looping var */ changed = 0; /* Class changed? */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDeletePrinter(p=%p(%s), update=%d)", p, p->name, update); /* * Save the current position in the Printers array... */ cupsArraySave(Printers); /* * Stop printing on this printer... */ cupsdSetPrinterState(p, IPP_PRINTER_STOPPED, update); p->state = IPP_PRINTER_STOPPED; /* Force for browsed printers */ if (p->job) cupsdSetJobState(p->job, IPP_JOB_PENDING, CUPSD_JOB_FORCE, update ? "Job stopped due to printer being deleted." : "Job stopped."); /* * Remove the printer from the list... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDeletePrinter: Removing %s from Printers", p->name); cupsArrayRemove(Printers, p); /* * If p is the default printer, assign a different one... */ if (p == DefaultPrinter) DefaultPrinter = NULL; /* * Remove this printer from any classes... */ changed = cupsdDeletePrinterFromClasses(p); /* * Deregister from any browse protocols... */ cupsdDeregisterPrinter(p, 1); /* * Remove support files if this is a temporary queue and deregister color * profiles... */ if (p->temporary) { char filename[1024]; /* Script/PPD filename */ /* * Remove any old PPD or script files... */ snprintf(filename, sizeof(filename), "%s/ppd/%s.ppd", ServerRoot, p->name); unlink(filename); snprintf(filename, sizeof(filename), "%s/ppd/%s.ppd.O", ServerRoot, p->name); unlink(filename); snprintf(filename, sizeof(filename), "%s/%s.png", CacheDir, p->name); unlink(filename); snprintf(filename, sizeof(filename), "%s/%s.data", CacheDir, p->name); unlink(filename); /* * Unregister color profiles... */ cupsdUnregisterColor(p); } /* * Free all memory used by the printer... */ if (p->printers != NULL) free(p->printers); delete_printer_filters(p); for (i = 0; i < p->num_reasons; i ++) _cupsStrFree(p->reasons[i]); ippDelete(p->attrs); ippDelete(p->ppd_attrs); mimeDeleteType(MimeDatabase, p->filetype); mimeDeleteType(MimeDatabase, p->prefiltertype); cupsdFreeStrings(&(p->users)); cupsdFreeQuotas(p); cupsdClearString(&p->uri); cupsdClearString(&p->hostname); cupsdClearString(&p->name); cupsdClearString(&p->location); cupsdClearString(&p->geo_location); cupsdClearString(&p->make_model); cupsdClearString(&p->info); cupsdClearString(&p->job_sheets[0]); cupsdClearString(&p->job_sheets[1]); cupsdClearString(&p->device_uri); cupsdClearString(&p->sanitized_device_uri); cupsdClearString(&p->port_monitor); cupsdClearString(&p->op_policy); cupsdClearString(&p->error_policy); cupsdClearString(&p->alert); cupsdClearString(&p->alert_description); #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) cupsdClearString(&p->pdl); cupsdClearString(&p->reg_name); #endif /* HAVE_DNSSD || HAVE_AVAHI */ cupsArrayDelete(p->filetypes); cupsFreeOptions(p->num_options, p->options); free(p); /* * Restore the previous position in the Printers array... */ cupsArrayRestore(Printers); return (changed); } /* * 'cupsdDeleteTemporaryPrinters()' - Delete unneeded temporary printers. */ void cupsdDeleteTemporaryPrinters(int force) /* I - Force deletion instead of auto? */ { cupsd_printer_t *p; /* Current printer */ time_t unused_time; /* Last time for printer state change */ /* * Allow temporary printers to stick around for 60 seconds after the last job * completes. */ unused_time = time(NULL) - 60; for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) { if (p->temporary && (force || p->state_time < unused_time)) cupsdDeletePrinter(p, 0); } } /* * 'cupsdFindDest()' - Find a destination in the list. */ cupsd_printer_t * /* O - Destination in list */ cupsdFindDest(const char *name) /* I - Name of printer or class to find */ { cupsd_printer_t key; /* Search key */ key.name = (char *)name; return ((cupsd_printer_t *)cupsArrayFind(Printers, &key)); } /* * 'cupsdFindPrinter()' - Find a printer in the list. */ cupsd_printer_t * /* O - Printer in list */ cupsdFindPrinter(const char *name) /* I - Name of printer to find */ { cupsd_printer_t *p; /* Printer in list */ if ((p = cupsdFindDest(name)) != NULL && (p->type & CUPS_PRINTER_CLASS)) return (NULL); else return (p); } /* * 'cupsdLoadAllPrinters()' - Load printers from the printers.conf file. */ void cupsdLoadAllPrinters(void) { int i; /* Looping var */ cups_file_t *fp; /* printers.conf file */ int linenum; /* Current line number */ char line[4096], /* Line from file */ *value, /* Pointer to value */ *valueptr; /* Pointer into value */ cupsd_printer_t *p; /* Current printer */ /* * Open the printers.conf file... */ snprintf(line, sizeof(line), "%s/printers.conf", ServerRoot); if ((fp = cupsdOpenConfFile(line)) == NULL) return; /* * Read printer configurations until we hit EOF... */ linenum = 0; p = NULL; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { /* * Decode the directive... */ if (!_cups_strcasecmp(line, " or */ if (p == NULL && value) { /* * Add the printer and a base file type... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "Loading printer %s...", value); p = cupsdAddPrinter(value); p->accepting = 1; p->state = IPP_PRINTER_IDLE; /* * Set the default printer as needed... */ if (!_cups_strcasecmp(line, "") || !_cups_strcasecmp(line, "")) { if (p != NULL) { /* * Close out the current printer... */ cupsdSetPrinterAttrs(p); if (strncmp(p->device_uri, "file:", 5) && p->state != IPP_PRINTER_STOPPED) { /* * See if the backend exists... */ snprintf(line, sizeof(line), "%s/backend/%s", ServerBin, p->device_uri); if ((valueptr = strchr(line + strlen(ServerBin), ':')) != NULL) *valueptr = '\0'; /* Chop everything but URI scheme */ if (access(line, 0)) { /* * Backend does not exist, stop printer... */ p->state = IPP_PRINTER_STOPPED; snprintf(p->state_message, sizeof(p->state_message), "Backend %s does not exist!", line); } } p = NULL; } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!p) { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "UUID")) { if (value && !strncmp(value, "urn:uuid:", 9)) cupsdSetString(&(p->uuid), value); else cupsdLogMessage(CUPSD_LOG_ERROR, "Bad UUID on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "AuthInfoRequired")) { if (!cupsdSetAuthInfoRequired(p, value, NULL)) cupsdLogMessage(CUPSD_LOG_ERROR, "Bad AuthInfoRequired on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "Info")) { if (value) cupsdSetString(&p->info, value); } else if (!_cups_strcasecmp(line, "MakeModel")) { if (value) cupsdSetString(&p->make_model, value); } else if (!_cups_strcasecmp(line, "Location")) { if (value) cupsdSetString(&p->location, value); } else if (!_cups_strcasecmp(line, "GeoLocation")) { if (value) cupsdSetString(&p->geo_location, value); } else if (!_cups_strcasecmp(line, "Organization")) { if (value) cupsdSetString(&p->organization, value); } else if (!_cups_strcasecmp(line, "OrganizationalUnit")) { if (value) cupsdSetString(&p->organizational_unit, value); } else if (!_cups_strcasecmp(line, "DeviceURI")) { if (value) cupsdSetDeviceURI(p, value); else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "Option") && value) { /* * Option name value */ for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++); if (!*valueptr) cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); else { for (; *valueptr && isspace(*valueptr & 255); *valueptr++ = '\0'); p->num_options = cupsAddOption(value, valueptr, p->num_options, &(p->options)); } } else if (!_cups_strcasecmp(line, "PortMonitor")) { if (value && strcmp(value, "none")) cupsdSetString(&p->port_monitor, value); else if (value) cupsdClearString(&p->port_monitor); else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "Reason")) { if (value && strcmp(value, "connecting-to-device") && strcmp(value, "cups-insecure-filter-warning") && strcmp(value, "cups-missing-filter-warning")) { for (i = 0 ; i < p->num_reasons; i ++) if (!strcmp(value, p->reasons[i])) break; if (i >= p->num_reasons && p->num_reasons < (int)(sizeof(p->reasons) / sizeof(p->reasons[0]))) { p->reasons[p->num_reasons] = _cupsStrAlloc(value); p->num_reasons ++; } } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "State")) { /* * Set the initial queue state... */ if (value && !_cups_strcasecmp(value, "idle")) p->state = IPP_PRINTER_IDLE; else if (value && !_cups_strcasecmp(value, "stopped")) { p->state = IPP_PRINTER_STOPPED; for (i = 0 ; i < p->num_reasons; i ++) if (!strcmp("paused", p->reasons[i])) break; if (i >= p->num_reasons && p->num_reasons < (int)(sizeof(p->reasons) / sizeof(p->reasons[0]))) { p->reasons[p->num_reasons] = _cupsStrAlloc("paused"); p->num_reasons ++; } } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "StateMessage")) { /* * Set the initial queue state message... */ if (value) strlcpy(p->state_message, value, sizeof(p->state_message)); } else if (!_cups_strcasecmp(line, "StateTime")) { /* * Set the state time... */ if (value) p->state_time = atoi(value); } else if (!_cups_strcasecmp(line, "ConfigTime")) { /* * Set the config time... */ if (value) p->config_time = atoi(value); } else if (!_cups_strcasecmp(line, "Accepting")) { /* * Set the initial accepting state... */ if (value && (!_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "true"))) p->accepting = 1; else if (value && (!_cups_strcasecmp(value, "no") || !_cups_strcasecmp(value, "off") || !_cups_strcasecmp(value, "false"))) p->accepting = 0; else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "Type")) { if (value) p->type = (cups_ptype_t)atoi(value); else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "Shared")) { /* * Set the initial shared state... */ if (value && (!_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "true"))) p->shared = 1; else if (value && (!_cups_strcasecmp(value, "no") || !_cups_strcasecmp(value, "off") || !_cups_strcasecmp(value, "false"))) p->shared = 0; else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "JobSheets")) { /* * Set the initial job sheets... */ if (value) { for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++); if (*valueptr) *valueptr++ = '\0'; cupsdSetString(&p->job_sheets[0], value); while (isspace(*valueptr & 255)) valueptr ++; if (*valueptr) { for (value = valueptr; *valueptr && !isspace(*valueptr & 255); valueptr ++); if (*valueptr) *valueptr = '\0'; cupsdSetString(&p->job_sheets[1], value); } } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "AllowUser")) { if (value) { p->deny_users = 0; cupsdAddString(&(p->users), value); } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "DenyUser")) { if (value) { p->deny_users = 1; cupsdAddString(&(p->users), value); } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "QuotaPeriod")) { if (value) p->quota_period = atoi(value); else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "PageLimit")) { if (value) p->page_limit = atoi(value); else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "KLimit")) { if (value) p->k_limit = atoi(value); else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "OpPolicy")) { if (value) { cupsd_policy_t *pol; /* Policy */ if ((pol = cupsdFindPolicy(value)) != NULL) { cupsdSetString(&p->op_policy, value); p->op_policy_ptr = pol; } else cupsdLogMessage(CUPSD_LOG_ERROR, "Bad policy \"%s\" on line %d of printers.conf", value, linenum); } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "ErrorPolicy")) { if (value) { if (strcmp(value, "retry-current-job") && strcmp(value, "abort-job") && strcmp(value, "retry-job") && strcmp(value, "stop-printer")) cupsdLogMessage(CUPSD_LOG_ALERT, "Invalid ErrorPolicy \"%s\" on line %d or printers.conf.", ErrorPolicy, linenum); else cupsdSetString(&p->error_policy, value); } else cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); } else if (!_cups_strcasecmp(line, "Attribute") && value) { for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++); if (!*valueptr) cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum); else { for (; *valueptr && isspace(*valueptr & 255); *valueptr++ = '\0'); if (!p->attrs) cupsdSetPrinterAttrs(p); if (!strcmp(value, "marker-change-time")) p->marker_time = atoi(valueptr); else cupsdSetPrinterAttr(p, value, valueptr); } } else if (_cups_strcasecmp(line, "Filter") && _cups_strcasecmp(line, "Prefilter") && _cups_strcasecmp(line, "Product")) { /* * Something else we don't understand (and that wasn't used in a prior * release of CUPS... */ cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown configuration directive %s on line %d of " "printers.conf.", line, linenum); } } cupsFileClose(fp); } /* * 'cupsdRenamePrinter()' - Rename a printer. */ void cupsdRenamePrinter( cupsd_printer_t *p, /* I - Printer */ const char *name) /* I - New name */ { /* * Remove the printer from the array(s) first... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdRenamePrinter: Removing %s from Printers", p->name); cupsArrayRemove(Printers, p); /* * Rename the printer type... */ mimeDeleteType(MimeDatabase, p->filetype); p->filetype = mimeAddType(MimeDatabase, "printer", name); if (p->prefiltertype) { mimeDeleteType(MimeDatabase, p->prefiltertype); p->prefiltertype = mimeAddType(MimeDatabase, "prefilter", name); } /* * Rename the printer... */ cupsdSetString(&p->name, name); /* * Reset printer attributes... */ cupsdSetPrinterAttrs(p); /* * Add the printer back to the printer array(s)... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdRenamePrinter: Adding %s to Printers", p->name); cupsArrayAdd(Printers, p); } /* * 'cupsdSaveAllPrinters()' - Save all printer definitions to the printers.conf * file. */ void cupsdSaveAllPrinters(void) { int i; /* Looping var */ cups_file_t *fp; /* printers.conf file */ char filename[1024], /* printers.conf filename */ temp[1024], /* Temporary string */ value[2048], /* Value string */ *ptr, /* Pointer into value */ *name; /* Current user/group name */ cupsd_printer_t *printer; /* Current printer class */ time_t curtime; /* Current time */ struct tm *curdate; /* Current date */ cups_option_t *option; /* Current option */ ipp_attribute_t *marker; /* Current marker attribute */ /* * Create the printers.conf file... */ snprintf(filename, sizeof(filename), "%s/printers.conf", ServerRoot); if ((fp = cupsdCreateConfFile(filename, ConfigFilePerm & 0600)) == NULL) return; cupsdLogMessage(CUPSD_LOG_INFO, "Saving printers.conf..."); /* * Write a small header to the file... */ curtime = time(NULL); curdate = localtime(&curtime); strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate); cupsFilePuts(fp, "# Printer configuration file for " CUPS_SVERSION "\n"); cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp); cupsFilePuts(fp, "# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING\n"); /* * Write each local printer known to the system... */ for (printer = (cupsd_printer_t *)cupsArrayFirst(Printers); printer; printer = (cupsd_printer_t *)cupsArrayNext(Printers)) { /* * Skip printer classes and temporary queues... */ if ((printer->type & CUPS_PRINTER_CLASS) || printer->temporary) continue; /* * Write printers as needed... */ if (printer == DefaultPrinter) cupsFilePrintf(fp, "\n", printer->name); else cupsFilePrintf(fp, "\n", printer->name); cupsFilePrintf(fp, "UUID %s\n", printer->uuid); if (printer->num_auth_info_required > 0) { switch (printer->num_auth_info_required) { case 1 : strlcpy(value, printer->auth_info_required[0], sizeof(value)); break; case 2 : snprintf(value, sizeof(value), "%s,%s", printer->auth_info_required[0], printer->auth_info_required[1]); break; case 3 : default : snprintf(value, sizeof(value), "%s,%s,%s", printer->auth_info_required[0], printer->auth_info_required[1], printer->auth_info_required[2]); break; } cupsFilePutConf(fp, "AuthInfoRequired", value); } if (printer->info) cupsFilePutConf(fp, "Info", printer->info); if (printer->location) cupsFilePutConf(fp, "Location", printer->location); if (printer->geo_location) cupsFilePutConf(fp, "GeoLocation", printer->geo_location); if (printer->make_model) cupsFilePutConf(fp, "MakeModel", printer->make_model); if (printer->organization) cupsFilePutConf(fp, "Organization", printer->organization); if (printer->organizational_unit) cupsFilePutConf(fp, "OrganizationalUnit", printer->organizational_unit); cupsFilePutConf(fp, "DeviceURI", printer->device_uri); if (printer->port_monitor) cupsFilePutConf(fp, "PortMonitor", printer->port_monitor); if (printer->state == IPP_PRINTER_STOPPED) { cupsFilePuts(fp, "State Stopped\n"); if (printer->state_message[0]) cupsFilePutConf(fp, "StateMessage", printer->state_message); } else cupsFilePuts(fp, "State Idle\n"); cupsFilePrintf(fp, "StateTime %d\n", (int)printer->state_time); cupsFilePrintf(fp, "ConfigTime %d\n", (int)printer->config_time); for (i = 0; i < printer->num_reasons; i ++) if (strcmp(printer->reasons[i], "connecting-to-device") && strcmp(printer->reasons[i], "cups-insecure-filter-warning") && strcmp(printer->reasons[i], "cups-missing-filter-warning")) cupsFilePutConf(fp, "Reason", printer->reasons[i]); cupsFilePrintf(fp, "Type %d\n", printer->type); if (printer->accepting) cupsFilePuts(fp, "Accepting Yes\n"); else cupsFilePuts(fp, "Accepting No\n"); if (printer->shared) cupsFilePuts(fp, "Shared Yes\n"); else cupsFilePuts(fp, "Shared No\n"); snprintf(value, sizeof(value), "%s %s", printer->job_sheets[0], printer->job_sheets[1]); cupsFilePutConf(fp, "JobSheets", value); cupsFilePrintf(fp, "QuotaPeriod %d\n", printer->quota_period); cupsFilePrintf(fp, "PageLimit %d\n", printer->page_limit); cupsFilePrintf(fp, "KLimit %d\n", printer->k_limit); for (name = (char *)cupsArrayFirst(printer->users); name; name = (char *)cupsArrayNext(printer->users)) cupsFilePutConf(fp, printer->deny_users ? "DenyUser" : "AllowUser", name); if (printer->op_policy) cupsFilePutConf(fp, "OpPolicy", printer->op_policy); if (printer->error_policy) cupsFilePutConf(fp, "ErrorPolicy", printer->error_policy); for (i = printer->num_options, option = printer->options; i > 0; i --, option ++) { snprintf(value, sizeof(value), "%s %s", option->name, option->value); cupsFilePutConf(fp, "Option", value); } if ((marker = ippFindAttribute(printer->attrs, "marker-colors", IPP_TAG_NAME)) != NULL) { snprintf(value, sizeof(value), "%s ", marker->name); for (i = 0, ptr = value + strlen(value); i < marker->num_values && ptr < (value + sizeof(value) - 1); i ++) { if (i) *ptr++ = ','; strlcpy(ptr, marker->values[i].string.text, (size_t)(value + sizeof(value) - ptr)); ptr += strlen(ptr); } *ptr = '\0'; cupsFilePutConf(fp, "Attribute", value); } if ((marker = ippFindAttribute(printer->attrs, "marker-levels", IPP_TAG_INTEGER)) != NULL) { cupsFilePrintf(fp, "Attribute %s %d", marker->name, marker->values[0].integer); for (i = 1; i < marker->num_values; i ++) cupsFilePrintf(fp, ",%d", marker->values[i].integer); cupsFilePuts(fp, "\n"); } if ((marker = ippFindAttribute(printer->attrs, "marker-low-levels", IPP_TAG_INTEGER)) != NULL) { cupsFilePrintf(fp, "Attribute %s %d", marker->name, marker->values[0].integer); for (i = 1; i < marker->num_values; i ++) cupsFilePrintf(fp, ",%d", marker->values[i].integer); cupsFilePuts(fp, "\n"); } if ((marker = ippFindAttribute(printer->attrs, "marker-high-levels", IPP_TAG_INTEGER)) != NULL) { cupsFilePrintf(fp, "Attribute %s %d", marker->name, marker->values[0].integer); for (i = 1; i < marker->num_values; i ++) cupsFilePrintf(fp, ",%d", marker->values[i].integer); cupsFilePuts(fp, "\n"); } if ((marker = ippFindAttribute(printer->attrs, "marker-message", IPP_TAG_TEXT)) != NULL) { snprintf(value, sizeof(value), "%s %s", marker->name, marker->values[0].string.text); cupsFilePutConf(fp, "Attribute", value); } if ((marker = ippFindAttribute(printer->attrs, "marker-names", IPP_TAG_NAME)) != NULL) { snprintf(value, sizeof(value), "%s ", marker->name); for (i = 0, ptr = value + strlen(value); i < marker->num_values && ptr < (value + sizeof(value) - 1); i ++) { if (i) *ptr++ = ','; strlcpy(ptr, marker->values[i].string.text, (size_t)(value + sizeof(value) - ptr)); ptr += strlen(ptr); } *ptr = '\0'; cupsFilePutConf(fp, "Attribute", value); } if ((marker = ippFindAttribute(printer->attrs, "marker-types", IPP_TAG_KEYWORD)) != NULL) { snprintf(value, sizeof(value), "%s ", marker->name); for (i = 0, ptr = value + strlen(value); i < marker->num_values && ptr < (value + sizeof(value) - 1); i ++) { if (i) *ptr++ = ','; strlcpy(ptr, marker->values[i].string.text, (size_t)(value + sizeof(value) - ptr)); ptr += strlen(ptr); } *ptr = '\0'; cupsFilePutConf(fp, "Attribute", value); } if (printer->marker_time) cupsFilePrintf(fp, "Attribute marker-change-time %ld\n", (long)printer->marker_time); if (printer == DefaultPrinter) cupsFilePuts(fp, "\n"); else cupsFilePuts(fp, "\n"); } cupsdCloseCreatedConfFile(fp, filename); } /* * 'cupsdSetAuthInfoRequired()' - Set the required authentication info. */ int /* O - 1 if value OK, 0 otherwise */ cupsdSetAuthInfoRequired( cupsd_printer_t *p, /* I - Printer */ const char *values, /* I - Plain text value (or NULL) */ ipp_attribute_t *attr) /* I - IPP attribute value (or NULL) */ { int i; /* Looping var */ p->num_auth_info_required = 0; /* * Do we have a plain text value? */ if (values) { /* * Yes, grab the keywords... */ const char *end; /* End of current value */ while (*values && p->num_auth_info_required < 4) { if ((end = strchr(values, ',')) == NULL) end = values + strlen(values); if ((end - values) == 4 && !strncmp(values, "none", 4)) { if (p->num_auth_info_required != 0 || *end) return (0); p->auth_info_required[p->num_auth_info_required] = "none"; p->num_auth_info_required ++; return (1); } else if ((end - values) == 9 && !strncmp(values, "negotiate", 9)) { if (p->num_auth_info_required != 0 || *end) return (0); p->auth_info_required[p->num_auth_info_required] = "negotiate"; p->num_auth_info_required ++; /* * Don't allow sharing of queues that require Kerberos authentication. */ if (p->shared) { cupsdDeregisterPrinter(p, 1); p->shared = 0; } } else if ((end - values) == 6 && !strncmp(values, "domain", 6)) { p->auth_info_required[p->num_auth_info_required] = "domain"; p->num_auth_info_required ++; } else if ((end - values) == 8 && !strncmp(values, "password", 8)) { p->auth_info_required[p->num_auth_info_required] = "password"; p->num_auth_info_required ++; } else if ((end - values) == 8 && !strncmp(values, "username", 8)) { p->auth_info_required[p->num_auth_info_required] = "username"; p->num_auth_info_required ++; } else return (0); values = (*end) ? end + 1 : end; } if (p->num_auth_info_required == 0) { p->auth_info_required[0] = "none"; p->num_auth_info_required = 1; } /* * Update the printer-type value as needed... */ if (p->num_auth_info_required > 1 || strcmp(p->auth_info_required[0], "none")) p->type |= CUPS_PRINTER_AUTHENTICATED; else p->type &= (cups_ptype_t)~CUPS_PRINTER_AUTHENTICATED; return (1); } /* * Grab values from an attribute instead... */ if (!attr || attr->num_values > 4) return (0); for (i = 0; i < attr->num_values; i ++) { if (!strcmp(attr->values[i].string.text, "none")) { if (p->num_auth_info_required != 0 || attr->num_values != 1) return (0); p->auth_info_required[p->num_auth_info_required] = "none"; p->num_auth_info_required ++; return (1); } else if (!strcmp(attr->values[i].string.text, "negotiate")) { if (p->num_auth_info_required != 0 || attr->num_values != 1) return (0); p->auth_info_required[p->num_auth_info_required] = "negotiate"; p->num_auth_info_required ++; /* * Don't allow sharing of queues that require Kerberos authentication. */ if (p->shared) { cupsdDeregisterPrinter(p, 1); p->shared = 0; } return (1); } else if (!strcmp(attr->values[i].string.text, "domain")) { p->auth_info_required[p->num_auth_info_required] = "domain"; p->num_auth_info_required ++; } else if (!strcmp(attr->values[i].string.text, "password")) { p->auth_info_required[p->num_auth_info_required] = "password"; p->num_auth_info_required ++; } else if (!strcmp(attr->values[i].string.text, "username")) { p->auth_info_required[p->num_auth_info_required] = "username"; p->num_auth_info_required ++; } else return (0); } return (1); } /* * 'cupsdSetDeviceURI()' - Set the device URI for a printer. */ void cupsdSetDeviceURI(cupsd_printer_t *p, /* I - Printer */ const char *uri) /* I - Device URI */ { char buffer[1024], /* URI buffer */ *start, /* Start of data after scheme */ *slash, /* First slash after scheme:// */ *ptr; /* Pointer into user@host:port part */ /* * Set the full device URI.. */ cupsdSetString(&(p->device_uri), uri); /* * Copy the device URI to a temporary buffer so we can sanitize any auth * info in it... */ strlcpy(buffer, uri, sizeof(buffer)); /* * Find the end of the scheme:// part... */ if ((ptr = strchr(buffer, ':')) != NULL) { for (start = ptr + 1; *start; start ++) if (*start != '/') break; /* * Find the next slash (/) in the URI... */ if ((slash = strchr(start, '/')) == NULL) slash = start + strlen(start); /* No slash, point to the end */ /* * Check for an @ sign before the slash... */ if ((ptr = strchr(start, '@')) != NULL && ptr < slash) { /* * Found an @ sign and it is before the resource part, so we have * an authentication string. Copy the remaining URI over the * authentication string... */ _cups_strcpy(start, ptr + 1); } } /* * Save the sanitized URI... */ cupsdSetString(&(p->sanitized_device_uri), buffer); } /* * 'cupsdSetPrinterAttr()' - Set a printer attribute. */ void cupsdSetPrinterAttr( cupsd_printer_t *p, /* I - Printer */ const char *name, /* I - Attribute name */ const char *value) /* I - Attribute value string */ { ipp_attribute_t *attr; /* Attribute */ int i, /* Looping var */ count; /* Number of values */ char *temp, /* Temporary copy of value string */ *ptr, /* Pointer into value */ *start, /* Start of value */ quote; /* Quote character */ ipp_tag_t value_tag; /* Value tag for this attribute */ /* * Don't allow empty values... */ if (!*value && strcmp(name, "marker-message")) { cupsdLogMessage(CUPSD_LOG_ERROR, "Ignoring empty \"%s\" attribute", name); return; } /* * Copy the value string so we can do what we want with it... */ if ((temp = strdup(value)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to duplicate value for \"%s\" attribute.", name); return; } /* * Count the number of values... */ for (count = 1, quote = '\0', ptr = temp; *ptr; ptr ++) { if (*ptr == quote) quote = '\0'; else if (quote) continue; else if (*ptr == '\\' && ptr[1]) ptr ++; else if (*ptr == '\'' || *ptr == '\"') quote = *ptr; else if (*ptr == ',') count ++; } /* * Then add or update the attribute as needed... */ if (!strcmp(name, "marker-levels") || !strcmp(name, "marker-low-levels") || !strcmp(name, "marker-high-levels")) { /* * Integer values... */ if ((attr = ippFindAttribute(p->attrs, name, IPP_TAG_INTEGER)) != NULL && attr->num_values < count) { ippDeleteAttribute(p->attrs, attr); attr = NULL; } if (attr) attr->num_values = count; else attr = ippAddIntegers(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, name, count, NULL); if (!attr) { free(temp); cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for printer attribute " "(%d values)", count); return; } for (i = 0, start = temp; i < count; i ++) { if ((ptr = strchr(start, ',')) != NULL) *ptr++ = '\0'; attr->values[i].integer = strtol(start, NULL, 10); if (ptr) start = ptr; } } else { /* * Name or keyword values... */ if (!strcmp(name, "marker-types")) value_tag = IPP_TAG_KEYWORD; else if (!strcmp(name, "marker-message")) value_tag = IPP_TAG_TEXT; else value_tag = IPP_TAG_NAME; if ((attr = ippFindAttribute(p->attrs, name, value_tag)) != NULL && attr->num_values < count) { ippDeleteAttribute(p->attrs, attr); attr = NULL; } if (attr) { for (i = 0; i < attr->num_values; i ++) _cupsStrFree(attr->values[i].string.text); attr->num_values = count; } else attr = ippAddStrings(p->attrs, IPP_TAG_PRINTER, value_tag, name, count, NULL, NULL); if (!attr) { free(temp); cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for printer attribute " "(%d values)", count); return; } for (i = 0, quote = '\0', ptr = temp; i < count; i ++) { for (start = ptr; *ptr; ptr ++) { if (*ptr == quote) *ptr = quote = '\0'; else if (quote) continue; else if (*ptr == '\\' && ptr[1]) _cups_strcpy(ptr, ptr + 1); else if (*ptr == '\'' || *ptr == '\"') { quote = *ptr; if (ptr == start) start ++; else _cups_strcpy(ptr, ptr + 1); } else if (*ptr == ',') { *ptr++ = '\0'; break; } } attr->values[i].string.text = _cupsStrAlloc(start); } } free(temp); /* * Update the printer-supply and printer-supply-description, as needed... */ if (!strcmp(name, "marker-names")) { ipp_attribute_t *supply_desc = ippFindAttribute(p->attrs, "printer-supply-description", IPP_TAG_TEXT); /* printer-supply-description attribute */ if (supply_desc != NULL) ippDeleteAttribute(p->attrs, supply_desc); supply_desc = ippCopyAttribute(p->attrs, attr, 0); ippSetName(p->attrs, &supply_desc, "printer-supply-description"); ippSetValueTag(p->attrs, &supply_desc, IPP_TAG_TEXT); } else if (!strcmp(name, "marker-colors") || !strcmp(name, "marker-levels") || !strcmp(name, "marker-types")) { char buffer[256], /* printer-supply values */ pstype[64], /* printer-supply type value */ *psptr; /* Pointer into type */ const char *color, /* marker-colors value */ *type; /* marker-types value */ int level; /* marker-levels value */ ipp_attribute_t *colors = ippFindAttribute(p->attrs, "marker-colors", IPP_TAG_NAME); /* marker-colors attribute */ ipp_attribute_t *levels = ippFindAttribute(p->attrs, "marker-levels", IPP_TAG_INTEGER); /* marker-levels attribute */ ipp_attribute_t *types = ippFindAttribute(p->attrs, "marker-types", IPP_TAG_KEYWORD); /* marker-types attribute */ ipp_attribute_t *supply = ippFindAttribute(p->attrs, "printer-supply", IPP_TAG_STRING); /* printer-supply attribute */ if (supply != NULL) { ippDeleteAttribute(p->attrs, supply); supply = NULL; } if (!colors || !levels || !types) return; count = ippGetCount(colors); if (count != ippGetCount(levels) || count != ippGetCount(types)) return; for (i = 0; i < count; i ++) { color = ippGetString(colors, i, NULL); level = ippGetInteger(levels, i); type = ippGetString(types, i, NULL); for (psptr = pstype; *type && psptr < (pstype + sizeof(pstype) - 1); type ++) if (*type == '-') { type ++; *psptr++ = (char)toupper(*type & 255); } else *psptr++ = *type; *psptr = '\0'; snprintf(buffer, sizeof(buffer), "index=%d;class=%s;type=%s;unit=percent;maxcapacity=100;level=%d;colorantname=%s;", i + 1, strncmp(pstype, "waste", 5) ? "supplyThatIsConsumed" : "receptacleThatIsFilled", pstype, level, color); if (!i) supply = ippAddOctetString(p->attrs, IPP_TAG_PRINTER, "printer-supply", buffer, (int)strlen(buffer)); else ippSetOctetString(p->attrs, &supply, i, buffer, (int)strlen(buffer)); } } } /* * 'cupsdSetPrinterAttrs()' - Set printer attributes based upon the PPD file. */ void cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */ { int i; /* Looping var */ char resource[HTTP_MAX_URI]; /* Resource portion of URI */ cupsd_location_t *auth; /* Pointer to authentication element */ const char *auth_supported; /* Authentication supported */ ipp_t *oldattrs; /* Old printer attributes */ ipp_attribute_t *attr; /* Attribute data */ char *name, /* Current user/group name */ *filter; /* Current filter */ DEBUG_printf(("cupsdSetPrinterAttrs: entering name = %s, type = %x\n", p->name, p->type)); /* * Make sure that we have the common attributes defined... */ if (!CommonData) cupsdCreateCommonData(); _cupsRWLockWrite(&p->lock); /* * Clear out old filters, if any... */ delete_printer_filters(p); /* * Figure out the authentication that is required for the printer. */ auth_supported = "requesting-user-name"; if (p->type & CUPS_PRINTER_CLASS) snprintf(resource, sizeof(resource), "/classes/%s", p->name); else snprintf(resource, sizeof(resource), "/printers/%s", p->name); if ((auth = cupsdFindBest(resource, HTTP_POST)) == NULL || auth->type == CUPSD_AUTH_NONE) auth = cupsdFindPolicyOp(p->op_policy_ptr, IPP_PRINT_JOB); if (auth) { int auth_type; /* Authentication type */ if ((auth_type = auth->type) == CUPSD_AUTH_DEFAULT) auth_type = cupsdDefaultAuthType(); if (auth_type == CUPSD_AUTH_BASIC) auth_supported = "basic"; #ifdef HAVE_GSSAPI else if (auth_type == CUPSD_AUTH_NEGOTIATE) auth_supported = "negotiate"; #endif /* HAVE_GSSAPI */ if (auth_type != CUPSD_AUTH_NONE) p->type |= CUPS_PRINTER_AUTHENTICATED; else p->type &= (cups_ptype_t)~CUPS_PRINTER_AUTHENTICATED; } else p->type &= (cups_ptype_t)~CUPS_PRINTER_AUTHENTICATED; /* * Create the required IPP attributes for a printer... */ oldattrs = p->attrs; p->attrs = ippNew(); ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "uri-authentication-supported", NULL, auth_supported); ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "uri-security-supported", NULL, "none"); ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-name", NULL, p->name); ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location", NULL, p->location ? p->location : ""); if (p->geo_location) ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-geo-location", NULL, p->geo_location); else ippAddOutOfBand(p->attrs, IPP_TAG_PRINTER, IPP_TAG_UNKNOWN, "printer-geo-location"); ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info", NULL, p->info ? p->info : ""); ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-organization", NULL, p->organization ? p->organization : ""); ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-organizational-unit", NULL, p->organizational_unit ? p->organizational_unit : ""); ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uuid", NULL, p->uuid); if (cupsArrayCount(p->users) > 0) { if (p->deny_users) attr = ippAddStrings(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "requesting-user-name-denied", cupsArrayCount(p->users), NULL, NULL); else attr = ippAddStrings(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "requesting-user-name-allowed", cupsArrayCount(p->users), NULL, NULL); for (i = 0, name = (char *)cupsArrayFirst(p->users); name; i ++, name = (char *)cupsArrayNext(p->users)) attr->values[i].string.text = _cupsStrAlloc(name); } ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "job-quota-period", p->quota_period); ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "job-k-limit", p->k_limit); ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "job-page-limit", p->page_limit); if (p->num_auth_info_required > 0 && strcmp(p->auth_info_required[0], "none")) ippAddStrings(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "auth-info-required", p->num_auth_info_required, NULL, p->auth_info_required); if (cupsArrayCount(Banners) > 0) { /* * Setup the job-sheets-default attribute... */ attr = ippAddStrings(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "job-sheets-default", 2, NULL, NULL); if (attr != NULL) { attr->values[0].string.text = _cupsStrAlloc(Classification ? Classification : p->job_sheets[0]); attr->values[1].string.text = _cupsStrAlloc(Classification ? Classification : p->job_sheets[1]); } } p->raw = 0; p->remote = 0; /* * Assign additional attributes depending on whether this is a printer * or class... */ if (p->type & CUPS_PRINTER_CLASS) { p->raw = 1; p->type &= (cups_ptype_t)~CUPS_PRINTER_OPTIONS; /* * Add class-specific attributes... */ ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-make-and-model", NULL, "Local Printer Class"); ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "device-uri", NULL, "file:///dev/null"); if (p->num_printers > 0) { /* * Add a list of member names; URIs are added in copy_printer_attrs... */ attr = ippAddStrings(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "member-names", p->num_printers, NULL, NULL); p->type |= CUPS_PRINTER_OPTIONS; for (i = 0; i < p->num_printers; i ++) { if (attr != NULL) attr->values[i].string.text = _cupsStrAlloc(p->printers[i]->name); p->type &= (cups_ptype_t)~CUPS_PRINTER_OPTIONS | p->printers[i]->type; } } } else { /* * Add printer-specific attributes... */ ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "device-uri", NULL, p->sanitized_device_uri); /* * Assign additional attributes from the PPD file (if any)... */ load_ppd(p); /* * Add filters for printer... */ cupsdSetPrinterReasons(p, "-cups-missing-filter-warning," "cups-insecure-filter-warning"); if (p->pc && p->pc->filters) { for (filter = (char *)cupsArrayFirst(p->pc->filters); filter; filter = (char *)cupsArrayNext(p->pc->filters)) add_printer_filter(p, p->filetype, filter); } else if (!(p->type & CUPS_PRINTER_REMOTE)) { /* * Add a filter from application/vnd.cups-raw to printer/name to * handle "raw" printing by users. */ add_printer_filter(p, p->filetype, "application/vnd.cups-raw 0 -"); /* * Add a PostScript filter, since this is still possibly PS printer. */ add_printer_filter(p, p->filetype, "application/vnd.cups-postscript 0 -"); } if (p->pc && p->pc->prefilters) { if (!p->prefiltertype) p->prefiltertype = mimeAddType(MimeDatabase, "prefilter", p->name); for (filter = (char *)cupsArrayFirst(p->pc->prefilters); filter; filter = (char *)cupsArrayNext(p->pc->prefilters)) add_printer_filter(p, p->prefiltertype, filter); } } /* * Copy marker attributes as needed... */ if (oldattrs) { ipp_attribute_t *oldattr; /* Old attribute */ if ((oldattr = ippFindAttribute(oldattrs, "marker-colors", IPP_TAG_NAME)) != NULL) { if ((attr = ippAddStrings(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "marker-colors", oldattr->num_values, NULL, NULL)) != NULL) { for (i = 0; i < oldattr->num_values; i ++) attr->values[i].string.text = _cupsStrAlloc(oldattr->values[i].string.text); } } if ((oldattr = ippFindAttribute(oldattrs, "marker-levels", IPP_TAG_INTEGER)) != NULL) { if ((attr = ippAddIntegers(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "marker-levels", oldattr->num_values, NULL)) != NULL) { for (i = 0; i < oldattr->num_values; i ++) attr->values[i].integer = oldattr->values[i].integer; } } if ((oldattr = ippFindAttribute(oldattrs, "marker-message", IPP_TAG_TEXT)) != NULL) ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "marker-message", NULL, oldattr->values[0].string.text); if ((oldattr = ippFindAttribute(oldattrs, "marker-low-levels", IPP_TAG_INTEGER)) != NULL) { if ((attr = ippAddIntegers(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "marker-low-levels", oldattr->num_values, NULL)) != NULL) { for (i = 0; i < oldattr->num_values; i ++) attr->values[i].integer = oldattr->values[i].integer; } } if ((oldattr = ippFindAttribute(oldattrs, "marker-high-levels", IPP_TAG_INTEGER)) != NULL) { if ((attr = ippAddIntegers(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "marker-high-levels", oldattr->num_values, NULL)) != NULL) { for (i = 0; i < oldattr->num_values; i ++) attr->values[i].integer = oldattr->values[i].integer; } } if ((oldattr = ippFindAttribute(oldattrs, "marker-names", IPP_TAG_NAME)) != NULL) { if ((attr = ippAddStrings(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "marker-names", oldattr->num_values, NULL, NULL)) != NULL) { for (i = 0; i < oldattr->num_values; i ++) attr->values[i].string.text = _cupsStrAlloc(oldattr->values[i].string.text); } } if ((oldattr = ippFindAttribute(oldattrs, "marker-types", IPP_TAG_KEYWORD)) != NULL) { if ((attr = ippAddStrings(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "marker-types", oldattr->num_values, NULL, NULL)) != NULL) { for (i = 0; i < oldattr->num_values; i ++) attr->values[i].string.text = _cupsStrAlloc(oldattr->values[i].string.text); } } ippDelete(oldattrs); } /* * Force sharing off for remote queues... */ if (p->type & CUPS_PRINTER_REMOTE) p->shared = 0; /* * Populate the document-format-supported attribute... */ add_printer_formats(p); DEBUG_printf(("cupsdSetPrinterAttrs: leaving name = %s, type = %x\n", p->name, p->type)); /* * Add name-default attributes... */ add_printer_defaults(p); _cupsRWUnlock(&p->lock); /* * Let the browse protocols reflect the change */ cupsdRegisterPrinter(p); } /* * 'cupsdSetPrinterReasons()' - Set/update the reasons strings. */ int /* O - 1 if something changed, 0 otherwise */ cupsdSetPrinterReasons( cupsd_printer_t *p, /* I - Printer */ const char *s) /* I - Reasons strings */ { int i, /* Looping var */ changed = 0; /* Did something change? */ const char *sptr; /* Pointer into reasons */ char reason[255], /* Reason string */ *rptr; /* Pointer into reason */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSetPrinterReasons(p=%p(%s),s=\"%s\"", p, p->name, s); if (s[0] == '-' || s[0] == '+') { /* * Add/remove reasons... */ sptr = s + 1; } else { /* * Replace reasons... */ sptr = s; for (i = 0; i < p->num_reasons; i ++) _cupsStrFree(p->reasons[i]); p->num_reasons = 0; changed = 1; dirty_printer(p); } if (!strcmp(s, "none")) return (changed); /* * Loop through all of the reasons... */ while (*sptr) { /* * Skip leading whitespace and commas... */ while (isspace(*sptr & 255) || *sptr == ',') sptr ++; for (rptr = reason; *sptr && !isspace(*sptr & 255) && *sptr != ','; sptr ++) if (rptr < (reason + sizeof(reason) - 1)) *rptr++ = *sptr; if (rptr == reason) break; *rptr = '\0'; if (s[0] == '-') { /* * Remove reason... */ for (i = 0; i < p->num_reasons; i ++) if (!strcmp(reason, p->reasons[i])) { /* * Found a match, so remove it... */ p->num_reasons --; changed = 1; _cupsStrFree(p->reasons[i]); if (i < p->num_reasons) memmove(p->reasons + i, p->reasons + i + 1, (size_t)(p->num_reasons - i) * sizeof(char *)); if (!strcmp(reason, "paused") && p->state == IPP_PRINTER_STOPPED) cupsdSetPrinterState(p, IPP_PRINTER_IDLE, 1); if (!strcmp(reason, "cups-waiting-for-job-completed") && p->job) p->job->completed = 0; if (strcmp(reason, "connecting-to-device")) dirty_printer(p); break; } } else if (p->num_reasons < (int)(sizeof(p->reasons) / sizeof(p->reasons[0]))) { /* * Add reason... */ for (i = 0; i < p->num_reasons; i ++) if (!strcmp(reason, p->reasons[i])) break; if (i >= p->num_reasons) { if (i >= (int)(sizeof(p->reasons) / sizeof(p->reasons[0]))) { cupsdLogMessage(CUPSD_LOG_ALERT, "Too many printer-state-reasons values for %s (%d)", p->name, i + 1); return (changed); } p->reasons[i] = _cupsStrAlloc(reason); p->num_reasons ++; changed = 1; if (!strcmp(reason, "paused") && p->state != IPP_PRINTER_STOPPED) cupsdSetPrinterState(p, IPP_PRINTER_STOPPED, 1); if (!strcmp(reason, "cups-waiting-for-job-completed") && p->job) p->job->completed = 1; if (strcmp(reason, "connecting-to-device")) dirty_printer(p); } } } return (changed); } /* * 'cupsdSetPrinterState()' - Update the current state of a printer. */ void cupsdSetPrinterState( cupsd_printer_t *p, /* I - Printer to change */ ipp_pstate_t s, /* I - New state */ int update) /* I - Update printers.conf? */ { cupsd_job_t *job; /* Current job */ ipp_pstate_t old_state; /* Old printer state */ static const char * const printer_states[] = { /* State strings */ "idle", "processing", "stopped" }; /* * Set the new state... */ old_state = p->state; p->state = s; if (old_state != s) { cupsdAddEvent(s == IPP_PRINTER_STOPPED ? CUPSD_EVENT_PRINTER_STOPPED : CUPSD_EVENT_PRINTER_STATE, p, NULL, "%s \"%s\" state changed to %s.", (p->type & CUPS_PRINTER_CLASS) ? "Class" : "Printer", p->name, printer_states[p->state - IPP_PRINTER_IDLE]); /* * Let the browse code know this needs to be updated... */ p->state_time = time(NULL); } /* * Set/clear the paused reason as needed... */ if (s == IPP_PRINTER_STOPPED) cupsdSetPrinterReasons(p, "+paused"); else cupsdSetPrinterReasons(p, "-paused"); if (old_state != s) { for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs); job; job = (cupsd_job_t *)cupsArrayNext(ActiveJobs)) if (job->reasons && job->state_value == IPP_JOB_PENDING && !_cups_strcasecmp(job->dest, p->name)) ippSetString(job->attrs, &job->reasons, 0, s == IPP_PRINTER_STOPPED ? "printer-stopped" : "none"); } /* * Clear the message for the queue when going to processing... */ if (s == IPP_PRINTER_PROCESSING) p->state_message[0] = '\0'; /* * Let the browse protocols reflect the change... */ if (update) cupsdRegisterPrinter(p); /* * Save the printer configuration if a printer goes from idle or processing * to stopped (or visa-versa)... */ if (update && (old_state == IPP_PRINTER_STOPPED) != (s == IPP_PRINTER_STOPPED)) dirty_printer(p); } /* * 'cupsdStopPrinter()' - Stop a printer from printing any jobs... */ void cupsdStopPrinter(cupsd_printer_t *p, /* I - Printer to stop */ int update)/* I - Update printers.conf? */ { /* * Set the printer state... */ cupsdSetPrinterState(p, IPP_PRINTER_STOPPED, update); /* * See if we have a job printing on this printer... */ if (p->job && p->job->state_value == IPP_JOB_PROCESSING) cupsdSetJobState(p->job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT, "Job stopped due to printer being paused."); } /* * 'cupsdUpdatePrinterPPD()' - Update keywords in a printer's PPD file. */ int /* O - 1 if successful, 0 otherwise */ cupsdUpdatePrinterPPD( cupsd_printer_t *p, /* I - Printer */ int num_keywords, /* I - Number of keywords */ cups_option_t *keywords) /* I - Keywords */ { int i; /* Looping var */ cups_file_t *src, /* Original file */ *dst; /* New file */ char srcfile[1024], /* Original filename */ dstfile[1024], /* New filename */ line[1024], /* Line from file */ keystring[41]; /* Keyword from line */ cups_option_t *keyword; /* Current keyword */ cupsdLogMessage(CUPSD_LOG_INFO, "Updating keywords in PPD file for %s...", p->name); /* * Get the old and new PPD filenames... */ snprintf(srcfile, sizeof(srcfile), "%s/ppd/%s.ppd.O", ServerRoot, p->name); snprintf(dstfile, sizeof(srcfile), "%s/ppd/%s.ppd", ServerRoot, p->name); /* * Rename the old file and open the old and new... */ if (rename(dstfile, srcfile)) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to backup PPD file for %s: %s", p->name, strerror(errno)); return (0); } if ((src = cupsFileOpen(srcfile, "r")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open PPD file \"%s\": %s", srcfile, strerror(errno)); rename(srcfile, dstfile); return (0); } if ((dst = cupsFileOpen(dstfile, "w")) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create PPD file \"%s\": %s", dstfile, strerror(errno)); cupsFileClose(src); rename(srcfile, dstfile); return (0); } /* * Copy the first line and then write out all of the keywords... */ if (!cupsFileGets(src, line, sizeof(line))) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to read PPD file \"%s\": %s", srcfile, strerror(errno)); cupsFileClose(src); cupsFileClose(dst); rename(srcfile, dstfile); return (0); } cupsFilePrintf(dst, "%s\n", line); for (i = num_keywords, keyword = keywords; i > 0; i --, keyword ++) { cupsdLogMessage(CUPSD_LOG_DEBUG, "*%s: %s", keyword->name, keyword->value); cupsFilePrintf(dst, "*%s: %s\n", keyword->name, keyword->value); } /* * Then copy the rest of the PPD file, dropping any keywords we changed. */ while (cupsFileGets(src, line, sizeof(line))) { /* * Skip keywords we've already set... */ if (sscanf(line, "*%40[^:]:", keystring) == 1 && cupsGetOption(keystring, num_keywords, keywords)) continue; /* * Otherwise write the line... */ cupsFilePrintf(dst, "%s\n", line); } /* * Close files and return... */ cupsFileClose(src); cupsFileClose(dst); return (1); } /* * 'cupsdUpdatePrinters()' - Update printers after a partial reload. */ void cupsdUpdatePrinters(void) { cupsd_printer_t *p; /* Current printer */ /* * Loop through the printers and recreate the printer attributes * for any local printers since the policy and/or access control * stuff may have changed. Also, if browsing is disabled, remove * any remote printers... */ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) { /* * Update the operation policy pointer... */ if ((p->op_policy_ptr = cupsdFindPolicy(p->op_policy)) == NULL) p->op_policy_ptr = DefaultPolicyPtr; /* * Update printer attributes... */ cupsdSetPrinterAttrs(p); } } /* * 'cupsdValidateDest()' - Validate a printer/class destination. */ const char * /* O - Printer or class name */ cupsdValidateDest( const char *uri, /* I - Printer URI */ cups_ptype_t *dtype, /* O - Type (printer or class) */ cupsd_printer_t **printer) /* O - Printer pointer */ { cupsd_printer_t *p; /* Current printer */ char localname[1024],/* Localized hostname */ *lptr, /* Pointer into localized hostname */ *sptr, /* Pointer into server name */ *rptr, /* Pointer into resource */ scheme[32], /* Scheme portion of URI */ username[64], /* Username portion of URI */ hostname[HTTP_MAX_HOST], /* Host portion of URI */ resource[HTTP_MAX_URI]; /* Resource portion of URI */ int port; /* Port portion of URI */ DEBUG_printf(("cupsdValidateDest(uri=\"%s\", dtype=%p, printer=%p)\n", uri, dtype, printer)); /* * Initialize return values... */ if (printer) *printer = NULL; if (dtype) *dtype = (cups_ptype_t)0; /* * Pull the hostname and resource from the URI... */ httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)); /* * See if the resource is a class or printer... */ if (!strncmp(resource, "/classes/", 9)) { /* * Class... */ rptr = resource + 9; } else if (!strncmp(resource, "/printers/", 10)) { /* * Printer... */ rptr = resource + 10; } else { /* * Bad resource name... */ return (NULL); } /* * See if the printer or class name exists... */ p = cupsdFindDest(rptr); if (p == NULL && strchr(rptr, '@') == NULL) return (NULL); else if (p != NULL) { if (printer) *printer = p; if (dtype) *dtype = p->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE); return (p->name); } /* * Change localhost to the server name... */ if (!_cups_strcasecmp(hostname, "localhost")) strlcpy(hostname, ServerName, sizeof(hostname)); strlcpy(localname, hostname, sizeof(localname)); if (!_cups_strcasecmp(hostname, ServerName)) { /* * Localize the hostname... */ lptr = strchr(localname, '.'); sptr = strchr(ServerName, '.'); if (sptr != NULL && lptr != NULL) { /* * Strip the common domain name components... */ while (lptr != NULL) { if (!_cups_strcasecmp(lptr, sptr)) { *lptr = '\0'; break; } else lptr = strchr(lptr + 1, '.'); } } } DEBUG_printf(("localized hostname is \"%s\"...\n", localname)); /* * Find a matching printer or class... */ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) if (!_cups_strcasecmp(p->hostname, localname) && !_cups_strcasecmp(p->name, rptr)) { if (printer) *printer = p; if (dtype) *dtype = p->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE); return (p->name); } return (NULL); } /* * 'cupsdWritePrintcap()' - Write a pseudo-printcap file for older applications * that need it... */ void cupsdWritePrintcap(void) { int i; /* Looping var */ cups_file_t *fp; /* Printcap file */ cupsd_printer_t *p; /* Current printer */ /* * See if we have a printcap file; if not, don't bother writing it. */ if (!Printcap || !*Printcap) return; cupsdLogMessage(CUPSD_LOG_INFO, "Generating printcap %s...", Printcap); /* * Open the printcap file... */ if ((fp = cupsFileOpen(Printcap, "w")) == NULL) return; /* * Put a comment header at the top so that users will know where the * data has come from... */ if (PrintcapFormat != PRINTCAP_PLIST) cupsFilePrintf(fp, "# This file was automatically generated by cupsd(8) " "from the\n" "# %s/printers.conf file. All changes to this file\n" "# will be lost.\n", ServerRoot); /* * Write a new printcap with the current list of printers. */ switch (PrintcapFormat) { case PRINTCAP_BSD : /* * Each printer is put in the file as: * * Printer1: * Printer2: * Printer3: * ... * PrinterN: */ if (DefaultPrinter) cupsFilePrintf(fp, "%s|%s:rm=%s:rp=%s:\n", DefaultPrinter->name, DefaultPrinter->info, ServerName, DefaultPrinter->name); for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) if (p != DefaultPrinter) cupsFilePrintf(fp, "%s|%s:rm=%s:rp=%s:\n", p->name, p->info, ServerName, p->name); break; case PRINTCAP_PLIST : /* * Each printer is written as a dictionary in a plist file. * Currently the printer-name, printer-info, printer-is-accepting-jobs, * printer-location, printer-make-and-model, printer-state, * printer-state-reasons, printer-type, and (sanitized) device-uri. */ cupsFilePuts(fp, "\n" "\n" "\n" "\n"); for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) { cupsFilePuts(fp, "\t\n" "\t\tprinter-name\n" "\t\t"); write_xml_string(fp, p->name); cupsFilePuts(fp, "\n" "\t\tprinter-info\n" "\t\t"); write_xml_string(fp, p->info); cupsFilePrintf(fp, "\n" "\t\tprinter-is-accepting-jobs\n" "\t\t<%s/>\n" "\t\tprinter-location\n" "\t\t", p->accepting ? "true" : "false"); write_xml_string(fp, p->location); cupsFilePuts(fp, "\n" "\t\tprinter-make-and-model\n" "\t\t"); write_xml_string(fp, p->make_model); cupsFilePrintf(fp, "\n" "\t\tprinter-state\n" "\t\t%d\n" "\t\tprinter-state-reasons\n" "\t\t\n", p->state); for (i = 0; i < p->num_reasons; i ++) { cupsFilePuts(fp, "\t\t\t"); write_xml_string(fp, p->reasons[i]); cupsFilePuts(fp, "\n"); } cupsFilePrintf(fp, "\t\t\n" "\t\tprinter-type\n" "\t\t%d\n" "\t\tdevice-uri\n" "\t\t", p->type); write_xml_string(fp, p->sanitized_device_uri); cupsFilePuts(fp, "\n" "\t\n"); } cupsFilePuts(fp, "\n" "\n"); break; case PRINTCAP_SOLARIS : /* * Each printer is put in the file as: * * _all:all=Printer1,Printer2,Printer3,...,PrinterN * _default:use=DefaultPrinter * Printer1:\ * :bsdaddr=ServerName,Printer1:\ * :description=Description: * Printer2: * :bsdaddr=ServerName,Printer2:\ * :description=Description: * Printer3: * :bsdaddr=ServerName,Printer3:\ * :description=Description: * ... * PrinterN: * :bsdaddr=ServerName,PrinterN:\ * :description=Description: */ cupsFilePuts(fp, "_all:all="); for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayCurrent(Printers)) cupsFilePrintf(fp, "%s%c", p->name, cupsArrayNext(Printers) ? ',' : '\n'); if (DefaultPrinter) cupsFilePrintf(fp, "_default:use=%s\n", DefaultPrinter->name); for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) cupsFilePrintf(fp, "%s:\\\n" "\t:bsdaddr=%s,%s:\\\n" "\t:description=%s:\n", p->name, ServerName, p->name, p->info ? p->info : ""); break; } /* * Close the file... */ cupsFileClose(fp); } /* * 'add_printer_defaults()' - Add name-default attributes to the printer attributes. */ static void add_printer_defaults(cupsd_printer_t *p)/* I - Printer */ { int i; /* Looping var */ int num_options; /* Number of default options */ cups_option_t *options, /* Default options */ *option; /* Current option */ char name[256]; /* name-default */ /* * Maintain a common array of default attribute names... */ if (!CommonDefaults) { CommonDefaults = cupsArrayNew((cups_array_func_t)strcmp, NULL); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("copies-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("document-format-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("finishings-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("job-account-id-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("job-accounting-user-id-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("job-cancel-after-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("job-hold-until-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("job-priority-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("job-sheets-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("media-col-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("notify-lease-duration-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("notify-events-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("number-up-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("orientation-requested-default")); cupsArrayAdd(CommonDefaults, _cupsStrAlloc("print-quality-default")); } /* * Add all of the default options from the .conf files... */ for (num_options = 0, options = NULL, i = p->num_options, option = p->options; i > 0; i --, option ++) { if (strcmp(option->name, "ipp-options") && strcmp(option->name, "job-sheets") && strcmp(option->name, "lease-duration")) { snprintf(name, sizeof(name), "%s-default", option->name); num_options = cupsAddOption(name, option->value, num_options, &options); if (!cupsArrayFind(CommonDefaults, name)) cupsArrayAdd(CommonDefaults, _cupsStrAlloc(name)); } } /* * Convert options to IPP attributes... */ cupsEncodeOptions2(p->attrs, num_options, options, IPP_TAG_PRINTER); cupsFreeOptions(num_options, options); /* * Add standard -default attributes as needed... */ if (!cupsGetOption("copies", p->num_options, p->options)) ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "copies-default", 1); if (!cupsGetOption("document-format", p->num_options, p->options)) ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_MIMETYPE, "document-format-default", NULL, "application/octet-stream"); if (!cupsGetOption("job-cancel-after", p->num_options, p->options)) ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "job-cancel-after-default", MaxJobTime); if (!cupsGetOption("job-hold-until", p->num_options, p->options)) ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "job-hold-until-default", NULL, "no-hold"); if (!cupsGetOption("job-priority", p->num_options, p->options)) ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "job-priority-default", 50); if (!cupsGetOption("number-up", p->num_options, p->options)) ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "number-up-default", 1); if (!cupsGetOption("notify-lease-duration", p->num_options, p->options)) ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "notify-lease-duration-default", DefaultLeaseDuration); if (!cupsGetOption("notify-events", p->num_options, p->options)) ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "notify-events-default", NULL, "job-completed"); if (!cupsGetOption("orientation-requested", p->num_options, p->options)) ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NOVALUE, "orientation-requested-default", NULL, NULL); if (!cupsGetOption("print-quality", p->num_options, p->options)) ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "print-quality-default", IPP_QUALITY_NORMAL); } /* * 'add_printer_filter()' - Add a MIME filter for a printer. */ static void add_printer_filter( cupsd_printer_t *p, /* I - Printer to add to */ mime_type_t *filtertype, /* I - Filter or prefilter MIME type */ const char *filter) /* I - Filter to add */ { char super[MIME_MAX_SUPER], /* Super-type for filter */ type[MIME_MAX_TYPE], /* Type for filter */ dsuper[MIME_MAX_SUPER], /* Destination super-type for filter */ dtype[MIME_MAX_TYPE], /* Destination type for filter */ dest[MIME_MAX_SUPER + MIME_MAX_TYPE + 2], /* Destination super/type */ program[1024]; /* Program/filter name */ int cost; /* Cost of filter */ size_t maxsize = 0; /* Maximum supported file size */ mime_type_t *temptype, /* MIME type looping var */ *desttype; /* Destination MIME type */ mime_filter_t *filterptr; /* MIME filter */ char filename[1024]; /* Full filter filename */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_printer_filter(p=%p(%s), filtertype=%p(%s/%s), " "filter=\"%s\")", p, p->name, filtertype, filtertype->super, filtertype->type, filter); /* * Parse the filter string; it should be in one of the following formats: * * source/type cost program * source/type cost maxsize(nnnn) program * source/type dest/type cost program * source/type dest/type cost maxsize(nnnn) program */ if (sscanf(filter, "%15[^/]/%255s%*[ \t]%15[^/]/%255s%d%*[ \t]%1023[^\n]", super, type, dsuper, dtype, &cost, program) == 6) { snprintf(dest, sizeof(dest), "%s/%s/%s", p->name, dsuper, dtype); if ((desttype = mimeType(MimeDatabase, "printer", dest)) == NULL) { desttype = mimeAddType(MimeDatabase, "printer", dest); if (!p->dest_types) p->dest_types = cupsArrayNew(NULL, NULL); cupsArrayAdd(p->dest_types, desttype); } } else { if (sscanf(filter, "%15[^/]/%255s%d%*[ \t]%1023[^\n]", super, type, &cost, program) == 4) { desttype = filtertype; } else { cupsdLogMessage(CUPSD_LOG_ERROR, "%s: invalid filter string \"%s\"!", p->name, filter); return; } } if (!strncmp(program, "maxsize(", 8)) { char *ptr; /* Pointer into maxsize(nnnn) program */ maxsize = (size_t)strtoll(program + 8, &ptr, 10); if (*ptr != ')') { cupsdLogMessage(CUPSD_LOG_ERROR, "%s: invalid filter string \"%s\"!", p->name, filter); return; } ptr ++; while (_cups_isspace(*ptr)) ptr ++; _cups_strcpy(program, ptr); } /* * Check permissions on the filter and its containing directory... */ if (strcmp(program, "-")) { if (program[0] == '/') strlcpy(filename, program, sizeof(filename)); else snprintf(filename, sizeof(filename), "%s/filter/%s", ServerBin, program); _cupsFileCheck(filename, _CUPS_FILE_CHECK_PROGRAM, !RunUser, cupsdLogFCMessage, p); } /* * Add the filter to the MIME database, supporting wildcards as needed... */ for (temptype = mimeFirstType(MimeDatabase); temptype; temptype = mimeNextType(MimeDatabase)) if (((super[0] == '*' && _cups_strcasecmp(temptype->super, "printer")) || !_cups_strcasecmp(temptype->super, super)) && (type[0] == '*' || !_cups_strcasecmp(temptype->type, type))) { if (desttype != filtertype) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_printer_filter: %s: adding filter %s/%s %s/%s %d " "%s", p->name, temptype->super, temptype->type, desttype->super, desttype->type, cost, program); filterptr = mimeAddFilter(MimeDatabase, temptype, desttype, cost, program); if (!mimeFilterLookup(MimeDatabase, desttype, filtertype)) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_printer_filter: %s: adding filter %s/%s %s/%s " "0 -", p->name, desttype->super, desttype->type, filtertype->super, filtertype->type); mimeAddFilter(MimeDatabase, desttype, filtertype, 0, "-"); } } else { cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_printer_filter: %s: adding filter %s/%s %s/%s %d " "%s", p->name, temptype->super, temptype->type, filtertype->super, filtertype->type, cost, program); filterptr = mimeAddFilter(MimeDatabase, temptype, filtertype, cost, program); } if (filterptr) filterptr->maxsize = maxsize; } } /* * 'add_printer_formats()' - Add document-format-supported values for a printer. */ static void add_printer_formats(cupsd_printer_t *p) /* I - Printer */ { int i; /* Looping var */ mime_type_t *type; /* Current MIME type */ cups_array_t *filters; /* Filters */ ipp_attribute_t *attr; /* document-format-supported attribute */ char mimetype[MIME_MAX_SUPER + MIME_MAX_TYPE + 2]; /* MIME type name */ /* * Raw (and remote) queues advertise all of the supported MIME * types... */ cupsArrayDelete(p->filetypes); p->filetypes = NULL; if (p->raw) { ippAddStrings(p->attrs, IPP_TAG_PRINTER, (ipp_tag_t)(IPP_TAG_MIMETYPE | IPP_TAG_COPY), "document-format-supported", NumMimeTypes, NULL, MimeTypes); return; } /* * Otherwise, loop through the supported MIME types and see if there * are filters for them... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_printer_formats: %d types, %d filters", mimeNumTypes(MimeDatabase), mimeNumFilters(MimeDatabase)); p->filetypes = cupsArrayNew(NULL, NULL); for (type = mimeFirstType(MimeDatabase); type; type = mimeNextType(MimeDatabase)) { if (!_cups_strcasecmp(type->super, "printer")) continue; snprintf(mimetype, sizeof(mimetype), "%s/%s", type->super, type->type); if ((filters = mimeFilter(MimeDatabase, type, p->filetype, NULL)) != NULL) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_printer_formats: %s: %s needs %d filters", p->name, mimetype, cupsArrayCount(filters)); cupsArrayDelete(filters); cupsArrayAdd(p->filetypes, type); } else cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_printer_formats: %s: %s not supported", p->name, mimetype); } /* * Add the file formats that can be filtered... */ if ((type = mimeType(MimeDatabase, "application", "octet-stream")) == NULL || !cupsArrayFind(p->filetypes, type)) i = 1; else i = 0; cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_printer_formats: %s: %d supported types", p->name, cupsArrayCount(p->filetypes) + i); attr = ippAddStrings(p->attrs, IPP_TAG_PRINTER, IPP_TAG_MIMETYPE, "document-format-supported", cupsArrayCount(p->filetypes) + i, NULL, NULL); if (i) attr->values[0].string.text = _cupsStrAlloc("application/octet-stream"); for (type = (mime_type_t *)cupsArrayFirst(p->filetypes); type; i ++, type = (mime_type_t *)cupsArrayNext(p->filetypes)) { snprintf(mimetype, sizeof(mimetype), "%s/%s", type->super, type->type); attr->values[i].string.text = _cupsStrAlloc(mimetype); } #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) { char pdl[1024]; /* Buffer to build pdl list */ mime_filter_t *filter; /* MIME filter looping var */ /* * We only support raw printing if this is not a Tioga PrintJobMgr based * queue and if application/octet-stream is a known type... */ for (filter = (mime_filter_t *)cupsArrayFirst(MimeDatabase->filters); filter; filter = (mime_filter_t *)cupsArrayNext(MimeDatabase->filters)) { if (filter->dst == p->filetype && strstr(filter->filter, "PrintJobMgr")) break; } pdl[0] = '\0'; if (!filter && mimeType(MimeDatabase, "application", "octet-stream")) strlcat(pdl, "application/octet-stream,", sizeof(pdl)); /* * Then list a bunch of formats that are supported by the printer... */ for (type = (mime_type_t *)cupsArrayFirst(p->filetypes); type; type = (mime_type_t *)cupsArrayNext(p->filetypes)) { if (!_cups_strcasecmp(type->super, "application")) { if (!_cups_strcasecmp(type->type, "pdf")) strlcat(pdl, "application/pdf,", sizeof(pdl)); else if (!_cups_strcasecmp(type->type, "postscript")) strlcat(pdl, "application/postscript,", sizeof(pdl)); } else if (!_cups_strcasecmp(type->super, "image")) { if (!_cups_strcasecmp(type->type, "jpeg")) strlcat(pdl, "image/jpeg,", sizeof(pdl)); else if (!_cups_strcasecmp(type->type, "png")) strlcat(pdl, "image/png,", sizeof(pdl)); else if (!_cups_strcasecmp(type->type, "pwg-raster")) strlcat(pdl, "image/pwg-raster,", sizeof(pdl)); } } if (pdl[0]) pdl[strlen(pdl) - 1] = '\0'; /* Remove trailing comma */ cupsdSetString(&p->pdl, pdl); } #endif /* HAVE_DNSSD || HAVE_AVAHI */ } /* * 'compare_printers()' - Compare two printers. */ static int /* O - Result of comparison */ compare_printers(void *first, /* I - First printer */ void *second, /* I - Second printer */ void *data) /* I - App data (not used) */ { (void)data; return (_cups_strcasecmp(((cupsd_printer_t *)first)->name, ((cupsd_printer_t *)second)->name)); } /* * 'delete_printer_filters()' - Delete all MIME filters for a printer. */ static void delete_printer_filters( cupsd_printer_t *p) /* I - Printer to remove from */ { mime_filter_t *filter; /* MIME filter looping var */ mime_type_t *type; /* Destination types for filters */ /* * Range check input... */ if (p == NULL) return; /* * Remove all filters from the MIME database that have a destination * type == printer... */ for (filter = mimeFirstFilter(MimeDatabase); filter; filter = mimeNextFilter(MimeDatabase)) if (filter->dst == p->filetype || filter->dst == p->prefiltertype || cupsArrayFind(p->dest_types, filter->dst)) { /* * Delete the current filter... */ mimeDeleteFilter(MimeDatabase, filter); } for (type = (mime_type_t *)cupsArrayFirst(p->dest_types); type; type = (mime_type_t *)cupsArrayNext(p->dest_types)) mimeDeleteType(MimeDatabase, type); cupsArrayDelete(p->dest_types); p->dest_types = NULL; cupsdSetPrinterReasons(p, "-cups-insecure-filter-warning" ",cups-missing-filter-warning"); } /* * 'dirty_printer()' - Mark config and state files dirty for the specified * printer. */ static void dirty_printer(cupsd_printer_t *p) /* I - Printer */ { if (p->type & CUPS_PRINTER_CLASS) cupsdMarkDirty(CUPSD_DIRTY_CLASSES); else cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); if (PrintcapFormat == PRINTCAP_PLIST) cupsdMarkDirty(CUPSD_DIRTY_PRINTCAP); } /* * 'load_ppd()' - Load a cached PPD file, updating the cache as needed. */ static void load_ppd(cupsd_printer_t *p) /* I - Printer */ { int i, j, k; /* Looping vars */ char cache_name[1024]; /* Cache filename */ struct stat cache_info; /* Cache file info */ ppd_file_t *ppd; /* PPD file */ char ppd_name[1024]; /* PPD filename */ struct stat ppd_info; /* PPD file info */ int num_media; /* Number of media options */ ppd_size_t *size; /* Current PPD size */ ppd_option_t *duplex, /* Duplex option */ *output_bin, /* OutputBin option */ *output_mode, /* OutputMode option */ *resolution; /* (Set|JCL|)Resolution option */ ppd_choice_t *choice, /* Current PPD choice */ *input_slot, /* Current input slot */ *media_type; /* Current media type */ ppd_attr_t *ppd_attr; /* PPD attribute */ int xdpi, /* Horizontal resolution */ ydpi; /* Vertical resolution */ const char *resptr; /* Pointer into resolution keyword */ pwg_size_t *pwgsize; /* Current PWG size */ pwg_map_t *pwgsource, /* Current PWG source */ *pwgtype; /* Current PWG type */ ipp_attribute_t *attr; /* Attribute data */ _ipp_value_t *val; /* Attribute value */ int num_finishings, /* Number of finishings */ finishings[100]; /* finishings-supported values */ int num_qualities, /* Number of print-quality values */ qualities[3]; /* print-quality values */ int num_margins, /* Number of media-*-margin-supported values */ margins[16]; /* media-*-margin-supported values */ const char *filter, /* Current filter */ *mandatory; /* Current mandatory attribute */ static const char * const pwg_raster_document_types[] = { "black_1", "sgray_8", "srgb_8" }; static const char * const sides[3] = /* sides-supported values */ { "one-sided", "two-sided-long-edge", "two-sided-short-edge" }; static const char * const standard_commands[] = { /* Standard CUPS commands */ "AutoConfigure", "Clean", "PrintSelfTestPage" }; /* * Check to see if the cache is up-to-date... */ snprintf(cache_name, sizeof(cache_name), "%s/%s.data", CacheDir, p->name); if (stat(cache_name, &cache_info)) cache_info.st_mtime = 0; snprintf(ppd_name, sizeof(ppd_name), "%s/ppd/%s.ppd", ServerRoot, p->name); if (stat(ppd_name, &ppd_info)) ppd_info.st_mtime = 1; ippDelete(p->ppd_attrs); p->ppd_attrs = NULL; _ppdCacheDestroy(p->pc); p->pc = NULL; if (cache_info.st_mtime >= ppd_info.st_mtime) { cupsdLogMessage(CUPSD_LOG_DEBUG, "load_ppd: Loading %s...", cache_name); if ((p->pc = _ppdCacheCreateWithFile(cache_name, &p->ppd_attrs)) != NULL && p->ppd_attrs) { /* * Loaded successfully! */ return; } } /* * Reload PPD attributes from disk... */ cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); cupsdLogMessage(CUPSD_LOG_DEBUG, "load_ppd: Loading %s...", ppd_name); cupsdClearString(&(p->make_model)); p->type &= (cups_ptype_t)~CUPS_PRINTER_OPTIONS; p->type |= CUPS_PRINTER_BW; finishings[0] = IPP_FINISHINGS_NONE; num_finishings = 1; p->ppd_attrs = ippNew(); if ((ppd = _ppdOpenFile(ppd_name, _PPD_LOCALIZATION_NONE)) != NULL) { /* * Add make/model and other various attributes... */ p->pc = _ppdCacheCreateWithPPD(ppd); if (!p->pc) cupsdLogMessage(CUPSD_LOG_WARN, "Unable to create cache of \"%s\": %s", ppd_name, cupsLastErrorString()); ppdMarkDefaults(ppd); if (ppd->color_device) p->type |= CUPS_PRINTER_COLOR; if (ppd->variable_sizes) p->type |= CUPS_PRINTER_VARIABLE; if (!ppd->manual_copies) p->type |= CUPS_PRINTER_COPIES; if ((ppd_attr = ppdFindAttr(ppd, "cupsFax", NULL)) != NULL) if (ppd_attr->value && !_cups_strcasecmp(ppd_attr->value, "true")) p->type |= CUPS_PRINTER_FAX; ippAddBoolean(p->ppd_attrs, IPP_TAG_PRINTER, "color-supported", (char)ppd->color_device); if (p->pc && p->pc->charge_info_uri) ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-charge-info-uri", NULL, p->pc->charge_info_uri); if (p->pc && p->pc->account_id) ippAddBoolean(p->ppd_attrs, IPP_TAG_PRINTER, "job-account-id-supported", 1); if (p->pc && p->pc->accounting_user_id) ippAddBoolean(p->ppd_attrs, IPP_TAG_PRINTER, "job-accounting-user-id-supported", 1); if (p->pc && p->pc->password) { ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "job-password-encryption-supported", NULL, "none"); ippAddInteger(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "job-password-supported", (int)strlen(p->pc->password)); } if (ppd->throughput) { ippAddInteger(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "pages-per-minute", ppd->throughput); if (ppd->color_device) ippAddInteger(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "pages-per-minute-color", ppd->throughput); } else { /* * When there is no speed information, just say "1 page per minute". */ ippAddInteger(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "pages-per-minute", 1); if (ppd->color_device) ippAddInteger(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "pages-per-minute-color", 1); } if ((ppd_attr = ppdFindAttr(ppd, "1284DeviceId", NULL)) != NULL) ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-device-id", NULL, ppd_attr->value); num_qualities = 0; if ((output_mode = ppdFindOption(ppd, "OutputMode")) != NULL) { if (ppdFindChoice(output_mode, "draft") || ppdFindChoice(output_mode, "fast")) qualities[num_qualities ++] = IPP_QUALITY_DRAFT; qualities[num_qualities ++] = IPP_QUALITY_NORMAL; if (ppdFindChoice(output_mode, "best") || ppdFindChoice(output_mode, "high")) qualities[num_qualities ++] = IPP_QUALITY_HIGH; } else if ((ppd_attr = ppdFindAttr(ppd, "APPrinterPreset", NULL)) != NULL) { do { if (strstr(ppd_attr->spec, "draft") || strstr(ppd_attr->spec, "Draft")) { qualities[num_qualities ++] = IPP_QUALITY_DRAFT; break; } } while ((ppd_attr = ppdFindNextAttr(ppd, "APPrinterPreset", NULL)) != NULL); qualities[num_qualities ++] = IPP_QUALITY_NORMAL; qualities[num_qualities ++] = IPP_QUALITY_HIGH; } else qualities[num_qualities ++] = IPP_QUALITY_NORMAL; ippAddIntegers(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "print-quality-supported", num_qualities, qualities); if (ppd->nickname) { /* * The NickName can be localized in the character set specified * by the LanugageEncoding attribute. However, ppdOpen2() has * already converted the ppd->nickname member to UTF-8 for us * (the original attribute value is available separately) */ cupsdSetString(&p->make_model, ppd->nickname); } else if (ppd->modelname) { /* * Model name can only contain specific characters... */ cupsdSetString(&p->make_model, ppd->modelname); } else cupsdSetString(&p->make_model, "Bad PPD File"); ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-make-and-model", NULL, p->make_model); /* * Add media options from the PPD file... */ if (ppd->num_sizes == 0 || !p->pc) { if (!ppdFindAttr(ppd, "APScannerOnly", NULL) && !ppdFindAttr(ppd, "cups3D", NULL)) cupsdLogMessage(CUPSD_LOG_CRIT, "The PPD file for printer %s contains no media " "options and is therefore invalid.", p->name); ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-default", NULL, "unknown"); ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-supported", NULL, "unknown"); } else { /* * media-default */ if ((size = ppdPageSize(ppd, NULL)) != NULL) pwgsize = _ppdCacheGetSize(p->pc, size->name); else pwgsize = NULL; ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-default", NULL, pwgsize ? pwgsize->map.pwg : "unknown"); /* * media-col-default */ if (pwgsize) { ipp_t *col; /* Collection value */ input_slot = ppdFindMarkedChoice(ppd, "InputSlot"); media_type = ppdFindMarkedChoice(ppd, "MediaType"); col = new_media_col(pwgsize, input_slot ? _ppdCacheGetSource(p->pc, input_slot->choice) : NULL, media_type ? _ppdCacheGetType(p->pc, media_type->choice) : NULL); ippAddCollection(p->ppd_attrs, IPP_TAG_PRINTER, "media-col-default", col); ippDelete(col); } /* * media-supported */ num_media = p->pc->num_sizes; if (p->pc->custom_min_keyword) num_media += 2; if ((attr = ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-supported", num_media, NULL, NULL)) != NULL) { val = attr->values; for (i = p->pc->num_sizes, pwgsize = p->pc->sizes; i > 0; i --, pwgsize ++, val ++) val->string.text = _cupsStrAlloc(pwgsize->map.pwg); if (p->pc->custom_min_keyword) { val->string.text = _cupsStrAlloc(p->pc->custom_min_keyword); val ++; val->string.text = _cupsStrAlloc(p->pc->custom_max_keyword); } } /* * media-size-supported */ num_media = p->pc->num_sizes; if (p->pc->custom_min_keyword) num_media ++; if ((attr = ippAddCollections(p->ppd_attrs, IPP_TAG_PRINTER, "media-size-supported", num_media, NULL)) != NULL) { val = attr->values; for (i = p->pc->num_sizes, pwgsize = p->pc->sizes; i > 0; i --, pwgsize ++, val ++) { val->collection = ippNew(); ippAddInteger(val->collection, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "x-dimension", pwgsize->width); ippAddInteger(val->collection, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "y-dimension", pwgsize->length); } if (p->pc->custom_min_keyword) { val->collection = ippNew(); ippAddRange(val->collection, IPP_TAG_PRINTER, "x-dimension", p->pc->custom_min_width, p->pc->custom_max_width); ippAddRange(val->collection, IPP_TAG_PRINTER, "y-dimension", p->pc->custom_min_length, p->pc->custom_max_length); } } /* * media-source-supported */ if (p->pc->num_sources > 0 && (attr = ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-source-supported", p->pc->num_sources, NULL, NULL)) != NULL) { for (i = p->pc->num_sources, pwgsource = p->pc->sources, val = attr->values; i > 0; i --, pwgsource ++, val ++) val->string.text = _cupsStrAlloc(pwgsource->pwg); } /* * media-type-supported */ if (p->pc->num_types > 0 && (attr = ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-type-supported", p->pc->num_types, NULL, NULL)) != NULL) { for (i = p->pc->num_types, pwgtype = p->pc->types, val = attr->values; i > 0; i --, pwgtype ++, val ++) val->string.text = _cupsStrAlloc(pwgtype->pwg); } /* * media-*-margin-supported */ for (i = p->pc->num_sizes, pwgsize = p->pc->sizes, num_margins = 0; i > 0 && num_margins < (int)(sizeof(margins) / sizeof(margins[0])); i --, pwgsize ++) { for (j = 0; j < num_margins; j ++) if (pwgsize->bottom == margins[j]) break; if (j >= num_margins) { margins[num_margins] = pwgsize->bottom; num_margins ++; } } if (num_margins > 0) ippAddIntegers(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-bottom-margin-supported", num_margins, margins); else ippAddInteger(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-bottom-margin-supported", 0); for (i = p->pc->num_sizes, pwgsize = p->pc->sizes, num_margins = 0; i > 0 && num_margins < (int)(sizeof(margins) / sizeof(margins[0])); i --, pwgsize ++) { for (j = 0; j < num_margins; j ++) if (pwgsize->left == margins[j]) break; if (j >= num_margins) { margins[num_margins] = pwgsize->left; num_margins ++; } } if (num_margins > 0) ippAddIntegers(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-left-margin-supported", num_margins, margins); else ippAddInteger(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-left-margin-supported", 0); for (i = p->pc->num_sizes, pwgsize = p->pc->sizes, num_margins = 0; i > 0 && num_margins < (int)(sizeof(margins) / sizeof(margins[0])); i --, pwgsize ++) { for (j = 0; j < num_margins; j ++) if (pwgsize->right == margins[j]) break; if (j >= num_margins) { margins[num_margins] = pwgsize->right; num_margins ++; } } if (num_margins > 0) ippAddIntegers(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-right-margin-supported", num_margins, margins); else ippAddInteger(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-right-margin-supported", 0); for (i = p->pc->num_sizes, pwgsize = p->pc->sizes, num_margins = 0; i > 0 && num_margins < (int)(sizeof(margins) / sizeof(margins[0])); i --, pwgsize ++) { for (j = 0; j < num_margins; j ++) if (pwgsize->top == margins[j]) break; if (j >= num_margins) { margins[num_margins] = pwgsize->top; num_margins ++; } } if (num_margins > 0) ippAddIntegers(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-top-margin-supported", num_margins, margins); else ippAddInteger(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-top-margin-supported", 0); /* * media-col-database */ num_media = p->pc->num_sizes; if (p->pc->num_sources) { if (p->pc->num_types > 0) num_media += p->pc->num_sizes * p->pc->num_sources * p->pc->num_types; else num_media += p->pc->num_sizes * p->pc->num_sources; } else if (p->pc->num_types) num_media += p->pc->num_sizes * p->pc->num_types; if ((attr = ippAddCollections(p->ppd_attrs, IPP_TAG_PRINTER, "media-col-database", num_media, NULL)) != NULL) { for (i = p->pc->num_sizes, pwgsize = p->pc->sizes, val = attr->values; i > 0; i --, pwgsize ++) { /* * Start by adding the page size without source or type... */ ppdMarkOption(ppd, "PageSize", pwgsize->map.ppd); val->collection = new_media_col(pwgsize, NULL, NULL); val ++; /* * Then add the specific, supported combinations of size, source, and * type... */ if (p->pc->num_sources > 0) { for (j = p->pc->num_sources, pwgsource = p->pc->sources; j > 0; j --, pwgsource ++) { ppdMarkOption(ppd, "InputSlot", pwgsource->ppd); if (p->pc->num_types > 0) { for (k = p->pc->num_types, pwgtype = p->pc->types; k > 0; k --, pwgtype ++) { if (!ppdMarkOption(ppd, "MediaType", pwgtype->ppd)) { val->collection = new_media_col(pwgsize, pwgsource->pwg, pwgtype->pwg); val ++; } } } else if (!ppdConflicts(ppd)) { val->collection = new_media_col(pwgsize, pwgsource->pwg, NULL); val ++; } } } else if (p->pc->num_types > 0) { for (j = p->pc->num_types, pwgtype = p->pc->types; j > 0; j --, pwgtype ++) { if (!ppdMarkOption(ppd, "MediaType", pwgtype->ppd)) { val->collection = new_media_col(pwgsize, NULL, pwgtype->pwg); val ++; } } } } /* * Update the number of media-col-database values... */ attr->num_values = val - attr->values; } } /* * Output bin... */ if (p->pc && p->pc->num_bins > 0) { attr = ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "output-bin-supported", p->pc->num_bins, NULL, NULL); if (attr != NULL) { for (i = 0, val = attr->values; i < p->pc->num_bins; i ++, val ++) val->string.text = _cupsStrAlloc(p->pc->bins[i].pwg); } if ((output_bin = ppdFindOption(ppd, "OutputBin")) != NULL) { for (i = 0; i < p->pc->num_bins; i ++) if (!strcmp(p->pc->bins[i].ppd, output_bin->defchoice)) break; if (i >= p->pc->num_bins) i = 0; ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "output-bin-default", NULL, p->pc->bins[i].pwg); } else ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "output-bin-default", NULL, p->pc->bins[0].pwg); } else if (((ppd_attr = ppdFindAttr(ppd, "DefaultOutputOrder", NULL)) != NULL && !_cups_strcasecmp(ppd_attr->value, "Reverse")) || (!ppd_attr && ppd->manufacturer && /* "Compatibility heuristic" */ (!_cups_strcasecmp(ppd->manufacturer, "epson") || !_cups_strcasecmp(ppd->manufacturer, "lexmark")))) { /* * Report that this printer has a single output bin that leaves pages face * up. */ ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "output-bin-supported", NULL, "face-up"); ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "output-bin-default", NULL, "face-up"); } else { ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "output-bin-supported", NULL, "face-down"); ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "output-bin-default", NULL, "face-down"); } /* * print-color-mode... */ if (ppd->color_device) { static const char * const color_modes[] = { "monochrome", "color" }; ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "print-color-mode-supported", 2, NULL, color_modes); ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "print-color-mode-default", NULL, "color"); ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "pwg-raster-document-type-supported", 3, NULL, pwg_raster_document_types); } else { ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "print-color-mode-supported", NULL, "monochrome"); ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "print-color-mode-default", NULL, "monochrome"); ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "pwg-raster-document-type-supported", 2, NULL, pwg_raster_document_types); } /* * Mandatory job attributes, if any... */ if (p->pc && cupsArrayCount(p->pc->mandatory) > 0) { int count = cupsArrayCount(p->pc->mandatory); /* Number of mandatory attributes */ attr = ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "printer-mandatory-job-attributes", count, NULL, NULL); for (val = attr->values, mandatory = (char *)cupsArrayFirst(p->pc->mandatory); mandatory; val ++, mandatory = (char *)cupsArrayNext(p->pc->mandatory)) val->string.text = _cupsStrAlloc(mandatory); } /* * Printer resolutions... */ if ((resolution = ppdFindOption(ppd, "Resolution")) == NULL) if ((resolution = ppdFindOption(ppd, "JCLResolution")) == NULL) if ((resolution = ppdFindOption(ppd, "SetResolution")) == NULL) resolution = ppdFindOption(ppd, "CNRes_PGP"); if (resolution) { /* * Report all supported resolutions... */ attr = ippAddResolutions(p->ppd_attrs, IPP_TAG_PRINTER, "printer-resolution-supported", resolution->num_choices, IPP_RES_PER_INCH, NULL, NULL); for (i = 0, choice = resolution->choices; i < resolution->num_choices; i ++, choice ++) { xdpi = ydpi = (int)strtol(choice->choice, (char **)&resptr, 10); if (resptr > choice->choice && xdpi > 0 && *resptr == 'x') ydpi = (int)strtol(resptr + 1, (char **)&resptr, 10); if (xdpi <= 0 || ydpi <= 0) { cupsdLogMessage(CUPSD_LOG_WARN, "Bad resolution \"%s\" for printer %s.", choice->choice, p->name); xdpi = ydpi = 300; } attr->values[i].resolution.xres = xdpi; attr->values[i].resolution.yres = ydpi; attr->values[i].resolution.units = IPP_RES_PER_INCH; if (choice->marked) ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER, "printer-resolution-default", IPP_RES_PER_INCH, xdpi, ydpi); if (i == 0) ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER, "pwg-raster-document-resolution-supported", IPP_RES_PER_INCH, xdpi, ydpi); } } else if ((ppd_attr = ppdFindAttr(ppd, "DefaultResolution", NULL)) != NULL && ppd_attr->value) { /* * Just the DefaultResolution to report... */ xdpi = ydpi = (int)strtol(ppd_attr->value, (char **)&resptr, 10); if (resptr > ppd_attr->value && xdpi > 0) { if (*resptr == 'x') ydpi = (int)strtol(resptr + 1, (char **)&resptr, 10); else ydpi = xdpi; } if (xdpi <= 0 || ydpi <= 0) { cupsdLogMessage(CUPSD_LOG_WARN, "Bad default resolution \"%s\" for printer %s.", ppd_attr->value, p->name); xdpi = ydpi = 300; } ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER, "printer-resolution-default", IPP_RES_PER_INCH, xdpi, ydpi); ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER, "printer-resolution-supported", IPP_RES_PER_INCH, xdpi, ydpi); ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER, "pwg-raster-document-resolution-supported", IPP_RES_PER_INCH, xdpi, ydpi); } else { /* * No resolutions in PPD - make one up... */ ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER, "printer-resolution-default", IPP_RES_PER_INCH, 300, 300); ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER, "printer-resolution-supported", IPP_RES_PER_INCH, 300, 300); ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER, "pwg-raster-document-resolution-supported", IPP_RES_PER_INCH, 300, 300); } /* * Duplexing, etc... */ ppdMarkDefaults(ppd); if ((duplex = ppdFindOption(ppd, "Duplex")) == NULL) if ((duplex = ppdFindOption(ppd, "EFDuplex")) == NULL) if ((duplex = ppdFindOption(ppd, "EFDuplexing")) == NULL) if ((duplex = ppdFindOption(ppd, "KD03Duplex")) == NULL) duplex = ppdFindOption(ppd, "JCLDuplex"); if (duplex && duplex->num_choices > 1 && !ppdInstallableConflict(ppd, duplex->keyword, "DuplexTumble")) { p->type |= CUPS_PRINTER_DUPLEX; ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "pwg-raster-document-sheet-back", NULL, "normal"); ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "sides-supported", 3, NULL, sides); if (!_cups_strcasecmp(duplex->defchoice, "DuplexTumble")) ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "sides-default", NULL, "two-sided-short-edge"); else if (!_cups_strcasecmp(duplex->defchoice, "DuplexNoTumble")) ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "sides-default", NULL, "two-sided-long-edge"); else ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "sides-default", NULL, "one-sided"); } else { ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "sides-supported", NULL, "one-sided"); ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "sides-default", NULL, "one-sided"); } if (ppdFindOption(ppd, "Collate") != NULL) p->type |= CUPS_PRINTER_COLLATE; if (p->pc && p->pc->finishings) { _pwg_finishings_t *fin; /* Current finishing value */ for (fin = (_pwg_finishings_t *)cupsArrayFirst(p->pc->finishings); fin; fin = (_pwg_finishings_t *)cupsArrayNext(p->pc->finishings)) { if (num_finishings < (int)(sizeof(finishings) / sizeof(finishings[0]))) finishings[num_finishings++] = fin->value; switch (fin->value) { case IPP_FINISHINGS_BIND : case IPP_FINISHINGS_BIND_LEFT : case IPP_FINISHINGS_BIND_TOP : case IPP_FINISHINGS_BIND_RIGHT : case IPP_FINISHINGS_BIND_BOTTOM : case IPP_FINISHINGS_EDGE_STITCH : case IPP_FINISHINGS_EDGE_STITCH_LEFT : case IPP_FINISHINGS_EDGE_STITCH_TOP : case IPP_FINISHINGS_EDGE_STITCH_RIGHT : case IPP_FINISHINGS_EDGE_STITCH_BOTTOM : p->type |= CUPS_PRINTER_BIND; break; case IPP_FINISHINGS_COVER : p->type |= CUPS_PRINTER_COVER; break; case IPP_FINISHINGS_PUNCH : case IPP_FINISHINGS_PUNCH_TOP_LEFT : case IPP_FINISHINGS_PUNCH_BOTTOM_LEFT : case IPP_FINISHINGS_PUNCH_TOP_RIGHT : case IPP_FINISHINGS_PUNCH_BOTTOM_RIGHT : case IPP_FINISHINGS_PUNCH_DUAL_LEFT : case IPP_FINISHINGS_PUNCH_DUAL_TOP : case IPP_FINISHINGS_PUNCH_DUAL_RIGHT : case IPP_FINISHINGS_PUNCH_DUAL_BOTTOM : case IPP_FINISHINGS_PUNCH_TRIPLE_LEFT : case IPP_FINISHINGS_PUNCH_TRIPLE_TOP : case IPP_FINISHINGS_PUNCH_TRIPLE_RIGHT : case IPP_FINISHINGS_PUNCH_TRIPLE_BOTTOM : case IPP_FINISHINGS_PUNCH_QUAD_LEFT : case IPP_FINISHINGS_PUNCH_QUAD_TOP : case IPP_FINISHINGS_PUNCH_QUAD_RIGHT : case IPP_FINISHINGS_PUNCH_QUAD_BOTTOM : p->type |= CUPS_PRINTER_PUNCH; break; case IPP_FINISHINGS_STAPLE : case IPP_FINISHINGS_STAPLE_TOP_LEFT : case IPP_FINISHINGS_STAPLE_BOTTOM_LEFT : case IPP_FINISHINGS_STAPLE_TOP_RIGHT : case IPP_FINISHINGS_STAPLE_BOTTOM_RIGHT : case IPP_FINISHINGS_STAPLE_DUAL_LEFT : case IPP_FINISHINGS_STAPLE_DUAL_TOP : case IPP_FINISHINGS_STAPLE_DUAL_RIGHT : case IPP_FINISHINGS_STAPLE_DUAL_BOTTOM : case IPP_FINISHINGS_STAPLE_TRIPLE_LEFT : case IPP_FINISHINGS_STAPLE_TRIPLE_TOP : case IPP_FINISHINGS_STAPLE_TRIPLE_RIGHT : case IPP_FINISHINGS_STAPLE_TRIPLE_BOTTOM : p->type |= CUPS_PRINTER_STAPLE; break; default : break; } } } for (i = 0; i < ppd->num_sizes; i ++) if (ppd->sizes[i].length > 1728) p->type |= CUPS_PRINTER_LARGE; else if (ppd->sizes[i].length > 1008) p->type |= CUPS_PRINTER_MEDIUM; else p->type |= CUPS_PRINTER_SMALL; if ((ppd_attr = ppdFindAttr(ppd, "APICADriver", NULL)) != NULL && ppd_attr->value && !_cups_strcasecmp(ppd_attr->value, "true")) { if ((ppd_attr = ppdFindAttr(ppd, "APScannerOnly", NULL)) != NULL && ppd_attr->value && !_cups_strcasecmp(ppd_attr->value, "true")) p->type |= CUPS_PRINTER_SCANNER; else p->type |= CUPS_PRINTER_MFP; } /* * Scan the filters in the PPD file... */ if (p->pc) { for (filter = (const char *)cupsArrayFirst(p->pc->filters); filter; filter = (const char *)cupsArrayNext(p->pc->filters)) { if (!_cups_strncasecmp(filter, "application/vnd.cups-command", 28) && _cups_isspace(filter[28])) { p->type |= CUPS_PRINTER_COMMANDS; break; } } } if (p->type & CUPS_PRINTER_COMMANDS) { char *commands, /* Copy of commands */ *start, /* Start of name */ *end; /* End of name */ int count; /* Number of commands */ if ((ppd_attr = ppdFindAttr(ppd, "cupsCommands", NULL)) != NULL) { for (count = 0, start = ppd_attr->value; *start; count ++) { while (_cups_isspace(*start)) start ++; if (!*start) break; while (*start && !isspace(*start & 255)) start ++; } } else count = 0; if (count > 0) { /* * Make a copy of the commands string and count how many commands there * are... */ attr = ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "printer-commands", count, NULL, NULL); commands = strdup(ppd_attr->value); for (count = 0, start = commands; *start; count ++) { while (isspace(*start & 255)) start ++; if (!*start) break; end = start; while (*end && !isspace(*end & 255)) end ++; if (*end) *end++ = '\0'; attr->values[count].string.text = _cupsStrAlloc(start); start = end; } free(commands); } else { /* * Add the standard list of commands... */ ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "printer-commands", (int)(sizeof(standard_commands) / sizeof(standard_commands[0])), NULL, standard_commands); } } else { /* * No commands supported... */ ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "printer-commands", NULL, "none"); } /* * Show current and available port monitors for this printer... */ ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor", NULL, p->port_monitor ? p->port_monitor : "none"); for (i = 1, ppd_attr = ppdFindAttr(ppd, "cupsPortMonitor", NULL); ppd_attr; i ++, ppd_attr = ppdFindNextAttr(ppd, "cupsPortMonitor", NULL)); if (ppd->protocols) { if (strstr(ppd->protocols, "TBCP")) i ++; else if (strstr(ppd->protocols, "BCP")) i ++; } attr = ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor-supported", i, NULL, NULL); attr->values[0].string.text = _cupsStrAlloc("none"); for (i = 1, ppd_attr = ppdFindAttr(ppd, "cupsPortMonitor", NULL); ppd_attr; i ++, ppd_attr = ppdFindNextAttr(ppd, "cupsPortMonitor", NULL)) attr->values[i].string.text = _cupsStrAlloc(ppd_attr->value); if (ppd->protocols) { if (strstr(ppd->protocols, "TBCP")) attr->values[i].string.text = _cupsStrAlloc("tbcp"); else if (strstr(ppd->protocols, "BCP")) attr->values[i].string.text = _cupsStrAlloc("bcp"); } if (ppdFindAttr(ppd, "APRemoteQueueID", NULL)) p->type |= CUPS_PRINTER_REMOTE; #ifdef HAVE_APPLICATIONSERVICES_H /* * Convert the file referenced in APPrinterIconPath to a 128x128 PNG * and save it as cacheDir/printername.png */ if ((ppd_attr = ppdFindAttr(ppd, "APPrinterIconPath", NULL)) != NULL && ppd_attr->value && !_cupsFileCheck(ppd_attr->value, _CUPS_FILE_CHECK_FILE, !RunUser, cupsdLogFCMessage, p)) { CGImageRef imageRef = NULL;/* Current icon image */ CGImageRef biggestIconRef = NULL; /* Biggest icon image */ CGImageRef closestTo128IconRef = NULL; /* Icon image closest to and >= 128 */ CGImageSourceRef sourceRef; /* The file's image source */ char outPath[HTTP_MAX_URI]; /* The path to the PNG file */ CFURLRef outUrl; /* The URL made from the outPath */ CFURLRef icnsFileUrl; /* The URL of the original ICNS icon file */ CGImageDestinationRef destRef; /* The image destination to write */ size_t bytesPerRow; /* The bytes per row used for resizing */ CGContextRef context; /* The CG context used for resizing */ snprintf(outPath, sizeof(outPath), "%s/%s.png", CacheDir, p->name); outUrl = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (UInt8 *)outPath, (CFIndex)strlen(outPath), FALSE); icnsFileUrl = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (UInt8 *)ppd_attr->value, (CFIndex)strlen(ppd_attr->value), FALSE); if (outUrl && icnsFileUrl) { sourceRef = CGImageSourceCreateWithURL(icnsFileUrl, NULL); if (sourceRef) { for (i = 0; i < (int)CGImageSourceGetCount(sourceRef); i ++) { imageRef = CGImageSourceCreateImageAtIndex(sourceRef, (size_t)i, NULL); if (!imageRef) continue; if (CGImageGetWidth(imageRef) == CGImageGetHeight(imageRef)) { /* * Loop through remembering the icon closest to 128 but >= 128 * and then remember the largest icon. */ if (CGImageGetWidth(imageRef) >= 128 && (!closestTo128IconRef || CGImageGetWidth(imageRef) < CGImageGetWidth(closestTo128IconRef))) { CGImageRelease(closestTo128IconRef); CGImageRetain(imageRef); closestTo128IconRef = imageRef; } if (!biggestIconRef || CGImageGetWidth(imageRef) > CGImageGetWidth(biggestIconRef)) { CGImageRelease(biggestIconRef); CGImageRetain(imageRef); biggestIconRef = imageRef; } } CGImageRelease(imageRef); } if (biggestIconRef) { /* * If biggestIconRef is NULL, we found no icons. Otherwise we first * want the closest to 128, but if none are larger than 128, we want * the largest icon available. */ imageRef = closestTo128IconRef ? closestTo128IconRef : biggestIconRef; CGImageRetain(imageRef); CGImageRelease(biggestIconRef); if (closestTo128IconRef) CGImageRelease(closestTo128IconRef); destRef = CGImageDestinationCreateWithURL(outUrl, kUTTypePNG, 1, NULL); if (destRef) { if (CGImageGetWidth(imageRef) != 128) { bytesPerRow = CGImageGetBytesPerRow(imageRef) / CGImageGetWidth(imageRef) * 128; context = CGBitmapContextCreate(NULL, 128, 128, CGImageGetBitsPerComponent(imageRef), bytesPerRow, CGImageGetColorSpace(imageRef), kCGImageAlphaPremultipliedFirst); if (context) { CGContextDrawImage(context, CGRectMake(0, 0, 128, 128), imageRef); CGImageRelease(imageRef); imageRef = CGBitmapContextCreateImage(context); CGContextRelease(context); } } CGImageDestinationAddImage(destRef, imageRef, NULL); CGImageDestinationFinalize(destRef); CFRelease(destRef); } CGImageRelease(imageRef); } CFRelease(sourceRef); } } if (outUrl) CFRelease(outUrl); if (icnsFileUrl) CFRelease(icnsFileUrl); } #endif /* HAVE_APPLICATIONSERVICES_H */ /* * Close the PPD and set the type... */ ppdClose(ppd); } else if (!access(ppd_name, 0)) { int pline; /* PPD line number */ ppd_status_t pstatus; /* PPD load status */ pstatus = ppdLastError(&pline); cupsdLogMessage(CUPSD_LOG_ERROR, "PPD file for %s cannot be loaded.", p->name); if (pstatus <= PPD_ALLOC_ERROR) cupsdLogMessage(CUPSD_LOG_ERROR, "%s: %s", ppd_name, strerror(errno)); else cupsdLogMessage(CUPSD_LOG_ERROR, "%s on line %d of %s.", ppdErrorString(pstatus), pline, ppd_name); cupsdLogMessage(CUPSD_LOG_INFO, "Hint: Run \"cupstestppd %s\" and fix any errors.", ppd_name); } else { if (((!strncmp(p->device_uri, "ipp://", 6) || !strncmp(p->device_uri, "ipps://", 7)) && (strstr(p->device_uri, "/printers/") != NULL || strstr(p->device_uri, "/classes/") != NULL)) || ((strstr(p->device_uri, "._ipp.") != NULL || strstr(p->device_uri, "._ipps.") != NULL) && !strcmp(p->device_uri + strlen(p->device_uri) - 5, "/cups"))) { /* * Tell the client this is really a hard-wired remote printer. */ p->type |= CUPS_PRINTER_REMOTE; /* * Then set the make-and-model accordingly... */ ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-make-and-model", NULL, "Remote Printer"); /* * Print all files directly... */ p->raw = 1; p->remote = 1; } else { /* * Otherwise we have neither - treat this as a "dumb" printer * with no PPD file... */ ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-make-and-model", NULL, "Local Raw Printer"); p->raw = 1; } } ippAddIntegers(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-supported", num_finishings, finishings); ippAddInteger(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-default", IPP_FINISHINGS_NONE); if (ppd && p->pc) { /* * Save cached PPD attributes to disk... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "load_ppd: Saving %s...", cache_name); _ppdCacheWriteFile(p->pc, cache_name, p->ppd_attrs); } else { /* * Remove cache files... */ if (cache_info.st_mtime) unlink(cache_name); } } /* * 'new_media_col()' - Create a media-col collection value. */ static ipp_t * /* O - Collection value */ new_media_col(pwg_size_t *size, /* I - media-size/margin values */ const char *source, /* I - media-source value */ const char *type) /* I - media-type value */ { ipp_t *media_col, /* Collection value */ *media_size; /* media-size value */ media_col = ippNew(); media_size = ippNew(); ippAddInteger(media_size, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "x-dimension", size->width); ippAddInteger(media_size, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "y-dimension", size->length); ippAddCollection(media_col, IPP_TAG_PRINTER, "media-size", media_size); ippDelete(media_size); ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-bottom-margin", size->bottom); ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-left-margin", size->left); ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-right-margin", size->right); ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-top-margin", size->top); if (source) ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-source", NULL, source); if (type) ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-type", NULL, type); return (media_col); } /* * 'write_xml_string()' - Write a string with XML escaping. */ static void write_xml_string(cups_file_t *fp, /* I - File to write to */ const char *s) /* I - String to write */ { const char *start; /* Start of current sequence */ if (!s) return; for (start = s; *s; s ++) { if (*s == '&') { if (s > start) cupsFileWrite(fp, start, (size_t)(s - start)); cupsFilePuts(fp, "&"); start = s + 1; } else if (*s == '<') { if (s > start) cupsFileWrite(fp, start, (size_t)(s - start)); cupsFilePuts(fp, "<"); start = s + 1; } } if (s > start) cupsFilePuts(fp, start); } cups-2.2.7/scheduler/printers.h000664 000765 000024 00000016045 13255074424 017156 0ustar00msweetstaff000000 000000 /* * Printer definitions for the CUPS scheduler. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #ifdef HAVE_DNSSD # include #elif defined(HAVE_AVAHI) # include # include # include # include #endif /* HAVE_DNSSD */ #include /* * Quota data... */ typedef struct { char username[33]; /* User data */ time_t next_update; /* Next update time */ int page_count, /* Count of pages */ k_count; /* Count of kilobytes */ } cupsd_quota_t; /* * DNS-SD types to make the code cleaner/clearer... */ #ifdef HAVE_DNSSD typedef DNSServiceRef cupsd_srv_t; /* Service reference */ typedef TXTRecordRef cupsd_txt_t; /* TXT record */ #elif defined(HAVE_AVAHI) typedef AvahiEntryGroup *cupsd_srv_t; /* Service reference */ typedef AvahiStringList *cupsd_txt_t; /* TXT record */ #endif /* HAVE_DNSSD */ /* * Printer/class information structure... */ typedef struct cupsd_job_s cupsd_job_t; struct cupsd_printer_s { _cups_rwlock_t lock; /* Concurrency lock for background updates */ char *uri, /* Printer URI */ *uuid, /* Printer UUID */ *hostname, /* Host printer resides on */ *name, /* Printer name */ *location, /* Location string */ *geo_location, /* Geographic location URI */ *make_model, /* Make and model */ *info, /* Description */ *organization, /* Organization name */ *organizational_unit, /* Organizational unit (department, etc.) */ *op_policy, /* Operation policy name */ *error_policy; /* Error policy */ cupsd_policy_t *op_policy_ptr; /* Pointer to operation policy */ int shared; /* Shared? */ int temporary; /* Temporary queue? */ int accepting; /* Accepting jobs? */ int holding_new_jobs; /* Holding new jobs for printing? */ int in_implicit_class; /* In an implicit class? */ ipp_pstate_t state; /* Printer state */ char state_message[1024]; /* Printer state message */ int num_reasons; /* Number of printer-state-reasons */ char *reasons[64]; /* printer-state-reasons strings */ time_t config_time, /* Time at this configuration */ state_time; /* Time at this state */ char *job_sheets[2]; /* Banners/job sheets */ cups_ptype_t type; /* Printer type (color, small, etc.) */ char *device_uri; /* Device URI */ char *sanitized_device_uri; /* Sanitized device URI */ char *port_monitor; /* Port monitor */ int raw; /* Raw queue? */ int remote; /* Remote queue? */ mime_type_t *filetype, /* Pseudo-filetype for printer */ *prefiltertype; /* Pseudo-filetype for pre-filters */ cups_array_t *filetypes, /* Supported file types */ *dest_types; /* Destination types for queue */ cupsd_job_t *job; /* Current job in queue */ ipp_t *attrs, /* Attributes supported by this printer */ *ppd_attrs; /* Attributes based on the PPD */ int num_printers, /* Number of printers in class */ last_printer; /* Last printer job was sent to */ struct cupsd_printer_s **printers; /* Printers in class */ int quota_period, /* Period for quotas */ page_limit, /* Maximum number of pages */ k_limit; /* Maximum number of kilobytes */ cups_array_t *quotas; /* Quota records */ int deny_users; /* 1 = deny, 0 = allow */ cups_array_t *users; /* Allowed/denied users */ int sequence_number; /* Increasing sequence number */ int num_options; /* Number of default options */ cups_option_t *options; /* Default options */ int num_auth_info_required; /* Number of required auth fields */ const char *auth_info_required[4]; /* Required authentication fields */ char *alert, /* PSX printer-alert value */ *alert_description; /* PSX printer-alert-description value */ time_t marker_time; /* Last time marker attributes were updated */ _ppd_cache_t *pc; /* PPD cache and mapping data */ #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) char *reg_name, /* Name used for service registration */ *pdl; /* pdl value for TXT record */ cupsd_srv_t ipp_srv; /* IPP service(s) */ # ifdef HAVE_DNSSD # ifdef HAVE_SSL cupsd_srv_t ipps_srv; /* IPPS service(s) */ # endif /* HAVE_SSL */ cupsd_srv_t printer_srv; /* LPD service */ # endif /* HAVE_DNSSD */ #endif /* HAVE_DNSSD || HAVE_AVAHI */ }; /* * Globals... */ VAR ipp_t *CommonData VALUE(NULL); /* Common printer object attrs */ VAR cups_array_t *CommonDefaults VALUE(NULL); /* Common -default option names */ VAR cups_array_t *Printers VALUE(NULL); /* Printer list */ VAR cupsd_printer_t *DefaultPrinter VALUE(NULL); /* Default printer */ VAR char *DefaultPolicy VALUE(NULL); /* Default policy name */ VAR cupsd_policy_t *DefaultPolicyPtr VALUE(NULL); /* Pointer to default policy */ /* * Prototypes... */ extern cupsd_printer_t *cupsdAddPrinter(const char *name); extern void cupsdCreateCommonData(void); extern void cupsdDeleteAllPrinters(void); extern int cupsdDeletePrinter(cupsd_printer_t *p, int update); extern void cupsdDeleteTemporaryPrinters(int force); extern cupsd_printer_t *cupsdFindDest(const char *name); extern cupsd_printer_t *cupsdFindPrinter(const char *name); extern cupsd_quota_t *cupsdFindQuota(cupsd_printer_t *p, const char *username); extern void cupsdFreeQuotas(cupsd_printer_t *p); extern void cupsdLoadAllPrinters(void); extern void cupsdRenamePrinter(cupsd_printer_t *p, const char *name); extern void cupsdSaveAllPrinters(void); extern int cupsdSetAuthInfoRequired(cupsd_printer_t *p, const char *values, ipp_attribute_t *attr); extern void cupsdSetDeviceURI(cupsd_printer_t *p, const char *uri); extern void cupsdSetPrinterAttr(cupsd_printer_t *p, const char *name, const char *value); extern void cupsdSetPrinterAttrs(cupsd_printer_t *p); extern int cupsdSetPrinterReasons(cupsd_printer_t *p, const char *s); extern void cupsdSetPrinterState(cupsd_printer_t *p, ipp_pstate_t s, int update); #define cupsdStartPrinter(p,u) cupsdSetPrinterState((p), \ IPP_PRINTER_IDLE, (u)) extern void cupsdStopPrinter(cupsd_printer_t *p, int update); extern int cupsdUpdatePrinterPPD(cupsd_printer_t *p, int num_keywords, cups_option_t *keywords); extern void cupsdUpdatePrinters(void); extern cupsd_quota_t *cupsdUpdateQuota(cupsd_printer_t *p, const char *username, int pages, int k); extern const char *cupsdValidateDest(const char *uri, cups_ptype_t *dtype, cupsd_printer_t **printer); extern void cupsdWritePrintcap(void); cups-2.2.7/scheduler/process.c000664 000765 000024 00000060531 13255074424 016760 0ustar00msweetstaff000000 000000 /* * Process management routines for the CUPS scheduler. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #include #ifdef __APPLE__ # include #endif /* __APPLE__ */ #ifdef HAVE_POSIX_SPAWN # include extern char **environ; /* Don't use posix_spawn on systems with bugs in their implementations... */ # if defined(OpenBSD) && OpenBSD < 201505 # define USE_POSIX_SPAWN 0 # elif defined(__UCLIBC__) && __UCLIBC_MAJOR__ == 1 && __UCLIBC_MINOR__ == 0 && __UCLIBC_SUBLEVEL__ < 27 # define USE_POSIX_SPAWN 0 # elif defined(__UCLIBC__) && __UCLIBC_MAJOR__ < 1 # define USE_POSIX_SPAWN 0 # else /* All other platforms */ # define USE_POSIX_SPAWN 1 # endif /* ... */ #else # define USE_POSIX_SPAWN 0 #endif /* HAVE_POSIX_SPAWN */ /* * Process structure... */ typedef struct { int pid, /* Process ID */ job_id; /* Job associated with process */ char name[1]; /* Name of process */ } cupsd_proc_t; /* * Local globals... */ static cups_array_t *process_array = NULL; /* * Local functions... */ static int compare_procs(cupsd_proc_t *a, cupsd_proc_t *b); #ifdef HAVE_SANDBOX_H static char *cupsd_requote(char *dst, const char *src, size_t dstsize); #endif /* HAVE_SANDBOX_H */ /* * 'cupsdCreateProfile()' - Create an execution profile for a subprocess. */ void * /* O - Profile or NULL on error */ cupsdCreateProfile(int job_id, /* I - Job ID or 0 for none */ int allow_networking)/* I - Allow networking off machine? */ { #ifdef HAVE_SANDBOX_H cups_file_t *fp; /* File pointer */ char profile[1024], /* File containing the profile */ bin[1024], /* Quoted ServerBin */ cache[1024], /* Quoted CacheDir */ domain[1024], /* Domain socket, if any */ request[1024], /* Quoted RequestRoot */ root[1024], /* Quoted ServerRoot */ state[1024], /* Quoted StateDir */ temp[1024]; /* Quoted TempDir */ const char *nodebug; /* " (with no-log)" for no debug */ cupsd_listener_t *lis; /* Current listening socket */ if (!UseSandboxing || Sandboxing == CUPSD_SANDBOXING_OFF) { /* * Only use sandbox profiles as root... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCreateProfile(job_id=%d, allow_networking=%d) = NULL", job_id, allow_networking); return (NULL); } if ((fp = cupsTempFile2(profile, sizeof(profile))) == NULL) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCreateProfile(job_id=%d, allow_networking=%d) = NULL", job_id, allow_networking); cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create security profile: %s", strerror(errno)); return (NULL); } fchown(cupsFileNumber(fp), RunUser, Group); fchmod(cupsFileNumber(fp), 0640); cupsd_requote(bin, ServerBin, sizeof(bin)); cupsd_requote(cache, CacheDir, sizeof(cache)); cupsd_requote(request, RequestRoot, sizeof(request)); cupsd_requote(root, ServerRoot, sizeof(root)); cupsd_requote(state, StateDir, sizeof(state)); cupsd_requote(temp, TempDir, sizeof(temp)); nodebug = LogLevel < CUPSD_LOG_DEBUG ? " (with no-log)" : ""; cupsFilePuts(fp, "(version 1)\n"); if (Sandboxing == CUPSD_SANDBOXING_STRICT) cupsFilePuts(fp, "(deny default)\n"); else cupsFilePuts(fp, "(allow default)\n"); if (LogLevel >= CUPSD_LOG_DEBUG) cupsFilePuts(fp, "(debug deny)\n"); cupsFilePuts(fp, "(import \"system.sb\")\n"); cupsFilePuts(fp, "(import \"com.apple.corefoundation.sb\")\n"); cupsFilePuts(fp, "(system-network)\n"); cupsFilePuts(fp, "(allow mach-per-user-lookup)\n"); cupsFilePuts(fp, "(allow ipc-posix-sem)\n"); cupsFilePuts(fp, "(allow ipc-posix-shm)\n"); cupsFilePuts(fp, "(allow ipc-sysv-shm)\n"); cupsFilePuts(fp, "(allow mach-lookup)\n"); if (!RunUser) cupsFilePrintf(fp, "(deny file-write* file-read-data file-read-metadata\n" " (regex" " #\"^/Users$\"" " #\"^/Users/\"" ")%s)\n", nodebug); cupsFilePrintf(fp, "(deny file-write*\n" " (regex" " #\"^%s$\"" /* ServerRoot */ " #\"^%s/\"" /* ServerRoot/... */ " #\"^/private/etc$\"" " #\"^/private/etc/\"" " #\"^/usr/local/etc$\"" " #\"^/usr/local/etc/\"" " #\"^/Library$\"" " #\"^/Library/\"" " #\"^/System$\"" " #\"^/System/\"" ")%s)\n", root, root, nodebug); /* Specifically allow applications to stat RequestRoot and some other system folders */ cupsFilePrintf(fp, "(allow file-read-metadata\n" " (regex" " #\"^/$\"" /* / */ " #\"^/usr$\"" /* /usr */ " #\"^/Library$\"" /* /Library */ " #\"^/Library/Printers$\"" /* /Library/Printers */ " #\"^%s$\"" /* RequestRoot */ "))\n", request); /* Read and write TempDir, CacheDir, and other common folders */ cupsFilePuts(fp, "(allow file-write* file-read-data file-read-metadata\n" " (regex" " #\"^/private/var/db/\"" " #\"^/private/var/folders/\"" " #\"^/private/var/lib/\"" " #\"^/private/var/log/\"" " #\"^/private/var/mysql/\"" " #\"^/private/var/run/\"" " #\"^/private/var/spool/\"" " #\"^/Library/Application Support/\"" " #\"^/Library/Caches/\"" " #\"^/Library/Logs/\"" " #\"^/Library/Preferences/\"" " #\"^/Library/WebServer/\"" " #\"^/Users/Shared/\"" "))\n"); cupsFilePrintf(fp, "(deny file-write*\n" " (regex #\"^%s$\")%s)\n", request, nodebug); cupsFilePrintf(fp, "(deny file-write* file-read-data file-read-metadata\n" " (regex #\"^%s/\")%s)\n", request, nodebug); cupsFilePrintf(fp, "(allow file-write* file-read-data file-read-metadata\n" " (regex" " #\"^%s$\"" /* TempDir */ " #\"^%s/\"" /* TempDir/... */ " #\"^%s$\"" /* CacheDir */ " #\"^%s/\"" /* CacheDir/... */ " #\"^%s$\"" /* StateDir */ " #\"^%s/\"" /* StateDir/... */ "))\n", temp, temp, cache, cache, state, state); /* Read common folders */ cupsFilePrintf(fp, "(allow file-read-data file-read-metadata\n" " (regex" " #\"^/AppleInternal$\"" " #\"^/AppleInternal/\"" " #\"^/bin$\"" /* /bin */ " #\"^/bin/\"" /* /bin/... */ " #\"^/private$\"" " #\"^/private/etc$\"" " #\"^/private/etc/\"" " #\"^/private/tmp$\"" " #\"^/private/tmp/\"" " #\"^/private/var$\"" " #\"^/private/var/db$\"" " #\"^/private/var/folders$\"" " #\"^/private/var/lib$\"" " #\"^/private/var/log$\"" " #\"^/private/var/mysql$\"" " #\"^/private/var/run$\"" " #\"^/private/var/spool$\"" " #\"^/private/var/tmp$\"" " #\"^/private/var/tmp/\"" " #\"^/usr/bin$\"" /* /usr/bin */ " #\"^/usr/bin/\"" /* /usr/bin/... */ " #\"^/usr/libexec/cups$\"" /* /usr/libexec/cups */ " #\"^/usr/libexec/cups/\"" /* /usr/libexec/cups/... */ " #\"^/usr/libexec/fax$\"" /* /usr/libexec/fax */ " #\"^/usr/libexec/fax/\"" /* /usr/libexec/fax/... */ " #\"^/usr/sbin$\"" /* /usr/sbin */ " #\"^/usr/sbin/\"" /* /usr/sbin/... */ " #\"^/Library$\"" /* /Library */ " #\"^/Library/\"" /* /Library/... */ " #\"^/System$\"" /* /System */ " #\"^/System/\"" /* /System/... */ " #\"^%s/Library$\"" /* RequestRoot/Library */ " #\"^%s/Library/\"" /* RequestRoot/Library/... */ " #\"^%s$\"" /* ServerBin */ " #\"^%s/\"" /* ServerBin/... */ " #\"^%s$\"" /* ServerRoot */ " #\"^%s/\"" /* ServerRoot/... */ "))\n", request, request, bin, bin, root, root); if (Sandboxing == CUPSD_SANDBOXING_RELAXED) { /* Limited write access to /Library/Printers/... */ cupsFilePuts(fp, "(allow file-write*\n" " (regex" " #\"^/Library/Printers/.*/\"" "))\n"); cupsFilePrintf(fp, "(deny file-write*\n" " (regex" " #\"^/Library/Printers/PPDs$\"" " #\"^/Library/Printers/PPDs/\"" " #\"^/Library/Printers/PPD Plugins$\"" " #\"^/Library/Printers/PPD Plugins/\"" ")%s)\n", nodebug); } /* Allow execution of child processes as long as the programs are not in a user directory */ cupsFilePuts(fp, "(allow process*)\n"); cupsFilePuts(fp, "(deny process-exec (regex #\"^/Users/\"))\n"); if (RunUser && getenv("CUPS_TESTROOT")) { /* Allow source directory access in "make test" environment */ char testroot[1024]; /* Root directory of test files */ cupsd_requote(testroot, getenv("CUPS_TESTROOT"), sizeof(testroot)); cupsFilePrintf(fp, "(allow file-write* file-read-data file-read-metadata\n" " (regex" " #\"^%s$\"" /* CUPS_TESTROOT */ " #\"^%s/\"" /* CUPS_TESTROOT/... */ "))\n", testroot, testroot); cupsFilePrintf(fp, "(allow process-exec\n" " (regex" " #\"^%s/\"" /* CUPS_TESTROOT/... */ "))\n", testroot); cupsFilePrintf(fp, "(allow sysctl*)\n"); } if (job_id) { /* Allow job filters to read the current job files... */ cupsFilePrintf(fp, "(allow file-read-data file-read-metadata\n" " (regex #\"^%s/([ac]%05d|d%05d-[0-9][0-9][0-9])$\"))\n", request, job_id, job_id); } else { /* Allow email notifications from notifiers... */ cupsFilePuts(fp, "(allow process-exec\n" " (literal \"/usr/sbin/sendmail\")\n" " (with no-sandbox))\n"); } /* Allow access to Bluetooth, USB, and notify_post. */ cupsFilePuts(fp, "(allow iokit*)\n"); cupsFilePuts(fp, "(allow distributed-notification-post)\n"); /* Allow outbound networking to local services */ cupsFilePuts(fp, "(allow network-outbound" "\n (regex #\"^/private/var/run/\" #\"^/private/tmp/\" #\"^/private/var/tmp/\")"); for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); lis; lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) { if (httpAddrFamily(&(lis->address)) == AF_LOCAL) { httpAddrString(&(lis->address), domain, sizeof(domain)); cupsFilePrintf(fp, "\n (literal \"%s\")", domain); } } if (allow_networking) { /* Allow TCP and UDP networking off the machine... */ cupsFilePuts(fp, "\n (remote tcp))\n"); cupsFilePuts(fp, "(allow network-bind)\n"); /* for LPD resvport */ cupsFilePuts(fp, "(allow network*\n" " (local udp \"*:*\")\n" " (remote udp \"*:*\"))\n"); /* Also allow access to device files... */ cupsFilePuts(fp, "(allow file-write* file-read-data file-read-metadata file-ioctl\n" " (regex #\"^/dev/\"))\n"); /* And allow kernel extensions to be loaded, e.g., SMB */ cupsFilePuts(fp, "(allow system-kext-load)\n"); } else { /* Only allow SNMP (UDP) and LPD (TCP) off the machine... */ cupsFilePuts(fp, ")\n"); cupsFilePuts(fp, "(allow network-outbound\n" " (remote udp \"*:161\")\n" " (remote tcp \"*:515\"))\n"); cupsFilePuts(fp, "(allow network-inbound\n" " (local udp \"localhost:*\"))\n"); } cupsFileClose(fp); cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCreateProfile(job_id=%d,allow_networking=%d) = \"%s\"", job_id, allow_networking, profile); return ((void *)strdup(profile)); #else cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCreateProfile(job_id=%d, allow_networking=%d) = NULL", job_id, allow_networking); return (NULL); #endif /* HAVE_SANDBOX_H */ } /* * 'cupsdDestroyProfile()' - Delete an execution profile. */ void cupsdDestroyProfile(void *profile) /* I - Profile */ { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDeleteProfile(profile=\"%s\")", profile ? (char *)profile : "(null)"); #ifdef HAVE_SANDBOX_H if (profile) { unlink((char *)profile); free(profile); } #endif /* HAVE_SANDBOX_H */ } /* * 'cupsdEndProcess()' - End a process. */ int /* O - 0 on success, -1 on failure */ cupsdEndProcess(int pid, /* I - Process ID */ int force) /* I - Force child to die */ { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdEndProcess(pid=%d, force=%d)", pid, force); if (!pid) return (0); if (!RunUser) { /* * When running as root, cupsd puts child processes in their own process * group. Using "-pid" sends a signal to all processes in the group. */ pid = -pid; } if (force) return (kill(pid, SIGKILL)); else return (kill(pid, SIGTERM)); } /* * 'cupsdFinishProcess()' - Finish a process and get its name. */ const char * /* O - Process name */ cupsdFinishProcess(int pid, /* I - Process ID */ char *name, /* I - Name buffer */ size_t namelen, /* I - Size of name buffer */ int *job_id) /* O - Job ID pointer or NULL */ { cupsd_proc_t key, /* Search key */ *proc; /* Matching process */ key.pid = pid; if ((proc = (cupsd_proc_t *)cupsArrayFind(process_array, &key)) != NULL) { if (job_id) *job_id = proc->job_id; strlcpy(name, proc->name, namelen); cupsArrayRemove(process_array, proc); free(proc); } else { if (job_id) *job_id = 0; strlcpy(name, "unknown", namelen); } cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFinishProcess(pid=%d, name=%p, namelen=" CUPS_LLFMT ", job_id=%p(%d)) = \"%s\"", pid, name, CUPS_LLCAST namelen, job_id, job_id ? *job_id : 0, name); return (name); } /* * 'cupsdStartProcess()' - Start a process. */ int /* O - Process ID or 0 */ cupsdStartProcess( const char *command, /* I - Full path to command */ char *argv[], /* I - Command-line arguments */ char *envp[], /* I - Environment */ int infd, /* I - Standard input file descriptor */ int outfd, /* I - Standard output file descriptor */ int errfd, /* I - Standard error file descriptor */ int backfd, /* I - Backchannel file descriptor */ int sidefd, /* I - Sidechannel file descriptor */ int root, /* I - Run as root? */ void *profile, /* I - Security profile to use */ cupsd_job_t *job, /* I - Job associated with process */ int *pid) /* O - Process ID */ { int i; /* Looping var */ const char *exec_path = command; /* Command to be exec'd */ char *real_argv[110], /* Real command-line arguments */ cups_exec[1024], /* Path to "cups-exec" program */ user_str[16], /* User string */ group_str[16], /* Group string */ nice_str[16]; /* FilterNice string */ uid_t user; /* Command UID */ cupsd_proc_t *proc; /* New process record */ #if USE_POSIX_SPAWN posix_spawn_file_actions_t actions; /* Spawn file actions */ posix_spawnattr_t attrs; /* Spawn attributes */ sigset_t defsignals; /* Default signals */ #elif defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* POSIX signal handler */ #endif /* USE_POSIX_SPAWN */ #if defined(__APPLE__) char processPath[1024], /* CFProcessPath environment variable */ linkpath[1024]; /* Link path for symlinks... */ int linkbytes; /* Bytes for link path */ #endif /* __APPLE__ */ *pid = 0; /* * Figure out the UID for the child process... */ if (RunUser) user = RunUser; else if (root) user = 0; else user = User; /* * Check the permissions of the command we are running... */ if (_cupsFileCheck(command, _CUPS_FILE_CHECK_PROGRAM, !RunUser, cupsdLogFCMessage, job ? job->printer : NULL)) return (0); #if defined(__APPLE__) if (envp) { /* * Add special voodoo magic for macOS - this allows macOS programs to access * their bundle resources properly... */ if ((linkbytes = readlink(command, linkpath, sizeof(linkpath) - 1)) > 0) { /* * Yes, this is a symlink to the actual program, nul-terminate and * use it... */ linkpath[linkbytes] = '\0'; if (linkpath[0] == '/') snprintf(processPath, sizeof(processPath), "CFProcessPath=%s", linkpath); else snprintf(processPath, sizeof(processPath), "CFProcessPath=%s/%s", dirname((char *)command), linkpath); } else snprintf(processPath, sizeof(processPath), "CFProcessPath=%s", command); envp[0] = processPath; /* Replace string */ } #endif /* __APPLE__ */ /* * Use helper program when we have a sandbox profile... */ #if !USE_POSIX_SPAWN if (profile) #endif /* !USE_POSIX_SPAWN */ { snprintf(cups_exec, sizeof(cups_exec), "%s/daemon/cups-exec", ServerBin); snprintf(user_str, sizeof(user_str), "%d", user); snprintf(group_str, sizeof(group_str), "%d", Group); snprintf(nice_str, sizeof(nice_str), "%d", FilterNice); real_argv[0] = cups_exec; real_argv[1] = (char *)"-g"; real_argv[2] = group_str; real_argv[3] = (char *)"-n"; real_argv[4] = nice_str; real_argv[5] = (char *)"-u"; real_argv[6] = user_str; real_argv[7] = profile ? profile : "none"; real_argv[8] = (char *)command; for (i = 0; i < (int)(sizeof(real_argv) / sizeof(real_argv[0]) - 10) && argv[i]; i ++) real_argv[i + 9] = argv[i]; real_argv[i + 9] = NULL; argv = real_argv; exec_path = cups_exec; } if (LogLevel == CUPSD_LOG_DEBUG2) { cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartProcess: Preparing to start \"%s\", arguments:", command); for (i = 0; argv[i]; i ++) cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartProcess: argv[%d] = \"%s\"", i, argv[i]); } #if USE_POSIX_SPAWN /* * Setup attributes and file actions for the spawn... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartProcess: Setting spawn attributes."); sigemptyset(&defsignals); sigaddset(&defsignals, SIGTERM); sigaddset(&defsignals, SIGCHLD); sigaddset(&defsignals, SIGPIPE); posix_spawnattr_init(&attrs); posix_spawnattr_setflags(&attrs, POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_SETSIGDEF); posix_spawnattr_setpgroup(&attrs, 0); posix_spawnattr_setsigdefault(&attrs, &defsignals); cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartProcess: Setting file actions."); posix_spawn_file_actions_init(&actions); if (infd != 0) { if (infd < 0) posix_spawn_file_actions_addopen(&actions, 0, "/dev/null", O_RDONLY, 0); else posix_spawn_file_actions_adddup2(&actions, infd, 0); } if (outfd != 1) { if (outfd < 0) posix_spawn_file_actions_addopen(&actions, 1, "/dev/null", O_WRONLY, 0); else posix_spawn_file_actions_adddup2(&actions, outfd, 1); } if (errfd != 2) { if (errfd < 0) posix_spawn_file_actions_addopen(&actions, 2, "/dev/null", O_WRONLY, 0); else posix_spawn_file_actions_adddup2(&actions, errfd, 2); } if (backfd != 3 && backfd >= 0) posix_spawn_file_actions_adddup2(&actions, backfd, 3); if (sidefd != 4 && sidefd >= 0) posix_spawn_file_actions_adddup2(&actions, sidefd, 4); cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartProcess: Calling posix_spawn."); if (posix_spawn(pid, exec_path, &actions, &attrs, argv, envp ? envp : environ)) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to fork %s - %s.", command, strerror(errno)); *pid = 0; } else cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartProcess: pid=%d", (int)*pid); posix_spawn_file_actions_destroy(&actions); posix_spawnattr_destroy(&attrs); #else /* * Block signals before forking... */ cupsdHoldSignals(); if ((*pid = fork()) == 0) { /* * Child process goes here; update stderr as needed... */ if (errfd != 2) { if (errfd < 0) errfd = open("/dev/null", O_WRONLY); if (errfd != 2) { dup2(errfd, 2); close(errfd); } } /* * Put this process in its own process group so that we can kill any child * processes it creates. */ # ifdef HAVE_SETPGID if (!RunUser && setpgid(0, 0)) exit(errno + 100); # else if (!RunUser && setpgrp()) exit(errno + 100); # endif /* HAVE_SETPGID */ /* * Update the remaining file descriptors as needed... */ if (infd != 0) { if (infd < 0) infd = open("/dev/null", O_RDONLY); if (infd != 0) { dup2(infd, 0); close(infd); } } if (outfd != 1) { if (outfd < 0) outfd = open("/dev/null", O_WRONLY); if (outfd != 1) { dup2(outfd, 1); close(outfd); } } if (backfd != 3 && backfd >= 0) { dup2(backfd, 3); close(backfd); fcntl(3, F_SETFL, O_NDELAY); } if (sidefd != 4 && sidefd >= 0) { dup2(sidefd, 4); close(sidefd); fcntl(4, F_SETFL, O_NDELAY); } /* * Change the priority of the process based on the FilterNice setting. * (this is not done for root processes...) */ if (!root) nice(FilterNice); /* * Reset group membership to just the main one we belong to. */ if (!RunUser && setgid(Group)) exit(errno + 100); if (!RunUser && setgroups(1, &Group)) exit(errno + 100); /* * Change user to something "safe"... */ if (!RunUser && user && setuid(user)) exit(errno + 100); /* * Change umask to restrict permissions on created files... */ umask(077); /* * Unblock signals before doing the exec... */ # ifdef HAVE_SIGSET sigset(SIGTERM, SIG_DFL); sigset(SIGCHLD, SIG_DFL); sigset(SIGPIPE, SIG_DFL); # elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); action.sa_handler = SIG_DFL; sigaction(SIGTERM, &action, NULL); sigaction(SIGCHLD, &action, NULL); sigaction(SIGPIPE, &action, NULL); # else signal(SIGTERM, SIG_DFL); signal(SIGCHLD, SIG_DFL); signal(SIGPIPE, SIG_DFL); # endif /* HAVE_SIGSET */ cupsdReleaseSignals(); /* * Execute the command; if for some reason this doesn't work, log an error * exit with a non-zero value... */ if (envp) execve(exec_path, argv, envp); else execv(exec_path, argv); exit(errno + 100); } else if (*pid < 0) { /* * Error - couldn't fork a new process! */ cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to fork %s - %s.", command, strerror(errno)); *pid = 0; } cupsdReleaseSignals(); #endif /* USE_POSIX_SPAWN */ if (*pid) { if (!process_array) process_array = cupsArrayNew((cups_array_func_t)compare_procs, NULL); if (process_array) { if ((proc = calloc(1, sizeof(cupsd_proc_t) + strlen(command))) != NULL) { proc->pid = *pid; proc->job_id = job ? job->id : 0; _cups_strcpy(proc->name, command); cupsArrayAdd(process_array, proc); } } } cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartProcess(command=\"%s\", argv=%p, envp=%p, " "infd=%d, outfd=%d, errfd=%d, backfd=%d, sidefd=%d, root=%d, " "profile=%p, job=%p(%d), pid=%p) = %d", command, argv, envp, infd, outfd, errfd, backfd, sidefd, root, profile, job, job ? job->id : 0, pid, *pid); return (*pid); } /* * 'compare_procs()' - Compare two processes. */ static int /* O - Result of comparison */ compare_procs(cupsd_proc_t *a, /* I - First process */ cupsd_proc_t *b) /* I - Second process */ { return (a->pid - b->pid); } #ifdef HAVE_SANDBOX_H /* * 'cupsd_requote()' - Make a regular-expression version of a string. */ static char * /* O - Quoted string */ cupsd_requote(char *dst, /* I - Destination buffer */ const char *src, /* I - Source string */ size_t dstsize) /* I - Size of destination buffer */ { int ch; /* Current character */ char *dstptr, /* Current position in buffer */ *dstend; /* End of destination buffer */ dstptr = dst; dstend = dst + dstsize - 2; while (*src && dstptr < dstend) { ch = *src++; if (ch == '/' && !*src) break; /* Don't add trailing slash */ if (strchr(".?*()[]^$\\\"", ch)) *dstptr++ = '\\'; *dstptr++ = (char)ch; } *dstptr = '\0'; return (dst); } #endif /* HAVE_SANDBOX_H */ cups-2.2.7/scheduler/quotas.c000664 000765 000024 00000013006 13255074424 016611 0ustar00msweetstaff000000 000000 /* * Quota routines for the CUPS scheduler. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" /* * Local functions... */ static cupsd_quota_t *add_quota(cupsd_printer_t *p, const char *username); static int compare_quotas(const cupsd_quota_t *q1, const cupsd_quota_t *q2); /* * 'cupsdFindQuota()' - Find a quota record. */ cupsd_quota_t * /* O - Quota data */ cupsdFindQuota( cupsd_printer_t *p, /* I - Printer */ const char *username) /* I - User */ { cupsd_quota_t *q, /* Quota data pointer */ match; /* Search data */ char *ptr; /* Pointer into username */ if (!p || !username) return (NULL); strlcpy(match.username, username, sizeof(match.username)); if ((ptr = strchr(match.username, '@')) != NULL) *ptr = '\0'; /* Strip @domain/@KDC */ if ((q = (cupsd_quota_t *)cupsArrayFind(p->quotas, &match)) != NULL) return (q); else return (add_quota(p, username)); } /* * 'cupsdFreeQuotas()' - Free quotas for a printer. */ void cupsdFreeQuotas(cupsd_printer_t *p) /* I - Printer */ { cupsd_quota_t *q; /* Current quota record */ if (!p) return; for (q = (cupsd_quota_t *)cupsArrayFirst(p->quotas); q; q = (cupsd_quota_t *)cupsArrayNext(p->quotas)) free(q); cupsArrayDelete(p->quotas); p->quotas = NULL; } /* * 'cupsdUpdateQuota()' - Update quota data for the specified printer and user. */ cupsd_quota_t * /* O - Quota data */ cupsdUpdateQuota( cupsd_printer_t *p, /* I - Printer */ const char *username, /* I - User */ int pages, /* I - Number of pages */ int k) /* I - Number of kilobytes */ { cupsd_quota_t *q; /* Quota data */ cupsd_job_t *job; /* Current job */ time_t curtime; /* Current time */ ipp_attribute_t *attr; /* Job attribute */ if (!p || !username) return (NULL); if (!p->k_limit && !p->page_limit) return (NULL); if ((q = cupsdFindQuota(p, username)) == NULL) return (NULL); cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdUpdateQuota: p=%s username=%s pages=%d k=%d", p->name, username, pages, k); curtime = time(NULL); if (curtime < q->next_update) { q->page_count += pages; q->k_count += k; return (q); } if (p->quota_period) curtime -= p->quota_period; else curtime = 0; q->next_update = 0; q->page_count = 0; q->k_count = 0; for (job = (cupsd_job_t *)cupsArrayFirst(Jobs); job; job = (cupsd_job_t *)cupsArrayNext(Jobs)) { /* * We only care about the current printer/class and user... */ if (_cups_strcasecmp(job->dest, p->name) != 0 || _cups_strcasecmp(job->username, q->username) != 0) continue; /* * Make sure attributes are loaded; we always call cupsdLoadJob() to ensure * the access_time member is updated so the job isn't unloaded right away... */ if (!cupsdLoadJob(job)) continue; if ((attr = ippFindAttribute(job->attrs, "time-at-completion", IPP_TAG_INTEGER)) == NULL) if ((attr = ippFindAttribute(job->attrs, "time-at-processing", IPP_TAG_INTEGER)) == NULL) attr = ippFindAttribute(job->attrs, "time-at-creation", IPP_TAG_INTEGER); if (attr->values[0].integer < curtime) { /* * This job is too old to count towards the quota, ignore it... */ if (JobAutoPurge && !job->printer && job->state_value > IPP_JOB_STOPPED) cupsdDeleteJob(job, CUPSD_JOB_PURGE); continue; } if (q->next_update == 0) q->next_update = attr->values[0].integer + p->quota_period; if ((attr = ippFindAttribute(job->attrs, "job-media-sheets-completed", IPP_TAG_INTEGER)) != NULL) q->page_count += attr->values[0].integer; if ((attr = ippFindAttribute(job->attrs, "job-k-octets", IPP_TAG_INTEGER)) != NULL) q->k_count += attr->values[0].integer; } return (q); } /* * 'add_quota()' - Add a quota record for this printer and user. */ static cupsd_quota_t * /* O - Quota data */ add_quota(cupsd_printer_t *p, /* I - Printer */ const char *username) /* I - User */ { cupsd_quota_t *q; /* New quota data */ char *ptr; /* Pointer into username */ if (!p || !username) return (NULL); if (!p->quotas) p->quotas = cupsArrayNew((cups_array_func_t)compare_quotas, NULL); if (!p->quotas) return (NULL); if ((q = calloc(1, sizeof(cupsd_quota_t))) == NULL) return (NULL); strlcpy(q->username, username, sizeof(q->username)); if ((ptr = strchr(q->username, '@')) != NULL) *ptr = '\0'; /* Strip @domain/@KDC */ cupsArrayAdd(p->quotas, q); return (q); } /* * 'compare_quotas()' - Compare two quota records... */ static int /* O - Result of comparison */ compare_quotas(const cupsd_quota_t *q1, /* I - First quota record */ const cupsd_quota_t *q2) /* I - Second quota record */ { return (_cups_strcasecmp(q1->username, q2->username)); } cups-2.2.7/scheduler/select.c000664 000765 000024 00000056413 13255074424 016565 0ustar00msweetstaff000000 000000 /* * Select abstraction functions for the CUPS scheduler. * * Copyright 2007-2016 by Apple Inc. * Copyright 2006-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #ifdef HAVE_EPOLL # include # include #elif defined(HAVE_KQUEUE) # include # include #elif defined(HAVE_POLL) # include #else # include #endif /* HAVE_EPOLL */ /* * Design Notes for Poll/Select API in CUPSD * ----------------------------------------- * * SUPPORTED APIS * * OS select poll epoll kqueue /dev/poll * -------------- ------ ------ ------ ------ --------- * AIX YES YES NO NO NO * FreeBSD YES YES NO YES NO * HP-UX YES YES NO NO NO * Linux YES YES YES NO NO * macOS YES YES NO YES NO * NetBSD YES YES NO YES NO * OpenBSD YES YES NO YES NO * Solaris YES YES NO NO YES * Tru64 YES YES NO NO NO * Windows YES NO NO NO NO * * * HIGH-LEVEL API * * typedef void (*cupsd_selfunc_t)(void *data); * * void cupsdStartSelect(void); * void cupsdStopSelect(void); * void cupsdAddSelect(int fd, cupsd_selfunc_t read_cb, * cupsd_selfunc_t write_cb, void *data); * void cupsdRemoveSelect(int fd); * int cupsdDoSelect(int timeout); * * * IMPLEMENTATION STRATEGY * * 0. Common Stuff * a. CUPS array of file descriptor to callback functions * and data + temporary array of removed fd's. * b. cupsdStartSelect() creates the arrays * c. cupsdStopSelect() destroys the arrays and all elements. * d. cupsdAddSelect() adds to the array and allocates a * new callback element. * e. cupsdRemoveSelect() removes from the active array and * adds to the inactive array. * f. _cupsd_fd_t provides a reference-counted structure for * tracking file descriptors that are monitored. * g. cupsdDoSelect() frees all inactive FDs. * * 1. select() O(n) * a. Input/Output fd_set variables, copied to working * copies and then used with select(). * b. Loop through CUPS array, using FD_ISSET and calling * the read/write callbacks as needed. * c. cupsdRemoveSelect() clears fd_set bit from main and * working sets. * d. cupsdStopSelect() frees all of the memory used by the * CUPS array and fd_set's. * * 2. poll() - O(n log n) * a. Regular array of pollfd, sorted the same as the CUPS * array. * b. Loop through pollfd array, call the corresponding * read/write callbacks as needed. * c. cupsdAddSelect() adds first to CUPS array and flags the * pollfd array as invalid. * d. cupsdDoSelect() rebuilds pollfd array as needed, calls * poll(), then loops through the pollfd array looking up * as needed. * e. cupsdRemoveSelect() flags the pollfd array as invalid. * f. cupsdStopSelect() frees all of the memory used by the * CUPS array and pollfd array. * * 3. epoll() - O(n) * a. cupsdStartSelect() creates epoll file descriptor using * epoll_create() with the maximum fd count, and * allocates an events buffer for the maximum fd count. * b. cupsdAdd/RemoveSelect() uses epoll_ctl() to add * (EPOLL_CTL_ADD) or remove (EPOLL_CTL_DEL) a single * event using the level-triggered semantics. The event * user data field is a pointer to the new callback array * element. * c. cupsdDoSelect() uses epoll_wait() with the global event * buffer allocated in cupsdStartSelect() and then loops * through the events, using the user data field to find * the callback record. * d. cupsdStopSelect() closes the epoll file descriptor and * frees all of the memory used by the event buffer. * * 4. kqueue() - O(n) * b. cupsdStartSelect() creates kqueue file descriptor * using kqueue() function and allocates a global event * buffer. * c. cupsdAdd/RemoveSelect() uses EV_SET and kevent() to * register the changes. The event user data field is a * pointer to the new callback array element. * d. cupsdDoSelect() uses kevent() to poll for events and * loops through the events, using the user data field to * find the callback record. * e. cupsdStopSelect() closes the kqueue() file descriptor * and frees all of the memory used by the event buffer. * * 5. /dev/poll - O(n log n) - NOT YET IMPLEMENTED * a. cupsdStartSelect() opens /dev/poll and allocates an * array of pollfd structs; on failure to open /dev/poll, * revert to poll() system call. * b. cupsdAddSelect() writes a single pollfd struct to * /dev/poll with the new file descriptor and the * POLLIN/POLLOUT flags. * c. cupsdRemoveSelect() writes a single pollfd struct to * /dev/poll with the file descriptor and the POLLREMOVE * flag. * d. cupsdDoSelect() uses the DP_POLL ioctl to retrieve * events from /dev/poll and then loops through the * returned pollfd array, looking up the file descriptors * as needed. * e. cupsdStopSelect() closes /dev/poll and frees the * pollfd array. * * PERFORMANCE * * In tests using the "make test" target with option 0 (keep cupsd * running) and the "testspeed" program with "-c 50 -r 1000", epoll() * performed 5.5% slower than select(), followed by kqueue() at 16% * slower than select() and poll() at 18% slower than select(). Similar * results were seen with twice the number of client connections. * * The epoll() and kqueue() performance is likely limited by the * number of system calls used to add/modify/remove file * descriptors dynamically. Further optimizations may be possible * in the area of limiting use of cupsdAddSelect() and * cupsdRemoveSelect(), however extreme care will be needed to avoid * excess CPU usage and deadlock conditions. * * We may be able to improve the poll() implementation simply by * keeping the pollfd array sync'd with the _cupsd_fd_t array, as that * will eliminate the rebuilding of the array whenever there is a * change and eliminate the fd array lookups in the inner loop of * cupsdDoSelect(). * * Since /dev/poll will never be able to use a shadow array, it may * not make sense to implement support for it. ioctl() overhead will * impact performance as well, so my guess would be that, for CUPS, * /dev/poll will yield a net performance loss. */ /* * Local structures... */ typedef struct _cupsd_fd_s { int fd, /* File descriptor */ use; /* Use count */ cupsd_selfunc_t read_cb, /* Read callback */ write_cb; /* Write callback */ void *data; /* Data pointer for callbacks */ } _cupsd_fd_t; /* * Local globals... */ static cups_array_t *cupsd_fds = NULL; #if defined(HAVE_EPOLL) || defined(HAVE_KQUEUE) static cups_array_t *cupsd_inactive_fds = NULL; static int cupsd_in_select = 0; #endif /* HAVE_EPOLL || HAVE_KQUEUE */ #ifdef HAVE_KQUEUE static int cupsd_kqueue_fd = -1, cupsd_kqueue_changes = 0; static struct kevent *cupsd_kqueue_events = NULL; #elif defined(HAVE_POLL) static int cupsd_alloc_pollfds = 0, cupsd_update_pollfds = 0; static struct pollfd *cupsd_pollfds = NULL; # ifdef HAVE_EPOLL static int cupsd_epoll_fd = -1; static struct epoll_event *cupsd_epoll_events = NULL; # endif /* HAVE_EPOLL */ #else /* select() */ static fd_set cupsd_global_input, cupsd_global_output, cupsd_current_input, cupsd_current_output; #endif /* HAVE_KQUEUE */ /* * Local functions... */ static int compare_fds(_cupsd_fd_t *a, _cupsd_fd_t *b); static _cupsd_fd_t *find_fd(int fd); #define release_fd(f) { \ (f)->use --; \ if (!(f)->use) free((f));\ } #define retain_fd(f) (f)->use++ /* * 'cupsdAddSelect()' - Add a file descriptor to the list. */ int /* O - 1 on success, 0 on error */ cupsdAddSelect(int fd, /* I - File descriptor */ cupsd_selfunc_t read_cb, /* I - Read callback */ cupsd_selfunc_t write_cb,/* I - Write callback */ void *data) /* I - Data to pass to callback */ { _cupsd_fd_t *fdptr; /* File descriptor record */ #ifdef HAVE_EPOLL int added; /* 1 if added, 0 if modified */ #endif /* HAVE_EPOLL */ /* * Range check input... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdAddSelect(fd=%d, read_cb=%p, write_cb=%p, data=%p)", fd, read_cb, write_cb, data); if (fd < 0) return (0); /* * See if this FD has already been added... */ if ((fdptr = find_fd(fd)) == NULL) { /* * No, add a new entry... */ if ((fdptr = calloc(1, sizeof(_cupsd_fd_t))) == NULL) return (0); fdptr->fd = fd; fdptr->use = 1; if (!cupsArrayAdd(cupsd_fds, fdptr)) { cupsdLogMessage(CUPSD_LOG_EMERG, "Unable to add fd %d to array!", fd); free(fdptr); return (0); } #ifdef HAVE_EPOLL added = 1; } else added = 0; #else } #endif /* HAVE_EPOLL */ #ifdef HAVE_KQUEUE { struct kevent event; /* Event data */ struct timespec timeout; /* Timeout value */ timeout.tv_sec = 0; timeout.tv_nsec = 0; if (fdptr->read_cb != read_cb) { if (read_cb) EV_SET(&event, fd, EVFILT_READ, EV_ADD, 0, 0, fdptr); else EV_SET(&event, fd, EVFILT_READ, EV_DELETE, 0, 0, fdptr); if (kevent(cupsd_kqueue_fd, &event, 1, NULL, 0, &timeout)) { cupsdLogMessage(CUPSD_LOG_EMERG, "kevent() returned %s", strerror(errno)); return (0); } } if (fdptr->write_cb != write_cb) { if (write_cb) EV_SET(&event, fd, EVFILT_WRITE, EV_ADD, 0, 0, fdptr); else EV_SET(&event, fd, EVFILT_WRITE, EV_DELETE, 0, 0, fdptr); if (kevent(cupsd_kqueue_fd, &event, 1, NULL, 0, &timeout)) { cupsdLogMessage(CUPSD_LOG_EMERG, "kevent() returned %s", strerror(errno)); return (0); } } } #elif defined(HAVE_POLL) # ifdef HAVE_EPOLL if (cupsd_epoll_fd >= 0) { struct epoll_event event; /* Event data */ event.events = 0; if (read_cb) event.events |= EPOLLIN; if (write_cb) event.events |= EPOLLOUT; event.data.ptr = fdptr; if (epoll_ctl(cupsd_epoll_fd, added ? EPOLL_CTL_ADD : EPOLL_CTL_MOD, fd, &event)) { close(cupsd_epoll_fd); cupsd_epoll_fd = -1; cupsd_update_pollfds = 1; } } else # endif /* HAVE_EPOLL */ cupsd_update_pollfds = 1; #else /* select() */ /* * Add or remove the file descriptor in the input and output sets * for select()... */ if (read_cb) FD_SET(fd, &cupsd_global_input); else { FD_CLR(fd, &cupsd_global_input); FD_CLR(fd, &cupsd_current_input); } if (write_cb) FD_SET(fd, &cupsd_global_output); else { FD_CLR(fd, &cupsd_global_output); FD_CLR(fd, &cupsd_current_output); } #endif /* HAVE_KQUEUE */ /* * Save the (new) read and write callbacks... */ fdptr->read_cb = read_cb; fdptr->write_cb = write_cb; fdptr->data = data; return (1); } /* * 'cupsdDoSelect()' - Do a select-like operation. */ int /* O - Number of files or -1 on error */ cupsdDoSelect(long timeout) /* I - Timeout in seconds */ { int nfds; /* Number of file descriptors */ _cupsd_fd_t *fdptr; /* Current file descriptor */ #ifdef HAVE_KQUEUE int i; /* Looping var */ struct kevent *event; /* Current event */ struct timespec ktimeout; /* kevent() timeout */ cupsd_in_select = 1; if (timeout >= 0 && timeout < 86400) { ktimeout.tv_sec = timeout; ktimeout.tv_nsec = 0; nfds = kevent(cupsd_kqueue_fd, NULL, 0, cupsd_kqueue_events, MaxFDs, &ktimeout); } else nfds = kevent(cupsd_kqueue_fd, NULL, 0, cupsd_kqueue_events, MaxFDs, NULL); cupsd_kqueue_changes = 0; for (i = nfds, event = cupsd_kqueue_events; i > 0; i --, event ++) { fdptr = (_cupsd_fd_t *)event->udata; if (cupsArrayFind(cupsd_inactive_fds, fdptr)) continue; retain_fd(fdptr); if (fdptr->read_cb && event->filter == EVFILT_READ) (*(fdptr->read_cb))(fdptr->data); if (fdptr->use > 1 && fdptr->write_cb && event->filter == EVFILT_WRITE && !cupsArrayFind(cupsd_inactive_fds, fdptr)) (*(fdptr->write_cb))(fdptr->data); release_fd(fdptr); } #elif defined(HAVE_POLL) struct pollfd *pfd; /* Current pollfd structure */ int count; /* Number of file descriptors */ # ifdef HAVE_EPOLL cupsd_in_select = 1; if (cupsd_epoll_fd >= 0) { int i; /* Looping var */ struct epoll_event *event; /* Current event */ if (timeout >= 0 && timeout < 86400) nfds = epoll_wait(cupsd_epoll_fd, cupsd_epoll_events, MaxFDs, timeout * 1000); else nfds = epoll_wait(cupsd_epoll_fd, cupsd_epoll_events, MaxFDs, -1); if (nfds < 0 && errno != EINTR) { close(cupsd_epoll_fd); cupsd_epoll_fd = -1; } else { for (i = nfds, event = cupsd_epoll_events; i > 0; i --, event ++) { fdptr = (_cupsd_fd_t *)event->data.ptr; if (cupsArrayFind(cupsd_inactive_fds, fdptr)) continue; retain_fd(fdptr); if (fdptr->read_cb && (event->events & (EPOLLIN | EPOLLERR | EPOLLHUP))) (*(fdptr->read_cb))(fdptr->data); if (fdptr->use > 1 && fdptr->write_cb && (event->events & (EPOLLOUT | EPOLLERR | EPOLLHUP)) && !cupsArrayFind(cupsd_inactive_fds, fdptr)) (*(fdptr->write_cb))(fdptr->data); release_fd(fdptr); } goto release_inactive; } } # endif /* HAVE_EPOLL */ count = cupsArrayCount(cupsd_fds); if (cupsd_update_pollfds) { /* * Update the cupsd_pollfds array to match the current FD array... */ cupsd_update_pollfds = 0; /* * (Re)allocate memory as needed... */ if (count > cupsd_alloc_pollfds) { int allocfds = count + 16; if (cupsd_pollfds) pfd = realloc(cupsd_pollfds, (size_t)allocfds * sizeof(struct pollfd)); else pfd = malloc((size_t)allocfds * sizeof(struct pollfd)); if (!pfd) { cupsdLogMessage(CUPSD_LOG_EMERG, "Unable to allocate %d bytes for polling.", (int)((size_t)allocfds * sizeof(struct pollfd))); return (-1); } cupsd_pollfds = pfd; cupsd_alloc_pollfds = allocfds; } /* * Rebuild the array... */ for (fdptr = (_cupsd_fd_t *)cupsArrayFirst(cupsd_fds), pfd = cupsd_pollfds; fdptr; fdptr = (_cupsd_fd_t *)cupsArrayNext(cupsd_fds), pfd ++) { pfd->fd = fdptr->fd; pfd->events = 0; if (fdptr->read_cb) pfd->events |= POLLIN; if (fdptr->write_cb) pfd->events |= POLLOUT; } } if (timeout >= 0 && timeout < 86400) nfds = poll(cupsd_pollfds, (nfds_t)count, timeout * 1000); else nfds = poll(cupsd_pollfds, (nfds_t)count, -1); if (nfds > 0) { /* * Do callbacks for each file descriptor... */ for (pfd = cupsd_pollfds; count > 0; pfd ++, count --) { if (!pfd->revents) continue; if ((fdptr = find_fd(pfd->fd)) == NULL) continue; retain_fd(fdptr); if (fdptr->read_cb && (pfd->revents & (POLLIN | POLLERR | POLLHUP))) (*(fdptr->read_cb))(fdptr->data); if (fdptr->use > 1 && fdptr->write_cb && (pfd->revents & (POLLOUT | POLLERR | POLLHUP))) (*(fdptr->write_cb))(fdptr->data); release_fd(fdptr); } } #else /* select() */ struct timeval stimeout; /* Timeout for select() */ int maxfd; /* Maximum file descriptor */ /* * Figure out the highest file descriptor number... */ if ((fdptr = (_cupsd_fd_t *)cupsArrayLast(cupsd_fds)) == NULL) maxfd = 1; else maxfd = fdptr->fd + 1; /* * Do the select()... */ cupsd_current_input = cupsd_global_input; cupsd_current_output = cupsd_global_output; if (timeout >= 0 && timeout < 86400) { stimeout.tv_sec = timeout; stimeout.tv_usec = 0; nfds = select(maxfd, &cupsd_current_input, &cupsd_current_output, NULL, &stimeout); } else nfds = select(maxfd, &cupsd_current_input, &cupsd_current_output, NULL, NULL); if (nfds > 0) { /* * Do callbacks for each file descriptor... */ for (fdptr = (_cupsd_fd_t *)cupsArrayFirst(cupsd_fds); fdptr; fdptr = (_cupsd_fd_t *)cupsArrayNext(cupsd_fds)) { retain_fd(fdptr); if (fdptr->read_cb && FD_ISSET(fdptr->fd, &cupsd_current_input)) (*(fdptr->read_cb))(fdptr->data); if (fdptr->use > 1 && fdptr->write_cb && FD_ISSET(fdptr->fd, &cupsd_current_output)) (*(fdptr->write_cb))(fdptr->data); release_fd(fdptr); } } #endif /* HAVE_KQUEUE */ #if defined(HAVE_EPOLL) || defined(HAVE_KQUEUE) /* * Release all inactive file descriptors... */ # ifndef HAVE_KQUEUE release_inactive: # endif /* !HAVE_KQUEUE */ cupsd_in_select = 0; for (fdptr = (_cupsd_fd_t *)cupsArrayFirst(cupsd_inactive_fds); fdptr; fdptr = (_cupsd_fd_t *)cupsArrayNext(cupsd_inactive_fds)) { cupsArrayRemove(cupsd_inactive_fds, fdptr); release_fd(fdptr); } #endif /* HAVE_EPOLL || HAVE_KQUEUE */ /* * Return the number of file descriptors handled... */ return (nfds); } #ifdef CUPSD_IS_SELECTING /* * 'cupsdIsSelecting()' - Determine whether we are monitoring a file * descriptor. */ int /* O - 1 if selecting, 0 otherwise */ cupsdIsSelecting(int fd) /* I - File descriptor */ { return (find_fd(fd) != NULL); } #endif /* CUPSD_IS_SELECTING */ /* * 'cupsdRemoveSelect()' - Remove a file descriptor from the list. */ void cupsdRemoveSelect(int fd) /* I - File descriptor */ { _cupsd_fd_t *fdptr; /* File descriptor record */ #ifdef HAVE_EPOLL struct epoll_event event; /* Event data */ #elif defined(HAVE_KQUEUE) struct kevent event; /* Event data */ struct timespec timeout; /* Timeout value */ #elif defined(HAVE_POLL) /* No variables for poll() */ #endif /* HAVE_EPOLL */ /* * Range check input... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdRemoveSelect(fd=%d)", fd); if (fd < 0) return; /* * Find the file descriptor... */ if ((fdptr = find_fd(fd)) == NULL) return; #ifdef HAVE_EPOLL if (epoll_ctl(cupsd_epoll_fd, EPOLL_CTL_DEL, fd, &event)) { close(cupsd_epoll_fd); cupsd_epoll_fd = -1; cupsd_update_pollfds = 1; } #elif defined(HAVE_KQUEUE) timeout.tv_sec = 0; timeout.tv_nsec = 0; if (fdptr->read_cb) { EV_SET(&event, fd, EVFILT_READ, EV_DELETE, 0, 0, fdptr); if (kevent(cupsd_kqueue_fd, &event, 1, NULL, 0, &timeout)) { cupsdLogMessage(CUPSD_LOG_EMERG, "kevent() returned %s", strerror(errno)); goto cleanup; } } if (fdptr->write_cb) { EV_SET(&event, fd, EVFILT_WRITE, EV_DELETE, 0, 0, fdptr); if (kevent(cupsd_kqueue_fd, &event, 1, NULL, 0, &timeout)) { cupsdLogMessage(CUPSD_LOG_EMERG, "kevent() returned %s", strerror(errno)); goto cleanup; } } #elif defined(HAVE_POLL) /* * Update the pollfds array... */ cupsd_update_pollfds = 1; #else /* select() */ FD_CLR(fd, &cupsd_global_input); FD_CLR(fd, &cupsd_global_output); FD_CLR(fd, &cupsd_current_input); FD_CLR(fd, &cupsd_current_output); #endif /* HAVE_EPOLL */ #ifdef HAVE_KQUEUE cleanup: #endif /* HAVE_KQUEUE */ /* * Remove the file descriptor from the active array and add to the * inactive array (or release, if we don't need the inactive array...) */ cupsArrayRemove(cupsd_fds, fdptr); #if defined(HAVE_EPOLL) || defined(HAVE_KQUEUE) if (cupsd_in_select) cupsArrayAdd(cupsd_inactive_fds, fdptr); else #endif /* HAVE_EPOLL || HAVE_KQUEUE */ release_fd(fdptr); } /* * 'cupsdStartSelect()' - Initialize the file polling engine. */ void cupsdStartSelect(void) { cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdStartSelect()"); cupsd_fds = cupsArrayNew((cups_array_func_t)compare_fds, NULL); #if defined(HAVE_EPOLL) || defined(HAVE_KQUEUE) cupsd_inactive_fds = cupsArrayNew((cups_array_func_t)compare_fds, NULL); #endif /* HAVE_EPOLL || HAVE_KQUEUE */ #ifdef HAVE_EPOLL cupsd_epoll_fd = epoll_create(MaxFDs); cupsd_epoll_events = calloc((size_t)MaxFDs, sizeof(struct epoll_event)); cupsd_update_pollfds = 0; #elif defined(HAVE_KQUEUE) cupsd_kqueue_fd = kqueue(); cupsd_kqueue_changes = 0; cupsd_kqueue_events = calloc((size_t)MaxFDs, sizeof(struct kevent)); #elif defined(HAVE_POLL) cupsd_update_pollfds = 0; #else /* select() */ FD_ZERO(&cupsd_global_input); FD_ZERO(&cupsd_global_output); #endif /* HAVE_EPOLL */ } /* * 'cupsdStopSelect()' - Shutdown the file polling engine. */ void cupsdStopSelect(void) { _cupsd_fd_t *fdptr; /* Current file descriptor */ cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdStopSelect()"); for (fdptr = (_cupsd_fd_t *)cupsArrayFirst(cupsd_fds); fdptr; fdptr = (_cupsd_fd_t *)cupsArrayNext(cupsd_fds)) free(fdptr); cupsArrayDelete(cupsd_fds); cupsd_fds = NULL; #if defined(HAVE_EPOLL) || defined(HAVE_KQUEUE) cupsArrayDelete(cupsd_inactive_fds); cupsd_inactive_fds = NULL; #endif /* HAVE_EPOLL || HAVE_KQUEUE */ #ifdef HAVE_KQUEUE if (cupsd_kqueue_events) { free(cupsd_kqueue_events); cupsd_kqueue_events = NULL; } if (cupsd_kqueue_fd >= 0) { close(cupsd_kqueue_fd); cupsd_kqueue_fd = -1; } cupsd_kqueue_changes = 0; #elif defined(HAVE_POLL) # ifdef HAVE_EPOLL if (cupsd_epoll_events) { free(cupsd_epoll_events); cupsd_epoll_events = NULL; } if (cupsd_epoll_fd >= 0) { close(cupsd_epoll_fd); cupsd_epoll_fd = -1; } # endif /* HAVE_EPOLL */ if (cupsd_pollfds) { free(cupsd_pollfds); cupsd_pollfds = NULL; cupsd_alloc_pollfds = 0; } cupsd_update_pollfds = 0; #else /* select() */ FD_ZERO(&cupsd_global_input); FD_ZERO(&cupsd_global_output); #endif /* HAVE_EPOLL */ } /* * 'compare_fds()' - Compare file descriptors. */ static int /* O - Result of comparison */ compare_fds(_cupsd_fd_t *a, /* I - First file descriptor */ _cupsd_fd_t *b) /* I - Second file descriptor */ { return (a->fd - b->fd); } /* * 'find_fd()' - Find an existing file descriptor record. */ static _cupsd_fd_t * /* O - FD record pointer or NULL */ find_fd(int fd) /* I - File descriptor */ { _cupsd_fd_t *fdptr, /* Matching record (if any) */ key; /* Search key */ cupsArraySave(cupsd_fds); key.fd = fd; fdptr = (_cupsd_fd_t *)cupsArrayFind(cupsd_fds, &key); cupsArrayRestore(cupsd_fds); return (fdptr); } cups-2.2.7/scheduler/server.c000664 000765 000024 00000005724 13255074424 016613 0ustar00msweetstaff000000 000000 /* * Server start/stop routines for the CUPS scheduler. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include "cupsd.h" #include #ifdef HAVE_NOTIFY_H # include #endif /* HAVE_NOTIFY_H */ /* * Local globals... */ static int started = 0; /* Did we start the server already? */ /* * 'cupsdStartServer()' - Start the server. */ void cupsdStartServer(void) { /* * Start color management (as needed)... */ cupsdStartColor(); /* * Create the default security profile... */ DefaultProfile = cupsdCreateProfile(0, 1); /* * Startup all the networking stuff... */ cupsdStartListening(); cupsdStartBrowsing(); /* * Create a pipe for CGI processes... */ if (cupsdOpenPipe(CGIPipes)) cupsdLogMessage(CUPSD_LOG_ERROR, "cupsdStartServer: Unable to create pipes for CGI status!"); else { CGIStatusBuffer = cupsdStatBufNew(CGIPipes[0], "[CGI]"); cupsdAddSelect(CGIPipes[0], (cupsd_selfunc_t)cupsdUpdateCGI, NULL, NULL); } /* * Mark that the server has started and printers and jobs may be changed... */ LastEvent = CUPSD_EVENT_PRINTER_CHANGED | CUPSD_EVENT_JOB_STATE_CHANGED | CUPSD_EVENT_SERVER_STARTED; started = 1; cupsdSetBusyState(0); } /* * 'cupsdStopServer()' - Stop the server. */ void cupsdStopServer(void) { if (!started) return; /* * Stop color management (as needed)... */ cupsdStopColor(); /* * Close all network clients... */ cupsdCloseAllClients(); cupsdStopListening(); cupsdStopBrowsing(); cupsdStopAllNotifiers(); cupsdDeleteAllCerts(); if (Clients) { cupsArrayDelete(Clients); Clients = NULL; } /* * Close the pipe for CGI processes... */ if (CGIPipes[0] >= 0) { cupsdRemoveSelect(CGIPipes[0]); cupsdStatBufDelete(CGIStatusBuffer); close(CGIPipes[1]); CGIPipes[0] = -1; CGIPipes[1] = -1; } /* * Close all log files... */ if (AccessFile != NULL) { if (AccessFile != LogStderr) cupsFileClose(AccessFile); AccessFile = NULL; } if (ErrorFile != NULL) { if (ErrorFile != LogStderr) cupsFileClose(ErrorFile); ErrorFile = NULL; } if (PageFile != NULL) { if (PageFile != LogStderr) cupsFileClose(PageFile); PageFile = NULL; } /* * Delete the default security profile... */ cupsdDestroyProfile(DefaultProfile); DefaultProfile = NULL; /* * Write out any dirty files... */ if (DirtyFiles) cupsdCleanDirty(); started = 0; } cups-2.2.7/scheduler/statbuf.c000664 000765 000024 00000014537 13255074424 016757 0ustar00msweetstaff000000 000000 /* * Status buffer routines for the CUPS scheduler. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #include /* * 'cupsdStatBufDelete()' - Destroy a status buffer. */ void cupsdStatBufDelete(cupsd_statbuf_t *sb) /* I - Status buffer */ { /* * Range check input... */ if (!sb) return; /* * Close the status pipe and free memory used... */ close(sb->fd); free(sb); } /* * 'cupsdStatBufNew()' - Create a new status buffer. */ cupsd_statbuf_t * /* O - New status buffer */ cupsdStatBufNew(int fd, /* I - File descriptor of pipe */ const char *prefix, /* I - Printf-style prefix string */ ...) /* I - Additional args as needed */ { cupsd_statbuf_t *sb; /* New status buffer */ va_list ap; /* Argument list */ /* * Range check input... */ if (fd < 0) return (NULL); /* * Allocate the status buffer... */ if ((sb = calloc(1, sizeof(cupsd_statbuf_t))) != NULL) { /* * Assign the file descriptor... */ sb->fd = fd; /* * Format the prefix string, if any. This is usually "[Job 123]" * or "[Sub 123]", and so forth. */ if (prefix) { /* * Printf-style prefix string... */ va_start(ap, prefix); vsnprintf(sb->prefix, sizeof(sb->prefix), prefix, ap); va_end(ap); } else { /* * No prefix string... */ sb->prefix[0] = '\0'; } } return (sb); } /* * 'cupsdStatBufUpdate()' - Update the status buffer. */ char * /* O - Line from buffer, "", or NULL */ cupsdStatBufUpdate( cupsd_statbuf_t *sb, /* I - Status buffer */ int *loglevel, /* O - Log level */ char *line, /* I - Line buffer */ int linelen) /* I - Size of line buffer */ { int bytes; /* Number of bytes read */ char *lineptr, /* Pointer to end of line in buffer */ *message; /* Pointer to message text */ /* * Check if the buffer already contains a full line... */ if ((lineptr = strchr(sb->buffer, '\n')) == NULL) { /* * No, read more data... */ if ((bytes = read(sb->fd, sb->buffer + sb->bufused, (size_t)(CUPSD_SB_BUFFER_SIZE - sb->bufused - 1))) > 0) { sb->bufused += bytes; sb->buffer[sb->bufused] = '\0'; /* * Guard against a line longer than the max buffer size... */ if ((lineptr = strchr(sb->buffer, '\n')) == NULL && sb->bufused == (CUPSD_SB_BUFFER_SIZE - 1)) lineptr = sb->buffer + sb->bufused; } else if (bytes < 0 && errno == EINTR) { /* * Return an empty line if we are interrupted... */ *loglevel = CUPSD_LOG_NONE; line[0] = '\0'; return (line); } else { /* * End-of-file, so use the whole buffer... */ lineptr = sb->buffer + sb->bufused; *lineptr = '\0'; } /* * Final check for end-of-file... */ if (sb->bufused == 0 && bytes == 0) lineptr = NULL; } if (!lineptr) { /* * End of file... */ *loglevel = CUPSD_LOG_NONE; line[0] = '\0'; return (NULL); } /* * Terminate the line and process it... */ *lineptr++ = '\0'; /* * Figure out the logging level... */ if (!strncmp(sb->buffer, "EMERG:", 6)) { *loglevel = CUPSD_LOG_EMERG; message = sb->buffer + 6; } else if (!strncmp(sb->buffer, "ALERT:", 6)) { *loglevel = CUPSD_LOG_ALERT; message = sb->buffer + 6; } else if (!strncmp(sb->buffer, "CRIT:", 5)) { *loglevel = CUPSD_LOG_CRIT; message = sb->buffer + 5; } else if (!strncmp(sb->buffer, "ERROR:", 6)) { *loglevel = CUPSD_LOG_ERROR; message = sb->buffer + 6; } else if (!strncmp(sb->buffer, "WARNING:", 8)) { *loglevel = CUPSD_LOG_WARN; message = sb->buffer + 8; } else if (!strncmp(sb->buffer, "NOTICE:", 7)) { *loglevel = CUPSD_LOG_NOTICE; message = sb->buffer + 7; } else if (!strncmp(sb->buffer, "INFO:", 5)) { *loglevel = CUPSD_LOG_INFO; message = sb->buffer + 5; } else if (!strncmp(sb->buffer, "DEBUG:", 6)) { *loglevel = CUPSD_LOG_DEBUG; message = sb->buffer + 6; } else if (!strncmp(sb->buffer, "DEBUG2:", 7)) { *loglevel = CUPSD_LOG_DEBUG2; message = sb->buffer + 7; } else if (!strncmp(sb->buffer, "PAGE:", 5)) { *loglevel = CUPSD_LOG_PAGE; message = sb->buffer + 5; } else if (!strncmp(sb->buffer, "STATE:", 6)) { *loglevel = CUPSD_LOG_STATE; message = sb->buffer + 6; } else if (!strncmp(sb->buffer, "JOBSTATE:", 9)) { *loglevel = CUPSD_LOG_JOBSTATE; message = sb->buffer + 9; } else if (!strncmp(sb->buffer, "ATTR:", 5)) { *loglevel = CUPSD_LOG_ATTR; message = sb->buffer + 5; } else if (!strncmp(sb->buffer, "PPD:", 4)) { *loglevel = CUPSD_LOG_PPD; message = sb->buffer + 4; } else { *loglevel = CUPSD_LOG_DEBUG; message = sb->buffer; } /* * Skip leading whitespace in the message... */ while (isspace(*message & 255)) message ++; /* * Send it to the log file as needed... */ if (sb->prefix[0]) { if (*loglevel > CUPSD_LOG_NONE && (*loglevel != CUPSD_LOG_INFO || LogLevel >= CUPSD_LOG_DEBUG)) { /* * General status message; send it to the error_log file... */ if (message[0] == '[') cupsdLogMessage(*loglevel, "%s", message); else cupsdLogMessage(*loglevel, "%s %s", sb->prefix, message); } else if (*loglevel < CUPSD_LOG_NONE && LogLevel >= CUPSD_LOG_DEBUG) cupsdLogMessage(CUPSD_LOG_DEBUG2, "%s %s", sb->prefix, sb->buffer); } /* * Copy the message to the line buffer... */ strlcpy(line, message, (size_t)linelen); /* * Copy over the buffer data we've used up... */ if (lineptr < sb->buffer + sb->bufused) _cups_strcpy(sb->buffer, lineptr); sb->bufused -= lineptr - sb->buffer; if (sb->bufused < 0) sb->bufused = 0; return (line); } cups-2.2.7/scheduler/statbuf.h000664 000765 000024 00000002241 13255074424 016751 0ustar00msweetstaff000000 000000 /* * Status buffer definitions for the CUPS scheduler. * * Copyright 2007-2010 by Apple Inc. * Copyright 1997-2005 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Constants... */ #define CUPSD_SB_BUFFER_SIZE 2048 /* Bytes for job status buffer */ /* * Types and structures... */ typedef struct /**** Status buffer */ { int fd; /* File descriptor to read from */ char prefix[64]; /* Prefix for log messages */ int bufused; /* How much is used in buffer */ char buffer[CUPSD_SB_BUFFER_SIZE]; /* Buffer */ } cupsd_statbuf_t; /* * Prototypes... */ extern void cupsdStatBufDelete(cupsd_statbuf_t *sb); extern cupsd_statbuf_t *cupsdStatBufNew(int fd, const char *prefix, ...); extern char *cupsdStatBufUpdate(cupsd_statbuf_t *sb, int *loglevel, char *line, int linelen); cups-2.2.7/scheduler/subscriptions.c000664 000765 000024 00000116207 13255074424 020213 0ustar00msweetstaff000000 000000 /* * Subscription routines for the CUPS scheduler. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #ifdef HAVE_DBUS # include # ifdef HAVE_DBUS_MESSAGE_ITER_INIT_APPEND # define dbus_message_append_iter_init dbus_message_iter_init_append # define dbus_message_iter_append_string(i,v) dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &(v)) # define dbus_message_iter_append_uint32(i,v) dbus_message_iter_append_basic(i, DBUS_TYPE_UINT32, &(v)) # endif /* HAVE_DBUS_MESSAGE_ITER_INIT_APPEND */ #endif /* HAVE_DBUS */ /* * Local functions... */ static int cupsd_compare_subscriptions(cupsd_subscription_t *first, cupsd_subscription_t *second, void *unused); static void cupsd_delete_event(cupsd_event_t *event); #ifdef HAVE_DBUS static void cupsd_send_dbus(cupsd_eventmask_t event, cupsd_printer_t *dest, cupsd_job_t *job); #endif /* HAVE_DBUS */ static void cupsd_send_notification(cupsd_subscription_t *sub, cupsd_event_t *event); static void cupsd_start_notifier(cupsd_subscription_t *sub); static void cupsd_update_notifier(void); /* * 'cupsdAddEvent()' - Add an event to the global event cache. */ void cupsdAddEvent( cupsd_eventmask_t event, /* I - Event */ cupsd_printer_t *dest, /* I - Printer associated with event */ cupsd_job_t *job, /* I - Job associated with event */ const char *text, /* I - Notification text */ ...) /* I - Additional arguments as needed */ { va_list ap; /* Pointer to additional arguments */ char ftext[1024]; /* Formatted text buffer */ ipp_attribute_t *attr; /* Printer/job attribute */ cupsd_event_t *temp; /* New event pointer */ cupsd_subscription_t *sub; /* Current subscription */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdAddEvent(event=%s, dest=%p(%s), job=%p(%d), text=\"%s\", ...)", cupsdEventName(event), dest, dest ? dest->name : "", job, job ? job->id : 0, text); /* * Keep track of events with any OS-supplied notification mechanisms... */ LastEvent |= event; #ifdef HAVE_DBUS cupsd_send_dbus(event, dest, job); #endif /* HAVE_DBUS */ /* * Return if we aren't keeping events... */ if (MaxEvents <= 0) { cupsdLogMessage(CUPSD_LOG_WARN, "cupsdAddEvent: Discarding %s event since MaxEvents is %d!", cupsdEventName(event), MaxEvents); return; } /* * Then loop through the subscriptions and add the event to the corresponding * caches... */ for (temp = NULL, sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions); sub; sub = (cupsd_subscription_t *)cupsArrayNext(Subscriptions)) { /* * Check if this subscription requires this event... */ if ((sub->mask & event) != 0 && (sub->dest == dest || !sub->dest || sub->job == job)) { /* * Need this event, so create a new event record... */ if ((temp = (cupsd_event_t *)calloc(1, sizeof(cupsd_event_t))) == NULL) { cupsdLogMessage(CUPSD_LOG_CRIT, "Unable to allocate memory for event - %s", strerror(errno)); return; } temp->event = event; temp->time = time(NULL); temp->attrs = ippNew(); temp->job = job; if (dest) temp->dest = dest; else if (job) temp->dest = dest = cupsdFindPrinter(job->dest); /* * Add common event notification attributes... */ ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_CHARSET, "notify-charset", NULL, "utf-8"); ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_LANGUAGE, "notify-natural-language", NULL, "en-US"); ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "notify-subscription-id", sub->id); ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "notify-sequence-number", sub->next_event_id); ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "notify-subscribed-event", NULL, cupsdEventName(event)); if (sub->user_data_len > 0) ippAddOctetString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, "notify-user-data", sub->user_data, sub->user_data_len); ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "printer-up-time", time(NULL)); va_start(ap, text); vsnprintf(ftext, sizeof(ftext), text, ap); va_end(ap); ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_TEXT, "notify-text", NULL, ftext); if (dest) { /* * Add printer attributes... */ ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_URI, "notify-printer-uri", NULL, dest->uri); ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME, "printer-name", NULL, dest->name); ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM, "printer-state", dest->state); if (dest->num_reasons == 0) ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "printer-state-reasons", NULL, dest->state == IPP_PRINTER_STOPPED ? "paused" : "none"); else ippAddStrings(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "printer-state-reasons", dest->num_reasons, NULL, (const char * const *)dest->reasons); ippAddBoolean(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, "printer-is-accepting-jobs", (char)dest->accepting); } if (job) { /* * Add job attributes... */ ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "notify-job-id", job->id); ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM, "job-state", job->state_value); if ((attr = ippFindAttribute(job->attrs, "job-name", IPP_TAG_NAME)) != NULL) ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME, "job-name", NULL, attr->values[0].string.text); switch (job->state_value) { case IPP_JOB_PENDING : if (dest && dest->state == IPP_PRINTER_STOPPED) ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "printer-stopped"); else ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "none"); break; case IPP_JOB_HELD : if (ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD) != NULL || ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME) != NULL) ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "job-hold-until-specified"); else ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "job-incoming"); break; case IPP_JOB_PROCESSING : ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "job-printing"); break; case IPP_JOB_STOPPED : ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "job-stopped"); break; case IPP_JOB_CANCELED : ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "job-canceled-by-user"); break; case IPP_JOB_ABORTED : ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "aborted-by-system"); break; case IPP_JOB_COMPLETED : ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "job-state-reasons", NULL, "job-completed-successfully"); break; } ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "job-impressions-completed", job->sheets ? job->sheets->values[0].integer : 0); } /* * Send the notification for this subscription... */ cupsd_send_notification(sub, temp); } } if (temp) cupsdMarkDirty(CUPSD_DIRTY_SUBSCRIPTIONS); else cupsdLogMessage(CUPSD_LOG_DEBUG, "Discarding unused %s event...", cupsdEventName(event)); } /* * 'cupsdAddSubscription()' - Add a new subscription object. */ cupsd_subscription_t * /* O - New subscription object */ cupsdAddSubscription( unsigned mask, /* I - Event mask */ cupsd_printer_t *dest, /* I - Printer, if any */ cupsd_job_t *job, /* I - Job, if any */ const char *uri, /* I - notify-recipient-uri, if any */ int sub_id) /* I - notify-subscription-id or 0 */ { cupsd_subscription_t *temp; /* New subscription object */ cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdAddSubscription(mask=%x, dest=%p(%s), job=%p(%d), " "uri=\"%s\")", mask, dest, dest ? dest->name : "", job, job ? job->id : 0, uri ? uri : "(null)"); if (!Subscriptions) Subscriptions = cupsArrayNew((cups_array_func_t)cupsd_compare_subscriptions, NULL); if (!Subscriptions) { cupsdLogMessage(CUPSD_LOG_CRIT, "Unable to allocate memory for subscriptions - %s", strerror(errno)); return (NULL); } /* * Limit the number of subscriptions... */ if (MaxSubscriptions > 0 && cupsArrayCount(Subscriptions) >= MaxSubscriptions) { cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdAddSubscription: Reached MaxSubscriptions %d " "(count=%d)", MaxSubscriptions, cupsArrayCount(Subscriptions)); return (NULL); } if (MaxSubscriptionsPerJob > 0 && job) { int count; /* Number of job subscriptions */ for (temp = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions), count = 0; temp; temp = (cupsd_subscription_t *)cupsArrayNext(Subscriptions)) if (temp->job == job) count ++; if (count >= MaxSubscriptionsPerJob) { cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdAddSubscription: Reached MaxSubscriptionsPerJob %d " "for job #%d (count=%d)", MaxSubscriptionsPerJob, job->id, count); return (NULL); } } if (MaxSubscriptionsPerPrinter > 0 && dest) { int count; /* Number of printer subscriptions */ for (temp = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions), count = 0; temp; temp = (cupsd_subscription_t *)cupsArrayNext(Subscriptions)) if (temp->dest == dest) count ++; if (count >= MaxSubscriptionsPerPrinter) { cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdAddSubscription: Reached " "MaxSubscriptionsPerPrinter %d for %s (count=%d)", MaxSubscriptionsPerPrinter, dest->name, count); return (NULL); } } /* * Allocate memory for this subscription... */ if ((temp = calloc(1, sizeof(cupsd_subscription_t))) == NULL) { cupsdLogMessage(CUPSD_LOG_CRIT, "Unable to allocate memory for subscription object - %s", strerror(errno)); return (NULL); } /* * Fill in common data... */ if (sub_id) { temp->id = sub_id; if (sub_id >= NextSubscriptionId) NextSubscriptionId = sub_id + 1; } else { temp->id = NextSubscriptionId; NextSubscriptionId ++; } temp->mask = mask; temp->dest = dest; temp->job = job; temp->pipe = -1; temp->first_event_id = 1; temp->next_event_id = 1; cupsdSetString(&(temp->recipient), uri); /* * Add the subscription to the array... */ cupsArrayAdd(Subscriptions, temp); /* * For RSS subscriptions, run the notifier immediately... */ if (uri && !strncmp(uri, "rss:", 4)) cupsd_start_notifier(temp); return (temp); } /* * 'cupsdDeleteAllSubscriptions()' - Delete all subscriptions. */ void cupsdDeleteAllSubscriptions(void) { cupsd_subscription_t *sub; /* Subscription */ if (!Subscriptions) return; for (sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions); sub; sub = (cupsd_subscription_t *)cupsArrayNext(Subscriptions)) cupsdDeleteSubscription(sub, 0); cupsArrayDelete(Subscriptions); Subscriptions = NULL; } /* * 'cupsdDeleteSubscription()' - Delete a subscription object. */ void cupsdDeleteSubscription( cupsd_subscription_t *sub, /* I - Subscription object */ int update) /* I - 1 = update subscriptions.conf */ { /* * Close the pipe to the notifier as needed... */ if (sub->pipe >= 0) close(sub->pipe); /* * Remove subscription from array... */ cupsArrayRemove(Subscriptions, sub); /* * Free memory... */ cupsdClearString(&(sub->owner)); cupsdClearString(&(sub->recipient)); cupsArrayDelete(sub->events); free(sub); /* * Update the subscriptions as needed... */ if (update) cupsdMarkDirty(CUPSD_DIRTY_SUBSCRIPTIONS); } /* * 'cupsdEventName()' - Return a single event name. */ const char * /* O - Event name */ cupsdEventName( cupsd_eventmask_t event) /* I - Event value */ { switch (event) { default : return (NULL); case CUPSD_EVENT_PRINTER_RESTARTED : return ("printer-restarted"); case CUPSD_EVENT_PRINTER_SHUTDOWN : return ("printer-shutdown"); case CUPSD_EVENT_PRINTER_STOPPED : return ("printer-stopped"); case CUPSD_EVENT_PRINTER_FINISHINGS_CHANGED : return ("printer-finishings-changed"); case CUPSD_EVENT_PRINTER_MEDIA_CHANGED : return ("printer-media-changed"); case CUPSD_EVENT_PRINTER_ADDED : return ("printer-added"); case CUPSD_EVENT_PRINTER_DELETED : return ("printer-deleted"); case CUPSD_EVENT_PRINTER_MODIFIED : return ("printer-modified"); case CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED : return ("printer-queue-order-changed"); case CUPSD_EVENT_PRINTER_STATE : case CUPSD_EVENT_PRINTER_STATE_CHANGED : return ("printer-state-changed"); case CUPSD_EVENT_PRINTER_CONFIG : case CUPSD_EVENT_PRINTER_CONFIG_CHANGED : return ("printer-config-changed"); case CUPSD_EVENT_PRINTER_CHANGED : return ("printer-changed"); case CUPSD_EVENT_JOB_CREATED : return ("job-created"); case CUPSD_EVENT_JOB_COMPLETED : return ("job-completed"); case CUPSD_EVENT_JOB_STOPPED : return ("job-stopped"); case CUPSD_EVENT_JOB_CONFIG_CHANGED : return ("job-config-changed"); case CUPSD_EVENT_JOB_PROGRESS : return ("job-progress"); case CUPSD_EVENT_JOB_STATE : case CUPSD_EVENT_JOB_STATE_CHANGED : return ("job-state-changed"); case CUPSD_EVENT_SERVER_RESTARTED : return ("server-restarted"); case CUPSD_EVENT_SERVER_STARTED : return ("server-started"); case CUPSD_EVENT_SERVER_STOPPED : return ("server-stopped"); case CUPSD_EVENT_SERVER_AUDIT : return ("server-audit"); case CUPSD_EVENT_ALL : return ("all"); } } /* * 'cupsdEventValue()' - Return the event mask value for a name. */ cupsd_eventmask_t /* O - Event mask value */ cupsdEventValue(const char *name) /* I - Name of event */ { if (!strcmp(name, "all")) return (CUPSD_EVENT_ALL); else if (!strcmp(name, "printer-restarted")) return (CUPSD_EVENT_PRINTER_RESTARTED); else if (!strcmp(name, "printer-shutdown")) return (CUPSD_EVENT_PRINTER_SHUTDOWN); else if (!strcmp(name, "printer-stopped")) return (CUPSD_EVENT_PRINTER_STOPPED); else if (!strcmp(name, "printer-finishings-changed")) return (CUPSD_EVENT_PRINTER_FINISHINGS_CHANGED); else if (!strcmp(name, "printer-media-changed")) return (CUPSD_EVENT_PRINTER_MEDIA_CHANGED); else if (!strcmp(name, "printer-added")) return (CUPSD_EVENT_PRINTER_ADDED); else if (!strcmp(name, "printer-deleted")) return (CUPSD_EVENT_PRINTER_DELETED); else if (!strcmp(name, "printer-modified")) return (CUPSD_EVENT_PRINTER_MODIFIED); else if (!strcmp(name, "printer-queue-order-changed")) return (CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED); else if (!strcmp(name, "printer-state-changed")) return (CUPSD_EVENT_PRINTER_STATE_CHANGED); else if (!strcmp(name, "printer-config-changed")) return (CUPSD_EVENT_PRINTER_CONFIG_CHANGED); else if (!strcmp(name, "printer-changed")) return (CUPSD_EVENT_PRINTER_CHANGED); else if (!strcmp(name, "job-created")) return (CUPSD_EVENT_JOB_CREATED); else if (!strcmp(name, "job-completed")) return (CUPSD_EVENT_JOB_COMPLETED); else if (!strcmp(name, "job-stopped")) return (CUPSD_EVENT_JOB_STOPPED); else if (!strcmp(name, "job-config-changed")) return (CUPSD_EVENT_JOB_CONFIG_CHANGED); else if (!strcmp(name, "job-progress")) return (CUPSD_EVENT_JOB_PROGRESS); else if (!strcmp(name, "job-state-changed")) return (CUPSD_EVENT_JOB_STATE_CHANGED); else if (!strcmp(name, "server-restarted")) return (CUPSD_EVENT_SERVER_RESTARTED); else if (!strcmp(name, "server-started")) return (CUPSD_EVENT_SERVER_STARTED); else if (!strcmp(name, "server-stopped")) return (CUPSD_EVENT_SERVER_STOPPED); else if (!strcmp(name, "server-audit")) return (CUPSD_EVENT_SERVER_AUDIT); else return (CUPSD_EVENT_NONE); } /* * 'cupsdExpireSubscriptions()' - Expire old subscription objects. */ void cupsdExpireSubscriptions( cupsd_printer_t *dest, /* I - Printer, if any */ cupsd_job_t *job) /* I - Job, if any */ { cupsd_subscription_t *sub; /* Current subscription */ int update; /* Update subscriptions.conf? */ time_t curtime; /* Current time */ curtime = time(NULL); update = 0; cupsdLogMessage(CUPSD_LOG_INFO, "Expiring subscriptions..."); for (sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions); sub; sub = (cupsd_subscription_t *)cupsArrayNext(Subscriptions)) if ((!sub->job && !dest && sub->expire && sub->expire <= curtime) || (dest && sub->dest == dest) || (job && sub->job == job)) { cupsdLogMessage(CUPSD_LOG_INFO, "Subscription %d has expired...", sub->id); cupsdDeleteSubscription(sub, 0); update = 1; } if (update) cupsdMarkDirty(CUPSD_DIRTY_SUBSCRIPTIONS); } /* * 'cupsdFindSubscription()' - Find a subscription by ID. */ cupsd_subscription_t * /* O - Subscription object */ cupsdFindSubscription(int id) /* I - Subscription ID */ { cupsd_subscription_t sub; /* Subscription template */ sub.id = id; return ((cupsd_subscription_t *)cupsArrayFind(Subscriptions, &sub)); } /* * 'cupsdLoadAllSubscriptions()' - Load all subscriptions from the .conf file. */ void cupsdLoadAllSubscriptions(void) { int i; /* Looping var */ cups_file_t *fp; /* subscriptions.conf file */ int linenum; /* Current line number */ char line[1024], /* Line from file */ *value, /* Pointer to value */ *valueptr; /* Pointer into value */ cupsd_subscription_t *sub; /* Current subscription */ int hex; /* Non-zero if reading hex data */ int delete_sub; /* Delete subscription? */ /* * Open the subscriptions.conf file... */ snprintf(line, sizeof(line), "%s/subscriptions.conf", ServerRoot); if ((fp = cupsdOpenConfFile(line)) == NULL) return; /* * Read all of the lines from the file... */ linenum = 0; sub = NULL; delete_sub = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { if (!_cups_strcasecmp(line, "NextSubscriptionId") && value) { /* * NextSubscriptionId NNN */ i = atoi(value); if (i >= NextSubscriptionId && i > 0) NextSubscriptionId = i; } else if (!_cups_strcasecmp(line, " */ if (!sub && value && isdigit(value[0] & 255)) { sub = cupsdAddSubscription(CUPSD_EVENT_NONE, NULL, NULL, NULL, atoi(value)); } else { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); break; } } else if (!_cups_strcasecmp(line, "")) { if (!sub) { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); break; } if (delete_sub) cupsdDeleteSubscription(sub, 0); sub = NULL; delete_sub = 0; } else if (!sub) { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); } else if (!_cups_strcasecmp(line, "Events")) { /* * Events name * Events name name name ... */ if (!value) { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); break; } while (*value) { /* * Separate event names... */ for (valueptr = value; !isspace(*valueptr) && *valueptr; valueptr ++); while (isspace(*valueptr & 255)) *valueptr++ = '\0'; /* * See if the name exists... */ if ((sub->mask |= cupsdEventValue(value)) == CUPSD_EVENT_NONE) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown event name \'%s\' on line %d of subscriptions.conf.", value, linenum); break; } value = valueptr; } } else if (!_cups_strcasecmp(line, "Owner")) { /* * Owner */ if (value) cupsdSetString(&sub->owner, value); else { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); break; } } else if (!_cups_strcasecmp(line, "Recipient")) { /* * Recipient uri */ if (value) cupsdSetString(&sub->recipient, value); else { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); break; } } else if (!_cups_strcasecmp(line, "JobId")) { /* * JobId # */ if (value && isdigit(*value & 255)) { if ((sub->job = cupsdFindJob(atoi(value))) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Job %s not found on line %d of subscriptions.conf.", value, linenum); delete_sub = 1; } } else { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); break; } } else if (!_cups_strcasecmp(line, "PrinterName")) { /* * PrinterName name */ if (value) { if ((sub->dest = cupsdFindDest(value)) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, "Printer \'%s\' not found on line %d of subscriptions.conf.", value, linenum); delete_sub = 1; } } else { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); break; } } else if (!_cups_strcasecmp(line, "UserData")) { /* * UserData encoded-string */ if (value) { for (i = 0, valueptr = value, hex = 0; i < 63 && *valueptr; i ++) { if (*valueptr == '<' && !hex) { hex = 1; valueptr ++; } if (hex) { if (isxdigit(valueptr[0]) && isxdigit(valueptr[1])) { if (isdigit(valueptr[0])) sub->user_data[i] = (unsigned char)((valueptr[0] - '0') << 4); else sub->user_data[i] = (unsigned char)((tolower(valueptr[0]) - 'a' + 10) << 4); if (isdigit(valueptr[1])) sub->user_data[i] |= valueptr[1] - '0'; else sub->user_data[i] |= tolower(valueptr[1]) - 'a' + 10; valueptr += 2; if (*valueptr == '>') { hex = 0; valueptr ++; } } else break; } else sub->user_data[i] = (unsigned char)*valueptr++; } if (*valueptr) { cupsdLogMessage(CUPSD_LOG_ERROR, "Bad UserData \'%s\' on line %d of subscriptions.conf.", value, linenum); } else sub->user_data_len = i; } else { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); break; } } else if (!_cups_strcasecmp(line, "LeaseDuration")) { /* * LeaseDuration # */ if (value && isdigit(*value & 255)) { sub->lease = atoi(value); sub->expire = sub->lease ? time(NULL) + sub->lease : 0; } else { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); break; } } else if (!_cups_strcasecmp(line, "Interval")) { /* * Interval # */ if (value && isdigit(*value & 255)) sub->interval = atoi(value); else { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); break; } } else if (!_cups_strcasecmp(line, "ExpirationTime")) { /* * ExpirationTime # */ if (value && isdigit(*value & 255)) sub->expire = atoi(value); else { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); break; } } else if (!_cups_strcasecmp(line, "NextEventId")) { /* * NextEventId # */ if (value && isdigit(*value & 255)) sub->next_event_id = sub->first_event_id = atoi(value); else { cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of subscriptions.conf.", linenum); break; } } else { /* * Something else we don't understand... */ cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown configuration directive %s on line %d of subscriptions.conf.", line, linenum); } } cupsFileClose(fp); } /* * 'cupsdSaveAllSubscriptions()' - Save all subscriptions to the .conf file. */ void cupsdSaveAllSubscriptions(void) { int i; /* Looping var */ cups_file_t *fp; /* subscriptions.conf file */ char filename[1024], /* subscriptions.conf filename */ temp[1024]; /* Temporary string */ cupsd_subscription_t *sub; /* Current subscription */ time_t curtime; /* Current time */ struct tm *curdate; /* Current date */ unsigned mask; /* Current event mask */ const char *name; /* Current event name */ int hex; /* Non-zero if we are writing hex data */ /* * Create the subscriptions.conf file... */ snprintf(filename, sizeof(filename), "%s/subscriptions.conf", ServerRoot); if ((fp = cupsdCreateConfFile(filename, ConfigFilePerm)) == NULL) return; cupsdLogMessage(CUPSD_LOG_INFO, "Saving subscriptions.conf..."); /* * Write a small header to the file... */ curtime = time(NULL); curdate = localtime(&curtime); strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate); cupsFilePuts(fp, "# Subscription configuration file for " CUPS_SVERSION "\n"); cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp); cupsFilePrintf(fp, "NextSubscriptionId %d\n", NextSubscriptionId); /* * Write every subscription known to the system... */ for (sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions); sub; sub = (cupsd_subscription_t *)cupsArrayNext(Subscriptions)) { cupsFilePrintf(fp, "\n", sub->id); if ((name = cupsdEventName((cupsd_eventmask_t)sub->mask)) != NULL) { /* * Simple event list... */ cupsFilePrintf(fp, "Events %s\n", name); } else { /* * Complex event list... */ cupsFilePuts(fp, "Events"); for (mask = 1; mask < CUPSD_EVENT_ALL; mask <<= 1) if (sub->mask & mask) cupsFilePrintf(fp, " %s", cupsdEventName((cupsd_eventmask_t)mask)); cupsFilePuts(fp, "\n"); } if (sub->owner) cupsFilePrintf(fp, "Owner %s\n", sub->owner); if (sub->recipient) cupsFilePrintf(fp, "Recipient %s\n", sub->recipient); if (sub->job) cupsFilePrintf(fp, "JobId %d\n", sub->job->id); if (sub->dest) cupsFilePrintf(fp, "PrinterName %s\n", sub->dest->name); if (sub->user_data_len > 0) { cupsFilePuts(fp, "UserData "); for (i = 0, hex = 0; i < sub->user_data_len; i ++) { if (sub->user_data[i] < ' ' || sub->user_data[i] > 0x7f || sub->user_data[i] == '<') { if (!hex) { cupsFilePrintf(fp, "<%02X", sub->user_data[i]); hex = 1; } else cupsFilePrintf(fp, "%02X", sub->user_data[i]); } else { if (hex) { cupsFilePrintf(fp, ">%c", sub->user_data[i]); hex = 0; } else cupsFilePutChar(fp, sub->user_data[i]); } } if (hex) cupsFilePuts(fp, ">\n"); else cupsFilePutChar(fp, '\n'); } cupsFilePrintf(fp, "LeaseDuration %d\n", sub->lease); cupsFilePrintf(fp, "Interval %d\n", sub->interval); cupsFilePrintf(fp, "ExpirationTime %ld\n", (long)sub->expire); cupsFilePrintf(fp, "NextEventId %d\n", sub->next_event_id); cupsFilePuts(fp, "\n"); } cupsdCloseCreatedConfFile(fp, filename); } /* * 'cupsdStopAllNotifiers()' - Stop all notifier processes. */ void cupsdStopAllNotifiers(void) { cupsd_subscription_t *sub; /* Current subscription */ /* * See if we have started any notifiers... */ if (!NotifierStatusBuffer) return; /* * Yes, kill any processes that are left... */ for (sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions); sub; sub = (cupsd_subscription_t *)cupsArrayNext(Subscriptions)) if (sub->pid) { cupsdEndProcess(sub->pid, 0); close(sub->pipe); sub->pipe = -1; } /* * Close the status pipes... */ if (NotifierPipes[0] >= 0) { cupsdRemoveSelect(NotifierPipes[0]); cupsdStatBufDelete(NotifierStatusBuffer); close(NotifierPipes[0]); close(NotifierPipes[1]); NotifierPipes[0] = -1; NotifierPipes[1] = -1; NotifierStatusBuffer = NULL; } } /* * 'cupsd_compare_subscriptions()' - Compare two subscriptions. */ static int /* O - Result of comparison */ cupsd_compare_subscriptions( cupsd_subscription_t *first, /* I - First subscription object */ cupsd_subscription_t *second, /* I - Second subscription object */ void *unused) /* I - Unused user data pointer */ { (void)unused; return (first->id - second->id); } /* * 'cupsd_delete_event()' - Delete a single event... * * Oldest events must be deleted first, otherwise the subscription cache * flushing code will not work properly. */ static void cupsd_delete_event(cupsd_event_t *event)/* I - Event to delete */ { /* * Free memory... */ ippDelete(event->attrs); free(event); } #ifdef HAVE_DBUS /* * 'cupsd_send_dbus()' - Send a DBUS notification... */ static void cupsd_send_dbus(cupsd_eventmask_t event,/* I - Event to send */ cupsd_printer_t *dest,/* I - Destination, if any */ cupsd_job_t *job) /* I - Job, if any */ { DBusError error; /* Error, if any */ DBusMessage *message; /* Message to send */ DBusMessageIter iter; /* Iterator for message data */ const char *what; /* What to send */ static DBusConnection *con = NULL; /* Connection to DBUS server */ /* * Figure out what to send, if anything... */ if (event & CUPSD_EVENT_PRINTER_ADDED) what = "PrinterAdded"; else if (event & CUPSD_EVENT_PRINTER_DELETED) what = "PrinterRemoved"; else if (event & CUPSD_EVENT_PRINTER_CHANGED) what = "QueueChanged"; else if (event & CUPSD_EVENT_JOB_CREATED) what = "JobQueuedLocal"; else if ((event & CUPSD_EVENT_JOB_STATE) && job && job->state_value == IPP_JOB_PROCESSING) what = "JobStartedLocal"; else return; /* * Verify connection to DBUS server... */ if (con && !dbus_connection_get_is_connected(con)) { dbus_connection_unref(con); con = NULL; } if (!con) { dbus_error_init(&error); con = dbus_bus_get(getuid() ? DBUS_BUS_SESSION : DBUS_BUS_SYSTEM, &error); if (!con) { dbus_error_free(&error); return; } } /* * Create and send the new message... */ message = dbus_message_new_signal("/com/redhat/PrinterSpooler", "com.redhat.PrinterSpooler", what); dbus_message_append_iter_init(message, &iter); if (dest) dbus_message_iter_append_string(&iter, dest->name); if (job) { dbus_message_iter_append_uint32(&iter, job->id); dbus_message_iter_append_string(&iter, job->username); } dbus_connection_send(con, message, NULL); dbus_connection_flush(con); dbus_message_unref(message); } #endif /* HAVE_DBUS */ /* * 'cupsd_send_notification()' - Send a notification for the specified event. */ static void cupsd_send_notification( cupsd_subscription_t *sub, /* I - Subscription object */ cupsd_event_t *event) /* I - Event to send */ { ipp_state_t state; /* IPP event state */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsd_send_notification(sub=%p(%d), event=%p(%s))", sub, sub->id, event, cupsdEventName(event->event)); /* * Allocate the events array as needed... */ if (!sub->events) { sub->events = cupsArrayNew3((cups_array_func_t)NULL, NULL, (cups_ahash_func_t)NULL, 0, (cups_acopy_func_t)NULL, (cups_afree_func_t)cupsd_delete_event); if (!sub->events) { cupsdLogMessage(CUPSD_LOG_CRIT, "Unable to allocate memory for subscription #%d!", sub->id); return; } } /* * Purge an old event as needed... */ if (cupsArrayCount(sub->events) >= MaxEvents) { /* * Purge the oldest event in the cache... */ cupsArrayRemove(sub->events, cupsArrayFirst(sub->events)); sub->first_event_id ++; } /* * Add the event to the subscription. Since the events array is * always MaxEvents in length, and since we will have already * removed an event from the subscription cache if we hit the * event cache limit, we don't need to check for overflow here... */ cupsArrayAdd(sub->events, event); /* * Deliver the event... */ if (sub->recipient) { for (;;) { if (sub->pipe < 0) cupsd_start_notifier(sub); cupsdLogMessage(CUPSD_LOG_DEBUG2, "sub->pipe=%d", sub->pipe); if (sub->pipe < 0) break; event->attrs->state = IPP_IDLE; while ((state = ippWriteFile(sub->pipe, event->attrs)) != IPP_DATA) if (state == IPP_ERROR) break; if (state == IPP_ERROR) { if (errno == EPIPE) { /* * Notifier died, try restarting it... */ cupsdLogMessage(CUPSD_LOG_WARN, "Notifier for subscription %d (%s) went away, " "retrying!", sub->id, sub->recipient); cupsdEndProcess(sub->pid, 0); close(sub->pipe); sub->pipe = -1; continue; } cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to send event for subscription %d (%s)!", sub->id, sub->recipient); } /* * If we get this far, break out of the loop... */ break; } } /* * Bump the event sequence number... */ sub->next_event_id ++; } /* * 'cupsd_start_notifier()' - Start a notifier subprocess... */ static void cupsd_start_notifier( cupsd_subscription_t *sub) /* I - Subscription object */ { int pid; /* Notifier process ID */ int fds[2]; /* Pipe file descriptors */ char *argv[4], /* Command-line arguments */ *envp[MAX_ENV], /* Environment variables */ user_data[128], /* Base-64 encoded user data */ scheme[256], /* notify-recipient-uri scheme */ *ptr, /* Pointer into scheme */ command[1024]; /* Notifier command */ /* * Extract the scheme name from the recipient URI and point to the * notifier program... */ strlcpy(scheme, sub->recipient, sizeof(scheme)); if ((ptr = strchr(scheme, ':')) != NULL) *ptr = '\0'; snprintf(command, sizeof(command), "%s/notifier/%s", ServerBin, scheme); /* * Base-64 encode the user data... */ httpEncode64_2(user_data, sizeof(user_data), (char *)sub->user_data, sub->user_data_len); /* * Setup the argument array... */ argv[0] = command; argv[1] = sub->recipient; argv[2] = user_data; argv[3] = NULL; /* * Setup the environment... */ cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0]))); /* * Create pipes as needed... */ if (!NotifierStatusBuffer) { /* * Create the status pipe... */ if (cupsdOpenPipe(NotifierPipes)) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create pipes for notifier status - %s", strerror(errno)); return; } NotifierStatusBuffer = cupsdStatBufNew(NotifierPipes[0], "[Notifier]"); cupsdAddSelect(NotifierPipes[0], (cupsd_selfunc_t)cupsd_update_notifier, NULL, NULL); } if (cupsdOpenPipe(fds)) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create pipes for notifier %s - %s", scheme, strerror(errno)); return; } /* * Make sure the delivery pipe is non-blocking... */ fcntl(fds[1], F_SETFL, fcntl(fds[1], F_GETFL) | O_NONBLOCK); /* * Create the notifier process... */ if (cupsdStartProcess(command, argv, envp, fds[0], -1, NotifierPipes[1], -1, -1, 0, DefaultProfile, NULL, &pid) < 0) { /* * Error - can't fork! */ cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to fork for notifier %s - %s", scheme, strerror(errno)); cupsdClosePipe(fds); } else { /* * Fork successful - return the PID... */ cupsdLogMessage(CUPSD_LOG_DEBUG, "Notifier %s started - PID = %d", scheme, pid); sub->pid = pid; sub->pipe = fds[1]; sub->status = 0; close(fds[0]); } } /* * 'cupsd_update_notifier()' - Read messages from notifiers. */ void cupsd_update_notifier(void) { char message[1024]; /* Pointer to message text */ int loglevel; /* Log level for message */ while (cupsdStatBufUpdate(NotifierStatusBuffer, &loglevel, message, sizeof(message))) { if (loglevel == CUPSD_LOG_INFO) cupsdLogMessage(CUPSD_LOG_INFO, "%s", message); if (!strchr(NotifierStatusBuffer->buffer, '\n')) break; } } cups-2.2.7/scheduler/subscriptions.h000664 000765 000024 00000013546 13255074424 020222 0ustar00msweetstaff000000 000000 /* * Subscription definitions for the CUPS scheduler. * * Copyright 2007-2010 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Event mask enumeration... */ typedef enum { /* Individual printer events... */ CUPSD_EVENT_PRINTER_STATE = 0x0001, /* Sent after generic printer state change */ CUPSD_EVENT_PRINTER_RESTARTED = 0x0002, /* Sent after printer restarted */ CUPSD_EVENT_PRINTER_SHUTDOWN = 0x0004,/* Sent after printer shutdown */ CUPSD_EVENT_PRINTER_STOPPED = 0x0008, /* Sent after printer stopped */ CUPSD_EVENT_PRINTER_CONFIG = 0x0010, /* Send after add/modify changes attrs */ CUPSD_EVENT_PRINTER_FINISHINGS_CHANGED = 0x0020, /* Sent after finishings-supported changed */ CUPSD_EVENT_PRINTER_MEDIA_CHANGED = 0x0040, /* Sent after media-supported changed */ CUPSD_EVENT_PRINTER_ADDED = 0x0080, /* Sent after printer added */ CUPSD_EVENT_PRINTER_DELETED = 0x0100, /* Sent after printer deleted */ CUPSD_EVENT_PRINTER_MODIFIED = 0x0200,/* Sent after printer modified */ CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED = 0x0400, /* Sent when the order of jobs is changed */ /* Convenience printer event groupings... */ CUPSD_EVENT_PRINTER_STATE_CHANGED = 0x000f, /* STATE + RESTARTED + SHUTDOWN + STOPPED */ CUPSD_EVENT_PRINTER_CONFIG_CHANGED = 0x0070, /* CONFIG + FINISHINGS_CHANGED + MEDIA_CHANGED */ CUPSD_EVENT_PRINTER_CHANGED = 0x07ff, /* All of the above */ /* Individual job events... */ CUPSD_EVENT_JOB_STATE = 0x0800, /* Any state change */ CUPSD_EVENT_JOB_CREATED = 0x1000, /* Send after job is created */ CUPSD_EVENT_JOB_COMPLETED = 0x2000, /* Sent after job is completed */ CUPSD_EVENT_JOB_STOPPED = 0x4000, /* Sent after job is stopped */ CUPSD_EVENT_JOB_CONFIG_CHANGED = 0x8000, /* Sent after set-job-attributes */ CUPSD_EVENT_JOB_PROGRESS = 0x10000, /* Sent for each page */ /* Convenience job event grouping... */ CUPSD_EVENT_JOB_STATE_CHANGED = 0x7800, /* STATE + CREATED + COMPLETED + STOPPED */ /* Server events... */ CUPSD_EVENT_SERVER_RESTARTED = 0x20000,/* Sent after server restarts */ CUPSD_EVENT_SERVER_STARTED = 0x40000, /* Sent when server first starts */ CUPSD_EVENT_SERVER_STOPPED = 0x80000, /* Sent when server is stopped */ CUPSD_EVENT_SERVER_AUDIT = 0x100000, /* Security-related stuff */ /* Everything and nothing... */ CUPSD_EVENT_NONE = 0, /* Nothing */ CUPSD_EVENT_ALL = 0x1fffff /* Everything */ } cupsd_eventmask_t; /* * Notiification support structures... */ typedef struct cupsd_event_s /**** Event structure ****/ { cupsd_eventmask_t event; /* Event */ time_t time; /* Time of event */ ipp_t *attrs; /* Notification message */ cupsd_printer_t *dest; /* Associated printer, if any */ cupsd_job_t *job; /* Associated job, if any */ } cupsd_event_t; typedef struct cupsd_subscription_s /**** Subscription structure ****/ { int id; /* subscription-id */ unsigned mask; /* Event mask */ char *owner; /* notify-subscriber-user-name */ char *recipient; /* notify-recipient-uri, if applicable */ unsigned char user_data[64]; /* notify-user-data */ int user_data_len; /* Length of notify-user-data */ int lease; /* notify-lease-duration */ int interval; /* notify-time-interval */ cupsd_printer_t *dest; /* notify-printer-uri, if any */ cupsd_job_t *job; /* notify-job-id, if any */ int pid; /* Process ID of notifier */ int pipe; /* Pipe to notifier */ int status; /* Exit status of notifier */ time_t last; /* Time of last notification */ time_t expire; /* Lease expiration time */ int first_event_id, /* First event-id in cache */ next_event_id; /* Next event-id to use */ cups_array_t *events; /* Cached events */ } cupsd_subscription_t; /* * Globals... */ VAR int MaxSubscriptions VALUE(100), /* Overall subscription limit */ MaxSubscriptionsPerJob VALUE(0), /* Per-job subscription limit */ MaxSubscriptionsPerPrinter VALUE(0), /* Per-printer subscription limit */ MaxSubscriptionsPerUser VALUE(0), /* Per-user subscription limit */ NextSubscriptionId VALUE(1), /* Next subscription ID */ DefaultLeaseDuration VALUE(86400), /* Default notify-lease-duration */ MaxLeaseDuration VALUE(0); /* Maximum notify-lease-duration */ VAR cups_array_t *Subscriptions VALUE(NULL); /* Active subscriptions */ VAR int MaxEvents VALUE(100); /* Maximum number of events */ VAR unsigned LastEvent VALUE(0); /* Last event(s) processed */ VAR int NotifierPipes[2] VALUE2(-1, -1); /* Pipes for notifier error/debug output */ VAR cupsd_statbuf_t *NotifierStatusBuffer VALUE(NULL); /* Status buffer for pipes */ /* * Prototypes... */ extern void cupsdAddEvent(cupsd_eventmask_t event, cupsd_printer_t *dest, cupsd_job_t *job, const char *text, ...); extern cupsd_subscription_t * cupsdAddSubscription(unsigned mask, cupsd_printer_t *dest, cupsd_job_t *job, const char *uri, int sub_id); extern void cupsdDeleteAllSubscriptions(void); extern void cupsdDeleteSubscription(cupsd_subscription_t *sub, int update); extern const char * cupsdEventName(cupsd_eventmask_t event); extern cupsd_eventmask_t cupsdEventValue(const char *name); extern cupsd_subscription_t * cupsdFindSubscription(int id); extern void cupsdExpireSubscriptions(cupsd_printer_t *dest, cupsd_job_t *job); extern void cupsdLoadAllSubscriptions(void); extern void cupsdSaveAllSubscriptions(void); extern void cupsdStopAllNotifiers(void); cups-2.2.7/scheduler/sysman.c000664 000765 000024 00000070756 13255074424 016626 0ustar00msweetstaff000000 000000 /* * System management functions for the CUPS scheduler. * * Copyright 2007-2017 by Apple Inc. * Copyright 2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cupsd.h" #ifdef __APPLE__ # include # include #endif /* __APPLE__ */ /* * The system management functions cover disk and power management which * are primarily used for portable computers. * * Disk management involves delaying the write of certain configuration * and state files to minimize the number of times the disk has to spin * up or flash to be written to. * * Power management support is currently only implemented on macOS, but * essentially we use four functions to let the OS know when it is OK to * put the system to sleep, typically when we are not in the middle of * printing a job. And on macOS we can also "sleep print" - basically the * system only wakes up long enough to service network requests and process * print jobs. */ /* * 'cupsdCleanDirty()' - Write dirty config and state files. */ void cupsdCleanDirty(void) { if (DirtyFiles & CUPSD_DIRTY_PRINTERS) cupsdSaveAllPrinters(); if (DirtyFiles & CUPSD_DIRTY_CLASSES) cupsdSaveAllClasses(); if (DirtyFiles & CUPSD_DIRTY_PRINTCAP) cupsdWritePrintcap(); if (DirtyFiles & CUPSD_DIRTY_JOBS) { cupsd_job_t *job; /* Current job */ cupsdSaveAllJobs(); for (job = (cupsd_job_t *)cupsArrayFirst(Jobs); job; job = (cupsd_job_t *)cupsArrayNext(Jobs)) if (job->dirty) cupsdSaveJob(job); } if (DirtyFiles & CUPSD_DIRTY_SUBSCRIPTIONS) cupsdSaveAllSubscriptions(); DirtyFiles = CUPSD_DIRTY_NONE; DirtyCleanTime = 0; cupsdSetBusyState(0); } /* * 'cupsdMarkDirty()' - Mark config or state files as needing a write. */ void cupsdMarkDirty(int what) /* I - What file(s) are dirty? */ { cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdMarkDirty(%c%c%c%c%c)", (what & CUPSD_DIRTY_PRINTERS) ? 'P' : '-', (what & CUPSD_DIRTY_CLASSES) ? 'C' : '-', (what & CUPSD_DIRTY_PRINTCAP) ? 'p' : '-', (what & CUPSD_DIRTY_JOBS) ? 'J' : '-', (what & CUPSD_DIRTY_SUBSCRIPTIONS) ? 'S' : '-'); if (what == CUPSD_DIRTY_PRINTCAP && !Printcap) return; DirtyFiles |= what; if (!DirtyCleanTime) DirtyCleanTime = time(NULL) + DirtyCleanInterval; cupsdSetBusyState(0); } /* * 'cupsdSetBusyState()' - Let the system know when we are busy doing something. */ void cupsdSetBusyState(int working) /* I - Doing significant work? */ { int i; /* Looping var */ cupsd_job_t *job; /* Current job */ cupsd_printer_t *p; /* Current printer */ int newbusy; /* New busy state */ static int busy = 0; /* Current busy state */ static const char * const busy_text[] = { /* Text for busy states */ "Not busy", "Dirty files", "Printing jobs", "Printing jobs and dirty files", "Active clients", "Active clients and dirty files", "Active clients and printing jobs", "Active clients, printing jobs, and dirty files" }; #ifdef __APPLE__ static int tran = 0; /* Current busy transaction */ static IOPMAssertionID keep_awake = 0;/* Keep the system awake while printing */ #endif /* __APPLE__ */ /* * Figure out how busy we are... */ newbusy = (DirtyCleanTime ? 1 : 0) | ((working || cupsArrayCount(ActiveClients) > 0) ? 4 : 0); for (job = (cupsd_job_t *)cupsArrayFirst(PrintingJobs); job; job = (cupsd_job_t *)cupsArrayNext(PrintingJobs)) { if ((p = job->printer) != NULL) { for (i = 0; i < p->num_reasons; i ++) if (!strcmp(p->reasons[i], "connecting-to-device")) break; if (!p->num_reasons || i >= p->num_reasons) break; } } if (job) newbusy |= 2; cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdSetBusyState: newbusy=\"%s\", busy=\"%s\"", busy_text[newbusy], busy_text[busy]); /* * Manage state changes... */ if (newbusy != busy) { busy = newbusy; #ifdef __APPLE__ if (busy && !tran) { xpc_transaction_begin(); tran = 1; } else if (!busy && tran) { xpc_transaction_end(); tran = 0; } #endif /* __APPLE__ */ } #ifdef __APPLE__ if (cupsArrayCount(PrintingJobs) > 0 && !keep_awake) { cupsdLogMessage(CUPSD_LOG_DEBUG, "Asserting NetworkClientActive."); IOPMAssertionCreateWithName(kIOPMAssertNetworkClientActive, kIOPMAssertionLevelOn, CFSTR("org.cups.cupsd"), &keep_awake); } else if (cupsArrayCount(PrintingJobs) == 0 && keep_awake) { cupsdLogMessage(CUPSD_LOG_DEBUG, "Releasing power assertion."); IOPMAssertionRelease(keep_awake); keep_awake = 0; } #endif /* __APPLE__ */ } #ifdef __APPLE__ /* * This is the Apple-specific system event code. It works by creating * a worker thread that waits for events from the OS and relays them * to the main thread via a traditional pipe. */ /* * Include MacOS-specific headers... */ # include # include # include # include # include # include # include /* * Constants... */ # define SYSEVENT_CANSLEEP 0x1 /* Decide whether to allow sleep or not */ # define SYSEVENT_WILLSLEEP 0x2 /* Computer will go to sleep */ # define SYSEVENT_WOKE 0x4 /* Computer woke from sleep */ # define SYSEVENT_NETCHANGED 0x8 /* Network changed */ # define SYSEVENT_NAMECHANGED 0x10 /* Computer name changed */ /* * Structures... */ typedef struct cupsd_sysevent_s /*** System event data ****/ { unsigned char event; /* Event bit field */ io_connect_t powerKernelPort; /* Power context data */ long powerNotificationID; /* Power event data */ } cupsd_sysevent_t; typedef struct cupsd_thread_data_s /*** Thread context data ****/ { cupsd_sysevent_t sysevent; /* System event */ CFRunLoopTimerRef timerRef; /* Timer to delay some change * * notifications */ } cupsd_thread_data_t; /* * Local globals... */ static pthread_t SysEventThread = NULL; /* Thread to host a runloop */ static pthread_mutex_t SysEventThreadMutex = { 0 }; /* Coordinates access to shared gloabals */ static pthread_cond_t SysEventThreadCond = { 0 }; /* Thread initialization complete condition */ static CFRunLoopRef SysEventRunloop = NULL; /* The runloop. Access must be protected! */ static CFStringRef ComputerNameKey = NULL, /* Computer name key */ BTMMKey = NULL, /* Back to My Mac key */ NetworkGlobalKeyIPv4 = NULL, /* Network global IPv4 key */ NetworkGlobalKeyIPv6 = NULL, /* Network global IPv6 key */ NetworkGlobalKeyDNS = NULL, /* Network global DNS key */ HostNamesKey = NULL, /* Host name key */ NetworkInterfaceKeyIPv4 = NULL, /* Netowrk interface key */ NetworkInterfaceKeyIPv6 = NULL; /* Netowrk interface key */ static cupsd_sysevent_t LastSysEvent; /* Last system event (for delayed sleep) */ static int NameChanged = 0;/* Did we get a 'name changed' event during sleep? */ static int PSToken = 0; /* Power source notifications */ /* * Local functions... */ static void *sysEventThreadEntry(void); static void sysEventPowerNotifier(void *context, io_service_t service, natural_t messageType, void *messageArgument); static void sysEventConfigurationNotifier(SCDynamicStoreRef store, CFArrayRef changedKeys, void *context); static void sysEventTimerNotifier(CFRunLoopTimerRef timer, void *context); static void sysUpdate(void); static void sysUpdateNames(void); /* * 'cupsdAllowSleep()' - Tell the OS it is now OK to sleep. */ void cupsdAllowSleep(void) { cupsdCleanDirty(); cupsdLogMessage(CUPSD_LOG_DEBUG, "Allowing system sleep."); IOAllowPowerChange(LastSysEvent.powerKernelPort, LastSysEvent.powerNotificationID); } /* * 'cupsdStartSystemMonitor()' - Start monitoring for system change. */ void cupsdStartSystemMonitor(void) { int flags; /* fcntl flags on pipe */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartSystemMonitor()"); if (cupsdOpenPipe(SysEventPipes)) { cupsdLogMessage(CUPSD_LOG_ERROR, "System event monitor pipe() failed - %s!", strerror(errno)); return; } cupsdAddSelect(SysEventPipes[0], (cupsd_selfunc_t)sysUpdate, NULL, NULL); /* * Set non-blocking mode on the descriptor we will be receiving notification * events on. */ flags = fcntl(SysEventPipes[0], F_GETFL, 0); fcntl(SysEventPipes[0], F_SETFL, flags | O_NONBLOCK); /* * Start the thread that runs the runloop... */ pthread_mutex_init(&SysEventThreadMutex, NULL); pthread_cond_init(&SysEventThreadCond, NULL); pthread_create(&SysEventThread, NULL, (void *(*)(void *))sysEventThreadEntry, NULL); /* * Monitor for power source changes via dispatch queue... */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartSystemMonitor: IOPSGetTimeRemainingEstimate=%f", IOPSGetTimeRemainingEstimate()); ACPower = IOPSGetTimeRemainingEstimate() == kIOPSTimeRemainingUnlimited; notify_register_dispatch(kIOPSNotifyPowerSource, &PSToken, dispatch_get_main_queue(), ^(int t) { (void)t; ACPower = IOPSGetTimeRemainingEstimate() == kIOPSTimeRemainingUnlimited; }); } /* * 'cupsdStopSystemMonitor()' - Stop monitoring for system change. */ void cupsdStopSystemMonitor(void) { CFRunLoopRef rl; /* The event handler runloop */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStopSystemMonitor()"); if (SysEventThread) { /* * Make sure the thread has completed it's initialization and * stored it's runloop reference in the shared global. */ pthread_mutex_lock(&SysEventThreadMutex); if (!SysEventRunloop) pthread_cond_wait(&SysEventThreadCond, &SysEventThreadMutex); rl = SysEventRunloop; SysEventRunloop = NULL; pthread_mutex_unlock(&SysEventThreadMutex); if (rl) CFRunLoopStop(rl); pthread_join(SysEventThread, NULL); pthread_mutex_destroy(&SysEventThreadMutex); pthread_cond_destroy(&SysEventThreadCond); } if (SysEventPipes[0] >= 0) { cupsdRemoveSelect(SysEventPipes[0]); cupsdClosePipe(SysEventPipes); } if (PSToken != 0) { notify_cancel(PSToken); PSToken = 0; } } /* * 'sysEventThreadEntry()' - A thread to receive power and computer name * change notifications. */ static void * /* O - Return status/value */ sysEventThreadEntry(void) { io_object_t powerNotifierObj; /* Power notifier object */ IONotificationPortRef powerNotifierPort; /* Power notifier port */ SCDynamicStoreRef store = NULL;/* System Config dynamic store */ CFRunLoopSourceRef powerRLS = NULL,/* Power runloop source */ storeRLS = NULL;/* System Config runloop source */ CFStringRef key[6], /* System Config keys */ pattern[2]; /* System Config patterns */ CFArrayRef keys = NULL, /* System Config key array*/ patterns = NULL;/* System Config pattern array */ SCDynamicStoreContext storeContext; /* Dynamic store context */ CFRunLoopTimerContext timerContext; /* Timer context */ cupsd_thread_data_t threadData; /* Thread context data for the * * runloop notifiers */ /* * Register for power state change notifications */ bzero(&threadData, sizeof(threadData)); threadData.sysevent.powerKernelPort = IORegisterForSystemPower(&threadData, &powerNotifierPort, sysEventPowerNotifier, &powerNotifierObj); if (threadData.sysevent.powerKernelPort) { powerRLS = IONotificationPortGetRunLoopSource(powerNotifierPort); CFRunLoopAddSource(CFRunLoopGetCurrent(), powerRLS, kCFRunLoopDefaultMode); } else DEBUG_puts("sysEventThreadEntry: error registering for system power " "notifications"); /* * Register for system configuration change notifications */ bzero(&storeContext, sizeof(storeContext)); storeContext.info = &threadData; store = SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("cupsd"), sysEventConfigurationNotifier, &storeContext); if (!ComputerNameKey) ComputerNameKey = SCDynamicStoreKeyCreateComputerName(kCFAllocatorDefault); if (!BTMMKey) BTMMKey = SCDynamicStoreKeyCreate(kCFAllocatorDefault, CFSTR("Setup:/Network/BackToMyMac")); if (!NetworkGlobalKeyIPv4) NetworkGlobalKeyIPv4 = SCDynamicStoreKeyCreateNetworkGlobalEntity(kCFAllocatorDefault, kSCDynamicStoreDomainState, kSCEntNetIPv4); if (!NetworkGlobalKeyIPv6) NetworkGlobalKeyIPv6 = SCDynamicStoreKeyCreateNetworkGlobalEntity(kCFAllocatorDefault, kSCDynamicStoreDomainState, kSCEntNetIPv6); if (!NetworkGlobalKeyDNS) NetworkGlobalKeyDNS = SCDynamicStoreKeyCreateNetworkGlobalEntity(kCFAllocatorDefault, kSCDynamicStoreDomainState, kSCEntNetDNS); if (!HostNamesKey) HostNamesKey = SCDynamicStoreKeyCreateHostNames(kCFAllocatorDefault); if (!NetworkInterfaceKeyIPv4) NetworkInterfaceKeyIPv4 = SCDynamicStoreKeyCreateNetworkInterfaceEntity(kCFAllocatorDefault, kSCDynamicStoreDomainState, kSCCompAnyRegex, kSCEntNetIPv4); if (!NetworkInterfaceKeyIPv6) NetworkInterfaceKeyIPv6 = SCDynamicStoreKeyCreateNetworkInterfaceEntity(kCFAllocatorDefault, kSCDynamicStoreDomainState, kSCCompAnyRegex, kSCEntNetIPv6); if (store && ComputerNameKey && HostNamesKey && NetworkGlobalKeyIPv4 && NetworkGlobalKeyIPv6 && NetworkGlobalKeyDNS && NetworkInterfaceKeyIPv4 && NetworkInterfaceKeyIPv6) { key[0] = ComputerNameKey; key[1] = BTMMKey; key[2] = NetworkGlobalKeyIPv4; key[3] = NetworkGlobalKeyIPv6; key[4] = NetworkGlobalKeyDNS; key[5] = HostNamesKey; pattern[0] = NetworkInterfaceKeyIPv4; pattern[1] = NetworkInterfaceKeyIPv6; keys = CFArrayCreate(kCFAllocatorDefault, (const void **)key, sizeof(key) / sizeof(key[0]), &kCFTypeArrayCallBacks); patterns = CFArrayCreate(kCFAllocatorDefault, (const void **)pattern, sizeof(pattern) / sizeof(pattern[0]), &kCFTypeArrayCallBacks); if (keys && patterns && SCDynamicStoreSetNotificationKeys(store, keys, patterns)) { if ((storeRLS = SCDynamicStoreCreateRunLoopSource(kCFAllocatorDefault, store, 0)) != NULL) { CFRunLoopAddSource(CFRunLoopGetCurrent(), storeRLS, kCFRunLoopDefaultMode); } else DEBUG_printf(("sysEventThreadEntry: SCDynamicStoreCreateRunLoopSource " "failed: %s\n", SCErrorString(SCError()))); } else DEBUG_printf(("sysEventThreadEntry: SCDynamicStoreSetNotificationKeys " "failed: %s\n", SCErrorString(SCError()))); } else DEBUG_printf(("sysEventThreadEntry: SCDynamicStoreCreate failed: %s\n", SCErrorString(SCError()))); if (keys) CFRelease(keys); if (patterns) CFRelease(patterns); /* * Set up a timer to delay the wake change notifications. * * The initial time is set a decade or so into the future, we'll adjust * this later. */ bzero(&timerContext, sizeof(timerContext)); timerContext.info = &threadData; threadData.timerRef = CFRunLoopTimerCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + (86400L * 365L * 10L), 86400L * 365L * 10L, 0, 0, sysEventTimerNotifier, &timerContext); CFRunLoopAddTimer(CFRunLoopGetCurrent(), threadData.timerRef, kCFRunLoopDefaultMode); /* * Store our runloop in a global so the main thread can use it to stop us. */ pthread_mutex_lock(&SysEventThreadMutex); SysEventRunloop = CFRunLoopGetCurrent(); pthread_cond_signal(&SysEventThreadCond); pthread_mutex_unlock(&SysEventThreadMutex); /* * Disappear into the runloop until it's stopped by the main thread. */ CFRunLoopRun(); /* * Clean up before exiting. */ if (threadData.timerRef) { CFRunLoopRemoveTimer(CFRunLoopGetCurrent(), threadData.timerRef, kCFRunLoopDefaultMode); CFRelease(threadData.timerRef); } if (threadData.sysevent.powerKernelPort) { CFRunLoopRemoveSource(CFRunLoopGetCurrent(), powerRLS, kCFRunLoopDefaultMode); IODeregisterForSystemPower(&powerNotifierObj); IOServiceClose(threadData.sysevent.powerKernelPort); IONotificationPortDestroy(powerNotifierPort); } if (storeRLS) { CFRunLoopRemoveSource(CFRunLoopGetCurrent(), storeRLS, kCFRunLoopDefaultMode); CFRunLoopSourceInvalidate(storeRLS); CFRelease(storeRLS); } if (store) CFRelease(store); pthread_exit(NULL); } /* * 'sysEventPowerNotifier()' - Handle power notification events. */ static void sysEventPowerNotifier( void *context, /* I - Thread context data */ io_service_t service, /* I - Unused service info */ natural_t messageType, /* I - Type of message */ void *messageArgument) /* I - Message data */ { int sendit = 1; /* Send event to main thread? * * (0 = no, 1 = yes, 2 = delayed */ cupsd_thread_data_t *threadData; /* Thread context data */ threadData = (cupsd_thread_data_t *)context; (void)service; /* anti-compiler-warning-code */ switch (messageType) { case kIOMessageCanSystemPowerOff : case kIOMessageCanSystemSleep : threadData->sysevent.event |= SYSEVENT_CANSLEEP; break; case kIOMessageSystemWillRestart : case kIOMessageSystemWillPowerOff : case kIOMessageSystemWillSleep : threadData->sysevent.event |= SYSEVENT_WILLSLEEP; threadData->sysevent.event &= ~SYSEVENT_WOKE; break; case kIOMessageSystemHasPoweredOn : /* * Because powered on is followed by a net-changed event, delay * before sending it. */ sendit = 2; threadData->sysevent.event |= SYSEVENT_WOKE; break; case kIOMessageSystemWillNotPowerOff : case kIOMessageSystemWillNotSleep : # ifdef kIOMessageSystemWillPowerOn case kIOMessageSystemWillPowerOn : # endif /* kIOMessageSystemWillPowerOn */ default: sendit = 0; break; } switch (messageType) { case kIOMessageCanSystemPowerOff : cupsdLogMessage(CUPSD_LOG_DEBUG, "Got kIOMessageCanSystemPowerOff message."); break; case kIOMessageCanSystemSleep : cupsdLogMessage(CUPSD_LOG_DEBUG, "Got kIOMessageCannSystemSleep message."); break; case kIOMessageSystemWillRestart : cupsdLogMessage(CUPSD_LOG_DEBUG, "Got kIOMessageSystemWillRestart message."); break; case kIOMessageSystemWillPowerOff : cupsdLogMessage(CUPSD_LOG_DEBUG, "Got kIOMessageSystemWillPowerOff message."); break; case kIOMessageSystemWillSleep : cupsdLogMessage(CUPSD_LOG_DEBUG, "Got kIOMessageSystemWillSleep message."); break; case kIOMessageSystemHasPoweredOn : cupsdLogMessage(CUPSD_LOG_DEBUG, "Got kIOMessageSystemHasPoweredOn message."); break; case kIOMessageSystemWillNotPowerOff : cupsdLogMessage(CUPSD_LOG_DEBUG, "Got kIOMessageSystemWillNotPowerOff message."); break; case kIOMessageSystemWillNotSleep : cupsdLogMessage(CUPSD_LOG_DEBUG, "Got kIOMessageSystemWillNotSleep message."); break; # ifdef kIOMessageSystemWillPowerOn case kIOMessageSystemWillPowerOn : cupsdLogMessage(CUPSD_LOG_DEBUG, "Got kIOMessageSystemWillPowerOn message."); break; # endif /* kIOMessageSystemWillPowerOn */ default: cupsdLogMessage(CUPSD_LOG_DEBUG, "Got unknown power message %d.", (int)messageType); break; } if (sendit == 0) IOAllowPowerChange(threadData->sysevent.powerKernelPort, (long)messageArgument); else { threadData->sysevent.powerNotificationID = (long)messageArgument; if (sendit == 1) { /* * Send the event to the main thread now. */ write(SysEventPipes[1], &threadData->sysevent, sizeof(threadData->sysevent)); threadData->sysevent.event = 0; } else { /* * Send the event to the main thread after 1 to 2 seconds. */ CFRunLoopTimerSetNextFireDate(threadData->timerRef, CFAbsoluteTimeGetCurrent() + 2); } } } /* * 'sysEventConfigurationNotifier()' - Network configuration change notification * callback. */ static void sysEventConfigurationNotifier( SCDynamicStoreRef store, /* I - System data (unused) */ CFArrayRef changedKeys, /* I - Changed data */ void *context) /* I - Thread context data */ { cupsd_thread_data_t *threadData; /* Thread context data */ threadData = (cupsd_thread_data_t *)context; (void)store; /* anti-compiler-warning-code */ CFRange range = CFRangeMake(0, CFArrayGetCount(changedKeys)); if (CFArrayContainsValue(changedKeys, range, ComputerNameKey) || CFArrayContainsValue(changedKeys, range, BTMMKey)) threadData->sysevent.event |= SYSEVENT_NAMECHANGED; else { threadData->sysevent.event |= SYSEVENT_NETCHANGED; /* * Indicate the network interface list needs updating... */ NetIFUpdate = 1; } /* * Because we registered for several different kinds of change notifications * this callback usually gets called several times in a row. We use a timer to * de-bounce these so we only end up generating one event for the main thread. */ CFRunLoopTimerSetNextFireDate(threadData->timerRef, CFAbsoluteTimeGetCurrent() + 5); } /* * 'sysEventTimerNotifier()' - Handle delayed event notifications. */ static void sysEventTimerNotifier( CFRunLoopTimerRef timer, /* I - Timer information */ void *context) /* I - Thread context data */ { cupsd_thread_data_t *threadData; /* Thread context data */ (void)timer; threadData = (cupsd_thread_data_t *)context; /* * If an event is still pending send it to the main thread. */ if (threadData->sysevent.event) { write(SysEventPipes[1], &threadData->sysevent, sizeof(threadData->sysevent)); threadData->sysevent.event = 0; } } /* * 'sysUpdate()' - Update the current system state. */ static void sysUpdate(void) { int i; /* Looping var */ cupsd_sysevent_t sysevent; /* The system event */ cupsd_printer_t *p; /* Printer information */ /* * Drain the event pipe... */ while (read((int)SysEventPipes[0], &sysevent, sizeof(sysevent)) == sizeof(sysevent)) { if (sysevent.event & SYSEVENT_CANSLEEP) { /* * If there are active printers that don't have the connecting-to-device * or cups-waiting-for-job-completed printer-state-reason then cancel the * sleep request, i.e., these reasons indicate a job that is not actively * doing anything... */ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) { if (p->job) { for (i = 0; i < p->num_reasons; i ++) if (!strcmp(p->reasons[i], "connecting-to-device") || !strcmp(p->reasons[i], "cups-waiting-for-job-completed")) break; if (!p->num_reasons || i >= p->num_reasons) break; } } if (p) { cupsdLogMessage(CUPSD_LOG_INFO, "System sleep canceled because printer %s is active.", p->name); IOCancelPowerChange(sysevent.powerKernelPort, sysevent.powerNotificationID); } else { cupsdLogMessage(CUPSD_LOG_DEBUG, "System wants to sleep."); IOAllowPowerChange(sysevent.powerKernelPort, sysevent.powerNotificationID); } } if (sysevent.event & SYSEVENT_WILLSLEEP) { cupsdLogMessage(CUPSD_LOG_DEBUG, "System going to sleep."); Sleeping = 1; cupsdCleanDirty(); /* * If we have no printing jobs, allow the power change immediately. * Otherwise set the SleepJobs time to 10 seconds in the future when * we'll take more drastic measures... */ if (cupsArrayCount(PrintingJobs) == 0) { cupsdLogMessage(CUPSD_LOG_DEBUG, "Allowing system sleep."); IOAllowPowerChange(sysevent.powerKernelPort, sysevent.powerNotificationID); } else { /* * If there are active printers that don't have the connecting-to-device * or cups-waiting-for-job-completed printer-state-reasons then delay the * sleep request, i.e., these reasons indicate a job is active... */ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) { if (p->job) { for (i = 0; i < p->num_reasons; i ++) if (!strcmp(p->reasons[i], "connecting-to-device") || !strcmp(p->reasons[i], "cups-waiting-for-job-completed")) break; if (!p->num_reasons || i >= p->num_reasons) break; } } if (p) { cupsdLogMessage(CUPSD_LOG_INFO, "System sleep delayed because printer %s is active.", p->name); LastSysEvent = sysevent; SleepJobs = time(NULL) + 10; } else { cupsdLogMessage(CUPSD_LOG_DEBUG, "Allowing system sleep."); IOAllowPowerChange(sysevent.powerKernelPort, sysevent.powerNotificationID); } } } if (sysevent.event & SYSEVENT_WOKE) { cupsdLogMessage(CUPSD_LOG_DEBUG, "System woke from sleep."); IOAllowPowerChange(sysevent.powerKernelPort, sysevent.powerNotificationID); Sleeping = 0; /* * Make sure jobs that were queued prior to the system going to sleep don't * get canceled right away... */ if (MaxJobTime > 0) { cupsd_job_t *job; /* Current job */ for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs); job; job = (cupsd_job_t *)cupsArrayNext(ActiveJobs)) { if (job->cancel_time) { ipp_attribute_t *cancel_after = ippFindAttribute(job->attrs, "job-cancel-after", IPP_TAG_INTEGER); if (cancel_after) job->cancel_time = time(NULL) + ippGetInteger(cancel_after, 0); else job->cancel_time = time(NULL) + MaxJobTime; } } } if (NameChanged) sysUpdateNames(); cupsdCheckJobs(); } if (sysevent.event & SYSEVENT_NETCHANGED) { if (Sleeping) cupsdLogMessage(CUPSD_LOG_DEBUG, "System network configuration changed - " "ignored while sleeping."); else cupsdLogMessage(CUPSD_LOG_DEBUG, "System network configuration changed."); } if (sysevent.event & SYSEVENT_NAMECHANGED) { if (Sleeping) { NameChanged = 1; cupsdLogMessage(CUPSD_LOG_DEBUG, "Computer name or BTMM domains changed - ignored while " "sleeping."); } else { cupsdLogMessage(CUPSD_LOG_DEBUG, "Computer name or BTMM domains changed."); sysUpdateNames(); } } } } /* * 'sysUpdateNames()' - Update computer and/or BTMM domains. */ static void sysUpdateNames(void) { cupsd_printer_t *p; /* Current printer */ NameChanged = 0; /* * De-register the individual printers... */ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) cupsdDeregisterPrinter(p, 1); # if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) /* * Update the computer name and BTMM domain list... */ cupsdUpdateDNSSDName(); # endif /* HAVE_DNSSD || HAVE_AVAHI */ /* * Now re-register them... */ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers)) cupsdRegisterPrinter(p); } #endif /* __APPLE__ */ cups-2.2.7/scheduler/sysman.h000664 000765 000024 00000003477 13255074424 016627 0ustar00msweetstaff000000 000000 /* * System management definitions for the CUPS scheduler. * * Copyright 2007-2017 by Apple Inc. * Copyright 2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Constants... */ #define CUPSD_DIRTY_NONE 0 /* Nothing is dirty */ #define CUPSD_DIRTY_PRINTERS 1 /* printers.conf is dirty */ #define CUPSD_DIRTY_CLASSES 2 /* classes.conf is dirty */ #define CUPSD_DIRTY_PRINTCAP 4 /* printcap is dirty */ #define CUPSD_DIRTY_JOBS 8 /* jobs.cache or "c" file(s) are dirty */ #define CUPSD_DIRTY_SUBSCRIPTIONS 16 /* subscriptions.conf is dirty */ /* * Globals... */ VAR int DirtyFiles VALUE(CUPSD_DIRTY_NONE), /* What files are dirty? */ DirtyCleanInterval VALUE(DEFAULT_KEEPALIVE); /* How often do we write dirty files? */ VAR time_t DirtyCleanTime VALUE(0); /* When to clean dirty files next */ VAR int ACPower VALUE(-1), /* Is the system on AC power? */ Sleeping VALUE(0); /* Non-zero if machine is entering or * * in a sleep state... */ VAR time_t SleepJobs VALUE(0); /* Time when all jobs must be * * canceled for system sleep. */ #ifdef __APPLE__ VAR int SysEventPipes[2] VALUE2(-1,-1); /* System event notification pipes */ #endif /* __APPLE__ */ /* * Prototypes... */ extern void cupsdAllowSleep(void); extern void cupsdCleanDirty(void); extern void cupsdMarkDirty(int what); extern void cupsdSetBusyState(int working); extern void cupsdStartSystemMonitor(void); extern void cupsdStopSystemMonitor(void); cups-2.2.7/scheduler/testlpd.c000664 000765 000024 00000027203 13255074424 016760 0ustar00msweetstaff000000 000000 /* * cups-lpd test program for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include #include #include #include #include /* * Local functions... */ static int do_command(int outfd, int infd, const char *command); static int print_job(int outfd, int infd, char *dest, char **args) __attribute__((nonnull(4))); static int print_waiting(int outfd, int infd, char *dest); static int remove_job(int outfd, int infd, char *dest, char **args) __attribute__((nonnull(4))); static int status_long(int outfd, int infd, char *dest, char **args) __attribute__((nonnull(4))); static int status_short(int outfd, int infd, char *dest, char **args) __attribute__((nonnull(4))); static void usage(void) __attribute__((noreturn)); /* * 'main()' - Simulate an LPD client. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ int status; /* Test status */ char *op, /* Operation to test */ **opargs, /* Remaining arguments */ *dest; /* Destination */ int cupslpd_argc; /* Argument count for cups-lpd */ char *cupslpd_argv[1000]; /* Arguments for cups-lpd */ int cupslpd_stdin[2], /* Standard input for cups-lpd */ cupslpd_stdout[2], /* Standard output for cups-lpd */ cupslpd_pid, /* Process ID for cups-lpd */ cupslpd_status; /* Status of cups-lpd process */ /* * Collect command-line arguments... */ op = NULL; opargs = argv + argc; dest = NULL; cupslpd_argc = 1; cupslpd_argv[0] = (char *)"cups-lpd"; for (i = 1; i < argc; i ++) if (!strncmp(argv[i], "-o", 2)) { cupslpd_argv[cupslpd_argc++] = argv[i]; if (!argv[i][2]) { i ++; if (i >= argc) usage(); cupslpd_argv[cupslpd_argc++] = argv[i]; } } else if (argv[i][0] == '-') usage(); else if (!op) op = argv[i]; else if (!dest) dest = argv[i]; else { opargs = argv + i; break; } if (!op || (!strcmp(op, "print-job") && (!dest || !opargs)) || (!strcmp(op, "remove-job") && (!dest || !opargs)) || (strcmp(op, "print-job") && strcmp(op, "print-waiting") && strcmp(op, "remove-job") && strcmp(op, "status-long") && strcmp(op, "status-short"))) { printf("op=\"%s\", dest=\"%s\", opargs=%p\n", op, dest, opargs); usage(); } /* * Run the cups-lpd program using pipes... */ cupslpd_argv[cupslpd_argc] = NULL; pipe(cupslpd_stdin); pipe(cupslpd_stdout); if ((cupslpd_pid = fork()) < 0) { /* * Error! */ perror("testlpd: Unable to fork"); return (1); } else if (cupslpd_pid == 0) { /* * Child goes here... */ dup2(cupslpd_stdin[0], 0); close(cupslpd_stdin[0]); close(cupslpd_stdin[1]); dup2(cupslpd_stdout[1], 1); close(cupslpd_stdout[0]); close(cupslpd_stdout[1]); execv("./cups-lpd", cupslpd_argv); perror("testlpd: Unable to exec ./cups-lpd"); exit(errno); } else { close(cupslpd_stdin[0]); close(cupslpd_stdout[1]); } /* * Do the operation test... */ if (!strcmp(op, "print-job")) status = print_job(cupslpd_stdin[1], cupslpd_stdout[0], dest, opargs); else if (!strcmp(op, "print-waiting")) status = print_waiting(cupslpd_stdin[1], cupslpd_stdout[0], dest); else if (!strcmp(op, "remove-job")) status = remove_job(cupslpd_stdin[1], cupslpd_stdout[0], dest, opargs); else if (!strcmp(op, "status-long")) status = status_long(cupslpd_stdin[1], cupslpd_stdout[0], dest, opargs); else if (!strcmp(op, "status-short")) status = status_short(cupslpd_stdin[1], cupslpd_stdout[0], dest, opargs); else { printf("Unknown operation \"%s\"!\n", op); status = 1; } /* * Kill the test program... */ close(cupslpd_stdin[1]); close(cupslpd_stdout[0]); while (wait(&cupslpd_status) != cupslpd_pid); printf("cups-lpd exit status was %d...\n", cupslpd_status); /* * Return the test status... */ return (status); } /* * 'do_command()' - Send the LPD command and wait for a response. */ static int /* O - Status from cups-lpd */ do_command(int outfd, /* I - Command file descriptor */ int infd, /* I - Response file descriptor */ const char *command) /* I - Command line to send */ { size_t len; /* Length of command line */ char status; /* Status byte */ printf("COMMAND: %02X %s", command[0], command + 1); len = strlen(command); if ((size_t)write(outfd, command, len) < len) { puts(" Write failed!"); return (-1); } if (read(infd, &status, 1) < 1) puts("STATUS: ERROR"); else printf("STATUS: %d\n", status); return (status); } /* * 'print_job()' - Submit a file for printing. */ static int /* O - Status from cups-lpd */ print_job(int outfd, /* I - Command file descriptor */ int infd, /* I - Response file descriptor */ char *dest, /* I - Destination */ char **args) /* I - Arguments */ { int fd; /* Print file descriptor */ char command[1024], /* Command buffer */ control[1024], /* Control file */ buffer[8192]; /* Print buffer */ int status; /* Status of command */ struct stat fileinfo; /* File information */ char *jobname; /* Job name */ int sequence; /* Sequence number */ ssize_t bytes; /* Bytes read/written */ /* * Check the print file... */ if (stat(args[0], &fileinfo)) { perror(args[0]); return (-1); } if ((fd = open(args[0], O_RDONLY)) < 0) { perror(args[0]); return (-1); } /* * Send the "receive print job" command... */ snprintf(command, sizeof(command), "\002%s\n", dest); if ((status = do_command(outfd, infd, command)) != 0) { close(fd); return (status); } /* * Format a control file string that will be used to submit the job... */ if ((jobname = strrchr(args[0], '/')) != NULL) jobname ++; else jobname = args[0]; sequence = (int)getpid() % 1000; snprintf(control, sizeof(control), "Hlocalhost\n" "P%s\n" "J%s\n" "ldfA%03dlocalhost\n" "UdfA%03dlocalhost\n" "N%s\n", cupsUser(), jobname, sequence, sequence, jobname); /* * Send the control file... */ bytes = (ssize_t)strlen(control); snprintf(command, sizeof(command), "\002%d cfA%03dlocalhost\n", (int)bytes, sequence); if ((status = do_command(outfd, infd, command)) != 0) { close(fd); return (status); } bytes ++; if (write(outfd, control, (size_t)bytes) < bytes) { printf("CONTROL: Unable to write %d bytes!\n", (int)bytes); close(fd); return (-1); } printf("CONTROL: Wrote %d bytes.\n", (int)bytes); if (read(infd, command, 1) < 1) { puts("STATUS: ERROR"); close(fd); return (-1); } else { status = command[0]; printf("STATUS: %d\n", status); } /* * Send the data file... */ snprintf(command, sizeof(command), "\003%d dfA%03dlocalhost\n", (int)fileinfo.st_size, sequence); if ((status = do_command(outfd, infd, command)) != 0) { close(fd); return (status); } while ((bytes = read(fd, buffer, sizeof(buffer))) > 0) { if (write(outfd, buffer, (size_t)bytes) < bytes) { printf("DATA: Unable to write %d bytes!\n", (int)bytes); close(fd); return (-1); } } write(outfd, "", 1); close(fd); printf("DATA: Wrote %d bytes.\n", (int)fileinfo.st_size); if (read(infd, command, 1) < 1) { puts("STATUS: ERROR"); close(fd); return (-1); } else { status = command[0]; printf("STATUS: %d\n", status); } return (status); } /* * 'print_waiting()' - Print waiting jobs. */ static int /* O - Status from cups-lpd */ print_waiting(int outfd, /* I - Command file descriptor */ int infd, /* I - Response file descriptor */ char *dest) /* I - Destination */ { char command[1024]; /* Command buffer */ /* * Send the "print waiting jobs" command... */ snprintf(command, sizeof(command), "\001%s\n", dest); return (do_command(outfd, infd, command)); } /* * 'remove_job()' - Cancel a print job. */ static int /* O - Status from cups-lpd */ remove_job(int outfd, /* I - Command file descriptor */ int infd, /* I - Response file descriptor */ char *dest, /* I - Destination */ char **args) /* I - Arguments */ { int i; /* Looping var */ char command[1024]; /* Command buffer */ /* * Send the "remove jobs" command... */ snprintf(command, sizeof(command), "\005%s", dest); for (i = 0; args[i]; i ++) { strlcat(command, " ", sizeof(command)); strlcat(command, args[i], sizeof(command)); } strlcat(command, "\n", sizeof(command)); return (do_command(outfd, infd, command)); } /* * 'status_long()' - Show the long printer status. */ static int /* O - Status from cups-lpd */ status_long(int outfd, /* I - Command file descriptor */ int infd, /* I - Response file descriptor */ char *dest, /* I - Destination */ char **args) /* I - Arguments */ { char command[1024], /* Command buffer */ buffer[8192]; /* Status buffer */ ssize_t bytes; /* Bytes read/written */ /* * Send the "send short status" command... */ if (args[0]) snprintf(command, sizeof(command), "\004%s %s\n", dest, args[0]); else snprintf(command, sizeof(command), "\004%s\n", dest); bytes = (ssize_t)strlen(command); if (write(outfd, command, (size_t)bytes) < bytes) return (-1); /* * Read the status back... */ while ((bytes = read(infd, buffer, sizeof(buffer))) > 0) { fwrite(buffer, 1, (size_t)bytes, stdout); fflush(stdout); } return (0); } /* * 'status_short()' - Show the short printer status. */ static int /* O - Status from cups-lpd */ status_short(int outfd, /* I - Command file descriptor */ int infd, /* I - Response file descriptor */ char *dest, /* I - Destination */ char **args) /* I - Arguments */ { char command[1024], /* Command buffer */ buffer[8192]; /* Status buffer */ ssize_t bytes; /* Bytes read/written */ /* * Send the "send short status" command... */ if (args[0]) snprintf(command, sizeof(command), "\003%s %s\n", dest, args[0]); else snprintf(command, sizeof(command), "\003%s\n", dest); bytes = (ssize_t)strlen(command); if (write(outfd, command, (size_t)bytes) < bytes) return (-1); /* * Read the status back... */ while ((bytes = read(infd, buffer, sizeof(buffer))) > 0) { fwrite(buffer, 1, (size_t)bytes, stdout); fflush(stdout); } return (0); } /* * 'usage()' - Show program usage... */ static void usage(void) { puts("Usage: testlpd [options] print-job printer filename [... filename]"); puts(" testlpd [options] print-waiting [printer or user]"); puts(" testlpd [options] remove-job printer [user [job-id]]"); puts(" testlpd [options] status-long [printer or user]"); puts(" testlpd [options] status-short [printer or user]"); puts(""); puts("Options:"); puts(" -o name=value"); exit(0); } cups-2.2.7/scheduler/testmime.c000664 000765 000024 00000032034 13255074424 017126 0ustar00msweetstaff000000 000000 /* * MIME test program for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include #include #include "mime.h" /* * Local functions... */ static void add_ppd_filter(mime_t *mime, mime_type_t *filtertype, const char *filter); static void add_ppd_filters(mime_t *mime, ppd_file_t *ppd); static void print_rules(mime_magic_t *rules); static void type_dir(mime_t *mime, const char *dirname); /* * 'main()' - Main entry for the test program. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping vars */ const char *filter_path; /* Filter path */ char super[MIME_MAX_SUPER], /* Super-type name */ type[MIME_MAX_TYPE]; /* Type name */ int compression; /* Compression of file */ int cost; /* Cost of filters */ mime_t *mime; /* MIME database */ mime_type_t *src, /* Source type */ *dst; /* Destination type */ struct stat srcinfo; /* Source information */ ppd_file_t *ppd; /* PPD file */ cups_array_t *filters; /* Filters for the file */ mime_filter_t *filter; /* Current filter */ mime = NULL; src = NULL; dst = NULL; ppd = NULL; filter_path = "../filter:" CUPS_SERVERBIN "/filter"; srcinfo.st_size = 0; for (i = 1; i < argc; i ++) if (!strcmp(argv[i], "-d")) { i ++; if (i < argc) { mime = mimeLoad(argv[i], filter_path); if (ppd) add_ppd_filters(mime, ppd); } } else if (!strcmp(argv[i], "-f")) { i ++; if (i < argc) filter_path = argv[i]; } else if (!strcmp(argv[i], "-p")) { i ++; if (i < argc) { ppd = ppdOpenFile(argv[i]); if (mime) add_ppd_filters(mime, ppd); } } else if (!src) { if (!mime) mime = mimeLoad("../conf", filter_path); if (ppd) add_ppd_filters(mime, ppd); src = mimeFileType(mime, argv[i], NULL, &compression); stat(argv[i], &srcinfo); if (src) printf("%s: %s/%s%s\n", argv[i], src->super, src->type, compression ? " (gzipped)" : ""); else if ((src = mimeType(mime, "application", "octet-stream")) != NULL) printf("%s: application/octet-stream\n", argv[i]); else { printf("%s: unknown\n", argv[i]); if (mime) mimeDelete(mime); return (1); } } else { sscanf(argv[i], "%15[^/]/%255s", super, type); dst = mimeType(mime, super, type); filters = mimeFilter2(mime, src, (size_t)srcinfo.st_size, dst, &cost); if (!filters) { printf("No filters to convert from %s/%s to %s.\n", src->super, src->type, argv[i]); } else { int first = 1; /* First filter shown? */ printf("Filter cost = %d\n", cost); for (filter = (mime_filter_t *)cupsArrayFirst(filters); filter; filter = (mime_filter_t *)cupsArrayNext(filters)) { if (!strcmp(filter->filter, "-")) continue; if (first) { first = 0; fputs(filter->filter, stdout); } else printf(" | %s", filter->filter); } putchar('\n'); cupsArrayDelete(filters); } } if (!mime) { mime = mimeLoad("../conf", filter_path); if (ppd) add_ppd_filters(mime, ppd); } if (!src) { puts("MIME database types:"); for (src = mimeFirstType(mime); src; src = mimeNextType(mime)) { printf("\t%s/%s (%d):\n", src->super, src->type, src->priority); print_rules(src->rules); puts(""); } puts(""); puts("MIME database filters:"); for (filter = mimeFirstFilter(mime); filter; filter = mimeNextFilter(mime)) printf("\t%s/%s to %s/%s: %s (%d)\n", filter->src->super, filter->src->type, filter->dst->super, filter->dst->type, filter->filter, filter->cost); type_dir(mime, "../doc"); } return (0); } /* * 'add_printer_filter()' - Add a printer filter from a PPD. */ static void add_ppd_filter(mime_t *mime, /* I - MIME database */ mime_type_t *filtertype, /* I - Filter or prefilter MIME type */ const char *filter) /* I - Filter to add */ { char super[MIME_MAX_SUPER], /* Super-type for filter */ type[MIME_MAX_TYPE], /* Type for filter */ dsuper[MIME_MAX_SUPER], /* Destination super-type for filter */ dtype[MIME_MAX_TYPE], /* Destination type for filter */ dest[MIME_MAX_SUPER + MIME_MAX_TYPE + 2], /* Destination super/type */ program[1024]; /* Program/filter name */ int cost; /* Cost of filter */ size_t maxsize = 0; /* Maximum supported file size */ mime_type_t *temptype, /* MIME type looping var */ *desttype; /* Destination MIME type */ mime_filter_t *filterptr; /* MIME filter */ DEBUG_printf(("add_ppd_filter(mime=%p, filtertype=%p(%s/%s), filter=\"%s\")", mime, filtertype, filtertype->super, filtertype->type, filter)); /* * Parse the filter string; it should be in one of the following formats: * * source/type cost program * source/type cost maxsize(nnnn) program * source/type dest/type cost program * source/type dest/type cost maxsize(nnnn) program */ if (sscanf(filter, "%15[^/]/%255s%*[ \t]%15[^/]/%255s%d%*[ \t]%1023[^\n]", super, type, dsuper, dtype, &cost, program) == 6) { snprintf(dest, sizeof(dest), "test/%s/%s", dsuper, dtype); if ((desttype = mimeType(mime, "printer", dest)) == NULL) desttype = mimeAddType(mime, "printer", dest); } else { if (sscanf(filter, "%15[^/]/%255s%d%*[ \t]%1023[^\n]", super, type, &cost, program) == 4) { desttype = filtertype; } else { printf("testmime: Invalid filter string \"%s\".\n", filter); return; } } if (!strncmp(program, "maxsize(", 8)) { char *ptr; /* Pointer into maxsize(nnnn) program */ maxsize = (size_t)strtoll(program + 8, &ptr, 10); if (*ptr != ')') { printf("testmime: Invalid filter string \"%s\".\n", filter); return; } ptr ++; while (_cups_isspace(*ptr)) ptr ++; _cups_strcpy(program, ptr); } /* * Add the filter to the MIME database, supporting wildcards as needed... */ for (temptype = mimeFirstType(mime); temptype; temptype = mimeNextType(mime)) if (((super[0] == '*' && _cups_strcasecmp(temptype->super, "printer")) || !_cups_strcasecmp(temptype->super, super)) && (type[0] == '*' || !_cups_strcasecmp(temptype->type, type))) { if (desttype != filtertype) { DEBUG_printf(("add_ppd_filter: Adding filter %s/%s %s/%s %d %s", temptype->super, temptype->type, desttype->super, desttype->type, cost, program)); filterptr = mimeAddFilter(mime, temptype, desttype, cost, program); if (!mimeFilterLookup(mime, desttype, filtertype)) { DEBUG_printf(("add_printer_filter: Adding filter %s/%s %s/%s 0 -", desttype->super, desttype->type, filtertype->super, filtertype->type)); mimeAddFilter(mime, desttype, filtertype, 0, "-"); } } else { DEBUG_printf(("add_printer_filter: Adding filter %s/%s %s/%s %d %s", temptype->super, temptype->type, filtertype->super, filtertype->type, cost, program)); filterptr = mimeAddFilter(mime, temptype, filtertype, cost, program); } if (filterptr) filterptr->maxsize = maxsize; } } /* * 'add_ppd_filters()' - Add all filters from a PPD. */ static void add_ppd_filters(mime_t *mime, /* I - MIME database */ ppd_file_t *ppd) /* I - PPD file */ { _ppd_cache_t *pc; /* Cache data for PPD */ const char *value; /* Filter definition value */ mime_type_t *filter, /* Filter type */ *prefilter; /* Pre-filter type */ pc = _ppdCacheCreateWithPPD(ppd); if (!pc) return; filter = mimeAddType(mime, "printer", "test"); if (pc->filters) { for (value = (const char *)cupsArrayFirst(pc->filters); value; value = (const char *)cupsArrayNext(pc->filters)) add_ppd_filter(mime, filter, value); } else { add_ppd_filter(mime, filter, "application/vnd.cups-raw 0 -"); add_ppd_filter(mime, filter, "application/vnd.cups-postscript 0 -"); } if (pc->prefilters) { prefilter = mimeAddType(mime, "prefilter", "test"); for (value = (const char *)cupsArrayFirst(pc->prefilters); value; value = (const char *)cupsArrayNext(pc->prefilters)) add_ppd_filter(mime, prefilter, value); } } /* * 'print_rules()' - Print the rules for a file type... */ static void print_rules(mime_magic_t *rules) /* I - Rules to print */ { int i; /* Looping var */ static char indent[255] = "\t"; /* Indentation for rules */ if (rules == NULL) return; while (rules != NULL) { printf("%s[%p] ", indent, rules); if (rules->invert) printf("NOT "); switch (rules->op) { case MIME_MAGIC_MATCH : printf("match(%s)", rules->value.matchv); break; case MIME_MAGIC_LOCALE : printf("locale(%s)", rules->value.localev); break; case MIME_MAGIC_ASCII : printf("ascii(%d,%d)", rules->offset, rules->length); break; case MIME_MAGIC_PRINTABLE : printf("printable(%d,%d)", rules->offset, rules->length); break; case MIME_MAGIC_STRING : printf("string(%d,", rules->offset); for (i = 0; i < rules->length; i ++) if (rules->value.stringv[i] < ' ' || rules->value.stringv[i] > 126) printf("<%02X>", rules->value.stringv[i]); else putchar(rules->value.stringv[i]); putchar(')'); break; case MIME_MAGIC_CHAR : printf("char(%d,%d)", rules->offset, rules->value.charv); break; case MIME_MAGIC_SHORT : printf("short(%d,%d)", rules->offset, rules->value.shortv); break; case MIME_MAGIC_INT : printf("int(%d,%d)", rules->offset, rules->value.intv); break; case MIME_MAGIC_CONTAINS : printf("contains(%d,%d,", rules->offset, rules->region); for (i = 0; i < rules->length; i ++) if (rules->value.stringv[i] < ' ' || rules->value.stringv[i] > 126) printf("<%02X>", rules->value.stringv[i]); else putchar(rules->value.stringv[i]); putchar(')'); break; default : break; } if (rules->child != NULL) { if (rules->op == MIME_MAGIC_OR) puts("OR ("); else puts("AND ("); strcat(indent, "\t"); print_rules(rules->child); indent[strlen(indent) - 1] = '\0'; printf("%s)\n", indent); } else putchar('\n'); rules = rules->next; } } /* * 'type_dir()' - Show the MIME types for a given directory. */ static void type_dir(mime_t *mime, /* I - MIME database */ const char *dirname) /* I - Directory */ { cups_dir_t *dir; /* Directory */ cups_dentry_t *dent; /* Directory entry */ char filename[1024]; /* File to type */ mime_type_t *filetype; /* File type */ int compression; /* Compressed file? */ mime_type_t *pstype; /* application/vnd.cups-postscript */ cups_array_t *filters; /* Filters to pstype */ mime_filter_t *filter; /* Current filter */ int cost; /* Filter cost */ dir = cupsDirOpen(dirname); if (!dir) return; pstype = mimeType(mime, "application", "vnd.cups-postscript"); while ((dent = cupsDirRead(dir)) != NULL) { if (dent->filename[0] == '.') continue; snprintf(filename, sizeof(filename), "%s/%s", dirname, dent->filename); if (S_ISDIR(dent->fileinfo.st_mode)) type_dir(mime, filename); if (!S_ISREG(dent->fileinfo.st_mode)) continue; filetype = mimeFileType(mime, filename, NULL, &compression); if (filetype) { printf("%s: %s/%s%s\n", filename, filetype->super, filetype->type, compression ? " (compressed)" : ""); filters = mimeFilter(mime, filetype, pstype, &cost); if (!filters) puts(" No filters to convert application/vnd.cups-postscript."); else { printf(" Filter cost = %d\n", cost); filter = (mime_filter_t *)cupsArrayFirst(filters); printf(" %s", filter->filter); for (filter = (mime_filter_t *)cupsArrayNext(filters); filter; filter = (mime_filter_t *)cupsArrayNext(filters)) printf(" | %s", filter->filter); putchar('\n'); cupsArrayDelete(filters); } } else printf("%s: unknown%s\n", filename, compression ? " (compressed)" : ""); } cupsDirClose(dir); } cups-2.2.7/scheduler/testspeed.c000664 000765 000024 00000020774 13255074424 017307 0ustar00msweetstaff000000 000000 /* * Scheduler speed test for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include #include #include #include #include /* * Local functions... */ static int do_test(const char *server, int port, http_encryption_t encryption, int requests, const char *opstring, int verbose); static void usage(void) __attribute__((noreturn)); /* * 'main()' - Send multiple IPP requests and report on the average response * time. */ int main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ char *server, /* Server to use */ *ptr; /* Pointer to port in server */ int port; /* Port to use */ http_encryption_t encryption; /* Encryption to use */ int requests; /* Number of requests to send */ int children; /* Number of children to fork */ int good_children; /* Number of children that exited normally */ int pid; /* Child PID */ int status; /* Child status */ time_t start, /* Start time */ end; /* End time */ double elapsed; /* Elapsed time */ int verbose; /* Verbosity */ const char *opstring; /* Operation name */ /* * Parse command-line options... */ requests = 100; children = 5; server = (char *)cupsServer(); port = ippPort(); encryption = HTTP_ENCRYPT_IF_REQUESTED; verbose = 0; opstring = NULL; for (i = 1; i < argc; i ++) if (argv[i][0] == '-') { for (ptr = argv[i] + 1; *ptr; ptr ++) switch (*ptr) { case 'E' : /* Enable encryption */ encryption = HTTP_ENCRYPT_REQUIRED; break; case 'c' : /* Number of children */ i ++; if (i >= argc) usage(); children = atoi(argv[i]); break; case 'o' : /* Operation */ i ++; if (i >= argc) usage(); opstring = argv[i]; break; case 'r' : /* Number of requests */ i ++; if (i >= argc) usage(); requests = atoi(argv[i]); break; case 'v' : /* Verbose logging */ verbose ++; break; default : usage(); break; } } else { server = argv[i]; if (server[0] != '/' && (ptr = strrchr(server, ':')) != NULL) { *ptr++ = '\0'; port = atoi(ptr); } } /* * Then create child processes to act as clients... */ if (children > 0) { printf("testspeed: Simulating %d clients with %d requests to %s with " "%sencryption...\n", children, requests, server, encryption == HTTP_ENCRYPT_IF_REQUESTED ? "no " : ""); } start = time(NULL); if (children < 1) return (do_test(server, port, encryption, requests, opstring, verbose)); else if (children == 1) good_children = do_test(server, port, encryption, requests, opstring, verbose) ? 0 : 1; else { char options[255], /* Command-line options for child */ reqstr[255], /* Requests string for child */ serverstr[255]; /* Server:port string for child */ snprintf(reqstr, sizeof(reqstr), "%d", requests); if (port == 631 || server[0] == '/') strlcpy(serverstr, server, sizeof(serverstr)); else snprintf(serverstr, sizeof(serverstr), "%s:%d", server, port); strlcpy(options, "-cr", sizeof(options)); if (encryption == HTTP_ENCRYPT_REQUIRED) strlcat(options, "E", sizeof(options)); if (verbose) strlcat(options, "v", sizeof(options)); for (i = 0; i < children; i ++) { fflush(stdout); if ((pid = fork()) == 0) { /* * Child goes here... */ if (opstring) execlp(argv[0], argv[0], options, "0", reqstr, "-o", opstring, serverstr, (char *)NULL); else execlp(argv[0], argv[0], options, "0", reqstr, serverstr, (char *)NULL); exit(errno); } else if (pid < 0) { printf("testspeed: Fork failed: %s\n", strerror(errno)); break; } else printf("testspeed: Started child %d...\n", pid); } /* * Wait for children to finish... */ puts("testspeed: Waiting for children to finish..."); for (good_children = 0;;) { pid = wait(&status); if (pid < 0 && errno != EINTR) break; printf("testspeed: Ended child %d (%d)...\n", pid, status / 256); if (!status) good_children ++; } } /* * Compute the total run time... */ if (good_children > 0) { end = time(NULL); elapsed = end - start; i = good_children * requests; printf("testspeed: %dx%d=%d requests in %.1fs (%.3fs/r, %.1fr/s)\n", good_children, requests, i, elapsed, elapsed / i, i / elapsed); } /* * Exit with no errors... */ return (0); } /* * 'do_test()' - Run a test on a specific host... */ static int /* O - Exit status */ do_test(const char *server, /* I - Server to use */ int port, /* I - Port number to use */ http_encryption_t encryption, /* I - Encryption to use */ int requests, /* I - Number of requests to send */ const char *opstring, /* I - Operation string */ int verbose) /* I - Verbose output? */ { int i; /* Looping var */ http_t *http; /* Connection to server */ ipp_t *request; /* IPP Request */ struct timeval start, /* Start time */ end; /* End time */ double reqtime, /* Time for this request */ elapsed; /* Elapsed time */ int op; /* Current operation */ static ipp_op_t ops[5] = /* Operations to test... */ { IPP_PRINT_JOB, CUPS_GET_DEFAULT, CUPS_GET_PRINTERS, CUPS_GET_CLASSES, IPP_GET_JOBS }; /* * Connect to the server... */ if ((http = httpConnectEncrypt(server, port, encryption)) == NULL) { printf("testspeed(%d): unable to connect to server - %s\n", (int)getpid(), strerror(errno)); return (1); } /* * Do multiple requests... */ for (elapsed = 0.0, i = 0; i < requests; i ++) { /* * Build a request which requires the following attributes: * * attributes-charset * attributes-natural-language * * In addition, IPP_GET_JOBS needs a printer-uri attribute. */ if (opstring) op = ippOpValue(opstring); else op = ops[i % (int)(sizeof(ops) / sizeof(ops[0]))]; request = ippNewRequest(op); gettimeofday(&start, NULL); if (verbose) printf("testspeed(%d): %.6f %s ", (int)getpid(), elapsed, ippOpString(op)); switch (op) { case IPP_GET_JOBS : ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/printers/"); default : ippDelete(cupsDoRequest(http, request, "/")); break; case IPP_PRINT_JOB : ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/printers/test"); ippDelete(cupsDoFileRequest(http, request, "/printers/test", "../data/testprint.ps")); break; } gettimeofday(&end, NULL); reqtime = (end.tv_sec - start.tv_sec) + 0.000001 * (end.tv_usec - start.tv_usec); elapsed += reqtime; switch (cupsLastError()) { case IPP_OK : case IPP_NOT_FOUND : if (verbose) { printf("succeeded: %s (%.6f)\n", cupsLastErrorString(), reqtime); fflush(stdout); } break; default : if (!verbose) printf("testspeed(%d): %s ", (int)getpid(), ippOpString(ops[i & 3])); printf("failed: %s\n", cupsLastErrorString()); httpClose(http); return (1); } } httpClose(http); printf("testspeed(%d): %d requests in %.1fs (%.3fs/r, %.1fr/s)\n", (int)getpid(), i, elapsed, elapsed / i, i / elapsed); return (0); } /* * 'usage()' - Show program usage... */ static void usage(void) { puts("Usage: testspeed [-c children] [-h] [-o operation] [-r requests] [-v] " "[-E] hostname[:port]"); exit(0); } cups-2.2.7/scheduler/testsub.c000664 000765 000024 00000030263 13255074424 016772 0ustar00msweetstaff000000 000000 /* * Scheduler notification tester for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 2006-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include #include #include /* TODO: Update so we don't need this */ /* * Local globals... */ static int terminate = 0; /* * Local functions... */ static void print_attributes(ipp_t *ipp, int indent); static void sigterm_handler(int sig); static void usage(void) __attribute__((noreturn)); /* * 'main()' - Subscribe to the . */ int main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ const char *uri; /* URI to use */ int num_events; /* Number of events */ const char *events[100]; /* Events */ int subscription_id, /* notify-subscription-id */ sequence_number, /* notify-sequence-number */ interval; /* Interval between polls */ http_t *http; /* HTTP connection */ ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* Current attribute */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ /* * Parse command-line... */ num_events = 0; uri = NULL; for (i = 1; i < argc; i ++) if (!strcmp(argv[i], "-E")) cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); else if (!strcmp(argv[i], "-e")) { i ++; if (i >= argc || num_events >= 100) usage(); events[num_events] = argv[i]; num_events ++; } else if (!strcmp(argv[i], "-h")) { i ++; if (i >= argc) usage(); cupsSetServer(argv[i]); } else if (uri || strncmp(argv[i], "ipp://", 6)) usage(); else uri = argv[i]; if (!uri) usage(); if (num_events == 0) { events[0] = "all"; num_events = 1; } /* * Connect to the server... */ if ((http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption())) == NULL) { perror(cupsServer()); return (1); } /* * Catch CTRL-C and SIGTERM... */ #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */ sigset(SIGINT, sigterm_handler); sigset(SIGTERM, sigterm_handler); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); action.sa_handler = sigterm_handler; sigaction(SIGINT, &action, NULL); sigaction(SIGTERM, &action, NULL); #else signal(SIGINT, sigterm_handler); signal(SIGTERM, sigterm_handler); #endif /* HAVE_SIGSET */ /* * Create the subscription... */ if (strstr(uri, "/jobs/")) { request = ippNewRequest(IPP_CREATE_JOB_SUBSCRIPTION); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); } else { request = ippNewRequest(IPP_CREATE_PRINTER_SUBSCRIPTION); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); } ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddStrings(request, IPP_TAG_SUBSCRIPTION, IPP_TAG_KEYWORD, "notify-events", num_events, NULL, events); ippAddString(request, IPP_TAG_SUBSCRIPTION, IPP_TAG_KEYWORD, "notify-pull-method", NULL, "ippget"); response = cupsDoRequest(http, request, uri); if (cupsLastError() >= IPP_BAD_REQUEST) { fprintf(stderr, "Create-%s-Subscription: %s\n", strstr(uri, "/jobs") ? "Job" : "Printer", cupsLastErrorString()); ippDelete(response); httpClose(http); return (1); } if ((attr = ippFindAttribute(response, "notify-subscription-id", IPP_TAG_INTEGER)) == NULL) { fputs("ERROR: No notify-subscription-id in response!\n", stderr); ippDelete(response); httpClose(http); return (1); } subscription_id = attr->values[0].integer; printf("Create-%s-Subscription: notify-subscription-id=%d\n", strstr(uri, "/jobs/") ? "Job" : "Printer", subscription_id); ippDelete(response); /* * Monitor for events... */ sequence_number = 0; while (!terminate) { /* * Get the current events... */ printf("\nGet-Notifications(%d,%d):", subscription_id, sequence_number); fflush(stdout); request = ippNewRequest(IPP_GET_NOTIFICATIONS); if (strstr(uri, "/jobs/")) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); else ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "notify-subscription-ids", subscription_id); if (sequence_number) ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "notify-sequence-numbers", sequence_number + 1); response = cupsDoRequest(http, request, uri); printf(" %s\n", ippErrorString(cupsLastError())); if (cupsLastError() >= IPP_BAD_REQUEST) fprintf(stderr, "Get-Notifications: %s\n", cupsLastErrorString()); else if (response) { print_attributes(response, 0); for (attr = ippFindAttribute(response, "notify-sequence-number", IPP_TAG_INTEGER); attr; attr = ippFindNextAttribute(response, "notify-sequence-number", IPP_TAG_INTEGER)) if (attr->values[0].integer > sequence_number) sequence_number = attr->values[0].integer; } if ((attr = ippFindAttribute(response, "notify-get-interval", IPP_TAG_INTEGER)) != NULL && attr->values[0].integer > 0) interval = attr->values[0].integer; else interval = 5; ippDelete(response); sleep((unsigned)interval); } /* * Cancel the subscription... */ printf("\nCancel-Subscription:"); fflush(stdout); request = ippNewRequest(IPP_CANCEL_SUBSCRIPTION); if (strstr(uri, "/jobs/")) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); else ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "notify-subscription-id", subscription_id); ippDelete(cupsDoRequest(http, request, uri)); printf(" %s\n", ippErrorString(cupsLastError())); if (cupsLastError() >= IPP_BAD_REQUEST) fprintf(stderr, "Cancel-Subscription: %s\n", cupsLastErrorString()); /* * Close the connection and return... */ httpClose(http); return (0); } /* * 'print_attributes()' - Print the attributes in a request... */ static void print_attributes(ipp_t *ipp, /* I - IPP request */ int indent) /* I - Indentation */ { int i; /* Looping var */ ipp_tag_t group; /* Current group */ ipp_attribute_t *attr; /* Current attribute */ _ipp_value_t *val; /* Current value */ static const char * const tags[] = /* Value/group tag strings */ { "reserved-00", "operation-attributes-tag", "job-attributes-tag", "end-of-attributes-tag", "printer-attributes-tag", "unsupported-attributes-tag", "subscription-attributes-tag", "event-attributes-tag", "reserved-08", "reserved-09", "reserved-0A", "reserved-0B", "reserved-0C", "reserved-0D", "reserved-0E", "reserved-0F", "unsupported", "default", "unknown", "no-value", "reserved-14", "not-settable", "delete-attr", "admin-define", "reserved-18", "reserved-19", "reserved-1A", "reserved-1B", "reserved-1C", "reserved-1D", "reserved-1E", "reserved-1F", "reserved-20", "integer", "boolean", "enum", "reserved-24", "reserved-25", "reserved-26", "reserved-27", "reserved-28", "reserved-29", "reserved-2a", "reserved-2b", "reserved-2c", "reserved-2d", "reserved-2e", "reserved-2f", "octetString", "dateTime", "resolution", "rangeOfInteger", "begCollection", "textWithLanguage", "nameWithLanguage", "endCollection", "reserved-38", "reserved-39", "reserved-3a", "reserved-3b", "reserved-3c", "reserved-3d", "reserved-3e", "reserved-3f", "reserved-40", "textWithoutLanguage", "nameWithoutLanguage", "reserved-43", "keyword", "uri", "uriScheme", "charset", "naturalLanguage", "mimeMediaType", "memberName" }; for (group = IPP_TAG_ZERO, attr = ipp->attrs; attr; attr = attr->next) { if ((attr->group_tag == IPP_TAG_ZERO && indent <= 8) || !attr->name) { group = IPP_TAG_ZERO; putchar('\n'); continue; } if (group != attr->group_tag) { group = attr->group_tag; putchar('\n'); for (i = 4; i < indent; i ++) putchar(' '); printf("%s:\n\n", tags[group]); } for (i = 0; i < indent; i ++) putchar(' '); printf("%s (", attr->name); if (attr->num_values > 1) printf("1setOf "); printf("%s):", tags[attr->value_tag]); switch (attr->value_tag) { case IPP_TAG_ENUM : case IPP_TAG_INTEGER : for (i = 0, val = attr->values; i < attr->num_values; i ++, val ++) printf(" %d", val->integer); putchar('\n'); break; case IPP_TAG_BOOLEAN : for (i = 0, val = attr->values; i < attr->num_values; i ++, val ++) printf(" %s", val->boolean ? "true" : "false"); putchar('\n'); break; case IPP_TAG_RANGE : for (i = 0, val = attr->values; i < attr->num_values; i ++, val ++) printf(" %d-%d", val->range.lower, val->range.upper); putchar('\n'); break; case IPP_TAG_DATE : { char vstring[256]; /* Formatted time */ for (i = 0, val = attr->values; i < attr->num_values; i ++, val ++) printf(" (%s)", _cupsStrDate(vstring, sizeof(vstring), ippDateToTime(val->date))); } putchar('\n'); break; case IPP_TAG_RESOLUTION : for (i = 0, val = attr->values; i < attr->num_values; i ++, val ++) printf(" %dx%d%s", val->resolution.xres, val->resolution.yres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); putchar('\n'); break; case IPP_TAG_STRING : case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : for (i = 0, val = attr->values; i < attr->num_values; i ++, val ++) printf(" \"%s\"", val->string.text); putchar('\n'); break; case IPP_TAG_BEGIN_COLLECTION : putchar('\n'); for (i = 0, val = attr->values; i < attr->num_values; i ++, val ++) { if (i) putchar('\n'); print_attributes(val->collection, indent + 4); } break; default : printf("UNKNOWN (%d values)\n", attr->num_values); break; } } } /* * 'sigterm_handler()' - Flag when the user hits CTRL-C... */ static void sigterm_handler(int sig) /* I - Signal number (unused) */ { (void)sig; terminate = 1; } /* * 'usage()' - Show program usage... */ static void usage(void) { puts("Usage: testsub [-E] [-e event ... -e eventN] [-h hostname] URI"); exit(0); } cups-2.2.7/scheduler/type.c000664 000765 000024 00000074774 13255074424 016301 0ustar00msweetstaff000000 000000 /* * MIME typing routines for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include #include "mime.h" /* * Local types... */ typedef struct _mime_filebuf_s /**** File buffer for MIME typing ****/ { cups_file_t *fp; /* File pointer */ int offset, /* Offset in file */ length; /* Length of buffered data */ unsigned char buffer[MIME_MAX_BUFFER];/* Buffered data */ } _mime_filebuf_t; /* * Local functions... */ static int mime_compare_types(mime_type_t *t0, mime_type_t *t1); static int mime_check_rules(const char *filename, _mime_filebuf_t *fb, mime_magic_t *rules); static int mime_patmatch(const char *s, const char *pat); /* * Local globals... */ #ifdef DEBUG static const char * const debug_ops[] = { /* Test names... */ "NOP", /* No operation */ "AND", /* Logical AND of all children */ "OR", /* Logical OR of all children */ "MATCH", /* Filename match */ "ASCII", /* ASCII characters in range */ "PRINTABLE", /* Printable characters (32-255) */ "STRING", /* String matches */ "CHAR", /* Character/byte matches */ "SHORT", /* Short/16-bit word matches */ "INT", /* Integer/32-bit word matches */ "LOCALE", /* Current locale matches string */ "CONTAINS", /* File contains a string */ "ISTRING", /* Case-insensitive string matches */ "REGEX" /* Regular expression matches */ }; #endif /* DEBUG */ /* * 'mimeAddType()' - Add a MIME type to a database. */ mime_type_t * /* O - New (or existing) MIME type */ mimeAddType(mime_t *mime, /* I - MIME database */ const char *super, /* I - Super-type name */ const char *type) /* I - Type name */ { mime_type_t *temp; /* New MIME type */ size_t typelen; /* Length of type name */ DEBUG_printf(("mimeAddType(mime=%p, super=\"%s\", type=\"%s\")", mime, super, type)); /* * Range check input... */ if (!mime || !super || !type) { DEBUG_puts("1mimeAddType: Returning NULL (bad arguments)."); return (NULL); } /* * See if the type already exists; if so, return the existing type... */ if ((temp = mimeType(mime, super, type)) != NULL) { DEBUG_printf(("1mimeAddType: Returning %p (existing).", temp)); return (temp); } /* * The type doesn't exist; add it... */ if (!mime->types) mime->types = cupsArrayNew((cups_array_func_t)mime_compare_types, NULL); if (!mime->types) { DEBUG_puts("1mimeAddType: Returning NULL (no types)."); return (NULL); } typelen = strlen(type) + 1; if ((temp = calloc(1, sizeof(mime_type_t) - MIME_MAX_TYPE + typelen)) == NULL) { DEBUG_puts("1mimeAddType: Returning NULL (out of memory)."); return (NULL); } strlcpy(temp->super, super, sizeof(temp->super)); memcpy(temp->type, type, typelen); temp->priority = 100; cupsArrayAdd(mime->types, temp); DEBUG_printf(("1mimeAddType: Returning %p (new).", temp)); return (temp); } /* * 'mimeAddTypeRule()' - Add a detection rule for a file type. */ int /* O - 0 on success, -1 on failure */ mimeAddTypeRule(mime_type_t *mt, /* I - Type to add to */ const char *rule) /* I - Rule to add */ { int num_values, /* Number of values seen */ op, /* Operation code */ logic, /* Logic for next rule */ invert; /* Invert following rule? */ char name[255], /* Name in rule string */ value[3][255], /* Value in rule string */ *ptr, /* Position in name or value */ quote; /* Quote character */ int length[3]; /* Length of each parameter */ mime_magic_t *temp, /* New rule */ *current; /* Current rule */ DEBUG_printf(("mimeAddTypeRule(mt=%p(%s/%s), rule=\"%s\")", mt, mt ? mt->super : "???", mt ? mt->type : "???", rule)); /* * Range check input... */ if (!mt || !rule) return (-1); /* * Find the last rule in the top-level of the rules tree. */ for (current = mt->rules; current; current = current->next) if (!current->next) break; /* * Parse the rules string. Most rules are either a file extension or a * comparison function: * * extension * function(parameters) */ logic = MIME_MAGIC_NOP; invert = 0; while (*rule != '\0') { while (isspace(*rule & 255)) rule ++; if (*rule == '(') { DEBUG_puts("1mimeAddTypeRule: New parenthesis group"); logic = MIME_MAGIC_NOP; rule ++; } else if (*rule == ')') { DEBUG_puts("1mimeAddTypeRule: Close paren..."); if (current == NULL || current->parent == NULL) return (-1); current = current->parent; if (current->parent == NULL) logic = MIME_MAGIC_OR; else logic = current->parent->op; rule ++; } else if (*rule == '+' && current != NULL) { if (logic != MIME_MAGIC_AND && current != NULL && current->prev != NULL) { /* * OK, we have more than 1 rule in the current tree level... Make a * new group tree and move the previous rule to it... */ if ((temp = calloc(1, sizeof(mime_magic_t))) == NULL) return (-1); temp->op = MIME_MAGIC_AND; temp->child = current; temp->parent = current->parent; current->prev->next = temp; temp->prev = current->prev; current->prev = NULL; current->parent = temp; DEBUG_printf(("1mimeAddTypeRule: Creating new AND group %p.", temp)); } else if (current->parent) { DEBUG_printf(("1mimeAddTypeRule: Setting group %p op to AND.", current->parent)); current->parent->op = MIME_MAGIC_AND; } logic = MIME_MAGIC_AND; rule ++; } else if (*rule == ',') { if (logic != MIME_MAGIC_OR && current != NULL) { /* * OK, we have two possibilities; either this is the top-level rule or * we have a bunch of AND rules at this level. */ if (current->parent == NULL) { /* * This is the top-level rule; we have to move *all* of the AND rules * down a level, as AND has precedence over OR. */ if ((temp = calloc(1, sizeof(mime_magic_t))) == NULL) return (-1); DEBUG_printf(("1mimeAddTypeRule: Creating new AND group %p inside OR " "group.", temp)); while (current->prev != NULL) { current->parent = temp; current = current->prev; } current->parent = temp; temp->op = MIME_MAGIC_AND; temp->child = current; mt->rules = current = temp; } else { /* * This isn't the top rule, so go up one level... */ DEBUG_puts("1mimeAddTypeRule: Going up one level."); current = current->parent; } } logic = MIME_MAGIC_OR; rule ++; } else if (*rule == '!') { DEBUG_puts("1mimeAddTypeRule: NOT"); invert = 1; rule ++; } else if (isalnum(*rule & 255)) { /* * Read an extension name or a function... */ ptr = name; while (isalnum(*rule & 255) && (size_t)(ptr - name) < (sizeof(name) - 1)) *ptr++ = *rule++; *ptr = '\0'; if (*rule == '(') { /* * Read function parameters... */ rule ++; for (num_values = 0; num_values < (int)(sizeof(value) / sizeof(value[0])); num_values ++) { ptr = value[num_values]; while ((size_t)(ptr - value[num_values]) < (sizeof(value[0]) - 1) && *rule != '\0' && *rule != ',' && *rule != ')') { if (isspace(*rule & 255)) { /* * Ignore whitespace... */ rule ++; continue; } else if (*rule == '\"' || *rule == '\'') { /* * Copy quoted strings literally... */ quote = *rule++; while (*rule != '\0' && *rule != quote && (size_t)(ptr - value[num_values]) < (sizeof(value[0]) - 1)) *ptr++ = *rule++; if (*rule == quote) rule ++; else return (-1); } else if (*rule == '<') { rule ++; while (*rule != '>' && *rule != '\0' && (size_t)(ptr - value[num_values]) < (sizeof(value[0]) - 1)) { if (isxdigit(rule[0] & 255) && isxdigit(rule[1] & 255)) { if (isdigit(*rule)) *ptr = (char)((*rule++ - '0') << 4); else *ptr = (char)((tolower(*rule++) - 'a' + 10) << 4); if (isdigit(*rule)) *ptr++ |= *rule++ - '0'; else *ptr++ |= tolower(*rule++) - 'a' + 10; } else return (-1); } if (*rule == '>') rule ++; else return (-1); } else *ptr++ = *rule++; } *ptr = '\0'; length[num_values] = ptr - value[num_values]; if (*rule != ',') { num_values ++; break; } rule ++; } if (*rule != ')') return (-1); rule ++; /* * Figure out the function... */ if (!strcmp(name, "match")) op = MIME_MAGIC_MATCH; else if (!strcmp(name, "ascii")) op = MIME_MAGIC_ASCII; else if (!strcmp(name, "printable")) op = MIME_MAGIC_PRINTABLE; else if (!strcmp(name, "regex")) op = MIME_MAGIC_REGEX; else if (!strcmp(name, "string")) op = MIME_MAGIC_STRING; else if (!strcmp(name, "istring")) op = MIME_MAGIC_ISTRING; else if (!strcmp(name, "char")) op = MIME_MAGIC_CHAR; else if (!strcmp(name, "short")) op = MIME_MAGIC_SHORT; else if (!strcmp(name, "int")) op = MIME_MAGIC_INT; else if (!strcmp(name, "locale")) op = MIME_MAGIC_LOCALE; else if (!strcmp(name, "contains")) op = MIME_MAGIC_CONTAINS; else if (!strcmp(name, "priority") && num_values == 1) { mt->priority = atoi(value[0]); continue; } else return (-1); } else { /* * This is just a filename match on the extension... */ snprintf(value[0], sizeof(value[0]), "*.%s", name); length[0] = (int)strlen(value[0]); op = MIME_MAGIC_MATCH; } /* * Add a rule for this operation. */ if ((temp = calloc(1, sizeof(mime_magic_t))) == NULL) return (-1); temp->invert = (short)invert; if (current != NULL) { temp->parent = current->parent; current->next = temp; } else mt->rules = temp; temp->prev = current; if (logic == MIME_MAGIC_NOP) { /* * Add parenthetical grouping... */ DEBUG_printf(("1mimeAddTypeRule: Making new OR group %p for " "parenthesis.", temp)); temp->op = MIME_MAGIC_OR; if ((temp->child = calloc(1, sizeof(mime_magic_t))) == NULL) return (-1); temp->child->parent = temp; temp->child->invert = temp->invert; temp->invert = 0; temp = temp->child; logic = MIME_MAGIC_OR; } DEBUG_printf(("1mimeAddTypeRule: Adding %p: %s, op=MIME_MAGIC_%s(%d), " "logic=MIME_MAGIC_%s, invert=%d.", temp, name, debug_ops[op], op, debug_ops[logic], invert)); /* * Fill in data for the rule... */ current = temp; temp->op = (short)op; invert = 0; switch (op) { case MIME_MAGIC_MATCH : if ((size_t)length[0] > (sizeof(temp->value.matchv) - 1)) return (-1); strlcpy(temp->value.matchv, value[0], sizeof(temp->value.matchv)); break; case MIME_MAGIC_ASCII : case MIME_MAGIC_PRINTABLE : temp->offset = strtol(value[0], NULL, 0); temp->length = strtol(value[1], NULL, 0); if (temp->length > MIME_MAX_BUFFER) temp->length = MIME_MAX_BUFFER; break; case MIME_MAGIC_REGEX : temp->offset = strtol(value[0], NULL, 0); temp->length = MIME_MAX_BUFFER; if (regcomp(&(temp->value.rev), value[1], REG_NOSUB | REG_EXTENDED)) return (-1); break; case MIME_MAGIC_STRING : case MIME_MAGIC_ISTRING : temp->offset = strtol(value[0], NULL, 0); if ((size_t)length[1] > sizeof(temp->value.stringv)) return (-1); temp->length = length[1]; memcpy(temp->value.stringv, value[1], (size_t)length[1]); break; case MIME_MAGIC_CHAR : temp->offset = strtol(value[0], NULL, 0); if (length[1] == 1) temp->value.charv = (unsigned char)value[1][0]; else temp->value.charv = (unsigned char)strtol(value[1], NULL, 0); DEBUG_printf(("1mimeAddTypeRule: CHAR(%d,0x%02x)", temp->offset, temp->value.charv)); break; case MIME_MAGIC_SHORT : temp->offset = strtol(value[0], NULL, 0); temp->value.shortv = (unsigned short)strtol(value[1], NULL, 0); break; case MIME_MAGIC_INT : temp->offset = strtol(value[0], NULL, 0); temp->value.intv = (unsigned)strtol(value[1], NULL, 0); break; case MIME_MAGIC_LOCALE : if ((size_t)length[0] > (sizeof(temp->value.localev) - 1)) return (-1); strlcpy(temp->value.localev, value[0], sizeof(temp->value.localev)); break; case MIME_MAGIC_CONTAINS : temp->offset = strtol(value[0], NULL, 0); temp->region = strtol(value[1], NULL, 0); if ((size_t)length[2] > sizeof(temp->value.stringv)) return (-1); temp->length = length[2]; memcpy(temp->value.stringv, value[2], (size_t)length[2]); break; } } else break; } return (0); } /* * 'mimeFileType()' - Determine the type of a file. */ mime_type_t * /* O - Type of file */ mimeFileType(mime_t *mime, /* I - MIME database */ const char *pathname, /* I - Name of file to check on disk */ const char *filename, /* I - Original filename or NULL */ int *compression) /* O - Is the file compressed? */ { _mime_filebuf_t fb; /* File buffer */ const char *base; /* Base filename of file */ mime_type_t *type, /* File type */ *best; /* Best match */ DEBUG_printf(("mimeFileType(mime=%p, pathname=\"%s\", filename=\"%s\", " "compression=%p)", mime, pathname, filename, compression)); /* * Range check input parameters... */ if (!mime || !pathname) { DEBUG_puts("1mimeFileType: Returning NULL."); return (NULL); } /* * Try to open the file... */ if ((fb.fp = cupsFileOpen(pathname, "r")) == NULL) { DEBUG_printf(("1mimeFileType: Unable to open \"%s\": %s", pathname, strerror(errno))); DEBUG_puts("1mimeFileType: Returning NULL."); return (NULL); } /* * Then preload the first MIME_MAX_BUFFER bytes of the file into the file * buffer, returning an error if we can't read anything... */ fb.offset = 0; fb.length = (int)cupsFileRead(fb.fp, (char *)fb.buffer, MIME_MAX_BUFFER); if (fb.length <= 0) { DEBUG_printf(("1mimeFileType: Unable to read from \"%s\": %s", pathname, strerror(errno))); DEBUG_puts("1mimeFileType: Returning NULL."); cupsFileClose(fb.fp); return (NULL); } /* * Figure out the base filename (without directory portion)... */ if (filename) { if ((base = strrchr(filename, '/')) != NULL) base ++; else base = filename; } else if ((base = strrchr(pathname, '/')) != NULL) base ++; else base = pathname; /* * Then check it against all known types... */ for (type = (mime_type_t *)cupsArrayFirst(mime->types), best = NULL; type; type = (mime_type_t *)cupsArrayNext(mime->types)) if (mime_check_rules(base, &fb, type->rules)) { if (!best || type->priority > best->priority) best = type; } /* * Finally, close the file and return a match (if any)... */ if (compression) { *compression = cupsFileCompression(fb.fp); DEBUG_printf(("1mimeFileType: *compression=%d", *compression)); } cupsFileClose(fb.fp); DEBUG_printf(("1mimeFileType: Returning %p(%s/%s).", best, best ? best->super : "???", best ? best->type : "???")); return (best); } /* * 'mimeType()' - Lookup a file type. */ mime_type_t * /* O - Matching file type definition */ mimeType(mime_t *mime, /* I - MIME database */ const char *super, /* I - Super-type name */ const char *type) /* I - Type name */ { mime_type_t key, /* MIME type search key */ *mt; /* Matching type */ DEBUG_printf(("mimeType(mime=%p, super=\"%s\", type=\"%s\")", mime, super, type)); /* * Range check input... */ if (!mime || !super || !type) { DEBUG_puts("1mimeType: Returning NULL."); return (NULL); } /* * Lookup the type in the array... */ strlcpy(key.super, super, sizeof(key.super)); strlcpy(key.type, type, sizeof(key.type)); mt = (mime_type_t *)cupsArrayFind(mime->types, &key); DEBUG_printf(("1mimeType: Returning %p.", mt)); return (mt); } /* * 'mime_compare_types()' - Compare two MIME super/type names. */ static int /* O - Result of comparison */ mime_compare_types(mime_type_t *t0, /* I - First type */ mime_type_t *t1) /* I - Second type */ { int i; /* Result of comparison */ if ((i = _cups_strcasecmp(t0->super, t1->super)) == 0) i = _cups_strcasecmp(t0->type, t1->type); return (i); } /* * 'mime_check_rules()' - Check each rule in a list. */ static int /* O - 1 if match, 0 if no match */ mime_check_rules( const char *filename, /* I - Filename */ _mime_filebuf_t *fb, /* I - File to check */ mime_magic_t *rules) /* I - Rules to check */ { int n; /* Looping var */ int region; /* Region to look at */ int logic, /* Logic to apply */ result; /* Result of test */ unsigned intv; /* Integer value */ short shortv; /* Short value */ unsigned char *bufptr; /* Pointer into buffer */ DEBUG_printf(("4mime_check_rules(filename=\"%s\", fb=%p, rules=%p)", filename, fb, rules)); if (rules == NULL) return (0); if (rules->parent == NULL) logic = MIME_MAGIC_OR; else logic = rules->parent->op; result = 0; while (rules != NULL) { /* * Compute the result of this rule... */ switch (rules->op) { case MIME_MAGIC_MATCH : result = mime_patmatch(filename, rules->value.matchv); break; case MIME_MAGIC_ASCII : /* * Load the buffer if necessary... */ if (fb->offset < 0 || rules->offset < fb->offset || (rules->offset + rules->length) > (fb->offset + fb->length)) { /* * Reload file buffer... */ cupsFileSeek(fb->fp, rules->offset); fb->length = cupsFileRead(fb->fp, (char *)fb->buffer, sizeof(fb->buffer)); fb->offset = rules->offset; DEBUG_printf(("4mime_check_rules: MIME_MAGIC_ASCII fb->length=%d", fb->length)); } /* * Test for ASCII printable characters plus standard control chars. */ if ((rules->offset + rules->length) > (fb->offset + fb->length)) n = fb->offset + fb->length - rules->offset; else n = rules->length; bufptr = fb->buffer + rules->offset - fb->offset; while (n > 0) if ((*bufptr >= 32 && *bufptr <= 126) || (*bufptr >= 8 && *bufptr <= 13) || *bufptr == 26 || *bufptr == 27) { n --; bufptr ++; } else break; result = (n == 0); break; case MIME_MAGIC_PRINTABLE : /* * Load the buffer if necessary... */ if (fb->offset < 0 || rules->offset < fb->offset || (rules->offset + rules->length) > (fb->offset + fb->length)) { /* * Reload file buffer... */ cupsFileSeek(fb->fp, rules->offset); fb->length = cupsFileRead(fb->fp, (char *)fb->buffer, sizeof(fb->buffer)); fb->offset = rules->offset; DEBUG_printf(("4mime_check_rules: MIME_MAGIC_PRINTABLE fb->length=%d", fb->length)); } /* * Test for 8-bit printable characters plus standard control chars. */ if ((rules->offset + rules->length) > (fb->offset + fb->length)) n = fb->offset + fb->length - rules->offset; else n = rules->length; bufptr = fb->buffer + rules->offset - fb->offset; while (n > 0) if (*bufptr >= 128 || (*bufptr >= 32 && *bufptr <= 126) || (*bufptr >= 8 && *bufptr <= 13) || *bufptr == 26 || *bufptr == 27) { n --; bufptr ++; } else break; result = (n == 0); break; case MIME_MAGIC_REGEX : DEBUG_printf(("5mime_check_rules: regex(%d, \"%s\")", rules->offset, rules->value.stringv)); /* * Load the buffer if necessary... */ if (fb->offset < 0 || rules->offset < fb->offset || (rules->offset + rules->length) > (fb->offset + fb->length)) { /* * Reload file buffer... */ cupsFileSeek(fb->fp, rules->offset); fb->length = cupsFileRead(fb->fp, (char *)fb->buffer, sizeof(fb->buffer)); fb->offset = rules->offset; DEBUG_printf(("4mime_check_rules: MIME_MAGIC_REGEX fb->length=%d", fb->length)); DEBUG_printf(("5mime_check_rules: loaded %d byte fb->buffer at %d, starts " "with \"%c%c%c%c\".", fb->length, fb->offset, fb->buffer[0], fb->buffer[1], fb->buffer[2], fb->buffer[3])); } /* * Compare the buffer against the string. If the file is too * short then don't compare - it can't match... */ if (fb->length > 0) { char temp[MIME_MAX_BUFFER + 1]; /* Temporary buffer */ memcpy(temp, fb->buffer, (size_t)fb->length); temp[fb->length] = '\0'; result = !regexec(&(rules->value.rev), temp, 0, NULL, 0); } DEBUG_printf(("5mime_check_rules: result=%d", result)); break; case MIME_MAGIC_STRING : DEBUG_printf(("5mime_check_rules: string(%d, \"%s\")", rules->offset, rules->value.stringv)); /* * Load the buffer if necessary... */ if (fb->offset < 0 || rules->offset < fb->offset || (rules->offset + rules->length) > (fb->offset + fb->length)) { /* * Reload file buffer... */ cupsFileSeek(fb->fp, rules->offset); fb->length = cupsFileRead(fb->fp, (char *)fb->buffer, sizeof(fb->buffer)); fb->offset = rules->offset; DEBUG_printf(("4mime_check_rules: MIME_MAGIC_STRING fb->length=%d", fb->length)); DEBUG_printf(("5mime_check_rules: loaded %d byte fb->buffer at %d, starts " "with \"%c%c%c%c\".", fb->length, fb->offset, fb->buffer[0], fb->buffer[1], fb->buffer[2], fb->buffer[3])); } /* * Compare the buffer against the string. If the file is too * short then don't compare - it can't match... */ if ((rules->offset + rules->length) > (fb->offset + fb->length)) result = 0; else result = !memcmp(fb->buffer + rules->offset - fb->offset, rules->value.stringv, (size_t)rules->length); DEBUG_printf(("5mime_check_rules: result=%d", result)); break; case MIME_MAGIC_ISTRING : /* * Load the buffer if necessary... */ if (fb->offset < 0 || rules->offset < fb->offset || (rules->offset + rules->length) > (fb->offset + fb->length)) { /* * Reload file buffer... */ cupsFileSeek(fb->fp, rules->offset); fb->length = cupsFileRead(fb->fp, (char *)fb->buffer, sizeof(fb->buffer)); fb->offset = rules->offset; DEBUG_printf(("4mime_check_rules: MIME_MAGIC_ISTRING fb->length=%d", fb->length)); } /* * Compare the buffer against the string. If the file is too * short then don't compare - it can't match... */ if ((rules->offset + rules->length) > (fb->offset + fb->length)) result = 0; else result = !_cups_strncasecmp((char *)fb->buffer + rules->offset - fb->offset, rules->value.stringv, (size_t)rules->length); break; case MIME_MAGIC_CHAR : /* * Load the buffer if necessary... */ if (fb->offset < 0 || rules->offset < fb->offset) { /* * Reload file buffer... */ cupsFileSeek(fb->fp, rules->offset); fb->length = cupsFileRead(fb->fp, (char *)fb->buffer, sizeof(fb->buffer)); fb->offset = rules->offset; DEBUG_printf(("4mime_check_rules: MIME_MAGIC_CHAR fb->length=%d", fb->length)); } /* * Compare the character values; if the file is too short, it * can't match... */ if (fb->length < 1) result = 0; else result = (fb->buffer[rules->offset - fb->offset] == rules->value.charv); break; case MIME_MAGIC_SHORT : /* * Load the buffer if necessary... */ if (fb->offset < 0 || rules->offset < fb->offset || (rules->offset + 2) > (fb->offset + fb->length)) { /* * Reload file buffer... */ cupsFileSeek(fb->fp, rules->offset); fb->length = cupsFileRead(fb->fp, (char *)fb->buffer, sizeof(fb->buffer)); fb->offset = rules->offset; DEBUG_printf(("4mime_check_rules: MIME_MAGIC_SHORT fb->length=%d", fb->length)); } /* * Compare the short values; if the file is too short, it * can't match... */ if (fb->length < 2) result = 0; else { bufptr = fb->buffer + rules->offset - fb->offset; shortv = (short)((bufptr[0] << 8) | bufptr[1]); result = (shortv == rules->value.shortv); } break; case MIME_MAGIC_INT : /* * Load the buffer if necessary... */ if (fb->offset < 0 || rules->offset < fb->offset || (rules->offset + 4) > (fb->offset + fb->length)) { /* * Reload file buffer... */ cupsFileSeek(fb->fp, rules->offset); fb->length = cupsFileRead(fb->fp, (char *)fb->buffer, sizeof(fb->buffer)); fb->offset = rules->offset; DEBUG_printf(("4mime_check_rules: MIME_MAGIC_INT fb->length=%d", fb->length)); } /* * Compare the int values; if the file is too short, it * can't match... */ if (fb->length < 4) result = 0; else { bufptr = fb->buffer + rules->offset - fb->offset; intv = (unsigned)((((((bufptr[0] << 8) | bufptr[1]) << 8) | bufptr[2]) << 8) | bufptr[3]); result = (intv == rules->value.intv); } break; case MIME_MAGIC_LOCALE : #if defined(WIN32) || defined(__EMX__) || defined(__APPLE__) result = !strcmp(rules->value.localev, setlocale(LC_ALL, "")); #else result = !strcmp(rules->value.localev, setlocale(LC_MESSAGES, "")); #endif /* __APPLE__ */ break; case MIME_MAGIC_CONTAINS : /* * Load the buffer if necessary... */ if (fb->offset < 0 || rules->offset < fb->offset || (rules->offset + rules->region) > (fb->offset + fb->length)) { /* * Reload file buffer... */ cupsFileSeek(fb->fp, rules->offset); fb->length = cupsFileRead(fb->fp, (char *)fb->buffer, sizeof(fb->buffer)); fb->offset = rules->offset; DEBUG_printf(("4mime_check_rules: MIME_MAGIC_CONTAINS fb->length=%d", fb->length)); } /* * Compare the buffer against the string. If the file is too * short then don't compare - it can't match... */ if ((rules->offset + rules->length) > (fb->offset + fb->length)) result = 0; else { if (fb->length > rules->region) region = rules->region - rules->length; else region = fb->length - rules->length; for (n = 0; n < region; n ++) if ((result = (memcmp(fb->buffer + rules->offset - fb->offset + n, rules->value.stringv, (size_t)rules->length) == 0)) != 0) break; } break; default : if (rules->child != NULL) result = mime_check_rules(filename, fb, rules->child); else result = 0; break; } /* * If the logic is inverted, invert the result... */ if (rules->invert) result = !result; /* * OK, now if the current logic is OR and this result is true, the this * rule set is true. If the current logic is AND and this result is false, * the the rule set is false... */ DEBUG_printf(("5mime_check_rules: result of test %p (MIME_MAGIC_%s) is %d", rules, debug_ops[rules->op], result)); if ((result && logic == MIME_MAGIC_OR) || (!result && logic == MIME_MAGIC_AND)) return (result); /* * Otherwise the jury is still out on this one, so move to the next rule. */ rules = rules->next; } return (result); } /* * 'mime_patmatch()' - Pattern matching. */ static int /* O - 1 if match, 0 if no match */ mime_patmatch(const char *s, /* I - String to match against */ const char *pat) /* I - Pattern to match against */ { /* * Range check the input... */ if (s == NULL || pat == NULL) return (0); /* * Loop through the pattern and match strings, and stop if we come to a * point where the strings don't match or we find a complete match. */ while (*s != '\0' && *pat != '\0') { if (*pat == '*') { /* * Wildcard - 0 or more characters... */ pat ++; if (*pat == '\0') return (1); /* Last pattern char is *, so everything matches... */ /* * Test all remaining combinations until we get to the end of the string. */ while (*s != '\0') { if (mime_patmatch(s, pat)) return (1); s ++; } } else if (*pat == '?') { /* * Wildcard - 1 character... */ pat ++; s ++; continue; } else if (*pat == '[') { /* * Match a character from the input set [chars]... */ pat ++; while (*pat != ']' && *pat != '\0') if (*s == *pat) break; else pat ++; if (*pat == ']' || *pat == '\0') return (0); while (*pat != ']' && *pat != '\0') pat ++; if (*pat == ']') pat ++; continue; } else if (*pat == '\\') { /* * Handle quoted characters... */ pat ++; } /* * Stop if the pattern and string don't match... */ if (*pat++ != *s++) return (0); } /* * Done parsing the pattern and string; return 1 if the last character * matches and 0 otherwise... */ return (*s == *pat); } cups-2.2.7/scheduler/util.c000664 000765 000024 00000021500 13255074424 016250 0ustar00msweetstaff000000 000000 /* * Mini-daemon utility functions for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "util.h" #include #include #include #ifdef __APPLE__ # include extern char **environ; #endif /* __APPLE__ */ /* * 'cupsdCompareNames()' - Compare two names. * * This function basically does a _cups_strcasecmp() of the two strings, * but is also aware of numbers so that "a2" < "a100". */ int /* O - Result of comparison */ cupsdCompareNames(const char *s, /* I - First string */ const char *t) /* I - Second string */ { int diff, /* Difference between digits */ digits; /* Number of digits */ /* * Loop through both names, returning only when a difference is * seen. Also, compare whole numbers rather than just characters, too! */ while (*s && *t) { if (isdigit(*s & 255) && isdigit(*t & 255)) { /* * Got a number; start by skipping leading 0's... */ while (*s == '0') s ++; while (*t == '0') t ++; /* * Skip equal digits... */ while (isdigit(*s & 255) && *s == *t) { s ++; t ++; } /* * Bounce out if *s and *t aren't both digits... */ if (isdigit(*s & 255) && !isdigit(*t & 255)) return (1); else if (!isdigit(*s & 255) && isdigit(*t & 255)) return (-1); else if (!isdigit(*s & 255) || !isdigit(*t & 255)) continue; if (*s < *t) diff = -1; else diff = 1; /* * Figure out how many more digits there are... */ digits = 0; s ++; t ++; while (isdigit(*s & 255)) { digits ++; s ++; } while (isdigit(*t & 255)) { digits --; t ++; } /* * Return if the number or value of the digits is different... */ if (digits < 0) return (-1); else if (digits > 0) return (1); else if (diff) return (diff); } else if (tolower(*s) < tolower(*t)) return (-1); else if (tolower(*s) > tolower(*t)) return (1); else { s ++; t ++; } } /* * Return the results of the final comparison... */ if (*s) return (1); else if (*t) return (-1); else return (0); } /* * 'cupsdCreateStringsArray()' - Create a CUPS array of strings. */ cups_array_t * /* O - CUPS array */ cupsdCreateStringsArray(const char *s) /* I - Comma-delimited strings */ { if (!s || !*s) return (NULL); else return (_cupsArrayNewStrings(s, ',')); } /* * 'cupsdExec()' - Run a program with the correct environment. * * On macOS, we need to update the CFProcessPath environment variable that * is passed in the environment so the child can access its bundled resources. */ int /* O - exec() status */ cupsdExec(const char *command, /* I - Full path to program */ char **argv) /* I - Command-line arguments */ { #ifdef __APPLE__ int i, j; /* Looping vars */ char *envp[500], /* Array of environment variables */ cfprocesspath[1024], /* CFProcessPath environment variable */ linkpath[1024]; /* Link path for symlinks... */ int linkbytes; /* Bytes for link path */ /* * Some macOS programs are bundled and need the CFProcessPath environment * variable defined. If the command is a symlink, resolve the link and point * to the resolved location, otherwise, use the command path itself. */ if ((linkbytes = readlink(command, linkpath, sizeof(linkpath) - 1)) > 0) { /* * Yes, this is a symlink to the actual program, nul-terminate and * use it... */ linkpath[linkbytes] = '\0'; if (linkpath[0] == '/') snprintf(cfprocesspath, sizeof(cfprocesspath), "CFProcessPath=%s", linkpath); else snprintf(cfprocesspath, sizeof(cfprocesspath), "CFProcessPath=%s/%s", dirname((char *)command), linkpath); } else snprintf(cfprocesspath, sizeof(cfprocesspath), "CFProcessPath=%s", command); envp[0] = cfprocesspath; /* * Copy the rest of the environment except for any CFProcessPath that may * already be there... */ for (i = 1, j = 0; environ[j] && i < (int)(sizeof(envp) / sizeof(envp[0]) - 1); j ++) if (strncmp(environ[j], "CFProcessPath=", 14)) envp[i ++] = environ[j]; envp[i] = NULL; /* * Use execve() to run the program... */ return (execve(command, argv, envp)); #else /* * On other operating systems, just call execv() to use the same environment * variables as the parent... */ return (execv(command, argv)); #endif /* __APPLE__ */ } /* * 'cupsdPipeCommand()' - Read output from a command. */ cups_file_t * /* O - CUPS file or NULL on error */ cupsdPipeCommand(int *pid, /* O - Process ID or 0 on error */ const char *command, /* I - Command to run */ char **argv, /* I - Arguments to pass to command */ uid_t user) /* I - User to run as or 0 for current */ { int fd, /* Temporary file descriptor */ fds[2]; /* Pipe file descriptors */ /* * First create the pipe... */ if (pipe(fds)) { *pid = 0; return (NULL); } /* * Set the "close on exec" flag on each end of the pipe... */ if (fcntl(fds[0], F_SETFD, fcntl(fds[0], F_GETFD) | FD_CLOEXEC)) { close(fds[0]); close(fds[1]); *pid = 0; return (NULL); } if (fcntl(fds[1], F_SETFD, fcntl(fds[1], F_GETFD) | FD_CLOEXEC)) { close(fds[0]); close(fds[1]); *pid = 0; return (NULL); } /* * Then run the command... */ if ((*pid = fork()) < 0) { /* * Unable to fork! */ *pid = 0; close(fds[0]); close(fds[1]); return (NULL); } else if (!*pid) { /* * Child comes here... */ if (!getuid() && user) setuid(user); /* Run as restricted user */ if ((fd = open("/dev/null", O_RDONLY)) > 0) { dup2(fd, 0); /* pipe */ close(fds[1]); cupsdExec(command, argv); exit(errno); } /* * Parent comes here, open the input side of the pipe... */ close(fds[1]); return (cupsFileOpenFd(fds[0], "r")); } /* * 'cupsdSendIPPGroup()' - Send a group tag. */ void cupsdSendIPPGroup(ipp_tag_t group_tag) /* I - Group tag */ { /* * Send IPP group tag (1 byte)... */ putchar(group_tag); } /* * 'cupsdSendIPPHeader()' - Send the IPP response header. */ void cupsdSendIPPHeader( ipp_status_t status_code, /* I - Status code */ int request_id) /* I - Request ID */ { /* * Send IPP/1.1 response header: version number (2 bytes), status code * (2 bytes), and request ID (4 bytes)... * * TODO: Add version number (IPP/2.x and IPP/1.0) support. */ putchar(1); putchar(1); putchar(status_code >> 8); putchar(status_code); putchar(request_id >> 24); putchar(request_id >> 16); putchar(request_id >> 8); putchar(request_id); } /* * 'cupsdSendIPPInteger()' - Send an integer attribute. */ void cupsdSendIPPInteger( ipp_tag_t value_tag, /* I - Value tag */ const char *name, /* I - Attribute name */ int value) /* I - Attribute value */ { size_t len; /* Length of attribute name */ /* * Send IPP integer value: value tag (1 byte), name length (2 bytes), * name string (without nul), value length (2 bytes), and value (4 bytes)... */ putchar(value_tag); len = strlen(name); putchar((int)(len >> 8)); putchar((int)len); fputs(name, stdout); putchar(0); putchar(4); putchar(value >> 24); putchar(value >> 16); putchar(value >> 8); putchar(value); } /* * 'cupsdSendIPPString()' - Send a string attribute. */ void cupsdSendIPPString( ipp_tag_t value_tag, /* I - Value tag */ const char *name, /* I - Attribute name */ const char *value) /* I - Attribute value */ { size_t len; /* Length of attribute name */ /* * Send IPP string value: value tag (1 byte), name length (2 bytes), * name string (without nul), value length (2 bytes), and value string * (without nul)... */ putchar(value_tag); len = strlen(name); putchar((int)(len >> 8)); putchar((int)len); fputs(name, stdout); len = strlen(value); putchar((int)(len >> 8)); putchar((int)len); fputs(value, stdout); } /* * 'cupsdSendIPPTrailer()' - Send the end-of-message tag. */ void cupsdSendIPPTrailer(void) { putchar(IPP_TAG_END); fflush(stdout); } cups-2.2.7/scheduler/util.h000664 000765 000024 00000003171 13255074424 016261 0ustar00msweetstaff000000 000000 /* * Mini-daemon utility definitions for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #ifndef _CUPSD_UTIL_H_ # define _CUPSD_UTIL_H_ /* * Include necessary headers... */ # include # include # include /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Types... */ typedef int (*cupsd_compare_func_t)(const void *, const void *); /* * Prototypes... */ extern int cupsdCompareNames(const char *s, const char *t); extern cups_array_t *cupsdCreateStringsArray(const char *s); extern int cupsdExec(const char *command, char **argv); extern cups_file_t *cupsdPipeCommand(int *pid, const char *command, char **argv, uid_t user); extern void cupsdSendIPPGroup(ipp_tag_t group_tag); extern void cupsdSendIPPHeader(ipp_status_t status_code, int request_id); extern void cupsdSendIPPInteger(ipp_tag_t value_tag, const char *name, int value); extern void cupsdSendIPPString(ipp_tag_t value_tag, const char *name, const char *value); extern void cupsdSendIPPTrailer(void); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPSD_UTIL_H_ */ cups-2.2.7/ppdc/Dependencies000664 000765 000024 00000030232 13255074424 016412 0ustar00msweetstaff000000 000000 ppdc-array.o: ppdc-array.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-attr.o: ppdc-attr.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-catalog.o: ppdc-catalog.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-choice.o: ppdc-choice.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-constraint.o: ppdc-constraint.cxx ppdc-private.h ppdc.h \ ../cups/file.h ../cups/versioning.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/pwg.h \ ../cups/thread-private.h ppdc-driver.o: ppdc-driver.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-file.o: ppdc-file.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-filter.o: ppdc-filter.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-font.o: ppdc-font.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-group.o: ppdc-group.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-import.o: ppdc-import.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ../cups/ppd.h \ ../cups/raster.h ppdc-mediasize.o: ppdc-mediasize.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-message.o: ppdc-message.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-option.o: ppdc-option.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-profile.o: ppdc-profile.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-shared.o: ppdc-shared.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-source.o: ppdc-source.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ../cups/raster.h \ ../data/epson.h ../data/hp.h ../data/label.h ppdc-string.o: ppdc-string.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc-variable.o: ppdc-variable.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h genstrings.o: genstrings.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdc.o: ppdc.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdhtml.o: ppdhtml.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdi.o: ppdi.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h ppdmerge.o: ppdmerge.cxx ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/ppd-private.h ../cups/ppd.h \ ../cups/raster.h ppdpo.o: ppdpo.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h testcatalog.o: testcatalog.cxx ppdc-private.h ppdc.h ../cups/file.h \ ../cups/versioning.h ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/pwg.h ../cups/thread-private.h cups-2.2.7/ppdc/foo-fr.po000664 000765 000024 00000000323 13255074424 015627 0ustar00msweetstaff000000 000000 msgid "A Serious Error" msgstr "La Error Serious" msgid "http://foo.com/serious.html" msgstr "http://foo.com/fr/serious.html" msgid "Foo Letter" msgstr "La Foo Letter" msgid "Foo Photo" msgstr "La Foo Photo" cups-2.2.7/ppdc/foo.drv000664 000765 000024 00000036374 13255074424 015416 0ustar00msweetstaff000000 000000 // // "$Id$" // // PPD file compiler test data file for CUPS. // // Copyright 2007-2011 by Apple Inc. // Copyright 1997-2003 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // file is missing or damaged, see the license at "http://www.cups.org/". // /* * C-style comments are supported. */ // // C++-style comments are supported. // // // Include the common media size definitions... // // #include directives support both to include a standard file // and "name" or just name without the quotes for a local file. Local // files resolve relative to the current file's path. Unlike C/C++, // #include does not look in multiple directories, and // #include "name" does not look in the standard directory. // #include // // Include the CUPS raster definitions... // #include // // Include the standard CUPS fonts... // #include // // Define variables using the #define directive. In this case we // are defining constants for the model number, which is used by // our imaginary rastertofoo filter to determine which model-specific // features to use/support. // #define MODEL_BW 0 #define MODEL_COLOR 1 #define MODEL_LASER 0 #define MODEL_PHOTO 2 // // Media sizes are defined using the #media directive. The order of // values is: size name/text, width, length. // // "Size name" is an alphanumeric string of up to 40 characters as // defined by the Adobe PPD specification. // // "Size text" is a text string of up to 80 characters as defined by // the Adobe PPD specification. // // "Width" and "length" are the width and length of the media size. // Numbers by themselves represent points (72 points = 1 inch). The // suffixes "cm", "ft", "in", "m", "mm", and "pt" are recognized to // specify centimeters, feet, inches, meters, millimeters, and points, // respectively. // #media "FooLetter/Foo Letter" 8in 10in #media "FooPhoto/Foo Photo" 200mm 300mm // // Message catalogs can be included using #po... // #po fr foo-fr.po // // Specify that the drivers use all of the standard base fonts... // Font * // // All copyright lines are put at the top of the PPD file in order // of their appearance. Copyright text can span multiple lines and // will be properly included in the PPD file with comment prefixes // on each line. // // First an MIT-style copyright/license notice... // Copyright "Copyright 2007 by Foo Industries." Copyright " Permission is granted for redistribution of this file as long as this copyright notice is intact and the contents of the file are not altered in any way from their original form. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. " // // Then a GPL notice... // Copyright "Copyright 2007 by Foo Industries." Copyright " This software is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this software; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA " // // All printer drivers must define the manufacturer, model, PC // filename, and version strings; since this test file contains // drivers for an imaginary manufacturer "Foo", all of the drivers // listed in this file share common manufacturer and version // strings. // Manufacturer "Foo" Version 1.0 // // Printer drivers can access driver-specific attributes in a PPD // file; these attributes are specified using lines of the form: // // Attribute name selector value // // "Name" is the name of the attribute and should start with either // the "cups" prefix or the name of the vendor, e.g. "hpFoo", // "epsonBar", etc. The name can be any alphanumeric character (a-z, // A-Z, and 0-9) and cannot be a common prefix of another attribute, // e.g. "fooLines" and "fooLinesPerInch" cannot be in the same file. // // "Selector" is a selector string containing any characters except // colon (:). Typically this will be one or more keywords separated // by the forward slash (/), however the empty string ("") can be used // to omit the selector. // // "Value" is a quoted value string that can contain any printable // characters except the double quote ("). Hexadecimal numbers // inside angle brackets () can be used to substitute escape // codes and other special characters. // Attribute fooOutputFormat "" "PCL" Attribute fooPJL Begin "<1B>%-12345X@PJL<0D0A>" Attribute fooPJL Enter/PCL "@PJL ENTER LANGUAGE=PCL<0D0A>" Attribute fooPJL End "<1B>%-12345X@PJL END JOB<0D0A>" // // Most printer drivers use filters; exceptions include PostScript // printers and PPD files for software RIPs. // // The format is: // // Filter mime-type cost program // // The "mime-type" field defines the MIME type that the filter program // accepts; for CUPS raster printer drivers, this will be // "application/vnd.cups-raster". // // The "cost" field defines the relative cost of the filter in terms of // both CPU and memory usage, and is used to limit the number of // simultaneous jobs in some configurations. Most raster filters should // have a cost of 100, unless the filter does no dithering - then a cost // of 33 is more appropriate. // // The "program" field defined the filter program to run; use the null // filter "-" to define a MIME type that the printer accepts directly. // If no path information is provided, then the program will be run // from the standard CUPS filter directory, usually // /usr/lib/cups/filter. // // When compiling PPD files for PostScript capable devices that use // additional filters, add a null filter for the MIME type // "application/vnd.cups-postscript" so that printer commands, user // job filters, and page markings can be added to the PostScript // output that is sent to the printer. // Filter application/vnd.cups-raster 100 rastertofoo // // Attributes are included thusly... // Attribute cupsIPPReason "com.foo-serious-error/A Serious Error" "http://foo.com/serious.html" // // Curley braces are used for grouping common data and for isolating // individual printer models. All data values are inherited *except* // for the PCFilename and ModelName strings. // { // // Define two printer drivers that support only the FooLetter and // FooPhoto media size. One is color, the other is black-and-white. // // Both printers share two MediaSize definitions; the name listed // after the MediaSize keyword must be one of the Adobe standard // names listed in the PPD specification or any named size defined // using the #media directive. // // Default options are indicated by placing an asterisk (*) before // the keyword. // // For custom size and margin specification, see the next group of // printer drivers. // MediaSize FooLetter *MediaSize FooPhoto // // These imaginary printers support printing at 300, 600x300, // and 600 DPI. We'll use the old-style Resolution convenience // keyword which accepts the following parameters: colorspace/ // order, bits-per-color, row count, row feed, row step, and // name/text. // // The name must be of the form NNNsuffix or NNNxMMMsuffix, // where NNN and MMM represent the X and Y resolution in dots // per inch. // Resolution - 8 0 0 0 "300dpi/300 DPI" Resolution - 8 0 0 0 "600x300dpi/600 x 300 DPI" *Resolution - 8 0 0 0 "600dpi/600 DPI" // // One printer is grayscale only, and the other does grayscale // and color. Define the grayscale color model for both printers // using the old-style ColorModel convenience keyword which // accepts the name/text, colorspace, color order, and compression // parameters. // ColorModel Gray/Grayscale w chunked 0 { // // The first sub-group contains the grayscale printer, which // only needs the model name, PC filename, and model number // values set... // // The ModelName keyword defines the string that is shown to // the user. // ModelName "Mono Photo Printer" // // The ModelNumber keyword defines the cupsModelNumber // attribute value. We use the "(name name)" notation // to perform a bitwise OR of the #define'd constants. // ModelNumber ($MODEL_BW $MODEL_PHOTO) // // The PCFileName keyword defines the filename of the PPD // file and should be 8 characters or less + the .ppd // extension. // PCFileName "foogphot.ppd" } { // // The second sub-group contains the color printer, which // needs another ColorModel definition along with the model // name, PC filename, and model number values. For fun, we'll // add some input slots (paper trays) as well. // // The ModelName keyword defines the string that is shown to // the user. // ModelName "Color Photo Printer" // // The ModelNumber keyword defines the cupsModelNumber // attribute value. We use the "(name name)" notation // to perform a bitwise OR of the #define'd constants. // ModelNumber ($MODEL_COLOR $MODEL_PHOTO) // // The PCFileName keyword defines the filename of the PPD // file and should be 8 characters or less + the .ppd // extension. // PCFileName "foocphot.ppd" // // This printer does color printing, too, so add it and make // RGB the default... // ColorDevice Yes *ColorModel RGB/Color rgb chunked 0 // // The old-style InputSlot keyword accepts tray definitions // of the form: // // InputSlot position name/text // InputSlot 0 "Upper/Main Paper Tray" InputSlot 1 "LargeCapacity/Large Paper Tray" } } { // // Define two printer drivers that support two typical laser // printers with custom page sizes. One is color, the other is // black-and-white. // // Both printers share several MediaSize definitions and support // custom page sizes from 3x5 to 13x19 inches. // // All US media sizes use hardware margins of 0.25 inches on the sides // and 12 points (1/6th inch) at the top and bottom. European sizes // and custom sizes use margins of 12 points all around. // // The order of the HWMargins numbers are left, bottom, right, and top. // The current HWMargins values are used when defining each media size. // The last HWMargins values are used for custom page size margins. // HWMargins 0.25in 12pt 0.25in 12pt *MediaSize Letter MediaSize Legal MediaSize Tabloid MediaSize TabloidExtra HWMargins 12pt 12pt 12pt 12pt MediaSize A4 MediaSize A3 // // Specify that custom/variable paper sizes are supported, and the // range of sizes that are supported... // VariablePaperSize Yes MinSize 3in 5in MaxSize 13in 19in // // These imaginary printers support printing at 600 and 1200 DPI. // We'll use the new Option and Choice keywords to define the // Resolution options... // // Option option-name option-text option-type // Choice choice-name choice-text code // // "Option-type" is the type of option: boolean, pickone, or pickmany. // Option Resolution PickOne AnySetup 10 Choice "600dpi/600 DPI" "<>setpagedevice" Choice "1200dpi/1200 DPI" "<>setpagedevice" // // One printer is grayscale only, and the other does grayscale // and color. Define the grayscale color model for both printers // using the new Option and Choice keywords. // Option "ColorModel/Color Mode" PickOne AnySetup 10 Choice Gray/Grayscale "<>setpagedevice" // // Both printers provide two paper trays, which we'll define using // the new Option and Choice keywords... // Option "InputSlot/Input Slot" PickOne AnySetup 10 Choice "Upper/Main Paper Tray" "<>setpagedevice" Choice "LargeCapacity/Large Paper Tray" "<>setpagedevice" // // Both printers support duplexing... // // The Duplex keyword accepts values of "none" (no duplexing capability), // "normal" (standard duplexing capability), and "flip" (auto-duplex that // requires the back side to be flipped by the RIP...) // Duplex normal { // // The first sub-group contains the grayscale printer, which // only needs the model name, PC filename, and model number // values set... // // The ModelName keyword defines the string that is shown to // the user. // ModelName "Mono Laser Printer" // // The ModelNumber keyword defines the cupsModelNumber // attribute value. We use the "(name name)" notation // to perform a bitwise OR of the #define'd constants. // ModelNumber ($MODEL_BW $MODEL_LASER) // // The PCFileName keyword defines the filename of the PPD // file and should be 8 characters or less + the .ppd // extension. // PCFileName "fooglasr.ppd" } { // // The second sub-group contains the color printer, which // needs another ColorModel definition along with the model // name, PC filename, and model number values. // // The ModelName keyword defines the string that is shown to // the user. // ModelName "Color Laser Printer" // // The ModelNumber keyword defines the cupsModelNumber // attribute value. We use the "(name name)" notation // to perform a bitwise OR of the #define'd constants. // ModelNumber ($MODEL_COLOR $MODEL_LASER) // // The PCFileName keyword defines the filename of the PPD // file and should be 8 characters or less + the .ppd // extension. // PCFileName "fooclasr.ppd" // // This printer does color printing, too, so add it and make // RGB the default... // ColorDevice Yes Option "ColorModel/Color Mode" PickOne AnySetup 10 *Choice RGB/Color "<>setpagedevice" } } // // End of "$Id$". // cups-2.2.7/ppdc/genstrings.cxx000664 000765 000024 00000012154 13255074424 017013 0ustar00msweetstaff000000 000000 // // GNU gettext message generator for the CUPS PPD Compiler. // // This program is used to generate a dummy source file containing all of // the standard media and sample driver strings. The results are picked up // by GNU gettext and placed in the CUPS message catalog. // // Copyright 2008-2014 by Apple Inc. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // Usage: // // ./genstrings >sample.c // // // Include necessary headers... // #include "ppdc-private.h" #include // // Local functions... // static void add_ui_strings(ppdcDriver *d, ppdcCatalog *catalog); static void write_cstring(const char *s); // // 'main()' - Main entry for the PPD compiler. // int // O - Exit status main(void) { ppdcSource *src; // PPD source file data ppdcCatalog *catalog; // Catalog to hold all of the UI strings // Make sure we are in the right place... if (access("../data", 0) || access("sample.drv", 0)) { puts("You must run genstrings from the ppdc directory."); return (1); } // Load the sample drivers... ppdcSource::add_include("../data"); src = new ppdcSource("sample.drv"); catalog = new ppdcCatalog(NULL); catalog->add_message("ISOLatin1"); catalog->add_message("English"); // Add the media size strings... ppdcMediaSize *size; // Current media size for (size = (ppdcMediaSize *)src->sizes->first(); size; size = (ppdcMediaSize *)src->sizes->next()) catalog->add_message(size->text->value); // Then collect all of the UI strings from the sample drivers... ppdcDriver *d; // Current driver for (d = (ppdcDriver *)src->drivers->first(); d; d = (ppdcDriver *)src->drivers->next()) add_ui_strings(d, catalog); // Finally, write all of the strings... ppdcMessage *message; for (message = (ppdcMessage *)catalog->messages->first(); message; message = (ppdcMessage *)catalog->messages->next()) write_cstring(message->id->value); src->release(); catalog->release(); // Return with no errors. return (0); } // // 'add_ui_strings()' - Add all UI strings from the driver. // static void add_ui_strings(ppdcDriver *d, // I - Driver data ppdcCatalog *catalog) // I - Message catalog { // Add the make/model/language strings... catalog->add_message(d->manufacturer->value); catalog->add_message(d->model_name->value); // Add the group/option/choice strings... ppdcGroup *g; // Current group ppdcOption *o; // Current option ppdcChoice *c; // Current choice for (g = (ppdcGroup *)d->groups->first(); g; g = (ppdcGroup *)d->groups->next()) { if (!g->options->count) continue; if (_cups_strcasecmp(g->name->value, "General")) catalog->add_message(g->text->value); for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next()) { if (!o->choices->count) continue; if (o->text->value && strcmp(o->name->value, o->text->value)) catalog->add_message(o->text->value); else catalog->add_message(o->name->value); for (c = (ppdcChoice *)o->choices->first(); c; c = (ppdcChoice *)o->choices->next()) if (c->text->value && strcmp(c->name->value, c->text->value)) catalog->add_message(c->text->value); else catalog->add_message(c->name->value); } } // Add profile and preset strings... ppdcAttr *a; // Current attribute for (a = (ppdcAttr *)d->attrs->first(); a; a = (ppdcAttr *)d->attrs->next()) { if (a->text->value && a->text->value[0] && (a->localizable || !strncmp(a->name->value, "Custom", 6) || !strncmp(a->name->value, "ParamCustom", 11) || !strcmp(a->name->value, "APCustomColorMatchingName") || !strcmp(a->name->value, "APPrinterPreset") || !strcmp(a->name->value, "cupsICCProfile") || !strcmp(a->name->value, "cupsIPPReason") || !strcmp(a->name->value, "cupsMarkerName"))) { catalog->add_message(a->text->value); if ((a->localizable && a->value->value[0]) || !strcmp(a->name->value, "cupsIPPReason")) catalog->add_message(a->value->value); } else if (!strncmp(a->name->value, "Custom", 6) || !strncmp(a->name->value, "ParamCustom", 11)) catalog->add_message(a->name->value); } } // // 'write_cstring()' - Write a translation string as a valid C string to stdout. // static void write_cstring(const char *s) /* I - String to write */ { fputs("_(\"", stdout); if (s) { while (*s) { if (*s == '\\') fputs("\\\\", stdout); else if (*s == '\"') fputs("\\\"", stdout); else if (*s == '\t') fputs("\\t", stdout); else if (*s == '\n') fputs("\\n", stdout); else putchar(*s); s ++; } } puts("\");"); } cups-2.2.7/ppdc/Makefile000664 000765 000024 00000016537 13255074424 015555 0ustar00msweetstaff000000 000000 # # Makefile for the CUPS PPD Compiler. # # Copyright 2007-2017 by Apple Inc. # Copyright 2002-2006 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # # # Include standard definitions... # include ../Makedefs # # Object files... # LIBOBJS = \ ppdc-array.o \ ppdc-attr.o \ ppdc-catalog.o \ ppdc-choice.o \ ppdc-constraint.o \ ppdc-driver.o \ ppdc-file.o \ ppdc-filter.o \ ppdc-font.o \ ppdc-group.o \ ppdc-import.o \ ppdc-mediasize.o \ ppdc-message.o \ ppdc-option.o \ ppdc-profile.o \ ppdc-shared.o \ ppdc-source.o \ ppdc-string.o \ ppdc-variable.o OBJS = \ $(LIBOBJS) \ genstrings.o \ ppdc.o \ ppdhtml.o \ ppdi.o \ ppdmerge.o \ ppdpo.o \ testcatalog.o LIBTARGETS = \ $(LIBCUPSPPDC) \ libcupsppdc.a UNITTARGETS = \ ppdc-static \ ppdi-static \ testcatalog EXECTARGETS = \ ppdc \ ppdhtml \ ppdi \ ppdmerge \ ppdpo TARGETS = \ $(LIBTARGETS) \ $(EXECTARGETS) \ $(LOCALTARGET) # # Make everything... # all: $(TARGETS) # # Make library targets... # libs: $(LIBTARGETS) # # Make unit tests... # unittests: $(UNITTARGETS) # # Clean everything... # clean: $(RM) $(OBJS) core $(RM) *.bak *.bck core.* $(RM) $(TARGETS) $(UNITTARGETS) genstrings $(RM) -r ppd ppd2 $(RM) sample-import.drv sample.c test.drv $(RM) libcupsppdc.so libcupsppdc.dylib # # Update dependencies... # depend: $(CXX) -MM $(ALL_CXXFLAGS) $(OBJS:.o=.cxx) >Dependencies # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: $(INSTALL_DIR) $(DATADIR)/drv $(INSTALL_DATA) sample.drv $(DATADIR)/drv # # Install programs... # install-exec: echo Installing PPD compiler programs... $(INSTALL_DIR) $(BINDIR) for file in $(EXECTARGETS); do \ $(INSTALL_BIN) $$file $(BINDIR); \ done if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ for file in $(EXECTARGETS); do \ cp $$file $(SYMROOT); \ dsymutil $(SYMROOT)/$$file; \ done \ fi # # Install headers... # install-headers: if test "x$(privateinclude)" != x; then \ echo Installing private header files into $(PRIVATEINCLUDE)...; \ $(INSTALL_DIR) -m 755 $(PRIVATEINCLUDE); \ $(INSTALL_DATA) ppdc.h $(PRIVATEINCLUDE); \ fi # # Install libraries... # install-libs: $(INSTALLSTATIC) echo Installing libraries in $(LIBDIR)... $(INSTALL_DIR) -m 755 $(LIBDIR) $(INSTALL_LIB) $(LIBCUPSPPDC) $(LIBDIR) if test $(LIBCUPSPPDC) = "libcupsppdc.so.1"; then \ $(RM) $(LIBDIR)/`basename $(LIBCUPSPPDC) .1`; \ $(LN) $(LIBCUPSPPDC) $(LIBDIR)/`basename $(LIBCUPSPPDC) .1`; \ fi if test $(LIBCUPSPPDC) = "libcupsppdc.1.dylib"; then \ $(RM) $(LIBDIR)/libcupsppdc.dylib; \ $(LN) $(LIBCUPSPPDC) $(LIBDIR)/libcupsppdc.dylib; \ fi if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ cp $(LIBCUPSPPDC) $(SYMROOT); \ dsymutil $(SYMROOT)/$(LIBCUPSPPDC); \ fi installstatic: $(INSTALL_DIR) -m 755 $(LIBDIR) $(INSTALL_LIB) -m 755 libcupsppdc.a $(LIBDIR) $(RANLIB) $(LIBDIR)/libcupsppdc.a $(CHMOD) 555 $(LIBDIR)/libcupsppdc.a # # Uninstall... # uninstall: for file in $(EXECTARGETS); do \ $(RM) $(BINDIR)/$$file; \ done $(RM) $(DATADIR)/drv/sample.drv $(RMDIR) $(DATADIR)/drv $(RM) $(LIBDIR)/libcupsppdc.1.dylib $(RM) $(LIBDIR)/libcupsppdc.a $(RM) $(LIBDIR)/libcupsppdc.dylib $(RM) $(LIBDIR)/libcupsppdc.so $(RM) $(LIBDIR)/libcupsppdc.so.1 -$(RMDIR) $(LIBDIR) -if test "x$(privateinclude)" != x; then \ $(RM) $(PRIVATEINCLUDE)/ppdc.h; \ $(RMDIR) $(PRIVATEINCLUDE); \ fi # # Local programs (not built when cross-compiling...) # local: genstrings # # genstrings - generate GNU gettext strings. # genstrings: genstrings.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC) \ sample.drv ../data/media.defs echo Linking $@... $(LD_CXX) $(ARCHFLAGS) $(LDFLAGS) -o genstrings genstrings.o \ libcupsppdc.a ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) \ $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) echo Generating localization strings... ./genstrings >sample.c # # ppdc, the PPD compiler. # ppdc: ppdc.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS) echo Linking $@... $(LD_CXX) $(LDFLAGS) -o $@ ppdc.o -L. -lcupsppdc $(LIBS) ppdc-static: ppdc.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC) foo.drv foo-fr.po echo Linking $@... $(LD_CXX) $(ARCHFLAGS) $(LDFLAGS) -o ppdc-static ppdc.o libcupsppdc.a \ ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \ $(COMMONLIBS) $(LIBZ) echo Testing PPD compiler... ./ppdc-static -l en,fr -I ../data foo.drv ./ppdc-static -l en,fr -z -I ../data foo.drv # # ppdhtml, the PPD to HTML utility. # ppdhtml: ppdhtml.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS) echo Linking $@... $(LD_CXX) $(LDFLAGS) -o $@ ppdhtml.o -L. -lcupsppdc $(LIBS) # # ppdi, import PPD files. # ppdi: ppdi.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS) echo Linking $@... $(LD_CXX) $(LDFLAGS) -o $@ ppdi.o -L. -lcupsppdc $(LIBS) ppdi-static: ppdc-static ppdi.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CXX) $(ARCHFLAGS) $(LDFLAGS) -o ppdi-static ppdi.o libcupsppdc.a \ ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \ $(COMMONLIBS) $(LIBZ) echo Testing PPD importer... $(RM) -r ppd ppd2 sample-import.drv ./ppdc-static -l en -I ../data sample.drv ./ppdi-static -I ../data -o sample-import.drv ppd/* ./ppdc-static -l en -I ../data -d ppd2 sample-import.drv if diff -r ppd ppd2 >/dev/null; then \ echo PPD import OK; \ else \ echo PPD import FAILED; \ exit 1; \ fi # # ppdmerge, merge PPD files. # ppdmerge: ppdmerge.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CXX) $(LDFLAGS) -o $@ ppdmerge.o $(LIBS) # # ppdpo, create message catalog files. # ppdpo: ppdpo.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS) echo Linking $@... $(LD_CXX) $(LDFLAGS) -o $@ ppdpo.o -L. -lcupsppdc $(LIBS) # # testcatalog, test ppdcCatalog class. # testcatalog: testcatalog.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CXX) $(LDFLAGS) -o $@ testcatalog.o libcupsppdc.a \ ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \ $(COMMONLIBS) $(LIBZ) # # libcupsppdc.so.1 # libcupsppdc.so.1: $(LIBOBJS) ../cups/$(LIBCUPS) echo Linking $@... $(DSOXX) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(LINKCUPS) $(RM) `basename $@ .1` $(LN) $@ `basename $@ .1` # # libcupsppdc.1.dylib # libcupsppdc.1.dylib: $(LIBOBJS) ../cups/$(LIBCUPS) echo Creating export list for $@... nm -gm $(LIBOBJS) | grep "__text" | grep -v weak | awk '{print $$NF}' | sort >t.exp echo Linking $@... $(DSOXX) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \ -install_name $(libdir)/$@ \ -current_version 1.0.0 \ -compatibility_version 1.0.0 \ -exported_symbols_list t.exp \ $(LIBOBJS) $(LINKCUPS) $(COMMONLIBS) $(RM) libcupsppdc.dylib t.exp $(LN) $@ libcupsppdc.dylib # # libcupsppdc.la # libcupsppdc.la: $(LIBOBJS) ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) \ -version-info 1:0 $(LINKCUPS) # # libcupsppdc.a # libcupsppdc.a: $(LIBOBJS) echo Archiving $@... $(RM) $@ $(AR) $(ARFLAGS) $@ $(LIBOBJS) $(RANLIB) $@ # # Include dependencies... # include Dependencies cups-2.2.7/ppdc/ppdc-array.cxx000664 000765 000024 00000004512 13255074424 016671 0ustar00msweetstaff000000 000000 // // Array class for the CUPS PPD Compiler. // // Copyright 2007-2014 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcArray::ppdcArray()' - Create a new array. // ppdcArray::ppdcArray(ppdcArray *a) : ppdcShared() { PPDC_NEW; if (a) { count = a->count; alloc = count; if (count) { // Make a copy of the array... data = new ppdcShared *[count]; memcpy(data, a->data, (size_t)count * sizeof(ppdcShared *)); for (int i = 0; i < count; i ++) data[i]->retain(); } else data = 0; } else { count = 0; alloc = 0; data = 0; } current = 0; } // // 'ppdcArray::~ppdcArray()' - Destroy an array. // ppdcArray::~ppdcArray() { PPDC_DELETE; for (int i = 0; i < count; i ++) data[i]->release(); if (alloc) delete[] data; } // // 'ppdcArray::add()' - Add an element to an array. // void ppdcArray::add(ppdcShared *d) { ppdcShared **temp; if (count >= alloc) { alloc += 10; temp = new ppdcShared *[alloc]; memcpy(temp, data, (size_t)count * sizeof(ppdcShared *)); delete[] data; data = temp; } data[count++] = d; } // // 'ppdcArray::first()' - Return the first element in the array. // ppdcShared * ppdcArray::first() { current = 0; if (current >= count) return (0); else return (data[current ++]); } // // 'ppdcArray::next()' - Return the next element in the array. // ppdcShared * ppdcArray::next() { if (current >= count) return (0); else return (data[current ++]); } // // 'ppdcArray::remove()' - Remove an element from the array. // void ppdcArray::remove(ppdcShared *d) // I - Data element { int i; // Looping var for (i = 0; i < count; i ++) if (d == data[i]) break; if (i >= count) return; count --; d->release(); if (i < count) memmove(data + i, data + i + 1, (size_t)(count - i) * sizeof(ppdcShared *)); } cups-2.2.7/ppdc/ppdc-attr.cxx000664 000765 000024 00000002311 13255074424 016520 0ustar00msweetstaff000000 000000 // // Attribute class for the CUPS PPD Compiler. // // Copyright 2007-2009 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcAttr::ppdcAttr()' - Create an attribute. // ppdcAttr::ppdcAttr(const char *n, // I - Name const char *s, // I - Spec string const char *t, // I - Human-readable text const char *v, // I - Value bool loc) // I - Localize this attribute? : ppdcShared() { PPDC_NEW; name = new ppdcString(n); selector = new ppdcString(s); text = new ppdcString(t); value = new ppdcString(v); localizable = loc; } // // 'ppdcAttr::~ppdcAttr()' - Destroy an attribute. // ppdcAttr::~ppdcAttr() { PPDC_DELETE; name->release(); selector->release(); text->release(); value->release(); } cups-2.2.7/ppdc/ppdc-catalog.cxx000664 000765 000024 00000047223 13255074424 017173 0ustar00msweetstaff000000 000000 // // Shared message catalog class for the CUPS PPD Compiler. // // Copyright 2007-2017 by Apple Inc. // Copyright 2002-2006 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // Character encodings... // typedef enum { PPDC_CS_AUTO, PPDC_CS_UTF8, PPDC_CS_UTF16BE, PPDC_CS_UTF16LE } ppdc_cs_t; // // Local functions... // #if defined(__APPLE__) && defined(CUPS_BUNDLEDIR) static void apple_add_message(CFStringRef key, CFStringRef val, ppdcCatalog *c); #endif /* __APPLE__ && CUPS_BUNDLEDIR */ static int get_utf8(char *&ptr); static int get_utf16(cups_file_t *fp, ppdc_cs_t &cs); static int put_utf8(int ch, char *&ptr, char *end); static int put_utf16(cups_file_t *fp, int ch); // // 'ppdcCatalog::ppdcCatalog()' - Create a shared message catalog. // ppdcCatalog::ppdcCatalog(const char *l, // I - Locale const char *f) // I - Message catalog file : ppdcShared() { PPDC_NEW; locale = new ppdcString(l); filename = new ppdcString(f); messages = new ppdcArray(); if (l && strcmp(l, "en")) { // Try loading the base messages for this locale... char pofile[1024]; // Message catalog file #if defined(__APPLE__) && defined(CUPS_BUNDLEDIR) char applelang[256]; // Apple language ID CFURLRef url; // URL to cups.strings file CFReadStreamRef stream = NULL; // File stream CFPropertyListRef plist = NULL; // Localization file snprintf(pofile, sizeof(pofile), CUPS_BUNDLEDIR "/Resources/%s.lproj/cups.strings", _cupsAppleLanguage(l, applelang, sizeof(applelang))); if (access(pofile, 0)) { // Try alternate lproj directory names... const char *tl = l; // Temporary locale string if (!strncmp(l, "en", 2)) tl = "English"; else if (!strncmp(l, "nb", 2)) tl = "no"; else if (!strncmp(l, "nl", 2)) tl = "Dutch"; else if (!strncmp(l, "fr", 2)) tl = "French"; else if (!strncmp(l, "de", 2)) tl = "German"; else if (!strncmp(l, "it", 2)) tl = "Italian"; else if (!strncmp(l, "ja", 2)) tl = "Japanese"; else if (!strncmp(l, "es", 2)) tl = "Spanish"; snprintf(pofile, sizeof(pofile), CUPS_BUNDLEDIR "/Resources/%s.lproj/cups.strings", tl); } url = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (UInt8 *)pofile, (CFIndex)strlen(pofile), false); if (url) { stream = CFReadStreamCreateWithFile(kCFAllocatorDefault, url); if (stream) { /* * Read the property list containing the localization data. */ CFReadStreamOpen(stream); plist = CFPropertyListCreateWithStream(kCFAllocatorDefault, stream, 0, kCFPropertyListImmutable, NULL, NULL); if (plist && CFGetTypeID(plist) == CFDictionaryGetTypeID()) CFDictionaryApplyFunction((CFDictionaryRef)plist, (CFDictionaryApplierFunction)apple_add_message, this); if (plist) CFRelease(plist); CFRelease(stream); } CFRelease(url); } #else _cups_globals_t *cg = _cupsGlobals(); // Global information snprintf(pofile, sizeof(pofile), "%s/%s/cups_%s.po", cg->localedir, l, l); if (load_messages(pofile) && strchr(l, '_')) { // Try the base locale... char baseloc[3]; // Base locale... strlcpy(baseloc, l, sizeof(baseloc)); snprintf(pofile, sizeof(pofile), "%s/%s/cups_%s.po", cg->localedir, baseloc, baseloc); load_messages(pofile); } #endif /* __APPLE__ && CUPS_BUNDLEDIR */ } if (f && *f) load_messages(f); } // // 'ppdcCatalog::~ppdcCatalog()' - Destroy a shared message catalog. // ppdcCatalog::~ppdcCatalog() { PPDC_DELETE; locale->release(); filename->release(); messages->release(); } // // 'ppdcCatalog::add_message()' - Add a new message. // void ppdcCatalog::add_message( const char *id, // I - Message ID to add const char *string) // I - Translation string { ppdcMessage *m; // Current message char text[1024]; // Text to translate // Range check input... if (!id) return; // Verify that we don't already have the message ID... for (m = (ppdcMessage *)messages->first(); m; m = (ppdcMessage *)messages->next()) if (!strcmp(m->id->value, id)) { if (string) { m->string->release(); m->string = new ppdcString(string); } return; } // Add the message... if (!string) { snprintf(text, sizeof(text), "TRANSLATE %s", id); string = text; } messages->add(new ppdcMessage(id, string)); } // // 'ppdcCatalog::find_message()' - Find a message in a catalog... // const char * // O - Message text ppdcCatalog::find_message( const char *id) // I - Message ID { ppdcMessage *m; // Current message if (!*id) return (id); for (m = (ppdcMessage *)messages->first(); m; m = (ppdcMessage *)messages->next()) if (!strcmp(m->id->value, id)) return (m->string->value); return (id); } // // 'ppdcCatalog::load_messages()' - Load messages from a .po file. // int // O - 0 on success, -1 on failure ppdcCatalog::load_messages( const char *f) // I - Message catalog file { cups_file_t *fp; // Message file char line[4096], // Line buffer *ptr, // Pointer into buffer id[4096], // Translation ID str[4096]; // Translation string int linenum; // Line number // Open the message catalog file... if ((fp = cupsFileOpen(f, "r")) == NULL) return (-1); if ((ptr = (char *)strrchr(f, '.')) == NULL) goto unknown_load_format; else if (!strcmp(ptr, ".strings")) { /* * Read messages in macOS ".strings" format, which are either UTF-8/UTF-16 * text files of the format: * * "id" = "str"; * * Strings files can also contain C-style comments. */ ppdc_cs_t cs = PPDC_CS_AUTO; // Character set for file int ch; // Current character from file char *end; // End of buffer id[0] = '\0'; str[0] = '\0'; ptr = NULL; end = NULL; while ((ch = get_utf16(fp, cs)) != 0) { if (ptr) { if (ch == '\\') { if ((ch = get_utf16(fp, cs)) == 0) break; if (ch == 'n') ch = '\n'; else if (ch == 't') ch = '\t'; } else if (ch == '\"') { *ptr = '\0'; ptr = NULL; } if (ptr) put_utf8(ch, ptr, end); } else if (ch == '/') { // Start of a comment? if ((ch = get_utf16(fp, cs)) == 0) break; if (ch == '*') { // Skip C comment... int lastch = 0; while ((ch = get_utf16(fp, cs)) != 0) { if (ch == '/' && lastch == '*') break; lastch = ch; } } else if (ch == '/') { // Skip C++ comment... while ((ch = get_utf16(fp, cs)) != 0) if (ch == '\n') break; } } else if (ch == '\"') { // Start quoted string... if (id[0]) { ptr = str; end = str + sizeof(str) - 1; } else { ptr = id; end = id + sizeof(id) - 1; } } else if (ch == ';') { // Add string... add_message(id, str); id[0] = '\0'; } } } else if (!strcmp(ptr, ".po") || !strcmp(ptr, ".gz")) { /* * Read messages from the catalog file until EOF... * * The format is the GNU gettext .po format, which is fairly simple: * * msgid "some text" * msgstr "localized text" * * The ID and localized text can span multiple lines using the form: * * msgid "" * "some long text" * msgstr "" * "localized text spanning " * "multiple lines" */ int which, // In msgid? haveid, // Did we get a msgid string? havestr; // Did we get a msgstr string? linenum = 0; id[0] = '\0'; str[0] = '\0'; haveid = 0; havestr = 0; which = 0; while (cupsFileGets(fp, line, sizeof(line))) { linenum ++; // Skip blank and comment lines... if (line[0] == '#' || !line[0]) continue; // Strip the trailing quote... if ((ptr = (char *)strrchr(line, '\"')) == NULL) { _cupsLangPrintf(stderr, _("ppdc: Expected quoted string on line %d of %s."), linenum, f); cupsFileClose(fp); return (-1); } *ptr = '\0'; // Find start of value... if ((ptr = strchr(line, '\"')) == NULL) { _cupsLangPrintf(stderr, _("ppdc: Expected quoted string on line %d of %s."), linenum, f); cupsFileClose(fp); return (-1); } ptr ++; // Unquote the text... char *sptr, *dptr; // Source/destination pointers for (sptr = ptr, dptr = ptr; *sptr;) { if (*sptr == '\\') { sptr ++; if (isdigit(*sptr)) { *dptr = 0; while (isdigit(*sptr)) { *dptr = *dptr * 8 + *sptr - '0'; sptr ++; } dptr ++; } else { if (*sptr == 'n') *dptr++ = '\n'; else if (*sptr == 'r') *dptr++ = '\r'; else if (*sptr == 't') *dptr++ = '\t'; else *dptr++ = *sptr; sptr ++; } } else *dptr++ = *sptr++; } *dptr = '\0'; // Create or add to a message... if (!strncmp(line, "msgid", 5)) { if (haveid && havestr) add_message(id, str); strlcpy(id, ptr, sizeof(id)); str[0] = '\0'; haveid = 1; havestr = 0; which = 1; } else if (!strncmp(line, "msgstr", 6)) { if (!haveid) { _cupsLangPrintf(stderr, _("ppdc: Need a msgid line before any " "translation strings on line %d of %s."), linenum, f); cupsFileClose(fp); return (-1); } strlcpy(str, ptr, sizeof(str)); havestr = 1; which = 2; } else if (line[0] == '\"' && which == 2) strlcat(str, ptr, sizeof(str)); else if (line[0] == '\"' && which == 1) strlcat(id, ptr, sizeof(id)); else { _cupsLangPrintf(stderr, _("ppdc: Unexpected text on line %d of %s."), linenum, f); cupsFileClose(fp); return (-1); } } if (haveid && havestr) add_message(id, str); } else goto unknown_load_format; /* * Close the file and return... */ cupsFileClose(fp); return (0); /* * Unknown format error... */ unknown_load_format: _cupsLangPrintf(stderr, _("ppdc: Unknown message catalog format for \"%s\"."), f); cupsFileClose(fp); return (-1); } // // 'ppdcCatalog::save_messages()' - Save the messages to a .po file. // int // O - 0 on success, -1 on error ppdcCatalog::save_messages( const char *f) // I - File to save to { cups_file_t *fp; // Message file ppdcMessage *m; // Current message char *ptr; // Pointer into string int utf16; // Output UTF-16 .strings file? int ch; // Current character // Open the file... if ((ptr = (char *)strrchr(f, '.')) == NULL) return (-1); if (!strcmp(ptr, ".gz")) fp = cupsFileOpen(f, "w9"); else fp = cupsFileOpen(f, "w"); if (!fp) return (-1); // For .strings files, write a BOM for big-endian output... utf16 = !strcmp(ptr, ".strings"); if (utf16) put_utf16(fp, 0xfeff); // Loop through all of the messages... for (m = (ppdcMessage *)messages->first(); m; m = (ppdcMessage *)messages->next()) { if (utf16) { put_utf16(fp, '\"'); ptr = m->id->value; while ((ch = get_utf8(ptr)) != 0) switch (ch) { case '\n' : put_utf16(fp, '\\'); put_utf16(fp, 'n'); break; case '\\' : put_utf16(fp, '\\'); put_utf16(fp, '\\'); break; case '\"' : put_utf16(fp, '\\'); put_utf16(fp, '\"'); break; default : put_utf16(fp, ch); break; } put_utf16(fp, '\"'); put_utf16(fp, ' '); put_utf16(fp, '='); put_utf16(fp, ' '); put_utf16(fp, '\"'); ptr = m->string->value; while ((ch = get_utf8(ptr)) != 0) switch (ch) { case '\n' : put_utf16(fp, '\\'); put_utf16(fp, 'n'); break; case '\\' : put_utf16(fp, '\\'); put_utf16(fp, '\\'); break; case '\"' : put_utf16(fp, '\\'); put_utf16(fp, '\"'); break; default : put_utf16(fp, ch); break; } put_utf16(fp, '\"'); put_utf16(fp, ';'); put_utf16(fp, '\n'); } else { cupsFilePuts(fp, "msgid \""); for (ptr = m->id->value; *ptr; ptr ++) switch (*ptr) { case '\n' : cupsFilePuts(fp, "\\n"); break; case '\\' : cupsFilePuts(fp, "\\\\"); break; case '\"' : cupsFilePuts(fp, "\\\""); break; default : cupsFilePutChar(fp, *ptr); break; } cupsFilePuts(fp, "\"\n"); cupsFilePuts(fp, "msgstr \""); for (ptr = m->string->value; *ptr; ptr ++) switch (*ptr) { case '\n' : cupsFilePuts(fp, "\\n"); break; case '\\' : cupsFilePuts(fp, "\\\\"); break; case '\"' : cupsFilePuts(fp, "\\\""); break; default : cupsFilePutChar(fp, *ptr); break; } cupsFilePuts(fp, "\"\n"); cupsFilePutChar(fp, '\n'); } } cupsFileClose(fp); return (0); } #if defined(__APPLE__) && defined(CUPS_BUNDLEDIR) // // 'apple_add_message()' - Add a message from a localization dictionary. // static void apple_add_message(CFStringRef key, // I - Localization key CFStringRef val, // I - Localized value ppdcCatalog *c) // I - Message catalog { char id[1024], // Message id str[1024]; // Localized message if (CFStringGetCString(key, id, sizeof(id), kCFStringEncodingUTF8) && CFStringGetCString(val, str, sizeof(str), kCFStringEncodingUTF8)) c->add_message(id, str); } #endif /* __APPLE__ && CUPS_BUNDLEDIR */ // // 'get_utf8()' - Get a UTF-8 character. // static int // O - Unicode character or 0 on EOF get_utf8(char *&ptr) // IO - Pointer to character { int ch; // Current character if ((ch = *ptr++ & 255) < 0xc0) return (ch); if ((ch & 0xe0) == 0xc0) { // Two-byte UTF-8... if ((*ptr & 0xc0) != 0x80) return (0); ch = ((ch & 0x1f) << 6) | (*ptr++ & 0x3f); } else if ((ch & 0xf0) == 0xe0) { // Three-byte UTF-8... if ((*ptr & 0xc0) != 0x80) return (0); ch = ((ch & 0x0f) << 6) | (*ptr++ & 0x3f); if ((*ptr & 0xc0) != 0x80) return (0); ch = (ch << 6) | (*ptr++ & 0x3f); } else if ((ch & 0xf8) == 0xf0) { // Four-byte UTF-8... if ((*ptr & 0xc0) != 0x80) return (0); ch = ((ch & 0x07) << 6) | (*ptr++ & 0x3f); if ((*ptr & 0xc0) != 0x80) return (0); ch = (ch << 6) | (*ptr++ & 0x3f); if ((*ptr & 0xc0) != 0x80) return (0); ch = (ch << 6) | (*ptr++ & 0x3f); } return (ch); } // // 'get_utf16()' - Get a UTF-16 character... // static int // O - Unicode character or 0 on EOF get_utf16(cups_file_t *fp, // I - File to read from ppdc_cs_t &cs) // IO - Character set of file { int ch; // Current character unsigned char buffer[3]; // Bytes if (cs == PPDC_CS_AUTO) { // Get byte-order-mark, if present... if (cupsFileRead(fp, (char *)buffer, 2) != 2) return (0); if (buffer[0] == 0xfe && buffer[1] == 0xff) { // Big-endian UTF-16... cs = PPDC_CS_UTF16BE; if (cupsFileRead(fp, (char *)buffer, 2) != 2) return (0); } else if (buffer[0] == 0xff && buffer[1] == 0xfe) { // Little-endian UTF-16... cs = PPDC_CS_UTF16LE; if (cupsFileRead(fp, (char *)buffer, 2) != 2) return (0); } else if (buffer[0] == 0x00 && buffer[1] != 0x00) { // No BOM, assume big-endian UTF-16... cs = PPDC_CS_UTF16BE; } else if (buffer[0] != 0x00 && buffer[1] == 0x00) { // No BOM, assume little-endian UTF-16... cs = PPDC_CS_UTF16LE; } else { // No BOM, assume UTF-8... cs = PPDC_CS_UTF8; cupsFileRewind(fp); } } else if (cs != PPDC_CS_UTF8) { if (cupsFileRead(fp, (char *)buffer, 2) != 2) return (0); } if (cs == PPDC_CS_UTF8) { // UTF-8 character... if ((ch = cupsFileGetChar(fp)) < 0) return (0); if ((ch & 0xe0) == 0xc0) { // Two-byte UTF-8... if (cupsFileRead(fp, (char *)buffer, 1) != 1) return (0); if ((buffer[0] & 0xc0) != 0x80) return (0); ch = ((ch & 0x1f) << 6) | (buffer[0] & 0x3f); } else if ((ch & 0xf0) == 0xe0) { // Three-byte UTF-8... if (cupsFileRead(fp, (char *)buffer, 2) != 2) return (0); if ((buffer[0] & 0xc0) != 0x80 || (buffer[1] & 0xc0) != 0x80) return (0); ch = ((((ch & 0x0f) << 6) | (buffer[0] & 0x3f)) << 6) | (buffer[1] & 0x3f); } else if ((ch & 0xf8) == 0xf0) { // Four-byte UTF-8... if (cupsFileRead(fp, (char *)buffer, 3) != 3) return (0); if ((buffer[0] & 0xc0) != 0x80 || (buffer[1] & 0xc0) != 0x80 || (buffer[2] & 0xc0) != 0x80) return (0); ch = ((((((ch & 0x07) << 6) | (buffer[0] & 0x3f)) << 6) | (buffer[1] & 0x3f)) << 6) | (buffer[2] & 0x3f); } } else { // UTF-16 character... if (cs == PPDC_CS_UTF16BE) ch = (buffer[0] << 8) | buffer[1]; else ch = (buffer[1] << 8) | buffer[0]; if (ch >= 0xd800 && ch <= 0xdbff) { // Handle multi-word encoding... int lch; if (cupsFileRead(fp, (char *)buffer, 2) != 2) return (0); if (cs == PPDC_CS_UTF16BE) lch = (buffer[0] << 8) | buffer[1]; else lch = (buffer[1] << 8) | buffer[0]; if (lch < 0xdc00 || lch >= 0xdfff) return (0); ch = (((ch & 0x3ff) << 10) | (lch & 0x3ff)) + 0x10000; } } return (ch); } // // 'put_utf8()' - Add a UTF-8 character to a string. // static int // O - 0 on success, -1 on failure put_utf8(int ch, // I - Unicode character char *&ptr, // IO - String pointer char *end) // I - End of buffer { if (ch < 0x80) { // One-byte ASCII... if (ptr >= end) return (-1); *ptr++ = (char)ch; } else if (ch < 0x800) { // Two-byte UTF-8... if ((ptr + 1) >= end) return (-1); *ptr++ = (char)(0xc0 | (ch >> 6)); *ptr++ = (char)(0x80 | (ch & 0x3f)); } else if (ch < 0x10000) { // Three-byte UTF-8... if ((ptr + 2) >= end) return (-1); *ptr++ = (char)(0xe0 | (ch >> 12)); *ptr++ = (char)(0x80 | ((ch >> 6) & 0x3f)); *ptr++ = (char)(0x80 | (ch & 0x3f)); } else { // Four-byte UTF-8... if ((ptr + 3) >= end) return (-1); *ptr++ = (char)(0xf0 | (ch >> 18)); *ptr++ = (char)(0x80 | ((ch >> 12) & 0x3f)); *ptr++ = (char)(0x80 | ((ch >> 6) & 0x3f)); *ptr++ = (char)(0x80 | (ch & 0x3f)); } return (0); } // // 'put_utf16()' - Write a UTF-16 character to a file. // static int // O - 0 on success, -1 on failure put_utf16(cups_file_t *fp, // I - File to write to int ch) // I - Unicode character { unsigned char buffer[4]; // Output buffer if (ch < 0x10000) { // One-word UTF-16 big-endian... buffer[0] = (unsigned char)(ch >> 8); buffer[1] = (unsigned char)ch; if (cupsFileWrite(fp, (char *)buffer, 2) == 2) return (0); } else { // Two-word UTF-16 big-endian... ch -= 0x10000; buffer[0] = (unsigned char)(0xd8 | (ch >> 18)); buffer[1] = (unsigned char)(ch >> 10); buffer[2] = (unsigned char)(0xdc | ((ch >> 8) & 0x03)); buffer[3] = (unsigned char)ch; if (cupsFileWrite(fp, (char *)buffer, 4) == 4) return (0); } return (-1); } cups-2.2.7/ppdc/ppdc-choice.cxx000664 000765 000024 00000002075 13255074424 017007 0ustar00msweetstaff000000 000000 // // Option choice class for the CUPS PPD Compiler. // // Copyright 2007-2009 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcChoice::ppdcChoice()' - Create a new option choice. // ppdcChoice::ppdcChoice(const char *n, // I - Name of choice const char *t, // I - Text of choice const char *c) // I - Code of choice : ppdcShared() { PPDC_NEW; name = new ppdcString(n); text = new ppdcString(t); code = new ppdcString(c); } // // 'ppdcChoice::~ppdcChoice()' - Destroy an option choice. // ppdcChoice::~ppdcChoice() { PPDC_DELETE; name->release(); text->release(); code->release(); } cups-2.2.7/ppdc/ppdc-constraint.cxx000664 000765 000024 00000002317 13255074424 017740 0ustar00msweetstaff000000 000000 // // Contraint class for the CUPS PPD Compiler. // // Copyright 2007-2009 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcConstraint::ppdcConstraint()' - Create a constraint. // ppdcConstraint::ppdcConstraint(const char *o1, // I - First option const char *c1, // I - First choice const char *o2, // I - Second option const char *c2) // I - Second choice : ppdcShared() { PPDC_NEW; option1 = new ppdcString(o1); choice1 = new ppdcString(c1); option2 = new ppdcString(o2); choice2 = new ppdcString(c2); } // // 'ppdcConstraint::~ppdcConstraint()' - Destroy a constraint. // ppdcConstraint::~ppdcConstraint() { PPDC_DELETE; option1->release(); choice1->release(); option2->release(); choice2->release(); } cups-2.2.7/ppdc/ppdc-driver.cxx000664 000765 000024 00000117676 13255074424 017066 0ustar00msweetstaff000000 000000 // // PPD file compiler definitions for the CUPS PPD Compiler. // // Copyright 2007-2014 by Apple Inc. // Copyright 2002-2006 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcDriver::ppdcDriver()' - Create a new printer driver. // ppdcDriver::ppdcDriver(ppdcDriver *d) // I - Printer driver template : ppdcShared() { ppdcGroup *g; // Current group PPDC_NEW; if (d) { // Bump the use count of any strings we inherit... if (d->manufacturer) d->manufacturer->retain(); if (d->version) d->version->retain(); if (d->default_font) d->default_font->retain(); if (d->default_size) d->default_size->retain(); if (d->custom_size_code) d->custom_size_code->retain(); // Copy all of the data from the driver template... copyright = new ppdcArray(d->copyright); manufacturer = d->manufacturer; model_name = 0; file_name = 0; pc_file_name = 0; type = d->type; version = d->version; model_number = d->model_number; manual_copies = d->manual_copies; color_device = d->color_device; throughput = d->throughput; attrs = new ppdcArray(d->attrs); constraints = new ppdcArray(d->constraints); filters = new ppdcArray(d->filters); fonts = new ppdcArray(d->fonts); profiles = new ppdcArray(d->profiles); sizes = new ppdcArray(d->sizes); default_font = d->default_font; default_size = d->default_size; variable_paper_size = d->variable_paper_size; custom_size_code = d->custom_size_code; left_margin = d->left_margin; bottom_margin = d->bottom_margin; right_margin = d->right_margin; top_margin = d->top_margin; max_width = d->max_width; max_length = d->max_length; min_width = d->min_width; min_length = d->min_length; // Then copy the groups manually, since we want separate copies // of the groups and options... groups = new ppdcArray(); for (g = (ppdcGroup *)d->groups->first(); g; g = (ppdcGroup *)d->groups->next()) groups->add(new ppdcGroup(g)); } else { // Zero all of the data in the driver... copyright = new ppdcArray(); manufacturer = 0; model_name = 0; file_name = 0; pc_file_name = 0; version = 0; type = PPDC_DRIVER_CUSTOM; model_number = 0; manual_copies = 0; color_device = 0; throughput = 1; attrs = new ppdcArray(); constraints = new ppdcArray(); fonts = new ppdcArray(); filters = new ppdcArray(); groups = new ppdcArray(); profiles = new ppdcArray(); sizes = new ppdcArray(); default_font = 0; default_size = 0; variable_paper_size = 0; custom_size_code = 0; left_margin = 0; bottom_margin = 0; right_margin = 0; top_margin = 0; max_width = 0; max_length = 0; min_width = 0; min_length = 0; } } // // 'ppdcDriver::~ppdcDriver()' - Destroy a printer driver. // ppdcDriver::~ppdcDriver() { PPDC_DELETE; copyright->release(); if (manufacturer) manufacturer->release(); if (model_name) model_name->release(); if (file_name) file_name->release(); if (pc_file_name) pc_file_name->release(); if (version) version->release(); if (default_font) default_font->release(); if (default_size) default_size->release(); if (custom_size_code) custom_size_code->release(); attrs->release(); constraints->release(); filters->release(); fonts->release(); groups->release(); profiles->release(); sizes->release(); } // // 'ppdcDriver::find_attr()' - Find an attribute. // ppdcAttr * // O - Attribute or NULL ppdcDriver::find_attr(const char *k, // I - Keyword string const char *s) // I - Spec string { ppdcAttr *a; // Current attribute for (a = (ppdcAttr *)attrs->first(); a; a = (ppdcAttr *)attrs->next()) if (!strcmp(a->name->value, k) && ((!s && (!a->selector->value || !a->selector->value[0])) || (s && a->selector->value && !strcmp(a->selector->value, s)))) return (a); return (NULL); } // // 'ppdcDriver::find_group()' - Find a group. // ppdcGroup * // O - Matching group or NULL ppdcDriver::find_group(const char *n) // I - Group name { ppdcGroup *g; // Current group for (g = (ppdcGroup *)groups->first(); g; g = (ppdcGroup *)groups->next()) if (!_cups_strcasecmp(n, g->name->value)) return (g); return (0); } // // 'ppdcDriver::find_option()' - Find an option. // ppdcOption * // O - Matching option or NULL ppdcDriver::find_option(const char *n) // I - Option name { return (find_option_group(n, (ppdcGroup **)0)); } // // 'ppdcDriver::find_option_group()' - Find an option and its group. // ppdcOption * // O - Matching option or NULL ppdcDriver::find_option_group( const char *n, // I - Option name ppdcGroup **mg) // O - Matching group or NULL { ppdcGroup *g; // Current group ppdcOption *o; // Current option for (g = (ppdcGroup *)groups->first(); g; g = (ppdcGroup *)groups->next()) for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next()) if (!_cups_strcasecmp(n, o->name->value)) { if (mg) *mg = g; return (o); } if (mg) *mg = (ppdcGroup *)0; return (0); } // // 'ppdcDriver::set_custom_size_code()' - Set the custom page size code. // void ppdcDriver::set_custom_size_code( const char *c) // I - CustomPageSize code { if (custom_size_code) custom_size_code->release(); custom_size_code = new ppdcString(c); } // // 'ppdcDriver::set_default_font()' - Set the default font name. // void ppdcDriver::set_default_font( ppdcFont *f) // I - Font { if (default_font) default_font->release(); if (f) { f->name->retain(); default_font = f->name; } else default_font = 0; } // // 'ppdcDriver::set_default_size()' - Set the default size name. // void ppdcDriver::set_default_size( ppdcMediaSize *m) // I - Media size { if (default_size) default_size->release(); if (m) { m->name->retain(); default_size = m->name; } else default_size = 0; } // // 'ppdcDriver::set_file_name()' - Set the full filename. // void ppdcDriver::set_file_name(const char *f)// I - Filename { if (file_name) file_name->release(); file_name = new ppdcString(f); } // // 'ppdcDriver::set_manufacturer()' - Set the manufacturer name. // void ppdcDriver::set_manufacturer( const char *m) // I - Model name { if (manufacturer) manufacturer->release(); manufacturer = new ppdcString(m); } // // 'ppdcDriver::set_model_name()' - Set the model name. // void ppdcDriver::set_model_name( const char *m) // I - Model name { if (model_name) model_name->release(); model_name = new ppdcString(m); } // // 'ppdcDriver::set_pc_file_name()' - Set the PC filename. // void ppdcDriver::set_pc_file_name( const char *f) // I - Filename { if (pc_file_name) pc_file_name->release(); pc_file_name = new ppdcString(f); } // // 'ppdcDriver::set_version()' - Set the version string. // void ppdcDriver::set_version(const char *v) // I - Version { if (version) version->release(); version = new ppdcString(v); } // // 'ppdcDriver::write_ppd_file()' - Write a PPD file... // int // O - 0 on success, -1 on failure ppdcDriver::write_ppd_file( cups_file_t *fp, // I - PPD file ppdcCatalog *catalog, // I - Message catalog ppdcArray *locales, // I - Additional languages to add ppdcSource *src, // I - Driver source ppdcLineEnding le) // I - Line endings to use { bool delete_cat; // Delete the catalog when we are done? char query[42], // Query attribute custom[42]; // Custom attribute ppdcString *s; // Copyright string ppdcGroup *g; // Current group ppdcOption *o; // Current option ppdcChoice *c; // Current choice ppdcMediaSize *m; // Current media size ppdcProfile *p; // Current color profile ppdcFilter *f; // Current filter ppdcFont *fn, // Current font *bfn; // Current base font ppdcConstraint *cn; // Current constraint ppdcAttr *a; // Current attribute const char *lf; // Linefeed character to use // If we don't have a message catalog, use an empty (English) one... if (!catalog) { catalog = new ppdcCatalog(NULL); delete_cat = true; } else delete_cat = false; // Figure out the end-of-line string... if (le == PPDC_LFONLY) lf = "\n"; else if (le == PPDC_CRONLY) lf = "\r"; else lf = "\r\n"; // Write the standard header stuff... cupsFilePrintf(fp, "*PPD-Adobe: \"4.3\"%s", lf); cupsFilePrintf(fp, "*%%%%%%%% PPD file for %s with CUPS.%s", model_name->value, lf); cupsFilePrintf(fp, "*%%%%%%%% Created by the CUPS PPD Compiler " CUPS_SVERSION ".%s", lf); for (s = (ppdcString *)copyright->first(); s; s = (ppdcString *)copyright->next()) cupsFilePrintf(fp, "*%% %s%s", catalog->find_message(s->value), lf); cupsFilePrintf(fp, "*FormatVersion: \"4.3\"%s", lf); cupsFilePrintf(fp, "*FileVersion: \"%s\"%s", version->value, lf); a = find_attr("LanguageVersion", NULL); cupsFilePrintf(fp, "*LanguageVersion: %s%s", catalog->find_message(a ? a->value->value : "English"), lf); a = find_attr("LanguageEncoding", NULL); cupsFilePrintf(fp, "*LanguageEncoding: %s%s", catalog->find_message(a ? a->value->value : "ISOLatin1"), lf); cupsFilePrintf(fp, "*PCFileName: \"%s\"%s", pc_file_name->value, lf); for (a = (ppdcAttr *)attrs->first(); a; a = (ppdcAttr *)attrs->next()) if (!strcmp(a->name->value, "Product")) break; if (a) { for (; a; a = (ppdcAttr *)attrs->next()) if (!strcmp(a->name->value, "Product")) cupsFilePrintf(fp, "*Product: \"%s\"%s", a->value->value, lf); } else cupsFilePrintf(fp, "*Product: \"(%s)\"%s", model_name->value, lf); cupsFilePrintf(fp, "*Manufacturer: \"%s\"%s", catalog->find_message(manufacturer->value), lf); if ((a = find_attr("ModelName", NULL)) != NULL) cupsFilePrintf(fp, "*ModelName: \"%s\"%s", catalog->find_message(a->value->value), lf); else if (_cups_strncasecmp(model_name->value, manufacturer->value, strlen(manufacturer->value))) cupsFilePrintf(fp, "*ModelName: \"%s %s\"%s", catalog->find_message(manufacturer->value), catalog->find_message(model_name->value), lf); else cupsFilePrintf(fp, "*ModelName: \"%s\"%s", catalog->find_message(model_name->value), lf); if ((a = find_attr("ShortNickName", NULL)) != NULL) cupsFilePrintf(fp, "*ShortNickName: \"%s\"%s", catalog->find_message(a->value->value), lf); else if (_cups_strncasecmp(model_name->value, manufacturer->value, strlen(manufacturer->value))) cupsFilePrintf(fp, "*ShortNickName: \"%s %s\"%s", catalog->find_message(manufacturer->value), catalog->find_message(model_name->value), lf); else cupsFilePrintf(fp, "*ShortNickName: \"%s\"%s", catalog->find_message(model_name->value), lf); if ((a = find_attr("NickName", NULL)) != NULL) cupsFilePrintf(fp, "*NickName: \"%s\"%s", catalog->find_message(a->value->value), lf); else if (_cups_strncasecmp(model_name->value, manufacturer->value, strlen(manufacturer->value))) cupsFilePrintf(fp, "*NickName: \"%s %s, %s\"%s", catalog->find_message(manufacturer->value), catalog->find_message(model_name->value), version->value, lf); else cupsFilePrintf(fp, "*NickName: \"%s, %s\"%s", catalog->find_message(model_name->value), version->value, lf); for (a = (ppdcAttr *)attrs->first(); a; a = (ppdcAttr *)attrs->next()) if (!strcmp(a->name->value, "PSVersion")) break; if (a) { for (; a; a = (ppdcAttr *)attrs->next()) if (!strcmp(a->name->value, "PSVersion")) cupsFilePrintf(fp, "*PSVersion: \"%s\"%s", a->value->value, lf); } else cupsFilePrintf(fp, "*PSVersion: \"(3010.000) 0\"%s", lf); if ((a = find_attr("LanguageLevel", NULL)) != NULL) cupsFilePrintf(fp, "*LanguageLevel: \"%s\"%s", a->value->value, lf); else cupsFilePrintf(fp, "*LanguageLevel: \"3\"%s", lf); cupsFilePrintf(fp, "*ColorDevice: %s%s", color_device ? "True" : "False", lf); if ((a = find_attr("DefaultColorSpace", NULL)) != NULL) cupsFilePrintf(fp, "*DefaultColorSpace: %s%s", a->value->value, lf); else cupsFilePrintf(fp, "*DefaultColorSpace: %s%s", color_device ? "RGB" : "Gray", lf); if ((a = find_attr("FileSystem", NULL)) != NULL) cupsFilePrintf(fp, "*FileSystem: %s%s", a->value->value, lf); else cupsFilePrintf(fp, "*FileSystem: False%s", lf); cupsFilePrintf(fp, "*Throughput: \"%d\"%s", throughput, lf); if ((a = find_attr("LandscapeOrientation", NULL)) != NULL) cupsFilePrintf(fp, "*LandscapeOrientation: %s%s", a->value->value, lf); else cupsFilePrintf(fp, "*LandscapeOrientation: Plus90%s", lf); if ((a = find_attr("TTRasterizer", NULL)) != NULL) cupsFilePrintf(fp, "*TTRasterizer: %s%s", a->value->value, lf); else if (type != PPDC_DRIVER_PS) cupsFilePrintf(fp, "*TTRasterizer: Type42%s", lf); struct lconv *loc = localeconv(); if (attrs->count) { // Write driver-defined attributes... cupsFilePrintf(fp, "*%% Driver-defined attributes...%s", lf); for (a = (ppdcAttr *)attrs->first(); a; a = (ppdcAttr *)attrs->next()) { if (!strcmp(a->name->value, "Product") || !strcmp(a->name->value, "PSVersion") || !strcmp(a->name->value, "LanguageLevel") || !strcmp(a->name->value, "DefaultColorSpace") || !strcmp(a->name->value, "FileSystem") || !strcmp(a->name->value, "LandscapeOrientation") || !strcmp(a->name->value, "TTRasterizer") || !strcmp(a->name->value, "LanguageVersion") || !strcmp(a->name->value, "LanguageEncoding") || !strcmp(a->name->value, "ModelName") || !strcmp(a->name->value, "NickName") || !strcmp(a->name->value, "ShortNickName") || !strcmp(a->name->value, "cupsVersion")) continue; if (a->name->value[0] == '?' && (find_option(a->name->value + 1) || !strcmp(a->name->value, "?ImageableArea") || !strcmp(a->name->value, "?PageRegion") || !strcmp(a->name->value, "?PageSize") || !strcmp(a->name->value, "?PaperDimension"))) continue; if (!strncmp(a->name->value, "Custom", 6) && find_option(a->name->value + 6)) continue; if (!strncmp(a->name->value, "ParamCustom", 11) && find_option(a->name->value + 11)) continue; if (!a->selector->value || !a->selector->value[0]) cupsFilePrintf(fp, "*%s", a->name->value); else if (!a->text->value || !a->text->value[0]) cupsFilePrintf(fp, "*%s %s", a->name->value, a->selector->value); else cupsFilePrintf(fp, "*%s %s/%s", a->name->value, a->selector->value, a->text->value); if (strcmp(a->value->value, "False") && strcmp(a->value->value, "True") && strcmp(a->name->value, "1284Modes") && strcmp(a->name->value, "InkName") && strcmp(a->name->value, "PageStackOrder") && strncmp(a->name->value, "ParamCustom", 11) && strcmp(a->name->value, "Protocols") && strcmp(a->name->value, "ReferencePunch") && strncmp(a->name->value, "Default", 7)) { cupsFilePrintf(fp, ": \"%s\"%s", a->value->value, lf); if (strchr(a->value->value, '\n') || strchr(a->value->value, '\r')) cupsFilePrintf(fp, "*End%s", lf); } else cupsFilePrintf(fp, ": %s%s", a->value->value, lf); } } if (type != PPDC_DRIVER_PS || filters->count) { if ((a = find_attr("cupsVersion", NULL)) != NULL) cupsFilePrintf(fp, "*cupsVersion: %s%s", a->value->value, lf); else cupsFilePrintf(fp, "*cupsVersion: %d.%d%s", CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR, lf); cupsFilePrintf(fp, "*cupsModelNumber: %d%s", model_number, lf); cupsFilePrintf(fp, "*cupsManualCopies: %s%s", manual_copies ? "True" : "False", lf); if (filters->count) { for (f = (ppdcFilter *)filters->first(); f; f = (ppdcFilter *)filters->next()) cupsFilePrintf(fp, "*cupsFilter: \"%s %d %s\"%s", f->mime_type->value, f->cost, f->program->value, lf); } else { switch (type) { case PPDC_DRIVER_LABEL : cupsFilePrintf(fp, "*cupsFilter: \"application/vnd.cups-raster 50 " "rastertolabel\"%s", lf); break; case PPDC_DRIVER_EPSON : cupsFilePrintf(fp, "*cupsFilter: \"application/vnd.cups-raster 50 " "rastertoepson\"%s", lf); break; case PPDC_DRIVER_ESCP : cupsFilePrintf(fp, "*cupsFilter: \"application/vnd.cups-command 50 " "commandtoescpx\"%s", lf); cupsFilePrintf(fp, "*cupsFilter: \"application/vnd.cups-raster 50 " "rastertoescpx\"%s", lf); break; case PPDC_DRIVER_HP : cupsFilePrintf(fp, "*cupsFilter: \"application/vnd.cups-raster 50 " "rastertohp\"%s", lf); break; case PPDC_DRIVER_PCL : cupsFilePrintf(fp, "*cupsFilter: \"application/vnd.cups-command 50 " "commandtopclx\"%s", lf); cupsFilePrintf(fp, "*cupsFilter: \"application/vnd.cups-raster 50 " "rastertopclx\"%s", lf); break; default : break; } } for (p = (ppdcProfile *)profiles->first(); p; p = (ppdcProfile *)profiles->next()) { char density[255], gamma[255], profile[9][255]; _cupsStrFormatd(density, density + sizeof(density), p->density, loc); _cupsStrFormatd(gamma, gamma + sizeof(gamma), p->gamma, loc); for (int i = 0; i < 9; i ++) _cupsStrFormatd(profile[i], profile[i] + sizeof(profile[0]), p->profile[i], loc); cupsFilePrintf(fp, "*cupsColorProfile %s/%s: \"%s %s %s %s %s %s %s %s %s %s " "%s\"%s", p->resolution->value, p->media_type->value, density, gamma, profile[0], profile[1], profile[2], profile[3], profile[4], profile[5], profile[6], profile[7], profile[8], lf); } } if (locales) { // Add localizations for additional languages... ppdcString *locale; // Locale name ppdcCatalog *locatalog; // Message catalog for locale // Write the list of languages... cupsFilePrintf(fp, "*cupsLanguages: \"en"); for (locale = (ppdcString *)locales->first(); locale; locale = (ppdcString *)locales->next()) { // Skip (US) English... if (!strcmp(locale->value, "en") || !strcmp(locale->value, "en_US")) continue; // See if we have a po file for this language... if (!src->find_po(locale->value)) { // No, see if we can use the base file? locatalog = new ppdcCatalog(locale->value); if (locatalog->messages->count == 0) { // No, skip this one... _cupsLangPrintf(stderr, _("ppdc: No message catalog provided for locale " "%s."), locale->value); continue; } // Add the base file to the list... src->po_files->add(locatalog); } cupsFilePrintf(fp, " %s", locale->value); } cupsFilePrintf(fp, "\"%s", lf); } for (cn = (ppdcConstraint *)constraints->first(); cn; cn = (ppdcConstraint *)constraints->next()) { // First constrain 1 against 2... if (!strncmp(cn->option1->value, "*Custom", 7) || !strncmp(cn->option2->value, "*Custom", 7)) cupsFilePuts(fp, "*NonUIConstraints: "); else cupsFilePuts(fp, "*UIConstraints: "); if (cn->option1->value[0] != '*') cupsFilePutChar(fp, '*'); cupsFilePuts(fp, cn->option1->value); if (cn->choice1->value) cupsFilePrintf(fp, " %s", cn->choice1->value); cupsFilePutChar(fp, ' '); if (cn->option2->value[0] != '*') cupsFilePutChar(fp, '*'); cupsFilePuts(fp, cn->option2->value); if (cn->choice2->value) cupsFilePrintf(fp, " %s", cn->choice2->value); cupsFilePuts(fp, lf); // Then constrain 2 against 1... if (!strncmp(cn->option1->value, "*Custom", 7) || !strncmp(cn->option2->value, "*Custom", 7)) cupsFilePuts(fp, "*NonUIConstraints: "); else cupsFilePuts(fp, "*UIConstraints: "); if (cn->option2->value[0] != '*') cupsFilePutChar(fp, '*'); cupsFilePuts(fp, cn->option2->value); if (cn->choice2->value) cupsFilePrintf(fp, " %s", cn->choice2->value); cupsFilePutChar(fp, ' '); if (cn->option1->value[0] != '*') cupsFilePutChar(fp, '*'); cupsFilePuts(fp, cn->option1->value); if (cn->choice1->value) cupsFilePrintf(fp, " %s", cn->choice1->value); cupsFilePuts(fp, lf); } // PageSize option... cupsFilePrintf(fp, "*OpenUI *PageSize/Media Size: PickOne%s", lf); cupsFilePrintf(fp, "*OrderDependency: 10 AnySetup *PageSize%s", lf); cupsFilePrintf(fp, "*DefaultPageSize: %s%s", default_size ? default_size->value : "Letter", lf); for (m = (ppdcMediaSize *)sizes->first(); m; m = (ppdcMediaSize *)sizes->next()) if (m->size_code->value) { cupsFilePrintf(fp, "*PageSize %s/%s: \"%s\"%s", m->name->value, catalog->find_message(m->text->value), m->size_code->value, lf); if (strchr(m->size_code->value, '\n') || strchr(m->size_code->value, '\r')) cupsFilePrintf(fp, "*End%s", lf); } else cupsFilePrintf(fp, "*PageSize %s/%s: \"<>setpagedevice\"%s", m->name->value, catalog->find_message(m->text->value), m->width, m->length, lf); if ((a = find_attr("?PageSize", NULL)) != NULL) { cupsFilePrintf(fp, "*?PageSize: \"%s\"%s", a->value->value, lf); if (strchr(a->value->value, '\n') || strchr(a->value->value, '\r')) cupsFilePrintf(fp, "*End%s", lf); } cupsFilePrintf(fp, "*CloseUI: *PageSize%s", lf); // PageRegion option... cupsFilePrintf(fp, "*OpenUI *PageRegion/Media Size: PickOne%s", lf); cupsFilePrintf(fp, "*OrderDependency: 10 AnySetup *PageRegion%s", lf); cupsFilePrintf(fp, "*DefaultPageRegion: %s%s", default_size ? default_size->value : "Letter", lf); for (m = (ppdcMediaSize *)sizes->first(); m; m = (ppdcMediaSize *)sizes->next()) if (m->region_code->value) { cupsFilePrintf(fp, "*PageRegion %s/%s: \"%s\"%s", m->name->value, catalog->find_message(m->text->value), m->region_code->value, lf); if (strchr(m->region_code->value, '\n') || strchr(m->region_code->value, '\r')) cupsFilePrintf(fp, "*End%s", lf); } else cupsFilePrintf(fp, "*PageRegion %s/%s: \"<>setpagedevice\"%s", m->name->value, catalog->find_message(m->text->value), m->width, m->length, lf); if ((a = find_attr("?PageRegion", NULL)) != NULL) { cupsFilePrintf(fp, "*?PageRegion: \"%s\"%s", a->value->value, lf); if (strchr(a->value->value, '\n') || strchr(a->value->value, '\r')) cupsFilePrintf(fp, "*End%s", lf); } cupsFilePrintf(fp, "*CloseUI: *PageRegion%s", lf); // ImageableArea info... cupsFilePrintf(fp, "*DefaultImageableArea: %s%s", default_size ? default_size->value : "Letter", lf); char left[255], right[255], bottom[255], top[255]; for (m = (ppdcMediaSize *)sizes->first(); m; m = (ppdcMediaSize *)sizes->next()) { _cupsStrFormatd(left, left + sizeof(left), m->left, loc); _cupsStrFormatd(bottom, bottom + sizeof(bottom), m->bottom, loc); _cupsStrFormatd(right, right + sizeof(right), m->width - m->right, loc); _cupsStrFormatd(top, top + sizeof(top), m->length - m->top, loc); cupsFilePrintf(fp, "*ImageableArea %s/%s: \"%s %s %s %s\"%s", m->name->value, catalog->find_message(m->text->value), left, bottom, right, top, lf); } if ((a = find_attr("?ImageableArea", NULL)) != NULL) { cupsFilePrintf(fp, "*?ImageableArea: \"%s\"%s", a->value->value, lf); if (strchr(a->value->value, '\n') || strchr(a->value->value, '\r')) cupsFilePrintf(fp, "*End%s", lf); } // PaperDimension info... cupsFilePrintf(fp, "*DefaultPaperDimension: %s%s", default_size ? default_size->value : "Letter", lf); char width[255], length[255]; for (m = (ppdcMediaSize *)sizes->first(); m; m = (ppdcMediaSize *)sizes->next()) { _cupsStrFormatd(width, width + sizeof(width), m->width, loc); _cupsStrFormatd(length, length + sizeof(length), m->length, loc); cupsFilePrintf(fp, "*PaperDimension %s/%s: \"%s %s\"%s", m->name->value, catalog->find_message(m->text->value), width, length, lf); } if ((a = find_attr("?PaperDimension", NULL)) != NULL) { cupsFilePrintf(fp, "*?PaperDimension: \"%s\"%s", a->value->value, lf); if (strchr(a->value->value, '\n') || strchr(a->value->value, '\r')) cupsFilePrintf(fp, "*End%s", lf); } // Custom size support... if (variable_paper_size) { _cupsStrFormatd(width, width + sizeof(width), max_width, loc); _cupsStrFormatd(length, length + sizeof(length), max_length, loc); _cupsStrFormatd(left, left + sizeof(left), left_margin, loc); _cupsStrFormatd(bottom, bottom + sizeof(bottom), bottom_margin, loc); _cupsStrFormatd(right, right + sizeof(right), right_margin, loc); _cupsStrFormatd(top, top + sizeof(top), top_margin, loc); cupsFilePrintf(fp, "*MaxMediaWidth: \"%s\"%s", width, lf); cupsFilePrintf(fp, "*MaxMediaHeight: \"%s\"%s", length, lf); cupsFilePrintf(fp, "*HWMargins: %s %s %s %s%s", left, bottom, right, top, lf); if (custom_size_code && custom_size_code->value) { cupsFilePrintf(fp, "*CustomPageSize True: \"%s\"%s", custom_size_code->value, lf); if (strchr(custom_size_code->value, '\n') || strchr(custom_size_code->value, '\r')) cupsFilePrintf(fp, "*End%s", lf); } else cupsFilePrintf(fp, "*CustomPageSize True: \"pop pop pop <>setpagedevice\"%s", lf); if ((a = find_attr("ParamCustomPageSize", "Width")) != NULL) cupsFilePrintf(fp, "*ParamCustomPageSize Width: %s%s", a->value->value, lf); else { char width0[255]; _cupsStrFormatd(width0, width0 + sizeof(width0), min_width, loc); _cupsStrFormatd(width, width + sizeof(width), max_width, loc); cupsFilePrintf(fp, "*ParamCustomPageSize Width: 1 points %s %s%s", width0, width, lf); } if ((a = find_attr("ParamCustomPageSize", "Height")) != NULL) cupsFilePrintf(fp, "*ParamCustomPageSize Height: %s%s", a->value->value, lf); else { char length0[255]; _cupsStrFormatd(length0, length0 + sizeof(length0), min_length, loc); _cupsStrFormatd(length, length + sizeof(length), max_length, loc); cupsFilePrintf(fp, "*ParamCustomPageSize Height: 2 points %s %s%s", length0, length, lf); } if ((a = find_attr("ParamCustomPageSize", "WidthOffset")) != NULL) cupsFilePrintf(fp, "*ParamCustomPageSize WidthOffset: %s%s", a->value->value, lf); else cupsFilePrintf(fp, "*ParamCustomPageSize WidthOffset: 3 points 0 0%s", lf); if ((a = find_attr("ParamCustomPageSize", "HeightOffset")) != NULL) cupsFilePrintf(fp, "*ParamCustomPageSize HeightOffset: %s%s", a->value->value, lf); else cupsFilePrintf(fp, "*ParamCustomPageSize HeightOffset: 4 points 0 0%s", lf); if ((a = find_attr("ParamCustomPageSize", "Orientation")) != NULL) cupsFilePrintf(fp, "*ParamCustomPageSize Orientation: %s%s", a->value->value, lf); else cupsFilePrintf(fp, "*ParamCustomPageSize Orientation: 5 int 0 0%s", lf); } // All other options... for (g = (ppdcGroup *)groups->first(); g; g = (ppdcGroup *)groups->next()) { if (!g->options->count) continue; if (_cups_strcasecmp(g->name->value, "General")) cupsFilePrintf(fp, "*OpenGroup: %s/%s%s", g->name->value, catalog->find_message(g->text->value), lf); for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next()) { if (!o->choices->count) continue; if (o->section == PPDC_SECTION_JCL) { if (!o->text->value) cupsFilePrintf(fp, "*JCLOpenUI *%s/%s: ", o->name->value, catalog->find_message(o->name->value)); else cupsFilePrintf(fp, "*JCLOpenUI *%s/%s: ", o->name->value, catalog->find_message(o->text->value)); } else if (!o->text->value) cupsFilePrintf(fp, "*OpenUI *%s/%s: ", o->name->value, catalog->find_message(o->name->value)); else cupsFilePrintf(fp, "*OpenUI *%s/%s: ", o->name->value, catalog->find_message(o->text->value)); switch (o->type) { case PPDC_BOOLEAN : cupsFilePrintf(fp, "Boolean%s", lf); break; default : cupsFilePrintf(fp, "PickOne%s", lf); break; case PPDC_PICKMANY : cupsFilePrintf(fp, "PickMany%s", lf); break; } char order[255]; _cupsStrFormatd(order, order + sizeof(order), o->order, loc); cupsFilePrintf(fp, "*OrderDependency: %s ", order); switch (o->section) { default : cupsFilePrintf(fp, "AnySetup"); break; case PPDC_SECTION_DOCUMENT : cupsFilePrintf(fp, "DocumentSetup"); break; case PPDC_SECTION_EXIT : cupsFilePrintf(fp, "ExitServer"); break; case PPDC_SECTION_JCL : cupsFilePrintf(fp, "JCLSetup"); break; case PPDC_SECTION_PAGE : cupsFilePrintf(fp, "PageSetup"); break; case PPDC_SECTION_PROLOG : cupsFilePrintf(fp, "Prolog"); break; } cupsFilePrintf(fp, " *%s%s", o->name->value, lf); if (o->defchoice) { // Use the programmer-supplied default... cupsFilePrintf(fp, "*Default%s: %s%s", o->name->value, o->defchoice->value, lf); } else { // Make the first choice the default... c = (ppdcChoice *)o->choices->first(); cupsFilePrintf(fp, "*Default%s: %s%s", o->name->value, c->name->value, lf); } for (c = (ppdcChoice *)o->choices->first(); c; c = (ppdcChoice *)o->choices->next()) { // Write this choice... if (!c->text->value) cupsFilePrintf(fp, "*%s %s/%s: \"%s\"%s", o->name->value, c->name->value, catalog->find_message(c->name->value), c->code->value, lf); else cupsFilePrintf(fp, "*%s %s/%s: \"%s\"%s", o->name->value, c->name->value, catalog->find_message(c->text->value), c->code->value, lf); // Multi-line commands need a *End line to terminate them. if (strchr(c->code->value, '\n') || strchr(c->code->value, '\r')) cupsFilePrintf(fp, "*End%s", lf); } snprintf(query, sizeof(query), "?%s", o->name->value); if ((a = find_attr(query, NULL)) != NULL) { cupsFilePrintf(fp, "*%s: \"%s\"%s", query, a->value->value, lf); if (strchr(a->value->value, '\n') || strchr(a->value->value, '\r')) cupsFilePrintf(fp, "*End%s", lf); } cupsFilePrintf(fp, "*CloseUI: *%s%s", o->name->value, lf); snprintf(custom, sizeof(custom), "Custom%s", o->name->value); if ((a = find_attr(custom, "True")) != NULL) { // Output custom option information... cupsFilePrintf(fp, "*%s True: \"%s\"%s", custom, a->value->value, lf); if (strchr(a->value->value, '\n') || strchr(a->value->value, '\r')) cupsFilePrintf(fp, "*End%s", lf); snprintf(custom, sizeof(custom), "ParamCustom%s", o->name->value); for (a = (ppdcAttr *)attrs->first(); a; a = (ppdcAttr *)attrs->next()) { if (strcmp(a->name->value, custom)) continue; if (!a->selector->value || !a->selector->value[0]) cupsFilePrintf(fp, "*%s", a->name->value); else if (!a->text->value || !a->text->value[0]) cupsFilePrintf(fp, "*%s %s/%s", a->name->value, a->selector->value, catalog->find_message(a->selector->value)); else cupsFilePrintf(fp, "*%s %s/%s", a->name->value, a->selector->value, catalog->find_message(a->text->value)); cupsFilePrintf(fp, ": %s%s", a->value->value, lf); } } } if (_cups_strcasecmp(g->name->value, "General")) cupsFilePrintf(fp, "*CloseGroup: %s%s", g->name->value, lf); } if (locales) { // Add localizations for additional languages... ppdcString *locale; // Locale name ppdcCatalog *locatalog; // Message catalog for locale // Write the translation strings for each language... for (locale = (ppdcString *)locales->first(); locale; locale = (ppdcString *)locales->next()) { // Skip (US) English... if (!strcmp(locale->value, "en") || !strcmp(locale->value, "en_US")) continue; // Skip missing languages... if ((locatalog = src->find_po(locale->value)) == NULL) continue; // Do the core stuff first... cupsFilePrintf(fp, "*%s.Translation Manufacturer/%s: \"\"%s", locale->value, locatalog->find_message(manufacturer->value), lf); if ((a = find_attr("ModelName", NULL)) != NULL) cupsFilePrintf(fp, "*%s.Translation ModelName/%s: \"\"%s", locale->value, locatalog->find_message(a->value->value), lf); else if (_cups_strncasecmp(model_name->value, manufacturer->value, strlen(manufacturer->value))) cupsFilePrintf(fp, "*%s.Translation ModelName/%s %s: \"\"%s", locale->value, locatalog->find_message(manufacturer->value), locatalog->find_message(model_name->value), lf); else cupsFilePrintf(fp, "*%s.Translation ModelName/%s: \"\"%s", locale->value, locatalog->find_message(model_name->value), lf); if ((a = find_attr("ShortNickName", NULL)) != NULL) cupsFilePrintf(fp, "*%s.Translation ShortNickName/%s: \"\"%s", locale->value, locatalog->find_message(a->value->value), lf); else if (_cups_strncasecmp(model_name->value, manufacturer->value, strlen(manufacturer->value))) cupsFilePrintf(fp, "*%s.Translation ShortNickName/%s %s: \"\"%s", locale->value, locatalog->find_message(manufacturer->value), locatalog->find_message(model_name->value), lf); else cupsFilePrintf(fp, "*%s.Translation ShortNickName/%s: \"\"%s", locale->value, locatalog->find_message(model_name->value), lf); if ((a = find_attr("NickName", NULL)) != NULL) cupsFilePrintf(fp, "*%s.Translation NickName/%s: \"\"%s", locale->value, locatalog->find_message(a->value->value), lf); else if (_cups_strncasecmp(model_name->value, manufacturer->value, strlen(manufacturer->value))) cupsFilePrintf(fp, "*%s.Translation NickName/%s %s, %s: \"\"%s", locale->value, locatalog->find_message(manufacturer->value), locatalog->find_message(model_name->value), version->value, lf); else cupsFilePrintf(fp, "*%s.Translation NickName/%s, %s: \"\"%s", locale->value, locatalog->find_message(model_name->value), version->value, lf); // Then the page sizes... cupsFilePrintf(fp, "*%s.Translation PageSize/%s: \"\"%s", locale->value, locatalog->find_message("Media Size"), lf); for (m = (ppdcMediaSize *)sizes->first(); m; m = (ppdcMediaSize *)sizes->next()) { cupsFilePrintf(fp, "*%s.PageSize %s/%s: \"\"%s", locale->value, m->name->value, locatalog->find_message(m->text->value), lf); } // Next the groups and options... for (g = (ppdcGroup *)groups->first(); g; g = (ppdcGroup *)groups->next()) { if (!g->options->count) continue; if (_cups_strcasecmp(g->name->value, "General")) cupsFilePrintf(fp, "*%s.Translation %s/%s: \"\"%s", locale->value, g->name->value, locatalog->find_message(g->text->value), lf); for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next()) { if (!o->choices->count) continue; cupsFilePrintf(fp, "*%s.Translation %s/%s: \"\"%s", locale->value, o->name->value, locatalog->find_message(o->text->value ? o->text->value : o->name->value), lf); for (c = (ppdcChoice *)o->choices->first(); c; c = (ppdcChoice *)o->choices->next()) { // Write this choice... cupsFilePrintf(fp, "*%s.%s %s/%s: \"\"%s", locale->value, o->name->value, c->name->value, locatalog->find_message(c->text->value ? c->text->value : c->name->value), lf); } } } // Finally the localizable attributes... for (a = (ppdcAttr *)attrs->first(); a; a = (ppdcAttr *)attrs->next()) { if (!a->localizable && (!a->text || !a->text->value || !a->text->value[0]) && strcmp(a->name->value, "APCustomColorMatchingName") && strcmp(a->name->value, "APPrinterPreset") && strcmp(a->name->value, "cupsICCProfile") && strcmp(a->name->value, "cupsIPPReason") && strcmp(a->name->value, "cupsMarkerName") && strncmp(a->name->value, "Custom", 6) && strncmp(a->name->value, "ParamCustom", 11)) continue; cupsFilePrintf(fp, "*%s.%s %s/%s: \"%s\"%s", locale->value, a->name->value, a->selector->value, locatalog->find_message(a->text && a->text->value ? a->text->value : a->name->value), ((a->localizable && a->value->value[0]) || !strcmp(a->name->value, "cupsIPPReason")) ? locatalog->find_message(a->value->value) : "", lf); } } } if (default_font && default_font->value) cupsFilePrintf(fp, "*DefaultFont: %s%s", default_font->value, lf); else cupsFilePrintf(fp, "*DefaultFont: Courier%s", lf); for (fn = (ppdcFont *)fonts->first(); fn; fn = (ppdcFont *)fonts->next()) if (!strcmp(fn->name->value, "*")) { for (bfn = (ppdcFont *)src->base_fonts->first(); bfn; bfn = (ppdcFont *)src->base_fonts->next()) cupsFilePrintf(fp, "*Font %s: %s \"%s\" %s %s%s", bfn->name->value, bfn->encoding->value, bfn->version->value, bfn->charset->value, bfn->status == PPDC_FONT_ROM ? "ROM" : "Disk", lf); } else cupsFilePrintf(fp, "*Font %s: %s \"%s\" %s %s%s", fn->name->value, fn->encoding->value, fn->version->value, fn->charset->value, fn->status == PPDC_FONT_ROM ? "ROM" : "Disk", lf); cupsFilePrintf(fp, "*%% End of %s, %05d bytes.%s", pc_file_name->value, (int)((size_t)cupsFileTell(fp) + 25 + strlen(pc_file_name->value)), lf); if (delete_cat) catalog->release(); return (0); } cups-2.2.7/ppdc/ppdc-file.cxx000664 000765 000024 00000003454 13255074424 016476 0ustar00msweetstaff000000 000000 // // File class for the CUPS PPD Compiler. // // Copyright 2007-2010 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcFile::ppdcFile()' - Create (open) a file. // ppdcFile::ppdcFile(const char *f, // I - File to open cups_file_t *ffp) // I - File pointer to use { if (ffp) { fp = ffp; cupsFileRewind(fp); } else fp = cupsFileOpen(f, "r"); close_on_delete = !ffp; filename = f; line = 1; if (!fp) _cupsLangPrintf(stderr, _("ppdc: Unable to open %s: %s"), f, strerror(errno)); } // // 'ppdcFile::~ppdcFile()' - Delete (close) a file. // ppdcFile::~ppdcFile() { if (close_on_delete && fp) cupsFileClose(fp); } // // 'ppdcFile::get()' - Get a character from a file. // int ppdcFile::get() { int ch; // Character from file // Return EOF if there is no open file... if (!fp) return (EOF); // Get the character... ch = cupsFileGetChar(fp); // Update the line number as needed... if (ch == '\n') line ++; // Return the character... return (ch); } // // 'ppdcFile::peek()' - Look at the next character from a file. // int // O - Next character in file ppdcFile::peek() { // Return immediaely if there is no open file... if (!fp) return (EOF); // Otherwise return the next character without advancing... return (cupsFilePeekChar(fp)); } cups-2.2.7/ppdc/ppdc-filter.cxx000664 000765 000024 00000002002 13255074424 017030 0ustar00msweetstaff000000 000000 // // Filter class for the CUPS PPD Compiler. // // Copyright 2007-2009 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcFilter::ppdcFilter()' - Create a filter. // ppdcFilter::ppdcFilter(const char *t, // I - MIME type const char *p, // I - Filter program int c) // I - Relative cost : ppdcShared() { PPDC_NEW; mime_type = new ppdcString(t); program = new ppdcString(p); cost = c; } // // 'ppdcFilter::~ppdcFilter()' - Destroy a filter. // ppdcFilter::~ppdcFilter() { PPDC_DELETE; mime_type->release(); program->release(); } cups-2.2.7/ppdc/ppdc-font.cxx000664 000765 000024 00000002334 13255074424 016521 0ustar00msweetstaff000000 000000 // // Shared font class for the CUPS PPD Compiler. // // Copyright 2007-2009 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcFont::ppdcFont()' - Create a shared font. // ppdcFont::ppdcFont(const char *n, // I - Name of font const char *e, // I - Font encoding const char *v, // I - Font version const char *c, // I - Font charset ppdcFontStatus s) // I - Font status : ppdcShared() { PPDC_NEW; name = new ppdcString(n); encoding = new ppdcString(e); version = new ppdcString(v); charset = new ppdcString(c); status = s; } // // 'ppdcFont::~ppdcFont()' - Destroy a shared font. // ppdcFont::~ppdcFont() { PPDC_DELETE; name->release(); encoding->release(); version->release(); charset->release(); } cups-2.2.7/ppdc/ppdc-group.cxx000664 000765 000024 00000003433 13255074424 016710 0ustar00msweetstaff000000 000000 // // Group class for the CUPS PPD Compiler. // // Copyright 2007-2011 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcGroup::ppdcGroup()' - Create a new group. // ppdcGroup::ppdcGroup(const char *n, // I - Name of group const char *t) // I - Text of group { PPDC_NEWVAL(n); name = new ppdcString(n); text = new ppdcString(t); options = new ppdcArray(); } // // 'ppdcGroup::ppdcGroup()' - Copy a new group. // ppdcGroup::ppdcGroup(ppdcGroup *g) // I - Group template { PPDC_NEWVAL(g->name->value); g->name->retain(); g->text->retain(); name = g->name; text = g->text; options = new ppdcArray(); for (ppdcOption *o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next()) options->add(new ppdcOption(o)); } // // 'ppdcGroup::~ppdcGroup()' - Destroy a group. // ppdcGroup::~ppdcGroup() { PPDC_DELETEVAL(name ? name->value : NULL); name->release(); text->release(); options->release(); name = text = 0; options = 0; } // // 'ppdcGroup::find_option()' - Find an option in a group. // ppdcOption * ppdcGroup::find_option(const char *n) // I - Name of option { ppdcOption *o; // Current option for (o = (ppdcOption *)options->first(); o; o = (ppdcOption *)options->next()) if (!_cups_strcasecmp(n, o->name->value)) return (o); return (0); } cups-2.2.7/ppdc/ppdc-import.cxx000664 000765 000024 00000025000 13255074424 017060 0ustar00msweetstaff000000 000000 // // PPD file import methods for the CUPS PPD Compiler. // // Copyright 2007-2011 by Apple Inc. // Copyright 2002-2006 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" #include // // 'ppdcSource::import_ppd()' - Import a PPD file. // int // O - 1 on success, 0 on failure ppdcSource::import_ppd(const char *f) // I - Filename { int i, j, k; // Looping vars cups_file_t *fp; // File char line[256], // Comment line *ptr; // Pointer into line int cost; // Cost for filter ppd_file_t *ppd; // PPD file data ppd_group_t *group; // PPD group ppd_option_t *option; // PPD option ppd_choice_t *choice; // PPD choice ppd_attr_t *attr; // PPD attribute ppd_const_t *constraint; // PPD UI constraint ppd_const_t *constraint2; // Temp PPD UI constraint ppd_size_t *size; // PPD page size ppdcDriver *driver; // Driver ppdcFilter *filter; // Current filter ppdcFont *font; // Font ppdcGroup *cgroup; // UI group ppdcOption *coption; // UI option ppdcChoice *cchoice; // UI choice ppdcConstraint *cconstraint; // UI constraint ppdcMediaSize *csize; // Media size // Try opening the PPD file... if ((ppd = ppdOpenFile(f)) == NULL) return (0); // All PPD files need a PCFileName attribute... if (!ppd->pcfilename) { ppdClose(ppd); return (0); } // See if the driver has already been imported... if ((driver = find_driver(ppd->pcfilename)) == NULL) { // Create a new PPD file... if ((fp = cupsFileOpen(f, "r")) == NULL) { ppdClose(ppd); return (0); } driver = new ppdcDriver(); driver->type = PPDC_DRIVER_PS; drivers->add(driver); // Read the initial comments from the PPD file and use them as the // copyright/license text... cupsFileGets(fp, line, sizeof(line)); // Skip *PPD-Adobe-M.m while (cupsFileGets(fp, line, sizeof(line))) if (strncmp(line, "*%", 2)) break; else if (strncmp(line, "*%%%% ", 6)) { for (ptr = line + 2; isspace(*ptr); ptr ++); driver->add_copyright(ptr); } cupsFileClose(fp); // Then add the stuff from the PPD file... if (ppd->modelname && ppd->manufacturer && !_cups_strncasecmp(ppd->modelname, ppd->manufacturer, strlen(ppd->manufacturer))) { ptr = ppd->modelname + strlen(ppd->manufacturer); while (isspace(*ptr)) ptr ++; } else ptr = ppd->modelname; if (ppd->nickname) driver->add_attr(new ppdcAttr("NickName", NULL, NULL, ppd->nickname)); if (ppd->shortnickname) driver->add_attr(new ppdcAttr("ShortNickName", NULL, NULL, ppd->shortnickname)); driver->manufacturer = new ppdcString(ppd->manufacturer); driver->model_name = new ppdcString(ptr); driver->pc_file_name = new ppdcString(ppd->pcfilename); attr = ppdFindAttr(ppd, "FileVersion", NULL); driver->version = new ppdcString(attr ? attr->value : NULL); driver->model_number = ppd->model_number; driver->manual_copies = ppd->manual_copies; driver->color_device = ppd->color_device; driver->throughput = ppd->throughput; driver->variable_paper_size = ppd->variable_sizes; driver->max_width = ppd->custom_max[0]; driver->max_length = ppd->custom_max[1]; driver->min_width = ppd->custom_min[0]; driver->min_length = ppd->custom_min[1]; driver->left_margin = ppd->custom_margins[0]; driver->bottom_margin = ppd->custom_margins[1]; driver->right_margin = ppd->custom_margins[2]; driver->top_margin = ppd->custom_margins[3]; for (i = 0; i < ppd->num_filters; i ++) { strlcpy(line, ppd->filters[i], sizeof(line)); for (ptr = line; *ptr; ptr ++) if (isspace(*ptr & 255)) break; *ptr++ = '\0'; cost = strtol(ptr, &ptr, 10); while (isspace(*ptr & 255)) ptr ++; filter = new ppdcFilter(line, ptr, cost); driver->add_filter(filter); } attr = ppdFindAttr(ppd, "DefaultFont", NULL); driver->default_font = new ppdcString(attr ? attr->value : NULL); // Collect media sizes... ppd_option_t *region_option, // PageRegion option *size_option; // PageSize option ppd_choice_t *region_choice, // PageRegion choice *size_choice; // PageSize choice region_option = ppdFindOption(ppd, "PageRegion"); size_option = ppdFindOption(ppd, "PageSize"); for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++) { // Don't do custom size here... if (!_cups_strcasecmp(size->name, "Custom")) continue; // Get the code for the PageSize and PageRegion options... region_choice = ppdFindChoice(region_option, size->name); size_choice = ppdFindChoice(size_option, size->name); // Create a new media size record and add it to the driver... csize = new ppdcMediaSize(size->name, size_choice->text, size->width, size->length, size->left, size->bottom, size->width - size->right, size->length - size->top, size_choice->code, region_choice->code); driver->add_size(csize); if (!_cups_strcasecmp(size_option->defchoice, size->name)) driver->set_default_size(csize); } // Now all of the options... for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++) { cgroup = new ppdcGroup(group->name, group->text); driver->add_group(cgroup); for (j = group->num_options, option = group->options; j > 0; j --, option ++) { if (!strcmp(option->keyword, "PageSize") || !strcmp(option->keyword, "PageRegion")) continue; coption = new ppdcOption((ppdcOptType)option->ui, option->keyword, option->text, (ppdcOptSection)option->section, option->order); cgroup->add_option(coption); for (k = option->num_choices, choice = option->choices; k > 0; k --, choice ++) { if (!strcmp(choice->choice, "Custom")) continue; cchoice = new ppdcChoice(choice->choice, choice->text, choice->code); coption->add_choice(cchoice); if (!_cups_strcasecmp(option->defchoice, choice->choice)) coption->set_defchoice(cchoice); } } } // Now the constraints... for (i = ppd->num_consts, constraint = ppd->consts; i > 0; i --, constraint ++) { // Look for mirrored constraints... for (j = i - 1, constraint2 = constraint + 1; j > 0; j --, constraint2 ++) if (!strcmp(constraint->option1, constraint2->option2) && !strcmp(constraint->choice1, constraint2->choice2) && !strcmp(constraint->option2, constraint2->option1) && !strcmp(constraint->choice2, constraint2->choice1)) break; if (j) continue; cconstraint = new ppdcConstraint(constraint->option2, constraint->choice2, constraint->option1, constraint->choice1); driver->add_constraint(cconstraint); } for (i = 0; i < ppd->num_attrs; i ++) { attr = ppd->attrs[i]; if (!strcmp(attr->name, "Font")) { // Font... char encoding[256], // Encoding string version[256], // Version string charset[256], // Charset string status[256]; // Status string ppdcFontStatus fstatus; // Status enumeration if (sscanf(attr->value, "%s%*[^\"]\"%[^\"]\"%s%s", encoding, version, charset, status) != 4) { _cupsLangPrintf(stderr, _("ppdc: Bad font attribute: %s"), attr->value); continue; } if (!strcmp(status, "ROM")) fstatus = PPDC_FONT_ROM; else fstatus = PPDC_FONT_DISK; font = new ppdcFont(attr->spec, encoding, version, charset, fstatus); driver->add_font(font); } else if (!strcmp(attr->name, "CustomPageSize")) { driver->set_custom_size_code(attr->value); } else if ((strncmp(attr->name, "Default", 7) || !strcmp(attr->name, "DefaultColorSpace")) && strcmp(attr->name, "ColorDevice") && strcmp(attr->name, "Manufacturer") && strcmp(attr->name, "ModelName") && strcmp(attr->name, "MaxMediaHeight") && strcmp(attr->name, "MaxMediaWidth") && strcmp(attr->name, "NickName") && strcmp(attr->name, "ParamCustomPageSize") && strcmp(attr->name, "ShortNickName") && strcmp(attr->name, "Throughput") && strcmp(attr->name, "PCFileName") && strcmp(attr->name, "FileVersion") && strcmp(attr->name, "FormatVersion") && strcmp(attr->name, "HWMargins") && strcmp(attr->name, "VariablePaperSize") && strcmp(attr->name, "LanguageEncoding") && strcmp(attr->name, "LanguageVersion") && strcmp(attr->name, "cupsFilter") && strcmp(attr->name, "cupsFlipDuplex") && strcmp(attr->name, "cupsLanguages") && strcmp(attr->name, "cupsManualCopies") && strcmp(attr->name, "cupsModelNumber") && strcmp(attr->name, "cupsVersion")) { if ((ptr = strchr(attr->name, '.')) != NULL && ((ptr - attr->name) == 2 || (ptr - attr->name) == 5)) { // Might be a localization attribute; test further... if (isalpha(attr->name[0] & 255) && isalpha(attr->name[1] & 255) && (attr->name[2] == '.' || (attr->name[2] == '_' && isalpha(attr->name[3] & 255) && isalpha(attr->name[4] & 255)))) continue; } // Attribute... driver->add_attr(new ppdcAttr(attr->name, attr->spec, attr->text, attr->value)); } else if (!strncmp(attr->name, "Default", 7) && !ppdFindOption(ppd, attr->name + 7) && strcmp(attr->name, "DefaultFont") && strcmp(attr->name, "DefaultImageableArea") && strcmp(attr->name, "DefaultPaperDimension") && strcmp(attr->name, "DefaultFont")) { // Default attribute... driver->add_attr(new ppdcAttr(attr->name, attr->spec, attr->text, attr->value)); } } } return (1); } cups-2.2.7/ppdc/ppdc-mediasize.cxx000664 000765 000024 00000003504 13255074424 017525 0ustar00msweetstaff000000 000000 // // Shared media size class for the CUPS PPD Compiler. // // Copyright 2007-2009 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcMediaSize::ppdcMediaSize()' - Create a new media size. // ppdcMediaSize::ppdcMediaSize(const char *n, // I - Name of media size const char *t, // I - Text of media size float w, // I - Width in points float l, // I - Length in points float lm, // I - Left margin in points float bm, // I - Bottom margin in points float rm, // I - Right margin in points float tm, // I - Top margin in points const char *sc, // I - PageSize code, if any const char *rc) // I - PageRegion code, if any : ppdcShared() { PPDC_NEW; name = new ppdcString(n); text = new ppdcString(t); width = w; length = l; left = lm; bottom = bm; right = rm; top = tm; size_code = new ppdcString(sc); region_code = new ppdcString(rc); if (left < 0.0f) left = 0.0f; if (bottom < 0.0f) bottom = 0.0f; if (right < 0.0f) right = 0.0f; if (top < 0.0f) top = 0.0f; } // // 'ppdcMediaSize::~ppdcMediaSize()' - Destroy a media size. // ppdcMediaSize::~ppdcMediaSize() { PPDC_DELETE; name->release(); text->release(); size_code->release(); region_code->release(); } cups-2.2.7/ppdc/ppdc-message.cxx000664 000765 000024 00000001726 13255074424 017203 0ustar00msweetstaff000000 000000 // // Shared message class for the CUPS PPD Compiler. // // Copyright 2007-2009 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcMessage::ppdcMessage()' - Create a shared message. // ppdcMessage::ppdcMessage(const char *i, // I - ID const char *s) // I - Text : ppdcShared() { PPDC_NEW; id = new ppdcString(i); string = new ppdcString(s); } // // 'ppdcMessage::~ppdcMessage()' - Destroy a shared message. // ppdcMessage::~ppdcMessage() { PPDC_DELETE; id->release(); string->release(); } cups-2.2.7/ppdc/ppdc-option.cxx000664 000765 000024 00000004427 13255074424 017070 0ustar00msweetstaff000000 000000 // // Option class for the CUPS PPD Compiler. // // Copyright 2007-2011 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcOption::ppdcOption()' - Create a new option. // ppdcOption::ppdcOption(ppdcOptType ot, // I - Option type const char *n, // I - Option name const char *t, // I - Option text ppdcOptSection s, // I - Section float o) // I - Ordering number : ppdcShared() { PPDC_NEW; type = ot; name = new ppdcString(n); text = new ppdcString(t); section = s; order = o; choices = new ppdcArray(); defchoice = 0; } // // 'ppdcOption::ppdcOption()' - Copy a new option. // ppdcOption::ppdcOption(ppdcOption *o) // I - Template option { PPDC_NEW; o->name->retain(); o->text->retain(); if (o->defchoice) o->defchoice->retain(); type = o->type; name = o->name; text = o->text; section = o->section; order = o->order; choices = new ppdcArray(o->choices); defchoice = o->defchoice; } // // 'ppdcOption::~ppdcOption()' - Destroy an option. // ppdcOption::~ppdcOption() { PPDC_DELETE; name->release(); text->release(); if (defchoice) defchoice->release(); choices->release(); } // // 'ppdcOption::find_choice()' - Find an option choice. // ppdcChoice * // O - Choice or NULL ppdcOption::find_choice(const char *n) // I - Name of choice { ppdcChoice *c; // Current choice for (c = (ppdcChoice *)choices->first(); c; c = (ppdcChoice *)choices->next()) if (!_cups_strcasecmp(n, c->name->value)) return (c); return (0); } // // 'ppdcOption::set_defchoice()' - Set the default choice. // void ppdcOption::set_defchoice(ppdcChoice *c) // I - Choice { if (defchoice) defchoice->release(); if (c->name) c->name->retain(); defchoice = c->name; } cups-2.2.7/ppdc/ppdc-private.h000664 000765 000024 00000001703 13255074424 016651 0ustar00msweetstaff000000 000000 // // Private definitions for the CUPS PPD Compiler. // // Copyright 2009-2010 by Apple Inc. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // #ifndef _PPDC_PRIVATE_H_ # define _PPDC_PRIVATE_H_ // // Include necessary headers... // # include "ppdc.h" # include // // Macros... // # define PPDC_NEW DEBUG_printf(("%s: %p new", class_name(), this)) # define PPDC_NEWVAL(s) DEBUG_printf(("%s(\"%s\"): %p new", class_name(), s, this)) # define PPDC_DELETE DEBUG_printf(("%s: %p delete", class_name(), this)) # define PPDC_DELETEVAL(s) DEBUG_printf(("%s(\"%s\"): %p delete", class_name(), s, this)) #endif // !_PPDC_PRIVATE_H_ cups-2.2.7/ppdc/ppdc-profile.cxx000664 000765 000024 00000002301 13255074424 017205 0ustar00msweetstaff000000 000000 // // Color profile class for the CUPS PPD Compiler. // // Copyright 2007-2009 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcProfile::ppdcProfile()' - Create a color profile. // ppdcProfile::ppdcProfile(const char *r, // I - Resolution name const char *m, // I - Media type name float d, // I - Density float g, // I - Gamma const float *p) // I - 3x3 transform matrix : ppdcShared() { PPDC_NEW; resolution = new ppdcString(r); media_type = new ppdcString(m); density = d; gamma = g; memcpy(profile, p, sizeof(profile)); } // // 'ppdcProfile::~ppdcProfile()' - Destroy a color profile. // ppdcProfile::~ppdcProfile() { PPDC_DELETE; resolution->release(); media_type->release(); } cups-2.2.7/ppdc/ppdc-shared.cxx000664 000765 000024 00000002442 13255074424 017021 0ustar00msweetstaff000000 000000 // // Shared data class for the CUPS PPD Compiler. // // Copyright 2007-2009 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcShared::ppdcShared()' - Create shared data. // ppdcShared::ppdcShared() { use = 1; } // // 'ppdcShared::~ppdcShared()' - Destroy shared data. // ppdcShared::~ppdcShared() { } // // 'ppdcShared::release()' - Decrement the use count and delete as needed. // void ppdcShared::release(void) { DEBUG_printf(("%s: %p release use=%d", class_name(), this, use)); use --; #ifdef DEBUG if (use < 0) { fprintf(stderr, "ERROR: Over-release of %s: %p\n", class_name(), this); abort(); } #endif /* DEBUG */ if (use == 0) delete this; } // // 'ppdcShared::retain()' - Increment the use count for this data. // void ppdcShared::retain() { use ++; DEBUG_printf(("%s: %p retain use=%d", class_name(), this, use)); } cups-2.2.7/ppdc/ppdc-source.cxx000664 000765 000024 00000262353 13255074424 017064 0ustar00msweetstaff000000 000000 // // Source class for the CUPS PPD Compiler. // // Copyright 2007-2014 by Apple Inc. // Copyright 2002-2007 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" #include #include #include #include #include "data/epson.h" #include "data/hp.h" #include "data/label.h" #ifndef WIN32 # include #endif // !WIN32 // // Class globals... // ppdcArray *ppdcSource::includes = 0; const char *ppdcSource::driver_types[] = { "custom", "ps", "escp", "pcl", "label", "epson", "hp" }; // // 'ppdcSource::ppdcSource()' - Load a driver source file. // ppdcSource::ppdcSource(const char *f, // I - File to read cups_file_t *ffp)// I - File pointer to use : ppdcShared() { PPDC_NEW; filename = new ppdcString(f); base_fonts = new ppdcArray(); drivers = new ppdcArray(); po_files = new ppdcArray(); sizes = new ppdcArray(); vars = new ppdcArray(); cond_state = PPDC_COND_NORMAL; cond_current = cond_stack; cond_stack[0] = PPDC_COND_NORMAL; // Add standard #define variables... #define MAKE_STRING(x) #x vars->add(new ppdcVariable("CUPS_VERSION", MAKE_STRING(CUPS_VERSION))); vars->add(new ppdcVariable("CUPS_VERSION_MAJOR", MAKE_STRING(CUPS_VERSION_MAJOR))); vars->add(new ppdcVariable("CUPS_VERSION_MINOR", MAKE_STRING(CUPS_VERSION_MINOR))); vars->add(new ppdcVariable("CUPS_VERSION_PATCH", MAKE_STRING(CUPS_VERSION_PATCH))); #ifdef WIN32 vars->add(new ppdcVariable("PLATFORM_NAME", "Windows")); vars->add(new ppdcVariable("PLATFORM_ARCH", "X86")); #else struct utsname name; // uname information if (!uname(&name)) { vars->add(new ppdcVariable("PLATFORM_NAME", name.sysname)); vars->add(new ppdcVariable("PLATFORM_ARCH", name.machine)); } else { vars->add(new ppdcVariable("PLATFORM_NAME", "unknown")); vars->add(new ppdcVariable("PLATFORM_ARCH", "unknown")); } #endif // WIN32 if (f) read_file(f, ffp); } // // 'ppdcSource::~ppdcSource()' - Free a driver source file. // ppdcSource::~ppdcSource() { PPDC_DELETE; filename->release(); base_fonts->release(); drivers->release(); po_files->release(); sizes->release(); vars->release(); } // // 'ppdcSource::add_include()' - Add an include directory. // void ppdcSource::add_include(const char *d) // I - Include directory { if (!d) return; if (!includes) includes = new ppdcArray(); includes->add(new ppdcString(d)); } // // 'ppdcSource::find_driver()' - Find a driver. // ppdcDriver * // O - Driver ppdcSource::find_driver(const char *f) // I - Driver file name { ppdcDriver *d; // Current driver for (d = (ppdcDriver *)drivers->first(); d; d = (ppdcDriver *)drivers->next()) if (!_cups_strcasecmp(f, d->pc_file_name->value)) return (d); return (NULL); } // // 'ppdcSource::find_include()' - Find an include file. // char * // O - Found path or NULL ppdcSource::find_include( const char *f, // I - Include filename const char *base, // I - Current directory char *n, // I - Path buffer int nlen) // I - Path buffer length { ppdcString *dir; // Include directory char temp[1024], // Temporary path *ptr; // Pointer to end of path // Range check input... if (!f || !*f || !n || nlen < 2) return (0); // Check the first character to see if we have or "name"... if (*f == '<') { // Remove the surrounding <> from the name... strlcpy(temp, f + 1, sizeof(temp)); ptr = temp + strlen(temp) - 1; if (*ptr != '>') { _cupsLangPrintf(stderr, _("ppdc: Invalid #include/#po filename \"%s\"."), n); return (0); } *ptr = '\0'; f = temp; } else { // Check for the local file relative to the current directory... if (base && *base && f[0] != '/') snprintf(n, (size_t)nlen, "%s/%s", base, f); else strlcpy(n, f, (size_t)nlen); if (!access(n, 0)) return (n); else if (*f == '/') { // Absolute path that doesn't exist... return (0); } } // Search the include directories, if any... if (includes) { for (dir = (ppdcString *)includes->first(); dir; dir = (ppdcString *)includes->next()) { snprintf(n, (size_t)nlen, "%s/%s", dir->value, f); if (!access(n, 0)) return (n); } } // Search the standard include directories... _cups_globals_t *cg = _cupsGlobals(); // Global data snprintf(n, (size_t)nlen, "%s/ppdc/%s", cg->cups_datadir, f); if (!access(n, 0)) return (n); snprintf(n, (size_t)nlen, "%s/po/%s", cg->cups_datadir, f); if (!access(n, 0)) return (n); else return (0); } // // 'ppdcSource::find_po()' - Find a message catalog for the given locale. // ppdcCatalog * // O - Message catalog or NULL ppdcSource::find_po(const char *l) // I - Locale name { ppdcCatalog *cat; // Current message catalog for (cat = (ppdcCatalog *)po_files->first(); cat; cat = (ppdcCatalog *)po_files->next()) if (!_cups_strcasecmp(l, cat->locale->value)) return (cat); return (NULL); } // // 'ppdcSource::find_size()' - Find a media size. // ppdcMediaSize * // O - Size ppdcSource::find_size(const char *s) // I - Size name { ppdcMediaSize *m; // Current media size for (m = (ppdcMediaSize *)sizes->first(); m; m = (ppdcMediaSize *)sizes->next()) if (!_cups_strcasecmp(s, m->name->value)) return (m); return (NULL); } // // 'ppdcSource::find_variable()' - Find a variable. // ppdcVariable * // O - Variable ppdcSource::find_variable(const char *n)// I - Variable name { ppdcVariable *v; // Current variable for (v = (ppdcVariable *)vars->first(); v; v = (ppdcVariable *)vars->next()) if (!_cups_strcasecmp(n, v->name->value)) return (v); return (NULL); } // // 'ppdcSource::get_attr()' - Get an attribute. // ppdcAttr * // O - Attribute ppdcSource::get_attr(ppdcFile *fp, // I - File to read bool loc) // I - Localize this attribute? { char name[1024], // Name string selector[1024], // Selector string *text, // Text string value[1024]; // Value string // Get the attribute parameters: // // Attribute name selector value if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected name after %s on line %d of %s."), loc ? "LocAttribute" : "Attribute", fp->line, fp->filename); return (0); } if (!get_token(fp, selector, sizeof(selector))) { _cupsLangPrintf(stderr, _("ppdc: Expected selector after %s on line %d of %s."), loc ? "LocAttribute" : "Attribute", fp->line, fp->filename); return (0); } if ((text = strchr(selector, '/')) != NULL) *text++ = '\0'; if (!get_token(fp, value, sizeof(value))) { _cupsLangPrintf(stderr, _("ppdc: Expected value after %s on line %d of %s."), loc ? "LocAttribute" : "Attribute", fp->line, fp->filename); return (0); } return (new ppdcAttr(name, selector, text, value, loc)); } // // 'ppdcSource::get_boolean()' - Get a boolean value. // int // O - Boolean value ppdcSource::get_boolean(ppdcFile *fp) // I - File to read { char buffer[256]; // String buffer if (!get_token(fp, buffer, sizeof(buffer))) { _cupsLangPrintf(stderr, _("ppdc: Expected boolean value on line %d of %s."), fp->line, fp->filename); return (-1); } if (!_cups_strcasecmp(buffer, "on") || !_cups_strcasecmp(buffer, "yes") || !_cups_strcasecmp(buffer, "true")) return (1); else if (!_cups_strcasecmp(buffer, "off") || !_cups_strcasecmp(buffer, "no") || !_cups_strcasecmp(buffer, "false")) return (0); else { _cupsLangPrintf(stderr, _("ppdc: Bad boolean value (%s) on line %d of %s."), buffer, fp->line, fp->filename); return (-1); } } // // 'ppdcSource::get_choice()' - Get a choice. // ppdcChoice * // O - Choice data ppdcSource::get_choice(ppdcFile *fp) // I - File to read { char name[1024], // Name *text, // Text code[10240]; // Code // Read a choice from the file: // // Choice name/text code if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected choice name/text on line %d of %s."), fp->line, fp->filename); return (NULL); } if ((text = strchr(name, '/')) != NULL) *text++ = '\0'; else text = name; if (!get_token(fp, code, sizeof(code))) { _cupsLangPrintf(stderr, _("ppdc: Expected choice code on line %d of %s."), fp->line, fp->filename); return (NULL); } // Return the new choice return (new ppdcChoice(name, text, code)); } // // 'ppdcSource::get_color_model()' - Get an old-style color model option. // ppdcChoice * // O - Choice data ppdcSource::get_color_model(ppdcFile *fp) // I - File to read { char name[1024], // Option name *text, // Text option temp[256]; // Temporary string int color_space, // Colorspace color_order, // Color order compression; // Compression mode // Get the ColorModel parameters: // // ColorModel name/text colorspace colororder compression if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected name/text combination for ColorModel on " "line %d of %s."), fp->line, fp->filename); return (NULL); } if ((text = strchr(name, '/')) != NULL) *text++ = '\0'; else text = name; if (!get_token(fp, temp, sizeof(temp))) { _cupsLangPrintf(stderr, _("ppdc: Expected colorspace for ColorModel on line %d of " "%s."), fp->line, fp->filename); return (NULL); } if ((color_space = get_color_space(temp)) < 0) color_space = get_integer(temp); if (!get_token(fp, temp, sizeof(temp))) { _cupsLangPrintf(stderr, _("ppdc: Expected color order for ColorModel on line %d of " "%s."), fp->line, fp->filename); return (NULL); } if ((color_order = get_color_order(temp)) < 0) color_order = get_integer(temp); if (!get_token(fp, temp, sizeof(temp))) { _cupsLangPrintf(stderr, _("ppdc: Expected compression for ColorModel on line %d of " "%s."), fp->line, fp->filename); return (NULL); } compression = get_integer(temp); snprintf(temp, sizeof(temp), "<>" "setpagedevice", color_space, color_order, compression); return (new ppdcChoice(name, text, temp)); } // // 'ppdcSource::get_color_order()' - Get an old-style color order value. // int // O - Color order value ppdcSource::get_color_order( const char *co) // I - Color order string { if (!_cups_strcasecmp(co, "chunked") || !_cups_strcasecmp(co, "chunky")) return (CUPS_ORDER_CHUNKED); else if (!_cups_strcasecmp(co, "banded")) return (CUPS_ORDER_BANDED); else if (!_cups_strcasecmp(co, "planar")) return (CUPS_ORDER_PLANAR); else return (-1); } // // 'ppdcSource::get_color_profile()' - Get a color profile definition. // ppdcProfile * // O - Color profile ppdcSource::get_color_profile( ppdcFile *fp) // I - File to read { char resolution[1024], // Resolution/media type *media_type; // Media type int i; // Looping var float g, // Gamma value d, // Density value m[9]; // Transform matrix // Get the ColorProfile parameters: // // ColorProfile resolution/mediatype gamma density m00 m01 m02 ... m22 if (!get_token(fp, resolution, sizeof(resolution))) { _cupsLangPrintf(stderr, _("ppdc: Expected resolution/mediatype following " "ColorProfile on line %d of %s."), fp->line, fp->filename); return (NULL); } if ((media_type = strchr(resolution, '/')) != NULL) *media_type++ = '\0'; else media_type = resolution; g = get_float(fp); d = get_float(fp); for (i = 0; i < 9; i ++) m[i] = get_float(fp); return (new ppdcProfile(resolution, media_type, g, d, m)); } // // 'ppdcSource::get_color_space()' - Get an old-style colorspace value. // int // O - Colorspace value ppdcSource::get_color_space( const char *cs) // I - Colorspace string { if (!_cups_strcasecmp(cs, "w")) return (CUPS_CSPACE_W); else if (!_cups_strcasecmp(cs, "rgb")) return (CUPS_CSPACE_RGB); else if (!_cups_strcasecmp(cs, "rgba")) return (CUPS_CSPACE_RGBA); else if (!_cups_strcasecmp(cs, "k")) return (CUPS_CSPACE_K); else if (!_cups_strcasecmp(cs, "cmy")) return (CUPS_CSPACE_CMY); else if (!_cups_strcasecmp(cs, "ymc")) return (CUPS_CSPACE_YMC); else if (!_cups_strcasecmp(cs, "cmyk")) return (CUPS_CSPACE_CMYK); else if (!_cups_strcasecmp(cs, "ymck")) return (CUPS_CSPACE_YMCK); else if (!_cups_strcasecmp(cs, "kcmy")) return (CUPS_CSPACE_KCMY); else if (!_cups_strcasecmp(cs, "kcmycm")) return (CUPS_CSPACE_KCMYcm); else if (!_cups_strcasecmp(cs, "gmck")) return (CUPS_CSPACE_GMCK); else if (!_cups_strcasecmp(cs, "gmcs")) return (CUPS_CSPACE_GMCS); else if (!_cups_strcasecmp(cs, "white")) return (CUPS_CSPACE_WHITE); else if (!_cups_strcasecmp(cs, "gold")) return (CUPS_CSPACE_GOLD); else if (!_cups_strcasecmp(cs, "silver")) return (CUPS_CSPACE_SILVER); else if (!_cups_strcasecmp(cs, "CIEXYZ")) return (CUPS_CSPACE_CIEXYZ); else if (!_cups_strcasecmp(cs, "CIELab")) return (CUPS_CSPACE_CIELab); else if (!_cups_strcasecmp(cs, "RGBW")) return (CUPS_CSPACE_RGBW); else if (!_cups_strcasecmp(cs, "ICC1")) return (CUPS_CSPACE_ICC1); else if (!_cups_strcasecmp(cs, "ICC2")) return (CUPS_CSPACE_ICC2); else if (!_cups_strcasecmp(cs, "ICC3")) return (CUPS_CSPACE_ICC3); else if (!_cups_strcasecmp(cs, "ICC4")) return (CUPS_CSPACE_ICC4); else if (!_cups_strcasecmp(cs, "ICC5")) return (CUPS_CSPACE_ICC5); else if (!_cups_strcasecmp(cs, "ICC6")) return (CUPS_CSPACE_ICC6); else if (!_cups_strcasecmp(cs, "ICC7")) return (CUPS_CSPACE_ICC7); else if (!_cups_strcasecmp(cs, "ICC8")) return (CUPS_CSPACE_ICC8); else if (!_cups_strcasecmp(cs, "ICC9")) return (CUPS_CSPACE_ICC9); else if (!_cups_strcasecmp(cs, "ICCA")) return (CUPS_CSPACE_ICCA); else if (!_cups_strcasecmp(cs, "ICCB")) return (CUPS_CSPACE_ICCB); else if (!_cups_strcasecmp(cs, "ICCC")) return (CUPS_CSPACE_ICCC); else if (!_cups_strcasecmp(cs, "ICCD")) return (CUPS_CSPACE_ICCD); else if (!_cups_strcasecmp(cs, "ICCE")) return (CUPS_CSPACE_ICCE); else if (!_cups_strcasecmp(cs, "ICCF")) return (CUPS_CSPACE_ICCF); else return (-1); } // // 'ppdcSource::get_constraint()' - Get a constraint. // ppdcConstraint * // O - Constraint ppdcSource::get_constraint(ppdcFile *fp)// I - File to read { char temp[1024], // One string to rule them all *ptr, // Pointer into string *option1, // Constraint option 1 *choice1, // Constraint choice 1 *option2, // Constraint option 2 *choice2; // Constraint choice 2 // Read the UIConstaints parameter in one of the following forms: // // UIConstraints "*Option1 *Option2" // UIConstraints "*Option1 Choice1 *Option2" // UIConstraints "*Option1 *Option2 Choice2" // UIConstraints "*Option1 Choice1 *Option2 Choice2" if (!get_token(fp, temp, sizeof(temp))) { _cupsLangPrintf(stderr, _("ppdc: Expected constraints string for UIConstraints on " "line %d of %s."), fp->line, fp->filename); return (NULL); } for (ptr = temp; isspace(*ptr); ptr ++); if (*ptr != '*') { _cupsLangPrintf(stderr, _("ppdc: Option constraint must *name on line %d of %s."), fp->line, fp->filename); return (NULL); } option1 = ptr; for (; *ptr && !isspace(*ptr); ptr ++); for (; isspace(*ptr); *ptr++ = '\0'); if (*ptr != '*') { choice1 = ptr; for (; *ptr && !isspace(*ptr); ptr ++); for (; isspace(*ptr); *ptr++ = '\0'); } else choice1 = NULL; if (*ptr != '*') { _cupsLangPrintf(stderr, _("ppdc: Expected two option names on line %d of %s."), fp->line, fp->filename); return (NULL); } option2 = ptr; for (; *ptr && !isspace(*ptr); ptr ++); for (; isspace(*ptr); *ptr++ = '\0'); if (*ptr) choice2 = ptr; else choice2 = NULL; return (new ppdcConstraint(option1, choice1, option2, choice2)); } // // 'ppdcSource::get_custom_size()' - Get a custom media size definition from a file. // ppdcMediaSize * // O - Media size ppdcSource::get_custom_size(ppdcFile *fp) // I - File to read { char name[1024], // Name *text, // Text size_code[10240], // PageSize code region_code[10240]; // PageRegion float width, // Width length, // Length left, // Left margin bottom, // Bottom margin right, // Right margin top; // Top margin // Get the name, text, width, length, margins, and code: // // CustomMedia name/text width length left bottom right top size-code region-code if (!get_token(fp, name, sizeof(name))) return (NULL); if ((text = strchr(name, '/')) != NULL) *text++ = '\0'; else text = name; if ((width = get_measurement(fp)) < 0.0f) return (NULL); if ((length = get_measurement(fp)) < 0.0f) return (NULL); if ((left = get_measurement(fp)) < 0.0f) return (NULL); if ((bottom = get_measurement(fp)) < 0.0f) return (NULL); if ((right = get_measurement(fp)) < 0.0f) return (NULL); if ((top = get_measurement(fp)) < 0.0f) return (NULL); if (!get_token(fp, size_code, sizeof(size_code))) return (NULL); if (!get_token(fp, region_code, sizeof(region_code))) return (NULL); // Return the new media size... return (new ppdcMediaSize(name, text, width, length, left, bottom, right, top, size_code, region_code)); } // // 'ppdcSource::get_duplex()' - Get a duplex option. // void ppdcSource::get_duplex(ppdcFile *fp, // I - File to read from ppdcDriver *d) // I - Current driver { char temp[256]; // Duplex keyword ppdcAttr *attr; // cupsFlipDuplex attribute ppdcGroup *g; // Current group ppdcOption *o; // Duplex option // Duplex {boolean|none|normal|flip} if (!get_token(fp, temp, sizeof(temp))) { _cupsLangPrintf(stderr, _("ppdc: Expected duplex type after Duplex on line %d of " "%s."), fp->line, fp->filename); return; } if (cond_state) return; if (!_cups_strcasecmp(temp, "none") || !_cups_strcasecmp(temp, "false") || !_cups_strcasecmp(temp, "no") || !_cups_strcasecmp(temp, "off")) { g = d->find_group("General"); if ((o = g->find_option("Duplex")) != NULL) g->options->remove(o); for (attr = (ppdcAttr *)d->attrs->first(); attr; attr = (ppdcAttr *)d->attrs->next()) if (!strcmp(attr->name->value, "cupsFlipDuplex")) { d->attrs->remove(attr); break; } } else if (!_cups_strcasecmp(temp, "normal") || !_cups_strcasecmp(temp, "true") || !_cups_strcasecmp(temp, "yes") || !_cups_strcasecmp(temp, "on") || !_cups_strcasecmp(temp, "flip") || !_cups_strcasecmp(temp, "rotated") || !_cups_strcasecmp(temp, "manualtumble")) { g = d->find_group("General"); o = g->find_option("Duplex"); if (!o) { o = new ppdcOption(PPDC_PICKONE, "Duplex", "2-Sided Printing", !_cups_strcasecmp(temp, "flip") ? PPDC_SECTION_PAGE : PPDC_SECTION_ANY, 10.0f); o->add_choice(new ppdcChoice("None", "Off (1-Sided)", "<>setpagedevice")); o->add_choice(new ppdcChoice("DuplexNoTumble", "Long-Edge (Portrait)", "<>setpagedevice")); o->add_choice(new ppdcChoice("DuplexTumble", "Short-Edge (Landscape)", "<>setpagedevice")); g->add_option(o); } for (attr = (ppdcAttr *)d->attrs->first(); attr; attr = (ppdcAttr *)d->attrs->next()) if (!strcmp(attr->name->value, "cupsFlipDuplex")) { if (_cups_strcasecmp(temp, "flip")) d->attrs->remove(attr); break; } if (!_cups_strcasecmp(temp, "flip") && !attr) d->add_attr(new ppdcAttr("cupsFlipDuplex", NULL, NULL, "true")); for (attr = (ppdcAttr *)d->attrs->first(); attr; attr = (ppdcAttr *)d->attrs->next()) if (!strcmp(attr->name->value, "cupsBackSide")) { d->attrs->remove(attr); break; } if (!_cups_strcasecmp(temp, "flip")) d->add_attr(new ppdcAttr("cupsBackSide", NULL, NULL, "Flipped")); else if (!_cups_strcasecmp(temp, "rotated")) d->add_attr(new ppdcAttr("cupsBackSide", NULL, NULL, "Rotated")); else if (!_cups_strcasecmp(temp, "manualtumble")) d->add_attr(new ppdcAttr("cupsBackSide", NULL, NULL, "ManualTumble")); else d->add_attr(new ppdcAttr("cupsBackSide", NULL, NULL, "Normal")); } else _cupsLangPrintf(stderr, _("ppdc: Unknown duplex type \"%s\" on line %d of %s."), temp, fp->line, fp->filename); } // // 'ppdcSource::get_filter()' - Get a filter. // ppdcFilter * // O - Filter ppdcSource::get_filter(ppdcFile *fp) // I - File to read { char type[1024], // MIME type program[1024], // Filter program *ptr; // Pointer into MIME type int cost; // Relative cost // Read filter parameters in one of the following formats: // // Filter "type cost program" // Filter type cost program if (!get_token(fp, type, sizeof(type))) { _cupsLangPrintf(stderr, _("ppdc: Expected a filter definition on line %d of %s."), fp->line, fp->filename); return (NULL); } if ((ptr = strchr(type, ' ')) != NULL) { // Old-style filter definition in one string... *ptr++ = '\0'; cost = strtol(ptr, &ptr, 10); while (isspace(*ptr)) ptr ++; strlcpy(program, ptr, sizeof(program)); } else { cost = get_integer(fp); if (!get_token(fp, program, sizeof(program))) { _cupsLangPrintf(stderr, _("ppdc: Expected a program name on line %d of %s."), fp->line, fp->filename); return (NULL); } } if (!type[0]) { _cupsLangPrintf(stderr, _("ppdc: Invalid empty MIME type for filter on line %d of " "%s."), fp->line, fp->filename); return (NULL); } if (cost < 0 || cost > 200) { _cupsLangPrintf(stderr, _("ppdc: Invalid cost for filter on line %d of %s."), fp->line, fp->filename); return (NULL); } if (!program[0]) { _cupsLangPrintf(stderr, _("ppdc: Invalid empty program name for filter on line %d " "of %s."), fp->line, fp->filename); return (NULL); } return (new ppdcFilter(type, program, cost)); } // // 'ppdcSource::get_float()' - Get a single floating-point number. // float // O - Number ppdcSource::get_float(ppdcFile *fp) // I - File to read { char temp[256], // String buffer *ptr; // Pointer into buffer float val; // Floating point value // Get the number from the file and range-check... if (!get_token(fp, temp, sizeof(temp))) { _cupsLangPrintf(stderr, _("ppdc: Expected real number on line %d of %s."), fp->line, fp->filename); return (-1.0f); } val = (float)strtod(temp, &ptr); if (*ptr) { _cupsLangPrintf(stderr, _("ppdc: Unknown trailing characters in real number \"%s\" " "on line %d of %s."), temp, fp->line, fp->filename); return (-1.0f); } else return (val); } // // 'ppdcSource::get_font()' - Get a font definition. // ppdcFont * // O - Font data ppdcSource::get_font(ppdcFile *fp) // I - File to read { char name[256], // Font name encoding[256], // Font encoding version[256], // Font version charset[256], // Font charset temp[256]; // Font status string ppdcFontStatus status; // Font status enumeration // Read font parameters as follows: // // Font * // Font name encoding version charset status // %font name encoding version charset status // // "Name" is the PostScript font name. // // "Encoding" is the default encoding of the font: Standard, ISOLatin1, // Special, Expert, ExpertSubset, etc. // // "Version" is the version number string. // // "Charset" specifies the characters that are included in the font: // Standard, Special, Expert, Adobe-Identity, etc. // // "Status" is the keyword ROM or Disk. if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected name after Font on line %d of %s."), fp->line, fp->filename); return (0); } if (!strcmp(name, "*")) { // Include all base fonts... encoding[0] = '\0'; version[0] = '\0'; charset[0] = '\0'; status = PPDC_FONT_ROM; } else { // Load a full font definition... if (!get_token(fp, encoding, sizeof(encoding))) { _cupsLangPrintf(stderr, _("ppdc: Expected encoding after Font on line %d of " "%s."), fp->line, fp->filename); return (0); } if (!get_token(fp, version, sizeof(version))) { _cupsLangPrintf(stderr, _("ppdc: Expected version after Font on line %d of " "%s."), fp->line, fp->filename); return (0); } if (!get_token(fp, charset, sizeof(charset))) { _cupsLangPrintf(stderr, _("ppdc: Expected charset after Font on line %d of " "%s."), fp->line, fp->filename); return (0); } if (!get_token(fp, temp, sizeof(temp))) { _cupsLangPrintf(stderr, _("ppdc: Expected status after Font on line %d of %s."), fp->line, fp->filename); return (0); } if (!_cups_strcasecmp(temp, "ROM")) status = PPDC_FONT_ROM; else if (!_cups_strcasecmp(temp, "Disk")) status = PPDC_FONT_DISK; else { _cupsLangPrintf(stderr, _("ppdc: Bad status keyword %s on line %d of %s."), temp, fp->line, fp->filename); return (0); } } // printf("Font %s %s %s %s %s\n", name, encoding, version, charset, temp); return (new ppdcFont(name, encoding, version, charset, status)); } // // 'ppdcSource::get_generic()' - Get a generic old-style option. // ppdcChoice * // O - Choice data ppdcSource::get_generic(ppdcFile *fp, // I - File to read const char *keyword, // I - Keyword name const char *tattr, // I - Text attribute const char *nattr) // I - Numeric attribute { char name[1024], // Name *text, // Text command[256]; // Command string int val; // Numeric value // Read one of the following parameters: // // Foo name/text // Foo integer name/text if (nattr) val = get_integer(fp); else val = 0; if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected name/text after %s on line %d of %s."), keyword, fp->line, fp->filename); return (NULL); } if ((text = strchr(name, '/')) != NULL) *text++ = '\0'; else text = name; if (nattr) { if (tattr) snprintf(command, sizeof(command), "<>setpagedevice", tattr, name, nattr, val); else snprintf(command, sizeof(command), "<>setpagedevice", nattr, val); } else snprintf(command, sizeof(command), "<>setpagedevice", tattr, name); return (new ppdcChoice(name, text, command)); } // // 'ppdcSource::get_group()' - Get an option group. // ppdcGroup * // O - Group ppdcSource::get_group(ppdcFile *fp, // I - File to read ppdcDriver *d) // I - Printer driver { char name[1024], // UI name *text; // UI text ppdcGroup *g; // Group // Read the Group parameters: // // Group name/text if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected group name/text on line %d of %s."), fp->line, fp->filename); return (NULL); } if ((text = strchr(name, '/')) != NULL) *text++ = '\0'; else text = name; // See if the group already exists... if ((g = d->find_group(name)) == NULL) { // Nope, add a new one... g = new ppdcGroup(name, text); } return (g); } // // 'ppdcSource::get_installable()' - Get an installable option. // ppdcOption * // O - Option ppdcSource::get_installable(ppdcFile *fp) // I - File to read { char name[1024], // Name for installable option *text; // Text for installable option ppdcOption *o; // Option // Read the parameter for an installable option: // // Installable name/text if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected name/text after Installable on line %d " "of %s."), fp->line, fp->filename); return (NULL); } if ((text = strchr(name, '/')) != NULL) *text++ = '\0'; else text = name; // Create the option... o = new ppdcOption(PPDC_BOOLEAN, name, text, PPDC_SECTION_ANY, 10.0f); // Add the false and true choices... o->add_choice(new ppdcChoice("False", "Not Installed", "")); o->add_choice(new ppdcChoice("True", "Installed", "")); return (o); } // // 'ppdcSource::get_integer()' - Get an integer value from a string. // #define PPDC_XX -1 // Bad #define PPDC_EQ 0 // == #define PPDC_NE 1 // != #define PPDC_LT 2 // < #define PPDC_LE 3 // <= #define PPDC_GT 4 // > #define PPDC_GE 5 // >= int // O - Integer value ppdcSource::get_integer(const char *v) // I - Value string { long val; // Value long temp, // Temporary value temp2; // Second temporary value char *newv, // New value string pointer ch; // Temporary character ppdcVariable *var; // #define variable int compop; // Comparison operator // Parse the value string... if (!v) return (-1); if (isdigit(*v & 255) || *v == '-' || *v == '+') { // Return a simple integer value val = strtol(v, (char **)&v, 0); if (*v || val == LONG_MIN) return (-1); else return ((int)val); } else if (*v == '(') { // Evaluate and expression in any of the following formats: // // (number number ... number) Bitwise OR of all numbers // (NAME == value) 1 if equal, 0 otherwise // (NAME != value) 1 if not equal, 0 otherwise // (NAME < value) 1 if less than, 0 otherwise // (NAME <= value) 1 if less than or equal, 0 otherwise // (NAME > value) 1 if greater than, 0 otherwise // (NAME >= value) 1 if greater than or equal, 0 otherwise v ++; val = 0; while (*v && *v != ')') { // Skip leading whitespace... while (*v && isspace(*v & 255)) v ++; if (!*v || *v == ')') break; if (isdigit(*v & 255) || *v == '-' || *v == '+') { // Bitwise OR a number... temp = strtol(v, &newv, 0); if (!*newv || newv == v || !(isspace(*newv) || *newv == ')') || temp == LONG_MIN) return (-1); } else { // NAME logicop value for (newv = (char *)v + 1; *newv && (isalnum(*newv & 255) || *newv == '_'); newv ++) /* do nothing */; ch = *newv; *newv = '\0'; if ((var = find_variable(v)) != NULL) { if (!var->value || !var->value->value || !var->value->value[0]) temp = 0; else if (isdigit(var->value->value[0] & 255) || var->value->value[0] == '-' || var->value->value[0] == '+') temp = strtol(var->value->value, NULL, 0); else temp = 1; } else temp = 0; *newv = ch; while (isspace(*newv & 255)) newv ++; if (!strncmp(newv, "==", 2)) { compop = PPDC_EQ; newv += 2; } else if (!strncmp(newv, "!=", 2)) { compop = PPDC_NE; newv += 2; } else if (!strncmp(newv, "<=", 2)) { compop = PPDC_LE; newv += 2; } else if (*newv == '<') { compop = PPDC_LT; newv ++; } else if (!strncmp(newv, ">=", 2)) { compop = PPDC_GE; newv += 2; } else if (*newv == '>') { compop = PPDC_GT; newv ++; } else compop = PPDC_XX; if (compop != PPDC_XX) { while (isspace(*newv & 255)) newv ++; if (*newv == ')' || !*newv) return (-1); if (isdigit(*newv & 255) || *newv == '-' || *newv == '+') { // Get the second number... temp2 = strtol(newv, &newv, 0); if (!*newv || newv == v || !(isspace(*newv) || *newv == ')') || temp == LONG_MIN) return (-1); } else { // Lookup the second name... for (v = newv, newv ++; *newv && (isalnum(*newv & 255) || *newv == '_'); newv ++); ch = *newv; *newv = '\0'; if ((var = find_variable(v)) != NULL) { if (!var->value || !var->value->value || !var->value->value[0]) temp2 = 0; else if (isdigit(var->value->value[0] & 255) || var->value->value[0] == '-' || var->value->value[0] == '+') temp2 = strtol(var->value->value, NULL, 0); else temp2 = 1; } else temp2 = 0; *newv = ch; } // Do the comparison... switch (compop) { case PPDC_EQ : temp = temp == temp2; break; case PPDC_NE : temp = temp != temp2; break; case PPDC_LT : temp = temp < temp2; break; case PPDC_LE : temp = temp <= temp2; break; case PPDC_GT : temp = temp > temp2; break; case PPDC_GE : temp = temp >= temp2; break; } } } val |= temp; v = newv; } if (*v == ')' && !v[1]) return ((int)val); else return (-1); } else if ((var = find_variable(v)) != NULL) { // NAME by itself returns 1 if the #define variable is not blank and // not "0"... return (var->value->value && var->value->value[0] && strcmp(var->value->value, "0")); } else { // Anything else is an error... return (-1); } } // // 'ppdcSource::get_integer()' - Get an integer value from a file. // int // O - Integer value ppdcSource::get_integer(ppdcFile *fp) // I - File to read { char temp[1024]; // String buffer if (!get_token(fp, temp, sizeof(temp))) { _cupsLangPrintf(stderr, _("ppdc: Expected integer on line %d of %s."), fp->line, fp->filename); return (-1); } else return (get_integer(temp)); } // // 'ppdcSource::get_measurement()' - Get a measurement value. // float // O - Measurement value in points ppdcSource::get_measurement(ppdcFile *fp) // I - File to read { char buffer[256], // Number buffer *ptr; // Pointer into buffer float val; // Measurement value // Grab a token from the file... if (!get_token(fp, buffer, sizeof(buffer))) return (-1.0f); // Get the floating point value of "s" and skip all digits and decimal points. val = (float)strtod(buffer, &ptr); // Check for a trailing unit specifier... if (!_cups_strcasecmp(ptr, "mm")) val *= 72.0f / 25.4f; else if (!_cups_strcasecmp(ptr, "cm")) val *= 72.0f / 2.54f; else if (!_cups_strcasecmp(ptr, "m")) val *= 72.0f / 0.0254f; else if (!_cups_strcasecmp(ptr, "in")) val *= 72.0f; else if (!_cups_strcasecmp(ptr, "ft")) val *= 72.0f * 12.0f; else if (_cups_strcasecmp(ptr, "pt") && *ptr) return (-1.0f); return (val); } // // 'ppdcSource::get_option()' - Get an option definition. // ppdcOption * // O - Option ppdcSource::get_option(ppdcFile *fp, // I - File to read ppdcDriver *d, // I - Printer driver ppdcGroup *g) // I - Current group { char name[1024], // UI name *text, // UI text type[256]; // UI type string ppdcOptType ot; // Option type value ppdcOptSection section; // Option section float order; // Option order ppdcOption *o; // Option ppdcGroup *mg; // Matching group, if any // Read the Option parameters: // // Option name/text type section order if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected option name/text on line %d of %s."), fp->line, fp->filename); return (NULL); } if ((text = strchr(name, '/')) != NULL) *text++ = '\0'; else text = name; if (!get_token(fp, type, sizeof(type))) { _cupsLangPrintf(stderr, _("ppdc: Expected option type on line %d of %s."), fp->line, fp->filename); return (NULL); } if (!_cups_strcasecmp(type, "boolean")) ot = PPDC_BOOLEAN; else if (!_cups_strcasecmp(type, "pickone")) ot = PPDC_PICKONE; else if (!_cups_strcasecmp(type, "pickmany")) ot = PPDC_PICKMANY; else { _cupsLangPrintf(stderr, _("ppdc: Invalid option type \"%s\" on line %d of %s."), type, fp->line, fp->filename); return (NULL); } if (!get_token(fp, type, sizeof(type))) { _cupsLangPrintf(stderr, _("ppdc: Expected option section on line %d of %s."), fp->line, fp->filename); return (NULL); } if (!_cups_strcasecmp(type, "AnySetup")) section = PPDC_SECTION_ANY; else if (!_cups_strcasecmp(type, "DocumentSetup")) section = PPDC_SECTION_DOCUMENT; else if (!_cups_strcasecmp(type, "ExitServer")) section = PPDC_SECTION_EXIT; else if (!_cups_strcasecmp(type, "JCLSetup")) section = PPDC_SECTION_JCL; else if (!_cups_strcasecmp(type, "PageSetup")) section = PPDC_SECTION_PAGE; else if (!_cups_strcasecmp(type, "Prolog")) section = PPDC_SECTION_PROLOG; else { _cupsLangPrintf(stderr, _("ppdc: Invalid option section \"%s\" on line %d of " "%s."), type, fp->line, fp->filename); return (NULL); } order = get_float(fp); // See if the option already exists... if ((o = d->find_option_group(name, &mg)) == NULL) { // Nope, add a new one... o = new ppdcOption(ot, name, text, section, order); } else if (o->type != ot) { _cupsLangPrintf(stderr, _("ppdc: Option %s redefined with a different type on line " "%d of %s."), name, fp->line, fp->filename); return (NULL); } else if (g != mg) { _cupsLangPrintf(stderr, _("ppdc: Option %s defined in two different groups on line " "%d of %s."), name, fp->line, fp->filename); return (NULL); } return (o); } // // 'ppdcSource::get_po()' - Get a message catalog. // ppdcCatalog * // O - Message catalog ppdcSource::get_po(ppdcFile *fp) // I - File to read { char locale[32], // Locale name poname[1024], // Message catalog filename basedir[1024], // Base directory *baseptr, // Pointer into directory pofilename[1024]; // Full filename of message catalog ppdcCatalog *cat; // Message catalog // Read the #po parameters: // // #po locale "filename.po" if (!get_token(fp, locale, sizeof(locale))) { _cupsLangPrintf(stderr, _("ppdc: Expected locale after #po on line %d of %s."), fp->line, fp->filename); return (NULL); } if (!get_token(fp, poname, sizeof(poname))) { _cupsLangPrintf(stderr, _("ppdc: Expected filename after #po %s on line %d of " "%s."), locale, fp->line, fp->filename); return (NULL); } // See if the locale is already loaded... if (find_po(locale)) { _cupsLangPrintf(stderr, _("ppdc: Duplicate #po for locale %s on line %d of %s."), locale, fp->line, fp->filename); return (NULL); } // Figure out the current directory... strlcpy(basedir, fp->filename, sizeof(basedir)); if ((baseptr = strrchr(basedir, '/')) != NULL) *baseptr = '\0'; else strlcpy(basedir, ".", sizeof(basedir)); // Find the po file... pofilename[0] = '\0'; if (!poname[0] || find_include(poname, basedir, pofilename, sizeof(pofilename))) { // Found it, so load it... cat = new ppdcCatalog(locale, pofilename); // Reset the filename to the name supplied by the user... cat->filename->release(); cat->filename = new ppdcString(poname); // Return the catalog... return (cat); } else { _cupsLangPrintf(stderr, _("ppdc: Unable to find #po file %s on line %d of %s."), poname, fp->line, fp->filename); return (NULL); } } // // 'ppdcSource::get_resolution()' - Get an old-style resolution option. // ppdcChoice * // O - Choice data ppdcSource::get_resolution(ppdcFile *fp)// I - File to read { char name[1024], // Name *text, // Text temp[256], // Temporary string command[256], // Command string *commptr; // Pointer into command int xdpi, ydpi, // X + Y resolution color_order, // Color order color_space, // Colorspace compression, // Compression mode depth, // Bits per color row_count, // Row count row_feed, // Row feed row_step; // Row step/interval // Read the resolution parameters: // // Resolution colorspace bits row-count row-feed row-step name/text if (!get_token(fp, temp, sizeof(temp))) { _cupsLangPrintf(stderr, _("ppdc: Expected override field after Resolution on line " "%d of %s."), fp->line, fp->filename); return (NULL); } color_order = get_color_order(temp); color_space = get_color_space(temp); compression = get_integer(temp); depth = get_integer(fp); row_count = get_integer(fp); row_feed = get_integer(fp); row_step = get_integer(fp); if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected name/text after Resolution on line %d of " "%s."), fp->line, fp->filename); return (NULL); } if ((text = strchr(name, '/')) != NULL) *text++ = '\0'; else text = name; switch (sscanf(name, "%dx%d", &xdpi, &ydpi)) { case 0 : _cupsLangPrintf(stderr, _("ppdc: Bad resolution name \"%s\" on line %d of " "%s."), name, fp->line, fp->filename); break; case 1 : ydpi = xdpi; break; } // Create the necessary PS commands... snprintf(command, sizeof(command), "<= 0) { snprintf(commptr, sizeof(command) - (size_t)(commptr - command), "/cupsColorOrder %d", color_order); commptr += strlen(commptr); } if (color_space >= 0) { snprintf(commptr, sizeof(command) - (size_t)(commptr - command), "/cupsColorSpace %d", color_space); commptr += strlen(commptr); } if (compression >= 0) { snprintf(commptr, sizeof(command) - (size_t)(commptr - command), "/cupsCompression %d", compression); commptr += strlen(commptr); } snprintf(commptr, sizeof(command) - (size_t)(commptr - command), ">>setpagedevice"); // Return the new choice... return (new ppdcChoice(name, text, command)); } // // 'ppdcSource::get_simple_profile()' - Get a simple color profile definition. // ppdcProfile * // O - Color profile ppdcSource::get_simple_profile(ppdcFile *fp) // I - File to read { char resolution[1024], // Resolution/media type *media_type; // Media type float m[9]; // Transform matrix float kd, rd, g; // Densities and gamma float red, green, blue; // RGB adjustments float yellow; // Yellow density float color; // Color density values // Get the SimpleColorProfile parameters: // // SimpleColorProfile resolution/mediatype black-density yellow-density // red-density gamma red-adjust green-adjust blue-adjust if (!get_token(fp, resolution, sizeof(resolution))) { _cupsLangPrintf(stderr, _("ppdc: Expected resolution/mediatype following " "SimpleColorProfile on line %d of %s."), fp->line, fp->filename); return (NULL); } if ((media_type = strchr(resolution, '/')) != NULL) *media_type++ = '\0'; else media_type = resolution; // Collect the profile parameters... kd = get_float(fp); yellow = get_float(fp); rd = get_float(fp); g = get_float(fp); red = get_float(fp); green = get_float(fp); blue = get_float(fp); // Build the color profile... color = 0.5f * rd / kd - kd; m[0] = 1.0f; // C m[1] = color + blue; // C + M (blue) m[2] = color - green; // C + Y (green) m[3] = color - blue; // M + C (blue) m[4] = 1.0f; // M m[5] = color + red; // M + Y (red) m[6] = yellow * (color + green); // Y + C (green) m[7] = yellow * (color - red); // Y + M (red) m[8] = yellow; // Y if (m[1] > 0.0f) { m[3] -= m[1]; m[1] = 0.0f; } else if (m[3] > 0.0f) { m[1] -= m[3]; m[3] = 0.0f; } if (m[2] > 0.0f) { m[6] -= m[2]; m[2] = 0.0f; } else if (m[6] > 0.0f) { m[2] -= m[6]; m[6] = 0.0f; } if (m[5] > 0.0f) { m[7] -= m[5]; m[5] = 0.0f; } else if (m[7] > 0.0f) { m[5] -= m[7]; m[7] = 0.0f; } // Return the new profile... return (new ppdcProfile(resolution, media_type, g, kd, m)); } // // 'ppdcSource::get_size()' - Get a media size definition from a file. // ppdcMediaSize * // O - Media size ppdcSource::get_size(ppdcFile *fp) // I - File to read { char name[1024], // Name *text; // Text float width, // Width length; // Length // Get the name, text, width, and length: // // #media name/text width length if (!get_token(fp, name, sizeof(name))) return (NULL); if ((text = strchr(name, '/')) != NULL) *text++ = '\0'; else text = name; if ((width = get_measurement(fp)) < 0.0f) return (NULL); if ((length = get_measurement(fp)) < 0.0f) return (NULL); // Return the new media size... return (new ppdcMediaSize(name, text, width, length, 0.0f, 0.0f, 0.0f, 0.0f)); } // // 'ppdcSource::get_token()' - Get a token from a file. // char * // O - Token string or NULL ppdcSource::get_token(ppdcFile *fp, // I - File to read char *buffer, // I - Buffer int buflen) // I - Length of buffer { char *bufptr, // Pointer into string buffer *bufend; // End of string buffer int ch, // Character from file nextch, // Next char in file quote, // Quote character used... empty, // Empty input? startline; // Start line for quote char name[256], // Name string *nameptr; // Name pointer ppdcVariable *var; // Variable pointer // Mark the beginning and end of the buffer... bufptr = buffer; bufend = buffer + buflen - 1; // Loop intil we've read a token... quote = 0; startline = 0; empty = 1; while ((ch = fp->get()) != EOF) { if (isspace(ch) && !quote) { if (empty) continue; else break; } else if (ch == '$') { // Variable substitution empty = 0; for (nameptr = name; (ch = fp->peek()) != EOF;) { if (!isalnum(ch) && ch != '_') break; else if (nameptr < (name + sizeof(name) - 1)) *nameptr++ = (char)fp->get(); } if (nameptr == name) { // Just substitute this character... if (ch == '$') { // $$ = $ if (bufptr < bufend) *bufptr++ = (char)fp->get(); } else { // $ch = $ch _cupsLangPrintf(stderr, _("ppdc: Bad variable substitution ($%c) on line %d " "of %s."), ch, fp->line, fp->filename); if (bufptr < bufend) *bufptr++ = '$'; } } else { // Substitute the variable value... *nameptr = '\0'; var = find_variable(name); if (var) { strlcpy(bufptr, var->value->value, (size_t)(bufend - bufptr + 1)); bufptr += strlen(bufptr); } else { if (!(cond_state & PPDC_COND_SKIP)) _cupsLangPrintf(stderr, _("ppdc: Undefined variable (%s) on line %d of " "%s."), name, fp->line, fp->filename); snprintf(bufptr, (size_t)(bufend - bufptr + 1), "$%s", name); bufptr += strlen(bufptr); } } } else if (ch == '/' && !quote) { // Possibly a comment... nextch = fp->peek(); if (nextch == '*') { // C comment... fp->get(); ch = fp->get(); while ((nextch = fp->get()) != EOF) { if (ch == '*' && nextch == '/') break; ch = nextch; } if (nextch == EOF) break; } else if (nextch == '/') { // C++ comment... while ((nextch = fp->get()) != EOF) if (nextch == '\n') break; if (nextch == EOF) break; } else { // Not a comment... empty = 0; if (bufptr < bufend) *bufptr++ = (char)ch; } } else if (ch == '\'' || ch == '\"') { empty = 0; if (quote == ch) { // Ending the current quoted string... quote = 0; } else if (quote) { // Insert the opposing quote char... if (bufptr < bufend) *bufptr++ = (char)ch; } else { // Start a new quoted string... startline = fp->line; quote = ch; } } else if ((ch == '(' || ch == '<') && !quote) { empty = 0; quote = ch; startline = fp->line; if (bufptr < bufend) *bufptr++ = (char)ch; } else if ((ch == ')' && quote == '(') || (ch == '>' && quote == '<')) { quote = 0; if (bufptr < bufend) *bufptr++ = (char)ch; } else if (ch == '\\') { empty = 0; if ((ch = fp->get()) == EOF) break; if (bufptr < bufend) *bufptr++ = (char)ch; } else if (bufptr < bufend) { empty = 0; *bufptr++ = (char)ch; if ((ch == '{' || ch == '}') && !quote) break; } } if (quote) { _cupsLangPrintf(stderr, _("ppdc: Unterminated string starting with %c on line %d " "of %s."), quote, startline, fp->filename); return (NULL); } if (empty) return (NULL); else { *bufptr = '\0'; return (buffer); } } // // 'ppdcSource::get_variable()' - Get a variable definition. // ppdcVariable * // O - Variable ppdcSource::get_variable(ppdcFile *fp) // I - File to read { char name[1024], // Name value[1024]; // Value // Get the name and value: // // #define name value if (!get_token(fp, name, sizeof(name))) return (NULL); if (!get_token(fp, value, sizeof(value))) return (NULL); // Set the variable... return (set_variable(name, value)); } // // 'ppdcSource::quotef()' - Write a formatted, quoted string... // int // O - Number bytes on success, -1 on failure ppdcSource::quotef(cups_file_t *fp, // I - File to write to const char *format, // I - Printf-style format string ...) // I - Additional args as needed { va_list ap; // Pointer to additional arguments int bytes; // Bytes written char sign, // Sign of format width size, // Size character (h, l, L) type; // Format type character const char *bufformat; // Start of format int width, // Width of field prec; // Number of characters of precision char tformat[100]; // Temporary format string for fprintf() char *s; // Pointer to string int slen; // Length of string int i; // Looping var // Range check input... if (!fp || !format) return (-1); // Loop through the format string, formatting as needed... va_start(ap, format); bytes = 0; while (*format) { if (*format == '%') { bufformat = format; format ++; if (*format == '%') { cupsFilePutChar(fp, *format++); bytes ++; continue; } else if (strchr(" -+#\'", *format)) sign = *format++; else sign = 0; width = 0; while (isdigit(*format)) width = width * 10 + *format++ - '0'; if (*format == '.') { format ++; prec = 0; while (isdigit(*format)) prec = prec * 10 + *format++ - '0'; } else prec = -1; if (*format == 'l' && format[1] == 'l') { size = 'L'; format += 2; } else if (*format == 'h' || *format == 'l' || *format == 'L') size = *format++; else size = '\0'; if (!*format) break; type = *format++; switch (type) { case 'E' : // Floating point formats case 'G' : case 'e' : case 'f' : case 'g' : if ((format - bufformat + 1) > (int)sizeof(tformat)) break; memcpy(tformat, bufformat, (size_t)(format - bufformat)); tformat[format - bufformat] = '\0'; bytes += cupsFilePrintf(fp, tformat, va_arg(ap, double)); break; case 'B' : // Integer formats case 'X' : case 'b' : case 'd' : case 'i' : case 'o' : case 'u' : case 'x' : if ((format - bufformat + 1) > (int)sizeof(tformat)) break; memcpy(tformat, bufformat, (size_t)(format - bufformat)); tformat[format - bufformat] = '\0'; # ifdef HAVE_LONG_LONG if (size == 'L') bytes += cupsFilePrintf(fp, tformat, va_arg(ap, long long)); else # endif /* HAVE_LONG_LONG */ if (size == 'l') bytes += cupsFilePrintf(fp, tformat, va_arg(ap, long)); else bytes += cupsFilePrintf(fp, tformat, va_arg(ap, int)); break; case 'p' : // Pointer value if ((format - bufformat + 1) > (int)sizeof(tformat)) break; memcpy(tformat, bufformat, (size_t)(format - bufformat)); tformat[format - bufformat] = '\0'; bytes += cupsFilePrintf(fp, tformat, va_arg(ap, void *)); break; case 'c' : // Character or character array if (width <= 1) { bytes ++; cupsFilePutChar(fp, va_arg(ap, int)); } else { cupsFileWrite(fp, va_arg(ap, char *), (size_t)width); bytes += width; } break; case 's' : // String if ((s = va_arg(ap, char *)) == NULL) s = (char *)"(nil)"; slen = (int)strlen(s); if (slen > width && prec != width) width = slen; if (slen > width) slen = width; if (sign != '-') { for (i = width - slen; i > 0; i --, bytes ++) cupsFilePutChar(fp, ' '); } for (i = slen; i > 0; i --, s ++, bytes ++) { if (*s == '\\' || *s == '\"') { cupsFilePutChar(fp, '\\'); bytes ++; } cupsFilePutChar(fp, *s); } if (sign == '-') { for (i = width - slen; i > 0; i --, bytes ++) cupsFilePutChar(fp, ' '); } break; } } else { cupsFilePutChar(fp, *format++); bytes ++; } } va_end(ap); // Return the number of characters written. return (bytes); } // // 'ppdcSource::read_file()' - Read a driver source file. // void ppdcSource::read_file(const char *f, // I - File to read cups_file_t *ffp) // I - File pointer to use { ppdcFile *fp = new ppdcFile(f, ffp); scan_file(fp); delete fp; if (cond_current != cond_stack) _cupsLangPrintf(stderr, _("ppdc: Missing #endif at end of \"%s\"."), f); } // // 'ppdcSource::scan_file()' - Scan a driver source file. // void ppdcSource::scan_file(ppdcFile *fp, // I - File to read ppdcDriver *td, // I - Driver template bool inc) // I - Including? { ppdcDriver *d; // Current driver ppdcGroup *g, // Current group *mg, // Matching group *general, // General options group *install; // Installable options group ppdcOption *o; // Current option ppdcChoice *c; // Current choice char temp[256], // Token from file... *ptr; // Pointer into token int isdefault; // Default option? // Initialize things as needed... if (inc && td) { d = td; d->retain(); } else d = new ppdcDriver(td); if ((general = d->find_group("General")) == NULL) { general = new ppdcGroup("General", NULL); d->add_group(general); } if ((install = d->find_group("InstallableOptions")) == NULL) { install = new ppdcGroup("InstallableOptions", "Installable Options"); d->add_group(install); } // Loop until EOF or } o = 0; g = general; while (get_token(fp, temp, sizeof(temp))) { if (temp[0] == '*') { // Mark the next choice as the default isdefault = 1; for (ptr = temp; ptr[1]; ptr ++) *ptr = ptr[1]; *ptr = '\0'; } else { // Don't mark the next choice as the default isdefault = 0; } if (!_cups_strcasecmp(temp, "}")) { // Close this one out... break; } else if (!_cups_strcasecmp(temp, "{")) { // Open a new child... scan_file(fp, d); } else if (!_cups_strcasecmp(temp, "#if")) { if ((cond_current - cond_stack) >= 100) { _cupsLangPrintf(stderr, _("ppdc: Too many nested #if's on line %d of %s."), fp->line, fp->filename); break; } cond_current ++; if (get_integer(fp) > 0) *cond_current = PPDC_COND_SATISFIED; else { *cond_current = PPDC_COND_SKIP; cond_state |= PPDC_COND_SKIP; } } else if (!_cups_strcasecmp(temp, "#elif")) { if (cond_current == cond_stack) { _cupsLangPrintf(stderr, _("ppdc: Missing #if on line %d of %s."), fp->line, fp->filename); break; } if (*cond_current & PPDC_COND_SATISFIED) { get_integer(fp); *cond_current |= PPDC_COND_SKIP; } else if (get_integer(fp) > 0) { *cond_current |= PPDC_COND_SATISFIED; *cond_current &= ~PPDC_COND_SKIP; } else *cond_current |= PPDC_COND_SKIP; // Update the current state int *cond_temp = cond_current; // Temporary stack pointer cond_state = PPDC_COND_NORMAL; while (cond_temp > cond_stack) if (*cond_temp & PPDC_COND_SKIP) { cond_state = PPDC_COND_SKIP; break; } else cond_temp --; } else if (!_cups_strcasecmp(temp, "#else")) { if (cond_current == cond_stack) { _cupsLangPrintf(stderr, _("ppdc: Missing #if on line %d of %s."), fp->line, fp->filename); break; } if (*cond_current & PPDC_COND_SATISFIED) *cond_current |= PPDC_COND_SKIP; else { *cond_current |= PPDC_COND_SATISFIED; *cond_current &= ~PPDC_COND_SKIP; } // Update the current state int *cond_temp = cond_current; // Temporary stack pointer cond_state = PPDC_COND_NORMAL; while (cond_temp > cond_stack) if (*cond_temp & PPDC_COND_SKIP) { cond_state = PPDC_COND_SKIP; break; } else cond_temp --; } else if (!_cups_strcasecmp(temp, "#endif")) { if (cond_current == cond_stack) { _cupsLangPrintf(stderr, _("ppdc: Missing #if on line %d of %s."), fp->line, fp->filename); break; } cond_current --; // Update the current state int *cond_temp = cond_current; // Temporary stack pointer cond_state = PPDC_COND_NORMAL; while (cond_temp > cond_stack) if (*cond_temp & PPDC_COND_SKIP) { cond_state = PPDC_COND_SKIP; break; } else cond_temp --; } else if (!_cups_strcasecmp(temp, "#define")) { // Get the variable... get_variable(fp); } else if (!_cups_strcasecmp(temp, "#include")) { // #include filename char basedir[1024], // Base directory *baseptr, // Pointer into directory inctemp[1024], // Initial filename incname[1024]; // Include filename ppdcFile *incfile; // Include file int *old_current = cond_current; // Previous current stack // Get the include name... if (!get_token(fp, inctemp, sizeof(inctemp))) { _cupsLangPrintf(stderr, _("ppdc: Expected include filename on line %d of " "%s."), fp->line, fp->filename); break; } if (cond_state) continue; // Figure out the current directory... strlcpy(basedir, fp->filename, sizeof(basedir)); if ((baseptr = strrchr(basedir, '/')) != NULL) *baseptr = '\0'; else strlcpy(basedir, ".", sizeof(basedir)); // Find the include file... if (find_include(inctemp, basedir, incname, sizeof(incname))) { // Open the include file, scan it, and then close it... incfile = new ppdcFile(incname); scan_file(incfile, d, true); delete incfile; if (cond_current != old_current) _cupsLangPrintf(stderr, _("ppdc: Missing #endif at end of \"%s\"."), incname); } else { // Can't find it! _cupsLangPrintf(stderr, _("ppdc: Unable to find include file \"%s\" on line %d " "of %s."), inctemp, fp->line, fp->filename); break; } } else if (!_cups_strcasecmp(temp, "#media")) { ppdcMediaSize *m; // Media size // Get a media size... m = get_size(fp); if (m) { if (cond_state) m->release(); else sizes->add(m); } } else if (!_cups_strcasecmp(temp, "#po")) { ppdcCatalog *cat; // Message catalog // Get a message catalog... cat = get_po(fp); if (cat) { if (cond_state) cat->release(); else po_files->add(cat); } } else if (!_cups_strcasecmp(temp, "Attribute") || !_cups_strcasecmp(temp, "LocAttribute")) { ppdcAttr *a; // Attribute // Get an attribute... a = get_attr(fp, !_cups_strcasecmp(temp, "LocAttribute")); if (a) { if (cond_state) a->release(); else d->add_attr(a); } } else if (!_cups_strcasecmp(temp, "Choice")) { // Get a choice... c = get_choice(fp); if (!c) break; if (cond_state) { c->release(); continue; } // Add it to the current option... if (!o) { _cupsLangPrintf(stderr, _("ppdc: Choice found on line %d of %s with no " "Option."), fp->line, fp->filename); break; } o->add_choice(c); if (isdefault) o->set_defchoice(c); } else if (!_cups_strcasecmp(temp, "ColorDevice")) { // ColorDevice boolean if (cond_state) get_boolean(fp); else d->color_device = get_boolean(fp); } else if (!_cups_strcasecmp(temp, "ColorModel")) { // Get the color model c = get_color_model(fp); if (!c) continue; if (cond_state) { c->release(); continue; } // Add the choice to the ColorModel option... if ((o = d->find_option("ColorModel")) == NULL) { // Create the ColorModel option... o = new ppdcOption(PPDC_PICKONE, "ColorModel", "Color Mode", PPDC_SECTION_ANY, 10.0f); g = general; g->add_option(o); } o->add_choice(c); if (isdefault) o->set_defchoice(c); o = NULL; } else if (!_cups_strcasecmp(temp, "ColorProfile")) { ppdcProfile *p; // Color profile // Get the color profile... p = get_color_profile(fp); if (p) { if (cond_state) p->release(); else d->profiles->add(p); } } else if (!_cups_strcasecmp(temp, "Copyright")) { // Copyright string char copytemp[8192], // Copyright string *copyptr, // Pointer into string *copyend; // Pointer to end of string // Get the copyright string... if (!get_token(fp, copytemp, sizeof(temp))) { _cupsLangPrintf(stderr, _("ppdc: Expected string after Copyright on line %d " "of %s."), fp->line, fp->filename); break; } if (cond_state) continue; // Break it up into individual lines... for (copyptr = copytemp; copyptr; copyptr = copyend) { if ((copyend = strchr(copyptr, '\n')) != NULL) *copyend++ = '\0'; d->copyright->add(new ppdcString(copyptr)); } } else if (!_cups_strcasecmp(temp, "CustomMedia")) { ppdcMediaSize *m; // Media size // Get a custom media size... m = get_custom_size(fp); if (cond_state) { m->release(); continue; } if (m) d->sizes->add(m); if (isdefault) d->set_default_size(m); } else if (!_cups_strcasecmp(temp, "Cutter")) { // Cutter boolean int have_cutter; // Have a paper cutter? have_cutter = get_boolean(fp); if (have_cutter <= 0 || cond_state) continue; if ((o = d->find_option("CutMedia")) == NULL) { o = new ppdcOption(PPDC_BOOLEAN, "CutMedia", "Cut Media", PPDC_SECTION_ANY, 10.0f); g = general; g->add_option(o); c = new ppdcChoice("False", NULL, "<>setpagedevice"); o->add_choice(c); o->set_defchoice(c); c = new ppdcChoice("True", NULL, "<>setpagedevice"); o->add_choice(c); } o = NULL; } else if (!_cups_strcasecmp(temp, "Darkness")) { // Get the darkness choice... c = get_generic(fp, "Darkness", NULL, "cupsCompression"); if (!c) continue; if (cond_state) { c->release(); continue; } // Add the choice to the cupsDarkness option... if ((o = d->find_option_group("cupsDarkness", &mg)) == NULL) { // Create the cupsDarkness option... o = new ppdcOption(PPDC_PICKONE, "cupsDarkness", "Darkness", PPDC_SECTION_ANY, 10.0f); g = general; g->add_option(o); } else if (mg != general) { _cupsLangPrintf(stderr, _("ppdc: Option %s defined in two different groups on " "line %d of %s."), "cupsDarkness", fp->line, fp->filename); c->release(); continue; } o->add_choice(c); if (isdefault) o->set_defchoice(c); o = NULL; } else if (!_cups_strcasecmp(temp, "DriverType")) { int i; // Looping var // DriverType keyword if (!get_token(fp, temp, sizeof(temp))) { _cupsLangPrintf(stderr, _("ppdc: Expected driver type keyword following " "DriverType on line %d of %s."), fp->line, fp->filename); continue; } if (cond_state) continue; for (i = 0; i < (int)(sizeof(driver_types) / sizeof(driver_types[0])); i ++) if (!_cups_strcasecmp(temp, driver_types[i])) break; if (i < (int)(sizeof(driver_types) / sizeof(driver_types[0]))) d->type = (ppdcDrvType)i; else if (!_cups_strcasecmp(temp, "dymo")) d->type = PPDC_DRIVER_LABEL; else _cupsLangPrintf(stderr, _("ppdc: Unknown driver type %s on line %d of %s."), temp, fp->line, fp->filename); } else if (!_cups_strcasecmp(temp, "Duplex")) get_duplex(fp, d); else if (!_cups_strcasecmp(temp, "Filter")) { ppdcFilter *f; // Filter // Get the filter value... f = get_filter(fp); if (f) { if (cond_state) f->release(); else d->filters->add(f); } } else if (!_cups_strcasecmp(temp, "Finishing")) { // Get the finishing choice... c = get_generic(fp, "Finishing", "OutputType", NULL); if (!c) continue; if (cond_state) { c->release(); continue; } // Add the choice to the cupsFinishing option... if ((o = d->find_option_group("cupsFinishing", &mg)) == NULL) { // Create the cupsFinishing option... o = new ppdcOption(PPDC_PICKONE, "cupsFinishing", "Finishing", PPDC_SECTION_ANY, 10.0f); g = general; g->add_option(o); } else if (mg != general) { _cupsLangPrintf(stderr, _("ppdc: Option %s defined in two different groups on " "line %d of %s."), "cupsFinishing", fp->line, fp->filename); c->release(); continue; } o->add_choice(c); if (isdefault) o->set_defchoice(c); o = NULL; } else if (!_cups_strcasecmp(temp, "Font") || !_cups_strcasecmp(temp, "#font")) { ppdcFont *f; // Font // Get a font... f = get_font(fp); if (f) { if (cond_state) f->release(); else { if (!_cups_strcasecmp(temp, "#font")) base_fonts->add(f); else d->add_font(f); if (isdefault) d->set_default_font(f); } } } else if (!_cups_strcasecmp(temp, "Group")) { // Get a group... ppdcGroup *tempg = get_group(fp, d); if (!tempg) break; if (cond_state) { if (!d->find_group(tempg->name->value)) tempg->release(); } else { if (!d->find_group(tempg->name->value)) d->add_group(tempg); g = tempg; } } else if (!_cups_strcasecmp(temp, "HWMargins")) { // HWMargins left bottom right top d->left_margin = get_measurement(fp); d->bottom_margin = get_measurement(fp); d->right_margin = get_measurement(fp); d->top_margin = get_measurement(fp); } else if (!_cups_strcasecmp(temp, "InputSlot")) { // Get the input slot choice... c = get_generic(fp, "InputSlot", NULL, "MediaPosition"); if (!c) continue; if (cond_state) { c->release(); continue; } // Add the choice to the InputSlot option... if ((o = d->find_option_group("InputSlot", &mg)) == NULL) { // Create the InputSlot option... o = new ppdcOption(PPDC_PICKONE, "InputSlot", "Media Source", PPDC_SECTION_ANY, 10.0f); g = general; g->add_option(o); } else if (mg != general) { _cupsLangPrintf(stderr, _("ppdc: Option %s defined in two different groups on " "line %d of %s."), "InputSlot", fp->line, fp->filename); c->release(); continue; } o->add_choice(c); if (isdefault) o->set_defchoice(c); o = NULL; } else if (!_cups_strcasecmp(temp, "Installable")) { // Get the installable option... o = get_installable(fp); // Add it as needed... if (o) { if (cond_state) o->release(); else install->add_option(o); o = NULL; } } else if (!_cups_strcasecmp(temp, "ManualCopies")) { // ManualCopies boolean if (cond_state) get_boolean(fp); else d->manual_copies = get_boolean(fp); } else if (!_cups_strcasecmp(temp, "Manufacturer")) { // Manufacturer name char name[256]; // Model name string if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected name after Manufacturer on line %d " "of %s."), fp->line, fp->filename); break; } if (!cond_state) d->set_manufacturer(name); } else if (!_cups_strcasecmp(temp, "MaxSize")) { // MaxSize width length if (cond_state) { get_measurement(fp); get_measurement(fp); } else { d->max_width = get_measurement(fp); d->max_length = get_measurement(fp); } } else if (!_cups_strcasecmp(temp, "MediaSize")) { // MediaSize keyword char name[41]; // Media size name ppdcMediaSize *m, // Matching media size... *dm; // Driver media size... if (get_token(fp, name, sizeof(name)) == NULL) { _cupsLangPrintf(stderr, _("ppdc: Expected name after MediaSize on line %d of " "%s."), fp->line, fp->filename); break; } if (cond_state) continue; m = find_size(name); if (!m) { _cupsLangPrintf(stderr, _("ppdc: Unknown media size \"%s\" on line %d of " "%s."), name, fp->line, fp->filename); break; } // Add this size to the driver... dm = new ppdcMediaSize(m->name->value, m->text->value, m->width, m->length, d->left_margin, d->bottom_margin, d->right_margin, d->top_margin); d->sizes->add(dm); if (isdefault) d->set_default_size(dm); } else if (!_cups_strcasecmp(temp, "MediaType")) { // Get the media type choice... c = get_generic(fp, "MediaType", "MediaType", "cupsMediaType"); if (!c) continue; if (cond_state) { c->release(); continue; } // Add the choice to the MediaType option... if ((o = d->find_option_group("MediaType", &mg)) == NULL) { // Create the MediaType option... o = new ppdcOption(PPDC_PICKONE, "MediaType", "Media Type", PPDC_SECTION_ANY, 10.0f); g = general; g->add_option(o); } else if (mg != general) { _cupsLangPrintf(stderr, _("ppdc: Option %s defined in two different groups on " "line %d of %s."), "MediaType", fp->line, fp->filename); c->release(); continue; } o->add_choice(c); if (isdefault) o->set_defchoice(c); o = NULL; } else if (!_cups_strcasecmp(temp, "MinSize")) { // MinSize width length if (cond_state) { get_measurement(fp); get_measurement(fp); } else { d->min_width = get_measurement(fp); d->min_length = get_measurement(fp); } } else if (!_cups_strcasecmp(temp, "ModelName")) { // ModelName name char name[256]; // Model name string if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected name after ModelName on line %d of " "%s."), fp->line, fp->filename); break; } if (!cond_state) d->set_model_name(name); } else if (!_cups_strcasecmp(temp, "ModelNumber")) { // ModelNumber number if (cond_state) get_integer(fp); else d->model_number = get_integer(fp); } else if (!_cups_strcasecmp(temp, "Option")) { // Get an option... ppdcOption *tempo = get_option(fp, d, g); if (!tempo) break; if (cond_state) { if (!g->find_option(tempo->name->value)) tempo->release(); } else { if (!g->find_option(tempo->name->value)) g->add_option(tempo); o = tempo; } } else if (!_cups_strcasecmp(temp, "FileName")) { // FileName name char name[256]; // Filename string if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected name after FileName on line %d of " "%s."), fp->line, fp->filename); break; } if (!cond_state) d->set_file_name(name); } else if (!_cups_strcasecmp(temp, "PCFileName")) { // PCFileName name char name[256]; // PC filename string if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected name after PCFileName on line %d of " "%s."), fp->line, fp->filename); break; } if (!cond_state) d->set_pc_file_name(name); } else if (!_cups_strcasecmp(temp, "Resolution")) { // Get the resolution choice... c = get_resolution(fp); if (!c) continue; if (cond_state) { c->release(); continue; } // Add the choice to the Resolution option... if ((o = d->find_option_group("Resolution", &mg)) == NULL) { // Create the Resolution option... o = new ppdcOption(PPDC_PICKONE, "Resolution", NULL, PPDC_SECTION_ANY, 10.0f); g = general; g->add_option(o); } else if (mg != general) { _cupsLangPrintf(stderr, _("ppdc: Option %s defined in two different groups on " "line %d of %s."), "Resolution", fp->line, fp->filename); c->release(); continue; } o->add_choice(c); if (isdefault) o->set_defchoice(c); o = NULL; } else if (!_cups_strcasecmp(temp, "SimpleColorProfile")) { ppdcProfile *p; // Color profile // Get the color profile... p = get_simple_profile(fp); if (p) { if (cond_state) p->release(); else d->profiles->add(p); } } else if (!_cups_strcasecmp(temp, "Throughput")) { // Throughput number if (cond_state) get_integer(fp); else d->throughput = get_integer(fp); } else if (!_cups_strcasecmp(temp, "UIConstraints")) { ppdcConstraint *con; // Constraint con = get_constraint(fp); if (con) { if (cond_state) con->release(); else d->constraints->add(con); } } else if (!_cups_strcasecmp(temp, "VariablePaperSize")) { // VariablePaperSize boolean if (cond_state) get_boolean(fp); else d->variable_paper_size = get_boolean(fp); } else if (!_cups_strcasecmp(temp, "Version")) { // Version string char name[256]; // Model name string if (!get_token(fp, name, sizeof(name))) { _cupsLangPrintf(stderr, _("ppdc: Expected string after Version on line %d of " "%s."), fp->line, fp->filename); break; } if (!cond_state) d->set_version(name); } else { _cupsLangPrintf(stderr, _("ppdc: Unknown token \"%s\" seen on line %d of %s."), temp, fp->line, fp->filename); break; } } // Done processing this block, is there anything to save? if (!inc) { if (!d->pc_file_name || !d->model_name || !d->manufacturer || !d->version || !d->sizes->count) { // Nothing to save... d->release(); } else { // Got a driver, save it... drivers->add(d); } } else if (inc && td) td->release(); } // // 'ppdcSource::set_variable()' - Set a variable. // ppdcVariable * // O - Variable ppdcSource::set_variable( const char *name, // I - Name const char *value) // I - Value { ppdcVariable *v; // Variable // See if the variable exists already... v = find_variable(name); if (v) { // Change the variable value... v->set_value(value); } else { // Create a new variable and add it... v = new ppdcVariable(name, value); vars->add(v); } return (v); } // // 'ppdcSource::write_file()' - Write the current source data to a file. // int // O - 0 on success, -1 on error ppdcSource::write_file(const char *f) // I - File to write { cups_file_t *fp; // Output file char bckname[1024]; // Backup file ppdcDriver *d; // Current driver ppdcString *st; // Current string ppdcAttr *a; // Current attribute ppdcConstraint *co; // Current constraint ppdcFilter *fi; // Current filter ppdcFont *fo; // Current font ppdcGroup *g; // Current group ppdcOption *o; // Current option ppdcChoice *ch; // Current choice ppdcProfile *p; // Current color profile ppdcMediaSize *si; // Current media size float left, // Current left margin bottom, // Current bottom margin right, // Current right margin top; // Current top margin int dtused[PPDC_DRIVER_MAX];// Driver type usage... // Rename the current file, if any, to .bck... snprintf(bckname, sizeof(bckname), "%s.bck", f); rename(f, bckname); // Open the output file... fp = cupsFileOpen(f, "w"); if (!fp) { // Can't create file; restore backup and return... rename(bckname, f); return (-1); } cupsFilePuts(fp, "// CUPS PPD Compiler " CUPS_SVERSION "\n\n"); // Include standard files... cupsFilePuts(fp, "// Include necessary files...\n"); cupsFilePuts(fp, "#include \n"); cupsFilePuts(fp, "#include \n"); memset(dtused, 0, sizeof(dtused)); for (d = (ppdcDriver *)drivers->first(); d; d = (ppdcDriver *)drivers->next()) if (d->type > PPDC_DRIVER_PS && !dtused[d->type]) { cupsFilePrintf(fp, "#include <%s.h>\n", driver_types[d->type]); dtused[d->type] = 1; } // Output each driver... for (d = (ppdcDriver *)drivers->first(); d; d = (ppdcDriver *)drivers->next()) { // Start the driver... cupsFilePrintf(fp, "\n// %s %s\n", d->manufacturer->value, d->model_name->value); cupsFilePuts(fp, "{\n"); // Write the copyright stings... for (st = (ppdcString *)d->copyright->first(); st; st = (ppdcString *)d->copyright->next()) quotef(fp, " Copyright \"%s\"\n", st->value); // Write other strings and values... if (d->manufacturer && d->manufacturer->value) quotef(fp, " Manufacturer \"%s\"\n", d->manufacturer->value); if (d->model_name->value) quotef(fp, " ModelName \"%s\"\n", d->model_name->value); if (d->file_name && d->file_name->value) quotef(fp, " FileName \"%s\"\n", d->file_name->value); if (d->pc_file_name && d->pc_file_name->value) quotef(fp, " PCFileName \"%s\"\n", d->pc_file_name->value); if (d->version && d->version->value) quotef(fp, " Version \"%s\"\n", d->version->value); cupsFilePrintf(fp, " DriverType %s\n", driver_types[d->type]); if (d->model_number) { switch (d->type) { case PPDC_DRIVER_LABEL : cupsFilePuts(fp, " ModelNumber "); switch (d->model_number) { case DYMO_3x0 : cupsFilePuts(fp, "$DYMO_3x0\n"); break; case ZEBRA_EPL_LINE : cupsFilePuts(fp, "$ZEBRA_EPL_LINE\n"); break; case ZEBRA_EPL_PAGE : cupsFilePuts(fp, "$ZEBRA_EPL_PAGE\n"); break; case ZEBRA_ZPL : cupsFilePuts(fp, "$ZEBRA_ZPL\n"); break; case ZEBRA_CPCL : cupsFilePuts(fp, "$ZEBRA_CPCL\n"); break; case INTELLITECH_PCL : cupsFilePuts(fp, "$INTELLITECH_PCL\n"); break; default : cupsFilePrintf(fp, "%d\n", d->model_number); break; } break; case PPDC_DRIVER_EPSON : cupsFilePuts(fp, " ModelNumber "); switch (d->model_number) { case EPSON_9PIN : cupsFilePuts(fp, "$EPSON_9PIN\n"); break; case EPSON_24PIN : cupsFilePuts(fp, "$EPSON_24PIN\n"); break; case EPSON_COLOR : cupsFilePuts(fp, "$EPSON_COLOR\n"); break; case EPSON_PHOTO : cupsFilePuts(fp, "$EPSON_PHOTO\n"); break; case EPSON_ICOLOR : cupsFilePuts(fp, "$EPSON_ICOLOR\n"); break; case EPSON_IPHOTO : cupsFilePuts(fp, "$EPSON_IPHOTO\n"); break; default : cupsFilePrintf(fp, "%d\n", d->model_number); break; } break; case PPDC_DRIVER_HP : cupsFilePuts(fp, " ModelNumber "); switch (d->model_number) { case HP_LASERJET : cupsFilePuts(fp, "$HP_LASERJET\n"); break; case HP_DESKJET : cupsFilePuts(fp, "$HP_DESKJET\n"); break; case HP_DESKJET2 : cupsFilePuts(fp, "$HP_DESKJET2\n"); break; default : cupsFilePrintf(fp, "%d\n", d->model_number); break; } cupsFilePuts(fp, ")\n"); break; default : cupsFilePrintf(fp, " ModelNumber %d\n", d->model_number); break; } } if (d->manual_copies) cupsFilePuts(fp, " ManualCopies Yes\n"); if (d->color_device) cupsFilePuts(fp, " ColorDevice Yes\n"); if (d->throughput) cupsFilePrintf(fp, " Throughput %d\n", d->throughput); // Output all of the attributes... for (a = (ppdcAttr *)d->attrs->first(); a; a = (ppdcAttr *)d->attrs->next()) if (a->text->value && a->text->value[0]) quotef(fp, " Attribute \"%s\" \"%s/%s\" \"%s\"\n", a->name->value, a->selector->value ? a->selector->value : "", a->text->value, a->value->value ? a->value->value : ""); else quotef(fp, " Attribute \"%s\" \"%s\" \"%s\"\n", a->name->value, a->selector->value ? a->selector->value : "", a->value->value ? a->value->value : ""); // Output all of the constraints... for (co = (ppdcConstraint *)d->constraints->first(); co; co = (ppdcConstraint *)d->constraints->next()) { if (co->option1->value[0] == '*') cupsFilePrintf(fp, " UIConstraints \"%s %s", co->option1->value, co->choice1->value ? co->choice1->value : ""); else cupsFilePrintf(fp, " UIConstraints \"*%s %s", co->option1->value, co->choice1->value ? co->choice1->value : ""); if (co->option2->value[0] == '*') cupsFilePrintf(fp, " %s %s\"\n", co->option2->value, co->choice2->value ? co->choice2->value : ""); else cupsFilePrintf(fp, " *%s %s\"\n", co->option2->value, co->choice2->value ? co->choice2->value : ""); } // Output all of the filters... for (fi = (ppdcFilter *)d->filters->first(); fi; fi = (ppdcFilter *)d->filters->next()) cupsFilePrintf(fp, " Filter \"%s %d %s\"\n", fi->mime_type->value, fi->cost, fi->program->value); // Output all of the fonts... for (fo = (ppdcFont *)d->fonts->first(); fo; fo = (ppdcFont *)d->fonts->next()) if (!strcmp(fo->name->value, "*")) cupsFilePuts(fp, " Font *\n"); else cupsFilePrintf(fp, " Font \"%s\" \"%s\" \"%s\" \"%s\" %s\n", fo->name->value, fo->encoding->value, fo->version->value, fo->charset->value, fo->status == PPDC_FONT_ROM ? "ROM" : "Disk"); // Output all options... for (g = (ppdcGroup *)d->groups->first(); g; g = (ppdcGroup *)d->groups->next()) { if (g->options->count == 0) continue; if (g->text->value && g->text->value[0]) quotef(fp, " Group \"%s/%s\"\n", g->name->value, g->text->value); else cupsFilePrintf(fp, " Group \"%s\"\n", g->name->value); for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next()) { if (o->choices->count == 0) continue; if (o->text->value && o->text->value[0]) quotef(fp, " Option \"%s/%s\"", o->name->value, o->text->value); else cupsFilePrintf(fp, " Option \"%s\"", o->name->value); cupsFilePrintf(fp, " %s %s %.1f\n", o->type == PPDC_BOOLEAN ? "Boolean" : o->type == PPDC_PICKONE ? "PickOne" : "PickMany", o->section == PPDC_SECTION_ANY ? "AnySetup" : o->section == PPDC_SECTION_DOCUMENT ? "DocumentSetup" : o->section == PPDC_SECTION_EXIT ? "ExitServer" : o->section == PPDC_SECTION_JCL ? "JCLSetup" : o->section == PPDC_SECTION_PAGE ? "PageSetup" : "Prolog", o->order); for (ch = (ppdcChoice *)o->choices->first(); ch; ch = (ppdcChoice *)o->choices->next()) { if (ch->text->value && ch->text->value[0]) quotef(fp, " %sChoice \"%s/%s\" \"%s\"\n", o->defchoice == ch->name ? "*" : "", ch->name->value, ch->text->value, ch->code->value ? ch->code->value : ""); else quotef(fp, " %sChoice \"%s\" \"%s\"\n", o->defchoice == ch->name ? "*" : "", ch->name->value, ch->code->value ? ch->code->value : ""); } } } // Output all of the color profiles... for (p = (ppdcProfile *)d->profiles->first(); p; p = (ppdcProfile *)d->profiles->next()) cupsFilePrintf(fp, " ColorProfile \"%s/%s\" %.3f %.3f " "%.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f\n", p->resolution->value, p->media_type->value, p->density, p->gamma, p->profile[0], p->profile[1], p->profile[2], p->profile[3], p->profile[4], p->profile[5], p->profile[6], p->profile[7], p->profile[8]); // Output all of the media sizes... left = 0.0; bottom = 0.0; right = 0.0; top = 0.0; for (si = (ppdcMediaSize *)d->sizes->first(); si; si = (ppdcMediaSize *)d->sizes->next()) if (si->size_code->value && si->region_code->value) { // Output a custom media size... quotef(fp, " %sCustomMedia \"%s/%s\" %.2f %.2f %.2f %.2f %.2f %.2f \"%s\" \"%s\"\n", si->name == d->default_size ? "*" : "", si->name->value, si->text->value, si->width, si->length, si->left, si->bottom, si->right, si->top, si->size_code->value, si->region_code->value); } else { // Output a standard media size... if (fabs(left - si->left) > 0.1 || fabs(bottom - si->bottom) > 0.1 || fabs(right - si->right) > 0.1 || fabs(top - si->top) > 0.1) { cupsFilePrintf(fp, " HWMargins %.2f %.2f %.2f %.2f\n", si->left, si->bottom, si->right, si->top); left = si->left; bottom = si->bottom; right = si->right; top = si->top; } cupsFilePrintf(fp, " %sMediaSize %s\n", si->name == d->default_size ? "*" : "", si->name->value); } if (d->variable_paper_size) { cupsFilePuts(fp, " VariablePaperSize Yes\n"); if (fabs(left - d->left_margin) > 0.1 || fabs(bottom - d->bottom_margin) > 0.1 || fabs(right - d->right_margin) > 0.1 || fabs(top - d->top_margin) > 0.1) { cupsFilePrintf(fp, " HWMargins %.2f %.2f %.2f %.2f\n", d->left_margin, d->bottom_margin, d->right_margin, d->top_margin); } cupsFilePrintf(fp, " MinSize %.2f %.2f\n", d->min_width, d->min_length); cupsFilePrintf(fp, " MaxSize %.2f %.2f\n", d->max_width, d->max_length); } // End the driver... cupsFilePuts(fp, "}\n"); } // Close the file and return... cupsFileClose(fp); return (0); } cups-2.2.7/ppdc/ppdc-string.cxx000664 000765 000024 00000001757 13255074424 017071 0ustar00msweetstaff000000 000000 // // Shared string class for the CUPS PPD Compiler. // // Copyright 2007-2012 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcString::ppdcString()' - Create a shared string. // ppdcString::ppdcString(const char *v) // I - String : ppdcShared() { PPDC_NEWVAL(v); if (v) { size_t vlen = strlen(v); value = new char[vlen + 1]; memcpy(value, v, vlen + 1); } else value = 0; } // // 'ppdcString::~ppdcString()' - Destroy a shared string. // ppdcString::~ppdcString() { PPDC_DELETEVAL(value); if (value) delete[] value; } cups-2.2.7/ppdc/ppdc-variable.cxx000664 000765 000024 00000002220 13255074424 017332 0ustar00msweetstaff000000 000000 // // Variable class for the CUPS PPD Compiler. // // Copyright 2007-2009 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'ppdcVariable::ppdcVariable()' - Create a variable. // ppdcVariable::ppdcVariable(const char *n, // I - Name of variable const char *v) // I - Value of variable : ppdcShared() { PPDC_NEW; name = new ppdcString(n); value = new ppdcString(v); } // // 'ppdcVariable::~ppdcVariable()' - Destroy a variable. // ppdcVariable::~ppdcVariable() { PPDC_DELETE; name->release(); value->release(); } // // 'ppdcVariable::set_value()' - Set the value of a variable. // void ppdcVariable::set_value(const char *v) { value->release(); value = new ppdcString(v); } cups-2.2.7/ppdc/ppdc.cxx000664 000765 000024 00000026053 13255074424 015561 0ustar00msweetstaff000000 000000 // // PPD file compiler main entry for the CUPS PPD Compiler. // // Copyright 2007-2014 by Apple Inc. // Copyright 2002-2007 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" #include #include #include // // Local functions... // static void usage(void); // // 'main()' - Main entry for the PPD compiler. // int // O - Exit status main(int argc, // I - Number of command-line arguments char *argv[]) // I - Command-line arguments { int i, j; // Looping vars ppdcCatalog *catalog; // Message catalog const char *outdir; // Output directory ppdcSource *src; // PPD source file data ppdcDriver *d; // Current driver cups_file_t *fp; // PPD file char *opt, // Current option *value, // Value in option *outname, // Output filename make_model[1024], // Make and model pcfilename[1024], // Lowercase pcfilename filename[1024]; // PPD filename int comp, // Compress do_test, // Test PPD files single_language,// Generate single-language files use_model_name, // Use ModelName for filename verbose; // Verbosity ppdcLineEnding le; // Line ending to use ppdcArray *locales; // List of locales cups_array_t *filenames; // List of generated filenames _cupsSetLocale(argv); // Scan the command-line... catalog = NULL; comp = 0; do_test = 0; le = PPDC_LFONLY; locales = NULL; outdir = "ppd"; single_language = 0; src = new ppdcSource(); use_model_name = 0; verbose = 0; filenames = cupsArrayNew((cups_array_func_t)_cups_strcasecmp, NULL); for (i = 1; i < argc; i ++) if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) switch (*opt) { case 'D' : // Define variable i ++; if (i >= argc) usage(); if ((value = strchr(argv[i], '=')) != NULL) { *value++ = '\0'; src->set_variable(argv[i], value); } else src->set_variable(argv[i], "1"); break; case 'I' : // Include directory... i ++; if (i >= argc) usage(); if (verbose > 1) _cupsLangPrintf(stdout, _("ppdc: Adding include directory \"%s\"."), argv[i]); ppdcSource::add_include(argv[i]); break; case 'c' : // Message catalog... i ++; if (i >= argc) usage(); if (verbose > 1) _cupsLangPrintf(stdout, _("ppdc: Loading messages from \"%s\"."), argv[i]); if (!catalog) catalog = new ppdcCatalog("en"); if (catalog->load_messages(argv[i])) { _cupsLangPrintf(stderr, _("ppdc: Unable to load localization file " "\"%s\" - %s"), argv[i], strerror(errno)); return (1); } break; case 'd' : // Output directory... i ++; if (i >= argc) usage(); if (verbose > 1) _cupsLangPrintf(stdout, _("ppdc: Writing PPD files to directory " "\"%s\"."), argv[i]); outdir = argv[i]; break; case 'l' : // Language(s)... i ++; if (i >= argc) usage(); if (strchr(argv[i], ',')) { // Comma-delimited list of languages... char temp[1024], // Copy of language list *start, // Start of current locale name *end; // End of current locale name locales = new ppdcArray(); strlcpy(temp, argv[i], sizeof(temp)); for (start = temp; *start; start = end) { if ((end = strchr(start, ',')) != NULL) *end++ = '\0'; else end = start + strlen(start); if (end > start) locales->add(new ppdcString(start)); } } else { single_language = 1; if (verbose > 1) _cupsLangPrintf(stdout, _("ppdc: Loading messages for locale " "\"%s\"."), argv[i]); if (catalog) catalog->release(); catalog = new ppdcCatalog(argv[i]); if (catalog->messages->count == 0 && strcmp(argv[i], "en")) { _cupsLangPrintf(stderr, _("ppdc: Unable to find localization for " "\"%s\" - %s"), argv[i], strerror(errno)); return (1); } } break; case 'm' : // Use ModelName for filename use_model_name = 1; break; case 't' : // Test PPDs instead of generating them do_test = 1; break; case 'v' : // Be verbose... verbose ++; break; case 'z' : // Compress files... comp = 1; break; case '-' : // --option if (!strcmp(opt, "-lf")) { le = PPDC_LFONLY; opt += strlen(opt) - 1; break; } else if (!strcmp(opt, "-cr")) { le = PPDC_CRONLY; opt += strlen(opt) - 1; break; } else if (!strcmp(opt, "-crlf")) { le = PPDC_CRLF; opt += strlen(opt) - 1; break; } default : // Unknown usage(); break; } } else { // Open and load the driver info file... if (verbose > 1) _cupsLangPrintf(stdout, _("ppdc: Loading driver information file \"%s\"."), argv[i]); src->read_file(argv[i]); } if (src->drivers->count > 0) { // Create the output directory... if (mkdir(outdir, 0777)) { if (errno != EEXIST) { _cupsLangPrintf(stderr, _("ppdc: Unable to create output directory %s: %s"), outdir, strerror(errno)); return (1); } } // Write PPD files... for (d = (ppdcDriver *)src->drivers->first(); d; d = (ppdcDriver *)src->drivers->next()) { if (do_test) { // Test the PPD file for this driver... int pid, // Process ID fds[2]; // Pipe file descriptors if (pipe(fds)) { _cupsLangPrintf(stderr, _("ppdc: Unable to create output pipes: %s"), strerror(errno)); return (1); } if ((pid = fork()) == 0) { // Child process comes here... dup2(fds[0], 0); close(fds[0]); close(fds[1]); execlp("cupstestppd", "cupstestppd", "-", (char *)0); _cupsLangPrintf(stderr, _("ppdc: Unable to execute cupstestppd: %s"), strerror(errno)); return (errno); } else if (pid < 0) { _cupsLangPrintf(stderr, _("ppdc: Unable to execute cupstestppd: %s"), strerror(errno)); return (errno); } close(fds[0]); fp = cupsFileOpenFd(fds[1], "w"); } else { // Write the PPD file for this driver... if (use_model_name) { if (!_cups_strncasecmp(d->model_name->value, d->manufacturer->value, strlen(d->manufacturer->value))) { // Model name already starts with the manufacturer... outname = d->model_name->value; } else { // Add manufacturer to the front of the model name... snprintf(make_model, sizeof(make_model), "%s %s", d->manufacturer->value, d->model_name->value); outname = make_model; } } else if (d->file_name) outname = d->file_name->value; else outname = d->pc_file_name->value; if (strstr(outname, ".PPD")) { // Convert PCFileName to lowercase... for (j = 0; outname[j] && j < (int)(sizeof(pcfilename) - 1); j ++) pcfilename[j] = (char)tolower(outname[j] & 255); pcfilename[j] = '\0'; } else { // Leave PCFileName as-is... strlcpy(pcfilename, outname, sizeof(pcfilename)); } // Open the PPD file for writing... if (comp) snprintf(filename, sizeof(filename), "%s/%s.gz", outdir, pcfilename); else snprintf(filename, sizeof(filename), "%s/%s", outdir, pcfilename); if (cupsArrayFind(filenames, filename)) _cupsLangPrintf(stderr, _("ppdc: Warning - overlapping filename \"%s\"."), filename); else cupsArrayAdd(filenames, strdup(filename)); fp = cupsFileOpen(filename, comp ? "w9" : "w"); if (!fp) { _cupsLangPrintf(stderr, _("ppdc: Unable to create PPD file \"%s\" - %s."), filename, strerror(errno)); return (1); } if (verbose) _cupsLangPrintf(stdout, _("ppdc: Writing %s."), filename); } /* * Write the PPD file... */ ppdcArray *templocales = locales; if (!templocales && !single_language) { templocales = new ppdcArray(); for (ppdcCatalog *tempcatalog = (ppdcCatalog *)src->po_files->first(); tempcatalog; tempcatalog = (ppdcCatalog *)src->po_files->next()) { tempcatalog->locale->retain(); templocales->add(tempcatalog->locale); } } if (d->write_ppd_file(fp, catalog, templocales, src, le)) { cupsFileClose(fp); return (1); } if (templocales != locales) templocales->release(); cupsFileClose(fp); } } else usage(); // Delete the printer driver information... src->release(); // Message catalog... if (catalog) catalog->release(); // Return with no errors. return (0); } // // 'usage()' - Show usage and exit. // static void usage(void) { _cupsLangPuts(stdout, _("Usage: ppdc [options] filename.drv [ ... " "filenameN.drv ]")); _cupsLangPuts(stdout, _("Options:")); _cupsLangPuts(stdout, _(" -D name=value Set named variable to " "value.")); _cupsLangPuts(stdout, _(" -I include-dir Add include directory to " "search path.")); _cupsLangPuts(stdout, _(" -c catalog.po Load the specified " "message catalog.")); _cupsLangPuts(stdout, _(" -d output-dir Specify the output " "directory.")); _cupsLangPuts(stdout, _(" -l lang[,lang,...] Specify the output " "language(s) (locale).")); _cupsLangPuts(stdout, _(" -m Use the ModelName value " "as the filename.")); _cupsLangPuts(stdout, _(" -t Test PPDs instead of " "generating them.")); _cupsLangPuts(stdout, _(" -v Be verbose.")); _cupsLangPuts(stdout, _(" -z Compress PPD files using " "GNU zip.")); _cupsLangPuts(stdout, _(" --cr End lines with CR (Mac " "OS 9).")); _cupsLangPuts(stdout, _(" --crlf End lines with CR + LF " "(Windows).")); _cupsLangPuts(stdout, _(" --lf End lines with LF " "(UNIX/Linux/macOS).")); exit(1); } cups-2.2.7/ppdc/ppdc.h000664 000765 000024 00000031750 13255074424 015206 0ustar00msweetstaff000000 000000 // // Definitions for the CUPS PPD Compiler. // // Copyright 2007-2009 by Apple Inc. // Copyright 2002-2007 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // #ifndef _PPDC_H_ # define _PPDC_H_ // // Include necessary headers... // # include # include // // Macros... // # define PPDC_NAME(s) const char *class_name() { return (s); } // // Enumerations... // enum ppdcDrvType //// Driver type { PPDC_DRIVER_CUSTOM, // Custom driver PPDC_DRIVER_PS, // PostScript driver PPDC_DRIVER_ESCP, // rastertoescpx driver PPDC_DRIVER_PCL, // rastertopclx driver PPDC_DRIVER_LABEL, // rastertolabel/rastertodymo driver PPDC_DRIVER_EPSON, // rastertoepson driver PPDC_DRIVER_HP, // rastertohp driver PPDC_DRIVER_MAX // Number of driver types defined }; enum ppdcFontStatus //// Load status of font { PPDC_FONT_ROM, // Font is in ROM PPDC_FONT_DISK // Font is on disk }; enum ppdcOptSection //// Option section { PPDC_SECTION_ANY, // AnySetup PPDC_SECTION_DOCUMENT, // DocumentSetup PPDC_SECTION_EXIT, // ExitServer PPDC_SECTION_JCL, // JCLSetup PPDC_SECTION_PAGE, // PageSetup PPDC_SECTION_PROLOG // Prolog }; enum ppdcOptType //// Option type { PPDC_BOOLEAN, // True/false option PPDC_PICKONE, // Single choice from list PPDC_PICKMANY // Multiple choices from list }; enum ppdcLineEnding //// Line endings { PPDC_LFONLY, // LF only PPDC_CRONLY, // CR only PPDC_CRLF // CR + LF }; enum ppdcCondFlags //// Condition flags { PPDC_COND_NORMAL = 0, // Normal state PPDC_COND_SKIP = 1, // Skip state PPDC_COND_SATISFIED = 2 // At least one condition satisfied }; // // Printer description data... // class ppdcShared //// Shared Data Value { private: int use; // Use count (delete when 0) public: ppdcShared(); virtual ~ppdcShared(); virtual const char *class_name() = 0; void retain(); void release(); }; class ppdcArray //// Shared Array : public ppdcShared { public: int count, // Number of elements alloc, // Allocated elements current; // Current element ppdcShared **data; // Elements ppdcArray(ppdcArray *a = 0); ~ppdcArray(); PPDC_NAME("ppdcArray") void add(ppdcShared *d); ppdcShared *first(); ppdcShared *next(); void remove(ppdcShared *d); }; class ppdcString //// Shared String : public ppdcShared { public: char *value; // String value ppdcString(const char *v); ~ppdcString(); PPDC_NAME("ppdcString") }; class ppdcInteger //// Shared integer : public ppdcShared { public: int *value; // Integer value ppdcInteger(int *v) { value = v; } PPDC_NAME("ppdcInteger") }; class ppdcMessage //// Translation message : public ppdcShared { public: ppdcString *id, // Translation ID *string; // Translation string ppdcMessage(const char *i, const char *s); ~ppdcMessage(); PPDC_NAME("ppdcMessage") }; class ppdcCatalog //// Translation catalog : public ppdcShared { public: ppdcString *locale; // Name of locale ppdcString *filename; // Name of translation file ppdcArray *messages; // Array of translation messages ppdcCatalog(const char *l, const char *f = 0); ~ppdcCatalog(); PPDC_NAME("ppdcCatalog") void add_message(const char *id, const char *string = NULL); const char *find_message(const char *id); int load_messages(const char *f); int save_messages(const char *f); }; class ppdcAttr //// Attribute : public ppdcShared { public: ppdcString *name, // Name of attribute *selector, // Selector string *text, // Text string *value; // Value string bool localizable; // Should this attribute be localized? ppdcAttr(const char *n, const char *s, const char *t, const char *v, bool loc = false); ~ppdcAttr(); PPDC_NAME("ppdcAttr") }; class ppdcFont //// Shared Font : public ppdcShared { public: ppdcString *name, // Font name *encoding, // Font base encoding *version, // Font version *charset; // Font charset ppdcFontStatus status; // Font status (ROM or Disk) ppdcFont(const char *n, const char *e, const char *v, const char *c, ppdcFontStatus s); ~ppdcFont(); PPDC_NAME("ppdcFont") }; class ppdcChoice //// Option Choice : public ppdcShared { public: ppdcString *name, // Name of choice *text, // Human-readable text of choice *code; // PS code of choice ppdcChoice(const char *n, const char *t, const char *c); ~ppdcChoice(); PPDC_NAME("ppdcChoice") }; class ppdcOption //// Option : public ppdcShared { public: ppdcOptType type; // Type of option ppdcString *name, // Name of option *text; // Human-readable text of option ppdcOptSection section; // Section for option code float order; // Order number ppdcArray *choices; // Choices ppdcString *defchoice; // Default choice ppdcOption(ppdcOptType ot, const char *n, const char *t, ppdcOptSection s, float o); ppdcOption(ppdcOption *o); ~ppdcOption(); PPDC_NAME("ppdcOption") void add_choice(ppdcChoice *c) { choices->add(c); } ppdcChoice *find_choice(const char *n); void set_defchoice(ppdcChoice *c); }; class ppdcGroup //// Group of Options : public ppdcShared { public: ppdcString *name, // Name of option *text; // Human-readable text of option ppdcArray *options; // Options ppdcGroup(const char *n, const char *t); ppdcGroup(ppdcGroup *g); ~ppdcGroup(); PPDC_NAME("ppdcGroup") void add_option(ppdcOption *o) { options->add(o); } ppdcOption *find_option(const char *n); }; class ppdcConstraint //// Constraint : public ppdcShared { public: ppdcString *option1, // First option *choice1, // First choice *option2, // Second option *choice2; // Second choice ppdcConstraint(const char *o1, const char *c1, const char *o2, const char *c2); ~ppdcConstraint(); PPDC_NAME("ppdcConstraint") }; class ppdcFilter //// Filter Program : public ppdcShared { public: ppdcString *mime_type, // MIME type *program; // Filter program int cost; // Relative cost of filter ppdcFilter(const char *t, const char *p, int c); ~ppdcFilter(); PPDC_NAME("ppdcFilter") }; class ppdcMediaSize //// Media Size : public ppdcShared { public: ppdcString *name, // Name of size *text; // Human-readable text float width, // Width in points length, // Length in points left, // Left limit in points bottom, // Bottom limit in points right, // Right limit in points top; // Top limit in points ppdcString *size_code, // PageSize code, if any *region_code; // PageRegion code, if any ppdcMediaSize(const char *n, const char *t, float w, float l, float lm, float bm, float rm, float tm, const char *sc = 0, const char *rc = 0); ~ppdcMediaSize(); PPDC_NAME("ppdcMediaSize") }; class ppdcProfile //// Color Profile : public ppdcShared { public: ppdcString *resolution, // Resolution name *media_type; // Media type name float density, // Color profile density gamma, // Color profile gamma profile[9]; // Color profile matrix ppdcProfile(const char *r, const char *m, float d, float g, const float *p); ~ppdcProfile(); PPDC_NAME("ppdcProfile") }; class ppdcSource; class ppdcDriver //// Printer Driver Data : public ppdcShared { public: ppdcDrvType type; // Driver type ppdcArray *copyright; // Copyright strings ppdcString *manufacturer, // Manufacturer *model_name, // Name of printer model *file_name, // Output filename for PPD *pc_file_name, // 8 character PC filename for PPD *version; // Version number int model_number, // Model number for driver manual_copies, // Do manual copies? color_device, // Support color? throughput; // Throughput in pages per minute ppdcArray *attrs, // Attributes *constraints, // Constraints *filters, // Filters *fonts, // Fonts *groups, // Option groups *profiles, // Color profiles *sizes; // Fixed sizes ppdcString *default_font, // Default font *default_size; // Default size option int variable_paper_size; // Support variable sizes? ppdcString *custom_size_code; // Custom page size code, if any float left_margin, // Margins for device in points bottom_margin, right_margin, top_margin, max_width, // Maximum width (points) max_length, // Maximum length (points) min_width, // Minimum width (points) min_length; // Minimum length (points) ppdcDriver(ppdcDriver *d = 0); ~ppdcDriver(); PPDC_NAME("ppdcDriver") void add_attr(ppdcAttr *a) { attrs->add(a); } void add_constraint(ppdcConstraint *c) { constraints->add(c); } void add_copyright(const char *c) { copyright->add(new ppdcString(c)); } void add_filter(ppdcFilter *f) { filters->add(f); } void add_font(ppdcFont *f) { fonts->add(f); } void add_group(ppdcGroup *g) { groups->add(g); } void add_profile(ppdcProfile *p) { profiles->add(p); } void add_size(ppdcMediaSize *m) { sizes->add(m); } ppdcAttr *find_attr(const char *k, const char *s); ppdcGroup *find_group(const char *n); ppdcOption *find_option(const char *n); ppdcOption *find_option_group(const char *n, ppdcGroup **mg); void set_custom_size_code(const char *c); void set_default_font(ppdcFont *f); void set_default_size(ppdcMediaSize *m); void set_file_name(const char *f); void set_manufacturer(const char *m); void set_model_name(const char *m); void set_pc_file_name(const char *f); void set_version(const char *v); int write_ppd_file(cups_file_t *fp, ppdcCatalog *catalog, ppdcArray *locales, ppdcSource *src, ppdcLineEnding le); }; class ppdcVariable //// Variable Definition : public ppdcShared { public: ppdcString *name, // Name of variable *value; // Value of variable ppdcVariable(const char *n, const char *v); ~ppdcVariable(); PPDC_NAME("ppdcVariable") void set_value(const char *v); }; class ppdcFile //// File { public: bool close_on_delete; // Close file on delete? cups_file_t *fp; // File pointer const char *filename; // Filename int line; // Line in file ppdcFile(const char *f, cups_file_t *ffp = (cups_file_t *)0); ~ppdcFile(); int get(); int peek(); }; class ppdcSource //// Source File : public ppdcShared { public: static ppdcArray *includes; // Include directories static const char *driver_types[]; // Driver types ppdcString *filename; // Filename ppdcArray *base_fonts, // Base fonts *drivers, // Printer drivers *po_files, // Message catalogs *sizes, // Predefined media sizes *vars; // Defined variables int cond_state, // Cummulative conditional state *cond_current, // Current #if state cond_stack[101]; // #if state stack ppdcSource(const char *f = 0, cups_file_t *ffp = (cups_file_t *)0); ~ppdcSource(); PPDC_NAME("ppdcSource") static void add_include(const char *d); ppdcDriver *find_driver(const char *f); static char *find_include(const char *f, const char *base, char *n, int nlen); ppdcCatalog *find_po(const char *l); ppdcMediaSize *find_size(const char *s); ppdcVariable *find_variable(const char *n); ppdcAttr *get_attr(ppdcFile *fp, bool loc = false); int get_boolean(ppdcFile *fp); ppdcChoice *get_choice(ppdcFile *fp); ppdcChoice *get_color_model(ppdcFile *fp); int get_color_order(const char *co); ppdcProfile *get_color_profile(ppdcFile *fp); int get_color_space(const char *cs); ppdcConstraint *get_constraint(ppdcFile *fp); ppdcMediaSize *get_custom_size(ppdcFile *fp); void get_duplex(ppdcFile *fp, ppdcDriver *d); ppdcFilter *get_filter(ppdcFile *fp); float get_float(ppdcFile *fp); ppdcFont *get_font(ppdcFile *fp); ppdcChoice *get_generic(ppdcFile *fp, const char *keyword, const char *tattr, const char *nattr); ppdcGroup *get_group(ppdcFile *fp, ppdcDriver *d); ppdcOption *get_installable(ppdcFile *fp); int get_integer(const char *v); int get_integer(ppdcFile *fp); float get_measurement(ppdcFile *fp); ppdcOption *get_option(ppdcFile *fp, ppdcDriver *d, ppdcGroup *g); ppdcCatalog *get_po(ppdcFile *fp); ppdcChoice *get_resolution(ppdcFile *fp); ppdcProfile *get_simple_profile(ppdcFile *fp); ppdcMediaSize *get_size(ppdcFile *fp); char *get_token(ppdcFile *fp, char *buffer, int buflen); ppdcVariable *get_variable(ppdcFile *fp); int import_ppd(const char *f); int quotef(cups_file_t *fp, const char *format, ...); void read_file(const char *f, cups_file_t *ffp = (cups_file_t *)0); void scan_file(ppdcFile *fp, ppdcDriver *td = 0, bool inc = false); ppdcVariable *set_variable(const char *name, const char *value); int write_file(const char *f); }; #endif // !_PPDC_H_ cups-2.2.7/ppdc/ppdhtml.cxx000664 000765 000024 00000011301 13255074424 016271 0ustar00msweetstaff000000 000000 // // PPD to HTML utility for the CUPS PPD Compiler. // // Copyright 2007-2015 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" #include #include // // Local functions... // static void usage(void); // // 'main()' - Main entry for the PPD compiler. // int // O - Exit status main(int argc, // I - Number of command-line arguments char *argv[]) // I - Command-line arguments { int i; // Looping var ppdcSource *src; // PPD source file data ppdcDriver *d; // Current driver ppdcGroup *g, // Current group *composite; // Composite of all drivers ppdcOption *o, // Current option *compo; // Composite option ppdcChoice *c; // Current choice char *opt; // Current option char ppdcMediaSize *size; // Current media size char *value; // Value in option _cupsSetLocale(argv); // Scan the command-line... src = new ppdcSource(); for (i = 1; i < argc; i ++) if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) switch (*opt) { case 'D' : // Define variable i ++; if (i >= argc) usage(); if ((value = strchr(argv[i], '=')) != NULL) { *value++ = '\0'; src->set_variable(argv[i], value); } else src->set_variable(argv[i], "1"); break; case 'I' : // Include directory... i ++; if (i >= argc) usage(); ppdcSource::add_include(argv[i]); break; default : // Unknown usage(); break; } } else { // Open and load the driver info file... src->read_file(argv[i]); } if ((d = (ppdcDriver *)src->drivers->first()) != NULL) { // Create a composite group with all of the features from the // drivers in the info file... composite = new ppdcGroup("", ""); while (d != NULL) { for (g = (ppdcGroup *)d->groups->first(); g; g = (ppdcGroup *)d->groups->next()) for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next()) { if ((compo = composite->find_option(o->name->value)) == NULL) composite->add_option(new ppdcOption(o)); } d = (ppdcDriver *)src->drivers->next(); } puts(""); printf("Driver Summary for %s\n", argv[i]); printf("

Driver Summary for %s

\n", argv[i]); printf("

"); for (compo = (ppdcOption *)composite->options->first(); compo; compo = (ppdcOption *)composite->options->next()) printf("", compo->text->value); puts(""); // Write HTML summary... for (d = (ppdcDriver *)src->drivers->first(); d; d = (ppdcDriver *)src->drivers->next()) { // Write the summary for this driver... printf(""); for (compo = (ppdcOption *)composite->options->first(); compo; compo = (ppdcOption *)composite->options->next()) if ((o = d->find_option(compo->name->value)) != NULL) { printf(""); } else printf(""); puts(""); } puts("
PrinterMedia Size%s
%s", d->model_name->value); for (size = (ppdcMediaSize *)d->sizes->first(); size; size = (ppdcMediaSize *)d->sizes->next()) printf("%s
", size->text->value); printf("
"); for (c = (ppdcChoice *)o->choices->first(); c; c = (ppdcChoice *)o->choices->next()) printf("%s
", c->text->value); printf("
N/A

"); puts(""); puts(""); // Delete the printer driver information... composite->release(); } else { // If no drivers have been loaded, display the program usage message. usage(); } src->release(); // Return with no errors. return (0); } // // 'usage()' - Show usage and exit. // static void usage(void) { _cupsLangPuts(stdout, _("Usage: ppdhtml [options] filename.drv " ">filename.html")); _cupsLangPuts(stdout, _("Options:")); _cupsLangPuts(stdout, _(" -D name=value Set named variable to " "value.")); _cupsLangPuts(stdout, _(" -I include-dir Add include directory " "to search path.")); exit(1); } cups-2.2.7/ppdc/ppdi.cxx000664 000765 000024 00000005262 13255074424 015566 0ustar00msweetstaff000000 000000 // // PPD file import utility for the CUPS PPD Compiler. // // Copyright 2007-2011 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" #include #include #include // // Local functions... // static void usage(void); // // 'main()' - Main entry for the PPD import utility. // int // O - Exit status main(int argc, // I - Number of command-line arguments char *argv[]) // I - Command-line arguments { int i; // Looping var char *opt; // Current option const char *srcfile; // Output file ppdcSource *src; // PPD source file data _cupsSetLocale(argv); // Scan the command-line... srcfile = NULL; src = NULL; for (i = 1; i < argc; i ++) if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) switch (*opt) { case 'o' : // Output file if (srcfile || src) usage(); i ++; if (i >= argc) usage(); srcfile = argv[i]; break; case 'I' : // Include dir i ++; if (i >= argc) usage(); ppdcSource::add_include(argv[i]); break; default : // Unknown usage(); break; } } else { // Open and load the driver info file... if (!srcfile) srcfile = "ppdi.drv"; if (!src) { if (access(srcfile, 0)) src = new ppdcSource(); else src = new ppdcSource(srcfile); } // Import the PPD file... src->import_ppd(argv[i]); } // If no drivers have been loaded, display the program usage message. if (!src) usage(); // Write the driver info file back to disk... src->write_file(srcfile); // Delete the printer driver information... src->release(); // Return with no errors. return (0); } // // 'usage()' - Show usage and exit. // static void usage(void) { _cupsLangPuts(stdout, _("Usage: ppdi [options] filename.ppd [ ... " "filenameN.ppd ]")); _cupsLangPuts(stdout, _("Options:")); _cupsLangPuts(stdout, _(" -I include-dir Add include directory to " "search path.")); _cupsLangPuts(stdout, _(" -o filename.drv Set driver information " "file (otherwise ppdi.drv).")); exit(1); } cups-2.2.7/ppdc/ppdmerge.cxx000664 000765 000024 00000022276 13255074424 016441 0ustar00msweetstaff000000 000000 // // PPD file merge utility for the CUPS PPD Compiler. // // Copyright 2007-2014 by Apple Inc. // Copyright 2002-2007 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include #include #include // // Local functions... // static const char *ppd_locale(ppd_file_t *ppd); static void usage(void); // // 'main()' - Main entry for the PPD merge utility. // int // O - Exit status main(int argc, // I - Number of command-line arguments char *argv[]) // I - Command-line arguments { int i; // Looping var char *opt; // Current option ppd_file_t *ppd; // PPD file cups_array_t *ppds; // Array of PPD files const char *inname, // First input filename *outname; // Output filename (if any) cups_file_t *infile, // Input file *outfile; // Output file cups_array_t *languages; // Languages in file const char *locale; // Current locale char line[1024]; // Line from file _cupsSetLocale(argv); // Scan the command-line... inname = NULL; outname = NULL; outfile = NULL; languages = NULL; ppds = cupsArrayNew(NULL, NULL); for (i = 1; i < argc; i ++) if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) switch (*opt) { case 'o' : // Output file if (outname) usage(); i ++; if (i >= argc) usage(); outname = argv[i]; break; default : // Unknown usage(); break; } } else { // Open and load the PPD file... if ((infile = cupsFileOpen(argv[i], "r")) == NULL) { _cupsLangPrintf(stderr, _("%s: Unable to open %s: %s"), "ppdmerge", argv[i], strerror(errno)); return (1); } // Open the PPD file... if ((ppd = ppdOpen2(infile)) == NULL) { ppd_status_t status; // PPD open status int curline, // Current line linenum; // Line number status = ppdLastError(&linenum); _cupsLangPrintf(stderr, _("%s: Unable to open PPD file: %s on line %d."), "ppdmerge", ppdErrorString(status), linenum); cupsFileRewind(infile); line[0] = '\0'; curline = 0; while (cupsFileGets(infile, line, sizeof(line))) { curline ++; if (curline >= linenum) break; } _cupsLangPrintf(stderr, "%d: %s", linenum, line); cupsFileClose(infile); return (1); } // Figure out the locale... if ((locale = ppd_locale(ppd)) == NULL) { _cupsLangPrintf(stderr, _("ppdmerge: Bad LanguageVersion \"%s\" in %s."), ppd->lang_version, argv[i]); cupsFileClose(infile); ppdClose(ppd); return (1); } if (!strcmp(locale, "en") && !inname && !outfile) { // Set the English PPD's filename... inname = argv[i]; languages = _ppdGetLanguages(ppd); if (outname && !strcmp(inname, outname)) { // Rename input filename so that we don't overwrite it... char bckname[1024]; // Backup filename snprintf(bckname, sizeof(bckname), "%s.bck", inname); if (rename(inname, bckname)) { _cupsLangPrintf(stderr, _("ppdmerge: Unable to backup %s to %s - %s"), inname, bckname, strerror(errno)); return (1); } inname = bckname; } } else if (strcmp(locale, "en")) { // Save this PPD for later processing... cupsArrayAdd(ppds, ppd); } else { // Don't need this PPD... _cupsLangPrintf(stderr, _("ppdmerge: Ignoring PPD file %s."), argv[i]); ppdClose(ppd); } // Close and move on... cupsFileClose(infile); } // If no PPDs have been loaded, display the program usage message. if (!inname) usage(); // Loop through the PPD files we loaded to generate a new language list... if (!languages) languages = cupsArrayNew((cups_array_func_t)strcmp, NULL); for (ppd = (ppd_file_t *)cupsArrayFirst(ppds); ppd; ppd = (ppd_file_t *)cupsArrayNext(ppds)) { locale = ppd_locale(ppd); if (cupsArrayFind(languages, (void *)locale)) { // Already have this language, remove the PPD from the list. ppdClose(ppd); cupsArrayRemove(ppds, ppd); } else cupsArrayAdd(languages, (void *)locale); } // Copy the English PPD starting with a cupsLanguages line... infile = cupsFileOpen(inname, "r"); if (outname) { const char *ext = strrchr(outname, '.'); if (ext && !strcmp(ext, ".gz")) outfile = cupsFileOpen(outname, "w9"); else outfile = cupsFileOpen(outname, "w"); } else outfile = cupsFileStdout(); cupsFileGets(infile, line, sizeof(line)); cupsFilePrintf(outfile, "%s\n", line); if ((locale = (char *)cupsArrayFirst(languages)) != NULL) { cupsFilePrintf(outfile, "*cupsLanguages: \"%s", locale); while ((locale = (char *)cupsArrayNext(languages)) != NULL) cupsFilePrintf(outfile, " %s", locale); cupsFilePuts(outfile, "\"\n"); } while (cupsFileGets(infile, line, sizeof(line))) { if (strncmp(line, "*cupsLanguages:", 15)) cupsFilePrintf(outfile, "%s\n", line); } // Loop through the other PPD files we loaded to provide the translations... for (ppd = (ppd_file_t *)cupsArrayFirst(ppds); ppd; ppd = (ppd_file_t *)cupsArrayNext(ppds)) { // Output all of the UI text for this language... int j, k, l; // Looping vars ppd_group_t *g; // Option group ppd_option_t *o; // Option ppd_choice_t *c; // Choice ppd_coption_t *co; // Custom option ppd_cparam_t *cp; // Custom parameter ppd_attr_t *attr; // PPD attribute locale = ppd_locale(ppd); cupsFilePrintf(outfile, "*%% %s localization\n", ppd->lang_version); cupsFilePrintf(outfile, "*%s.Translation ModelName/%s: \"\"\n", locale, ppd->modelname); for (j = ppd->num_groups, g = ppd->groups; j > 0; j --, g ++) { cupsFilePrintf(outfile, "*%s.Translation %s/%s: \"\"\n", locale, g->name, g->text); for (k = g->num_options, o = g->options; k > 0; k --, o ++) { cupsFilePrintf(outfile, "*%s.Translation %s/%s: \"\"\n", locale, o->keyword, o->text); for (l = o->num_choices, c = o->choices; l > 0; l --, c ++) cupsFilePrintf(outfile, "*%s.%s %s/%s: \"\"\n", locale, o->keyword, c->choice, c->text); if ((co = ppdFindCustomOption(ppd, o->keyword)) != NULL) { snprintf(line, sizeof(line), "Custom%s", o->keyword); attr = ppdFindAttr(ppd, line, "True"); cupsFilePrintf(outfile, "*%s.Custom%s True/%s: \"\"\n", locale, o->keyword, attr->text); for (cp = ppdFirstCustomParam(co); cp; cp = ppdNextCustomParam(co)) cupsFilePrintf(outfile, "*%s.ParamCustom%s %s/%s: \"\"\n", locale, o->keyword, cp->name, cp->text); } } } ppdClose(ppd); } cupsArrayDelete(ppds); cupsFileClose(outfile); // Return with no errors. return (0); } // // 'ppd_locale()' - Return the locale associated with a PPD file. // static const char * // O - Locale string ppd_locale(ppd_file_t *ppd) // I - PPD file { int i; // Looping var size_t vlen; // Length of LanguageVersion string static char locale[255]; // Locale string static struct // LanguageVersion translation table { const char *version, // LanguageVersion string */ *language; // Language code */ } languages[] = { { "chinese", "zh" }, { "czech", "cs" }, { "danish", "da" }, { "dutch", "nl" }, { "english", "en" }, { "finnish", "fi" }, { "french", "fr" }, { "german", "de" }, { "greek", "el" }, { "hungarian", "hu" }, { "italian", "it" }, { "japanese", "ja" }, { "korean", "ko" }, { "norwegian", "no" }, { "polish", "pl" }, { "portuguese", "pt" }, { "russian", "ru" }, { "simplified chinese", "zh_CN" }, { "slovak", "sk" }, { "spanish", "es" }, { "swedish", "sv" }, { "traditional chinese", "zh_TW" }, { "turkish", "tr" } }; for (i = 0; i < (int)(sizeof(languages) / sizeof(languages[0])); i ++) { vlen = strlen(languages[i].version); if (!_cups_strncasecmp(ppd->lang_version, languages[i].version, vlen)) { if (ppd->lang_version[vlen] == '-' || ppd->lang_version[vlen] == '_') snprintf(locale, sizeof(locale), "%s_%s", languages[i].language, ppd->lang_version + vlen + 1); else strlcpy(locale, languages[i].language, sizeof(locale)); return (locale); } } return (NULL); } // // 'usage()' - Show usage and exit. // static void usage(void) { _cupsLangPuts(stdout, _("Usage: ppdmerge [options] filename.ppd [ ... " "filenameN.ppd ]")); _cupsLangPuts(stdout, _("Options:")); _cupsLangPuts(stdout, _(" -o filename.ppd[.gz] Set output file " "(otherwise stdout).")); exit(1); } cups-2.2.7/ppdc/ppdpo.cxx000664 000765 000024 00000014362 13255074424 015755 0ustar00msweetstaff000000 000000 // // PPD file message catalog program for the CUPS PPD Compiler. // // Copyright 2007-2015 by Apple Inc. // Copyright 2002-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" #include #include // // Local functions... // static void add_ui_strings(ppdcDriver *d, ppdcCatalog *catalog); static void usage(void); // // 'main()' - Main entry for the PPD compiler. // int // O - Exit status main(int argc, // I - Number of command-line arguments char *argv[]) // I - Command-line arguments { int i; // Looping var ppdcCatalog *catalog; // Message catalog ppdcSource *src; // PPD source file data ppdcDriver *d; // Current driver char *opt; // Current option int verbose; // Verbosity const char *outfile; // Output file char *value; // Value in option _cupsSetLocale(argv); // Scan the command-line... catalog = new ppdcCatalog("en"); src = new ppdcSource(); verbose = 0; outfile = 0; for (i = 1; i < argc; i ++) if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) switch (*opt) { case 'D' : // Define variable i ++; if (i >= argc) usage(); if ((value = strchr(argv[i], '=')) != NULL) { *value++ = '\0'; src->set_variable(argv[i], value); } else src->set_variable(argv[i], "1"); break; case 'I' : // Include directory... i ++; if (i >= argc) usage(); if (verbose > 1) _cupsLangPrintf(stdout, _("ppdc: Adding include directory \"%s\"."), argv[i]); ppdcSource::add_include(argv[i]); break; case 'o' : // Output file... i ++; if (i >= argc || outfile) usage(); outfile = argv[i]; catalog->load_messages(outfile); break; case 'v' : // Be verbose... verbose ++; break; default : // Unknown usage(); break; } } else { // Open and load the driver info file... if (verbose > 1) _cupsLangPrintf(stdout, _("ppdc: Loading driver information file \"%s\"."), argv[i]); src->read_file(argv[i]); } // If no drivers have been loaded, display the program usage message. if ((d = (ppdcDriver *)src->drivers->first()) != NULL) { // Add UI strings... while (d != NULL) { if (verbose) _cupsLangPrintf(stderr, _("ppdc: Adding/updating UI text from %s."), argv[i]); add_ui_strings(d, catalog); d = (ppdcDriver *)src->drivers->next(); } } else usage(); // Delete the printer driver information... src->release(); // Write the message catalog... if (!outfile) usage(); else catalog->save_messages(outfile); catalog->release(); // Return with no errors. return (0); } // // 'add_ui_strings()' - Add all UI strings from the driver. // static void add_ui_strings(ppdcDriver *d, // I - Driver data ppdcCatalog *catalog) // I - Message catalog { // Add the make/model/language strings... catalog->add_message(d->manufacturer->value); catalog->add_message(d->model_name->value); // Add the media size strings... ppdcMediaSize *m; // Current media size for (m = (ppdcMediaSize *)d->sizes->first(); m; m = (ppdcMediaSize *)d->sizes->next()) catalog->add_message(m->text->value); // Add the group/option/choice strings... ppdcGroup *g; // Current group ppdcOption *o; // Current option ppdcChoice *c; // Current choice for (g = (ppdcGroup *)d->groups->first(); g; g = (ppdcGroup *)d->groups->next()) { if (!g->options->count) continue; if (_cups_strcasecmp(g->name->value, "General")) catalog->add_message(g->text->value); for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next()) { if (!o->choices->count) continue; if (o->text->value) catalog->add_message(o->text->value); else catalog->add_message(o->name->value); for (c = (ppdcChoice *)o->choices->first(); c; c = (ppdcChoice *)o->choices->next()) if (c->text->value) catalog->add_message(c->text->value); else catalog->add_message(c->name->value); } } // Add profile and preset strings... ppdcAttr *a; // Current attribute for (a = (ppdcAttr *)d->attrs->first(); a; a = (ppdcAttr *)d->attrs->next()) if (a->text->value && a->text->value[0] && (a->localizable || !strncmp(a->name->value, "Custom", 6) || !strncmp(a->name->value, "ParamCustom", 11) || !strcmp(a->name->value, "APCustomColorMatchingName") || !strcmp(a->name->value, "APPrinterPreset") || !strcmp(a->name->value, "cupsICCProfile") || !strcmp(a->name->value, "cupsIPPReason") || !strcmp(a->name->value, "cupsMarkerName"))) { catalog->add_message(a->text->value); if ((a->localizable && a->value->value[0]) || !strcmp(a->name->value, "cupsIPPReason")) catalog->add_message(a->value->value); } else if (!strncmp(a->name->value, "Custom", 6) || !strncmp(a->name->value, "ParamCustom", 11)) catalog->add_message(a->name->value); } // // 'usage()' - Show usage and exit. // static void usage(void) { _cupsLangPuts(stdout, _("Usage: ppdpo [options] -o filename.po filename.drv " "[ ... filenameN.drv ]")); _cupsLangPuts(stdout, _("Options:")); _cupsLangPuts(stdout, _(" -D name=value Set named variable to " "value.")); _cupsLangPuts(stdout, _(" -I include-dir Add include directory to " "search path.")); _cupsLangPuts(stdout, _(" -v Be verbose.")); exit(1); } cups-2.2.7/ppdc/sample.drv000664 000765 000024 00000120405 13255074424 016101 0ustar00msweetstaff000000 000000 // // "$Id$" // // Driver info file for CUPS-supplied PPDs. // // Copyright 2007-2014 by Apple Inc. // Copyright 1993-2006 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // file is missing or damaged, see the license at "http://www.cups.org/". // // Include necessary files... #include #include #include #include #include // Localizations are provided for all of the base languages supported by // CUPS... #po ar "" #po ca "" #po cs "" #po da "" #po de "" #po el "" #po es "" #po fi "" #po fr "" #po he "" #po hr "" #po hu "" #po id "" #po it "" #po ja "" #po ko "" #po ms "" #po no "" #po pl "" #po pt "" #po pt_PT "" #po ro "" #po ru "" #po sk "" #po sv "" #po th "" #po tr "" #po uk "" #po vi "" #po zh_CN "" #po zh_TW "" // MediaSize sizes used by label drivers... #media "w90h18/1.25x0.25\"" 90 18 #media "w90h162/1.25x2.25\"" 90 162 #media "w108h18/1.50x0.25\"" 108 18 #media "w108h36/1.50x0.50\"" 108 36 #media "w108h72/1.50x1.00\"" 108 72 #media "w108h144/1.50x2.00\"" 108 144 #media "w144h26/2.00x0.37\"" 144 26 #media "w144h36/2.00x0.50\"" 144 36 #media "w144h72/2.00x1.00\"" 144 72 #media "w144h90/2.00x1.25\"" 144 90 #media "w144h144/2.00x2.00\"" 144 144 #media "w144h216/2.00x3.00\"" 144 216 #media "w144h288/2.00x4.00\"" 144 288 #media "w144h396/2.00x5.50\"" 144 396 #media "w162h36/2.25x0.50\"" 162 36 #media "w162h90/2.25x1.25\"" 162 90 #media "w162h288/2.25x4.00\"" 162 288 #media "w162h396/2.25x5.50\"" 162 396 #media "w171h396/2.38x5.50\"" 171 396 #media "w180h72/2.50x1.00\"" 180 72 #media "w180h144/2.50x2.00\"" 180 144 #media "w198h90/2.75x1.25\"" 198 90 #media "w209h72/2.9 x 1\"" 209 72 #media "w216h72/3.00x1.00\"" 216 72 #media "w216h90/3.00x1.25\"" 216 90 #media "w216h144/3.00x2.00\"" 216 144 #media "w216h216/3.00x3.00\"" 216 216 #media "w216h360/3.00x5.00\"" 216 360 #media "w234h144/3.25x2.00\"" 234 144 #media "w234h360/3.25x5.00\"" 234 360 #media "w234h396/3.25x5.50\"" 234 396 #media "w234h419/3.25x5.83\"" 234 419 #media "w234h563/3.25x7.83\"" 234 563 #media "w252h72/3.50x1.00\"" 252 72 #media "w288h72/4.00x1.00\"" 288 72 #media "w288h144/4.00x2.00\"" 288 144 #media "w288h180/4.00x2.50\"" 288 180 #media "w288h216/4.00x3.00\"" 288 216 #media "w288h288/4.00x4.00\"" 288 288 #media "w288h360/4.00x5.00\"" 288 360 #media "w288h432/4.00x6.00\"" 288 432 #media "w288h468/4.00x6.50\"" 288 468 #media "w288h936/4.00x13.00\"" 288 936 #media "w432h72/6.00x1.00\"" 432 72 #media "w432h144/6.00x2.00\"" 432 144 #media "w432h216/6.00x3.00\"" 432 216 #media "w432h288/6.00x4.00\"" 432 288 #media "w432h360/6.00x5.00\"" 432 360 #media "w432h432/6.00x6.00\"" 432 432 #media "w432h468/6.00x6.50\"" 432 468 #media "w576h72/8.00x1.00\"" 576 72 #media "w576h144/8.00x2.00\"" 576 144 #media "w576h216/8.00x3.00\"" 576 216 #media "w576h288/8.00x4.00\"" 576 288 #media "w576h360/8.00x5.00\"" 576 360 #media "w576h432/8.00x6.00\"" 576 432 #media "w576h468/8.00x6.50\"" 576 468 // Common stuff for all drivers... Attribute "cupsVersion" "" "2.2" Attribute "FileSystem" "" "False" Attribute "LandscapeOrientation" "" "Plus90" Attribute "TTRasterizer" "" "Type42" Copyright "Copyright 2007-2014 by Apple Inc." Copyright "Copyright 1997-2007 by Easy Software Products." Copyright "" Copyright "These coded instructions, statements, and computer programs are the" Copyright "property of Apple Inc. and are protected by Federal copyright" Copyright "law. Distribution and use rights are outlined in the file \"LICENSE.txt\"" Copyright "which should have been included with this file. If this file is" Copyright "file is missing or damaged, see the license at \"http://www.cups.org/\"." Font * Version "2.1" // Dymo Label Printer { Manufacturer "Dymo" ModelName "Label Printer" Attribute NickName "" "Dymo Label Printer" PCFileName "dymo.ppd" DriverType label ModelNumber $DYMO_3x0 Throughput 8 ManualCopies Yes ColorDevice No Attribute "cupsSNMPSupplies" "" "false" HWMargins 2 14.9 2 14.9 *MediaSize w81h252 MediaSize w101h252 MediaSize w54h144 MediaSize w167h288 MediaSize w162h540 MediaSize w162h504 MediaSize w41h248 MediaSize w41h144 MediaSize w153h198 Resolution k 1 0 0 0 136dpi Resolution k 1 0 0 0 203dpi *Resolution k 1 0 0 0 300dpi Darkness 0 Light Darkness 1 Medium *Darkness 2 Normal Darkness 3 Dark } // Epson { Manufacturer "Epson" DriverType epson ManualCopies Yes ColorDevice No Throughput 1 HWMargins 0 0 0 0 VariablePaperSize Yes MinSize 36 36 MaxSize 1080 86400 // Epson 24-Pin Series { ModelName "24-Pin Series" Attribute NickName "" "Epson 24-Pin Series" PCFileName "epson24.ppd" ModelNumber $EPSON_24PIN HWMargins 18 18 18 18 *MediaSize Letter MediaSize Legal MediaSize A4 MediaSize FanFoldUS Resolution k 1 8 0 0 60dpi *Resolution k 1 8 0 0 120x60dpi Resolution k 1 24 0 0 180dpi Resolution k 1 24 0 0 360x180dpi Resolution k 1 48 0 0 360dpi } // Epson 9-Pin Series { ModelName "9-Pin Series" Attribute NickName "" "Epson 9-Pin Series" PCFileName "epson9.ppd" ModelNumber $EPSON_9PIN ColorDevice No HWMargins 18 18 18 18 *MediaSize Letter MediaSize Legal MediaSize A4 MediaSize FanFoldUS Resolution k 1 8 0 0 60x72dpi *Resolution k 1 8 0 0 120x72dpi Resolution k 1 8 0 0 240x72dpi } } // Generic drivers { Manufacturer "Generic" // Generic PCL Laser Printer { DriverType hp ModelName "PCL Laser Printer" Attribute NickName "" "Generic PCL Laser Printer" PCFileName "generpcl.ppd" Throughput 8 ModelNumber $HP_LASERJET ColorDevice No Attribute 1284DeviceID "" "CMD:PCL;" UIConstraints "*Duplex *Option1 False" UIConstraints "*PageSize A3 *InputSlot Envelope" UIConstraints "*PageSize A4 *InputSlot Envelope" UIConstraints "*PageSize A5 *InputSlot Envelope" UIConstraints "*PageSize B5 *InputSlot Envelope" UIConstraints "*PageSize Executive *InputSlot Envelope" UIConstraints "*PageSize Legal *InputSlot Envelope" UIConstraints "*PageSize Letter *InputSlot Envelope" UIConstraints "*PageSize Tabloid *InputSlot Envelope" HWMargins 18 12 18 12 *MediaSize Letter MediaSize Legal MediaSize Executive MediaSize Tabloid MediaSize A3 MediaSize A4 MediaSize A5 MediaSize B5 MediaSize EnvISOB5 MediaSize Env10 MediaSize EnvC5 MediaSize EnvDL MediaSize EnvMonarch *Resolution k 1 0 0 0 300dpi Resolution k 1 0 0 0 600dpi *InputSlot 0 "Default/Printer Default" InputSlot 8 "Tray1/Tray 1" InputSlot 1 "Tray2/Tray 2" InputSlot 4 "Tray3/Tray 3" InputSlot 5 "Tray4/Tray 4" InputSlot 2 "Manual/Manual Feed" InputSlot 3 "Envelope/Envelope Feed" Duplex Yes Installable "Option1/Duplexer" } // Generic PostScript Printer { DriverType ps ModelName "PostScript Printer" Attribute NickName "" "Generic PostScript Printer" PCFileName "generic.ppd" Throughput 8 ColorDevice Yes Attribute PSVersion "" "(2016.0) 0" Attribute LanguageLevel "" 2 Attribute 1284DeviceID "" "CMD:PS;" UIConstraints "*Duplex *Option1 False" HWMargins 12 12 12 12 *MediaSize Letter MediaSize Legal MediaSize Executive MediaSize Tabloid MediaSize A3 MediaSize A4 MediaSize A5 MediaSize B5 MediaSize EnvISOB5 MediaSize Env10 MediaSize EnvC5 MediaSize EnvDL MediaSize EnvMonarch Option "InputSlot/Media Source" PickOne AnySetup 10 *Choice "Default/Printer Default" "" Choice "Upper/Cassette" "<>setpagedevice" Choice "Manual/Manual Feed" "<>setpagedevice" Duplex Yes Installable "Option1/Duplexer" Attribute "?Option1" "" "save currentpagedevice/Duplex known{(True)}{(False)}ifelse = flush restore" } } // HP { Manufacturer "HP" DriverType hp // HP DeskJet Series { ModelName "DeskJet Series" Attribute NickName "" "HP DeskJet Series" PCFileName "deskjet.ppd" ModelNumber $HP_DESKJET ManualCopies Yes ColorDevice Yes Throughput 1 Attribute 1284DeviceID "" "MFG:HP;MDL:HP DeskJet;CMD:PCL;" UIConstraints "*PageSize A3 *InputSlot Envelope" UIConstraints "*PageSize A4 *InputSlot Envelope" UIConstraints "*PageSize A5 *InputSlot Envelope" UIConstraints "*PageSize B5 *InputSlot Envelope" UIConstraints "*PageSize Executive *InputSlot Envelope" UIConstraints "*PageSize Legal *InputSlot Envelope" UIConstraints "*PageSize Letter *InputSlot Envelope" UIConstraints "*PageSize Tabloid *InputSlot Envelope" HWMargins 18 36 18 36 *MediaSize Letter MediaSize Legal MediaSize Executive MediaSize Tabloid MediaSize A3 MediaSize A4 MediaSize A5 MediaSize B5 MediaSize EnvISOB5 MediaSize Env10 MediaSize EnvC5 MediaSize EnvDL MediaSize EnvMonarch ColorModel Gray/Grayscale k chunky 2 ColorModel RGB/Color cmy banded 2 *ColorModel CMYK kcmy banded 2 Resolution - 1 0 0 0 150dpi *Resolution - 1 0 0 0 300dpi Resolution - 1 0 0 0 600dpi *InputSlot 1 Tray InputSlot 2 "Manual/Manual Feed" InputSlot 3 "Envelope/Envelope Feed" *MediaType 0 "Plain/Plain Paper" MediaType 1 "Bond/Bond Paper" MediaType 2 "Special/Special Paper" MediaType 3 Transparency MediaType 4 "Glossy/Glossy Paper" } // HP LaserJet Series PCL 4/5 { ModelName "LaserJet Series PCL 4/5" Attribute NickName "" "HP LaserJet Series PCL 4/5" PCFileName "laserjet.ppd" Throughput 8 ModelNumber $HP_LASERJET ColorDevice No Attribute 1284DeviceID "" "MFG:HP;MDL:HP LaserJet;CMD:PCL;" UIConstraints "*Duplex *Option1 False" UIConstraints "*PageSize A3 *InputSlot Envelope" UIConstraints "*PageSize A4 *InputSlot Envelope" UIConstraints "*PageSize A5 *InputSlot Envelope" UIConstraints "*PageSize B5 *InputSlot Envelope" UIConstraints "*PageSize Executive *InputSlot Envelope" UIConstraints "*PageSize Legal *InputSlot Envelope" UIConstraints "*PageSize Letter *InputSlot Envelope" UIConstraints "*PageSize Tabloid *InputSlot Envelope" HWMargins 18 36 18 36 *MediaSize Letter MediaSize Legal MediaSize Executive MediaSize Tabloid MediaSize A3 MediaSize A4 MediaSize A5 MediaSize B5 MediaSize EnvISOB5 MediaSize Env10 MediaSize EnvC5 MediaSize EnvDL MediaSize EnvMonarch Resolution k 1 0 0 0 150dpi *Resolution k 1 0 0 0 300dpi Resolution k 1 0 0 0 600dpi *InputSlot 0 "Default/Printer Default" InputSlot 8 "Tray1/Tray 1" InputSlot 1 "Tray2/Tray 2" InputSlot 4 "Tray3/Tray 3" InputSlot 5 "Tray4/Tray 4" InputSlot 2 "Manual/Manual Feed" InputSlot 3 "Envelope/Envelope Feed" Duplex Yes Installable "Option1/Duplexer" } } // Intellitech IntelliBar Series Label Printer { Manufacturer "Intellitech" ModelName "IntelliBar Label Printer" Attribute ShortNickName "" "IntelliBar Label Printer" PCFileName "intelbar.ppd" DriverType label ModelNumber $INTELLITECH_PCL Throughput 8 ColorDevice No Attribute "cupsSNMPSupplies" "" "false" HWMargins 0 5.76 0 5.76 VariablePaperSize Yes MinSize 36 36 MaxSize 630 7128 UIConstraints "*inPrintMode Standard *inCutInterval" UIConstraints "*inPrintMode Tear *inCutInterval" UIConstraints "*inPrintMode Standard *inTearInterval" UIConstraints "*inPrintMode Cut *inTearInterval" *MediaSize w288h432 *Resolution k 1 0 0 0 300dpi Group "PrinterSettings/Printer Settings" Option "inPrintDensity/Print Density" PickOne DocumentSetup 20.0 *Choice "Default/Printer Default" "<>setpagedevice" Choice "-15/-15" "<>setpagedevice" Choice "-14/-14" "<>setpagedevice" Choice "-13/-13" "<>setpagedevice" Choice "-12/-12" "<>setpagedevice" Choice "-11/-11" "<>setpagedevice" Choice "-10/-10" "<>setpagedevice" Choice "-9/-9" "<>setpagedevice" Choice "-8/-8" "<>setpagedevice" Choice "-7/-7" "<>setpagedevice" Choice "-6/-6" "<>setpagedevice" Choice "-5/-5" "<>setpagedevice" Choice "-4/-4" "<>setpagedevice" Choice "-3/-3" "<>setpagedevice" Choice "-2/-2" "<>setpagedevice" Choice "-1/-1" "<>setpagedevice" Choice "0/0" "<>setpagedevice" Choice "1/1" "<>setpagedevice" Choice "2/2" "<>setpagedevice" Choice "3/3" "<>setpagedevice" Choice "4/4" "<>setpagedevice" Choice "5/5" "<>setpagedevice" Choice "6/6" "<>setpagedevice" Choice "7/7" "<>setpagedevice" Choice "8/8" "<>setpagedevice" Choice "9/9" "<>setpagedevice" Choice "10/10" "<>setpagedevice" Choice "11/11" "<>setpagedevice" Choice "12/12" "<>setpagedevice" Choice "13/13" "<>setpagedevice" Choice "14/14" "<>setpagedevice" Choice "15/15" "<>setpagedevice" Option "inPrintRate/Print Speed" PickOne DocumentSetup 20.0 *Choice "Default/Printer Default" "<>setpagedevice" Choice "15/15 mm/sec." "<>setpagedevice" Choice "20/20 mm/sec." "<>setpagedevice" Choice "30/30 mm/sec." "<>setpagedevice" Choice "40/40 mm/sec." "<>setpagedevice" Choice "60/60 mm/sec." "<>setpagedevice" Choice "80/80 mm/sec." "<>setpagedevice" Choice "100/100 mm/sec." "<>setpagedevice" Choice "120/120 mm/sec." "<>setpagedevice" Choice "150/150 mm/sec." "<>setpagedevice" Choice "200/200 mm/sec." "<>setpagedevice" Choice "250/250 mm/sec." "<>setpagedevice" Choice "300/300 mm/sec." "<>setpagedevice" Option "inPrintMode/Print Mode" PickOne DocumentSetup 20.0 *Choice "Standard/Standard" "" Choice "Tear/Tear" "" Choice "Cut/Cut" "" Option "inTearInterval/Print and Tear" PickOne DocumentSetup 20.0 *Choice "None/Disabled" "<>setpagedevice" Choice "1/Every Label" "<>setpagedevice" Choice "2/Every 2 Labels" "<>setpagedevice" Choice "3/Every 3 Labels" "<>setpagedevice" Choice "4/Every 4 Labels" "<>setpagedevice" Choice "5/Every 5 Labels" "<>setpagedevice" Choice "6/Every 6 Labels" "<>setpagedevice" Choice "7/Every 7 Labels" "<>setpagedevice" Choice "8/Every 8 Labels" "<>setpagedevice" Choice "9/Every 9 Labels" "<>setpagedevice" Choice "10/Every 10 Labels" "<>setpagedevice" Attribute CustominTearInterval True "<>setpagedevice" Attribute ParamCustominTearInterval Interval "1 int 1 99" Option "inCutInterval/Print and Cut" PickOne DocumentSetup 20.0 *Choice "None/Disabled" "<>setpagedevice" Choice "1/Every Label" "<>setpagedevice" Choice "2/Every 2 Labels" "<>setpagedevice" Choice "3/Every 3 Labels" "<>setpagedevice" Choice "4/Every 4 Labels" "<>setpagedevice" Choice "5/Every 5 Labels" "<>setpagedevice" Choice "6/Every 6 Labels" "<>setpagedevice" Choice "7/Every 7 Labels" "<>setpagedevice" Choice "8/Every 8 Labels" "<>setpagedevice" Choice "9/Every 9 Labels" "<>setpagedevice" Choice "10/Every 10 Labels" "<>setpagedevice" Attribute CustominCutInterval True "<>setpagedevice" Attribute ParamCustominCutInterval Interval "1 int 1 99" } // Oki { Manufacturer "Oki" DriverType epson ManualCopies Yes ColorDevice No Throughput 1 HWMargins 18 18 18 18 *MediaSize Letter MediaSize Legal MediaSize A4 MediaSize FanFoldUS HWMargins 0 0 0 0 VariablePaperSize Yes MinSize 36 36 MaxSize 1080 86400 // Oki 24-Pin Series { ModelName "24-Pin Series" Attribute NickName "" "Oki 24-Pin Series" PCFileName "okidat24.ppd" ModelNumber $EPSON_24PIN Resolution k 1 8 0 0 60dpi *Resolution k 1 8 0 0 120x60dpi Resolution k 1 24 0 0 180dpi Resolution k 1 24 0 0 360x180dpi Resolution k 1 48 0 0 360dpi } // Oki 9-Pin Series { ModelName "9-Pin Series" Attribute NickName "" "Oki 9-Pin Series" PCFileName "okidata9.ppd" ModelNumber $EPSON_9PIN ColorDevice No Resolution k 1 8 0 0 60x72dpi *Resolution k 1 8 0 0 120x72dpi Resolution k 1 8 0 0 240x72dpi } } // Zebra { Manufacturer "Zebra" DriverType label Throughput 8 ColorDevice False Attribute "cupsSNMPSupplies" "" "false" // Zebra CPCL Label Printer { ModelName "CPCL Label Printer" Attribute NickName "" "Zebra CPCL Label Printer" PCFileName "zebracpl.ppd" ModelNumber $ZEBRA_CPCL HWMargins 0 0 0 0 MediaSize w144h72 MediaSize w144h90 MediaSize w144h144 MediaSize w144h216 MediaSize w209h72 HWMargins 0 0 1 0 MediaSize w288h144 MediaSize w288h216 MediaSize w288h288 *MediaSize w288h360 MediaSize w288h432 VariablePaperSize Yes HWMargins 0 0 1 0 MinSize 36 36 MaxSize 288 3600 *Resolution k 1 0 0 0 203dpi Group "General/General" Option "zeMediaTracking/Media Tracking" PickOne AnySetup 20.0 Choice "Continuous/Continuous" "" *Choice "Web/Non-continuous (Web sensing)" "" Choice "Mark/Non-continuous (Mark sensing)" "" Group "PrinterSettings/Printer Settings" Option "Darkness" PickOne AnySetup 20.0 *Choice "-1/Printer Default" "<>setpagedevice" Choice "1/1" "<>setpagedevice" Choice "2/2" "<>setpagedevice" Choice "3/3" "<>setpagedevice" Choice "4/4" "<>setpagedevice" Choice "5/5" "<>setpagedevice" Choice "6/6" "<>setpagedevice" Choice "7/7" "<>setpagedevice" Choice "8/8" "<>setpagedevice" Choice "9/9" "<>setpagedevice" Choice "10/10" "<>setpagedevice" Choice "11/11" "<>setpagedevice" Choice "12/12" "<>setpagedevice" Choice "13/13" "<>setpagedevice" Choice "14/14" "<>setpagedevice" Choice "15/15" "<>setpagedevice" Choice "16/16" "<>setpagedevice" Choice "17/17" "<>setpagedevice" Choice "18/18" "<>setpagedevice" Choice "19/19" "<>setpagedevice" Choice "20/20" "<>setpagedevice" Choice "21/21" "<>setpagedevice" Choice "22/22" "<>setpagedevice" Choice "23/23" "<>setpagedevice" Choice "24/24" "<>setpagedevice" Choice "25/25" "<>setpagedevice" Choice "26/26" "<>setpagedevice" Choice "27/27" "<>setpagedevice" Choice "28/28" "<>setpagedevice" Choice "29/29" "<>setpagedevice" Choice "30/30" "<>setpagedevice" Option "zePrintRate/Print Rate" PickOne AnySetup 20.0 *Choice "Default/Printer Default" "" Choice "1/1 inch/sec." "" Choice "2/2 inches/sec." "" Choice "3/3 inches/sec." "" Choice "4/4 inches/sec." "" Option "zeTearOffPosition/Tear-Off Adjust Position" PickOne AnySetup 20.0 *Choice "1000/Printer Default" "<>setpagedevice" Choice "-120/-120" "<>setpagedevice" Choice "-115/-115" "<>setpagedevice" Choice "-110/-110" "<>setpagedevice" Choice "-105/-105" "<>setpagedevice" Choice "-100/-100" "<>setpagedevice" Choice "-95/-95" "<>setpagedevice" Choice "-90/-90" "<>setpagedevice" Choice "-85/-85" "<>setpagedevice" Choice "-80/-80" "<>setpagedevice" Choice "-75/-75" "<>setpagedevice" Choice "-70/-70" "<>setpagedevice" Choice "-65/-65" "<>setpagedevice" Choice "-60/-60" "<>setpagedevice" Choice "-55/-55" "<>setpagedevice" Choice "-50/-50" "<>setpagedevice" Choice "-45/-45" "<>setpagedevice" Choice "-40/-40" "<>setpagedevice" Choice "-35/-35" "<>setpagedevice" Choice "-30/-30" "<>setpagedevice" Choice "-25/-25" "<>setpagedevice" Choice "-20/-20" "<>setpagedevice" Choice "-15/-15" "<>setpagedevice" Choice "-10/-10" "<>setpagedevice" Choice "-5/-5" "<>setpagedevice" Choice "0/0" "<>setpagedevice" Choice "5/5" "<>setpagedevice" Choice "10/10" "<>setpagedevice" Choice "15/15" "<>setpagedevice" Choice "20/20" "<>setpagedevice" Choice "25/25" "<>setpagedevice" Choice "30/30" "<>setpagedevice" Choice "35/35" "<>setpagedevice" Choice "40/40" "<>setpagedevice" Choice "45/45" "<>setpagedevice" Choice "50/50" "<>setpagedevice" Choice "55/55" "<>setpagedevice" Choice "60/60" "<>setpagedevice" Choice "65/65" "<>setpagedevice" Choice "70/70" "<>setpagedevice" Choice "75/75" "<>setpagedevice" Choice "80/80" "<>setpagedevice" Choice "85/85" "<>setpagedevice" Choice "90/90" "<>setpagedevice" Choice "95/95" "<>setpagedevice" Choice "100/100" "<>setpagedevice" Choice "105/105" "<>setpagedevice" Choice "110/110" "<>setpagedevice" Choice "115/115" "<>setpagedevice" Choice "120/120" "<>setpagedevice" Option "zeErrorReprint/Reprint After Error" PickOne AnySetup 20.0 *Choice "Saved/Printer Default" "" Choice "Always/Always" "" Choice "Never/Never" "" } // Zebra EPL1 Label Printer { ModelName "EPL1 Label Printer" Attribute NickName "" "Zebra EPL1 Label Printer" PCFileName "zebraep1.ppd" ModelNumber $ZEBRA_EPL_LINE HWMargins 0 0 0 0 VariablePaperSize Yes MinSize 36 36 MaxSize 288 3600 MediaSize w90h18 MediaSize w90h162 MediaSize w108h18 MediaSize w108h36 MediaSize w108h72 MediaSize w108h144 MediaSize w144h26 MediaSize w144h36 MediaSize w144h72 MediaSize w144h90 MediaSize w144h288 MediaSize w144h396 MediaSize w162h36 MediaSize w162h90 MediaSize w162h288 MediaSize w162h396 MediaSize w171h396 MediaSize w180h72 MediaSize w180h144 MediaSize w198h90 MediaSize w216h72 MediaSize w216h90 MediaSize w216h144 MediaSize w216h216 MediaSize w216h360 MediaSize w234h144 MediaSize w234h360 MediaSize w234h396 MediaSize w234h419 MediaSize w234h563 MediaSize w252h72 MediaSize w288h72 MediaSize w288h144 MediaSize w288h180 MediaSize w288h216 MediaSize w288h288 *MediaSize w288h360 MediaSize w288h432 MediaSize w288h468 MediaSize w288h936 *Resolution k 1 0 0 0 203dpi Resolution k 1 0 0 0 300dpi Resolution k 1 0 0 0 600dpi Group "PrinterSettings/Printer Settings" Option "Darkness" PickOne AnySetup 20.0 *Choice "-1/Printer Default" "<>setpagedevice" Choice "1/1" "<>setpagedevice" Choice "2/2" "<>setpagedevice" Choice "3/3" "<>setpagedevice" Choice "4/4" "<>setpagedevice" Choice "5/5" "<>setpagedevice" Choice "6/6" "<>setpagedevice" Choice "7/7" "<>setpagedevice" Choice "8/8" "<>setpagedevice" Choice "9/9" "<>setpagedevice" Choice "10/10" "<>setpagedevice" Choice "11/11" "<>setpagedevice" Choice "12/12" "<>setpagedevice" Choice "13/13" "<>setpagedevice" Choice "14/14" "<>setpagedevice" Choice "15/15" "<>setpagedevice" Choice "16/16" "<>setpagedevice" Choice "17/17" "<>setpagedevice" Choice "18/18" "<>setpagedevice" Choice "19/19" "<>setpagedevice" Choice "20/20" "<>setpagedevice" Choice "21/21" "<>setpagedevice" Choice "22/22" "<>setpagedevice" Choice "23/23" "<>setpagedevice" Choice "24/24" "<>setpagedevice" Choice "25/25" "<>setpagedevice" Choice "26/26" "<>setpagedevice" Choice "27/27" "<>setpagedevice" Choice "28/28" "<>setpagedevice" Choice "29/29" "<>setpagedevice" Choice "30/30" "<>setpagedevice" Option "zePrintRate/Print Rate" PickOne AnySetup 20.0 *Choice "Default/Printer Default" "" Choice "1/1 inch/sec." "" Choice "1.5/1.5 inch/sec." "" Choice "2/2 inches/sec." "" Choice "2.5/2.5 inches/sec." "" } // Zebra EPL2 Label Printer { ModelName "EPL2 Label Printer" Attribute NickName "" "Zebra EPL2 Label Printer" PCFileName "zebraep2.ppd" ModelNumber $ZEBRA_EPL_PAGE HWMargins 0 0 0 0 VariablePaperSize Yes MinSize 36 36 MaxSize 288 3600 MediaSize w90h18 MediaSize w90h162 MediaSize w108h18 MediaSize w108h36 MediaSize w108h72 MediaSize w108h144 MediaSize w144h26 MediaSize w144h36 MediaSize w144h72 MediaSize w144h90 MediaSize w144h288 MediaSize w144h396 MediaSize w162h36 MediaSize w162h90 MediaSize w162h288 MediaSize w162h396 MediaSize w171h396 MediaSize w180h72 MediaSize w180h144 MediaSize w198h90 MediaSize w216h72 MediaSize w216h90 MediaSize w216h144 MediaSize w216h216 MediaSize w216h360 MediaSize w234h144 MediaSize w234h360 MediaSize w234h396 MediaSize w234h419 MediaSize w234h563 MediaSize w252h72 MediaSize w288h72 MediaSize w288h144 MediaSize w288h180 MediaSize w288h216 MediaSize w288h288 *MediaSize w288h360 MediaSize w288h432 MediaSize w288h468 MediaSize w288h936 *Resolution k 1 0 0 0 203dpi Resolution k 1 0 0 0 300dpi Resolution k 1 0 0 0 600dpi Group "General/General" Option "MediaType/Media Type" PickOne AnySetup 20.0 *Choice "Saved/Printer Default" "" Choice "Thermal/Thermal Transfer Media" "<>setpagedevice" Choice "Direct/Direct Thermal Media" "<>setpagedevice" Group "PrinterSettings/Printer Settings" Option "Darkness" PickOne AnySetup 20.0 *Choice "-1/Printer Default" "<>setpagedevice" Choice "1/1" "<>setpagedevice" Choice "2/2" "<>setpagedevice" Choice "3/3" "<>setpagedevice" Choice "4/4" "<>setpagedevice" Choice "5/5" "<>setpagedevice" Choice "6/6" "<>setpagedevice" Choice "7/7" "<>setpagedevice" Choice "8/8" "<>setpagedevice" Choice "9/9" "<>setpagedevice" Choice "10/10" "<>setpagedevice" Choice "11/11" "<>setpagedevice" Choice "12/12" "<>setpagedevice" Choice "13/13" "<>setpagedevice" Choice "14/14" "<>setpagedevice" Choice "15/15" "<>setpagedevice" Choice "16/16" "<>setpagedevice" Choice "17/17" "<>setpagedevice" Choice "18/18" "<>setpagedevice" Choice "19/19" "<>setpagedevice" Choice "20/20" "<>setpagedevice" Choice "21/21" "<>setpagedevice" Choice "22/22" "<>setpagedevice" Choice "23/23" "<>setpagedevice" Choice "24/24" "<>setpagedevice" Choice "25/25" "<>setpagedevice" Choice "26/26" "<>setpagedevice" Choice "27/27" "<>setpagedevice" Choice "28/28" "<>setpagedevice" Choice "29/29" "<>setpagedevice" Choice "30/30" "<>setpagedevice" Option "zePrintRate/Print Rate" PickOne AnySetup 20.0 *Choice "Default/Printer Default" "" Choice "1/1 inch/sec." "" Choice "1.5/1.5 inch/sec." "" Choice "2/2 inches/sec." "" Choice "2.5/2.5 inches/sec." "" Choice "3/3 inches/sec." "" Choice "4/4 inches/sec." "" Choice "5/5 inches/sec." "" Choice "6/6 inches/sec." "" } // Zebra ZPL Label Printer { ModelName "ZPL Label Printer" Attribute NickName "" "Zebra ZPL Label Printer" PCFileName "zebra.ppd" ModelNumber $ZEBRA_ZPL HWMargins 0 0 0 0 VariablePaperSize Yes MinSize 36 36 MaxSize 576 3600 MediaSize w90h18 MediaSize w90h162 MediaSize w108h18 MediaSize w108h36 MediaSize w108h72 MediaSize w108h144 MediaSize w144h26 MediaSize w144h36 MediaSize w144h72 MediaSize w144h90 MediaSize w144h288 MediaSize w144h396 MediaSize w162h36 MediaSize w162h90 MediaSize w162h288 MediaSize w162h396 MediaSize w171h396 MediaSize w180h72 MediaSize w180h144 MediaSize w198h90 MediaSize w216h72 MediaSize w216h90 MediaSize w216h144 MediaSize w216h216 MediaSize w216h360 MediaSize w234h144 MediaSize w234h360 MediaSize w234h396 MediaSize w234h419 MediaSize w234h563 MediaSize w252h72 MediaSize w288h72 MediaSize w288h144 MediaSize w288h180 MediaSize w288h216 MediaSize w288h288 *MediaSize w288h360 MediaSize w288h432 MediaSize w288h468 MediaSize w288h936 MediaSize w432h72 MediaSize w432h144 MediaSize w432h216 MediaSize w432h288 MediaSize w432h360 MediaSize w432h432 MediaSize w432h468 MediaSize w576h72 MediaSize w576h144 MediaSize w576h216 MediaSize w576h288 MediaSize w576h360 MediaSize w576h432 MediaSize w576h468 *Resolution k 1 0 0 0 203dpi Resolution k 1 0 0 0 300dpi Resolution k 1 0 0 0 600dpi Group "General/General" Option "zeMediaTracking/Media Tracking" PickOne AnySetup 20.0 Choice "Continuous/Continuous" "" *Choice "Web/Non-continuous (Web sensing)" "" Choice "Mark/Non-continuous (Mark sensing)" "" Option "MediaType/Media Type" PickOne AnySetup 20.0 *Choice "Saved/Printer Default" "" Choice "Thermal/Thermal Transfer Media" "<>setpagedevice" Choice "Direct/Direct Thermal Media" "<>setpagedevice" Group "PrinterSettings/Printer Settings" Option "Darkness" PickOne AnySetup 20.0 *Choice "-1/Printer Default" "<>setpagedevice" Choice "1/1" "<>setpagedevice" Choice "2/2" "<>setpagedevice" Choice "3/3" "<>setpagedevice" Choice "4/4" "<>setpagedevice" Choice "5/5" "<>setpagedevice" Choice "6/6" "<>setpagedevice" Choice "7/7" "<>setpagedevice" Choice "8/8" "<>setpagedevice" Choice "9/9" "<>setpagedevice" Choice "10/10" "<>setpagedevice" Choice "11/11" "<>setpagedevice" Choice "12/12" "<>setpagedevice" Choice "13/13" "<>setpagedevice" Choice "14/14" "<>setpagedevice" Choice "15/15" "<>setpagedevice" Choice "16/16" "<>setpagedevice" Choice "17/17" "<>setpagedevice" Choice "18/18" "<>setpagedevice" Choice "19/19" "<>setpagedevice" Choice "20/20" "<>setpagedevice" Choice "21/21" "<>setpagedevice" Choice "22/22" "<>setpagedevice" Choice "23/23" "<>setpagedevice" Choice "24/24" "<>setpagedevice" Choice "25/25" "<>setpagedevice" Choice "26/26" "<>setpagedevice" Choice "27/27" "<>setpagedevice" Choice "28/28" "<>setpagedevice" Choice "29/29" "<>setpagedevice" Choice "30/30" "<>setpagedevice" Option "zePrintRate/Print Rate" PickOne AnySetup 20.0 *Choice "Default/Printer Default" "" Choice "1/1 inch/sec." "" Choice "2/2 inches/sec." "" Choice "3/3 inches/sec." "" Choice "4/4 inches/sec." "" Choice "5/5 inches/sec." "" Choice "6/6 inches/sec." "" Choice "7/7 inches/sec." "" Choice "8/8 inches/sec." "" Choice "9/9 inches/sec." "" Choice "10/10 inches/sec." "" Choice "11/11 inches/sec." "" Choice "12/12 inches/sec." "" Option "zeLabelTop/Label Top" PickOne AnySetup 20.0 *Choice "200/Printer Default" "<>setpagedevice" Choice "-120/-120" "<>setpagedevice" Choice "-115/-115" "<>setpagedevice" Choice "-110/-110" "<>setpagedevice" Choice "-105/-105" "<>setpagedevice" Choice "-100/-100" "<>setpagedevice" Choice "-95/-95" "<>setpagedevice" Choice "-90/-90" "<>setpagedevice" Choice "-85/-85" "<>setpagedevice" Choice "-80/-80" "<>setpagedevice" Choice "-75/-75" "<>setpagedevice" Choice "-70/-70" "<>setpagedevice" Choice "-65/-65" "<>setpagedevice" Choice "-60/-60" "<>setpagedevice" Choice "-55/-55" "<>setpagedevice" Choice "-50/-50" "<>setpagedevice" Choice "-45/-45" "<>setpagedevice" Choice "-40/-40" "<>setpagedevice" Choice "-35/-35" "<>setpagedevice" Choice "-30/-30" "<>setpagedevice" Choice "-25/-25" "<>setpagedevice" Choice "-20/-20" "<>setpagedevice" Choice "-15/-15" "<>setpagedevice" Choice "-10/-10" "<>setpagedevice" Choice "-5/-5" "<>setpagedevice" Choice "0/0" "<>setpagedevice" Choice "5/5" "<>setpagedevice" Choice "10/10" "<>setpagedevice" Choice "15/15" "<>setpagedevice" Choice "20/20" "<>setpagedevice" Choice "25/25" "<>setpagedevice" Choice "30/30" "<>setpagedevice" Choice "35/35" "<>setpagedevice" Choice "40/40" "<>setpagedevice" Choice "45/45" "<>setpagedevice" Choice "50/50" "<>setpagedevice" Choice "55/55" "<>setpagedevice" Choice "60/60" "<>setpagedevice" Choice "65/65" "<>setpagedevice" Choice "70/70" "<>setpagedevice" Choice "75/75" "<>setpagedevice" Choice "80/80" "<>setpagedevice" Choice "85/85" "<>setpagedevice" Choice "90/90" "<>setpagedevice" Choice "95/95" "<>setpagedevice" Choice "100/100" "<>setpagedevice" Choice "105/105" "<>setpagedevice" Choice "110/110" "<>setpagedevice" Choice "115/115" "<>setpagedevice" Choice "120/120" "<>setpagedevice" Option "zePrintMode/Print Mode" PickOne AnySetup 20.0 *Choice "Saved/Printer Default" "" Choice "Tear/Tear-Off" "" Choice "Peel/Peel-Off" "" Choice "Rewind/Rewind" "" Choice "Applicator/Applicator" "" Choice "Cutter/Cutter" "" Option "zeTearOffPosition/Tear-Off Adjust Position" PickOne AnySetup 20.0 *Choice "1000/Printer Default" "<>setpagedevice" Choice "-120/-120" "<>setpagedevice" Choice "-115/-115" "<>setpagedevice" Choice "-110/-110" "<>setpagedevice" Choice "-105/-105" "<>setpagedevice" Choice "-100/-100" "<>setpagedevice" Choice "-95/-95" "<>setpagedevice" Choice "-90/-90" "<>setpagedevice" Choice "-85/-85" "<>setpagedevice" Choice "-80/-80" "<>setpagedevice" Choice "-75/-75" "<>setpagedevice" Choice "-70/-70" "<>setpagedevice" Choice "-65/-65" "<>setpagedevice" Choice "-60/-60" "<>setpagedevice" Choice "-55/-55" "<>setpagedevice" Choice "-50/-50" "<>setpagedevice" Choice "-45/-45" "<>setpagedevice" Choice "-40/-40" "<>setpagedevice" Choice "-35/-35" "<>setpagedevice" Choice "-30/-30" "<>setpagedevice" Choice "-25/-25" "<>setpagedevice" Choice "-20/-20" "<>setpagedevice" Choice "-15/-15" "<>setpagedevice" Choice "-10/-10" "<>setpagedevice" Choice "-5/-5" "<>setpagedevice" Choice "0/0" "<>setpagedevice" Choice "5/5" "<>setpagedevice" Choice "10/10" "<>setpagedevice" Choice "15/15" "<>setpagedevice" Choice "20/20" "<>setpagedevice" Choice "25/25" "<>setpagedevice" Choice "30/30" "<>setpagedevice" Choice "35/35" "<>setpagedevice" Choice "40/40" "<>setpagedevice" Choice "45/45" "<>setpagedevice" Choice "50/50" "<>setpagedevice" Choice "55/55" "<>setpagedevice" Choice "60/60" "<>setpagedevice" Choice "65/65" "<>setpagedevice" Choice "70/70" "<>setpagedevice" Choice "75/75" "<>setpagedevice" Choice "80/80" "<>setpagedevice" Choice "85/85" "<>setpagedevice" Choice "90/90" "<>setpagedevice" Choice "95/95" "<>setpagedevice" Choice "100/100" "<>setpagedevice" Choice "105/105" "<>setpagedevice" Choice "110/110" "<>setpagedevice" Choice "115/115" "<>setpagedevice" Choice "120/120" "<>setpagedevice" Option "zeErrorReprint/Reprint After Error" PickOne AnySetup 20.0 *Choice "Saved/Printer Default" "" Choice "Always/Always" "" Choice "Never/Never" "" } } // // End of "$Id$". // cups-2.2.7/ppdc/testcatalog.cxx000664 000765 000024 00000002323 13255074424 017137 0ustar00msweetstaff000000 000000 // // Test program for message catalog class. // // Copyright 2008 by Apple Inc. // // These coded instructions, statements, and computer programs are the // property of Apple Inc. 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 file is // missing or damaged, see the license at "http://www.cups.org/". // // // Include necessary headers... // #include "ppdc-private.h" // // 'main()' - Open a message catalog // int // O - Exit status main(int argc, // I - Number of command-line arguments char *argv[]) // I - Command-line arguments { ppdcCatalog *catalog; // Message catalog ppdcMessage *m; // Current message if (argc != 2) { puts("Usage: testcatalog filename"); return (1); } // Scan the command-line... catalog = new ppdcCatalog(NULL, argv[1]); printf("%s: %d messages\n", argv[1], catalog->messages->count); for (m = (ppdcMessage *)catalog->messages->first(); m; m = (ppdcMessage *)catalog->messages->next()) printf("%s: %s\n", m->id->value, m->string->value); catalog->release(); // Return with no errors. return (0); } cups-2.2.7/packaging/cups.list.in000664 000765 000024 00000063024 13255074424 017360 0ustar00msweetstaff000000 000000 # # ESP Package Manager (EPM) file list for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 1997-2007 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # Product information %product CUPS %copyright 2007-2017` by Apple Inc. %vendor Apple Inc. #%license LICENSE.txt %readme LICENSE.txt %format rpm # Red Hat and their epochs... %version 1:@CUPS_VERSION@ %format !rpm %version @CUPS_VERSION@ %format all %description CUPS is the standards-based, open source printing system developed by %description Apple Inc. for macOS® and other UNIX®-like operating systems. %format rpm %provides lpd %provides lpr %provides LPRng %replaces lpd %replaces lpr %replaces LPRng %requires cups-libs 1:@CUPS_VERSION@ # Replace all of the old localization subpackages from CUPS 1.2/1.3 %replaces cups-da %replaces cups-de %replaces cups-es %replaces cups-et %replaces cups-fi %replaces cups-fr %replaces cups-he %replaces cups-id %replaces cups-it %replaces cups-ja %replaces cups-ko %replaces cups-nl %replaces cups-no %replaces cups-pl %replaces cups-pt %replaces cups-ru %replaces cups-sv %replaces cups-zh %format deb %provides cupsys %provides cupsys-client %provides cupsys-bsd %requires cups-libs # Replace all of the old localization subpackages from CUPS 1.2/1.3 %replaces cups-da %replaces cups-de %replaces cups-es %replaces cups-et %replaces cups-fi %replaces cups-fr %replaces cups-he %replaces cups-id %replaces cups-it %replaces cups-ja %replaces cups-ko %replaces cups-nl %replaces cups-no %replaces cups-pl %replaces cups-pt %replaces cups-ru %replaces cups-sv %replaces cups-zh %format pkg %replaces SUNWlpmsg LP Alerts %replaces SUNWlpr LP Print Service, (Root) %replaces SUNWlps LP Print Service - Server, (Usr) %replaces SUNWlpu LP Print Service - Client, (Usr) %replaces SUNWpsu LP Print Server, (Usr) %replaces SUNWpsr LP Print Server, (Root) %replaces SUNWpcu LP Print Client, (Usr) %replaces SUNWpcr LP Print Client, (Root) %replaces SUNWppm %replaces SUNWmp %replaces SUNWscplp SunOS Print Compatibility %format inst %replaces patch*.print_*.* 0 0 1289999999 1289999999 %replaces maint*.print_*.* 0 0 1289999999 1289999999 %replaces print 0 0 1289999999 1289999999 %replaces fw_cups 0 0 1289999999 1289999999 %incompat patch*.print_*.* 0 0 1289999999 1289999999 %incompat maint*.print_*.* 0 0 1289999999 1289999999 %incompat print 0 0 1289999999 1289999999 %incompat fw_cups 0 0 1289999999 1289999999 %requires cups.sw.libs # Replace all of the old localization subpackages from CUPS 1.2/1.3 %replaces cups.sw.da %replaces cups.sw.de %replaces cups.sw.es %replaces cups.sw.et %replaces cups.sw.fi %replaces cups.sw.fr %replaces cups.sw.he %replaces cups.sw.id %replaces cups.sw.it %replaces cups.sw.ja %replaces cups.sw.ko %replaces cups.sw.nl %replaces cups.sw.no %replaces cups.sw.pl %replaces cups.sw.pt %replaces cups.sw.ru %replaces cups.sw.sv %replaces cups.sw.zh %format portable %requires cups-libs # Replace all of the old localization subpackages from CUPS 1.2/1.3 %replaces cups-da %replaces cups-de %replaces cups-es %replaces cups-et %replaces cups-fi %replaces cups-fr %replaces cups-he %replaces cups-id %replaces cups-it %replaces cups-ja %replaces cups-ko %replaces cups-nl %replaces cups-no %replaces cups-pl %replaces cups-pt %replaces cups-ru %replaces cups-sv %replaces cups-zh %format all %subpackage libs %description Shared libraries %format deb %provides libcups1 %provides libcupsys2 %provides libcupsys2-gnutls10 %provides libcupsimage2 %format all %subpackage devel %description Development environment %format deb %provides libcupsys2-dev %provides libcupsimage2-dev %format all %subpackage lpd %description LPD support %subpackage # # GNU variables... # $prefix=@prefix@ $exec_prefix=@exec_prefix@ $bindir=@bindir@ $datarootdir=@datarootdir@ $datadir=@datadir@ $includedir=@includedir@ $infodir=@infodir@ $libdir=@libdir@ $libexecdir=@libexecdir@ $localstatedir=@localstatedir@ $mandir=@mandir@ $oldincludedir=@oldincludedir@ $sbindir=@sbindir@ $sharedstatedir=@sharedstatedir@ $srcdir=@srcdir@ $sysconfdir=@sysconfdir@ $top_srcdir=@top_srcdir@ # # ESP variables... # $AMANDIR=@AMANDIR@ $BINDIR=@bindir@ $CACHEDIR=@CUPS_CACHEDIR@ $DATADIR=@CUPS_DATADIR@ $DOCDIR=@CUPS_DOCROOT@ $INCLUDEDIR=${includedir} $INITDIR=@INITDIR@ $INITDDIR=@INITDDIR@ $LIBDIR=${libdir} $LOCALEDIR=@CUPS_LOCALEDIR@ $LOGDIR=@CUPS_LOGDIR@ $MANDIR=@mandir@ $PAMDIR=@PAMDIR@ $PMANDIR=@PMANDIR@ $REQUESTS=@CUPS_REQUESTS@ $SBINDIR=@sbindir@ $SERVERBIN=@CUPS_SERVERBIN@ $SERVERROOT=@CUPS_SERVERROOT@ $STATEDIR=@CUPS_STATEDIR@ $XINETD=@XINETD@ $LIB32DIR=@LIB32DIR@ $LIB64DIR=@LIB64DIR@ $MDNS=@MDNS@ $CUPS_USER=@CUPS_USER@ $CUPS_GROUP=@CUPS_GROUP@ $CUPS_PRIMARY_SYSTEM_GROUP=@CUPS_PRIMARY_SYSTEM_GROUP@ $CUPS_PERM=0@CUPS_CONFIG_FILE_PERM@ $INSTALLSTATIC=@INSTALLSTATIC@ $MAN1EXT=@MAN1EXT@ $MAN3EXT=@MAN3EXT@ $MAN5EXT=@MAN5EXT@ $MAN7EXT=@MAN7EXT@ $MAN8EXT=@MAN8EXT@ $MAN8DIR=@MAN8DIR@ $LIBZ=@LIBZ@ $DSOLIBS=@DSOLIBS@ # Make sure the MD5 password file is now owned by CUPS_USER... %postinstall if test -f $SERVERROOT/passwd.md5; then %postinstall chown $CUPS_USER $SERVERROOT/passwd.md5 %postinstall fi # Make sure the shared libraries are refreshed... %subpackage libs %system linux %postinstall ldconfig %system all %subpackage # Server programs %system all # Server files f 0555 root sys $SBINDIR/cupsd scheduler/cupsd d 0755 root sys $SERVERBIN - %system darwin d 0755 root sys $SERVERBIN/apple - f 0555 root sys $SERVERBIN/apple/ipp backend/ipp l 0755 root sys $SERVERBIN/apple/http ipp l 0755 root sys $SERVERBIN/apple/https ipp l 0755 root sys $SERVERBIN/apple/ipps ipp %system all d 0755 root sys $SERVERBIN/backend - f 0500 root sys $SERVERBIN/backend/ipp backend/ipp l 0700 root sys $SERVERBIN/backend/http ipp l 0700 root sys $SERVERBIN/backend/https ipp l 0700 root sys $SERVERBIN/backend/ipps ipp f 0500 root sys $SERVERBIN/backend/lpd backend/lpd %if DNSSD_BACKEND f 0500 root sys $SERVERBIN/backend/dnssd backend/dnssd %system darwin l 0700 root sys $SERVERBIN/backend/mdns dnssd %system all %endif f 0555 root sys $SERVERBIN/backend/snmp backend/snmp f 0555 root sys $SERVERBIN/backend/socket backend/socket f 0555 root sys $SERVERBIN/backend/usb backend/usb d 0755 root sys $SERVERBIN/cgi-bin - f 0555 root sys $SERVERBIN/cgi-bin/admin.cgi cgi-bin/admin.cgi f 0555 root sys $SERVERBIN/cgi-bin/classes.cgi cgi-bin/classes.cgi f 0555 root sys $SERVERBIN/cgi-bin/help.cgi cgi-bin/help.cgi f 0555 root sys $SERVERBIN/cgi-bin/jobs.cgi cgi-bin/jobs.cgi f 0555 root sys $SERVERBIN/cgi-bin/printers.cgi cgi-bin/printers.cgi d 0755 root sys $SERVERBIN/daemon - f 0555 root sys $SERVERBIN/daemon/cups-deviced scheduler/cups-deviced f 0555 root sys $SERVERBIN/daemon/cups-driverd scheduler/cups-driverd d 0755 root sys $SERVERBIN/driver - d 0755 root sys $SERVERBIN/filter - f 0555 root sys $SERVERBIN/filter/commandtops filter/commandtops f 0555 root sys $SERVERBIN/filter/gziptoany filter/gziptoany f 0555 root sys $SERVERBIN/filter/pstops filter/pstops f 0555 root sys $SERVERBIN/filter/rastertolabel filter/rastertolabel l 0755 root sys $SERVERBIN/filter/rastertodymo rastertolabel f 0555 root sys $SERVERBIN/filter/rastertoepson filter/rastertoepson f 0555 root sys $SERVERBIN/filter/rastertohp filter/rastertohp f 0555 root sys $SERVERBIN/filter/rastertopwg filter/rastertopwg d 0755 root sys $SERVERBIN/notifier - f 0555 root sys $SERVERBIN/notifier/mailto notifier/mailto %subpackage lpd d 0755 root sys $SERVERBIN/daemon - f 0555 root sys $SERVERBIN/daemon/cups-lpd scheduler/cups-lpd %subpackage # Admin commands d 0755 root sys $BINDIR - l 0755 root sys $BINDIR/enable $SBINDIR/cupsaccept l 0755 root sys $BINDIR/disable $SBINDIR/cupsaccept d 0755 root sys $LIBDIR - l 0755 root sys $LIBDIR/accept $SBINDIR/cupsaccept l 0755 root sys $LIBDIR/lpadmin $SBINDIR/lpadmin l 0755 root sys $LIBDIR/reject $SBINDIR/cupsaccept d 0755 root sys $SBINDIR - l 0755 root sys $SBINDIR/accept cupsaccept f 0555 root sys $SBINDIR/cupsaccept systemv/cupsaccept f 0555 root sys $SBINDIR/cupsaddsmb systemv/cupsaddsmb f 0555 root sys $SBINDIR/cupsctl systemv/cupsctl l 0755 root sys $SBINDIR/cupsdisable accept l 0755 root sys $SBINDIR/cupsenable accept l 0755 root sys $SBINDIR/cupsreject accept f 0555 root sys $SBINDIR/lpadmin systemv/lpadmin f 0555 root sys $SBINDIR/lpc berkeley/lpc f 0555 root sys $SBINDIR/lpinfo systemv/lpinfo f 0555 root sys $SBINDIR/lpmove systemv/lpmove l 0755 root sys $SBINDIR/reject cupsaccept %system irix l 0755 root sys /usr/etc/lpc $SBINDIR/lpc %system all # User commands d 0755 root sys $BINDIR - f 0555 root sys $BINDIR/cancel systemv/cancel f 0555 root sys $BINDIR/cupstestdsc systemv/cupstestdsc f 0555 root sys $BINDIR/cupstestppd systemv/cupstestppd f 0555 root sys $BINDIR/ipptool test/ipptool f 0555 root sys $BINDIR/lp systemv/lp f 0555 root sys $BINDIR/lpoptions systemv/lpoptions f 0555 root sys $BINDIR/lpq berkeley/lpq f 0555 root sys $BINDIR/lpr berkeley/lpr f 0555 root sys $BINDIR/lprm berkeley/lprm f 0555 root sys $BINDIR/lpstat systemv/lpstat %system irix l 0755 root sys /usr/bsd/lpq $BINDIR/lpq l 0755 root sys /usr/bsd/lpr $BINDIR/lpr l 0755 root sys /usr/bsd/lprm $BINDIR/lprm %system all # DSOs %if DSOLIBS %subpackage libs %system hpux f 0555 root sys $LIBDIR/libcups.sl.2 cups/libcups.sl.2 nostrip() l 0755 root sys $LIBDIR/libcups.sl libcups.sl.2 f 0555 root sys $LIBDIR/libcupscgi.sl.1 cgi-bin/libcupscgi.sl.1 nostrip() l 0755 root sys $LIBDIR/libcupscgi.sl libcupscgi.sl.1 f 0555 root sys $LIBDIR/libcupsimage.sl.2 filter/libcupsimage.sl.2 nostrip() l 0755 root sys $LIBDIR/libcupsimage.sl libcupsimage.sl.2 f 0555 root sys $LIBDIR/libcupsmime.sl.1 scheduler/libcupsmime.sl.1 nostrip() l 0755 root sys $LIBDIR/libcupsmime.sl libcupsmime.sl.1 f 0555 root sys $LIBDIR/libcupsppdc.sl.1 ppdc/libcupsppdc.sl.1 nostrip() l 0755 root sys $LIBDIR/libcupsppdc.sl libcupsppdc.sl.1 %system aix f 0555 root sys $LIBDIR/libcups_s.a cups/libcups_s.a nostrip() f 0555 root sys $LIBDIR/libcupscgi_s.a cgi-bin/libcupscgi_s.a nostrip() f 0555 root sys $LIBDIR/libcupsimage_s.a filter/libcupsimage_s.a nostrip() f 0555 root sys $LIBDIR/libcupsmime_s.a scheduler/libcupsmime_s.a nostrip() f 0555 root sys $LIBDIR/libcupsppdc_s.a ppdc/libcupsppdc_s.a nostrip() %system darwin f 0555 root sys $LIBDIR/libcups.2.dylib cups/libcups.2.dylib nostrip() l 0755 root sys $LIBDIR/libcups.dylib libcups.2.dylib f 0555 root sys $LIBDIR/libcupscgi.1.dylib cgi-bin/libcupscgi.1.dylib nostrip() l 0755 root sys $LIBDIR/libcupscgi.dylib libcupscgi.1.dylib f 0555 root sys $LIBDIR/libcupsimage.2.dylib filter/libcupsimage.2.dylib nostrip() l 0755 root sys $LIBDIR/libcupsimage.dylib libcupsimage.2.dylib f 0555 root sys $LIBDIR/libcupsmime.1.dylib scheduler/libcupsmime.1.dylib nostrip() l 0755 root sys $LIBDIR/libcupsmime.dylib libcupsmime.1.dylib f 0555 root sys $LIBDIR/libcupsppdc.1.dylib ppdc/libcupsppdc.1.dylib nostrip() l 0755 root sys $LIBDIR/libcupsppdc.dylib libcupsppdc.1.dylib %system !hpux !aix !darwin f 0555 root sys $LIBDIR/libcups.so.2 cups/libcups.so.2 nostrip() l 0755 root sys $LIBDIR/libcups.so libcups.so.2 f 0555 root sys $LIBDIR/libcupscgi.so.1 cgi-bin/libcupscgi.so.1 nostrip() l 0755 root sys $LIBDIR/libcupscgi.so libcupscgi.so.1 f 0555 root sys $LIBDIR/libcupsimage.so.2 filter/libcupsimage.so.2 nostrip() l 0755 root sys $LIBDIR/libcupsimage.so libcupsimage.so.2 f 0555 root sys $LIBDIR/libcupsmime.so.1 scheduler/libcupsmime.so.1 nostrip() l 0755 root sys $LIBDIR/libcupsmime.so libcupsmime.so.1 f 0555 root sys $LIBDIR/libcupsppdc.so.1 ppdc/libcupsppdc.so.1 nostrip() l 0755 root sys $LIBDIR/libcupsppdc.so libcupsppdc.so.1 %system all %subpackage %endif # Directories d 0755 root sys $LOGDIR - d 0710 root $CUPS_GROUP $REQUESTS - d 1770 root $CUPS_GROUP $REQUESTS/tmp - d 0775 root $CUPS_GROUP $CACHEDIR - d 0775 root $CUPS_GROUP $CACHEDIR/rss - #d 0755 root $CUPS_GROUP $CACHEDIR/ppd - %system !darwin d 0755 root $CUPS_GROUP $STATEDIR - %system all d 0511 root $CUPS_PRIMARY_SYSTEM_GROUP $STATEDIR/certs - # Data files f 0444 root sys $LOCALEDIR/ca/cups_ca.po locale/cups_ca.po f 0444 root sys $LOCALEDIR/cs/cups_cs.po locale/cups_cs.po #f 0444 root sys $LOCALEDIR/da/cups_da.po locale/cups_da.po f 0444 root sys $LOCALEDIR/de/cups_de.po locale/cups_de.po f 0444 root sys $LOCALEDIR/es/cups_es.po locale/cups_es.po #f 0444 root sys $LOCALEDIR/et/cups_et.po locale/cups_et.po #f 0444 root sys $LOCALEDIR/eu/cups_eu.po locale/cups_eu.po #f 0444 root sys $LOCALEDIR/fi/cups_fi.po locale/cups_fi.po f 0444 root sys $LOCALEDIR/fr/cups_fr.po locale/cups_fr.po #f 0444 root sys $LOCALEDIR/he/cups_he.po locale/cups_he.po #f 0444 root sys $LOCALEDIR/id/cups_id.po locale/cups_id.po f 0444 root sys $LOCALEDIR/it/cups_it.po locale/cups_it.po f 0444 root sys $LOCALEDIR/ja/cups_ja.po locale/cups_ja.po #f 0444 root sys $LOCALEDIR/ko/cups_ko.po locale/cups_ko.po #f 0444 root sys $LOCALEDIR/nl/cups_nl.po locale/cups_nl.po #f 0444 root sys $LOCALEDIR/no/cups_no.po locale/cups_no.po #f 0444 root sys $LOCALEDIR/pl/cups_pl.po locale/cups_pl.po #f 0444 root sys $LOCALEDIR/pt/cups_pt.po locale/cups_pt.po f 0444 root sys $LOCALEDIR/pt_BR/cups_pt_BR.po locale/cups_pt_BR.po f 0444 root sys $LOCALEDIR/ru/cups_ru.po locale/cups_ru.po #f 0444 root sys $LOCALEDIR/sv/cups_sv.po locale/cups_sv.po #f 0444 root sys $LOCALEDIR/zh/cups_zh.po locale/cups_zh.po #f 0444 root sys $LOCALEDIR/zh_TW/cups_zh_TW.po locale/cups_zh_TW.po d 0755 root sys $DATADIR - d 0755 root sys $DATADIR/banners - d 0755 root sys $DATADIR/data - d 0755 root sys $DATADIR/drv - f 0444 root sys $DATADIR/drv/sample.drv ppdc/sample.drv d 0755 root sys $DATADIR/examples - f 0444 root sys $DATADIR/examples examples/*.drv d 0755 root sys $DATADIR/ipptool - f 0444 root sys $DATADIR/ipptool/create-printer-subscription.test test/create-printer-subscription.test f 0444 root sys $DATADIR/ipptool/get-completed-jobs.test test/get-completed-jobs.test f 0444 root sys $DATADIR/ipptool/get-jobs.test test/get-jobs.test f 0444 root sys $DATADIR/ipptool/get-printer-attributes.test test/get-printer-attributes.test f 0444 root sys $DATADIR/ipptool/print-job.test test/print-job.test f 0444 root sys $DATADIR/ipptool test/document-*.p* f 0444 root sys $DATADIR/ipptool test/ipp-*.test f 0444 root sys $DATADIR/ipptool test/onepage-*.p* f 0444 root sys $DATADIR/ipptool test/testfile.* f 0444 root sys $DATADIR/ipptool/color.jpg test/color.jpg f 0444 root sys $DATADIR/ipptool/gray.jpg test/gray.jpg d 0755 root sys $DATADIR/mime - f 0444 root sys $DATADIR/mime/mime.convs conf/mime.convs f 0444 root sys $DATADIR/mime/mime.types conf/mime.types d 0755 root sys $DATADIR/model - d 0755 root sys $DATADIR/ppdc - f 0444 root sys $DATADIR/ppdc data/*.defs f 0444 root sys $DATADIR/ppdc data/*.h d 0755 root sys $DATADIR/templates - f 0444 root sys $DATADIR/templates templates/*.tmpl ## Template files d 0755 root sys $DATADIR/templates/de f 0444 root sys $DATADIR/templates/de templates/de/*.tmpl d 0755 root sys $DATADIR/templates/es f 0444 root sys $DATADIR/templates/es templates/es/*.tmpl #d 0755 root sys $DATADIR/templates/et #f 0444 root sys $DATADIR/templates/et templates/et/*.tmpl #d 0755 root sys $DATADIR/templates/eu #f 0444 root sys $DATADIR/templates/eu templates/eu/*.tmpl d 0755 root sys $DATADIR/templates/fr f 0444 root sys $DATADIR/templates/fr templates/fr/*.tmpl #d 0755 root sys $DATADIR/templates/he #f 0444 root sys $DATADIR/templates/he templates/he/*.tmpl #d 0755 root sys $DATADIR/templates/id #f 0444 root sys $DATADIR/templates/id templates/id/*.tmpl #d 0755 root sys $DATADIR/templates/it #f 0444 root sys $DATADIR/templates/it templates/it/*.tmpl d 0755 root sys $DATADIR/templates/ja f 0444 root sys $DATADIR/templates/ja templates/ja/*.tmpl #d 0755 root sys $DATADIR/templates/pl #f 0444 root sys $DATADIR/templates/pl templates/pl/*.tmpl d 0755 root sys $DATADIR/templates/pt_BR f 0444 root sys $DATADIR/templates/pt_BR templates/pt_BR/*.tmpl d 0755 root sys $DATADIR/templates/ru f 0444 root sys $DATADIR/templates/ru templates/ru/*.tmpl #d 0755 root sys $DATADIR/templates/sv #f 0444 root sys $DATADIR/templates/sv templates/sv/*.tmpl #d 0755 root sys $DATADIR/templates/zh_TW #f 0444 root sys $DATADIR/templates/zh_TW templates/zh_TW/*.tmpl # Config files d 0755 root $CUPS_GROUP $SERVERROOT - d 0755 root $CUPS_GROUP $SERVERROOT/ppd - d 0700 root $CUPS_GROUP $SERVERROOT/ssl - c $CUPS_PERM root $CUPS_GROUP $SERVERROOT/cups-files.conf conf/cups-files.conf f $CUPS_PERM root $CUPS_GROUP $SERVERROOT/cups-files.conf.default conf/cups-files.conf c $CUPS_PERM root $CUPS_GROUP $SERVERROOT/cupsd.conf conf/cupsd.conf f $CUPS_PERM root $CUPS_GROUP $SERVERROOT/cupsd.conf.default conf/cupsd.conf c $CUPS_PERM root $CUPS_GROUP $SERVERROOT/snmp.conf conf/snmp.conf %if PAMDIR d 0755 root sys $PAMDIR - c 0644 root sys $PAMDIR/cups conf/@PAMFILE@ %endif %subpackage devel # Developer files f 0555 root sys $BINDIR/cups-config cups-config d 0755 root sys $INCLUDEDIR/cups - f 0444 root sys $INCLUDEDIR/cups/adminutil.h cups/adminutil.h f 0444 root sys $INCLUDEDIR/cups/array.h cups/array.h f 0444 root sys $INCLUDEDIR/cups/backend.h cups/backend.h f 0444 root sys $INCLUDEDIR/cups/cups.h cups/cups.h f 0444 root sys $INCLUDEDIR/cups/dir.h cups/dir.h f 0444 root sys $INCLUDEDIR/cups/file.h cups/file.h f 0444 root sys $INCLUDEDIR/cups/http.h cups/http.h f 0444 root sys $INCLUDEDIR/cups/ipp.h cups/ipp.h f 0444 root sys $INCLUDEDIR/cups/language.h cups/language.h f 0444 root sys $INCLUDEDIR/cups/ppd.h cups/ppd.h f 0444 root sys $INCLUDEDIR/cups/pwg.h cups/pwg.h f 0444 root sys $INCLUDEDIR/cups/raster.h cups/raster.h f 0444 root sys $INCLUDEDIR/cups/sidechannel.h cups/sidechannel.h f 0444 root sys $INCLUDEDIR/cups/transcode.h cups/transcode.h f 0444 root sys $INCLUDEDIR/cups/versioning.h cups/versioning.h %if INSTALLSTATIC f 0444 root sys $LIBDIR/libcups.a cups/libcups.a f 0444 root sys $LIBDIR/libcupsimage.a filter/libcupsimage.a %endif d 0755 root sys $DOCDIR/help - f 0444 root sys $DOCDIR/help doc/help/api*.html f 0444 root sys $DOCDIR/help/cupspm.html doc/help/cupspm.html f 0444 root sys $DOCDIR/help/postscript-driver.html doc/help/postscript-driver.html f 0444 root sys $DOCDIR/help/ppd-compiler.html doc/help/ppd-compiler.html f 0444 root sys $DOCDIR/help/raster-driver.html doc/help/raster-driver.html f 0444 root sys $DOCDIR/help doc/help/spec*.html %subpackage # Documentation files d 0755 root sys $DOCDIR - f 0444 root sys $DOCDIR doc/*.css f 0444 root sys $DOCDIR doc/*.html f 0444 root sys $DOCDIR/apple-touch-icon.png doc/apple-touch-icon.png d 0755 root sys $DOCDIR/help - f 0444 root sys $DOCDIR/help/accounting.html doc/help/accounting.html f 0444 root sys $DOCDIR/help/cgi.html doc/help/cgi.html f 0444 root sys $DOCDIR/help/encryption.html doc/help/encryption.html f 0444 root sys $DOCDIR/help/glossary.html doc/help/glossary.html f 0444 root sys $DOCDIR/help/kerberos.html doc/help/kerberos.html f 0444 root sys $DOCDIR/help/license.html doc/help/license.html f 0444 root sys $DOCDIR/help/network.html doc/help/network.html f 0444 root sys $DOCDIR/help/options.html doc/help/options.html f 0444 root sys $DOCDIR/help/overview.html doc/help/overview.html f 0444 root sys $DOCDIR/help/policies.html doc/help/policies.html f 0444 root sys $DOCDIR/help/security.html doc/help/security.html f 0444 root sys $DOCDIR/help/sharing.html doc/help/sharing.html f 0444 root sys $DOCDIR/help/translation.html doc/help/translation.html f 0444 root sys $DOCDIR/help doc/help/man-*.html f 0444 root sys $DOCDIR/help doc/help/ref-*.html d 0755 root sys $DOCDIR/images - f 0444 root sys $DOCDIR/images doc/images/*.gif f 0444 root sys $DOCDIR/images doc/images/*.jpg f 0444 root sys $DOCDIR/images doc/images/*.png f 0444 root sys $DOCDIR/robots.txt doc/robots.txt # Localized documentation files d 0755 root sys $DOCDIR/de f 0444 root sys $DOCDIR/de doc/de/*.html d 0755 root sys $DOCDIR/es f 0444 root sys $DOCDIR/es doc/es/*.html #d 0755 root sys $DOCDIR/et #f 0444 root sys $DOCDIR/et doc/et/*.html #d 0755 root sys $DOCDIR/eu #f 0444 root sys $DOCDIR/eu doc/eu/*.html #d 0755 root sys $DOCDIR/fr #f 0444 root sys $DOCDIR/fr doc/fr/*.html #d 0755 root sys $DOCDIR/he #f 0444 root sys $DOCDIR/he doc/he/*.html #f 0444 root sys $DOCDIR/he/cups.css doc/he/cups.css #d 0755 root sys $DOCDIR/id #f 0444 root sys $DOCDIR/id doc/id/*.html #d 0755 root sys $DOCDIR/it #f 0444 root sys $DOCDIR/it doc/it/*.html d 0755 root sys $DOCDIR/ja f 0444 root sys $DOCDIR/ja doc/ja/*.html #d 0755 root sys $DOCDIR/pl #f 0444 root sys $DOCDIR/pl doc/pl/*.html d 0755 root sys $DOCDIR/pt_BR f 0444 root sys $DOCDIR/pt_BR doc/pt_BR/*.html d 0755 root sys $DOCDIR/ru f 0444 root sys $DOCDIR/ru doc/ru/*.html #d 0755 root sys $DOCDIR/sv #f 0444 root sys $DOCDIR/sv doc/sv/*.html #d 0755 root sys $DOCDIR/zh_TW #f 0444 root sys $DOCDIR/zh_TW doc/zh_TW/*.html # Man pages d 0755 root sys $AMANDIR - d 0755 root sys $AMANDIR/man$MAN8DIR - d 0755 root sys $MANDIR - d 0755 root sys $MANDIR/man1 - d 0755 root sys $MANDIR/man5 - d 0755 root sys $MANDIR/man7 - f 0444 root sys $MANDIR/man1/cancel.$MAN1EXT man/cancel.$MAN1EXT f 0444 root sys $MANDIR/man1/cups.$MAN1EXT man/cups.$MAN1EXT f 0444 root sys $MANDIR/man1/cupstestdsc.$MAN1EXT man/cupstestdsc.$MAN1EXT f 0444 root sys $MANDIR/man1/cupstestppd.$MAN1EXT man/cupstestppd.$MAN1EXT f 0444 root sys $MANDIR/man1/ippfind.$MAN1EXT man/ippfind.$MAN1EXT f 0444 root sys $MANDIR/man1/ipptool.$MAN1EXT man/ipptool.$MAN1EXT f 0444 root sys $MANDIR/man1/lp.$MAN1EXT man/lp.$MAN1EXT f 0444 root sys $MANDIR/man1/lpoptions.$MAN1EXT man/lpoptions.$MAN1EXT f 0444 root sys $MANDIR/man1/lpq.$MAN1EXT man/lpq.$MAN1EXT f 0444 root sys $MANDIR/man1/lpr.$MAN1EXT man/lpr.$MAN1EXT f 0444 root sys $MANDIR/man1/lprm.$MAN1EXT man/lprm.$MAN1EXT f 0444 root sys $MANDIR/man1/lpstat.$MAN1EXT man/lpstat.$MAN1EXT f 0444 root sys $MANDIR/man5/classes.conf.$MAN5EXT man/classes.conf.$MAN5EXT f 0444 root sys $MANDIR/man5/client.conf.$MAN5EXT man/client.conf.$MAN5EXT f 0444 root sys $MANDIR/man5/cups-files.conf.$MAN5EXT man/cups-files.conf.$MAN5EXT f 0444 root sys $MANDIR/man5/cups-snmp.conf.$MAN5EXT man/cups-snmp.conf.$MAN5EXT f 0444 root sys $MANDIR/man5/cupsd.conf.$MAN5EXT man/cupsd.conf.$MAN5EXT f 0444 root sys $MANDIR/man5/cupsd-logs.$MAN5EXT man/cupsd-logs.$MAN5EXT f 0444 root sys $MANDIR/man5/ipptoolfile.$MAN5EXT man/ipptoolfile.$MAN5EXT f 0444 root sys $MANDIR/man5/mailto.conf.$MAN5EXT man/mailto.conf.$MAN5EXT f 0444 root sys $MANDIR/man5/mime.convs.$MAN5EXT man/mime.convs.$MAN5EXT f 0444 root sys $MANDIR/man5/mime.types.$MAN5EXT man/mime.types.$MAN5EXT f 0444 root sys $MANDIR/man5/printers.conf.$MAN5EXT man/printers.conf.$MAN5EXT l 0644 root sys $AMANDIR/man$MAN8DIR/accept.$MAN8EXT cupsaccept.$MAN8EXT f 0444 root sys $AMANDIR/man$MAN8DIR/cupsaccept.$MAN8EXT man/cupsaccept.$MAN8EXT f 0444 root sys $AMANDIR/man$MAN8DIR/cupsaddsmb.$MAN8EXT man/cupsaddsmb.$MAN8EXT l 0644 root sys $AMANDIR/man$MAN8DIR/cupsreject.$MAN8EXT cupsaccept.$MAN8EXT f 0444 root sys $AMANDIR/man$MAN8DIR/cupsctl.$MAN8EXT man/cupsctl.$MAN8EXT f 0444 root sys $AMANDIR/man$MAN8DIR/cupsfilter.$MAN8EXT man/cupsfilter.$MAN8EXT f 0444 root sys $AMANDIR/man$MAN8DIR/cups-snmp.$MAN8EXT man/cups-snmp.$MAN8EXT f 0444 root sys $AMANDIR/man$MAN8DIR/cupsd.$MAN8EXT man/cupsd.$MAN8EXT f 0444 root sys $AMANDIR/man$MAN8DIR/cupsd-helper.$MAN8EXT man/cupsd-helper.$MAN8EXT l 0644 root sys $AMANDIR/man$MAN8DIR/cupsdisable.$MAN8EXT cupsenable.$MAN8EXT f 0444 root sys $AMANDIR/man$MAN8DIR/cupsenable.$MAN8EXT man/cupsenable.$MAN8EXT l 0644 root sys $AMANDIR/man$MAN8DIR/disable.$MAN8EXT cupsenable.$MAN8EXT l 0644 root sys $AMANDIR/man$MAN8DIR/enable.$MAN8EXT cupsenable.$MAN8EXT f 0444 root sys $AMANDIR/man$MAN8DIR/lpadmin.$MAN8EXT man/lpadmin.$MAN8EXT f 0444 root sys $AMANDIR/man$MAN8DIR/lpc.$MAN8EXT man/lpc.$MAN8EXT f 0444 root sys $AMANDIR/man$MAN8DIR/lpinfo.$MAN8EXT man/lpinfo.$MAN8EXT f 0444 root sys $AMANDIR/man$MAN8DIR/lpmove.$MAN8EXT man/lpmove.$MAN8EXT l 0644 root sys $AMANDIR/man$MAN8DIR/reject.$MAN8EXT cupsaccept.$MAN8EXT %subpackage devel f 0444 root sys $MANDIR/man1/cups-config.$MAN1EXT man/cups-config.$MAN1EXT f 0444 root sys $MANDIR/man1/ man/ppd*.$MAN1EXT f 0444 root sys $MANDIR/man5/ppdcfile.$MAN5EXT man/ppdcfile.$MAN5EXT f 0444 root sys $MANDIR/man7/backend.$MAN7EXT man/backend.$MAN7EXT f 0444 root sys $MANDIR/man7/filter.$MAN7EXT man/filter.$MAN7EXT f 0444 root sys $MANDIR/man7/notifier.$MAN7EXT man/notifier.$MAN7EXT %subpackage lpd d 0755 root sys $AMANDIR/man$MAN8DIR - f 0444 root sys $AMANDIR/man$MAN8DIR/cups-lpd.$MAN8EXT man/cups-lpd.$MAN8EXT %subpackage # Startup scripts %system darwin f 0444 root sys /System/Library/LaunchDaemons/org.cups.cupsd.plist scheduler/org.cups.cupsd.plist %preremove <. # # Copyright 2007-2017 by Apple Inc. # Copyright 1999-2007 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # Conditional build options (--with name/--without name): # # dbus - Enable/disable DBUS support (default = enable) # dnssd - Enable/disable DNS-SD support (default = enable) # libusb1 - Enable/disable LIBUSB 1.0 support (default = enable) # static - Enable/disable static libraries (default = enable) # systemd - Enable/disable systemd support (default = enable) %{!?_with_dbus: %{!?_without_dbus: %define _with_dbus --with-dbus}} %{?_with_dbus: %define _dbus --enable-dbus} %{!?_with_dbus: %define _dbus --disable-dbus} %{!?_with_dnssd: %{!?_without_dnssd: %define _with_dnssd --with-dnssd}} %{?_with_dnssd: %define _dnssd --enable-avahi} %{!?_with_dnssd: %define _dnssd --disable-avahi} %{!?_with_libusb1: %{!?_without_libusb1: %define _with_libusb1 --with-libusb1}} %{?_with_libusb1: %define _libusb1 --enable-libusb} %{!?_with_libusb1: %define _libusb1 --disable-libusb} %{!?_with_static: %{!?_without_static: %define _without_static --without-static}} %{?_with_static: %define _static --enable-static} %{!?_with_static: %define _static --disable-static} %{!?_with_systemd: %{!?_without_systemd: %define _with_systemd --with-systemd}} %{?_with_systemd: %define _systemd --enable-systemd} %{!?_with_systemd: %define _systemd --disable-systemd} Summary: CUPS Name: cups Version: 2.2.7 Release: 0 Epoch: 1 License: GPL Group: System Environment/Daemons Source: https://github.com/apple/cups/releases/download/v2.2.7/cups-2.2.7-source.tar.gz Url: http://www.cups.org Packager: Anonymous Vendor: Example Corp # Package names are as defined for Red Hat (and clone) distributions BuildRequires: gnutls-devel, pam-devel %if %{?_with_dbus:1}%{!?_with_dbus:0} BuildRequires: dbus-devel %endif %if %{?_with_dnssd:1}%{!?_with_dnssd:0} BuildRequires: avahi-devel %endif %if %{?_with_libusb1:1}%{!?_with_libusb1:0} BuildRequires: libusb-devel >= 1.0 %endif %if %{?_with_systemd:1}%{!?_with_systemd:0} BuildRequires: systemd-devel %endif # Use buildroot so as not to disturb the version already installed BuildRoot: /tmp/%{name}-root # Dependencies... Requires: %{name}-libs = %{epoch}:%{version} Obsoletes: lpd, lpr, LPRng Provides: lpd, lpr, LPRng Obsoletes: cups-da, cups-de, cups-es, cups-et, cups-fi, cups-fr, cups-he Obsoletes: cups-id, cups-it, cups-ja, cups-ko, cups-nl, cups-no, cups-pl Obsoletes: cups-pt, cups-ru, cups-sv, cups-zh %package devel Summary: CUPS - development environment Group: Development/Libraries Requires: %{name}-libs = %{epoch}:%{version} %package libs Summary: CUPS - shared libraries Group: System Environment/Libraries Provides: libcups1 %package lpd Summary: CUPS - LPD support Group: System Environment/Daemons Requires: %{name} = %{epoch}:%{version} xinetd %description CUPS is the standards-based, open source printing system developed by Apple Inc. for macOS® and other UNIX®-like operating systems. %description devel This package provides the CUPS headers and development environment. %description libs This package provides the CUPS shared libraries. %description lpd This package provides LPD client support. %prep %setup %build CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_OPT_FLAGS" \ ./configure %{_dbus} %{_dnssd} %{_libusb1} %{_static} %{_systemd} # If we got this far, all prerequisite libraries must be here. make %install # Make sure the RPM_BUILD_ROOT directory exists. rm -rf $RPM_BUILD_ROOT make BUILDROOT=$RPM_BUILD_ROOT install rm -rf $RPM_BUILD_ROOT/usr/share/cups/banners $RPM_BUILD_ROOT/usr/share/cups/data %post %if %{?_with_systemd:1}%{!?_with_systemd:0} /bin/systemctl enable org.cups.cupsd.service if test $1 -ge 1; then /bin/systemctl stop org.cups.cupsd.service /bin/systemctl start org.cups.cupsd.service fi %else /sbin/chkconfig --add cups /sbin/chkconfig cups on # Restart cupsd if we are upgrading... if test $1 -gt 1; then /sbin/service cups stop /sbin/service cups start fi %endif %post libs /sbin/ldconfig %preun %if %{?_with_systemd:1}%{!?_with_systemd:0} if test $1 -ge 1; then /bin/systemctl stop org.cups.cupsd.service /bin/systemctl disable org.cups.cupsd.service fi %else if test $1 = 0; then /sbin/service cups stop /sbin/chkconfig --del cups fi %endif %postun %if %{?_with_systemd:1}%{!?_with_systemd:0} if test $1 -ge 1; then /bin/systemctl stop org.cups.cupsd.service /bin/systemctl start org.cups.cupsd.service fi %else if test $1 -ge 1; then /sbin/service cups stop /sbin/service cups start fi %endif %postun libs /sbin/ldconfig %clean rm -rf $RPM_BUILD_ROOT %files %docdir /usr/share/doc/cups %defattr(-,root,root) %dir /etc/cups %config(noreplace) /etc/cups/*.conf /etc/cups/cups-files.conf.default /etc/cups/cupsd.conf.default /etc/cups/snmp.conf.default %dir /etc/cups/ppd %attr(0700,root,root) %dir /etc/cups/ssl %if %{?_with_dbus:1}%{!?_with_dbus:0} # DBUS /etc/dbus-1/system.d/* %endif # PAM %dir /etc/pam.d /etc/pam.d/* %if %{?_with_systemd:1}%{!?_with_systemd:0} # SystemD /usr/lib/systemd/system/org.cups.cupsd.* %else # Legacy init support on Linux /etc/init.d/* /etc/rc0.d/* /etc/rc2.d/* /etc/rc3.d/* /etc/rc5.d/* %endif /usr/bin/cancel /usr/bin/cupstestdsc /usr/bin/cupstestppd /usr/bin/ipptool /usr/bin/lp* %dir /usr/lib/cups %dir /usr/lib/cups/backend %if %{?_with_dnssd:1}%{!?_with_dnssd:0} # DNS-SD /usr/bin/ippfind /usr/lib/cups/backend/dnssd %endif /usr/lib/cups/backend/http /usr/lib/cups/backend/https %attr(0700,root,root) /usr/lib/cups/backend/ipp /usr/lib/cups/backend/ipps %attr(0700,root,root) /usr/lib/cups/backend/lpd /usr/lib/cups/backend/snmp /usr/lib/cups/backend/socket /usr/lib/cups/backend/usb %dir /usr/lib/cups/cgi-bin /usr/lib/cups/cgi-bin/* %dir /usr/lib/cups/daemon /usr/lib/cups/daemon/cups-deviced /usr/lib/cups/daemon/cups-driverd /usr/lib/cups/daemon/cups-exec %dir /usr/lib/cups/driver %dir /usr/lib/cups/filter /usr/lib/cups/filter/* %dir /usr/lib/cups/monitor /usr/lib/cups/monitor/* %dir /usr/lib/cups/notifier /usr/lib/cups/notifier/* /usr/sbin/* %dir /usr/share/cups %dir /usr/share/cups/drv /usr/share/cups/drv/* %dir /usr/share/cups/ipptool /usr/share/cups/ipptool/* %dir /usr/share/cups/mime /usr/share/cups/mime/* %dir /usr/share/cups/model %dir /usr/share/cups/ppdc /usr/share/cups/ppdc/* %dir /usr/share/cups/templates /usr/share/cups/templates/* %if %{?_with_libusb1:1}%{!?_with_libusb1:0} # LIBUSB quirks files %dir /usr/share/cups/usb /usr/share/cups/usb/* %endif %dir /usr/share/doc/cups /usr/share/doc/cups/*.* %dir /usr/share/doc/cups/help /usr/share/doc/cups/help/accounting.html /usr/share/doc/cups/help/cgi.html /usr/share/doc/cups/help/encryption.html /usr/share/doc/cups/help/glossary.html /usr/share/doc/cups/help/kerberos.html /usr/share/doc/cups/help/license.html /usr/share/doc/cups/help/man-*.html /usr/share/doc/cups/help/network.html /usr/share/doc/cups/help/options.html /usr/share/doc/cups/help/overview.html /usr/share/doc/cups/help/policies.html /usr/share/doc/cups/help/ref-*.html /usr/share/doc/cups/help/security.html /usr/share/doc/cups/help/sharing.html /usr/share/doc/cups/help/translation.html %dir /usr/share/doc/cups/images /usr/share/doc/cups/images/* #%dir /usr/share/doc/cups/ca #/usr/share/doc/cups/ca/* #%dir /usr/share/doc/cups/cs #/usr/share/doc/cups/cs/* %dir /usr/share/doc/cups/de /usr/share/doc/cups/de/* %dir /usr/share/doc/cups/es /usr/share/doc/cups/es/* #%dir /usr/share/doc/cups/fr #/usr/share/doc/cups/fr/* %dir /usr/share/doc/cups/ja /usr/share/doc/cups/ja/* %dir /usr/share/doc/cups/pt_BR /usr/share/doc/cups/pt_BR/* %dir /usr/share/doc/cups/ru /usr/share/doc/cups/ru/* %dir /usr/share/locale/ca /usr/share/locale/ca/cups_ca.po %dir /usr/share/locale/cs /usr/share/locale/cs/cups_cs.po %dir /usr/share/locale/de /usr/share/locale/de/cups_de.po %dir /usr/share/locale/es /usr/share/locale/es/cups_es.po %dir /usr/share/locale/fr /usr/share/locale/fr/cups_fr.po %dir /usr/share/locale/it /usr/share/locale/it/cups_it.po %dir /usr/share/locale/ja /usr/share/locale/ja/cups_ja.po %dir /usr/share/locale/pt_BR /usr/share/locale/pt_BR/cups_pt_BR.po %dir /usr/share/locale/ru /usr/share/locale/ru/cups_ru.po %dir /usr/share/locale/zh_CN /usr/share/locale/zh_CN/cups_zh_CN.po %dir /usr/share/man/man1 /usr/share/man/man1/cancel.1.gz /usr/share/man/man1/cups.1.gz /usr/share/man/man1/cupstestdsc.1.gz /usr/share/man/man1/cupstestppd.1.gz %if %{?_with_dnssd:1}%{!?_with_dnssd:0} # DNS-SD /usr/share/man/man1/ippfind.1.gz %endif /usr/share/man/man1/ipptool.1.gz /usr/share/man/man1/lp.1.gz /usr/share/man/man1/lpoptions.1.gz /usr/share/man/man1/lpq.1.gz /usr/share/man/man1/lpr.1.gz /usr/share/man/man1/lprm.1.gz /usr/share/man/man1/lpstat.1.gz %dir /usr/share/man/man5 /usr/share/man/man5/*.conf.5.gz /usr/share/man/man5/cupsd-logs.5.gz /usr/share/man/man5/ipptoolfile.5.gz /usr/share/man/man5/mime.*.5.gz %dir /usr/share/man/man8 /usr/share/man/man8/accept.8.gz /usr/share/man/man8/cups-deviced.8.gz /usr/share/man/man8/cups-driverd.8.gz /usr/share/man/man8/cups-exec.8.gz /usr/share/man/man8/cups-snmp.8.gz /usr/share/man/man8/cupsaddsmb.8.gz /usr/share/man/man8/cupsaccept.8.gz /usr/share/man/man8/cupsctl.8.gz /usr/share/man/man8/cupsfilter.8.gz /usr/share/man/man8/cupsd.8.gz /usr/share/man/man8/cupsd-helper.8.gz /usr/share/man/man8/cupsdisable.8.gz /usr/share/man/man8/cupsenable.8.gz /usr/share/man/man8/cupsreject.8.gz /usr/share/man/man8/lpadmin.8.gz /usr/share/man/man8/lpc.8.gz /usr/share/man/man8/lpinfo.8.gz /usr/share/man/man8/lpmove.8.gz /usr/share/man/man8/reject.8.gz %dir /var/cache/cups %attr(0775,root,sys) %dir /var/cache/cups/rss %dir /var/log/cups %dir /var/run/cups %attr(0711,lp,sys) %dir /var/run/cups/certs %attr(0710,lp,sys) %dir /var/spool/cups %attr(1770,lp,sys) %dir /var/spool/cups/tmp # Desktop files /usr/share/applications/* /usr/share/icons/* %files devel %defattr(-,root,root) %dir /usr/share/cups/examples /usr/share/cups/examples/* %dir /usr/share/man/man1 /usr/share/man/man1/cups-config.1.gz /usr/share/man/man1/ppd*.1.gz %dir /usr/share/man/man5 /usr/share/man/man5/ppdcfile.5.gz /usr/share/man/man7/backend.7.gz /usr/share/man/man7/filter.7.gz /usr/share/man/man7/notifier.7.gz /usr/bin/cups-config /usr/bin/ppd* %dir /usr/include/cups /usr/include/cups/* /usr/lib*/*.so %if %{?_with_static:1}%{!?_with_static:0} /usr/lib*/*.a %endif %dir /usr/share/doc/cups/help /usr/share/doc/cups/help/api*.html /usr/share/doc/cups/help/cupspm.html /usr/share/doc/cups/help/postscript-driver.html /usr/share/doc/cups/help/ppd-compiler.html /usr/share/doc/cups/help/raster-driver.html /usr/share/doc/cups/help/spec*.html %files libs %defattr(-,root,root) /usr/lib*/*.so.* %files lpd %defattr(-,root,root) %if %{?_with_systemd:1}%{!?_with_systemd:0} # SystemD /usr/lib/systemd/system/org.cups.cups-lpd* %else # Legacy xinetd /etc/xinetd.d/cups-lpd %endif %dir /usr/lib/cups %dir /usr/lib/cups/daemon /usr/lib/cups/daemon/cups-lpd %dir /usr/share/man/man8 /usr/share/man/man8/cups-lpd.8.gz cups-2.2.7/packaging/cups.spec.in000664 000765 000024 00000026344 13255074424 017343 0ustar00msweetstaff000000 000000 # # RPM "spec" file for CUPS. # # Original version by Jason McMullan . # # Copyright 2007-2017 by Apple Inc. # Copyright 1999-2007 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # Conditional build options (--with name/--without name): # # dbus - Enable/disable DBUS support (default = enable) # dnssd - Enable/disable DNS-SD support (default = enable) # libusb1 - Enable/disable LIBUSB 1.0 support (default = enable) # static - Enable/disable static libraries (default = enable) # systemd - Enable/disable systemd support (default = enable) %{!?_with_dbus: %{!?_without_dbus: %define _with_dbus --with-dbus}} %{?_with_dbus: %define _dbus --enable-dbus} %{!?_with_dbus: %define _dbus --disable-dbus} %{!?_with_dnssd: %{!?_without_dnssd: %define _with_dnssd --with-dnssd}} %{?_with_dnssd: %define _dnssd --enable-avahi} %{!?_with_dnssd: %define _dnssd --disable-avahi} %{!?_with_libusb1: %{!?_without_libusb1: %define _with_libusb1 --with-libusb1}} %{?_with_libusb1: %define _libusb1 --enable-libusb} %{!?_with_libusb1: %define _libusb1 --disable-libusb} %{!?_with_static: %{!?_without_static: %define _without_static --without-static}} %{?_with_static: %define _static --enable-static} %{!?_with_static: %define _static --disable-static} %{!?_with_systemd: %{!?_without_systemd: %define _with_systemd --with-systemd}} %{?_with_systemd: %define _systemd --enable-systemd} %{!?_with_systemd: %define _systemd --disable-systemd} Summary: CUPS Name: cups Version: @CUPS_VERSION@ Release: 0 Epoch: 1 License: GPL Group: System Environment/Daemons Source: https://github.com/apple/cups/releases/download/v%{version}/cups-%{version}-source.tar.gz Url: http://www.cups.org Packager: Anonymous Vendor: Example Corp # Package names are as defined for Red Hat (and clone) distributions BuildRequires: gnutls-devel, pam-devel %if %{?_with_dbus:1}%{!?_with_dbus:0} BuildRequires: dbus-devel %endif %if %{?_with_dnssd:1}%{!?_with_dnssd:0} BuildRequires: avahi-devel %endif %if %{?_with_libusb1:1}%{!?_with_libusb1:0} BuildRequires: libusb-devel >= 1.0 %endif %if %{?_with_systemd:1}%{!?_with_systemd:0} BuildRequires: systemd-devel %endif # Use buildroot so as not to disturb the version already installed BuildRoot: /tmp/%{name}-root # Dependencies... Requires: %{name}-libs = %{epoch}:%{version} Obsoletes: lpd, lpr, LPRng Provides: lpd, lpr, LPRng Obsoletes: cups-da, cups-de, cups-es, cups-et, cups-fi, cups-fr, cups-he Obsoletes: cups-id, cups-it, cups-ja, cups-ko, cups-nl, cups-no, cups-pl Obsoletes: cups-pt, cups-ru, cups-sv, cups-zh %package devel Summary: CUPS - development environment Group: Development/Libraries Requires: %{name}-libs = %{epoch}:%{version} %package libs Summary: CUPS - shared libraries Group: System Environment/Libraries Provides: libcups1 %package lpd Summary: CUPS - LPD support Group: System Environment/Daemons Requires: %{name} = %{epoch}:%{version} xinetd %description CUPS is the standards-based, open source printing system developed by Apple Inc. for macOS® and other UNIX®-like operating systems. %description devel This package provides the CUPS headers and development environment. %description libs This package provides the CUPS shared libraries. %description lpd This package provides LPD client support. %prep %setup %build CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_OPT_FLAGS" \ ./configure %{_dbus} %{_dnssd} %{_libusb1} %{_static} %{_systemd} # If we got this far, all prerequisite libraries must be here. make %install # Make sure the RPM_BUILD_ROOT directory exists. rm -rf $RPM_BUILD_ROOT make BUILDROOT=$RPM_BUILD_ROOT install rm -rf $RPM_BUILD_ROOT/usr/share/cups/banners $RPM_BUILD_ROOT/usr/share/cups/data %post %if %{?_with_systemd:1}%{!?_with_systemd:0} /bin/systemctl enable org.cups.cupsd.service if test $1 -ge 1; then /bin/systemctl stop org.cups.cupsd.service /bin/systemctl start org.cups.cupsd.service fi %else /sbin/chkconfig --add cups /sbin/chkconfig cups on # Restart cupsd if we are upgrading... if test $1 -gt 1; then /sbin/service cups stop /sbin/service cups start fi %endif %post libs /sbin/ldconfig %preun %if %{?_with_systemd:1}%{!?_with_systemd:0} if test $1 -ge 1; then /bin/systemctl stop org.cups.cupsd.service /bin/systemctl disable org.cups.cupsd.service fi %else if test $1 = 0; then /sbin/service cups stop /sbin/chkconfig --del cups fi %endif %postun %if %{?_with_systemd:1}%{!?_with_systemd:0} if test $1 -ge 1; then /bin/systemctl stop org.cups.cupsd.service /bin/systemctl start org.cups.cupsd.service fi %else if test $1 -ge 1; then /sbin/service cups stop /sbin/service cups start fi %endif %postun libs /sbin/ldconfig %clean rm -rf $RPM_BUILD_ROOT %files %docdir /usr/share/doc/cups %defattr(-,root,root) %dir /etc/cups %config(noreplace) /etc/cups/*.conf /etc/cups/cups-files.conf.default /etc/cups/cupsd.conf.default /etc/cups/snmp.conf.default %dir /etc/cups/ppd %attr(0700,root,root) %dir /etc/cups/ssl %if %{?_with_dbus:1}%{!?_with_dbus:0} # DBUS /etc/dbus-1/system.d/* %endif # PAM %dir /etc/pam.d /etc/pam.d/* %if %{?_with_systemd:1}%{!?_with_systemd:0} # SystemD /usr/lib/systemd/system/org.cups.cupsd.* %else # Legacy init support on Linux /etc/init.d/* /etc/rc0.d/* /etc/rc2.d/* /etc/rc3.d/* /etc/rc5.d/* %endif /usr/bin/cancel /usr/bin/cupstestdsc /usr/bin/cupstestppd /usr/bin/ipptool /usr/bin/lp* %dir /usr/lib/cups %dir /usr/lib/cups/backend %if %{?_with_dnssd:1}%{!?_with_dnssd:0} # DNS-SD /usr/bin/ippfind /usr/lib/cups/backend/dnssd %endif /usr/lib/cups/backend/http /usr/lib/cups/backend/https %attr(0700,root,root) /usr/lib/cups/backend/ipp /usr/lib/cups/backend/ipps %attr(0700,root,root) /usr/lib/cups/backend/lpd /usr/lib/cups/backend/snmp /usr/lib/cups/backend/socket /usr/lib/cups/backend/usb %dir /usr/lib/cups/cgi-bin /usr/lib/cups/cgi-bin/* %dir /usr/lib/cups/daemon /usr/lib/cups/daemon/cups-deviced /usr/lib/cups/daemon/cups-driverd /usr/lib/cups/daemon/cups-exec %dir /usr/lib/cups/driver %dir /usr/lib/cups/filter /usr/lib/cups/filter/* %dir /usr/lib/cups/monitor /usr/lib/cups/monitor/* %dir /usr/lib/cups/notifier /usr/lib/cups/notifier/* /usr/sbin/* %dir /usr/share/cups %dir /usr/share/cups/drv /usr/share/cups/drv/* %dir /usr/share/cups/ipptool /usr/share/cups/ipptool/* %dir /usr/share/cups/mime /usr/share/cups/mime/* %dir /usr/share/cups/model %dir /usr/share/cups/ppdc /usr/share/cups/ppdc/* %dir /usr/share/cups/templates /usr/share/cups/templates/* %if %{?_with_libusb1:1}%{!?_with_libusb1:0} # LIBUSB quirks files %dir /usr/share/cups/usb /usr/share/cups/usb/* %endif %dir /usr/share/doc/cups /usr/share/doc/cups/*.* %dir /usr/share/doc/cups/help /usr/share/doc/cups/help/accounting.html /usr/share/doc/cups/help/cgi.html /usr/share/doc/cups/help/encryption.html /usr/share/doc/cups/help/glossary.html /usr/share/doc/cups/help/kerberos.html /usr/share/doc/cups/help/license.html /usr/share/doc/cups/help/man-*.html /usr/share/doc/cups/help/network.html /usr/share/doc/cups/help/options.html /usr/share/doc/cups/help/overview.html /usr/share/doc/cups/help/policies.html /usr/share/doc/cups/help/ref-*.html /usr/share/doc/cups/help/security.html /usr/share/doc/cups/help/sharing.html /usr/share/doc/cups/help/translation.html %dir /usr/share/doc/cups/images /usr/share/doc/cups/images/* #%dir /usr/share/doc/cups/ca #/usr/share/doc/cups/ca/* #%dir /usr/share/doc/cups/cs #/usr/share/doc/cups/cs/* %dir /usr/share/doc/cups/de /usr/share/doc/cups/de/* %dir /usr/share/doc/cups/es /usr/share/doc/cups/es/* #%dir /usr/share/doc/cups/fr #/usr/share/doc/cups/fr/* %dir /usr/share/doc/cups/ja /usr/share/doc/cups/ja/* %dir /usr/share/doc/cups/pt_BR /usr/share/doc/cups/pt_BR/* %dir /usr/share/doc/cups/ru /usr/share/doc/cups/ru/* %dir /usr/share/locale/ca /usr/share/locale/ca/cups_ca.po %dir /usr/share/locale/cs /usr/share/locale/cs/cups_cs.po %dir /usr/share/locale/de /usr/share/locale/de/cups_de.po %dir /usr/share/locale/es /usr/share/locale/es/cups_es.po %dir /usr/share/locale/fr /usr/share/locale/fr/cups_fr.po %dir /usr/share/locale/it /usr/share/locale/it/cups_it.po %dir /usr/share/locale/ja /usr/share/locale/ja/cups_ja.po %dir /usr/share/locale/pt_BR /usr/share/locale/pt_BR/cups_pt_BR.po %dir /usr/share/locale/ru /usr/share/locale/ru/cups_ru.po %dir /usr/share/locale/zh_CN /usr/share/locale/zh_CN/cups_zh_CN.po %dir /usr/share/man/man1 /usr/share/man/man1/cancel.1.gz /usr/share/man/man1/cups.1.gz /usr/share/man/man1/cupstestdsc.1.gz /usr/share/man/man1/cupstestppd.1.gz %if %{?_with_dnssd:1}%{!?_with_dnssd:0} # DNS-SD /usr/share/man/man1/ippfind.1.gz %endif /usr/share/man/man1/ipptool.1.gz /usr/share/man/man1/lp.1.gz /usr/share/man/man1/lpoptions.1.gz /usr/share/man/man1/lpq.1.gz /usr/share/man/man1/lpr.1.gz /usr/share/man/man1/lprm.1.gz /usr/share/man/man1/lpstat.1.gz %dir /usr/share/man/man5 /usr/share/man/man5/*.conf.5.gz /usr/share/man/man5/cupsd-logs.5.gz /usr/share/man/man5/ipptoolfile.5.gz /usr/share/man/man5/mime.*.5.gz %dir /usr/share/man/man8 /usr/share/man/man8/accept.8.gz /usr/share/man/man8/cups-deviced.8.gz /usr/share/man/man8/cups-driverd.8.gz /usr/share/man/man8/cups-exec.8.gz /usr/share/man/man8/cups-snmp.8.gz /usr/share/man/man8/cupsaddsmb.8.gz /usr/share/man/man8/cupsaccept.8.gz /usr/share/man/man8/cupsctl.8.gz /usr/share/man/man8/cupsfilter.8.gz /usr/share/man/man8/cupsd.8.gz /usr/share/man/man8/cupsd-helper.8.gz /usr/share/man/man8/cupsdisable.8.gz /usr/share/man/man8/cupsenable.8.gz /usr/share/man/man8/cupsreject.8.gz /usr/share/man/man8/lpadmin.8.gz /usr/share/man/man8/lpc.8.gz /usr/share/man/man8/lpinfo.8.gz /usr/share/man/man8/lpmove.8.gz /usr/share/man/man8/reject.8.gz %dir /var/cache/cups %attr(0775,root,sys) %dir /var/cache/cups/rss %dir /var/log/cups %dir /var/run/cups %attr(0711,lp,sys) %dir /var/run/cups/certs %attr(0710,lp,sys) %dir /var/spool/cups %attr(1770,lp,sys) %dir /var/spool/cups/tmp # Desktop files /usr/share/applications/* /usr/share/icons/* %files devel %defattr(-,root,root) %dir /usr/share/cups/examples /usr/share/cups/examples/* %dir /usr/share/man/man1 /usr/share/man/man1/cups-config.1.gz /usr/share/man/man1/ppd*.1.gz %dir /usr/share/man/man5 /usr/share/man/man5/ppdcfile.5.gz /usr/share/man/man7/backend.7.gz /usr/share/man/man7/filter.7.gz /usr/share/man/man7/notifier.7.gz /usr/bin/cups-config /usr/bin/ppd* %dir /usr/include/cups /usr/include/cups/* /usr/lib*/*.so %if %{?_with_static:1}%{!?_with_static:0} /usr/lib*/*.a %endif %dir /usr/share/doc/cups/help /usr/share/doc/cups/help/api*.html /usr/share/doc/cups/help/cupspm.html /usr/share/doc/cups/help/postscript-driver.html /usr/share/doc/cups/help/ppd-compiler.html /usr/share/doc/cups/help/raster-driver.html /usr/share/doc/cups/help/spec*.html %files libs %defattr(-,root,root) /usr/lib*/*.so.* %files lpd %defattr(-,root,root) %if %{?_with_systemd:1}%{!?_with_systemd:0} # SystemD /usr/lib/systemd/system/org.cups.cups-lpd* %else # Legacy xinetd /etc/xinetd.d/cups-lpd %endif %dir /usr/lib/cups %dir /usr/lib/cups/daemon /usr/lib/cups/daemon/cups-lpd %dir /usr/share/man/man8 /usr/share/man/man8/cups-lpd.8.gz cups-2.2.7/notifier/dbus.c000664 000765 000024 00000040250 13255074424 016074 0ustar00msweetstaff000000 000000 /* * D-Bus notifier for CUPS. * * Copyright 2008-2014 by Apple Inc. * Copyright (C) 2011, 2013 Red Hat, Inc. * Copyright (C) 2007 Tim Waugh * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include #include #include #include #include #ifdef HAVE_DBUS # include # ifdef HAVE_DBUS_MESSAGE_ITER_INIT_APPEND # define dbus_message_append_iter_init dbus_message_iter_init_append # define dbus_message_iter_append_string(i,v) dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, v) # define dbus_message_iter_append_uint32(i,v) dbus_message_iter_append_basic(i, DBUS_TYPE_UINT32, v) # define dbus_message_iter_append_boolean(i,v) dbus_message_iter_append_basic(i, DBUS_TYPE_BOOLEAN, v) # endif /* HAVE_DBUS_MESSAGE_ITER_INIT_APPEND */ /* * D-Bus object: org.cups.cupsd.Notifier * D-Bus object path: /org/cups/cupsd/Notifier * * D-Bus interface name: org.cups.cupsd.Notifier * * Signals: * * ServerRestarted(STRING text) * Server has restarted. * * ServerStarted(STRING text) * Server has started. * * ServerStopped(STRING text) * Server has stopped. * * ServerAudit(STRING text) * Security-related event. * * PrinterRestarted(STRING text, * STRING printer-uri, * STRING printer-name, * UINT32 printer-state, * STRING printer-state-reasons, * BOOLEAN printer-is-accepting-jobs) * Printer has restarted. * * PrinterShutdown(STRING text, * STRING printer-uri, * STRING printer-name, * UINT32 printer-state, * STRING printer-state-reasons, * BOOLEAN printer-is-accepting-jobs) * Printer has shutdown. * * PrinterStopped(STRING text, * STRING printer-uri, * STRING printer-name, * UINT32 printer-state, * STRING printer-state-reasons, * BOOLEAN printer-is-accepting-jobs) * Printer has stopped. * * PrinterStateChanged(STRING text, * STRING printer-uri, * STRING printer-name, * UINT32 printer-state, * STRING printer-state-reasons, * BOOLEAN printer-is-accepting-jobs) * Printer state has changed. * * PrinterFinishingsChanged(STRING text, * STRING printer-uri, * STRING printer-name, * UINT32 printer-state, * STRING printer-state-reasons, * BOOLEAN printer-is-accepting-jobs) * Printer's finishings-supported attribute has changed. * * PrinterMediaChanged(STRING text, * STRING printer-uri, * STRING printer-name, * UINT32 printer-state, * STRING printer-state-reasons, * BOOLEAN printer-is-accepting-jobs) * Printer's media-supported attribute has changed. * * PrinterAdded(STRING text, * STRING printer-uri, * STRING printer-name, * UINT32 printer-state, * STRING printer-state-reasons, * BOOLEAN printer-is-accepting-jobs) * Printer has been added. * * PrinterDeleted(STRING text, * STRING printer-uri, * STRING printer-name, * UINT32 printer-state, * STRING printer-state-reasons, * BOOLEAN printer-is-accepting-jobs) * Printer has been deleted. * * PrinterModified(STRING text, * STRING printer-uri, * STRING printer-name, * UINT32 printer-state, * STRING printer-state-reasons, * BOOLEAN printer-is-accepting-jobs) * Printer has been modified. * * text describes the event. * printer-state-reasons is a comma-separated list. * If printer-uri is "" in a Job* signal, the other printer-* parameters * must be ignored. * If the job name is not know, job-name will be "". */ /* * Constants... */ enum { PARAMS_NONE, PARAMS_PRINTER, PARAMS_JOB }; /* * Global variables... */ static char lock_filename[1024]; /* Lock filename */ /* * Local functions... */ static int acquire_lock(int *fd, char *lockfile, size_t locksize); static void release_lock(void); /* * 'main()' - Read events and send DBUS notifications. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { ipp_t *msg; /* Event message from scheduler */ ipp_state_t state; /* IPP event state */ struct sigaction action; /* POSIX sigaction data */ DBusConnection *con = NULL; /* Connection to DBUS server */ DBusError error; /* Error, if any */ DBusMessage *message; /* Message to send */ DBusMessageIter iter; /* Iterator for message data */ int lock_fd = -1; /* Lock file descriptor */ /* * Don't buffer stderr... */ setbuf(stderr, NULL); /* * Ignore SIGPIPE signals... */ memset(&action, 0, sizeof(action)); action.sa_handler = SIG_IGN; sigaction(SIGPIPE, &action, NULL); /* * Validate command-line options... */ if (argc != 3) { fputs("Usage: dbus dbus:/// notify-user-data\n", stderr); return (1); } if (strncmp(argv[1], "dbus:", 5)) { fprintf(stderr, "ERROR: Bad URI \"%s\"!\n", argv[1]); return (1); } /* * Loop forever until we run out of events... */ for (;;) { ipp_attribute_t *attr; /* Current attribute */ const char *event; /* Event name */ const char *signame = NULL;/* DBUS signal name */ char *printer_reasons = NULL; /* Printer reasons string */ char *job_reasons = NULL; /* Job reasons string */ const char *nul = ""; /* Empty string value */ int no = 0; /* Boolean "no" value */ int params = PARAMS_NONE; /* What parameters to include? */ /* * Get the next event... */ msg = ippNew(); while ((state = ippReadFile(0, msg)) != IPP_DATA) { if (state <= IPP_IDLE) break; } fprintf(stderr, "DEBUG: state=%d\n", state); if (state == IPP_ERROR) fputs("DEBUG: ippReadFile() returned IPP_ERROR!\n", stderr); if (state <= IPP_IDLE) { /* * Out of messages, free memory and then exit... */ ippDelete(msg); break; } /* * Verify connection to DBUS server... */ if (con && !dbus_connection_get_is_connected(con)) { dbus_connection_unref(con); con = NULL; } if (!con) { dbus_error_init(&error); con = dbus_bus_get(DBUS_BUS_SYSTEM, &error); if (!con) dbus_error_free(&error); else fputs("DEBUG: Connected to D-BUS\n", stderr); } if (!con) continue; if (lock_fd == -1 && acquire_lock(&lock_fd, lock_filename, sizeof(lock_filename))) continue; attr = ippFindAttribute(msg, "notify-subscribed-event", IPP_TAG_KEYWORD); if (!attr) continue; event = ippGetString(attr, 0, NULL); if (!strncmp(event, "server-", 7)) { const char *word2 = event + 7; /* Second word */ if (!strcmp(word2, "restarted")) signame = "ServerRestarted"; else if (!strcmp(word2, "started")) signame = "ServerStarted"; else if (!strcmp(word2, "stopped")) signame = "ServerStopped"; else if (!strcmp(word2, "audit")) signame = "ServerAudit"; else continue; } else if (!strncmp(event, "printer-", 8)) { const char *word2 = event + 8; /* Second word */ params = PARAMS_PRINTER; if (!strcmp(word2, "restarted")) signame = "PrinterRestarted"; else if (!strcmp(word2, "shutdown")) signame = "PrinterShutdown"; else if (!strcmp(word2, "stopped")) signame = "PrinterStopped"; else if (!strcmp(word2, "state-changed")) signame = "PrinterStateChanged"; else if (!strcmp(word2, "finishings-changed")) signame = "PrinterFinishingsChanged"; else if (!strcmp(word2, "media-changed")) signame = "PrinterMediaChanged"; else if (!strcmp(word2, "added")) signame = "PrinterAdded"; else if (!strcmp(word2, "deleted")) signame = "PrinterDeleted"; else if (!strcmp(word2, "modified")) signame = "PrinterModified"; else continue; } else if (!strncmp(event, "job-", 4)) { const char *word2 = event + 4; /* Second word */ params = PARAMS_JOB; if (!strcmp(word2, "state-changed")) signame = "JobState"; else if (!strcmp(word2, "created")) signame = "JobCreated"; else if (!strcmp(word2, "completed")) signame = "JobCompleted"; else if (!strcmp(word2, "stopped")) signame = "JobStopped"; else if (!strcmp(word2, "config-changed")) signame = "JobConfigChanged"; else if (!strcmp(word2, "progress")) signame = "JobProgress"; else continue; } else continue; /* * Create and send the new message... */ fprintf(stderr, "DEBUG: %s\n", signame); message = dbus_message_new_signal("/org/cups/cupsd/Notifier", "org.cups.cupsd.Notifier", signame); dbus_message_append_iter_init(message, &iter); attr = ippFindAttribute(msg, "notify-text", IPP_TAG_TEXT); if (attr) { const char *val = ippGetString(attr, 0, NULL); if (!dbus_message_iter_append_string(&iter, &val)) goto bail; } else goto bail; if (params >= PARAMS_PRINTER) { char *p; /* Pointer into printer_reasons */ size_t reasons_length; /* Required size of printer_reasons */ int i; /* Looping var */ int have_printer_params = 1;/* Do we have printer URI? */ /* STRING printer-uri or "" */ attr = ippFindAttribute(msg, "notify-printer-uri", IPP_TAG_URI); if (attr) { const char *val = ippGetString(attr, 0, NULL); if (!dbus_message_iter_append_string(&iter, &val)) goto bail; } else { have_printer_params = 0; dbus_message_iter_append_string(&iter, &nul); } /* STRING printer-name */ if (have_printer_params) { attr = ippFindAttribute(msg, "printer-name", IPP_TAG_NAME); if (attr) { const char *val = ippGetString(attr, 0, NULL); if (!dbus_message_iter_append_string(&iter, &val)) goto bail; } else goto bail; } else dbus_message_iter_append_string(&iter, &nul); /* UINT32 printer-state */ if (have_printer_params) { attr = ippFindAttribute(msg, "printer-state", IPP_TAG_ENUM); if (attr) { dbus_uint32_t val = (dbus_uint32_t)ippGetInteger(attr, 0); dbus_message_iter_append_uint32(&iter, &val); } else goto bail; } else dbus_message_iter_append_uint32(&iter, &no); /* STRING printer-state-reasons */ if (have_printer_params) { attr = ippFindAttribute(msg, "printer-state-reasons", IPP_TAG_KEYWORD); if (attr) { int num_values = ippGetCount(attr); for (reasons_length = 0, i = 0; i < num_values; i++) /* All need commas except the last, which needs a nul byte. */ reasons_length += 1 + strlen(ippGetString(attr, i, NULL)); printer_reasons = malloc(reasons_length); if (!printer_reasons) goto bail; p = printer_reasons; for (i = 0; i < num_values; i++) { if (i) *p++ = ','; strlcpy(p, ippGetString(attr, i, NULL), reasons_length - (size_t)(p - printer_reasons)); p += strlen(p); } if (!dbus_message_iter_append_string(&iter, &printer_reasons)) goto bail; } else goto bail; } else dbus_message_iter_append_string(&iter, &nul); /* BOOL printer-is-accepting-jobs */ if (have_printer_params) { attr = ippFindAttribute(msg, "printer-is-accepting-jobs", IPP_TAG_BOOLEAN); if (attr) { dbus_bool_t val = (dbus_bool_t)ippGetBoolean(attr, 0); dbus_message_iter_append_boolean(&iter, &val); } else goto bail; } else dbus_message_iter_append_boolean(&iter, &no); } if (params >= PARAMS_JOB) { char *p; /* Pointer into job_reasons */ size_t reasons_length; /* Required size of job_reasons */ int i; /* Looping var */ /* UINT32 job-id */ attr = ippFindAttribute(msg, "notify-job-id", IPP_TAG_INTEGER); if (attr) { dbus_uint32_t val = (dbus_uint32_t)ippGetInteger(attr, 0); dbus_message_iter_append_uint32(&iter, &val); } else goto bail; /* UINT32 job-state */ attr = ippFindAttribute(msg, "job-state", IPP_TAG_ENUM); if (attr) { dbus_uint32_t val = (dbus_uint32_t)ippGetInteger(attr, 0); dbus_message_iter_append_uint32(&iter, &val); } else goto bail; /* STRING job-state-reasons */ attr = ippFindAttribute(msg, "job-state-reasons", IPP_TAG_KEYWORD); if (attr) { int num_values = ippGetCount(attr); for (reasons_length = 0, i = 0; i < num_values; i++) /* All need commas except the last, which needs a nul byte. */ reasons_length += 1 + strlen(ippGetString(attr, i, NULL)); job_reasons = malloc(reasons_length); if (!job_reasons) goto bail; p = job_reasons; for (i = 0; i < num_values; i++) { if (i) *p++ = ','; strlcpy(p, ippGetString(attr, i, NULL), reasons_length - (size_t)(p - job_reasons)); p += strlen(p); } if (!dbus_message_iter_append_string(&iter, &job_reasons)) goto bail; } else goto bail; /* STRING job-name or "" */ attr = ippFindAttribute(msg, "job-name", IPP_TAG_NAME); if (attr) { const char *val = ippGetString(attr, 0, NULL); if (!dbus_message_iter_append_string(&iter, &val)) goto bail; } else dbus_message_iter_append_string(&iter, &nul); /* UINT32 job-impressions-completed */ attr = ippFindAttribute(msg, "job-impressions-completed", IPP_TAG_INTEGER); if (attr) { dbus_uint32_t val = (dbus_uint32_t)ippGetInteger(attr, 0); dbus_message_iter_append_uint32(&iter, &val); } else goto bail; } dbus_connection_send(con, message, NULL); dbus_connection_flush(con); /* * Cleanup... */ bail: dbus_message_unref(message); if (printer_reasons) free(printer_reasons); if (job_reasons) free(job_reasons); ippDelete(msg); } /* * Remove lock file... */ if (lock_fd >= 0) { close(lock_fd); release_lock(); } return (0); } /* * 'release_lock()' - Release the singleton lock. */ static void release_lock(void) { unlink(lock_filename); } /* * 'handle_sigterm()' - Handle SIGTERM signal. */ static void handle_sigterm(int signum) { release_lock(); _exit(0); } /* * 'acquire_lock()' - Acquire a lock so we only have a single notifier running. */ static int /* O - 0 on success, -1 on failure */ acquire_lock(int *fd, /* O - Lock file descriptor */ char *lockfile, /* I - Lock filename buffer */ size_t locksize) /* I - Size of filename buffer */ { const char *tmpdir; /* Temporary directory */ struct sigaction action; /* POSIX sigaction data */ /* * Figure out where to put the lock file... */ if ((tmpdir = getenv("TMPDIR")) == NULL) tmpdir = "/tmp"; snprintf(lockfile, locksize, "%s/cups-dbus-notifier-lockfile", tmpdir); /* * Create the lock file and fail if it already exists... */ if ((*fd = open(lockfile, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR)) < 0) return (-1); /* * Set a SIGTERM handler to make sure we release the lock if the * scheduler decides to stop us. */ memset(&action, 0, sizeof(action)); action.sa_handler = handle_sigterm; sigaction(SIGTERM, &action, NULL); return (0); } #else /* !HAVE_DBUS */ int main(void) { return (1); } #endif /* HAVE_DBUS */ cups-2.2.7/notifier/Dependencies000664 000765 000024 00000002414 13255074424 017304 0ustar00msweetstaff000000 000000 dbus.o: dbus.c ../cups/cups.h ../cups/file.h ../cups/versioning.h \ ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h \ ../cups/pwg.h ../cups/string-private.h ../config.h mailto.o: mailto.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h rss.o: rss.c ../cups/cups.h ../cups/file.h ../cups/versioning.h \ ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h \ ../cups/pwg.h ../cups/string-private.h ../config.h \ ../cups/ipp-private.h testnotify.o: testnotify.c ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h cups-2.2.7/notifier/mailto.c000664 000765 000024 00000033421 13255074424 016426 0ustar00msweetstaff000000 000000 /* * "mailto" notifier for CUPS. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include /* * Globals... */ char mailtoCc[1024]; /* Cc email address */ char mailtoFrom[1024]; /* From email address */ char mailtoReplyTo[1024]; /* Reply-To email address */ char mailtoSubject[1024]; /* Subject prefix */ char mailtoSMTPServer[1024]; /* SMTP server to use */ char mailtoSendmail[1024]; /* Sendmail program to use */ /* * Local functions... */ void email_message(const char *to, const char *subject, const char *text); int load_configuration(void); cups_file_t *pipe_sendmail(const char *to); void print_attributes(ipp_t *ipp, int indent); /* * 'main()' - Main entry for the mailto notifier. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ ipp_t *msg; /* Event message from scheduler */ ipp_state_t state; /* IPP event state */ char *subject, /* Subject for notification message */ *text; /* Text for notification message */ cups_lang_t *lang; /* Language info */ char temp[1024]; /* Temporary string */ int templen; /* Length of temporary string */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* POSIX sigaction data */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ /* * Don't buffer stderr... */ setbuf(stderr, NULL); /* * Ignore SIGPIPE signals... */ #ifdef HAVE_SIGSET sigset(SIGPIPE, SIG_IGN); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); action.sa_handler = SIG_IGN; sigaction(SIGPIPE, &action, NULL); #else signal(SIGPIPE, SIG_IGN); #endif /* HAVE_SIGSET */ /* * Validate command-line options... */ if (argc != 3) { fputs("Usage: mailto mailto:user@domain.com notify-user-data\n", stderr); return (1); } if (strncmp(argv[1], "mailto:", 7)) { fprintf(stderr, "ERROR: Bad recipient \"%s\"!\n", argv[1]); return (1); } fprintf(stderr, "DEBUG: argc=%d\n", argc); for (i = 0; i < argc; i ++) fprintf(stderr, "DEBUG: argv[%d]=\"%s\"\n", i, argv[i]); /* * Load configuration data... */ if ((lang = cupsLangDefault()) == NULL) return (1); if (!load_configuration()) return (1); /* * Get the reply-to address... */ templen = sizeof(temp); httpDecode64_2(temp, &templen, argv[2]); if (!strncmp(temp, "mailto:", 7)) strlcpy(mailtoReplyTo, temp + 7, sizeof(mailtoReplyTo)); else if (temp[0]) fprintf(stderr, "WARNING: Bad notify-user-data value (%d bytes) ignored!\n", templen); /* * Loop forever until we run out of events... */ for (;;) { /* * Get the next event... */ msg = ippNew(); while ((state = ippReadFile(0, msg)) != IPP_DATA) { if (state <= IPP_IDLE) break; } fprintf(stderr, "DEBUG: state=%d\n", state); if (state == IPP_ERROR) fputs("DEBUG: ippReadFile() returned IPP_ERROR!\n", stderr); if (state <= IPP_IDLE) { /* * Out of messages, free memory and then exit... */ ippDelete(msg); return (0); } /* * Get the subject and text for the message, then email it... */ subject = cupsNotifySubject(lang, msg); text = cupsNotifyText(lang, msg); fprintf(stderr, "DEBUG: subject=\"%s\"\n", subject); fprintf(stderr, "DEBUG: text=\"%s\"\n", text); if (subject && text) email_message(argv[1] + 7, subject, text); else { fputs("ERROR: Missing attributes in event notification!\n", stderr); print_attributes(msg, 4); } /* * Free the memory used for this event... */ if (subject) free(subject); if (text) free(text); ippDelete(msg); } } /* * 'email_message()' - Email a notification message. */ void email_message(const char *to, /* I - Recipient of message */ const char *subject, /* I - Subject of message */ const char *text) /* I - Text of message */ { cups_file_t *fp; /* Pipe/socket to mail server */ const char *nl; /* Newline to use */ char response[1024]; /* SMTP response buffer */ /* * Connect to the mail server... */ if (mailtoSendmail[0]) { /* * Use the sendmail command... */ fp = pipe_sendmail(to); if (!fp) return; nl = "\n"; } else { /* * Use an SMTP server... */ char hostbuf[1024]; /* Local hostname */ if (strchr(mailtoSMTPServer, ':')) fp = cupsFileOpen(mailtoSMTPServer, "s"); else { char spec[1024]; /* Host:service spec */ snprintf(spec, sizeof(spec), "%s:smtp", mailtoSMTPServer); fp = cupsFileOpen(spec, "s"); } if (!fp) { fprintf(stderr, "ERROR: Unable to connect to SMTP server \"%s\"!\n", mailtoSMTPServer); return; } fprintf(stderr, "DEBUG: Connected to \"%s\"...\n", mailtoSMTPServer); cupsFilePrintf(fp, "HELO %s\r\n", httpGetHostname(NULL, hostbuf, sizeof(hostbuf))); fprintf(stderr, "DEBUG: >>> HELO %s\n", hostbuf); if (!cupsFileGets(fp, response, sizeof(response)) || atoi(response) >= 500) goto smtp_error; fprintf(stderr, "DEBUG: <<< %s\n", response); cupsFilePrintf(fp, "MAIL FROM:%s\r\n", mailtoFrom); fprintf(stderr, "DEBUG: >>> MAIL FROM:%s\n", mailtoFrom); if (!cupsFileGets(fp, response, sizeof(response)) || atoi(response) >= 500) goto smtp_error; fprintf(stderr, "DEBUG: <<< %s\n", response); cupsFilePrintf(fp, "RCPT TO:%s\r\n", to); fprintf(stderr, "DEBUG: >>> RCPT TO:%s\n", to); if (!cupsFileGets(fp, response, sizeof(response)) || atoi(response) >= 500) goto smtp_error; fprintf(stderr, "DEBUG: <<< %s\n", response); cupsFilePuts(fp, "DATA\r\n"); fputs("DEBUG: DATA\n", stderr); if (!cupsFileGets(fp, response, sizeof(response)) || atoi(response) >= 500) goto smtp_error; fprintf(stderr, "DEBUG: <<< %s\n", response); nl = "\r\n"; } /* * Send the message... */ cupsFilePrintf(fp, "Date: %s%s", httpGetDateString(time(NULL)), nl); cupsFilePrintf(fp, "From: %s%s", mailtoFrom, nl); cupsFilePrintf(fp, "Subject: %s %s%s", mailtoSubject, subject, nl); if (mailtoReplyTo[0]) { cupsFilePrintf(fp, "Sender: %s%s", mailtoReplyTo, nl); cupsFilePrintf(fp, "Reply-To: %s%s", mailtoReplyTo, nl); } cupsFilePrintf(fp, "To: %s%s", to, nl); if (mailtoCc[0]) cupsFilePrintf(fp, "Cc: %s%s", mailtoCc, nl); cupsFilePrintf(fp, "Content-Type: text/plain%s", nl); cupsFilePuts(fp, nl); cupsFilePrintf(fp, "%s%s", text, nl); cupsFilePrintf(fp, ".%s", nl); /* * Close the connection to the mail server... */ if (mailtoSendmail[0]) { /* * Close the pipe and wait for the sendmail command to finish... */ int status; /* Exit status */ cupsFileClose(fp); while (wait(&status)) { if (errno != EINTR) { fprintf(stderr, "DEBUG: Unable to get child status: %s\n", strerror(errno)); status = 0; break; } } /* * Report any non-zero status... */ if (status) { if (WIFEXITED(status)) fprintf(stderr, "ERROR: Sendmail command returned status %d!\n", WEXITSTATUS(status)); else fprintf(stderr, "ERROR: Sendmail command crashed on signal %d!\n", WTERMSIG(status)); } } else { /* * Finish up the SMTP submission and close the connection... */ if (!cupsFileGets(fp, response, sizeof(response)) || atoi(response) >= 500) goto smtp_error; fprintf(stderr, "DEBUG: <<< %s\n", response); /* * Process SMTP errors here... */ smtp_error: cupsFilePuts(fp, "QUIT\r\n"); fputs("DEBUG: QUIT\n", stderr); if (!cupsFileGets(fp, response, sizeof(response)) || atoi(response) >= 500) fprintf(stderr, "ERROR: Got \"%s\" trying to QUIT connection.\n", response); else fprintf(stderr, "DEBUG: <<< %s\n", response); cupsFileClose(fp); fprintf(stderr, "DEBUG: Closed connection to \"%s\"...\n", mailtoSMTPServer); } } /* * 'load_configuration()' - Load the mailto.conf file. */ int /* I - 1 on success, 0 on failure */ load_configuration(void) { cups_file_t *fp; /* mailto.conf file */ const char *server_root, /* CUPS_SERVERROOT environment variable */ *server_admin; /* SERVER_ADMIN environment variable */ char line[1024], /* Line from file */ *value; /* Value for directive */ int linenum; /* Line number in file */ /* * Initialize defaults... */ mailtoCc[0] = '\0'; if ((server_admin = getenv("SERVER_ADMIN")) != NULL) strlcpy(mailtoFrom, server_admin, sizeof(mailtoFrom)); else snprintf(mailtoFrom, sizeof(mailtoFrom), "root@%s", httpGetHostname(NULL, line, sizeof(line))); strlcpy(mailtoSendmail, "/usr/sbin/sendmail", sizeof(mailtoSendmail)); mailtoSMTPServer[0] = '\0'; mailtoSubject[0] = '\0'; /* * Try loading the config file... */ if ((server_root = getenv("CUPS_SERVERROOT")) == NULL) server_root = CUPS_SERVERROOT; snprintf(line, sizeof(line), "%s/mailto.conf", server_root); if ((fp = cupsFileOpen(line, "r")) == NULL) { if (errno != ENOENT) { fprintf(stderr, "ERROR: Unable to open \"%s\" - %s\n", line, strerror(errno)); return (1); } else return (0); } linenum = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { if (!value) { fprintf(stderr, "ERROR: No value found for %s directive on line %d!\n", line, linenum); cupsFileClose(fp); return (0); } if (!_cups_strcasecmp(line, "Cc")) strlcpy(mailtoCc, value, sizeof(mailtoCc)); else if (!_cups_strcasecmp(line, "From")) strlcpy(mailtoFrom, value, sizeof(mailtoFrom)); else if (!_cups_strcasecmp(line, "Sendmail")) { strlcpy(mailtoSendmail, value, sizeof(mailtoSendmail)); mailtoSMTPServer[0] = '\0'; } else if (!_cups_strcasecmp(line, "SMTPServer")) { mailtoSendmail[0] = '\0'; strlcpy(mailtoSMTPServer, value, sizeof(mailtoSMTPServer)); } else if (!_cups_strcasecmp(line, "Subject")) strlcpy(mailtoSubject, value, sizeof(mailtoSubject)); else { fprintf(stderr, "ERROR: Unknown configuration directive \"%s\" on line %d!\n", line, linenum); } } /* * Close file and return... */ cupsFileClose(fp); return (1); } /* * 'pipe_sendmail()' - Open a pipe to sendmail... */ cups_file_t * /* O - CUPS file */ pipe_sendmail(const char *to) /* I - To: address */ { cups_file_t *fp; /* CUPS file */ int pid; /* Process ID */ int pipefds[2]; /* Pipe file descriptors */ int argc; /* Number of arguments */ char *argv[100], /* Argument array */ line[1024], /* Sendmail command + args */ *lineptr; /* Pointer into line */ /* * First break the mailtoSendmail string into arguments... */ strlcpy(line, mailtoSendmail, sizeof(line)); argv[0] = line; argc = 1; for (lineptr = strchr(line, ' '); lineptr; lineptr = strchr(lineptr, ' ')) { while (*lineptr == ' ') *lineptr++ = '\0'; if (*lineptr) { /* * Point to the next argument... */ argv[argc ++] = lineptr; /* * Stop if we have too many... */ if (argc >= (int)(sizeof(argv) / sizeof(argv[0]) - 2)) break; } } argv[argc ++] = (char *)to; argv[argc] = NULL; /* * Create the pipe... */ if (pipe(pipefds)) { perror("ERROR: Unable to create pipe"); return (NULL); } /* * Then run the command... */ if ((pid = fork()) == 0) { /* * Child goes here - redirect stdin to the input side of the pipe, * redirect stdout to stderr, and exec... */ close(0); dup(pipefds[0]); close(1); dup(2); close(pipefds[0]); close(pipefds[1]); execvp(argv[0], argv); exit(errno); } else if (pid < 0) { /* * Unable to fork - error out... */ perror("ERROR: Unable to fork command"); close(pipefds[0]); close(pipefds[1]); return (NULL); } /* * Create a CUPS file using the output side of the pipe and close the * input side... */ close(pipefds[0]); if ((fp = cupsFileOpenFd(pipefds[1], "w")) == NULL) { int status; /* Status of command */ close(pipefds[1]); wait(&status); } return (fp); } /* * 'print_attributes()' - Print the attributes in a request... */ void print_attributes(ipp_t *ipp, /* I - IPP request */ int indent) /* I - Indentation */ { ipp_tag_t group; /* Current group */ ipp_attribute_t *attr; /* Current attribute */ char buffer[1024]; /* Value buffer */ for (group = IPP_TAG_ZERO, attr = ipp->attrs; attr; attr = attr->next) { if ((attr->group_tag == IPP_TAG_ZERO && indent <= 8) || !attr->name) { group = IPP_TAG_ZERO; fputc('\n', stderr); continue; } if (group != attr->group_tag) { group = attr->group_tag; fprintf(stderr, "DEBUG: %*s%s:\n\n", indent - 4, "", ippTagString(group)); } ippAttributeString(attr, buffer, sizeof(buffer)); fprintf(stderr, "DEBUG: %*s%s (%s%s) %s", indent, "", attr->name, attr->num_values > 1 ? "1setOf " : "", ippTagString(attr->value_tag), buffer); } } cups-2.2.7/notifier/Makefile000664 000765 000024 00000004533 13255074424 016437 0ustar00msweetstaff000000 000000 # # Notifier makefile for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 1997-2007 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include ../Makedefs NOTIFIERS = $(DBUS_NOTIFIER) mailto rss TARGETS = $(NOTIFIERS) testnotify OBJS = dbus.o mailto.o rss.o testnotify.o # # Make all targets... # all: $(TARGETS) # # Make library targets... # libs: # # Make unit tests... # unittests: # # Clean all object files... # clean: $(RM) $(OBJS) $(TARGETS) dbus.h # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: $(INSTALL_DIR) -m 775 -g $(CUPS_GROUP) $(CACHEDIR)/rss # # Install programs... # install-exec: echo Installing notifiers in $(SERVERBIN)/notifier... $(INSTALL_DIR) -m 755 $(SERVERBIN)/notifier for file in $(NOTIFIERS); do \ $(INSTALL_BIN) $$file $(SERVERBIN)/notifier; \ done if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ for file in $(NOTIFIERS); do \ cp $$file $(SYMROOT); \ dsymutil $(SYMROOT)/$$file; \ done \ fi # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Uninstall all targets... # uninstall: for file in $(NOTIFIERS); do \ $(RM) $(SERVERBIN)/notifier/$$file; \ done -$(RMDIR) $(SERVERBIN)/notifier -$(RMDIR) $(SERVERBIN) -$(RMDIR) $(CACHEDIR)/rss # # Update dependencies (without system header dependencies...) # depend: $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies # # dbus # dbus: dbus.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o dbus dbus.o $(DBUS_NOTIFIERLIBS) $(LIBS) # # mailto # mailto: mailto.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o mailto mailto.o $(LIBS) # # rss # rss: rss.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o rss rss.o $(LIBS) # # testnotify # testnotify: testnotify.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o testnotify testnotify.o $(LIBS) $(OBJS): ../Makedefs include Dependencies cups-2.2.7/notifier/rss.c000664 000765 000024 00000041706 13255074424 015755 0ustar00msweetstaff000000 000000 /* * RSS notifier for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include #include #include #include #include /* TODO: Update so we don't need this */ /* * Structures... */ typedef struct _cups_rss_s /**** RSS message data ****/ { int sequence_number; /* notify-sequence-number */ char *subject, /* Message subject/summary */ *text, /* Message text */ *link_url; /* Link to printer */ time_t event_time; /* When the event occurred */ } _cups_rss_t; /* * Local globals... */ static char *rss_password; /* Password for remote RSS */ /* * Local functions... */ static int compare_rss(_cups_rss_t *a, _cups_rss_t *b); static void delete_message(_cups_rss_t *rss); static void load_rss(cups_array_t *rss, const char *filename); static _cups_rss_t *new_message(int sequence_number, char *subject, char *text, char *link_url, time_t event_time); static const char *password_cb(const char *prompt); static int save_rss(cups_array_t *rss, const char *filename, const char *baseurl); static char *xml_escape(const char *s); /* * 'main()' - Main entry for the test notifier. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ ipp_t *event; /* Event from scheduler */ ipp_state_t state; /* IPP event state */ char scheme[32], /* URI scheme ("rss") */ username[256], /* Username for remote RSS */ host[1024], /* Hostname for remote RSS */ resource[1024], /* RSS file */ *options; /* Options */ int port, /* Port number for remote RSS */ max_events; /* Maximum number of events */ http_t *http; /* Connection to remote server */ http_status_t status; /* HTTP GET/PUT status code */ char filename[1024], /* Local filename */ newname[1024]; /* filename.N */ cups_lang_t *language; /* Language information */ ipp_attribute_t *printer_up_time, /* Timestamp on event */ *notify_sequence_number,/* Sequence number */ *notify_printer_uri; /* Printer URI */ char *subject, /* Subject for notification message */ *text, /* Text for notification message */ link_url[1024], /* Link to printer */ link_scheme[32], /* Scheme for link */ link_username[256], /* Username for link */ link_host[1024], /* Host for link */ link_resource[1024]; /* Resource for link */ int link_port; /* Link port */ cups_array_t *rss; /* RSS message array */ _cups_rss_t *msg; /* RSS message */ char baseurl[1024]; /* Base URL */ fd_set input; /* Input set for select() */ struct timeval timeout; /* Timeout for select() */ int changed; /* Has the RSS data changed? */ int exit_status; /* Exit status */ fprintf(stderr, "DEBUG: argc=%d\n", argc); for (i = 0; i < argc; i ++) fprintf(stderr, "DEBUG: argv[%d]=\"%s\"\n", i, argv[i]); /* * See whether we are publishing this RSS feed locally or remotely... */ if (httpSeparateURI(HTTP_URI_CODING_ALL, argv[1], scheme, sizeof(scheme), username, sizeof(username), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_OK) { fprintf(stderr, "ERROR: Bad RSS URI \"%s\"!\n", argv[1]); return (1); } max_events = 20; if ((options = strchr(resource, '?')) != NULL) { *options++ = '\0'; if (!strncmp(options, "max_events=", 11)) { max_events = atoi(options + 11); if (max_events <= 0) max_events = 20; } } rss = cupsArrayNew((cups_array_func_t)compare_rss, NULL); if (host[0]) { /* * Remote feed, see if we can get the current file... */ int fd; /* Temporary file */ if ((rss_password = strchr(username, ':')) != NULL) *rss_password++ = '\0'; cupsSetPasswordCB(password_cb); cupsSetUser(username); if ((fd = cupsTempFd(filename, sizeof(filename))) < 0) { fprintf(stderr, "ERROR: Unable to create temporary file: %s\n", strerror(errno)); return (1); } if ((http = httpConnect(host, port)) == NULL) { fprintf(stderr, "ERROR: Unable to connect to %s on port %d: %s\n", host, port, strerror(errno)); close(fd); unlink(filename); return (1); } status = cupsGetFd(http, resource, fd); close(fd); if (status != HTTP_OK && status != HTTP_NOT_FOUND) { fprintf(stderr, "ERROR: Unable to GET %s from %s on port %d: %d %s\n", resource, host, port, status, httpStatus(status)); httpClose(http); unlink(filename); return (1); } strlcpy(newname, filename, sizeof(newname)); httpAssembleURI(HTTP_URI_CODING_ALL, baseurl, sizeof(baseurl), "http", NULL, host, port, resource); } else { const char *cachedir, /* CUPS_CACHEDIR */ *server_name, /* SERVER_NAME */ *server_port; /* SERVER_PORT */ http = NULL; if ((cachedir = getenv("CUPS_CACHEDIR")) == NULL) cachedir = CUPS_CACHEDIR; if ((server_name = getenv("SERVER_NAME")) == NULL) server_name = "localhost"; if ((server_port = getenv("SERVER_PORT")) == NULL) server_port = "631"; snprintf(filename, sizeof(filename), "%s/rss%s", cachedir, resource); snprintf(newname, sizeof(newname), "%s.N", filename); httpAssembleURIf(HTTP_URI_CODING_ALL, baseurl, sizeof(baseurl), "http", NULL, server_name, atoi(server_port), "/rss%s", resource); } /* * Load the previous RSS file, if any... */ load_rss(rss, filename); changed = cupsArrayCount(rss) == 0; /* * Localize for the user's chosen language... */ language = cupsLangDefault(); /* * Read events and update the RSS file until we are out of events. */ for (exit_status = 0, event = NULL;;) { if (changed) { /* * Save the messages to the file again, uploading as needed... */ if (save_rss(rss, newname, baseurl)) { if (http) { /* * Upload the RSS file... */ if ((status = cupsPutFile(http, resource, filename)) != HTTP_CREATED) fprintf(stderr, "ERROR: Unable to PUT %s from %s on port %d: %d %s\n", resource, host, port, status, httpStatus(status)); } else { /* * Move the new RSS file over top the old one... */ if (rename(newname, filename)) fprintf(stderr, "ERROR: Unable to rename %s to %s: %s\n", newname, filename, strerror(errno)); } changed = 0; } } /* * Wait up to 30 seconds for an event... */ timeout.tv_sec = 30; timeout.tv_usec = 0; FD_ZERO(&input); FD_SET(0, &input); if (select(1, &input, NULL, NULL, &timeout) < 0) continue; else if (!FD_ISSET(0, &input)) { fprintf(stderr, "DEBUG: %s is bored, exiting...\n", argv[1]); break; } /* * Read the next event... */ event = ippNew(); while ((state = ippReadFile(0, event)) != IPP_DATA) { if (state <= IPP_IDLE) break; } if (state == IPP_ERROR) fputs("DEBUG: ippReadFile() returned IPP_ERROR!\n", stderr); if (state <= IPP_IDLE) break; /* * Collect the info from the event... */ printer_up_time = ippFindAttribute(event, "printer-up-time", IPP_TAG_INTEGER); notify_sequence_number = ippFindAttribute(event, "notify-sequence-number", IPP_TAG_INTEGER); notify_printer_uri = ippFindAttribute(event, "notify-printer-uri", IPP_TAG_URI); subject = cupsNotifySubject(language, event); text = cupsNotifyText(language, event); if (printer_up_time && notify_sequence_number && subject && text) { /* * Create a new RSS message... */ if (notify_printer_uri) { httpSeparateURI(HTTP_URI_CODING_ALL, notify_printer_uri->values[0].string.text, link_scheme, sizeof(link_scheme), link_username, sizeof(link_username), link_host, sizeof(link_host), &link_port, link_resource, sizeof(link_resource)); httpAssembleURI(HTTP_URI_CODING_ALL, link_url, sizeof(link_url), "http", link_username, link_host, link_port, link_resource); } msg = new_message(notify_sequence_number->values[0].integer, xml_escape(subject), xml_escape(text), notify_printer_uri ? xml_escape(link_url) : NULL, printer_up_time->values[0].integer); if (!msg) { fprintf(stderr, "ERROR: Unable to create message: %s\n", strerror(errno)); exit_status = 1; break; } /* * Add it to the array... */ cupsArrayAdd(rss, msg); changed = 1; /* * Trim the array as needed... */ while (cupsArrayCount(rss) > max_events) { msg = cupsArrayFirst(rss); cupsArrayRemove(rss, msg); delete_message(msg); } } if (subject) free(subject); if (text) free(text); ippDelete(event); event = NULL; } /* * We only get here when idle or error... */ ippDelete(event); if (http) { unlink(filename); httpClose(http); } return (exit_status); } /* * 'compare_rss()' - Compare two messages. */ static int /* O - Result of comparison */ compare_rss(_cups_rss_t *a, /* I - First message */ _cups_rss_t *b) /* I - Second message */ { return (a->sequence_number - b->sequence_number); } /* * 'delete_message()' - Free all memory used by a message. */ static void delete_message(_cups_rss_t *msg) /* I - RSS message */ { if (msg->subject) free(msg->subject); if (msg->text) free(msg->text); if (msg->link_url) free(msg->link_url); free(msg); } /* * 'load_rss()' - Load an existing RSS feed file. */ static void load_rss(cups_array_t *rss, /* I - RSS messages */ const char *filename) /* I - File to load */ { FILE *fp; /* File pointer */ char line[4096], /* Line from file */ *subject, /* Subject */ *text, /* Text */ *link_url, /* Link URL */ *start, /* Start of element */ *end; /* End of element */ time_t event_time; /* Event time */ int sequence_number; /* Sequence number */ int in_item; /* In an item */ _cups_rss_t *msg; /* New message */ if ((fp = fopen(filename, "r")) == NULL) { if (errno != ENOENT) fprintf(stderr, "ERROR: Unable to open %s: %s\n", filename, strerror(errno)); return; } subject = NULL; text = NULL; link_url = NULL; event_time = 0; sequence_number = 0; in_item = 0; while (fgets(line, sizeof(line), fp)) { if (strstr(line, "")) in_item = 1; else if (strstr(line, "") && in_item) { if (subject && text) { msg = new_message(sequence_number, subject, text, link_url, event_time); if (msg) cupsArrayAdd(rss, msg); } else { if (subject) free(subject); if (text) free(text); if (link_url) free(link_url); } subject = NULL; text = NULL; link_url = NULL; event_time = 0; sequence_number = 0; in_item = 0; } else if (!in_item) continue; else if ((start = strstr(line, "")) != NULL) { start += 7; if ((end = strstr(start, "")) != NULL) { *end = '\0'; subject = strdup(start); } } else if ((start = strstr(line, "")) != NULL) { start += 13; if ((end = strstr(start, "")) != NULL) { *end = '\0'; text = strdup(start); } } else if ((start = strstr(line, "")) != NULL) { start += 6; if ((end = strstr(start, "")) != NULL) { *end = '\0'; link_url = strdup(start); } } else if ((start = strstr(line, "")) != NULL) { start += 9; if ((end = strstr(start, "")) != NULL) { *end = '\0'; event_time = httpGetDateTime(start); } } else if ((start = strstr(line, "")) != NULL) sequence_number = atoi(start + 6); } if (subject) free(subject); if (text) free(text); if (link_url) free(link_url); fclose(fp); } /* * 'new_message()' - Create a new RSS message. */ static _cups_rss_t * /* O - New message */ new_message(int sequence_number, /* I - notify-sequence-number */ char *subject, /* I - Subject/summary */ char *text, /* I - Text */ char *link_url, /* I - Link to printer */ time_t event_time) /* I - Date/time of event */ { _cups_rss_t *msg; /* New message */ if ((msg = calloc(1, sizeof(_cups_rss_t))) == NULL) return (NULL); msg->sequence_number = sequence_number; msg->subject = subject; msg->text = text; msg->link_url = link_url; msg->event_time = event_time; return (msg); } /* * 'password_cb()' - Return the cached password. */ static const char * /* O - Cached password */ password_cb(const char *prompt) /* I - Prompt string, unused */ { (void)prompt; return (rss_password); } /* * 'save_rss()' - Save messages to a RSS file. */ static int /* O - 1 on success, 0 on failure */ save_rss(cups_array_t *rss, /* I - RSS messages */ const char *filename, /* I - File to save to */ const char *baseurl) /* I - Base URL */ { FILE *fp; /* File pointer */ _cups_rss_t *msg; /* Current message */ char date[1024]; /* Current date */ char *href; /* Escaped base URL */ if ((fp = fopen(filename, "w")) == NULL) { fprintf(stderr, "ERROR: Unable to create %s: %s\n", filename, strerror(errno)); return (0); } fchmod(fileno(fp), 0644); fputs("\n", fp); fputs("\n", fp); fputs(" \n", fp); fputs(" CUPS RSS Feed\n", fp); href = xml_escape(baseurl); fprintf(fp, " %s\n", href); free(href); fputs(" CUPS RSS Feed\n", fp); fputs(" " CUPS_SVERSION "\n", fp); fputs(" 1\n", fp); fprintf(fp, " %s\n", httpGetDateString2(time(NULL), date, sizeof(date))); for (msg = (_cups_rss_t *)cupsArrayLast(rss); msg; msg = (_cups_rss_t *)cupsArrayPrev(rss)) { char *subject = xml_escape(msg->subject); char *text = xml_escape(msg->text); fputs(" \n", fp); fprintf(fp, " %s\n", subject); fprintf(fp, " %s\n", text); if (msg->link_url) fprintf(fp, " %s\n", msg->link_url); fprintf(fp, " %s\n", httpGetDateString2(msg->event_time, date, sizeof(date))); fprintf(fp, " %d\n", msg->sequence_number); fputs(" \n", fp); free(subject); free(text); } fputs(" \n", fp); fputs("\n", fp); return (!fclose(fp)); } /* * 'xml_escape()' - Copy a string, escaping &, <, and > as needed. */ static char * /* O - Escaped string */ xml_escape(const char *s) /* I - String to escape */ { char *e, /* Escaped string */ *eptr; /* Pointer into escaped string */ const char *sptr; /* Pointer into string */ size_t bytes; /* Bytes needed for string */ /* * First figure out how many extra bytes we need... */ for (bytes = 0, sptr = s; *sptr; sptr ++) if (*sptr == '&') bytes += 4; /* & */ else if (*sptr == '<' || *sptr == '>') bytes += 3; /* < and > */ /* * If there is nothing to escape, just strdup() it... */ if (bytes == 0) return (strdup(s)); /* * Otherwise allocate memory and copy... */ if ((e = malloc(bytes + 1 + strlen(s))) == NULL) return (NULL); for (eptr = e, sptr = s; *sptr; sptr ++) if (*sptr == '&') { *eptr++ = '&'; *eptr++ = 'a'; *eptr++ = 'm'; *eptr++ = 'p'; *eptr++ = ';'; } else if (*sptr == '<') { *eptr++ = '&'; *eptr++ = 'l'; *eptr++ = 't'; *eptr++ = ';'; } else if (*sptr == '>') { *eptr++ = '&'; *eptr++ = 'g'; *eptr++ = 't'; *eptr++ = ';'; } else *eptr++ = *sptr; *eptr = '\0'; return (e); } cups-2.2.7/notifier/testnotify.c000664 000765 000024 00000005174 13255074424 017355 0ustar00msweetstaff000000 000000 /* * Test notifier for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include /* * Local functions... */ void print_attributes(ipp_t *ipp, int indent); /* * 'main()' - Main entry for the test notifier. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ ipp_t *event; /* Event from scheduler */ ipp_state_t state; /* IPP event state */ setbuf(stderr, NULL); fprintf(stderr, "DEBUG: argc=%d\n", argc); for (i = 0; i < argc; i ++) fprintf(stderr, "DEBUG: argv[%d]=\"%s\"\n", i, argv[i]); fprintf(stderr, "DEBUG: TMPDIR=\"%s\"\n", getenv("TMPDIR")); for (;;) { event = ippNew(); while ((state = ippReadFile(0, event)) != IPP_DATA) { if (state <= IPP_IDLE) break; } if (state == IPP_ERROR) fputs("DEBUG: ippReadFile() returned IPP_ERROR!\n", stderr); if (state <= IPP_IDLE) { ippDelete(event); return (0); } print_attributes(event, 4); ippDelete(event); /* * If the recipient URI is "testnotify://nowait", then we exit after each * event... */ if (!strcmp(argv[1], "testnotify://nowait")) return (0); } } /* * 'print_attributes()' - Print the attributes in a request... */ void print_attributes(ipp_t *ipp, /* I - IPP request */ int indent) /* I - Indentation */ { ipp_tag_t group; /* Current group */ ipp_attribute_t *attr; /* Current attribute */ char buffer[1024]; /* Value buffer */ for (group = IPP_TAG_ZERO, attr = ipp->attrs; attr; attr = attr->next) { if ((attr->group_tag == IPP_TAG_ZERO && indent <= 8) || !attr->name) { group = IPP_TAG_ZERO; fputc('\n', stderr); continue; } if (group != attr->group_tag) { group = attr->group_tag; fprintf(stderr, "DEBUG: %*s%s:\n\n", indent - 4, "", ippTagString(group)); } ippAttributeString(attr, buffer, sizeof(buffer)); fprintf(stderr, "DEBUG: %*s%s (%s%s) %s\n", indent, "", attr->name, attr->num_values > 1 ? "1setOf " : "", ippTagString(attr->value_tag), buffer); } } cups-2.2.7/monitor/bcp.c000664 000765 000024 00000012627 13255074424 015562 0ustar00msweetstaff000000 000000 /* * TBCP port monitor for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1993-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include /* * Local functions... */ static char *psgets(char *buf, size_t *bytes, FILE *fp); static ssize_t pswrite(const char *buf, size_t bytes); /* * 'main()' - Main entry... */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { FILE *fp; /* File to print */ int copies; /* Number of copies left */ char line[1024]; /* Line/buffer from stream/file */ size_t linelen; /* Length of line */ ppd_file_t *ppd; /* PPD file */ /* * Check command-line... */ if (argc < 6 || argc > 7) { _cupsLangPrintf(stderr, _("Usage: %s job-id user title copies options [file]"), argv[0]); return (1); } if (argc == 6) { copies = 1; fp = stdin; } else { copies = atoi(argv[4]); fp = fopen(argv[6], "rb"); if (!fp) { perror(argv[6]); return (1); } } /* * Open the PPD file as needed... */ ppd = ppdOpenFile(getenv("PPD")); /* * Copy the print file to stdout... */ while (copies > 0) { copies --; if (ppd && ppd->jcl_begin) fputs(ppd->jcl_begin, stdout); if (ppd && ppd->jcl_ps) fputs(ppd->jcl_ps, stdout); if (!ppd || ppd->language_level == 1) { /* * Use setsoftwareiomode for BCP mode... */ puts("%!PS-Adobe-3.0 ExitServer"); puts("%%Title: (BCP - Level 1)"); puts("%%EndComments"); puts("%%BeginExitServer: 0"); puts("serverdict begin 0 exitserver"); puts("%%EndExitServer"); puts("statusdict begin"); puts("/setsoftwareiomode known {100 setsoftwareiomode}"); puts("end"); puts("%EOF"); } else { /* * Use setdevparams for BCP mode... */ puts("%!PS-Adobe-3.0"); puts("%%Title: (BCP - Level 2)"); puts("%%EndComments"); puts("currentsysparams"); puts("/CurInputDevice 2 copy known {"); puts("get"); puts("<> setdevparams"); puts("}{"); puts("pop pop"); puts("} ifelse"); puts("%EOF"); } if (ppd && ppd->jcl_end) fputs(ppd->jcl_end, stdout); else if (!ppd || ppd->num_filters == 0) putchar(0x04); /* * Loop until we see end-of-file... */ do { linelen = sizeof(line); if (psgets(line, &linelen, fp) == NULL) break; } while (pswrite(line, linelen) > 0); fflush(stdout); } return (0); } /* * 'psgets()' - Get a line from a file. * * Note: * * This function differs from the gets() function in that it * handles any combination of CR, LF, or CR LF to end input * lines. */ static char * /* O - String or NULL if EOF */ psgets(char *buf, /* I - Buffer to read into */ size_t *bytes, /* IO - Length of buffer */ FILE *fp) /* I - File to read from */ { char *bufptr; /* Pointer into buffer */ int ch; /* Character from file */ size_t len; /* Max length of string */ len = *bytes - 1; bufptr = buf; ch = EOF; while ((size_t)(bufptr - buf) < len) { if ((ch = getc(fp)) == EOF) break; if (ch == '\r') { /* * Got a CR; see if there is a LF as well... */ ch = getc(fp); if (ch != EOF && ch != '\n') { ungetc(ch, fp); /* Nope, save it for later... */ ch = '\r'; } else *bufptr++ = '\r'; break; } else if (ch == '\n') break; else *bufptr++ = (char)ch; } /* * Add a trailing newline if it is there... */ if (ch == '\n' || ch == '\r') { if ((size_t)(bufptr - buf) < len) *bufptr++ = (char)ch; else ungetc(ch, fp); } /* * Nul-terminate the string and return it (or NULL for EOF). */ *bufptr = '\0'; *bytes = (size_t)(bufptr - buf); if (ch == EOF && bufptr == buf) return (NULL); else return (buf); } /* * 'pswrite()' - Write data from a file. */ static ssize_t /* O - Number of bytes written */ pswrite(const char *buf, /* I - Buffer to write */ size_t bytes) /* I - Bytes to write */ { size_t count; /* Remaining bytes */ for (count = bytes; count > 0; count --, buf ++) switch (*buf) { case 0x04 : /* CTRL-D */ if (bytes == 1) { /* * Don't quote the last CTRL-D... */ putchar(0x04); break; } case 0x01 : /* CTRL-A */ case 0x03 : /* CTRL-C */ case 0x05 : /* CTRL-E */ case 0x11 : /* CTRL-Q */ case 0x13 : /* CTRL-S */ case 0x14 : /* CTRL-T */ case 0x1c : /* CTRL-\ */ if (putchar(0x01) < 0) return (-1); if (putchar(*buf ^ 0x40) < 0) return (-1); break; default : if (putchar(*buf) < 0) return (-1); break; } return ((ssize_t)bytes); } cups-2.2.7/monitor/Dependencies000664 000765 000024 00000001646 13255074424 017162 0ustar00msweetstaff000000 000000 bcp.o: bcp.c ../cups/cups-private.h ../cups/string-private.h ../config.h \ ../cups/debug-private.h ../cups/versioning.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/ppd.h ../cups/raster.h tbcp.o: tbcp.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h ../cups/ppd.h ../cups/raster.h cups-2.2.7/monitor/Makefile000664 000765 000024 00000003611 13255074424 016303 0ustar00msweetstaff000000 000000 # # Port monitor makefile for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 2006 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # # This file is subject to the Apple OS-Developed Software exception. # include ../Makedefs TARGETS = bcp tbcp OBJS = bcp.o tbcp.o # # Make all targets... # all: $(TARGETS) # # Make library targets... # libs: # # Make unit tests... # unittests: # # Clean all object files... # clean: $(RM) $(OBJS) $(TARGETS) # # Update dependencies (without system header dependencies...) # depend: $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: # # Install programs... # install-exec: $(INSTALL_DIR) -m 755 $(SERVERBIN)/monitor for file in $(TARGETS); do \ $(INSTALL_BIN) $$file $(SERVERBIN)/monitor; \ done if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ for file in $(TARGETS); do \ cp $$file $(SYMROOT); \ dsymutil $(SYMROOT)/$$file; \ done \ fi # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Uninstall all targets... # uninstall: for file in $(TARGETS); do \ $(RM) $(SERVERBIN)/monitor/$$file; \ done -$(RMDIR) $(SERVERBIN)/monitor -$(RMDIR) $(SERVERBIN) # # bcp # bcp: bcp.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ bcp.o $(LIBS) # # tbcp # tbcp: tbcp.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ tbcp.o $(LIBS) # # Dependencies... # include Dependencies cups-2.2.7/monitor/tbcp.c000664 000765 000024 00000011675 13255074424 015750 0ustar00msweetstaff000000 000000 /* * TBCP port monitor for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1993-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include /* * Local functions... */ static char *psgets(char *buf, size_t *bytes, FILE *fp); static ssize_t pswrite(const char *buf, size_t bytes); /* * 'main()' - Main entry... */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { FILE *fp; /* File to print */ int copies; /* Number of copies left */ char line[1024]; /* Line/buffer from stream/file */ size_t linelen; /* Length of line */ /* * Check command-line... */ if (argc < 6 || argc > 7) { _cupsLangPrintf(stderr, _("Usage: %s job-id user title copies options [file]"), argv[0]); return (1); } if (argc == 6) { copies = 1; fp = stdin; } else { copies = atoi(argv[4]); fp = fopen(argv[6], "rb"); if (!fp) { perror(argv[6]); return (1); } } /* * Copy the print file to stdout... */ while (copies > 0) { copies --; /* * Read the first line... */ linelen = sizeof(line); if (!psgets(line, &linelen, fp)) break; /* * Handle leading PJL fun... */ if (!strncmp(line, "\033%-12345X", 9) || !strncmp(line, "@PJL ", 5)) { /* * Yup, we have leading PJL fun, so copy it until we hit a line * with "ENTER LANGUAGE"... */ while (strstr(line, "ENTER LANGUAGE") == NULL) { fwrite(line, 1, linelen, stdout); linelen = sizeof(line); if (psgets(line, &linelen, fp) == NULL) break; } } else { /* * No PJL stuff, just add the UEL... */ fputs("\033%-12345X", stdout); } /* * Switch to TBCP mode... */ fputs("\001M", stdout); /* * Loop until we see end-of-file... */ while (pswrite(line, linelen) > 0) { linelen = sizeof(line); if (psgets(line, &linelen, fp) == NULL) break; } fflush(stdout); } return (0); } /* * 'psgets()' - Get a line from a file. * * Note: * * This function differs from the gets() function in that it * handles any combination of CR, LF, or CR LF to end input * lines. */ static char * /* O - String or NULL if EOF */ psgets(char *buf, /* I - Buffer to read into */ size_t *bytes, /* IO - Length of buffer */ FILE *fp) /* I - File to read from */ { char *bufptr; /* Pointer into buffer */ int ch; /* Character from file */ size_t len; /* Max length of string */ len = *bytes - 1; bufptr = buf; ch = EOF; while ((size_t)(bufptr - buf) < len) { if ((ch = getc(fp)) == EOF) break; if (ch == '\r') { /* * Got a CR; see if there is a LF as well... */ ch = getc(fp); if (ch != EOF && ch != '\n') { ungetc(ch, fp); /* Nope, save it for later... */ ch = '\r'; } else *bufptr++ = '\r'; break; } else if (ch == '\n') break; else *bufptr++ = (char)ch; } /* * Add a trailing newline if it is there... */ if (ch == '\n' || ch == '\r') { if ((size_t)(bufptr - buf) < len) *bufptr++ = (char)ch; else ungetc(ch, fp); } /* * Nul-terminate the string and return it (or NULL for EOF). */ *bufptr = '\0'; *bytes = (size_t)(bufptr - buf); if (ch == EOF && bufptr == buf) return (NULL); else return (buf); } /* * 'pswrite()' - Write data from a file. */ static ssize_t /* O - Number of bytes written */ pswrite(const char *buf, /* I - Buffer to write */ size_t bytes) /* I - Bytes to write */ { size_t count; /* Remaining bytes */ for (count = bytes; count > 0; count --, buf ++) switch (*buf) { case 0x04 : /* CTRL-D */ if (bytes == 1) { /* * Don't quote the last CTRL-D... */ putchar(0x04); break; } case 0x01 : /* CTRL-A */ case 0x03 : /* CTRL-C */ case 0x05 : /* CTRL-E */ case 0x11 : /* CTRL-Q */ case 0x13 : /* CTRL-S */ case 0x14 : /* CTRL-T */ case 0x1b : /* CTRL-[ (aka ESC) */ case 0x1c : /* CTRL-\ */ if (putchar(0x01) < 0) return (-1); if (putchar(*buf ^ 0x40) < 0) return (-1); break; default : if (putchar(*buf) < 0) return (-1); break; } return ((ssize_t)bytes); } cups-2.2.7/man/backend.man000664 000765 000024 00000020301 13255074424 016006 0ustar00msweetstaff000000 000000 .\" .\" Backend man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH backend 7 "CUPS" "4 April 2014" "Apple Inc." .SH NAME backend \- cups backend transmission interfaces .SH SYNOPSIS .B backend .br .B backend .I job .I user .I title .I num-copies .I options [ .I filename ] .nf \fB#include \fR \fBconst char *cupsBackendDeviceURI\fR(\fBchar **\fIargv\fR); \fBvoid cupsBackendReport\fR(\fBconst char *\fIdevice_scheme\fR, \fBconst char *\fIdevice_uri\fR, \fBconst char *\fIdevice_make_and_model\fR, \fBconst char *\fIdevice_info\fR, \fBconst char *\fIdevice_id\fR, \fBconst char *\fIdevice_location\fR); \fBssize_t cupsBackChannelWrite\fR(\fBconst char *\fIbuffer\fR, \fBsize_t \fIbytes\fR, \fBdouble \fItimeout\fR); \fBint cupsSideChannelRead\fR(\fBcups_sc_command_t *\fIcommand\fR, \fBcups_sc_status_t *\fIstatus\fR, \fBchar *\fIdata\fR, \fBint *\fIdatalen\fR, \fBdouble \fItimeout\fR); \fBint cupsSideChannelWrite\fR(\fBcups_sc_command_t \fIcommand\fR, \fBcups_sc_status_t \fIstatus\fR, \fBconst char *\fIdata\fR, \fBint \fIdatalen\fR, \fBdouble \fItimeout\fR); .fi .SH DESCRIPTION Backends are a special type of .BR filter (7) which is used to send print data to and discover different devices on the system. .LP Like filters, backends must be capable of reading from a filename on the command-line or from the standard input, copying the standard input to a temporary file as required by the physical interface. .LP The command name (\fIargv[0]\fR) is set to the device URI of the destination printer. Authentication information in .I argv[0] is removed, so backend developers are urged to use the .B DEVICE_URI environment variable whenever authentication information is required. The .BR cupsBackendDeviceURI () function may be used to retrieve the correct device URI. .LP Back-channel data from the device should be relayed to the job filters using the \fIcupsBackChannelWrite\fR function. .LP Backends are responsible for reading side-channel requests using the .BR cupsSideChannelRead () function and responding with the .BR cupsSideChannelWrite () function. The .B CUPS_SC_FD constant defines the file descriptor that should be monitored for incoming requests. .SS DEVICE DISCOVERY When run with no arguments, the backend should list the devices and schemes it supports or is advertising to the standard output. The output consists of zero or more lines consisting of any of the following forms: .nf device-class scheme "Unknown" "device-info" device-class device-uri "device-make-and-model" "device-info" device-class device-uri "device-make-and-model" "device-info" "device-id" device-class device-uri "device-make-and-model" "device-info" "device-id" "device-location" .fi .LP The .BR cupsBackendReport () function can be used to generate these lines and handle any necessary escaping of characters in the various strings. .LP The .I device-class field is one of the following values: .TP 5 .B direct The device-uri refers to a specific direct-access device with no options, such as a parallel, USB, or SCSI device. .TP 5 .B file The device-uri refers to a file on disk. .TP 5 .B network The device-uri refers to a networked device and conforms to the general form for network URIs. .TP 5 .B serial The device-uri refers to a serial device with configurable baud rate and other options. If the device-uri contains a baud value, it represents the maximum baud rate supported by the device. .LP The .I scheme field provides the URI scheme that is supported by the backend. Backends should use this form only when the backend supports any URI using that scheme. The .I device-uri field specifies the full URI to use when communicating with the device. .LP The .I device-make-and-model field specifies the make and model of the device, e.g. "Example Foojet 2000". If the make and model is not known, you must report "Unknown". .LP The .I device-info field specifies additional information about the device. Typically this includes the make and model along with the port number or network address, e.g. "Example Foojet 2000 USB #1". .LP The optional .I device-id field specifies the IEEE-1284 device ID string for the device, which is used to select a matching driver. .LP The optional .I device-location field specifies the physical location of the device, which is often used to pre-populate the printer-location attribute when adding a printer. .SS PERMISSIONS Backends without world read and execute permissions are run as the root user. Otherwise, the backend is run using an unprivileged user account, typically "lp". .SH EXIT STATUS The following exit codes are defined for backends: .TP 5 .B CUPS_BACKEND_OK The print file was successfully transmitted to the device or remote server. .TP 5 .B CUPS_BACKEND_FAILED .br The print file was not successfully transmitted to the device or remote server. The scheduler will respond to this by canceling the job, retrying the job, or stopping the queue depending on the state of the .I printer-error-policy attribute. .TP 5 .B CUPS_BACKEND_AUTH_REQUIRED The print file was not successfully transmitted because valid authentication information is required. The scheduler will respond to this by holding the job and adding the 'cups-held-for-authentication' keyword to the "job-reasons" Job Description attribute. .TP 5 .B CUPS_BACKEND_HOLD The print file was not successfully transmitted because it cannot be printed at this time. The scheduler will respond to this by holding the job. .TP 5 .B CUPS_BACKEND_STOP The print file was not successfully transmitted because it cannot be printed at this time. The scheduler will respond to this by stopping the queue. .TP 5 .B CUPS_BACKEND_CANCEL The print file was not successfully transmitted because one or more attributes are not supported or the job was canceled at the printer. The scheduler will respond to this by canceling the job. .TP 5 .B CUPS_BACKEND_RETRY The print file was not successfully transmitted because of a temporary issue. The scheduler will retry the job at a future time - other jobs may print before this one. .TP 5 .B CUPS_BACKEND_RETRY_CURRENT The print file was not successfully transmitted because of a temporary issue. The scheduler will retry the job immediately without allowing intervening jobs. .PP All other exit code values are reserved. .SH ENVIRONMENT In addition to the environment variables listed in .BR cups (1) and .BR filter (7), CUPS backends can expect the following environment variable: .TP 5 .B DEVICE_URI The device URI associated with the printer. .SH FILES .I /etc/cups/cups-files.conf .SH NOTES CUPS backends are not generally designed to be run directly by the user. Aside from the device URI issue ( .I argv[0] and .B DEVICE_URI environment variable contain the device URI), CUPS backends also expect specific environment variables and file descriptors, and typically run in a user session that (on macOS) has additional restrictions that affect how it runs. Backends can also be installed with restricted permissions (0500 or 0700) that tell the scheduler to run them as the "root" user instead of an unprivileged user (typically "lp") on the system. .LP Unless you are a developer and know what you are doing, please do not run backends directly. Instead, use the .BR lp (1) or .BR lpr (1) programs to send print jobs or .BR lpinfo (8) to query for available printers using the backend. The one exception is the SNMP backend - see .BR cups-snmp (8) for more information. .SH SEE ALSO .IR cups (1), .IR cups-files.conf (5), .IR cups-snmp (8), .IR cupsd (8), .IR filter (7), .IR lp (1), .IR lpinfo (8), .IR lpr (1), .br CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cancel.man000664 000765 000024 00000004223 13255074424 015651 0ustar00msweetstaff000000 000000 .\" .\" cancel man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cancel 1 "CUPS" "15 April 2014" "Apple Inc." .SH NAME cancel \- cancel jobs .SH SYNOPSIS .B cancel [ .B \-E ] [ .B \-U .I username ] [ .B \-a ] [ .B \-h .I hostname[:port] ] [ .B \-u .I username ] [ .B \-x ] [ .I id ] [ .I destination ] [ .I destination\-id ] .SH DESCRIPTION The \fBcancel\fR command cancels print jobs. If no \fIdestination\fR or \fIid\fR is specified, the currently printing job on the default destination is canceled. .SH OPTIONS The following options are recognized by \fBcancel\fR: .TP 5 .B \-a Cancel all jobs on the named destination, or all jobs on all destinations if none is provided. .TP 5 .B \-E Forces encryption when connecting to the server. .TP 5 \fB\-h \fIhostname\fR[\fI:port\fR] Specifies an alternate server. .TP 5 \fB\-U \fIusername\fR Specifies the username to use when connecting to the server. .TP 5 \fB\-u \fIusername\fR Cancels jobs owned by \fIusername\fR. .TP 5 .B \-x Deletes job data files in addition to canceling. .SH CONFORMING TO Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", or "#". Also, printer and class names are \fInot\fR case-sensitive. .SH EXAMPLES Cancel the current print job: .nf cancel .fi Cancel job "myprinter-42": .nf cancel myprinter\-42 .fi Cancel all jobs: .nf cancel \-a .fi .SH NOTES Administrators wishing to prevent unauthorized cancellation of jobs via the \fI\-u\fR option should require authentication for Cancel-Jobs operations in .BR cupsd.conf (5). .SH SEE ALSO .BR cupsd.conf (5), .BR lp (1), .BR lpmove (8), .BR lpstat (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/classes.conf.man000664 000765 000024 00000002332 13255074424 017004 0ustar00msweetstaff000000 000000 .\" .\" classes.conf man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH classes.conf 5 "CUPS" "15 April 2014" "Apple Inc." .SH NAME classes.conf \- class configuration file for cups .SH DESCRIPTION The \fBclasses.conf\fR file defines the local printer classes that are available. It is normally located in the \fI/etc/cups\fR directory and is maintained by the .BR cupsd (8) program. This file is not intended to be edited or managed manually. .SH NOTES The name, location, and format of this file are an implementation detail that will change in future releases of CUPS. .SH SEE ALSO .BR cupsd (8), .BR cupsd.conf (5), .BR mime.convs (5), .BR mime.types (5), .BR printers.conf (5), .BR subscriptions.conf (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/client.conf.man.in000664 000765 000024 00000011113 13255074424 017227 0ustar00msweetstaff000000 000000 .\" .\" client.conf man page for CUPS. .\" .\" Copyright 2007-2017 by Apple Inc. .\" Copyright 2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH client.conf 5 "CUPS" "19 October 2017" "Apple Inc." .SH NAME client.conf \- client configuration file for cups .SH DESCRIPTION The \fBclient.conf\fR file configures the CUPS client and is normally located in the \fI/etc/cups\fR and/or \fI~/.cups\fR directories. Each line in the file can be a configuration directive, a blank line, or a comment. Comment lines start with the # character. .LP \fBNote:\fR Starting with macOS 10.7, this file is only used by command-line and X11 applications plus the IPP backend. The \fBServerName\fR directive is not supported on macOS at all. Starting with macOS 10.12, all applications can access these settings in the \fI/Library/Preferences/org.cups.PrintingPrefs.plist\fR file instead. See the NOTES section below for more information. .SS DIRECTIVES The following directives are understood by the client. Consult the online help for detailed descriptions: .TP 5 \fBAllowAnyRoot Yes\fR .TP 5 \fBAllowAnyRoot No\fR Specifies whether to allow TLS with certificates that have not been signed by a trusted Certificate Authority. The default is "Yes". .TP 5 \fBAllowExpiredCerts Yes\fR .TP 5 \fBAllowExpiredCerts No\fR Specifies whether to allow TLS with expired certificates. The default is "No". .TP 5 \fBEncryption IfRequested\fR .TP 5 \fBEncryption Never\fR .TP 5 \fBEncryption Required\fR Specifies the level of encryption that should be used. .TP 5 \fBGSSServiceName \fIname\fR Specifies the Kerberos service name that is used for authentication, typically "host", "http", or "ipp". CUPS adds the remote hostname ("name@server.example.com") for you. The default name is "http". .TP 5 \fBServerName \fIhostname-or-ip-address\fR[\fI:port\fR] .TP 5 \fBServerName \fI/domain/socket\fR Specifies the address and optionally the port to use when connecting to the server. \fBNote: This directive is not supported on macOS 10.7 or later.\fR .TP 5 \fBServerName \fIhostname-or-ip-address\fR[\fI:port\fR]\fB/version=1.1\fR Specifies the address and optionally the port to use when connecting to a server running CUPS 1.3.12 and earlier. .TP 5 \fBSSLOptions \fR[\fIAllowDH\fR] [\fIAllowRC4\fR] [\fIAllowSSL3\fR] [\fIDenyCBC\fR] [\fIDenyTLS1.0\fR] .TP 5 \fBSSLOptions None\fR Sets encryption options (only in /etc/cups/client.conf). By default, CUPS only supports encryption using TLS v1.0 or higher using known secure cipher suites. Security is reduced when \fIAllow\fR options are used. Security is enhanced when \fIDeny\fR options are used. The \fIAllowDH\fR option enables cipher suites using plain Diffie-Hellman key negotiation (not supported on systems using GNU TLS). The \fIAllowRC4\fR option enables the 128-bit RC4 cipher suites, which are required for some older clients. The \fIAllowSSL3\fR option enables SSL v3.0, which is required for some older clients that do not support TLS v1.0. The \fIDenyCBC\fR option disables all CBC cipher suites. The \fIDenyTLS1.0\fR option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1. .TP 5 \fBTrustOnFirstUse Yes\fR .TP 5 \fBTrustOnFirstUse No\fR Specifies whether to trust new TLS certificates by default. The default is "Yes". .TP 5 \fBUser \fIname\fR Specifies the default user name to use for requests. .TP 5 \fBValidateCerts Yes\fR .TP 5 \fBValidateCerts No\fR Specifies whether to only allow TLS with certificates whose common name matches the hostname. The default is "No". .SH NOTES The \fBclient.conf\fR file is deprecated on macOS and will no longer be supported in a future version of CUPS. Configuration settings can instead be viewed or changed using the .BR defaults (1) command: .nf defaults write /Library/Preferences/org.cups.PrintingPrefs.plist Encryption Required defaults write /Library/Preferences/org.cups.PrintingPrefs.plist TrustOnFirstUse -bool NO defaults read /Library/Preferences/org.cups.PrintingPrefs.plist Encryption .fi On Linux and other systems using GNU TLS, the \fI/etc/cups/ssl/site.crl\fR file, if present, provides a list of revoked X.509 certificates and is used when validating certificates. .SH SEE ALSO .BR cups (1), .BR default (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cups-config.man000664 000765 000024 00000005235 13255074424 016645 0ustar00msweetstaff000000 000000 .\" .\" cups-config man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cups-config 1 "CUPS" "15 April 2014" "Apple Inc." .SH NAME cups\-config \- get cups api, compiler, directory, and link information. .SH SYNOPSIS .B cups\-config .I \-\-api\-version .br .B cups\-config .I \-\-build .br .B cups\-config .I \-\-cflags .br .B cups\-config .I \-\-datadir .br .B cups\-config .I \-\-help .br .B cups\-config .I \-\-ldflags .br .B cups\-config [ .I \-\-image ] [ .I \-\-static ] .I \-\-libs .br .B cups\-config .I \-\-serverbin .br .B cups\-config .I \-\-serverroot .br .B cups-config .I \-\-version .br .SH DESCRIPTION The \fBcups-config\fR command allows application developers to determine the necessary command-line options for the compiler and linker, as well as the installation directories for filters, configuration files, and drivers. All values are reported to the standard output. .SH OPTIONS The \fBcups-config\fR command accepts the following command-line options: .TP 5 .B \-\-api-version Reports the current API version (major.minor). .TP 5 .B \-\-build Reports a system-specific build number. .TP 5 .B \-\-cflags Reports the necessary compiler options. .TP 5 .B \-\-datadir Reports the default CUPS data directory. .TP 5 .B \-\-help Reports the program usage message. .TP 5 .B \-\-image When used with \fI\-\-libs\fR, adds the CUPS imaging library to the list of libraries. .TP 5 .B \-\-ldflags Reports the necessary linker options. .TP 5 .B \-\-libs Reports the necessary libraries to link to. .TP 5 .B \-\-serverbin Reports the default CUPS binary directory, where filters and backends are stored. .TP 5 .B \-\-serverroot Reports the default CUPS configuration file directory. .TP 5 .B \-\-static When used with \fI\-\-libs\fR, reports the static libraries instead of the default (shared) libraries. .TP 5 .B \-\-version Reports the full version number of the CUPS installation (major.minor.patch). .SH EXAMPLES Show the currently installed version of CUPS: .nf cups-config \-\-version .fi Compile a simple one-file CUPS filter: .nf cc `cups\-config \-\-cflags \-\-ldflags` \-o filter filter.c \\ `cups\-config \-\-libs` .fi .SH SEE ALSO .BR cups (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cups-files.conf.man.in000664 000765 000024 00000022660 13255074424 020034 0ustar00msweetstaff000000 000000 .\" .\" cups-files.conf man page for CUPS. .\" .\" Copyright 2007-2017 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cups-files.conf 5 "CUPS" "21 September 2017" "Apple Inc." .SH NAME cups\-files.conf \- file and directory configuration file for cups .SH DESCRIPTION The \fBcups\-files.conf\fR file configures the files and directories used by the CUPS scheduler, .BR cupsd (8). It is normally located in the \fI/etc/cups\fR directory. .LP Each line in the file can be a configuration directive, a blank line, or a comment. Configuration directives typically consist of a name and zero or more values separated by whitespace. The configuration directive name and values are case-insensitive. Comment lines start with the # character. .SS DIRECTIVES The following directives are understood by .BR cupsd (8): .\"#AccessLog .TP 5 \fBAccessLog\fR .TP 5 \fBAccessLog \fIfilename\fR .TP 5 \fBAccessLog stderr\fR .TP 5 \fBAccessLog syslog\fR Defines the access log filename. Specifying a blank filename disables access log generation. The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background. The value "syslog" causes log entries to be sent to the system log daemon. The server name may be included in filenames using the string "%s", for example: .nf AccessLog /var/log/cups/%s-access_log .fi The default is "/var/log/cups/access_log". .\"#CacheDir .TP 5 \fBCacheDir \fIdirectory\fR Specifies the directory to use for long-lived temporary (cache) files. The default is "/var/spool/cups/cache" or "/var/cache/cups" depending on the platform. .\"#ConfigFilePerm .TP 5 \fBConfigFilePerm \fImode\fR Specifies the permissions for all configuration files that the scheduler writes. The default is "0644" on macOS and "0640" on all other operating systems. .LP \fBNote:\fR The permissions for the \fIprinters.conf\fR file are currently masked to only allow access from the scheduler user (typically root). This is done because printer device URIs sometimes contain sensitive authentication information that should not be generally known on the system. There is no way to disable this security feature. .\"#CreateSelfSignedCerts .TP 5 \fBCreateSelfSignedCerts yes\fR .TP 5 \fBCreateSelfSignedCerts no\fR Specifies whether the scheduler automatically creates self-signed certificates for client connections using TLS. The default is yes. .\"#DataDir .TP 5 \fBDataDir \fIpath\fR Specifies the directory where data files can be found. The default is usually "/usr/share/cups". .\"#DocumentRoot .TP 5 \fBDocumentRoot \fIdirectory\fR Specifies the root directory for the CUPS web interface content. The default is usually "/usr/share/doc/cups". .\"#ErrorLog .TP 5 \fBErrorLog\fR .TP 5 \fBErrorLog \fIfilename\fR .TP 5 \fBErrorLog stderr\fR .TP 5 \fBErrorLog syslog\fR Defines the error log filename. Specifying a blank filename disables error log generation. The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background. The value "syslog" causes log entries to be sent to the system log daemon. The server name may be included in filenames using the string "%s", for example: .nf ErrorLog /var/log/cups/%s-error_log .fi The default is "/var/log/cups/error_log". .\"#FatalErrors .TP 5 \fBFatalErrors none\fR .TP 5 \fBFatalErrors all \fI\-kind \fR[ ... \fI\-kind \fR] .TP 5 \fBFatalErrors \fIkind \fR[ ... \fIkind \fR] Specifies which errors are fatal, causing the scheduler to exit. The default is "config". The \fIkind\fR strings are: .RS 5 .TP 5 .B none No errors are fatal. .TP 5 .B all All of the errors below are fatal. .TP 5 .B browse Browsing initialization errors are fatal, for example failed connections to the DNS-SD daemon. .TP 5 .B config Configuration file syntax errors are fatal. .TP 5 .B listen Listen or Port errors are fatal, except for IPv6 failures on the loopback or "any" addresses. .TP 5 .B log Log file creation or write errors are fatal. .TP 5 .B permissions Bad startup file permissions are fatal, for example shared TLS certificate and key files with world-read permissions. .RE .\"#Group .TP 5 \fBGroup \fIgroup-name-or-number\fR Specifies the group name or ID that will be used when executing external programs. The default group is operating system specific but is usually "lp" or "nobody". .\"#LogFilePerm .TP 5 \fBLogFilePerm \fImode\fR Specifies the permissions of all log files that the scheduler writes. The default is "0644". .\"#PageLog .TP 5 \fBPageLog \fR[ \fIfilename\fR ] .TP 5 \fBPageLog stderr\fR .TP 5 \fBPageLog syslog\fR Defines the page log filename. The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background. The value "syslog" causes log entries to be sent to the system log daemon. Specifying a blank filename disables page log generation. The server name may be included in filenames using the string "%s", for example: .nf PageLog /var/log/cups/%s-page_log .fi The default is "/var/log/cups/page_log". .\"#RemoteRoot .TP 5 \fBRemoteRoot \fIusername\fR Specifies the username that is associated with unauthenticated accesses by clients claiming to be the root user. The default is "remroot". .\"#RequestRoot .TP 5 \fBRequestRoot \fIdirectory\fR Specifies the directory that contains print jobs and other HTTP request data. The default is "/var/spool/cups". .\"#Sandboxing .TP 5 \fBSandboxing relaxed\fR .TP 5 \fBSandboxing strict\fR Specifies the level of security sandboxing that is applied to print filters, backends, and other child processes of the scheduler. The default is "strict". This directive is currently only used/supported on macOS. .\"#ServerBin .TP 5 \fBServerBin \fIdirectory\fR Specifies the directory containing the backends, CGI programs, filters, helper programs, notifiers, and port monitors. The default is "/usr/lib/cups" or "/usr/libexec/cups" depending on the platform. .\"#ServerKeychain .TP 5 \fBServerKeychain \fIpath\fR Specifies the location of TLS certificates and private keys. The default is "/Library/Keychains/System.keychain" on macOS and "/etc/cups/ssl" on all other operating systems. macOS uses its keychain database to store certificates and keys while other platforms use separate files in the specified directory, *.crt for PEM-encoded certificates and *.key for PEM-encoded private keys. .\"#ServerRoot .TP 5 \fBServerRoot \fIdirectory\fR Specifies the directory containing the server configuration files. The default is "/etc/cups". .\"#StateDir .TP 5 \fBStateDir \fIdirectory\fR Specifies the directory to use for PID and local certificate files. The default is "/var/run/cups" or "/etc/cups" depending on the platform. .\"#SyncOnClose .TP 5 \fBSyncOnClose Yes\fR .TP 5 \fBSyncOnClose No\fR Specifies whether the scheduler calls .BR fsync (2) after writing configuration or state files. The default is "No". .\"#SystemGroup .TP 5 \fBSystemGroup \fIgroup-name \fR[ ... \fIgroup-name\fR ] Specifies the group(s) to use for \fI@SYSTEM\fR group authentication. The default contains "admin", "lpadmin", "root", "sys", and/or "system". .\"#TempDir .TP 5 \fBTempDir \fIdirectory\fR Specifies the directory where short-term temporary files are stored. The default is "/var/spool/cups/tmp". .\"#User .TP 5 \fBUser \fIusername\fR Specifies the user name or ID that is used when running external programs. The default is "lp". .SS DEPRECATED DIRECTIVES The following directives are deprecated and will be removed from a future version of CUPS: .\"#FileDevice .TP 5 \fBFileDevice Yes\fR .TP 5 \fBFileDevice No\fR Specifies whether the file pseudo-device can be used for new printer queues. The URI "file:///dev/null" is always allowed. File devices cannot be used with "raw" print queues - a PPD file is required. The specified file is overwritten for every print job. Writing to directories is not supported. .\"#FontPath .TP 5 \fBFontPath \fIdirectory[:...:directoryN]\fR Specifies a colon separated list of directories where fonts can be found. On Linux the .BR font-config (1) mechanism is used instead. On macOS the Font Book application manages system-installed fonts. .\"#LPDConfigFile .TP 5 \fB LPDConfigFile \fIfilename\fR Specifies the LPD service configuration file to update. .\"#Printcap .TP 5 \fBPrintcap \fIfilename\fR Specifies a file that is filled with a list of local print queues. .\"#PrintcapFormat .TP 5 \fBPrintcapFormat bsd\fR .TP 5 \fBPrintcapFormat plist\fR .TP 5 \fBPrintcapFormat solaris\fR Specifies the format to use for the Printcap file. "bsd" is the historical LPD printcap file format. "plist" is the Apple plist file format. "solaris" is the historical Solaris LPD printcap file format. .\"#SMBConfigFile .TP 5 \fBSMBConfigFile \fIfilename\fR Specifies the SMB service configuration file to update. .SH SEE ALSO .BR classes.conf (5), .BR cups (1), .BR cupsd (8), .BR cupsd.conf (5), .BR mime.convs (5), .BR mime.types (5), .BR printers.conf (5), .BR subscriptions.conf (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cups-lpd.man.in000664 000765 000024 00000010213 13255074424 016554 0ustar00msweetstaff000000 000000 .\" .\" cups-lpd man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cups-lpd 8 "CUPS" "3 June 2014" "Apple Inc." .SH NAME cups-lpd \- receive print jobs and report printer status to lpd clients .SH SYNOPSIS .B cups-lpd [ \fB\-h \fIhostname\fR[\fB:\fIport\fR] ] [ .B -n ] [ .B -o .I option=value ] .SH DESCRIPTION .B cups-lpd is the CUPS Line Printer Daemon ("LPD") mini-server that supports legacy client systems that use the LPD protocol. .B cups-lpd does not act as a standalone network daemon but instead operates using any of the Internet "super-servers" such as .BR inetd (8), .BR launchd (8), and .BR systemd (8). .SH OPTIONS .TP 5 \fB-h \fIhostname\fR[\fB:\fIport\fR] Sets the CUPS server (and port) to use. .TP 5 .B -n Disables reverse address lookups; normally .B cups-lpd will try to discover the hostname of the client via a reverse DNS lookup. .TP 5 \fB-o \fIname=value\fR Inserts options for all print queues. Most often this is used to disable the "l" filter so that remote print jobs are filtered as needed for printing; the .BR inetd (8) example below sets the "document-format" option to "application/octet-stream" which forces autodetection of the print file format. .SH CONFORMING TO .B cups-lpd does not enforce the restricted source port number specified in RFC 1179, as using restricted ports does not prevent users from submitting print jobs. While this behavior is different than standard Berkeley LPD implementations, it should not affect normal client operations. .LP The output of the status requests follows RFC 2569, Mapping between LPD and IPP Protocols. Since many LPD implementations stray from this definition, remote status reporting to LPD clients may be unreliable. .SH ERRORS Errors are sent to the system log. .SH FILES .nf .I /etc/inetd.conf .I /etc/xinetd.d/cups-lpd .I /System/Library/LaunchDaemons/org.cups.cups-lpd.plist .fi .SH NOTES .SS PERFORMANCE .B cups-lpd performs well with small numbers of clients and printers. However, since a new process is created for each connection and since each process must query the printing system before each job submission, it does not scale to larger configurations. We highly recommend that large configurations use the native IPP support provided by CUPS instead. .SS SECURITY .B cups-lpd currently does not perform any access control based on the settings in \fIcupsd.conf(5)\fR or in the \fIhosts.allow(5)\fR or \fIhosts.deny(5)\fR files used by TCP wrappers. Therefore, running .B cups-lpd on your server will allow any computer on your network (and perhaps the entire Internet) to print to your server. .LP While .BR xinetd (8) has built-in access control support, you should use the TCP wrappers package with .BR inetd (8) to limit access to only those computers that should be able to print through your server. .LP .B cups-lpd is not enabled by the standard CUPS distribution. Please consult with your operating system vendor to determine whether it is enabled by default on your system. .SH EXAMPLE If you are using .BR inetd (8), add the following line to the \fIinetd.conf\fR file to enable the .B cups-lpd mini-server: .nf printer stream tcp nowait lp /usr/lib/cups/daemon/cups\-lpd cups\-lpd \\ \-o document\-format=application/octet\-stream .fi .LP \fINote:\fR If you are using Solaris 10 or higher, you must run the .BR inetdconv (1m) program to register the changes to the \fIinetd.conf\fR file. .LP CUPS includes configuration files for .BR launchd (8), .BR systemd (8), and .BR xinetd (8). Simply enable the .B cups-lpd service using the corresponding control program. .SH SEE ALSO .BR cups (1), .BR cupsd (8), .BR inetconv (1m), .BR inetd (8), .BR launchd (8), .BR xinetd (8), CUPS Online Help (http://localhost:631/help), RFC 2569 .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cups-snmp.conf.man000664 000765 000024 00000005126 13255074424 017300 0ustar00msweetstaff000000 000000 .\" .\" snmp.conf man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH snmp.conf 5 "CUPS" "10 June 2014" "Apple Inc." .SH NAME snmp.conf \- snmp configuration file for cups .SH DESCRIPTION The .B snmp.conf file configures how the standard CUPS network backends (http, https, ipp, ipps, lpd, snmp, and socket) access printer information using SNMPv1 and is normally located in the \fI/etc/cups\fR directory. Each line in the file can be a configuration directive, a blank line, or a comment. Comment lines start with the # character. .LP The Community and DebugLevel directives are used by all backends. The remainder apply only to the SNMP backend - .BR cups-snmp (8). .SH DIRECTIVES The following directives are understood by the CUPS network backends: .TP 5 \fBAddress @IF(\fIname\fB)\fR .TP 5 \fBAddress @LOCAL\fR .TP 5 \fBAddress \fIaddress\fR Sends SNMP broadcast queries (for discovery) to the specified address(es). There is no default for the broadcast address. .TP 5 \fBCommunity \fIname\fR Specifies the community name to use. Only a single community name may be specified. The default community name is "public". .TP 5 \fBDebugLevel \fInumber\fR Specifies the logging level from 0 (none) to 3 (everything). Typically only used for debugging (thus the name). The default debug level is 0. .TP 5 \fBDeviceURI "\fIregular expression\fB" \fIdevice-uri \fR[... \fIdevice-uri\fR] Specifies one or more device URIs that should be used for a given make and model string. The regular expression is used to match the detected make and model, and the device URI strings must be of the form "scheme://%s[:port]/[path]", where "%s" represents the detected address or hostname. There are no default device URI matching rules. .TP 5 \fBHostNameLookups on\fR .TP 5 \fBHostNameLookups off\fR Specifies whether the addresses of printers should be converted to hostnames or left as numeric IP addresses. The default is "off". .TP 5 \fBMaxRunTime \fIseconds\fR Specifies the maximum number of seconds that the SNMP backend will scan the network for printers. The default is 120 seconds (2 minutes). .SH SEE ALSO .BR cups-snmp (8), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cups-snmp.man.in000664 000765 000024 00000004644 13255074424 016765 0ustar00msweetstaff000000 000000 .\" .\" SNMP backend man page for CUPS. .\" .\" Copyright 2012-2014 by Apple Inc. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cups-snmp 8 "CUPS" "10 June 2014" "Apple Inc." .SH NAME snmp \- cups snmp backend .SH SYNOPSIS .B /usr/lib/cups/backend/snmp .I ip-address-or-hostname .br .B /usr/libexec/cups/backend/snmp .I ip-address-or-hostname .br .B lpinfo .B \-v .B \-\-include-schemes snmp .SH DESCRIPTION The CUPS SNMP backend provides legacy discovery and identification of network printers using SNMPv1. When used for discovery through the scheduler, the backend will list all printers that respond to a broadcast SNMPv1 query with the "public" community name. Additional queries are then sent to printers that respond in order to determine the correct device URI, make and model, and other information needed for printing. .LP In the first form, the SNMP backend is run directly by the user to look up the device URI and other information when you have an IP address or hostname. This can be used for programs that need to configure print queues where the user has supplied an address but nothing else. .LP In the second form, the SNMP backend is run indirectly using the .BR lpinfo (8) command. The output provides all printers detected via SNMP on the configured broadcast addresses. \fINote: no broadcast addresses are configured by default.\fR .SH ENVIRONMENT The DebugLevel value can be overridden using the CUPS_DEBUG_LEVEL environment variable. The MaxRunTime value can be overridden using the CUPS_MAX_RUN_TIME environment variable. .SH FILES The SNMP backend reads the \fI/etc/cups/snmp.conf\fR configuration file, if present, to set the default broadcast address, community name, and logging level. .SH CONFORMING TO The CUPS SNMP backend uses the information from the Host, Printer, and Port Monitor MIBs along with some vendor private MIBs and intelligent port probes to determine the correct device URI and make and model for each printer. .SH SEE ALSO .BR backend (7), .BR cups-snmp.conf (5), .BR cupsd (8), .BR lpinfo (8), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cups.man000664 000765 000024 00000014356 13255074424 015406 0ustar00msweetstaff000000 000000 .\" .\" cups (intro) man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cups 1 "CUPS" "16 April 2014" "Apple Inc." .SH NAME cups \- a standards-based, open source printing system .SH DESCRIPTION .B CUPS is the software you use to print from applications like word processors, email readers, photo editors, and web browsers. It converts the page descriptions produced by your application (put a paragraph here, draw a line there, and so forth) into something your printer can understand and then sends the information to the printer for printing. .LP Now, since every printer manufacturer does things differently, printing can be very complicated. .B CUPS does its best to hide this from you and your application so that you can concentrate on printing and less on how to print. Generally, the only time you need to know anything about your printer is when you use it for the first time, and even then .B CUPS can often figure things out on its own. .SS HOW DOES IT WORK? The first time you print to a printer, .B CUPS creates a queue to keep track of the current status of the printer (everything OK, out of paper, etc.) and any pages you have printed. Most of the time the queue points to a printer connected directly to your computer via a USB port, however it can also point to a printer on your network, a printer on the Internet, or multiple printers depending on the configuration. Regardless of where the queue points, it will look like any other printer to you and your applications. .LP Every time you print something, .B CUPS creates a job which contains the queue you are sending the print to, the name of the document you are printing, and the page descriptions. Job are numbered (queue-1, queue-2, and so forth) so you can monitor the job as it is printed or cancel it if you see a mistake. When .B CUPS gets a job for printing, it determines the best programs (filters, printer drivers, port monitors, and backends) to convert the pages into a printable format and then runs them to actually print the job. .LP When the print job is completely printed, .B CUPS removes the job from the queue and moves on to any other jobs you have submitted. You can also be notified when the job is finished, or if there are any errors during printing, in several different ways. .SS WHERE DO I BEGIN? The easiest way to start is by using the web interface to configure your printer. Go to "http://localhost:631" and choose the Administration tab at the top of the page. Click/press on the Add Printer button and follow the prompts. .LP When you are asked for a username and password, enter your login username and password or the "root" username and password. .LP After the printer is added you will be asked to set the default printer options (paper size, output mode, etc.) for the printer. Make any changes as needed and then click/press on the Set Default Options button to save them. Some printers also support auto-configuration - click/press on the Query Printer for Default Options button to update the options automatically. .LP Once you have added the printer, you can print to it from any application. You can also choose Print Test Page from the maintenance menu to print a simple test page and verify that everything is working properly. .LP You can also use the .BR lpadmin (8) and .BR lpinfo (8) commands to add printers to .BR CUPS . Additionally, your operating system may include graphical user interfaces or automatically create printer queues when you connect a printer to your computer. .SS HOW DO I GET HELP? The .B CUPS web site (http://www.CUPS.org) provides access to the .I cups and .I cups-devel mailing lists, additional documentation and resources, and a bug report database. Most vendors also provide online discussion forums to ask printing questions for your operating system of choice. .SH ENVIRONMENT .B CUPS commands use the following environment variables to override the default locations of files and so forth. For security reasons, these environment variables are ignored for setuid programs: .TP 5 .B CUPS_ANYROOT Whether to allow any X.509 certificate root (Y or N). .TP 5 .B CUPS_CACHEDIR The directory where semi-persistent cache files can be found. .TP 5 .B CUPS_DATADIR The directory where data files can be found. .TP 5 .B CUPS_ENCRYPTION The default level of encryption (Always, IfRequested, Never, Required). .TP 5 .B CUPS_EXPIREDCERTS Whether to allow expired X.509 certificates (Y or N). .TP 5 .B CUPS_GSSSERVICENAME The Kerberos service name used for authentication. .TP 5 .B CUPS_SERVER The hostname/IP address and port number of the CUPS scheduler (hostname:port or ipaddress:port). .TP 5 .B CUPS_SERVERBIN The directory where server helper programs, filters, backend, etc. can be found. .TP 5 .B CUPS_SERVERROOT The root directory of the server. .TP 5 .B CUPS_STATEDIR The directory where state files can be found. .TP 5 .B CUPS_USER Specifies the name of the user for print requests. .TP 5 .B HOME Specifies the home directory of the current user. .TP 5 .B IPP_PORT Specifies the default port number for IPP requests. .TP 5 .B LOCALEDIR Specifies the location of localization files. .TP 5 .B LPDEST Specifies the default print queue (System V standard). .TP 5 .B PRINTER Specifies the default print queue (Berkeley standard). .TP 5 .B TMPDIR Specifies the location of temporary files. .SH FILES .nf .I ~/.cups/client.conf .I ~/.cups/lpoptions .fi .SH CONFORMING TO .B CUPS conforms to the Internet Printing Protocol version 2.1 and implements the Berkeley and System V UNIX print commands. .SH SEE ALSO .BR cancel (1), .BR client.conf (7), .BR cupsctl (8), .BR cupsd (8), .BR lp (1), .BR lpadmin (8), .BR lpinfo (8), .BR lpoptions (1), .BR lpr (1), .BR lprm (1), .BR lpq (1), .BR lpstat (1), CUPS Online Help (http://localhost:631/help), CUPS Web Site (http://www.CUPS.org), PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cupsaccept.man000664 000765 000024 00000004353 13255074424 016562 0ustar00msweetstaff000000 000000 .\" .\" accept/reject man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cupsaccept 8 "CUPS" "10 June 2014" "Apple Inc." .SH NAME cupsaccept/cupsreject \- accept/reject jobs sent to a destination .SH SYNOPSIS .B cupsaccept [ .B \-E ] [ .B \-U .I username ] [ .B \-h .I hostname[:port] ] .I destination(s) .br .B cupsreject [ .B \-E ] [ .B \-U .I username ] [ .B \-h .I hostname[:port] ] [ .B \-r .I reason ] .I destination(s) .SH DESCRIPTION The .B cupsaccept command instructs the printing system to accept print jobs to the specified destinations. .LP The .B cupsreject command instructs the printing system to reject print jobs to the specified destinations. The \fI-r\fR option sets the reason for rejecting print jobs. If not specified, the reason defaults to "Reason Unknown". .SH OPTIONS The following options are supported by both .B cupsaccept and .BR cupsreject : .TP 5 .B \-E Forces encryption when connecting to the server. .TP 5 \fB-U \fIusername\fR Sets the username that is sent when connecting to the server. .TP 5 \fB-h \fIhostname[:port]\fR Chooses an alternate server. .TP 5 \fB-r \fR"\fIreason\fR" Sets the reason string that is shown for a printer that is rejecting jobs. .SH CONFORMING TO The .B cupsaccept and .B cupsreject commands correspond to the System V printing system commands "accept" and "reject", respectively. Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", or "#". Also, printer and class names are \fInot\fR case-sensitive. .LP Finally, the CUPS versions may ask the user for an access password depending on the printing system configuration. .SH SEE ALSO .BR cancel (1), .BR cupsenable (8), .BR lp (1), .BR lpadmin (8), .BR lpstat (1), .br CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cupsaddsmb.man.in000664 000765 000024 00000007247 13255074424 017167 0ustar00msweetstaff000000 000000 .\" .\" cupsaddsmb man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cupsaddsmb 8 "CUPS" "11 June 2014" "Apple Inc." .SH NAME cupsaddsmb \- export printers to samba for windows clients .SH SYNOPSIS .B cupsaddsmb [ .B \-H .I samba-server ] [ .B \-U .I samba-user[%samba-password] ] [ .B \-h .I cups-server[:port] ] [ .B \-v ] .B \-a .br .B cupsaddsmb [ .B \-H .I samba-server ] [ .B \-U .I samba-user[%samba-password] ] [ .B \-h .I cups-server[:port] ] [ .B \-v ] .I printer [ ... .I printer ] .SH DESCRIPTION The \fBcupsaddsmb\fR program exports printers to the SAMBA software (version 2.2.0 or higher) for use with Windows clients. Depending on the SAMBA configuration, you may need to provide a password to export the printers. This program requires the Windows printer driver files described below. .SS SAMBA CONFIGURATION \fBcupsaddsmb\fR uses the RPC-based printing support in SAMBA to provide printer drivers and PPD files to Windows client machines. In order to use this functionality, you must first configure the SAMBA .BR smb.conf (5) file to support printing through CUPS and provide a printer driver download share, as follows: .nf [global] load printers = yes printing = cups printcap name = cups [printers] comment = All Printers path = /var/spool/samba browseable = no public = yes guest ok = yes writable = no printable = yes [print$] comment = Printer Drivers path = /etc/samba/drivers browseable = yes guest ok = no read only = yes write list = root .fi This configuration assumes a FHS-compliant installation of SAMBA; adjust the [printers] and [print$] share paths accordingly on your system as needed. .SS MICROSOFT POSTSCRIPT DRIVERS FOR WINDOWS The base driver for Windows 2000 and higher is the Microsoft PostScript driver, which is available on any system running Windows 2000 or higher in the %WINDIR%\\SYSTEM32\\SPOOL\\DRIVERS\\W32X86\\3 folder for 32-bit drivers and %WINDIR%\\SYSTEM32\\SPOOL\\DRIVERS\\X64\\3 folder for 64-bit drivers. .LP Copy the 32-bit drivers to the \fI/usr/share/cups/drivers\fR directory and the 64-bit drivers to the \fI/usr/share/cups/drivers/x64\fR directory exactly as named below: .nf ps5ui.dll pscript.hlp pscript.ntf pscript5.dll .fi \fBNote:\fR Unlike Windows, case is significant - make sure that you use the lowercase filenames shown above, otherwise \fBcupsaddsmb\fR will fail to export the drivers. .SH OPTIONS \fBcupsaddsmb\fR supports the following options: .TP 5 \fB\-H \fIsamba-server\fR Specifies the SAMBA server which defaults to the CUPS server. .TP 5 \fB\-U \fIsamba-user\fR[\fB%\fIsamba-password\fR] Specifies the SAMBA print admin username which defaults to your current username. If the username contains a percent (%) character, then the text following the percent is treated as the SAMBA password to use. .TP 5 .B \-a Exports all known printers. Otherwise only the named printers are exported. .TP 5 \fB\-h \fIcups-server\fR[\fB:\fIport\fR] Specifies a different CUPS server to use. .TP 5 .B \-v Specifies that verbose information should be shown. This is useful for debugging SAMBA configuration problems. .SH SEE ALSO .BR rpcclient (1), .BR smbclient (1), .BR smbd (8), .BR smb.conf (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cupsctl.man000664 000765 000024 00000004747 13255074424 016114 0ustar00msweetstaff000000 000000 .\" .\" cupsctl man page for CUPS. .\" .\" Copyright 2007-2016 by Apple Inc. .\" Copyright 2007 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cupsctl 8 "CUPS" "30 May 2016" "Apple Inc." .SH NAME cupsctl \- configure cupsd.conf options .SH SYNOPSIS .B cupsctl [ .B \-E ] [ .B \-U .I username ] [ .B \-h \fIserver\fR[\fB:\fIport\fR] ] [ \fB\-\-\fR[\fBno\-\fR]\fBdebug\-logging\fR ] [ \fB\-\-\fR[\fBno\-\fR]\fBremote\-admin\fR ] [ \fB\-\-\fR[\fBno\-\fR]\fBremote\-any\fR ] [ \fB\-\-\fR[\fBno\-\fR]\fBshare\-printers\fR ] [ \fB\-\-\fR[\fBno\-\fR]\fBuser\-cancel\-any\fR ] [ .I name=value ] .SH DESCRIPTION \fBcupsctl\fR updates or queries the \fIcupsd.conf\fR file for a server. When no changes are requested, the current configuration values are written to the standard output in the format "name=value", one per line. .SH OPTIONS The following options are recognized: .TP 5 .B \-E Enables encryption on the connection to the scheduler. .TP 5 \fB\-U \fIusername\fR Specifies an alternate username to use when authenticating with the scheduler. .TP 5 \fB\-h \fIserver\fR[\fB:\fIport\fR] Specifies the server address. .TP 5 \fB\-\-\fR[\fBno\-\fR]\fBdebug\-logging\fR Enables (disables) debug logging to the \fIerror_log\fR file. .TP 5 \fB\-\-\fR[\fBno\-\fR]\fBremote\-admin\fR Enables (disables) remote administration. .TP 5 \fB\-\-\fR[\fBno\-\fR]\fBremote\-any\fR Enables (disables) printing from any address, e.g., the Internet. .TP 5 \fB\-\-\fR[\fBno\-\fR]\fBshare\-printers\fR Enables (disables) sharing of local printers with other computers. .TP 5 \fB\-\-\fR[\fBno\-\fR]\fBuser\-cancel\-any\fR Allows (prevents) users to cancel jobs owned by others. .SH EXAMPLES Display the current settings: .nf cupsctl .fi Enable debug logging: .nf cupsctl --debug-logging .fi Get the current debug logging state: .nf cupsctl | grep '^_debug_logging' | awk -F= '{print $2}' .fi Disable printer sharing: .nf cupsctl --no-share-printers .fi .SH KNOWN ISSUES You cannot set the Listen or Port directives using \fBcupsctl\fR. .SH SEE ALSO .BR cupsd.conf (5), .BR cupsd (8), .br CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cupsd-helper.man000664 000765 000024 00000004311 13255074424 017015 0ustar00msweetstaff000000 000000 .\" .\" cupsd-helper man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cupsd-helper 8 "CUPS" "15 April 2014" "Apple Inc." .SH NAME cupsd\-helper \- cupsd helper programs .SH SYNOPSIS .B cups\-deviced .I request-id .I limit .I user-id .I options .br .B cups\-driverd .B cat .I ppd-name .br .B cups\-driverd .B list .I request_id .I limit .I options .br .B cups\-exec .I sandbox-profile [ .I \-g .I group-id ] [ .I \-n .I nice-value ] [ .I \-u .I user-id ] .I /path/to/program .I argv0 .I ... .I argvN .SH DESCRIPTION The \fBcupsd\-helper\fR programs perform long-running operations on behalf of the scheduler, .BR cupsd (8). The \fBcups-deviced\fR helper program runs each CUPS .BR backend (7) with no arguments in order to discover the available printers. .LP The \fBcups-driverd\fR helper program lists all available printer drivers, a subset of "matching" printer drivers, or a copy of a specific driver PPD file. .LP The \fBcups-exec\fR helper program runs backends, filters, and other programs. On macOS these programs are run in a secure sandbox. .SH FILES The \fBcups-driverd\fR program looks for PPD and driver information files in the following directories: .nf \fI/Library/Printers\fR \fI/opt/share/ppd\fR \fI/System/Library/Printers\fR \fI/usr/local/share/ppd\fR \fI/usr/share/cups/drv\fR \fI/usr/share/cups/model\fR \fI/usr/share/ppd\fR .fi .LP PPD files can be compressed using the .BR gzip (1) program or placed in compressed .BR tar (1) archives to further reduce their size. .LP Driver information files must conform to the format defined in .BR ppdcfile (5). .SH SEE ALSO .BR backend (7), .BR cups (1), .BR cupsd (8), .BR cupsd.conf (5), .BR filter (7), .BR ppdcfile (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cupsd-logs.man000664 000765 000024 00000022531 13255074424 016506 0ustar00msweetstaff000000 000000 .\" .\" cupsd-logs man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cupsd-logs 5 "CUPS" "11 June 2014" "Apple Inc." .SH NAME cupsd\-logs \- cupsd log files (access_log, error_log, and page_log) .SH DESCRIPTION .BR cupsd (8) normally maintains three log files: \fIaccess_log\fR to track requests that are submitted to the scheduler, \fIerror_log\fR to track progress and errors, and \fIpage_log\fR to track pages that are printed. Configuration directives in .BR cupsd.conf (5) and .BR cups-files.conf (5) control what information is logged and where it is stored. .SS ACCESS LOG FILE FORMAT The \fIaccess_log\fR file lists each HTTP resource that is accessed by a web browser or client. Each line is in an extended version of the so-called "Common Log Format" used by many web servers and web reporting tools: .nf \fIhost group user date-time \fR"\fImethod resource version\fR" \fIstatus bytes ipp-operation ipp-status\fR .fi For example: .nf 10.0.1.2 - - [01/Dec/2005:21:50:28 +0000] "POST / HTTP/1.1" 200 317 CUPS-Get-Printers successful-ok-ignored-or-substituted-attributes localhost - - [01/Dec/2005:21:50:32 +0000] "GET /admin HTTP/1.1" 200 0 - - localhost - - [01/Dec/2005:21:50:32 +0000] "POST / HTTP/1.1" 200 157 CUPS-Get-Printers successful-ok-ignored-or-substituted-attributes localhost - - [01/Dec/2005:21:50:32 +0000] "POST / HTTP/1.1" 200 1411 CUPS-Get-Devices - localhost - - [01/Dec/2005:21:50:32 +0000] "GET /admin HTTP/1.1" 200 6667 - - .fi The \fIhost\fR field will normally only be an IP address unless you have enabled the HostNameLookups directive in the \fIcupsd.conf\fR file or if the IP address corresponds to your local machine. .LP The \fIgroup\fR field always contains "-". .LP The \fIuser\fR field is the authenticated username of the requesting user. If no username and password is supplied for the request then this field contains "-". .LP The \fIdate-time\fR field is the date and time of the request in local time and is in the format "[DD/MON/YYYY:HH:MM:SS +ZZZZ]". .LP The \fImethod\fR field is the HTTP method used: "GET", "HEAD", "OPTIONS", "POST", or "PUT". "GET" requests are used to get files from the server, both for the web interface and to get configuration and log files. "HEAD" requests are used to get information about a resource prior to a "GET". "OPTIONS" requests are used to upgrade connections to TLS encryption. "POST" requests are used for web interface forms and IPP requests. "PUT" requests are used to upload configuration files. .LP The \fIresource\fR field is the filename of the requested resource. .LP The \fIversion\fR field is the HTTP specification version used by the client. For CUPS clients this will always be "HTTP/1.1". .LP The \fIstatus\fR field contains the HTTP result status of the request, as follows: .RS 5 .TP 5 200 Successful operation. .TP 5 201 File created/modified successfully. .TP 5 304 The requested file has not changed. .TP 5 400 Bad HTTP request; typically this means that you have a malicious program trying to access your server. .TP 5 401 Unauthorized, authentication (username + password) is required. .TP 5 403 Access is forbidden; typically this means that a client tried to access a file or resource they do not have permission to access. .TP 5 404 The file or resource does not exist. .TP 5 405 URL access method is not allowed; typically this means you have a web browser using your server as a proxy. .TP 5 413 Request too large; typically this means that a client tried to print a file larger than the MaxRequestSize allows. .TP 5 426 Upgrading to TLS-encrypted connection. .TP 5 500 Server error; typically this happens when the server is unable to open/create a file - consult the error_log file for details. .TP 5 501 The client requested encryption but encryption support is not enabled/compiled in. .TP 5 505 HTTP version number not supported; typically this means that you have a malicious program trying to access your server. .RE .LP The \fIbytes\fR field contains the number of bytes in the request. For POST requests the bytes field contains the number of bytes of non-IPP data that is received from the client. .LP The \fIipp-operation\fR field contains either "-" for non-IPP requests or the IPP operation name for POST requests containing an IPP request. .LP The \fIipp-status\fR field contains either "-" for non-IPP requests or the IPP status code name for POST requests containing an IPP response. .SS ERROR LOG FILE FORMAT The \fIerror_log\fR file lists messages from the scheduler - errors, warnings, etc. The LogLevel directive in the .BR cupsd.conf (5) file controls which messages are logged: .nf level date-time message .fi For example: .nf I [20/May/1999:19:18:28 +0000] [Job 1] Queued on 'DeskJet' by 'mike'. D [20/May/1999:19:18:28 +0000] [Job 1] argv[0]="DeskJet" D [20/May/1999:19:18:28 +0000] [Job 1] argv[1]="1" D [20/May/1999:19:18:28 +0000] [Job 1] argv[2]="mike" D [20/May/1999:19:18:28 +0000] [Job 1] argv[3]="myjob" D [20/May/1999:19:18:28 +0000] [Job 1] argv[4]="1" D [20/May/1999:19:18:28 +0000] [Job 1] argv[5]="media= na_letter_8.5x11in sides=one-sided" D [20/May/1999:19:18:28 +0000] [Job 1] argv[6]="/var/spool/cups/ d000001-001" I [20/May/1999:19:21:02 +0000] [Job 2] Queued on 'DeskJet' by 'mike'. I [20/May/1999:19:22:24 +0000] [Job 2] Canceled by 'mike'. .fi The \fIlevel\fR field contains the type of message: .TP 5 A Alert message (LogLevel alert) .TP 5 C Critical error message (LogLevel crit) .TP 5 D Debugging message (LogLevel debug) .TP 5 d Detailed debugging message (LogLevel debug2) .TP 5 E Normal error message (LogLevel error) .TP 5 I Informational message (LogLevel info) .TP 5 N Notice message (LogLevel notice) .TP 5 W Warning message (LogLevel warn) .TP 5 X Emergency error message (LogLevel emerg) .LP The \fIdate-time\fR field contains the date and time of when the page started printing. The format of this field is identical to the data-time field in the \fIaccess_log\fR file. .LP The \fImessage\fR field contains a free-form textual message. Messages from job filters are prefixed with "[Job NNN]" where "NNN" is the job ID. .SS PAGE LOG FILE FORMAT The \fIpage_log\fR file lists each page or group of pages that are sent to a printer. By default, each line contains the following information: .nf \fIprinter user job-id date-time page-number num-copies job-billing job-originating-host-name job-name media sides\fR \fIprinter user job-id date-time \fBtotal \fInum-impressions job-billing job-originating-host-name job-name media sides\fR .fi For example the entries for a two page job called "myjob" might look like: .nf DeskJet root 1 [20/May/1999:19:21:05 +0000] 1 1 acme-123 localhost myjob na_letter_8.5x11in one-sided DeskJet root 1 [20/May/1999:19:21:05 +0000] 2 1 acme-123 localhost myjob na_letter_8.5x11in one-sided DeskJet root 1 [20/May/1999:19:21:06 +0000] total 2 acme-123 localhost myjob na_letter_8.5x11in one-sided .fi The PageLogFormat directive in the .BR cupsd.conf (5) file can be used to change this information. .LP The \fIprinter\fR field contains the name of the printer that printed the page. If you send a job to a printer class, this field will contain the name of the printer that was assigned the job. .LP The \fIuser\fR field contains the name of the user (the IPP requesting-user-name attribute) that submitted this file for printing. .LP The \fIjob-id\fR field contains the job number of the page being printed. .LP The \fIdate-time\fR field contains the date and time of when the page started printing. The format of this field is identical to the data-time field in the \fIaccess_log\fR file. .LP The \fIpage-number\fR and \fInum-copies\fR fields contain the page number and number of copies being printed of that page. For printers that cannot produce copies on their own, the num-copies field will always be 1. .LP Lines containing the keyword "total" have a \fInum-impressions\fR field instead which provides the total number of impressions (sides) that have been printed on for the job. .LP The \fIjob-billing\fR field contains a copy of the job-billing or job-account-id attributes provided with the IPP Create-Job or Print-Job requests or "-" if neither was provided. .LP The \fIjob-originating-host-name\fR field contains the hostname or IP address of the client that printed the job. .LP The \fIjob-name\fR field contains a copy of the job-name attribute provided with the IPP Create-Job or Print-Job requests or "-" if none was provided. .LP The \fImedia\fR field contains a copy of the media or media-col/media-size attribute provided with the IPP Create-Job or Print-Job requests or "-" if none was provided. .LP The \fIsides\fR field contains a copy of the sides attribute provided with the IPP Create-Job or Print-Job requests or "-" if none was provided. .SH SEE ALSO .BR cupsd (8), .BR cupsd.conf (5), .BR cups-files.conf (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cupsd.conf.man.in000664 000765 000024 00000067575 13255074424 017116 0ustar00msweetstaff000000 000000 .\" .\" cupsd.conf man page for CUPS. .\" .\" Copyright 2007-2017 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cupsd.conf 5 "CUPS" "19 October 2017" "Apple Inc." .SH NAME cupsd.conf \- server configuration file for cups .SH DESCRIPTION The .I cupsd.conf file configures the CUPS scheduler, .BR cupsd (8). It is normally located in the .I /etc/cups directory. \fBNote:\fR File, directory, and user configuration directives that used to be allowed in the \fBcupsd.conf\fR file are now stored in the .BR cups-files.conf (5) file instead in order to prevent certain types of privilege escalation attacks. .LP Each line in the file can be a configuration directive, a blank line, or a comment. Configuration directives typically consist of a name and zero or more values separated by whitespace. The configuration directive name and values are case-insensitive. Comment lines start with the # character. .SS TOP-LEVEL DIRECTIVES The following top-level directives are understood by .BR cupsd (8): .\"#AccessLogLevel .TP 5 \fBAccessLogLevel config\fR .TP 5 \fBAccessLogLevel actions\fR .TP 5 \fBAccessLogLevel all\fR Specifies the logging level for the AccessLog file. The "config" level logs when printers and classes are added, deleted, or modified and when configuration files are accessed or updated. The "actions" level logs when print jobs are submitted, held, released, modified, or canceled, and any of the conditions for "config". The "all" level logs all requests. The default access log level is "actions". .\"#AutoPurgeJobs .TP 5 \fBAutoPurgeJobs Yes\fR .TP 5 \fBAutoPurgeJobs No\fR .br Specifies whether to purge job history data automatically when it is no longer required for quotas. The default is "No". .\"#BrowseLocalProtocols .TP 5 \fBBrowseLocalProtocols all\fR .TP 5 \fBBrowseLocalProtocols dnssd\fR .TP 5 \fBBrowseLocalProtocols none\fR Specifies which protocols to use for local printer sharing. The default is "dnssd" on systems that support Bonjour and "none" otherwise. .\"#BrowseWebIF .TP 5 \fBBrowseWebIF Yes\fR .TP 5 \fBBrowseWebIF No\fR .br Specifies whether the CUPS web interface is advertised. The default is "No". .\"#Browsing .TP 5 \fBBrowsing Yes\fR .TP 5 \fBBrowsing No\fR .br Specifies whether shared printers are advertised. The default is "No". .\"#DefaultAuthType .TP 5 \fBDefaultAuthType Basic\fR .TP 5 \fBDefaultAuthType Negotiate\fR .br Specifies the default type of authentication to use. The default is "Basic". .\"#DefaultEncryption .TP 5 \fBDefaultEncryption Never\fR .TP 5 \fBDefaultEncryption IfRequested\fR .TP 5 \fBDefaultEncryption Required\fR Specifies whether encryption will be used for authenticated requests. The default is "Required". .\"#DefaultLanguage .TP 5 \fBDefaultLanguage \fIlocale\fR Specifies the default language to use for text and web content. The default is "en". .\"#DefaultPaperSize .TP 5 \fBDefaultPaperSize Auto\fR .TP 5 \fBDefaultPaperSize None\fR .TP 5 \fBDefaultPaperSize \fIsizename\fR Specifies the default paper size for new print queues. "Auto" uses a locale-specific default, while "None" specifies there is no default paper size. Specific size names are typically "Letter" or "A4". The default is "Auto". .\"#DefaultPolicy .TP 5 \fBDefaultPolicy \fIpolicy-name\fR Specifies the default access policy to use. The default access policy is "default". .\"#DefaultShared .TP 5 \fBDefaultShared Yes\fR .TP 5 \fBDefaultShared No\fR Specifies whether local printers are shared by default. The default is "Yes". .\"#DirtyCleanInterval .TP 5 \fBDirtyCleanInterval \fIseconds\fR Specifies the delay for updating of configuration and state files. A value of 0 causes the update to happen as soon as possible, typically within a few milliseconds. The default value is "30". .\"#ErrorPolicy .TP 5 \fBErrorPolicy abort-job\fR Specifies that a failed print job should be aborted (discarded) unless otherwise specified for the printer. .TP 5 \fBErrorPolicy retry-job\fR Specifies that a failed print job should be retried at a later time unless otherwise specified for the printer. .TP 5 \fBErrorPolicy retry-this-job\fR Specifies that a failed print job should be retried immediately unless otherwise specified for the printer. .TP 5 \fBErrorPolicy stop-printer\fR Specifies that a failed print job should stop the printer unless otherwise specified for the printer. The 'stop-printer' error policy is the default. .\"#FilterLimit .TP 5 \fBFilterLimit \fIlimit\fR Specifies the maximum cost of filters that are run concurrently, which can be used to minimize disk, memory, and CPU resource problems. A limit of 0 disables filter limiting. 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. The default limit is "0". .\"#FilterNice .TP 5 \fBFilterNice \fInice-value\fR Specifies the scheduling priority ( .BR nice (8) value) of filters that are run to print a job. The nice value ranges from 0, the highest priority, to 19, the lowest priority. The default is 0. .\"#GSSServiceName .TP 5 \fBGSSServiceName \fIname\fR Specifies the service name when using Kerberos authentication. The default service name is "http." .TP 5 .\"#HostNameLookups \fBHostNameLookups On\fR .TP 5 \fBHostNameLookups Off\fR .TP 5 \fBHostNameLookups Double\fR Specifies whether to do reverse lookups on connecting clients. The "Double" setting causes .BR cupsd (8) to verify that the hostname resolved from the address matches one of the addresses returned for that hostname. Double lookups also prevent clients with unregistered addresses from connecting to your server. The default is "Off" to avoid the potential server performance problems with hostname lookups. Only set this option to "On" or "Double" if absolutely required. .\"#IdleExitTimeout .TP 5 \fBIdleExitTimeout \fIseconds\fR Specifies the length of time to wait before shutting down due to inactivity. The default is "60" seconds. Note: Only applicable when .BR cupsd (8) is run on-demand (e.g., with \fB-l\fR). .\"#JobKillDelay .TP 5 \fBJobKillDelay \fIseconds\fR Specifies the number of seconds to wait before killing the filters and backend associated with a canceled or held job. The default is "30". .\"#JobRetryInterval .TP 5 \fBJobRetryInterval \fIseconds\fR Specifies the interval between retries of jobs in seconds. This is typically used for fax queues but can also be used with normal print queues whose error policy is "retry-job" or "retry-current-job". The default is "30". .\"#JobRetryLimit .TP 5 \fBJobRetryLimit \fIcount\fR Specifies the number of retries that are done for jobs. This is typically used for fax queues but can also be used with normal print queues whose error policy is "retry-job" or "retry-current-job". The default is "5". .\"#KeepAlive .TP 5 \fBKeepAlive Yes\fR .TP 5 \fBKeepAlive No\fR Specifies whether to support HTTP keep-alive connections. The default is "Yes". .\"#KeepAliveTimeout .TP 5 \fBKeepAliveTimeout \fIseconds\fR Specifies how long an idle client connection remains open. The default is "30". .\"#LimitIPP .TP 5 \fB \fR... \fB\fR Specifies the IPP operations that are being limited inside a Policy section. IPP operation names are listed below in the section "IPP OPERATION NAMES". .\"#Limit .TP 5 \fB \fR... \fB\fR .\"#LimitExcept .TP 5 \fB \fR... \fB\fR Specifies the HTTP methods that are being limited inside a Location section. HTTP method names are listed below in the section "HTTP METHOD NAMES". .\"#LimitRequestBody .TP 5 \fBLimitRequestBody \fIsize\fR Specifies the maximum size of print files, IPP requests, and HTML form data. The default is "0" which disables the limit check. .\"#Listen .TP 5 \fBListen \fIipv4-address\fB:\fIport\fR .TP 5 \fBListen [\fIipv6-address\fB]:\fIport\fR .TP 5 \fBListen *:\fIport\fR .TP 5 \fBListen \fI/path/to/domain/socket\fR Listens to the specified address and port or domain socket path for connections. Multiple Listen directives can be provided to listen on multiple addresses. The Listen directive is similar to the Port directive but allows you to restrict access to specific interfaces or networks. .\"#ListenBackLog .TP 5 \fBListenBackLog \fInumber\fR Specifies the number of pending connections that will be allowed. This normally only affects very busy servers that have reached the MaxClients limit, but can also be triggered by large numbers of simultaneous connections. When the limit is reached, the operating system will refuse additional connections until the scheduler can accept the pending ones. The default is the OS-defined default limit, typically either "5" for older operating systems or "128" for newer operating systems. .\"#Location .TP 5 \fB \fR... \fB\fR Specifies access control for the named location. Paths are documented below in the section "LOCATION PATHS". .\"#LogDebugHistory .TP 5 \fBLogDebugHistory \fInumber\fR Specifies the number of debugging messages that are retained for logging if an error occurs in a print job. Debug messages are logged regardless of the LogLevel setting. .\"#LogLevel .TP 5 \fBLogLevel \fRnone .TP 5 \fBLogLevel \fRemerg .TP 5 \fBLogLevel \fRalert .TP 5 \fBLogLevel \fRcrit .TP 5 \fBLogLevel \fRerror .TP 5 \fBLogLevel \fRwarn .TP 5 \fBLogLevel \fRnotice .TP 5 \fBLogLevel \fRinfo .TP 5 \fBLogLevel \fRdebug .TP 5 \fBLogLevel \fRdebug2 Specifies the level of logging for the ErrorLog file. The value "none" stops all logging while "debug2" logs everything. The default is "warn". .\"#LogTimeFormat .TP 5 \fBLogTimeFormat \fRstandard .TP 5 \fBLogTimeFormat \fRusecs Specifies the format of the date and time in the log files. The value "standard" is the default and logs whole seconds while "usecs" logs microseconds. .\"#MaxClients .TP 5 \fBMaxClients \fInumber\fR Specifies the maximum number of simultaneous clients that are allowed by the scheduler. The default is "100". .\"#MaxClientPerHost .TP 5 \fBMaxClientsPerHost \fInumber\fR Specifies the maximum number of simultaneous clients that are allowed from a single address. The default is the MaxClients value. .\"#MaxCopies .TP 5 \fBMaxCopies \fInumber\fR Specifies the maximum number of copies that a user can print of each job. The default is "9999". .\"#MaxHoldTime .TP 5 \fBMaxHoldTime \fIseconds\fR Specifies the maximum time a job may remain in the "indefinite" hold state before it is canceled. The default is "0" which disables cancellation of held jobs. .\"#MaxJobs .TP 5 \fBMaxJobs \fInumber\fR Specifies the maximum number of simultaneous jobs that are allowed. Set to "0" to allow an unlimited number of jobs. The default is "500". .\"#MaxJobsPerPrinter .TP 5 \fBMaxJobsPerPrinter \fInumber\fR Specifies the maximum number of simultaneous jobs that are allowed per printer. The default is "0" which allows up to MaxJobs jobs per printer. .\"#MaxJobsPerUser .TP 5 \fBMaxJobsPerUser \fInumber\fR Specifies the maximum number of simultaneous jobs that are allowed per user. The default is "0" which allows up to MaxJobs jobs per user. .\"#MaxJobTime .TP 5 \fBMaxJobTime \fIseconds\fR Specifies the maximum time a job may take to print before it is canceled. Set to "0" to disable cancellation of "stuck" jobs. The default is "10800" (3 hours). .\"#MaxLogSize .TP 5 \fBMaxLogSize \fIsize\fR Specifies the maximum size of the log files before they are rotated. The value "0" disables log rotation. The default is "1048576" (1MB). .\"#MultipleOperationTimeout .TP 5 \fBMultipleOperationTimeout \fIseconds\fR Specifies the maximum amount of time to allow between files in a multiple file print job. The default is "300" (5 minutes). .\"#PassEnv .TP 5 \fBPassEnv \fIvariable \fR[ ... \fIvariable \fR] Passes the specified environment variable(s) to child processes. .\"#Policy .TP 5 \fB \fR... \fB\fR Specifies access control for the named policy. .\"#Port .TP 5 \fBPort \fInumber\fR Listens to the specified port number for connections. .\"#PreserveJobFiles .TP 5 \fBPreserveJobFiles Yes\fR .TP 5 \fBPreserveJobFiles No\fR .TP 5 \fBPreserveJobFiles \fIseconds\fR Specifies whether job files (documents) are preserved after a job is printed. If a numeric value is specified, job files are preserved for the indicated number of seconds after printing. The default is "86400" (preserve 1 day). .\"#PreserveJobHistory .TP 5 \fBPreserveJobHistory Yes\fR .TP 5 \fBPreserveJobHistory No\fR .TP 5 \fBPreserveJobHistory \fIseconds\fR Specifies whether the job history is preserved after a job is printed. If a numeric value is specified, the job history is preserved for the indicated number of seconds after printing. If "Yes", the job history is preserved until the MaxJobs limit is reached. The default is "Yes". .\"#ReloadTimeout .TP 5 \fBReloadTimeout \fIseconds\fR Specifies the amount of time to wait for job completion before restarting the scheduler. The default is "30". .\"#ServerAdmin .TP 5 \fBServerAdmin \fIemail-address\fR Specifies the email address of the server administrator. The default value is "root@ServerName". .\"#ServerAlias .TP 5 \fBServerAlias \fIhostname \fR[ ... \fIhostname \fR] .TP 5 \fBServerAlias *\fR The ServerAlias directive is used for HTTP Host header validation when clients connect to the scheduler from external interfaces. Using the special name "*" can expose your system to known browser-based DNS rebinding attacks, even when accessing sites through a firewall. If the auto-discovery of alternate names does not work, we recommend listing each alternate name with a ServerAlias directive instead of using "*". .\"#ServerName .TP 5 \fBServerName \fIhostname\fR Specifies the fully-qualified hostname of the server. The default is the value reported by the .BR hostname (1) command. .\"#ServerTokens .TP 5 \fBServerTokens None\fR .TP 5 \fBServerTokens ProductOnly\fR .TP 5 \fBServerTokens Major\fR .TP 5 \fBServerTokens Minor\fR .TP 5 \fBServerTokens Minimal\fR .TP 5 \fBServerTokens OS\fR .TP 5 \fBServerTokens Full\fR Specifies what information is included in the Server header of HTTP responses. "None" disables the Server header. "ProductOnly" reports "CUPS". "Major" reports "CUPS 2". "Minor" reports "CUPS 2.0". "Minimal" reports "CUPS 2.0.0". "OS" reports "CUPS 2.0.0 (UNAME)" where UNAME is the output of the .BR uname (1) command. "Full" reports "CUPS 2.0.0 (UNAME) IPP/2.0". The default is "Minimal". .\"#SetEnv .TP 5 \fBSetEnv \fIvariable value\fR Set the specified environment variable to be passed to child processes. .\"#SSLListen .TP 5 \fBSSLListen \fIipv4-address\fB:\fIport\fR .TP 5 \fBSSLListen [\fIipv6-address\fB]:\fIport\fR .TP 5 \fBSSLListen *:\fIport\fR Listens on the specified address and port for encrypted connections. .\"#SSLOptions .TP 5 \fBSSLOptions \fR[\fIAllowDH\fR] [\fIAllowRC4\fR] [\fIAllowSSL3\fR] [\fIDenyCBC\fR] [\fIDenyTLS1.0\fR] .TP 5 \fBSSLOptions None\fR Sets encryption options. By default, CUPS only supports encryption using TLS v1.0 or higher using known secure cipher suites. Security is reduced when \fIAllow\fR options are used. Security is enhanced when \fIDeny\fR options are used. The \fIAllowDH\fR option enables cipher suites using plain Diffie-Hellman key negotiation (not supported on systems using GNU TLS). The \fIAllowRC4\fR option enables the 128-bit RC4 cipher suites, which are required for some older clients. The \fIAllowSSL3\fR option enables SSL v3.0, which is required for some older clients that do not support TLS v1.0. The \fIDenyCBC\fR option disables all CBC cipher suites. The \fIDenyTLS1.0\fR option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1. .\"#SSLPort .TP 5 \fBSSLPort \fIport\fR Listens on the specified port for encrypted connections. .\"#StrictConformance .TP 5 \fBStrictConformance Yes\fR .TP 5 \fBStrictConformance No\fR Specifies whether the scheduler requires clients to strictly adhere to the IPP specifications. The default is "No". .\"#Timeout .TP 5 \fBTimeout \fIseconds\fR Specifies the HTTP request timeout. The default is "300" (5 minutes). .\"#WebInterface .TP 5 \fBWebInterface yes\fR .TP 5 \fBWebInterface no\fR Specifies whether the web interface is enabled. The default is "No". .SS HTTP METHOD NAMES The following HTTP methods are supported by .BR cupsd (8): .TP 5 GET Used by a client to download icons and other printer resources and to access the CUPS web interface. .TP 5 HEAD Used by a client to get the type, size, and modification date of resources. .TP 5 OPTIONS Used by a client to establish a secure (SSL/TLS) connection. .TP 5 POST Used by a client to submit IPP requests and HTML forms from the CUPS web interface. .TP 5 PUT Used by a client to upload configuration files. .SS IPP OPERATION NAMES The following IPP operations are supported by .BR cupsd (8): .TP 5 CUPS\-Accept\-Jobs Allows a printer to accept new jobs. .TP 5 CUPS\-Add\-Modify\-Class Adds or modifies a printer class. .TP 5 CUPS\-Add\-Modify\-Printer Adds or modifies a printer. .TP 5 CUPS\-Authenticate\-Job Releases a job that is held for authentication. .TP 5 CUPS\-Delete\-Class Deletes a printer class. .TP 5 CUPS\-Delete\-Printer Deletes a printer. .TP 5 CUPS\-Get\-Classes Gets a list of printer classes. .TP 5 CUPS\-Get\-Default Gets the server default printer or printer class. .TP 5 CUPS\-Get\-Devices Gets a list of devices that are currently available. .TP 5 CUPS\-Get\-Document Gets a document file for a job. .TP 5 CUPS\-Get\-PPD Gets a PPD file. .TP 5 CUPS\-Get\-PPDs Gets a list of installed PPD files. .TP 5 CUPS\-Get\-Printers Gets a list of printers. .TP 5 CUPS\-Move\-Job Moves a job. .TP 5 CUPS\-Reject\-Jobs Prevents a printer from accepting new jobs. .TP 5 CUPS\-Set\-Default Sets the server default printer or printer class. .TP 5 Cancel\-Job Cancels a job. .TP 5 Cancel\-Jobs Cancels one or more jobs. .TP 5 Cancel\-My\-Jobs Cancels one or more jobs creates by a user. .TP 5 Cancel\-Subscription Cancels a subscription. .TP 5 Close\-Job Closes a job that is waiting for more documents. .TP 5 Create\-Job Creates a new job with no documents. .TP 5 Create\-Job\-Subscriptions Creates a subscription for job events. .TP 5 Create\-Printer\-Subscriptions Creates a subscription for printer events. .TP 5 Get\-Job\-Attributes Gets information about a job. .TP 5 Get\-Jobs Gets a list of jobs. .TP 5 Get\-Notifications Gets a list of event notifications for a subscription. .TP 5 Get\-Printer\-Attributes Gets information about a printer or printer class. .TP 5 Get\-Subscription\-Attributes Gets information about a subscription. .TP 5 Get\-Subscriptions Gets a list of subscriptions. .TP 5 Hold\-Job Holds a job from printing. .TP 5 Hold\-New\-Jobs Holds all new jobs from printing. .TP 5 Pause\-Printer Stops processing of jobs by a printer or printer class. .TP 5 Pause\-Printer\-After\-Current\-Job Stops processing of jobs by a printer or printer class after the current job is finished. .TP 5 Print\-Job Creates a new job with a single document. .TP 5 Purge\-Jobs Cancels one or more jobs and deletes the job history. .TP 5 Release\-Held\-New\-Jobs Allows previously held jobs to print. .TP 5 Release\-Job Allows a job to print. .TP 5 Renew\-Subscription Renews a subscription. .TP 5 Restart\-Job Reprints a job, if possible. .TP 5 Send\-Document Adds a document to a job. .TP 5 Set\-Job\-Attributes Changes job information. .TP 5 Set\-Printer\-Attributes Changes printer or printer class information. .TP 5 Validate\-Job Validates options for a new job. .SS LOCATION PATHS The following paths are commonly used when configuring .BR cupsd (8): .TP 5 / The path for all get operations (get-printers, get-jobs, etc.) .TP 5 /admin The path for all administration operations (add-printer, delete-printer, start-printer, etc.) .TP 5 /admin/conf The path for access to the CUPS configuration files (cupsd.conf, client.conf, etc.) .TP 5 /admin/log The path for access to the CUPS log files (access_log, error_log, page_log) .TP 5 /classes The path for all printer classes .TP 5 /classes/name The resource for the named printer class .TP 5 /jobs The path for all jobs (hold-job, release-job, etc.) .TP 5 /jobs/id The path for the specified job .TP 5 /printers The path for all printers .TP 5 /printers/name The path for the named printer .TP 5 /printers/name.png The icon file path for the named printer .TP 5 /printers/name.ppd The PPD file path for the named printer .SS DIRECTIVES VALID WITHIN LOCATION AND LIMIT SECTIONS The following directives may be placed inside Location and Limit sections in the \fBcupsd.conf\fR file: .TP 5 \fBAllow all\fR .TP 5 \fBAllow none\fR .TP 5 \fBAllow \fIhost.domain.com\fR .TP 5 \fBAllow *.\fIdomain.com\fR .TP 5 \fBAllow \fIipv4-address\fR .TP 5 \fBAllow \fIipv4-address\fB/\fInetmask\fR .TP 5 \fBAllow \fIipv4-address\fB/\fImm\fR .TP 5 \fBAllow [\fIipv6-address\fB]\fR .TP 5 \fBAllow [\fIipv6-address\fB]/\fImm\fR .TP 5 \fBAllow @IF(\fIname\fB)\fR .TP 5 \fBAllow @LOCAL\fR Allows access from the named hosts, domains, addresses, or interfaces. The Order directive controls whether Allow lines are evaluated before or after Deny lines. .TP 5 \fBAuthType None\fR .TP 5 \fBAuthType Basic\fR .TP 5 \fBAuthType Default\fR .TP 5 \fBAuthType Negotiate\fR Specifies the type of authentication required. The value "Default" corresponds to the DefaultAuthType value. .TP 5 \fBDeny all\fR .TP 5 \fBDeny none\fR .TP 5 \fBDeny \fIhost.domain.com\fR .TP 5 \fBDeny *.\fIdomain.com\fR .TP 5 \fBDeny \fIipv4-address\fR .TP 5 \fBDeny \fIipv4-address\fB/\fInetmask\fR .TP 5 \fBDeny \fIipv4-address\fB/\fImm\fR .TP 5 \fBDeny [\fIipv6-address\fB]\fR .TP 5 \fBDeny [\fIipv6-address\fB]/\fImm\fR .TP 5 \fBDeny @IF(\fIname\fB)\fR .TP 5 \fBDeny @LOCAL\fR Denies access from the named hosts, domains, addresses, or interfaces. The Order directive controls whether Deny lines are evaluated before or after Allow lines. .TP 5 \fBEncryption IfRequested\fR .TP 5 \fBEncryption Never\fR .TP 5 \fBEncryption Required\fR Specifies the level of encryption that is required for a particular location. The default value is "IfRequested". .TP 5 \fBOrder allow,deny\fR Specifies that access is denied by default. Allow lines are then processed followed by Deny lines to determine whether a client may access a particular resource. .TP 5 \fBOrder deny,allow\fR Specifies that access is allowed by default. Deny lines are then processed followed by Allow lines to determine whether a client may access a particular resource. .TP 5 \fBRequire group \fIgroup-name \fR[ \fIgroup-name \fR... ] Specifies that an authenticated user must be a member of one of the named groups. .TP 5 \fBRequire user {\fIuser-name\fR|\fB@\fIgroup-name\fR} ... Specifies that an authenticated user must match one of the named users or be a member of one of the named groups. The group name "@SYSTEM" corresponds to the list of groups defined by the SystemGroup directive in the .BR cups-files.conf (5) file. The group name "@OWNER" corresponds to the owner of the resource, for example the person that submitted a print job. Note: The 'root' user is not special and must be granted privileges like any other user account. .TP 5 \fBRequire valid-user\fR Specifies that any authenticated user is acceptable. .TP 5 \fBSatisfy all\fR Specifies that all Allow, AuthType, Deny, Order, and Require conditions must be satisfied to allow access. .TP 5 \fBSatisfy any\fR Specifies that any a client may access a resource if either the authentication (AuthType/Require) or address (Allow/Deny/Order) conditions are satisfied. For example, this can be used to require authentication only for remote accesses. .SS DIRECTIVES VALID WITHIN POLICY SECTIONS The following directives may be placed inside Policy sections in the \fBcupsd.conf\fR file: .TP 5 \fBJobPrivateAccess all\fR .TP 5 \fBJobPrivateAccess default\fR .TP 5 \fBJobPrivateAccess \fR{\fIuser\fR|\fB@\fIgroup\fR|\fB@ACL\fR|\fB@OWNER\fR|\fB@SYSTEM\fR} ... Specifies an access list for a job's private values. The "default" access list is "@OWNER @SYSTEM". "@ACL" maps to the printer's requesting-user-name-allowed or requesting-user-name-denied values. "@OWNER" maps to the job's owner. "@SYSTEM" maps to the groups listed for the SystemGroup directive in the .BR cups-files.conf (5) file. .TP 5 \fBJobPrivateValues all\fR .TP 5 \fBJobPrivateValues default\fR .TP 5 \fBJobPrivateValues none\fR .TP 5 \fBJobPrivateValues \fIattribute-name \fR[ ... \fIattribute-name \fR] Specifies the list of job values to make private. The "default" values are "job-name", "job-originating-host-name", "job-originating-user-name", and "phone". .TP 5 \fBSubscriptionPrivateAccess all\fR .TP 5 \fBSubscriptionPrivateAccess default\fR .TP 5 \fBSubscriptionPrivateAccess \fR{\fIuser\fR|\fB@\fIgroup\fR|\fB@ACL\fR|\fB@OWNER\fR|\fB@SYSTEM\fR} ... Specifies an access list for a subscription's private values. The "default" access list is "@OWNER @SYSTEM". "@ACL" maps to the printer's requesting-user-name-allowed or requesting-user-name-denied values. "@OWNER" maps to the job's owner. "@SYSTEM" maps to the groups listed for the SystemGroup directive in the .BR cups-files.conf (5) file. .TP 5 \fBSubscriptionPrivateValues all\fR .TP 5 \fBSubscriptionPrivateValues default\fR .TP 5 \fBSubscriptionPrivateValues none\fR .TP 5 \fBSubscriptionPrivateValues \fIattribute-name \fR[ ... \fIattribute-name \fR] Specifies the list of subscription values to make private. The "default" values are "notify-events", "notify-pull-method", "notify-recipient-uri", "notify-subscriber-user-name", and "notify-user-data". .SS DEPRECATED DIRECTIVES The following directives are deprecated and will be removed in a future release of CUPS: .\"#Classification .TP 5 \fBClassification \fIbanner\fR .br Specifies the security classification of the server. Any valid banner name can be used, including "classified", "confidential", "secret", "topsecret", and "unclassified", or the banner can be omitted to disable secure printing functions. The default is no classification banner. .\"#ClassifyOverride .TP 5 \fBClassifyOverride Yes\fR .TP 5 \fBClassifyOverride No\fR .br Specifies whether users may override the classification (cover page) of individual print jobs using the "job-sheets" option. The default is "No". .\"#PageLogFormat .TP 5 \fBPageLogFormat \fIformat-string\fR Specifies the format of PageLog lines. Sequences beginning with percent (%) characters are replaced with the corresponding information, while all other characters are copied literally. The following percent sequences are recognized: .nf "%%" inserts a single percent character. "%{name}" inserts the value of the specified IPP attribute. "%C" inserts the number of copies for the current page. "%P" inserts the current page number. "%T" inserts the current date and time in common log format. "%j" inserts the job ID. "%p" inserts the printer name. "%u" inserts the username. .fi The default is the empty string, which disables page logging. The string "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}" creates a page log with the standard items. .\"#RIPCache .TP 5 \fBRIPCache \fIsize\fR Specifies the maximum amount of memory to use when converting documents into bitmaps for a printer. The default is "128m". .SH CONFORMING TO The \fBcupsd.conf\fR file format is based on the Apache HTTP Server configuration file format. .SH EXAMPLES Log everything with a maximum log file size of 32 megabytes: .nf AccessLogLevel all LogLevel debug2 MaxLogSize 32m .fi Require authentication for accesses from outside the 10. network: .nf Order allow,deny Allow from 10./8 AuthType Basic Require valid-user Satisfy any .fi .SH SEE ALSO .BR classes.conf (5), .BR cups-files.conf (5), .BR cupsd (8), .BR mime.convs (5), .BR mime.types (5), .BR printers.conf (5), .BR subscriptions.conf (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cupsd.man.in000664 000765 000024 00000005302 13255074424 016146 0ustar00msweetstaff000000 000000 .\" .\" cupsd man page for CUPS. .\" .\" Copyright 2007-2016 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cupsd 8 "CUPS" "12 February 2016" "Apple Inc." .SH NAME cupsd \- cups scheduler .SH SYNOPSIS .B cupsd [ .B \-c .I cupsd.conf ] [ .B \-f ] [ .B \-F ] [ .B \-h ] [ .B \-l ] [ .B \-s .I cups-files.conf ] [ .B \-t ] .SH DESCRIPTION .B cupsd is the scheduler for CUPS. It implements a printing system based upon the Internet Printing Protocol, version 2.1, and supports most of the requirements for IPP Everywhere. If no options are specified on the command-line then the default configuration file .I /etc/cups/cupsd.conf will be used. .SH OPTIONS .TP 5 .BI \-c \ cupsd.conf Uses the named cupsd.conf configuration file. .TP 5 .B \-f Run .B cupsd in the foreground; the default is to run in the background as a "daemon". .TP 5 .B \-F Run .B cupsd in the foreground but detach the process from the controlling terminal and current directory. This is useful for running .B cupsd from .BR init (8). .TP 5 .B \-h Shows the program usage. .TP 5 .B \-l This option is passed to .B cupsd when it is run from .BR launchd (8) or .BR systemd (8). .TP 5 .BI \-s \ cups-files.conf Uses the named cups-files.conf configuration file. .TP 5 .B \-t Test the configuration file for syntax errors. .SH FILES .nf .I /etc/cups/classes.conf .I /etc/cups/cups-files.conf .I /etc/cups/cupsd.conf .I /usr/share/cups/mime/mime.convs .I /usr/share/cups/mime/mime.types .I /etc/cups/printers.conf .I /etc/cups/subscriptions.conf .fi .SH CONFORMING TO .B cupsd implements all of the required IPP/2.1 attributes and operations. It also implements several CUPS-specific administrative operations. .SH EXAMPLES Run .B cupsd in the background with the default configuration file: .nf cupsd .fi Test a configuration file called .IR test.conf : .nf cupsd \-t \-c test.conf .fi Run .B cupsd in the foreground with a test configuration file called .IR test.conf : .nf cupsd \-f \-c test.conf .fi .SH SEE ALSO .BR backend (7), .BR classes.conf (5), .BR cups (1), .BR cups-files.conf (5), .BR cups-lpd (8), .BR cupsd.conf (5), .BR cupsd-helper (8), .BR cupsd-logs (8), .BR filter (7), .BR launchd (8), .BR mime.convs (5), .BR mime.types (5), .BR printers.conf (5), .BR systemd (8), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cupsenable.man000664 000765 000024 00000005200 13255074424 016541 0ustar00msweetstaff000000 000000 .\" .\" cupsenable/cupsdisable man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cupsenable 8 "CUPS" "11 June 2014" "Apple Inc." .SH NAME cupsdisable, cupsenable \- stop/start printers and classes .SH SYNOPSIS .B cupsdisable [ .B \-E ] [ .B \-U .I username ] [ .B \-c ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] [ .B \-r .I reason ] [ .B \-\-hold ] .I destination(s) .br .B cupsenable [ .B \-E ] [ .B \-U .I username ] [ .B \-c ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] [ .B \-\-release ] .I destination(s) .SH DESCRIPTION .B cupsenable starts the named printers or classes while .B cupsdisable stops the named printers or classes. .SH OPTIONS The following options may be used: .TP 5 .B \-E Forces encryption of the connection to the server. .TP 5 \fB\-U \fIusername\fR Uses the specified username when connecting to the server. .TP 5 .B \-c Cancels all jobs on the named destination. .TP 5 \fB\-h \fIserver\fR[\fB:\fIport\fR] Uses the specified server and port. .TP 5 .B \-\-hold Holds remaining jobs on the named printer. Useful for allowing the current job to complete before performing maintenance. .TP 5 \fB\-r "\fIreason\fB"\fR Sets the message associated with the stopped state. If no reason is specified then the message is set to "Reason Unknown". .TP 5 .B \-\-release Releases pending jobs for printing. Use after running \fBcupsdisable\fR with the \fI\-\-hold\fR option to resume printing. .SH CONFORMING TO Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", or "#". Also, printer and class names are \fInot\fR case-sensitive. .LP The System V versions of these commands are \fBdisable\fR and \fBenable\fR, respectively. They have been renamed to avoid conflicts with the .BR bash (1) build-in commands of the same names. .LP The CUPS versions of \fBdisable\fR and \fBenable\fR may ask the user for an access password depending on the printing system configuration. This differs from the System V versions which require the root user to execute these commands. .SH SEE ALSO .BR cupsaccept (8), .BR cupsreject (8), .BR cancel (1), .BR lp (1), .BR lpadmin (8), .BR lpstat (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cupsfilter.man000664 000765 000024 00000006431 13255074424 016607 0ustar00msweetstaff000000 000000 .\" .\" cupsfilter man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cupsfilter 8 "CUPS" "11 June 2014" "Apple Inc." .SH NAME cupsfilter \- convert a file to another format using cups filters .SH SYNOPSIS .B cupsfilter [ .B \-\-list\-filters ] [ .B \-D ] [ .B \-U .I user ] [ .B \-c .I config-file ] [ .B \-d .I printer ] [ .B \-e ] [ .B \-i .I mime/type ] [ .B \-j .I job-id[,N] ] [ .B \-m .I mime/type ] [ .B \-n .I copies ] [ .B \-o .I name=value ] [ .B \-p .I filename.ppd ] [ .B \-t .I title ] [ .B \-u ] .I filename .SH DESCRIPTION .B cupsfilter is a front-end to the CUPS filter subsystem which allows you to convert a file to a specific format, just as if you had printed the file through CUPS. By default, .B cupsfilter generates a PDF file. The converted file is sent to the standard output. .SH OPTIONS .TP 5 .B \-\-list\-filters Do not actually run the filters, just print the filters used to stdout. .TP 5 .B \-D Delete the input file after conversion. .TP 5 \fB\-U \fIuser\fR Specifies the username passed to the filters. The default is the name of the current user. .TP 5 \fB\-c \fIconfig-file\fR Uses the named cups-files.conf configuration file. .TP 5 \fB\-d \fIprinter\fR Uses information from the named printer. .TP 5 .B \-e Use every filter from the PPD file. .TP 5 \fB\-i \fImime/type\fR Specifies the source file type. The default file type is guessed using the filename and contents of the file. .TP 5 \fB\-j \fIjob-id[,N]\fR Converts document N from the specified job. If N is omitted, document 1 is converted. .TP 5 \fB\-m \fImime/type\fR Specifies the destination file type. The default file type is application/pdf. Use printer/foo to convert to the printer format defined by the filters in the PPD file. .TP 5 \fB\-n \fIcopies\fR Specifies the number of copies to generate. .TP 5 \fB\-o \fIname=value\fR Specifies options to pass to the CUPS filters. .TP 5 \fB\-p \fIfilename.ppd\fR Specifies the PPD file to use. .TP 5 \fB\-t \fItitle\fR Specifies the document title. .TP 5 .B \-u Delete the PPD file after conversion. .SH EXIT STATUS .B cupsfilter returns a non-zero exit status on any error. .SH ENVIRONMENT All of the standard .BR cups (1) environment variables affect the operation of .BR cupsfilter . .SH FILES .nf /etc/cups/cups-files.conf /etc/cups/*.convs /etc/cups/*.types /usr/share/cups/mime/*.convs /usr/share/cups/mime/*.types .SH NOTES Unlike when printing, filters run using the .B cupsfilter command use the current user and security session. This may result in different output or unexpected behavior. .SH EXAMPLE The following command will generate a PDF preview of job 42 for a printer named "myprinter" and save it to a file named "preview.pdf": .nf cupsfilter -m application/pdf -d myprinter -j 42 >preview.pdf .fi .SH SEE ALSO .BR cups (1), .BR cupsd.conf (5), .BR filter(7), .BR mime.convs (7), .BR mime.types (7), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cupstestdsc.man000664 000765 000024 00000003431 13255074424 016770 0ustar00msweetstaff000000 000000 .\" .\" cupstestdsc man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cupstestdsc 1 "CUPS" "11 June 2014" "Apple Inc." .SH NAME cupstestdsc \- test conformance of postscript files (deprecated) .SH SYNOPSIS .B cupstestdsc [ .B \-h ] .I filename.ps [ ... .I filenameN.ps ] .br .B cupstestdsc [ .B \-h ] .B \- .SH DESCRIPTION \fBcupstestdsc\fR tests the conformance of PostScript files to the Adobe PostScript Language Document Structuring Conventions Specification version 3.0. The results of testing and any other output are sent to the standard output. The second form of the command reads PostScript from the standard input. .SH NOTES \fIThis program is deprecated and will be removed in a future release of CUPS.\fR .LP \fBcupstestdsc\fR only validates the DSC comments in a PostScript file and does not attempt to validate the PostScript code itself. Developers must ensure that the PostScript they generate follows the rules defined by Adobe. Specifically, all pages must be independent of each other, code outside page descriptions may not affect the graphics state (current font, color, transform matrix, etc.), and device-specific commands such as setpagedevice should not be used. .SH SEE ALSO CUPS Online Help (http://localhost:631/help), Adobe PostScript Language Document Structuring Conventions Specification, Version 3.0. .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/cupstestppd.man000664 000765 000024 00000007505 13255074424 017010 0ustar00msweetstaff000000 000000 .\" .\" cupstestppd man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH cupstestppd 1 "CUPS" "11 June 2014" "Apple Inc." .SH NAME cupstestppd \- test conformance of ppd files .SH SYNOPSIS .B cupstestppd [ .B \-I .I category ] [ .B \-R .I rootdir ] [ .B \-W .I category ] [ .B \-q ] [ .B \-r ] [ \fB\-v\fR[\fBv\fR] ] .I filename.ppd[.gz] [ ... .I filename.ppd[.gz] ] .br .B cupstestppd [ .B \-R .I rootdir ] [ .B \-W .I category ] [ .B \-q ] [ .B \-r ] [ \fB\-v\fR[\fBv\fR] ] .B \- .SH DESCRIPTION \fBcupstestppd\fR tests the conformance of PPD files to the Adobe PostScript Printer Description file format specification version 4.3. It can also be used to list the supported options and available fonts in a PPD file. The results of testing and any other output are sent to the standard output. .LP The first form of \fBcupstestppd\fR tests one or more PPD files on the command-line. The second form tests the PPD file provided on the standard input. .SH OPTIONS \fBcupstestppd\fR supports the following options: .TP 5 \fB\-I filename\fR Ignores all PCFileName warnings. .TP 5 \fB\-I filters\fR Ignores all filter errors. .TP 5 \fB\-I profiles\fR Ignores all profile errors. .TP 5 \fB\-R \fIrootdir\fR Specifies an alternate root directory for the filter, pre-filter, and other support file checks. .TP 5 \fB\-W constraints\fR Report all UIConstraint errors as warnings. .TP 5 \fB\-W defaults\fR Except for size-related options, report all default option errors as warnings. .TP 5 \fB\-W filters\fR Report all filter errors as warnings. .TP 5 \fB\-W profiles\fR Report all profile errors as warnings. .TP 5 \fB\-W sizes\fR Report all media size errors as warnings. .TP 5 \fB\-W translations\fR Report all translation errors as warnings. .TP 5 \fB\-W all\fR Report all of the previous errors as warnings. .TP 5 \fB\-W none\fR Report all of the previous errors as errors. .TP 5 .B \-q Specifies that no information should be displayed. .TP 5 .B \-r Relaxes the PPD conformance requirements so that common whitespace, control character, and formatting problems are not treated as hard errors. .TP 5 .B \-v Specifies that detailed conformance testing results should be displayed rather than the concise PASS/FAIL/ERROR status. .TP 5 .B \-vv Specifies that all information in the PPD file should be displayed in addition to the detailed conformance testing results. .LP The \fI-q\fR, \fI-v\fR, and \fI-vv\fR options are mutually exclusive. .SH EXIT STATUS \fBcupstestppd\fR returns zero on success and non-zero on error. The error codes are as follows: .TP 5 1 Bad command-line arguments or missing PPD filename. .TP 5 2 Unable to open or read PPD file. .TP 5 3 The PPD file contains format errors that cannot be skipped. .TP 5 4 The PPD file does not conform to the Adobe PPD specification. .SH EXAMPLES The following command will test all PPD files under the current directory and print the names of each file that does not conform: .nf find . \-name \\*.ppd \\! \-exec cupstestppd \-q '{}' \\; \-print .fi The next command tests all PPD files under the current directory and print detailed conformance testing results for the files that do not conform: .nf find . \-name \\*.ppd \\! \-exec cupstestppd \-q '{}' \\; \\ \-exec cupstestppd \-v '{}' \\; .fi .SH SEE ALSO .BR lpadmin (8), CUPS Online Help (http://localhost:631/help), Adobe PostScript Printer Description File Format Specification, Version 4.3. .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/filter.man000664 000765 000024 00000023213 13255074424 015711 0ustar00msweetstaff000000 000000 .\" .\" filter man page for CUPS. .\" .\" Copyright 2007-2015 by Apple Inc. .\" Copyright 1997-2007 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH filter 7 "CUPS" "19 October 2015" "Apple Inc." .SH NAME filter \- cups file conversion filter interface .SH SYNOPSIS .B filter .I job .I user .I title .I num-copies .I options [ .I filename ] .nf \fB#include \fR \fBssize_t cupsBackChannelRead\fR(\fBchar *\fIbuffer\fR, \fBsize_t \fIbytes\fR, \fBdouble \fItimeout\fR); \fBcups_sc_status_t cupsSideChannelDoRequest\fR(\fBcups_sc_command_t \fIcommand\fR, \fBchar *\fIdata\fR, \fBint *\fIdatalen\fR, \fBdouble \fItimeout\fR); \fB#include \fR \fBconst char *cupsGetOption\fR(\fBconst char *\fIname\fR, \fBint \fInum_options\fR, \fBcups_option_t *\fIoptions\fR); \fBint cupsMarkOptions\fR(\fBppd_file_t *\fIppd\fR, \fBint \fInum_options\fR, \fBcups_option_t *\fIoptions\fR); \fBint cupsParseOptions\fR(\fBconst char *\fIarg\fR, \fBint \fInum_options\fR, \fBcups_option_t **\fIoptions\fR); \fBppd_choice_t *ppdFindMarkedChoice\fR(\fBppd_file_t *\fIppd\fR, \fBconst char *\fIkeyword\fR); \fBvoid ppdMarkDefaults\fR(\fBppd_file_t *\fIppd\fR); \fBppd_file_t *ppdOpenFile\fR(\fBconst char *\fIfilename\fR); .fi .SH DESCRIPTION The CUPS filter interface provides a standard method for adding support for new document types or printers to CUPS. Each filter is capable of converting from one or more input formats to another format that can either be printed directly or piped into another filter to get it to a printable format. .LP Filters \fBMUST\fR be capable of reading from a filename on the command-line or from the standard input, copying the standard input to a temporary file as required by the file format. All output \fBMUST\fR be sent to the standard output. Filters \fBMUST NOT\fR attempt to communicate directly with the printer, other processes, or other services. .LP The command name (\fIargv[0]\fR) is set to the name of the destination printer but is also available in the \fBPRINTER\fI environment variable. .SH OPTIONS Options are passed in \fIargv[5]\fR and are encoded from the corresponding IPP attributes used when the job was submitted. Use the .BR cupsParseOptions () function to load the options into a \fBcups_option_t\fR array and the .BR cupsGetOption () function to get the value of a specific attribute. Be careful to look for common aliases of IPP attributes such as "landscape" for the IPP "orientation-requested" attribute. .LP Options passed on the command-line typically do not include the default choices the printer's PPD file. Use the .BR ppdMarkDefaults () and .BR cupsMarkOptions () functions in the CUPS library to apply the options to the PPD defaults and map any IPP attributes to the corresponding PPD options. Use .BR ppdFindMarkedChoice () to get the user-selected choice for a PPD option. For example, a filter might use the following code to determine the current value of the \fBDuplex\fR PPD option: .nf ppd_file_t *ppd = ppdOpenFile(getenv("PPD")); cups_option_t *options = NULL; int num_options = cupsParseOptions(argv[5], 0, &options); ppdMarkDefaults(ppd); cupsMarkOptions(ppd, num_options, options); ppd_choice_t *choice = ppdFindMarkedChoice(ppd, "Duplex"); .fi .LP Raster filters should use option choices set through the raster page header, as those reflect the options in effect for a given page. Options specified on the command-line determine the default values for the entire job, which can be overridden on a per-page basis. .SH LOG MESSAGES Messages sent to the standard error are generally stored in the printer's "printer-state-message" attribute and the current \fBErrorLog\fR file. Each line begins with a standard prefix: .TP 5 \fBALERT: \fImessage\fR Sets the "printer-state-message" attribute and adds the specified message to the current \fBErrorLog\fR using the "alert" log level. .TP 5 \fBATTR: \fIattribute=value \fR[ \fI... attribute=value\fR] Sets the named job or printer attribute(s). The following job attributes can be set: "job-media-progress". The following printer attributes can be set: "auth-info-required", "marker-colors", "marker-high-levels", "marker-levels", "marker-low-levels", "marker-message", "marker-names", "marker-types", "printer-alert", and "printer-alert-description". .TP 5 \fBCRIT: \fImessage\fR Sets the "printer-state-message" attribute and adds the specified message to the current \fBErrorLog\fR using the "critical" log level. .TP 5 \fBDEBUG: \fImessage\fR Adds the specified message to the current \fBErrorLog\fR using the "debug" log level. \fBDEBUG\fR messages are never stored in the "printer-state-message" attribute. .TP 5 \fBDEBUG2: \fImessage\fR .br Adds the specified message to the current \fBErrorLog\fR using the "debug2" log level. \fBDEBUG2\fR messages are never stored in the "printer-state-message" attribute. .TP 5 \fBEMERG: \fImessage\fR Sets the "printer-state-message" attribute and adds the specified message to the current \fBErrorLog\fR using the "emergency" log level. .TP 5 \fBERROR:\fI message\fR Sets the "printer-state-message" attribute and adds the specified message to the current \fBErrorLog\fR using the "error" log level. .TP 5 \fBINFO:\fI message\fR Sets the "printer-state-message" attribute. If the current \fBLogLevel\fR is set to "debug2", also adds the specified message to the current \fBErrorLog\fR using the "info" log level. .TP 5 \fBNOTICE:\fI message\fR Sets the "printer-state-message" attribute and adds the specified message to the current \fBErrorLog\fR using the "notice" log level. .TP 5 \fBPAGE:\fI page-number #-copies\fR .TP 5 \fBPAGE:\fI total #-pages\fR Adds an entry to the current \fBPageLog\fR. The first form adds \fI#-copies\fR to the "job-media-sheets-completed" attribute. The second form sets the "job-media-sheets-completed" attribute to \fI#-pages\fR. .TP 5 \fBPPD:\fI Keyword=Value\fR [ \fI... KeywordN=Value\fR ] Sets the named keywords in the printer's PPD file. This is typically used to update default option keywords such as \fBDefaultPageSize\fR and the various installable options in the PPD file. .TP 5 \fBSTATE:\fI printer-state-reason \fR[ \fI... printer-state-reason\fR ] .TP 5 \fBSTATE: +\fI printer-state-reason \fR[ \fI... printer-state-reason\fR ] .TP 5 \fBSTATE: -\fI printer-state-reason \fR[ \fI... printer-state-reason\fR ] Sets, adds, or removes "printer-state-reason" keywords for the current queue. Typically this is used to indicate media, ink, and toner conditions on a printer. .TP 5 \fBWARNING:\fI message\fR Sets the "printer-state-message" attribute and adds the specified message to the current \fBErrorLog\fR using the "warning" log level. .SH ENVIRONMENT VARIABLES The following environment variables are defined by the CUPS server when executing the filter: .TP 5 .B CHARSET The default text character set, typically "utf-8". .TP 5 .B CLASS When a job is submitted to a printer class, contains the name of the destination printer class. Otherwise this environment variable will not be set. .TP 5 .B CONTENT_TYPE The MIME media type associated with the submitted job file, for example "application/postscript". .TP 5 .B CUPS_CACHEDIR The directory where semi-persistent cache files can be found and stored. .TP 5 .B CUPS_DATADIR The directory where data files can be found. .TP 5 .B CUPS_FILETYPE The type of file being printed: "job-sheet" for a banner page and "document" for a regular print file. .TP 5 .B CUPS_MAX_MESSAGE The maximum size of a message sent to \fIstderr\fR, including any leading prefix and the trailing newline. .TP 5 .B CUPS_SERVERROOT The root directory of the server. .TP 5 .B FINAL_CONTENT_TYPE The MIME media type associated with the output destined for the printer, for example "application/vnd.cups-postscript". .TP 5 .B LANG The default language locale (typically C or en). .TP 5 .B PATH The standard execution path for external programs that may be run by the filter. .TP 5 .B PPD The full pathname of the PostScript Printer Description (PPD) file for this printer. .TP 5 .B PRINTER The name of the printer. .TP 5 .B RIP_CACHE The recommended amount of memory to use for Raster Image Processors (RIPs). .TP 5 .B SOFTWARE The name and version number of the server (typically CUPS/\fImajor.minor\fR). .TP 5 .B TZ The timezone of the server. .TP 5 .B USER The user executing the filter, typically "lp" or "root"; consult the \fIcups-files.conf\fR file for the current setting. .SH CONFORMING TO While the filter interface is compatible with System V interface scripts, CUPS does not support System V interface scripts. .SH NOTES CUPS filters are not meant to be run directly by the user. Aside from the legacy System V interface issues (\fIargv[0]\fR is the printer name), CUPS filters also expect specific environment variables and file descriptors, and typically run in a user session that (on macOS) has additional restrictions that affect how it runs. Unless you are a developer and know what you are doing, please do not run filters directly. Instead, use the .BR cupsfilter (8) program to use the appropriate filters to do the conversions you need. .SH SEE ALSO .BR backend (7), .BR cups (1), .BR cups-files.conf (5), .BR cupsd (8), .BR cupsfilter (8), .br CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/ippfind.man000664 000765 000024 00000016037 13255074424 016063 0ustar00msweetstaff000000 000000 .\" .\" ippfind man page for CUPS. .\" .\" Copyright 2013-2014 by Apple Inc. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH ippfind 1 "CUPS" "11 June 2014" "Apple Inc." .SH NAME ippfind \- find internet printing protocol printers .SH SYNOPSIS .B ippfind [ .I options ] \fIregtype\fR[\fB,\fIsubtype\fR][\fB.\fIdomain\fB.\fR] ... [ .I expression ... ] .br .B ippfind [ .I options ] \fIname\fR[\fB.\fIregtype\fR[\fB.\fIdomain\fB.\fR]] ... [ .I expression ... ] .br .B ippfind .B \-\-help .br .B ippfind .B \-\-version .SH DESCRIPTION \fBippfind\fR finds services registered with a DNS server or available through local devices. Its primary purpose is to find IPP printers and show their URIs, show their current status, or run commands. .SS REGISTRATION TYPES \fBippfind\fR supports the following registration types: .TP 5 _http._tcp HyperText Transport Protocol (HTTP, RFC 2616) .TP 5 _https._tcp Secure HyperText Transport Protocol (HTTPS, RFC 2818) .TP 5 _ipp._tcp Internet Printing Protocol (IPP, RFC 2911) .TP 5 _ipps._tcp Secure Internet Printing Protocol (IPPS, draft) .TP 5 _printer._tcp Line Printer Daemon (LPD, RFC 1179) .SS EXPRESSIONS \fBippfind\fR supports expressions much like the .BR find (1) utility. However, unlike .BR find (1), \fBippfind\fR uses POSIX regular expressions instead of shell filename matching patterns. If \fI\-\-exec\fR, \fI\-l\fR, \fI\-\-ls\fR, \fI\-p\fR, \fI\-\-print\fR, \fI\-\-print\-name\fR, \fI\-q\fR, \fI\-\-quiet\fR, \fI\-s\fR, or \fI\-x\fR is not specified, \fBippfind\fR adds \fI\-\-print\fR to print the service URI of anything it finds. The following expressions are supported: .TP 5 \fB\-d \fIregex\fR .TP 5 \fB\-\-domain \fIregex\fR True if the domain matches the given regular expression. .TP 5 .B \-\-false Always false. .TP 5 \fB\-h \fIregex\fR .TP 5 \fB\-\-host \fIregex\fR True is the hostname matches the given regular expression. .TP 5 .B \-l .TP 5 .B \-\-ls Lists attributes returned by Get-Printer-Attributes for IPP printers and traditional \fIfind\fR "-ls" output for HTTP URLs. The result is true if the URI is accessible, false otherwise. .TP 5 .B \-\-local True if the service is local to this computer. .TP 5 \fB\-n \fIregex\fR .TP 5 \fB\-\-name \fIregex\fR True if the service instance name matches the given regular expression. .TP 5 \fB\-\-path \fIregex\fR True if the URI resource path matches the given regular expression. .TP 5 \fB\-P \fInumber\fR[\fB-\fInumber\fR] .TP 5 \fB\-\-port \fInumber\fR[\fB-\fInumber\fR] True if the port matches the given number or range. .TP 5 .B \-p .TP 5 .B \-\-print Prints the URI if the result of previous expressions is true. The result is always true. .TP 5 .B \-q .TP 5 .B \-\-quiet Quiet mode - just returns the exit codes below. .TP 5 .B \-r .TP 5 .B \-\-remote True if the service is not local to this computer. .TP 5 .B \-s .TP 5 .B \-\-print\-name Prints the service instance name if the result of previous expressions is true. The result is always true. .TP 5 .B \-\-true Always true. .TP 5 \fB\-t \fIkey\fR .TP 5 \fB\-\-txt \fIkey\fR True if the TXT record contains the named key. .TP 5 \fB\-\-txt\-\fIkey regex\fR True if the TXT record contains the named key and matches the given regular expression. .TP 5 \fB\-u \fIregex\fR .TP 5 \fB\-\-uri \fIregex\fR True if the URI matches the given regular expression. .TP 5 \fB\-x \fIutility \fR[ \fIargument \fR... ] \fB;\fR .TP 5 \fB\-\-exec \fIutility \fR[ \fIargument \fR... ] \fB;\fR Executes the specified program if the current result is true. "{foo}" arguments are replaced with the corresponding value - see SUBSTITUTIONS below. .PP Expressions may also contain modifiers: .TP 5 \fB( \fIexpression \fB)\fR Group the result of expressions. .TP 5 \fB! \fIexpression\fR .TP 5 \fB\-\-not \fIexpression\fR Unary NOT of the expression. .TP 5 \fIexpression expression\fR .TP 5 \fIexpression \fB\-\-and \fIexpression\fR Logical AND of expressions. .TP 5 \fIexpression \fB\-\-or \fIexpression\fR Logical OR of expressions. .SS SUBSTITUTIONS The substitutions for "{foo}" in \fI\-e\fR and \fI\-\-exec\fR are: .TP 5 .B {service_domain} Domain name, e.g., "example.com.", "local.", etc. .TP 5 .B {service_hostname} Fully-qualified domain name, e.g., "printer.example.com.", "printer.local.", etc. .TP 5 .B {service_name} Service instance name, e.g., "My Fine Printer". .TP 5 .B {service_port} Port number for server, typically 631 for IPP and 80 for HTTP. .TP 5 .B {service_regtype} DNS-SD registration type, e.g., "_ipp._tcp", "_http._tcp", etc. .TP 5 .B {service_scheme} URI scheme for DNS-SD registration type, e.g., "ipp", "http", etc. .TP 5 .B {} .TP 5 .B {service_uri} URI for service, e.g., "ipp://printer.local./ipp/print", "http://printer.local./", etc. .TP 5 \fB{txt_\fIkey\fB}\fR Value of TXT record \fIkey\fR (lowercase). .SH OPTIONS \fBippfind\fR supports the following options: .TP 5 .B \-\-help Show program help. .TP 5 .B \-\-version Show program version. .TP 5 .B \-4 Use IPv4 when listing. .TP 5 .B \-6 Use IPv6 when listing. .TP 5 \fB\-T \fIseconds\fR Specify find timeout in seconds. If 1 or less, \fBippfind\fR stops as soon as it thinks it has found everything. The default timeout is 1 second. .TP 5 \fB\-V \fIversion\fR Specifies the IPP version when listing. Supported values are "1.1", "2.0", "2.1", and "2.2". .SH EXIT STATUS \fBippfind\fR returns 0 if the result for all processed expressions is true, 1 if the result of any processed expression is false, 2 if browsing or any query or resolution failed, 3 if an undefined option or invalid expression was specified, and 4 if it ran out of memory. .SH ENVIRONMENT When executing a program, \fBippfind\fR sets the following environment variables for the matching service registration: .TP 5 .B IPPFIND_SERVICE_DOMAIN Domain name, e.g., "example.com.", "local.", etc. .TP 5 .B IPPFIND_SERVICE_HOSTNAME Fully-qualified domain name, e.g., "printer.example.com.", "printer.local.", etc. .TP 5 .B IPPFIND_SERVICE_NAME Service instance name, e.g., "My Fine Printer". .TP 5 .B IPPFIND_SERVICE_PORT Port number for server, typically 631 for IPP and 80 for HTTP. .TP 5 .B IPPFIND_SERVICE_REGTYPE DNS-SD registration type, e.g., "_ipp._tcp", "_http._tcp", etc. .TP 5 .B IPPFIND_SERVICE_SCHEME URI scheme for DNS-SD registration type, e.g., "ipp", "http", etc. .TP 5 .B IPPFIND_SERVICE_URI URI for service, e.g., "ipp://printer.local./ipp/print", "http://printer.local./", etc. .TP 5 .B IPPFIND_TXT_\fIKEY\fR Values of TXT record \fIKEY\fR (uppercase). .SH EXAMPLES To show the status of all registered IPP printers on your network, run: .nf ippfind \-\-ls .fi Similarly, to send a PostScript test page to every PostScript printer, run: .nf ippfind \-\-txt\-pdl application/postscript \-\-exec ipptool \-f onepage\-letter.ps '{}' print\-job.test \\; .fi .SH SEE ALSO .BR ipptool (1) .SH COPYRIGHT Copyright \[co] 2013-2015 by Apple Inc. cups-2.2.7/man/ipptool.man000664 000765 000024 00000013665 13255074424 016124 0ustar00msweetstaff000000 000000 .\" .\" ipptool man page. .\" .\" Copyright 2010-2017 by Apple Inc. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH ipptool 1 "CUPS" "4 August 2017" "Apple Inc." .SH NAME ipptool \- perform internet printing protocol requests .SH SYNOPSIS .B ipptool [ .B \-\-help ] [ .B \-\-stop\-after\-include\-error ] [ .B \-\-version ] [ .B \-4 ] [ .B \-6 ] [ .B \-C ] [ .B \-E ] [ .B \-I ] [ .B \-L ] [ .B \-P .I filename.plist ] [ .B \-S ] [ .B \-T .I seconds ] [ .B \-V .I version ] [ .B \-X ] [ .B \-c ] [ .B \-d .I name=value ] [ .B \-f .I filename ] [ .B \-h ] [ .B \-i .I seconds ] [ .B \-n .I repeat-count ] [ .B \-q ] [ .B \-t ] [ .B \-v ] .I printer-uri .I testfile [ ... .I testfile ] .SH DESCRIPTION .B ipptool sends IPP requests to the specified .I printer-uri and tests and/or displays the results. Each named .I testfile defines one or more requests, including the expected response status, attributes, and values. Output is either a plain text, formatted text, CSV, or XML report on the standard output, with a non-zero exit status indicating that one or more tests have failed. The .I testfile format is described in .BR ipptoolfile (5). .SH OPTIONS The following options are recognized by .B ipptool: .TP 5 .B \-\-help Shows program help. .TP 5 .B \-\-stop-after-include-error Tells .B ipptool to stop if an error occurs in an included file. Normally .B ipptool will continue with subsequent tests after the INCLUDE directive. .TP 5 .B \-\-version Shows the version of .B ipptool being used. .TP 5 .B \-4 Specifies that .B ipptool must connect to the printer or server using IPv4. .TP 5 .B \-6 Specifies that .B ipptool must connect to the printer or server using IPv6. .TP 5 .B \-C Specifies that requests should be sent using the HTTP/1.1 "Transfer\-Encoding: chunked" header, which is required for conformance by all versions of IPP. The default is to use "Transfer\-Encoding: chunked" for requests with attached files and "Content\-Length:" for requests without attached files. .TP 5 .B \-E Forces TLS encryption when connecting to the server using the HTTP "Upgrade" header. .TP 5 .B \-I Specifies that .B ipptool will continue past errors. .TP 5 .B \-L Specifies that requests should be sent using the HTTP/1.0 "Content\-Length:" header, which is required for conformance by all versions of IPP. The default is to use "Transfer\-Encoding: chunked" for requests with attached files and "Content\-Length:" for requests without attached files. .TP 5 .BI \-P \ filename.plist Specifies that the test results should be written to the named XML (Apple plist) file in addition to the regular test report (\fB\-t\fR). This option is incompatible with the \fB\-i\fR (interval) and \fB\-n\fR (repeat\-count) options. .TP 5 .B \-S Forces (dedicated) TLS encryption when connecting to the server. .TP 5 .BI \-T \ seconds Specifies a timeout for IPP requests in seconds. .TP 5 .BI \-V \ version Specifies the default IPP version to use: 1.0, 1.1, 2.0, 2.1, or 2.2. If not specified, version 1.1 is used. .TP 5 .B \-X Specifies that XML (Apple plist) output is desired instead of the plain text report. This option is incompatible with the \fB\-i\fR (interval) and \fB\-n\fR (repeat\-count) options. .TP 5 .B \-c Specifies that CSV (comma\-separated values) output is desired instead of the plain text output. .TP 5 .BI \-d \ name=value Defines the named variable. .TP 5 .BI \-f \ filename Defines the default request filename for tests. .TP 5 .B \-h Validate HTTP response headers. .TP 5 .BI \-i \ seconds Specifies that the (last) .I testfile should be repeated at the specified interval. This option is incompatible with the \fB\-X\fR (XML plist output) option. .TP 5 .B \-l Specifies that plain text output is desired. .TP 5 .BI \-n \ repeat\-count Specifies that the (last) .I testfile should be repeated the specified number of times. This option is incompatible with the \fI\-X\fR (XML plist output) option. .TP 5 .B \-q Be quiet and produce no output. .TP 5 .B \-t Specifies that CUPS test report output is desired instead of the plain text output. .TP 5 .B \-v Specifies that all request and response attributes should be output in CUPS test mode (\fB\-t\fR). This is the default for XML output. .SH EXIT STATUS The .B ipptool program returns 0 if all tests were successful and 1 otherwise. .SH FILES The following standard files are available: .nf .I color.jpg .I create\-printer\-subscription.test .I document\-a4.pdf .I document\-a4.ps .I document\-letter.pdf .I document\-letter.ps .I get\-completed\-jobs.test .I get\-jobs.test .I get\-notifications.test .I get\-printer\-attributes.test .I get\-subscriptions.test .I gray.jpg .I ipp\-1.1.test .I ipp\-2.0.test .I ipp\-2.1.test .I ipp\-2.2.test .I ipp\-everywhere.test .I onepage\-a4.pdf .I onepage\-a4.ps .I onepage\-letter.pdf .I onepage\-letter.ps .I print\-job.test .I print\-job\-deflate.test .I print\-job\-gzip.test .I testfile.jpg .I testfile.pcl .I testfile.pdf .I testfile.ps .I testfile.txt .I validate\-job.test .fi .SH CONFORMING TO The .B ipptool program is unique to CUPS and conforms to the Internet Printing Protocol up to version 2.2. .SH EXAMPLES Get a list of completed jobs for "myprinter": .nf ipptool ipp://localhost/printers/myprinter get\-completed\-jobs.test .fi .LP Send email notifications to "user@example.com" when "myprinter" changes: .nf ipptool \-d recipient=mailto:user@example.com \\ ipp://localhost/printers/myprinter create\-printer\-subscription.test .fi .SH SEE ALSO .BR ipptoolfile (5), IANA IPP Registry (http://www.iana.org/assignments/ipp\-registrations), PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp) RFC 8011 (http://tools.ietf.org/html/rfc8011), .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/ipptoolfile.man000664 000765 000024 00000055575 13255074424 016772 0ustar00msweetstaff000000 000000 .\" .\" ipptoolfile man page. .\" .\" Copyright 2010-2017 by Apple Inc. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH ipptoolfile 5 "CUPS" "15 June 2017" "Apple Inc." .SH NAME ipptoolfile \- ipptool file format .SH DESCRIPTION The .BR ipptool (1) program accepts free-form plain text files that describe one or more IPP requests. Comments start with the "#" character and continue to the end of the line. Each request is enclosed by curly braces, for example: .nf # This is a comment { # The name of the test NAME "Print PDF File" # The request to send OPERATION Print\-Job GROUP operation\-attributes\-tag ATTR charset attributes\-charset utf\-8 ATTR language attributes\-natural\-language en ATTR uri printer\-uri $uri ATTR name requesting\-user\-name $user ATTR mimeMediaType document\-format application/pdf GROUP job\-attributes\-tag ATTR collection media\-col { # US Letter plain paper from the "main" tray MEMBER collection media\-size { MEMBER integer x\-dimension 21590 MEMBER integer y\-dimension 27940 } MEMBER integer media\-top\-margin 423 MEMBER integer media\-bottom\-margin 423 MEMBER integer media\-left\-margin 423 MEMBER integer media\-right\-margin 423 MEMBER keyword media\-source "main" MEMBER keyword media\-type "stationery" } FILE testfile.pdf # The response to expect STATUS successful\-ok EXPECT job\-id OF\-TYPE integer WITH\-VALUE >0 EXPECT job\-uri OF\-TYPE uri } { # The name of the test NAME "Wait for Job to Complete" # The request to send OPERATION Get\-Job\-Attributes GROUP operation\-attributes\-tag ATTR charset attributes\-charset utf\-8 ATTR language attributes\-natural\-language en ATTR uri printer\-uri $uri ATTR integer job\-id $job\-id ATTR name requesting\-user\-name $user # The response to expect STATUS successful\-ok EXPECT job\-id OF\-TYPE integer WITH\-VALUE $job\-id EXPECT job\-uri OF\-TYPE uri EXPECT job\-state OF\-TYPE enum WITH\-VALUE >5 REPEAT\-NO\-MATCH EXPECT job\-originating\-user\-name OF\-TYPE name WITH\-VALUE "$user" # Show the job state until completed... DISPLAY job-state DISPLAY job-state-reasons } .fi .SS TOP-LEVEL DIRECTIVES The following directives can be used outside of a \fItest\fR: .TP 5 \fB{ \fItest \fB}\fR Defines a test. .TP 5 \fBDEFINE \fIvariable-name value\fR Defines the named variable to the given value. This is equivalent to specifying \fI\-d variable-name=value\fR on the .BR ipptool (8) command-line. .TP 5 \fBDEFINE\-DEFAULT \fIvariable-name value\fR Defines the named variable to the given value if it does not already have a value. .TP 5 \fBFILE\-ID "\fIidentifier\fB"\fR Specifies an identifier string for the current file. .TP 5 \fBIGNORE\-ERRORS yes\fR .TP 5 \fBIGNORE\-ERRORS no\fR Specifies whether, by default, .BR ipptool (8) will ignore errors and continue with subsequent tests. .TP 5 \fBINCLUDE "\fIfilename\fB"\fR .TP 5 \fBINCLUDE <\fIfilename\fB>\fR Includes another test file. The first form includes a file relative to the current test file, while the second form includes a file from the .BR ipptool (8) include directory. .TP 5 \fBINCLUDE\-IF\-DEFINED \fIname \fB"\fIfilename\fB"\fR .TP 5 \fBINCLUDE\-IF\-DEFINED \fIname \fB<\fIfilename\fB>\fR Includes another test file if the named variable is defined. The first form includes a file relative to the current test file, while the second form includes a file from the .BR ipptool (8) include directory. .TP 5 \fBINCLUDE\-IF\-NOT\-DEFINED \fIname \fB"\fIfilename\fB"\fR .TP 5 \fBINCLUDE\-IF\-NOT\-DEFINED \fIname \fB<\fIfilename\fB>\fR Includes another test file if the named variable is not defined. The first form includes a file relative to the current test file, while the second form includes a file from the .BR ipptool (8) include directory. .TP 5 \fBSKIP\-IF\-DEFINED \fIvariable-name\fR .TP 5 \fBSKIP\-IF\-NOT\-DEFINED \fIvariable-name\fR Specifies that the remainder of the test file should be skipped when the variable is or is not defined. .TP 5 \fBSTOP\-AFTER\-INCLUDE\-ERROR no\fR .TP 5 \fBSTOP\-AFTER\-INCLUDE\-ERROR yes\fR Specifies whether tests will be stopped after an error in an included file. .TP 5 \fBTRANSFER auto\fR Specifies that tests will, by default, use "Transfer-Encoding: chunked" for requests with attached files and "Content-Length:" for requests without attached files. .TP 5 \fBTRANSFER chunked\fR Specifies that tests will, by default, use the HTTP/1.1 "Transfer-Encoding: chunked" header. This is the default and is equivalent to specifying \fI\-c\fR on the .BR ipptool (8) command-line. Support for chunked requests is required for conformance with all versions of IPP. .TP 5 \fBTRANSFER length\fR Specifies that tests will, by default, use the HTTP/1.0 "Content-Length:" header. This is equivalent to specifying \fI\-l\fR on the .BR ipptool (8) command-line. Support for content length requests is required for conformance with all versions of IPP. .TP 5 \fBVERSION 1.0\fR .TP 5 \fBVERSION 1.1\fR .TP 5 \fBVERSION 2.0\fR .TP 5 \fBVERSION 2.1\fR .TP 5 \fBVERSION 2.2\fR Specifies the default IPP version number to use for the tests that follow. .SS TEST DIRECTIVES The following directives are understood within a \fItest\fR: .TP 5 \fBATTR \fIout-of-band-tag attribute-name\fR .TP 5 \fBATTR \fItag attribute-name value(s)\fR Adds an attribute to the test request. Out-of-band tags (admin-define, delete-attribute, no-value, not-settable, unknown, unsupported) have no value. Values for other tags are separated by the comma (",") character - escape commas using the "\" character. Common attributes and values are listed in the IANA IPP registry - see references below. .TP 5 \fBATTR collection \fIattribute-name \fB{ MEMBER \fItag member-name value(s) ... \fB}\fR [ \fI... \fB,{ \fI... \fB} \fR] Adds a collection attribute to the test request. Member attributes follow the same syntax as regular attributes and can themselves be nested collections. Multiple collection values can be supplied as needed, separated by commas. .TP 5 \fBCOMPRESSION deflate\fR .TP 5 \fBCOMPRESSION gzip\fR .TP 5 \fBCOMPRESSION none\fR Uses the specified compression on the document data following the attributes in a Print-Job or Send-Document request. .TP 5 \fBDELAY \fIseconds\fR[\fI,repeat-seconds\fR] Specifies a delay in seconds before this test will be run. If two values are specified, the second value is used as the delay between repeated tests. .TP 5 \fBDISPLAY \fIattribute-name\fR Specifies that value of the named attribute should be output as part of the test report. .TP 5 \fBEXPECT \fIattribute-name \fR[ \fIpredicate(s) \fR] .TP 5 \fBEXPECT ?\fIattribute-name predicate(s)\fR .TP 5 \fBEXPECT !\fIattribute-name\fR Specifies that the response must/may/must not include the named attribute. Additional requirements can be added as predicates - see the "EXPECT PREDICATES" section for more information on predicates. Attribute names can specify member attributes by separating the attribute and member names with the forward slash, for example "media\-col/media\-size/x\-dimension". .TP 5 \fBEXPECT-ALL \fIattribute-name \fR[ \fIpredicate(s) \fR] .TP 5 \fBEXPECT-ALL ?\fIattribute-name predicate(s)\fR Specifies that the response must/may include the named attribute and that all occurrences of that attribute must match the given predicates. .TP 5 \fBFILE filename\fR Specifies a file to include at the end of the request. This is typically used when sending a test print file. .TP 5 \fBGROUP tag\fR Specifies the group tag for subsequent attributes in the request. .TP 5 \fBIGNORE\-ERRORS yes\fR .TP 5 \fBIGNORE\-ERRORS no\fR Specifies whether .BR ipptool (8) will ignore errors and continue with subsequent tests. .TP 5 \fBNAME "\fIliteral string\fB"\fR Specifies the human-readable name of the test. .TP 5 \fBOPERATION \fIoperation-code\fR Specifies the operation to be performed. .TP 5 \fBPAUSE "\fImessage\fB"\fR Displays the provided message and waits for the user to press a key to continue. .TP 5 \fBREQUEST\-ID \fInumber\fR\fR .TP 5 \fBREQUEST\-ID random\fR Specifies the request-id value to use in the request, either an integer or the word "random" to use a randomly generated value (the default). .TP 5 \fBRESOURCE \fIpath\fR Specifies an alternate resource path that is used for the HTTP POST request. The default is the resource from the URI provided to the .BR ipptool (8) program. .TP 5 \fBSKIP\-IF\-DEFINED \fIvariable-name\fR .TP 5 \fBSKIP\-IF\-NOT\-DEFINED \fIvariable-name\fR Specifies that the current test should be skipped when the variable is or is not defined. .TP 5 \fBSKIP\-PREVIOUS\-ERROR yes\fR .TP 5 \fBSKIP\-PREVIOUS\-ERROR no\fR Specifies whether .BR ipptool (8) will skip the current test if the previous test resulted in an error/failure. .TP 5 \fBSTATUS \fIstatus-code \fR[ \fIpredicate\fR ] Specifies an expected response status-code value. Additional requirements can be added as predicates - see the "STATUS PREDICATES" section for more information on predicates. .TP 5 \fBTEST\-ID "\fIidentifier\fR" Specifies an identifier string for the current test. .TP 5 \fBTRANSFER auto\fR Specifies that this test will use "Transfer-Encoding: chunked" if it has an attached file or "Content-Length:" otherwise. .TP 5 \fBTRANSFER chunked\fR Specifies that this test will use the HTTP/1.1 "Transfer-Encoding: chunked" header. .TP 5 \fBTRANSFER length\fR Specifies that this test will use the HTTP/1.0 "Content-Length:" header. .TP 5 \fBVERSION 1.0\fR .TP 5 \fBVERSION 1.1\fR .TP 5 \fBVERSION 2.0\fR .TP 5 \fBVERSION 2.1\fR .TP 5 \fBVERSION 2.2\fR Specifies the IPP version number to use for this test. .SS EXPECT PREDICATES The following predicates are understood following the \fBEXPECT\fR test directive: .TP 5 \fBCOUNT \fInumber\fR Requires the \fBEXPECT\fR attribute to have the specified number of values. .TP 5 \fBDEFINE\-MATCH \fIvariable-name\fR Defines the variable to "1" when the \fBEXPECT\fR condition matches. A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test. .TP 5 \fBDEFINE\-NO\-MATCH \fIvariable-name\fR Defines the variable to "1" when the \fBEXPECT\fR condition does not match. A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test. .TP 5 \fBDEFINE\-VALUE \fIvariable-name\fR Defines the variable to the value of the attribute when the \fBEXPECT\fR condition matches. A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test. .TP 5 \fBIF\-DEFINED \fIvariable-name\fR Makes the \fBEXPECT\fR conditions apply only if the specified variable is defined. .TP 5 \fBIF\-NOT\-DEFINED \fIvariable-name\fR Makes the \fBEXPECT\fR conditions apply only if the specified variable is not defined. .TP 5 \fBIN\-GROUP \fItag\fR Requires the \fBEXPECT\fR attribute to be in the specified group tag. .TP 5 \fBOF\-TYPE \fItag[,tag,...]\fR Requires the \fBEXPECT\fR attribute to use one of the specified value tag(s). .TP 5 \fBREPEAT\-LIMIT \fInumber\fR .br Specifies the maximum number of times to repeat if the \fBREPEAT-MATCH\fR or \fBREPEAT-NO-MATCH\fR predicate is specified. The default value is 1000. .TP 5 \fBREPEAT\-MATCH\fR .TP 5 \fBREPEAT\-NO\-MATCH\fR Specifies that the current test should be repeated when the \fBEXPECT\fR condition matches or does not match. .TP 5 \fBSAME\-COUNT\-AS \fIattribute-name\fR Requires the \fBEXPECT\fR attribute to have the same number of values as the specified parallel attribute. .TP 5 \fBWITH\-ALL\-HOSTNAMES "\fIliteral string\fB"\fR .TP 5 \fBWITH\-ALL\-HOSTNAMES "/\fIregular expression\fB/"\fR Requires that all URI values contain a matching hostname. .TP 5 \fBWITH\-ALL\-RESOURCES "\fIliteral string\fB"\fR .TP 5 \fBWITH\-ALL\-RESOURCES "/\fIregular expression\fB/"\fR Requires that all URI values contain a matching resource (including leading /). .TP 5 \fBWITH\-ALL\-SCHEMES "\fIliteral string\fB"\fR .TP 5 \fBWITH\-ALL-SCHEMES "/\fIregular expression\fB/"\fR Requires that all URI values contain a matching scheme. .TP 5 \fBWITH\-ALL\-VALUES "\fIliteral string\fB"\fR Requires that all values of the \fBEXPECT\fR attribute match the literal string. Comparisons are case-sensitive. .TP 5 \fBWITH\-ALL\-VALUES <\fInumber\fR .TP 5 \fBWITH\-ALL\-VALUES =\fInumber\fR .TP 5 \fBWITH\-ALL\-VALUES >\fInumber\fR .TP 5 \fBWITH\-ALL\-VALUES \fInumber\fR[\fI,...,number\fR] Requires that all values of the \fBEXPECT\fR attribute match the number(s) or numeric comparison. When comparing rangeOfInteger values, the "<" and ">" operators only check the upper bound of the range. .TP 5 \fBWITH\-ALL\-VALUES "false"\fR .TP 5 \fBWITH\-ALL\-VALUES "true"\fR Requires that all values of the \fBEXPECT\fR attribute match the boolean value given. .TP 5 \fBWITH\-ALL\-VALUES "/\fIregular expression\fB/"\fR Requires that all values of the \fBEXPECT\fR attribute match the regular expression, which must conform to the POSIX regular expression syntax. Comparisons are case-sensitive. .TP 5 \fBWITH\-HOSTNAME "\fIliteral string\fB"\fR .TP 5 \fBWITH\-HOSTNAME "/\fIregular expression\fB/"\fR Requires that at least one URI value contains a matching hostname. .TP 5 \fBWITH\-RESOURCE "\fIliteral string\fB"\fR .TP 5 \fBWITH\-RESOURCE "/\fIregular expression\fB/"\fR Requires that at least one URI value contains a matching resource (including leading /). .TP 5 \fBWITH\-SCHEME "\fIliteral string\fB"\fR .TP 5 \fBWITH\-SCHEME "/\fIregular expression\fB/"\fR Requires that at least one URI value contains a matching scheme. .TP 5 \fBWITH\-VALUE "\fIliteral string\fB"\fR Requires that at least one value of the \fBEXPECT\fR attribute matches the literal string. Comparisons are case-sensitive. .TP 5 \fBWITH\-VALUE <\fInumber\fR .TP 5 \fBWITH\-VALUE =\fInumber\fR .TP 5 \fBWITH\-VALUE >\fInumber\fR .TP 5 \fBWITH\-VALUE \fInumber\fR[\fI,...,number\fR] Requires that at least one value of the \fBEXPECT\fR attribute matches the number(s) or numeric comparison. When comparing rangeOfInteger values, the "<" and ">" operators only check the upper bound of the range. .TP 5 \fBWITH\-VALUE "false"\fR .TP 5 \fBWITH\-VALUE "true"\fR Requires that at least one value of the \fBEXPECT\fR attribute matches the boolean value given. .TP 5 \fBWITH\-VALUE "/\fIregular expression\fB/"\fR Requires that at least one value of the \fBEXPECT\fR attribute matches the regular expression, which must conform to the POSIX regular expression syntax. Comparisons are case-sensitive. .TP 5 \fBWITH\-VALUE\-FROM \fIattribute-name\fR Requires that the value(s) of the \fBEXPECT\fR attribute matches the value(s) in the specified attribute. For example, "EXPECT job\-sheets WITH\-VALUE\-FROM job\-sheets\-supported" requires that the "job\-sheets" value is listed as a value of the "job\-sheets\-supported" attribute. .SS STATUS PREDICATES The following predicates are understood following the \fBSTATUS\fR test directive: .TP 5 \fBDEFINE\-MATCH \fIvariable-name\fR Defines the variable to "1" when the \fBSTATUS\fR matches. A side-effect of this predicate is that this \fBSTATUS\fR will never fail a test. .TP 5 \fBDEFINE\-NO\-MATCH \fIvariable-name\fR Defines the variable to "1" when the \fBSTATUS\fR does not match. A side-effect of this predicate is that this \fBSTATUS\fR will never fail a test. .TP 5 \fBIF\-DEFINED \fIvariable-name\fR Makes the \fBSTATUS\fR apply only if the specified variable is defined. .TP 5 \fBIF\-NOT\-DEFINED \fIvariable-name\fR Makes the \fBSTATUS\fR apply only if the specified variable is not defined. .TP 5 \fBREPEAT\-LIMIT \fInumber\fR .br Specifies the maximum number of times to repeat. The default value is 1000. .TP 5 \fBREPEAT\-MATCH\fR .TP 5 \fBREPEAT\-NO\-MATCH\fR Specifies that the current test should be repeated when the response status-code matches or does not match the value specified by the STATUS directive. .SS OPERATION CODES Operation codes correspond to the hexadecimal numbers (0xHHHH) and names from RFC 8011 and other IPP extension specifications. Here is a complete list of names supported by .BR ipptool (8): .nf Activate\-Printer CUPS\-Accept\-Jobs CUPS\-Add\-Modify\-Class CUPS\-Add\-Modify\-Printer CUPS\-Authenticate\-Job CUPS\-Delete\-Class CUPS\-Delete\-Printer CUPS\-Get\-Classes CUPS\-Get\-Default CUPS\-Get\-Devices CUPS\-Get\-Document CUPS\-Get\-PPD CUPS\-Get\-PPDs CUPS\-Get\-Printers CUPS\-Move\-Job CUPS\-Reject\-Jobs CUPS\-Set\-Default Cancel\-Current\-Job Cancel\-Job Cancel\-Jobs Cancel\-My\-Jobs Cancel\-Subscription Close\-Job Create\-Job Create\-Job\-Subscriptions Create\-Printer\-Subscriptions Deactivate\-Printer Disable\-Printer Enable\-Printer Get\-Job\-Attributes Get\-Jobs Get\-Notifications Get\-Printer\-Attributes Get\-Printer\-Support\-Files Get\-Printer\-Supported\-Values Get\-Subscription\-Attributes Get\-Subscriptions Hold\-Job Hold\-New\-Jobs Identify\-Printer Pause\-Printer Pause\-Printer\-After\-Current\-Job Print\-Job Print\-URI Promote\-Job Purge\-Jobs Release\-Held\-New\-Jobs Release\-Job Renew\-Subscription Reprocess\-Job Restart\-Job Restart\-Printer Resubmit\-Job Resume\-Job Resume\-Printer Schedule\-Job\-After Send\-Document Send\-Hardcopy\-Document Send\-Notifications Send\-URI Set\-Job\-Attributes Set\-Printer\-Attributes Shutdown\-Printer Startup\-Printer Suspend\-Current\-Job Validate\-Document Validate\-Job .fi .SS STATUS CODES Status codes correspond to the hexadecimal numbers (0xHHHH) and names from RFC 8011 and other IPP extension specifications. Here is a complete list of the names supported by .BR ipptool (8): .nf client\-error\-account\-authorization\-failed client\-error\-account\-closed client\-error\-account\-info\-needed client\-error\-account\-limit\-reached client\-error\-attributes\-not\-settable client\-error\-attributes\-or\-values\-not\-supported client\-error\-bad\-request client\-error\-charset\-not\-supported client\-error\-compression\-error client\-error\-compression\-not\-supported client\-error\-conflicting\-attributes client\-error\-document\-access\-error client\-error\-document\-format\-error client\-error\-document\-format\-not\-supported client\-error\-document\-password\-error client\-error\-document\-permission\-error client\-error\-document\-security\-error client\-error\-document\-unprintable\-error client\-error\-forbidden client\-error\-gone client\-error\-ignored\-all\-notifications client\-error\-ignored\-all\-subscriptions client\-error\-not\-authenticated client\-error\-not\-authorized client\-error\-not\-found client\-error\-not\-possible client\-error\-print\-support\-file\-not\-found client\-error\-request\-entity\-too\-large client\-error\-request\-value\-too\-long client\-error\-timeout client\-error\-too\-many\-subscriptions client\-error\-uri\-scheme\-not\-supported cups\-error\-account\-authorization\-failed cups\-error\-account\-closed cups\-error\-account\-info\-needed cups\-error\-account\-limit\-reached cups\-see\-other redirection\-other\-site server\-error\-busy server\-error\-device\-error server\-error\-internal\-error server\-error\-job\-canceled server\-error\-multiple\-document\-jobs\-not\-supported server\-error\-not\-accepting\-jobs server\-error\-operation\-not\-supported server\-error\-printer\-is\-deactivated server\-error\-service\-unavailable server\-error\-temporary\-error server\-error\-version\-not\-supported successful\-ok successful\-ok\-but\-cancel\-subscription successful\-ok\-conflicting\-attributes successful\-ok\-events\-complete successful\-ok\-ignored\-notifications successful\-ok\-ignored\-or\-substituted\-attributes successful\-ok\-ignored\-subscriptions successful\-ok\-too\-many\-events .fi .SS TAGS Value and group tags correspond to the names from RFC 8011 and other IPP extension specifications. Here are the group tags: .nf document\-attributes\-tag event\-notification\-attributes\-tag job\-attributes\-tag operation\-attributes\-tag printer\-attributes\-tag subscription\-attributes\-tag unsupported\-attributes\-tag .fi .LP Here are the value tags: .nf admin\-define boolean charset collection dateTime default delete\-attribute enum integer keyword mimeMediaType nameWithLanguage nameWithoutLanguage naturalLanguage no\-value not\-settable octetString rangeOfInteger resolution textWithLanguage textWithoutLanguage unknown unsupported uri uriScheme .fi .SS VARIABLES The .BR ipptool (8) program maintains a list of variables that can be used in any literal string or attribute value by specifying "\fI$variable-name\fR". Aside from variables defined using the \fI-d\fR option or \fBDEFINE\fR directive, the following pre-defined variables are available: .TP 5 \fB$$\fR Inserts a single "$" character. .TP 5 \fB$ENV[\fIname\fB]\fR Inserts the value of the named environment variable, or an empty string if the environment variable is not defined. .TP 5 \fB$filename\fR Inserts the filename provided to .BR ipptool (8) with the \fI-f\fR option. .TP 5 \fB$filetype\fR Inserts the MIME media type for the filename provided to .BR ipptool (8) with the \fI-f\fR option. .TP 5 \fB$hostname\fR Inserts the hostname from the URI provided to .BR ipptool (8). .TP 5 \fB$job\-id\fR Inserts the last "job\-id" attribute value returned in a test response or 0 if no "job\-id" attribute has been seen. .TP 5 \fB$job\-uri\fR Inserts the last "job\-uri" attribute value returned in a test response or an empty string if no "job\-uri" attribute has been seen. .TP 5 \fB$notify\-subscription\-id\fR Inserts the last "notify\-subscription\-id" attribute value returned in a test response or 0 if no "notify\-subscription\-id" attribute has been seen. .TP 5 \fB$port\fR Inserts the port number from the URI provided to .BR ipptool (8). .TP 5 \fB$resource\fR Inserts the resource path from the URI provided to .BR ipptool (8). .TP 5 \fB$scheme\fR Inserts the scheme from the URI provided to .BR ipptool (8). .TP 5 \fB$uri\fR Inserts the URI provided to .BR ipptool (8). .TP 5 \fB$uriuser\fR Inserts the username from the URI provided to .BR ipptool (8), if any. .TP 5 \fB$user\fR Inserts the current user's login name. .SH SEE ALSO .BR ipptool (1), IANA IPP Registry (http://www.iana.org/assignments/ipp-registrations), PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp), RFC 8011 (http://tools.ietf.org/html/rfc8011) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/lp.man000664 000765 000024 00000017305 13255074424 015044 0ustar00msweetstaff000000 000000 .\" .\" lp man page for CUPS. .\" .\" Copyright 2007-2016 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH lp 1 "CUPS" "2 May 2016" "Apple Inc." .SH NAME lp \- print files .SH SYNOPSIS .B lp [ .B \-E ] [ .B \-U .I username ] [ .B \-c ] [ \fB\-d \fIdestination\fR[\fB/\fIinstance\fR] ] [ \fB\-h \fIhostname\fR[\fB:\fIport\fR] ] [ .B \-m ] [ .B \-n .I num-copies ] [ \fB\-o \fIoption\fR[\fB=\fIvalue\fR] ] [ .B \-q .I priority ] [ .B \-s ] [ .B \-t .I title ] [ .B \-H .I handling ] [ .B \-P .I page-list ] [ .B \-\- ] [ .I file(s) ] .br .B lp [ .B \-E ] [ .B \-U .I username ] [ .B \-c ] [ \fB\-h \fIhostname\fR[\fB:\fIport\fR] ] [ .B \-i .I job-id ] [ .B \-n .I num-copies ] [ \fB\-o \fIoption\fR[\fB=\fIvalue\fR] ] [ .B \-q .I priority ] [ .B \-t .I title ] [ .B \-H .I handling ] [ .B \-P .I page-list ] .SH DESCRIPTION \fBlp\fR submits files for printing or alters a pending job. Use a filename of "-" to force printing from the standard input. .SS THE DEFAULT DESTINATION CUPS provides many ways to set the default destination. The \fBLPDEST\fR and \fBPRINTER\fR environment variables are consulted first. If neither are set, the current default set using the .BR lpoptions (1) command is used, followed by the default set using the .BR lpadmin (8) command. .SH OPTIONS The following options are recognized by \fIlp\fR: .TP 5 .B \-\- Marks the end of options; use this to print a file whose name begins with a dash (\-). .TP 5 .B \-E Forces encryption when connecting to the server. .TP 5 \fB\-U \fIusername\fR Specifies the username to use when connecting to the server. .TP 5 .B \-c This option is provided for backwards-compatibility only. On systems that support it, this option forces the print file to be copied to the spool directory before printing. In CUPS, print files are always sent to the scheduler via IPP which has the same effect. .TP 5 \fB\-d \fIdestination\fR Prints files to the named printer. .TP 5 \fB\-h \fIhostname\fR[\fB:\fIport\fR] Chooses an alternate server. .TP 5 \fB\-i \fIjob-id\fR Specifies an existing job to modify. .TP 5 .B \-m Sends an email when the job is completed. .TP 5 \fB\-n \fIcopies\fR Sets the number of copies to print. .TP 5 \fB\-o "\fIname\fB=\fIvalue \fR[ ... \fIname\fB=\fIvalue \fR]\fB"\fR Sets one or more job options. See "COMMON JOB OPTIONS" below. .TP 5 \fB\-q \fIpriority\fR Sets the job priority from 1 (lowest) to 100 (highest). The default priority is 50. .TP 5 .B \-s Do not report the resulting job IDs (silent mode.) .TP 5 \fB\-t "\fIname\fB"\fR Sets the job name. .TP 5 \fB\-H \fIhh:mm\fR .TP 5 \fB\-H hold\fR .TP 5 \fB-H immediate\fR .TP 5 \fB-H restart\fR .TP 5 \fB-H resume\fR Specifies when the job should be printed. A value of \fIimmediate\fR will print the file immediately, a value of \fIhold\fR will hold the job indefinitely, and a UTC time value (HH:MM) will hold the job until the specified UTC (not local) time. Use a value of \fIresume\fR with the \fI-i\fR option to resume a held job. Use a value of \fIrestart\fR with the \fI-i\fR option to restart a completed job. .TP 5 \fB\-P \fIpage-list\fR Specifies which pages to print in the document. The list can contain a list of numbers and ranges (#-#) separated by commas, e.g., "1,3-5,16". The page numbers refer to the output pages and not the document's original pages - options like "number-up" can affect the numbering of the pages. .SS COMMON JOB OPTIONS Aside from the printer-specific options reported by the .BR lpoptions (1) command, the following generic options are available: .TP 5 \fB\-o collate=true\fR Prints collated copies. .TP 5 \fB\-o fit\-to\-page\fR Scales the print file to fit on the page. .TP 5 \fB\-o job-hold-until=\fIwhen\fR Holds the job until the specified local time. "when" can be "indefinite" to hold the until released, "day-time" to print the job between 6am and 6pm local time, "night" to print the job between 6pm and 6am local time, "second-shift" to print the job between 4pm and 12am local time, "third-shift" to print the job between 12am and 8am local time, or "weekend" to print the job on Saturday or Sunday. .TP 5 \fB\-o job-hold-until=\fIhh:mm\fR Holds the job until the specified time in hours and minutes UTC. .TP 5 \fB\-o job-priority=\fIpriority\fR Set the priority to a value from 1 (lowest) to 100 (highest), which influences when a job is scheduled for printing. The default priority is typically 50. .TP 5 \fB\-o job-sheets=\fIname\fR\fR Prints a cover page (banner) with the document. The "name" can be "classified", "confidential", "secret", "standard", "topsecret", or "unclassified". .TP 5 \fB\-o job-sheets=\fIstart-name,end-name\fR\fR Prints cover pages (banners) with the document. .TP 5 \fB\-o media=\fIsize\fR Sets the page size to \fIsize\fR. Most printers support at least the size names "a4", "letter", and "legal". .TP 5 \fB\-o mirror\fR Mirrors each page. .TP 5 \fB\-o number\-up=\fR{\fI2|4|6|9|16\fR} Prints 2, 4, 6, 9, or 16 document (input) pages on each output page. .TP 5 \fB\-o number\-up\-layout=\fIlayout\fR Specifies the layout of pages with the "number-up" option. The "layout" string can be "btlr", "btrl", "lrbt", "lrtb", "rlbt", "rltb", "tblr", or "tbrl" - the first two letters determine the column order while the second two letters determine the row order. "bt" is bottom-to-top, "lr" is left-to-right, "rl" is right-to-left, and "tb" is top-to-bottom. .TP 5 \fB\-o orientation\-requested=4\fR Prints the job in landscape (rotated 90 degrees counter-clockwise). .TP 5 \fB\-o orientation\-requested=5\fR Prints the job in landscape (rotated 90 degrees clockwise). .TP 5 \fB\-o orientation\-requested=6\fR Prints the job in reverse portrait (rotated 180 degrees). .TP 5 \fB\-o outputorder=reverse\fR Prints pages in reverse order. .TP 5 \fB\-o page\-border=\fIborder\fR Prints a border around each document page. "border" is "double", "double\-thick", "single", or "single\-thick". .TP 5 \fB\-o page\-ranges=\fIpage-list\fR Specifies which pages to print in the document. The list can contain a list of numbers and ranges (#-#) separated by commas, e.g., "1,3-5,16". The page numbers refer to the output pages and not the document's original pages - options like "number-up" can affect the numbering of the pages. .TP 5 \fB\-o sides=one\-sided\fR Prints on one side of the paper. .TP 5 \fB\-o sides=two\-sided\-long\-edge\fR Prints on both sides of the paper for portrait output. .TP 5 \fB\-o sides=two\-sided\-short\-edge\fR Prints on both sides of the paper for landscape output. .SH CONFORMING TO Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", or "#". Also, printer and class names are \fInot\fR case-sensitive. .LP The \fI-q\fR option accepts a different range of values than the Solaris lp command, matching the IPP job priority values (1-100, 100 is highest priority) instead of the Solaris values (0-39, 0 is highest priority). .SH EXAMPLES Print two copies of a document to the default printer: .nf lp -n 2 filename .fi Print a double-sided legal document to a printer called "foo": .nf lp -d foo -o media=legal -o sides=two-sided-long-edge filename .fi Print a presentation document 2-up to a printer called "foo": .nf lp -d foo -o number-up=2 filename .fi .SH SEE ALSO .BR cancel (1), .BR lpadmin (8), .BR lpoptions (1), .BR lpq (1), .BR lpr (1), .BR lprm (1), .BR lpstat (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/lpadmin.man000664 000765 000024 00000016243 13255074424 016055 0ustar00msweetstaff000000 000000 .\" .\" lpadmin man page for CUPS. .\" .\" Copyright © 2007-2018 by Apple Inc. .\" Copyright © 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH lpadmin 8 "CUPS" "19 March 2018" "Apple Inc." .SH NAME lpadmin \- configure cups printers and classes .SH SYNOPSIS .B lpadmin [ .B \-E ] [ .B \-U .I username ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] .B \-d .I destination .br .B lpadmin [ .B \-E ] [ .B \-U .I username ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] .B \-p .I destination [ .B \-R .I name-default ] .I option(s) .br .B lpadmin [ .B \-E ] [ .B \-U .I username ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] .B \-x .I destination .SH DESCRIPTION \fBlpadmin\fR configures printer and class queues provided by CUPS. It can also be used to set the server default printer or class. .LP When specified before the \fI-d\fR, \fI-p\fR, or \fI-x\fR options, the \fI-E\fR option forces encryption when connecting to the server. .LP The first form of the command (\fI-d\fR) sets the default printer or class to \fIdestination\fR. Subsequent print jobs submitted via the .BR lp (1) or .BR lpr (1) commands will use this destination unless the user specifies otherwise with the .BR lpoptions (1) command. .LP The second form of the command (\fI-p\fR) configures the named printer or class. The additional options are described below. .LP The third form of the command (\fI-x\fR) deletes the printer or class \fIdestination\fR. Any jobs that are pending for the destination will be removed and any job that is currently printed will be aborted. .SH OPTIONS The following options are recognized when configuring a printer queue: .TP 5 \fB\-c \fIclass\fR Adds the named \fIprinter\fR to \fIclass\fR. If \fIclass\fR does not exist it is created automatically. .TP 5 \fB\-i \fIppd-file\fR .TP 5 \fB\-P \fIppd-file\fR Specifies a PostScript Printer Description (PPD) file to use with the printer. .TP 5 \fB\-m \fImodel\fR Sets a standard PPD file for the printer from the \fImodel\fR directory or using one of the driver interfaces. Use the \fI-m\fR option with the .BR lpinfo (8) command to get a list of supported models. The model "raw" clears any existing PPD file and the model "everywhere" queries the printer referred to by the specified IPP \fIdevice-uri\fR. Note: The "raw" model is deprecated and will not be supported in a future version of CUPS. .TP 5 \fB\-o cupsIPPSupplies=true\fR .TP 5 \fB\-o cupsIPPSupplies=false\fR Specifies whether IPP supply level values should be reported. .TP 5 \fB\-o cupsSNMPSupplies=true\fR .TP 5 \fB\-o cupsSNMPSupplies=false\fR Specifies whether SNMP supply level (RFC 3805) values should be reported. .TP 5 \fB\-o job\-k\-limit=\fIvalue\fR Sets the kilobyte limit for per-user quotas. The value is an integer number of kilobytes; one kilobyte is 1024 bytes. .TP 5 \fB\-o job\-page\-limit=\fIvalue\fR Sets the page limit for per-user quotas. The value is the integer number of pages that can be printed; double-sided pages are counted as two pages. .TP 5 \fB-o job\-quota\-period=\fIvalue\fR Sets the accounting period for per-user quotas. The value is an integer number of seconds; 86,400 seconds are in one day. .TP 5 \fB\-o job\-sheets\-default=\fIbanner\fR .TP 5 \fB\-o job\-sheets\-default=\fIbanner\fB,\fIbanner\fR Sets the default banner page(s) to use for print jobs. .TP 5 \fB\-o \fIname\fB=\fIvalue\fR Sets a PPD option for the printer. PPD options can be listed using the \fI-l\fR option with the .BR lpoptions (1) command. .TP 5 \fB\-o \fIname\fB-default=\fIvalue\fR Sets a default server-side option for the destination. Any print-time option can be defaulted, e.g., "-o number-up-default=2" to set the default "number-up" option value to 2. .TP 5 \fB\-o port\-monitor=\fIname\fR Sets the binary communications program to use when printing, "none", "bcp", or "tbcp". The default program is "none". The specified port monitor must be listed in the printer's PPD file. .TP 5 \fB\-o printer-error-policy=\fIname\fR Sets the error policy to be used when the printer backend is unable to send the job to the printer. The name must be one of "abort-job", "retry-job", "retry-current-job", or "stop-printer". The default error policy is "stop-printer" for printers and "retry-current-job" for classes. .TP 5 \fB\-o printer\-is\-shared=true\fR .TP 5 \fB\-o printer\-is\-shared=false\fR Sets the destination to shared/published or unshared/unpublished. Shared/published destinations are publicly announced by the server on the LAN based on the browsing configuration in \fIcupsd.conf\fR, while unshared/unpublished destinations are not announced. The default value is "true". .TP 5 \fB\-o printer-op-policy=\fIname\fR Sets the IPP operation policy associated with the destination. The name must be defined in the \fIcupsd.conf\fR in a Policy section. The default operation policy is "default". .TP 5 \fB\-R \fIname\fB\-default\fR Deletes the named option from \fIprinter\fR. .TP 5 \fB\-r \fIclass\fR Removes the named \fIprinter\fR from \fIclass\fR. If the resulting class becomes empty it is removed. .TP 5 \fB-u allow:\fR{\fIuser\fR|\fB@\fIgroup\fR}{\fB,\fIuser\fR|\fB,@\fIgroup\fR}* .TP 5 \fB-u deny:\fR{\fIuser\fR|\fB@\fIgroup\fR}{\fB,\fIuser\fR|\fB,@\fIgroup\fR}* .TP 5 \fB\-u allow:all\fR .TP 5 \fB\-u deny:none\fR Sets user-level access control on a destination. Names starting with "@" are interpreted as UNIX groups. The latter two forms turn user-level access control off. Note: The user 'root' is not granted special access - using "-u allow:foo,bar" will allow users 'foo' and 'bar' to access the printer but NOT 'root'. .TP 5 \fB\-v "\fIdevice-uri\fB"\fR Sets the \fIdevice-uri\fR attribute of the printer queue. Use the \fI-v\fR option with the .BR lpinfo (8) command to get a list of supported device URIs and schemes. .TP 5 \fB\-D "\fIinfo\fB"\fR Provides a textual description of the destination. .TP 5 .B \-E Enables the destination and accepts jobs; this is the same as running the .BR cupsaccept (8) and .BR cupsenable (8) programs on the destination. .TP 5 \fB\-L "\fIlocation\fB"\fR Provides a textual location of the destination. .SH CONFORMING TO Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", or "#". Also, printer and class names are \fInot\fR case-sensitive. Finally, the CUPS version of \fBlpadmin\fR may ask the user for an access password depending on the printing system configuration. This differs from the System V version which requires the root user to execute this command. .SH NOTES The CUPS version of \fBlpadmin\fR does not support all of the System V or Solaris printing system configuration options. .SH EXAMPLE Create an IPP Everywhere print queue: .nf lpadmin -p myprinter -E -v ipp://myprinter.local/ipp/print -m everywhere .fi .SH SEE ALSO .BR cupsaccept (8), .BR cupsenable (8), .BR lpinfo (8), .BR lpoptions (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/lpc.man000664 000765 000024 00000003475 13255074424 015212 0ustar00msweetstaff000000 000000 .\" .\" lpc man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH lpc 8 "CUPS" "11 June 2014" "Apple Inc." .SH NAME lpc \- line printer control program .SH SYNOPSIS .B lpc [ .I command [ .I parameter(s) ] ] .SH DESCRIPTION \fBlpc\fR provides limited control over printer and class queues provided by CUPS. It can also be used to query the state of queues. .LP If no command is specified on the command-line, \fBlpc\fR displays a prompt and accepts commands from the standard input. .SS COMMANDS The \fBlpc\fR program accepts a subset of commands accepted by the Berkeley \fBlpc\fR program of the same name: .TP 5 .B exit Exits the command interpreter. .TP 5 \fBhelp \fR[\fIcommand\fR] .TP 5 \fB? \fR[\fIcommand\fR] Displays a short help message. .TP 5 .B quit Exits the command interpreter. .TP 5 \fBstatus \fR[\fIqueue\fR] Displays the status of one or more printer or class queues. .SH NOTES Since \fBlpc\fR is geared towards the Berkeley printing system, it is impossible to use \fBlpc\fR to configure printer or class queues provided by CUPS. To configure printer or class queues you must use the .BR lpadmin (8) command or another CUPS-compatible client with that functionality. .SH SEE ALSO .BR cancel (1), .BR cupsaccept (8), .BR cupsenable (8), .BR lp (1), .BR lpadmin (8), .BR lpr (1), .BR lprm (1), .BR lpstat (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/lpinfo.man000664 000765 000024 00000005552 13255074424 015721 0ustar00msweetstaff000000 000000 .\" .\" lpinfo man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH lpinfo 8 "CUPS" "12 June 2014" "Apple Inc." .SH NAME lpinfo \- show available devices or drivers .SH SYNOPSIS .B lpinfo [ .B \-E ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] [ .B \-l ] [ .B \-\-device\-id .I device-id-string ] [ .B \-\-exclude\-schemes .I scheme-list ] [ .B \-\-include\-schemes .I scheme-list ] [ .B \-\-language .I locale ] [ .B \-\-make\-and\-model .I name ] [ .B \-\-product .I name ] .B \-m .br .B lpinfo [ .B \-E ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] [ .B \-l ] [ .B \-\-exclude\-schemes .I scheme-list ] [ .B \-\-include\-schemes .I scheme-list ] [ .B \-\-timeout .I seconds ] .B \-v .SH DESCRIPTION \fBlpinfo\fR lists the available devices or drivers known to the CUPS server. The first form (\fI-m\fR) lists the available drivers, while the second form (\fI-v\fR) lists the available devices. .SH OPTIONS \fBlpinfo\fR accepts the following options: .TP 5 .B \-E Forces encryption when connecting to the server. .TP 5 \fB\-h \fIserver\fR[\fB:\fIport\fR] Selects an alternate server. .TP 5 .B \-l Shows a "long" listing of devices or drivers. .TP 5 \fB\-\-device\-id \fIdevice-id-string\fR Specifies the IEEE-1284 device ID to match when listing drivers with the \fI\-m\fR option. .TP 5 \fB\-\-exclude\-schemes \fIscheme-list\fR Specifies a comma-delimited list of device or PPD schemes that should be excluded from the results. Static PPD files use the "file" scheme. .TP 5 \fB\-\-include\-schemes \fIscheme-list\fR Specifies a comma-delimited list of device or PPD schemes that should be included in the results. Static PPD files use the "file" scheme. .TP 5 \fB\-\-language \fIlocale\fR Specifies the language to match when listing drivers with the \fI\-m\fR option. .TP 5 \fB\-\-make\-and\-model \fIname\fR Specifies the make and model to match when listing drivers with the \fI\-m\fR option. .TP 5 \fB\-\-product \fIname\fR Specifies the product to match when listing drivers with the \fI\-m\fR option. .TP 5 \fB\-\-timeout \fIseconds\fR Specifies the timeout when listing devices with the \fI\-v\fR option. .SH CONFORMING TO The \fIlpinfo\fR command is unique to CUPS. .SH EXAMPLES List all devices: .nf lpinfo \-v .fi List all drivers: .nf lpinfo \-m .fi List drivers matching "HP LaserJet": .nf lpinfo \-\-make\-and\-model "HP LaserJet" \-m .fi .SH SEE ALSO .BR lpadmin (8), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/lpmove.man000664 000765 000024 00000003245 13255074424 015731 0ustar00msweetstaff000000 000000 .\" .\" lpmove man page for CUPS. .\" .\" Copyright 2007-2016 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH lpmove 8 "CUPS" "26 May 2016" "Apple Inc." .SH NAME lpmove \- move a job or all jobs to a new destination .SH SYNOPSIS .B lpmove [ .B \-E ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] [ .B \-U .I username ] .I job .I destination .br .B lpmove [ .B \-E ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] [ .B \-U .I username ] .I source .I destination .SH DESCRIPTION \fBlpmove\fR moves the specified \fIjob\fR or all jobs from \fIsource\fR to \fIdestination\fR. \fIjob\fR can be the job ID number or the old destination and job ID. .SH OPTIONS The \fBlpmove\fR command supports the following options: .TP 5 .B \-E Forces encryption when connecting to the server. .TP 5 \fB\-U \fIusername\fR Specifies an alternate username. .TP 5 \fB\-h \fIserver\fR[\fB:\fIport\fR] Specifies an alternate server. .SH EXAMPLES Move job 123 from "oldprinter" to "newprinter": .nf lpmove 123 newprinter \fIor\fR lpmove oldprinter-123 newprinter .fi Move all jobs from "oldprinter" to "newprinter": .nf lpmove oldprinter newprinter .fi .SH SEE ALSO .BR cancel (1), .BR lp (1), .BR lpr (1), .BR lprm (1), .br CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/lpoptions.man.in000664 000765 000024 00000007021 13255074424 017057 0ustar00msweetstaff000000 000000 .\" .\" lpoptions man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH lpoptions 1 "CUPS" "12 June 2014" "Apple Inc." .SH NAME lpoptions \- display or set printer options and defaults .SH SYNOPSIS .B lpoptions [ .B \-E ] [ .B \-U .I username ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] \fB\-d \fIdestination\fR[\fB/\fIinstance\fR] [ .B \-l ] .br .B lpoptions [ .B \-E ] [ .B \-U .I username ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] [ \fB\-p \fIdestination\fR[\fB/\fIinstance\fR] ] \fB\-o \fIoption\fR[\fB=\fIvalue\fR] ... .br .B lpoptions [ .B \-E ] [ .B \-U .I username ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] [ \fB\-p \fIdestination\fR[\fB/\fIinstance\fR] ] .B \-r .I option .br .B lpoptions [ .B \-E ] [ .B \-U .I username ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] \fB\-x \fIdestination\fR[\fB/\fIinstance\fR] .SH DESCRIPTION \fBlpoptions\fR displays or sets printer options and defaults. If no printer is specified using the \fI\-p\fR option, the default printer is used as described in .BR lp (1). .LP If no \fI\-l\fR, \fI\-o\fR, or \fI\-r\fR options are specified, the current options are reported on the standard output. .LP Options set with the \fBlpoptions\fR command are used by the .BR lp (1) and .BR lpr (1) commands when submitting jobs. .LP When run by the root user, \fBlpoptions\fR gets and sets default options and instances for all users in the \fI/etc/cups/lpoptions\fR file. Otherwise, the per-user defaults are managed in the \fI~/.cups/lpoptions\fR file. .SH OPTIONS \fBlpoptions\fR supports the following options: .TP 5 .B \-E Enables encryption when communicating with the CUPS server. .TP 5 \fB\-U \fIusername\fR Uses an alternate username. .TP 5 \fB\-d \fIdestination\fR[\fB/\fIinstance\fR] Sets the user default printer to \fIdestination\fR. If \fIinstance\fR is supplied then that particular instance is used. This option overrides the system default printer for the current user. .TP 5 \fB\-h \fIserver\fR[\fB:\fIport\fR] Uses an alternate server. .TP 5 .B \-l Lists the printer specific options and their current settings. .TP 5 \fB\-o \fIoption\fR[\fB=\fIvalue\fR] Specifies a new option for the named destination. .TP 5 \fB\-p \fIdestination\fR[\fB/\fIinstance\fR] Sets the destination and instance, if specified, for any options that follow. If the named instance does not exist then it is created. Destinations can only be created using the .BR lpadmin (8) program. .TP 5 \fB\-r \fIoption\fR Removes the specified option from the named destination. .TP 5 \fB\-x \fIdestination\fR[\fB/\fIinstance\fR] Removes the options for the named destination and instance, if specified. If the named instance does not exist then this does nothing. Destinations can only be removed using the .BR lpadmin (8) command. .SH FILES \fI~/.cups/lpoptions\fR - user defaults and instances created by non-root users. .br \fI/etc/cups/lpoptions\fR - system-wide defaults and instances created by the root user. .SH CONFORMING TO The \fBlpoptions\fR command is unique to CUPS. .SH SEE ALSO .BR cancel (1), .BR lp (1), .BR lpadmin (8), .BR lpr (1), .BR lprm (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/lpq.man000664 000765 000024 00000003346 13255074424 015225 0ustar00msweetstaff000000 000000 .\" .\" lpq man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH lpq 1 "CUPS" "12 June 2014" "Apple Inc." .SH NAME lpq \- show printer queue status .SH SYNOPSIS .B lpq [ .B \-E ] [ .B \-U .I username ] [ \fB\-h \fIserver\fR[\fB:\fIport\fR] ] [ \fB\-P \fIdestination\fR[\fB/\fIinstance\fR] ] [ .B \-a ] [ .B \-l ] [ .BI + interval ] .SH DESCRIPTION \fBlpq\fR shows the current print queue status on the named printer. Jobs queued on the default destination will be shown if no printer or class is specified on the command-line. .LP The \fI+interval\fR option allows you to continuously report the jobs in the queue until the queue is empty; the list of jobs is shown once every \fIinterval\fR seconds. .SH OPTIONS \fBlpq\fR supports the following options: .TP 5 .B \-E Forces encryption when connecting to the server. .TP 5 \fB\-P \fIdestination\fR[\fB/\fIinstance\fR] Specifies an alternate printer or class name. .TP 5 \fB\-U \fIusername\fR Specifies an alternate username. .TP 5 .B \-a Reports jobs on all printers. .TP 5 \fB\-h \fIserver\fR[\fB:\fIport\fR] Specifies an alternate server. .TP 5 .B \-l Requests a more verbose (long) reporting format. .SH SEE ALSO .BR cancel (1), .BR lp (1), .BR lpr (1), .BR lprm (1), .BR lpstat (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/lpr.man000664 000765 000024 00000015002 13255074424 015216 0ustar00msweetstaff000000 000000 .\" .\" lpr man page for CUPS. .\" .\" Copyright 2007-2016 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH lpr 1 "CUPS" "2 May 2016" "Apple Inc." .SH NAME lpr \- print files .SH SYNOPSIS .B lpr [ .B \-E ] [ \fB\-H \fIserver\fR[\fB:\fIport\fR] ] [ .B \-U .I username ] [ \fB\-P \fIdestination\fR[\fB/\fIinstance\fR] ] [ .B \-# .I num-copies [ .B \-h ] [ .B \-l ] [ .B \-m ] [ \fB\-o \fIoption\fR[\fB=\fIvalue\fR] ] [ .B \-p ] [ .B \-q ] [ .B \-r ] [ .B \-C .I title ] [ .B \-J .I title ] [ .B \-T .I title ] [ .I file(s) ] .SH DESCRIPTION \fBlpr\fR submits files for printing. Files named on the command line are sent to the named printer or the default destination if no destination is specified. If no files are listed on the command-line, \fBlpr\fR reads the print file from the standard input. .SS THE DEFAULT DESTINATION CUPS provides many ways to set the default destination. The \fBLPDEST\fR and \fBPRINTER\fR environment variables are consulted first. If neither are set, the current default set using the .BR lpoptions (1) command is used, followed by the default set using the .BR lpadmin (8) command. .SH OPTIONS The following options are recognized by \fIlpr\fR: .TP 5 .B \-E Forces encryption when connecting to the server. .TP 5 \fB\-H \fIserver\fR[\fB:\fIport\fR] Specifies an alternate server. .TP 5 \fB\-C "\fIname\fB"\fR .TP 5 \fB\-J "\fIname\fB"\fR .TP 5 \fB\-T "\fIname\fB"\fR Sets the job name/title. .TP 5 \fB\-P \fIdestination\fR[\fB/\fIinstance\fR] Prints files to the named printer. .TP 5 \fB\-U \fIusername\fR Specifies an alternate username. .TP 5 \fB\-# \fIcopies\fR Sets the number of copies to print. .TP 5 .B \-h Disables banner printing. This option is equivalent to \fI-o job\-sheets=none\fR. .TP 5 .B \-l Specifies that the print file is already formatted for the destination and should be sent without filtering. This option is equivalent to \fI-o raw\fR. .TP 5 .B \-m Send an email on job completion. .TP 5 \fB\-o \fIoption\fR[\fB=\fIvalue\fR] Sets a job option. See "COMMON JOB OPTIONS" below. .TP 5 .B \-p Specifies that the print file should be formatted with a shaded header with the date, time, job name, and page number. This option is equivalent to \fI\-o prettyprint\fR and is only useful when printing text files. .TP 5 .B \-q Hold job for printing. .TP 5 .B \-r Specifies that the named print files should be deleted after submitting them. .SS COMMON JOB OPTIONS Aside from the printer-specific options reported by the .BR lpoptions (1) command, the following generic options are available: .TP 5 \fB\-o collate=true\fR Prints collated copies. .TP 5 \fB\-o fit\-to\-page\fR Scales the print file to fit on the page. .TP 5 \fB\-o job-hold-until=\fIwhen\fR Holds the job until the specified local time. "when" can be "indefinite" to hold the until released, "day-time" to print the job between 6am and 6pm local time, "night" to print the job between 6pm and 6am local time, "second-shift" to print the job between 4pm and 12am local time, "third-shift" to print the job between 12am and 8am local time, or "weekend" to print the job on Saturday or Sunday. .TP 5 \fB\-o job-hold-until=\fIhh:mm\fR Holds the job until the specified time in hours and minutes UTC. .TP 5 \fB\-o job-priority=\fIpriority\fR Set the priority to a value from 1 (lowest) to 100 (highest), which influences when a job is scheduled for printing. The default priority is typically 50. .TP 5 \fB\-o job-sheets=\fIname\fR\fR Prints a cover page (banner) with the document. The "name" can be "classified", "confidential", "secret", "standard", "topsecret", or "unclassified". .TP 5 \fB\-o job-sheets=\fIstart-name,end-name\fR\fR Prints cover pages (banners) with the document. .TP 5 \fB\-o media=\fIsize\fR Sets the page size to \fIsize\fR. Most printers support at least the size names "a4", "letter", and "legal". .TP 5 \fB\-o mirror\fR Mirrors each page. .TP 5 \fB\-o number\-up=\fR{\fI2|4|6|9|16\fR} Prints 2, 4, 6, 9, or 16 document (input) pages on each output page. .TP 5 \fB\-o number\-up\-layout=\fIlayout\fR Specifies the layout of pages with the "number-up" option. The "layout" string can be "btlr", "btrl", "lrbt", "lrtb", "rlbt", "rltb", "tblr", or "tbrl" - the first two letters determine the column order while the second two letters determine the row order. "bt" is bottom-to-top, "lr" is left-to-right, "rl" is right-to-left, and "tb" is top-to-bottom. .TP 5 \fB\-o orientation\-requested=4\fR Prints the job in landscape (rotated 90 degrees counter-clockwise). .TP 5 \fB\-o orientation\-requested=5\fR Prints the job in landscape (rotated 90 degrees clockwise). .TP 5 \fB\-o orientation\-requested=6\fR Prints the job in reverse portrait (rotated 180 degrees). .TP 5 \fB\-o outputorder=reverse\fR Prints pages in reverse order. .TP 5 \fB\-o page\-border=\fIborder\fR Prints a border around each document page. "border" is "double", "double\-thick", "single", or "single\-thick". .TP 5 \fB\-o page\-ranges=\fIpage-list\fR Specifies which pages to print in the document. The list can contain a list of numbers and ranges (#-#) separated by commas, e.g., "1,3-5,16". The page numbers refer to the output pages and not the document's original pages - options like "number-up" can affect the numbering of the pages. .TP 5 \fB\-o sides=one\-sided\fR Prints on one side of the paper. .TP 5 \fB\-o sides=two\-sided\-long\-edge\fR Prints on both sides of the paper for portrait output. .TP 5 \fB\-o sides=two\-sided\-short\-edge\fR Prints on both sides of the paper for landscape output. .SH NOTES The \fI\-c\fR, \fI\-d\fR, \fI\-f\fR, \fI\-g\fR, \fI\-i\fR, \fI\-n\fR, \fI\-t\fR, \fI\-v\fR, and \fI\-w\fR options are not supported by CUPS and produce a warning message if used. .SH EXAMPLES Print two copies of a document to the default printer: .nf lpr -# 2 filename .fi Print a double-sided legal document to a printer called "foo": .nf lpr -P foo -o media=legal -o sides=two-sided-long-edge filename .fi Print a presentation document 2-up to a printer called "foo": .nf lpr -P foo -o number-up=2 filename .fi .SH SEE ALSO .BR cancel (1), .BR lp (1), .BR lpadmin (8), .BR lpoptions (1), .BR lpq (1), .BR lprm (1), .BR lpstat (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/lprm.man000664 000765 000024 00000003415 13255074424 015400 0ustar00msweetstaff000000 000000 .\" .\" lprm man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH lprm 1 "CUPS" "22 May 2014" "Apple Inc." .SH NAME lprm \- cancel print jobs .SH SYNOPSIS .B lprm [ .B \-E ] [ .B \-U .I username ] [ .B \-h .IR server [ :port ] ] [ .B \-P .IR destination [ /instance ] ] [ .B \- ] [ .I job-id(s) ] .SH DESCRIPTION .B lprm cancels print jobs that have been queued for printing. If no arguments are supplied, the current job on the default destination is canceled. You can specify one or more job ID numbers to cancel those jobs or use the \fI\-\fR option to cancel all jobs. .SH OPTIONS The .B lprm command supports the following options: .TP 5 .B \-E Forces encryption when connecting to the server. .TP 5 \fB\-P \fIdestination\fR[\fI/instance\fR] Specifies the destination printer or class. .TP 5 \fB\-U \fIusername\fR Specifies an alternate username. .TP 5 \fB\-h \fIserver\fR[\fI:port\fR] Specifies an alternate server. .SH CONFORMING TO The CUPS version of .B lprm is compatible with the standard Berkeley command of the same name. .SH EXAMPLES Cancel the current job on the default printer: .nf lprm .fi Cancel job 1234: .nf lprm 1234 .fi Cancel all jobs: .nf lprm \- .fi .SH SEE ALSO .BR cancel (1), .BR lp (1), .BR lpq (1), .BR lpr (1), .BR lpstat (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/lpstat.man000664 000765 000024 00000007541 13255074424 015741 0ustar00msweetstaff000000 000000 .\" .\" lpstat man page for CUPS. .\" .\" Copyright 2007-2017 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH lpstat 1 "CUPS" "26 May 2017" "Apple Inc." .SH NAME lpstat \- print cups status information .SH SYNOPSIS .B lpstat [ .B \-E ] [ .B \-H ] [ .B \-U .I username ] [ \fB\-h \fIhostname\fR[\fB:\fIport\fR] ] [ .B \-l ] [ .B \-W .I which-jobs ] [ .B \-a [ .I destination(s) ] ] [ .B \-c [ .I class(es) ] ] [ .B \-d ] [ .B \-e ] [ .B \-o [ .I destination(s) ] ] [ .B \-p [ .I printer(s) ] ] [ .B \-r ] [ .B \-R ] [ .B \-s ] [ .B \-t ] [ .B \-u [ .I user(s) ] ] [ .B \-v [ .I printer(s) ] ] .SH DESCRIPTION \fBlpstat\fR displays status information about the current classes, jobs, and printers. When run with no arguments, \fBlpstat\fR will list active jobs queued by the current user. .SH OPTIONS The \fBlpstat\fR command supports the following options: .TP 5 .B \-E Forces encryption when connecting to the server. .TP 5 .B \-H Shows the server hostname and port. .TP 5 .B \-R Shows the ranking of print jobs. .TP 5 \fB\-U \fIusername\fR Specifies an alternate username. .TP 5 \fB\-W \fIwhich-jobs\fR Specifies which jobs to show, "completed" or "not-completed" (the default). This option \fImust\fR appear before the \fI-o\fR option and/or any printer names, otherwise the default ("not-completed") value will be used in the request to the scheduler. .TP 5 \fB\-a \fR[\fIprinter(s)\fR] Shows the accepting state of printer queues. If no printers are specified then all printers are listed. .TP 5 \fB\-c \fR[\fIclass(es)\fR] Shows the printer classes and the printers that belong to them. If no classes are specified then all classes are listed. .TP 5 .B \-d Shows the current default destination. .TP 5 .B \-e Shows all available destinations on the local network. .TP 5 \fB\-h \fIserver\fR[\fB:\fIport\fR] Specifies an alternate server. .TP 5 .B \-l Shows a long listing of printers, classes, or jobs. .TP 5 \fB\-o \fR[\fIdestination(s)\fR] Shows the jobs queued on the specified destinations. If no destinations are specified all jobs are shown. .TP 5 \fB\-p \fR[\fIprinter(s)\fR] Shows the printers and whether they are enabled for printing. If no printers are specified then all printers are listed. .TP 5 .B \-r Shows whether the CUPS server is running. .TP 5 .B \-s Shows a status summary, including the default destination, a list of classes and their member printers, and a list of printers and their associated devices. This is equivalent to using the \fI\-d\fR, \fI\-c\fR, and \fI\-v\fR options. .TP 5 .B \-t Shows all status information. This is equivalent to using the \fI\-r\fR, \fI\-d\fR, \fI\-c\fR, \fI\-v\fR, \fI\-a\fR, \fI\-p\fR, and \fI\-o\fR options. .TP 5 \fB\-u \fR[\fIuser(s)\fR] Shows a list of print jobs queued by the specified users. If no users are specified, lists the jobs queued by the current user. .TP 5 \fB\-v \fR[\fIprinter(s)\fR] Shows the printers and what device they are attached to. If no printers are specified then all printers are listed. .SH CONFORMING TO Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", and "#". Also, printer and class names are \fInot\fR case-sensitive. .LP The \fI\-h\fR, \fI-e\fR, \fI\-E\fR, \fI\-U\fR, and \fI\-W\fR options are unique to CUPS. .LP The Solaris \fI\-f\fR, \fI\-P\fR, and \fI\-S\fR options are silently ignored. .SH SEE ALSO .BR cancel (1), .BR lp (1), .BR lpq (1), .BR lpr (1), .BR lprm (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/mailto.conf.man000664 000765 000024 00000003724 13255074424 016642 0ustar00msweetstaff000000 000000 .\" .\" mailto.conf man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH mailto.conf 5 "CUPS" "12 June 2014" "Apple Inc." .SH NAME mailto.conf \- configuration file for cups email notifier .SH DESCRIPTION The \fBmailto.conf\fR file defines the local mail server and email notification preferences for CUPS. .LP Each line in the file can be a configuration directive, a blank line, or a comment. Configuration directives typically consist of a name and zero or more values separated by whitespace. The configuration directive name and values are case-insensitive. Comment lines start with the # character. .SS DIRECTIVES .TP 5 \fBCc \fIcc-address@domain.com\fR Specifies an additional recipient for all email notifications. .TP 5 \fBFrom \fIfrom-address@domain.com\fR Specifies the sender of email notifications. .TP 5 \fBSendmail \fIsendmail command and options\fR Specifies the sendmail command to use when sending email notifications. Only one \fISendmail\fR or \fISMTPServer\fR line may be present in the \fBmailto.conf\fR file. If multiple lines are present, only the last one is used. .TP 5 \fBSMTPServer \fIservername\fR Specifies a SMTP server to send email notifications to. Only one \fISendmail\fR or \fISMTPServer\fR line may be present in the \fBmailto.conf\fR file. If multiple lines are present, only the last one is used. .TP 5 \fBSubject \fIsubject-prefix\fR Specifies a prefix string for the subject line of an email notification. .SH SEE ALSO .BR cupsd (8), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/Makefile000664 000765 000024 00000011757 13255074424 015401 0ustar00msweetstaff000000 000000 # # Man page makefile for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 1993-2006 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include ../Makedefs # # Man pages... # MAN1 = cancel.$(MAN1EXT) \ cups.$(MAN1EXT) \ cups-config.$(MAN1EXT) \ cupstestdsc.$(MAN1EXT) \ cupstestppd.$(MAN1EXT) \ $(IPPFIND_MAN) \ ipptool.$(MAN1EXT) \ lp.$(MAN1EXT) \ lpoptions.$(MAN1EXT) \ lpq.$(MAN1EXT) \ lprm.$(MAN1EXT) \ lpr.$(MAN1EXT) \ lpstat.$(MAN1EXT) \ ppdc.$(MAN1EXT) \ ppdhtml.$(MAN1EXT) \ ppdi.$(MAN1EXT) \ ppdmerge.$(MAN1EXT) \ ppdpo.$(MAN1EXT) MAN5 = classes.conf.$(MAN5EXT) \ client.conf.$(MAN5EXT) \ cups-files.conf.$(MAN5EXT) \ cups-snmp.conf.$(MAN5EXT) \ cupsd.conf.$(MAN5EXT) \ cupsd-logs.$(MAN5EXT) \ ipptoolfile.$(MAN5EXT) \ mailto.conf.$(MAN5EXT) \ mime.convs.$(MAN5EXT) \ mime.types.$(MAN5EXT) \ ppdcfile.$(MAN5EXT) \ printers.conf.$(MAN5EXT) \ subscriptions.conf.$(MAN5EXT) MAN7 = backend.$(MAN7EXT) \ filter.$(MAN7EXT) \ notifier.$(MAN7EXT) MAN8 = cupsaccept.$(MAN8EXT) \ cupsaddsmb.$(MAN8EXT) \ cupsctl.$(MAN8EXT) \ cupsfilter.$(MAN8EXT) \ cups-lpd.$(MAN8EXT) \ cups-snmp.$(MAN8EXT) \ cupsd.$(MAN8EXT) \ cupsd-helper.$(MAN8EXT) \ cupsenable.$(MAN8EXT) \ lpadmin.$(MAN8EXT) \ lpinfo.$(MAN8EXT) \ lpmove.$(MAN8EXT) \ lpc.$(MAN8EXT) # # Make everything... # all: $(MAN1) $(MAN5) $(MAN7) $(MAN8) # # Make library targets... # libs: # # Make unit tests... # unittests: # # Clean all config and object files... # clean: $(RM) mantohtml mantohtml.o $(RM) $(MAN1) $(MAN5) $(MAN7) $(MAN8) # # Dummy depend target... # depend: # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: all $(INSTALL_DIR) -m 755 $(MANDIR)/man1 for file in $(MAN1); do \ echo Installing $$file in $(MANDIR)/man1...; \ $(INSTALL_MAN) $$file $(MANDIR)/man1; \ done $(INSTALL_DIR) -m 755 $(MANDIR)/man5 for file in $(MAN5); do \ echo Installing $$file in $(MANDIR)/man5...; \ $(INSTALL_MAN) $$file $(MANDIR)/man5; \ done $(INSTALL_DIR) -m 755 $(MANDIR)/man7 for file in $(MAN7); do \ echo Installing $$file in $(MANDIR)/man7...; \ $(INSTALL_MAN) $$file $(MANDIR)/man7; \ done $(INSTALL_DIR) -m 755 $(AMANDIR)/man$(MAN8DIR) for file in $(MAN8); do \ echo Installing $$file in $(AMANDIR)/man$(MAN8DIR)...; \ $(INSTALL_MAN) $$file $(AMANDIR)/man$(MAN8DIR); \ done for file in accept cupsreject reject; do \ $(RM) $(AMANDIR)/man$(MAN8DIR)/$$file.$(MAN8EXT); \ $(LN) cupsaccept.$(MAN8EXT) $(AMANDIR)/man$(MAN8DIR)/$$file.$(MAN8EXT); \ done $(RM) $(AMANDIR)/man$(MAN8DIR)/cupsdisable.$(MAN8EXT) $(LN) cupsenable.$(MAN8EXT) $(AMANDIR)/man$(MAN8DIR)/cupsdisable.$(MAN8EXT) for file in cups-deviced cups-driverd cups-exec; do \ $(RM) $(AMANDIR)/man$(MAN8DIR)/$$file.$(MAN8EXT); \ $(LN) cupsd-helper.$(MAN8EXT) $(AMANDIR)/man$(MAN8DIR)/$$file.$(MAN8EXT); \ done # # Install programs... # install-exec: # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Uninstall files... # uninstall: for file in $(MAN1); do \ $(RM) $(MANDIR)/man1/$$file; \ done -$(RMDIR) $(MANDIR)/man1 for file in $(MAN5); do \ $(RM) $(MANDIR)/man5/$$file; \ done -$(RMDIR) $(MANDIR)/man5 for file in $(MAN7); do \ $(RM) $(MANDIR)/man7/$$file; \ done -$(RMDIR) $(MANDIR)/man7 for file in $(MAN8); do \ $(RM) $(AMANDIR)/man$(MAN8DIR)/$$file; \ done $(RM) $(AMANDIR)/man$(MAN8DIR)/accept.$(MAN8EXT) $(RM) $(AMANDIR)/man$(MAN8DIR)/cupsreject.$(MAN8EXT) $(RM) $(AMANDIR)/man$(MAN8DIR)/reject.$(MAN8EXT) $(RM) $(AMANDIR)/man$(MAN8DIR)/cupsdisable.$(MAN8EXT) -$(RMDIR) $(AMANDIR)/man$(MAN8DIR) # # Local programs (not built when cross-compiling...) # local: html # # Make html versions of man pages... # html: $(MAN1) $(MAN5) $(MAN7) $(MAN8) mantohtml echo Converting man pages to HTML... for file in $(MAN1); do \ echo " $$file..."; \ ./mantohtml `basename $$file .$(MAN1EXT)`.man >../doc/help/man-`basename $$file .$(MAN1EXT)`.html; \ done for file in $(MAN5); do \ echo " $$file..."; \ ./mantohtml `basename $$file .$(MAN5EXT)`.man >../doc/help/man-`basename $$file .$(MAN5EXT)`.html; \ done for file in $(MAN7); do \ echo " $$file..."; \ ./mantohtml `basename $$file .$(MAN7EXT)`.man >../doc/help/man-`basename $$file .$(MAN7EXT)`.html; \ done for file in $(MAN8); do \ echo " $$file..."; \ ./mantohtml `basename $$file .$(MAN8EXT)`.man >../doc/help/man-`basename $$file .$(MAN8EXT)`.html; \ done mantohtml: mantohtml.o ../cups/$(LIBCUPSSTATIC) $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ mantohtml.o \ ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) \ $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) cups-2.2.7/man/mantohtml.c000664 000765 000024 00000056712 13255074424 016110 0ustar00msweetstaff000000 000000 /* * Man page to HTML conversion program. * * Copyright 2007-2017 by Apple Inc. * Copyright 2004-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers. */ #include #include #include /* * Local globals... */ static const char /* Start/end tags for fonts */ * const start_fonts[] = { "", "", "" }, * const end_fonts[] = { "", "", "" }; /* * Local functions... */ static void html_alternate(const char *s, const char *first, const char *second, FILE *fp); static void html_fputs(const char *s, int *font, FILE *fp); static void html_putc(int ch, FILE *fp); static void strmove(char *d, const char *s); /* * 'main()' - Convert a man page to HTML. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { FILE *infile, /* Input file */ *outfile; /* Output file */ char line[1024], /* Line from file */ *lineptr, /* Pointer into line */ anchor[1024], /* Anchor */ name[1024], /* Man page name */ ddpost[256]; /* Tagged list post markup */ int section = -1, /* Man page section */ pre = 0, /* Preformatted */ font = 0, /* Current font */ linenum = 0; /* Current line number */ float list_indent = 0.0f, /* Current list indentation */ nested_indent = 0.0f; /* Nested list indentation, if any */ const char *list = NULL, /* Current list, if any */ *nested = NULL; /* Nested list, if any */ const char *post = NULL; /* Text to add after the current line */ /* * Check arguments... */ if (argc > 3) { fputs("Usage: mantohtml [filename.man [filename.html]]\n", stderr); return (1); } /* * Open files as needed... */ if (argc > 1) { if ((infile = fopen(argv[1], "r")) == NULL) { perror(argv[1]); return (1); } } else infile = stdin; if (argc > 2) { if ((outfile = fopen(argv[2], "w")) == NULL) { perror(argv[2]); fclose(infile); return (1); } } else outfile = stdout; /* * Read from input and write the output... */ fputs("\n" "\n" "\n" "\n" "\t\n", outfile); anchor[0] = '\0'; while (fgets(line, sizeof(line), infile)) { size_t linelen = strlen(line); /* Length of line */ if (linelen > 0 && line[linelen - 1] == '\n') line[linelen - 1] = '\0'; linenum ++; if (line[0] == '.') { /* * Strip leading whitespace... */ while (line[1] == ' ' || line[1] == '\t') strmove(line + 1, line + 2); /* * Process man page commands... */ if (!strncmp(line, ".TH ", 4) && section < 0) { /* * Grab man page title... */ sscanf(line + 4, "%s%d", name, §ion); fprintf(outfile, "\t%s(%d)\n" "\n" "\n" "

%s(%d)

\n" "%s", name, section, name, section, start_fonts[font]); } else if (section < 0) continue; else if (!strncmp(line, ".SH ", 4) || !strncmp(line, ".SS ", 4)) { /* * Grab heading... */ int first = 1; fputs(end_fonts[font], outfile); font = 0; if (list) { fprintf(outfile, "\n", list); list = NULL; } if (line[2] == 'H') fputs("

", outfile); for (lineptr = line + 4; *lineptr; lineptr ++) { if (*lineptr == '\"') continue; else if (*lineptr == ' ') { html_putc(' ', outfile); first = 1; } else { if (first) html_putc(*lineptr, outfile); else html_putc(tolower(*lineptr & 255), outfile); first = 0; } } if (line[2] == 'H') fputs("

\n", outfile); else fputs("\n", outfile); } else if (!strncmp(line, ".B ", 3)) { /* * Grab bold text... */ fputs(end_fonts[font], outfile); font = 0; if (anchor[0]) fprintf(outfile, "", anchor); html_alternate(line + 3, "b", "b", outfile); if (anchor[0]) { fputs("", outfile); anchor[0] = '\0'; } if (post) { fputs(post, outfile); post = NULL; } } else if (!strncmp(line, ".I ", 3)) { /* * Grab italic text... */ fputs(end_fonts[font], outfile); font = 0; if (anchor[0]) fprintf(outfile, "", anchor); html_alternate(line + 3, "i", "i", outfile); if (anchor[0]) { fputs("", outfile); anchor[0] = '\0'; } if (post) { fputs(post, outfile); post = NULL; } } else if (!strncmp(line, ".BI ", 4)) { /* * Alternating bold and italic text... */ fputs(end_fonts[font], outfile); font = 0; if (anchor[0]) fprintf(outfile, "", anchor); html_alternate(line + 4, "b", "i", outfile); if (anchor[0]) { fputs("", outfile); anchor[0] = '\0'; } if (post) { fputs(post, outfile); post = NULL; } } else if (!strncmp(line, ".BR ", 4)) { /* * Alternating bold and roman (plain) text... */ fputs(end_fonts[font], outfile); font = 0; if (anchor[0]) fprintf(outfile, "", anchor); html_alternate(line + 4, "b", NULL, outfile); if (anchor[0]) { fputs("", outfile); anchor[0] = '\0'; } if (post) { fputs(post, outfile); post = NULL; } } else if (!strncmp(line, ".IB ", 4)) { /* * Alternating italic and bold text... */ fputs(end_fonts[font], outfile); font = 0; if (anchor[0]) fprintf(outfile, "", anchor); html_alternate(line + 4, "i", "b", outfile); if (anchor[0]) { fputs("", outfile); anchor[0] = '\0'; } if (post) { fputs(post, outfile); post = NULL; } } else if (!strncmp(line, ".IR ", 4)) { /* * Alternating italic and roman (plain) text... */ fputs(end_fonts[font], outfile); font = 0; if (anchor[0]) fprintf(outfile, "", anchor); html_alternate(line + 4, "i", NULL, outfile); if (anchor[0]) { fputs("", outfile); anchor[0] = '\0'; } if (post) { fputs(post, outfile); post = NULL; } } else if (!strncmp(line, ".RB ", 4)) { /* * Alternating roman (plain) and bold text... */ fputs(end_fonts[font], outfile); font = 0; if (anchor[0]) fprintf(outfile, "", anchor); html_alternate(line + 4, NULL, "b", outfile); if (anchor[0]) { fputs("", outfile); anchor[0] = '\0'; } if (post) { fputs(post, outfile); post = NULL; } } else if (!strncmp(line, ".RI ", 4)) { /* * Alternating roman (plain) and italic text... */ fputs(end_fonts[font], outfile); font = 0; if (anchor[0]) fprintf(outfile, "", anchor); html_alternate(line + 4, NULL, "i", outfile); if (anchor[0]) { fputs("", outfile); anchor[0] = '\0'; } if (post) { fputs(post, outfile); post = NULL; } } else if (!strncmp(line, ".SB ", 4)) { /* * Alternating small and bold text... */ fputs(end_fonts[font], outfile); font = 0; if (anchor[0]) fprintf(outfile, "", anchor); html_alternate(line + 4, "small", "b", outfile); if (anchor[0]) { fputs("", outfile); anchor[0] = '\0'; } if (post) { fputs(post, outfile); post = NULL; } } else if (!strncmp(line, ".SM ", 4)) { /* * Small text... */ fputs(end_fonts[font], outfile); font = 0; if (anchor[0]) fprintf(outfile, "", anchor); html_alternate(line + 4, "small", "small", outfile); if (anchor[0]) { fputs("", outfile); anchor[0] = '\0'; } if (post) { fputs(post, outfile); post = NULL; } } else if (!strcmp(line, ".LP") || !strcmp(line, ".PP") || !strcmp(line, ".P")) { /* * New paragraph... */ fputs(end_fonts[font], outfile); font = 0; if (list) { fprintf(outfile, "\n", list); list = NULL; } fputs("

", outfile); if (anchor[0]) { fprintf(outfile, "", anchor); anchor[0] = '\0'; } } else if (!strcmp(line, ".RS") || !strncmp(line, ".RS ", 4)) { /* * Indent... */ float amount = 3.0; /* Indentation */ if (line[3]) amount = (float)atof(line + 4); fputs(end_fonts[font], outfile); font = 0; if (list) { nested = list; list = NULL; nested_indent = list_indent; list_indent = 0.0f; } fprintf(outfile, "

\n", amount - nested_indent); } else if (!strcmp(line, ".RE")) { /* * Unindent... */ fputs(end_fonts[font], outfile); font = 0; fputs("
\n", outfile); if (nested) { list = nested; nested = NULL; list_indent = nested_indent; nested_indent = 0.0f; } } else if (!strcmp(line, ".HP") || !strncmp(line, ".HP ", 4)) { /* * Hanging paragraph... * * .HP i */ float amount = 3.0; /* Indentation */ if (line[3]) amount = (float)atof(line + 4); fputs(end_fonts[font], outfile); font = 0; if (list) { fprintf(outfile, "\n", list); list = NULL; } fprintf(outfile, "

", amount, -amount); if (anchor[0]) { fprintf(outfile, "", anchor); anchor[0] = '\0'; } if (line[1] == 'T') post = "
\n"; } else if (!strcmp(line, ".TP") || !strncmp(line, ".TP ", 4)) { /* * Tagged list... * * .TP i */ float amount = 3.0; /* Indentation */ if (line[3]) amount = (float)atof(line + 4); fputs(end_fonts[font], outfile); font = 0; if (list && strcmp(list, "dl")) { fprintf(outfile, "\n", list); list = NULL; } if (!list) { fputs("

\n", outfile); list = "dl"; list_indent = amount; } fputs("
", outfile); snprintf(ddpost, sizeof(ddpost), "
", amount); post = ddpost; if (anchor[0]) { fprintf(outfile, "", anchor); anchor[0] = '\0'; } } else if (!strncmp(line, ".IP ", 4)) { /* * Indented paragraph... * * .IP x i */ float amount = 3.0; /* Indentation */ const char *newlist = NULL; /* New list style */ const char *newtype = NULL; /* New list numbering type */ fputs(end_fonts[font], outfile); font = 0; lineptr = line + 4; while (isspace(*lineptr & 255)) lineptr ++; if (!strncmp(lineptr, "\\(bu", 4) || !strncmp(lineptr, "\\(em", 4)) { /* * Bullet list... */ newlist = "ul"; } else if (isdigit(*lineptr & 255)) { /* * Numbered list... */ newlist = "ol"; } else if (islower(*lineptr & 255)) { /* * Lowercase alpha list... */ newlist = "ol"; newtype = "a"; } else if (isupper(*lineptr & 255)) { /* * Lowercase alpha list... */ newlist = "ol"; newtype = "A"; } while (!isspace(*lineptr & 255)) lineptr ++; while (isspace(*lineptr & 255)) lineptr ++; if (isdigit(*lineptr & 255)) amount = (float)atof(lineptr); if (newlist && list && strcmp(newlist, list)) { fprintf(outfile, "\n", list); list = NULL; } if (newlist && !list) { if (newtype) fprintf(outfile, "<%s type=\"%s\">\n", newlist, newtype); else fprintf(outfile, "<%s>\n", newlist); list = newlist; } if (list) fprintf(outfile, "
  • ", amount); else fprintf(outfile, "

    ", amount); if (anchor[0]) { fprintf(outfile, "", anchor); anchor[0] = '\0'; } } else if (!strncmp(line, ".br", 3)) { /* * Grab line break... */ fputs("
    \n", outfile); } else if (!strncmp(line, ".de ", 4)) { /* * Define macro - ignore... */ while (fgets(line, sizeof(line), infile)) { linenum ++; if (!strncmp(line, "..", 2)) break; } } else if (!strncmp(line, ".ds ", 4) || !strncmp(line, ".rm ", 4) || !strncmp(line, ".tr ", 4) || !strncmp(line, ".hy ", 4) || !strncmp(line, ".IX ", 4) || !strncmp(line, ".PD", 3) || !strncmp(line, ".Sp", 3)) { /* * Ignore unused commands... */ } else if (!strncmp(line, ".Vb", 3) || !strncmp(line, ".nf", 3) || !strncmp(line, ".EX", 3)) { /* * Start preformatted... */ fputs(end_fonts[font], outfile); font = 0; // if (list) // { // fprintf(outfile, "\n", list); // list = NULL; // } pre = 1; fputs("

    \n", outfile);
          }
          else if (!strncmp(line, ".Ve", 3) || !strncmp(line, ".fi", 3) || !strncmp(line, ".EE", 3))
          {
           /*
            * End preformatted...
    	*/
    
    	fputs(end_fonts[font], outfile);
    	font = 0;
    
            if (pre)
    	{
              pre = 0;
    	  fputs("
    \n", outfile); } } else if (!strncmp(line, ".\\}", 3)) { /* * Ignore close block... */ } else if (!strncmp(line, ".ie", 3) || !strncmp(line, ".if", 3) || !strncmp(line, ".el", 3)) { /* * If/else - ignore... */ if (strchr(line, '{') != NULL) { /* * Skip whole block... */ while (fgets(line, sizeof(line), infile)) { linenum ++; if (strchr(line, '}') != NULL) break; } } } #if 0 else if (!strncmp(line, ". ", 4)) { /* * Grab ... */ } #endif /* 0 */ else if (!strncmp(line, ".\\\"#", 4)) { /* * Anchor for HTML output... */ strlcpy(anchor, line + 4, sizeof(anchor)); } else if (strncmp(line, ".\\\"", 3)) { /* * Unknown... */ if ((lineptr = strchr(line, ' ')) != NULL) *lineptr = '\0'; else if ((lineptr = strchr(line, '\n')) != NULL) *lineptr = '\0'; fprintf(stderr, "mantohtml: Unknown man page command \'%s\' on line %d.\n", line, linenum); } /* * Skip continuation lines... */ lineptr = line + strlen(line) - 1; if (lineptr >= line && *lineptr == '\\') { while (fgets(line, sizeof(line), infile)) { linenum ++; lineptr = line + strlen(line) - 2; if (lineptr < line || *lineptr != '\\') break; } } } else { /* * Process man page text... */ html_fputs(line, &font, outfile); putc('\n', outfile); if (post) { fputs(post, outfile); post = NULL; } } } fprintf(outfile, "%s\n", end_fonts[font]); font = 0; if (list) { fprintf(outfile, "\n", list); list = NULL; } fputs("\n" "\n", outfile); /* * Close files... */ if (infile != stdin) fclose(infile); if (outfile != stdout) fclose(outfile); /* * Return with no errors... */ return (0); } /* * 'html_alternate()' - Alternate words between two styles of text. */ static void html_alternate(const char *s, /* I - String */ const char *first, /* I - First style or NULL */ const char *second, /* I - Second style of NULL */ FILE *fp) /* I - File */ { int i = 0; /* Which style */ int quote = 0; /* Saw quote? */ int dolinks, /* Do hyperlinks to other man pages? */ link = 0; /* Doing a link now? */ /* * Skip leading whitespace... */ while (isspace(*s & 255)) s ++; dolinks = first && !strcmp(first, "b") && !second; while (*s) { if (!i && dolinks) { /* * See if we need to make a link to a man page... */ const char *end; /* End of current word */ const char *next; /* Start of next word */ for (end = s; *end && !isspace(*end & 255); end ++); for (next = end; isspace(*next & 255); next ++); if (isalnum(*s & 255) && *next == '(') { /* * See if the man file is available locally... */ char name[1024], /* Name */ manfile[1024], /* Man page filename */ manurl[1024]; /* Man page URL */ strlcpy(name, s, sizeof(name)); if ((size_t)(end - s) < sizeof(name)) name[end - s] = '\0'; snprintf(manfile, sizeof(manfile), "%s.man", name); snprintf(manurl, sizeof(manurl), "man-%s.html?TOPIC=Man+Pages", name); if (!access(manfile, 0)) { /* * Local man page, do a link... */ fprintf(fp, "", manurl); link = 1; } } } if (!i && first) fprintf(fp, "<%s>", first); else if (i && second) fprintf(fp, "<%s>", second); while ((!isspace(*s & 255) || quote) && *s) { if (*s == '\"') quote = !quote; if (*s == '\\' && s[1]) { s ++; html_putc(*s++, fp); } else html_putc(*s++, fp); } if (!i && first) fprintf(fp, "", first); else if (i && second) fprintf(fp, "", second); if (i && link) { fputs("", fp); link = 0; } i = 1 - i; /* * Skip trailing whitespace... */ while (isspace(*s & 255)) s ++; } putc('\n', fp); } /* * 'html_fputs()' - Output a string, quoting as needed HTML entities. */ static void html_fputs(const char *s, /* I - String */ int *font, /* IO - Font */ FILE *fp) /* I - File */ { while (*s) { if (*s == '\\') { s ++; if (!*s) break; if (*s == 'f') { int newfont; /* New font */ s ++; if (!*s) break; if (!font) { s ++; continue; } switch (*s++) { case 'R' : case 'P' : newfont = 0; break; case 'b' : case 'B' : newfont = 1; break; case 'i' : case 'I' : newfont = 2; break; default : fprintf(stderr, "mantohtml: Unknown font \"\\f%c\" ignored.\n", s[-1]); newfont = *font; break; } if (newfont != *font) { fputs(end_fonts[*font], fp); *font = newfont; fputs(start_fonts[*font], fp); } } else if (*s == '*') { /* * Substitute macro... */ s ++; if (!*s) break; switch (*s++) { case 'R' : fputs("®", fp); break; case '(' : if (!strncmp(s, "lq", 2)) fputs("“", fp); else if (!strncmp(s, "rq", 2)) fputs("”", fp); else if (!strncmp(s, "Tm", 2)) fputs("TM", fp); else fprintf(stderr, "mantohtml: Unknown macro \"\\*(%2s\" ignored.\n", s); if (*s) s ++; if (*s) s ++; break; default : fprintf(stderr, "mantohtml: Unknown macro \"\\*%c\" ignored.\n", s[-1]); break; } } else if (*s == '(') { if (!strncmp(s, "(em", 3)) { fputs("—", fp); s += 3; } else if (!strncmp(s, "(en", 3)) { fputs("–", fp); s += 3; } else { putc(*s, fp); s ++; } } else if (*s == '[') { /* * Substitute escaped character... */ s ++; if (!strncmp(s, "co]", 3)) fputs("©", fp); else if (!strncmp(s, "de]", 3)) fputs("°", fp); else if (!strncmp(s, "rg]", 3)) fputs("®", fp); else if (!strncmp(s, "tm]", 3)) fputs("TM", fp); if (*s) s ++; if (*s) s ++; if (*s) s ++; } else if (isdigit(s[0]) && isdigit(s[1]) && isdigit(s[2])) { fprintf(fp, "&#%d;", ((s[0] - '0') * 8 + s[1] - '0') * 8 + s[2] - '0'); s += 3; } else { if (*s != '\\' && *s != '\"' && *s != '\'' && *s != '-') { fprintf(stderr, "mantohtml: Unrecognized escape \"\\%c\" ignored.\n", *s); html_putc('\\', fp); } html_putc(*s++, fp); } } else if (!strncmp(s, "http://", 7) || !strncmp(s, "https://", 8) || !strncmp(s, "ftp://", 6)) { /* * Embed URL... */ char temp[1024]; /* Temporary string */ const char *end = s + 6; /* End of URL */ while (*end && !isspace(*end & 255)) end ++; if (end[-1] == ',' || end[-1] == '.' || end[-1] == ')') end --; strlcpy(temp, s, sizeof(temp)); if ((size_t)(end -s) < sizeof(temp)) temp[end - s] = '\0'; fprintf(fp, "%s", temp, temp); s = end; } else html_putc(*s++ & 255, fp); } } /* * 'html_putc()' - Put a single character, using entities as needed. */ static void html_putc(int ch, /* I - Character */ FILE *fp) /* I - File */ { if (ch == '&') fputs("&", fp); else if (ch == '<') fputs("<", fp); else putc(ch, fp); } /* * 'strmove()' - Move characters within a string. */ static void strmove(char *d, /* I - Destination */ const char *s) /* I - Source */ { while (*s) *d++ = *s++; *d = '\0'; } cups-2.2.7/man/mime.convs.man000664 000765 000024 00000004513 13255074424 016504 0ustar00msweetstaff000000 000000 .\" .\" mime.convs man page for CUPS. .\" .\" Copyright 2007-2015 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH mime.convs 5 "CUPS" "26 August 2015" "Apple Inc." .SH NAME mime.convs \- mime type conversion file for cups .SH DESCRIPTION The \fBmime.convs\fR file defines the filters that are available for converting files from one format to another. The standard filters support text, PDF, PostScript, and many types of image files. .LP Additional filters are specified in files with the extension \fI.convs\fR in the CUPS configuration directory. .LP Each line in the \fBmime.convs\fR file is a comment, blank, or filter line. Comment lines start with the # character. Filter lines specify the source and destination MIME types along with a relative cost associated with the filter and the filter to run: .nf source/type destination/type cost filter .fi The \fIsource/type\fR field specifies the source MIME media type that is consumed by the filter. .LP The \fIdestination/type\fR field specifies the destination MIME media type that is produced by the filter. .LP The \fIcost\fR field specifies the relative cost for running the filter. A value of 100 means that the filter uses a large amount of resources while a value of 0 means that the filter uses very few resources. .LP The \fIfilter\fR field specifies the filter program filename. Filenames are relative to the CUPS filter directory. .SH FILES \fI/etc/cups\fR - Typical CUPS configuration directory. .br \fI/usr/lib/cups/filter\fR - Typical CUPS filter directory. .br \fI/usr/libexec/cups/filter\fR - CUPS filter directory on macOS. .SH EXAMPLES Define a filter that converts PostScript documents to CUPS Raster format: .nf application/vnd.cups\-postscript application/vnd.cups\-raster 50 pstoraster .fi .SH SEE ALSO .BR cups-files.conf (5), .BR cupsd.conf (5), .BR cupsd (8), .BR cupsfilter (8), .BR mime.types (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/mime.types.man000664 000765 000024 00000011475 13255074424 016525 0ustar00msweetstaff000000 000000 .\" .\" mime.types man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH mime.types 5 "CUPS" "12 June 2014" "Apple Inc." .SH NAME mime.types \- mime type description file for cups .SH DESCRIPTION The \fBmime.types\fR file defines the recognized file types. .LP Additional file types are specified in files with the extension \fI.types\fR in the CUPS configuration directory. .LP Each line in the \fBmime.types\fR file is a comment, blank, or rule line. Comment lines start with the # character. Rule lines start with the MIME media type and are optionally followed by a series of file recognition rules: .nf \fImime/type \fR[ \fIrule \fR... \fIrule \fR] .fi Rules can be extended over multiple lines using the backslash character (\\): .nf \fImime/type \fR[ \fIreally-really-really-long-rule \fR... \fB\\ \fIrule \fR] .fi MIME media types specified by the \fImime/type\fR field are case-insensitive and are sorted in ascending alphanumeric order for the purposes of matching. See the "TYPE MATCHING AND PRIORITY" section for more information. .LP The rules may be grouped using parenthesis, joined using "+" for a logical AND, joined using "," or whitespace for a logical OR, and negated using "!". .SS RULES Rules take two forms - a filename extension by itself and functions with test values inside parenthesis. The following functions are available: .TP 5 \fBmatch("\fIpattern\fB")\fR True if the filename matches the given shell wildcard \fIpattern\fR. .TP 5 \fBascii(\fIoffset\fB,\fIlength\fB)\fR True if the \fIlength\fR bytes starting at \fIoffset\fR are valid printable ASCII (CR, NL, TAB, BS, 32-126). .TP 5 \fBprintable(\fIoffset\fB,\fIlength\fB)\fR True if the \fIlength\fR bytes starting at \fIoffset\fR are printable 8-bit chars (CR, NL, TAB, BS, 32-126, 128-254). .TP 5 \fBpriority(\fInumber\fB)\fR Specifies the relative priority of this MIME media type. The default priority is 100. Larger values have higher priority while smaller values have lower priority. .TP 5 \fBstring(\fIoffset\fB,"\fIstring\fB")\fR True if the bytes starting at \fIoffset\fR are identical to \fIstring\fR. .TP 5 \fBistring(\fIoffset\fB,"\fIstring\fB")\fR True if the bytes starting at \fIoffset\fR match \fIstring\fR without respect to case. .TP 5 \fBchar(\fIoffset\fB,\fIvalue\fB)\fR True if the byte at \fIoffset\fR is identical to \fIvalue\fR. .TP 5 \fBshort(\fIoffset\fB,\fIvalue\fB)\fR True if the 16-bit big-endian integer at \fIoffset\fR is identical to \fIvalue\fR. .TP 5 \fBint(\fIoffset\fB,\fIvalue\fB)\fR True if the 32-bit big-endian integer at \fIoffset\fR is identical to \fIvalue\fR. .TP 5 \fBlocale("\fIstring\fB")\fR True if current locale matches \fIstring\fR. .TP 5 \fBcontains(\fIoffset\fB,\fIrange\fB,"\fIstring\fB")\fR True if the bytes starting at \fIoffset\fR for \fIrange\fR bytes contains \fIstring\fR. .SS STRING CONSTANTS String constants can be specified inside quotes ("") for strings containing whitespace and angle brackets (<>) for hexadecimal strings. .SS TYPE MATCHING AND PRIORITY When CUPS needs to determine the MIME media type of a given file, it checks every MIME media type defined in the \fI.types\fR files. When two or more types match a given file, the type chosen will depend on the type name and priority, with higher-priority types being used over lower-priority ones. If the types have the same priority, the type names are sorted alphanumerically in ascending order and the first type is chosen. .LP For example, if two types "text/bar" and "text/foo" are defined as matching the extension "doc", normally the type "text/bar" will be chosen since its name is alphanumerically smaller than "text/foo". However, if "text/foo" also defines a higher priority than "text/bar", "text/foo" will be chosen instead. .SH FILES \fI/etc/cups\fR - Typical CUPS configuration directory. .SH EXAMPLES Define two MIME media types for raster data, with one being a subset with higher priority: .nf application/vnd.cups\-raster string(0,"RaSt") string(0,"tSaR") \\ string(0,"RaS2") string(0,"2SaR") \\ string(0,"RaS3") string(0,"3SaR") image/pwg-raster string(0,"RaS2") + \\ string(4,PwgRaster<00>) priority(150) .fi .SH SEE ALSO .BR cups-files.conf (5), .BR cupsd.conf (5), .BR cupsd (8), .BR cupsfilter (8), .BR mime.convs (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/notifier.man000664 000765 000024 00000002630 13255074424 016243 0ustar00msweetstaff000000 000000 .\" .\" notifier man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2007 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH notifier 7 "CUPS" "12 June 2014" "Apple Inc." .SH NAME notifier \- cups notification interface .SH SYNOPSIS .B notifier .I recipient [ .I user-data ] .SH DESCRIPTION The CUPS notifier interface provides a standard method for adding support for new event notification methods to CUPS. Each notifier delivers one or more IPP events from the standard input to the specified recipient. .LP Notifiers \fBMUST\fR read IPP messages from the standard input using the .BR ippNew () and .BR ippReadFile () functions and exit on error. Notifiers are encouraged to exit after a suitable period of inactivity, however they may exit after reading the first message or stay running until an error is seen. Notifiers inherit the environment and can use the logging mechanism documented in .BR filter (7). .SH SEE ALSO .BR cupsd (8), .BR filter (7), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/ppdc.man000664 000765 000024 00000005550 13255074424 015356 0ustar00msweetstaff000000 000000 .\" .\" ppdc man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2007 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH ppdc 1 "CUPS" "12 June 2014" "Apple Inc." .SH NAME ppdc \- cups ppd compiler (deprecated) .SH SYNOPSIS .B ppdc [ \fB\-D \fIname\fR[\fB=\fIvalue\fR] ] [ .B \-I .I include-directory ] [ .B \-c .I message-catalog ] [ .B \-d .I output-directory ] [ .B \-l .I language(s) ] [ .B \-m ] [ .B \-t ] [ .B \-v ] [ .B \-z ] [ .B \-\-cr ] [ .B \-\-crlf ] [ .B \-\-lf ] .I source-file .SH DESCRIPTION \fBppdc\fR compiles PPDC source files into one or more PPD files. \fBThis program is deprecated and will be removed in a future release of CUPS.\fR .SH OPTIONS \fBppdc\fR supports the following options: .TP 5 \fB\-D \fIname\fR[\fB=\fIvalue\fR] Sets the named variable for use in the source file. It is equivalent to using the \fI#define\fR directive in the source file. .TP 5 \fB\-I \fIinclude-directory\fR Specifies an alternate include directory. Multiple \fI-I\fR options can be supplied to add additional directories. .TP 5 \fB\-c \fImessage-catalog\fR Specifies a single message catalog file in GNU gettext (filename.po) or Apple strings (filename.strings) format to be used for localization. .TP 5 \fB\-d \fIoutput-directory\fR Specifies the output directory for PPD files. The default output directory is "ppd". .TP 5 \fB\-l \fIlanguage(s)\fR Specifies one or more languages to use when localizing the PPD file(s). The default language is "en" (English). Separate multiple languages with commas, for example "de_DE,en_UK,es_ES,es_MX,es_US,fr_CA,fr_FR,it_IT" will create PPD files with German, UK English, Spanish (Spain, Mexico, and US), French (France and Canada), and Italian languages in each file. .TP 5 .B \-m Specifies that the output filename should be based on the ModelName value instead of FileName or PCFilenName. .TP 5 .B \-t Specifies that PPD files should be tested instead of generated. .TP 5 .B \-v Specifies verbose output, basically a running status of which files are being loaded or written. .B \-z Generates compressed PPD files (filename.ppd.gz). The default is to generate uncompressed PPD files. .TP 5 \fB\-\-cr\fR .TP 5 \fB\-\-crlf\fR .TP 5 \fB\-\-lf\fR Specifies the line ending to use - carriage return, carriage return and line feed, or line feed alone. The default is to use the line feed character alone. .SH SEE ALSO .BR ppdhtml (1), .BR ppdi (1), .BR ppdmerge (1), .BR ppdpo (1), .BR ppdcfile (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/ppdcfile.man000664 000765 000024 00000011311 13255074424 016206 0ustar00msweetstaff000000 000000 .\" .\" ppdcfile man page for CUPS. .\" .\" Copyright 2007-2016 by Apple Inc. .\" Copyright 1997-2007 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH ppdcfile 5 "CUPS" "5 March 2016" "Apple Inc." .SH NAME ppdcfile \- cups ppd compiler source file format .SH DESCRIPTION The CUPS PPD compiler reads meta files that contain descriptions of one or more PPD files to be generated by .BR ppdc (1). This man page provides a quick reference to the supported keywords and should be used in conjunction with the online help for CUPS. .PP The source file format is plain ASCII text that can be edited using your favorite text editor. Comments are supported using the C (/* ... */) and C++ (// ...) comment mechanisms. .PP Printer driver information can be grouped and shared using curly braces ({ ... }); PPD files are written when a close brace or end-of-file is seen and a PCFileName directive has been defined. .PP Directives may be placed anywhere on a line and are followed by one or more values. The following is a list of the available directives and the values they accept: .TP 5 \fB#define \fIname value\fR .TP 5 \fB#elif \fR{\fIname \fR| \fIvalue\fR} .TP 5 \fB#else\fR .TP 5 \fB#endif\fR .TP 5 \fB#font \fIname encoding "version" charset status\fR .TP 5 \fB#if \fR{\fIname \fR| \fIvalue\fR} .TP 5 \fB#include <\fIfilename\fB>\fR .TP 5 \fB#include "\fIfilename\fB"\fR .TP 5 \fB#media \fIname width length\fR .TP 5 \fB#media "\fIname\fB/\fItext\fB" \fIwidth length\fR .TP 5 \fB#po \fIlocale \fB"\fIfilename\fB"\fR .TP 5 \fBAttribute \fIname \fB"" \fIvalue\fR .TP 5 \fBAttribute \fIname keyword value\fR .TP 5 \fBAttribute \fIname \fB"\fIkeyword\fB/\fItext\fB" \fIvalue\fR .TP 5 \fBChoice \fIname \fB"\fIcode\fB"\fR .TP 5 \fBChoice \fB"\fIname\fB/\fItext\fB" "\fIcode\fB"\fR .TP 5 \fBColorDevice \fIboolean-value\fR .TP 5 \fBColorModel \fIname colorspace colororder compression\fR .TP 5 \fBColorModel "\fIname\fB/\fItext\fB" \fIcolorspace colororder compression\fR .TP 5 \fBColorProfile \fIresolution\fB/\fImediatype gamma density matrix\fR .TP 5 \fBCopyright "\fItext\fR" .TP 5 \fBCustomMedia \fIname width length left bottom right top \fB"\fIsize-code\fB" "\fIregion-code\fB"\fR .TP 5 \fBCustomMedia "\fIname\fB/\fItext\fB" \fIwidth length left bottom right top \fB"\fIsize-code\fB" "\fIregion-code\fB"\fR .TP 5 \fBCutter \fIboolean-value\fR .TP 5 \fBDarkness \fItemperature name\fR .TP 5 \fBDarkness \fItemperature \fB"\fIname\fB/\fItext\fB"\fR .TP 5 \fBDriverType \fItype\fR .TP 5 \fBDuplex \fItype\fR .TP 5 \fBFilter \fImime-type cost program\fR .TP 5 \fBFinishing \fIname\fR .TP 5 \fBFinishing "\fIname\fB/\fItext\fB"\fR .TP 5 \fBFont *\fR .TP 5 \fBFont \fIname encoding \fB"\fIversion\fB" \fIcharset status\fR .TP 5 \fBGroup \fIname\fR .TP 5 \fBGroup "\fIname\fB/\fItext\fB"\fR .TP 5 \fBHWMargins \fIleft bottom right top\fR .TP 5 \fBInputSlot \fIposition name\fR .TP 5 \fBInputSlot \fIposition \fB"\fIname\fB/\fItext\fB"\fR .TP 5 \fBInstallable \fIname\fR .TP 5 \fBInstallable "\fIname\fB/\fItext\fB"\fR .TP 5 \fBLocAttribute \fIname \fB"\fIkeyword\fB/\fItext\fB" \fIvalue\fR .TP 5 \fBManualCopies \fIboolean-value\fR .TP 5 \fBManufacturer "\fIname\fB"\fR .TP 5 \fBMaxSize \fIwidth length\fR .TP 5 \fBMediaSize \fIname\fR .TP 5 \fBMediaType \fItype name\fR .TP 5 \fBMediaType \fItype \fB"\fIname\fB/\fItext\fB"\fR .TP 5 \fBMinSize \fIwidth length\fR .TP 5 \fBModelName "\fIname\fB"\fR .TP 5 \fBModelNumber \fInumber\fR .TP 5 \fBOption \fIname type section order\fR .TP 5 \fBOption "\fIname\fB/\fItext\fB" \fItype section order\fR .TP 5 \fBPCFileName "\fIfilename.ppd\fB"\fR .TP 5 \fBResolution \fIcolorspace bits-per-color row-count row-feed row-step name\fR .TP 5 \fBResolution \fIcolorspace bits-per-color row-count row-feed row-step \fB"\fIname\fB/\fItext\fB"\fR .TP 5 \fBSimpleColorProfile \fIresolution\fB/\fImediatype density yellow-density red-density gamma red-adjust green-adjust blue-adjust\fR .TP 5 \fBThroughput \fIpages-per-minute\fR .TP 5 \fBUIConstraints "\fI*Option1 *Option2\fB"\fR .TP 5 \fBUIConstraints "\fI*Option1 Choice1 *Option2\fB"\fR .TP 5 \fBUIConstraints "\fI*Option1 *Option2 Choice2\fB"\fR .TP 5 \fBUIConstraints "\fI*Option1 Choice1 *Option2 Choice2\fB"\fR .TP 5 \fBVariablePaperSize \fIboolean-value\fR .TP 5 \fBVersion \fInumber\fR .SH SEE ALSO .BR ppdc (1), .BR ppdhtml (1), .BR ppdi (1), .BR ppdmerge (1), .BR ppdpo (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/ppdhtml.man000664 000765 000024 00000002767 13255074424 016107 0ustar00msweetstaff000000 000000 .\" .\" ppdhtml man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2007 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH ppdhtml 1 "CUPS" "12 June 2014" "Apple Inc." .SH NAME ppdhtml \- cups html summary generator (deprecated) .SH SYNOPSIS .B ppdhtml [ \fB\-D \fIname\fR[\fB=\fIvalue\fR] ] [ .B \-I .I include-directory ] .I source-file .SH DESCRIPTION \fBppdhtml\fR reads a driver information file and produces a HTML summary page that lists all of the drivers in a file and the supported options. \fBThis program is deprecated and will be removed in a future release of CUPS.\fR .SH OPTIONS \fBppdhtml\fR supports the following options: .TP 5 \fB\-D \fIname\fR[\fB=\fIvalue\fR] Sets the named variable for use in the source file. It is equivalent to using the \fI#define\fR directive in the source file. .TP 5 \fB\-I \fIinclude-directory\fR Specifies an alternate include directory. Multiple \fI-I\fR options can be supplied to add additional directories. .SH SEE ALSO .BR ppdc (1), .BR ppdcfile (5), .BR ppdi (1), .BR ppdmerge (1), .BR ppdpo (1), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/ppdi.man000664 000765 000024 00000003241 13255074424 015357 0ustar00msweetstaff000000 000000 .\" .\" ppdi man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2007 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH ppdi 1 "CUPS" "12 June 2014" "Apple Inc." .SH NAME ppdi \- import ppd files (deprecated) .SH SYNOPSIS .B ppdi [ .B \-I .I include-directory ] [ .B \-o .I source-file ] .I ppd-file [ ... .I ppd-file ] .SH DESCRIPTION \fBppdi\fR imports one or more PPD files into a PPD compiler source file. Multiple languages of the same PPD file are merged into a single printer definition to facilitate accurate changes for all localizations. \fBThis program is deprecated and will be removed in a future release of CUPS.\fR .SH OPTIONS \fBppdi\fR supports the following options: .TP 5 \fB\-I \fIinclude-directory\fR Specifies an alternate include directory. Multiple \fI-I\fR options can be supplied to add additional directories. .TP 5 \fB\-o \fIsource-file\fR Specifies the PPD source file to update. If the source file does not exist, a new source file is created. Otherwise the existing file is merged with the new PPD file(s) on the command-line. If no source file is specified, the filename \fIppdi.drv\fR is used. .SH SEE ALSO .BR ppdc (1), .BR ppdhtml (1), .BR ppdmerge (1), .BR ppdpo (1), .BR ppdcfile (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/ppdmerge.man000664 000765 000024 00000002722 13255074424 016231 0ustar00msweetstaff000000 000000 .\" .\" ppdmerge man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2007 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH ppdmerge 1 "CUPS" "12 June 2014" "Apple Inc." .SH NAME ppdmerge \- merge ppd files (deprecated) .SH SYNOPSIS .B ppdmerge [ .B \-o .I output-ppd-file ] .I ppd-file .I ppd-file [ ... .I ppd-file ] .SH DESCRIPTION \fBppdmerge\fR merges two or more PPD files into a single, multi-language PPD file. \fBThis program is deprecated and will be removed in a future release of CUPS.\fR .SH OPTIONS \fBppdmerge\fR supports the following options: .TP \fB\-o \fIoutput-ppd-file\fR Specifies the PPD file to create. If not specified, the merged PPD file is written to the standard output. If the output file already exists, it is silently overwritten. .SH NOTES \fBppdmerge\fR does not check whether the merged PPD files are for the same device. Merging of different device PPDs will yield unpredictable results. .SH SEE ALSO .BR ppdc (1), .BR ppdhtml (1), .BR ppdi (1), .BR ppdpo (1), .BR ppdcfile (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/ppdpo.man000664 000765 000024 00000003332 13255074424 015546 0ustar00msweetstaff000000 000000 .\" .\" ppdpo man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2007 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH ppdpo 1 "CUPS" "12 June 2014" "Apple Inc." .SH NAME ppdpo \- ppd message catalog generator (deprecated) .SH SYNOPSIS .B ppdpo [ \fB\-D \fIname\fR[\fB=\fIvalue\fR] ] [ .B \-I .I include-directory ] [ .B \-o .I output-file ] .I source-file .SH DESCRIPTION \fBppdpo\fR extracts UI strings from PPDC source files and updates either a GNU gettext or macOS strings format message catalog source file for translation. \fBThis program is deprecated and will be removed in a future release of CUPS.\fR .SH OPTIONS \fBppdpo\fR supports the following options: .TP 5 \fB\-D \fIname\fR[\fB=\fIvalue\fR] Sets the named variable for use in the source file. It is equivalent to using the \fI#define\fR directive in the source file. .TP 5 \fB\-I \fIinclude-directory\fR Specifies an alternate include directory. Multiple \fI-I\fR options can be supplied to add additional directories. .TP 5 \fB\-o \fIoutput-file\fR Specifies the output file. The supported extensions are \fI.po\fR or \fI.po.gz\fR for GNU gettext format message catalogs and \fI.strings\fR for macOS strings files. .SH SEE ALSO .BR ppdc (1), .BR ppdhtml (1), .BR ppdi (1), .BR ppdmerge (1), .BR ppdcfile(5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/printers.conf.man000664 000765 000024 00000002330 13255074424 017213 0ustar00msweetstaff000000 000000 .\" .\" printers.conf man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH printers.conf 5 "CUPS" "15 April 2014" "Apple Inc." .SH NAME printers.conf \- printer configuration file for cups .SH DESCRIPTION The \fBprinters.conf\fR file defines the local printers that are available. It is normally located in the \fI/etc/cups\fR directory and is maintained by the .BR cupsd (8) program. This file is not intended to be edited or managed manually. .SH NOTES The name, location, and format of this file are an implementation detail that will change in future releases of CUPS. .SH SEE ALSO .BR classes.conf (5), .BR cupsd (8), .BR cupsd.conf (5), .BR mime.convs (5), .BR mime.types (5), .BR subscriptions.conf (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/man/subscriptions.conf.man000664 000765 000024 00000002401 13255074424 020253 0ustar00msweetstaff000000 000000 .\" .\" subscriptions.conf man page for CUPS. .\" .\" Copyright 2007-2014 by Apple Inc. .\" Copyright 1997-2006 by Easy Software Products. .\" .\" These coded instructions, statements, and computer programs are the .\" property of Apple Inc. 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 file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" .TH subscriptions.conf 5 "CUPS" "15 April 2014" "Apple Inc." .SH NAME subscriptions.conf \- subscription configuration file for cups .SH DESCRIPTION The \fBsubscriptions.conf\fR file defines the local event notification subscriptions that are active. It is normally located in the \fI/etc/cups\fR directory and is maintained by the .BR cupsd (8) program. This file is not intended to be edited or managed manually. .SH NOTES The name, location, and format of this file are an implementation detail that will change in future releases of CUPS. .SH SEE ALSO .BR classes.conf (5), .BR cupsd (8), .BR cupsd.conf (5), .BR mime.convs (5), .BR mime.types (5), .BR printers.conf (5), CUPS Online Help (http://localhost:631/help) .SH COPYRIGHT Copyright \[co] 2007-2017 by Apple Inc. cups-2.2.7/locale/checkpo.c000664 000765 000024 00000027647 13255074424 016212 0ustar00msweetstaff000000 000000 /* * Verify that translations in the .po file have the same number and type of * printf-style format strings. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * Usage: * * checkpo filename.{po,strings} [... filenameN.{po,strings}] * * Compile with: * * gcc -o checkpo checkpo.c `cups-config --libs` */ #include /* * Local functions... */ static char *abbreviate(const char *s, char *buf, int bufsize); static cups_array_t *collect_formats(const char *id); static cups_array_t *cups_load_strings(const char *filename); static int cups_read_strings(cups_file_t *fp, char *buffer, size_t bufsize, char **id, char **str); static char *cups_scan_strings(char *buffer); static void free_formats(cups_array_t *fmts); /* * 'main()' - Validate .po and .strings files. */ int /* O - Exit code */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ cups_array_t *po; /* .po file */ _cups_message_t *msg; /* Current message */ cups_array_t *idfmts, /* Format strings in msgid */ *strfmts; /* Format strings in msgstr */ char *idfmt, /* Current msgid format string */ *strfmt; /* Current msgstr format string */ int fmtidx; /* Format index */ int status, /* Exit status */ pass, /* Pass/fail status */ untranslated; /* Untranslated messages */ char idbuf[80], /* Abbreviated msgid */ strbuf[80]; /* Abbreviated msgstr */ if (argc < 2) { puts("Usage: checkpo filename.{po,strings} [... filenameN.{po,strings}]"); return (1); } /* * Check every .po or .strings file on the command-line... */ for (i = 1, status = 0; i < argc; i ++) { /* * Use the CUPS .po loader to get the message strings... */ if (strstr(argv[i], ".strings")) po = cups_load_strings(argv[i]); else po = _cupsMessageLoad(argv[i], 1); if (!po) { perror(argv[i]); return (1); } if (i > 1) putchar('\n'); printf("%s: ", argv[i]); fflush(stdout); /* * Scan every message for a % string and then match them up with * the corresponding string in the translation... */ pass = 1; untranslated = 0; for (msg = (_cups_message_t *)cupsArrayFirst(po); msg; msg = (_cups_message_t *)cupsArrayNext(po)) { /* * Make sure filter message prefixes are not translated... */ if (!strncmp(msg->id, "ALERT:", 6) || !strncmp(msg->id, "CRIT:", 5) || !strncmp(msg->id, "DEBUG:", 6) || !strncmp(msg->id, "DEBUG2:", 7) || !strncmp(msg->id, "EMERG:", 6) || !strncmp(msg->id, "ERROR:", 6) || !strncmp(msg->id, "INFO:", 5) || !strncmp(msg->id, "NOTICE:", 7) || !strncmp(msg->id, "WARNING:", 8)) { if (pass) { pass = 0; puts("FAIL"); } printf(" Bad prefix on filter message \"%s\"\n", abbreviate(msg->id, idbuf, sizeof(idbuf))); } idfmt = msg->id + strlen(msg->id) - 1; if (idfmt >= msg->id && *idfmt == '\n') { if (pass) { pass = 0; puts("FAIL"); } printf(" Trailing newline in message \"%s\"\n", abbreviate(msg->id, idbuf, sizeof(idbuf))); } for (; idfmt >= msg->id; idfmt --) if (!isspace(*idfmt & 255)) break; if (idfmt >= msg->id && *idfmt == '!') { if (pass) { pass = 0; puts("FAIL"); } printf(" Exclamation in message \"%s\"\n", abbreviate(msg->id, idbuf, sizeof(idbuf))); } if ((idfmt - 2) >= msg->id && !strncmp(idfmt - 2, "...", 3)) { if (pass) { pass = 0; puts("FAIL"); } printf(" Ellipsis in message \"%s\"\n", abbreviate(msg->id, idbuf, sizeof(idbuf))); } if (!msg->str || !msg->str[0]) { untranslated ++; continue; } else if (strchr(msg->id, '%')) { idfmts = collect_formats(msg->id); strfmts = collect_formats(msg->str); fmtidx = 0; for (strfmt = (char *)cupsArrayFirst(strfmts); strfmt; strfmt = (char *)cupsArrayNext(strfmts)) { if (isdigit(strfmt[1] & 255) && strfmt[2] == '$') { /* * Handle positioned format stuff... */ fmtidx = strfmt[1] - '1'; strfmt += 3; if ((idfmt = (char *)cupsArrayIndex(idfmts, fmtidx)) != NULL) idfmt ++; } else { /* * Compare against the current format... */ idfmt = (char *)cupsArrayIndex(idfmts, fmtidx); } fmtidx ++; if (!idfmt || strcmp(strfmt, idfmt)) break; } if (cupsArrayCount(strfmts) != cupsArrayCount(idfmts) || strfmt) { if (pass) { pass = 0; puts("FAIL"); } printf(" Bad translation string \"%s\"\n for \"%s\"\n", abbreviate(msg->str, strbuf, sizeof(strbuf)), abbreviate(msg->id, idbuf, sizeof(idbuf))); fputs(" Translation formats:", stdout); for (strfmt = (char *)cupsArrayFirst(strfmts); strfmt; strfmt = (char *)cupsArrayNext(strfmts)) printf(" %s", strfmt); fputs("\n Original formats:", stdout); for (idfmt = (char *)cupsArrayFirst(idfmts); idfmt; idfmt = (char *)cupsArrayNext(idfmts)) printf(" %s", idfmt); putchar('\n'); putchar('\n'); } free_formats(idfmts); free_formats(strfmts); } /* * Only allow \\, \n, \r, \t, \", and \### character escapes... */ for (strfmt = msg->str; *strfmt; strfmt ++) if (*strfmt == '\\' && strfmt[1] != '\\' && strfmt[1] != 'n' && strfmt[1] != 'r' && strfmt[1] != 't' && strfmt[1] != '\"' && !isdigit(strfmt[1] & 255)) { if (pass) { pass = 0; puts("FAIL"); } printf(" Bad escape \\%c in filter message \"%s\"\n" " for \"%s\"\n", strfmt[1], abbreviate(msg->str, strbuf, sizeof(strbuf)), abbreviate(msg->id, idbuf, sizeof(idbuf))); break; } } if (pass) { if ((untranslated * 10) >= cupsArrayCount(po) && strcmp(argv[i], "cups.pot")) { /* * Only allow 10% of messages to be untranslated before we fail... */ pass = 0; puts("FAIL"); printf(" Too many untranslated messages (%d of %d)\n", untranslated, cupsArrayCount(po)); } else if (untranslated > 0) printf("PASS (%d of %d untranslated)\n", untranslated, cupsArrayCount(po)); else puts("PASS"); } if (!pass) status = 1; _cupsMessageFree(po); } return (status); } /* * 'abbreviate()' - Abbreviate a message string as needed. */ static char * /* O - Abbreviated string */ abbreviate(const char *s, /* I - String to abbreviate */ char *buf, /* I - Buffer */ int bufsize) /* I - Size of buffer */ { char *bufptr; /* Pointer into buffer */ for (bufptr = buf, bufsize -= 4; *s && bufsize > 0; s ++) { if (*s == '\n') { if (bufsize < 2) break; *bufptr++ = '\\'; *bufptr++ = 'n'; bufsize -= 2; } else if (*s == '\t') { if (bufsize < 2) break; *bufptr++ = '\\'; *bufptr++ = 't'; bufsize -= 2; } else if (*s >= 0 && *s < ' ') { if (bufsize < 4) break; sprintf(bufptr, "\\%03o", *s); bufptr += 4; bufsize -= 4; } else { *bufptr++ = *s; bufsize --; } } if (*s) memcpy(bufptr, "...", 4); else *bufptr = '\0'; return (buf); } /* * 'collect_formats()' - Collect all of the format strings in the msgid. */ static cups_array_t * /* O - Array of format strings */ collect_formats(const char *id) /* I - msgid string */ { cups_array_t *fmts; /* Array of format strings */ char buf[255], /* Format string buffer */ *bufptr; /* Pointer into format string */ fmts = cupsArrayNew(NULL, NULL); while ((id = strchr(id, '%')) != NULL) { if (id[1] == '%') { /* * Skip %%... */ id += 2; continue; } for (bufptr = buf; *id && bufptr < (buf + sizeof(buf) - 1); id ++) { *bufptr++ = *id; if (strchr("CDEFGIOSUXcdeifgopsux", *id)) { id ++; break; } } *bufptr = '\0'; cupsArrayAdd(fmts, strdup(buf)); } return (fmts); } /* * 'cups_load_strings()' - Load a .strings file into a _cups_msg_t array. */ static cups_array_t * /* O - CUPS array of _cups_msg_t values */ cups_load_strings(const char *filename) /* I - File to load */ { cups_file_t *fp; /* .strings file */ cups_array_t *po; /* Localization array */ _cups_message_t *m; /* Localization message */ char buffer[8192], /* Message buffer */ *id, /* ID string */ *str; /* Translated message */ if ((fp = cupsFileOpen(filename, "r")) == NULL) return (NULL); po = _cupsMessageNew(NULL); while (cups_read_strings(fp, buffer, sizeof(buffer), &id, &str)) { if ((m = malloc(sizeof(_cups_message_t))) == NULL) break; m->id = strdup(id); m->str = strdup(str); if (m->id && m->str) cupsArrayAdd(po, m); else { if (m->id) free(m->id); if (m->str) free(m->str); free(m); cupsArrayDelete(po); po = NULL; break; } } cupsFileClose(fp); return (po); } /* * 'cups_read_strings()' - Read a pair of strings from a .strings file. */ static int /* O - 1 on success, 0 on failure */ cups_read_strings(cups_file_t *strings, /* I - .strings file */ char *buffer, /* I - Line buffer */ size_t bufsize, /* I - Size of line buffer */ char **id, /* O - Pointer to ID string */ char **str) /* O - Pointer to translation string */ { char *bufptr; /* Pointer into buffer */ while (cupsFileGets(strings, buffer, bufsize)) { if (buffer[0] != '\"') continue; *id = buffer + 1; bufptr = cups_scan_strings(buffer); if (*bufptr != '\"') continue; *bufptr++ = '\0'; while (*bufptr && *bufptr != '\"') bufptr ++; if (!*bufptr) continue; *str = bufptr + 1; bufptr = cups_scan_strings(bufptr); if (*bufptr != '\"') continue; *bufptr = '\0'; return (1); } return (0); } /* * 'cups_scan_strings()' - Scan a quoted string. */ static char * /* O - End of string */ cups_scan_strings(char *buffer) /* I - Start of string */ { char *bufptr; /* Pointer into string */ for (bufptr = buffer + 1; *bufptr && *bufptr != '\"'; bufptr ++) { if (*bufptr == '\\') { if (bufptr[1] >= '0' && bufptr[1] <= '3' && bufptr[2] >= '0' && bufptr[2] <= '7' && bufptr[3] >= '0' && bufptr[3] <= '7') { /* * Decode \nnn octal escape... */ *bufptr = (char)(((((bufptr[1] - '0') << 3) | (bufptr[2] - '0')) << 3) | (bufptr[3] - '0')); _cups_strcpy(bufptr + 1, bufptr + 4); } else { /* * Decode \C escape... */ _cups_strcpy(bufptr, bufptr + 1); if (*bufptr == 'n') *bufptr = '\n'; else if (*bufptr == 'r') *bufptr = '\r'; else if (*bufptr == 't') *bufptr = '\t'; } } } return (bufptr); } /* * 'free_formats()' - Free all of the format strings. */ static void free_formats(cups_array_t *fmts) /* I - Array of format strings */ { char *s; /* Current string */ for (s = (char *)cupsArrayFirst(fmts); s; s = (char *)cupsArrayNext(fmts)) free(s); cupsArrayDelete(fmts); } cups-2.2.7/locale/cups.footer000664 000765 000024 00000422152 13255074424 016612 0ustar00msweetstaff000000 000000 msgid "accuracy-units" msgstr "Accuracy Units" msgid "accuracy-units.mm" msgstr "Millimeters" msgid "accuracy-units.nm" msgstr "Nanometers" msgid "accuracy-units.um" msgstr "Micrometers" msgid "baling" msgstr "Bale Output" msgid "baling-type" msgstr "Bale Using" msgid "baling-type.band" msgstr "Band" msgid "baling-type.shrink-wrap" msgstr "Shrink Wrap" msgid "baling-type.wrap" msgstr "Wrap" msgid "baling-when" msgstr "Bale After" msgid "baling-when.after-job" msgstr "Job" msgid "baling-when.after-sets" msgstr "Sets" msgid "binding" msgstr "Bind Output" msgid "binding-reference-edge" msgstr "Bind Edge" msgid "binding-reference-edge.bottom" msgstr "Bottom" msgid "binding-reference-edge.left" msgstr "Left" msgid "binding-reference-edge.right" msgstr "Right" msgid "binding-reference-edge.top" msgstr "Top" msgid "binding-type" msgstr "Binder Type" msgid "binding-type.adhesive" msgstr "Adhesive" msgid "binding-type.comb" msgstr "Comb" msgid "binding-type.flat" msgstr "Flat" msgid "binding-type.padding" msgstr "Padding" msgid "binding-type.perfect" msgstr "Perfect" msgid "binding-type.spiral" msgstr "Spiral" msgid "binding-type.tape" msgstr "Tape" msgid "binding-type.velo" msgstr "Velo" msgid "charge-info-message" msgstr "Print Job Cost" msgid "coating" msgstr "Coat Sheets" msgid "coating-sides" msgstr "Add Coating To" msgid "coating-sides.back" msgstr "Back" msgid "coating-sides.both" msgstr "Front and Back" msgid "coating-sides.front" msgstr "Front" msgid "coating-type" msgstr "Type of Coating" msgid "coating-type.archival" msgstr "Archival" msgid "coating-type.archival-glossy" msgstr "Archival Glossy" msgid "coating-type.archival-matte" msgstr "Archival Matte" msgid "coating-type.archival-semi-gloss" msgstr "Archival Semi Gloss" msgid "coating-type.glossy" msgstr "Glossy" msgid "coating-type.high-gloss" msgstr "High Gloss" msgid "coating-type.matte" msgstr "Matte" msgid "coating-type.semi-gloss" msgstr "Semi-gloss" msgid "coating-type.silicone" msgstr "Silicone" msgid "coating-type.translucent" msgstr "Translucent" msgid "confirmation-sheet-print" msgstr "Print Confirmation Sheet" msgid "copies" msgstr "Copies" msgid "cover-back" msgstr "Back Cover" msgid "cover-front" msgstr "Front Cover" msgid "cover-sheet-info" msgstr "Cover Sheet Info" msgid "cover-sheet-info-supported.date-time" msgstr "Date Time" msgid "cover-sheet-info-supported.from-name" msgstr "From Name" msgid "cover-sheet-info-supported.logo" msgstr "Logo" msgid "cover-sheet-info-supported.message" msgstr "Message" msgid "cover-sheet-info-supported.organization" msgstr "Organization" msgid "cover-sheet-info-supported.subject" msgstr "Subject" msgid "cover-sheet-info-supported.to-name" msgstr "To Name" msgid "cover-type" msgstr "Printed Cover" msgid "cover-type.no-cover" msgstr "No Cover" msgid "cover-type.print-back" msgstr "Back Only" msgid "cover-type.print-both" msgstr "Front and Back" msgid "cover-type.print-front" msgstr "Front Only" msgid "cover-type.print-none" msgstr "None" msgid "covering" msgstr "Cover Output" msgid "covering-name" msgstr "Add Cover" msgid "covering-name.plain" msgstr "Plain" msgid "covering-name.pre-cut" msgstr "Pre-cut" msgid "covering-name.pre-printed" msgstr "Pre-printed" msgid "detailed-status-message" msgstr "Detailed Status Message" msgid "document-copies" msgstr "Copies" msgid "document-state" msgstr "Document State" msgid "document-state-reasons" msgstr "Detailed Document State" msgid "document-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "document-state-reasons.canceled-at-device" msgstr "Canceled At Device" msgid "document-state-reasons.canceled-by-operator" msgstr "Canceled By Operator" msgid "document-state-reasons.canceled-by-user" msgstr "Canceled By User" msgid "document-state-reasons.completed-successfully" msgstr "Completed Successfully" msgid "document-state-reasons.completed-with-errors" msgstr "Completed With Errors" msgid "document-state-reasons.completed-with-warnings" msgstr "Completed With Warnings" msgid "document-state-reasons.compression-error" msgstr "Compression Error" msgid "document-state-reasons.data-insufficient" msgstr "Data Insufficient" msgid "document-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "document-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "document-state-reasons.digital-signature-wait" msgstr "Digital Signature Wait" msgid "document-state-reasons.document-access-error" msgstr "Document Access Error" msgid "document-state-reasons.document-fetchable" msgstr "Document Fetchable" msgid "document-state-reasons.document-format-error" msgstr "Document Format Error" msgid "document-state-reasons.document-password-error" msgstr "Document Password Error" msgid "document-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "document-state-reasons.document-security-error" msgstr "Document Security Error" msgid "document-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "document-state-reasons.errors-detected" msgstr "Errors Detected" msgid "document-state-reasons.incoming" msgstr "Incoming" msgid "document-state-reasons.interpreting" msgstr "Interpreting" msgid "document-state-reasons.none" msgstr "None" msgid "document-state-reasons.outgoing" msgstr "Outgoing" msgid "document-state-reasons.printing" msgstr "Printing" msgid "document-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "document-state-reasons.queued" msgstr "Queued" msgid "document-state-reasons.queued-for-marker" msgstr "Queued For Marker" msgid "document-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "document-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "document-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "document-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "document-state-reasons.transforming" msgstr "Transforming" msgid "document-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "document-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "document-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "document-state.3" msgstr "Pending" msgid "document-state.5" msgstr "Processing" msgid "document-state.6" msgstr "Stopped" msgid "document-state.7" msgstr "Canceled" msgid "document-state.8" msgstr "Aborted" msgid "document-state.9" msgstr "Completed" msgid "feed-orientation" msgstr "Feed Orientation" msgid "feed-orientation.long-edge-first" msgstr "Long Edge First" msgid "feed-orientation.short-edge-first" msgstr "Short Edge First" msgid "fetch-status-code" msgstr "Fetch Status Code" msgid "finishing-template" msgstr "Finishing Template" msgid "finishing-template.bale" msgstr "Bale" msgid "finishing-template.bind" msgstr "Bind" msgid "finishing-template.bind-bottom" msgstr "Bind Bottom" msgid "finishing-template.bind-left" msgstr "Bind Left" msgid "finishing-template.bind-right" msgstr "Bind Right" msgid "finishing-template.bind-top" msgstr "Bind Top" msgid "finishing-template.booklet-maker" msgstr "Booklet Maker" msgid "finishing-template.coat" msgstr "Coat" msgid "finishing-template.cover" msgstr "Cover" msgid "finishing-template.edge-stitch" msgstr "Edge Stitch" msgid "finishing-template.edge-stitch-bottom" msgstr "Edge Stitch Bottom" msgid "finishing-template.edge-stitch-left" msgstr "Edge Stitch Left" msgid "finishing-template.edge-stitch-right" msgstr "Edge Stitch Right" msgid "finishing-template.edge-stitch-top" msgstr "Edge Stitch Top" msgid "finishing-template.fold" msgstr "Fold" msgid "finishing-template.fold-accordion" msgstr "Accordion Fold" msgid "finishing-template.fold-double-gate" msgstr "Double Gate Fold" msgid "finishing-template.fold-engineering-z" msgstr "Engineering Z Fold" msgid "finishing-template.fold-gate" msgstr "Gate Fold" msgid "finishing-template.fold-half" msgstr "Half Fold" msgid "finishing-template.fold-half-z" msgstr "Half Z Fold" msgid "finishing-template.fold-left-gate" msgstr "Left Gate Fold" msgid "finishing-template.fold-letter" msgstr "Letter Fold" msgid "finishing-template.fold-parallel" msgstr "Parallel Fold" msgid "finishing-template.fold-poster" msgstr "Poster Fold" msgid "finishing-template.fold-right-gate" msgstr "Right Gate Fold" msgid "finishing-template.fold-z" msgstr "Z Fold" msgid "finishing-template.jdf-f10-1" msgstr "JDF Fold F10-1" msgid "finishing-template.jdf-f10-2" msgstr "JDF Fold F10-2" msgid "finishing-template.jdf-f10-3" msgstr "JDF Fold F10-3" msgid "finishing-template.jdf-f12-1" msgstr "JDF Fold F12-1" msgid "finishing-template.jdf-f12-10" msgstr "JDF Fold F12-10" msgid "finishing-template.jdf-f12-11" msgstr "JDF Fold F12-11" msgid "finishing-template.jdf-f12-12" msgstr "JDF Fold F12-12" msgid "finishing-template.jdf-f12-13" msgstr "JDF Fold F12-13" msgid "finishing-template.jdf-f12-14" msgstr "JDF Fold F12-14" msgid "finishing-template.jdf-f12-2" msgstr "JDF Fold F12-2" msgid "finishing-template.jdf-f12-3" msgstr "JDF Fold F12-3" msgid "finishing-template.jdf-f12-4" msgstr "JDF Fold F12-4" msgid "finishing-template.jdf-f12-5" msgstr "JDF Fold F12-5" msgid "finishing-template.jdf-f12-6" msgstr "JDF Fold F12-6" msgid "finishing-template.jdf-f12-7" msgstr "JDF Fold F12-7" msgid "finishing-template.jdf-f12-8" msgstr "JDF Fold F12-8" msgid "finishing-template.jdf-f12-9" msgstr "JDF Fold F12-9" msgid "finishing-template.jdf-f14-1" msgstr "JDF Fold F14-1" msgid "finishing-template.jdf-f16-1" msgstr "JDF Fold F16-1" msgid "finishing-template.jdf-f16-10" msgstr "JDF Fold F16-10" msgid "finishing-template.jdf-f16-11" msgstr "JDF Fold F16-11" msgid "finishing-template.jdf-f16-12" msgstr "JDF Fold F16-12" msgid "finishing-template.jdf-f16-13" msgstr "JDF Fold F16-13" msgid "finishing-template.jdf-f16-14" msgstr "JDF Fold F16-14" msgid "finishing-template.jdf-f16-2" msgstr "JDF Fold F16-2" msgid "finishing-template.jdf-f16-3" msgstr "JDF Fold F16-3" msgid "finishing-template.jdf-f16-4" msgstr "JDF Fold F16-4" msgid "finishing-template.jdf-f16-5" msgstr "JDF Fold F16-5" msgid "finishing-template.jdf-f16-6" msgstr "JDF Fold F16-6" msgid "finishing-template.jdf-f16-7" msgstr "JDF Fold F16-7" msgid "finishing-template.jdf-f16-8" msgstr "JDF Fold F16-8" msgid "finishing-template.jdf-f16-9" msgstr "JDF Fold F16-9" msgid "finishing-template.jdf-f18-1" msgstr "JDF Fold F18-1" msgid "finishing-template.jdf-f18-2" msgstr "JDF Fold F18-2" msgid "finishing-template.jdf-f18-3" msgstr "JDF Fold F18-3" msgid "finishing-template.jdf-f18-4" msgstr "JDF Fold F18-4" msgid "finishing-template.jdf-f18-5" msgstr "JDF Fold F18-5" msgid "finishing-template.jdf-f18-6" msgstr "JDF Fold F18-6" msgid "finishing-template.jdf-f18-7" msgstr "JDF Fold F18-7" msgid "finishing-template.jdf-f18-8" msgstr "JDF Fold F18-8" msgid "finishing-template.jdf-f18-9" msgstr "JDF Fold F18-9" msgid "finishing-template.jdf-f2-1" msgstr "JDF Fold F2-1" msgid "finishing-template.jdf-f20-1" msgstr "JDF Fold F20-1" msgid "finishing-template.jdf-f20-2" msgstr "JDF Fold F20-2" msgid "finishing-template.jdf-f24-1" msgstr "JDF Fold F24-1" msgid "finishing-template.jdf-f24-10" msgstr "JDF Fold F24-10" msgid "finishing-template.jdf-f24-11" msgstr "JDF Fold F24-11" msgid "finishing-template.jdf-f24-2" msgstr "JDF Fold F24-2" msgid "finishing-template.jdf-f24-3" msgstr "JDF Fold F24-3" msgid "finishing-template.jdf-f24-4" msgstr "JDF Fold F24-4" msgid "finishing-template.jdf-f24-5" msgstr "JDF Fold F24-5" msgid "finishing-template.jdf-f24-6" msgstr "JDF Fold F24-6" msgid "finishing-template.jdf-f24-7" msgstr "JDF Fold F24-7" msgid "finishing-template.jdf-f24-8" msgstr "JDF Fold F24-8" msgid "finishing-template.jdf-f24-9" msgstr "JDF Fold F24-9" msgid "finishing-template.jdf-f28-1" msgstr "JDF Fold F28-1" msgid "finishing-template.jdf-f32-1" msgstr "JDF Fold F32-1" msgid "finishing-template.jdf-f32-2" msgstr "JDF Fold F32-2" msgid "finishing-template.jdf-f32-3" msgstr "JDF Fold F32-3" msgid "finishing-template.jdf-f32-4" msgstr "JDF Fold F32-4" msgid "finishing-template.jdf-f32-5" msgstr "JDF Fold F32-5" msgid "finishing-template.jdf-f32-6" msgstr "JDF Fold F32-6" msgid "finishing-template.jdf-f32-7" msgstr "JDF Fold F32-7" msgid "finishing-template.jdf-f32-8" msgstr "JDF Fold F32-8" msgid "finishing-template.jdf-f32-9" msgstr "JDF Fold F32-9" msgid "finishing-template.jdf-f36-1" msgstr "JDF Fold F36-1" msgid "finishing-template.jdf-f36-2" msgstr "JDF Fold F36-2" msgid "finishing-template.jdf-f4-1" msgstr "JDF Fold F4-1" msgid "finishing-template.jdf-f4-2" msgstr "JDF Fold F4-2" msgid "finishing-template.jdf-f40-1" msgstr "JDF Fold F40-1" msgid "finishing-template.jdf-f48-1" msgstr "JDF Fold F48-1" msgid "finishing-template.jdf-f48-2" msgstr "JDF Fold F48-2" msgid "finishing-template.jdf-f6-1" msgstr "JDF Fold F6-1" msgid "finishing-template.jdf-f6-2" msgstr "JDF Fold F6-2" msgid "finishing-template.jdf-f6-3" msgstr "JDF Fold F6-3" msgid "finishing-template.jdf-f6-4" msgstr "JDF Fold F6-4" msgid "finishing-template.jdf-f6-5" msgstr "JDF Fold F6-5" msgid "finishing-template.jdf-f6-6" msgstr "JDF Fold F6-6" msgid "finishing-template.jdf-f6-7" msgstr "JDF Fold F6-7" msgid "finishing-template.jdf-f6-8" msgstr "JDF Fold F6-8" msgid "finishing-template.jdf-f64-1" msgstr "JDF Fold F64-1" msgid "finishing-template.jdf-f64-2" msgstr "JDF Fold F64-2" msgid "finishing-template.jdf-f8-1" msgstr "JDF Fold F8-1" msgid "finishing-template.jdf-f8-2" msgstr "JDF Fold F8-2" msgid "finishing-template.jdf-f8-3" msgstr "JDF Fold F8-3" msgid "finishing-template.jdf-f8-4" msgstr "JDF Fold F8-4" msgid "finishing-template.jdf-f8-5" msgstr "JDF Fold F8-5" msgid "finishing-template.jdf-f8-6" msgstr "JDF Fold F8-6" msgid "finishing-template.jdf-f8-7" msgstr "JDF Fold F8-7" msgid "finishing-template.jog-offset" msgstr "Jog Offset" msgid "finishing-template.laminate" msgstr "Laminate" msgid "finishing-template.punch" msgstr "Punch" msgid "finishing-template.punch-bottom-left" msgstr "Punch Bottom Left" msgid "finishing-template.punch-bottom-right" msgstr "Punch Bottom Right" msgid "finishing-template.punch-dual-bottom" msgstr "2-hole Punch Bottom" msgid "finishing-template.punch-dual-left" msgstr "2-hole Punch Left" msgid "finishing-template.punch-dual-right" msgstr "2-hole Punch Right" msgid "finishing-template.punch-dual-top" msgstr "2-hole Punch Top" msgid "finishing-template.punch-multiple-bottom" msgstr "Multi-hole Punch Bottom" msgid "finishing-template.punch-multiple-left" msgstr "Multi-hole Punch Left" msgid "finishing-template.punch-multiple-right" msgstr "Multi-hole Punch Right" msgid "finishing-template.punch-multiple-top" msgstr "Multi-hole Punch Top" msgid "finishing-template.punch-quad-bottom" msgstr "4-hole Punch Bottom" msgid "finishing-template.punch-quad-left" msgstr "4-hole Punch Left" msgid "finishing-template.punch-quad-right" msgstr "4-hole Punch Right" msgid "finishing-template.punch-quad-top" msgstr "4-hole Punch Top" msgid "finishing-template.punch-top-left" msgstr "Punch Top Left" msgid "finishing-template.punch-top-right" msgstr "Punch Top Right" msgid "finishing-template.punch-triple-bottom" msgstr "3-hole Punch Bottom" msgid "finishing-template.punch-triple-left" msgstr "3-hole Punch Left" msgid "finishing-template.punch-triple-right" msgstr "3-hole Punch Right" msgid "finishing-template.punch-triple-top" msgstr "3-hole Punch Top" msgid "finishing-template.saddle-stitch" msgstr "Saddle Stitch" msgid "finishing-template.staple" msgstr "Staple" msgid "finishing-template.staple-bottom-left" msgstr "Staple Bottom Left" msgid "finishing-template.staple-bottom-right" msgstr "Staple Bottom Right" msgid "finishing-template.staple-dual-bottom" msgstr "2 Staples on Bottom" msgid "finishing-template.staple-dual-left" msgstr "2 Staples on Left" msgid "finishing-template.staple-dual-right" msgstr "2 Staples on Right" msgid "finishing-template.staple-dual-top" msgstr "2 Staples on Top" msgid "finishing-template.staple-top-left" msgstr "Staple Top Left" msgid "finishing-template.staple-top-right" msgstr "Staple Top Right" msgid "finishing-template.staple-triple-bottom" msgstr "3 Staples on Bottom" msgid "finishing-template.staple-triple-left" msgstr "3 Staples on Left" msgid "finishing-template.staple-triple-right" msgstr "3 Staples on Right" msgid "finishing-template.staple-triple-top" msgstr "3 Staples on Top" msgid "finishing-template.trim" msgstr "Trim" msgid "finishing-template.trim-after-copies" msgstr "Trim After Every Set" msgid "finishing-template.trim-after-documents" msgstr "Trim After Every Document" msgid "finishing-template.trim-after-job" msgstr "Trim After Job" msgid "finishing-template.trim-after-pages" msgstr "Trim After Every Page" msgid "finishings" msgstr "Finishings" msgid "finishings-col" msgstr "Finishings" msgid "finishings.10" msgstr "Fold" msgid "finishings.100" msgstr "Z Fold" msgid "finishings.101" msgstr "Engineering Z Fold" msgid "finishings.11" msgstr "Trim" msgid "finishings.12" msgstr "Bale" msgid "finishings.13" msgstr "Booklet Maker" msgid "finishings.14" msgstr "Jog Offset" msgid "finishings.15" msgstr "Coat" msgid "finishings.16" msgstr "Laminate" msgid "finishings.20" msgstr "Staple Top Left" msgid "finishings.21" msgstr "Staple Bottom Left" msgid "finishings.22" msgstr "Staple Top Right" msgid "finishings.23" msgstr "Staple Bottom Right" msgid "finishings.24" msgstr "Edge Stitch Left" msgid "finishings.25" msgstr "Edge Stitch Top" msgid "finishings.26" msgstr "Edge Stitch Right" msgid "finishings.27" msgstr "Edge Stitch Bottom" msgid "finishings.28" msgstr "2 Staples on Left" msgid "finishings.29" msgstr "2 Staples on Top" msgid "finishings.3" msgstr "None" msgid "finishings.30" msgstr "2 Staples on Right" msgid "finishings.31" msgstr "2 Staples on Bottom" msgid "finishings.32" msgstr "3 Staples on Left" msgid "finishings.33" msgstr "3 Staples on Top" msgid "finishings.34" msgstr "3 Staples on Right" msgid "finishings.35" msgstr "3 Staples on Bottom" msgid "finishings.4" msgstr "Staple" msgid "finishings.5" msgstr "Punch" msgid "finishings.50" msgstr "Bind Left" msgid "finishings.51" msgstr "Bind Top" msgid "finishings.52" msgstr "Bind Right" msgid "finishings.53" msgstr "Bind Bottom" msgid "finishings.6" msgstr "Cover" msgid "finishings.60" msgstr "Trim Pages" msgid "finishings.61" msgstr "Trim Documents" msgid "finishings.62" msgstr "Trim Copies" msgid "finishings.63" msgstr "Trim Job" msgid "finishings.7" msgstr "Bind" msgid "finishings.70" msgstr "Punch Top Left" msgid "finishings.71" msgstr "Punch Bottom Left" msgid "finishings.72" msgstr "Punch Top Right" msgid "finishings.73" msgstr "Punch Bottom Right" msgid "finishings.74" msgstr "2-hole Punch Left" msgid "finishings.75" msgstr "2-hole Punch Top" msgid "finishings.76" msgstr "2-hole Punch Right" msgid "finishings.77" msgstr "2-hole Punch Bottom" msgid "finishings.78" msgstr "3-hole Punch Left" msgid "finishings.79" msgstr "3-hole Punch Top" msgid "finishings.8" msgstr "Saddle Stitch" msgid "finishings.80" msgstr "3-hole Punch Right" msgid "finishings.81" msgstr "3-hole Punch Bottom" msgid "finishings.82" msgstr "4-hole Punch Left" msgid "finishings.83" msgstr "4-hole Punch Top" msgid "finishings.84" msgstr "4-hole Punch Right" msgid "finishings.85" msgstr "4-hole Punch Bottom" msgid "finishings.86" msgstr "Multi-hole Punch Left" msgid "finishings.87" msgstr "Multi-hole Punch Top" msgid "finishings.88" msgstr "Multi-hole Punch Right" msgid "finishings.89" msgstr "Multi-hole Punch Bottom" msgid "finishings.9" msgstr "Edge Stitch" msgid "finishings.90" msgstr "Accordion Fold" msgid "finishings.91" msgstr "Double Gate Fold" msgid "finishings.92" msgstr "Gate Fold" msgid "finishings.93" msgstr "Half Fold" msgid "finishings.94" msgstr "Half Z Fold" msgid "finishings.95" msgstr "Left Gate Fold" msgid "finishings.96" msgstr "Letter Fold" msgid "finishings.97" msgstr "Parallel Fold" msgid "finishings.98" msgstr "Poster Fold" msgid "finishings.99" msgstr "Right Gate Fold" msgid "folding" msgstr "Fold" msgid "folding-direction" msgstr "Fold Direction" msgid "folding-direction.inward" msgstr "Inward" msgid "folding-direction.outward" msgstr "Outward" msgid "folding-offset" msgstr "Fold Position" msgid "folding-reference-edge" msgstr "Fold Edge" msgid "folding-reference-edge.bottom" msgstr "Bottom" msgid "folding-reference-edge.left" msgstr "Left" msgid "folding-reference-edge.right" msgstr "Right" msgid "folding-reference-edge.top" msgstr "Top" msgid "font-name-requested" msgstr "Font Name" msgid "font-size-requested" msgstr "Font Size" msgid "force-front-side" msgstr "Force Front Side" msgid "from-name" msgstr "From Name" msgid "imposition-template" msgstr "Imposition Template" msgid "imposition-template.none" msgstr "None" msgid "imposition-template.signature" msgstr "Signature" msgid "input-attributes" msgstr "Scanner Options" msgid "input-auto-scaling" msgstr "Scan Auto Scaling" msgid "input-auto-skew-correction" msgstr "Scan Auto Skew Correction" msgid "input-brightness" msgstr "Scan Brightness" msgid "input-color-mode" msgstr "Scanning Mode" msgid "input-color-mode.auto" msgstr "Automatic" msgid "input-color-mode.bi-level" msgstr "Text" msgid "input-color-mode.cmyk_16" msgstr "16-bit CMYK" msgid "input-color-mode.cmyk_8" msgstr "8-bit CMYK" msgid "input-color-mode.color" msgstr "Color" msgid "input-color-mode.color_8" msgstr "8-bit Color" msgid "input-color-mode.monochrome" msgstr "Monochrome" msgid "input-color-mode.monochrome_16" msgstr "16-bit Monochrome" msgid "input-color-mode.monochrome_4" msgstr "4-bit Monochrome" msgid "input-color-mode.monochrome_8" msgstr "8-bit Monochrome" msgid "input-color-mode.rgb_16" msgstr "16-bit RGB" msgid "input-color-mode.rgba_16" msgstr "16-bit RGBA" msgid "input-color-mode.rgba_8" msgstr "8-bit RGBA" msgid "input-content-type" msgstr "Scan Content" msgid "input-content-type.auto" msgstr "Automatic" msgid "input-content-type.halftone" msgstr "Halftone" msgid "input-content-type.line-art" msgstr "Line Art" msgid "input-content-type.magazine" msgstr "Magazine" msgid "input-content-type.photo" msgstr "Photo" msgid "input-content-type.text" msgstr "Text" msgid "input-content-type.text-and-photo" msgstr "Text And Photo" msgid "input-contrast" msgstr "Scan Contrast" msgid "input-film-scan-mode" msgstr "Film Type" msgid "input-film-scan-mode.black-and-white-negative-film" msgstr "Black And White Negative Film" msgid "input-film-scan-mode.color-negative-film" msgstr "Color Negative Film" msgid "input-film-scan-mode.color-slide-film" msgstr "Color Slide Film" msgid "input-film-scan-mode.not-applicable" msgstr "Not Applicable" msgid "input-images-to-transfer" msgstr "Scan Images To Transfer" msgid "input-media" msgstr "Scan Media" msgid "input-media.auto" msgstr "Automatic" msgid "input-orientation-requested" msgstr "Scan Orientation" msgid "input-quality" msgstr "Scan Quality" msgid "input-resolution" msgstr "Scan Resolution" msgid "input-scaling-height" msgstr "Scan Scaling Height" msgid "input-scaling-width" msgstr "Scan Scaling Width" msgid "input-scan-regions" msgstr "Scan Regions" msgid "input-sharpness" msgstr "Scan Sharpness" msgid "input-sides" msgstr "2-Sided Scanning" msgid "input-source" msgstr "Scan Source" msgid "input-source.adf" msgstr "Automatic Document Feeder" msgid "input-source.film-reader" msgstr "Film Reader" msgid "input-source.platen" msgstr "Platen" msgid "insert-after-page-number" msgstr "Insert Page Number" msgid "insert-count" msgstr "Insert Count" msgid "insert-sheet" msgstr "Insert Sheet" msgid "job-account-id" msgstr "Job Account ID" msgid "job-account-type" msgstr "Job Account Type" msgid "job-account-type.general" msgstr "General" msgid "job-account-type.group" msgstr "Group" msgid "job-account-type.none" msgstr "None" msgid "job-accounting-output-bin" msgstr "Job Accounting Output Bin" msgid "job-accounting-sheets" msgstr "Job Accounting Sheets" msgid "job-accounting-sheets-type" msgstr "Type of Job Accounting Sheets" msgid "job-accounting-sheets-type.none" msgstr "None" msgid "job-accounting-sheets-type.standard" msgstr "Standard" msgid "job-accounting-user-id" msgstr "Job Accounting User ID" msgid "job-collation-type" msgstr "Collate Copies" msgid "job-collation-type.3" msgstr "Uncollated Sheets" msgid "job-collation-type.4" msgstr "Collated Documents" msgid "job-collation-type.5" msgstr "Uncollated Documents" msgid "job-copies" msgstr "Copies" msgid "job-cover-back" msgstr "Back Cover" msgid "job-cover-front" msgstr "Front Cover" msgid "job-delay-output-until" msgstr "Delay Output Until" msgid "job-delay-output-until-time" msgstr "Delay Output Until" msgid "job-delay-output-until.day-time" msgstr "Daytime" msgid "job-delay-output-until.evening" msgstr "Evening" msgid "job-delay-output-until.indefinite" msgstr "Released" msgid "job-delay-output-until.night" msgstr "Night" msgid "job-delay-output-until.no-delay-output" msgstr "No Delay" msgid "job-delay-output-until.second-shift" msgstr "Second Shift" msgid "job-delay-output-until.third-shift" msgstr "Third Shift" msgid "job-delay-output-until.weekend" msgstr "Weekend" msgid "job-error-action" msgstr "On Error" msgid "job-error-action.abort-job" msgstr "Abort Job" msgid "job-error-action.cancel-job" msgstr "Cancel Job" msgid "job-error-action.continue-job" msgstr "Continue Job" msgid "job-error-action.suspend-job" msgstr "Suspend Job" msgid "job-error-sheet" msgstr "Print Error Sheet" msgid "job-error-sheet-type" msgstr "Type of Error Sheet" msgid "job-error-sheet-type.none" msgstr "None" msgid "job-error-sheet-type.standard" msgstr "Standard" msgid "job-error-sheet-when" msgstr "Print Error Sheet" msgid "job-error-sheet-when.always" msgstr "Always" msgid "job-error-sheet-when.on-error" msgstr "On Error" msgid "job-finishings" msgstr "Job Finishings" msgid "job-hold-until" msgstr "Hold Until" msgid "job-hold-until-time" msgstr "Hold Until" msgid "job-hold-until.day-time" msgstr "Daytime" msgid "job-hold-until.evening" msgstr "Evening" msgid "job-hold-until.indefinite" msgstr "Released" msgid "job-hold-until.night" msgstr "Night" msgid "job-hold-until.no-hold" msgstr "No Hold" msgid "job-hold-until.second-shift" msgstr "Second Shift" msgid "job-hold-until.third-shift" msgstr "Third Shift" msgid "job-hold-until.weekend" msgstr "Weekend" msgid "job-mandatory-attributes" msgstr "Job Mandatory Attributes" msgid "job-name" msgstr "Title" msgid "job-phone-number" msgstr "Job Phone Number" msgid "job-priority" msgstr "Job Priority" msgid "job-recipient-name" msgstr "Job Recipient Name" msgid "job-save-disposition" msgstr "Job Save Disposition" msgid "job-sheet-message" msgstr "Job Sheet Message" msgid "job-sheets" msgstr "Banner Page" msgid "job-sheets-col" msgstr "Banner Page" msgid "job-sheets.first-print-stream-page" msgstr "First Page in Document" msgid "job-sheets.job-both-sheet" msgstr "Start and End Sheets" msgid "job-sheets.job-end-sheet" msgstr "End Sheet" msgid "job-sheets.job-start-sheet" msgstr "Start Sheet" msgid "job-sheets.none" msgstr "None" msgid "job-sheets.standard" msgstr "Standard" msgid "job-state" msgstr "Job State" msgid "job-state-message" msgstr "Job State Message" msgid "job-state-reasons" msgstr "Detailed Job State" msgid "job-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "job-state-reasons.account-authorization-failed" msgstr "Account Authorization Failed" msgid "job-state-reasons.account-closed" msgstr "Account Closed" msgid "job-state-reasons.account-info-needed" msgstr "Account Info Needed" msgid "job-state-reasons.account-limit-reached" msgstr "Account Limit Reached" msgid "job-state-reasons.compression-error" msgstr "Compression Error" msgid "job-state-reasons.conflicting-attributes" msgstr "Conflicting Attributes" msgid "job-state-reasons.connected-to-destination" msgstr "Connected To Destination" msgid "job-state-reasons.connecting-to-destination" msgstr "Connecting To Destination" msgid "job-state-reasons.destination-uri-failed" msgstr "Destination Uri Failed" msgid "job-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "job-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "job-state-reasons.document-access-error" msgstr "Document Access Error" msgid "job-state-reasons.document-format-error" msgstr "Document Format Error" msgid "job-state-reasons.document-password-error" msgstr "Document Password Error" msgid "job-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "job-state-reasons.document-security-error" msgstr "Document Security Error" msgid "job-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "job-state-reasons.errors-detected" msgstr "Errors Detected" msgid "job-state-reasons.job-canceled-at-device" msgstr "Job Canceled At Device" msgid "job-state-reasons.job-canceled-by-operator" msgstr "Job Canceled By Operator" msgid "job-state-reasons.job-canceled-by-user" msgstr "Job Canceled By User" msgid "job-state-reasons.job-completed-successfully" msgstr "Job Completed Successfully" msgid "job-state-reasons.job-completed-with-errors" msgstr "Job Completed With Errors" msgid "job-state-reasons.job-completed-with-warnings" msgstr "Job Completed With Warnings" msgid "job-state-reasons.job-data-insufficient" msgstr "Job Data Insufficient" msgid "job-state-reasons.job-delay-output-until-specified" msgstr "Job Delay Output Until Specified" msgid "job-state-reasons.job-digital-signature-wait" msgstr "Job Digital Signature Wait" msgid "job-state-reasons.job-fetchable" msgstr "Job Fetchable" msgid "job-state-reasons.job-held-for-review" msgstr "Job Held For Review" msgid "job-state-reasons.job-hold-until-specified" msgstr "Job Hold Until Specified" msgid "job-state-reasons.job-incoming" msgstr "Job Incoming" msgid "job-state-reasons.job-interpreting" msgstr "Job Interpreting" msgid "job-state-reasons.job-outgoing" msgstr "Job Outgoing" msgid "job-state-reasons.job-password-wait" msgstr "Job Password Wait" msgid "job-state-reasons.job-printed-successfully" msgstr "Job Printed Successfully" msgid "job-state-reasons.job-printed-with-errors" msgstr "Job Printed With Errors" msgid "job-state-reasons.job-printed-with-warnings" msgstr "Job Printed With Warnings" msgid "job-state-reasons.job-printing" msgstr "Job Printing" msgid "job-state-reasons.job-queued" msgstr "Job Queued" msgid "job-state-reasons.job-queued-for-marker" msgstr "Job Queued For Marker" msgid "job-state-reasons.job-release-wait" msgstr "Job Release Wait" msgid "job-state-reasons.job-restartable" msgstr "Job Restartable" msgid "job-state-reasons.job-resuming" msgstr "Job Resuming" msgid "job-state-reasons.job-saved-successfully" msgstr "Job Saved Successfully" msgid "job-state-reasons.job-saved-with-errors" msgstr "Job Saved With Errors" msgid "job-state-reasons.job-saved-with-warnings" msgstr "Job Saved With Warnings" msgid "job-state-reasons.job-saving" msgstr "Job Saving" msgid "job-state-reasons.job-spooling" msgstr "Job Spooling" msgid "job-state-reasons.job-streaming" msgstr "Job Streaming" msgid "job-state-reasons.job-suspended" msgstr "Job Suspended" msgid "job-state-reasons.job-suspended-by-operator" msgstr "Job Suspended By Operator" msgid "job-state-reasons.job-suspended-by-system" msgstr "Job Suspended By System" msgid "job-state-reasons.job-suspended-by-user" msgstr "Job Suspended By User" msgid "job-state-reasons.job-suspending" msgstr "Job Suspending" msgid "job-state-reasons.job-transferring" msgstr "Job Transferring" msgid "job-state-reasons.job-transforming" msgstr "Job Transforming" msgid "job-state-reasons.none" msgstr "None" msgid "job-state-reasons.printer-stopped" msgstr "Printer Stopped" msgid "job-state-reasons.printer-stopped-partly" msgstr "Printer Stopped Partly" msgid "job-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "job-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "job-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "job-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "job-state-reasons.service-off-line" msgstr "Service Off Line" msgid "job-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "job-state-reasons.unsupported-attributes-or-values" msgstr "Unsupported Attributes Or Values" msgid "job-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "job-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "job-state-reasons.waiting-for-user-action" msgstr "Waiting For User Action" msgid "job-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "job-state.3" msgstr "Pending" msgid "job-state.4" msgstr "Held" msgid "job-state.5" msgstr "Processing" msgid "job-state.6" msgstr "Stopped" msgid "job-state.7" msgstr "Canceled" msgid "job-state.8" msgstr "Aborted" msgid "job-state.9" msgstr "Completed" msgid "laminating" msgstr "Laminate Pages" msgid "laminating-sides" msgstr "Laminate" msgid "laminating-sides.back" msgstr "Back Only" msgid "laminating-sides.both" msgstr "Front and Back" msgid "laminating-sides.front" msgstr "Front Only" msgid "laminating-type" msgstr "Type of Lamination" msgid "laminating-type.archival" msgstr "Archival" msgid "laminating-type.glossy" msgstr "Glossy" msgid "laminating-type.high-gloss" msgstr "High Gloss" msgid "laminating-type.matte" msgstr "Matte" msgid "laminating-type.semi-gloss" msgstr "Semi-gloss" msgid "laminating-type.translucent" msgstr "Translucent" msgid "logo" msgstr "Logo" msgid "material-amount" msgstr "Amount of Material" msgid "material-amount-units" msgstr "Amount Units" msgid "material-amount-units.g" msgstr "Grams" msgid "material-amount-units.kg" msgstr "Kilograms" msgid "material-amount-units.l" msgstr "Liters" msgid "material-amount-units.m" msgstr "Meters" msgid "material-amount-units.ml" msgstr "Milliliters" msgid "material-amount-units.mm" msgstr "Millimeters" msgid "material-color" msgstr "Material Color" msgid "material-diameter" msgstr "Material Diameter" msgid "material-diameter-tolerance" msgstr "Material Diameter Tolerance" msgid "material-fill-density" msgstr "Material Fill Density" msgid "material-name" msgstr "Material Name" msgid "material-purpose" msgstr "Use Material For" msgid "material-purpose.all" msgstr "Everything" msgid "material-purpose.base" msgstr "Base" msgid "material-purpose.in-fill" msgstr "In-fill" msgid "material-purpose.shell" msgstr "Shell" msgid "material-purpose.support" msgstr "Supports" msgid "material-rate" msgstr "Feed Rate" msgid "material-rate-units" msgstr "Feed Rate Units" msgid "material-rate-units.mg_second" msgstr "Milligrams per second" msgid "material-rate-units.ml_second" msgstr "Milliliters per second" msgid "material-rate-units.mm_second" msgstr "Millimeters per second" msgid "material-shell-thickness" msgstr "Material Shell Thickness" msgid "material-temperature" msgstr "Material Temperature" msgid "material-type" msgstr "Material Type" msgid "material-type.abs" msgstr "ABS" msgid "material-type.abs-carbon-fiber" msgstr "Carbon Fiber ABS" msgid "material-type.abs-carbon-nanotube" msgstr "Carbon Nanotube ABS" msgid "material-type.chocolate" msgstr "Chocolate" msgid "material-type.gold" msgstr "Gold" msgid "material-type.nylon" msgstr "Nylon" msgid "material-type.pet" msgstr "Pet" msgid "material-type.photopolymer" msgstr "Photopolymer" msgid "material-type.pla" msgstr "PLA" msgid "material-type.pla-conductive" msgstr "Conductive PLA" msgid "material-type.pla-flexible" msgstr "Flexible PLA" msgid "material-type.pla-magnetic" msgstr "Magnetic PLA" msgid "material-type.pla-steel" msgstr "Steel PLA" msgid "material-type.pla-stone" msgstr "Stone PLA" msgid "material-type.pla-wood" msgstr "Wood PLA" msgid "material-type.polycarbonate" msgstr "Polycarbonate" msgid "material-type.pva-dissolvable" msgstr "Dissolvable PVA" msgid "material-type.silver" msgstr "Silver" msgid "material-type.titanium" msgstr "Titanium" msgid "material-type.wax" msgstr "Wax" msgid "materials-col" msgstr "Materials" msgid "media" msgstr "Media" msgid "media-back-coating" msgstr "Back Coating of Media" msgid "media-back-coating.glossy" msgstr "Glossy" msgid "media-back-coating.high-gloss" msgstr "High Gloss" msgid "media-back-coating.matte" msgstr "Matte" msgid "media-back-coating.none" msgstr "None" msgid "media-back-coating.satin" msgstr "Satin" msgid "media-back-coating.semi-gloss" msgstr "Semi-gloss" msgid "media-bottom-margin" msgstr "Media Bottom Margin" msgid "media-col" msgstr "Media" msgid "media-color" msgstr "Media Color" msgid "media-color.black" msgstr "Black" msgid "media-color.blue" msgstr "Blue" msgid "media-color.brown" msgstr "Brown" msgid "media-color.buff" msgstr "Buff" msgid "media-color.clear-black" msgstr "Clear Black" msgid "media-color.clear-blue" msgstr "Clear Blue" msgid "media-color.clear-brown" msgstr "Clear Brown" msgid "media-color.clear-buff" msgstr "Clear Buff" msgid "media-color.clear-cyan" msgstr "Clear Cyan" msgid "media-color.clear-gold" msgstr "Clear Gold" msgid "media-color.clear-goldenrod" msgstr "Clear Goldenrod" msgid "media-color.clear-gray" msgstr "Clear Gray" msgid "media-color.clear-green" msgstr "Clear Green" msgid "media-color.clear-ivory" msgstr "Clear Ivory" msgid "media-color.clear-magenta" msgstr "Clear Magenta" msgid "media-color.clear-multi-color" msgstr "Clear Multi Color" msgid "media-color.clear-mustard" msgstr "Clear Mustard" msgid "media-color.clear-orange" msgstr "Clear Orange" msgid "media-color.clear-pink" msgstr "Clear Pink" msgid "media-color.clear-red" msgstr "Clear Red" msgid "media-color.clear-silver" msgstr "Clear Silver" msgid "media-color.clear-turquoise" msgstr "Clear Turquoise" msgid "media-color.clear-violet" msgstr "Clear Violet" msgid "media-color.clear-white" msgstr "Clear White" msgid "media-color.clear-yellow" msgstr "Clear Yellow" msgid "media-color.cyan" msgstr "Cyan" msgid "media-color.dark-blue" msgstr "Dark Blue" msgid "media-color.dark-brown" msgstr "Dark Brown" msgid "media-color.dark-buff" msgstr "Dark Buff" msgid "media-color.dark-cyan" msgstr "Dark Cyan" msgid "media-color.dark-gold" msgstr "Dark Gold" msgid "media-color.dark-goldenrod" msgstr "Dark Goldenrod" msgid "media-color.dark-gray" msgstr "Dark Gray" msgid "media-color.dark-green" msgstr "Dark Green" msgid "media-color.dark-ivory" msgstr "Dark Ivory" msgid "media-color.dark-magenta" msgstr "Dark Magenta" msgid "media-color.dark-mustard" msgstr "Dark Mustard" msgid "media-color.dark-orange" msgstr "Dark Orange" msgid "media-color.dark-pink" msgstr "Dark Pink" msgid "media-color.dark-red" msgstr "Dark Red" msgid "media-color.dark-silver" msgstr "Dark Silver" msgid "media-color.dark-turquoise" msgstr "Dark Turquoise" msgid "media-color.dark-violet" msgstr "Dark Violet" msgid "media-color.dark-yellow" msgstr "Dark Yellow" msgid "media-color.gold" msgstr "Gold" msgid "media-color.goldenrod" msgstr "Goldenrod" msgid "media-color.gray" msgstr "Gray" msgid "media-color.green" msgstr "Green" msgid "media-color.ivory" msgstr "Ivory" msgid "media-color.light-black" msgstr "Light Black" msgid "media-color.light-blue" msgstr "Light Blue" msgid "media-color.light-brown" msgstr "Light Brown" msgid "media-color.light-buff" msgstr "Light Buff" msgid "media-color.light-cyan" msgstr "Light Cyan" msgid "media-color.light-gold" msgstr "Light Gold" msgid "media-color.light-goldenrod" msgstr "Light Goldenrod" msgid "media-color.light-gray" msgstr "Light Gray" msgid "media-color.light-green" msgstr "Light Green" msgid "media-color.light-ivory" msgstr "Light Ivory" msgid "media-color.light-magenta" msgstr "Light Magenta" msgid "media-color.light-mustard" msgstr "Light Mustard" msgid "media-color.light-orange" msgstr "Light Orange" msgid "media-color.light-pink" msgstr "Light Pink" msgid "media-color.light-red" msgstr "Light Red" msgid "media-color.light-silver" msgstr "Light Silver" msgid "media-color.light-turquoise" msgstr "Light Turquoise" msgid "media-color.light-violet" msgstr "Light Violet" msgid "media-color.light-yellow" msgstr "Light Yellow" msgid "media-color.magenta" msgstr "Magenta" msgid "media-color.multi-color" msgstr "Multi-color" msgid "media-color.mustard" msgstr "Mustard" msgid "media-color.no-color" msgstr "No Color" msgid "media-color.orange" msgstr "Orange" msgid "media-color.pink" msgstr "Pink" msgid "media-color.red" msgstr "Red" msgid "media-color.silver" msgstr "Silver" msgid "media-color.turquoise" msgstr "Turquoise" msgid "media-color.violet" msgstr "Violet" msgid "media-color.white" msgstr "White" msgid "media-color.yellow" msgstr "Yellow" msgid "media-front-coating" msgstr "Front Coating of Media" msgid "media-grain" msgstr "Media Grain" msgid "media-grain.x-direction" msgstr "Cross-Feed Direction" msgid "media-grain.y-direction" msgstr "Feed Direction" msgid "media-hole-count" msgstr "Media Hole Count" msgid "media-info" msgstr "Media Info" msgid "media-input-tray-check" msgstr "Force Media" msgid "media-left-margin" msgstr "Media Left Margin" msgid "media-pre-printed" msgstr "Pre-printed Media" msgid "media-pre-printed.blank" msgstr "Blank" msgid "media-pre-printed.letter-head" msgstr "Letterhead" msgid "media-pre-printed.pre-printed" msgstr "Pre-printed" msgid "media-recycled" msgstr "Recycled Media" msgid "media-recycled.none" msgstr "None" msgid "media-recycled.standard" msgstr "Standard" msgid "media-right-margin" msgstr "Media Right Margin" msgid "media-size" msgstr "Media Dimensions" msgid "media-size-name" msgstr "Media Name" msgid "media-source" msgstr "Media Source" msgid "media-source.alternate" msgstr "Alternate Tray" msgid "media-source.alternate-roll" msgstr "Alternate Roll" msgid "media-source.auto" msgstr "Automatic Tray" msgid "media-source.bottom" msgstr "Bottom Tray" msgid "media-source.by-pass-tray" msgstr "By-pass Tray" msgid "media-source.center" msgstr "Center Tray" msgid "media-source.disc" msgstr "Disc Feed" msgid "media-source.envelope" msgstr "Envelope Feed" msgid "media-source.hagaki" msgstr "Hagaki Feed" msgid "media-source.large-capacity" msgstr "Large Capacity Tray" msgid "media-source.left" msgstr "Left Tray" msgid "media-source.main" msgstr "Main Tray" msgid "media-source.main-roll" msgstr "Main Roll" msgid "media-source.manual" msgstr "Manual Feed" msgid "media-source.middle" msgstr "Middle Tray" msgid "media-source.photo" msgstr "Photo Tray" msgid "media-source.rear" msgstr "Rear Tray" msgid "media-source.right" msgstr "Right Tray" msgid "media-source.roll-1" msgstr "Roll 1" msgid "media-source.roll-10" msgstr "Roll 10" msgid "media-source.roll-2" msgstr "Roll 2" msgid "media-source.roll-3" msgstr "Roll 3" msgid "media-source.roll-4" msgstr "Roll 4" msgid "media-source.roll-5" msgstr "Roll 5" msgid "media-source.roll-6" msgstr "Roll 6" msgid "media-source.roll-7" msgstr "Roll 7" msgid "media-source.roll-8" msgstr "Roll 8" msgid "media-source.roll-9" msgstr "Roll 9" msgid "media-source.side" msgstr "Side" msgid "media-source.top" msgstr "Top" msgid "media-source.tray-1" msgstr "Tray 1" msgid "media-source.tray-10" msgstr "Tray 10" msgid "media-source.tray-11" msgstr "Tray 11" msgid "media-source.tray-12" msgstr "Tray 12" msgid "media-source.tray-13" msgstr "Tray 13" msgid "media-source.tray-14" msgstr "Tray 14" msgid "media-source.tray-15" msgstr "Tray 15" msgid "media-source.tray-16" msgstr "Tray 16" msgid "media-source.tray-17" msgstr "Tray 17" msgid "media-source.tray-18" msgstr "Tray 18" msgid "media-source.tray-19" msgstr "Tray 19" msgid "media-source.tray-2" msgstr "Tray 2" msgid "media-source.tray-20" msgstr "Tray 20" msgid "media-source.tray-3" msgstr "Tray 3" msgid "media-source.tray-4" msgstr "Tray 4" msgid "media-source.tray-5" msgstr "Tray 5" msgid "media-source.tray-6" msgstr "Tray 6" msgid "media-source.tray-7" msgstr "Tray 7" msgid "media-source.tray-8" msgstr "Tray 8" msgid "media-source.tray-9" msgstr "Tray 9" msgid "media-thickness" msgstr "Media Thickness" msgid "media-tooth" msgstr "Media Tooth (Texture)" msgid "media-tooth.antique" msgstr "Antique" msgid "media-tooth.calendared" msgstr "Extra Smooth" msgid "media-tooth.coarse" msgstr "Coarse" msgid "media-tooth.fine" msgstr "Fine" msgid "media-tooth.linen" msgstr "Linen" msgid "media-tooth.medium" msgstr "Medium" msgid "media-tooth.smooth" msgstr "Smooth" msgid "media-tooth.stipple" msgstr "Stipple" msgid "media-tooth.uncalendared" msgstr "Rough" msgid "media-tooth.vellum" msgstr "Vellum" msgid "media-top-margin" msgstr "Media Top Margin" msgid "media-type" msgstr "Media Type" msgid "media-type.aluminum" msgstr "Aluminum" msgid "media-type.auto" msgstr "Automatic" msgid "media-type.back-print-film" msgstr "Back Print Film" msgid "media-type.cardboard" msgstr "Cardboard" msgid "media-type.cardstock" msgstr "Cardstock" msgid "media-type.cd" msgstr "CD" msgid "media-type.com.hp.advanced-photo" msgstr "Advanced Photo Paper" msgid "media-type.com.hp.brochure-glossy" msgstr "Glossy Brochure Paper" msgid "media-type.com.hp.brochure-matte" msgstr "Matte Brochure Paper" msgid "media-type.com.hp.cover-matte" msgstr "Matte Cover Paper" msgid "media-type.com.hp.ecosmart-lite" msgstr "Office Recycled Paper" msgid "media-type.com.hp.everyday-glossy" msgstr "Everyday Glossy Photo Paper" msgid "media-type.com.hp.everyday-matte" msgstr "Everyday Matte Paper" msgid "media-type.com.hp.extra-heavy" msgstr "Extra Heavyweight Paper" msgid "media-type.com.hp.intermediate" msgstr "Multipurpose Paper" msgid "media-type.com.hp.mid-weight" msgstr "Mid-Weight Paper" msgid "media-type.com.hp.premium-inkjet" msgstr "Premium Inkjet Paper" msgid "media-type.com.hp.premium-photo" msgstr "Premium Photo Glossy Paper" msgid "media-type.com.hp.premium-presentation-matte" msgstr "Premium Presentation Matte Paper" msgid "media-type.continuous" msgstr "Continuous" msgid "media-type.continuous-long" msgstr "Continuous Long" msgid "media-type.continuous-short" msgstr "Continuous Short" msgid "media-type.corrugated-board" msgstr "Corrugated Board" msgid "media-type.disc" msgstr "Optical Disc" msgid "media-type.disc-glossy" msgstr "Glossy Optical Disc" msgid "media-type.disc-high-gloss" msgstr "High Gloss Optical Disc" msgid "media-type.disc-matte" msgstr "Matte Optical Disc" msgid "media-type.disc-satin" msgstr "Satin Optical Disc" msgid "media-type.disc-semi-gloss" msgstr "Semi-Gloss Optical Disc" msgid "media-type.double-wall" msgstr "Double Wall" msgid "media-type.dry-film" msgstr "Dry Film" msgid "media-type.dvd" msgstr "DVD" msgid "media-type.embossing-foil" msgstr "Embossing Foil" msgid "media-type.end-board" msgstr "End Board" msgid "media-type.envelope" msgstr "Envelope" msgid "media-type.envelope-archival" msgstr "Archival Envelope" msgid "media-type.envelope-bond" msgstr "Bond Envelope" msgid "media-type.envelope-coated" msgstr "Coated Envelope" msgid "media-type.envelope-cotton" msgstr "Cotton Envelope" msgid "media-type.envelope-fine" msgstr "Fine Envelope" msgid "media-type.envelope-heavyweight" msgstr "Heavyweight Envelope" msgid "media-type.envelope-inkjet" msgstr "Inkjet Envelope" msgid "media-type.envelope-lightweight" msgstr "Lightweight Envelope" msgid "media-type.envelope-plain" msgstr "Plain Envelope" msgid "media-type.envelope-preprinted" msgstr "Preprinted Envelope" msgid "media-type.envelope-window" msgstr "Windowed Envelope" msgid "media-type.fabric" msgstr "Fabric" msgid "media-type.fabric-archival" msgstr "Archival Fabric" msgid "media-type.fabric-glossy" msgstr "Glossy Fabric" msgid "media-type.fabric-high-gloss" msgstr "High Gloss Fabric" msgid "media-type.fabric-matte" msgstr "Matte Fabric" msgid "media-type.fabric-semi-gloss" msgstr "Semi-Gloss Fabric" msgid "media-type.fabric-waterproof" msgstr "Waterproof Fabric" msgid "media-type.film" msgstr "Film" msgid "media-type.flexo-base" msgstr "Flexo Base" msgid "media-type.flexo-photo-polymer" msgstr "Flexo Photo Polymer" msgid "media-type.flute" msgstr "Flute" msgid "media-type.foil" msgstr "Foil" msgid "media-type.full-cut-tabs" msgstr "Full Cut Tabs" msgid "media-type.glass" msgstr "Glass" msgid "media-type.glass-colored" msgstr "Glass Colored" msgid "media-type.glass-opaque" msgstr "Glass Opaque" msgid "media-type.glass-surfaced" msgstr "Glass Surfaced" msgid "media-type.glass-textured" msgstr "Glass Textured" msgid "media-type.gravure-cylinder" msgstr "Gravure Cylinder" msgid "media-type.image-setter-paper" msgstr "Image Setter Paper" msgid "media-type.imaging-cylinder" msgstr "Imaging Cylinder" msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon_photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon-photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.labels" msgstr "Labels" msgid "media-type.labels-colored" msgstr "Colored Labels" msgid "media-type.labels-glossy" msgstr "Glossy Labels" msgid "media-type.labels-high-gloss" msgstr "High Gloss Labels" msgid "media-type.labels-inkjet" msgstr "Inkjet Labels" msgid "media-type.labels-matte" msgstr "Matte Labels" msgid "media-type.labels-permanent" msgstr "Permanent Labels" msgid "media-type.labels-satin" msgstr "Satin Labels" msgid "media-type.labels-security" msgstr "Security Labels" msgid "media-type.labels-semi-gloss" msgstr "Semi-Gloss Labels" msgid "media-type.laminating-foil" msgstr "Laminating Foil" msgid "media-type.letterhead" msgstr "Letterhead" msgid "media-type.metal" msgstr "Metal" msgid "media-type.metal-glossy" msgstr "Metal Glossy" msgid "media-type.metal-high-gloss" msgstr "Metal High Gloss" msgid "media-type.metal-matte" msgstr "Metal Matte" msgid "media-type.metal-satin" msgstr "Metal Satin" msgid "media-type.metal-semi-gloss" msgstr "Metal Semi Gloss" msgid "media-type.mounting-tape" msgstr "Mounting Tape" msgid "media-type.multi-layer" msgstr "Multi Layer" msgid "media-type.multi-part-form" msgstr "Multi Part Form" msgid "media-type.other" msgstr "Other" msgid "media-type.paper" msgstr "Paper" msgid "media-type.photographic" msgstr "Photo Paper" msgid "media-type.photographic-archival" msgstr "Photographic Archival" msgid "media-type.photographic-film" msgstr "Photo Film" msgid "media-type.photographic-glossy" msgstr "Glossy Photo Paper" msgid "media-type.photographic-high-gloss" msgstr "High Gloss Photo Paper" msgid "media-type.photographic-matte" msgstr "Matte Photo Paper" msgid "media-type.photographic-satin" msgstr "Satin Photo Paper" msgid "media-type.photographic-semi-gloss" msgstr "Semi-Gloss Photo Paper" msgid "media-type.plastic" msgstr "Plastic" msgid "media-type.plastic-archival" msgstr "Plastic Archival" msgid "media-type.plastic-colored" msgstr "Plastic Colored" msgid "media-type.plastic-glossy" msgstr "Plastic Glossy" msgid "media-type.plastic-high-gloss" msgstr "Plastic High Gloss" msgid "media-type.plastic-matte" msgstr "Plastic Matte" msgid "media-type.plastic-satin" msgstr "Plastic Satin" msgid "media-type.plastic-semi-gloss" msgstr "Plastic Semi Gloss" msgid "media-type.plate" msgstr "Plate" msgid "media-type.polyester" msgstr "Polyester" msgid "media-type.pre-cut-tabs" msgstr "Pre Cut Tabs" msgid "media-type.roll" msgstr "Roll" msgid "media-type.screen" msgstr "Screen" msgid "media-type.screen-paged" msgstr "Screen Paged" msgid "media-type.self-adhesive" msgstr "Self Adhesive" msgid "media-type.self-adhesive-film" msgstr "Self Adhesive Film" msgid "media-type.shrink-foil" msgstr "Shrink Foil" msgid "media-type.single-face" msgstr "Single Face" msgid "media-type.single-wall" msgstr "Single Wall" msgid "media-type.sleeve" msgstr "Sleeve" msgid "media-type.stationery" msgstr "Stationery" msgid "media-type.stationery-archival" msgstr "Stationery Archival" msgid "media-type.stationery-coated" msgstr "Coated Paper" msgid "media-type.stationery-cotton" msgstr "Stationery Cotton" msgid "media-type.stationery-fine" msgstr "Vellum Paper" msgid "media-type.stationery-heavyweight" msgstr "Heavyweight Paper" msgid "media-type.stationery-heavyweight-coated" msgstr "Stationery Heavyweight Coated" msgid "media-type.stationery-inkjet" msgstr "Stationery Inkjet Paper" msgid "media-type.stationery-letterhead" msgstr "Letterhead" msgid "media-type.stationery-lightweight" msgstr "Lightweight Paper" msgid "media-type.stationery-preprinted" msgstr "Preprinted Paper" msgid "media-type.stationery-prepunched" msgstr "Punched Paper" msgid "media-type.tab-stock" msgstr "Tab Stock" msgid "media-type.tractor" msgstr "Tractor" msgid "media-type.transfer" msgstr "Transfer" msgid "media-type.transparency" msgstr "Transparency" msgid "media-type.triple-wall" msgstr "Triple Wall" msgid "media-type.wet-film" msgstr "Wet Film" msgid "media-weight-metric" msgstr "Media Weight (grams per m²)" msgid "media.asme_f_28x40in" msgstr "28 x 40″" msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" msgstr "A4 or US Letter" msgid "media.iso_2a0_1189x1682mm" msgstr "2a0" msgid "media.iso_a0_841x1189mm" msgstr "A0" msgid "media.iso_a0x3_1189x2523mm" msgstr "A0x3" msgid "media.iso_a10_26x37mm" msgstr "A10" msgid "media.iso_a1_594x841mm" msgstr "A1" msgid "media.iso_a1x3_841x1783mm" msgstr "A1x3" msgid "media.iso_a1x4_841x2378mm" msgstr "A1x4" msgid "media.iso_a2_420x594mm" msgstr "A2" msgid "media.iso_a2x3_594x1261mm" msgstr "A2x3" msgid "media.iso_a2x4_594x1682mm" msgstr "A2x4" msgid "media.iso_a2x5_594x2102mm" msgstr "A2x5" msgid "media.iso_a3-extra_322x445mm" msgstr "A3 (Extra)" msgid "media.iso_a3_297x420mm" msgstr "A3" msgid "media.iso_a3x3_420x891mm" msgstr "A3x3" msgid "media.iso_a3x4_420x1189mm" msgstr "A3x4" msgid "media.iso_a3x5_420x1486mm" msgstr "A3x5" msgid "media.iso_a3x6_420x1783mm" msgstr "A3x6" msgid "media.iso_a3x7_420x2080mm" msgstr "A3x7" msgid "media.iso_a4-extra_235.5x322.3mm" msgstr "A4 (Extra)" msgid "media.iso_a4-tab_225x297mm" msgstr "A4 (Tab)" msgid "media.iso_a4_210x297mm" msgstr "A4" msgid "media.iso_a4x3_297x630mm" msgstr "A4x3" msgid "media.iso_a4x4_297x841mm" msgstr "A4x4" msgid "media.iso_a4x5_297x1051mm" msgstr "A4x5" msgid "media.iso_a4x6_297x1261mm" msgstr "A4x6" msgid "media.iso_a4x7_297x1471mm" msgstr "A4x7" msgid "media.iso_a4x8_297x1682mm" msgstr "A4x8" msgid "media.iso_a4x9_297x1892mm" msgstr "A4x9" msgid "media.iso_a5-extra_174x235mm" msgstr "A5 (Extra)" msgid "media.iso_a5_148x210mm" msgstr "A5" msgid "media.iso_a6_105x148mm" msgstr "A6" msgid "media.iso_a7_74x105mm" msgstr "A7" msgid "media.iso_a8_52x74mm" msgstr "A8" msgid "media.iso_a9_37x52mm" msgstr "A9" msgid "media.iso_b0_1000x1414mm" msgstr "B0" msgid "media.iso_b10_31x44mm" msgstr "B10" msgid "media.iso_b1_707x1000mm" msgstr "B1" msgid "media.iso_b2_500x707mm" msgstr "B2" msgid "media.iso_b3_353x500mm" msgstr "B3" msgid "media.iso_b4_250x353mm" msgstr "B4" msgid "media.iso_b5-extra_201x276mm" msgstr "B5 (Extra)" msgid "media.iso_b5_176x250mm" msgstr "B5 Envelope" msgid "media.iso_b6_125x176mm" msgstr "B6" msgid "media.iso_b6c4_125x324mm" msgstr "B6/C4 Envelope" msgid "media.iso_b7_88x125mm" msgstr "B7" msgid "media.iso_b8_62x88mm" msgstr "B8" msgid "media.iso_b9_44x62mm" msgstr "B9" msgid "media.iso_c0_917x1297mm" msgstr "C0 Envelope" msgid "media.iso_c10_28x40mm" msgstr "C10 Envelope" msgid "media.iso_c1_648x917mm" msgstr "C1 Envelope" msgid "media.iso_c2_458x648mm" msgstr "C2 Envelope" msgid "media.iso_c3_324x458mm" msgstr "C3 Envelope" msgid "media.iso_c4_229x324mm" msgstr "C4 Envelope" msgid "media.iso_c5_162x229mm" msgstr "C5 Envelope" msgid "media.iso_c6_114x162mm" msgstr "C6 Envelope" msgid "media.iso_c6c5_114x229mm" msgstr "C6c5 Envelope" msgid "media.iso_c7_81x114mm" msgstr "C7 Envelope" msgid "media.iso_c7c6_81x162mm" msgstr "C7c6 Envelope" msgid "media.iso_c8_57x81mm" msgstr "C8 Envelope" msgid "media.iso_c9_40x57mm" msgstr "C9 Envelope" msgid "media.iso_dl_110x220mm" msgstr "DL Envelope" msgid "media.iso_ra0_860x1220mm" msgstr "ISO RA0" msgid "media.iso_ra1_610x860mm" msgstr "ISO RA1" msgid "media.iso_ra2_430x610mm" msgstr "ISO RA2" msgid "media.iso_ra3_305x430mm" msgstr "ISO RA3" msgid "media.iso_ra4_215x305mm" msgstr "ISO RA4" msgid "media.iso_sra0_900x1280mm" msgstr "ISO SRA0" msgid "media.iso_sra1_640x900mm" msgstr "ISO SRA1" msgid "media.iso_sra2_450x640mm" msgstr "ISO SRA2" msgid "media.iso_sra3_320x450mm" msgstr "ISO SRA3" msgid "media.iso_sra4_225x320mm" msgstr "ISO SRA4" msgid "media.jis_b0_1030x1456mm" msgstr "JIS B0" msgid "media.jis_b10_32x45mm" msgstr "JIS B10" msgid "media.jis_b1_728x1030mm" msgstr "JIS B1" msgid "media.jis_b2_515x728mm" msgstr "JIS B2" msgid "media.jis_b3_364x515mm" msgstr "JIS B3" msgid "media.jis_b4_257x364mm" msgstr "JIS B4" msgid "media.jis_b5_182x257mm" msgstr "JIS B5" msgid "media.jis_b6_128x182mm" msgstr "JIS B6" msgid "media.jis_b7_91x128mm" msgstr "JIS B7" msgid "media.jis_b8_64x91mm" msgstr "JIS B8" msgid "media.jis_b9_45x64mm" msgstr "JIS B9" msgid "media.jis_exec_216x330mm" msgstr "JIS Executive" msgid "media.jpn_chou2_111.1x146mm" msgstr "Chou 2 Envelope" msgid "media.jpn_chou3_120x235mm" msgstr "Chou 3 Envelope" msgid "media.jpn_chou4_90x205mm" msgstr "Chou 4 Envelope" msgid "media.jpn_hagaki_100x148mm" msgstr "Hagaki" msgid "media.jpn_kahu_240x322.1mm" msgstr "Kahu Envelope" msgid "media.jpn_kaku2_240x332mm" msgstr "Kahu 2 Envelope" msgid "media.jpn_kaku3_216x277mm" msgstr "216 x 277mm" msgid "media.jpn_kaku4_197x267mm" msgstr "197 x 267mm" msgid "media.jpn_kaku5_190x240mm" msgstr "190 x 240mm" msgid "media.jpn_kaku7_142x205mm" msgstr "142 x 205mm" msgid "media.jpn_kaku8_119x197mm" msgstr "119 x 197mm" msgid "media.jpn_oufuku_148x200mm" msgstr "Oufuku Reply Postcard" msgid "media.jpn_you4_105x235mm" msgstr "You 4 Envelope" msgid "media.na_10x11_10x11in" msgstr "10 x 11″" msgid "media.na_10x13_10x13in" msgstr "10 x 13″" msgid "media.na_10x14_10x14in" msgstr "10 x 14″" msgid "media.na_10x15_10x15in" msgstr "10 x 15″" msgid "media.na_11x12_11x12in" msgstr "11 x 12″" msgid "media.na_11x15_11x15in" msgstr "11 x 15″" msgid "media.na_12x19_12x19in" msgstr "12 x 19″" msgid "media.na_5x7_5x7in" msgstr "5 x 7″" msgid "media.na_6x9_6x9in" msgstr "6 x 9″" msgid "media.na_7x9_7x9in" msgstr "7 x 9″" msgid "media.na_9x11_9x11in" msgstr "9 x 11″" msgid "media.na_a2_4.375x5.75in" msgstr "A2 Envelope" msgid "media.na_arch-a_9x12in" msgstr "9 x 12″" msgid "media.na_arch-b_12x18in" msgstr "12 x 18″" msgid "media.na_arch-c_18x24in" msgstr "18 x 24″" msgid "media.na_arch-d_24x36in" msgstr "24 x 36″" msgid "media.na_arch-e2_26x38in" msgstr "26 x 38″" msgid "media.na_arch-e3_27x39in" msgstr "27 x 39″" msgid "media.na_arch-e_36x48in" msgstr "36 x 48″" msgid "media.na_b-plus_12x19.17in" msgstr "12 x 19.17″" msgid "media.na_c5_6.5x9.5in" msgstr "C5 Envelope" msgid "media.na_c_17x22in" msgstr "17 x 22″" msgid "media.na_d_22x34in" msgstr "22 x 34″" msgid "media.na_e_34x44in" msgstr "34 x 44″" msgid "media.na_edp_11x14in" msgstr "11 x 14″" msgid "media.na_eur-edp_12x14in" msgstr "12 x 14″" msgid "media.na_executive_7.25x10.5in" msgstr "Executive" msgid "media.na_f_44x68in" msgstr "44 x 68″" msgid "media.na_fanfold-eur_8.5x12in" msgstr "European Fanfold" msgid "media.na_fanfold-us_11x14.875in" msgstr "US Fanfold" msgid "media.na_foolscap_8.5x13in" msgstr "Foolscap" msgid "media.na_govt-legal_8x13in" msgstr "8 x 13″" msgid "media.na_govt-letter_8x10in" msgstr "8 x 10″" msgid "media.na_index-3x5_3x5in" msgstr "3 x 5″" msgid "media.na_index-4x6-ext_6x8in" msgstr "6 x 8″" msgid "media.na_index-4x6_4x6in" msgstr "4 x 6″" msgid "media.na_index-5x8_5x8in" msgstr "5 x 8″" msgid "media.na_invoice_5.5x8.5in" msgstr "Statement" msgid "media.na_ledger_11x17in" msgstr "11 x 17″" msgid "media.na_legal-extra_9.5x15in" msgstr "US Legal (Extra)" msgid "media.na_legal_8.5x14in" msgstr "US Legal" msgid "media.na_letter-extra_9.5x12in" msgstr "US Letter (Extra)" msgid "media.na_letter-plus_8.5x12.69in" msgstr "US Letter (Plus)" msgid "media.na_letter_8.5x11in" msgstr "US Letter" msgid "media.na_monarch_3.875x7.5in" msgstr "Monarch Envelope" msgid "media.na_number-10_4.125x9.5in" msgstr "#10 Envelope" msgid "media.na_number-11_4.5x10.375in" msgstr "#11 Envelope" msgid "media.na_number-12_4.75x11in" msgstr "#12 Envelope" msgid "media.na_number-14_5x11.5in" msgstr "#14 Envelope" msgid "media.na_number-9_3.875x8.875in" msgstr "#9 Envelope" msgid "media.na_oficio_8.5x13.4in" msgstr "8.5 x 13.4″" msgid "media.na_personal_3.625x6.5in" msgstr "Personal Envelope" msgid "media.na_quarto_8.5x10.83in" msgstr "Quarto" msgid "media.na_super-a_8.94x14in" msgstr "8.94 x 14″" msgid "media.na_super-b_13x19in" msgstr "13 x 19″" msgid "media.na_wide-format_30x42in" msgstr "30 x 42″" msgid "media.oe_12x16_12x16in" msgstr "12 x 16″" msgid "media.oe_14x17_14x17in" msgstr "14 x 17″" msgid "media.oe_18x22_18x22in" msgstr "18 x 22″" msgid "media.oe_a2plus_17x24in" msgstr "17 x 24″" msgid "media.oe_photo-10r_10x12in" msgstr "10 x 12″" msgid "media.oe_photo-20r_20x24in" msgstr "20 x 24″" msgid "media.oe_photo-l_3.5x5in" msgstr "3.5 x 5″" msgid "media.oe_photo-s10r_10x15in" msgstr "10 x 15″" msgid "media.om_16k_184x260mm" msgstr "184 x 260mm" msgid "media.om_16k_195x270mm" msgstr "195 x 270mm" msgid "media.om_dai-pa-kai_275x395mm" msgstr "275 x 395mm" msgid "media.om_folio-sp_215x315mm" msgstr "Folio" msgid "media.om_folio_210x330mm" msgstr "Folio (Special)" msgid "media.om_invite_220x220mm" msgstr "Invitation Envelope" msgid "media.om_italian_110x230mm" msgstr "Italian Envelope" msgid "media.om_juuro-ku-kai_198x275mm" msgstr "198 x 275mm" msgid "media.om_large-photo_200x300" msgstr "200 x 300" msgid "media.om_medium-photo_130x180mm" msgstr "130 x 180mm" msgid "media.om_pa-kai_267x389mm" msgstr "267 x 389mm" msgid "media.om_postfix_114x229mm" msgstr "Postfix Envelope" msgid "media.om_small-photo_100x150mm" msgstr "100 x 150mm" msgid "media.om_wide-photo_100x200mm" msgstr "100 x 200mm" msgid "media.prc_10_324x458mm" msgstr "Chinese #10 Envelope" msgid "media.prc_16k_146x215mm" msgstr "Chinese 16k" msgid "media.prc_1_102x165mm" msgstr "Chinese #1 Envelope" msgid "media.prc_2_102x176mm" msgstr "Chinese #2 Envelope" msgid "media.prc_32k_97x151mm" msgstr "Chinese 32k" msgid "media.prc_3_125x176mm" msgstr "Chinese #3 Envelope" msgid "media.prc_4_110x208mm" msgstr "Chinese #4 Envelope" msgid "media.prc_5_110x220mm" msgstr "Chinese #5 Envelope" msgid "media.prc_6_120x320mm" msgstr "Chinese #6 Envelope" msgid "media.prc_7_160x230mm" msgstr "Chinese #7 Envelope" msgid "media.prc_8_120x309mm" msgstr "Chinese #8 Envelope" msgid "media.roc_16k_7.75x10.75in" msgstr "ROC 16k" msgid "media.roc_8k_10.75x15.5in" msgstr "ROC 8k" msgid "multiple-document-handling" msgstr "Multiple Document Handling" msgid "multiple-document-handling.separate-documents-collated-copies" msgstr "Separate Documents Collated Copies" msgid "multiple-document-handling.separate-documents-uncollated-copies" msgstr "Separate Documents Uncollated Copies" msgid "multiple-document-handling.single-document" msgstr "Single Document" msgid "multiple-document-handling.single-document-new-sheet" msgstr "Single Document New Sheet" msgid "multiple-object-handling" msgstr "Multiple Object Handling" msgid "multiple-object-handling.auto" msgstr "Automatic" msgid "multiple-object-handling.best-fit" msgstr "Best Fit" msgid "multiple-object-handling.best-quality" msgstr "Best Quality" msgid "multiple-object-handling.best-speed" msgstr "Best Speed" msgid "multiple-object-handling.one-at-a-time" msgstr "One At A Time" msgid "multiple-operation-time-out-action" msgstr "On Timeout" msgid "multiple-operation-time-out-action.abort-job" msgstr "Abort Job" msgid "multiple-operation-time-out-action.hold-job" msgstr "Hold Job" msgid "multiple-operation-time-out-action.process-job" msgstr "Process Job" msgid "noise-removal" msgstr "Noise Removal" msgid "notify-attributes" msgstr "Notify Attributes" msgid "notify-charset" msgstr "Notify Charset" msgid "notify-events" msgstr "Notify Events" msgid "notify-events.document-completed" msgstr "Document Completed" msgid "notify-events.document-config-changed" msgstr "Document Config Changed" msgid "notify-events.document-created" msgstr "Document Created" msgid "notify-events.document-fetchable" msgstr "Document Fetchable" msgid "notify-events.document-state-changed" msgstr "Document State Changed" msgid "notify-events.document-stopped" msgstr "Document Stopped" msgid "notify-events.job-completed" msgstr "Job Completed" msgid "notify-events.job-config-changed" msgstr "Job Config Changed" msgid "notify-events.job-created" msgstr "Job Created" msgid "notify-events.job-fetchable" msgstr "Job Fetchable" msgid "notify-events.job-progress" msgstr "Job Progress" msgid "notify-events.job-state-changed" msgstr "Job State Changed" msgid "notify-events.job-stopped" msgstr "Job Stopped" msgid "notify-events.none" msgstr "None" msgid "notify-events.printer-config-changed" msgstr "Printer Config Changed" msgid "notify-events.printer-finishings-changed" msgstr "Printer Finishings Changed" msgid "notify-events.printer-media-changed" msgstr "Printer Media Changed" msgid "notify-events.printer-queue-order-changed" msgstr "Printer Queue Order Changed" msgid "notify-events.printer-restarted" msgstr "Printer Restarted" msgid "notify-events.printer-shutdown" msgstr "Printer Shutdown" msgid "notify-events.printer-state-changed" msgstr "Printer State Changed" msgid "notify-events.printer-stopped" msgstr "Printer Stopped" msgid "notify-get-interval" msgstr "Notify Get Interval" msgid "notify-lease-duration" msgstr "Notify Lease Duration" msgid "notify-natural-language" msgstr "Notify Natural Language" msgid "notify-pull-method" msgstr "Notify Pull Method" msgid "notify-recipient-uri" msgstr "Notify Recipient" msgid "notify-sequence-numbers" msgstr "Notify Sequence Numbers" msgid "notify-subscription-ids" msgstr "Notify Subscription Ids" msgid "notify-time-interval" msgstr "Notify Time Interval" msgid "notify-user-data" msgstr "Notify User Data" msgid "notify-wait" msgstr "Notify Wait" msgid "number-of-retries" msgstr "Number Of Retries" msgid "number-up" msgstr "Number-Up" msgid "object-offset" msgstr "Object Offset" msgid "object-size" msgstr "Object Size" msgid "organization-name" msgstr "Organization Name" msgid "orientation-requested" msgstr "Orientation" msgid "orientation-requested.3" msgstr "Portrait" msgid "orientation-requested.4" msgstr "Landscape" msgid "orientation-requested.5" msgstr "Reverse Landscape" msgid "orientation-requested.6" msgstr "Reverse Portrait" msgid "orientation-requested.7" msgstr "None" msgid "output-attributes" msgstr "Scanned Image Options" msgid "output-bin" msgstr "Output Tray" msgid "output-bin.auto" msgstr "Automatic" msgid "output-bin.bottom" msgstr "Bottom" msgid "output-bin.center" msgstr "Center" msgid "output-bin.face-down" msgstr "Face Down" msgid "output-bin.face-up" msgstr "Face Up" msgid "output-bin.large-capacity" msgstr "Large Capacity" msgid "output-bin.left" msgstr "Left" msgid "output-bin.mailbox-1" msgstr "Mailbox 1" msgid "output-bin.mailbox-10" msgstr "Mailbox 10" msgid "output-bin.mailbox-2" msgstr "Mailbox 2" msgid "output-bin.mailbox-3" msgstr "Mailbox 3" msgid "output-bin.mailbox-4" msgstr "Mailbox 4" msgid "output-bin.mailbox-5" msgstr "Mailbox 5" msgid "output-bin.mailbox-6" msgstr "Mailbox 6" msgid "output-bin.mailbox-7" msgstr "Mailbox 7" msgid "output-bin.mailbox-8" msgstr "Mailbox 8" msgid "output-bin.mailbox-9" msgstr "Mailbox 9" msgid "output-bin.middle" msgstr "Middle" msgid "output-bin.my-mailbox" msgstr "My Mailbox" msgid "output-bin.rear" msgstr "Rear" msgid "output-bin.right" msgstr "Right" msgid "output-bin.side" msgstr "Side" msgid "output-bin.stacker-1" msgstr "Stacker 1" msgid "output-bin.stacker-10" msgstr "Stacker 10" msgid "output-bin.stacker-2" msgstr "Stacker 2" msgid "output-bin.stacker-3" msgstr "Stacker 3" msgid "output-bin.stacker-4" msgstr "Stacker 4" msgid "output-bin.stacker-5" msgstr "Stacker 5" msgid "output-bin.stacker-6" msgstr "Stacker 6" msgid "output-bin.stacker-7" msgstr "Stacker 7" msgid "output-bin.stacker-8" msgstr "Stacker 8" msgid "output-bin.stacker-9" msgstr "Stacker 9" msgid "output-bin.top" msgstr "Top" msgid "output-bin.tray-1" msgstr "Tray 1" msgid "output-bin.tray-10" msgstr "Tray 10" msgid "output-bin.tray-2" msgstr "Tray 2" msgid "output-bin.tray-3" msgstr "Tray 3" msgid "output-bin.tray-4" msgstr "Tray 4" msgid "output-bin.tray-5" msgstr "Tray 5" msgid "output-bin.tray-6" msgstr "Tray 6" msgid "output-bin.tray-7" msgstr "Tray 7" msgid "output-bin.tray-8" msgstr "Tray 8" msgid "output-bin.tray-9" msgstr "Tray 9" msgid "output-compression-quality-factor" msgstr "Scanned Image Quality" msgid "page-delivery" msgstr "Page Delivery" msgid "page-delivery.reverse-order-face-down" msgstr "Reverse Order Face-down" msgid "page-delivery.reverse-order-face-up" msgstr "Reverse Order Face-up" msgid "page-delivery.same-order-face-down" msgstr "Same Order Face-down" msgid "page-delivery.same-order-face-up" msgstr "Same Order Face-up" msgid "page-delivery.system-specified" msgstr "System Specified" msgid "page-order-received" msgstr "Page Order Received" msgid "page-order-received.1-to-n-order" msgstr "1 To N" msgid "page-order-received.n-to-1-order" msgstr "N To 1" msgid "page-ranges" msgstr "Page Ranges" msgid "pages" msgstr "Pages" msgid "pages-per-subset" msgstr "Pages Per Subset" msgid "platform-shape" msgstr "Platform Shape" msgid "platform-shape.ellipse" msgstr "Round" msgid "platform-shape.rectangle" msgstr "Rectangle" msgid "platform-temperature" msgstr "Platform Temperature" msgid "post-dial-string" msgstr "Post-dial String" msgid "pre-dial-string" msgstr "Pre-dial String" msgid "presentation-direction-number-up" msgstr "Number-Up Layout" msgid "presentation-direction-number-up.tobottom-toleft" msgstr "Top-bottom, Right-left" msgid "presentation-direction-number-up.tobottom-toright" msgstr "Top-bottom, Left-right" msgid "presentation-direction-number-up.toleft-tobottom" msgstr "Right-left, Top-bottom" msgid "presentation-direction-number-up.toleft-totop" msgstr "Right-left, Bottom-top" msgid "presentation-direction-number-up.toright-tobottom" msgstr "Left-right, Top-bottom" msgid "presentation-direction-number-up.toright-totop" msgstr "Left-right, Bottom-top" msgid "presentation-direction-number-up.totop-toleft" msgstr "Bottom-top, Right-left" msgid "presentation-direction-number-up.totop-toright" msgstr "Bottom-top, Left-right" msgid "print-accuracy" msgstr "Print Accuracy" msgid "print-base" msgstr "Print Base" msgid "print-base.brim" msgstr "Brim" msgid "print-base.none" msgstr "None" msgid "print-base.raft" msgstr "Raft" msgid "print-base.skirt" msgstr "Skirt" msgid "print-base.standard" msgstr "Standard" msgid "print-color-mode" msgstr "Print Color Mode" msgid "print-color-mode.auto" msgstr "Automatic" msgid "print-color-mode.bi-level" msgstr "Text" msgid "print-color-mode.color" msgstr "Color" msgid "print-color-mode.highlight" msgstr "Highlight" msgid "print-color-mode.monochrome" msgstr "Monochrome" msgid "print-color-mode.process-bi-level" msgstr "Process Text" msgid "print-color-mode.process-monochrome" msgstr "Process Monochrome" msgid "print-content-optimize" msgstr "Print Optimization" msgid "print-content-optimize.auto" msgstr "Automatic" msgid "print-content-optimize.graphic" msgstr "Graphics" msgid "print-content-optimize.photo" msgstr "Photo" msgid "print-content-optimize.text" msgstr "Text" msgid "print-content-optimize.text-and-graphic" msgstr "Text and Graphics" msgid "print-objects" msgstr "Print Objects" msgid "print-quality" msgstr "Print Quality" msgid "print-quality.3" msgstr "Draft" msgid "print-quality.4" msgstr "Normal" msgid "print-quality.5" msgstr "High" msgid "print-rendering-intent" msgstr "Print Rendering Intent" msgid "print-rendering-intent.absolute" msgstr "Absolute" msgid "print-rendering-intent.auto" msgstr "Automatic" msgid "print-rendering-intent.perceptual" msgstr "Perceptual" msgid "print-rendering-intent.relative" msgstr "Relative" msgid "print-rendering-intent.relative-bpc" msgstr "Relative w/Black Point Compensation" msgid "print-rendering-intent.saturation" msgstr "Saturation" msgid "print-scaling" msgstr "Print Scaling" msgid "print-scaling.auto" msgstr "Automatic" msgid "print-scaling.auto-fit" msgstr "Auto-fit" msgid "print-scaling.fill" msgstr "Fill" msgid "print-scaling.fit" msgstr "Fit" msgid "print-scaling.none" msgstr "None" msgid "print-supports" msgstr "Print Supports" msgid "print-supports.material" msgstr "With Specified Material" msgid "print-supports.none" msgstr "None" msgid "print-supports.standard" msgstr "Standard" msgid "printer-message-from-operator" msgstr "Message From Operator" msgid "printer-resolution" msgstr "Print Resolution" msgid "printer-state" msgstr "Printer State" msgid "printer-state-reasons" msgstr "Detailed Printer State" msgid "printer-state-reasons.alert-removal-of-binary-change-entry" msgstr "Old Alerts Have Been Removed" msgid "printer-state-reasons.bander-added" msgstr "Bander Added" msgid "printer-state-reasons.bander-almost-empty" msgstr "Bander Almost Empty" msgid "printer-state-reasons.bander-almost-full" msgstr "Bander Almost Full" msgid "printer-state-reasons.bander-at-limit" msgstr "Bander At Limit" msgid "printer-state-reasons.bander-closed" msgstr "Bander Closed" msgid "printer-state-reasons.bander-configuration-change" msgstr "Bander Configuration Change" msgid "printer-state-reasons.bander-cover-closed" msgstr "Bander Cover Closed" msgid "printer-state-reasons.bander-cover-open" msgstr "Bander Cover Open" msgid "printer-state-reasons.bander-empty" msgstr "Bander Empty" msgid "printer-state-reasons.bander-full" msgstr "Bander Full" msgid "printer-state-reasons.bander-interlock-closed" msgstr "Bander Interlock Closed" msgid "printer-state-reasons.bander-interlock-open" msgstr "Bander Interlock Open" msgid "printer-state-reasons.bander-jam" msgstr "Bander Jam" msgid "printer-state-reasons.bander-life-almost-over" msgstr "Bander Life Almost Over" msgid "printer-state-reasons.bander-life-over" msgstr "Bander Life Over" msgid "printer-state-reasons.bander-memory-exhausted" msgstr "Bander Memory Exhausted" msgid "printer-state-reasons.bander-missing" msgstr "Bander Missing" msgid "printer-state-reasons.bander-motor-failure" msgstr "Bander Motor Failure" msgid "printer-state-reasons.bander-near-limit" msgstr "Bander Near Limit" msgid "printer-state-reasons.bander-offline" msgstr "Bander Offline" msgid "printer-state-reasons.bander-opened" msgstr "Bander Opened" msgid "printer-state-reasons.bander-over-temperature" msgstr "Bander Over Temperature" msgid "printer-state-reasons.bander-power-saver" msgstr "Bander Power Saver" msgid "printer-state-reasons.bander-recoverable-failure" msgstr "Bander Recoverable Failure" msgid "printer-state-reasons.bander-recoverable-storage" msgstr "Bander Recoverable Storage" msgid "printer-state-reasons.bander-removed" msgstr "Bander Removed" msgid "printer-state-reasons.bander-resource-added" msgstr "Bander Resource Added" msgid "printer-state-reasons.bander-resource-removed" msgstr "Bander Resource Removed" msgid "printer-state-reasons.bander-thermistor-failure" msgstr "Bander Thermistor Failure" msgid "printer-state-reasons.bander-timing-failure" msgstr "Bander Timing Failure" msgid "printer-state-reasons.bander-turned-off" msgstr "Bander Turned Off" msgid "printer-state-reasons.bander-turned-on" msgstr "Bander Turned On" msgid "printer-state-reasons.bander-under-temperature" msgstr "Bander Under Temperature" msgid "printer-state-reasons.bander-unrecoverable-failure" msgstr "Bander Unrecoverable Failure" msgid "printer-state-reasons.bander-unrecoverable-storage-error" msgstr "Bander Unrecoverable Storage Error" msgid "printer-state-reasons.bander-warming-up" msgstr "Bander Warming Up" msgid "printer-state-reasons.binder-added" msgstr "Binder Added" msgid "printer-state-reasons.binder-almost-empty" msgstr "Binder Almost Empty" msgid "printer-state-reasons.binder-almost-full" msgstr "Binder Almost Full" msgid "printer-state-reasons.binder-at-limit" msgstr "Binder At Limit" msgid "printer-state-reasons.binder-closed" msgstr "Binder Closed" msgid "printer-state-reasons.binder-configuration-change" msgstr "Binder Configuration Change" msgid "printer-state-reasons.binder-cover-closed" msgstr "Binder Cover Closed" msgid "printer-state-reasons.binder-cover-open" msgstr "Binder Cover Open" msgid "printer-state-reasons.binder-empty" msgstr "Binder Empty" msgid "printer-state-reasons.binder-full" msgstr "Binder Full" msgid "printer-state-reasons.binder-interlock-closed" msgstr "Binder Interlock Closed" msgid "printer-state-reasons.binder-interlock-open" msgstr "Binder Interlock Open" msgid "printer-state-reasons.binder-jam" msgstr "Binder Jam" msgid "printer-state-reasons.binder-life-almost-over" msgstr "Binder Life Almost Over" msgid "printer-state-reasons.binder-life-over" msgstr "Binder Life Over" msgid "printer-state-reasons.binder-memory-exhausted" msgstr "Binder Memory Exhausted" msgid "printer-state-reasons.binder-missing" msgstr "Binder Missing" msgid "printer-state-reasons.binder-motor-failure" msgstr "Binder Motor Failure" msgid "printer-state-reasons.binder-near-limit" msgstr "Binder Near Limit" msgid "printer-state-reasons.binder-offline" msgstr "Binder Offline" msgid "printer-state-reasons.binder-opened" msgstr "Binder Opened" msgid "printer-state-reasons.binder-over-temperature" msgstr "Binder Over Temperature" msgid "printer-state-reasons.binder-power-saver" msgstr "Binder Power Saver" msgid "printer-state-reasons.binder-recoverable-failure" msgstr "Binder Recoverable Failure" msgid "printer-state-reasons.binder-recoverable-storage" msgstr "Binder Recoverable Storage" msgid "printer-state-reasons.binder-removed" msgstr "Binder Removed" msgid "printer-state-reasons.binder-resource-added" msgstr "Binder Resource Added" msgid "printer-state-reasons.binder-resource-removed" msgstr "Binder Resource Removed" msgid "printer-state-reasons.binder-thermistor-failure" msgstr "Binder Thermistor Failure" msgid "printer-state-reasons.binder-timing-failure" msgstr "Binder Timing Failure" msgid "printer-state-reasons.binder-turned-off" msgstr "Binder Turned Off" msgid "printer-state-reasons.binder-turned-on" msgstr "Binder Turned On" msgid "printer-state-reasons.binder-under-temperature" msgstr "Binder Under Temperature" msgid "printer-state-reasons.binder-unrecoverable-failure" msgstr "Binder Unrecoverable Failure" msgid "printer-state-reasons.binder-unrecoverable-storage-error" msgstr "Binder Unrecoverable Storage Error" msgid "printer-state-reasons.binder-warming-up" msgstr "Binder Warming Up" msgid "printer-state-reasons.camera-failure" msgstr "Camera Failure" msgid "printer-state-reasons.chamber-cooling" msgstr "Chamber Cooling" msgid "printer-state-reasons.chamber-heating" msgstr "Chamber Heating" msgid "printer-state-reasons.chamber-temperature-high" msgstr "Chamber Temperature High" msgid "printer-state-reasons.chamber-temperature-low" msgstr "Chamber Temperature Low" msgid "printer-state-reasons.cleaner-life-almost-over" msgstr "Cleaner Life Almost Over" msgid "printer-state-reasons.cleaner-life-over" msgstr "Cleaner Life Over" msgid "printer-state-reasons.configuration-change" msgstr "Configuration Change" msgid "printer-state-reasons.connecting-to-device" msgstr "Connecting To Device" msgid "printer-state-reasons.cover-open" msgstr "Cover Open" msgid "printer-state-reasons.deactivated" msgstr "Deactivated" msgid "printer-state-reasons.developer-empty" msgstr "Developer Empty" msgid "printer-state-reasons.developer-low" msgstr "Developer Low" msgid "printer-state-reasons.die-cutter-added" msgstr "Die Cutter Added" msgid "printer-state-reasons.die-cutter-almost-empty" msgstr "Die Cutter Almost Empty" msgid "printer-state-reasons.die-cutter-almost-full" msgstr "Die Cutter Almost Full" msgid "printer-state-reasons.die-cutter-at-limit" msgstr "Die Cutter At Limit" msgid "printer-state-reasons.die-cutter-closed" msgstr "Die Cutter Closed" msgid "printer-state-reasons.die-cutter-configuration-change" msgstr "Die Cutter Configuration Change" msgid "printer-state-reasons.die-cutter-cover-closed" msgstr "Die Cutter Cover Closed" msgid "printer-state-reasons.die-cutter-cover-open" msgstr "Die Cutter Cover Open" msgid "printer-state-reasons.die-cutter-empty" msgstr "Die Cutter Empty" msgid "printer-state-reasons.die-cutter-full" msgstr "Die Cutter Full" msgid "printer-state-reasons.die-cutter-interlock-closed" msgstr "Die Cutter Interlock Closed" msgid "printer-state-reasons.die-cutter-interlock-open" msgstr "Die Cutter Interlock Open" msgid "printer-state-reasons.die-cutter-jam" msgstr "Die Cutter Jam" msgid "printer-state-reasons.die-cutter-life-almost-over" msgstr "Die Cutter Life Almost Over" msgid "printer-state-reasons.die-cutter-life-over" msgstr "Die Cutter Life Over" msgid "printer-state-reasons.die-cutter-memory-exhausted" msgstr "Die Cutter Memory Exhausted" msgid "printer-state-reasons.die-cutter-missing" msgstr "Die Cutter Missing" msgid "printer-state-reasons.die-cutter-motor-failure" msgstr "Die Cutter Motor Failure" msgid "printer-state-reasons.die-cutter-near-limit" msgstr "Die Cutter Near Limit" msgid "printer-state-reasons.die-cutter-offline" msgstr "Die Cutter Offline" msgid "printer-state-reasons.die-cutter-opened" msgstr "Die Cutter Opened" msgid "printer-state-reasons.die-cutter-over-temperature" msgstr "Die Cutter Over Temperature" msgid "printer-state-reasons.die-cutter-power-saver" msgstr "Die Cutter Power Saver" msgid "printer-state-reasons.die-cutter-recoverable-failure" msgstr "Die Cutter Recoverable Failure" msgid "printer-state-reasons.die-cutter-recoverable-storage" msgstr "Die Cutter Recoverable Storage" msgid "printer-state-reasons.die-cutter-removed" msgstr "Die Cutter Removed" msgid "printer-state-reasons.die-cutter-resource-added" msgstr "Die Cutter Resource Added" msgid "printer-state-reasons.die-cutter-resource-removed" msgstr "Die Cutter Resource Removed" msgid "printer-state-reasons.die-cutter-thermistor-failure" msgstr "Die Cutter Thermistor Failure" msgid "printer-state-reasons.die-cutter-timing-failure" msgstr "Die Cutter Timing Failure" msgid "printer-state-reasons.die-cutter-turned-off" msgstr "Die Cutter Turned Off" msgid "printer-state-reasons.die-cutter-turned-on" msgstr "Die Cutter Turned On" msgid "printer-state-reasons.die-cutter-under-temperature" msgstr "Die Cutter Under Temperature" msgid "printer-state-reasons.die-cutter-unrecoverable-failure" msgstr "Die Cutter Unrecoverable Failure" msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error" msgstr "Die Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.die-cutter-warming-up" msgstr "Die Cutter Warming Up" msgid "printer-state-reasons.door-open" msgstr "Door Open" msgid "printer-state-reasons.extruder-cooling" msgstr "Extruder Cooling" msgid "printer-state-reasons.extruder-failure" msgstr "Extruder Failure" msgid "printer-state-reasons.extruder-heating" msgstr "Extruder Heating" msgid "printer-state-reasons.extruder-jam" msgstr "Extruder Jam" msgid "printer-state-reasons.extruder-temperature-high" msgstr "Extruder Temperature High" msgid "printer-state-reasons.extruder-temperature-low" msgstr "Extruder Temperature Low" msgid "printer-state-reasons.fan-failure" msgstr "Fan Failure" msgid "printer-state-reasons.folder-added" msgstr "Folder Added" msgid "printer-state-reasons.folder-almost-empty" msgstr "Folder Almost Empty" msgid "printer-state-reasons.folder-almost-full" msgstr "Folder Almost Full" msgid "printer-state-reasons.folder-at-limit" msgstr "Folder At Limit" msgid "printer-state-reasons.folder-closed" msgstr "Folder Closed" msgid "printer-state-reasons.folder-configuration-change" msgstr "Folder Configuration Change" msgid "printer-state-reasons.folder-cover-closed" msgstr "Folder Cover Closed" msgid "printer-state-reasons.folder-cover-open" msgstr "Folder Cover Open" msgid "printer-state-reasons.folder-empty" msgstr "Folder Empty" msgid "printer-state-reasons.folder-full" msgstr "Folder Full" msgid "printer-state-reasons.folder-interlock-closed" msgstr "Folder Interlock Closed" msgid "printer-state-reasons.folder-interlock-open" msgstr "Folder Interlock Open" msgid "printer-state-reasons.folder-jam" msgstr "Folder Jam" msgid "printer-state-reasons.folder-life-almost-over" msgstr "Folder Life Almost Over" msgid "printer-state-reasons.folder-life-over" msgstr "Folder Life Over" msgid "printer-state-reasons.folder-memory-exhausted" msgstr "Folder Memory Exhausted" msgid "printer-state-reasons.folder-missing" msgstr "Folder Missing" msgid "printer-state-reasons.folder-motor-failure" msgstr "Folder Motor Failure" msgid "printer-state-reasons.folder-near-limit" msgstr "Folder Near Limit" msgid "printer-state-reasons.folder-offline" msgstr "Folder Offline" msgid "printer-state-reasons.folder-opened" msgstr "Folder Opened" msgid "printer-state-reasons.folder-over-temperature" msgstr "Folder Over Temperature" msgid "printer-state-reasons.folder-power-saver" msgstr "Folder Power Saver" msgid "printer-state-reasons.folder-recoverable-failure" msgstr "Folder Recoverable Failure" msgid "printer-state-reasons.folder-recoverable-storage" msgstr "Folder Recoverable Storage" msgid "printer-state-reasons.folder-removed" msgstr "Folder Removed" msgid "printer-state-reasons.folder-resource-added" msgstr "Folder Resource Added" msgid "printer-state-reasons.folder-resource-removed" msgstr "Folder Resource Removed" msgid "printer-state-reasons.folder-thermistor-failure" msgstr "Folder Thermistor Failure" msgid "printer-state-reasons.folder-timing-failure" msgstr "Folder Timing Failure" msgid "printer-state-reasons.folder-turned-off" msgstr "Folder Turned Off" msgid "printer-state-reasons.folder-turned-on" msgstr "Folder Turned On" msgid "printer-state-reasons.folder-under-temperature" msgstr "Folder Under Temperature" msgid "printer-state-reasons.folder-unrecoverable-failure" msgstr "Folder Unrecoverable Failure" msgid "printer-state-reasons.folder-unrecoverable-storage-error" msgstr "Folder Unrecoverable Storage Error" msgid "printer-state-reasons.folder-warming-up" msgstr "Folder Warming Up" msgid "printer-state-reasons.fuser-over-temp" msgstr "Fuser Over Temp" msgid "printer-state-reasons.fuser-under-temp" msgstr "Fuser Under Temp" msgid "printer-state-reasons.hold-new-jobs" msgstr "Hold New Jobs" msgid "printer-state-reasons.identify-printer-requested" msgstr "Identify Printer" msgid "printer-state-reasons.imprinter-added" msgstr "Imprinter Added" msgid "printer-state-reasons.imprinter-almost-empty" msgstr "Imprinter Almost Empty" msgid "printer-state-reasons.imprinter-almost-full" msgstr "Imprinter Almost Full" msgid "printer-state-reasons.imprinter-at-limit" msgstr "Imprinter At Limit" msgid "printer-state-reasons.imprinter-closed" msgstr "Imprinter Closed" msgid "printer-state-reasons.imprinter-configuration-change" msgstr "Imprinter Configuration Change" msgid "printer-state-reasons.imprinter-cover-closed" msgstr "Imprinter Cover Closed" msgid "printer-state-reasons.imprinter-cover-open" msgstr "Imprinter Cover Open" msgid "printer-state-reasons.imprinter-empty" msgstr "Imprinter Empty" msgid "printer-state-reasons.imprinter-full" msgstr "Imprinter Full" msgid "printer-state-reasons.imprinter-interlock-closed" msgstr "Imprinter Interlock Closed" msgid "printer-state-reasons.imprinter-interlock-open" msgstr "Imprinter Interlock Open" msgid "printer-state-reasons.imprinter-jam" msgstr "Imprinter Jam" msgid "printer-state-reasons.imprinter-life-almost-over" msgstr "Imprinter Life Almost Over" msgid "printer-state-reasons.imprinter-life-over" msgstr "Imprinter Life Over" msgid "printer-state-reasons.imprinter-memory-exhausted" msgstr "Imprinter Memory Exhausted" msgid "printer-state-reasons.imprinter-missing" msgstr "Imprinter Missing" msgid "printer-state-reasons.imprinter-motor-failure" msgstr "Imprinter Motor Failure" msgid "printer-state-reasons.imprinter-near-limit" msgstr "Imprinter Near Limit" msgid "printer-state-reasons.imprinter-offline" msgstr "Imprinter Offline" msgid "printer-state-reasons.imprinter-opened" msgstr "Imprinter Opened" msgid "printer-state-reasons.imprinter-over-temperature" msgstr "Imprinter Over Temperature" msgid "printer-state-reasons.imprinter-power-saver" msgstr "Imprinter Power Saver" msgid "printer-state-reasons.imprinter-recoverable-failure" msgstr "Imprinter Recoverable Failure" msgid "printer-state-reasons.imprinter-recoverable-storage" msgstr "Imprinter Recoverable Storage" msgid "printer-state-reasons.imprinter-removed" msgstr "Imprinter Removed" msgid "printer-state-reasons.imprinter-resource-added" msgstr "Imprinter Resource Added" msgid "printer-state-reasons.imprinter-resource-removed" msgstr "Imprinter Resource Removed" msgid "printer-state-reasons.imprinter-thermistor-failure" msgstr "Imprinter Thermistor Failure" msgid "printer-state-reasons.imprinter-timing-failure" msgstr "Imprinter Timing Failure" msgid "printer-state-reasons.imprinter-turned-off" msgstr "Imprinter Turned Off" msgid "printer-state-reasons.imprinter-turned-on" msgstr "Imprinter Turned On" msgid "printer-state-reasons.imprinter-under-temperature" msgstr "Imprinter Under Temperature" msgid "printer-state-reasons.imprinter-unrecoverable-failure" msgstr "Imprinter Unrecoverable Failure" msgid "printer-state-reasons.imprinter-unrecoverable-storage-error" msgstr "Imprinter Unrecoverable Storage Error" msgid "printer-state-reasons.imprinter-warming-up" msgstr "Imprinter Warming Up" msgid "printer-state-reasons.input-cannot-feed-size-selected" msgstr "Input Cannot Feed Size Selected" msgid "printer-state-reasons.input-manual-input-request" msgstr "Input Manual Input Request" msgid "printer-state-reasons.input-media-color-change" msgstr "Input Media Color Change" msgid "printer-state-reasons.input-media-form-parts-change" msgstr "Input Media Form Parts Change" msgid "printer-state-reasons.input-media-size-change" msgstr "Input Media Size Change" msgid "printer-state-reasons.input-media-type-change" msgstr "Input Media Type Change" msgid "printer-state-reasons.input-media-weight-change" msgstr "Input Media Weight Change" msgid "printer-state-reasons.input-tray-elevation-failure" msgstr "Input Tray Elevation Failure" msgid "printer-state-reasons.input-tray-missing" msgstr "Input Tray Missing" msgid "printer-state-reasons.input-tray-position-failure" msgstr "Input Tray Position Failure" msgid "printer-state-reasons.inserter-added" msgstr "Inserter Added" msgid "printer-state-reasons.inserter-almost-empty" msgstr "Inserter Almost Empty" msgid "printer-state-reasons.inserter-almost-full" msgstr "Inserter Almost Full" msgid "printer-state-reasons.inserter-at-limit" msgstr "Inserter At Limit" msgid "printer-state-reasons.inserter-closed" msgstr "Inserter Closed" msgid "printer-state-reasons.inserter-configuration-change" msgstr "Inserter Configuration Change" msgid "printer-state-reasons.inserter-cover-closed" msgstr "Inserter Cover Closed" msgid "printer-state-reasons.inserter-cover-open" msgstr "Inserter Cover Open" msgid "printer-state-reasons.inserter-empty" msgstr "Inserter Empty" msgid "printer-state-reasons.inserter-full" msgstr "Inserter Full" msgid "printer-state-reasons.inserter-interlock-closed" msgstr "Inserter Interlock Closed" msgid "printer-state-reasons.inserter-interlock-open" msgstr "Inserter Interlock Open" msgid "printer-state-reasons.inserter-jam" msgstr "Inserter Jam" msgid "printer-state-reasons.inserter-life-almost-over" msgstr "Inserter Life Almost Over" msgid "printer-state-reasons.inserter-life-over" msgstr "Inserter Life Over" msgid "printer-state-reasons.inserter-memory-exhausted" msgstr "Inserter Memory Exhausted" msgid "printer-state-reasons.inserter-missing" msgstr "Inserter Missing" msgid "printer-state-reasons.inserter-motor-failure" msgstr "Inserter Motor Failure" msgid "printer-state-reasons.inserter-near-limit" msgstr "Inserter Near Limit" msgid "printer-state-reasons.inserter-offline" msgstr "Inserter Offline" msgid "printer-state-reasons.inserter-opened" msgstr "Inserter Opened" msgid "printer-state-reasons.inserter-over-temperature" msgstr "Inserter Over Temperature" msgid "printer-state-reasons.inserter-power-saver" msgstr "Inserter Power Saver" msgid "printer-state-reasons.inserter-recoverable-failure" msgstr "Inserter Recoverable Failure" msgid "printer-state-reasons.inserter-recoverable-storage" msgstr "Inserter Recoverable Storage" msgid "printer-state-reasons.inserter-removed" msgstr "Inserter Removed" msgid "printer-state-reasons.inserter-resource-added" msgstr "Inserter Resource Added" msgid "printer-state-reasons.inserter-resource-removed" msgstr "Inserter Resource Removed" msgid "printer-state-reasons.inserter-thermistor-failure" msgstr "Inserter Thermistor Failure" msgid "printer-state-reasons.inserter-timing-failure" msgstr "Inserter Timing Failure" msgid "printer-state-reasons.inserter-turned-off" msgstr "Inserter Turned Off" msgid "printer-state-reasons.inserter-turned-on" msgstr "Inserter Turned On" msgid "printer-state-reasons.inserter-under-temperature" msgstr "Inserter Under Temperature" msgid "printer-state-reasons.inserter-unrecoverable-failure" msgstr "Inserter Unrecoverable Failure" msgid "printer-state-reasons.inserter-unrecoverable-storage-error" msgstr "Inserter Unrecoverable Storage Error" msgid "printer-state-reasons.inserter-warming-up" msgstr "Inserter Warming Up" msgid "printer-state-reasons.interlock-closed" msgstr "Interlock Closed" msgid "printer-state-reasons.interlock-open" msgstr "Interlock Open" msgid "printer-state-reasons.interpreter-cartridge-added" msgstr "Interpreter Cartridge Added" msgid "printer-state-reasons.interpreter-cartridge-deleted" msgstr "Interpreter Cartridge Removed" msgid "printer-state-reasons.interpreter-complex-page-encountered" msgstr "Interpreter Complex Page Encountered" msgid "printer-state-reasons.interpreter-memory-decrease" msgstr "Interpreter Memory Decrease" msgid "printer-state-reasons.interpreter-memory-increase" msgstr "Interpreter Memory Increase" msgid "printer-state-reasons.interpreter-resource-added" msgstr "Interpreter Resource Added" msgid "printer-state-reasons.interpreter-resource-deleted" msgstr "Interpreter Resource Deleted" msgid "printer-state-reasons.interpreter-resource-unavailable" msgstr "Interpreter Resource Unavailable" msgid "printer-state-reasons.lamp-at-eol" msgstr "Lamp At End of Life" msgid "printer-state-reasons.lamp-failure" msgstr "Lamp Failure" msgid "printer-state-reasons.lamp-near-eol" msgstr "Lamp Near End of Life" msgid "printer-state-reasons.laser-at-eol" msgstr "Laser At End of Life" msgid "printer-state-reasons.laser-failure" msgstr "Laser Failure" msgid "printer-state-reasons.laser-near-eol" msgstr "Laser Near End of Life" msgid "printer-state-reasons.make-envelope-added" msgstr "Envelope Maker Added" msgid "printer-state-reasons.make-envelope-almost-empty" msgstr "Envelope Maker Almost Empty" msgid "printer-state-reasons.make-envelope-almost-full" msgstr "Envelope Maker Almost Full" msgid "printer-state-reasons.make-envelope-at-limit" msgstr "Envelope Maker At Limit" msgid "printer-state-reasons.make-envelope-closed" msgstr "Envelope Maker Closed" msgid "printer-state-reasons.make-envelope-configuration-change" msgstr "Envelope Maker Configuration Change" msgid "printer-state-reasons.make-envelope-cover-closed" msgstr "Envelope Maker Cover Closed" msgid "printer-state-reasons.make-envelope-cover-open" msgstr "Envelope Maker Cover Open" msgid "printer-state-reasons.make-envelope-empty" msgstr "Envelope Maker Empty" msgid "printer-state-reasons.make-envelope-full" msgstr "Envelope Maker Full" msgid "printer-state-reasons.make-envelope-interlock-closed" msgstr "Envelope Maker Interlock Closed" msgid "printer-state-reasons.make-envelope-interlock-open" msgstr "Envelope Maker Interlock Open" msgid "printer-state-reasons.make-envelope-jam" msgstr "Envelope Maker Jam" msgid "printer-state-reasons.make-envelope-life-almost-over" msgstr "Envelope Maker Life Almost Over" msgid "printer-state-reasons.make-envelope-life-over" msgstr "Envelope Maker Life Over" msgid "printer-state-reasons.make-envelope-memory-exhausted" msgstr "Envelope Maker Memory Exhausted" msgid "printer-state-reasons.make-envelope-missing" msgstr "Envelope Maker Missing" msgid "printer-state-reasons.make-envelope-motor-failure" msgstr "Envelope Maker Motor Failure" msgid "printer-state-reasons.make-envelope-near-limit" msgstr "Envelope Maker Near Limit" msgid "printer-state-reasons.make-envelope-offline" msgstr "Envelope Maker Offline" msgid "printer-state-reasons.make-envelope-opened" msgstr "Envelope Maker Opened" msgid "printer-state-reasons.make-envelope-over-temperature" msgstr "Envelope Maker Over Temperature" msgid "printer-state-reasons.make-envelope-power-saver" msgstr "Envelope Maker Power Saver" msgid "printer-state-reasons.make-envelope-recoverable-failure" msgstr "Envelope Maker Recoverable Failure" msgid "printer-state-reasons.make-envelope-recoverable-storage" msgstr "Envelope Maker Recoverable Storage" msgid "printer-state-reasons.make-envelope-removed" msgstr "Envelope Maker Removed" msgid "printer-state-reasons.make-envelope-resource-added" msgstr "Envelope Maker Resource Added" msgid "printer-state-reasons.make-envelope-resource-removed" msgstr "Envelope Maker Resource Removed" msgid "printer-state-reasons.make-envelope-thermistor-failure" msgstr "Envelope Maker Thermistor Failure" msgid "printer-state-reasons.make-envelope-timing-failure" msgstr "Envelope Maker Timing Failure" msgid "printer-state-reasons.make-envelope-turned-off" msgstr "Envelope Maker Turned Off" msgid "printer-state-reasons.make-envelope-turned-on" msgstr "Envelope Maker Turned On" msgid "printer-state-reasons.make-envelope-under-temperature" msgstr "Envelope Maker Under Temperature" msgid "printer-state-reasons.make-envelope-unrecoverable-failure" msgstr "Envelope Maker Unrecoverable Failure" msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error" msgstr "Envelope Maker Unrecoverable Storage Error" msgid "printer-state-reasons.make-envelope-warming-up" msgstr "Envelope Maker Warming Up" msgid "printer-state-reasons.marker-adjusting-print-quality" msgstr "Marker Adjusting Print Quality" msgid "printer-state-reasons.marker-developer-almost-empty" msgstr "Marker Developer Almost Empty" msgid "printer-state-reasons.marker-developer-empty" msgstr "Marker Developer Empty" msgid "printer-state-reasons.marker-fuser-thermistor-failure" msgstr "Marker Fuser Thermistor Failure" msgid "printer-state-reasons.marker-fuser-timing-failure" msgstr "Marker Fuser Timing Failure" msgid "printer-state-reasons.marker-ink-almost-empty" msgstr "Marker Ink Almost Empty" msgid "printer-state-reasons.marker-ink-empty" msgstr "Marker Ink Empty" msgid "printer-state-reasons.marker-print-ribbon-almost-empty" msgstr "Marker Print Ribbon Almost Empty" msgid "printer-state-reasons.marker-print-ribbon-empty" msgstr "Marker Print Ribbon Empty" msgid "printer-state-reasons.marker-supply-empty" msgstr "Marker Supply Empty" msgid "printer-state-reasons.marker-supply-low" msgstr "Marker Supply Low" msgid "printer-state-reasons.marker-toner-cartridge-missing" msgstr "Marker Toner Cartridge Missing" msgid "printer-state-reasons.marker-waste-almost-full" msgstr "Marker Waste Almost Full" msgid "printer-state-reasons.marker-waste-full" msgstr "Marker Waste Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full" msgstr "Marker Waste Ink Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-full" msgstr "Marker Waste Ink Receptacle Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full" msgstr "Marker Waste Toner Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-full" msgstr "Marker Waste Toner Receptacle Full" msgid "printer-state-reasons.material-empty" msgstr "Material Empty" msgid "printer-state-reasons.material-low" msgstr "Material Low" msgid "printer-state-reasons.material-needed" msgstr "Material Needed" msgid "printer-state-reasons.media-empty" msgstr "Media Empty" msgid "printer-state-reasons.media-jam" msgstr "Media Jam" msgid "printer-state-reasons.media-low" msgstr "Media Low" msgid "printer-state-reasons.media-needed" msgstr "Media Needed" msgid "printer-state-reasons.media-path-cannot-duplex-media-selected" msgstr "Media Path Cannot Do 2-Sided Printing" msgid "printer-state-reasons.media-path-media-tray-almost-full" msgstr "Media Path Media Tray Almost Full" msgid "printer-state-reasons.media-path-media-tray-full" msgstr "Media Path Media Tray Full" msgid "printer-state-reasons.media-path-media-tray-missing" msgstr "Media Path Media Tray Missing" msgid "printer-state-reasons.motor-failure" msgstr "Motor Failure" msgid "printer-state-reasons.moving-to-paused" msgstr "Moving To Paused" msgid "printer-state-reasons.none" msgstr "None" msgid "printer-state-reasons.opc-life-over" msgstr "Optical Photoconductor Life Over" msgid "printer-state-reasons.opc-near-eol" msgstr "Optical Photoconductor Near End-of-life" msgid "printer-state-reasons.other" msgstr "Other" msgid "printer-state-reasons.output-area-almost-full" msgstr "Output Area Almost Full" msgid "printer-state-reasons.output-area-full" msgstr "Output Area Full" msgid "printer-state-reasons.output-mailbox-select-failure" msgstr "Output Mailbox Select Failure" msgid "printer-state-reasons.output-tray-missing" msgstr "Output Tray Missing" msgid "printer-state-reasons.paused" msgstr "Paused" msgid "printer-state-reasons.perforater-added" msgstr "Perforater Added" msgid "printer-state-reasons.perforater-almost-empty" msgstr "Perforater Almost Empty" msgid "printer-state-reasons.perforater-almost-full" msgstr "Perforater Almost Full" msgid "printer-state-reasons.perforater-at-limit" msgstr "Perforater At Limit" msgid "printer-state-reasons.perforater-closed" msgstr "Perforater Closed" msgid "printer-state-reasons.perforater-configuration-change" msgstr "Perforater Configuration Change" msgid "printer-state-reasons.perforater-cover-closed" msgstr "Perforater Cover Closed" msgid "printer-state-reasons.perforater-cover-open" msgstr "Perforater Cover Open" msgid "printer-state-reasons.perforater-empty" msgstr "Perforater Empty" msgid "printer-state-reasons.perforater-full" msgstr "Perforater Full" msgid "printer-state-reasons.perforater-interlock-closed" msgstr "Perforater Interlock Closed" msgid "printer-state-reasons.perforater-interlock-open" msgstr "Perforater Interlock Open" msgid "printer-state-reasons.perforater-jam" msgstr "Perforater Jam" msgid "printer-state-reasons.perforater-life-almost-over" msgstr "Perforater Life Almost Over" msgid "printer-state-reasons.perforater-life-over" msgstr "Perforater Life Over" msgid "printer-state-reasons.perforater-memory-exhausted" msgstr "Perforater Memory Exhausted" msgid "printer-state-reasons.perforater-missing" msgstr "Perforater Missing" msgid "printer-state-reasons.perforater-motor-failure" msgstr "Perforater Motor Failure" msgid "printer-state-reasons.perforater-near-limit" msgstr "Perforater Near Limit" msgid "printer-state-reasons.perforater-offline" msgstr "Perforater Offline" msgid "printer-state-reasons.perforater-opened" msgstr "Perforater Opened" msgid "printer-state-reasons.perforater-over-temperature" msgstr "Perforater Over Temperature" msgid "printer-state-reasons.perforater-power-saver" msgstr "Perforater Power Saver" msgid "printer-state-reasons.perforater-recoverable-failure" msgstr "Perforater Recoverable Failure" msgid "printer-state-reasons.perforater-recoverable-storage" msgstr "Perforater Recoverable Storage" msgid "printer-state-reasons.perforater-removed" msgstr "Perforater Removed" msgid "printer-state-reasons.perforater-resource-added" msgstr "Perforater Resource Added" msgid "printer-state-reasons.perforater-resource-removed" msgstr "Perforater Resource Removed" msgid "printer-state-reasons.perforater-thermistor-failure" msgstr "Perforater Thermistor Failure" msgid "printer-state-reasons.perforater-timing-failure" msgstr "Perforater Timing Failure" msgid "printer-state-reasons.perforater-turned-off" msgstr "Perforater Turned Off" msgid "printer-state-reasons.perforater-turned-on" msgstr "Perforater Turned On" msgid "printer-state-reasons.perforater-under-temperature" msgstr "Perforater Under Temperature" msgid "printer-state-reasons.perforater-unrecoverable-failure" msgstr "Perforater Unrecoverable Failure" msgid "printer-state-reasons.perforater-unrecoverable-storage-error" msgstr "Perforater Unrecoverable Storage Error" msgid "printer-state-reasons.perforater-warming-up" msgstr "Perforater Warming Up" msgid "printer-state-reasons.power-down" msgstr "Power Down" msgid "printer-state-reasons.power-up" msgstr "Power Up" msgid "printer-state-reasons.printer-manual-reset" msgstr "Printer Reset Manually" msgid "printer-state-reasons.printer-nms-reset" msgstr "Printer Reset Remotely" msgid "printer-state-reasons.printer-ready-to-print" msgstr "Printer Ready To Print" msgid "printer-state-reasons.puncher-added" msgstr "Puncher Added" msgid "printer-state-reasons.puncher-almost-empty" msgstr "Puncher Almost Empty" msgid "printer-state-reasons.puncher-almost-full" msgstr "Puncher Almost Full" msgid "printer-state-reasons.puncher-at-limit" msgstr "Puncher At Limit" msgid "printer-state-reasons.puncher-closed" msgstr "Puncher Closed" msgid "printer-state-reasons.puncher-configuration-change" msgstr "Puncher Configuration Change" msgid "printer-state-reasons.puncher-cover-closed" msgstr "Puncher Cover Closed" msgid "printer-state-reasons.puncher-cover-open" msgstr "Puncher Cover Open" msgid "printer-state-reasons.puncher-empty" msgstr "Puncher Empty" msgid "printer-state-reasons.puncher-full" msgstr "Puncher Full" msgid "printer-state-reasons.puncher-interlock-closed" msgstr "Puncher Interlock Closed" msgid "printer-state-reasons.puncher-interlock-open" msgstr "Puncher Interlock Open" msgid "printer-state-reasons.puncher-jam" msgstr "Puncher Jam" msgid "printer-state-reasons.puncher-life-almost-over" msgstr "Puncher Life Almost Over" msgid "printer-state-reasons.puncher-life-over" msgstr "Puncher Life Over" msgid "printer-state-reasons.puncher-memory-exhausted" msgstr "Puncher Memory Exhausted" msgid "printer-state-reasons.puncher-missing" msgstr "Puncher Missing" msgid "printer-state-reasons.puncher-motor-failure" msgstr "Puncher Motor Failure" msgid "printer-state-reasons.puncher-near-limit" msgstr "Puncher Near Limit" msgid "printer-state-reasons.puncher-offline" msgstr "Puncher Offline" msgid "printer-state-reasons.puncher-opened" msgstr "Puncher Opened" msgid "printer-state-reasons.puncher-over-temperature" msgstr "Puncher Over Temperature" msgid "printer-state-reasons.puncher-power-saver" msgstr "Puncher Power Saver" msgid "printer-state-reasons.puncher-recoverable-failure" msgstr "Puncher Recoverable Failure" msgid "printer-state-reasons.puncher-recoverable-storage" msgstr "Puncher Recoverable Storage" msgid "printer-state-reasons.puncher-removed" msgstr "Puncher Removed" msgid "printer-state-reasons.puncher-resource-added" msgstr "Puncher Resource Added" msgid "printer-state-reasons.puncher-resource-removed" msgstr "Puncher Resource Removed" msgid "printer-state-reasons.puncher-thermistor-failure" msgstr "Puncher Thermistor Failure" msgid "printer-state-reasons.puncher-timing-failure" msgstr "Puncher Timing Failure" msgid "printer-state-reasons.puncher-turned-off" msgstr "Puncher Turned Off" msgid "printer-state-reasons.puncher-turned-on" msgstr "Puncher Turned On" msgid "printer-state-reasons.puncher-under-temperature" msgstr "Puncher Under Temperature" msgid "printer-state-reasons.puncher-unrecoverable-failure" msgstr "Puncher Unrecoverable Failure" msgid "printer-state-reasons.puncher-unrecoverable-storage-error" msgstr "Puncher Unrecoverable Storage Error" msgid "printer-state-reasons.puncher-warming-up" msgstr "Puncher Warming Up" msgid "printer-state-reasons.separation-cutter-added" msgstr "Separation Cutter Added" msgid "printer-state-reasons.separation-cutter-almost-empty" msgstr "Separation Cutter Almost Empty" msgid "printer-state-reasons.separation-cutter-almost-full" msgstr "Separation Cutter Almost Full" msgid "printer-state-reasons.separation-cutter-at-limit" msgstr "Separation Cutter At Limit" msgid "printer-state-reasons.separation-cutter-closed" msgstr "Separation Cutter Closed" msgid "printer-state-reasons.separation-cutter-configuration-change" msgstr "Separation Cutter Configuration Change" msgid "printer-state-reasons.separation-cutter-cover-closed" msgstr "Separation Cutter Cover Closed" msgid "printer-state-reasons.separation-cutter-cover-open" msgstr "Separation Cutter Cover Open" msgid "printer-state-reasons.separation-cutter-empty" msgstr "Separation Cutter Empty" msgid "printer-state-reasons.separation-cutter-full" msgstr "Separation Cutter Full" msgid "printer-state-reasons.separation-cutter-interlock-closed" msgstr "Separation Cutter Interlock Closed" msgid "printer-state-reasons.separation-cutter-interlock-open" msgstr "Separation Cutter Interlock Open" msgid "printer-state-reasons.separation-cutter-jam" msgstr "Separation Cutter Jam" msgid "printer-state-reasons.separation-cutter-life-almost-over" msgstr "Separation Cutter Life Almost Over" msgid "printer-state-reasons.separation-cutter-life-over" msgstr "Separation Cutter Life Over" msgid "printer-state-reasons.separation-cutter-memory-exhausted" msgstr "Separation Cutter Memory Exhausted" msgid "printer-state-reasons.separation-cutter-missing" msgstr "Separation Cutter Missing" msgid "printer-state-reasons.separation-cutter-motor-failure" msgstr "Separation Cutter Motor Failure" msgid "printer-state-reasons.separation-cutter-near-limit" msgstr "Separation Cutter Near Limit" msgid "printer-state-reasons.separation-cutter-offline" msgstr "Separation Cutter Offline" msgid "printer-state-reasons.separation-cutter-opened" msgstr "Separation Cutter Opened" msgid "printer-state-reasons.separation-cutter-over-temperature" msgstr "Separation Cutter Over Temperature" msgid "printer-state-reasons.separation-cutter-power-saver" msgstr "Separation Cutter Power Saver" msgid "printer-state-reasons.separation-cutter-recoverable-failure" msgstr "Separation Cutter Recoverable Failure" msgid "printer-state-reasons.separation-cutter-recoverable-storage" msgstr "Separation Cutter Recoverable Storage" msgid "printer-state-reasons.separation-cutter-removed" msgstr "Separation Cutter Removed" msgid "printer-state-reasons.separation-cutter-resource-added" msgstr "Separation Cutter Resource Added" msgid "printer-state-reasons.separation-cutter-resource-removed" msgstr "Separation Cutter Resource Removed" msgid "printer-state-reasons.separation-cutter-thermistor-failure" msgstr "Separation Cutter Thermistor Failure" msgid "printer-state-reasons.separation-cutter-timing-failure" msgstr "Separation Cutter Timing Failure" msgid "printer-state-reasons.separation-cutter-turned-off" msgstr "Separation Cutter Turned Off" msgid "printer-state-reasons.separation-cutter-turned-on" msgstr "Separation Cutter Turned On" msgid "printer-state-reasons.separation-cutter-under-temperature" msgstr "Separation Cutter Under Temperature" msgid "printer-state-reasons.separation-cutter-unrecoverable-failure" msgstr "Separation Cutter Unrecoverable Failure" msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error" msgstr "Separation Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.separation-cutter-warming-up" msgstr "Separation Cutter Warming Up" msgid "printer-state-reasons.sheet-rotator-added" msgstr "Sheet Rotator Added" msgid "printer-state-reasons.sheet-rotator-almost-empty" msgstr "Sheet Rotator Almost Empty" msgid "printer-state-reasons.sheet-rotator-almost-full" msgstr "Sheet Rotator Almost Full" msgid "printer-state-reasons.sheet-rotator-at-limit" msgstr "Sheet Rotator At Limit" msgid "printer-state-reasons.sheet-rotator-closed" msgstr "Sheet Rotator Closed" msgid "printer-state-reasons.sheet-rotator-configuration-change" msgstr "Sheet Rotator Configuration Change" msgid "printer-state-reasons.sheet-rotator-cover-closed" msgstr "Sheet Rotator Cover Closed" msgid "printer-state-reasons.sheet-rotator-cover-open" msgstr "Sheet Rotator Cover Open" msgid "printer-state-reasons.sheet-rotator-empty" msgstr "Sheet Rotator Empty" msgid "printer-state-reasons.sheet-rotator-full" msgstr "Sheet Rotator Full" msgid "printer-state-reasons.sheet-rotator-interlock-closed" msgstr "Sheet Rotator Interlock Closed" msgid "printer-state-reasons.sheet-rotator-interlock-open" msgstr "Sheet Rotator Interlock Open" msgid "printer-state-reasons.sheet-rotator-jam" msgstr "Sheet Rotator Jam" msgid "printer-state-reasons.sheet-rotator-life-almost-over" msgstr "Sheet Rotator Life Almost Over" msgid "printer-state-reasons.sheet-rotator-life-over" msgstr "Sheet Rotator Life Over" msgid "printer-state-reasons.sheet-rotator-memory-exhausted" msgstr "Sheet Rotator Memory Exhausted" msgid "printer-state-reasons.sheet-rotator-missing" msgstr "Sheet Rotator Missing" msgid "printer-state-reasons.sheet-rotator-motor-failure" msgstr "Sheet Rotator Motor Failure" msgid "printer-state-reasons.sheet-rotator-near-limit" msgstr "Sheet Rotator Near Limit" msgid "printer-state-reasons.sheet-rotator-offline" msgstr "Sheet Rotator Offline" msgid "printer-state-reasons.sheet-rotator-opened" msgstr "Sheet Rotator Opened" msgid "printer-state-reasons.sheet-rotator-over-temperature" msgstr "Sheet Rotator Over Temperature" msgid "printer-state-reasons.sheet-rotator-power-saver" msgstr "Sheet Rotator Power Saver" msgid "printer-state-reasons.sheet-rotator-recoverable-failure" msgstr "Sheet Rotator Recoverable Failure" msgid "printer-state-reasons.sheet-rotator-recoverable-storage" msgstr "Sheet Rotator Recoverable Storage" msgid "printer-state-reasons.sheet-rotator-removed" msgstr "Sheet Rotator Removed" msgid "printer-state-reasons.sheet-rotator-resource-added" msgstr "Sheet Rotator Resource Added" msgid "printer-state-reasons.sheet-rotator-resource-removed" msgstr "Sheet Rotator Resource Removed" msgid "printer-state-reasons.sheet-rotator-thermistor-failure" msgstr "Sheet Rotator Thermistor Failure" msgid "printer-state-reasons.sheet-rotator-timing-failure" msgstr "Sheet Rotator Timing Failure" msgid "printer-state-reasons.sheet-rotator-turned-off" msgstr "Sheet Rotator Turned Off" msgid "printer-state-reasons.sheet-rotator-turned-on" msgstr "Sheet Rotator Turned On" msgid "printer-state-reasons.sheet-rotator-under-temperature" msgstr "Sheet Rotator Under Temperature" msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure" msgstr "Sheet Rotator Unrecoverable Failure" msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" msgstr "Sheet Rotator Unrecoverable Storage Error" msgid "printer-state-reasons.sheet-rotator-warming-up" msgstr "Sheet Rotator Warming Up" msgid "printer-state-reasons.shutdown" msgstr "Shutdown" msgid "printer-state-reasons.slitter-added" msgstr "Slitter Added" msgid "printer-state-reasons.slitter-almost-empty" msgstr "Slitter Almost Empty" msgid "printer-state-reasons.slitter-almost-full" msgstr "Slitter Almost Full" msgid "printer-state-reasons.slitter-at-limit" msgstr "Slitter At Limit" msgid "printer-state-reasons.slitter-closed" msgstr "Slitter Closed" msgid "printer-state-reasons.slitter-configuration-change" msgstr "Slitter Configuration Change" msgid "printer-state-reasons.slitter-cover-closed" msgstr "Slitter Cover Closed" msgid "printer-state-reasons.slitter-cover-open" msgstr "Slitter Cover Open" msgid "printer-state-reasons.slitter-empty" msgstr "Slitter Empty" msgid "printer-state-reasons.slitter-full" msgstr "Slitter Full" msgid "printer-state-reasons.slitter-interlock-closed" msgstr "Slitter Interlock Closed" msgid "printer-state-reasons.slitter-interlock-open" msgstr "Slitter Interlock Open" msgid "printer-state-reasons.slitter-jam" msgstr "Slitter Jam" msgid "printer-state-reasons.slitter-life-almost-over" msgstr "Slitter Life Almost Over" msgid "printer-state-reasons.slitter-life-over" msgstr "Slitter Life Over" msgid "printer-state-reasons.slitter-memory-exhausted" msgstr "Slitter Memory Exhausted" msgid "printer-state-reasons.slitter-missing" msgstr "Slitter Missing" msgid "printer-state-reasons.slitter-motor-failure" msgstr "Slitter Motor Failure" msgid "printer-state-reasons.slitter-near-limit" msgstr "Slitter Near Limit" msgid "printer-state-reasons.slitter-offline" msgstr "Slitter Offline" msgid "printer-state-reasons.slitter-opened" msgstr "Slitter Opened" msgid "printer-state-reasons.slitter-over-temperature" msgstr "Slitter Over Temperature" msgid "printer-state-reasons.slitter-power-saver" msgstr "Slitter Power Saver" msgid "printer-state-reasons.slitter-recoverable-failure" msgstr "Slitter Recoverable Failure" msgid "printer-state-reasons.slitter-recoverable-storage" msgstr "Slitter Recoverable Storage" msgid "printer-state-reasons.slitter-removed" msgstr "Slitter Removed" msgid "printer-state-reasons.slitter-resource-added" msgstr "Slitter Resource Added" msgid "printer-state-reasons.slitter-resource-removed" msgstr "Slitter Resource Removed" msgid "printer-state-reasons.slitter-thermistor-failure" msgstr "Slitter Thermistor Failure" msgid "printer-state-reasons.slitter-timing-failure" msgstr "Slitter Timing Failure" msgid "printer-state-reasons.slitter-turned-off" msgstr "Slitter Turned Off" msgid "printer-state-reasons.slitter-turned-on" msgstr "Slitter Turned On" msgid "printer-state-reasons.slitter-under-temperature" msgstr "Slitter Under Temperature" msgid "printer-state-reasons.slitter-unrecoverable-failure" msgstr "Slitter Unrecoverable Failure" msgid "printer-state-reasons.slitter-unrecoverable-storage-error" msgstr "Slitter Unrecoverable Storage Error" msgid "printer-state-reasons.slitter-warming-up" msgstr "Slitter Warming Up" msgid "printer-state-reasons.spool-area-full" msgstr "Spool Area Full" msgid "printer-state-reasons.stacker-added" msgstr "Stacker Added" msgid "printer-state-reasons.stacker-almost-empty" msgstr "Stacker Almost Empty" msgid "printer-state-reasons.stacker-almost-full" msgstr "Stacker Almost Full" msgid "printer-state-reasons.stacker-at-limit" msgstr "Stacker At Limit" msgid "printer-state-reasons.stacker-closed" msgstr "Stacker Closed" msgid "printer-state-reasons.stacker-configuration-change" msgstr "Stacker Configuration Change" msgid "printer-state-reasons.stacker-cover-closed" msgstr "Stacker Cover Closed" msgid "printer-state-reasons.stacker-cover-open" msgstr "Stacker Cover Open" msgid "printer-state-reasons.stacker-empty" msgstr "Stacker Empty" msgid "printer-state-reasons.stacker-full" msgstr "Stacker Full" msgid "printer-state-reasons.stacker-interlock-closed" msgstr "Stacker Interlock Closed" msgid "printer-state-reasons.stacker-interlock-open" msgstr "Stacker Interlock Open" msgid "printer-state-reasons.stacker-jam" msgstr "Stacker Jam" msgid "printer-state-reasons.stacker-life-almost-over" msgstr "Stacker Life Almost Over" msgid "printer-state-reasons.stacker-life-over" msgstr "Stacker Life Over" msgid "printer-state-reasons.stacker-memory-exhausted" msgstr "Stacker Memory Exhausted" msgid "printer-state-reasons.stacker-missing" msgstr "Stacker Missing" msgid "printer-state-reasons.stacker-motor-failure" msgstr "Stacker Motor Failure" msgid "printer-state-reasons.stacker-near-limit" msgstr "Stacker Near Limit" msgid "printer-state-reasons.stacker-offline" msgstr "Stacker Offline" msgid "printer-state-reasons.stacker-opened" msgstr "Stacker Opened" msgid "printer-state-reasons.stacker-over-temperature" msgstr "Stacker Over Temperature" msgid "printer-state-reasons.stacker-power-saver" msgstr "Stacker Power Saver" msgid "printer-state-reasons.stacker-recoverable-failure" msgstr "Stacker Recoverable Failure" msgid "printer-state-reasons.stacker-recoverable-storage" msgstr "Stacker Recoverable Storage" msgid "printer-state-reasons.stacker-removed" msgstr "Stacker Removed" msgid "printer-state-reasons.stacker-resource-added" msgstr "Stacker Resource Added" msgid "printer-state-reasons.stacker-resource-removed" msgstr "Stacker Resource Removed" msgid "printer-state-reasons.stacker-thermistor-failure" msgstr "Stacker Thermistor Failure" msgid "printer-state-reasons.stacker-timing-failure" msgstr "Stacker Timing Failure" msgid "printer-state-reasons.stacker-turned-off" msgstr "Stacker Turned Off" msgid "printer-state-reasons.stacker-turned-on" msgstr "Stacker Turned On" msgid "printer-state-reasons.stacker-under-temperature" msgstr "Stacker Under Temperature" msgid "printer-state-reasons.stacker-unrecoverable-failure" msgstr "Stacker Unrecoverable Failure" msgid "printer-state-reasons.stacker-unrecoverable-storage-error" msgstr "Stacker Unrecoverable Storage Error" msgid "printer-state-reasons.stacker-warming-up" msgstr "Stacker Warming Up" msgid "printer-state-reasons.stapler-added" msgstr "Stapler Added" msgid "printer-state-reasons.stapler-almost-empty" msgstr "Stapler Almost Empty" msgid "printer-state-reasons.stapler-almost-full" msgstr "Stapler Almost Full" msgid "printer-state-reasons.stapler-at-limit" msgstr "Stapler At Limit" msgid "printer-state-reasons.stapler-closed" msgstr "Stapler Closed" msgid "printer-state-reasons.stapler-configuration-change" msgstr "Stapler Configuration Change" msgid "printer-state-reasons.stapler-cover-closed" msgstr "Stapler Cover Closed" msgid "printer-state-reasons.stapler-cover-open" msgstr "Stapler Cover Open" msgid "printer-state-reasons.stapler-empty" msgstr "Stapler Empty" msgid "printer-state-reasons.stapler-full" msgstr "Stapler Full" msgid "printer-state-reasons.stapler-interlock-closed" msgstr "Stapler Interlock Closed" msgid "printer-state-reasons.stapler-interlock-open" msgstr "Stapler Interlock Open" msgid "printer-state-reasons.stapler-jam" msgstr "Stapler Jam" msgid "printer-state-reasons.stapler-life-almost-over" msgstr "Stapler Life Almost Over" msgid "printer-state-reasons.stapler-life-over" msgstr "Stapler Life Over" msgid "printer-state-reasons.stapler-memory-exhausted" msgstr "Stapler Memory Exhausted" msgid "printer-state-reasons.stapler-missing" msgstr "Stapler Missing" msgid "printer-state-reasons.stapler-motor-failure" msgstr "Stapler Motor Failure" msgid "printer-state-reasons.stapler-near-limit" msgstr "Stapler Near Limit" msgid "printer-state-reasons.stapler-offline" msgstr "Stapler Offline" msgid "printer-state-reasons.stapler-opened" msgstr "Stapler Opened" msgid "printer-state-reasons.stapler-over-temperature" msgstr "Stapler Over Temperature" msgid "printer-state-reasons.stapler-power-saver" msgstr "Stapler Power Saver" msgid "printer-state-reasons.stapler-recoverable-failure" msgstr "Stapler Recoverable Failure" msgid "printer-state-reasons.stapler-recoverable-storage" msgstr "Stapler Recoverable Storage" msgid "printer-state-reasons.stapler-removed" msgstr "Stapler Removed" msgid "printer-state-reasons.stapler-resource-added" msgstr "Stapler Resource Added" msgid "printer-state-reasons.stapler-resource-removed" msgstr "Stapler Resource Removed" msgid "printer-state-reasons.stapler-thermistor-failure" msgstr "Stapler Thermistor Failure" msgid "printer-state-reasons.stapler-timing-failure" msgstr "Stapler Timing Failure" msgid "printer-state-reasons.stapler-turned-off" msgstr "Stapler Turned Off" msgid "printer-state-reasons.stapler-turned-on" msgstr "Stapler Turned On" msgid "printer-state-reasons.stapler-under-temperature" msgstr "Stapler Under Temperature" msgid "printer-state-reasons.stapler-unrecoverable-failure" msgstr "Stapler Unrecoverable Failure" msgid "printer-state-reasons.stapler-unrecoverable-storage-error" msgstr "Stapler Unrecoverable Storage Error" msgid "printer-state-reasons.stapler-warming-up" msgstr "Stapler Warming Up" msgid "printer-state-reasons.stitcher-added" msgstr "Stitcher Added" msgid "printer-state-reasons.stitcher-almost-empty" msgstr "Stitcher Almost Empty" msgid "printer-state-reasons.stitcher-almost-full" msgstr "Stitcher Almost Full" msgid "printer-state-reasons.stitcher-at-limit" msgstr "Stitcher At Limit" msgid "printer-state-reasons.stitcher-closed" msgstr "Stitcher Closed" msgid "printer-state-reasons.stitcher-configuration-change" msgstr "Stitcher Configuration Change" msgid "printer-state-reasons.stitcher-cover-closed" msgstr "Stitcher Cover Closed" msgid "printer-state-reasons.stitcher-cover-open" msgstr "Stitcher Cover Open" msgid "printer-state-reasons.stitcher-empty" msgstr "Stitcher Empty" msgid "printer-state-reasons.stitcher-full" msgstr "Stitcher Full" msgid "printer-state-reasons.stitcher-interlock-closed" msgstr "Stitcher Interlock Closed" msgid "printer-state-reasons.stitcher-interlock-open" msgstr "Stitcher Interlock Open" msgid "printer-state-reasons.stitcher-jam" msgstr "Stitcher Jam" msgid "printer-state-reasons.stitcher-life-almost-over" msgstr "Stitcher Life Almost Over" msgid "printer-state-reasons.stitcher-life-over" msgstr "Stitcher Life Over" msgid "printer-state-reasons.stitcher-memory-exhausted" msgstr "Stitcher Memory Exhausted" msgid "printer-state-reasons.stitcher-missing" msgstr "Stitcher Missing" msgid "printer-state-reasons.stitcher-motor-failure" msgstr "Stitcher Motor Failure" msgid "printer-state-reasons.stitcher-near-limit" msgstr "Stitcher Near Limit" msgid "printer-state-reasons.stitcher-offline" msgstr "Stitcher Offline" msgid "printer-state-reasons.stitcher-opened" msgstr "Stitcher Opened" msgid "printer-state-reasons.stitcher-over-temperature" msgstr "Stitcher Over Temperature" msgid "printer-state-reasons.stitcher-power-saver" msgstr "Stitcher Power Saver" msgid "printer-state-reasons.stitcher-recoverable-failure" msgstr "Stitcher Recoverable Failure" msgid "printer-state-reasons.stitcher-recoverable-storage" msgstr "Stitcher Recoverable Storage" msgid "printer-state-reasons.stitcher-removed" msgstr "Stitcher Removed" msgid "printer-state-reasons.stitcher-resource-added" msgstr "Stitcher Resource Added" msgid "printer-state-reasons.stitcher-resource-removed" msgstr "Stitcher Resource Removed" msgid "printer-state-reasons.stitcher-thermistor-failure" msgstr "Stitcher Thermistor Failure" msgid "printer-state-reasons.stitcher-timing-failure" msgstr "Stitcher Timing Failure" msgid "printer-state-reasons.stitcher-turned-off" msgstr "Stitcher Turned Off" msgid "printer-state-reasons.stitcher-turned-on" msgstr "Stitcher Turned On" msgid "printer-state-reasons.stitcher-under-temperature" msgstr "Stitcher Under Temperature" msgid "printer-state-reasons.stitcher-unrecoverable-failure" msgstr "Stitcher Unrecoverable Failure" msgid "printer-state-reasons.stitcher-unrecoverable-storage-error" msgstr "Stitcher Unrecoverable Storage Error" msgid "printer-state-reasons.stitcher-warming-up" msgstr "Stitcher Warming Up" msgid "printer-state-reasons.stopped-partly" msgstr "Stopped Partly" msgid "printer-state-reasons.stopping" msgstr "Stopping" msgid "printer-state-reasons.subunit-added" msgstr "Subunit Added" msgid "printer-state-reasons.subunit-almost-empty" msgstr "Subunit Almost Empty" msgid "printer-state-reasons.subunit-almost-full" msgstr "Subunit Almost Full" msgid "printer-state-reasons.subunit-at-limit" msgstr "Subunit At Limit" msgid "printer-state-reasons.subunit-closed" msgstr "Subunit Closed" msgid "printer-state-reasons.subunit-empty" msgstr "Subunit Empty" msgid "printer-state-reasons.subunit-full" msgstr "Subunit Full" msgid "printer-state-reasons.subunit-life-almost-over" msgstr "Subunit Life Almost Over" msgid "printer-state-reasons.subunit-life-over" msgstr "Subunit Life Over" msgid "printer-state-reasons.subunit-memory-exhausted" msgstr "Subunit Memory Exhausted" msgid "printer-state-reasons.subunit-missing" msgstr "Subunit Missing" msgid "printer-state-reasons.subunit-motor-failure" msgstr "Subunit Motor Failure" msgid "printer-state-reasons.subunit-near-limit" msgstr "Subunit Near Limit" msgid "printer-state-reasons.subunit-offline" msgstr "Subunit Offline" msgid "printer-state-reasons.subunit-opened" msgstr "Subunit Opened" msgid "printer-state-reasons.subunit-over-temperature" msgstr "Subunit Over Temperature" msgid "printer-state-reasons.subunit-power-saver" msgstr "Subunit Power Saver" msgid "printer-state-reasons.subunit-recoverable-failure" msgstr "Subunit Recoverable Failure" msgid "printer-state-reasons.subunit-recoverable-storage" msgstr "Subunit Recoverable Storage" msgid "printer-state-reasons.subunit-removed" msgstr "Subunit Removed" msgid "printer-state-reasons.subunit-resource-added" msgstr "Subunit Resource Added" msgid "printer-state-reasons.subunit-resource-removed" msgstr "Subunit Resource Removed" msgid "printer-state-reasons.subunit-thermistor-failure" msgstr "Subunit Thermistor Failure" msgid "printer-state-reasons.subunit-timing-Failure" msgstr "Subunit Timing Failure" msgid "printer-state-reasons.subunit-turned-off" msgstr "Subunit Turned Off" msgid "printer-state-reasons.subunit-turned-on" msgstr "Subunit Turned On" msgid "printer-state-reasons.subunit-under-temperature" msgstr "Subunit Under Temperature" msgid "printer-state-reasons.subunit-unrecoverable-failure" msgstr "Subunit Unrecoverable Failure" msgid "printer-state-reasons.subunit-unrecoverable-storage" msgstr "Subunit Unrecoverable Storage" msgid "printer-state-reasons.subunit-warming-up" msgstr "Subunit Warming Up" msgid "printer-state-reasons.timed-out" msgstr "Timed Out" msgid "printer-state-reasons.toner-empty" msgstr "Toner Empty" msgid "printer-state-reasons.toner-low" msgstr "Toner Low" msgid "printer-state-reasons.trimmer-added" msgstr "Trimmer Added" msgid "printer-state-reasons.trimmer-almost-empty" msgstr "Trimmer Almost Empty" msgid "printer-state-reasons.trimmer-almost-full" msgstr "Trimmer Almost Full" msgid "printer-state-reasons.trimmer-at-limit" msgstr "Trimmer At Limit" msgid "printer-state-reasons.trimmer-closed" msgstr "Trimmer Closed" msgid "printer-state-reasons.trimmer-configuration-change" msgstr "Trimmer Configuration Change" msgid "printer-state-reasons.trimmer-cover-closed" msgstr "Trimmer Cover Closed" msgid "printer-state-reasons.trimmer-cover-open" msgstr "Trimmer Cover Open" msgid "printer-state-reasons.trimmer-empty" msgstr "Trimmer Empty" msgid "printer-state-reasons.trimmer-full" msgstr "Trimmer Full" msgid "printer-state-reasons.trimmer-interlock-closed" msgstr "Trimmer Interlock Closed" msgid "printer-state-reasons.trimmer-interlock-open" msgstr "Trimmer Interlock Open" msgid "printer-state-reasons.trimmer-jam" msgstr "Trimmer Jam" msgid "printer-state-reasons.trimmer-life-almost-over" msgstr "Trimmer Life Almost Over" msgid "printer-state-reasons.trimmer-life-over" msgstr "Trimmer Life Over" msgid "printer-state-reasons.trimmer-memory-exhausted" msgstr "Trimmer Memory Exhausted" msgid "printer-state-reasons.trimmer-missing" msgstr "Trimmer Missing" msgid "printer-state-reasons.trimmer-motor-failure" msgstr "Trimmer Motor Failure" msgid "printer-state-reasons.trimmer-near-limit" msgstr "Trimmer Near Limit" msgid "printer-state-reasons.trimmer-offline" msgstr "Trimmer Offline" msgid "printer-state-reasons.trimmer-opened" msgstr "Trimmer Opened" msgid "printer-state-reasons.trimmer-over-temperature" msgstr "Trimmer Over Temperature" msgid "printer-state-reasons.trimmer-power-saver" msgstr "Trimmer Power Saver" msgid "printer-state-reasons.trimmer-recoverable-failure" msgstr "Trimmer Recoverable Failure" msgid "printer-state-reasons.trimmer-recoverable-storage" msgstr "Trimmer Recoverable Storage" msgid "printer-state-reasons.trimmer-removed" msgstr "Trimmer Removed" msgid "printer-state-reasons.trimmer-resource-added" msgstr "Trimmer Resource Added" msgid "printer-state-reasons.trimmer-resource-removed" msgstr "Trimmer Resource Removed" msgid "printer-state-reasons.trimmer-thermistor-failure" msgstr "Trimmer Thermistor Failure" msgid "printer-state-reasons.trimmer-timing-failure" msgstr "Trimmer Timing Failure" msgid "printer-state-reasons.trimmer-turned-off" msgstr "Trimmer Turned Off" msgid "printer-state-reasons.trimmer-turned-on" msgstr "Trimmer Turned On" msgid "printer-state-reasons.trimmer-under-temperature" msgstr "Trimmer Under Temperature" msgid "printer-state-reasons.trimmer-unrecoverable-failure" msgstr "Trimmer Unrecoverable Failure" msgid "printer-state-reasons.trimmer-unrecoverable-storage-error" msgstr "Trimmer Unrecoverable Storage Error" msgid "printer-state-reasons.trimmer-warming-up" msgstr "Trimmer Warming Up" msgid "printer-state-reasons.unknown" msgstr "Unknown" msgid "printer-state-reasons.wrapper-added" msgstr "Wrapper Added" msgid "printer-state-reasons.wrapper-almost-empty" msgstr "Wrapper Almost Empty" msgid "printer-state-reasons.wrapper-almost-full" msgstr "Wrapper Almost Full" msgid "printer-state-reasons.wrapper-at-limit" msgstr "Wrapper At Limit" msgid "printer-state-reasons.wrapper-closed" msgstr "Wrapper Closed" msgid "printer-state-reasons.wrapper-configuration-change" msgstr "Wrapper Configuration Change" msgid "printer-state-reasons.wrapper-cover-closed" msgstr "Wrapper Cover Closed" msgid "printer-state-reasons.wrapper-cover-open" msgstr "Wrapper Cover Open" msgid "printer-state-reasons.wrapper-empty" msgstr "Wrapper Empty" msgid "printer-state-reasons.wrapper-full" msgstr "Wrapper Full" msgid "printer-state-reasons.wrapper-interlock-closed" msgstr "Wrapper Interlock Closed" msgid "printer-state-reasons.wrapper-interlock-open" msgstr "Wrapper Interlock Open" msgid "printer-state-reasons.wrapper-jam" msgstr "Wrapper Jam" msgid "printer-state-reasons.wrapper-life-almost-over" msgstr "Wrapper Life Almost Over" msgid "printer-state-reasons.wrapper-life-over" msgstr "Wrapper Life Over" msgid "printer-state-reasons.wrapper-memory-exhausted" msgstr "Wrapper Memory Exhausted" msgid "printer-state-reasons.wrapper-missing" msgstr "Wrapper Missing" msgid "printer-state-reasons.wrapper-motor-failure" msgstr "Wrapper Motor Failure" msgid "printer-state-reasons.wrapper-near-limit" msgstr "Wrapper Near Limit" msgid "printer-state-reasons.wrapper-offline" msgstr "Wrapper Offline" msgid "printer-state-reasons.wrapper-opened" msgstr "Wrapper Opened" msgid "printer-state-reasons.wrapper-over-temperature" msgstr "Wrapper Over Temperature" msgid "printer-state-reasons.wrapper-power-saver" msgstr "Wrapper Power Saver" msgid "printer-state-reasons.wrapper-recoverable-failure" msgstr "Wrapper Recoverable Failure" msgid "printer-state-reasons.wrapper-recoverable-storage" msgstr "Wrapper Recoverable Storage" msgid "printer-state-reasons.wrapper-removed" msgstr "Wrapper Removed" msgid "printer-state-reasons.wrapper-resource-added" msgstr "Wrapper Resource Added" msgid "printer-state-reasons.wrapper-resource-removed" msgstr "Wrapper Resource Removed" msgid "printer-state-reasons.wrapper-thermistor-failure" msgstr "Wrapper Thermistor Failure" msgid "printer-state-reasons.wrapper-timing-failure" msgstr "Wrapper Timing Failure" msgid "printer-state-reasons.wrapper-turned-off" msgstr "Wrapper Turned Off" msgid "printer-state-reasons.wrapper-turned-on" msgstr "Wrapper Turned On" msgid "printer-state-reasons.wrapper-under-temperature" msgstr "Wrapper Under Temperature" msgid "printer-state-reasons.wrapper-unrecoverable-failure" msgstr "Wrapper Unrecoverable Failure" msgid "printer-state-reasons.wrapper-unrecoverable-storage-error" msgstr "Wrapper Unrecoverable Storage Error" msgid "printer-state-reasons.wrapper-warming-up" msgstr "Wrapper Warming Up" msgid "printer-state.3" msgstr "Idle" msgid "printer-state.4" msgstr "Processing" msgid "printer-state.5" msgstr "Stopped" msgid "printer-up-time" msgstr "Printer Uptime" msgid "proof-print" msgstr "Proof Print" msgid "proof-print-copies" msgstr "Proof Print Copies" msgid "punching" msgstr "Punching" msgid "punching-locations" msgstr "Punching Locations" msgid "punching-offset" msgstr "Punching Offset" msgid "punching-reference-edge" msgstr "Punch Edge" msgid "punching-reference-edge.bottom" msgstr "Bottom" msgid "punching-reference-edge.left" msgstr "Left" msgid "punching-reference-edge.right" msgstr "Right" msgid "punching-reference-edge.top" msgstr "Top" msgid "requested-attributes" msgstr "Requested Attributes" msgid "retry-interval" msgstr "Retry Interval" msgid "retry-time-out" msgstr "Retry Timeout" msgid "save-disposition" msgstr "Save Disposition" msgid "save-disposition.none" msgstr "None" msgid "save-disposition.print-save" msgstr "Print and Save" msgid "save-disposition.save-only" msgstr "Save Only" msgid "save-document-format" msgstr "Save Document Format" msgid "save-info" msgstr "Save Info" msgid "save-location" msgstr "Save Location" msgid "save-name" msgstr "Save Name" msgid "separator-sheets" msgstr "Separator Sheets" msgid "separator-sheets-type" msgstr "Type of Separator Sheets" msgid "separator-sheets-type.both-sheets" msgstr "Start and End Sheets" msgid "separator-sheets-type.end-sheet" msgstr "End Sheet" msgid "separator-sheets-type.none" msgstr "None" msgid "separator-sheets-type.slip-sheets" msgstr "Slip Sheets" msgid "separator-sheets-type.start-sheet" msgstr "Start Sheet" msgid "sheet-collate" msgstr "Collate Copies" msgid "sheet-collate.collated" msgstr "Yes" msgid "sheet-collate.uncollated" msgstr "No" msgid "sides" msgstr "2-Sided Printing" msgid "sides.one-sided" msgstr "Off" msgid "sides.two-sided-long-edge" msgstr "On (Portrait)" msgid "sides.two-sided-short-edge" msgstr "On (Landscape)" msgid "status-message" msgstr "Status Message" msgid "stitching" msgstr "Staple" msgid "stitching-angle" msgstr "Stitching Angle" msgid "stitching-locations" msgstr "Stitching Locations" msgid "stitching-method" msgstr "Staple Method" msgid "stitching-method.auto" msgstr "Automatic" msgid "stitching-method.crimp" msgstr "Crimp" msgid "stitching-method.wire" msgstr "Wire" msgid "stitching-offset" msgstr "Stitching Offset" msgid "stitching-reference-edge" msgstr "Staple Edge" msgid "stitching-reference-edge.bottom" msgstr "Bottom" msgid "stitching-reference-edge.left" msgstr "Left" msgid "stitching-reference-edge.right" msgstr "Right" msgid "stitching-reference-edge.top" msgstr "Top" msgid "subject" msgstr "Subject" msgid "t33-subaddress" msgstr "T33 Subaddress" msgid "to-name" msgstr "To Name" msgid "transmission-status" msgstr "Transmission Status" msgid "transmission-status.3" msgstr "Pending" msgid "transmission-status.4" msgstr "Pending Retry" msgid "transmission-status.5" msgstr "Processing" msgid "transmission-status.7" msgstr "Canceled" msgid "transmission-status.8" msgstr "Aborted" msgid "transmission-status.9" msgstr "Completed" msgid "trimming" msgstr "Cut" msgid "trimming-offset" msgstr "Cut Position" msgid "trimming-reference-edge" msgstr "Cut Edge" msgid "trimming-reference-edge.bottom" msgstr "Bottom" msgid "trimming-reference-edge.left" msgstr "Left" msgid "trimming-reference-edge.right" msgstr "Right" msgid "trimming-reference-edge.top" msgstr "Top" msgid "trimming-type" msgstr "Type of Cut" msgid "trimming-type.draw-line" msgstr "Draw Line" msgid "trimming-type.full" msgstr "Full" msgid "trimming-type.partial" msgstr "Partial" msgid "trimming-type.perforate" msgstr "Perforate" msgid "trimming-type.score" msgstr "Score" msgid "trimming-type.tab" msgstr "Tab" msgid "trimming-when" msgstr "Cut After" msgid "trimming-when.after-documents" msgstr "Every Document" msgid "trimming-when.after-job" msgstr "Job" msgid "trimming-when.after-sets" msgstr "Every Set" msgid "trimming-when.after-sheets" msgstr "Every Page" msgid "x-accuracy" msgstr "X Accuracy" msgid "x-dimension" msgstr "X Dimension" msgid "x-offset" msgstr "X Offset" msgid "x-origin" msgstr "X Origin" msgid "y-accuracy" msgstr "Y Accuracy" msgid "y-dimension" msgstr "Y Dimension" msgid "y-offset" msgstr "Y Offset" msgid "y-origin" msgstr "Y Origin" msgid "z-accuracy" msgstr "Z Accuracy" msgid "z-dimension" msgstr "Z Dimension" msgid "z-offset" msgstr "Z Offset" cups-2.2.7/locale/cups.header000664 000765 000024 00000001374 13255074424 016543 0ustar00msweetstaff000000 000000 # # Message catalog template for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 2005-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # # Notes for Translators: # # The "checkpo" program located in the "locale" source directory can be used # to verify that your translations do not introduce formatting errors or other # problems. Run with: # # cd locale # ./checkpo cups_LL.po # # where "LL" is your locale. # cups-2.2.7/locale/cups.pot000664 000765 000024 00001132676 13255074424 016130 0ustar00msweetstaff000000 000000 # # Message catalog template for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 2005-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # # Notes for Translators: # # The "checkpo" program located in the "locale" source directory can be used # to verify that your translations do not introduce formatting errors or other # problems. Run with: # # cd locale # ./checkpo cups_LL.po # # where "LL" is your locale. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: CUPS 2.2.7\n" "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n" "POT-Creation-Date: 2018-03-19 18:36-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: systemv/lpstat.c:1896 systemv/lpstat.c:2015 msgid "\t\t(all)" msgstr "" #: systemv/lpstat.c:1899 systemv/lpstat.c:1902 systemv/lpstat.c:2018 #: systemv/lpstat.c:2021 msgid "\t\t(none)" msgstr "" #: berkeley/lpc.c:424 #, c-format msgid "\t%d entries" msgstr "" #: systemv/lpstat.c:816 systemv/lpstat.c:832 #, c-format msgid "\t%s" msgstr "" #: systemv/lpstat.c:1877 systemv/lpstat.c:1996 msgid "\tAfter fault: continue" msgstr "" #: systemv/lpstat.c:1504 systemv/lpstat.c:1850 systemv/lpstat.c:1970 #, c-format msgid "\tAlerts: %s" msgstr "" #: systemv/lpstat.c:1900 systemv/lpstat.c:2019 msgid "\tBanner required" msgstr "" #: systemv/lpstat.c:1901 systemv/lpstat.c:2020 msgid "\tCharset sets:" msgstr "" #: systemv/lpstat.c:1869 systemv/lpstat.c:1988 msgid "\tConnection: direct" msgstr "" #: systemv/lpstat.c:1860 systemv/lpstat.c:1980 msgid "\tConnection: remote" msgstr "" #: systemv/lpstat.c:1826 systemv/lpstat.c:1946 msgid "\tContent types: any" msgstr "" #: systemv/lpstat.c:1904 systemv/lpstat.c:2023 msgid "\tDefault page size:" msgstr "" #: systemv/lpstat.c:1903 systemv/lpstat.c:2022 msgid "\tDefault pitch:" msgstr "" #: systemv/lpstat.c:1905 systemv/lpstat.c:2024 msgid "\tDefault port settings:" msgstr "" #: systemv/lpstat.c:1832 systemv/lpstat.c:1952 #, c-format msgid "\tDescription: %s" msgstr "" #: systemv/lpstat.c:1825 systemv/lpstat.c:1945 msgid "\tForm mounted:" msgstr "" #: systemv/lpstat.c:1898 systemv/lpstat.c:2017 msgid "\tForms allowed:" msgstr "" #: systemv/lpstat.c:1864 systemv/lpstat.c:1984 #, c-format msgid "\tInterface: %s.ppd" msgstr "" #: systemv/lpstat.c:1873 systemv/lpstat.c:1992 #, c-format msgid "\tInterface: %s/ppd/%s.ppd" msgstr "" #: systemv/lpstat.c:1855 systemv/lpstat.c:1975 #, c-format msgid "\tLocation: %s" msgstr "" #: systemv/lpstat.c:1876 systemv/lpstat.c:1995 msgid "\tOn fault: no alert" msgstr "" #: systemv/lpstat.c:1827 systemv/lpstat.c:1947 msgid "\tPrinter types: unknown" msgstr "" #: systemv/lpstat.c:1487 #, c-format msgid "\tStatus: %s" msgstr "" #: systemv/lpstat.c:1881 systemv/lpstat.c:1895 systemv/lpstat.c:2000 #: systemv/lpstat.c:2014 msgid "\tUsers allowed:" msgstr "" #: systemv/lpstat.c:1888 systemv/lpstat.c:2007 msgid "\tUsers denied:" msgstr "" #: berkeley/lpc.c:426 msgid "\tdaemon present" msgstr "" #: berkeley/lpc.c:422 msgid "\tno entries" msgstr "" #: berkeley/lpc.c:394 berkeley/lpc.c:406 #, c-format msgid "\tprinter is on device '%s' speed -1" msgstr "" #: berkeley/lpc.c:419 msgid "\tprinting is disabled" msgstr "" #: berkeley/lpc.c:417 msgid "\tprinting is enabled" msgstr "" #: systemv/lpstat.c:1507 #, c-format msgid "\tqueued for %s" msgstr "" #: berkeley/lpc.c:414 msgid "\tqueuing is disabled" msgstr "" #: berkeley/lpc.c:412 msgid "\tqueuing is enabled" msgstr "" #: systemv/lpstat.c:1818 systemv/lpstat.c:1938 msgid "\treason unknown" msgstr "" #: systemv/cupstestppd.c:432 msgid "" "\n" " DETAILED CONFORMANCE TEST RESULTS" msgstr "" #: systemv/cupstestppd.c:3862 msgid " Ignore specific warnings." msgstr "" #: systemv/cupstestppd.c:3866 msgid " Issue warnings instead of errors." msgstr "" #: systemv/cupstestppd.c:388 systemv/cupstestppd.c:393 msgid " REF: Page 15, section 3.1." msgstr "" #: systemv/cupstestppd.c:383 msgid " REF: Page 15, section 3.2." msgstr "" #: systemv/cupstestppd.c:403 msgid " REF: Page 19, section 3.3." msgstr "" #: systemv/cupstestppd.c:356 msgid " REF: Page 20, section 3.4." msgstr "" #: systemv/cupstestppd.c:408 msgid " REF: Page 27, section 3.5." msgstr "" #: systemv/cupstestppd.c:351 msgid " REF: Page 42, section 5.2." msgstr "" #: systemv/cupstestppd.c:398 msgid " REF: Pages 16-17, section 3.2." msgstr "" #: systemv/cupstestppd.c:368 msgid " REF: Pages 42-45, section 5.2." msgstr "" #: systemv/cupstestppd.c:362 msgid " REF: Pages 45-46, section 5.2." msgstr "" #: systemv/cupstestppd.c:373 msgid " REF: Pages 48-49, section 5.2." msgstr "" #: systemv/cupstestppd.c:378 msgid " REF: Pages 52-54, section 5.2." msgstr "" #: berkeley/lpq.c:537 #, c-format msgid " %-39.39s %.0f bytes" msgstr "" #: systemv/cupstestppd.c:567 #, c-format msgid " PASS Default%s" msgstr "" #: systemv/cupstestppd.c:502 msgid " PASS DefaultImageableArea" msgstr "" #: systemv/cupstestppd.c:536 msgid " PASS DefaultPaperDimension" msgstr "" #: systemv/cupstestppd.c:609 msgid " PASS FileVersion" msgstr "" #: systemv/cupstestppd.c:653 msgid " PASS FormatVersion" msgstr "" #: systemv/cupstestppd.c:673 msgid " PASS LanguageEncoding" msgstr "" #: systemv/cupstestppd.c:693 msgid " PASS LanguageVersion" msgstr "" #: systemv/cupstestppd.c:747 msgid " PASS Manufacturer" msgstr "" #: systemv/cupstestppd.c:787 msgid " PASS ModelName" msgstr "" #: systemv/cupstestppd.c:807 msgid " PASS NickName" msgstr "" #: systemv/cupstestppd.c:867 msgid " PASS PCFileName" msgstr "" #: systemv/cupstestppd.c:942 msgid " PASS PSVersion" msgstr "" #: systemv/cupstestppd.c:847 msgid " PASS PageRegion" msgstr "" #: systemv/cupstestppd.c:827 msgid " PASS PageSize" msgstr "" #: systemv/cupstestppd.c:902 msgid " PASS Product" msgstr "" #: systemv/cupstestppd.c:977 msgid " PASS ShortNickName" msgstr "" #: systemv/cupstestppd.c:1352 #, c-format msgid " WARN %s has no corresponding options." msgstr "" #: systemv/cupstestppd.c:1464 #, c-format msgid "" " WARN %s shares a common prefix with %s\n" " REF: Page 15, section 3.2." msgstr "" #: systemv/cupstestppd.c:1323 #, c-format msgid "" " WARN Duplex option keyword %s may not work as expected and should be named Duplex.\n" " REF: Page 122, section 5.17" msgstr "" #: systemv/cupstestppd.c:1722 msgid " WARN File contains a mix of CR, LF, and CR LF line endings." msgstr "" #: systemv/cupstestppd.c:1368 msgid "" " WARN LanguageEncoding required by PPD 4.3 spec.\n" " REF: Pages 56-57, section 5.3." msgstr "" #: systemv/cupstestppd.c:1704 #, c-format msgid " WARN Line %d only contains whitespace." msgstr "" #: systemv/cupstestppd.c:1376 msgid "" " WARN Manufacturer required by PPD 4.3 spec.\n" " REF: Pages 58-59, section 5.3." msgstr "" #: systemv/cupstestppd.c:1727 msgid " WARN Non-Windows PPD files should use lines ending with only LF, not CR LF." msgstr "" #: systemv/cupstestppd.c:1360 #, c-format msgid "" " WARN Obsolete PPD version %.1f.\n" " REF: Page 42, section 5.2." msgstr "" #: systemv/cupstestppd.c:1391 msgid "" " WARN PCFileName longer than 8.3 in violation of PPD spec.\n" " REF: Pages 61-62, section 5.3." msgstr "" #: systemv/cupstestppd.c:1399 msgid "" " WARN PCFileName should contain a unique filename.\n" " REF: Pages 61-62, section 5.3." msgstr "" #: systemv/cupstestppd.c:1434 msgid "" " WARN Protocols contains PJL but JCL attributes are not set.\n" " REF: Pages 78-79, section 5.7." msgstr "" #: systemv/cupstestppd.c:1425 msgid "" " WARN Protocols contains both PJL and BCP; expected TBCP.\n" " REF: Pages 78-79, section 5.7." msgstr "" #: systemv/cupstestppd.c:1408 msgid "" " WARN ShortNickName required by PPD 4.3 spec.\n" " REF: Pages 64-65, section 5.3." msgstr "" #: systemv/cupsaddsmb.c:274 msgid " cupsaddsmb [options] -a" msgstr "" #: systemv/cupstestdsc.c:419 msgid " cupstestdsc [options] -" msgstr "" #: systemv/cupstestppd.c:3857 msgid " program | cupstestppd [options] -" msgstr "" #: systemv/cupstestppd.c:3789 #, c-format msgid "" " %s \"%s %s\" conflicts with \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." msgstr "" #: systemv/cupstestppd.c:2226 #, c-format msgid " %s %s %s does not exist." msgstr "" #: systemv/cupstestppd.c:3946 #, c-format msgid " %s %s file \"%s\" has the wrong capitalization." msgstr "" #: systemv/cupstestppd.c:2296 #, c-format msgid "" " %s Bad %s choice %s.\n" " REF: Page 122, section 5.17" msgstr "" #: systemv/cupstestppd.c:3549 systemv/cupstestppd.c:3598 #: systemv/cupstestppd.c:3637 #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s." msgstr "" #: systemv/cupstestppd.c:3503 #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s." msgstr "" #: systemv/cupstestppd.c:2367 systemv/cupstestppd.c:2389 #, c-format msgid " %s Bad cupsFilter value \"%s\"." msgstr "" #: systemv/cupstestppd.c:2485 systemv/cupstestppd.c:2507 #, c-format msgid " %s Bad cupsFilter2 value \"%s\"." msgstr "" #: systemv/cupstestppd.c:3006 #, c-format msgid " %s Bad cupsICCProfile %s." msgstr "" #: systemv/cupstestppd.c:2613 #, c-format msgid " %s Bad cupsPreFilter value \"%s\"." msgstr "" #: systemv/cupstestppd.c:1800 #, c-format msgid " %s Bad cupsUIConstraints %s: \"%s\"" msgstr "" #: systemv/cupstestppd.c:3453 #, c-format msgid " %s Bad language \"%s\"." msgstr "" #: systemv/cupstestppd.c:2443 systemv/cupstestppd.c:2571 #: systemv/cupstestppd.c:2657 systemv/cupstestppd.c:2715 #: systemv/cupstestppd.c:2770 systemv/cupstestppd.c:2825 #: systemv/cupstestppd.c:2880 systemv/cupstestppd.c:2933 #: systemv/cupstestppd.c:3055 #, c-format msgid " %s Bad permissions on %s file \"%s\"." msgstr "" #: systemv/cupstestppd.c:2351 systemv/cupstestppd.c:2469 #: systemv/cupstestppd.c:2597 systemv/cupstestppd.c:2684 #: systemv/cupstestppd.c:2739 systemv/cupstestppd.c:2794 #: systemv/cupstestppd.c:2849 systemv/cupstestppd.c:2904 #, c-format msgid " %s Bad spelling of %s - should be %s." msgstr "" #: systemv/cupstestppd.c:2949 #, c-format msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID." msgstr "" #: systemv/cupstestppd.c:2183 #, c-format msgid " %s Default choices conflicting." msgstr "" #: systemv/cupstestppd.c:1781 #, c-format msgid " %s Empty cupsUIConstraints %s" msgstr "" #: systemv/cupstestppd.c:3581 systemv/cupstestppd.c:3621 #, c-format msgid " %s Missing \"%s\" translation string for option %s, choice %s." msgstr "" #: systemv/cupstestppd.c:3489 #, c-format msgid " %s Missing \"%s\" translation string for option %s." msgstr "" #: systemv/cupstestppd.c:2428 systemv/cupstestppd.c:2556 #: systemv/cupstestppd.c:2642 systemv/cupstestppd.c:2700 #: systemv/cupstestppd.c:2755 systemv/cupstestppd.c:2810 #: systemv/cupstestppd.c:2865 systemv/cupstestppd.c:2917 #: systemv/cupstestppd.c:3040 #, c-format msgid " %s Missing %s file \"%s\"." msgstr "" #: systemv/cupstestppd.c:3163 #, c-format msgid "" " %s Missing REQUIRED PageRegion option.\n" " REF: Page 100, section 5.14." msgstr "" #: systemv/cupstestppd.c:3148 #, c-format msgid "" " %s Missing REQUIRED PageSize option.\n" " REF: Page 99, section 5.14." msgstr "" #: systemv/cupstestppd.c:1991 systemv/cupstestppd.c:2032 #, c-format msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" #: systemv/cupstestppd.c:1886 #, c-format msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" msgstr "" #: systemv/cupstestppd.c:1818 #, c-format msgid " %s Missing cupsUIResolver %s" msgstr "" #: systemv/cupstestppd.c:1977 systemv/cupstestppd.c:2018 #, c-format msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" #: systemv/cupstestppd.c:1870 #, c-format msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\"" msgstr "" #: systemv/cupstestppd.c:3675 #, c-format msgid " %s No base translation \"%s\" is included in file." msgstr "" #: systemv/cupstestppd.c:2272 #, c-format msgid "" " %s REQUIRED %s does not define choice None.\n" " REF: Page 122, section 5.17" msgstr "" #: systemv/cupstestppd.c:3222 systemv/cupstestppd.c:3236 #, c-format msgid " %s Size \"%s\" defined for %s but not for %s." msgstr "" #: systemv/cupstestppd.c:3202 #, c-format msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)." msgstr "" #: systemv/cupstestppd.c:3393 #, c-format msgid " %s Size \"%s\" should be \"%s\"." msgstr "" #: systemv/cupstestppd.c:3342 #, c-format msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"." msgstr "" #: systemv/cupstestppd.c:3083 #, c-format msgid " %s cupsICCProfile %s hash value collides with %s." msgstr "" #: systemv/cupstestppd.c:1941 #, c-format msgid " %s cupsUIResolver %s causes a loop." msgstr "" #: systemv/cupstestppd.c:1923 #, c-format msgid " %s cupsUIResolver %s does not list at least two different options." msgstr "" #: systemv/cupstestppd.c:1146 #, c-format msgid "" " **FAIL** %s must be 1284DeviceID\n" " REF: Page 72, section 5.5" msgstr "" #: systemv/cupstestppd.c:558 #, c-format msgid "" " **FAIL** Bad Default%s %s\n" " REF: Page 40, section 4.5." msgstr "" #: systemv/cupstestppd.c:492 #, c-format msgid "" " **FAIL** Bad DefaultImageableArea %s\n" " REF: Page 102, section 5.15." msgstr "" #: systemv/cupstestppd.c:528 #, c-format msgid "" " **FAIL** Bad DefaultPaperDimension %s\n" " REF: Page 103, section 5.15." msgstr "" #: systemv/cupstestppd.c:601 #, c-format msgid "" " **FAIL** Bad FileVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" #: systemv/cupstestppd.c:645 #, c-format msgid "" " **FAIL** Bad FormatVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" #: systemv/cupstestppd.c:1003 msgid "" " **FAIL** Bad JobPatchFile attribute in file\n" " REF: Page 24, section 3.4." msgstr "" #: systemv/cupstestppd.c:1191 #, c-format msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1." msgstr "" #: systemv/cupstestppd.c:1205 #, c-format msgid " **FAIL** Bad LanguageVersion %s - must be English." msgstr "" #: systemv/cupstestppd.c:721 systemv/cupstestppd.c:738 #, c-format msgid "" " **FAIL** Bad Manufacturer (should be \"%s\")\n" " REF: Page 211, table D.1." msgstr "" #: systemv/cupstestppd.c:778 #, c-format msgid "" " **FAIL** Bad ModelName - \"%c\" not allowed in string.\n" " REF: Pages 59-60, section 5.3." msgstr "" #: systemv/cupstestppd.c:934 msgid "" " **FAIL** Bad PSVersion - not \"(string) int\".\n" " REF: Pages 62-64, section 5.3." msgstr "" #: systemv/cupstestppd.c:895 msgid "" " **FAIL** Bad Product - not \"(string)\".\n" " REF: Page 62, section 5.3." msgstr "" #: systemv/cupstestppd.c:969 msgid "" " **FAIL** Bad ShortNickName - longer than 31 chars.\n" " REF: Pages 64-65, section 5.3." msgstr "" #: systemv/cupstestppd.c:1127 #, c-format msgid "" " **FAIL** Bad option %s choice %s\n" " REF: Page 84, section 5.9" msgstr "" #: systemv/cupstestppd.c:3816 systemv/cupstestppd.c:3838 #, c-format msgid " **FAIL** Default option code cannot be interpreted: %s" msgstr "" #: systemv/cupstestppd.c:1264 #, c-format msgid " **FAIL** Default translation string for option %s choice %s contains 8-bit characters." msgstr "" #: systemv/cupstestppd.c:1237 #, c-format msgid " **FAIL** Default translation string for option %s contains 8-bit characters." msgstr "" #: systemv/cupstestppd.c:2079 #, c-format msgid " **FAIL** Group names %s and %s differ only by case." msgstr "" #: systemv/cupstestppd.c:2124 #, c-format msgid " **FAIL** Multiple occurrences of option %s choice name %s." msgstr "" #: systemv/cupstestppd.c:2141 #, c-format msgid " **FAIL** Option %s choice names %s and %s differ only by case." msgstr "" #: systemv/cupstestppd.c:2101 #, c-format msgid " **FAIL** Option names %s and %s differ only by case." msgstr "" #: systemv/cupstestppd.c:578 #, c-format msgid "" " **FAIL** REQUIRED Default%s\n" " REF: Page 40, section 4.5." msgstr "" #: systemv/cupstestppd.c:477 msgid "" " **FAIL** REQUIRED DefaultImageableArea\n" " REF: Page 102, section 5.15." msgstr "" #: systemv/cupstestppd.c:513 msgid "" " **FAIL** REQUIRED DefaultPaperDimension\n" " REF: Page 103, section 5.15." msgstr "" #: systemv/cupstestppd.c:619 msgid "" " **FAIL** REQUIRED FileVersion\n" " REF: Page 56, section 5.3." msgstr "" #: systemv/cupstestppd.c:663 msgid "" " **FAIL** REQUIRED FormatVersion\n" " REF: Page 56, section 5.3." msgstr "" #: systemv/cupstestppd.c:1054 #, c-format msgid "" " **FAIL** REQUIRED ImageableArea for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 102, section 5.15." msgstr "" #: systemv/cupstestppd.c:683 msgid "" " **FAIL** REQUIRED LanguageEncoding\n" " REF: Pages 56-57, section 5.3." msgstr "" #: systemv/cupstestppd.c:703 msgid "" " **FAIL** REQUIRED LanguageVersion\n" " REF: Pages 57-58, section 5.3." msgstr "" #: systemv/cupstestppd.c:757 msgid "" " **FAIL** REQUIRED Manufacturer\n" " REF: Pages 58-59, section 5.3." msgstr "" #: systemv/cupstestppd.c:797 msgid "" " **FAIL** REQUIRED ModelName\n" " REF: Pages 59-60, section 5.3." msgstr "" #: systemv/cupstestppd.c:817 msgid "" " **FAIL** REQUIRED NickName\n" " REF: Page 60, section 5.3." msgstr "" #: systemv/cupstestppd.c:877 msgid "" " **FAIL** REQUIRED PCFileName\n" " REF: Pages 61-62, section 5.3." msgstr "" #: systemv/cupstestppd.c:952 msgid "" " **FAIL** REQUIRED PSVersion\n" " REF: Pages 62-64, section 5.3." msgstr "" #: systemv/cupstestppd.c:857 msgid "" " **FAIL** REQUIRED PageRegion\n" " REF: Page 100, section 5.14." msgstr "" #: systemv/cupstestppd.c:1023 msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Page 41, section 5.\n" " REF: Page 99, section 5.14." msgstr "" #: systemv/cupstestppd.c:837 msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Pages 99-100, section 5.14." msgstr "" #: systemv/cupstestppd.c:1076 #, c-format msgid "" " **FAIL** REQUIRED PaperDimension for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 103, section 5.15." msgstr "" #: systemv/cupstestppd.c:912 msgid "" " **FAIL** REQUIRED Product\n" " REF: Page 62, section 5.3." msgstr "" #: systemv/cupstestppd.c:987 msgid "" " **FAIL** REQUIRED ShortNickName\n" " REF: Page 64-65, section 5.3." msgstr "" #: systemv/cupstestppd.c:312 systemv/cupstestppd.c:331 #: systemv/cupstestppd.c:343 #, c-format msgid " **FAIL** Unable to open PPD file - %s on line %d." msgstr "" #: systemv/cupstestppd.c:1476 #, c-format msgid " %d ERRORS FOUND" msgstr "" #: systemv/cupstestdsc.c:423 msgid " -h Show program usage" msgstr "" #: systemv/cupstestdsc.c:226 systemv/cupstestdsc.c:268 #, c-format msgid "" " Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:" msgstr "" #: systemv/cupstestdsc.c:297 #, c-format msgid "" " Bad %%%%Page: on line %d.\n" " REF: Page 53, %%%%Page:" msgstr "" #: systemv/cupstestdsc.c:210 systemv/cupstestdsc.c:250 #, c-format msgid "" " Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:" msgstr "" #: systemv/cupstestdsc.c:168 #, c-format msgid "" " Line %d is longer than 255 characters (%d).\n" " REF: Page 25, Line Length" msgstr "" #: systemv/cupstestdsc.c:184 msgid "" " Missing %!PS-Adobe-3.0 on first line.\n" " REF: Page 17, 3.1 Conforming Documents" msgstr "" #: systemv/cupstestdsc.c:354 #, c-format msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments" msgstr "" #: systemv/cupstestdsc.c:334 #, c-format msgid "" " Missing or bad %%BoundingBox: comment.\n" " REF: Page 39, %%BoundingBox:" msgstr "" #: systemv/cupstestdsc.c:364 #, c-format msgid "" " Missing or bad %%Page: comments.\n" " REF: Page 53, %%Page:" msgstr "" #: systemv/cupstestdsc.c:344 #, c-format msgid "" " Missing or bad %%Pages: comment.\n" " REF: Page 43, %%Pages:" msgstr "" #: systemv/cupstestppd.c:1478 msgid " NO ERRORS FOUND" msgstr "" #: systemv/cupstestdsc.c:387 #, c-format msgid " Saw %d lines that exceeded 255 characters." msgstr "" #: systemv/cupstestdsc.c:382 #, c-format msgid " Too many %%BeginDocument comments." msgstr "" #: systemv/cupstestdsc.c:374 #, c-format msgid " Too many %%EndDocument comments." msgstr "" #: systemv/cupstestdsc.c:394 msgid " Warning: file contains binary data." msgstr "" #: systemv/cupstestdsc.c:402 #, c-format msgid " Warning: no %%EndComments comment in file." msgstr "" #: systemv/cupstestdsc.c:398 #, c-format msgid " Warning: obsolete DSC version %.1f in file." msgstr "" #: test/ippfind.c:2794 msgid " ! expression Unary NOT of expression." msgstr "" #: test/ippfind.c:2793 msgid " ( expressions ) Group expressions." msgstr "" #: systemv/cupsctl.c:203 msgid " --[no-]debug-logging Turn debug logging on/off." msgstr "" #: systemv/cupsctl.c:205 msgid " --[no-]remote-admin Turn remote administration on/off." msgstr "" #: systemv/cupsctl.c:207 msgid " --[no-]remote-any Allow/prevent access from the Internet." msgstr "" #: systemv/cupsctl.c:209 msgid " --[no-]share-printers Turn printer sharing on/off." msgstr "" #: systemv/cupsctl.c:211 msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job." msgstr "" #: ppdc/ppdc.cxx:448 msgid " --cr End lines with CR (Mac OS 9)." msgstr "" #: ppdc/ppdc.cxx:450 msgid " --crlf End lines with CR + LF (Windows)." msgstr "" #: test/ippfind.c:2775 msgid " --domain regex Match domain to regular expression." msgstr "" #: test/ippfind.c:2776 msgid "" " --exec utility [argument ...] ;\n" " Execute program if true." msgstr "" #: test/ippfind.c:2796 msgid " --false Always false." msgstr "" #: test/ipptool.c:5064 msgid " --help Show help." msgstr "" #: test/ippfind.c:2758 msgid " --help Show this help." msgstr "" #: test/ippfind.c:2778 msgid " --host regex Match hostname to regular expression." msgstr "" #: ppdc/ppdc.cxx:452 msgid " --lf End lines with LF (UNIX/Linux/macOS)." msgstr "" #: scheduler/cupsfilter.c:1481 msgid " --list-filters List filters that will be used." msgstr "" #: test/ippfind.c:2780 msgid " --local True if service is local." msgstr "" #: test/ippfind.c:2779 msgid " --ls List attributes." msgstr "" #: test/ippfind.c:2781 msgid " --name regex Match service name to regular expression." msgstr "" #: test/ippfind.c:2795 msgid " --not expression Unary NOT of expression." msgstr "" #: test/ippfind.c:2782 msgid " --path regex Match resource path to regular expression." msgstr "" #: test/ippfind.c:2783 msgid " --port number[-number] Match port to number or range." msgstr "" #: test/ippfind.c:2784 msgid " --print Print URI if true." msgstr "" #: test/ippfind.c:2785 msgid " --print-name Print service name if true." msgstr "" #: test/ippfind.c:2786 msgid " --quiet Quietly report match via exit code." msgstr "" #: test/ippfind.c:2787 msgid " --remote True if service is remote." msgstr "" #: test/ipptool.c:5065 msgid "" " --stop-after-include-error\n" " Stop tests after a failed INCLUDE." msgstr "" #: test/ippfind.c:2797 msgid " --true Always true." msgstr "" #: test/ippfind.c:2788 msgid " --txt key True if the TXT record contains the key." msgstr "" #: test/ippfind.c:2789 msgid " --txt-* regex Match TXT record key to regular expression." msgstr "" #: test/ippfind.c:2790 msgid " --uri regex Match URI to regular expression." msgstr "" #: test/ippfind.c:2759 msgid " --version Show program version." msgstr "" #: test/ipptool.c:5067 msgid " --version Show version." msgstr "" #: test/ippfind.c:2752 test/ipptool.c:5068 msgid " -4 Connect using IPv4." msgstr "" #: test/ippfind.c:2753 test/ipptool.c:5069 msgid " -6 Connect using IPv6." msgstr "" #: test/ipptool.c:5070 msgid " -C Send requests using chunking (default)." msgstr "" #: scheduler/cupsfilter.c:1482 msgid " -D Remove the input file when finished." msgstr "" #: ppdc/ppdc.cxx:431 ppdc/ppdhtml.cxx:178 ppdc/ppdpo.cxx:248 msgid " -D name=value Set named variable to value." msgstr "" #: systemv/cupsaddsmb.c:277 systemv/cupsctl.c:198 msgid " -E Encrypt the connection." msgstr "" #: test/ipptool.c:5072 msgid " -E Test with encryption using HTTP Upgrade to TLS." msgstr "" #: scheduler/main.c:2104 msgid " -F Run in the foreground but detach from console." msgstr "" #: systemv/cupsaddsmb.c:278 msgid " -H samba-server Use the named SAMBA server." msgstr "" #: test/ipptool.c:5073 msgid " -I Ignore errors." msgstr "" #: ppdc/ppdc.cxx:433 ppdc/ppdhtml.cxx:180 ppdc/ppdi.cxx:124 ppdc/ppdpo.cxx:250 msgid " -I include-dir Add include directory to search path." msgstr "" #: systemv/cupstestppd.c:3861 msgid " -I {filename,filters,none,profiles}" msgstr "" #: test/ipptool.c:5074 msgid " -L Send requests using content-length." msgstr "" #: test/ipptool.c:5075 msgid " -P filename.plist Produce XML plist to a file and test report to standard output." msgstr "" #: scheduler/cupsfilter.c:1483 msgid " -P filename.ppd Set PPD file." msgstr "" #: test/ippfind.c:2762 msgid " -P number[-number] Match port to number or range." msgstr "" #: systemv/cupstestppd.c:3863 msgid " -R root-directory Set alternate root." msgstr "" #: test/ipptool.c:5076 msgid " -S Test with encryption using HTTPS." msgstr "" #: test/ippfind.c:2754 msgid " -T seconds Set the browse timeout in seconds." msgstr "" #: test/ipptool.c:5077 msgid " -T seconds Set the receive/send timeout in seconds." msgstr "" #: scheduler/cupsfilter.c:1484 systemv/cupsaddsmb.c:280 systemv/cupsctl.c:199 msgid " -U username Specify username." msgstr "" #: test/ippfind.c:2756 test/ipptool.c:5078 msgid " -V version Set default IPP version." msgstr "" #: systemv/cupstestppd.c:3864 msgid " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}" msgstr "" #: test/ipptool.c:5079 msgid " -X Produce XML plist instead of plain text." msgstr "" #: systemv/cupsaddsmb.c:281 msgid " -a Export all printers." msgstr "" #: test/ipptool.c:5080 msgid " -c Produce CSV output." msgstr "" #: ppdc/ppdc.cxx:435 msgid " -c catalog.po Load the specified message catalog." msgstr "" #: scheduler/cupsfilter.c:1485 msgid " -c cups-files.conf Set cups-files.conf file to use." msgstr "" #: scheduler/main.c:2102 msgid " -c cupsd.conf Set cupsd.conf file to use." msgstr "" #: test/ipptool.c:5081 msgid " -d name=value Set named variable to value." msgstr "" #: ppdc/ppdc.cxx:437 msgid " -d output-dir Specify the output directory." msgstr "" #: scheduler/cupsfilter.c:1486 msgid " -d printer Use the named printer." msgstr "" #: test/ippfind.c:2763 msgid " -d regex Match domain to regular expression." msgstr "" #: scheduler/cupsfilter.c:1487 msgid " -e Use every filter from the PPD file." msgstr "" #: scheduler/main.c:2103 msgid " -f Run in the foreground." msgstr "" #: test/ipptool.c:5082 msgid " -f filename Set default request filename." msgstr "" #: scheduler/main.c:2105 msgid " -h Show this usage message." msgstr "" #: test/ipptool.c:5083 msgid " -h Validate HTTP response headers." msgstr "" #: test/ippfind.c:2764 msgid " -h regex Match hostname to regular expression." msgstr "" #: systemv/cupsaddsmb.c:282 systemv/cupsctl.c:200 msgid " -h server[:port] Specify server address." msgstr "" #: scheduler/cupsfilter.c:1488 msgid " -i mime/type Set input MIME type (otherwise auto-typed)." msgstr "" #: test/ipptool.c:5084 msgid " -i seconds Repeat the last file with the given time interval." msgstr "" #: scheduler/cupsfilter.c:1489 msgid " -j job-id[,N] Filter file N from the specified job (default is file 1)." msgstr "" #: test/ippfind.c:2765 msgid " -l List attributes." msgstr "" #: test/ipptool.c:5085 msgid " -l Produce plain text output." msgstr "" #: scheduler/main.c:2107 msgid " -l Run cupsd on demand." msgstr "" #: ppdc/ppdc.cxx:439 msgid " -l lang[,lang,...] Specify the output language(s) (locale)." msgstr "" #: ppdc/ppdc.cxx:441 msgid " -m Use the ModelName value as the filename." msgstr "" #: scheduler/cupsfilter.c:1490 msgid " -m mime/type Set output MIME type (otherwise application/pdf)." msgstr "" #: scheduler/cupsfilter.c:1491 msgid " -n copies Set number of copies." msgstr "" #: test/ipptool.c:5086 msgid " -n count Repeat the last file the given number of times." msgstr "" #: test/ippfind.c:2766 msgid " -n regex Match service name to regular expression." msgstr "" #: ppdc/ppdi.cxx:126 msgid " -o filename.drv Set driver information file (otherwise ppdi.drv)." msgstr "" #: ppdc/ppdmerge.cxx:362 msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)." msgstr "" #: scheduler/cupsfilter.c:1492 msgid " -o name=value Set option(s)." msgstr "" #: test/ippfind.c:2767 msgid " -p Print URI if true." msgstr "" #: scheduler/cupsfilter.c:1493 msgid " -p filename.ppd Set PPD file." msgstr "" #: test/ippfind.c:2768 msgid " -q Quietly report match via exit code." msgstr "" #: systemv/cupstestppd.c:3868 test/ipptool.c:5087 msgid " -q Run silently." msgstr "" #: test/ippfind.c:2769 msgid " -r True if service is remote." msgstr "" #: systemv/cupstestppd.c:3869 msgid " -r Use 'relaxed' open mode." msgstr "" #: test/ippfind.c:2770 msgid " -s Print service name if true." msgstr "" #: scheduler/main.c:2109 msgid " -s cups-files.conf Set cups-files.conf file to use." msgstr "" #: test/ipptool.c:5088 msgid " -t Produce a test report." msgstr "" #: ppdc/ppdc.cxx:443 msgid " -t Test PPDs instead of generating them." msgstr "" #: scheduler/main.c:2110 msgid " -t Test the configuration file." msgstr "" #: test/ippfind.c:2771 msgid " -t key True if the TXT record contains the key." msgstr "" #: scheduler/cupsfilter.c:1494 msgid " -t title Set title." msgstr "" #: scheduler/cupsfilter.c:1495 msgid " -u Remove the PPD file when finished." msgstr "" #: test/ippfind.c:2772 msgid " -u regex Match URI to regular expression." msgstr "" #: systemv/cupsaddsmb.c:283 systemv/cupstestppd.c:3870 test/ipptool.c:5089 #: ppdc/ppdc.cxx:445 ppdc/ppdpo.cxx:252 msgid " -v Be verbose." msgstr "" #: systemv/cupstestppd.c:3871 msgid " -vv Be very verbose." msgstr "" #: test/ippfind.c:2773 msgid "" " -x utility [argument ...] ;\n" " Execute program if true." msgstr "" #: ppdc/ppdc.cxx:446 msgid " -z Compress PPD files using GNU zip." msgstr "" #: test/ippfind.c:2816 msgid " IPPFIND_SERVICE_DOMAIN Domain name" msgstr "" #: test/ippfind.c:2817 msgid "" " IPPFIND_SERVICE_HOSTNAME\n" " Fully-qualified domain name" msgstr "" #: test/ippfind.c:2819 msgid " IPPFIND_SERVICE_NAME Service instance name" msgstr "" #: test/ippfind.c:2820 msgid " IPPFIND_SERVICE_PORT Port number" msgstr "" #: test/ippfind.c:2821 msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type" msgstr "" #: test/ippfind.c:2822 msgid " IPPFIND_SERVICE_SCHEME URI scheme" msgstr "" #: test/ippfind.c:2823 msgid " IPPFIND_SERVICE_URI URI" msgstr "" #: test/ippfind.c:2824 msgid " IPPFIND_TXT_* Value of TXT record key" msgstr "" #: test/ippfind.c:2799 msgid "" " expression --and expression\n" " Logical AND." msgstr "" #: test/ippfind.c:2801 msgid "" " expression --or expression\n" " Logical OR." msgstr "" #: test/ippfind.c:2798 msgid " expression expression Logical AND." msgstr "" #: test/ippfind.c:2806 msgid " {service_domain} Domain name" msgstr "" #: test/ippfind.c:2807 msgid " {service_hostname} Fully-qualified domain name" msgstr "" #: test/ippfind.c:2808 msgid " {service_name} Service instance name" msgstr "" #: test/ippfind.c:2809 msgid " {service_port} Port number" msgstr "" #: test/ippfind.c:2810 msgid " {service_regtype} DNS-SD registration type" msgstr "" #: test/ippfind.c:2811 msgid " {service_scheme} URI scheme" msgstr "" #: test/ippfind.c:2812 msgid " {service_uri} URI" msgstr "" #: test/ippfind.c:2813 msgid " {txt_*} Value of TXT record key" msgstr "" #: test/ippfind.c:2805 msgid " {} URI" msgstr "" #: systemv/cupstestppd.c:310 systemv/cupstestppd.c:329 #: systemv/cupstestppd.c:341 systemv/cupstestppd.c:474 #: systemv/cupstestppd.c:489 systemv/cupstestppd.c:510 #: systemv/cupstestppd.c:525 systemv/cupstestppd.c:555 #: systemv/cupstestppd.c:575 systemv/cupstestppd.c:598 #: systemv/cupstestppd.c:616 systemv/cupstestppd.c:642 #: systemv/cupstestppd.c:660 systemv/cupstestppd.c:680 #: systemv/cupstestppd.c:700 systemv/cupstestppd.c:718 #: systemv/cupstestppd.c:735 systemv/cupstestppd.c:754 #: systemv/cupstestppd.c:775 systemv/cupstestppd.c:794 #: systemv/cupstestppd.c:814 systemv/cupstestppd.c:834 #: systemv/cupstestppd.c:854 systemv/cupstestppd.c:874 #: systemv/cupstestppd.c:892 systemv/cupstestppd.c:909 #: systemv/cupstestppd.c:931 systemv/cupstestppd.c:949 #: systemv/cupstestppd.c:966 systemv/cupstestppd.c:984 #: systemv/cupstestppd.c:1000 systemv/cupstestppd.c:1020 #: systemv/cupstestppd.c:1051 systemv/cupstestppd.c:1073 #: systemv/cupstestppd.c:1124 systemv/cupstestppd.c:1143 #: systemv/cupstestppd.c:1187 systemv/cupstestppd.c:1201 #: systemv/cupstestppd.c:1233 systemv/cupstestppd.c:1260 #: systemv/cupstestppd.c:1778 systemv/cupstestppd.c:1797 #: systemv/cupstestppd.c:1815 systemv/cupstestppd.c:1867 #: systemv/cupstestppd.c:1883 systemv/cupstestppd.c:1920 #: systemv/cupstestppd.c:1938 systemv/cupstestppd.c:1974 #: systemv/cupstestppd.c:1988 systemv/cupstestppd.c:2015 #: systemv/cupstestppd.c:2029 systemv/cupstestppd.c:2075 #: systemv/cupstestppd.c:2097 systemv/cupstestppd.c:2120 #: systemv/cupstestppd.c:2137 systemv/cupstestppd.c:2179 #: systemv/cupstestppd.c:2222 systemv/cupstestppd.c:2269 #: systemv/cupstestppd.c:2293 systemv/cupstestppd.c:2347 #: systemv/cupstestppd.c:2363 systemv/cupstestppd.c:2385 #: systemv/cupstestppd.c:2425 systemv/cupstestppd.c:2439 #: systemv/cupstestppd.c:2465 systemv/cupstestppd.c:2481 #: systemv/cupstestppd.c:2503 systemv/cupstestppd.c:2553 #: systemv/cupstestppd.c:2567 systemv/cupstestppd.c:2593 #: systemv/cupstestppd.c:2609 systemv/cupstestppd.c:2639 #: systemv/cupstestppd.c:2653 systemv/cupstestppd.c:2680 #: systemv/cupstestppd.c:2697 systemv/cupstestppd.c:2711 #: systemv/cupstestppd.c:2735 systemv/cupstestppd.c:2752 #: systemv/cupstestppd.c:2766 systemv/cupstestppd.c:2790 #: systemv/cupstestppd.c:2807 systemv/cupstestppd.c:2821 #: systemv/cupstestppd.c:2845 systemv/cupstestppd.c:2862 #: systemv/cupstestppd.c:2876 systemv/cupstestppd.c:2900 #: systemv/cupstestppd.c:2914 systemv/cupstestppd.c:2929 #: systemv/cupstestppd.c:2946 systemv/cupstestppd.c:3002 #: systemv/cupstestppd.c:3037 systemv/cupstestppd.c:3051 #: systemv/cupstestppd.c:3079 systemv/cupstestppd.c:3144 #: systemv/cupstestppd.c:3159 systemv/cupstestppd.c:3198 #: systemv/cupstestppd.c:3218 systemv/cupstestppd.c:3232 #: systemv/cupstestppd.c:3449 systemv/cupstestppd.c:3485 #: systemv/cupstestppd.c:3499 systemv/cupstestppd.c:3545 #: systemv/cupstestppd.c:3577 systemv/cupstestppd.c:3594 #: systemv/cupstestppd.c:3617 systemv/cupstestppd.c:3633 #: systemv/cupstestppd.c:3671 systemv/cupstestppd.c:3812 #: systemv/cupstestppd.c:3834 systemv/cupstestppd.c:3942 msgid " FAIL" msgstr "" #: systemv/cupstestppd.c:1284 msgid " PASS" msgstr "" #: cups/ipp.c:5227 #, c-format msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." msgstr "" #: cups/ipp.c:5238 #, c-format msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." msgstr "" #: cups/ipp.c:4858 #, c-format msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #: cups/ipp.c:4850 #, c-format msgid "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." msgstr "" #: cups/ipp.c:4876 #, c-format msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." msgstr "" #: cups/ipp.c:5290 #, c-format msgid "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." msgstr "" #: cups/ipp.c:5299 #, c-format msgid "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." msgstr "" #: cups/ipp.c:4976 #, c-format msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." msgstr "" #: cups/ipp.c:4984 #, c-format msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." msgstr "" #: cups/ipp.c:4968 #, c-format msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." msgstr "" #: cups/ipp.c:4928 #, c-format msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." msgstr "" #: cups/ipp.c:4960 #, c-format msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." msgstr "" #: cups/ipp.c:4936 #, c-format msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." msgstr "" #: cups/ipp.c:4944 #, c-format msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." msgstr "" #: cups/ipp.c:4920 #, c-format msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." msgstr "" #: cups/ipp.c:4952 #, c-format msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." msgstr "" #: cups/ipp.c:4890 #, c-format msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." msgstr "" #: cups/ipp.c:5205 #, c-format msgid "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #: cups/ipp.c:5196 #, c-format msgid "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section 5.1.4)." msgstr "" #: cups/ipp.c:5399 #, c-format msgid "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section 5.1.10)." msgstr "" #: cups/ipp.c:5409 #, c-format msgid "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section 5.1.10)." msgstr "" #: cups/ipp.c:5167 #, c-format msgid "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." msgstr "" #: cups/ipp.c:5176 #, c-format msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." msgstr "" #: cups/ipp.c:5345 #, c-format msgid "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section 5.1.9)." msgstr "" #: cups/ipp.c:5355 #, c-format msgid "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section 5.1.9)." msgstr "" #: cups/ipp.c:4904 #, c-format msgid "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." msgstr "" #: cups/ipp.c:5047 #, c-format msgid "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 section 5.1.14)." msgstr "" #: cups/ipp.c:5028 #, c-format msgid "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section 5.1.16)." msgstr "" #: cups/ipp.c:4997 #, c-format msgid "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16)." msgstr "" #: cups/ipp.c:5012 #, c-format msgid "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16)." msgstr "" #: cups/ipp.c:5109 #, c-format msgid "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." msgstr "" #: cups/ipp.c:5118 #, c-format msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." msgstr "" #: cups/ipp.c:5261 #, c-format msgid "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." msgstr "" #: cups/ipp.c:5270 #, c-format msgid "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." msgstr "" #: berkeley/lpq.c:542 #, c-format msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes" msgstr "" #: cups/dest-localization.c:126 #, c-format msgid "%d x %d mm" msgstr "" #: cups/dest-localization.c:118 #, c-format msgid "%g x %g \"" msgstr "" #: cups/dest-localization.c:181 cups/dest-localization.c:188 #, c-format msgid "%s (%s)" msgstr "" #: cups/dest-localization.c:195 #, c-format msgid "%s (%s, %s)" msgstr "" #: cups/dest-localization.c:172 #, c-format msgid "%s (Borderless)" msgstr "" #: cups/dest-localization.c:179 cups/dest-localization.c:186 #, c-format msgid "%s (Borderless, %s)" msgstr "" #: cups/dest-localization.c:193 #, c-format msgid "%s (Borderless, %s, %s)" msgstr "" #: systemv/lpstat.c:810 #, c-format msgid "%s accepting requests since %s" msgstr "" #: scheduler/ipp.c:10336 #, c-format msgid "%s cannot be changed." msgstr "" #: berkeley/lpc.c:179 #, c-format msgid "%s is not implemented by the CUPS version of lpc." msgstr "" #: berkeley/lpq.c:627 #, c-format msgid "%s is not ready" msgstr "" #: berkeley/lpq.c:620 #, c-format msgid "%s is ready" msgstr "" #: berkeley/lpq.c:623 #, c-format msgid "%s is ready and printing" msgstr "" #: filter/rastertoepson.c:1004 filter/rastertohp.c:674 #: filter/rastertolabel.c:1118 #, c-format msgid "%s job-id user title copies options [file]" msgstr "" #: systemv/lpstat.c:814 #, c-format msgid "%s not accepting requests since %s -" msgstr "" #: scheduler/ipp.c:640 #, c-format msgid "%s not supported." msgstr "" #: systemv/lpstat.c:825 #, c-format msgid "%s/%s accepting requests since %s" msgstr "" #: systemv/lpstat.c:830 #, c-format msgid "%s/%s not accepting requests since %s -" msgstr "" #: berkeley/lpq.c:535 #, c-format msgid "%s: %-33.33s [job %d localhost]" msgstr "" #. TRANSLATORS: Message is "subject: error" #: cups/langprintf.c:75 scheduler/cupsfilter.c:724 systemv/lpadmin.c:799 #: systemv/lpadmin.c:850 systemv/lpadmin.c:900 systemv/lpadmin.c:956 #: systemv/lpadmin.c:1054 systemv/lpadmin.c:1106 systemv/lpadmin.c:1162 #: systemv/lpadmin.c:1600 #, c-format msgid "%s: %s" msgstr "" #: systemv/cancel.c:304 systemv/cancel.c:368 #, c-format msgid "%s: %s failed: %s" msgstr "" #: systemv/lpadmin.c:1223 #, c-format msgid "%s: Bad printer URI \"%s\"." msgstr "" #: test/ippfind.c:775 test/ipptool.c:372 #, c-format msgid "%s: Bad version %s for \"-V\"." msgstr "" #: systemv/cupsaccept.c:63 #, c-format msgid "%s: Don't know what to do." msgstr "" #: berkeley/lpr.c:348 systemv/lp.c:590 #, c-format msgid "%s: Error - %s" msgstr "" #: berkeley/lpq.c:234 #, c-format msgid "%s: Error - %s environment variable names non-existent destination \"%s\"." msgstr "" #: berkeley/lpq.c:139 berkeley/lpq.c:212 berkeley/lpr.c:228 berkeley/lpr.c:339 #: systemv/lp.c:161 systemv/lp.c:581 systemv/lp.c:678 systemv/lp.c:727 #: systemv/lpstat.c:190 systemv/lpstat.c:235 systemv/lpstat.c:368 #: systemv/lpstat.c:395 systemv/lpstat.c:417 systemv/lpstat.c:477 #: systemv/lpstat.c:543 systemv/lpstat.c:604 systemv/lpstat.c:729 #: systemv/lpstat.c:913 systemv/lpstat.c:1174 systemv/lpstat.c:1372 #: systemv/lpstat.c:1612 #, c-format msgid "%s: Error - add '/version=1.1' to server name." msgstr "" #: systemv/lp.c:238 #, c-format msgid "%s: Error - bad job ID." msgstr "" #: systemv/lp.c:227 #, c-format msgid "%s: Error - cannot print files and alter jobs simultaneously." msgstr "" #: systemv/lp.c:518 #, c-format msgid "%s: Error - cannot print from stdin if files or a job ID are provided." msgstr "" #: berkeley/lpr.c:253 systemv/lp.c:280 #, c-format msgid "%s: Error - copies must be 1 or more." msgstr "" #: systemv/lp.c:470 #, c-format msgid "%s: Error - expected character set after \"-S\" option." msgstr "" #: systemv/lp.c:489 #, c-format msgid "%s: Error - expected content type after \"-T\" option." msgstr "" #: berkeley/lpr.c:244 #, c-format msgid "%s: Error - expected copies after \"-#\" option." msgstr "" #: systemv/lp.c:271 #, c-format msgid "%s: Error - expected copies after \"-n\" option." msgstr "" #: berkeley/lpr.c:206 #, c-format msgid "%s: Error - expected destination after \"-P\" option." msgstr "" #: systemv/lp.c:137 #, c-format msgid "%s: Error - expected destination after \"-d\" option." msgstr "" #: systemv/lp.c:178 #, c-format msgid "%s: Error - expected form after \"-f\" option." msgstr "" #: systemv/lp.c:406 #, c-format msgid "%s: Error - expected hold name after \"-H\" option." msgstr "" #: berkeley/lpr.c:103 #, c-format msgid "%s: Error - expected hostname after \"-H\" option." msgstr "" #: berkeley/lpq.c:173 berkeley/lprm.c:124 systemv/cancel.c:124 #: systemv/cupsaccept.c:127 systemv/lp.c:198 systemv/lpstat.c:304 #, c-format msgid "%s: Error - expected hostname after \"-h\" option." msgstr "" #: systemv/lp.c:386 #, c-format msgid "%s: Error - expected mode list after \"-y\" option." msgstr "" #: berkeley/lpr.c:274 #, c-format msgid "%s: Error - expected name after \"-%c\" option." msgstr "" #: berkeley/lpr.c:155 systemv/lp.c:301 #, c-format msgid "%s: Error - expected option=value after \"-o\" option." msgstr "" #: systemv/lp.c:449 #, c-format msgid "%s: Error - expected page list after \"-P\" option." msgstr "" #: systemv/lp.c:322 #, c-format msgid "%s: Error - expected priority after \"-%c\" option." msgstr "" #: systemv/cupsaccept.c:146 #, c-format msgid "%s: Error - expected reason text after \"-r\" option." msgstr "" #: systemv/lp.c:367 #, c-format msgid "%s: Error - expected title after \"-t\" option." msgstr "" #: berkeley/lpq.c:102 berkeley/lpr.c:83 berkeley/lprm.c:104 #: systemv/cancel.c:94 systemv/cupsaccept.c:104 systemv/lp.c:114 #: systemv/lpadmin.c:441 systemv/lpstat.c:129 #, c-format msgid "%s: Error - expected username after \"-U\" option." msgstr "" #: systemv/cancel.c:146 #, c-format msgid "%s: Error - expected username after \"-u\" option." msgstr "" #: berkeley/lpr.c:128 #, c-format msgid "%s: Error - expected value after \"-%c\" option." msgstr "" #: systemv/lpstat.c:149 systemv/lpstat.c:158 #, c-format msgid "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" option." msgstr "" #: berkeley/lpq.c:239 #, c-format msgid "%s: Error - no default destination available." msgstr "" #: systemv/lp.c:342 #, c-format msgid "%s: Error - priority must be between 1 and 100." msgstr "" #: berkeley/lpr.c:350 systemv/lp.c:592 #, c-format msgid "%s: Error - scheduler not responding." msgstr "" #: berkeley/lpr.c:315 systemv/lp.c:550 #, c-format msgid "%s: Error - too many files - \"%s\"." msgstr "" #: berkeley/lpr.c:297 systemv/lp.c:533 #, c-format msgid "%s: Error - unable to access \"%s\" - %s" msgstr "" #: berkeley/lpr.c:392 systemv/lp.c:622 #, c-format msgid "%s: Error - unable to queue from stdin - %s." msgstr "" #: berkeley/lprm.c:86 berkeley/lprm.c:173 systemv/cancel.c:221 #, c-format msgid "%s: Error - unknown destination \"%s\"." msgstr "" #: berkeley/lpq.c:141 #, c-format msgid "%s: Error - unknown destination \"%s/%s\"." msgstr "" #: berkeley/lpr.c:283 berkeley/lprm.c:139 systemv/cancel.c:162 #: systemv/cupsaccept.c:155 systemv/lp.c:508 systemv/lpstat.c:487 #, c-format msgid "%s: Error - unknown option \"%c\"." msgstr "" #: systemv/lp.c:500 #, c-format msgid "%s: Error - unknown option \"%s\"." msgstr "" #: systemv/lp.c:218 #, c-format msgid "%s: Expected job ID after \"-i\" option." msgstr "" #: systemv/lpstat.c:547 systemv/lpstat.c:587 #, c-format msgid "%s: Invalid destination name in list \"%s\"." msgstr "" #: scheduler/cupsfilter.c:577 #, c-format msgid "%s: Invalid filter string \"%s\"." msgstr "" #: test/ipptool.c:303 #, c-format msgid "%s: Missing filename for \"-P\"." msgstr "" #: test/ippfind.c:747 test/ipptool.c:340 #, c-format msgid "%s: Missing timeout for \"-T\"." msgstr "" #: test/ippfind.c:760 test/ipptool.c:354 #, c-format msgid "%s: Missing version for \"-V\"." msgstr "" #: systemv/lp.c:426 #, c-format msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"." msgstr "" #: scheduler/cupsfilter.c:449 #, c-format msgid "%s: No filter to convert from %s/%s to %s/%s." msgstr "" #: systemv/cupsaccept.c:189 #, c-format msgid "%s: Operation failed: %s" msgstr "" #: berkeley/lpq.c:87 berkeley/lpr.c:68 berkeley/lprm.c:65 systemv/cancel.c:79 #: systemv/cupsaccept.c:89 systemv/cupsaddsmb.c:78 systemv/lp.c:99 #: systemv/lpadmin.c:250 systemv/lpinfo.c:192 systemv/lpmove.c:70 #: systemv/lpstat.c:91 test/ipptool.c:285 test/ipptool.c:329 #, c-format msgid "%s: Sorry, no encryption support." msgstr "" #: systemv/lpadmin.c:1230 #, c-format msgid "%s: Unable to connect to \"%s:%d\": %s" msgstr "" #: berkeley/lpq.c:293 scheduler/cupsfilter.c:1273 systemv/cancel.c:244 #: systemv/cupsaddsmb.c:136 systemv/cupsaddsmb.c:163 #, c-format msgid "%s: Unable to connect to server." msgstr "" #: systemv/cancel.c:328 #, c-format msgid "%s: Unable to contact server." msgstr "" #: systemv/lpadmin.c:1255 #, c-format msgid "%s: Unable to create PPD file: %s" msgstr "" #: scheduler/cupsfilter.c:414 #, c-format msgid "%s: Unable to determine MIME type of \"%s\"." msgstr "" #: test/ipptool.c:312 #, c-format msgid "%s: Unable to open \"%s\": %s" msgstr "" #: ppdc/ppdmerge.cxx:88 #, c-format msgid "%s: Unable to open %s: %s" msgstr "" #: scheduler/cupsfilter.c:672 ppdc/ppdmerge.cxx:104 #, c-format msgid "%s: Unable to open PPD file: %s on line %d." msgstr "" #: scheduler/cupsfilter.c:381 #, c-format msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"." msgstr "" #: systemv/lpadmin.c:1214 #, c-format msgid "%s: Unable to resolve \"%s\"." msgstr "" #: systemv/lpinfo.c:238 #, c-format msgid "%s: Unknown argument \"%s\"." msgstr "" #: berkeley/lpq.c:143 systemv/lpstat.c:608 #, c-format msgid "%s: Unknown destination \"%s\"." msgstr "" #: scheduler/cupsfilter.c:426 #, c-format msgid "%s: Unknown destination MIME type %s/%s." msgstr "" #: scheduler/cupsfilter.c:1477 systemv/lpinfo.c:231 systemv/lpmove.c:95 #, c-format msgid "%s: Unknown option \"%c\"." msgstr "" #: test/ippfind.c:646 #, c-format msgid "%s: Unknown option \"%s\"." msgstr "" #: test/ippfind.c:926 #, c-format msgid "%s: Unknown option \"-%c\"." msgstr "" #: scheduler/cupsfilter.c:406 #, c-format msgid "%s: Unknown source MIME type %s/%s." msgstr "" #: berkeley/lpr.c:141 #, c-format msgid "%s: Warning - \"%c\" format modifier not supported - output may not be correct." msgstr "" #: systemv/lp.c:475 #, c-format msgid "%s: Warning - character set option ignored." msgstr "" #: systemv/lp.c:494 #, c-format msgid "%s: Warning - content type option ignored." msgstr "" #: systemv/lp.c:183 #, c-format msgid "%s: Warning - form option ignored." msgstr "" #: systemv/lp.c:391 #, c-format msgid "%s: Warning - mode option ignored." msgstr "" #: ppdc/sample.c:305 msgid "-1" msgstr "" #: ppdc/sample.c:296 msgid "-10" msgstr "" #: ppdc/sample.c:388 msgid "-100" msgstr "" #: ppdc/sample.c:387 msgid "-105" msgstr "" #: ppdc/sample.c:295 msgid "-11" msgstr "" #: ppdc/sample.c:386 msgid "-110" msgstr "" #: ppdc/sample.c:385 msgid "-115" msgstr "" #: ppdc/sample.c:294 msgid "-12" msgstr "" #: ppdc/sample.c:384 msgid "-120" msgstr "" #: ppdc/sample.c:293 msgid "-13" msgstr "" #: ppdc/sample.c:292 msgid "-14" msgstr "" #: ppdc/sample.c:291 msgid "-15" msgstr "" #: ppdc/sample.c:304 msgid "-2" msgstr "" #: ppdc/sample.c:404 msgid "-20" msgstr "" #: ppdc/sample.c:403 msgid "-25" msgstr "" #: ppdc/sample.c:303 msgid "-3" msgstr "" #: ppdc/sample.c:402 msgid "-30" msgstr "" #: ppdc/sample.c:401 msgid "-35" msgstr "" #: ppdc/sample.c:302 msgid "-4" msgstr "" #: ppdc/sample.c:400 msgid "-40" msgstr "" #: ppdc/sample.c:399 msgid "-45" msgstr "" #: ppdc/sample.c:301 msgid "-5" msgstr "" #: ppdc/sample.c:398 msgid "-50" msgstr "" #: ppdc/sample.c:397 msgid "-55" msgstr "" #: ppdc/sample.c:300 msgid "-6" msgstr "" #: ppdc/sample.c:396 msgid "-60" msgstr "" #: ppdc/sample.c:395 msgid "-65" msgstr "" #: ppdc/sample.c:299 msgid "-7" msgstr "" #: ppdc/sample.c:394 msgid "-70" msgstr "" #: ppdc/sample.c:393 msgid "-75" msgstr "" #: ppdc/sample.c:298 msgid "-8" msgstr "" #: ppdc/sample.c:392 msgid "-80" msgstr "" #: ppdc/sample.c:391 msgid "-85" msgstr "" #: ppdc/sample.c:297 msgid "-9" msgstr "" #: ppdc/sample.c:390 msgid "-90" msgstr "" #: ppdc/sample.c:389 msgid "-95" msgstr "" #: ppdc/sample.c:306 msgid "0" msgstr "" #: ppdc/sample.c:307 msgid "1" msgstr "" #: ppdc/sample.c:379 msgid "1 inch/sec." msgstr "" #: ppdc/sample.c:172 msgid "1.25x0.25\"" msgstr "" #: ppdc/sample.c:173 msgid "1.25x2.25\"" msgstr "" #: ppdc/sample.c:427 msgid "1.5 inch/sec." msgstr "" #: ppdc/sample.c:174 msgid "1.50x0.25\"" msgstr "" #: ppdc/sample.c:175 msgid "1.50x0.50\"" msgstr "" #: ppdc/sample.c:176 msgid "1.50x1.00\"" msgstr "" #: ppdc/sample.c:177 msgid "1.50x2.00\"" msgstr "" #: ppdc/sample.c:316 msgid "10" msgstr "" #: ppdc/sample.c:438 msgid "10 inches/sec." msgstr "" #: ppdc/sample.c:6 msgid "10 x 11" msgstr "" #: ppdc/sample.c:7 msgid "10 x 13" msgstr "" #: ppdc/sample.c:8 msgid "10 x 14" msgstr "" #: ppdc/sample.c:418 msgid "100" msgstr "" #: ppdc/sample.c:329 msgid "100 mm/sec." msgstr "" #: ppdc/sample.c:419 msgid "105" msgstr "" #: ppdc/sample.c:317 msgid "11" msgstr "" #: ppdc/sample.c:439 msgid "11 inches/sec." msgstr "" #: ppdc/sample.c:420 msgid "110" msgstr "" #: ppdc/sample.c:421 msgid "115" msgstr "" #: ppdc/sample.c:318 msgid "12" msgstr "" #: ppdc/sample.c:440 msgid "12 inches/sec." msgstr "" #: ppdc/sample.c:9 msgid "12 x 11" msgstr "" #: ppdc/sample.c:422 msgid "120" msgstr "" #: ppdc/sample.c:330 msgid "120 mm/sec." msgstr "" #: ppdc/sample.c:243 msgid "120x60dpi" msgstr "" #: ppdc/sample.c:249 msgid "120x72dpi" msgstr "" #: ppdc/sample.c:319 msgid "13" msgstr "" #: ppdc/sample.c:232 msgid "136dpi" msgstr "" #: ppdc/sample.c:320 msgid "14" msgstr "" #: ppdc/sample.c:321 msgid "15" msgstr "" #: ppdc/sample.c:323 msgid "15 mm/sec." msgstr "" #: ppdc/sample.c:10 msgid "15 x 11" msgstr "" #: ppdc/sample.c:331 msgid "150 mm/sec." msgstr "" #: ppdc/sample.c:278 msgid "150dpi" msgstr "" #: ppdc/sample.c:363 msgid "16" msgstr "" #: ppdc/sample.c:364 msgid "17" msgstr "" #: ppdc/sample.c:365 msgid "18" msgstr "" #: ppdc/sample.c:244 msgid "180dpi" msgstr "" #: ppdc/sample.c:366 msgid "19" msgstr "" #: ppdc/sample.c:308 msgid "2" msgstr "" #: ppdc/sample.c:380 msgid "2 inches/sec." msgstr "" #: cups/ppd-cache.c:3012 msgid "2-Hole Punch (Landscape)" msgstr "" #: cups/ppd-cache.c:3013 msgid "2-Hole Punch (Portrait)" msgstr "" #: cups/ppd-cache.c:3011 msgid "2-Hole Punch (Reverse Landscape)" msgstr "" #: cups/ppd-cache.c:3010 msgid "2-Hole Punch (Reverse Portrait)" msgstr "" #: cups/ppd-cache.c:3711 ppdc/sample.c:262 msgid "2-Sided Printing" msgstr "" #: ppdc/sample.c:178 msgid "2.00x0.37\"" msgstr "" #: ppdc/sample.c:179 msgid "2.00x0.50\"" msgstr "" #: ppdc/sample.c:180 msgid "2.00x1.00\"" msgstr "" #: ppdc/sample.c:181 msgid "2.00x1.25\"" msgstr "" #: ppdc/sample.c:182 msgid "2.00x2.00\"" msgstr "" #: ppdc/sample.c:183 msgid "2.00x3.00\"" msgstr "" #: ppdc/sample.c:184 msgid "2.00x4.00\"" msgstr "" #: ppdc/sample.c:185 msgid "2.00x5.50\"" msgstr "" #: ppdc/sample.c:186 msgid "2.25x0.50\"" msgstr "" #: ppdc/sample.c:187 msgid "2.25x1.25\"" msgstr "" #: ppdc/sample.c:188 msgid "2.25x4.00\"" msgstr "" #: ppdc/sample.c:189 msgid "2.25x5.50\"" msgstr "" #: ppdc/sample.c:190 msgid "2.38x5.50\"" msgstr "" #: ppdc/sample.c:428 msgid "2.5 inches/sec." msgstr "" #: ppdc/sample.c:191 msgid "2.50x1.00\"" msgstr "" #: ppdc/sample.c:192 msgid "2.50x2.00\"" msgstr "" #: ppdc/sample.c:193 msgid "2.75x1.25\"" msgstr "" #: ppdc/sample.c:194 msgid "2.9 x 1\"" msgstr "" #: ppdc/sample.c:367 msgid "20" msgstr "" #: ppdc/sample.c:324 msgid "20 mm/sec." msgstr "" #: ppdc/sample.c:332 msgid "200 mm/sec." msgstr "" #: ppdc/sample.c:233 msgid "203dpi" msgstr "" #: ppdc/sample.c:368 msgid "21" msgstr "" #: ppdc/sample.c:369 msgid "22" msgstr "" #: ppdc/sample.c:370 msgid "23" msgstr "" #: ppdc/sample.c:371 msgid "24" msgstr "" #: ppdc/sample.c:241 msgid "24-Pin Series" msgstr "" #: ppdc/sample.c:250 msgid "240x72dpi" msgstr "" #: ppdc/sample.c:372 msgid "25" msgstr "" #: ppdc/sample.c:333 msgid "250 mm/sec." msgstr "" #: ppdc/sample.c:373 msgid "26" msgstr "" #: ppdc/sample.c:374 msgid "27" msgstr "" #: ppdc/sample.c:375 msgid "28" msgstr "" #: ppdc/sample.c:376 msgid "29" msgstr "" #: ppdc/sample.c:309 msgid "3" msgstr "" #: ppdc/sample.c:381 msgid "3 inches/sec." msgstr "" #: ppdc/sample.c:3 msgid "3 x 5" msgstr "" #: cups/ppd-cache.c:3023 msgid "3-Hole Punch (Landscape)" msgstr "" #: cups/ppd-cache.c:3021 msgid "3-Hole Punch (Portrait)" msgstr "" #: cups/ppd-cache.c:3020 msgid "3-Hole Punch (Reverse Landscape)" msgstr "" #: cups/ppd-cache.c:3022 msgid "3-Hole Punch (Reverse Portrait)" msgstr "" #: ppdc/sample.c:195 msgid "3.00x1.00\"" msgstr "" #: ppdc/sample.c:196 msgid "3.00x1.25\"" msgstr "" #: ppdc/sample.c:197 msgid "3.00x2.00\"" msgstr "" #: ppdc/sample.c:198 msgid "3.00x3.00\"" msgstr "" #: ppdc/sample.c:199 msgid "3.00x5.00\"" msgstr "" #: ppdc/sample.c:200 msgid "3.25x2.00\"" msgstr "" #: ppdc/sample.c:201 msgid "3.25x5.00\"" msgstr "" #: ppdc/sample.c:202 msgid "3.25x5.50\"" msgstr "" #: ppdc/sample.c:203 msgid "3.25x5.83\"" msgstr "" #: ppdc/sample.c:204 msgid "3.25x7.83\"" msgstr "" #: ppdc/sample.c:4 msgid "3.5 x 5" msgstr "" #: ppdc/sample.c:171 msgid "3.5\" Disk" msgstr "" #: ppdc/sample.c:205 msgid "3.50x1.00\"" msgstr "" #: ppdc/sample.c:377 msgid "30" msgstr "" #: ppdc/sample.c:325 msgid "30 mm/sec." msgstr "" #: ppdc/sample.c:334 msgid "300 mm/sec." msgstr "" #: ppdc/sample.c:234 msgid "300dpi" msgstr "" #: ppdc/sample.c:405 msgid "35" msgstr "" #: ppdc/sample.c:246 msgid "360dpi" msgstr "" #: ppdc/sample.c:245 msgid "360x180dpi" msgstr "" #: ppdc/sample.c:310 msgid "4" msgstr "" #: ppdc/sample.c:382 msgid "4 inches/sec." msgstr "" #: cups/ppd-cache.c:3017 msgid "4-Hole Punch (Landscape)" msgstr "" #: cups/ppd-cache.c:3015 msgid "4-Hole Punch (Portrait)" msgstr "" #: cups/ppd-cache.c:3014 msgid "4-Hole Punch (Reverse Landscape)" msgstr "" #: cups/ppd-cache.c:3016 msgid "4-Hole Punch (Reverse Portrait)" msgstr "" #: ppdc/sample.c:206 msgid "4.00x1.00\"" msgstr "" #: ppdc/sample.c:214 msgid "4.00x13.00\"" msgstr "" #: ppdc/sample.c:207 msgid "4.00x2.00\"" msgstr "" #: ppdc/sample.c:208 msgid "4.00x2.50\"" msgstr "" #: ppdc/sample.c:209 msgid "4.00x3.00\"" msgstr "" #: ppdc/sample.c:210 msgid "4.00x4.00\"" msgstr "" #: ppdc/sample.c:211 msgid "4.00x5.00\"" msgstr "" #: ppdc/sample.c:212 msgid "4.00x6.00\"" msgstr "" #: ppdc/sample.c:213 msgid "4.00x6.50\"" msgstr "" #: ppdc/sample.c:406 msgid "40" msgstr "" #: ppdc/sample.c:326 msgid "40 mm/sec." msgstr "" #: ppdc/sample.c:407 msgid "45" msgstr "" #: ppdc/sample.c:311 msgid "5" msgstr "" #: ppdc/sample.c:432 msgid "5 inches/sec." msgstr "" #: ppdc/sample.c:5 msgid "5 x 7" msgstr "" #: ppdc/sample.c:408 msgid "50" msgstr "" #: ppdc/sample.c:409 msgid "55" msgstr "" #: ppdc/sample.c:312 msgid "6" msgstr "" #: ppdc/sample.c:433 msgid "6 inches/sec." msgstr "" #: ppdc/sample.c:215 msgid "6.00x1.00\"" msgstr "" #: ppdc/sample.c:216 msgid "6.00x2.00\"" msgstr "" #: ppdc/sample.c:217 msgid "6.00x3.00\"" msgstr "" #: ppdc/sample.c:218 msgid "6.00x4.00\"" msgstr "" #: ppdc/sample.c:219 msgid "6.00x5.00\"" msgstr "" #: ppdc/sample.c:220 msgid "6.00x6.00\"" msgstr "" #: ppdc/sample.c:221 msgid "6.00x6.50\"" msgstr "" #: ppdc/sample.c:410 msgid "60" msgstr "" #: ppdc/sample.c:327 msgid "60 mm/sec." msgstr "" #: ppdc/sample.c:253 msgid "600dpi" msgstr "" #: ppdc/sample.c:242 msgid "60dpi" msgstr "" #: ppdc/sample.c:248 msgid "60x72dpi" msgstr "" #: ppdc/sample.c:411 msgid "65" msgstr "" #: ppdc/sample.c:313 msgid "7" msgstr "" #: ppdc/sample.c:435 msgid "7 inches/sec." msgstr "" #: ppdc/sample.c:11 msgid "7 x 9" msgstr "" #: ppdc/sample.c:412 msgid "70" msgstr "" #: ppdc/sample.c:413 msgid "75" msgstr "" #: ppdc/sample.c:314 msgid "8" msgstr "" #: ppdc/sample.c:436 msgid "8 inches/sec." msgstr "" #: ppdc/sample.c:12 msgid "8 x 10" msgstr "" #: ppdc/sample.c:222 msgid "8.00x1.00\"" msgstr "" #: ppdc/sample.c:223 msgid "8.00x2.00\"" msgstr "" #: ppdc/sample.c:224 msgid "8.00x3.00\"" msgstr "" #: ppdc/sample.c:225 msgid "8.00x4.00\"" msgstr "" #: ppdc/sample.c:226 msgid "8.00x5.00\"" msgstr "" #: ppdc/sample.c:227 msgid "8.00x6.00\"" msgstr "" #: ppdc/sample.c:228 msgid "8.00x6.50\"" msgstr "" #: ppdc/sample.c:414 msgid "80" msgstr "" #: ppdc/sample.c:328 msgid "80 mm/sec." msgstr "" #: ppdc/sample.c:415 msgid "85" msgstr "" #: ppdc/sample.c:315 msgid "9" msgstr "" #: ppdc/sample.c:437 msgid "9 inches/sec." msgstr "" #: ppdc/sample.c:13 msgid "9 x 11" msgstr "" #: ppdc/sample.c:14 msgid "9 x 12" msgstr "" #: ppdc/sample.c:247 msgid "9-Pin Series" msgstr "" #: ppdc/sample.c:416 msgid "90" msgstr "" #: ppdc/sample.c:417 msgid "95" msgstr "" #: berkeley/lpc.c:203 msgid "?Invalid help command unknown." msgstr "" #: cgi-bin/admin.c:2352 msgid "A Samba password is required to export printer drivers" msgstr "" #: cgi-bin/admin.c:2348 msgid "A Samba username is required to export printer drivers" msgstr "" #: scheduler/ipp.c:2327 #, c-format msgid "A class named \"%s\" already exists." msgstr "" #: scheduler/ipp.c:938 #, c-format msgid "A printer named \"%s\" already exists." msgstr "" #: ppdc/sample.c:15 msgid "A0" msgstr "" #: ppdc/sample.c:16 msgid "A0 Long Edge" msgstr "" #: ppdc/sample.c:17 msgid "A1" msgstr "" #: ppdc/sample.c:18 msgid "A1 Long Edge" msgstr "" #: ppdc/sample.c:37 msgid "A10" msgstr "" #: ppdc/sample.c:19 msgid "A2" msgstr "" #: ppdc/sample.c:20 msgid "A2 Long Edge" msgstr "" #: ppdc/sample.c:21 msgid "A3" msgstr "" #: ppdc/sample.c:22 msgid "A3 Long Edge" msgstr "" #: ppdc/sample.c:23 msgid "A3 Oversize" msgstr "" #: ppdc/sample.c:24 msgid "A3 Oversize Long Edge" msgstr "" #: ppdc/sample.c:25 msgid "A4" msgstr "" #: ppdc/sample.c:27 msgid "A4 Long Edge" msgstr "" #: ppdc/sample.c:26 msgid "A4 Oversize" msgstr "" #: ppdc/sample.c:28 msgid "A4 Small" msgstr "" #: ppdc/sample.c:29 msgid "A5" msgstr "" #: ppdc/sample.c:31 msgid "A5 Long Edge" msgstr "" #: ppdc/sample.c:30 msgid "A5 Oversize" msgstr "" #: ppdc/sample.c:32 msgid "A6" msgstr "" #: ppdc/sample.c:33 msgid "A6 Long Edge" msgstr "" #: ppdc/sample.c:34 msgid "A7" msgstr "" #: ppdc/sample.c:35 msgid "A8" msgstr "" #: ppdc/sample.c:36 msgid "A9" msgstr "" #: ppdc/sample.c:38 msgid "ANSI A" msgstr "" #: ppdc/sample.c:39 msgid "ANSI B" msgstr "" #: ppdc/sample.c:40 msgid "ANSI C" msgstr "" #: ppdc/sample.c:41 msgid "ANSI D" msgstr "" #: ppdc/sample.c:42 msgid "ANSI E" msgstr "" #: ppdc/sample.c:47 msgid "ARCH C" msgstr "" #: ppdc/sample.c:48 msgid "ARCH C Long Edge" msgstr "" #: ppdc/sample.c:49 msgid "ARCH D" msgstr "" #: ppdc/sample.c:50 msgid "ARCH D Long Edge" msgstr "" #: ppdc/sample.c:51 msgid "ARCH E" msgstr "" #: ppdc/sample.c:52 msgid "ARCH E Long Edge" msgstr "" #: cgi-bin/classes.c:159 cgi-bin/printers.c:162 msgid "Accept Jobs" msgstr "" #: cups/http-support.c:1352 msgid "Accepted" msgstr "" #: cups/ppd-cache.c:2993 msgid "Accordian Fold" msgstr "" #: cgi-bin/admin.c:544 msgid "Add Class" msgstr "" #: cgi-bin/admin.c:857 msgid "Add Printer" msgstr "" #: cgi-bin/admin.c:418 cgi-bin/admin.c:451 cgi-bin/admin.c:499 #: cgi-bin/admin.c:509 msgid "Add RSS Subscription" msgstr "" #: ppdc/sample.c:163 msgid "Address" msgstr "" #: cgi-bin/admin.c:184 cgi-bin/admin.c:258 cgi-bin/admin.c:2729 msgid "Administration" msgstr "" #: cups/ppd-cache.c:3472 msgid "Advanced Photo Paper" msgstr "" #: cups/ppd-cache.c:3386 msgid "Alternate" msgstr "" #: cups/ppd-cache.c:3394 msgid "Alternate Roll" msgstr "" #: cups/ppd-cache.c:3466 msgid "Aluminum" msgstr "" #: ppdc/sample.c:424 msgid "Always" msgstr "" #: backend/socket.c:118 msgid "AppSocket/HP JetDirect" msgstr "" #: ppdc/sample.c:445 msgid "Applicator" msgstr "" #: cups/ppd-cache.c:3500 msgid "Archival Envelope" msgstr "" #: cups/ppd-cache.c:3512 msgid "Archival Fabric" msgstr "" #: cups/ppd-cache.c:3589 msgid "Archival Paper" msgstr "" #: cups/ppd-cache.c:3561 msgid "Archival Photo Paper" msgstr "" #: scheduler/ipp.c:1033 #, c-format msgid "Attempt to set %s printer-state to bad value %d." msgstr "" #: scheduler/ipp.c:5464 scheduler/ipp.c:5490 #, c-format msgid "Attribute \"%s\" is in the wrong group." msgstr "" #: scheduler/ipp.c:5466 scheduler/ipp.c:5492 #, c-format msgid "Attribute \"%s\" is the wrong value type." msgstr "" #: scheduler/ipp.c:258 #, c-format msgid "Attribute groups are out of order (%x < %x)." msgstr "" #: cups/ppd-cache.c:3384 cups/ppd-cache.c:3467 cups/ppd-cache.c:3771 msgid "Automatic" msgstr "" #: ppdc/sample.c:126 msgid "B0" msgstr "" #: ppdc/sample.c:127 msgid "B1" msgstr "" #: ppdc/sample.c:137 msgid "B10" msgstr "" #: ppdc/sample.c:128 msgid "B2" msgstr "" #: ppdc/sample.c:129 msgid "B3" msgstr "" #: ppdc/sample.c:130 msgid "B4" msgstr "" #: ppdc/sample.c:131 msgid "B5" msgstr "" #: ppdc/sample.c:132 msgid "B5 Oversize" msgstr "" #: ppdc/sample.c:133 msgid "B6" msgstr "" #: ppdc/sample.c:134 msgid "B7" msgstr "" #: ppdc/sample.c:135 msgid "B8" msgstr "" #: ppdc/sample.c:136 msgid "B9" msgstr "" #: cups/ppd-cache.c:3468 msgid "Back Print Film" msgstr "" #: scheduler/ipp.c:11283 #, c-format msgid "Bad 'document-format' value \"%s\"." msgstr "" #: cups/dest.c:1654 msgid "Bad NULL dests pointer" msgstr "" #: cups/ppd.c:320 msgid "Bad OpenGroup" msgstr "" #: cups/ppd.c:322 msgid "Bad OpenUI/JCLOpenUI" msgstr "" #: cups/ppd.c:324 msgid "Bad OrderDependency" msgstr "" #: cups/ppd-cache.c:458 cups/ppd-cache.c:505 cups/ppd-cache.c:543 #: cups/ppd-cache.c:549 cups/ppd-cache.c:565 cups/ppd-cache.c:581 #: cups/ppd-cache.c:590 cups/ppd-cache.c:598 cups/ppd-cache.c:615 #: cups/ppd-cache.c:623 cups/ppd-cache.c:638 cups/ppd-cache.c:646 #: cups/ppd-cache.c:667 cups/ppd-cache.c:679 cups/ppd-cache.c:694 #: cups/ppd-cache.c:706 cups/ppd-cache.c:728 cups/ppd-cache.c:736 #: cups/ppd-cache.c:754 cups/ppd-cache.c:762 cups/ppd-cache.c:777 #: cups/ppd-cache.c:785 cups/ppd-cache.c:803 cups/ppd-cache.c:811 #: cups/ppd-cache.c:838 cups/ppd-cache.c:908 cups/ppd-cache.c:916 #: cups/ppd-cache.c:924 msgid "Bad PPD cache file." msgstr "" #: scheduler/ipp.c:2702 msgid "Bad PPD file." msgstr "" #: cups/http-support.c:1370 msgid "Bad Request" msgstr "" #: cups/snmp.c:956 msgid "Bad SNMP version number" msgstr "" #: cups/ppd.c:325 msgid "Bad UIConstraints" msgstr "" #: cups/hash.c:53 cups/http-support.c:1464 msgid "Bad arguments to function" msgstr "" #: scheduler/ipp.c:1418 #, c-format msgid "Bad copies value %d." msgstr "" #: cups/ppd.c:333 msgid "Bad custom parameter" msgstr "" #: cups/http-support.c:1604 scheduler/ipp.c:2407 #, c-format msgid "Bad device-uri \"%s\"." msgstr "" #: scheduler/ipp.c:2452 #, c-format msgid "Bad device-uri scheme \"%s\"." msgstr "" #: scheduler/ipp.c:8491 scheduler/ipp.c:8509 scheduler/ipp.c:9737 #, c-format msgid "Bad document-format \"%s\"." msgstr "" #: scheduler/ipp.c:9755 #, c-format msgid "Bad document-format-default \"%s\"." msgstr "" #: cups/ppd-util.c:170 msgid "Bad filename buffer" msgstr "" #: cups/http-support.c:1473 msgid "Bad hostname/address in URI" msgstr "" #: scheduler/ipp.c:1593 #, c-format msgid "Bad job-name value: %s" msgstr "" #: scheduler/ipp.c:1586 msgid "Bad job-name value: Wrong type or count." msgstr "" #: scheduler/ipp.c:10351 msgid "Bad job-priority value." msgstr "" #: scheduler/ipp.c:1448 #, c-format msgid "Bad job-sheets value \"%s\"." msgstr "" #: scheduler/ipp.c:1432 msgid "Bad job-sheets value type." msgstr "" #: scheduler/ipp.c:10381 msgid "Bad job-state value." msgstr "" #: scheduler/ipp.c:3043 scheduler/ipp.c:3505 scheduler/ipp.c:6276 #: scheduler/ipp.c:6423 scheduler/ipp.c:7920 scheduler/ipp.c:8189 #: scheduler/ipp.c:9055 scheduler/ipp.c:9279 scheduler/ipp.c:9631 #: scheduler/ipp.c:10244 #, c-format msgid "Bad job-uri \"%s\"." msgstr "" #: scheduler/ipp.c:2093 scheduler/ipp.c:5815 #, c-format msgid "Bad notify-pull-method \"%s\"." msgstr "" #: scheduler/ipp.c:2057 scheduler/ipp.c:5779 #, c-format msgid "Bad notify-recipient-uri \"%s\"." msgstr "" #: scheduler/ipp.c:1464 #, c-format msgid "Bad number-up value %d." msgstr "" #: cups/adminutil.c:280 #, c-format msgid "Bad option + choice on line %d." msgstr "" #: scheduler/ipp.c:1481 #, c-format msgid "Bad page-ranges values %d-%d." msgstr "" #: cups/http-support.c:1470 msgid "Bad port number in URI" msgstr "" #: scheduler/ipp.c:2498 #, c-format msgid "Bad port-monitor \"%s\"." msgstr "" #: scheduler/ipp.c:2579 #, c-format msgid "Bad printer-state value %d." msgstr "" #: cups/dest.c:687 cups/dest.c:1183 cups/dest.c:1234 msgid "Bad printer-uri." msgstr "" #: scheduler/ipp.c:226 #, c-format msgid "Bad request ID %d." msgstr "" #: scheduler/ipp.c:211 #, c-format msgid "Bad request version number %d.%d." msgstr "" #: scheduler/ipp.c:1604 #, c-format msgid "Bad requesting-user-name value: %s" msgstr "" #: cups/http-support.c:1467 msgid "Bad resource in URI" msgstr "" #: cups/http-support.c:1479 msgid "Bad scheme in URI" msgstr "" #: cgi-bin/admin.c:1468 msgid "Bad subscription ID" msgstr "" #: cups/http-support.c:1476 msgid "Bad username in URI" msgstr "" #: cups/ppd.c:335 msgid "Bad value string" msgstr "" #: cups/http-support.c:1482 msgid "Bad/empty URI" msgstr "" #: cups/ppd-cache.c:2978 msgid "Bale" msgstr "" #: cgi-bin/admin.c:3274 cgi-bin/admin.c:3520 msgid "Banners" msgstr "" #: cups/ppd-cache.c:2979 msgid "Bind" msgstr "" #: cups/ppd-cache.c:2983 msgid "Bind (Landscape)" msgstr "" #: cups/ppd-cache.c:2981 msgid "Bind (Portrait)" msgstr "" #: cups/ppd-cache.c:2980 msgid "Bind (Reverse Landscape)" msgstr "" #: cups/ppd-cache.c:2982 msgid "Bind (Reverse Portrait)" msgstr "" #: cups/ppd-cache.c:3501 msgid "Bond Envelope" msgstr "" #: ppdc/sample.c:282 msgid "Bond Paper" msgstr "" #: cups/ppd-cache.c:3996 msgid "Booklet" msgstr "" #: cups/ppd-cache.c:2984 msgid "Booklet Maker" msgstr "" #: backend/usb-darwin.c:2008 #, c-format msgid "Boolean expected for waiteof option \"%s\"." msgstr "" #: cups/ppd-cache.c:3397 msgid "Bottom" msgstr "" #: cups/ppd-cache.c:3772 msgid "Bottom Tray" msgstr "" #: filter/pstops.c:2032 msgid "Buffer overflow detected, aborting." msgstr "" #: cups/ppd-cache.c:3471 msgid "CD" msgstr "" #: ppdc/sample.c:277 msgid "CMYK" msgstr "" #: ppdc/sample.c:358 msgid "CPCL Label Printer" msgstr "" #: cgi-bin/classes.c:163 cgi-bin/printers.c:166 msgid "Cancel Jobs" msgstr "" #: cgi-bin/admin.c:1469 cgi-bin/admin.c:1508 cgi-bin/admin.c:1518 msgid "Cancel RSS Subscription" msgstr "" #: backend/ipp.c:2264 msgid "Canceling print job." msgstr "" #: scheduler/ipp.c:1009 scheduler/ipp.c:2554 msgid "Cannot change printer-is-shared for remote queues." msgstr "" #: scheduler/ipp.c:2541 msgid "Cannot share a remote Kerberized printer." msgstr "" #: cups/ppd-cache.c:3469 msgid "Cardboard" msgstr "" #: cups/ppd-cache.c:3470 msgid "Cardstock" msgstr "" #: ppdc/sample.c:271 msgid "Cassette" msgstr "" #: cups/ppd-cache.c:3401 msgid "Center" msgstr "" #: cups/ppd-cache.c:3773 msgid "Center Tray" msgstr "" #: cgi-bin/admin.c:1639 cgi-bin/admin.c:1781 cgi-bin/admin.c:1794 #: cgi-bin/admin.c:1805 msgid "Change Settings" msgstr "" #: scheduler/ipp.c:2105 scheduler/ipp.c:5827 #, c-format msgid "Character set \"%s\" not supported." msgstr "" #: cgi-bin/classes.c:185 cgi-bin/classes.c:311 msgid "Classes" msgstr "" #: cgi-bin/printers.c:172 msgid "Clean Print Heads" msgstr "" #: scheduler/ipp.c:3957 msgid "Close-Job doesn't support the job-uri attribute." msgstr "" #: cups/ppd-cache.c:2985 msgid "Coat" msgstr "" #: cups/ppd-cache.c:3502 msgid "Coated Envelope" msgstr "" #: cups/ppd-cache.c:3590 msgid "Coated Paper" msgstr "" #: cups/ppd-cache.c:3675 ppdc/sample.c:276 msgid "Color" msgstr "" #: cups/ppd-cache.c:3651 cups/ppd-cache.c:3662 cups/ppd-cache.c:3673 #: cups/ppd-cache.c:3683 ppdc/sample.c:274 msgid "Color Mode" msgstr "" #: cups/ppd-cache.c:3537 msgid "Colored Labels" msgstr "" #: berkeley/lpc.c:194 msgid "" "Commands may be abbreviated. Commands are:\n" "\n" "exit help quit status ?" msgstr "" #: cups/snmp.c:960 msgid "Community name uses indefinite length" msgstr "" #: backend/ipp.c:874 backend/lpd.c:939 backend/socket.c:380 msgid "Connected to printer." msgstr "" #: backend/ipp.c:710 backend/lpd.c:763 backend/socket.c:300 msgid "Connecting to printer." msgstr "" #: cups/http-support.c:1340 msgid "Continue" msgstr "" #: cups/ppd-cache.c:3485 ppdc/sample.c:360 msgid "Continuous" msgstr "" #: cups/ppd-cache.c:3486 msgid "Continuous Long" msgstr "" #: cups/ppd-cache.c:3487 msgid "Continuous Short" msgstr "" #: backend/lpd.c:1088 backend/lpd.c:1220 msgid "Control file sent successfully." msgstr "" #: backend/ipp.c:1398 backend/lpd.c:455 msgid "Copying print data." msgstr "" #: cups/ppd-cache.c:3503 msgid "Cotton Envelope" msgstr "" #: cups/ppd-cache.c:3591 msgid "Cotton Paper" msgstr "" #: cups/ppd-cache.c:2986 msgid "Cover" msgstr "" #: cups/http-support.c:1349 msgid "Created" msgstr "" #: cups/tls-darwin.c:730 cups/tls-gnutls.c:562 msgid "Credentials do not validate against site CA certificate." msgstr "" #: cups/tls-darwin.c:741 cups/tls-gnutls.c:579 msgid "Credentials have expired." msgstr "" #: cups/ppd.c:1152 cups/ppd.c:1192 cups/ppd.c:1437 cups/ppd.c:1540 msgid "Custom" msgstr "" #: ppdc/sample.c:354 msgid "CustominCutInterval" msgstr "" #: ppdc/sample.c:352 msgid "CustominTearInterval" msgstr "" #: ppdc/sample.c:338 msgid "Cut" msgstr "" #: cups/ppd-cache.c:3042 msgid "Cut Media" msgstr "" #: ppdc/sample.c:446 msgid "Cutter" msgstr "" #: cups/ppd-cache.c:3496 msgid "DVD" msgstr "" #: ppdc/sample.c:239 msgid "Dark" msgstr "" #: ppdc/sample.c:235 msgid "Darkness" msgstr "" #: backend/lpd.c:1173 msgid "Data file sent successfully." msgstr "" #: cups/ppd-cache.c:3685 msgid "Deep Color" msgstr "" #: cgi-bin/admin.c:2078 cgi-bin/admin.c:2089 cgi-bin/admin.c:2134 msgid "Delete Class" msgstr "" #: cgi-bin/admin.c:2163 cgi-bin/admin.c:2174 cgi-bin/admin.c:2219 msgid "Delete Printer" msgstr "" #: ppdc/sample.c:273 msgid "DeskJet Series" msgstr "" #: scheduler/ipp.c:1347 #, c-format msgid "Destination \"%s\" is not accepting jobs." msgstr "" #: systemv/lpinfo.c:273 #, c-format msgid "" "Device: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s" msgstr "" #: ppdc/sample.c:431 msgid "Direct Thermal Media" msgstr "" #: cups/file.c:256 #, c-format msgid "Directory \"%s\" contains a relative path." msgstr "" #: cups/file.c:228 #, c-format msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "" #: cups/file.c:245 #, c-format msgid "Directory \"%s\" is a file." msgstr "" #: cups/file.c:216 #, c-format msgid "Directory \"%s\" not available: %s" msgstr "" #: cups/file.c:201 #, c-format msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "" #: ppdc/sample.c:340 msgid "Disabled" msgstr "" #: cups/ppd-cache.c:3390 msgid "Disc" msgstr "" #: scheduler/ipp.c:6325 #, c-format msgid "Document #%d does not exist in job #%d." msgstr "" #: cups/ppd-cache.c:2994 msgid "Double Gate Fold" msgstr "" #: cups/ppd-cache.c:3035 msgid "Double Staple (Landscape)" msgstr "" #: cups/ppd-cache.c:3033 msgid "Double Staple (Portrait)" msgstr "" #: cups/ppd-cache.c:3032 msgid "Double Staple (Reverse Landscape)" msgstr "" #: cups/ppd-cache.c:3034 msgid "Double Staple (Reverse Portrait)" msgstr "" #: cups/ppd-cache.c:3494 msgid "Double Wall Cardboard" msgstr "" #: cups/ppd-cache.c:4054 cups/ppd-cache.c:4056 cups/ppd-cache.c:4114 #: cups/ppd-cache.c:4146 msgid "Draft" msgstr "" #: cups/ppd-cache.c:3495 msgid "Dry Film" msgstr "" #: ppdc/sample.c:267 msgid "Duplexer" msgstr "" #: ppdc/sample.c:229 msgid "Dymo" msgstr "" #: ppdc/sample.c:426 msgid "EPL1 Label Printer" msgstr "" #: ppdc/sample.c:429 msgid "EPL2 Label Printer" msgstr "" #: cgi-bin/admin.c:1833 cgi-bin/admin.c:1845 cgi-bin/admin.c:1899 #: cgi-bin/admin.c:1906 cgi-bin/admin.c:1941 cgi-bin/admin.c:1954 #: cgi-bin/admin.c:1978 cgi-bin/admin.c:2051 msgid "Edit Configuration File" msgstr "" #: cups/ppd-cache.c:3497 msgid "Embossing Foil" msgstr "" #: cups/adminutil.c:325 msgid "Empty PPD file." msgstr "" #: cups/http.c:4635 msgid "Encryption is not supported." msgstr "" #: cups/ppd-cache.c:3498 msgid "End Board" msgstr "" #. TRANSLATORS: Banner/cover sheet after the print job. #: cgi-bin/admin.c:3545 msgid "Ending Banner" msgstr "" #: cups/ppd-cache.c:2995 msgid "Engineering Z Fold" msgstr "" #: ppdc/sample.c:2 msgid "English" msgstr "" #: scheduler/client.c:2226 msgid "Enter your username and password or the root username and password to access this page. If you are using Kerberos authentication, make sure you have a valid Kerberos ticket." msgstr "" #: cups/ppd-cache.c:3389 cups/ppd-cache.c:3499 msgid "Envelope" msgstr "" #: ppdc/sample.c:73 msgid "Envelope #10" msgstr "" #: ppdc/sample.c:74 msgid "Envelope #11" msgstr "" #: ppdc/sample.c:75 msgid "Envelope #12" msgstr "" #: ppdc/sample.c:76 msgid "Envelope #14" msgstr "" #: ppdc/sample.c:77 msgid "Envelope #9" msgstr "" #: ppdc/sample.c:89 msgid "Envelope B4" msgstr "" #: ppdc/sample.c:90 msgid "Envelope B5" msgstr "" #: ppdc/sample.c:91 msgid "Envelope B6" msgstr "" #: ppdc/sample.c:78 msgid "Envelope C0" msgstr "" #: ppdc/sample.c:79 msgid "Envelope C1" msgstr "" #: ppdc/sample.c:80 msgid "Envelope C2" msgstr "" #: ppdc/sample.c:81 msgid "Envelope C3" msgstr "" #: ppdc/sample.c:67 msgid "Envelope C4" msgstr "" #: ppdc/sample.c:68 msgid "Envelope C5" msgstr "" #: ppdc/sample.c:69 msgid "Envelope C6" msgstr "" #: ppdc/sample.c:82 msgid "Envelope C65" msgstr "" #: ppdc/sample.c:83 msgid "Envelope C7" msgstr "" #: ppdc/sample.c:84 msgid "Envelope Choukei 3" msgstr "" #: ppdc/sample.c:85 msgid "Envelope Choukei 3 Long Edge" msgstr "" #: ppdc/sample.c:86 msgid "Envelope Choukei 4" msgstr "" #: ppdc/sample.c:87 msgid "Envelope Choukei 4 Long Edge" msgstr "" #: ppdc/sample.c:70 msgid "Envelope DL" msgstr "" #: ppdc/sample.c:261 msgid "Envelope Feed" msgstr "" #: ppdc/sample.c:88 msgid "Envelope Invite" msgstr "" #: ppdc/sample.c:92 msgid "Envelope Italian" msgstr "" #: ppdc/sample.c:93 msgid "Envelope Kaku2" msgstr "" #: ppdc/sample.c:94 msgid "Envelope Kaku2 Long Edge" msgstr "" #: ppdc/sample.c:95 msgid "Envelope Kaku3" msgstr "" #: ppdc/sample.c:96 msgid "Envelope Kaku3 Long Edge" msgstr "" #: ppdc/sample.c:97 msgid "Envelope Monarch" msgstr "" #: ppdc/sample.c:99 msgid "Envelope PRC1" msgstr "" #: ppdc/sample.c:100 msgid "Envelope PRC1 Long Edge" msgstr "" #: ppdc/sample.c:117 msgid "Envelope PRC10" msgstr "" #: ppdc/sample.c:118 msgid "Envelope PRC10 Long Edge" msgstr "" #: ppdc/sample.c:101 msgid "Envelope PRC2" msgstr "" #: ppdc/sample.c:102 msgid "Envelope PRC2 Long Edge" msgstr "" #: ppdc/sample.c:103 msgid "Envelope PRC3" msgstr "" #: ppdc/sample.c:104 msgid "Envelope PRC3 Long Edge" msgstr "" #: ppdc/sample.c:105 msgid "Envelope PRC4" msgstr "" #: ppdc/sample.c:106 msgid "Envelope PRC4 Long Edge" msgstr "" #: ppdc/sample.c:108 msgid "Envelope PRC5 Long Edge" msgstr "" #: ppdc/sample.c:107 msgid "Envelope PRC5PRC5" msgstr "" #: ppdc/sample.c:109 msgid "Envelope PRC6" msgstr "" #: ppdc/sample.c:110 msgid "Envelope PRC6 Long Edge" msgstr "" #: ppdc/sample.c:111 msgid "Envelope PRC7" msgstr "" #: ppdc/sample.c:112 msgid "Envelope PRC7 Long Edge" msgstr "" #: ppdc/sample.c:113 msgid "Envelope PRC8" msgstr "" #: ppdc/sample.c:114 msgid "Envelope PRC8 Long Edge" msgstr "" #: ppdc/sample.c:115 msgid "Envelope PRC9" msgstr "" #: ppdc/sample.c:116 msgid "Envelope PRC9 Long Edge" msgstr "" #: ppdc/sample.c:98 msgid "Envelope Personal" msgstr "" #: ppdc/sample.c:119 msgid "Envelope You4" msgstr "" #: ppdc/sample.c:120 msgid "Envelope You4 Long Edge" msgstr "" #: test/ippfind.c:2815 msgid "Environment Variables:" msgstr "" #: ppdc/sample.c:240 msgid "Epson" msgstr "" #: cgi-bin/admin.c:3588 msgid "Error Policy" msgstr "" #: filter/rastertopwg.c:457 msgid "Error reading raster data." msgstr "" #: filter/rastertopwg.c:426 filter/rastertopwg.c:447 filter/rastertopwg.c:465 #: filter/rastertopwg.c:476 msgid "Error sending raster data." msgstr "" #: systemv/lpinfo.c:208 systemv/lpmove.c:86 msgid "Error: need hostname after \"-h\" option." msgstr "" #: ppdc/sample.c:122 msgid "European Fanfold" msgstr "" #: ppdc/sample.c:123 msgid "European Fanfold Legal" msgstr "" #: ppdc/sample.c:350 msgid "Every 10 Labels" msgstr "" #: ppdc/sample.c:342 msgid "Every 2 Labels" msgstr "" #: ppdc/sample.c:343 msgid "Every 3 Labels" msgstr "" #: ppdc/sample.c:344 msgid "Every 4 Labels" msgstr "" #: ppdc/sample.c:345 msgid "Every 5 Labels" msgstr "" #: ppdc/sample.c:346 msgid "Every 6 Labels" msgstr "" #: ppdc/sample.c:347 msgid "Every 7 Labels" msgstr "" #: ppdc/sample.c:348 msgid "Every 8 Labels" msgstr "" #: ppdc/sample.c:349 msgid "Every 9 Labels" msgstr "" #: ppdc/sample.c:341 msgid "Every Label" msgstr "" #: cups/ppd-cache.c:3477 msgid "Everyday Glossy Photo Paper" msgstr "" #: cups/ppd-cache.c:3478 msgid "Everyday Matte Paper" msgstr "" #: ppdc/sample.c:121 msgid "Executive" msgstr "" #: cups/http-support.c:1398 msgid "Expectation Failed" msgstr "" #: cgi-bin/admin.c:2340 cgi-bin/admin.c:2359 msgid "Export Printers to Samba" msgstr "" #: test/ippfind.c:2761 msgid "Expressions:" msgstr "" #: cups/ppd-cache.c:3479 msgid "Extra Heavyweight Paper" msgstr "" #: systemv/cupstestdsc.c:164 systemv/cupstestdsc.c:181 #: systemv/cupstestdsc.c:206 systemv/cupstestdsc.c:223 #: systemv/cupstestdsc.c:247 systemv/cupstestdsc.c:265 #: systemv/cupstestdsc.c:294 systemv/cupstestdsc.c:331 #: systemv/cupstestdsc.c:341 systemv/cupstestdsc.c:351 #: systemv/cupstestdsc.c:361 systemv/cupstestdsc.c:371 #: systemv/cupstestdsc.c:379 msgid "FAIL" msgstr "" #: cups/ppd-cache.c:3511 msgid "Fabric" msgstr "" #: cups/ppd-cache.c:3774 msgid "Face Down" msgstr "" #: cups/ppd-cache.c:3775 msgid "Face Up" msgstr "" #: cups/ppd-cache.c:3653 msgid "Fast Grayscale" msgstr "" #: cups/file.c:260 #, c-format msgid "File \"%s\" contains a relative path." msgstr "" #: cups/file.c:235 #, c-format msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "" #: cups/file.c:249 #, c-format msgid "File \"%s\" is a directory." msgstr "" #: cups/file.c:221 #, c-format msgid "File \"%s\" not available: %s" msgstr "" #: cups/file.c:207 #, c-format msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "" #: ppdc/sample.c:169 msgid "File Folder" msgstr "" #: scheduler/ipp.c:2428 #, c-format msgid "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\"." msgstr "" #: cups/ppd-cache.c:3518 msgid "Film" msgstr "" #: cups/ppd-cache.c:3504 msgid "Fine Envelope" msgstr "" #: filter/rastertoepson.c:1136 filter/rastertohp.c:808 #: filter/rastertolabel.c:1257 #, c-format msgid "Finished page %d." msgstr "" #: cups/ppd-cache.c:3519 msgid "Flexo Base" msgstr "" #: cups/ppd-cache.c:3520 msgid "Flexo Photo Polymer" msgstr "" #: cups/ppd-cache.c:3521 msgid "Flute" msgstr "" #: cups/ppd-cache.c:3522 msgid "Foil" msgstr "" #: cups/ppd-cache.c:2992 cups/ppd-cache.c:3911 msgid "Fold" msgstr "" #: ppdc/sample.c:125 msgid "Folio" msgstr "" #: cups/http-support.c:1377 msgid "Forbidden" msgstr "" #: cups/http-support.c:1361 msgid "Found" msgstr "" #: cups/ppd-cache.c:3523 msgid "Full Cut Tabs" msgstr "" #: cups/ppd-cache.c:2996 msgid "Gate Fold" msgstr "" #: cups/ppd.c:783 cups/ppd.c:1341 msgid "General" msgstr "" #: ppdc/sample.c:251 msgid "Generic" msgstr "" #: cups/snmp.c:970 msgid "Get-Response-PDU uses indefinite length" msgstr "" #: cups/ppd-cache.c:3524 msgid "Glass" msgstr "" #: cups/ppd-cache.c:3525 msgid "Glass Colored" msgstr "" #: cups/ppd-cache.c:3526 msgid "Glass Opaque" msgstr "" #: cups/ppd-cache.c:3527 msgid "Glass Surfaced" msgstr "" #: cups/ppd-cache.c:3528 msgid "Glass Textured" msgstr "" #: cups/ppd-cache.c:3473 msgid "Glossy Brochure Paper" msgstr "" #: cups/ppd-cache.c:3513 msgid "Glossy Fabric" msgstr "" #: cups/ppd-cache.c:3538 msgid "Glossy Labels" msgstr "" #: cups/ppd-cache.c:3489 msgid "Glossy Optical Disc" msgstr "" #: ppdc/sample.c:285 msgid "Glossy Paper" msgstr "" #: cups/ppd-cache.c:3563 msgid "Glossy Photo Paper" msgstr "" #: scheduler/ipp.c:3021 scheduler/ipp.c:3431 scheduler/ipp.c:3969 #: scheduler/ipp.c:6254 scheduler/ipp.c:6401 scheduler/ipp.c:7897 #: scheduler/ipp.c:9033 scheduler/ipp.c:9257 scheduler/ipp.c:9609 #: scheduler/ipp.c:10222 msgid "Got a printer-uri attribute but no job-id." msgstr "" #: cups/ppd-cache.c:3529 msgid "Gravure Cylinder" msgstr "" #: cups/ppd-cache.c:3664 ppdc/sample.c:275 msgid "Grayscale" msgstr "" #: ppdc/sample.c:272 msgid "HP" msgstr "" #: cups/ppd-cache.c:3392 msgid "Hagaki" msgstr "" #: cups/ppd-cache.c:2997 msgid "Half Fold" msgstr "" #: cups/ppd-cache.c:2998 msgid "Half Z Fold" msgstr "" #: ppdc/sample.c:170 msgid "Hanging Folder" msgstr "" #: cups/hash.c:274 msgid "Hash buffer too small." msgstr "" #: cups/ppd-cache.c:3594 msgid "Heavyweight Coated Paper" msgstr "" #: cups/ppd-cache.c:3505 msgid "Heavyweight Envelope" msgstr "" #: cups/ppd-cache.c:3593 msgid "Heavyweight Paper" msgstr "" #: cgi-bin/help.c:137 msgid "Help file not in index." msgstr "" #: cups/ppd-cache.c:4059 cups/ppd-cache.c:4121 cups/ppd-cache.c:4149 msgid "High" msgstr "" #: cups/ppd-cache.c:3514 msgid "High Gloss Fabric" msgstr "" #: cups/ppd-cache.c:3539 msgid "High Gloss Labels" msgstr "" #: cups/ppd-cache.c:3490 msgid "High Gloss Optical Disc" msgstr "" #: cups/ppd-cache.c:3564 msgid "High Gloss Photo Paper" msgstr "" #: cups/ipp.c:3181 cups/ipp.c:3208 cups/ipp.c:3231 msgid "IPP 1setOf attribute with incompatible value tags." msgstr "" #: cups/ipp.c:3144 msgid "IPP attribute has no name." msgstr "" #: cups/ipp.c:7017 msgid "IPP attribute is not a member of the message." msgstr "" #: cups/ipp.c:3590 msgid "IPP begCollection value not 0 bytes." msgstr "" #: cups/ipp.c:3372 msgid "IPP boolean value not 1 byte." msgstr "" #: cups/ipp.c:3433 msgid "IPP date value not 11 bytes." msgstr "" #: cups/ipp.c:3611 msgid "IPP endCollection value not 0 bytes." msgstr "" #: cups/ipp.c:3347 msgid "IPP enum value not 4 bytes." msgstr "" #: cups/ipp.c:3074 msgid "IPP extension tag larger than 0x7FFFFFFF." msgstr "" #: cups/ipp.c:3344 msgid "IPP integer value not 4 bytes." msgstr "" #: cups/ipp.c:3543 msgid "IPP language length overflows value." msgstr "" #: cups/ipp.c:3552 msgid "IPP language length too large." msgstr "" #: cups/ipp.c:3258 msgid "IPP member name is not empty." msgstr "" #: cups/ipp.c:3637 msgid "IPP memberName value is empty." msgstr "" #: cups/ipp.c:3629 msgid "IPP memberName with no attribute." msgstr "" #: cups/ipp.c:3127 msgid "IPP name larger than 32767 bytes." msgstr "" #: cups/ipp.c:3510 msgid "IPP nameWithLanguage value less than minimum 4 bytes." msgstr "" #: cups/ipp.c:3667 msgid "IPP octetString length too large." msgstr "" #: cups/ipp.c:3478 msgid "IPP rangeOfInteger value not 8 bytes." msgstr "" #: cups/ipp.c:3451 msgid "IPP resolution value not 9 bytes." msgstr "" #: cups/ipp.c:3570 msgid "IPP string length overflows value." msgstr "" #: cups/ipp.c:3506 msgid "IPP textWithLanguage value less than minimum 4 bytes." msgstr "" #: cups/ipp.c:3330 msgid "IPP value larger than 32767 bytes." msgstr "" #: ppdc/sample.c:1 msgid "ISOLatin1" msgstr "" #: cups/ppd.c:328 msgid "Illegal control character" msgstr "" #: cups/ppd.c:329 msgid "Illegal main keyword string" msgstr "" #: cups/ppd.c:330 msgid "Illegal option keyword string" msgstr "" #: cups/ppd.c:331 msgid "Illegal translation string" msgstr "" #: cups/ppd.c:332 msgid "Illegal whitespace character" msgstr "" #: cups/ppd-cache.c:3530 msgid "Image Setter Paper" msgstr "" #: cups/ppd-cache.c:3531 msgid "Imaging Cylinder" msgstr "" #: cups/ppd-cache.c:3506 msgid "Inkjet Envelope" msgstr "" #: cups/ppd-cache.c:3540 msgid "Inkjet Labels" msgstr "" #: cups/ppd-cache.c:3595 msgid "Inkjet Paper" msgstr "" #: ppdc/sample.c:266 msgid "Installable Options" msgstr "" #: ppdc/sample.c:269 msgid "Installed" msgstr "" #: ppdc/sample.c:288 msgid "IntelliBar Label Printer" msgstr "" #: ppdc/sample.c:287 msgid "Intellitech" msgstr "" #: cups/http-support.c:1404 msgid "Internal Server Error" msgstr "" #: cups/ppd.c:319 msgid "Internal error" msgstr "" #: ppdc/sample.c:167 msgid "Internet Postage 2-Part" msgstr "" #: ppdc/sample.c:168 msgid "Internet Postage 3-Part" msgstr "" #: backend/ipp.c:328 msgid "Internet Printing Protocol" msgstr "" #: cups/pwg-media.c:291 cups/pwg-media.c:310 msgid "Invalid media name arguments." msgstr "" #: cups/dest-options.c:1099 msgid "Invalid media size." msgstr "" #: scheduler/ipp.c:2748 scheduler/ipp.c:7068 msgid "Invalid ppd-name value." msgstr "" #: filter/commandtops.c:112 #, c-format msgid "Invalid printer command \"%s\"." msgstr "" #: cups/ppd.c:1459 msgid "JCL" msgstr "" #: ppdc/sample.c:53 msgid "JIS B0" msgstr "" #: ppdc/sample.c:55 msgid "JIS B1" msgstr "" #: ppdc/sample.c:54 msgid "JIS B10" msgstr "" #: ppdc/sample.c:56 msgid "JIS B2" msgstr "" #: ppdc/sample.c:57 msgid "JIS B3" msgstr "" #: ppdc/sample.c:58 msgid "JIS B4" msgstr "" #: ppdc/sample.c:59 msgid "JIS B4 Long Edge" msgstr "" #: ppdc/sample.c:60 msgid "JIS B5" msgstr "" #: ppdc/sample.c:61 msgid "JIS B5 Long Edge" msgstr "" #: ppdc/sample.c:62 msgid "JIS B6" msgstr "" #: ppdc/sample.c:63 msgid "JIS B6 Long Edge" msgstr "" #: ppdc/sample.c:64 msgid "JIS B7" msgstr "" #: ppdc/sample.c:65 msgid "JIS B8" msgstr "" #: ppdc/sample.c:66 msgid "JIS B9" msgstr "" #: scheduler/ipp.c:9329 #, c-format msgid "Job #%d cannot be restarted - no files." msgstr "" #: scheduler/ipp.c:3061 scheduler/ipp.c:3295 scheduler/ipp.c:3354 #: scheduler/ipp.c:3533 scheduler/ipp.c:3979 scheduler/ipp.c:5913 #: scheduler/ipp.c:6294 scheduler/ipp.c:6441 scheduler/ipp.c:6778 #: scheduler/ipp.c:7738 scheduler/ipp.c:7760 scheduler/ipp.c:7938 #: scheduler/ipp.c:8163 scheduler/ipp.c:8206 scheduler/ipp.c:9073 #: scheduler/ipp.c:9297 scheduler/ipp.c:9649 scheduler/ipp.c:10262 #, c-format msgid "Job #%d does not exist." msgstr "" #: scheduler/ipp.c:3565 #, c-format msgid "Job #%d is already aborted - can't cancel." msgstr "" #: scheduler/ipp.c:3559 #, c-format msgid "Job #%d is already canceled - can't cancel." msgstr "" #: scheduler/ipp.c:3571 #, c-format msgid "Job #%d is already completed - can't cancel." msgstr "" #: scheduler/ipp.c:7964 scheduler/ipp.c:8248 scheduler/ipp.c:10277 #, c-format msgid "Job #%d is finished and cannot be altered." msgstr "" #: scheduler/ipp.c:9311 #, c-format msgid "Job #%d is not complete." msgstr "" #: scheduler/ipp.c:3076 #, c-format msgid "Job #%d is not held for authentication." msgstr "" #: scheduler/ipp.c:9087 #, c-format msgid "Job #%d is not held." msgstr "" #: cgi-bin/ipp-var.c:1036 msgid "Job Completed" msgstr "" #: cgi-bin/ipp-var.c:1034 msgid "Job Created" msgstr "" #: cgi-bin/ipp-var.c:1040 msgid "Job Options Changed" msgstr "" #: cgi-bin/ipp-var.c:1038 msgid "Job Stopped" msgstr "" #: scheduler/ipp.c:10359 msgid "Job is completed and cannot be changed." msgstr "" #: cgi-bin/jobs.c:190 msgid "Job operation failed" msgstr "" #: scheduler/ipp.c:10395 scheduler/ipp.c:10412 scheduler/ipp.c:10423 msgid "Job state cannot be changed." msgstr "" #: scheduler/ipp.c:9177 msgid "Job subscriptions cannot be renewed." msgstr "" #: cgi-bin/jobs.c:95 cgi-bin/jobs.c:106 cgi-bin/jobs.c:187 msgid "Jobs" msgstr "" #: cups/ppd-cache.c:3005 msgid "Jog" msgstr "" #: backend/lpd.c:172 msgid "LPD/LPR Host or Printer" msgstr "" #: ppdc/sample.c:230 msgid "Label Printer" msgstr "" #: ppdc/sample.c:441 msgid "Label Top" msgstr "" #: cups/ppd-cache.c:3536 msgid "Labels" msgstr "" #: cups/ppd-cache.c:3006 msgid "Laminate" msgstr "" #: cups/ppd-cache.c:3546 msgid "Laminating Foil" msgstr "" #: scheduler/ipp.c:2114 scheduler/ipp.c:5836 #, c-format msgid "Language \"%s\" not supported." msgstr "" #: ppdc/sample.c:164 msgid "Large Address" msgstr "" #: cups/ppd-cache.c:3387 msgid "Large Capacity" msgstr "" #: cups/ppd-cache.c:3776 msgid "Large Capacity Tray" msgstr "" #: ppdc/sample.c:286 msgid "LaserJet Series PCL 4/5" msgstr "" #: cups/ppd-cache.c:3399 msgid "Left" msgstr "" #: cups/ppd-cache.c:2999 msgid "Left Gate Fold" msgstr "" #: cups/ppd-cache.c:3777 msgid "Left Tray" msgstr "" #: cups/ppd-cache.c:3000 msgid "Letter Fold" msgstr "" #: ppdc/sample.c:43 msgid "Letter Oversize" msgstr "" #: ppdc/sample.c:44 msgid "Letter Oversize Long Edge" msgstr "" #: cups/ppd-cache.c:3547 cups/ppd-cache.c:3596 msgid "Letterhead" msgstr "" #: ppdc/sample.c:236 msgid "Light" msgstr "" #: cups/ppd-cache.c:3507 msgid "Lightweight Envelope" msgstr "" #: cups/ppd-cache.c:3597 msgid "Lightweight Paper" msgstr "" #: cups/ppd.c:327 msgid "Line longer than the maximum allowed (255 characters)" msgstr "" #: cgi-bin/admin.c:2377 msgid "List Available Printers" msgstr "" #: cups/ppd-localize.c:289 msgid "Load paper." msgstr "" #: scheduler/ipp.c:5545 msgid "Local printer created." msgstr "" #: cups/ppd-cache.c:3711 ppdc/sample.c:264 msgid "Long-Edge (Portrait)" msgstr "" #: cups/http-support.c:1731 msgid "Looking for printer." msgstr "" #: cups/ppd-cache.c:3778 msgid "Mailbox 1" msgstr "" #: cups/ppd-cache.c:3787 msgid "Mailbox 10" msgstr "" #: cups/ppd-cache.c:3779 msgid "Mailbox 2" msgstr "" #: cups/ppd-cache.c:3780 msgid "Mailbox 3" msgstr "" #: cups/ppd-cache.c:3781 msgid "Mailbox 4" msgstr "" #: cups/ppd-cache.c:3782 msgid "Mailbox 5" msgstr "" #: cups/ppd-cache.c:3783 msgid "Mailbox 6" msgstr "" #: cups/ppd-cache.c:3784 msgid "Mailbox 7" msgstr "" #: cups/ppd-cache.c:3785 msgid "Mailbox 8" msgstr "" #: cups/ppd-cache.c:3786 msgid "Mailbox 9" msgstr "" #: cups/ppd-cache.c:3385 msgid "Main" msgstr "" #: cups/ppd-cache.c:3393 msgid "Main Roll" msgstr "" #: cups/ppd-cache.c:3388 msgid "Manual" msgstr "" #: ppdc/sample.c:260 msgid "Manual Feed" msgstr "" #: cups/ppd-cache.c:3474 msgid "Matte Brochure Paper" msgstr "" #: cups/ppd-cache.c:3475 msgid "Matte Cover Paper" msgstr "" #: cups/ppd-cache.c:3515 msgid "Matte Fabric" msgstr "" #: cups/ppd-cache.c:3541 msgid "Matte Labels" msgstr "" #: cups/ppd-cache.c:3491 msgid "Matte Optical Disc" msgstr "" #: cups/ppd-cache.c:3565 msgid "Matte Photo Paper" msgstr "" #: cups/ppd.c:830 cups/ppd.c:1396 msgid "Media Size" msgstr "" #: cups/ppd.c:834 cups/ppd.c:1400 ppdc/sample.c:254 msgid "Media Source" msgstr "" #: ppdc/sample.c:359 msgid "Media Tracking" msgstr "" #: cups/ppd.c:832 cups/ppd.c:1398 ppdc/sample.c:280 msgid "Media Type" msgstr "" #: ppdc/sample.c:237 msgid "Medium" msgstr "" #: cups/ppd.c:316 msgid "Memory allocation error" msgstr "" #: cups/ppd-cache.c:3548 msgid "Metal" msgstr "" #: cups/ppd-cache.c:3549 msgid "Metal Glossy" msgstr "" #: cups/ppd-cache.c:3550 msgid "Metal High Gloss" msgstr "" #: cups/ppd-cache.c:3551 msgid "Metal Matte" msgstr "" #: cups/ppd-cache.c:3552 msgid "Metal Satin" msgstr "" #: cups/ppd-cache.c:3553 msgid "Metal Semi Gloss" msgstr "" #: cups/ppd-cache.c:3481 msgid "Mid-Weight Paper" msgstr "" #: cups/ppd-cache.c:3396 cups/ppd-cache.c:3788 msgid "Middle" msgstr "" #: cups/ppd.c:336 msgid "Missing CloseGroup" msgstr "" #: cups/ppd.c:317 msgid "Missing PPD-Adobe-4.x header" msgstr "" #: cups/ppd.c:326 msgid "Missing asterisk in column 1" msgstr "" #: scheduler/ipp.c:6317 msgid "Missing document-number attribute." msgstr "" #: cups/adminutil.c:261 #, c-format msgid "Missing double quote on line %d." msgstr "" #: cgi-bin/admin.c:710 cgi-bin/admin.c:2090 cgi-bin/admin.c:2175 #: cgi-bin/admin.c:2769 cgi-bin/admin.c:3023 cgi-bin/admin.c:3134 #: cgi-bin/admin.c:3844 msgid "Missing form variable" msgstr "" #: scheduler/ipp.c:9703 msgid "Missing last-document attribute in request." msgstr "" #: cups/pwg-media.c:550 msgid "Missing media or media-col." msgstr "" #: cups/pwg-media.c:469 msgid "Missing media-size in media-col." msgstr "" #: scheduler/ipp.c:6918 msgid "Missing notify-subscription-ids attribute." msgstr "" #: cups/ppd.c:334 msgid "Missing option keyword" msgstr "" #: scheduler/ipp.c:3202 scheduler/ipp.c:3227 msgid "Missing requesting-user-name attribute." msgstr "" #: scheduler/ipp.c:5462 scheduler/ipp.c:5488 #, c-format msgid "Missing required attribute \"%s\"." msgstr "" #: scheduler/ipp.c:407 msgid "Missing required attributes." msgstr "" #: cups/http-support.c:1494 msgid "Missing resource in URI" msgstr "" #: cups/http-support.c:1488 msgid "Missing scheme in URI" msgstr "" #: cups/adminutil.c:242 #, c-format msgid "Missing value on line %d." msgstr "" #: cups/ppd.c:318 msgid "Missing value string" msgstr "" #: cups/pwg-media.c:457 msgid "Missing x-dimension in media-size." msgstr "" #: cups/pwg-media.c:463 msgid "Missing y-dimension in media-size." msgstr "" #: systemv/lpinfo.c:443 systemv/lpinfo.c:467 #, c-format msgid "" "Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgstr "" #: test/ippfind.c:2792 msgid "Modifiers:" msgstr "" #: cgi-bin/admin.c:544 msgid "Modify Class" msgstr "" #: cgi-bin/admin.c:857 msgid "Modify Printer" msgstr "" #: cups/ppd-cache.c:3554 msgid "Mounting Tape" msgstr "" #: cgi-bin/ipp-var.c:411 cgi-bin/ipp-var.c:502 msgid "Move All Jobs" msgstr "" #: cgi-bin/ipp-var.c:350 cgi-bin/ipp-var.c:409 cgi-bin/ipp-var.c:500 msgid "Move Job" msgstr "" #: cups/http-support.c:1358 msgid "Moved Permanently" msgstr "" #: cups/ppd-cache.c:3555 msgid "Multi Layer" msgstr "" #: cups/ppd-cache.c:3556 msgid "Multi Part Form" msgstr "" #: cups/ppd-cache.c:3027 msgid "Multi-Hole Punch (Landscape)" msgstr "" #: cups/ppd-cache.c:3025 msgid "Multi-Hole Punch (Portrait)" msgstr "" #: cups/ppd-cache.c:3024 msgid "Multi-Hole Punch (Reverse Landscape)" msgstr "" #: cups/ppd-cache.c:3026 msgid "Multi-Hole Punch (Reverse Portrait)" msgstr "" #: cups/ppd-cache.c:3403 msgid "Multipurpose" msgstr "" #: cups/ppd-cache.c:3480 msgid "Multipurpose Paper" msgstr "" #: cups/ppd-cache.c:3789 msgid "My Mailbox" msgstr "" #: cups/ppd.c:315 msgid "NULL PPD file pointer" msgstr "" #: cups/snmp.c:1007 msgid "Name OID uses indefinite length" msgstr "" #: scheduler/ipp.c:1102 msgid "Nested classes are not allowed." msgstr "" #: ppdc/sample.c:425 msgid "Never" msgstr "" #: cups/tls-darwin.c:672 cups/tls-gnutls.c:504 msgid "New credentials are not valid for name." msgstr "" #: cups/tls-darwin.c:662 cups/tls-gnutls.c:494 msgid "New credentials are older than stored credentials." msgstr "" #: cups/ppd.c:1987 msgid "No" msgstr "" #: cups/http-support.c:1355 msgid "No Content" msgstr "" #: cups/ppd-cache.c:3061 msgid "No IPP attributes." msgstr "" #: cups/ppd-util.c:469 msgid "No PPD name" msgstr "" #: cups/snmp.c:1001 msgid "No VarBind SEQUENCE" msgstr "" #: cups/adminutil.c:776 msgid "No Windows printer drivers are installed." msgstr "" #: cups/request.c:553 cups/request.c:913 msgid "No active connection" msgstr "" #: cups/request.c:334 msgid "No active connection." msgstr "" #: scheduler/ipp.c:3482 #, c-format msgid "No active jobs on %s." msgstr "" #: scheduler/ipp.c:235 msgid "No attributes in request." msgstr "" #: scheduler/ipp.c:3103 msgid "No authentication information provided." msgstr "" #: cups/tls-darwin.c:612 cups/tls-gnutls.c:441 msgid "No common name specified." msgstr "" #: cups/snmp.c:958 msgid "No community name" msgstr "" #: scheduler/ipp.c:6117 msgid "No default printer." msgstr "" #: cgi-bin/ipp-var.c:422 scheduler/ipp.c:7498 msgid "No destinations added." msgstr "" #: backend/usb.c:192 msgid "No device URI found in argv[0] or in DEVICE_URI environment variable." msgstr "" #: cups/snmp.c:988 msgid "No error-index" msgstr "" #: cups/snmp.c:980 msgid "No error-status" msgstr "" #: scheduler/ipp.c:8453 scheduler/ipp.c:9717 msgid "No file in print request." msgstr "" #: cups/ppd-util.c:164 msgid "No modification time" msgstr "" #: cups/snmp.c:1005 msgid "No name OID" msgstr "" #: filter/rastertoepson.c:1166 filter/rastertohp.c:839 #: filter/rastertolabel.c:1286 msgid "No pages were found." msgstr "" #: cups/ppd-util.c:158 msgid "No printer name" msgstr "" #: cups/ppd-util.c:638 msgid "No printer-uri found" msgstr "" #: cups/ppd-util.c:622 msgid "No printer-uri found for class" msgstr "" #: scheduler/ipp.c:6524 msgid "No printer-uri in request." msgstr "" #: cups/http.c:2244 msgid "No request URI." msgstr "" #: cups/http.c:2261 msgid "No request protocol version." msgstr "" #: cups/request.c:342 msgid "No request sent." msgstr "" #: cups/snmp.c:972 msgid "No request-id" msgstr "" #: cups/tls-darwin.c:692 cups/tls-gnutls.c:524 msgid "No stored credentials, not valid for name." msgstr "" #: scheduler/ipp.c:5721 msgid "No subscription attributes in request." msgstr "" #: scheduler/ipp.c:7837 msgid "No subscriptions found." msgstr "" #: cups/snmp.c:996 msgid "No variable-bindings SEQUENCE" msgstr "" #: cups/snmp.c:951 msgid "No version number" msgstr "" #: ppdc/sample.c:362 msgid "Non-continuous (Mark sensing)" msgstr "" #: ppdc/sample.c:361 msgid "Non-continuous (Web sensing)" msgstr "" #: cups/ppd-cache.c:3867 cups/ppd-cache.c:3914 cups/ppd-cache.c:3961 msgid "None" msgstr "" #: cups/ppd-cache.c:4057 cups/ppd-cache.c:4117 cups/ppd-cache.c:4147 #: ppdc/sample.c:238 msgid "Normal" msgstr "" #: cups/http-support.c:1380 msgid "Not Found" msgstr "" #: cups/http-support.c:1392 msgid "Not Implemented" msgstr "" #: ppdc/sample.c:268 msgid "Not Installed" msgstr "" #: cups/http-support.c:1367 msgid "Not Modified" msgstr "" #: cups/http-support.c:1395 msgid "Not Supported" msgstr "" #: scheduler/ipp.c:1556 scheduler/ipp.c:10978 msgid "Not allowed to print." msgstr "" #: ppdc/sample.c:146 msgid "Note" msgstr "" #: systemv/cupstestdsc.c:425 msgid "Note: this program only validates the DSC comments, not the PostScript itself." msgstr "" #: cups/http-support.c:1346 cups/http-support.c:1485 cups/ppd.c:313 msgid "OK" msgstr "" #: cups/ppd-cache.c:3711 ppdc/sample.c:263 msgid "Off (1-Sided)" msgstr "" #: cups/ppd-cache.c:3476 msgid "Office Recycled Paper" msgstr "" #: ppdc/sample.c:356 msgid "Oki" msgstr "" #: cgi-bin/help.c:85 cgi-bin/help.c:126 cgi-bin/help.c:136 cgi-bin/help.c:166 msgid "Online Help" msgstr "" #: scheduler/ipp.c:5441 msgid "Only local users can create a local printer." msgstr "" #: cups/adminutil.c:943 #, c-format msgid "Open of %s failed: %s" msgstr "" #: cups/ppd.c:321 msgid "OpenGroup without a CloseGroup first" msgstr "" #: cups/ppd.c:323 msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" msgstr "" #: cgi-bin/admin.c:3615 msgid "Operation Policy" msgstr "" #: cups/ppd-cache.c:3488 msgid "Optical Disc" msgstr "" #: filter/pstops.c:2180 #, c-format msgid "Option \"%s\" cannot be included via %%%%IncludeFeature." msgstr "" #: cgi-bin/admin.c:3265 cgi-bin/admin.c:3349 msgid "Options Installed" msgstr "" #: scheduler/cupsfilter.c:1480 scheduler/main.c:2101 systemv/cupsaddsmb.c:276 #: systemv/cupsctl.c:196 systemv/cupstestdsc.c:421 systemv/cupstestppd.c:3859 #: test/ippfind.c:2751 test/ipptool.c:5063 ppdc/ppdc.cxx:430 #: ppdc/ppdhtml.cxx:177 ppdc/ppdi.cxx:123 ppdc/ppdmerge.cxx:361 #: ppdc/ppdpo.cxx:247 msgid "Options:" msgstr "" #: cups/ppd-cache.c:3557 msgid "Other" msgstr "" #: cups/ppd-cache.c:466 msgid "Out of date PPD cache file." msgstr "" #: cups/ppd-cache.c:1863 msgid "Out of memory." msgstr "" #: cups/ppd.c:836 cups/ppd.c:1402 msgid "Output Mode" msgstr "" #: cups/ppd-localize.c:314 msgid "Output bin is almost full." msgstr "" #: cups/ppd-localize.c:316 msgid "Output bin is full." msgstr "" #: cups/ppd-localize.c:312 msgid "Output bin is missing." msgstr "" #: systemv/cupstestdsc.c:391 msgid "PASS" msgstr "" #: ppdc/sample.c:252 msgid "PCL Laser Printer" msgstr "" #: ppdc/sample.c:149 msgid "PRC16K" msgstr "" #: ppdc/sample.c:150 msgid "PRC16K Long Edge" msgstr "" #: ppdc/sample.c:151 msgid "PRC32K" msgstr "" #: ppdc/sample.c:154 msgid "PRC32K Long Edge" msgstr "" #: ppdc/sample.c:152 msgid "PRC32K Oversize" msgstr "" #: ppdc/sample.c:153 msgid "PRC32K Oversize Long Edge" msgstr "" #: cups/snmp.c:968 msgid "Packet does not contain a Get-Response-PDU" msgstr "" #: cups/snmp.c:947 msgid "Packet does not start with SEQUENCE" msgstr "" #: cups/ppd-cache.c:3558 msgid "Paper" msgstr "" #: cups/ppd-localize.c:291 msgid "Paper jam." msgstr "" #: cups/ppd-localize.c:308 msgid "Paper tray is almost empty." msgstr "" #: cups/ppd-localize.c:310 msgid "Paper tray is empty." msgstr "" #: cups/ppd-localize.c:306 msgid "Paper tray is missing." msgstr "" #: cups/ppd-cache.c:3001 msgid "Parallel Fold" msgstr "" #: ppdc/sample.c:355 msgid "ParamCustominCutInterval" msgstr "" #: ppdc/sample.c:353 msgid "ParamCustominTearInterval" msgstr "" #: cups/auth.c:224 cups/auth.c:480 #, c-format msgid "Password for %s on %s? " msgstr "" #: systemv/cupsaddsmb.c:244 #, c-format msgid "Password for %s required to access %s via SAMBA: " msgstr "" #: cgi-bin/classes.c:157 msgid "Pause Class" msgstr "" #: cgi-bin/printers.c:160 msgid "Pause Printer" msgstr "" #: ppdc/sample.c:443 msgid "Peel-Off" msgstr "" #: cups/ppd-cache.c:3542 msgid "Permanent Labels" msgstr "" #: cups/ppd-cache.c:3391 ppdc/sample.c:160 msgid "Photo" msgstr "" #: cups/ppd-cache.c:3562 msgid "Photo Film" msgstr "" #: ppdc/sample.c:161 msgid "Photo Labels" msgstr "" #: cups/ppd-cache.c:3559 cups/ppd-cache.c:3560 msgid "Photo Paper" msgstr "" #: cups/ppd-cache.c:3532 cups/ppd-cache.c:3534 msgid "Photo Paper Plus Glossy II" msgstr "" #: cups/ppd-cache.c:3533 cups/ppd-cache.c:3535 msgid "Photo Paper Pro Platinum" msgstr "" #: cups/ppd-cache.c:3508 msgid "Plain Envelope" msgstr "" #: cups/ppd-cache.c:3588 ppdc/sample.c:281 msgid "Plain Paper" msgstr "" #: cups/ppd-cache.c:3568 msgid "Plastic" msgstr "" #: cups/ppd-cache.c:3569 msgid "Plastic Archival" msgstr "" #: cups/ppd-cache.c:3570 msgid "Plastic Colored" msgstr "" #: cups/ppd-cache.c:3571 msgid "Plastic Glossy" msgstr "" #: cups/ppd-cache.c:3572 msgid "Plastic High Gloss" msgstr "" #: cups/ppd-cache.c:3573 msgid "Plastic Matte" msgstr "" #: cups/ppd-cache.c:3574 msgid "Plastic Satin" msgstr "" #: cups/ppd-cache.c:3575 msgid "Plastic Semi Gloss" msgstr "" #: cups/ppd-cache.c:3576 msgid "Plate" msgstr "" #: cgi-bin/admin.c:3283 cgi-bin/admin.c:3564 msgid "Policies" msgstr "" #: cups/ppd-cache.c:3577 msgid "Polyester" msgstr "" #: cgi-bin/admin.c:3290 cgi-bin/admin.c:3633 cgi-bin/admin.c:3646 msgid "Port Monitor" msgstr "" #: ppdc/sample.c:270 msgid "PostScript Printer" msgstr "" #: ppdc/sample.c:147 msgid "Postcard" msgstr "" #: ppdc/sample.c:71 msgid "Postcard Double" msgstr "" #: ppdc/sample.c:72 msgid "Postcard Double Long Edge" msgstr "" #: ppdc/sample.c:148 msgid "Postcard Long Edge" msgstr "" #: cups/ppd-cache.c:3002 msgid "Poster Fold" msgstr "" #: cups/ppd-cache.c:3578 msgid "Pre Cut Tabs" msgstr "" #: cups/ppd-cache.c:3482 msgid "Premium Inkjet Paper" msgstr "" #: cups/ppd-cache.c:3483 msgid "Premium Photo Glossy Paper" msgstr "" #: cups/ppd-cache.c:3484 msgid "Premium Presentation Matte Paper" msgstr "" #: backend/ipp.c:982 backend/ipp.c:990 msgid "Preparing to print." msgstr "" #: cups/ppd-cache.c:3509 msgid "Preprinted Envelope" msgstr "" #: cups/ppd-cache.c:3598 msgid "Preprinted Paper" msgstr "" #: ppdc/sample.c:290 msgid "Print Density" msgstr "" #: cups/notify.c:74 msgid "Print Job:" msgstr "" #: ppdc/sample.c:335 msgid "Print Mode" msgstr "" #: cups/ppd-cache.c:4052 cups/ppd-cache.c:4110 cups/ppd-cache.c:4144 msgid "Print Quality" msgstr "" #: ppdc/sample.c:378 msgid "Print Rate" msgstr "" #: cgi-bin/printers.c:169 msgid "Print Self-Test Page" msgstr "" #: ppdc/sample.c:322 msgid "Print Speed" msgstr "" #: cgi-bin/ipp-var.c:778 msgid "Print Test Page" msgstr "" #: ppdc/sample.c:351 msgid "Print and Cut" msgstr "" #: ppdc/sample.c:339 msgid "Print and Tear" msgstr "" #: backend/socket.c:409 backend/usb-unix.c:182 msgid "Print file sent." msgstr "" #: backend/ipp.c:2238 msgid "Print job canceled at printer." msgstr "" #: backend/ipp.c:2230 msgid "Print job too large." msgstr "" #: backend/ipp.c:1699 msgid "Print job was not accepted." msgstr "" #: scheduler/ipp.c:5507 #, c-format msgid "Printer \"%s\" already exists." msgstr "" #: cgi-bin/ipp-var.c:1028 msgid "Printer Added" msgstr "" #: ppdc/sample.c:255 msgid "Printer Default" msgstr "" #: cgi-bin/ipp-var.c:1032 msgid "Printer Deleted" msgstr "" #: cgi-bin/ipp-var.c:1030 msgid "Printer Modified" msgstr "" #: cgi-bin/ipp-var.c:1026 msgid "Printer Paused" msgstr "" #: ppdc/sample.c:289 msgid "Printer Settings" msgstr "" #: backend/ipp.c:2233 msgid "Printer cannot print supplied content." msgstr "" #: backend/ipp.c:2236 msgid "Printer cannot print with supplied options." msgstr "" #: cups/ppd-cache.c:4171 msgid "Printer does not support required IPP attributes or document formats." msgstr "" #: cups/notify.c:118 msgid "Printer:" msgstr "" #: cgi-bin/printers.c:194 cgi-bin/printers.c:321 msgid "Printers" msgstr "" #: filter/rastertoepson.c:1112 filter/rastertohp.c:780 #: filter/rastertolabel.c:1233 #, c-format msgid "Printing page %d, %u%% complete." msgstr "" #: cups/ppd-cache.c:3007 cups/ppd-cache.c:3958 msgid "Punch" msgstr "" #: cups/ppd-cache.c:3599 msgid "Punched Paper" msgstr "" #: ppdc/sample.c:155 msgid "Quarto" msgstr "" #: scheduler/ipp.c:1551 scheduler/ipp.c:10973 msgid "Quota limit reached." msgstr "" #: berkeley/lpq.c:499 msgid "Rank Owner Job File(s) Total Size" msgstr "" #: cups/ppd-cache.c:3402 msgid "Rear" msgstr "" #: cups/ppd-cache.c:3790 msgid "Rear Tray" msgstr "" #: cgi-bin/classes.c:161 cgi-bin/printers.c:164 msgid "Reject Jobs" msgstr "" #: backend/lpd.c:1084 backend/lpd.c:1216 #, c-format msgid "Remote host did not accept control file (%d)." msgstr "" #: backend/lpd.c:1169 #, c-format msgid "Remote host did not accept data file (%d)." msgstr "" #: ppdc/sample.c:423 msgid "Reprint After Error" msgstr "" #: cups/http-support.c:1383 msgid "Request Entity Too Large" msgstr "" #: cups/ppd.c:838 cups/ppd.c:1404 ppdc/sample.c:231 msgid "Resolution" msgstr "" #: cgi-bin/classes.c:155 msgid "Resume Class" msgstr "" #: cgi-bin/printers.c:157 msgid "Resume Printer" msgstr "" #: ppdc/sample.c:165 msgid "Return Address" msgstr "" #: ppdc/sample.c:444 msgid "Rewind" msgstr "" #: cups/ppd-cache.c:3400 msgid "Right" msgstr "" #: cups/ppd-cache.c:3003 msgid "Right Gate Fold" msgstr "" #: cups/ppd-cache.c:3791 msgid "Right Tray" msgstr "" #: cups/ppd-cache.c:3579 msgid "Roll" msgstr "" #: cups/ppd-cache.c:3424 msgid "Roll 1" msgstr "" #: cups/ppd-cache.c:3433 msgid "Roll 10" msgstr "" #: cups/ppd-cache.c:3425 msgid "Roll 2" msgstr "" #: cups/ppd-cache.c:3426 msgid "Roll 3" msgstr "" #: cups/ppd-cache.c:3427 msgid "Roll 4" msgstr "" #: cups/ppd-cache.c:3428 msgid "Roll 5" msgstr "" #: cups/ppd-cache.c:3429 msgid "Roll 6" msgstr "" #: cups/ppd-cache.c:3430 msgid "Roll 7" msgstr "" #: cups/ppd-cache.c:3431 msgid "Roll 8" msgstr "" #: cups/ppd-cache.c:3432 msgid "Roll 9" msgstr "" #: cups/adminutil.c:2100 #, c-format msgid "Running command: %s %s -N -A %s -c '%s'" msgstr "" #: cups/snmp.c:949 msgid "SEQUENCE uses indefinite length" msgstr "" #: cups/http-support.c:1407 msgid "SSL/TLS Negotiation Error" msgstr "" #: cups/ppd-cache.c:3028 msgid "Saddle Stitch" msgstr "" #: cups/ppd-cache.c:3543 msgid "Satin Labels" msgstr "" #: cups/ppd-cache.c:3492 msgid "Satin Optical Disc" msgstr "" #: cups/ppd-cache.c:3566 msgid "Satin Photo Paper" msgstr "" #: cups/ppd-cache.c:3580 msgid "Screen" msgstr "" #: cups/ppd-cache.c:3581 msgid "Screen Paged" msgstr "" #: cups/ppd-cache.c:3544 msgid "Security Labels" msgstr "" #: cups/http-support.c:1364 msgid "See Other" msgstr "" #: scheduler/ipp.c:7122 scheduler/ipp.c:7141 msgid "See remote printer." msgstr "" #: cups/ppd-cache.c:3582 msgid "Self Adhesive" msgstr "" #: cups/ppd-cache.c:3583 msgid "Self Adhesive Film" msgstr "" #: cups/tls-darwin.c:747 cups/tls-gnutls.c:586 msgid "Self-signed credentials are blocked." msgstr "" #: cups/ppd-cache.c:3516 msgid "Semi-Gloss Fabric" msgstr "" #: cups/ppd-cache.c:3545 msgid "Semi-Gloss Labels" msgstr "" #: cups/ppd-cache.c:3493 msgid "Semi-Gloss Optical Disc" msgstr "" #: cups/ppd-cache.c:3567 msgid "Semi-Gloss Photo Paper" msgstr "" #: backend/usb-darwin.c:566 backend/usb-libusb.c:346 msgid "Sending data to printer." msgstr "" #: cgi-bin/ipp-var.c:1042 msgid "Server Restarted" msgstr "" #: cgi-bin/ipp-var.c:1048 msgid "Server Security Auditing" msgstr "" #: cgi-bin/ipp-var.c:1044 msgid "Server Started" msgstr "" #: cgi-bin/ipp-var.c:1046 msgid "Server Stopped" msgstr "" #: cups/tls-darwin.c:1191 cups/tls-gnutls.c:1282 msgid "Server credentials not set." msgstr "" #: cups/http-support.c:1401 msgid "Service Unavailable" msgstr "" #: cgi-bin/admin.c:2770 cgi-bin/admin.c:2816 cgi-bin/admin.c:2973 #: cgi-bin/admin.c:2992 msgid "Set Allowed Users" msgstr "" #: cgi-bin/admin.c:3019 msgid "Set As Server Default" msgstr "" #: cgi-bin/admin.c:3119 msgid "Set Class Options" msgstr "" #: cgi-bin/admin.c:3119 cgi-bin/admin.c:3293 cgi-bin/admin.c:3675 msgid "Set Printer Options" msgstr "" #: cgi-bin/admin.c:3845 cgi-bin/admin.c:3889 cgi-bin/admin.c:3907 msgid "Set Publishing" msgstr "" #: ppdc/sample.c:166 msgid "Shipping Address" msgstr "" #: cups/ppd-cache.c:3711 ppdc/sample.c:265 msgid "Short-Edge (Landscape)" msgstr "" #: cups/ppd-cache.c:3584 msgid "Shrink Foil" msgstr "" #: cups/ppd-cache.c:3398 msgid "Side" msgstr "" #: cups/ppd-cache.c:3792 msgid "Side Tray" msgstr "" #: cups/ppd-cache.c:3585 msgid "Single Face" msgstr "" #: cups/ppd-cache.c:3019 msgid "Single Punch (Landscape)" msgstr "" #: cups/ppd-cache.c:3018 msgid "Single Punch (Portrait)" msgstr "" #: cups/ppd-cache.c:3008 msgid "Single Punch (Reverse Landscape)" msgstr "" #: cups/ppd-cache.c:3009 msgid "Single Punch (Reverse Portrait)" msgstr "" #: cups/ppd-cache.c:3037 msgid "Single Staple (Landscape)" msgstr "" #: cups/ppd-cache.c:3036 msgid "Single Staple (Portrait)" msgstr "" #: cups/ppd-cache.c:3030 msgid "Single Staple (Reverse Landscape)" msgstr "" #: cups/ppd-cache.c:3031 msgid "Single Staple (Reverse Portrait)" msgstr "" #: cups/ppd-cache.c:3586 msgid "Single Wall Cardboard" msgstr "" #: cups/ppd-cache.c:3587 msgid "Sleeve" msgstr "" #: ppdc/sample.c:283 msgid "Special Paper" msgstr "" #: backend/lpd.c:1125 #, c-format msgid "Spooling job, %.0f%% complete." msgstr "" #: cups/ppd-cache.c:3793 msgid "Stacker 1" msgstr "" #: cups/ppd-cache.c:3802 msgid "Stacker 10" msgstr "" #: cups/ppd-cache.c:3794 msgid "Stacker 2" msgstr "" #: cups/ppd-cache.c:3795 msgid "Stacker 3" msgstr "" #: cups/ppd-cache.c:3796 msgid "Stacker 4" msgstr "" #: cups/ppd-cache.c:3797 msgid "Stacker 5" msgstr "" #: cups/ppd-cache.c:3798 msgid "Stacker 6" msgstr "" #: cups/ppd-cache.c:3799 msgid "Stacker 7" msgstr "" #: cups/ppd-cache.c:3800 msgid "Stacker 8" msgstr "" #: cups/ppd-cache.c:3801 msgid "Stacker 9" msgstr "" #: ppdc/sample.c:336 msgid "Standard" msgstr "" #: cups/ppd-cache.c:3029 cups/ppd-cache.c:3864 msgid "Staple" msgstr "" #: cups/ppd-cache.c:2987 msgid "Staple Edge" msgstr "" #: cups/ppd-cache.c:2991 msgid "Staple Edge (Landscape)" msgstr "" #: cups/ppd-cache.c:2989 msgid "Staple Edge (Portrait)" msgstr "" #: cups/ppd-cache.c:2988 msgid "Staple Edge (Reverse Landscape)" msgstr "" #: cups/ppd-cache.c:2990 msgid "Staple Edge (Reverse Portrait)" msgstr "" #. TRANSLATORS: Banner/cover sheet before the print job. #: cgi-bin/admin.c:3536 msgid "Starting Banner" msgstr "" #: filter/rastertoepson.c:1088 filter/rastertohp.c:756 #: filter/rastertolabel.c:1209 #, c-format msgid "Starting page %d." msgstr "" #: ppdc/sample.c:156 msgid "Statement" msgstr "" #: scheduler/ipp.c:3628 scheduler/ipp.c:6934 scheduler/ipp.c:7644 #: scheduler/ipp.c:9165 #, c-format msgid "Subscription #%d does not exist." msgstr "" #: test/ippfind.c:2804 msgid "Substitutions:" msgstr "" #: ppdc/sample.c:157 msgid "Super A" msgstr "" #: ppdc/sample.c:158 msgid "Super B" msgstr "" #: ppdc/sample.c:162 msgid "Super B/A3" msgstr "" #: cups/http-support.c:1343 msgid "Switching Protocols" msgstr "" #: cups/ppd-cache.c:3600 msgid "Tab Stock" msgstr "" #: ppdc/sample.c:159 msgid "Tabloid" msgstr "" #: ppdc/sample.c:45 msgid "Tabloid Oversize" msgstr "" #: ppdc/sample.c:46 msgid "Tabloid Oversize Long Edge" msgstr "" #: ppdc/sample.c:337 msgid "Tear" msgstr "" #: ppdc/sample.c:442 msgid "Tear-Off" msgstr "" #: ppdc/sample.c:383 msgid "Tear-Off Adjust Position" msgstr "" #: scheduler/ipp.c:1387 #, c-format msgid "The \"%s\" attribute is required for print jobs." msgstr "" #: scheduler/ipp.c:6595 scheduler/ipp.c:6675 scheduler/ipp.c:6688 #: scheduler/ipp.c:6700 scheduler/ipp.c:6715 #, c-format msgid "The %s attribute cannot be provided with job-ids." msgstr "" #: scheduler/ipp.c:1366 #, c-format msgid "The '%s' Job Status attribute cannot be supplied in a job creation request." msgstr "" #: scheduler/ipp.c:5269 #, c-format msgid "The '%s' operation attribute cannot be supplied in a Create-Job request." msgstr "" #: scheduler/ipp.c:7164 #, c-format msgid "The PPD file \"%s\" could not be found." msgstr "" #: scheduler/ipp.c:7153 #, c-format msgid "The PPD file \"%s\" could not be opened: %s" msgstr "" #: filter/rastertoepson.c:1057 filter/rastertohp.c:727 #: filter/rastertolabel.c:1173 msgid "The PPD file could not be opened." msgstr "" #: cgi-bin/admin.c:723 msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)." msgstr "" #: cups/ppd-localize.c:336 msgid "The developer unit needs to be replaced." msgstr "" #: cups/ppd-localize.c:334 msgid "The developer unit will need to be replaced soon." msgstr "" #: cups/ppd-localize.c:326 msgid "The fuser's temperature is high." msgstr "" #: cups/ppd-localize.c:328 msgid "The fuser's temperature is low." msgstr "" #: scheduler/ipp.c:2141 msgid "The notify-lease-duration attribute cannot be used with job subscriptions." msgstr "" #: scheduler/ipp.c:2124 scheduler/ipp.c:5846 #, c-format msgid "The notify-user-data value is too large (%d > 63 octets)." msgstr "" #: cups/ppd-localize.c:332 msgid "The optical photoconductor needs to be replaced." msgstr "" #: cups/ppd-localize.c:330 msgid "The optical photoconductor will need to be replaced soon." msgstr "" #: backend/ipp.c:1002 msgid "The printer configuration is incorrect or the printer no longer exists." msgstr "" #: backend/lpd.c:688 backend/lpd.c:1077 backend/lpd.c:1159 backend/lpd.c:1209 msgid "The printer did not respond." msgstr "" #: backend/ipp.c:775 backend/ipp.c:965 backend/ipp.c:1079 backend/ipp.c:1501 #: backend/ipp.c:1671 backend/lpd.c:896 backend/socket.c:359 #: backend/usb-unix.c:122 backend/usb-unix.c:412 backend/usb-unix.c:495 msgid "The printer is in use." msgstr "" #: cups/ppd-localize.c:318 msgid "The printer is low on ink." msgstr "" #: cups/ppd-localize.c:296 msgid "The printer is low on toner." msgstr "" #: backend/runloop.c:241 backend/runloop.c:361 cups/ppd-localize.c:294 msgid "The printer is not connected." msgstr "" #: backend/ipp.c:753 backend/ipp.c:786 backend/ipp.c:961 backend/lpd.c:875 #: backend/lpd.c:916 backend/socket.c:338 backend/socket.c:371 msgid "The printer is not responding." msgstr "" #: backend/runloop.c:383 msgid "The printer is now connected." msgstr "" #: backend/usb-darwin.c:1342 msgid "The printer is now online." msgstr "" #: backend/usb-darwin.c:1381 msgid "The printer is offline." msgstr "" #: backend/ipp.c:769 backend/lpd.c:890 backend/socket.c:353 msgid "The printer is unreachable at this time." msgstr "" #: cups/ppd-localize.c:320 msgid "The printer may be out of ink." msgstr "" #: cups/ppd-localize.c:298 msgid "The printer may be out of toner." msgstr "" #: backend/ipp.c:762 backend/lpd.c:883 backend/socket.c:346 msgid "The printer may not exist or is unavailable at this time." msgstr "" #: cgi-bin/admin.c:906 msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)." msgstr "" #: scheduler/ipp.c:810 scheduler/ipp.c:1093 scheduler/ipp.c:3267 #: scheduler/ipp.c:3448 scheduler/ipp.c:5252 scheduler/ipp.c:5680 #: scheduler/ipp.c:5995 scheduler/ipp.c:6561 scheduler/ipp.c:7368 #: scheduler/ipp.c:7424 scheduler/ipp.c:7750 scheduler/ipp.c:8022 #: scheduler/ipp.c:8111 scheduler/ipp.c:8144 scheduler/ipp.c:8468 #: scheduler/ipp.c:8875 scheduler/ipp.c:8957 scheduler/ipp.c:10131 #: scheduler/ipp.c:10583 scheduler/ipp.c:10936 scheduler/ipp.c:11018 #: scheduler/ipp.c:11393 msgid "The printer or class does not exist." msgstr "" #: scheduler/ipp.c:1305 msgid "The printer or class is not shared." msgstr "" #: cups/ppd-localize.c:300 msgid "The printer's cover is open." msgstr "" #: cups/ppd-localize.c:304 msgid "The printer's door is open." msgstr "" #: cups/ppd-localize.c:302 msgid "The printer's interlock is open." msgstr "" #: cups/ppd-localize.c:322 msgid "The printer's waste bin is almost full." msgstr "" #: cups/ppd-localize.c:324 msgid "The printer's waste bin is full." msgstr "" #: scheduler/ipp.c:916 scheduler/ipp.c:2305 #, c-format msgid "The printer-uri \"%s\" contains invalid characters." msgstr "" #: scheduler/ipp.c:3244 msgid "The printer-uri attribute is required." msgstr "" #: scheduler/ipp.c:900 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." msgstr "" #: scheduler/ipp.c:2289 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgstr "" #: cgi-bin/admin.c:448 msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)." msgstr "" #: scheduler/client.c:2249 msgid "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it." msgstr "" #: scheduler/ipp.c:6659 #, c-format msgid "The which-jobs value \"%s\" is not supported." msgstr "" #: scheduler/ipp.c:5924 msgid "There are too many subscriptions." msgstr "" #: backend/usb-darwin.c:398 backend/usb-darwin.c:464 backend/usb-darwin.c:528 #: backend/usb-darwin.c:549 backend/usb-libusb.c:271 backend/usb-libusb.c:325 msgid "There was an unrecoverable USB error." msgstr "" #: ppdc/sample.c:430 msgid "Thermal Transfer Media" msgstr "" #: scheduler/ipp.c:1545 msgid "Too many active jobs." msgstr "" #: scheduler/ipp.c:1439 #, c-format msgid "Too many job-sheets values (%d > 2)." msgstr "" #: scheduler/ipp.c:2616 #, c-format msgid "Too many printer-state-reasons values (%d > %d)." msgstr "" #: cups/ppd-cache.c:3395 msgid "Top" msgstr "" #: cups/ppd-cache.c:3803 msgid "Top Tray" msgstr "" #: cups/ppd-cache.c:3601 msgid "Tractor" msgstr "" #: cups/ppd-cache.c:3602 msgid "Transfer" msgstr "" #: cups/ppd-cache.c:3603 ppdc/sample.c:284 msgid "Transparency" msgstr "" #: ppdc/sample.c:279 msgid "Tray" msgstr "" #: cups/ppd-cache.c:3404 cups/ppd-cache.c:3804 ppdc/sample.c:256 msgid "Tray 1" msgstr "" #: cups/ppd-cache.c:3413 cups/ppd-cache.c:3813 msgid "Tray 10" msgstr "" #: cups/ppd-cache.c:3414 msgid "Tray 11" msgstr "" #: cups/ppd-cache.c:3415 msgid "Tray 12" msgstr "" #: cups/ppd-cache.c:3416 msgid "Tray 13" msgstr "" #: cups/ppd-cache.c:3417 msgid "Tray 14" msgstr "" #: cups/ppd-cache.c:3418 msgid "Tray 15" msgstr "" #: cups/ppd-cache.c:3419 msgid "Tray 16" msgstr "" #: cups/ppd-cache.c:3420 msgid "Tray 17" msgstr "" #: cups/ppd-cache.c:3421 msgid "Tray 18" msgstr "" #: cups/ppd-cache.c:3422 msgid "Tray 19" msgstr "" #: cups/ppd-cache.c:3405 cups/ppd-cache.c:3805 ppdc/sample.c:257 msgid "Tray 2" msgstr "" #: cups/ppd-cache.c:3423 msgid "Tray 20" msgstr "" #: cups/ppd-cache.c:3406 cups/ppd-cache.c:3806 ppdc/sample.c:258 msgid "Tray 3" msgstr "" #: cups/ppd-cache.c:3407 cups/ppd-cache.c:3807 ppdc/sample.c:259 msgid "Tray 4" msgstr "" #: cups/ppd-cache.c:3408 cups/ppd-cache.c:3808 msgid "Tray 5" msgstr "" #: cups/ppd-cache.c:3409 cups/ppd-cache.c:3809 msgid "Tray 6" msgstr "" #: cups/ppd-cache.c:3410 cups/ppd-cache.c:3810 msgid "Tray 7" msgstr "" #: cups/ppd-cache.c:3411 cups/ppd-cache.c:3811 msgid "Tray 8" msgstr "" #: cups/ppd-cache.c:3412 cups/ppd-cache.c:3812 msgid "Tray 9" msgstr "" #: cups/ppd-cache.c:3041 msgid "Triple Staple (Landscape)" msgstr "" #: cups/ppd-cache.c:3039 msgid "Triple Staple (Portrait)" msgstr "" #: cups/ppd-cache.c:3038 msgid "Triple Staple (Reverse Landscape)" msgstr "" #: cups/ppd-cache.c:3040 msgid "Triple Staple (Reverse Portrait)" msgstr "" #: cups/ppd-cache.c:3604 msgid "Triple Wall Cardboard" msgstr "" #: cups/tls-darwin.c:652 cups/tls-darwin.c:734 cups/tls-gnutls.c:484 #: cups/tls-gnutls.c:566 msgid "Trust on first use is disabled." msgstr "" #: cups/http-support.c:1386 msgid "URI Too Long" msgstr "" #: cups/http-support.c:1461 msgid "URI too large" msgstr "" #: ppdc/sample.c:124 msgid "US Fanfold" msgstr "" #: ppdc/sample.c:138 msgid "US Ledger" msgstr "" #: ppdc/sample.c:139 msgid "US Legal" msgstr "" #: ppdc/sample.c:140 msgid "US Legal Oversize" msgstr "" #: ppdc/sample.c:141 msgid "US Letter" msgstr "" #: ppdc/sample.c:142 msgid "US Letter Long Edge" msgstr "" #: ppdc/sample.c:143 msgid "US Letter Oversize" msgstr "" #: ppdc/sample.c:144 msgid "US Letter Oversize Long Edge" msgstr "" #: ppdc/sample.c:145 msgid "US Letter Small" msgstr "" #: cgi-bin/admin.c:1943 cgi-bin/admin.c:1956 cgi-bin/admin.c:1980 msgid "Unable to access cupsd.conf file" msgstr "" #: cgi-bin/help.c:127 msgid "Unable to access help file." msgstr "" #: cgi-bin/admin.c:500 msgid "Unable to add RSS subscription" msgstr "" #: cgi-bin/admin.c:788 msgid "Unable to add class" msgstr "" #: backend/ipp.c:1858 msgid "Unable to add document to print job." msgstr "" #: scheduler/ipp.c:1613 #, c-format msgid "Unable to add job for destination \"%s\"." msgstr "" #: cgi-bin/admin.c:1034 cgi-bin/admin.c:1403 msgid "Unable to add printer" msgstr "" #: scheduler/ipp.c:1223 msgid "Unable to allocate memory for file types." msgstr "" #: filter/pstops.c:421 msgid "Unable to allocate memory for page info" msgstr "" #: filter/pstops.c:415 msgid "Unable to allocate memory for pages array" msgstr "" #: cgi-bin/admin.c:1509 msgid "Unable to cancel RSS subscription" msgstr "" #: backend/ipp.c:2143 backend/ipp.c:2675 msgid "Unable to cancel print job." msgstr "" #: cgi-bin/admin.c:2974 msgid "Unable to change printer" msgstr "" #: cgi-bin/admin.c:3890 msgid "Unable to change printer-is-shared attribute" msgstr "" #: cgi-bin/admin.c:1641 cgi-bin/admin.c:1783 msgid "Unable to change server settings" msgstr "" #: cups/ipp.c:5389 #, c-format msgid "Unable to compile mimeMediaType regular expression: %s." msgstr "" #: cups/ipp.c:5335 #, c-format msgid "Unable to compile naturalLanguage regular expression: %s." msgstr "" #: filter/commandtops.c:405 msgid "Unable to configure printer options." msgstr "" #: cups/adminutil.c:899 cups/request.c:1050 msgid "Unable to connect to host." msgstr "" #: backend/ipp.c:732 backend/ipp.c:1277 backend/lpd.c:856 backend/socket.c:319 #: backend/usb-unix.c:108 msgid "Unable to contact printer, queuing on next printer in class." msgstr "" #: cups/adminutil.c:714 #, c-format msgid "Unable to copy 64-bit CUPS printer driver files (%d)." msgstr "" #: cups/adminutil.c:679 #, c-format msgid "Unable to copy 64-bit Windows printer driver files (%d)." msgstr "" #: cups/adminutil.c:510 #, c-format msgid "Unable to copy CUPS printer driver files (%d)." msgstr "" #: scheduler/ipp.c:2719 #, c-format msgid "Unable to copy PPD file - %s" msgstr "" #: scheduler/ipp.c:2764 msgid "Unable to copy PPD file." msgstr "" #: cups/adminutil.c:475 #, c-format msgid "Unable to copy Windows 2000 printer driver files (%d)." msgstr "" #: cups/adminutil.c:598 #, c-format msgid "Unable to copy Windows 9x printer driver files (%d)." msgstr "" #: cups/tls-darwin.c:618 cups/tls-gnutls.c:447 msgid "Unable to create credentials from array." msgstr "" #: cups/ppd-util.c:553 cups/util.c:500 msgid "Unable to create printer-uri" msgstr "" #: scheduler/ipp.c:5517 msgid "Unable to create printer." msgstr "" #: cups/tls-darwin.c:1482 cups/tls-gnutls.c:1494 msgid "Unable to create server credentials." msgstr "" #: cgi-bin/admin.c:1834 cgi-bin/admin.c:1846 scheduler/cupsfilter.c:1288 msgid "Unable to create temporary file" msgstr "" #: cgi-bin/admin.c:2137 msgid "Unable to delete class" msgstr "" #: cgi-bin/admin.c:2222 msgid "Unable to delete printer" msgstr "" #: cgi-bin/classes.c:250 cgi-bin/printers.c:259 msgid "Unable to do maintenance command" msgstr "" #: cgi-bin/admin.c:1958 msgid "Unable to edit cupsd.conf files larger than 1MB" msgstr "" #: cups/tls-darwin.c:1670 msgid "Unable to establish a secure connection to host (certificate chain invalid)." msgstr "" #: cups/tls-darwin.c:1660 msgid "Unable to establish a secure connection to host (certificate not yet valid)." msgstr "" #: cups/tls-darwin.c:1655 msgid "Unable to establish a secure connection to host (expired certificate)." msgstr "" #: cups/tls-darwin.c:1665 msgid "Unable to establish a secure connection to host (host name mismatch)." msgstr "" #: cups/tls-darwin.c:1675 msgid "Unable to establish a secure connection to host (peer dropped connection before responding)." msgstr "" #: cups/tls-darwin.c:1650 msgid "Unable to establish a secure connection to host (self-signed certificate)." msgstr "" #: cups/tls-darwin.c:1645 msgid "Unable to establish a secure connection to host (untrusted certificate)." msgstr "" #: cups/tls-darwin.c:1708 cups/tls-sspi.c:1283 cups/tls-sspi.c:1300 msgid "Unable to establish a secure connection to host." msgstr "" #: cgi-bin/ipp-var.c:351 msgid "Unable to find destination for job" msgstr "" #: cups/http-support.c:1955 msgid "Unable to find printer." msgstr "" #: cups/tls-darwin.c:1495 msgid "Unable to find server credentials." msgstr "" #: backend/ipp.c:3336 msgid "Unable to get backend exit status." msgstr "" #: cgi-bin/classes.c:430 msgid "Unable to get class list" msgstr "" #: cgi-bin/classes.c:529 msgid "Unable to get class status" msgstr "" #: cgi-bin/admin.c:1297 msgid "Unable to get list of printer drivers" msgstr "" #: cgi-bin/admin.c:2824 msgid "Unable to get printer attributes" msgstr "" #: cgi-bin/printers.c:447 msgid "Unable to get printer list" msgstr "" #: cgi-bin/printers.c:549 msgid "Unable to get printer status" msgstr "" #: backend/ipp.c:1026 msgid "Unable to get printer status." msgstr "" #: cups/adminutil.c:553 cups/adminutil.c:757 #, c-format msgid "Unable to install Windows 2000 printer driver files (%d)." msgstr "" #: cups/adminutil.c:627 #, c-format msgid "Unable to install Windows 9x printer driver files (%d)." msgstr "" #: cgi-bin/help.c:86 msgid "Unable to load help index." msgstr "" #: backend/network.c:74 #, c-format msgid "Unable to locate printer \"%s\"." msgstr "" #: backend/dnssd.c:785 backend/ipp.c:345 backend/lpd.c:191 #: backend/socket.c:160 msgid "Unable to locate printer." msgstr "" #: cgi-bin/admin.c:787 msgid "Unable to modify class" msgstr "" #: cgi-bin/admin.c:1033 cgi-bin/admin.c:1402 msgid "Unable to modify printer" msgstr "" #: cgi-bin/ipp-var.c:418 cgi-bin/ipp-var.c:507 msgid "Unable to move job" msgstr "" #: cgi-bin/ipp-var.c:420 cgi-bin/ipp-var.c:509 msgid "Unable to move jobs" msgstr "" #: cgi-bin/admin.c:3170 cups/ppd.c:314 msgid "Unable to open PPD file" msgstr "" #: cgi-bin/admin.c:2592 msgid "Unable to open cupsd.conf file:" msgstr "" #: backend/usb-unix.c:132 msgid "Unable to open device file" msgstr "" #: scheduler/ipp.c:6338 #, c-format msgid "Unable to open document #%d in job #%d." msgstr "" #: cgi-bin/help.c:358 msgid "Unable to open help file." msgstr "" #: backend/ipp.c:386 backend/ipp.c:1598 backend/ipp.c:1811 backend/lpd.c:479 #: backend/socket.c:147 backend/usb.c:229 filter/gziptoany.c:71 #: filter/pstops.c:268 msgid "Unable to open print file" msgstr "" #: filter/rastertoepson.c:1017 filter/rastertohp.c:687 #: filter/rastertolabel.c:1131 msgid "Unable to open raster file" msgstr "" #: cgi-bin/ipp-var.c:781 msgid "Unable to print test page" msgstr "" #: backend/runloop.c:83 backend/runloop.c:312 backend/usb-darwin.c:636 #: backend/usb-darwin.c:680 backend/usb-libusb.c:416 backend/usb-libusb.c:451 msgid "Unable to read print data." msgstr "" #: scheduler/ipp.c:8627 scheduler/ipp.c:9870 msgid "Unable to rename job document file." msgstr "" #: cups/dest.c:3419 msgid "Unable to resolve printer-uri." msgstr "" #: cups/adminutil.c:2136 #, c-format msgid "Unable to run \"%s\": %s" msgstr "" #: filter/pstops.c:533 msgid "Unable to see in file" msgstr "" #: cgi-bin/ipp-var.c:584 cgi-bin/ipp-var.c:604 msgid "Unable to send command to printer driver" msgstr "" #: backend/usb-darwin.c:758 backend/usb-libusb.c:527 msgid "Unable to send data to printer." msgstr "" #: cups/adminutil.c:809 #, c-format msgid "Unable to set Windows printer driver (%d)." msgstr "" #: cgi-bin/admin.c:3791 msgid "Unable to set options" msgstr "" #: cgi-bin/admin.c:3061 msgid "Unable to set server default" msgstr "" #: backend/ipp.c:3195 backend/ipp.c:3272 backend/ipp.c:3280 msgid "Unable to start backend process." msgstr "" #: cgi-bin/admin.c:1896 msgid "Unable to upload cupsd.conf file" msgstr "" #: backend/usb-darwin.c:2148 backend/usb-darwin.c:2172 msgid "Unable to use legacy USB class driver." msgstr "" #: backend/runloop.c:112 backend/runloop.c:367 msgid "Unable to write print data" msgstr "" #: filter/gziptoany.c:90 #, c-format msgid "Unable to write uncompressed print data: %s" msgstr "" #: cups/http-support.c:1374 msgid "Unauthorized" msgstr "" #: cgi-bin/admin.c:3487 msgid "Units" msgstr "" #: cups/http-support.c:1414 cups/http-support.c:1498 cups/ppd.c:341 msgid "Unknown" msgstr "" #: filter/pstops.c:2188 #, c-format msgid "Unknown choice \"%s\" for option \"%s\"." msgstr "" #: backend/ipp.c:528 #, c-format msgid "Unknown encryption option value: \"%s\"." msgstr "" #: backend/lpd.c:337 #, c-format msgid "Unknown file order: \"%s\"." msgstr "" #: backend/lpd.c:308 #, c-format msgid "Unknown format character: \"%c\"." msgstr "" #: cups/hash.c:264 msgid "Unknown hash algorithm." msgstr "" #: cups/dest-options.c:1024 msgid "Unknown media size name." msgstr "" #: backend/ipp.c:592 #, c-format msgid "Unknown option \"%s\" with value \"%s\"." msgstr "" #: filter/pstops.c:2171 #, c-format msgid "Unknown option \"%s\"." msgstr "" #: backend/lpd.c:323 #, c-format msgid "Unknown print mode: \"%s\"." msgstr "" #: scheduler/ipp.c:10805 #, c-format msgid "Unknown printer-error-policy \"%s\"." msgstr "" #: scheduler/ipp.c:10788 #, c-format msgid "Unknown printer-op-policy \"%s\"." msgstr "" #: cups/http.c:2293 msgid "Unknown request method." msgstr "" #: cups/http.c:2313 msgid "Unknown request version." msgstr "" #: cups/http-support.c:1491 msgid "Unknown scheme in URI" msgstr "" #: cups/http-addrlist.c:821 msgid "Unknown service name." msgstr "" #: backend/ipp.c:557 #, c-format msgid "Unknown version option value: \"%s\"." msgstr "" #: scheduler/ipp.c:11264 #, c-format msgid "Unsupported 'compression' value \"%s\"." msgstr "" #: scheduler/ipp.c:11294 #, c-format msgid "Unsupported 'document-format' value \"%s\"." msgstr "" #: scheduler/ipp.c:11369 msgid "Unsupported 'job-name' value." msgstr "" #: scheduler/ipp.c:348 #, c-format msgid "Unsupported character set \"%s\"." msgstr "" #: scheduler/ipp.c:8434 scheduler/ipp.c:9682 #, c-format msgid "Unsupported compression \"%s\"." msgstr "" #: scheduler/ipp.c:8570 scheduler/ipp.c:9835 #, c-format msgid "Unsupported document-format \"%s\"." msgstr "" #: scheduler/ipp.c:9818 #, c-format msgid "Unsupported document-format \"%s/%s\"." msgstr "" #: scheduler/ipp.c:1405 #, c-format msgid "Unsupported format \"%s\"." msgstr "" #: scheduler/ipp.c:1503 msgid "Unsupported margins." msgstr "" #: cups/pwg-media.c:544 msgid "Unsupported media value." msgstr "" #: filter/pstops.c:2453 #, c-format msgid "Unsupported number-up value %d, using number-up=1." msgstr "" #: filter/pstops.c:2487 #, c-format msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb." msgstr "" #: filter/pstops.c:2538 #, c-format msgid "Unsupported page-border value %s, using page-border=none." msgstr "" #: filter/rastertopwg.c:137 filter/rastertopwg.c:173 filter/rastertopwg.c:181 #: filter/rastertopwg.c:190 msgid "Unsupported raster data." msgstr "" #: cups/snmp.c:1066 msgid "Unsupported value type" msgstr "" #: cups/http-support.c:1389 msgid "Upgrade Required" msgstr "" #: systemv/lpadmin.c:662 msgid "" "Usage:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]" msgstr "" #: backend/dnssd.c:225 backend/ipp.c:334 backend/lpd.c:178 #: backend/socket.c:124 backend/usb.c:175 filter/commandtops.c:61 #: filter/gziptoany.c:44 filter/pstops.c:229 monitor/bcp.c:54 #: monitor/tbcp.c:53 #, c-format msgid "Usage: %s job-id user title copies options [file]" msgstr "" #: systemv/cupsaddsmb.c:273 msgid "Usage: cupsaddsmb [options] printer1 ... printerN" msgstr "" #: systemv/cupsctl.c:193 msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]" msgstr "" #: scheduler/main.c:2100 msgid "Usage: cupsd [options]" msgstr "" #: scheduler/cupsfilter.c:1479 msgid "Usage: cupsfilter [ options ] [ -- ] filename" msgstr "" #: systemv/cupstestdsc.c:417 msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]" msgstr "" #: systemv/cupstestppd.c:3855 msgid "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" msgstr "" #: test/ippfind.c:2744 msgid "" "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " ippfind [options] name[.regtype[.domain.]] ... [expression]\n" " ippfind --help\n" " ippfind --version" msgstr "" #: test/ipptool.c:5062 msgid "Usage: ipptool [options] URI filename [ ... filenameN ]" msgstr "" #: systemv/lpmove.c:125 msgid "Usage: lpmove job/src dest" msgstr "" #: systemv/lpoptions.c:523 msgid "" "Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " lpoptions [-h server] [-E] -x printer" msgstr "" #: berkeley/lpq.c:646 msgid "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" msgstr "" #: ppdc/ppdc.cxx:428 msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" msgstr "" #: ppdc/ppdhtml.cxx:175 msgid "Usage: ppdhtml [options] filename.drv >filename.html" msgstr "" #: ppdc/ppdi.cxx:121 msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" #: ppdc/ppdmerge.cxx:359 msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" #: ppdc/ppdpo.cxx:245 msgid "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" msgstr "" #: backend/snmp.c:190 msgid "Usage: snmp [host-or-ip-address]" msgstr "" #: cups/snmp.c:1018 msgid "Value uses indefinite length" msgstr "" #: cups/snmp.c:1003 msgid "VarBind uses indefinite length" msgstr "" #: cups/ppd-cache.c:3592 msgid "Vellum Paper" msgstr "" #: cups/snmp.c:953 msgid "Version uses indefinite length" msgstr "" #: backend/ipp.c:1978 msgid "Waiting for job to complete." msgstr "" #: backend/usb-darwin.c:429 backend/usb-darwin.c:483 backend/usb-libusb.c:223 msgid "Waiting for printer to become available." msgstr "" #: backend/socket.c:420 msgid "Waiting for printer to finish." msgstr "" #: cups/adminutil.c:781 msgid "Warning, no Windows 2000 printer drivers are installed." msgstr "" #: cups/ppd-cache.c:3517 msgid "Waterproof Fabric" msgstr "" #: cups/http-support.c:1410 msgid "Web Interface is Disabled" msgstr "" #: cups/ppd-cache.c:3605 msgid "Wet Film" msgstr "" #: cups/ppd-cache.c:3510 msgid "Windowed Envelope" msgstr "" #: cups/ppd.c:1985 msgid "Yes" msgstr "" #: scheduler/client.c:2236 #, c-format msgid "You must access this page using the URL https://%s:%d%s." msgstr "" #: cups/ppd-cache.c:3004 msgid "Z Fold" msgstr "" #: ppdc/sample.c:434 msgid "ZPL Label Printer" msgstr "" #: ppdc/sample.c:357 msgid "Zebra" msgstr "" #: cups/notify.c:94 msgid "aborted" msgstr "" #: cups/notify.c:91 msgid "canceled" msgstr "" #: cups/notify.c:97 msgid "completed" msgstr "" #: scheduler/ipp.c:6210 msgid "cups-deviced failed to execute." msgstr "" #: scheduler/ipp.c:7096 scheduler/ipp.c:7335 msgid "cups-driverd failed to execute." msgstr "" #: systemv/cupsaddsmb.c:225 #, c-format msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "" #: systemv/cupsctl.c:134 msgid "cupsctl: Cannot set Listen or Port directly." msgstr "" #: systemv/cupsctl.c:145 #, c-format msgid "cupsctl: Unable to connect to server: %s" msgstr "" #: systemv/cupsctl.c:188 #, c-format msgid "cupsctl: Unknown option \"%s\"" msgstr "" #: systemv/cupsctl.c:190 #, c-format msgid "cupsctl: Unknown option \"-%c\"" msgstr "" #: scheduler/main.c:178 msgid "cupsd: Expected config filename after \"-c\" option." msgstr "" #: scheduler/main.c:274 msgid "cupsd: Expected cups-files.conf filename after \"-s\" option." msgstr "" #: scheduler/main.c:248 msgid "cupsd: On-demand support not compiled in, running in normal mode." msgstr "" #: scheduler/main.c:285 msgid "cupsd: Relative cups-files.conf filename not allowed." msgstr "" #: scheduler/main.c:209 scheduler/main.c:216 msgid "cupsd: Unable to get current directory." msgstr "" #: scheduler/main.c:341 scheduler/main.c:350 msgid "cupsd: Unable to get path to cups-files.conf file." msgstr "" #: scheduler/main.c:323 #, c-format msgid "cupsd: Unknown argument \"%s\" - aborting." msgstr "" #: scheduler/main.c:316 #, c-format msgid "cupsd: Unknown option \"%c\" - aborting." msgstr "" #: scheduler/cupsfilter.c:1261 #, c-format msgid "cupsfilter: Invalid document number %d." msgstr "" #: scheduler/cupsfilter.c:1255 #, c-format msgid "cupsfilter: Invalid job ID %d." msgstr "" #: scheduler/cupsfilter.c:346 msgid "cupsfilter: Only one filename can be specified." msgstr "" #: scheduler/cupsfilter.c:1303 #, c-format msgid "cupsfilter: Unable to get job file - %s" msgstr "" #: systemv/cupstestppd.c:239 msgid "cupstestppd: The -q option is incompatible with the -v option." msgstr "" #: systemv/cupstestppd.c:255 msgid "cupstestppd: The -v option is incompatible with the -q option." msgstr "" #: systemv/lpstat.c:1265 systemv/lpstat.c:1268 systemv/lpstat.c:1271 #, c-format msgid "device for %s/%s: %s" msgstr "" #: systemv/lpstat.c:1251 systemv/lpstat.c:1254 systemv/lpstat.c:1257 #, c-format msgid "device for %s: %s" msgstr "" #: cups/snmp.c:990 msgid "error-index uses indefinite length" msgstr "" #: cups/snmp.c:982 msgid "error-status uses indefinite length" msgstr "" #: cups/notify.c:82 msgid "held" msgstr "" #: berkeley/lpc.c:199 msgid "help\t\tGet help on commands." msgstr "" #: cups/notify.c:123 msgid "idle" msgstr "" #: test/ippfind.c:2463 #, c-format msgid "ippfind: Bad regular expression: %s" msgstr "" #: test/ippfind.c:326 msgid "ippfind: Cannot use --and after --or." msgstr "" #: test/ippfind.c:599 #, c-format msgid "ippfind: Expected key name after %s." msgstr "" #: test/ippfind.c:549 test/ippfind.c:732 #, c-format msgid "ippfind: Expected port range after %s." msgstr "" #: test/ippfind.c:359 #, c-format msgid "ippfind: Expected program after %s." msgstr "" #: test/ippfind.c:376 #, c-format msgid "ippfind: Expected semi-colon after %s." msgstr "" #: test/ippfind.c:1963 msgid "ippfind: Missing close brace in substitution." msgstr "" #: test/ippfind.c:1051 msgid "ippfind: Missing close parenthesis." msgstr "" #: test/ippfind.c:333 msgid "ippfind: Missing expression before \"--and\"." msgstr "" #: test/ippfind.c:446 msgid "ippfind: Missing expression before \"--or\"." msgstr "" #: test/ippfind.c:869 #, c-format msgid "ippfind: Missing key name after %s." msgstr "" #: test/ippfind.c:1022 msgid "ippfind: Missing open parenthesis." msgstr "" #: test/ippfind.c:899 #, c-format msgid "ippfind: Missing program after %s." msgstr "" #: test/ippfind.c:345 test/ippfind.c:399 test/ippfind.c:428 test/ippfind.c:534 #: test/ippfind.c:616 test/ippfind.c:631 test/ippfind.c:786 test/ippfind.c:801 #: test/ippfind.c:824 test/ippfind.c:884 #, c-format msgid "ippfind: Missing regular expression after %s." msgstr "" #: test/ippfind.c:917 #, c-format msgid "ippfind: Missing semi-colon after %s." msgstr "" #: test/ippfind.c:1910 test/ippfind.c:1935 msgid "ippfind: Out of memory." msgstr "" #: test/ippfind.c:995 msgid "ippfind: Too many parenthesis." msgstr "" #: test/ippfind.c:1264 test/ippfind.c:1400 test/ippfind.c:2555 #, c-format msgid "ippfind: Unable to browse or resolve: %s" msgstr "" #: test/ippfind.c:2033 test/ippfind.c:2060 #, c-format msgid "ippfind: Unable to execute \"%s\": %s" msgstr "" #: test/ippfind.c:1141 test/ippfind.c:1149 test/ippfind.c:1160 #, c-format msgid "ippfind: Unable to use Bonjour: %s" msgstr "" #: test/ippfind.c:1992 #, c-format msgid "ippfind: Unknown variable \"{%s}\"." msgstr "" #: test/ipptool.c:320 test/ipptool.c:383 test/ipptool.c:542 test/ipptool.c:565 msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." msgstr "" #: test/ipptool.c:621 #, c-format msgid "ipptool: Bad URI - %s." msgstr "" #: test/ipptool.c:535 msgid "ipptool: Invalid seconds for \"-i\"." msgstr "" #: test/ipptool.c:602 msgid "ipptool: May only specify a single URI." msgstr "" #: test/ipptool.c:557 msgid "ipptool: Missing count for \"-n\"." msgstr "" #: test/ipptool.c:417 msgid "ipptool: Missing filename for \"-f\"." msgstr "" #: test/ipptool.c:398 msgid "ipptool: Missing name=value for \"-d\"." msgstr "" #: test/ipptool.c:525 msgid "ipptool: Missing seconds for \"-i\"." msgstr "" #: test/ipptool.c:647 msgid "ipptool: URI required before test file." msgstr "" #: test/ipptool.c:583 #, c-format msgid "ipptool: Unknown option \"-%c\"." msgstr "" #: scheduler/ipp.c:8100 msgid "job-printer-uri attribute missing." msgstr "" #: systemv/lpadmin.c:124 systemv/lpadmin.c:380 msgid "lpadmin: Class name can only contain printable characters." msgstr "" #: systemv/lpadmin.c:214 #, c-format msgid "lpadmin: Expected PPD after \"-%c\" option." msgstr "" #: systemv/lpadmin.c:461 msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option." msgstr "" #: systemv/lpadmin.c:371 msgid "lpadmin: Expected class after \"-r\" option." msgstr "" #: systemv/lpadmin.c:114 msgid "lpadmin: Expected class name after \"-c\" option." msgstr "" #: systemv/lpadmin.c:555 msgid "lpadmin: Expected description after \"-D\" option." msgstr "" #: systemv/lpadmin.c:491 msgid "lpadmin: Expected device URI after \"-v\" option." msgstr "" #: systemv/lpadmin.c:568 msgid "lpadmin: Expected file type(s) after \"-I\" option." msgstr "" #: systemv/lpadmin.c:193 msgid "lpadmin: Expected hostname after \"-h\" option." msgstr "" #: systemv/lpadmin.c:587 msgid "lpadmin: Expected location after \"-L\" option." msgstr "" #: systemv/lpadmin.c:284 msgid "lpadmin: Expected model after \"-m\" option." msgstr "" #: systemv/lpadmin.c:419 msgid "lpadmin: Expected name after \"-R\" option." msgstr "" #: systemv/lpadmin.c:304 msgid "lpadmin: Expected name=value after \"-o\" option." msgstr "" #: systemv/lpadmin.c:324 msgid "lpadmin: Expected printer after \"-p\" option." msgstr "" #: systemv/lpadmin.c:156 msgid "lpadmin: Expected printer name after \"-d\" option." msgstr "" #: systemv/lpadmin.c:524 msgid "lpadmin: Expected printer or class after \"-x\" option." msgstr "" #: systemv/lpadmin.c:969 msgid "lpadmin: No member names were seen." msgstr "" #: systemv/lpadmin.c:756 #, c-format msgid "lpadmin: Printer %s is already a member of class %s." msgstr "" #: systemv/lpadmin.c:983 #, c-format msgid "lpadmin: Printer %s is not a member of class %s." msgstr "" #: systemv/lpadmin.c:165 systemv/lpadmin.c:333 systemv/lpadmin.c:533 msgid "lpadmin: Printer name can only contain printable characters." msgstr "" #: systemv/lpadmin.c:617 msgid "lpadmin: Raw queues are deprecated and will stop working in a future version of CUPS." msgstr "" #: systemv/lpadmin.c:232 msgid "lpadmin: System V interface scripts are no longer supported for security reasons." msgstr "" #: systemv/lpadmin.c:98 msgid "" "lpadmin: Unable to add a printer to the class:\n" " You must specify a printer name first." msgstr "" #: systemv/lpadmin.c:90 systemv/lpadmin.c:140 systemv/lpadmin.c:262 #: systemv/lpadmin.c:346 systemv/lpadmin.c:395 systemv/lpadmin.c:507 #: systemv/lpadmin.c:646 #, c-format msgid "lpadmin: Unable to connect to server: %s" msgstr "" #: systemv/lpadmin.c:1446 msgid "lpadmin: Unable to create temporary file" msgstr "" #: systemv/lpadmin.c:403 msgid "" "lpadmin: Unable to delete option:\n" " You must specify a printer name first." msgstr "" #: systemv/lpadmin.c:1438 #, c-format msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d." msgstr "" #: systemv/lpadmin.c:1458 #, c-format msgid "lpadmin: Unable to open PPD file \"%s\" - %s" msgstr "" #: systemv/lpadmin.c:355 msgid "" "lpadmin: Unable to remove a printer from the class:\n" " You must specify a printer name first." msgstr "" #: systemv/lpadmin.c:635 msgid "" "lpadmin: Unable to set the printer options:\n" " You must specify a printer name first." msgstr "" #: systemv/lpadmin.c:474 #, c-format msgid "lpadmin: Unknown allow/deny option \"%s\"." msgstr "" #: systemv/lpadmin.c:603 #, c-format msgid "lpadmin: Unknown argument \"%s\"." msgstr "" #: systemv/lpadmin.c:596 #, c-format msgid "lpadmin: Unknown option \"%c\"." msgstr "" #: systemv/lpadmin.c:620 msgid "lpadmin: Use the 'everywhere' model for shared printers." msgstr "" #: systemv/lpadmin.c:572 msgid "lpadmin: Warning - content type list ignored." msgstr "" #: berkeley/lpc.c:66 berkeley/lpc.c:94 berkeley/lpc.c:130 msgid "lpc> " msgstr "" #: systemv/lpinfo.c:82 msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"." msgstr "" #: systemv/lpinfo.c:129 msgid "lpinfo: Expected language after \"--language\"." msgstr "" #: systemv/lpinfo.c:144 msgid "lpinfo: Expected make and model after \"--make-and-model\"." msgstr "" #: systemv/lpinfo.c:159 msgid "lpinfo: Expected product string after \"--product\"." msgstr "" #: systemv/lpinfo.c:98 msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"." msgstr "" #: systemv/lpinfo.c:114 msgid "lpinfo: Expected scheme list after \"--include-schemes\"." msgstr "" #: systemv/lpinfo.c:174 msgid "lpinfo: Expected timeout after \"--timeout\"." msgstr "" #: systemv/lpmove.c:133 #, c-format msgid "lpmove: Unable to connect to server: %s" msgstr "" #: systemv/lpmove.c:118 #, c-format msgid "lpmove: Unknown argument \"%s\"." msgstr "" #: systemv/lpoptions.c:150 systemv/lpoptions.c:168 systemv/lpoptions.c:247 msgid "lpoptions: No printers." msgstr "" #: systemv/lpoptions.c:224 #, c-format msgid "lpoptions: Unable to add printer or instance: %s" msgstr "" #: systemv/lpoptions.c:491 #, c-format msgid "lpoptions: Unable to get PPD file for %s: %s" msgstr "" #: systemv/lpoptions.c:499 #, c-format msgid "lpoptions: Unable to open PPD file for %s." msgstr "" #: systemv/lpoptions.c:96 msgid "lpoptions: Unknown printer or class." msgstr "" #: systemv/lpstat.c:1107 #, c-format msgid "lpstat: error - %s environment variable names non-existent destination \"%s\"." msgstr "" #: systemv/lpstat.c:1043 #, c-format msgid "members of class %s:" msgstr "" #: berkeley/lpq.c:558 msgid "no entries" msgstr "" #: systemv/lpstat.c:1111 msgid "no system default destination" msgstr "" #: scheduler/ipp.c:5895 msgid "notify-events not specified." msgstr "" #: scheduler/ipp.c:2078 scheduler/ipp.c:5800 #, c-format msgid "notify-recipient-uri URI \"%s\" is already used." msgstr "" #: scheduler/ipp.c:2068 scheduler/ipp.c:5790 #, c-format msgid "notify-recipient-uri URI \"%s\" uses unknown scheme." msgstr "" #: cups/notify.c:79 msgid "pending" msgstr "" #: ppdc/ppdc.cxx:106 ppdc/ppdpo.cxx:85 #, c-format msgid "ppdc: Adding include directory \"%s\"." msgstr "" #: ppdc/ppdpo.cxx:128 #, c-format msgid "ppdc: Adding/updating UI text from %s." msgstr "" #: ppdc/ppdc-source.cxx:365 #, c-format msgid "ppdc: Bad boolean value (%s) on line %d of %s." msgstr "" #: ppdc/ppdc-import.cxx:257 #, c-format msgid "ppdc: Bad font attribute: %s" msgstr "" #: ppdc/ppdc-source.cxx:1751 #, c-format msgid "ppdc: Bad resolution name \"%s\" on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1068 #, c-format msgid "ppdc: Bad status keyword %s on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1988 #, c-format msgid "ppdc: Bad variable substitution ($%c) on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:2673 #, c-format msgid "ppdc: Choice found on line %d of %s with no Option." msgstr "" #: ppdc/ppdc-source.cxx:1653 #, c-format msgid "ppdc: Duplicate #po for locale %s on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:887 #, c-format msgid "ppdc: Expected a filter definition on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:910 #, c-format msgid "ppdc: Expected a program name on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:349 #, c-format msgid "ppdc: Expected boolean value on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1048 #, c-format msgid "ppdc: Expected charset after Font on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:402 #, c-format msgid "ppdc: Expected choice code on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:390 #, c-format msgid "ppdc: Expected choice name/text on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:458 #, c-format msgid "ppdc: Expected color order for ColorModel on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:447 #, c-format msgid "ppdc: Expected colorspace for ColorModel on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:469 #, c-format msgid "ppdc: Expected compression for ColorModel on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:650 #, c-format msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:2859 #, c-format msgid "ppdc: Expected driver type keyword following DriverType on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:781 #, c-format msgid "ppdc: Expected duplex type after Duplex on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1032 #, c-format msgid "ppdc: Expected encoding after Font on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1644 #, c-format msgid "ppdc: Expected filename after #po %s on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1160 #, c-format msgid "ppdc: Expected group name/text on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:2573 #, c-format msgid "ppdc: Expected include filename on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1457 #, c-format msgid "ppdc: Expected integer on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1636 #, c-format msgid "ppdc: Expected locale after #po on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:308 #, c-format msgid "ppdc: Expected name after %s on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:3231 #, c-format msgid "ppdc: Expected name after FileName on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1013 #, c-format msgid "ppdc: Expected name after Font on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:3062 #, c-format msgid "ppdc: Expected name after Manufacturer on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:3095 #, c-format msgid "ppdc: Expected name after MediaSize on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:3185 #, c-format msgid "ppdc: Expected name after ModelName on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:3248 #, c-format msgid "ppdc: Expected name after PCFileName on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1111 #, c-format msgid "ppdc: Expected name/text after %s on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1200 #, c-format msgid "ppdc: Expected name/text after Installable on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1737 #, c-format msgid "ppdc: Expected name/text after Resolution on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:434 #, c-format msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1529 #, c-format msgid "ppdc: Expected option name/text on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1563 #, c-format msgid "ppdc: Expected option section on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1541 #, c-format msgid "ppdc: Expected option type on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1720 #, c-format msgid "ppdc: Expected override field after Resolution on line %d of %s." msgstr "" #: ppdc/ppdc-catalog.cxx:389 ppdc/ppdc-catalog.cxx:401 #, c-format msgid "ppdc: Expected quoted string on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:959 #, c-format msgid "ppdc: Expected real number on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:527 #, c-format msgid "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1818 #, c-format msgid "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:316 #, c-format msgid "ppdc: Expected selector after %s on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1056 #, c-format msgid "ppdc: Expected status after Font on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:2748 #, c-format msgid "ppdc: Expected string after Copyright on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:3351 #, c-format msgid "ppdc: Expected string after Version on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:683 #, c-format msgid "ppdc: Expected two option names on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:327 #, c-format msgid "ppdc: Expected value after %s on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1040 #, c-format msgid "ppdc: Expected version after Font on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:182 #, c-format msgid "ppdc: Invalid #include/#po filename \"%s\"." msgstr "" #: ppdc/ppdc-source.cxx:927 #, c-format msgid "ppdc: Invalid cost for filter on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:919 #, c-format msgid "ppdc: Invalid empty MIME type for filter on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:935 #, c-format msgid "ppdc: Invalid empty program name for filter on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1583 #, c-format msgid "ppdc: Invalid option section \"%s\" on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1555 #, c-format msgid "ppdc: Invalid option type \"%s\" on line %d of %s." msgstr "" #: ppdc/ppdc.cxx:244 ppdc/ppdpo.cxx:115 #, c-format msgid "ppdc: Loading driver information file \"%s\"." msgstr "" #: ppdc/ppdc.cxx:180 #, c-format msgid "ppdc: Loading messages for locale \"%s\"." msgstr "" #: ppdc/ppdc.cxx:119 #, c-format msgid "ppdc: Loading messages from \"%s\"." msgstr "" #: ppdc/ppdc-source.cxx:2366 ppdc/ppdc-source.cxx:2598 #, c-format msgid "ppdc: Missing #endif at end of \"%s\"." msgstr "" #: ppdc/ppdc-source.cxx:2467 ppdc/ppdc-source.cxx:2502 #: ppdc/ppdc-source.cxx:2532 #, c-format msgid "ppdc: Missing #if on line %d of %s." msgstr "" #: ppdc/ppdc-catalog.cxx:466 #, c-format msgid "ppdc: Need a msgid line before any translation strings on line %d of %s." msgstr "" #: ppdc/ppdc-driver.cxx:710 #, c-format msgid "ppdc: No message catalog provided for locale %s." msgstr "" #: ppdc/ppdc-source.cxx:1606 ppdc/ppdc-source.cxx:2836 #: ppdc/ppdc-source.cxx:2922 ppdc/ppdc-source.cxx:3015 #: ppdc/ppdc-source.cxx:3148 ppdc/ppdc-source.cxx:3281 #, c-format msgid "ppdc: Option %s defined in two different groups on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:1599 #, c-format msgid "ppdc: Option %s redefined with a different type on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:660 #, c-format msgid "ppdc: Option constraint must *name on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:2449 #, c-format msgid "ppdc: Too many nested #if's on line %d of %s." msgstr "" #: ppdc/ppdc.cxx:367 #, c-format msgid "ppdc: Unable to create PPD file \"%s\" - %s." msgstr "" #: ppdc/ppdc.cxx:259 #, c-format msgid "ppdc: Unable to create output directory %s: %s" msgstr "" #: ppdc/ppdc.cxx:280 #, c-format msgid "ppdc: Unable to create output pipes: %s" msgstr "" #: ppdc/ppdc.cxx:296 ppdc/ppdc.cxx:302 #, c-format msgid "ppdc: Unable to execute cupstestppd: %s" msgstr "" #: ppdc/ppdc-source.cxx:1685 #, c-format msgid "ppdc: Unable to find #po file %s on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:2605 #, c-format msgid "ppdc: Unable to find include file \"%s\" on line %d of %s." msgstr "" #: ppdc/ppdc.cxx:191 #, c-format msgid "ppdc: Unable to find localization for \"%s\" - %s" msgstr "" #: ppdc/ppdc.cxx:128 #, c-format msgid "ppdc: Unable to load localization file \"%s\" - %s" msgstr "" #: ppdc/ppdc-file.cxx:41 #, c-format msgid "ppdc: Unable to open %s: %s" msgstr "" #: ppdc/ppdc-source.cxx:2009 #, c-format msgid "ppdc: Undefined variable (%s) on line %d of %s." msgstr "" #: ppdc/ppdc-catalog.cxx:483 #, c-format msgid "ppdc: Unexpected text on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:2878 #, c-format msgid "ppdc: Unknown driver type %s on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:861 #, c-format msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:3108 #, c-format msgid "ppdc: Unknown media size \"%s\" on line %d of %s." msgstr "" #: ppdc/ppdc-catalog.cxx:511 #, c-format msgid "ppdc: Unknown message catalog format for \"%s\"." msgstr "" #: ppdc/ppdc-source.cxx:3362 #, c-format msgid "ppdc: Unknown token \"%s\" seen on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:969 #, c-format msgid "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." msgstr "" #: ppdc/ppdc-source.cxx:2119 #, c-format msgid "ppdc: Unterminated string starting with %c on line %d of %s." msgstr "" #: ppdc/ppdc.cxx:358 #, c-format msgid "ppdc: Warning - overlapping filename \"%s\"." msgstr "" #: ppdc/ppdc.cxx:373 #, c-format msgid "ppdc: Writing %s." msgstr "" #: ppdc/ppdc.cxx:141 #, c-format msgid "ppdc: Writing PPD files to directory \"%s\"." msgstr "" #: ppdc/ppdmerge.cxx:128 #, c-format msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s." msgstr "" #: ppdc/ppdmerge.cxx:168 #, c-format msgid "ppdmerge: Ignoring PPD file %s." msgstr "" #: ppdc/ppdmerge.cxx:152 #, c-format msgid "ppdmerge: Unable to backup %s to %s - %s" msgstr "" #: systemv/lpstat.c:1810 #, c-format msgid "printer %s disabled since %s -" msgstr "" #: systemv/lpstat.c:1799 #, c-format msgid "printer %s is idle. enabled since %s" msgstr "" #: systemv/lpstat.c:1804 #, c-format msgid "printer %s now printing %s-%d. enabled since %s" msgstr "" #: systemv/lpstat.c:1929 #, c-format msgid "printer %s/%s disabled since %s -" msgstr "" #: systemv/lpstat.c:1915 #, c-format msgid "printer %s/%s is idle. enabled since %s" msgstr "" #: systemv/lpstat.c:1922 #, c-format msgid "printer %s/%s now printing %s-%d. enabled since %s" msgstr "" #: cups/notify.c:85 cups/notify.c:126 msgid "processing" msgstr "" #: systemv/lp.c:643 #, c-format msgid "request id is %s-%d (%d file(s))" msgstr "" #: cups/snmp.c:974 msgid "request-id uses indefinite length" msgstr "" #: systemv/lpstat.c:2057 msgid "scheduler is not running" msgstr "" #: systemv/lpstat.c:2053 msgid "scheduler is running" msgstr "" #: cups/adminutil.c:2207 #, c-format msgid "stat of %s failed: %s" msgstr "" #: berkeley/lpc.c:201 msgid "status\t\tShow status of daemon and queue." msgstr "" #: cups/notify.c:88 cups/notify.c:129 msgid "stopped" msgstr "" #: systemv/lpstat.c:1085 #, c-format msgid "system default destination: %s" msgstr "" #: systemv/lpstat.c:1082 #, c-format msgid "system default destination: %s/%s" msgstr "" #: cups/notify.c:100 cups/notify.c:132 msgid "unknown" msgstr "" #: cups/notify.c:109 msgid "untitled" msgstr "" #: cups/snmp.c:999 msgid "variable-bindings uses indefinite length" msgstr "" msgid "accuracy-units" msgstr "Accuracy Units" msgid "accuracy-units.mm" msgstr "Millimeters" msgid "accuracy-units.nm" msgstr "Nanometers" msgid "accuracy-units.um" msgstr "Micrometers" msgid "baling" msgstr "Bale Output" msgid "baling-type" msgstr "Bale Using" msgid "baling-type.band" msgstr "Band" msgid "baling-type.shrink-wrap" msgstr "Shrink Wrap" msgid "baling-type.wrap" msgstr "Wrap" msgid "baling-when" msgstr "Bale After" msgid "baling-when.after-job" msgstr "Job" msgid "baling-when.after-sets" msgstr "Sets" msgid "binding" msgstr "Bind Output" msgid "binding-reference-edge" msgstr "Bind Edge" msgid "binding-reference-edge.bottom" msgstr "Bottom" msgid "binding-reference-edge.left" msgstr "Left" msgid "binding-reference-edge.right" msgstr "Right" msgid "binding-reference-edge.top" msgstr "Top" msgid "binding-type" msgstr "Binder Type" msgid "binding-type.adhesive" msgstr "Adhesive" msgid "binding-type.comb" msgstr "Comb" msgid "binding-type.flat" msgstr "Flat" msgid "binding-type.padding" msgstr "Padding" msgid "binding-type.perfect" msgstr "Perfect" msgid "binding-type.spiral" msgstr "Spiral" msgid "binding-type.tape" msgstr "Tape" msgid "binding-type.velo" msgstr "Velo" msgid "charge-info-message" msgstr "Print Job Cost" msgid "coating" msgstr "Coat Sheets" msgid "coating-sides" msgstr "Add Coating To" msgid "coating-sides.back" msgstr "Back" msgid "coating-sides.both" msgstr "Front and Back" msgid "coating-sides.front" msgstr "Front" msgid "coating-type" msgstr "Type of Coating" msgid "coating-type.archival" msgstr "Archival" msgid "coating-type.archival-glossy" msgstr "Archival Glossy" msgid "coating-type.archival-matte" msgstr "Archival Matte" msgid "coating-type.archival-semi-gloss" msgstr "Archival Semi Gloss" msgid "coating-type.glossy" msgstr "Glossy" msgid "coating-type.high-gloss" msgstr "High Gloss" msgid "coating-type.matte" msgstr "Matte" msgid "coating-type.semi-gloss" msgstr "Semi-gloss" msgid "coating-type.silicone" msgstr "Silicone" msgid "coating-type.translucent" msgstr "Translucent" msgid "confirmation-sheet-print" msgstr "Print Confirmation Sheet" msgid "copies" msgstr "Copies" msgid "cover-back" msgstr "Back Cover" msgid "cover-front" msgstr "Front Cover" msgid "cover-sheet-info" msgstr "Cover Sheet Info" msgid "cover-sheet-info-supported.date-time" msgstr "Date Time" msgid "cover-sheet-info-supported.from-name" msgstr "From Name" msgid "cover-sheet-info-supported.logo" msgstr "Logo" msgid "cover-sheet-info-supported.message" msgstr "Message" msgid "cover-sheet-info-supported.organization" msgstr "Organization" msgid "cover-sheet-info-supported.subject" msgstr "Subject" msgid "cover-sheet-info-supported.to-name" msgstr "To Name" msgid "cover-type" msgstr "Printed Cover" msgid "cover-type.no-cover" msgstr "No Cover" msgid "cover-type.print-back" msgstr "Back Only" msgid "cover-type.print-both" msgstr "Front and Back" msgid "cover-type.print-front" msgstr "Front Only" msgid "cover-type.print-none" msgstr "None" msgid "covering" msgstr "Cover Output" msgid "covering-name" msgstr "Add Cover" msgid "covering-name.plain" msgstr "Plain" msgid "covering-name.pre-cut" msgstr "Pre-cut" msgid "covering-name.pre-printed" msgstr "Pre-printed" msgid "detailed-status-message" msgstr "Detailed Status Message" msgid "document-copies" msgstr "Copies" msgid "document-state" msgstr "Document State" msgid "document-state-reasons" msgstr "Detailed Document State" msgid "document-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "document-state-reasons.canceled-at-device" msgstr "Canceled At Device" msgid "document-state-reasons.canceled-by-operator" msgstr "Canceled By Operator" msgid "document-state-reasons.canceled-by-user" msgstr "Canceled By User" msgid "document-state-reasons.completed-successfully" msgstr "Completed Successfully" msgid "document-state-reasons.completed-with-errors" msgstr "Completed With Errors" msgid "document-state-reasons.completed-with-warnings" msgstr "Completed With Warnings" msgid "document-state-reasons.compression-error" msgstr "Compression Error" msgid "document-state-reasons.data-insufficient" msgstr "Data Insufficient" msgid "document-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "document-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "document-state-reasons.digital-signature-wait" msgstr "Digital Signature Wait" msgid "document-state-reasons.document-access-error" msgstr "Document Access Error" msgid "document-state-reasons.document-fetchable" msgstr "Document Fetchable" msgid "document-state-reasons.document-format-error" msgstr "Document Format Error" msgid "document-state-reasons.document-password-error" msgstr "Document Password Error" msgid "document-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "document-state-reasons.document-security-error" msgstr "Document Security Error" msgid "document-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "document-state-reasons.errors-detected" msgstr "Errors Detected" msgid "document-state-reasons.incoming" msgstr "Incoming" msgid "document-state-reasons.interpreting" msgstr "Interpreting" msgid "document-state-reasons.none" msgstr "None" msgid "document-state-reasons.outgoing" msgstr "Outgoing" msgid "document-state-reasons.printing" msgstr "Printing" msgid "document-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "document-state-reasons.queued" msgstr "Queued" msgid "document-state-reasons.queued-for-marker" msgstr "Queued For Marker" msgid "document-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "document-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "document-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "document-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "document-state-reasons.transforming" msgstr "Transforming" msgid "document-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "document-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "document-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "document-state.3" msgstr "Pending" msgid "document-state.5" msgstr "Processing" msgid "document-state.6" msgstr "Stopped" msgid "document-state.7" msgstr "Canceled" msgid "document-state.8" msgstr "Aborted" msgid "document-state.9" msgstr "Completed" msgid "feed-orientation" msgstr "Feed Orientation" msgid "feed-orientation.long-edge-first" msgstr "Long Edge First" msgid "feed-orientation.short-edge-first" msgstr "Short Edge First" msgid "fetch-status-code" msgstr "Fetch Status Code" msgid "finishing-template" msgstr "Finishing Template" msgid "finishing-template.bale" msgstr "Bale" msgid "finishing-template.bind" msgstr "Bind" msgid "finishing-template.bind-bottom" msgstr "Bind Bottom" msgid "finishing-template.bind-left" msgstr "Bind Left" msgid "finishing-template.bind-right" msgstr "Bind Right" msgid "finishing-template.bind-top" msgstr "Bind Top" msgid "finishing-template.booklet-maker" msgstr "Booklet Maker" msgid "finishing-template.coat" msgstr "Coat" msgid "finishing-template.cover" msgstr "Cover" msgid "finishing-template.edge-stitch" msgstr "Edge Stitch" msgid "finishing-template.edge-stitch-bottom" msgstr "Edge Stitch Bottom" msgid "finishing-template.edge-stitch-left" msgstr "Edge Stitch Left" msgid "finishing-template.edge-stitch-right" msgstr "Edge Stitch Right" msgid "finishing-template.edge-stitch-top" msgstr "Edge Stitch Top" msgid "finishing-template.fold" msgstr "Fold" msgid "finishing-template.fold-accordion" msgstr "Accordion Fold" msgid "finishing-template.fold-double-gate" msgstr "Double Gate Fold" msgid "finishing-template.fold-engineering-z" msgstr "Engineering Z Fold" msgid "finishing-template.fold-gate" msgstr "Gate Fold" msgid "finishing-template.fold-half" msgstr "Half Fold" msgid "finishing-template.fold-half-z" msgstr "Half Z Fold" msgid "finishing-template.fold-left-gate" msgstr "Left Gate Fold" msgid "finishing-template.fold-letter" msgstr "Letter Fold" msgid "finishing-template.fold-parallel" msgstr "Parallel Fold" msgid "finishing-template.fold-poster" msgstr "Poster Fold" msgid "finishing-template.fold-right-gate" msgstr "Right Gate Fold" msgid "finishing-template.fold-z" msgstr "Z Fold" msgid "finishing-template.jdf-f10-1" msgstr "JDF Fold F10-1" msgid "finishing-template.jdf-f10-2" msgstr "JDF Fold F10-2" msgid "finishing-template.jdf-f10-3" msgstr "JDF Fold F10-3" msgid "finishing-template.jdf-f12-1" msgstr "JDF Fold F12-1" msgid "finishing-template.jdf-f12-10" msgstr "JDF Fold F12-10" msgid "finishing-template.jdf-f12-11" msgstr "JDF Fold F12-11" msgid "finishing-template.jdf-f12-12" msgstr "JDF Fold F12-12" msgid "finishing-template.jdf-f12-13" msgstr "JDF Fold F12-13" msgid "finishing-template.jdf-f12-14" msgstr "JDF Fold F12-14" msgid "finishing-template.jdf-f12-2" msgstr "JDF Fold F12-2" msgid "finishing-template.jdf-f12-3" msgstr "JDF Fold F12-3" msgid "finishing-template.jdf-f12-4" msgstr "JDF Fold F12-4" msgid "finishing-template.jdf-f12-5" msgstr "JDF Fold F12-5" msgid "finishing-template.jdf-f12-6" msgstr "JDF Fold F12-6" msgid "finishing-template.jdf-f12-7" msgstr "JDF Fold F12-7" msgid "finishing-template.jdf-f12-8" msgstr "JDF Fold F12-8" msgid "finishing-template.jdf-f12-9" msgstr "JDF Fold F12-9" msgid "finishing-template.jdf-f14-1" msgstr "JDF Fold F14-1" msgid "finishing-template.jdf-f16-1" msgstr "JDF Fold F16-1" msgid "finishing-template.jdf-f16-10" msgstr "JDF Fold F16-10" msgid "finishing-template.jdf-f16-11" msgstr "JDF Fold F16-11" msgid "finishing-template.jdf-f16-12" msgstr "JDF Fold F16-12" msgid "finishing-template.jdf-f16-13" msgstr "JDF Fold F16-13" msgid "finishing-template.jdf-f16-14" msgstr "JDF Fold F16-14" msgid "finishing-template.jdf-f16-2" msgstr "JDF Fold F16-2" msgid "finishing-template.jdf-f16-3" msgstr "JDF Fold F16-3" msgid "finishing-template.jdf-f16-4" msgstr "JDF Fold F16-4" msgid "finishing-template.jdf-f16-5" msgstr "JDF Fold F16-5" msgid "finishing-template.jdf-f16-6" msgstr "JDF Fold F16-6" msgid "finishing-template.jdf-f16-7" msgstr "JDF Fold F16-7" msgid "finishing-template.jdf-f16-8" msgstr "JDF Fold F16-8" msgid "finishing-template.jdf-f16-9" msgstr "JDF Fold F16-9" msgid "finishing-template.jdf-f18-1" msgstr "JDF Fold F18-1" msgid "finishing-template.jdf-f18-2" msgstr "JDF Fold F18-2" msgid "finishing-template.jdf-f18-3" msgstr "JDF Fold F18-3" msgid "finishing-template.jdf-f18-4" msgstr "JDF Fold F18-4" msgid "finishing-template.jdf-f18-5" msgstr "JDF Fold F18-5" msgid "finishing-template.jdf-f18-6" msgstr "JDF Fold F18-6" msgid "finishing-template.jdf-f18-7" msgstr "JDF Fold F18-7" msgid "finishing-template.jdf-f18-8" msgstr "JDF Fold F18-8" msgid "finishing-template.jdf-f18-9" msgstr "JDF Fold F18-9" msgid "finishing-template.jdf-f2-1" msgstr "JDF Fold F2-1" msgid "finishing-template.jdf-f20-1" msgstr "JDF Fold F20-1" msgid "finishing-template.jdf-f20-2" msgstr "JDF Fold F20-2" msgid "finishing-template.jdf-f24-1" msgstr "JDF Fold F24-1" msgid "finishing-template.jdf-f24-10" msgstr "JDF Fold F24-10" msgid "finishing-template.jdf-f24-11" msgstr "JDF Fold F24-11" msgid "finishing-template.jdf-f24-2" msgstr "JDF Fold F24-2" msgid "finishing-template.jdf-f24-3" msgstr "JDF Fold F24-3" msgid "finishing-template.jdf-f24-4" msgstr "JDF Fold F24-4" msgid "finishing-template.jdf-f24-5" msgstr "JDF Fold F24-5" msgid "finishing-template.jdf-f24-6" msgstr "JDF Fold F24-6" msgid "finishing-template.jdf-f24-7" msgstr "JDF Fold F24-7" msgid "finishing-template.jdf-f24-8" msgstr "JDF Fold F24-8" msgid "finishing-template.jdf-f24-9" msgstr "JDF Fold F24-9" msgid "finishing-template.jdf-f28-1" msgstr "JDF Fold F28-1" msgid "finishing-template.jdf-f32-1" msgstr "JDF Fold F32-1" msgid "finishing-template.jdf-f32-2" msgstr "JDF Fold F32-2" msgid "finishing-template.jdf-f32-3" msgstr "JDF Fold F32-3" msgid "finishing-template.jdf-f32-4" msgstr "JDF Fold F32-4" msgid "finishing-template.jdf-f32-5" msgstr "JDF Fold F32-5" msgid "finishing-template.jdf-f32-6" msgstr "JDF Fold F32-6" msgid "finishing-template.jdf-f32-7" msgstr "JDF Fold F32-7" msgid "finishing-template.jdf-f32-8" msgstr "JDF Fold F32-8" msgid "finishing-template.jdf-f32-9" msgstr "JDF Fold F32-9" msgid "finishing-template.jdf-f36-1" msgstr "JDF Fold F36-1" msgid "finishing-template.jdf-f36-2" msgstr "JDF Fold F36-2" msgid "finishing-template.jdf-f4-1" msgstr "JDF Fold F4-1" msgid "finishing-template.jdf-f4-2" msgstr "JDF Fold F4-2" msgid "finishing-template.jdf-f40-1" msgstr "JDF Fold F40-1" msgid "finishing-template.jdf-f48-1" msgstr "JDF Fold F48-1" msgid "finishing-template.jdf-f48-2" msgstr "JDF Fold F48-2" msgid "finishing-template.jdf-f6-1" msgstr "JDF Fold F6-1" msgid "finishing-template.jdf-f6-2" msgstr "JDF Fold F6-2" msgid "finishing-template.jdf-f6-3" msgstr "JDF Fold F6-3" msgid "finishing-template.jdf-f6-4" msgstr "JDF Fold F6-4" msgid "finishing-template.jdf-f6-5" msgstr "JDF Fold F6-5" msgid "finishing-template.jdf-f6-6" msgstr "JDF Fold F6-6" msgid "finishing-template.jdf-f6-7" msgstr "JDF Fold F6-7" msgid "finishing-template.jdf-f6-8" msgstr "JDF Fold F6-8" msgid "finishing-template.jdf-f64-1" msgstr "JDF Fold F64-1" msgid "finishing-template.jdf-f64-2" msgstr "JDF Fold F64-2" msgid "finishing-template.jdf-f8-1" msgstr "JDF Fold F8-1" msgid "finishing-template.jdf-f8-2" msgstr "JDF Fold F8-2" msgid "finishing-template.jdf-f8-3" msgstr "JDF Fold F8-3" msgid "finishing-template.jdf-f8-4" msgstr "JDF Fold F8-4" msgid "finishing-template.jdf-f8-5" msgstr "JDF Fold F8-5" msgid "finishing-template.jdf-f8-6" msgstr "JDF Fold F8-6" msgid "finishing-template.jdf-f8-7" msgstr "JDF Fold F8-7" msgid "finishing-template.jog-offset" msgstr "Jog Offset" msgid "finishing-template.laminate" msgstr "Laminate" msgid "finishing-template.punch" msgstr "Punch" msgid "finishing-template.punch-bottom-left" msgstr "Punch Bottom Left" msgid "finishing-template.punch-bottom-right" msgstr "Punch Bottom Right" msgid "finishing-template.punch-dual-bottom" msgstr "2-hole Punch Bottom" msgid "finishing-template.punch-dual-left" msgstr "2-hole Punch Left" msgid "finishing-template.punch-dual-right" msgstr "2-hole Punch Right" msgid "finishing-template.punch-dual-top" msgstr "2-hole Punch Top" msgid "finishing-template.punch-multiple-bottom" msgstr "Multi-hole Punch Bottom" msgid "finishing-template.punch-multiple-left" msgstr "Multi-hole Punch Left" msgid "finishing-template.punch-multiple-right" msgstr "Multi-hole Punch Right" msgid "finishing-template.punch-multiple-top" msgstr "Multi-hole Punch Top" msgid "finishing-template.punch-quad-bottom" msgstr "4-hole Punch Bottom" msgid "finishing-template.punch-quad-left" msgstr "4-hole Punch Left" msgid "finishing-template.punch-quad-right" msgstr "4-hole Punch Right" msgid "finishing-template.punch-quad-top" msgstr "4-hole Punch Top" msgid "finishing-template.punch-top-left" msgstr "Punch Top Left" msgid "finishing-template.punch-top-right" msgstr "Punch Top Right" msgid "finishing-template.punch-triple-bottom" msgstr "3-hole Punch Bottom" msgid "finishing-template.punch-triple-left" msgstr "3-hole Punch Left" msgid "finishing-template.punch-triple-right" msgstr "3-hole Punch Right" msgid "finishing-template.punch-triple-top" msgstr "3-hole Punch Top" msgid "finishing-template.saddle-stitch" msgstr "Saddle Stitch" msgid "finishing-template.staple" msgstr "Staple" msgid "finishing-template.staple-bottom-left" msgstr "Staple Bottom Left" msgid "finishing-template.staple-bottom-right" msgstr "Staple Bottom Right" msgid "finishing-template.staple-dual-bottom" msgstr "2 Staples on Bottom" msgid "finishing-template.staple-dual-left" msgstr "2 Staples on Left" msgid "finishing-template.staple-dual-right" msgstr "2 Staples on Right" msgid "finishing-template.staple-dual-top" msgstr "2 Staples on Top" msgid "finishing-template.staple-top-left" msgstr "Staple Top Left" msgid "finishing-template.staple-top-right" msgstr "Staple Top Right" msgid "finishing-template.staple-triple-bottom" msgstr "3 Staples on Bottom" msgid "finishing-template.staple-triple-left" msgstr "3 Staples on Left" msgid "finishing-template.staple-triple-right" msgstr "3 Staples on Right" msgid "finishing-template.staple-triple-top" msgstr "3 Staples on Top" msgid "finishing-template.trim" msgstr "Trim" msgid "finishing-template.trim-after-copies" msgstr "Trim After Every Set" msgid "finishing-template.trim-after-documents" msgstr "Trim After Every Document" msgid "finishing-template.trim-after-job" msgstr "Trim After Job" msgid "finishing-template.trim-after-pages" msgstr "Trim After Every Page" msgid "finishings" msgstr "Finishings" msgid "finishings-col" msgstr "Finishings" msgid "finishings.10" msgstr "Fold" msgid "finishings.100" msgstr "Z Fold" msgid "finishings.101" msgstr "Engineering Z Fold" msgid "finishings.11" msgstr "Trim" msgid "finishings.12" msgstr "Bale" msgid "finishings.13" msgstr "Booklet Maker" msgid "finishings.14" msgstr "Jog Offset" msgid "finishings.15" msgstr "Coat" msgid "finishings.16" msgstr "Laminate" msgid "finishings.20" msgstr "Staple Top Left" msgid "finishings.21" msgstr "Staple Bottom Left" msgid "finishings.22" msgstr "Staple Top Right" msgid "finishings.23" msgstr "Staple Bottom Right" msgid "finishings.24" msgstr "Edge Stitch Left" msgid "finishings.25" msgstr "Edge Stitch Top" msgid "finishings.26" msgstr "Edge Stitch Right" msgid "finishings.27" msgstr "Edge Stitch Bottom" msgid "finishings.28" msgstr "2 Staples on Left" msgid "finishings.29" msgstr "2 Staples on Top" msgid "finishings.3" msgstr "None" msgid "finishings.30" msgstr "2 Staples on Right" msgid "finishings.31" msgstr "2 Staples on Bottom" msgid "finishings.32" msgstr "3 Staples on Left" msgid "finishings.33" msgstr "3 Staples on Top" msgid "finishings.34" msgstr "3 Staples on Right" msgid "finishings.35" msgstr "3 Staples on Bottom" msgid "finishings.4" msgstr "Staple" msgid "finishings.5" msgstr "Punch" msgid "finishings.50" msgstr "Bind Left" msgid "finishings.51" msgstr "Bind Top" msgid "finishings.52" msgstr "Bind Right" msgid "finishings.53" msgstr "Bind Bottom" msgid "finishings.6" msgstr "Cover" msgid "finishings.60" msgstr "Trim Pages" msgid "finishings.61" msgstr "Trim Documents" msgid "finishings.62" msgstr "Trim Copies" msgid "finishings.63" msgstr "Trim Job" msgid "finishings.7" msgstr "Bind" msgid "finishings.70" msgstr "Punch Top Left" msgid "finishings.71" msgstr "Punch Bottom Left" msgid "finishings.72" msgstr "Punch Top Right" msgid "finishings.73" msgstr "Punch Bottom Right" msgid "finishings.74" msgstr "2-hole Punch Left" msgid "finishings.75" msgstr "2-hole Punch Top" msgid "finishings.76" msgstr "2-hole Punch Right" msgid "finishings.77" msgstr "2-hole Punch Bottom" msgid "finishings.78" msgstr "3-hole Punch Left" msgid "finishings.79" msgstr "3-hole Punch Top" msgid "finishings.8" msgstr "Saddle Stitch" msgid "finishings.80" msgstr "3-hole Punch Right" msgid "finishings.81" msgstr "3-hole Punch Bottom" msgid "finishings.82" msgstr "4-hole Punch Left" msgid "finishings.83" msgstr "4-hole Punch Top" msgid "finishings.84" msgstr "4-hole Punch Right" msgid "finishings.85" msgstr "4-hole Punch Bottom" msgid "finishings.86" msgstr "Multi-hole Punch Left" msgid "finishings.87" msgstr "Multi-hole Punch Top" msgid "finishings.88" msgstr "Multi-hole Punch Right" msgid "finishings.89" msgstr "Multi-hole Punch Bottom" msgid "finishings.9" msgstr "Edge Stitch" msgid "finishings.90" msgstr "Accordion Fold" msgid "finishings.91" msgstr "Double Gate Fold" msgid "finishings.92" msgstr "Gate Fold" msgid "finishings.93" msgstr "Half Fold" msgid "finishings.94" msgstr "Half Z Fold" msgid "finishings.95" msgstr "Left Gate Fold" msgid "finishings.96" msgstr "Letter Fold" msgid "finishings.97" msgstr "Parallel Fold" msgid "finishings.98" msgstr "Poster Fold" msgid "finishings.99" msgstr "Right Gate Fold" msgid "folding" msgstr "Fold" msgid "folding-direction" msgstr "Fold Direction" msgid "folding-direction.inward" msgstr "Inward" msgid "folding-direction.outward" msgstr "Outward" msgid "folding-offset" msgstr "Fold Position" msgid "folding-reference-edge" msgstr "Fold Edge" msgid "folding-reference-edge.bottom" msgstr "Bottom" msgid "folding-reference-edge.left" msgstr "Left" msgid "folding-reference-edge.right" msgstr "Right" msgid "folding-reference-edge.top" msgstr "Top" msgid "font-name-requested" msgstr "Font Name" msgid "font-size-requested" msgstr "Font Size" msgid "force-front-side" msgstr "Force Front Side" msgid "from-name" msgstr "From Name" msgid "imposition-template" msgstr "Imposition Template" msgid "imposition-template.none" msgstr "None" msgid "imposition-template.signature" msgstr "Signature" msgid "input-attributes" msgstr "Scanner Options" msgid "input-auto-scaling" msgstr "Scan Auto Scaling" msgid "input-auto-skew-correction" msgstr "Scan Auto Skew Correction" msgid "input-brightness" msgstr "Scan Brightness" msgid "input-color-mode" msgstr "Scanning Mode" msgid "input-color-mode.auto" msgstr "Automatic" msgid "input-color-mode.bi-level" msgstr "Text" msgid "input-color-mode.cmyk_16" msgstr "16-bit CMYK" msgid "input-color-mode.cmyk_8" msgstr "8-bit CMYK" msgid "input-color-mode.color" msgstr "Color" msgid "input-color-mode.color_8" msgstr "8-bit Color" msgid "input-color-mode.monochrome" msgstr "Monochrome" msgid "input-color-mode.monochrome_16" msgstr "16-bit Monochrome" msgid "input-color-mode.monochrome_4" msgstr "4-bit Monochrome" msgid "input-color-mode.monochrome_8" msgstr "8-bit Monochrome" msgid "input-color-mode.rgb_16" msgstr "16-bit RGB" msgid "input-color-mode.rgba_16" msgstr "16-bit RGBA" msgid "input-color-mode.rgba_8" msgstr "8-bit RGBA" msgid "input-content-type" msgstr "Scan Content" msgid "input-content-type.auto" msgstr "Automatic" msgid "input-content-type.halftone" msgstr "Halftone" msgid "input-content-type.line-art" msgstr "Line Art" msgid "input-content-type.magazine" msgstr "Magazine" msgid "input-content-type.photo" msgstr "Photo" msgid "input-content-type.text" msgstr "Text" msgid "input-content-type.text-and-photo" msgstr "Text And Photo" msgid "input-contrast" msgstr "Scan Contrast" msgid "input-film-scan-mode" msgstr "Film Type" msgid "input-film-scan-mode.black-and-white-negative-film" msgstr "Black And White Negative Film" msgid "input-film-scan-mode.color-negative-film" msgstr "Color Negative Film" msgid "input-film-scan-mode.color-slide-film" msgstr "Color Slide Film" msgid "input-film-scan-mode.not-applicable" msgstr "Not Applicable" msgid "input-images-to-transfer" msgstr "Scan Images To Transfer" msgid "input-media" msgstr "Scan Media" msgid "input-media.auto" msgstr "Automatic" msgid "input-orientation-requested" msgstr "Scan Orientation" msgid "input-quality" msgstr "Scan Quality" msgid "input-resolution" msgstr "Scan Resolution" msgid "input-scaling-height" msgstr "Scan Scaling Height" msgid "input-scaling-width" msgstr "Scan Scaling Width" msgid "input-scan-regions" msgstr "Scan Regions" msgid "input-sharpness" msgstr "Scan Sharpness" msgid "input-sides" msgstr "2-Sided Scanning" msgid "input-source" msgstr "Scan Source" msgid "input-source.adf" msgstr "Automatic Document Feeder" msgid "input-source.film-reader" msgstr "Film Reader" msgid "input-source.platen" msgstr "Platen" msgid "insert-after-page-number" msgstr "Insert Page Number" msgid "insert-count" msgstr "Insert Count" msgid "insert-sheet" msgstr "Insert Sheet" msgid "job-account-id" msgstr "Job Account ID" msgid "job-account-type" msgstr "Job Account Type" msgid "job-account-type.general" msgstr "General" msgid "job-account-type.group" msgstr "Group" msgid "job-account-type.none" msgstr "None" msgid "job-accounting-output-bin" msgstr "Job Accounting Output Bin" msgid "job-accounting-sheets" msgstr "Job Accounting Sheets" msgid "job-accounting-sheets-type" msgstr "Type of Job Accounting Sheets" msgid "job-accounting-sheets-type.none" msgstr "None" msgid "job-accounting-sheets-type.standard" msgstr "Standard" msgid "job-accounting-user-id" msgstr "Job Accounting User ID" msgid "job-collation-type" msgstr "Collate Copies" msgid "job-collation-type.3" msgstr "Uncollated Sheets" msgid "job-collation-type.4" msgstr "Collated Documents" msgid "job-collation-type.5" msgstr "Uncollated Documents" msgid "job-copies" msgstr "Copies" msgid "job-cover-back" msgstr "Back Cover" msgid "job-cover-front" msgstr "Front Cover" msgid "job-delay-output-until" msgstr "Delay Output Until" msgid "job-delay-output-until-time" msgstr "Delay Output Until" msgid "job-delay-output-until.day-time" msgstr "Daytime" msgid "job-delay-output-until.evening" msgstr "Evening" msgid "job-delay-output-until.indefinite" msgstr "Released" msgid "job-delay-output-until.night" msgstr "Night" msgid "job-delay-output-until.no-delay-output" msgstr "No Delay" msgid "job-delay-output-until.second-shift" msgstr "Second Shift" msgid "job-delay-output-until.third-shift" msgstr "Third Shift" msgid "job-delay-output-until.weekend" msgstr "Weekend" msgid "job-error-action" msgstr "On Error" msgid "job-error-action.abort-job" msgstr "Abort Job" msgid "job-error-action.cancel-job" msgstr "Cancel Job" msgid "job-error-action.continue-job" msgstr "Continue Job" msgid "job-error-action.suspend-job" msgstr "Suspend Job" msgid "job-error-sheet" msgstr "Print Error Sheet" msgid "job-error-sheet-type" msgstr "Type of Error Sheet" msgid "job-error-sheet-type.none" msgstr "None" msgid "job-error-sheet-type.standard" msgstr "Standard" msgid "job-error-sheet-when" msgstr "Print Error Sheet" msgid "job-error-sheet-when.always" msgstr "Always" msgid "job-error-sheet-when.on-error" msgstr "On Error" msgid "job-finishings" msgstr "Job Finishings" msgid "job-hold-until" msgstr "Hold Until" msgid "job-hold-until-time" msgstr "Hold Until" msgid "job-hold-until.day-time" msgstr "Daytime" msgid "job-hold-until.evening" msgstr "Evening" msgid "job-hold-until.indefinite" msgstr "Released" msgid "job-hold-until.night" msgstr "Night" msgid "job-hold-until.no-hold" msgstr "No Hold" msgid "job-hold-until.second-shift" msgstr "Second Shift" msgid "job-hold-until.third-shift" msgstr "Third Shift" msgid "job-hold-until.weekend" msgstr "Weekend" msgid "job-mandatory-attributes" msgstr "Job Mandatory Attributes" msgid "job-name" msgstr "Title" msgid "job-phone-number" msgstr "Job Phone Number" msgid "job-priority" msgstr "Job Priority" msgid "job-recipient-name" msgstr "Job Recipient Name" msgid "job-save-disposition" msgstr "Job Save Disposition" msgid "job-sheet-message" msgstr "Job Sheet Message" msgid "job-sheets" msgstr "Banner Page" msgid "job-sheets-col" msgstr "Banner Page" msgid "job-sheets.first-print-stream-page" msgstr "First Page in Document" msgid "job-sheets.job-both-sheet" msgstr "Start and End Sheets" msgid "job-sheets.job-end-sheet" msgstr "End Sheet" msgid "job-sheets.job-start-sheet" msgstr "Start Sheet" msgid "job-sheets.none" msgstr "None" msgid "job-sheets.standard" msgstr "Standard" msgid "job-state" msgstr "Job State" msgid "job-state-message" msgstr "Job State Message" msgid "job-state-reasons" msgstr "Detailed Job State" msgid "job-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "job-state-reasons.account-authorization-failed" msgstr "Account Authorization Failed" msgid "job-state-reasons.account-closed" msgstr "Account Closed" msgid "job-state-reasons.account-info-needed" msgstr "Account Info Needed" msgid "job-state-reasons.account-limit-reached" msgstr "Account Limit Reached" msgid "job-state-reasons.compression-error" msgstr "Compression Error" msgid "job-state-reasons.conflicting-attributes" msgstr "Conflicting Attributes" msgid "job-state-reasons.connected-to-destination" msgstr "Connected To Destination" msgid "job-state-reasons.connecting-to-destination" msgstr "Connecting To Destination" msgid "job-state-reasons.destination-uri-failed" msgstr "Destination Uri Failed" msgid "job-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "job-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "job-state-reasons.document-access-error" msgstr "Document Access Error" msgid "job-state-reasons.document-format-error" msgstr "Document Format Error" msgid "job-state-reasons.document-password-error" msgstr "Document Password Error" msgid "job-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "job-state-reasons.document-security-error" msgstr "Document Security Error" msgid "job-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "job-state-reasons.errors-detected" msgstr "Errors Detected" msgid "job-state-reasons.job-canceled-at-device" msgstr "Job Canceled At Device" msgid "job-state-reasons.job-canceled-by-operator" msgstr "Job Canceled By Operator" msgid "job-state-reasons.job-canceled-by-user" msgstr "Job Canceled By User" msgid "job-state-reasons.job-completed-successfully" msgstr "Job Completed Successfully" msgid "job-state-reasons.job-completed-with-errors" msgstr "Job Completed With Errors" msgid "job-state-reasons.job-completed-with-warnings" msgstr "Job Completed With Warnings" msgid "job-state-reasons.job-data-insufficient" msgstr "Job Data Insufficient" msgid "job-state-reasons.job-delay-output-until-specified" msgstr "Job Delay Output Until Specified" msgid "job-state-reasons.job-digital-signature-wait" msgstr "Job Digital Signature Wait" msgid "job-state-reasons.job-fetchable" msgstr "Job Fetchable" msgid "job-state-reasons.job-held-for-review" msgstr "Job Held For Review" msgid "job-state-reasons.job-hold-until-specified" msgstr "Job Hold Until Specified" msgid "job-state-reasons.job-incoming" msgstr "Job Incoming" msgid "job-state-reasons.job-interpreting" msgstr "Job Interpreting" msgid "job-state-reasons.job-outgoing" msgstr "Job Outgoing" msgid "job-state-reasons.job-password-wait" msgstr "Job Password Wait" msgid "job-state-reasons.job-printed-successfully" msgstr "Job Printed Successfully" msgid "job-state-reasons.job-printed-with-errors" msgstr "Job Printed With Errors" msgid "job-state-reasons.job-printed-with-warnings" msgstr "Job Printed With Warnings" msgid "job-state-reasons.job-printing" msgstr "Job Printing" msgid "job-state-reasons.job-queued" msgstr "Job Queued" msgid "job-state-reasons.job-queued-for-marker" msgstr "Job Queued For Marker" msgid "job-state-reasons.job-release-wait" msgstr "Job Release Wait" msgid "job-state-reasons.job-restartable" msgstr "Job Restartable" msgid "job-state-reasons.job-resuming" msgstr "Job Resuming" msgid "job-state-reasons.job-saved-successfully" msgstr "Job Saved Successfully" msgid "job-state-reasons.job-saved-with-errors" msgstr "Job Saved With Errors" msgid "job-state-reasons.job-saved-with-warnings" msgstr "Job Saved With Warnings" msgid "job-state-reasons.job-saving" msgstr "Job Saving" msgid "job-state-reasons.job-spooling" msgstr "Job Spooling" msgid "job-state-reasons.job-streaming" msgstr "Job Streaming" msgid "job-state-reasons.job-suspended" msgstr "Job Suspended" msgid "job-state-reasons.job-suspended-by-operator" msgstr "Job Suspended By Operator" msgid "job-state-reasons.job-suspended-by-system" msgstr "Job Suspended By System" msgid "job-state-reasons.job-suspended-by-user" msgstr "Job Suspended By User" msgid "job-state-reasons.job-suspending" msgstr "Job Suspending" msgid "job-state-reasons.job-transferring" msgstr "Job Transferring" msgid "job-state-reasons.job-transforming" msgstr "Job Transforming" msgid "job-state-reasons.none" msgstr "None" msgid "job-state-reasons.printer-stopped" msgstr "Printer Stopped" msgid "job-state-reasons.printer-stopped-partly" msgstr "Printer Stopped Partly" msgid "job-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "job-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "job-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "job-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "job-state-reasons.service-off-line" msgstr "Service Off Line" msgid "job-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "job-state-reasons.unsupported-attributes-or-values" msgstr "Unsupported Attributes Or Values" msgid "job-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "job-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "job-state-reasons.waiting-for-user-action" msgstr "Waiting For User Action" msgid "job-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "job-state.3" msgstr "Pending" msgid "job-state.4" msgstr "Held" msgid "job-state.5" msgstr "Processing" msgid "job-state.6" msgstr "Stopped" msgid "job-state.7" msgstr "Canceled" msgid "job-state.8" msgstr "Aborted" msgid "job-state.9" msgstr "Completed" msgid "laminating" msgstr "Laminate Pages" msgid "laminating-sides" msgstr "Laminate" msgid "laminating-sides.back" msgstr "Back Only" msgid "laminating-sides.both" msgstr "Front and Back" msgid "laminating-sides.front" msgstr "Front Only" msgid "laminating-type" msgstr "Type of Lamination" msgid "laminating-type.archival" msgstr "Archival" msgid "laminating-type.glossy" msgstr "Glossy" msgid "laminating-type.high-gloss" msgstr "High Gloss" msgid "laminating-type.matte" msgstr "Matte" msgid "laminating-type.semi-gloss" msgstr "Semi-gloss" msgid "laminating-type.translucent" msgstr "Translucent" msgid "logo" msgstr "Logo" msgid "material-amount" msgstr "Amount of Material" msgid "material-amount-units" msgstr "Amount Units" msgid "material-amount-units.g" msgstr "Grams" msgid "material-amount-units.kg" msgstr "Kilograms" msgid "material-amount-units.l" msgstr "Liters" msgid "material-amount-units.m" msgstr "Meters" msgid "material-amount-units.ml" msgstr "Milliliters" msgid "material-amount-units.mm" msgstr "Millimeters" msgid "material-color" msgstr "Material Color" msgid "material-diameter" msgstr "Material Diameter" msgid "material-diameter-tolerance" msgstr "Material Diameter Tolerance" msgid "material-fill-density" msgstr "Material Fill Density" msgid "material-name" msgstr "Material Name" msgid "material-purpose" msgstr "Use Material For" msgid "material-purpose.all" msgstr "Everything" msgid "material-purpose.base" msgstr "Base" msgid "material-purpose.in-fill" msgstr "In-fill" msgid "material-purpose.shell" msgstr "Shell" msgid "material-purpose.support" msgstr "Supports" msgid "material-rate" msgstr "Feed Rate" msgid "material-rate-units" msgstr "Feed Rate Units" msgid "material-rate-units.mg_second" msgstr "Milligrams per second" msgid "material-rate-units.ml_second" msgstr "Milliliters per second" msgid "material-rate-units.mm_second" msgstr "Millimeters per second" msgid "material-shell-thickness" msgstr "Material Shell Thickness" msgid "material-temperature" msgstr "Material Temperature" msgid "material-type" msgstr "Material Type" msgid "material-type.abs" msgstr "ABS" msgid "material-type.abs-carbon-fiber" msgstr "Carbon Fiber ABS" msgid "material-type.abs-carbon-nanotube" msgstr "Carbon Nanotube ABS" msgid "material-type.chocolate" msgstr "Chocolate" msgid "material-type.gold" msgstr "Gold" msgid "material-type.nylon" msgstr "Nylon" msgid "material-type.pet" msgstr "Pet" msgid "material-type.photopolymer" msgstr "Photopolymer" msgid "material-type.pla" msgstr "PLA" msgid "material-type.pla-conductive" msgstr "Conductive PLA" msgid "material-type.pla-flexible" msgstr "Flexible PLA" msgid "material-type.pla-magnetic" msgstr "Magnetic PLA" msgid "material-type.pla-steel" msgstr "Steel PLA" msgid "material-type.pla-stone" msgstr "Stone PLA" msgid "material-type.pla-wood" msgstr "Wood PLA" msgid "material-type.polycarbonate" msgstr "Polycarbonate" msgid "material-type.pva-dissolvable" msgstr "Dissolvable PVA" msgid "material-type.silver" msgstr "Silver" msgid "material-type.titanium" msgstr "Titanium" msgid "material-type.wax" msgstr "Wax" msgid "materials-col" msgstr "Materials" msgid "media" msgstr "Media" msgid "media-back-coating" msgstr "Back Coating of Media" msgid "media-back-coating.glossy" msgstr "Glossy" msgid "media-back-coating.high-gloss" msgstr "High Gloss" msgid "media-back-coating.matte" msgstr "Matte" msgid "media-back-coating.none" msgstr "None" msgid "media-back-coating.satin" msgstr "Satin" msgid "media-back-coating.semi-gloss" msgstr "Semi-gloss" msgid "media-bottom-margin" msgstr "Media Bottom Margin" msgid "media-col" msgstr "Media" msgid "media-color" msgstr "Media Color" msgid "media-color.black" msgstr "Black" msgid "media-color.blue" msgstr "Blue" msgid "media-color.brown" msgstr "Brown" msgid "media-color.buff" msgstr "Buff" msgid "media-color.clear-black" msgstr "Clear Black" msgid "media-color.clear-blue" msgstr "Clear Blue" msgid "media-color.clear-brown" msgstr "Clear Brown" msgid "media-color.clear-buff" msgstr "Clear Buff" msgid "media-color.clear-cyan" msgstr "Clear Cyan" msgid "media-color.clear-gold" msgstr "Clear Gold" msgid "media-color.clear-goldenrod" msgstr "Clear Goldenrod" msgid "media-color.clear-gray" msgstr "Clear Gray" msgid "media-color.clear-green" msgstr "Clear Green" msgid "media-color.clear-ivory" msgstr "Clear Ivory" msgid "media-color.clear-magenta" msgstr "Clear Magenta" msgid "media-color.clear-multi-color" msgstr "Clear Multi Color" msgid "media-color.clear-mustard" msgstr "Clear Mustard" msgid "media-color.clear-orange" msgstr "Clear Orange" msgid "media-color.clear-pink" msgstr "Clear Pink" msgid "media-color.clear-red" msgstr "Clear Red" msgid "media-color.clear-silver" msgstr "Clear Silver" msgid "media-color.clear-turquoise" msgstr "Clear Turquoise" msgid "media-color.clear-violet" msgstr "Clear Violet" msgid "media-color.clear-white" msgstr "Clear White" msgid "media-color.clear-yellow" msgstr "Clear Yellow" msgid "media-color.cyan" msgstr "Cyan" msgid "media-color.dark-blue" msgstr "Dark Blue" msgid "media-color.dark-brown" msgstr "Dark Brown" msgid "media-color.dark-buff" msgstr "Dark Buff" msgid "media-color.dark-cyan" msgstr "Dark Cyan" msgid "media-color.dark-gold" msgstr "Dark Gold" msgid "media-color.dark-goldenrod" msgstr "Dark Goldenrod" msgid "media-color.dark-gray" msgstr "Dark Gray" msgid "media-color.dark-green" msgstr "Dark Green" msgid "media-color.dark-ivory" msgstr "Dark Ivory" msgid "media-color.dark-magenta" msgstr "Dark Magenta" msgid "media-color.dark-mustard" msgstr "Dark Mustard" msgid "media-color.dark-orange" msgstr "Dark Orange" msgid "media-color.dark-pink" msgstr "Dark Pink" msgid "media-color.dark-red" msgstr "Dark Red" msgid "media-color.dark-silver" msgstr "Dark Silver" msgid "media-color.dark-turquoise" msgstr "Dark Turquoise" msgid "media-color.dark-violet" msgstr "Dark Violet" msgid "media-color.dark-yellow" msgstr "Dark Yellow" msgid "media-color.gold" msgstr "Gold" msgid "media-color.goldenrod" msgstr "Goldenrod" msgid "media-color.gray" msgstr "Gray" msgid "media-color.green" msgstr "Green" msgid "media-color.ivory" msgstr "Ivory" msgid "media-color.light-black" msgstr "Light Black" msgid "media-color.light-blue" msgstr "Light Blue" msgid "media-color.light-brown" msgstr "Light Brown" msgid "media-color.light-buff" msgstr "Light Buff" msgid "media-color.light-cyan" msgstr "Light Cyan" msgid "media-color.light-gold" msgstr "Light Gold" msgid "media-color.light-goldenrod" msgstr "Light Goldenrod" msgid "media-color.light-gray" msgstr "Light Gray" msgid "media-color.light-green" msgstr "Light Green" msgid "media-color.light-ivory" msgstr "Light Ivory" msgid "media-color.light-magenta" msgstr "Light Magenta" msgid "media-color.light-mustard" msgstr "Light Mustard" msgid "media-color.light-orange" msgstr "Light Orange" msgid "media-color.light-pink" msgstr "Light Pink" msgid "media-color.light-red" msgstr "Light Red" msgid "media-color.light-silver" msgstr "Light Silver" msgid "media-color.light-turquoise" msgstr "Light Turquoise" msgid "media-color.light-violet" msgstr "Light Violet" msgid "media-color.light-yellow" msgstr "Light Yellow" msgid "media-color.magenta" msgstr "Magenta" msgid "media-color.multi-color" msgstr "Multi-color" msgid "media-color.mustard" msgstr "Mustard" msgid "media-color.no-color" msgstr "No Color" msgid "media-color.orange" msgstr "Orange" msgid "media-color.pink" msgstr "Pink" msgid "media-color.red" msgstr "Red" msgid "media-color.silver" msgstr "Silver" msgid "media-color.turquoise" msgstr "Turquoise" msgid "media-color.violet" msgstr "Violet" msgid "media-color.white" msgstr "White" msgid "media-color.yellow" msgstr "Yellow" msgid "media-front-coating" msgstr "Front Coating of Media" msgid "media-grain" msgstr "Media Grain" msgid "media-grain.x-direction" msgstr "Cross-Feed Direction" msgid "media-grain.y-direction" msgstr "Feed Direction" msgid "media-hole-count" msgstr "Media Hole Count" msgid "media-info" msgstr "Media Info" msgid "media-input-tray-check" msgstr "Force Media" msgid "media-left-margin" msgstr "Media Left Margin" msgid "media-pre-printed" msgstr "Pre-printed Media" msgid "media-pre-printed.blank" msgstr "Blank" msgid "media-pre-printed.letter-head" msgstr "Letterhead" msgid "media-pre-printed.pre-printed" msgstr "Pre-printed" msgid "media-recycled" msgstr "Recycled Media" msgid "media-recycled.none" msgstr "None" msgid "media-recycled.standard" msgstr "Standard" msgid "media-right-margin" msgstr "Media Right Margin" msgid "media-size" msgstr "Media Dimensions" msgid "media-size-name" msgstr "Media Name" msgid "media-source" msgstr "Media Source" msgid "media-source.alternate" msgstr "Alternate Tray" msgid "media-source.alternate-roll" msgstr "Alternate Roll" msgid "media-source.auto" msgstr "Automatic Tray" msgid "media-source.bottom" msgstr "Bottom Tray" msgid "media-source.by-pass-tray" msgstr "By-pass Tray" msgid "media-source.center" msgstr "Center Tray" msgid "media-source.disc" msgstr "Disc Feed" msgid "media-source.envelope" msgstr "Envelope Feed" msgid "media-source.hagaki" msgstr "Hagaki Feed" msgid "media-source.large-capacity" msgstr "Large Capacity Tray" msgid "media-source.left" msgstr "Left Tray" msgid "media-source.main" msgstr "Main Tray" msgid "media-source.main-roll" msgstr "Main Roll" msgid "media-source.manual" msgstr "Manual Feed" msgid "media-source.middle" msgstr "Middle Tray" msgid "media-source.photo" msgstr "Photo Tray" msgid "media-source.rear" msgstr "Rear Tray" msgid "media-source.right" msgstr "Right Tray" msgid "media-source.roll-1" msgstr "Roll 1" msgid "media-source.roll-10" msgstr "Roll 10" msgid "media-source.roll-2" msgstr "Roll 2" msgid "media-source.roll-3" msgstr "Roll 3" msgid "media-source.roll-4" msgstr "Roll 4" msgid "media-source.roll-5" msgstr "Roll 5" msgid "media-source.roll-6" msgstr "Roll 6" msgid "media-source.roll-7" msgstr "Roll 7" msgid "media-source.roll-8" msgstr "Roll 8" msgid "media-source.roll-9" msgstr "Roll 9" msgid "media-source.side" msgstr "Side" msgid "media-source.top" msgstr "Top" msgid "media-source.tray-1" msgstr "Tray 1" msgid "media-source.tray-10" msgstr "Tray 10" msgid "media-source.tray-11" msgstr "Tray 11" msgid "media-source.tray-12" msgstr "Tray 12" msgid "media-source.tray-13" msgstr "Tray 13" msgid "media-source.tray-14" msgstr "Tray 14" msgid "media-source.tray-15" msgstr "Tray 15" msgid "media-source.tray-16" msgstr "Tray 16" msgid "media-source.tray-17" msgstr "Tray 17" msgid "media-source.tray-18" msgstr "Tray 18" msgid "media-source.tray-19" msgstr "Tray 19" msgid "media-source.tray-2" msgstr "Tray 2" msgid "media-source.tray-20" msgstr "Tray 20" msgid "media-source.tray-3" msgstr "Tray 3" msgid "media-source.tray-4" msgstr "Tray 4" msgid "media-source.tray-5" msgstr "Tray 5" msgid "media-source.tray-6" msgstr "Tray 6" msgid "media-source.tray-7" msgstr "Tray 7" msgid "media-source.tray-8" msgstr "Tray 8" msgid "media-source.tray-9" msgstr "Tray 9" msgid "media-thickness" msgstr "Media Thickness" msgid "media-tooth" msgstr "Media Tooth (Texture)" msgid "media-tooth.antique" msgstr "Antique" msgid "media-tooth.calendared" msgstr "Extra Smooth" msgid "media-tooth.coarse" msgstr "Coarse" msgid "media-tooth.fine" msgstr "Fine" msgid "media-tooth.linen" msgstr "Linen" msgid "media-tooth.medium" msgstr "Medium" msgid "media-tooth.smooth" msgstr "Smooth" msgid "media-tooth.stipple" msgstr "Stipple" msgid "media-tooth.uncalendared" msgstr "Rough" msgid "media-tooth.vellum" msgstr "Vellum" msgid "media-top-margin" msgstr "Media Top Margin" msgid "media-type" msgstr "Media Type" msgid "media-type.aluminum" msgstr "Aluminum" msgid "media-type.auto" msgstr "Automatic" msgid "media-type.back-print-film" msgstr "Back Print Film" msgid "media-type.cardboard" msgstr "Cardboard" msgid "media-type.cardstock" msgstr "Cardstock" msgid "media-type.cd" msgstr "CD" msgid "media-type.com.hp.advanced-photo" msgstr "Advanced Photo Paper" msgid "media-type.com.hp.brochure-glossy" msgstr "Glossy Brochure Paper" msgid "media-type.com.hp.brochure-matte" msgstr "Matte Brochure Paper" msgid "media-type.com.hp.cover-matte" msgstr "Matte Cover Paper" msgid "media-type.com.hp.ecosmart-lite" msgstr "Office Recycled Paper" msgid "media-type.com.hp.everyday-glossy" msgstr "Everyday Glossy Photo Paper" msgid "media-type.com.hp.everyday-matte" msgstr "Everyday Matte Paper" msgid "media-type.com.hp.extra-heavy" msgstr "Extra Heavyweight Paper" msgid "media-type.com.hp.intermediate" msgstr "Multipurpose Paper" msgid "media-type.com.hp.mid-weight" msgstr "Mid-Weight Paper" msgid "media-type.com.hp.premium-inkjet" msgstr "Premium Inkjet Paper" msgid "media-type.com.hp.premium-photo" msgstr "Premium Photo Glossy Paper" msgid "media-type.com.hp.premium-presentation-matte" msgstr "Premium Presentation Matte Paper" msgid "media-type.continuous" msgstr "Continuous" msgid "media-type.continuous-long" msgstr "Continuous Long" msgid "media-type.continuous-short" msgstr "Continuous Short" msgid "media-type.corrugated-board" msgstr "Corrugated Board" msgid "media-type.disc" msgstr "Optical Disc" msgid "media-type.disc-glossy" msgstr "Glossy Optical Disc" msgid "media-type.disc-high-gloss" msgstr "High Gloss Optical Disc" msgid "media-type.disc-matte" msgstr "Matte Optical Disc" msgid "media-type.disc-satin" msgstr "Satin Optical Disc" msgid "media-type.disc-semi-gloss" msgstr "Semi-Gloss Optical Disc" msgid "media-type.double-wall" msgstr "Double Wall" msgid "media-type.dry-film" msgstr "Dry Film" msgid "media-type.dvd" msgstr "DVD" msgid "media-type.embossing-foil" msgstr "Embossing Foil" msgid "media-type.end-board" msgstr "End Board" msgid "media-type.envelope" msgstr "Envelope" msgid "media-type.envelope-archival" msgstr "Archival Envelope" msgid "media-type.envelope-bond" msgstr "Bond Envelope" msgid "media-type.envelope-coated" msgstr "Coated Envelope" msgid "media-type.envelope-cotton" msgstr "Cotton Envelope" msgid "media-type.envelope-fine" msgstr "Fine Envelope" msgid "media-type.envelope-heavyweight" msgstr "Heavyweight Envelope" msgid "media-type.envelope-inkjet" msgstr "Inkjet Envelope" msgid "media-type.envelope-lightweight" msgstr "Lightweight Envelope" msgid "media-type.envelope-plain" msgstr "Plain Envelope" msgid "media-type.envelope-preprinted" msgstr "Preprinted Envelope" msgid "media-type.envelope-window" msgstr "Windowed Envelope" msgid "media-type.fabric" msgstr "Fabric" msgid "media-type.fabric-archival" msgstr "Archival Fabric" msgid "media-type.fabric-glossy" msgstr "Glossy Fabric" msgid "media-type.fabric-high-gloss" msgstr "High Gloss Fabric" msgid "media-type.fabric-matte" msgstr "Matte Fabric" msgid "media-type.fabric-semi-gloss" msgstr "Semi-Gloss Fabric" msgid "media-type.fabric-waterproof" msgstr "Waterproof Fabric" msgid "media-type.film" msgstr "Film" msgid "media-type.flexo-base" msgstr "Flexo Base" msgid "media-type.flexo-photo-polymer" msgstr "Flexo Photo Polymer" msgid "media-type.flute" msgstr "Flute" msgid "media-type.foil" msgstr "Foil" msgid "media-type.full-cut-tabs" msgstr "Full Cut Tabs" msgid "media-type.glass" msgstr "Glass" msgid "media-type.glass-colored" msgstr "Glass Colored" msgid "media-type.glass-opaque" msgstr "Glass Opaque" msgid "media-type.glass-surfaced" msgstr "Glass Surfaced" msgid "media-type.glass-textured" msgstr "Glass Textured" msgid "media-type.gravure-cylinder" msgstr "Gravure Cylinder" msgid "media-type.image-setter-paper" msgstr "Image Setter Paper" msgid "media-type.imaging-cylinder" msgstr "Imaging Cylinder" msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon_photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon-photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.labels" msgstr "Labels" msgid "media-type.labels-colored" msgstr "Colored Labels" msgid "media-type.labels-glossy" msgstr "Glossy Labels" msgid "media-type.labels-high-gloss" msgstr "High Gloss Labels" msgid "media-type.labels-inkjet" msgstr "Inkjet Labels" msgid "media-type.labels-matte" msgstr "Matte Labels" msgid "media-type.labels-permanent" msgstr "Permanent Labels" msgid "media-type.labels-satin" msgstr "Satin Labels" msgid "media-type.labels-security" msgstr "Security Labels" msgid "media-type.labels-semi-gloss" msgstr "Semi-Gloss Labels" msgid "media-type.laminating-foil" msgstr "Laminating Foil" msgid "media-type.letterhead" msgstr "Letterhead" msgid "media-type.metal" msgstr "Metal" msgid "media-type.metal-glossy" msgstr "Metal Glossy" msgid "media-type.metal-high-gloss" msgstr "Metal High Gloss" msgid "media-type.metal-matte" msgstr "Metal Matte" msgid "media-type.metal-satin" msgstr "Metal Satin" msgid "media-type.metal-semi-gloss" msgstr "Metal Semi Gloss" msgid "media-type.mounting-tape" msgstr "Mounting Tape" msgid "media-type.multi-layer" msgstr "Multi Layer" msgid "media-type.multi-part-form" msgstr "Multi Part Form" msgid "media-type.other" msgstr "Other" msgid "media-type.paper" msgstr "Paper" msgid "media-type.photographic" msgstr "Photo Paper" msgid "media-type.photographic-archival" msgstr "Photographic Archival" msgid "media-type.photographic-film" msgstr "Photo Film" msgid "media-type.photographic-glossy" msgstr "Glossy Photo Paper" msgid "media-type.photographic-high-gloss" msgstr "High Gloss Photo Paper" msgid "media-type.photographic-matte" msgstr "Matte Photo Paper" msgid "media-type.photographic-satin" msgstr "Satin Photo Paper" msgid "media-type.photographic-semi-gloss" msgstr "Semi-Gloss Photo Paper" msgid "media-type.plastic" msgstr "Plastic" msgid "media-type.plastic-archival" msgstr "Plastic Archival" msgid "media-type.plastic-colored" msgstr "Plastic Colored" msgid "media-type.plastic-glossy" msgstr "Plastic Glossy" msgid "media-type.plastic-high-gloss" msgstr "Plastic High Gloss" msgid "media-type.plastic-matte" msgstr "Plastic Matte" msgid "media-type.plastic-satin" msgstr "Plastic Satin" msgid "media-type.plastic-semi-gloss" msgstr "Plastic Semi Gloss" msgid "media-type.plate" msgstr "Plate" msgid "media-type.polyester" msgstr "Polyester" msgid "media-type.pre-cut-tabs" msgstr "Pre Cut Tabs" msgid "media-type.roll" msgstr "Roll" msgid "media-type.screen" msgstr "Screen" msgid "media-type.screen-paged" msgstr "Screen Paged" msgid "media-type.self-adhesive" msgstr "Self Adhesive" msgid "media-type.self-adhesive-film" msgstr "Self Adhesive Film" msgid "media-type.shrink-foil" msgstr "Shrink Foil" msgid "media-type.single-face" msgstr "Single Face" msgid "media-type.single-wall" msgstr "Single Wall" msgid "media-type.sleeve" msgstr "Sleeve" msgid "media-type.stationery" msgstr "Stationery" msgid "media-type.stationery-archival" msgstr "Stationery Archival" msgid "media-type.stationery-coated" msgstr "Coated Paper" msgid "media-type.stationery-cotton" msgstr "Stationery Cotton" msgid "media-type.stationery-fine" msgstr "Vellum Paper" msgid "media-type.stationery-heavyweight" msgstr "Heavyweight Paper" msgid "media-type.stationery-heavyweight-coated" msgstr "Stationery Heavyweight Coated" msgid "media-type.stationery-inkjet" msgstr "Stationery Inkjet Paper" msgid "media-type.stationery-letterhead" msgstr "Letterhead" msgid "media-type.stationery-lightweight" msgstr "Lightweight Paper" msgid "media-type.stationery-preprinted" msgstr "Preprinted Paper" msgid "media-type.stationery-prepunched" msgstr "Punched Paper" msgid "media-type.tab-stock" msgstr "Tab Stock" msgid "media-type.tractor" msgstr "Tractor" msgid "media-type.transfer" msgstr "Transfer" msgid "media-type.transparency" msgstr "Transparency" msgid "media-type.triple-wall" msgstr "Triple Wall" msgid "media-type.wet-film" msgstr "Wet Film" msgid "media-weight-metric" msgstr "Media Weight (grams per m²)" msgid "media.asme_f_28x40in" msgstr "28 x 40″" msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" msgstr "A4 or US Letter" msgid "media.iso_2a0_1189x1682mm" msgstr "2a0" msgid "media.iso_a0_841x1189mm" msgstr "A0" msgid "media.iso_a0x3_1189x2523mm" msgstr "A0x3" msgid "media.iso_a10_26x37mm" msgstr "A10" msgid "media.iso_a1_594x841mm" msgstr "A1" msgid "media.iso_a1x3_841x1783mm" msgstr "A1x3" msgid "media.iso_a1x4_841x2378mm" msgstr "A1x4" msgid "media.iso_a2_420x594mm" msgstr "A2" msgid "media.iso_a2x3_594x1261mm" msgstr "A2x3" msgid "media.iso_a2x4_594x1682mm" msgstr "A2x4" msgid "media.iso_a2x5_594x2102mm" msgstr "A2x5" msgid "media.iso_a3-extra_322x445mm" msgstr "A3 (Extra)" msgid "media.iso_a3_297x420mm" msgstr "A3" msgid "media.iso_a3x3_420x891mm" msgstr "A3x3" msgid "media.iso_a3x4_420x1189mm" msgstr "A3x4" msgid "media.iso_a3x5_420x1486mm" msgstr "A3x5" msgid "media.iso_a3x6_420x1783mm" msgstr "A3x6" msgid "media.iso_a3x7_420x2080mm" msgstr "A3x7" msgid "media.iso_a4-extra_235.5x322.3mm" msgstr "A4 (Extra)" msgid "media.iso_a4-tab_225x297mm" msgstr "A4 (Tab)" msgid "media.iso_a4_210x297mm" msgstr "A4" msgid "media.iso_a4x3_297x630mm" msgstr "A4x3" msgid "media.iso_a4x4_297x841mm" msgstr "A4x4" msgid "media.iso_a4x5_297x1051mm" msgstr "A4x5" msgid "media.iso_a4x6_297x1261mm" msgstr "A4x6" msgid "media.iso_a4x7_297x1471mm" msgstr "A4x7" msgid "media.iso_a4x8_297x1682mm" msgstr "A4x8" msgid "media.iso_a4x9_297x1892mm" msgstr "A4x9" msgid "media.iso_a5-extra_174x235mm" msgstr "A5 (Extra)" msgid "media.iso_a5_148x210mm" msgstr "A5" msgid "media.iso_a6_105x148mm" msgstr "A6" msgid "media.iso_a7_74x105mm" msgstr "A7" msgid "media.iso_a8_52x74mm" msgstr "A8" msgid "media.iso_a9_37x52mm" msgstr "A9" msgid "media.iso_b0_1000x1414mm" msgstr "B0" msgid "media.iso_b10_31x44mm" msgstr "B10" msgid "media.iso_b1_707x1000mm" msgstr "B1" msgid "media.iso_b2_500x707mm" msgstr "B2" msgid "media.iso_b3_353x500mm" msgstr "B3" msgid "media.iso_b4_250x353mm" msgstr "B4" msgid "media.iso_b5-extra_201x276mm" msgstr "B5 (Extra)" msgid "media.iso_b5_176x250mm" msgstr "B5 Envelope" msgid "media.iso_b6_125x176mm" msgstr "B6" msgid "media.iso_b6c4_125x324mm" msgstr "B6/C4 Envelope" msgid "media.iso_b7_88x125mm" msgstr "B7" msgid "media.iso_b8_62x88mm" msgstr "B8" msgid "media.iso_b9_44x62mm" msgstr "B9" msgid "media.iso_c0_917x1297mm" msgstr "C0 Envelope" msgid "media.iso_c10_28x40mm" msgstr "C10 Envelope" msgid "media.iso_c1_648x917mm" msgstr "C1 Envelope" msgid "media.iso_c2_458x648mm" msgstr "C2 Envelope" msgid "media.iso_c3_324x458mm" msgstr "C3 Envelope" msgid "media.iso_c4_229x324mm" msgstr "C4 Envelope" msgid "media.iso_c5_162x229mm" msgstr "C5 Envelope" msgid "media.iso_c6_114x162mm" msgstr "C6 Envelope" msgid "media.iso_c6c5_114x229mm" msgstr "C6c5 Envelope" msgid "media.iso_c7_81x114mm" msgstr "C7 Envelope" msgid "media.iso_c7c6_81x162mm" msgstr "C7c6 Envelope" msgid "media.iso_c8_57x81mm" msgstr "C8 Envelope" msgid "media.iso_c9_40x57mm" msgstr "C9 Envelope" msgid "media.iso_dl_110x220mm" msgstr "DL Envelope" msgid "media.iso_ra0_860x1220mm" msgstr "ISO RA0" msgid "media.iso_ra1_610x860mm" msgstr "ISO RA1" msgid "media.iso_ra2_430x610mm" msgstr "ISO RA2" msgid "media.iso_ra3_305x430mm" msgstr "ISO RA3" msgid "media.iso_ra4_215x305mm" msgstr "ISO RA4" msgid "media.iso_sra0_900x1280mm" msgstr "ISO SRA0" msgid "media.iso_sra1_640x900mm" msgstr "ISO SRA1" msgid "media.iso_sra2_450x640mm" msgstr "ISO SRA2" msgid "media.iso_sra3_320x450mm" msgstr "ISO SRA3" msgid "media.iso_sra4_225x320mm" msgstr "ISO SRA4" msgid "media.jis_b0_1030x1456mm" msgstr "JIS B0" msgid "media.jis_b10_32x45mm" msgstr "JIS B10" msgid "media.jis_b1_728x1030mm" msgstr "JIS B1" msgid "media.jis_b2_515x728mm" msgstr "JIS B2" msgid "media.jis_b3_364x515mm" msgstr "JIS B3" msgid "media.jis_b4_257x364mm" msgstr "JIS B4" msgid "media.jis_b5_182x257mm" msgstr "JIS B5" msgid "media.jis_b6_128x182mm" msgstr "JIS B6" msgid "media.jis_b7_91x128mm" msgstr "JIS B7" msgid "media.jis_b8_64x91mm" msgstr "JIS B8" msgid "media.jis_b9_45x64mm" msgstr "JIS B9" msgid "media.jis_exec_216x330mm" msgstr "JIS Executive" msgid "media.jpn_chou2_111.1x146mm" msgstr "Chou 2 Envelope" msgid "media.jpn_chou3_120x235mm" msgstr "Chou 3 Envelope" msgid "media.jpn_chou4_90x205mm" msgstr "Chou 4 Envelope" msgid "media.jpn_hagaki_100x148mm" msgstr "Hagaki" msgid "media.jpn_kahu_240x322.1mm" msgstr "Kahu Envelope" msgid "media.jpn_kaku2_240x332mm" msgstr "Kahu 2 Envelope" msgid "media.jpn_kaku3_216x277mm" msgstr "216 x 277mm" msgid "media.jpn_kaku4_197x267mm" msgstr "197 x 267mm" msgid "media.jpn_kaku5_190x240mm" msgstr "190 x 240mm" msgid "media.jpn_kaku7_142x205mm" msgstr "142 x 205mm" msgid "media.jpn_kaku8_119x197mm" msgstr "119 x 197mm" msgid "media.jpn_oufuku_148x200mm" msgstr "Oufuku Reply Postcard" msgid "media.jpn_you4_105x235mm" msgstr "You 4 Envelope" msgid "media.na_10x11_10x11in" msgstr "10 x 11″" msgid "media.na_10x13_10x13in" msgstr "10 x 13″" msgid "media.na_10x14_10x14in" msgstr "10 x 14″" msgid "media.na_10x15_10x15in" msgstr "10 x 15″" msgid "media.na_11x12_11x12in" msgstr "11 x 12″" msgid "media.na_11x15_11x15in" msgstr "11 x 15″" msgid "media.na_12x19_12x19in" msgstr "12 x 19″" msgid "media.na_5x7_5x7in" msgstr "5 x 7″" msgid "media.na_6x9_6x9in" msgstr "6 x 9″" msgid "media.na_7x9_7x9in" msgstr "7 x 9″" msgid "media.na_9x11_9x11in" msgstr "9 x 11″" msgid "media.na_a2_4.375x5.75in" msgstr "A2 Envelope" msgid "media.na_arch-a_9x12in" msgstr "9 x 12″" msgid "media.na_arch-b_12x18in" msgstr "12 x 18″" msgid "media.na_arch-c_18x24in" msgstr "18 x 24″" msgid "media.na_arch-d_24x36in" msgstr "24 x 36″" msgid "media.na_arch-e2_26x38in" msgstr "26 x 38″" msgid "media.na_arch-e3_27x39in" msgstr "27 x 39″" msgid "media.na_arch-e_36x48in" msgstr "36 x 48″" msgid "media.na_b-plus_12x19.17in" msgstr "12 x 19.17″" msgid "media.na_c5_6.5x9.5in" msgstr "C5 Envelope" msgid "media.na_c_17x22in" msgstr "17 x 22″" msgid "media.na_d_22x34in" msgstr "22 x 34″" msgid "media.na_e_34x44in" msgstr "34 x 44″" msgid "media.na_edp_11x14in" msgstr "11 x 14″" msgid "media.na_eur-edp_12x14in" msgstr "12 x 14″" msgid "media.na_executive_7.25x10.5in" msgstr "Executive" msgid "media.na_f_44x68in" msgstr "44 x 68″" msgid "media.na_fanfold-eur_8.5x12in" msgstr "European Fanfold" msgid "media.na_fanfold-us_11x14.875in" msgstr "US Fanfold" msgid "media.na_foolscap_8.5x13in" msgstr "Foolscap" msgid "media.na_govt-legal_8x13in" msgstr "8 x 13″" msgid "media.na_govt-letter_8x10in" msgstr "8 x 10″" msgid "media.na_index-3x5_3x5in" msgstr "3 x 5″" msgid "media.na_index-4x6-ext_6x8in" msgstr "6 x 8″" msgid "media.na_index-4x6_4x6in" msgstr "4 x 6″" msgid "media.na_index-5x8_5x8in" msgstr "5 x 8″" msgid "media.na_invoice_5.5x8.5in" msgstr "Statement" msgid "media.na_ledger_11x17in" msgstr "11 x 17″" msgid "media.na_legal-extra_9.5x15in" msgstr "US Legal (Extra)" msgid "media.na_legal_8.5x14in" msgstr "US Legal" msgid "media.na_letter-extra_9.5x12in" msgstr "US Letter (Extra)" msgid "media.na_letter-plus_8.5x12.69in" msgstr "US Letter (Plus)" msgid "media.na_letter_8.5x11in" msgstr "US Letter" msgid "media.na_monarch_3.875x7.5in" msgstr "Monarch Envelope" msgid "media.na_number-10_4.125x9.5in" msgstr "#10 Envelope" msgid "media.na_number-11_4.5x10.375in" msgstr "#11 Envelope" msgid "media.na_number-12_4.75x11in" msgstr "#12 Envelope" msgid "media.na_number-14_5x11.5in" msgstr "#14 Envelope" msgid "media.na_number-9_3.875x8.875in" msgstr "#9 Envelope" msgid "media.na_oficio_8.5x13.4in" msgstr "8.5 x 13.4″" msgid "media.na_personal_3.625x6.5in" msgstr "Personal Envelope" msgid "media.na_quarto_8.5x10.83in" msgstr "Quarto" msgid "media.na_super-a_8.94x14in" msgstr "8.94 x 14″" msgid "media.na_super-b_13x19in" msgstr "13 x 19″" msgid "media.na_wide-format_30x42in" msgstr "30 x 42″" msgid "media.oe_12x16_12x16in" msgstr "12 x 16″" msgid "media.oe_14x17_14x17in" msgstr "14 x 17″" msgid "media.oe_18x22_18x22in" msgstr "18 x 22″" msgid "media.oe_a2plus_17x24in" msgstr "17 x 24″" msgid "media.oe_photo-10r_10x12in" msgstr "10 x 12″" msgid "media.oe_photo-20r_20x24in" msgstr "20 x 24″" msgid "media.oe_photo-l_3.5x5in" msgstr "3.5 x 5″" msgid "media.oe_photo-s10r_10x15in" msgstr "10 x 15″" msgid "media.om_16k_184x260mm" msgstr "184 x 260mm" msgid "media.om_16k_195x270mm" msgstr "195 x 270mm" msgid "media.om_dai-pa-kai_275x395mm" msgstr "275 x 395mm" msgid "media.om_folio-sp_215x315mm" msgstr "Folio" msgid "media.om_folio_210x330mm" msgstr "Folio (Special)" msgid "media.om_invite_220x220mm" msgstr "Invitation Envelope" msgid "media.om_italian_110x230mm" msgstr "Italian Envelope" msgid "media.om_juuro-ku-kai_198x275mm" msgstr "198 x 275mm" msgid "media.om_large-photo_200x300" msgstr "200 x 300" msgid "media.om_medium-photo_130x180mm" msgstr "130 x 180mm" msgid "media.om_pa-kai_267x389mm" msgstr "267 x 389mm" msgid "media.om_postfix_114x229mm" msgstr "Postfix Envelope" msgid "media.om_small-photo_100x150mm" msgstr "100 x 150mm" msgid "media.om_wide-photo_100x200mm" msgstr "100 x 200mm" msgid "media.prc_10_324x458mm" msgstr "Chinese #10 Envelope" msgid "media.prc_16k_146x215mm" msgstr "Chinese 16k" msgid "media.prc_1_102x165mm" msgstr "Chinese #1 Envelope" msgid "media.prc_2_102x176mm" msgstr "Chinese #2 Envelope" msgid "media.prc_32k_97x151mm" msgstr "Chinese 32k" msgid "media.prc_3_125x176mm" msgstr "Chinese #3 Envelope" msgid "media.prc_4_110x208mm" msgstr "Chinese #4 Envelope" msgid "media.prc_5_110x220mm" msgstr "Chinese #5 Envelope" msgid "media.prc_6_120x320mm" msgstr "Chinese #6 Envelope" msgid "media.prc_7_160x230mm" msgstr "Chinese #7 Envelope" msgid "media.prc_8_120x309mm" msgstr "Chinese #8 Envelope" msgid "media.roc_16k_7.75x10.75in" msgstr "ROC 16k" msgid "media.roc_8k_10.75x15.5in" msgstr "ROC 8k" msgid "multiple-document-handling" msgstr "Multiple Document Handling" msgid "multiple-document-handling.separate-documents-collated-copies" msgstr "Separate Documents Collated Copies" msgid "multiple-document-handling.separate-documents-uncollated-copies" msgstr "Separate Documents Uncollated Copies" msgid "multiple-document-handling.single-document" msgstr "Single Document" msgid "multiple-document-handling.single-document-new-sheet" msgstr "Single Document New Sheet" msgid "multiple-object-handling" msgstr "Multiple Object Handling" msgid "multiple-object-handling.auto" msgstr "Automatic" msgid "multiple-object-handling.best-fit" msgstr "Best Fit" msgid "multiple-object-handling.best-quality" msgstr "Best Quality" msgid "multiple-object-handling.best-speed" msgstr "Best Speed" msgid "multiple-object-handling.one-at-a-time" msgstr "One At A Time" msgid "multiple-operation-time-out-action" msgstr "On Timeout" msgid "multiple-operation-time-out-action.abort-job" msgstr "Abort Job" msgid "multiple-operation-time-out-action.hold-job" msgstr "Hold Job" msgid "multiple-operation-time-out-action.process-job" msgstr "Process Job" msgid "noise-removal" msgstr "Noise Removal" msgid "notify-attributes" msgstr "Notify Attributes" msgid "notify-charset" msgstr "Notify Charset" msgid "notify-events" msgstr "Notify Events" msgid "notify-events.document-completed" msgstr "Document Completed" msgid "notify-events.document-config-changed" msgstr "Document Config Changed" msgid "notify-events.document-created" msgstr "Document Created" msgid "notify-events.document-fetchable" msgstr "Document Fetchable" msgid "notify-events.document-state-changed" msgstr "Document State Changed" msgid "notify-events.document-stopped" msgstr "Document Stopped" msgid "notify-events.job-completed" msgstr "Job Completed" msgid "notify-events.job-config-changed" msgstr "Job Config Changed" msgid "notify-events.job-created" msgstr "Job Created" msgid "notify-events.job-fetchable" msgstr "Job Fetchable" msgid "notify-events.job-progress" msgstr "Job Progress" msgid "notify-events.job-state-changed" msgstr "Job State Changed" msgid "notify-events.job-stopped" msgstr "Job Stopped" msgid "notify-events.none" msgstr "None" msgid "notify-events.printer-config-changed" msgstr "Printer Config Changed" msgid "notify-events.printer-finishings-changed" msgstr "Printer Finishings Changed" msgid "notify-events.printer-media-changed" msgstr "Printer Media Changed" msgid "notify-events.printer-queue-order-changed" msgstr "Printer Queue Order Changed" msgid "notify-events.printer-restarted" msgstr "Printer Restarted" msgid "notify-events.printer-shutdown" msgstr "Printer Shutdown" msgid "notify-events.printer-state-changed" msgstr "Printer State Changed" msgid "notify-events.printer-stopped" msgstr "Printer Stopped" msgid "notify-get-interval" msgstr "Notify Get Interval" msgid "notify-lease-duration" msgstr "Notify Lease Duration" msgid "notify-natural-language" msgstr "Notify Natural Language" msgid "notify-pull-method" msgstr "Notify Pull Method" msgid "notify-recipient-uri" msgstr "Notify Recipient" msgid "notify-sequence-numbers" msgstr "Notify Sequence Numbers" msgid "notify-subscription-ids" msgstr "Notify Subscription Ids" msgid "notify-time-interval" msgstr "Notify Time Interval" msgid "notify-user-data" msgstr "Notify User Data" msgid "notify-wait" msgstr "Notify Wait" msgid "number-of-retries" msgstr "Number Of Retries" msgid "number-up" msgstr "Number-Up" msgid "object-offset" msgstr "Object Offset" msgid "object-size" msgstr "Object Size" msgid "organization-name" msgstr "Organization Name" msgid "orientation-requested" msgstr "Orientation" msgid "orientation-requested.3" msgstr "Portrait" msgid "orientation-requested.4" msgstr "Landscape" msgid "orientation-requested.5" msgstr "Reverse Landscape" msgid "orientation-requested.6" msgstr "Reverse Portrait" msgid "orientation-requested.7" msgstr "None" msgid "output-attributes" msgstr "Scanned Image Options" msgid "output-bin" msgstr "Output Tray" msgid "output-bin.auto" msgstr "Automatic" msgid "output-bin.bottom" msgstr "Bottom" msgid "output-bin.center" msgstr "Center" msgid "output-bin.face-down" msgstr "Face Down" msgid "output-bin.face-up" msgstr "Face Up" msgid "output-bin.large-capacity" msgstr "Large Capacity" msgid "output-bin.left" msgstr "Left" msgid "output-bin.mailbox-1" msgstr "Mailbox 1" msgid "output-bin.mailbox-10" msgstr "Mailbox 10" msgid "output-bin.mailbox-2" msgstr "Mailbox 2" msgid "output-bin.mailbox-3" msgstr "Mailbox 3" msgid "output-bin.mailbox-4" msgstr "Mailbox 4" msgid "output-bin.mailbox-5" msgstr "Mailbox 5" msgid "output-bin.mailbox-6" msgstr "Mailbox 6" msgid "output-bin.mailbox-7" msgstr "Mailbox 7" msgid "output-bin.mailbox-8" msgstr "Mailbox 8" msgid "output-bin.mailbox-9" msgstr "Mailbox 9" msgid "output-bin.middle" msgstr "Middle" msgid "output-bin.my-mailbox" msgstr "My Mailbox" msgid "output-bin.rear" msgstr "Rear" msgid "output-bin.right" msgstr "Right" msgid "output-bin.side" msgstr "Side" msgid "output-bin.stacker-1" msgstr "Stacker 1" msgid "output-bin.stacker-10" msgstr "Stacker 10" msgid "output-bin.stacker-2" msgstr "Stacker 2" msgid "output-bin.stacker-3" msgstr "Stacker 3" msgid "output-bin.stacker-4" msgstr "Stacker 4" msgid "output-bin.stacker-5" msgstr "Stacker 5" msgid "output-bin.stacker-6" msgstr "Stacker 6" msgid "output-bin.stacker-7" msgstr "Stacker 7" msgid "output-bin.stacker-8" msgstr "Stacker 8" msgid "output-bin.stacker-9" msgstr "Stacker 9" msgid "output-bin.top" msgstr "Top" msgid "output-bin.tray-1" msgstr "Tray 1" msgid "output-bin.tray-10" msgstr "Tray 10" msgid "output-bin.tray-2" msgstr "Tray 2" msgid "output-bin.tray-3" msgstr "Tray 3" msgid "output-bin.tray-4" msgstr "Tray 4" msgid "output-bin.tray-5" msgstr "Tray 5" msgid "output-bin.tray-6" msgstr "Tray 6" msgid "output-bin.tray-7" msgstr "Tray 7" msgid "output-bin.tray-8" msgstr "Tray 8" msgid "output-bin.tray-9" msgstr "Tray 9" msgid "output-compression-quality-factor" msgstr "Scanned Image Quality" msgid "page-delivery" msgstr "Page Delivery" msgid "page-delivery.reverse-order-face-down" msgstr "Reverse Order Face-down" msgid "page-delivery.reverse-order-face-up" msgstr "Reverse Order Face-up" msgid "page-delivery.same-order-face-down" msgstr "Same Order Face-down" msgid "page-delivery.same-order-face-up" msgstr "Same Order Face-up" msgid "page-delivery.system-specified" msgstr "System Specified" msgid "page-order-received" msgstr "Page Order Received" msgid "page-order-received.1-to-n-order" msgstr "1 To N" msgid "page-order-received.n-to-1-order" msgstr "N To 1" msgid "page-ranges" msgstr "Page Ranges" msgid "pages" msgstr "Pages" msgid "pages-per-subset" msgstr "Pages Per Subset" msgid "platform-shape" msgstr "Platform Shape" msgid "platform-shape.ellipse" msgstr "Round" msgid "platform-shape.rectangle" msgstr "Rectangle" msgid "platform-temperature" msgstr "Platform Temperature" msgid "post-dial-string" msgstr "Post-dial String" msgid "pre-dial-string" msgstr "Pre-dial String" msgid "presentation-direction-number-up" msgstr "Number-Up Layout" msgid "presentation-direction-number-up.tobottom-toleft" msgstr "Top-bottom, Right-left" msgid "presentation-direction-number-up.tobottom-toright" msgstr "Top-bottom, Left-right" msgid "presentation-direction-number-up.toleft-tobottom" msgstr "Right-left, Top-bottom" msgid "presentation-direction-number-up.toleft-totop" msgstr "Right-left, Bottom-top" msgid "presentation-direction-number-up.toright-tobottom" msgstr "Left-right, Top-bottom" msgid "presentation-direction-number-up.toright-totop" msgstr "Left-right, Bottom-top" msgid "presentation-direction-number-up.totop-toleft" msgstr "Bottom-top, Right-left" msgid "presentation-direction-number-up.totop-toright" msgstr "Bottom-top, Left-right" msgid "print-accuracy" msgstr "Print Accuracy" msgid "print-base" msgstr "Print Base" msgid "print-base.brim" msgstr "Brim" msgid "print-base.none" msgstr "None" msgid "print-base.raft" msgstr "Raft" msgid "print-base.skirt" msgstr "Skirt" msgid "print-base.standard" msgstr "Standard" msgid "print-color-mode" msgstr "Print Color Mode" msgid "print-color-mode.auto" msgstr "Automatic" msgid "print-color-mode.bi-level" msgstr "Text" msgid "print-color-mode.color" msgstr "Color" msgid "print-color-mode.highlight" msgstr "Highlight" msgid "print-color-mode.monochrome" msgstr "Monochrome" msgid "print-color-mode.process-bi-level" msgstr "Process Text" msgid "print-color-mode.process-monochrome" msgstr "Process Monochrome" msgid "print-content-optimize" msgstr "Print Optimization" msgid "print-content-optimize.auto" msgstr "Automatic" msgid "print-content-optimize.graphic" msgstr "Graphics" msgid "print-content-optimize.photo" msgstr "Photo" msgid "print-content-optimize.text" msgstr "Text" msgid "print-content-optimize.text-and-graphic" msgstr "Text and Graphics" msgid "print-objects" msgstr "Print Objects" msgid "print-quality" msgstr "Print Quality" msgid "print-quality.3" msgstr "Draft" msgid "print-quality.4" msgstr "Normal" msgid "print-quality.5" msgstr "High" msgid "print-rendering-intent" msgstr "Print Rendering Intent" msgid "print-rendering-intent.absolute" msgstr "Absolute" msgid "print-rendering-intent.auto" msgstr "Automatic" msgid "print-rendering-intent.perceptual" msgstr "Perceptual" msgid "print-rendering-intent.relative" msgstr "Relative" msgid "print-rendering-intent.relative-bpc" msgstr "Relative w/Black Point Compensation" msgid "print-rendering-intent.saturation" msgstr "Saturation" msgid "print-scaling" msgstr "Print Scaling" msgid "print-scaling.auto" msgstr "Automatic" msgid "print-scaling.auto-fit" msgstr "Auto-fit" msgid "print-scaling.fill" msgstr "Fill" msgid "print-scaling.fit" msgstr "Fit" msgid "print-scaling.none" msgstr "None" msgid "print-supports" msgstr "Print Supports" msgid "print-supports.material" msgstr "With Specified Material" msgid "print-supports.none" msgstr "None" msgid "print-supports.standard" msgstr "Standard" msgid "printer-message-from-operator" msgstr "Message From Operator" msgid "printer-resolution" msgstr "Print Resolution" msgid "printer-state" msgstr "Printer State" msgid "printer-state-reasons" msgstr "Detailed Printer State" msgid "printer-state-reasons.alert-removal-of-binary-change-entry" msgstr "Old Alerts Have Been Removed" msgid "printer-state-reasons.bander-added" msgstr "Bander Added" msgid "printer-state-reasons.bander-almost-empty" msgstr "Bander Almost Empty" msgid "printer-state-reasons.bander-almost-full" msgstr "Bander Almost Full" msgid "printer-state-reasons.bander-at-limit" msgstr "Bander At Limit" msgid "printer-state-reasons.bander-closed" msgstr "Bander Closed" msgid "printer-state-reasons.bander-configuration-change" msgstr "Bander Configuration Change" msgid "printer-state-reasons.bander-cover-closed" msgstr "Bander Cover Closed" msgid "printer-state-reasons.bander-cover-open" msgstr "Bander Cover Open" msgid "printer-state-reasons.bander-empty" msgstr "Bander Empty" msgid "printer-state-reasons.bander-full" msgstr "Bander Full" msgid "printer-state-reasons.bander-interlock-closed" msgstr "Bander Interlock Closed" msgid "printer-state-reasons.bander-interlock-open" msgstr "Bander Interlock Open" msgid "printer-state-reasons.bander-jam" msgstr "Bander Jam" msgid "printer-state-reasons.bander-life-almost-over" msgstr "Bander Life Almost Over" msgid "printer-state-reasons.bander-life-over" msgstr "Bander Life Over" msgid "printer-state-reasons.bander-memory-exhausted" msgstr "Bander Memory Exhausted" msgid "printer-state-reasons.bander-missing" msgstr "Bander Missing" msgid "printer-state-reasons.bander-motor-failure" msgstr "Bander Motor Failure" msgid "printer-state-reasons.bander-near-limit" msgstr "Bander Near Limit" msgid "printer-state-reasons.bander-offline" msgstr "Bander Offline" msgid "printer-state-reasons.bander-opened" msgstr "Bander Opened" msgid "printer-state-reasons.bander-over-temperature" msgstr "Bander Over Temperature" msgid "printer-state-reasons.bander-power-saver" msgstr "Bander Power Saver" msgid "printer-state-reasons.bander-recoverable-failure" msgstr "Bander Recoverable Failure" msgid "printer-state-reasons.bander-recoverable-storage" msgstr "Bander Recoverable Storage" msgid "printer-state-reasons.bander-removed" msgstr "Bander Removed" msgid "printer-state-reasons.bander-resource-added" msgstr "Bander Resource Added" msgid "printer-state-reasons.bander-resource-removed" msgstr "Bander Resource Removed" msgid "printer-state-reasons.bander-thermistor-failure" msgstr "Bander Thermistor Failure" msgid "printer-state-reasons.bander-timing-failure" msgstr "Bander Timing Failure" msgid "printer-state-reasons.bander-turned-off" msgstr "Bander Turned Off" msgid "printer-state-reasons.bander-turned-on" msgstr "Bander Turned On" msgid "printer-state-reasons.bander-under-temperature" msgstr "Bander Under Temperature" msgid "printer-state-reasons.bander-unrecoverable-failure" msgstr "Bander Unrecoverable Failure" msgid "printer-state-reasons.bander-unrecoverable-storage-error" msgstr "Bander Unrecoverable Storage Error" msgid "printer-state-reasons.bander-warming-up" msgstr "Bander Warming Up" msgid "printer-state-reasons.binder-added" msgstr "Binder Added" msgid "printer-state-reasons.binder-almost-empty" msgstr "Binder Almost Empty" msgid "printer-state-reasons.binder-almost-full" msgstr "Binder Almost Full" msgid "printer-state-reasons.binder-at-limit" msgstr "Binder At Limit" msgid "printer-state-reasons.binder-closed" msgstr "Binder Closed" msgid "printer-state-reasons.binder-configuration-change" msgstr "Binder Configuration Change" msgid "printer-state-reasons.binder-cover-closed" msgstr "Binder Cover Closed" msgid "printer-state-reasons.binder-cover-open" msgstr "Binder Cover Open" msgid "printer-state-reasons.binder-empty" msgstr "Binder Empty" msgid "printer-state-reasons.binder-full" msgstr "Binder Full" msgid "printer-state-reasons.binder-interlock-closed" msgstr "Binder Interlock Closed" msgid "printer-state-reasons.binder-interlock-open" msgstr "Binder Interlock Open" msgid "printer-state-reasons.binder-jam" msgstr "Binder Jam" msgid "printer-state-reasons.binder-life-almost-over" msgstr "Binder Life Almost Over" msgid "printer-state-reasons.binder-life-over" msgstr "Binder Life Over" msgid "printer-state-reasons.binder-memory-exhausted" msgstr "Binder Memory Exhausted" msgid "printer-state-reasons.binder-missing" msgstr "Binder Missing" msgid "printer-state-reasons.binder-motor-failure" msgstr "Binder Motor Failure" msgid "printer-state-reasons.binder-near-limit" msgstr "Binder Near Limit" msgid "printer-state-reasons.binder-offline" msgstr "Binder Offline" msgid "printer-state-reasons.binder-opened" msgstr "Binder Opened" msgid "printer-state-reasons.binder-over-temperature" msgstr "Binder Over Temperature" msgid "printer-state-reasons.binder-power-saver" msgstr "Binder Power Saver" msgid "printer-state-reasons.binder-recoverable-failure" msgstr "Binder Recoverable Failure" msgid "printer-state-reasons.binder-recoverable-storage" msgstr "Binder Recoverable Storage" msgid "printer-state-reasons.binder-removed" msgstr "Binder Removed" msgid "printer-state-reasons.binder-resource-added" msgstr "Binder Resource Added" msgid "printer-state-reasons.binder-resource-removed" msgstr "Binder Resource Removed" msgid "printer-state-reasons.binder-thermistor-failure" msgstr "Binder Thermistor Failure" msgid "printer-state-reasons.binder-timing-failure" msgstr "Binder Timing Failure" msgid "printer-state-reasons.binder-turned-off" msgstr "Binder Turned Off" msgid "printer-state-reasons.binder-turned-on" msgstr "Binder Turned On" msgid "printer-state-reasons.binder-under-temperature" msgstr "Binder Under Temperature" msgid "printer-state-reasons.binder-unrecoverable-failure" msgstr "Binder Unrecoverable Failure" msgid "printer-state-reasons.binder-unrecoverable-storage-error" msgstr "Binder Unrecoverable Storage Error" msgid "printer-state-reasons.binder-warming-up" msgstr "Binder Warming Up" msgid "printer-state-reasons.camera-failure" msgstr "Camera Failure" msgid "printer-state-reasons.chamber-cooling" msgstr "Chamber Cooling" msgid "printer-state-reasons.chamber-heating" msgstr "Chamber Heating" msgid "printer-state-reasons.chamber-temperature-high" msgstr "Chamber Temperature High" msgid "printer-state-reasons.chamber-temperature-low" msgstr "Chamber Temperature Low" msgid "printer-state-reasons.cleaner-life-almost-over" msgstr "Cleaner Life Almost Over" msgid "printer-state-reasons.cleaner-life-over" msgstr "Cleaner Life Over" msgid "printer-state-reasons.configuration-change" msgstr "Configuration Change" msgid "printer-state-reasons.connecting-to-device" msgstr "Connecting To Device" msgid "printer-state-reasons.cover-open" msgstr "Cover Open" msgid "printer-state-reasons.deactivated" msgstr "Deactivated" msgid "printer-state-reasons.developer-empty" msgstr "Developer Empty" msgid "printer-state-reasons.developer-low" msgstr "Developer Low" msgid "printer-state-reasons.die-cutter-added" msgstr "Die Cutter Added" msgid "printer-state-reasons.die-cutter-almost-empty" msgstr "Die Cutter Almost Empty" msgid "printer-state-reasons.die-cutter-almost-full" msgstr "Die Cutter Almost Full" msgid "printer-state-reasons.die-cutter-at-limit" msgstr "Die Cutter At Limit" msgid "printer-state-reasons.die-cutter-closed" msgstr "Die Cutter Closed" msgid "printer-state-reasons.die-cutter-configuration-change" msgstr "Die Cutter Configuration Change" msgid "printer-state-reasons.die-cutter-cover-closed" msgstr "Die Cutter Cover Closed" msgid "printer-state-reasons.die-cutter-cover-open" msgstr "Die Cutter Cover Open" msgid "printer-state-reasons.die-cutter-empty" msgstr "Die Cutter Empty" msgid "printer-state-reasons.die-cutter-full" msgstr "Die Cutter Full" msgid "printer-state-reasons.die-cutter-interlock-closed" msgstr "Die Cutter Interlock Closed" msgid "printer-state-reasons.die-cutter-interlock-open" msgstr "Die Cutter Interlock Open" msgid "printer-state-reasons.die-cutter-jam" msgstr "Die Cutter Jam" msgid "printer-state-reasons.die-cutter-life-almost-over" msgstr "Die Cutter Life Almost Over" msgid "printer-state-reasons.die-cutter-life-over" msgstr "Die Cutter Life Over" msgid "printer-state-reasons.die-cutter-memory-exhausted" msgstr "Die Cutter Memory Exhausted" msgid "printer-state-reasons.die-cutter-missing" msgstr "Die Cutter Missing" msgid "printer-state-reasons.die-cutter-motor-failure" msgstr "Die Cutter Motor Failure" msgid "printer-state-reasons.die-cutter-near-limit" msgstr "Die Cutter Near Limit" msgid "printer-state-reasons.die-cutter-offline" msgstr "Die Cutter Offline" msgid "printer-state-reasons.die-cutter-opened" msgstr "Die Cutter Opened" msgid "printer-state-reasons.die-cutter-over-temperature" msgstr "Die Cutter Over Temperature" msgid "printer-state-reasons.die-cutter-power-saver" msgstr "Die Cutter Power Saver" msgid "printer-state-reasons.die-cutter-recoverable-failure" msgstr "Die Cutter Recoverable Failure" msgid "printer-state-reasons.die-cutter-recoverable-storage" msgstr "Die Cutter Recoverable Storage" msgid "printer-state-reasons.die-cutter-removed" msgstr "Die Cutter Removed" msgid "printer-state-reasons.die-cutter-resource-added" msgstr "Die Cutter Resource Added" msgid "printer-state-reasons.die-cutter-resource-removed" msgstr "Die Cutter Resource Removed" msgid "printer-state-reasons.die-cutter-thermistor-failure" msgstr "Die Cutter Thermistor Failure" msgid "printer-state-reasons.die-cutter-timing-failure" msgstr "Die Cutter Timing Failure" msgid "printer-state-reasons.die-cutter-turned-off" msgstr "Die Cutter Turned Off" msgid "printer-state-reasons.die-cutter-turned-on" msgstr "Die Cutter Turned On" msgid "printer-state-reasons.die-cutter-under-temperature" msgstr "Die Cutter Under Temperature" msgid "printer-state-reasons.die-cutter-unrecoverable-failure" msgstr "Die Cutter Unrecoverable Failure" msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error" msgstr "Die Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.die-cutter-warming-up" msgstr "Die Cutter Warming Up" msgid "printer-state-reasons.door-open" msgstr "Door Open" msgid "printer-state-reasons.extruder-cooling" msgstr "Extruder Cooling" msgid "printer-state-reasons.extruder-failure" msgstr "Extruder Failure" msgid "printer-state-reasons.extruder-heating" msgstr "Extruder Heating" msgid "printer-state-reasons.extruder-jam" msgstr "Extruder Jam" msgid "printer-state-reasons.extruder-temperature-high" msgstr "Extruder Temperature High" msgid "printer-state-reasons.extruder-temperature-low" msgstr "Extruder Temperature Low" msgid "printer-state-reasons.fan-failure" msgstr "Fan Failure" msgid "printer-state-reasons.folder-added" msgstr "Folder Added" msgid "printer-state-reasons.folder-almost-empty" msgstr "Folder Almost Empty" msgid "printer-state-reasons.folder-almost-full" msgstr "Folder Almost Full" msgid "printer-state-reasons.folder-at-limit" msgstr "Folder At Limit" msgid "printer-state-reasons.folder-closed" msgstr "Folder Closed" msgid "printer-state-reasons.folder-configuration-change" msgstr "Folder Configuration Change" msgid "printer-state-reasons.folder-cover-closed" msgstr "Folder Cover Closed" msgid "printer-state-reasons.folder-cover-open" msgstr "Folder Cover Open" msgid "printer-state-reasons.folder-empty" msgstr "Folder Empty" msgid "printer-state-reasons.folder-full" msgstr "Folder Full" msgid "printer-state-reasons.folder-interlock-closed" msgstr "Folder Interlock Closed" msgid "printer-state-reasons.folder-interlock-open" msgstr "Folder Interlock Open" msgid "printer-state-reasons.folder-jam" msgstr "Folder Jam" msgid "printer-state-reasons.folder-life-almost-over" msgstr "Folder Life Almost Over" msgid "printer-state-reasons.folder-life-over" msgstr "Folder Life Over" msgid "printer-state-reasons.folder-memory-exhausted" msgstr "Folder Memory Exhausted" msgid "printer-state-reasons.folder-missing" msgstr "Folder Missing" msgid "printer-state-reasons.folder-motor-failure" msgstr "Folder Motor Failure" msgid "printer-state-reasons.folder-near-limit" msgstr "Folder Near Limit" msgid "printer-state-reasons.folder-offline" msgstr "Folder Offline" msgid "printer-state-reasons.folder-opened" msgstr "Folder Opened" msgid "printer-state-reasons.folder-over-temperature" msgstr "Folder Over Temperature" msgid "printer-state-reasons.folder-power-saver" msgstr "Folder Power Saver" msgid "printer-state-reasons.folder-recoverable-failure" msgstr "Folder Recoverable Failure" msgid "printer-state-reasons.folder-recoverable-storage" msgstr "Folder Recoverable Storage" msgid "printer-state-reasons.folder-removed" msgstr "Folder Removed" msgid "printer-state-reasons.folder-resource-added" msgstr "Folder Resource Added" msgid "printer-state-reasons.folder-resource-removed" msgstr "Folder Resource Removed" msgid "printer-state-reasons.folder-thermistor-failure" msgstr "Folder Thermistor Failure" msgid "printer-state-reasons.folder-timing-failure" msgstr "Folder Timing Failure" msgid "printer-state-reasons.folder-turned-off" msgstr "Folder Turned Off" msgid "printer-state-reasons.folder-turned-on" msgstr "Folder Turned On" msgid "printer-state-reasons.folder-under-temperature" msgstr "Folder Under Temperature" msgid "printer-state-reasons.folder-unrecoverable-failure" msgstr "Folder Unrecoverable Failure" msgid "printer-state-reasons.folder-unrecoverable-storage-error" msgstr "Folder Unrecoverable Storage Error" msgid "printer-state-reasons.folder-warming-up" msgstr "Folder Warming Up" msgid "printer-state-reasons.fuser-over-temp" msgstr "Fuser Over Temp" msgid "printer-state-reasons.fuser-under-temp" msgstr "Fuser Under Temp" msgid "printer-state-reasons.hold-new-jobs" msgstr "Hold New Jobs" msgid "printer-state-reasons.identify-printer-requested" msgstr "Identify Printer" msgid "printer-state-reasons.imprinter-added" msgstr "Imprinter Added" msgid "printer-state-reasons.imprinter-almost-empty" msgstr "Imprinter Almost Empty" msgid "printer-state-reasons.imprinter-almost-full" msgstr "Imprinter Almost Full" msgid "printer-state-reasons.imprinter-at-limit" msgstr "Imprinter At Limit" msgid "printer-state-reasons.imprinter-closed" msgstr "Imprinter Closed" msgid "printer-state-reasons.imprinter-configuration-change" msgstr "Imprinter Configuration Change" msgid "printer-state-reasons.imprinter-cover-closed" msgstr "Imprinter Cover Closed" msgid "printer-state-reasons.imprinter-cover-open" msgstr "Imprinter Cover Open" msgid "printer-state-reasons.imprinter-empty" msgstr "Imprinter Empty" msgid "printer-state-reasons.imprinter-full" msgstr "Imprinter Full" msgid "printer-state-reasons.imprinter-interlock-closed" msgstr "Imprinter Interlock Closed" msgid "printer-state-reasons.imprinter-interlock-open" msgstr "Imprinter Interlock Open" msgid "printer-state-reasons.imprinter-jam" msgstr "Imprinter Jam" msgid "printer-state-reasons.imprinter-life-almost-over" msgstr "Imprinter Life Almost Over" msgid "printer-state-reasons.imprinter-life-over" msgstr "Imprinter Life Over" msgid "printer-state-reasons.imprinter-memory-exhausted" msgstr "Imprinter Memory Exhausted" msgid "printer-state-reasons.imprinter-missing" msgstr "Imprinter Missing" msgid "printer-state-reasons.imprinter-motor-failure" msgstr "Imprinter Motor Failure" msgid "printer-state-reasons.imprinter-near-limit" msgstr "Imprinter Near Limit" msgid "printer-state-reasons.imprinter-offline" msgstr "Imprinter Offline" msgid "printer-state-reasons.imprinter-opened" msgstr "Imprinter Opened" msgid "printer-state-reasons.imprinter-over-temperature" msgstr "Imprinter Over Temperature" msgid "printer-state-reasons.imprinter-power-saver" msgstr "Imprinter Power Saver" msgid "printer-state-reasons.imprinter-recoverable-failure" msgstr "Imprinter Recoverable Failure" msgid "printer-state-reasons.imprinter-recoverable-storage" msgstr "Imprinter Recoverable Storage" msgid "printer-state-reasons.imprinter-removed" msgstr "Imprinter Removed" msgid "printer-state-reasons.imprinter-resource-added" msgstr "Imprinter Resource Added" msgid "printer-state-reasons.imprinter-resource-removed" msgstr "Imprinter Resource Removed" msgid "printer-state-reasons.imprinter-thermistor-failure" msgstr "Imprinter Thermistor Failure" msgid "printer-state-reasons.imprinter-timing-failure" msgstr "Imprinter Timing Failure" msgid "printer-state-reasons.imprinter-turned-off" msgstr "Imprinter Turned Off" msgid "printer-state-reasons.imprinter-turned-on" msgstr "Imprinter Turned On" msgid "printer-state-reasons.imprinter-under-temperature" msgstr "Imprinter Under Temperature" msgid "printer-state-reasons.imprinter-unrecoverable-failure" msgstr "Imprinter Unrecoverable Failure" msgid "printer-state-reasons.imprinter-unrecoverable-storage-error" msgstr "Imprinter Unrecoverable Storage Error" msgid "printer-state-reasons.imprinter-warming-up" msgstr "Imprinter Warming Up" msgid "printer-state-reasons.input-cannot-feed-size-selected" msgstr "Input Cannot Feed Size Selected" msgid "printer-state-reasons.input-manual-input-request" msgstr "Input Manual Input Request" msgid "printer-state-reasons.input-media-color-change" msgstr "Input Media Color Change" msgid "printer-state-reasons.input-media-form-parts-change" msgstr "Input Media Form Parts Change" msgid "printer-state-reasons.input-media-size-change" msgstr "Input Media Size Change" msgid "printer-state-reasons.input-media-type-change" msgstr "Input Media Type Change" msgid "printer-state-reasons.input-media-weight-change" msgstr "Input Media Weight Change" msgid "printer-state-reasons.input-tray-elevation-failure" msgstr "Input Tray Elevation Failure" msgid "printer-state-reasons.input-tray-missing" msgstr "Input Tray Missing" msgid "printer-state-reasons.input-tray-position-failure" msgstr "Input Tray Position Failure" msgid "printer-state-reasons.inserter-added" msgstr "Inserter Added" msgid "printer-state-reasons.inserter-almost-empty" msgstr "Inserter Almost Empty" msgid "printer-state-reasons.inserter-almost-full" msgstr "Inserter Almost Full" msgid "printer-state-reasons.inserter-at-limit" msgstr "Inserter At Limit" msgid "printer-state-reasons.inserter-closed" msgstr "Inserter Closed" msgid "printer-state-reasons.inserter-configuration-change" msgstr "Inserter Configuration Change" msgid "printer-state-reasons.inserter-cover-closed" msgstr "Inserter Cover Closed" msgid "printer-state-reasons.inserter-cover-open" msgstr "Inserter Cover Open" msgid "printer-state-reasons.inserter-empty" msgstr "Inserter Empty" msgid "printer-state-reasons.inserter-full" msgstr "Inserter Full" msgid "printer-state-reasons.inserter-interlock-closed" msgstr "Inserter Interlock Closed" msgid "printer-state-reasons.inserter-interlock-open" msgstr "Inserter Interlock Open" msgid "printer-state-reasons.inserter-jam" msgstr "Inserter Jam" msgid "printer-state-reasons.inserter-life-almost-over" msgstr "Inserter Life Almost Over" msgid "printer-state-reasons.inserter-life-over" msgstr "Inserter Life Over" msgid "printer-state-reasons.inserter-memory-exhausted" msgstr "Inserter Memory Exhausted" msgid "printer-state-reasons.inserter-missing" msgstr "Inserter Missing" msgid "printer-state-reasons.inserter-motor-failure" msgstr "Inserter Motor Failure" msgid "printer-state-reasons.inserter-near-limit" msgstr "Inserter Near Limit" msgid "printer-state-reasons.inserter-offline" msgstr "Inserter Offline" msgid "printer-state-reasons.inserter-opened" msgstr "Inserter Opened" msgid "printer-state-reasons.inserter-over-temperature" msgstr "Inserter Over Temperature" msgid "printer-state-reasons.inserter-power-saver" msgstr "Inserter Power Saver" msgid "printer-state-reasons.inserter-recoverable-failure" msgstr "Inserter Recoverable Failure" msgid "printer-state-reasons.inserter-recoverable-storage" msgstr "Inserter Recoverable Storage" msgid "printer-state-reasons.inserter-removed" msgstr "Inserter Removed" msgid "printer-state-reasons.inserter-resource-added" msgstr "Inserter Resource Added" msgid "printer-state-reasons.inserter-resource-removed" msgstr "Inserter Resource Removed" msgid "printer-state-reasons.inserter-thermistor-failure" msgstr "Inserter Thermistor Failure" msgid "printer-state-reasons.inserter-timing-failure" msgstr "Inserter Timing Failure" msgid "printer-state-reasons.inserter-turned-off" msgstr "Inserter Turned Off" msgid "printer-state-reasons.inserter-turned-on" msgstr "Inserter Turned On" msgid "printer-state-reasons.inserter-under-temperature" msgstr "Inserter Under Temperature" msgid "printer-state-reasons.inserter-unrecoverable-failure" msgstr "Inserter Unrecoverable Failure" msgid "printer-state-reasons.inserter-unrecoverable-storage-error" msgstr "Inserter Unrecoverable Storage Error" msgid "printer-state-reasons.inserter-warming-up" msgstr "Inserter Warming Up" msgid "printer-state-reasons.interlock-closed" msgstr "Interlock Closed" msgid "printer-state-reasons.interlock-open" msgstr "Interlock Open" msgid "printer-state-reasons.interpreter-cartridge-added" msgstr "Interpreter Cartridge Added" msgid "printer-state-reasons.interpreter-cartridge-deleted" msgstr "Interpreter Cartridge Removed" msgid "printer-state-reasons.interpreter-complex-page-encountered" msgstr "Interpreter Complex Page Encountered" msgid "printer-state-reasons.interpreter-memory-decrease" msgstr "Interpreter Memory Decrease" msgid "printer-state-reasons.interpreter-memory-increase" msgstr "Interpreter Memory Increase" msgid "printer-state-reasons.interpreter-resource-added" msgstr "Interpreter Resource Added" msgid "printer-state-reasons.interpreter-resource-deleted" msgstr "Interpreter Resource Deleted" msgid "printer-state-reasons.interpreter-resource-unavailable" msgstr "Interpreter Resource Unavailable" msgid "printer-state-reasons.lamp-at-eol" msgstr "Lamp At End of Life" msgid "printer-state-reasons.lamp-failure" msgstr "Lamp Failure" msgid "printer-state-reasons.lamp-near-eol" msgstr "Lamp Near End of Life" msgid "printer-state-reasons.laser-at-eol" msgstr "Laser At End of Life" msgid "printer-state-reasons.laser-failure" msgstr "Laser Failure" msgid "printer-state-reasons.laser-near-eol" msgstr "Laser Near End of Life" msgid "printer-state-reasons.make-envelope-added" msgstr "Envelope Maker Added" msgid "printer-state-reasons.make-envelope-almost-empty" msgstr "Envelope Maker Almost Empty" msgid "printer-state-reasons.make-envelope-almost-full" msgstr "Envelope Maker Almost Full" msgid "printer-state-reasons.make-envelope-at-limit" msgstr "Envelope Maker At Limit" msgid "printer-state-reasons.make-envelope-closed" msgstr "Envelope Maker Closed" msgid "printer-state-reasons.make-envelope-configuration-change" msgstr "Envelope Maker Configuration Change" msgid "printer-state-reasons.make-envelope-cover-closed" msgstr "Envelope Maker Cover Closed" msgid "printer-state-reasons.make-envelope-cover-open" msgstr "Envelope Maker Cover Open" msgid "printer-state-reasons.make-envelope-empty" msgstr "Envelope Maker Empty" msgid "printer-state-reasons.make-envelope-full" msgstr "Envelope Maker Full" msgid "printer-state-reasons.make-envelope-interlock-closed" msgstr "Envelope Maker Interlock Closed" msgid "printer-state-reasons.make-envelope-interlock-open" msgstr "Envelope Maker Interlock Open" msgid "printer-state-reasons.make-envelope-jam" msgstr "Envelope Maker Jam" msgid "printer-state-reasons.make-envelope-life-almost-over" msgstr "Envelope Maker Life Almost Over" msgid "printer-state-reasons.make-envelope-life-over" msgstr "Envelope Maker Life Over" msgid "printer-state-reasons.make-envelope-memory-exhausted" msgstr "Envelope Maker Memory Exhausted" msgid "printer-state-reasons.make-envelope-missing" msgstr "Envelope Maker Missing" msgid "printer-state-reasons.make-envelope-motor-failure" msgstr "Envelope Maker Motor Failure" msgid "printer-state-reasons.make-envelope-near-limit" msgstr "Envelope Maker Near Limit" msgid "printer-state-reasons.make-envelope-offline" msgstr "Envelope Maker Offline" msgid "printer-state-reasons.make-envelope-opened" msgstr "Envelope Maker Opened" msgid "printer-state-reasons.make-envelope-over-temperature" msgstr "Envelope Maker Over Temperature" msgid "printer-state-reasons.make-envelope-power-saver" msgstr "Envelope Maker Power Saver" msgid "printer-state-reasons.make-envelope-recoverable-failure" msgstr "Envelope Maker Recoverable Failure" msgid "printer-state-reasons.make-envelope-recoverable-storage" msgstr "Envelope Maker Recoverable Storage" msgid "printer-state-reasons.make-envelope-removed" msgstr "Envelope Maker Removed" msgid "printer-state-reasons.make-envelope-resource-added" msgstr "Envelope Maker Resource Added" msgid "printer-state-reasons.make-envelope-resource-removed" msgstr "Envelope Maker Resource Removed" msgid "printer-state-reasons.make-envelope-thermistor-failure" msgstr "Envelope Maker Thermistor Failure" msgid "printer-state-reasons.make-envelope-timing-failure" msgstr "Envelope Maker Timing Failure" msgid "printer-state-reasons.make-envelope-turned-off" msgstr "Envelope Maker Turned Off" msgid "printer-state-reasons.make-envelope-turned-on" msgstr "Envelope Maker Turned On" msgid "printer-state-reasons.make-envelope-under-temperature" msgstr "Envelope Maker Under Temperature" msgid "printer-state-reasons.make-envelope-unrecoverable-failure" msgstr "Envelope Maker Unrecoverable Failure" msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error" msgstr "Envelope Maker Unrecoverable Storage Error" msgid "printer-state-reasons.make-envelope-warming-up" msgstr "Envelope Maker Warming Up" msgid "printer-state-reasons.marker-adjusting-print-quality" msgstr "Marker Adjusting Print Quality" msgid "printer-state-reasons.marker-developer-almost-empty" msgstr "Marker Developer Almost Empty" msgid "printer-state-reasons.marker-developer-empty" msgstr "Marker Developer Empty" msgid "printer-state-reasons.marker-fuser-thermistor-failure" msgstr "Marker Fuser Thermistor Failure" msgid "printer-state-reasons.marker-fuser-timing-failure" msgstr "Marker Fuser Timing Failure" msgid "printer-state-reasons.marker-ink-almost-empty" msgstr "Marker Ink Almost Empty" msgid "printer-state-reasons.marker-ink-empty" msgstr "Marker Ink Empty" msgid "printer-state-reasons.marker-print-ribbon-almost-empty" msgstr "Marker Print Ribbon Almost Empty" msgid "printer-state-reasons.marker-print-ribbon-empty" msgstr "Marker Print Ribbon Empty" msgid "printer-state-reasons.marker-supply-empty" msgstr "Marker Supply Empty" msgid "printer-state-reasons.marker-supply-low" msgstr "Marker Supply Low" msgid "printer-state-reasons.marker-toner-cartridge-missing" msgstr "Marker Toner Cartridge Missing" msgid "printer-state-reasons.marker-waste-almost-full" msgstr "Marker Waste Almost Full" msgid "printer-state-reasons.marker-waste-full" msgstr "Marker Waste Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full" msgstr "Marker Waste Ink Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-full" msgstr "Marker Waste Ink Receptacle Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full" msgstr "Marker Waste Toner Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-full" msgstr "Marker Waste Toner Receptacle Full" msgid "printer-state-reasons.material-empty" msgstr "Material Empty" msgid "printer-state-reasons.material-low" msgstr "Material Low" msgid "printer-state-reasons.material-needed" msgstr "Material Needed" msgid "printer-state-reasons.media-empty" msgstr "Media Empty" msgid "printer-state-reasons.media-jam" msgstr "Media Jam" msgid "printer-state-reasons.media-low" msgstr "Media Low" msgid "printer-state-reasons.media-needed" msgstr "Media Needed" msgid "printer-state-reasons.media-path-cannot-duplex-media-selected" msgstr "Media Path Cannot Do 2-Sided Printing" msgid "printer-state-reasons.media-path-media-tray-almost-full" msgstr "Media Path Media Tray Almost Full" msgid "printer-state-reasons.media-path-media-tray-full" msgstr "Media Path Media Tray Full" msgid "printer-state-reasons.media-path-media-tray-missing" msgstr "Media Path Media Tray Missing" msgid "printer-state-reasons.motor-failure" msgstr "Motor Failure" msgid "printer-state-reasons.moving-to-paused" msgstr "Moving To Paused" msgid "printer-state-reasons.none" msgstr "None" msgid "printer-state-reasons.opc-life-over" msgstr "Optical Photoconductor Life Over" msgid "printer-state-reasons.opc-near-eol" msgstr "Optical Photoconductor Near End-of-life" msgid "printer-state-reasons.other" msgstr "Other" msgid "printer-state-reasons.output-area-almost-full" msgstr "Output Area Almost Full" msgid "printer-state-reasons.output-area-full" msgstr "Output Area Full" msgid "printer-state-reasons.output-mailbox-select-failure" msgstr "Output Mailbox Select Failure" msgid "printer-state-reasons.output-tray-missing" msgstr "Output Tray Missing" msgid "printer-state-reasons.paused" msgstr "Paused" msgid "printer-state-reasons.perforater-added" msgstr "Perforater Added" msgid "printer-state-reasons.perforater-almost-empty" msgstr "Perforater Almost Empty" msgid "printer-state-reasons.perforater-almost-full" msgstr "Perforater Almost Full" msgid "printer-state-reasons.perforater-at-limit" msgstr "Perforater At Limit" msgid "printer-state-reasons.perforater-closed" msgstr "Perforater Closed" msgid "printer-state-reasons.perforater-configuration-change" msgstr "Perforater Configuration Change" msgid "printer-state-reasons.perforater-cover-closed" msgstr "Perforater Cover Closed" msgid "printer-state-reasons.perforater-cover-open" msgstr "Perforater Cover Open" msgid "printer-state-reasons.perforater-empty" msgstr "Perforater Empty" msgid "printer-state-reasons.perforater-full" msgstr "Perforater Full" msgid "printer-state-reasons.perforater-interlock-closed" msgstr "Perforater Interlock Closed" msgid "printer-state-reasons.perforater-interlock-open" msgstr "Perforater Interlock Open" msgid "printer-state-reasons.perforater-jam" msgstr "Perforater Jam" msgid "printer-state-reasons.perforater-life-almost-over" msgstr "Perforater Life Almost Over" msgid "printer-state-reasons.perforater-life-over" msgstr "Perforater Life Over" msgid "printer-state-reasons.perforater-memory-exhausted" msgstr "Perforater Memory Exhausted" msgid "printer-state-reasons.perforater-missing" msgstr "Perforater Missing" msgid "printer-state-reasons.perforater-motor-failure" msgstr "Perforater Motor Failure" msgid "printer-state-reasons.perforater-near-limit" msgstr "Perforater Near Limit" msgid "printer-state-reasons.perforater-offline" msgstr "Perforater Offline" msgid "printer-state-reasons.perforater-opened" msgstr "Perforater Opened" msgid "printer-state-reasons.perforater-over-temperature" msgstr "Perforater Over Temperature" msgid "printer-state-reasons.perforater-power-saver" msgstr "Perforater Power Saver" msgid "printer-state-reasons.perforater-recoverable-failure" msgstr "Perforater Recoverable Failure" msgid "printer-state-reasons.perforater-recoverable-storage" msgstr "Perforater Recoverable Storage" msgid "printer-state-reasons.perforater-removed" msgstr "Perforater Removed" msgid "printer-state-reasons.perforater-resource-added" msgstr "Perforater Resource Added" msgid "printer-state-reasons.perforater-resource-removed" msgstr "Perforater Resource Removed" msgid "printer-state-reasons.perforater-thermistor-failure" msgstr "Perforater Thermistor Failure" msgid "printer-state-reasons.perforater-timing-failure" msgstr "Perforater Timing Failure" msgid "printer-state-reasons.perforater-turned-off" msgstr "Perforater Turned Off" msgid "printer-state-reasons.perforater-turned-on" msgstr "Perforater Turned On" msgid "printer-state-reasons.perforater-under-temperature" msgstr "Perforater Under Temperature" msgid "printer-state-reasons.perforater-unrecoverable-failure" msgstr "Perforater Unrecoverable Failure" msgid "printer-state-reasons.perforater-unrecoverable-storage-error" msgstr "Perforater Unrecoverable Storage Error" msgid "printer-state-reasons.perforater-warming-up" msgstr "Perforater Warming Up" msgid "printer-state-reasons.power-down" msgstr "Power Down" msgid "printer-state-reasons.power-up" msgstr "Power Up" msgid "printer-state-reasons.printer-manual-reset" msgstr "Printer Reset Manually" msgid "printer-state-reasons.printer-nms-reset" msgstr "Printer Reset Remotely" msgid "printer-state-reasons.printer-ready-to-print" msgstr "Printer Ready To Print" msgid "printer-state-reasons.puncher-added" msgstr "Puncher Added" msgid "printer-state-reasons.puncher-almost-empty" msgstr "Puncher Almost Empty" msgid "printer-state-reasons.puncher-almost-full" msgstr "Puncher Almost Full" msgid "printer-state-reasons.puncher-at-limit" msgstr "Puncher At Limit" msgid "printer-state-reasons.puncher-closed" msgstr "Puncher Closed" msgid "printer-state-reasons.puncher-configuration-change" msgstr "Puncher Configuration Change" msgid "printer-state-reasons.puncher-cover-closed" msgstr "Puncher Cover Closed" msgid "printer-state-reasons.puncher-cover-open" msgstr "Puncher Cover Open" msgid "printer-state-reasons.puncher-empty" msgstr "Puncher Empty" msgid "printer-state-reasons.puncher-full" msgstr "Puncher Full" msgid "printer-state-reasons.puncher-interlock-closed" msgstr "Puncher Interlock Closed" msgid "printer-state-reasons.puncher-interlock-open" msgstr "Puncher Interlock Open" msgid "printer-state-reasons.puncher-jam" msgstr "Puncher Jam" msgid "printer-state-reasons.puncher-life-almost-over" msgstr "Puncher Life Almost Over" msgid "printer-state-reasons.puncher-life-over" msgstr "Puncher Life Over" msgid "printer-state-reasons.puncher-memory-exhausted" msgstr "Puncher Memory Exhausted" msgid "printer-state-reasons.puncher-missing" msgstr "Puncher Missing" msgid "printer-state-reasons.puncher-motor-failure" msgstr "Puncher Motor Failure" msgid "printer-state-reasons.puncher-near-limit" msgstr "Puncher Near Limit" msgid "printer-state-reasons.puncher-offline" msgstr "Puncher Offline" msgid "printer-state-reasons.puncher-opened" msgstr "Puncher Opened" msgid "printer-state-reasons.puncher-over-temperature" msgstr "Puncher Over Temperature" msgid "printer-state-reasons.puncher-power-saver" msgstr "Puncher Power Saver" msgid "printer-state-reasons.puncher-recoverable-failure" msgstr "Puncher Recoverable Failure" msgid "printer-state-reasons.puncher-recoverable-storage" msgstr "Puncher Recoverable Storage" msgid "printer-state-reasons.puncher-removed" msgstr "Puncher Removed" msgid "printer-state-reasons.puncher-resource-added" msgstr "Puncher Resource Added" msgid "printer-state-reasons.puncher-resource-removed" msgstr "Puncher Resource Removed" msgid "printer-state-reasons.puncher-thermistor-failure" msgstr "Puncher Thermistor Failure" msgid "printer-state-reasons.puncher-timing-failure" msgstr "Puncher Timing Failure" msgid "printer-state-reasons.puncher-turned-off" msgstr "Puncher Turned Off" msgid "printer-state-reasons.puncher-turned-on" msgstr "Puncher Turned On" msgid "printer-state-reasons.puncher-under-temperature" msgstr "Puncher Under Temperature" msgid "printer-state-reasons.puncher-unrecoverable-failure" msgstr "Puncher Unrecoverable Failure" msgid "printer-state-reasons.puncher-unrecoverable-storage-error" msgstr "Puncher Unrecoverable Storage Error" msgid "printer-state-reasons.puncher-warming-up" msgstr "Puncher Warming Up" msgid "printer-state-reasons.separation-cutter-added" msgstr "Separation Cutter Added" msgid "printer-state-reasons.separation-cutter-almost-empty" msgstr "Separation Cutter Almost Empty" msgid "printer-state-reasons.separation-cutter-almost-full" msgstr "Separation Cutter Almost Full" msgid "printer-state-reasons.separation-cutter-at-limit" msgstr "Separation Cutter At Limit" msgid "printer-state-reasons.separation-cutter-closed" msgstr "Separation Cutter Closed" msgid "printer-state-reasons.separation-cutter-configuration-change" msgstr "Separation Cutter Configuration Change" msgid "printer-state-reasons.separation-cutter-cover-closed" msgstr "Separation Cutter Cover Closed" msgid "printer-state-reasons.separation-cutter-cover-open" msgstr "Separation Cutter Cover Open" msgid "printer-state-reasons.separation-cutter-empty" msgstr "Separation Cutter Empty" msgid "printer-state-reasons.separation-cutter-full" msgstr "Separation Cutter Full" msgid "printer-state-reasons.separation-cutter-interlock-closed" msgstr "Separation Cutter Interlock Closed" msgid "printer-state-reasons.separation-cutter-interlock-open" msgstr "Separation Cutter Interlock Open" msgid "printer-state-reasons.separation-cutter-jam" msgstr "Separation Cutter Jam" msgid "printer-state-reasons.separation-cutter-life-almost-over" msgstr "Separation Cutter Life Almost Over" msgid "printer-state-reasons.separation-cutter-life-over" msgstr "Separation Cutter Life Over" msgid "printer-state-reasons.separation-cutter-memory-exhausted" msgstr "Separation Cutter Memory Exhausted" msgid "printer-state-reasons.separation-cutter-missing" msgstr "Separation Cutter Missing" msgid "printer-state-reasons.separation-cutter-motor-failure" msgstr "Separation Cutter Motor Failure" msgid "printer-state-reasons.separation-cutter-near-limit" msgstr "Separation Cutter Near Limit" msgid "printer-state-reasons.separation-cutter-offline" msgstr "Separation Cutter Offline" msgid "printer-state-reasons.separation-cutter-opened" msgstr "Separation Cutter Opened" msgid "printer-state-reasons.separation-cutter-over-temperature" msgstr "Separation Cutter Over Temperature" msgid "printer-state-reasons.separation-cutter-power-saver" msgstr "Separation Cutter Power Saver" msgid "printer-state-reasons.separation-cutter-recoverable-failure" msgstr "Separation Cutter Recoverable Failure" msgid "printer-state-reasons.separation-cutter-recoverable-storage" msgstr "Separation Cutter Recoverable Storage" msgid "printer-state-reasons.separation-cutter-removed" msgstr "Separation Cutter Removed" msgid "printer-state-reasons.separation-cutter-resource-added" msgstr "Separation Cutter Resource Added" msgid "printer-state-reasons.separation-cutter-resource-removed" msgstr "Separation Cutter Resource Removed" msgid "printer-state-reasons.separation-cutter-thermistor-failure" msgstr "Separation Cutter Thermistor Failure" msgid "printer-state-reasons.separation-cutter-timing-failure" msgstr "Separation Cutter Timing Failure" msgid "printer-state-reasons.separation-cutter-turned-off" msgstr "Separation Cutter Turned Off" msgid "printer-state-reasons.separation-cutter-turned-on" msgstr "Separation Cutter Turned On" msgid "printer-state-reasons.separation-cutter-under-temperature" msgstr "Separation Cutter Under Temperature" msgid "printer-state-reasons.separation-cutter-unrecoverable-failure" msgstr "Separation Cutter Unrecoverable Failure" msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error" msgstr "Separation Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.separation-cutter-warming-up" msgstr "Separation Cutter Warming Up" msgid "printer-state-reasons.sheet-rotator-added" msgstr "Sheet Rotator Added" msgid "printer-state-reasons.sheet-rotator-almost-empty" msgstr "Sheet Rotator Almost Empty" msgid "printer-state-reasons.sheet-rotator-almost-full" msgstr "Sheet Rotator Almost Full" msgid "printer-state-reasons.sheet-rotator-at-limit" msgstr "Sheet Rotator At Limit" msgid "printer-state-reasons.sheet-rotator-closed" msgstr "Sheet Rotator Closed" msgid "printer-state-reasons.sheet-rotator-configuration-change" msgstr "Sheet Rotator Configuration Change" msgid "printer-state-reasons.sheet-rotator-cover-closed" msgstr "Sheet Rotator Cover Closed" msgid "printer-state-reasons.sheet-rotator-cover-open" msgstr "Sheet Rotator Cover Open" msgid "printer-state-reasons.sheet-rotator-empty" msgstr "Sheet Rotator Empty" msgid "printer-state-reasons.sheet-rotator-full" msgstr "Sheet Rotator Full" msgid "printer-state-reasons.sheet-rotator-interlock-closed" msgstr "Sheet Rotator Interlock Closed" msgid "printer-state-reasons.sheet-rotator-interlock-open" msgstr "Sheet Rotator Interlock Open" msgid "printer-state-reasons.sheet-rotator-jam" msgstr "Sheet Rotator Jam" msgid "printer-state-reasons.sheet-rotator-life-almost-over" msgstr "Sheet Rotator Life Almost Over" msgid "printer-state-reasons.sheet-rotator-life-over" msgstr "Sheet Rotator Life Over" msgid "printer-state-reasons.sheet-rotator-memory-exhausted" msgstr "Sheet Rotator Memory Exhausted" msgid "printer-state-reasons.sheet-rotator-missing" msgstr "Sheet Rotator Missing" msgid "printer-state-reasons.sheet-rotator-motor-failure" msgstr "Sheet Rotator Motor Failure" msgid "printer-state-reasons.sheet-rotator-near-limit" msgstr "Sheet Rotator Near Limit" msgid "printer-state-reasons.sheet-rotator-offline" msgstr "Sheet Rotator Offline" msgid "printer-state-reasons.sheet-rotator-opened" msgstr "Sheet Rotator Opened" msgid "printer-state-reasons.sheet-rotator-over-temperature" msgstr "Sheet Rotator Over Temperature" msgid "printer-state-reasons.sheet-rotator-power-saver" msgstr "Sheet Rotator Power Saver" msgid "printer-state-reasons.sheet-rotator-recoverable-failure" msgstr "Sheet Rotator Recoverable Failure" msgid "printer-state-reasons.sheet-rotator-recoverable-storage" msgstr "Sheet Rotator Recoverable Storage" msgid "printer-state-reasons.sheet-rotator-removed" msgstr "Sheet Rotator Removed" msgid "printer-state-reasons.sheet-rotator-resource-added" msgstr "Sheet Rotator Resource Added" msgid "printer-state-reasons.sheet-rotator-resource-removed" msgstr "Sheet Rotator Resource Removed" msgid "printer-state-reasons.sheet-rotator-thermistor-failure" msgstr "Sheet Rotator Thermistor Failure" msgid "printer-state-reasons.sheet-rotator-timing-failure" msgstr "Sheet Rotator Timing Failure" msgid "printer-state-reasons.sheet-rotator-turned-off" msgstr "Sheet Rotator Turned Off" msgid "printer-state-reasons.sheet-rotator-turned-on" msgstr "Sheet Rotator Turned On" msgid "printer-state-reasons.sheet-rotator-under-temperature" msgstr "Sheet Rotator Under Temperature" msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure" msgstr "Sheet Rotator Unrecoverable Failure" msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" msgstr "Sheet Rotator Unrecoverable Storage Error" msgid "printer-state-reasons.sheet-rotator-warming-up" msgstr "Sheet Rotator Warming Up" msgid "printer-state-reasons.shutdown" msgstr "Shutdown" msgid "printer-state-reasons.slitter-added" msgstr "Slitter Added" msgid "printer-state-reasons.slitter-almost-empty" msgstr "Slitter Almost Empty" msgid "printer-state-reasons.slitter-almost-full" msgstr "Slitter Almost Full" msgid "printer-state-reasons.slitter-at-limit" msgstr "Slitter At Limit" msgid "printer-state-reasons.slitter-closed" msgstr "Slitter Closed" msgid "printer-state-reasons.slitter-configuration-change" msgstr "Slitter Configuration Change" msgid "printer-state-reasons.slitter-cover-closed" msgstr "Slitter Cover Closed" msgid "printer-state-reasons.slitter-cover-open" msgstr "Slitter Cover Open" msgid "printer-state-reasons.slitter-empty" msgstr "Slitter Empty" msgid "printer-state-reasons.slitter-full" msgstr "Slitter Full" msgid "printer-state-reasons.slitter-interlock-closed" msgstr "Slitter Interlock Closed" msgid "printer-state-reasons.slitter-interlock-open" msgstr "Slitter Interlock Open" msgid "printer-state-reasons.slitter-jam" msgstr "Slitter Jam" msgid "printer-state-reasons.slitter-life-almost-over" msgstr "Slitter Life Almost Over" msgid "printer-state-reasons.slitter-life-over" msgstr "Slitter Life Over" msgid "printer-state-reasons.slitter-memory-exhausted" msgstr "Slitter Memory Exhausted" msgid "printer-state-reasons.slitter-missing" msgstr "Slitter Missing" msgid "printer-state-reasons.slitter-motor-failure" msgstr "Slitter Motor Failure" msgid "printer-state-reasons.slitter-near-limit" msgstr "Slitter Near Limit" msgid "printer-state-reasons.slitter-offline" msgstr "Slitter Offline" msgid "printer-state-reasons.slitter-opened" msgstr "Slitter Opened" msgid "printer-state-reasons.slitter-over-temperature" msgstr "Slitter Over Temperature" msgid "printer-state-reasons.slitter-power-saver" msgstr "Slitter Power Saver" msgid "printer-state-reasons.slitter-recoverable-failure" msgstr "Slitter Recoverable Failure" msgid "printer-state-reasons.slitter-recoverable-storage" msgstr "Slitter Recoverable Storage" msgid "printer-state-reasons.slitter-removed" msgstr "Slitter Removed" msgid "printer-state-reasons.slitter-resource-added" msgstr "Slitter Resource Added" msgid "printer-state-reasons.slitter-resource-removed" msgstr "Slitter Resource Removed" msgid "printer-state-reasons.slitter-thermistor-failure" msgstr "Slitter Thermistor Failure" msgid "printer-state-reasons.slitter-timing-failure" msgstr "Slitter Timing Failure" msgid "printer-state-reasons.slitter-turned-off" msgstr "Slitter Turned Off" msgid "printer-state-reasons.slitter-turned-on" msgstr "Slitter Turned On" msgid "printer-state-reasons.slitter-under-temperature" msgstr "Slitter Under Temperature" msgid "printer-state-reasons.slitter-unrecoverable-failure" msgstr "Slitter Unrecoverable Failure" msgid "printer-state-reasons.slitter-unrecoverable-storage-error" msgstr "Slitter Unrecoverable Storage Error" msgid "printer-state-reasons.slitter-warming-up" msgstr "Slitter Warming Up" msgid "printer-state-reasons.spool-area-full" msgstr "Spool Area Full" msgid "printer-state-reasons.stacker-added" msgstr "Stacker Added" msgid "printer-state-reasons.stacker-almost-empty" msgstr "Stacker Almost Empty" msgid "printer-state-reasons.stacker-almost-full" msgstr "Stacker Almost Full" msgid "printer-state-reasons.stacker-at-limit" msgstr "Stacker At Limit" msgid "printer-state-reasons.stacker-closed" msgstr "Stacker Closed" msgid "printer-state-reasons.stacker-configuration-change" msgstr "Stacker Configuration Change" msgid "printer-state-reasons.stacker-cover-closed" msgstr "Stacker Cover Closed" msgid "printer-state-reasons.stacker-cover-open" msgstr "Stacker Cover Open" msgid "printer-state-reasons.stacker-empty" msgstr "Stacker Empty" msgid "printer-state-reasons.stacker-full" msgstr "Stacker Full" msgid "printer-state-reasons.stacker-interlock-closed" msgstr "Stacker Interlock Closed" msgid "printer-state-reasons.stacker-interlock-open" msgstr "Stacker Interlock Open" msgid "printer-state-reasons.stacker-jam" msgstr "Stacker Jam" msgid "printer-state-reasons.stacker-life-almost-over" msgstr "Stacker Life Almost Over" msgid "printer-state-reasons.stacker-life-over" msgstr "Stacker Life Over" msgid "printer-state-reasons.stacker-memory-exhausted" msgstr "Stacker Memory Exhausted" msgid "printer-state-reasons.stacker-missing" msgstr "Stacker Missing" msgid "printer-state-reasons.stacker-motor-failure" msgstr "Stacker Motor Failure" msgid "printer-state-reasons.stacker-near-limit" msgstr "Stacker Near Limit" msgid "printer-state-reasons.stacker-offline" msgstr "Stacker Offline" msgid "printer-state-reasons.stacker-opened" msgstr "Stacker Opened" msgid "printer-state-reasons.stacker-over-temperature" msgstr "Stacker Over Temperature" msgid "printer-state-reasons.stacker-power-saver" msgstr "Stacker Power Saver" msgid "printer-state-reasons.stacker-recoverable-failure" msgstr "Stacker Recoverable Failure" msgid "printer-state-reasons.stacker-recoverable-storage" msgstr "Stacker Recoverable Storage" msgid "printer-state-reasons.stacker-removed" msgstr "Stacker Removed" msgid "printer-state-reasons.stacker-resource-added" msgstr "Stacker Resource Added" msgid "printer-state-reasons.stacker-resource-removed" msgstr "Stacker Resource Removed" msgid "printer-state-reasons.stacker-thermistor-failure" msgstr "Stacker Thermistor Failure" msgid "printer-state-reasons.stacker-timing-failure" msgstr "Stacker Timing Failure" msgid "printer-state-reasons.stacker-turned-off" msgstr "Stacker Turned Off" msgid "printer-state-reasons.stacker-turned-on" msgstr "Stacker Turned On" msgid "printer-state-reasons.stacker-under-temperature" msgstr "Stacker Under Temperature" msgid "printer-state-reasons.stacker-unrecoverable-failure" msgstr "Stacker Unrecoverable Failure" msgid "printer-state-reasons.stacker-unrecoverable-storage-error" msgstr "Stacker Unrecoverable Storage Error" msgid "printer-state-reasons.stacker-warming-up" msgstr "Stacker Warming Up" msgid "printer-state-reasons.stapler-added" msgstr "Stapler Added" msgid "printer-state-reasons.stapler-almost-empty" msgstr "Stapler Almost Empty" msgid "printer-state-reasons.stapler-almost-full" msgstr "Stapler Almost Full" msgid "printer-state-reasons.stapler-at-limit" msgstr "Stapler At Limit" msgid "printer-state-reasons.stapler-closed" msgstr "Stapler Closed" msgid "printer-state-reasons.stapler-configuration-change" msgstr "Stapler Configuration Change" msgid "printer-state-reasons.stapler-cover-closed" msgstr "Stapler Cover Closed" msgid "printer-state-reasons.stapler-cover-open" msgstr "Stapler Cover Open" msgid "printer-state-reasons.stapler-empty" msgstr "Stapler Empty" msgid "printer-state-reasons.stapler-full" msgstr "Stapler Full" msgid "printer-state-reasons.stapler-interlock-closed" msgstr "Stapler Interlock Closed" msgid "printer-state-reasons.stapler-interlock-open" msgstr "Stapler Interlock Open" msgid "printer-state-reasons.stapler-jam" msgstr "Stapler Jam" msgid "printer-state-reasons.stapler-life-almost-over" msgstr "Stapler Life Almost Over" msgid "printer-state-reasons.stapler-life-over" msgstr "Stapler Life Over" msgid "printer-state-reasons.stapler-memory-exhausted" msgstr "Stapler Memory Exhausted" msgid "printer-state-reasons.stapler-missing" msgstr "Stapler Missing" msgid "printer-state-reasons.stapler-motor-failure" msgstr "Stapler Motor Failure" msgid "printer-state-reasons.stapler-near-limit" msgstr "Stapler Near Limit" msgid "printer-state-reasons.stapler-offline" msgstr "Stapler Offline" msgid "printer-state-reasons.stapler-opened" msgstr "Stapler Opened" msgid "printer-state-reasons.stapler-over-temperature" msgstr "Stapler Over Temperature" msgid "printer-state-reasons.stapler-power-saver" msgstr "Stapler Power Saver" msgid "printer-state-reasons.stapler-recoverable-failure" msgstr "Stapler Recoverable Failure" msgid "printer-state-reasons.stapler-recoverable-storage" msgstr "Stapler Recoverable Storage" msgid "printer-state-reasons.stapler-removed" msgstr "Stapler Removed" msgid "printer-state-reasons.stapler-resource-added" msgstr "Stapler Resource Added" msgid "printer-state-reasons.stapler-resource-removed" msgstr "Stapler Resource Removed" msgid "printer-state-reasons.stapler-thermistor-failure" msgstr "Stapler Thermistor Failure" msgid "printer-state-reasons.stapler-timing-failure" msgstr "Stapler Timing Failure" msgid "printer-state-reasons.stapler-turned-off" msgstr "Stapler Turned Off" msgid "printer-state-reasons.stapler-turned-on" msgstr "Stapler Turned On" msgid "printer-state-reasons.stapler-under-temperature" msgstr "Stapler Under Temperature" msgid "printer-state-reasons.stapler-unrecoverable-failure" msgstr "Stapler Unrecoverable Failure" msgid "printer-state-reasons.stapler-unrecoverable-storage-error" msgstr "Stapler Unrecoverable Storage Error" msgid "printer-state-reasons.stapler-warming-up" msgstr "Stapler Warming Up" msgid "printer-state-reasons.stitcher-added" msgstr "Stitcher Added" msgid "printer-state-reasons.stitcher-almost-empty" msgstr "Stitcher Almost Empty" msgid "printer-state-reasons.stitcher-almost-full" msgstr "Stitcher Almost Full" msgid "printer-state-reasons.stitcher-at-limit" msgstr "Stitcher At Limit" msgid "printer-state-reasons.stitcher-closed" msgstr "Stitcher Closed" msgid "printer-state-reasons.stitcher-configuration-change" msgstr "Stitcher Configuration Change" msgid "printer-state-reasons.stitcher-cover-closed" msgstr "Stitcher Cover Closed" msgid "printer-state-reasons.stitcher-cover-open" msgstr "Stitcher Cover Open" msgid "printer-state-reasons.stitcher-empty" msgstr "Stitcher Empty" msgid "printer-state-reasons.stitcher-full" msgstr "Stitcher Full" msgid "printer-state-reasons.stitcher-interlock-closed" msgstr "Stitcher Interlock Closed" msgid "printer-state-reasons.stitcher-interlock-open" msgstr "Stitcher Interlock Open" msgid "printer-state-reasons.stitcher-jam" msgstr "Stitcher Jam" msgid "printer-state-reasons.stitcher-life-almost-over" msgstr "Stitcher Life Almost Over" msgid "printer-state-reasons.stitcher-life-over" msgstr "Stitcher Life Over" msgid "printer-state-reasons.stitcher-memory-exhausted" msgstr "Stitcher Memory Exhausted" msgid "printer-state-reasons.stitcher-missing" msgstr "Stitcher Missing" msgid "printer-state-reasons.stitcher-motor-failure" msgstr "Stitcher Motor Failure" msgid "printer-state-reasons.stitcher-near-limit" msgstr "Stitcher Near Limit" msgid "printer-state-reasons.stitcher-offline" msgstr "Stitcher Offline" msgid "printer-state-reasons.stitcher-opened" msgstr "Stitcher Opened" msgid "printer-state-reasons.stitcher-over-temperature" msgstr "Stitcher Over Temperature" msgid "printer-state-reasons.stitcher-power-saver" msgstr "Stitcher Power Saver" msgid "printer-state-reasons.stitcher-recoverable-failure" msgstr "Stitcher Recoverable Failure" msgid "printer-state-reasons.stitcher-recoverable-storage" msgstr "Stitcher Recoverable Storage" msgid "printer-state-reasons.stitcher-removed" msgstr "Stitcher Removed" msgid "printer-state-reasons.stitcher-resource-added" msgstr "Stitcher Resource Added" msgid "printer-state-reasons.stitcher-resource-removed" msgstr "Stitcher Resource Removed" msgid "printer-state-reasons.stitcher-thermistor-failure" msgstr "Stitcher Thermistor Failure" msgid "printer-state-reasons.stitcher-timing-failure" msgstr "Stitcher Timing Failure" msgid "printer-state-reasons.stitcher-turned-off" msgstr "Stitcher Turned Off" msgid "printer-state-reasons.stitcher-turned-on" msgstr "Stitcher Turned On" msgid "printer-state-reasons.stitcher-under-temperature" msgstr "Stitcher Under Temperature" msgid "printer-state-reasons.stitcher-unrecoverable-failure" msgstr "Stitcher Unrecoverable Failure" msgid "printer-state-reasons.stitcher-unrecoverable-storage-error" msgstr "Stitcher Unrecoverable Storage Error" msgid "printer-state-reasons.stitcher-warming-up" msgstr "Stitcher Warming Up" msgid "printer-state-reasons.stopped-partly" msgstr "Stopped Partly" msgid "printer-state-reasons.stopping" msgstr "Stopping" msgid "printer-state-reasons.subunit-added" msgstr "Subunit Added" msgid "printer-state-reasons.subunit-almost-empty" msgstr "Subunit Almost Empty" msgid "printer-state-reasons.subunit-almost-full" msgstr "Subunit Almost Full" msgid "printer-state-reasons.subunit-at-limit" msgstr "Subunit At Limit" msgid "printer-state-reasons.subunit-closed" msgstr "Subunit Closed" msgid "printer-state-reasons.subunit-empty" msgstr "Subunit Empty" msgid "printer-state-reasons.subunit-full" msgstr "Subunit Full" msgid "printer-state-reasons.subunit-life-almost-over" msgstr "Subunit Life Almost Over" msgid "printer-state-reasons.subunit-life-over" msgstr "Subunit Life Over" msgid "printer-state-reasons.subunit-memory-exhausted" msgstr "Subunit Memory Exhausted" msgid "printer-state-reasons.subunit-missing" msgstr "Subunit Missing" msgid "printer-state-reasons.subunit-motor-failure" msgstr "Subunit Motor Failure" msgid "printer-state-reasons.subunit-near-limit" msgstr "Subunit Near Limit" msgid "printer-state-reasons.subunit-offline" msgstr "Subunit Offline" msgid "printer-state-reasons.subunit-opened" msgstr "Subunit Opened" msgid "printer-state-reasons.subunit-over-temperature" msgstr "Subunit Over Temperature" msgid "printer-state-reasons.subunit-power-saver" msgstr "Subunit Power Saver" msgid "printer-state-reasons.subunit-recoverable-failure" msgstr "Subunit Recoverable Failure" msgid "printer-state-reasons.subunit-recoverable-storage" msgstr "Subunit Recoverable Storage" msgid "printer-state-reasons.subunit-removed" msgstr "Subunit Removed" msgid "printer-state-reasons.subunit-resource-added" msgstr "Subunit Resource Added" msgid "printer-state-reasons.subunit-resource-removed" msgstr "Subunit Resource Removed" msgid "printer-state-reasons.subunit-thermistor-failure" msgstr "Subunit Thermistor Failure" msgid "printer-state-reasons.subunit-timing-Failure" msgstr "Subunit Timing Failure" msgid "printer-state-reasons.subunit-turned-off" msgstr "Subunit Turned Off" msgid "printer-state-reasons.subunit-turned-on" msgstr "Subunit Turned On" msgid "printer-state-reasons.subunit-under-temperature" msgstr "Subunit Under Temperature" msgid "printer-state-reasons.subunit-unrecoverable-failure" msgstr "Subunit Unrecoverable Failure" msgid "printer-state-reasons.subunit-unrecoverable-storage" msgstr "Subunit Unrecoverable Storage" msgid "printer-state-reasons.subunit-warming-up" msgstr "Subunit Warming Up" msgid "printer-state-reasons.timed-out" msgstr "Timed Out" msgid "printer-state-reasons.toner-empty" msgstr "Toner Empty" msgid "printer-state-reasons.toner-low" msgstr "Toner Low" msgid "printer-state-reasons.trimmer-added" msgstr "Trimmer Added" msgid "printer-state-reasons.trimmer-almost-empty" msgstr "Trimmer Almost Empty" msgid "printer-state-reasons.trimmer-almost-full" msgstr "Trimmer Almost Full" msgid "printer-state-reasons.trimmer-at-limit" msgstr "Trimmer At Limit" msgid "printer-state-reasons.trimmer-closed" msgstr "Trimmer Closed" msgid "printer-state-reasons.trimmer-configuration-change" msgstr "Trimmer Configuration Change" msgid "printer-state-reasons.trimmer-cover-closed" msgstr "Trimmer Cover Closed" msgid "printer-state-reasons.trimmer-cover-open" msgstr "Trimmer Cover Open" msgid "printer-state-reasons.trimmer-empty" msgstr "Trimmer Empty" msgid "printer-state-reasons.trimmer-full" msgstr "Trimmer Full" msgid "printer-state-reasons.trimmer-interlock-closed" msgstr "Trimmer Interlock Closed" msgid "printer-state-reasons.trimmer-interlock-open" msgstr "Trimmer Interlock Open" msgid "printer-state-reasons.trimmer-jam" msgstr "Trimmer Jam" msgid "printer-state-reasons.trimmer-life-almost-over" msgstr "Trimmer Life Almost Over" msgid "printer-state-reasons.trimmer-life-over" msgstr "Trimmer Life Over" msgid "printer-state-reasons.trimmer-memory-exhausted" msgstr "Trimmer Memory Exhausted" msgid "printer-state-reasons.trimmer-missing" msgstr "Trimmer Missing" msgid "printer-state-reasons.trimmer-motor-failure" msgstr "Trimmer Motor Failure" msgid "printer-state-reasons.trimmer-near-limit" msgstr "Trimmer Near Limit" msgid "printer-state-reasons.trimmer-offline" msgstr "Trimmer Offline" msgid "printer-state-reasons.trimmer-opened" msgstr "Trimmer Opened" msgid "printer-state-reasons.trimmer-over-temperature" msgstr "Trimmer Over Temperature" msgid "printer-state-reasons.trimmer-power-saver" msgstr "Trimmer Power Saver" msgid "printer-state-reasons.trimmer-recoverable-failure" msgstr "Trimmer Recoverable Failure" msgid "printer-state-reasons.trimmer-recoverable-storage" msgstr "Trimmer Recoverable Storage" msgid "printer-state-reasons.trimmer-removed" msgstr "Trimmer Removed" msgid "printer-state-reasons.trimmer-resource-added" msgstr "Trimmer Resource Added" msgid "printer-state-reasons.trimmer-resource-removed" msgstr "Trimmer Resource Removed" msgid "printer-state-reasons.trimmer-thermistor-failure" msgstr "Trimmer Thermistor Failure" msgid "printer-state-reasons.trimmer-timing-failure" msgstr "Trimmer Timing Failure" msgid "printer-state-reasons.trimmer-turned-off" msgstr "Trimmer Turned Off" msgid "printer-state-reasons.trimmer-turned-on" msgstr "Trimmer Turned On" msgid "printer-state-reasons.trimmer-under-temperature" msgstr "Trimmer Under Temperature" msgid "printer-state-reasons.trimmer-unrecoverable-failure" msgstr "Trimmer Unrecoverable Failure" msgid "printer-state-reasons.trimmer-unrecoverable-storage-error" msgstr "Trimmer Unrecoverable Storage Error" msgid "printer-state-reasons.trimmer-warming-up" msgstr "Trimmer Warming Up" msgid "printer-state-reasons.unknown" msgstr "Unknown" msgid "printer-state-reasons.wrapper-added" msgstr "Wrapper Added" msgid "printer-state-reasons.wrapper-almost-empty" msgstr "Wrapper Almost Empty" msgid "printer-state-reasons.wrapper-almost-full" msgstr "Wrapper Almost Full" msgid "printer-state-reasons.wrapper-at-limit" msgstr "Wrapper At Limit" msgid "printer-state-reasons.wrapper-closed" msgstr "Wrapper Closed" msgid "printer-state-reasons.wrapper-configuration-change" msgstr "Wrapper Configuration Change" msgid "printer-state-reasons.wrapper-cover-closed" msgstr "Wrapper Cover Closed" msgid "printer-state-reasons.wrapper-cover-open" msgstr "Wrapper Cover Open" msgid "printer-state-reasons.wrapper-empty" msgstr "Wrapper Empty" msgid "printer-state-reasons.wrapper-full" msgstr "Wrapper Full" msgid "printer-state-reasons.wrapper-interlock-closed" msgstr "Wrapper Interlock Closed" msgid "printer-state-reasons.wrapper-interlock-open" msgstr "Wrapper Interlock Open" msgid "printer-state-reasons.wrapper-jam" msgstr "Wrapper Jam" msgid "printer-state-reasons.wrapper-life-almost-over" msgstr "Wrapper Life Almost Over" msgid "printer-state-reasons.wrapper-life-over" msgstr "Wrapper Life Over" msgid "printer-state-reasons.wrapper-memory-exhausted" msgstr "Wrapper Memory Exhausted" msgid "printer-state-reasons.wrapper-missing" msgstr "Wrapper Missing" msgid "printer-state-reasons.wrapper-motor-failure" msgstr "Wrapper Motor Failure" msgid "printer-state-reasons.wrapper-near-limit" msgstr "Wrapper Near Limit" msgid "printer-state-reasons.wrapper-offline" msgstr "Wrapper Offline" msgid "printer-state-reasons.wrapper-opened" msgstr "Wrapper Opened" msgid "printer-state-reasons.wrapper-over-temperature" msgstr "Wrapper Over Temperature" msgid "printer-state-reasons.wrapper-power-saver" msgstr "Wrapper Power Saver" msgid "printer-state-reasons.wrapper-recoverable-failure" msgstr "Wrapper Recoverable Failure" msgid "printer-state-reasons.wrapper-recoverable-storage" msgstr "Wrapper Recoverable Storage" msgid "printer-state-reasons.wrapper-removed" msgstr "Wrapper Removed" msgid "printer-state-reasons.wrapper-resource-added" msgstr "Wrapper Resource Added" msgid "printer-state-reasons.wrapper-resource-removed" msgstr "Wrapper Resource Removed" msgid "printer-state-reasons.wrapper-thermistor-failure" msgstr "Wrapper Thermistor Failure" msgid "printer-state-reasons.wrapper-timing-failure" msgstr "Wrapper Timing Failure" msgid "printer-state-reasons.wrapper-turned-off" msgstr "Wrapper Turned Off" msgid "printer-state-reasons.wrapper-turned-on" msgstr "Wrapper Turned On" msgid "printer-state-reasons.wrapper-under-temperature" msgstr "Wrapper Under Temperature" msgid "printer-state-reasons.wrapper-unrecoverable-failure" msgstr "Wrapper Unrecoverable Failure" msgid "printer-state-reasons.wrapper-unrecoverable-storage-error" msgstr "Wrapper Unrecoverable Storage Error" msgid "printer-state-reasons.wrapper-warming-up" msgstr "Wrapper Warming Up" msgid "printer-state.3" msgstr "Idle" msgid "printer-state.4" msgstr "Processing" msgid "printer-state.5" msgstr "Stopped" msgid "printer-up-time" msgstr "Printer Uptime" msgid "proof-print" msgstr "Proof Print" msgid "proof-print-copies" msgstr "Proof Print Copies" msgid "punching" msgstr "Punching" msgid "punching-locations" msgstr "Punching Locations" msgid "punching-offset" msgstr "Punching Offset" msgid "punching-reference-edge" msgstr "Punch Edge" msgid "punching-reference-edge.bottom" msgstr "Bottom" msgid "punching-reference-edge.left" msgstr "Left" msgid "punching-reference-edge.right" msgstr "Right" msgid "punching-reference-edge.top" msgstr "Top" msgid "requested-attributes" msgstr "Requested Attributes" msgid "retry-interval" msgstr "Retry Interval" msgid "retry-time-out" msgstr "Retry Timeout" msgid "save-disposition" msgstr "Save Disposition" msgid "save-disposition.none" msgstr "None" msgid "save-disposition.print-save" msgstr "Print and Save" msgid "save-disposition.save-only" msgstr "Save Only" msgid "save-document-format" msgstr "Save Document Format" msgid "save-info" msgstr "Save Info" msgid "save-location" msgstr "Save Location" msgid "save-name" msgstr "Save Name" msgid "separator-sheets" msgstr "Separator Sheets" msgid "separator-sheets-type" msgstr "Type of Separator Sheets" msgid "separator-sheets-type.both-sheets" msgstr "Start and End Sheets" msgid "separator-sheets-type.end-sheet" msgstr "End Sheet" msgid "separator-sheets-type.none" msgstr "None" msgid "separator-sheets-type.slip-sheets" msgstr "Slip Sheets" msgid "separator-sheets-type.start-sheet" msgstr "Start Sheet" msgid "sheet-collate" msgstr "Collate Copies" msgid "sheet-collate.collated" msgstr "Yes" msgid "sheet-collate.uncollated" msgstr "No" msgid "sides" msgstr "2-Sided Printing" msgid "sides.one-sided" msgstr "Off" msgid "sides.two-sided-long-edge" msgstr "On (Portrait)" msgid "sides.two-sided-short-edge" msgstr "On (Landscape)" msgid "status-message" msgstr "Status Message" msgid "stitching" msgstr "Staple" msgid "stitching-angle" msgstr "Stitching Angle" msgid "stitching-locations" msgstr "Stitching Locations" msgid "stitching-method" msgstr "Staple Method" msgid "stitching-method.auto" msgstr "Automatic" msgid "stitching-method.crimp" msgstr "Crimp" msgid "stitching-method.wire" msgstr "Wire" msgid "stitching-offset" msgstr "Stitching Offset" msgid "stitching-reference-edge" msgstr "Staple Edge" msgid "stitching-reference-edge.bottom" msgstr "Bottom" msgid "stitching-reference-edge.left" msgstr "Left" msgid "stitching-reference-edge.right" msgstr "Right" msgid "stitching-reference-edge.top" msgstr "Top" msgid "subject" msgstr "Subject" msgid "t33-subaddress" msgstr "T33 Subaddress" msgid "to-name" msgstr "To Name" msgid "transmission-status" msgstr "Transmission Status" msgid "transmission-status.3" msgstr "Pending" msgid "transmission-status.4" msgstr "Pending Retry" msgid "transmission-status.5" msgstr "Processing" msgid "transmission-status.7" msgstr "Canceled" msgid "transmission-status.8" msgstr "Aborted" msgid "transmission-status.9" msgstr "Completed" msgid "trimming" msgstr "Cut" msgid "trimming-offset" msgstr "Cut Position" msgid "trimming-reference-edge" msgstr "Cut Edge" msgid "trimming-reference-edge.bottom" msgstr "Bottom" msgid "trimming-reference-edge.left" msgstr "Left" msgid "trimming-reference-edge.right" msgstr "Right" msgid "trimming-reference-edge.top" msgstr "Top" msgid "trimming-type" msgstr "Type of Cut" msgid "trimming-type.draw-line" msgstr "Draw Line" msgid "trimming-type.full" msgstr "Full" msgid "trimming-type.partial" msgstr "Partial" msgid "trimming-type.perforate" msgstr "Perforate" msgid "trimming-type.score" msgstr "Score" msgid "trimming-type.tab" msgstr "Tab" msgid "trimming-when" msgstr "Cut After" msgid "trimming-when.after-documents" msgstr "Every Document" msgid "trimming-when.after-job" msgstr "Job" msgid "trimming-when.after-sets" msgstr "Every Set" msgid "trimming-when.after-sheets" msgstr "Every Page" msgid "x-accuracy" msgstr "X Accuracy" msgid "x-dimension" msgstr "X Dimension" msgid "x-offset" msgstr "X Offset" msgid "x-origin" msgstr "X Origin" msgid "y-accuracy" msgstr "Y Accuracy" msgid "y-dimension" msgstr "Y Dimension" msgid "y-offset" msgstr "Y Offset" msgid "y-origin" msgstr "Y Origin" msgid "z-accuracy" msgstr "Z Accuracy" msgid "z-dimension" msgstr "Z Dimension" msgid "z-offset" msgstr "Z Offset" cups-2.2.7/locale/cups.strings000664 000765 000024 00000761751 13255074424 017020 0ustar00msweetstaff000000 000000 "\t\t(all)" = "\t\t(all)"; "\t\t(none)" = "\t\t(none)"; "\t%d entries" = "\t%d entries"; "\t%s" = "\t%s"; "\tAfter fault: continue" = "\tAfter fault: continue"; "\tAlerts: %s" = "\tAlerts: %s"; "\tBanner required" = "\tBanner required"; "\tCharset sets:" = "\tCharset sets:"; "\tConnection: direct" = "\tConnection: direct"; "\tConnection: remote" = "\tConnection: remote"; "\tContent types: any" = "\tContent types: any"; "\tDefault page size:" = "\tDefault page size:"; "\tDefault pitch:" = "\tDefault pitch:"; "\tDefault port settings:" = "\tDefault port settings:"; "\tDescription: %s" = "\tDescription: %s"; "\tForm mounted:" = "\tForm mounted:"; "\tForms allowed:" = "\tForms allowed:"; "\tInterface: %s.ppd" = "\tInterface: %s.ppd"; "\tInterface: %s/ppd/%s.ppd" = "\tInterface: %s/ppd/%s.ppd"; "\tLocation: %s" = "\tLocation: %s"; "\tOn fault: no alert" = "\tOn fault: no alert"; "\tPrinter types: unknown" = "\tPrinter types: unknown"; "\tStatus: %s" = "\tStatus: %s"; "\tUsers allowed:" = "\tUsers allowed:"; "\tUsers denied:" = "\tUsers denied:"; "\tdaemon present" = "\tdaemon present"; "\tno entries" = "\tno entries"; "\tprinter is on device '%s' speed -1" = "\tprinter is on device ‘%s’ speed -1"; "\tprinting is disabled" = "\tprinting is disabled"; "\tprinting is enabled" = "\tprinting is enabled"; "\tqueued for %s" = "\tqueued for %s"; "\tqueuing is disabled" = "\tqueuing is disabled"; "\tqueuing is enabled" = "\tqueuing is enabled"; "\treason unknown" = "\treason unknown"; "\n DETAILED CONFORMANCE TEST RESULTS" = "\n DETAILED CONFORMANCE TEST RESULTS"; " Ignore specific warnings." = " Ignore specific warnings."; " Issue warnings instead of errors." = " Issue warnings instead of errors."; " REF: Page 15, section 3.1." = " REF: Page 15, section 3.1."; " REF: Page 15, section 3.2." = " REF: Page 15, section 3.2."; " REF: Page 19, section 3.3." = " REF: Page 19, section 3.3."; " REF: Page 20, section 3.4." = " REF: Page 20, section 3.4."; " REF: Page 27, section 3.5." = " REF: Page 27, section 3.5."; " REF: Page 42, section 5.2." = " REF: Page 42, section 5.2."; " REF: Pages 16-17, section 3.2." = " REF: Pages 16-17, section 3.2."; " REF: Pages 42-45, section 5.2." = " REF: Pages 42-45, section 5.2."; " REF: Pages 45-46, section 5.2." = " REF: Pages 45-46, section 5.2."; " REF: Pages 48-49, section 5.2." = " REF: Pages 48-49, section 5.2."; " REF: Pages 52-54, section 5.2." = " REF: Pages 52-54, section 5.2."; " %-39.39s %.0f bytes" = " %-39.39s %.0f bytes"; " PASS Default%s" = " PASS Default%s"; " PASS DefaultImageableArea" = " PASS DefaultImageableArea"; " PASS DefaultPaperDimension" = " PASS DefaultPaperDimension"; " PASS FileVersion" = " PASS FileVersion"; " PASS FormatVersion" = " PASS FormatVersion"; " PASS LanguageEncoding" = " PASS LanguageEncoding"; " PASS LanguageVersion" = " PASS LanguageVersion"; " PASS Manufacturer" = " PASS Manufacturer"; " PASS ModelName" = " PASS ModelName"; " PASS NickName" = " PASS NickName"; " PASS PCFileName" = " PASS PCFileName"; " PASS PSVersion" = " PASS PSVersion"; " PASS PageRegion" = " PASS PageRegion"; " PASS PageSize" = " PASS PageSize"; " PASS Product" = " PASS Product"; " PASS ShortNickName" = " PASS ShortNickName"; " WARN %s has no corresponding options." = " WARN %s has no corresponding options."; " WARN %s shares a common prefix with %s\n REF: Page 15, section 3.2." = " WARN %s shares a common prefix with %s\n REF: Page 15, section 3.2."; " WARN Duplex option keyword %s may not work as expected and should be named Duplex.\n REF: Page 122, section 5.17" = " WARN Duplex option keyword %s may not work as expected and should be named Duplex.\n REF: Page 122, section 5.17"; " WARN File contains a mix of CR, LF, and CR LF line endings." = " WARN File contains a mix of CR, LF, and CR LF line endings."; " WARN LanguageEncoding required by PPD 4.3 spec.\n REF: Pages 56-57, section 5.3." = " WARN LanguageEncoding required by PPD 4.3 spec.\n REF: Pages 56-57, section 5.3."; " WARN Line %d only contains whitespace." = " WARN Line %d only contains whitespace."; " WARN Manufacturer required by PPD 4.3 spec.\n REF: Pages 58-59, section 5.3." = " WARN Manufacturer required by PPD 4.3 spec.\n REF: Pages 58-59, section 5.3."; " WARN Non-Windows PPD files should use lines ending with only LF, not CR LF." = " WARN Non-Windows PPD files should use lines ending with only LF, not CR LF."; " WARN Obsolete PPD version %.1f.\n REF: Page 42, section 5.2." = " WARN Obsolete PPD version %.1f.\n REF: Page 42, section 5.2."; " WARN PCFileName longer than 8.3 in violation of PPD spec.\n REF: Pages 61-62, section 5.3." = " WARN PCFileName longer than 8.3 in violation of PPD spec.\n REF: Pages 61-62, section 5.3."; " WARN PCFileName should contain a unique filename.\n REF: Pages 61-62, section 5.3." = " WARN PCFileName should contain a unique filename.\n REF: Pages 61-62, section 5.3."; " WARN Protocols contains PJL but JCL attributes are not set.\n REF: Pages 78-79, section 5.7." = " WARN Protocols contains PJL but JCL attributes are not set.\n REF: Pages 78-79, section 5.7."; " WARN Protocols contains both PJL and BCP; expected TBCP.\n REF: Pages 78-79, section 5.7." = " WARN Protocols contains both PJL and BCP; expected TBCP.\n REF: Pages 78-79, section 5.7."; " WARN ShortNickName required by PPD 4.3 spec.\n REF: Pages 64-65, section 5.3." = " WARN ShortNickName required by PPD 4.3 spec.\n REF: Pages 64-65, section 5.3."; " cupsaddsmb [options] -a" = " cupsaddsmb [options] -a"; " cupstestdsc [options] -" = " cupstestdsc [options] -"; " program | cupstestppd [options] -" = " program | cupstestppd [options] -"; " %s \"%s %s\" conflicts with \"%s %s\"\n (constraint=\"%s %s %s %s\")." = " %s “%s %s†conflicts with “%s %sâ€\n (constraint=“%s %s %s %sâ€)."; " %s %s %s does not exist." = " %s %s %s does not exist."; " %s %s file \"%s\" has the wrong capitalization." = " %s %s file “%s†has the wrong capitalization."; " %s Bad %s choice %s.\n REF: Page 122, section 5.17" = " %s Bad %s choice %s.\n REF: Page 122, section 5.17"; " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s." = " %s Bad UTF-8 “%s†translation string for option %s, choice %s."; " %s Bad UTF-8 \"%s\" translation string for option %s." = " %s Bad UTF-8 “%s†translation string for option %s."; " %s Bad cupsFilter value \"%s\"." = " %s Bad cupsFilter value “%sâ€."; " %s Bad cupsFilter2 value \"%s\"." = " %s Bad cupsFilter2 value “%sâ€."; " %s Bad cupsICCProfile %s." = " %s Bad cupsICCProfile %s."; " %s Bad cupsPreFilter value \"%s\"." = " %s Bad cupsPreFilter value “%sâ€."; " %s Bad cupsUIConstraints %s: \"%s\"" = " %s Bad cupsUIConstraints %s: “%sâ€"; " %s Bad language \"%s\"." = " %s Bad language “%sâ€."; " %s Bad permissions on %s file \"%s\"." = " %s Bad permissions on %s file “%sâ€."; " %s Bad spelling of %s - should be %s." = " %s Bad spelling of %s - should be %s."; " %s Cannot provide both APScanAppPath and APScanAppBundleID." = " %s Cannot provide both APScanAppPath and APScanAppBundleID."; " %s Default choices conflicting." = " %s Default choices conflicting."; " %s Empty cupsUIConstraints %s" = " %s Empty cupsUIConstraints %s"; " %s Missing \"%s\" translation string for option %s, choice %s." = " %s Missing “%s†translation string for option %s, choice %s."; " %s Missing \"%s\" translation string for option %s." = " %s Missing “%s†translation string for option %s."; " %s Missing %s file \"%s\"." = " %s Missing %s file “%sâ€."; " %s Missing REQUIRED PageRegion option.\n REF: Page 100, section 5.14." = " %s Missing REQUIRED PageRegion option.\n REF: Page 100, section 5.14."; " %s Missing REQUIRED PageSize option.\n REF: Page 99, section 5.14." = " %s Missing REQUIRED PageSize option.\n REF: Page 99, section 5.14."; " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." = " %s Missing choice *%s %s in UIConstraints “*%s %s *%s %sâ€."; " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" = " %s Missing choice *%s %s in cupsUIConstraints %s: “%sâ€"; " %s Missing cupsUIResolver %s" = " %s Missing cupsUIResolver %s"; " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"." = " %s Missing option %s in UIConstraints “*%s %s *%s %sâ€."; " %s Missing option %s in cupsUIConstraints %s: \"%s\"" = " %s Missing option %s in cupsUIConstraints %s: “%sâ€"; " %s No base translation \"%s\" is included in file." = " %s No base translation “%s†is included in file."; " %s REQUIRED %s does not define choice None.\n REF: Page 122, section 5.17" = " %s REQUIRED %s does not define choice None.\n REF: Page 122, section 5.17"; " %s Size \"%s\" defined for %s but not for %s." = " %s Size “%s†defined for %s but not for %s."; " %s Size \"%s\" has unexpected dimensions (%gx%g)." = " %s Size “%s†has unexpected dimensions (%gx%g)."; " %s Size \"%s\" should be \"%s\"." = " %s Size “%s†should be “%sâ€."; " %s Size \"%s\" should be the Adobe standard name \"%s\"." = " %s Size “%s†should be the Adobe standard name “%sâ€."; " %s cupsICCProfile %s hash value collides with %s." = " %s cupsICCProfile %s hash value collides with %s."; " %s cupsUIResolver %s causes a loop." = " %s cupsUIResolver %s causes a loop."; " %s cupsUIResolver %s does not list at least two different options." = " %s cupsUIResolver %s does not list at least two different options."; " **FAIL** %s must be 1284DeviceID\n REF: Page 72, section 5.5" = " **FAIL** %s must be 1284DeviceID\n REF: Page 72, section 5.5"; " **FAIL** Bad Default%s %s\n REF: Page 40, section 4.5." = " **FAIL** Bad Default%s %s\n REF: Page 40, section 4.5."; " **FAIL** Bad DefaultImageableArea %s\n REF: Page 102, section 5.15." = " **FAIL** Bad DefaultImageableArea %s\n REF: Page 102, section 5.15."; " **FAIL** Bad DefaultPaperDimension %s\n REF: Page 103, section 5.15." = " **FAIL** Bad DefaultPaperDimension %s\n REF: Page 103, section 5.15."; " **FAIL** Bad FileVersion \"%s\"\n REF: Page 56, section 5.3." = " **FAIL** Bad FileVersion “%sâ€\n REF: Page 56, section 5.3."; " **FAIL** Bad FormatVersion \"%s\"\n REF: Page 56, section 5.3." = " **FAIL** Bad FormatVersion “%sâ€\n REF: Page 56, section 5.3."; " **FAIL** Bad JobPatchFile attribute in file\n REF: Page 24, section 3.4." = " **FAIL** Bad JobPatchFile attribute in file\n REF: Page 24, section 3.4."; " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1." = " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1."; " **FAIL** Bad LanguageVersion %s - must be English." = " **FAIL** Bad LanguageVersion %s - must be English."; " **FAIL** Bad Manufacturer (should be \"%s\")\n REF: Page 211, table D.1." = " **FAIL** Bad Manufacturer (should be “%sâ€)\n REF: Page 211, table D.1."; " **FAIL** Bad ModelName - \"%c\" not allowed in string.\n REF: Pages 59-60, section 5.3." = " **FAIL** Bad ModelName - “%c†not allowed in string.\n REF: Pages 59-60, section 5.3."; " **FAIL** Bad PSVersion - not \"(string) int\".\n REF: Pages 62-64, section 5.3." = " **FAIL** Bad PSVersion - not “(string) intâ€.\n REF: Pages 62-64, section 5.3."; " **FAIL** Bad Product - not \"(string)\".\n REF: Page 62, section 5.3." = " **FAIL** Bad Product - not “(string)â€.\n REF: Page 62, section 5.3."; " **FAIL** Bad ShortNickName - longer than 31 chars.\n REF: Pages 64-65, section 5.3." = " **FAIL** Bad ShortNickName - longer than 31 chars.\n REF: Pages 64-65, section 5.3."; " **FAIL** Bad option %s choice %s\n REF: Page 84, section 5.9" = " **FAIL** Bad option %s choice %s\n REF: Page 84, section 5.9"; " **FAIL** Default option code cannot be interpreted: %s" = " **FAIL** Default option code cannot be interpreted: %s"; " **FAIL** Default translation string for option %s choice %s contains 8-bit characters." = " **FAIL** Default translation string for option %s choice %s contains 8-bit characters."; " **FAIL** Default translation string for option %s contains 8-bit characters." = " **FAIL** Default translation string for option %s contains 8-bit characters."; " **FAIL** Group names %s and %s differ only by case." = " **FAIL** Group names %s and %s differ only by case."; " **FAIL** Multiple occurrences of option %s choice name %s." = " **FAIL** Multiple occurrences of option %s choice name %s."; " **FAIL** Option %s choice names %s and %s differ only by case." = " **FAIL** Option %s choice names %s and %s differ only by case."; " **FAIL** Option names %s and %s differ only by case." = " **FAIL** Option names %s and %s differ only by case."; " **FAIL** REQUIRED Default%s\n REF: Page 40, section 4.5." = " **FAIL** REQUIRED Default%s\n REF: Page 40, section 4.5."; " **FAIL** REQUIRED DefaultImageableArea\n REF: Page 102, section 5.15." = " **FAIL** REQUIRED DefaultImageableArea\n REF: Page 102, section 5.15."; " **FAIL** REQUIRED DefaultPaperDimension\n REF: Page 103, section 5.15." = " **FAIL** REQUIRED DefaultPaperDimension\n REF: Page 103, section 5.15."; " **FAIL** REQUIRED FileVersion\n REF: Page 56, section 5.3." = " **FAIL** REQUIRED FileVersion\n REF: Page 56, section 5.3."; " **FAIL** REQUIRED FormatVersion\n REF: Page 56, section 5.3." = " **FAIL** REQUIRED FormatVersion\n REF: Page 56, section 5.3."; " **FAIL** REQUIRED ImageableArea for PageSize %s\n REF: Page 41, section 5.\n REF: Page 102, section 5.15." = " **FAIL** REQUIRED ImageableArea for PageSize %s\n REF: Page 41, section 5.\n REF: Page 102, section 5.15."; " **FAIL** REQUIRED LanguageEncoding\n REF: Pages 56-57, section 5.3." = " **FAIL** REQUIRED LanguageEncoding\n REF: Pages 56-57, section 5.3."; " **FAIL** REQUIRED LanguageVersion\n REF: Pages 57-58, section 5.3." = " **FAIL** REQUIRED LanguageVersion\n REF: Pages 57-58, section 5.3."; " **FAIL** REQUIRED Manufacturer\n REF: Pages 58-59, section 5.3." = " **FAIL** REQUIRED Manufacturer\n REF: Pages 58-59, section 5.3."; " **FAIL** REQUIRED ModelName\n REF: Pages 59-60, section 5.3." = " **FAIL** REQUIRED ModelName\n REF: Pages 59-60, section 5.3."; " **FAIL** REQUIRED NickName\n REF: Page 60, section 5.3." = " **FAIL** REQUIRED NickName\n REF: Page 60, section 5.3."; " **FAIL** REQUIRED PCFileName\n REF: Pages 61-62, section 5.3." = " **FAIL** REQUIRED PCFileName\n REF: Pages 61-62, section 5.3."; " **FAIL** REQUIRED PSVersion\n REF: Pages 62-64, section 5.3." = " **FAIL** REQUIRED PSVersion\n REF: Pages 62-64, section 5.3."; " **FAIL** REQUIRED PageRegion\n REF: Page 100, section 5.14." = " **FAIL** REQUIRED PageRegion\n REF: Page 100, section 5.14."; " **FAIL** REQUIRED PageSize\n REF: Page 41, section 5.\n REF: Page 99, section 5.14." = " **FAIL** REQUIRED PageSize\n REF: Page 41, section 5.\n REF: Page 99, section 5.14."; " **FAIL** REQUIRED PageSize\n REF: Pages 99-100, section 5.14." = " **FAIL** REQUIRED PageSize\n REF: Pages 99-100, section 5.14."; " **FAIL** REQUIRED PaperDimension for PageSize %s\n REF: Page 41, section 5.\n REF: Page 103, section 5.15." = " **FAIL** REQUIRED PaperDimension for PageSize %s\n REF: Page 41, section 5.\n REF: Page 103, section 5.15."; " **FAIL** REQUIRED Product\n REF: Page 62, section 5.3." = " **FAIL** REQUIRED Product\n REF: Page 62, section 5.3."; " **FAIL** REQUIRED ShortNickName\n REF: Page 64-65, section 5.3." = " **FAIL** REQUIRED ShortNickName\n REF: Page 64-65, section 5.3."; " **FAIL** Unable to open PPD file - %s on line %d." = " **FAIL** Unable to open PPD file - %s on line %d."; " %d ERRORS FOUND" = " %d ERRORS FOUND"; " -h Show program usage" = " -h Show program usage"; " Bad %%%%BoundingBox: on line %d.\n REF: Page 39, %%%%BoundingBox:" = " Bad %%%%BoundingBox: on line %d.\n REF: Page 39, %%%%BoundingBox:"; " Bad %%%%Page: on line %d.\n REF: Page 53, %%%%Page:" = " Bad %%%%Page: on line %d.\n REF: Page 53, %%%%Page:"; " Bad %%%%Pages: on line %d.\n REF: Page 43, %%%%Pages:" = " Bad %%%%Pages: on line %d.\n REF: Page 43, %%%%Pages:"; " Line %d is longer than 255 characters (%d).\n REF: Page 25, Line Length" = " Line %d is longer than 255 characters (%d).\n REF: Page 25, Line Length"; " Missing %!PS-Adobe-3.0 on first line.\n REF: Page 17, 3.1 Conforming Documents" = " Missing %!PS-Adobe-3.0 on first line.\n REF: Page 17, 3.1 Conforming Documents"; " Missing %%EndComments comment. REF: Page 41, %%EndComments" = " Missing %%EndComments comment. REF: Page 41, %%EndComments"; " Missing or bad %%BoundingBox: comment.\n REF: Page 39, %%BoundingBox:" = " Missing or bad %%BoundingBox: comment.\n REF: Page 39, %%BoundingBox:"; " Missing or bad %%Page: comments.\n REF: Page 53, %%Page:" = " Missing or bad %%Page: comments.\n REF: Page 53, %%Page:"; " Missing or bad %%Pages: comment.\n REF: Page 43, %%Pages:" = " Missing or bad %%Pages: comment.\n REF: Page 43, %%Pages:"; " NO ERRORS FOUND" = " NO ERRORS FOUND"; " Saw %d lines that exceeded 255 characters." = " Saw %d lines that exceeded 255 characters."; " Too many %%BeginDocument comments." = " Too many %%BeginDocument comments."; " Too many %%EndDocument comments." = " Too many %%EndDocument comments."; " Warning: file contains binary data." = " Warning: file contains binary data."; " Warning: no %%EndComments comment in file." = " Warning: no %%EndComments comment in file."; " Warning: obsolete DSC version %.1f in file." = " Warning: obsolete DSC version %.1f in file."; " ! expression Unary NOT of expression." = " ! expression Unary NOT of expression."; " ( expressions ) Group expressions." = " ( expressions ) Group expressions."; " --[no-]debug-logging Turn debug logging on/off." = " --[no-]debug-logging Turn debug logging on/off."; " --[no-]remote-admin Turn remote administration on/off." = " --[no-]remote-admin Turn remote administration on/off."; " --[no-]remote-any Allow/prevent access from the Internet." = " --[no-]remote-any Allow/prevent access from the Internet."; " --[no-]share-printers Turn printer sharing on/off." = " --[no-]share-printers Turn printer sharing on/off."; " --[no-]user-cancel-any Allow/prevent users to cancel any job." = " --[no-]user-cancel-any Allow/prevent users to cancel any job."; " --cr End lines with CR (Mac OS 9)." = " --cr End lines with CR (Mac OS 9)."; " --crlf End lines with CR + LF (Windows)." = " --crlf End lines with CR + LF (Windows)."; " --domain regex Match domain to regular expression." = " --domain regex Match domain to regular expression."; " --exec utility [argument ...] ;\n Execute program if true." = " --exec utility [argument …] ;\n Execute program if true."; " --false Always false." = " --false Always false."; " --help Show help." = " --help Show help."; " --help Show this help." = " --help Show this help."; " --host regex Match hostname to regular expression." = " --host regex Match hostname to regular expression."; " --lf End lines with LF (UNIX/Linux/macOS)." = " --lf End lines with LF (UNIX/Linux/macOS)."; " --list-filters List filters that will be used." = " --list-filters List filters that will be used."; " --local True if service is local." = " --local True if service is local."; " --ls List attributes." = " --ls List attributes."; " --name regex Match service name to regular expression." = " --name regex Match service name to regular expression."; " --not expression Unary NOT of expression." = " --not expression Unary NOT of expression."; " --path regex Match resource path to regular expression." = " --path regex Match resource path to regular expression."; " --port number[-number] Match port to number or range." = " --port number[-number] Match port to number or range."; " --print Print URI if true." = " --print Print URI if true."; " --print-name Print service name if true." = " --print-name Print service name if true."; " --quiet Quietly report match via exit code." = " --quiet Quietly report match via exit code."; " --remote True if service is remote." = " --remote True if service is remote."; " --stop-after-include-error\n Stop tests after a failed INCLUDE." = " --stop-after-include-error\n Stop tests after a failed INCLUDE."; " --true Always true." = " --true Always true."; " --txt key True if the TXT record contains the key." = " --txt key True if the TXT record contains the key."; " --txt-* regex Match TXT record key to regular expression." = " --txt-* regex Match TXT record key to regular expression."; " --uri regex Match URI to regular expression." = " --uri regex Match URI to regular expression."; " --version Show program version." = " --version Show program version."; " --version Show version." = " --version Show version."; " -4 Connect using IPv4." = " -4 Connect using IPv4."; " -6 Connect using IPv6." = " -6 Connect using IPv6."; " -C Send requests using chunking (default)." = " -C Send requests using chunking (default)."; " -D Remove the input file when finished." = " -D Remove the input file when finished."; " -D name=value Set named variable to value." = " -D name=value Set named variable to value."; " -E Encrypt the connection." = " -E Encrypt the connection."; " -E Test with encryption using HTTP Upgrade to TLS." = " -E Test with encryption using HTTP Upgrade to TLS."; " -F Run in the foreground but detach from console." = " -F Run in the foreground but detach from console."; " -H samba-server Use the named SAMBA server." = " -H samba-server Use the named SAMBA server."; " -I Ignore errors." = " -I Ignore errors."; " -I include-dir Add include directory to search path." = " -I include-dir Add include directory to search path."; " -I {filename,filters,none,profiles}" = " -I {filename,filters,none,profiles}"; " -L Send requests using content-length." = " -L Send requests using content-length."; " -P filename.plist Produce XML plist to a file and test report to standard output." = " -P filename.plist Produce XML plist to a file and test report to standard output."; " -P filename.ppd Set PPD file." = " -P filename.ppd Set PPD file."; " -P number[-number] Match port to number or range." = " -P number[-number] Match port to number or range."; " -R root-directory Set alternate root." = " -R root-directory Set alternate root."; " -S Test with encryption using HTTPS." = " -S Test with encryption using HTTPS."; " -T seconds Set the browse timeout in seconds." = " -T seconds Set the browse timeout in seconds."; " -T seconds Set the receive/send timeout in seconds." = " -T seconds Set the receive/send timeout in seconds."; " -U username Specify username." = " -U username Specify username."; " -V version Set default IPP version." = " -V version Set default IPP version."; " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}" = " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}"; " -X Produce XML plist instead of plain text." = " -X Produce XML plist instead of plain text."; " -a Export all printers." = " -a Export all printers."; " -c Produce CSV output." = " -c Produce CSV output."; " -c catalog.po Load the specified message catalog." = " -c catalog.po Load the specified message catalog."; " -c cups-files.conf Set cups-files.conf file to use." = " -c cups-files.conf Set cups-files.conf file to use."; " -c cupsd.conf Set cupsd.conf file to use." = " -c cupsd.conf Set cupsd.conf file to use."; " -d name=value Set named variable to value." = " -d name=value Set named variable to value."; " -d output-dir Specify the output directory." = " -d output-dir Specify the output directory."; " -d printer Use the named printer." = " -d printer Use the named printer."; " -d regex Match domain to regular expression." = " -d regex Match domain to regular expression."; " -e Use every filter from the PPD file." = " -e Use every filter from the PPD file."; " -f Run in the foreground." = " -f Run in the foreground."; " -f filename Set default request filename." = " -f filename Set default request filename."; " -h Show this usage message." = " -h Show this usage message."; " -h Validate HTTP response headers." = " -h Validate HTTP response headers."; " -h regex Match hostname to regular expression." = " -h regex Match hostname to regular expression."; " -h server[:port] Specify server address." = " -h server[:port] Specify server address."; " -i mime/type Set input MIME type (otherwise auto-typed)." = " -i mime/type Set input MIME type (otherwise auto-typed)."; " -i seconds Repeat the last file with the given time interval." = " -i seconds Repeat the last file with the given time interval."; " -j job-id[,N] Filter file N from the specified job (default is file 1)." = " -j job-id[,N] Filter file N from the specified job (default is file 1)."; " -l List attributes." = " -l List attributes."; " -l Produce plain text output." = " -l Produce plain text output."; " -l Run cupsd on demand." = " -l Run cupsd on demand."; " -l lang[,lang,...] Specify the output language(s) (locale)." = " -l lang[,lang,…] Specify the output language(s) (locale)."; " -m Use the ModelName value as the filename." = " -m Use the ModelName value as the filename."; " -m mime/type Set output MIME type (otherwise application/pdf)." = " -m mime/type Set output MIME type (otherwise application/pdf)."; " -n copies Set number of copies." = " -n copies Set number of copies."; " -n count Repeat the last file the given number of times." = " -n count Repeat the last file the given number of times."; " -n regex Match service name to regular expression." = " -n regex Match service name to regular expression."; " -o filename.drv Set driver information file (otherwise ppdi.drv)." = " -o filename.drv Set driver information file (otherwise ppdi.drv)."; " -o filename.ppd[.gz] Set output file (otherwise stdout)." = " -o filename.ppd[.gz] Set output file (otherwise stdout)."; " -o name=value Set option(s)." = " -o name=value Set option(s)."; " -p Print URI if true." = " -p Print URI if true."; " -p filename.ppd Set PPD file." = " -p filename.ppd Set PPD file."; " -q Quietly report match via exit code." = " -q Quietly report match via exit code."; " -q Run silently." = " -q Run silently."; " -r True if service is remote." = " -r True if service is remote."; " -r Use 'relaxed' open mode." = " -r Use ‘relaxed’ open mode."; " -s Print service name if true." = " -s Print service name if true."; " -s cups-files.conf Set cups-files.conf file to use." = " -s cups-files.conf Set cups-files.conf file to use."; " -t Produce a test report." = " -t Produce a test report."; " -t Test PPDs instead of generating them." = " -t Test PPDs instead of generating them."; " -t Test the configuration file." = " -t Test the configuration file."; " -t key True if the TXT record contains the key." = " -t key True if the TXT record contains the key."; " -t title Set title." = " -t title Set title."; " -u Remove the PPD file when finished." = " -u Remove the PPD file when finished."; " -u regex Match URI to regular expression." = " -u regex Match URI to regular expression."; " -v Be verbose." = " -v Be verbose."; " -vv Be very verbose." = " -vv Be very verbose."; " -x utility [argument ...] ;\n Execute program if true." = " -x utility [argument …] ;\n Execute program if true."; " -z Compress PPD files using GNU zip." = " -z Compress PPD files using GNU zip."; " IPPFIND_SERVICE_DOMAIN Domain name" = " IPPFIND_SERVICE_DOMAIN Domain name"; " IPPFIND_SERVICE_HOSTNAME\n Fully-qualified domain name" = " IPPFIND_SERVICE_HOSTNAME\n Fully-qualified domain name"; " IPPFIND_SERVICE_NAME Service instance name" = " IPPFIND_SERVICE_NAME Service instance name"; " IPPFIND_SERVICE_PORT Port number" = " IPPFIND_SERVICE_PORT Port number"; " IPPFIND_SERVICE_REGTYPE DNS-SD registration type" = " IPPFIND_SERVICE_REGTYPE DNS-SD registration type"; " IPPFIND_SERVICE_SCHEME URI scheme" = " IPPFIND_SERVICE_SCHEME URI scheme"; " IPPFIND_SERVICE_URI URI" = " IPPFIND_SERVICE_URI URI"; " IPPFIND_TXT_* Value of TXT record key" = " IPPFIND_TXT_* Value of TXT record key"; " expression --and expression\n Logical AND." = " expression --and expression\n Logical AND."; " expression --or expression\n Logical OR." = " expression --or expression\n Logical OR."; " expression expression Logical AND." = " expression expression Logical AND."; " {service_domain} Domain name" = " {service_domain} Domain name"; " {service_hostname} Fully-qualified domain name" = " {service_hostname} Fully-qualified domain name"; " {service_name} Service instance name" = " {service_name} Service instance name"; " {service_port} Port number" = " {service_port} Port number"; " {service_regtype} DNS-SD registration type" = " {service_regtype} DNS-SD registration type"; " {service_scheme} URI scheme" = " {service_scheme} URI scheme"; " {service_uri} URI" = " {service_uri} URI"; " {txt_*} Value of TXT record key" = " {txt_*} Value of TXT record key"; " {} URI" = " {} URI"; " FAIL" = " FAIL"; " PASS" = " PASS"; "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." = "“%sâ€: Bad URI value “%s†- %s (RFC 8011 section 5.1.6)."; "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." = "“%sâ€: Bad URI value “%s†- bad length %d (RFC 8011 section 5.1.6)."; "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." = "“%sâ€: Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."; "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." = "“%sâ€: Bad attribute name - invalid character (RFC 8011 section 5.1.4)."; "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." = "“%sâ€: Bad boolen value %d (RFC 8011 section 5.1.21)."; "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." = "“%sâ€: Bad charset value “%s†- bad characters (RFC 8011 section 5.1.8)."; "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." = "“%sâ€: Bad charset value “%s†- bad length %d (RFC 8011 section 5.1.8)."; "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." = "“%sâ€: Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."; "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." = "“%sâ€: Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."; "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." = "“%sâ€: Bad dateTime UTC sign ‘%c’ (RFC 8011 section 5.1.15)."; "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." = "“%sâ€: Bad dateTime day %u (RFC 8011 section 5.1.15)."; "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." = "“%sâ€: Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."; "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." = "“%sâ€: Bad dateTime hours %u (RFC 8011 section 5.1.15)."; "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." = "“%sâ€: Bad dateTime minutes %u (RFC 8011 section 5.1.15)."; "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." = "“%sâ€: Bad dateTime month %u (RFC 8011 section 5.1.15)."; "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." = "“%sâ€: Bad dateTime seconds %u (RFC 8011 section 5.1.15)."; "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." = "“%sâ€: Bad enum value %d - out of range (RFC 8011 section 5.1.5)."; "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." = "“%sâ€: Bad keyword value “%s†- bad length %d (RFC 8011 section 5.1.4)."; "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section 5.1.4)." = "“%sâ€: Bad keyword value “%s†- invalid character (RFC 8011 section 5.1.4)."; "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section 5.1.10)." = "“%sâ€: Bad mimeMediaType value “%s†- bad characters (RFC 8011 section 5.1.10)."; "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section 5.1.10)." = "“%sâ€: Bad mimeMediaType value “%s†- bad length %d (RFC 8011 section 5.1.10)."; "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." = "“%sâ€: Bad name value “%s†- bad UTF-8 sequence (RFC 8011 section 5.1.3)."; "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." = "“%sâ€: Bad name value “%s†- bad length %d (RFC 8011 section 5.1.3)."; "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section 5.1.9)." = "“%sâ€: Bad naturalLanguage value “%s†- bad characters (RFC 8011 section 5.1.9)."; "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section 5.1.9)." = "“%sâ€: Bad naturalLanguage value “%s†- bad length %d (RFC 8011 section 5.1.9)."; "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." = "“%sâ€: Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."; "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 section 5.1.14)." = "“%sâ€: Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 section 5.1.14)."; "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section 5.1.16)." = "“%sâ€: Bad resolution value %dx%d%s - bad units value (RFC 8011 section 5.1.16)."; "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16)." = "“%sâ€: Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16)."; "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16)." = "“%sâ€: Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16)."; "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." = "“%sâ€: Bad text value “%s†- bad UTF-8 sequence (RFC 8011 section 5.1.2)."; "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." = "“%sâ€: Bad text value “%s†- bad length %d (RFC 8011 section 5.1.2)."; "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." = "“%sâ€: Bad uriScheme value “%s†- bad characters (RFC 8011 section 5.1.7)."; "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." = "“%sâ€: Bad uriScheme value “%s†- bad length %d (RFC 8011 section 5.1.7)."; "%-7s %-7.7s %-7d %-31.31s %.0f bytes" = "%-7s %-7.7s %-7d %-31.31s %.0f bytes"; "%d x %d mm" = "%d x %d mm"; "%g x %g \"" = "%g x %g ″"; "%s (%s)" = "%s (%s)"; "%s (%s, %s)" = "%s (%s, %s)"; "%s (Borderless)" = "%s (Borderless)"; "%s (Borderless, %s)" = "%s (Borderless, %s)"; "%s (Borderless, %s, %s)" = "%s (Borderless, %s, %s)"; "%s accepting requests since %s" = "%s accepting requests since %s"; "%s cannot be changed." = "%s cannot be changed."; "%s is not implemented by the CUPS version of lpc." = "%s is not implemented by the CUPS version of lpc."; "%s is not ready" = "%s is not ready"; "%s is ready" = "%s is ready"; "%s is ready and printing" = "%s is ready and printing"; "%s job-id user title copies options [file]" = "%s job-id user title copies options [file]"; "%s not accepting requests since %s -" = "%s not accepting requests since %s -"; "%s not supported." = "%s not supported."; "%s/%s accepting requests since %s" = "%s/%s accepting requests since %s"; "%s/%s not accepting requests since %s -" = "%s/%s not accepting requests since %s -"; "%s: %-33.33s [job %d localhost]" = "%s: %-33.33s [job %d localhost]"; // TRANSLATORS: Message is "subject: error" "%s: %s" = "%s: %s"; "%s: %s failed: %s" = "%s: %s failed: %s"; "%s: Bad printer URI \"%s\"." = "%s: Bad printer URI “%sâ€."; "%s: Bad version %s for \"-V\"." = "%s: Bad version %s for “-Vâ€."; "%s: Don't know what to do." = "%s: Don’t know what to do."; "%s: Error - %s" = "%s: Error - %s"; "%s: Error - %s environment variable names non-existent destination \"%s\"." = "%s: Error - %s environment variable names non-existent destination “%sâ€."; "%s: Error - add '/version=1.1' to server name." = "%s: Error - add ‘/version=1.1’ to server name."; "%s: Error - bad job ID." = "%s: Error - bad job ID."; "%s: Error - cannot print files and alter jobs simultaneously." = "%s: Error - cannot print files and alter jobs simultaneously."; "%s: Error - cannot print from stdin if files or a job ID are provided." = "%s: Error - cannot print from stdin if files or a job ID are provided."; "%s: Error - copies must be 1 or more." = "%s: Error - copies must be 1 or more."; "%s: Error - expected character set after \"-S\" option." = "%s: Error - expected character set after “-S†option."; "%s: Error - expected content type after \"-T\" option." = "%s: Error - expected content type after “-T†option."; "%s: Error - expected copies after \"-#\" option." = "%s: Error - expected copies after “-#†option."; "%s: Error - expected copies after \"-n\" option." = "%s: Error - expected copies after “-n†option."; "%s: Error - expected destination after \"-P\" option." = "%s: Error - expected destination after “-P†option."; "%s: Error - expected destination after \"-d\" option." = "%s: Error - expected destination after “-d†option."; "%s: Error - expected form after \"-f\" option." = "%s: Error - expected form after “-f†option."; "%s: Error - expected hold name after \"-H\" option." = "%s: Error - expected hold name after “-H†option."; "%s: Error - expected hostname after \"-H\" option." = "%s: Error - expected hostname after “-H†option."; "%s: Error - expected hostname after \"-h\" option." = "%s: Error - expected hostname after “-h†option."; "%s: Error - expected mode list after \"-y\" option." = "%s: Error - expected mode list after “-y†option."; "%s: Error - expected name after \"-%c\" option." = "%s: Error - expected name after “-%c†option."; "%s: Error - expected option=value after \"-o\" option." = "%s: Error - expected option=value after “-o†option."; "%s: Error - expected page list after \"-P\" option." = "%s: Error - expected page list after “-P†option."; "%s: Error - expected priority after \"-%c\" option." = "%s: Error - expected priority after “-%c†option."; "%s: Error - expected reason text after \"-r\" option." = "%s: Error - expected reason text after “-r†option."; "%s: Error - expected title after \"-t\" option." = "%s: Error - expected title after “-t†option."; "%s: Error - expected username after \"-U\" option." = "%s: Error - expected username after “-U†option."; "%s: Error - expected username after \"-u\" option." = "%s: Error - expected username after “-u†option."; "%s: Error - expected value after \"-%c\" option." = "%s: Error - expected value after “-%c†option."; "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" option." = "%s: Error - need “completedâ€, “not-completedâ€, or “all†after “-W†option."; "%s: Error - no default destination available." = "%s: Error - no default destination available."; "%s: Error - priority must be between 1 and 100." = "%s: Error - priority must be between 1 and 100."; "%s: Error - scheduler not responding." = "%s: Error - scheduler not responding."; "%s: Error - too many files - \"%s\"." = "%s: Error - too many files - “%sâ€."; "%s: Error - unable to access \"%s\" - %s" = "%s: Error - unable to access “%s†- %s"; "%s: Error - unable to queue from stdin - %s." = "%s: Error - unable to queue from stdin - %s."; "%s: Error - unknown destination \"%s\"." = "%s: Error - unknown destination “%sâ€."; "%s: Error - unknown destination \"%s/%s\"." = "%s: Error - unknown destination “%s/%sâ€."; "%s: Error - unknown option \"%c\"." = "%s: Error - unknown option “%câ€."; "%s: Error - unknown option \"%s\"." = "%s: Error - unknown option “%sâ€."; "%s: Expected job ID after \"-i\" option." = "%s: Expected job ID after “-i†option."; "%s: Invalid destination name in list \"%s\"." = "%s: Invalid destination name in list “%sâ€."; "%s: Invalid filter string \"%s\"." = "%s: Invalid filter string “%sâ€."; "%s: Missing filename for \"-P\"." = "%s: Missing filename for “-Pâ€."; "%s: Missing timeout for \"-T\"." = "%s: Missing timeout for “-Tâ€."; "%s: Missing version for \"-V\"." = "%s: Missing version for “-Vâ€."; "%s: Need job ID (\"-i jobid\") before \"-H restart\"." = "%s: Need job ID (“-i jobidâ€) before “-H restartâ€."; "%s: No filter to convert from %s/%s to %s/%s." = "%s: No filter to convert from %s/%s to %s/%s."; "%s: Operation failed: %s" = "%s: Operation failed: %s"; "%s: Sorry, no encryption support." = "%s: Sorry, no encryption support."; "%s: Unable to connect to \"%s:%d\": %s" = "%s: Unable to connect to “%s:%dâ€: %s"; "%s: Unable to connect to server." = "%s: Unable to connect to server."; "%s: Unable to contact server." = "%s: Unable to contact server."; "%s: Unable to create PPD file: %s" = "%s: Unable to create PPD file: %s"; "%s: Unable to determine MIME type of \"%s\"." = "%s: Unable to determine MIME type of “%sâ€."; "%s: Unable to open \"%s\": %s" = "%s: Unable to open “%sâ€: %s"; "%s: Unable to open %s: %s" = "%s: Unable to open %s: %s"; "%s: Unable to open PPD file: %s on line %d." = "%s: Unable to open PPD file: %s on line %d."; "%s: Unable to read MIME database from \"%s\" or \"%s\"." = "%s: Unable to read MIME database from “%s†or “%sâ€."; "%s: Unable to resolve \"%s\"." = "%s: Unable to resolve “%sâ€."; "%s: Unknown argument \"%s\"." = "%s: Unknown argument “%sâ€."; "%s: Unknown destination \"%s\"." = "%s: Unknown destination “%sâ€."; "%s: Unknown destination MIME type %s/%s." = "%s: Unknown destination MIME type %s/%s."; "%s: Unknown option \"%c\"." = "%s: Unknown option “%câ€."; "%s: Unknown option \"%s\"." = "%s: Unknown option “%sâ€."; "%s: Unknown option \"-%c\"." = "%s: Unknown option “-%câ€."; "%s: Unknown source MIME type %s/%s." = "%s: Unknown source MIME type %s/%s."; "%s: Warning - \"%c\" format modifier not supported - output may not be correct." = "%s: Warning - “%c†format modifier not supported - output may not be correct."; "%s: Warning - character set option ignored." = "%s: Warning - character set option ignored."; "%s: Warning - content type option ignored." = "%s: Warning - content type option ignored."; "%s: Warning - form option ignored." = "%s: Warning - form option ignored."; "%s: Warning - mode option ignored." = "%s: Warning - mode option ignored."; "-1" = "-1"; "-10" = "-10"; "-100" = "-100"; "-105" = "-105"; "-11" = "-11"; "-110" = "-110"; "-115" = "-115"; "-12" = "-12"; "-120" = "-120"; "-13" = "-13"; "-14" = "-14"; "-15" = "-15"; "-2" = "-2"; "-20" = "-20"; "-25" = "-25"; "-3" = "-3"; "-30" = "-30"; "-35" = "-35"; "-4" = "-4"; "-40" = "-40"; "-45" = "-45"; "-5" = "-5"; "-50" = "-50"; "-55" = "-55"; "-6" = "-6"; "-60" = "-60"; "-65" = "-65"; "-7" = "-7"; "-70" = "-70"; "-75" = "-75"; "-8" = "-8"; "-80" = "-80"; "-85" = "-85"; "-9" = "-9"; "-90" = "-90"; "-95" = "-95"; "0" = "0"; "1" = "1"; "1 inch/sec." = "1 inch/sec."; "1.25x0.25\"" = "1.25x0.25″"; "1.25x2.25\"" = "1.25x2.25″"; "1.5 inch/sec." = "1.5 inch/sec."; "1.50x0.25\"" = "1.50x0.25″"; "1.50x0.50\"" = "1.50x0.50″"; "1.50x1.00\"" = "1.50x1.00″"; "1.50x2.00\"" = "1.50x2.00″"; "10" = "10"; "10 inches/sec." = "10 inches/sec."; "10 x 11" = "10 x 11"; "10 x 13" = "10 x 13"; "10 x 14" = "10 x 14"; "100" = "100"; "100 mm/sec." = "100 mm/sec."; "105" = "105"; "11" = "11"; "11 inches/sec." = "11 inches/sec."; "110" = "110"; "115" = "115"; "12" = "12"; "12 inches/sec." = "12 inches/sec."; "12 x 11" = "12 x 11"; "120" = "120"; "120 mm/sec." = "120 mm/sec."; "120x60dpi" = "120x60dpi"; "120x72dpi" = "120x72dpi"; "13" = "13"; "136dpi" = "136dpi"; "14" = "14"; "15" = "15"; "15 mm/sec." = "15 mm/sec."; "15 x 11" = "15 x 11"; "150 mm/sec." = "150 mm/sec."; "150dpi" = "150dpi"; "16" = "16"; "17" = "17"; "18" = "18"; "180dpi" = "180dpi"; "19" = "19"; "2" = "2"; "2 inches/sec." = "2 inches/sec."; "2-Hole Punch (Landscape)" = "2-Hole Punch (Landscape)"; "2-Hole Punch (Portrait)" = "2-Hole Punch (Portrait)"; "2-Hole Punch (Reverse Landscape)" = "2-Hole Punch (Reverse Landscape)"; "2-Hole Punch (Reverse Portrait)" = "2-Hole Punch (Reverse Portrait)"; "2-Sided Printing" = "2-Sided Printing"; "2.00x0.37\"" = "2.00x0.37″"; "2.00x0.50\"" = "2.00x0.50″"; "2.00x1.00\"" = "2.00x1.00″"; "2.00x1.25\"" = "2.00x1.25″"; "2.00x2.00\"" = "2.00x2.00″"; "2.00x3.00\"" = "2.00x3.00″"; "2.00x4.00\"" = "2.00x4.00″"; "2.00x5.50\"" = "2.00x5.50″"; "2.25x0.50\"" = "2.25x0.50″"; "2.25x1.25\"" = "2.25x1.25″"; "2.25x4.00\"" = "2.25x4.00″"; "2.25x5.50\"" = "2.25x5.50″"; "2.38x5.50\"" = "2.38x5.50″"; "2.5 inches/sec." = "2.5 inches/sec."; "2.50x1.00\"" = "2.50x1.00″"; "2.50x2.00\"" = "2.50x2.00″"; "2.75x1.25\"" = "2.75x1.25″"; "2.9 x 1\"" = "2.9 x 1″"; "20" = "20"; "20 mm/sec." = "20 mm/sec."; "200 mm/sec." = "200 mm/sec."; "203dpi" = "203dpi"; "21" = "21"; "22" = "22"; "23" = "23"; "24" = "24"; "24-Pin Series" = "24-Pin Series"; "240x72dpi" = "240x72dpi"; "25" = "25"; "250 mm/sec." = "250 mm/sec."; "26" = "26"; "27" = "27"; "28" = "28"; "29" = "29"; "3" = "3"; "3 inches/sec." = "3 inches/sec."; "3 x 5" = "3 x 5"; "3-Hole Punch (Landscape)" = "3-Hole Punch (Landscape)"; "3-Hole Punch (Portrait)" = "3-Hole Punch (Portrait)"; "3-Hole Punch (Reverse Landscape)" = "3-Hole Punch (Reverse Landscape)"; "3-Hole Punch (Reverse Portrait)" = "3-Hole Punch (Reverse Portrait)"; "3.00x1.00\"" = "3.00x1.00″"; "3.00x1.25\"" = "3.00x1.25″"; "3.00x2.00\"" = "3.00x2.00″"; "3.00x3.00\"" = "3.00x3.00″"; "3.00x5.00\"" = "3.00x5.00″"; "3.25x2.00\"" = "3.25x2.00″"; "3.25x5.00\"" = "3.25x5.00″"; "3.25x5.50\"" = "3.25x5.50″"; "3.25x5.83\"" = "3.25x5.83″"; "3.25x7.83\"" = "3.25x7.83″"; "3.5 x 5" = "3.5 x 5"; "3.5\" Disk" = "3.5″ Disk"; "3.50x1.00\"" = "3.50x1.00″"; "30" = "30"; "30 mm/sec." = "30 mm/sec."; "300 mm/sec." = "300 mm/sec."; "300dpi" = "300dpi"; "35" = "35"; "360dpi" = "360dpi"; "360x180dpi" = "360x180dpi"; "4" = "4"; "4 inches/sec." = "4 inches/sec."; "4-Hole Punch (Landscape)" = "4-Hole Punch (Landscape)"; "4-Hole Punch (Portrait)" = "4-Hole Punch (Portrait)"; "4-Hole Punch (Reverse Landscape)" = "4-Hole Punch (Reverse Landscape)"; "4-Hole Punch (Reverse Portrait)" = "4-Hole Punch (Reverse Portrait)"; "4.00x1.00\"" = "4.00x1.00″"; "4.00x13.00\"" = "4.00x13.00″"; "4.00x2.00\"" = "4.00x2.00″"; "4.00x2.50\"" = "4.00x2.50″"; "4.00x3.00\"" = "4.00x3.00″"; "4.00x4.00\"" = "4.00x4.00″"; "4.00x5.00\"" = "4.00x5.00″"; "4.00x6.00\"" = "4.00x6.00″"; "4.00x6.50\"" = "4.00x6.50″"; "40" = "40"; "40 mm/sec." = "40 mm/sec."; "45" = "45"; "5" = "5"; "5 inches/sec." = "5 inches/sec."; "5 x 7" = "5 x 7"; "50" = "50"; "55" = "55"; "6" = "6"; "6 inches/sec." = "6 inches/sec."; "6.00x1.00\"" = "6.00x1.00″"; "6.00x2.00\"" = "6.00x2.00″"; "6.00x3.00\"" = "6.00x3.00″"; "6.00x4.00\"" = "6.00x4.00″"; "6.00x5.00\"" = "6.00x5.00″"; "6.00x6.00\"" = "6.00x6.00″"; "6.00x6.50\"" = "6.00x6.50″"; "60" = "60"; "60 mm/sec." = "60 mm/sec."; "600dpi" = "600dpi"; "60dpi" = "60dpi"; "60x72dpi" = "60x72dpi"; "65" = "65"; "7" = "7"; "7 inches/sec." = "7 inches/sec."; "7 x 9" = "7 x 9"; "70" = "70"; "75" = "75"; "8" = "8"; "8 inches/sec." = "8 inches/sec."; "8 x 10" = "8 x 10"; "8.00x1.00\"" = "8.00x1.00″"; "8.00x2.00\"" = "8.00x2.00″"; "8.00x3.00\"" = "8.00x3.00″"; "8.00x4.00\"" = "8.00x4.00″"; "8.00x5.00\"" = "8.00x5.00″"; "8.00x6.00\"" = "8.00x6.00″"; "8.00x6.50\"" = "8.00x6.50″"; "80" = "80"; "80 mm/sec." = "80 mm/sec."; "85" = "85"; "9" = "9"; "9 inches/sec." = "9 inches/sec."; "9 x 11" = "9 x 11"; "9 x 12" = "9 x 12"; "9-Pin Series" = "9-Pin Series"; "90" = "90"; "95" = "95"; "?Invalid help command unknown." = "?Invalid help command unknown."; "A Samba password is required to export printer drivers" = "A Samba password is required to export printer drivers"; "A Samba username is required to export printer drivers" = "A Samba username is required to export printer drivers"; "A class named \"%s\" already exists." = "A class named “%s†already exists."; "A printer named \"%s\" already exists." = "A printer named “%s†already exists."; "A0" = "A0"; "A0 Long Edge" = "A0 Long Edge"; "A1" = "A1"; "A1 Long Edge" = "A1 Long Edge"; "A10" = "A10"; "A2" = "A2"; "A2 Long Edge" = "A2 Long Edge"; "A3" = "A3"; "A3 Long Edge" = "A3 Long Edge"; "A3 Oversize" = "A3 Oversize"; "A3 Oversize Long Edge" = "A3 Oversize Long Edge"; "A4" = "A4"; "A4 Long Edge" = "A4 Long Edge"; "A4 Oversize" = "A4 Oversize"; "A4 Small" = "A4 Small"; "A5" = "A5"; "A5 Long Edge" = "A5 Long Edge"; "A5 Oversize" = "A5 Oversize"; "A6" = "A6"; "A6 Long Edge" = "A6 Long Edge"; "A7" = "A7"; "A8" = "A8"; "A9" = "A9"; "ANSI A" = "ANSI A"; "ANSI B" = "ANSI B"; "ANSI C" = "ANSI C"; "ANSI D" = "ANSI D"; "ANSI E" = "ANSI E"; "ARCH C" = "ARCH C"; "ARCH C Long Edge" = "ARCH C Long Edge"; "ARCH D" = "ARCH D"; "ARCH D Long Edge" = "ARCH D Long Edge"; "ARCH E" = "ARCH E"; "ARCH E Long Edge" = "ARCH E Long Edge"; "Accept Jobs" = "Accept Jobs"; "Accepted" = "Accepted"; "Accordian Fold" = "Accordian Fold"; "Add Class" = "Add Class"; "Add Printer" = "Add Printer"; "Add RSS Subscription" = "Add RSS Subscription"; "Address" = "Address"; "Administration" = "Administration"; "Advanced Photo Paper" = "Advanced Photo Paper"; "Alternate" = "Alternate"; "Alternate Roll" = "Alternate Roll"; "Aluminum" = "Aluminum"; "Always" = "Always"; "AppSocket/HP JetDirect" = "AppSocket/HP JetDirect"; "Applicator" = "Applicator"; "Archival Envelope" = "Archival Envelope"; "Archival Fabric" = "Archival Fabric"; "Archival Paper" = "Archival Paper"; "Archival Photo Paper" = "Archival Photo Paper"; "Attempt to set %s printer-state to bad value %d." = "Attempt to set %s printer-state to bad value %d."; "Attribute \"%s\" is in the wrong group." = "Attribute “%s†is in the wrong group."; "Attribute \"%s\" is the wrong value type." = "Attribute “%s†is the wrong value type."; "Attribute groups are out of order (%x < %x)." = "Attribute groups are out of order (%x < %x)."; "Automatic" = "Automatic"; "B0" = "B0"; "B1" = "B1"; "B10" = "B10"; "B2" = "B2"; "B3" = "B3"; "B4" = "B4"; "B5" = "B5"; "B5 Oversize" = "B5 Oversize"; "B6" = "B6"; "B7" = "B7"; "B8" = "B8"; "B9" = "B9"; "Back Print Film" = "Back Print Film"; "Bad 'document-format' value \"%s\"." = "Bad ‘document-format’ value “%sâ€."; "Bad NULL dests pointer" = "Bad NULL dests pointer"; "Bad OpenGroup" = "Bad OpenGroup"; "Bad OpenUI/JCLOpenUI" = "Bad OpenUI/JCLOpenUI"; "Bad OrderDependency" = "Bad OrderDependency"; "Bad PPD cache file." = "Bad PPD cache file."; "Bad PPD file." = "Bad PPD file."; "Bad Request" = "Bad Request"; "Bad SNMP version number" = "Bad SNMP version number"; "Bad UIConstraints" = "Bad UIConstraints"; "Bad arguments to function" = "Bad arguments to function"; "Bad copies value %d." = "Bad copies value %d."; "Bad custom parameter" = "Bad custom parameter"; "Bad device-uri \"%s\"." = "Bad device-uri “%sâ€."; "Bad device-uri scheme \"%s\"." = "Bad device-uri scheme “%sâ€."; "Bad document-format \"%s\"." = "Bad document-format “%sâ€."; "Bad document-format-default \"%s\"." = "Bad document-format-default “%sâ€."; "Bad filename buffer" = "Bad filename buffer"; "Bad hostname/address in URI" = "Bad hostname/address in URI"; "Bad job-name value: %s" = "Bad job-name value: %s"; "Bad job-name value: Wrong type or count." = "Bad job-name value: Wrong type or count."; "Bad job-priority value." = "Bad job-priority value."; "Bad job-sheets value \"%s\"." = "Bad job-sheets value “%sâ€."; "Bad job-sheets value type." = "Bad job-sheets value type."; "Bad job-state value." = "Bad job-state value."; "Bad job-uri \"%s\"." = "Bad job-uri “%sâ€."; "Bad notify-pull-method \"%s\"." = "Bad notify-pull-method “%sâ€."; "Bad notify-recipient-uri \"%s\"." = "Bad notify-recipient-uri “%sâ€."; "Bad number-up value %d." = "Bad number-up value %d."; "Bad option + choice on line %d." = "Bad option + choice on line %d."; "Bad page-ranges values %d-%d." = "Bad page-ranges values %d-%d."; "Bad port number in URI" = "Bad port number in URI"; "Bad port-monitor \"%s\"." = "Bad port-monitor “%sâ€."; "Bad printer-state value %d." = "Bad printer-state value %d."; "Bad printer-uri." = "Bad printer-uri."; "Bad request ID %d." = "Bad request ID %d."; "Bad request version number %d.%d." = "Bad request version number %d.%d."; "Bad requesting-user-name value: %s" = "Bad requesting-user-name value: %s"; "Bad resource in URI" = "Bad resource in URI"; "Bad scheme in URI" = "Bad scheme in URI"; "Bad subscription ID" = "Bad subscription ID"; "Bad username in URI" = "Bad username in URI"; "Bad value string" = "Bad value string"; "Bad/empty URI" = "Bad/empty URI"; "Bale" = "Bale"; "Banners" = "Banners"; "Bind" = "Bind"; "Bind (Landscape)" = "Bind (Landscape)"; "Bind (Portrait)" = "Bind (Portrait)"; "Bind (Reverse Landscape)" = "Bind (Reverse Landscape)"; "Bind (Reverse Portrait)" = "Bind (Reverse Portrait)"; "Bond Envelope" = "Bond Envelope"; "Bond Paper" = "Bond Paper"; "Booklet" = "Booklet"; "Booklet Maker" = "Booklet Maker"; "Boolean expected for waiteof option \"%s\"." = "Boolean expected for waiteof option “%sâ€."; "Bottom" = "Bottom"; "Bottom Tray" = "Bottom Tray"; "Buffer overflow detected, aborting." = "Buffer overflow detected, aborting."; "CD" = "CD"; "CMYK" = "CMYK"; "CPCL Label Printer" = "CPCL Label Printer"; "Cancel Jobs" = "Cancel Jobs"; "Cancel RSS Subscription" = "Cancel RSS Subscription"; "Canceling print job." = "Canceling print job."; "Cannot change printer-is-shared for remote queues." = "Cannot change printer-is-shared for remote queues."; "Cannot share a remote Kerberized printer." = "Cannot share a remote Kerberized printer."; "Cardboard" = "Cardboard"; "Cardstock" = "Cardstock"; "Cassette" = "Cassette"; "Center" = "Center"; "Center Tray" = "Center Tray"; "Change Settings" = "Change Settings"; "Character set \"%s\" not supported." = "Character set “%s†not supported."; "Classes" = "Classes"; "Clean Print Heads" = "Clean Print Heads"; "Close-Job doesn't support the job-uri attribute." = "Close-Job doesn’t support the job-uri attribute."; "Coat" = "Coat"; "Coated Envelope" = "Coated Envelope"; "Coated Paper" = "Coated Paper"; "Color" = "Color"; "Color Mode" = "Color Mode"; "Colored Labels" = "Colored Labels"; "Commands may be abbreviated. Commands are:\n\nexit help quit status ?" = "Commands may be abbreviated. Commands are:\n\nexit help quit status ?"; "Community name uses indefinite length" = "Community name uses indefinite length"; "Connected to printer." = "Connected to printer."; "Connecting to printer." = "Connecting to printer."; "Continue" = "Continue"; "Continuous" = "Continuous"; "Continuous Long" = "Continuous Long"; "Continuous Short" = "Continuous Short"; "Control file sent successfully." = "Control file sent successfully."; "Copying print data." = "Copying print data."; "Cotton Envelope" = "Cotton Envelope"; "Cotton Paper" = "Cotton Paper"; "Cover" = "Cover"; "Created" = "Created"; "Credentials do not validate against site CA certificate." = "Credentials do not validate against site CA certificate."; "Credentials have expired." = "Credentials have expired."; "Custom" = "Custom"; "CustominCutInterval" = "CustominCutInterval"; "CustominTearInterval" = "CustominTearInterval"; "Cut" = "Cut"; "Cut Media" = "Cut Media"; "Cutter" = "Cutter"; "DVD" = "DVD"; "Dark" = "Dark"; "Darkness" = "Darkness"; "Data file sent successfully." = "Data file sent successfully."; "Deep Color" = "Deep Color"; "Delete Class" = "Delete Class"; "Delete Printer" = "Delete Printer"; "DeskJet Series" = "DeskJet Series"; "Destination \"%s\" is not accepting jobs." = "Destination “%s†is not accepting jobs."; "Device: uri = %s\n class = %s\n info = %s\n make-and-model = %s\n device-id = %s\n location = %s" = "Device: uri = %s\n class = %s\n info = %s\n make-and-model = %s\n device-id = %s\n location = %s"; "Direct Thermal Media" = "Direct Thermal Media"; "Directory \"%s\" contains a relative path." = "Directory “%s†contains a relative path."; "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." = "Directory “%s†has insecure permissions (0%o/uid=%d/gid=%d)."; "Directory \"%s\" is a file." = "Directory “%s†is a file."; "Directory \"%s\" not available: %s" = "Directory “%s†not available: %s"; "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." = "Directory “%s†permissions OK (0%o/uid=%d/gid=%d)."; "Disabled" = "Disabled"; "Disc" = "Disc"; "Document #%d does not exist in job #%d." = "Document #%d does not exist in job #%d."; "Double Gate Fold" = "Double Gate Fold"; "Double Staple (Landscape)" = "Double Staple (Landscape)"; "Double Staple (Portrait)" = "Double Staple (Portrait)"; "Double Staple (Reverse Landscape)" = "Double Staple (Reverse Landscape)"; "Double Staple (Reverse Portrait)" = "Double Staple (Reverse Portrait)"; "Double Wall Cardboard" = "Double Wall Cardboard"; "Draft" = "Draft"; "Dry Film" = "Dry Film"; "Duplexer" = "Duplexer"; "Dymo" = "Dymo"; "EPL1 Label Printer" = "EPL1 Label Printer"; "EPL2 Label Printer" = "EPL2 Label Printer"; "Edit Configuration File" = "Edit Configuration File"; "Embossing Foil" = "Embossing Foil"; "Empty PPD file." = "Empty PPD file."; "Encryption is not supported." = "Encryption is not supported."; "End Board" = "End Board"; // TRANSLATORS: Banner/cover sheet after the print job. "Ending Banner" = "Ending Banner"; "Engineering Z Fold" = "Engineering Z Fold"; "English" = "English"; "Enter your username and password or the root username and password to access this page. If you are using Kerberos authentication, make sure you have a valid Kerberos ticket." = "Enter your username and password or the root username and password to access this page. If you are using Kerberos authentication, make sure you have a valid Kerberos ticket."; "Envelope" = "Envelope"; "Envelope #10" = "Envelope #10"; "Envelope #11" = "Envelope #11"; "Envelope #12" = "Envelope #12"; "Envelope #14" = "Envelope #14"; "Envelope #9" = "Envelope #9"; "Envelope B4" = "Envelope B4"; "Envelope B5" = "Envelope B5"; "Envelope B6" = "Envelope B6"; "Envelope C0" = "Envelope C0"; "Envelope C1" = "Envelope C1"; "Envelope C2" = "Envelope C2"; "Envelope C3" = "Envelope C3"; "Envelope C4" = "Envelope C4"; "Envelope C5" = "Envelope C5"; "Envelope C6" = "Envelope C6"; "Envelope C65" = "Envelope C65"; "Envelope C7" = "Envelope C7"; "Envelope Choukei 3" = "Envelope Choukei 3"; "Envelope Choukei 3 Long Edge" = "Envelope Choukei 3 Long Edge"; "Envelope Choukei 4" = "Envelope Choukei 4"; "Envelope Choukei 4 Long Edge" = "Envelope Choukei 4 Long Edge"; "Envelope DL" = "Envelope DL"; "Envelope Feed" = "Envelope Feed"; "Envelope Invite" = "Envelope Invite"; "Envelope Italian" = "Envelope Italian"; "Envelope Kaku2" = "Envelope Kaku2"; "Envelope Kaku2 Long Edge" = "Envelope Kaku2 Long Edge"; "Envelope Kaku3" = "Envelope Kaku3"; "Envelope Kaku3 Long Edge" = "Envelope Kaku3 Long Edge"; "Envelope Monarch" = "Envelope Monarch"; "Envelope PRC1" = "Envelope PRC1"; "Envelope PRC1 Long Edge" = "Envelope PRC1 Long Edge"; "Envelope PRC10" = "Envelope PRC10"; "Envelope PRC10 Long Edge" = "Envelope PRC10 Long Edge"; "Envelope PRC2" = "Envelope PRC2"; "Envelope PRC2 Long Edge" = "Envelope PRC2 Long Edge"; "Envelope PRC3" = "Envelope PRC3"; "Envelope PRC3 Long Edge" = "Envelope PRC3 Long Edge"; "Envelope PRC4" = "Envelope PRC4"; "Envelope PRC4 Long Edge" = "Envelope PRC4 Long Edge"; "Envelope PRC5 Long Edge" = "Envelope PRC5 Long Edge"; "Envelope PRC5PRC5" = "Envelope PRC5PRC5"; "Envelope PRC6" = "Envelope PRC6"; "Envelope PRC6 Long Edge" = "Envelope PRC6 Long Edge"; "Envelope PRC7" = "Envelope PRC7"; "Envelope PRC7 Long Edge" = "Envelope PRC7 Long Edge"; "Envelope PRC8" = "Envelope PRC8"; "Envelope PRC8 Long Edge" = "Envelope PRC8 Long Edge"; "Envelope PRC9" = "Envelope PRC9"; "Envelope PRC9 Long Edge" = "Envelope PRC9 Long Edge"; "Envelope Personal" = "Envelope Personal"; "Envelope You4" = "Envelope You4"; "Envelope You4 Long Edge" = "Envelope You4 Long Edge"; "Environment Variables:" = "Environment Variables:"; "Epson" = "Epson"; "Error Policy" = "Error Policy"; "Error reading raster data." = "Error reading raster data."; "Error sending raster data." = "Error sending raster data."; "Error: need hostname after \"-h\" option." = "Error: need hostname after “-h†option."; "European Fanfold" = "European Fanfold"; "European Fanfold Legal" = "European Fanfold Legal"; "Every 10 Labels" = "Every 10 Labels"; "Every 2 Labels" = "Every 2 Labels"; "Every 3 Labels" = "Every 3 Labels"; "Every 4 Labels" = "Every 4 Labels"; "Every 5 Labels" = "Every 5 Labels"; "Every 6 Labels" = "Every 6 Labels"; "Every 7 Labels" = "Every 7 Labels"; "Every 8 Labels" = "Every 8 Labels"; "Every 9 Labels" = "Every 9 Labels"; "Every Label" = "Every Label"; "Everyday Glossy Photo Paper" = "Everyday Glossy Photo Paper"; "Everyday Matte Paper" = "Everyday Matte Paper"; "Executive" = "Executive"; "Expectation Failed" = "Expectation Failed"; "Export Printers to Samba" = "Export Printers to Samba"; "Expressions:" = "Expressions:"; "Extra Heavyweight Paper" = "Extra Heavyweight Paper"; "FAIL" = "FAIL"; "Fabric" = "Fabric"; "Face Down" = "Face Down"; "Face Up" = "Face Up"; "Fast Grayscale" = "Fast Grayscale"; "File \"%s\" contains a relative path." = "File “%s†contains a relative path."; "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." = "File “%s†has insecure permissions (0%o/uid=%d/gid=%d)."; "File \"%s\" is a directory." = "File “%s†is a directory."; "File \"%s\" not available: %s" = "File “%s†not available: %s"; "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." = "File “%s†permissions OK (0%o/uid=%d/gid=%d)."; "File Folder" = "File Folder"; "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\"." = "File device URIs have been disabled. To enable, see the FileDevice directive in “%s/cups-files.confâ€."; "Film" = "Film"; "Fine Envelope" = "Fine Envelope"; "Finished page %d." = "Finished page %d."; "Flexo Base" = "Flexo Base"; "Flexo Photo Polymer" = "Flexo Photo Polymer"; "Flute" = "Flute"; "Foil" = "Foil"; "Fold" = "Fold"; "Folio" = "Folio"; "Forbidden" = "Forbidden"; "Found" = "Found"; "Full Cut Tabs" = "Full Cut Tabs"; "Gate Fold" = "Gate Fold"; "General" = "General"; "Generic" = "Generic"; "Get-Response-PDU uses indefinite length" = "Get-Response-PDU uses indefinite length"; "Glass" = "Glass"; "Glass Colored" = "Glass Colored"; "Glass Opaque" = "Glass Opaque"; "Glass Surfaced" = "Glass Surfaced"; "Glass Textured" = "Glass Textured"; "Glossy Brochure Paper" = "Glossy Brochure Paper"; "Glossy Fabric" = "Glossy Fabric"; "Glossy Labels" = "Glossy Labels"; "Glossy Optical Disc" = "Glossy Optical Disc"; "Glossy Paper" = "Glossy Paper"; "Glossy Photo Paper" = "Glossy Photo Paper"; "Got a printer-uri attribute but no job-id." = "Got a printer-uri attribute but no job-id."; "Gravure Cylinder" = "Gravure Cylinder"; "Grayscale" = "Grayscale"; "HP" = "HP"; "Hagaki" = "Hagaki"; "Half Fold" = "Half Fold"; "Half Z Fold" = "Half Z Fold"; "Hanging Folder" = "Hanging Folder"; "Hash buffer too small." = "Hash buffer too small."; "Heavyweight Coated Paper" = "Heavyweight Coated Paper"; "Heavyweight Envelope" = "Heavyweight Envelope"; "Heavyweight Paper" = "Heavyweight Paper"; "Help file not in index." = "Help file not in index."; "High" = "High"; "High Gloss Fabric" = "High Gloss Fabric"; "High Gloss Labels" = "High Gloss Labels"; "High Gloss Optical Disc" = "High Gloss Optical Disc"; "High Gloss Photo Paper" = "High Gloss Photo Paper"; "IPP 1setOf attribute with incompatible value tags." = "IPP 1setOf attribute with incompatible value tags."; "IPP attribute has no name." = "IPP attribute has no name."; "IPP attribute is not a member of the message." = "IPP attribute is not a member of the message."; "IPP begCollection value not 0 bytes." = "IPP begCollection value not 0 bytes."; "IPP boolean value not 1 byte." = "IPP boolean value not 1 byte."; "IPP date value not 11 bytes." = "IPP date value not 11 bytes."; "IPP endCollection value not 0 bytes." = "IPP endCollection value not 0 bytes."; "IPP enum value not 4 bytes." = "IPP enum value not 4 bytes."; "IPP extension tag larger than 0x7FFFFFFF." = "IPP extension tag larger than 0x7FFFFFFF."; "IPP integer value not 4 bytes." = "IPP integer value not 4 bytes."; "IPP language length overflows value." = "IPP language length overflows value."; "IPP language length too large." = "IPP language length too large."; "IPP member name is not empty." = "IPP member name is not empty."; "IPP memberName value is empty." = "IPP memberName value is empty."; "IPP memberName with no attribute." = "IPP memberName with no attribute."; "IPP name larger than 32767 bytes." = "IPP name larger than 32767 bytes."; "IPP nameWithLanguage value less than minimum 4 bytes." = "IPP nameWithLanguage value less than minimum 4 bytes."; "IPP octetString length too large." = "IPP octetString length too large."; "IPP rangeOfInteger value not 8 bytes." = "IPP rangeOfInteger value not 8 bytes."; "IPP resolution value not 9 bytes." = "IPP resolution value not 9 bytes."; "IPP string length overflows value." = "IPP string length overflows value."; "IPP textWithLanguage value less than minimum 4 bytes." = "IPP textWithLanguage value less than minimum 4 bytes."; "IPP value larger than 32767 bytes." = "IPP value larger than 32767 bytes."; "ISOLatin1" = "ISOLatin1"; "Illegal control character" = "Illegal control character"; "Illegal main keyword string" = "Illegal main keyword string"; "Illegal option keyword string" = "Illegal option keyword string"; "Illegal translation string" = "Illegal translation string"; "Illegal whitespace character" = "Illegal whitespace character"; "Image Setter Paper" = "Image Setter Paper"; "Imaging Cylinder" = "Imaging Cylinder"; "Inkjet Envelope" = "Inkjet Envelope"; "Inkjet Labels" = "Inkjet Labels"; "Inkjet Paper" = "Inkjet Paper"; "Installable Options" = "Installable Options"; "Installed" = "Installed"; "IntelliBar Label Printer" = "IntelliBar Label Printer"; "Intellitech" = "Intellitech"; "Internal Server Error" = "Internal Server Error"; "Internal error" = "Internal error"; "Internet Postage 2-Part" = "Internet Postage 2-Part"; "Internet Postage 3-Part" = "Internet Postage 3-Part"; "Internet Printing Protocol" = "Internet Printing Protocol"; "Invalid media name arguments." = "Invalid media name arguments."; "Invalid media size." = "Invalid media size."; "Invalid ppd-name value." = "Invalid ppd-name value."; "Invalid printer command \"%s\"." = "Invalid printer command “%sâ€."; "JCL" = "JCL"; "JIS B0" = "JIS B0"; "JIS B1" = "JIS B1"; "JIS B10" = "JIS B10"; "JIS B2" = "JIS B2"; "JIS B3" = "JIS B3"; "JIS B4" = "JIS B4"; "JIS B4 Long Edge" = "JIS B4 Long Edge"; "JIS B5" = "JIS B5"; "JIS B5 Long Edge" = "JIS B5 Long Edge"; "JIS B6" = "JIS B6"; "JIS B6 Long Edge" = "JIS B6 Long Edge"; "JIS B7" = "JIS B7"; "JIS B8" = "JIS B8"; "JIS B9" = "JIS B9"; "Job #%d cannot be restarted - no files." = "Job #%d cannot be restarted - no files."; "Job #%d does not exist." = "Job #%d does not exist."; "Job #%d is already aborted - can't cancel." = "Job #%d is already aborted - can’t cancel."; "Job #%d is already canceled - can't cancel." = "Job #%d is already canceled - can’t cancel."; "Job #%d is already completed - can't cancel." = "Job #%d is already completed - can’t cancel."; "Job #%d is finished and cannot be altered." = "Job #%d is finished and cannot be altered."; "Job #%d is not complete." = "Job #%d is not complete."; "Job #%d is not held for authentication." = "Job #%d is not held for authentication."; "Job #%d is not held." = "Job #%d is not held."; "Job Completed" = "Job Completed"; "Job Created" = "Job Created"; "Job Options Changed" = "Job Options Changed"; "Job Stopped" = "Job Stopped"; "Job is completed and cannot be changed." = "Job is completed and cannot be changed."; "Job operation failed" = "Job operation failed"; "Job state cannot be changed." = "Job state cannot be changed."; "Job subscriptions cannot be renewed." = "Job subscriptions cannot be renewed."; "Jobs" = "Jobs"; "Jog" = "Jog"; "LPD/LPR Host or Printer" = "LPD/LPR Host or Printer"; "Label Printer" = "Label Printer"; "Label Top" = "Label Top"; "Labels" = "Labels"; "Laminate" = "Laminate"; "Laminating Foil" = "Laminating Foil"; "Language \"%s\" not supported." = "Language “%s†not supported."; "Large Address" = "Large Address"; "Large Capacity" = "Large Capacity"; "Large Capacity Tray" = "Large Capacity Tray"; "LaserJet Series PCL 4/5" = "LaserJet Series PCL 4/5"; "Left" = "Left"; "Left Gate Fold" = "Left Gate Fold"; "Left Tray" = "Left Tray"; "Letter Fold" = "Letter Fold"; "Letter Oversize" = "Letter Oversize"; "Letter Oversize Long Edge" = "Letter Oversize Long Edge"; "Letterhead" = "Letterhead"; "Light" = "Light"; "Lightweight Envelope" = "Lightweight Envelope"; "Lightweight Paper" = "Lightweight Paper"; "Line longer than the maximum allowed (255 characters)" = "Line longer than the maximum allowed (255 characters)"; "List Available Printers" = "List Available Printers"; "Load paper." = "Load paper."; "Local printer created." = "Local printer created."; "Long-Edge (Portrait)" = "Long-Edge (Portrait)"; "Looking for printer." = "Looking for printer."; "Mailbox 1" = "Mailbox 1"; "Mailbox 10" = "Mailbox 10"; "Mailbox 2" = "Mailbox 2"; "Mailbox 3" = "Mailbox 3"; "Mailbox 4" = "Mailbox 4"; "Mailbox 5" = "Mailbox 5"; "Mailbox 6" = "Mailbox 6"; "Mailbox 7" = "Mailbox 7"; "Mailbox 8" = "Mailbox 8"; "Mailbox 9" = "Mailbox 9"; "Main" = "Main"; "Main Roll" = "Main Roll"; "Manual" = "Manual"; "Manual Feed" = "Manual Feed"; "Matte Brochure Paper" = "Matte Brochure Paper"; "Matte Cover Paper" = "Matte Cover Paper"; "Matte Fabric" = "Matte Fabric"; "Matte Labels" = "Matte Labels"; "Matte Optical Disc" = "Matte Optical Disc"; "Matte Photo Paper" = "Matte Photo Paper"; "Media Size" = "Media Size"; "Media Source" = "Media Source"; "Media Tracking" = "Media Tracking"; "Media Type" = "Media Type"; "Medium" = "Medium"; "Memory allocation error" = "Memory allocation error"; "Metal" = "Metal"; "Metal Glossy" = "Metal Glossy"; "Metal High Gloss" = "Metal High Gloss"; "Metal Matte" = "Metal Matte"; "Metal Satin" = "Metal Satin"; "Metal Semi Gloss" = "Metal Semi Gloss"; "Mid-Weight Paper" = "Mid-Weight Paper"; "Middle" = "Middle"; "Missing CloseGroup" = "Missing CloseGroup"; "Missing PPD-Adobe-4.x header" = "Missing PPD-Adobe-4.x header"; "Missing asterisk in column 1" = "Missing asterisk in column 1"; "Missing document-number attribute." = "Missing document-number attribute."; "Missing double quote on line %d." = "Missing double quote on line %d."; "Missing form variable" = "Missing form variable"; "Missing last-document attribute in request." = "Missing last-document attribute in request."; "Missing media or media-col." = "Missing media or media-col."; "Missing media-size in media-col." = "Missing media-size in media-col."; "Missing notify-subscription-ids attribute." = "Missing notify-subscription-ids attribute."; "Missing option keyword" = "Missing option keyword"; "Missing requesting-user-name attribute." = "Missing requesting-user-name attribute."; "Missing required attribute \"%s\"." = "Missing required attribute “%sâ€."; "Missing required attributes." = "Missing required attributes."; "Missing resource in URI" = "Missing resource in URI"; "Missing scheme in URI" = "Missing scheme in URI"; "Missing value on line %d." = "Missing value on line %d."; "Missing value string" = "Missing value string"; "Missing x-dimension in media-size." = "Missing x-dimension in media-size."; "Missing y-dimension in media-size." = "Missing y-dimension in media-size."; "Model: name = %s\n natural_language = %s\n make-and-model = %s\n device-id = %s" = "Model: name = %s\n natural_language = %s\n make-and-model = %s\n device-id = %s"; "Modifiers:" = "Modifiers:"; "Modify Class" = "Modify Class"; "Modify Printer" = "Modify Printer"; "Mounting Tape" = "Mounting Tape"; "Move All Jobs" = "Move All Jobs"; "Move Job" = "Move Job"; "Moved Permanently" = "Moved Permanently"; "Multi Layer" = "Multi Layer"; "Multi Part Form" = "Multi Part Form"; "Multi-Hole Punch (Landscape)" = "Multi-Hole Punch (Landscape)"; "Multi-Hole Punch (Portrait)" = "Multi-Hole Punch (Portrait)"; "Multi-Hole Punch (Reverse Landscape)" = "Multi-Hole Punch (Reverse Landscape)"; "Multi-Hole Punch (Reverse Portrait)" = "Multi-Hole Punch (Reverse Portrait)"; "Multipurpose" = "Multipurpose"; "Multipurpose Paper" = "Multipurpose Paper"; "My Mailbox" = "My Mailbox"; "NULL PPD file pointer" = "NULL PPD file pointer"; "Name OID uses indefinite length" = "Name OID uses indefinite length"; "Nested classes are not allowed." = "Nested classes are not allowed."; "Never" = "Never"; "New credentials are not valid for name." = "New credentials are not valid for name."; "New credentials are older than stored credentials." = "New credentials are older than stored credentials."; "No" = "No"; "No Content" = "No Content"; "No IPP attributes." = "No IPP attributes."; "No PPD name" = "No PPD name"; "No VarBind SEQUENCE" = "No VarBind SEQUENCE"; "No Windows printer drivers are installed." = "No Windows printer drivers are installed."; "No active connection" = "No active connection"; "No active connection." = "No active connection."; "No active jobs on %s." = "No active jobs on %s."; "No attributes in request." = "No attributes in request."; "No authentication information provided." = "No authentication information provided."; "No common name specified." = "No common name specified."; "No community name" = "No community name"; "No default printer." = "No default printer."; "No destinations added." = "No destinations added."; "No device URI found in argv[0] or in DEVICE_URI environment variable." = "No device URI found in argv[0] or in DEVICE_URI environment variable."; "No error-index" = "No error-index"; "No error-status" = "No error-status"; "No file in print request." = "No file in print request."; "No modification time" = "No modification time"; "No name OID" = "No name OID"; "No pages were found." = "No pages were found."; "No printer name" = "No printer name"; "No printer-uri found" = "No printer-uri found"; "No printer-uri found for class" = "No printer-uri found for class"; "No printer-uri in request." = "No printer-uri in request."; "No request URI." = "No request URI."; "No request protocol version." = "No request protocol version."; "No request sent." = "No request sent."; "No request-id" = "No request-id"; "No stored credentials, not valid for name." = "No stored credentials, not valid for name."; "No subscription attributes in request." = "No subscription attributes in request."; "No subscriptions found." = "No subscriptions found."; "No variable-bindings SEQUENCE" = "No variable-bindings SEQUENCE"; "No version number" = "No version number"; "Non-continuous (Mark sensing)" = "Non-continuous (Mark sensing)"; "Non-continuous (Web sensing)" = "Non-continuous (Web sensing)"; "None" = "None"; "Normal" = "Normal"; "Not Found" = "Not Found"; "Not Implemented" = "Not Implemented"; "Not Installed" = "Not Installed"; "Not Modified" = "Not Modified"; "Not Supported" = "Not Supported"; "Not allowed to print." = "Not allowed to print."; "Note" = "Note"; "Note: this program only validates the DSC comments, not the PostScript itself." = "Note: this program only validates the DSC comments, not the PostScript itself."; "OK" = "OK"; "Off (1-Sided)" = "Off (1-Sided)"; "Office Recycled Paper" = "Office Recycled Paper"; "Oki" = "Oki"; "Online Help" = "Online Help"; "Only local users can create a local printer." = "Only local users can create a local printer."; "Open of %s failed: %s" = "Open of %s failed: %s"; "OpenGroup without a CloseGroup first" = "OpenGroup without a CloseGroup first"; "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" = "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"; "Operation Policy" = "Operation Policy"; "Optical Disc" = "Optical Disc"; "Option \"%s\" cannot be included via %%%%IncludeFeature." = "Option “%s†cannot be included via %%%%IncludeFeature."; "Options Installed" = "Options Installed"; "Options:" = "Options:"; "Other" = "Other"; "Out of date PPD cache file." = "Out of date PPD cache file."; "Out of memory." = "Out of memory."; "Output Mode" = "Output Mode"; "Output bin is almost full." = "Output bin is almost full."; "Output bin is full." = "Output bin is full."; "Output bin is missing." = "Output bin is missing."; "PASS" = "PASS"; "PCL Laser Printer" = "PCL Laser Printer"; "PRC16K" = "PRC16K"; "PRC16K Long Edge" = "PRC16K Long Edge"; "PRC32K" = "PRC32K"; "PRC32K Long Edge" = "PRC32K Long Edge"; "PRC32K Oversize" = "PRC32K Oversize"; "PRC32K Oversize Long Edge" = "PRC32K Oversize Long Edge"; "Packet does not contain a Get-Response-PDU" = "Packet does not contain a Get-Response-PDU"; "Packet does not start with SEQUENCE" = "Packet does not start with SEQUENCE"; "Paper" = "Paper"; "Paper jam." = "Paper jam."; "Paper tray is almost empty." = "Paper tray is almost empty."; "Paper tray is empty." = "Paper tray is empty."; "Paper tray is missing." = "Paper tray is missing."; "Parallel Fold" = "Parallel Fold"; "ParamCustominCutInterval" = "ParamCustominCutInterval"; "ParamCustominTearInterval" = "ParamCustominTearInterval"; "Password for %s on %s? " = "Password for %s on %s? "; "Password for %s required to access %s via SAMBA: " = "Password for %s required to access %s via SAMBA: "; "Pause Class" = "Pause Class"; "Pause Printer" = "Pause Printer"; "Peel-Off" = "Peel-Off"; "Permanent Labels" = "Permanent Labels"; "Photo" = "Photo"; "Photo Film" = "Photo Film"; "Photo Labels" = "Photo Labels"; "Photo Paper" = "Photo Paper"; "Photo Paper Plus Glossy II" = "Photo Paper Plus Glossy II"; "Photo Paper Pro Platinum" = "Photo Paper Pro Platinum"; "Plain Envelope" = "Plain Envelope"; "Plain Paper" = "Plain Paper"; "Plastic" = "Plastic"; "Plastic Archival" = "Plastic Archival"; "Plastic Colored" = "Plastic Colored"; "Plastic Glossy" = "Plastic Glossy"; "Plastic High Gloss" = "Plastic High Gloss"; "Plastic Matte" = "Plastic Matte"; "Plastic Satin" = "Plastic Satin"; "Plastic Semi Gloss" = "Plastic Semi Gloss"; "Plate" = "Plate"; "Policies" = "Policies"; "Polyester" = "Polyester"; "Port Monitor" = "Port Monitor"; "PostScript Printer" = "PostScript Printer"; "Postcard" = "Postcard"; "Postcard Double" = "Postcard Double"; "Postcard Double Long Edge" = "Postcard Double Long Edge"; "Postcard Long Edge" = "Postcard Long Edge"; "Poster Fold" = "Poster Fold"; "Pre Cut Tabs" = "Pre Cut Tabs"; "Premium Inkjet Paper" = "Premium Inkjet Paper"; "Premium Photo Glossy Paper" = "Premium Photo Glossy Paper"; "Premium Presentation Matte Paper" = "Premium Presentation Matte Paper"; "Preparing to print." = "Preparing to print."; "Preprinted Envelope" = "Preprinted Envelope"; "Preprinted Paper" = "Preprinted Paper"; "Print Density" = "Print Density"; "Print Job:" = "Print Job:"; "Print Mode" = "Print Mode"; "Print Quality" = "Print Quality"; "Print Rate" = "Print Rate"; "Print Self-Test Page" = "Print Self-Test Page"; "Print Speed" = "Print Speed"; "Print Test Page" = "Print Test Page"; "Print and Cut" = "Print and Cut"; "Print and Tear" = "Print and Tear"; "Print file sent." = "Print file sent."; "Print job canceled at printer." = "Print job canceled at printer."; "Print job too large." = "Print job too large."; "Print job was not accepted." = "Print job was not accepted."; "Printer \"%s\" already exists." = "Printer “%s†already exists."; "Printer Added" = "Printer Added"; "Printer Default" = "Printer Default"; "Printer Deleted" = "Printer Deleted"; "Printer Modified" = "Printer Modified"; "Printer Paused" = "Printer Paused"; "Printer Settings" = "Printer Settings"; "Printer cannot print supplied content." = "Printer cannot print supplied content."; "Printer cannot print with supplied options." = "Printer cannot print with supplied options."; "Printer does not support required IPP attributes or document formats." = "Printer does not support required IPP attributes or document formats."; "Printer:" = "Printer:"; "Printers" = "Printers"; "Printing page %d, %u%% complete." = "Printing page %d, %u%% complete."; "Punch" = "Punch"; "Punched Paper" = "Punched Paper"; "Quarto" = "Quarto"; "Quota limit reached." = "Quota limit reached."; "Rank Owner Job File(s) Total Size" = "Rank Owner Job File(s) Total Size"; "Rear" = "Rear"; "Rear Tray" = "Rear Tray"; "Reject Jobs" = "Reject Jobs"; "Remote host did not accept control file (%d)." = "Remote host did not accept control file (%d)."; "Remote host did not accept data file (%d)." = "Remote host did not accept data file (%d)."; "Reprint After Error" = "Reprint After Error"; "Request Entity Too Large" = "Request Entity Too Large"; "Resolution" = "Resolution"; "Resume Class" = "Resume Class"; "Resume Printer" = "Resume Printer"; "Return Address" = "Return Address"; "Rewind" = "Rewind"; "Right" = "Right"; "Right Gate Fold" = "Right Gate Fold"; "Right Tray" = "Right Tray"; "Roll" = "Roll"; "Roll 1" = "Roll 1"; "Roll 10" = "Roll 10"; "Roll 2" = "Roll 2"; "Roll 3" = "Roll 3"; "Roll 4" = "Roll 4"; "Roll 5" = "Roll 5"; "Roll 6" = "Roll 6"; "Roll 7" = "Roll 7"; "Roll 8" = "Roll 8"; "Roll 9" = "Roll 9"; "Running command: %s %s -N -A %s -c '%s'" = "Running command: %s %s -N -A %s -c ‘%s’"; "SEQUENCE uses indefinite length" = "SEQUENCE uses indefinite length"; "SSL/TLS Negotiation Error" = "SSL/TLS Negotiation Error"; "Saddle Stitch" = "Saddle Stitch"; "Satin Labels" = "Satin Labels"; "Satin Optical Disc" = "Satin Optical Disc"; "Satin Photo Paper" = "Satin Photo Paper"; "Screen" = "Screen"; "Screen Paged" = "Screen Paged"; "Security Labels" = "Security Labels"; "See Other" = "See Other"; "See remote printer." = "See remote printer."; "Self Adhesive" = "Self Adhesive"; "Self Adhesive Film" = "Self Adhesive Film"; "Self-signed credentials are blocked." = "Self-signed credentials are blocked."; "Semi-Gloss Fabric" = "Semi-Gloss Fabric"; "Semi-Gloss Labels" = "Semi-Gloss Labels"; "Semi-Gloss Optical Disc" = "Semi-Gloss Optical Disc"; "Semi-Gloss Photo Paper" = "Semi-Gloss Photo Paper"; "Sending data to printer." = "Sending data to printer."; "Server Restarted" = "Server Restarted"; "Server Security Auditing" = "Server Security Auditing"; "Server Started" = "Server Started"; "Server Stopped" = "Server Stopped"; "Server credentials not set." = "Server credentials not set."; "Service Unavailable" = "Service Unavailable"; "Set Allowed Users" = "Set Allowed Users"; "Set As Server Default" = "Set As Server Default"; "Set Class Options" = "Set Class Options"; "Set Printer Options" = "Set Printer Options"; "Set Publishing" = "Set Publishing"; "Shipping Address" = "Shipping Address"; "Short-Edge (Landscape)" = "Short-Edge (Landscape)"; "Shrink Foil" = "Shrink Foil"; "Side" = "Side"; "Side Tray" = "Side Tray"; "Single Face" = "Single Face"; "Single Punch (Landscape)" = "Single Punch (Landscape)"; "Single Punch (Portrait)" = "Single Punch (Portrait)"; "Single Punch (Reverse Landscape)" = "Single Punch (Reverse Landscape)"; "Single Punch (Reverse Portrait)" = "Single Punch (Reverse Portrait)"; "Single Staple (Landscape)" = "Single Staple (Landscape)"; "Single Staple (Portrait)" = "Single Staple (Portrait)"; "Single Staple (Reverse Landscape)" = "Single Staple (Reverse Landscape)"; "Single Staple (Reverse Portrait)" = "Single Staple (Reverse Portrait)"; "Single Wall Cardboard" = "Single Wall Cardboard"; "Sleeve" = "Sleeve"; "Special Paper" = "Special Paper"; "Spooling job, %.0f%% complete." = "Spooling job, %.0f%% complete."; "Stacker 1" = "Stacker 1"; "Stacker 10" = "Stacker 10"; "Stacker 2" = "Stacker 2"; "Stacker 3" = "Stacker 3"; "Stacker 4" = "Stacker 4"; "Stacker 5" = "Stacker 5"; "Stacker 6" = "Stacker 6"; "Stacker 7" = "Stacker 7"; "Stacker 8" = "Stacker 8"; "Stacker 9" = "Stacker 9"; "Standard" = "Standard"; "Staple" = "Staple"; "Staple Edge" = "Staple Edge"; "Staple Edge (Landscape)" = "Staple Edge (Landscape)"; "Staple Edge (Portrait)" = "Staple Edge (Portrait)"; "Staple Edge (Reverse Landscape)" = "Staple Edge (Reverse Landscape)"; "Staple Edge (Reverse Portrait)" = "Staple Edge (Reverse Portrait)"; // TRANSLATORS: Banner/cover sheet before the print job. "Starting Banner" = "Starting Banner"; "Starting page %d." = "Starting page %d."; "Statement" = "Statement"; "Subscription #%d does not exist." = "Subscription #%d does not exist."; "Substitutions:" = "Substitutions:"; "Super A" = "Super A"; "Super B" = "Super B"; "Super B/A3" = "Super B/A3"; "Switching Protocols" = "Switching Protocols"; "Tab Stock" = "Tab Stock"; "Tabloid" = "Tabloid"; "Tabloid Oversize" = "Tabloid Oversize"; "Tabloid Oversize Long Edge" = "Tabloid Oversize Long Edge"; "Tear" = "Tear"; "Tear-Off" = "Tear-Off"; "Tear-Off Adjust Position" = "Tear-Off Adjust Position"; "The \"%s\" attribute is required for print jobs." = "The “%s†attribute is required for print jobs."; "The %s attribute cannot be provided with job-ids." = "The %s attribute cannot be provided with job-ids."; "The '%s' Job Status attribute cannot be supplied in a job creation request." = "The ‘%s’ Job Status attribute cannot be supplied in a job creation request."; "The '%s' operation attribute cannot be supplied in a Create-Job request." = "The ‘%s’ operation attribute cannot be supplied in a Create-Job request."; "The PPD file \"%s\" could not be found." = "The PPD file “%s†could not be found."; "The PPD file \"%s\" could not be opened: %s" = "The PPD file “%s†could not be opened: %s"; "The PPD file could not be opened." = "The PPD file could not be opened."; "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)." = "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."; "The developer unit needs to be replaced." = "The developer unit needs to be replaced."; "The developer unit will need to be replaced soon." = "The developer unit will need to be replaced soon."; "The fuser's temperature is high." = "The fuser’s temperature is high."; "The fuser's temperature is low." = "The fuser’s temperature is low."; "The notify-lease-duration attribute cannot be used with job subscriptions." = "The notify-lease-duration attribute cannot be used with job subscriptions."; "The notify-user-data value is too large (%d > 63 octets)." = "The notify-user-data value is too large (%d > 63 octets)."; "The optical photoconductor needs to be replaced." = "The optical photoconductor needs to be replaced."; "The optical photoconductor will need to be replaced soon." = "The optical photoconductor will need to be replaced soon."; "The printer configuration is incorrect or the printer no longer exists." = "The printer configuration is incorrect or the printer no longer exists."; "The printer did not respond." = "The printer did not respond."; "The printer is in use." = "The printer is in use."; "The printer is low on ink." = "The printer is low on ink."; "The printer is low on toner." = "The printer is low on toner."; "The printer is not connected." = "The printer is not connected."; "The printer is not responding." = "The printer is not responding."; "The printer is now connected." = "The printer is now connected."; "The printer is now online." = "The printer is now online."; "The printer is offline." = "The printer is offline."; "The printer is unreachable at this time." = "The printer is unreachable at this time."; "The printer may be out of ink." = "The printer may be out of ink."; "The printer may be out of toner." = "The printer may be out of toner."; "The printer may not exist or is unavailable at this time." = "The printer may not exist or is unavailable at this time."; "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)." = "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."; "The printer or class does not exist." = "The printer or class does not exist."; "The printer or class is not shared." = "The printer or class is not shared."; "The printer's cover is open." = "The printer’s cover is open."; "The printer's door is open." = "The printer’s door is open."; "The printer's interlock is open." = "The printer’s interlock is open."; "The printer's waste bin is almost full." = "The printer’s waste bin is almost full."; "The printer's waste bin is full." = "The printer’s waste bin is full."; "The printer-uri \"%s\" contains invalid characters." = "The printer-uri “%s†contains invalid characters."; "The printer-uri attribute is required." = "The printer-uri attribute is required."; "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." = "The printer-uri must be of the form “ipp://HOSTNAME/classes/CLASSNAMEâ€."; "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." = "The printer-uri must be of the form “ipp://HOSTNAME/printers/PRINTERNAMEâ€."; "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)." = "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."; "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it." = "The web interface is currently disabled. Run “cupsctl WebInterface=yes†to enable it."; "The which-jobs value \"%s\" is not supported." = "The which-jobs value “%s†is not supported."; "There are too many subscriptions." = "There are too many subscriptions."; "There was an unrecoverable USB error." = "There was an unrecoverable USB error."; "Thermal Transfer Media" = "Thermal Transfer Media"; "Too many active jobs." = "Too many active jobs."; "Too many job-sheets values (%d > 2)." = "Too many job-sheets values (%d > 2)."; "Too many printer-state-reasons values (%d > %d)." = "Too many printer-state-reasons values (%d > %d)."; "Top" = "Top"; "Top Tray" = "Top Tray"; "Tractor" = "Tractor"; "Transfer" = "Transfer"; "Transparency" = "Transparency"; "Tray" = "Tray"; "Tray 1" = "Tray 1"; "Tray 10" = "Tray 10"; "Tray 11" = "Tray 11"; "Tray 12" = "Tray 12"; "Tray 13" = "Tray 13"; "Tray 14" = "Tray 14"; "Tray 15" = "Tray 15"; "Tray 16" = "Tray 16"; "Tray 17" = "Tray 17"; "Tray 18" = "Tray 18"; "Tray 19" = "Tray 19"; "Tray 2" = "Tray 2"; "Tray 20" = "Tray 20"; "Tray 3" = "Tray 3"; "Tray 4" = "Tray 4"; "Tray 5" = "Tray 5"; "Tray 6" = "Tray 6"; "Tray 7" = "Tray 7"; "Tray 8" = "Tray 8"; "Tray 9" = "Tray 9"; "Triple Staple (Landscape)" = "Triple Staple (Landscape)"; "Triple Staple (Portrait)" = "Triple Staple (Portrait)"; "Triple Staple (Reverse Landscape)" = "Triple Staple (Reverse Landscape)"; "Triple Staple (Reverse Portrait)" = "Triple Staple (Reverse Portrait)"; "Triple Wall Cardboard" = "Triple Wall Cardboard"; "Trust on first use is disabled." = "Trust on first use is disabled."; "URI Too Long" = "URI Too Long"; "URI too large" = "URI too large"; "US Fanfold" = "US Fanfold"; "US Ledger" = "US Ledger"; "US Legal" = "US Legal"; "US Legal Oversize" = "US Legal Oversize"; "US Letter" = "US Letter"; "US Letter Long Edge" = "US Letter Long Edge"; "US Letter Oversize" = "US Letter Oversize"; "US Letter Oversize Long Edge" = "US Letter Oversize Long Edge"; "US Letter Small" = "US Letter Small"; "Unable to access cupsd.conf file" = "Unable to access cupsd.conf file"; "Unable to access help file." = "Unable to access help file."; "Unable to add RSS subscription" = "Unable to add RSS subscription"; "Unable to add class" = "Unable to add class"; "Unable to add document to print job." = "Unable to add document to print job."; "Unable to add job for destination \"%s\"." = "Unable to add job for destination “%sâ€."; "Unable to add printer" = "Unable to add printer"; "Unable to allocate memory for file types." = "Unable to allocate memory for file types."; "Unable to allocate memory for page info" = "Unable to allocate memory for page info"; "Unable to allocate memory for pages array" = "Unable to allocate memory for pages array"; "Unable to cancel RSS subscription" = "Unable to cancel RSS subscription"; "Unable to cancel print job." = "Unable to cancel print job."; "Unable to change printer" = "Unable to change printer"; "Unable to change printer-is-shared attribute" = "Unable to change printer-is-shared attribute"; "Unable to change server settings" = "Unable to change server settings"; "Unable to compile mimeMediaType regular expression: %s." = "Unable to compile mimeMediaType regular expression: %s."; "Unable to compile naturalLanguage regular expression: %s." = "Unable to compile naturalLanguage regular expression: %s."; "Unable to configure printer options." = "Unable to configure printer options."; "Unable to connect to host." = "Unable to connect to host."; "Unable to contact printer, queuing on next printer in class." = "Unable to contact printer, queuing on next printer in class."; "Unable to copy 64-bit CUPS printer driver files (%d)." = "Unable to copy 64-bit CUPS printer driver files (%d)."; "Unable to copy 64-bit Windows printer driver files (%d)." = "Unable to copy 64-bit Windows printer driver files (%d)."; "Unable to copy CUPS printer driver files (%d)." = "Unable to copy CUPS printer driver files (%d)."; "Unable to copy PPD file - %s" = "Unable to copy PPD file - %s"; "Unable to copy PPD file." = "Unable to copy PPD file."; "Unable to copy Windows 2000 printer driver files (%d)." = "Unable to copy Windows 2000 printer driver files (%d)."; "Unable to copy Windows 9x printer driver files (%d)." = "Unable to copy Windows 9x printer driver files (%d)."; "Unable to create credentials from array." = "Unable to create credentials from array."; "Unable to create printer-uri" = "Unable to create printer-uri"; "Unable to create printer." = "Unable to create printer."; "Unable to create server credentials." = "Unable to create server credentials."; "Unable to create temporary file" = "Unable to create temporary file"; "Unable to delete class" = "Unable to delete class"; "Unable to delete printer" = "Unable to delete printer"; "Unable to do maintenance command" = "Unable to do maintenance command"; "Unable to edit cupsd.conf files larger than 1MB" = "Unable to edit cupsd.conf files larger than 1MB"; "Unable to establish a secure connection to host (certificate chain invalid)." = "Unable to establish a secure connection to host (certificate chain invalid)."; "Unable to establish a secure connection to host (certificate not yet valid)." = "Unable to establish a secure connection to host (certificate not yet valid)."; "Unable to establish a secure connection to host (expired certificate)." = "Unable to establish a secure connection to host (expired certificate)."; "Unable to establish a secure connection to host (host name mismatch)." = "Unable to establish a secure connection to host (host name mismatch)."; "Unable to establish a secure connection to host (peer dropped connection before responding)." = "Unable to establish a secure connection to host (peer dropped connection before responding)."; "Unable to establish a secure connection to host (self-signed certificate)." = "Unable to establish a secure connection to host (self-signed certificate)."; "Unable to establish a secure connection to host (untrusted certificate)." = "Unable to establish a secure connection to host (untrusted certificate)."; "Unable to establish a secure connection to host." = "Unable to establish a secure connection to host."; "Unable to find destination for job" = "Unable to find destination for job"; "Unable to find printer." = "Unable to find printer."; "Unable to find server credentials." = "Unable to find server credentials."; "Unable to get backend exit status." = "Unable to get backend exit status."; "Unable to get class list" = "Unable to get class list"; "Unable to get class status" = "Unable to get class status"; "Unable to get list of printer drivers" = "Unable to get list of printer drivers"; "Unable to get printer attributes" = "Unable to get printer attributes"; "Unable to get printer list" = "Unable to get printer list"; "Unable to get printer status" = "Unable to get printer status"; "Unable to get printer status." = "Unable to get printer status."; "Unable to install Windows 2000 printer driver files (%d)." = "Unable to install Windows 2000 printer driver files (%d)."; "Unable to install Windows 9x printer driver files (%d)." = "Unable to install Windows 9x printer driver files (%d)."; "Unable to load help index." = "Unable to load help index."; "Unable to locate printer \"%s\"." = "Unable to locate printer “%sâ€."; "Unable to locate printer." = "Unable to locate printer."; "Unable to modify class" = "Unable to modify class"; "Unable to modify printer" = "Unable to modify printer"; "Unable to move job" = "Unable to move job"; "Unable to move jobs" = "Unable to move jobs"; "Unable to open PPD file" = "Unable to open PPD file"; "Unable to open cupsd.conf file:" = "Unable to open cupsd.conf file:"; "Unable to open device file" = "Unable to open device file"; "Unable to open document #%d in job #%d." = "Unable to open document #%d in job #%d."; "Unable to open help file." = "Unable to open help file."; "Unable to open print file" = "Unable to open print file"; "Unable to open raster file" = "Unable to open raster file"; "Unable to print test page" = "Unable to print test page"; "Unable to read print data." = "Unable to read print data."; "Unable to rename job document file." = "Unable to rename job document file."; "Unable to resolve printer-uri." = "Unable to resolve printer-uri."; "Unable to run \"%s\": %s" = "Unable to run “%sâ€: %s"; "Unable to see in file" = "Unable to see in file"; "Unable to send command to printer driver" = "Unable to send command to printer driver"; "Unable to send data to printer." = "Unable to send data to printer."; "Unable to set Windows printer driver (%d)." = "Unable to set Windows printer driver (%d)."; "Unable to set options" = "Unable to set options"; "Unable to set server default" = "Unable to set server default"; "Unable to start backend process." = "Unable to start backend process."; "Unable to upload cupsd.conf file" = "Unable to upload cupsd.conf file"; "Unable to use legacy USB class driver." = "Unable to use legacy USB class driver."; "Unable to write print data" = "Unable to write print data"; "Unable to write uncompressed print data: %s" = "Unable to write uncompressed print data: %s"; "Unauthorized" = "Unauthorized"; "Units" = "Units"; "Unknown" = "Unknown"; "Unknown choice \"%s\" for option \"%s\"." = "Unknown choice “%s†for option “%sâ€."; "Unknown encryption option value: \"%s\"." = "Unknown encryption option value: “%sâ€."; "Unknown file order: \"%s\"." = "Unknown file order: “%sâ€."; "Unknown format character: \"%c\"." = "Unknown format character: “%câ€."; "Unknown hash algorithm." = "Unknown hash algorithm."; "Unknown media size name." = "Unknown media size name."; "Unknown option \"%s\" with value \"%s\"." = "Unknown option “%s†with value “%sâ€."; "Unknown option \"%s\"." = "Unknown option “%sâ€."; "Unknown print mode: \"%s\"." = "Unknown print mode: “%sâ€."; "Unknown printer-error-policy \"%s\"." = "Unknown printer-error-policy “%sâ€."; "Unknown printer-op-policy \"%s\"." = "Unknown printer-op-policy “%sâ€."; "Unknown request method." = "Unknown request method."; "Unknown request version." = "Unknown request version."; "Unknown scheme in URI" = "Unknown scheme in URI"; "Unknown service name." = "Unknown service name."; "Unknown version option value: \"%s\"." = "Unknown version option value: “%sâ€."; "Unsupported 'compression' value \"%s\"." = "Unsupported ‘compression’ value “%sâ€."; "Unsupported 'document-format' value \"%s\"." = "Unsupported ‘document-format’ value “%sâ€."; "Unsupported 'job-name' value." = "Unsupported ‘job-name’ value."; "Unsupported character set \"%s\"." = "Unsupported character set “%sâ€."; "Unsupported compression \"%s\"." = "Unsupported compression “%sâ€."; "Unsupported document-format \"%s\"." = "Unsupported document-format “%sâ€."; "Unsupported document-format \"%s/%s\"." = "Unsupported document-format “%s/%sâ€."; "Unsupported format \"%s\"." = "Unsupported format “%sâ€."; "Unsupported margins." = "Unsupported margins."; "Unsupported media value." = "Unsupported media value."; "Unsupported number-up value %d, using number-up=1." = "Unsupported number-up value %d, using number-up=1."; "Unsupported number-up-layout value %s, using number-up-layout=lrtb." = "Unsupported number-up-layout value %s, using number-up-layout=lrtb."; "Unsupported page-border value %s, using page-border=none." = "Unsupported page-border value %s, using page-border=none."; "Unsupported raster data." = "Unsupported raster data."; "Unsupported value type" = "Unsupported value type"; "Upgrade Required" = "Upgrade Required"; "Usage:\n\n lpadmin [-h server] -d destination\n lpadmin [-h server] -x destination\n lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n [-r remove-class] [-v device] [-D description]\n [-P ppd-file] [-o name=value]\n [-u allow:user,user] [-u deny:user,user]" = "Usage:\n\n lpadmin [-h server] -d destination\n lpadmin [-h server] -x destination\n lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n [-r remove-class] [-v device] [-D description]\n [-P ppd-file] [-o name=value]\n [-u allow:user,user] [-u deny:user,user]"; "Usage: %s job-id user title copies options [file]" = "Usage: %s job-id user title copies options [file]"; "Usage: cupsaddsmb [options] printer1 ... printerN" = "Usage: cupsaddsmb [options] printer1 … printerN"; "Usage: cupsctl [options] [param=value ... paramN=valueN]" = "Usage: cupsctl [options] [param=value … paramN=valueN]"; "Usage: cupsd [options]" = "Usage: cupsd [options]"; "Usage: cupsfilter [ options ] [ -- ] filename" = "Usage: cupsfilter [ options ] [ -- ] filename"; "Usage: cupstestdsc [options] filename.ps [... filename.ps]" = "Usage: cupstestdsc [options] filename.ps [… filename.ps]"; "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" = "Usage: cupstestppd [options] filename1.ppd[.gz] [… filenameN.ppd[.gz]]"; "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n ippfind [options] name[.regtype[.domain.]] ... [expression]\n ippfind --help\n ippfind --version" = "Usage: ippfind [options] regtype[,subtype][.domain.] … [expression]\n ippfind [options] name[.regtype[.domain.]] … [expression]\n ippfind --help\n ippfind --version"; "Usage: ipptool [options] URI filename [ ... filenameN ]" = "Usage: ipptool [options] URI filename [ … filenameN ]"; "Usage: lpmove job/src dest" = "Usage: lpmove job/src dest"; "Usage: lpoptions [-h server] [-E] -d printer\n lpoptions [-h server] [-E] [-p printer] -l\n lpoptions [-h server] [-E] -p printer -o option[=value] ...\n lpoptions [-h server] [-E] -x printer" = "Usage: lpoptions [-h server] [-E] -d printer\n lpoptions [-h server] [-E] [-p printer] -l\n lpoptions [-h server] [-E] -p printer -o option[=value] …\n lpoptions [-h server] [-E] -x printer"; "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" = "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]"; "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" = "Usage: ppdc [options] filename.drv [ … filenameN.drv ]"; "Usage: ppdhtml [options] filename.drv >filename.html" = "Usage: ppdhtml [options] filename.drv >filename.html"; "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" = "Usage: ppdi [options] filename.ppd [ … filenameN.ppd ]"; "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" = "Usage: ppdmerge [options] filename.ppd [ … filenameN.ppd ]"; "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" = "Usage: ppdpo [options] -o filename.po filename.drv [ … filenameN.drv ]"; "Usage: snmp [host-or-ip-address]" = "Usage: snmp [host-or-ip-address]"; "Value uses indefinite length" = "Value uses indefinite length"; "VarBind uses indefinite length" = "VarBind uses indefinite length"; "Vellum Paper" = "Vellum Paper"; "Version uses indefinite length" = "Version uses indefinite length"; "Waiting for job to complete." = "Waiting for job to complete."; "Waiting for printer to become available." = "Waiting for printer to become available."; "Waiting for printer to finish." = "Waiting for printer to finish."; "Warning, no Windows 2000 printer drivers are installed." = "Warning, no Windows 2000 printer drivers are installed."; "Waterproof Fabric" = "Waterproof Fabric"; "Web Interface is Disabled" = "Web Interface is Disabled"; "Wet Film" = "Wet Film"; "Windowed Envelope" = "Windowed Envelope"; "Yes" = "Yes"; "You must access this page using the URL https://%s:%d%s." = "You must access this page using the URL https://%s:%d%s."; "Z Fold" = "Z Fold"; "ZPL Label Printer" = "ZPL Label Printer"; "Zebra" = "Zebra"; "aborted" = "aborted"; "canceled" = "canceled"; "completed" = "completed"; "cups-deviced failed to execute." = "cups-deviced failed to execute."; "cups-driverd failed to execute." = "cups-driverd failed to execute."; "cupsaddsmb: No PPD file for printer \"%s\" - %s" = "cupsaddsmb: No PPD file for printer “%s†- %s"; "cupsctl: Cannot set Listen or Port directly." = "cupsctl: Cannot set Listen or Port directly."; "cupsctl: Unable to connect to server: %s" = "cupsctl: Unable to connect to server: %s"; "cupsctl: Unknown option \"%s\"" = "cupsctl: Unknown option “%sâ€"; "cupsctl: Unknown option \"-%c\"" = "cupsctl: Unknown option “-%câ€"; "cupsd: Expected config filename after \"-c\" option." = "cupsd: Expected config filename after “-c†option."; "cupsd: Expected cups-files.conf filename after \"-s\" option." = "cupsd: Expected cups-files.conf filename after “-s†option."; "cupsd: On-demand support not compiled in, running in normal mode." = "cupsd: On-demand support not compiled in, running in normal mode."; "cupsd: Relative cups-files.conf filename not allowed." = "cupsd: Relative cups-files.conf filename not allowed."; "cupsd: Unable to get current directory." = "cupsd: Unable to get current directory."; "cupsd: Unable to get path to cups-files.conf file." = "cupsd: Unable to get path to cups-files.conf file."; "cupsd: Unknown argument \"%s\" - aborting." = "cupsd: Unknown argument “%s†- aborting."; "cupsd: Unknown option \"%c\" - aborting." = "cupsd: Unknown option “%c†- aborting."; "cupsfilter: Invalid document number %d." = "cupsfilter: Invalid document number %d."; "cupsfilter: Invalid job ID %d." = "cupsfilter: Invalid job ID %d."; "cupsfilter: Only one filename can be specified." = "cupsfilter: Only one filename can be specified."; "cupsfilter: Unable to get job file - %s" = "cupsfilter: Unable to get job file - %s"; "cupstestppd: The -q option is incompatible with the -v option." = "cupstestppd: The -q option is incompatible with the -v option."; "cupstestppd: The -v option is incompatible with the -q option." = "cupstestppd: The -v option is incompatible with the -q option."; "device for %s/%s: %s" = "device for %s/%s: %s"; "device for %s: %s" = "device for %s: %s"; "error-index uses indefinite length" = "error-index uses indefinite length"; "error-status uses indefinite length" = "error-status uses indefinite length"; "held" = "held"; "help\t\tGet help on commands." = "help\t\tGet help on commands."; "idle" = "idle"; "ippfind: Bad regular expression: %s" = "ippfind: Bad regular expression: %s"; "ippfind: Cannot use --and after --or." = "ippfind: Cannot use --and after --or."; "ippfind: Expected key name after %s." = "ippfind: Expected key name after %s."; "ippfind: Expected port range after %s." = "ippfind: Expected port range after %s."; "ippfind: Expected program after %s." = "ippfind: Expected program after %s."; "ippfind: Expected semi-colon after %s." = "ippfind: Expected semi-colon after %s."; "ippfind: Missing close brace in substitution." = "ippfind: Missing close brace in substitution."; "ippfind: Missing close parenthesis." = "ippfind: Missing close parenthesis."; "ippfind: Missing expression before \"--and\"." = "ippfind: Missing expression before “--andâ€."; "ippfind: Missing expression before \"--or\"." = "ippfind: Missing expression before “--orâ€."; "ippfind: Missing key name after %s." = "ippfind: Missing key name after %s."; "ippfind: Missing open parenthesis." = "ippfind: Missing open parenthesis."; "ippfind: Missing program after %s." = "ippfind: Missing program after %s."; "ippfind: Missing regular expression after %s." = "ippfind: Missing regular expression after %s."; "ippfind: Missing semi-colon after %s." = "ippfind: Missing semi-colon after %s."; "ippfind: Out of memory." = "ippfind: Out of memory."; "ippfind: Too many parenthesis." = "ippfind: Too many parenthesis."; "ippfind: Unable to browse or resolve: %s" = "ippfind: Unable to browse or resolve: %s"; "ippfind: Unable to execute \"%s\": %s" = "ippfind: Unable to execute “%sâ€: %s"; "ippfind: Unable to use Bonjour: %s" = "ippfind: Unable to use Bonjour: %s"; "ippfind: Unknown variable \"{%s}\"." = "ippfind: Unknown variable “{%s}â€."; "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." = "ipptool: “-i†and “-n†are incompatible with “-P†and “-Xâ€."; "ipptool: Bad URI - %s." = "ipptool: Bad URI - %s."; "ipptool: Invalid seconds for \"-i\"." = "ipptool: Invalid seconds for “-iâ€."; "ipptool: May only specify a single URI." = "ipptool: May only specify a single URI."; "ipptool: Missing count for \"-n\"." = "ipptool: Missing count for “-nâ€."; "ipptool: Missing filename for \"-f\"." = "ipptool: Missing filename for “-fâ€."; "ipptool: Missing name=value for \"-d\"." = "ipptool: Missing name=value for “-dâ€."; "ipptool: Missing seconds for \"-i\"." = "ipptool: Missing seconds for “-iâ€."; "ipptool: URI required before test file." = "ipptool: URI required before test file."; "ipptool: Unknown option \"-%c\"." = "ipptool: Unknown option “-%câ€."; "job-printer-uri attribute missing." = "job-printer-uri attribute missing."; "lpadmin: Class name can only contain printable characters." = "lpadmin: Class name can only contain printable characters."; "lpadmin: Expected PPD after \"-%c\" option." = "lpadmin: Expected PPD after “-%c†option."; "lpadmin: Expected allow/deny:userlist after \"-u\" option." = "lpadmin: Expected allow/deny:userlist after “-u†option."; "lpadmin: Expected class after \"-r\" option." = "lpadmin: Expected class after “-r†option."; "lpadmin: Expected class name after \"-c\" option." = "lpadmin: Expected class name after “-c†option."; "lpadmin: Expected description after \"-D\" option." = "lpadmin: Expected description after “-D†option."; "lpadmin: Expected device URI after \"-v\" option." = "lpadmin: Expected device URI after “-v†option."; "lpadmin: Expected file type(s) after \"-I\" option." = "lpadmin: Expected file type(s) after “-I†option."; "lpadmin: Expected hostname after \"-h\" option." = "lpadmin: Expected hostname after “-h†option."; "lpadmin: Expected location after \"-L\" option." = "lpadmin: Expected location after “-L†option."; "lpadmin: Expected model after \"-m\" option." = "lpadmin: Expected model after “-m†option."; "lpadmin: Expected name after \"-R\" option." = "lpadmin: Expected name after “-R†option."; "lpadmin: Expected name=value after \"-o\" option." = "lpadmin: Expected name=value after “-o†option."; "lpadmin: Expected printer after \"-p\" option." = "lpadmin: Expected printer after “-p†option."; "lpadmin: Expected printer name after \"-d\" option." = "lpadmin: Expected printer name after “-d†option."; "lpadmin: Expected printer or class after \"-x\" option." = "lpadmin: Expected printer or class after “-x†option."; "lpadmin: No member names were seen." = "lpadmin: No member names were seen."; "lpadmin: Printer %s is already a member of class %s." = "lpadmin: Printer %s is already a member of class %s."; "lpadmin: Printer %s is not a member of class %s." = "lpadmin: Printer %s is not a member of class %s."; "lpadmin: Printer name can only contain printable characters." = "lpadmin: Printer name can only contain printable characters."; "lpadmin: Raw queues are deprecated and will stop working in a future version of CUPS." = "lpadmin: Raw queues are deprecated and will stop working in a future version of CUPS."; "lpadmin: System V interface scripts are no longer supported for security reasons." = "lpadmin: System V interface scripts are no longer supported for security reasons."; "lpadmin: Unable to add a printer to the class:\n You must specify a printer name first." = "lpadmin: Unable to add a printer to the class:\n You must specify a printer name first."; "lpadmin: Unable to connect to server: %s" = "lpadmin: Unable to connect to server: %s"; "lpadmin: Unable to create temporary file" = "lpadmin: Unable to create temporary file"; "lpadmin: Unable to delete option:\n You must specify a printer name first." = "lpadmin: Unable to delete option:\n You must specify a printer name first."; "lpadmin: Unable to open PPD \"%s\": %s on line %d." = "lpadmin: Unable to open PPD “%sâ€: %s on line %d."; "lpadmin: Unable to open PPD file \"%s\" - %s" = "lpadmin: Unable to open PPD file “%s†- %s"; "lpadmin: Unable to remove a printer from the class:\n You must specify a printer name first." = "lpadmin: Unable to remove a printer from the class:\n You must specify a printer name first."; "lpadmin: Unable to set the printer options:\n You must specify a printer name first." = "lpadmin: Unable to set the printer options:\n You must specify a printer name first."; "lpadmin: Unknown allow/deny option \"%s\"." = "lpadmin: Unknown allow/deny option “%sâ€."; "lpadmin: Unknown argument \"%s\"." = "lpadmin: Unknown argument “%sâ€."; "lpadmin: Unknown option \"%c\"." = "lpadmin: Unknown option “%câ€."; "lpadmin: Use the 'everywhere' model for shared printers." = "lpadmin: Use the ‘everywhere’ model for shared printers."; "lpadmin: Warning - content type list ignored." = "lpadmin: Warning - content type list ignored."; "lpc> " = "lpc> "; "lpinfo: Expected 1284 device ID string after \"--device-id\"." = "lpinfo: Expected 1284 device ID string after “--device-idâ€."; "lpinfo: Expected language after \"--language\"." = "lpinfo: Expected language after “--languageâ€."; "lpinfo: Expected make and model after \"--make-and-model\"." = "lpinfo: Expected make and model after “--make-and-modelâ€."; "lpinfo: Expected product string after \"--product\"." = "lpinfo: Expected product string after “--productâ€."; "lpinfo: Expected scheme list after \"--exclude-schemes\"." = "lpinfo: Expected scheme list after “--exclude-schemesâ€."; "lpinfo: Expected scheme list after \"--include-schemes\"." = "lpinfo: Expected scheme list after “--include-schemesâ€."; "lpinfo: Expected timeout after \"--timeout\"." = "lpinfo: Expected timeout after “--timeoutâ€."; "lpmove: Unable to connect to server: %s" = "lpmove: Unable to connect to server: %s"; "lpmove: Unknown argument \"%s\"." = "lpmove: Unknown argument “%sâ€."; "lpoptions: No printers." = "lpoptions: No printers."; "lpoptions: Unable to add printer or instance: %s" = "lpoptions: Unable to add printer or instance: %s"; "lpoptions: Unable to get PPD file for %s: %s" = "lpoptions: Unable to get PPD file for %s: %s"; "lpoptions: Unable to open PPD file for %s." = "lpoptions: Unable to open PPD file for %s."; "lpoptions: Unknown printer or class." = "lpoptions: Unknown printer or class."; "lpstat: error - %s environment variable names non-existent destination \"%s\"." = "lpstat: error - %s environment variable names non-existent destination “%sâ€."; "members of class %s:" = "members of class %s:"; "no entries" = "no entries"; "no system default destination" = "no system default destination"; "notify-events not specified." = "notify-events not specified."; "notify-recipient-uri URI \"%s\" is already used." = "notify-recipient-uri URI “%s†is already used."; "notify-recipient-uri URI \"%s\" uses unknown scheme." = "notify-recipient-uri URI “%s†uses unknown scheme."; "pending" = "pending"; "ppdc: Adding include directory \"%s\"." = "ppdc: Adding include directory “%sâ€."; "ppdc: Adding/updating UI text from %s." = "ppdc: Adding/updating UI text from %s."; "ppdc: Bad boolean value (%s) on line %d of %s." = "ppdc: Bad boolean value (%s) on line %d of %s."; "ppdc: Bad font attribute: %s" = "ppdc: Bad font attribute: %s"; "ppdc: Bad resolution name \"%s\" on line %d of %s." = "ppdc: Bad resolution name “%s†on line %d of %s."; "ppdc: Bad status keyword %s on line %d of %s." = "ppdc: Bad status keyword %s on line %d of %s."; "ppdc: Bad variable substitution ($%c) on line %d of %s." = "ppdc: Bad variable substitution ($%c) on line %d of %s."; "ppdc: Choice found on line %d of %s with no Option." = "ppdc: Choice found on line %d of %s with no Option."; "ppdc: Duplicate #po for locale %s on line %d of %s." = "ppdc: Duplicate #po for locale %s on line %d of %s."; "ppdc: Expected a filter definition on line %d of %s." = "ppdc: Expected a filter definition on line %d of %s."; "ppdc: Expected a program name on line %d of %s." = "ppdc: Expected a program name on line %d of %s."; "ppdc: Expected boolean value on line %d of %s." = "ppdc: Expected boolean value on line %d of %s."; "ppdc: Expected charset after Font on line %d of %s." = "ppdc: Expected charset after Font on line %d of %s."; "ppdc: Expected choice code on line %d of %s." = "ppdc: Expected choice code on line %d of %s."; "ppdc: Expected choice name/text on line %d of %s." = "ppdc: Expected choice name/text on line %d of %s."; "ppdc: Expected color order for ColorModel on line %d of %s." = "ppdc: Expected color order for ColorModel on line %d of %s."; "ppdc: Expected colorspace for ColorModel on line %d of %s." = "ppdc: Expected colorspace for ColorModel on line %d of %s."; "ppdc: Expected compression for ColorModel on line %d of %s." = "ppdc: Expected compression for ColorModel on line %d of %s."; "ppdc: Expected constraints string for UIConstraints on line %d of %s." = "ppdc: Expected constraints string for UIConstraints on line %d of %s."; "ppdc: Expected driver type keyword following DriverType on line %d of %s." = "ppdc: Expected driver type keyword following DriverType on line %d of %s."; "ppdc: Expected duplex type after Duplex on line %d of %s." = "ppdc: Expected duplex type after Duplex on line %d of %s."; "ppdc: Expected encoding after Font on line %d of %s." = "ppdc: Expected encoding after Font on line %d of %s."; "ppdc: Expected filename after #po %s on line %d of %s." = "ppdc: Expected filename after #po %s on line %d of %s."; "ppdc: Expected group name/text on line %d of %s." = "ppdc: Expected group name/text on line %d of %s."; "ppdc: Expected include filename on line %d of %s." = "ppdc: Expected include filename on line %d of %s."; "ppdc: Expected integer on line %d of %s." = "ppdc: Expected integer on line %d of %s."; "ppdc: Expected locale after #po on line %d of %s." = "ppdc: Expected locale after #po on line %d of %s."; "ppdc: Expected name after %s on line %d of %s." = "ppdc: Expected name after %s on line %d of %s."; "ppdc: Expected name after FileName on line %d of %s." = "ppdc: Expected name after FileName on line %d of %s."; "ppdc: Expected name after Font on line %d of %s." = "ppdc: Expected name after Font on line %d of %s."; "ppdc: Expected name after Manufacturer on line %d of %s." = "ppdc: Expected name after Manufacturer on line %d of %s."; "ppdc: Expected name after MediaSize on line %d of %s." = "ppdc: Expected name after MediaSize on line %d of %s."; "ppdc: Expected name after ModelName on line %d of %s." = "ppdc: Expected name after ModelName on line %d of %s."; "ppdc: Expected name after PCFileName on line %d of %s." = "ppdc: Expected name after PCFileName on line %d of %s."; "ppdc: Expected name/text after %s on line %d of %s." = "ppdc: Expected name/text after %s on line %d of %s."; "ppdc: Expected name/text after Installable on line %d of %s." = "ppdc: Expected name/text after Installable on line %d of %s."; "ppdc: Expected name/text after Resolution on line %d of %s." = "ppdc: Expected name/text after Resolution on line %d of %s."; "ppdc: Expected name/text combination for ColorModel on line %d of %s." = "ppdc: Expected name/text combination for ColorModel on line %d of %s."; "ppdc: Expected option name/text on line %d of %s." = "ppdc: Expected option name/text on line %d of %s."; "ppdc: Expected option section on line %d of %s." = "ppdc: Expected option section on line %d of %s."; "ppdc: Expected option type on line %d of %s." = "ppdc: Expected option type on line %d of %s."; "ppdc: Expected override field after Resolution on line %d of %s." = "ppdc: Expected override field after Resolution on line %d of %s."; "ppdc: Expected quoted string on line %d of %s." = "ppdc: Expected quoted string on line %d of %s."; "ppdc: Expected real number on line %d of %s." = "ppdc: Expected real number on line %d of %s."; "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s." = "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s."; "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d of %s." = "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d of %s."; "ppdc: Expected selector after %s on line %d of %s." = "ppdc: Expected selector after %s on line %d of %s."; "ppdc: Expected status after Font on line %d of %s." = "ppdc: Expected status after Font on line %d of %s."; "ppdc: Expected string after Copyright on line %d of %s." = "ppdc: Expected string after Copyright on line %d of %s."; "ppdc: Expected string after Version on line %d of %s." = "ppdc: Expected string after Version on line %d of %s."; "ppdc: Expected two option names on line %d of %s." = "ppdc: Expected two option names on line %d of %s."; "ppdc: Expected value after %s on line %d of %s." = "ppdc: Expected value after %s on line %d of %s."; "ppdc: Expected version after Font on line %d of %s." = "ppdc: Expected version after Font on line %d of %s."; "ppdc: Invalid #include/#po filename \"%s\"." = "ppdc: Invalid #include/#po filename “%sâ€."; "ppdc: Invalid cost for filter on line %d of %s." = "ppdc: Invalid cost for filter on line %d of %s."; "ppdc: Invalid empty MIME type for filter on line %d of %s." = "ppdc: Invalid empty MIME type for filter on line %d of %s."; "ppdc: Invalid empty program name for filter on line %d of %s." = "ppdc: Invalid empty program name for filter on line %d of %s."; "ppdc: Invalid option section \"%s\" on line %d of %s." = "ppdc: Invalid option section “%s†on line %d of %s."; "ppdc: Invalid option type \"%s\" on line %d of %s." = "ppdc: Invalid option type “%s†on line %d of %s."; "ppdc: Loading driver information file \"%s\"." = "ppdc: Loading driver information file “%sâ€."; "ppdc: Loading messages for locale \"%s\"." = "ppdc: Loading messages for locale “%sâ€."; "ppdc: Loading messages from \"%s\"." = "ppdc: Loading messages from “%sâ€."; "ppdc: Missing #endif at end of \"%s\"." = "ppdc: Missing #endif at end of “%sâ€."; "ppdc: Missing #if on line %d of %s." = "ppdc: Missing #if on line %d of %s."; "ppdc: Need a msgid line before any translation strings on line %d of %s." = "ppdc: Need a msgid line before any translation strings on line %d of %s."; "ppdc: No message catalog provided for locale %s." = "ppdc: No message catalog provided for locale %s."; "ppdc: Option %s defined in two different groups on line %d of %s." = "ppdc: Option %s defined in two different groups on line %d of %s."; "ppdc: Option %s redefined with a different type on line %d of %s." = "ppdc: Option %s redefined with a different type on line %d of %s."; "ppdc: Option constraint must *name on line %d of %s." = "ppdc: Option constraint must *name on line %d of %s."; "ppdc: Too many nested #if's on line %d of %s." = "ppdc: Too many nested #if’s on line %d of %s."; "ppdc: Unable to create PPD file \"%s\" - %s." = "ppdc: Unable to create PPD file “%s†- %s."; "ppdc: Unable to create output directory %s: %s" = "ppdc: Unable to create output directory %s: %s"; "ppdc: Unable to create output pipes: %s" = "ppdc: Unable to create output pipes: %s"; "ppdc: Unable to execute cupstestppd: %s" = "ppdc: Unable to execute cupstestppd: %s"; "ppdc: Unable to find #po file %s on line %d of %s." = "ppdc: Unable to find #po file %s on line %d of %s."; "ppdc: Unable to find include file \"%s\" on line %d of %s." = "ppdc: Unable to find include file “%s†on line %d of %s."; "ppdc: Unable to find localization for \"%s\" - %s" = "ppdc: Unable to find localization for “%s†- %s"; "ppdc: Unable to load localization file \"%s\" - %s" = "ppdc: Unable to load localization file “%s†- %s"; "ppdc: Unable to open %s: %s" = "ppdc: Unable to open %s: %s"; "ppdc: Undefined variable (%s) on line %d of %s." = "ppdc: Undefined variable (%s) on line %d of %s."; "ppdc: Unexpected text on line %d of %s." = "ppdc: Unexpected text on line %d of %s."; "ppdc: Unknown driver type %s on line %d of %s." = "ppdc: Unknown driver type %s on line %d of %s."; "ppdc: Unknown duplex type \"%s\" on line %d of %s." = "ppdc: Unknown duplex type “%s†on line %d of %s."; "ppdc: Unknown media size \"%s\" on line %d of %s." = "ppdc: Unknown media size “%s†on line %d of %s."; "ppdc: Unknown message catalog format for \"%s\"." = "ppdc: Unknown message catalog format for “%sâ€."; "ppdc: Unknown token \"%s\" seen on line %d of %s." = "ppdc: Unknown token “%s†seen on line %d of %s."; "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." = "ppdc: Unknown trailing characters in real number “%s†on line %d of %s."; "ppdc: Unterminated string starting with %c on line %d of %s." = "ppdc: Unterminated string starting with %c on line %d of %s."; "ppdc: Warning - overlapping filename \"%s\"." = "ppdc: Warning - overlapping filename “%sâ€."; "ppdc: Writing %s." = "ppdc: Writing %s."; "ppdc: Writing PPD files to directory \"%s\"." = "ppdc: Writing PPD files to directory “%sâ€."; "ppdmerge: Bad LanguageVersion \"%s\" in %s." = "ppdmerge: Bad LanguageVersion “%s†in %s."; "ppdmerge: Ignoring PPD file %s." = "ppdmerge: Ignoring PPD file %s."; "ppdmerge: Unable to backup %s to %s - %s" = "ppdmerge: Unable to backup %s to %s - %s"; "printer %s disabled since %s -" = "printer %s disabled since %s -"; "printer %s is idle. enabled since %s" = "printer %s is idle. enabled since %s"; "printer %s now printing %s-%d. enabled since %s" = "printer %s now printing %s-%d. enabled since %s"; "printer %s/%s disabled since %s -" = "printer %s/%s disabled since %s -"; "printer %s/%s is idle. enabled since %s" = "printer %s/%s is idle. enabled since %s"; "printer %s/%s now printing %s-%d. enabled since %s" = "printer %s/%s now printing %s-%d. enabled since %s"; "processing" = "processing"; "request id is %s-%d (%d file(s))" = "request id is %s-%d (%d file(s))"; "request-id uses indefinite length" = "request-id uses indefinite length"; "scheduler is not running" = "scheduler is not running"; "scheduler is running" = "scheduler is running"; "stat of %s failed: %s" = "stat of %s failed: %s"; "status\t\tShow status of daemon and queue." = "status\t\tShow status of daemon and queue."; "stopped" = "stopped"; "system default destination: %s" = "system default destination: %s"; "system default destination: %s/%s" = "system default destination: %s/%s"; "unknown" = "unknown"; "untitled" = "untitled"; "variable-bindings uses indefinite length" = "variable-bindings uses indefinite length"; "accuracy-units" = "Accuracy Units"; "accuracy-units.mm" = "Millimeters"; "accuracy-units.nm" = "Nanometers"; "accuracy-units.um" = "Micrometers"; "baling" = "Bale Output"; "baling-type" = "Bale Using"; "baling-type.band" = "Band"; "baling-type.shrink-wrap" = "Shrink Wrap"; "baling-type.wrap" = "Wrap"; "baling-when" = "Bale After"; "baling-when.after-job" = "Job"; "baling-when.after-sets" = "Sets"; "binding" = "Bind Output"; "binding-reference-edge" = "Bind Edge"; "binding-reference-edge.bottom" = "Bottom"; "binding-reference-edge.left" = "Left"; "binding-reference-edge.right" = "Right"; "binding-reference-edge.top" = "Top"; "binding-type" = "Binder Type"; "binding-type.adhesive" = "Adhesive"; "binding-type.comb" = "Comb"; "binding-type.flat" = "Flat"; "binding-type.padding" = "Padding"; "binding-type.perfect" = "Perfect"; "binding-type.spiral" = "Spiral"; "binding-type.tape" = "Tape"; "binding-type.velo" = "Velo"; "charge-info-message" = "Print Job Cost"; "coating" = "Coat Sheets"; "coating-sides" = "Add Coating To"; "coating-sides.back" = "Back"; "coating-sides.both" = "Front and Back"; "coating-sides.front" = "Front"; "coating-type" = "Type of Coating"; "coating-type.archival" = "Archival"; "coating-type.archival-glossy" = "Archival Glossy"; "coating-type.archival-matte" = "Archival Matte"; "coating-type.archival-semi-gloss" = "Archival Semi Gloss"; "coating-type.glossy" = "Glossy"; "coating-type.high-gloss" = "High Gloss"; "coating-type.matte" = "Matte"; "coating-type.semi-gloss" = "Semi-gloss"; "coating-type.silicone" = "Silicone"; "coating-type.translucent" = "Translucent"; "confirmation-sheet-print" = "Print Confirmation Sheet"; "copies" = "Copies"; "cover-back" = "Back Cover"; "cover-front" = "Front Cover"; "cover-sheet-info" = "Cover Sheet Info"; "cover-sheet-info-supported.date-time" = "Date Time"; "cover-sheet-info-supported.from-name" = "From Name"; "cover-sheet-info-supported.logo" = "Logo"; "cover-sheet-info-supported.message" = "Message"; "cover-sheet-info-supported.organization" = "Organization"; "cover-sheet-info-supported.subject" = "Subject"; "cover-sheet-info-supported.to-name" = "To Name"; "cover-type" = "Printed Cover"; "cover-type.no-cover" = "No Cover"; "cover-type.print-back" = "Back Only"; "cover-type.print-both" = "Front and Back"; "cover-type.print-front" = "Front Only"; "cover-type.print-none" = "None"; "covering" = "Cover Output"; "covering-name" = "Add Cover"; "covering-name.plain" = "Plain"; "covering-name.pre-cut" = "Pre-cut"; "covering-name.pre-printed" = "Pre-printed"; "detailed-status-message" = "Detailed Status Message"; "document-copies" = "Copies"; "document-state" = "Document State"; "document-state-reasons" = "Detailed Document State"; "document-state-reasons.aborted-by-system" = "Aborted By System"; "document-state-reasons.canceled-at-device" = "Canceled At Device"; "document-state-reasons.canceled-by-operator" = "Canceled By Operator"; "document-state-reasons.canceled-by-user" = "Canceled By User"; "document-state-reasons.completed-successfully" = "Completed Successfully"; "document-state-reasons.completed-with-errors" = "Completed With Errors"; "document-state-reasons.completed-with-warnings" = "Completed With Warnings"; "document-state-reasons.compression-error" = "Compression Error"; "document-state-reasons.data-insufficient" = "Data Insufficient"; "document-state-reasons.digital-signature-did-not-verify" = "Digital Signature Did Not Verify"; "document-state-reasons.digital-signature-type-not-supported" = "Digital Signature Type Not Supported"; "document-state-reasons.digital-signature-wait" = "Digital Signature Wait"; "document-state-reasons.document-access-error" = "Document Access Error"; "document-state-reasons.document-fetchable" = "Document Fetchable"; "document-state-reasons.document-format-error" = "Document Format Error"; "document-state-reasons.document-password-error" = "Document Password Error"; "document-state-reasons.document-permission-error" = "Document Permission Error"; "document-state-reasons.document-security-error" = "Document Security Error"; "document-state-reasons.document-unprintable-error" = "Document Unprintable Error"; "document-state-reasons.errors-detected" = "Errors Detected"; "document-state-reasons.incoming" = "Incoming"; "document-state-reasons.interpreting" = "Interpreting"; "document-state-reasons.none" = "None"; "document-state-reasons.outgoing" = "Outgoing"; "document-state-reasons.printing" = "Printing"; "document-state-reasons.processing-to-stop-point" = "Processing To Stop Point"; "document-state-reasons.queued" = "Queued"; "document-state-reasons.queued-for-marker" = "Queued For Marker"; "document-state-reasons.queued-in-device" = "Queued In Device"; "document-state-reasons.resources-are-not-ready" = "Resources Are Not Ready"; "document-state-reasons.resources-are-not-supported" = "Resources Are Not Supported"; "document-state-reasons.submission-interrupted" = "Submission Interrupted"; "document-state-reasons.transforming" = "Transforming"; "document-state-reasons.unsupported-compression" = "Unsupported Compression"; "document-state-reasons.unsupported-document-format" = "Unsupported Document Format"; "document-state-reasons.warnings-detected" = "Warnings Detected"; "document-state.3" = "Pending"; "document-state.5" = "Processing"; "document-state.6" = "Stopped"; "document-state.7" = "Canceled"; "document-state.8" = "Aborted"; "document-state.9" = "Completed"; "feed-orientation" = "Feed Orientation"; "feed-orientation.long-edge-first" = "Long Edge First"; "feed-orientation.short-edge-first" = "Short Edge First"; "fetch-status-code" = "Fetch Status Code"; "finishing-template" = "Finishing Template"; "finishing-template.bale" = "Bale"; "finishing-template.bind" = "Bind"; "finishing-template.bind-bottom" = "Bind Bottom"; "finishing-template.bind-left" = "Bind Left"; "finishing-template.bind-right" = "Bind Right"; "finishing-template.bind-top" = "Bind Top"; "finishing-template.booklet-maker" = "Booklet Maker"; "finishing-template.coat" = "Coat"; "finishing-template.cover" = "Cover"; "finishing-template.edge-stitch" = "Edge Stitch"; "finishing-template.edge-stitch-bottom" = "Edge Stitch Bottom"; "finishing-template.edge-stitch-left" = "Edge Stitch Left"; "finishing-template.edge-stitch-right" = "Edge Stitch Right"; "finishing-template.edge-stitch-top" = "Edge Stitch Top"; "finishing-template.fold" = "Fold"; "finishing-template.fold-accordion" = "Accordion Fold"; "finishing-template.fold-double-gate" = "Double Gate Fold"; "finishing-template.fold-engineering-z" = "Engineering Z Fold"; "finishing-template.fold-gate" = "Gate Fold"; "finishing-template.fold-half" = "Half Fold"; "finishing-template.fold-half-z" = "Half Z Fold"; "finishing-template.fold-left-gate" = "Left Gate Fold"; "finishing-template.fold-letter" = "Letter Fold"; "finishing-template.fold-parallel" = "Parallel Fold"; "finishing-template.fold-poster" = "Poster Fold"; "finishing-template.fold-right-gate" = "Right Gate Fold"; "finishing-template.fold-z" = "Z Fold"; "finishing-template.jdf-f10-1" = "JDF Fold F10-1"; "finishing-template.jdf-f10-2" = "JDF Fold F10-2"; "finishing-template.jdf-f10-3" = "JDF Fold F10-3"; "finishing-template.jdf-f12-1" = "JDF Fold F12-1"; "finishing-template.jdf-f12-10" = "JDF Fold F12-10"; "finishing-template.jdf-f12-11" = "JDF Fold F12-11"; "finishing-template.jdf-f12-12" = "JDF Fold F12-12"; "finishing-template.jdf-f12-13" = "JDF Fold F12-13"; "finishing-template.jdf-f12-14" = "JDF Fold F12-14"; "finishing-template.jdf-f12-2" = "JDF Fold F12-2"; "finishing-template.jdf-f12-3" = "JDF Fold F12-3"; "finishing-template.jdf-f12-4" = "JDF Fold F12-4"; "finishing-template.jdf-f12-5" = "JDF Fold F12-5"; "finishing-template.jdf-f12-6" = "JDF Fold F12-6"; "finishing-template.jdf-f12-7" = "JDF Fold F12-7"; "finishing-template.jdf-f12-8" = "JDF Fold F12-8"; "finishing-template.jdf-f12-9" = "JDF Fold F12-9"; "finishing-template.jdf-f14-1" = "JDF Fold F14-1"; "finishing-template.jdf-f16-1" = "JDF Fold F16-1"; "finishing-template.jdf-f16-10" = "JDF Fold F16-10"; "finishing-template.jdf-f16-11" = "JDF Fold F16-11"; "finishing-template.jdf-f16-12" = "JDF Fold F16-12"; "finishing-template.jdf-f16-13" = "JDF Fold F16-13"; "finishing-template.jdf-f16-14" = "JDF Fold F16-14"; "finishing-template.jdf-f16-2" = "JDF Fold F16-2"; "finishing-template.jdf-f16-3" = "JDF Fold F16-3"; "finishing-template.jdf-f16-4" = "JDF Fold F16-4"; "finishing-template.jdf-f16-5" = "JDF Fold F16-5"; "finishing-template.jdf-f16-6" = "JDF Fold F16-6"; "finishing-template.jdf-f16-7" = "JDF Fold F16-7"; "finishing-template.jdf-f16-8" = "JDF Fold F16-8"; "finishing-template.jdf-f16-9" = "JDF Fold F16-9"; "finishing-template.jdf-f18-1" = "JDF Fold F18-1"; "finishing-template.jdf-f18-2" = "JDF Fold F18-2"; "finishing-template.jdf-f18-3" = "JDF Fold F18-3"; "finishing-template.jdf-f18-4" = "JDF Fold F18-4"; "finishing-template.jdf-f18-5" = "JDF Fold F18-5"; "finishing-template.jdf-f18-6" = "JDF Fold F18-6"; "finishing-template.jdf-f18-7" = "JDF Fold F18-7"; "finishing-template.jdf-f18-8" = "JDF Fold F18-8"; "finishing-template.jdf-f18-9" = "JDF Fold F18-9"; "finishing-template.jdf-f2-1" = "JDF Fold F2-1"; "finishing-template.jdf-f20-1" = "JDF Fold F20-1"; "finishing-template.jdf-f20-2" = "JDF Fold F20-2"; "finishing-template.jdf-f24-1" = "JDF Fold F24-1"; "finishing-template.jdf-f24-10" = "JDF Fold F24-10"; "finishing-template.jdf-f24-11" = "JDF Fold F24-11"; "finishing-template.jdf-f24-2" = "JDF Fold F24-2"; "finishing-template.jdf-f24-3" = "JDF Fold F24-3"; "finishing-template.jdf-f24-4" = "JDF Fold F24-4"; "finishing-template.jdf-f24-5" = "JDF Fold F24-5"; "finishing-template.jdf-f24-6" = "JDF Fold F24-6"; "finishing-template.jdf-f24-7" = "JDF Fold F24-7"; "finishing-template.jdf-f24-8" = "JDF Fold F24-8"; "finishing-template.jdf-f24-9" = "JDF Fold F24-9"; "finishing-template.jdf-f28-1" = "JDF Fold F28-1"; "finishing-template.jdf-f32-1" = "JDF Fold F32-1"; "finishing-template.jdf-f32-2" = "JDF Fold F32-2"; "finishing-template.jdf-f32-3" = "JDF Fold F32-3"; "finishing-template.jdf-f32-4" = "JDF Fold F32-4"; "finishing-template.jdf-f32-5" = "JDF Fold F32-5"; "finishing-template.jdf-f32-6" = "JDF Fold F32-6"; "finishing-template.jdf-f32-7" = "JDF Fold F32-7"; "finishing-template.jdf-f32-8" = "JDF Fold F32-8"; "finishing-template.jdf-f32-9" = "JDF Fold F32-9"; "finishing-template.jdf-f36-1" = "JDF Fold F36-1"; "finishing-template.jdf-f36-2" = "JDF Fold F36-2"; "finishing-template.jdf-f4-1" = "JDF Fold F4-1"; "finishing-template.jdf-f4-2" = "JDF Fold F4-2"; "finishing-template.jdf-f40-1" = "JDF Fold F40-1"; "finishing-template.jdf-f48-1" = "JDF Fold F48-1"; "finishing-template.jdf-f48-2" = "JDF Fold F48-2"; "finishing-template.jdf-f6-1" = "JDF Fold F6-1"; "finishing-template.jdf-f6-2" = "JDF Fold F6-2"; "finishing-template.jdf-f6-3" = "JDF Fold F6-3"; "finishing-template.jdf-f6-4" = "JDF Fold F6-4"; "finishing-template.jdf-f6-5" = "JDF Fold F6-5"; "finishing-template.jdf-f6-6" = "JDF Fold F6-6"; "finishing-template.jdf-f6-7" = "JDF Fold F6-7"; "finishing-template.jdf-f6-8" = "JDF Fold F6-8"; "finishing-template.jdf-f64-1" = "JDF Fold F64-1"; "finishing-template.jdf-f64-2" = "JDF Fold F64-2"; "finishing-template.jdf-f8-1" = "JDF Fold F8-1"; "finishing-template.jdf-f8-2" = "JDF Fold F8-2"; "finishing-template.jdf-f8-3" = "JDF Fold F8-3"; "finishing-template.jdf-f8-4" = "JDF Fold F8-4"; "finishing-template.jdf-f8-5" = "JDF Fold F8-5"; "finishing-template.jdf-f8-6" = "JDF Fold F8-6"; "finishing-template.jdf-f8-7" = "JDF Fold F8-7"; "finishing-template.jog-offset" = "Jog Offset"; "finishing-template.laminate" = "Laminate"; "finishing-template.punch" = "Punch"; "finishing-template.punch-bottom-left" = "Punch Bottom Left"; "finishing-template.punch-bottom-right" = "Punch Bottom Right"; "finishing-template.punch-dual-bottom" = "2-hole Punch Bottom"; "finishing-template.punch-dual-left" = "2-hole Punch Left"; "finishing-template.punch-dual-right" = "2-hole Punch Right"; "finishing-template.punch-dual-top" = "2-hole Punch Top"; "finishing-template.punch-multiple-bottom" = "Multi-hole Punch Bottom"; "finishing-template.punch-multiple-left" = "Multi-hole Punch Left"; "finishing-template.punch-multiple-right" = "Multi-hole Punch Right"; "finishing-template.punch-multiple-top" = "Multi-hole Punch Top"; "finishing-template.punch-quad-bottom" = "4-hole Punch Bottom"; "finishing-template.punch-quad-left" = "4-hole Punch Left"; "finishing-template.punch-quad-right" = "4-hole Punch Right"; "finishing-template.punch-quad-top" = "4-hole Punch Top"; "finishing-template.punch-top-left" = "Punch Top Left"; "finishing-template.punch-top-right" = "Punch Top Right"; "finishing-template.punch-triple-bottom" = "3-hole Punch Bottom"; "finishing-template.punch-triple-left" = "3-hole Punch Left"; "finishing-template.punch-triple-right" = "3-hole Punch Right"; "finishing-template.punch-triple-top" = "3-hole Punch Top"; "finishing-template.saddle-stitch" = "Saddle Stitch"; "finishing-template.staple" = "Staple"; "finishing-template.staple-bottom-left" = "Staple Bottom Left"; "finishing-template.staple-bottom-right" = "Staple Bottom Right"; "finishing-template.staple-dual-bottom" = "2 Staples on Bottom"; "finishing-template.staple-dual-left" = "2 Staples on Left"; "finishing-template.staple-dual-right" = "2 Staples on Right"; "finishing-template.staple-dual-top" = "2 Staples on Top"; "finishing-template.staple-top-left" = "Staple Top Left"; "finishing-template.staple-top-right" = "Staple Top Right"; "finishing-template.staple-triple-bottom" = "3 Staples on Bottom"; "finishing-template.staple-triple-left" = "3 Staples on Left"; "finishing-template.staple-triple-right" = "3 Staples on Right"; "finishing-template.staple-triple-top" = "3 Staples on Top"; "finishing-template.trim" = "Trim"; "finishing-template.trim-after-copies" = "Trim After Every Set"; "finishing-template.trim-after-documents" = "Trim After Every Document"; "finishing-template.trim-after-job" = "Trim After Job"; "finishing-template.trim-after-pages" = "Trim After Every Page"; "finishings" = "Finishings"; "finishings-col" = "Finishings"; "finishings.10" = "Fold"; "finishings.100" = "Z Fold"; "finishings.101" = "Engineering Z Fold"; "finishings.11" = "Trim"; "finishings.12" = "Bale"; "finishings.13" = "Booklet Maker"; "finishings.14" = "Jog Offset"; "finishings.15" = "Coat"; "finishings.16" = "Laminate"; "finishings.20" = "Staple Top Left"; "finishings.21" = "Staple Bottom Left"; "finishings.22" = "Staple Top Right"; "finishings.23" = "Staple Bottom Right"; "finishings.24" = "Edge Stitch Left"; "finishings.25" = "Edge Stitch Top"; "finishings.26" = "Edge Stitch Right"; "finishings.27" = "Edge Stitch Bottom"; "finishings.28" = "2 Staples on Left"; "finishings.29" = "2 Staples on Top"; "finishings.3" = "None"; "finishings.30" = "2 Staples on Right"; "finishings.31" = "2 Staples on Bottom"; "finishings.32" = "3 Staples on Left"; "finishings.33" = "3 Staples on Top"; "finishings.34" = "3 Staples on Right"; "finishings.35" = "3 Staples on Bottom"; "finishings.4" = "Staple"; "finishings.5" = "Punch"; "finishings.50" = "Bind Left"; "finishings.51" = "Bind Top"; "finishings.52" = "Bind Right"; "finishings.53" = "Bind Bottom"; "finishings.6" = "Cover"; "finishings.60" = "Trim Pages"; "finishings.61" = "Trim Documents"; "finishings.62" = "Trim Copies"; "finishings.63" = "Trim Job"; "finishings.7" = "Bind"; "finishings.70" = "Punch Top Left"; "finishings.71" = "Punch Bottom Left"; "finishings.72" = "Punch Top Right"; "finishings.73" = "Punch Bottom Right"; "finishings.74" = "2-hole Punch Left"; "finishings.75" = "2-hole Punch Top"; "finishings.76" = "2-hole Punch Right"; "finishings.77" = "2-hole Punch Bottom"; "finishings.78" = "3-hole Punch Left"; "finishings.79" = "3-hole Punch Top"; "finishings.8" = "Saddle Stitch"; "finishings.80" = "3-hole Punch Right"; "finishings.81" = "3-hole Punch Bottom"; "finishings.82" = "4-hole Punch Left"; "finishings.83" = "4-hole Punch Top"; "finishings.84" = "4-hole Punch Right"; "finishings.85" = "4-hole Punch Bottom"; "finishings.86" = "Multi-hole Punch Left"; "finishings.87" = "Multi-hole Punch Top"; "finishings.88" = "Multi-hole Punch Right"; "finishings.89" = "Multi-hole Punch Bottom"; "finishings.9" = "Edge Stitch"; "finishings.90" = "Accordion Fold"; "finishings.91" = "Double Gate Fold"; "finishings.92" = "Gate Fold"; "finishings.93" = "Half Fold"; "finishings.94" = "Half Z Fold"; "finishings.95" = "Left Gate Fold"; "finishings.96" = "Letter Fold"; "finishings.97" = "Parallel Fold"; "finishings.98" = "Poster Fold"; "finishings.99" = "Right Gate Fold"; "folding" = "Fold"; "folding-direction" = "Fold Direction"; "folding-direction.inward" = "Inward"; "folding-direction.outward" = "Outward"; "folding-offset" = "Fold Position"; "folding-reference-edge" = "Fold Edge"; "folding-reference-edge.bottom" = "Bottom"; "folding-reference-edge.left" = "Left"; "folding-reference-edge.right" = "Right"; "folding-reference-edge.top" = "Top"; "font-name-requested" = "Font Name"; "font-size-requested" = "Font Size"; "force-front-side" = "Force Front Side"; "from-name" = "From Name"; "imposition-template" = "Imposition Template"; "imposition-template.none" = "None"; "imposition-template.signature" = "Signature"; "input-attributes" = "Scanner Options"; "input-auto-scaling" = "Scan Auto Scaling"; "input-auto-skew-correction" = "Scan Auto Skew Correction"; "input-brightness" = "Scan Brightness"; "input-color-mode" = "Scanning Mode"; "input-color-mode.auto" = "Automatic"; "input-color-mode.bi-level" = "Text"; "input-color-mode.cmyk_16" = "16-bit CMYK"; "input-color-mode.cmyk_8" = "8-bit CMYK"; "input-color-mode.color" = "Color"; "input-color-mode.color_8" = "8-bit Color"; "input-color-mode.monochrome" = "Monochrome"; "input-color-mode.monochrome_16" = "16-bit Monochrome"; "input-color-mode.monochrome_4" = "4-bit Monochrome"; "input-color-mode.monochrome_8" = "8-bit Monochrome"; "input-color-mode.rgb_16" = "16-bit RGB"; "input-color-mode.rgba_16" = "16-bit RGBA"; "input-color-mode.rgba_8" = "8-bit RGBA"; "input-content-type" = "Scan Content"; "input-content-type.auto" = "Automatic"; "input-content-type.halftone" = "Halftone"; "input-content-type.line-art" = "Line Art"; "input-content-type.magazine" = "Magazine"; "input-content-type.photo" = "Photo"; "input-content-type.text" = "Text"; "input-content-type.text-and-photo" = "Text And Photo"; "input-contrast" = "Scan Contrast"; "input-film-scan-mode" = "Film Type"; "input-film-scan-mode.black-and-white-negative-film" = "Black And White Negative Film"; "input-film-scan-mode.color-negative-film" = "Color Negative Film"; "input-film-scan-mode.color-slide-film" = "Color Slide Film"; "input-film-scan-mode.not-applicable" = "Not Applicable"; "input-images-to-transfer" = "Scan Images To Transfer"; "input-media" = "Scan Media"; "input-media.auto" = "Automatic"; "input-orientation-requested" = "Scan Orientation"; "input-quality" = "Scan Quality"; "input-resolution" = "Scan Resolution"; "input-scaling-height" = "Scan Scaling Height"; "input-scaling-width" = "Scan Scaling Width"; "input-scan-regions" = "Scan Regions"; "input-sharpness" = "Scan Sharpness"; "input-sides" = "2-Sided Scanning"; "input-source" = "Scan Source"; "input-source.adf" = "Automatic Document Feeder"; "input-source.film-reader" = "Film Reader"; "input-source.platen" = "Platen"; "insert-after-page-number" = "Insert Page Number"; "insert-count" = "Insert Count"; "insert-sheet" = "Insert Sheet"; "job-account-id" = "Job Account ID"; "job-account-type" = "Job Account Type"; "job-account-type.general" = "General"; "job-account-type.group" = "Group"; "job-account-type.none" = "None"; "job-accounting-output-bin" = "Job Accounting Output Bin"; "job-accounting-sheets" = "Job Accounting Sheets"; "job-accounting-sheets-type" = "Type of Job Accounting Sheets"; "job-accounting-sheets-type.none" = "None"; "job-accounting-sheets-type.standard" = "Standard"; "job-accounting-user-id" = "Job Accounting User ID"; "job-collation-type" = "Collate Copies"; "job-collation-type.3" = "Uncollated Sheets"; "job-collation-type.4" = "Collated Documents"; "job-collation-type.5" = "Uncollated Documents"; "job-copies" = "Copies"; "job-cover-back" = "Back Cover"; "job-cover-front" = "Front Cover"; "job-delay-output-until" = "Delay Output Until"; "job-delay-output-until-time" = "Delay Output Until"; "job-delay-output-until.day-time" = "Daytime"; "job-delay-output-until.evening" = "Evening"; "job-delay-output-until.indefinite" = "Released"; "job-delay-output-until.night" = "Night"; "job-delay-output-until.no-delay-output" = "No Delay"; "job-delay-output-until.second-shift" = "Second Shift"; "job-delay-output-until.third-shift" = "Third Shift"; "job-delay-output-until.weekend" = "Weekend"; "job-error-action" = "On Error"; "job-error-action.abort-job" = "Abort Job"; "job-error-action.cancel-job" = "Cancel Job"; "job-error-action.continue-job" = "Continue Job"; "job-error-action.suspend-job" = "Suspend Job"; "job-error-sheet" = "Print Error Sheet"; "job-error-sheet-type" = "Type of Error Sheet"; "job-error-sheet-type.none" = "None"; "job-error-sheet-type.standard" = "Standard"; "job-error-sheet-when" = "Print Error Sheet"; "job-error-sheet-when.always" = "Always"; "job-error-sheet-when.on-error" = "On Error"; "job-finishings" = "Job Finishings"; "job-hold-until" = "Hold Until"; "job-hold-until-time" = "Hold Until"; "job-hold-until.day-time" = "Daytime"; "job-hold-until.evening" = "Evening"; "job-hold-until.indefinite" = "Released"; "job-hold-until.night" = "Night"; "job-hold-until.no-hold" = "No Hold"; "job-hold-until.second-shift" = "Second Shift"; "job-hold-until.third-shift" = "Third Shift"; "job-hold-until.weekend" = "Weekend"; "job-mandatory-attributes" = "Job Mandatory Attributes"; "job-name" = "Title"; "job-phone-number" = "Job Phone Number"; "job-priority" = "Job Priority"; "job-recipient-name" = "Job Recipient Name"; "job-save-disposition" = "Job Save Disposition"; "job-sheet-message" = "Job Sheet Message"; "job-sheets" = "Banner Page"; "job-sheets-col" = "Banner Page"; "job-sheets.first-print-stream-page" = "First Page in Document"; "job-sheets.job-both-sheet" = "Start and End Sheets"; "job-sheets.job-end-sheet" = "End Sheet"; "job-sheets.job-start-sheet" = "Start Sheet"; "job-sheets.none" = "None"; "job-sheets.standard" = "Standard"; "job-state" = "Job State"; "job-state-message" = "Job State Message"; "job-state-reasons" = "Detailed Job State"; "job-state-reasons.aborted-by-system" = "Aborted By System"; "job-state-reasons.account-authorization-failed" = "Account Authorization Failed"; "job-state-reasons.account-closed" = "Account Closed"; "job-state-reasons.account-info-needed" = "Account Info Needed"; "job-state-reasons.account-limit-reached" = "Account Limit Reached"; "job-state-reasons.compression-error" = "Compression Error"; "job-state-reasons.conflicting-attributes" = "Conflicting Attributes"; "job-state-reasons.connected-to-destination" = "Connected To Destination"; "job-state-reasons.connecting-to-destination" = "Connecting To Destination"; "job-state-reasons.destination-uri-failed" = "Destination Uri Failed"; "job-state-reasons.digital-signature-did-not-verify" = "Digital Signature Did Not Verify"; "job-state-reasons.digital-signature-type-not-supported" = "Digital Signature Type Not Supported"; "job-state-reasons.document-access-error" = "Document Access Error"; "job-state-reasons.document-format-error" = "Document Format Error"; "job-state-reasons.document-password-error" = "Document Password Error"; "job-state-reasons.document-permission-error" = "Document Permission Error"; "job-state-reasons.document-security-error" = "Document Security Error"; "job-state-reasons.document-unprintable-error" = "Document Unprintable Error"; "job-state-reasons.errors-detected" = "Errors Detected"; "job-state-reasons.job-canceled-at-device" = "Job Canceled At Device"; "job-state-reasons.job-canceled-by-operator" = "Job Canceled By Operator"; "job-state-reasons.job-canceled-by-user" = "Job Canceled By User"; "job-state-reasons.job-completed-successfully" = "Job Completed Successfully"; "job-state-reasons.job-completed-with-errors" = "Job Completed With Errors"; "job-state-reasons.job-completed-with-warnings" = "Job Completed With Warnings"; "job-state-reasons.job-data-insufficient" = "Job Data Insufficient"; "job-state-reasons.job-delay-output-until-specified" = "Job Delay Output Until Specified"; "job-state-reasons.job-digital-signature-wait" = "Job Digital Signature Wait"; "job-state-reasons.job-fetchable" = "Job Fetchable"; "job-state-reasons.job-held-for-review" = "Job Held For Review"; "job-state-reasons.job-hold-until-specified" = "Job Hold Until Specified"; "job-state-reasons.job-incoming" = "Job Incoming"; "job-state-reasons.job-interpreting" = "Job Interpreting"; "job-state-reasons.job-outgoing" = "Job Outgoing"; "job-state-reasons.job-password-wait" = "Job Password Wait"; "job-state-reasons.job-printed-successfully" = "Job Printed Successfully"; "job-state-reasons.job-printed-with-errors" = "Job Printed With Errors"; "job-state-reasons.job-printed-with-warnings" = "Job Printed With Warnings"; "job-state-reasons.job-printing" = "Job Printing"; "job-state-reasons.job-queued" = "Job Queued"; "job-state-reasons.job-queued-for-marker" = "Job Queued For Marker"; "job-state-reasons.job-release-wait" = "Job Release Wait"; "job-state-reasons.job-restartable" = "Job Restartable"; "job-state-reasons.job-resuming" = "Job Resuming"; "job-state-reasons.job-saved-successfully" = "Job Saved Successfully"; "job-state-reasons.job-saved-with-errors" = "Job Saved With Errors"; "job-state-reasons.job-saved-with-warnings" = "Job Saved With Warnings"; "job-state-reasons.job-saving" = "Job Saving"; "job-state-reasons.job-spooling" = "Job Spooling"; "job-state-reasons.job-streaming" = "Job Streaming"; "job-state-reasons.job-suspended" = "Job Suspended"; "job-state-reasons.job-suspended-by-operator" = "Job Suspended By Operator"; "job-state-reasons.job-suspended-by-system" = "Job Suspended By System"; "job-state-reasons.job-suspended-by-user" = "Job Suspended By User"; "job-state-reasons.job-suspending" = "Job Suspending"; "job-state-reasons.job-transferring" = "Job Transferring"; "job-state-reasons.job-transforming" = "Job Transforming"; "job-state-reasons.none" = "None"; "job-state-reasons.printer-stopped" = "Printer Stopped"; "job-state-reasons.printer-stopped-partly" = "Printer Stopped Partly"; "job-state-reasons.processing-to-stop-point" = "Processing To Stop Point"; "job-state-reasons.queued-in-device" = "Queued In Device"; "job-state-reasons.resources-are-not-ready" = "Resources Are Not Ready"; "job-state-reasons.resources-are-not-supported" = "Resources Are Not Supported"; "job-state-reasons.service-off-line" = "Service Off Line"; "job-state-reasons.submission-interrupted" = "Submission Interrupted"; "job-state-reasons.unsupported-attributes-or-values" = "Unsupported Attributes Or Values"; "job-state-reasons.unsupported-compression" = "Unsupported Compression"; "job-state-reasons.unsupported-document-format" = "Unsupported Document Format"; "job-state-reasons.waiting-for-user-action" = "Waiting For User Action"; "job-state-reasons.warnings-detected" = "Warnings Detected"; "job-state.3" = "Pending"; "job-state.4" = "Held"; "job-state.5" = "Processing"; "job-state.6" = "Stopped"; "job-state.7" = "Canceled"; "job-state.8" = "Aborted"; "job-state.9" = "Completed"; "laminating" = "Laminate Pages"; "laminating-sides" = "Laminate"; "laminating-sides.back" = "Back Only"; "laminating-sides.both" = "Front and Back"; "laminating-sides.front" = "Front Only"; "laminating-type" = "Type of Lamination"; "laminating-type.archival" = "Archival"; "laminating-type.glossy" = "Glossy"; "laminating-type.high-gloss" = "High Gloss"; "laminating-type.matte" = "Matte"; "laminating-type.semi-gloss" = "Semi-gloss"; "laminating-type.translucent" = "Translucent"; "logo" = "Logo"; "material-amount" = "Amount of Material"; "material-amount-units" = "Amount Units"; "material-amount-units.g" = "Grams"; "material-amount-units.kg" = "Kilograms"; "material-amount-units.l" = "Liters"; "material-amount-units.m" = "Meters"; "material-amount-units.ml" = "Milliliters"; "material-amount-units.mm" = "Millimeters"; "material-color" = "Material Color"; "material-diameter" = "Material Diameter"; "material-diameter-tolerance" = "Material Diameter Tolerance"; "material-fill-density" = "Material Fill Density"; "material-name" = "Material Name"; "material-purpose" = "Use Material For"; "material-purpose.all" = "Everything"; "material-purpose.base" = "Base"; "material-purpose.in-fill" = "In-fill"; "material-purpose.shell" = "Shell"; "material-purpose.support" = "Supports"; "material-rate" = "Feed Rate"; "material-rate-units" = "Feed Rate Units"; "material-rate-units.mg_second" = "Milligrams per second"; "material-rate-units.ml_second" = "Milliliters per second"; "material-rate-units.mm_second" = "Millimeters per second"; "material-shell-thickness" = "Material Shell Thickness"; "material-temperature" = "Material Temperature"; "material-type" = "Material Type"; "material-type.abs" = "ABS"; "material-type.abs-carbon-fiber" = "Carbon Fiber ABS"; "material-type.abs-carbon-nanotube" = "Carbon Nanotube ABS"; "material-type.chocolate" = "Chocolate"; "material-type.gold" = "Gold"; "material-type.nylon" = "Nylon"; "material-type.pet" = "Pet"; "material-type.photopolymer" = "Photopolymer"; "material-type.pla" = "PLA"; "material-type.pla-conductive" = "Conductive PLA"; "material-type.pla-flexible" = "Flexible PLA"; "material-type.pla-magnetic" = "Magnetic PLA"; "material-type.pla-steel" = "Steel PLA"; "material-type.pla-stone" = "Stone PLA"; "material-type.pla-wood" = "Wood PLA"; "material-type.polycarbonate" = "Polycarbonate"; "material-type.pva-dissolvable" = "Dissolvable PVA"; "material-type.silver" = "Silver"; "material-type.titanium" = "Titanium"; "material-type.wax" = "Wax"; "materials-col" = "Materials"; "media" = "Media"; "media-back-coating" = "Back Coating of Media"; "media-back-coating.glossy" = "Glossy"; "media-back-coating.high-gloss" = "High Gloss"; "media-back-coating.matte" = "Matte"; "media-back-coating.none" = "None"; "media-back-coating.satin" = "Satin"; "media-back-coating.semi-gloss" = "Semi-gloss"; "media-bottom-margin" = "Media Bottom Margin"; "media-col" = "Media"; "media-color" = "Media Color"; "media-color.black" = "Black"; "media-color.blue" = "Blue"; "media-color.brown" = "Brown"; "media-color.buff" = "Buff"; "media-color.clear-black" = "Clear Black"; "media-color.clear-blue" = "Clear Blue"; "media-color.clear-brown" = "Clear Brown"; "media-color.clear-buff" = "Clear Buff"; "media-color.clear-cyan" = "Clear Cyan"; "media-color.clear-gold" = "Clear Gold"; "media-color.clear-goldenrod" = "Clear Goldenrod"; "media-color.clear-gray" = "Clear Gray"; "media-color.clear-green" = "Clear Green"; "media-color.clear-ivory" = "Clear Ivory"; "media-color.clear-magenta" = "Clear Magenta"; "media-color.clear-multi-color" = "Clear Multi Color"; "media-color.clear-mustard" = "Clear Mustard"; "media-color.clear-orange" = "Clear Orange"; "media-color.clear-pink" = "Clear Pink"; "media-color.clear-red" = "Clear Red"; "media-color.clear-silver" = "Clear Silver"; "media-color.clear-turquoise" = "Clear Turquoise"; "media-color.clear-violet" = "Clear Violet"; "media-color.clear-white" = "Clear White"; "media-color.clear-yellow" = "Clear Yellow"; "media-color.cyan" = "Cyan"; "media-color.dark-blue" = "Dark Blue"; "media-color.dark-brown" = "Dark Brown"; "media-color.dark-buff" = "Dark Buff"; "media-color.dark-cyan" = "Dark Cyan"; "media-color.dark-gold" = "Dark Gold"; "media-color.dark-goldenrod" = "Dark Goldenrod"; "media-color.dark-gray" = "Dark Gray"; "media-color.dark-green" = "Dark Green"; "media-color.dark-ivory" = "Dark Ivory"; "media-color.dark-magenta" = "Dark Magenta"; "media-color.dark-mustard" = "Dark Mustard"; "media-color.dark-orange" = "Dark Orange"; "media-color.dark-pink" = "Dark Pink"; "media-color.dark-red" = "Dark Red"; "media-color.dark-silver" = "Dark Silver"; "media-color.dark-turquoise" = "Dark Turquoise"; "media-color.dark-violet" = "Dark Violet"; "media-color.dark-yellow" = "Dark Yellow"; "media-color.gold" = "Gold"; "media-color.goldenrod" = "Goldenrod"; "media-color.gray" = "Gray"; "media-color.green" = "Green"; "media-color.ivory" = "Ivory"; "media-color.light-black" = "Light Black"; "media-color.light-blue" = "Light Blue"; "media-color.light-brown" = "Light Brown"; "media-color.light-buff" = "Light Buff"; "media-color.light-cyan" = "Light Cyan"; "media-color.light-gold" = "Light Gold"; "media-color.light-goldenrod" = "Light Goldenrod"; "media-color.light-gray" = "Light Gray"; "media-color.light-green" = "Light Green"; "media-color.light-ivory" = "Light Ivory"; "media-color.light-magenta" = "Light Magenta"; "media-color.light-mustard" = "Light Mustard"; "media-color.light-orange" = "Light Orange"; "media-color.light-pink" = "Light Pink"; "media-color.light-red" = "Light Red"; "media-color.light-silver" = "Light Silver"; "media-color.light-turquoise" = "Light Turquoise"; "media-color.light-violet" = "Light Violet"; "media-color.light-yellow" = "Light Yellow"; "media-color.magenta" = "Magenta"; "media-color.multi-color" = "Multi-color"; "media-color.mustard" = "Mustard"; "media-color.no-color" = "No Color"; "media-color.orange" = "Orange"; "media-color.pink" = "Pink"; "media-color.red" = "Red"; "media-color.silver" = "Silver"; "media-color.turquoise" = "Turquoise"; "media-color.violet" = "Violet"; "media-color.white" = "White"; "media-color.yellow" = "Yellow"; "media-front-coating" = "Front Coating of Media"; "media-grain" = "Media Grain"; "media-grain.x-direction" = "Cross-Feed Direction"; "media-grain.y-direction" = "Feed Direction"; "media-hole-count" = "Media Hole Count"; "media-info" = "Media Info"; "media-input-tray-check" = "Force Media"; "media-left-margin" = "Media Left Margin"; "media-pre-printed" = "Pre-printed Media"; "media-pre-printed.blank" = "Blank"; "media-pre-printed.letter-head" = "Letterhead"; "media-pre-printed.pre-printed" = "Pre-printed"; "media-recycled" = "Recycled Media"; "media-recycled.none" = "None"; "media-recycled.standard" = "Standard"; "media-right-margin" = "Media Right Margin"; "media-size" = "Media Dimensions"; "media-size-name" = "Media Name"; "media-source" = "Media Source"; "media-source.alternate" = "Alternate Tray"; "media-source.alternate-roll" = "Alternate Roll"; "media-source.auto" = "Automatic Tray"; "media-source.bottom" = "Bottom Tray"; "media-source.by-pass-tray" = "By-pass Tray"; "media-source.center" = "Center Tray"; "media-source.disc" = "Disc Feed"; "media-source.envelope" = "Envelope Feed"; "media-source.hagaki" = "Hagaki Feed"; "media-source.large-capacity" = "Large Capacity Tray"; "media-source.left" = "Left Tray"; "media-source.main" = "Main Tray"; "media-source.main-roll" = "Main Roll"; "media-source.manual" = "Manual Feed"; "media-source.middle" = "Middle Tray"; "media-source.photo" = "Photo Tray"; "media-source.rear" = "Rear Tray"; "media-source.right" = "Right Tray"; "media-source.roll-1" = "Roll 1"; "media-source.roll-10" = "Roll 10"; "media-source.roll-2" = "Roll 2"; "media-source.roll-3" = "Roll 3"; "media-source.roll-4" = "Roll 4"; "media-source.roll-5" = "Roll 5"; "media-source.roll-6" = "Roll 6"; "media-source.roll-7" = "Roll 7"; "media-source.roll-8" = "Roll 8"; "media-source.roll-9" = "Roll 9"; "media-source.side" = "Side"; "media-source.top" = "Top"; "media-source.tray-1" = "Tray 1"; "media-source.tray-10" = "Tray 10"; "media-source.tray-11" = "Tray 11"; "media-source.tray-12" = "Tray 12"; "media-source.tray-13" = "Tray 13"; "media-source.tray-14" = "Tray 14"; "media-source.tray-15" = "Tray 15"; "media-source.tray-16" = "Tray 16"; "media-source.tray-17" = "Tray 17"; "media-source.tray-18" = "Tray 18"; "media-source.tray-19" = "Tray 19"; "media-source.tray-2" = "Tray 2"; "media-source.tray-20" = "Tray 20"; "media-source.tray-3" = "Tray 3"; "media-source.tray-4" = "Tray 4"; "media-source.tray-5" = "Tray 5"; "media-source.tray-6" = "Tray 6"; "media-source.tray-7" = "Tray 7"; "media-source.tray-8" = "Tray 8"; "media-source.tray-9" = "Tray 9"; "media-thickness" = "Media Thickness"; "media-tooth" = "Media Tooth (Texture)"; "media-tooth.antique" = "Antique"; "media-tooth.calendared" = "Extra Smooth"; "media-tooth.coarse" = "Coarse"; "media-tooth.fine" = "Fine"; "media-tooth.linen" = "Linen"; "media-tooth.medium" = "Medium"; "media-tooth.smooth" = "Smooth"; "media-tooth.stipple" = "Stipple"; "media-tooth.uncalendared" = "Rough"; "media-tooth.vellum" = "Vellum"; "media-top-margin" = "Media Top Margin"; "media-type" = "Media Type"; "media-type.aluminum" = "Aluminum"; "media-type.auto" = "Automatic"; "media-type.back-print-film" = "Back Print Film"; "media-type.cardboard" = "Cardboard"; "media-type.cardstock" = "Cardstock"; "media-type.cd" = "CD"; "media-type.com.hp.advanced-photo" = "Advanced Photo Paper"; "media-type.com.hp.brochure-glossy" = "Glossy Brochure Paper"; "media-type.com.hp.brochure-matte" = "Matte Brochure Paper"; "media-type.com.hp.cover-matte" = "Matte Cover Paper"; "media-type.com.hp.ecosmart-lite" = "Office Recycled Paper"; "media-type.com.hp.everyday-glossy" = "Everyday Glossy Photo Paper"; "media-type.com.hp.everyday-matte" = "Everyday Matte Paper"; "media-type.com.hp.extra-heavy" = "Extra Heavyweight Paper"; "media-type.com.hp.intermediate" = "Multipurpose Paper"; "media-type.com.hp.mid-weight" = "Mid-Weight Paper"; "media-type.com.hp.premium-inkjet" = "Premium Inkjet Paper"; "media-type.com.hp.premium-photo" = "Premium Photo Glossy Paper"; "media-type.com.hp.premium-presentation-matte" = "Premium Presentation Matte Paper"; "media-type.continuous" = "Continuous"; "media-type.continuous-long" = "Continuous Long"; "media-type.continuous-short" = "Continuous Short"; "media-type.corrugated-board" = "Corrugated Board"; "media-type.disc" = "Optical Disc"; "media-type.disc-glossy" = "Glossy Optical Disc"; "media-type.disc-high-gloss" = "High Gloss Optical Disc"; "media-type.disc-matte" = "Matte Optical Disc"; "media-type.disc-satin" = "Satin Optical Disc"; "media-type.disc-semi-gloss" = "Semi-Gloss Optical Disc"; "media-type.double-wall" = "Double Wall"; "media-type.dry-film" = "Dry Film"; "media-type.dvd" = "DVD"; "media-type.embossing-foil" = "Embossing Foil"; "media-type.end-board" = "End Board"; "media-type.envelope" = "Envelope"; "media-type.envelope-archival" = "Archival Envelope"; "media-type.envelope-bond" = "Bond Envelope"; "media-type.envelope-coated" = "Coated Envelope"; "media-type.envelope-cotton" = "Cotton Envelope"; "media-type.envelope-fine" = "Fine Envelope"; "media-type.envelope-heavyweight" = "Heavyweight Envelope"; "media-type.envelope-inkjet" = "Inkjet Envelope"; "media-type.envelope-lightweight" = "Lightweight Envelope"; "media-type.envelope-plain" = "Plain Envelope"; "media-type.envelope-preprinted" = "Preprinted Envelope"; "media-type.envelope-window" = "Windowed Envelope"; "media-type.fabric" = "Fabric"; "media-type.fabric-archival" = "Archival Fabric"; "media-type.fabric-glossy" = "Glossy Fabric"; "media-type.fabric-high-gloss" = "High Gloss Fabric"; "media-type.fabric-matte" = "Matte Fabric"; "media-type.fabric-semi-gloss" = "Semi-Gloss Fabric"; "media-type.fabric-waterproof" = "Waterproof Fabric"; "media-type.film" = "Film"; "media-type.flexo-base" = "Flexo Base"; "media-type.flexo-photo-polymer" = "Flexo Photo Polymer"; "media-type.flute" = "Flute"; "media-type.foil" = "Foil"; "media-type.full-cut-tabs" = "Full Cut Tabs"; "media-type.glass" = "Glass"; "media-type.glass-colored" = "Glass Colored"; "media-type.glass-opaque" = "Glass Opaque"; "media-type.glass-surfaced" = "Glass Surfaced"; "media-type.glass-textured" = "Glass Textured"; "media-type.gravure-cylinder" = "Gravure Cylinder"; "media-type.image-setter-paper" = "Image Setter Paper"; "media-type.imaging-cylinder" = "Imaging Cylinder"; "media-type.jp.co.canon_photo-paper-plus-glossy-ii" = "Photo Paper Plus Glossy II"; "media-type.jp.co.canon_photo-paper-pro-platinum" = "Photo Paper Pro Platinum"; "media-type.jp.co.canon-photo-paper-plus-glossy-ii" = "Photo Paper Plus Glossy II"; "media-type.jp.co.canon-photo-paper-pro-platinum" = "Photo Paper Pro Platinum"; "media-type.labels" = "Labels"; "media-type.labels-colored" = "Colored Labels"; "media-type.labels-glossy" = "Glossy Labels"; "media-type.labels-high-gloss" = "High Gloss Labels"; "media-type.labels-inkjet" = "Inkjet Labels"; "media-type.labels-matte" = "Matte Labels"; "media-type.labels-permanent" = "Permanent Labels"; "media-type.labels-satin" = "Satin Labels"; "media-type.labels-security" = "Security Labels"; "media-type.labels-semi-gloss" = "Semi-Gloss Labels"; "media-type.laminating-foil" = "Laminating Foil"; "media-type.letterhead" = "Letterhead"; "media-type.metal" = "Metal"; "media-type.metal-glossy" = "Metal Glossy"; "media-type.metal-high-gloss" = "Metal High Gloss"; "media-type.metal-matte" = "Metal Matte"; "media-type.metal-satin" = "Metal Satin"; "media-type.metal-semi-gloss" = "Metal Semi Gloss"; "media-type.mounting-tape" = "Mounting Tape"; "media-type.multi-layer" = "Multi Layer"; "media-type.multi-part-form" = "Multi Part Form"; "media-type.other" = "Other"; "media-type.paper" = "Paper"; "media-type.photographic" = "Photo Paper"; "media-type.photographic-archival" = "Photographic Archival"; "media-type.photographic-film" = "Photo Film"; "media-type.photographic-glossy" = "Glossy Photo Paper"; "media-type.photographic-high-gloss" = "High Gloss Photo Paper"; "media-type.photographic-matte" = "Matte Photo Paper"; "media-type.photographic-satin" = "Satin Photo Paper"; "media-type.photographic-semi-gloss" = "Semi-Gloss Photo Paper"; "media-type.plastic" = "Plastic"; "media-type.plastic-archival" = "Plastic Archival"; "media-type.plastic-colored" = "Plastic Colored"; "media-type.plastic-glossy" = "Plastic Glossy"; "media-type.plastic-high-gloss" = "Plastic High Gloss"; "media-type.plastic-matte" = "Plastic Matte"; "media-type.plastic-satin" = "Plastic Satin"; "media-type.plastic-semi-gloss" = "Plastic Semi Gloss"; "media-type.plate" = "Plate"; "media-type.polyester" = "Polyester"; "media-type.pre-cut-tabs" = "Pre Cut Tabs"; "media-type.roll" = "Roll"; "media-type.screen" = "Screen"; "media-type.screen-paged" = "Screen Paged"; "media-type.self-adhesive" = "Self Adhesive"; "media-type.self-adhesive-film" = "Self Adhesive Film"; "media-type.shrink-foil" = "Shrink Foil"; "media-type.single-face" = "Single Face"; "media-type.single-wall" = "Single Wall"; "media-type.sleeve" = "Sleeve"; "media-type.stationery" = "Stationery"; "media-type.stationery-archival" = "Stationery Archival"; "media-type.stationery-coated" = "Coated Paper"; "media-type.stationery-cotton" = "Stationery Cotton"; "media-type.stationery-fine" = "Vellum Paper"; "media-type.stationery-heavyweight" = "Heavyweight Paper"; "media-type.stationery-heavyweight-coated" = "Stationery Heavyweight Coated"; "media-type.stationery-inkjet" = "Stationery Inkjet Paper"; "media-type.stationery-letterhead" = "Letterhead"; "media-type.stationery-lightweight" = "Lightweight Paper"; "media-type.stationery-preprinted" = "Preprinted Paper"; "media-type.stationery-prepunched" = "Punched Paper"; "media-type.tab-stock" = "Tab Stock"; "media-type.tractor" = "Tractor"; "media-type.transfer" = "Transfer"; "media-type.transparency" = "Transparency"; "media-type.triple-wall" = "Triple Wall"; "media-type.wet-film" = "Wet Film"; "media-weight-metric" = "Media Weight (grams per m²)"; "media.asme_f_28x40in" = "28 x 40″"; "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" = "A4 or US Letter"; "media.iso_2a0_1189x1682mm" = "2a0"; "media.iso_a0_841x1189mm" = "A0"; "media.iso_a0x3_1189x2523mm" = "A0x3"; "media.iso_a10_26x37mm" = "A10"; "media.iso_a1_594x841mm" = "A1"; "media.iso_a1x3_841x1783mm" = "A1x3"; "media.iso_a1x4_841x2378mm" = "A1x4"; "media.iso_a2_420x594mm" = "A2"; "media.iso_a2x3_594x1261mm" = "A2x3"; "media.iso_a2x4_594x1682mm" = "A2x4"; "media.iso_a2x5_594x2102mm" = "A2x5"; "media.iso_a3-extra_322x445mm" = "A3 (Extra)"; "media.iso_a3_297x420mm" = "A3"; "media.iso_a3x3_420x891mm" = "A3x3"; "media.iso_a3x4_420x1189mm" = "A3x4"; "media.iso_a3x5_420x1486mm" = "A3x5"; "media.iso_a3x6_420x1783mm" = "A3x6"; "media.iso_a3x7_420x2080mm" = "A3x7"; "media.iso_a4-extra_235.5x322.3mm" = "A4 (Extra)"; "media.iso_a4-tab_225x297mm" = "A4 (Tab)"; "media.iso_a4_210x297mm" = "A4"; "media.iso_a4x3_297x630mm" = "A4x3"; "media.iso_a4x4_297x841mm" = "A4x4"; "media.iso_a4x5_297x1051mm" = "A4x5"; "media.iso_a4x6_297x1261mm" = "A4x6"; "media.iso_a4x7_297x1471mm" = "A4x7"; "media.iso_a4x8_297x1682mm" = "A4x8"; "media.iso_a4x9_297x1892mm" = "A4x9"; "media.iso_a5-extra_174x235mm" = "A5 (Extra)"; "media.iso_a5_148x210mm" = "A5"; "media.iso_a6_105x148mm" = "A6"; "media.iso_a7_74x105mm" = "A7"; "media.iso_a8_52x74mm" = "A8"; "media.iso_a9_37x52mm" = "A9"; "media.iso_b0_1000x1414mm" = "B0"; "media.iso_b10_31x44mm" = "B10"; "media.iso_b1_707x1000mm" = "B1"; "media.iso_b2_500x707mm" = "B2"; "media.iso_b3_353x500mm" = "B3"; "media.iso_b4_250x353mm" = "B4"; "media.iso_b5-extra_201x276mm" = "B5 (Extra)"; "media.iso_b5_176x250mm" = "B5 Envelope"; "media.iso_b6_125x176mm" = "B6"; "media.iso_b6c4_125x324mm" = "B6/C4 Envelope"; "media.iso_b7_88x125mm" = "B7"; "media.iso_b8_62x88mm" = "B8"; "media.iso_b9_44x62mm" = "B9"; "media.iso_c0_917x1297mm" = "C0 Envelope"; "media.iso_c10_28x40mm" = "C10 Envelope"; "media.iso_c1_648x917mm" = "C1 Envelope"; "media.iso_c2_458x648mm" = "C2 Envelope"; "media.iso_c3_324x458mm" = "C3 Envelope"; "media.iso_c4_229x324mm" = "C4 Envelope"; "media.iso_c5_162x229mm" = "C5 Envelope"; "media.iso_c6_114x162mm" = "C6 Envelope"; "media.iso_c6c5_114x229mm" = "C6c5 Envelope"; "media.iso_c7_81x114mm" = "C7 Envelope"; "media.iso_c7c6_81x162mm" = "C7c6 Envelope"; "media.iso_c8_57x81mm" = "C8 Envelope"; "media.iso_c9_40x57mm" = "C9 Envelope"; "media.iso_dl_110x220mm" = "DL Envelope"; "media.iso_ra0_860x1220mm" = "ISO RA0"; "media.iso_ra1_610x860mm" = "ISO RA1"; "media.iso_ra2_430x610mm" = "ISO RA2"; "media.iso_ra3_305x430mm" = "ISO RA3"; "media.iso_ra4_215x305mm" = "ISO RA4"; "media.iso_sra0_900x1280mm" = "ISO SRA0"; "media.iso_sra1_640x900mm" = "ISO SRA1"; "media.iso_sra2_450x640mm" = "ISO SRA2"; "media.iso_sra3_320x450mm" = "ISO SRA3"; "media.iso_sra4_225x320mm" = "ISO SRA4"; "media.jis_b0_1030x1456mm" = "JIS B0"; "media.jis_b10_32x45mm" = "JIS B10"; "media.jis_b1_728x1030mm" = "JIS B1"; "media.jis_b2_515x728mm" = "JIS B2"; "media.jis_b3_364x515mm" = "JIS B3"; "media.jis_b4_257x364mm" = "JIS B4"; "media.jis_b5_182x257mm" = "JIS B5"; "media.jis_b6_128x182mm" = "JIS B6"; "media.jis_b7_91x128mm" = "JIS B7"; "media.jis_b8_64x91mm" = "JIS B8"; "media.jis_b9_45x64mm" = "JIS B9"; "media.jis_exec_216x330mm" = "JIS Executive"; "media.jpn_chou2_111.1x146mm" = "Chou 2 Envelope"; "media.jpn_chou3_120x235mm" = "Chou 3 Envelope"; "media.jpn_chou4_90x205mm" = "Chou 4 Envelope"; "media.jpn_hagaki_100x148mm" = "Hagaki"; "media.jpn_kahu_240x322.1mm" = "Kahu Envelope"; "media.jpn_kaku2_240x332mm" = "Kahu 2 Envelope"; "media.jpn_kaku3_216x277mm" = "216 x 277mm"; "media.jpn_kaku4_197x267mm" = "197 x 267mm"; "media.jpn_kaku5_190x240mm" = "190 x 240mm"; "media.jpn_kaku7_142x205mm" = "142 x 205mm"; "media.jpn_kaku8_119x197mm" = "119 x 197mm"; "media.jpn_oufuku_148x200mm" = "Oufuku Reply Postcard"; "media.jpn_you4_105x235mm" = "You 4 Envelope"; "media.na_10x11_10x11in" = "10 x 11″"; "media.na_10x13_10x13in" = "10 x 13″"; "media.na_10x14_10x14in" = "10 x 14″"; "media.na_10x15_10x15in" = "10 x 15″"; "media.na_11x12_11x12in" = "11 x 12″"; "media.na_11x15_11x15in" = "11 x 15″"; "media.na_12x19_12x19in" = "12 x 19″"; "media.na_5x7_5x7in" = "5 x 7″"; "media.na_6x9_6x9in" = "6 x 9″"; "media.na_7x9_7x9in" = "7 x 9″"; "media.na_9x11_9x11in" = "9 x 11″"; "media.na_a2_4.375x5.75in" = "A2 Envelope"; "media.na_arch-a_9x12in" = "9 x 12″"; "media.na_arch-b_12x18in" = "12 x 18″"; "media.na_arch-c_18x24in" = "18 x 24″"; "media.na_arch-d_24x36in" = "24 x 36″"; "media.na_arch-e2_26x38in" = "26 x 38″"; "media.na_arch-e3_27x39in" = "27 x 39″"; "media.na_arch-e_36x48in" = "36 x 48″"; "media.na_b-plus_12x19.17in" = "12 x 19.17″"; "media.na_c5_6.5x9.5in" = "C5 Envelope"; "media.na_c_17x22in" = "17 x 22″"; "media.na_d_22x34in" = "22 x 34″"; "media.na_e_34x44in" = "34 x 44″"; "media.na_edp_11x14in" = "11 x 14″"; "media.na_eur-edp_12x14in" = "12 x 14″"; "media.na_executive_7.25x10.5in" = "Executive"; "media.na_f_44x68in" = "44 x 68″"; "media.na_fanfold-eur_8.5x12in" = "European Fanfold"; "media.na_fanfold-us_11x14.875in" = "US Fanfold"; "media.na_foolscap_8.5x13in" = "Foolscap"; "media.na_govt-legal_8x13in" = "8 x 13″"; "media.na_govt-letter_8x10in" = "8 x 10″"; "media.na_index-3x5_3x5in" = "3 x 5″"; "media.na_index-4x6-ext_6x8in" = "6 x 8″"; "media.na_index-4x6_4x6in" = "4 x 6″"; "media.na_index-5x8_5x8in" = "5 x 8″"; "media.na_invoice_5.5x8.5in" = "Statement"; "media.na_ledger_11x17in" = "11 x 17″"; "media.na_legal-extra_9.5x15in" = "US Legal (Extra)"; "media.na_legal_8.5x14in" = "US Legal"; "media.na_letter-extra_9.5x12in" = "US Letter (Extra)"; "media.na_letter-plus_8.5x12.69in" = "US Letter (Plus)"; "media.na_letter_8.5x11in" = "US Letter"; "media.na_monarch_3.875x7.5in" = "Monarch Envelope"; "media.na_number-10_4.125x9.5in" = "#10 Envelope"; "media.na_number-11_4.5x10.375in" = "#11 Envelope"; "media.na_number-12_4.75x11in" = "#12 Envelope"; "media.na_number-14_5x11.5in" = "#14 Envelope"; "media.na_number-9_3.875x8.875in" = "#9 Envelope"; "media.na_oficio_8.5x13.4in" = "8.5 x 13.4″"; "media.na_personal_3.625x6.5in" = "Personal Envelope"; "media.na_quarto_8.5x10.83in" = "Quarto"; "media.na_super-a_8.94x14in" = "8.94 x 14″"; "media.na_super-b_13x19in" = "13 x 19″"; "media.na_wide-format_30x42in" = "30 x 42″"; "media.oe_12x16_12x16in" = "12 x 16″"; "media.oe_14x17_14x17in" = "14 x 17″"; "media.oe_18x22_18x22in" = "18 x 22″"; "media.oe_a2plus_17x24in" = "17 x 24″"; "media.oe_photo-10r_10x12in" = "10 x 12″"; "media.oe_photo-20r_20x24in" = "20 x 24″"; "media.oe_photo-l_3.5x5in" = "3.5 x 5″"; "media.oe_photo-s10r_10x15in" = "10 x 15″"; "media.om_16k_184x260mm" = "184 x 260mm"; "media.om_16k_195x270mm" = "195 x 270mm"; "media.om_dai-pa-kai_275x395mm" = "275 x 395mm"; "media.om_folio-sp_215x315mm" = "Folio"; "media.om_folio_210x330mm" = "Folio (Special)"; "media.om_invite_220x220mm" = "Invitation Envelope"; "media.om_italian_110x230mm" = "Italian Envelope"; "media.om_juuro-ku-kai_198x275mm" = "198 x 275mm"; "media.om_large-photo_200x300" = "200 x 300"; "media.om_medium-photo_130x180mm" = "130 x 180mm"; "media.om_pa-kai_267x389mm" = "267 x 389mm"; "media.om_postfix_114x229mm" = "Postfix Envelope"; "media.om_small-photo_100x150mm" = "100 x 150mm"; "media.om_wide-photo_100x200mm" = "100 x 200mm"; "media.prc_10_324x458mm" = "Chinese #10 Envelope"; "media.prc_16k_146x215mm" = "Chinese 16k"; "media.prc_1_102x165mm" = "Chinese #1 Envelope"; "media.prc_2_102x176mm" = "Chinese #2 Envelope"; "media.prc_32k_97x151mm" = "Chinese 32k"; "media.prc_3_125x176mm" = "Chinese #3 Envelope"; "media.prc_4_110x208mm" = "Chinese #4 Envelope"; "media.prc_5_110x220mm" = "Chinese #5 Envelope"; "media.prc_6_120x320mm" = "Chinese #6 Envelope"; "media.prc_7_160x230mm" = "Chinese #7 Envelope"; "media.prc_8_120x309mm" = "Chinese #8 Envelope"; "media.roc_16k_7.75x10.75in" = "ROC 16k"; "media.roc_8k_10.75x15.5in" = "ROC 8k"; "multiple-document-handling" = "Multiple Document Handling"; "multiple-document-handling.separate-documents-collated-copies" = "Separate Documents Collated Copies"; "multiple-document-handling.separate-documents-uncollated-copies" = "Separate Documents Uncollated Copies"; "multiple-document-handling.single-document" = "Single Document"; "multiple-document-handling.single-document-new-sheet" = "Single Document New Sheet"; "multiple-object-handling" = "Multiple Object Handling"; "multiple-object-handling.auto" = "Automatic"; "multiple-object-handling.best-fit" = "Best Fit"; "multiple-object-handling.best-quality" = "Best Quality"; "multiple-object-handling.best-speed" = "Best Speed"; "multiple-object-handling.one-at-a-time" = "One At A Time"; "multiple-operation-time-out-action" = "On Timeout"; "multiple-operation-time-out-action.abort-job" = "Abort Job"; "multiple-operation-time-out-action.hold-job" = "Hold Job"; "multiple-operation-time-out-action.process-job" = "Process Job"; "noise-removal" = "Noise Removal"; "notify-attributes" = "Notify Attributes"; "notify-charset" = "Notify Charset"; "notify-events" = "Notify Events"; "notify-events.document-completed" = "Document Completed"; "notify-events.document-config-changed" = "Document Config Changed"; "notify-events.document-created" = "Document Created"; "notify-events.document-fetchable" = "Document Fetchable"; "notify-events.document-state-changed" = "Document State Changed"; "notify-events.document-stopped" = "Document Stopped"; "notify-events.job-completed" = "Job Completed"; "notify-events.job-config-changed" = "Job Config Changed"; "notify-events.job-created" = "Job Created"; "notify-events.job-fetchable" = "Job Fetchable"; "notify-events.job-progress" = "Job Progress"; "notify-events.job-state-changed" = "Job State Changed"; "notify-events.job-stopped" = "Job Stopped"; "notify-events.none" = "None"; "notify-events.printer-config-changed" = "Printer Config Changed"; "notify-events.printer-finishings-changed" = "Printer Finishings Changed"; "notify-events.printer-media-changed" = "Printer Media Changed"; "notify-events.printer-queue-order-changed" = "Printer Queue Order Changed"; "notify-events.printer-restarted" = "Printer Restarted"; "notify-events.printer-shutdown" = "Printer Shutdown"; "notify-events.printer-state-changed" = "Printer State Changed"; "notify-events.printer-stopped" = "Printer Stopped"; "notify-get-interval" = "Notify Get Interval"; "notify-lease-duration" = "Notify Lease Duration"; "notify-natural-language" = "Notify Natural Language"; "notify-pull-method" = "Notify Pull Method"; "notify-recipient-uri" = "Notify Recipient"; "notify-sequence-numbers" = "Notify Sequence Numbers"; "notify-subscription-ids" = "Notify Subscription Ids"; "notify-time-interval" = "Notify Time Interval"; "notify-user-data" = "Notify User Data"; "notify-wait" = "Notify Wait"; "number-of-retries" = "Number Of Retries"; "number-up" = "Number-Up"; "object-offset" = "Object Offset"; "object-size" = "Object Size"; "organization-name" = "Organization Name"; "orientation-requested" = "Orientation"; "orientation-requested.3" = "Portrait"; "orientation-requested.4" = "Landscape"; "orientation-requested.5" = "Reverse Landscape"; "orientation-requested.6" = "Reverse Portrait"; "orientation-requested.7" = "None"; "output-attributes" = "Scanned Image Options"; "output-bin" = "Output Tray"; "output-bin.auto" = "Automatic"; "output-bin.bottom" = "Bottom"; "output-bin.center" = "Center"; "output-bin.face-down" = "Face Down"; "output-bin.face-up" = "Face Up"; "output-bin.large-capacity" = "Large Capacity"; "output-bin.left" = "Left"; "output-bin.mailbox-1" = "Mailbox 1"; "output-bin.mailbox-10" = "Mailbox 10"; "output-bin.mailbox-2" = "Mailbox 2"; "output-bin.mailbox-3" = "Mailbox 3"; "output-bin.mailbox-4" = "Mailbox 4"; "output-bin.mailbox-5" = "Mailbox 5"; "output-bin.mailbox-6" = "Mailbox 6"; "output-bin.mailbox-7" = "Mailbox 7"; "output-bin.mailbox-8" = "Mailbox 8"; "output-bin.mailbox-9" = "Mailbox 9"; "output-bin.middle" = "Middle"; "output-bin.my-mailbox" = "My Mailbox"; "output-bin.rear" = "Rear"; "output-bin.right" = "Right"; "output-bin.side" = "Side"; "output-bin.stacker-1" = "Stacker 1"; "output-bin.stacker-10" = "Stacker 10"; "output-bin.stacker-2" = "Stacker 2"; "output-bin.stacker-3" = "Stacker 3"; "output-bin.stacker-4" = "Stacker 4"; "output-bin.stacker-5" = "Stacker 5"; "output-bin.stacker-6" = "Stacker 6"; "output-bin.stacker-7" = "Stacker 7"; "output-bin.stacker-8" = "Stacker 8"; "output-bin.stacker-9" = "Stacker 9"; "output-bin.top" = "Top"; "output-bin.tray-1" = "Tray 1"; "output-bin.tray-10" = "Tray 10"; "output-bin.tray-2" = "Tray 2"; "output-bin.tray-3" = "Tray 3"; "output-bin.tray-4" = "Tray 4"; "output-bin.tray-5" = "Tray 5"; "output-bin.tray-6" = "Tray 6"; "output-bin.tray-7" = "Tray 7"; "output-bin.tray-8" = "Tray 8"; "output-bin.tray-9" = "Tray 9"; "output-compression-quality-factor" = "Scanned Image Quality"; "page-delivery" = "Page Delivery"; "page-delivery.reverse-order-face-down" = "Reverse Order Face-down"; "page-delivery.reverse-order-face-up" = "Reverse Order Face-up"; "page-delivery.same-order-face-down" = "Same Order Face-down"; "page-delivery.same-order-face-up" = "Same Order Face-up"; "page-delivery.system-specified" = "System Specified"; "page-order-received" = "Page Order Received"; "page-order-received.1-to-n-order" = "1 To N"; "page-order-received.n-to-1-order" = "N To 1"; "page-ranges" = "Page Ranges"; "pages" = "Pages"; "pages-per-subset" = "Pages Per Subset"; "platform-shape" = "Platform Shape"; "platform-shape.ellipse" = "Round"; "platform-shape.rectangle" = "Rectangle"; "platform-temperature" = "Platform Temperature"; "post-dial-string" = "Post-dial String"; "pre-dial-string" = "Pre-dial String"; "presentation-direction-number-up" = "Number-Up Layout"; "presentation-direction-number-up.tobottom-toleft" = "Top-bottom, Right-left"; "presentation-direction-number-up.tobottom-toright" = "Top-bottom, Left-right"; "presentation-direction-number-up.toleft-tobottom" = "Right-left, Top-bottom"; "presentation-direction-number-up.toleft-totop" = "Right-left, Bottom-top"; "presentation-direction-number-up.toright-tobottom" = "Left-right, Top-bottom"; "presentation-direction-number-up.toright-totop" = "Left-right, Bottom-top"; "presentation-direction-number-up.totop-toleft" = "Bottom-top, Right-left"; "presentation-direction-number-up.totop-toright" = "Bottom-top, Left-right"; "print-accuracy" = "Print Accuracy"; "print-base" = "Print Base"; "print-base.brim" = "Brim"; "print-base.none" = "None"; "print-base.raft" = "Raft"; "print-base.skirt" = "Skirt"; "print-base.standard" = "Standard"; "print-color-mode" = "Print Color Mode"; "print-color-mode.auto" = "Automatic"; "print-color-mode.bi-level" = "Text"; "print-color-mode.color" = "Color"; "print-color-mode.highlight" = "Highlight"; "print-color-mode.monochrome" = "Monochrome"; "print-color-mode.process-bi-level" = "Process Text"; "print-color-mode.process-monochrome" = "Process Monochrome"; "print-content-optimize" = "Print Optimization"; "print-content-optimize.auto" = "Automatic"; "print-content-optimize.graphic" = "Graphics"; "print-content-optimize.photo" = "Photo"; "print-content-optimize.text" = "Text"; "print-content-optimize.text-and-graphic" = "Text and Graphics"; "print-objects" = "Print Objects"; "print-quality" = "Print Quality"; "print-quality.3" = "Draft"; "print-quality.4" = "Normal"; "print-quality.5" = "High"; "print-rendering-intent" = "Print Rendering Intent"; "print-rendering-intent.absolute" = "Absolute"; "print-rendering-intent.auto" = "Automatic"; "print-rendering-intent.perceptual" = "Perceptual"; "print-rendering-intent.relative" = "Relative"; "print-rendering-intent.relative-bpc" = "Relative w/Black Point Compensation"; "print-rendering-intent.saturation" = "Saturation"; "print-scaling" = "Print Scaling"; "print-scaling.auto" = "Automatic"; "print-scaling.auto-fit" = "Auto-fit"; "print-scaling.fill" = "Fill"; "print-scaling.fit" = "Fit"; "print-scaling.none" = "None"; "print-supports" = "Print Supports"; "print-supports.material" = "With Specified Material"; "print-supports.none" = "None"; "print-supports.standard" = "Standard"; "printer-message-from-operator" = "Message From Operator"; "printer-resolution" = "Print Resolution"; "printer-state" = "Printer State"; "printer-state-reasons" = "Detailed Printer State"; "printer-state-reasons.alert-removal-of-binary-change-entry" = "Old Alerts Have Been Removed"; "printer-state-reasons.bander-added" = "Bander Added"; "printer-state-reasons.bander-almost-empty" = "Bander Almost Empty"; "printer-state-reasons.bander-almost-full" = "Bander Almost Full"; "printer-state-reasons.bander-at-limit" = "Bander At Limit"; "printer-state-reasons.bander-closed" = "Bander Closed"; "printer-state-reasons.bander-configuration-change" = "Bander Configuration Change"; "printer-state-reasons.bander-cover-closed" = "Bander Cover Closed"; "printer-state-reasons.bander-cover-open" = "Bander Cover Open"; "printer-state-reasons.bander-empty" = "Bander Empty"; "printer-state-reasons.bander-full" = "Bander Full"; "printer-state-reasons.bander-interlock-closed" = "Bander Interlock Closed"; "printer-state-reasons.bander-interlock-open" = "Bander Interlock Open"; "printer-state-reasons.bander-jam" = "Bander Jam"; "printer-state-reasons.bander-life-almost-over" = "Bander Life Almost Over"; "printer-state-reasons.bander-life-over" = "Bander Life Over"; "printer-state-reasons.bander-memory-exhausted" = "Bander Memory Exhausted"; "printer-state-reasons.bander-missing" = "Bander Missing"; "printer-state-reasons.bander-motor-failure" = "Bander Motor Failure"; "printer-state-reasons.bander-near-limit" = "Bander Near Limit"; "printer-state-reasons.bander-offline" = "Bander Offline"; "printer-state-reasons.bander-opened" = "Bander Opened"; "printer-state-reasons.bander-over-temperature" = "Bander Over Temperature"; "printer-state-reasons.bander-power-saver" = "Bander Power Saver"; "printer-state-reasons.bander-recoverable-failure" = "Bander Recoverable Failure"; "printer-state-reasons.bander-recoverable-storage" = "Bander Recoverable Storage"; "printer-state-reasons.bander-removed" = "Bander Removed"; "printer-state-reasons.bander-resource-added" = "Bander Resource Added"; "printer-state-reasons.bander-resource-removed" = "Bander Resource Removed"; "printer-state-reasons.bander-thermistor-failure" = "Bander Thermistor Failure"; "printer-state-reasons.bander-timing-failure" = "Bander Timing Failure"; "printer-state-reasons.bander-turned-off" = "Bander Turned Off"; "printer-state-reasons.bander-turned-on" = "Bander Turned On"; "printer-state-reasons.bander-under-temperature" = "Bander Under Temperature"; "printer-state-reasons.bander-unrecoverable-failure" = "Bander Unrecoverable Failure"; "printer-state-reasons.bander-unrecoverable-storage-error" = "Bander Unrecoverable Storage Error"; "printer-state-reasons.bander-warming-up" = "Bander Warming Up"; "printer-state-reasons.binder-added" = "Binder Added"; "printer-state-reasons.binder-almost-empty" = "Binder Almost Empty"; "printer-state-reasons.binder-almost-full" = "Binder Almost Full"; "printer-state-reasons.binder-at-limit" = "Binder At Limit"; "printer-state-reasons.binder-closed" = "Binder Closed"; "printer-state-reasons.binder-configuration-change" = "Binder Configuration Change"; "printer-state-reasons.binder-cover-closed" = "Binder Cover Closed"; "printer-state-reasons.binder-cover-open" = "Binder Cover Open"; "printer-state-reasons.binder-empty" = "Binder Empty"; "printer-state-reasons.binder-full" = "Binder Full"; "printer-state-reasons.binder-interlock-closed" = "Binder Interlock Closed"; "printer-state-reasons.binder-interlock-open" = "Binder Interlock Open"; "printer-state-reasons.binder-jam" = "Binder Jam"; "printer-state-reasons.binder-life-almost-over" = "Binder Life Almost Over"; "printer-state-reasons.binder-life-over" = "Binder Life Over"; "printer-state-reasons.binder-memory-exhausted" = "Binder Memory Exhausted"; "printer-state-reasons.binder-missing" = "Binder Missing"; "printer-state-reasons.binder-motor-failure" = "Binder Motor Failure"; "printer-state-reasons.binder-near-limit" = "Binder Near Limit"; "printer-state-reasons.binder-offline" = "Binder Offline"; "printer-state-reasons.binder-opened" = "Binder Opened"; "printer-state-reasons.binder-over-temperature" = "Binder Over Temperature"; "printer-state-reasons.binder-power-saver" = "Binder Power Saver"; "printer-state-reasons.binder-recoverable-failure" = "Binder Recoverable Failure"; "printer-state-reasons.binder-recoverable-storage" = "Binder Recoverable Storage"; "printer-state-reasons.binder-removed" = "Binder Removed"; "printer-state-reasons.binder-resource-added" = "Binder Resource Added"; "printer-state-reasons.binder-resource-removed" = "Binder Resource Removed"; "printer-state-reasons.binder-thermistor-failure" = "Binder Thermistor Failure"; "printer-state-reasons.binder-timing-failure" = "Binder Timing Failure"; "printer-state-reasons.binder-turned-off" = "Binder Turned Off"; "printer-state-reasons.binder-turned-on" = "Binder Turned On"; "printer-state-reasons.binder-under-temperature" = "Binder Under Temperature"; "printer-state-reasons.binder-unrecoverable-failure" = "Binder Unrecoverable Failure"; "printer-state-reasons.binder-unrecoverable-storage-error" = "Binder Unrecoverable Storage Error"; "printer-state-reasons.binder-warming-up" = "Binder Warming Up"; "printer-state-reasons.camera-failure" = "Camera Failure"; "printer-state-reasons.chamber-cooling" = "Chamber Cooling"; "printer-state-reasons.chamber-heating" = "Chamber Heating"; "printer-state-reasons.chamber-temperature-high" = "Chamber Temperature High"; "printer-state-reasons.chamber-temperature-low" = "Chamber Temperature Low"; "printer-state-reasons.cleaner-life-almost-over" = "Cleaner Life Almost Over"; "printer-state-reasons.cleaner-life-over" = "Cleaner Life Over"; "printer-state-reasons.configuration-change" = "Configuration Change"; "printer-state-reasons.connecting-to-device" = "Connecting To Device"; "printer-state-reasons.cover-open" = "Cover Open"; "printer-state-reasons.deactivated" = "Deactivated"; "printer-state-reasons.developer-empty" = "Developer Empty"; "printer-state-reasons.developer-low" = "Developer Low"; "printer-state-reasons.die-cutter-added" = "Die Cutter Added"; "printer-state-reasons.die-cutter-almost-empty" = "Die Cutter Almost Empty"; "printer-state-reasons.die-cutter-almost-full" = "Die Cutter Almost Full"; "printer-state-reasons.die-cutter-at-limit" = "Die Cutter At Limit"; "printer-state-reasons.die-cutter-closed" = "Die Cutter Closed"; "printer-state-reasons.die-cutter-configuration-change" = "Die Cutter Configuration Change"; "printer-state-reasons.die-cutter-cover-closed" = "Die Cutter Cover Closed"; "printer-state-reasons.die-cutter-cover-open" = "Die Cutter Cover Open"; "printer-state-reasons.die-cutter-empty" = "Die Cutter Empty"; "printer-state-reasons.die-cutter-full" = "Die Cutter Full"; "printer-state-reasons.die-cutter-interlock-closed" = "Die Cutter Interlock Closed"; "printer-state-reasons.die-cutter-interlock-open" = "Die Cutter Interlock Open"; "printer-state-reasons.die-cutter-jam" = "Die Cutter Jam"; "printer-state-reasons.die-cutter-life-almost-over" = "Die Cutter Life Almost Over"; "printer-state-reasons.die-cutter-life-over" = "Die Cutter Life Over"; "printer-state-reasons.die-cutter-memory-exhausted" = "Die Cutter Memory Exhausted"; "printer-state-reasons.die-cutter-missing" = "Die Cutter Missing"; "printer-state-reasons.die-cutter-motor-failure" = "Die Cutter Motor Failure"; "printer-state-reasons.die-cutter-near-limit" = "Die Cutter Near Limit"; "printer-state-reasons.die-cutter-offline" = "Die Cutter Offline"; "printer-state-reasons.die-cutter-opened" = "Die Cutter Opened"; "printer-state-reasons.die-cutter-over-temperature" = "Die Cutter Over Temperature"; "printer-state-reasons.die-cutter-power-saver" = "Die Cutter Power Saver"; "printer-state-reasons.die-cutter-recoverable-failure" = "Die Cutter Recoverable Failure"; "printer-state-reasons.die-cutter-recoverable-storage" = "Die Cutter Recoverable Storage"; "printer-state-reasons.die-cutter-removed" = "Die Cutter Removed"; "printer-state-reasons.die-cutter-resource-added" = "Die Cutter Resource Added"; "printer-state-reasons.die-cutter-resource-removed" = "Die Cutter Resource Removed"; "printer-state-reasons.die-cutter-thermistor-failure" = "Die Cutter Thermistor Failure"; "printer-state-reasons.die-cutter-timing-failure" = "Die Cutter Timing Failure"; "printer-state-reasons.die-cutter-turned-off" = "Die Cutter Turned Off"; "printer-state-reasons.die-cutter-turned-on" = "Die Cutter Turned On"; "printer-state-reasons.die-cutter-under-temperature" = "Die Cutter Under Temperature"; "printer-state-reasons.die-cutter-unrecoverable-failure" = "Die Cutter Unrecoverable Failure"; "printer-state-reasons.die-cutter-unrecoverable-storage-error" = "Die Cutter Unrecoverable Storage Error"; "printer-state-reasons.die-cutter-warming-up" = "Die Cutter Warming Up"; "printer-state-reasons.door-open" = "Door Open"; "printer-state-reasons.extruder-cooling" = "Extruder Cooling"; "printer-state-reasons.extruder-failure" = "Extruder Failure"; "printer-state-reasons.extruder-heating" = "Extruder Heating"; "printer-state-reasons.extruder-jam" = "Extruder Jam"; "printer-state-reasons.extruder-temperature-high" = "Extruder Temperature High"; "printer-state-reasons.extruder-temperature-low" = "Extruder Temperature Low"; "printer-state-reasons.fan-failure" = "Fan Failure"; "printer-state-reasons.folder-added" = "Folder Added"; "printer-state-reasons.folder-almost-empty" = "Folder Almost Empty"; "printer-state-reasons.folder-almost-full" = "Folder Almost Full"; "printer-state-reasons.folder-at-limit" = "Folder At Limit"; "printer-state-reasons.folder-closed" = "Folder Closed"; "printer-state-reasons.folder-configuration-change" = "Folder Configuration Change"; "printer-state-reasons.folder-cover-closed" = "Folder Cover Closed"; "printer-state-reasons.folder-cover-open" = "Folder Cover Open"; "printer-state-reasons.folder-empty" = "Folder Empty"; "printer-state-reasons.folder-full" = "Folder Full"; "printer-state-reasons.folder-interlock-closed" = "Folder Interlock Closed"; "printer-state-reasons.folder-interlock-open" = "Folder Interlock Open"; "printer-state-reasons.folder-jam" = "Folder Jam"; "printer-state-reasons.folder-life-almost-over" = "Folder Life Almost Over"; "printer-state-reasons.folder-life-over" = "Folder Life Over"; "printer-state-reasons.folder-memory-exhausted" = "Folder Memory Exhausted"; "printer-state-reasons.folder-missing" = "Folder Missing"; "printer-state-reasons.folder-motor-failure" = "Folder Motor Failure"; "printer-state-reasons.folder-near-limit" = "Folder Near Limit"; "printer-state-reasons.folder-offline" = "Folder Offline"; "printer-state-reasons.folder-opened" = "Folder Opened"; "printer-state-reasons.folder-over-temperature" = "Folder Over Temperature"; "printer-state-reasons.folder-power-saver" = "Folder Power Saver"; "printer-state-reasons.folder-recoverable-failure" = "Folder Recoverable Failure"; "printer-state-reasons.folder-recoverable-storage" = "Folder Recoverable Storage"; "printer-state-reasons.folder-removed" = "Folder Removed"; "printer-state-reasons.folder-resource-added" = "Folder Resource Added"; "printer-state-reasons.folder-resource-removed" = "Folder Resource Removed"; "printer-state-reasons.folder-thermistor-failure" = "Folder Thermistor Failure"; "printer-state-reasons.folder-timing-failure" = "Folder Timing Failure"; "printer-state-reasons.folder-turned-off" = "Folder Turned Off"; "printer-state-reasons.folder-turned-on" = "Folder Turned On"; "printer-state-reasons.folder-under-temperature" = "Folder Under Temperature"; "printer-state-reasons.folder-unrecoverable-failure" = "Folder Unrecoverable Failure"; "printer-state-reasons.folder-unrecoverable-storage-error" = "Folder Unrecoverable Storage Error"; "printer-state-reasons.folder-warming-up" = "Folder Warming Up"; "printer-state-reasons.fuser-over-temp" = "Fuser Over Temp"; "printer-state-reasons.fuser-under-temp" = "Fuser Under Temp"; "printer-state-reasons.hold-new-jobs" = "Hold New Jobs"; "printer-state-reasons.identify-printer-requested" = "Identify Printer"; "printer-state-reasons.imprinter-added" = "Imprinter Added"; "printer-state-reasons.imprinter-almost-empty" = "Imprinter Almost Empty"; "printer-state-reasons.imprinter-almost-full" = "Imprinter Almost Full"; "printer-state-reasons.imprinter-at-limit" = "Imprinter At Limit"; "printer-state-reasons.imprinter-closed" = "Imprinter Closed"; "printer-state-reasons.imprinter-configuration-change" = "Imprinter Configuration Change"; "printer-state-reasons.imprinter-cover-closed" = "Imprinter Cover Closed"; "printer-state-reasons.imprinter-cover-open" = "Imprinter Cover Open"; "printer-state-reasons.imprinter-empty" = "Imprinter Empty"; "printer-state-reasons.imprinter-full" = "Imprinter Full"; "printer-state-reasons.imprinter-interlock-closed" = "Imprinter Interlock Closed"; "printer-state-reasons.imprinter-interlock-open" = "Imprinter Interlock Open"; "printer-state-reasons.imprinter-jam" = "Imprinter Jam"; "printer-state-reasons.imprinter-life-almost-over" = "Imprinter Life Almost Over"; "printer-state-reasons.imprinter-life-over" = "Imprinter Life Over"; "printer-state-reasons.imprinter-memory-exhausted" = "Imprinter Memory Exhausted"; "printer-state-reasons.imprinter-missing" = "Imprinter Missing"; "printer-state-reasons.imprinter-motor-failure" = "Imprinter Motor Failure"; "printer-state-reasons.imprinter-near-limit" = "Imprinter Near Limit"; "printer-state-reasons.imprinter-offline" = "Imprinter Offline"; "printer-state-reasons.imprinter-opened" = "Imprinter Opened"; "printer-state-reasons.imprinter-over-temperature" = "Imprinter Over Temperature"; "printer-state-reasons.imprinter-power-saver" = "Imprinter Power Saver"; "printer-state-reasons.imprinter-recoverable-failure" = "Imprinter Recoverable Failure"; "printer-state-reasons.imprinter-recoverable-storage" = "Imprinter Recoverable Storage"; "printer-state-reasons.imprinter-removed" = "Imprinter Removed"; "printer-state-reasons.imprinter-resource-added" = "Imprinter Resource Added"; "printer-state-reasons.imprinter-resource-removed" = "Imprinter Resource Removed"; "printer-state-reasons.imprinter-thermistor-failure" = "Imprinter Thermistor Failure"; "printer-state-reasons.imprinter-timing-failure" = "Imprinter Timing Failure"; "printer-state-reasons.imprinter-turned-off" = "Imprinter Turned Off"; "printer-state-reasons.imprinter-turned-on" = "Imprinter Turned On"; "printer-state-reasons.imprinter-under-temperature" = "Imprinter Under Temperature"; "printer-state-reasons.imprinter-unrecoverable-failure" = "Imprinter Unrecoverable Failure"; "printer-state-reasons.imprinter-unrecoverable-storage-error" = "Imprinter Unrecoverable Storage Error"; "printer-state-reasons.imprinter-warming-up" = "Imprinter Warming Up"; "printer-state-reasons.input-cannot-feed-size-selected" = "Input Cannot Feed Size Selected"; "printer-state-reasons.input-manual-input-request" = "Input Manual Input Request"; "printer-state-reasons.input-media-color-change" = "Input Media Color Change"; "printer-state-reasons.input-media-form-parts-change" = "Input Media Form Parts Change"; "printer-state-reasons.input-media-size-change" = "Input Media Size Change"; "printer-state-reasons.input-media-type-change" = "Input Media Type Change"; "printer-state-reasons.input-media-weight-change" = "Input Media Weight Change"; "printer-state-reasons.input-tray-elevation-failure" = "Input Tray Elevation Failure"; "printer-state-reasons.input-tray-missing" = "Input Tray Missing"; "printer-state-reasons.input-tray-position-failure" = "Input Tray Position Failure"; "printer-state-reasons.inserter-added" = "Inserter Added"; "printer-state-reasons.inserter-almost-empty" = "Inserter Almost Empty"; "printer-state-reasons.inserter-almost-full" = "Inserter Almost Full"; "printer-state-reasons.inserter-at-limit" = "Inserter At Limit"; "printer-state-reasons.inserter-closed" = "Inserter Closed"; "printer-state-reasons.inserter-configuration-change" = "Inserter Configuration Change"; "printer-state-reasons.inserter-cover-closed" = "Inserter Cover Closed"; "printer-state-reasons.inserter-cover-open" = "Inserter Cover Open"; "printer-state-reasons.inserter-empty" = "Inserter Empty"; "printer-state-reasons.inserter-full" = "Inserter Full"; "printer-state-reasons.inserter-interlock-closed" = "Inserter Interlock Closed"; "printer-state-reasons.inserter-interlock-open" = "Inserter Interlock Open"; "printer-state-reasons.inserter-jam" = "Inserter Jam"; "printer-state-reasons.inserter-life-almost-over" = "Inserter Life Almost Over"; "printer-state-reasons.inserter-life-over" = "Inserter Life Over"; "printer-state-reasons.inserter-memory-exhausted" = "Inserter Memory Exhausted"; "printer-state-reasons.inserter-missing" = "Inserter Missing"; "printer-state-reasons.inserter-motor-failure" = "Inserter Motor Failure"; "printer-state-reasons.inserter-near-limit" = "Inserter Near Limit"; "printer-state-reasons.inserter-offline" = "Inserter Offline"; "printer-state-reasons.inserter-opened" = "Inserter Opened"; "printer-state-reasons.inserter-over-temperature" = "Inserter Over Temperature"; "printer-state-reasons.inserter-power-saver" = "Inserter Power Saver"; "printer-state-reasons.inserter-recoverable-failure" = "Inserter Recoverable Failure"; "printer-state-reasons.inserter-recoverable-storage" = "Inserter Recoverable Storage"; "printer-state-reasons.inserter-removed" = "Inserter Removed"; "printer-state-reasons.inserter-resource-added" = "Inserter Resource Added"; "printer-state-reasons.inserter-resource-removed" = "Inserter Resource Removed"; "printer-state-reasons.inserter-thermistor-failure" = "Inserter Thermistor Failure"; "printer-state-reasons.inserter-timing-failure" = "Inserter Timing Failure"; "printer-state-reasons.inserter-turned-off" = "Inserter Turned Off"; "printer-state-reasons.inserter-turned-on" = "Inserter Turned On"; "printer-state-reasons.inserter-under-temperature" = "Inserter Under Temperature"; "printer-state-reasons.inserter-unrecoverable-failure" = "Inserter Unrecoverable Failure"; "printer-state-reasons.inserter-unrecoverable-storage-error" = "Inserter Unrecoverable Storage Error"; "printer-state-reasons.inserter-warming-up" = "Inserter Warming Up"; "printer-state-reasons.interlock-closed" = "Interlock Closed"; "printer-state-reasons.interlock-open" = "Interlock Open"; "printer-state-reasons.interpreter-cartridge-added" = "Interpreter Cartridge Added"; "printer-state-reasons.interpreter-cartridge-deleted" = "Interpreter Cartridge Removed"; "printer-state-reasons.interpreter-complex-page-encountered" = "Interpreter Complex Page Encountered"; "printer-state-reasons.interpreter-memory-decrease" = "Interpreter Memory Decrease"; "printer-state-reasons.interpreter-memory-increase" = "Interpreter Memory Increase"; "printer-state-reasons.interpreter-resource-added" = "Interpreter Resource Added"; "printer-state-reasons.interpreter-resource-deleted" = "Interpreter Resource Deleted"; "printer-state-reasons.interpreter-resource-unavailable" = "Interpreter Resource Unavailable"; "printer-state-reasons.lamp-at-eol" = "Lamp At End of Life"; "printer-state-reasons.lamp-failure" = "Lamp Failure"; "printer-state-reasons.lamp-near-eol" = "Lamp Near End of Life"; "printer-state-reasons.laser-at-eol" = "Laser At End of Life"; "printer-state-reasons.laser-failure" = "Laser Failure"; "printer-state-reasons.laser-near-eol" = "Laser Near End of Life"; "printer-state-reasons.make-envelope-added" = "Envelope Maker Added"; "printer-state-reasons.make-envelope-almost-empty" = "Envelope Maker Almost Empty"; "printer-state-reasons.make-envelope-almost-full" = "Envelope Maker Almost Full"; "printer-state-reasons.make-envelope-at-limit" = "Envelope Maker At Limit"; "printer-state-reasons.make-envelope-closed" = "Envelope Maker Closed"; "printer-state-reasons.make-envelope-configuration-change" = "Envelope Maker Configuration Change"; "printer-state-reasons.make-envelope-cover-closed" = "Envelope Maker Cover Closed"; "printer-state-reasons.make-envelope-cover-open" = "Envelope Maker Cover Open"; "printer-state-reasons.make-envelope-empty" = "Envelope Maker Empty"; "printer-state-reasons.make-envelope-full" = "Envelope Maker Full"; "printer-state-reasons.make-envelope-interlock-closed" = "Envelope Maker Interlock Closed"; "printer-state-reasons.make-envelope-interlock-open" = "Envelope Maker Interlock Open"; "printer-state-reasons.make-envelope-jam" = "Envelope Maker Jam"; "printer-state-reasons.make-envelope-life-almost-over" = "Envelope Maker Life Almost Over"; "printer-state-reasons.make-envelope-life-over" = "Envelope Maker Life Over"; "printer-state-reasons.make-envelope-memory-exhausted" = "Envelope Maker Memory Exhausted"; "printer-state-reasons.make-envelope-missing" = "Envelope Maker Missing"; "printer-state-reasons.make-envelope-motor-failure" = "Envelope Maker Motor Failure"; "printer-state-reasons.make-envelope-near-limit" = "Envelope Maker Near Limit"; "printer-state-reasons.make-envelope-offline" = "Envelope Maker Offline"; "printer-state-reasons.make-envelope-opened" = "Envelope Maker Opened"; "printer-state-reasons.make-envelope-over-temperature" = "Envelope Maker Over Temperature"; "printer-state-reasons.make-envelope-power-saver" = "Envelope Maker Power Saver"; "printer-state-reasons.make-envelope-recoverable-failure" = "Envelope Maker Recoverable Failure"; "printer-state-reasons.make-envelope-recoverable-storage" = "Envelope Maker Recoverable Storage"; "printer-state-reasons.make-envelope-removed" = "Envelope Maker Removed"; "printer-state-reasons.make-envelope-resource-added" = "Envelope Maker Resource Added"; "printer-state-reasons.make-envelope-resource-removed" = "Envelope Maker Resource Removed"; "printer-state-reasons.make-envelope-thermistor-failure" = "Envelope Maker Thermistor Failure"; "printer-state-reasons.make-envelope-timing-failure" = "Envelope Maker Timing Failure"; "printer-state-reasons.make-envelope-turned-off" = "Envelope Maker Turned Off"; "printer-state-reasons.make-envelope-turned-on" = "Envelope Maker Turned On"; "printer-state-reasons.make-envelope-under-temperature" = "Envelope Maker Under Temperature"; "printer-state-reasons.make-envelope-unrecoverable-failure" = "Envelope Maker Unrecoverable Failure"; "printer-state-reasons.make-envelope-unrecoverable-storage-error" = "Envelope Maker Unrecoverable Storage Error"; "printer-state-reasons.make-envelope-warming-up" = "Envelope Maker Warming Up"; "printer-state-reasons.marker-adjusting-print-quality" = "Marker Adjusting Print Quality"; "printer-state-reasons.marker-developer-almost-empty" = "Marker Developer Almost Empty"; "printer-state-reasons.marker-developer-empty" = "Marker Developer Empty"; "printer-state-reasons.marker-fuser-thermistor-failure" = "Marker Fuser Thermistor Failure"; "printer-state-reasons.marker-fuser-timing-failure" = "Marker Fuser Timing Failure"; "printer-state-reasons.marker-ink-almost-empty" = "Marker Ink Almost Empty"; "printer-state-reasons.marker-ink-empty" = "Marker Ink Empty"; "printer-state-reasons.marker-print-ribbon-almost-empty" = "Marker Print Ribbon Almost Empty"; "printer-state-reasons.marker-print-ribbon-empty" = "Marker Print Ribbon Empty"; "printer-state-reasons.marker-supply-empty" = "Marker Supply Empty"; "printer-state-reasons.marker-supply-low" = "Marker Supply Low"; "printer-state-reasons.marker-toner-cartridge-missing" = "Marker Toner Cartridge Missing"; "printer-state-reasons.marker-waste-almost-full" = "Marker Waste Almost Full"; "printer-state-reasons.marker-waste-full" = "Marker Waste Full"; "printer-state-reasons.marker-waste-ink-receptacle-almost-full" = "Marker Waste Ink Receptacle Almost Full"; "printer-state-reasons.marker-waste-ink-receptacle-full" = "Marker Waste Ink Receptacle Full"; "printer-state-reasons.marker-waste-toner-receptacle-almost-full" = "Marker Waste Toner Receptacle Almost Full"; "printer-state-reasons.marker-waste-toner-receptacle-full" = "Marker Waste Toner Receptacle Full"; "printer-state-reasons.material-empty" = "Material Empty"; "printer-state-reasons.material-low" = "Material Low"; "printer-state-reasons.material-needed" = "Material Needed"; "printer-state-reasons.media-empty" = "Media Empty"; "printer-state-reasons.media-jam" = "Media Jam"; "printer-state-reasons.media-low" = "Media Low"; "printer-state-reasons.media-needed" = "Media Needed"; "printer-state-reasons.media-path-cannot-duplex-media-selected" = "Media Path Cannot Do 2-Sided Printing"; "printer-state-reasons.media-path-media-tray-almost-full" = "Media Path Media Tray Almost Full"; "printer-state-reasons.media-path-media-tray-full" = "Media Path Media Tray Full"; "printer-state-reasons.media-path-media-tray-missing" = "Media Path Media Tray Missing"; "printer-state-reasons.motor-failure" = "Motor Failure"; "printer-state-reasons.moving-to-paused" = "Moving To Paused"; "printer-state-reasons.none" = "None"; "printer-state-reasons.opc-life-over" = "Optical Photoconductor Life Over"; "printer-state-reasons.opc-near-eol" = "Optical Photoconductor Near End-of-life"; "printer-state-reasons.other" = "Other"; "printer-state-reasons.output-area-almost-full" = "Output Area Almost Full"; "printer-state-reasons.output-area-full" = "Output Area Full"; "printer-state-reasons.output-mailbox-select-failure" = "Output Mailbox Select Failure"; "printer-state-reasons.output-tray-missing" = "Output Tray Missing"; "printer-state-reasons.paused" = "Paused"; "printer-state-reasons.perforater-added" = "Perforater Added"; "printer-state-reasons.perforater-almost-empty" = "Perforater Almost Empty"; "printer-state-reasons.perforater-almost-full" = "Perforater Almost Full"; "printer-state-reasons.perforater-at-limit" = "Perforater At Limit"; "printer-state-reasons.perforater-closed" = "Perforater Closed"; "printer-state-reasons.perforater-configuration-change" = "Perforater Configuration Change"; "printer-state-reasons.perforater-cover-closed" = "Perforater Cover Closed"; "printer-state-reasons.perforater-cover-open" = "Perforater Cover Open"; "printer-state-reasons.perforater-empty" = "Perforater Empty"; "printer-state-reasons.perforater-full" = "Perforater Full"; "printer-state-reasons.perforater-interlock-closed" = "Perforater Interlock Closed"; "printer-state-reasons.perforater-interlock-open" = "Perforater Interlock Open"; "printer-state-reasons.perforater-jam" = "Perforater Jam"; "printer-state-reasons.perforater-life-almost-over" = "Perforater Life Almost Over"; "printer-state-reasons.perforater-life-over" = "Perforater Life Over"; "printer-state-reasons.perforater-memory-exhausted" = "Perforater Memory Exhausted"; "printer-state-reasons.perforater-missing" = "Perforater Missing"; "printer-state-reasons.perforater-motor-failure" = "Perforater Motor Failure"; "printer-state-reasons.perforater-near-limit" = "Perforater Near Limit"; "printer-state-reasons.perforater-offline" = "Perforater Offline"; "printer-state-reasons.perforater-opened" = "Perforater Opened"; "printer-state-reasons.perforater-over-temperature" = "Perforater Over Temperature"; "printer-state-reasons.perforater-power-saver" = "Perforater Power Saver"; "printer-state-reasons.perforater-recoverable-failure" = "Perforater Recoverable Failure"; "printer-state-reasons.perforater-recoverable-storage" = "Perforater Recoverable Storage"; "printer-state-reasons.perforater-removed" = "Perforater Removed"; "printer-state-reasons.perforater-resource-added" = "Perforater Resource Added"; "printer-state-reasons.perforater-resource-removed" = "Perforater Resource Removed"; "printer-state-reasons.perforater-thermistor-failure" = "Perforater Thermistor Failure"; "printer-state-reasons.perforater-timing-failure" = "Perforater Timing Failure"; "printer-state-reasons.perforater-turned-off" = "Perforater Turned Off"; "printer-state-reasons.perforater-turned-on" = "Perforater Turned On"; "printer-state-reasons.perforater-under-temperature" = "Perforater Under Temperature"; "printer-state-reasons.perforater-unrecoverable-failure" = "Perforater Unrecoverable Failure"; "printer-state-reasons.perforater-unrecoverable-storage-error" = "Perforater Unrecoverable Storage Error"; "printer-state-reasons.perforater-warming-up" = "Perforater Warming Up"; "printer-state-reasons.power-down" = "Power Down"; "printer-state-reasons.power-up" = "Power Up"; "printer-state-reasons.printer-manual-reset" = "Printer Reset Manually"; "printer-state-reasons.printer-nms-reset" = "Printer Reset Remotely"; "printer-state-reasons.printer-ready-to-print" = "Printer Ready To Print"; "printer-state-reasons.puncher-added" = "Puncher Added"; "printer-state-reasons.puncher-almost-empty" = "Puncher Almost Empty"; "printer-state-reasons.puncher-almost-full" = "Puncher Almost Full"; "printer-state-reasons.puncher-at-limit" = "Puncher At Limit"; "printer-state-reasons.puncher-closed" = "Puncher Closed"; "printer-state-reasons.puncher-configuration-change" = "Puncher Configuration Change"; "printer-state-reasons.puncher-cover-closed" = "Puncher Cover Closed"; "printer-state-reasons.puncher-cover-open" = "Puncher Cover Open"; "printer-state-reasons.puncher-empty" = "Puncher Empty"; "printer-state-reasons.puncher-full" = "Puncher Full"; "printer-state-reasons.puncher-interlock-closed" = "Puncher Interlock Closed"; "printer-state-reasons.puncher-interlock-open" = "Puncher Interlock Open"; "printer-state-reasons.puncher-jam" = "Puncher Jam"; "printer-state-reasons.puncher-life-almost-over" = "Puncher Life Almost Over"; "printer-state-reasons.puncher-life-over" = "Puncher Life Over"; "printer-state-reasons.puncher-memory-exhausted" = "Puncher Memory Exhausted"; "printer-state-reasons.puncher-missing" = "Puncher Missing"; "printer-state-reasons.puncher-motor-failure" = "Puncher Motor Failure"; "printer-state-reasons.puncher-near-limit" = "Puncher Near Limit"; "printer-state-reasons.puncher-offline" = "Puncher Offline"; "printer-state-reasons.puncher-opened" = "Puncher Opened"; "printer-state-reasons.puncher-over-temperature" = "Puncher Over Temperature"; "printer-state-reasons.puncher-power-saver" = "Puncher Power Saver"; "printer-state-reasons.puncher-recoverable-failure" = "Puncher Recoverable Failure"; "printer-state-reasons.puncher-recoverable-storage" = "Puncher Recoverable Storage"; "printer-state-reasons.puncher-removed" = "Puncher Removed"; "printer-state-reasons.puncher-resource-added" = "Puncher Resource Added"; "printer-state-reasons.puncher-resource-removed" = "Puncher Resource Removed"; "printer-state-reasons.puncher-thermistor-failure" = "Puncher Thermistor Failure"; "printer-state-reasons.puncher-timing-failure" = "Puncher Timing Failure"; "printer-state-reasons.puncher-turned-off" = "Puncher Turned Off"; "printer-state-reasons.puncher-turned-on" = "Puncher Turned On"; "printer-state-reasons.puncher-under-temperature" = "Puncher Under Temperature"; "printer-state-reasons.puncher-unrecoverable-failure" = "Puncher Unrecoverable Failure"; "printer-state-reasons.puncher-unrecoverable-storage-error" = "Puncher Unrecoverable Storage Error"; "printer-state-reasons.puncher-warming-up" = "Puncher Warming Up"; "printer-state-reasons.separation-cutter-added" = "Separation Cutter Added"; "printer-state-reasons.separation-cutter-almost-empty" = "Separation Cutter Almost Empty"; "printer-state-reasons.separation-cutter-almost-full" = "Separation Cutter Almost Full"; "printer-state-reasons.separation-cutter-at-limit" = "Separation Cutter At Limit"; "printer-state-reasons.separation-cutter-closed" = "Separation Cutter Closed"; "printer-state-reasons.separation-cutter-configuration-change" = "Separation Cutter Configuration Change"; "printer-state-reasons.separation-cutter-cover-closed" = "Separation Cutter Cover Closed"; "printer-state-reasons.separation-cutter-cover-open" = "Separation Cutter Cover Open"; "printer-state-reasons.separation-cutter-empty" = "Separation Cutter Empty"; "printer-state-reasons.separation-cutter-full" = "Separation Cutter Full"; "printer-state-reasons.separation-cutter-interlock-closed" = "Separation Cutter Interlock Closed"; "printer-state-reasons.separation-cutter-interlock-open" = "Separation Cutter Interlock Open"; "printer-state-reasons.separation-cutter-jam" = "Separation Cutter Jam"; "printer-state-reasons.separation-cutter-life-almost-over" = "Separation Cutter Life Almost Over"; "printer-state-reasons.separation-cutter-life-over" = "Separation Cutter Life Over"; "printer-state-reasons.separation-cutter-memory-exhausted" = "Separation Cutter Memory Exhausted"; "printer-state-reasons.separation-cutter-missing" = "Separation Cutter Missing"; "printer-state-reasons.separation-cutter-motor-failure" = "Separation Cutter Motor Failure"; "printer-state-reasons.separation-cutter-near-limit" = "Separation Cutter Near Limit"; "printer-state-reasons.separation-cutter-offline" = "Separation Cutter Offline"; "printer-state-reasons.separation-cutter-opened" = "Separation Cutter Opened"; "printer-state-reasons.separation-cutter-over-temperature" = "Separation Cutter Over Temperature"; "printer-state-reasons.separation-cutter-power-saver" = "Separation Cutter Power Saver"; "printer-state-reasons.separation-cutter-recoverable-failure" = "Separation Cutter Recoverable Failure"; "printer-state-reasons.separation-cutter-recoverable-storage" = "Separation Cutter Recoverable Storage"; "printer-state-reasons.separation-cutter-removed" = "Separation Cutter Removed"; "printer-state-reasons.separation-cutter-resource-added" = "Separation Cutter Resource Added"; "printer-state-reasons.separation-cutter-resource-removed" = "Separation Cutter Resource Removed"; "printer-state-reasons.separation-cutter-thermistor-failure" = "Separation Cutter Thermistor Failure"; "printer-state-reasons.separation-cutter-timing-failure" = "Separation Cutter Timing Failure"; "printer-state-reasons.separation-cutter-turned-off" = "Separation Cutter Turned Off"; "printer-state-reasons.separation-cutter-turned-on" = "Separation Cutter Turned On"; "printer-state-reasons.separation-cutter-under-temperature" = "Separation Cutter Under Temperature"; "printer-state-reasons.separation-cutter-unrecoverable-failure" = "Separation Cutter Unrecoverable Failure"; "printer-state-reasons.separation-cutter-unrecoverable-storage-error" = "Separation Cutter Unrecoverable Storage Error"; "printer-state-reasons.separation-cutter-warming-up" = "Separation Cutter Warming Up"; "printer-state-reasons.sheet-rotator-added" = "Sheet Rotator Added"; "printer-state-reasons.sheet-rotator-almost-empty" = "Sheet Rotator Almost Empty"; "printer-state-reasons.sheet-rotator-almost-full" = "Sheet Rotator Almost Full"; "printer-state-reasons.sheet-rotator-at-limit" = "Sheet Rotator At Limit"; "printer-state-reasons.sheet-rotator-closed" = "Sheet Rotator Closed"; "printer-state-reasons.sheet-rotator-configuration-change" = "Sheet Rotator Configuration Change"; "printer-state-reasons.sheet-rotator-cover-closed" = "Sheet Rotator Cover Closed"; "printer-state-reasons.sheet-rotator-cover-open" = "Sheet Rotator Cover Open"; "printer-state-reasons.sheet-rotator-empty" = "Sheet Rotator Empty"; "printer-state-reasons.sheet-rotator-full" = "Sheet Rotator Full"; "printer-state-reasons.sheet-rotator-interlock-closed" = "Sheet Rotator Interlock Closed"; "printer-state-reasons.sheet-rotator-interlock-open" = "Sheet Rotator Interlock Open"; "printer-state-reasons.sheet-rotator-jam" = "Sheet Rotator Jam"; "printer-state-reasons.sheet-rotator-life-almost-over" = "Sheet Rotator Life Almost Over"; "printer-state-reasons.sheet-rotator-life-over" = "Sheet Rotator Life Over"; "printer-state-reasons.sheet-rotator-memory-exhausted" = "Sheet Rotator Memory Exhausted"; "printer-state-reasons.sheet-rotator-missing" = "Sheet Rotator Missing"; "printer-state-reasons.sheet-rotator-motor-failure" = "Sheet Rotator Motor Failure"; "printer-state-reasons.sheet-rotator-near-limit" = "Sheet Rotator Near Limit"; "printer-state-reasons.sheet-rotator-offline" = "Sheet Rotator Offline"; "printer-state-reasons.sheet-rotator-opened" = "Sheet Rotator Opened"; "printer-state-reasons.sheet-rotator-over-temperature" = "Sheet Rotator Over Temperature"; "printer-state-reasons.sheet-rotator-power-saver" = "Sheet Rotator Power Saver"; "printer-state-reasons.sheet-rotator-recoverable-failure" = "Sheet Rotator Recoverable Failure"; "printer-state-reasons.sheet-rotator-recoverable-storage" = "Sheet Rotator Recoverable Storage"; "printer-state-reasons.sheet-rotator-removed" = "Sheet Rotator Removed"; "printer-state-reasons.sheet-rotator-resource-added" = "Sheet Rotator Resource Added"; "printer-state-reasons.sheet-rotator-resource-removed" = "Sheet Rotator Resource Removed"; "printer-state-reasons.sheet-rotator-thermistor-failure" = "Sheet Rotator Thermistor Failure"; "printer-state-reasons.sheet-rotator-timing-failure" = "Sheet Rotator Timing Failure"; "printer-state-reasons.sheet-rotator-turned-off" = "Sheet Rotator Turned Off"; "printer-state-reasons.sheet-rotator-turned-on" = "Sheet Rotator Turned On"; "printer-state-reasons.sheet-rotator-under-temperature" = "Sheet Rotator Under Temperature"; "printer-state-reasons.sheet-rotator-unrecoverable-failure" = "Sheet Rotator Unrecoverable Failure"; "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" = "Sheet Rotator Unrecoverable Storage Error"; "printer-state-reasons.sheet-rotator-warming-up" = "Sheet Rotator Warming Up"; "printer-state-reasons.shutdown" = "Shutdown"; "printer-state-reasons.slitter-added" = "Slitter Added"; "printer-state-reasons.slitter-almost-empty" = "Slitter Almost Empty"; "printer-state-reasons.slitter-almost-full" = "Slitter Almost Full"; "printer-state-reasons.slitter-at-limit" = "Slitter At Limit"; "printer-state-reasons.slitter-closed" = "Slitter Closed"; "printer-state-reasons.slitter-configuration-change" = "Slitter Configuration Change"; "printer-state-reasons.slitter-cover-closed" = "Slitter Cover Closed"; "printer-state-reasons.slitter-cover-open" = "Slitter Cover Open"; "printer-state-reasons.slitter-empty" = "Slitter Empty"; "printer-state-reasons.slitter-full" = "Slitter Full"; "printer-state-reasons.slitter-interlock-closed" = "Slitter Interlock Closed"; "printer-state-reasons.slitter-interlock-open" = "Slitter Interlock Open"; "printer-state-reasons.slitter-jam" = "Slitter Jam"; "printer-state-reasons.slitter-life-almost-over" = "Slitter Life Almost Over"; "printer-state-reasons.slitter-life-over" = "Slitter Life Over"; "printer-state-reasons.slitter-memory-exhausted" = "Slitter Memory Exhausted"; "printer-state-reasons.slitter-missing" = "Slitter Missing"; "printer-state-reasons.slitter-motor-failure" = "Slitter Motor Failure"; "printer-state-reasons.slitter-near-limit" = "Slitter Near Limit"; "printer-state-reasons.slitter-offline" = "Slitter Offline"; "printer-state-reasons.slitter-opened" = "Slitter Opened"; "printer-state-reasons.slitter-over-temperature" = "Slitter Over Temperature"; "printer-state-reasons.slitter-power-saver" = "Slitter Power Saver"; "printer-state-reasons.slitter-recoverable-failure" = "Slitter Recoverable Failure"; "printer-state-reasons.slitter-recoverable-storage" = "Slitter Recoverable Storage"; "printer-state-reasons.slitter-removed" = "Slitter Removed"; "printer-state-reasons.slitter-resource-added" = "Slitter Resource Added"; "printer-state-reasons.slitter-resource-removed" = "Slitter Resource Removed"; "printer-state-reasons.slitter-thermistor-failure" = "Slitter Thermistor Failure"; "printer-state-reasons.slitter-timing-failure" = "Slitter Timing Failure"; "printer-state-reasons.slitter-turned-off" = "Slitter Turned Off"; "printer-state-reasons.slitter-turned-on" = "Slitter Turned On"; "printer-state-reasons.slitter-under-temperature" = "Slitter Under Temperature"; "printer-state-reasons.slitter-unrecoverable-failure" = "Slitter Unrecoverable Failure"; "printer-state-reasons.slitter-unrecoverable-storage-error" = "Slitter Unrecoverable Storage Error"; "printer-state-reasons.slitter-warming-up" = "Slitter Warming Up"; "printer-state-reasons.spool-area-full" = "Spool Area Full"; "printer-state-reasons.stacker-added" = "Stacker Added"; "printer-state-reasons.stacker-almost-empty" = "Stacker Almost Empty"; "printer-state-reasons.stacker-almost-full" = "Stacker Almost Full"; "printer-state-reasons.stacker-at-limit" = "Stacker At Limit"; "printer-state-reasons.stacker-closed" = "Stacker Closed"; "printer-state-reasons.stacker-configuration-change" = "Stacker Configuration Change"; "printer-state-reasons.stacker-cover-closed" = "Stacker Cover Closed"; "printer-state-reasons.stacker-cover-open" = "Stacker Cover Open"; "printer-state-reasons.stacker-empty" = "Stacker Empty"; "printer-state-reasons.stacker-full" = "Stacker Full"; "printer-state-reasons.stacker-interlock-closed" = "Stacker Interlock Closed"; "printer-state-reasons.stacker-interlock-open" = "Stacker Interlock Open"; "printer-state-reasons.stacker-jam" = "Stacker Jam"; "printer-state-reasons.stacker-life-almost-over" = "Stacker Life Almost Over"; "printer-state-reasons.stacker-life-over" = "Stacker Life Over"; "printer-state-reasons.stacker-memory-exhausted" = "Stacker Memory Exhausted"; "printer-state-reasons.stacker-missing" = "Stacker Missing"; "printer-state-reasons.stacker-motor-failure" = "Stacker Motor Failure"; "printer-state-reasons.stacker-near-limit" = "Stacker Near Limit"; "printer-state-reasons.stacker-offline" = "Stacker Offline"; "printer-state-reasons.stacker-opened" = "Stacker Opened"; "printer-state-reasons.stacker-over-temperature" = "Stacker Over Temperature"; "printer-state-reasons.stacker-power-saver" = "Stacker Power Saver"; "printer-state-reasons.stacker-recoverable-failure" = "Stacker Recoverable Failure"; "printer-state-reasons.stacker-recoverable-storage" = "Stacker Recoverable Storage"; "printer-state-reasons.stacker-removed" = "Stacker Removed"; "printer-state-reasons.stacker-resource-added" = "Stacker Resource Added"; "printer-state-reasons.stacker-resource-removed" = "Stacker Resource Removed"; "printer-state-reasons.stacker-thermistor-failure" = "Stacker Thermistor Failure"; "printer-state-reasons.stacker-timing-failure" = "Stacker Timing Failure"; "printer-state-reasons.stacker-turned-off" = "Stacker Turned Off"; "printer-state-reasons.stacker-turned-on" = "Stacker Turned On"; "printer-state-reasons.stacker-under-temperature" = "Stacker Under Temperature"; "printer-state-reasons.stacker-unrecoverable-failure" = "Stacker Unrecoverable Failure"; "printer-state-reasons.stacker-unrecoverable-storage-error" = "Stacker Unrecoverable Storage Error"; "printer-state-reasons.stacker-warming-up" = "Stacker Warming Up"; "printer-state-reasons.stapler-added" = "Stapler Added"; "printer-state-reasons.stapler-almost-empty" = "Stapler Almost Empty"; "printer-state-reasons.stapler-almost-full" = "Stapler Almost Full"; "printer-state-reasons.stapler-at-limit" = "Stapler At Limit"; "printer-state-reasons.stapler-closed" = "Stapler Closed"; "printer-state-reasons.stapler-configuration-change" = "Stapler Configuration Change"; "printer-state-reasons.stapler-cover-closed" = "Stapler Cover Closed"; "printer-state-reasons.stapler-cover-open" = "Stapler Cover Open"; "printer-state-reasons.stapler-empty" = "Stapler Empty"; "printer-state-reasons.stapler-full" = "Stapler Full"; "printer-state-reasons.stapler-interlock-closed" = "Stapler Interlock Closed"; "printer-state-reasons.stapler-interlock-open" = "Stapler Interlock Open"; "printer-state-reasons.stapler-jam" = "Stapler Jam"; "printer-state-reasons.stapler-life-almost-over" = "Stapler Life Almost Over"; "printer-state-reasons.stapler-life-over" = "Stapler Life Over"; "printer-state-reasons.stapler-memory-exhausted" = "Stapler Memory Exhausted"; "printer-state-reasons.stapler-missing" = "Stapler Missing"; "printer-state-reasons.stapler-motor-failure" = "Stapler Motor Failure"; "printer-state-reasons.stapler-near-limit" = "Stapler Near Limit"; "printer-state-reasons.stapler-offline" = "Stapler Offline"; "printer-state-reasons.stapler-opened" = "Stapler Opened"; "printer-state-reasons.stapler-over-temperature" = "Stapler Over Temperature"; "printer-state-reasons.stapler-power-saver" = "Stapler Power Saver"; "printer-state-reasons.stapler-recoverable-failure" = "Stapler Recoverable Failure"; "printer-state-reasons.stapler-recoverable-storage" = "Stapler Recoverable Storage"; "printer-state-reasons.stapler-removed" = "Stapler Removed"; "printer-state-reasons.stapler-resource-added" = "Stapler Resource Added"; "printer-state-reasons.stapler-resource-removed" = "Stapler Resource Removed"; "printer-state-reasons.stapler-thermistor-failure" = "Stapler Thermistor Failure"; "printer-state-reasons.stapler-timing-failure" = "Stapler Timing Failure"; "printer-state-reasons.stapler-turned-off" = "Stapler Turned Off"; "printer-state-reasons.stapler-turned-on" = "Stapler Turned On"; "printer-state-reasons.stapler-under-temperature" = "Stapler Under Temperature"; "printer-state-reasons.stapler-unrecoverable-failure" = "Stapler Unrecoverable Failure"; "printer-state-reasons.stapler-unrecoverable-storage-error" = "Stapler Unrecoverable Storage Error"; "printer-state-reasons.stapler-warming-up" = "Stapler Warming Up"; "printer-state-reasons.stitcher-added" = "Stitcher Added"; "printer-state-reasons.stitcher-almost-empty" = "Stitcher Almost Empty"; "printer-state-reasons.stitcher-almost-full" = "Stitcher Almost Full"; "printer-state-reasons.stitcher-at-limit" = "Stitcher At Limit"; "printer-state-reasons.stitcher-closed" = "Stitcher Closed"; "printer-state-reasons.stitcher-configuration-change" = "Stitcher Configuration Change"; "printer-state-reasons.stitcher-cover-closed" = "Stitcher Cover Closed"; "printer-state-reasons.stitcher-cover-open" = "Stitcher Cover Open"; "printer-state-reasons.stitcher-empty" = "Stitcher Empty"; "printer-state-reasons.stitcher-full" = "Stitcher Full"; "printer-state-reasons.stitcher-interlock-closed" = "Stitcher Interlock Closed"; "printer-state-reasons.stitcher-interlock-open" = "Stitcher Interlock Open"; "printer-state-reasons.stitcher-jam" = "Stitcher Jam"; "printer-state-reasons.stitcher-life-almost-over" = "Stitcher Life Almost Over"; "printer-state-reasons.stitcher-life-over" = "Stitcher Life Over"; "printer-state-reasons.stitcher-memory-exhausted" = "Stitcher Memory Exhausted"; "printer-state-reasons.stitcher-missing" = "Stitcher Missing"; "printer-state-reasons.stitcher-motor-failure" = "Stitcher Motor Failure"; "printer-state-reasons.stitcher-near-limit" = "Stitcher Near Limit"; "printer-state-reasons.stitcher-offline" = "Stitcher Offline"; "printer-state-reasons.stitcher-opened" = "Stitcher Opened"; "printer-state-reasons.stitcher-over-temperature" = "Stitcher Over Temperature"; "printer-state-reasons.stitcher-power-saver" = "Stitcher Power Saver"; "printer-state-reasons.stitcher-recoverable-failure" = "Stitcher Recoverable Failure"; "printer-state-reasons.stitcher-recoverable-storage" = "Stitcher Recoverable Storage"; "printer-state-reasons.stitcher-removed" = "Stitcher Removed"; "printer-state-reasons.stitcher-resource-added" = "Stitcher Resource Added"; "printer-state-reasons.stitcher-resource-removed" = "Stitcher Resource Removed"; "printer-state-reasons.stitcher-thermistor-failure" = "Stitcher Thermistor Failure"; "printer-state-reasons.stitcher-timing-failure" = "Stitcher Timing Failure"; "printer-state-reasons.stitcher-turned-off" = "Stitcher Turned Off"; "printer-state-reasons.stitcher-turned-on" = "Stitcher Turned On"; "printer-state-reasons.stitcher-under-temperature" = "Stitcher Under Temperature"; "printer-state-reasons.stitcher-unrecoverable-failure" = "Stitcher Unrecoverable Failure"; "printer-state-reasons.stitcher-unrecoverable-storage-error" = "Stitcher Unrecoverable Storage Error"; "printer-state-reasons.stitcher-warming-up" = "Stitcher Warming Up"; "printer-state-reasons.stopped-partly" = "Stopped Partly"; "printer-state-reasons.stopping" = "Stopping"; "printer-state-reasons.subunit-added" = "Subunit Added"; "printer-state-reasons.subunit-almost-empty" = "Subunit Almost Empty"; "printer-state-reasons.subunit-almost-full" = "Subunit Almost Full"; "printer-state-reasons.subunit-at-limit" = "Subunit At Limit"; "printer-state-reasons.subunit-closed" = "Subunit Closed"; "printer-state-reasons.subunit-empty" = "Subunit Empty"; "printer-state-reasons.subunit-full" = "Subunit Full"; "printer-state-reasons.subunit-life-almost-over" = "Subunit Life Almost Over"; "printer-state-reasons.subunit-life-over" = "Subunit Life Over"; "printer-state-reasons.subunit-memory-exhausted" = "Subunit Memory Exhausted"; "printer-state-reasons.subunit-missing" = "Subunit Missing"; "printer-state-reasons.subunit-motor-failure" = "Subunit Motor Failure"; "printer-state-reasons.subunit-near-limit" = "Subunit Near Limit"; "printer-state-reasons.subunit-offline" = "Subunit Offline"; "printer-state-reasons.subunit-opened" = "Subunit Opened"; "printer-state-reasons.subunit-over-temperature" = "Subunit Over Temperature"; "printer-state-reasons.subunit-power-saver" = "Subunit Power Saver"; "printer-state-reasons.subunit-recoverable-failure" = "Subunit Recoverable Failure"; "printer-state-reasons.subunit-recoverable-storage" = "Subunit Recoverable Storage"; "printer-state-reasons.subunit-removed" = "Subunit Removed"; "printer-state-reasons.subunit-resource-added" = "Subunit Resource Added"; "printer-state-reasons.subunit-resource-removed" = "Subunit Resource Removed"; "printer-state-reasons.subunit-thermistor-failure" = "Subunit Thermistor Failure"; "printer-state-reasons.subunit-timing-Failure" = "Subunit Timing Failure"; "printer-state-reasons.subunit-turned-off" = "Subunit Turned Off"; "printer-state-reasons.subunit-turned-on" = "Subunit Turned On"; "printer-state-reasons.subunit-under-temperature" = "Subunit Under Temperature"; "printer-state-reasons.subunit-unrecoverable-failure" = "Subunit Unrecoverable Failure"; "printer-state-reasons.subunit-unrecoverable-storage" = "Subunit Unrecoverable Storage"; "printer-state-reasons.subunit-warming-up" = "Subunit Warming Up"; "printer-state-reasons.timed-out" = "Timed Out"; "printer-state-reasons.toner-empty" = "Toner Empty"; "printer-state-reasons.toner-low" = "Toner Low"; "printer-state-reasons.trimmer-added" = "Trimmer Added"; "printer-state-reasons.trimmer-almost-empty" = "Trimmer Almost Empty"; "printer-state-reasons.trimmer-almost-full" = "Trimmer Almost Full"; "printer-state-reasons.trimmer-at-limit" = "Trimmer At Limit"; "printer-state-reasons.trimmer-closed" = "Trimmer Closed"; "printer-state-reasons.trimmer-configuration-change" = "Trimmer Configuration Change"; "printer-state-reasons.trimmer-cover-closed" = "Trimmer Cover Closed"; "printer-state-reasons.trimmer-cover-open" = "Trimmer Cover Open"; "printer-state-reasons.trimmer-empty" = "Trimmer Empty"; "printer-state-reasons.trimmer-full" = "Trimmer Full"; "printer-state-reasons.trimmer-interlock-closed" = "Trimmer Interlock Closed"; "printer-state-reasons.trimmer-interlock-open" = "Trimmer Interlock Open"; "printer-state-reasons.trimmer-jam" = "Trimmer Jam"; "printer-state-reasons.trimmer-life-almost-over" = "Trimmer Life Almost Over"; "printer-state-reasons.trimmer-life-over" = "Trimmer Life Over"; "printer-state-reasons.trimmer-memory-exhausted" = "Trimmer Memory Exhausted"; "printer-state-reasons.trimmer-missing" = "Trimmer Missing"; "printer-state-reasons.trimmer-motor-failure" = "Trimmer Motor Failure"; "printer-state-reasons.trimmer-near-limit" = "Trimmer Near Limit"; "printer-state-reasons.trimmer-offline" = "Trimmer Offline"; "printer-state-reasons.trimmer-opened" = "Trimmer Opened"; "printer-state-reasons.trimmer-over-temperature" = "Trimmer Over Temperature"; "printer-state-reasons.trimmer-power-saver" = "Trimmer Power Saver"; "printer-state-reasons.trimmer-recoverable-failure" = "Trimmer Recoverable Failure"; "printer-state-reasons.trimmer-recoverable-storage" = "Trimmer Recoverable Storage"; "printer-state-reasons.trimmer-removed" = "Trimmer Removed"; "printer-state-reasons.trimmer-resource-added" = "Trimmer Resource Added"; "printer-state-reasons.trimmer-resource-removed" = "Trimmer Resource Removed"; "printer-state-reasons.trimmer-thermistor-failure" = "Trimmer Thermistor Failure"; "printer-state-reasons.trimmer-timing-failure" = "Trimmer Timing Failure"; "printer-state-reasons.trimmer-turned-off" = "Trimmer Turned Off"; "printer-state-reasons.trimmer-turned-on" = "Trimmer Turned On"; "printer-state-reasons.trimmer-under-temperature" = "Trimmer Under Temperature"; "printer-state-reasons.trimmer-unrecoverable-failure" = "Trimmer Unrecoverable Failure"; "printer-state-reasons.trimmer-unrecoverable-storage-error" = "Trimmer Unrecoverable Storage Error"; "printer-state-reasons.trimmer-warming-up" = "Trimmer Warming Up"; "printer-state-reasons.unknown" = "Unknown"; "printer-state-reasons.wrapper-added" = "Wrapper Added"; "printer-state-reasons.wrapper-almost-empty" = "Wrapper Almost Empty"; "printer-state-reasons.wrapper-almost-full" = "Wrapper Almost Full"; "printer-state-reasons.wrapper-at-limit" = "Wrapper At Limit"; "printer-state-reasons.wrapper-closed" = "Wrapper Closed"; "printer-state-reasons.wrapper-configuration-change" = "Wrapper Configuration Change"; "printer-state-reasons.wrapper-cover-closed" = "Wrapper Cover Closed"; "printer-state-reasons.wrapper-cover-open" = "Wrapper Cover Open"; "printer-state-reasons.wrapper-empty" = "Wrapper Empty"; "printer-state-reasons.wrapper-full" = "Wrapper Full"; "printer-state-reasons.wrapper-interlock-closed" = "Wrapper Interlock Closed"; "printer-state-reasons.wrapper-interlock-open" = "Wrapper Interlock Open"; "printer-state-reasons.wrapper-jam" = "Wrapper Jam"; "printer-state-reasons.wrapper-life-almost-over" = "Wrapper Life Almost Over"; "printer-state-reasons.wrapper-life-over" = "Wrapper Life Over"; "printer-state-reasons.wrapper-memory-exhausted" = "Wrapper Memory Exhausted"; "printer-state-reasons.wrapper-missing" = "Wrapper Missing"; "printer-state-reasons.wrapper-motor-failure" = "Wrapper Motor Failure"; "printer-state-reasons.wrapper-near-limit" = "Wrapper Near Limit"; "printer-state-reasons.wrapper-offline" = "Wrapper Offline"; "printer-state-reasons.wrapper-opened" = "Wrapper Opened"; "printer-state-reasons.wrapper-over-temperature" = "Wrapper Over Temperature"; "printer-state-reasons.wrapper-power-saver" = "Wrapper Power Saver"; "printer-state-reasons.wrapper-recoverable-failure" = "Wrapper Recoverable Failure"; "printer-state-reasons.wrapper-recoverable-storage" = "Wrapper Recoverable Storage"; "printer-state-reasons.wrapper-removed" = "Wrapper Removed"; "printer-state-reasons.wrapper-resource-added" = "Wrapper Resource Added"; "printer-state-reasons.wrapper-resource-removed" = "Wrapper Resource Removed"; "printer-state-reasons.wrapper-thermistor-failure" = "Wrapper Thermistor Failure"; "printer-state-reasons.wrapper-timing-failure" = "Wrapper Timing Failure"; "printer-state-reasons.wrapper-turned-off" = "Wrapper Turned Off"; "printer-state-reasons.wrapper-turned-on" = "Wrapper Turned On"; "printer-state-reasons.wrapper-under-temperature" = "Wrapper Under Temperature"; "printer-state-reasons.wrapper-unrecoverable-failure" = "Wrapper Unrecoverable Failure"; "printer-state-reasons.wrapper-unrecoverable-storage-error" = "Wrapper Unrecoverable Storage Error"; "printer-state-reasons.wrapper-warming-up" = "Wrapper Warming Up"; "printer-state.3" = "Idle"; "printer-state.4" = "Processing"; "printer-state.5" = "Stopped"; "printer-up-time" = "Printer Uptime"; "proof-print" = "Proof Print"; "proof-print-copies" = "Proof Print Copies"; "punching" = "Punching"; "punching-locations" = "Punching Locations"; "punching-offset" = "Punching Offset"; "punching-reference-edge" = "Punch Edge"; "punching-reference-edge.bottom" = "Bottom"; "punching-reference-edge.left" = "Left"; "punching-reference-edge.right" = "Right"; "punching-reference-edge.top" = "Top"; "requested-attributes" = "Requested Attributes"; "retry-interval" = "Retry Interval"; "retry-time-out" = "Retry Timeout"; "save-disposition" = "Save Disposition"; "save-disposition.none" = "None"; "save-disposition.print-save" = "Print and Save"; "save-disposition.save-only" = "Save Only"; "save-document-format" = "Save Document Format"; "save-info" = "Save Info"; "save-location" = "Save Location"; "save-name" = "Save Name"; "separator-sheets" = "Separator Sheets"; "separator-sheets-type" = "Type of Separator Sheets"; "separator-sheets-type.both-sheets" = "Start and End Sheets"; "separator-sheets-type.end-sheet" = "End Sheet"; "separator-sheets-type.none" = "None"; "separator-sheets-type.slip-sheets" = "Slip Sheets"; "separator-sheets-type.start-sheet" = "Start Sheet"; "sheet-collate" = "Collate Copies"; "sheet-collate.collated" = "Yes"; "sheet-collate.uncollated" = "No"; "sides" = "2-Sided Printing"; "sides.one-sided" = "Off"; "sides.two-sided-long-edge" = "On (Portrait)"; "sides.two-sided-short-edge" = "On (Landscape)"; "status-message" = "Status Message"; "stitching" = "Staple"; "stitching-angle" = "Stitching Angle"; "stitching-locations" = "Stitching Locations"; "stitching-method" = "Staple Method"; "stitching-method.auto" = "Automatic"; "stitching-method.crimp" = "Crimp"; "stitching-method.wire" = "Wire"; "stitching-offset" = "Stitching Offset"; "stitching-reference-edge" = "Staple Edge"; "stitching-reference-edge.bottom" = "Bottom"; "stitching-reference-edge.left" = "Left"; "stitching-reference-edge.right" = "Right"; "stitching-reference-edge.top" = "Top"; "subject" = "Subject"; "t33-subaddress" = "T33 Subaddress"; "to-name" = "To Name"; "transmission-status" = "Transmission Status"; "transmission-status.3" = "Pending"; "transmission-status.4" = "Pending Retry"; "transmission-status.5" = "Processing"; "transmission-status.7" = "Canceled"; "transmission-status.8" = "Aborted"; "transmission-status.9" = "Completed"; "trimming" = "Cut"; "trimming-offset" = "Cut Position"; "trimming-reference-edge" = "Cut Edge"; "trimming-reference-edge.bottom" = "Bottom"; "trimming-reference-edge.left" = "Left"; "trimming-reference-edge.right" = "Right"; "trimming-reference-edge.top" = "Top"; "trimming-type" = "Type of Cut"; "trimming-type.draw-line" = "Draw Line"; "trimming-type.full" = "Full"; "trimming-type.partial" = "Partial"; "trimming-type.perforate" = "Perforate"; "trimming-type.score" = "Score"; "trimming-type.tab" = "Tab"; "trimming-when" = "Cut After"; "trimming-when.after-documents" = "Every Document"; "trimming-when.after-job" = "Job"; "trimming-when.after-sets" = "Every Set"; "trimming-when.after-sheets" = "Every Page"; "x-accuracy" = "X Accuracy"; "x-dimension" = "X Dimension"; "x-offset" = "X Offset"; "x-origin" = "X Origin"; "y-accuracy" = "Y Accuracy"; "y-dimension" = "Y Dimension"; "y-offset" = "Y Offset"; "y-origin" = "Y Origin"; "z-accuracy" = "Z Accuracy"; "z-dimension" = "Z Dimension"; "z-offset" = "Z Offset"; cups-2.2.7/locale/cups_ca.po000664 000765 000024 00001203107 13255074424 016373 0ustar00msweetstaff000000 000000 # # "$Id$" # # Message catalog template for the Common UNIX Printing System (CUPS). # # Copyright 2007-2015 by Apple Inc. # Copyright 2005-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # # Notes for Translators: # # The following prefixes MUST NOT be translated: "ALERT:", "CRIT:", "INFO:", # "NOTICE:", and "WARNING:". # # The "checkpo" program located in the "locale" source directory can be used # to verify that your translations do not introduce formatting errors or other # problems. Run with: # # cd locale # ./checkpo cups_LL.po # # where "LL" is your locale. # Àngel Mompó , 2011, 2012. # msgid "" msgstr "" "Project-Id-Version: CUPS 1.4.6\n" "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n" "POT-Creation-Date: 2018-03-19 18:36-0400\n" "PO-Revision-Date: 2012-09-29 11:21+0200\n" "Last-Translator: Àngel Mompó \n" "Language-Team: Catalan \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" msgid "\t\t(all)" msgstr "\t\t(tots)" msgid "\t\t(none)" msgstr "\t\t(cap)" #, c-format msgid "\t%d entries" msgstr "\t%d entrades" #, c-format msgid "\t%s" msgstr "\t%s" msgid "\tAfter fault: continue" msgstr "\tDesprés d'una fallada: continua" #, c-format msgid "\tAlerts: %s" msgstr "\tAlertes: %s" msgid "\tBanner required" msgstr "\tNecessita un bàner" msgid "\tCharset sets:" msgstr "\tConjunt de caràcters:" msgid "\tConnection: direct" msgstr "\tConnexió: directa" msgid "\tConnection: remote" msgstr "\tConnexió: remota" msgid "\tContent types: any" msgstr "\tTipus de contingut: qualsevol" msgid "\tDefault page size:" msgstr "\tMida de la pàgina per defecte:" msgid "\tDefault pitch:" msgstr "\tDensitat per defecte:" msgid "\tDefault port settings:" msgstr "\tConfiguració del port per defecte:" #, c-format msgid "\tDescription: %s" msgstr "\tDescripció: %s" msgid "\tForm mounted:" msgstr "\tFormularis muntats:" msgid "\tForms allowed:" msgstr "\tFormularis admesos:" #, c-format msgid "\tInterface: %s.ppd" msgstr "\tInterfície: %s.ppd" #, c-format msgid "\tInterface: %s/ppd/%s.ppd" msgstr "\tInterfície: %s/ppd/%s.ppd" #, c-format msgid "\tLocation: %s" msgstr "\tUbicació: %s" msgid "\tOn fault: no alert" msgstr "\tEn cas de fallada: no avisis" msgid "\tPrinter types: unknown" msgstr "\tTipus d'impresores: desconeguts" #, c-format msgid "\tStatus: %s" msgstr "\tEstat: %s" msgid "\tUsers allowed:" msgstr "\tUsuaris permesos:" msgid "\tUsers denied:" msgstr "\tUsuaris sense permís:" msgid "\tdaemon present" msgstr "\tpresència del dimoni" msgid "\tno entries" msgstr "\tcap entrada" #, c-format msgid "\tprinter is on device '%s' speed -1" msgstr "\tLa impressora és al dispositiu «%s» velocitat -1" msgid "\tprinting is disabled" msgstr "\tLa impressora està deshabilitada" msgid "\tprinting is enabled" msgstr "\tLa impressora està habilitada" #, c-format msgid "\tqueued for %s" msgstr "\ten cua per %s" msgid "\tqueuing is disabled" msgstr "\tla cua està deshabilitada" msgid "\tqueuing is enabled" msgstr "\tla cua està habilitada" msgid "\treason unknown" msgstr "\traó desconeguda" msgid "" "\n" " DETAILED CONFORMANCE TEST RESULTS" msgstr "" "\n" " RESULTAT DETALLAT DEL TEST DE CONFORMITAT" msgid " Ignore specific warnings." msgstr " Ignora els avisos específics." msgid " Issue warnings instead of errors." msgstr " Mostra avisos enlloc d'errors." msgid " REF: Page 15, section 3.1." msgstr " REF: pàgina 15, secció 3.1." msgid " REF: Page 15, section 3.2." msgstr " REF: pàgina 15, secció 3.2." msgid " REF: Page 19, section 3.3." msgstr " REF: pàgina 19, secció 3.3." msgid " REF: Page 20, section 3.4." msgstr " REF: pàgina 20, secció 3.4." msgid " REF: Page 27, section 3.5." msgstr " REF: pàgina 27, secció 3.5." msgid " REF: Page 42, section 5.2." msgstr " REF: pàgina 42, secció 5.2." msgid " REF: Pages 16-17, section 3.2." msgstr " REF: pàgines 16-17, secció 3.2." msgid " REF: Pages 42-45, section 5.2." msgstr " REF: pàgines 42-45, secció 5.2." msgid " REF: Pages 45-46, section 5.2." msgstr " REF: pàgines 45-46, secció 5.2." msgid " REF: Pages 48-49, section 5.2." msgstr " REF: pàgines 48-49, secció 5.2." msgid " REF: Pages 52-54, section 5.2." msgstr " REF: pàgines 52-54, secció 5.2." #, c-format msgid " %-39.39s %.0f bytes" msgstr " %-39.39s %.0f bytes" #, c-format msgid " PASS Default%s" msgstr " VALIDA Default%s" msgid " PASS DefaultImageableArea" msgstr " VALIDA DefaultImageableArea" msgid " PASS DefaultPaperDimension" msgstr " VALIDA DefaultPaperDimension" msgid " PASS FileVersion" msgstr " VALIDA FileVersion" msgid " PASS FormatVersion" msgstr " VALIDA FileVersion" msgid " PASS LanguageEncoding" msgstr " VALIDA LanguageEncoding" msgid " PASS LanguageVersion" msgstr " VALIDA LanguageVersion" msgid " PASS Manufacturer" msgstr " VALIDA Manufacturer" msgid " PASS ModelName" msgstr " VALIDA ModelName" msgid " PASS NickName" msgstr " VALIDA NickName" msgid " PASS PCFileName" msgstr " VALIDA PCFileName" msgid " PASS PSVersion" msgstr " VALIDA PSVersion" msgid " PASS PageRegion" msgstr " VALIDA PageRegion" msgid " PASS PageSize" msgstr " VALIDA PageSize" msgid " PASS Product" msgstr " VALIDA Product" msgid " PASS ShortNickName" msgstr " VALIDA ShortNickName" #, c-format msgid " WARN %s has no corresponding options." msgstr " AVÃS %s no té les opcions corresponents." #, c-format msgid "" " WARN %s shares a common prefix with %s\n" " REF: Page 15, section 3.2." msgstr "" " AVÃS %s té un prefixe comú amb %s\n" " REF: pàgina 15, secció 3.2." #, c-format msgid "" " WARN Duplex option keyword %s may not work as expected and should " "be named Duplex.\n" " REF: Page 122, section 5.17" msgstr "" " AVÃS La paraula clau %s de l'opció dúplex pot no funcionar com " "s'espera i s'hauria de dir Duplex.\n" " REF: pàgina 122, secció 5.17" msgid " WARN File contains a mix of CR, LF, and CR LF line endings." msgstr "" " AVÃS El fitxer conté una barreja de CR, LF, i CR LF com a finals " "de línia." msgid "" " WARN LanguageEncoding required by PPD 4.3 spec.\n" " REF: Pages 56-57, section 5.3." msgstr "" " AVÃS Es requereix un LanguageEncoding segons les espec. del PPD " "4.3\n" " REF: pàgines 56-57, secció 5.3." #, c-format msgid " WARN Line %d only contains whitespace." msgstr " AVÃS La línia %d només conté espais en blanc." msgid "" " WARN Manufacturer required by PPD 4.3 spec.\n" " REF: Pages 58-59, section 5.3." msgstr "" " AVÃS El fabricant requereix les espec. del PPD 4.3.\n" " REF: pàgines 58-59, secció 5.3." msgid "" " WARN Non-Windows PPD files should use lines ending with only LF, " "not CR LF." msgstr "" " AVÃS Els fitxers PPD que no són del Windows han de fer servir " "només LF com a final de línia, no CR LF." #, c-format msgid "" " WARN Obsolete PPD version %.1f.\n" " REF: Page 42, section 5.2." msgstr "" " AVÃS La versió del PPD %.1f és obsoleta!\n" " REF: pàgina 42, secció 5.2." msgid "" " WARN PCFileName longer than 8.3 in violation of PPD spec.\n" " REF: Pages 61-62, section 5.3." msgstr "" " AVÃS El PCFileName és més llarg de 8.3 i viola les espec. del " "PPD.\n" " REF: pàgines 61-62, secció 5.3." msgid "" " WARN PCFileName should contain a unique filename.\n" " REF: Pages 61-62, section 5.3." msgstr "" " AVÃS El PCFileName és més llarg de 8.3 i viola les espec. del " "PPD.\n" " REF: pàgines 61-62, secció 5.3." msgid "" " WARN Protocols contains PJL but JCL attributes are not set.\n" " REF: Pages 78-79, section 5.7." msgstr "" " AVÃS Els protocols contenen el PJL però els atributs del JCL no " "s'han definit.\n" " REF: pàgines 78-79, secció 5.7." msgid "" " WARN Protocols contains both PJL and BCP; expected TBCP.\n" " REF: Pages 78-79, section 5.7." msgstr "" " AVÃS Es protocols contenen tant el PJL com el BCP; s'esperava el " "TBCP.\n" " REF: pàgines 78-79, secció 5.7." msgid "" " WARN ShortNickName required by PPD 4.3 spec.\n" " REF: Pages 64-65, section 5.3." msgstr "" " AVÃS Es requereix un ShortNickName segons les espec.del PPD 4.3.\n" " REF: pàgines 64-65, secció 5.3." msgid " cupsaddsmb [options] -a" msgstr " cupsaddsmb [opcions] -a" msgid " cupstestdsc [options] -" msgstr " cupstestdsc [opcions] -" msgid " program | cupstestppd [options] -" msgstr " programa | cupstestppd [opcions] -" #, c-format msgid "" " %s \"%s %s\" conflicts with \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." msgstr "" " %s «%s %s» entra en conflicte amb «%s %s»\n" " (restricció=«%s %s %s %s»)." #, c-format msgid " %s %s %s does not exist." msgstr " %s %s %s no existeix." #, c-format msgid " %s %s file \"%s\" has the wrong capitalization." msgstr " %s %s el fitxer «%s» fa un ús incorrecte de les majúscules." #, c-format msgid "" " %s Bad %s choice %s.\n" " REF: Page 122, section 5.17" msgstr "" " %s Mala %s elecció %s!\n" " REF: pàgina 122, secció 5.17" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s." msgstr "" " %s UTF-8 incorrecte «%s» a la traducció de l'opció %s, elecció %s." #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s." msgstr " %s UTF-8 Incorrecte «%s» a la traducció de l'opció %s." #, c-format msgid " %s Bad cupsFilter value \"%s\"." msgstr " %s Valor incorrecte del cupsFilter «%s»." #, c-format msgid " %s Bad cupsFilter2 value \"%s\"." msgstr " %s Valor incorrecte del cupsFilter2 «%s»" #, c-format msgid " %s Bad cupsICCProfile %s." msgstr " %s cupsICCProfile incorrecte %s." #, c-format msgid " %s Bad cupsPreFilter value \"%s\"." msgstr " %s Valor de la cupsPreFilter incorrecte «%s»." #, c-format msgid " %s Bad cupsUIConstraints %s: \"%s\"" msgstr " %s cupsUIConstraints incorrecte %s: «%s»" #, c-format msgid " %s Bad language \"%s\"." msgstr " %s language incorrecte «%s»." #, c-format msgid " %s Bad permissions on %s file \"%s\"." msgstr " %s Permisos del fitxer %s incorrectes «%s»." #, c-format msgid " %s Bad spelling of %s - should be %s." msgstr " %s %s Està mal escrit: hauria de ser %s." #, c-format msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID." msgstr " %s No hi pot haver APScanAppPath i APScanAppBundleID alhora." #, c-format msgid " %s Default choices conflicting." msgstr " %s Conflictes amb les opcions per defecte." #, c-format msgid " %s Empty cupsUIConstraints %s" msgstr " %s cupsUIConstraints buit %s" #, c-format msgid " %s Missing \"%s\" translation string for option %s, choice %s." msgstr " %s Falta la traducció de «%s» per l'opció %s, elecció %s." #, c-format msgid " %s Missing \"%s\" translation string for option %s." msgstr " %s Falta la traducció de «%s» per l'opció %s." #, c-format msgid " %s Missing %s file \"%s\"." msgstr " %s Falta el fitxer %s «%s»." #, c-format msgid "" " %s Missing REQUIRED PageRegion option.\n" " REF: Page 100, section 5.14." msgstr "" " %s Falta l'opció PageRegion NECESSÀRIA .\n" " REF: pàgina 100, secció 5.14." #, c-format msgid "" " %s Missing REQUIRED PageSize option.\n" " REF: Page 99, section 5.14." msgstr "" " %s Falta l'opció PageSize NECESSÀRIA.\n" " REF: pàgina 99, secció 5.14." #, c-format msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." msgstr " %s Falta l'elecció *%s %s a UIConstraints «*%s %s *%s %s»." #, c-format msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" msgstr " %s Falta l'elecció *%s %s a cupsUIConstraints %s: «%s»" #, c-format msgid " %s Missing cupsUIResolver %s" msgstr " %s Falta el cupsUIResolver %s" #, c-format msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"." msgstr " %s Falta l'opció %s a UIConstraints «*%s %s *%s %s»." #, c-format msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\"" msgstr " %s Falta l'opció %s a cupsUIConstraints %s: «%s»" #, c-format msgid " %s No base translation \"%s\" is included in file." msgstr " %s No s'ha inclòs cap traducció de base «%s» al fitxer." #, c-format msgid "" " %s REQUIRED %s does not define choice None.\n" " REF: Page 122, section 5.17" msgstr "" " %s NECESSARI %s no defineix l'eleció «Cap»!\n" " REF: pàgina 122, secció 5.17" #, c-format msgid " %s Size \"%s\" defined for %s but not for %s." msgstr " %s Mida \"%s\" definida per %s però no per %s." #, c-format msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)." msgstr " %s Mida \"%s\" té unes dimensions inesperades (%gx%g)." #, c-format msgid " %s Size \"%s\" should be \"%s\"." msgstr " %s Mida «%s» hauria de ser «%s»." #, c-format msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"." msgstr " %s Mida \"%s\" hauria de ser el nom estàndard d'Adobe «%s»." #, c-format msgid " %s cupsICCProfile %s hash value collides with %s." msgstr " %s cupsICCProfile %s el valor resum (hash) col·lideix amb %s." #, c-format msgid " %s cupsUIResolver %s causes a loop." msgstr " %s cupsUIResolver %s entra en bucle." #, c-format msgid "" " %s cupsUIResolver %s does not list at least two different options." msgstr "" " %s cupsUIResolver %s no llista com a mínim dues opcions diferents." #, c-format msgid "" " **FAIL** %s must be 1284DeviceID\n" " REF: Page 72, section 5.5" msgstr "" " **ERROR** %s ha de ser 1284DeviceID!\n" " REF: pàgina 72, secció 5.5" #, c-format msgid "" " **FAIL** Bad Default%s %s\n" " REF: Page 40, section 4.5." msgstr "" " **ERROR** Default%s incorrecte %s\n" " REF: pàgina 40, secció 4.5." #, c-format msgid "" " **FAIL** Bad DefaultImageableArea %s\n" " REF: Page 102, section 5.15." msgstr "" " **ERROR** DefaultImageableArea incorrecte %s\n" " REF: pàgina 102, secció 5.15." #, c-format msgid "" " **FAIL** Bad DefaultPaperDimension %s\n" " REF: Page 103, section 5.15." msgstr "" " **ERROR** DefaultPaperDimension incorrecte %s\n" " REF: pàgina 103, secció 5.15." #, c-format msgid "" " **FAIL** Bad FileVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" " **ERROR** FileVersion incorrecte «%s»\n" " REF: pàgina 56, secció 5.3." #, c-format msgid "" " **FAIL** Bad FormatVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" " **ERROR** FormatVersion incorrecte «%s»\n" " REF: pàgina 56, secció 5.3." msgid "" " **FAIL** Bad JobPatchFile attribute in file\n" " REF: Page 24, section 3.4." msgstr "" " **ERROR** atribut de JobPatchFile incorrecte al fitxer\n" " REF: pàgina 24, secció 3.4." #, c-format msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1." msgstr " **ERROR** LanguageEncoding incorrecte %s: ha de ser ISOLatin1." #, c-format msgid " **FAIL** Bad LanguageVersion %s - must be English." msgstr " **ERROR** LanguageVersion incorrecta %s: ha de ser anglès." #, c-format msgid "" " **FAIL** Bad Manufacturer (should be \"%s\")\n" " REF: Page 211, table D.1." msgstr "" " **ERROR** Manufacturer incorrecte (hauria de ser «%s»)\n" " REF: pàgina 211, taula D.1." #, c-format msgid "" " **FAIL** Bad ModelName - \"%c\" not allowed in string.\n" " REF: Pages 59-60, section 5.3." msgstr "" " **ERROR** ModelName incorrecte - no es permet «%c» a la cadena.\n" " REF: pàgines 59-60, secció 5.3." msgid "" " **FAIL** Bad PSVersion - not \"(string) int\".\n" " REF: Pages 62-64, section 5.3." msgstr "" " **ERROR** PSVersion incorrecte - no és «(cadena) enter».\n" " REF: pàgines 62-64, secció 5.3." msgid "" " **FAIL** Bad Product - not \"(string)\".\n" " REF: Page 62, section 5.3." msgstr "" " **ERROR** Product incorrecte - no és «(cadena)».\n" " REF: pàgina 62, secció 5.3." msgid "" " **FAIL** Bad ShortNickName - longer than 31 chars.\n" " REF: Pages 64-65, section 5.3." msgstr "" " **ERROR** ShortNickName incorrecte - més llarg de 31 caràcters.\n" " REF: pàgines 64-65, secció 5.3." #, c-format msgid "" " **FAIL** Bad option %s choice %s\n" " REF: Page 84, section 5.9" msgstr "" " **ERROR** Elecció %s incorrecta %s\n" " REF: pàgina 84, secció 5.9" #, c-format msgid " **FAIL** Default option code cannot be interpreted: %s" msgstr "" " **ERROR** El codi de l'opció per defecte no es pot interpretar: %s" #, c-format msgid "" " **FAIL** Default translation string for option %s choice %s contains " "8-bit characters." msgstr "" " **ERROR** La traducció per defecte de l'opció %s elecció %s conté " "caràcters de 8 bits." #, c-format msgid "" " **FAIL** Default translation string for option %s contains 8-bit " "characters." msgstr "" " **ERROR** La traducció per defecte de l'opció %s conté caràcters de 8 " "bits." #, c-format msgid " **FAIL** Group names %s and %s differ only by case." msgstr "" " **ERROR** Els noms dels grups %s i %s només es diferencien en les " "majúscules." #, c-format msgid " **FAIL** Multiple occurrences of option %s choice name %s." msgstr "" " **ERROR** Coincidències múltiples de l'opció %s nom de l'elecció %s." #, c-format msgid " **FAIL** Option %s choice names %s and %s differ only by case." msgstr "" " **ERROR** L'opció %s noms de les opcions %s i %s només es diferencien " "per les majúscules." #, c-format msgid " **FAIL** Option names %s and %s differ only by case." msgstr "" " **ERROR** Els noms de les opcions %s i %s només es diferencien per " "les majúscules." #, c-format msgid "" " **FAIL** REQUIRED Default%s\n" " REF: Page 40, section 4.5." msgstr "" " **ERROR** ES NECESSITA Default%s\n" " REF: pàgina 40, secció 4.5." msgid "" " **FAIL** REQUIRED DefaultImageableArea\n" " REF: Page 102, section 5.15." msgstr "" " **ERROR** ES NECESSITA DefaultImageableArea\n" " REF: pàgina 102, secció 5.15." msgid "" " **FAIL** REQUIRED DefaultPaperDimension\n" " REF: Page 103, section 5.15." msgstr "" " **ERROR** ES NECESSITA DefaultPaperDimension\n" " REF: pàgina 103, secció 5.15." msgid "" " **FAIL** REQUIRED FileVersion\n" " REF: Page 56, section 5.3." msgstr "" " **ERROR** ES NECESSITA FileVersion\n" " REF: pàgina 56, secció 5.3." msgid "" " **FAIL** REQUIRED FormatVersion\n" " REF: Page 56, section 5.3." msgstr "" " **ERROR** ES NECESSITA FormatVersion\n" " REF: pàgina 56, secció 5.3." #, c-format msgid "" " **FAIL** REQUIRED ImageableArea for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 102, section 5.15." msgstr "" " **ERROR** ES NECESSITA ImageableArea per PageSize %s\n" " REF: pàgina 41, secció 5.\n" " REF: pàgina 102, secció 5.15." msgid "" " **FAIL** REQUIRED LanguageEncoding\n" " REF: Pages 56-57, section 5.3." msgstr "" " **ERROR** ES NECESSITA LanguageEncoding\n" " REF: pàgines 56-57, secció 5.3." msgid "" " **FAIL** REQUIRED LanguageVersion\n" " REF: Pages 57-58, section 5.3." msgstr "" " **ERROR** ES NECESSITA LanguageVersion\n" " REF: pàgines 57-58, secció 5.3." msgid "" " **FAIL** REQUIRED Manufacturer\n" " REF: Pages 58-59, section 5.3." msgstr "" " **ERROR** ES NECESSITA Manufacturer\n" " REF: pàgines 58-59, secció 5.3." msgid "" " **FAIL** REQUIRED ModelName\n" " REF: Pages 59-60, section 5.3." msgstr "" " **ERROR** ES NECESSITA ModelName\n" " REF: pàgines 59-60, secció 5.3." msgid "" " **FAIL** REQUIRED NickName\n" " REF: Page 60, section 5.3." msgstr "" " **ERROR** ES NECESSITA NickName\n" " REF: pàgina 60, secció 5.3." msgid "" " **FAIL** REQUIRED PCFileName\n" " REF: Pages 61-62, section 5.3." msgstr "" " **ERROR** ES NECESSITA PCFileName\n" " REF: pàgines 61-62, secció 5.3." msgid "" " **FAIL** REQUIRED PSVersion\n" " REF: Pages 62-64, section 5.3." msgstr "" " **ERROR** ES NECESSITA PSVersion\n" " REF: pàgines 62-64, secció 5.3." msgid "" " **FAIL** REQUIRED PageRegion\n" " REF: Page 100, section 5.14." msgstr "" " **ERROR** ES NECESSITA PageRegion\n" " REF: pàgina 100, secció 5.14." msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Page 41, section 5.\n" " REF: Page 99, section 5.14." msgstr "" " **ERROR** ES NECESSITA PageSize\n" " REF: pàgina 41, secció 5.\n" " REF: pàgina 99, secció 5.14." msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Pages 99-100, section 5.14." msgstr "" " **ERROR** ES NECESSITA PageSize\n" " REF: pàgines 99-100, secció 5.14." #, c-format msgid "" " **FAIL** REQUIRED PaperDimension for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 103, section 5.15." msgstr "" " **ERROR** ES NECESSITA PaperDimension per PageSize %s\n" " REF: pàgina 41, secció 5.\n" " REF: pàgina 103, secció 5.15." msgid "" " **FAIL** REQUIRED Product\n" " REF: Page 62, section 5.3." msgstr "" " **ERROR** ES NECESSITA Product\n" " REF: pàgina 62, secció 5.3." msgid "" " **FAIL** REQUIRED ShortNickName\n" " REF: Page 64-65, section 5.3." msgstr "" " **FAIL** ES NECESSITA ShortNickName\n" " REF: pàgina 64-65, secció 5.3." #, c-format msgid " **FAIL** Unable to open PPD file - %s on line %d." msgstr " **ERROR** No es pot obrir el fitxer PPD - %s a la línia %d." #, c-format msgid " %d ERRORS FOUND" msgstr " %d S'HAN TROBAT ERRORS" msgid " -h Show program usage" msgstr " -h Mostra la sintaxi del programa" #, c-format msgid "" " Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:" msgstr "" " %%%%BoundingBox incorrecte: a la línia %d.\n" " REF: pàgina 39, %%%%BoundingBox:" #, c-format msgid "" " Bad %%%%Page: on line %d.\n" " REF: Page 53, %%%%Page:" msgstr "" " %%%%Page incorrecte: a la línia %d.\n" " REF: pàgina 53, %%%%Page:" #, c-format msgid "" " Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:" msgstr "" " %%%%Pages incorrecte: a la línia %d!\n" " REF: pàgina 43, %%%%Pages:" #, c-format msgid "" " Line %d is longer than 255 characters (%d).\n" " REF: Page 25, Line Length" msgstr "" " La línia %d és més llarga de 255 caràcters (%d)\n" " REF: pàgina 25, Longitud de línia" msgid "" " Missing %!PS-Adobe-3.0 on first line.\n" " REF: Page 17, 3.1 Conforming Documents" msgstr "" " Falta %!PS-Adobe-3.0 a la primera línia.\n" " REF: pàgina 17, 3.1 Adaptació de documents" #, c-format msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments" msgstr "" " Falta el comentari %%EndComments. REF: pàgina 41, %%EndComments" #, c-format msgid "" " Missing or bad %%BoundingBox: comment.\n" " REF: Page 39, %%BoundingBox:" msgstr "" " %%BoundingBox incorrecte o inexistent: comentari.\n" " REF: pàgina 39, %%BoundingBox:" #, c-format msgid "" " Missing or bad %%Page: comments.\n" " REF: Page 53, %%Page:" msgstr "" " %%Page incorrecte o inexistent: comentaris.\n" " REF: pàgina 53, %%Page:" #, c-format msgid "" " Missing or bad %%Pages: comment.\n" " REF: Page 43, %%Pages:" msgstr "" " %%Pages incorrecte o inexistent: comentari.\n" " REF: pàgina 43, %%Pages:" msgid " NO ERRORS FOUND" msgstr " NO S'HA TROBAT CAP ERROR" #, c-format msgid " Saw %d lines that exceeded 255 characters." msgstr " S'han trobat %d línies que superen els 255 caràcters." #, c-format msgid " Too many %%BeginDocument comments." msgstr " Massa comentaris %%BeginDocument." #, c-format msgid " Too many %%EndDocument comments." msgstr " Massa comentaris %%EndDocument." msgid " Warning: file contains binary data." msgstr " Avís: el fitxer conté dades binàries." #, c-format msgid " Warning: no %%EndComments comment in file." msgstr " Avís: no hi ha cap %%EndComments al fitxer." #, c-format msgid " Warning: obsolete DSC version %.1f in file." msgstr " Avís: versió del DSC %.1f obsoleta al fitxer." msgid " ! expression Unary NOT of expression." msgstr "" msgid " ( expressions ) Group expressions." msgstr "" msgid " --[no-]debug-logging Turn debug logging on/off." msgstr " --[no-]debug-logging Activa o desactiva el registre de depuració." msgid " --[no-]remote-admin Turn remote administration on/off." msgstr " --[no-]remote-admin Activa o desactiva l'administració remota." msgid " --[no-]remote-any Allow/prevent access from the Internet." msgstr " --[no-]remote-any Permet o impedeix l'accés des d'Internet." msgid " --[no-]share-printers Turn printer sharing on/off." msgstr "" " --[no-]share-printers Activa o desactiva la compartició d'impressores." msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job." msgstr "" " --[no-]user-cancel-any Permet o impedeix que els usuaris cancel·lin " "tasques." msgid " --cr End lines with CR (Mac OS 9)." msgstr " --cr Final de línia amb CR (Mac OS 9)." msgid " --crlf End lines with CR + LF (Windows)." msgstr " --crlf Final de línia amb CR + LF (Windows)." msgid " --domain regex Match domain to regular expression." msgstr "" msgid "" " --exec utility [argument ...] ;\n" " Execute program if true." msgstr "" msgid " --false Always false." msgstr "" msgid " --help Show help." msgstr "" msgid " --help Show this help." msgstr "" msgid " --host regex Match hostname to regular expression." msgstr "" msgid " --lf End lines with LF (UNIX/Linux/macOS)." msgstr "" msgid " --list-filters List filters that will be used." msgstr "" msgid " --local True if service is local." msgstr "" msgid " --ls List attributes." msgstr "" msgid " --name regex Match service name to regular expression." msgstr "" msgid " --not expression Unary NOT of expression." msgstr "" msgid " --path regex Match resource path to regular expression." msgstr "" msgid " --port number[-number] Match port to number or range." msgstr "" msgid " --print Print URI if true." msgstr "" msgid " --print-name Print service name if true." msgstr "" msgid " --quiet Quietly report match via exit code." msgstr "" msgid " --remote True if service is remote." msgstr "" msgid "" " --stop-after-include-error\n" " Stop tests after a failed INCLUDE." msgstr "" msgid " --true Always true." msgstr "" msgid " --txt key True if the TXT record contains the key." msgstr "" msgid " --txt-* regex Match TXT record key to regular expression." msgstr "" msgid " --uri regex Match URI to regular expression." msgstr "" msgid " --version Show program version." msgstr "" msgid " --version Show version." msgstr "" msgid " -4 Connect using IPv4." msgstr " -4 Connecta fent servir IPv4." msgid " -6 Connect using IPv6." msgstr " -6 Connecta fent servir IPv6." msgid " -C Send requests using chunking (default)." msgstr "" " -C Envia les sol·licituds fent servir la fragmentació " "(per defecte)." msgid " -D Remove the input file when finished." msgstr " -D Elimina el fitxer d'entrada quan ha acabat." msgid " -D name=value Set named variable to value." msgstr " -D nom=valor Estableix la variable indicada al valor." msgid " -E Encrypt the connection." msgstr " -E Xifra la connexió." msgid "" " -E Test with encryption using HTTP Upgrade to TLS." msgstr "" msgid "" " -F Run in the foreground but detach from console." msgstr "" " -F Executa en primer pla però separat de la consola." msgid " -H samba-server Use the named SAMBA server." msgstr " -H servidor-samba Fa servir el servidor SAMBA indicat." msgid " -I Ignore errors." msgstr " -I Ignora els errors." msgid " -I include-dir Add include directory to search path." msgstr " -I dir-inclòs Afegeix el directori inclòs al camí de cerca." msgid " -I {filename,filters,none,profiles}" msgstr " -I {nomfitxer,filtres,cap,perfils}" msgid " -L Send requests using content-length." msgstr "" " -L Envia les peticions fent servir content-length." msgid "" " -P filename.plist Produce XML plist to a file and test report to " "standard output." msgstr "" msgid " -P filename.ppd Set PPD file." msgstr " -P nomfitxer.ppd Estableix el fitxer PPD." msgid " -P number[-number] Match port to number or range." msgstr "" msgid " -R root-directory Set alternate root." msgstr " -R directori-arrel Estableix una arrel alternativa." msgid " -S Test with encryption using HTTPS." msgstr "" msgid " -T seconds Set the browse timeout in seconds." msgstr "" msgid " -T seconds Set the receive/send timeout in seconds." msgstr "" " -T segons Estableix el temps d'espera màxim per enviar i " "rebre en segons." msgid " -U username Specify username." msgstr " -U nomusuari Especifica un nom d'usuari." msgid " -V version Set default IPP version." msgstr " -V versió Estableix la versió per defecte del IPP." msgid "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgstr "" " -W {tots,cap,restringits,per defecte,dúplex,filtres,perfils,mides," "traduccions}" msgid " -X Produce XML plist instead of plain text." msgstr "" " -X Retorna els plist en XML en comptes de text pla." msgid " -a Export all printers." msgstr " -a Exporta totes les impressores." msgid " -c Produce CSV output." msgstr "" msgid " -c catalog.po Load the specified message catalog." msgstr " -c catàleg.po Carrega el catàleg de missatges indicat." msgid " -c cups-files.conf Set cups-files.conf file to use." msgstr "" msgid " -c cupsd.conf Set cupsd.conf file to use." msgstr "" " -c cupsd.conf Estableix el fitxer cupsd.conf que cal fer servir." msgid " -d name=value Set named variable to value." msgstr " -d nom=valor Estableix la variable indicada al valor." msgid " -d output-dir Specify the output directory." msgstr " -d dir-sortida Especifica el directori de sortida." msgid " -d printer Use the named printer." msgstr " -d impressora Fa servir la impressora indicada." msgid " -d regex Match domain to regular expression." msgstr "" msgid " -e Use every filter from the PPD file." msgstr " -e Fa servir tots els filtres del fitxer PPD." msgid " -f Run in the foreground." msgstr " -f Executa en primer pla." msgid " -f filename Set default request filename." msgstr "" " -f nomfitxer Estableix el nom del fitxer per defecte de la " "sol·licitud." msgid " -h Show this usage message." msgstr " -h Mostra aquest missatge de sintaxi." msgid " -h Validate HTTP response headers." msgstr "" msgid " -h regex Match hostname to regular expression." msgstr "" msgid " -h server[:port] Specify server address." msgstr " -h servidor[:port] Especifica l'adreça del servidor." msgid " -i mime/type Set input MIME type (otherwise auto-typed)." msgstr "" " -i tipus/mime Estableix el tipus MIME d'entrada (auto-typed si " "no s'especifica)." msgid "" " -i seconds Repeat the last file with the given time interval." msgstr "" " -i segons Repeteix l'últim fitxer amb l'interval especificat." msgid "" " -j job-id[,N] Filter file N from the specified job (default is " "file 1)." msgstr "" " -j id-feina[,N] Filtra el fitxer N a la feina especificada (el " "fitxer per defecte és 1)." msgid " -l List attributes." msgstr "" msgid " -l Produce plain text output." msgstr "" msgid " -l Run cupsd on demand." msgstr "" msgid " -l lang[,lang,...] Specify the output language(s) (locale)." msgstr "" " -l idioma[,idioma,...] Especifica els idiomes de sortida (locale)." msgid " -m Use the ModelName value as the filename." msgstr "" " -m Fa servir el valor de ModelName com a nom de " "fitxer." msgid "" " -m mime/type Set output MIME type (otherwise application/pdf)." msgstr "" " -m tipus/mime Estableix el tipus MIME de sortida (application/" "pdf si no s'especifica)." msgid " -n copies Set number of copies." msgstr " -n còpies Estableix el nombre de còpies." msgid "" " -n count Repeat the last file the given number of times." msgstr "" " -n comptador Repeteix l'últim fitxer el nombre indicat de " "vegades." msgid " -n regex Match service name to regular expression." msgstr "" msgid "" " -o filename.drv Set driver information file (otherwise ppdi.drv)." msgstr "" " -o nomfitxer.drv Estableix el fitxer d'informació del controlador " "(ppdi.drv si no s'especifica)." msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)." msgstr "" " -o nomfitxer.ppd[.gz] Estableix el fitxer de sortida (stdout si no " "s'especifica)." msgid " -o name=value Set option(s)." msgstr " -o nom=valor Estableix les opcions." msgid " -p Print URI if true." msgstr "" msgid " -p filename.ppd Set PPD file." msgstr " -p nomfitxer.ppd Estableix el fitxer PPD." msgid " -q Quietly report match via exit code." msgstr "" msgid " -q Run silently." msgstr " -q S'executa en mode silenciós." msgid " -r True if service is remote." msgstr "" msgid " -r Use 'relaxed' open mode." msgstr " -r Fa servir el mode obert «relaxat»." msgid " -s Print service name if true." msgstr "" msgid " -s cups-files.conf Set cups-files.conf file to use." msgstr "" msgid " -t Produce a test report." msgstr " -t Genera un informe de prova." msgid " -t Test PPDs instead of generating them." msgstr " -t Prova els PPDs en comptes de generar-los." msgid " -t Test the configuration file." msgstr " -t Prova el fitxer de configuració." msgid " -t key True if the TXT record contains the key." msgstr "" msgid " -t title Set title." msgstr " -t títol Estableix el títol." msgid " -u Remove the PPD file when finished." msgstr " -u Elimina el fitxer PPD quan ha acabat." msgid " -u regex Match URI to regular expression." msgstr "" msgid " -v Be verbose." msgstr " -v Mode detallat." msgid " -vv Be very verbose." msgstr " -vv Mode molt detallat." msgid "" " -x utility [argument ...] ;\n" " Execute program if true." msgstr "" msgid " -z Compress PPD files using GNU zip." msgstr "" " -z Comprimeix els fitxers PPD fent servir el zip de " "GNU." msgid " IPPFIND_SERVICE_DOMAIN Domain name" msgstr "" msgid "" " IPPFIND_SERVICE_HOSTNAME\n" " Fully-qualified domain name" msgstr "" msgid " IPPFIND_SERVICE_NAME Service instance name" msgstr "" msgid " IPPFIND_SERVICE_PORT Port number" msgstr "" msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type" msgstr "" msgid " IPPFIND_SERVICE_SCHEME URI scheme" msgstr "" msgid " IPPFIND_SERVICE_URI URI" msgstr "" msgid " IPPFIND_TXT_* Value of TXT record key" msgstr "" msgid "" " expression --and expression\n" " Logical AND." msgstr "" msgid "" " expression --or expression\n" " Logical OR." msgstr "" msgid " expression expression Logical AND." msgstr "" msgid " {service_domain} Domain name" msgstr "" msgid " {service_hostname} Fully-qualified domain name" msgstr "" msgid " {service_name} Service instance name" msgstr "" msgid " {service_port} Port number" msgstr "" msgid " {service_regtype} DNS-SD registration type" msgstr "" msgid " {service_scheme} URI scheme" msgstr "" msgid " {service_uri} URI" msgstr "" msgid " {txt_*} Value of TXT record key" msgstr "" msgid " {} URI" msgstr "" msgid " FAIL" msgstr " ERROR" msgid " PASS" msgstr " VÀLID" #, c-format msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section " "5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." msgstr "" #, c-format msgid "" "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 " "section 5.1.14)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section " "5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " "positive (RFC 8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC " "8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes" msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes" #, c-format msgid "%d x %d mm" msgstr "" #, c-format msgid "%g x %g \"" msgstr "" #, c-format msgid "%s (%s)" msgstr "" #, c-format msgid "%s (%s, %s)" msgstr "" #, c-format msgid "%s (Borderless)" msgstr "" #, c-format msgid "%s (Borderless, %s)" msgstr "" #, c-format msgid "%s (Borderless, %s, %s)" msgstr "" #, c-format msgid "%s accepting requests since %s" msgstr "%s accepta peticions des de %s" #, c-format msgid "%s cannot be changed." msgstr "%s no es pot canviar." #, c-format msgid "%s is not implemented by the CUPS version of lpc." msgstr "%s no està implementat en la versió del CUPS del lpc." #, c-format msgid "%s is not ready" msgstr "%s no està preparada" #, c-format msgid "%s is ready" msgstr "%s està preparada" #, c-format msgid "%s is ready and printing" msgstr "%s està preparada i imprimeix" #, c-format msgid "%s job-id user title copies options [file]" msgstr "%s identificador-feina usuari títol còpies opcions [fitxer]" #, c-format msgid "%s not accepting requests since %s -" msgstr "%s no accepta peticions des de %s -" #, c-format msgid "%s not supported." msgstr "no és compatible amb l'ús de %s." #, c-format msgid "%s/%s accepting requests since %s" msgstr "%s/%s accepta peticions des de %s" #, c-format msgid "%s/%s not accepting requests since %s -" msgstr "%s/%s no accepta peticions des de %s -" #, c-format msgid "%s: %-33.33s [job %d localhost]" msgstr "%s: %-33.33s [feina %d localhost]" #. TRANSLATORS: Message is "subject: error" #, c-format msgid "%s: %s" msgstr "%s: %s" #, c-format msgid "%s: %s failed: %s" msgstr "%s: %s ha fallat: %s" #, c-format msgid "%s: Bad printer URI \"%s\"." msgstr "" #, c-format msgid "%s: Bad version %s for \"-V\"." msgstr "" #, c-format msgid "%s: Don't know what to do." msgstr "%s: no sé que fer." #, c-format msgid "%s: Error - %s" msgstr "" #, c-format msgid "" "%s: Error - %s environment variable names non-existent destination \"%s\"." msgstr "" "%s: error - els noms de les variables d'entorn %s tenen un destí inexistent " "«%s»." #, c-format msgid "%s: Error - add '/version=1.1' to server name." msgstr "" #, c-format msgid "%s: Error - bad job ID." msgstr "%s: error - ID de la feina incorrecte." #, c-format msgid "%s: Error - cannot print files and alter jobs simultaneously." msgstr "" "%s: error - no es poden imprimir fitxers i modificar tasques al mateix temps." #, c-format msgid "%s: Error - cannot print from stdin if files or a job ID are provided." msgstr "" "%s: error - no es pot imprimir des d'stdin si s'indiquen els fitxers o " "l'identificador de la feina." #, c-format msgid "%s: Error - copies must be 1 or more." msgstr "" #, c-format msgid "%s: Error - expected character set after \"-S\" option." msgstr "" "%s: error - s'esperava un conjunt de caràcters després de l'opció «-S»." #, c-format msgid "%s: Error - expected content type after \"-T\" option." msgstr "%s: error - s'esperava un tipus de contingut després de l'opció «-T»." #, c-format msgid "%s: Error - expected copies after \"-#\" option." msgstr "%s: error - s'esperaven còpies després de l'opció «-#»." #, c-format msgid "%s: Error - expected copies after \"-n\" option." msgstr "%s: error - s'esperaven còpies després de l'opció «-n»." #, c-format msgid "%s: Error - expected destination after \"-P\" option." msgstr "%s: error - s'esperava un destí després de l'opció «-P»." #, c-format msgid "%s: Error - expected destination after \"-d\" option." msgstr "%s: error - s'esperava un destí després de l'opció «-d»." #, c-format msgid "%s: Error - expected form after \"-f\" option." msgstr "%s: error - s'esperava un formulari després de l'opció «-f»." #, c-format msgid "%s: Error - expected hold name after \"-H\" option." msgstr "%s: error - s'esperava un nom per pausa després de l'opció «-H»." #, c-format msgid "%s: Error - expected hostname after \"-H\" option." msgstr "%s: error - s'esperava el nom de l'amfitrió després de l'opció «-H»." #, c-format msgid "%s: Error - expected hostname after \"-h\" option." msgstr "%s: error - s'esperava el nom de l'amfitrió després de l'opció «-h»." #, c-format msgid "%s: Error - expected mode list after \"-y\" option." msgstr "%s: error - s'esperava una llista de modes després de l'opció «-y»." #, c-format msgid "%s: Error - expected name after \"-%c\" option." msgstr "%s: error - s'esperava un nom després de l'opció «-%c»." #, c-format msgid "%s: Error - expected option=value after \"-o\" option." msgstr "%s: error - s'esperava opció=valor després de l'opció «-o»." #, c-format msgid "%s: Error - expected page list after \"-P\" option." msgstr "%s: error - s'esperava una llista de pàgines després de l'opció «-P»." #, c-format msgid "%s: Error - expected priority after \"-%c\" option." msgstr "%s: error - s'esperava una prioritat després de l'opció «-%c»." #, c-format msgid "%s: Error - expected reason text after \"-r\" option." msgstr "%s: error - s'esperava una explicació després de l'opció «-r»." #, c-format msgid "%s: Error - expected title after \"-t\" option." msgstr "%s: error - s'esperava un títol després de l'opció «-t»." #, c-format msgid "%s: Error - expected username after \"-U\" option." msgstr "%s: error - s'esperava un nom d'usuari després de l'opció «-U»." #, c-format msgid "%s: Error - expected username after \"-u\" option." msgstr "%s: error - s'esperava un nom d'usuari després de l'opció «-u»." #, c-format msgid "%s: Error - expected value after \"-%c\" option." msgstr "%s: error - s'esperava un valor després de l'opció «-%c»." #, c-format msgid "" "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" " "option." msgstr "" "%s: error - es requereix «completed», «not-completed», o «all» després de " "l'opció «-W»." #, c-format msgid "%s: Error - no default destination available." msgstr "%s: error - no hi ha un destí per defecte." #, c-format msgid "%s: Error - priority must be between 1 and 100." msgstr "%s: error - la prioritat ha de ser entre 1 i 100." #, c-format msgid "%s: Error - scheduler not responding." msgstr "%s: error - el planificador no està responent." #, c-format msgid "%s: Error - too many files - \"%s\"." msgstr "%s: error - massa fitxers - «%s»." #, c-format msgid "%s: Error - unable to access \"%s\" - %s" msgstr "%s: error - no es pot accedir a «%s» - %s" #, c-format msgid "%s: Error - unable to queue from stdin - %s." msgstr "%s: error - no es pot posar en cua des d'stdin - %s." #, c-format msgid "%s: Error - unknown destination \"%s\"." msgstr "%s: error - el destí «%s» és desconegut." #, c-format msgid "%s: Error - unknown destination \"%s/%s\"." msgstr "%s: error - el destí «%s/%s» és desconegut." #, c-format msgid "%s: Error - unknown option \"%c\"." msgstr "%s: error - l'opció «%c» és desconeguda." #, c-format msgid "%s: Error - unknown option \"%s\"." msgstr "%s: error - l'opció «%s» és desconeguda." #, c-format msgid "%s: Expected job ID after \"-i\" option." msgstr "%s: s'esperava l'ID d'una feina després de l'opció «-i»." #, c-format msgid "%s: Invalid destination name in list \"%s\"." msgstr "%s: el nom del destí no és vàlid a la llista «%s»." #, c-format msgid "%s: Invalid filter string \"%s\"." msgstr "%s: la cadena del filtre «%s» no és vàlida." #, c-format msgid "%s: Missing filename for \"-P\"." msgstr "" #, c-format msgid "%s: Missing timeout for \"-T\"." msgstr "" #, c-format msgid "%s: Missing version for \"-V\"." msgstr "" #, c-format msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"." msgstr "%s: es necessita l'ID de la feina («-i jobid») abans de «-H restart»." #, c-format msgid "%s: No filter to convert from %s/%s to %s/%s." msgstr "%s: no hi ha cap filtre per convertir de %s/%s a %s/%s." #, c-format msgid "%s: Operation failed: %s" msgstr "%s: ha fallat l'operació: %s" #, c-format msgid "%s: Sorry, no encryption support." msgstr "%s: ho sento, no està compilada la compatibilitat pel xifrat." #, c-format msgid "%s: Unable to connect to \"%s:%d\": %s" msgstr "" #, c-format msgid "%s: Unable to connect to server." msgstr "%s: no es pot connectar al servidor." #, c-format msgid "%s: Unable to contact server." msgstr "%s: no es pot contactar amb el servidor." #, c-format msgid "%s: Unable to create PPD file: %s" msgstr "" #, c-format msgid "%s: Unable to determine MIME type of \"%s\"." msgstr "%s: no es pot determinar el tips de MIME de «%s»." #, c-format msgid "%s: Unable to open \"%s\": %s" msgstr "" #, c-format msgid "%s: Unable to open %s: %s" msgstr "%s: no es pot obrir %s: %s" #, c-format msgid "%s: Unable to open PPD file: %s on line %d." msgstr "%s: no es pot obrir el fitxer PPD: %s a la línia %d." #, c-format msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"." msgstr "%s: no es pot llegir la base de dades MIME de «%s» o «%s»." #, c-format msgid "%s: Unable to resolve \"%s\"." msgstr "" #, c-format msgid "%s: Unknown argument \"%s\"." msgstr "" #, c-format msgid "%s: Unknown destination \"%s\"." msgstr "%s: el destí «%s» és desconegut." #, c-format msgid "%s: Unknown destination MIME type %s/%s." msgstr "%s: es destí de tipus MIME %s/%s és desconegut." #, c-format msgid "%s: Unknown option \"%c\"." msgstr "%s: l'opció «%c» és desconeguda." #, c-format msgid "%s: Unknown option \"%s\"." msgstr "" #, c-format msgid "%s: Unknown option \"-%c\"." msgstr "" #, c-format msgid "%s: Unknown source MIME type %s/%s." msgstr "%s: la font del tipus de MIME %s/%s és desconeguda." #, c-format msgid "" "%s: Warning - \"%c\" format modifier not supported - output may not be " "correct." msgstr "" "%s: avís - no és compatible amb l'ús del modificador de format «%c» - el " "resultat pot no ser correcte." #, c-format msgid "%s: Warning - character set option ignored." msgstr "%s: avís - s'ignora l'opció del grup de caràcters." #, c-format msgid "%s: Warning - content type option ignored." msgstr "%s: avís - s'ignora l'opció de tipus de contingut." #, c-format msgid "%s: Warning - form option ignored." msgstr "%s: avís - s'ignora l'opció de formulari." #, c-format msgid "%s: Warning - mode option ignored." msgstr "%s: avís - s'ignora l'opció de mode." msgid "-1" msgstr "-1" msgid "-10" msgstr "-10" msgid "-100" msgstr "-100" msgid "-105" msgstr "-105" msgid "-11" msgstr "-11" msgid "-110" msgstr "-110" msgid "-115" msgstr "-115" msgid "-12" msgstr "-12" msgid "-120" msgstr "-120" msgid "-13" msgstr "-13" msgid "-14" msgstr "-14" msgid "-15" msgstr "-15" msgid "-2" msgstr "-2" msgid "-20" msgstr "-20" msgid "-25" msgstr "-25" msgid "-3" msgstr "-3" msgid "-30" msgstr "-30" msgid "-35" msgstr "-35" msgid "-4" msgstr "-4" msgid "-40" msgstr "-40" msgid "-45" msgstr "-45" msgid "-5" msgstr "-5" msgid "-50" msgstr "-50" msgid "-55" msgstr "-55" msgid "-6" msgstr "-6" msgid "-60" msgstr "-60" msgid "-65" msgstr "-65" msgid "-7" msgstr "-7" msgid "-70" msgstr "-70" msgid "-75" msgstr "-75" msgid "-8" msgstr "-8" msgid "-80" msgstr "-80" msgid "-85" msgstr "-85" msgid "-9" msgstr "-9" msgid "-90" msgstr "-90" msgid "-95" msgstr "-95" msgid "0" msgstr "0" msgid "1" msgstr "1" msgid "1 inch/sec." msgstr "1 polzada/seg." msgid "1.25x0.25\"" msgstr "1.25x0.25\"" msgid "1.25x2.25\"" msgstr "1.25x2.25\"" msgid "1.5 inch/sec." msgstr "1.5 polzades/seg." msgid "1.50x0.25\"" msgstr "1.50x0.25\"" msgid "1.50x0.50\"" msgstr "1.50x0.50\"" msgid "1.50x1.00\"" msgstr "1.50x1.00\"" msgid "1.50x2.00\"" msgstr "1.50x2.00\"" msgid "10" msgstr "10" msgid "10 inches/sec." msgstr "10 polzades/seg." msgid "10 x 11" msgstr "10 x 11" msgid "10 x 13" msgstr "10 x 13" msgid "10 x 14" msgstr "10 x 14" msgid "100" msgstr "100" msgid "100 mm/sec." msgstr "100 mm/seg." msgid "105" msgstr "105" msgid "11" msgstr "11" msgid "11 inches/sec." msgstr "11 polzades/seg." msgid "110" msgstr "110" msgid "115" msgstr "115" msgid "12" msgstr "12" msgid "12 inches/sec." msgstr "12 polzades/seg." msgid "12 x 11" msgstr "12 x 11" msgid "120" msgstr "120" msgid "120 mm/sec." msgstr "120 mm/seg." msgid "120x60dpi" msgstr "120x60ppp" msgid "120x72dpi" msgstr "120x72ppp" msgid "13" msgstr "13" msgid "136dpi" msgstr "136ppp" msgid "14" msgstr "14" msgid "15" msgstr "15" msgid "15 mm/sec." msgstr "15 mm/seg." msgid "15 x 11" msgstr "15 x 11" msgid "150 mm/sec." msgstr "150 mm/seg." msgid "150dpi" msgstr "150ppp" msgid "16" msgstr "16" msgid "17" msgstr "17" msgid "18" msgstr "18" msgid "180dpi" msgstr "180ppp" msgid "19" msgstr "19" msgid "2" msgstr "2" msgid "2 inches/sec." msgstr "2 polzades/seg." msgid "2-Hole Punch (Landscape)" msgstr "" msgid "2-Hole Punch (Portrait)" msgstr "" msgid "2-Hole Punch (Reverse Landscape)" msgstr "" msgid "2-Hole Punch (Reverse Portrait)" msgstr "" msgid "2-Sided Printing" msgstr "Impressió a doble cara" msgid "2.00x0.37\"" msgstr "2.00x0.37\"" msgid "2.00x0.50\"" msgstr "2.00x0.50\"" msgid "2.00x1.00\"" msgstr "2.00x1.00\"" msgid "2.00x1.25\"" msgstr "2.00x1.25\"" msgid "2.00x2.00\"" msgstr "2.00x2.00\"" msgid "2.00x3.00\"" msgstr "2.00x3.00\"" msgid "2.00x4.00\"" msgstr "2.00x4.00\"" msgid "2.00x5.50\"" msgstr "2.00x5.50\"" msgid "2.25x0.50\"" msgstr "2.25x0.50\"" msgid "2.25x1.25\"" msgstr "2.25x1.25\"" msgid "2.25x4.00\"" msgstr "2.25x4.00\"" msgid "2.25x5.50\"" msgstr "2.25x5.50\"" msgid "2.38x5.50\"" msgstr "2.38x5.50\"" msgid "2.5 inches/sec." msgstr "2.5 polzades/seg." msgid "2.50x1.00\"" msgstr "2.50x1.00\"" msgid "2.50x2.00\"" msgstr "2.50x2.00\"" msgid "2.75x1.25\"" msgstr "2.75x1.25\"" msgid "2.9 x 1\"" msgstr "2.9 x 1\"" msgid "20" msgstr "20" msgid "20 mm/sec." msgstr "20 mm/seg." msgid "200 mm/sec." msgstr "200 mm/seg." msgid "203dpi" msgstr "203ppp" msgid "21" msgstr "21" msgid "22" msgstr "22" msgid "23" msgstr "23" msgid "24" msgstr "24" msgid "24-Pin Series" msgstr "Sèrie de 24 pins" msgid "240x72dpi" msgstr "240x72ppp" msgid "25" msgstr "25" msgid "250 mm/sec." msgstr "250 mm/seg." msgid "26" msgstr "26" msgid "27" msgstr "27" msgid "28" msgstr "28" msgid "29" msgstr "29" msgid "3" msgstr "3" msgid "3 inches/sec." msgstr "3 polzades/seg." msgid "3 x 5" msgstr "3 x 5" msgid "3-Hole Punch (Landscape)" msgstr "" msgid "3-Hole Punch (Portrait)" msgstr "" msgid "3-Hole Punch (Reverse Landscape)" msgstr "" msgid "3-Hole Punch (Reverse Portrait)" msgstr "" msgid "3.00x1.00\"" msgstr "3.00x1.00\"" msgid "3.00x1.25\"" msgstr "3.00x1.25\"" msgid "3.00x2.00\"" msgstr "3.00x2.00\"" msgid "3.00x3.00\"" msgstr "3.00x3.00\"" msgid "3.00x5.00\"" msgstr "3.00x5.00\"" msgid "3.25x2.00\"" msgstr "3.25x2.00\"" msgid "3.25x5.00\"" msgstr "3.25x5.00\"" msgid "3.25x5.50\"" msgstr "3.25x5.50\"" msgid "3.25x5.83\"" msgstr "3.25x5.83\"" msgid "3.25x7.83\"" msgstr "3.25x7.83\"" msgid "3.5 x 5" msgstr "3.5 x 5" msgid "3.5\" Disk" msgstr "Disc de 3.5\"" msgid "3.50x1.00\"" msgstr "3.5x1.00\"" msgid "30" msgstr "30" msgid "30 mm/sec." msgstr "30 mm/seg." msgid "300 mm/sec." msgstr "300 mm/seg." msgid "300dpi" msgstr "300ppp" msgid "35" msgstr "35" msgid "360dpi" msgstr "360ppp" msgid "360x180dpi" msgstr "360x180ppp" msgid "4" msgstr "4" msgid "4 inches/sec." msgstr "4 polzades/seg." msgid "4-Hole Punch (Landscape)" msgstr "" msgid "4-Hole Punch (Portrait)" msgstr "" msgid "4-Hole Punch (Reverse Landscape)" msgstr "" msgid "4-Hole Punch (Reverse Portrait)" msgstr "" msgid "4.00x1.00\"" msgstr "4.00x1.00\"" msgid "4.00x13.00\"" msgstr "4.00x13.00\"" msgid "4.00x2.00\"" msgstr "4.00x2.00\"" msgid "4.00x2.50\"" msgstr "4.00x2.50\"" msgid "4.00x3.00\"" msgstr "4.00x3.00\"" msgid "4.00x4.00\"" msgstr "4.00x4.00\"" msgid "4.00x5.00\"" msgstr "4.00x5.00\"" msgid "4.00x6.00\"" msgstr "4.00x6.00\"" msgid "4.00x6.50\"" msgstr "4.00x6.50\"" msgid "40" msgstr "40" msgid "40 mm/sec." msgstr "40 mm/seg." msgid "45" msgstr "45" msgid "5" msgstr "5" msgid "5 inches/sec." msgstr "5 polzades/seg." msgid "5 x 7" msgstr "15 x 11" msgid "50" msgstr "50" msgid "55" msgstr "55" msgid "6" msgstr "6" msgid "6 inches/sec." msgstr "6 polzades/seg." msgid "6.00x1.00\"" msgstr "6.00x1.00\"" msgid "6.00x2.00\"" msgstr "6.00x2.00\"" msgid "6.00x3.00\"" msgstr "6.00x3.00\"" msgid "6.00x4.00\"" msgstr "6.00x4.00\"" msgid "6.00x5.00\"" msgstr "6.00x5.00\"" msgid "6.00x6.00\"" msgstr "6.00x6.00\"" msgid "6.00x6.50\"" msgstr "6.00x6.50\"" msgid "60" msgstr "60" msgid "60 mm/sec." msgstr "60 mm/seg." msgid "600dpi" msgstr "600ppp" msgid "60dpi" msgstr "60ppp" msgid "60x72dpi" msgstr "60x72ppp" msgid "65" msgstr "65" msgid "7" msgstr "7" msgid "7 inches/sec." msgstr "7 polzades/seg." msgid "7 x 9" msgstr "7 x 9" msgid "70" msgstr "70" msgid "75" msgstr "75" msgid "8" msgstr "8" msgid "8 inches/sec." msgstr "8 polzades/seg." msgid "8 x 10" msgstr "8 x 10" msgid "8.00x1.00\"" msgstr "8.00x1.00\"" msgid "8.00x2.00\"" msgstr "8.00x2.00\"" msgid "8.00x3.00\"" msgstr "8.00x3.00\"" msgid "8.00x4.00\"" msgstr "8.00x4.00\"" msgid "8.00x5.00\"" msgstr "8.00x5.00\"" msgid "8.00x6.00\"" msgstr "8.00x6.00\"" msgid "8.00x6.50\"" msgstr "8.00x6.50\"" msgid "80" msgstr "80" msgid "80 mm/sec." msgstr "80 mm/seg." msgid "85" msgstr "85" msgid "9" msgstr "9" msgid "9 inches/sec." msgstr "9 polzades/seg." msgid "9 x 11" msgstr "9 x 11" msgid "9 x 12" msgstr "9 x 12" msgid "9-Pin Series" msgstr "Sèrie de 9 pins" msgid "90" msgstr "90" msgid "95" msgstr "95" msgid "?Invalid help command unknown." msgstr "?Comanda d'ajuda no vàlida desconeguda." msgid "A Samba password is required to export printer drivers" msgstr "" "Necessiteu una contrasenya de Samba per exportar els controladors " "d'impressora" msgid "A Samba username is required to export printer drivers" msgstr "" "Necessiteu una nom d'usuari de Samba per exportar els controladors " "d'impressora" #, c-format msgid "A class named \"%s\" already exists." msgstr "Ja existeix una classe anomenada «%s»." #, c-format msgid "A printer named \"%s\" already exists." msgstr "Ja existeix una impressora anomenada «%s»." msgid "A0" msgstr "A0" msgid "A0 Long Edge" msgstr "A0 costat llarg" msgid "A1" msgstr "A1" msgid "A1 Long Edge" msgstr "A1 costat llarg" msgid "A10" msgstr "A10" msgid "A2" msgstr "A2" msgid "A2 Long Edge" msgstr "A2 costat llarg" msgid "A3" msgstr "A3" msgid "A3 Long Edge" msgstr "A3 costat llarg" msgid "A3 Oversize" msgstr "A3 estès" msgid "A3 Oversize Long Edge" msgstr "A3 estès pel costat llarg" msgid "A4" msgstr "A4" msgid "A4 Long Edge" msgstr "A4 costat llarg" msgid "A4 Oversize" msgstr "A4 estès" msgid "A4 Small" msgstr "A4 reduït" msgid "A5" msgstr "A5" msgid "A5 Long Edge" msgstr "A5 costat llarg" msgid "A5 Oversize" msgstr "A5 estès" msgid "A6" msgstr "A6" msgid "A6 Long Edge" msgstr "A6 costat llarg" msgid "A7" msgstr "A7" msgid "A8" msgstr "A8" msgid "A9" msgstr "A9" msgid "ANSI A" msgstr "ANSI A" msgid "ANSI B" msgstr "ANSI B" msgid "ANSI C" msgstr "ANSI C" msgid "ANSI D" msgstr "ANSI D" msgid "ANSI E" msgstr "ANSI E" msgid "ARCH C" msgstr "ARCH C" msgid "ARCH C Long Edge" msgstr "ARCH C costat llarg" msgid "ARCH D" msgstr "ARCH D" msgid "ARCH D Long Edge" msgstr "ARCH D costat llarg" msgid "ARCH E" msgstr "ARCH E" msgid "ARCH E Long Edge" msgstr "ARCH E costat llarg" msgid "Accept Jobs" msgstr "Accepta feines" msgid "Accepted" msgstr "Acceptada" msgid "Accordian Fold" msgstr "" msgid "Add Class" msgstr "Afegeix una classe" msgid "Add Printer" msgstr "Afegeix una impressora" msgid "Add RSS Subscription" msgstr "Afegeix una subscripció RSS" msgid "Address" msgstr "Adreça" msgid "Administration" msgstr "Administració" msgid "Advanced Photo Paper" msgstr "" msgid "Alternate" msgstr "" msgid "Alternate Roll" msgstr "" msgid "Aluminum" msgstr "" msgid "Always" msgstr "Sempre" msgid "AppSocket/HP JetDirect" msgstr "AppSocket/HP JetDirect" msgid "Applicator" msgstr "Aplicador" msgid "Archival Envelope" msgstr "" msgid "Archival Fabric" msgstr "" msgid "Archival Paper" msgstr "" msgid "Archival Photo Paper" msgstr "" #, c-format msgid "Attempt to set %s printer-state to bad value %d." msgstr "" "S'ha intentat posar l'estat de la impressora %s a un valor incorrecte %d." #, c-format msgid "Attribute \"%s\" is in the wrong group." msgstr "" #, c-format msgid "Attribute \"%s\" is the wrong value type." msgstr "" #, c-format msgid "Attribute groups are out of order (%x < %x)." msgstr "Grups d'atribut desordenats (%x < %x)." msgid "Automatic" msgstr "" msgid "B0" msgstr "B0" msgid "B1" msgstr "B1" msgid "B10" msgstr "B10" msgid "B2" msgstr "B2" msgid "B3" msgstr "B3" msgid "B4" msgstr "B4" msgid "B5" msgstr "B5" msgid "B5 Oversize" msgstr "A5 estès" msgid "B6" msgstr "B6" msgid "B7" msgstr "B7" msgid "B8" msgstr "B8" msgid "B9" msgstr "B9" msgid "Back Print Film" msgstr "" #, c-format msgid "Bad 'document-format' value \"%s\"." msgstr "" msgid "Bad NULL dests pointer" msgstr "El punter de dests NULL és incorrecte" msgid "Bad OpenGroup" msgstr "La OpenGroup és incorrecta" msgid "Bad OpenUI/JCLOpenUI" msgstr "La OpenUI/JCLOpenUI és incorrecta" msgid "Bad OrderDependency" msgstr "La OrderDependency és incorrecta" msgid "Bad PPD cache file." msgstr "El fitxer PPD de memòria cau és incorrecte." msgid "Bad PPD file." msgstr "" msgid "Bad Request" msgstr "La petició és incorrecta" msgid "Bad SNMP version number" msgstr "El número de versió del SNMP és incorrecte" msgid "Bad UIConstraints" msgstr "La UIConstraints és incorrecta" msgid "Bad arguments to function" msgstr "" #, c-format msgid "Bad copies value %d." msgstr "El valor de copies %d és incorrecte" msgid "Bad custom parameter" msgstr "El paràmetre personalitzat és incorrecte" #, c-format msgid "Bad device-uri \"%s\"." msgstr "La device-uri «%s» és incorrecta." #, c-format msgid "Bad device-uri scheme \"%s\"." msgstr "L'esquema «%s» de la device-uri és incorrecte." #, c-format msgid "Bad document-format \"%s\"." msgstr "La document-format «%s» és incorrecta." #, c-format msgid "Bad document-format-default \"%s\"." msgstr "La document-format-default «%s» és incorrecta." msgid "Bad filename buffer" msgstr "El nom del fitxer de la memòria cau és incorrecte" msgid "Bad hostname/address in URI" msgstr "" #, c-format msgid "Bad job-name value: %s" msgstr "" msgid "Bad job-name value: Wrong type or count." msgstr "" msgid "Bad job-priority value." msgstr "El valor de la job-priority és incorrecte." #, c-format msgid "Bad job-sheets value \"%s\"." msgstr "El valor «%s» de la job-sheets és incorrecte." msgid "Bad job-sheets value type." msgstr "El tipus de valor de la job-sheets és incorrecte." msgid "Bad job-state value." msgstr "El valor de la job-state és incorrecte." #, c-format msgid "Bad job-uri \"%s\"." msgstr "La job-uri «%s» és incorrecta." #, c-format msgid "Bad notify-pull-method \"%s\"." msgstr "La notify-pull-method «%s» és incorrecta." #, c-format msgid "Bad notify-recipient-uri \"%s\"." msgstr "La notify-recipient-uri «%s» és incorrecta." #, c-format msgid "Bad number-up value %d." msgstr "El valor de number-up %d és incorrecte." #, c-format msgid "Bad option + choice on line %d." msgstr "L'opció + elecció de la línia %d és incorrecta." #, c-format msgid "Bad page-ranges values %d-%d." msgstr "Els valors de page-ranges %d-%d són incorrectes." msgid "Bad port number in URI" msgstr "" #, c-format msgid "Bad port-monitor \"%s\"." msgstr "La port-monitor «%s» és incorrecta." #, c-format msgid "Bad printer-state value %d." msgstr "El valor %d de printer-state és incorrecte." msgid "Bad printer-uri." msgstr "" #, c-format msgid "Bad request ID %d." msgstr "L'identificador %d de la sol·licitud és incorrecte." #, c-format msgid "Bad request version number %d.%d." msgstr "El número de versió %d.%d de la sol·licitud és incorrecte." #, c-format msgid "Bad requesting-user-name value: %s" msgstr "" msgid "Bad resource in URI" msgstr "" msgid "Bad scheme in URI" msgstr "" msgid "Bad subscription ID" msgstr "L'identificador de la subscripció és incorrecte." msgid "Bad username in URI" msgstr "" msgid "Bad value string" msgstr "El valor de la cadena és incorrecte" msgid "Bad/empty URI" msgstr "" msgid "Bale" msgstr "" msgid "Banners" msgstr "Bàners" msgid "Bind" msgstr "" msgid "Bind (Landscape)" msgstr "" msgid "Bind (Portrait)" msgstr "" msgid "Bind (Reverse Landscape)" msgstr "" msgid "Bind (Reverse Portrait)" msgstr "" msgid "Bond Envelope" msgstr "" msgid "Bond Paper" msgstr "Paper de valors" msgid "Booklet" msgstr "" msgid "Booklet Maker" msgstr "" #, c-format msgid "Boolean expected for waiteof option \"%s\"." msgstr "S'esperava un booleà per l'opció waiteof «%s»." msgid "Bottom" msgstr "" msgid "Bottom Tray" msgstr "" msgid "Buffer overflow detected, aborting." msgstr "S'ha detectat un desbordament la memòria cau. S'interromp." msgid "CD" msgstr "" msgid "CMYK" msgstr "CMYK" msgid "CPCL Label Printer" msgstr "Impressora d'etiquetes CPCL" msgid "Cancel Jobs" msgstr "" msgid "Cancel RSS Subscription" msgstr "Cancel·la la subscripció RSS" msgid "Canceling print job." msgstr "Es cancel·la feina." msgid "Cannot change printer-is-shared for remote queues." msgstr "" msgid "Cannot share a remote Kerberized printer." msgstr "No es pot compartir una impressora remota sobre Kerberos." msgid "Cardboard" msgstr "" msgid "Cardstock" msgstr "" msgid "Cassette" msgstr "Classet" msgid "Center" msgstr "" msgid "Center Tray" msgstr "" msgid "Change Settings" msgstr "Canvia la configuració" #, c-format msgid "Character set \"%s\" not supported." msgstr "No es permet l'ús del grup de caràcters «%s»." msgid "Classes" msgstr "Classes" msgid "Clean Print Heads" msgstr "Neteja els capçals de la impressora" msgid "Close-Job doesn't support the job-uri attribute." msgstr "Close-Job no permet l'ús de l'atribut job-uri." msgid "Coat" msgstr "" msgid "Coated Envelope" msgstr "" msgid "Coated Paper" msgstr "" msgid "Color" msgstr "Color" msgid "Color Mode" msgstr "Mode de color" msgid "Colored Labels" msgstr "" msgid "" "Commands may be abbreviated. Commands are:\n" "\n" "exit help quit status ?" msgstr "" "Les ordres han de ser abreujades. Poden ser:\n" "\n" "exit help quit status ?" msgid "Community name uses indefinite length" msgstr "Els noms de comunitat tenen longitud indefinida" msgid "Connected to printer." msgstr "S'ha connectat a la impressora." msgid "Connecting to printer." msgstr "Es connecta a la impressora." msgid "Continue" msgstr "Continua" msgid "Continuous" msgstr "Contínua" msgid "Continuous Long" msgstr "" msgid "Continuous Short" msgstr "" msgid "Control file sent successfully." msgstr "El fitxer de control s'ha enviat correctament." msgid "Copying print data." msgstr "Es copien les dades d'impressió." msgid "Cotton Envelope" msgstr "" msgid "Cotton Paper" msgstr "" msgid "Cover" msgstr "" msgid "Created" msgstr "Creat" msgid "Credentials do not validate against site CA certificate." msgstr "" msgid "Credentials have expired." msgstr "" msgid "Custom" msgstr "Personalitzat" msgid "CustominCutInterval" msgstr "CustominCutInterval" msgid "CustominTearInterval" msgstr "CustominTearInterval" msgid "Cut" msgstr "Tall" msgid "Cut Media" msgstr "" msgid "Cutter" msgstr "Ganiveta" msgid "DVD" msgstr "" msgid "Dark" msgstr "Fosc" msgid "Darkness" msgstr "Foscor" msgid "Data file sent successfully." msgstr "El fitxer de dades s'ha enviat correctament." msgid "Deep Color" msgstr "" msgid "Delete Class" msgstr "Elimina la classe" msgid "Delete Printer" msgstr "Elimina la impressora" msgid "DeskJet Series" msgstr "Sèrie Deskjet" #, c-format msgid "Destination \"%s\" is not accepting jobs." msgstr "El Destí «%s» no accepta tasques." #, c-format msgid "" "Device: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s" msgstr "" "Dispositiu: uri = %s\n" " classe = %s\n" " informació = %s\n" " fabricant i model = %s\n" " identificador = %s\n" " ubicació = %s" msgid "Direct Thermal Media" msgstr "Paper per impressió tèrmica directa" #, c-format msgid "Directory \"%s\" contains a relative path." msgstr "El directori «%s» conté un camí relatiu." #, c-format msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "El directori «%s» té permisos que no són segurs (0%o/uid=%d/gid=%d)." #, c-format msgid "Directory \"%s\" is a file." msgstr "El directori «%s» és un fitxer." #, c-format msgid "Directory \"%s\" not available: %s" msgstr "El directori «%s» no està disponible: %s" #, c-format msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "El directori «%s» té els permisos correctes (0%o/uid=%d/gid=%d)." msgid "Disabled" msgstr "Desabilitat" msgid "Disc" msgstr "" #, c-format msgid "Document #%d does not exist in job #%d." msgstr "No s'ha trobat el document #%d a la feina #%d." msgid "Double Gate Fold" msgstr "" msgid "Double Staple (Landscape)" msgstr "" msgid "Double Staple (Portrait)" msgstr "" msgid "Double Staple (Reverse Landscape)" msgstr "" msgid "Double Staple (Reverse Portrait)" msgstr "" msgid "Double Wall Cardboard" msgstr "" msgid "Draft" msgstr "" msgid "Dry Film" msgstr "" msgid "Duplexer" msgstr "Unitat d'impressió a dues cares" msgid "Dymo" msgstr "Dymo" msgid "EPL1 Label Printer" msgstr "Impressora d'etiquetes EPL1" msgid "EPL2 Label Printer" msgstr "Impressora d'etiquetes EPL2" msgid "Edit Configuration File" msgstr "Edita el fitxer de configuració" msgid "Embossing Foil" msgstr "" msgid "Empty PPD file." msgstr "El fitxer PPD és buit." msgid "Encryption is not supported." msgstr "" msgid "End Board" msgstr "" #. TRANSLATORS: Banner/cover sheet after the print job. msgid "Ending Banner" msgstr "S'està acabant el bàner" msgid "Engineering Z Fold" msgstr "" msgid "English" msgstr "Anglès" msgid "" "Enter your username and password or the root username and password to access " "this page. If you are using Kerberos authentication, make sure you have a " "valid Kerberos ticket." msgstr "" "Introduïu el vostre nom d'usuari i contrasenya o el nom d'usuari i la " "contrasenya de root per accedir a aquesta pàgina. Si feu servir " "l'autenticació Kerberos, assegureu-vos de tenir un tiquet Kerberos que sigui " "vàlid." msgid "Envelope" msgstr "" msgid "Envelope #10" msgstr "" msgid "Envelope #11" msgstr "Sobre #11" msgid "Envelope #12" msgstr "Sobre #12" msgid "Envelope #14" msgstr "Sobre #14" msgid "Envelope #9" msgstr "Sobre #9" msgid "Envelope B4" msgstr "Sobre B4" msgid "Envelope B5" msgstr "Sobre B5" msgid "Envelope B6" msgstr "Sobre B6" msgid "Envelope C0" msgstr "Sobre C0" msgid "Envelope C1" msgstr "Sobre C1" msgid "Envelope C2" msgstr "Sobre C2" msgid "Envelope C3" msgstr "Sobre C3" msgid "Envelope C4" msgstr "Sobre C4" msgid "Envelope C5" msgstr "Sobre C5" msgid "Envelope C6" msgstr "Sobre C6" msgid "Envelope C65" msgstr "Sobre C65" msgid "Envelope C7" msgstr "Sobre C7" msgid "Envelope Choukei 3" msgstr "Sobre Choukei 3" msgid "Envelope Choukei 3 Long Edge" msgstr "Sobre Choukei 3 costat llarg" msgid "Envelope Choukei 4" msgstr "Sobre Choukei 4" msgid "Envelope Choukei 4 Long Edge" msgstr "Sobre Choukei 4 costat llarg" msgid "Envelope DL" msgstr "Sobre DL" msgid "Envelope Feed" msgstr "Alimentació de sobres" msgid "Envelope Invite" msgstr "Sobre d'invitació" msgid "Envelope Italian" msgstr "Sobre italià" msgid "Envelope Kaku2" msgstr "Sobre Kaku2" msgid "Envelope Kaku2 Long Edge" msgstr "Sobre Kaku2 costat llarg" msgid "Envelope Kaku3" msgstr "Sobre Kaku3" msgid "Envelope Kaku3 Long Edge" msgstr "Sobre Kaku3 costat llarg" msgid "Envelope Monarch" msgstr "Sobre monarch" msgid "Envelope PRC1" msgstr "" msgid "Envelope PRC1 Long Edge" msgstr "Sobre PRC1 costat llarg" msgid "Envelope PRC10" msgstr "Sobre PRC10" msgid "Envelope PRC10 Long Edge" msgstr "Sobre PRC10 costat llarg" msgid "Envelope PRC2" msgstr "Sobre PRC2" msgid "Envelope PRC2 Long Edge" msgstr "Sobre PRC2 costat llarg" msgid "Envelope PRC3" msgstr "Sobre PRC3" msgid "Envelope PRC3 Long Edge" msgstr "Sobre PRC3 costat llarg" msgid "Envelope PRC4" msgstr "Sobre PRC4" msgid "Envelope PRC4 Long Edge" msgstr "Sobre PRC4 costat llarg" msgid "Envelope PRC5 Long Edge" msgstr "Sobre PRC5 costat llarg" msgid "Envelope PRC5PRC5" msgstr "Sobre PRC5" msgid "Envelope PRC6" msgstr "Sobre PRC6" msgid "Envelope PRC6 Long Edge" msgstr "Sobre PRC6 costat llarg" msgid "Envelope PRC7" msgstr "Sobre PRC7" msgid "Envelope PRC7 Long Edge" msgstr "Sobre PRC7 costat llarg" msgid "Envelope PRC8" msgstr "Sobre PRC8" msgid "Envelope PRC8 Long Edge" msgstr "Sobre PRC8 costat llarg" msgid "Envelope PRC9" msgstr "Sobre PRC9" msgid "Envelope PRC9 Long Edge" msgstr "Sobre PRC9 costat llarg" msgid "Envelope Personal" msgstr "Sobre personalitzat" msgid "Envelope You4" msgstr "Sobre You4" msgid "Envelope You4 Long Edge" msgstr "Sobre You4 costat llarg" msgid "Environment Variables:" msgstr "" msgid "Epson" msgstr "Epson" msgid "Error Policy" msgstr "Normes d'error" msgid "Error reading raster data." msgstr "" msgid "Error sending raster data." msgstr "S'ha produït un error quan s'enviaven les dades de la trama." msgid "Error: need hostname after \"-h\" option." msgstr "ERROR: es necessita un nom d'amfitrió després de l'opció «-h»." msgid "European Fanfold" msgstr "" msgid "European Fanfold Legal" msgstr "" msgid "Every 10 Labels" msgstr "Cada 10 etiquetes" msgid "Every 2 Labels" msgstr "Cada 2 etiquetes" msgid "Every 3 Labels" msgstr "Cada 3 etiquetes" msgid "Every 4 Labels" msgstr "Cada 4 etiquetes" msgid "Every 5 Labels" msgstr "Cada 5 etiquetes" msgid "Every 6 Labels" msgstr "Cada 6 etiquetes" msgid "Every 7 Labels" msgstr "Cada 7 etiquetes" msgid "Every 8 Labels" msgstr "Cada 8 etiquetes" msgid "Every 9 Labels" msgstr "Cada 9 etiquetes" msgid "Every Label" msgstr "Cada etiqueta" msgid "Everyday Glossy Photo Paper" msgstr "" msgid "Everyday Matte Paper" msgstr "" msgid "Executive" msgstr "Executiu" msgid "Expectation Failed" msgstr "Ha fallat la condició del valor que s'esperava" msgid "Export Printers to Samba" msgstr "Exportar les impressores al Samba" msgid "Expressions:" msgstr "" msgid "Extra Heavyweight Paper" msgstr "" msgid "FAIL" msgstr "ERROR" msgid "Fabric" msgstr "" msgid "Face Down" msgstr "" msgid "Face Up" msgstr "" msgid "Fast Grayscale" msgstr "" #, c-format msgid "File \"%s\" contains a relative path." msgstr "El fitxer «%s» conté un camí relatiu." #, c-format msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "El fitxer «%s» té permisos que no són segurs (0%o/uid=%d/gid=%d)." #, c-format msgid "File \"%s\" is a directory." msgstr "El fitxer «%s» és un directori." #, c-format msgid "File \"%s\" not available: %s" msgstr "El fitxer «%s» no està disponible: %s" #, c-format msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "El fitxer «%s» té els permisos correctes (0%o/uid=%d/gid=%d)." msgid "File Folder" msgstr "" #, c-format msgid "" "File device URIs have been disabled. To enable, see the FileDevice directive " "in \"%s/cups-files.conf\"." msgstr "" msgid "Film" msgstr "" msgid "Fine Envelope" msgstr "" #, c-format msgid "Finished page %d." msgstr "S'ha acabat la pàgina %d." msgid "Flexo Base" msgstr "" msgid "Flexo Photo Polymer" msgstr "" msgid "Flute" msgstr "" msgid "Foil" msgstr "" msgid "Fold" msgstr "" msgid "Folio" msgstr "Foli" msgid "Forbidden" msgstr "Prohibit" msgid "Found" msgstr "" msgid "Full Cut Tabs" msgstr "" msgid "Gate Fold" msgstr "" msgid "General" msgstr "General" msgid "Generic" msgstr "Genèric" msgid "Get-Response-PDU uses indefinite length" msgstr "La Get-Response-PDU fa servir una longitud indefinida" msgid "Glass" msgstr "" msgid "Glass Colored" msgstr "" msgid "Glass Opaque" msgstr "" msgid "Glass Surfaced" msgstr "" msgid "Glass Textured" msgstr "" msgid "Glossy Brochure Paper" msgstr "" msgid "Glossy Fabric" msgstr "" msgid "Glossy Labels" msgstr "" msgid "Glossy Optical Disc" msgstr "" msgid "Glossy Paper" msgstr "Paper fotogràfic" msgid "Glossy Photo Paper" msgstr "" msgid "Got a printer-uri attribute but no job-id." msgstr "S'ha obtingut l'atribut printer-uri però no el job-id." msgid "Gravure Cylinder" msgstr "" msgid "Grayscale" msgstr "Escala de grisos" msgid "HP" msgstr "HP" msgid "Hagaki" msgstr "" msgid "Half Fold" msgstr "" msgid "Half Z Fold" msgstr "" msgid "Hanging Folder" msgstr "Carpeta per penjar" msgid "Hash buffer too small." msgstr "" msgid "Heavyweight Coated Paper" msgstr "" msgid "Heavyweight Envelope" msgstr "" msgid "Heavyweight Paper" msgstr "" msgid "Help file not in index." msgstr "El fitxer d'ajuda no és a l'índex." msgid "High" msgstr "" msgid "High Gloss Fabric" msgstr "" msgid "High Gloss Labels" msgstr "" msgid "High Gloss Optical Disc" msgstr "" msgid "High Gloss Photo Paper" msgstr "" msgid "IPP 1setOf attribute with incompatible value tags." msgstr "" "L'atribut 1setOf del IPP té etiquetes amb valors que no són compatibles." msgid "IPP attribute has no name." msgstr "L'atribut del IPP no té nom." msgid "IPP attribute is not a member of the message." msgstr "L'atribut del IPP no és membre del missatge." msgid "IPP begCollection value not 0 bytes." msgstr "El valor de begColletion del IPP no té 0 bytes." msgid "IPP boolean value not 1 byte." msgstr "El valor booleà del IPP no té 1 byte." msgid "IPP date value not 11 bytes." msgstr "El valor de date del IPP no té 11 bytes." msgid "IPP endCollection value not 0 bytes." msgstr "El valor de endColletion del IPP no té 0 bytes." msgid "IPP enum value not 4 bytes." msgstr "El valor de enum del IPP no té 4 bytes." msgid "IPP extension tag larger than 0x7FFFFFFF." msgstr "La etiqueta d'extension del IPP és més llarga de 0x7FFFFFFF." msgid "IPP integer value not 4 bytes." msgstr "El valor enter de IPP no té 4 bytes." msgid "IPP language length overflows value." msgstr "El valor de la longitud del llenguatge del IPP desborda." msgid "IPP language length too large." msgstr "" msgid "IPP member name is not empty." msgstr "El nom del membre del IPP no està buit." msgid "IPP memberName value is empty." msgstr "El valor de memberName de l'IPP està buit." msgid "IPP memberName with no attribute." msgstr "" msgid "IPP name larger than 32767 bytes." msgstr "EL nom del IPP és més llarg de 32767 bytes." msgid "IPP nameWithLanguage value less than minimum 4 bytes." msgstr "" "El valor de nameWithLanguage del IPP és més petit que el mínim, 4 bytes." msgid "IPP octetString length too large." msgstr "" msgid "IPP rangeOfInteger value not 8 bytes." msgstr "El valor de rangeOfInteger del IPP no té 8 bytes." msgid "IPP resolution value not 9 bytes." msgstr "El valor de resolution del IPP no té 9 bytes." msgid "IPP string length overflows value." msgstr "El valor de la longitud de la cadena del IPP desborda." msgid "IPP textWithLanguage value less than minimum 4 bytes." msgstr "" "EL valor de textWithLanguage del IPP és més petit que el mínim, 4 bytes." msgid "IPP value larger than 32767 bytes." msgstr "El valor del IPP és més llarg de 32767 bytes." msgid "ISOLatin1" msgstr "ISOLatin1" msgid "Illegal control character" msgstr "Caràcter de control no permès" msgid "Illegal main keyword string" msgstr "Cadena de paraula clau principal no permesa" msgid "Illegal option keyword string" msgstr "Cadena de paraula clau d'opció no permesa" msgid "Illegal translation string" msgstr "Cadena de traducció no permesa" msgid "Illegal whitespace character" msgstr "Caràcter d'espai en blanc no permés" msgid "Image Setter Paper" msgstr "" msgid "Imaging Cylinder" msgstr "" msgid "Inkjet Envelope" msgstr "" msgid "Inkjet Labels" msgstr "" msgid "Inkjet Paper" msgstr "" msgid "Installable Options" msgstr "Opcions instal·lables" msgid "Installed" msgstr "Instal·lat" msgid "IntelliBar Label Printer" msgstr "Impressora d'etiquetes IntelliBar" msgid "Intellitech" msgstr "Intellitech" msgid "Internal Server Error" msgstr "Error intern del servidor" msgid "Internal error" msgstr "Error intern" msgid "Internet Postage 2-Part" msgstr "Franqueig per Internet en 2 parts" msgid "Internet Postage 3-Part" msgstr "Franqueig per Internet en 3 parts" msgid "Internet Printing Protocol" msgstr "Protocol d'impressió per Internet" msgid "Invalid media name arguments." msgstr "" msgid "Invalid media size." msgstr "Mida del suport no vàlida." msgid "Invalid ppd-name value." msgstr "" #, c-format msgid "Invalid printer command \"%s\"." msgstr "La comanda de la impressora «%s» no és vàlida." msgid "JCL" msgstr "Llenguatge de control de tasques (JCL)" msgid "JIS B0" msgstr "JIS B0" msgid "JIS B1" msgstr "JIS B1" msgid "JIS B10" msgstr "JIS B10" msgid "JIS B2" msgstr "JIS B2" msgid "JIS B3" msgstr "JIS B3" msgid "JIS B4" msgstr "JIS B4" msgid "JIS B4 Long Edge" msgstr "JIS B4 costat llarg" msgid "JIS B5" msgstr "JIS B5" msgid "JIS B5 Long Edge" msgstr "JIS B5 costat llarg" msgid "JIS B6" msgstr "JIS B6" msgid "JIS B6 Long Edge" msgstr "JIS B6 costat llarg" msgid "JIS B7" msgstr "JIS B7" msgid "JIS B8" msgstr "JIS B8" msgid "JIS B9" msgstr "JIS B9" #, c-format msgid "Job #%d cannot be restarted - no files." msgstr "La feina #%d no es pot tornar a iniciar - no hi ha fitxers." #, c-format msgid "Job #%d does not exist." msgstr "La feina #%d no existeix." #, c-format msgid "Job #%d is already aborted - can't cancel." msgstr "La feina #%d ja s'ha interromput: no es pot cancel·lar." #, c-format msgid "Job #%d is already canceled - can't cancel." msgstr "La feina #%d ja està cancel·lada: no es pot cancel·lar." #, c-format msgid "Job #%d is already completed - can't cancel." msgstr "La feina #%d ja s'ha acabat: no es pot cancel·lar." #, c-format msgid "Job #%d is finished and cannot be altered." msgstr "La feina #%d s'ha acabat i no es pot canviar." #, c-format msgid "Job #%d is not complete." msgstr "La feina #%d no s'ha acabat." #, c-format msgid "Job #%d is not held for authentication." msgstr "La feina #%d no està aturada per ser autenticada." #, c-format msgid "Job #%d is not held." msgstr "La feina #%d no està aturada." msgid "Job Completed" msgstr "S'ha acabat la feina" msgid "Job Created" msgstr "S'ha creat la feina" msgid "Job Options Changed" msgstr "S'han canviat les opcions de la feina" msgid "Job Stopped" msgstr "S'ha aturat la feina" msgid "Job is completed and cannot be changed." msgstr "La feina s'ha finalitzat i no es pot canviar." msgid "Job operation failed" msgstr "Ha fallat l'operació de la feina" msgid "Job state cannot be changed." msgstr "L'estat de la feina no es pot canviar." msgid "Job subscriptions cannot be renewed." msgstr "Les subscripcions a les feines no es poden renovar." msgid "Jobs" msgstr "Feines" msgid "Jog" msgstr "" msgid "LPD/LPR Host or Printer" msgstr "Amfitrió o impressora LPD/LPR" msgid "Label Printer" msgstr "Impressora d'etiquetes" msgid "Label Top" msgstr "Capçalera de l'etiqueta" msgid "Labels" msgstr "" msgid "Laminate" msgstr "" msgid "Laminating Foil" msgstr "" #, c-format msgid "Language \"%s\" not supported." msgstr "L'idioma «%s» no està disponible." msgid "Large Address" msgstr "Adreça gran" msgid "Large Capacity" msgstr "" msgid "Large Capacity Tray" msgstr "" msgid "LaserJet Series PCL 4/5" msgstr "Sèrie Laser Jet PCL 4/5" msgid "Left" msgstr "" msgid "Left Gate Fold" msgstr "" msgid "Left Tray" msgstr "" msgid "Letter Fold" msgstr "" msgid "Letter Oversize" msgstr "Carta gran" msgid "Letter Oversize Long Edge" msgstr "Carta americà gran costat llarg" msgid "Letterhead" msgstr "" msgid "Light" msgstr "Lluminós" msgid "Lightweight Envelope" msgstr "" msgid "Lightweight Paper" msgstr "" msgid "Line longer than the maximum allowed (255 characters)" msgstr "La línia la longitud màxima permesa (255 caràcters)" msgid "List Available Printers" msgstr "Llista les impressores disponibles" msgid "Load paper." msgstr "" msgid "Local printer created." msgstr "" msgid "Long-Edge (Portrait)" msgstr "Costat-llarg (vertical)" msgid "Looking for printer." msgstr "S'està buscant la impressora." msgid "Mailbox 1" msgstr "" msgid "Mailbox 10" msgstr "" msgid "Mailbox 2" msgstr "" msgid "Mailbox 3" msgstr "" msgid "Mailbox 4" msgstr "" msgid "Mailbox 5" msgstr "" msgid "Mailbox 6" msgstr "" msgid "Mailbox 7" msgstr "" msgid "Mailbox 8" msgstr "" msgid "Mailbox 9" msgstr "" msgid "Main" msgstr "" msgid "Main Roll" msgstr "" msgid "Manual" msgstr "" msgid "Manual Feed" msgstr "Alimentació manual" msgid "Matte Brochure Paper" msgstr "" msgid "Matte Cover Paper" msgstr "" msgid "Matte Fabric" msgstr "" msgid "Matte Labels" msgstr "" msgid "Matte Optical Disc" msgstr "" msgid "Matte Photo Paper" msgstr "" msgid "Media Size" msgstr "Mida del paper" msgid "Media Source" msgstr "Font del paper" msgid "Media Tracking" msgstr "Seguiment del paper" msgid "Media Type" msgstr "Tipus de paper" msgid "Medium" msgstr "Mitjà" msgid "Memory allocation error" msgstr "S'ha produït un error d'ubicació de memòria" msgid "Metal" msgstr "" msgid "Metal Glossy" msgstr "" msgid "Metal High Gloss" msgstr "" msgid "Metal Matte" msgstr "" msgid "Metal Satin" msgstr "" msgid "Metal Semi Gloss" msgstr "" msgid "Mid-Weight Paper" msgstr "" msgid "Middle" msgstr "" msgid "Missing CloseGroup" msgstr "Falta el CloseGroup" msgid "Missing PPD-Adobe-4.x header" msgstr "Falta la capçalera PPD-ADOBE-4.x" msgid "Missing asterisk in column 1" msgstr "Falta un asterisc a la columna 1" msgid "Missing document-number attribute." msgstr "Falta l'atribut document-number." #, c-format msgid "Missing double quote on line %d." msgstr "Falta una cometa doble a la línia %d." msgid "Missing form variable" msgstr "Falta una variable del formulari" msgid "Missing last-document attribute in request." msgstr "Falta l'atribut last-document-number a la petició." msgid "Missing media or media-col." msgstr "Falta el media o el media-col." msgid "Missing media-size in media-col." msgstr "Falta el media-size al media-col." msgid "Missing notify-subscription-ids attribute." msgstr "Falta l'atribut notify-subscription-ids." msgid "Missing option keyword" msgstr "Falta l'opció keyword" msgid "Missing requesting-user-name attribute." msgstr "Falta l'atribut requesting-user-name." #, c-format msgid "Missing required attribute \"%s\"." msgstr "" msgid "Missing required attributes." msgstr "Falten alguns atributs necessaris." msgid "Missing resource in URI" msgstr "" msgid "Missing scheme in URI" msgstr "" #, c-format msgid "Missing value on line %d." msgstr "Falta un valor a la línia %d." msgid "Missing value string" msgstr "Falta la cadena de valor" msgid "Missing x-dimension in media-size." msgstr "Falta la mida x a la mida del suport." msgid "Missing y-dimension in media-size." msgstr "Falta la mida y a la mida del suport." #, c-format msgid "" "Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgstr "" "Model: nom = %s\n" " idioma_natural = %s\n" " fabricant i model = %s\n" " id del dispositiu = %s" msgid "Modifiers:" msgstr "" msgid "Modify Class" msgstr "Modifica la classe" msgid "Modify Printer" msgstr "Modifica la impressora" msgid "Mounting Tape" msgstr "" msgid "Move All Jobs" msgstr "Mou totes les feines" msgid "Move Job" msgstr "Mou la feina" msgid "Moved Permanently" msgstr "S'ha mogut de manera permanent" msgid "Multi Layer" msgstr "" msgid "Multi Part Form" msgstr "" msgid "Multi-Hole Punch (Landscape)" msgstr "" msgid "Multi-Hole Punch (Portrait)" msgstr "" msgid "Multi-Hole Punch (Reverse Landscape)" msgstr "" msgid "Multi-Hole Punch (Reverse Portrait)" msgstr "" msgid "Multipurpose" msgstr "" msgid "Multipurpose Paper" msgstr "" msgid "My Mailbox" msgstr "" msgid "NULL PPD file pointer" msgstr "Punter del fitxer PPD NUL" msgid "Name OID uses indefinite length" msgstr "El nom de l'OID fa servir una longitud indefinida" msgid "Nested classes are not allowed." msgstr "No es permeten les classes imbricades." msgid "Never" msgstr "Mai" msgid "New credentials are not valid for name." msgstr "" msgid "New credentials are older than stored credentials." msgstr "" msgid "No" msgstr "No" msgid "No Content" msgstr "No hi ha contingut" msgid "No IPP attributes." msgstr "" msgid "No PPD name" msgstr "El PPD no té nom" msgid "No VarBind SEQUENCE" msgstr "No hi ha cap SEQUENCE VarBind" msgid "No Windows printer drivers are installed." msgstr "No hi ha cap controlador d'impressores de Windows instal·lat." msgid "No active connection" msgstr "No hi ha cap connexió activa" msgid "No active connection." msgstr "" #, c-format msgid "No active jobs on %s." msgstr "No hi ha cap feina activa a %s." msgid "No attributes in request." msgstr "No hi ha atributs en demanda." msgid "No authentication information provided." msgstr "No s'ha donat cap informació d'autenticació." msgid "No common name specified." msgstr "" msgid "No community name" msgstr "Ho hi na cap nom de comunitat" msgid "No default printer." msgstr "No hi ha cap impressora per defecte." msgid "No destinations added." msgstr "No s'ha afegit cap destí." msgid "No device URI found in argv[0] or in DEVICE_URI environment variable." msgstr "" "No s'ha trobat cap URI de dispositiu a argv[0] o a la variable d'entorn " "DEVICE_URI." msgid "No error-index" msgstr "No hi ca cap error-index" msgid "No error-status" msgstr "No hi ha cap status-error" msgid "No file in print request." msgstr "No hi ha cap printer-uri a la sol·licitud." msgid "No modification time" msgstr "No hi ha hora de modificació" msgid "No name OID" msgstr "No hi ha cap nom d'OID" msgid "No pages were found." msgstr "No s'ha trobat cap pàgina." msgid "No printer name" msgstr "No hi ha cap nom d'impressora" msgid "No printer-uri found" msgstr "No s'ha trobat cap printer-uri" msgid "No printer-uri found for class" msgstr "No s'ha trobat cap printer-uri per la classe" msgid "No printer-uri in request." msgstr "No hi ha cap printer-uri a la sol·licitud." msgid "No request URI." msgstr "" msgid "No request protocol version." msgstr "" msgid "No request sent." msgstr "" msgid "No request-id" msgstr "No hi ha cap request-id" msgid "No stored credentials, not valid for name." msgstr "" msgid "No subscription attributes in request." msgstr "No hi ha cap atribut de la subscripció a la sol·licitud." msgid "No subscriptions found." msgstr "No s'ha trobat cap sol·licitud." msgid "No variable-bindings SEQUENCE" msgstr "No hi ha cap SEQUENCE variable-bindings" msgid "No version number" msgstr "No hi ha cap número de versió" msgid "Non-continuous (Mark sensing)" msgstr "Discontinu (sensible a les marques)" msgid "Non-continuous (Web sensing)" msgstr "Discontinu (Sensible al web)" msgid "None" msgstr "" msgid "Normal" msgstr "Normal" msgid "Not Found" msgstr "No s'ha trobat" msgid "Not Implemented" msgstr "No implementat" msgid "Not Installed" msgstr "No està instal·lat" msgid "Not Modified" msgstr "No està modificat" msgid "Not Supported" msgstr "No és compatible" msgid "Not allowed to print." msgstr "No teniu permís per imprimir." msgid "Note" msgstr "Nota" msgid "" "Note: this program only validates the DSC comments, not the PostScript " "itself." msgstr "" "Nota: aquest programa només valida els comentaris DSC, no el PostScript." msgid "OK" msgstr "D'acord" msgid "Off (1-Sided)" msgstr "Inactiu (Una cara)" msgid "Office Recycled Paper" msgstr "" msgid "Oki" msgstr "Oki" msgid "Online Help" msgstr "Ajuda en línia" msgid "Only local users can create a local printer." msgstr "" #, c-format msgid "Open of %s failed: %s" msgstr "No s'ha pogut obrir %s: %s" msgid "OpenGroup without a CloseGroup first" msgstr "OpenGroup sense un CloseGroup abans" msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" msgstr "OpenUI/JCLOpenUI sense un CloseUI/JCLCloseUI abans" msgid "Operation Policy" msgstr "Política d'operacions" msgid "Optical Disc" msgstr "" #, c-format msgid "Option \"%s\" cannot be included via %%%%IncludeFeature." msgstr "L'opció «%s» no es pot incloure a través de %%%%IncludeFeature." msgid "Options Installed" msgstr "Opcions instal·lades" msgid "Options:" msgstr "Opcions:" msgid "Other" msgstr "" msgid "Out of date PPD cache file." msgstr "El fitxer de memòria cau del PPD no està actualitzat." msgid "Out of memory." msgstr "Sense memòria." msgid "Output Mode" msgstr "Mode de sortida" msgid "Output bin is almost full." msgstr "" msgid "Output bin is full." msgstr "" msgid "Output bin is missing." msgstr "" msgid "PASS" msgstr "VÀLID" msgid "PCL Laser Printer" msgstr "Impressora làser PCL" msgid "PRC16K" msgstr "PRC16K" msgid "PRC16K Long Edge" msgstr "PRC16K costat llarg" msgid "PRC32K" msgstr "PRC32K" msgid "PRC32K Long Edge" msgstr "PRC32K costat llarg" msgid "PRC32K Oversize" msgstr "PRC32K gran" msgid "PRC32K Oversize Long Edge" msgstr "PRC32K gran costat llarg" msgid "Packet does not contain a Get-Response-PDU" msgstr "El paquet no conté cap Get-Response-PDU" msgid "Packet does not start with SEQUENCE" msgstr "El paquet no comença amb SEQUENCE" msgid "Paper" msgstr "" msgid "Paper jam." msgstr "" msgid "Paper tray is almost empty." msgstr "" msgid "Paper tray is empty." msgstr "" msgid "Paper tray is missing." msgstr "" msgid "Parallel Fold" msgstr "" msgid "ParamCustominCutInterval" msgstr "ParamCustominCutInterval" msgid "ParamCustominTearInterval" msgstr "ParamCustominTearInterval" #, c-format msgid "Password for %s on %s? " msgstr "Contrasenya per %s a %s? " #, c-format msgid "Password for %s required to access %s via SAMBA: " msgstr "Es necessita la contrasenya de %s per accedir a %s a través de SAMBA: " msgid "Pause Class" msgstr "Posa la classe en pausa" msgid "Pause Printer" msgstr "Posa la impressora en pausa" msgid "Peel-Off" msgstr "Desenganxar" msgid "Permanent Labels" msgstr "" msgid "Photo" msgstr "Fotografia" msgid "Photo Film" msgstr "" msgid "Photo Labels" msgstr "Etiquetes de fotografia" msgid "Photo Paper" msgstr "" msgid "Photo Paper Plus Glossy II" msgstr "" msgid "Photo Paper Pro Platinum" msgstr "" msgid "Plain Envelope" msgstr "" msgid "Plain Paper" msgstr "Paper normal" msgid "Plastic" msgstr "" msgid "Plastic Archival" msgstr "" msgid "Plastic Colored" msgstr "" msgid "Plastic Glossy" msgstr "" msgid "Plastic High Gloss" msgstr "" msgid "Plastic Matte" msgstr "" msgid "Plastic Satin" msgstr "" msgid "Plastic Semi Gloss" msgstr "" msgid "Plate" msgstr "" msgid "Policies" msgstr "Polítiques" msgid "Polyester" msgstr "" msgid "Port Monitor" msgstr "Seguiment del port" msgid "PostScript Printer" msgstr "Impressora PostScript" msgid "Postcard" msgstr "Postal" msgid "Postcard Double" msgstr "" msgid "Postcard Double Long Edge" msgstr "Postal doble costat llarg" msgid "Postcard Long Edge" msgstr "Postal costat llarg" msgid "Poster Fold" msgstr "" msgid "Pre Cut Tabs" msgstr "" msgid "Premium Inkjet Paper" msgstr "" msgid "Premium Photo Glossy Paper" msgstr "" msgid "Premium Presentation Matte Paper" msgstr "" msgid "Preparing to print." msgstr "" msgid "Preprinted Envelope" msgstr "" msgid "Preprinted Paper" msgstr "" msgid "Print Density" msgstr "Densitat de la impressió" msgid "Print Job:" msgstr "Feina d'impressió:" msgid "Print Mode" msgstr "Mode d'impressió" msgid "Print Quality" msgstr "" msgid "Print Rate" msgstr "Ritme d'impressió" msgid "Print Self-Test Page" msgstr "Imprimeix la pàgina de prova pròpia" msgid "Print Speed" msgstr "Velocitat d'impressió" msgid "Print Test Page" msgstr "Imprimeix una pàgina de prova" msgid "Print and Cut" msgstr "Imprimeix i talla" msgid "Print and Tear" msgstr "Imprimeix i estripa" msgid "Print file sent." msgstr "S'ha enviat el fitxer d'impressió." msgid "Print job canceled at printer." msgstr "S'ha cancel·lat la feina a la impressora." msgid "Print job too large." msgstr "La feina d'impressió és massa llarga." msgid "Print job was not accepted." msgstr "" #, c-format msgid "Printer \"%s\" already exists." msgstr "" msgid "Printer Added" msgstr "S'ha afegit una impressora" msgid "Printer Default" msgstr "Impressora per defecte" msgid "Printer Deleted" msgstr "S'ha eliminat la impressora" msgid "Printer Modified" msgstr "S'ha modificat la impressora" msgid "Printer Paused" msgstr "S'ha posat la impressora en pausa" msgid "Printer Settings" msgstr "Configuració de la impressora" msgid "Printer cannot print supplied content." msgstr "La impressora no pot imprimir el contingut subministrat." msgid "Printer cannot print with supplied options." msgstr "" msgid "Printer does not support required IPP attributes or document formats." msgstr "" msgid "Printer:" msgstr "Impressora:" msgid "Printers" msgstr "Impressores" #, c-format msgid "Printing page %d, %u%% complete." msgstr "" msgid "Punch" msgstr "" msgid "Punched Paper" msgstr "" msgid "Quarto" msgstr "Quart" msgid "Quota limit reached." msgstr "S'ha assolit el límit de la quota." msgid "Rank Owner Job File(s) Total Size" msgstr "" "Rang Propietari Feina Fitxer(s) Mida total" msgid "Rear" msgstr "" msgid "Rear Tray" msgstr "" msgid "Reject Jobs" msgstr "Rebutja feines" #, c-format msgid "Remote host did not accept control file (%d)." msgstr "L'amfitrió remot no accepta el fitxer de control (%d)." #, c-format msgid "Remote host did not accept data file (%d)." msgstr "L'amfitrió remot no accepta el fitxer de dades (%d)." msgid "Reprint After Error" msgstr "Torna a imprimir després d'un error" msgid "Request Entity Too Large" msgstr "Entitat de petició massa gran" msgid "Resolution" msgstr "Resolució" msgid "Resume Class" msgstr "Reprèn la classe" msgid "Resume Printer" msgstr "Reprèn la impressora" msgid "Return Address" msgstr "Remitent" msgid "Rewind" msgstr "Rebobina" msgid "Right" msgstr "" msgid "Right Gate Fold" msgstr "" msgid "Right Tray" msgstr "" msgid "Roll" msgstr "" msgid "Roll 1" msgstr "" msgid "Roll 10" msgstr "" msgid "Roll 2" msgstr "" msgid "Roll 3" msgstr "" msgid "Roll 4" msgstr "" msgid "Roll 5" msgstr "" msgid "Roll 6" msgstr "" msgid "Roll 7" msgstr "" msgid "Roll 8" msgstr "" msgid "Roll 9" msgstr "" #, c-format msgid "Running command: %s %s -N -A %s -c '%s'" msgstr "S'està executant l'ordre: %s %s -N -A %s -c «%s»" msgid "SEQUENCE uses indefinite length" msgstr "SEQUENCE té una longitud indefinida" msgid "SSL/TLS Negotiation Error" msgstr "S'ha produït un error mentre es negociava el SSL/TLS" msgid "Saddle Stitch" msgstr "" msgid "Satin Labels" msgstr "" msgid "Satin Optical Disc" msgstr "" msgid "Satin Photo Paper" msgstr "" msgid "Screen" msgstr "" msgid "Screen Paged" msgstr "" msgid "Security Labels" msgstr "" msgid "See Other" msgstr "Vegeu altres" msgid "See remote printer." msgstr "" msgid "Self Adhesive" msgstr "" msgid "Self Adhesive Film" msgstr "" msgid "Self-signed credentials are blocked." msgstr "" msgid "Semi-Gloss Fabric" msgstr "" msgid "Semi-Gloss Labels" msgstr "" msgid "Semi-Gloss Optical Disc" msgstr "" msgid "Semi-Gloss Photo Paper" msgstr "" msgid "Sending data to printer." msgstr "S'envien les dades a la impressora." msgid "Server Restarted" msgstr "S'ha reiniciat el servidor" msgid "Server Security Auditing" msgstr "S'està auditant la seguretat del servidor" msgid "Server Started" msgstr "S'ha iniciat el servidor" msgid "Server Stopped" msgstr "S'ha aturat el servidor" msgid "Server credentials not set." msgstr "" msgid "Service Unavailable" msgstr "El servei no està disponible" msgid "Set Allowed Users" msgstr "Definir els permisos dels usuaris" msgid "Set As Server Default" msgstr "Establir com a servidor per defecte" msgid "Set Class Options" msgstr "Definir les opcions de la classe" msgid "Set Printer Options" msgstr "Definir les opcions de la impressora" msgid "Set Publishing" msgstr "Establir com a pública" msgid "Shipping Address" msgstr "Adreça de lliurament" msgid "Short-Edge (Landscape)" msgstr "Costat curt (horitzontal)" msgid "Shrink Foil" msgstr "" msgid "Side" msgstr "" msgid "Side Tray" msgstr "" msgid "Single Face" msgstr "" msgid "Single Punch (Landscape)" msgstr "" msgid "Single Punch (Portrait)" msgstr "" msgid "Single Punch (Reverse Landscape)" msgstr "" msgid "Single Punch (Reverse Portrait)" msgstr "" msgid "Single Staple (Landscape)" msgstr "" msgid "Single Staple (Portrait)" msgstr "" msgid "Single Staple (Reverse Landscape)" msgstr "" msgid "Single Staple (Reverse Portrait)" msgstr "" msgid "Single Wall Cardboard" msgstr "" msgid "Sleeve" msgstr "" msgid "Special Paper" msgstr "Paper especial" #, c-format msgid "Spooling job, %.0f%% complete." msgstr "S'està posant a la cua la feina. S'ha completat el %.0f%%." msgid "Stacker 1" msgstr "" msgid "Stacker 10" msgstr "" msgid "Stacker 2" msgstr "" msgid "Stacker 3" msgstr "" msgid "Stacker 4" msgstr "" msgid "Stacker 5" msgstr "" msgid "Stacker 6" msgstr "" msgid "Stacker 7" msgstr "" msgid "Stacker 8" msgstr "" msgid "Stacker 9" msgstr "" msgid "Standard" msgstr "Estàndard" msgid "Staple" msgstr "" msgid "Staple Edge" msgstr "" msgid "Staple Edge (Landscape)" msgstr "" msgid "Staple Edge (Portrait)" msgstr "" msgid "Staple Edge (Reverse Landscape)" msgstr "" msgid "Staple Edge (Reverse Portrait)" msgstr "" #. TRANSLATORS: Banner/cover sheet before the print job. msgid "Starting Banner" msgstr "Bàner inicial" #, c-format msgid "Starting page %d." msgstr "S'està començant la pàgina %d." msgid "Statement" msgstr "Declaració" #, c-format msgid "Subscription #%d does not exist." msgstr "La subscripció #%d no existeix." msgid "Substitutions:" msgstr "" msgid "Super A" msgstr "Super A" msgid "Super B" msgstr "Super B" msgid "Super B/A3" msgstr "Super B/A3" msgid "Switching Protocols" msgstr "Intercanviar els protocols" msgid "Tab Stock" msgstr "" msgid "Tabloid" msgstr "Tabloide" msgid "Tabloid Oversize" msgstr "Tabloide gran" msgid "Tabloid Oversize Long Edge" msgstr "Tabloide gran costat llarg" msgid "Tear" msgstr "Estripar" msgid "Tear-Off" msgstr "Estripar" msgid "Tear-Off Adjust Position" msgstr "Posició d'ajust d'estripat" #, c-format msgid "The \"%s\" attribute is required for print jobs." msgstr "" #, c-format msgid "The %s attribute cannot be provided with job-ids." msgstr "No es pot fer servir l'atribut %s amb les job-ids." #, c-format msgid "" "The '%s' Job Status attribute cannot be supplied in a job creation request." msgstr "" #, c-format msgid "" "The '%s' operation attribute cannot be supplied in a Create-Job request." msgstr "" "L'atribut d'operació «%s» no es pot subministrar en una petició de Create-" "Job." #, c-format msgid "The PPD file \"%s\" could not be found." msgstr "No s'ha pogut trobar el fitxer PPD «%s»." #, c-format msgid "The PPD file \"%s\" could not be opened: %s" msgstr "No s'ha pogut obrir el fitxer PPD «%s»: %s" msgid "The PPD file could not be opened." msgstr "No s'ha pogut obrir el fitxer PPD." msgid "" "The class name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "El nom de la classe només pot tenir fins a 127 caràcters imprimibles i no " "pot contenir espais, barres (/) o el símbol coixinet (#)." msgid "The developer unit needs to be replaced." msgstr "S'ha de canviar la unitat de desenvolupament." msgid "The developer unit will need to be replaced soon." msgstr "La unitat de desenvolupament s'haurà de canviar aviat." msgid "The fuser's temperature is high." msgstr "La temperatura del fusor és alta." msgid "The fuser's temperature is low." msgstr "La temperatura del fusor és baixa." msgid "" "The notify-lease-duration attribute cannot be used with job subscriptions." msgstr "" "No es pot fer servir l'atribut notify-lease-duration amb les subscripcions a " "tasques." #, c-format msgid "The notify-user-data value is too large (%d > 63 octets)." msgstr "El valor de notify-user-data és massa llarg (%d > 63 octets)." msgid "The optical photoconductor needs to be replaced." msgstr "S'ha de canviar el fotoconductor òptic." msgid "The optical photoconductor will need to be replaced soon." msgstr "El fotoconductor òptic s'haurà de canviar aviat." msgid "The printer configuration is incorrect or the printer no longer exists." msgstr "" msgid "The printer did not respond." msgstr "La impressora no ha respost." msgid "The printer is in use." msgstr "La impressora està ocupada." msgid "The printer is low on ink." msgstr "" msgid "The printer is low on toner." msgstr "S'està acabant el tòner de la impressora." msgid "The printer is not connected." msgstr "La impressora no està connectada." msgid "The printer is not responding." msgstr "La impressora no respon." msgid "The printer is now connected." msgstr "Ara la impressora està connectada." msgid "The printer is now online." msgstr "Ara la impressora està en línia." msgid "The printer is offline." msgstr "La impressora està fora de línia." msgid "The printer is unreachable at this time." msgstr "Ara mateix no es pot accedir a la impressora." msgid "The printer may be out of ink." msgstr "Es deu haver acabat la tinta de la impressora." msgid "The printer may be out of toner." msgstr "Es deu haver acabat el tòner de la impressora." msgid "The printer may not exist or is unavailable at this time." msgstr "" "Pot ser que la impressora no existeixi o que ara mateix no estigui " "accessible." msgid "" "The printer name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "El nom de la impressora només pot tenir fins a 127 caràcters imprimibles i " "no pot contenir espais, barres (/) o el símbol coixinet (#)." msgid "The printer or class does not exist." msgstr "La impressora o la classe no existeix." msgid "The printer or class is not shared." msgstr "La impressora o la classe no estan compartides." msgid "The printer's cover is open." msgstr "La tapa de la impressora està oberta." msgid "The printer's door is open." msgstr "La porta de la impressora està oberta." msgid "The printer's interlock is open." msgstr "L'enclavament de seguretat de la impressora està obert." msgid "The printer's waste bin is almost full." msgstr "El dipòsit de residus és gairebé ple." msgid "The printer's waste bin is full." msgstr "El dipòsit de residus és ple." #, c-format msgid "The printer-uri \"%s\" contains invalid characters." msgstr "El printer-uri «%s» conté caràcters no vàlids." msgid "The printer-uri attribute is required." msgstr "L'atribut printer-uri és obligatori." msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." msgstr "" "El printer-uri ha de tenir la forma «ipp://NOMAMFITRIÓ/classes/NOMCLASSE»." msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgstr "" "El printer-uri ha de tenir la forma «ipp://NOMAMFITRIÓ/printers/" "NOMIMPRESSORA»." msgid "" "The subscription name may not contain spaces, slashes (/), question marks " "(?), or the pound sign (#)." msgstr "" "La subscripció no pot contenir espais, barres (/), interrogacions (?), o el " "símbol coixinet (#)." msgid "" "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to " "enable it." msgstr "" "La interfície web està deshabilitada. Executeu «cupsctl WebInterface=yes» " "per habilitar-la." #, c-format msgid "The which-jobs value \"%s\" is not supported." msgstr "El valor «%s» de which-jobs no està implementat." msgid "There are too many subscriptions." msgstr "Hi ha massa subscripcions." msgid "There was an unrecoverable USB error." msgstr "Hi ha un error de l'USB irrecuperable." msgid "Thermal Transfer Media" msgstr "Mitjà de transferència tèrmica" msgid "Too many active jobs." msgstr "Hi ha massa tasques actives." #, c-format msgid "Too many job-sheets values (%d > 2)." msgstr "Hi ha massa valors de job-sheets (%d > 2)." #, c-format msgid "Too many printer-state-reasons values (%d > %d)." msgstr "Hi ha massa valors de printer-state-reasons (%d > %d)." msgid "Top" msgstr "" msgid "Top Tray" msgstr "" msgid "Tractor" msgstr "" msgid "Transfer" msgstr "" msgid "Transparency" msgstr "Transparència" msgid "Tray" msgstr "Safata" msgid "Tray 1" msgstr "Safata 1" msgid "Tray 10" msgstr "" msgid "Tray 11" msgstr "" msgid "Tray 12" msgstr "" msgid "Tray 13" msgstr "" msgid "Tray 14" msgstr "" msgid "Tray 15" msgstr "" msgid "Tray 16" msgstr "" msgid "Tray 17" msgstr "" msgid "Tray 18" msgstr "" msgid "Tray 19" msgstr "" msgid "Tray 2" msgstr "Safata 2" msgid "Tray 20" msgstr "" msgid "Tray 3" msgstr "Safata 3" msgid "Tray 4" msgstr "Safata 4" msgid "Tray 5" msgstr "" msgid "Tray 6" msgstr "" msgid "Tray 7" msgstr "" msgid "Tray 8" msgstr "" msgid "Tray 9" msgstr "" msgid "Triple Staple (Landscape)" msgstr "" msgid "Triple Staple (Portrait)" msgstr "" msgid "Triple Staple (Reverse Landscape)" msgstr "" msgid "Triple Staple (Reverse Portrait)" msgstr "" msgid "Triple Wall Cardboard" msgstr "" msgid "Trust on first use is disabled." msgstr "" msgid "URI Too Long" msgstr "L'URI és massa llarg" msgid "URI too large" msgstr "" msgid "US Fanfold" msgstr "" msgid "US Ledger" msgstr "Llibre major americà" msgid "US Legal" msgstr "Legal americà" msgid "US Legal Oversize" msgstr "Legal americà gran" msgid "US Letter" msgstr "Carta americà" msgid "US Letter Long Edge" msgstr "Carta americà costat llarg" msgid "US Letter Oversize" msgstr "Carta americà gran" msgid "US Letter Oversize Long Edge" msgstr "Carta americà gran costat llarg" msgid "US Letter Small" msgstr "Carta americà petit" msgid "Unable to access cupsd.conf file" msgstr "No es pot accedir al fitxer cups.conf" msgid "Unable to access help file." msgstr "No es pot accedir al fitxer d'ajuda." msgid "Unable to add RSS subscription" msgstr "No es pot afegir la subscripció RSS" msgid "Unable to add class" msgstr "No es pot afegir la classe" msgid "Unable to add document to print job." msgstr "No es pot obrir el documenta la feina." #, c-format msgid "Unable to add job for destination \"%s\"." msgstr "No es pot afegir la feina al destí «%s»." msgid "Unable to add printer" msgstr "No es pot afegir la impressora" msgid "Unable to allocate memory for file types." msgstr "No es pot assignar la memòria pels tipus de fitxers." msgid "Unable to allocate memory for page info" msgstr "No s'ha pogut assignar memòria per la pàgina d'informació" msgid "Unable to allocate memory for pages array" msgstr "No s'ha pogut assignar memòria per la matriu de pàgines" msgid "Unable to cancel RSS subscription" msgstr "No es pot cancel·lar la subscripció RSS" msgid "Unable to cancel print job." msgstr "No es pot cancel·lar la feina d'impressió." msgid "Unable to change printer" msgstr "No es pot canviar la impressora" msgid "Unable to change printer-is-shared attribute" msgstr "No es pot canviar l'atribut printer-is-shared" msgid "Unable to change server settings" msgstr "No es pot canviar la configuració del servidor" #, c-format msgid "Unable to compile mimeMediaType regular expression: %s." msgstr "" #, c-format msgid "Unable to compile naturalLanguage regular expression: %s." msgstr "" msgid "Unable to configure printer options." msgstr "No es poden configurar les opcions de la impressora." msgid "Unable to connect to host." msgstr "No es pot connectar a l'amfitrió." msgid "Unable to contact printer, queuing on next printer in class." msgstr "" "No es pot contactar amb la impressora. Es posa a la cua de la següent " "impressora de la classe." #, c-format msgid "Unable to copy 64-bit CUPS printer driver files (%d)." msgstr "" "No es poden copiar els fitxers del controlador d'impressora CUPS de 64 bits " "(%d)." #, c-format msgid "Unable to copy 64-bit Windows printer driver files (%d)." msgstr "" "No es poden copiar els fitxers del controlador d'impressora Windows de 64 " "bits (%d)." #, c-format msgid "Unable to copy CUPS printer driver files (%d)." msgstr "No es poden copiar els fitxers del controlador d'impressora CUPS (%d)." #, c-format msgid "Unable to copy PPD file - %s" msgstr "No es pot copiar el fitxer PPD - %s" msgid "Unable to copy PPD file." msgstr "No es pot copiar el fitxer PPD." #, c-format msgid "Unable to copy Windows 2000 printer driver files (%d)." msgstr "" "No es poden copiar els fitxers del controlador d'impressora Windows 2000 " "(%d)." #, c-format msgid "Unable to copy Windows 9x printer driver files (%d)." msgstr "" "No es poden copiar els fitxers del controlador d'impressora Windows 9x (%d)." msgid "Unable to create credentials from array." msgstr "" msgid "Unable to create printer-uri" msgstr "No es pot crear el printer-uri" msgid "Unable to create printer." msgstr "" msgid "Unable to create server credentials." msgstr "" msgid "Unable to create temporary file" msgstr "No es pot crear el fitxer temporal" msgid "Unable to delete class" msgstr "No es pot esborrar la classe" msgid "Unable to delete printer" msgstr "No es pot esborrar la impressora" msgid "Unable to do maintenance command" msgstr "No es pot executar la comanda de manteniment" msgid "Unable to edit cupsd.conf files larger than 1MB" msgstr "No es poden editar fitxers cupsd.conf més grans d'1MB" msgid "" "Unable to establish a secure connection to host (certificate chain invalid)." msgstr "" "No s'ha pogut establir una connexió segura amb l'amfitrió (la cadena del " "certificat no és vàlida)." msgid "" "Unable to establish a secure connection to host (certificate not yet valid)." msgstr "" "No s'ha pogut establir una connexió segura amb l'amfitrió (el certificat " "encara no és vàlid)." msgid "Unable to establish a secure connection to host (expired certificate)." msgstr "" "No s'ha pogut establir una connexió segura amb l'amfitrió (ha expirat el " "certificat)." msgid "Unable to establish a secure connection to host (host name mismatch)." msgstr "" "No s'ha pogut establir una connexió segura amb l'amfitrió (hi ha un error en " "el nom de l'amfitrió)." msgid "" "Unable to establish a secure connection to host (peer dropped connection " "before responding)." msgstr "" "No s'ha pogut establir una connexió segura amb l'amfitrió (s'ha tallat la " "connexió abans de respondre)." msgid "" "Unable to establish a secure connection to host (self-signed certificate)." msgstr "" "No s'ha pogut establir una connexió segura amb l'amfitrió (el certificat és " "autosignat)." msgid "" "Unable to establish a secure connection to host (untrusted certificate)." msgstr "" "No s'ha pogut establir una connexió segura amb l'amfitrió (el certificat no " "és de confiança)." msgid "Unable to establish a secure connection to host." msgstr "No es pot establir una connexió segura amb l'amfitrió." msgid "Unable to find destination for job" msgstr "No es pot trobar el destí de la feina" msgid "Unable to find printer." msgstr "No es pot trobar la impressora." msgid "Unable to find server credentials." msgstr "" msgid "Unable to get backend exit status." msgstr "No es pot obtenir el motiu de la sortida de l'execució en segon pla" msgid "Unable to get class list" msgstr "No es pot obtenir la llista de classes" msgid "Unable to get class status" msgstr "No es pot obtenir l'estat de la classe" msgid "Unable to get list of printer drivers" msgstr "No es pot obtenir la llista dels controladors d'impressora" msgid "Unable to get printer attributes" msgstr "No es poden obtenir els atributs de la impressora" msgid "Unable to get printer list" msgstr "No es pot obtenir la llista d'impressores" msgid "Unable to get printer status" msgstr "No es pot obtenir l'estat de la impressora" msgid "Unable to get printer status." msgstr "No es pot obtenir l'estat de la impressora." #, c-format msgid "Unable to install Windows 2000 printer driver files (%d)." msgstr "" "No es poden instal·lar els fitxers del controlador d'impressores per Windows " "2000 (%d)." #, c-format msgid "Unable to install Windows 9x printer driver files (%d)." msgstr "" "No es poden instal·lar els fitxers del controlador d'impressores per Windows " "9x (%d)." msgid "Unable to load help index." msgstr "No es pot carregar l'índex de l'ajuda." #, c-format msgid "Unable to locate printer \"%s\"." msgstr "No es pot ubicar la impressora «%s»." msgid "Unable to locate printer." msgstr "No es pot ubicar la impressora." msgid "Unable to modify class" msgstr "No es pot modificar la classe" msgid "Unable to modify printer" msgstr "No es pot modificar la impressora" msgid "Unable to move job" msgstr "No es pot moure la feina" msgid "Unable to move jobs" msgstr "No es poden moure les tasques" msgid "Unable to open PPD file" msgstr "No es pot obrir el fitxer PPD" msgid "Unable to open cupsd.conf file:" msgstr "No es pot obrir el fitxer cups.conf" msgid "Unable to open device file" msgstr "No es pot obrir el fitxer de dispositiu" #, c-format msgid "Unable to open document #%d in job #%d." msgstr "No es pot obrir el document #%d a la feina #%d." msgid "Unable to open help file." msgstr "No es pot obrir el fitxer d'impressió." msgid "Unable to open print file" msgstr "No es pot obrir el fitxer d'impressió" msgid "Unable to open raster file" msgstr "No es pot obrir el fitxer de trama" msgid "Unable to print test page" msgstr "No es pot imprimir la pàgina de prova" msgid "Unable to read print data." msgstr "No es poden llegir les dades d'impressió." msgid "Unable to rename job document file." msgstr "" msgid "Unable to resolve printer-uri." msgstr "" #, c-format msgid "Unable to run \"%s\": %s" msgstr "No es pot executar «%s»: %s" msgid "Unable to see in file" msgstr "No es pot veure al fitxer" msgid "Unable to send command to printer driver" msgstr "No es pot enviar la comanda al controlador de la impressora" msgid "Unable to send data to printer." msgstr "No es poden enviar dades a la impressora." #, c-format msgid "Unable to set Windows printer driver (%d)." msgstr "No es pot configurar el controlador d'impressores per Windows (%d)" msgid "Unable to set options" msgstr "No es poden configurar les opcions" msgid "Unable to set server default" msgstr "No es pot posar la configuració per defecte al servidor" msgid "Unable to start backend process." msgstr "No es pot iniciar el procés en segon pla." msgid "Unable to upload cupsd.conf file" msgstr "No es pot penjar el fitxer cups.conf" msgid "Unable to use legacy USB class driver." msgstr "No es pot fer servir el controlador de la classe USB antic." msgid "Unable to write print data" msgstr "No es poden escriure les dades d'impressió" #, c-format msgid "Unable to write uncompressed print data: %s" msgstr "No es poden escriure les dades sense comprimir: %s" msgid "Unauthorized" msgstr "No autoritzat" msgid "Units" msgstr "Unitats" msgid "Unknown" msgstr "Desconegut" #, c-format msgid "Unknown choice \"%s\" for option \"%s\"." msgstr "La tria de «%s» per l'opció «%s» és desconeguda." #, c-format msgid "Unknown encryption option value: \"%s\"." msgstr "El valor de l'opció de xifrat «%s» és desconegut." #, c-format msgid "Unknown file order: \"%s\"." msgstr "Ordre desconegut del fitxer: «%s»." #, c-format msgid "Unknown format character: \"%c\"." msgstr "Format del caràcter desconegut: «%c»." msgid "Unknown hash algorithm." msgstr "" msgid "Unknown media size name." msgstr "El nom de la mida del suport no és conegut." #, c-format msgid "Unknown option \"%s\" with value \"%s\"." msgstr "L'opció «%s» amb valor «%s» és desconeguda." #, c-format msgid "Unknown option \"%s\"." msgstr "L'opció «%s» és desconeguda." #, c-format msgid "Unknown print mode: \"%s\"." msgstr "El mode d'impressió «%s» és desconegut." #, c-format msgid "Unknown printer-error-policy \"%s\"." msgstr "El paràmetre printer-error-policy «%s» és desconegut." #, c-format msgid "Unknown printer-op-policy \"%s\"." msgstr "El paràmetre printer-op-policy «%s» és desconegut." msgid "Unknown request method." msgstr "" msgid "Unknown request version." msgstr "" msgid "Unknown scheme in URI" msgstr "" msgid "Unknown service name." msgstr "El nom del servei és desconegut." #, c-format msgid "Unknown version option value: \"%s\"." msgstr "El valor de l'opció de la versió és desconegut: «%s»." #, c-format msgid "Unsupported 'compression' value \"%s\"." msgstr "" #, c-format msgid "Unsupported 'document-format' value \"%s\"." msgstr "" msgid "Unsupported 'job-name' value." msgstr "" #, c-format msgid "Unsupported character set \"%s\"." msgstr "No s'admet el grup de caràcters «%s»." #, c-format msgid "Unsupported compression \"%s\"." msgstr "No s'admet la compressió «%s»." #, c-format msgid "Unsupported document-format \"%s\"." msgstr "No s'admet el document-format «%s»." #, c-format msgid "Unsupported document-format \"%s/%s\"." msgstr "No s'admet el document-format «%s/%s»." #, c-format msgid "Unsupported format \"%s\"." msgstr "No s'admet el format «%s»." msgid "Unsupported margins." msgstr "No s'admeten els marges." msgid "Unsupported media value." msgstr "No s'admet el valor del suport." #, c-format msgid "Unsupported number-up value %d, using number-up=1." msgstr "No s'admet el valor %d a number-up. Es fa servir number-up=1." #, c-format msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb." msgstr "" "No s'admet el valor %s a number-up-layout. Es fa servir number-up-" "layout=lrtb." #, c-format msgid "Unsupported page-border value %s, using page-border=none." msgstr "No s'admet el valor %s a page-border. Es fa servir page-border=none." msgid "Unsupported raster data." msgstr "No s'admet les dades en trama." msgid "Unsupported value type" msgstr "El tipus de valor no és compatible" msgid "Upgrade Required" msgstr "S'ha d'actualitzar" msgid "" "Usage:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]" msgstr "" "Sintaxi:\n" "\n" " lpadmin [-h servidor] -d destí\n" " lpadmin [-h servidor] -x destí\n" " lpadmin [-h servidor] -p impressora [-c afegir-classe] [-i interfície] [-" "m model]\n" " [-r eliminar-classe] [-v dispositiu] [-D descripció]\n" " [-P fitxer-ppd] [-o nom=valor]\n" " [-u allow:usuari,usuari] [-u deny:usuari,usuari]" #, c-format msgid "Usage: %s job-id user title copies options [file]" msgstr "Sintaxi: %s id-feina usuari títol còpies opcions [fitxer]" msgid "Usage: cupsaddsmb [options] printer1 ... printerN" msgstr "Sintaxi: cupsaddsmb [opcions] impressora1 ... impressoraN" msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]" msgstr "Sintaxi: cupsctl [opcions] [param=valor ... paramN=valorN]" msgid "Usage: cupsd [options]" msgstr "Sintaxi: cupsd [opcions]" msgid "Usage: cupsfilter [ options ] [ -- ] filename" msgstr "" msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]" msgstr "Sintaxi: cupstestdsc [opcions] nomfitxer.ps [...nomfitxer.ps]" msgid "" "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" msgstr "" "Sintaxi: cupstestppd [opcions] nomfitxer1.ppd[.gz] [... nomfitxerN.ppd[.gz]]" msgid "" "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " ippfind [options] name[.regtype[.domain.]] ... [expression]\n" " ippfind --help\n" " ippfind --version" msgstr "" msgid "Usage: ipptool [options] URI filename [ ... filenameN ]" msgstr "Sintaxi: ipptool [opcions] URI nomfitxer[ ... nomfitxerN]" msgid "Usage: lpmove job/src dest" msgstr "Sintaxi: lpmove feina/font destí" msgid "" "Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " lpoptions [-h server] [-E] -x printer" msgstr "" "Sintaxi: lpoptions [-h servidor] [-E] -d impressora\n" " lpoptions [-h servidor] [-E] [-p impressora] -l\n" " lpoptions [-h servidor] [-E] -p impressora -o opció[=valor] ...\n" " lpoptions [-h servidor] [-E] -x impressora" msgid "" "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" msgstr "" "Sintaxi: lpq [-P destí] [-U nomusuari] [-h nomamfitrió[:port]] [-l] " "[+interval]" msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" msgstr "Sintaxi: ppdc [opcions] nomfitxer.rv [ ... nomfitxerN.drv ]" msgid "Usage: ppdhtml [options] filename.drv >filename.html" msgstr "Sintaxi: ppdhtml [opcions] nomfitxer.drv >nomfitxer.html" msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgstr "Sintaxi: ppdi [opcions] nomfitxer.ppd [ ... nomfitxerN.ppd ]" msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgstr "Sintaxi: ppdmerge [opcions] nomfitxer.ppd [ ... nomfitxerN.ppd ]" msgid "" "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" msgstr "" "Sintaxi: ppdpo [opcions] -o nomfitxer.po nomfitxer.drv [ ... nomfitxerN.drv]" msgid "Usage: snmp [host-or-ip-address]" msgstr "Sintaxi: snmp [adreça-amfitrió-o-ip]" msgid "Value uses indefinite length" msgstr "El valor té una longitud indefinida" msgid "VarBind uses indefinite length" msgstr "VarBind té una longitud indefinida" msgid "Vellum Paper" msgstr "" msgid "Version uses indefinite length" msgstr "Version té una longitud indefinida" msgid "Waiting for job to complete." msgstr "S'està esperant que acabi la feina." msgid "Waiting for printer to become available." msgstr "S'està esperant que la impressora estigui disponible." msgid "Waiting for printer to finish." msgstr "S'està esperant que la impressora acabi." msgid "Warning, no Windows 2000 printer drivers are installed." msgstr "AVÃS. No hi ha cap controlador per Windows 2000 instal·lat." msgid "Waterproof Fabric" msgstr "" msgid "Web Interface is Disabled" msgstr "La interfície web està deshabilitada" msgid "Wet Film" msgstr "" msgid "Windowed Envelope" msgstr "" msgid "Yes" msgstr "Sí" #, c-format msgid "" "You must access this page using the URL https://" "%s:%d%s." msgstr "" "Heu d'accedir a aquesta pagina a través de la URL https://%s:%d%s." msgid "Z Fold" msgstr "" msgid "ZPL Label Printer" msgstr "Impressora d'etiquetes ZPL" msgid "Zebra" msgstr "Zebra" msgid "aborted" msgstr "interromput" msgid "accuracy-units" msgstr "Accuracy Units" msgid "accuracy-units.mm" msgstr "Mm" msgid "accuracy-units.nm" msgstr "Nm" msgid "accuracy-units.um" msgstr "Um" msgid "baling" msgstr "Bale Output" msgid "baling-type" msgstr "Baling Type" msgid "baling-type.band" msgstr "Band" msgid "baling-type.shrink-wrap" msgstr "Shrink Wrap" msgid "baling-type.wrap" msgstr "Wrap" msgid "baling-when" msgstr "Baling When" msgid "baling-when.after-job" msgstr "After Job" msgid "baling-when.after-sets" msgstr "After Sets" msgid "binding" msgstr "Bind Output" msgid "binding-reference-edge" msgstr "Binding Reference Edge" msgid "binding-reference-edge.bottom" msgstr "Bottom" msgid "binding-reference-edge.left" msgstr "Left" msgid "binding-reference-edge.right" msgstr "Right" msgid "binding-reference-edge.top" msgstr "Top" msgid "binding-type" msgstr "Binding Type" msgid "binding-type.adhesive" msgstr "Adhesive" msgid "binding-type.comb" msgstr "Comb" msgid "binding-type.flat" msgstr "Flat" msgid "binding-type.padding" msgstr "Padding" msgid "binding-type.perfect" msgstr "Perfect" msgid "binding-type.spiral" msgstr "Spiral" msgid "binding-type.tape" msgstr "Tape" msgid "binding-type.velo" msgstr "Velo" msgid "canceled" msgstr "cancel·lat" msgid "charge-info-message" msgstr "Charge Info Message" msgid "coating" msgstr "Coat Sheets" msgid "coating-sides" msgstr "Coating Sides" msgid "coating-sides.back" msgstr "Back" msgid "coating-sides.both" msgstr "Both" msgid "coating-sides.front" msgstr "Front" msgid "coating-type" msgstr "Coating Type" msgid "coating-type.archival" msgstr "Archival" msgid "coating-type.archival-glossy" msgstr "Archival Glossy" msgid "coating-type.archival-matte" msgstr "Archival Matte" msgid "coating-type.archival-semi-gloss" msgstr "Archival Semi Gloss" msgid "coating-type.glossy" msgstr "Glossy" msgid "coating-type.high-gloss" msgstr "High Gloss" msgid "coating-type.matte" msgstr "Matte" msgid "coating-type.semi-gloss" msgstr "Semi-Gloss" msgid "coating-type.silicone" msgstr "Silicone" msgid "coating-type.translucent" msgstr "Translucent" msgid "completed" msgstr "completat" msgid "confirmation-sheet-print" msgstr "Confirmation Sheet Print" msgid "copies" msgstr "Copies" msgid "cover-back" msgstr "Cover Back" msgid "cover-front" msgstr "Cover Front" msgid "cover-sheet-info" msgstr "Cover Sheet Info" msgid "cover-sheet-info-supported.date-time" msgstr "Date Time" msgid "cover-sheet-info-supported.from-name" msgstr "From Name" msgid "cover-sheet-info-supported.logo" msgstr "Logo" msgid "cover-sheet-info-supported.message" msgstr "Message" msgid "cover-sheet-info-supported.organization" msgstr "Organization" msgid "cover-sheet-info-supported.subject" msgstr "Subject" msgid "cover-sheet-info-supported.to-name" msgstr "To Name" msgid "cover-type" msgstr "Cover Type" msgid "cover-type.no-cover" msgstr "No Cover" msgid "cover-type.print-back" msgstr "Print Back" msgid "cover-type.print-both" msgstr "Print Both" msgid "cover-type.print-front" msgstr "Print Front" msgid "cover-type.print-none" msgstr "Print None" msgid "covering" msgstr "Cover Output" msgid "covering-name" msgstr "Covering Name" msgid "covering-name.plain" msgstr "Plain" msgid "covering-name.pre-cut" msgstr "Pre Cut" msgid "covering-name.pre-printed" msgstr "Pre Printed" msgid "cups-deviced failed to execute." msgstr "no s'ha pogut executar correctament la cups-deviced." msgid "cups-driverd failed to execute." msgstr "no s'ha pogut executar correctament la cups-driverd" #, c-format msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "cupsaddsmb: falta el fitxer PPD per la impressora «%s» - %s" msgid "cupsctl: Cannot set Listen or Port directly." msgstr "cupsctl: no es pot establir Listen o Port directament." #, c-format msgid "cupsctl: Unable to connect to server: %s" msgstr "cupsctl: no es pot connectar al servidor: %s" #, c-format msgid "cupsctl: Unknown option \"%s\"" msgstr "cupsctl: l'opció «%s» és desconeguda" #, c-format msgid "cupsctl: Unknown option \"-%c\"" msgstr "cupsctl: l'opció «-%c» és desconeguda" msgid "cupsd: Expected config filename after \"-c\" option." msgstr "" "cupsd: s'esperava un nom de fitxer de configuració després de l'opció «-c»." msgid "cupsd: Expected cups-files.conf filename after \"-s\" option." msgstr "" msgid "cupsd: On-demand support not compiled in, running in normal mode." msgstr "" msgid "cupsd: Relative cups-files.conf filename not allowed." msgstr "" msgid "cupsd: Unable to get current directory." msgstr "cupsd: No es pot obtenir el directori actual." msgid "cupsd: Unable to get path to cups-files.conf file." msgstr "" #, c-format msgid "cupsd: Unknown argument \"%s\" - aborting." msgstr "cupsd: l'argument «%s» és desconegut - s'interromp." #, c-format msgid "cupsd: Unknown option \"%c\" - aborting." msgstr "cupsd: l'opció «%c» és desconeguda - s'interromp." #, c-format msgid "cupsfilter: Invalid document number %d." msgstr "cupsfilter: el document número %d no és vàlid." #, c-format msgid "cupsfilter: Invalid job ID %d." msgstr "cupsfilter: la feina %d no és vàlida." msgid "cupsfilter: Only one filename can be specified." msgstr "cupsfilter: només es pot especificar un nom de fitxer." #, c-format msgid "cupsfilter: Unable to get job file - %s" msgstr "cupsfilter: no es pot obtenir el fitxer de la feina - %s" msgid "cupstestppd: The -q option is incompatible with the -v option." msgstr "cupstestppd: l'opció -q no és compatible amb l'opció -v." msgid "cupstestppd: The -v option is incompatible with the -q option." msgstr "cupstestppd: l'opció -v no és compatible amb l'opció -q." msgid "detailed-status-message" msgstr "Detailed Status Message" #, c-format msgid "device for %s/%s: %s" msgstr "dispositiu per %s/%s: %s" #, c-format msgid "device for %s: %s" msgstr "dispositiu per %s: %s" msgid "document-copies" msgstr "Copies" msgid "document-state" msgstr "Document State" msgid "document-state-reasons" msgstr "Detailed Document State" msgid "document-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "document-state-reasons.canceled-at-device" msgstr "Canceled At Device" msgid "document-state-reasons.canceled-by-operator" msgstr "Canceled By Operator" msgid "document-state-reasons.canceled-by-user" msgstr "Canceled By User" msgid "document-state-reasons.completed-successfully" msgstr "Completed Successfully" msgid "document-state-reasons.completed-with-errors" msgstr "Completed With Errors" msgid "document-state-reasons.completed-with-warnings" msgstr "Completed With Warnings" msgid "document-state-reasons.compression-error" msgstr "Compression Error" msgid "document-state-reasons.data-insufficient" msgstr "Data Insufficient" msgid "document-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "document-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "document-state-reasons.digital-signature-wait" msgstr "Digital Signature Wait" msgid "document-state-reasons.document-access-error" msgstr "Document Access Error" msgid "document-state-reasons.document-fetchable" msgstr "Document Fetchable" msgid "document-state-reasons.document-format-error" msgstr "Document Format Error" msgid "document-state-reasons.document-password-error" msgstr "Document Password Error" msgid "document-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "document-state-reasons.document-security-error" msgstr "Document Security Error" msgid "document-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "document-state-reasons.errors-detected" msgstr "Errors Detected" msgid "document-state-reasons.incoming" msgstr "Incoming" msgid "document-state-reasons.interpreting" msgstr "Interpreting" msgid "document-state-reasons.none" msgstr "None" msgid "document-state-reasons.outgoing" msgstr "Outgoing" msgid "document-state-reasons.printing" msgstr "Printing" msgid "document-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "document-state-reasons.queued" msgstr "Queued" msgid "document-state-reasons.queued-for-marker" msgstr "Queued For Marker" msgid "document-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "document-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "document-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "document-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "document-state-reasons.transforming" msgstr "Transforming" msgid "document-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "document-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "document-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "document-state.3" msgstr "Pending" msgid "document-state.5" msgstr "Processing" msgid "document-state.6" msgstr "Processing Stopped" msgid "document-state.7" msgstr "Canceled" msgid "document-state.8" msgstr "Aborted" msgid "document-state.9" msgstr "Completed" msgid "error-index uses indefinite length" msgstr "error-index fa servir una longitud indefinida" msgid "error-status uses indefinite length" msgstr "error-status fa servir una longitud indefinida" msgid "feed-orientation" msgstr "Feed Orientation" msgid "feed-orientation.long-edge-first" msgstr "Long Edge First" msgid "feed-orientation.short-edge-first" msgstr "Short Edge First" msgid "fetch-status-code" msgstr "Fetch Status Code" msgid "finishing-template" msgstr "Finishing Template" msgid "finishing-template.bale" msgstr "Bale" msgid "finishing-template.bind" msgstr "Bind" msgid "finishing-template.bind-bottom" msgstr "Bind Bottom" msgid "finishing-template.bind-left" msgstr "Bind Left" msgid "finishing-template.bind-right" msgstr "Bind Right" msgid "finishing-template.bind-top" msgstr "Bind Top" msgid "finishing-template.booklet-maker" msgstr "Booklet Maker" msgid "finishing-template.coat" msgstr "Coat" msgid "finishing-template.cover" msgstr "Cover" msgid "finishing-template.edge-stitch" msgstr "Edge Stitch" msgid "finishing-template.edge-stitch-bottom" msgstr "Edge Stitch Bottom" msgid "finishing-template.edge-stitch-left" msgstr "Edge Stitch Left" msgid "finishing-template.edge-stitch-right" msgstr "Edge Stitch Right" msgid "finishing-template.edge-stitch-top" msgstr "Edge Stitch Top" msgid "finishing-template.fold" msgstr "Fold" msgid "finishing-template.fold-accordion" msgstr "Fold Accordion" msgid "finishing-template.fold-double-gate" msgstr "Fold Double Gate" msgid "finishing-template.fold-engineering-z" msgstr "Fold Engineering Z" msgid "finishing-template.fold-gate" msgstr "Fold Gate" msgid "finishing-template.fold-half" msgstr "Fold Half" msgid "finishing-template.fold-half-z" msgstr "Fold Half Z" msgid "finishing-template.fold-left-gate" msgstr "Fold Left Gate" msgid "finishing-template.fold-letter" msgstr "Fold Letter" msgid "finishing-template.fold-parallel" msgstr "Fold Parallel" msgid "finishing-template.fold-poster" msgstr "Fold Poster" msgid "finishing-template.fold-right-gate" msgstr "Fold Right Gate" msgid "finishing-template.fold-z" msgstr "Fold Z" msgid "finishing-template.jdf-f10-1" msgstr "JDF F10 1" msgid "finishing-template.jdf-f10-2" msgstr "JDF F10 2" msgid "finishing-template.jdf-f10-3" msgstr "JDF F10 3" msgid "finishing-template.jdf-f12-1" msgstr "JDF F12 1" msgid "finishing-template.jdf-f12-10" msgstr "JDF F12 10" msgid "finishing-template.jdf-f12-11" msgstr "JDF F12 11" msgid "finishing-template.jdf-f12-12" msgstr "JDF F12 12" msgid "finishing-template.jdf-f12-13" msgstr "JDF F12 13" msgid "finishing-template.jdf-f12-14" msgstr "JDF F12 14" msgid "finishing-template.jdf-f12-2" msgstr "JDF F12 2" msgid "finishing-template.jdf-f12-3" msgstr "JDF F12 3" msgid "finishing-template.jdf-f12-4" msgstr "JDF F12 4" msgid "finishing-template.jdf-f12-5" msgstr "JDF F12 5" msgid "finishing-template.jdf-f12-6" msgstr "JDF F12 6" msgid "finishing-template.jdf-f12-7" msgstr "JDF F12 7" msgid "finishing-template.jdf-f12-8" msgstr "JDF F12 8" msgid "finishing-template.jdf-f12-9" msgstr "JDF F12 9" msgid "finishing-template.jdf-f14-1" msgstr "JDF F14 1" msgid "finishing-template.jdf-f16-1" msgstr "JDF F16 1" msgid "finishing-template.jdf-f16-10" msgstr "JDF F16 10" msgid "finishing-template.jdf-f16-11" msgstr "JDF F16 11" msgid "finishing-template.jdf-f16-12" msgstr "JDF F16 12" msgid "finishing-template.jdf-f16-13" msgstr "JDF F16 13" msgid "finishing-template.jdf-f16-14" msgstr "JDF F16 14" msgid "finishing-template.jdf-f16-2" msgstr "JDF F16 2" msgid "finishing-template.jdf-f16-3" msgstr "JDF F16 3" msgid "finishing-template.jdf-f16-4" msgstr "JDF F16 4" msgid "finishing-template.jdf-f16-5" msgstr "JDF F16 5" msgid "finishing-template.jdf-f16-6" msgstr "JDF F16 6" msgid "finishing-template.jdf-f16-7" msgstr "JDF F16 7" msgid "finishing-template.jdf-f16-8" msgstr "JDF F16 8" msgid "finishing-template.jdf-f16-9" msgstr "JDF F16 9" msgid "finishing-template.jdf-f18-1" msgstr "JDF F18 1" msgid "finishing-template.jdf-f18-2" msgstr "JDF F18 2" msgid "finishing-template.jdf-f18-3" msgstr "JDF F18 3" msgid "finishing-template.jdf-f18-4" msgstr "JDF F18 4" msgid "finishing-template.jdf-f18-5" msgstr "JDF F18 5" msgid "finishing-template.jdf-f18-6" msgstr "JDF F18 6" msgid "finishing-template.jdf-f18-7" msgstr "JDF F18 7" msgid "finishing-template.jdf-f18-8" msgstr "JDF F18 8" msgid "finishing-template.jdf-f18-9" msgstr "JDF F18 9" msgid "finishing-template.jdf-f2-1" msgstr "JDF F2 1" msgid "finishing-template.jdf-f20-1" msgstr "JDF F20 1" msgid "finishing-template.jdf-f20-2" msgstr "JDF F20 2" msgid "finishing-template.jdf-f24-1" msgstr "JDF F24 1" msgid "finishing-template.jdf-f24-10" msgstr "JDF F24 10" msgid "finishing-template.jdf-f24-11" msgstr "JDF F24 11" msgid "finishing-template.jdf-f24-2" msgstr "JDF F24 2" msgid "finishing-template.jdf-f24-3" msgstr "JDF F24 3" msgid "finishing-template.jdf-f24-4" msgstr "JDF F24 4" msgid "finishing-template.jdf-f24-5" msgstr "JDF F24 5" msgid "finishing-template.jdf-f24-6" msgstr "JDF F24 6" msgid "finishing-template.jdf-f24-7" msgstr "JDF F24 7" msgid "finishing-template.jdf-f24-8" msgstr "JDF F24 8" msgid "finishing-template.jdf-f24-9" msgstr "JDF F24 9" msgid "finishing-template.jdf-f28-1" msgstr "JDF F28 1" msgid "finishing-template.jdf-f32-1" msgstr "JDF F32 1" msgid "finishing-template.jdf-f32-2" msgstr "JDF F32 2" msgid "finishing-template.jdf-f32-3" msgstr "JDF F32 3" msgid "finishing-template.jdf-f32-4" msgstr "JDF F32 4" msgid "finishing-template.jdf-f32-5" msgstr "JDF F32 5" msgid "finishing-template.jdf-f32-6" msgstr "JDF F32 6" msgid "finishing-template.jdf-f32-7" msgstr "JDF F32 7" msgid "finishing-template.jdf-f32-8" msgstr "JDF F32 8" msgid "finishing-template.jdf-f32-9" msgstr "JDF F32 9" msgid "finishing-template.jdf-f36-1" msgstr "JDF F36 1" msgid "finishing-template.jdf-f36-2" msgstr "JDF F36 2" msgid "finishing-template.jdf-f4-1" msgstr "JDF F4 1" msgid "finishing-template.jdf-f4-2" msgstr "JDF F4 2" msgid "finishing-template.jdf-f40-1" msgstr "JDF F40 1" msgid "finishing-template.jdf-f48-1" msgstr "JDF F48 1" msgid "finishing-template.jdf-f48-2" msgstr "JDF F48 2" msgid "finishing-template.jdf-f6-1" msgstr "JDF F6 1" msgid "finishing-template.jdf-f6-2" msgstr "JDF F6 2" msgid "finishing-template.jdf-f6-3" msgstr "JDF F6 3" msgid "finishing-template.jdf-f6-4" msgstr "JDF F6 4" msgid "finishing-template.jdf-f6-5" msgstr "JDF F6 5" msgid "finishing-template.jdf-f6-6" msgstr "JDF F6 6" msgid "finishing-template.jdf-f6-7" msgstr "JDF F6 7" msgid "finishing-template.jdf-f6-8" msgstr "JDF F6 8" msgid "finishing-template.jdf-f64-1" msgstr "JDF F64 1" msgid "finishing-template.jdf-f64-2" msgstr "JDF F64 2" msgid "finishing-template.jdf-f8-1" msgstr "JDF F8 1" msgid "finishing-template.jdf-f8-2" msgstr "JDF F8 2" msgid "finishing-template.jdf-f8-3" msgstr "JDF F8 3" msgid "finishing-template.jdf-f8-4" msgstr "JDF F8 4" msgid "finishing-template.jdf-f8-5" msgstr "JDF F8 5" msgid "finishing-template.jdf-f8-6" msgstr "JDF F8 6" msgid "finishing-template.jdf-f8-7" msgstr "JDF F8 7" msgid "finishing-template.jog-offset" msgstr "Jog Offset" msgid "finishing-template.laminate" msgstr "Laminate" msgid "finishing-template.punch" msgstr "Punch" msgid "finishing-template.punch-bottom-left" msgstr "Punch Bottom Left" msgid "finishing-template.punch-bottom-right" msgstr "Punch Bottom Right" msgid "finishing-template.punch-dual-bottom" msgstr "Punch Dual Bottom" msgid "finishing-template.punch-dual-left" msgstr "Punch Dual Left" msgid "finishing-template.punch-dual-right" msgstr "Punch Dual Right" msgid "finishing-template.punch-dual-top" msgstr "Punch Dual Top" msgid "finishing-template.punch-multiple-bottom" msgstr "Punch Multiple Bottom" msgid "finishing-template.punch-multiple-left" msgstr "Punch Multiple Left" msgid "finishing-template.punch-multiple-right" msgstr "Punch Multiple Right" msgid "finishing-template.punch-multiple-top" msgstr "Punch Multiple Top" msgid "finishing-template.punch-quad-bottom" msgstr "Punch Quad Bottom" msgid "finishing-template.punch-quad-left" msgstr "Punch Quad Left" msgid "finishing-template.punch-quad-right" msgstr "Punch Quad Right" msgid "finishing-template.punch-quad-top" msgstr "Punch Quad Top" msgid "finishing-template.punch-top-left" msgstr "Punch Top Left" msgid "finishing-template.punch-top-right" msgstr "Punch Top Right" msgid "finishing-template.punch-triple-bottom" msgstr "Punch Triple Bottom" msgid "finishing-template.punch-triple-left" msgstr "Punch Triple Left" msgid "finishing-template.punch-triple-right" msgstr "Punch Triple Right" msgid "finishing-template.punch-triple-top" msgstr "Punch Triple Top" msgid "finishing-template.saddle-stitch" msgstr "Saddle Stitch" msgid "finishing-template.staple" msgstr "Staple" msgid "finishing-template.staple-bottom-left" msgstr "Staple Bottom Left" msgid "finishing-template.staple-bottom-right" msgstr "Staple Bottom Right" msgid "finishing-template.staple-dual-bottom" msgstr "Staple Dual Bottom" msgid "finishing-template.staple-dual-left" msgstr "Staple Dual Left" msgid "finishing-template.staple-dual-right" msgstr "Staple Dual Right" msgid "finishing-template.staple-dual-top" msgstr "Staple Dual Top" msgid "finishing-template.staple-top-left" msgstr "Staple Top Left" msgid "finishing-template.staple-top-right" msgstr "Staple Top Right" msgid "finishing-template.staple-triple-bottom" msgstr "Staple Triple Bottom" msgid "finishing-template.staple-triple-left" msgstr "Staple Triple Left" msgid "finishing-template.staple-triple-right" msgstr "Staple Triple Right" msgid "finishing-template.staple-triple-top" msgstr "Staple Triple Top" msgid "finishing-template.trim" msgstr "Trim" msgid "finishing-template.trim-after-copies" msgstr "Trim After Copies" msgid "finishing-template.trim-after-documents" msgstr "Trim After Documents" msgid "finishing-template.trim-after-job" msgstr "Trim After Job" msgid "finishing-template.trim-after-pages" msgstr "Trim After Pages" msgid "finishings" msgstr "Finishings" msgid "finishings-col" msgstr "Finishings" msgid "finishings.10" msgstr "Fold" msgid "finishings.100" msgstr "Fold Z" msgid "finishings.101" msgstr "Fold Engineering Z" msgid "finishings.11" msgstr "Trim" msgid "finishings.12" msgstr "Bale" msgid "finishings.13" msgstr "Booklet Maker" msgid "finishings.14" msgstr "Jog Offset" msgid "finishings.15" msgstr "Coat" msgid "finishings.16" msgstr "Laminate" msgid "finishings.20" msgstr "Staple Top Left" msgid "finishings.21" msgstr "Staple Bottom Left" msgid "finishings.22" msgstr "Staple Top Right" msgid "finishings.23" msgstr "Staple Bottom Right" msgid "finishings.24" msgstr "Edge Stitch Left" msgid "finishings.25" msgstr "Edge Stitch Top" msgid "finishings.26" msgstr "Edge Stitch Right" msgid "finishings.27" msgstr "Edge Stitch Bottom" msgid "finishings.28" msgstr "Staple Dual Left" msgid "finishings.29" msgstr "Staple Dual Top" msgid "finishings.3" msgstr "None" msgid "finishings.30" msgstr "Staple Dual Right" msgid "finishings.31" msgstr "Staple Dual Bottom" msgid "finishings.32" msgstr "Staple Triple Left" msgid "finishings.33" msgstr "Staple Triple Top" msgid "finishings.34" msgstr "Staple Triple Right" msgid "finishings.35" msgstr "Staple Triple Bottom" msgid "finishings.4" msgstr "Staple" msgid "finishings.5" msgstr "Punch" msgid "finishings.50" msgstr "Bind Left" msgid "finishings.51" msgstr "Bind Top" msgid "finishings.52" msgstr "Bind Right" msgid "finishings.53" msgstr "Bind Bottom" msgid "finishings.6" msgstr "Cover" msgid "finishings.60" msgstr "Trim After Pages" msgid "finishings.61" msgstr "Trim After Documents" msgid "finishings.62" msgstr "Trim After Copies" msgid "finishings.63" msgstr "Trim After Job" msgid "finishings.7" msgstr "Bind" msgid "finishings.70" msgstr "Punch Top Left" msgid "finishings.71" msgstr "Punch Bottom Left" msgid "finishings.72" msgstr "Punch Top Right" msgid "finishings.73" msgstr "Punch Bottom Right" msgid "finishings.74" msgstr "Punch Dual Left" msgid "finishings.75" msgstr "Punch Dual Top" msgid "finishings.76" msgstr "Punch Dual Right" msgid "finishings.77" msgstr "Punch Dual Bottom" msgid "finishings.78" msgstr "Punch Triple Left" msgid "finishings.79" msgstr "Punch Triple Top" msgid "finishings.8" msgstr "Saddle Stitch" msgid "finishings.80" msgstr "Punch Triple Right" msgid "finishings.81" msgstr "Punch Triple Bottom" msgid "finishings.82" msgstr "Punch Quad Left" msgid "finishings.83" msgstr "Punch Quad Top" msgid "finishings.84" msgstr "Punch Quad Right" msgid "finishings.85" msgstr "Punch Quad Bottom" msgid "finishings.86" msgstr "Punch Multiple Left" msgid "finishings.87" msgstr "Punch Multiple Top" msgid "finishings.88" msgstr "Punch Multiple Right" msgid "finishings.89" msgstr "Punch Multiple Bottom" msgid "finishings.9" msgstr "Edge Stitch" msgid "finishings.90" msgstr "Fold Accordion" msgid "finishings.91" msgstr "Fold Double Gate" msgid "finishings.92" msgstr "Fold Gate" msgid "finishings.93" msgstr "Fold Half" msgid "finishings.94" msgstr "Fold Half Z" msgid "finishings.95" msgstr "Fold Left Gate" msgid "finishings.96" msgstr "Fold Letter" msgid "finishings.97" msgstr "Fold Parallel" msgid "finishings.98" msgstr "Fold Poster" msgid "finishings.99" msgstr "Fold Right Gate" msgid "folding" msgstr "Fold" msgid "folding-direction" msgstr "Folding Direction" msgid "folding-direction.inward" msgstr "Inward" msgid "folding-direction.outward" msgstr "Outward" msgid "folding-offset" msgstr "Fold Position" msgid "folding-reference-edge" msgstr "Folding Reference Edge" msgid "folding-reference-edge.bottom" msgstr "Bottom" msgid "folding-reference-edge.left" msgstr "Left" msgid "folding-reference-edge.right" msgstr "Right" msgid "folding-reference-edge.top" msgstr "Top" msgid "font-name-requested" msgstr "Font Name" msgid "font-size-requested" msgstr "Font Size" msgid "force-front-side" msgstr "Force Front Side" msgid "from-name" msgstr "From Name" msgid "held" msgstr "En pausa" msgid "help\t\tGet help on commands." msgstr "help\t\tproporciona ajuda sobre les comandes." msgid "idle" msgstr "inactiva" msgid "imposition-template" msgstr "Imposition Template" msgid "imposition-template.none" msgstr "None" msgid "imposition-template.signature" msgstr "Signature" msgid "input-attributes" msgstr "Input Attributes" msgid "input-auto-scaling" msgstr "Scan Auto Scaling" msgid "input-auto-skew-correction" msgstr "Scan Auto Skew Correction" msgid "input-brightness" msgstr "Scan Brightness" msgid "input-color-mode" msgstr "Input Color Mode" msgid "input-color-mode.auto" msgstr "Automatic" msgid "input-color-mode.bi-level" msgstr "Bi-Level" msgid "input-color-mode.cmyk_16" msgstr "CMYK 16" msgid "input-color-mode.cmyk_8" msgstr "CMYK 8" msgid "input-color-mode.color" msgstr "Color" msgid "input-color-mode.color_8" msgstr "Color 8" msgid "input-color-mode.monochrome" msgstr "Monochrome" msgid "input-color-mode.monochrome_16" msgstr "Monochrome 16" msgid "input-color-mode.monochrome_4" msgstr "Monochrome 4" msgid "input-color-mode.monochrome_8" msgstr "Monochrome 8" msgid "input-color-mode.rgb_16" msgstr "RGB 16" msgid "input-color-mode.rgba_16" msgstr "RGBA 16" msgid "input-color-mode.rgba_8" msgstr "RGBA 8" msgid "input-content-type" msgstr "Input Content Type" msgid "input-content-type.auto" msgstr "Automatic" msgid "input-content-type.halftone" msgstr "Halftone" msgid "input-content-type.line-art" msgstr "Line Art" msgid "input-content-type.magazine" msgstr "Magazine" msgid "input-content-type.photo" msgstr "Photo" msgid "input-content-type.text" msgstr "Text" msgid "input-content-type.text-and-photo" msgstr "Text And Photo" msgid "input-contrast" msgstr "Scan Contrast" msgid "input-film-scan-mode" msgstr "Input Film Scan Mode" msgid "input-film-scan-mode.black-and-white-negative-film" msgstr "Black And White Negative Film" msgid "input-film-scan-mode.color-negative-film" msgstr "Color Negative Film" msgid "input-film-scan-mode.color-slide-film" msgstr "Color Slide Film" msgid "input-film-scan-mode.not-applicable" msgstr "Not Applicable" msgid "input-images-to-transfer" msgstr "Scan Images To Transfer" msgid "input-media" msgstr "Input Media" msgid "input-media.auto" msgstr "Automatic" msgid "input-orientation-requested" msgstr "Input Orientation" msgid "input-quality" msgstr "Input Quality" msgid "input-resolution" msgstr "Scan Resolution" msgid "input-scaling-height" msgstr "Scan Scaling Height" msgid "input-scaling-width" msgstr "Scan Scaling Width" msgid "input-scan-regions" msgstr "Scan Regions" msgid "input-sharpness" msgstr "Scan Sharpness" msgid "input-sides" msgstr "Input Sides" msgid "input-source" msgstr "Input Source" msgid "input-source.adf" msgstr "Adf" msgid "input-source.film-reader" msgstr "Film Reader" msgid "input-source.platen" msgstr "Platen" msgid "insert-after-page-number" msgstr "Insert Page Number" msgid "insert-count" msgstr "Insert Count" msgid "insert-sheet" msgstr "Insert Sheet" #, c-format msgid "ippfind: Bad regular expression: %s" msgstr "" msgid "ippfind: Cannot use --and after --or." msgstr "" #, c-format msgid "ippfind: Expected key name after %s." msgstr "" #, c-format msgid "ippfind: Expected port range after %s." msgstr "" #, c-format msgid "ippfind: Expected program after %s." msgstr "" #, c-format msgid "ippfind: Expected semi-colon after %s." msgstr "" msgid "ippfind: Missing close brace in substitution." msgstr "" msgid "ippfind: Missing close parenthesis." msgstr "" msgid "ippfind: Missing expression before \"--and\"." msgstr "" msgid "ippfind: Missing expression before \"--or\"." msgstr "" #, c-format msgid "ippfind: Missing key name after %s." msgstr "" msgid "ippfind: Missing open parenthesis." msgstr "" #, c-format msgid "ippfind: Missing program after %s." msgstr "" #, c-format msgid "ippfind: Missing regular expression after %s." msgstr "" #, c-format msgid "ippfind: Missing semi-colon after %s." msgstr "" msgid "ippfind: Out of memory." msgstr "" msgid "ippfind: Too many parenthesis." msgstr "" #, c-format msgid "ippfind: Unable to browse or resolve: %s" msgstr "" #, c-format msgid "ippfind: Unable to execute \"%s\": %s" msgstr "" #, c-format msgid "ippfind: Unable to use Bonjour: %s" msgstr "" #, c-format msgid "ippfind: Unknown variable \"{%s}\"." msgstr "" msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." msgstr "" #, c-format msgid "ipptool: Bad URI - %s." msgstr "ipptool: l'URI no es correcte - %s." msgid "ipptool: Invalid seconds for \"-i\"." msgstr "ipptool: els segons de «-i» no són correctes." msgid "ipptool: May only specify a single URI." msgstr "ipptool: heu d'especificar només un URI." msgid "ipptool: Missing count for \"-n\"." msgstr "ipptool: falta el comptador de «-n»." msgid "ipptool: Missing filename for \"-f\"." msgstr "ipptool: falta el nom del fitxer a «-f»." msgid "ipptool: Missing name=value for \"-d\"." msgstr "ipptool: falta nom=valor a «-d»." msgid "ipptool: Missing seconds for \"-i\"." msgstr "ipptool: falten els segons a «-i»." msgid "ipptool: URI required before test file." msgstr "ipptool: falta l'URI abans del fitxer de prova." #, c-format msgid "ipptool: Unknown option \"-%c\"." msgstr "ipptool: l'opció «-%c» és desconeguda." msgid "job-account-id" msgstr "Job Account ID" msgid "job-account-type" msgstr "Job Account Type" msgid "job-account-type.general" msgstr "General" msgid "job-account-type.group" msgstr "Group" msgid "job-account-type.none" msgstr "None" msgid "job-accounting-output-bin" msgstr "Job Accounting Output Bin" msgid "job-accounting-sheets" msgstr "Job Accounting Sheets" msgid "job-accounting-sheets-type" msgstr "Job Accounting Sheets Type" msgid "job-accounting-sheets-type.none" msgstr "None" msgid "job-accounting-sheets-type.standard" msgstr "Standard" msgid "job-accounting-user-id" msgstr "Job Accounting User ID" msgid "job-collation-type" msgstr "Job Collation Type" msgid "job-collation-type.3" msgstr "Uncollated Sheets" msgid "job-collation-type.4" msgstr "Collated Documents" msgid "job-collation-type.5" msgstr "Uncollated Documents" msgid "job-copies" msgstr "Job Copies" msgid "job-cover-back" msgstr "Job Cover Back" msgid "job-cover-front" msgstr "Job Cover Front" msgid "job-delay-output-until" msgstr "Job Delay Output Until" msgid "job-delay-output-until-time" msgstr "Job Delay Output Until Time" msgid "job-delay-output-until.day-time" msgstr "Day Time" msgid "job-delay-output-until.evening" msgstr "Evening" msgid "job-delay-output-until.indefinite" msgstr "Indefinite" msgid "job-delay-output-until.night" msgstr "Night" msgid "job-delay-output-until.no-delay-output" msgstr "No Delay Output" msgid "job-delay-output-until.second-shift" msgstr "Second Shift" msgid "job-delay-output-until.third-shift" msgstr "Third Shift" msgid "job-delay-output-until.weekend" msgstr "Weekend" msgid "job-error-action" msgstr "Job Error Action" msgid "job-error-action.abort-job" msgstr "Abort Job" msgid "job-error-action.cancel-job" msgstr "Cancel Job" msgid "job-error-action.continue-job" msgstr "Continue Job" msgid "job-error-action.suspend-job" msgstr "Suspend Job" msgid "job-error-sheet" msgstr "Job Error Sheet" msgid "job-error-sheet-type" msgstr "Job Error Sheet Type" msgid "job-error-sheet-type.none" msgstr "None" msgid "job-error-sheet-type.standard" msgstr "Standard" msgid "job-error-sheet-when" msgstr "Job Error Sheet When" msgid "job-error-sheet-when.always" msgstr "Always" msgid "job-error-sheet-when.on-error" msgstr "On Error" msgid "job-finishings" msgstr "Job Finishings" msgid "job-hold-until" msgstr "Hold Until" msgid "job-hold-until-time" msgstr "Job Hold Until Time" msgid "job-hold-until.day-time" msgstr "Day Time" msgid "job-hold-until.evening" msgstr "Evening" msgid "job-hold-until.indefinite" msgstr "Released" msgid "job-hold-until.night" msgstr "Night" msgid "job-hold-until.no-hold" msgstr "No Hold" msgid "job-hold-until.second-shift" msgstr "Second Shift" msgid "job-hold-until.third-shift" msgstr "Third Shift" msgid "job-hold-until.weekend" msgstr "Weekend" msgid "job-mandatory-attributes" msgstr "Job Mandatory Attributes" msgid "job-name" msgstr "Job Name" msgid "job-phone-number" msgstr "Job Phone Number" msgid "job-printer-uri attribute missing." msgstr "Falta l'atribut de job-printer-uri." msgid "job-priority" msgstr "Job Priority" msgid "job-recipient-name" msgstr "Job Recipient Name" msgid "job-save-disposition" msgstr "Job Save Disposition" msgid "job-sheet-message" msgstr "Job Sheet Message" msgid "job-sheets" msgstr "Banner Page" msgid "job-sheets-col" msgstr "Banner Page" msgid "job-sheets.first-print-stream-page" msgstr "First Print Stream Page" msgid "job-sheets.job-both-sheet" msgstr "Start and End Sheets" msgid "job-sheets.job-end-sheet" msgstr "End Sheet" msgid "job-sheets.job-start-sheet" msgstr "Start Sheet" msgid "job-sheets.none" msgstr "None" msgid "job-sheets.standard" msgstr "Standard" msgid "job-state" msgstr "Job State" msgid "job-state-message" msgstr "Job State Message" msgid "job-state-reasons" msgstr "Detailed Job State" msgid "job-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "job-state-reasons.account-authorization-failed" msgstr "Account Authorization Failed" msgid "job-state-reasons.account-closed" msgstr "Account Closed" msgid "job-state-reasons.account-info-needed" msgstr "Account Info Needed" msgid "job-state-reasons.account-limit-reached" msgstr "Account Limit Reached" msgid "job-state-reasons.compression-error" msgstr "Compression Error" msgid "job-state-reasons.conflicting-attributes" msgstr "Conflicting Attributes" msgid "job-state-reasons.connected-to-destination" msgstr "Connected To Destination" msgid "job-state-reasons.connecting-to-destination" msgstr "Connecting To Destination" msgid "job-state-reasons.destination-uri-failed" msgstr "Destination Uri Failed" msgid "job-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "job-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "job-state-reasons.document-access-error" msgstr "Document Access Error" msgid "job-state-reasons.document-format-error" msgstr "Document Format Error" msgid "job-state-reasons.document-password-error" msgstr "Document Password Error" msgid "job-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "job-state-reasons.document-security-error" msgstr "Document Security Error" msgid "job-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "job-state-reasons.errors-detected" msgstr "Errors Detected" msgid "job-state-reasons.job-canceled-at-device" msgstr "Job Canceled At Device" msgid "job-state-reasons.job-canceled-by-operator" msgstr "Job Canceled By Operator" msgid "job-state-reasons.job-canceled-by-user" msgstr "Job Canceled By User" msgid "job-state-reasons.job-completed-successfully" msgstr "Job Completed Successfully" msgid "job-state-reasons.job-completed-with-errors" msgstr "Job Completed With Errors" msgid "job-state-reasons.job-completed-with-warnings" msgstr "Job Completed With Warnings" msgid "job-state-reasons.job-data-insufficient" msgstr "Job Data Insufficient" msgid "job-state-reasons.job-delay-output-until-specified" msgstr "Job Delay Output Until Specified" msgid "job-state-reasons.job-digital-signature-wait" msgstr "Job Digital Signature Wait" msgid "job-state-reasons.job-fetchable" msgstr "Job Fetchable" msgid "job-state-reasons.job-held-for-review" msgstr "Job Held For Review" msgid "job-state-reasons.job-hold-until-specified" msgstr "Job Hold Until Specified" msgid "job-state-reasons.job-incoming" msgstr "Job Incoming" msgid "job-state-reasons.job-interpreting" msgstr "Job Interpreting" msgid "job-state-reasons.job-outgoing" msgstr "Job Outgoing" msgid "job-state-reasons.job-password-wait" msgstr "Job Password Wait" msgid "job-state-reasons.job-printed-successfully" msgstr "Job Printed Successfully" msgid "job-state-reasons.job-printed-with-errors" msgstr "Job Printed With Errors" msgid "job-state-reasons.job-printed-with-warnings" msgstr "Job Printed With Warnings" msgid "job-state-reasons.job-printing" msgstr "Job Printing" msgid "job-state-reasons.job-queued" msgstr "Job Queued" msgid "job-state-reasons.job-queued-for-marker" msgstr "Job Queued For Marker" msgid "job-state-reasons.job-release-wait" msgstr "Job Release Wait" msgid "job-state-reasons.job-restartable" msgstr "Job Restartable" msgid "job-state-reasons.job-resuming" msgstr "Job Resuming" msgid "job-state-reasons.job-saved-successfully" msgstr "Job Saved Successfully" msgid "job-state-reasons.job-saved-with-errors" msgstr "Job Saved With Errors" msgid "job-state-reasons.job-saved-with-warnings" msgstr "Job Saved With Warnings" msgid "job-state-reasons.job-saving" msgstr "Job Saving" msgid "job-state-reasons.job-spooling" msgstr "Job Spooling" msgid "job-state-reasons.job-streaming" msgstr "Job Streaming" msgid "job-state-reasons.job-suspended" msgstr "Job Suspended" msgid "job-state-reasons.job-suspended-by-operator" msgstr "Job Suspended By Operator" msgid "job-state-reasons.job-suspended-by-system" msgstr "Job Suspended By System" msgid "job-state-reasons.job-suspended-by-user" msgstr "Job Suspended By User" msgid "job-state-reasons.job-suspending" msgstr "Job Suspending" msgid "job-state-reasons.job-transferring" msgstr "Job Transferring" msgid "job-state-reasons.job-transforming" msgstr "Job Transforming" msgid "job-state-reasons.none" msgstr "None" msgid "job-state-reasons.printer-stopped" msgstr "Printer Stopped" msgid "job-state-reasons.printer-stopped-partly" msgstr "Printer Stopped Partly" msgid "job-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "job-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "job-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "job-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "job-state-reasons.service-off-line" msgstr "Service Off Line" msgid "job-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "job-state-reasons.unsupported-attributes-or-values" msgstr "Unsupported Attributes Or Values" msgid "job-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "job-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "job-state-reasons.waiting-for-user-action" msgstr "Waiting For User Action" msgid "job-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "job-state.3" msgstr "Pending" msgid "job-state.4" msgstr "Pending Held" msgid "job-state.5" msgstr "Processing" msgid "job-state.6" msgstr "Processing Stopped" msgid "job-state.7" msgstr "Canceled" msgid "job-state.8" msgstr "Aborted" msgid "job-state.9" msgstr "Completed" msgid "laminating" msgstr "Laminate Pages" msgid "laminating-sides" msgstr "Laminating Sides" msgid "laminating-sides.back" msgstr "Back" msgid "laminating-sides.both" msgstr "Both" msgid "laminating-sides.front" msgstr "Front" msgid "laminating-type" msgstr "Laminating Type" msgid "laminating-type.archival" msgstr "Archival" msgid "laminating-type.glossy" msgstr "Glossy" msgid "laminating-type.high-gloss" msgstr "High Gloss" msgid "laminating-type.matte" msgstr "Matte" msgid "laminating-type.semi-gloss" msgstr "Semi-Gloss" msgid "laminating-type.translucent" msgstr "Translucent" msgid "logo" msgstr "Logo" msgid "lpadmin: Class name can only contain printable characters." msgstr "lpadmin: el nom de la classe només pot tenir caràcters imprimibles." #, c-format msgid "lpadmin: Expected PPD after \"-%c\" option." msgstr "" msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option." msgstr "lpadmin: s'esperava allow/deny:llistausuaris després de l'opció «-u»." msgid "lpadmin: Expected class after \"-r\" option." msgstr "lpadmin: s'esperava una classe després de l'opció «-r»." msgid "lpadmin: Expected class name after \"-c\" option." msgstr "lpadmin: s'esperava un nom de classe després de l'opció «-c»." msgid "lpadmin: Expected description after \"-D\" option." msgstr "lpadmin: s'esperava una descripció després de l'opció «-D»." msgid "lpadmin: Expected device URI after \"-v\" option." msgstr "lpadmin: s'esperava un URI de dispositiu després de l'opció «-v»." msgid "lpadmin: Expected file type(s) after \"-I\" option." msgstr "lpadmin: s'esperava un(s) tipus de fitxer(s) després de l'opció «-I»." msgid "lpadmin: Expected hostname after \"-h\" option." msgstr "lpadmin: s'esperava un nom d'amfitrió després de l'opció «-h»." msgid "lpadmin: Expected location after \"-L\" option." msgstr "lpadmin: s'esperava una ubicació després de l'opció «-L»." msgid "lpadmin: Expected model after \"-m\" option." msgstr "lpadmin: s'esperava un model després de l'opció «-m»." msgid "lpadmin: Expected name after \"-R\" option." msgstr "lpadmin: s'esperava un nom després de l'opció «-R»." msgid "lpadmin: Expected name=value after \"-o\" option." msgstr "lpadmin: s'esperava nom=valor després de l'opció «-o»." msgid "lpadmin: Expected printer after \"-p\" option." msgstr "lpadmin: s'esperava una impressora després de l'opció «-p»." msgid "lpadmin: Expected printer name after \"-d\" option." msgstr "lpadmin: s'esperava un nom d'impressora després de l'opció «-d»." msgid "lpadmin: Expected printer or class after \"-x\" option." msgstr "lpadmin: s'esperava un impressora o classe després de l'opció «-x»." msgid "lpadmin: No member names were seen." msgstr "lpadmin: no s'ha trobat cap nom de membre." #, c-format msgid "lpadmin: Printer %s is already a member of class %s." msgstr "lpadmin: la impressora %s ja és membre de la classe %s." #, c-format msgid "lpadmin: Printer %s is not a member of class %s." msgstr "lpadmin: la impressora %s no és membre de la classe %s." msgid "lpadmin: Printer name can only contain printable characters." msgstr "" "lpadmin: el nom de la impressora només pot contenir caràcters imprimibles." msgid "" "lpadmin: Raw queues are deprecated and will stop working in a future version " "of CUPS." msgstr "" msgid "" "lpadmin: System V interface scripts are no longer supported for security " "reasons." msgstr "" msgid "" "lpadmin: Unable to add a printer to the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: no s'ha pogut afegir una impressora a la classe:\n" " Heu d'especificar primer un nom d'impressora." #, c-format msgid "lpadmin: Unable to connect to server: %s" msgstr "lpadmin: no s'ha pogut connectar al servidor: %s" msgid "lpadmin: Unable to create temporary file" msgstr "lpadmin: no s'ha pogut crear el fitxer temporal" msgid "" "lpadmin: Unable to delete option:\n" " You must specify a printer name first." msgstr "" "lpadmin: no s'ha pogut esborrar l'opció:\n" " Heu d'especificar primer un nom d'impressora." #, c-format msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d." msgstr "" #, c-format msgid "lpadmin: Unable to open PPD file \"%s\" - %s" msgstr "lpadmin: no s'ha pogut obrir el fitxer PPD «%s» - %s" msgid "" "lpadmin: Unable to remove a printer from the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: no es pot esborrar una impressora de la classe:\n" " Heu d'especificar primer un nom d'impressora." msgid "" "lpadmin: Unable to set the printer options:\n" " You must specify a printer name first." msgstr "" "lpadmin: no es pot establir les opcions de la impressora:\n" " Heu d'especificar primer un nom d'impressora." #, c-format msgid "lpadmin: Unknown allow/deny option \"%s\"." msgstr "lpadmin: l'opció allow/deny «%s» és desconeguda." #, c-format msgid "lpadmin: Unknown argument \"%s\"." msgstr "lpadmin: l'argument «%s» és desconegut." #, c-format msgid "lpadmin: Unknown option \"%c\"." msgstr "lpadmin: l'opció «%c» és desconeguda." msgid "lpadmin: Use the 'everywhere' model for shared printers." msgstr "" msgid "lpadmin: Warning - content type list ignored." msgstr "lpadmin: avís - s'ignora el contingut de la llista de tipus." msgid "lpc> " msgstr "lpc> " msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"." msgstr "" "lpinfo: s'esperava una cadena d'ID de dispositiu 1284 després de «--device-" "id»." msgid "lpinfo: Expected language after \"--language\"." msgstr "lpinfo: s'esperava un idioma després de «--language»." msgid "lpinfo: Expected make and model after \"--make-and-model\"." msgstr "lpinfo: s'esperava una marca i model després de «--make-and-model»." msgid "lpinfo: Expected product string after \"--product\"." msgstr "lpinfo: s'esperava una cadena de producte després de «--product!»." msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"." msgstr "" "lpinfo: s'esperava una llista d'esquemes després de l'opció «--exclude-" "schemes»." msgid "lpinfo: Expected scheme list after \"--include-schemes\"." msgstr "" "lpinfo: s'esperava una llista d'esquemes després de l'opció «--include-" "schemes»." msgid "lpinfo: Expected timeout after \"--timeout\"." msgstr "lpinfo: s'esperava un temps d'espera després de «--timeout»." #, c-format msgid "lpmove: Unable to connect to server: %s" msgstr "lpmove: no s'ha pogut connectar al servidor: %s" #, c-format msgid "lpmove: Unknown argument \"%s\"." msgstr "lpmove: l'argument «%s» és desconegut." msgid "lpoptions: No printers." msgstr "lpoptions: no hi ha cap impressora." #, c-format msgid "lpoptions: Unable to add printer or instance: %s" msgstr "lpoptions: no s'ha pogut afegir la impressora o la instància: %s" #, c-format msgid "lpoptions: Unable to get PPD file for %s: %s" msgstr "lpoptions: no s'ha pogut obtenir el fitxer PPD de %s: %s" #, c-format msgid "lpoptions: Unable to open PPD file for %s." msgstr "lpoptions: no s'ha pogut obrir el fitxer PPD per %s." msgid "lpoptions: Unknown printer or class." msgstr "lpoptions: la impressora o la classe són desconegudes." #, c-format msgid "" "lpstat: error - %s environment variable names non-existent destination \"%s" "\"." msgstr "" "lpstat: error - la variable d'entorn %s esmenta el destí «%s» que no " "existeix." msgid "material-amount" msgstr "Amount of Material" msgid "material-amount-units" msgstr "Material Amount Units" msgid "material-amount-units.g" msgstr "G" msgid "material-amount-units.kg" msgstr "Kg" msgid "material-amount-units.l" msgstr "L" msgid "material-amount-units.m" msgstr "M" msgid "material-amount-units.ml" msgstr "Ml" msgid "material-amount-units.mm" msgstr "Mm" msgid "material-color" msgstr "Material Color" msgid "material-diameter" msgstr "Material Diameter" msgid "material-diameter-tolerance" msgstr "Material Diameter Tolerance" msgid "material-fill-density" msgstr "Material Fill Density" msgid "material-name" msgstr "Material Name" msgid "material-purpose" msgstr "Material Purpose" msgid "material-purpose.all" msgstr "All" msgid "material-purpose.base" msgstr "Base" msgid "material-purpose.in-fill" msgstr "In Fill" msgid "material-purpose.shell" msgstr "Shell" msgid "material-purpose.support" msgstr "Support" msgid "material-rate" msgstr "Feed Rate" msgid "material-rate-units" msgstr "Material Rate Units" msgid "material-rate-units.mg_second" msgstr "Mg Second" msgid "material-rate-units.ml_second" msgstr "Ml Second" msgid "material-rate-units.mm_second" msgstr "Mm Second" msgid "material-shell-thickness" msgstr "Material Shell Thickness" msgid "material-temperature" msgstr "Material Temperature" msgid "material-type" msgstr "Material Type" msgid "material-type.abs" msgstr "Abs" msgid "material-type.abs-carbon-fiber" msgstr "Abs Carbon Fiber" msgid "material-type.abs-carbon-nanotube" msgstr "Abs Carbon Nanotube" msgid "material-type.chocolate" msgstr "Chocolate" msgid "material-type.gold" msgstr "Gold" msgid "material-type.nylon" msgstr "Nylon" msgid "material-type.pet" msgstr "Pet" msgid "material-type.photopolymer" msgstr "Photopolymer" msgid "material-type.pla" msgstr "Pla" msgid "material-type.pla-conductive" msgstr "Pla Conductive" msgid "material-type.pla-flexible" msgstr "Pla Flexible" msgid "material-type.pla-magnetic" msgstr "Pla Magnetic" msgid "material-type.pla-steel" msgstr "Pla Steel" msgid "material-type.pla-stone" msgstr "Pla Stone" msgid "material-type.pla-wood" msgstr "Pla Wood" msgid "material-type.polycarbonate" msgstr "Polycarbonate" msgid "material-type.pva-dissolvable" msgstr "Dissolvable PVA" msgid "material-type.silver" msgstr "Silver" msgid "material-type.titanium" msgstr "Titanium" msgid "material-type.wax" msgstr "Wax" msgid "materials-col" msgstr "Materials" msgid "media" msgstr "Media" msgid "media-back-coating" msgstr "Media Back Coating" msgid "media-back-coating.glossy" msgstr "Glossy" msgid "media-back-coating.high-gloss" msgstr "High Gloss" msgid "media-back-coating.matte" msgstr "Matte" msgid "media-back-coating.none" msgstr "None" msgid "media-back-coating.satin" msgstr "Satin" msgid "media-back-coating.semi-gloss" msgstr "Semi-Gloss" msgid "media-bottom-margin" msgstr "Media Bottom Margin" msgid "media-col" msgstr "Media" msgid "media-color" msgstr "Media Color" msgid "media-color.black" msgstr "Black" msgid "media-color.blue" msgstr "Blue" msgid "media-color.brown" msgstr "Brown" msgid "media-color.buff" msgstr "Buff" msgid "media-color.clear-black" msgstr "Clear Black" msgid "media-color.clear-blue" msgstr "Clear Blue" msgid "media-color.clear-brown" msgstr "Clear Brown" msgid "media-color.clear-buff" msgstr "Clear Buff" msgid "media-color.clear-cyan" msgstr "Clear Cyan" msgid "media-color.clear-gold" msgstr "Clear Gold" msgid "media-color.clear-goldenrod" msgstr "Clear Goldenrod" msgid "media-color.clear-gray" msgstr "Clear Gray" msgid "media-color.clear-green" msgstr "Clear Green" msgid "media-color.clear-ivory" msgstr "Clear Ivory" msgid "media-color.clear-magenta" msgstr "Clear Magenta" msgid "media-color.clear-multi-color" msgstr "Clear Multi Color" msgid "media-color.clear-mustard" msgstr "Clear Mustard" msgid "media-color.clear-orange" msgstr "Clear Orange" msgid "media-color.clear-pink" msgstr "Clear Pink" msgid "media-color.clear-red" msgstr "Clear Red" msgid "media-color.clear-silver" msgstr "Clear Silver" msgid "media-color.clear-turquoise" msgstr "Clear Turquoise" msgid "media-color.clear-violet" msgstr "Clear Violet" msgid "media-color.clear-white" msgstr "Clear White" msgid "media-color.clear-yellow" msgstr "Clear Yellow" msgid "media-color.cyan" msgstr "Cyan" msgid "media-color.dark-blue" msgstr "Dark Blue" msgid "media-color.dark-brown" msgstr "Dark Brown" msgid "media-color.dark-buff" msgstr "Dark Buff" msgid "media-color.dark-cyan" msgstr "Dark Cyan" msgid "media-color.dark-gold" msgstr "Dark Gold" msgid "media-color.dark-goldenrod" msgstr "Dark Goldenrod" msgid "media-color.dark-gray" msgstr "Dark Gray" msgid "media-color.dark-green" msgstr "Dark Green" msgid "media-color.dark-ivory" msgstr "Dark Ivory" msgid "media-color.dark-magenta" msgstr "Dark Magenta" msgid "media-color.dark-mustard" msgstr "Dark Mustard" msgid "media-color.dark-orange" msgstr "Dark Orange" msgid "media-color.dark-pink" msgstr "Dark Pink" msgid "media-color.dark-red" msgstr "Dark Red" msgid "media-color.dark-silver" msgstr "Dark Silver" msgid "media-color.dark-turquoise" msgstr "Dark Turquoise" msgid "media-color.dark-violet" msgstr "Dark Violet" msgid "media-color.dark-yellow" msgstr "Dark Yellow" msgid "media-color.gold" msgstr "Gold" msgid "media-color.goldenrod" msgstr "Goldenrod" msgid "media-color.gray" msgstr "Gray" msgid "media-color.green" msgstr "Green" msgid "media-color.ivory" msgstr "Ivory" msgid "media-color.light-black" msgstr "Light Black" msgid "media-color.light-blue" msgstr "Light Blue" msgid "media-color.light-brown" msgstr "Light Brown" msgid "media-color.light-buff" msgstr "Light Buff" msgid "media-color.light-cyan" msgstr "Light Cyan" msgid "media-color.light-gold" msgstr "Light Gold" msgid "media-color.light-goldenrod" msgstr "Light Goldenrod" msgid "media-color.light-gray" msgstr "Light Gray" msgid "media-color.light-green" msgstr "Light Green" msgid "media-color.light-ivory" msgstr "Light Ivory" msgid "media-color.light-magenta" msgstr "Light Magenta" msgid "media-color.light-mustard" msgstr "Light Mustard" msgid "media-color.light-orange" msgstr "Light Orange" msgid "media-color.light-pink" msgstr "Light Pink" msgid "media-color.light-red" msgstr "Light Red" msgid "media-color.light-silver" msgstr "Light Silver" msgid "media-color.light-turquoise" msgstr "Light Turquoise" msgid "media-color.light-violet" msgstr "Light Violet" msgid "media-color.light-yellow" msgstr "Light Yellow" msgid "media-color.magenta" msgstr "Magenta" msgid "media-color.multi-color" msgstr "Multi-Color" msgid "media-color.mustard" msgstr "Mustard" msgid "media-color.no-color" msgstr "No Color" msgid "media-color.orange" msgstr "Orange" msgid "media-color.pink" msgstr "Pink" msgid "media-color.red" msgstr "Red" msgid "media-color.silver" msgstr "Silver" msgid "media-color.turquoise" msgstr "Turquoise" msgid "media-color.violet" msgstr "Violet" msgid "media-color.white" msgstr "White" msgid "media-color.yellow" msgstr "Yellow" msgid "media-front-coating" msgstr "Media Front Coating" msgid "media-grain" msgstr "Media Grain" msgid "media-grain.x-direction" msgstr "Cross-Feed Direction" msgid "media-grain.y-direction" msgstr "Feed Direction" msgid "media-hole-count" msgstr "Media Hole Count" msgid "media-info" msgstr "Media Info" msgid "media-input-tray-check" msgstr "Media Input Tray Check" msgid "media-left-margin" msgstr "Media Left Margin" msgid "media-pre-printed" msgstr "Media Preprinted" msgid "media-pre-printed.blank" msgstr "Blank" msgid "media-pre-printed.letter-head" msgstr "Letterhead" msgid "media-pre-printed.pre-printed" msgstr "Preprinted" msgid "media-recycled" msgstr "Media Recycled" msgid "media-recycled.none" msgstr "None" msgid "media-recycled.standard" msgstr "Standard" msgid "media-right-margin" msgstr "Media Right Margin" msgid "media-size" msgstr "Media Dimensions" msgid "media-size-name" msgstr "Media Name" msgid "media-source" msgstr "Media Source" msgid "media-source.alternate" msgstr "Alternate" msgid "media-source.alternate-roll" msgstr "Alternate Roll" msgid "media-source.auto" msgstr "Automatic" msgid "media-source.bottom" msgstr "Bottom" msgid "media-source.by-pass-tray" msgstr "By Pass Tray" msgid "media-source.center" msgstr "Center" msgid "media-source.disc" msgstr "Disc" msgid "media-source.envelope" msgstr "Envelope" msgid "media-source.hagaki" msgstr "Hagaki" msgid "media-source.large-capacity" msgstr "Large Capacity" msgid "media-source.left" msgstr "Left" msgid "media-source.main" msgstr "Main" msgid "media-source.main-roll" msgstr "Main Roll" msgid "media-source.manual" msgstr "Manual" msgid "media-source.middle" msgstr "Middle" msgid "media-source.photo" msgstr "Photo" msgid "media-source.rear" msgstr "Rear" msgid "media-source.right" msgstr "Right" msgid "media-source.roll-1" msgstr "Roll 1" msgid "media-source.roll-10" msgstr "Roll 10" msgid "media-source.roll-2" msgstr "Roll 2" msgid "media-source.roll-3" msgstr "Roll 3" msgid "media-source.roll-4" msgstr "Roll 4" msgid "media-source.roll-5" msgstr "Roll 5" msgid "media-source.roll-6" msgstr "Roll 6" msgid "media-source.roll-7" msgstr "Roll 7" msgid "media-source.roll-8" msgstr "Roll 8" msgid "media-source.roll-9" msgstr "Roll 9" msgid "media-source.side" msgstr "Side" msgid "media-source.top" msgstr "Top" msgid "media-source.tray-1" msgstr "Tray 1" msgid "media-source.tray-10" msgstr "Tray 10" msgid "media-source.tray-11" msgstr "Tray 11" msgid "media-source.tray-12" msgstr "Tray 12" msgid "media-source.tray-13" msgstr "Tray 13" msgid "media-source.tray-14" msgstr "Tray 14" msgid "media-source.tray-15" msgstr "Tray 15" msgid "media-source.tray-16" msgstr "Tray 16" msgid "media-source.tray-17" msgstr "Tray 17" msgid "media-source.tray-18" msgstr "Tray 18" msgid "media-source.tray-19" msgstr "Tray 19" msgid "media-source.tray-2" msgstr "Tray 2" msgid "media-source.tray-20" msgstr "Tray 20" msgid "media-source.tray-3" msgstr "Tray 3" msgid "media-source.tray-4" msgstr "Tray 4" msgid "media-source.tray-5" msgstr "Tray 5" msgid "media-source.tray-6" msgstr "Tray 6" msgid "media-source.tray-7" msgstr "Tray 7" msgid "media-source.tray-8" msgstr "Tray 8" msgid "media-source.tray-9" msgstr "Tray 9" msgid "media-thickness" msgstr "Media Thickness" msgid "media-tooth" msgstr "Media Tooth" msgid "media-tooth.antique" msgstr "Antique" msgid "media-tooth.calendared" msgstr "Calendared" msgid "media-tooth.coarse" msgstr "Coarse" msgid "media-tooth.fine" msgstr "Fine" msgid "media-tooth.linen" msgstr "Linen" msgid "media-tooth.medium" msgstr "Medium" msgid "media-tooth.smooth" msgstr "Smooth" msgid "media-tooth.stipple" msgstr "Stipple" msgid "media-tooth.uncalendared" msgstr "Uncalendared" msgid "media-tooth.vellum" msgstr "Vellum" msgid "media-top-margin" msgstr "Media Top Margin" msgid "media-type" msgstr "Media Type" msgid "media-type.aluminum" msgstr "Aluminum" msgid "media-type.auto" msgstr "Automatic" msgid "media-type.back-print-film" msgstr "Back Print Film" msgid "media-type.cardboard" msgstr "Cardboard" msgid "media-type.cardstock" msgstr "Cardstock" msgid "media-type.cd" msgstr "CD" msgid "media-type.com.hp.advanced-photo" msgstr "Advanced Photo Paper" msgid "media-type.com.hp.brochure-glossy" msgstr "Glossy Brochure Paper" msgid "media-type.com.hp.brochure-matte" msgstr "Matte Brochure Paper" msgid "media-type.com.hp.cover-matte" msgstr "Matte Cover Paper" msgid "media-type.com.hp.ecosmart-lite" msgstr "Office Recycled Paper" msgid "media-type.com.hp.everyday-glossy" msgstr "Everyday Glossy Photo Paper" msgid "media-type.com.hp.everyday-matte" msgstr "Everyday Matte Paper" msgid "media-type.com.hp.extra-heavy" msgstr "Extra Heavyweight Paper" msgid "media-type.com.hp.intermediate" msgstr "Multipurpose Paper" msgid "media-type.com.hp.mid-weight" msgstr "Mid-Weight Paper" msgid "media-type.com.hp.premium-inkjet" msgstr "Premium Inkjet Paper" msgid "media-type.com.hp.premium-photo" msgstr "Premium Photo Glossy Paper" msgid "media-type.com.hp.premium-presentation-matte" msgstr "Premium Presentation Matte Paper" msgid "media-type.continuous" msgstr "Continuous" msgid "media-type.continuous-long" msgstr "Continuous Long" msgid "media-type.continuous-short" msgstr "Continuous Short" msgid "media-type.corrugated-board" msgstr "Corrugated Board" msgid "media-type.disc" msgstr "Optical Disc" msgid "media-type.disc-glossy" msgstr "Glossy Optical Disc" msgid "media-type.disc-high-gloss" msgstr "High Gloss Optical Disc" msgid "media-type.disc-matte" msgstr "Matte Optical Disc" msgid "media-type.disc-satin" msgstr "Satin Optical Disc" msgid "media-type.disc-semi-gloss" msgstr "Semi-Gloss Optical Disc" msgid "media-type.double-wall" msgstr "Double Wall" msgid "media-type.dry-film" msgstr "Dry Film" msgid "media-type.dvd" msgstr "DVD" msgid "media-type.embossing-foil" msgstr "Embossing Foil" msgid "media-type.end-board" msgstr "End Board" msgid "media-type.envelope" msgstr "Envelope" msgid "media-type.envelope-archival" msgstr "Archival Envelope" msgid "media-type.envelope-bond" msgstr "Bond Envelope" msgid "media-type.envelope-coated" msgstr "Coated Envelope" msgid "media-type.envelope-cotton" msgstr "Cotton Envelope" msgid "media-type.envelope-fine" msgstr "Fine Envelope" msgid "media-type.envelope-heavyweight" msgstr "Heavyweight Envelope" msgid "media-type.envelope-inkjet" msgstr "Inkjet Envelope" msgid "media-type.envelope-lightweight" msgstr "Lightweight Envelope" msgid "media-type.envelope-plain" msgstr "Plain Envelope" msgid "media-type.envelope-preprinted" msgstr "Preprinted Envelope" msgid "media-type.envelope-window" msgstr "Windowed Envelope" msgid "media-type.fabric" msgstr "Fabric" msgid "media-type.fabric-archival" msgstr "Archival Fabric" msgid "media-type.fabric-glossy" msgstr "Glossy Fabric" msgid "media-type.fabric-high-gloss" msgstr "High Gloss Fabric" msgid "media-type.fabric-matte" msgstr "Matte Fabric" msgid "media-type.fabric-semi-gloss" msgstr "Semi-Gloss Fabric" msgid "media-type.fabric-waterproof" msgstr "Waterproof Fabric" msgid "media-type.film" msgstr "Film" msgid "media-type.flexo-base" msgstr "Flexo Base" msgid "media-type.flexo-photo-polymer" msgstr "Flexo Photo Polymer" msgid "media-type.flute" msgstr "Flute" msgid "media-type.foil" msgstr "Foil" msgid "media-type.full-cut-tabs" msgstr "Full Cut Tabs" msgid "media-type.glass" msgstr "Glass" msgid "media-type.glass-colored" msgstr "Glass Colored" msgid "media-type.glass-opaque" msgstr "Glass Opaque" msgid "media-type.glass-surfaced" msgstr "Glass Surfaced" msgid "media-type.glass-textured" msgstr "Glass Textured" msgid "media-type.gravure-cylinder" msgstr "Gravure Cylinder" msgid "media-type.image-setter-paper" msgstr "Image Setter Paper" msgid "media-type.imaging-cylinder" msgstr "Imaging Cylinder" msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon-photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon_photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.labels" msgstr "Labels" msgid "media-type.labels-colored" msgstr "Colored Labels" msgid "media-type.labels-glossy" msgstr "Glossy Labels" msgid "media-type.labels-high-gloss" msgstr "High Gloss Labels" msgid "media-type.labels-inkjet" msgstr "Inkjet Labels" msgid "media-type.labels-matte" msgstr "Matte Labels" msgid "media-type.labels-permanent" msgstr "Permanent Labels" msgid "media-type.labels-satin" msgstr "Satin Labels" msgid "media-type.labels-security" msgstr "Security Labels" msgid "media-type.labels-semi-gloss" msgstr "Semi-Gloss Labels" msgid "media-type.laminating-foil" msgstr "Laminating Foil" msgid "media-type.letterhead" msgstr "Letterhead" msgid "media-type.metal" msgstr "Metal" msgid "media-type.metal-glossy" msgstr "Metal Glossy" msgid "media-type.metal-high-gloss" msgstr "Metal High Gloss" msgid "media-type.metal-matte" msgstr "Metal Matte" msgid "media-type.metal-satin" msgstr "Metal Satin" msgid "media-type.metal-semi-gloss" msgstr "Metal Semi Gloss" msgid "media-type.mounting-tape" msgstr "Mounting Tape" msgid "media-type.multi-layer" msgstr "Multi Layer" msgid "media-type.multi-part-form" msgstr "Multi Part Form" msgid "media-type.other" msgstr "Other" msgid "media-type.paper" msgstr "Paper" msgid "media-type.photographic" msgstr "Photo Paper" msgid "media-type.photographic-archival" msgstr "Photographic Archival" msgid "media-type.photographic-film" msgstr "Photo Film" msgid "media-type.photographic-glossy" msgstr "Glossy Photo Paper" msgid "media-type.photographic-high-gloss" msgstr "High Gloss Photo Paper" msgid "media-type.photographic-matte" msgstr "Matte Photo Paper" msgid "media-type.photographic-satin" msgstr "Satin Photo Paper" msgid "media-type.photographic-semi-gloss" msgstr "Semi-Gloss Photo Paper" msgid "media-type.plastic" msgstr "Plastic" msgid "media-type.plastic-archival" msgstr "Plastic Archival" msgid "media-type.plastic-colored" msgstr "Plastic Colored" msgid "media-type.plastic-glossy" msgstr "Plastic Glossy" msgid "media-type.plastic-high-gloss" msgstr "Plastic High Gloss" msgid "media-type.plastic-matte" msgstr "Plastic Matte" msgid "media-type.plastic-satin" msgstr "Plastic Satin" msgid "media-type.plastic-semi-gloss" msgstr "Plastic Semi Gloss" msgid "media-type.plate" msgstr "Plate" msgid "media-type.polyester" msgstr "Polyester" msgid "media-type.pre-cut-tabs" msgstr "Pre Cut Tabs" msgid "media-type.roll" msgstr "Roll" msgid "media-type.screen" msgstr "Screen" msgid "media-type.screen-paged" msgstr "Screen Paged" msgid "media-type.self-adhesive" msgstr "Self Adhesive" msgid "media-type.self-adhesive-film" msgstr "Self Adhesive Film" msgid "media-type.shrink-foil" msgstr "Shrink Foil" msgid "media-type.single-face" msgstr "Single Face" msgid "media-type.single-wall" msgstr "Single Wall" msgid "media-type.sleeve" msgstr "Sleeve" msgid "media-type.stationery" msgstr "Stationery" msgid "media-type.stationery-archival" msgstr "Stationery Archival" msgid "media-type.stationery-coated" msgstr "Coated Paper" msgid "media-type.stationery-cotton" msgstr "Stationery Cotton" msgid "media-type.stationery-fine" msgstr "Vellum Paper" msgid "media-type.stationery-heavyweight" msgstr "Heavyweight Paper" msgid "media-type.stationery-heavyweight-coated" msgstr "Stationery Heavyweight Coated" msgid "media-type.stationery-inkjet" msgstr "Stationery Inkjet Paper" msgid "media-type.stationery-letterhead" msgstr "Letterhead" msgid "media-type.stationery-lightweight" msgstr "Lightweight Paper" msgid "media-type.stationery-preprinted" msgstr "Preprinted Paper" msgid "media-type.stationery-prepunched" msgstr "Punched Paper" msgid "media-type.tab-stock" msgstr "Tab Stock" msgid "media-type.tractor" msgstr "Tractor" msgid "media-type.transfer" msgstr "Transfer" msgid "media-type.transparency" msgstr "Transparency" msgid "media-type.triple-wall" msgstr "Triple Wall" msgid "media-type.wet-film" msgstr "Wet Film" msgid "media-weight-metric" msgstr "Media Weight (grams per m²)" msgid "media.asme_f_28x40in" msgstr "28 x 40\"" msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" msgstr "A4 or US Letter" msgid "media.iso_2a0_1189x1682mm" msgstr "2a0" msgid "media.iso_a0_841x1189mm" msgstr "A0" msgid "media.iso_a0x3_1189x2523mm" msgstr "A0x3" msgid "media.iso_a10_26x37mm" msgstr "A10" msgid "media.iso_a1_594x841mm" msgstr "A1" msgid "media.iso_a1x3_841x1783mm" msgstr "A1x3" msgid "media.iso_a1x4_841x2378mm" msgstr "A1x4" msgid "media.iso_a2_420x594mm" msgstr "A2" msgid "media.iso_a2x3_594x1261mm" msgstr "A2x3" msgid "media.iso_a2x4_594x1682mm" msgstr "A2x4" msgid "media.iso_a2x5_594x2102mm" msgstr "A2x5" msgid "media.iso_a3-extra_322x445mm" msgstr "A3 (Extra)" msgid "media.iso_a3_297x420mm" msgstr "A3" msgid "media.iso_a3x3_420x891mm" msgstr "A3x3" msgid "media.iso_a3x4_420x1189mm" msgstr "A3x4" msgid "media.iso_a3x5_420x1486mm" msgstr "A3x5" msgid "media.iso_a3x6_420x1783mm" msgstr "A3x6" msgid "media.iso_a3x7_420x2080mm" msgstr "A3x7" msgid "media.iso_a4-extra_235.5x322.3mm" msgstr "A4 (Extra)" msgid "media.iso_a4-tab_225x297mm" msgstr "A4 (Tab)" msgid "media.iso_a4_210x297mm" msgstr "A4" msgid "media.iso_a4x3_297x630mm" msgstr "A4x3" msgid "media.iso_a4x4_297x841mm" msgstr "A4x4" msgid "media.iso_a4x5_297x1051mm" msgstr "A4x5" msgid "media.iso_a4x6_297x1261mm" msgstr "A4x6" msgid "media.iso_a4x7_297x1471mm" msgstr "A4x7" msgid "media.iso_a4x8_297x1682mm" msgstr "A4x8" msgid "media.iso_a4x9_297x1892mm" msgstr "A4x9" msgid "media.iso_a5-extra_174x235mm" msgstr "A5 (Extra)" msgid "media.iso_a5_148x210mm" msgstr "A5" msgid "media.iso_a6_105x148mm" msgstr "A6" msgid "media.iso_a7_74x105mm" msgstr "A7" msgid "media.iso_a8_52x74mm" msgstr "A8" msgid "media.iso_a9_37x52mm" msgstr "A9" msgid "media.iso_b0_1000x1414mm" msgstr "B0" msgid "media.iso_b10_31x44mm" msgstr "B10" msgid "media.iso_b1_707x1000mm" msgstr "B1" msgid "media.iso_b2_500x707mm" msgstr "B2" msgid "media.iso_b3_353x500mm" msgstr "B3" msgid "media.iso_b4_250x353mm" msgstr "B4" msgid "media.iso_b5-extra_201x276mm" msgstr "B5 (Extra)" msgid "media.iso_b5_176x250mm" msgstr "B5 Envelope" msgid "media.iso_b6_125x176mm" msgstr "B6" msgid "media.iso_b6c4_125x324mm" msgstr "B6/C4 Envelope" msgid "media.iso_b7_88x125mm" msgstr "B7" msgid "media.iso_b8_62x88mm" msgstr "B8" msgid "media.iso_b9_44x62mm" msgstr "B9" msgid "media.iso_c0_917x1297mm" msgstr "C0 Envelope" msgid "media.iso_c10_28x40mm" msgstr "C10 Envelope" msgid "media.iso_c1_648x917mm" msgstr "C1 Envelope" msgid "media.iso_c2_458x648mm" msgstr "C2 Envelope" msgid "media.iso_c3_324x458mm" msgstr "C3 Envelope" msgid "media.iso_c4_229x324mm" msgstr "C4 Envelope" msgid "media.iso_c5_162x229mm" msgstr "C5 Envelope" msgid "media.iso_c6_114x162mm" msgstr "C6 Envelope" msgid "media.iso_c6c5_114x229mm" msgstr "C6c5 Envelope" msgid "media.iso_c7_81x114mm" msgstr "C7 Envelope" msgid "media.iso_c7c6_81x162mm" msgstr "C7c6 Envelope" msgid "media.iso_c8_57x81mm" msgstr "C8 Envelope" msgid "media.iso_c9_40x57mm" msgstr "C9 Envelope" msgid "media.iso_dl_110x220mm" msgstr "DL Envelope" msgid "media.iso_ra0_860x1220mm" msgstr "Ra0" msgid "media.iso_ra1_610x860mm" msgstr "Ra1" msgid "media.iso_ra2_430x610mm" msgstr "Ra2" msgid "media.iso_ra3_305x430mm" msgstr "Ra3" msgid "media.iso_ra4_215x305mm" msgstr "Ra4" msgid "media.iso_sra0_900x1280mm" msgstr "Sra0" msgid "media.iso_sra1_640x900mm" msgstr "Sra1" msgid "media.iso_sra2_450x640mm" msgstr "Sra2" msgid "media.iso_sra3_320x450mm" msgstr "Sra3" msgid "media.iso_sra4_225x320mm" msgstr "Sra4" msgid "media.jis_b0_1030x1456mm" msgstr "JIS B0" msgid "media.jis_b10_32x45mm" msgstr "JIS B10" msgid "media.jis_b1_728x1030mm" msgstr "JIS B1" msgid "media.jis_b2_515x728mm" msgstr "JIS B2" msgid "media.jis_b3_364x515mm" msgstr "JIS B3" msgid "media.jis_b4_257x364mm" msgstr "JIS B4" msgid "media.jis_b5_182x257mm" msgstr "JIS B5" msgid "media.jis_b6_128x182mm" msgstr "JIS B6" msgid "media.jis_b7_91x128mm" msgstr "JIS B7" msgid "media.jis_b8_64x91mm" msgstr "JIS B8" msgid "media.jis_b9_45x64mm" msgstr "JIS B9" msgid "media.jis_exec_216x330mm" msgstr "JIS Executive" msgid "media.jpn_chou2_111.1x146mm" msgstr "Chou 2 Envelope" msgid "media.jpn_chou3_120x235mm" msgstr "Chou 3 Envelope" msgid "media.jpn_chou4_90x205mm" msgstr "Chou 4 Envelope" msgid "media.jpn_hagaki_100x148mm" msgstr "Hagaki" msgid "media.jpn_kahu_240x322.1mm" msgstr "Kahu Envelope" msgid "media.jpn_kaku2_240x332mm" msgstr "Kahu 2 Envelope" msgid "media.jpn_kaku3_216x277mm" msgstr "216 x 277mme" msgid "media.jpn_kaku4_197x267mm" msgstr "197 x 267mme" msgid "media.jpn_kaku5_190x240mm" msgstr "190 x 240mme" msgid "media.jpn_kaku7_142x205mm" msgstr "142 x 205mme" msgid "media.jpn_kaku8_119x197mm" msgstr "119 x 197mme" msgid "media.jpn_oufuku_148x200mm" msgstr "Oufuku Reply Postcard" msgid "media.jpn_you4_105x235mm" msgstr "You 4 Envelope" msgid "media.na_10x11_10x11in" msgstr "10 x 11\"" msgid "media.na_10x13_10x13in" msgstr "10 x 13\"" msgid "media.na_10x14_10x14in" msgstr "10 x 14\"" msgid "media.na_10x15_10x15in" msgstr "10 x 15\"" msgid "media.na_11x12_11x12in" msgstr "11 x 12\"" msgid "media.na_11x15_11x15in" msgstr "11 x 15\"" msgid "media.na_12x19_12x19in" msgstr "12 x 19\"" msgid "media.na_5x7_5x7in" msgstr "5 x 7\"" msgid "media.na_6x9_6x9in" msgstr "6 x 9\"" msgid "media.na_7x9_7x9in" msgstr "7 x 9\"" msgid "media.na_9x11_9x11in" msgstr "9 x 11\"" msgid "media.na_a2_4.375x5.75in" msgstr "A2 Envelope" msgid "media.na_arch-a_9x12in" msgstr "9 x 12\"" msgid "media.na_arch-b_12x18in" msgstr "12 x 18\"" msgid "media.na_arch-c_18x24in" msgstr "18 x 24\"" msgid "media.na_arch-d_24x36in" msgstr "24 x 36\"" msgid "media.na_arch-e2_26x38in" msgstr "26 x 38\"" msgid "media.na_arch-e3_27x39in" msgstr "27 x 39\"" msgid "media.na_arch-e_36x48in" msgstr "36 x 48\"" msgid "media.na_b-plus_12x19.17in" msgstr "12 x 19.17\"" msgid "media.na_c5_6.5x9.5in" msgstr "C5 Envelope" msgid "media.na_c_17x22in" msgstr "17 x 22\"" msgid "media.na_d_22x34in" msgstr "22 x 34\"" msgid "media.na_e_34x44in" msgstr "34 x 44\"" msgid "media.na_edp_11x14in" msgstr "11 x 14\"" msgid "media.na_eur-edp_12x14in" msgstr "12 x 14\"" msgid "media.na_executive_7.25x10.5in" msgstr "Executive" msgid "media.na_f_44x68in" msgstr "44 x 68\"" msgid "media.na_fanfold-eur_8.5x12in" msgstr "European Fanfold" msgid "media.na_fanfold-us_11x14.875in" msgstr "US Fanfold" msgid "media.na_foolscap_8.5x13in" msgstr "Foolscap" msgid "media.na_govt-legal_8x13in" msgstr "8 x 13\"" msgid "media.na_govt-letter_8x10in" msgstr "8 x 10\"" msgid "media.na_index-3x5_3x5in" msgstr "3 x 5\"" msgid "media.na_index-4x6-ext_6x8in" msgstr "6 x 8\"" msgid "media.na_index-4x6_4x6in" msgstr "4 x 6\"" msgid "media.na_index-5x8_5x8in" msgstr "5 x 8\"" msgid "media.na_invoice_5.5x8.5in" msgstr "Statement" msgid "media.na_ledger_11x17in" msgstr "11 x 17\"" msgid "media.na_legal-extra_9.5x15in" msgstr "US Legal (Extra)" msgid "media.na_legal_8.5x14in" msgstr "US Legal" msgid "media.na_letter-extra_9.5x12in" msgstr "US Letter (Extra)" msgid "media.na_letter-plus_8.5x12.69in" msgstr "US Letter (Plus)" msgid "media.na_letter_8.5x11in" msgstr "US Letter" msgid "media.na_monarch_3.875x7.5in" msgstr "Monarch Envelope" msgid "media.na_number-10_4.125x9.5in" msgstr "#10 Envelope" msgid "media.na_number-11_4.5x10.375in" msgstr "#11 Envelope" msgid "media.na_number-12_4.75x11in" msgstr "#12 Envelope" msgid "media.na_number-14_5x11.5in" msgstr "#14 Envelope" msgid "media.na_number-9_3.875x8.875in" msgstr "#9 Envelope" msgid "media.na_oficio_8.5x13.4in" msgstr "8.5 x 13.4\"" msgid "media.na_personal_3.625x6.5in" msgstr "Personal Envelope" msgid "media.na_quarto_8.5x10.83in" msgstr "Quarto" msgid "media.na_super-a_8.94x14in" msgstr "8.94 x 14\"" msgid "media.na_super-b_13x19in" msgstr "13 x 19\"" msgid "media.na_wide-format_30x42in" msgstr "30 x 42\"" msgid "media.oe_12x16_12x16in" msgstr "12 x 16\"" msgid "media.oe_14x17_14x17in" msgstr "14 x 17\"" msgid "media.oe_18x22_18x22in" msgstr "18 x 22\"" msgid "media.oe_a2plus_17x24in" msgstr "17 x 24\"" msgid "media.oe_photo-10r_10x12in" msgstr "10 x 12\"" msgid "media.oe_photo-20r_20x24in" msgstr "20 x 24\"" msgid "media.oe_photo-l_3.5x5in" msgstr "3.5 x 5\"" msgid "media.oe_photo-s10r_10x15in" msgstr "10 x 15\"" msgid "media.om_16k_184x260mm" msgstr "184 x 260mm" msgid "media.om_16k_195x270mm" msgstr "195 x 270mm" msgid "media.om_dai-pa-kai_275x395mm" msgstr "275 x 395mm" msgid "media.om_folio-sp_215x315mm" msgstr "Folio" msgid "media.om_folio_210x330mm" msgstr "Folio (Special)" msgid "media.om_invite_220x220mm" msgstr "Invitation Envelope" msgid "media.om_italian_110x230mm" msgstr "Italian Envelope" msgid "media.om_juuro-ku-kai_198x275mm" msgstr "198 x 275mm" msgid "media.om_large-photo_200x300" msgstr "200 x 300mm" msgid "media.om_medium-photo_130x180mm" msgstr "130 x 180mm" msgid "media.om_pa-kai_267x389mm" msgstr "267 x 389mm" msgid "media.om_postfix_114x229mm" msgstr "Postfix Envelope" msgid "media.om_small-photo_100x150mm" msgstr "100 x 150mm" msgid "media.om_wide-photo_100x200mm" msgstr "100 x 200mm" msgid "media.prc_10_324x458mm" msgstr "Chinese #10 Envelope" msgid "media.prc_16k_146x215mm" msgstr "Chinese 16k" msgid "media.prc_1_102x165mm" msgstr "Chinese #1 Envelope" msgid "media.prc_2_102x176mm" msgstr "Chinese #2 Envelope" msgid "media.prc_32k_97x151mm" msgstr "Chinese 32k" msgid "media.prc_3_125x176mm" msgstr "Chinese #3 Envelope" msgid "media.prc_4_110x208mm" msgstr "Chinese #4 Envelope" msgid "media.prc_5_110x220mm" msgstr "Chinese #5 Envelope" msgid "media.prc_6_120x320mm" msgstr "Chinese #6 Envelope" msgid "media.prc_7_160x230mm" msgstr "Chinese #7 Envelope" msgid "media.prc_8_120x309mm" msgstr "Chinese #8 Envelope" msgid "media.roc_16k_7.75x10.75in" msgstr "ROC 16k" msgid "media.roc_8k_10.75x15.5in" msgstr "ROC 8k" #, c-format msgid "members of class %s:" msgstr "membres de la classe %s:" msgid "multiple-document-handling" msgstr "Multiple Document Handling" msgid "multiple-document-handling.separate-documents-collated-copies" msgstr "Separate Documents Collated Copies" msgid "multiple-document-handling.separate-documents-uncollated-copies" msgstr "Separate Documents Uncollated Copies" msgid "multiple-document-handling.single-document" msgstr "Single Document" msgid "multiple-document-handling.single-document-new-sheet" msgstr "Single Document New Sheet" msgid "multiple-object-handling" msgstr "Multiple Object Handling" msgid "multiple-object-handling.auto" msgstr "Automatic" msgid "multiple-object-handling.best-fit" msgstr "Best Fit" msgid "multiple-object-handling.best-quality" msgstr "Best Quality" msgid "multiple-object-handling.best-speed" msgstr "Best Speed" msgid "multiple-object-handling.one-at-a-time" msgstr "One At A Time" msgid "multiple-operation-time-out-action" msgstr "Multiple Operation Time Out Action" msgid "multiple-operation-time-out-action.abort-job" msgstr "Abort Job" msgid "multiple-operation-time-out-action.hold-job" msgstr "Hold Job" msgid "multiple-operation-time-out-action.process-job" msgstr "Process Job" msgid "no entries" msgstr "no hi ha cap entrada" msgid "no system default destination" msgstr "no hi ha cap destí per defecte" msgid "noise-removal" msgstr "Noise Removal" msgid "notify-attributes" msgstr "Notify Attributes" msgid "notify-charset" msgstr "Notify Charset" msgid "notify-events" msgstr "Notify Events" msgid "notify-events not specified." msgstr "no s'ha especificat cap notify-events." msgid "notify-events.document-completed" msgstr "Document Completed" msgid "notify-events.document-config-changed" msgstr "Document Config Changed" msgid "notify-events.document-created" msgstr "Document Created" msgid "notify-events.document-fetchable" msgstr "Document Fetchable" msgid "notify-events.document-state-changed" msgstr "Document State Changed" msgid "notify-events.document-stopped" msgstr "Document Stopped" msgid "notify-events.job-completed" msgstr "Job Completed" msgid "notify-events.job-config-changed" msgstr "Job Config Changed" msgid "notify-events.job-created" msgstr "Job Created" msgid "notify-events.job-fetchable" msgstr "Job Fetchable" msgid "notify-events.job-progress" msgstr "Job Progress" msgid "notify-events.job-state-changed" msgstr "Job State Changed" msgid "notify-events.job-stopped" msgstr "Job Stopped" msgid "notify-events.none" msgstr "None" msgid "notify-events.printer-config-changed" msgstr "Printer Config Changed" msgid "notify-events.printer-finishings-changed" msgstr "Printer Finishings Changed" msgid "notify-events.printer-media-changed" msgstr "Printer Media Changed" msgid "notify-events.printer-queue-order-changed" msgstr "Printer Queue Order Changed" msgid "notify-events.printer-restarted" msgstr "Printer Restarted" msgid "notify-events.printer-shutdown" msgstr "Printer Shutdown" msgid "notify-events.printer-state-changed" msgstr "Printer State Changed" msgid "notify-events.printer-stopped" msgstr "Printer Stopped" msgid "notify-get-interval" msgstr "Notify Get Interval" msgid "notify-lease-duration" msgstr "Notify Lease Duration" msgid "notify-natural-language" msgstr "Notify Natural Language" msgid "notify-pull-method" msgstr "Notify Pull Method" msgid "notify-recipient-uri" msgstr "Notify Recipient" #, c-format msgid "notify-recipient-uri URI \"%s\" is already used." msgstr "L'URI de notify-recipient-uri «%s» ja s'ha fet servir." #, c-format msgid "notify-recipient-uri URI \"%s\" uses unknown scheme." msgstr "L'URI de notify-recipient-uri «%s» fa servir un esquema desconegut." msgid "notify-sequence-numbers" msgstr "Notify Sequence Numbers" msgid "notify-subscription-ids" msgstr "Notify Subscription Ids" msgid "notify-time-interval" msgstr "Notify Time Interval" msgid "notify-user-data" msgstr "Notify User Data" msgid "notify-wait" msgstr "Notify Wait" msgid "number-of-retries" msgstr "Number Of Retries" msgid "number-up" msgstr "Number-Up" msgid "object-offset" msgstr "Object Offset" msgid "object-size" msgstr "Object Size" msgid "organization-name" msgstr "Organization Name" msgid "orientation-requested" msgstr "Orientation" msgid "orientation-requested.3" msgstr "Portrait" msgid "orientation-requested.4" msgstr "Landscape" msgid "orientation-requested.5" msgstr "Reverse Landscape" msgid "orientation-requested.6" msgstr "Reverse Portrait" msgid "orientation-requested.7" msgstr "None" msgid "output-attributes" msgstr "Output Attributes" msgid "output-bin" msgstr "Output Bin" msgid "output-bin.auto" msgstr "Automatic" msgid "output-bin.bottom" msgstr "Bottom" msgid "output-bin.center" msgstr "Center" msgid "output-bin.face-down" msgstr "Face Down" msgid "output-bin.face-up" msgstr "Face Up" msgid "output-bin.large-capacity" msgstr "Large Capacity" msgid "output-bin.left" msgstr "Left" msgid "output-bin.mailbox-1" msgstr "Mailbox 1" msgid "output-bin.mailbox-10" msgstr "Mailbox 10" msgid "output-bin.mailbox-2" msgstr "Mailbox 2" msgid "output-bin.mailbox-3" msgstr "Mailbox 3" msgid "output-bin.mailbox-4" msgstr "Mailbox 4" msgid "output-bin.mailbox-5" msgstr "Mailbox 5" msgid "output-bin.mailbox-6" msgstr "Mailbox 6" msgid "output-bin.mailbox-7" msgstr "Mailbox 7" msgid "output-bin.mailbox-8" msgstr "Mailbox 8" msgid "output-bin.mailbox-9" msgstr "Mailbox 9" msgid "output-bin.middle" msgstr "Middle" msgid "output-bin.my-mailbox" msgstr "My Mailbox" msgid "output-bin.rear" msgstr "Rear" msgid "output-bin.right" msgstr "Right" msgid "output-bin.side" msgstr "Side" msgid "output-bin.stacker-1" msgstr "Stacker 1" msgid "output-bin.stacker-10" msgstr "Stacker 10" msgid "output-bin.stacker-2" msgstr "Stacker 2" msgid "output-bin.stacker-3" msgstr "Stacker 3" msgid "output-bin.stacker-4" msgstr "Stacker 4" msgid "output-bin.stacker-5" msgstr "Stacker 5" msgid "output-bin.stacker-6" msgstr "Stacker 6" msgid "output-bin.stacker-7" msgstr "Stacker 7" msgid "output-bin.stacker-8" msgstr "Stacker 8" msgid "output-bin.stacker-9" msgstr "Stacker 9" msgid "output-bin.top" msgstr "Top" msgid "output-bin.tray-1" msgstr "Tray 1" msgid "output-bin.tray-10" msgstr "Tray 10" msgid "output-bin.tray-2" msgstr "Tray 2" msgid "output-bin.tray-3" msgstr "Tray 3" msgid "output-bin.tray-4" msgstr "Tray 4" msgid "output-bin.tray-5" msgstr "Tray 5" msgid "output-bin.tray-6" msgstr "Tray 6" msgid "output-bin.tray-7" msgstr "Tray 7" msgid "output-bin.tray-8" msgstr "Tray 8" msgid "output-bin.tray-9" msgstr "Tray 9" msgid "output-compression-quality-factor" msgstr "Scanned Image Quality" msgid "page-delivery" msgstr "Page Delivery" msgid "page-delivery.reverse-order-face-down" msgstr "Reverse Order Face Down" msgid "page-delivery.reverse-order-face-up" msgstr "Reverse Order Face Up" msgid "page-delivery.same-order-face-down" msgstr "Same Order Face Down" msgid "page-delivery.same-order-face-up" msgstr "Same Order Face Up" msgid "page-delivery.system-specified" msgstr "System Specified" msgid "page-order-received" msgstr "Page Order Received" msgid "page-order-received.1-to-n-order" msgstr "1 To N Order" msgid "page-order-received.n-to-1-order" msgstr "N To 1 Order" msgid "page-ranges" msgstr "Page Ranges" msgid "pages" msgstr "Pages" msgid "pages-per-subset" msgstr "Pages Per Subset" msgid "pending" msgstr "pendent" msgid "platform-shape" msgstr "Platform Shape" msgid "platform-shape.ellipse" msgstr "Round" msgid "platform-shape.rectangle" msgstr "Rectangle" msgid "platform-temperature" msgstr "Platform Temperature" msgid "post-dial-string" msgstr "Post-dial String" #, c-format msgid "ppdc: Adding include directory \"%s\"." msgstr "ppdc: s'afegeix el directori inclòs «%s»." #, c-format msgid "ppdc: Adding/updating UI text from %s." msgstr "ppdc: s'afegeix/actualitza el text de l'UI des de %s." #, c-format msgid "ppdc: Bad boolean value (%s) on line %d of %s." msgstr "ppdc: valor booleà incorrecte (%s) a la línia %d de %s." #, c-format msgid "ppdc: Bad font attribute: %s" msgstr "ppdc: l'atribut del tipus de lletra és incorrecte: %s" #, c-format msgid "ppdc: Bad resolution name \"%s\" on line %d of %s." msgstr "ppdc: el nom de resolució «%s» de la línia %d de %s és incorrecte." #, c-format msgid "ppdc: Bad status keyword %s on line %d of %s." msgstr "ppdc: la paraula clau d'estat %s de la línia %d de %s és incorrecta." #, c-format msgid "ppdc: Bad variable substitution ($%c) on line %d of %s." msgstr "" "ppdc: la variable de substitució ($%c) de la línia %d de %s és incorrecta." #, c-format msgid "ppdc: Choice found on line %d of %s with no Option." msgstr "ppdc: s'ha trobat una elecció a la línia %d de %s sense cap opció." #, c-format msgid "ppdc: Duplicate #po for locale %s on line %d of %s." msgstr "ppdc: #po duplicat per l'idioma %s a la línia %d de %s." #, c-format msgid "ppdc: Expected a filter definition on line %d of %s." msgstr "ppdc: s'esperava una definició de filtre a la línia %d de %s." #, c-format msgid "ppdc: Expected a program name on line %d of %s." msgstr "ppdc: s'esperava un nom de programa a la línia %d de %s." #, c-format msgid "ppdc: Expected boolean value on line %d of %s." msgstr "ppdc: s'esperava un valor booleà a la línia %d de %s." #, c-format msgid "ppdc: Expected charset after Font on line %d of %s." msgstr "" "ppdc: s'esperava un joc de caràcters després de Font a la línia %d de %s." #, c-format msgid "ppdc: Expected choice code on line %d of %s." msgstr "ppdc: s'esperava un codi d'elecció a la línia %d de %s." #, c-format msgid "ppdc: Expected choice name/text on line %d of %s." msgstr "ppdc: s'esperava un nom/text d'elecció a la línia %d de %s." #, c-format msgid "ppdc: Expected color order for ColorModel on line %d of %s." msgstr "" "ppdc: s'esperava un ordre de colors per ColorModel a la línia %d de %s." #, c-format msgid "ppdc: Expected colorspace for ColorModel on line %d of %s." msgstr "" "ppdc: s'esperava un espai de colors per ColorModel a la línia %d de %s." #, c-format msgid "ppdc: Expected compression for ColorModel on line %d of %s." msgstr "ppdc: s'esperava una compressió per ColorModel a la línia %d de %s." #, c-format msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s." msgstr "" "ppdc: s'esperava una cadena de restriccions per UIConstraints a la línia %d " "de %s." #, c-format msgid "" "ppdc: Expected driver type keyword following DriverType on line %d of %s." msgstr "" "ppdc: s'esperava una paraula clau de tipus de controlador després de " "DriverType a la línia %d de %s." #, c-format msgid "ppdc: Expected duplex type after Duplex on line %d of %s." msgstr "" "ppdc: s'esperava un tipus de dúplex després de Duplex a la línia %d de %s." #, c-format msgid "ppdc: Expected encoding after Font on line %d of %s." msgstr "ppdc: s'esperava una codificació després de Font a la línia %d de %s." #, c-format msgid "ppdc: Expected filename after #po %s on line %d of %s." msgstr "" "ppdc: s'esperava un nom de fitxer després de #po %s a la línia %d de %s." #, c-format msgid "ppdc: Expected group name/text on line %d of %s." msgstr "ppdc: s'esperava un nom/text de grup a la línia %d de %s." #, c-format msgid "ppdc: Expected include filename on line %d of %s." msgstr "ppdc: s'esperava un nom de fitxer d'inclusió a la línia %d de %s." #, c-format msgid "ppdc: Expected integer on line %d of %s." msgstr "ppdc: s'esperava un enter a la línia %d de %s." #, c-format msgid "ppdc: Expected locale after #po on line %d of %s." msgstr "ppdc: s'esperava un idioma després de #po a la línia %d de %s." #, c-format msgid "ppdc: Expected name after %s on line %d of %s." msgstr "ppdc: s'esperava un nom després de %s a la línia %d de %s." #, c-format msgid "ppdc: Expected name after FileName on line %d of %s." msgstr "ppdc: s'esperava un nom després de FileName a la línia %d de %s." #, c-format msgid "ppdc: Expected name after Font on line %d of %s." msgstr "ppdc: s'esperava un nom després de Font a la línia %d de %s." #, c-format msgid "ppdc: Expected name after Manufacturer on line %d of %s." msgstr "ppdc: s'esperava un nom després de Manufacturer a la línia %d de %s." #, c-format msgid "ppdc: Expected name after MediaSize on line %d of %s." msgstr "ppdc: s'esperava un nom després de MediaSize a la línia %d de %s." #, c-format msgid "ppdc: Expected name after ModelName on line %d of %s." msgstr "ppdc: s'esperava un nom després de ModelName a la línia %d de %s." #, c-format msgid "ppdc: Expected name after PCFileName on line %d of %s." msgstr "ppdc: s'esperava un nom després de PCFileName a la línia %d de %s." #, c-format msgid "ppdc: Expected name/text after %s on line %d of %s." msgstr "ppdc: s'esperava un nom/text després de %s a la línia %d de %s." #, c-format msgid "ppdc: Expected name/text after Installable on line %d of %s." msgstr "" "ppdc: s'esperava un nom/text després d'Installable a la línia %d de %s." #, c-format msgid "ppdc: Expected name/text after Resolution on line %d of %s." msgstr "" "ppdc: s'esperava un nom/text després de Resolution a la línia %d de %s." #, c-format msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s." msgstr "" "ppdc: s'esperava una combinació de nom/text per ColorModel a la línia %d de " "%s." #, c-format msgid "ppdc: Expected option name/text on line %d of %s." msgstr "ppdc: s'esperava un nom/text d'opció a la línia %d de %s." #, c-format msgid "ppdc: Expected option section on line %d of %s." msgstr "ppdc: s'esperava una secció d'opció a la línia %d de %s." #, c-format msgid "ppdc: Expected option type on line %d of %s." msgstr "ppdc: s'esperava un tipus d'opció a la línia %d de %s." #, c-format msgid "ppdc: Expected override field after Resolution on line %d of %s." msgstr "" "ppdc: s'esperava un camp de substitució després de Resolution a la línia %d " "de %s." #, c-format msgid "ppdc: Expected quoted string on line %d of %s." msgstr "ppdc: s'esperava una cadena entre cometes dobles a la línia %d de %s." #, c-format msgid "ppdc: Expected real number on line %d of %s." msgstr "ppdc: s'esperava un número real a la línia %d de %s." #, c-format msgid "" "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s." msgstr "" "ppdc: s'esperava una resolució/tipus de mitjà després de ColorProfile a la " "línia %d de %s." #, c-format msgid "" "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d " "of %s." msgstr "" "ppdc: s'esperava una resolució/tipus de mitjà després de SimpleColorProfile " "a la línia %d de %s." #, c-format msgid "ppdc: Expected selector after %s on line %d of %s." msgstr "ppdc: s'esperava un selector després de %s a la línia %d de %s." #, c-format msgid "ppdc: Expected status after Font on line %d of %s." msgstr "ppdc: s'esperava un estat després de Font a la línia %d de %s." #, c-format msgid "ppdc: Expected string after Copyright on line %d of %s." msgstr "ppdc: s'esperava una cadena després de Copyright a la línia %d de %s." #, c-format msgid "ppdc: Expected string after Version on line %d of %s." msgstr "ppdc: s'esperava una cadena després de Version a la línia %d de %s." #, c-format msgid "ppdc: Expected two option names on line %d of %s." msgstr "ppdc: s'esperava dos noms d'opció a la línia %d de %s." #, c-format msgid "ppdc: Expected value after %s on line %d of %s." msgstr "ppdc: s'esperava un valor després de %s a la línia %d de %s." #, c-format msgid "ppdc: Expected version after Font on line %d of %s." msgstr "ppdc: s'esperava una versió després de Font a la línia %d de %s." #, c-format msgid "ppdc: Invalid #include/#po filename \"%s\"." msgstr "ppdc: el nom de fitxer #include/#po «%s» no és vàlid." #, c-format msgid "ppdc: Invalid cost for filter on line %d of %s." msgstr "ppdc: el cost del filtre no és vàlid a la línia %d de %s." #, c-format msgid "ppdc: Invalid empty MIME type for filter on line %d of %s." msgstr "ppdc: el tipus MIME buit no és vàlid pel filtre a la línia %d de %s." #, c-format msgid "ppdc: Invalid empty program name for filter on line %d of %s." msgstr "" "ppdc: el nom de programa buit no és vàlid pel filtre a la línia %d de %s." #, c-format msgid "ppdc: Invalid option section \"%s\" on line %d of %s." msgstr "ppdc: la secció d'opció «%s» no és vàlida a la línia %d de %s." #, c-format msgid "ppdc: Invalid option type \"%s\" on line %d of %s." msgstr "ppdc: el tipus d'opció «%s» no és vàlid a la línia %d de %s." #, c-format msgid "ppdc: Loading driver information file \"%s\"." msgstr "ppdc: s'està carregant el fitxer d'informació del controlador «%s»." #, c-format msgid "ppdc: Loading messages for locale \"%s\"." msgstr "ppdc: s'està carregant l'idioma «%s»." #, c-format msgid "ppdc: Loading messages from \"%s\"." msgstr "ppdc: s'està carregant els missatges des de «%s»." #, c-format msgid "ppdc: Missing #endif at end of \"%s\"." msgstr "ppdc: falta un #endif al final de «%s»." #, c-format msgid "ppdc: Missing #if on line %d of %s." msgstr "ppdc: falta un #if a la línia %d de %s." #, c-format msgid "" "ppdc: Need a msgid line before any translation strings on line %d of %s." msgstr "" "oodc: es necessita un msgid abans de la cadena per traduir a la línia %d de " "%s." #, c-format msgid "ppdc: No message catalog provided for locale %s." msgstr "ppdc: no s'ha donat el catàleg de missatges per l'idioma %s." #, c-format msgid "ppdc: Option %s defined in two different groups on line %d of %s." msgstr "" "ppdc: l'opció %s està definida a dos grups diferents a la línia %d de %s." #, c-format msgid "ppdc: Option %s redefined with a different type on line %d of %s." msgstr "" "ppdc: l'opció %s està redefinida amb un tipus diferent a la línia %d de %s." #, c-format msgid "ppdc: Option constraint must *name on line %d of %s." msgstr "ppdc: l'opció de restricció ha d'incloure *nom a la línia %d de %s." #, c-format msgid "ppdc: Too many nested #if's on line %d of %s." msgstr "ppdc: hi ha massa #if imbricats a la línia %d de %s." #, c-format msgid "ppdc: Unable to create PPD file \"%s\" - %s." msgstr "ppdc: no s'ha pogut crear el fitxer PPD «%s» - %s." #, c-format msgid "ppdc: Unable to create output directory %s: %s" msgstr "ppdc: no s'ha pogut crear el directori de sortida %s: %s" #, c-format msgid "ppdc: Unable to create output pipes: %s" msgstr "ppdc: no s'ha pogut crear els conductes de sortida: %s" #, c-format msgid "ppdc: Unable to execute cupstestppd: %s" msgstr "ppdc: no s'ha pogut executar cupstestppd: %s" #, c-format msgid "ppdc: Unable to find #po file %s on line %d of %s." msgstr "ppdc: no s'ha pogut trobar el fitxer #po %s a la línia %d de %s." #, c-format msgid "ppdc: Unable to find include file \"%s\" on line %d of %s." msgstr "" "ppdc: no s'ha pogut trobar el fitxer d'inclusió «%s» a la línia %d de %s." #, c-format msgid "ppdc: Unable to find localization for \"%s\" - %s" msgstr "ppdc: no s'ha pogut trobar la localització de «%s» - %s" #, c-format msgid "ppdc: Unable to load localization file \"%s\" - %s" msgstr "ppdc: no s'ha pogut carregar el fitxer de localització «%s» - %s" #, c-format msgid "ppdc: Unable to open %s: %s" msgstr "ppdc: no s'ha pogut obrir %s: %s" #, c-format msgid "ppdc: Undefined variable (%s) on line %d of %s." msgstr "ppdc: la variable (%s) de la línia %d de %s no està definida." #, c-format msgid "ppdc: Unexpected text on line %d of %s." msgstr "ppdc: hi ha un text inesperat a la línia %d de %s." #, c-format msgid "ppdc: Unknown driver type %s on line %d of %s." msgstr "ppdc: el tipus de controlador %s de la línia %d de %s no és conegut." #, c-format msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s." msgstr "ppdc: el tipus de dúplex «%s» de la línia %d de %s no és conegut." #, c-format msgid "ppdc: Unknown media size \"%s\" on line %d of %s." msgstr "ppdc: la mida del mitjà «%s» de la línia %d de %s no és coneguda." #, c-format msgid "ppdc: Unknown message catalog format for \"%s\"." msgstr "ppdc: el format del catàleg de missatges de «%s» no és conegut." #, c-format msgid "ppdc: Unknown token \"%s\" seen on line %d of %s." msgstr "ppdc: el testimoni «%s» de la línia %d de %s no és conegut." #, c-format msgid "" "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." msgstr "" "ppdc: els caràcters finals del número real «%s» de la línia %d de %s no són " "coneguts." #, c-format msgid "ppdc: Unterminated string starting with %c on line %d of %s." msgstr "" "ppdc: la cadena que comença per %c de la línia %d de %s no està acabada." #, c-format msgid "ppdc: Warning - overlapping filename \"%s\"." msgstr "ppdc: avís - se superposa el nom del fitxer «%s»." #, c-format msgid "ppdc: Writing %s." msgstr "ppdc: s'escriu %s." #, c-format msgid "ppdc: Writing PPD files to directory \"%s\"." msgstr "ppdc: s'escriuen els fitxers PPD a la carpeta «%s»." #, c-format msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s." msgstr "ppdmerge: LanguageVersion «%s» incorrecte a %s." #, c-format msgid "ppdmerge: Ignoring PPD file %s." msgstr "ppdmerge: s'ignora el fitxer PPD %s." #, c-format msgid "ppdmerge: Unable to backup %s to %s - %s" msgstr "ppdmerge: no s'ha pogut fer la còpia de seguretat %s a %s- %s" msgid "pre-dial-string" msgstr "Pre-dial String" msgid "presentation-direction-number-up" msgstr "Number-Up Layout" msgid "presentation-direction-number-up.tobottom-toleft" msgstr "Top-Bottom, Right-Left" msgid "presentation-direction-number-up.tobottom-toright" msgstr "Top-Bottom, Left-Right" msgid "presentation-direction-number-up.toleft-tobottom" msgstr "Right-Left, Top-Bottom" msgid "presentation-direction-number-up.toleft-totop" msgstr "Right-Left, Bottom-Top" msgid "presentation-direction-number-up.toright-tobottom" msgstr "Left-Right, Top-Bottom" msgid "presentation-direction-number-up.toright-totop" msgstr "Left-Right, Bottom-Top" msgid "presentation-direction-number-up.totop-toleft" msgstr "Bottom-Top, Right-Left" msgid "presentation-direction-number-up.totop-toright" msgstr "Bottom-Top, Left-Right" msgid "print-accuracy" msgstr "Print Accuracy" msgid "print-base" msgstr "Print Base" msgid "print-base.brim" msgstr "Brim" msgid "print-base.none" msgstr "None" msgid "print-base.raft" msgstr "Raft" msgid "print-base.skirt" msgstr "Skirt" msgid "print-base.standard" msgstr "Standard" msgid "print-color-mode" msgstr "Print Color Mode" msgid "print-color-mode.auto" msgstr "Automatic" msgid "print-color-mode.bi-level" msgstr "Bi-Level" msgid "print-color-mode.color" msgstr "Color" msgid "print-color-mode.highlight" msgstr "Highlight" msgid "print-color-mode.monochrome" msgstr "Monochrome" msgid "print-color-mode.process-bi-level" msgstr "Process Bi-Level" msgid "print-color-mode.process-monochrome" msgstr "Process Monochrome" msgid "print-content-optimize" msgstr "Print Optimization" msgid "print-content-optimize.auto" msgstr "Automatic" msgid "print-content-optimize.graphic" msgstr "Graphics" msgid "print-content-optimize.photo" msgstr "Photo" msgid "print-content-optimize.text" msgstr "Text" msgid "print-content-optimize.text-and-graphic" msgstr "Text And Graphics" msgid "print-objects" msgstr "Print Objects" msgid "print-quality" msgstr "Print Quality" msgid "print-quality.3" msgstr "Draft" msgid "print-quality.4" msgstr "Normal" msgid "print-quality.5" msgstr "High" msgid "print-rendering-intent" msgstr "Print Rendering Intent" msgid "print-rendering-intent.absolute" msgstr "Absolute" msgid "print-rendering-intent.auto" msgstr "Automatic" msgid "print-rendering-intent.perceptual" msgstr "Perceptual" msgid "print-rendering-intent.relative" msgstr "Relative" msgid "print-rendering-intent.relative-bpc" msgstr "Relative w/Black Point Compensation" msgid "print-rendering-intent.saturation" msgstr "Saturation" msgid "print-scaling" msgstr "Print Scaling" msgid "print-scaling.auto" msgstr "Automatic" msgid "print-scaling.auto-fit" msgstr "Auto Fit" msgid "print-scaling.fill" msgstr "Fill" msgid "print-scaling.fit" msgstr "Fit" msgid "print-scaling.none" msgstr "None" msgid "print-supports" msgstr "Print Supports" msgid "print-supports.material" msgstr "Material" msgid "print-supports.none" msgstr "None" msgid "print-supports.standard" msgstr "Standard" #, c-format msgid "printer %s disabled since %s -" msgstr "la impressora %s està deshabilitada des de %s -" #, c-format msgid "printer %s is idle. enabled since %s" msgstr "la impressora %s està inactiva. Està activada des de %s" #, c-format msgid "printer %s now printing %s-%d. enabled since %s" msgstr "la impressora %s està imprimint %s-%d. Està habilitada des de %s" #, c-format msgid "printer %s/%s disabled since %s -" msgstr "la impressora %s/%s està deshabilitada des de %s -" #, c-format msgid "printer %s/%s is idle. enabled since %s" msgstr "la impressora %s/%s està inactiva. Està activada des de %s" #, c-format msgid "printer %s/%s now printing %s-%d. enabled since %s" msgstr "la impressora %s/%s està imprimint %s-%d. Està activada des de %s" msgid "printer-message-from-operator" msgstr "Printer Message From Operator" msgid "printer-resolution" msgstr "Printer Resolution" msgid "printer-state" msgstr "Printer State" msgid "printer-state-reasons" msgstr "Detailed Printer State" msgid "printer-state-reasons.alert-removal-of-binary-change-entry" msgstr "Alert Removal Of Binary Change Entry" msgid "printer-state-reasons.bander-added" msgstr "Bander Added" msgid "printer-state-reasons.bander-almost-empty" msgstr "Bander Almost Empty" msgid "printer-state-reasons.bander-almost-full" msgstr "Bander Almost Full" msgid "printer-state-reasons.bander-at-limit" msgstr "Bander At Limit" msgid "printer-state-reasons.bander-closed" msgstr "Bander Closed" msgid "printer-state-reasons.bander-configuration-change" msgstr "Bander Configuration Change" msgid "printer-state-reasons.bander-cover-closed" msgstr "Bander Cover Closed" msgid "printer-state-reasons.bander-cover-open" msgstr "Bander Cover Open" msgid "printer-state-reasons.bander-empty" msgstr "Bander Empty" msgid "printer-state-reasons.bander-full" msgstr "Bander Full" msgid "printer-state-reasons.bander-interlock-closed" msgstr "Bander Interlock Closed" msgid "printer-state-reasons.bander-interlock-open" msgstr "Bander Interlock Open" msgid "printer-state-reasons.bander-jam" msgstr "Bander Jam" msgid "printer-state-reasons.bander-life-almost-over" msgstr "Bander Life Almost Over" msgid "printer-state-reasons.bander-life-over" msgstr "Bander Life Over" msgid "printer-state-reasons.bander-memory-exhausted" msgstr "Bander Memory Exhausted" msgid "printer-state-reasons.bander-missing" msgstr "Bander Missing" msgid "printer-state-reasons.bander-motor-failure" msgstr "Bander Motor Failure" msgid "printer-state-reasons.bander-near-limit" msgstr "Bander Near Limit" msgid "printer-state-reasons.bander-offline" msgstr "Bander Offline" msgid "printer-state-reasons.bander-opened" msgstr "Bander Opened" msgid "printer-state-reasons.bander-over-temperature" msgstr "Bander Over Temperature" msgid "printer-state-reasons.bander-power-saver" msgstr "Bander Power Saver" msgid "printer-state-reasons.bander-recoverable-failure" msgstr "Bander Recoverable Failure" msgid "printer-state-reasons.bander-recoverable-storage" msgstr "Bander Recoverable Storage" msgid "printer-state-reasons.bander-removed" msgstr "Bander Removed" msgid "printer-state-reasons.bander-resource-added" msgstr "Bander Resource Added" msgid "printer-state-reasons.bander-resource-removed" msgstr "Bander Resource Removed" msgid "printer-state-reasons.bander-thermistor-failure" msgstr "Bander Thermistor Failure" msgid "printer-state-reasons.bander-timing-failure" msgstr "Bander Timing Failure" msgid "printer-state-reasons.bander-turned-off" msgstr "Bander Turned Off" msgid "printer-state-reasons.bander-turned-on" msgstr "Bander Turned On" msgid "printer-state-reasons.bander-under-temperature" msgstr "Bander Under Temperature" msgid "printer-state-reasons.bander-unrecoverable-failure" msgstr "Bander Unrecoverable Failure" msgid "printer-state-reasons.bander-unrecoverable-storage-error" msgstr "Bander Unrecoverable Storage Error" msgid "printer-state-reasons.bander-warming-up" msgstr "Bander Warming Up" msgid "printer-state-reasons.binder-added" msgstr "Binder Added" msgid "printer-state-reasons.binder-almost-empty" msgstr "Binder Almost Empty" msgid "printer-state-reasons.binder-almost-full" msgstr "Binder Almost Full" msgid "printer-state-reasons.binder-at-limit" msgstr "Binder At Limit" msgid "printer-state-reasons.binder-closed" msgstr "Binder Closed" msgid "printer-state-reasons.binder-configuration-change" msgstr "Binder Configuration Change" msgid "printer-state-reasons.binder-cover-closed" msgstr "Binder Cover Closed" msgid "printer-state-reasons.binder-cover-open" msgstr "Binder Cover Open" msgid "printer-state-reasons.binder-empty" msgstr "Binder Empty" msgid "printer-state-reasons.binder-full" msgstr "Binder Full" msgid "printer-state-reasons.binder-interlock-closed" msgstr "Binder Interlock Closed" msgid "printer-state-reasons.binder-interlock-open" msgstr "Binder Interlock Open" msgid "printer-state-reasons.binder-jam" msgstr "Binder Jam" msgid "printer-state-reasons.binder-life-almost-over" msgstr "Binder Life Almost Over" msgid "printer-state-reasons.binder-life-over" msgstr "Binder Life Over" msgid "printer-state-reasons.binder-memory-exhausted" msgstr "Binder Memory Exhausted" msgid "printer-state-reasons.binder-missing" msgstr "Binder Missing" msgid "printer-state-reasons.binder-motor-failure" msgstr "Binder Motor Failure" msgid "printer-state-reasons.binder-near-limit" msgstr "Binder Near Limit" msgid "printer-state-reasons.binder-offline" msgstr "Binder Offline" msgid "printer-state-reasons.binder-opened" msgstr "Binder Opened" msgid "printer-state-reasons.binder-over-temperature" msgstr "Binder Over Temperature" msgid "printer-state-reasons.binder-power-saver" msgstr "Binder Power Saver" msgid "printer-state-reasons.binder-recoverable-failure" msgstr "Binder Recoverable Failure" msgid "printer-state-reasons.binder-recoverable-storage" msgstr "Binder Recoverable Storage" msgid "printer-state-reasons.binder-removed" msgstr "Binder Removed" msgid "printer-state-reasons.binder-resource-added" msgstr "Binder Resource Added" msgid "printer-state-reasons.binder-resource-removed" msgstr "Binder Resource Removed" msgid "printer-state-reasons.binder-thermistor-failure" msgstr "Binder Thermistor Failure" msgid "printer-state-reasons.binder-timing-failure" msgstr "Binder Timing Failure" msgid "printer-state-reasons.binder-turned-off" msgstr "Binder Turned Off" msgid "printer-state-reasons.binder-turned-on" msgstr "Binder Turned On" msgid "printer-state-reasons.binder-under-temperature" msgstr "Binder Under Temperature" msgid "printer-state-reasons.binder-unrecoverable-failure" msgstr "Binder Unrecoverable Failure" msgid "printer-state-reasons.binder-unrecoverable-storage-error" msgstr "Binder Unrecoverable Storage Error" msgid "printer-state-reasons.binder-warming-up" msgstr "Binder Warming Up" msgid "printer-state-reasons.camera-failure" msgstr "Camera Failure" msgid "printer-state-reasons.chamber-cooling" msgstr "Chamber Cooling" msgid "printer-state-reasons.chamber-heating" msgstr "Chamber Heating" msgid "printer-state-reasons.chamber-temperature-high" msgstr "Chamber Temperature High" msgid "printer-state-reasons.chamber-temperature-low" msgstr "Chamber Temperature Low" msgid "printer-state-reasons.cleaner-life-almost-over" msgstr "Cleaner Life Almost Over" msgid "printer-state-reasons.cleaner-life-over" msgstr "Cleaner Life Over" msgid "printer-state-reasons.configuration-change" msgstr "Configuration Change" msgid "printer-state-reasons.connecting-to-device" msgstr "Connecting To Device" msgid "printer-state-reasons.cover-open" msgstr "Cover Open" msgid "printer-state-reasons.deactivated" msgstr "Deactivated" msgid "printer-state-reasons.developer-empty" msgstr "Developer Empty" msgid "printer-state-reasons.developer-low" msgstr "Developer Low" msgid "printer-state-reasons.die-cutter-added" msgstr "Die Cutter Added" msgid "printer-state-reasons.die-cutter-almost-empty" msgstr "Die Cutter Almost Empty" msgid "printer-state-reasons.die-cutter-almost-full" msgstr "Die Cutter Almost Full" msgid "printer-state-reasons.die-cutter-at-limit" msgstr "Die Cutter At Limit" msgid "printer-state-reasons.die-cutter-closed" msgstr "Die Cutter Closed" msgid "printer-state-reasons.die-cutter-configuration-change" msgstr "Die Cutter Configuration Change" msgid "printer-state-reasons.die-cutter-cover-closed" msgstr "Die Cutter Cover Closed" msgid "printer-state-reasons.die-cutter-cover-open" msgstr "Die Cutter Cover Open" msgid "printer-state-reasons.die-cutter-empty" msgstr "Die Cutter Empty" msgid "printer-state-reasons.die-cutter-full" msgstr "Die Cutter Full" msgid "printer-state-reasons.die-cutter-interlock-closed" msgstr "Die Cutter Interlock Closed" msgid "printer-state-reasons.die-cutter-interlock-open" msgstr "Die Cutter Interlock Open" msgid "printer-state-reasons.die-cutter-jam" msgstr "Die Cutter Jam" msgid "printer-state-reasons.die-cutter-life-almost-over" msgstr "Die Cutter Life Almost Over" msgid "printer-state-reasons.die-cutter-life-over" msgstr "Die Cutter Life Over" msgid "printer-state-reasons.die-cutter-memory-exhausted" msgstr "Die Cutter Memory Exhausted" msgid "printer-state-reasons.die-cutter-missing" msgstr "Die Cutter Missing" msgid "printer-state-reasons.die-cutter-motor-failure" msgstr "Die Cutter Motor Failure" msgid "printer-state-reasons.die-cutter-near-limit" msgstr "Die Cutter Near Limit" msgid "printer-state-reasons.die-cutter-offline" msgstr "Die Cutter Offline" msgid "printer-state-reasons.die-cutter-opened" msgstr "Die Cutter Opened" msgid "printer-state-reasons.die-cutter-over-temperature" msgstr "Die Cutter Over Temperature" msgid "printer-state-reasons.die-cutter-power-saver" msgstr "Die Cutter Power Saver" msgid "printer-state-reasons.die-cutter-recoverable-failure" msgstr "Die Cutter Recoverable Failure" msgid "printer-state-reasons.die-cutter-recoverable-storage" msgstr "Die Cutter Recoverable Storage" msgid "printer-state-reasons.die-cutter-removed" msgstr "Die Cutter Removed" msgid "printer-state-reasons.die-cutter-resource-added" msgstr "Die Cutter Resource Added" msgid "printer-state-reasons.die-cutter-resource-removed" msgstr "Die Cutter Resource Removed" msgid "printer-state-reasons.die-cutter-thermistor-failure" msgstr "Die Cutter Thermistor Failure" msgid "printer-state-reasons.die-cutter-timing-failure" msgstr "Die Cutter Timing Failure" msgid "printer-state-reasons.die-cutter-turned-off" msgstr "Die Cutter Turned Off" msgid "printer-state-reasons.die-cutter-turned-on" msgstr "Die Cutter Turned On" msgid "printer-state-reasons.die-cutter-under-temperature" msgstr "Die Cutter Under Temperature" msgid "printer-state-reasons.die-cutter-unrecoverable-failure" msgstr "Die Cutter Unrecoverable Failure" msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error" msgstr "Die Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.die-cutter-warming-up" msgstr "Die Cutter Warming Up" msgid "printer-state-reasons.door-open" msgstr "Door Open" msgid "printer-state-reasons.extruder-cooling" msgstr "Extruder Cooling" msgid "printer-state-reasons.extruder-failure" msgstr "Extruder Failure" msgid "printer-state-reasons.extruder-heating" msgstr "Extruder Heating" msgid "printer-state-reasons.extruder-jam" msgstr "Extruder Jam" msgid "printer-state-reasons.extruder-temperature-high" msgstr "Extruder Temperature High" msgid "printer-state-reasons.extruder-temperature-low" msgstr "Extruder Temperature Low" msgid "printer-state-reasons.fan-failure" msgstr "Fan Failure" msgid "printer-state-reasons.folder-added" msgstr "Folder Added" msgid "printer-state-reasons.folder-almost-empty" msgstr "Folder Almost Empty" msgid "printer-state-reasons.folder-almost-full" msgstr "Folder Almost Full" msgid "printer-state-reasons.folder-at-limit" msgstr "Folder At Limit" msgid "printer-state-reasons.folder-closed" msgstr "Folder Closed" msgid "printer-state-reasons.folder-configuration-change" msgstr "Folder Configuration Change" msgid "printer-state-reasons.folder-cover-closed" msgstr "Folder Cover Closed" msgid "printer-state-reasons.folder-cover-open" msgstr "Folder Cover Open" msgid "printer-state-reasons.folder-empty" msgstr "Folder Empty" msgid "printer-state-reasons.folder-full" msgstr "Folder Full" msgid "printer-state-reasons.folder-interlock-closed" msgstr "Folder Interlock Closed" msgid "printer-state-reasons.folder-interlock-open" msgstr "Folder Interlock Open" msgid "printer-state-reasons.folder-jam" msgstr "Folder Jam" msgid "printer-state-reasons.folder-life-almost-over" msgstr "Folder Life Almost Over" msgid "printer-state-reasons.folder-life-over" msgstr "Folder Life Over" msgid "printer-state-reasons.folder-memory-exhausted" msgstr "Folder Memory Exhausted" msgid "printer-state-reasons.folder-missing" msgstr "Folder Missing" msgid "printer-state-reasons.folder-motor-failure" msgstr "Folder Motor Failure" msgid "printer-state-reasons.folder-near-limit" msgstr "Folder Near Limit" msgid "printer-state-reasons.folder-offline" msgstr "Folder Offline" msgid "printer-state-reasons.folder-opened" msgstr "Folder Opened" msgid "printer-state-reasons.folder-over-temperature" msgstr "Folder Over Temperature" msgid "printer-state-reasons.folder-power-saver" msgstr "Folder Power Saver" msgid "printer-state-reasons.folder-recoverable-failure" msgstr "Folder Recoverable Failure" msgid "printer-state-reasons.folder-recoverable-storage" msgstr "Folder Recoverable Storage" msgid "printer-state-reasons.folder-removed" msgstr "Folder Removed" msgid "printer-state-reasons.folder-resource-added" msgstr "Folder Resource Added" msgid "printer-state-reasons.folder-resource-removed" msgstr "Folder Resource Removed" msgid "printer-state-reasons.folder-thermistor-failure" msgstr "Folder Thermistor Failure" msgid "printer-state-reasons.folder-timing-failure" msgstr "Folder Timing Failure" msgid "printer-state-reasons.folder-turned-off" msgstr "Folder Turned Off" msgid "printer-state-reasons.folder-turned-on" msgstr "Folder Turned On" msgid "printer-state-reasons.folder-under-temperature" msgstr "Folder Under Temperature" msgid "printer-state-reasons.folder-unrecoverable-failure" msgstr "Folder Unrecoverable Failure" msgid "printer-state-reasons.folder-unrecoverable-storage-error" msgstr "Folder Unrecoverable Storage Error" msgid "printer-state-reasons.folder-warming-up" msgstr "Folder Warming Up" msgid "printer-state-reasons.fuser-over-temp" msgstr "Fuser Over Temp" msgid "printer-state-reasons.fuser-under-temp" msgstr "Fuser Under Temp" msgid "printer-state-reasons.hold-new-jobs" msgstr "Hold New Jobs" msgid "printer-state-reasons.identify-printer-requested" msgstr "Identify Printer" msgid "printer-state-reasons.imprinter-added" msgstr "Imprinter Added" msgid "printer-state-reasons.imprinter-almost-empty" msgstr "Imprinter Almost Empty" msgid "printer-state-reasons.imprinter-almost-full" msgstr "Imprinter Almost Full" msgid "printer-state-reasons.imprinter-at-limit" msgstr "Imprinter At Limit" msgid "printer-state-reasons.imprinter-closed" msgstr "Imprinter Closed" msgid "printer-state-reasons.imprinter-configuration-change" msgstr "Imprinter Configuration Change" msgid "printer-state-reasons.imprinter-cover-closed" msgstr "Imprinter Cover Closed" msgid "printer-state-reasons.imprinter-cover-open" msgstr "Imprinter Cover Open" msgid "printer-state-reasons.imprinter-empty" msgstr "Imprinter Empty" msgid "printer-state-reasons.imprinter-full" msgstr "Imprinter Full" msgid "printer-state-reasons.imprinter-interlock-closed" msgstr "Imprinter Interlock Closed" msgid "printer-state-reasons.imprinter-interlock-open" msgstr "Imprinter Interlock Open" msgid "printer-state-reasons.imprinter-jam" msgstr "Imprinter Jam" msgid "printer-state-reasons.imprinter-life-almost-over" msgstr "Imprinter Life Almost Over" msgid "printer-state-reasons.imprinter-life-over" msgstr "Imprinter Life Over" msgid "printer-state-reasons.imprinter-memory-exhausted" msgstr "Imprinter Memory Exhausted" msgid "printer-state-reasons.imprinter-missing" msgstr "Imprinter Missing" msgid "printer-state-reasons.imprinter-motor-failure" msgstr "Imprinter Motor Failure" msgid "printer-state-reasons.imprinter-near-limit" msgstr "Imprinter Near Limit" msgid "printer-state-reasons.imprinter-offline" msgstr "Imprinter Offline" msgid "printer-state-reasons.imprinter-opened" msgstr "Imprinter Opened" msgid "printer-state-reasons.imprinter-over-temperature" msgstr "Imprinter Over Temperature" msgid "printer-state-reasons.imprinter-power-saver" msgstr "Imprinter Power Saver" msgid "printer-state-reasons.imprinter-recoverable-failure" msgstr "Imprinter Recoverable Failure" msgid "printer-state-reasons.imprinter-recoverable-storage" msgstr "Imprinter Recoverable Storage" msgid "printer-state-reasons.imprinter-removed" msgstr "Imprinter Removed" msgid "printer-state-reasons.imprinter-resource-added" msgstr "Imprinter Resource Added" msgid "printer-state-reasons.imprinter-resource-removed" msgstr "Imprinter Resource Removed" msgid "printer-state-reasons.imprinter-thermistor-failure" msgstr "Imprinter Thermistor Failure" msgid "printer-state-reasons.imprinter-timing-failure" msgstr "Imprinter Timing Failure" msgid "printer-state-reasons.imprinter-turned-off" msgstr "Imprinter Turned Off" msgid "printer-state-reasons.imprinter-turned-on" msgstr "Imprinter Turned On" msgid "printer-state-reasons.imprinter-under-temperature" msgstr "Imprinter Under Temperature" msgid "printer-state-reasons.imprinter-unrecoverable-failure" msgstr "Imprinter Unrecoverable Failure" msgid "printer-state-reasons.imprinter-unrecoverable-storage-error" msgstr "Imprinter Unrecoverable Storage Error" msgid "printer-state-reasons.imprinter-warming-up" msgstr "Imprinter Warming Up" msgid "printer-state-reasons.input-cannot-feed-size-selected" msgstr "Input Cannot Feed Size Selected" msgid "printer-state-reasons.input-manual-input-request" msgstr "Input Manual Input Request" msgid "printer-state-reasons.input-media-color-change" msgstr "Input Media Color Change" msgid "printer-state-reasons.input-media-form-parts-change" msgstr "Input Media Form Parts Change" msgid "printer-state-reasons.input-media-size-change" msgstr "Input Media Size Change" msgid "printer-state-reasons.input-media-type-change" msgstr "Input Media Type Change" msgid "printer-state-reasons.input-media-weight-change" msgstr "Input Media Weight Change" msgid "printer-state-reasons.input-tray-elevation-failure" msgstr "Input Tray Elevation Failure" msgid "printer-state-reasons.input-tray-missing" msgstr "Input Tray Missing" msgid "printer-state-reasons.input-tray-position-failure" msgstr "Input Tray Position Failure" msgid "printer-state-reasons.inserter-added" msgstr "Inserter Added" msgid "printer-state-reasons.inserter-almost-empty" msgstr "Inserter Almost Empty" msgid "printer-state-reasons.inserter-almost-full" msgstr "Inserter Almost Full" msgid "printer-state-reasons.inserter-at-limit" msgstr "Inserter At Limit" msgid "printer-state-reasons.inserter-closed" msgstr "Inserter Closed" msgid "printer-state-reasons.inserter-configuration-change" msgstr "Inserter Configuration Change" msgid "printer-state-reasons.inserter-cover-closed" msgstr "Inserter Cover Closed" msgid "printer-state-reasons.inserter-cover-open" msgstr "Inserter Cover Open" msgid "printer-state-reasons.inserter-empty" msgstr "Inserter Empty" msgid "printer-state-reasons.inserter-full" msgstr "Inserter Full" msgid "printer-state-reasons.inserter-interlock-closed" msgstr "Inserter Interlock Closed" msgid "printer-state-reasons.inserter-interlock-open" msgstr "Inserter Interlock Open" msgid "printer-state-reasons.inserter-jam" msgstr "Inserter Jam" msgid "printer-state-reasons.inserter-life-almost-over" msgstr "Inserter Life Almost Over" msgid "printer-state-reasons.inserter-life-over" msgstr "Inserter Life Over" msgid "printer-state-reasons.inserter-memory-exhausted" msgstr "Inserter Memory Exhausted" msgid "printer-state-reasons.inserter-missing" msgstr "Inserter Missing" msgid "printer-state-reasons.inserter-motor-failure" msgstr "Inserter Motor Failure" msgid "printer-state-reasons.inserter-near-limit" msgstr "Inserter Near Limit" msgid "printer-state-reasons.inserter-offline" msgstr "Inserter Offline" msgid "printer-state-reasons.inserter-opened" msgstr "Inserter Opened" msgid "printer-state-reasons.inserter-over-temperature" msgstr "Inserter Over Temperature" msgid "printer-state-reasons.inserter-power-saver" msgstr "Inserter Power Saver" msgid "printer-state-reasons.inserter-recoverable-failure" msgstr "Inserter Recoverable Failure" msgid "printer-state-reasons.inserter-recoverable-storage" msgstr "Inserter Recoverable Storage" msgid "printer-state-reasons.inserter-removed" msgstr "Inserter Removed" msgid "printer-state-reasons.inserter-resource-added" msgstr "Inserter Resource Added" msgid "printer-state-reasons.inserter-resource-removed" msgstr "Inserter Resource Removed" msgid "printer-state-reasons.inserter-thermistor-failure" msgstr "Inserter Thermistor Failure" msgid "printer-state-reasons.inserter-timing-failure" msgstr "Inserter Timing Failure" msgid "printer-state-reasons.inserter-turned-off" msgstr "Inserter Turned Off" msgid "printer-state-reasons.inserter-turned-on" msgstr "Inserter Turned On" msgid "printer-state-reasons.inserter-under-temperature" msgstr "Inserter Under Temperature" msgid "printer-state-reasons.inserter-unrecoverable-failure" msgstr "Inserter Unrecoverable Failure" msgid "printer-state-reasons.inserter-unrecoverable-storage-error" msgstr "Inserter Unrecoverable Storage Error" msgid "printer-state-reasons.inserter-warming-up" msgstr "Inserter Warming Up" msgid "printer-state-reasons.interlock-closed" msgstr "Interlock Closed" msgid "printer-state-reasons.interlock-open" msgstr "Interlock Open" msgid "printer-state-reasons.interpreter-cartridge-added" msgstr "Interpreter Cartridge Added" msgid "printer-state-reasons.interpreter-cartridge-deleted" msgstr "Interpreter Cartridge Deleted" msgid "printer-state-reasons.interpreter-complex-page-encountered" msgstr "Interpreter Complex Page Encountered" msgid "printer-state-reasons.interpreter-memory-decrease" msgstr "Interpreter Memory Decrease" msgid "printer-state-reasons.interpreter-memory-increase" msgstr "Interpreter Memory Increase" msgid "printer-state-reasons.interpreter-resource-added" msgstr "Interpreter Resource Added" msgid "printer-state-reasons.interpreter-resource-deleted" msgstr "Interpreter Resource Deleted" msgid "printer-state-reasons.interpreter-resource-unavailable" msgstr "Interpreter Resource Unavailable" msgid "printer-state-reasons.lamp-at-eol" msgstr "Lamp At Eol" msgid "printer-state-reasons.lamp-failure" msgstr "Lamp Failure" msgid "printer-state-reasons.lamp-near-eol" msgstr "Lamp Near Eol" msgid "printer-state-reasons.laser-at-eol" msgstr "Laser At Eol" msgid "printer-state-reasons.laser-failure" msgstr "Laser Failure" msgid "printer-state-reasons.laser-near-eol" msgstr "Laser Near Eol" msgid "printer-state-reasons.make-envelope-added" msgstr "Make Envelope Added" msgid "printer-state-reasons.make-envelope-almost-empty" msgstr "Make Envelope Almost Empty" msgid "printer-state-reasons.make-envelope-almost-full" msgstr "Make Envelope Almost Full" msgid "printer-state-reasons.make-envelope-at-limit" msgstr "Make Envelope At Limit" msgid "printer-state-reasons.make-envelope-closed" msgstr "Make Envelope Closed" msgid "printer-state-reasons.make-envelope-configuration-change" msgstr "Make Envelope Configuration Change" msgid "printer-state-reasons.make-envelope-cover-closed" msgstr "Make Envelope Cover Closed" msgid "printer-state-reasons.make-envelope-cover-open" msgstr "Make Envelope Cover Open" msgid "printer-state-reasons.make-envelope-empty" msgstr "Make Envelope Empty" msgid "printer-state-reasons.make-envelope-full" msgstr "Make Envelope Full" msgid "printer-state-reasons.make-envelope-interlock-closed" msgstr "Make Envelope Interlock Closed" msgid "printer-state-reasons.make-envelope-interlock-open" msgstr "Make Envelope Interlock Open" msgid "printer-state-reasons.make-envelope-jam" msgstr "Make Envelope Jam" msgid "printer-state-reasons.make-envelope-life-almost-over" msgstr "Make Envelope Life Almost Over" msgid "printer-state-reasons.make-envelope-life-over" msgstr "Make Envelope Life Over" msgid "printer-state-reasons.make-envelope-memory-exhausted" msgstr "Make Envelope Memory Exhausted" msgid "printer-state-reasons.make-envelope-missing" msgstr "Make Envelope Missing" msgid "printer-state-reasons.make-envelope-motor-failure" msgstr "Make Envelope Motor Failure" msgid "printer-state-reasons.make-envelope-near-limit" msgstr "Make Envelope Near Limit" msgid "printer-state-reasons.make-envelope-offline" msgstr "Make Envelope Offline" msgid "printer-state-reasons.make-envelope-opened" msgstr "Make Envelope Opened" msgid "printer-state-reasons.make-envelope-over-temperature" msgstr "Make Envelope Over Temperature" msgid "printer-state-reasons.make-envelope-power-saver" msgstr "Make Envelope Power Saver" msgid "printer-state-reasons.make-envelope-recoverable-failure" msgstr "Make Envelope Recoverable Failure" msgid "printer-state-reasons.make-envelope-recoverable-storage" msgstr "Make Envelope Recoverable Storage" msgid "printer-state-reasons.make-envelope-removed" msgstr "Make Envelope Removed" msgid "printer-state-reasons.make-envelope-resource-added" msgstr "Make Envelope Resource Added" msgid "printer-state-reasons.make-envelope-resource-removed" msgstr "Make Envelope Resource Removed" msgid "printer-state-reasons.make-envelope-thermistor-failure" msgstr "Make Envelope Thermistor Failure" msgid "printer-state-reasons.make-envelope-timing-failure" msgstr "Make Envelope Timing Failure" msgid "printer-state-reasons.make-envelope-turned-off" msgstr "Make Envelope Turned Off" msgid "printer-state-reasons.make-envelope-turned-on" msgstr "Make Envelope Turned On" msgid "printer-state-reasons.make-envelope-under-temperature" msgstr "Make Envelope Under Temperature" msgid "printer-state-reasons.make-envelope-unrecoverable-failure" msgstr "Make Envelope Unrecoverable Failure" msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error" msgstr "Make Envelope Unrecoverable Storage Error" msgid "printer-state-reasons.make-envelope-warming-up" msgstr "Make Envelope Warming Up" msgid "printer-state-reasons.marker-adjusting-print-quality" msgstr "Marker Adjusting Print Quality" msgid "printer-state-reasons.marker-developer-almost-empty" msgstr "Marker Developer Almost Empty" msgid "printer-state-reasons.marker-developer-empty" msgstr "Marker Developer Empty" msgid "printer-state-reasons.marker-fuser-thermistor-failure" msgstr "Marker Fuser Thermistor Failure" msgid "printer-state-reasons.marker-fuser-timing-failure" msgstr "Marker Fuser Timing Failure" msgid "printer-state-reasons.marker-ink-almost-empty" msgstr "Marker Ink Almost Empty" msgid "printer-state-reasons.marker-ink-empty" msgstr "Marker Ink Empty" msgid "printer-state-reasons.marker-print-ribbon-almost-empty" msgstr "Marker Print Ribbon Almost Empty" msgid "printer-state-reasons.marker-print-ribbon-empty" msgstr "Marker Print Ribbon Empty" msgid "printer-state-reasons.marker-supply-empty" msgstr "Marker Supply Empty" msgid "printer-state-reasons.marker-supply-low" msgstr "Marker Supply Low" msgid "printer-state-reasons.marker-toner-cartridge-missing" msgstr "Marker Toner Cartridge Missing" msgid "printer-state-reasons.marker-waste-almost-full" msgstr "Marker Waste Almost Full" msgid "printer-state-reasons.marker-waste-full" msgstr "Marker Waste Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full" msgstr "Marker Waste Ink Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-full" msgstr "Marker Waste Ink Receptacle Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full" msgstr "Marker Waste Toner Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-full" msgstr "Marker Waste Toner Receptacle Full" msgid "printer-state-reasons.material-empty" msgstr "Material Empty" msgid "printer-state-reasons.material-low" msgstr "Material Low" msgid "printer-state-reasons.material-needed" msgstr "Material Needed" msgid "printer-state-reasons.media-empty" msgstr "Media Empty" msgid "printer-state-reasons.media-jam" msgstr "Media Jam" msgid "printer-state-reasons.media-low" msgstr "Media Low" msgid "printer-state-reasons.media-needed" msgstr "Media Needed" msgid "printer-state-reasons.media-path-cannot-duplex-media-selected" msgstr "Media Path Cannot Duplex Media Selected" msgid "printer-state-reasons.media-path-media-tray-almost-full" msgstr "Media Path Media Tray Almost Full" msgid "printer-state-reasons.media-path-media-tray-full" msgstr "Media Path Media Tray Full" msgid "printer-state-reasons.media-path-media-tray-missing" msgstr "Media Path Media Tray Missing" msgid "printer-state-reasons.motor-failure" msgstr "Motor Failure" msgid "printer-state-reasons.moving-to-paused" msgstr "Moving To Paused" msgid "printer-state-reasons.none" msgstr "None" msgid "printer-state-reasons.opc-life-over" msgstr "Opc Life Over" msgid "printer-state-reasons.opc-near-eol" msgstr "Opc Near Eol" msgid "printer-state-reasons.other" msgstr "Other" msgid "printer-state-reasons.output-area-almost-full" msgstr "Output Area Almost Full" msgid "printer-state-reasons.output-area-full" msgstr "Output Area Full" msgid "printer-state-reasons.output-mailbox-select-failure" msgstr "Output Mailbox Select Failure" msgid "printer-state-reasons.output-tray-missing" msgstr "Output Tray Missing" msgid "printer-state-reasons.paused" msgstr "Paused" msgid "printer-state-reasons.perforater-added" msgstr "Perforater Added" msgid "printer-state-reasons.perforater-almost-empty" msgstr "Perforater Almost Empty" msgid "printer-state-reasons.perforater-almost-full" msgstr "Perforater Almost Full" msgid "printer-state-reasons.perforater-at-limit" msgstr "Perforater At Limit" msgid "printer-state-reasons.perforater-closed" msgstr "Perforater Closed" msgid "printer-state-reasons.perforater-configuration-change" msgstr "Perforater Configuration Change" msgid "printer-state-reasons.perforater-cover-closed" msgstr "Perforater Cover Closed" msgid "printer-state-reasons.perforater-cover-open" msgstr "Perforater Cover Open" msgid "printer-state-reasons.perforater-empty" msgstr "Perforater Empty" msgid "printer-state-reasons.perforater-full" msgstr "Perforater Full" msgid "printer-state-reasons.perforater-interlock-closed" msgstr "Perforater Interlock Closed" msgid "printer-state-reasons.perforater-interlock-open" msgstr "Perforater Interlock Open" msgid "printer-state-reasons.perforater-jam" msgstr "Perforater Jam" msgid "printer-state-reasons.perforater-life-almost-over" msgstr "Perforater Life Almost Over" msgid "printer-state-reasons.perforater-life-over" msgstr "Perforater Life Over" msgid "printer-state-reasons.perforater-memory-exhausted" msgstr "Perforater Memory Exhausted" msgid "printer-state-reasons.perforater-missing" msgstr "Perforater Missing" msgid "printer-state-reasons.perforater-motor-failure" msgstr "Perforater Motor Failure" msgid "printer-state-reasons.perforater-near-limit" msgstr "Perforater Near Limit" msgid "printer-state-reasons.perforater-offline" msgstr "Perforater Offline" msgid "printer-state-reasons.perforater-opened" msgstr "Perforater Opened" msgid "printer-state-reasons.perforater-over-temperature" msgstr "Perforater Over Temperature" msgid "printer-state-reasons.perforater-power-saver" msgstr "Perforater Power Saver" msgid "printer-state-reasons.perforater-recoverable-failure" msgstr "Perforater Recoverable Failure" msgid "printer-state-reasons.perforater-recoverable-storage" msgstr "Perforater Recoverable Storage" msgid "printer-state-reasons.perforater-removed" msgstr "Perforater Removed" msgid "printer-state-reasons.perforater-resource-added" msgstr "Perforater Resource Added" msgid "printer-state-reasons.perforater-resource-removed" msgstr "Perforater Resource Removed" msgid "printer-state-reasons.perforater-thermistor-failure" msgstr "Perforater Thermistor Failure" msgid "printer-state-reasons.perforater-timing-failure" msgstr "Perforater Timing Failure" msgid "printer-state-reasons.perforater-turned-off" msgstr "Perforater Turned Off" msgid "printer-state-reasons.perforater-turned-on" msgstr "Perforater Turned On" msgid "printer-state-reasons.perforater-under-temperature" msgstr "Perforater Under Temperature" msgid "printer-state-reasons.perforater-unrecoverable-failure" msgstr "Perforater Unrecoverable Failure" msgid "printer-state-reasons.perforater-unrecoverable-storage-error" msgstr "Perforater Unrecoverable Storage Error" msgid "printer-state-reasons.perforater-warming-up" msgstr "Perforater Warming Up" msgid "printer-state-reasons.power-down" msgstr "Power Down" msgid "printer-state-reasons.power-up" msgstr "Power Up" msgid "printer-state-reasons.printer-manual-reset" msgstr "Printer Manual Reset" msgid "printer-state-reasons.printer-nms-reset" msgstr "Printer Nms Reset" msgid "printer-state-reasons.printer-ready-to-print" msgstr "Printer Ready To Print" msgid "printer-state-reasons.puncher-added" msgstr "Puncher Added" msgid "printer-state-reasons.puncher-almost-empty" msgstr "Puncher Almost Empty" msgid "printer-state-reasons.puncher-almost-full" msgstr "Puncher Almost Full" msgid "printer-state-reasons.puncher-at-limit" msgstr "Puncher At Limit" msgid "printer-state-reasons.puncher-closed" msgstr "Puncher Closed" msgid "printer-state-reasons.puncher-configuration-change" msgstr "Puncher Configuration Change" msgid "printer-state-reasons.puncher-cover-closed" msgstr "Puncher Cover Closed" msgid "printer-state-reasons.puncher-cover-open" msgstr "Puncher Cover Open" msgid "printer-state-reasons.puncher-empty" msgstr "Puncher Empty" msgid "printer-state-reasons.puncher-full" msgstr "Puncher Full" msgid "printer-state-reasons.puncher-interlock-closed" msgstr "Puncher Interlock Closed" msgid "printer-state-reasons.puncher-interlock-open" msgstr "Puncher Interlock Open" msgid "printer-state-reasons.puncher-jam" msgstr "Puncher Jam" msgid "printer-state-reasons.puncher-life-almost-over" msgstr "Puncher Life Almost Over" msgid "printer-state-reasons.puncher-life-over" msgstr "Puncher Life Over" msgid "printer-state-reasons.puncher-memory-exhausted" msgstr "Puncher Memory Exhausted" msgid "printer-state-reasons.puncher-missing" msgstr "Puncher Missing" msgid "printer-state-reasons.puncher-motor-failure" msgstr "Puncher Motor Failure" msgid "printer-state-reasons.puncher-near-limit" msgstr "Puncher Near Limit" msgid "printer-state-reasons.puncher-offline" msgstr "Puncher Offline" msgid "printer-state-reasons.puncher-opened" msgstr "Puncher Opened" msgid "printer-state-reasons.puncher-over-temperature" msgstr "Puncher Over Temperature" msgid "printer-state-reasons.puncher-power-saver" msgstr "Puncher Power Saver" msgid "printer-state-reasons.puncher-recoverable-failure" msgstr "Puncher Recoverable Failure" msgid "printer-state-reasons.puncher-recoverable-storage" msgstr "Puncher Recoverable Storage" msgid "printer-state-reasons.puncher-removed" msgstr "Puncher Removed" msgid "printer-state-reasons.puncher-resource-added" msgstr "Puncher Resource Added" msgid "printer-state-reasons.puncher-resource-removed" msgstr "Puncher Resource Removed" msgid "printer-state-reasons.puncher-thermistor-failure" msgstr "Puncher Thermistor Failure" msgid "printer-state-reasons.puncher-timing-failure" msgstr "Puncher Timing Failure" msgid "printer-state-reasons.puncher-turned-off" msgstr "Puncher Turned Off" msgid "printer-state-reasons.puncher-turned-on" msgstr "Puncher Turned On" msgid "printer-state-reasons.puncher-under-temperature" msgstr "Puncher Under Temperature" msgid "printer-state-reasons.puncher-unrecoverable-failure" msgstr "Puncher Unrecoverable Failure" msgid "printer-state-reasons.puncher-unrecoverable-storage-error" msgstr "Puncher Unrecoverable Storage Error" msgid "printer-state-reasons.puncher-warming-up" msgstr "Puncher Warming Up" msgid "printer-state-reasons.separation-cutter-added" msgstr "Separation Cutter Added" msgid "printer-state-reasons.separation-cutter-almost-empty" msgstr "Separation Cutter Almost Empty" msgid "printer-state-reasons.separation-cutter-almost-full" msgstr "Separation Cutter Almost Full" msgid "printer-state-reasons.separation-cutter-at-limit" msgstr "Separation Cutter At Limit" msgid "printer-state-reasons.separation-cutter-closed" msgstr "Separation Cutter Closed" msgid "printer-state-reasons.separation-cutter-configuration-change" msgstr "Separation Cutter Configuration Change" msgid "printer-state-reasons.separation-cutter-cover-closed" msgstr "Separation Cutter Cover Closed" msgid "printer-state-reasons.separation-cutter-cover-open" msgstr "Separation Cutter Cover Open" msgid "printer-state-reasons.separation-cutter-empty" msgstr "Separation Cutter Empty" msgid "printer-state-reasons.separation-cutter-full" msgstr "Separation Cutter Full" msgid "printer-state-reasons.separation-cutter-interlock-closed" msgstr "Separation Cutter Interlock Closed" msgid "printer-state-reasons.separation-cutter-interlock-open" msgstr "Separation Cutter Interlock Open" msgid "printer-state-reasons.separation-cutter-jam" msgstr "Separation Cutter Jam" msgid "printer-state-reasons.separation-cutter-life-almost-over" msgstr "Separation Cutter Life Almost Over" msgid "printer-state-reasons.separation-cutter-life-over" msgstr "Separation Cutter Life Over" msgid "printer-state-reasons.separation-cutter-memory-exhausted" msgstr "Separation Cutter Memory Exhausted" msgid "printer-state-reasons.separation-cutter-missing" msgstr "Separation Cutter Missing" msgid "printer-state-reasons.separation-cutter-motor-failure" msgstr "Separation Cutter Motor Failure" msgid "printer-state-reasons.separation-cutter-near-limit" msgstr "Separation Cutter Near Limit" msgid "printer-state-reasons.separation-cutter-offline" msgstr "Separation Cutter Offline" msgid "printer-state-reasons.separation-cutter-opened" msgstr "Separation Cutter Opened" msgid "printer-state-reasons.separation-cutter-over-temperature" msgstr "Separation Cutter Over Temperature" msgid "printer-state-reasons.separation-cutter-power-saver" msgstr "Separation Cutter Power Saver" msgid "printer-state-reasons.separation-cutter-recoverable-failure" msgstr "Separation Cutter Recoverable Failure" msgid "printer-state-reasons.separation-cutter-recoverable-storage" msgstr "Separation Cutter Recoverable Storage" msgid "printer-state-reasons.separation-cutter-removed" msgstr "Separation Cutter Removed" msgid "printer-state-reasons.separation-cutter-resource-added" msgstr "Separation Cutter Resource Added" msgid "printer-state-reasons.separation-cutter-resource-removed" msgstr "Separation Cutter Resource Removed" msgid "printer-state-reasons.separation-cutter-thermistor-failure" msgstr "Separation Cutter Thermistor Failure" msgid "printer-state-reasons.separation-cutter-timing-failure" msgstr "Separation Cutter Timing Failure" msgid "printer-state-reasons.separation-cutter-turned-off" msgstr "Separation Cutter Turned Off" msgid "printer-state-reasons.separation-cutter-turned-on" msgstr "Separation Cutter Turned On" msgid "printer-state-reasons.separation-cutter-under-temperature" msgstr "Separation Cutter Under Temperature" msgid "printer-state-reasons.separation-cutter-unrecoverable-failure" msgstr "Separation Cutter Unrecoverable Failure" msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error" msgstr "Separation Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.separation-cutter-warming-up" msgstr "Separation Cutter Warming Up" msgid "printer-state-reasons.sheet-rotator-added" msgstr "Sheet Rotator Added" msgid "printer-state-reasons.sheet-rotator-almost-empty" msgstr "Sheet Rotator Almost Empty" msgid "printer-state-reasons.sheet-rotator-almost-full" msgstr "Sheet Rotator Almost Full" msgid "printer-state-reasons.sheet-rotator-at-limit" msgstr "Sheet Rotator At Limit" msgid "printer-state-reasons.sheet-rotator-closed" msgstr "Sheet Rotator Closed" msgid "printer-state-reasons.sheet-rotator-configuration-change" msgstr "Sheet Rotator Configuration Change" msgid "printer-state-reasons.sheet-rotator-cover-closed" msgstr "Sheet Rotator Cover Closed" msgid "printer-state-reasons.sheet-rotator-cover-open" msgstr "Sheet Rotator Cover Open" msgid "printer-state-reasons.sheet-rotator-empty" msgstr "Sheet Rotator Empty" msgid "printer-state-reasons.sheet-rotator-full" msgstr "Sheet Rotator Full" msgid "printer-state-reasons.sheet-rotator-interlock-closed" msgstr "Sheet Rotator Interlock Closed" msgid "printer-state-reasons.sheet-rotator-interlock-open" msgstr "Sheet Rotator Interlock Open" msgid "printer-state-reasons.sheet-rotator-jam" msgstr "Sheet Rotator Jam" msgid "printer-state-reasons.sheet-rotator-life-almost-over" msgstr "Sheet Rotator Life Almost Over" msgid "printer-state-reasons.sheet-rotator-life-over" msgstr "Sheet Rotator Life Over" msgid "printer-state-reasons.sheet-rotator-memory-exhausted" msgstr "Sheet Rotator Memory Exhausted" msgid "printer-state-reasons.sheet-rotator-missing" msgstr "Sheet Rotator Missing" msgid "printer-state-reasons.sheet-rotator-motor-failure" msgstr "Sheet Rotator Motor Failure" msgid "printer-state-reasons.sheet-rotator-near-limit" msgstr "Sheet Rotator Near Limit" msgid "printer-state-reasons.sheet-rotator-offline" msgstr "Sheet Rotator Offline" msgid "printer-state-reasons.sheet-rotator-opened" msgstr "Sheet Rotator Opened" msgid "printer-state-reasons.sheet-rotator-over-temperature" msgstr "Sheet Rotator Over Temperature" msgid "printer-state-reasons.sheet-rotator-power-saver" msgstr "Sheet Rotator Power Saver" msgid "printer-state-reasons.sheet-rotator-recoverable-failure" msgstr "Sheet Rotator Recoverable Failure" msgid "printer-state-reasons.sheet-rotator-recoverable-storage" msgstr "Sheet Rotator Recoverable Storage" msgid "printer-state-reasons.sheet-rotator-removed" msgstr "Sheet Rotator Removed" msgid "printer-state-reasons.sheet-rotator-resource-added" msgstr "Sheet Rotator Resource Added" msgid "printer-state-reasons.sheet-rotator-resource-removed" msgstr "Sheet Rotator Resource Removed" msgid "printer-state-reasons.sheet-rotator-thermistor-failure" msgstr "Sheet Rotator Thermistor Failure" msgid "printer-state-reasons.sheet-rotator-timing-failure" msgstr "Sheet Rotator Timing Failure" msgid "printer-state-reasons.sheet-rotator-turned-off" msgstr "Sheet Rotator Turned Off" msgid "printer-state-reasons.sheet-rotator-turned-on" msgstr "Sheet Rotator Turned On" msgid "printer-state-reasons.sheet-rotator-under-temperature" msgstr "Sheet Rotator Under Temperature" msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure" msgstr "Sheet Rotator Unrecoverable Failure" msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" msgstr "Sheet Rotator Unrecoverable Storage Error" msgid "printer-state-reasons.sheet-rotator-warming-up" msgstr "Sheet Rotator Warming Up" msgid "printer-state-reasons.shutdown" msgstr "Shutdown" msgid "printer-state-reasons.slitter-added" msgstr "Slitter Added" msgid "printer-state-reasons.slitter-almost-empty" msgstr "Slitter Almost Empty" msgid "printer-state-reasons.slitter-almost-full" msgstr "Slitter Almost Full" msgid "printer-state-reasons.slitter-at-limit" msgstr "Slitter At Limit" msgid "printer-state-reasons.slitter-closed" msgstr "Slitter Closed" msgid "printer-state-reasons.slitter-configuration-change" msgstr "Slitter Configuration Change" msgid "printer-state-reasons.slitter-cover-closed" msgstr "Slitter Cover Closed" msgid "printer-state-reasons.slitter-cover-open" msgstr "Slitter Cover Open" msgid "printer-state-reasons.slitter-empty" msgstr "Slitter Empty" msgid "printer-state-reasons.slitter-full" msgstr "Slitter Full" msgid "printer-state-reasons.slitter-interlock-closed" msgstr "Slitter Interlock Closed" msgid "printer-state-reasons.slitter-interlock-open" msgstr "Slitter Interlock Open" msgid "printer-state-reasons.slitter-jam" msgstr "Slitter Jam" msgid "printer-state-reasons.slitter-life-almost-over" msgstr "Slitter Life Almost Over" msgid "printer-state-reasons.slitter-life-over" msgstr "Slitter Life Over" msgid "printer-state-reasons.slitter-memory-exhausted" msgstr "Slitter Memory Exhausted" msgid "printer-state-reasons.slitter-missing" msgstr "Slitter Missing" msgid "printer-state-reasons.slitter-motor-failure" msgstr "Slitter Motor Failure" msgid "printer-state-reasons.slitter-near-limit" msgstr "Slitter Near Limit" msgid "printer-state-reasons.slitter-offline" msgstr "Slitter Offline" msgid "printer-state-reasons.slitter-opened" msgstr "Slitter Opened" msgid "printer-state-reasons.slitter-over-temperature" msgstr "Slitter Over Temperature" msgid "printer-state-reasons.slitter-power-saver" msgstr "Slitter Power Saver" msgid "printer-state-reasons.slitter-recoverable-failure" msgstr "Slitter Recoverable Failure" msgid "printer-state-reasons.slitter-recoverable-storage" msgstr "Slitter Recoverable Storage" msgid "printer-state-reasons.slitter-removed" msgstr "Slitter Removed" msgid "printer-state-reasons.slitter-resource-added" msgstr "Slitter Resource Added" msgid "printer-state-reasons.slitter-resource-removed" msgstr "Slitter Resource Removed" msgid "printer-state-reasons.slitter-thermistor-failure" msgstr "Slitter Thermistor Failure" msgid "printer-state-reasons.slitter-timing-failure" msgstr "Slitter Timing Failure" msgid "printer-state-reasons.slitter-turned-off" msgstr "Slitter Turned Off" msgid "printer-state-reasons.slitter-turned-on" msgstr "Slitter Turned On" msgid "printer-state-reasons.slitter-under-temperature" msgstr "Slitter Under Temperature" msgid "printer-state-reasons.slitter-unrecoverable-failure" msgstr "Slitter Unrecoverable Failure" msgid "printer-state-reasons.slitter-unrecoverable-storage-error" msgstr "Slitter Unrecoverable Storage Error" msgid "printer-state-reasons.slitter-warming-up" msgstr "Slitter Warming Up" msgid "printer-state-reasons.spool-area-full" msgstr "Spool Area Full" msgid "printer-state-reasons.stacker-added" msgstr "Stacker Added" msgid "printer-state-reasons.stacker-almost-empty" msgstr "Stacker Almost Empty" msgid "printer-state-reasons.stacker-almost-full" msgstr "Stacker Almost Full" msgid "printer-state-reasons.stacker-at-limit" msgstr "Stacker At Limit" msgid "printer-state-reasons.stacker-closed" msgstr "Stacker Closed" msgid "printer-state-reasons.stacker-configuration-change" msgstr "Stacker Configuration Change" msgid "printer-state-reasons.stacker-cover-closed" msgstr "Stacker Cover Closed" msgid "printer-state-reasons.stacker-cover-open" msgstr "Stacker Cover Open" msgid "printer-state-reasons.stacker-empty" msgstr "Stacker Empty" msgid "printer-state-reasons.stacker-full" msgstr "Stacker Full" msgid "printer-state-reasons.stacker-interlock-closed" msgstr "Stacker Interlock Closed" msgid "printer-state-reasons.stacker-interlock-open" msgstr "Stacker Interlock Open" msgid "printer-state-reasons.stacker-jam" msgstr "Stacker Jam" msgid "printer-state-reasons.stacker-life-almost-over" msgstr "Stacker Life Almost Over" msgid "printer-state-reasons.stacker-life-over" msgstr "Stacker Life Over" msgid "printer-state-reasons.stacker-memory-exhausted" msgstr "Stacker Memory Exhausted" msgid "printer-state-reasons.stacker-missing" msgstr "Stacker Missing" msgid "printer-state-reasons.stacker-motor-failure" msgstr "Stacker Motor Failure" msgid "printer-state-reasons.stacker-near-limit" msgstr "Stacker Near Limit" msgid "printer-state-reasons.stacker-offline" msgstr "Stacker Offline" msgid "printer-state-reasons.stacker-opened" msgstr "Stacker Opened" msgid "printer-state-reasons.stacker-over-temperature" msgstr "Stacker Over Temperature" msgid "printer-state-reasons.stacker-power-saver" msgstr "Stacker Power Saver" msgid "printer-state-reasons.stacker-recoverable-failure" msgstr "Stacker Recoverable Failure" msgid "printer-state-reasons.stacker-recoverable-storage" msgstr "Stacker Recoverable Storage" msgid "printer-state-reasons.stacker-removed" msgstr "Stacker Removed" msgid "printer-state-reasons.stacker-resource-added" msgstr "Stacker Resource Added" msgid "printer-state-reasons.stacker-resource-removed" msgstr "Stacker Resource Removed" msgid "printer-state-reasons.stacker-thermistor-failure" msgstr "Stacker Thermistor Failure" msgid "printer-state-reasons.stacker-timing-failure" msgstr "Stacker Timing Failure" msgid "printer-state-reasons.stacker-turned-off" msgstr "Stacker Turned Off" msgid "printer-state-reasons.stacker-turned-on" msgstr "Stacker Turned On" msgid "printer-state-reasons.stacker-under-temperature" msgstr "Stacker Under Temperature" msgid "printer-state-reasons.stacker-unrecoverable-failure" msgstr "Stacker Unrecoverable Failure" msgid "printer-state-reasons.stacker-unrecoverable-storage-error" msgstr "Stacker Unrecoverable Storage Error" msgid "printer-state-reasons.stacker-warming-up" msgstr "Stacker Warming Up" msgid "printer-state-reasons.stapler-added" msgstr "Stapler Added" msgid "printer-state-reasons.stapler-almost-empty" msgstr "Stapler Almost Empty" msgid "printer-state-reasons.stapler-almost-full" msgstr "Stapler Almost Full" msgid "printer-state-reasons.stapler-at-limit" msgstr "Stapler At Limit" msgid "printer-state-reasons.stapler-closed" msgstr "Stapler Closed" msgid "printer-state-reasons.stapler-configuration-change" msgstr "Stapler Configuration Change" msgid "printer-state-reasons.stapler-cover-closed" msgstr "Stapler Cover Closed" msgid "printer-state-reasons.stapler-cover-open" msgstr "Stapler Cover Open" msgid "printer-state-reasons.stapler-empty" msgstr "Stapler Empty" msgid "printer-state-reasons.stapler-full" msgstr "Stapler Full" msgid "printer-state-reasons.stapler-interlock-closed" msgstr "Stapler Interlock Closed" msgid "printer-state-reasons.stapler-interlock-open" msgstr "Stapler Interlock Open" msgid "printer-state-reasons.stapler-jam" msgstr "Stapler Jam" msgid "printer-state-reasons.stapler-life-almost-over" msgstr "Stapler Life Almost Over" msgid "printer-state-reasons.stapler-life-over" msgstr "Stapler Life Over" msgid "printer-state-reasons.stapler-memory-exhausted" msgstr "Stapler Memory Exhausted" msgid "printer-state-reasons.stapler-missing" msgstr "Stapler Missing" msgid "printer-state-reasons.stapler-motor-failure" msgstr "Stapler Motor Failure" msgid "printer-state-reasons.stapler-near-limit" msgstr "Stapler Near Limit" msgid "printer-state-reasons.stapler-offline" msgstr "Stapler Offline" msgid "printer-state-reasons.stapler-opened" msgstr "Stapler Opened" msgid "printer-state-reasons.stapler-over-temperature" msgstr "Stapler Over Temperature" msgid "printer-state-reasons.stapler-power-saver" msgstr "Stapler Power Saver" msgid "printer-state-reasons.stapler-recoverable-failure" msgstr "Stapler Recoverable Failure" msgid "printer-state-reasons.stapler-recoverable-storage" msgstr "Stapler Recoverable Storage" msgid "printer-state-reasons.stapler-removed" msgstr "Stapler Removed" msgid "printer-state-reasons.stapler-resource-added" msgstr "Stapler Resource Added" msgid "printer-state-reasons.stapler-resource-removed" msgstr "Stapler Resource Removed" msgid "printer-state-reasons.stapler-thermistor-failure" msgstr "Stapler Thermistor Failure" msgid "printer-state-reasons.stapler-timing-failure" msgstr "Stapler Timing Failure" msgid "printer-state-reasons.stapler-turned-off" msgstr "Stapler Turned Off" msgid "printer-state-reasons.stapler-turned-on" msgstr "Stapler Turned On" msgid "printer-state-reasons.stapler-under-temperature" msgstr "Stapler Under Temperature" msgid "printer-state-reasons.stapler-unrecoverable-failure" msgstr "Stapler Unrecoverable Failure" msgid "printer-state-reasons.stapler-unrecoverable-storage-error" msgstr "Stapler Unrecoverable Storage Error" msgid "printer-state-reasons.stapler-warming-up" msgstr "Stapler Warming Up" msgid "printer-state-reasons.stitcher-added" msgstr "Stitcher Added" msgid "printer-state-reasons.stitcher-almost-empty" msgstr "Stitcher Almost Empty" msgid "printer-state-reasons.stitcher-almost-full" msgstr "Stitcher Almost Full" msgid "printer-state-reasons.stitcher-at-limit" msgstr "Stitcher At Limit" msgid "printer-state-reasons.stitcher-closed" msgstr "Stitcher Closed" msgid "printer-state-reasons.stitcher-configuration-change" msgstr "Stitcher Configuration Change" msgid "printer-state-reasons.stitcher-cover-closed" msgstr "Stitcher Cover Closed" msgid "printer-state-reasons.stitcher-cover-open" msgstr "Stitcher Cover Open" msgid "printer-state-reasons.stitcher-empty" msgstr "Stitcher Empty" msgid "printer-state-reasons.stitcher-full" msgstr "Stitcher Full" msgid "printer-state-reasons.stitcher-interlock-closed" msgstr "Stitcher Interlock Closed" msgid "printer-state-reasons.stitcher-interlock-open" msgstr "Stitcher Interlock Open" msgid "printer-state-reasons.stitcher-jam" msgstr "Stitcher Jam" msgid "printer-state-reasons.stitcher-life-almost-over" msgstr "Stitcher Life Almost Over" msgid "printer-state-reasons.stitcher-life-over" msgstr "Stitcher Life Over" msgid "printer-state-reasons.stitcher-memory-exhausted" msgstr "Stitcher Memory Exhausted" msgid "printer-state-reasons.stitcher-missing" msgstr "Stitcher Missing" msgid "printer-state-reasons.stitcher-motor-failure" msgstr "Stitcher Motor Failure" msgid "printer-state-reasons.stitcher-near-limit" msgstr "Stitcher Near Limit" msgid "printer-state-reasons.stitcher-offline" msgstr "Stitcher Offline" msgid "printer-state-reasons.stitcher-opened" msgstr "Stitcher Opened" msgid "printer-state-reasons.stitcher-over-temperature" msgstr "Stitcher Over Temperature" msgid "printer-state-reasons.stitcher-power-saver" msgstr "Stitcher Power Saver" msgid "printer-state-reasons.stitcher-recoverable-failure" msgstr "Stitcher Recoverable Failure" msgid "printer-state-reasons.stitcher-recoverable-storage" msgstr "Stitcher Recoverable Storage" msgid "printer-state-reasons.stitcher-removed" msgstr "Stitcher Removed" msgid "printer-state-reasons.stitcher-resource-added" msgstr "Stitcher Resource Added" msgid "printer-state-reasons.stitcher-resource-removed" msgstr "Stitcher Resource Removed" msgid "printer-state-reasons.stitcher-thermistor-failure" msgstr "Stitcher Thermistor Failure" msgid "printer-state-reasons.stitcher-timing-failure" msgstr "Stitcher Timing Failure" msgid "printer-state-reasons.stitcher-turned-off" msgstr "Stitcher Turned Off" msgid "printer-state-reasons.stitcher-turned-on" msgstr "Stitcher Turned On" msgid "printer-state-reasons.stitcher-under-temperature" msgstr "Stitcher Under Temperature" msgid "printer-state-reasons.stitcher-unrecoverable-failure" msgstr "Stitcher Unrecoverable Failure" msgid "printer-state-reasons.stitcher-unrecoverable-storage-error" msgstr "Stitcher Unrecoverable Storage Error" msgid "printer-state-reasons.stitcher-warming-up" msgstr "Stitcher Warming Up" msgid "printer-state-reasons.stopped-partly" msgstr "Stopped Partly" msgid "printer-state-reasons.stopping" msgstr "Stopping" msgid "printer-state-reasons.subunit-added" msgstr "Subunit Added" msgid "printer-state-reasons.subunit-almost-empty" msgstr "Subunit Almost Empty" msgid "printer-state-reasons.subunit-almost-full" msgstr "Subunit Almost Full" msgid "printer-state-reasons.subunit-at-limit" msgstr "Subunit At Limit" msgid "printer-state-reasons.subunit-closed" msgstr "Subunit Closed" msgid "printer-state-reasons.subunit-empty" msgstr "Subunit Empty" msgid "printer-state-reasons.subunit-full" msgstr "Subunit Full" msgid "printer-state-reasons.subunit-life-almost-over" msgstr "Subunit Life Almost Over" msgid "printer-state-reasons.subunit-life-over" msgstr "Subunit Life Over" msgid "printer-state-reasons.subunit-memory-exhausted" msgstr "Subunit Memory Exhausted" msgid "printer-state-reasons.subunit-missing" msgstr "Subunit Missing" msgid "printer-state-reasons.subunit-motor-failure" msgstr "Subunit Motor Failure" msgid "printer-state-reasons.subunit-near-limit" msgstr "Subunit Near Limit" msgid "printer-state-reasons.subunit-offline" msgstr "Subunit Offline" msgid "printer-state-reasons.subunit-opened" msgstr "Subunit Opened" msgid "printer-state-reasons.subunit-over-temperature" msgstr "Subunit Over Temperature" msgid "printer-state-reasons.subunit-power-saver" msgstr "Subunit Power Saver" msgid "printer-state-reasons.subunit-recoverable-failure" msgstr "Subunit Recoverable Failure" msgid "printer-state-reasons.subunit-recoverable-storage" msgstr "Subunit Recoverable Storage" msgid "printer-state-reasons.subunit-removed" msgstr "Subunit Removed" msgid "printer-state-reasons.subunit-resource-added" msgstr "Subunit Resource Added" msgid "printer-state-reasons.subunit-resource-removed" msgstr "Subunit Resource Removed" msgid "printer-state-reasons.subunit-thermistor-failure" msgstr "Subunit Thermistor Failure" msgid "printer-state-reasons.subunit-timing-Failure" msgstr "Subunit Timing Failure" msgid "printer-state-reasons.subunit-turned-off" msgstr "Subunit Turned Off" msgid "printer-state-reasons.subunit-turned-on" msgstr "Subunit Turned On" msgid "printer-state-reasons.subunit-under-temperature" msgstr "Subunit Under Temperature" msgid "printer-state-reasons.subunit-unrecoverable-failure" msgstr "Subunit Unrecoverable Failure" msgid "printer-state-reasons.subunit-unrecoverable-storage" msgstr "Subunit Unrecoverable Storage" msgid "printer-state-reasons.subunit-warming-up" msgstr "Subunit Warming Up" msgid "printer-state-reasons.timed-out" msgstr "Timed Out" msgid "printer-state-reasons.toner-empty" msgstr "Toner Empty" msgid "printer-state-reasons.toner-low" msgstr "Toner Low" msgid "printer-state-reasons.trimmer-added" msgstr "Trimmer Added" msgid "printer-state-reasons.trimmer-almost-empty" msgstr "Trimmer Almost Empty" msgid "printer-state-reasons.trimmer-almost-full" msgstr "Trimmer Almost Full" msgid "printer-state-reasons.trimmer-at-limit" msgstr "Trimmer At Limit" msgid "printer-state-reasons.trimmer-closed" msgstr "Trimmer Closed" msgid "printer-state-reasons.trimmer-configuration-change" msgstr "Trimmer Configuration Change" msgid "printer-state-reasons.trimmer-cover-closed" msgstr "Trimmer Cover Closed" msgid "printer-state-reasons.trimmer-cover-open" msgstr "Trimmer Cover Open" msgid "printer-state-reasons.trimmer-empty" msgstr "Trimmer Empty" msgid "printer-state-reasons.trimmer-full" msgstr "Trimmer Full" msgid "printer-state-reasons.trimmer-interlock-closed" msgstr "Trimmer Interlock Closed" msgid "printer-state-reasons.trimmer-interlock-open" msgstr "Trimmer Interlock Open" msgid "printer-state-reasons.trimmer-jam" msgstr "Trimmer Jam" msgid "printer-state-reasons.trimmer-life-almost-over" msgstr "Trimmer Life Almost Over" msgid "printer-state-reasons.trimmer-life-over" msgstr "Trimmer Life Over" msgid "printer-state-reasons.trimmer-memory-exhausted" msgstr "Trimmer Memory Exhausted" msgid "printer-state-reasons.trimmer-missing" msgstr "Trimmer Missing" msgid "printer-state-reasons.trimmer-motor-failure" msgstr "Trimmer Motor Failure" msgid "printer-state-reasons.trimmer-near-limit" msgstr "Trimmer Near Limit" msgid "printer-state-reasons.trimmer-offline" msgstr "Trimmer Offline" msgid "printer-state-reasons.trimmer-opened" msgstr "Trimmer Opened" msgid "printer-state-reasons.trimmer-over-temperature" msgstr "Trimmer Over Temperature" msgid "printer-state-reasons.trimmer-power-saver" msgstr "Trimmer Power Saver" msgid "printer-state-reasons.trimmer-recoverable-failure" msgstr "Trimmer Recoverable Failure" msgid "printer-state-reasons.trimmer-recoverable-storage" msgstr "Trimmer Recoverable Storage" msgid "printer-state-reasons.trimmer-removed" msgstr "Trimmer Removed" msgid "printer-state-reasons.trimmer-resource-added" msgstr "Trimmer Resource Added" msgid "printer-state-reasons.trimmer-resource-removed" msgstr "Trimmer Resource Removed" msgid "printer-state-reasons.trimmer-thermistor-failure" msgstr "Trimmer Thermistor Failure" msgid "printer-state-reasons.trimmer-timing-failure" msgstr "Trimmer Timing Failure" msgid "printer-state-reasons.trimmer-turned-off" msgstr "Trimmer Turned Off" msgid "printer-state-reasons.trimmer-turned-on" msgstr "Trimmer Turned On" msgid "printer-state-reasons.trimmer-under-temperature" msgstr "Trimmer Under Temperature" msgid "printer-state-reasons.trimmer-unrecoverable-failure" msgstr "Trimmer Unrecoverable Failure" msgid "printer-state-reasons.trimmer-unrecoverable-storage-error" msgstr "Trimmer Unrecoverable Storage Error" msgid "printer-state-reasons.trimmer-warming-up" msgstr "Trimmer Warming Up" msgid "printer-state-reasons.unknown" msgstr "Unknown" msgid "printer-state-reasons.wrapper-added" msgstr "Wrapper Added" msgid "printer-state-reasons.wrapper-almost-empty" msgstr "Wrapper Almost Empty" msgid "printer-state-reasons.wrapper-almost-full" msgstr "Wrapper Almost Full" msgid "printer-state-reasons.wrapper-at-limit" msgstr "Wrapper At Limit" msgid "printer-state-reasons.wrapper-closed" msgstr "Wrapper Closed" msgid "printer-state-reasons.wrapper-configuration-change" msgstr "Wrapper Configuration Change" msgid "printer-state-reasons.wrapper-cover-closed" msgstr "Wrapper Cover Closed" msgid "printer-state-reasons.wrapper-cover-open" msgstr "Wrapper Cover Open" msgid "printer-state-reasons.wrapper-empty" msgstr "Wrapper Empty" msgid "printer-state-reasons.wrapper-full" msgstr "Wrapper Full" msgid "printer-state-reasons.wrapper-interlock-closed" msgstr "Wrapper Interlock Closed" msgid "printer-state-reasons.wrapper-interlock-open" msgstr "Wrapper Interlock Open" msgid "printer-state-reasons.wrapper-jam" msgstr "Wrapper Jam" msgid "printer-state-reasons.wrapper-life-almost-over" msgstr "Wrapper Life Almost Over" msgid "printer-state-reasons.wrapper-life-over" msgstr "Wrapper Life Over" msgid "printer-state-reasons.wrapper-memory-exhausted" msgstr "Wrapper Memory Exhausted" msgid "printer-state-reasons.wrapper-missing" msgstr "Wrapper Missing" msgid "printer-state-reasons.wrapper-motor-failure" msgstr "Wrapper Motor Failure" msgid "printer-state-reasons.wrapper-near-limit" msgstr "Wrapper Near Limit" msgid "printer-state-reasons.wrapper-offline" msgstr "Wrapper Offline" msgid "printer-state-reasons.wrapper-opened" msgstr "Wrapper Opened" msgid "printer-state-reasons.wrapper-over-temperature" msgstr "Wrapper Over Temperature" msgid "printer-state-reasons.wrapper-power-saver" msgstr "Wrapper Power Saver" msgid "printer-state-reasons.wrapper-recoverable-failure" msgstr "Wrapper Recoverable Failure" msgid "printer-state-reasons.wrapper-recoverable-storage" msgstr "Wrapper Recoverable Storage" msgid "printer-state-reasons.wrapper-removed" msgstr "Wrapper Removed" msgid "printer-state-reasons.wrapper-resource-added" msgstr "Wrapper Resource Added" msgid "printer-state-reasons.wrapper-resource-removed" msgstr "Wrapper Resource Removed" msgid "printer-state-reasons.wrapper-thermistor-failure" msgstr "Wrapper Thermistor Failure" msgid "printer-state-reasons.wrapper-timing-failure" msgstr "Wrapper Timing Failure" msgid "printer-state-reasons.wrapper-turned-off" msgstr "Wrapper Turned Off" msgid "printer-state-reasons.wrapper-turned-on" msgstr "Wrapper Turned On" msgid "printer-state-reasons.wrapper-under-temperature" msgstr "Wrapper Under Temperature" msgid "printer-state-reasons.wrapper-unrecoverable-failure" msgstr "Wrapper Unrecoverable Failure" msgid "printer-state-reasons.wrapper-unrecoverable-storage-error" msgstr "Wrapper Unrecoverable Storage Error" msgid "printer-state-reasons.wrapper-warming-up" msgstr "Wrapper Warming Up" msgid "printer-state.3" msgstr "Idle" msgid "printer-state.4" msgstr "Processing" msgid "printer-state.5" msgstr "Stopped" msgid "printer-up-time" msgstr "Printer Uptime" msgid "processing" msgstr "s'està processant" msgid "proof-print" msgstr "Proof Print" msgid "proof-print-copies" msgstr "Proof Print Copies" msgid "punching" msgstr "Punching" msgid "punching-locations" msgstr "Punching Locations" msgid "punching-offset" msgstr "Punching Offset" msgid "punching-reference-edge" msgstr "Punching Reference Edge" msgid "punching-reference-edge.bottom" msgstr "Bottom" msgid "punching-reference-edge.left" msgstr "Left" msgid "punching-reference-edge.right" msgstr "Right" msgid "punching-reference-edge.top" msgstr "Top" #, c-format msgid "request id is %s-%d (%d file(s))" msgstr "l'identificador de la petició és %s-%d (%d fitxer(s))" msgid "request-id uses indefinite length" msgstr "la request-id fa servir una longitud indefinida" msgid "requested-attributes" msgstr "Requested Attributes" msgid "retry-interval" msgstr "Retry Interval" msgid "retry-time-out" msgstr "Retry Time Out" msgid "save-disposition" msgstr "Save Disposition" msgid "save-disposition.none" msgstr "None" msgid "save-disposition.print-save" msgstr "Print Save" msgid "save-disposition.save-only" msgstr "Save Only" msgid "save-document-format" msgstr "Save Document Format" msgid "save-info" msgstr "Save Info" msgid "save-location" msgstr "Save Location" msgid "save-name" msgstr "Save Name" msgid "scheduler is not running" msgstr "el programador de tasques no s'està executant" msgid "scheduler is running" msgstr "el programador de tasques s'està executant" msgid "separator-sheets" msgstr "Separator Sheets" msgid "separator-sheets-type" msgstr "Separator Sheets Type" msgid "separator-sheets-type.both-sheets" msgstr "Both Sheets" msgid "separator-sheets-type.end-sheet" msgstr "End Sheet" msgid "separator-sheets-type.none" msgstr "None" msgid "separator-sheets-type.slip-sheets" msgstr "Slip Sheets" msgid "separator-sheets-type.start-sheet" msgstr "Start Sheet" msgid "sheet-collate" msgstr "Collate Copies" msgid "sheet-collate.collated" msgstr "Yes" msgid "sheet-collate.uncollated" msgstr "No" msgid "sides" msgstr "2-Sided Printing" msgid "sides.one-sided" msgstr "Off" msgid "sides.two-sided-long-edge" msgstr "On (Portrait)" msgid "sides.two-sided-short-edge" msgstr "On (Landscape)" #, c-format msgid "stat of %s failed: %s" msgstr "stat de %s ha fallat: %s" msgid "status\t\tShow status of daemon and queue." msgstr "status\t\tmostra l'estat del dimoni i la cua." msgid "status-message" msgstr "Status Message" msgid "stitching" msgstr "Staple" msgid "stitching-angle" msgstr "Stitching Angle" msgid "stitching-locations" msgstr "Stitching Locations" msgid "stitching-method" msgstr "Stitching Method" msgid "stitching-method.auto" msgstr "Automatic" msgid "stitching-method.crimp" msgstr "Crimp" msgid "stitching-method.wire" msgstr "Wire" msgid "stitching-offset" msgstr "Stitching Offset" msgid "stitching-reference-edge" msgstr "Stitching Reference Edge" msgid "stitching-reference-edge.bottom" msgstr "Bottom" msgid "stitching-reference-edge.left" msgstr "Left" msgid "stitching-reference-edge.right" msgstr "Right" msgid "stitching-reference-edge.top" msgstr "Top" msgid "stopped" msgstr "aturat" msgid "subject" msgstr "Subject" #, c-format msgid "system default destination: %s" msgstr "destí per defecte del sistema: %s" #, c-format msgid "system default destination: %s/%s" msgstr "destí per defecte del sistema: %s/%s" msgid "t33-subaddress" msgstr "T33 Subaddress" msgid "to-name" msgstr "To Name" msgid "transmission-status" msgstr "Transmission Status" msgid "transmission-status.3" msgstr "Pending" msgid "transmission-status.4" msgstr "Pending Retry" msgid "transmission-status.5" msgstr "Processing" msgid "transmission-status.7" msgstr "Canceled" msgid "transmission-status.8" msgstr "Aborted" msgid "transmission-status.9" msgstr "Completed" msgid "trimming" msgstr "Cut" msgid "trimming-offset" msgstr "Cut Position" msgid "trimming-reference-edge" msgstr "Trimming Reference Edge" msgid "trimming-reference-edge.bottom" msgstr "Bottom" msgid "trimming-reference-edge.left" msgstr "Left" msgid "trimming-reference-edge.right" msgstr "Right" msgid "trimming-reference-edge.top" msgstr "Top" msgid "trimming-type" msgstr "Trimming Type" msgid "trimming-type.draw-line" msgstr "Draw Line" msgid "trimming-type.full" msgstr "Full" msgid "trimming-type.partial" msgstr "Partial" msgid "trimming-type.perforate" msgstr "Perforate" msgid "trimming-type.score" msgstr "Score" msgid "trimming-type.tab" msgstr "Tab" msgid "trimming-when" msgstr "Trimming When" msgid "trimming-when.after-documents" msgstr "After Documents" msgid "trimming-when.after-job" msgstr "After Job" msgid "trimming-when.after-sets" msgstr "After Sets" msgid "trimming-when.after-sheets" msgstr "After Sheets" msgid "unknown" msgstr "desconegut" msgid "untitled" msgstr "sense títol" msgid "variable-bindings uses indefinite length" msgstr "La variable-bindings fa servir una longitud indefinida" msgid "x-accuracy" msgstr "X Accuracy" msgid "x-dimension" msgstr "X Dimension" msgid "x-offset" msgstr "X Offset" msgid "x-origin" msgstr "X Origin" msgid "y-accuracy" msgstr "Y Accuracy" msgid "y-dimension" msgstr "Y Dimension" msgid "y-offset" msgstr "Y Offset" msgid "y-origin" msgstr "Y Origin" msgid "z-accuracy" msgstr "Z Accuracy" msgid "z-dimension" msgstr "Z Dimension" msgid "z-offset" msgstr "Z Offset" #~ msgid "\tInterface: %s/interfaces/%s" #~ msgstr "\tInterfície: %s/interfícies/%s" #~ msgid "" #~ " **FAIL** BAD Manufacturer (should be \"Oki\")\n" #~ " REF: Page 211, table D.1." #~ msgstr "" #~ " **ERROR** Manufacturer INCORRECTE (hauria de ser «Oki»)\n" #~ " REF: pàgina 211, taula D.1." #~ msgid " **FAIL** Unable to open PPD file - %s" #~ msgstr " **ERROR** No es pot obrir el fitxer PPD - %s" #~ msgid " --lf End lines with LF (UNIX/Linux/OS X)." #~ msgstr " --lf Final de línia amb LF (UNIX/Linux/OS X)." #~ msgid " -E Enable encryption." #~ msgstr " -E Habilita el xifrat." #~ msgid " -E Test with HTTP Upgrade to TLS." #~ msgstr "" #~ " -E Fa una prova amb l'actualització d'HTTP a TLS." #~ msgid " -J title Set title." #~ msgstr " -J títol Estableix el títol." #~ msgid " -S Test with SSL encryption." #~ msgstr " -S Fa una prova amb xifrat SSL." #~ msgid " -T Set the receive/send timeout in seconds." #~ msgstr "" #~ " -T Estableix el temps d'espera màxim per enviar i " #~ "rebre en segons." #~ msgid " -U samba-user Authenticate using the named SAMBA user." #~ msgstr "" #~ " -U usuari-samba Autentica fent servir l'usuari SAMBA indicat." #~ msgid " -U username Set username for job." #~ msgstr " -U nomusuari Estableix el nom d'usuari per la tasca." #~ msgid " -a 'name=value ...' Set option(s)." #~ msgstr " -a 'nom=valor ...' Estableix les opcions." #~ msgid " -c config-file Load alternate configuration file." #~ msgstr "" #~ " -c fitxer-config Carrega un fitxer de configuració alternatiu." #~ msgid " -c copies Set number of copies." #~ msgstr " -c còpies Estableix el nombre de còpies." #~ msgid "" #~ " -f filename Set file to be converted (otherwise stdin)." #~ msgstr "" #~ " -f nomfitxer Estableix el fitxer que s'ha de convertir " #~ "(stdin si no s'especifica)." #~ msgid " -h cups-server Use the named CUPS server." #~ msgstr " -h servidor-cups Fa servir el servidor CUPS indicat." #~ msgid "" #~ " -j mime/type Set output MIME type (otherwise application/" #~ "pdf)." #~ msgstr "" #~ " -j tipus/mime Estableix el tipus MIME de sortida " #~ "(application/pdf si no s'especifica)." #~ msgid " -l Run cupsd from launchd(8)." #~ msgstr " -l Executa cupsd des de launchd(8)." #~ msgid "" #~ " -o filename Set file to be generated (otherwise stdout)." #~ msgstr "" #~ " -o nomfitxer Estableix el nom del fitxer que s'ha de " #~ "generar (stdout si no s'especifica)." #~ msgid " -q Be quiet - no output except errors." #~ msgstr " -q Silenciós - Només dóna els errors." #~ msgid " -v Be slightly verbose." #~ msgstr " -v mode lleugerament detallat." #~ msgid " -v Be verbose (more v's for more verbosity)." #~ msgstr " -v mode detallat (com més v's més detallat)." #~ msgid " -v Be verbose (show commands)." #~ msgstr " -v mode detallat (mostra les ordres)." #~ msgid " -v Show all attributes sent and received." #~ msgstr "" #~ " -v Mostra tots els atributs enviats i rebuts." #~ msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes" #~ msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes" #~ msgid "%s: Error - expected destination after \"-b\" option." #~ msgstr "%s: error - s'esperava un destí després de l'opció «-b»." #~ msgid "3.5\" Disk - 2 1/8 x 2 3/4\"" #~ msgstr "Disc de 3.5 - 2 1/8 x 2 3/4\"" #~ msgid "720dpi" #~ msgstr "720ppp" #~ msgid "Address - 1 1/8 x 3 1/2\"" #~ msgstr "Adreça - 1 1/8 x 3 1/2\"" #~ msgid "Bad printer URI." #~ msgstr "L'URI de la impressora és incorrecte." #~ msgid "Enter old password:" #~ msgstr "Introduïu la contrasenya antiga:" #~ msgid "Enter password again:" #~ msgstr "Introduïu la contrasenya un altre cop:" #~ msgid "Enter password:" #~ msgstr "Introduïu la contrasenya:" #~ msgid "Envelope #10 " #~ msgstr "Sobre #10" #~ msgid "Envelope PRC1 " #~ msgstr "Sobre PRC1" #~ msgid "FanFold German" #~ msgstr "Paper continu alemany" #~ msgid "FanFold Legal German" #~ msgstr "Paper continu legal alemany" #~ msgid "Fanfold US" #~ msgstr "Paper continu americà" #~ msgid "File Folder " #~ msgstr "Carpeta d'arxivador " #~ msgid "File Folder - 9/16 x 3 7/16\"" #~ msgstr "Carpeta d'arxivador: 9/16 x 3 7/16\"" #~ msgid "" #~ "File device URIs have been disabled. To enable, see the FileDevice " #~ "directive in \"%s/cupsd.conf\"." #~ msgstr "" #~ "S'han deshabilitat els URIs dels dispositius de fitxers. Per habilitar-" #~ "los, vegeu la directriu FileDevice a «%s/cupsd.conf»." #~ msgid "Hanging Folder - 9/16 x 2\"" #~ msgstr "Carpeta per penjar: 9/16 x 2\"" #~ msgid "Internet Postage 2-Part - 2 1/4 x 7 1/2\"" #~ msgstr "Franqueig per Internet en 2 parts - 2 1/4 x 7 1/2\"" #~ msgid "Internet Postage 3-Part - 2 1/4 x 7\"" #~ msgstr "Franqueig per Internet en 3 parts - 2 1/4 x 7\"" #~ msgid "Large Address - 1 4/10 x 3 1/2\"" #~ msgstr "Adreça gran - 1 4/10 x 3 1/2\"" #~ msgid "New Stylus Color Series" #~ msgstr "Sèrie New Stylus Color" #~ msgid "New Stylus Photo Series" #~ msgstr "Sèrie New Stylus Photo" #~ msgid "Output for printer %s is sent to %s" #~ msgstr "La sortida de la impressora %s s'envia a %s" #~ msgid "Output for printer %s is sent to remote printer %s on %s" #~ msgstr "" #~ "La sortida de la impressora %s s'envia a la impressora remota %s a %s" #~ msgid "Output for printer %s/%s is sent to %s" #~ msgstr "La sortida per la impressora %s/%s s'envia a la impressora %s" #~ msgid "Output for printer %s/%s is sent to remote printer %s on %s" #~ msgstr "" #~ "La sortida per la impressora %s/%s s'envia a la impressora remota %s a %s" #~ msgid "Postcard Double " #~ msgstr "Postal doble" #~ msgid "Print file accepted - job ID %d." #~ msgstr "S'ha acceptat el fitxer d'impressió - ID de la feina %d." #~ msgid "Print file accepted - job ID unknown." #~ msgstr "" #~ "S'ha acceptat el fitxer d'impressió - l'ID de la feina és desconegut." #~ msgid "Print file was not accepted." #~ msgstr "No s'ha acceptat el fitxer d'impressió." #~ msgid "Printer busy, will retry in 10 seconds." #~ msgstr "" #~ "La impressora està ocupada. Es tornarà a intentar d'aquí a 10 segons." #~ msgid "Printer did not respond." #~ msgstr "La impressora no respon." #~ msgid "Printer is busy, will retry in 5 seconds." #~ msgstr "" #~ "La impressora està ocupada. Es tornarà a intentar d'aquí a 5 segons." #~ msgid "Printer is now connected." #~ msgstr "La impressora està connectada." #~ msgid "Printer not connected, will retry in 30 seconds." #~ msgstr "" #~ "La impressora està desconnectada. Es tornarà a intentar d'aquí a 30 " #~ "segons." #~ msgid "Printing page %d, %d%% complete." #~ msgstr "S'està imprimint la pàgina %d. S'ha completat el %d%%." #~ msgid "Purge Jobs" #~ msgstr "Purga les feines" #~ msgid "" #~ "Rank Owner Pri Job Files Total Size" #~ msgstr "" #~ "Rang Propietari Pri Feina Fitxers " #~ "Mida total" #~ msgid "Ready to print." #~ msgstr "Preparada per imprimir." #~ msgid "Return Address - 3/4 x 2\"" #~ msgstr "Remitent - 3/4 x 2\"" #~ msgid "Shipping Address - 2 5/16 x 4\"" #~ msgstr "Adreça de lliurament - 2 5/16 x 4\"" #~ msgid "Stylus Color Series" #~ msgstr "Sèrie Stylus Color" #~ msgid "Stylus Photo Series" #~ msgstr "Sèrie Stylus Photo" #~ msgid "The output bin is almost full." #~ msgstr "La safata de sortida és gairebé plena." #~ msgid "The output bin is full." #~ msgstr "La safata de sortida és plena." #~ msgid "The output bin is missing." #~ msgstr "Falta la safata de sortida." #~ msgid "The paper tray is almost empty." #~ msgstr "La safata de paper és gairebé buida." #~ msgid "The paper tray is empty." #~ msgstr "La safata de paper és buida." #~ msgid "The paper tray is missing." #~ msgstr "Falta la safata de paper." #~ msgid "The paper tray needs to be filled." #~ msgstr "S'ha d'omplir la safata de paper." #~ msgid "The printer URI is incorrect or no longer exists." #~ msgstr "L'URI de la impressora no és correcte o ja no existeix." #~ msgid "The printer does not support IPP/%d.%d, trying IPP/%s." #~ msgstr "" #~ "La impressora no és compatible amb el IPP/%d.%d, s'està intentant el IPP/" #~ "%s." #~ msgid "The printer is out of toner." #~ msgstr "S'ha acabat el tòner de la impressora" #~ msgid "The printer is running low on ink." #~ msgstr "S'està acabant la tinta de la impressora." #~ msgid "The printer is running low on toner." #~ msgstr "S'està acabant el tòner de la impressora." #~ msgid "There is a paper jam." #~ msgstr "S'ha encallat el paper." #~ msgid "Unable to copy interface script - %s" #~ msgstr "No es pot copiar l'script de la interfície - %s" #~ msgid "Unable to create compressed print file" #~ msgstr "No es pot crear el fitxer d'impressió comprimit" #~ msgid "Unable to create temporary file:" #~ msgstr "No es pot crear el fitxer temporal:" #~ msgid "Unable to generate compressed print file" #~ msgstr "No es pot generar el fitxer d'impressió comprimit" #~ msgid "Unable to get printer status:" #~ msgstr "No es pot obtenir l'estat de la impressora:" #~ msgid "Unable to open PPD file:" #~ msgstr "No es pot obrir el fitxer PPD:" #~ msgid "Unable to open compressed print file" #~ msgstr "No es pot obrir el fitxer d'impressió comprimit" #~ msgid "Unable to read print data" #~ msgstr "No es poden llegir les dades d'impressió" #~ msgid "Unable to resolve printer URI." #~ msgstr "No es pot resoldre l'URI de la impressora." #~ msgid "Usage: %s job-id user title copies options file" #~ msgstr "Sintaxi: %s id-tasca usuari títol còpies opcions fitxer" #~ msgid "Usage: convert [ options ]" #~ msgstr "Sintaxi: convert [ opcions ]" #~ msgid "Usage: cupsfilter [ options ] filename" #~ msgstr "Sintaxi: cupsfilter [ opcions ] nomfitxer" #~ msgid "Usage: lppasswd [-g groupname]" #~ msgstr "Sintaxi: lppasswd [-g nomgrup]" #~ msgid "" #~ "Usage: lppasswd [-g groupname] [username]\n" #~ " lppasswd [-g groupname] -a [username]\n" #~ " lppasswd [-g groupname] -x [username]" #~ msgstr "" #~ "Sintaxi: lppasswd [-g nomgrup] [nomusuari]\n" #~ " lppasswd [-g nomgrup] -a [nomusuari]\n" #~ " lppasswd [-g nomgrup] -x [nomusuari]" #~ msgid "" #~ "Your password must be at least 6 characters long, cannot contain your " #~ "username, and must contain at least one letter and number." #~ msgstr "" #~ "La contrasenya ha de tenir com a mínim 6 caràcters, no pot contenir el " #~ "nom d'usuari, i ha de tenir com a mínim una lletra i un número." #~ msgid "compression" #~ msgstr "Compression" #~ msgid "compression-accepted" #~ msgstr "Compression Accepted" #~ msgid "compression.compress" #~ msgstr "Compress" #~ msgid "compression.deflate" #~ msgstr "Deflate" #~ msgid "compression.gzip" #~ msgstr "Gzip" #~ msgid "compression.none" #~ msgstr "None" #~ msgid "convert: Use the -f option to specify a file to convert." #~ msgstr "" #~ "convert: feu servir l'opció -f per especificar el fitxer que voleu " #~ "convertir." #~ msgid "cupsd: launchd(8) support not compiled in, running in normal mode." #~ msgstr "" #~ "cupsd: no s'ha compilat amb compatibilitat per launchd(8). S'executa en " #~ "mode normal." #~ msgid "destination-accesses" #~ msgstr "Destination Accesses" #~ msgid "destination-statuses" #~ msgstr "Destination Statuses" #~ msgid "destination-uris" #~ msgstr "Destination Uris" #~ msgid "document-access" #~ msgstr "Document Access" #~ msgid "document-data-get-interval" #~ msgstr "Document Data Get Interval" #~ msgid "document-data-wait" #~ msgstr "Document Data Wait" #~ msgid "document-format-accepted" #~ msgstr "Document Format Accepted" #~ msgid "document-message" #~ msgstr "Document Message" #~ msgid "document-metadata" #~ msgstr "Document Metadata" #~ msgid "document-name" #~ msgstr "Document Name" #~ msgid "document-number" #~ msgstr "Document Number" #~ msgid "document-password" #~ msgstr "Document Password" #~ msgid "document-preprocessed" #~ msgstr "Document Preprocessed" #~ msgid "fetch-status-message" #~ msgstr "Fetch Status Message" #~ msgid "identify-actions" #~ msgstr "Identify Actions" #~ msgid "identify-actions.display" #~ msgstr "Display" #~ msgid "identify-actions.flash" #~ msgstr "Flash" #~ msgid "identify-actions.sound" #~ msgstr "Sound" #~ msgid "identify-actions.speak" #~ msgstr "Speak" #~ msgid "ipp-attribute-fidelity" #~ msgstr "Attribute Fidelity" #~ msgid "ipptool: \"-i\" and \"-n\" are incompatible with -X\"." #~ msgstr "ipptool: «-i» i «-n» no són compatibles amb «-X»." #~ msgid "ipptool: \"-i\" is incompatible with \"-X\"." #~ msgstr "ipptool: «-i» no és compatible amb «-X»." #~ msgid "ipptool: \"-n\" is incompatible with \"-X\"." #~ msgstr "ipptool: «-n» no és compatible amb «-X»." #~ msgid "ipptool: Bad version %s for \"-V\"." #~ msgstr "ipptool: la versió %s de «-V» no és correcta." #~ msgid "ipptool: Missing timeout for \"-T\"." #~ msgstr "ipptool: falta el temps màxim d'espera a «-T»." #~ msgid "ipptool: Missing version for \"-V\"." #~ msgstr "ipptool: falta la versió a «-V»." #~ msgid "job-authorization-uri" #~ msgstr "Job Authorization URI" #~ msgid "job-destination-spooling-supported.automatic" #~ msgstr "Automatic" #~ msgid "job-destination-spooling-supported.spool" #~ msgstr "Spool" #~ msgid "job-destination-spooling-supported.stream" #~ msgstr "Stream" #~ msgid "job-impressions-col" #~ msgstr "Job Impressions" #~ msgid "job-impressions-estimated" #~ msgstr "Job Impressions Estimated" #~ msgid "job-media-sheets-col" #~ msgstr "Job Media Sheets" #~ msgid "job-pages-per-set" #~ msgstr "Job Pages Per Set" #~ msgid "job-password" #~ msgstr "Job Password" #~ msgid "job-password-repertoire-configured" #~ msgstr "Job Password Repertoire Configured" #~ msgid "job-password-repertoire-supported.iana_us-ascii_any" #~ msgstr "Iana Us Ascii Any" #~ msgid "job-password-repertoire-supported.iana_us-ascii_complex" #~ msgstr "Iana Us Ascii Complex" #~ msgid "job-password-repertoire-supported.iana_us-ascii_digits" #~ msgstr "Iana Us Ascii Digits" #~ msgid "job-password-repertoire-supported.iana_us-ascii_letters" #~ msgstr "Iana Us Ascii Letters" #~ msgid "job-password-repertoire-supported.iana_utf-8_any" #~ msgstr "Iana Utf 8 Any" #~ msgid "job-password-repertoire-supported.iana_utf-8_digits" #~ msgstr "Iana Utf 8 Digits" #~ msgid "job-password-repertoire-supported.iana_utf-8_letters" #~ msgstr "Iana Utf 8 Letters" #~ msgid "job-settable-attributes-supported.job-name" #~ msgstr "Job Name" #~ msgid "job-settable-attributes-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.arithmetic" #~ msgstr "Arithmetic" #~ msgid "jpeg-features-supported.cmyk" #~ msgstr "Cmyk" #~ msgid "jpeg-features-supported.deep" #~ msgstr "Deep" #~ msgid "jpeg-features-supported.hierarchical" #~ msgstr "Hierarchical" #~ msgid "jpeg-features-supported.icc" #~ msgstr "Icc" #~ msgid "jpeg-features-supported.lossless" #~ msgstr "Lossless" #~ msgid "jpeg-features-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.progressive" #~ msgstr "Progressive" #~ msgid "lpadmin: Expected PPD after \"-P\" option." #~ msgstr "lpadmin: s'esperava un PPD després de l'opció «-P»." #~ msgid "lpadmin: Expected interface after \"-i\" option." #~ msgstr "lpadmin: s'esperava una interfície després de l'opció «-i»." #~ msgid "lpinfo: Unknown argument \"%s\"." #~ msgstr "lpinfo: l'argument «%s» és desconegut." #~ msgid "lpinfo: Unknown option \"%c\"." #~ msgstr "lpinfo: l'opció «%c» és desconeguda." #~ msgid "lpinfo: Unknown option \"%s\"." #~ msgstr "lpinfo: l'opció «%s» és desconeguda." #~ msgid "lpmove: Unknown option \"%c\"." #~ msgstr "lpmove: l'opció «%c» és desconeguda." #~ msgid "lppasswd: Only root can add or delete passwords." #~ msgstr "" #~ "lppasswd: només l'usuari primari (root) pot afegir o esborrar " #~ "contrasenyes." #~ msgid "lppasswd: Password file busy." #~ msgstr "lppaswd: el fitxer de contrasenyes està ocupat." #~ msgid "lppasswd: Password file not updated." #~ msgstr "lppaswd: el fitxer de contrasenyes no està actualitzat." #~ msgid "lppasswd: Sorry, password doesn't match." #~ msgstr "lppaswwd: la contrasenya no coincideix." #~ msgid "lppasswd: Sorry, password rejected." #~ msgstr "lppaswwd: s'ha refusat la contrasenya." #~ msgid "lppasswd: Sorry, passwords don't match." #~ msgstr "lppaswwd: les contrasenyes no coincideixen." #~ msgid "lppasswd: Unable to copy password string: %s" #~ msgstr "lppasswd: no s'ha pogut copiar la cadena de contrasenya: %s" #~ msgid "lppasswd: Unable to open password file: %s" #~ msgstr "lppasswd: no s'ha pogut obrir el fitxer de contrasenyes: %s" #~ msgid "lppasswd: Unable to write to password file: %s" #~ msgstr "lppasswd: no s'ha pogut escriure al fitxer de contrasenyes: %s" #~ msgid "lppasswd: failed to backup old password file: %s" #~ msgstr "" #~ "lppasswd: no s'ha pogut fer la còpia de seguretat del fitxer de " #~ "contrasenyes antic: %s" #~ msgid "lppasswd: failed to rename password file: %s" #~ msgstr "" #~ "lppasswd: no s'ha pogut canviar el nom del fitxer de contrasenyes: %s" #~ msgid "lppasswd: user \"%s\" and group \"%s\" do not exist." #~ msgstr "lppaswd: l'usuari «%s» i el grup «%s» no existeixen." #~ msgid "material-type.pla-dissolvable" #~ msgstr "Pla Dissolvable" #~ msgid "media.om_large-photo_200x300mm" #~ msgstr "200 x 300mm" #~ msgid "notify-subscribed-event" #~ msgstr "Notify Event" #~ msgid "operations-supported.10" #~ msgstr "Get-Jobs" #~ msgid "operations-supported.11" #~ msgstr "Get-Printer-Attributes" #~ msgid "operations-supported.12" #~ msgstr "Hold-Job" #~ msgid "operations-supported.13" #~ msgstr "Release-Job" #~ msgid "operations-supported.14" #~ msgstr "Restart-Job" #~ msgid "operations-supported.16" #~ msgstr "Pause-Printer" #~ msgid "operations-supported.17" #~ msgstr "Resume-Printer" #~ msgid "operations-supported.18" #~ msgstr "Purge-Jobs" #~ msgid "operations-supported.19" #~ msgstr "Set-Printer-Attributes" #~ msgid "operations-supported.2" #~ msgstr "Print-Job" #~ msgid "operations-supported.20" #~ msgstr "Set-Job-Attributes" #~ msgid "operations-supported.21" #~ msgstr "Get-Printer-Supported-Values" #~ msgid "operations-supported.22" #~ msgstr "Create-Printer-Subscriptions" #~ msgid "operations-supported.23" #~ msgstr "Create-Job-Subscriptions" #~ msgid "operations-supported.24" #~ msgstr "Get-Subscription-Attributes" #~ msgid "operations-supported.25" #~ msgstr "Get-Subscriptions" #~ msgid "operations-supported.26" #~ msgstr "Renew-Subscription" #~ msgid "operations-supported.27" #~ msgstr "Cancel-Subscription" #~ msgid "operations-supported.28" #~ msgstr "Get-Notifications" #~ msgid "operations-supported.3" #~ msgstr "Print-URI" #~ msgid "operations-supported.34" #~ msgstr "Enable-Printer" #~ msgid "operations-supported.35" #~ msgstr "Disable-Printer" #~ msgid "operations-supported.36" #~ msgstr "Pause-Printer-After-Current-Job" #~ msgid "operations-supported.37" #~ msgstr "Hold-New-Jobs" #~ msgid "operations-supported.38" #~ msgstr "Release-Held-New-Jobs" #~ msgid "operations-supported.39" #~ msgstr "Deactivate-Printer" #~ msgid "operations-supported.4" #~ msgstr "Validate-Job" #~ msgid "operations-supported.40" #~ msgstr "Activate-Printer" #~ msgid "operations-supported.41" #~ msgstr "Restart-Printer" #~ msgid "operations-supported.42" #~ msgstr "Shutdown-Printer" #~ msgid "operations-supported.43" #~ msgstr "Startup-Printer" #~ msgid "operations-supported.44" #~ msgstr "Reprocess-Job" #~ msgid "operations-supported.45" #~ msgstr "Cancel-Current-Job" #~ msgid "operations-supported.46" #~ msgstr "Suspend-Current-Job" #~ msgid "operations-supported.47" #~ msgstr "Resume-Job" #~ msgid "operations-supported.48" #~ msgstr "Promote-Job" #~ msgid "operations-supported.49" #~ msgstr "Schedule-Job-After" #~ msgid "operations-supported.5" #~ msgstr "Create-Job" #~ msgid "operations-supported.51" #~ msgstr "Cancel-Document" #~ msgid "operations-supported.52" #~ msgstr "Get-Document-Attributes" #~ msgid "operations-supported.53" #~ msgstr "Get-Documents" #~ msgid "operations-supported.54" #~ msgstr "Delete-Document" #~ msgid "operations-supported.55" #~ msgstr "Set-Document-Attributes" #~ msgid "operations-supported.56" #~ msgstr "Cancel-Jobs" #~ msgid "operations-supported.57" #~ msgstr "Cancel-My-Jobs" #~ msgid "operations-supported.58" #~ msgstr "Resubmit-Job" #~ msgid "operations-supported.59" #~ msgstr "Close-Job" #~ msgid "operations-supported.6" #~ msgstr "Send-Document" #~ msgid "operations-supported.60" #~ msgstr "Identify-Printer" #~ msgid "operations-supported.61" #~ msgstr "Validate-Document" #~ msgid "operations-supported.62" #~ msgstr "Add-Document-Images" #~ msgid "operations-supported.63" #~ msgstr "Acknowledge-Document" #~ msgid "operations-supported.64" #~ msgstr "Acknowledge-Identify-Printer" #~ msgid "operations-supported.65" #~ msgstr "Acknowledge-Job" #~ msgid "operations-supported.66" #~ msgstr "Fetch-Document" #~ msgid "operations-supported.67" #~ msgstr "Fetch-Job" #~ msgid "operations-supported.68" #~ msgstr "Get-Output-Device-Attributes" #~ msgid "operations-supported.69" #~ msgstr "Update-Active-Jobs" #~ msgid "operations-supported.7" #~ msgstr "Send-URI" #~ msgid "operations-supported.70" #~ msgstr "Deregister-Output-Device" #~ msgid "operations-supported.71" #~ msgstr "Update-Document-Status" #~ msgid "operations-supported.72" #~ msgstr "Update-Job-Status" #~ msgid "operations-supported.73" #~ msgstr "Update-Output-Device-Attributes" #~ msgid "operations-supported.74" #~ msgstr "Get-Next-Document-Data" #~ msgid "operations-supported.8" #~ msgstr "Cancel-Job" #~ msgid "operations-supported.9" #~ msgstr "Get-Job-Attributes" #~ msgid "output-device" #~ msgstr "Output Device" #~ msgid "output-device-job-states" #~ msgstr "Output Device Job States" #~ msgid "output-device-uuid" #~ msgstr "Output Device Uuid" #~ msgid "pdf-features-supported.prc" #~ msgstr "Prc" #~ msgid "pdf-features-supported.u3d" #~ msgstr "U3d" #~ msgid "pdf-versions-supported.adobe-1.3" #~ msgstr "Adobe 1.3" #~ msgid "pdf-versions-supported.adobe-1.4" #~ msgstr "Adobe 1.4" #~ msgid "pdf-versions-supported.adobe-1.5" #~ msgstr "Adobe 1.5" #~ msgid "pdf-versions-supported.adobe-1.6" #~ msgstr "Adobe 1.6" #~ msgid "pdf-versions-supported.iso-15930-1_2001" #~ msgstr "ISO 15930-1:2001" #~ msgid "pdf-versions-supported.iso-15930-3_2002" #~ msgstr "ISO 15930-3:2002" #~ msgid "pdf-versions-supported.iso-15930-4_2003" #~ msgstr "ISO 15930-4:2003" #~ msgid "pdf-versions-supported.iso-15930-6_2003" #~ msgstr "ISO 15930-6:2003" #~ msgid "pdf-versions-supported.iso-15930-7_2010" #~ msgstr "ISO 15930-7:2010" #~ msgid "pdf-versions-supported.iso-15930-8_2010" #~ msgstr "ISO 15930-8:2010" #~ msgid "pdf-versions-supported.iso-16612-2_2010" #~ msgstr "ISO 16612-2:2010" #~ msgid "pdf-versions-supported.iso-19005-1_2005" #~ msgstr "ISO 19005-1:2005" #~ msgid "pdf-versions-supported.iso-19005-2_2011" #~ msgstr "ISO 19005-2:2011" #~ msgid "pdf-versions-supported.iso-19005-3_2012" #~ msgstr "ISO 19005-3:2012" #~ msgid "pdf-versions-supported.iso-32000-1_2008" #~ msgstr "ISO 32000-1:2008" #~ msgid "pdf-versions-supported.none" #~ msgstr "None" #~ msgid "pdf-versions-supported.pwg-5102.3" #~ msgstr "PWG 5102.3" #~ msgid "preferred-attributes" #~ msgstr "Preferred Attributes" #~ msgid "printer-mandatory-job-attributes" #~ msgstr "Printer Mandatory Job Attributes" #~ msgid "profile-uri-actual" #~ msgstr "Actual Profile URI" #~ msgid "requested-attributes.all" #~ msgstr "All" #~ msgid "requested-attributes.document-description" #~ msgstr "Document Description" #~ msgid "requested-attributes.document-template" #~ msgstr "Document Template" #~ msgid "requested-attributes.job-actuals" #~ msgstr "Job Actuals" #~ msgid "requested-attributes.job-description" #~ msgstr "Job Description" #~ msgid "requested-attributes.job-template" #~ msgstr "Job Template" #~ msgid "requested-attributes.printer-description" #~ msgstr "Printer Description" #~ msgid "requested-attributes.subscription-description" #~ msgstr "Subscription Description" #~ msgid "requested-attributes.subscription-template" #~ msgstr "Subscription Template" #~ msgid "requesting-user-name" #~ msgstr "Requesting User Name" #~ msgid "requesting-user-uri" #~ msgstr "Requesting User URI" #~ msgid "x-image-position" #~ msgstr "X Image Position" #~ msgid "x-image-position.center" #~ msgstr "Center" #~ msgid "x-image-position.left" #~ msgstr "Left" #~ msgid "x-image-position.none" #~ msgstr "None" #~ msgid "x-image-position.right" #~ msgstr "Right" #~ msgid "x-image-shift" #~ msgstr "X Image Shift" #~ msgid "x-side1-image-shift" #~ msgstr "X Front Side Image Shift" #~ msgid "x-side2-image-shift" #~ msgstr "X Back Side Image Shift" #~ msgid "y-image-position" #~ msgstr "Y Image Position" #~ msgid "y-image-position.bottom" #~ msgstr "Bottom" #~ msgid "y-image-position.center" #~ msgstr "Center" #~ msgid "y-image-position.none" #~ msgstr "None" #~ msgid "y-image-position.top" #~ msgstr "Top" #~ msgid "y-image-shift" #~ msgstr "Y Image Shift" #~ msgid "y-side1-image-shift" #~ msgstr "Y Front Side Image Shift" #~ msgid "y-side2-image-shift" #~ msgstr "Y Back Side Image Shift" cups-2.2.7/locale/cups_cs.po000664 000765 000024 00001014066 13255074424 016421 0ustar00msweetstaff000000 000000 # # "$Id$" # # Czech message catalog for CUPS. # # Copyright 2007-2012 by Apple Inc. # Copyright 2005-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # # Notes for Translators: # # The "checkpo" program located in the "locale" source directory can be used # to verify that your translations do not introduce formatting errors or other # problems. Run with: # # cd locale # ./checkpo cups_LL.po # # where "LL" is your locale. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: CUPS 1.6\n" "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n" "POT-Creation-Date: 2018-03-19 18:36-0400\n" "PO-Revision-Date: 2012-09-14 10:26+0100\n" "Last-Translator: Jan Bartos \n" "Language-Team: Czech\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgid "\t\t(all)" msgstr "" msgid "\t\t(none)" msgstr "" #, c-format msgid "\t%d entries" msgstr "" #, c-format msgid "\t%s" msgstr "" msgid "\tAfter fault: continue" msgstr "" #, c-format msgid "\tAlerts: %s" msgstr "" msgid "\tBanner required" msgstr "" msgid "\tCharset sets:" msgstr "" msgid "\tConnection: direct" msgstr "" msgid "\tConnection: remote" msgstr "" msgid "\tContent types: any" msgstr "" msgid "\tDefault page size:" msgstr "" msgid "\tDefault pitch:" msgstr "" msgid "\tDefault port settings:" msgstr "" #, c-format msgid "\tDescription: %s" msgstr "" msgid "\tForm mounted:" msgstr "" msgid "\tForms allowed:" msgstr "" #, c-format msgid "\tInterface: %s.ppd" msgstr "" #, c-format msgid "\tInterface: %s/ppd/%s.ppd" msgstr "" #, c-format msgid "\tLocation: %s" msgstr "" msgid "\tOn fault: no alert" msgstr "" msgid "\tPrinter types: unknown" msgstr "" #, c-format msgid "\tStatus: %s" msgstr "" msgid "\tUsers allowed:" msgstr "" msgid "\tUsers denied:" msgstr "" msgid "\tdaemon present" msgstr "" msgid "\tno entries" msgstr "" #, c-format msgid "\tprinter is on device '%s' speed -1" msgstr "" msgid "\tprinting is disabled" msgstr "" msgid "\tprinting is enabled" msgstr "" #, c-format msgid "\tqueued for %s" msgstr "" msgid "\tqueuing is disabled" msgstr "" msgid "\tqueuing is enabled" msgstr "" msgid "\treason unknown" msgstr "" msgid "" "\n" " DETAILED CONFORMANCE TEST RESULTS" msgstr "" msgid " Ignore specific warnings." msgstr "" msgid " Issue warnings instead of errors." msgstr "" msgid " REF: Page 15, section 3.1." msgstr "" msgid " REF: Page 15, section 3.2." msgstr "" msgid " REF: Page 19, section 3.3." msgstr "" msgid " REF: Page 20, section 3.4." msgstr "" msgid " REF: Page 27, section 3.5." msgstr "" msgid " REF: Page 42, section 5.2." msgstr "" msgid " REF: Pages 16-17, section 3.2." msgstr "" msgid " REF: Pages 42-45, section 5.2." msgstr "" msgid " REF: Pages 45-46, section 5.2." msgstr "" msgid " REF: Pages 48-49, section 5.2." msgstr "" msgid " REF: Pages 52-54, section 5.2." msgstr "" #, c-format msgid " %-39.39s %.0f bytes" msgstr "" #, c-format msgid " PASS Default%s" msgstr "" msgid " PASS DefaultImageableArea" msgstr "" msgid " PASS DefaultPaperDimension" msgstr "" msgid " PASS FileVersion" msgstr "" msgid " PASS FormatVersion" msgstr "" msgid " PASS LanguageEncoding" msgstr "" msgid " PASS LanguageVersion" msgstr "" msgid " PASS Manufacturer" msgstr "" msgid " PASS ModelName" msgstr "" msgid " PASS NickName" msgstr "" msgid " PASS PCFileName" msgstr "" msgid " PASS PSVersion" msgstr "" msgid " PASS PageRegion" msgstr "" msgid " PASS PageSize" msgstr "" msgid " PASS Product" msgstr "" msgid " PASS ShortNickName" msgstr "" #, c-format msgid " WARN %s has no corresponding options." msgstr "" #, c-format msgid "" " WARN %s shares a common prefix with %s\n" " REF: Page 15, section 3.2." msgstr "" #, c-format msgid "" " WARN Duplex option keyword %s may not work as expected and should " "be named Duplex.\n" " REF: Page 122, section 5.17" msgstr "" msgid " WARN File contains a mix of CR, LF, and CR LF line endings." msgstr "" msgid "" " WARN LanguageEncoding required by PPD 4.3 spec.\n" " REF: Pages 56-57, section 5.3." msgstr "" #, c-format msgid " WARN Line %d only contains whitespace." msgstr "" msgid "" " WARN Manufacturer required by PPD 4.3 spec.\n" " REF: Pages 58-59, section 5.3." msgstr "" msgid "" " WARN Non-Windows PPD files should use lines ending with only LF, " "not CR LF." msgstr "" #, c-format msgid "" " WARN Obsolete PPD version %.1f.\n" " REF: Page 42, section 5.2." msgstr "" msgid "" " WARN PCFileName longer than 8.3 in violation of PPD spec.\n" " REF: Pages 61-62, section 5.3." msgstr "" msgid "" " WARN PCFileName should contain a unique filename.\n" " REF: Pages 61-62, section 5.3." msgstr "" msgid "" " WARN Protocols contains PJL but JCL attributes are not set.\n" " REF: Pages 78-79, section 5.7." msgstr "" msgid "" " WARN Protocols contains both PJL and BCP; expected TBCP.\n" " REF: Pages 78-79, section 5.7." msgstr "" msgid "" " WARN ShortNickName required by PPD 4.3 spec.\n" " REF: Pages 64-65, section 5.3." msgstr "" msgid " cupsaddsmb [options] -a" msgstr "" msgid " cupstestdsc [options] -" msgstr "" msgid " program | cupstestppd [options] -" msgstr "" #, c-format msgid "" " %s \"%s %s\" conflicts with \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." msgstr "" #, c-format msgid " %s %s %s does not exist." msgstr "" #, c-format msgid " %s %s file \"%s\" has the wrong capitalization." msgstr "" #, c-format msgid "" " %s Bad %s choice %s.\n" " REF: Page 122, section 5.17" msgstr "" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s." msgstr "" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s." msgstr "" #, c-format msgid " %s Bad cupsFilter value \"%s\"." msgstr "" #, c-format msgid " %s Bad cupsFilter2 value \"%s\"." msgstr "" #, c-format msgid " %s Bad cupsICCProfile %s." msgstr "" #, c-format msgid " %s Bad cupsPreFilter value \"%s\"." msgstr "" #, c-format msgid " %s Bad cupsUIConstraints %s: \"%s\"" msgstr "" #, c-format msgid " %s Bad language \"%s\"." msgstr "" #, c-format msgid " %s Bad permissions on %s file \"%s\"." msgstr "" #, c-format msgid " %s Bad spelling of %s - should be %s." msgstr "" #, c-format msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID." msgstr "" #, c-format msgid " %s Default choices conflicting." msgstr "" #, c-format msgid " %s Empty cupsUIConstraints %s" msgstr "" #, c-format msgid " %s Missing \"%s\" translation string for option %s, choice %s." msgstr "" #, c-format msgid " %s Missing \"%s\" translation string for option %s." msgstr "" #, c-format msgid " %s Missing %s file \"%s\"." msgstr "" #, c-format msgid "" " %s Missing REQUIRED PageRegion option.\n" " REF: Page 100, section 5.14." msgstr "" #, c-format msgid "" " %s Missing REQUIRED PageSize option.\n" " REF: Page 99, section 5.14." msgstr "" #, c-format msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" #, c-format msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" msgstr "" #, c-format msgid " %s Missing cupsUIResolver %s" msgstr "" #, c-format msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" #, c-format msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\"" msgstr "" #, c-format msgid " %s No base translation \"%s\" is included in file." msgstr "" #, c-format msgid "" " %s REQUIRED %s does not define choice None.\n" " REF: Page 122, section 5.17" msgstr "" #, c-format msgid " %s Size \"%s\" defined for %s but not for %s." msgstr "" #, c-format msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)." msgstr "" #, c-format msgid " %s Size \"%s\" should be \"%s\"." msgstr "" #, c-format msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"." msgstr "" #, c-format msgid " %s cupsICCProfile %s hash value collides with %s." msgstr "" #, c-format msgid " %s cupsUIResolver %s causes a loop." msgstr "" #, c-format msgid "" " %s cupsUIResolver %s does not list at least two different options." msgstr "" #, c-format msgid "" " **FAIL** %s must be 1284DeviceID\n" " REF: Page 72, section 5.5" msgstr "" #, c-format msgid "" " **FAIL** Bad Default%s %s\n" " REF: Page 40, section 4.5." msgstr "" #, c-format msgid "" " **FAIL** Bad DefaultImageableArea %s\n" " REF: Page 102, section 5.15." msgstr "" #, c-format msgid "" " **FAIL** Bad DefaultPaperDimension %s\n" " REF: Page 103, section 5.15." msgstr "" #, c-format msgid "" " **FAIL** Bad FileVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" #, c-format msgid "" " **FAIL** Bad FormatVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" msgid "" " **FAIL** Bad JobPatchFile attribute in file\n" " REF: Page 24, section 3.4." msgstr "" #, c-format msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1." msgstr "" #, c-format msgid " **FAIL** Bad LanguageVersion %s - must be English." msgstr "" #, c-format msgid "" " **FAIL** Bad Manufacturer (should be \"%s\")\n" " REF: Page 211, table D.1." msgstr "" #, c-format msgid "" " **FAIL** Bad ModelName - \"%c\" not allowed in string.\n" " REF: Pages 59-60, section 5.3." msgstr "" msgid "" " **FAIL** Bad PSVersion - not \"(string) int\".\n" " REF: Pages 62-64, section 5.3." msgstr "" msgid "" " **FAIL** Bad Product - not \"(string)\".\n" " REF: Page 62, section 5.3." msgstr "" msgid "" " **FAIL** Bad ShortNickName - longer than 31 chars.\n" " REF: Pages 64-65, section 5.3." msgstr "" #, c-format msgid "" " **FAIL** Bad option %s choice %s\n" " REF: Page 84, section 5.9" msgstr "" #, c-format msgid " **FAIL** Default option code cannot be interpreted: %s" msgstr "" #, c-format msgid "" " **FAIL** Default translation string for option %s choice %s contains " "8-bit characters." msgstr "" #, c-format msgid "" " **FAIL** Default translation string for option %s contains 8-bit " "characters." msgstr "" #, c-format msgid " **FAIL** Group names %s and %s differ only by case." msgstr "" #, c-format msgid " **FAIL** Multiple occurrences of option %s choice name %s." msgstr "" #, c-format msgid " **FAIL** Option %s choice names %s and %s differ only by case." msgstr "" #, c-format msgid " **FAIL** Option names %s and %s differ only by case." msgstr "" #, c-format msgid "" " **FAIL** REQUIRED Default%s\n" " REF: Page 40, section 4.5." msgstr "" msgid "" " **FAIL** REQUIRED DefaultImageableArea\n" " REF: Page 102, section 5.15." msgstr "" msgid "" " **FAIL** REQUIRED DefaultPaperDimension\n" " REF: Page 103, section 5.15." msgstr "" msgid "" " **FAIL** REQUIRED FileVersion\n" " REF: Page 56, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED FormatVersion\n" " REF: Page 56, section 5.3." msgstr "" #, c-format msgid "" " **FAIL** REQUIRED ImageableArea for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 102, section 5.15." msgstr "" msgid "" " **FAIL** REQUIRED LanguageEncoding\n" " REF: Pages 56-57, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED LanguageVersion\n" " REF: Pages 57-58, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED Manufacturer\n" " REF: Pages 58-59, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED ModelName\n" " REF: Pages 59-60, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED NickName\n" " REF: Page 60, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED PCFileName\n" " REF: Pages 61-62, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED PSVersion\n" " REF: Pages 62-64, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED PageRegion\n" " REF: Page 100, section 5.14." msgstr "" msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Page 41, section 5.\n" " REF: Page 99, section 5.14." msgstr "" msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Pages 99-100, section 5.14." msgstr "" #, c-format msgid "" " **FAIL** REQUIRED PaperDimension for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 103, section 5.15." msgstr "" msgid "" " **FAIL** REQUIRED Product\n" " REF: Page 62, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED ShortNickName\n" " REF: Page 64-65, section 5.3." msgstr "" #, c-format msgid " **FAIL** Unable to open PPD file - %s on line %d." msgstr "" #, c-format msgid " %d ERRORS FOUND" msgstr "" msgid " -h Show program usage" msgstr "" #, c-format msgid "" " Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:" msgstr "" #, c-format msgid "" " Bad %%%%Page: on line %d.\n" " REF: Page 53, %%%%Page:" msgstr "" #, c-format msgid "" " Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:" msgstr "" #, c-format msgid "" " Line %d is longer than 255 characters (%d).\n" " REF: Page 25, Line Length" msgstr "" msgid "" " Missing %!PS-Adobe-3.0 on first line.\n" " REF: Page 17, 3.1 Conforming Documents" msgstr "" #, c-format msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments" msgstr "" #, c-format msgid "" " Missing or bad %%BoundingBox: comment.\n" " REF: Page 39, %%BoundingBox:" msgstr "" #, c-format msgid "" " Missing or bad %%Page: comments.\n" " REF: Page 53, %%Page:" msgstr "" #, c-format msgid "" " Missing or bad %%Pages: comment.\n" " REF: Page 43, %%Pages:" msgstr "" msgid " NO ERRORS FOUND" msgstr "" #, c-format msgid " Saw %d lines that exceeded 255 characters." msgstr "" #, c-format msgid " Too many %%BeginDocument comments." msgstr "" #, c-format msgid " Too many %%EndDocument comments." msgstr "" msgid " Warning: file contains binary data." msgstr "" #, c-format msgid " Warning: no %%EndComments comment in file." msgstr "" #, c-format msgid " Warning: obsolete DSC version %.1f in file." msgstr "" msgid " ! expression Unary NOT of expression." msgstr "" msgid " ( expressions ) Group expressions." msgstr "" msgid " --[no-]debug-logging Turn debug logging on/off." msgstr "" msgid " --[no-]remote-admin Turn remote administration on/off." msgstr "" msgid " --[no-]remote-any Allow/prevent access from the Internet." msgstr "" msgid " --[no-]share-printers Turn printer sharing on/off." msgstr "" msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job." msgstr "" msgid " --cr End lines with CR (Mac OS 9)." msgstr "" msgid " --crlf End lines with CR + LF (Windows)." msgstr "" msgid " --domain regex Match domain to regular expression." msgstr "" msgid "" " --exec utility [argument ...] ;\n" " Execute program if true." msgstr "" msgid " --false Always false." msgstr "" msgid " --help Show help." msgstr "" msgid " --help Show this help." msgstr "" msgid " --host regex Match hostname to regular expression." msgstr "" msgid " --lf End lines with LF (UNIX/Linux/macOS)." msgstr "" msgid " --list-filters List filters that will be used." msgstr "" msgid " --local True if service is local." msgstr "" msgid " --ls List attributes." msgstr "" msgid " --name regex Match service name to regular expression." msgstr "" msgid " --not expression Unary NOT of expression." msgstr "" msgid " --path regex Match resource path to regular expression." msgstr "" msgid " --port number[-number] Match port to number or range." msgstr "" msgid " --print Print URI if true." msgstr "" msgid " --print-name Print service name if true." msgstr "" msgid " --quiet Quietly report match via exit code." msgstr "" msgid " --remote True if service is remote." msgstr "" msgid "" " --stop-after-include-error\n" " Stop tests after a failed INCLUDE." msgstr "" msgid " --true Always true." msgstr "" msgid " --txt key True if the TXT record contains the key." msgstr "" msgid " --txt-* regex Match TXT record key to regular expression." msgstr "" msgid " --uri regex Match URI to regular expression." msgstr "" msgid " --version Show program version." msgstr "" msgid " --version Show version." msgstr "" msgid " -4 Connect using IPv4." msgstr "" msgid " -6 Connect using IPv6." msgstr "" msgid " -C Send requests using chunking (default)." msgstr "" msgid " -D Remove the input file when finished." msgstr "" msgid " -D name=value Set named variable to value." msgstr "" msgid " -E Encrypt the connection." msgstr "" msgid "" " -E Test with encryption using HTTP Upgrade to TLS." msgstr "" msgid "" " -F Run in the foreground but detach from console." msgstr "" msgid " -H samba-server Use the named SAMBA server." msgstr "" msgid " -I Ignore errors." msgstr "" msgid " -I include-dir Add include directory to search path." msgstr "" msgid " -I {filename,filters,none,profiles}" msgstr "" msgid " -L Send requests using content-length." msgstr "" msgid "" " -P filename.plist Produce XML plist to a file and test report to " "standard output." msgstr "" msgid " -P filename.ppd Set PPD file." msgstr "" msgid " -P number[-number] Match port to number or range." msgstr "" msgid " -R root-directory Set alternate root." msgstr "" msgid " -S Test with encryption using HTTPS." msgstr "" msgid " -T seconds Set the browse timeout in seconds." msgstr "" msgid " -T seconds Set the receive/send timeout in seconds." msgstr "" msgid " -U username Specify username." msgstr "" msgid " -V version Set default IPP version." msgstr "" msgid "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgstr "" msgid " -X Produce XML plist instead of plain text." msgstr "" msgid " -a Export all printers." msgstr "" msgid " -c Produce CSV output." msgstr "" msgid " -c catalog.po Load the specified message catalog." msgstr "" msgid " -c cups-files.conf Set cups-files.conf file to use." msgstr "" msgid " -c cupsd.conf Set cupsd.conf file to use." msgstr "" msgid " -d name=value Set named variable to value." msgstr "" msgid " -d output-dir Specify the output directory." msgstr "" msgid " -d printer Use the named printer." msgstr "" msgid " -d regex Match domain to regular expression." msgstr "" msgid " -e Use every filter from the PPD file." msgstr "" msgid " -f Run in the foreground." msgstr "" msgid " -f filename Set default request filename." msgstr "" msgid " -h Show this usage message." msgstr "" msgid " -h Validate HTTP response headers." msgstr "" msgid " -h regex Match hostname to regular expression." msgstr "" msgid " -h server[:port] Specify server address." msgstr "" msgid " -i mime/type Set input MIME type (otherwise auto-typed)." msgstr "" msgid "" " -i seconds Repeat the last file with the given time interval." msgstr "" msgid "" " -j job-id[,N] Filter file N from the specified job (default is " "file 1)." msgstr "" msgid " -l List attributes." msgstr "" msgid " -l Produce plain text output." msgstr "" msgid " -l Run cupsd on demand." msgstr "" msgid " -l lang[,lang,...] Specify the output language(s) (locale)." msgstr "" msgid " -m Use the ModelName value as the filename." msgstr "" msgid "" " -m mime/type Set output MIME type (otherwise application/pdf)." msgstr "" msgid " -n copies Set number of copies." msgstr "" msgid "" " -n count Repeat the last file the given number of times." msgstr "" msgid " -n regex Match service name to regular expression." msgstr "" msgid "" " -o filename.drv Set driver information file (otherwise ppdi.drv)." msgstr "" msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)." msgstr "" msgid " -o name=value Set option(s)." msgstr "" msgid " -p Print URI if true." msgstr "" msgid " -p filename.ppd Set PPD file." msgstr "" msgid " -q Quietly report match via exit code." msgstr "" msgid " -q Run silently." msgstr "" msgid " -r True if service is remote." msgstr "" msgid " -r Use 'relaxed' open mode." msgstr "" msgid " -s Print service name if true." msgstr "" msgid " -s cups-files.conf Set cups-files.conf file to use." msgstr "" msgid " -t Produce a test report." msgstr "" msgid " -t Test PPDs instead of generating them." msgstr "" msgid " -t Test the configuration file." msgstr "" msgid " -t key True if the TXT record contains the key." msgstr "" msgid " -t title Set title." msgstr "" msgid " -u Remove the PPD file when finished." msgstr "" msgid " -u regex Match URI to regular expression." msgstr "" msgid " -v Be verbose." msgstr "" msgid " -vv Be very verbose." msgstr "" msgid "" " -x utility [argument ...] ;\n" " Execute program if true." msgstr "" msgid " -z Compress PPD files using GNU zip." msgstr "" msgid " IPPFIND_SERVICE_DOMAIN Domain name" msgstr "" msgid "" " IPPFIND_SERVICE_HOSTNAME\n" " Fully-qualified domain name" msgstr "" msgid " IPPFIND_SERVICE_NAME Service instance name" msgstr "" msgid " IPPFIND_SERVICE_PORT Port number" msgstr "" msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type" msgstr "" msgid " IPPFIND_SERVICE_SCHEME URI scheme" msgstr "" msgid " IPPFIND_SERVICE_URI URI" msgstr "" msgid " IPPFIND_TXT_* Value of TXT record key" msgstr "" msgid "" " expression --and expression\n" " Logical AND." msgstr "" msgid "" " expression --or expression\n" " Logical OR." msgstr "" msgid " expression expression Logical AND." msgstr "" msgid " {service_domain} Domain name" msgstr "" msgid " {service_hostname} Fully-qualified domain name" msgstr "" msgid " {service_name} Service instance name" msgstr "" msgid " {service_port} Port number" msgstr "" msgid " {service_regtype} DNS-SD registration type" msgstr "" msgid " {service_scheme} URI scheme" msgstr "" msgid " {service_uri} URI" msgstr "" msgid " {txt_*} Value of TXT record key" msgstr "" msgid " {} URI" msgstr "" msgid " FAIL" msgstr "" msgid " PASS" msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section " "5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." msgstr "" #, c-format msgid "" "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 " "section 5.1.14)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section " "5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " "positive (RFC 8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC " "8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes" msgstr "" #, c-format msgid "%d x %d mm" msgstr "" #, c-format msgid "%g x %g \"" msgstr "" #, c-format msgid "%s (%s)" msgstr "" #, c-format msgid "%s (%s, %s)" msgstr "" #, c-format msgid "%s (Borderless)" msgstr "" #, c-format msgid "%s (Borderless, %s)" msgstr "" #, c-format msgid "%s (Borderless, %s, %s)" msgstr "" #, c-format msgid "%s accepting requests since %s" msgstr "" #, c-format msgid "%s cannot be changed." msgstr "%s nelze zmÄ›nit." #, c-format msgid "%s is not implemented by the CUPS version of lpc." msgstr "" #, c-format msgid "%s is not ready" msgstr "" #, c-format msgid "%s is ready" msgstr "" #, c-format msgid "%s is ready and printing" msgstr "" #, c-format msgid "%s job-id user title copies options [file]" msgstr "" #, c-format msgid "%s not accepting requests since %s -" msgstr "" #, c-format msgid "%s not supported." msgstr "" #, c-format msgid "%s/%s accepting requests since %s" msgstr "" #, c-format msgid "%s/%s not accepting requests since %s -" msgstr "" #, c-format msgid "%s: %-33.33s [job %d localhost]" msgstr "" #. TRANSLATORS: Message is "subject: error" #, c-format msgid "%s: %s" msgstr "" #, c-format msgid "%s: %s failed: %s" msgstr "" #, c-format msgid "%s: Bad printer URI \"%s\"." msgstr "" #, c-format msgid "%s: Bad version %s for \"-V\"." msgstr "" #, c-format msgid "%s: Don't know what to do." msgstr "" #, c-format msgid "%s: Error - %s" msgstr "" #, c-format msgid "" "%s: Error - %s environment variable names non-existent destination \"%s\"." msgstr "" #, c-format msgid "%s: Error - add '/version=1.1' to server name." msgstr "" #, c-format msgid "%s: Error - bad job ID." msgstr "" #, c-format msgid "%s: Error - cannot print files and alter jobs simultaneously." msgstr "" #, c-format msgid "%s: Error - cannot print from stdin if files or a job ID are provided." msgstr "" #, c-format msgid "%s: Error - copies must be 1 or more." msgstr "" #, c-format msgid "%s: Error - expected character set after \"-S\" option." msgstr "" #, c-format msgid "%s: Error - expected content type after \"-T\" option." msgstr "" #, c-format msgid "%s: Error - expected copies after \"-#\" option." msgstr "" #, c-format msgid "%s: Error - expected copies after \"-n\" option." msgstr "" #, c-format msgid "%s: Error - expected destination after \"-P\" option." msgstr "" #, c-format msgid "%s: Error - expected destination after \"-d\" option." msgstr "" #, c-format msgid "%s: Error - expected form after \"-f\" option." msgstr "" #, c-format msgid "%s: Error - expected hold name after \"-H\" option." msgstr "" #, c-format msgid "%s: Error - expected hostname after \"-H\" option." msgstr "" #, c-format msgid "%s: Error - expected hostname after \"-h\" option." msgstr "" #, c-format msgid "%s: Error - expected mode list after \"-y\" option." msgstr "" #, c-format msgid "%s: Error - expected name after \"-%c\" option." msgstr "" #, c-format msgid "%s: Error - expected option=value after \"-o\" option." msgstr "" #, c-format msgid "%s: Error - expected page list after \"-P\" option." msgstr "" #, c-format msgid "%s: Error - expected priority after \"-%c\" option." msgstr "" #, c-format msgid "%s: Error - expected reason text after \"-r\" option." msgstr "" #, c-format msgid "%s: Error - expected title after \"-t\" option." msgstr "" #, c-format msgid "%s: Error - expected username after \"-U\" option." msgstr "" #, c-format msgid "%s: Error - expected username after \"-u\" option." msgstr "" #, c-format msgid "%s: Error - expected value after \"-%c\" option." msgstr "" #, c-format msgid "" "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" " "option." msgstr "" #, c-format msgid "%s: Error - no default destination available." msgstr "" #, c-format msgid "%s: Error - priority must be between 1 and 100." msgstr "" #, c-format msgid "%s: Error - scheduler not responding." msgstr "" #, c-format msgid "%s: Error - too many files - \"%s\"." msgstr "" #, c-format msgid "%s: Error - unable to access \"%s\" - %s" msgstr "" #, c-format msgid "%s: Error - unable to queue from stdin - %s." msgstr "" #, c-format msgid "%s: Error - unknown destination \"%s\"." msgstr "" #, c-format msgid "%s: Error - unknown destination \"%s/%s\"." msgstr "" #, c-format msgid "%s: Error - unknown option \"%c\"." msgstr "" #, c-format msgid "%s: Error - unknown option \"%s\"." msgstr "" #, c-format msgid "%s: Expected job ID after \"-i\" option." msgstr "" #, c-format msgid "%s: Invalid destination name in list \"%s\"." msgstr "" #, c-format msgid "%s: Invalid filter string \"%s\"." msgstr "" #, c-format msgid "%s: Missing filename for \"-P\"." msgstr "" #, c-format msgid "%s: Missing timeout for \"-T\"." msgstr "" #, c-format msgid "%s: Missing version for \"-V\"." msgstr "" #, c-format msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"." msgstr "" #, c-format msgid "%s: No filter to convert from %s/%s to %s/%s." msgstr "" #, c-format msgid "%s: Operation failed: %s" msgstr "" #, c-format msgid "%s: Sorry, no encryption support." msgstr "" #, c-format msgid "%s: Unable to connect to \"%s:%d\": %s" msgstr "" #, c-format msgid "%s: Unable to connect to server." msgstr "" #, c-format msgid "%s: Unable to contact server." msgstr "" #, c-format msgid "%s: Unable to create PPD file: %s" msgstr "" #, c-format msgid "%s: Unable to determine MIME type of \"%s\"." msgstr "" #, c-format msgid "%s: Unable to open \"%s\": %s" msgstr "" #, c-format msgid "%s: Unable to open %s: %s" msgstr "" #, c-format msgid "%s: Unable to open PPD file: %s on line %d." msgstr "" #, c-format msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"." msgstr "" #, c-format msgid "%s: Unable to resolve \"%s\"." msgstr "" #, c-format msgid "%s: Unknown argument \"%s\"." msgstr "" #, c-format msgid "%s: Unknown destination \"%s\"." msgstr "" #, c-format msgid "%s: Unknown destination MIME type %s/%s." msgstr "" #, c-format msgid "%s: Unknown option \"%c\"." msgstr "" #, c-format msgid "%s: Unknown option \"%s\"." msgstr "" #, c-format msgid "%s: Unknown option \"-%c\"." msgstr "" #, c-format msgid "%s: Unknown source MIME type %s/%s." msgstr "" #, c-format msgid "" "%s: Warning - \"%c\" format modifier not supported - output may not be " "correct." msgstr "" #, c-format msgid "%s: Warning - character set option ignored." msgstr "" #, c-format msgid "%s: Warning - content type option ignored." msgstr "" #, c-format msgid "%s: Warning - form option ignored." msgstr "" #, c-format msgid "%s: Warning - mode option ignored." msgstr "" msgid "-1" msgstr "-1" msgid "-10" msgstr "-10" msgid "-100" msgstr "-100" msgid "-105" msgstr "-105" msgid "-11" msgstr "-11" msgid "-110" msgstr "-110" msgid "-115" msgstr "-115" msgid "-12" msgstr "-12" msgid "-120" msgstr "-120" msgid "-13" msgstr "-13" msgid "-14" msgstr "-14" msgid "-15" msgstr "-15" msgid "-2" msgstr "-2" msgid "-20" msgstr "-20" msgid "-25" msgstr "-25" msgid "-3" msgstr "-3" msgid "-30" msgstr "-30" msgid "-35" msgstr "-35" msgid "-4" msgstr "-4" msgid "-40" msgstr "-40" msgid "-45" msgstr "-45" msgid "-5" msgstr "-5" msgid "-50" msgstr "-50" msgid "-55" msgstr "-55" msgid "-6" msgstr "-6" msgid "-60" msgstr "-60" msgid "-65" msgstr "-65" msgid "-7" msgstr "-7" msgid "-70" msgstr "-70" msgid "-75" msgstr "-75" msgid "-8" msgstr "-8" msgid "-80" msgstr "-80" msgid "-85" msgstr "-85" msgid "-9" msgstr "-9" msgid "-90" msgstr "-90" msgid "-95" msgstr "-95" msgid "0" msgstr "0" msgid "1" msgstr "1" msgid "1 inch/sec." msgstr "1 palec/sek." msgid "1.25x0.25\"" msgstr "1.25x0.25\"" msgid "1.25x2.25\"" msgstr "1.25x2.25\"" msgid "1.5 inch/sec." msgstr "1.5 palce/sek." msgid "1.50x0.25\"" msgstr "1.50x0.25\"" msgid "1.50x0.50\"" msgstr "1.50x0.50\"" msgid "1.50x1.00\"" msgstr "1.50x1.00\"" msgid "1.50x2.00\"" msgstr "1.50x2.00\"" msgid "10" msgstr "10" msgid "10 inches/sec." msgstr "10 palců/sek." msgid "10 x 11" msgstr "" msgid "10 x 13" msgstr "" msgid "10 x 14" msgstr "" msgid "100" msgstr "100" msgid "100 mm/sec." msgstr "100 mm/sek." msgid "105" msgstr "105" msgid "11" msgstr "11" msgid "11 inches/sec." msgstr "11 palců/sek." msgid "110" msgstr "110" msgid "115" msgstr "115" msgid "12" msgstr "12" msgid "12 inches/sec." msgstr "12 palců/sek." msgid "12 x 11" msgstr "" msgid "120" msgstr "120" msgid "120 mm/sec." msgstr "120 mm/sek." msgid "120x60dpi" msgstr "120x60 dpi" msgid "120x72dpi" msgstr "120x72 dpi" msgid "13" msgstr "13" msgid "136dpi" msgstr "136 dpi" msgid "14" msgstr "14" msgid "15" msgstr "15" msgid "15 mm/sec." msgstr "15 mm/sek." msgid "15 x 11" msgstr "" msgid "150 mm/sec." msgstr "150 mm/sek." msgid "150dpi" msgstr "150 dpi" msgid "16" msgstr "16" msgid "17" msgstr "17" msgid "18" msgstr "18" msgid "180dpi" msgstr "180 dpi" msgid "19" msgstr "19" msgid "2" msgstr "2" msgid "2 inches/sec." msgstr "2 palce/sek." msgid "2-Hole Punch (Landscape)" msgstr "" msgid "2-Hole Punch (Portrait)" msgstr "" msgid "2-Hole Punch (Reverse Landscape)" msgstr "" msgid "2-Hole Punch (Reverse Portrait)" msgstr "" msgid "2-Sided Printing" msgstr "oboustranný tisk" msgid "2.00x0.37\"" msgstr "2.00x0.37\"" msgid "2.00x0.50\"" msgstr "2.00x0.50\"" msgid "2.00x1.00\"" msgstr "2.00x1.00\"" msgid "2.00x1.25\"" msgstr "2.00x1.25\"" msgid "2.00x2.00\"" msgstr "2.00x2.00\"" msgid "2.00x3.00\"" msgstr "2.00x3.00\"" msgid "2.00x4.00\"" msgstr "2.00x4.00\"" msgid "2.00x5.50\"" msgstr "2.00x5.50\"" msgid "2.25x0.50\"" msgstr "2.25x0.50\"" msgid "2.25x1.25\"" msgstr "2.25x1.25\"" msgid "2.25x4.00\"" msgstr "2.25x4.00\"" msgid "2.25x5.50\"" msgstr "2.25x5.50\"" msgid "2.38x5.50\"" msgstr "2.38x5.50\"" msgid "2.5 inches/sec." msgstr "2.5 palce/sek." msgid "2.50x1.00\"" msgstr "2.50x1.00\"" msgid "2.50x2.00\"" msgstr "2.50x2.00\"" msgid "2.75x1.25\"" msgstr "2.75x1.25\"" msgid "2.9 x 1\"" msgstr "2.9 x 1\"" msgid "20" msgstr "20" msgid "20 mm/sec." msgstr "20 mm/sek." msgid "200 mm/sec." msgstr "200 mm/sek." msgid "203dpi" msgstr "203 dpi" msgid "21" msgstr "21" msgid "22" msgstr "22" msgid "23" msgstr "23" msgid "24" msgstr "24" msgid "24-Pin Series" msgstr "24 jehliÄková" msgid "240x72dpi" msgstr "240x72 dpi" msgid "25" msgstr "25" msgid "250 mm/sec." msgstr "250 mm/sek." msgid "26" msgstr "26" msgid "27" msgstr "27" msgid "28" msgstr "28" msgid "29" msgstr "29" msgid "3" msgstr "3" msgid "3 inches/sec." msgstr "3 palce/sek." msgid "3 x 5" msgstr "" msgid "3-Hole Punch (Landscape)" msgstr "" msgid "3-Hole Punch (Portrait)" msgstr "" msgid "3-Hole Punch (Reverse Landscape)" msgstr "" msgid "3-Hole Punch (Reverse Portrait)" msgstr "" msgid "3.00x1.00\"" msgstr "3.00x1.00\"" msgid "3.00x1.25\"" msgstr "3.00x1.25\"" msgid "3.00x2.00\"" msgstr "3.00x2.00\"" msgid "3.00x3.00\"" msgstr "3.00x3.00\"" msgid "3.00x5.00\"" msgstr "3.00x5.00\"" msgid "3.25x2.00\"" msgstr "3.25x2.00\"" msgid "3.25x5.00\"" msgstr "3.25x5.00\"" msgid "3.25x5.50\"" msgstr "3.25x5.50\"" msgid "3.25x5.83\"" msgstr "3.25x5.83\"" msgid "3.25x7.83\"" msgstr "3.25x7.83\"" msgid "3.5 x 5" msgstr "" msgid "3.5\" Disk" msgstr "3.5\" Disk" msgid "3.50x1.00\"" msgstr "3.50x1.00\"" msgid "30" msgstr "30" msgid "30 mm/sec." msgstr "30 mm/sek." msgid "300 mm/sec." msgstr "300 mm/sek." msgid "300dpi" msgstr "300 dpi" msgid "35" msgstr "35" msgid "360dpi" msgstr "360 dpi" msgid "360x180dpi" msgstr "360x180 dpi" msgid "4" msgstr "4" msgid "4 inches/sec." msgstr "4 palce/sek." msgid "4-Hole Punch (Landscape)" msgstr "" msgid "4-Hole Punch (Portrait)" msgstr "" msgid "4-Hole Punch (Reverse Landscape)" msgstr "" msgid "4-Hole Punch (Reverse Portrait)" msgstr "" msgid "4.00x1.00\"" msgstr "4.00x1.00\"" msgid "4.00x13.00\"" msgstr "4.00x13.00\"" msgid "4.00x2.00\"" msgstr "4.00x2.00\"" msgid "4.00x2.50\"" msgstr "4.00x2.50\"" msgid "4.00x3.00\"" msgstr "4.00x3.00\"" msgid "4.00x4.00\"" msgstr "4.00x4.00\"" msgid "4.00x5.00\"" msgstr "4.00x5.00\"" msgid "4.00x6.00\"" msgstr "4.00x6.00\"" msgid "4.00x6.50\"" msgstr "4.00x6.50\"" msgid "40" msgstr "40" msgid "40 mm/sec." msgstr "40 mm/sek." msgid "45" msgstr "45" msgid "5" msgstr "5" msgid "5 inches/sec." msgstr "5 palců/sek." msgid "5 x 7" msgstr "" msgid "50" msgstr "50" msgid "55" msgstr "55" msgid "6" msgstr "6" msgid "6 inches/sec." msgstr "6 palců/sek." msgid "6.00x1.00\"" msgstr "6.00x1.00\"" msgid "6.00x2.00\"" msgstr "6.00x2.00\"" msgid "6.00x3.00\"" msgstr "6.00x3.00\"" msgid "6.00x4.00\"" msgstr "6.00x4.00\"" msgid "6.00x5.00\"" msgstr "6.00x5.00\"" msgid "6.00x6.00\"" msgstr "6.00x6.00\"" msgid "6.00x6.50\"" msgstr "6.00x6.50\"" msgid "60" msgstr "60" msgid "60 mm/sec." msgstr "60 mm/sek." msgid "600dpi" msgstr "600 dpi" msgid "60dpi" msgstr "60 dpi" msgid "60x72dpi" msgstr "" msgid "65" msgstr "65" msgid "7" msgstr "7" msgid "7 inches/sec." msgstr "7 palců/sek." msgid "7 x 9" msgstr "" msgid "70" msgstr "70" msgid "75" msgstr "75" msgid "8" msgstr "8" msgid "8 inches/sec." msgstr "8 palců/sek." msgid "8 x 10" msgstr "" msgid "8.00x1.00\"" msgstr "8.00x1.00\"" msgid "8.00x2.00\"" msgstr "8.00x2.00\"" msgid "8.00x3.00\"" msgstr "8.00x3.00\"" msgid "8.00x4.00\"" msgstr "8.00x4.00\"" msgid "8.00x5.00\"" msgstr "8.00x5.00\"" msgid "8.00x6.00\"" msgstr "8.00x6.00\"" msgid "8.00x6.50\"" msgstr "8.00x6.50\"" msgid "80" msgstr "80" msgid "80 mm/sec." msgstr "80 mm/sek." msgid "85" msgstr "85" msgid "9" msgstr "9" msgid "9 inches/sec." msgstr "9 palců/sek." msgid "9 x 11" msgstr "" msgid "9 x 12" msgstr "" msgid "9-Pin Series" msgstr "9 jehliÄková" msgid "90" msgstr "90" msgid "95" msgstr "95" msgid "?Invalid help command unknown." msgstr "" msgid "A Samba password is required to export printer drivers" msgstr "" msgid "A Samba username is required to export printer drivers" msgstr "" #, c-format msgid "A class named \"%s\" already exists." msgstr "" #, c-format msgid "A printer named \"%s\" already exists." msgstr "" msgid "A0" msgstr "A0" msgid "A0 Long Edge" msgstr "" msgid "A1" msgstr "A1" msgid "A1 Long Edge" msgstr "" msgid "A10" msgstr "A10" msgid "A2" msgstr "A2" msgid "A2 Long Edge" msgstr "" msgid "A3" msgstr "A3" msgid "A3 Long Edge" msgstr "" msgid "A3 Oversize" msgstr "" msgid "A3 Oversize Long Edge" msgstr "" msgid "A4" msgstr "A4" msgid "A4 Long Edge" msgstr "" msgid "A4 Oversize" msgstr "" msgid "A4 Small" msgstr "" msgid "A5" msgstr "A5" msgid "A5 Long Edge" msgstr "" msgid "A5 Oversize" msgstr "" msgid "A6" msgstr "A6" msgid "A6 Long Edge" msgstr "" msgid "A7" msgstr "A7" msgid "A8" msgstr "A8" msgid "A9" msgstr "A9" msgid "ANSI A" msgstr "ANSI A" msgid "ANSI B" msgstr "ANSI B" msgid "ANSI C" msgstr "ANSI C" msgid "ANSI D" msgstr "ANSI D" msgid "ANSI E" msgstr "ANSI E" msgid "ARCH C" msgstr "ARCH C" msgid "ARCH C Long Edge" msgstr "" msgid "ARCH D" msgstr "ARCH D" msgid "ARCH D Long Edge" msgstr "" msgid "ARCH E" msgstr "ARCH E" msgid "ARCH E Long Edge" msgstr "" msgid "Accept Jobs" msgstr "Příjem úloh" msgid "Accepted" msgstr "PÅ™ijatý" msgid "Accordian Fold" msgstr "" msgid "Add Class" msgstr "PÅ™idat třídu" msgid "Add Printer" msgstr "PÅ™idat tiskárnu" msgid "Add RSS Subscription" msgstr "PÅ™idat RSS pÅ™edplatné" msgid "Address" msgstr "Adresa" msgid "Administration" msgstr "Administrace" msgid "Advanced Photo Paper" msgstr "" msgid "Alternate" msgstr "" msgid "Alternate Roll" msgstr "" msgid "Aluminum" msgstr "" msgid "Always" msgstr "Vždy" msgid "AppSocket/HP JetDirect" msgstr "AppSocket/HP JetDirect" msgid "Applicator" msgstr "Aplikátor" msgid "Archival Envelope" msgstr "" msgid "Archival Fabric" msgstr "" msgid "Archival Paper" msgstr "" msgid "Archival Photo Paper" msgstr "" #, c-format msgid "Attempt to set %s printer-state to bad value %d." msgstr "" #, c-format msgid "Attribute \"%s\" is in the wrong group." msgstr "" #, c-format msgid "Attribute \"%s\" is the wrong value type." msgstr "" #, c-format msgid "Attribute groups are out of order (%x < %x)." msgstr "" msgid "Automatic" msgstr "" msgid "B0" msgstr "B0" msgid "B1" msgstr "B1" msgid "B10" msgstr "B10" msgid "B2" msgstr "B2" msgid "B3" msgstr "B3" msgid "B4" msgstr "B4" msgid "B5" msgstr "B5" msgid "B5 Oversize" msgstr "" msgid "B6" msgstr "B6" msgid "B7" msgstr "B7" msgid "B8" msgstr "B8" msgid "B9" msgstr "B9" msgid "Back Print Film" msgstr "" #, c-format msgid "Bad 'document-format' value \"%s\"." msgstr "" msgid "Bad NULL dests pointer" msgstr "Neplatný ukazatel NULL" msgid "Bad OpenGroup" msgstr "Chybný OpenGroup" msgid "Bad OpenUI/JCLOpenUI" msgstr "Chybný OpenUI/JCLOpenUI" msgid "Bad OrderDependency" msgstr "Chybný OrderDependency" msgid "Bad PPD cache file." msgstr "" msgid "Bad PPD file." msgstr "" msgid "Bad Request" msgstr "Chybný požadavek" msgid "Bad SNMP version number" msgstr "Chybná verze SNMP" msgid "Bad UIConstraints" msgstr "Chybný UIConstraints" msgid "Bad arguments to function" msgstr "" #, c-format msgid "Bad copies value %d." msgstr "Chybný poÄet kopií %d." msgid "Bad custom parameter" msgstr "Chybný uživatelský parametr" #, c-format msgid "Bad device-uri \"%s\"." msgstr "" #, c-format msgid "Bad device-uri scheme \"%s\"." msgstr "" #, c-format msgid "Bad document-format \"%s\"." msgstr "" #, c-format msgid "Bad document-format-default \"%s\"." msgstr "" msgid "Bad filename buffer" msgstr "" msgid "Bad hostname/address in URI" msgstr "" #, c-format msgid "Bad job-name value: %s" msgstr "" msgid "Bad job-name value: Wrong type or count." msgstr "" msgid "Bad job-priority value." msgstr "" #, c-format msgid "Bad job-sheets value \"%s\"." msgstr "" msgid "Bad job-sheets value type." msgstr "" msgid "Bad job-state value." msgstr "" #, c-format msgid "Bad job-uri \"%s\"." msgstr "" #, c-format msgid "Bad notify-pull-method \"%s\"." msgstr "" #, c-format msgid "Bad notify-recipient-uri \"%s\"." msgstr "" #, c-format msgid "Bad number-up value %d." msgstr "Chybná hodnota %d." #, c-format msgid "Bad option + choice on line %d." msgstr "" #, c-format msgid "Bad page-ranges values %d-%d." msgstr "Chybný rozsah stránek %d-%d." msgid "Bad port number in URI" msgstr "" #, c-format msgid "Bad port-monitor \"%s\"." msgstr "" #, c-format msgid "Bad printer-state value %d." msgstr "" msgid "Bad printer-uri." msgstr "" #, c-format msgid "Bad request ID %d." msgstr "" #, c-format msgid "Bad request version number %d.%d." msgstr "" #, c-format msgid "Bad requesting-user-name value: %s" msgstr "" msgid "Bad resource in URI" msgstr "" msgid "Bad scheme in URI" msgstr "" msgid "Bad subscription ID" msgstr "" msgid "Bad username in URI" msgstr "" msgid "Bad value string" msgstr "" msgid "Bad/empty URI" msgstr "" msgid "Bale" msgstr "" msgid "Banners" msgstr "Banery" msgid "Bind" msgstr "" msgid "Bind (Landscape)" msgstr "" msgid "Bind (Portrait)" msgstr "" msgid "Bind (Reverse Landscape)" msgstr "" msgid "Bind (Reverse Portrait)" msgstr "" msgid "Bond Envelope" msgstr "" msgid "Bond Paper" msgstr "Kancelářský papír" msgid "Booklet" msgstr "" msgid "Booklet Maker" msgstr "" #, c-format msgid "Boolean expected for waiteof option \"%s\"." msgstr "" msgid "Bottom" msgstr "" msgid "Bottom Tray" msgstr "" msgid "Buffer overflow detected, aborting." msgstr "" msgid "CD" msgstr "" msgid "CMYK" msgstr "CMYK" msgid "CPCL Label Printer" msgstr "Tiskárna Å¡títků CPCL" msgid "Cancel Jobs" msgstr "" msgid "Cancel RSS Subscription" msgstr "ZruÅ¡it RSS pÅ™edplatné" msgid "Canceling print job." msgstr "" msgid "Cannot change printer-is-shared for remote queues." msgstr "" msgid "Cannot share a remote Kerberized printer." msgstr "" msgid "Cardboard" msgstr "" msgid "Cardstock" msgstr "" msgid "Cassette" msgstr "" msgid "Center" msgstr "" msgid "Center Tray" msgstr "" msgid "Change Settings" msgstr "ZmÄ›na nastavení" #, c-format msgid "Character set \"%s\" not supported." msgstr "" msgid "Classes" msgstr "Třídy" msgid "Clean Print Heads" msgstr "VyÄiÅ¡tÄ›ní tiskových hlav" msgid "Close-Job doesn't support the job-uri attribute." msgstr "" msgid "Coat" msgstr "" msgid "Coated Envelope" msgstr "" msgid "Coated Paper" msgstr "" msgid "Color" msgstr "Barva" msgid "Color Mode" msgstr "Barevný režim" msgid "Colored Labels" msgstr "" msgid "" "Commands may be abbreviated. Commands are:\n" "\n" "exit help quit status ?" msgstr "" msgid "Community name uses indefinite length" msgstr "\"Community-Name\" má neomezenou délku" msgid "Connected to printer." msgstr "" msgid "Connecting to printer." msgstr "" msgid "Continue" msgstr "PokraÄovat" msgid "Continuous" msgstr "Souvislý" msgid "Continuous Long" msgstr "" msgid "Continuous Short" msgstr "" msgid "Control file sent successfully." msgstr "" msgid "Copying print data." msgstr "" msgid "Cotton Envelope" msgstr "" msgid "Cotton Paper" msgstr "" msgid "Cover" msgstr "" msgid "Created" msgstr "VytvoÅ™eno" msgid "Credentials do not validate against site CA certificate." msgstr "" msgid "Credentials have expired." msgstr "" msgid "Custom" msgstr "Uživatelský" msgid "CustominCutInterval" msgstr "CustominCutInterval" msgid "CustominTearInterval" msgstr "CustominTearInterval" msgid "Cut" msgstr "Snížit" msgid "Cut Media" msgstr "" msgid "Cutter" msgstr "VýstÅ™ižek" msgid "DVD" msgstr "" msgid "Dark" msgstr "Tmavý" msgid "Darkness" msgstr "Tma" msgid "Data file sent successfully." msgstr "" msgid "Deep Color" msgstr "" msgid "Delete Class" msgstr "Výmaz třídy" msgid "Delete Printer" msgstr "Výmaz tiskárny" msgid "DeskJet Series" msgstr "Řada DeskJet" #, c-format msgid "Destination \"%s\" is not accepting jobs." msgstr "Zařízení \"%s\" nepÅ™ijímá úlohy." #, c-format msgid "" "Device: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s" msgstr "" msgid "Direct Thermal Media" msgstr "Termální médium" #, c-format msgid "Directory \"%s\" contains a relative path." msgstr "" #, c-format msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "" #, c-format msgid "Directory \"%s\" is a file." msgstr "" #, c-format msgid "Directory \"%s\" not available: %s" msgstr "" #, c-format msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "" msgid "Disabled" msgstr "Zakázaný" msgid "Disc" msgstr "" #, c-format msgid "Document #%d does not exist in job #%d." msgstr "" msgid "Double Gate Fold" msgstr "" msgid "Double Staple (Landscape)" msgstr "" msgid "Double Staple (Portrait)" msgstr "" msgid "Double Staple (Reverse Landscape)" msgstr "" msgid "Double Staple (Reverse Portrait)" msgstr "" msgid "Double Wall Cardboard" msgstr "" msgid "Draft" msgstr "" msgid "Dry Film" msgstr "" msgid "Duplexer" msgstr "Duplexní jednotka" msgid "Dymo" msgstr "Dymo" msgid "EPL1 Label Printer" msgstr "Tiskárna Å¡títků EPL1" msgid "EPL2 Label Printer" msgstr "Tiskárna Å¡títků EPL2" msgid "Edit Configuration File" msgstr "Úprava konfiguraÄního souboru" msgid "Embossing Foil" msgstr "" msgid "Empty PPD file." msgstr "" msgid "Encryption is not supported." msgstr "" msgid "End Board" msgstr "" #. TRANSLATORS: Banner/cover sheet after the print job. msgid "Ending Banner" msgstr "UkonÄení baneru" msgid "Engineering Z Fold" msgstr "" msgid "English" msgstr "ÄŒeÅ¡tina" msgid "" "Enter your username and password or the root username and password to access " "this page. If you are using Kerberos authentication, make sure you have a " "valid Kerberos ticket." msgstr "" "Zadejte své uživatelské jméno a heslo, nebo uživatelské jméno a heslo " "administrátora pro přístup na tuto stránku. Pokud používáte ověřování " "Kerberos, ujistÄ›te se, že máte platný ticket Kerberosu." msgid "Envelope" msgstr "" msgid "Envelope #10" msgstr "" msgid "Envelope #11" msgstr "" msgid "Envelope #12" msgstr "" msgid "Envelope #14" msgstr "" msgid "Envelope #9" msgstr "" msgid "Envelope B4" msgstr "" msgid "Envelope B5" msgstr "" msgid "Envelope B6" msgstr "" msgid "Envelope C0" msgstr "" msgid "Envelope C1" msgstr "" msgid "Envelope C2" msgstr "" msgid "Envelope C3" msgstr "" msgid "Envelope C4" msgstr "" msgid "Envelope C5" msgstr "" msgid "Envelope C6" msgstr "" msgid "Envelope C65" msgstr "" msgid "Envelope C7" msgstr "" msgid "Envelope Choukei 3" msgstr "" msgid "Envelope Choukei 3 Long Edge" msgstr "" msgid "Envelope Choukei 4" msgstr "" msgid "Envelope Choukei 4 Long Edge" msgstr "" msgid "Envelope DL" msgstr "" msgid "Envelope Feed" msgstr "PodavaÄ obálek" msgid "Envelope Invite" msgstr "" msgid "Envelope Italian" msgstr "" msgid "Envelope Kaku2" msgstr "" msgid "Envelope Kaku2 Long Edge" msgstr "" msgid "Envelope Kaku3" msgstr "" msgid "Envelope Kaku3 Long Edge" msgstr "" msgid "Envelope Monarch" msgstr "" msgid "Envelope PRC1" msgstr "" msgid "Envelope PRC1 Long Edge" msgstr "" msgid "Envelope PRC10" msgstr "" msgid "Envelope PRC10 Long Edge" msgstr "" msgid "Envelope PRC2" msgstr "" msgid "Envelope PRC2 Long Edge" msgstr "" msgid "Envelope PRC3" msgstr "" msgid "Envelope PRC3 Long Edge" msgstr "" msgid "Envelope PRC4" msgstr "" msgid "Envelope PRC4 Long Edge" msgstr "" msgid "Envelope PRC5 Long Edge" msgstr "" msgid "Envelope PRC5PRC5" msgstr "" msgid "Envelope PRC6" msgstr "" msgid "Envelope PRC6 Long Edge" msgstr "" msgid "Envelope PRC7" msgstr "" msgid "Envelope PRC7 Long Edge" msgstr "" msgid "Envelope PRC8" msgstr "" msgid "Envelope PRC8 Long Edge" msgstr "" msgid "Envelope PRC9" msgstr "" msgid "Envelope PRC9 Long Edge" msgstr "" msgid "Envelope Personal" msgstr "" msgid "Envelope You4" msgstr "" msgid "Envelope You4 Long Edge" msgstr "" msgid "Environment Variables:" msgstr "" msgid "Epson" msgstr "Epson" msgid "Error Policy" msgstr "Chování pÅ™i chybÄ›" msgid "Error reading raster data." msgstr "" msgid "Error sending raster data." msgstr "" msgid "Error: need hostname after \"-h\" option." msgstr "" msgid "European Fanfold" msgstr "" msgid "European Fanfold Legal" msgstr "" msgid "Every 10 Labels" msgstr "Každých 10 Å¡títků" msgid "Every 2 Labels" msgstr "Každé 2 Å¡títky" msgid "Every 3 Labels" msgstr "Každé 3 Å¡títky" msgid "Every 4 Labels" msgstr "Každé 4 Å¡títky" msgid "Every 5 Labels" msgstr "Každých 5 Å¡títků" msgid "Every 6 Labels" msgstr "Každých 6 Å¡títků" msgid "Every 7 Labels" msgstr "Každých 7 Å¡títků" msgid "Every 8 Labels" msgstr "Každých 8 Å¡títků" msgid "Every 9 Labels" msgstr "Každých 9 Å¡títků" msgid "Every Label" msgstr "Každý Å¡títek" msgid "Everyday Glossy Photo Paper" msgstr "" msgid "Everyday Matte Paper" msgstr "" msgid "Executive" msgstr "" msgid "Expectation Failed" msgstr "OÄekávané údaje jsou neplatné" msgid "Export Printers to Samba" msgstr "Export tiskáren do Samby" msgid "Expressions:" msgstr "" msgid "Extra Heavyweight Paper" msgstr "" msgid "FAIL" msgstr "" msgid "Fabric" msgstr "" msgid "Face Down" msgstr "" msgid "Face Up" msgstr "" msgid "Fast Grayscale" msgstr "" #, c-format msgid "File \"%s\" contains a relative path." msgstr "" #, c-format msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "" #, c-format msgid "File \"%s\" is a directory." msgstr "" #, c-format msgid "File \"%s\" not available: %s" msgstr "" #, c-format msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "" msgid "File Folder" msgstr "" #, c-format msgid "" "File device URIs have been disabled. To enable, see the FileDevice directive " "in \"%s/cups-files.conf\"." msgstr "" msgid "Film" msgstr "" msgid "Fine Envelope" msgstr "" #, c-format msgid "Finished page %d." msgstr "" msgid "Flexo Base" msgstr "" msgid "Flexo Photo Polymer" msgstr "" msgid "Flute" msgstr "" msgid "Foil" msgstr "" msgid "Fold" msgstr "" msgid "Folio" msgstr "Fólie" msgid "Forbidden" msgstr "Zakázaný" msgid "Found" msgstr "" msgid "Full Cut Tabs" msgstr "" msgid "Gate Fold" msgstr "" msgid "General" msgstr "Obecný" msgid "Generic" msgstr "Obecný" msgid "Get-Response-PDU uses indefinite length" msgstr "\"Get-Response-PDU\" má neomezenou délku" msgid "Glass" msgstr "" msgid "Glass Colored" msgstr "" msgid "Glass Opaque" msgstr "" msgid "Glass Surfaced" msgstr "" msgid "Glass Textured" msgstr "" msgid "Glossy Brochure Paper" msgstr "" msgid "Glossy Fabric" msgstr "" msgid "Glossy Labels" msgstr "" msgid "Glossy Optical Disc" msgstr "" msgid "Glossy Paper" msgstr "Lesklý papír" msgid "Glossy Photo Paper" msgstr "" msgid "Got a printer-uri attribute but no job-id." msgstr "" msgid "Gravure Cylinder" msgstr "" msgid "Grayscale" msgstr "StupnÄ› Å¡edi" msgid "HP" msgstr "HP" msgid "Hagaki" msgstr "" msgid "Half Fold" msgstr "" msgid "Half Z Fold" msgstr "" msgid "Hanging Folder" msgstr "ZávÄ›sná složka" msgid "Hash buffer too small." msgstr "" msgid "Heavyweight Coated Paper" msgstr "" msgid "Heavyweight Envelope" msgstr "" msgid "Heavyweight Paper" msgstr "" msgid "Help file not in index." msgstr "" msgid "High" msgstr "" msgid "High Gloss Fabric" msgstr "" msgid "High Gloss Labels" msgstr "" msgid "High Gloss Optical Disc" msgstr "" msgid "High Gloss Photo Paper" msgstr "" msgid "IPP 1setOf attribute with incompatible value tags." msgstr "" msgid "IPP attribute has no name." msgstr "" msgid "IPP attribute is not a member of the message." msgstr "" msgid "IPP begCollection value not 0 bytes." msgstr "" msgid "IPP boolean value not 1 byte." msgstr "" msgid "IPP date value not 11 bytes." msgstr "" msgid "IPP endCollection value not 0 bytes." msgstr "" msgid "IPP enum value not 4 bytes." msgstr "" msgid "IPP extension tag larger than 0x7FFFFFFF." msgstr "" msgid "IPP integer value not 4 bytes." msgstr "" msgid "IPP language length overflows value." msgstr "" msgid "IPP language length too large." msgstr "" msgid "IPP member name is not empty." msgstr "" msgid "IPP memberName value is empty." msgstr "" msgid "IPP memberName with no attribute." msgstr "" msgid "IPP name larger than 32767 bytes." msgstr "" msgid "IPP nameWithLanguage value less than minimum 4 bytes." msgstr "" msgid "IPP octetString length too large." msgstr "" msgid "IPP rangeOfInteger value not 8 bytes." msgstr "" msgid "IPP resolution value not 9 bytes." msgstr "" msgid "IPP string length overflows value." msgstr "" msgid "IPP textWithLanguage value less than minimum 4 bytes." msgstr "" msgid "IPP value larger than 32767 bytes." msgstr "" msgid "ISOLatin1" msgstr "ISOLatin1" msgid "Illegal control character" msgstr "Neplatný řídící znak" msgid "Illegal main keyword string" msgstr "Neplatné hlavní klíÄové slovo Å™etÄ›zce" msgid "Illegal option keyword string" msgstr "Neplatná volba klíÄového slova Å™etÄ›zce" msgid "Illegal translation string" msgstr "Neplatný pÅ™eklad Å™etÄ›zce" msgid "Illegal whitespace character" msgstr "Nedovolený prázdný znak" msgid "Image Setter Paper" msgstr "" msgid "Imaging Cylinder" msgstr "" msgid "Inkjet Envelope" msgstr "" msgid "Inkjet Labels" msgstr "" msgid "Inkjet Paper" msgstr "" msgid "Installable Options" msgstr "Možnosti instalace" msgid "Installed" msgstr "Instalovaný" msgid "IntelliBar Label Printer" msgstr "Tiskárna Å¡títků \"IntelliBar\"" msgid "Intellitech" msgstr "Intellitech" msgid "Internal Server Error" msgstr "" msgid "Internal error" msgstr "VniÅ™ní chyba" msgid "Internet Postage 2-Part" msgstr "Internet Postage 2-Part" msgid "Internet Postage 3-Part" msgstr "Internet Postage 3-Part" msgid "Internet Printing Protocol" msgstr "Internetový tiskový protokol" msgid "Invalid media name arguments." msgstr "" msgid "Invalid media size." msgstr "" msgid "Invalid ppd-name value." msgstr "" #, c-format msgid "Invalid printer command \"%s\"." msgstr "" msgid "JCL" msgstr "JCL" msgid "JIS B0" msgstr "" msgid "JIS B1" msgstr "" msgid "JIS B10" msgstr "" msgid "JIS B2" msgstr "" msgid "JIS B3" msgstr "" msgid "JIS B4" msgstr "" msgid "JIS B4 Long Edge" msgstr "" msgid "JIS B5" msgstr "" msgid "JIS B5 Long Edge" msgstr "" msgid "JIS B6" msgstr "" msgid "JIS B6 Long Edge" msgstr "" msgid "JIS B7" msgstr "" msgid "JIS B8" msgstr "" msgid "JIS B9" msgstr "" #, c-format msgid "Job #%d cannot be restarted - no files." msgstr "" #, c-format msgid "Job #%d does not exist." msgstr "" #, c-format msgid "Job #%d is already aborted - can't cancel." msgstr "Úloha #%d je již zruÅ¡ena - nelze zruÅ¡it." #, c-format msgid "Job #%d is already canceled - can't cancel." msgstr "Úloha #%d je již zruÅ¡ena - nelze zruÅ¡it." #, c-format msgid "Job #%d is already completed - can't cancel." msgstr "Úloha #%d je již dokonÄena - nelze zruÅ¡it." #, c-format msgid "Job #%d is finished and cannot be altered." msgstr "" #, c-format msgid "Job #%d is not complete." msgstr "" #, c-format msgid "Job #%d is not held for authentication." msgstr "" #, c-format msgid "Job #%d is not held." msgstr "" msgid "Job Completed" msgstr "Úloha dokonÄena" msgid "Job Created" msgstr "Úloha vytvoÅ™ena" msgid "Job Options Changed" msgstr "ZmÄ›na parametrů úlohy" msgid "Job Stopped" msgstr "Úloha zastavena" msgid "Job is completed and cannot be changed." msgstr "Úloha je dokonÄena a nelze ji zmÄ›nit." msgid "Job operation failed" msgstr "Úloha se nezdaÅ™ila" msgid "Job state cannot be changed." msgstr "Stav úlohy nelze zmÄ›nit." msgid "Job subscriptions cannot be renewed." msgstr "" msgid "Jobs" msgstr "Úlohy" msgid "Jog" msgstr "" msgid "LPD/LPR Host or Printer" msgstr "LPD/LPR hostitel nebo tiskárna" msgid "Label Printer" msgstr "Tiskárna Å¡títků" msgid "Label Top" msgstr "Horní Å¡títek" msgid "Labels" msgstr "" msgid "Laminate" msgstr "" msgid "Laminating Foil" msgstr "" #, c-format msgid "Language \"%s\" not supported." msgstr "" msgid "Large Address" msgstr "Plná adresa" msgid "Large Capacity" msgstr "" msgid "Large Capacity Tray" msgstr "" msgid "LaserJet Series PCL 4/5" msgstr "LaserJet Serie PCL 4/5" msgid "Left" msgstr "" msgid "Left Gate Fold" msgstr "" msgid "Left Tray" msgstr "" msgid "Letter Fold" msgstr "" msgid "Letter Oversize" msgstr "" msgid "Letter Oversize Long Edge" msgstr "" msgid "Letterhead" msgstr "" msgid "Light" msgstr "SvÄ›tlý" msgid "Lightweight Envelope" msgstr "" msgid "Lightweight Paper" msgstr "" msgid "Line longer than the maximum allowed (255 characters)" msgstr "Řádek je delší než maximální povolená velikost (255 znaků)" msgid "List Available Printers" msgstr "Seznam dostupných tiskáren" msgid "Load paper." msgstr "" msgid "Local printer created." msgstr "" msgid "Long-Edge (Portrait)" msgstr "Delší okraj (na výšku)" msgid "Looking for printer." msgstr "" msgid "Mailbox 1" msgstr "" msgid "Mailbox 10" msgstr "" msgid "Mailbox 2" msgstr "" msgid "Mailbox 3" msgstr "" msgid "Mailbox 4" msgstr "" msgid "Mailbox 5" msgstr "" msgid "Mailbox 6" msgstr "" msgid "Mailbox 7" msgstr "" msgid "Mailbox 8" msgstr "" msgid "Mailbox 9" msgstr "" msgid "Main" msgstr "" msgid "Main Roll" msgstr "" msgid "Manual" msgstr "" msgid "Manual Feed" msgstr "RuÄní podávání" msgid "Matte Brochure Paper" msgstr "" msgid "Matte Cover Paper" msgstr "" msgid "Matte Fabric" msgstr "" msgid "Matte Labels" msgstr "" msgid "Matte Optical Disc" msgstr "" msgid "Matte Photo Paper" msgstr "" msgid "Media Size" msgstr "Velikost média" msgid "Media Source" msgstr "Zdroj média" msgid "Media Tracking" msgstr "Sledování média" msgid "Media Type" msgstr "Typ média" msgid "Medium" msgstr "StÅ™ední" msgid "Memory allocation error" msgstr "Chyba pÅ™idÄ›lení pamÄ›ti" msgid "Metal" msgstr "" msgid "Metal Glossy" msgstr "" msgid "Metal High Gloss" msgstr "" msgid "Metal Matte" msgstr "" msgid "Metal Satin" msgstr "" msgid "Metal Semi Gloss" msgstr "" msgid "Mid-Weight Paper" msgstr "" msgid "Middle" msgstr "" msgid "Missing CloseGroup" msgstr "" msgid "Missing PPD-Adobe-4.x header" msgstr "ChybÄ›jící záhlaví PPD-Adobe-4.x" msgid "Missing asterisk in column 1" msgstr "Chybí hvÄ›zdiÄka ve sloupci 1" msgid "Missing document-number attribute." msgstr "" #, c-format msgid "Missing double quote on line %d." msgstr "" msgid "Missing form variable" msgstr "" msgid "Missing last-document attribute in request." msgstr "" msgid "Missing media or media-col." msgstr "" msgid "Missing media-size in media-col." msgstr "" msgid "Missing notify-subscription-ids attribute." msgstr "" msgid "Missing option keyword" msgstr "" msgid "Missing requesting-user-name attribute." msgstr "" #, c-format msgid "Missing required attribute \"%s\"." msgstr "" msgid "Missing required attributes." msgstr "" msgid "Missing resource in URI" msgstr "" msgid "Missing scheme in URI" msgstr "" #, c-format msgid "Missing value on line %d." msgstr "" msgid "Missing value string" msgstr "Chybí hodnota Å™etÄ›zce" msgid "Missing x-dimension in media-size." msgstr "" msgid "Missing y-dimension in media-size." msgstr "" #, c-format msgid "" "Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgstr "" msgid "Modifiers:" msgstr "" msgid "Modify Class" msgstr "Úprava třídy" msgid "Modify Printer" msgstr "Úprava tiskárny" msgid "Mounting Tape" msgstr "" msgid "Move All Jobs" msgstr "PÅ™esun vÅ¡ech úloh" msgid "Move Job" msgstr "PÅ™esun úlohy" msgid "Moved Permanently" msgstr "Trvale pÅ™esunuto" msgid "Multi Layer" msgstr "" msgid "Multi Part Form" msgstr "" msgid "Multi-Hole Punch (Landscape)" msgstr "" msgid "Multi-Hole Punch (Portrait)" msgstr "" msgid "Multi-Hole Punch (Reverse Landscape)" msgstr "" msgid "Multi-Hole Punch (Reverse Portrait)" msgstr "" msgid "Multipurpose" msgstr "" msgid "Multipurpose Paper" msgstr "" msgid "My Mailbox" msgstr "" msgid "NULL PPD file pointer" msgstr "Prázdný ukazatel PPD souboru" msgid "Name OID uses indefinite length" msgstr "Název \"OID\" má neomezenou délku" msgid "Nested classes are not allowed." msgstr "" msgid "Never" msgstr "Nikdy" msgid "New credentials are not valid for name." msgstr "" msgid "New credentials are older than stored credentials." msgstr "" msgid "No" msgstr "Ne" msgid "No Content" msgstr "Žádný obsah" msgid "No IPP attributes." msgstr "" msgid "No PPD name" msgstr "" msgid "No VarBind SEQUENCE" msgstr "Žádná VarBind SEQUENCE" msgid "No Windows printer drivers are installed." msgstr "" msgid "No active connection" msgstr "Není aktivní spojení" msgid "No active connection." msgstr "" #, c-format msgid "No active jobs on %s." msgstr "" msgid "No attributes in request." msgstr "" msgid "No authentication information provided." msgstr "" msgid "No common name specified." msgstr "" msgid "No community name" msgstr "Žádný název komunity" msgid "No default printer." msgstr "" msgid "No destinations added." msgstr "Zařízení nepÅ™idáno." msgid "No device URI found in argv[0] or in DEVICE_URI environment variable." msgstr "" msgid "No error-index" msgstr "Žádný \"error-index\"" msgid "No error-status" msgstr "Žádný \"error-status\"" msgid "No file in print request." msgstr "" msgid "No modification time" msgstr "" msgid "No name OID" msgstr "Žádný název OID" msgid "No pages were found." msgstr "" msgid "No printer name" msgstr "" msgid "No printer-uri found" msgstr "" msgid "No printer-uri found for class" msgstr "" msgid "No printer-uri in request." msgstr "" msgid "No request URI." msgstr "" msgid "No request protocol version." msgstr "" msgid "No request sent." msgstr "" msgid "No request-id" msgstr "Žádný ID požadavek" msgid "No stored credentials, not valid for name." msgstr "" msgid "No subscription attributes in request." msgstr "" msgid "No subscriptions found." msgstr "Nenalezeno pÅ™edplatné." msgid "No variable-bindings SEQUENCE" msgstr "Žádná \"variable-bindings\" SEQUENCE" msgid "No version number" msgstr "Není Äíslo verze" msgid "Non-continuous (Mark sensing)" msgstr "Není souvislý (Mark Sensing)" msgid "Non-continuous (Web sensing)" msgstr "Není souvislý (Web Sensing)" msgid "None" msgstr "" msgid "Normal" msgstr "Normální" msgid "Not Found" msgstr "Nebyl nalezen" msgid "Not Implemented" msgstr "Nerealizováno" msgid "Not Installed" msgstr "Nenainstalováno" msgid "Not Modified" msgstr "NezmÄ›nÄ›no" msgid "Not Supported" msgstr "Nepodporováno" msgid "Not allowed to print." msgstr "Není povoleno tisknout." msgid "Note" msgstr "Poznámka" msgid "" "Note: this program only validates the DSC comments, not the PostScript " "itself." msgstr "" msgid "OK" msgstr "OK" msgid "Off (1-Sided)" msgstr "Vypnuto (jednostranný)" msgid "Office Recycled Paper" msgstr "" msgid "Oki" msgstr "Oki" msgid "Online Help" msgstr "NápovÄ›da" msgid "Only local users can create a local printer." msgstr "" #, c-format msgid "Open of %s failed: %s" msgstr "OtevÅ™ení %s selhalo: %s" msgid "OpenGroup without a CloseGroup first" msgstr "Opengroup nepÅ™edcházelo CloseGroup" msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" msgstr "OpenUI/JCLOpenUI nepÅ™edcházelo CloseUI/JCLCloseUI" msgid "Operation Policy" msgstr "Způsob ověření" msgid "Optical Disc" msgstr "" #, c-format msgid "Option \"%s\" cannot be included via %%%%IncludeFeature." msgstr "" msgid "Options Installed" msgstr "Instalované možnosti" msgid "Options:" msgstr "" msgid "Other" msgstr "" msgid "Out of date PPD cache file." msgstr "" msgid "Out of memory." msgstr "" msgid "Output Mode" msgstr "Výstupní režim" msgid "Output bin is almost full." msgstr "" msgid "Output bin is full." msgstr "" msgid "Output bin is missing." msgstr "" msgid "PASS" msgstr "" msgid "PCL Laser Printer" msgstr "PCL laserová tiskárna" msgid "PRC16K" msgstr "PRC16K" msgid "PRC16K Long Edge" msgstr "" msgid "PRC32K" msgstr "PRC32K" msgid "PRC32K Long Edge" msgstr "" msgid "PRC32K Oversize" msgstr "" msgid "PRC32K Oversize Long Edge" msgstr "" msgid "Packet does not contain a Get-Response-PDU" msgstr "Packet neobsahuje \"Get-Response-PDU\"" msgid "Packet does not start with SEQUENCE" msgstr "Paket nezaÄíná SEQUENCÃ" msgid "Paper" msgstr "" msgid "Paper jam." msgstr "" msgid "Paper tray is almost empty." msgstr "" msgid "Paper tray is empty." msgstr "" msgid "Paper tray is missing." msgstr "" msgid "Parallel Fold" msgstr "" msgid "ParamCustominCutInterval" msgstr "ParamCustominCutInterval" msgid "ParamCustominTearInterval" msgstr "ParamCustominTearInterval" #, c-format msgid "Password for %s on %s? " msgstr "Heslo pro %s na %s? " #, c-format msgid "Password for %s required to access %s via SAMBA: " msgstr "Heslo pro %s je vyžadováno pro přístup k %s pÅ™es Sambu: " msgid "Pause Class" msgstr "Pozastavení třídy" msgid "Pause Printer" msgstr "Pozastavení tiskárny" msgid "Peel-Off" msgstr "Peel-Off" msgid "Permanent Labels" msgstr "" msgid "Photo" msgstr "Fotografie" msgid "Photo Film" msgstr "" msgid "Photo Labels" msgstr "Foto-samolepky" msgid "Photo Paper" msgstr "" msgid "Photo Paper Plus Glossy II" msgstr "" msgid "Photo Paper Pro Platinum" msgstr "" msgid "Plain Envelope" msgstr "" msgid "Plain Paper" msgstr "ObyÄejný papír" msgid "Plastic" msgstr "" msgid "Plastic Archival" msgstr "" msgid "Plastic Colored" msgstr "" msgid "Plastic Glossy" msgstr "" msgid "Plastic High Gloss" msgstr "" msgid "Plastic Matte" msgstr "" msgid "Plastic Satin" msgstr "" msgid "Plastic Semi Gloss" msgstr "" msgid "Plate" msgstr "" msgid "Policies" msgstr "Pravidla" msgid "Polyester" msgstr "" msgid "Port Monitor" msgstr "Monitorování portu" msgid "PostScript Printer" msgstr "PostScriptová tiskárna" msgid "Postcard" msgstr "Pohlednice" msgid "Postcard Double" msgstr "" msgid "Postcard Double Long Edge" msgstr "" msgid "Postcard Long Edge" msgstr "" msgid "Poster Fold" msgstr "" msgid "Pre Cut Tabs" msgstr "" msgid "Premium Inkjet Paper" msgstr "" msgid "Premium Photo Glossy Paper" msgstr "" msgid "Premium Presentation Matte Paper" msgstr "" msgid "Preparing to print." msgstr "" msgid "Preprinted Envelope" msgstr "" msgid "Preprinted Paper" msgstr "" msgid "Print Density" msgstr "Hustota tisku" msgid "Print Job:" msgstr "Tisk úlohy:" msgid "Print Mode" msgstr "Režim tisku" msgid "Print Quality" msgstr "" msgid "Print Rate" msgstr "Kvalita tisku" msgid "Print Self-Test Page" msgstr "Tisk \"self-test\" stránky" msgid "Print Speed" msgstr "Rychlost tisku" msgid "Print Test Page" msgstr "Tisk zkuÅ¡ební stránky" msgid "Print and Cut" msgstr "Tisk a vyjmout" msgid "Print and Tear" msgstr "Tisk a odtrhnout" msgid "Print file sent." msgstr "" msgid "Print job canceled at printer." msgstr "" msgid "Print job too large." msgstr "" msgid "Print job was not accepted." msgstr "" #, c-format msgid "Printer \"%s\" already exists." msgstr "" msgid "Printer Added" msgstr "Tiskárna pÅ™idána" msgid "Printer Default" msgstr "Výchozí tiskárna" msgid "Printer Deleted" msgstr "Tiskárna vymazána" msgid "Printer Modified" msgstr "Tiskárna upravena" msgid "Printer Paused" msgstr "Tiskárna zastavena" msgid "Printer Settings" msgstr "Nastavení tiskárny" msgid "Printer cannot print supplied content." msgstr "" msgid "Printer cannot print with supplied options." msgstr "" msgid "Printer does not support required IPP attributes or document formats." msgstr "" msgid "Printer:" msgstr "Tiskárna:" msgid "Printers" msgstr "Tiskárny" #, c-format msgid "Printing page %d, %u%% complete." msgstr "" msgid "Punch" msgstr "" msgid "Punched Paper" msgstr "" msgid "Quarto" msgstr "Quarto" msgid "Quota limit reached." msgstr "Kvóta byla pÅ™ekroÄena." msgid "Rank Owner Job File(s) Total Size" msgstr "" msgid "Rear" msgstr "" msgid "Rear Tray" msgstr "" msgid "Reject Jobs" msgstr "Odmítnutí úloh" #, c-format msgid "Remote host did not accept control file (%d)." msgstr "" #, c-format msgid "Remote host did not accept data file (%d)." msgstr "" msgid "Reprint After Error" msgstr "Opakovat tisk po chybÄ›" msgid "Request Entity Too Large" msgstr "Dotaz Entity je příliÅ¡ dlouhý" msgid "Resolution" msgstr "RozliÅ¡ení" msgid "Resume Class" msgstr "Obnovení třídy" msgid "Resume Printer" msgstr "Obnovení tiskárny" msgid "Return Address" msgstr "Návrat adresy" msgid "Rewind" msgstr "PÅ™etoÄit" msgid "Right" msgstr "" msgid "Right Gate Fold" msgstr "" msgid "Right Tray" msgstr "" msgid "Roll" msgstr "" msgid "Roll 1" msgstr "" msgid "Roll 10" msgstr "" msgid "Roll 2" msgstr "" msgid "Roll 3" msgstr "" msgid "Roll 4" msgstr "" msgid "Roll 5" msgstr "" msgid "Roll 6" msgstr "" msgid "Roll 7" msgstr "" msgid "Roll 8" msgstr "" msgid "Roll 9" msgstr "" #, c-format msgid "Running command: %s %s -N -A %s -c '%s'" msgstr "" msgid "SEQUENCE uses indefinite length" msgstr "\"SEQUENCE\" má neomezenou délku" msgid "SSL/TLS Negotiation Error" msgstr "" msgid "Saddle Stitch" msgstr "" msgid "Satin Labels" msgstr "" msgid "Satin Optical Disc" msgstr "" msgid "Satin Photo Paper" msgstr "" msgid "Screen" msgstr "" msgid "Screen Paged" msgstr "" msgid "Security Labels" msgstr "" msgid "See Other" msgstr "Viz další" msgid "See remote printer." msgstr "" msgid "Self Adhesive" msgstr "" msgid "Self Adhesive Film" msgstr "" msgid "Self-signed credentials are blocked." msgstr "" msgid "Semi-Gloss Fabric" msgstr "" msgid "Semi-Gloss Labels" msgstr "" msgid "Semi-Gloss Optical Disc" msgstr "" msgid "Semi-Gloss Photo Paper" msgstr "" msgid "Sending data to printer." msgstr "" msgid "Server Restarted" msgstr "Restart serveru" msgid "Server Security Auditing" msgstr "Audit bezpeÄnosti serveru" msgid "Server Started" msgstr "Start serveru" msgid "Server Stopped" msgstr "Zastavení serveru" msgid "Server credentials not set." msgstr "" msgid "Service Unavailable" msgstr "Služba je nedostupná" msgid "Set Allowed Users" msgstr "Nastavení přístupu uživatelů" msgid "Set As Server Default" msgstr "Nastavení jako výchozí na serveru" msgid "Set Class Options" msgstr "Nastavení parametrů třídy" msgid "Set Printer Options" msgstr "Nastavení parametrů tiskárny" msgid "Set Publishing" msgstr "Nastavení vydávání" msgid "Shipping Address" msgstr "DoruÄovací adresa" msgid "Short-Edge (Landscape)" msgstr "Kratší okraj (na šířku)" msgid "Shrink Foil" msgstr "" msgid "Side" msgstr "" msgid "Side Tray" msgstr "" msgid "Single Face" msgstr "" msgid "Single Punch (Landscape)" msgstr "" msgid "Single Punch (Portrait)" msgstr "" msgid "Single Punch (Reverse Landscape)" msgstr "" msgid "Single Punch (Reverse Portrait)" msgstr "" msgid "Single Staple (Landscape)" msgstr "" msgid "Single Staple (Portrait)" msgstr "" msgid "Single Staple (Reverse Landscape)" msgstr "" msgid "Single Staple (Reverse Portrait)" msgstr "" msgid "Single Wall Cardboard" msgstr "" msgid "Sleeve" msgstr "" msgid "Special Paper" msgstr "Speciální papír" #, c-format msgid "Spooling job, %.0f%% complete." msgstr "" msgid "Stacker 1" msgstr "" msgid "Stacker 10" msgstr "" msgid "Stacker 2" msgstr "" msgid "Stacker 3" msgstr "" msgid "Stacker 4" msgstr "" msgid "Stacker 5" msgstr "" msgid "Stacker 6" msgstr "" msgid "Stacker 7" msgstr "" msgid "Stacker 8" msgstr "" msgid "Stacker 9" msgstr "" msgid "Standard" msgstr "Standardní" msgid "Staple" msgstr "" msgid "Staple Edge" msgstr "" msgid "Staple Edge (Landscape)" msgstr "" msgid "Staple Edge (Portrait)" msgstr "" msgid "Staple Edge (Reverse Landscape)" msgstr "" msgid "Staple Edge (Reverse Portrait)" msgstr "" #. TRANSLATORS: Banner/cover sheet before the print job. msgid "Starting Banner" msgstr "SpuÅ¡tÄ›ní baneru" #, c-format msgid "Starting page %d." msgstr "" msgid "Statement" msgstr "Prohlášení" #, c-format msgid "Subscription #%d does not exist." msgstr "" msgid "Substitutions:" msgstr "" msgid "Super A" msgstr "Super A" msgid "Super B" msgstr "Super B" msgid "Super B/A3" msgstr "Super B/A3" msgid "Switching Protocols" msgstr "Protokol výmÄ›ny" msgid "Tab Stock" msgstr "" msgid "Tabloid" msgstr "Tabloid" msgid "Tabloid Oversize" msgstr "" msgid "Tabloid Oversize Long Edge" msgstr "" msgid "Tear" msgstr "Odtrhnout" msgid "Tear-Off" msgstr "Odtrhnout" msgid "Tear-Off Adjust Position" msgstr "Nastavení pozice odtržení" #, c-format msgid "The \"%s\" attribute is required for print jobs." msgstr "" #, c-format msgid "The %s attribute cannot be provided with job-ids." msgstr "" #, c-format msgid "" "The '%s' Job Status attribute cannot be supplied in a job creation request." msgstr "" #, c-format msgid "" "The '%s' operation attribute cannot be supplied in a Create-Job request." msgstr "" #, c-format msgid "The PPD file \"%s\" could not be found." msgstr "Soubor PPD \"%s\" nelze nalézt." #, c-format msgid "The PPD file \"%s\" could not be opened: %s" msgstr "Soubor PPD \"%s\" nelze otevřít: %s" msgid "The PPD file could not be opened." msgstr "" msgid "" "The class name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "Název třídy může obsahovat až 127 tisknutelných znaků a nesmí obsahovat " "mezery, lomítka (/), nebo křížek (#)." msgid "The developer unit needs to be replaced." msgstr "" msgid "The developer unit will need to be replaced soon." msgstr "" msgid "The fuser's temperature is high." msgstr "" msgid "The fuser's temperature is low." msgstr "" msgid "" "The notify-lease-duration attribute cannot be used with job subscriptions." msgstr "Atribut \"notify-lease-duration\" nelze použít s pÅ™ihlášenou úlohou." #, c-format msgid "The notify-user-data value is too large (%d > 63 octets)." msgstr "" msgid "The optical photoconductor needs to be replaced." msgstr "" msgid "The optical photoconductor will need to be replaced soon." msgstr "" msgid "The printer configuration is incorrect or the printer no longer exists." msgstr "" msgid "The printer did not respond." msgstr "" msgid "The printer is in use." msgstr "" msgid "The printer is low on ink." msgstr "" msgid "The printer is low on toner." msgstr "" msgid "The printer is not connected." msgstr "" msgid "The printer is not responding." msgstr "" msgid "The printer is now connected." msgstr "" msgid "The printer is now online." msgstr "" msgid "The printer is offline." msgstr "" msgid "The printer is unreachable at this time." msgstr "" msgid "The printer may be out of ink." msgstr "" msgid "The printer may be out of toner." msgstr "" msgid "The printer may not exist or is unavailable at this time." msgstr "" msgid "" "The printer name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "Název tiskárny může obsahovat až 127 tisknutelných znaků a nesmí obsahovat " "mezery, lomítka (/), nebo křížek (#)." msgid "The printer or class does not exist." msgstr "" msgid "The printer or class is not shared." msgstr "" msgid "The printer's cover is open." msgstr "" msgid "The printer's door is open." msgstr "" msgid "The printer's interlock is open." msgstr "" msgid "The printer's waste bin is almost full." msgstr "" msgid "The printer's waste bin is full." msgstr "" #, c-format msgid "The printer-uri \"%s\" contains invalid characters." msgstr "Tiskárna-URI \"%s\" obsahuje neplatné znaky." msgid "The printer-uri attribute is required." msgstr "" msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." msgstr "Tiskárna-URI musí být ve tvaru \"ipp://HOSTNAME/classes/CLASSNAME\"." msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgstr "" "Tiskárna-URI musí být ve tvaru \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgid "" "The subscription name may not contain spaces, slashes (/), question marks " "(?), or the pound sign (#)." msgstr "" "Název pÅ™edplatného nesmí obsahovat mezery, lomítka (/), otazník (?), nebo " "křížek (#)." msgid "" "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to " "enable it." msgstr "" #, c-format msgid "The which-jobs value \"%s\" is not supported." msgstr "" msgid "There are too many subscriptions." msgstr "Existuje příliÅ¡ mnoho pÅ™edplatných." msgid "There was an unrecoverable USB error." msgstr "" msgid "Thermal Transfer Media" msgstr "Termální tisková média" msgid "Too many active jobs." msgstr "PříliÅ¡ mnoho aktivních úloh." #, c-format msgid "Too many job-sheets values (%d > 2)." msgstr "" #, c-format msgid "Too many printer-state-reasons values (%d > %d)." msgstr "" msgid "Top" msgstr "" msgid "Top Tray" msgstr "" msgid "Tractor" msgstr "" msgid "Transfer" msgstr "" msgid "Transparency" msgstr "Průhlednost" msgid "Tray" msgstr "PodavaÄ" msgid "Tray 1" msgstr "PodavaÄ 1" msgid "Tray 10" msgstr "" msgid "Tray 11" msgstr "" msgid "Tray 12" msgstr "" msgid "Tray 13" msgstr "" msgid "Tray 14" msgstr "" msgid "Tray 15" msgstr "" msgid "Tray 16" msgstr "" msgid "Tray 17" msgstr "" msgid "Tray 18" msgstr "" msgid "Tray 19" msgstr "" msgid "Tray 2" msgstr "PodavaÄ 2" msgid "Tray 20" msgstr "" msgid "Tray 3" msgstr "PodavaÄ 3" msgid "Tray 4" msgstr "PodavaÄ 4" msgid "Tray 5" msgstr "" msgid "Tray 6" msgstr "" msgid "Tray 7" msgstr "" msgid "Tray 8" msgstr "" msgid "Tray 9" msgstr "" msgid "Triple Staple (Landscape)" msgstr "" msgid "Triple Staple (Portrait)" msgstr "" msgid "Triple Staple (Reverse Landscape)" msgstr "" msgid "Triple Staple (Reverse Portrait)" msgstr "" msgid "Triple Wall Cardboard" msgstr "" msgid "Trust on first use is disabled." msgstr "" msgid "URI Too Long" msgstr "URI je příliÅ¡ dlouhá" msgid "URI too large" msgstr "" msgid "US Fanfold" msgstr "" msgid "US Ledger" msgstr "US Ledger" msgid "US Legal" msgstr "US Legal" msgid "US Legal Oversize" msgstr "" msgid "US Letter" msgstr "US Letter" msgid "US Letter Long Edge" msgstr "" msgid "US Letter Oversize" msgstr "" msgid "US Letter Oversize Long Edge" msgstr "" msgid "US Letter Small" msgstr "" msgid "Unable to access cupsd.conf file" msgstr "Nelze získat přístup k souboru \"cupsd.conf\"" msgid "Unable to access help file." msgstr "" msgid "Unable to add RSS subscription" msgstr "Nelze pÅ™idat RSS pÅ™edplatné" msgid "Unable to add class" msgstr "Nelze pÅ™idat třídu" msgid "Unable to add document to print job." msgstr "" #, c-format msgid "Unable to add job for destination \"%s\"." msgstr "" msgid "Unable to add printer" msgstr "Nelze pÅ™idat tiskárnu" msgid "Unable to allocate memory for file types." msgstr "" msgid "Unable to allocate memory for page info" msgstr "" msgid "Unable to allocate memory for pages array" msgstr "" msgid "Unable to cancel RSS subscription" msgstr "Nelze zruÅ¡it RSS pÅ™edplatné" msgid "Unable to cancel print job." msgstr "" msgid "Unable to change printer" msgstr "Nelze zmÄ›nit tiskárnu" msgid "Unable to change printer-is-shared attribute" msgstr "Nelze zmÄ›nit atribut \"sdílení tiskárny\"" msgid "Unable to change server settings" msgstr "Nelze zmÄ›nit nastavení serveru" #, c-format msgid "Unable to compile mimeMediaType regular expression: %s." msgstr "" #, c-format msgid "Unable to compile naturalLanguage regular expression: %s." msgstr "" msgid "Unable to configure printer options." msgstr "" msgid "Unable to connect to host." msgstr "Nelze se pÅ™ipojit k hostiteli." msgid "Unable to contact printer, queuing on next printer in class." msgstr "" #, c-format msgid "Unable to copy 64-bit CUPS printer driver files (%d)." msgstr "" #, c-format msgid "Unable to copy 64-bit Windows printer driver files (%d)." msgstr "" #, c-format msgid "Unable to copy CUPS printer driver files (%d)." msgstr "" #, c-format msgid "Unable to copy PPD file - %s" msgstr "" msgid "Unable to copy PPD file." msgstr "" #, c-format msgid "Unable to copy Windows 2000 printer driver files (%d)." msgstr "" #, c-format msgid "Unable to copy Windows 9x printer driver files (%d)." msgstr "" msgid "Unable to create credentials from array." msgstr "" msgid "Unable to create printer-uri" msgstr "" msgid "Unable to create printer." msgstr "" msgid "Unable to create server credentials." msgstr "" msgid "Unable to create temporary file" msgstr "" msgid "Unable to delete class" msgstr "Nelze vymazat třídu" msgid "Unable to delete printer" msgstr "Nelze vymazat tiskárnu" msgid "Unable to do maintenance command" msgstr "Nelze provést příkaz údržby" msgid "Unable to edit cupsd.conf files larger than 1MB" msgstr "" msgid "" "Unable to establish a secure connection to host (certificate chain invalid)." msgstr "" msgid "" "Unable to establish a secure connection to host (certificate not yet valid)." msgstr "" msgid "Unable to establish a secure connection to host (expired certificate)." msgstr "" msgid "Unable to establish a secure connection to host (host name mismatch)." msgstr "" msgid "" "Unable to establish a secure connection to host (peer dropped connection " "before responding)." msgstr "" msgid "" "Unable to establish a secure connection to host (self-signed certificate)." msgstr "" msgid "" "Unable to establish a secure connection to host (untrusted certificate)." msgstr "" msgid "Unable to establish a secure connection to host." msgstr "" msgid "Unable to find destination for job" msgstr "" msgid "Unable to find printer." msgstr "" msgid "Unable to find server credentials." msgstr "" msgid "Unable to get backend exit status." msgstr "" msgid "Unable to get class list" msgstr "Nelze získat seznam tříd" msgid "Unable to get class status" msgstr "Nelze získat stav třídy" msgid "Unable to get list of printer drivers" msgstr "Nelze získat seznam ovladaÄů tiskárny" msgid "Unable to get printer attributes" msgstr "Nelze získat atributy tiskárny" msgid "Unable to get printer list" msgstr "Nelze získat seznam tiskáren" msgid "Unable to get printer status" msgstr "" msgid "Unable to get printer status." msgstr "Nelze získat stav tiskárny." #, c-format msgid "Unable to install Windows 2000 printer driver files (%d)." msgstr "" #, c-format msgid "Unable to install Windows 9x printer driver files (%d)." msgstr "" msgid "Unable to load help index." msgstr "" #, c-format msgid "Unable to locate printer \"%s\"." msgstr "" msgid "Unable to locate printer." msgstr "" msgid "Unable to modify class" msgstr "Nelze zmÄ›nit třídu" msgid "Unable to modify printer" msgstr "Nelze zmÄ›nit tiskárnu" msgid "Unable to move job" msgstr "Nelze pÅ™esunout úlohu" msgid "Unable to move jobs" msgstr "Nelze pÅ™esunout úlohy" msgid "Unable to open PPD file" msgstr "Nelze otevřít PPD soubor" msgid "Unable to open cupsd.conf file:" msgstr "Nelze otevřít soubor \"cupsd.conf\":" msgid "Unable to open device file" msgstr "" #, c-format msgid "Unable to open document #%d in job #%d." msgstr "" msgid "Unable to open help file." msgstr "" msgid "Unable to open print file" msgstr "" msgid "Unable to open raster file" msgstr "" msgid "Unable to print test page" msgstr "Nelze vytisknout zkuÅ¡ební stránku" msgid "Unable to read print data." msgstr "" msgid "Unable to rename job document file." msgstr "" msgid "Unable to resolve printer-uri." msgstr "" #, c-format msgid "Unable to run \"%s\": %s" msgstr "" msgid "Unable to see in file" msgstr "" msgid "Unable to send command to printer driver" msgstr "" msgid "Unable to send data to printer." msgstr "" #, c-format msgid "Unable to set Windows printer driver (%d)." msgstr "" msgid "Unable to set options" msgstr "Nelze nastavit parametry" msgid "Unable to set server default" msgstr "Nelze nastavit výchozí server" msgid "Unable to start backend process." msgstr "" msgid "Unable to upload cupsd.conf file" msgstr "Nelze nahrát soubor \"cupsd.conf\"" msgid "Unable to use legacy USB class driver." msgstr "" msgid "Unable to write print data" msgstr "" #, c-format msgid "Unable to write uncompressed print data: %s" msgstr "" msgid "Unauthorized" msgstr "Nepovolený" msgid "Units" msgstr "Jednotky" msgid "Unknown" msgstr "Neznámý" #, c-format msgid "Unknown choice \"%s\" for option \"%s\"." msgstr "" #, c-format msgid "Unknown encryption option value: \"%s\"." msgstr "" #, c-format msgid "Unknown file order: \"%s\"." msgstr "" #, c-format msgid "Unknown format character: \"%c\"." msgstr "" msgid "Unknown hash algorithm." msgstr "" msgid "Unknown media size name." msgstr "" #, c-format msgid "Unknown option \"%s\" with value \"%s\"." msgstr "" #, c-format msgid "Unknown option \"%s\"." msgstr "" #, c-format msgid "Unknown print mode: \"%s\"." msgstr "" #, c-format msgid "Unknown printer-error-policy \"%s\"." msgstr "Neznámá printer-error-policy „%s“." #, c-format msgid "Unknown printer-op-policy \"%s\"." msgstr "Neznámá printer-op-policy „%s“." msgid "Unknown request method." msgstr "" msgid "Unknown request version." msgstr "" msgid "Unknown scheme in URI" msgstr "" msgid "Unknown service name." msgstr "" #, c-format msgid "Unknown version option value: \"%s\"." msgstr "" #, c-format msgid "Unsupported 'compression' value \"%s\"." msgstr "" #, c-format msgid "Unsupported 'document-format' value \"%s\"." msgstr "" msgid "Unsupported 'job-name' value." msgstr "" #, c-format msgid "Unsupported character set \"%s\"." msgstr "" #, c-format msgid "Unsupported compression \"%s\"." msgstr "" #, c-format msgid "Unsupported document-format \"%s\"." msgstr "" #, c-format msgid "Unsupported document-format \"%s/%s\"." msgstr "" #, c-format msgid "Unsupported format \"%s\"." msgstr "" msgid "Unsupported margins." msgstr "" msgid "Unsupported media value." msgstr "" #, c-format msgid "Unsupported number-up value %d, using number-up=1." msgstr "" #, c-format msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb." msgstr "" #, c-format msgid "Unsupported page-border value %s, using page-border=none." msgstr "" msgid "Unsupported raster data." msgstr "" msgid "Unsupported value type" msgstr "Nepodporovaný typ hodnoty" msgid "Upgrade Required" msgstr "Povinné aktualizace" msgid "" "Usage:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]" msgstr "" #, c-format msgid "Usage: %s job-id user title copies options [file]" msgstr "" msgid "Usage: cupsaddsmb [options] printer1 ... printerN" msgstr "" msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]" msgstr "" msgid "Usage: cupsd [options]" msgstr "" msgid "Usage: cupsfilter [ options ] [ -- ] filename" msgstr "" msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]" msgstr "" msgid "" "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" msgstr "" msgid "" "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " ippfind [options] name[.regtype[.domain.]] ... [expression]\n" " ippfind --help\n" " ippfind --version" msgstr "" msgid "Usage: ipptool [options] URI filename [ ... filenameN ]" msgstr "" msgid "Usage: lpmove job/src dest" msgstr "" msgid "" "Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " lpoptions [-h server] [-E] -x printer" msgstr "" msgid "" "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" msgstr "" msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" msgstr "" msgid "Usage: ppdhtml [options] filename.drv >filename.html" msgstr "" msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" msgid "" "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" msgstr "" msgid "Usage: snmp [host-or-ip-address]" msgstr "" msgid "Value uses indefinite length" msgstr "Hodnota má neomezenou délku" msgid "VarBind uses indefinite length" msgstr "VarBind má neomezenou délku" msgid "Vellum Paper" msgstr "" msgid "Version uses indefinite length" msgstr "Version má neomezenou délku" msgid "Waiting for job to complete." msgstr "" msgid "Waiting for printer to become available." msgstr "" msgid "Waiting for printer to finish." msgstr "" msgid "Warning, no Windows 2000 printer drivers are installed." msgstr "" msgid "Waterproof Fabric" msgstr "" msgid "Web Interface is Disabled" msgstr "" msgid "Wet Film" msgstr "" msgid "Windowed Envelope" msgstr "" msgid "Yes" msgstr "Ano" #, c-format msgid "" "You must access this page using the URL https://" "%s:%d%s." msgstr "" "Pro přístup k této stránce, použijte adresu URL https://%s:%d%s." msgid "Z Fold" msgstr "" msgid "ZPL Label Printer" msgstr "Tiskárna Å¡títků ZPL" msgid "Zebra" msgstr "Zebra" msgid "aborted" msgstr "zruÅ¡eno" msgid "accuracy-units" msgstr "Accuracy Units" msgid "accuracy-units.mm" msgstr "Mm" msgid "accuracy-units.nm" msgstr "Nm" msgid "accuracy-units.um" msgstr "Um" msgid "baling" msgstr "Bale Output" msgid "baling-type" msgstr "Baling Type" msgid "baling-type.band" msgstr "Band" msgid "baling-type.shrink-wrap" msgstr "Shrink Wrap" msgid "baling-type.wrap" msgstr "Wrap" msgid "baling-when" msgstr "Baling When" msgid "baling-when.after-job" msgstr "After Job" msgid "baling-when.after-sets" msgstr "After Sets" msgid "binding" msgstr "Bind Output" msgid "binding-reference-edge" msgstr "Binding Reference Edge" msgid "binding-reference-edge.bottom" msgstr "Bottom" msgid "binding-reference-edge.left" msgstr "Left" msgid "binding-reference-edge.right" msgstr "Right" msgid "binding-reference-edge.top" msgstr "Top" msgid "binding-type" msgstr "Binding Type" msgid "binding-type.adhesive" msgstr "Adhesive" msgid "binding-type.comb" msgstr "Comb" msgid "binding-type.flat" msgstr "Flat" msgid "binding-type.padding" msgstr "Padding" msgid "binding-type.perfect" msgstr "Perfect" msgid "binding-type.spiral" msgstr "Spiral" msgid "binding-type.tape" msgstr "Tape" msgid "binding-type.velo" msgstr "Velo" msgid "canceled" msgstr "zruÅ¡eno" msgid "charge-info-message" msgstr "Charge Info Message" msgid "coating" msgstr "Coat Sheets" msgid "coating-sides" msgstr "Coating Sides" msgid "coating-sides.back" msgstr "Back" msgid "coating-sides.both" msgstr "Both" msgid "coating-sides.front" msgstr "Front" msgid "coating-type" msgstr "Coating Type" msgid "coating-type.archival" msgstr "Archival" msgid "coating-type.archival-glossy" msgstr "Archival Glossy" msgid "coating-type.archival-matte" msgstr "Archival Matte" msgid "coating-type.archival-semi-gloss" msgstr "Archival Semi Gloss" msgid "coating-type.glossy" msgstr "Glossy" msgid "coating-type.high-gloss" msgstr "High Gloss" msgid "coating-type.matte" msgstr "Matte" msgid "coating-type.semi-gloss" msgstr "Semi-Gloss" msgid "coating-type.silicone" msgstr "Silicone" msgid "coating-type.translucent" msgstr "Translucent" msgid "completed" msgstr "dokonÄeno" msgid "confirmation-sheet-print" msgstr "Confirmation Sheet Print" msgid "copies" msgstr "Copies" msgid "cover-back" msgstr "Cover Back" msgid "cover-front" msgstr "Cover Front" msgid "cover-sheet-info" msgstr "Cover Sheet Info" msgid "cover-sheet-info-supported.date-time" msgstr "Date Time" msgid "cover-sheet-info-supported.from-name" msgstr "From Name" msgid "cover-sheet-info-supported.logo" msgstr "Logo" msgid "cover-sheet-info-supported.message" msgstr "Message" msgid "cover-sheet-info-supported.organization" msgstr "Organization" msgid "cover-sheet-info-supported.subject" msgstr "Subject" msgid "cover-sheet-info-supported.to-name" msgstr "To Name" msgid "cover-type" msgstr "Cover Type" msgid "cover-type.no-cover" msgstr "No Cover" msgid "cover-type.print-back" msgstr "Print Back" msgid "cover-type.print-both" msgstr "Print Both" msgid "cover-type.print-front" msgstr "Print Front" msgid "cover-type.print-none" msgstr "Print None" msgid "covering" msgstr "Cover Output" msgid "covering-name" msgstr "Covering Name" msgid "covering-name.plain" msgstr "Plain" msgid "covering-name.pre-cut" msgstr "Pre Cut" msgid "covering-name.pre-printed" msgstr "Pre Printed" msgid "cups-deviced failed to execute." msgstr "NepodaÅ™ilo se spustit \"cups-deviced\"." msgid "cups-driverd failed to execute." msgstr "NepodaÅ™ilo se spustit \"cups-driverd\"." #, c-format msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "" msgid "cupsctl: Cannot set Listen or Port directly." msgstr "" #, c-format msgid "cupsctl: Unable to connect to server: %s" msgstr "" #, c-format msgid "cupsctl: Unknown option \"%s\"" msgstr "" #, c-format msgid "cupsctl: Unknown option \"-%c\"" msgstr "" msgid "cupsd: Expected config filename after \"-c\" option." msgstr "" msgid "cupsd: Expected cups-files.conf filename after \"-s\" option." msgstr "" msgid "cupsd: On-demand support not compiled in, running in normal mode." msgstr "" msgid "cupsd: Relative cups-files.conf filename not allowed." msgstr "" msgid "cupsd: Unable to get current directory." msgstr "" msgid "cupsd: Unable to get path to cups-files.conf file." msgstr "" #, c-format msgid "cupsd: Unknown argument \"%s\" - aborting." msgstr "" #, c-format msgid "cupsd: Unknown option \"%c\" - aborting." msgstr "" #, c-format msgid "cupsfilter: Invalid document number %d." msgstr "" #, c-format msgid "cupsfilter: Invalid job ID %d." msgstr "" msgid "cupsfilter: Only one filename can be specified." msgstr "" #, c-format msgid "cupsfilter: Unable to get job file - %s" msgstr "" msgid "cupstestppd: The -q option is incompatible with the -v option." msgstr "" msgid "cupstestppd: The -v option is incompatible with the -q option." msgstr "" msgid "detailed-status-message" msgstr "Detailed Status Message" #, c-format msgid "device for %s/%s: %s" msgstr "" #, c-format msgid "device for %s: %s" msgstr "" msgid "document-copies" msgstr "Copies" msgid "document-state" msgstr "Document State" msgid "document-state-reasons" msgstr "Detailed Document State" msgid "document-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "document-state-reasons.canceled-at-device" msgstr "Canceled At Device" msgid "document-state-reasons.canceled-by-operator" msgstr "Canceled By Operator" msgid "document-state-reasons.canceled-by-user" msgstr "Canceled By User" msgid "document-state-reasons.completed-successfully" msgstr "Completed Successfully" msgid "document-state-reasons.completed-with-errors" msgstr "Completed With Errors" msgid "document-state-reasons.completed-with-warnings" msgstr "Completed With Warnings" msgid "document-state-reasons.compression-error" msgstr "Compression Error" msgid "document-state-reasons.data-insufficient" msgstr "Data Insufficient" msgid "document-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "document-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "document-state-reasons.digital-signature-wait" msgstr "Digital Signature Wait" msgid "document-state-reasons.document-access-error" msgstr "Document Access Error" msgid "document-state-reasons.document-fetchable" msgstr "Document Fetchable" msgid "document-state-reasons.document-format-error" msgstr "Document Format Error" msgid "document-state-reasons.document-password-error" msgstr "Document Password Error" msgid "document-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "document-state-reasons.document-security-error" msgstr "Document Security Error" msgid "document-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "document-state-reasons.errors-detected" msgstr "Errors Detected" msgid "document-state-reasons.incoming" msgstr "Incoming" msgid "document-state-reasons.interpreting" msgstr "Interpreting" msgid "document-state-reasons.none" msgstr "None" msgid "document-state-reasons.outgoing" msgstr "Outgoing" msgid "document-state-reasons.printing" msgstr "Printing" msgid "document-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "document-state-reasons.queued" msgstr "Queued" msgid "document-state-reasons.queued-for-marker" msgstr "Queued For Marker" msgid "document-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "document-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "document-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "document-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "document-state-reasons.transforming" msgstr "Transforming" msgid "document-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "document-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "document-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "document-state.3" msgstr "Pending" msgid "document-state.5" msgstr "Processing" msgid "document-state.6" msgstr "Processing Stopped" msgid "document-state.7" msgstr "Canceled" msgid "document-state.8" msgstr "Aborted" msgid "document-state.9" msgstr "Completed" msgid "error-index uses indefinite length" msgstr "\"error-index\" má neomezenou délku" msgid "error-status uses indefinite length" msgstr "\"error-status\" má neomezenou délku" msgid "feed-orientation" msgstr "Feed Orientation" msgid "feed-orientation.long-edge-first" msgstr "Long Edge First" msgid "feed-orientation.short-edge-first" msgstr "Short Edge First" msgid "fetch-status-code" msgstr "Fetch Status Code" msgid "finishing-template" msgstr "Finishing Template" msgid "finishing-template.bale" msgstr "Bale" msgid "finishing-template.bind" msgstr "Bind" msgid "finishing-template.bind-bottom" msgstr "Bind Bottom" msgid "finishing-template.bind-left" msgstr "Bind Left" msgid "finishing-template.bind-right" msgstr "Bind Right" msgid "finishing-template.bind-top" msgstr "Bind Top" msgid "finishing-template.booklet-maker" msgstr "Booklet Maker" msgid "finishing-template.coat" msgstr "Coat" msgid "finishing-template.cover" msgstr "Cover" msgid "finishing-template.edge-stitch" msgstr "Edge Stitch" msgid "finishing-template.edge-stitch-bottom" msgstr "Edge Stitch Bottom" msgid "finishing-template.edge-stitch-left" msgstr "Edge Stitch Left" msgid "finishing-template.edge-stitch-right" msgstr "Edge Stitch Right" msgid "finishing-template.edge-stitch-top" msgstr "Edge Stitch Top" msgid "finishing-template.fold" msgstr "Fold" msgid "finishing-template.fold-accordion" msgstr "Fold Accordion" msgid "finishing-template.fold-double-gate" msgstr "Fold Double Gate" msgid "finishing-template.fold-engineering-z" msgstr "Fold Engineering Z" msgid "finishing-template.fold-gate" msgstr "Fold Gate" msgid "finishing-template.fold-half" msgstr "Fold Half" msgid "finishing-template.fold-half-z" msgstr "Fold Half Z" msgid "finishing-template.fold-left-gate" msgstr "Fold Left Gate" msgid "finishing-template.fold-letter" msgstr "Fold Letter" msgid "finishing-template.fold-parallel" msgstr "Fold Parallel" msgid "finishing-template.fold-poster" msgstr "Fold Poster" msgid "finishing-template.fold-right-gate" msgstr "Fold Right Gate" msgid "finishing-template.fold-z" msgstr "Fold Z" msgid "finishing-template.jdf-f10-1" msgstr "JDF F10 1" msgid "finishing-template.jdf-f10-2" msgstr "JDF F10 2" msgid "finishing-template.jdf-f10-3" msgstr "JDF F10 3" msgid "finishing-template.jdf-f12-1" msgstr "JDF F12 1" msgid "finishing-template.jdf-f12-10" msgstr "JDF F12 10" msgid "finishing-template.jdf-f12-11" msgstr "JDF F12 11" msgid "finishing-template.jdf-f12-12" msgstr "JDF F12 12" msgid "finishing-template.jdf-f12-13" msgstr "JDF F12 13" msgid "finishing-template.jdf-f12-14" msgstr "JDF F12 14" msgid "finishing-template.jdf-f12-2" msgstr "JDF F12 2" msgid "finishing-template.jdf-f12-3" msgstr "JDF F12 3" msgid "finishing-template.jdf-f12-4" msgstr "JDF F12 4" msgid "finishing-template.jdf-f12-5" msgstr "JDF F12 5" msgid "finishing-template.jdf-f12-6" msgstr "JDF F12 6" msgid "finishing-template.jdf-f12-7" msgstr "JDF F12 7" msgid "finishing-template.jdf-f12-8" msgstr "JDF F12 8" msgid "finishing-template.jdf-f12-9" msgstr "JDF F12 9" msgid "finishing-template.jdf-f14-1" msgstr "JDF F14 1" msgid "finishing-template.jdf-f16-1" msgstr "JDF F16 1" msgid "finishing-template.jdf-f16-10" msgstr "JDF F16 10" msgid "finishing-template.jdf-f16-11" msgstr "JDF F16 11" msgid "finishing-template.jdf-f16-12" msgstr "JDF F16 12" msgid "finishing-template.jdf-f16-13" msgstr "JDF F16 13" msgid "finishing-template.jdf-f16-14" msgstr "JDF F16 14" msgid "finishing-template.jdf-f16-2" msgstr "JDF F16 2" msgid "finishing-template.jdf-f16-3" msgstr "JDF F16 3" msgid "finishing-template.jdf-f16-4" msgstr "JDF F16 4" msgid "finishing-template.jdf-f16-5" msgstr "JDF F16 5" msgid "finishing-template.jdf-f16-6" msgstr "JDF F16 6" msgid "finishing-template.jdf-f16-7" msgstr "JDF F16 7" msgid "finishing-template.jdf-f16-8" msgstr "JDF F16 8" msgid "finishing-template.jdf-f16-9" msgstr "JDF F16 9" msgid "finishing-template.jdf-f18-1" msgstr "JDF F18 1" msgid "finishing-template.jdf-f18-2" msgstr "JDF F18 2" msgid "finishing-template.jdf-f18-3" msgstr "JDF F18 3" msgid "finishing-template.jdf-f18-4" msgstr "JDF F18 4" msgid "finishing-template.jdf-f18-5" msgstr "JDF F18 5" msgid "finishing-template.jdf-f18-6" msgstr "JDF F18 6" msgid "finishing-template.jdf-f18-7" msgstr "JDF F18 7" msgid "finishing-template.jdf-f18-8" msgstr "JDF F18 8" msgid "finishing-template.jdf-f18-9" msgstr "JDF F18 9" msgid "finishing-template.jdf-f2-1" msgstr "JDF F2 1" msgid "finishing-template.jdf-f20-1" msgstr "JDF F20 1" msgid "finishing-template.jdf-f20-2" msgstr "JDF F20 2" msgid "finishing-template.jdf-f24-1" msgstr "JDF F24 1" msgid "finishing-template.jdf-f24-10" msgstr "JDF F24 10" msgid "finishing-template.jdf-f24-11" msgstr "JDF F24 11" msgid "finishing-template.jdf-f24-2" msgstr "JDF F24 2" msgid "finishing-template.jdf-f24-3" msgstr "JDF F24 3" msgid "finishing-template.jdf-f24-4" msgstr "JDF F24 4" msgid "finishing-template.jdf-f24-5" msgstr "JDF F24 5" msgid "finishing-template.jdf-f24-6" msgstr "JDF F24 6" msgid "finishing-template.jdf-f24-7" msgstr "JDF F24 7" msgid "finishing-template.jdf-f24-8" msgstr "JDF F24 8" msgid "finishing-template.jdf-f24-9" msgstr "JDF F24 9" msgid "finishing-template.jdf-f28-1" msgstr "JDF F28 1" msgid "finishing-template.jdf-f32-1" msgstr "JDF F32 1" msgid "finishing-template.jdf-f32-2" msgstr "JDF F32 2" msgid "finishing-template.jdf-f32-3" msgstr "JDF F32 3" msgid "finishing-template.jdf-f32-4" msgstr "JDF F32 4" msgid "finishing-template.jdf-f32-5" msgstr "JDF F32 5" msgid "finishing-template.jdf-f32-6" msgstr "JDF F32 6" msgid "finishing-template.jdf-f32-7" msgstr "JDF F32 7" msgid "finishing-template.jdf-f32-8" msgstr "JDF F32 8" msgid "finishing-template.jdf-f32-9" msgstr "JDF F32 9" msgid "finishing-template.jdf-f36-1" msgstr "JDF F36 1" msgid "finishing-template.jdf-f36-2" msgstr "JDF F36 2" msgid "finishing-template.jdf-f4-1" msgstr "JDF F4 1" msgid "finishing-template.jdf-f4-2" msgstr "JDF F4 2" msgid "finishing-template.jdf-f40-1" msgstr "JDF F40 1" msgid "finishing-template.jdf-f48-1" msgstr "JDF F48 1" msgid "finishing-template.jdf-f48-2" msgstr "JDF F48 2" msgid "finishing-template.jdf-f6-1" msgstr "JDF F6 1" msgid "finishing-template.jdf-f6-2" msgstr "JDF F6 2" msgid "finishing-template.jdf-f6-3" msgstr "JDF F6 3" msgid "finishing-template.jdf-f6-4" msgstr "JDF F6 4" msgid "finishing-template.jdf-f6-5" msgstr "JDF F6 5" msgid "finishing-template.jdf-f6-6" msgstr "JDF F6 6" msgid "finishing-template.jdf-f6-7" msgstr "JDF F6 7" msgid "finishing-template.jdf-f6-8" msgstr "JDF F6 8" msgid "finishing-template.jdf-f64-1" msgstr "JDF F64 1" msgid "finishing-template.jdf-f64-2" msgstr "JDF F64 2" msgid "finishing-template.jdf-f8-1" msgstr "JDF F8 1" msgid "finishing-template.jdf-f8-2" msgstr "JDF F8 2" msgid "finishing-template.jdf-f8-3" msgstr "JDF F8 3" msgid "finishing-template.jdf-f8-4" msgstr "JDF F8 4" msgid "finishing-template.jdf-f8-5" msgstr "JDF F8 5" msgid "finishing-template.jdf-f8-6" msgstr "JDF F8 6" msgid "finishing-template.jdf-f8-7" msgstr "JDF F8 7" msgid "finishing-template.jog-offset" msgstr "Jog Offset" msgid "finishing-template.laminate" msgstr "Laminate" msgid "finishing-template.punch" msgstr "Punch" msgid "finishing-template.punch-bottom-left" msgstr "Punch Bottom Left" msgid "finishing-template.punch-bottom-right" msgstr "Punch Bottom Right" msgid "finishing-template.punch-dual-bottom" msgstr "Punch Dual Bottom" msgid "finishing-template.punch-dual-left" msgstr "Punch Dual Left" msgid "finishing-template.punch-dual-right" msgstr "Punch Dual Right" msgid "finishing-template.punch-dual-top" msgstr "Punch Dual Top" msgid "finishing-template.punch-multiple-bottom" msgstr "Punch Multiple Bottom" msgid "finishing-template.punch-multiple-left" msgstr "Punch Multiple Left" msgid "finishing-template.punch-multiple-right" msgstr "Punch Multiple Right" msgid "finishing-template.punch-multiple-top" msgstr "Punch Multiple Top" msgid "finishing-template.punch-quad-bottom" msgstr "Punch Quad Bottom" msgid "finishing-template.punch-quad-left" msgstr "Punch Quad Left" msgid "finishing-template.punch-quad-right" msgstr "Punch Quad Right" msgid "finishing-template.punch-quad-top" msgstr "Punch Quad Top" msgid "finishing-template.punch-top-left" msgstr "Punch Top Left" msgid "finishing-template.punch-top-right" msgstr "Punch Top Right" msgid "finishing-template.punch-triple-bottom" msgstr "Punch Triple Bottom" msgid "finishing-template.punch-triple-left" msgstr "Punch Triple Left" msgid "finishing-template.punch-triple-right" msgstr "Punch Triple Right" msgid "finishing-template.punch-triple-top" msgstr "Punch Triple Top" msgid "finishing-template.saddle-stitch" msgstr "Saddle Stitch" msgid "finishing-template.staple" msgstr "Staple" msgid "finishing-template.staple-bottom-left" msgstr "Staple Bottom Left" msgid "finishing-template.staple-bottom-right" msgstr "Staple Bottom Right" msgid "finishing-template.staple-dual-bottom" msgstr "Staple Dual Bottom" msgid "finishing-template.staple-dual-left" msgstr "Staple Dual Left" msgid "finishing-template.staple-dual-right" msgstr "Staple Dual Right" msgid "finishing-template.staple-dual-top" msgstr "Staple Dual Top" msgid "finishing-template.staple-top-left" msgstr "Staple Top Left" msgid "finishing-template.staple-top-right" msgstr "Staple Top Right" msgid "finishing-template.staple-triple-bottom" msgstr "Staple Triple Bottom" msgid "finishing-template.staple-triple-left" msgstr "Staple Triple Left" msgid "finishing-template.staple-triple-right" msgstr "Staple Triple Right" msgid "finishing-template.staple-triple-top" msgstr "Staple Triple Top" msgid "finishing-template.trim" msgstr "Trim" msgid "finishing-template.trim-after-copies" msgstr "Trim After Copies" msgid "finishing-template.trim-after-documents" msgstr "Trim After Documents" msgid "finishing-template.trim-after-job" msgstr "Trim After Job" msgid "finishing-template.trim-after-pages" msgstr "Trim After Pages" msgid "finishings" msgstr "Finishings" msgid "finishings-col" msgstr "Finishings" msgid "finishings.10" msgstr "Fold" msgid "finishings.100" msgstr "Fold Z" msgid "finishings.101" msgstr "Fold Engineering Z" msgid "finishings.11" msgstr "Trim" msgid "finishings.12" msgstr "Bale" msgid "finishings.13" msgstr "Booklet Maker" msgid "finishings.14" msgstr "Jog Offset" msgid "finishings.15" msgstr "Coat" msgid "finishings.16" msgstr "Laminate" msgid "finishings.20" msgstr "Staple Top Left" msgid "finishings.21" msgstr "Staple Bottom Left" msgid "finishings.22" msgstr "Staple Top Right" msgid "finishings.23" msgstr "Staple Bottom Right" msgid "finishings.24" msgstr "Edge Stitch Left" msgid "finishings.25" msgstr "Edge Stitch Top" msgid "finishings.26" msgstr "Edge Stitch Right" msgid "finishings.27" msgstr "Edge Stitch Bottom" msgid "finishings.28" msgstr "Staple Dual Left" msgid "finishings.29" msgstr "Staple Dual Top" msgid "finishings.3" msgstr "None" msgid "finishings.30" msgstr "Staple Dual Right" msgid "finishings.31" msgstr "Staple Dual Bottom" msgid "finishings.32" msgstr "Staple Triple Left" msgid "finishings.33" msgstr "Staple Triple Top" msgid "finishings.34" msgstr "Staple Triple Right" msgid "finishings.35" msgstr "Staple Triple Bottom" msgid "finishings.4" msgstr "Staple" msgid "finishings.5" msgstr "Punch" msgid "finishings.50" msgstr "Bind Left" msgid "finishings.51" msgstr "Bind Top" msgid "finishings.52" msgstr "Bind Right" msgid "finishings.53" msgstr "Bind Bottom" msgid "finishings.6" msgstr "Cover" msgid "finishings.60" msgstr "Trim After Pages" msgid "finishings.61" msgstr "Trim After Documents" msgid "finishings.62" msgstr "Trim After Copies" msgid "finishings.63" msgstr "Trim After Job" msgid "finishings.7" msgstr "Bind" msgid "finishings.70" msgstr "Punch Top Left" msgid "finishings.71" msgstr "Punch Bottom Left" msgid "finishings.72" msgstr "Punch Top Right" msgid "finishings.73" msgstr "Punch Bottom Right" msgid "finishings.74" msgstr "Punch Dual Left" msgid "finishings.75" msgstr "Punch Dual Top" msgid "finishings.76" msgstr "Punch Dual Right" msgid "finishings.77" msgstr "Punch Dual Bottom" msgid "finishings.78" msgstr "Punch Triple Left" msgid "finishings.79" msgstr "Punch Triple Top" msgid "finishings.8" msgstr "Saddle Stitch" msgid "finishings.80" msgstr "Punch Triple Right" msgid "finishings.81" msgstr "Punch Triple Bottom" msgid "finishings.82" msgstr "Punch Quad Left" msgid "finishings.83" msgstr "Punch Quad Top" msgid "finishings.84" msgstr "Punch Quad Right" msgid "finishings.85" msgstr "Punch Quad Bottom" msgid "finishings.86" msgstr "Punch Multiple Left" msgid "finishings.87" msgstr "Punch Multiple Top" msgid "finishings.88" msgstr "Punch Multiple Right" msgid "finishings.89" msgstr "Punch Multiple Bottom" msgid "finishings.9" msgstr "Edge Stitch" msgid "finishings.90" msgstr "Fold Accordion" msgid "finishings.91" msgstr "Fold Double Gate" msgid "finishings.92" msgstr "Fold Gate" msgid "finishings.93" msgstr "Fold Half" msgid "finishings.94" msgstr "Fold Half Z" msgid "finishings.95" msgstr "Fold Left Gate" msgid "finishings.96" msgstr "Fold Letter" msgid "finishings.97" msgstr "Fold Parallel" msgid "finishings.98" msgstr "Fold Poster" msgid "finishings.99" msgstr "Fold Right Gate" msgid "folding" msgstr "Fold" msgid "folding-direction" msgstr "Folding Direction" msgid "folding-direction.inward" msgstr "Inward" msgid "folding-direction.outward" msgstr "Outward" msgid "folding-offset" msgstr "Fold Position" msgid "folding-reference-edge" msgstr "Folding Reference Edge" msgid "folding-reference-edge.bottom" msgstr "Bottom" msgid "folding-reference-edge.left" msgstr "Left" msgid "folding-reference-edge.right" msgstr "Right" msgid "folding-reference-edge.top" msgstr "Top" msgid "font-name-requested" msgstr "Font Name" msgid "font-size-requested" msgstr "Font Size" msgid "force-front-side" msgstr "Force Front Side" msgid "from-name" msgstr "From Name" msgid "held" msgstr "pozastaveno" msgid "help\t\tGet help on commands." msgstr "" msgid "idle" msgstr "Äeká" msgid "imposition-template" msgstr "Imposition Template" msgid "imposition-template.none" msgstr "None" msgid "imposition-template.signature" msgstr "Signature" msgid "input-attributes" msgstr "Input Attributes" msgid "input-auto-scaling" msgstr "Scan Auto Scaling" msgid "input-auto-skew-correction" msgstr "Scan Auto Skew Correction" msgid "input-brightness" msgstr "Scan Brightness" msgid "input-color-mode" msgstr "Input Color Mode" msgid "input-color-mode.auto" msgstr "Automatic" msgid "input-color-mode.bi-level" msgstr "Bi-Level" msgid "input-color-mode.cmyk_16" msgstr "CMYK 16" msgid "input-color-mode.cmyk_8" msgstr "CMYK 8" msgid "input-color-mode.color" msgstr "Color" msgid "input-color-mode.color_8" msgstr "Color 8" msgid "input-color-mode.monochrome" msgstr "Monochrome" msgid "input-color-mode.monochrome_16" msgstr "Monochrome 16" msgid "input-color-mode.monochrome_4" msgstr "Monochrome 4" msgid "input-color-mode.monochrome_8" msgstr "Monochrome 8" msgid "input-color-mode.rgb_16" msgstr "RGB 16" msgid "input-color-mode.rgba_16" msgstr "RGBA 16" msgid "input-color-mode.rgba_8" msgstr "RGBA 8" msgid "input-content-type" msgstr "Input Content Type" msgid "input-content-type.auto" msgstr "Automatic" msgid "input-content-type.halftone" msgstr "Halftone" msgid "input-content-type.line-art" msgstr "Line Art" msgid "input-content-type.magazine" msgstr "Magazine" msgid "input-content-type.photo" msgstr "Photo" msgid "input-content-type.text" msgstr "Text" msgid "input-content-type.text-and-photo" msgstr "Text And Photo" msgid "input-contrast" msgstr "Scan Contrast" msgid "input-film-scan-mode" msgstr "Input Film Scan Mode" msgid "input-film-scan-mode.black-and-white-negative-film" msgstr "Black And White Negative Film" msgid "input-film-scan-mode.color-negative-film" msgstr "Color Negative Film" msgid "input-film-scan-mode.color-slide-film" msgstr "Color Slide Film" msgid "input-film-scan-mode.not-applicable" msgstr "Not Applicable" msgid "input-images-to-transfer" msgstr "Scan Images To Transfer" msgid "input-media" msgstr "Input Media" msgid "input-media.auto" msgstr "Automatic" msgid "input-orientation-requested" msgstr "Input Orientation" msgid "input-quality" msgstr "Input Quality" msgid "input-resolution" msgstr "Scan Resolution" msgid "input-scaling-height" msgstr "Scan Scaling Height" msgid "input-scaling-width" msgstr "Scan Scaling Width" msgid "input-scan-regions" msgstr "Scan Regions" msgid "input-sharpness" msgstr "Scan Sharpness" msgid "input-sides" msgstr "Input Sides" msgid "input-source" msgstr "Input Source" msgid "input-source.adf" msgstr "Adf" msgid "input-source.film-reader" msgstr "Film Reader" msgid "input-source.platen" msgstr "Platen" msgid "insert-after-page-number" msgstr "Insert Page Number" msgid "insert-count" msgstr "Insert Count" msgid "insert-sheet" msgstr "Insert Sheet" #, c-format msgid "ippfind: Bad regular expression: %s" msgstr "" msgid "ippfind: Cannot use --and after --or." msgstr "" #, c-format msgid "ippfind: Expected key name after %s." msgstr "" #, c-format msgid "ippfind: Expected port range after %s." msgstr "" #, c-format msgid "ippfind: Expected program after %s." msgstr "" #, c-format msgid "ippfind: Expected semi-colon after %s." msgstr "" msgid "ippfind: Missing close brace in substitution." msgstr "" msgid "ippfind: Missing close parenthesis." msgstr "" msgid "ippfind: Missing expression before \"--and\"." msgstr "" msgid "ippfind: Missing expression before \"--or\"." msgstr "" #, c-format msgid "ippfind: Missing key name after %s." msgstr "" msgid "ippfind: Missing open parenthesis." msgstr "" #, c-format msgid "ippfind: Missing program after %s." msgstr "" #, c-format msgid "ippfind: Missing regular expression after %s." msgstr "" #, c-format msgid "ippfind: Missing semi-colon after %s." msgstr "" msgid "ippfind: Out of memory." msgstr "" msgid "ippfind: Too many parenthesis." msgstr "" #, c-format msgid "ippfind: Unable to browse or resolve: %s" msgstr "" #, c-format msgid "ippfind: Unable to execute \"%s\": %s" msgstr "" #, c-format msgid "ippfind: Unable to use Bonjour: %s" msgstr "" #, c-format msgid "ippfind: Unknown variable \"{%s}\"." msgstr "" msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." msgstr "" #, c-format msgid "ipptool: Bad URI - %s." msgstr "" msgid "ipptool: Invalid seconds for \"-i\"." msgstr "" msgid "ipptool: May only specify a single URI." msgstr "" msgid "ipptool: Missing count for \"-n\"." msgstr "" msgid "ipptool: Missing filename for \"-f\"." msgstr "" msgid "ipptool: Missing name=value for \"-d\"." msgstr "" msgid "ipptool: Missing seconds for \"-i\"." msgstr "" msgid "ipptool: URI required before test file." msgstr "" #, c-format msgid "ipptool: Unknown option \"-%c\"." msgstr "" msgid "job-account-id" msgstr "Job Account ID" msgid "job-account-type" msgstr "Job Account Type" msgid "job-account-type.general" msgstr "General" msgid "job-account-type.group" msgstr "Group" msgid "job-account-type.none" msgstr "None" msgid "job-accounting-output-bin" msgstr "Job Accounting Output Bin" msgid "job-accounting-sheets" msgstr "Job Accounting Sheets" msgid "job-accounting-sheets-type" msgstr "Job Accounting Sheets Type" msgid "job-accounting-sheets-type.none" msgstr "None" msgid "job-accounting-sheets-type.standard" msgstr "Standard" msgid "job-accounting-user-id" msgstr "Job Accounting User ID" msgid "job-collation-type" msgstr "Job Collation Type" msgid "job-collation-type.3" msgstr "Uncollated Sheets" msgid "job-collation-type.4" msgstr "Collated Documents" msgid "job-collation-type.5" msgstr "Uncollated Documents" msgid "job-copies" msgstr "Job Copies" msgid "job-cover-back" msgstr "Job Cover Back" msgid "job-cover-front" msgstr "Job Cover Front" msgid "job-delay-output-until" msgstr "Job Delay Output Until" msgid "job-delay-output-until-time" msgstr "Job Delay Output Until Time" msgid "job-delay-output-until.day-time" msgstr "Day Time" msgid "job-delay-output-until.evening" msgstr "Evening" msgid "job-delay-output-until.indefinite" msgstr "Indefinite" msgid "job-delay-output-until.night" msgstr "Night" msgid "job-delay-output-until.no-delay-output" msgstr "No Delay Output" msgid "job-delay-output-until.second-shift" msgstr "Second Shift" msgid "job-delay-output-until.third-shift" msgstr "Third Shift" msgid "job-delay-output-until.weekend" msgstr "Weekend" msgid "job-error-action" msgstr "Job Error Action" msgid "job-error-action.abort-job" msgstr "Abort Job" msgid "job-error-action.cancel-job" msgstr "Cancel Job" msgid "job-error-action.continue-job" msgstr "Continue Job" msgid "job-error-action.suspend-job" msgstr "Suspend Job" msgid "job-error-sheet" msgstr "Job Error Sheet" msgid "job-error-sheet-type" msgstr "Job Error Sheet Type" msgid "job-error-sheet-type.none" msgstr "None" msgid "job-error-sheet-type.standard" msgstr "Standard" msgid "job-error-sheet-when" msgstr "Job Error Sheet When" msgid "job-error-sheet-when.always" msgstr "Always" msgid "job-error-sheet-when.on-error" msgstr "On Error" msgid "job-finishings" msgstr "Job Finishings" msgid "job-hold-until" msgstr "Hold Until" msgid "job-hold-until-time" msgstr "Job Hold Until Time" msgid "job-hold-until.day-time" msgstr "Day Time" msgid "job-hold-until.evening" msgstr "Evening" msgid "job-hold-until.indefinite" msgstr "Released" msgid "job-hold-until.night" msgstr "Night" msgid "job-hold-until.no-hold" msgstr "No Hold" msgid "job-hold-until.second-shift" msgstr "Second Shift" msgid "job-hold-until.third-shift" msgstr "Third Shift" msgid "job-hold-until.weekend" msgstr "Weekend" msgid "job-mandatory-attributes" msgstr "Job Mandatory Attributes" msgid "job-name" msgstr "Job Name" msgid "job-phone-number" msgstr "Job Phone Number" msgid "job-printer-uri attribute missing." msgstr "" msgid "job-priority" msgstr "Job Priority" msgid "job-recipient-name" msgstr "Job Recipient Name" msgid "job-save-disposition" msgstr "Job Save Disposition" msgid "job-sheet-message" msgstr "Job Sheet Message" msgid "job-sheets" msgstr "Banner Page" msgid "job-sheets-col" msgstr "Banner Page" msgid "job-sheets.first-print-stream-page" msgstr "First Print Stream Page" msgid "job-sheets.job-both-sheet" msgstr "Start and End Sheets" msgid "job-sheets.job-end-sheet" msgstr "End Sheet" msgid "job-sheets.job-start-sheet" msgstr "Start Sheet" msgid "job-sheets.none" msgstr "None" msgid "job-sheets.standard" msgstr "Standard" msgid "job-state" msgstr "Job State" msgid "job-state-message" msgstr "Job State Message" msgid "job-state-reasons" msgstr "Detailed Job State" msgid "job-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "job-state-reasons.account-authorization-failed" msgstr "Account Authorization Failed" msgid "job-state-reasons.account-closed" msgstr "Account Closed" msgid "job-state-reasons.account-info-needed" msgstr "Account Info Needed" msgid "job-state-reasons.account-limit-reached" msgstr "Account Limit Reached" msgid "job-state-reasons.compression-error" msgstr "Compression Error" msgid "job-state-reasons.conflicting-attributes" msgstr "Conflicting Attributes" msgid "job-state-reasons.connected-to-destination" msgstr "Connected To Destination" msgid "job-state-reasons.connecting-to-destination" msgstr "Connecting To Destination" msgid "job-state-reasons.destination-uri-failed" msgstr "Destination Uri Failed" msgid "job-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "job-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "job-state-reasons.document-access-error" msgstr "Document Access Error" msgid "job-state-reasons.document-format-error" msgstr "Document Format Error" msgid "job-state-reasons.document-password-error" msgstr "Document Password Error" msgid "job-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "job-state-reasons.document-security-error" msgstr "Document Security Error" msgid "job-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "job-state-reasons.errors-detected" msgstr "Errors Detected" msgid "job-state-reasons.job-canceled-at-device" msgstr "Job Canceled At Device" msgid "job-state-reasons.job-canceled-by-operator" msgstr "Job Canceled By Operator" msgid "job-state-reasons.job-canceled-by-user" msgstr "Job Canceled By User" msgid "job-state-reasons.job-completed-successfully" msgstr "Job Completed Successfully" msgid "job-state-reasons.job-completed-with-errors" msgstr "Job Completed With Errors" msgid "job-state-reasons.job-completed-with-warnings" msgstr "Job Completed With Warnings" msgid "job-state-reasons.job-data-insufficient" msgstr "Job Data Insufficient" msgid "job-state-reasons.job-delay-output-until-specified" msgstr "Job Delay Output Until Specified" msgid "job-state-reasons.job-digital-signature-wait" msgstr "Job Digital Signature Wait" msgid "job-state-reasons.job-fetchable" msgstr "Job Fetchable" msgid "job-state-reasons.job-held-for-review" msgstr "Job Held For Review" msgid "job-state-reasons.job-hold-until-specified" msgstr "Job Hold Until Specified" msgid "job-state-reasons.job-incoming" msgstr "Job Incoming" msgid "job-state-reasons.job-interpreting" msgstr "Job Interpreting" msgid "job-state-reasons.job-outgoing" msgstr "Job Outgoing" msgid "job-state-reasons.job-password-wait" msgstr "Job Password Wait" msgid "job-state-reasons.job-printed-successfully" msgstr "Job Printed Successfully" msgid "job-state-reasons.job-printed-with-errors" msgstr "Job Printed With Errors" msgid "job-state-reasons.job-printed-with-warnings" msgstr "Job Printed With Warnings" msgid "job-state-reasons.job-printing" msgstr "Job Printing" msgid "job-state-reasons.job-queued" msgstr "Job Queued" msgid "job-state-reasons.job-queued-for-marker" msgstr "Job Queued For Marker" msgid "job-state-reasons.job-release-wait" msgstr "Job Release Wait" msgid "job-state-reasons.job-restartable" msgstr "Job Restartable" msgid "job-state-reasons.job-resuming" msgstr "Job Resuming" msgid "job-state-reasons.job-saved-successfully" msgstr "Job Saved Successfully" msgid "job-state-reasons.job-saved-with-errors" msgstr "Job Saved With Errors" msgid "job-state-reasons.job-saved-with-warnings" msgstr "Job Saved With Warnings" msgid "job-state-reasons.job-saving" msgstr "Job Saving" msgid "job-state-reasons.job-spooling" msgstr "Job Spooling" msgid "job-state-reasons.job-streaming" msgstr "Job Streaming" msgid "job-state-reasons.job-suspended" msgstr "Job Suspended" msgid "job-state-reasons.job-suspended-by-operator" msgstr "Job Suspended By Operator" msgid "job-state-reasons.job-suspended-by-system" msgstr "Job Suspended By System" msgid "job-state-reasons.job-suspended-by-user" msgstr "Job Suspended By User" msgid "job-state-reasons.job-suspending" msgstr "Job Suspending" msgid "job-state-reasons.job-transferring" msgstr "Job Transferring" msgid "job-state-reasons.job-transforming" msgstr "Job Transforming" msgid "job-state-reasons.none" msgstr "None" msgid "job-state-reasons.printer-stopped" msgstr "Printer Stopped" msgid "job-state-reasons.printer-stopped-partly" msgstr "Printer Stopped Partly" msgid "job-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "job-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "job-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "job-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "job-state-reasons.service-off-line" msgstr "Service Off Line" msgid "job-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "job-state-reasons.unsupported-attributes-or-values" msgstr "Unsupported Attributes Or Values" msgid "job-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "job-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "job-state-reasons.waiting-for-user-action" msgstr "Waiting For User Action" msgid "job-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "job-state.3" msgstr "Pending" msgid "job-state.4" msgstr "Pending Held" msgid "job-state.5" msgstr "Processing" msgid "job-state.6" msgstr "Processing Stopped" msgid "job-state.7" msgstr "Canceled" msgid "job-state.8" msgstr "Aborted" msgid "job-state.9" msgstr "Completed" msgid "laminating" msgstr "Laminate Pages" msgid "laminating-sides" msgstr "Laminating Sides" msgid "laminating-sides.back" msgstr "Back" msgid "laminating-sides.both" msgstr "Both" msgid "laminating-sides.front" msgstr "Front" msgid "laminating-type" msgstr "Laminating Type" msgid "laminating-type.archival" msgstr "Archival" msgid "laminating-type.glossy" msgstr "Glossy" msgid "laminating-type.high-gloss" msgstr "High Gloss" msgid "laminating-type.matte" msgstr "Matte" msgid "laminating-type.semi-gloss" msgstr "Semi-Gloss" msgid "laminating-type.translucent" msgstr "Translucent" msgid "logo" msgstr "Logo" msgid "lpadmin: Class name can only contain printable characters." msgstr "" #, c-format msgid "lpadmin: Expected PPD after \"-%c\" option." msgstr "" msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option." msgstr "" msgid "lpadmin: Expected class after \"-r\" option." msgstr "" msgid "lpadmin: Expected class name after \"-c\" option." msgstr "" msgid "lpadmin: Expected description after \"-D\" option." msgstr "" msgid "lpadmin: Expected device URI after \"-v\" option." msgstr "" msgid "lpadmin: Expected file type(s) after \"-I\" option." msgstr "" msgid "lpadmin: Expected hostname after \"-h\" option." msgstr "" msgid "lpadmin: Expected location after \"-L\" option." msgstr "" msgid "lpadmin: Expected model after \"-m\" option." msgstr "" msgid "lpadmin: Expected name after \"-R\" option." msgstr "" msgid "lpadmin: Expected name=value after \"-o\" option." msgstr "" msgid "lpadmin: Expected printer after \"-p\" option." msgstr "" msgid "lpadmin: Expected printer name after \"-d\" option." msgstr "" msgid "lpadmin: Expected printer or class after \"-x\" option." msgstr "" msgid "lpadmin: No member names were seen." msgstr "" #, c-format msgid "lpadmin: Printer %s is already a member of class %s." msgstr "" #, c-format msgid "lpadmin: Printer %s is not a member of class %s." msgstr "" msgid "lpadmin: Printer name can only contain printable characters." msgstr "" msgid "" "lpadmin: Raw queues are deprecated and will stop working in a future version " "of CUPS." msgstr "" msgid "" "lpadmin: System V interface scripts are no longer supported for security " "reasons." msgstr "" msgid "" "lpadmin: Unable to add a printer to the class:\n" " You must specify a printer name first." msgstr "" #, c-format msgid "lpadmin: Unable to connect to server: %s" msgstr "" msgid "lpadmin: Unable to create temporary file" msgstr "" msgid "" "lpadmin: Unable to delete option:\n" " You must specify a printer name first." msgstr "" #, c-format msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d." msgstr "" #, c-format msgid "lpadmin: Unable to open PPD file \"%s\" - %s" msgstr "" msgid "" "lpadmin: Unable to remove a printer from the class:\n" " You must specify a printer name first." msgstr "" msgid "" "lpadmin: Unable to set the printer options:\n" " You must specify a printer name first." msgstr "" #, c-format msgid "lpadmin: Unknown allow/deny option \"%s\"." msgstr "" #, c-format msgid "lpadmin: Unknown argument \"%s\"." msgstr "" #, c-format msgid "lpadmin: Unknown option \"%c\"." msgstr "" msgid "lpadmin: Use the 'everywhere' model for shared printers." msgstr "" msgid "lpadmin: Warning - content type list ignored." msgstr "" msgid "lpc> " msgstr "lpc> " msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"." msgstr "" msgid "lpinfo: Expected language after \"--language\"." msgstr "" msgid "lpinfo: Expected make and model after \"--make-and-model\"." msgstr "" msgid "lpinfo: Expected product string after \"--product\"." msgstr "" msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"." msgstr "" msgid "lpinfo: Expected scheme list after \"--include-schemes\"." msgstr "" msgid "lpinfo: Expected timeout after \"--timeout\"." msgstr "" #, c-format msgid "lpmove: Unable to connect to server: %s" msgstr "" #, c-format msgid "lpmove: Unknown argument \"%s\"." msgstr "" msgid "lpoptions: No printers." msgstr "" #, c-format msgid "lpoptions: Unable to add printer or instance: %s" msgstr "" #, c-format msgid "lpoptions: Unable to get PPD file for %s: %s" msgstr "" #, c-format msgid "lpoptions: Unable to open PPD file for %s." msgstr "" msgid "lpoptions: Unknown printer or class." msgstr "" #, c-format msgid "" "lpstat: error - %s environment variable names non-existent destination \"%s" "\"." msgstr "" msgid "material-amount" msgstr "Amount of Material" msgid "material-amount-units" msgstr "Material Amount Units" msgid "material-amount-units.g" msgstr "G" msgid "material-amount-units.kg" msgstr "Kg" msgid "material-amount-units.l" msgstr "L" msgid "material-amount-units.m" msgstr "M" msgid "material-amount-units.ml" msgstr "Ml" msgid "material-amount-units.mm" msgstr "Mm" msgid "material-color" msgstr "Material Color" msgid "material-diameter" msgstr "Material Diameter" msgid "material-diameter-tolerance" msgstr "Material Diameter Tolerance" msgid "material-fill-density" msgstr "Material Fill Density" msgid "material-name" msgstr "Material Name" msgid "material-purpose" msgstr "Material Purpose" msgid "material-purpose.all" msgstr "All" msgid "material-purpose.base" msgstr "Base" msgid "material-purpose.in-fill" msgstr "In Fill" msgid "material-purpose.shell" msgstr "Shell" msgid "material-purpose.support" msgstr "Support" msgid "material-rate" msgstr "Feed Rate" msgid "material-rate-units" msgstr "Material Rate Units" msgid "material-rate-units.mg_second" msgstr "Mg Second" msgid "material-rate-units.ml_second" msgstr "Ml Second" msgid "material-rate-units.mm_second" msgstr "Mm Second" msgid "material-shell-thickness" msgstr "Material Shell Thickness" msgid "material-temperature" msgstr "Material Temperature" msgid "material-type" msgstr "Material Type" msgid "material-type.abs" msgstr "Abs" msgid "material-type.abs-carbon-fiber" msgstr "Abs Carbon Fiber" msgid "material-type.abs-carbon-nanotube" msgstr "Abs Carbon Nanotube" msgid "material-type.chocolate" msgstr "Chocolate" msgid "material-type.gold" msgstr "Gold" msgid "material-type.nylon" msgstr "Nylon" msgid "material-type.pet" msgstr "Pet" msgid "material-type.photopolymer" msgstr "Photopolymer" msgid "material-type.pla" msgstr "Pla" msgid "material-type.pla-conductive" msgstr "Pla Conductive" msgid "material-type.pla-flexible" msgstr "Pla Flexible" msgid "material-type.pla-magnetic" msgstr "Pla Magnetic" msgid "material-type.pla-steel" msgstr "Pla Steel" msgid "material-type.pla-stone" msgstr "Pla Stone" msgid "material-type.pla-wood" msgstr "Pla Wood" msgid "material-type.polycarbonate" msgstr "Polycarbonate" msgid "material-type.pva-dissolvable" msgstr "Dissolvable PVA" msgid "material-type.silver" msgstr "Silver" msgid "material-type.titanium" msgstr "Titanium" msgid "material-type.wax" msgstr "Wax" msgid "materials-col" msgstr "Materials" msgid "media" msgstr "Media" msgid "media-back-coating" msgstr "Media Back Coating" msgid "media-back-coating.glossy" msgstr "Glossy" msgid "media-back-coating.high-gloss" msgstr "High Gloss" msgid "media-back-coating.matte" msgstr "Matte" msgid "media-back-coating.none" msgstr "None" msgid "media-back-coating.satin" msgstr "Satin" msgid "media-back-coating.semi-gloss" msgstr "Semi-Gloss" msgid "media-bottom-margin" msgstr "Media Bottom Margin" msgid "media-col" msgstr "Media" msgid "media-color" msgstr "Media Color" msgid "media-color.black" msgstr "Black" msgid "media-color.blue" msgstr "Blue" msgid "media-color.brown" msgstr "Brown" msgid "media-color.buff" msgstr "Buff" msgid "media-color.clear-black" msgstr "Clear Black" msgid "media-color.clear-blue" msgstr "Clear Blue" msgid "media-color.clear-brown" msgstr "Clear Brown" msgid "media-color.clear-buff" msgstr "Clear Buff" msgid "media-color.clear-cyan" msgstr "Clear Cyan" msgid "media-color.clear-gold" msgstr "Clear Gold" msgid "media-color.clear-goldenrod" msgstr "Clear Goldenrod" msgid "media-color.clear-gray" msgstr "Clear Gray" msgid "media-color.clear-green" msgstr "Clear Green" msgid "media-color.clear-ivory" msgstr "Clear Ivory" msgid "media-color.clear-magenta" msgstr "Clear Magenta" msgid "media-color.clear-multi-color" msgstr "Clear Multi Color" msgid "media-color.clear-mustard" msgstr "Clear Mustard" msgid "media-color.clear-orange" msgstr "Clear Orange" msgid "media-color.clear-pink" msgstr "Clear Pink" msgid "media-color.clear-red" msgstr "Clear Red" msgid "media-color.clear-silver" msgstr "Clear Silver" msgid "media-color.clear-turquoise" msgstr "Clear Turquoise" msgid "media-color.clear-violet" msgstr "Clear Violet" msgid "media-color.clear-white" msgstr "Clear White" msgid "media-color.clear-yellow" msgstr "Clear Yellow" msgid "media-color.cyan" msgstr "Cyan" msgid "media-color.dark-blue" msgstr "Dark Blue" msgid "media-color.dark-brown" msgstr "Dark Brown" msgid "media-color.dark-buff" msgstr "Dark Buff" msgid "media-color.dark-cyan" msgstr "Dark Cyan" msgid "media-color.dark-gold" msgstr "Dark Gold" msgid "media-color.dark-goldenrod" msgstr "Dark Goldenrod" msgid "media-color.dark-gray" msgstr "Dark Gray" msgid "media-color.dark-green" msgstr "Dark Green" msgid "media-color.dark-ivory" msgstr "Dark Ivory" msgid "media-color.dark-magenta" msgstr "Dark Magenta" msgid "media-color.dark-mustard" msgstr "Dark Mustard" msgid "media-color.dark-orange" msgstr "Dark Orange" msgid "media-color.dark-pink" msgstr "Dark Pink" msgid "media-color.dark-red" msgstr "Dark Red" msgid "media-color.dark-silver" msgstr "Dark Silver" msgid "media-color.dark-turquoise" msgstr "Dark Turquoise" msgid "media-color.dark-violet" msgstr "Dark Violet" msgid "media-color.dark-yellow" msgstr "Dark Yellow" msgid "media-color.gold" msgstr "Gold" msgid "media-color.goldenrod" msgstr "Goldenrod" msgid "media-color.gray" msgstr "Gray" msgid "media-color.green" msgstr "Green" msgid "media-color.ivory" msgstr "Ivory" msgid "media-color.light-black" msgstr "Light Black" msgid "media-color.light-blue" msgstr "Light Blue" msgid "media-color.light-brown" msgstr "Light Brown" msgid "media-color.light-buff" msgstr "Light Buff" msgid "media-color.light-cyan" msgstr "Light Cyan" msgid "media-color.light-gold" msgstr "Light Gold" msgid "media-color.light-goldenrod" msgstr "Light Goldenrod" msgid "media-color.light-gray" msgstr "Light Gray" msgid "media-color.light-green" msgstr "Light Green" msgid "media-color.light-ivory" msgstr "Light Ivory" msgid "media-color.light-magenta" msgstr "Light Magenta" msgid "media-color.light-mustard" msgstr "Light Mustard" msgid "media-color.light-orange" msgstr "Light Orange" msgid "media-color.light-pink" msgstr "Light Pink" msgid "media-color.light-red" msgstr "Light Red" msgid "media-color.light-silver" msgstr "Light Silver" msgid "media-color.light-turquoise" msgstr "Light Turquoise" msgid "media-color.light-violet" msgstr "Light Violet" msgid "media-color.light-yellow" msgstr "Light Yellow" msgid "media-color.magenta" msgstr "Magenta" msgid "media-color.multi-color" msgstr "Multi-Color" msgid "media-color.mustard" msgstr "Mustard" msgid "media-color.no-color" msgstr "No Color" msgid "media-color.orange" msgstr "Orange" msgid "media-color.pink" msgstr "Pink" msgid "media-color.red" msgstr "Red" msgid "media-color.silver" msgstr "Silver" msgid "media-color.turquoise" msgstr "Turquoise" msgid "media-color.violet" msgstr "Violet" msgid "media-color.white" msgstr "White" msgid "media-color.yellow" msgstr "Yellow" msgid "media-front-coating" msgstr "Media Front Coating" msgid "media-grain" msgstr "Media Grain" msgid "media-grain.x-direction" msgstr "Cross-Feed Direction" msgid "media-grain.y-direction" msgstr "Feed Direction" msgid "media-hole-count" msgstr "Media Hole Count" msgid "media-info" msgstr "Media Info" msgid "media-input-tray-check" msgstr "Media Input Tray Check" msgid "media-left-margin" msgstr "Media Left Margin" msgid "media-pre-printed" msgstr "Media Preprinted" msgid "media-pre-printed.blank" msgstr "Blank" msgid "media-pre-printed.letter-head" msgstr "Letterhead" msgid "media-pre-printed.pre-printed" msgstr "Preprinted" msgid "media-recycled" msgstr "Media Recycled" msgid "media-recycled.none" msgstr "None" msgid "media-recycled.standard" msgstr "Standard" msgid "media-right-margin" msgstr "Media Right Margin" msgid "media-size" msgstr "Media Dimensions" msgid "media-size-name" msgstr "Media Name" msgid "media-source" msgstr "Media Source" msgid "media-source.alternate" msgstr "Alternate" msgid "media-source.alternate-roll" msgstr "Alternate Roll" msgid "media-source.auto" msgstr "Automatic" msgid "media-source.bottom" msgstr "Bottom" msgid "media-source.by-pass-tray" msgstr "By Pass Tray" msgid "media-source.center" msgstr "Center" msgid "media-source.disc" msgstr "Disc" msgid "media-source.envelope" msgstr "Envelope" msgid "media-source.hagaki" msgstr "Hagaki" msgid "media-source.large-capacity" msgstr "Large Capacity" msgid "media-source.left" msgstr "Left" msgid "media-source.main" msgstr "Main" msgid "media-source.main-roll" msgstr "Main Roll" msgid "media-source.manual" msgstr "Manual" msgid "media-source.middle" msgstr "Middle" msgid "media-source.photo" msgstr "Photo" msgid "media-source.rear" msgstr "Rear" msgid "media-source.right" msgstr "Right" msgid "media-source.roll-1" msgstr "Roll 1" msgid "media-source.roll-10" msgstr "Roll 10" msgid "media-source.roll-2" msgstr "Roll 2" msgid "media-source.roll-3" msgstr "Roll 3" msgid "media-source.roll-4" msgstr "Roll 4" msgid "media-source.roll-5" msgstr "Roll 5" msgid "media-source.roll-6" msgstr "Roll 6" msgid "media-source.roll-7" msgstr "Roll 7" msgid "media-source.roll-8" msgstr "Roll 8" msgid "media-source.roll-9" msgstr "Roll 9" msgid "media-source.side" msgstr "Side" msgid "media-source.top" msgstr "Top" msgid "media-source.tray-1" msgstr "Tray 1" msgid "media-source.tray-10" msgstr "Tray 10" msgid "media-source.tray-11" msgstr "Tray 11" msgid "media-source.tray-12" msgstr "Tray 12" msgid "media-source.tray-13" msgstr "Tray 13" msgid "media-source.tray-14" msgstr "Tray 14" msgid "media-source.tray-15" msgstr "Tray 15" msgid "media-source.tray-16" msgstr "Tray 16" msgid "media-source.tray-17" msgstr "Tray 17" msgid "media-source.tray-18" msgstr "Tray 18" msgid "media-source.tray-19" msgstr "Tray 19" msgid "media-source.tray-2" msgstr "Tray 2" msgid "media-source.tray-20" msgstr "Tray 20" msgid "media-source.tray-3" msgstr "Tray 3" msgid "media-source.tray-4" msgstr "Tray 4" msgid "media-source.tray-5" msgstr "Tray 5" msgid "media-source.tray-6" msgstr "Tray 6" msgid "media-source.tray-7" msgstr "Tray 7" msgid "media-source.tray-8" msgstr "Tray 8" msgid "media-source.tray-9" msgstr "Tray 9" msgid "media-thickness" msgstr "Media Thickness" msgid "media-tooth" msgstr "Media Tooth" msgid "media-tooth.antique" msgstr "Antique" msgid "media-tooth.calendared" msgstr "Calendared" msgid "media-tooth.coarse" msgstr "Coarse" msgid "media-tooth.fine" msgstr "Fine" msgid "media-tooth.linen" msgstr "Linen" msgid "media-tooth.medium" msgstr "Medium" msgid "media-tooth.smooth" msgstr "Smooth" msgid "media-tooth.stipple" msgstr "Stipple" msgid "media-tooth.uncalendared" msgstr "Uncalendared" msgid "media-tooth.vellum" msgstr "Vellum" msgid "media-top-margin" msgstr "Media Top Margin" msgid "media-type" msgstr "Media Type" msgid "media-type.aluminum" msgstr "Aluminum" msgid "media-type.auto" msgstr "Automatic" msgid "media-type.back-print-film" msgstr "Back Print Film" msgid "media-type.cardboard" msgstr "Cardboard" msgid "media-type.cardstock" msgstr "Cardstock" msgid "media-type.cd" msgstr "CD" msgid "media-type.com.hp.advanced-photo" msgstr "Advanced Photo Paper" msgid "media-type.com.hp.brochure-glossy" msgstr "Glossy Brochure Paper" msgid "media-type.com.hp.brochure-matte" msgstr "Matte Brochure Paper" msgid "media-type.com.hp.cover-matte" msgstr "Matte Cover Paper" msgid "media-type.com.hp.ecosmart-lite" msgstr "Office Recycled Paper" msgid "media-type.com.hp.everyday-glossy" msgstr "Everyday Glossy Photo Paper" msgid "media-type.com.hp.everyday-matte" msgstr "Everyday Matte Paper" msgid "media-type.com.hp.extra-heavy" msgstr "Extra Heavyweight Paper" msgid "media-type.com.hp.intermediate" msgstr "Multipurpose Paper" msgid "media-type.com.hp.mid-weight" msgstr "Mid-Weight Paper" msgid "media-type.com.hp.premium-inkjet" msgstr "Premium Inkjet Paper" msgid "media-type.com.hp.premium-photo" msgstr "Premium Photo Glossy Paper" msgid "media-type.com.hp.premium-presentation-matte" msgstr "Premium Presentation Matte Paper" msgid "media-type.continuous" msgstr "Continuous" msgid "media-type.continuous-long" msgstr "Continuous Long" msgid "media-type.continuous-short" msgstr "Continuous Short" msgid "media-type.corrugated-board" msgstr "Corrugated Board" msgid "media-type.disc" msgstr "Optical Disc" msgid "media-type.disc-glossy" msgstr "Glossy Optical Disc" msgid "media-type.disc-high-gloss" msgstr "High Gloss Optical Disc" msgid "media-type.disc-matte" msgstr "Matte Optical Disc" msgid "media-type.disc-satin" msgstr "Satin Optical Disc" msgid "media-type.disc-semi-gloss" msgstr "Semi-Gloss Optical Disc" msgid "media-type.double-wall" msgstr "Double Wall" msgid "media-type.dry-film" msgstr "Dry Film" msgid "media-type.dvd" msgstr "DVD" msgid "media-type.embossing-foil" msgstr "Embossing Foil" msgid "media-type.end-board" msgstr "End Board" msgid "media-type.envelope" msgstr "Envelope" msgid "media-type.envelope-archival" msgstr "Archival Envelope" msgid "media-type.envelope-bond" msgstr "Bond Envelope" msgid "media-type.envelope-coated" msgstr "Coated Envelope" msgid "media-type.envelope-cotton" msgstr "Cotton Envelope" msgid "media-type.envelope-fine" msgstr "Fine Envelope" msgid "media-type.envelope-heavyweight" msgstr "Heavyweight Envelope" msgid "media-type.envelope-inkjet" msgstr "Inkjet Envelope" msgid "media-type.envelope-lightweight" msgstr "Lightweight Envelope" msgid "media-type.envelope-plain" msgstr "Plain Envelope" msgid "media-type.envelope-preprinted" msgstr "Preprinted Envelope" msgid "media-type.envelope-window" msgstr "Windowed Envelope" msgid "media-type.fabric" msgstr "Fabric" msgid "media-type.fabric-archival" msgstr "Archival Fabric" msgid "media-type.fabric-glossy" msgstr "Glossy Fabric" msgid "media-type.fabric-high-gloss" msgstr "High Gloss Fabric" msgid "media-type.fabric-matte" msgstr "Matte Fabric" msgid "media-type.fabric-semi-gloss" msgstr "Semi-Gloss Fabric" msgid "media-type.fabric-waterproof" msgstr "Waterproof Fabric" msgid "media-type.film" msgstr "Film" msgid "media-type.flexo-base" msgstr "Flexo Base" msgid "media-type.flexo-photo-polymer" msgstr "Flexo Photo Polymer" msgid "media-type.flute" msgstr "Flute" msgid "media-type.foil" msgstr "Foil" msgid "media-type.full-cut-tabs" msgstr "Full Cut Tabs" msgid "media-type.glass" msgstr "Glass" msgid "media-type.glass-colored" msgstr "Glass Colored" msgid "media-type.glass-opaque" msgstr "Glass Opaque" msgid "media-type.glass-surfaced" msgstr "Glass Surfaced" msgid "media-type.glass-textured" msgstr "Glass Textured" msgid "media-type.gravure-cylinder" msgstr "Gravure Cylinder" msgid "media-type.image-setter-paper" msgstr "Image Setter Paper" msgid "media-type.imaging-cylinder" msgstr "Imaging Cylinder" msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon-photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon_photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.labels" msgstr "Labels" msgid "media-type.labels-colored" msgstr "Colored Labels" msgid "media-type.labels-glossy" msgstr "Glossy Labels" msgid "media-type.labels-high-gloss" msgstr "High Gloss Labels" msgid "media-type.labels-inkjet" msgstr "Inkjet Labels" msgid "media-type.labels-matte" msgstr "Matte Labels" msgid "media-type.labels-permanent" msgstr "Permanent Labels" msgid "media-type.labels-satin" msgstr "Satin Labels" msgid "media-type.labels-security" msgstr "Security Labels" msgid "media-type.labels-semi-gloss" msgstr "Semi-Gloss Labels" msgid "media-type.laminating-foil" msgstr "Laminating Foil" msgid "media-type.letterhead" msgstr "Letterhead" msgid "media-type.metal" msgstr "Metal" msgid "media-type.metal-glossy" msgstr "Metal Glossy" msgid "media-type.metal-high-gloss" msgstr "Metal High Gloss" msgid "media-type.metal-matte" msgstr "Metal Matte" msgid "media-type.metal-satin" msgstr "Metal Satin" msgid "media-type.metal-semi-gloss" msgstr "Metal Semi Gloss" msgid "media-type.mounting-tape" msgstr "Mounting Tape" msgid "media-type.multi-layer" msgstr "Multi Layer" msgid "media-type.multi-part-form" msgstr "Multi Part Form" msgid "media-type.other" msgstr "Other" msgid "media-type.paper" msgstr "Paper" msgid "media-type.photographic" msgstr "Photo Paper" msgid "media-type.photographic-archival" msgstr "Photographic Archival" msgid "media-type.photographic-film" msgstr "Photo Film" msgid "media-type.photographic-glossy" msgstr "Glossy Photo Paper" msgid "media-type.photographic-high-gloss" msgstr "High Gloss Photo Paper" msgid "media-type.photographic-matte" msgstr "Matte Photo Paper" msgid "media-type.photographic-satin" msgstr "Satin Photo Paper" msgid "media-type.photographic-semi-gloss" msgstr "Semi-Gloss Photo Paper" msgid "media-type.plastic" msgstr "Plastic" msgid "media-type.plastic-archival" msgstr "Plastic Archival" msgid "media-type.plastic-colored" msgstr "Plastic Colored" msgid "media-type.plastic-glossy" msgstr "Plastic Glossy" msgid "media-type.plastic-high-gloss" msgstr "Plastic High Gloss" msgid "media-type.plastic-matte" msgstr "Plastic Matte" msgid "media-type.plastic-satin" msgstr "Plastic Satin" msgid "media-type.plastic-semi-gloss" msgstr "Plastic Semi Gloss" msgid "media-type.plate" msgstr "Plate" msgid "media-type.polyester" msgstr "Polyester" msgid "media-type.pre-cut-tabs" msgstr "Pre Cut Tabs" msgid "media-type.roll" msgstr "Roll" msgid "media-type.screen" msgstr "Screen" msgid "media-type.screen-paged" msgstr "Screen Paged" msgid "media-type.self-adhesive" msgstr "Self Adhesive" msgid "media-type.self-adhesive-film" msgstr "Self Adhesive Film" msgid "media-type.shrink-foil" msgstr "Shrink Foil" msgid "media-type.single-face" msgstr "Single Face" msgid "media-type.single-wall" msgstr "Single Wall" msgid "media-type.sleeve" msgstr "Sleeve" msgid "media-type.stationery" msgstr "Stationery" msgid "media-type.stationery-archival" msgstr "Stationery Archival" msgid "media-type.stationery-coated" msgstr "Coated Paper" msgid "media-type.stationery-cotton" msgstr "Stationery Cotton" msgid "media-type.stationery-fine" msgstr "Vellum Paper" msgid "media-type.stationery-heavyweight" msgstr "Heavyweight Paper" msgid "media-type.stationery-heavyweight-coated" msgstr "Stationery Heavyweight Coated" msgid "media-type.stationery-inkjet" msgstr "Stationery Inkjet Paper" msgid "media-type.stationery-letterhead" msgstr "Letterhead" msgid "media-type.stationery-lightweight" msgstr "Lightweight Paper" msgid "media-type.stationery-preprinted" msgstr "Preprinted Paper" msgid "media-type.stationery-prepunched" msgstr "Punched Paper" msgid "media-type.tab-stock" msgstr "Tab Stock" msgid "media-type.tractor" msgstr "Tractor" msgid "media-type.transfer" msgstr "Transfer" msgid "media-type.transparency" msgstr "Transparency" msgid "media-type.triple-wall" msgstr "Triple Wall" msgid "media-type.wet-film" msgstr "Wet Film" msgid "media-weight-metric" msgstr "Media Weight (grams per m²)" msgid "media.asme_f_28x40in" msgstr "28 x 40\"" msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" msgstr "A4 or US Letter" msgid "media.iso_2a0_1189x1682mm" msgstr "2a0" msgid "media.iso_a0_841x1189mm" msgstr "A0" msgid "media.iso_a0x3_1189x2523mm" msgstr "A0x3" msgid "media.iso_a10_26x37mm" msgstr "A10" msgid "media.iso_a1_594x841mm" msgstr "A1" msgid "media.iso_a1x3_841x1783mm" msgstr "A1x3" msgid "media.iso_a1x4_841x2378mm" msgstr "A1x4" msgid "media.iso_a2_420x594mm" msgstr "A2" msgid "media.iso_a2x3_594x1261mm" msgstr "A2x3" msgid "media.iso_a2x4_594x1682mm" msgstr "A2x4" msgid "media.iso_a2x5_594x2102mm" msgstr "A2x5" msgid "media.iso_a3-extra_322x445mm" msgstr "A3 (Extra)" msgid "media.iso_a3_297x420mm" msgstr "A3" msgid "media.iso_a3x3_420x891mm" msgstr "A3x3" msgid "media.iso_a3x4_420x1189mm" msgstr "A3x4" msgid "media.iso_a3x5_420x1486mm" msgstr "A3x5" msgid "media.iso_a3x6_420x1783mm" msgstr "A3x6" msgid "media.iso_a3x7_420x2080mm" msgstr "A3x7" msgid "media.iso_a4-extra_235.5x322.3mm" msgstr "A4 (Extra)" msgid "media.iso_a4-tab_225x297mm" msgstr "A4 (Tab)" msgid "media.iso_a4_210x297mm" msgstr "A4" msgid "media.iso_a4x3_297x630mm" msgstr "A4x3" msgid "media.iso_a4x4_297x841mm" msgstr "A4x4" msgid "media.iso_a4x5_297x1051mm" msgstr "A4x5" msgid "media.iso_a4x6_297x1261mm" msgstr "A4x6" msgid "media.iso_a4x7_297x1471mm" msgstr "A4x7" msgid "media.iso_a4x8_297x1682mm" msgstr "A4x8" msgid "media.iso_a4x9_297x1892mm" msgstr "A4x9" msgid "media.iso_a5-extra_174x235mm" msgstr "A5 (Extra)" msgid "media.iso_a5_148x210mm" msgstr "A5" msgid "media.iso_a6_105x148mm" msgstr "A6" msgid "media.iso_a7_74x105mm" msgstr "A7" msgid "media.iso_a8_52x74mm" msgstr "A8" msgid "media.iso_a9_37x52mm" msgstr "A9" msgid "media.iso_b0_1000x1414mm" msgstr "B0" msgid "media.iso_b10_31x44mm" msgstr "B10" msgid "media.iso_b1_707x1000mm" msgstr "B1" msgid "media.iso_b2_500x707mm" msgstr "B2" msgid "media.iso_b3_353x500mm" msgstr "B3" msgid "media.iso_b4_250x353mm" msgstr "B4" msgid "media.iso_b5-extra_201x276mm" msgstr "B5 (Extra)" msgid "media.iso_b5_176x250mm" msgstr "B5 Envelope" msgid "media.iso_b6_125x176mm" msgstr "B6" msgid "media.iso_b6c4_125x324mm" msgstr "B6/C4 Envelope" msgid "media.iso_b7_88x125mm" msgstr "B7" msgid "media.iso_b8_62x88mm" msgstr "B8" msgid "media.iso_b9_44x62mm" msgstr "B9" msgid "media.iso_c0_917x1297mm" msgstr "C0 Envelope" msgid "media.iso_c10_28x40mm" msgstr "C10 Envelope" msgid "media.iso_c1_648x917mm" msgstr "C1 Envelope" msgid "media.iso_c2_458x648mm" msgstr "C2 Envelope" msgid "media.iso_c3_324x458mm" msgstr "C3 Envelope" msgid "media.iso_c4_229x324mm" msgstr "C4 Envelope" msgid "media.iso_c5_162x229mm" msgstr "C5 Envelope" msgid "media.iso_c6_114x162mm" msgstr "C6 Envelope" msgid "media.iso_c6c5_114x229mm" msgstr "C6c5 Envelope" msgid "media.iso_c7_81x114mm" msgstr "C7 Envelope" msgid "media.iso_c7c6_81x162mm" msgstr "C7c6 Envelope" msgid "media.iso_c8_57x81mm" msgstr "C8 Envelope" msgid "media.iso_c9_40x57mm" msgstr "C9 Envelope" msgid "media.iso_dl_110x220mm" msgstr "DL Envelope" msgid "media.iso_ra0_860x1220mm" msgstr "Ra0" msgid "media.iso_ra1_610x860mm" msgstr "Ra1" msgid "media.iso_ra2_430x610mm" msgstr "Ra2" msgid "media.iso_ra3_305x430mm" msgstr "Ra3" msgid "media.iso_ra4_215x305mm" msgstr "Ra4" msgid "media.iso_sra0_900x1280mm" msgstr "Sra0" msgid "media.iso_sra1_640x900mm" msgstr "Sra1" msgid "media.iso_sra2_450x640mm" msgstr "Sra2" msgid "media.iso_sra3_320x450mm" msgstr "Sra3" msgid "media.iso_sra4_225x320mm" msgstr "Sra4" msgid "media.jis_b0_1030x1456mm" msgstr "JIS B0" msgid "media.jis_b10_32x45mm" msgstr "JIS B10" msgid "media.jis_b1_728x1030mm" msgstr "JIS B1" msgid "media.jis_b2_515x728mm" msgstr "JIS B2" msgid "media.jis_b3_364x515mm" msgstr "JIS B3" msgid "media.jis_b4_257x364mm" msgstr "JIS B4" msgid "media.jis_b5_182x257mm" msgstr "JIS B5" msgid "media.jis_b6_128x182mm" msgstr "JIS B6" msgid "media.jis_b7_91x128mm" msgstr "JIS B7" msgid "media.jis_b8_64x91mm" msgstr "JIS B8" msgid "media.jis_b9_45x64mm" msgstr "JIS B9" msgid "media.jis_exec_216x330mm" msgstr "JIS Executive" msgid "media.jpn_chou2_111.1x146mm" msgstr "Chou 2 Envelope" msgid "media.jpn_chou3_120x235mm" msgstr "Chou 3 Envelope" msgid "media.jpn_chou4_90x205mm" msgstr "Chou 4 Envelope" msgid "media.jpn_hagaki_100x148mm" msgstr "Hagaki" msgid "media.jpn_kahu_240x322.1mm" msgstr "Kahu Envelope" msgid "media.jpn_kaku2_240x332mm" msgstr "Kahu 2 Envelope" msgid "media.jpn_kaku3_216x277mm" msgstr "216 x 277mme" msgid "media.jpn_kaku4_197x267mm" msgstr "197 x 267mme" msgid "media.jpn_kaku5_190x240mm" msgstr "190 x 240mme" msgid "media.jpn_kaku7_142x205mm" msgstr "142 x 205mme" msgid "media.jpn_kaku8_119x197mm" msgstr "119 x 197mme" msgid "media.jpn_oufuku_148x200mm" msgstr "Oufuku Reply Postcard" msgid "media.jpn_you4_105x235mm" msgstr "You 4 Envelope" msgid "media.na_10x11_10x11in" msgstr "10 x 11\"" msgid "media.na_10x13_10x13in" msgstr "10 x 13\"" msgid "media.na_10x14_10x14in" msgstr "10 x 14\"" msgid "media.na_10x15_10x15in" msgstr "10 x 15\"" msgid "media.na_11x12_11x12in" msgstr "11 x 12\"" msgid "media.na_11x15_11x15in" msgstr "11 x 15\"" msgid "media.na_12x19_12x19in" msgstr "12 x 19\"" msgid "media.na_5x7_5x7in" msgstr "5 x 7\"" msgid "media.na_6x9_6x9in" msgstr "6 x 9\"" msgid "media.na_7x9_7x9in" msgstr "7 x 9\"" msgid "media.na_9x11_9x11in" msgstr "9 x 11\"" msgid "media.na_a2_4.375x5.75in" msgstr "A2 Envelope" msgid "media.na_arch-a_9x12in" msgstr "9 x 12\"" msgid "media.na_arch-b_12x18in" msgstr "12 x 18\"" msgid "media.na_arch-c_18x24in" msgstr "18 x 24\"" msgid "media.na_arch-d_24x36in" msgstr "24 x 36\"" msgid "media.na_arch-e2_26x38in" msgstr "26 x 38\"" msgid "media.na_arch-e3_27x39in" msgstr "27 x 39\"" msgid "media.na_arch-e_36x48in" msgstr "36 x 48\"" msgid "media.na_b-plus_12x19.17in" msgstr "12 x 19.17\"" msgid "media.na_c5_6.5x9.5in" msgstr "C5 Envelope" msgid "media.na_c_17x22in" msgstr "17 x 22\"" msgid "media.na_d_22x34in" msgstr "22 x 34\"" msgid "media.na_e_34x44in" msgstr "34 x 44\"" msgid "media.na_edp_11x14in" msgstr "11 x 14\"" msgid "media.na_eur-edp_12x14in" msgstr "12 x 14\"" msgid "media.na_executive_7.25x10.5in" msgstr "Executive" msgid "media.na_f_44x68in" msgstr "44 x 68\"" msgid "media.na_fanfold-eur_8.5x12in" msgstr "European Fanfold" msgid "media.na_fanfold-us_11x14.875in" msgstr "US Fanfold" msgid "media.na_foolscap_8.5x13in" msgstr "Foolscap" msgid "media.na_govt-legal_8x13in" msgstr "8 x 13\"" msgid "media.na_govt-letter_8x10in" msgstr "8 x 10\"" msgid "media.na_index-3x5_3x5in" msgstr "3 x 5\"" msgid "media.na_index-4x6-ext_6x8in" msgstr "6 x 8\"" msgid "media.na_index-4x6_4x6in" msgstr "4 x 6\"" msgid "media.na_index-5x8_5x8in" msgstr "5 x 8\"" msgid "media.na_invoice_5.5x8.5in" msgstr "Statement" msgid "media.na_ledger_11x17in" msgstr "11 x 17\"" msgid "media.na_legal-extra_9.5x15in" msgstr "US Legal (Extra)" msgid "media.na_legal_8.5x14in" msgstr "US Legal" msgid "media.na_letter-extra_9.5x12in" msgstr "US Letter (Extra)" msgid "media.na_letter-plus_8.5x12.69in" msgstr "US Letter (Plus)" msgid "media.na_letter_8.5x11in" msgstr "US Letter" msgid "media.na_monarch_3.875x7.5in" msgstr "Monarch Envelope" msgid "media.na_number-10_4.125x9.5in" msgstr "#10 Envelope" msgid "media.na_number-11_4.5x10.375in" msgstr "#11 Envelope" msgid "media.na_number-12_4.75x11in" msgstr "#12 Envelope" msgid "media.na_number-14_5x11.5in" msgstr "#14 Envelope" msgid "media.na_number-9_3.875x8.875in" msgstr "#9 Envelope" msgid "media.na_oficio_8.5x13.4in" msgstr "8.5 x 13.4\"" msgid "media.na_personal_3.625x6.5in" msgstr "Personal Envelope" msgid "media.na_quarto_8.5x10.83in" msgstr "Quarto" msgid "media.na_super-a_8.94x14in" msgstr "8.94 x 14\"" msgid "media.na_super-b_13x19in" msgstr "13 x 19\"" msgid "media.na_wide-format_30x42in" msgstr "30 x 42\"" msgid "media.oe_12x16_12x16in" msgstr "12 x 16\"" msgid "media.oe_14x17_14x17in" msgstr "14 x 17\"" msgid "media.oe_18x22_18x22in" msgstr "18 x 22\"" msgid "media.oe_a2plus_17x24in" msgstr "17 x 24\"" msgid "media.oe_photo-10r_10x12in" msgstr "10 x 12\"" msgid "media.oe_photo-20r_20x24in" msgstr "20 x 24\"" msgid "media.oe_photo-l_3.5x5in" msgstr "3.5 x 5\"" msgid "media.oe_photo-s10r_10x15in" msgstr "10 x 15\"" msgid "media.om_16k_184x260mm" msgstr "184 x 260mm" msgid "media.om_16k_195x270mm" msgstr "195 x 270mm" msgid "media.om_dai-pa-kai_275x395mm" msgstr "275 x 395mm" msgid "media.om_folio-sp_215x315mm" msgstr "Folio" msgid "media.om_folio_210x330mm" msgstr "Folio (Special)" msgid "media.om_invite_220x220mm" msgstr "Invitation Envelope" msgid "media.om_italian_110x230mm" msgstr "Italian Envelope" msgid "media.om_juuro-ku-kai_198x275mm" msgstr "198 x 275mm" msgid "media.om_large-photo_200x300" msgstr "200 x 300mm" msgid "media.om_medium-photo_130x180mm" msgstr "130 x 180mm" msgid "media.om_pa-kai_267x389mm" msgstr "267 x 389mm" msgid "media.om_postfix_114x229mm" msgstr "Postfix Envelope" msgid "media.om_small-photo_100x150mm" msgstr "100 x 150mm" msgid "media.om_wide-photo_100x200mm" msgstr "100 x 200mm" msgid "media.prc_10_324x458mm" msgstr "Chinese #10 Envelope" msgid "media.prc_16k_146x215mm" msgstr "Chinese 16k" msgid "media.prc_1_102x165mm" msgstr "Chinese #1 Envelope" msgid "media.prc_2_102x176mm" msgstr "Chinese #2 Envelope" msgid "media.prc_32k_97x151mm" msgstr "Chinese 32k" msgid "media.prc_3_125x176mm" msgstr "Chinese #3 Envelope" msgid "media.prc_4_110x208mm" msgstr "Chinese #4 Envelope" msgid "media.prc_5_110x220mm" msgstr "Chinese #5 Envelope" msgid "media.prc_6_120x320mm" msgstr "Chinese #6 Envelope" msgid "media.prc_7_160x230mm" msgstr "Chinese #7 Envelope" msgid "media.prc_8_120x309mm" msgstr "Chinese #8 Envelope" msgid "media.roc_16k_7.75x10.75in" msgstr "ROC 16k" msgid "media.roc_8k_10.75x15.5in" msgstr "ROC 8k" #, c-format msgid "members of class %s:" msgstr "" msgid "multiple-document-handling" msgstr "Multiple Document Handling" msgid "multiple-document-handling.separate-documents-collated-copies" msgstr "Separate Documents Collated Copies" msgid "multiple-document-handling.separate-documents-uncollated-copies" msgstr "Separate Documents Uncollated Copies" msgid "multiple-document-handling.single-document" msgstr "Single Document" msgid "multiple-document-handling.single-document-new-sheet" msgstr "Single Document New Sheet" msgid "multiple-object-handling" msgstr "Multiple Object Handling" msgid "multiple-object-handling.auto" msgstr "Automatic" msgid "multiple-object-handling.best-fit" msgstr "Best Fit" msgid "multiple-object-handling.best-quality" msgstr "Best Quality" msgid "multiple-object-handling.best-speed" msgstr "Best Speed" msgid "multiple-object-handling.one-at-a-time" msgstr "One At A Time" msgid "multiple-operation-time-out-action" msgstr "Multiple Operation Time Out Action" msgid "multiple-operation-time-out-action.abort-job" msgstr "Abort Job" msgid "multiple-operation-time-out-action.hold-job" msgstr "Hold Job" msgid "multiple-operation-time-out-action.process-job" msgstr "Process Job" msgid "no entries" msgstr "" msgid "no system default destination" msgstr "" msgid "noise-removal" msgstr "Noise Removal" msgid "notify-attributes" msgstr "Notify Attributes" msgid "notify-charset" msgstr "Notify Charset" msgid "notify-events" msgstr "Notify Events" msgid "notify-events not specified." msgstr "" msgid "notify-events.document-completed" msgstr "Document Completed" msgid "notify-events.document-config-changed" msgstr "Document Config Changed" msgid "notify-events.document-created" msgstr "Document Created" msgid "notify-events.document-fetchable" msgstr "Document Fetchable" msgid "notify-events.document-state-changed" msgstr "Document State Changed" msgid "notify-events.document-stopped" msgstr "Document Stopped" msgid "notify-events.job-completed" msgstr "Job Completed" msgid "notify-events.job-config-changed" msgstr "Job Config Changed" msgid "notify-events.job-created" msgstr "Job Created" msgid "notify-events.job-fetchable" msgstr "Job Fetchable" msgid "notify-events.job-progress" msgstr "Job Progress" msgid "notify-events.job-state-changed" msgstr "Job State Changed" msgid "notify-events.job-stopped" msgstr "Job Stopped" msgid "notify-events.none" msgstr "None" msgid "notify-events.printer-config-changed" msgstr "Printer Config Changed" msgid "notify-events.printer-finishings-changed" msgstr "Printer Finishings Changed" msgid "notify-events.printer-media-changed" msgstr "Printer Media Changed" msgid "notify-events.printer-queue-order-changed" msgstr "Printer Queue Order Changed" msgid "notify-events.printer-restarted" msgstr "Printer Restarted" msgid "notify-events.printer-shutdown" msgstr "Printer Shutdown" msgid "notify-events.printer-state-changed" msgstr "Printer State Changed" msgid "notify-events.printer-stopped" msgstr "Printer Stopped" msgid "notify-get-interval" msgstr "Notify Get Interval" msgid "notify-lease-duration" msgstr "Notify Lease Duration" msgid "notify-natural-language" msgstr "Notify Natural Language" msgid "notify-pull-method" msgstr "Notify Pull Method" msgid "notify-recipient-uri" msgstr "Notify Recipient" #, c-format msgid "notify-recipient-uri URI \"%s\" is already used." msgstr "" #, c-format msgid "notify-recipient-uri URI \"%s\" uses unknown scheme." msgstr "" msgid "notify-sequence-numbers" msgstr "Notify Sequence Numbers" msgid "notify-subscription-ids" msgstr "Notify Subscription Ids" msgid "notify-time-interval" msgstr "Notify Time Interval" msgid "notify-user-data" msgstr "Notify User Data" msgid "notify-wait" msgstr "Notify Wait" msgid "number-of-retries" msgstr "Number Of Retries" msgid "number-up" msgstr "Number-Up" msgid "object-offset" msgstr "Object Offset" msgid "object-size" msgstr "Object Size" msgid "organization-name" msgstr "Organization Name" msgid "orientation-requested" msgstr "Orientation" msgid "orientation-requested.3" msgstr "Portrait" msgid "orientation-requested.4" msgstr "Landscape" msgid "orientation-requested.5" msgstr "Reverse Landscape" msgid "orientation-requested.6" msgstr "Reverse Portrait" msgid "orientation-requested.7" msgstr "None" msgid "output-attributes" msgstr "Output Attributes" msgid "output-bin" msgstr "Output Bin" msgid "output-bin.auto" msgstr "Automatic" msgid "output-bin.bottom" msgstr "Bottom" msgid "output-bin.center" msgstr "Center" msgid "output-bin.face-down" msgstr "Face Down" msgid "output-bin.face-up" msgstr "Face Up" msgid "output-bin.large-capacity" msgstr "Large Capacity" msgid "output-bin.left" msgstr "Left" msgid "output-bin.mailbox-1" msgstr "Mailbox 1" msgid "output-bin.mailbox-10" msgstr "Mailbox 10" msgid "output-bin.mailbox-2" msgstr "Mailbox 2" msgid "output-bin.mailbox-3" msgstr "Mailbox 3" msgid "output-bin.mailbox-4" msgstr "Mailbox 4" msgid "output-bin.mailbox-5" msgstr "Mailbox 5" msgid "output-bin.mailbox-6" msgstr "Mailbox 6" msgid "output-bin.mailbox-7" msgstr "Mailbox 7" msgid "output-bin.mailbox-8" msgstr "Mailbox 8" msgid "output-bin.mailbox-9" msgstr "Mailbox 9" msgid "output-bin.middle" msgstr "Middle" msgid "output-bin.my-mailbox" msgstr "My Mailbox" msgid "output-bin.rear" msgstr "Rear" msgid "output-bin.right" msgstr "Right" msgid "output-bin.side" msgstr "Side" msgid "output-bin.stacker-1" msgstr "Stacker 1" msgid "output-bin.stacker-10" msgstr "Stacker 10" msgid "output-bin.stacker-2" msgstr "Stacker 2" msgid "output-bin.stacker-3" msgstr "Stacker 3" msgid "output-bin.stacker-4" msgstr "Stacker 4" msgid "output-bin.stacker-5" msgstr "Stacker 5" msgid "output-bin.stacker-6" msgstr "Stacker 6" msgid "output-bin.stacker-7" msgstr "Stacker 7" msgid "output-bin.stacker-8" msgstr "Stacker 8" msgid "output-bin.stacker-9" msgstr "Stacker 9" msgid "output-bin.top" msgstr "Top" msgid "output-bin.tray-1" msgstr "Tray 1" msgid "output-bin.tray-10" msgstr "Tray 10" msgid "output-bin.tray-2" msgstr "Tray 2" msgid "output-bin.tray-3" msgstr "Tray 3" msgid "output-bin.tray-4" msgstr "Tray 4" msgid "output-bin.tray-5" msgstr "Tray 5" msgid "output-bin.tray-6" msgstr "Tray 6" msgid "output-bin.tray-7" msgstr "Tray 7" msgid "output-bin.tray-8" msgstr "Tray 8" msgid "output-bin.tray-9" msgstr "Tray 9" msgid "output-compression-quality-factor" msgstr "Scanned Image Quality" msgid "page-delivery" msgstr "Page Delivery" msgid "page-delivery.reverse-order-face-down" msgstr "Reverse Order Face Down" msgid "page-delivery.reverse-order-face-up" msgstr "Reverse Order Face Up" msgid "page-delivery.same-order-face-down" msgstr "Same Order Face Down" msgid "page-delivery.same-order-face-up" msgstr "Same Order Face Up" msgid "page-delivery.system-specified" msgstr "System Specified" msgid "page-order-received" msgstr "Page Order Received" msgid "page-order-received.1-to-n-order" msgstr "1 To N Order" msgid "page-order-received.n-to-1-order" msgstr "N To 1 Order" msgid "page-ranges" msgstr "Page Ranges" msgid "pages" msgstr "Pages" msgid "pages-per-subset" msgstr "Pages Per Subset" msgid "pending" msgstr "nevyřízený" msgid "platform-shape" msgstr "Platform Shape" msgid "platform-shape.ellipse" msgstr "Round" msgid "platform-shape.rectangle" msgstr "Rectangle" msgid "platform-temperature" msgstr "Platform Temperature" msgid "post-dial-string" msgstr "Post-dial String" #, c-format msgid "ppdc: Adding include directory \"%s\"." msgstr "" #, c-format msgid "ppdc: Adding/updating UI text from %s." msgstr "" #, c-format msgid "ppdc: Bad boolean value (%s) on line %d of %s." msgstr "" #, c-format msgid "ppdc: Bad font attribute: %s" msgstr "" #, c-format msgid "ppdc: Bad resolution name \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Bad status keyword %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Bad variable substitution ($%c) on line %d of %s." msgstr "" #, c-format msgid "ppdc: Choice found on line %d of %s with no Option." msgstr "" #, c-format msgid "ppdc: Duplicate #po for locale %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected a filter definition on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected a program name on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected boolean value on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected charset after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected choice code on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected choice name/text on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected color order for ColorModel on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected colorspace for ColorModel on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected compression for ColorModel on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Expected driver type keyword following DriverType on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected duplex type after Duplex on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected encoding after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected filename after #po %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected group name/text on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected include filename on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected integer on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected locale after #po on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after FileName on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after Manufacturer on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after MediaSize on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after ModelName on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after PCFileName on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name/text after %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name/text after Installable on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name/text after Resolution on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected option name/text on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected option section on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected option type on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected override field after Resolution on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected quoted string on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected real number on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d " "of %s." msgstr "" #, c-format msgid "ppdc: Expected selector after %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected status after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected string after Copyright on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected string after Version on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected two option names on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected value after %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected version after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid #include/#po filename \"%s\"." msgstr "" #, c-format msgid "ppdc: Invalid cost for filter on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid empty MIME type for filter on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid empty program name for filter on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid option section \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid option type \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Loading driver information file \"%s\"." msgstr "" #, c-format msgid "ppdc: Loading messages for locale \"%s\"." msgstr "" #, c-format msgid "ppdc: Loading messages from \"%s\"." msgstr "" #, c-format msgid "ppdc: Missing #endif at end of \"%s\"." msgstr "" #, c-format msgid "ppdc: Missing #if on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Need a msgid line before any translation strings on line %d of %s." msgstr "" #, c-format msgid "ppdc: No message catalog provided for locale %s." msgstr "" #, c-format msgid "ppdc: Option %s defined in two different groups on line %d of %s." msgstr "" #, c-format msgid "ppdc: Option %s redefined with a different type on line %d of %s." msgstr "" #, c-format msgid "ppdc: Option constraint must *name on line %d of %s." msgstr "" #, c-format msgid "ppdc: Too many nested #if's on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unable to create PPD file \"%s\" - %s." msgstr "" #, c-format msgid "ppdc: Unable to create output directory %s: %s" msgstr "" #, c-format msgid "ppdc: Unable to create output pipes: %s" msgstr "" #, c-format msgid "ppdc: Unable to execute cupstestppd: %s" msgstr "" #, c-format msgid "ppdc: Unable to find #po file %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unable to find include file \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unable to find localization for \"%s\" - %s" msgstr "" #, c-format msgid "ppdc: Unable to load localization file \"%s\" - %s" msgstr "" #, c-format msgid "ppdc: Unable to open %s: %s" msgstr "" #, c-format msgid "ppdc: Undefined variable (%s) on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unexpected text on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unknown driver type %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unknown media size \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unknown message catalog format for \"%s\"." msgstr "" #, c-format msgid "ppdc: Unknown token \"%s\" seen on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unterminated string starting with %c on line %d of %s." msgstr "" #, c-format msgid "ppdc: Warning - overlapping filename \"%s\"." msgstr "" #, c-format msgid "ppdc: Writing %s." msgstr "" #, c-format msgid "ppdc: Writing PPD files to directory \"%s\"." msgstr "" #, c-format msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s." msgstr "" #, c-format msgid "ppdmerge: Ignoring PPD file %s." msgstr "" #, c-format msgid "ppdmerge: Unable to backup %s to %s - %s" msgstr "" msgid "pre-dial-string" msgstr "Pre-dial String" msgid "presentation-direction-number-up" msgstr "Number-Up Layout" msgid "presentation-direction-number-up.tobottom-toleft" msgstr "Top-Bottom, Right-Left" msgid "presentation-direction-number-up.tobottom-toright" msgstr "Top-Bottom, Left-Right" msgid "presentation-direction-number-up.toleft-tobottom" msgstr "Right-Left, Top-Bottom" msgid "presentation-direction-number-up.toleft-totop" msgstr "Right-Left, Bottom-Top" msgid "presentation-direction-number-up.toright-tobottom" msgstr "Left-Right, Top-Bottom" msgid "presentation-direction-number-up.toright-totop" msgstr "Left-Right, Bottom-Top" msgid "presentation-direction-number-up.totop-toleft" msgstr "Bottom-Top, Right-Left" msgid "presentation-direction-number-up.totop-toright" msgstr "Bottom-Top, Left-Right" msgid "print-accuracy" msgstr "Print Accuracy" msgid "print-base" msgstr "Print Base" msgid "print-base.brim" msgstr "Brim" msgid "print-base.none" msgstr "None" msgid "print-base.raft" msgstr "Raft" msgid "print-base.skirt" msgstr "Skirt" msgid "print-base.standard" msgstr "Standard" msgid "print-color-mode" msgstr "Print Color Mode" msgid "print-color-mode.auto" msgstr "Automatic" msgid "print-color-mode.bi-level" msgstr "Bi-Level" msgid "print-color-mode.color" msgstr "Color" msgid "print-color-mode.highlight" msgstr "Highlight" msgid "print-color-mode.monochrome" msgstr "Monochrome" msgid "print-color-mode.process-bi-level" msgstr "Process Bi-Level" msgid "print-color-mode.process-monochrome" msgstr "Process Monochrome" msgid "print-content-optimize" msgstr "Print Optimization" msgid "print-content-optimize.auto" msgstr "Automatic" msgid "print-content-optimize.graphic" msgstr "Graphics" msgid "print-content-optimize.photo" msgstr "Photo" msgid "print-content-optimize.text" msgstr "Text" msgid "print-content-optimize.text-and-graphic" msgstr "Text And Graphics" msgid "print-objects" msgstr "Print Objects" msgid "print-quality" msgstr "Print Quality" msgid "print-quality.3" msgstr "Draft" msgid "print-quality.4" msgstr "Normal" msgid "print-quality.5" msgstr "High" msgid "print-rendering-intent" msgstr "Print Rendering Intent" msgid "print-rendering-intent.absolute" msgstr "Absolute" msgid "print-rendering-intent.auto" msgstr "Automatic" msgid "print-rendering-intent.perceptual" msgstr "Perceptual" msgid "print-rendering-intent.relative" msgstr "Relative" msgid "print-rendering-intent.relative-bpc" msgstr "Relative w/Black Point Compensation" msgid "print-rendering-intent.saturation" msgstr "Saturation" msgid "print-scaling" msgstr "Print Scaling" msgid "print-scaling.auto" msgstr "Automatic" msgid "print-scaling.auto-fit" msgstr "Auto Fit" msgid "print-scaling.fill" msgstr "Fill" msgid "print-scaling.fit" msgstr "Fit" msgid "print-scaling.none" msgstr "None" msgid "print-supports" msgstr "Print Supports" msgid "print-supports.material" msgstr "Material" msgid "print-supports.none" msgstr "None" msgid "print-supports.standard" msgstr "Standard" #, c-format msgid "printer %s disabled since %s -" msgstr "" #, c-format msgid "printer %s is idle. enabled since %s" msgstr "" #, c-format msgid "printer %s now printing %s-%d. enabled since %s" msgstr "" #, c-format msgid "printer %s/%s disabled since %s -" msgstr "" #, c-format msgid "printer %s/%s is idle. enabled since %s" msgstr "" #, c-format msgid "printer %s/%s now printing %s-%d. enabled since %s" msgstr "" msgid "printer-message-from-operator" msgstr "Printer Message From Operator" msgid "printer-resolution" msgstr "Printer Resolution" msgid "printer-state" msgstr "Printer State" msgid "printer-state-reasons" msgstr "Detailed Printer State" msgid "printer-state-reasons.alert-removal-of-binary-change-entry" msgstr "Alert Removal Of Binary Change Entry" msgid "printer-state-reasons.bander-added" msgstr "Bander Added" msgid "printer-state-reasons.bander-almost-empty" msgstr "Bander Almost Empty" msgid "printer-state-reasons.bander-almost-full" msgstr "Bander Almost Full" msgid "printer-state-reasons.bander-at-limit" msgstr "Bander At Limit" msgid "printer-state-reasons.bander-closed" msgstr "Bander Closed" msgid "printer-state-reasons.bander-configuration-change" msgstr "Bander Configuration Change" msgid "printer-state-reasons.bander-cover-closed" msgstr "Bander Cover Closed" msgid "printer-state-reasons.bander-cover-open" msgstr "Bander Cover Open" msgid "printer-state-reasons.bander-empty" msgstr "Bander Empty" msgid "printer-state-reasons.bander-full" msgstr "Bander Full" msgid "printer-state-reasons.bander-interlock-closed" msgstr "Bander Interlock Closed" msgid "printer-state-reasons.bander-interlock-open" msgstr "Bander Interlock Open" msgid "printer-state-reasons.bander-jam" msgstr "Bander Jam" msgid "printer-state-reasons.bander-life-almost-over" msgstr "Bander Life Almost Over" msgid "printer-state-reasons.bander-life-over" msgstr "Bander Life Over" msgid "printer-state-reasons.bander-memory-exhausted" msgstr "Bander Memory Exhausted" msgid "printer-state-reasons.bander-missing" msgstr "Bander Missing" msgid "printer-state-reasons.bander-motor-failure" msgstr "Bander Motor Failure" msgid "printer-state-reasons.bander-near-limit" msgstr "Bander Near Limit" msgid "printer-state-reasons.bander-offline" msgstr "Bander Offline" msgid "printer-state-reasons.bander-opened" msgstr "Bander Opened" msgid "printer-state-reasons.bander-over-temperature" msgstr "Bander Over Temperature" msgid "printer-state-reasons.bander-power-saver" msgstr "Bander Power Saver" msgid "printer-state-reasons.bander-recoverable-failure" msgstr "Bander Recoverable Failure" msgid "printer-state-reasons.bander-recoverable-storage" msgstr "Bander Recoverable Storage" msgid "printer-state-reasons.bander-removed" msgstr "Bander Removed" msgid "printer-state-reasons.bander-resource-added" msgstr "Bander Resource Added" msgid "printer-state-reasons.bander-resource-removed" msgstr "Bander Resource Removed" msgid "printer-state-reasons.bander-thermistor-failure" msgstr "Bander Thermistor Failure" msgid "printer-state-reasons.bander-timing-failure" msgstr "Bander Timing Failure" msgid "printer-state-reasons.bander-turned-off" msgstr "Bander Turned Off" msgid "printer-state-reasons.bander-turned-on" msgstr "Bander Turned On" msgid "printer-state-reasons.bander-under-temperature" msgstr "Bander Under Temperature" msgid "printer-state-reasons.bander-unrecoverable-failure" msgstr "Bander Unrecoverable Failure" msgid "printer-state-reasons.bander-unrecoverable-storage-error" msgstr "Bander Unrecoverable Storage Error" msgid "printer-state-reasons.bander-warming-up" msgstr "Bander Warming Up" msgid "printer-state-reasons.binder-added" msgstr "Binder Added" msgid "printer-state-reasons.binder-almost-empty" msgstr "Binder Almost Empty" msgid "printer-state-reasons.binder-almost-full" msgstr "Binder Almost Full" msgid "printer-state-reasons.binder-at-limit" msgstr "Binder At Limit" msgid "printer-state-reasons.binder-closed" msgstr "Binder Closed" msgid "printer-state-reasons.binder-configuration-change" msgstr "Binder Configuration Change" msgid "printer-state-reasons.binder-cover-closed" msgstr "Binder Cover Closed" msgid "printer-state-reasons.binder-cover-open" msgstr "Binder Cover Open" msgid "printer-state-reasons.binder-empty" msgstr "Binder Empty" msgid "printer-state-reasons.binder-full" msgstr "Binder Full" msgid "printer-state-reasons.binder-interlock-closed" msgstr "Binder Interlock Closed" msgid "printer-state-reasons.binder-interlock-open" msgstr "Binder Interlock Open" msgid "printer-state-reasons.binder-jam" msgstr "Binder Jam" msgid "printer-state-reasons.binder-life-almost-over" msgstr "Binder Life Almost Over" msgid "printer-state-reasons.binder-life-over" msgstr "Binder Life Over" msgid "printer-state-reasons.binder-memory-exhausted" msgstr "Binder Memory Exhausted" msgid "printer-state-reasons.binder-missing" msgstr "Binder Missing" msgid "printer-state-reasons.binder-motor-failure" msgstr "Binder Motor Failure" msgid "printer-state-reasons.binder-near-limit" msgstr "Binder Near Limit" msgid "printer-state-reasons.binder-offline" msgstr "Binder Offline" msgid "printer-state-reasons.binder-opened" msgstr "Binder Opened" msgid "printer-state-reasons.binder-over-temperature" msgstr "Binder Over Temperature" msgid "printer-state-reasons.binder-power-saver" msgstr "Binder Power Saver" msgid "printer-state-reasons.binder-recoverable-failure" msgstr "Binder Recoverable Failure" msgid "printer-state-reasons.binder-recoverable-storage" msgstr "Binder Recoverable Storage" msgid "printer-state-reasons.binder-removed" msgstr "Binder Removed" msgid "printer-state-reasons.binder-resource-added" msgstr "Binder Resource Added" msgid "printer-state-reasons.binder-resource-removed" msgstr "Binder Resource Removed" msgid "printer-state-reasons.binder-thermistor-failure" msgstr "Binder Thermistor Failure" msgid "printer-state-reasons.binder-timing-failure" msgstr "Binder Timing Failure" msgid "printer-state-reasons.binder-turned-off" msgstr "Binder Turned Off" msgid "printer-state-reasons.binder-turned-on" msgstr "Binder Turned On" msgid "printer-state-reasons.binder-under-temperature" msgstr "Binder Under Temperature" msgid "printer-state-reasons.binder-unrecoverable-failure" msgstr "Binder Unrecoverable Failure" msgid "printer-state-reasons.binder-unrecoverable-storage-error" msgstr "Binder Unrecoverable Storage Error" msgid "printer-state-reasons.binder-warming-up" msgstr "Binder Warming Up" msgid "printer-state-reasons.camera-failure" msgstr "Camera Failure" msgid "printer-state-reasons.chamber-cooling" msgstr "Chamber Cooling" msgid "printer-state-reasons.chamber-heating" msgstr "Chamber Heating" msgid "printer-state-reasons.chamber-temperature-high" msgstr "Chamber Temperature High" msgid "printer-state-reasons.chamber-temperature-low" msgstr "Chamber Temperature Low" msgid "printer-state-reasons.cleaner-life-almost-over" msgstr "Cleaner Life Almost Over" msgid "printer-state-reasons.cleaner-life-over" msgstr "Cleaner Life Over" msgid "printer-state-reasons.configuration-change" msgstr "Configuration Change" msgid "printer-state-reasons.connecting-to-device" msgstr "Connecting To Device" msgid "printer-state-reasons.cover-open" msgstr "Cover Open" msgid "printer-state-reasons.deactivated" msgstr "Deactivated" msgid "printer-state-reasons.developer-empty" msgstr "Developer Empty" msgid "printer-state-reasons.developer-low" msgstr "Developer Low" msgid "printer-state-reasons.die-cutter-added" msgstr "Die Cutter Added" msgid "printer-state-reasons.die-cutter-almost-empty" msgstr "Die Cutter Almost Empty" msgid "printer-state-reasons.die-cutter-almost-full" msgstr "Die Cutter Almost Full" msgid "printer-state-reasons.die-cutter-at-limit" msgstr "Die Cutter At Limit" msgid "printer-state-reasons.die-cutter-closed" msgstr "Die Cutter Closed" msgid "printer-state-reasons.die-cutter-configuration-change" msgstr "Die Cutter Configuration Change" msgid "printer-state-reasons.die-cutter-cover-closed" msgstr "Die Cutter Cover Closed" msgid "printer-state-reasons.die-cutter-cover-open" msgstr "Die Cutter Cover Open" msgid "printer-state-reasons.die-cutter-empty" msgstr "Die Cutter Empty" msgid "printer-state-reasons.die-cutter-full" msgstr "Die Cutter Full" msgid "printer-state-reasons.die-cutter-interlock-closed" msgstr "Die Cutter Interlock Closed" msgid "printer-state-reasons.die-cutter-interlock-open" msgstr "Die Cutter Interlock Open" msgid "printer-state-reasons.die-cutter-jam" msgstr "Die Cutter Jam" msgid "printer-state-reasons.die-cutter-life-almost-over" msgstr "Die Cutter Life Almost Over" msgid "printer-state-reasons.die-cutter-life-over" msgstr "Die Cutter Life Over" msgid "printer-state-reasons.die-cutter-memory-exhausted" msgstr "Die Cutter Memory Exhausted" msgid "printer-state-reasons.die-cutter-missing" msgstr "Die Cutter Missing" msgid "printer-state-reasons.die-cutter-motor-failure" msgstr "Die Cutter Motor Failure" msgid "printer-state-reasons.die-cutter-near-limit" msgstr "Die Cutter Near Limit" msgid "printer-state-reasons.die-cutter-offline" msgstr "Die Cutter Offline" msgid "printer-state-reasons.die-cutter-opened" msgstr "Die Cutter Opened" msgid "printer-state-reasons.die-cutter-over-temperature" msgstr "Die Cutter Over Temperature" msgid "printer-state-reasons.die-cutter-power-saver" msgstr "Die Cutter Power Saver" msgid "printer-state-reasons.die-cutter-recoverable-failure" msgstr "Die Cutter Recoverable Failure" msgid "printer-state-reasons.die-cutter-recoverable-storage" msgstr "Die Cutter Recoverable Storage" msgid "printer-state-reasons.die-cutter-removed" msgstr "Die Cutter Removed" msgid "printer-state-reasons.die-cutter-resource-added" msgstr "Die Cutter Resource Added" msgid "printer-state-reasons.die-cutter-resource-removed" msgstr "Die Cutter Resource Removed" msgid "printer-state-reasons.die-cutter-thermistor-failure" msgstr "Die Cutter Thermistor Failure" msgid "printer-state-reasons.die-cutter-timing-failure" msgstr "Die Cutter Timing Failure" msgid "printer-state-reasons.die-cutter-turned-off" msgstr "Die Cutter Turned Off" msgid "printer-state-reasons.die-cutter-turned-on" msgstr "Die Cutter Turned On" msgid "printer-state-reasons.die-cutter-under-temperature" msgstr "Die Cutter Under Temperature" msgid "printer-state-reasons.die-cutter-unrecoverable-failure" msgstr "Die Cutter Unrecoverable Failure" msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error" msgstr "Die Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.die-cutter-warming-up" msgstr "Die Cutter Warming Up" msgid "printer-state-reasons.door-open" msgstr "Door Open" msgid "printer-state-reasons.extruder-cooling" msgstr "Extruder Cooling" msgid "printer-state-reasons.extruder-failure" msgstr "Extruder Failure" msgid "printer-state-reasons.extruder-heating" msgstr "Extruder Heating" msgid "printer-state-reasons.extruder-jam" msgstr "Extruder Jam" msgid "printer-state-reasons.extruder-temperature-high" msgstr "Extruder Temperature High" msgid "printer-state-reasons.extruder-temperature-low" msgstr "Extruder Temperature Low" msgid "printer-state-reasons.fan-failure" msgstr "Fan Failure" msgid "printer-state-reasons.folder-added" msgstr "Folder Added" msgid "printer-state-reasons.folder-almost-empty" msgstr "Folder Almost Empty" msgid "printer-state-reasons.folder-almost-full" msgstr "Folder Almost Full" msgid "printer-state-reasons.folder-at-limit" msgstr "Folder At Limit" msgid "printer-state-reasons.folder-closed" msgstr "Folder Closed" msgid "printer-state-reasons.folder-configuration-change" msgstr "Folder Configuration Change" msgid "printer-state-reasons.folder-cover-closed" msgstr "Folder Cover Closed" msgid "printer-state-reasons.folder-cover-open" msgstr "Folder Cover Open" msgid "printer-state-reasons.folder-empty" msgstr "Folder Empty" msgid "printer-state-reasons.folder-full" msgstr "Folder Full" msgid "printer-state-reasons.folder-interlock-closed" msgstr "Folder Interlock Closed" msgid "printer-state-reasons.folder-interlock-open" msgstr "Folder Interlock Open" msgid "printer-state-reasons.folder-jam" msgstr "Folder Jam" msgid "printer-state-reasons.folder-life-almost-over" msgstr "Folder Life Almost Over" msgid "printer-state-reasons.folder-life-over" msgstr "Folder Life Over" msgid "printer-state-reasons.folder-memory-exhausted" msgstr "Folder Memory Exhausted" msgid "printer-state-reasons.folder-missing" msgstr "Folder Missing" msgid "printer-state-reasons.folder-motor-failure" msgstr "Folder Motor Failure" msgid "printer-state-reasons.folder-near-limit" msgstr "Folder Near Limit" msgid "printer-state-reasons.folder-offline" msgstr "Folder Offline" msgid "printer-state-reasons.folder-opened" msgstr "Folder Opened" msgid "printer-state-reasons.folder-over-temperature" msgstr "Folder Over Temperature" msgid "printer-state-reasons.folder-power-saver" msgstr "Folder Power Saver" msgid "printer-state-reasons.folder-recoverable-failure" msgstr "Folder Recoverable Failure" msgid "printer-state-reasons.folder-recoverable-storage" msgstr "Folder Recoverable Storage" msgid "printer-state-reasons.folder-removed" msgstr "Folder Removed" msgid "printer-state-reasons.folder-resource-added" msgstr "Folder Resource Added" msgid "printer-state-reasons.folder-resource-removed" msgstr "Folder Resource Removed" msgid "printer-state-reasons.folder-thermistor-failure" msgstr "Folder Thermistor Failure" msgid "printer-state-reasons.folder-timing-failure" msgstr "Folder Timing Failure" msgid "printer-state-reasons.folder-turned-off" msgstr "Folder Turned Off" msgid "printer-state-reasons.folder-turned-on" msgstr "Folder Turned On" msgid "printer-state-reasons.folder-under-temperature" msgstr "Folder Under Temperature" msgid "printer-state-reasons.folder-unrecoverable-failure" msgstr "Folder Unrecoverable Failure" msgid "printer-state-reasons.folder-unrecoverable-storage-error" msgstr "Folder Unrecoverable Storage Error" msgid "printer-state-reasons.folder-warming-up" msgstr "Folder Warming Up" msgid "printer-state-reasons.fuser-over-temp" msgstr "Fuser Over Temp" msgid "printer-state-reasons.fuser-under-temp" msgstr "Fuser Under Temp" msgid "printer-state-reasons.hold-new-jobs" msgstr "Hold New Jobs" msgid "printer-state-reasons.identify-printer-requested" msgstr "Identify Printer" msgid "printer-state-reasons.imprinter-added" msgstr "Imprinter Added" msgid "printer-state-reasons.imprinter-almost-empty" msgstr "Imprinter Almost Empty" msgid "printer-state-reasons.imprinter-almost-full" msgstr "Imprinter Almost Full" msgid "printer-state-reasons.imprinter-at-limit" msgstr "Imprinter At Limit" msgid "printer-state-reasons.imprinter-closed" msgstr "Imprinter Closed" msgid "printer-state-reasons.imprinter-configuration-change" msgstr "Imprinter Configuration Change" msgid "printer-state-reasons.imprinter-cover-closed" msgstr "Imprinter Cover Closed" msgid "printer-state-reasons.imprinter-cover-open" msgstr "Imprinter Cover Open" msgid "printer-state-reasons.imprinter-empty" msgstr "Imprinter Empty" msgid "printer-state-reasons.imprinter-full" msgstr "Imprinter Full" msgid "printer-state-reasons.imprinter-interlock-closed" msgstr "Imprinter Interlock Closed" msgid "printer-state-reasons.imprinter-interlock-open" msgstr "Imprinter Interlock Open" msgid "printer-state-reasons.imprinter-jam" msgstr "Imprinter Jam" msgid "printer-state-reasons.imprinter-life-almost-over" msgstr "Imprinter Life Almost Over" msgid "printer-state-reasons.imprinter-life-over" msgstr "Imprinter Life Over" msgid "printer-state-reasons.imprinter-memory-exhausted" msgstr "Imprinter Memory Exhausted" msgid "printer-state-reasons.imprinter-missing" msgstr "Imprinter Missing" msgid "printer-state-reasons.imprinter-motor-failure" msgstr "Imprinter Motor Failure" msgid "printer-state-reasons.imprinter-near-limit" msgstr "Imprinter Near Limit" msgid "printer-state-reasons.imprinter-offline" msgstr "Imprinter Offline" msgid "printer-state-reasons.imprinter-opened" msgstr "Imprinter Opened" msgid "printer-state-reasons.imprinter-over-temperature" msgstr "Imprinter Over Temperature" msgid "printer-state-reasons.imprinter-power-saver" msgstr "Imprinter Power Saver" msgid "printer-state-reasons.imprinter-recoverable-failure" msgstr "Imprinter Recoverable Failure" msgid "printer-state-reasons.imprinter-recoverable-storage" msgstr "Imprinter Recoverable Storage" msgid "printer-state-reasons.imprinter-removed" msgstr "Imprinter Removed" msgid "printer-state-reasons.imprinter-resource-added" msgstr "Imprinter Resource Added" msgid "printer-state-reasons.imprinter-resource-removed" msgstr "Imprinter Resource Removed" msgid "printer-state-reasons.imprinter-thermistor-failure" msgstr "Imprinter Thermistor Failure" msgid "printer-state-reasons.imprinter-timing-failure" msgstr "Imprinter Timing Failure" msgid "printer-state-reasons.imprinter-turned-off" msgstr "Imprinter Turned Off" msgid "printer-state-reasons.imprinter-turned-on" msgstr "Imprinter Turned On" msgid "printer-state-reasons.imprinter-under-temperature" msgstr "Imprinter Under Temperature" msgid "printer-state-reasons.imprinter-unrecoverable-failure" msgstr "Imprinter Unrecoverable Failure" msgid "printer-state-reasons.imprinter-unrecoverable-storage-error" msgstr "Imprinter Unrecoverable Storage Error" msgid "printer-state-reasons.imprinter-warming-up" msgstr "Imprinter Warming Up" msgid "printer-state-reasons.input-cannot-feed-size-selected" msgstr "Input Cannot Feed Size Selected" msgid "printer-state-reasons.input-manual-input-request" msgstr "Input Manual Input Request" msgid "printer-state-reasons.input-media-color-change" msgstr "Input Media Color Change" msgid "printer-state-reasons.input-media-form-parts-change" msgstr "Input Media Form Parts Change" msgid "printer-state-reasons.input-media-size-change" msgstr "Input Media Size Change" msgid "printer-state-reasons.input-media-type-change" msgstr "Input Media Type Change" msgid "printer-state-reasons.input-media-weight-change" msgstr "Input Media Weight Change" msgid "printer-state-reasons.input-tray-elevation-failure" msgstr "Input Tray Elevation Failure" msgid "printer-state-reasons.input-tray-missing" msgstr "Input Tray Missing" msgid "printer-state-reasons.input-tray-position-failure" msgstr "Input Tray Position Failure" msgid "printer-state-reasons.inserter-added" msgstr "Inserter Added" msgid "printer-state-reasons.inserter-almost-empty" msgstr "Inserter Almost Empty" msgid "printer-state-reasons.inserter-almost-full" msgstr "Inserter Almost Full" msgid "printer-state-reasons.inserter-at-limit" msgstr "Inserter At Limit" msgid "printer-state-reasons.inserter-closed" msgstr "Inserter Closed" msgid "printer-state-reasons.inserter-configuration-change" msgstr "Inserter Configuration Change" msgid "printer-state-reasons.inserter-cover-closed" msgstr "Inserter Cover Closed" msgid "printer-state-reasons.inserter-cover-open" msgstr "Inserter Cover Open" msgid "printer-state-reasons.inserter-empty" msgstr "Inserter Empty" msgid "printer-state-reasons.inserter-full" msgstr "Inserter Full" msgid "printer-state-reasons.inserter-interlock-closed" msgstr "Inserter Interlock Closed" msgid "printer-state-reasons.inserter-interlock-open" msgstr "Inserter Interlock Open" msgid "printer-state-reasons.inserter-jam" msgstr "Inserter Jam" msgid "printer-state-reasons.inserter-life-almost-over" msgstr "Inserter Life Almost Over" msgid "printer-state-reasons.inserter-life-over" msgstr "Inserter Life Over" msgid "printer-state-reasons.inserter-memory-exhausted" msgstr "Inserter Memory Exhausted" msgid "printer-state-reasons.inserter-missing" msgstr "Inserter Missing" msgid "printer-state-reasons.inserter-motor-failure" msgstr "Inserter Motor Failure" msgid "printer-state-reasons.inserter-near-limit" msgstr "Inserter Near Limit" msgid "printer-state-reasons.inserter-offline" msgstr "Inserter Offline" msgid "printer-state-reasons.inserter-opened" msgstr "Inserter Opened" msgid "printer-state-reasons.inserter-over-temperature" msgstr "Inserter Over Temperature" msgid "printer-state-reasons.inserter-power-saver" msgstr "Inserter Power Saver" msgid "printer-state-reasons.inserter-recoverable-failure" msgstr "Inserter Recoverable Failure" msgid "printer-state-reasons.inserter-recoverable-storage" msgstr "Inserter Recoverable Storage" msgid "printer-state-reasons.inserter-removed" msgstr "Inserter Removed" msgid "printer-state-reasons.inserter-resource-added" msgstr "Inserter Resource Added" msgid "printer-state-reasons.inserter-resource-removed" msgstr "Inserter Resource Removed" msgid "printer-state-reasons.inserter-thermistor-failure" msgstr "Inserter Thermistor Failure" msgid "printer-state-reasons.inserter-timing-failure" msgstr "Inserter Timing Failure" msgid "printer-state-reasons.inserter-turned-off" msgstr "Inserter Turned Off" msgid "printer-state-reasons.inserter-turned-on" msgstr "Inserter Turned On" msgid "printer-state-reasons.inserter-under-temperature" msgstr "Inserter Under Temperature" msgid "printer-state-reasons.inserter-unrecoverable-failure" msgstr "Inserter Unrecoverable Failure" msgid "printer-state-reasons.inserter-unrecoverable-storage-error" msgstr "Inserter Unrecoverable Storage Error" msgid "printer-state-reasons.inserter-warming-up" msgstr "Inserter Warming Up" msgid "printer-state-reasons.interlock-closed" msgstr "Interlock Closed" msgid "printer-state-reasons.interlock-open" msgstr "Interlock Open" msgid "printer-state-reasons.interpreter-cartridge-added" msgstr "Interpreter Cartridge Added" msgid "printer-state-reasons.interpreter-cartridge-deleted" msgstr "Interpreter Cartridge Deleted" msgid "printer-state-reasons.interpreter-complex-page-encountered" msgstr "Interpreter Complex Page Encountered" msgid "printer-state-reasons.interpreter-memory-decrease" msgstr "Interpreter Memory Decrease" msgid "printer-state-reasons.interpreter-memory-increase" msgstr "Interpreter Memory Increase" msgid "printer-state-reasons.interpreter-resource-added" msgstr "Interpreter Resource Added" msgid "printer-state-reasons.interpreter-resource-deleted" msgstr "Interpreter Resource Deleted" msgid "printer-state-reasons.interpreter-resource-unavailable" msgstr "Interpreter Resource Unavailable" msgid "printer-state-reasons.lamp-at-eol" msgstr "Lamp At Eol" msgid "printer-state-reasons.lamp-failure" msgstr "Lamp Failure" msgid "printer-state-reasons.lamp-near-eol" msgstr "Lamp Near Eol" msgid "printer-state-reasons.laser-at-eol" msgstr "Laser At Eol" msgid "printer-state-reasons.laser-failure" msgstr "Laser Failure" msgid "printer-state-reasons.laser-near-eol" msgstr "Laser Near Eol" msgid "printer-state-reasons.make-envelope-added" msgstr "Make Envelope Added" msgid "printer-state-reasons.make-envelope-almost-empty" msgstr "Make Envelope Almost Empty" msgid "printer-state-reasons.make-envelope-almost-full" msgstr "Make Envelope Almost Full" msgid "printer-state-reasons.make-envelope-at-limit" msgstr "Make Envelope At Limit" msgid "printer-state-reasons.make-envelope-closed" msgstr "Make Envelope Closed" msgid "printer-state-reasons.make-envelope-configuration-change" msgstr "Make Envelope Configuration Change" msgid "printer-state-reasons.make-envelope-cover-closed" msgstr "Make Envelope Cover Closed" msgid "printer-state-reasons.make-envelope-cover-open" msgstr "Make Envelope Cover Open" msgid "printer-state-reasons.make-envelope-empty" msgstr "Make Envelope Empty" msgid "printer-state-reasons.make-envelope-full" msgstr "Make Envelope Full" msgid "printer-state-reasons.make-envelope-interlock-closed" msgstr "Make Envelope Interlock Closed" msgid "printer-state-reasons.make-envelope-interlock-open" msgstr "Make Envelope Interlock Open" msgid "printer-state-reasons.make-envelope-jam" msgstr "Make Envelope Jam" msgid "printer-state-reasons.make-envelope-life-almost-over" msgstr "Make Envelope Life Almost Over" msgid "printer-state-reasons.make-envelope-life-over" msgstr "Make Envelope Life Over" msgid "printer-state-reasons.make-envelope-memory-exhausted" msgstr "Make Envelope Memory Exhausted" msgid "printer-state-reasons.make-envelope-missing" msgstr "Make Envelope Missing" msgid "printer-state-reasons.make-envelope-motor-failure" msgstr "Make Envelope Motor Failure" msgid "printer-state-reasons.make-envelope-near-limit" msgstr "Make Envelope Near Limit" msgid "printer-state-reasons.make-envelope-offline" msgstr "Make Envelope Offline" msgid "printer-state-reasons.make-envelope-opened" msgstr "Make Envelope Opened" msgid "printer-state-reasons.make-envelope-over-temperature" msgstr "Make Envelope Over Temperature" msgid "printer-state-reasons.make-envelope-power-saver" msgstr "Make Envelope Power Saver" msgid "printer-state-reasons.make-envelope-recoverable-failure" msgstr "Make Envelope Recoverable Failure" msgid "printer-state-reasons.make-envelope-recoverable-storage" msgstr "Make Envelope Recoverable Storage" msgid "printer-state-reasons.make-envelope-removed" msgstr "Make Envelope Removed" msgid "printer-state-reasons.make-envelope-resource-added" msgstr "Make Envelope Resource Added" msgid "printer-state-reasons.make-envelope-resource-removed" msgstr "Make Envelope Resource Removed" msgid "printer-state-reasons.make-envelope-thermistor-failure" msgstr "Make Envelope Thermistor Failure" msgid "printer-state-reasons.make-envelope-timing-failure" msgstr "Make Envelope Timing Failure" msgid "printer-state-reasons.make-envelope-turned-off" msgstr "Make Envelope Turned Off" msgid "printer-state-reasons.make-envelope-turned-on" msgstr "Make Envelope Turned On" msgid "printer-state-reasons.make-envelope-under-temperature" msgstr "Make Envelope Under Temperature" msgid "printer-state-reasons.make-envelope-unrecoverable-failure" msgstr "Make Envelope Unrecoverable Failure" msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error" msgstr "Make Envelope Unrecoverable Storage Error" msgid "printer-state-reasons.make-envelope-warming-up" msgstr "Make Envelope Warming Up" msgid "printer-state-reasons.marker-adjusting-print-quality" msgstr "Marker Adjusting Print Quality" msgid "printer-state-reasons.marker-developer-almost-empty" msgstr "Marker Developer Almost Empty" msgid "printer-state-reasons.marker-developer-empty" msgstr "Marker Developer Empty" msgid "printer-state-reasons.marker-fuser-thermistor-failure" msgstr "Marker Fuser Thermistor Failure" msgid "printer-state-reasons.marker-fuser-timing-failure" msgstr "Marker Fuser Timing Failure" msgid "printer-state-reasons.marker-ink-almost-empty" msgstr "Marker Ink Almost Empty" msgid "printer-state-reasons.marker-ink-empty" msgstr "Marker Ink Empty" msgid "printer-state-reasons.marker-print-ribbon-almost-empty" msgstr "Marker Print Ribbon Almost Empty" msgid "printer-state-reasons.marker-print-ribbon-empty" msgstr "Marker Print Ribbon Empty" msgid "printer-state-reasons.marker-supply-empty" msgstr "Marker Supply Empty" msgid "printer-state-reasons.marker-supply-low" msgstr "Marker Supply Low" msgid "printer-state-reasons.marker-toner-cartridge-missing" msgstr "Marker Toner Cartridge Missing" msgid "printer-state-reasons.marker-waste-almost-full" msgstr "Marker Waste Almost Full" msgid "printer-state-reasons.marker-waste-full" msgstr "Marker Waste Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full" msgstr "Marker Waste Ink Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-full" msgstr "Marker Waste Ink Receptacle Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full" msgstr "Marker Waste Toner Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-full" msgstr "Marker Waste Toner Receptacle Full" msgid "printer-state-reasons.material-empty" msgstr "Material Empty" msgid "printer-state-reasons.material-low" msgstr "Material Low" msgid "printer-state-reasons.material-needed" msgstr "Material Needed" msgid "printer-state-reasons.media-empty" msgstr "Media Empty" msgid "printer-state-reasons.media-jam" msgstr "Media Jam" msgid "printer-state-reasons.media-low" msgstr "Media Low" msgid "printer-state-reasons.media-needed" msgstr "Media Needed" msgid "printer-state-reasons.media-path-cannot-duplex-media-selected" msgstr "Media Path Cannot Duplex Media Selected" msgid "printer-state-reasons.media-path-media-tray-almost-full" msgstr "Media Path Media Tray Almost Full" msgid "printer-state-reasons.media-path-media-tray-full" msgstr "Media Path Media Tray Full" msgid "printer-state-reasons.media-path-media-tray-missing" msgstr "Media Path Media Tray Missing" msgid "printer-state-reasons.motor-failure" msgstr "Motor Failure" msgid "printer-state-reasons.moving-to-paused" msgstr "Moving To Paused" msgid "printer-state-reasons.none" msgstr "None" msgid "printer-state-reasons.opc-life-over" msgstr "Opc Life Over" msgid "printer-state-reasons.opc-near-eol" msgstr "Opc Near Eol" msgid "printer-state-reasons.other" msgstr "Other" msgid "printer-state-reasons.output-area-almost-full" msgstr "Output Area Almost Full" msgid "printer-state-reasons.output-area-full" msgstr "Output Area Full" msgid "printer-state-reasons.output-mailbox-select-failure" msgstr "Output Mailbox Select Failure" msgid "printer-state-reasons.output-tray-missing" msgstr "Output Tray Missing" msgid "printer-state-reasons.paused" msgstr "Paused" msgid "printer-state-reasons.perforater-added" msgstr "Perforater Added" msgid "printer-state-reasons.perforater-almost-empty" msgstr "Perforater Almost Empty" msgid "printer-state-reasons.perforater-almost-full" msgstr "Perforater Almost Full" msgid "printer-state-reasons.perforater-at-limit" msgstr "Perforater At Limit" msgid "printer-state-reasons.perforater-closed" msgstr "Perforater Closed" msgid "printer-state-reasons.perforater-configuration-change" msgstr "Perforater Configuration Change" msgid "printer-state-reasons.perforater-cover-closed" msgstr "Perforater Cover Closed" msgid "printer-state-reasons.perforater-cover-open" msgstr "Perforater Cover Open" msgid "printer-state-reasons.perforater-empty" msgstr "Perforater Empty" msgid "printer-state-reasons.perforater-full" msgstr "Perforater Full" msgid "printer-state-reasons.perforater-interlock-closed" msgstr "Perforater Interlock Closed" msgid "printer-state-reasons.perforater-interlock-open" msgstr "Perforater Interlock Open" msgid "printer-state-reasons.perforater-jam" msgstr "Perforater Jam" msgid "printer-state-reasons.perforater-life-almost-over" msgstr "Perforater Life Almost Over" msgid "printer-state-reasons.perforater-life-over" msgstr "Perforater Life Over" msgid "printer-state-reasons.perforater-memory-exhausted" msgstr "Perforater Memory Exhausted" msgid "printer-state-reasons.perforater-missing" msgstr "Perforater Missing" msgid "printer-state-reasons.perforater-motor-failure" msgstr "Perforater Motor Failure" msgid "printer-state-reasons.perforater-near-limit" msgstr "Perforater Near Limit" msgid "printer-state-reasons.perforater-offline" msgstr "Perforater Offline" msgid "printer-state-reasons.perforater-opened" msgstr "Perforater Opened" msgid "printer-state-reasons.perforater-over-temperature" msgstr "Perforater Over Temperature" msgid "printer-state-reasons.perforater-power-saver" msgstr "Perforater Power Saver" msgid "printer-state-reasons.perforater-recoverable-failure" msgstr "Perforater Recoverable Failure" msgid "printer-state-reasons.perforater-recoverable-storage" msgstr "Perforater Recoverable Storage" msgid "printer-state-reasons.perforater-removed" msgstr "Perforater Removed" msgid "printer-state-reasons.perforater-resource-added" msgstr "Perforater Resource Added" msgid "printer-state-reasons.perforater-resource-removed" msgstr "Perforater Resource Removed" msgid "printer-state-reasons.perforater-thermistor-failure" msgstr "Perforater Thermistor Failure" msgid "printer-state-reasons.perforater-timing-failure" msgstr "Perforater Timing Failure" msgid "printer-state-reasons.perforater-turned-off" msgstr "Perforater Turned Off" msgid "printer-state-reasons.perforater-turned-on" msgstr "Perforater Turned On" msgid "printer-state-reasons.perforater-under-temperature" msgstr "Perforater Under Temperature" msgid "printer-state-reasons.perforater-unrecoverable-failure" msgstr "Perforater Unrecoverable Failure" msgid "printer-state-reasons.perforater-unrecoverable-storage-error" msgstr "Perforater Unrecoverable Storage Error" msgid "printer-state-reasons.perforater-warming-up" msgstr "Perforater Warming Up" msgid "printer-state-reasons.power-down" msgstr "Power Down" msgid "printer-state-reasons.power-up" msgstr "Power Up" msgid "printer-state-reasons.printer-manual-reset" msgstr "Printer Manual Reset" msgid "printer-state-reasons.printer-nms-reset" msgstr "Printer Nms Reset" msgid "printer-state-reasons.printer-ready-to-print" msgstr "Printer Ready To Print" msgid "printer-state-reasons.puncher-added" msgstr "Puncher Added" msgid "printer-state-reasons.puncher-almost-empty" msgstr "Puncher Almost Empty" msgid "printer-state-reasons.puncher-almost-full" msgstr "Puncher Almost Full" msgid "printer-state-reasons.puncher-at-limit" msgstr "Puncher At Limit" msgid "printer-state-reasons.puncher-closed" msgstr "Puncher Closed" msgid "printer-state-reasons.puncher-configuration-change" msgstr "Puncher Configuration Change" msgid "printer-state-reasons.puncher-cover-closed" msgstr "Puncher Cover Closed" msgid "printer-state-reasons.puncher-cover-open" msgstr "Puncher Cover Open" msgid "printer-state-reasons.puncher-empty" msgstr "Puncher Empty" msgid "printer-state-reasons.puncher-full" msgstr "Puncher Full" msgid "printer-state-reasons.puncher-interlock-closed" msgstr "Puncher Interlock Closed" msgid "printer-state-reasons.puncher-interlock-open" msgstr "Puncher Interlock Open" msgid "printer-state-reasons.puncher-jam" msgstr "Puncher Jam" msgid "printer-state-reasons.puncher-life-almost-over" msgstr "Puncher Life Almost Over" msgid "printer-state-reasons.puncher-life-over" msgstr "Puncher Life Over" msgid "printer-state-reasons.puncher-memory-exhausted" msgstr "Puncher Memory Exhausted" msgid "printer-state-reasons.puncher-missing" msgstr "Puncher Missing" msgid "printer-state-reasons.puncher-motor-failure" msgstr "Puncher Motor Failure" msgid "printer-state-reasons.puncher-near-limit" msgstr "Puncher Near Limit" msgid "printer-state-reasons.puncher-offline" msgstr "Puncher Offline" msgid "printer-state-reasons.puncher-opened" msgstr "Puncher Opened" msgid "printer-state-reasons.puncher-over-temperature" msgstr "Puncher Over Temperature" msgid "printer-state-reasons.puncher-power-saver" msgstr "Puncher Power Saver" msgid "printer-state-reasons.puncher-recoverable-failure" msgstr "Puncher Recoverable Failure" msgid "printer-state-reasons.puncher-recoverable-storage" msgstr "Puncher Recoverable Storage" msgid "printer-state-reasons.puncher-removed" msgstr "Puncher Removed" msgid "printer-state-reasons.puncher-resource-added" msgstr "Puncher Resource Added" msgid "printer-state-reasons.puncher-resource-removed" msgstr "Puncher Resource Removed" msgid "printer-state-reasons.puncher-thermistor-failure" msgstr "Puncher Thermistor Failure" msgid "printer-state-reasons.puncher-timing-failure" msgstr "Puncher Timing Failure" msgid "printer-state-reasons.puncher-turned-off" msgstr "Puncher Turned Off" msgid "printer-state-reasons.puncher-turned-on" msgstr "Puncher Turned On" msgid "printer-state-reasons.puncher-under-temperature" msgstr "Puncher Under Temperature" msgid "printer-state-reasons.puncher-unrecoverable-failure" msgstr "Puncher Unrecoverable Failure" msgid "printer-state-reasons.puncher-unrecoverable-storage-error" msgstr "Puncher Unrecoverable Storage Error" msgid "printer-state-reasons.puncher-warming-up" msgstr "Puncher Warming Up" msgid "printer-state-reasons.separation-cutter-added" msgstr "Separation Cutter Added" msgid "printer-state-reasons.separation-cutter-almost-empty" msgstr "Separation Cutter Almost Empty" msgid "printer-state-reasons.separation-cutter-almost-full" msgstr "Separation Cutter Almost Full" msgid "printer-state-reasons.separation-cutter-at-limit" msgstr "Separation Cutter At Limit" msgid "printer-state-reasons.separation-cutter-closed" msgstr "Separation Cutter Closed" msgid "printer-state-reasons.separation-cutter-configuration-change" msgstr "Separation Cutter Configuration Change" msgid "printer-state-reasons.separation-cutter-cover-closed" msgstr "Separation Cutter Cover Closed" msgid "printer-state-reasons.separation-cutter-cover-open" msgstr "Separation Cutter Cover Open" msgid "printer-state-reasons.separation-cutter-empty" msgstr "Separation Cutter Empty" msgid "printer-state-reasons.separation-cutter-full" msgstr "Separation Cutter Full" msgid "printer-state-reasons.separation-cutter-interlock-closed" msgstr "Separation Cutter Interlock Closed" msgid "printer-state-reasons.separation-cutter-interlock-open" msgstr "Separation Cutter Interlock Open" msgid "printer-state-reasons.separation-cutter-jam" msgstr "Separation Cutter Jam" msgid "printer-state-reasons.separation-cutter-life-almost-over" msgstr "Separation Cutter Life Almost Over" msgid "printer-state-reasons.separation-cutter-life-over" msgstr "Separation Cutter Life Over" msgid "printer-state-reasons.separation-cutter-memory-exhausted" msgstr "Separation Cutter Memory Exhausted" msgid "printer-state-reasons.separation-cutter-missing" msgstr "Separation Cutter Missing" msgid "printer-state-reasons.separation-cutter-motor-failure" msgstr "Separation Cutter Motor Failure" msgid "printer-state-reasons.separation-cutter-near-limit" msgstr "Separation Cutter Near Limit" msgid "printer-state-reasons.separation-cutter-offline" msgstr "Separation Cutter Offline" msgid "printer-state-reasons.separation-cutter-opened" msgstr "Separation Cutter Opened" msgid "printer-state-reasons.separation-cutter-over-temperature" msgstr "Separation Cutter Over Temperature" msgid "printer-state-reasons.separation-cutter-power-saver" msgstr "Separation Cutter Power Saver" msgid "printer-state-reasons.separation-cutter-recoverable-failure" msgstr "Separation Cutter Recoverable Failure" msgid "printer-state-reasons.separation-cutter-recoverable-storage" msgstr "Separation Cutter Recoverable Storage" msgid "printer-state-reasons.separation-cutter-removed" msgstr "Separation Cutter Removed" msgid "printer-state-reasons.separation-cutter-resource-added" msgstr "Separation Cutter Resource Added" msgid "printer-state-reasons.separation-cutter-resource-removed" msgstr "Separation Cutter Resource Removed" msgid "printer-state-reasons.separation-cutter-thermistor-failure" msgstr "Separation Cutter Thermistor Failure" msgid "printer-state-reasons.separation-cutter-timing-failure" msgstr "Separation Cutter Timing Failure" msgid "printer-state-reasons.separation-cutter-turned-off" msgstr "Separation Cutter Turned Off" msgid "printer-state-reasons.separation-cutter-turned-on" msgstr "Separation Cutter Turned On" msgid "printer-state-reasons.separation-cutter-under-temperature" msgstr "Separation Cutter Under Temperature" msgid "printer-state-reasons.separation-cutter-unrecoverable-failure" msgstr "Separation Cutter Unrecoverable Failure" msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error" msgstr "Separation Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.separation-cutter-warming-up" msgstr "Separation Cutter Warming Up" msgid "printer-state-reasons.sheet-rotator-added" msgstr "Sheet Rotator Added" msgid "printer-state-reasons.sheet-rotator-almost-empty" msgstr "Sheet Rotator Almost Empty" msgid "printer-state-reasons.sheet-rotator-almost-full" msgstr "Sheet Rotator Almost Full" msgid "printer-state-reasons.sheet-rotator-at-limit" msgstr "Sheet Rotator At Limit" msgid "printer-state-reasons.sheet-rotator-closed" msgstr "Sheet Rotator Closed" msgid "printer-state-reasons.sheet-rotator-configuration-change" msgstr "Sheet Rotator Configuration Change" msgid "printer-state-reasons.sheet-rotator-cover-closed" msgstr "Sheet Rotator Cover Closed" msgid "printer-state-reasons.sheet-rotator-cover-open" msgstr "Sheet Rotator Cover Open" msgid "printer-state-reasons.sheet-rotator-empty" msgstr "Sheet Rotator Empty" msgid "printer-state-reasons.sheet-rotator-full" msgstr "Sheet Rotator Full" msgid "printer-state-reasons.sheet-rotator-interlock-closed" msgstr "Sheet Rotator Interlock Closed" msgid "printer-state-reasons.sheet-rotator-interlock-open" msgstr "Sheet Rotator Interlock Open" msgid "printer-state-reasons.sheet-rotator-jam" msgstr "Sheet Rotator Jam" msgid "printer-state-reasons.sheet-rotator-life-almost-over" msgstr "Sheet Rotator Life Almost Over" msgid "printer-state-reasons.sheet-rotator-life-over" msgstr "Sheet Rotator Life Over" msgid "printer-state-reasons.sheet-rotator-memory-exhausted" msgstr "Sheet Rotator Memory Exhausted" msgid "printer-state-reasons.sheet-rotator-missing" msgstr "Sheet Rotator Missing" msgid "printer-state-reasons.sheet-rotator-motor-failure" msgstr "Sheet Rotator Motor Failure" msgid "printer-state-reasons.sheet-rotator-near-limit" msgstr "Sheet Rotator Near Limit" msgid "printer-state-reasons.sheet-rotator-offline" msgstr "Sheet Rotator Offline" msgid "printer-state-reasons.sheet-rotator-opened" msgstr "Sheet Rotator Opened" msgid "printer-state-reasons.sheet-rotator-over-temperature" msgstr "Sheet Rotator Over Temperature" msgid "printer-state-reasons.sheet-rotator-power-saver" msgstr "Sheet Rotator Power Saver" msgid "printer-state-reasons.sheet-rotator-recoverable-failure" msgstr "Sheet Rotator Recoverable Failure" msgid "printer-state-reasons.sheet-rotator-recoverable-storage" msgstr "Sheet Rotator Recoverable Storage" msgid "printer-state-reasons.sheet-rotator-removed" msgstr "Sheet Rotator Removed" msgid "printer-state-reasons.sheet-rotator-resource-added" msgstr "Sheet Rotator Resource Added" msgid "printer-state-reasons.sheet-rotator-resource-removed" msgstr "Sheet Rotator Resource Removed" msgid "printer-state-reasons.sheet-rotator-thermistor-failure" msgstr "Sheet Rotator Thermistor Failure" msgid "printer-state-reasons.sheet-rotator-timing-failure" msgstr "Sheet Rotator Timing Failure" msgid "printer-state-reasons.sheet-rotator-turned-off" msgstr "Sheet Rotator Turned Off" msgid "printer-state-reasons.sheet-rotator-turned-on" msgstr "Sheet Rotator Turned On" msgid "printer-state-reasons.sheet-rotator-under-temperature" msgstr "Sheet Rotator Under Temperature" msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure" msgstr "Sheet Rotator Unrecoverable Failure" msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" msgstr "Sheet Rotator Unrecoverable Storage Error" msgid "printer-state-reasons.sheet-rotator-warming-up" msgstr "Sheet Rotator Warming Up" msgid "printer-state-reasons.shutdown" msgstr "Shutdown" msgid "printer-state-reasons.slitter-added" msgstr "Slitter Added" msgid "printer-state-reasons.slitter-almost-empty" msgstr "Slitter Almost Empty" msgid "printer-state-reasons.slitter-almost-full" msgstr "Slitter Almost Full" msgid "printer-state-reasons.slitter-at-limit" msgstr "Slitter At Limit" msgid "printer-state-reasons.slitter-closed" msgstr "Slitter Closed" msgid "printer-state-reasons.slitter-configuration-change" msgstr "Slitter Configuration Change" msgid "printer-state-reasons.slitter-cover-closed" msgstr "Slitter Cover Closed" msgid "printer-state-reasons.slitter-cover-open" msgstr "Slitter Cover Open" msgid "printer-state-reasons.slitter-empty" msgstr "Slitter Empty" msgid "printer-state-reasons.slitter-full" msgstr "Slitter Full" msgid "printer-state-reasons.slitter-interlock-closed" msgstr "Slitter Interlock Closed" msgid "printer-state-reasons.slitter-interlock-open" msgstr "Slitter Interlock Open" msgid "printer-state-reasons.slitter-jam" msgstr "Slitter Jam" msgid "printer-state-reasons.slitter-life-almost-over" msgstr "Slitter Life Almost Over" msgid "printer-state-reasons.slitter-life-over" msgstr "Slitter Life Over" msgid "printer-state-reasons.slitter-memory-exhausted" msgstr "Slitter Memory Exhausted" msgid "printer-state-reasons.slitter-missing" msgstr "Slitter Missing" msgid "printer-state-reasons.slitter-motor-failure" msgstr "Slitter Motor Failure" msgid "printer-state-reasons.slitter-near-limit" msgstr "Slitter Near Limit" msgid "printer-state-reasons.slitter-offline" msgstr "Slitter Offline" msgid "printer-state-reasons.slitter-opened" msgstr "Slitter Opened" msgid "printer-state-reasons.slitter-over-temperature" msgstr "Slitter Over Temperature" msgid "printer-state-reasons.slitter-power-saver" msgstr "Slitter Power Saver" msgid "printer-state-reasons.slitter-recoverable-failure" msgstr "Slitter Recoverable Failure" msgid "printer-state-reasons.slitter-recoverable-storage" msgstr "Slitter Recoverable Storage" msgid "printer-state-reasons.slitter-removed" msgstr "Slitter Removed" msgid "printer-state-reasons.slitter-resource-added" msgstr "Slitter Resource Added" msgid "printer-state-reasons.slitter-resource-removed" msgstr "Slitter Resource Removed" msgid "printer-state-reasons.slitter-thermistor-failure" msgstr "Slitter Thermistor Failure" msgid "printer-state-reasons.slitter-timing-failure" msgstr "Slitter Timing Failure" msgid "printer-state-reasons.slitter-turned-off" msgstr "Slitter Turned Off" msgid "printer-state-reasons.slitter-turned-on" msgstr "Slitter Turned On" msgid "printer-state-reasons.slitter-under-temperature" msgstr "Slitter Under Temperature" msgid "printer-state-reasons.slitter-unrecoverable-failure" msgstr "Slitter Unrecoverable Failure" msgid "printer-state-reasons.slitter-unrecoverable-storage-error" msgstr "Slitter Unrecoverable Storage Error" msgid "printer-state-reasons.slitter-warming-up" msgstr "Slitter Warming Up" msgid "printer-state-reasons.spool-area-full" msgstr "Spool Area Full" msgid "printer-state-reasons.stacker-added" msgstr "Stacker Added" msgid "printer-state-reasons.stacker-almost-empty" msgstr "Stacker Almost Empty" msgid "printer-state-reasons.stacker-almost-full" msgstr "Stacker Almost Full" msgid "printer-state-reasons.stacker-at-limit" msgstr "Stacker At Limit" msgid "printer-state-reasons.stacker-closed" msgstr "Stacker Closed" msgid "printer-state-reasons.stacker-configuration-change" msgstr "Stacker Configuration Change" msgid "printer-state-reasons.stacker-cover-closed" msgstr "Stacker Cover Closed" msgid "printer-state-reasons.stacker-cover-open" msgstr "Stacker Cover Open" msgid "printer-state-reasons.stacker-empty" msgstr "Stacker Empty" msgid "printer-state-reasons.stacker-full" msgstr "Stacker Full" msgid "printer-state-reasons.stacker-interlock-closed" msgstr "Stacker Interlock Closed" msgid "printer-state-reasons.stacker-interlock-open" msgstr "Stacker Interlock Open" msgid "printer-state-reasons.stacker-jam" msgstr "Stacker Jam" msgid "printer-state-reasons.stacker-life-almost-over" msgstr "Stacker Life Almost Over" msgid "printer-state-reasons.stacker-life-over" msgstr "Stacker Life Over" msgid "printer-state-reasons.stacker-memory-exhausted" msgstr "Stacker Memory Exhausted" msgid "printer-state-reasons.stacker-missing" msgstr "Stacker Missing" msgid "printer-state-reasons.stacker-motor-failure" msgstr "Stacker Motor Failure" msgid "printer-state-reasons.stacker-near-limit" msgstr "Stacker Near Limit" msgid "printer-state-reasons.stacker-offline" msgstr "Stacker Offline" msgid "printer-state-reasons.stacker-opened" msgstr "Stacker Opened" msgid "printer-state-reasons.stacker-over-temperature" msgstr "Stacker Over Temperature" msgid "printer-state-reasons.stacker-power-saver" msgstr "Stacker Power Saver" msgid "printer-state-reasons.stacker-recoverable-failure" msgstr "Stacker Recoverable Failure" msgid "printer-state-reasons.stacker-recoverable-storage" msgstr "Stacker Recoverable Storage" msgid "printer-state-reasons.stacker-removed" msgstr "Stacker Removed" msgid "printer-state-reasons.stacker-resource-added" msgstr "Stacker Resource Added" msgid "printer-state-reasons.stacker-resource-removed" msgstr "Stacker Resource Removed" msgid "printer-state-reasons.stacker-thermistor-failure" msgstr "Stacker Thermistor Failure" msgid "printer-state-reasons.stacker-timing-failure" msgstr "Stacker Timing Failure" msgid "printer-state-reasons.stacker-turned-off" msgstr "Stacker Turned Off" msgid "printer-state-reasons.stacker-turned-on" msgstr "Stacker Turned On" msgid "printer-state-reasons.stacker-under-temperature" msgstr "Stacker Under Temperature" msgid "printer-state-reasons.stacker-unrecoverable-failure" msgstr "Stacker Unrecoverable Failure" msgid "printer-state-reasons.stacker-unrecoverable-storage-error" msgstr "Stacker Unrecoverable Storage Error" msgid "printer-state-reasons.stacker-warming-up" msgstr "Stacker Warming Up" msgid "printer-state-reasons.stapler-added" msgstr "Stapler Added" msgid "printer-state-reasons.stapler-almost-empty" msgstr "Stapler Almost Empty" msgid "printer-state-reasons.stapler-almost-full" msgstr "Stapler Almost Full" msgid "printer-state-reasons.stapler-at-limit" msgstr "Stapler At Limit" msgid "printer-state-reasons.stapler-closed" msgstr "Stapler Closed" msgid "printer-state-reasons.stapler-configuration-change" msgstr "Stapler Configuration Change" msgid "printer-state-reasons.stapler-cover-closed" msgstr "Stapler Cover Closed" msgid "printer-state-reasons.stapler-cover-open" msgstr "Stapler Cover Open" msgid "printer-state-reasons.stapler-empty" msgstr "Stapler Empty" msgid "printer-state-reasons.stapler-full" msgstr "Stapler Full" msgid "printer-state-reasons.stapler-interlock-closed" msgstr "Stapler Interlock Closed" msgid "printer-state-reasons.stapler-interlock-open" msgstr "Stapler Interlock Open" msgid "printer-state-reasons.stapler-jam" msgstr "Stapler Jam" msgid "printer-state-reasons.stapler-life-almost-over" msgstr "Stapler Life Almost Over" msgid "printer-state-reasons.stapler-life-over" msgstr "Stapler Life Over" msgid "printer-state-reasons.stapler-memory-exhausted" msgstr "Stapler Memory Exhausted" msgid "printer-state-reasons.stapler-missing" msgstr "Stapler Missing" msgid "printer-state-reasons.stapler-motor-failure" msgstr "Stapler Motor Failure" msgid "printer-state-reasons.stapler-near-limit" msgstr "Stapler Near Limit" msgid "printer-state-reasons.stapler-offline" msgstr "Stapler Offline" msgid "printer-state-reasons.stapler-opened" msgstr "Stapler Opened" msgid "printer-state-reasons.stapler-over-temperature" msgstr "Stapler Over Temperature" msgid "printer-state-reasons.stapler-power-saver" msgstr "Stapler Power Saver" msgid "printer-state-reasons.stapler-recoverable-failure" msgstr "Stapler Recoverable Failure" msgid "printer-state-reasons.stapler-recoverable-storage" msgstr "Stapler Recoverable Storage" msgid "printer-state-reasons.stapler-removed" msgstr "Stapler Removed" msgid "printer-state-reasons.stapler-resource-added" msgstr "Stapler Resource Added" msgid "printer-state-reasons.stapler-resource-removed" msgstr "Stapler Resource Removed" msgid "printer-state-reasons.stapler-thermistor-failure" msgstr "Stapler Thermistor Failure" msgid "printer-state-reasons.stapler-timing-failure" msgstr "Stapler Timing Failure" msgid "printer-state-reasons.stapler-turned-off" msgstr "Stapler Turned Off" msgid "printer-state-reasons.stapler-turned-on" msgstr "Stapler Turned On" msgid "printer-state-reasons.stapler-under-temperature" msgstr "Stapler Under Temperature" msgid "printer-state-reasons.stapler-unrecoverable-failure" msgstr "Stapler Unrecoverable Failure" msgid "printer-state-reasons.stapler-unrecoverable-storage-error" msgstr "Stapler Unrecoverable Storage Error" msgid "printer-state-reasons.stapler-warming-up" msgstr "Stapler Warming Up" msgid "printer-state-reasons.stitcher-added" msgstr "Stitcher Added" msgid "printer-state-reasons.stitcher-almost-empty" msgstr "Stitcher Almost Empty" msgid "printer-state-reasons.stitcher-almost-full" msgstr "Stitcher Almost Full" msgid "printer-state-reasons.stitcher-at-limit" msgstr "Stitcher At Limit" msgid "printer-state-reasons.stitcher-closed" msgstr "Stitcher Closed" msgid "printer-state-reasons.stitcher-configuration-change" msgstr "Stitcher Configuration Change" msgid "printer-state-reasons.stitcher-cover-closed" msgstr "Stitcher Cover Closed" msgid "printer-state-reasons.stitcher-cover-open" msgstr "Stitcher Cover Open" msgid "printer-state-reasons.stitcher-empty" msgstr "Stitcher Empty" msgid "printer-state-reasons.stitcher-full" msgstr "Stitcher Full" msgid "printer-state-reasons.stitcher-interlock-closed" msgstr "Stitcher Interlock Closed" msgid "printer-state-reasons.stitcher-interlock-open" msgstr "Stitcher Interlock Open" msgid "printer-state-reasons.stitcher-jam" msgstr "Stitcher Jam" msgid "printer-state-reasons.stitcher-life-almost-over" msgstr "Stitcher Life Almost Over" msgid "printer-state-reasons.stitcher-life-over" msgstr "Stitcher Life Over" msgid "printer-state-reasons.stitcher-memory-exhausted" msgstr "Stitcher Memory Exhausted" msgid "printer-state-reasons.stitcher-missing" msgstr "Stitcher Missing" msgid "printer-state-reasons.stitcher-motor-failure" msgstr "Stitcher Motor Failure" msgid "printer-state-reasons.stitcher-near-limit" msgstr "Stitcher Near Limit" msgid "printer-state-reasons.stitcher-offline" msgstr "Stitcher Offline" msgid "printer-state-reasons.stitcher-opened" msgstr "Stitcher Opened" msgid "printer-state-reasons.stitcher-over-temperature" msgstr "Stitcher Over Temperature" msgid "printer-state-reasons.stitcher-power-saver" msgstr "Stitcher Power Saver" msgid "printer-state-reasons.stitcher-recoverable-failure" msgstr "Stitcher Recoverable Failure" msgid "printer-state-reasons.stitcher-recoverable-storage" msgstr "Stitcher Recoverable Storage" msgid "printer-state-reasons.stitcher-removed" msgstr "Stitcher Removed" msgid "printer-state-reasons.stitcher-resource-added" msgstr "Stitcher Resource Added" msgid "printer-state-reasons.stitcher-resource-removed" msgstr "Stitcher Resource Removed" msgid "printer-state-reasons.stitcher-thermistor-failure" msgstr "Stitcher Thermistor Failure" msgid "printer-state-reasons.stitcher-timing-failure" msgstr "Stitcher Timing Failure" msgid "printer-state-reasons.stitcher-turned-off" msgstr "Stitcher Turned Off" msgid "printer-state-reasons.stitcher-turned-on" msgstr "Stitcher Turned On" msgid "printer-state-reasons.stitcher-under-temperature" msgstr "Stitcher Under Temperature" msgid "printer-state-reasons.stitcher-unrecoverable-failure" msgstr "Stitcher Unrecoverable Failure" msgid "printer-state-reasons.stitcher-unrecoverable-storage-error" msgstr "Stitcher Unrecoverable Storage Error" msgid "printer-state-reasons.stitcher-warming-up" msgstr "Stitcher Warming Up" msgid "printer-state-reasons.stopped-partly" msgstr "Stopped Partly" msgid "printer-state-reasons.stopping" msgstr "Stopping" msgid "printer-state-reasons.subunit-added" msgstr "Subunit Added" msgid "printer-state-reasons.subunit-almost-empty" msgstr "Subunit Almost Empty" msgid "printer-state-reasons.subunit-almost-full" msgstr "Subunit Almost Full" msgid "printer-state-reasons.subunit-at-limit" msgstr "Subunit At Limit" msgid "printer-state-reasons.subunit-closed" msgstr "Subunit Closed" msgid "printer-state-reasons.subunit-empty" msgstr "Subunit Empty" msgid "printer-state-reasons.subunit-full" msgstr "Subunit Full" msgid "printer-state-reasons.subunit-life-almost-over" msgstr "Subunit Life Almost Over" msgid "printer-state-reasons.subunit-life-over" msgstr "Subunit Life Over" msgid "printer-state-reasons.subunit-memory-exhausted" msgstr "Subunit Memory Exhausted" msgid "printer-state-reasons.subunit-missing" msgstr "Subunit Missing" msgid "printer-state-reasons.subunit-motor-failure" msgstr "Subunit Motor Failure" msgid "printer-state-reasons.subunit-near-limit" msgstr "Subunit Near Limit" msgid "printer-state-reasons.subunit-offline" msgstr "Subunit Offline" msgid "printer-state-reasons.subunit-opened" msgstr "Subunit Opened" msgid "printer-state-reasons.subunit-over-temperature" msgstr "Subunit Over Temperature" msgid "printer-state-reasons.subunit-power-saver" msgstr "Subunit Power Saver" msgid "printer-state-reasons.subunit-recoverable-failure" msgstr "Subunit Recoverable Failure" msgid "printer-state-reasons.subunit-recoverable-storage" msgstr "Subunit Recoverable Storage" msgid "printer-state-reasons.subunit-removed" msgstr "Subunit Removed" msgid "printer-state-reasons.subunit-resource-added" msgstr "Subunit Resource Added" msgid "printer-state-reasons.subunit-resource-removed" msgstr "Subunit Resource Removed" msgid "printer-state-reasons.subunit-thermistor-failure" msgstr "Subunit Thermistor Failure" msgid "printer-state-reasons.subunit-timing-Failure" msgstr "Subunit Timing Failure" msgid "printer-state-reasons.subunit-turned-off" msgstr "Subunit Turned Off" msgid "printer-state-reasons.subunit-turned-on" msgstr "Subunit Turned On" msgid "printer-state-reasons.subunit-under-temperature" msgstr "Subunit Under Temperature" msgid "printer-state-reasons.subunit-unrecoverable-failure" msgstr "Subunit Unrecoverable Failure" msgid "printer-state-reasons.subunit-unrecoverable-storage" msgstr "Subunit Unrecoverable Storage" msgid "printer-state-reasons.subunit-warming-up" msgstr "Subunit Warming Up" msgid "printer-state-reasons.timed-out" msgstr "Timed Out" msgid "printer-state-reasons.toner-empty" msgstr "Toner Empty" msgid "printer-state-reasons.toner-low" msgstr "Toner Low" msgid "printer-state-reasons.trimmer-added" msgstr "Trimmer Added" msgid "printer-state-reasons.trimmer-almost-empty" msgstr "Trimmer Almost Empty" msgid "printer-state-reasons.trimmer-almost-full" msgstr "Trimmer Almost Full" msgid "printer-state-reasons.trimmer-at-limit" msgstr "Trimmer At Limit" msgid "printer-state-reasons.trimmer-closed" msgstr "Trimmer Closed" msgid "printer-state-reasons.trimmer-configuration-change" msgstr "Trimmer Configuration Change" msgid "printer-state-reasons.trimmer-cover-closed" msgstr "Trimmer Cover Closed" msgid "printer-state-reasons.trimmer-cover-open" msgstr "Trimmer Cover Open" msgid "printer-state-reasons.trimmer-empty" msgstr "Trimmer Empty" msgid "printer-state-reasons.trimmer-full" msgstr "Trimmer Full" msgid "printer-state-reasons.trimmer-interlock-closed" msgstr "Trimmer Interlock Closed" msgid "printer-state-reasons.trimmer-interlock-open" msgstr "Trimmer Interlock Open" msgid "printer-state-reasons.trimmer-jam" msgstr "Trimmer Jam" msgid "printer-state-reasons.trimmer-life-almost-over" msgstr "Trimmer Life Almost Over" msgid "printer-state-reasons.trimmer-life-over" msgstr "Trimmer Life Over" msgid "printer-state-reasons.trimmer-memory-exhausted" msgstr "Trimmer Memory Exhausted" msgid "printer-state-reasons.trimmer-missing" msgstr "Trimmer Missing" msgid "printer-state-reasons.trimmer-motor-failure" msgstr "Trimmer Motor Failure" msgid "printer-state-reasons.trimmer-near-limit" msgstr "Trimmer Near Limit" msgid "printer-state-reasons.trimmer-offline" msgstr "Trimmer Offline" msgid "printer-state-reasons.trimmer-opened" msgstr "Trimmer Opened" msgid "printer-state-reasons.trimmer-over-temperature" msgstr "Trimmer Over Temperature" msgid "printer-state-reasons.trimmer-power-saver" msgstr "Trimmer Power Saver" msgid "printer-state-reasons.trimmer-recoverable-failure" msgstr "Trimmer Recoverable Failure" msgid "printer-state-reasons.trimmer-recoverable-storage" msgstr "Trimmer Recoverable Storage" msgid "printer-state-reasons.trimmer-removed" msgstr "Trimmer Removed" msgid "printer-state-reasons.trimmer-resource-added" msgstr "Trimmer Resource Added" msgid "printer-state-reasons.trimmer-resource-removed" msgstr "Trimmer Resource Removed" msgid "printer-state-reasons.trimmer-thermistor-failure" msgstr "Trimmer Thermistor Failure" msgid "printer-state-reasons.trimmer-timing-failure" msgstr "Trimmer Timing Failure" msgid "printer-state-reasons.trimmer-turned-off" msgstr "Trimmer Turned Off" msgid "printer-state-reasons.trimmer-turned-on" msgstr "Trimmer Turned On" msgid "printer-state-reasons.trimmer-under-temperature" msgstr "Trimmer Under Temperature" msgid "printer-state-reasons.trimmer-unrecoverable-failure" msgstr "Trimmer Unrecoverable Failure" msgid "printer-state-reasons.trimmer-unrecoverable-storage-error" msgstr "Trimmer Unrecoverable Storage Error" msgid "printer-state-reasons.trimmer-warming-up" msgstr "Trimmer Warming Up" msgid "printer-state-reasons.unknown" msgstr "Unknown" msgid "printer-state-reasons.wrapper-added" msgstr "Wrapper Added" msgid "printer-state-reasons.wrapper-almost-empty" msgstr "Wrapper Almost Empty" msgid "printer-state-reasons.wrapper-almost-full" msgstr "Wrapper Almost Full" msgid "printer-state-reasons.wrapper-at-limit" msgstr "Wrapper At Limit" msgid "printer-state-reasons.wrapper-closed" msgstr "Wrapper Closed" msgid "printer-state-reasons.wrapper-configuration-change" msgstr "Wrapper Configuration Change" msgid "printer-state-reasons.wrapper-cover-closed" msgstr "Wrapper Cover Closed" msgid "printer-state-reasons.wrapper-cover-open" msgstr "Wrapper Cover Open" msgid "printer-state-reasons.wrapper-empty" msgstr "Wrapper Empty" msgid "printer-state-reasons.wrapper-full" msgstr "Wrapper Full" msgid "printer-state-reasons.wrapper-interlock-closed" msgstr "Wrapper Interlock Closed" msgid "printer-state-reasons.wrapper-interlock-open" msgstr "Wrapper Interlock Open" msgid "printer-state-reasons.wrapper-jam" msgstr "Wrapper Jam" msgid "printer-state-reasons.wrapper-life-almost-over" msgstr "Wrapper Life Almost Over" msgid "printer-state-reasons.wrapper-life-over" msgstr "Wrapper Life Over" msgid "printer-state-reasons.wrapper-memory-exhausted" msgstr "Wrapper Memory Exhausted" msgid "printer-state-reasons.wrapper-missing" msgstr "Wrapper Missing" msgid "printer-state-reasons.wrapper-motor-failure" msgstr "Wrapper Motor Failure" msgid "printer-state-reasons.wrapper-near-limit" msgstr "Wrapper Near Limit" msgid "printer-state-reasons.wrapper-offline" msgstr "Wrapper Offline" msgid "printer-state-reasons.wrapper-opened" msgstr "Wrapper Opened" msgid "printer-state-reasons.wrapper-over-temperature" msgstr "Wrapper Over Temperature" msgid "printer-state-reasons.wrapper-power-saver" msgstr "Wrapper Power Saver" msgid "printer-state-reasons.wrapper-recoverable-failure" msgstr "Wrapper Recoverable Failure" msgid "printer-state-reasons.wrapper-recoverable-storage" msgstr "Wrapper Recoverable Storage" msgid "printer-state-reasons.wrapper-removed" msgstr "Wrapper Removed" msgid "printer-state-reasons.wrapper-resource-added" msgstr "Wrapper Resource Added" msgid "printer-state-reasons.wrapper-resource-removed" msgstr "Wrapper Resource Removed" msgid "printer-state-reasons.wrapper-thermistor-failure" msgstr "Wrapper Thermistor Failure" msgid "printer-state-reasons.wrapper-timing-failure" msgstr "Wrapper Timing Failure" msgid "printer-state-reasons.wrapper-turned-off" msgstr "Wrapper Turned Off" msgid "printer-state-reasons.wrapper-turned-on" msgstr "Wrapper Turned On" msgid "printer-state-reasons.wrapper-under-temperature" msgstr "Wrapper Under Temperature" msgid "printer-state-reasons.wrapper-unrecoverable-failure" msgstr "Wrapper Unrecoverable Failure" msgid "printer-state-reasons.wrapper-unrecoverable-storage-error" msgstr "Wrapper Unrecoverable Storage Error" msgid "printer-state-reasons.wrapper-warming-up" msgstr "Wrapper Warming Up" msgid "printer-state.3" msgstr "Idle" msgid "printer-state.4" msgstr "Processing" msgid "printer-state.5" msgstr "Stopped" msgid "printer-up-time" msgstr "Printer Uptime" msgid "processing" msgstr "zpracování" msgid "proof-print" msgstr "Proof Print" msgid "proof-print-copies" msgstr "Proof Print Copies" msgid "punching" msgstr "Punching" msgid "punching-locations" msgstr "Punching Locations" msgid "punching-offset" msgstr "Punching Offset" msgid "punching-reference-edge" msgstr "Punching Reference Edge" msgid "punching-reference-edge.bottom" msgstr "Bottom" msgid "punching-reference-edge.left" msgstr "Left" msgid "punching-reference-edge.right" msgstr "Right" msgid "punching-reference-edge.top" msgstr "Top" #, c-format msgid "request id is %s-%d (%d file(s))" msgstr "" msgid "request-id uses indefinite length" msgstr "ID požadavku má neomezenou délku" msgid "requested-attributes" msgstr "Requested Attributes" msgid "retry-interval" msgstr "Retry Interval" msgid "retry-time-out" msgstr "Retry Time Out" msgid "save-disposition" msgstr "Save Disposition" msgid "save-disposition.none" msgstr "None" msgid "save-disposition.print-save" msgstr "Print Save" msgid "save-disposition.save-only" msgstr "Save Only" msgid "save-document-format" msgstr "Save Document Format" msgid "save-info" msgstr "Save Info" msgid "save-location" msgstr "Save Location" msgid "save-name" msgstr "Save Name" msgid "scheduler is not running" msgstr "" msgid "scheduler is running" msgstr "" msgid "separator-sheets" msgstr "Separator Sheets" msgid "separator-sheets-type" msgstr "Separator Sheets Type" msgid "separator-sheets-type.both-sheets" msgstr "Both Sheets" msgid "separator-sheets-type.end-sheet" msgstr "End Sheet" msgid "separator-sheets-type.none" msgstr "None" msgid "separator-sheets-type.slip-sheets" msgstr "Slip Sheets" msgid "separator-sheets-type.start-sheet" msgstr "Start Sheet" msgid "sheet-collate" msgstr "Collate Copies" msgid "sheet-collate.collated" msgstr "Yes" msgid "sheet-collate.uncollated" msgstr "No" msgid "sides" msgstr "2-Sided Printing" msgid "sides.one-sided" msgstr "Off" msgid "sides.two-sided-long-edge" msgstr "On (Portrait)" msgid "sides.two-sided-short-edge" msgstr "On (Landscape)" #, c-format msgid "stat of %s failed: %s" msgstr "stav %s selhalo: %s" msgid "status\t\tShow status of daemon and queue." msgstr "" msgid "status-message" msgstr "Status Message" msgid "stitching" msgstr "Staple" msgid "stitching-angle" msgstr "Stitching Angle" msgid "stitching-locations" msgstr "Stitching Locations" msgid "stitching-method" msgstr "Stitching Method" msgid "stitching-method.auto" msgstr "Automatic" msgid "stitching-method.crimp" msgstr "Crimp" msgid "stitching-method.wire" msgstr "Wire" msgid "stitching-offset" msgstr "Stitching Offset" msgid "stitching-reference-edge" msgstr "Stitching Reference Edge" msgid "stitching-reference-edge.bottom" msgstr "Bottom" msgid "stitching-reference-edge.left" msgstr "Left" msgid "stitching-reference-edge.right" msgstr "Right" msgid "stitching-reference-edge.top" msgstr "Top" msgid "stopped" msgstr "zastaveno" msgid "subject" msgstr "Subject" #, c-format msgid "system default destination: %s" msgstr "" #, c-format msgid "system default destination: %s/%s" msgstr "" msgid "t33-subaddress" msgstr "T33 Subaddress" msgid "to-name" msgstr "To Name" msgid "transmission-status" msgstr "Transmission Status" msgid "transmission-status.3" msgstr "Pending" msgid "transmission-status.4" msgstr "Pending Retry" msgid "transmission-status.5" msgstr "Processing" msgid "transmission-status.7" msgstr "Canceled" msgid "transmission-status.8" msgstr "Aborted" msgid "transmission-status.9" msgstr "Completed" msgid "trimming" msgstr "Cut" msgid "trimming-offset" msgstr "Cut Position" msgid "trimming-reference-edge" msgstr "Trimming Reference Edge" msgid "trimming-reference-edge.bottom" msgstr "Bottom" msgid "trimming-reference-edge.left" msgstr "Left" msgid "trimming-reference-edge.right" msgstr "Right" msgid "trimming-reference-edge.top" msgstr "Top" msgid "trimming-type" msgstr "Trimming Type" msgid "trimming-type.draw-line" msgstr "Draw Line" msgid "trimming-type.full" msgstr "Full" msgid "trimming-type.partial" msgstr "Partial" msgid "trimming-type.perforate" msgstr "Perforate" msgid "trimming-type.score" msgstr "Score" msgid "trimming-type.tab" msgstr "Tab" msgid "trimming-when" msgstr "Trimming When" msgid "trimming-when.after-documents" msgstr "After Documents" msgid "trimming-when.after-job" msgstr "After Job" msgid "trimming-when.after-sets" msgstr "After Sets" msgid "trimming-when.after-sheets" msgstr "After Sheets" msgid "unknown" msgstr "neznámý" msgid "untitled" msgstr "nepojmenovaný" msgid "variable-bindings uses indefinite length" msgstr "\"variable-bindings\" má neomezenou délku" msgid "x-accuracy" msgstr "X Accuracy" msgid "x-dimension" msgstr "X Dimension" msgid "x-offset" msgstr "X Offset" msgid "x-origin" msgstr "X Origin" msgid "y-accuracy" msgstr "Y Accuracy" msgid "y-dimension" msgstr "Y Dimension" msgid "y-offset" msgstr "Y Offset" msgid "y-origin" msgstr "Y Origin" msgid "z-accuracy" msgstr "Z Accuracy" msgid "z-dimension" msgstr "Z Dimension" msgid "z-offset" msgstr "Z Offset" #~ msgid "720dpi" #~ msgstr "720 dpi" #~ msgid "Enter old password:" #~ msgstr "Zadejte původní heslo:" #~ msgid "Enter password again:" #~ msgstr "Opakujte heslo:" #~ msgid "Enter password:" #~ msgstr "Zadejte heslo:" #~ msgid "File Folder " #~ msgstr "Složka souborů " #~ msgid "New Stylus Color Series" #~ msgstr "New Stylus Color Series" #~ msgid "New Stylus Photo Series" #~ msgstr "New Stylus Photo Series" #~ msgid "Purge Jobs" #~ msgstr "Výmaz úloh" #~ msgid "Stylus Color Series" #~ msgstr "Stylus Color Series" #~ msgid "Stylus Photo Series" #~ msgstr "Stylus Photo Series" #~ msgid "compression" #~ msgstr "Compression" #~ msgid "compression-accepted" #~ msgstr "Compression Accepted" #~ msgid "compression.compress" #~ msgstr "Compress" #~ msgid "compression.deflate" #~ msgstr "Deflate" #~ msgid "compression.gzip" #~ msgstr "Gzip" #~ msgid "compression.none" #~ msgstr "None" #~ msgid "destination-accesses" #~ msgstr "Destination Accesses" #~ msgid "destination-statuses" #~ msgstr "Destination Statuses" #~ msgid "destination-uris" #~ msgstr "Destination Uris" #~ msgid "document-access" #~ msgstr "Document Access" #~ msgid "document-data-get-interval" #~ msgstr "Document Data Get Interval" #~ msgid "document-data-wait" #~ msgstr "Document Data Wait" #~ msgid "document-format-accepted" #~ msgstr "Document Format Accepted" #~ msgid "document-message" #~ msgstr "Document Message" #~ msgid "document-metadata" #~ msgstr "Document Metadata" #~ msgid "document-name" #~ msgstr "Document Name" #~ msgid "document-number" #~ msgstr "Document Number" #~ msgid "document-password" #~ msgstr "Document Password" #~ msgid "document-preprocessed" #~ msgstr "Document Preprocessed" #~ msgid "fetch-status-message" #~ msgstr "Fetch Status Message" #~ msgid "identify-actions" #~ msgstr "Identify Actions" #~ msgid "identify-actions.display" #~ msgstr "Display" #~ msgid "identify-actions.flash" #~ msgstr "Flash" #~ msgid "identify-actions.sound" #~ msgstr "Sound" #~ msgid "identify-actions.speak" #~ msgstr "Speak" #~ msgid "ipp-attribute-fidelity" #~ msgstr "Attribute Fidelity" #~ msgid "job-authorization-uri" #~ msgstr "Job Authorization URI" #~ msgid "job-destination-spooling-supported.automatic" #~ msgstr "Automatic" #~ msgid "job-destination-spooling-supported.spool" #~ msgstr "Spool" #~ msgid "job-destination-spooling-supported.stream" #~ msgstr "Stream" #~ msgid "job-impressions-col" #~ msgstr "Job Impressions" #~ msgid "job-impressions-estimated" #~ msgstr "Job Impressions Estimated" #~ msgid "job-media-sheets-col" #~ msgstr "Job Media Sheets" #~ msgid "job-pages-per-set" #~ msgstr "Job Pages Per Set" #~ msgid "job-password" #~ msgstr "Job Password" #~ msgid "job-password-repertoire-configured" #~ msgstr "Job Password Repertoire Configured" #~ msgid "job-password-repertoire-supported.iana_us-ascii_any" #~ msgstr "Iana Us Ascii Any" #~ msgid "job-password-repertoire-supported.iana_us-ascii_complex" #~ msgstr "Iana Us Ascii Complex" #~ msgid "job-password-repertoire-supported.iana_us-ascii_digits" #~ msgstr "Iana Us Ascii Digits" #~ msgid "job-password-repertoire-supported.iana_us-ascii_letters" #~ msgstr "Iana Us Ascii Letters" #~ msgid "job-password-repertoire-supported.iana_utf-8_any" #~ msgstr "Iana Utf 8 Any" #~ msgid "job-password-repertoire-supported.iana_utf-8_digits" #~ msgstr "Iana Utf 8 Digits" #~ msgid "job-password-repertoire-supported.iana_utf-8_letters" #~ msgstr "Iana Utf 8 Letters" #~ msgid "job-settable-attributes-supported.job-name" #~ msgstr "Job Name" #~ msgid "job-settable-attributes-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.arithmetic" #~ msgstr "Arithmetic" #~ msgid "jpeg-features-supported.cmyk" #~ msgstr "Cmyk" #~ msgid "jpeg-features-supported.deep" #~ msgstr "Deep" #~ msgid "jpeg-features-supported.hierarchical" #~ msgstr "Hierarchical" #~ msgid "jpeg-features-supported.icc" #~ msgstr "Icc" #~ msgid "jpeg-features-supported.lossless" #~ msgstr "Lossless" #~ msgid "jpeg-features-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.progressive" #~ msgstr "Progressive" #~ msgid "material-type.pla-dissolvable" #~ msgstr "Pla Dissolvable" #~ msgid "media.om_large-photo_200x300mm" #~ msgstr "200 x 300mm" #~ msgid "notify-subscribed-event" #~ msgstr "Notify Event" #~ msgid "operations-supported.10" #~ msgstr "Get-Jobs" #~ msgid "operations-supported.11" #~ msgstr "Get-Printer-Attributes" #~ msgid "operations-supported.12" #~ msgstr "Hold-Job" #~ msgid "operations-supported.13" #~ msgstr "Release-Job" #~ msgid "operations-supported.14" #~ msgstr "Restart-Job" #~ msgid "operations-supported.16" #~ msgstr "Pause-Printer" #~ msgid "operations-supported.17" #~ msgstr "Resume-Printer" #~ msgid "operations-supported.18" #~ msgstr "Purge-Jobs" #~ msgid "operations-supported.19" #~ msgstr "Set-Printer-Attributes" #~ msgid "operations-supported.2" #~ msgstr "Print-Job" #~ msgid "operations-supported.20" #~ msgstr "Set-Job-Attributes" #~ msgid "operations-supported.21" #~ msgstr "Get-Printer-Supported-Values" #~ msgid "operations-supported.22" #~ msgstr "Create-Printer-Subscriptions" #~ msgid "operations-supported.23" #~ msgstr "Create-Job-Subscriptions" #~ msgid "operations-supported.24" #~ msgstr "Get-Subscription-Attributes" #~ msgid "operations-supported.25" #~ msgstr "Get-Subscriptions" #~ msgid "operations-supported.26" #~ msgstr "Renew-Subscription" #~ msgid "operations-supported.27" #~ msgstr "Cancel-Subscription" #~ msgid "operations-supported.28" #~ msgstr "Get-Notifications" #~ msgid "operations-supported.3" #~ msgstr "Print-URI" #~ msgid "operations-supported.34" #~ msgstr "Enable-Printer" #~ msgid "operations-supported.35" #~ msgstr "Disable-Printer" #~ msgid "operations-supported.36" #~ msgstr "Pause-Printer-After-Current-Job" #~ msgid "operations-supported.37" #~ msgstr "Hold-New-Jobs" #~ msgid "operations-supported.38" #~ msgstr "Release-Held-New-Jobs" #~ msgid "operations-supported.39" #~ msgstr "Deactivate-Printer" #~ msgid "operations-supported.4" #~ msgstr "Validate-Job" #~ msgid "operations-supported.40" #~ msgstr "Activate-Printer" #~ msgid "operations-supported.41" #~ msgstr "Restart-Printer" #~ msgid "operations-supported.42" #~ msgstr "Shutdown-Printer" #~ msgid "operations-supported.43" #~ msgstr "Startup-Printer" #~ msgid "operations-supported.44" #~ msgstr "Reprocess-Job" #~ msgid "operations-supported.45" #~ msgstr "Cancel-Current-Job" #~ msgid "operations-supported.46" #~ msgstr "Suspend-Current-Job" #~ msgid "operations-supported.47" #~ msgstr "Resume-Job" #~ msgid "operations-supported.48" #~ msgstr "Promote-Job" #~ msgid "operations-supported.49" #~ msgstr "Schedule-Job-After" #~ msgid "operations-supported.5" #~ msgstr "Create-Job" #~ msgid "operations-supported.51" #~ msgstr "Cancel-Document" #~ msgid "operations-supported.52" #~ msgstr "Get-Document-Attributes" #~ msgid "operations-supported.53" #~ msgstr "Get-Documents" #~ msgid "operations-supported.54" #~ msgstr "Delete-Document" #~ msgid "operations-supported.55" #~ msgstr "Set-Document-Attributes" #~ msgid "operations-supported.56" #~ msgstr "Cancel-Jobs" #~ msgid "operations-supported.57" #~ msgstr "Cancel-My-Jobs" #~ msgid "operations-supported.58" #~ msgstr "Resubmit-Job" #~ msgid "operations-supported.59" #~ msgstr "Close-Job" #~ msgid "operations-supported.6" #~ msgstr "Send-Document" #~ msgid "operations-supported.60" #~ msgstr "Identify-Printer" #~ msgid "operations-supported.61" #~ msgstr "Validate-Document" #~ msgid "operations-supported.62" #~ msgstr "Add-Document-Images" #~ msgid "operations-supported.63" #~ msgstr "Acknowledge-Document" #~ msgid "operations-supported.64" #~ msgstr "Acknowledge-Identify-Printer" #~ msgid "operations-supported.65" #~ msgstr "Acknowledge-Job" #~ msgid "operations-supported.66" #~ msgstr "Fetch-Document" #~ msgid "operations-supported.67" #~ msgstr "Fetch-Job" #~ msgid "operations-supported.68" #~ msgstr "Get-Output-Device-Attributes" #~ msgid "operations-supported.69" #~ msgstr "Update-Active-Jobs" #~ msgid "operations-supported.7" #~ msgstr "Send-URI" #~ msgid "operations-supported.70" #~ msgstr "Deregister-Output-Device" #~ msgid "operations-supported.71" #~ msgstr "Update-Document-Status" #~ msgid "operations-supported.72" #~ msgstr "Update-Job-Status" #~ msgid "operations-supported.73" #~ msgstr "Update-Output-Device-Attributes" #~ msgid "operations-supported.74" #~ msgstr "Get-Next-Document-Data" #~ msgid "operations-supported.8" #~ msgstr "Cancel-Job" #~ msgid "operations-supported.9" #~ msgstr "Get-Job-Attributes" #~ msgid "output-device" #~ msgstr "Output Device" #~ msgid "output-device-job-states" #~ msgstr "Output Device Job States" #~ msgid "output-device-uuid" #~ msgstr "Output Device Uuid" #~ msgid "pdf-features-supported.prc" #~ msgstr "Prc" #~ msgid "pdf-features-supported.u3d" #~ msgstr "U3d" #~ msgid "pdf-versions-supported.adobe-1.3" #~ msgstr "Adobe 1.3" #~ msgid "pdf-versions-supported.adobe-1.4" #~ msgstr "Adobe 1.4" #~ msgid "pdf-versions-supported.adobe-1.5" #~ msgstr "Adobe 1.5" #~ msgid "pdf-versions-supported.adobe-1.6" #~ msgstr "Adobe 1.6" #~ msgid "pdf-versions-supported.iso-15930-1_2001" #~ msgstr "ISO 15930-1:2001" #~ msgid "pdf-versions-supported.iso-15930-3_2002" #~ msgstr "ISO 15930-3:2002" #~ msgid "pdf-versions-supported.iso-15930-4_2003" #~ msgstr "ISO 15930-4:2003" #~ msgid "pdf-versions-supported.iso-15930-6_2003" #~ msgstr "ISO 15930-6:2003" #~ msgid "pdf-versions-supported.iso-15930-7_2010" #~ msgstr "ISO 15930-7:2010" #~ msgid "pdf-versions-supported.iso-15930-8_2010" #~ msgstr "ISO 15930-8:2010" #~ msgid "pdf-versions-supported.iso-16612-2_2010" #~ msgstr "ISO 16612-2:2010" #~ msgid "pdf-versions-supported.iso-19005-1_2005" #~ msgstr "ISO 19005-1:2005" #~ msgid "pdf-versions-supported.iso-19005-2_2011" #~ msgstr "ISO 19005-2:2011" #~ msgid "pdf-versions-supported.iso-19005-3_2012" #~ msgstr "ISO 19005-3:2012" #~ msgid "pdf-versions-supported.iso-32000-1_2008" #~ msgstr "ISO 32000-1:2008" #~ msgid "pdf-versions-supported.none" #~ msgstr "None" #~ msgid "pdf-versions-supported.pwg-5102.3" #~ msgstr "PWG 5102.3" #~ msgid "preferred-attributes" #~ msgstr "Preferred Attributes" #~ msgid "printer-mandatory-job-attributes" #~ msgstr "Printer Mandatory Job Attributes" #~ msgid "profile-uri-actual" #~ msgstr "Actual Profile URI" #~ msgid "requested-attributes.all" #~ msgstr "All" #~ msgid "requested-attributes.document-description" #~ msgstr "Document Description" #~ msgid "requested-attributes.document-template" #~ msgstr "Document Template" #~ msgid "requested-attributes.job-actuals" #~ msgstr "Job Actuals" #~ msgid "requested-attributes.job-description" #~ msgstr "Job Description" #~ msgid "requested-attributes.job-template" #~ msgstr "Job Template" #~ msgid "requested-attributes.printer-description" #~ msgstr "Printer Description" #~ msgid "requested-attributes.subscription-description" #~ msgstr "Subscription Description" #~ msgid "requested-attributes.subscription-template" #~ msgstr "Subscription Template" #~ msgid "requesting-user-name" #~ msgstr "Requesting User Name" #~ msgid "requesting-user-uri" #~ msgstr "Requesting User URI" #~ msgid "x-image-position" #~ msgstr "X Image Position" #~ msgid "x-image-position.center" #~ msgstr "Center" #~ msgid "x-image-position.left" #~ msgstr "Left" #~ msgid "x-image-position.none" #~ msgstr "None" #~ msgid "x-image-position.right" #~ msgstr "Right" #~ msgid "x-image-shift" #~ msgstr "X Image Shift" #~ msgid "x-side1-image-shift" #~ msgstr "X Front Side Image Shift" #~ msgid "x-side2-image-shift" #~ msgstr "X Back Side Image Shift" #~ msgid "y-image-position" #~ msgstr "Y Image Position" #~ msgid "y-image-position.bottom" #~ msgstr "Bottom" #~ msgid "y-image-position.center" #~ msgstr "Center" #~ msgid "y-image-position.none" #~ msgstr "None" #~ msgid "y-image-position.top" #~ msgstr "Top" #~ msgid "y-image-shift" #~ msgstr "Y Image Shift" #~ msgid "y-side1-image-shift" #~ msgstr "Y Front Side Image Shift" #~ msgid "y-side2-image-shift" #~ msgstr "Y Back Side Image Shift" cups-2.2.7/locale/cups_de.po000664 000765 000024 00001117753 13255074424 016413 0ustar00msweetstaff000000 000000 # # "$Id$" # # Message catalog template for CUPS. # # Copyright 2007-2012 by Apple Inc. # Copyright 2005-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # # Notes for Translators: # # The "checkpo" program located in the "locale" source directory can be used # to verify that your translations do not introduce formatting errors or other # problems. Run with: # # cd locale # ./checkpo cups_LL.po # # where "LL" is your locale. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: CUPS 2.0\n" "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n" "POT-Creation-Date: 2018-03-19 18:36-0400\n" "PO-Revision-Date: 2017-10-25 14:57+0200\n" "Last-Translator: Michael Weghorn \n" "Language-Team: LANGUAGE \n" "Language: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgid "\t\t(all)" msgstr "\t\t(alle)" msgid "\t\t(none)" msgstr "\t\t(keine)" #, c-format msgid "\t%d entries" msgstr "\t%d Einträge" #, c-format msgid "\t%s" msgstr "\t%s" msgid "\tAfter fault: continue" msgstr "\tNach einem Fehler: fortfahren" #, c-format msgid "\tAlerts: %s" msgstr "\tAlarme: %s" msgid "\tBanner required" msgstr "\tBanner erforderlich" msgid "\tCharset sets:" msgstr "\tZeichensatz Set:" msgid "\tConnection: direct" msgstr "\tVerbindung: direkt" msgid "\tConnection: remote" msgstr "\tVerbindung: über Netz" msgid "\tContent types: any" msgstr "\tInhaltstypen: beliebig" msgid "\tDefault page size:" msgstr "\tVoreingestellte Seitengrösse:" msgid "\tDefault pitch:" msgstr "\tVoreingestellte Neigung:" msgid "\tDefault port settings:" msgstr "\tVoreingestellte Porteinstellungen:" #, c-format msgid "\tDescription: %s" msgstr "\tBeschreibung: %s" msgid "\tForm mounted:" msgstr "\tGeladenes Formblatt" msgid "\tForms allowed:" msgstr "\tErlaubte Formblätter:" #, c-format msgid "\tInterface: %s.ppd" msgstr "\tSchnittstelle: %s.ppd" #, c-format msgid "\tInterface: %s/ppd/%s.ppd" msgstr "\tSchnittstelle: %s/ppp/%s.ppd" #, c-format msgid "\tLocation: %s" msgstr "\tOrt: %s" msgid "\tOn fault: no alert" msgstr "\tBei Fehlern: kein Alarm" msgid "\tPrinter types: unknown" msgstr "\tDruckertypen: unbekannt" #, c-format msgid "\tStatus: %s" msgstr "\tStatus: %s" msgid "\tUsers allowed:" msgstr "\tErlaubte Benutzer:" msgid "\tUsers denied:" msgstr "\tGesperrte Benutzer:" msgid "\tdaemon present" msgstr "\tDienst verfügbar" msgid "\tno entries" msgstr "\tKeine Einträge" #, c-format msgid "\tprinter is on device '%s' speed -1" msgstr "\tDrucker ist am Gerät '%s' Geschwindigkeit -1" msgid "\tprinting is disabled" msgstr "\tDrucken ist abgeschaltet" msgid "\tprinting is enabled" msgstr "\tDrucken ist eingeschaltet" #, c-format msgid "\tqueued for %s" msgstr "\tin Warteschlange eingereiht für %s" msgid "\tqueuing is disabled" msgstr "\tin Warteschlange einreihen gesperrt" msgid "\tqueuing is enabled" msgstr "\tin Warteschlange einreihen erlaubt" msgid "\treason unknown" msgstr "\tunbekannter Grund" msgid "" "\n" " DETAILED CONFORMANCE TEST RESULTS" msgstr "" msgid " Ignore specific warnings." msgstr " Ignoriere bestimmte Warnungen." msgid " Issue warnings instead of errors." msgstr " Gebe Warnungen anstelle von Fehlern aus." msgid " REF: Page 15, section 3.1." msgstr " REF: Seite 15, Kap. 3.1." msgid " REF: Page 15, section 3.2." msgstr " REF: Seite 15, Kap. 3.2." msgid " REF: Page 19, section 3.3." msgstr " REF: Seite 19, Kap. 3.3." msgid " REF: Page 20, section 3.4." msgstr " REF: Seite 20, Kap. 3.4." msgid " REF: Page 27, section 3.5." msgstr " REF: Seite 27, Kap. 3.5." msgid " REF: Page 42, section 5.2." msgstr " REF: Seite 42, Kap. 5.2." msgid " REF: Pages 16-17, section 3.2." msgstr " REF: Seiten 16-17, Kap. 3.2." msgid " REF: Pages 42-45, section 5.2." msgstr " REF: Seiten 42-45, Kap. 5.2." msgid " REF: Pages 45-46, section 5.2." msgstr " REF: Seiten 45-46, Kap. 5.2." msgid " REF: Pages 48-49, section 5.2." msgstr " REF: Seiten 48-49, Kap. 5.2." msgid " REF: Pages 52-54, section 5.2." msgstr " REF: Seiten 52-52, Kap. 5.2." #, c-format msgid " %-39.39s %.0f bytes" msgstr "" #, c-format msgid " PASS Default%s" msgstr "" msgid " PASS DefaultImageableArea" msgstr "" msgid " PASS DefaultPaperDimension" msgstr "" msgid " PASS FileVersion" msgstr "" msgid " PASS FormatVersion" msgstr "" msgid " PASS LanguageEncoding" msgstr "" msgid " PASS LanguageVersion" msgstr "" msgid " PASS Manufacturer" msgstr "" msgid " PASS ModelName" msgstr "" msgid " PASS NickName" msgstr "" msgid " PASS PCFileName" msgstr "" msgid " PASS PSVersion" msgstr "" msgid " PASS PageRegion" msgstr "" msgid " PASS PageSize" msgstr "" msgid " PASS Product" msgstr "" msgid " PASS ShortNickName" msgstr "" #, c-format msgid " WARN %s has no corresponding options." msgstr " WARN %s hat keine entsprechenden Optionen." #, c-format msgid "" " WARN %s shares a common prefix with %s\n" " REF: Page 15, section 3.2." msgstr "" " WARN %s hat mit %s ein gemeinsames Präfix\n" " REF: Seite 15, Kap. 3.2." #, c-format msgid "" " WARN Duplex option keyword %s may not work as expected and should " "be named Duplex.\n" " REF: Page 122, section 5.17" msgstr "" msgid " WARN File contains a mix of CR, LF, and CR LF line endings." msgstr "" " WARN Datei einthält gemischt CR, LF, und CR LF Zeilenmenden." msgid "" " WARN LanguageEncoding required by PPD 4.3 spec.\n" " REF: Pages 56-57, section 5.3." msgstr "" " WARN LanguageEncoding ist erforderlich gem. PPD 4.3 " "Spezifikation.\n" " REF: Seiten 56-57, Kap. 5.3." #, c-format msgid " WARN Line %d only contains whitespace." msgstr " WARN Zeile %d enthält nur Leerzeichen." msgid "" " WARN Manufacturer required by PPD 4.3 spec.\n" " REF: Pages 58-59, section 5.3." msgstr "" msgid "" " WARN Non-Windows PPD files should use lines ending with only LF, " "not CR LF." msgstr "" " WARN Nicht-Windows PPD Dateien sollten ausschliesslich LF " "Zeilenenden verwenden, nicht CR LF." #, c-format msgid "" " WARN Obsolete PPD version %.1f.\n" " REF: Page 42, section 5.2." msgstr "" " WARN Veraltete PPD Version %.1f.\n" " REF: Seite 42, Kap. 5.2." msgid "" " WARN PCFileName longer than 8.3 in violation of PPD spec.\n" " REF: Pages 61-62, section 5.3." msgstr "" msgid "" " WARN PCFileName should contain a unique filename.\n" " REF: Pages 61-62, section 5.3." msgstr "" msgid "" " WARN Protocols contains PJL but JCL attributes are not set.\n" " REF: Pages 78-79, section 5.7." msgstr "" msgid "" " WARN Protocols contains both PJL and BCP; expected TBCP.\n" " REF: Pages 78-79, section 5.7." msgstr "" msgid "" " WARN ShortNickName required by PPD 4.3 spec.\n" " REF: Pages 64-65, section 5.3." msgstr "" msgid " cupsaddsmb [options] -a" msgstr "" msgid " cupstestdsc [options] -" msgstr "" msgid " program | cupstestppd [options] -" msgstr " program | cupstestppd [Optionen] -" #, c-format msgid "" " %s \"%s %s\" conflicts with \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." msgstr "" " %s \"%s %s\" ist nicht vereinbar mit \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." #, c-format msgid " %s %s %s does not exist." msgstr " %s %s %s existiert nicht." #, c-format msgid " %s %s file \"%s\" has the wrong capitalization." msgstr " %s %s Datei \"%s\" hat falsche Großschreibung." #, c-format msgid "" " %s Bad %s choice %s.\n" " REF: Page 122, section 5.17" msgstr "" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s." msgstr "" " %s Ungültige UTF-8 »%s« Zeichenkette zur Übersetzung der Option %s, " "Auswahl %s." #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s." msgstr "" " %s Ungültige UTF-8 »%s« Zeichenkette zur Übersetzung der Option %s." #, c-format msgid " %s Bad cupsFilter value \"%s\"." msgstr " %s Wert für cupsFilter \"%s\"." #, c-format msgid " %s Bad cupsFilter2 value \"%s\"." msgstr " %s Ungültiger Wert für cupsFilter2 \"%s\"." #, c-format msgid " %s Bad cupsICCProfile %s." msgstr " %s Ungültiger Wert für cupsICCProfile %s." #, c-format msgid " %s Bad cupsPreFilter value \"%s\"." msgstr " %s Ungültiger Wert für cupsPreFilter \"%s\"." #, c-format msgid " %s Bad cupsUIConstraints %s: \"%s\"" msgstr " %s Ungültiger Wert für cupsUIConstraints %s: \"%s\"" #, c-format msgid " %s Bad language \"%s\"." msgstr " %s Ungültige Sprache \"%s\"." #, c-format msgid " %s Bad permissions on %s file \"%s\"." msgstr " %s Ungültige Rechte %s Datei \"%s\"." #, c-format msgid " %s Bad spelling of %s - should be %s." msgstr " %s Ungültige Schreibweise von %s - sollte %s sein." #, c-format msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID." msgstr "" #, c-format msgid " %s Default choices conflicting." msgstr " %s Wiedersprüchliche voreingestellte Auswahl." #, c-format msgid " %s Empty cupsUIConstraints %s" msgstr " %s Leere cupsUIConstraints %s" #, c-format msgid " %s Missing \"%s\" translation string for option %s, choice %s." msgstr " %s Fehlende \"%s\" Übersetzung für Option %s, Auswahl %s." #, c-format msgid " %s Missing \"%s\" translation string for option %s." msgstr " %s Fehlende \"%s\" Übersetzung für Option %s." #, c-format msgid " %s Missing %s file \"%s\"." msgstr " %s Fehlende %s Datei »%s«." #, c-format msgid "" " %s Missing REQUIRED PageRegion option.\n" " REF: Page 100, section 5.14." msgstr "" #, c-format msgid "" " %s Missing REQUIRED PageSize option.\n" " REF: Page 99, section 5.14." msgstr "" #, c-format msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" #, c-format msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" msgstr "" #, c-format msgid " %s Missing cupsUIResolver %s" msgstr "" #, c-format msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" #, c-format msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\"" msgstr "" #, c-format msgid " %s No base translation \"%s\" is included in file." msgstr "" #, c-format msgid "" " %s REQUIRED %s does not define choice None.\n" " REF: Page 122, section 5.17" msgstr "" #, c-format msgid " %s Size \"%s\" defined for %s but not for %s." msgstr "" #, c-format msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)." msgstr "" #, c-format msgid " %s Size \"%s\" should be \"%s\"." msgstr "" #, c-format msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"." msgstr "" #, c-format msgid " %s cupsICCProfile %s hash value collides with %s." msgstr "" #, c-format msgid " %s cupsUIResolver %s causes a loop." msgstr " %s cupsUIResolver %s verursacht eine Schleife." #, c-format msgid "" " %s cupsUIResolver %s does not list at least two different options." msgstr "" #, c-format msgid "" " **FAIL** %s must be 1284DeviceID\n" " REF: Page 72, section 5.5" msgstr "" #, c-format msgid "" " **FAIL** Bad Default%s %s\n" " REF: Page 40, section 4.5." msgstr "" #, c-format msgid "" " **FAIL** Bad DefaultImageableArea %s\n" " REF: Page 102, section 5.15." msgstr "" #, c-format msgid "" " **FAIL** Bad DefaultPaperDimension %s\n" " REF: Page 103, section 5.15." msgstr "" #, c-format msgid "" " **FAIL** Bad FileVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" #, c-format msgid "" " **FAIL** Bad FormatVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" msgid "" " **FAIL** Bad JobPatchFile attribute in file\n" " REF: Page 24, section 3.4." msgstr "" #, c-format msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1." msgstr "" #, c-format msgid " **FAIL** Bad LanguageVersion %s - must be English." msgstr "" #, c-format msgid "" " **FAIL** Bad Manufacturer (should be \"%s\")\n" " REF: Page 211, table D.1." msgstr "" #, c-format msgid "" " **FAIL** Bad ModelName - \"%c\" not allowed in string.\n" " REF: Pages 59-60, section 5.3." msgstr "" msgid "" " **FAIL** Bad PSVersion - not \"(string) int\".\n" " REF: Pages 62-64, section 5.3." msgstr "" msgid "" " **FAIL** Bad Product - not \"(string)\".\n" " REF: Page 62, section 5.3." msgstr "" msgid "" " **FAIL** Bad ShortNickName - longer than 31 chars.\n" " REF: Pages 64-65, section 5.3." msgstr "" #, c-format msgid "" " **FAIL** Bad option %s choice %s\n" " REF: Page 84, section 5.9" msgstr "" #, c-format msgid " **FAIL** Default option code cannot be interpreted: %s" msgstr "" #, c-format msgid "" " **FAIL** Default translation string for option %s choice %s contains " "8-bit characters." msgstr "" #, c-format msgid "" " **FAIL** Default translation string for option %s contains 8-bit " "characters." msgstr "" #, c-format msgid " **FAIL** Group names %s and %s differ only by case." msgstr "" #, c-format msgid " **FAIL** Multiple occurrences of option %s choice name %s." msgstr "" #, c-format msgid " **FAIL** Option %s choice names %s and %s differ only by case." msgstr "" #, c-format msgid " **FAIL** Option names %s and %s differ only by case." msgstr "" #, c-format msgid "" " **FAIL** REQUIRED Default%s\n" " REF: Page 40, section 4.5." msgstr "" msgid "" " **FAIL** REQUIRED DefaultImageableArea\n" " REF: Page 102, section 5.15." msgstr "" msgid "" " **FAIL** REQUIRED DefaultPaperDimension\n" " REF: Page 103, section 5.15." msgstr "" msgid "" " **FAIL** REQUIRED FileVersion\n" " REF: Page 56, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED FormatVersion\n" " REF: Page 56, section 5.3." msgstr "" #, c-format msgid "" " **FAIL** REQUIRED ImageableArea for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 102, section 5.15." msgstr "" msgid "" " **FAIL** REQUIRED LanguageEncoding\n" " REF: Pages 56-57, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED LanguageVersion\n" " REF: Pages 57-58, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED Manufacturer\n" " REF: Pages 58-59, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED ModelName\n" " REF: Pages 59-60, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED NickName\n" " REF: Page 60, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED PCFileName\n" " REF: Pages 61-62, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED PSVersion\n" " REF: Pages 62-64, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED PageRegion\n" " REF: Page 100, section 5.14." msgstr "" msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Page 41, section 5.\n" " REF: Page 99, section 5.14." msgstr "" msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Pages 99-100, section 5.14." msgstr "" #, c-format msgid "" " **FAIL** REQUIRED PaperDimension for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 103, section 5.15." msgstr "" msgid "" " **FAIL** REQUIRED Product\n" " REF: Page 62, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED ShortNickName\n" " REF: Page 64-65, section 5.3." msgstr "" #, c-format msgid " **FAIL** Unable to open PPD file - %s on line %d." msgstr "" #, c-format msgid " %d ERRORS FOUND" msgstr "" msgid " -h Show program usage" msgstr " -h Zeige Verwendungshinweis" #, c-format msgid "" " Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:" msgstr "" #, c-format msgid "" " Bad %%%%Page: on line %d.\n" " REF: Page 53, %%%%Page:" msgstr "" #, c-format msgid "" " Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:" msgstr "" #, c-format msgid "" " Line %d is longer than 255 characters (%d).\n" " REF: Page 25, Line Length" msgstr "" msgid "" " Missing %!PS-Adobe-3.0 on first line.\n" " REF: Page 17, 3.1 Conforming Documents" msgstr "" #, c-format msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments" msgstr "" #, c-format msgid "" " Missing or bad %%BoundingBox: comment.\n" " REF: Page 39, %%BoundingBox:" msgstr "" #, c-format msgid "" " Missing or bad %%Page: comments.\n" " REF: Page 53, %%Page:" msgstr "" #, c-format msgid "" " Missing or bad %%Pages: comment.\n" " REF: Page 43, %%Pages:" msgstr "" msgid " NO ERRORS FOUND" msgstr " KEINE FEHLER GEFUNDEN" #, c-format msgid " Saw %d lines that exceeded 255 characters." msgstr "" #, c-format msgid " Too many %%BeginDocument comments." msgstr "" #, c-format msgid " Too many %%EndDocument comments." msgstr "" msgid " Warning: file contains binary data." msgstr " Warnung: Datei enthält Binärdaten." #, c-format msgid " Warning: no %%EndComments comment in file." msgstr "" #, c-format msgid " Warning: obsolete DSC version %.1f in file." msgstr "" msgid " ! expression Unary NOT of expression." msgstr " ! Ausdruck Unäre Negation des Ausdrucks." msgid " ( expressions ) Group expressions." msgstr " ( Ausdruck ) Gruppierung von Ausdrücken." msgid " --[no-]debug-logging Turn debug logging on/off." msgstr " --[no-]debug-logging Ein-/Abschalten von Fehlersuche-Protokoll." msgid " --[no-]remote-admin Turn remote administration on/off." msgstr " --[no-]remote-admin Fernadministrierung ein/ausschalten." msgid " --[no-]remote-any Allow/prevent access from the Internet." msgstr " --[no-]remote-any Erlaube/sperre zugriff über das Internet." msgid " --[no-]share-printers Turn printer sharing on/off." msgstr " --[no-]share-printers Druckerfreigabe ein/aus." msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job." msgstr "" " --[no-]user-cancel-any Erlaube/sperre Benutzern das abbrechen eines " "Druckauftrags." msgid " --cr End lines with CR (Mac OS 9)." msgstr " --cr Zeilenenden mit CR (OS 9)" msgid " --crlf End lines with CR + LF (Windows)." msgstr " --crlf Zeilenenden mit CR+LF (Windows)" msgid " --domain regex Match domain to regular expression." msgstr "" " --domain regex Prüfe die Domäne auf Übereinstimmung mit regulärem " "Ausdruck" msgid "" " --exec utility [argument ...] ;\n" " Execute program if true." msgstr "" msgid " --false Always false." msgstr " --false Immer falsch." msgid " --help Show help." msgstr " --help Zeige Hilfe." msgid " --help Show this help." msgstr " --help Zeige diese Hilfe." msgid " --host regex Match hostname to regular expression." msgstr "" " --host regex Prüfe den Hostnamen auf Übereinstimmung mit " "Regulärem Audruck" msgid " --lf End lines with LF (UNIX/Linux/macOS)." msgstr " --lf Zeilenenden mit LF (UNIX/Linux/macOS)." msgid " --list-filters List filters that will be used." msgstr " --list-filters Liste die Filter auf die benutzt werden." msgid " --local True if service is local." msgstr " --local Wahr wenn der Dienst lokal ist." msgid " --ls List attributes." msgstr " --ls Liste Attribute auf." msgid " --name regex Match service name to regular expression." msgstr "" " --name regex Vergleiche den Dienstnamen mit dem regulären " "Ausdruck." msgid " --not expression Unary NOT of expression." msgstr " --not expression Logische Negation eines Ausdrucks." msgid " --path regex Match resource path to regular expression." msgstr "" " --path regex Vergleiche den Resourcenpfad mit dem regulären " "Ausdruck." msgid " --port number[-number] Match port to number or range." msgstr "" " --port number[-number] Vergleiche den Port mit der Nummer oder dem " "Bereich." msgid " --print Print URI if true." msgstr " --print Drucke URI wenn wahr." msgid " --print-name Print service name if true." msgstr " --print-name Drucke Dienstname wenn wahr." msgid " --quiet Quietly report match via exit code." msgstr "" msgid " --remote True if service is remote." msgstr " --remote Wahr wenn der Dienst entfernt ist." msgid "" " --stop-after-include-error\n" " Stop tests after a failed INCLUDE." msgstr "" msgid " --true Always true." msgstr " --true immer wahr." msgid " --txt key True if the TXT record contains the key." msgstr "" " --txt key Wahr wenn der TXT Eintrag den Schlüssel enthält." msgid " --txt-* regex Match TXT record key to regular expression." msgstr "" msgid " --uri regex Match URI to regular expression." msgstr "" " --uri regex Prüft die URI auf Übereinstimmung mit dem " "regulären Ausdruck." msgid " --version Show program version." msgstr " --version Zeigfe die Programmversion." msgid " --version Show version." msgstr " --version Zeige Version." msgid " -4 Connect using IPv4." msgstr " -4 Verbinde unter Verwendung von IPv4." msgid " -6 Connect using IPv6." msgstr " -6 Verbinde unter Verwendung von IPv6." msgid " -C Send requests using chunking (default)." msgstr "" " -C Sende Anfragen mit Blockbildung (Voreinstellung)." msgid " -D Remove the input file when finished." msgstr " -D Lösche die Eingabe nach Beenden." msgid " -D name=value Set named variable to value." msgstr " -D Name=Wert Variable »Name« den »Wert« zuordnen." msgid " -E Encrypt the connection." msgstr " -E Verschlüssele die Verbindung." msgid "" " -E Test with encryption using HTTP Upgrade to TLS." msgstr "" msgid "" " -F Run in the foreground but detach from console." msgstr "" " -F Laufe im Vordergrund aber abgetrennt von der " "Konsole." msgid " -H samba-server Use the named SAMBA server." msgstr " -H samba-server Benutze den SAMBA Server." msgid " -I Ignore errors." msgstr " -I Ignoriere Fehler." msgid " -I include-dir Add include directory to search path." msgstr "" " -I Inklus.Verz. Inklusionsverzeichnis dem Suchpfad hinzufügen." msgid " -I {filename,filters,none,profiles}" msgstr "" msgid " -L Send requests using content-length." msgstr "" " -L Send Anfragen unter Benutzung der Content-length " "Headers." msgid "" " -P filename.plist Produce XML plist to a file and test report to " "standard output." msgstr "" msgid " -P filename.ppd Set PPD file." msgstr " -P filename.ppd Lege PPD Datei fest." msgid " -P number[-number] Match port to number or range." msgstr "" " -P number[-Nummer] Prüft die Portnummer auf Übereinstimmung mit dem " "regulären Ausdruck." msgid " -R root-directory Set alternate root." msgstr "" " -R Wurzelverz. Legt ein alternatives Wurzelverzeichnis fest." msgid " -S Test with encryption using HTTPS." msgstr "" msgid " -T seconds Set the browse timeout in seconds." msgstr "" " -T Sekunden Legt die Zeitüberschreitung für das Browsen in s " "fest." msgid " -T seconds Set the receive/send timeout in seconds." msgstr "" " -T Sekunden Legt die Sende-/Empfangs-Zeitüberschreitung in s " "fest." msgid " -U username Specify username." msgstr " -U username Gebe den Benutzernamen an." msgid " -V version Set default IPP version." msgstr " -V version Setze die Voreingestellte IPP Version." msgid "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgstr "" msgid " -X Produce XML plist instead of plain text." msgstr " -X Erzeuge XML-Ausgaben anstatt von Text." msgid " -a Export all printers." msgstr " -a Exportiere alle Drucker." msgid " -c Produce CSV output." msgstr " -c Erzeuge CSV Ausgabe." msgid " -c catalog.po Load the specified message catalog." msgstr " -c Katalog.po Lade den angegebenen Nachrichtenkatalog." msgid " -c cups-files.conf Set cups-files.conf file to use." msgstr "" " -c cups-files.conf Setze die zu benutzende Datei cups-files.conf" msgid " -c cupsd.conf Set cupsd.conf file to use." msgstr " -c cups.conf Setze die zu benutzende Datei cups.conf" msgid " -d name=value Set named variable to value." msgstr " -d Name=Wert Ordnet der Variablen »Name« den Wert zu." msgid " -d output-dir Specify the output directory." msgstr " -d AusgabeVerz. Angabe des Ausgabeverzeichnisses." msgid " -d printer Use the named printer." msgstr " -d printer Benutze den genannten Drucker." msgid " -d regex Match domain to regular expression." msgstr "" " -d regex Prüft die Domäne auf Übereinstimmung mit regulärem " "Ausdruck." msgid " -e Use every filter from the PPD file." msgstr " -e Benutzt jeden Filter der PPD Datei." msgid " -f Run in the foreground." msgstr " -f Laufe im Vordergrund." msgid " -f filename Set default request filename." msgstr "" " -f Dateiname Legt den voreingestellten Dateinanmen der Anfrage " "fest." msgid " -h Show this usage message." msgstr " -h Zeige diese Verwendungsanleitung." msgid " -h Validate HTTP response headers." msgstr "" msgid " -h regex Match hostname to regular expression." msgstr "" " -h regex Prüft den Hostnamen auf Übereinstimmung mit dem " "regulären Ausdruck." msgid " -h server[:port] Specify server address." msgstr " -h server[:port] Spezifiziere die Server-Adresse." msgid " -i mime/type Set input MIME type (otherwise auto-typed)." msgstr "" " -i mime/type Legt den MIME-typ der Eingabe fest (sonst " "selbsterkennend)." msgid "" " -i seconds Repeat the last file with the given time interval." msgstr "" " -i Sekunden Wiederhole die letzte Datei im gegebenen Intervall." msgid "" " -j job-id[,N] Filter file N from the specified job (default is " "file 1)." msgstr "" msgid " -l List attributes." msgstr " -l Listet die Attribute auf." msgid " -l Produce plain text output." msgstr " -l Erzeuge reine Textausgabe." msgid " -l Run cupsd on demand." msgstr " -l Starte cupsd bei Bedarf." msgid " -l lang[,lang,...] Specify the output language(s) (locale)." msgstr " -l lang[,lang,...] Spezifiziere die Ausgabesprache(n) (locale)." msgid " -m Use the ModelName value as the filename." msgstr " -m Verwende den ModellNamen als Dateinamen." msgid "" " -m mime/type Set output MIME type (otherwise application/pdf)." msgstr "" " -m mime/type Legt den MIME-typ der Ausgabe fest (sonst " "application/pdf)." msgid " -n copies Set number of copies." msgstr " -n copies Lege die Anzahl der Kopien fest." msgid "" " -n count Repeat the last file the given number of times." msgstr " -n Anzahl Wiederhole die letzte Datei »Anzahl« male." msgid " -n regex Match service name to regular expression." msgstr "" " -n regex Prüfe den Dienstnamen gegen den regulären Ausdruck " "»regex«." msgid "" " -o filename.drv Set driver information file (otherwise ppdi.drv)." msgstr "" " -o Dateiname.drv Legt die Treiberinformationsdatei fest (sonst ppdi." "drv)." msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)." msgstr "" " -o Dateiname.ppd[.gz] Legt den Dateinamen der Ausgabe fest (sonst " "stdout)." msgid " -o name=value Set option(s)." msgstr " -o Name=Wert Legt Optionen fest." msgid " -p Print URI if true." msgstr "" msgid " -p filename.ppd Set PPD file." msgstr " -p filename.ppd Lege PPD Datei fest." msgid " -q Quietly report match via exit code." msgstr "" msgid " -q Run silently." msgstr " -q stille Ausführung." msgid " -r True if service is remote." msgstr "" msgid " -r Use 'relaxed' open mode." msgstr "" msgid " -s Print service name if true." msgstr "" msgid " -s cups-files.conf Set cups-files.conf file to use." msgstr "" msgid " -t Produce a test report." msgstr " -t Erzeuge einen Testbericht." msgid " -t Test PPDs instead of generating them." msgstr " -t Teste PPDs anstelle sie zu erzeugen." msgid " -t Test the configuration file." msgstr " -t Teste die Konfigurationsdatei." msgid " -t key True if the TXT record contains the key." msgstr "" msgid " -t title Set title." msgstr " -t Titel Legt den Titel fest." msgid " -u Remove the PPD file when finished." msgstr " -u Lösche die PPD Datei nach Beenden." msgid " -u regex Match URI to regular expression." msgstr "" " -u regex Auf Übereinstimmung der URI mit dem regulären " "Ausdruck prüfen." msgid " -v Be verbose." msgstr " -v ausführliche Ausgabe." msgid " -vv Be very verbose." msgstr " -vv sehr ausführliche Ausgabe." msgid "" " -x utility [argument ...] ;\n" " Execute program if true." msgstr "" msgid " -z Compress PPD files using GNU zip." msgstr "" " -z Komprimiere PPD Datei unter Verwendung von GNU zip." msgid " IPPFIND_SERVICE_DOMAIN Domain name" msgstr "" msgid "" " IPPFIND_SERVICE_HOSTNAME\n" " Fully-qualified domain name" msgstr "" msgid " IPPFIND_SERVICE_NAME Service instance name" msgstr "" msgid " IPPFIND_SERVICE_PORT Port number" msgstr "" msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type" msgstr "" msgid " IPPFIND_SERVICE_SCHEME URI scheme" msgstr "" msgid " IPPFIND_SERVICE_URI URI" msgstr "" msgid " IPPFIND_TXT_* Value of TXT record key" msgstr "" msgid "" " expression --and expression\n" " Logical AND." msgstr "" msgid "" " expression --or expression\n" " Logical OR." msgstr "" msgid " expression expression Logical AND." msgstr "" msgid " {service_domain} Domain name" msgstr "" msgid " {service_hostname} Fully-qualified domain name" msgstr "" msgid " {service_name} Service instance name" msgstr "" msgid " {service_port} Port number" msgstr "" msgid " {service_regtype} DNS-SD registration type" msgstr "" msgid " {service_scheme} URI scheme" msgstr "" msgid " {service_uri} URI" msgstr "" msgid " {txt_*} Value of TXT record key" msgstr "" msgid " {} URI" msgstr "" msgid " FAIL" msgstr "" msgid " PASS" msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section " "5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." msgstr "" #, c-format msgid "" "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 " "section 5.1.14)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section " "5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " "positive (RFC 8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC " "8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes" msgstr "" #, c-format msgid "%d x %d mm" msgstr "%d×%d mm" #, c-format msgid "%g x %g \"" msgstr "" #, c-format msgid "%s (%s)" msgstr "%s (%s)" #, c-format msgid "%s (%s, %s)" msgstr "%s (%s, %s)" #, c-format msgid "%s (Borderless)" msgstr "%s (Randlos)" #, c-format msgid "%s (Borderless, %s)" msgstr "%s (Randlos, %s)" #, c-format msgid "%s (Borderless, %s, %s)" msgstr "%s (Randlos, %s, %s)" #, c-format msgid "%s accepting requests since %s" msgstr "%s akzeptiert anfragen seit %s" #, c-format msgid "%s cannot be changed." msgstr "%s kann nicht geändert werden." #, c-format msgid "%s is not implemented by the CUPS version of lpc." msgstr "%s ist in der CUPS-Version von lpc nicht implementiert." #, c-format msgid "%s is not ready" msgstr "%s ist nicht bereit" #, c-format msgid "%s is ready" msgstr "%s ist bereit" #, c-format msgid "%s is ready and printing" msgstr "%s ist bereit und druckt" #, c-format msgid "%s job-id user title copies options [file]" msgstr "%s Auftrags-ID Benutzer Titel Kopien Optionen [Datei]" #, c-format msgid "%s not accepting requests since %s -" msgstr "%s akzeptiert keine Anfragen seit %s -" #, c-format msgid "%s not supported." msgstr "%s nicht unterstützt." #, c-format msgid "%s/%s accepting requests since %s" msgstr "%s/%s akzeptiert Anfragen seit %s" #, c-format msgid "%s/%s not accepting requests since %s -" msgstr "%s/%s akzeptiert keine Anfragen seit %s -" #, c-format msgid "%s: %-33.33s [job %d localhost]" msgstr "" #. TRANSLATORS: Message is "subject: error" #, c-format msgid "%s: %s" msgstr "" #, c-format msgid "%s: %s failed: %s" msgstr "%s: %s fehlgeschlagen: %s" #, c-format msgid "%s: Bad printer URI \"%s\"." msgstr "%s: Ungültige Drucker URI \"%s\"." #, c-format msgid "%s: Bad version %s for \"-V\"." msgstr "%s: Ungültige Version %s für \"-V\"." #, c-format msgid "%s: Don't know what to do." msgstr "%s: Unklar was zu tun ist." #, c-format msgid "%s: Error - %s" msgstr "" #, c-format msgid "" "%s: Error - %s environment variable names non-existent destination \"%s\"." msgstr "" "%s: Fehler - %s Umgebungsvariable bezeichnet nicht existentes Ziel \"%s\"." #, c-format msgid "%s: Error - add '/version=1.1' to server name." msgstr "%s: Fehler - füge '/version=1.1' zum Servernamen hinzu." #, c-format msgid "%s: Error - bad job ID." msgstr "%s: Fehler - ungültige Auftrags-ID." #, c-format msgid "%s: Error - cannot print files and alter jobs simultaneously." msgstr "" "%s: Fehler - kann nicht gleichzeitig Dateien drucken und Aufträge ändern." #, c-format msgid "%s: Error - cannot print from stdin if files or a job ID are provided." msgstr "" "%s: Fehler - Kann von der Standardeingabe nicht drucken wenn eine Datei oder " "Auftrags-ID übergeben werden." #, c-format msgid "%s: Error - copies must be 1 or more." msgstr "" #, c-format msgid "%s: Error - expected character set after \"-S\" option." msgstr "%s: Fehler - Zeichensatz nach der \"-S\" Option erwartet." #, c-format msgid "%s: Error - expected content type after \"-T\" option." msgstr "%s: Fehler - Inhaltstyp nach der \"-T\" Option erwartet." #, c-format msgid "%s: Error - expected copies after \"-#\" option." msgstr "%s: Fehler - Kopienanzahl nach der \"-#\" Option erwartet." #, c-format msgid "%s: Error - expected copies after \"-n\" option." msgstr "%s: Fehler - Kopienzahl nach der \"-n\" Option erwartet." #, c-format msgid "%s: Error - expected destination after \"-P\" option." msgstr "%s: Fehler - Zielangabe nach der \"-P\" Option erwartet." #, c-format msgid "%s: Error - expected destination after \"-d\" option." msgstr "%s: Fehler - Zielangabe nach der \"-d\" Option erwartet." #, c-format msgid "%s: Error - expected form after \"-f\" option." msgstr "" #, c-format msgid "%s: Error - expected hold name after \"-H\" option." msgstr "%s: Fehler - erwarte hold name nach \"-H\" Option." #, c-format msgid "%s: Error - expected hostname after \"-H\" option." msgstr "%s: Fehler - Hostname nach der \"-H\" Option erwartet." #, c-format msgid "%s: Error - expected hostname after \"-h\" option." msgstr "%s: Fehler - Hostname nach der \"-h\" Option erwartet." #, c-format msgid "%s: Error - expected mode list after \"-y\" option." msgstr "" #, c-format msgid "%s: Error - expected name after \"-%c\" option." msgstr "%s: Fehler - Name nach der »-%c« Option erwartet." #, c-format msgid "%s: Error - expected option=value after \"-o\" option." msgstr "%s: Fehler - Option=Wert nach der »-o« Option erwartet." #, c-format msgid "%s: Error - expected page list after \"-P\" option." msgstr "%s: Fehler - Seitenliste nach der »-P« Option erwartet." #, c-format msgid "%s: Error - expected priority after \"-%c\" option." msgstr "%s: Fehler - Priorität nach der »-%c« Option erwartet." #, c-format msgid "%s: Error - expected reason text after \"-r\" option." msgstr "%s: Fehler - Grund nach der »-r« Option erwartet." #, c-format msgid "%s: Error - expected title after \"-t\" option." msgstr "%s: Fehler - Titel nach der »-t« Option erwartet." #, c-format msgid "%s: Error - expected username after \"-U\" option." msgstr "%s: Fehler - Benutzername nach der »-U« Option erwartet." #, c-format msgid "%s: Error - expected username after \"-u\" option." msgstr "%s: Fehler - Benutzername nach der »-u« Option erwartet." #, c-format msgid "%s: Error - expected value after \"-%c\" option." msgstr "%s: Fehler - Wert nach der »%c« Option erwartet." #, c-format msgid "" "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" " "option." msgstr "" "%s: Fehler - benötigt \"completed\", \"not-completed\", oder \"all\" nach \"-" "W\" Option." #, c-format msgid "%s: Error - no default destination available." msgstr "%s: Fehler - kein voreingestellted Druckziel verfügbar." #, c-format msgid "%s: Error - priority must be between 1 and 100." msgstr "%s: Fehler - Priorität muss zwischen 1 und 100 liegen." #, c-format msgid "%s: Error - scheduler not responding." msgstr "%s: Fehler - Zeitplandienst antwortet nicht." #, c-format msgid "%s: Error - too many files - \"%s\"." msgstr "%s: Fehler - zu viele Dateien - \"%s\"." #, c-format msgid "%s: Error - unable to access \"%s\" - %s" msgstr "%s: Fehler - Zugriff auf »%s« nicht möglich - %s" #, c-format msgid "%s: Error - unable to queue from stdin - %s." msgstr "" #, c-format msgid "%s: Error - unknown destination \"%s\"." msgstr "%s: Fehler - unbekanntes Druckziel \"%s\"." #, c-format msgid "%s: Error - unknown destination \"%s/%s\"." msgstr "%s: Fehler - unbekanntes Druckziel \"%s/%s\"." #, c-format msgid "%s: Error - unknown option \"%c\"." msgstr "%s: Fehler - unbekannte Option \"%c\"." #, c-format msgid "%s: Error - unknown option \"%s\"." msgstr "%s: Fehler - unbekannte Option \"%s\"." #, c-format msgid "%s: Expected job ID after \"-i\" option." msgstr "" #, c-format msgid "%s: Invalid destination name in list \"%s\"." msgstr "" #, c-format msgid "%s: Invalid filter string \"%s\"." msgstr "" #, c-format msgid "%s: Missing filename for \"-P\"." msgstr "%s: Fehlender NAme für \"-P\"." #, c-format msgid "%s: Missing timeout for \"-T\"." msgstr "%s: Fehlender Zeitüberschreitung für \"-T\"." #, c-format msgid "%s: Missing version for \"-V\"." msgstr "%s: Fehlende Version für \"-V\"." #, c-format msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"." msgstr "%s: Benötigt Auftrags-ID (\"-i jobid\") vor \"-H restart\"." #, c-format msgid "%s: No filter to convert from %s/%s to %s/%s." msgstr "%s: Kein Filter zum Umwandeln von %s/%s nach %s/%s." #, c-format msgid "%s: Operation failed: %s" msgstr "%s: Vorgang fehlgeschlagen: %s" #, c-format msgid "%s: Sorry, no encryption support." msgstr "%s: Sorry, Verschlüsselung nicht unterstützt." #, c-format msgid "%s: Unable to connect to \"%s:%d\": %s" msgstr "%s: Verbindung zu \"%s:%d\": %s nicht möglich" #, c-format msgid "%s: Unable to connect to server." msgstr "%s: Verbindung zum Server nicht möglich." #, c-format msgid "%s: Unable to contact server." msgstr "%s: Server kontaktieren nicht möglich." #, c-format msgid "%s: Unable to create PPD file: %s" msgstr "%s: Erzeugung der PPD Datei nicht möglich: %s" #, c-format msgid "%s: Unable to determine MIME type of \"%s\"." msgstr "%s: Nicht möglich den MIME type von \"%s\" zu ermitteln." #, c-format msgid "%s: Unable to open \"%s\": %s" msgstr "%s: Öffnen von \"%s\": %s nicht möglich" #, c-format msgid "%s: Unable to open %s: %s" msgstr "%s: Öffnen von %s: %s nicht möglich" #, c-format msgid "%s: Unable to open PPD file: %s on line %d." msgstr "%s: Öffnen der PPD Datei: %s in Zeile %d." #, c-format msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"." msgstr "%s: Lesen der MIME Datenbank von \"%s\" oder \"%s\" nicht möglich." #, c-format msgid "%s: Unable to resolve \"%s\"." msgstr "%s: Auflösen von \"%s\" nicht möglich." #, c-format msgid "%s: Unknown argument \"%s\"." msgstr "" #, c-format msgid "%s: Unknown destination \"%s\"." msgstr "%s: Unbekanntes Druckziel \"%s\"." #, c-format msgid "%s: Unknown destination MIME type %s/%s." msgstr "%s: Unbekannte Ziel-MIME-Type %s/%s." #, c-format msgid "%s: Unknown option \"%c\"." msgstr "%s: Unbekannte Option \"%c\"." #, c-format msgid "%s: Unknown option \"%s\"." msgstr "%s: Unbekannte Option \"%s\"." #, c-format msgid "%s: Unknown option \"-%c\"." msgstr "%s: Unbekannte Option \"-%c\"." #, c-format msgid "%s: Unknown source MIME type %s/%s." msgstr "%s: Unbekannte Quell-MIME-Type %s/%s." #, c-format msgid "" "%s: Warning - \"%c\" format modifier not supported - output may not be " "correct." msgstr "" #, c-format msgid "%s: Warning - character set option ignored." msgstr "%s: Warnung - Zeichensatzoption ignoriert." #, c-format msgid "%s: Warning - content type option ignored." msgstr "%s: Warnung - Inhaltstypenoption ignoriert." #, c-format msgid "%s: Warning - form option ignored." msgstr "" #, c-format msgid "%s: Warning - mode option ignored." msgstr "" msgid "-1" msgstr "-1" msgid "-10" msgstr "-10" msgid "-100" msgstr "-100" msgid "-105" msgstr "-105" msgid "-11" msgstr "-11" msgid "-110" msgstr "-110" msgid "-115" msgstr "-115" msgid "-12" msgstr "-12" msgid "-120" msgstr "-120" msgid "-13" msgstr "-13" msgid "-14" msgstr "-14" msgid "-15" msgstr "-15" msgid "-2" msgstr "-2" msgid "-20" msgstr "-20" msgid "-25" msgstr "-25" msgid "-3" msgstr "-3" msgid "-30" msgstr "-30" msgid "-35" msgstr "-35" msgid "-4" msgstr "-4" msgid "-40" msgstr "-40" msgid "-45" msgstr "-45" msgid "-5" msgstr "-5" msgid "-50" msgstr "-50" msgid "-55" msgstr "-55" msgid "-6" msgstr "-6" msgid "-60" msgstr "-60" msgid "-65" msgstr "-65" msgid "-7" msgstr "-7" msgid "-70" msgstr "-70" msgid "-75" msgstr "-75" msgid "-8" msgstr "-8" msgid "-80" msgstr "-80" msgid "-85" msgstr "-85" msgid "-9" msgstr "-9" msgid "-90" msgstr "-90" msgid "-95" msgstr "-95" msgid "0" msgstr "0" msgid "1" msgstr "1" msgid "1 inch/sec." msgstr "1 inch/s" # Die Verwendung des x ist nur ersatzweise erlaubt, typografisch korrekt und in UTF-8 auch möglich ist × # Keine Leerzeichen zwischen Zahl und ×! # Die Verwendung von " für die Einheit Inch ist nicht zulässig (ISO 80000). # Die Bezeichnung "Zoll" ist nicht korrekt. msgid "1.25x0.25\"" msgstr "1,25×0,25 inch" msgid "1.25x2.25\"" msgstr "1,25×2,25 inch" msgid "1.5 inch/sec." msgstr "1,5 inch/s" msgid "1.50x0.25\"" msgstr "1,50×0,25 inch" msgid "1.50x0.50\"" msgstr "1,50×0,50 inch" msgid "1.50x1.00\"" msgstr "1,50×1,00 inch" msgid "1.50x2.00\"" msgstr "1,50×2,00 inch" msgid "10" msgstr "10" # Die SI Einheit Sekunde wird korrekt nur mit s abgekürzt (ISO 31), (sek ist nicht zulässig) msgid "10 inches/sec." msgstr "10 inch/s" msgid "10 x 11" msgstr "10×11 inch" msgid "10 x 13" msgstr "10×13 inch" msgid "10 x 14" msgstr "10×14 inch" msgid "100" msgstr "100" msgid "100 mm/sec." msgstr "100 mm/s" msgid "105" msgstr "105" msgid "11" msgstr "11" msgid "11 inches/sec." msgstr "11 inch/s" msgid "110" msgstr "110" msgid "115" msgstr "115" msgid "12" msgstr "12" msgid "12 inches/sec." msgstr "12 inch/s" msgid "12 x 11" msgstr "12×11 inch" msgid "120" msgstr "120" msgid "120 mm/sec." msgstr "120 mm/s" msgid "120x60dpi" msgstr "120×60 dpi" msgid "120x72dpi" msgstr "120×72 dpi" msgid "13" msgstr "13" msgid "136dpi" msgstr "136 dpi" msgid "14" msgstr "14" msgid "15" msgstr "15" msgid "15 mm/sec." msgstr "15 mm/s" msgid "15 x 11" msgstr "" msgid "150 mm/sec." msgstr "150 mm/s" msgid "150dpi" msgstr "150 dpi" msgid "16" msgstr "16" msgid "17" msgstr "17" msgid "18" msgstr "18" msgid "180dpi" msgstr "180 dpi" msgid "19" msgstr "19" msgid "2" msgstr "2" msgid "2 inches/sec." msgstr "2 inch/s" msgid "2-Hole Punch (Landscape)" msgstr "2-fach Lochung (Querformat)" msgid "2-Hole Punch (Portrait)" msgstr "2-fach Lochung (Hochformat)" msgid "2-Hole Punch (Reverse Landscape)" msgstr "2-fach Lochung (gedrehtes Querformat)" msgid "2-Hole Punch (Reverse Portrait)" msgstr "2-fach Lochung (gedrehtes Hochformat)" msgid "2-Sided Printing" msgstr "Doppelseitig drucken" msgid "2.00x0.37\"" msgstr "2,00×0,37 inch" msgid "2.00x0.50\"" msgstr "2,00×0,50 inch" msgid "2.00x1.00\"" msgstr "2,00×1,00 inch" msgid "2.00x1.25\"" msgstr "2,00×1,25 inch" msgid "2.00x2.00\"" msgstr "2,00×2,00 inch" msgid "2.00x3.00\"" msgstr "2,00×3,00 inch" msgid "2.00x4.00\"" msgstr "2,00×4,00 inch" msgid "2.00x5.50\"" msgstr "2,00×5,50 inch" msgid "2.25x0.50\"" msgstr "2,25×0,50 inch" msgid "2.25x1.25\"" msgstr "2,25×1,25 inch" msgid "2.25x4.00\"" msgstr "2,25×4,00 inch" msgid "2.25x5.50\"" msgstr "2,25×5,50 inch" msgid "2.38x5.50\"" msgstr "2,38×5,50 inch" msgid "2.5 inches/sec." msgstr "2,5 inch/s" msgid "2.50x1.00\"" msgstr "2,50×1,00 inch" msgid "2.50x2.00\"" msgstr "2,50×2,00 inch" msgid "2.75x1.25\"" msgstr "2,75×1,25 inch" msgid "2.9 x 1\"" msgstr "2.9×1 inch" msgid "20" msgstr "20" msgid "20 mm/sec." msgstr "20 mm/s" msgid "200 mm/sec." msgstr "200 mm/s" msgid "203dpi" msgstr "203 dpi" msgid "21" msgstr "21" msgid "22" msgstr "22" msgid "23" msgstr "23" msgid "24" msgstr "24" msgid "24-Pin Series" msgstr "24-Pin Serie" msgid "240x72dpi" msgstr "240×72 dpi" msgid "25" msgstr "25" msgid "250 mm/sec." msgstr "250 mm/s" msgid "26" msgstr "26" msgid "27" msgstr "27" msgid "28" msgstr "28" msgid "29" msgstr "29" msgid "3" msgstr "3" msgid "3 inches/sec." msgstr "3 inch/s" msgid "3 x 5" msgstr "3×5" msgid "3-Hole Punch (Landscape)" msgstr "3-fach Lochung (Querformat)" msgid "3-Hole Punch (Portrait)" msgstr "3-Fach Lochung (Hochformat)" msgid "3-Hole Punch (Reverse Landscape)" msgstr "3-fach Lochung (gedrehtes Querformat)" msgid "3-Hole Punch (Reverse Portrait)" msgstr "2-fach Lochung (gedrehtes Hochformat)" msgid "3.00x1.00\"" msgstr "3,00×1,00inch" msgid "3.00x1.25\"" msgstr "3,00×1,25 inch" msgid "3.00x2.00\"" msgstr "3,00×2,00 inch" msgid "3.00x3.00\"" msgstr "3,00×3,00 inch" msgid "3.00x5.00\"" msgstr "3,00×5,00 inch" msgid "3.25x2.00\"" msgstr "3,25×2,00 inch" msgid "3.25x5.00\"" msgstr "3,25×5,00 inch" msgid "3.25x5.50\"" msgstr "3,25×5,50 inch" msgid "3.25x5.83\"" msgstr "3,25×5,83 inch" msgid "3.25x7.83\"" msgstr "3,25×7,83 inch" msgid "3.5 x 5" msgstr "3,5×5 inch" msgid "3.5\" Disk" msgstr "3,5 inch Disk" msgid "3.50x1.00\"" msgstr "3,50×1,00 inch" msgid "30" msgstr "30" msgid "30 mm/sec." msgstr "30 mm/s" msgid "300 mm/sec." msgstr "300 mm/s" msgid "300dpi" msgstr "300 dpi" msgid "35" msgstr "35" msgid "360dpi" msgstr "360 dpi" msgid "360x180dpi" msgstr "360×180 dpi" msgid "4" msgstr "4" msgid "4 inches/sec." msgstr "4 inch/s" msgid "4-Hole Punch (Landscape)" msgstr "4-fach Lochung (Querformat)" msgid "4-Hole Punch (Portrait)" msgstr "4-fach Lochung (Hochformat)" msgid "4-Hole Punch (Reverse Landscape)" msgstr "4-fach Lochung (gedrehtes Querformat)" msgid "4-Hole Punch (Reverse Portrait)" msgstr "4-fach Lochung (gedrehtes Hochformat)" msgid "4.00x1.00\"" msgstr "4,00×1,00 inch" msgid "4.00x13.00\"" msgstr "4,00×13,00 inch" msgid "4.00x2.00\"" msgstr "4,00×2,00 inch" msgid "4.00x2.50\"" msgstr "4,00×2,50 inch" msgid "4.00x3.00\"" msgstr "4,00×3,00 inch" msgid "4.00x4.00\"" msgstr "4,00×4,00 inch" msgid "4.00x5.00\"" msgstr "4,00×5,00 inch" msgid "4.00x6.00\"" msgstr "4,00×6,00 inch" msgid "4.00x6.50\"" msgstr "4,00×6,50 inch" msgid "40" msgstr "40" msgid "40 mm/sec." msgstr "40 mm/s" msgid "45" msgstr "45" msgid "5" msgstr "5" msgid "5 inches/sec." msgstr "5 inch/s" msgid "5 x 7" msgstr "5×7" msgid "50" msgstr "50" msgid "55" msgstr "55" msgid "6" msgstr "6" msgid "6 inches/sec." msgstr "6 inch/s" msgid "6.00x1.00\"" msgstr "6,00×1,00 inch" msgid "6.00x2.00\"" msgstr "6,00×2,00 inch" msgid "6.00x3.00\"" msgstr "6,00×3,00 inch" msgid "6.00x4.00\"" msgstr "6,00×4,00 inch" msgid "6.00x5.00\"" msgstr "6,00×5,00 inch" msgid "6.00x6.00\"" msgstr "6,00×6,00 inch" msgid "6.00x6.50\"" msgstr "6,00×6,50 inch" msgid "60" msgstr "60" msgid "60 mm/sec." msgstr "60 mm/s" msgid "600dpi" msgstr "600 dpi" msgid "60dpi" msgstr "60 dpi" msgid "60x72dpi" msgstr "60×72 dpi" msgid "65" msgstr "65" msgid "7" msgstr "7" msgid "7 inches/sec." msgstr "7 inch/s" msgid "7 x 9" msgstr "7×9" msgid "70" msgstr "70" msgid "75" msgstr "75" msgid "8" msgstr "8" msgid "8 inches/sec." msgstr "8 inch/s" msgid "8 x 10" msgstr "8×10 inch" msgid "8.00x1.00\"" msgstr "8,00×1,00 inch" msgid "8.00x2.00\"" msgstr "8,00×2,00 inch" msgid "8.00x3.00\"" msgstr "8,00×3,00 inch" msgid "8.00x4.00\"" msgstr "8,00×4,00 inch" msgid "8.00x5.00\"" msgstr "8,00×5,00 inch" msgid "8.00x6.00\"" msgstr "8,00×6,00 inch" msgid "8.00x6.50\"" msgstr "8,00×6,50 inch" msgid "80" msgstr "80" msgid "80 mm/sec." msgstr "80 mm/s" msgid "85" msgstr "85" msgid "9" msgstr "9" msgid "9 inches/sec." msgstr "9 inch/s" msgid "9 x 11" msgstr "9×12" msgid "9 x 12" msgstr "9×12" msgid "9-Pin Series" msgstr "9-Pin Serie" msgid "90" msgstr "90" msgid "95" msgstr "95" msgid "?Invalid help command unknown." msgstr "?Ungültiger Hilfebefehl unbekannt." msgid "A Samba password is required to export printer drivers" msgstr "Ein Samba-Passwort ist erforderlich um Druckertrieber zu exportieren" msgid "A Samba username is required to export printer drivers" msgstr "" "Ein Samba-Benutzername ist erforderlich um Druckertreiber zu exportieren" #, c-format msgid "A class named \"%s\" already exists." msgstr "Eine Klasse mit dem Namen \"%s\" existiert bereits." #, c-format msgid "A printer named \"%s\" already exists." msgstr "Ein Drucker mit dem Namen \"%s\" existiert bereits." msgid "A0" msgstr "DIN A0" msgid "A0 Long Edge" msgstr "A0 lange Kante" msgid "A1" msgstr "DIN A1" msgid "A1 Long Edge" msgstr "A1 lange Kante" msgid "A10" msgstr "DIN A10" msgid "A2" msgstr "DIN A2" msgid "A2 Long Edge" msgstr "A2 lange Kante" msgid "A3" msgstr "DIN A3" msgid "A3 Long Edge" msgstr "A3 lange Kante" msgid "A3 Oversize" msgstr "A3 Übergrösse" msgid "A3 Oversize Long Edge" msgstr "A3 Übergrösse lange Kante" msgid "A4" msgstr "DIN A4" msgid "A4 Long Edge" msgstr "A4 lange Kante" msgid "A4 Oversize" msgstr "A4 Übergrösse" msgid "A4 Small" msgstr "A4 klein" msgid "A5" msgstr "DIN A5" msgid "A5 Long Edge" msgstr "A5 lange Kante" msgid "A5 Oversize" msgstr "A5 Übergrösse" msgid "A6" msgstr "DIN A6" msgid "A6 Long Edge" msgstr "A6 lange Kante" msgid "A7" msgstr "DIN A7" msgid "A8" msgstr "DIN A8" msgid "A9" msgstr "DIN A9" msgid "ANSI A" msgstr "ANSI A" msgid "ANSI B" msgstr "ANSI B" msgid "ANSI C" msgstr "ANSI C" msgid "ANSI D" msgstr "ANSI D" msgid "ANSI E" msgstr "ANSI E" msgid "ARCH C" msgstr "ARCH C" msgid "ARCH C Long Edge" msgstr "ARCH C lange Kante" msgid "ARCH D" msgstr "ARCH D" msgid "ARCH D Long Edge" msgstr "ARCH D lange Kante" msgid "ARCH E" msgstr "ARCH E" msgid "ARCH E Long Edge" msgstr "ARCH E lange Kante" msgid "Accept Jobs" msgstr "Druckaufträge akzeptieren" msgid "Accepted" msgstr "Akzeptiert" msgid "Accordian Fold" msgstr "" msgid "Add Class" msgstr "Klasse hinzufügen" msgid "Add Printer" msgstr "Drucker hinzufügen" msgid "Add RSS Subscription" msgstr "RSS-Abo hinzufügen" msgid "Address" msgstr "Adresse" msgid "Administration" msgstr "Verwaltung" msgid "Advanced Photo Paper" msgstr "" msgid "Alternate" msgstr "" msgid "Alternate Roll" msgstr "" msgid "Aluminum" msgstr "" msgid "Always" msgstr "Immer" msgid "AppSocket/HP JetDirect" msgstr "AppSocket/HP JetDirect" msgid "Applicator" msgstr "Applicator" msgid "Archival Envelope" msgstr "" msgid "Archival Fabric" msgstr "" msgid "Archival Paper" msgstr "" msgid "Archival Photo Paper" msgstr "" #, c-format msgid "Attempt to set %s printer-state to bad value %d." msgstr "Versuch den %s Druckerstatus auf einen ungültigen %d Wert zu setzen." #, c-format msgid "Attribute \"%s\" is in the wrong group." msgstr "" #, c-format msgid "Attribute \"%s\" is the wrong value type." msgstr "" #, c-format msgid "Attribute groups are out of order (%x < %x)." msgstr "Attributgruppen sind nicht in der Reihenfolge (%x < %x)" msgid "Automatic" msgstr "" msgid "B0" msgstr "DIN B0" msgid "B1" msgstr "DIN B1" msgid "B10" msgstr "DIN B10" msgid "B2" msgstr "DIN B2" msgid "B3" msgstr "DIN B3" msgid "B4" msgstr "DIN B4" msgid "B5" msgstr "DIN B5" msgid "B5 Oversize" msgstr "B5 Übergrösse" msgid "B6" msgstr "DIN B6" msgid "B7" msgstr "DIN B7" msgid "B8" msgstr "DIN B8" msgid "B9" msgstr "DIN B9" msgid "Back Print Film" msgstr "" #, c-format msgid "Bad 'document-format' value \"%s\"." msgstr "Fehlerhafter 'document-format' Wert \"%s\"." msgid "Bad NULL dests pointer" msgstr "Ungültiger NULL-Dests-Pointer" msgid "Bad OpenGroup" msgstr "Ungültige OpenGroup" msgid "Bad OpenUI/JCLOpenUI" msgstr "Ungültig OpenUI/JCLOpenUI" msgid "Bad OrderDependency" msgstr "Ungültige Abhängigkeit" msgid "Bad PPD cache file." msgstr "Ungültige PPD Cache Datei." msgid "Bad PPD file." msgstr "Ungültige PPD Datei" msgid "Bad Request" msgstr "Ungültige Anfrage" msgid "Bad SNMP version number" msgstr "Ungültige SNMP-Versiosnummer" msgid "Bad UIConstraints" msgstr "Ungültige UIConstraints" msgid "Bad arguments to function" msgstr "Ungültige Argumente für Funktion" #, c-format msgid "Bad copies value %d." msgstr "Ungültige Angabe der Anzahl der Kopien %d." msgid "Bad custom parameter" msgstr "Ungültiger angepasster Parameter" #, c-format msgid "Bad device-uri \"%s\"." msgstr "Ungültige Geräte-URI\"%s\"." #, c-format msgid "Bad device-uri scheme \"%s\"." msgstr "Ungültiges Geräte-URI Schema \"%s\"." #, c-format msgid "Bad document-format \"%s\"." msgstr "Ungültiges Dokumentenformat \"%s\"." #, c-format msgid "Bad document-format-default \"%s\"." msgstr "Ungültiges voreingestelltes Dokumentenformat \"%s\"." msgid "Bad filename buffer" msgstr "Ungültiger Dateinamepuffer" msgid "Bad hostname/address in URI" msgstr "Ungültiger Hostname/Adresse in URI" #, c-format msgid "Bad job-name value: %s" msgstr "Ungültiger Auftragsname: %s" msgid "Bad job-name value: Wrong type or count." msgstr "Ungültiger Auftragsname: Falscher Typ oder Anzahl." msgid "Bad job-priority value." msgstr "Ungültiger Wert für Auftragspriorität." #, c-format msgid "Bad job-sheets value \"%s\"." msgstr "Ungültiger Wert für job-sheets \"%s\"." msgid "Bad job-sheets value type." msgstr "Ungültiger Werttyp für job-sheets." msgid "Bad job-state value." msgstr "Ungültiger Wert des Auftragsstatus." #, c-format msgid "Bad job-uri \"%s\"." msgstr "Ungültige Auftrags-URI\"%s\"." #, c-format msgid "Bad notify-pull-method \"%s\"." msgstr "Ungültige notify-pull-method \"%s\"." #, c-format msgid "Bad notify-recipient-uri \"%s\"." msgstr "Ungültige notify-recipient-uri \"%s\"." #, c-format msgid "Bad number-up value %d." msgstr "Ungültiger number-up-Wert %d." #, c-format msgid "Bad option + choice on line %d." msgstr "Ungültige Option + Wahl in Zeile %d" #, c-format msgid "Bad page-ranges values %d-%d." msgstr "Ungültige Seitenbereichswerte %d-%d." msgid "Bad port number in URI" msgstr "Ungültige Port-Nummer in URI" #, c-format msgid "Bad port-monitor \"%s\"." msgstr "Ungültiger port-monitor \"%s\"." #, c-format msgid "Bad printer-state value %d." msgstr "Ungültiger printer-port Wert %d." msgid "Bad printer-uri." msgstr "Ungültige Drucker-uri" #, c-format msgid "Bad request ID %d." msgstr "Ungültige Anfrage-ID %d." #, c-format msgid "Bad request version number %d.%d." msgstr "Ungültige Versionsnummernanfrage %d.%d." #, c-format msgid "Bad requesting-user-name value: %s" msgstr "" msgid "Bad resource in URI" msgstr "Ungültige Resource in URI" msgid "Bad scheme in URI" msgstr "Ungültiges Scheman in URI" msgid "Bad subscription ID" msgstr "Ungültige Subskriptions-ID" msgid "Bad username in URI" msgstr "Ungültiger Benutzername in URI" msgid "Bad value string" msgstr "Ungültiger Zeichenkette" msgid "Bad/empty URI" msgstr "Ungültige/leere URI" msgid "Bale" msgstr "" msgid "Banners" msgstr "Banner" msgid "Bind" msgstr "" msgid "Bind (Landscape)" msgstr "" msgid "Bind (Portrait)" msgstr "" msgid "Bind (Reverse Landscape)" msgstr "" msgid "Bind (Reverse Portrait)" msgstr "" msgid "Bond Envelope" msgstr "" msgid "Bond Paper" msgstr "Papier bündeln" msgid "Booklet" msgstr "" msgid "Booklet Maker" msgstr "" #, c-format msgid "Boolean expected for waiteof option \"%s\"." msgstr "Boolesch erwartet für waitof Option \"%s\"." msgid "Bottom" msgstr "" msgid "Bottom Tray" msgstr "" msgid "Buffer overflow detected, aborting." msgstr "Pufferüberlauf festgestellt, Abbruch." msgid "CD" msgstr "" msgid "CMYK" msgstr "CMYK" msgid "CPCL Label Printer" msgstr "CPCL Etikettendrucker" msgid "Cancel Jobs" msgstr "Druckaufträge abbrechen" msgid "Cancel RSS Subscription" msgstr "RSS-Abo widerrufen" msgid "Canceling print job." msgstr "Auftrag wird abgebrochen." msgid "Cannot change printer-is-shared for remote queues." msgstr "" msgid "Cannot share a remote Kerberized printer." msgstr "Freigabe eines entfernten kerberisierten Druckers nicht möglich" msgid "Cardboard" msgstr "" msgid "Cardstock" msgstr "" msgid "Cassette" msgstr "Kassette" msgid "Center" msgstr "" msgid "Center Tray" msgstr "" msgid "Change Settings" msgstr "Einstellungen ändern" #, c-format msgid "Character set \"%s\" not supported." msgstr "Zeichensatz \"%s\" nicht unterstützt." msgid "Classes" msgstr "Klassen" msgid "Clean Print Heads" msgstr "Saubere Druckköpfe" msgid "Close-Job doesn't support the job-uri attribute." msgstr "Close-Job unterstützt keine job-uri Attribute." msgid "Coat" msgstr "" msgid "Coated Envelope" msgstr "Beschichteter Umschlag" msgid "Coated Paper" msgstr "Beschichtetes Papier" msgid "Color" msgstr "Farbe" msgid "Color Mode" msgstr "Farbmodus" msgid "Colored Labels" msgstr "" msgid "" "Commands may be abbreviated. Commands are:\n" "\n" "exit help quit status ?" msgstr "" "Befehle können abgekürzt werden. Befehle sind:\n" "\n" "exit help quit status ?" msgid "Community name uses indefinite length" msgstr "Community-Name hat unbestimmte Länge" msgid "Connected to printer." msgstr "Verbunden zum Drucker." msgid "Connecting to printer." msgstr "Verbinde zum Drucker." msgid "Continue" msgstr "Weiter" msgid "Continuous" msgstr "Kontinuierlich" msgid "Continuous Long" msgstr "" msgid "Continuous Short" msgstr "" msgid "Control file sent successfully." msgstr "Steuerdatei erfolgreich gesendet." msgid "Copying print data." msgstr "Kopiere Druckdaten." msgid "Cotton Envelope" msgstr "" msgid "Cotton Paper" msgstr "" msgid "Cover" msgstr "" msgid "Created" msgstr "Erstellt" msgid "Credentials do not validate against site CA certificate." msgstr "" msgid "Credentials have expired." msgstr "Berechtigung ist abgelaufen" msgid "Custom" msgstr "Eigene" msgid "CustominCutInterval" msgstr "CustominCutInterval" msgid "CustominTearInterval" msgstr "CustominTearInterval" msgid "Cut" msgstr "Abschneiden" msgid "Cut Media" msgstr "" msgid "Cutter" msgstr "Abschneider" msgid "DVD" msgstr "DVD" msgid "Dark" msgstr "Dunkel" msgid "Darkness" msgstr "Dunkelheit" msgid "Data file sent successfully." msgstr "Datendatei erfolgreich gesendet." msgid "Deep Color" msgstr "" msgid "Delete Class" msgstr "Klasse löschen" msgid "Delete Printer" msgstr "Drucker löschen" msgid "DeskJet Series" msgstr "DeskJet Serie" #, c-format msgid "Destination \"%s\" is not accepting jobs." msgstr "Ziel „%s“ akzeptiert keine Druckaufträge." #, c-format msgid "" "Device: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s" msgstr "" msgid "Direct Thermal Media" msgstr "Direct Thermotransfermedia" #, c-format msgid "Directory \"%s\" contains a relative path." msgstr "Verzeichnis \"%s\" enthält einen relativen Pfad." #, c-format msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "Verzeichnis \"%s\" hat unsichere Rechte (0%o/uid=%d/gid=%d)." #, c-format msgid "Directory \"%s\" is a file." msgstr "Verzeichnis \"%s\" ist eine Datei." #, c-format msgid "Directory \"%s\" not available: %s" msgstr "Verzeichnis \"%s\" nicht vorhanden: %s" #, c-format msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "Verzeichnisrechte \"%s\" OK (0%o/uid=%d/gid=%d)." msgid "Disabled" msgstr "Deaktiviert" msgid "Disc" msgstr "" #, c-format msgid "Document #%d does not exist in job #%d." msgstr "Dokument #%d existiert in Auftrag #%d nicht." msgid "Double Gate Fold" msgstr "" msgid "Double Staple (Landscape)" msgstr "" msgid "Double Staple (Portrait)" msgstr "" msgid "Double Staple (Reverse Landscape)" msgstr "" msgid "Double Staple (Reverse Portrait)" msgstr "" msgid "Double Wall Cardboard" msgstr "" msgid "Draft" msgstr "Entwurf" msgid "Dry Film" msgstr "" msgid "Duplexer" msgstr "Duplexer" msgid "Dymo" msgstr "Dymo" msgid "EPL1 Label Printer" msgstr "EPL1 Etikettendrucker" msgid "EPL2 Label Printer" msgstr "EPL2 Etikettendrucker" msgid "Edit Configuration File" msgstr "Konfigurationsdatei bearbeiten" msgid "Embossing Foil" msgstr "" msgid "Empty PPD file." msgstr "Leere PPD Datei." msgid "Encryption is not supported." msgstr "Verschlüsselung ist nicht unterstüzt." msgid "End Board" msgstr "" #. TRANSLATORS: Banner/cover sheet after the print job. msgid "Ending Banner" msgstr "Banner beenden" msgid "Engineering Z Fold" msgstr "" msgid "English" msgstr "German" msgid "" "Enter your username and password or the root username and password to access " "this page. If you are using Kerberos authentication, make sure you have a " "valid Kerberos ticket." msgstr "" "Geben Sie Ihren Benutzernamen und das Kennwort oder den root-Benutzernamen " "und -Kennwort ein, um auf diese Seite zuzgreifen. Falls Sie die Kerberos-" "Authentifizierung verwenden, stellen Sie sicher, dass Sie ein gültiges " "Kerberos-Ticket haben." msgid "Envelope" msgstr "Umschlag" msgid "Envelope #10" msgstr "US Umschlag 10" msgid "Envelope #11" msgstr "US Umschlag 11" msgid "Envelope #12" msgstr "US Umschlag 12" msgid "Envelope #14" msgstr "US Umschlag 14" msgid "Envelope #9" msgstr "US Umschlag 9" msgid "Envelope B4" msgstr "Umschlag B4" msgid "Envelope B5" msgstr "Umschlag B5" msgid "Envelope B6" msgstr "Umschlag B6" msgid "Envelope C0" msgstr "Umschlag C0" msgid "Envelope C1" msgstr "Umschlag C1" msgid "Envelope C2" msgstr "Umschlag C2" msgid "Envelope C3" msgstr "Umschlag C3" msgid "Envelope C4" msgstr "Umschlag C4" msgid "Envelope C5" msgstr "Umschlag C5" msgid "Envelope C6" msgstr "Umschlag C6" msgid "Envelope C65" msgstr "Umschlag C65" msgid "Envelope C7" msgstr "Umschlag C7" msgid "Envelope Choukei 3" msgstr "" msgid "Envelope Choukei 3 Long Edge" msgstr "" msgid "Envelope Choukei 4" msgstr "" msgid "Envelope Choukei 4 Long Edge" msgstr "" msgid "Envelope DL" msgstr "Umschlag DL" msgid "Envelope Feed" msgstr "Umschlagzuführung" msgid "Envelope Invite" msgstr "" msgid "Envelope Italian" msgstr "Umschlag italienisch" msgid "Envelope Kaku2" msgstr "" msgid "Envelope Kaku2 Long Edge" msgstr "" msgid "Envelope Kaku3" msgstr "" msgid "Envelope Kaku3 Long Edge" msgstr "" msgid "Envelope Monarch" msgstr "" msgid "Envelope PRC1" msgstr "" msgid "Envelope PRC1 Long Edge" msgstr "" msgid "Envelope PRC10" msgstr "" msgid "Envelope PRC10 Long Edge" msgstr "" msgid "Envelope PRC2" msgstr "" msgid "Envelope PRC2 Long Edge" msgstr "" msgid "Envelope PRC3" msgstr "" msgid "Envelope PRC3 Long Edge" msgstr "" msgid "Envelope PRC4" msgstr "" msgid "Envelope PRC4 Long Edge" msgstr "" msgid "Envelope PRC5 Long Edge" msgstr "" msgid "Envelope PRC5PRC5" msgstr "" msgid "Envelope PRC6" msgstr "" msgid "Envelope PRC6 Long Edge" msgstr "" msgid "Envelope PRC7" msgstr "" msgid "Envelope PRC7 Long Edge" msgstr "" msgid "Envelope PRC8" msgstr "" msgid "Envelope PRC8 Long Edge" msgstr "" msgid "Envelope PRC9" msgstr "" msgid "Envelope PRC9 Long Edge" msgstr "" msgid "Envelope Personal" msgstr "" msgid "Envelope You4" msgstr "" msgid "Envelope You4 Long Edge" msgstr "" msgid "Environment Variables:" msgstr "Umgebungsvariablen:" msgid "Epson" msgstr "Epson" msgid "Error Policy" msgstr "Fehlerbehandlung" msgid "Error reading raster data." msgstr "Fehler beim Lesen der Rasterdaten." msgid "Error sending raster data." msgstr "Fehler beim Senden von Rasterdaten." msgid "Error: need hostname after \"-h\" option." msgstr "Fehler: Hostname ist nach der \"-h\" Option erforderlich." msgid "European Fanfold" msgstr "" msgid "European Fanfold Legal" msgstr "" msgid "Every 10 Labels" msgstr "Alle 10 Etiketten" msgid "Every 2 Labels" msgstr "Alle 2 Etiketten" msgid "Every 3 Labels" msgstr "Alle 3 Etiketten" msgid "Every 4 Labels" msgstr "Alle 4 Etiketten" msgid "Every 5 Labels" msgstr "Alle 5 Etiketten" msgid "Every 6 Labels" msgstr "Alle 6 Etiketten" msgid "Every 7 Labels" msgstr "Alle 7 Etiketten" msgid "Every 8 Labels" msgstr "Alle 8 Etiketten" msgid "Every 9 Labels" msgstr "Alle 9 Etiketten" msgid "Every Label" msgstr "Bei jedem Etikett" msgid "Everyday Glossy Photo Paper" msgstr "" msgid "Everyday Matte Paper" msgstr "" msgid "Executive" msgstr "" msgid "Expectation Failed" msgstr "Erwartete Daten nicht erhalten" msgid "Export Printers to Samba" msgstr "Drucker zu Samba exportieren" msgid "Expressions:" msgstr "Ausdrücke:" msgid "Extra Heavyweight Paper" msgstr "" msgid "FAIL" msgstr "FEHLER" msgid "Fabric" msgstr "" msgid "Face Down" msgstr "" msgid "Face Up" msgstr "" msgid "Fast Grayscale" msgstr "" #, c-format msgid "File \"%s\" contains a relative path." msgstr "Datei \"%s\" enthält einen relativen Pfad." #, c-format msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "Datei \"%s\" hat unsichere Rechte (0%o/uid=%d/gid=%d)." #, c-format msgid "File \"%s\" is a directory." msgstr "Datei \"%s\" ist ein Verzeichnis." #, c-format msgid "File \"%s\" not available: %s" msgstr "Datei \"%s\" nicht verfügbar: %s" #, c-format msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "Dateirechte \"%s\" OK (0%o/uid=%d/gid=%d)." msgid "File Folder" msgstr "Dateiverzeichnis" #, c-format msgid "" "File device URIs have been disabled. To enable, see the FileDevice directive " "in \"%s/cups-files.conf\"." msgstr "" msgid "Film" msgstr "Film" msgid "Fine Envelope" msgstr "" #, c-format msgid "Finished page %d." msgstr "Seite %d fertiggestellt." msgid "Flexo Base" msgstr "" msgid "Flexo Photo Polymer" msgstr "" msgid "Flute" msgstr "" msgid "Foil" msgstr "" msgid "Fold" msgstr "" msgid "Folio" msgstr "Folio" msgid "Forbidden" msgstr "Verboten" msgid "Found" msgstr "" msgid "Full Cut Tabs" msgstr "" msgid "Gate Fold" msgstr "" msgid "General" msgstr "Allgemein" msgid "Generic" msgstr "Allgemein" msgid "Get-Response-PDU uses indefinite length" msgstr "Get-Response-PDU hat unbestimmte Länge" msgid "Glass" msgstr "" msgid "Glass Colored" msgstr "" msgid "Glass Opaque" msgstr "" msgid "Glass Surfaced" msgstr "" msgid "Glass Textured" msgstr "" msgid "Glossy Brochure Paper" msgstr "" msgid "Glossy Fabric" msgstr "" msgid "Glossy Labels" msgstr "" msgid "Glossy Optical Disc" msgstr "" msgid "Glossy Paper" msgstr "Glanzpapier" msgid "Glossy Photo Paper" msgstr "Fotoglanzpapier" msgid "Got a printer-uri attribute but no job-id." msgstr "Drucker-URI Attribut empfangen aber keine Auftrags-ID." msgid "Gravure Cylinder" msgstr "" msgid "Grayscale" msgstr "Graustufen" msgid "HP" msgstr "HP" msgid "Hagaki" msgstr "" msgid "Half Fold" msgstr "" msgid "Half Z Fold" msgstr "" msgid "Hanging Folder" msgstr "Hängeordner" msgid "Hash buffer too small." msgstr "Hash Puffer zu klein." msgid "Heavyweight Coated Paper" msgstr "" msgid "Heavyweight Envelope" msgstr "Schwerer Umschlag" msgid "Heavyweight Paper" msgstr "Schweres Papier" msgid "Help file not in index." msgstr "Hilfedatei nicht im Index." msgid "High" msgstr "Hoch" msgid "High Gloss Fabric" msgstr "" msgid "High Gloss Labels" msgstr "Hochglanzetiketten" msgid "High Gloss Optical Disc" msgstr "" msgid "High Gloss Photo Paper" msgstr "Hochglanzfotopapier" msgid "IPP 1setOf attribute with incompatible value tags." msgstr "IPP 1setOf Attribut mit inkompatiblen Werte-Markierung." msgid "IPP attribute has no name." msgstr "IPP Attribut hat keinen Namen." msgid "IPP attribute is not a member of the message." msgstr "" msgid "IPP begCollection value not 0 bytes." msgstr "" msgid "IPP boolean value not 1 byte." msgstr "" msgid "IPP date value not 11 bytes." msgstr "IPP-Datenwert nicht 11 Bytes." msgid "IPP endCollection value not 0 bytes." msgstr "" msgid "IPP enum value not 4 bytes." msgstr "" msgid "IPP extension tag larger than 0x7FFFFFFF." msgstr "" msgid "IPP integer value not 4 bytes." msgstr "IPP Integer-Wert nicht 4 Bytes." msgid "IPP language length overflows value." msgstr "IPP Sprachlänge übersteigt Wert." msgid "IPP language length too large." msgstr "IPP-Sprachlänge zu groß." msgid "IPP member name is not empty." msgstr "" msgid "IPP memberName value is empty." msgstr "" msgid "IPP memberName with no attribute." msgstr "" msgid "IPP name larger than 32767 bytes." msgstr "IPP Name länger als 32767 Byte" msgid "IPP nameWithLanguage value less than minimum 4 bytes." msgstr "" msgid "IPP octetString length too large." msgstr "" msgid "IPP rangeOfInteger value not 8 bytes." msgstr "" msgid "IPP resolution value not 9 bytes." msgstr "" msgid "IPP string length overflows value." msgstr "" msgid "IPP textWithLanguage value less than minimum 4 bytes." msgstr "" msgid "IPP value larger than 32767 bytes." msgstr "IPP-Wert länger als 32767 Bytes." msgid "ISOLatin1" msgstr "ISOLatin1" msgid "Illegal control character" msgstr "Ungültiges Steuerungszeichen" msgid "Illegal main keyword string" msgstr "Ungültiger Main-Keyword-String" msgid "Illegal option keyword string" msgstr "Ungültiger Option-Keyword-String" msgid "Illegal translation string" msgstr "Ungültiger Übersetzungsstring" msgid "Illegal whitespace character" msgstr "Ungültiges Leerzeichen" msgid "Image Setter Paper" msgstr "" msgid "Imaging Cylinder" msgstr "" msgid "Inkjet Envelope" msgstr "Tintenstrahl-Umschäge" msgid "Inkjet Labels" msgstr "Tintenstrahl-Etiketten" msgid "Inkjet Paper" msgstr "" msgid "Installable Options" msgstr "Installationsoptionen" msgid "Installed" msgstr "Installiert" msgid "IntelliBar Label Printer" msgstr "IntelliBar Etikettendrucker" msgid "Intellitech" msgstr "Intellitech" msgid "Internal Server Error" msgstr "Interner Serverfehler" msgid "Internal error" msgstr "Interner Fehler" msgid "Internet Postage 2-Part" msgstr "Internet Postage 2-teilig" msgid "Internet Postage 3-Part" msgstr "Internet Postage 3-teilig" msgid "Internet Printing Protocol" msgstr "Internet Printing Protocol" msgid "Invalid media name arguments." msgstr "Ungültige Argumente des Mediennamens." msgid "Invalid media size." msgstr "Ungültige Mediengrösse." msgid "Invalid ppd-name value." msgstr "Ungültgier Wert ppd-name" #, c-format msgid "Invalid printer command \"%s\"." msgstr "Ungültiges Druckkommando \"%s\"." msgid "JCL" msgstr "JCL" msgid "JIS B0" msgstr "" msgid "JIS B1" msgstr "" msgid "JIS B10" msgstr "" msgid "JIS B2" msgstr "" msgid "JIS B3" msgstr "" msgid "JIS B4" msgstr "" msgid "JIS B4 Long Edge" msgstr "" msgid "JIS B5" msgstr "" msgid "JIS B5 Long Edge" msgstr "" msgid "JIS B6" msgstr "" msgid "JIS B6 Long Edge" msgstr "" msgid "JIS B7" msgstr "" msgid "JIS B8" msgstr "" msgid "JIS B9" msgstr "" #, c-format msgid "Job #%d cannot be restarted - no files." msgstr "Auftrag #%d kann nicht wieder gestartet werden - keine Dateien." #, c-format msgid "Job #%d does not exist." msgstr "Auftrag #%d existiert nicht." #, c-format msgid "Job #%d is already aborted - can't cancel." msgstr "Druckauftrag Nr. %d wurde bereits abgebrochen – Abbruch nicht möglich." #, c-format msgid "Job #%d is already canceled - can't cancel." msgstr "Druckauftrag Nr. %d wurde bereits abgebrochen – Abbruch nicht möglich." #, c-format msgid "Job #%d is already completed - can't cancel." msgstr "" "Druckauftrag Nr. %d wurde bereits abgeschlossen – Abbruch nicht möglich." #, c-format msgid "Job #%d is finished and cannot be altered." msgstr "Auftrag #%d ist abgeschlossen und kann nicht mehr geändert werden." #, c-format msgid "Job #%d is not complete." msgstr "Auftrag #%d ist nicht abgeschlossen." #, c-format msgid "Job #%d is not held for authentication." msgstr "Auftrag #%d ist nicht zur Authentifizierung angehalten." #, c-format msgid "Job #%d is not held." msgstr "Auftrag #%d ist nicht angehalten." msgid "Job Completed" msgstr "Druckauftrag abgeschlossen" msgid "Job Created" msgstr "Druckauftrag erzeugt" msgid "Job Options Changed" msgstr "Druckauftragsoptionen wurden geändert" msgid "Job Stopped" msgstr "Druckauftrag gestoppt" msgid "Job is completed and cannot be changed." msgstr "Druckauftrag ist abgeschlossen und kann nicht geändert werden." msgid "Job operation failed" msgstr "Druckvorgang fehlgeschlagen:" msgid "Job state cannot be changed." msgstr "Druckauftragsstatus kann nicht geändert werden." msgid "Job subscriptions cannot be renewed." msgstr "Auftragssubskiptionen können nicht erneuert werden." msgid "Jobs" msgstr "Druckaufträge" msgid "Jog" msgstr "" msgid "LPD/LPR Host or Printer" msgstr "LPD/LPR-Host oder -Drucker" msgid "Label Printer" msgstr "Etikettendrucker" msgid "Label Top" msgstr "Etikett oben" msgid "Labels" msgstr "Etiketten" msgid "Laminate" msgstr "Laminieren" msgid "Laminating Foil" msgstr "Laminierfolie" #, c-format msgid "Language \"%s\" not supported." msgstr "Sprache \"%s\" nicht unterstützt." msgid "Large Address" msgstr "Große Adresse" msgid "Large Capacity" msgstr "Hohe Kapazität" msgid "Large Capacity Tray" msgstr "" msgid "LaserJet Series PCL 4/5" msgstr "LaserJet Serie PCL 4/5" msgid "Left" msgstr "Links" msgid "Left Gate Fold" msgstr "" msgid "Left Tray" msgstr "" msgid "Letter Fold" msgstr "" msgid "Letter Oversize" msgstr "Letter Übergröße" msgid "Letter Oversize Long Edge" msgstr "" msgid "Letterhead" msgstr "Briefkopf" msgid "Light" msgstr "Leicht" msgid "Lightweight Envelope" msgstr "" msgid "Lightweight Paper" msgstr "" msgid "Line longer than the maximum allowed (255 characters)" msgstr "Zeile ist länger als die zulässige Länge von 255 Zeichen" msgid "List Available Printers" msgstr "Verfügbare Drucker anzeigen" msgid "Load paper." msgstr "Lade Papier." msgid "Local printer created." msgstr "Lokalen Drucker erzeugt." msgid "Long-Edge (Portrait)" msgstr "Lange Kante (Hochformat)" msgid "Looking for printer." msgstr "Suche nach Drucker." msgid "Mailbox 1" msgstr "" msgid "Mailbox 10" msgstr "" msgid "Mailbox 2" msgstr "" msgid "Mailbox 3" msgstr "" msgid "Mailbox 4" msgstr "" msgid "Mailbox 5" msgstr "" msgid "Mailbox 6" msgstr "" msgid "Mailbox 7" msgstr "" msgid "Mailbox 8" msgstr "" msgid "Mailbox 9" msgstr "" msgid "Main" msgstr "" msgid "Main Roll" msgstr "" msgid "Manual" msgstr "" msgid "Manual Feed" msgstr "Manuelle Papierzufuhr" msgid "Matte Brochure Paper" msgstr "" msgid "Matte Cover Paper" msgstr "" msgid "Matte Fabric" msgstr "" msgid "Matte Labels" msgstr "" msgid "Matte Optical Disc" msgstr "" msgid "Matte Photo Paper" msgstr "" msgid "Media Size" msgstr "Mediengrösse" msgid "Media Source" msgstr "Medienquelle" msgid "Media Tracking" msgstr "Medienführung" msgid "Media Type" msgstr "Medienart" msgid "Medium" msgstr "Medium" msgid "Memory allocation error" msgstr "Fehler bei der Speicherzuteilung" msgid "Metal" msgstr "" msgid "Metal Glossy" msgstr "" msgid "Metal High Gloss" msgstr "" msgid "Metal Matte" msgstr "" msgid "Metal Satin" msgstr "" msgid "Metal Semi Gloss" msgstr "" msgid "Mid-Weight Paper" msgstr "" msgid "Middle" msgstr "" msgid "Missing CloseGroup" msgstr "Fehlendes CloseGroup" msgid "Missing PPD-Adobe-4.x header" msgstr "PPD-Adobe-4.x Header fehlt" msgid "Missing asterisk in column 1" msgstr "Sternchen in Spalte 1 fehlt" msgid "Missing document-number attribute." msgstr "Fehlendes Attribut zur Dokumentennummer." #, c-format msgid "Missing double quote on line %d." msgstr "Fehlende Doppelhochkommas in Zeile %d." msgid "Missing form variable" msgstr "Fehlende form Variable" msgid "Missing last-document attribute in request." msgstr "Fehlendes Letzte-Sete Attribut in der Anfrage." msgid "Missing media or media-col." msgstr "" msgid "Missing media-size in media-col." msgstr "" msgid "Missing notify-subscription-ids attribute." msgstr "" msgid "Missing option keyword" msgstr "Fehlende Option Schlüsselwort" msgid "Missing requesting-user-name attribute." msgstr "" #, c-format msgid "Missing required attribute \"%s\"." msgstr "Erforderliches Attribut \"%s\" fehlt." msgid "Missing required attributes." msgstr "Erforderliche Attribute fehlen." msgid "Missing resource in URI" msgstr "Fehlende Resource in URI" msgid "Missing scheme in URI" msgstr "Fehlendes Schema in URI" #, c-format msgid "Missing value on line %d." msgstr "Fehlender Wert in Zeile %d." msgid "Missing value string" msgstr "Wertestring fehlt" msgid "Missing x-dimension in media-size." msgstr "Fehlende x-Dimension in Mediengrösse" msgid "Missing y-dimension in media-size." msgstr "Fehlende y-Dimension in Mediengrösse" #, c-format msgid "" "Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgstr "" msgid "Modifiers:" msgstr "Modifikator:" msgid "Modify Class" msgstr "Klasse verändern" msgid "Modify Printer" msgstr "Drucker verändern" msgid "Mounting Tape" msgstr "" msgid "Move All Jobs" msgstr "Alle Druckaufträge verschieben" msgid "Move Job" msgstr "Druckauftrag verschieben" msgid "Moved Permanently" msgstr "Dauerhaft verschoben" msgid "Multi Layer" msgstr "" msgid "Multi Part Form" msgstr "" msgid "Multi-Hole Punch (Landscape)" msgstr "" msgid "Multi-Hole Punch (Portrait)" msgstr "" msgid "Multi-Hole Punch (Reverse Landscape)" msgstr "" msgid "Multi-Hole Punch (Reverse Portrait)" msgstr "" msgid "Multipurpose" msgstr "Mehrzweck" msgid "Multipurpose Paper" msgstr "" msgid "My Mailbox" msgstr "" msgid "NULL PPD file pointer" msgstr "NULL PPD File Pointer" msgid "Name OID uses indefinite length" msgstr "Name-OID hat unbestimmte Länge" msgid "Nested classes are not allowed." msgstr "Geschachtelte Klassen sind nicht erlaubt." msgid "Never" msgstr "Nie" msgid "New credentials are not valid for name." msgstr "" msgid "New credentials are older than stored credentials." msgstr "" msgid "No" msgstr "Nein" msgid "No Content" msgstr "Kein Inhalt" msgid "No IPP attributes." msgstr "" msgid "No PPD name" msgstr "Kein PPD Name" msgid "No VarBind SEQUENCE" msgstr "Keine VarBind SEQUENCE" msgid "No Windows printer drivers are installed." msgstr "Keine Windows-Druckertreiber installiert." msgid "No active connection" msgstr "Keine aktive Verbindung" msgid "No active connection." msgstr "Keine aktive Verbindung." #, c-format msgid "No active jobs on %s." msgstr "Keine aktiven Aufträge auf %s." msgid "No attributes in request." msgstr "Keine Attribute in der Anfrage." msgid "No authentication information provided." msgstr "Keine Authentifizierungsinformation bereitgestellt." msgid "No common name specified." msgstr "" msgid "No community name" msgstr "Kein Community-Name" msgid "No default printer." msgstr "Kein voreingestelltes Druckziel" msgid "No destinations added." msgstr "Keine Druckziele hinzugefügt." msgid "No device URI found in argv[0] or in DEVICE_URI environment variable." msgstr "" "Keine Geräte-URI in argv[0] oder der Umgebungsvariablen DEVICE_URI gefunden." msgid "No error-index" msgstr "Kein Fehlerindex" msgid "No error-status" msgstr "Kein Fehlerstatus" msgid "No file in print request." msgstr "Keine Druckdatei in der Anfrage." msgid "No modification time" msgstr "Keine Modifikationszeit" msgid "No name OID" msgstr "Kein Name-OID" msgid "No pages were found." msgstr "Keine Seiten gefunden." msgid "No printer name" msgstr "Kein Druckername" msgid "No printer-uri found" msgstr "Keine Drucker-uri gefunden" msgid "No printer-uri found for class" msgstr "Keine Drucker-URI gefunden für die Klasse" msgid "No printer-uri in request." msgstr "" msgid "No request URI." msgstr "" msgid "No request protocol version." msgstr "" msgid "No request sent." msgstr "Keine Anfrage gesendet." msgid "No request-id" msgstr "Keine Anfrage-ID" msgid "No stored credentials, not valid for name." msgstr "" msgid "No subscription attributes in request." msgstr "Keine Subskriptions-Attribute in der Anfrage." msgid "No subscriptions found." msgstr "Keine Subskriptionen gefunden." msgid "No variable-bindings SEQUENCE" msgstr "Keine „variable-bindings SEQUENCE“" msgid "No version number" msgstr "Keine Versionsnummer" msgid "Non-continuous (Mark sensing)" msgstr "Nicht fortlaufend (Mark-Sensing)" msgid "Non-continuous (Web sensing)" msgstr "Nicht fortlaufend (Web-Sensing)" msgid "None" msgstr "" msgid "Normal" msgstr "Normal" msgid "Not Found" msgstr "Nicht gefunden" msgid "Not Implemented" msgstr "Nicht implementiert" msgid "Not Installed" msgstr "Nicht installiert" msgid "Not Modified" msgstr "Nicht verändert" msgid "Not Supported" msgstr "Nicht unterstützt" msgid "Not allowed to print." msgstr "Drucken nicht erlaubt." msgid "Note" msgstr "Hinweis" msgid "" "Note: this program only validates the DSC comments, not the PostScript " "itself." msgstr "" "Hinweis: dieses Programme validiert nur die DSC Kommentare, nicht PostScript " "selber" msgid "OK" msgstr "OK" msgid "Off (1-Sided)" msgstr "Aus (Einseitig)" msgid "Office Recycled Paper" msgstr "" msgid "Oki" msgstr "Oki" msgid "Online Help" msgstr "Online-Hilfe" msgid "Only local users can create a local printer." msgstr "Nur lokale Benutzer können lokale Drucker erzeugen." #, c-format msgid "Open of %s failed: %s" msgstr "%s öffnen fehlgeschlagen: %s" msgid "OpenGroup without a CloseGroup first" msgstr "OpenGroup ohne CloseGroup zuerst" msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" msgstr "OpenUI/JCLOpenUI ohne CloseUI/JCLCloseUI zuerst" msgid "Operation Policy" msgstr "Nutzungsrichtlinien" msgid "Optical Disc" msgstr "Optische Disk" #, c-format msgid "Option \"%s\" cannot be included via %%%%IncludeFeature." msgstr "" msgid "Options Installed" msgstr "Installierte Optionen" msgid "Options:" msgstr "Optionen:" msgid "Other" msgstr "" msgid "Out of date PPD cache file." msgstr "Veraltete PPD Cache-Datei." msgid "Out of memory." msgstr "Nicht genügend Hauptspeicher." msgid "Output Mode" msgstr "Ausgabemodus" msgid "Output bin is almost full." msgstr "Ausgabefach ist fast voll." msgid "Output bin is full." msgstr "Ausgabefach ist voll." msgid "Output bin is missing." msgstr "Ausgabefach fehlt." msgid "PASS" msgstr "Bestanden" msgid "PCL Laser Printer" msgstr "PCL Laserdrucker" msgid "PRC16K" msgstr "PRC16K" msgid "PRC16K Long Edge" msgstr "PRC16K lange Kante" msgid "PRC32K" msgstr "PRC32K" msgid "PRC32K Long Edge" msgstr "PRC32K lange Kante" msgid "PRC32K Oversize" msgstr "PRCK32K Übergrösse" msgid "PRC32K Oversize Long Edge" msgstr "PRCK32K Übergrösse lange Kante" msgid "Packet does not contain a Get-Response-PDU" msgstr "Paket enthält kein Get-Response-PDU" msgid "Packet does not start with SEQUENCE" msgstr "Paket beginnt nicht mit SEQUENCE" msgid "Paper" msgstr "Papier" msgid "Paper jam." msgstr "Papierstau." msgid "Paper tray is almost empty." msgstr "Papierfach ist fast leer." msgid "Paper tray is empty." msgstr "Papierfach ist leer." msgid "Paper tray is missing." msgstr "Papierfach ist nicht vorhanden." msgid "Parallel Fold" msgstr "" msgid "ParamCustominCutInterval" msgstr "ParamCustominCutInterval" msgid "ParamCustominTearInterval" msgstr "ParamCustominTearInterval" #, c-format msgid "Password for %s on %s? " msgstr "Kennwort für „%s“ auf „%s“? " #, c-format msgid "Password for %s required to access %s via SAMBA: " msgstr "Kennwort für „%s“ wird benötigt für den Zugriff auf „%s“ über SAMBA: " msgid "Pause Class" msgstr "Klasse anhalten" msgid "Pause Printer" msgstr "Drucker anhalten" msgid "Peel-Off" msgstr "Aufkleber" msgid "Permanent Labels" msgstr "Permanentetiketten" msgid "Photo" msgstr "Foto" msgid "Photo Film" msgstr "Fotofilm" msgid "Photo Labels" msgstr "Foto-Etiketten" msgid "Photo Paper" msgstr "Fotopapier" msgid "Photo Paper Plus Glossy II" msgstr "" msgid "Photo Paper Pro Platinum" msgstr "" msgid "Plain Envelope" msgstr "Standardumschläge" msgid "Plain Paper" msgstr "Standardpapier" msgid "Plastic" msgstr "Kunststoff" msgid "Plastic Archival" msgstr "" msgid "Plastic Colored" msgstr "" msgid "Plastic Glossy" msgstr "" msgid "Plastic High Gloss" msgstr "" msgid "Plastic Matte" msgstr "" msgid "Plastic Satin" msgstr "" msgid "Plastic Semi Gloss" msgstr "" msgid "Plate" msgstr "" msgid "Policies" msgstr "Richtlinien " msgid "Polyester" msgstr "Polyester" msgid "Port Monitor" msgstr "Port-Monitor" msgid "PostScript Printer" msgstr "PostScript-Drucker" msgid "Postcard" msgstr "Postkarte" msgid "Postcard Double" msgstr "" msgid "Postcard Double Long Edge" msgstr "" msgid "Postcard Long Edge" msgstr "" msgid "Poster Fold" msgstr "" msgid "Pre Cut Tabs" msgstr "" msgid "Premium Inkjet Paper" msgstr "" msgid "Premium Photo Glossy Paper" msgstr "" msgid "Premium Presentation Matte Paper" msgstr "" msgid "Preparing to print." msgstr "Vorbereitung zum Druck." msgid "Preprinted Envelope" msgstr "Vorbedruckte Umschläge" msgid "Preprinted Paper" msgstr "Vorbedrucktes Papier" msgid "Print Density" msgstr "Druckdichte" msgid "Print Job:" msgstr "Druckauftrag:" msgid "Print Mode" msgstr "Druckmodus" msgid "Print Quality" msgstr "Druckqualität" msgid "Print Rate" msgstr "Druckrate" msgid "Print Self-Test Page" msgstr "Selbsttestseite drucken" msgid "Print Speed" msgstr "Druckgeschwindigkeit" msgid "Print Test Page" msgstr "Testseite drucken" msgid "Print and Cut" msgstr "Drucken und abschneiden" msgid "Print and Tear" msgstr "Drucken und abreissen" msgid "Print file sent." msgstr "Druckdatei gesendet." msgid "Print job canceled at printer." msgstr "Druckauftrag wurde am Drucker abgebrochen." msgid "Print job too large." msgstr "Der Druckauftrag ist zu gross." msgid "Print job was not accepted." msgstr "Der Druckauftrag wurde nicht angenommen." #, c-format msgid "Printer \"%s\" already exists." msgstr "Drucker \"%s\" existiert bereits." msgid "Printer Added" msgstr "Drucker hinzugefügt" msgid "Printer Default" msgstr "Standardeinstellung für Drucker" msgid "Printer Deleted" msgstr "Drucker gelöscht" msgid "Printer Modified" msgstr "Drucker geändert" msgid "Printer Paused" msgstr "Drucker angehalten" msgid "Printer Settings" msgstr "Druckereinstellungen" msgid "Printer cannot print supplied content." msgstr "Drucker kann den Inhalt nicht drucken." msgid "Printer cannot print with supplied options." msgstr "Drucker kann mit den angegebenen Optionen nicht drucken." msgid "Printer does not support required IPP attributes or document formats." msgstr "" msgid "Printer:" msgstr "Drucker:" msgid "Printers" msgstr "Drucker" #, c-format msgid "Printing page %d, %u%% complete." msgstr "Drucke Seite %d, %u%% fertig." msgid "Punch" msgstr "Locher" msgid "Punched Paper" msgstr "Gelochtes Papier" msgid "Quarto" msgstr "US Quarto" msgid "Quota limit reached." msgstr "Kontingentgrenze erreicht." msgid "Rank Owner Job File(s) Total Size" msgstr "Rang Besitz. Auftrag Datei(en) Gesamtgrösse" msgid "Rear" msgstr "" msgid "Rear Tray" msgstr "" msgid "Reject Jobs" msgstr "Druckaufträge ablehnen" #, c-format msgid "Remote host did not accept control file (%d)." msgstr "Entfernter Host hat die Steuerdatei (%d) nicht akzeptiert." #, c-format msgid "Remote host did not accept data file (%d)." msgstr "Entfernter Host hat die Datendatei (%d) nicht akzeptiert." msgid "Reprint After Error" msgstr "Druckvorgang nach dem Fehler fortsetzen" msgid "Request Entity Too Large" msgstr "Gesamte Anfrage zu gross" msgid "Resolution" msgstr "Auflösung" msgid "Resume Class" msgstr "Klasse fortsetzen" msgid "Resume Printer" msgstr "Drucken fortsetzen" msgid "Return Address" msgstr "Antwort-Adresse" msgid "Rewind" msgstr "Zurückdrehen" msgid "Right" msgstr "Rechts" msgid "Right Gate Fold" msgstr "" msgid "Right Tray" msgstr "" msgid "Roll" msgstr "Rolle" msgid "Roll 1" msgstr "Rolle 1" msgid "Roll 10" msgstr "Rolle 10" msgid "Roll 2" msgstr "Rolle 2" msgid "Roll 3" msgstr "Rolle 3" msgid "Roll 4" msgstr "Rolle 4" msgid "Roll 5" msgstr "Rolle 5" msgid "Roll 6" msgstr "Rolle 6" msgid "Roll 7" msgstr "Rolle 7" msgid "Roll 8" msgstr "Rolle 8" msgid "Roll 9" msgstr "Rolle 9" #, c-format msgid "Running command: %s %s -N -A %s -c '%s'" msgstr "Befehlsausführung: %s %s -N -A %s -c '%s'" msgid "SEQUENCE uses indefinite length" msgstr "SEQUENCE hat unbestimmte Länge" msgid "SSL/TLS Negotiation Error" msgstr "SSL/TLS Verhandlungsfehler" msgid "Saddle Stitch" msgstr "" msgid "Satin Labels" msgstr "Satinetiketten" msgid "Satin Optical Disc" msgstr "" msgid "Satin Photo Paper" msgstr "" msgid "Screen" msgstr "" msgid "Screen Paged" msgstr "" msgid "Security Labels" msgstr "Sicherheitsetiketten" msgid "See Other" msgstr "Siehe auch" msgid "See remote printer." msgstr "" msgid "Self Adhesive" msgstr "Selbstklebend" msgid "Self Adhesive Film" msgstr "Selbstklebender Film" msgid "Self-signed credentials are blocked." msgstr "" msgid "Semi-Gloss Fabric" msgstr "" msgid "Semi-Gloss Labels" msgstr "" msgid "Semi-Gloss Optical Disc" msgstr "" msgid "Semi-Gloss Photo Paper" msgstr "" msgid "Sending data to printer." msgstr "Sende Daten zum Drucker." msgid "Server Restarted" msgstr "Server neu gestartet" msgid "Server Security Auditing" msgstr "Server Security Auditing" msgid "Server Started" msgstr "Server gestartet" msgid "Server Stopped" msgstr "Server ist angehalten" msgid "Server credentials not set." msgstr "Server-Zugangsdaten nicht gesetzt." msgid "Service Unavailable" msgstr "Dienst nicht verfügbar" msgid "Set Allowed Users" msgstr "Zugelassene Benutzer festlegen" msgid "Set As Server Default" msgstr "Als Voreinstellungen für Server festlegen" msgid "Set Class Options" msgstr "Klassenoptionen festlegen" msgid "Set Printer Options" msgstr "Druckeroptionen festlegen" msgid "Set Publishing" msgstr "Veröffentlichung festlegen" msgid "Shipping Address" msgstr "Lieferadresse" msgid "Short-Edge (Landscape)" msgstr "Kurze Kante (Querformat)" msgid "Shrink Foil" msgstr "" msgid "Side" msgstr "" msgid "Side Tray" msgstr "" msgid "Single Face" msgstr "" msgid "Single Punch (Landscape)" msgstr "Einfachlochung (Querformat)" msgid "Single Punch (Portrait)" msgstr "Einfachlochung (Hochformat)" msgid "Single Punch (Reverse Landscape)" msgstr "Einfachlochung (gedrehtes Querformat)" msgid "Single Punch (Reverse Portrait)" msgstr "Einfachlochung (gedrehtes Hochformat)" msgid "Single Staple (Landscape)" msgstr "Einfachheftung (Querformat)" msgid "Single Staple (Portrait)" msgstr "Einfachheftung (Hochformat)" msgid "Single Staple (Reverse Landscape)" msgstr "" msgid "Single Staple (Reverse Portrait)" msgstr "" msgid "Single Wall Cardboard" msgstr "" msgid "Sleeve" msgstr "" msgid "Special Paper" msgstr "Spezialpapier" #, c-format msgid "Spooling job, %.0f%% complete." msgstr "Auftragszwischenspeicherung %.0f%% abgeschlossen." msgid "Stacker 1" msgstr "" msgid "Stacker 10" msgstr "" msgid "Stacker 2" msgstr "" msgid "Stacker 3" msgstr "" msgid "Stacker 4" msgstr "" msgid "Stacker 5" msgstr "" msgid "Stacker 6" msgstr "" msgid "Stacker 7" msgstr "" msgid "Stacker 8" msgstr "" msgid "Stacker 9" msgstr "" msgid "Standard" msgstr "Standard" msgid "Staple" msgstr "Heftung" msgid "Staple Edge" msgstr "Randheftung" msgid "Staple Edge (Landscape)" msgstr "Randheftung (Querformat)" msgid "Staple Edge (Portrait)" msgstr "Randheftung (Hochformat)" msgid "Staple Edge (Reverse Landscape)" msgstr "Randheftung (gedrehtes Querformat)" msgid "Staple Edge (Reverse Portrait)" msgstr "Randheftung (gedrehtes Hochformat)" #. TRANSLATORS: Banner/cover sheet before the print job. msgid "Starting Banner" msgstr "Startbanner" #, c-format msgid "Starting page %d." msgstr "Beginne Seite %d." msgid "Statement" msgstr "US Statement" #, c-format msgid "Subscription #%d does not exist." msgstr "Abonnement #%d existiert nicht." msgid "Substitutions:" msgstr "Ersatz:" msgid "Super A" msgstr "Super A" msgid "Super B" msgstr "Super B" msgid "Super B/A3" msgstr "Super B/A3" msgid "Switching Protocols" msgstr "Protokolle wechseln" msgid "Tab Stock" msgstr "" msgid "Tabloid" msgstr "US Tabloid" msgid "Tabloid Oversize" msgstr "" msgid "Tabloid Oversize Long Edge" msgstr "" msgid "Tear" msgstr "Abreissen" msgid "Tear-Off" msgstr "Abriss" msgid "Tear-Off Adjust Position" msgstr "Abriss-Justierposition" #, c-format msgid "The \"%s\" attribute is required for print jobs." msgstr "Das Attribut »%s« ist erforderlich für Druckaufträge." #, c-format msgid "The %s attribute cannot be provided with job-ids." msgstr "Das %s Attribut kann nicht mit Auftrags-IDs angegeben werden." #, c-format msgid "" "The '%s' Job Status attribute cannot be supplied in a job creation request." msgstr "" "Das Attribut '%s' Auftragsstatus kann in einer Auftragsanfrage nicht " "angegeben werden." #, c-format msgid "" "The '%s' operation attribute cannot be supplied in a Create-Job request." msgstr "" "Das Vorgangsattribut '%s' kann nicht mit einer Anfrage zur " "Auftragserstellung angegeben werden." #, c-format msgid "The PPD file \"%s\" could not be found." msgstr "Die PPD-Datei »%s« konnte nicht gefunden werden." #, c-format msgid "The PPD file \"%s\" could not be opened: %s" msgstr "Die PPD-Datei »%s« konnte nicht geöffnet werden: %s" msgid "The PPD file could not be opened." msgstr "Die PPD Datei konnte nicht geöffnet werden." msgid "" "The class name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "Der Klassenname darf maximal 127 druckbare Zeichen haben und darf keine " "Leerzeichen, Schrägstriche (/) oder Rautezeichen (#) enthalten." msgid "The developer unit needs to be replaced." msgstr "Die Entwicklereinheit muss gewechselt werden." msgid "The developer unit will need to be replaced soon." msgstr "Die entwicklereinheit muss demnächst gewechselt werden." msgid "The fuser's temperature is high." msgstr "Die Temperatur der Fixiereinheit ist hoch." msgid "The fuser's temperature is low." msgstr "Die Temperatur der Fixiereinheit ist niedrig." msgid "" "The notify-lease-duration attribute cannot be used with job subscriptions." msgstr "" "Das Attribut „notify-lease-duration“ kann nicht mit Druckauftrags-" "Subskriptionen verwendet werden." #, c-format msgid "The notify-user-data value is too large (%d > 63 octets)." msgstr "Der WErt für notify-user-data ist zu gross (%d > 63 octets)." msgid "The optical photoconductor needs to be replaced." msgstr "Der optische Fotoleitertrommel muss ersetzt werden." msgid "The optical photoconductor will need to be replaced soon." msgstr "Der optische Fotoleitertrommel muss demnächst ersetzt werden." msgid "The printer configuration is incorrect or the printer no longer exists." msgstr "" "Die Druckerkonfiguration ist nicht korrekt oder der Drucker existiert nicht " "mehr." msgid "The printer did not respond." msgstr "Der Drucker hat nicht geantwortet." msgid "The printer is in use." msgstr "Der Drucker ist beschäftigt." msgid "The printer is low on ink." msgstr "Der Drucker hat niedrigen Tintenstand." msgid "The printer is low on toner." msgstr "Der Drucker hat niedrigen Tonerstand." msgid "The printer is not connected." msgstr "Der Drucker ist nicht verbunden." msgid "The printer is not responding." msgstr "Der Drucker antwortet nicht." msgid "The printer is now connected." msgstr "Der Drucker ist jetzt verbunden." msgid "The printer is now online." msgstr "Der Drucker ist jetzt online." msgid "The printer is offline." msgstr "Der Drucker ist offline." msgid "The printer is unreachable at this time." msgstr "Der Drucker ist derzeit nicht erreichbar." msgid "The printer may be out of ink." msgstr "Der Drucker hat mochlicherweise keine Tinte mehr." msgid "The printer may be out of toner." msgstr "Der Drucker könnte zu wenig Toner haben." msgid "The printer may not exist or is unavailable at this time." msgstr "Der Drucker existiert nicht oder ist zur Zeit nicht verfügbar." msgid "" "The printer name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "Der Druckername darf maximal 127 druckbare Zeichen haben und darf keine " "Leerzeichen, Schrägstriche (/) oder Rautezeichen (#) enthalten." msgid "The printer or class does not exist." msgstr "Der Drucker oder die Klasse existiert nicht." msgid "The printer or class is not shared." msgstr "Der Drucker oder die Klasse ist nicht freigegeben." msgid "The printer's cover is open." msgstr "Die Druckerabdeckung ist offen." msgid "The printer's door is open." msgstr "Die Klappe des Druckers ist offen." msgid "The printer's interlock is open." msgstr "Die Sicherheitsverriegelung des Druckers ist offen." msgid "The printer's waste bin is almost full." msgstr "Der Resttonerbehälter des Druckers ist fast voll." msgid "The printer's waste bin is full." msgstr "Der Resttonerbehälter des Druckers ist voll." #, c-format msgid "The printer-uri \"%s\" contains invalid characters." msgstr "Die Drucker-URI »%s« enthält ungültige Zeichen." msgid "The printer-uri attribute is required." msgstr "" msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." msgstr "" "Die Drucker-URI muss in der folgenden Form vorliegen: ipp://HOSTNAME/classes/" "CLASSNAME" msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgstr "" "Die Drucker-URI muss in der folgenden Form vorliegen: ipp://HOSTNAME/" "printers/PRINTERNAME" msgid "" "The subscription name may not contain spaces, slashes (/), question marks " "(?), or the pound sign (#)." msgstr "" "Der Subkriptionsname darf keine Leerzeichen, Schrägstriche (/), Fragezeichen " "(?) oder Rautezeichen (#) enthalten." msgid "" "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to " "enable it." msgstr "" "Die Web-Schnittstelle ist derzeit abgeschaltet. Das Einschalten kann mitdem " "Befehl »cupsctl WebInterface=yes« erfolgen." #, c-format msgid "The which-jobs value \"%s\" is not supported." msgstr "Der which-jobs Wert »%s« ist nicht unterstützt." msgid "There are too many subscriptions." msgstr "Es gibt zu viele Subskriptionen." msgid "There was an unrecoverable USB error." msgstr "Ein nicht zu behebenden USB Fehler ist aufgetreten." msgid "Thermal Transfer Media" msgstr "Thermotransferpapier" msgid "Too many active jobs." msgstr "Zu viele aktive Druckaufträge." #, c-format msgid "Too many job-sheets values (%d > 2)." msgstr "Zu viele job-sheets Werte (%d > 2)." #, c-format msgid "Too many printer-state-reasons values (%d > %d)." msgstr "Zu viele printer-state-reasons Werte (%d > %d)." msgid "Top" msgstr "Oben" msgid "Top Tray" msgstr "" msgid "Tractor" msgstr "" msgid "Transfer" msgstr "" msgid "Transparency" msgstr "Transparenz" msgid "Tray" msgstr "Fach" msgid "Tray 1" msgstr "Fach 1" msgid "Tray 10" msgstr "Fach 10" msgid "Tray 11" msgstr "Fach 11" msgid "Tray 12" msgstr "Fach 12" msgid "Tray 13" msgstr "Fach 13" msgid "Tray 14" msgstr "Fach 14" msgid "Tray 15" msgstr "Fach 15" msgid "Tray 16" msgstr "Fach 16" msgid "Tray 17" msgstr "Fach 17" msgid "Tray 18" msgstr "Fach 18" msgid "Tray 19" msgstr "Fach 19" msgid "Tray 2" msgstr "Fach 2" msgid "Tray 20" msgstr "Fach 20" msgid "Tray 3" msgstr "Fach 3" msgid "Tray 4" msgstr "Fach 4" msgid "Tray 5" msgstr "Fach 5" msgid "Tray 6" msgstr "Fach 6" msgid "Tray 7" msgstr "Fach 7" msgid "Tray 8" msgstr "Fach 8" msgid "Tray 9" msgstr "Fach 9" msgid "Triple Staple (Landscape)" msgstr "Dreifachheftung (Querformat)" msgid "Triple Staple (Portrait)" msgstr "Dreifachheftung (Hochformat)" msgid "Triple Staple (Reverse Landscape)" msgstr "Dreifachheftung (gedrehtes Querformat)" msgid "Triple Staple (Reverse Portrait)" msgstr "Dreifachheftung (gedrehtes Hochformat)" msgid "Triple Wall Cardboard" msgstr "" msgid "Trust on first use is disabled." msgstr "" msgid "URI Too Long" msgstr "URI zu lang" msgid "URI too large" msgstr "URI zu gross" msgid "US Fanfold" msgstr "" msgid "US Ledger" msgstr "US Ledger" msgid "US Legal" msgstr "US Lang" msgid "US Legal Oversize" msgstr "" msgid "US Letter" msgstr "US Letter" msgid "US Letter Long Edge" msgstr "" msgid "US Letter Oversize" msgstr "" msgid "US Letter Oversize Long Edge" msgstr "" msgid "US Letter Small" msgstr "" msgid "Unable to access cupsd.conf file" msgstr "Kein Zugriff auf die Datei cupsd.conf" msgid "Unable to access help file." msgstr "Kein Zugriff auf die Hilfe-Datei." msgid "Unable to add RSS subscription" msgstr "RSS-Abo konnte nicht hinzugefügt werden:" msgid "Unable to add class" msgstr "Klasse konnte nicht hinzugefügt werden:" msgid "Unable to add document to print job." msgstr "Dem Druckauftrag kann kein Dokument hinzugefügt werden." #, c-format msgid "Unable to add job for destination \"%s\"." msgstr "Dem Ziel »%s« kann kein Auftrag hinzugefügt werden." msgid "Unable to add printer" msgstr "Drucker konnte nicht hinzugefügt werden:" msgid "Unable to allocate memory for file types." msgstr "Speicher für Dateitypen kann nicht belegt werden." msgid "Unable to allocate memory for page info" msgstr "Speicher für Seiteninformation kann nicht belegt werden" msgid "Unable to allocate memory for pages array" msgstr "Speicher für Seitenmatrix kann nicht belegt werden" msgid "Unable to cancel RSS subscription" msgstr "RSS-Abo konnte nicht widerrufen werden:" msgid "Unable to cancel print job." msgstr "Druckauftrag kann nicht abgebrochen werden." msgid "Unable to change printer" msgstr "Drucker konnte nicht geändert werden" msgid "Unable to change printer-is-shared attribute" msgstr "Attribut „printer-is-shared“ konnte nicht geändert werden" msgid "Unable to change server settings" msgstr "Servereinstellungen konnten nicht geändert werden :" #, c-format msgid "Unable to compile mimeMediaType regular expression: %s." msgstr "" "Der regulären Ausdruck %s für mimeMediaType kann nicht kompiliert werden." #, c-format msgid "Unable to compile naturalLanguage regular expression: %s." msgstr "" "Der natualLanguage regulärer Ausdruck kann nicht kompiliert werden: %s." msgid "Unable to configure printer options." msgstr "Druckeroptionen können nicht konfiguriert werden." msgid "Unable to connect to host." msgstr "Verbindungsaufbau zum Host fehlgeschlagen." msgid "Unable to contact printer, queuing on next printer in class." msgstr "" "Drucker kann nicht kontaktiert werden, stelle in die nächste Warteschlange " "der Klasse ein" #, c-format msgid "Unable to copy 64-bit CUPS printer driver files (%d)." msgstr "" #, c-format msgid "Unable to copy 64-bit Windows printer driver files (%d)." msgstr "" #, c-format msgid "Unable to copy CUPS printer driver files (%d)." msgstr "Die CUPS Druckertreiberdateien (%d) können nicht kopiert werden." #, c-format msgid "Unable to copy PPD file - %s" msgstr "PPD Datei %s kann nicht kopiert werden" msgid "Unable to copy PPD file." msgstr "PPD Datei kann nicht kopiert werden" #, c-format msgid "Unable to copy Windows 2000 printer driver files (%d)." msgstr "" "Druckertrieberdateien für Windows 2000 können nicht kopiert werden (%d)." #, c-format msgid "Unable to copy Windows 9x printer driver files (%d)." msgstr "Druckertrieberdateien für Windows 9x können nicht kopiert werden (%d)." msgid "Unable to create credentials from array." msgstr "" msgid "Unable to create printer-uri" msgstr "Drucker-URI kann nicht erzeugt werden" msgid "Unable to create printer." msgstr "Drucker kann nicht erzeugt werden." msgid "Unable to create server credentials." msgstr "Die Server-Anmeldedaten können nicht erzeugt werden." msgid "Unable to create temporary file" msgstr "Temporäre Datei konntenicht erstellt werden" msgid "Unable to delete class" msgstr "Die Klasse konnte nicht gelöscht werden" msgid "Unable to delete printer" msgstr "Der Drucker konnte nicht gelöscht werden" msgid "Unable to do maintenance command" msgstr "Wartungsbefehl konnte nicht ausgeführt werden" msgid "Unable to edit cupsd.conf files larger than 1MB" msgstr "cupsd.conf Dateien grösser als 1MB können nicht bearbeitet werden" msgid "" "Unable to establish a secure connection to host (certificate chain invalid)." msgstr "Sichere Verbindung zu Host nicht möglich (Zertifikatskette ungültig)." msgid "" "Unable to establish a secure connection to host (certificate not yet valid)." msgstr "" "Sichere Verbindung zu Host nicht möglich (Zertifikatskette noch nicht " "gültig)." msgid "Unable to establish a secure connection to host (expired certificate)." msgstr "Sichere Verbindung zu Host nicht möglich (Zertifikats abgelaufen)." msgid "Unable to establish a secure connection to host (host name mismatch)." msgstr "Sichere Verbindung zu Host nicht möglich (Hostname passt nicht)." msgid "" "Unable to establish a secure connection to host (peer dropped connection " "before responding)." msgstr "" "Sichere Verbindung zu Host nicht möglich (Gegenstelle hat die Verbindung vor " "einer Antwort beendet)." msgid "" "Unable to establish a secure connection to host (self-signed certificate)." msgstr "" "Sichere Verbindung zu Host nicht möglich (Selbstsigniertes Zertifikat)." msgid "" "Unable to establish a secure connection to host (untrusted certificate)." msgstr "" "Sichere Verbindung zu Host nicht möglich (Nicht vertrauenswürdiges " "Zertifikat)." msgid "Unable to establish a secure connection to host." msgstr "Sichere Verbindung zu Host nicht möglich." msgid "Unable to find destination for job" msgstr "Das Ziel für den Auftrag kann nicht gefunden werden" msgid "Unable to find printer." msgstr "Der Drucker kann nicht gefunden werden" msgid "Unable to find server credentials." msgstr "Die Server-Zugangsdaten konnten nicht gefunden werden." msgid "Unable to get backend exit status." msgstr "Der Backend-Rückgabewert kann nicht ermittelt werden." msgid "Unable to get class list" msgstr "Klassenliste konnte nicht ermittelt werden:" msgid "Unable to get class status" msgstr "Klassenstatus konnte nicht ermittelt werden:" msgid "Unable to get list of printer drivers" msgstr "Liste der Druckertreiber konnte nicht ermittel werden:" msgid "Unable to get printer attributes" msgstr "Druckerattribute konnten nicht ermittelt werden:" msgid "Unable to get printer list" msgstr "Druckerliste konnte nicht ermittelt werden:" msgid "Unable to get printer status" msgstr "Druckerstatus konnte nicht ermittelt werden" msgid "Unable to get printer status." msgstr "Druckerstatus konnte nicht ermittelt werden:" #, c-format msgid "Unable to install Windows 2000 printer driver files (%d)." msgstr "" #, c-format msgid "Unable to install Windows 9x printer driver files (%d)." msgstr "" msgid "Unable to load help index." msgstr "Hilfeindex kann nicht geladen werden." #, c-format msgid "Unable to locate printer \"%s\"." msgstr "Der Drucker »%s« kann nicht lokalisiert werden" msgid "Unable to locate printer." msgstr "Der Drucker kann nicht lokalisiet werden" msgid "Unable to modify class" msgstr "Klasse konnte nicht verändert werden:" msgid "Unable to modify printer" msgstr "Drucker kann nicht verändert werden:" msgid "Unable to move job" msgstr "Druckauftrag kann nicht bewegt werden" msgid "Unable to move jobs" msgstr "Druckaufträge können nicht bewegt werden" msgid "Unable to open PPD file" msgstr "PPD Datei kann nicht geöffnet werden" msgid "Unable to open cupsd.conf file:" msgstr "Die Datei „cupsd.conf“ kann nicht geöffnet werden:" msgid "Unable to open device file" msgstr "Die Gerätedatei kann nicht geöffnet werden" #, c-format msgid "Unable to open document #%d in job #%d." msgstr "Das Dokument #%d in Auftrag #%d kann nicht geöffnet werden." msgid "Unable to open help file." msgstr "Die Hilfe-Datei kann nicht geöffnet werden" msgid "Unable to open print file" msgstr "Die Druckdatei kann nicht geöffnet werden" msgid "Unable to open raster file" msgstr "Die Rasterdatei kann nicht geöffnet werden" msgid "Unable to print test page" msgstr "Die Testseite kann nicht gedruckt werden" msgid "Unable to read print data." msgstr "Druckdaten können nicht gelesen werden." msgid "Unable to rename job document file." msgstr "Auftragsdatei kann nicht umbenannt werden." msgid "Unable to resolve printer-uri." msgstr "Drucker-URI kann nicht aufgelöst werden." #, c-format msgid "Unable to run \"%s\": %s" msgstr "Ausführung von »%s« nicht möglich: %s" msgid "Unable to see in file" msgstr "" msgid "Unable to send command to printer driver" msgstr "Befehl kann nicht zum Drucker gesendet werden" msgid "Unable to send data to printer." msgstr "Kann Daten nicht zum Drucker senden." #, c-format msgid "Unable to set Windows printer driver (%d)." msgstr "Kann Windows Druckertreiber (%d) nicht setzen." msgid "Unable to set options" msgstr "Optionen konnten nicht festgelegt werden:" msgid "Unable to set server default" msgstr "Standardeinstellungen für Server konnten nicht festgelegt werden:" msgid "Unable to start backend process." msgstr "Backend-Prozess kann nicht gestartet werden." msgid "Unable to upload cupsd.conf file" msgstr "Die Datei „cupsd.conf“ kann nicht hochgeladen werden:" msgid "Unable to use legacy USB class driver." msgstr "Der alte USB-KlassenTreiber kann nicht verwendet werden." msgid "Unable to write print data" msgstr "Kann Druckdaten nicht schreiben" #, c-format msgid "Unable to write uncompressed print data: %s" msgstr "Unkomprimierte Druckdaten %s können nicht geschrieben werden." msgid "Unauthorized" msgstr "Nicht berechtigt" msgid "Units" msgstr "Einheiten" msgid "Unknown" msgstr "Unbekannt" #, c-format msgid "Unknown choice \"%s\" for option \"%s\"." msgstr "Unbekannte Auswahl \"%s\" für Option »%sx." #, c-format msgid "Unknown encryption option value: \"%s\"." msgstr "Unbekannte Verschlüsselungsoption: »%s«." #, c-format msgid "Unknown file order: \"%s\"." msgstr "Unbekannte Dateireihenfolge: »%s«." #, c-format msgid "Unknown format character: \"%c\"." msgstr "Unbekanntes Formatzeichen: »%c«." msgid "Unknown hash algorithm." msgstr "Unbekannter Hashalgorithmus." msgid "Unknown media size name." msgstr "Unbekannter Name der Mediengrösse." #, c-format msgid "Unknown option \"%s\" with value \"%s\"." msgstr "Unbekannte Option »%s« mit Wert »%s«." #, c-format msgid "Unknown option \"%s\"." msgstr "Unbekannte Option »%s«" #, c-format msgid "Unknown print mode: \"%s\"." msgstr "Unbekannter Druckmodus: »%s«." #, c-format msgid "Unknown printer-error-policy \"%s\"." msgstr "Unbekannte printer-error-policy »%s«." #, c-format msgid "Unknown printer-op-policy \"%s\"." msgstr "Unbekannte printer-op-policy »%s«." msgid "Unknown request method." msgstr "Unbekannte Anfragemethode." msgid "Unknown request version." msgstr "Unbekannte Anfrageversion" msgid "Unknown scheme in URI" msgstr "Unbekanntes Schema in URI" msgid "Unknown service name." msgstr "Unbekannter Dienstname." #, c-format msgid "Unknown version option value: \"%s\"." msgstr "Unbekannter Versionsoption: »%s«." #, c-format msgid "Unsupported 'compression' value \"%s\"." msgstr "Nicht unterstützter Kompressionswert »%s«." #, c-format msgid "Unsupported 'document-format' value \"%s\"." msgstr "Nicht unterstützter Wert des 'document-format' »%s«." msgid "Unsupported 'job-name' value." msgstr "Nicht unterstützter 'job-name' Wert." #, c-format msgid "Unsupported character set \"%s\"." msgstr "Nicht unterstützter Zeichensatz »%sx." #, c-format msgid "Unsupported compression \"%s\"." msgstr "Nicht unterstützte Kompression »%s«." #, c-format msgid "Unsupported document-format \"%s\"." msgstr "Nicht unterstütztes Dokumentenformat »%s«." #, c-format msgid "Unsupported document-format \"%s/%s\"." msgstr "Nicht unterstütztes Dokumentenformat »%s/%s«." #, c-format msgid "Unsupported format \"%s\"." msgstr "Nicht unterstütztes Format »%s«." msgid "Unsupported margins." msgstr "Nicht unterstützte Ränder." msgid "Unsupported media value." msgstr "Nicht unterstützter Medienwert." #, c-format msgid "Unsupported number-up value %d, using number-up=1." msgstr "Nicht unterstützter number-up Wert %d, verwende number-up=1." #, c-format msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb." msgstr "" "Nicht unterstützter number-up-layout Wert %s, verwende number-up-layout=lrtb." #, c-format msgid "Unsupported page-border value %s, using page-border=none." msgstr "" msgid "Unsupported raster data." msgstr "Nicht unterstützte Rasterdaten." msgid "Unsupported value type" msgstr "Wertetyp nicht unterstützt" msgid "Upgrade Required" msgstr "Aktualisierung erforderlich" msgid "" "Usage:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]" msgstr "" "Verwendung:\n" "\n" " lpadmin [-h Server] -d Druckziel\n" " lpadmin [-h Server] -x Druckziel\n" " lpadmin [-h Server] -p Drucker [-c add-class] [-i Schnittstelle] [-m " "Modell]\n" " [-r remove-class] [-v Gerät] [-D Beschreibung]\n" " [-P ppd-Datei] [-o Name=Wert]\n" " [-u allow:Benutzer,Benutzer] [-u deny:Benutzer," "Benutzer]" #, c-format msgid "Usage: %s job-id user title copies options [file]" msgstr "Verwendung: %s Auftrags-ID Benutzer Titel Kopien Optionen [Datei]" msgid "Usage: cupsaddsmb [options] printer1 ... printerN" msgstr "Verwendung: cupsaddsmb [Optionen] Drucker1 ... DruckerN" msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]" msgstr "Verwendung: cupsctl [Optionen] [Parameter=Wert ... ParameterN=WertN]" msgid "Usage: cupsd [options]" msgstr "Verwendung: cupsd [Optionen]" msgid "Usage: cupsfilter [ options ] [ -- ] filename" msgstr "Verwendung: cupsfilter [ Optionen ] [ -- ] Dateiname" msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]" msgstr "Verwendung: cupstestdsc [Optionen] Dateiname.ps [... Dateiname.ps]" msgid "" "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" msgstr "" "Verwendung: cupstestppd [Optionen] Dateiname1.ppd[.gz] [... DateinameN.ppd[." "gz]]" msgid "" "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " ippfind [options] name[.regtype[.domain.]] ... [expression]\n" " ippfind --help\n" " ippfind --version" msgstr "" msgid "Usage: ipptool [options] URI filename [ ... filenameN ]" msgstr "Verwendung: ipptool [Optionen] URI Dateiname [ ... DateinameN ]" msgid "Usage: lpmove job/src dest" msgstr "Verwendung: lpmove Auftragsquelle Auftragsziel" msgid "" "Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " lpoptions [-h server] [-E] -x printer" msgstr "" "Verwendung: lpoptions [-h Server] [-E] -d Drucker\n" " lpoptions [-h Server] [-E] [-p Drucker] -l\n" " lpoptions [-h Server] [-E] -p Drucker -o option[=Wert] ...\n" " lpoptions [-h Server] [-E] -x Drucker" msgid "" "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" msgstr "" "Verwendung: lpq [-P Ziel] [-U Benutzername] [-h Hostname[:port]] [-l] " "[+Interval]" msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" msgstr "Verwendung: ppdc [Optionen] Dateiname.drv [ ... DateinameN.drv ]" msgid "Usage: ppdhtml [options] filename.drv >filename.html" msgstr "" msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" msgid "" "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" msgstr "" "Verwendung: ppdpo [Optionen] -o Dateiname.po Dateiname.drv [ ... DateinameN." "drv ]" msgid "Usage: snmp [host-or-ip-address]" msgstr "Verwendung: snmp [Host-oder-IP-Adresse]" msgid "Value uses indefinite length" msgstr "Wert hat unbestimmte Länge" msgid "VarBind uses indefinite length" msgstr "VarBind hat unbestimmte Länge" msgid "Vellum Paper" msgstr "" msgid "Version uses indefinite length" msgstr "Version hat unbestimmte Länge" msgid "Waiting for job to complete." msgstr "Warte auf Auftragsabschluss." msgid "Waiting for printer to become available." msgstr "Warte darauf dass der Drucker verfügbar wird." msgid "Waiting for printer to finish." msgstr "Warte auf Abschluss." msgid "Warning, no Windows 2000 printer drivers are installed." msgstr "Warnung, keine Win2k Treiber installiert." msgid "Waterproof Fabric" msgstr "" msgid "Web Interface is Disabled" msgstr "Web-Schnittstelle ist abgeschaltet" msgid "Wet Film" msgstr "" msgid "Windowed Envelope" msgstr "Fensterumschlag" msgid "Yes" msgstr "Ja" #, c-format msgid "" "You must access this page using the URL https://" "%s:%d%s." msgstr "" "Auf diese Seite greifen Sie zu über die URL https://%s:%d%s." msgid "Z Fold" msgstr "" msgid "ZPL Label Printer" msgstr "ZPL Etikettendrucker" msgid "Zebra" msgstr "Zebra" msgid "aborted" msgstr "abgebrochen" msgid "accuracy-units" msgstr "Accuracy Units" msgid "accuracy-units.mm" msgstr "Mm" msgid "accuracy-units.nm" msgstr "Nm" msgid "accuracy-units.um" msgstr "Um" msgid "baling" msgstr "Bale Output" msgid "baling-type" msgstr "Baling Type" msgid "baling-type.band" msgstr "Band" msgid "baling-type.shrink-wrap" msgstr "Shrink Wrap" msgid "baling-type.wrap" msgstr "Wrap" msgid "baling-when" msgstr "Baling When" msgid "baling-when.after-job" msgstr "After Job" msgid "baling-when.after-sets" msgstr "After Sets" msgid "binding" msgstr "Bind Output" msgid "binding-reference-edge" msgstr "Binding Reference Edge" msgid "binding-reference-edge.bottom" msgstr "Bottom" msgid "binding-reference-edge.left" msgstr "Left" msgid "binding-reference-edge.right" msgstr "Right" msgid "binding-reference-edge.top" msgstr "Top" msgid "binding-type" msgstr "Binding Type" msgid "binding-type.adhesive" msgstr "Adhesive" msgid "binding-type.comb" msgstr "Comb" msgid "binding-type.flat" msgstr "Flat" msgid "binding-type.padding" msgstr "Padding" msgid "binding-type.perfect" msgstr "Perfect" msgid "binding-type.spiral" msgstr "Spiral" msgid "binding-type.tape" msgstr "Tape" msgid "binding-type.velo" msgstr "Velo" msgid "canceled" msgstr "abgebrochen" msgid "charge-info-message" msgstr "Charge Info Message" msgid "coating" msgstr "Coat Sheets" msgid "coating-sides" msgstr "Coating Sides" msgid "coating-sides.back" msgstr "Back" msgid "coating-sides.both" msgstr "Both" msgid "coating-sides.front" msgstr "Front" msgid "coating-type" msgstr "Coating Type" msgid "coating-type.archival" msgstr "Archival" msgid "coating-type.archival-glossy" msgstr "Archival Glossy" msgid "coating-type.archival-matte" msgstr "Archival Matte" msgid "coating-type.archival-semi-gloss" msgstr "Archival Semi Gloss" msgid "coating-type.glossy" msgstr "Glossy" msgid "coating-type.high-gloss" msgstr "High Gloss" msgid "coating-type.matte" msgstr "Matte" msgid "coating-type.semi-gloss" msgstr "Semi-Gloss" msgid "coating-type.silicone" msgstr "Silicone" msgid "coating-type.translucent" msgstr "Translucent" msgid "completed" msgstr "abgeschlossen" msgid "confirmation-sheet-print" msgstr "Confirmation Sheet Print" msgid "copies" msgstr "Copies" msgid "cover-back" msgstr "Cover Back" msgid "cover-front" msgstr "Cover Front" msgid "cover-sheet-info" msgstr "Cover Sheet Info" msgid "cover-sheet-info-supported.date-time" msgstr "Date Time" msgid "cover-sheet-info-supported.from-name" msgstr "From Name" msgid "cover-sheet-info-supported.logo" msgstr "Logo" msgid "cover-sheet-info-supported.message" msgstr "Message" msgid "cover-sheet-info-supported.organization" msgstr "Organization" msgid "cover-sheet-info-supported.subject" msgstr "Subject" msgid "cover-sheet-info-supported.to-name" msgstr "To Name" msgid "cover-type" msgstr "Cover Type" msgid "cover-type.no-cover" msgstr "No Cover" msgid "cover-type.print-back" msgstr "Print Back" msgid "cover-type.print-both" msgstr "Print Both" msgid "cover-type.print-front" msgstr "Print Front" msgid "cover-type.print-none" msgstr "Print None" msgid "covering" msgstr "Cover Output" msgid "covering-name" msgstr "Covering Name" msgid "covering-name.plain" msgstr "Plain" msgid "covering-name.pre-cut" msgstr "Pre Cut" msgid "covering-name.pre-printed" msgstr "Pre Printed" msgid "cups-deviced failed to execute." msgstr "„cups-deviced“ konnte nicht ausgeführt werden." msgid "cups-driverd failed to execute." msgstr "„cups-driverd“ konnte nicht ausgeführt werden." #, c-format msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "cupsaddsmb: Keine PPD Datei für Drucker »%s« - %s" msgid "cupsctl: Cannot set Listen or Port directly." msgstr "cupsctl: Kann nicht direkt auf dem Port hören." #, c-format msgid "cupsctl: Unable to connect to server: %s" msgstr "cupsctl: Kann nicht mit dem Server %s verbinden" #, c-format msgid "cupsctl: Unknown option \"%s\"" msgstr "cupsctl: Unbekannte Option »%s«" #, c-format msgid "cupsctl: Unknown option \"-%c\"" msgstr "cupsctl: Unbekannte Option \"-%c\"" msgid "cupsd: Expected config filename after \"-c\" option." msgstr "cupsd: Konfigurations-Dateiname nach der »-c« Option erwartet." msgid "cupsd: Expected cups-files.conf filename after \"-s\" option." msgstr "cupsd: Dateiname cups-files.conf nach der »-s« Option erwartet." msgid "cupsd: On-demand support not compiled in, running in normal mode." msgstr "" "cupsd: Start auf Anforderung nicht einkompiliert, starte im normalen Modus." msgid "cupsd: Relative cups-files.conf filename not allowed." msgstr "cupsd: Relativer Dateiname für cups-files.conf nicht zulässig." msgid "cupsd: Unable to get current directory." msgstr "cupsd: Aktuelles Verzeichnis kann nicht ermittelt werden." msgid "cupsd: Unable to get path to cups-files.conf file." msgstr "cupsd: Pfad zur Datei cups-files.conf kann nicht ermittelt werden." #, c-format msgid "cupsd: Unknown argument \"%s\" - aborting." msgstr "cupsd: Unbekanntes Argument \"%s\" - Abbruch." #, c-format msgid "cupsd: Unknown option \"%c\" - aborting." msgstr "cupsd: Unbekannte Option \"%c\" - Abbruch." #, c-format msgid "cupsfilter: Invalid document number %d." msgstr "cupsfilter: ungültige Dokumentennummer %d." #, c-format msgid "cupsfilter: Invalid job ID %d." msgstr "cupsfilter: ungültige Auftrags-ID %d." msgid "cupsfilter: Only one filename can be specified." msgstr "cupsfilter: Es kann nur ein Dateiname angegeben werden." #, c-format msgid "cupsfilter: Unable to get job file - %s" msgstr "cupsfilter: Auftragsdatei nicht verfügbar - %s" msgid "cupstestppd: The -q option is incompatible with the -v option." msgstr "cupstestppd: Die -q Option ist nicht vereinbar mit der -v Option." msgid "cupstestppd: The -v option is incompatible with the -q option." msgstr "cupstestppd: Die -v Option ist nicht vereinbar mit der -q Option." msgid "detailed-status-message" msgstr "Detailed Status Message" #, c-format msgid "device for %s/%s: %s" msgstr "Gerät für %s/%s: %s" #, c-format msgid "device for %s: %s" msgstr "Gerät für %s: %s" msgid "document-copies" msgstr "Copies" msgid "document-state" msgstr "Document State" msgid "document-state-reasons" msgstr "Detailed Document State" msgid "document-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "document-state-reasons.canceled-at-device" msgstr "Canceled At Device" msgid "document-state-reasons.canceled-by-operator" msgstr "Canceled By Operator" msgid "document-state-reasons.canceled-by-user" msgstr "Canceled By User" msgid "document-state-reasons.completed-successfully" msgstr "Completed Successfully" msgid "document-state-reasons.completed-with-errors" msgstr "Completed With Errors" msgid "document-state-reasons.completed-with-warnings" msgstr "Completed With Warnings" msgid "document-state-reasons.compression-error" msgstr "Compression Error" msgid "document-state-reasons.data-insufficient" msgstr "Data Insufficient" msgid "document-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "document-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "document-state-reasons.digital-signature-wait" msgstr "Digital Signature Wait" msgid "document-state-reasons.document-access-error" msgstr "Document Access Error" msgid "document-state-reasons.document-fetchable" msgstr "Document Fetchable" msgid "document-state-reasons.document-format-error" msgstr "Document Format Error" msgid "document-state-reasons.document-password-error" msgstr "Document Password Error" msgid "document-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "document-state-reasons.document-security-error" msgstr "Document Security Error" msgid "document-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "document-state-reasons.errors-detected" msgstr "Errors Detected" msgid "document-state-reasons.incoming" msgstr "Incoming" msgid "document-state-reasons.interpreting" msgstr "Interpreting" msgid "document-state-reasons.none" msgstr "None" msgid "document-state-reasons.outgoing" msgstr "Outgoing" msgid "document-state-reasons.printing" msgstr "Printing" msgid "document-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "document-state-reasons.queued" msgstr "Queued" msgid "document-state-reasons.queued-for-marker" msgstr "Queued For Marker" msgid "document-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "document-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "document-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "document-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "document-state-reasons.transforming" msgstr "Transforming" msgid "document-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "document-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "document-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "document-state.3" msgstr "Pending" msgid "document-state.5" msgstr "Processing" msgid "document-state.6" msgstr "Processing Stopped" msgid "document-state.7" msgstr "Canceled" msgid "document-state.8" msgstr "Aborted" msgid "document-state.9" msgstr "Completed" msgid "error-index uses indefinite length" msgstr "Fehlerindex hat unbestimmte Länge" msgid "error-status uses indefinite length" msgstr "Fehlerstatus hat unbestimmte Länge" msgid "feed-orientation" msgstr "Feed Orientation" msgid "feed-orientation.long-edge-first" msgstr "Long Edge First" msgid "feed-orientation.short-edge-first" msgstr "Short Edge First" msgid "fetch-status-code" msgstr "Fetch Status Code" msgid "finishing-template" msgstr "Finishing Template" msgid "finishing-template.bale" msgstr "Bale" msgid "finishing-template.bind" msgstr "Bind" msgid "finishing-template.bind-bottom" msgstr "Bind Bottom" msgid "finishing-template.bind-left" msgstr "Bind Left" msgid "finishing-template.bind-right" msgstr "Bind Right" msgid "finishing-template.bind-top" msgstr "Bind Top" msgid "finishing-template.booklet-maker" msgstr "Booklet Maker" msgid "finishing-template.coat" msgstr "Coat" msgid "finishing-template.cover" msgstr "Cover" msgid "finishing-template.edge-stitch" msgstr "Edge Stitch" msgid "finishing-template.edge-stitch-bottom" msgstr "Edge Stitch Bottom" msgid "finishing-template.edge-stitch-left" msgstr "Edge Stitch Left" msgid "finishing-template.edge-stitch-right" msgstr "Edge Stitch Right" msgid "finishing-template.edge-stitch-top" msgstr "Edge Stitch Top" msgid "finishing-template.fold" msgstr "Fold" msgid "finishing-template.fold-accordion" msgstr "Fold Accordion" msgid "finishing-template.fold-double-gate" msgstr "Fold Double Gate" msgid "finishing-template.fold-engineering-z" msgstr "Fold Engineering Z" msgid "finishing-template.fold-gate" msgstr "Fold Gate" msgid "finishing-template.fold-half" msgstr "Fold Half" msgid "finishing-template.fold-half-z" msgstr "Fold Half Z" msgid "finishing-template.fold-left-gate" msgstr "Fold Left Gate" msgid "finishing-template.fold-letter" msgstr "Fold Letter" msgid "finishing-template.fold-parallel" msgstr "Fold Parallel" msgid "finishing-template.fold-poster" msgstr "Fold Poster" msgid "finishing-template.fold-right-gate" msgstr "Fold Right Gate" msgid "finishing-template.fold-z" msgstr "Fold Z" msgid "finishing-template.jdf-f10-1" msgstr "JDF F10 1" msgid "finishing-template.jdf-f10-2" msgstr "JDF F10 2" msgid "finishing-template.jdf-f10-3" msgstr "JDF F10 3" msgid "finishing-template.jdf-f12-1" msgstr "JDF F12 1" msgid "finishing-template.jdf-f12-10" msgstr "JDF F12 10" msgid "finishing-template.jdf-f12-11" msgstr "JDF F12 11" msgid "finishing-template.jdf-f12-12" msgstr "JDF F12 12" msgid "finishing-template.jdf-f12-13" msgstr "JDF F12 13" msgid "finishing-template.jdf-f12-14" msgstr "JDF F12 14" msgid "finishing-template.jdf-f12-2" msgstr "JDF F12 2" msgid "finishing-template.jdf-f12-3" msgstr "JDF F12 3" msgid "finishing-template.jdf-f12-4" msgstr "JDF F12 4" msgid "finishing-template.jdf-f12-5" msgstr "JDF F12 5" msgid "finishing-template.jdf-f12-6" msgstr "JDF F12 6" msgid "finishing-template.jdf-f12-7" msgstr "JDF F12 7" msgid "finishing-template.jdf-f12-8" msgstr "JDF F12 8" msgid "finishing-template.jdf-f12-9" msgstr "JDF F12 9" msgid "finishing-template.jdf-f14-1" msgstr "JDF F14 1" msgid "finishing-template.jdf-f16-1" msgstr "JDF F16 1" msgid "finishing-template.jdf-f16-10" msgstr "JDF F16 10" msgid "finishing-template.jdf-f16-11" msgstr "JDF F16 11" msgid "finishing-template.jdf-f16-12" msgstr "JDF F16 12" msgid "finishing-template.jdf-f16-13" msgstr "JDF F16 13" msgid "finishing-template.jdf-f16-14" msgstr "JDF F16 14" msgid "finishing-template.jdf-f16-2" msgstr "JDF F16 2" msgid "finishing-template.jdf-f16-3" msgstr "JDF F16 3" msgid "finishing-template.jdf-f16-4" msgstr "JDF F16 4" msgid "finishing-template.jdf-f16-5" msgstr "JDF F16 5" msgid "finishing-template.jdf-f16-6" msgstr "JDF F16 6" msgid "finishing-template.jdf-f16-7" msgstr "JDF F16 7" msgid "finishing-template.jdf-f16-8" msgstr "JDF F16 8" msgid "finishing-template.jdf-f16-9" msgstr "JDF F16 9" msgid "finishing-template.jdf-f18-1" msgstr "JDF F18 1" msgid "finishing-template.jdf-f18-2" msgstr "JDF F18 2" msgid "finishing-template.jdf-f18-3" msgstr "JDF F18 3" msgid "finishing-template.jdf-f18-4" msgstr "JDF F18 4" msgid "finishing-template.jdf-f18-5" msgstr "JDF F18 5" msgid "finishing-template.jdf-f18-6" msgstr "JDF F18 6" msgid "finishing-template.jdf-f18-7" msgstr "JDF F18 7" msgid "finishing-template.jdf-f18-8" msgstr "JDF F18 8" msgid "finishing-template.jdf-f18-9" msgstr "JDF F18 9" msgid "finishing-template.jdf-f2-1" msgstr "JDF F2 1" msgid "finishing-template.jdf-f20-1" msgstr "JDF F20 1" msgid "finishing-template.jdf-f20-2" msgstr "JDF F20 2" msgid "finishing-template.jdf-f24-1" msgstr "JDF F24 1" msgid "finishing-template.jdf-f24-10" msgstr "JDF F24 10" msgid "finishing-template.jdf-f24-11" msgstr "JDF F24 11" msgid "finishing-template.jdf-f24-2" msgstr "JDF F24 2" msgid "finishing-template.jdf-f24-3" msgstr "JDF F24 3" msgid "finishing-template.jdf-f24-4" msgstr "JDF F24 4" msgid "finishing-template.jdf-f24-5" msgstr "JDF F24 5" msgid "finishing-template.jdf-f24-6" msgstr "JDF F24 6" msgid "finishing-template.jdf-f24-7" msgstr "JDF F24 7" msgid "finishing-template.jdf-f24-8" msgstr "JDF F24 8" msgid "finishing-template.jdf-f24-9" msgstr "JDF F24 9" msgid "finishing-template.jdf-f28-1" msgstr "JDF F28 1" msgid "finishing-template.jdf-f32-1" msgstr "JDF F32 1" msgid "finishing-template.jdf-f32-2" msgstr "JDF F32 2" msgid "finishing-template.jdf-f32-3" msgstr "JDF F32 3" msgid "finishing-template.jdf-f32-4" msgstr "JDF F32 4" msgid "finishing-template.jdf-f32-5" msgstr "JDF F32 5" msgid "finishing-template.jdf-f32-6" msgstr "JDF F32 6" msgid "finishing-template.jdf-f32-7" msgstr "JDF F32 7" msgid "finishing-template.jdf-f32-8" msgstr "JDF F32 8" msgid "finishing-template.jdf-f32-9" msgstr "JDF F32 9" msgid "finishing-template.jdf-f36-1" msgstr "JDF F36 1" msgid "finishing-template.jdf-f36-2" msgstr "JDF F36 2" msgid "finishing-template.jdf-f4-1" msgstr "JDF F4 1" msgid "finishing-template.jdf-f4-2" msgstr "JDF F4 2" msgid "finishing-template.jdf-f40-1" msgstr "JDF F40 1" msgid "finishing-template.jdf-f48-1" msgstr "JDF F48 1" msgid "finishing-template.jdf-f48-2" msgstr "JDF F48 2" msgid "finishing-template.jdf-f6-1" msgstr "JDF F6 1" msgid "finishing-template.jdf-f6-2" msgstr "JDF F6 2" msgid "finishing-template.jdf-f6-3" msgstr "JDF F6 3" msgid "finishing-template.jdf-f6-4" msgstr "JDF F6 4" msgid "finishing-template.jdf-f6-5" msgstr "JDF F6 5" msgid "finishing-template.jdf-f6-6" msgstr "JDF F6 6" msgid "finishing-template.jdf-f6-7" msgstr "JDF F6 7" msgid "finishing-template.jdf-f6-8" msgstr "JDF F6 8" msgid "finishing-template.jdf-f64-1" msgstr "JDF F64 1" msgid "finishing-template.jdf-f64-2" msgstr "JDF F64 2" msgid "finishing-template.jdf-f8-1" msgstr "JDF F8 1" msgid "finishing-template.jdf-f8-2" msgstr "JDF F8 2" msgid "finishing-template.jdf-f8-3" msgstr "JDF F8 3" msgid "finishing-template.jdf-f8-4" msgstr "JDF F8 4" msgid "finishing-template.jdf-f8-5" msgstr "JDF F8 5" msgid "finishing-template.jdf-f8-6" msgstr "JDF F8 6" msgid "finishing-template.jdf-f8-7" msgstr "JDF F8 7" msgid "finishing-template.jog-offset" msgstr "Jog Offset" msgid "finishing-template.laminate" msgstr "Laminate" msgid "finishing-template.punch" msgstr "Punch" msgid "finishing-template.punch-bottom-left" msgstr "Punch Bottom Left" msgid "finishing-template.punch-bottom-right" msgstr "Punch Bottom Right" msgid "finishing-template.punch-dual-bottom" msgstr "Punch Dual Bottom" msgid "finishing-template.punch-dual-left" msgstr "Punch Dual Left" msgid "finishing-template.punch-dual-right" msgstr "Punch Dual Right" msgid "finishing-template.punch-dual-top" msgstr "Punch Dual Top" msgid "finishing-template.punch-multiple-bottom" msgstr "Punch Multiple Bottom" msgid "finishing-template.punch-multiple-left" msgstr "Punch Multiple Left" msgid "finishing-template.punch-multiple-right" msgstr "Punch Multiple Right" msgid "finishing-template.punch-multiple-top" msgstr "Punch Multiple Top" msgid "finishing-template.punch-quad-bottom" msgstr "Punch Quad Bottom" msgid "finishing-template.punch-quad-left" msgstr "Punch Quad Left" msgid "finishing-template.punch-quad-right" msgstr "Punch Quad Right" msgid "finishing-template.punch-quad-top" msgstr "Punch Quad Top" msgid "finishing-template.punch-top-left" msgstr "Punch Top Left" msgid "finishing-template.punch-top-right" msgstr "Punch Top Right" msgid "finishing-template.punch-triple-bottom" msgstr "Punch Triple Bottom" msgid "finishing-template.punch-triple-left" msgstr "Punch Triple Left" msgid "finishing-template.punch-triple-right" msgstr "Punch Triple Right" msgid "finishing-template.punch-triple-top" msgstr "Punch Triple Top" msgid "finishing-template.saddle-stitch" msgstr "Saddle Stitch" msgid "finishing-template.staple" msgstr "Staple" msgid "finishing-template.staple-bottom-left" msgstr "Staple Bottom Left" msgid "finishing-template.staple-bottom-right" msgstr "Staple Bottom Right" msgid "finishing-template.staple-dual-bottom" msgstr "Staple Dual Bottom" msgid "finishing-template.staple-dual-left" msgstr "Staple Dual Left" msgid "finishing-template.staple-dual-right" msgstr "Staple Dual Right" msgid "finishing-template.staple-dual-top" msgstr "Staple Dual Top" msgid "finishing-template.staple-top-left" msgstr "Staple Top Left" msgid "finishing-template.staple-top-right" msgstr "Staple Top Right" msgid "finishing-template.staple-triple-bottom" msgstr "Staple Triple Bottom" msgid "finishing-template.staple-triple-left" msgstr "Staple Triple Left" msgid "finishing-template.staple-triple-right" msgstr "Staple Triple Right" msgid "finishing-template.staple-triple-top" msgstr "Staple Triple Top" msgid "finishing-template.trim" msgstr "Trim" msgid "finishing-template.trim-after-copies" msgstr "Trim After Copies" msgid "finishing-template.trim-after-documents" msgstr "Trim After Documents" msgid "finishing-template.trim-after-job" msgstr "Trim After Job" msgid "finishing-template.trim-after-pages" msgstr "Trim After Pages" msgid "finishings" msgstr "Finishings" msgid "finishings-col" msgstr "Finishings" msgid "finishings.10" msgstr "Fold" msgid "finishings.100" msgstr "Fold Z" msgid "finishings.101" msgstr "Fold Engineering Z" msgid "finishings.11" msgstr "Trim" msgid "finishings.12" msgstr "Bale" msgid "finishings.13" msgstr "Booklet Maker" msgid "finishings.14" msgstr "Jog Offset" msgid "finishings.15" msgstr "Coat" msgid "finishings.16" msgstr "Laminate" msgid "finishings.20" msgstr "Staple Top Left" msgid "finishings.21" msgstr "Staple Bottom Left" msgid "finishings.22" msgstr "Staple Top Right" msgid "finishings.23" msgstr "Staple Bottom Right" msgid "finishings.24" msgstr "Edge Stitch Left" msgid "finishings.25" msgstr "Edge Stitch Top" msgid "finishings.26" msgstr "Edge Stitch Right" msgid "finishings.27" msgstr "Edge Stitch Bottom" msgid "finishings.28" msgstr "Staple Dual Left" msgid "finishings.29" msgstr "Staple Dual Top" msgid "finishings.3" msgstr "None" msgid "finishings.30" msgstr "Staple Dual Right" msgid "finishings.31" msgstr "Staple Dual Bottom" msgid "finishings.32" msgstr "Staple Triple Left" msgid "finishings.33" msgstr "Staple Triple Top" msgid "finishings.34" msgstr "Staple Triple Right" msgid "finishings.35" msgstr "Staple Triple Bottom" msgid "finishings.4" msgstr "Staple" msgid "finishings.5" msgstr "Punch" msgid "finishings.50" msgstr "Bind Left" msgid "finishings.51" msgstr "Bind Top" msgid "finishings.52" msgstr "Bind Right" msgid "finishings.53" msgstr "Bind Bottom" msgid "finishings.6" msgstr "Cover" msgid "finishings.60" msgstr "Trim After Pages" msgid "finishings.61" msgstr "Trim After Documents" msgid "finishings.62" msgstr "Trim After Copies" msgid "finishings.63" msgstr "Trim After Job" msgid "finishings.7" msgstr "Bind" msgid "finishings.70" msgstr "Punch Top Left" msgid "finishings.71" msgstr "Punch Bottom Left" msgid "finishings.72" msgstr "Punch Top Right" msgid "finishings.73" msgstr "Punch Bottom Right" msgid "finishings.74" msgstr "Punch Dual Left" msgid "finishings.75" msgstr "Punch Dual Top" msgid "finishings.76" msgstr "Punch Dual Right" msgid "finishings.77" msgstr "Punch Dual Bottom" msgid "finishings.78" msgstr "Punch Triple Left" msgid "finishings.79" msgstr "Punch Triple Top" msgid "finishings.8" msgstr "Saddle Stitch" msgid "finishings.80" msgstr "Punch Triple Right" msgid "finishings.81" msgstr "Punch Triple Bottom" msgid "finishings.82" msgstr "Punch Quad Left" msgid "finishings.83" msgstr "Punch Quad Top" msgid "finishings.84" msgstr "Punch Quad Right" msgid "finishings.85" msgstr "Punch Quad Bottom" msgid "finishings.86" msgstr "Punch Multiple Left" msgid "finishings.87" msgstr "Punch Multiple Top" msgid "finishings.88" msgstr "Punch Multiple Right" msgid "finishings.89" msgstr "Punch Multiple Bottom" msgid "finishings.9" msgstr "Edge Stitch" msgid "finishings.90" msgstr "Fold Accordion" msgid "finishings.91" msgstr "Fold Double Gate" msgid "finishings.92" msgstr "Fold Gate" msgid "finishings.93" msgstr "Fold Half" msgid "finishings.94" msgstr "Fold Half Z" msgid "finishings.95" msgstr "Fold Left Gate" msgid "finishings.96" msgstr "Fold Letter" msgid "finishings.97" msgstr "Fold Parallel" msgid "finishings.98" msgstr "Fold Poster" msgid "finishings.99" msgstr "Fold Right Gate" msgid "folding" msgstr "Fold" msgid "folding-direction" msgstr "Folding Direction" msgid "folding-direction.inward" msgstr "Inward" msgid "folding-direction.outward" msgstr "Outward" msgid "folding-offset" msgstr "Fold Position" msgid "folding-reference-edge" msgstr "Folding Reference Edge" msgid "folding-reference-edge.bottom" msgstr "Bottom" msgid "folding-reference-edge.left" msgstr "Left" msgid "folding-reference-edge.right" msgstr "Right" msgid "folding-reference-edge.top" msgstr "Top" msgid "font-name-requested" msgstr "Font Name" msgid "font-size-requested" msgstr "Font Size" msgid "force-front-side" msgstr "Force Front Side" msgid "from-name" msgstr "From Name" msgid "held" msgstr "gehalten" msgid "help\t\tGet help on commands." msgstr "" msgid "idle" msgstr "inaktiv" msgid "imposition-template" msgstr "Imposition Template" msgid "imposition-template.none" msgstr "None" msgid "imposition-template.signature" msgstr "Signature" msgid "input-attributes" msgstr "Input Attributes" msgid "input-auto-scaling" msgstr "Scan Auto Scaling" msgid "input-auto-skew-correction" msgstr "Scan Auto Skew Correction" msgid "input-brightness" msgstr "Scan Brightness" msgid "input-color-mode" msgstr "Input Color Mode" msgid "input-color-mode.auto" msgstr "Automatic" msgid "input-color-mode.bi-level" msgstr "Bi-Level" msgid "input-color-mode.cmyk_16" msgstr "CMYK 16" msgid "input-color-mode.cmyk_8" msgstr "CMYK 8" msgid "input-color-mode.color" msgstr "Color" msgid "input-color-mode.color_8" msgstr "Color 8" msgid "input-color-mode.monochrome" msgstr "Monochrome" msgid "input-color-mode.monochrome_16" msgstr "Monochrome 16" msgid "input-color-mode.monochrome_4" msgstr "Monochrome 4" msgid "input-color-mode.monochrome_8" msgstr "Monochrome 8" msgid "input-color-mode.rgb_16" msgstr "RGB 16" msgid "input-color-mode.rgba_16" msgstr "RGBA 16" msgid "input-color-mode.rgba_8" msgstr "RGBA 8" msgid "input-content-type" msgstr "Input Content Type" msgid "input-content-type.auto" msgstr "Automatic" msgid "input-content-type.halftone" msgstr "Halftone" msgid "input-content-type.line-art" msgstr "Line Art" msgid "input-content-type.magazine" msgstr "Magazine" msgid "input-content-type.photo" msgstr "Photo" msgid "input-content-type.text" msgstr "Text" msgid "input-content-type.text-and-photo" msgstr "Text And Photo" msgid "input-contrast" msgstr "Scan Contrast" msgid "input-film-scan-mode" msgstr "Input Film Scan Mode" msgid "input-film-scan-mode.black-and-white-negative-film" msgstr "Black And White Negative Film" msgid "input-film-scan-mode.color-negative-film" msgstr "Color Negative Film" msgid "input-film-scan-mode.color-slide-film" msgstr "Color Slide Film" msgid "input-film-scan-mode.not-applicable" msgstr "Not Applicable" msgid "input-images-to-transfer" msgstr "Scan Images To Transfer" msgid "input-media" msgstr "Input Media" msgid "input-media.auto" msgstr "Automatic" msgid "input-orientation-requested" msgstr "Input Orientation" msgid "input-quality" msgstr "Input Quality" msgid "input-resolution" msgstr "Scan Resolution" msgid "input-scaling-height" msgstr "Scan Scaling Height" msgid "input-scaling-width" msgstr "Scan Scaling Width" msgid "input-scan-regions" msgstr "Scan Regions" msgid "input-sharpness" msgstr "Scan Sharpness" msgid "input-sides" msgstr "Input Sides" msgid "input-source" msgstr "Input Source" msgid "input-source.adf" msgstr "Adf" msgid "input-source.film-reader" msgstr "Film Reader" msgid "input-source.platen" msgstr "Platen" msgid "insert-after-page-number" msgstr "Insert Page Number" msgid "insert-count" msgstr "Insert Count" msgid "insert-sheet" msgstr "Insert Sheet" #, c-format msgid "ippfind: Bad regular expression: %s" msgstr "" msgid "ippfind: Cannot use --and after --or." msgstr "" #, c-format msgid "ippfind: Expected key name after %s." msgstr "" #, c-format msgid "ippfind: Expected port range after %s." msgstr "" #, c-format msgid "ippfind: Expected program after %s." msgstr "" #, c-format msgid "ippfind: Expected semi-colon after %s." msgstr "" msgid "ippfind: Missing close brace in substitution." msgstr "" msgid "ippfind: Missing close parenthesis." msgstr "" msgid "ippfind: Missing expression before \"--and\"." msgstr "" msgid "ippfind: Missing expression before \"--or\"." msgstr "" #, c-format msgid "ippfind: Missing key name after %s." msgstr "" msgid "ippfind: Missing open parenthesis." msgstr "" #, c-format msgid "ippfind: Missing program after %s." msgstr "" #, c-format msgid "ippfind: Missing regular expression after %s." msgstr "" #, c-format msgid "ippfind: Missing semi-colon after %s." msgstr "" msgid "ippfind: Out of memory." msgstr "" msgid "ippfind: Too many parenthesis." msgstr "" #, c-format msgid "ippfind: Unable to browse or resolve: %s" msgstr "" #, c-format msgid "ippfind: Unable to execute \"%s\": %s" msgstr "" #, c-format msgid "ippfind: Unable to use Bonjour: %s" msgstr "" #, c-format msgid "ippfind: Unknown variable \"{%s}\"." msgstr "" msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." msgstr "" #, c-format msgid "ipptool: Bad URI - %s." msgstr "" msgid "ipptool: Invalid seconds for \"-i\"." msgstr "" msgid "ipptool: May only specify a single URI." msgstr "" msgid "ipptool: Missing count for \"-n\"." msgstr "" msgid "ipptool: Missing filename for \"-f\"." msgstr "" msgid "ipptool: Missing name=value for \"-d\"." msgstr "" msgid "ipptool: Missing seconds for \"-i\"." msgstr "" msgid "ipptool: URI required before test file." msgstr "" #, c-format msgid "ipptool: Unknown option \"-%c\"." msgstr "" msgid "job-account-id" msgstr "Job Account ID" msgid "job-account-type" msgstr "Job Account Type" msgid "job-account-type.general" msgstr "General" msgid "job-account-type.group" msgstr "Group" msgid "job-account-type.none" msgstr "None" msgid "job-accounting-output-bin" msgstr "Job Accounting Output Bin" msgid "job-accounting-sheets" msgstr "Job Accounting Sheets" msgid "job-accounting-sheets-type" msgstr "Job Accounting Sheets Type" msgid "job-accounting-sheets-type.none" msgstr "None" msgid "job-accounting-sheets-type.standard" msgstr "Standard" msgid "job-accounting-user-id" msgstr "Job Accounting User ID" msgid "job-collation-type" msgstr "Job Collation Type" msgid "job-collation-type.3" msgstr "Uncollated Sheets" msgid "job-collation-type.4" msgstr "Collated Documents" msgid "job-collation-type.5" msgstr "Uncollated Documents" msgid "job-copies" msgstr "Job Copies" msgid "job-cover-back" msgstr "Job Cover Back" msgid "job-cover-front" msgstr "Job Cover Front" msgid "job-delay-output-until" msgstr "Job Delay Output Until" msgid "job-delay-output-until-time" msgstr "Job Delay Output Until Time" msgid "job-delay-output-until.day-time" msgstr "Day Time" msgid "job-delay-output-until.evening" msgstr "Evening" msgid "job-delay-output-until.indefinite" msgstr "Indefinite" msgid "job-delay-output-until.night" msgstr "Night" msgid "job-delay-output-until.no-delay-output" msgstr "No Delay Output" msgid "job-delay-output-until.second-shift" msgstr "Second Shift" msgid "job-delay-output-until.third-shift" msgstr "Third Shift" msgid "job-delay-output-until.weekend" msgstr "Weekend" msgid "job-error-action" msgstr "Job Error Action" msgid "job-error-action.abort-job" msgstr "Abort Job" msgid "job-error-action.cancel-job" msgstr "Cancel Job" msgid "job-error-action.continue-job" msgstr "Continue Job" msgid "job-error-action.suspend-job" msgstr "Suspend Job" msgid "job-error-sheet" msgstr "Job Error Sheet" msgid "job-error-sheet-type" msgstr "Job Error Sheet Type" msgid "job-error-sheet-type.none" msgstr "None" msgid "job-error-sheet-type.standard" msgstr "Standard" msgid "job-error-sheet-when" msgstr "Job Error Sheet When" msgid "job-error-sheet-when.always" msgstr "Always" msgid "job-error-sheet-when.on-error" msgstr "On Error" msgid "job-finishings" msgstr "Job Finishings" msgid "job-hold-until" msgstr "Hold Until" msgid "job-hold-until-time" msgstr "Job Hold Until Time" msgid "job-hold-until.day-time" msgstr "Day Time" msgid "job-hold-until.evening" msgstr "Evening" msgid "job-hold-until.indefinite" msgstr "Released" msgid "job-hold-until.night" msgstr "Night" msgid "job-hold-until.no-hold" msgstr "No Hold" msgid "job-hold-until.second-shift" msgstr "Second Shift" msgid "job-hold-until.third-shift" msgstr "Third Shift" msgid "job-hold-until.weekend" msgstr "Weekend" msgid "job-mandatory-attributes" msgstr "Job Mandatory Attributes" msgid "job-name" msgstr "Job Name" msgid "job-phone-number" msgstr "Job Phone Number" msgid "job-printer-uri attribute missing." msgstr "job-printer-uri Attribut fehlt." msgid "job-priority" msgstr "Job Priority" msgid "job-recipient-name" msgstr "Job Recipient Name" msgid "job-save-disposition" msgstr "Job Save Disposition" msgid "job-sheet-message" msgstr "Job Sheet Message" msgid "job-sheets" msgstr "Banner Page" msgid "job-sheets-col" msgstr "Banner Page" msgid "job-sheets.first-print-stream-page" msgstr "First Print Stream Page" msgid "job-sheets.job-both-sheet" msgstr "Start and End Sheets" msgid "job-sheets.job-end-sheet" msgstr "End Sheet" msgid "job-sheets.job-start-sheet" msgstr "Start Sheet" msgid "job-sheets.none" msgstr "None" msgid "job-sheets.standard" msgstr "Standard" msgid "job-state" msgstr "Job State" msgid "job-state-message" msgstr "Job State Message" msgid "job-state-reasons" msgstr "Detailed Job State" msgid "job-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "job-state-reasons.account-authorization-failed" msgstr "Account Authorization Failed" msgid "job-state-reasons.account-closed" msgstr "Account Closed" msgid "job-state-reasons.account-info-needed" msgstr "Account Info Needed" msgid "job-state-reasons.account-limit-reached" msgstr "Account Limit Reached" msgid "job-state-reasons.compression-error" msgstr "Compression Error" msgid "job-state-reasons.conflicting-attributes" msgstr "Conflicting Attributes" msgid "job-state-reasons.connected-to-destination" msgstr "Connected To Destination" msgid "job-state-reasons.connecting-to-destination" msgstr "Connecting To Destination" msgid "job-state-reasons.destination-uri-failed" msgstr "Destination Uri Failed" msgid "job-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "job-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "job-state-reasons.document-access-error" msgstr "Document Access Error" msgid "job-state-reasons.document-format-error" msgstr "Document Format Error" msgid "job-state-reasons.document-password-error" msgstr "Document Password Error" msgid "job-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "job-state-reasons.document-security-error" msgstr "Document Security Error" msgid "job-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "job-state-reasons.errors-detected" msgstr "Errors Detected" msgid "job-state-reasons.job-canceled-at-device" msgstr "Job Canceled At Device" msgid "job-state-reasons.job-canceled-by-operator" msgstr "Job Canceled By Operator" msgid "job-state-reasons.job-canceled-by-user" msgstr "Job Canceled By User" msgid "job-state-reasons.job-completed-successfully" msgstr "Job Completed Successfully" msgid "job-state-reasons.job-completed-with-errors" msgstr "Job Completed With Errors" msgid "job-state-reasons.job-completed-with-warnings" msgstr "Job Completed With Warnings" msgid "job-state-reasons.job-data-insufficient" msgstr "Job Data Insufficient" msgid "job-state-reasons.job-delay-output-until-specified" msgstr "Job Delay Output Until Specified" msgid "job-state-reasons.job-digital-signature-wait" msgstr "Job Digital Signature Wait" msgid "job-state-reasons.job-fetchable" msgstr "Job Fetchable" msgid "job-state-reasons.job-held-for-review" msgstr "Job Held For Review" msgid "job-state-reasons.job-hold-until-specified" msgstr "Job Hold Until Specified" msgid "job-state-reasons.job-incoming" msgstr "Job Incoming" msgid "job-state-reasons.job-interpreting" msgstr "Job Interpreting" msgid "job-state-reasons.job-outgoing" msgstr "Job Outgoing" msgid "job-state-reasons.job-password-wait" msgstr "Job Password Wait" msgid "job-state-reasons.job-printed-successfully" msgstr "Job Printed Successfully" msgid "job-state-reasons.job-printed-with-errors" msgstr "Job Printed With Errors" msgid "job-state-reasons.job-printed-with-warnings" msgstr "Job Printed With Warnings" msgid "job-state-reasons.job-printing" msgstr "Job Printing" msgid "job-state-reasons.job-queued" msgstr "Job Queued" msgid "job-state-reasons.job-queued-for-marker" msgstr "Job Queued For Marker" msgid "job-state-reasons.job-release-wait" msgstr "Job Release Wait" msgid "job-state-reasons.job-restartable" msgstr "Job Restartable" msgid "job-state-reasons.job-resuming" msgstr "Job Resuming" msgid "job-state-reasons.job-saved-successfully" msgstr "Job Saved Successfully" msgid "job-state-reasons.job-saved-with-errors" msgstr "Job Saved With Errors" msgid "job-state-reasons.job-saved-with-warnings" msgstr "Job Saved With Warnings" msgid "job-state-reasons.job-saving" msgstr "Job Saving" msgid "job-state-reasons.job-spooling" msgstr "Job Spooling" msgid "job-state-reasons.job-streaming" msgstr "Job Streaming" msgid "job-state-reasons.job-suspended" msgstr "Job Suspended" msgid "job-state-reasons.job-suspended-by-operator" msgstr "Job Suspended By Operator" msgid "job-state-reasons.job-suspended-by-system" msgstr "Job Suspended By System" msgid "job-state-reasons.job-suspended-by-user" msgstr "Job Suspended By User" msgid "job-state-reasons.job-suspending" msgstr "Job Suspending" msgid "job-state-reasons.job-transferring" msgstr "Job Transferring" msgid "job-state-reasons.job-transforming" msgstr "Job Transforming" msgid "job-state-reasons.none" msgstr "None" msgid "job-state-reasons.printer-stopped" msgstr "Printer Stopped" msgid "job-state-reasons.printer-stopped-partly" msgstr "Printer Stopped Partly" msgid "job-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "job-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "job-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "job-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "job-state-reasons.service-off-line" msgstr "Service Off Line" msgid "job-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "job-state-reasons.unsupported-attributes-or-values" msgstr "Unsupported Attributes Or Values" msgid "job-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "job-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "job-state-reasons.waiting-for-user-action" msgstr "Waiting For User Action" msgid "job-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "job-state.3" msgstr "Pending" msgid "job-state.4" msgstr "Pending Held" msgid "job-state.5" msgstr "Processing" msgid "job-state.6" msgstr "Processing Stopped" msgid "job-state.7" msgstr "Canceled" msgid "job-state.8" msgstr "Aborted" msgid "job-state.9" msgstr "Completed" msgid "laminating" msgstr "Laminate Pages" msgid "laminating-sides" msgstr "Laminating Sides" msgid "laminating-sides.back" msgstr "Back" msgid "laminating-sides.both" msgstr "Both" msgid "laminating-sides.front" msgstr "Front" msgid "laminating-type" msgstr "Laminating Type" msgid "laminating-type.archival" msgstr "Archival" msgid "laminating-type.glossy" msgstr "Glossy" msgid "laminating-type.high-gloss" msgstr "High Gloss" msgid "laminating-type.matte" msgstr "Matte" msgid "laminating-type.semi-gloss" msgstr "Semi-Gloss" msgid "laminating-type.translucent" msgstr "Translucent" msgid "logo" msgstr "Logo" msgid "lpadmin: Class name can only contain printable characters." msgstr "lpadmin: Klassenname darf nur druckbare Zeichen enthalten." #, c-format msgid "lpadmin: Expected PPD after \"-%c\" option." msgstr "lpadmin: Nach der \"-%c\" Option PPD erwartet." msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option." msgstr "" "lpadmin: Nach der \"-u\" Option wird eine allow/deny:userlist erwartet." msgid "lpadmin: Expected class after \"-r\" option." msgstr "lpadmin: Klasse nach der \"-r\" Option erwartet." msgid "lpadmin: Expected class name after \"-c\" option." msgstr "lpadmin: Klasse nach der \"-c\" Option erwartet." msgid "lpadmin: Expected description after \"-D\" option." msgstr "lpadmin: BEschreibung nach der \"-D\" Option erwartet." msgid "lpadmin: Expected device URI after \"-v\" option." msgstr "lpadmin: Geräte-URI nach der \"-v\" Option erwartet." msgid "lpadmin: Expected file type(s) after \"-I\" option." msgstr "lpadmin: Dateitype nach der \"-I\" Option erwartet." msgid "lpadmin: Expected hostname after \"-h\" option." msgstr "lpadmin: Hostname nach der \"-h\" Option erwartet." msgid "lpadmin: Expected location after \"-L\" option." msgstr "lpadmin: Ort nach der \"-L\" Option erwartet." msgid "lpadmin: Expected model after \"-m\" option." msgstr "lpadmin: Modellangabe nach der \"-m\" Option erwartet." msgid "lpadmin: Expected name after \"-R\" option." msgstr "lpadmin: Name nach der \"-R\" Option erwartet." msgid "lpadmin: Expected name=value after \"-o\" option." msgstr "lpadmin: Name=Wert nach der \"-o\" Option erwartet." msgid "lpadmin: Expected printer after \"-p\" option." msgstr "lpadmin: Drucker nach der \"-p\" Option erwartet." msgid "lpadmin: Expected printer name after \"-d\" option." msgstr "lpadmin: Druckername nach der \"-d\" Option erwartet." msgid "lpadmin: Expected printer or class after \"-x\" option." msgstr "lpadmin: Drucker oder Klasse nach der \"-x\" Option erwartet." msgid "lpadmin: No member names were seen." msgstr "lpadmin: Keine Mitgleidernamen erkennbar." #, c-format msgid "lpadmin: Printer %s is already a member of class %s." msgstr "lpadmin: Drucker %s ist bereits Mitglied der Klasse %s." #, c-format msgid "lpadmin: Printer %s is not a member of class %s." msgstr "lpadmin: Drucker %s ist kein Mitglied der Klasse %s." msgid "lpadmin: Printer name can only contain printable characters." msgstr "lpadmin: Druckername darf nur druckbare Zeichen enthalten." msgid "" "lpadmin: Raw queues are deprecated and will stop working in a future version " "of CUPS." msgstr "" msgid "" "lpadmin: System V interface scripts are no longer supported for security " "reasons." msgstr "" msgid "" "lpadmin: Unable to add a printer to the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: Kann Drucker nicht zur Klasse hinzufügen:\n" " Der Druckername muss zuerst angegeben werden." #, c-format msgid "lpadmin: Unable to connect to server: %s" msgstr "lpadmin: Kann nicht mit dem Server %s verbinden." msgid "lpadmin: Unable to create temporary file" msgstr "lpadmin: Temporäre Datei kann nicht angelegt werden" msgid "" "lpadmin: Unable to delete option:\n" " You must specify a printer name first." msgstr "" #, c-format msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d." msgstr "" #, c-format msgid "lpadmin: Unable to open PPD file \"%s\" - %s" msgstr "lpadmin: Kann PPD Datei \"%s\" - %s nicht öffnen" msgid "" "lpadmin: Unable to remove a printer from the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: Entfernen des Drucker aus der Klasse nicht möglich:\n" " Sie müssen zuerst einen Druckernamen angeben." msgid "" "lpadmin: Unable to set the printer options:\n" " You must specify a printer name first." msgstr "" "lpadmin: Festlegen der Druckeroptionen nicht möglich:\n" " Sie müssen zuerst einen Druckernamen angeben." #, c-format msgid "lpadmin: Unknown allow/deny option \"%s\"." msgstr "lpadmin: Unbekannte Erlaubnis/Ablehnungs-Option »%s«." #, c-format msgid "lpadmin: Unknown argument \"%s\"." msgstr "lpadmin: unbekanntes Argument \"%s\"." #, c-format msgid "lpadmin: Unknown option \"%c\"." msgstr "lpadmin: Unbekannte Option »%c«." msgid "lpadmin: Use the 'everywhere' model for shared printers." msgstr "" msgid "lpadmin: Warning - content type list ignored." msgstr "lpadmin: Warnung - Inhaltstypliste ignoriert." msgid "lpc> " msgstr "lpc> " msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"." msgstr "" msgid "lpinfo: Expected language after \"--language\"." msgstr "lpinfo: Sprache nach \"--language\" erwartet." msgid "lpinfo: Expected make and model after \"--make-and-model\"." msgstr "" msgid "lpinfo: Expected product string after \"--product\"." msgstr "" msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"." msgstr "" msgid "lpinfo: Expected scheme list after \"--include-schemes\"." msgstr "" msgid "lpinfo: Expected timeout after \"--timeout\"." msgstr "" #, c-format msgid "lpmove: Unable to connect to server: %s" msgstr "lpmove: Verbindung zum Server »%s« nicht möglich" #, c-format msgid "lpmove: Unknown argument \"%s\"." msgstr "lpmove: Unbekanntes Argument »%s«." msgid "lpoptions: No printers." msgstr "lpoptions: Keine Drucker." #, c-format msgid "lpoptions: Unable to add printer or instance: %s" msgstr "lpoptions: Hinzufügen von Drucker oder Instanz nicht möglich: %s" #, c-format msgid "lpoptions: Unable to get PPD file for %s: %s" msgstr "lpoptions: Keine PPD-Datei für %s: %s verfügbar" #, c-format msgid "lpoptions: Unable to open PPD file for %s." msgstr "lpoptions: Keine PPD-Datei für %s verfügbar." msgid "lpoptions: Unknown printer or class." msgstr "lpoptions: Unbekannter Drucker oder Klasse." #, c-format msgid "" "lpstat: error - %s environment variable names non-existent destination \"%s" "\"." msgstr "" msgid "material-amount" msgstr "Amount of Material" msgid "material-amount-units" msgstr "Material Amount Units" msgid "material-amount-units.g" msgstr "G" msgid "material-amount-units.kg" msgstr "Kg" msgid "material-amount-units.l" msgstr "L" msgid "material-amount-units.m" msgstr "M" msgid "material-amount-units.ml" msgstr "Ml" msgid "material-amount-units.mm" msgstr "Mm" msgid "material-color" msgstr "Material Color" msgid "material-diameter" msgstr "Material Diameter" msgid "material-diameter-tolerance" msgstr "Material Diameter Tolerance" msgid "material-fill-density" msgstr "Material Fill Density" msgid "material-name" msgstr "Material Name" msgid "material-purpose" msgstr "Material Purpose" msgid "material-purpose.all" msgstr "All" msgid "material-purpose.base" msgstr "Base" msgid "material-purpose.in-fill" msgstr "In Fill" msgid "material-purpose.shell" msgstr "Shell" msgid "material-purpose.support" msgstr "Support" msgid "material-rate" msgstr "Feed Rate" msgid "material-rate-units" msgstr "Material Rate Units" msgid "material-rate-units.mg_second" msgstr "Mg Second" msgid "material-rate-units.ml_second" msgstr "Ml Second" msgid "material-rate-units.mm_second" msgstr "Mm Second" msgid "material-shell-thickness" msgstr "Material Shell Thickness" msgid "material-temperature" msgstr "Material Temperature" msgid "material-type" msgstr "Material Type" msgid "material-type.abs" msgstr "Abs" msgid "material-type.abs-carbon-fiber" msgstr "Abs Carbon Fiber" msgid "material-type.abs-carbon-nanotube" msgstr "Abs Carbon Nanotube" msgid "material-type.chocolate" msgstr "Chocolate" msgid "material-type.gold" msgstr "Gold" msgid "material-type.nylon" msgstr "Nylon" msgid "material-type.pet" msgstr "Pet" msgid "material-type.photopolymer" msgstr "Photopolymer" msgid "material-type.pla" msgstr "Pla" msgid "material-type.pla-conductive" msgstr "Pla Conductive" msgid "material-type.pla-flexible" msgstr "Pla Flexible" msgid "material-type.pla-magnetic" msgstr "Pla Magnetic" msgid "material-type.pla-steel" msgstr "Pla Steel" msgid "material-type.pla-stone" msgstr "Pla Stone" msgid "material-type.pla-wood" msgstr "Pla Wood" msgid "material-type.polycarbonate" msgstr "Polycarbonate" msgid "material-type.pva-dissolvable" msgstr "Dissolvable PVA" msgid "material-type.silver" msgstr "Silver" msgid "material-type.titanium" msgstr "Titanium" msgid "material-type.wax" msgstr "Wax" msgid "materials-col" msgstr "Materials" msgid "media" msgstr "Media" msgid "media-back-coating" msgstr "Media Back Coating" msgid "media-back-coating.glossy" msgstr "Glossy" msgid "media-back-coating.high-gloss" msgstr "High Gloss" msgid "media-back-coating.matte" msgstr "Matte" msgid "media-back-coating.none" msgstr "None" msgid "media-back-coating.satin" msgstr "Satin" msgid "media-back-coating.semi-gloss" msgstr "Semi-Gloss" msgid "media-bottom-margin" msgstr "Media Bottom Margin" msgid "media-col" msgstr "Media" msgid "media-color" msgstr "Media Color" msgid "media-color.black" msgstr "Black" msgid "media-color.blue" msgstr "Blue" msgid "media-color.brown" msgstr "Brown" msgid "media-color.buff" msgstr "Buff" msgid "media-color.clear-black" msgstr "Clear Black" msgid "media-color.clear-blue" msgstr "Clear Blue" msgid "media-color.clear-brown" msgstr "Clear Brown" msgid "media-color.clear-buff" msgstr "Clear Buff" msgid "media-color.clear-cyan" msgstr "Clear Cyan" msgid "media-color.clear-gold" msgstr "Clear Gold" msgid "media-color.clear-goldenrod" msgstr "Clear Goldenrod" msgid "media-color.clear-gray" msgstr "Clear Gray" msgid "media-color.clear-green" msgstr "Clear Green" msgid "media-color.clear-ivory" msgstr "Clear Ivory" msgid "media-color.clear-magenta" msgstr "Clear Magenta" msgid "media-color.clear-multi-color" msgstr "Clear Multi Color" msgid "media-color.clear-mustard" msgstr "Clear Mustard" msgid "media-color.clear-orange" msgstr "Clear Orange" msgid "media-color.clear-pink" msgstr "Clear Pink" msgid "media-color.clear-red" msgstr "Clear Red" msgid "media-color.clear-silver" msgstr "Clear Silver" msgid "media-color.clear-turquoise" msgstr "Clear Turquoise" msgid "media-color.clear-violet" msgstr "Clear Violet" msgid "media-color.clear-white" msgstr "Clear White" msgid "media-color.clear-yellow" msgstr "Clear Yellow" msgid "media-color.cyan" msgstr "Cyan" msgid "media-color.dark-blue" msgstr "Dark Blue" msgid "media-color.dark-brown" msgstr "Dark Brown" msgid "media-color.dark-buff" msgstr "Dark Buff" msgid "media-color.dark-cyan" msgstr "Dark Cyan" msgid "media-color.dark-gold" msgstr "Dark Gold" msgid "media-color.dark-goldenrod" msgstr "Dark Goldenrod" msgid "media-color.dark-gray" msgstr "Dark Gray" msgid "media-color.dark-green" msgstr "Dark Green" msgid "media-color.dark-ivory" msgstr "Dark Ivory" msgid "media-color.dark-magenta" msgstr "Dark Magenta" msgid "media-color.dark-mustard" msgstr "Dark Mustard" msgid "media-color.dark-orange" msgstr "Dark Orange" msgid "media-color.dark-pink" msgstr "Dark Pink" msgid "media-color.dark-red" msgstr "Dark Red" msgid "media-color.dark-silver" msgstr "Dark Silver" msgid "media-color.dark-turquoise" msgstr "Dark Turquoise" msgid "media-color.dark-violet" msgstr "Dark Violet" msgid "media-color.dark-yellow" msgstr "Dark Yellow" msgid "media-color.gold" msgstr "Gold" msgid "media-color.goldenrod" msgstr "Goldenrod" msgid "media-color.gray" msgstr "Gray" msgid "media-color.green" msgstr "Green" msgid "media-color.ivory" msgstr "Ivory" msgid "media-color.light-black" msgstr "Light Black" msgid "media-color.light-blue" msgstr "Light Blue" msgid "media-color.light-brown" msgstr "Light Brown" msgid "media-color.light-buff" msgstr "Light Buff" msgid "media-color.light-cyan" msgstr "Light Cyan" msgid "media-color.light-gold" msgstr "Light Gold" msgid "media-color.light-goldenrod" msgstr "Light Goldenrod" msgid "media-color.light-gray" msgstr "Light Gray" msgid "media-color.light-green" msgstr "Light Green" msgid "media-color.light-ivory" msgstr "Light Ivory" msgid "media-color.light-magenta" msgstr "Light Magenta" msgid "media-color.light-mustard" msgstr "Light Mustard" msgid "media-color.light-orange" msgstr "Light Orange" msgid "media-color.light-pink" msgstr "Light Pink" msgid "media-color.light-red" msgstr "Light Red" msgid "media-color.light-silver" msgstr "Light Silver" msgid "media-color.light-turquoise" msgstr "Light Turquoise" msgid "media-color.light-violet" msgstr "Light Violet" msgid "media-color.light-yellow" msgstr "Light Yellow" msgid "media-color.magenta" msgstr "Magenta" msgid "media-color.multi-color" msgstr "Multi-Color" msgid "media-color.mustard" msgstr "Mustard" msgid "media-color.no-color" msgstr "No Color" msgid "media-color.orange" msgstr "Orange" msgid "media-color.pink" msgstr "Pink" msgid "media-color.red" msgstr "Red" msgid "media-color.silver" msgstr "Silver" msgid "media-color.turquoise" msgstr "Turquoise" msgid "media-color.violet" msgstr "Violet" msgid "media-color.white" msgstr "White" msgid "media-color.yellow" msgstr "Yellow" msgid "media-front-coating" msgstr "Media Front Coating" msgid "media-grain" msgstr "Media Grain" msgid "media-grain.x-direction" msgstr "Cross-Feed Direction" msgid "media-grain.y-direction" msgstr "Feed Direction" msgid "media-hole-count" msgstr "Media Hole Count" msgid "media-info" msgstr "Media Info" msgid "media-input-tray-check" msgstr "Media Input Tray Check" msgid "media-left-margin" msgstr "Media Left Margin" msgid "media-pre-printed" msgstr "Media Preprinted" msgid "media-pre-printed.blank" msgstr "Blank" msgid "media-pre-printed.letter-head" msgstr "Letterhead" msgid "media-pre-printed.pre-printed" msgstr "Preprinted" msgid "media-recycled" msgstr "Media Recycled" msgid "media-recycled.none" msgstr "None" msgid "media-recycled.standard" msgstr "Standard" msgid "media-right-margin" msgstr "Media Right Margin" msgid "media-size" msgstr "Media Dimensions" msgid "media-size-name" msgstr "Media Name" msgid "media-source" msgstr "Media Source" msgid "media-source.alternate" msgstr "Alternate" msgid "media-source.alternate-roll" msgstr "Alternate Roll" msgid "media-source.auto" msgstr "Automatic" msgid "media-source.bottom" msgstr "Bottom" msgid "media-source.by-pass-tray" msgstr "By Pass Tray" msgid "media-source.center" msgstr "Center" msgid "media-source.disc" msgstr "Disc" msgid "media-source.envelope" msgstr "Envelope" msgid "media-source.hagaki" msgstr "Hagaki" msgid "media-source.large-capacity" msgstr "Large Capacity" msgid "media-source.left" msgstr "Left" msgid "media-source.main" msgstr "Main" msgid "media-source.main-roll" msgstr "Main Roll" msgid "media-source.manual" msgstr "Manual" msgid "media-source.middle" msgstr "Middle" msgid "media-source.photo" msgstr "Photo" msgid "media-source.rear" msgstr "Rear" msgid "media-source.right" msgstr "Right" msgid "media-source.roll-1" msgstr "Roll 1" msgid "media-source.roll-10" msgstr "Roll 10" msgid "media-source.roll-2" msgstr "Roll 2" msgid "media-source.roll-3" msgstr "Roll 3" msgid "media-source.roll-4" msgstr "Roll 4" msgid "media-source.roll-5" msgstr "Roll 5" msgid "media-source.roll-6" msgstr "Roll 6" msgid "media-source.roll-7" msgstr "Roll 7" msgid "media-source.roll-8" msgstr "Roll 8" msgid "media-source.roll-9" msgstr "Roll 9" msgid "media-source.side" msgstr "Side" msgid "media-source.top" msgstr "Top" msgid "media-source.tray-1" msgstr "Tray 1" msgid "media-source.tray-10" msgstr "Tray 10" msgid "media-source.tray-11" msgstr "Tray 11" msgid "media-source.tray-12" msgstr "Tray 12" msgid "media-source.tray-13" msgstr "Tray 13" msgid "media-source.tray-14" msgstr "Tray 14" msgid "media-source.tray-15" msgstr "Tray 15" msgid "media-source.tray-16" msgstr "Tray 16" msgid "media-source.tray-17" msgstr "Tray 17" msgid "media-source.tray-18" msgstr "Tray 18" msgid "media-source.tray-19" msgstr "Tray 19" msgid "media-source.tray-2" msgstr "Tray 2" msgid "media-source.tray-20" msgstr "Tray 20" msgid "media-source.tray-3" msgstr "Tray 3" msgid "media-source.tray-4" msgstr "Tray 4" msgid "media-source.tray-5" msgstr "Tray 5" msgid "media-source.tray-6" msgstr "Tray 6" msgid "media-source.tray-7" msgstr "Tray 7" msgid "media-source.tray-8" msgstr "Tray 8" msgid "media-source.tray-9" msgstr "Tray 9" msgid "media-thickness" msgstr "Media Thickness" msgid "media-tooth" msgstr "Media Tooth" msgid "media-tooth.antique" msgstr "Antique" msgid "media-tooth.calendared" msgstr "Calendared" msgid "media-tooth.coarse" msgstr "Coarse" msgid "media-tooth.fine" msgstr "Fine" msgid "media-tooth.linen" msgstr "Linen" msgid "media-tooth.medium" msgstr "Medium" msgid "media-tooth.smooth" msgstr "Smooth" msgid "media-tooth.stipple" msgstr "Stipple" msgid "media-tooth.uncalendared" msgstr "Uncalendared" msgid "media-tooth.vellum" msgstr "Vellum" msgid "media-top-margin" msgstr "Media Top Margin" msgid "media-type" msgstr "Media Type" msgid "media-type.aluminum" msgstr "Aluminum" msgid "media-type.auto" msgstr "Automatic" msgid "media-type.back-print-film" msgstr "Back Print Film" msgid "media-type.cardboard" msgstr "Cardboard" msgid "media-type.cardstock" msgstr "Cardstock" msgid "media-type.cd" msgstr "CD" msgid "media-type.com.hp.advanced-photo" msgstr "Advanced Photo Paper" msgid "media-type.com.hp.brochure-glossy" msgstr "Glossy Brochure Paper" msgid "media-type.com.hp.brochure-matte" msgstr "Matte Brochure Paper" msgid "media-type.com.hp.cover-matte" msgstr "Matte Cover Paper" msgid "media-type.com.hp.ecosmart-lite" msgstr "Office Recycled Paper" msgid "media-type.com.hp.everyday-glossy" msgstr "Everyday Glossy Photo Paper" msgid "media-type.com.hp.everyday-matte" msgstr "Everyday Matte Paper" msgid "media-type.com.hp.extra-heavy" msgstr "Extra Heavyweight Paper" msgid "media-type.com.hp.intermediate" msgstr "Multipurpose Paper" msgid "media-type.com.hp.mid-weight" msgstr "Mid-Weight Paper" msgid "media-type.com.hp.premium-inkjet" msgstr "Premium Inkjet Paper" msgid "media-type.com.hp.premium-photo" msgstr "Premium Photo Glossy Paper" msgid "media-type.com.hp.premium-presentation-matte" msgstr "Premium Presentation Matte Paper" msgid "media-type.continuous" msgstr "Continuous" msgid "media-type.continuous-long" msgstr "Continuous Long" msgid "media-type.continuous-short" msgstr "Continuous Short" msgid "media-type.corrugated-board" msgstr "Corrugated Board" msgid "media-type.disc" msgstr "Optical Disc" msgid "media-type.disc-glossy" msgstr "Glossy Optical Disc" msgid "media-type.disc-high-gloss" msgstr "High Gloss Optical Disc" msgid "media-type.disc-matte" msgstr "Matte Optical Disc" msgid "media-type.disc-satin" msgstr "Satin Optical Disc" msgid "media-type.disc-semi-gloss" msgstr "Semi-Gloss Optical Disc" msgid "media-type.double-wall" msgstr "Double Wall" msgid "media-type.dry-film" msgstr "Dry Film" msgid "media-type.dvd" msgstr "DVD" msgid "media-type.embossing-foil" msgstr "Embossing Foil" msgid "media-type.end-board" msgstr "End Board" msgid "media-type.envelope" msgstr "Envelope" msgid "media-type.envelope-archival" msgstr "Archival Envelope" msgid "media-type.envelope-bond" msgstr "Bond Envelope" msgid "media-type.envelope-coated" msgstr "Coated Envelope" msgid "media-type.envelope-cotton" msgstr "Cotton Envelope" msgid "media-type.envelope-fine" msgstr "Fine Envelope" msgid "media-type.envelope-heavyweight" msgstr "Heavyweight Envelope" msgid "media-type.envelope-inkjet" msgstr "Inkjet Envelope" msgid "media-type.envelope-lightweight" msgstr "Lightweight Envelope" msgid "media-type.envelope-plain" msgstr "Plain Envelope" msgid "media-type.envelope-preprinted" msgstr "Preprinted Envelope" msgid "media-type.envelope-window" msgstr "Windowed Envelope" msgid "media-type.fabric" msgstr "Fabric" msgid "media-type.fabric-archival" msgstr "Archival Fabric" msgid "media-type.fabric-glossy" msgstr "Glossy Fabric" msgid "media-type.fabric-high-gloss" msgstr "High Gloss Fabric" msgid "media-type.fabric-matte" msgstr "Matte Fabric" msgid "media-type.fabric-semi-gloss" msgstr "Semi-Gloss Fabric" msgid "media-type.fabric-waterproof" msgstr "Waterproof Fabric" msgid "media-type.film" msgstr "Film" msgid "media-type.flexo-base" msgstr "Flexo Base" msgid "media-type.flexo-photo-polymer" msgstr "Flexo Photo Polymer" msgid "media-type.flute" msgstr "Flute" msgid "media-type.foil" msgstr "Foil" msgid "media-type.full-cut-tabs" msgstr "Full Cut Tabs" msgid "media-type.glass" msgstr "Glass" msgid "media-type.glass-colored" msgstr "Glass Colored" msgid "media-type.glass-opaque" msgstr "Glass Opaque" msgid "media-type.glass-surfaced" msgstr "Glass Surfaced" msgid "media-type.glass-textured" msgstr "Glass Textured" msgid "media-type.gravure-cylinder" msgstr "Gravure Cylinder" msgid "media-type.image-setter-paper" msgstr "Image Setter Paper" msgid "media-type.imaging-cylinder" msgstr "Imaging Cylinder" msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon-photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon_photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.labels" msgstr "Labels" msgid "media-type.labels-colored" msgstr "Colored Labels" msgid "media-type.labels-glossy" msgstr "Glossy Labels" msgid "media-type.labels-high-gloss" msgstr "High Gloss Labels" msgid "media-type.labels-inkjet" msgstr "Inkjet Labels" msgid "media-type.labels-matte" msgstr "Matte Labels" msgid "media-type.labels-permanent" msgstr "Permanent Labels" msgid "media-type.labels-satin" msgstr "Satin Labels" msgid "media-type.labels-security" msgstr "Security Labels" msgid "media-type.labels-semi-gloss" msgstr "Semi-Gloss Labels" msgid "media-type.laminating-foil" msgstr "Laminating Foil" msgid "media-type.letterhead" msgstr "Letterhead" msgid "media-type.metal" msgstr "Metal" msgid "media-type.metal-glossy" msgstr "Metal Glossy" msgid "media-type.metal-high-gloss" msgstr "Metal High Gloss" msgid "media-type.metal-matte" msgstr "Metal Matte" msgid "media-type.metal-satin" msgstr "Metal Satin" msgid "media-type.metal-semi-gloss" msgstr "Metal Semi Gloss" msgid "media-type.mounting-tape" msgstr "Mounting Tape" msgid "media-type.multi-layer" msgstr "Multi Layer" msgid "media-type.multi-part-form" msgstr "Multi Part Form" msgid "media-type.other" msgstr "Other" msgid "media-type.paper" msgstr "Paper" msgid "media-type.photographic" msgstr "Photo Paper" msgid "media-type.photographic-archival" msgstr "Photographic Archival" msgid "media-type.photographic-film" msgstr "Photo Film" msgid "media-type.photographic-glossy" msgstr "Glossy Photo Paper" msgid "media-type.photographic-high-gloss" msgstr "High Gloss Photo Paper" msgid "media-type.photographic-matte" msgstr "Matte Photo Paper" msgid "media-type.photographic-satin" msgstr "Satin Photo Paper" msgid "media-type.photographic-semi-gloss" msgstr "Semi-Gloss Photo Paper" msgid "media-type.plastic" msgstr "Plastic" msgid "media-type.plastic-archival" msgstr "Plastic Archival" msgid "media-type.plastic-colored" msgstr "Plastic Colored" msgid "media-type.plastic-glossy" msgstr "Plastic Glossy" msgid "media-type.plastic-high-gloss" msgstr "Plastic High Gloss" msgid "media-type.plastic-matte" msgstr "Plastic Matte" msgid "media-type.plastic-satin" msgstr "Plastic Satin" msgid "media-type.plastic-semi-gloss" msgstr "Plastic Semi Gloss" msgid "media-type.plate" msgstr "Plate" msgid "media-type.polyester" msgstr "Polyester" msgid "media-type.pre-cut-tabs" msgstr "Pre Cut Tabs" msgid "media-type.roll" msgstr "Roll" msgid "media-type.screen" msgstr "Screen" msgid "media-type.screen-paged" msgstr "Screen Paged" msgid "media-type.self-adhesive" msgstr "Self Adhesive" msgid "media-type.self-adhesive-film" msgstr "Self Adhesive Film" msgid "media-type.shrink-foil" msgstr "Shrink Foil" msgid "media-type.single-face" msgstr "Single Face" msgid "media-type.single-wall" msgstr "Single Wall" msgid "media-type.sleeve" msgstr "Sleeve" msgid "media-type.stationery" msgstr "Stationery" msgid "media-type.stationery-archival" msgstr "Stationery Archival" msgid "media-type.stationery-coated" msgstr "Coated Paper" msgid "media-type.stationery-cotton" msgstr "Stationery Cotton" msgid "media-type.stationery-fine" msgstr "Vellum Paper" msgid "media-type.stationery-heavyweight" msgstr "Heavyweight Paper" msgid "media-type.stationery-heavyweight-coated" msgstr "Stationery Heavyweight Coated" msgid "media-type.stationery-inkjet" msgstr "Stationery Inkjet Paper" msgid "media-type.stationery-letterhead" msgstr "Letterhead" msgid "media-type.stationery-lightweight" msgstr "Lightweight Paper" msgid "media-type.stationery-preprinted" msgstr "Preprinted Paper" msgid "media-type.stationery-prepunched" msgstr "Punched Paper" msgid "media-type.tab-stock" msgstr "Tab Stock" msgid "media-type.tractor" msgstr "Tractor" msgid "media-type.transfer" msgstr "Transfer" msgid "media-type.transparency" msgstr "Transparency" msgid "media-type.triple-wall" msgstr "Triple Wall" msgid "media-type.wet-film" msgstr "Wet Film" msgid "media-weight-metric" msgstr "Media Weight (grams per m²)" msgid "media.asme_f_28x40in" msgstr "28 x 40\"" msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" msgstr "A4 or US Letter" msgid "media.iso_2a0_1189x1682mm" msgstr "2a0" msgid "media.iso_a0_841x1189mm" msgstr "A0" msgid "media.iso_a0x3_1189x2523mm" msgstr "A0x3" msgid "media.iso_a10_26x37mm" msgstr "A10" msgid "media.iso_a1_594x841mm" msgstr "A1" msgid "media.iso_a1x3_841x1783mm" msgstr "A1x3" msgid "media.iso_a1x4_841x2378mm" msgstr "A1x4" msgid "media.iso_a2_420x594mm" msgstr "A2" msgid "media.iso_a2x3_594x1261mm" msgstr "A2x3" msgid "media.iso_a2x4_594x1682mm" msgstr "A2x4" msgid "media.iso_a2x5_594x2102mm" msgstr "A2x5" msgid "media.iso_a3-extra_322x445mm" msgstr "A3 (Extra)" msgid "media.iso_a3_297x420mm" msgstr "A3" msgid "media.iso_a3x3_420x891mm" msgstr "A3x3" msgid "media.iso_a3x4_420x1189mm" msgstr "A3x4" msgid "media.iso_a3x5_420x1486mm" msgstr "A3x5" msgid "media.iso_a3x6_420x1783mm" msgstr "A3x6" msgid "media.iso_a3x7_420x2080mm" msgstr "A3x7" msgid "media.iso_a4-extra_235.5x322.3mm" msgstr "A4 (Extra)" msgid "media.iso_a4-tab_225x297mm" msgstr "A4 (Tab)" msgid "media.iso_a4_210x297mm" msgstr "A4" msgid "media.iso_a4x3_297x630mm" msgstr "A4x3" msgid "media.iso_a4x4_297x841mm" msgstr "A4x4" msgid "media.iso_a4x5_297x1051mm" msgstr "A4x5" msgid "media.iso_a4x6_297x1261mm" msgstr "A4x6" msgid "media.iso_a4x7_297x1471mm" msgstr "A4x7" msgid "media.iso_a4x8_297x1682mm" msgstr "A4x8" msgid "media.iso_a4x9_297x1892mm" msgstr "A4x9" msgid "media.iso_a5-extra_174x235mm" msgstr "A5 (Extra)" msgid "media.iso_a5_148x210mm" msgstr "A5" msgid "media.iso_a6_105x148mm" msgstr "A6" msgid "media.iso_a7_74x105mm" msgstr "A7" msgid "media.iso_a8_52x74mm" msgstr "A8" msgid "media.iso_a9_37x52mm" msgstr "A9" msgid "media.iso_b0_1000x1414mm" msgstr "B0" msgid "media.iso_b10_31x44mm" msgstr "B10" msgid "media.iso_b1_707x1000mm" msgstr "B1" msgid "media.iso_b2_500x707mm" msgstr "B2" msgid "media.iso_b3_353x500mm" msgstr "B3" msgid "media.iso_b4_250x353mm" msgstr "B4" msgid "media.iso_b5-extra_201x276mm" msgstr "B5 (Extra)" msgid "media.iso_b5_176x250mm" msgstr "B5 Envelope" msgid "media.iso_b6_125x176mm" msgstr "B6" msgid "media.iso_b6c4_125x324mm" msgstr "B6/C4 Envelope" msgid "media.iso_b7_88x125mm" msgstr "B7" msgid "media.iso_b8_62x88mm" msgstr "B8" msgid "media.iso_b9_44x62mm" msgstr "B9" msgid "media.iso_c0_917x1297mm" msgstr "C0 Envelope" msgid "media.iso_c10_28x40mm" msgstr "C10 Envelope" msgid "media.iso_c1_648x917mm" msgstr "C1 Envelope" msgid "media.iso_c2_458x648mm" msgstr "C2 Envelope" msgid "media.iso_c3_324x458mm" msgstr "C3 Envelope" msgid "media.iso_c4_229x324mm" msgstr "C4 Envelope" msgid "media.iso_c5_162x229mm" msgstr "C5 Envelope" msgid "media.iso_c6_114x162mm" msgstr "C6 Envelope" msgid "media.iso_c6c5_114x229mm" msgstr "C6c5 Envelope" msgid "media.iso_c7_81x114mm" msgstr "C7 Envelope" msgid "media.iso_c7c6_81x162mm" msgstr "C7c6 Envelope" msgid "media.iso_c8_57x81mm" msgstr "C8 Envelope" msgid "media.iso_c9_40x57mm" msgstr "C9 Envelope" msgid "media.iso_dl_110x220mm" msgstr "DL Envelope" msgid "media.iso_ra0_860x1220mm" msgstr "Ra0" msgid "media.iso_ra1_610x860mm" msgstr "Ra1" msgid "media.iso_ra2_430x610mm" msgstr "Ra2" msgid "media.iso_ra3_305x430mm" msgstr "Ra3" msgid "media.iso_ra4_215x305mm" msgstr "Ra4" msgid "media.iso_sra0_900x1280mm" msgstr "Sra0" msgid "media.iso_sra1_640x900mm" msgstr "Sra1" msgid "media.iso_sra2_450x640mm" msgstr "Sra2" msgid "media.iso_sra3_320x450mm" msgstr "Sra3" msgid "media.iso_sra4_225x320mm" msgstr "Sra4" msgid "media.jis_b0_1030x1456mm" msgstr "JIS B0" msgid "media.jis_b10_32x45mm" msgstr "JIS B10" msgid "media.jis_b1_728x1030mm" msgstr "JIS B1" msgid "media.jis_b2_515x728mm" msgstr "JIS B2" msgid "media.jis_b3_364x515mm" msgstr "JIS B3" msgid "media.jis_b4_257x364mm" msgstr "JIS B4" msgid "media.jis_b5_182x257mm" msgstr "JIS B5" msgid "media.jis_b6_128x182mm" msgstr "JIS B6" msgid "media.jis_b7_91x128mm" msgstr "JIS B7" msgid "media.jis_b8_64x91mm" msgstr "JIS B8" msgid "media.jis_b9_45x64mm" msgstr "JIS B9" msgid "media.jis_exec_216x330mm" msgstr "JIS Executive" msgid "media.jpn_chou2_111.1x146mm" msgstr "Chou 2 Envelope" msgid "media.jpn_chou3_120x235mm" msgstr "Chou 3 Envelope" msgid "media.jpn_chou4_90x205mm" msgstr "Chou 4 Envelope" msgid "media.jpn_hagaki_100x148mm" msgstr "Hagaki" msgid "media.jpn_kahu_240x322.1mm" msgstr "Kahu Envelope" msgid "media.jpn_kaku2_240x332mm" msgstr "Kahu 2 Envelope" msgid "media.jpn_kaku3_216x277mm" msgstr "216 x 277mme" msgid "media.jpn_kaku4_197x267mm" msgstr "197 x 267mme" msgid "media.jpn_kaku5_190x240mm" msgstr "190 x 240mme" msgid "media.jpn_kaku7_142x205mm" msgstr "142 x 205mme" msgid "media.jpn_kaku8_119x197mm" msgstr "119 x 197mme" msgid "media.jpn_oufuku_148x200mm" msgstr "Oufuku Reply Postcard" msgid "media.jpn_you4_105x235mm" msgstr "You 4 Envelope" msgid "media.na_10x11_10x11in" msgstr "10 x 11\"" msgid "media.na_10x13_10x13in" msgstr "10 x 13\"" msgid "media.na_10x14_10x14in" msgstr "10 x 14\"" msgid "media.na_10x15_10x15in" msgstr "10 x 15\"" msgid "media.na_11x12_11x12in" msgstr "11 x 12\"" msgid "media.na_11x15_11x15in" msgstr "11 x 15\"" msgid "media.na_12x19_12x19in" msgstr "12 x 19\"" msgid "media.na_5x7_5x7in" msgstr "5 x 7\"" msgid "media.na_6x9_6x9in" msgstr "6 x 9\"" msgid "media.na_7x9_7x9in" msgstr "7 x 9\"" msgid "media.na_9x11_9x11in" msgstr "9 x 11\"" msgid "media.na_a2_4.375x5.75in" msgstr "A2 Envelope" msgid "media.na_arch-a_9x12in" msgstr "9 x 12\"" msgid "media.na_arch-b_12x18in" msgstr "12 x 18\"" msgid "media.na_arch-c_18x24in" msgstr "18 x 24\"" msgid "media.na_arch-d_24x36in" msgstr "24 x 36\"" msgid "media.na_arch-e2_26x38in" msgstr "26 x 38\"" msgid "media.na_arch-e3_27x39in" msgstr "27 x 39\"" msgid "media.na_arch-e_36x48in" msgstr "36 x 48\"" msgid "media.na_b-plus_12x19.17in" msgstr "12 x 19.17\"" msgid "media.na_c5_6.5x9.5in" msgstr "C5 Envelope" msgid "media.na_c_17x22in" msgstr "17 x 22\"" msgid "media.na_d_22x34in" msgstr "22 x 34\"" msgid "media.na_e_34x44in" msgstr "34 x 44\"" msgid "media.na_edp_11x14in" msgstr "11 x 14\"" msgid "media.na_eur-edp_12x14in" msgstr "12 x 14\"" msgid "media.na_executive_7.25x10.5in" msgstr "Executive" msgid "media.na_f_44x68in" msgstr "44 x 68\"" msgid "media.na_fanfold-eur_8.5x12in" msgstr "European Fanfold" msgid "media.na_fanfold-us_11x14.875in" msgstr "US Fanfold" msgid "media.na_foolscap_8.5x13in" msgstr "Foolscap" msgid "media.na_govt-legal_8x13in" msgstr "8 x 13\"" msgid "media.na_govt-letter_8x10in" msgstr "8 x 10\"" msgid "media.na_index-3x5_3x5in" msgstr "3 x 5\"" msgid "media.na_index-4x6-ext_6x8in" msgstr "6 x 8\"" msgid "media.na_index-4x6_4x6in" msgstr "4 x 6\"" msgid "media.na_index-5x8_5x8in" msgstr "5 x 8\"" msgid "media.na_invoice_5.5x8.5in" msgstr "Statement" msgid "media.na_ledger_11x17in" msgstr "11 x 17\"" msgid "media.na_legal-extra_9.5x15in" msgstr "US Legal (Extra)" msgid "media.na_legal_8.5x14in" msgstr "US Legal" msgid "media.na_letter-extra_9.5x12in" msgstr "US Letter (Extra)" msgid "media.na_letter-plus_8.5x12.69in" msgstr "US Letter (Plus)" msgid "media.na_letter_8.5x11in" msgstr "US Letter" msgid "media.na_monarch_3.875x7.5in" msgstr "Monarch Envelope" msgid "media.na_number-10_4.125x9.5in" msgstr "#10 Envelope" msgid "media.na_number-11_4.5x10.375in" msgstr "#11 Envelope" msgid "media.na_number-12_4.75x11in" msgstr "#12 Envelope" msgid "media.na_number-14_5x11.5in" msgstr "#14 Envelope" msgid "media.na_number-9_3.875x8.875in" msgstr "#9 Envelope" msgid "media.na_oficio_8.5x13.4in" msgstr "8.5 x 13.4\"" msgid "media.na_personal_3.625x6.5in" msgstr "Personal Envelope" msgid "media.na_quarto_8.5x10.83in" msgstr "Quarto" msgid "media.na_super-a_8.94x14in" msgstr "8.94 x 14\"" msgid "media.na_super-b_13x19in" msgstr "13 x 19\"" msgid "media.na_wide-format_30x42in" msgstr "30 x 42\"" msgid "media.oe_12x16_12x16in" msgstr "12 x 16\"" msgid "media.oe_14x17_14x17in" msgstr "14 x 17\"" msgid "media.oe_18x22_18x22in" msgstr "18 x 22\"" msgid "media.oe_a2plus_17x24in" msgstr "17 x 24\"" msgid "media.oe_photo-10r_10x12in" msgstr "10 x 12\"" msgid "media.oe_photo-20r_20x24in" msgstr "20 x 24\"" msgid "media.oe_photo-l_3.5x5in" msgstr "3.5 x 5\"" msgid "media.oe_photo-s10r_10x15in" msgstr "10 x 15\"" msgid "media.om_16k_184x260mm" msgstr "184 x 260mm" msgid "media.om_16k_195x270mm" msgstr "195 x 270mm" msgid "media.om_dai-pa-kai_275x395mm" msgstr "275 x 395mm" msgid "media.om_folio-sp_215x315mm" msgstr "Folio" msgid "media.om_folio_210x330mm" msgstr "Folio (Special)" msgid "media.om_invite_220x220mm" msgstr "Invitation Envelope" msgid "media.om_italian_110x230mm" msgstr "Italian Envelope" msgid "media.om_juuro-ku-kai_198x275mm" msgstr "198 x 275mm" msgid "media.om_large-photo_200x300" msgstr "200 x 300mm" msgid "media.om_medium-photo_130x180mm" msgstr "130 x 180mm" msgid "media.om_pa-kai_267x389mm" msgstr "267 x 389mm" msgid "media.om_postfix_114x229mm" msgstr "Postfix Envelope" msgid "media.om_small-photo_100x150mm" msgstr "100 x 150mm" msgid "media.om_wide-photo_100x200mm" msgstr "100 x 200mm" msgid "media.prc_10_324x458mm" msgstr "Chinese #10 Envelope" msgid "media.prc_16k_146x215mm" msgstr "Chinese 16k" msgid "media.prc_1_102x165mm" msgstr "Chinese #1 Envelope" msgid "media.prc_2_102x176mm" msgstr "Chinese #2 Envelope" msgid "media.prc_32k_97x151mm" msgstr "Chinese 32k" msgid "media.prc_3_125x176mm" msgstr "Chinese #3 Envelope" msgid "media.prc_4_110x208mm" msgstr "Chinese #4 Envelope" msgid "media.prc_5_110x220mm" msgstr "Chinese #5 Envelope" msgid "media.prc_6_120x320mm" msgstr "Chinese #6 Envelope" msgid "media.prc_7_160x230mm" msgstr "Chinese #7 Envelope" msgid "media.prc_8_120x309mm" msgstr "Chinese #8 Envelope" msgid "media.roc_16k_7.75x10.75in" msgstr "ROC 16k" msgid "media.roc_8k_10.75x15.5in" msgstr "ROC 8k" #, c-format msgid "members of class %s:" msgstr "Mitglieder der Klasse %s:" msgid "multiple-document-handling" msgstr "Multiple Document Handling" msgid "multiple-document-handling.separate-documents-collated-copies" msgstr "Separate Documents Collated Copies" msgid "multiple-document-handling.separate-documents-uncollated-copies" msgstr "Separate Documents Uncollated Copies" msgid "multiple-document-handling.single-document" msgstr "Single Document" msgid "multiple-document-handling.single-document-new-sheet" msgstr "Single Document New Sheet" msgid "multiple-object-handling" msgstr "Multiple Object Handling" msgid "multiple-object-handling.auto" msgstr "Automatic" msgid "multiple-object-handling.best-fit" msgstr "Best Fit" msgid "multiple-object-handling.best-quality" msgstr "Best Quality" msgid "multiple-object-handling.best-speed" msgstr "Best Speed" msgid "multiple-object-handling.one-at-a-time" msgstr "One At A Time" msgid "multiple-operation-time-out-action" msgstr "Multiple Operation Time Out Action" msgid "multiple-operation-time-out-action.abort-job" msgstr "Abort Job" msgid "multiple-operation-time-out-action.hold-job" msgstr "Hold Job" msgid "multiple-operation-time-out-action.process-job" msgstr "Process Job" msgid "no entries" msgstr "Keine Einträge" msgid "no system default destination" msgstr "Keine systemvoreingestellten Ziele" msgid "noise-removal" msgstr "Noise Removal" msgid "notify-attributes" msgstr "Notify Attributes" msgid "notify-charset" msgstr "Notify Charset" msgid "notify-events" msgstr "Notify Events" msgid "notify-events not specified." msgstr "" msgid "notify-events.document-completed" msgstr "Document Completed" msgid "notify-events.document-config-changed" msgstr "Document Config Changed" msgid "notify-events.document-created" msgstr "Document Created" msgid "notify-events.document-fetchable" msgstr "Document Fetchable" msgid "notify-events.document-state-changed" msgstr "Document State Changed" msgid "notify-events.document-stopped" msgstr "Document Stopped" msgid "notify-events.job-completed" msgstr "Job Completed" msgid "notify-events.job-config-changed" msgstr "Job Config Changed" msgid "notify-events.job-created" msgstr "Job Created" msgid "notify-events.job-fetchable" msgstr "Job Fetchable" msgid "notify-events.job-progress" msgstr "Job Progress" msgid "notify-events.job-state-changed" msgstr "Job State Changed" msgid "notify-events.job-stopped" msgstr "Job Stopped" msgid "notify-events.none" msgstr "None" msgid "notify-events.printer-config-changed" msgstr "Printer Config Changed" msgid "notify-events.printer-finishings-changed" msgstr "Printer Finishings Changed" msgid "notify-events.printer-media-changed" msgstr "Printer Media Changed" msgid "notify-events.printer-queue-order-changed" msgstr "Printer Queue Order Changed" msgid "notify-events.printer-restarted" msgstr "Printer Restarted" msgid "notify-events.printer-shutdown" msgstr "Printer Shutdown" msgid "notify-events.printer-state-changed" msgstr "Printer State Changed" msgid "notify-events.printer-stopped" msgstr "Printer Stopped" msgid "notify-get-interval" msgstr "Notify Get Interval" msgid "notify-lease-duration" msgstr "Notify Lease Duration" msgid "notify-natural-language" msgstr "Notify Natural Language" msgid "notify-pull-method" msgstr "Notify Pull Method" msgid "notify-recipient-uri" msgstr "Notify Recipient" #, c-format msgid "notify-recipient-uri URI \"%s\" is already used." msgstr "" #, c-format msgid "notify-recipient-uri URI \"%s\" uses unknown scheme." msgstr "" msgid "notify-sequence-numbers" msgstr "Notify Sequence Numbers" msgid "notify-subscription-ids" msgstr "Notify Subscription Ids" msgid "notify-time-interval" msgstr "Notify Time Interval" msgid "notify-user-data" msgstr "Notify User Data" msgid "notify-wait" msgstr "Notify Wait" msgid "number-of-retries" msgstr "Number Of Retries" msgid "number-up" msgstr "Number-Up" msgid "object-offset" msgstr "Object Offset" msgid "object-size" msgstr "Object Size" msgid "organization-name" msgstr "Organization Name" msgid "orientation-requested" msgstr "Orientation" msgid "orientation-requested.3" msgstr "Portrait" msgid "orientation-requested.4" msgstr "Landscape" msgid "orientation-requested.5" msgstr "Reverse Landscape" msgid "orientation-requested.6" msgstr "Reverse Portrait" msgid "orientation-requested.7" msgstr "None" msgid "output-attributes" msgstr "Output Attributes" msgid "output-bin" msgstr "Output Bin" msgid "output-bin.auto" msgstr "Automatic" msgid "output-bin.bottom" msgstr "Bottom" msgid "output-bin.center" msgstr "Center" msgid "output-bin.face-down" msgstr "Face Down" msgid "output-bin.face-up" msgstr "Face Up" msgid "output-bin.large-capacity" msgstr "Large Capacity" msgid "output-bin.left" msgstr "Left" msgid "output-bin.mailbox-1" msgstr "Mailbox 1" msgid "output-bin.mailbox-10" msgstr "Mailbox 10" msgid "output-bin.mailbox-2" msgstr "Mailbox 2" msgid "output-bin.mailbox-3" msgstr "Mailbox 3" msgid "output-bin.mailbox-4" msgstr "Mailbox 4" msgid "output-bin.mailbox-5" msgstr "Mailbox 5" msgid "output-bin.mailbox-6" msgstr "Mailbox 6" msgid "output-bin.mailbox-7" msgstr "Mailbox 7" msgid "output-bin.mailbox-8" msgstr "Mailbox 8" msgid "output-bin.mailbox-9" msgstr "Mailbox 9" msgid "output-bin.middle" msgstr "Middle" msgid "output-bin.my-mailbox" msgstr "My Mailbox" msgid "output-bin.rear" msgstr "Rear" msgid "output-bin.right" msgstr "Right" msgid "output-bin.side" msgstr "Side" msgid "output-bin.stacker-1" msgstr "Stacker 1" msgid "output-bin.stacker-10" msgstr "Stacker 10" msgid "output-bin.stacker-2" msgstr "Stacker 2" msgid "output-bin.stacker-3" msgstr "Stacker 3" msgid "output-bin.stacker-4" msgstr "Stacker 4" msgid "output-bin.stacker-5" msgstr "Stacker 5" msgid "output-bin.stacker-6" msgstr "Stacker 6" msgid "output-bin.stacker-7" msgstr "Stacker 7" msgid "output-bin.stacker-8" msgstr "Stacker 8" msgid "output-bin.stacker-9" msgstr "Stacker 9" msgid "output-bin.top" msgstr "Top" msgid "output-bin.tray-1" msgstr "Tray 1" msgid "output-bin.tray-10" msgstr "Tray 10" msgid "output-bin.tray-2" msgstr "Tray 2" msgid "output-bin.tray-3" msgstr "Tray 3" msgid "output-bin.tray-4" msgstr "Tray 4" msgid "output-bin.tray-5" msgstr "Tray 5" msgid "output-bin.tray-6" msgstr "Tray 6" msgid "output-bin.tray-7" msgstr "Tray 7" msgid "output-bin.tray-8" msgstr "Tray 8" msgid "output-bin.tray-9" msgstr "Tray 9" msgid "output-compression-quality-factor" msgstr "Scanned Image Quality" msgid "page-delivery" msgstr "Page Delivery" msgid "page-delivery.reverse-order-face-down" msgstr "Reverse Order Face Down" msgid "page-delivery.reverse-order-face-up" msgstr "Reverse Order Face Up" msgid "page-delivery.same-order-face-down" msgstr "Same Order Face Down" msgid "page-delivery.same-order-face-up" msgstr "Same Order Face Up" msgid "page-delivery.system-specified" msgstr "System Specified" msgid "page-order-received" msgstr "Page Order Received" msgid "page-order-received.1-to-n-order" msgstr "1 To N Order" msgid "page-order-received.n-to-1-order" msgstr "N To 1 Order" msgid "page-ranges" msgstr "Page Ranges" msgid "pages" msgstr "Pages" msgid "pages-per-subset" msgstr "Pages Per Subset" msgid "pending" msgstr "in Verarbeitung" msgid "platform-shape" msgstr "Platform Shape" msgid "platform-shape.ellipse" msgstr "Round" msgid "platform-shape.rectangle" msgstr "Rectangle" msgid "platform-temperature" msgstr "Platform Temperature" msgid "post-dial-string" msgstr "Post-dial String" #, c-format msgid "ppdc: Adding include directory \"%s\"." msgstr "" #, c-format msgid "ppdc: Adding/updating UI text from %s." msgstr "" #, c-format msgid "ppdc: Bad boolean value (%s) on line %d of %s." msgstr "" #, c-format msgid "ppdc: Bad font attribute: %s" msgstr "ppdc: Ungültiges Schriftattribut: %s" #, c-format msgid "ppdc: Bad resolution name \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Bad status keyword %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Bad variable substitution ($%c) on line %d of %s." msgstr "" #, c-format msgid "ppdc: Choice found on line %d of %s with no Option." msgstr "" #, c-format msgid "ppdc: Duplicate #po for locale %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected a filter definition on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected a program name on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected boolean value on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected charset after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected choice code on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected choice name/text on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected color order for ColorModel on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected colorspace for ColorModel on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected compression for ColorModel on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Expected driver type keyword following DriverType on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected duplex type after Duplex on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected encoding after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected filename after #po %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected group name/text on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected include filename on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected integer on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected locale after #po on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after FileName on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after Manufacturer on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after MediaSize on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after ModelName on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after PCFileName on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name/text after %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name/text after Installable on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name/text after Resolution on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected option name/text on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected option section on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected option type on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected override field after Resolution on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected quoted string on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected real number on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d " "of %s." msgstr "" #, c-format msgid "ppdc: Expected selector after %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected status after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected string after Copyright on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected string after Version on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected two option names on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected value after %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected version after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid #include/#po filename \"%s\"." msgstr "" #, c-format msgid "ppdc: Invalid cost for filter on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid empty MIME type for filter on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid empty program name for filter on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid option section \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid option type \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Loading driver information file \"%s\"." msgstr "" #, c-format msgid "ppdc: Loading messages for locale \"%s\"." msgstr "" #, c-format msgid "ppdc: Loading messages from \"%s\"." msgstr "" #, c-format msgid "ppdc: Missing #endif at end of \"%s\"." msgstr "" #, c-format msgid "ppdc: Missing #if on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Need a msgid line before any translation strings on line %d of %s." msgstr "" #, c-format msgid "ppdc: No message catalog provided for locale %s." msgstr "" #, c-format msgid "ppdc: Option %s defined in two different groups on line %d of %s." msgstr "" #, c-format msgid "ppdc: Option %s redefined with a different type on line %d of %s." msgstr "" #, c-format msgid "ppdc: Option constraint must *name on line %d of %s." msgstr "" #, c-format msgid "ppdc: Too many nested #if's on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unable to create PPD file \"%s\" - %s." msgstr "" #, c-format msgid "ppdc: Unable to create output directory %s: %s" msgstr "" #, c-format msgid "ppdc: Unable to create output pipes: %s" msgstr "" #, c-format msgid "ppdc: Unable to execute cupstestppd: %s" msgstr "" #, c-format msgid "ppdc: Unable to find #po file %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unable to find include file \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unable to find localization for \"%s\" - %s" msgstr "" #, c-format msgid "ppdc: Unable to load localization file \"%s\" - %s" msgstr "" #, c-format msgid "ppdc: Unable to open %s: %s" msgstr "" #, c-format msgid "ppdc: Undefined variable (%s) on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unexpected text on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unknown driver type %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unknown media size \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unknown message catalog format for \"%s\"." msgstr "" #, c-format msgid "ppdc: Unknown token \"%s\" seen on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unterminated string starting with %c on line %d of %s." msgstr "" #, c-format msgid "ppdc: Warning - overlapping filename \"%s\"." msgstr "" #, c-format msgid "ppdc: Writing %s." msgstr "ppdc: Schreibe: %s." #, c-format msgid "ppdc: Writing PPD files to directory \"%s\"." msgstr "ppdc: Schreibe PPD-Dateien in Verzeichnis \"%s\"." #, c-format msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s." msgstr "" #, c-format msgid "ppdmerge: Ignoring PPD file %s." msgstr "ppdmerge: PPD-Datei %s wird ignoriert." #, c-format msgid "ppdmerge: Unable to backup %s to %s - %s" msgstr "" msgid "pre-dial-string" msgstr "Pre-dial String" msgid "presentation-direction-number-up" msgstr "Number-Up Layout" msgid "presentation-direction-number-up.tobottom-toleft" msgstr "Top-Bottom, Right-Left" msgid "presentation-direction-number-up.tobottom-toright" msgstr "Top-Bottom, Left-Right" msgid "presentation-direction-number-up.toleft-tobottom" msgstr "Right-Left, Top-Bottom" msgid "presentation-direction-number-up.toleft-totop" msgstr "Right-Left, Bottom-Top" msgid "presentation-direction-number-up.toright-tobottom" msgstr "Left-Right, Top-Bottom" msgid "presentation-direction-number-up.toright-totop" msgstr "Left-Right, Bottom-Top" msgid "presentation-direction-number-up.totop-toleft" msgstr "Bottom-Top, Right-Left" msgid "presentation-direction-number-up.totop-toright" msgstr "Bottom-Top, Left-Right" msgid "print-accuracy" msgstr "Print Accuracy" msgid "print-base" msgstr "Print Base" msgid "print-base.brim" msgstr "Brim" msgid "print-base.none" msgstr "None" msgid "print-base.raft" msgstr "Raft" msgid "print-base.skirt" msgstr "Skirt" msgid "print-base.standard" msgstr "Standard" msgid "print-color-mode" msgstr "Print Color Mode" msgid "print-color-mode.auto" msgstr "Automatic" msgid "print-color-mode.bi-level" msgstr "Bi-Level" msgid "print-color-mode.color" msgstr "Color" msgid "print-color-mode.highlight" msgstr "Highlight" msgid "print-color-mode.monochrome" msgstr "Monochrome" msgid "print-color-mode.process-bi-level" msgstr "Process Bi-Level" msgid "print-color-mode.process-monochrome" msgstr "Process Monochrome" msgid "print-content-optimize" msgstr "Print Optimization" msgid "print-content-optimize.auto" msgstr "Automatic" msgid "print-content-optimize.graphic" msgstr "Graphics" msgid "print-content-optimize.photo" msgstr "Photo" msgid "print-content-optimize.text" msgstr "Text" msgid "print-content-optimize.text-and-graphic" msgstr "Text And Graphics" msgid "print-objects" msgstr "Print Objects" msgid "print-quality" msgstr "Print Quality" msgid "print-quality.3" msgstr "Draft" msgid "print-quality.4" msgstr "Normal" msgid "print-quality.5" msgstr "High" msgid "print-rendering-intent" msgstr "Print Rendering Intent" msgid "print-rendering-intent.absolute" msgstr "Absolute" msgid "print-rendering-intent.auto" msgstr "Automatic" msgid "print-rendering-intent.perceptual" msgstr "Perceptual" msgid "print-rendering-intent.relative" msgstr "Relative" msgid "print-rendering-intent.relative-bpc" msgstr "Relative w/Black Point Compensation" msgid "print-rendering-intent.saturation" msgstr "Saturation" msgid "print-scaling" msgstr "Print Scaling" msgid "print-scaling.auto" msgstr "Automatic" msgid "print-scaling.auto-fit" msgstr "Auto Fit" msgid "print-scaling.fill" msgstr "Fill" msgid "print-scaling.fit" msgstr "Fit" msgid "print-scaling.none" msgstr "None" msgid "print-supports" msgstr "Print Supports" msgid "print-supports.material" msgstr "Material" msgid "print-supports.none" msgstr "None" msgid "print-supports.standard" msgstr "Standard" #, c-format msgid "printer %s disabled since %s -" msgstr "Drucker %s ist deaktiviert seit %s" #, c-format msgid "printer %s is idle. enabled since %s" msgstr "Drucker %s ist im Leerlauf. Aktiviert seit %s" #, c-format msgid "printer %s now printing %s-%d. enabled since %s" msgstr "Drucker %s druckt jetzt %s-%d. Aktiviert seit %s" #, c-format msgid "printer %s/%s disabled since %s -" msgstr "Drucker %s/%s deaktiviert seit %s" #, c-format msgid "printer %s/%s is idle. enabled since %s" msgstr "Drucker %s/%s ist im Leerlauf. Aktiviert seit %s" #, c-format msgid "printer %s/%s now printing %s-%d. enabled since %s" msgstr "Drucker %s/%s druckt jetzt %s-%d. Aktiviert seit %s" msgid "printer-message-from-operator" msgstr "Printer Message From Operator" msgid "printer-resolution" msgstr "Printer Resolution" msgid "printer-state" msgstr "Printer State" msgid "printer-state-reasons" msgstr "Detailed Printer State" msgid "printer-state-reasons.alert-removal-of-binary-change-entry" msgstr "Alert Removal Of Binary Change Entry" msgid "printer-state-reasons.bander-added" msgstr "Bander Added" msgid "printer-state-reasons.bander-almost-empty" msgstr "Bander Almost Empty" msgid "printer-state-reasons.bander-almost-full" msgstr "Bander Almost Full" msgid "printer-state-reasons.bander-at-limit" msgstr "Bander At Limit" msgid "printer-state-reasons.bander-closed" msgstr "Bander Closed" msgid "printer-state-reasons.bander-configuration-change" msgstr "Bander Configuration Change" msgid "printer-state-reasons.bander-cover-closed" msgstr "Bander Cover Closed" msgid "printer-state-reasons.bander-cover-open" msgstr "Bander Cover Open" msgid "printer-state-reasons.bander-empty" msgstr "Bander Empty" msgid "printer-state-reasons.bander-full" msgstr "Bander Full" msgid "printer-state-reasons.bander-interlock-closed" msgstr "Bander Interlock Closed" msgid "printer-state-reasons.bander-interlock-open" msgstr "Bander Interlock Open" msgid "printer-state-reasons.bander-jam" msgstr "Bander Jam" msgid "printer-state-reasons.bander-life-almost-over" msgstr "Bander Life Almost Over" msgid "printer-state-reasons.bander-life-over" msgstr "Bander Life Over" msgid "printer-state-reasons.bander-memory-exhausted" msgstr "Bander Memory Exhausted" msgid "printer-state-reasons.bander-missing" msgstr "Bander Missing" msgid "printer-state-reasons.bander-motor-failure" msgstr "Bander Motor Failure" msgid "printer-state-reasons.bander-near-limit" msgstr "Bander Near Limit" msgid "printer-state-reasons.bander-offline" msgstr "Bander Offline" msgid "printer-state-reasons.bander-opened" msgstr "Bander Opened" msgid "printer-state-reasons.bander-over-temperature" msgstr "Bander Over Temperature" msgid "printer-state-reasons.bander-power-saver" msgstr "Bander Power Saver" msgid "printer-state-reasons.bander-recoverable-failure" msgstr "Bander Recoverable Failure" msgid "printer-state-reasons.bander-recoverable-storage" msgstr "Bander Recoverable Storage" msgid "printer-state-reasons.bander-removed" msgstr "Bander Removed" msgid "printer-state-reasons.bander-resource-added" msgstr "Bander Resource Added" msgid "printer-state-reasons.bander-resource-removed" msgstr "Bander Resource Removed" msgid "printer-state-reasons.bander-thermistor-failure" msgstr "Bander Thermistor Failure" msgid "printer-state-reasons.bander-timing-failure" msgstr "Bander Timing Failure" msgid "printer-state-reasons.bander-turned-off" msgstr "Bander Turned Off" msgid "printer-state-reasons.bander-turned-on" msgstr "Bander Turned On" msgid "printer-state-reasons.bander-under-temperature" msgstr "Bander Under Temperature" msgid "printer-state-reasons.bander-unrecoverable-failure" msgstr "Bander Unrecoverable Failure" msgid "printer-state-reasons.bander-unrecoverable-storage-error" msgstr "Bander Unrecoverable Storage Error" msgid "printer-state-reasons.bander-warming-up" msgstr "Bander Warming Up" msgid "printer-state-reasons.binder-added" msgstr "Binder Added" msgid "printer-state-reasons.binder-almost-empty" msgstr "Binder Almost Empty" msgid "printer-state-reasons.binder-almost-full" msgstr "Binder Almost Full" msgid "printer-state-reasons.binder-at-limit" msgstr "Binder At Limit" msgid "printer-state-reasons.binder-closed" msgstr "Binder Closed" msgid "printer-state-reasons.binder-configuration-change" msgstr "Binder Configuration Change" msgid "printer-state-reasons.binder-cover-closed" msgstr "Binder Cover Closed" msgid "printer-state-reasons.binder-cover-open" msgstr "Binder Cover Open" msgid "printer-state-reasons.binder-empty" msgstr "Binder Empty" msgid "printer-state-reasons.binder-full" msgstr "Binder Full" msgid "printer-state-reasons.binder-interlock-closed" msgstr "Binder Interlock Closed" msgid "printer-state-reasons.binder-interlock-open" msgstr "Binder Interlock Open" msgid "printer-state-reasons.binder-jam" msgstr "Binder Jam" msgid "printer-state-reasons.binder-life-almost-over" msgstr "Binder Life Almost Over" msgid "printer-state-reasons.binder-life-over" msgstr "Binder Life Over" msgid "printer-state-reasons.binder-memory-exhausted" msgstr "Binder Memory Exhausted" msgid "printer-state-reasons.binder-missing" msgstr "Binder Missing" msgid "printer-state-reasons.binder-motor-failure" msgstr "Binder Motor Failure" msgid "printer-state-reasons.binder-near-limit" msgstr "Binder Near Limit" msgid "printer-state-reasons.binder-offline" msgstr "Binder Offline" msgid "printer-state-reasons.binder-opened" msgstr "Binder Opened" msgid "printer-state-reasons.binder-over-temperature" msgstr "Binder Over Temperature" msgid "printer-state-reasons.binder-power-saver" msgstr "Binder Power Saver" msgid "printer-state-reasons.binder-recoverable-failure" msgstr "Binder Recoverable Failure" msgid "printer-state-reasons.binder-recoverable-storage" msgstr "Binder Recoverable Storage" msgid "printer-state-reasons.binder-removed" msgstr "Binder Removed" msgid "printer-state-reasons.binder-resource-added" msgstr "Binder Resource Added" msgid "printer-state-reasons.binder-resource-removed" msgstr "Binder Resource Removed" msgid "printer-state-reasons.binder-thermistor-failure" msgstr "Binder Thermistor Failure" msgid "printer-state-reasons.binder-timing-failure" msgstr "Binder Timing Failure" msgid "printer-state-reasons.binder-turned-off" msgstr "Binder Turned Off" msgid "printer-state-reasons.binder-turned-on" msgstr "Binder Turned On" msgid "printer-state-reasons.binder-under-temperature" msgstr "Binder Under Temperature" msgid "printer-state-reasons.binder-unrecoverable-failure" msgstr "Binder Unrecoverable Failure" msgid "printer-state-reasons.binder-unrecoverable-storage-error" msgstr "Binder Unrecoverable Storage Error" msgid "printer-state-reasons.binder-warming-up" msgstr "Binder Warming Up" msgid "printer-state-reasons.camera-failure" msgstr "Camera Failure" msgid "printer-state-reasons.chamber-cooling" msgstr "Chamber Cooling" msgid "printer-state-reasons.chamber-heating" msgstr "Chamber Heating" msgid "printer-state-reasons.chamber-temperature-high" msgstr "Chamber Temperature High" msgid "printer-state-reasons.chamber-temperature-low" msgstr "Chamber Temperature Low" msgid "printer-state-reasons.cleaner-life-almost-over" msgstr "Cleaner Life Almost Over" msgid "printer-state-reasons.cleaner-life-over" msgstr "Cleaner Life Over" msgid "printer-state-reasons.configuration-change" msgstr "Configuration Change" msgid "printer-state-reasons.connecting-to-device" msgstr "Connecting To Device" msgid "printer-state-reasons.cover-open" msgstr "Cover Open" msgid "printer-state-reasons.deactivated" msgstr "Deactivated" msgid "printer-state-reasons.developer-empty" msgstr "Developer Empty" msgid "printer-state-reasons.developer-low" msgstr "Developer Low" msgid "printer-state-reasons.die-cutter-added" msgstr "Die Cutter Added" msgid "printer-state-reasons.die-cutter-almost-empty" msgstr "Die Cutter Almost Empty" msgid "printer-state-reasons.die-cutter-almost-full" msgstr "Die Cutter Almost Full" msgid "printer-state-reasons.die-cutter-at-limit" msgstr "Die Cutter At Limit" msgid "printer-state-reasons.die-cutter-closed" msgstr "Die Cutter Closed" msgid "printer-state-reasons.die-cutter-configuration-change" msgstr "Die Cutter Configuration Change" msgid "printer-state-reasons.die-cutter-cover-closed" msgstr "Die Cutter Cover Closed" msgid "printer-state-reasons.die-cutter-cover-open" msgstr "Die Cutter Cover Open" msgid "printer-state-reasons.die-cutter-empty" msgstr "Die Cutter Empty" msgid "printer-state-reasons.die-cutter-full" msgstr "Die Cutter Full" msgid "printer-state-reasons.die-cutter-interlock-closed" msgstr "Die Cutter Interlock Closed" msgid "printer-state-reasons.die-cutter-interlock-open" msgstr "Die Cutter Interlock Open" msgid "printer-state-reasons.die-cutter-jam" msgstr "Die Cutter Jam" msgid "printer-state-reasons.die-cutter-life-almost-over" msgstr "Die Cutter Life Almost Over" msgid "printer-state-reasons.die-cutter-life-over" msgstr "Die Cutter Life Over" msgid "printer-state-reasons.die-cutter-memory-exhausted" msgstr "Die Cutter Memory Exhausted" msgid "printer-state-reasons.die-cutter-missing" msgstr "Die Cutter Missing" msgid "printer-state-reasons.die-cutter-motor-failure" msgstr "Die Cutter Motor Failure" msgid "printer-state-reasons.die-cutter-near-limit" msgstr "Die Cutter Near Limit" msgid "printer-state-reasons.die-cutter-offline" msgstr "Die Cutter Offline" msgid "printer-state-reasons.die-cutter-opened" msgstr "Die Cutter Opened" msgid "printer-state-reasons.die-cutter-over-temperature" msgstr "Die Cutter Over Temperature" msgid "printer-state-reasons.die-cutter-power-saver" msgstr "Die Cutter Power Saver" msgid "printer-state-reasons.die-cutter-recoverable-failure" msgstr "Die Cutter Recoverable Failure" msgid "printer-state-reasons.die-cutter-recoverable-storage" msgstr "Die Cutter Recoverable Storage" msgid "printer-state-reasons.die-cutter-removed" msgstr "Die Cutter Removed" msgid "printer-state-reasons.die-cutter-resource-added" msgstr "Die Cutter Resource Added" msgid "printer-state-reasons.die-cutter-resource-removed" msgstr "Die Cutter Resource Removed" msgid "printer-state-reasons.die-cutter-thermistor-failure" msgstr "Die Cutter Thermistor Failure" msgid "printer-state-reasons.die-cutter-timing-failure" msgstr "Die Cutter Timing Failure" msgid "printer-state-reasons.die-cutter-turned-off" msgstr "Die Cutter Turned Off" msgid "printer-state-reasons.die-cutter-turned-on" msgstr "Die Cutter Turned On" msgid "printer-state-reasons.die-cutter-under-temperature" msgstr "Die Cutter Under Temperature" msgid "printer-state-reasons.die-cutter-unrecoverable-failure" msgstr "Die Cutter Unrecoverable Failure" msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error" msgstr "Die Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.die-cutter-warming-up" msgstr "Die Cutter Warming Up" msgid "printer-state-reasons.door-open" msgstr "Door Open" msgid "printer-state-reasons.extruder-cooling" msgstr "Extruder Cooling" msgid "printer-state-reasons.extruder-failure" msgstr "Extruder Failure" msgid "printer-state-reasons.extruder-heating" msgstr "Extruder Heating" msgid "printer-state-reasons.extruder-jam" msgstr "Extruder Jam" msgid "printer-state-reasons.extruder-temperature-high" msgstr "Extruder Temperature High" msgid "printer-state-reasons.extruder-temperature-low" msgstr "Extruder Temperature Low" msgid "printer-state-reasons.fan-failure" msgstr "Fan Failure" msgid "printer-state-reasons.folder-added" msgstr "Folder Added" msgid "printer-state-reasons.folder-almost-empty" msgstr "Folder Almost Empty" msgid "printer-state-reasons.folder-almost-full" msgstr "Folder Almost Full" msgid "printer-state-reasons.folder-at-limit" msgstr "Folder At Limit" msgid "printer-state-reasons.folder-closed" msgstr "Folder Closed" msgid "printer-state-reasons.folder-configuration-change" msgstr "Folder Configuration Change" msgid "printer-state-reasons.folder-cover-closed" msgstr "Folder Cover Closed" msgid "printer-state-reasons.folder-cover-open" msgstr "Folder Cover Open" msgid "printer-state-reasons.folder-empty" msgstr "Folder Empty" msgid "printer-state-reasons.folder-full" msgstr "Folder Full" msgid "printer-state-reasons.folder-interlock-closed" msgstr "Folder Interlock Closed" msgid "printer-state-reasons.folder-interlock-open" msgstr "Folder Interlock Open" msgid "printer-state-reasons.folder-jam" msgstr "Folder Jam" msgid "printer-state-reasons.folder-life-almost-over" msgstr "Folder Life Almost Over" msgid "printer-state-reasons.folder-life-over" msgstr "Folder Life Over" msgid "printer-state-reasons.folder-memory-exhausted" msgstr "Folder Memory Exhausted" msgid "printer-state-reasons.folder-missing" msgstr "Folder Missing" msgid "printer-state-reasons.folder-motor-failure" msgstr "Folder Motor Failure" msgid "printer-state-reasons.folder-near-limit" msgstr "Folder Near Limit" msgid "printer-state-reasons.folder-offline" msgstr "Folder Offline" msgid "printer-state-reasons.folder-opened" msgstr "Folder Opened" msgid "printer-state-reasons.folder-over-temperature" msgstr "Folder Over Temperature" msgid "printer-state-reasons.folder-power-saver" msgstr "Folder Power Saver" msgid "printer-state-reasons.folder-recoverable-failure" msgstr "Folder Recoverable Failure" msgid "printer-state-reasons.folder-recoverable-storage" msgstr "Folder Recoverable Storage" msgid "printer-state-reasons.folder-removed" msgstr "Folder Removed" msgid "printer-state-reasons.folder-resource-added" msgstr "Folder Resource Added" msgid "printer-state-reasons.folder-resource-removed" msgstr "Folder Resource Removed" msgid "printer-state-reasons.folder-thermistor-failure" msgstr "Folder Thermistor Failure" msgid "printer-state-reasons.folder-timing-failure" msgstr "Folder Timing Failure" msgid "printer-state-reasons.folder-turned-off" msgstr "Folder Turned Off" msgid "printer-state-reasons.folder-turned-on" msgstr "Folder Turned On" msgid "printer-state-reasons.folder-under-temperature" msgstr "Folder Under Temperature" msgid "printer-state-reasons.folder-unrecoverable-failure" msgstr "Folder Unrecoverable Failure" msgid "printer-state-reasons.folder-unrecoverable-storage-error" msgstr "Folder Unrecoverable Storage Error" msgid "printer-state-reasons.folder-warming-up" msgstr "Folder Warming Up" msgid "printer-state-reasons.fuser-over-temp" msgstr "Fuser Over Temp" msgid "printer-state-reasons.fuser-under-temp" msgstr "Fuser Under Temp" msgid "printer-state-reasons.hold-new-jobs" msgstr "Hold New Jobs" msgid "printer-state-reasons.identify-printer-requested" msgstr "Identify Printer" msgid "printer-state-reasons.imprinter-added" msgstr "Imprinter Added" msgid "printer-state-reasons.imprinter-almost-empty" msgstr "Imprinter Almost Empty" msgid "printer-state-reasons.imprinter-almost-full" msgstr "Imprinter Almost Full" msgid "printer-state-reasons.imprinter-at-limit" msgstr "Imprinter At Limit" msgid "printer-state-reasons.imprinter-closed" msgstr "Imprinter Closed" msgid "printer-state-reasons.imprinter-configuration-change" msgstr "Imprinter Configuration Change" msgid "printer-state-reasons.imprinter-cover-closed" msgstr "Imprinter Cover Closed" msgid "printer-state-reasons.imprinter-cover-open" msgstr "Imprinter Cover Open" msgid "printer-state-reasons.imprinter-empty" msgstr "Imprinter Empty" msgid "printer-state-reasons.imprinter-full" msgstr "Imprinter Full" msgid "printer-state-reasons.imprinter-interlock-closed" msgstr "Imprinter Interlock Closed" msgid "printer-state-reasons.imprinter-interlock-open" msgstr "Imprinter Interlock Open" msgid "printer-state-reasons.imprinter-jam" msgstr "Imprinter Jam" msgid "printer-state-reasons.imprinter-life-almost-over" msgstr "Imprinter Life Almost Over" msgid "printer-state-reasons.imprinter-life-over" msgstr "Imprinter Life Over" msgid "printer-state-reasons.imprinter-memory-exhausted" msgstr "Imprinter Memory Exhausted" msgid "printer-state-reasons.imprinter-missing" msgstr "Imprinter Missing" msgid "printer-state-reasons.imprinter-motor-failure" msgstr "Imprinter Motor Failure" msgid "printer-state-reasons.imprinter-near-limit" msgstr "Imprinter Near Limit" msgid "printer-state-reasons.imprinter-offline" msgstr "Imprinter Offline" msgid "printer-state-reasons.imprinter-opened" msgstr "Imprinter Opened" msgid "printer-state-reasons.imprinter-over-temperature" msgstr "Imprinter Over Temperature" msgid "printer-state-reasons.imprinter-power-saver" msgstr "Imprinter Power Saver" msgid "printer-state-reasons.imprinter-recoverable-failure" msgstr "Imprinter Recoverable Failure" msgid "printer-state-reasons.imprinter-recoverable-storage" msgstr "Imprinter Recoverable Storage" msgid "printer-state-reasons.imprinter-removed" msgstr "Imprinter Removed" msgid "printer-state-reasons.imprinter-resource-added" msgstr "Imprinter Resource Added" msgid "printer-state-reasons.imprinter-resource-removed" msgstr "Imprinter Resource Removed" msgid "printer-state-reasons.imprinter-thermistor-failure" msgstr "Imprinter Thermistor Failure" msgid "printer-state-reasons.imprinter-timing-failure" msgstr "Imprinter Timing Failure" msgid "printer-state-reasons.imprinter-turned-off" msgstr "Imprinter Turned Off" msgid "printer-state-reasons.imprinter-turned-on" msgstr "Imprinter Turned On" msgid "printer-state-reasons.imprinter-under-temperature" msgstr "Imprinter Under Temperature" msgid "printer-state-reasons.imprinter-unrecoverable-failure" msgstr "Imprinter Unrecoverable Failure" msgid "printer-state-reasons.imprinter-unrecoverable-storage-error" msgstr "Imprinter Unrecoverable Storage Error" msgid "printer-state-reasons.imprinter-warming-up" msgstr "Imprinter Warming Up" msgid "printer-state-reasons.input-cannot-feed-size-selected" msgstr "Input Cannot Feed Size Selected" msgid "printer-state-reasons.input-manual-input-request" msgstr "Input Manual Input Request" msgid "printer-state-reasons.input-media-color-change" msgstr "Input Media Color Change" msgid "printer-state-reasons.input-media-form-parts-change" msgstr "Input Media Form Parts Change" msgid "printer-state-reasons.input-media-size-change" msgstr "Input Media Size Change" msgid "printer-state-reasons.input-media-type-change" msgstr "Input Media Type Change" msgid "printer-state-reasons.input-media-weight-change" msgstr "Input Media Weight Change" msgid "printer-state-reasons.input-tray-elevation-failure" msgstr "Input Tray Elevation Failure" msgid "printer-state-reasons.input-tray-missing" msgstr "Input Tray Missing" msgid "printer-state-reasons.input-tray-position-failure" msgstr "Input Tray Position Failure" msgid "printer-state-reasons.inserter-added" msgstr "Inserter Added" msgid "printer-state-reasons.inserter-almost-empty" msgstr "Inserter Almost Empty" msgid "printer-state-reasons.inserter-almost-full" msgstr "Inserter Almost Full" msgid "printer-state-reasons.inserter-at-limit" msgstr "Inserter At Limit" msgid "printer-state-reasons.inserter-closed" msgstr "Inserter Closed" msgid "printer-state-reasons.inserter-configuration-change" msgstr "Inserter Configuration Change" msgid "printer-state-reasons.inserter-cover-closed" msgstr "Inserter Cover Closed" msgid "printer-state-reasons.inserter-cover-open" msgstr "Inserter Cover Open" msgid "printer-state-reasons.inserter-empty" msgstr "Inserter Empty" msgid "printer-state-reasons.inserter-full" msgstr "Inserter Full" msgid "printer-state-reasons.inserter-interlock-closed" msgstr "Inserter Interlock Closed" msgid "printer-state-reasons.inserter-interlock-open" msgstr "Inserter Interlock Open" msgid "printer-state-reasons.inserter-jam" msgstr "Inserter Jam" msgid "printer-state-reasons.inserter-life-almost-over" msgstr "Inserter Life Almost Over" msgid "printer-state-reasons.inserter-life-over" msgstr "Inserter Life Over" msgid "printer-state-reasons.inserter-memory-exhausted" msgstr "Inserter Memory Exhausted" msgid "printer-state-reasons.inserter-missing" msgstr "Inserter Missing" msgid "printer-state-reasons.inserter-motor-failure" msgstr "Inserter Motor Failure" msgid "printer-state-reasons.inserter-near-limit" msgstr "Inserter Near Limit" msgid "printer-state-reasons.inserter-offline" msgstr "Inserter Offline" msgid "printer-state-reasons.inserter-opened" msgstr "Inserter Opened" msgid "printer-state-reasons.inserter-over-temperature" msgstr "Inserter Over Temperature" msgid "printer-state-reasons.inserter-power-saver" msgstr "Inserter Power Saver" msgid "printer-state-reasons.inserter-recoverable-failure" msgstr "Inserter Recoverable Failure" msgid "printer-state-reasons.inserter-recoverable-storage" msgstr "Inserter Recoverable Storage" msgid "printer-state-reasons.inserter-removed" msgstr "Inserter Removed" msgid "printer-state-reasons.inserter-resource-added" msgstr "Inserter Resource Added" msgid "printer-state-reasons.inserter-resource-removed" msgstr "Inserter Resource Removed" msgid "printer-state-reasons.inserter-thermistor-failure" msgstr "Inserter Thermistor Failure" msgid "printer-state-reasons.inserter-timing-failure" msgstr "Inserter Timing Failure" msgid "printer-state-reasons.inserter-turned-off" msgstr "Inserter Turned Off" msgid "printer-state-reasons.inserter-turned-on" msgstr "Inserter Turned On" msgid "printer-state-reasons.inserter-under-temperature" msgstr "Inserter Under Temperature" msgid "printer-state-reasons.inserter-unrecoverable-failure" msgstr "Inserter Unrecoverable Failure" msgid "printer-state-reasons.inserter-unrecoverable-storage-error" msgstr "Inserter Unrecoverable Storage Error" msgid "printer-state-reasons.inserter-warming-up" msgstr "Inserter Warming Up" msgid "printer-state-reasons.interlock-closed" msgstr "Interlock Closed" msgid "printer-state-reasons.interlock-open" msgstr "Interlock Open" msgid "printer-state-reasons.interpreter-cartridge-added" msgstr "Interpreter Cartridge Added" msgid "printer-state-reasons.interpreter-cartridge-deleted" msgstr "Interpreter Cartridge Deleted" msgid "printer-state-reasons.interpreter-complex-page-encountered" msgstr "Interpreter Complex Page Encountered" msgid "printer-state-reasons.interpreter-memory-decrease" msgstr "Interpreter Memory Decrease" msgid "printer-state-reasons.interpreter-memory-increase" msgstr "Interpreter Memory Increase" msgid "printer-state-reasons.interpreter-resource-added" msgstr "Interpreter Resource Added" msgid "printer-state-reasons.interpreter-resource-deleted" msgstr "Interpreter Resource Deleted" msgid "printer-state-reasons.interpreter-resource-unavailable" msgstr "Interpreter Resource Unavailable" msgid "printer-state-reasons.lamp-at-eol" msgstr "Lamp At Eol" msgid "printer-state-reasons.lamp-failure" msgstr "Lamp Failure" msgid "printer-state-reasons.lamp-near-eol" msgstr "Lamp Near Eol" msgid "printer-state-reasons.laser-at-eol" msgstr "Laser At Eol" msgid "printer-state-reasons.laser-failure" msgstr "Laser Failure" msgid "printer-state-reasons.laser-near-eol" msgstr "Laser Near Eol" msgid "printer-state-reasons.make-envelope-added" msgstr "Make Envelope Added" msgid "printer-state-reasons.make-envelope-almost-empty" msgstr "Make Envelope Almost Empty" msgid "printer-state-reasons.make-envelope-almost-full" msgstr "Make Envelope Almost Full" msgid "printer-state-reasons.make-envelope-at-limit" msgstr "Make Envelope At Limit" msgid "printer-state-reasons.make-envelope-closed" msgstr "Make Envelope Closed" msgid "printer-state-reasons.make-envelope-configuration-change" msgstr "Make Envelope Configuration Change" msgid "printer-state-reasons.make-envelope-cover-closed" msgstr "Make Envelope Cover Closed" msgid "printer-state-reasons.make-envelope-cover-open" msgstr "Make Envelope Cover Open" msgid "printer-state-reasons.make-envelope-empty" msgstr "Make Envelope Empty" msgid "printer-state-reasons.make-envelope-full" msgstr "Make Envelope Full" msgid "printer-state-reasons.make-envelope-interlock-closed" msgstr "Make Envelope Interlock Closed" msgid "printer-state-reasons.make-envelope-interlock-open" msgstr "Make Envelope Interlock Open" msgid "printer-state-reasons.make-envelope-jam" msgstr "Make Envelope Jam" msgid "printer-state-reasons.make-envelope-life-almost-over" msgstr "Make Envelope Life Almost Over" msgid "printer-state-reasons.make-envelope-life-over" msgstr "Make Envelope Life Over" msgid "printer-state-reasons.make-envelope-memory-exhausted" msgstr "Make Envelope Memory Exhausted" msgid "printer-state-reasons.make-envelope-missing" msgstr "Make Envelope Missing" msgid "printer-state-reasons.make-envelope-motor-failure" msgstr "Make Envelope Motor Failure" msgid "printer-state-reasons.make-envelope-near-limit" msgstr "Make Envelope Near Limit" msgid "printer-state-reasons.make-envelope-offline" msgstr "Make Envelope Offline" msgid "printer-state-reasons.make-envelope-opened" msgstr "Make Envelope Opened" msgid "printer-state-reasons.make-envelope-over-temperature" msgstr "Make Envelope Over Temperature" msgid "printer-state-reasons.make-envelope-power-saver" msgstr "Make Envelope Power Saver" msgid "printer-state-reasons.make-envelope-recoverable-failure" msgstr "Make Envelope Recoverable Failure" msgid "printer-state-reasons.make-envelope-recoverable-storage" msgstr "Make Envelope Recoverable Storage" msgid "printer-state-reasons.make-envelope-removed" msgstr "Make Envelope Removed" msgid "printer-state-reasons.make-envelope-resource-added" msgstr "Make Envelope Resource Added" msgid "printer-state-reasons.make-envelope-resource-removed" msgstr "Make Envelope Resource Removed" msgid "printer-state-reasons.make-envelope-thermistor-failure" msgstr "Make Envelope Thermistor Failure" msgid "printer-state-reasons.make-envelope-timing-failure" msgstr "Make Envelope Timing Failure" msgid "printer-state-reasons.make-envelope-turned-off" msgstr "Make Envelope Turned Off" msgid "printer-state-reasons.make-envelope-turned-on" msgstr "Make Envelope Turned On" msgid "printer-state-reasons.make-envelope-under-temperature" msgstr "Make Envelope Under Temperature" msgid "printer-state-reasons.make-envelope-unrecoverable-failure" msgstr "Make Envelope Unrecoverable Failure" msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error" msgstr "Make Envelope Unrecoverable Storage Error" msgid "printer-state-reasons.make-envelope-warming-up" msgstr "Make Envelope Warming Up" msgid "printer-state-reasons.marker-adjusting-print-quality" msgstr "Marker Adjusting Print Quality" msgid "printer-state-reasons.marker-developer-almost-empty" msgstr "Marker Developer Almost Empty" msgid "printer-state-reasons.marker-developer-empty" msgstr "Marker Developer Empty" msgid "printer-state-reasons.marker-fuser-thermistor-failure" msgstr "Marker Fuser Thermistor Failure" msgid "printer-state-reasons.marker-fuser-timing-failure" msgstr "Marker Fuser Timing Failure" msgid "printer-state-reasons.marker-ink-almost-empty" msgstr "Marker Ink Almost Empty" msgid "printer-state-reasons.marker-ink-empty" msgstr "Marker Ink Empty" msgid "printer-state-reasons.marker-print-ribbon-almost-empty" msgstr "Marker Print Ribbon Almost Empty" msgid "printer-state-reasons.marker-print-ribbon-empty" msgstr "Marker Print Ribbon Empty" msgid "printer-state-reasons.marker-supply-empty" msgstr "Marker Supply Empty" msgid "printer-state-reasons.marker-supply-low" msgstr "Marker Supply Low" msgid "printer-state-reasons.marker-toner-cartridge-missing" msgstr "Marker Toner Cartridge Missing" msgid "printer-state-reasons.marker-waste-almost-full" msgstr "Marker Waste Almost Full" msgid "printer-state-reasons.marker-waste-full" msgstr "Marker Waste Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full" msgstr "Marker Waste Ink Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-full" msgstr "Marker Waste Ink Receptacle Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full" msgstr "Marker Waste Toner Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-full" msgstr "Marker Waste Toner Receptacle Full" msgid "printer-state-reasons.material-empty" msgstr "Material Empty" msgid "printer-state-reasons.material-low" msgstr "Material Low" msgid "printer-state-reasons.material-needed" msgstr "Material Needed" msgid "printer-state-reasons.media-empty" msgstr "Media Empty" msgid "printer-state-reasons.media-jam" msgstr "Media Jam" msgid "printer-state-reasons.media-low" msgstr "Media Low" msgid "printer-state-reasons.media-needed" msgstr "Media Needed" msgid "printer-state-reasons.media-path-cannot-duplex-media-selected" msgstr "Media Path Cannot Duplex Media Selected" msgid "printer-state-reasons.media-path-media-tray-almost-full" msgstr "Media Path Media Tray Almost Full" msgid "printer-state-reasons.media-path-media-tray-full" msgstr "Media Path Media Tray Full" msgid "printer-state-reasons.media-path-media-tray-missing" msgstr "Media Path Media Tray Missing" msgid "printer-state-reasons.motor-failure" msgstr "Motor Failure" msgid "printer-state-reasons.moving-to-paused" msgstr "Moving To Paused" msgid "printer-state-reasons.none" msgstr "None" msgid "printer-state-reasons.opc-life-over" msgstr "Opc Life Over" msgid "printer-state-reasons.opc-near-eol" msgstr "Opc Near Eol" msgid "printer-state-reasons.other" msgstr "Other" msgid "printer-state-reasons.output-area-almost-full" msgstr "Output Area Almost Full" msgid "printer-state-reasons.output-area-full" msgstr "Output Area Full" msgid "printer-state-reasons.output-mailbox-select-failure" msgstr "Output Mailbox Select Failure" msgid "printer-state-reasons.output-tray-missing" msgstr "Output Tray Missing" msgid "printer-state-reasons.paused" msgstr "Paused" msgid "printer-state-reasons.perforater-added" msgstr "Perforater Added" msgid "printer-state-reasons.perforater-almost-empty" msgstr "Perforater Almost Empty" msgid "printer-state-reasons.perforater-almost-full" msgstr "Perforater Almost Full" msgid "printer-state-reasons.perforater-at-limit" msgstr "Perforater At Limit" msgid "printer-state-reasons.perforater-closed" msgstr "Perforater Closed" msgid "printer-state-reasons.perforater-configuration-change" msgstr "Perforater Configuration Change" msgid "printer-state-reasons.perforater-cover-closed" msgstr "Perforater Cover Closed" msgid "printer-state-reasons.perforater-cover-open" msgstr "Perforater Cover Open" msgid "printer-state-reasons.perforater-empty" msgstr "Perforater Empty" msgid "printer-state-reasons.perforater-full" msgstr "Perforater Full" msgid "printer-state-reasons.perforater-interlock-closed" msgstr "Perforater Interlock Closed" msgid "printer-state-reasons.perforater-interlock-open" msgstr "Perforater Interlock Open" msgid "printer-state-reasons.perforater-jam" msgstr "Perforater Jam" msgid "printer-state-reasons.perforater-life-almost-over" msgstr "Perforater Life Almost Over" msgid "printer-state-reasons.perforater-life-over" msgstr "Perforater Life Over" msgid "printer-state-reasons.perforater-memory-exhausted" msgstr "Perforater Memory Exhausted" msgid "printer-state-reasons.perforater-missing" msgstr "Perforater Missing" msgid "printer-state-reasons.perforater-motor-failure" msgstr "Perforater Motor Failure" msgid "printer-state-reasons.perforater-near-limit" msgstr "Perforater Near Limit" msgid "printer-state-reasons.perforater-offline" msgstr "Perforater Offline" msgid "printer-state-reasons.perforater-opened" msgstr "Perforater Opened" msgid "printer-state-reasons.perforater-over-temperature" msgstr "Perforater Over Temperature" msgid "printer-state-reasons.perforater-power-saver" msgstr "Perforater Power Saver" msgid "printer-state-reasons.perforater-recoverable-failure" msgstr "Perforater Recoverable Failure" msgid "printer-state-reasons.perforater-recoverable-storage" msgstr "Perforater Recoverable Storage" msgid "printer-state-reasons.perforater-removed" msgstr "Perforater Removed" msgid "printer-state-reasons.perforater-resource-added" msgstr "Perforater Resource Added" msgid "printer-state-reasons.perforater-resource-removed" msgstr "Perforater Resource Removed" msgid "printer-state-reasons.perforater-thermistor-failure" msgstr "Perforater Thermistor Failure" msgid "printer-state-reasons.perforater-timing-failure" msgstr "Perforater Timing Failure" msgid "printer-state-reasons.perforater-turned-off" msgstr "Perforater Turned Off" msgid "printer-state-reasons.perforater-turned-on" msgstr "Perforater Turned On" msgid "printer-state-reasons.perforater-under-temperature" msgstr "Perforater Under Temperature" msgid "printer-state-reasons.perforater-unrecoverable-failure" msgstr "Perforater Unrecoverable Failure" msgid "printer-state-reasons.perforater-unrecoverable-storage-error" msgstr "Perforater Unrecoverable Storage Error" msgid "printer-state-reasons.perforater-warming-up" msgstr "Perforater Warming Up" msgid "printer-state-reasons.power-down" msgstr "Power Down" msgid "printer-state-reasons.power-up" msgstr "Power Up" msgid "printer-state-reasons.printer-manual-reset" msgstr "Printer Manual Reset" msgid "printer-state-reasons.printer-nms-reset" msgstr "Printer Nms Reset" msgid "printer-state-reasons.printer-ready-to-print" msgstr "Printer Ready To Print" msgid "printer-state-reasons.puncher-added" msgstr "Puncher Added" msgid "printer-state-reasons.puncher-almost-empty" msgstr "Puncher Almost Empty" msgid "printer-state-reasons.puncher-almost-full" msgstr "Puncher Almost Full" msgid "printer-state-reasons.puncher-at-limit" msgstr "Puncher At Limit" msgid "printer-state-reasons.puncher-closed" msgstr "Puncher Closed" msgid "printer-state-reasons.puncher-configuration-change" msgstr "Puncher Configuration Change" msgid "printer-state-reasons.puncher-cover-closed" msgstr "Puncher Cover Closed" msgid "printer-state-reasons.puncher-cover-open" msgstr "Puncher Cover Open" msgid "printer-state-reasons.puncher-empty" msgstr "Puncher Empty" msgid "printer-state-reasons.puncher-full" msgstr "Puncher Full" msgid "printer-state-reasons.puncher-interlock-closed" msgstr "Puncher Interlock Closed" msgid "printer-state-reasons.puncher-interlock-open" msgstr "Puncher Interlock Open" msgid "printer-state-reasons.puncher-jam" msgstr "Puncher Jam" msgid "printer-state-reasons.puncher-life-almost-over" msgstr "Puncher Life Almost Over" msgid "printer-state-reasons.puncher-life-over" msgstr "Puncher Life Over" msgid "printer-state-reasons.puncher-memory-exhausted" msgstr "Puncher Memory Exhausted" msgid "printer-state-reasons.puncher-missing" msgstr "Puncher Missing" msgid "printer-state-reasons.puncher-motor-failure" msgstr "Puncher Motor Failure" msgid "printer-state-reasons.puncher-near-limit" msgstr "Puncher Near Limit" msgid "printer-state-reasons.puncher-offline" msgstr "Puncher Offline" msgid "printer-state-reasons.puncher-opened" msgstr "Puncher Opened" msgid "printer-state-reasons.puncher-over-temperature" msgstr "Puncher Over Temperature" msgid "printer-state-reasons.puncher-power-saver" msgstr "Puncher Power Saver" msgid "printer-state-reasons.puncher-recoverable-failure" msgstr "Puncher Recoverable Failure" msgid "printer-state-reasons.puncher-recoverable-storage" msgstr "Puncher Recoverable Storage" msgid "printer-state-reasons.puncher-removed" msgstr "Puncher Removed" msgid "printer-state-reasons.puncher-resource-added" msgstr "Puncher Resource Added" msgid "printer-state-reasons.puncher-resource-removed" msgstr "Puncher Resource Removed" msgid "printer-state-reasons.puncher-thermistor-failure" msgstr "Puncher Thermistor Failure" msgid "printer-state-reasons.puncher-timing-failure" msgstr "Puncher Timing Failure" msgid "printer-state-reasons.puncher-turned-off" msgstr "Puncher Turned Off" msgid "printer-state-reasons.puncher-turned-on" msgstr "Puncher Turned On" msgid "printer-state-reasons.puncher-under-temperature" msgstr "Puncher Under Temperature" msgid "printer-state-reasons.puncher-unrecoverable-failure" msgstr "Puncher Unrecoverable Failure" msgid "printer-state-reasons.puncher-unrecoverable-storage-error" msgstr "Puncher Unrecoverable Storage Error" msgid "printer-state-reasons.puncher-warming-up" msgstr "Puncher Warming Up" msgid "printer-state-reasons.separation-cutter-added" msgstr "Separation Cutter Added" msgid "printer-state-reasons.separation-cutter-almost-empty" msgstr "Separation Cutter Almost Empty" msgid "printer-state-reasons.separation-cutter-almost-full" msgstr "Separation Cutter Almost Full" msgid "printer-state-reasons.separation-cutter-at-limit" msgstr "Separation Cutter At Limit" msgid "printer-state-reasons.separation-cutter-closed" msgstr "Separation Cutter Closed" msgid "printer-state-reasons.separation-cutter-configuration-change" msgstr "Separation Cutter Configuration Change" msgid "printer-state-reasons.separation-cutter-cover-closed" msgstr "Separation Cutter Cover Closed" msgid "printer-state-reasons.separation-cutter-cover-open" msgstr "Separation Cutter Cover Open" msgid "printer-state-reasons.separation-cutter-empty" msgstr "Separation Cutter Empty" msgid "printer-state-reasons.separation-cutter-full" msgstr "Separation Cutter Full" msgid "printer-state-reasons.separation-cutter-interlock-closed" msgstr "Separation Cutter Interlock Closed" msgid "printer-state-reasons.separation-cutter-interlock-open" msgstr "Separation Cutter Interlock Open" msgid "printer-state-reasons.separation-cutter-jam" msgstr "Separation Cutter Jam" msgid "printer-state-reasons.separation-cutter-life-almost-over" msgstr "Separation Cutter Life Almost Over" msgid "printer-state-reasons.separation-cutter-life-over" msgstr "Separation Cutter Life Over" msgid "printer-state-reasons.separation-cutter-memory-exhausted" msgstr "Separation Cutter Memory Exhausted" msgid "printer-state-reasons.separation-cutter-missing" msgstr "Separation Cutter Missing" msgid "printer-state-reasons.separation-cutter-motor-failure" msgstr "Separation Cutter Motor Failure" msgid "printer-state-reasons.separation-cutter-near-limit" msgstr "Separation Cutter Near Limit" msgid "printer-state-reasons.separation-cutter-offline" msgstr "Separation Cutter Offline" msgid "printer-state-reasons.separation-cutter-opened" msgstr "Separation Cutter Opened" msgid "printer-state-reasons.separation-cutter-over-temperature" msgstr "Separation Cutter Over Temperature" msgid "printer-state-reasons.separation-cutter-power-saver" msgstr "Separation Cutter Power Saver" msgid "printer-state-reasons.separation-cutter-recoverable-failure" msgstr "Separation Cutter Recoverable Failure" msgid "printer-state-reasons.separation-cutter-recoverable-storage" msgstr "Separation Cutter Recoverable Storage" msgid "printer-state-reasons.separation-cutter-removed" msgstr "Separation Cutter Removed" msgid "printer-state-reasons.separation-cutter-resource-added" msgstr "Separation Cutter Resource Added" msgid "printer-state-reasons.separation-cutter-resource-removed" msgstr "Separation Cutter Resource Removed" msgid "printer-state-reasons.separation-cutter-thermistor-failure" msgstr "Separation Cutter Thermistor Failure" msgid "printer-state-reasons.separation-cutter-timing-failure" msgstr "Separation Cutter Timing Failure" msgid "printer-state-reasons.separation-cutter-turned-off" msgstr "Separation Cutter Turned Off" msgid "printer-state-reasons.separation-cutter-turned-on" msgstr "Separation Cutter Turned On" msgid "printer-state-reasons.separation-cutter-under-temperature" msgstr "Separation Cutter Under Temperature" msgid "printer-state-reasons.separation-cutter-unrecoverable-failure" msgstr "Separation Cutter Unrecoverable Failure" msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error" msgstr "Separation Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.separation-cutter-warming-up" msgstr "Separation Cutter Warming Up" msgid "printer-state-reasons.sheet-rotator-added" msgstr "Sheet Rotator Added" msgid "printer-state-reasons.sheet-rotator-almost-empty" msgstr "Sheet Rotator Almost Empty" msgid "printer-state-reasons.sheet-rotator-almost-full" msgstr "Sheet Rotator Almost Full" msgid "printer-state-reasons.sheet-rotator-at-limit" msgstr "Sheet Rotator At Limit" msgid "printer-state-reasons.sheet-rotator-closed" msgstr "Sheet Rotator Closed" msgid "printer-state-reasons.sheet-rotator-configuration-change" msgstr "Sheet Rotator Configuration Change" msgid "printer-state-reasons.sheet-rotator-cover-closed" msgstr "Sheet Rotator Cover Closed" msgid "printer-state-reasons.sheet-rotator-cover-open" msgstr "Sheet Rotator Cover Open" msgid "printer-state-reasons.sheet-rotator-empty" msgstr "Sheet Rotator Empty" msgid "printer-state-reasons.sheet-rotator-full" msgstr "Sheet Rotator Full" msgid "printer-state-reasons.sheet-rotator-interlock-closed" msgstr "Sheet Rotator Interlock Closed" msgid "printer-state-reasons.sheet-rotator-interlock-open" msgstr "Sheet Rotator Interlock Open" msgid "printer-state-reasons.sheet-rotator-jam" msgstr "Sheet Rotator Jam" msgid "printer-state-reasons.sheet-rotator-life-almost-over" msgstr "Sheet Rotator Life Almost Over" msgid "printer-state-reasons.sheet-rotator-life-over" msgstr "Sheet Rotator Life Over" msgid "printer-state-reasons.sheet-rotator-memory-exhausted" msgstr "Sheet Rotator Memory Exhausted" msgid "printer-state-reasons.sheet-rotator-missing" msgstr "Sheet Rotator Missing" msgid "printer-state-reasons.sheet-rotator-motor-failure" msgstr "Sheet Rotator Motor Failure" msgid "printer-state-reasons.sheet-rotator-near-limit" msgstr "Sheet Rotator Near Limit" msgid "printer-state-reasons.sheet-rotator-offline" msgstr "Sheet Rotator Offline" msgid "printer-state-reasons.sheet-rotator-opened" msgstr "Sheet Rotator Opened" msgid "printer-state-reasons.sheet-rotator-over-temperature" msgstr "Sheet Rotator Over Temperature" msgid "printer-state-reasons.sheet-rotator-power-saver" msgstr "Sheet Rotator Power Saver" msgid "printer-state-reasons.sheet-rotator-recoverable-failure" msgstr "Sheet Rotator Recoverable Failure" msgid "printer-state-reasons.sheet-rotator-recoverable-storage" msgstr "Sheet Rotator Recoverable Storage" msgid "printer-state-reasons.sheet-rotator-removed" msgstr "Sheet Rotator Removed" msgid "printer-state-reasons.sheet-rotator-resource-added" msgstr "Sheet Rotator Resource Added" msgid "printer-state-reasons.sheet-rotator-resource-removed" msgstr "Sheet Rotator Resource Removed" msgid "printer-state-reasons.sheet-rotator-thermistor-failure" msgstr "Sheet Rotator Thermistor Failure" msgid "printer-state-reasons.sheet-rotator-timing-failure" msgstr "Sheet Rotator Timing Failure" msgid "printer-state-reasons.sheet-rotator-turned-off" msgstr "Sheet Rotator Turned Off" msgid "printer-state-reasons.sheet-rotator-turned-on" msgstr "Sheet Rotator Turned On" msgid "printer-state-reasons.sheet-rotator-under-temperature" msgstr "Sheet Rotator Under Temperature" msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure" msgstr "Sheet Rotator Unrecoverable Failure" msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" msgstr "Sheet Rotator Unrecoverable Storage Error" msgid "printer-state-reasons.sheet-rotator-warming-up" msgstr "Sheet Rotator Warming Up" msgid "printer-state-reasons.shutdown" msgstr "Shutdown" msgid "printer-state-reasons.slitter-added" msgstr "Slitter Added" msgid "printer-state-reasons.slitter-almost-empty" msgstr "Slitter Almost Empty" msgid "printer-state-reasons.slitter-almost-full" msgstr "Slitter Almost Full" msgid "printer-state-reasons.slitter-at-limit" msgstr "Slitter At Limit" msgid "printer-state-reasons.slitter-closed" msgstr "Slitter Closed" msgid "printer-state-reasons.slitter-configuration-change" msgstr "Slitter Configuration Change" msgid "printer-state-reasons.slitter-cover-closed" msgstr "Slitter Cover Closed" msgid "printer-state-reasons.slitter-cover-open" msgstr "Slitter Cover Open" msgid "printer-state-reasons.slitter-empty" msgstr "Slitter Empty" msgid "printer-state-reasons.slitter-full" msgstr "Slitter Full" msgid "printer-state-reasons.slitter-interlock-closed" msgstr "Slitter Interlock Closed" msgid "printer-state-reasons.slitter-interlock-open" msgstr "Slitter Interlock Open" msgid "printer-state-reasons.slitter-jam" msgstr "Slitter Jam" msgid "printer-state-reasons.slitter-life-almost-over" msgstr "Slitter Life Almost Over" msgid "printer-state-reasons.slitter-life-over" msgstr "Slitter Life Over" msgid "printer-state-reasons.slitter-memory-exhausted" msgstr "Slitter Memory Exhausted" msgid "printer-state-reasons.slitter-missing" msgstr "Slitter Missing" msgid "printer-state-reasons.slitter-motor-failure" msgstr "Slitter Motor Failure" msgid "printer-state-reasons.slitter-near-limit" msgstr "Slitter Near Limit" msgid "printer-state-reasons.slitter-offline" msgstr "Slitter Offline" msgid "printer-state-reasons.slitter-opened" msgstr "Slitter Opened" msgid "printer-state-reasons.slitter-over-temperature" msgstr "Slitter Over Temperature" msgid "printer-state-reasons.slitter-power-saver" msgstr "Slitter Power Saver" msgid "printer-state-reasons.slitter-recoverable-failure" msgstr "Slitter Recoverable Failure" msgid "printer-state-reasons.slitter-recoverable-storage" msgstr "Slitter Recoverable Storage" msgid "printer-state-reasons.slitter-removed" msgstr "Slitter Removed" msgid "printer-state-reasons.slitter-resource-added" msgstr "Slitter Resource Added" msgid "printer-state-reasons.slitter-resource-removed" msgstr "Slitter Resource Removed" msgid "printer-state-reasons.slitter-thermistor-failure" msgstr "Slitter Thermistor Failure" msgid "printer-state-reasons.slitter-timing-failure" msgstr "Slitter Timing Failure" msgid "printer-state-reasons.slitter-turned-off" msgstr "Slitter Turned Off" msgid "printer-state-reasons.slitter-turned-on" msgstr "Slitter Turned On" msgid "printer-state-reasons.slitter-under-temperature" msgstr "Slitter Under Temperature" msgid "printer-state-reasons.slitter-unrecoverable-failure" msgstr "Slitter Unrecoverable Failure" msgid "printer-state-reasons.slitter-unrecoverable-storage-error" msgstr "Slitter Unrecoverable Storage Error" msgid "printer-state-reasons.slitter-warming-up" msgstr "Slitter Warming Up" msgid "printer-state-reasons.spool-area-full" msgstr "Spool Area Full" msgid "printer-state-reasons.stacker-added" msgstr "Stacker Added" msgid "printer-state-reasons.stacker-almost-empty" msgstr "Stacker Almost Empty" msgid "printer-state-reasons.stacker-almost-full" msgstr "Stacker Almost Full" msgid "printer-state-reasons.stacker-at-limit" msgstr "Stacker At Limit" msgid "printer-state-reasons.stacker-closed" msgstr "Stacker Closed" msgid "printer-state-reasons.stacker-configuration-change" msgstr "Stacker Configuration Change" msgid "printer-state-reasons.stacker-cover-closed" msgstr "Stacker Cover Closed" msgid "printer-state-reasons.stacker-cover-open" msgstr "Stacker Cover Open" msgid "printer-state-reasons.stacker-empty" msgstr "Stacker Empty" msgid "printer-state-reasons.stacker-full" msgstr "Stacker Full" msgid "printer-state-reasons.stacker-interlock-closed" msgstr "Stacker Interlock Closed" msgid "printer-state-reasons.stacker-interlock-open" msgstr "Stacker Interlock Open" msgid "printer-state-reasons.stacker-jam" msgstr "Stacker Jam" msgid "printer-state-reasons.stacker-life-almost-over" msgstr "Stacker Life Almost Over" msgid "printer-state-reasons.stacker-life-over" msgstr "Stacker Life Over" msgid "printer-state-reasons.stacker-memory-exhausted" msgstr "Stacker Memory Exhausted" msgid "printer-state-reasons.stacker-missing" msgstr "Stacker Missing" msgid "printer-state-reasons.stacker-motor-failure" msgstr "Stacker Motor Failure" msgid "printer-state-reasons.stacker-near-limit" msgstr "Stacker Near Limit" msgid "printer-state-reasons.stacker-offline" msgstr "Stacker Offline" msgid "printer-state-reasons.stacker-opened" msgstr "Stacker Opened" msgid "printer-state-reasons.stacker-over-temperature" msgstr "Stacker Over Temperature" msgid "printer-state-reasons.stacker-power-saver" msgstr "Stacker Power Saver" msgid "printer-state-reasons.stacker-recoverable-failure" msgstr "Stacker Recoverable Failure" msgid "printer-state-reasons.stacker-recoverable-storage" msgstr "Stacker Recoverable Storage" msgid "printer-state-reasons.stacker-removed" msgstr "Stacker Removed" msgid "printer-state-reasons.stacker-resource-added" msgstr "Stacker Resource Added" msgid "printer-state-reasons.stacker-resource-removed" msgstr "Stacker Resource Removed" msgid "printer-state-reasons.stacker-thermistor-failure" msgstr "Stacker Thermistor Failure" msgid "printer-state-reasons.stacker-timing-failure" msgstr "Stacker Timing Failure" msgid "printer-state-reasons.stacker-turned-off" msgstr "Stacker Turned Off" msgid "printer-state-reasons.stacker-turned-on" msgstr "Stacker Turned On" msgid "printer-state-reasons.stacker-under-temperature" msgstr "Stacker Under Temperature" msgid "printer-state-reasons.stacker-unrecoverable-failure" msgstr "Stacker Unrecoverable Failure" msgid "printer-state-reasons.stacker-unrecoverable-storage-error" msgstr "Stacker Unrecoverable Storage Error" msgid "printer-state-reasons.stacker-warming-up" msgstr "Stacker Warming Up" msgid "printer-state-reasons.stapler-added" msgstr "Stapler Added" msgid "printer-state-reasons.stapler-almost-empty" msgstr "Stapler Almost Empty" msgid "printer-state-reasons.stapler-almost-full" msgstr "Stapler Almost Full" msgid "printer-state-reasons.stapler-at-limit" msgstr "Stapler At Limit" msgid "printer-state-reasons.stapler-closed" msgstr "Stapler Closed" msgid "printer-state-reasons.stapler-configuration-change" msgstr "Stapler Configuration Change" msgid "printer-state-reasons.stapler-cover-closed" msgstr "Stapler Cover Closed" msgid "printer-state-reasons.stapler-cover-open" msgstr "Stapler Cover Open" msgid "printer-state-reasons.stapler-empty" msgstr "Stapler Empty" msgid "printer-state-reasons.stapler-full" msgstr "Stapler Full" msgid "printer-state-reasons.stapler-interlock-closed" msgstr "Stapler Interlock Closed" msgid "printer-state-reasons.stapler-interlock-open" msgstr "Stapler Interlock Open" msgid "printer-state-reasons.stapler-jam" msgstr "Stapler Jam" msgid "printer-state-reasons.stapler-life-almost-over" msgstr "Stapler Life Almost Over" msgid "printer-state-reasons.stapler-life-over" msgstr "Stapler Life Over" msgid "printer-state-reasons.stapler-memory-exhausted" msgstr "Stapler Memory Exhausted" msgid "printer-state-reasons.stapler-missing" msgstr "Stapler Missing" msgid "printer-state-reasons.stapler-motor-failure" msgstr "Stapler Motor Failure" msgid "printer-state-reasons.stapler-near-limit" msgstr "Stapler Near Limit" msgid "printer-state-reasons.stapler-offline" msgstr "Stapler Offline" msgid "printer-state-reasons.stapler-opened" msgstr "Stapler Opened" msgid "printer-state-reasons.stapler-over-temperature" msgstr "Stapler Over Temperature" msgid "printer-state-reasons.stapler-power-saver" msgstr "Stapler Power Saver" msgid "printer-state-reasons.stapler-recoverable-failure" msgstr "Stapler Recoverable Failure" msgid "printer-state-reasons.stapler-recoverable-storage" msgstr "Stapler Recoverable Storage" msgid "printer-state-reasons.stapler-removed" msgstr "Stapler Removed" msgid "printer-state-reasons.stapler-resource-added" msgstr "Stapler Resource Added" msgid "printer-state-reasons.stapler-resource-removed" msgstr "Stapler Resource Removed" msgid "printer-state-reasons.stapler-thermistor-failure" msgstr "Stapler Thermistor Failure" msgid "printer-state-reasons.stapler-timing-failure" msgstr "Stapler Timing Failure" msgid "printer-state-reasons.stapler-turned-off" msgstr "Stapler Turned Off" msgid "printer-state-reasons.stapler-turned-on" msgstr "Stapler Turned On" msgid "printer-state-reasons.stapler-under-temperature" msgstr "Stapler Under Temperature" msgid "printer-state-reasons.stapler-unrecoverable-failure" msgstr "Stapler Unrecoverable Failure" msgid "printer-state-reasons.stapler-unrecoverable-storage-error" msgstr "Stapler Unrecoverable Storage Error" msgid "printer-state-reasons.stapler-warming-up" msgstr "Stapler Warming Up" msgid "printer-state-reasons.stitcher-added" msgstr "Stitcher Added" msgid "printer-state-reasons.stitcher-almost-empty" msgstr "Stitcher Almost Empty" msgid "printer-state-reasons.stitcher-almost-full" msgstr "Stitcher Almost Full" msgid "printer-state-reasons.stitcher-at-limit" msgstr "Stitcher At Limit" msgid "printer-state-reasons.stitcher-closed" msgstr "Stitcher Closed" msgid "printer-state-reasons.stitcher-configuration-change" msgstr "Stitcher Configuration Change" msgid "printer-state-reasons.stitcher-cover-closed" msgstr "Stitcher Cover Closed" msgid "printer-state-reasons.stitcher-cover-open" msgstr "Stitcher Cover Open" msgid "printer-state-reasons.stitcher-empty" msgstr "Stitcher Empty" msgid "printer-state-reasons.stitcher-full" msgstr "Stitcher Full" msgid "printer-state-reasons.stitcher-interlock-closed" msgstr "Stitcher Interlock Closed" msgid "printer-state-reasons.stitcher-interlock-open" msgstr "Stitcher Interlock Open" msgid "printer-state-reasons.stitcher-jam" msgstr "Stitcher Jam" msgid "printer-state-reasons.stitcher-life-almost-over" msgstr "Stitcher Life Almost Over" msgid "printer-state-reasons.stitcher-life-over" msgstr "Stitcher Life Over" msgid "printer-state-reasons.stitcher-memory-exhausted" msgstr "Stitcher Memory Exhausted" msgid "printer-state-reasons.stitcher-missing" msgstr "Stitcher Missing" msgid "printer-state-reasons.stitcher-motor-failure" msgstr "Stitcher Motor Failure" msgid "printer-state-reasons.stitcher-near-limit" msgstr "Stitcher Near Limit" msgid "printer-state-reasons.stitcher-offline" msgstr "Stitcher Offline" msgid "printer-state-reasons.stitcher-opened" msgstr "Stitcher Opened" msgid "printer-state-reasons.stitcher-over-temperature" msgstr "Stitcher Over Temperature" msgid "printer-state-reasons.stitcher-power-saver" msgstr "Stitcher Power Saver" msgid "printer-state-reasons.stitcher-recoverable-failure" msgstr "Stitcher Recoverable Failure" msgid "printer-state-reasons.stitcher-recoverable-storage" msgstr "Stitcher Recoverable Storage" msgid "printer-state-reasons.stitcher-removed" msgstr "Stitcher Removed" msgid "printer-state-reasons.stitcher-resource-added" msgstr "Stitcher Resource Added" msgid "printer-state-reasons.stitcher-resource-removed" msgstr "Stitcher Resource Removed" msgid "printer-state-reasons.stitcher-thermistor-failure" msgstr "Stitcher Thermistor Failure" msgid "printer-state-reasons.stitcher-timing-failure" msgstr "Stitcher Timing Failure" msgid "printer-state-reasons.stitcher-turned-off" msgstr "Stitcher Turned Off" msgid "printer-state-reasons.stitcher-turned-on" msgstr "Stitcher Turned On" msgid "printer-state-reasons.stitcher-under-temperature" msgstr "Stitcher Under Temperature" msgid "printer-state-reasons.stitcher-unrecoverable-failure" msgstr "Stitcher Unrecoverable Failure" msgid "printer-state-reasons.stitcher-unrecoverable-storage-error" msgstr "Stitcher Unrecoverable Storage Error" msgid "printer-state-reasons.stitcher-warming-up" msgstr "Stitcher Warming Up" msgid "printer-state-reasons.stopped-partly" msgstr "Stopped Partly" msgid "printer-state-reasons.stopping" msgstr "Stopping" msgid "printer-state-reasons.subunit-added" msgstr "Subunit Added" msgid "printer-state-reasons.subunit-almost-empty" msgstr "Subunit Almost Empty" msgid "printer-state-reasons.subunit-almost-full" msgstr "Subunit Almost Full" msgid "printer-state-reasons.subunit-at-limit" msgstr "Subunit At Limit" msgid "printer-state-reasons.subunit-closed" msgstr "Subunit Closed" msgid "printer-state-reasons.subunit-empty" msgstr "Subunit Empty" msgid "printer-state-reasons.subunit-full" msgstr "Subunit Full" msgid "printer-state-reasons.subunit-life-almost-over" msgstr "Subunit Life Almost Over" msgid "printer-state-reasons.subunit-life-over" msgstr "Subunit Life Over" msgid "printer-state-reasons.subunit-memory-exhausted" msgstr "Subunit Memory Exhausted" msgid "printer-state-reasons.subunit-missing" msgstr "Subunit Missing" msgid "printer-state-reasons.subunit-motor-failure" msgstr "Subunit Motor Failure" msgid "printer-state-reasons.subunit-near-limit" msgstr "Subunit Near Limit" msgid "printer-state-reasons.subunit-offline" msgstr "Subunit Offline" msgid "printer-state-reasons.subunit-opened" msgstr "Subunit Opened" msgid "printer-state-reasons.subunit-over-temperature" msgstr "Subunit Over Temperature" msgid "printer-state-reasons.subunit-power-saver" msgstr "Subunit Power Saver" msgid "printer-state-reasons.subunit-recoverable-failure" msgstr "Subunit Recoverable Failure" msgid "printer-state-reasons.subunit-recoverable-storage" msgstr "Subunit Recoverable Storage" msgid "printer-state-reasons.subunit-removed" msgstr "Subunit Removed" msgid "printer-state-reasons.subunit-resource-added" msgstr "Subunit Resource Added" msgid "printer-state-reasons.subunit-resource-removed" msgstr "Subunit Resource Removed" msgid "printer-state-reasons.subunit-thermistor-failure" msgstr "Subunit Thermistor Failure" msgid "printer-state-reasons.subunit-timing-Failure" msgstr "Subunit Timing Failure" msgid "printer-state-reasons.subunit-turned-off" msgstr "Subunit Turned Off" msgid "printer-state-reasons.subunit-turned-on" msgstr "Subunit Turned On" msgid "printer-state-reasons.subunit-under-temperature" msgstr "Subunit Under Temperature" msgid "printer-state-reasons.subunit-unrecoverable-failure" msgstr "Subunit Unrecoverable Failure" msgid "printer-state-reasons.subunit-unrecoverable-storage" msgstr "Subunit Unrecoverable Storage" msgid "printer-state-reasons.subunit-warming-up" msgstr "Subunit Warming Up" msgid "printer-state-reasons.timed-out" msgstr "Timed Out" msgid "printer-state-reasons.toner-empty" msgstr "Toner Empty" msgid "printer-state-reasons.toner-low" msgstr "Toner Low" msgid "printer-state-reasons.trimmer-added" msgstr "Trimmer Added" msgid "printer-state-reasons.trimmer-almost-empty" msgstr "Trimmer Almost Empty" msgid "printer-state-reasons.trimmer-almost-full" msgstr "Trimmer Almost Full" msgid "printer-state-reasons.trimmer-at-limit" msgstr "Trimmer At Limit" msgid "printer-state-reasons.trimmer-closed" msgstr "Trimmer Closed" msgid "printer-state-reasons.trimmer-configuration-change" msgstr "Trimmer Configuration Change" msgid "printer-state-reasons.trimmer-cover-closed" msgstr "Trimmer Cover Closed" msgid "printer-state-reasons.trimmer-cover-open" msgstr "Trimmer Cover Open" msgid "printer-state-reasons.trimmer-empty" msgstr "Trimmer Empty" msgid "printer-state-reasons.trimmer-full" msgstr "Trimmer Full" msgid "printer-state-reasons.trimmer-interlock-closed" msgstr "Trimmer Interlock Closed" msgid "printer-state-reasons.trimmer-interlock-open" msgstr "Trimmer Interlock Open" msgid "printer-state-reasons.trimmer-jam" msgstr "Trimmer Jam" msgid "printer-state-reasons.trimmer-life-almost-over" msgstr "Trimmer Life Almost Over" msgid "printer-state-reasons.trimmer-life-over" msgstr "Trimmer Life Over" msgid "printer-state-reasons.trimmer-memory-exhausted" msgstr "Trimmer Memory Exhausted" msgid "printer-state-reasons.trimmer-missing" msgstr "Trimmer Missing" msgid "printer-state-reasons.trimmer-motor-failure" msgstr "Trimmer Motor Failure" msgid "printer-state-reasons.trimmer-near-limit" msgstr "Trimmer Near Limit" msgid "printer-state-reasons.trimmer-offline" msgstr "Trimmer Offline" msgid "printer-state-reasons.trimmer-opened" msgstr "Trimmer Opened" msgid "printer-state-reasons.trimmer-over-temperature" msgstr "Trimmer Over Temperature" msgid "printer-state-reasons.trimmer-power-saver" msgstr "Trimmer Power Saver" msgid "printer-state-reasons.trimmer-recoverable-failure" msgstr "Trimmer Recoverable Failure" msgid "printer-state-reasons.trimmer-recoverable-storage" msgstr "Trimmer Recoverable Storage" msgid "printer-state-reasons.trimmer-removed" msgstr "Trimmer Removed" msgid "printer-state-reasons.trimmer-resource-added" msgstr "Trimmer Resource Added" msgid "printer-state-reasons.trimmer-resource-removed" msgstr "Trimmer Resource Removed" msgid "printer-state-reasons.trimmer-thermistor-failure" msgstr "Trimmer Thermistor Failure" msgid "printer-state-reasons.trimmer-timing-failure" msgstr "Trimmer Timing Failure" msgid "printer-state-reasons.trimmer-turned-off" msgstr "Trimmer Turned Off" msgid "printer-state-reasons.trimmer-turned-on" msgstr "Trimmer Turned On" msgid "printer-state-reasons.trimmer-under-temperature" msgstr "Trimmer Under Temperature" msgid "printer-state-reasons.trimmer-unrecoverable-failure" msgstr "Trimmer Unrecoverable Failure" msgid "printer-state-reasons.trimmer-unrecoverable-storage-error" msgstr "Trimmer Unrecoverable Storage Error" msgid "printer-state-reasons.trimmer-warming-up" msgstr "Trimmer Warming Up" msgid "printer-state-reasons.unknown" msgstr "Unknown" msgid "printer-state-reasons.wrapper-added" msgstr "Wrapper Added" msgid "printer-state-reasons.wrapper-almost-empty" msgstr "Wrapper Almost Empty" msgid "printer-state-reasons.wrapper-almost-full" msgstr "Wrapper Almost Full" msgid "printer-state-reasons.wrapper-at-limit" msgstr "Wrapper At Limit" msgid "printer-state-reasons.wrapper-closed" msgstr "Wrapper Closed" msgid "printer-state-reasons.wrapper-configuration-change" msgstr "Wrapper Configuration Change" msgid "printer-state-reasons.wrapper-cover-closed" msgstr "Wrapper Cover Closed" msgid "printer-state-reasons.wrapper-cover-open" msgstr "Wrapper Cover Open" msgid "printer-state-reasons.wrapper-empty" msgstr "Wrapper Empty" msgid "printer-state-reasons.wrapper-full" msgstr "Wrapper Full" msgid "printer-state-reasons.wrapper-interlock-closed" msgstr "Wrapper Interlock Closed" msgid "printer-state-reasons.wrapper-interlock-open" msgstr "Wrapper Interlock Open" msgid "printer-state-reasons.wrapper-jam" msgstr "Wrapper Jam" msgid "printer-state-reasons.wrapper-life-almost-over" msgstr "Wrapper Life Almost Over" msgid "printer-state-reasons.wrapper-life-over" msgstr "Wrapper Life Over" msgid "printer-state-reasons.wrapper-memory-exhausted" msgstr "Wrapper Memory Exhausted" msgid "printer-state-reasons.wrapper-missing" msgstr "Wrapper Missing" msgid "printer-state-reasons.wrapper-motor-failure" msgstr "Wrapper Motor Failure" msgid "printer-state-reasons.wrapper-near-limit" msgstr "Wrapper Near Limit" msgid "printer-state-reasons.wrapper-offline" msgstr "Wrapper Offline" msgid "printer-state-reasons.wrapper-opened" msgstr "Wrapper Opened" msgid "printer-state-reasons.wrapper-over-temperature" msgstr "Wrapper Over Temperature" msgid "printer-state-reasons.wrapper-power-saver" msgstr "Wrapper Power Saver" msgid "printer-state-reasons.wrapper-recoverable-failure" msgstr "Wrapper Recoverable Failure" msgid "printer-state-reasons.wrapper-recoverable-storage" msgstr "Wrapper Recoverable Storage" msgid "printer-state-reasons.wrapper-removed" msgstr "Wrapper Removed" msgid "printer-state-reasons.wrapper-resource-added" msgstr "Wrapper Resource Added" msgid "printer-state-reasons.wrapper-resource-removed" msgstr "Wrapper Resource Removed" msgid "printer-state-reasons.wrapper-thermistor-failure" msgstr "Wrapper Thermistor Failure" msgid "printer-state-reasons.wrapper-timing-failure" msgstr "Wrapper Timing Failure" msgid "printer-state-reasons.wrapper-turned-off" msgstr "Wrapper Turned Off" msgid "printer-state-reasons.wrapper-turned-on" msgstr "Wrapper Turned On" msgid "printer-state-reasons.wrapper-under-temperature" msgstr "Wrapper Under Temperature" msgid "printer-state-reasons.wrapper-unrecoverable-failure" msgstr "Wrapper Unrecoverable Failure" msgid "printer-state-reasons.wrapper-unrecoverable-storage-error" msgstr "Wrapper Unrecoverable Storage Error" msgid "printer-state-reasons.wrapper-warming-up" msgstr "Wrapper Warming Up" msgid "printer-state.3" msgstr "Idle" msgid "printer-state.4" msgstr "Processing" msgid "printer-state.5" msgstr "Stopped" msgid "printer-up-time" msgstr "Printer Uptime" msgid "processing" msgstr "in Verarbeitung" msgid "proof-print" msgstr "Proof Print" msgid "proof-print-copies" msgstr "Proof Print Copies" msgid "punching" msgstr "Punching" msgid "punching-locations" msgstr "Punching Locations" msgid "punching-offset" msgstr "Punching Offset" msgid "punching-reference-edge" msgstr "Punching Reference Edge" msgid "punching-reference-edge.bottom" msgstr "Bottom" msgid "punching-reference-edge.left" msgstr "Left" msgid "punching-reference-edge.right" msgstr "Right" msgid "punching-reference-edge.top" msgstr "Top" #, c-format msgid "request id is %s-%d (%d file(s))" msgstr "Anfrage-ID ist %s-%d (%d Datei(en))" msgid "request-id uses indefinite length" msgstr "Anfrage-ID hat unbestimmte Länge" msgid "requested-attributes" msgstr "Requested Attributes" msgid "retry-interval" msgstr "Retry Interval" msgid "retry-time-out" msgstr "Retry Time Out" msgid "save-disposition" msgstr "Save Disposition" msgid "save-disposition.none" msgstr "None" msgid "save-disposition.print-save" msgstr "Print Save" msgid "save-disposition.save-only" msgstr "Save Only" msgid "save-document-format" msgstr "Save Document Format" msgid "save-info" msgstr "Save Info" msgid "save-location" msgstr "Save Location" msgid "save-name" msgstr "Save Name" msgid "scheduler is not running" msgstr "Zeitplandienst läuft nicht" msgid "scheduler is running" msgstr "Zeitplandienst läuft" msgid "separator-sheets" msgstr "Separator Sheets" msgid "separator-sheets-type" msgstr "Separator Sheets Type" msgid "separator-sheets-type.both-sheets" msgstr "Both Sheets" msgid "separator-sheets-type.end-sheet" msgstr "End Sheet" msgid "separator-sheets-type.none" msgstr "None" msgid "separator-sheets-type.slip-sheets" msgstr "Slip Sheets" msgid "separator-sheets-type.start-sheet" msgstr "Start Sheet" msgid "sheet-collate" msgstr "Collate Copies" msgid "sheet-collate.collated" msgstr "Yes" msgid "sheet-collate.uncollated" msgstr "No" msgid "sides" msgstr "2-Sided Printing" msgid "sides.one-sided" msgstr "Off" msgid "sides.two-sided-long-edge" msgstr "On (Portrait)" msgid "sides.two-sided-short-edge" msgstr "On (Landscape)" #, c-format msgid "stat of %s failed: %s" msgstr "Status von %s fehlgeschlagen: %s" msgid "status\t\tShow status of daemon and queue." msgstr "status\t\tStatus von Dienst und Warteschlange anzeigen." msgid "status-message" msgstr "Status Message" msgid "stitching" msgstr "Staple" msgid "stitching-angle" msgstr "Stitching Angle" msgid "stitching-locations" msgstr "Stitching Locations" msgid "stitching-method" msgstr "Stitching Method" msgid "stitching-method.auto" msgstr "Automatic" msgid "stitching-method.crimp" msgstr "Crimp" msgid "stitching-method.wire" msgstr "Wire" msgid "stitching-offset" msgstr "Stitching Offset" msgid "stitching-reference-edge" msgstr "Stitching Reference Edge" msgid "stitching-reference-edge.bottom" msgstr "Bottom" msgid "stitching-reference-edge.left" msgstr "Left" msgid "stitching-reference-edge.right" msgstr "Right" msgid "stitching-reference-edge.top" msgstr "Top" msgid "stopped" msgstr "angehalten" msgid "subject" msgstr "Subject" #, c-format msgid "system default destination: %s" msgstr "systemvoreingestelltes Ziel: %s" #, c-format msgid "system default destination: %s/%s" msgstr "systemvoreingestelltes Ziel: %s/%s" msgid "t33-subaddress" msgstr "T33 Subaddress" msgid "to-name" msgstr "To Name" msgid "transmission-status" msgstr "Transmission Status" msgid "transmission-status.3" msgstr "Pending" msgid "transmission-status.4" msgstr "Pending Retry" msgid "transmission-status.5" msgstr "Processing" msgid "transmission-status.7" msgstr "Canceled" msgid "transmission-status.8" msgstr "Aborted" msgid "transmission-status.9" msgstr "Completed" msgid "trimming" msgstr "Cut" msgid "trimming-offset" msgstr "Cut Position" msgid "trimming-reference-edge" msgstr "Trimming Reference Edge" msgid "trimming-reference-edge.bottom" msgstr "Bottom" msgid "trimming-reference-edge.left" msgstr "Left" msgid "trimming-reference-edge.right" msgstr "Right" msgid "trimming-reference-edge.top" msgstr "Top" msgid "trimming-type" msgstr "Trimming Type" msgid "trimming-type.draw-line" msgstr "Draw Line" msgid "trimming-type.full" msgstr "Full" msgid "trimming-type.partial" msgstr "Partial" msgid "trimming-type.perforate" msgstr "Perforate" msgid "trimming-type.score" msgstr "Score" msgid "trimming-type.tab" msgstr "Tab" msgid "trimming-when" msgstr "Trimming When" msgid "trimming-when.after-documents" msgstr "After Documents" msgid "trimming-when.after-job" msgstr "After Job" msgid "trimming-when.after-sets" msgstr "After Sets" msgid "trimming-when.after-sheets" msgstr "After Sheets" msgid "unknown" msgstr "Unbekannt" msgid "untitled" msgstr "Ohne Titel" msgid "variable-bindings uses indefinite length" msgstr "variable-bindings hat unbestimmte Länge" msgid "x-accuracy" msgstr "X Accuracy" msgid "x-dimension" msgstr "X Dimension" msgid "x-offset" msgstr "X Offset" msgid "x-origin" msgstr "X Origin" msgid "y-accuracy" msgstr "Y Accuracy" msgid "y-dimension" msgstr "Y Dimension" msgid "y-offset" msgstr "Y Offset" msgid "y-origin" msgstr "Y Origin" msgid "z-accuracy" msgstr "Z Accuracy" msgid "z-dimension" msgstr "Z Dimension" msgid "z-offset" msgstr "Z Offset" #~ msgid "\tInterface: %s/interfaces/%s" #~ msgstr "\tSchnittstelle: %s/interfaces/%s" #~ msgid " --lf End lines with LF (UNIX/Linux/OS X)." #~ msgstr " --lf Zeilenenden mit LF (UNIX/Linux/OS X)" #~ msgid " -E Test with HTTP Upgrade to TLS." #~ msgstr " -E Teste mit HTTP Upgrade auf TLS." #~ msgid " -S Test with SSL encryption." #~ msgstr " -S Teste mit SSL Verschlüsselung." #~ msgid " -a Browse for all services." #~ msgstr " -a Browse für alle Dienste." #~ msgid " -d domain Browse/resolve in specified domain." #~ msgstr "" #~ " -d domain Browse/löse auf in der angegebenen Domäne." #~ msgid "%g x %g" #~ msgstr "%g×%g" #~ msgid "720dpi" #~ msgstr "720 dpi" #~ msgid "Enter old password:" #~ msgstr "Altes Passwort eingeben :" #~ msgid "Enter password again:" #~ msgstr "Neues Passwort wiederholen :" #~ msgid "Enter password:" #~ msgstr "Neues Passwort eingeben :" #~ msgid "Envelope #10 " #~ msgstr "US Umschlag 10" #~ msgid "File Folder " #~ msgstr "Datei-Verzeichnis " #~ msgid "Finishing" #~ msgstr "Endverarbeitung" #~ msgid "New Stylus Color Series" #~ msgstr "Neue Stylus Color Serie" #~ msgid "New Stylus Photo Series" #~ msgstr "Neue Stylus Photo Serie" #~ msgid "No Finishing" #~ msgstr "Keine Endverarbeitung" #~ msgid "Postcard Double " #~ msgstr "Doppelpostkarte" #~ msgid "Purge Jobs" #~ msgstr "Aufträge löschen" #~ msgid "Stylus Color Series" #~ msgstr "Stylus Color Serie" #~ msgid "Stylus Photo Series" #~ msgstr "Stylus Photo Serie" #~ msgid "Unable to copy interface script - %s" #~ msgstr "Schnittstellenskript kann nicht kopiert werden - %s." #~ msgid "compression" #~ msgstr "Compression" #~ msgid "compression-accepted" #~ msgstr "Compression Accepted" #~ msgid "compression.compress" #~ msgstr "Compress" #~ msgid "compression.deflate" #~ msgstr "Deflate" #~ msgid "compression.gzip" #~ msgstr "Gzip" #~ msgid "compression.none" #~ msgstr "None" #~ msgid "destination-accesses" #~ msgstr "Destination Accesses" #~ msgid "destination-statuses" #~ msgstr "Destination Statuses" #~ msgid "destination-uris" #~ msgstr "Destination Uris" #~ msgid "document-access" #~ msgstr "Document Access" #~ msgid "document-data-get-interval" #~ msgstr "Document Data Get Interval" #~ msgid "document-data-wait" #~ msgstr "Document Data Wait" #~ msgid "document-format-accepted" #~ msgstr "Document Format Accepted" #~ msgid "document-message" #~ msgstr "Document Message" #~ msgid "document-metadata" #~ msgstr "Document Metadata" #~ msgid "document-name" #~ msgstr "Document Name" #~ msgid "document-number" #~ msgstr "Document Number" #~ msgid "document-password" #~ msgstr "Document Password" #~ msgid "document-preprocessed" #~ msgstr "Document Preprocessed" #~ msgid "fetch-status-message" #~ msgstr "Fetch Status Message" #~ msgid "identify-actions" #~ msgstr "Identify Actions" #~ msgid "identify-actions.display" #~ msgstr "Display" #~ msgid "identify-actions.flash" #~ msgstr "Flash" #~ msgid "identify-actions.sound" #~ msgstr "Sound" #~ msgid "identify-actions.speak" #~ msgstr "Speak" #~ msgid "ipp-attribute-fidelity" #~ msgstr "Attribute Fidelity" #~ msgid "job-authorization-uri" #~ msgstr "Job Authorization URI" #~ msgid "job-destination-spooling-supported.automatic" #~ msgstr "Automatic" #~ msgid "job-destination-spooling-supported.spool" #~ msgstr "Spool" #~ msgid "job-destination-spooling-supported.stream" #~ msgstr "Stream" #~ msgid "job-impressions-col" #~ msgstr "Job Impressions" #~ msgid "job-impressions-estimated" #~ msgstr "Job Impressions Estimated" #~ msgid "job-media-sheets-col" #~ msgstr "Job Media Sheets" #~ msgid "job-pages-per-set" #~ msgstr "Job Pages Per Set" #~ msgid "job-password" #~ msgstr "Job Password" #~ msgid "job-password-repertoire-configured" #~ msgstr "Job Password Repertoire Configured" #~ msgid "job-password-repertoire-supported.iana_us-ascii_any" #~ msgstr "Iana Us Ascii Any" #~ msgid "job-password-repertoire-supported.iana_us-ascii_complex" #~ msgstr "Iana Us Ascii Complex" #~ msgid "job-password-repertoire-supported.iana_us-ascii_digits" #~ msgstr "Iana Us Ascii Digits" #~ msgid "job-password-repertoire-supported.iana_us-ascii_letters" #~ msgstr "Iana Us Ascii Letters" #~ msgid "job-password-repertoire-supported.iana_utf-8_any" #~ msgstr "Iana Utf 8 Any" #~ msgid "job-password-repertoire-supported.iana_utf-8_digits" #~ msgstr "Iana Utf 8 Digits" #~ msgid "job-password-repertoire-supported.iana_utf-8_letters" #~ msgstr "Iana Utf 8 Letters" #~ msgid "job-settable-attributes-supported.job-name" #~ msgstr "Job Name" #~ msgid "job-settable-attributes-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.arithmetic" #~ msgstr "Arithmetic" #~ msgid "jpeg-features-supported.cmyk" #~ msgstr "Cmyk" #~ msgid "jpeg-features-supported.deep" #~ msgstr "Deep" #~ msgid "jpeg-features-supported.hierarchical" #~ msgstr "Hierarchical" #~ msgid "jpeg-features-supported.icc" #~ msgstr "Icc" #~ msgid "jpeg-features-supported.lossless" #~ msgstr "Lossless" #~ msgid "jpeg-features-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.progressive" #~ msgstr "Progressive" #~ msgid "lpadmin: Expected PPD after \"-P\" option." #~ msgstr "lpadmin: Nach der \"-P\" Option PPD erwartet." #~ msgid "lpadmin: Expected interface after \"-i\" option." #~ msgstr "lpadmin: Schnittstelle nach der \"-i\" Option erwartet." #~ msgid "lpinfo: Unknown argument \"%s\"." #~ msgstr "lpinfo: Unbekanntes Argument »%s«." #~ msgid "lpinfo: Unknown option \"%c\"." #~ msgstr "lpinfo: Unbekannte Option »%c«." #~ msgid "lpinfo: Unknown option \"%s\"." #~ msgstr "lpinfo: Unbekannte Option »%s«." #~ msgid "lpmove: Unknown option \"%c\"." #~ msgstr "lpinfo: Unbekannte Option »%c«." #~ msgid "material-type.pla-dissolvable" #~ msgstr "Pla Dissolvable" #~ msgid "media.om_large-photo_200x300mm" #~ msgstr "200 x 300mm" #~ msgid "notify-subscribed-event" #~ msgstr "Notify Event" #~ msgid "operations-supported.10" #~ msgstr "Get-Jobs" #~ msgid "operations-supported.11" #~ msgstr "Get-Printer-Attributes" #~ msgid "operations-supported.12" #~ msgstr "Hold-Job" #~ msgid "operations-supported.13" #~ msgstr "Release-Job" #~ msgid "operations-supported.14" #~ msgstr "Restart-Job" #~ msgid "operations-supported.16" #~ msgstr "Pause-Printer" #~ msgid "operations-supported.17" #~ msgstr "Resume-Printer" #~ msgid "operations-supported.18" #~ msgstr "Purge-Jobs" #~ msgid "operations-supported.19" #~ msgstr "Set-Printer-Attributes" #~ msgid "operations-supported.2" #~ msgstr "Print-Job" #~ msgid "operations-supported.20" #~ msgstr "Set-Job-Attributes" #~ msgid "operations-supported.21" #~ msgstr "Get-Printer-Supported-Values" #~ msgid "operations-supported.22" #~ msgstr "Create-Printer-Subscriptions" #~ msgid "operations-supported.23" #~ msgstr "Create-Job-Subscriptions" #~ msgid "operations-supported.24" #~ msgstr "Get-Subscription-Attributes" #~ msgid "operations-supported.25" #~ msgstr "Get-Subscriptions" #~ msgid "operations-supported.26" #~ msgstr "Renew-Subscription" #~ msgid "operations-supported.27" #~ msgstr "Cancel-Subscription" #~ msgid "operations-supported.28" #~ msgstr "Get-Notifications" #~ msgid "operations-supported.3" #~ msgstr "Print-URI" #~ msgid "operations-supported.34" #~ msgstr "Enable-Printer" #~ msgid "operations-supported.35" #~ msgstr "Disable-Printer" #~ msgid "operations-supported.36" #~ msgstr "Pause-Printer-After-Current-Job" #~ msgid "operations-supported.37" #~ msgstr "Hold-New-Jobs" #~ msgid "operations-supported.38" #~ msgstr "Release-Held-New-Jobs" #~ msgid "operations-supported.39" #~ msgstr "Deactivate-Printer" #~ msgid "operations-supported.4" #~ msgstr "Validate-Job" #~ msgid "operations-supported.40" #~ msgstr "Activate-Printer" #~ msgid "operations-supported.41" #~ msgstr "Restart-Printer" #~ msgid "operations-supported.42" #~ msgstr "Shutdown-Printer" #~ msgid "operations-supported.43" #~ msgstr "Startup-Printer" #~ msgid "operations-supported.44" #~ msgstr "Reprocess-Job" #~ msgid "operations-supported.45" #~ msgstr "Cancel-Current-Job" #~ msgid "operations-supported.46" #~ msgstr "Suspend-Current-Job" #~ msgid "operations-supported.47" #~ msgstr "Resume-Job" #~ msgid "operations-supported.48" #~ msgstr "Promote-Job" #~ msgid "operations-supported.49" #~ msgstr "Schedule-Job-After" #~ msgid "operations-supported.5" #~ msgstr "Create-Job" #~ msgid "operations-supported.51" #~ msgstr "Cancel-Document" #~ msgid "operations-supported.52" #~ msgstr "Get-Document-Attributes" #~ msgid "operations-supported.53" #~ msgstr "Get-Documents" #~ msgid "operations-supported.54" #~ msgstr "Delete-Document" #~ msgid "operations-supported.55" #~ msgstr "Set-Document-Attributes" #~ msgid "operations-supported.56" #~ msgstr "Cancel-Jobs" #~ msgid "operations-supported.57" #~ msgstr "Cancel-My-Jobs" #~ msgid "operations-supported.58" #~ msgstr "Resubmit-Job" #~ msgid "operations-supported.59" #~ msgstr "Close-Job" #~ msgid "operations-supported.6" #~ msgstr "Send-Document" #~ msgid "operations-supported.60" #~ msgstr "Identify-Printer" #~ msgid "operations-supported.61" #~ msgstr "Validate-Document" #~ msgid "operations-supported.62" #~ msgstr "Add-Document-Images" #~ msgid "operations-supported.63" #~ msgstr "Acknowledge-Document" #~ msgid "operations-supported.64" #~ msgstr "Acknowledge-Identify-Printer" #~ msgid "operations-supported.65" #~ msgstr "Acknowledge-Job" #~ msgid "operations-supported.66" #~ msgstr "Fetch-Document" #~ msgid "operations-supported.67" #~ msgstr "Fetch-Job" #~ msgid "operations-supported.68" #~ msgstr "Get-Output-Device-Attributes" #~ msgid "operations-supported.69" #~ msgstr "Update-Active-Jobs" #~ msgid "operations-supported.7" #~ msgstr "Send-URI" #~ msgid "operations-supported.70" #~ msgstr "Deregister-Output-Device" #~ msgid "operations-supported.71" #~ msgstr "Update-Document-Status" #~ msgid "operations-supported.72" #~ msgstr "Update-Job-Status" #~ msgid "operations-supported.73" #~ msgstr "Update-Output-Device-Attributes" #~ msgid "operations-supported.74" #~ msgstr "Get-Next-Document-Data" #~ msgid "operations-supported.8" #~ msgstr "Cancel-Job" #~ msgid "operations-supported.9" #~ msgstr "Get-Job-Attributes" #~ msgid "output-device" #~ msgstr "Output Device" #~ msgid "output-device-job-states" #~ msgstr "Output Device Job States" #~ msgid "output-device-uuid" #~ msgstr "Output Device Uuid" #~ msgid "pdf-features-supported.prc" #~ msgstr "Prc" #~ msgid "pdf-features-supported.u3d" #~ msgstr "U3d" #~ msgid "pdf-versions-supported.adobe-1.3" #~ msgstr "Adobe 1.3" #~ msgid "pdf-versions-supported.adobe-1.4" #~ msgstr "Adobe 1.4" #~ msgid "pdf-versions-supported.adobe-1.5" #~ msgstr "Adobe 1.5" #~ msgid "pdf-versions-supported.adobe-1.6" #~ msgstr "Adobe 1.6" #~ msgid "pdf-versions-supported.iso-15930-1_2001" #~ msgstr "ISO 15930-1:2001" #~ msgid "pdf-versions-supported.iso-15930-3_2002" #~ msgstr "ISO 15930-3:2002" #~ msgid "pdf-versions-supported.iso-15930-4_2003" #~ msgstr "ISO 15930-4:2003" #~ msgid "pdf-versions-supported.iso-15930-6_2003" #~ msgstr "ISO 15930-6:2003" #~ msgid "pdf-versions-supported.iso-15930-7_2010" #~ msgstr "ISO 15930-7:2010" #~ msgid "pdf-versions-supported.iso-15930-8_2010" #~ msgstr "ISO 15930-8:2010" #~ msgid "pdf-versions-supported.iso-16612-2_2010" #~ msgstr "ISO 16612-2:2010" #~ msgid "pdf-versions-supported.iso-19005-1_2005" #~ msgstr "ISO 19005-1:2005" #~ msgid "pdf-versions-supported.iso-19005-2_2011" #~ msgstr "ISO 19005-2:2011" #~ msgid "pdf-versions-supported.iso-19005-3_2012" #~ msgstr "ISO 19005-3:2012" #~ msgid "pdf-versions-supported.iso-32000-1_2008" #~ msgstr "ISO 32000-1:2008" #~ msgid "pdf-versions-supported.none" #~ msgstr "None" #~ msgid "pdf-versions-supported.pwg-5102.3" #~ msgstr "PWG 5102.3" #~ msgid "preferred-attributes" #~ msgstr "Preferred Attributes" #~ msgid "printer-mandatory-job-attributes" #~ msgstr "Printer Mandatory Job Attributes" #~ msgid "profile-uri-actual" #~ msgstr "Actual Profile URI" #~ msgid "requested-attributes.all" #~ msgstr "All" #~ msgid "requested-attributes.document-description" #~ msgstr "Document Description" #~ msgid "requested-attributes.document-template" #~ msgstr "Document Template" #~ msgid "requested-attributes.job-actuals" #~ msgstr "Job Actuals" #~ msgid "requested-attributes.job-description" #~ msgstr "Job Description" #~ msgid "requested-attributes.job-template" #~ msgstr "Job Template" #~ msgid "requested-attributes.printer-description" #~ msgstr "Printer Description" #~ msgid "requested-attributes.subscription-description" #~ msgstr "Subscription Description" #~ msgid "requested-attributes.subscription-template" #~ msgstr "Subscription Template" #~ msgid "requesting-user-name" #~ msgstr "Requesting User Name" #~ msgid "requesting-user-uri" #~ msgstr "Requesting User URI" #~ msgid "x-image-position" #~ msgstr "X Image Position" #~ msgid "x-image-position.center" #~ msgstr "Center" #~ msgid "x-image-position.left" #~ msgstr "Left" #~ msgid "x-image-position.none" #~ msgstr "None" #~ msgid "x-image-position.right" #~ msgstr "Right" #~ msgid "x-image-shift" #~ msgstr "X Image Shift" #~ msgid "x-side1-image-shift" #~ msgstr "X Front Side Image Shift" #~ msgid "x-side2-image-shift" #~ msgstr "X Back Side Image Shift" #~ msgid "y-image-position" #~ msgstr "Y Image Position" #~ msgid "y-image-position.bottom" #~ msgstr "Bottom" #~ msgid "y-image-position.center" #~ msgstr "Center" #~ msgid "y-image-position.none" #~ msgstr "None" #~ msgid "y-image-position.top" #~ msgstr "Top" #~ msgid "y-image-shift" #~ msgstr "Y Image Shift" #~ msgid "y-side1-image-shift" #~ msgstr "Y Front Side Image Shift" #~ msgid "y-side2-image-shift" #~ msgstr "Y Back Side Image Shift" cups-2.2.7/locale/cups_es.po000664 000765 000024 00001212357 13255074424 016426 0ustar00msweetstaff000000 000000 # # "$Id$" # # Spanish message catalog for CUPS. # # Copyright 2007-2012 by Apple Inc. # Copyright 2005-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # msgid "" msgstr "" "Project-Id-Version: CUPS 2.2\n" "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n" "POT-Creation-Date: 2018-03-19 18:36-0400\n" "PO-Revision-Date: 2016-06-26 21:17+0100\n" "Last-Translator: Juan Pablo González Riopedre \n" "Language-Team: Spanish\n" "Language: Spanish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.4\n" msgid "\t\t(all)" msgstr "\t\t(todos)" msgid "\t\t(none)" msgstr "\t\t(ninguno)" #, c-format msgid "\t%d entries" msgstr "\t%d entradas" #, c-format msgid "\t%s" msgstr "\t%s" msgid "\tAfter fault: continue" msgstr "\tTras fallo: continuar" #, c-format msgid "\tAlerts: %s" msgstr "\tAlertas: %s" msgid "\tBanner required" msgstr "\tSe necesita un rótulo" msgid "\tCharset sets:" msgstr "\tJuegos de caracteres:" msgid "\tConnection: direct" msgstr "\tConexión: directa" msgid "\tConnection: remote" msgstr "\tConexión: remota" msgid "\tContent types: any" msgstr "\tTipos de contenido: cualesquiera" msgid "\tDefault page size:" msgstr "\tTamaño de página predeterminado:" msgid "\tDefault pitch:" msgstr "\tPaso predeterminado:" msgid "\tDefault port settings:" msgstr "\tAjustes del puerto predeterminados:" #, c-format msgid "\tDescription: %s" msgstr "\tDescripción: %s" msgid "\tForm mounted:" msgstr "\tFormulario montado:" msgid "\tForms allowed:" msgstr "\tFormularios permitidos:" #, c-format msgid "\tInterface: %s.ppd" msgstr "\tInterfaz: %s.ppd" #, c-format msgid "\tInterface: %s/ppd/%s.ppd" msgstr "\tInterfaz: %s/ppd/%s.ppd" #, c-format msgid "\tLocation: %s" msgstr "\tUbicación: %s" msgid "\tOn fault: no alert" msgstr "\tEn fallo: no alertar" msgid "\tPrinter types: unknown" msgstr "\tTipos de impresora: desconocidos" #, c-format msgid "\tStatus: %s" msgstr "\tEstado: %s" msgid "\tUsers allowed:" msgstr "\tUsuarios permitidos:" msgid "\tUsers denied:" msgstr "\tUsuarios denegados:" msgid "\tdaemon present" msgstr "\tdemonio presente" msgid "\tno entries" msgstr "\tno hay entradas" #, c-format msgid "\tprinter is on device '%s' speed -1" msgstr "\tla impresora está conectada a '%s' velocidad -1" msgid "\tprinting is disabled" msgstr "\tla impresión está desactivada" msgid "\tprinting is enabled" msgstr "\tla impresión está activada" #, c-format msgid "\tqueued for %s" msgstr "\ten cola para %s" msgid "\tqueuing is disabled" msgstr "\tla cola está desactivada" msgid "\tqueuing is enabled" msgstr "\tla cola está activada" msgid "\treason unknown" msgstr "\trazón desconocida" msgid "" "\n" " DETAILED CONFORMANCE TEST RESULTS" msgstr "" "\n" " RESULTADOS DETALLADOS DE LA PRUEBA DE CONFORMIDAD" msgid " Ignore specific warnings." msgstr " Ignorar advertencias (warnings) específicas." msgid " Issue warnings instead of errors." msgstr "" " Emitir advertencias (warnings) en vez de errores." msgid " REF: Page 15, section 3.1." msgstr " REF: Página 15, sección 3.1." msgid " REF: Page 15, section 3.2." msgstr " REF: Página 15, sección 3.2." msgid " REF: Page 19, section 3.3." msgstr " REF: Página 19, sección 3.3." msgid " REF: Page 20, section 3.4." msgstr " REF: Página 20, sección 3.4." msgid " REF: Page 27, section 3.5." msgstr " REF: Página 27, sección 3.5." msgid " REF: Page 42, section 5.2." msgstr " REF: Página 42, sección 5.2." msgid " REF: Pages 16-17, section 3.2." msgstr " REF: Páginas 16-17, sección 3.2." msgid " REF: Pages 42-45, section 5.2." msgstr " REF: Páginas 42-45, sección 5.2." msgid " REF: Pages 45-46, section 5.2." msgstr " REF: Páginas 45-46, sección 5.2." msgid " REF: Pages 48-49, section 5.2." msgstr " REF: Páginas 48-49, sección 5.2." msgid " REF: Pages 52-54, section 5.2." msgstr " REF: Páginas 52-54, sección 5.2." #, c-format msgid " %-39.39s %.0f bytes" msgstr " %-39.39s %.0f bytes" #, c-format msgid " PASS Default%s" msgstr " PASA Default%s" msgid " PASS DefaultImageableArea" msgstr " PASA DefaultImageableArea" msgid " PASS DefaultPaperDimension" msgstr " PASA DefaultPaperDimension" msgid " PASS FileVersion" msgstr " PASA FileVersion" msgid " PASS FormatVersion" msgstr " PASA FormatVersion" msgid " PASS LanguageEncoding" msgstr " PASA LanguageEncoding" msgid " PASS LanguageVersion" msgstr " PASA LanguageVersion" msgid " PASS Manufacturer" msgstr " PASA Manufacturer" msgid " PASS ModelName" msgstr " PASA ModelName" msgid " PASS NickName" msgstr " PASA NickName" msgid " PASS PCFileName" msgstr " PASA PCFileName" msgid " PASS PSVersion" msgstr " PASA PSVersion" msgid " PASS PageRegion" msgstr " PASA PageRegion" msgid " PASS PageSize" msgstr " PASA PageSize" msgid " PASS Product" msgstr " PASA Product" msgid " PASS ShortNickName" msgstr " PASA ShortNickName" #, c-format msgid " WARN %s has no corresponding options." msgstr " ADVERTENCIA %s tiene opciones que no corresponden." #, c-format msgid "" " WARN %s shares a common prefix with %s\n" " REF: Page 15, section 3.2." msgstr "" " ADVERTENCIA %s comparte un prefijo común con %s\n" " REF: Página 15, sección 3.2." #, c-format msgid "" " WARN Duplex option keyword %s may not work as expected and should " "be named Duplex.\n" " REF: Page 122, section 5.17" msgstr "" " ADVERTENCIA La clave de opción Duplex %s puede que no funcione " "como se espera y debería llamarse Duplex.\n" " REF: Página 122, sección 5.17." msgid " WARN File contains a mix of CR, LF, and CR LF line endings." msgstr "" " ADVERTENCIA El archivo contiene una mezcla de líneas acabadas en " "CR, LF y CR LF." msgid "" " WARN LanguageEncoding required by PPD 4.3 spec.\n" " REF: Pages 56-57, section 5.3." msgstr "" " ADVERTENCIA Se necesita LanguageEncoding por especificación de " "PPD 4.3.\n" " REF: Páginas 56-57, sección 5.3." #, c-format msgid " WARN Line %d only contains whitespace." msgstr " ADVERTENCIA La línea %d solo contiene espacios en blanco." msgid "" " WARN Manufacturer required by PPD 4.3 spec.\n" " REF: Pages 58-59, section 5.3." msgstr "" " ADVERTENCIA Se necesita fabricante por especificación de PPD " "4.3.\n" " REF: Páginas 58-59, sección 5.3." msgid "" " WARN Non-Windows PPD files should use lines ending with only LF, " "not CR LF." msgstr "" " ADVERTENCIA Los archivos PPD que no sean de Windows deben tener " "líneas que acaben sólo en LF, no en CR LF." #, c-format msgid "" " WARN Obsolete PPD version %.1f.\n" " REF: Page 42, section 5.2." msgstr "" " ADVERTENCIA Versión de PPD %.1f anticuada.\n" " REF: Página 42, sección 5.2." msgid "" " WARN PCFileName longer than 8.3 in violation of PPD spec.\n" " REF: Pages 61-62, section 5.3." msgstr "" " ADVERTENCIA PCFileName es mas largo que 8.3 violando la " "especificación PPD.\n" " REF: Páginas 61-62, sección 5.3." msgid "" " WARN PCFileName should contain a unique filename.\n" " REF: Pages 61-62, section 5.3." msgstr "" " ADVERTENCIA PCFileName debe contener un único nombre de archivo.\n" " REF: Páginas 61-62, sección 5.3." msgid "" " WARN Protocols contains PJL but JCL attributes are not set.\n" " REF: Pages 78-79, section 5.7." msgstr "" " ADVERTENCIA Los protocolos contienen PJL pero no se especifican " "los atributos JCL.\n" " REF: Páginas 78-79, sección 5.7." msgid "" " WARN Protocols contains both PJL and BCP; expected TBCP.\n" " REF: Pages 78-79, section 5.7." msgstr "" " ADVERTENCIA Los protocolos contienen a ambos, PJL y BCP; se " "esperaba TBCP.\n" " REF: Páginas 78-79, sección 5.7." msgid "" " WARN ShortNickName required by PPD 4.3 spec.\n" " REF: Pages 64-65, section 5.3." msgstr "" " ADVERTENCIA Se necesita ShortNickName por especificación de PPD " "4.3.\n" " REF: Páginas 64-65, sección 5.3." msgid " cupsaddsmb [options] -a" msgstr " cupsaddsmb [opciones] -a" msgid " cupstestdsc [options] -" msgstr " cupstestdsc [opciones] -" msgid " program | cupstestppd [options] -" msgstr " programa | cupstestppd [opciones] -" #, c-format msgid "" " %s \"%s %s\" conflicts with \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." msgstr "" " %s \"%s %s\" está en conflicto con \"%s %s\"\n" " (restricción=\"%s %s %s %s\")." #, c-format msgid " %s %s %s does not exist." msgstr " %s %s %s no existe." #, c-format msgid " %s %s file \"%s\" has the wrong capitalization." msgstr " %s %s archivo \"%s\" tiene las mayúsculas equivocadas." #, c-format msgid "" " %s Bad %s choice %s.\n" " REF: Page 122, section 5.17" msgstr "" " %s Incorrecto %s preferencia %s.\n" " REF: Página 122, sección 5.17." #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s." msgstr "" " %s Cadena de traducción UTF-8 \"%s\" incorrecta para opción %s, " "preferencia %s." #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s." msgstr " %s Cadena de traducción UTF-8 \"%s\" incorrecta para opción %s." #, c-format msgid " %s Bad cupsFilter value \"%s\"." msgstr " %s Valor cupsFilter \"%s\" incorrecto." #, c-format msgid " %s Bad cupsFilter2 value \"%s\"." msgstr " %s Valor cupsFilter2 \"%s\" incorrecto." #, c-format msgid " %s Bad cupsICCProfile %s." msgstr " %s cupsICCProfile %s incorrecto." #, c-format msgid " %s Bad cupsPreFilter value \"%s\"." msgstr " %s Valor cupsPreFilter \"%s\" incorrecto." #, c-format msgid " %s Bad cupsUIConstraints %s: \"%s\"" msgstr " %s cupsUIConstraints %s: \"%s\" incorrecto" #, c-format msgid " %s Bad language \"%s\"." msgstr " %s Idioma incorrecto \"%s\"." #, c-format msgid " %s Bad permissions on %s file \"%s\"." msgstr " %s Permisos incorrectos en el archivo %s \"%s\"." #, c-format msgid " %s Bad spelling of %s - should be %s." msgstr " %s %s mal escrito - debería ser %s." #, c-format msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID." msgstr " %s No puede proporcionar APScanAppPath y APScanAppBundleID." #, c-format msgid " %s Default choices conflicting." msgstr " %s Las preferencias predeterminadas están en conflicto." #, c-format msgid " %s Empty cupsUIConstraints %s" msgstr " %s cupsUIConstraints vacío %s" #, c-format msgid " %s Missing \"%s\" translation string for option %s, choice %s." msgstr "" " %s Falta cadena de traducción \"%s\" para opción %s, preferencia %s." #, c-format msgid " %s Missing \"%s\" translation string for option %s." msgstr " %s Falta cadena de traducción \"%s\" para opción %s." #, c-format msgid " %s Missing %s file \"%s\"." msgstr " %s Falta archivo %s \"%s\"." #, c-format msgid "" " %s Missing REQUIRED PageRegion option.\n" " REF: Page 100, section 5.14." msgstr "" " %s Falta la opción NECESARIA PageRegion.\n" " REF: Página 100, sección 5.14." #, c-format msgid "" " %s Missing REQUIRED PageSize option.\n" " REF: Page 99, section 5.14." msgstr "" " %s Falta la opción NECESARIA PageSize.\n" " REF: Página 99, sección 5.14." #, c-format msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" " %s Falta la preferencia *%s %s en UIConstraint \"*%s %s *%s %s\"." #, c-format msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" msgstr " %s Falta la preferencia *%s %s en cupsUIConstraints %s: \"%s\"" #, c-format msgid " %s Missing cupsUIResolver %s" msgstr " %s Falta cupsUIResolver %s" #, c-format msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"." msgstr " %s Falta la opción %s en UIConstraints \"*%s %s *%s %s\"." #, c-format msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\"" msgstr " %s Falta la opción %s en cupsUIConstraints %s: \"%s\"" #, c-format msgid " %s No base translation \"%s\" is included in file." msgstr " %s No hay traducción base \"%s\" incluida en el archivo." #, c-format msgid "" " %s REQUIRED %s does not define choice None.\n" " REF: Page 122, section 5.17" msgstr "" " %s NECESARIO %s no define la preferencia None.\n" " REF: Página 122, sección 5.17." #, c-format msgid " %s Size \"%s\" defined for %s but not for %s." msgstr " %s Tamaño \"%s\" definido para %s pero no para %s." #, c-format msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)." msgstr " %s El tamaño \"%s\" tiene dimensiones inesperadas (%gx%g)." #, c-format msgid " %s Size \"%s\" should be \"%s\"." msgstr " %s Tamaño \"%s\" debería ser \"%s\"." #, c-format msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"." msgstr "" " %s Tamaño \"%s\" debería ser el nombre estandar de Adobe \"%s\"." #, c-format msgid " %s cupsICCProfile %s hash value collides with %s." msgstr " %s Valor hash de cupsICCProfile %s colisiona con %s." #, c-format msgid " %s cupsUIResolver %s causes a loop." msgstr " %s cupsUIResolver %s genera un bucle." #, c-format msgid "" " %s cupsUIResolver %s does not list at least two different options." msgstr " %s cupsUIResolver %s no lista al menos dos opciones diferentes." #, c-format msgid "" " **FAIL** %s must be 1284DeviceID\n" " REF: Page 72, section 5.5" msgstr "" " **FALLO** %s debería ser 1284DeviceID.\n" " REF: Página 72, sección 5.5." #, c-format msgid "" " **FAIL** Bad Default%s %s\n" " REF: Page 40, section 4.5." msgstr "" " **FALLO** Default%s %s incorrecto\n" " REF: Página 40, sección 4.5." #, c-format msgid "" " **FAIL** Bad DefaultImageableArea %s\n" " REF: Page 102, section 5.15." msgstr "" " **FALLO** DefaultImageableArea %s incorrecto\n" " REF: Página 102, sección 5.15." #, c-format msgid "" " **FAIL** Bad DefaultPaperDimension %s\n" " REF: Page 103, section 5.15." msgstr "" " **FALLO** DefaultPaperDimension %s incorrecto\n" " REF: Página 103, sección 5.15." #, c-format msgid "" " **FAIL** Bad FileVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" " **FALLO** FileVersion \"%s\" incorrecto\n" " REF: Página 56, sección 5.3." #, c-format msgid "" " **FAIL** Bad FormatVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" " **FALLO** FormatVersion \"%s\" incorrecto\n" " REF: Página 56, sección 5.3." msgid "" " **FAIL** Bad JobPatchFile attribute in file\n" " REF: Page 24, section 3.4." msgstr "" " **FALLO** Atributo JobPatchFile en archivo, incorrecto\n" " REF: Página 24, sección 3.4." #, c-format msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1." msgstr "" " **FALLO** LanguageEncoding %s incorrecto: debería ser ISOLatin1." #, c-format msgid " **FAIL** Bad LanguageVersion %s - must be English." msgstr "" " **FALLO** LanguageVersion %s incorrecto: debería ser English (Inglés)." #, c-format msgid "" " **FAIL** Bad Manufacturer (should be \"%s\")\n" " REF: Page 211, table D.1." msgstr "" " **FALLO** Fabricante incorrecto (debería ser \"%s\")\n" " REF: Página 211, tabla D.1." #, c-format msgid "" " **FAIL** Bad ModelName - \"%c\" not allowed in string.\n" " REF: Pages 59-60, section 5.3." msgstr "" " **FALLO** ModelName incorrecto - \"%c\" no permitido en la cadena.\n" " REF: Páginas 59-60, sección 5.3." msgid "" " **FAIL** Bad PSVersion - not \"(string) int\".\n" " REF: Pages 62-64, section 5.3." msgstr "" " **FALLO** PSVersion incorrecto - no es \"(string) int\".\n" " REF: Páginas 62-64, sección 5.3." msgid "" " **FAIL** Bad Product - not \"(string)\".\n" " REF: Page 62, section 5.3." msgstr "" " **FALLO** Product incorrecto - no es \"(string)\".\n" " REF: Página 62, sección 5.3." msgid "" " **FAIL** Bad ShortNickName - longer than 31 chars.\n" " REF: Pages 64-65, section 5.3." msgstr "" " **FALLO** ShortNickName incorrecto - mayor de 31 caracteres.\n" " REF: Páginas 64-65, sección 5.3." #, c-format msgid "" " **FAIL** Bad option %s choice %s\n" " REF: Page 84, section 5.9" msgstr "" " **FALLO** Opción incorrecta %s preferencia %s\n" " REF: Página 84, sección 5.9." #, c-format msgid " **FAIL** Default option code cannot be interpreted: %s" msgstr "" " **FALLO** El código de opción predeterminado no puede ser " "interpretado: %s" #, c-format msgid "" " **FAIL** Default translation string for option %s choice %s contains " "8-bit characters." msgstr "" " **FALLO** Cadena de traducción predeterminada para opción %s " "preferencia %s contiene caracteres de 8-bits." #, c-format msgid "" " **FAIL** Default translation string for option %s contains 8-bit " "characters." msgstr "" " **FALLO** Cadena de traducción predeterminada para opción %s contiene " "caracteres de 8-bits." #, c-format msgid " **FAIL** Group names %s and %s differ only by case." msgstr "" " **FALLO** Nombres de grupo %s y %s se diferencian sólo en la " "capitalización." #, c-format msgid " **FAIL** Multiple occurrences of option %s choice name %s." msgstr "" " **FALLO** Múltiples apariciones de opción %s nombre de preferencia %s." #, c-format msgid " **FAIL** Option %s choice names %s and %s differ only by case." msgstr "" " **FALLO** Opción %s nombres de preferencia %s y %s se diferencian " "sólo en la capitalización." #, c-format msgid " **FAIL** Option names %s and %s differ only by case." msgstr "" " **FALLO** Nombres de opción %s y %s se diferencian sólo en la " "capitalización." #, c-format msgid "" " **FAIL** REQUIRED Default%s\n" " REF: Page 40, section 4.5." msgstr "" " **FALLO** NECESARIO Default%s\n" " REF: Página 40, sección 4.5." msgid "" " **FAIL** REQUIRED DefaultImageableArea\n" " REF: Page 102, section 5.15." msgstr "" " **FALLO** NECESARIO DefaultImageableArea\n" " REF: Página 102, sección 5.15." msgid "" " **FAIL** REQUIRED DefaultPaperDimension\n" " REF: Page 103, section 5.15." msgstr "" " **FALLO** NECESARIO DefaultPaperDimension\n" " REF: Página 103, sección 5.15." msgid "" " **FAIL** REQUIRED FileVersion\n" " REF: Page 56, section 5.3." msgstr "" " **FALLO** NECESARIO FileVersion\n" " REF: Página 56, sección 5.3." msgid "" " **FAIL** REQUIRED FormatVersion\n" " REF: Page 56, section 5.3." msgstr "" " **FALLO** NECESARIO FormatVersion\n" " REF: Página 56, sección 5.3." #, c-format msgid "" " **FAIL** REQUIRED ImageableArea for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 102, section 5.15." msgstr "" " **FALLO** NECESARIO ImageableArea para PageSize %s\n" " REF: Página 41, sección 5.\n" " REF: Página 102, sección 5.15." msgid "" " **FAIL** REQUIRED LanguageEncoding\n" " REF: Pages 56-57, section 5.3." msgstr "" " **FALLO** NECESARIO LanguageEncoding\n" " REF: Páginas 56-57, sección 5.3." msgid "" " **FAIL** REQUIRED LanguageVersion\n" " REF: Pages 57-58, section 5.3." msgstr "" " **FALLO** NECESARIO LanguageVersion\n" " REF: Páginas 57-58, sección 5.3." msgid "" " **FAIL** REQUIRED Manufacturer\n" " REF: Pages 58-59, section 5.3." msgstr "" " **FALLO** NECESARIO Manufacturer\n" " REF: Páginas 58-59, sección 5.3." msgid "" " **FAIL** REQUIRED ModelName\n" " REF: Pages 59-60, section 5.3." msgstr "" " **FALLO** NECESARIO ModelName\n" " REF: Páginas 59-60, sección 5.3." msgid "" " **FAIL** REQUIRED NickName\n" " REF: Page 60, section 5.3." msgstr "" " **FALLO** NECESARIO NickName\n" " REF: Página 60, sección 5.3." msgid "" " **FAIL** REQUIRED PCFileName\n" " REF: Pages 61-62, section 5.3." msgstr "" " **FALLO** NECESARIO PCFileName\n" " REF: Páginas 61-62, sección 5.3." msgid "" " **FAIL** REQUIRED PSVersion\n" " REF: Pages 62-64, section 5.3." msgstr "" " **FALLO** NECESARIO PSVersion\n" " REF: Páginas 62-64, sección 5.3." msgid "" " **FAIL** REQUIRED PageRegion\n" " REF: Page 100, section 5.14." msgstr "" " **FALLO** NECESARIO PageRegion\n" " REF: Página 100, sección 5.14." msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Page 41, section 5.\n" " REF: Page 99, section 5.14." msgstr "" " **FALLO** NECESARIO PageSize\n" " REF: Página 41, sección 5.\n" " REF: Página 99, sección 5.14." msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Pages 99-100, section 5.14." msgstr "" " **FALLO** NECESARIO PageSize\n" " REF: Páginas 99-100, sección 5.14." #, c-format msgid "" " **FAIL** REQUIRED PaperDimension for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 103, section 5.15." msgstr "" " **FALLO** NECESARIO PaperDimension para PageSize %s\n" " REF: Página 41, sección 5.\n" " REF: Página 103, sección 5.15." msgid "" " **FAIL** REQUIRED Product\n" " REF: Page 62, section 5.3." msgstr "" " **FALLO** NECESARIO Product\n" " REF: Página 62, sección 5.3." msgid "" " **FAIL** REQUIRED ShortNickName\n" " REF: Page 64-65, section 5.3." msgstr "" " **FALLO** NECESARIO ShortNickName\n" " REF: Páginas 64-65, sección 5.3." #, c-format msgid " **FAIL** Unable to open PPD file - %s on line %d." msgstr "" " **FALLO** No se ha podido abrir el archivo PPD - %s en la línea %d." #, c-format msgid " %d ERRORS FOUND" msgstr " %d ERRORES ENCONTRADOS" msgid " -h Show program usage" msgstr " -h Mostrar el uso del programa" #, c-format msgid "" " Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:" msgstr "" " %%%%BoundingBox incorrecto: en línea %d.\n" " REF: Página 39, %%%%BoundingBox:" #, c-format msgid "" " Bad %%%%Page: on line %d.\n" " REF: Page 53, %%%%Page:" msgstr "" " %%%%Page incorrecto: en línea %d.\n" " REF: Página 53, %%%%Page:" #, c-format msgid "" " Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:" msgstr "" " %%%%Pages incorrecto: en línea %d.\n" " REF: Página 43, %%%%Pages:" #, c-format msgid "" " Line %d is longer than 255 characters (%d).\n" " REF: Page 25, Line Length" msgstr "" " La línea %d es más larga de 255 caracteres (%d).\n" " REF: Página 25, Line Length" msgid "" " Missing %!PS-Adobe-3.0 on first line.\n" " REF: Page 17, 3.1 Conforming Documents" msgstr "" " Falta %!PS-Adobe-3.0 en la primera línea.\n" " REF: Página 17, 3.1 Conforming Documents" #, c-format msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments" msgstr "" " Falta comentario %%EndComments. REF: Página 41, %%EndComments" #, c-format msgid "" " Missing or bad %%BoundingBox: comment.\n" " REF: Page 39, %%BoundingBox:" msgstr "" " Falta comentario %%BoundingBox: o incorrecto.\n" " REF: Página 39, %%BoundingBox:" #, c-format msgid "" " Missing or bad %%Page: comments.\n" " REF: Page 53, %%Page:" msgstr "" " Falta comentario %%Page: o incorrecto.\n" " REF: Página 53, %%Page:" #, c-format msgid "" " Missing or bad %%Pages: comment.\n" " REF: Page 43, %%Pages:" msgstr "" " Falta comentario %%Pages: o incorrecto.\n" " REF: Página 43, %%Pages:" msgid " NO ERRORS FOUND" msgstr " NO SE HAN ENCONTRADO ERRORES" #, c-format msgid " Saw %d lines that exceeded 255 characters." msgstr " Se han visto %d líneas que exceden de 255 caracteres." #, c-format msgid " Too many %%BeginDocument comments." msgstr " Demasiados comentarios %%BeginDocument." #, c-format msgid " Too many %%EndDocument comments." msgstr " Demasiados comentarios %%EndDocument." msgid " Warning: file contains binary data." msgstr " Advertencia: el archivo contiene datos binarios." #, c-format msgid " Warning: no %%EndComments comment in file." msgstr " Advertencia: no hay comentario %%EndComments en el archivo." #, c-format msgid " Warning: obsolete DSC version %.1f in file." msgstr " Advertencia: versión DSC %.1f obsoleta en el archivo." msgid " ! expression Unary NOT of expression." msgstr " ! expresión NOT unario de la expresión." msgid " ( expressions ) Group expressions." msgstr " ( expresiones ) Agrupar expresiones." msgid " --[no-]debug-logging Turn debug logging on/off." msgstr " --[no-]debug-logging Activar/desactivar registro de depuración." msgid " --[no-]remote-admin Turn remote administration on/off." msgstr " --[no-]remote-admin Activar/desactivar administración remota." msgid " --[no-]remote-any Allow/prevent access from the Internet." msgstr " --[no-]remote-any Permitir/evitar acceso desde Internet." msgid " --[no-]share-printers Turn printer sharing on/off." msgstr "" " --[no-]share-printers Activar/desactivar compartición de impresoras." msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job." msgstr "" " --[no-]user-cancel-any Permitir/evitar a usuarios que cancelen cualquier " "trabajo." msgid " --cr End lines with CR (Mac OS 9)." msgstr " --cr Finalizar líneas con CR (Mac OS 9)." msgid " --crlf End lines with CR + LF (Windows)." msgstr " --crlf Finalizar líneas con CR + LF (Windows)." msgid " --domain regex Match domain to regular expression." msgstr "" " --domain regex Hacer coincidir el dominio con la expresión " "regular." msgid "" " --exec utility [argument ...] ;\n" " Execute program if true." msgstr "" " --exec utility [argument ...] ;\n" " Ejecutar programa si es cierto." msgid " --false Always false." msgstr " --false Siempre falso." msgid " --help Show help." msgstr " --help Muestra ayuda." msgid " --help Show this help." msgstr " --help Muestra esta ayuda." msgid " --host regex Match hostname to regular expression." msgstr "" " --host regex Hacer coincidir el nombre del equipo con la " "expresión regular." msgid " --lf End lines with LF (UNIX/Linux/macOS)." msgstr " --lf Finalizar líneas con LF (UNIX/Linux/macOS)." msgid " --list-filters List filters that will be used." msgstr " --list-filters Listar los filtros a usar." msgid " --local True if service is local." msgstr " --local Cierto si el servicio es local." msgid " --ls List attributes." msgstr " --ls Lista atributos." msgid " --name regex Match service name to regular expression." msgstr "" " --name regex Hacer coincidir el servicio con la expresión " "regular." msgid " --not expression Unary NOT of expression." msgstr " --not expresión NOT unario de la expresión." msgid " --path regex Match resource path to regular expression." msgstr "" " --path regex Hacer coincidir la ruta del recurso con la " "expresión regular." msgid " --port number[-number] Match port to number or range." msgstr "" " --port número[-número] Hacer coincidir el puerto con un número o " "intervalo de números." msgid " --print Print URI if true." msgstr " --print Imprimir URI si es cierto." msgid " --print-name Print service name if true." msgstr " --print-name Imprimir nombre del servicio si es cierto." msgid " --quiet Quietly report match via exit code." msgstr "" " --quiet Silenciosamente informar de la coincidencia via " "código de salida." msgid " --remote True if service is remote." msgstr " --remote Cierto si el servicio es remoto." msgid "" " --stop-after-include-error\n" " Stop tests after a failed INCLUDE." msgstr "" " --stop-after-include-error\n" " Detiene las pruebas tras un INCLUDE fallido." msgid " --true Always true." msgstr " --true Siempre cierto." msgid " --txt key True if the TXT record contains the key." msgstr " --txt clave Cierto si el registro TXT contiene la clave." msgid " --txt-* regex Match TXT record key to regular expression." msgstr "" " --txt-* regex Hacer coincidir la clave del registro TXT a la " "expresión regular." msgid " --uri regex Match URI to regular expression." msgstr "" " --uri regex Hacer coincidir la URI a la expresión regular." msgid " --version Show program version." msgstr " --version Muestra la versión del programa." msgid " --version Show version." msgstr " --version Muestra la versión." msgid " -4 Connect using IPv4." msgstr " -4 Conectar usando IPv4." msgid " -6 Connect using IPv6." msgstr " -6 Conectar usando IPv6." msgid " -C Send requests using chunking (default)." msgstr "" " -C Enviar peticiones usando fragmentación " "(predeterminado)." msgid " -D Remove the input file when finished." msgstr " -D Eliminar el archivo de entrada al terminar." msgid " -D name=value Set named variable to value." msgstr " -D nombre=valor Establece la variable nombre al valor." msgid " -E Encrypt the connection." msgstr " -E Cifra la conexión." msgid "" " -E Test with encryption using HTTP Upgrade to TLS." msgstr "" msgid "" " -F Run in the foreground but detach from console." msgstr "" " -F Ejecuta en primer plano pero separado de la " "consola." msgid " -H samba-server Use the named SAMBA server." msgstr " -H servidor-samba Usa el servidor SAMBA nombrado." msgid " -I Ignore errors." msgstr " -I Ignora errores." msgid " -I include-dir Add include directory to search path." msgstr "" " -I include-dir Añade directorio include a la ruta de búsqueda." msgid " -I {filename,filters,none,profiles}" msgstr " -I {filename,filters,none,profiles}" msgid " -L Send requests using content-length." msgstr " -L Envía peticiones usando content-length." msgid "" " -P filename.plist Produce XML plist to a file and test report to " "standard output." msgstr "" " -P filename.plist Produce plist XML a un archivo y un informe de " "prueba a la salida estandar." msgid " -P filename.ppd Set PPD file." msgstr " -P nombre_archivo.ppd Establece archivo PPD." msgid " -P number[-number] Match port to number or range." msgstr "" " -P número[-número] Hacer coincidir el puerto con un número o " "intervalo de números." msgid " -R root-directory Set alternate root." msgstr " -R directorio-raíz Establece directorio raíz alternativo." msgid " -S Test with encryption using HTTPS." msgstr "" msgid " -T seconds Set the browse timeout in seconds." msgstr "" " -T segundos Establece el tiempo de espera de navegación en " "segundos." msgid " -T seconds Set the receive/send timeout in seconds." msgstr "" " -T segundos Establece el tiempo de espera de recepción/envío " "en segundos." msgid " -U username Specify username." msgstr " -U nombre_usuario Especifica el nombre de usuario." msgid " -V version Set default IPP version." msgstr " -V versión Establece la versión IPP predeterminada." msgid "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgstr "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgid " -X Produce XML plist instead of plain text." msgstr "" " -X Produce XML plist en vez de texto sin formato." msgid " -a Export all printers." msgstr " -a Exporta todas las impresoras." msgid " -c Produce CSV output." msgstr " -c Produce salida CSV." msgid " -c catalog.po Load the specified message catalog." msgstr " -c catálogo.po Carga el catálogo de mensajes especificado." msgid " -c cups-files.conf Set cups-files.conf file to use." msgstr " -c cups-files.conf Establece el archivo cups-files.conf a usar." msgid " -c cupsd.conf Set cupsd.conf file to use." msgstr " -c cupsd.conf Establece el archivo cupsd.conf a usar." msgid " -d name=value Set named variable to value." msgstr " -d nombre=valor Establece la variable al valor." msgid " -d output-dir Specify the output directory." msgstr " -d dir-salida Especifica el directorio de salida." msgid " -d printer Use the named printer." msgstr " -d impresora Usa la impresora especificada." msgid " -d regex Match domain to regular expression." msgstr "" " -d regex Hacer coincidir el dominio con la expresión " "regular." msgid " -e Use every filter from the PPD file." msgstr " -e Usa cada filtro desde el archivo PPD." msgid " -f Run in the foreground." msgstr " -f Ejecuta en primer plano." msgid " -f filename Set default request filename." msgstr " -f nombre_archivo Establece nombre de archivo predeterminado." msgid " -h Show this usage message." msgstr " -h Muestra este mensaje de uso." msgid " -h Validate HTTP response headers." msgstr "" msgid " -h regex Match hostname to regular expression." msgstr "" " -h regex Hacer coincidir el nombre del equipo con la " "expresión regular." msgid " -h server[:port] Specify server address." msgstr " -h servidor[:puerto] Especifica la dirección del servidor." msgid " -i mime/type Set input MIME type (otherwise auto-typed)." msgstr "" " -i tipo/mime Establece el tipo MIME de entrada (si no, auto-" "typed)." msgid "" " -i seconds Repeat the last file with the given time interval." msgstr "" " -i segundos Repite el último archivo con el intervalo de " "tiempo dado." msgid "" " -j job-id[,N] Filter file N from the specified job (default is " "file 1)." msgstr "" " -j id-trabajo[,N] Filtra el archivo N desde el trabajo especificado " "(predeterminado archivo 1)." msgid " -l List attributes." msgstr " -l Lista atributos." msgid " -l Produce plain text output." msgstr " -l Produce salida en texto plano." msgid " -l Run cupsd on demand." msgstr " -l Ejecuta cupsd según demanda." msgid " -l lang[,lang,...] Specify the output language(s) (locale)." msgstr "" " -l idioma[,idioma,...] Especifica los idiomas de salida (código regional)." msgid " -m Use the ModelName value as the filename." msgstr "" " -m Usa el valor ModelName como nombre de archivo." msgid "" " -m mime/type Set output MIME type (otherwise application/pdf)." msgstr "" " -m tipo/mime Establece el tipo MIME de salida (si no, " "application/pdf)." msgid " -n copies Set number of copies." msgstr " -n copias Establece el número de copias." msgid "" " -n count Repeat the last file the given number of times." msgstr "" " -n contador Repite el último archivo el número de veces " "especificado." msgid " -n regex Match service name to regular expression." msgstr "" " -n regex Hacer coincidir el nombre del servicio con la " "expresión regular." msgid "" " -o filename.drv Set driver information file (otherwise ppdi.drv)." msgstr "" " -o nombre_archivo.drv Establece el archivo de información del " "controlador (si no, ppdi.drv)." msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)." msgstr "" " -o nombre_archivo.ppd[.gz] Establece el archivo de salida (si no, stdout)." msgid " -o name=value Set option(s)." msgstr " -o nombre=valor Establece opciones." msgid " -p Print URI if true." msgstr " -p Imprimir URI si es cierto." msgid " -p filename.ppd Set PPD file." msgstr " -p nombre_archivo.ppd Establece archivo PPD." msgid " -q Quietly report match via exit code." msgstr "" " -q Silenciosamente informar de la coincidencia via " "código de salida." msgid " -q Run silently." msgstr " -q Ejecución silenciosa." msgid " -r True if service is remote." msgstr " -r Cierto si el servicio es remoto." msgid " -r Use 'relaxed' open mode." msgstr " -r Usa modo abierto 'relajado'." msgid " -s Print service name if true." msgstr " -s Imprimir nombre del servicio si es cierto." msgid " -s cups-files.conf Set cups-files.conf file to use." msgstr " -s cups-files.conf Establece el archivo cups-files.conf a usar." msgid " -t Produce a test report." msgstr " -t Produce un informe de la prueba." msgid " -t Test PPDs instead of generating them." msgstr " -t Prueba los PPDs en vez de generarlos." msgid " -t Test the configuration file." msgstr " -t Prueba el archivo de configuración." msgid " -t key True if the TXT record contains the key." msgstr " -t clave Cierto si el registro TXT contiene la clave." msgid " -t title Set title." msgstr " -t título Establece título." msgid " -u Remove the PPD file when finished." msgstr " -u Borra el archivo PPD tras terminar." msgid " -u regex Match URI to regular expression." msgstr "" " -u regex Hacer coincidir la URI a la expresión regular." msgid " -v Be verbose." msgstr " -v Ser detallado." msgid " -vv Be very verbose." msgstr " -vv Ser muy detallado." msgid "" " -x utility [argument ...] ;\n" " Execute program if true." msgstr "" " -x utilidad [argumento ...] ;\n" " Ejecutar programa si es cierto." msgid " -z Compress PPD files using GNU zip." msgstr " -z Comprimir archivos PPD usando GNU zip." msgid " IPPFIND_SERVICE_DOMAIN Domain name" msgstr " IPPFIND_SERVICE_DOMAIN Nombre de dominio" msgid "" " IPPFIND_SERVICE_HOSTNAME\n" " Fully-qualified domain name" msgstr "" " IPPFIND_SERVICE_HOSTNAME\n" " Nombre de dominio completo" msgid " IPPFIND_SERVICE_NAME Service instance name" msgstr " IPPFIND_SERVICE_NAME Nombre de la instancia del servicio" msgid " IPPFIND_SERVICE_PORT Port number" msgstr " IPPFIND_SERVICE_PORT Número del puerto" msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type" msgstr " IPPFIND_SERVICE_REGTYPE Tipo de registro DNS-SD" msgid " IPPFIND_SERVICE_SCHEME URI scheme" msgstr " IPPFIND_SERVICE_SCHEME Esquema URI" msgid " IPPFIND_SERVICE_URI URI" msgstr " IPPFIND_SERVICE_URI URI" msgid " IPPFIND_TXT_* Value of TXT record key" msgstr " IPPFIND_TXT_* Valor de la clave del registro TXT" msgid "" " expression --and expression\n" " Logical AND." msgstr "" " expresión --and expresión\n" " Y (AND) lógico." msgid "" " expression --or expression\n" " Logical OR." msgstr "" " expresión --or expresión\n" " O (OR) lógico." msgid " expression expression Logical AND." msgstr " expresión expresión AND lógico." msgid " {service_domain} Domain name" msgstr " {service_domain} Nombre de dominio" msgid " {service_hostname} Fully-qualified domain name" msgstr " {service_hostname} Nombre de dominio completo" msgid " {service_name} Service instance name" msgstr " {service_name} Nombre de la instancia del servicio" msgid " {service_port} Port number" msgstr " {service_port} Número de puerto" msgid " {service_regtype} DNS-SD registration type" msgstr " {service_regtype} Tipo de registro DNS-SD" msgid " {service_scheme} URI scheme" msgstr " {service_scheme} Esquema URI" msgid " {service_uri} URI" msgstr " {service_uri} URI" msgid " {txt_*} Value of TXT record key" msgstr " {txt_*} Valor de la clave del registro TXT" msgid " {} URI" msgstr " {} URI" msgid " FAIL" msgstr " FALLO" msgid " PASS" msgstr " PASA" #, c-format msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section " "5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." msgstr "" #, c-format msgid "" "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 " "section 5.1.14)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section " "5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " "positive (RFC 8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC " "8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes" msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes" #, c-format msgid "%d x %d mm" msgstr "%d x %d mm" #, c-format msgid "%g x %g \"" msgstr "" #, c-format msgid "%s (%s)" msgstr "%s (%s)" #, c-format msgid "%s (%s, %s)" msgstr "%s (%s, %s)" #, c-format msgid "%s (Borderless)" msgstr "%s (Sin bordes)" #, c-format msgid "%s (Borderless, %s)" msgstr "%s (Sin bordes, %s)" #, c-format msgid "%s (Borderless, %s, %s)" msgstr "%s (Sin bordes, %s, %s)" #, c-format msgid "%s accepting requests since %s" msgstr "%s aceptando peticiones desde %s" #, c-format msgid "%s cannot be changed." msgstr "%s no puede ser cambiado." #, c-format msgid "%s is not implemented by the CUPS version of lpc." msgstr "%s no está implementado en la versión de CUPS de lpc." #, c-format msgid "%s is not ready" msgstr "%s no está preparada" #, c-format msgid "%s is ready" msgstr "%s está preparada" #, c-format msgid "%s is ready and printing" msgstr "%s está preparada e imprimiendo" #, c-format msgid "%s job-id user title copies options [file]" msgstr "%s job-id usuario título copias opciones [archivo]" #, c-format msgid "%s not accepting requests since %s -" msgstr "%s no acepta peticiones desde %s -" #, c-format msgid "%s not supported." msgstr "%s no está implementado." #, c-format msgid "%s/%s accepting requests since %s" msgstr "%s/%s aceptando peticiones desde %s" #, c-format msgid "%s/%s not accepting requests since %s -" msgstr "%s/%s no acepta peticiones desde %s -" #, c-format msgid "%s: %-33.33s [job %d localhost]" msgstr "%s: %-33.33s [trabajo %d localhost]" #. TRANSLATORS: Message is "subject: error" #, c-format msgid "%s: %s" msgstr "%s: %s" #, c-format msgid "%s: %s failed: %s" msgstr "%s: %s ha fallado: %s" #, c-format msgid "%s: Bad printer URI \"%s\"." msgstr "%s: URI de impresora \"%s\" no válida." #, c-format msgid "%s: Bad version %s for \"-V\"." msgstr "%s: Versión %s incorrecta para \"-V\"." #, c-format msgid "%s: Don't know what to do." msgstr "%s: No sé que hay que hacer." #, c-format msgid "%s: Error - %s" msgstr "" #, c-format msgid "" "%s: Error - %s environment variable names non-existent destination \"%s\"." msgstr "" "%s: Error - %s nombres de variables de entorno no existen en destino \"%s\"." #, c-format msgid "%s: Error - add '/version=1.1' to server name." msgstr "%s: Error - añada '/version=1.1' al nombre del servidor." #, c-format msgid "%s: Error - bad job ID." msgstr "%s: Error - ID de trabajo incorrecta." #, c-format msgid "%s: Error - cannot print files and alter jobs simultaneously." msgstr "" "%s: Error - no se pueden imprimir archivos y alterar trabajos al mismo " "tiempo." #, c-format msgid "%s: Error - cannot print from stdin if files or a job ID are provided." msgstr "" "%s: Error - no se puede imprimir desde stdin si se proporcionan archivos o " "una ID de trabajo." #, c-format msgid "%s: Error - copies must be 1 or more." msgstr "%s: Error - número de copias debe ser 1 o más." #, c-format msgid "%s: Error - expected character set after \"-S\" option." msgstr "%s: Error - se esperaba un juego de caracteres tras la opción \"-S\"." #, c-format msgid "%s: Error - expected content type after \"-T\" option." msgstr "%s: Error - se esperaba un tipo de contenido tras la opción \"-T\"." #, c-format msgid "%s: Error - expected copies after \"-#\" option." msgstr "%s: Error - se esperaba número de copias tras la opción \"-#\"." #, c-format msgid "%s: Error - expected copies after \"-n\" option." msgstr "%s: Error - se esperaba número de copias tras la opción \"-n\"." #, c-format msgid "%s: Error - expected destination after \"-P\" option." msgstr "%s: Error - se esperaba un destino tras la opción \"-P\"." #, c-format msgid "%s: Error - expected destination after \"-d\" option." msgstr "%s: Error - se esperaba un destino tras la opción \"-d\"." #, c-format msgid "%s: Error - expected form after \"-f\" option." msgstr "%s: Error - se esperaba un formulario tras la opción \"-f\"." #, c-format msgid "%s: Error - expected hold name after \"-H\" option." msgstr "%s: Error - se esperaba un nombre de retención tras la opción \"-H\"." #, c-format msgid "%s: Error - expected hostname after \"-H\" option." msgstr "%s: Error - se esperaba un nombre de equipo tras la opción \"-H\"." #, c-format msgid "%s: Error - expected hostname after \"-h\" option." msgstr "%s: Error - se esperaba un nombre de equipo tras la opción \"-h\"." #, c-format msgid "%s: Error - expected mode list after \"-y\" option." msgstr "%s: Error - se esperaba una lista de modos tras la opción \"-y\"." #, c-format msgid "%s: Error - expected name after \"-%c\" option." msgstr "%s: Error - se esperaba un nombre tras la opción \"-%c\"." #, c-format msgid "%s: Error - expected option=value after \"-o\" option." msgstr "%s: Error - se esperaba opción=valor tras la opción \"-o\"." #, c-format msgid "%s: Error - expected page list after \"-P\" option." msgstr "%s: Error - se esperaba una lista de páginas tras la opción \"-P\"." #, c-format msgid "%s: Error - expected priority after \"-%c\" option." msgstr "%s: Error - se esperaba un valor de prioridad tras la opción \"-%c\"." #, c-format msgid "%s: Error - expected reason text after \"-r\" option." msgstr "%s: Error - se esperaba un texto con una razón tras la opción \"-r\"." #, c-format msgid "%s: Error - expected title after \"-t\" option." msgstr "%s: Error - se esperaba un título tras la opción \"-t\"." #, c-format msgid "%s: Error - expected username after \"-U\" option." msgstr "%s: Error - se esperaba un nombre de usuario tras la opción \"-U\"." #, c-format msgid "%s: Error - expected username after \"-u\" option." msgstr "%s: Error - se esperaba un nombre de usuario tras la opción \"-u\"." #, c-format msgid "%s: Error - expected value after \"-%c\" option." msgstr "%s: Error - se esperaba un valor tras la opción \"-%c\"." #, c-format msgid "" "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" " "option." msgstr "" "%s: Error - se necesita \"completed\", \"not completed\", o \"all\" tras la " "opción \"-W\"." #, c-format msgid "%s: Error - no default destination available." msgstr "%s: Error - destino predeterminado no disponible." #, c-format msgid "%s: Error - priority must be between 1 and 100." msgstr "%s: Error - la prioridad debe estar entre 1 y 100." #, c-format msgid "%s: Error - scheduler not responding." msgstr "%s: Error - el programa planificador de tareas no responde." #, c-format msgid "%s: Error - too many files - \"%s\"." msgstr "%s: Error - demasiados archivos - \"%s\"." #, c-format msgid "%s: Error - unable to access \"%s\" - %s" msgstr "%s: Error - no se ha podido acceder a \"%s\" - %s" #, c-format msgid "%s: Error - unable to queue from stdin - %s." msgstr "%s: Error - no se ha podido poner en cola desde stdin - %s." #, c-format msgid "%s: Error - unknown destination \"%s\"." msgstr "%s: Error - destino \"%s\" desconocido." #, c-format msgid "%s: Error - unknown destination \"%s/%s\"." msgstr "%s: Error - destino \"%s/%s\" desconocido." #, c-format msgid "%s: Error - unknown option \"%c\"." msgstr "%s: Error - opción \"%c\" desconocida." #, c-format msgid "%s: Error - unknown option \"%s\"." msgstr "%s: Error - opción \"%s\" desconocida." #, c-format msgid "%s: Expected job ID after \"-i\" option." msgstr "%s: Se esperaba una ID de trabajo tras la opción \"-i\"." #, c-format msgid "%s: Invalid destination name in list \"%s\"." msgstr "%s: Nombre de destino no válido en la lista \"%s\"." #, c-format msgid "%s: Invalid filter string \"%s\"." msgstr "%s: Cadena de filtro \"%s\" no válida." #, c-format msgid "%s: Missing filename for \"-P\"." msgstr "%s: Falta el nombre del archivo para \"-P\"." #, c-format msgid "%s: Missing timeout for \"-T\"." msgstr "%s: Falta el tiempo de espera para \"-T\"." #, c-format msgid "%s: Missing version for \"-V\"." msgstr "%s: Falta la versión para \"-V\"." #, c-format msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"." msgstr "" "%s: Se necesita un ID de trabajo (\"-i id_trabajo\") antes de \"-H restart\"." #, c-format msgid "%s: No filter to convert from %s/%s to %s/%s." msgstr "%s: No hay ningún filtro para convertir de %s/%s a %s/%s." #, c-format msgid "%s: Operation failed: %s" msgstr "%s: La operación ha fallado: %s" #, c-format msgid "%s: Sorry, no encryption support." msgstr "%s: Lo siento, no está implementado el cifrado." #, c-format msgid "%s: Unable to connect to \"%s:%d\": %s" msgstr "%s: No se ha podido conectar a \"%s:%d\": %s" #, c-format msgid "%s: Unable to connect to server." msgstr "%s: No se ha podido conectar al servidor." #, c-format msgid "%s: Unable to contact server." msgstr "%s: No se ha podido contactar con el servidor." #, c-format msgid "%s: Unable to create PPD file: %s" msgstr "%s: No se ha podido crear el archivo PPD: %s" #, c-format msgid "%s: Unable to determine MIME type of \"%s\"." msgstr "%s: No se ha podido determinar el tipo MIME de \"%s\"." #, c-format msgid "%s: Unable to open \"%s\": %s" msgstr "%s: No se pudo abrir \"%s\": %s" #, c-format msgid "%s: Unable to open %s: %s" msgstr "%s: No se pudo abrir %s: %s" #, c-format msgid "%s: Unable to open PPD file: %s on line %d." msgstr "%s: No se ha podido abrir el archivo PPD: %s en la línea %d." #, c-format msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"." msgstr "%s: No se pudo leer base de datos MIME desde \"%s\" o \"%s\"." #, c-format msgid "%s: Unable to resolve \"%s\"." msgstr "%s: No se ha podido resolver \"%s\"." #, c-format msgid "%s: Unknown argument \"%s\"." msgstr "%s: Argumento \"%s\" desconocido." #, c-format msgid "%s: Unknown destination \"%s\"." msgstr "%s: Destino \"%s\" desconocido." #, c-format msgid "%s: Unknown destination MIME type %s/%s." msgstr "%s: Tipo MIME de destino %s/%s desconocido." #, c-format msgid "%s: Unknown option \"%c\"." msgstr "%s: Opción \"%c\" desconocida." #, c-format msgid "%s: Unknown option \"%s\"." msgstr "%s: Opción \"%s\" desconocida." #, c-format msgid "%s: Unknown option \"-%c\"." msgstr "%s: Opción \"-%c\" desconocida." #, c-format msgid "%s: Unknown source MIME type %s/%s." msgstr "%s: Tipo MIME de origen %s/%s desconocido." #, c-format msgid "" "%s: Warning - \"%c\" format modifier not supported - output may not be " "correct." msgstr "" "%s: Advertencia - no se admite el uso del modificador de formato \"%c\" - la " "salida puede no ser correcta." #, c-format msgid "%s: Warning - character set option ignored." msgstr "%s: Advertencia - opción de juego de caracteres no tenida en cuenta." #, c-format msgid "%s: Warning - content type option ignored." msgstr "%s: Advertencia - opción de tipo de contenido no tenida en cuenta." #, c-format msgid "%s: Warning - form option ignored." msgstr "%s: Advertencia - opción de formulario no tenida en cuenta." #, c-format msgid "%s: Warning - mode option ignored." msgstr "%s: Advertencia - opción de modo no tenida en cuenta." msgid "-1" msgstr "-1" msgid "-10" msgstr "-10" msgid "-100" msgstr "-100" msgid "-105" msgstr "-105" msgid "-11" msgstr "-11" msgid "-110" msgstr "-110" msgid "-115" msgstr "-115" msgid "-12" msgstr "-12" msgid "-120" msgstr "-120" msgid "-13" msgstr "-13" msgid "-14" msgstr "-14" msgid "-15" msgstr "-15" msgid "-2" msgstr "-2" msgid "-20" msgstr "-20" msgid "-25" msgstr "-25" msgid "-3" msgstr "-3" msgid "-30" msgstr "-30" msgid "-35" msgstr "-35" msgid "-4" msgstr "-4" msgid "-40" msgstr "-40" msgid "-45" msgstr "-45" msgid "-5" msgstr "-5" msgid "-50" msgstr "-50" msgid "-55" msgstr "-55" msgid "-6" msgstr "-6" msgid "-60" msgstr "-60" msgid "-65" msgstr "-65" msgid "-7" msgstr "-7" msgid "-70" msgstr "-70" msgid "-75" msgstr "-75" msgid "-8" msgstr "-8" msgid "-80" msgstr "-80" msgid "-85" msgstr "-85" msgid "-9" msgstr "-9" msgid "-90" msgstr "-90" msgid "-95" msgstr "-95" msgid "0" msgstr "0" msgid "1" msgstr "1" msgid "1 inch/sec." msgstr "1 pulg./seg" msgid "1.25x0.25\"" msgstr "1.25x0.25 pulg." msgid "1.25x2.25\"" msgstr "1.25x2.25 pulg." msgid "1.5 inch/sec." msgstr "1.5 pulg./seg" msgid "1.50x0.25\"" msgstr "1.50x0.25 pulg." msgid "1.50x0.50\"" msgstr "1.50x0.50 pulg." msgid "1.50x1.00\"" msgstr "1.50x1.00 pulg." msgid "1.50x2.00\"" msgstr "1.50x2.00 pulg." msgid "10" msgstr "10" msgid "10 inches/sec." msgstr "10 pulg./seg" msgid "10 x 11" msgstr "10 x 11" msgid "10 x 13" msgstr "10 x 13" msgid "10 x 14" msgstr "10 x 14" msgid "100" msgstr "100" msgid "100 mm/sec." msgstr "100 mm/seg" msgid "105" msgstr "105" msgid "11" msgstr "11" msgid "11 inches/sec." msgstr "11 pulg./seg" msgid "110" msgstr "110" msgid "115" msgstr "115" msgid "12" msgstr "12" msgid "12 inches/sec." msgstr "12 pulg./seg" msgid "12 x 11" msgstr "12 x 11" msgid "120" msgstr "120" msgid "120 mm/sec." msgstr "120 mm/seg" msgid "120x60dpi" msgstr "120x60ppp" msgid "120x72dpi" msgstr "120x72ppp" msgid "13" msgstr "13" msgid "136dpi" msgstr "136ppp" msgid "14" msgstr "14" msgid "15" msgstr "15" msgid "15 mm/sec." msgstr "15 mm/seg" msgid "15 x 11" msgstr "15 x 11" msgid "150 mm/sec." msgstr "150 mm/seg" msgid "150dpi" msgstr "150ppp" msgid "16" msgstr "16" msgid "17" msgstr "17" msgid "18" msgstr "18" msgid "180dpi" msgstr "180ppp" msgid "19" msgstr "19" msgid "2" msgstr "2" msgid "2 inches/sec." msgstr "2 pulg./seg" msgid "2-Hole Punch (Landscape)" msgstr "Perforación de 2 agujeros (apaisado)" msgid "2-Hole Punch (Portrait)" msgstr "Perforación de 2 agujeros (retrato)" msgid "2-Hole Punch (Reverse Landscape)" msgstr "Perforación de 2 agujeros (apaisado invertido)" msgid "2-Hole Punch (Reverse Portrait)" msgstr "Perforación de 2 agujeros (retrato invertido)" msgid "2-Sided Printing" msgstr "Dúplex" msgid "2.00x0.37\"" msgstr "2.00x0.37 pulg." msgid "2.00x0.50\"" msgstr "2.00x0.50 pulg." msgid "2.00x1.00\"" msgstr "2.00x1.00 pulg." msgid "2.00x1.25\"" msgstr "2.00x1.25 pulg." msgid "2.00x2.00\"" msgstr "2.00x2.00 pulg." msgid "2.00x3.00\"" msgstr "2.00x3.00 pulg." msgid "2.00x4.00\"" msgstr "2.00x4.00 pulg." msgid "2.00x5.50\"" msgstr "2.00x5.50 pulg." msgid "2.25x0.50\"" msgstr "2.25x0.50 pulg." msgid "2.25x1.25\"" msgstr "2.25x1.25 pulg." msgid "2.25x4.00\"" msgstr "2.25x4.00 pulg." msgid "2.25x5.50\"" msgstr "2.25x5.50 pulg." msgid "2.38x5.50\"" msgstr "2.38x5.50 pulg." msgid "2.5 inches/sec." msgstr "2.5 pulg./seg" msgid "2.50x1.00\"" msgstr "2.50x1.00 pulg." msgid "2.50x2.00\"" msgstr "2.50x2.00 pulg." msgid "2.75x1.25\"" msgstr "2.75x1.25 pulg." msgid "2.9 x 1\"" msgstr "2.9 x 1 pulg." msgid "20" msgstr "20" msgid "20 mm/sec." msgstr "20 mm/seg" msgid "200 mm/sec." msgstr "200 mm/seg" msgid "203dpi" msgstr "203ppp" msgid "21" msgstr "21" msgid "22" msgstr "22" msgid "23" msgstr "23" msgid "24" msgstr "24" msgid "24-Pin Series" msgstr "24-Pin Series" msgid "240x72dpi" msgstr "240x72ppp" msgid "25" msgstr "25" msgid "250 mm/sec." msgstr "250 mm/seg" msgid "26" msgstr "26" msgid "27" msgstr "27" msgid "28" msgstr "28" msgid "29" msgstr "29" msgid "3" msgstr "3" msgid "3 inches/sec." msgstr "3 pulg./seg" msgid "3 x 5" msgstr "3 x 5" msgid "3-Hole Punch (Landscape)" msgstr "Perforación de 3 agujeros (apaisado)" msgid "3-Hole Punch (Portrait)" msgstr "Perforación de 3 agujeros (retrato)" msgid "3-Hole Punch (Reverse Landscape)" msgstr "Perforación de 3 agujeros (apaisado invertido)" msgid "3-Hole Punch (Reverse Portrait)" msgstr "Perforación de 3 agujeros (retrato invertido)" msgid "3.00x1.00\"" msgstr "3.00x1.00 pulg." msgid "3.00x1.25\"" msgstr "3.00x1.25 pulg." msgid "3.00x2.00\"" msgstr "3.00x2.00 pulg." msgid "3.00x3.00\"" msgstr "3.00x3.00 pulg." msgid "3.00x5.00\"" msgstr "3.00x5.00 pulg." msgid "3.25x2.00\"" msgstr "3.25x2.00 pulg." msgid "3.25x5.00\"" msgstr "3.25x5.00 pulg." msgid "3.25x5.50\"" msgstr "3.25x5.50 pulg." msgid "3.25x5.83\"" msgstr "3.25x5.83 pulg." msgid "3.25x7.83\"" msgstr "3.25x7.83 pulg." msgid "3.5 x 5" msgstr "3.5 x 5" msgid "3.5\" Disk" msgstr "Disco de 3.5 pulg." msgid "3.50x1.00\"" msgstr "3.50x1.00 pulg." msgid "30" msgstr "30" msgid "30 mm/sec." msgstr "30 mm/seg" msgid "300 mm/sec." msgstr "300 mm/seg" msgid "300dpi" msgstr "300ppp" msgid "35" msgstr "35" msgid "360dpi" msgstr "360ppp" msgid "360x180dpi" msgstr "360x180ppp" msgid "4" msgstr "4" msgid "4 inches/sec." msgstr "4 pulg./seg" msgid "4-Hole Punch (Landscape)" msgstr "Perforación de 4 agujeros (apaisado)" msgid "4-Hole Punch (Portrait)" msgstr "Perforación de 4 agujeros (retrato)" msgid "4-Hole Punch (Reverse Landscape)" msgstr "Perforación de 4 agujeros (apaisado invertido)" msgid "4-Hole Punch (Reverse Portrait)" msgstr "Perforación de 4 agujeros (retrato invertido)" msgid "4.00x1.00\"" msgstr "4.00x1.00 pulg." msgid "4.00x13.00\"" msgstr "4.00x13.00 pulg." msgid "4.00x2.00\"" msgstr "4.00x2.00 pulg." msgid "4.00x2.50\"" msgstr "4.00x2.50 pulg." msgid "4.00x3.00\"" msgstr "4.00x3.00 pulg." msgid "4.00x4.00\"" msgstr "4.00x4.00 pulg." msgid "4.00x5.00\"" msgstr "4.00x5.00 pulg." msgid "4.00x6.00\"" msgstr "4.00x6.00 pulg." msgid "4.00x6.50\"" msgstr "4.00x6.50 pulg." msgid "40" msgstr "40" msgid "40 mm/sec." msgstr "40 mm/seg" msgid "45" msgstr "45" msgid "5" msgstr "5" msgid "5 inches/sec." msgstr "5 pulg./seg" msgid "5 x 7" msgstr "5 x 7" msgid "50" msgstr "50" msgid "55" msgstr "55" msgid "6" msgstr "6" msgid "6 inches/sec." msgstr "6 pulg./seg" msgid "6.00x1.00\"" msgstr "6.00x1.00 pulg." msgid "6.00x2.00\"" msgstr "6.00x2.00 pulg." msgid "6.00x3.00\"" msgstr "6.00x3.00 pulg." msgid "6.00x4.00\"" msgstr "6.00x4.00 pulg." msgid "6.00x5.00\"" msgstr "6.00x5.00 pulg." msgid "6.00x6.00\"" msgstr "6.00x6.00 pulg." msgid "6.00x6.50\"" msgstr "6.00x6.50 pulg." msgid "60" msgstr "60" msgid "60 mm/sec." msgstr "60 mm/seg" msgid "600dpi" msgstr "600ppp" msgid "60dpi" msgstr "60ppp" msgid "60x72dpi" msgstr "60x72ppp" msgid "65" msgstr "65" msgid "7" msgstr "7" msgid "7 inches/sec." msgstr "7 pulg./seg" msgid "7 x 9" msgstr "7 x 9" msgid "70" msgstr "70" msgid "75" msgstr "75" msgid "8" msgstr "8" msgid "8 inches/sec." msgstr "8 pulg./seg" msgid "8 x 10" msgstr "8 x 10" msgid "8.00x1.00\"" msgstr "8.00x1.00 pulg." msgid "8.00x2.00\"" msgstr "8.00x2.00 pulg." msgid "8.00x3.00\"" msgstr "8.00x3.00 pulg." msgid "8.00x4.00\"" msgstr "8.00x4.00 pulg." msgid "8.00x5.00\"" msgstr "8.00x5.00 pulg." msgid "8.00x6.00\"" msgstr "8.00x6.00 pulg." msgid "8.00x6.50\"" msgstr "8.00x6.50 pulg." msgid "80" msgstr "80" msgid "80 mm/sec." msgstr "80 mm/seg" msgid "85" msgstr "85" msgid "9" msgstr "9" msgid "9 inches/sec." msgstr "9 pulg./seg" msgid "9 x 11" msgstr "9 x 11" msgid "9 x 12" msgstr "9 x 12" msgid "9-Pin Series" msgstr "9-Pin Series" msgid "90" msgstr "90" msgid "95" msgstr "95" msgid "?Invalid help command unknown." msgstr "?Comando de ayuda no válido desconocido." msgid "A Samba password is required to export printer drivers" msgstr "" "Se requiere una contraseña Samba para exportar los controladores de impresora" msgid "A Samba username is required to export printer drivers" msgstr "" "Se requiere un nombre de usuario Samba para exportar los controladores de " "impresora" #, c-format msgid "A class named \"%s\" already exists." msgstr "Ya existe una clase llamada \"%s\"." #, c-format msgid "A printer named \"%s\" already exists." msgstr "Ya existe una impresora llamada \"%s\"." msgid "A0" msgstr "A0" msgid "A0 Long Edge" msgstr "A0 lado largo" msgid "A1" msgstr "A1" msgid "A1 Long Edge" msgstr "A1 lado largo" msgid "A10" msgstr "A10" msgid "A2" msgstr "A2" msgid "A2 Long Edge" msgstr "A2 lado largo" msgid "A3" msgstr "A3" msgid "A3 Long Edge" msgstr "A3 lado largo" msgid "A3 Oversize" msgstr "A3 Extragrande" msgid "A3 Oversize Long Edge" msgstr "A3 Extragrande lado largo" msgid "A4" msgstr "A4" msgid "A4 Long Edge" msgstr "A4 lado largo" msgid "A4 Oversize" msgstr "A4 Extragrande" msgid "A4 Small" msgstr "A4 Pequeño" msgid "A5" msgstr "A5" msgid "A5 Long Edge" msgstr "A5 lado largo" msgid "A5 Oversize" msgstr "A5 Extragrande" msgid "A6" msgstr "A6" msgid "A6 Long Edge" msgstr "A6 lado largo" msgid "A7" msgstr "A7" msgid "A8" msgstr "A8" msgid "A9" msgstr "A9" msgid "ANSI A" msgstr "ANSI A" msgid "ANSI B" msgstr "ANSI B" msgid "ANSI C" msgstr "ANSI C" msgid "ANSI D" msgstr "ANSI D" msgid "ANSI E" msgstr "ANSI E" msgid "ARCH C" msgstr "ARCH C" msgid "ARCH C Long Edge" msgstr "ARCH C lado largo" msgid "ARCH D" msgstr "ARCH D" msgid "ARCH D Long Edge" msgstr "ARCH D lado largo" msgid "ARCH E" msgstr "ARCH E" msgid "ARCH E Long Edge" msgstr "ARCH E lado largo" msgid "Accept Jobs" msgstr "Aceptar trabajos" msgid "Accepted" msgstr "Aceptado" msgid "Accordian Fold" msgstr "Pliegue de acordeón" msgid "Add Class" msgstr "Añadir clase" msgid "Add Printer" msgstr "Añadir impresora" msgid "Add RSS Subscription" msgstr "Añadir subscripción RSS" msgid "Address" msgstr "Dirección" msgid "Administration" msgstr "Administración" msgid "Advanced Photo Paper" msgstr "" msgid "Alternate" msgstr "Alternativo" msgid "Alternate Roll" msgstr "Rollo alternativo" msgid "Aluminum" msgstr "" msgid "Always" msgstr "Siempre" msgid "AppSocket/HP JetDirect" msgstr "AppSocket/HP JetDirect" msgid "Applicator" msgstr "Aplicador" msgid "Archival Envelope" msgstr "" msgid "Archival Fabric" msgstr "" msgid "Archival Paper" msgstr "" msgid "Archival Photo Paper" msgstr "" #, c-format msgid "Attempt to set %s printer-state to bad value %d." msgstr "" "Se ha intentado cambiar el valor printer-state de %s a un valor incorrecto " "%d." #, c-format msgid "Attribute \"%s\" is in the wrong group." msgstr "El atributo \"%s\" está en el grupo equivocado." #, c-format msgid "Attribute \"%s\" is the wrong value type." msgstr "El atributo \"%s\" es el tipo de valor equivocado." #, c-format msgid "Attribute groups are out of order (%x < %x)." msgstr "Los grupos de atributos están desordenados (%x < %x)." msgid "Automatic" msgstr "Automático" msgid "B0" msgstr "B0" msgid "B1" msgstr "B1" msgid "B10" msgstr "B10" msgid "B2" msgstr "B2" msgid "B3" msgstr "B3" msgid "B4" msgstr "B4" msgid "B5" msgstr "B5" msgid "B5 Oversize" msgstr "A5 Extragrande" msgid "B6" msgstr "B6" msgid "B7" msgstr "B7" msgid "B8" msgstr "B8" msgid "B9" msgstr "B9" msgid "Back Print Film" msgstr "" #, c-format msgid "Bad 'document-format' value \"%s\"." msgstr "Valor 'document-format' \"%s\" incorrecto." msgid "Bad NULL dests pointer" msgstr "Puntero destino NULLincorrecto" msgid "Bad OpenGroup" msgstr "OpenGroup incorrecto" msgid "Bad OpenUI/JCLOpenUI" msgstr "OpenUI/JCLOpenUI incorrecto" msgid "Bad OrderDependency" msgstr "OrderDependency incorrecto" msgid "Bad PPD cache file." msgstr "Archivo de caché PPD incorrecto." msgid "Bad PPD file." msgstr "Archivo PPD incorrecto." msgid "Bad Request" msgstr "Petición incorrecta" msgid "Bad SNMP version number" msgstr "Número de versión SNMP incorrecto" msgid "Bad UIConstraints" msgstr "UIConstraints incorrecto" msgid "Bad arguments to function" msgstr "Argumentos de la función incorrectos" #, c-format msgid "Bad copies value %d." msgstr "Valor de copias %d incorrecto." msgid "Bad custom parameter" msgstr "Parámetro a medida incorrecto" #, c-format msgid "Bad device-uri \"%s\"." msgstr "device-uri \"%s\" incorrecto." #, c-format msgid "Bad device-uri scheme \"%s\"." msgstr "Esquema device-uri \"%s\" incorrecto." #, c-format msgid "Bad document-format \"%s\"." msgstr "document-format \"%s\" incorrecto." #, c-format msgid "Bad document-format-default \"%s\"." msgstr "document-format-default \"%s\" incorrecto." msgid "Bad filename buffer" msgstr "Nombre de archivo del búfer incorrecto" msgid "Bad hostname/address in URI" msgstr "Nombre de equipo/dirección incorrecto en la URI" #, c-format msgid "Bad job-name value: %s" msgstr "Valor job-name incorrecto: %s" msgid "Bad job-name value: Wrong type or count." msgstr "Valor job-name incorrecto: tipo o contador equivocado." msgid "Bad job-priority value." msgstr "Valor job-priority incorrecto." #, c-format msgid "Bad job-sheets value \"%s\"." msgstr "Valor de job-sheets \"%s\" incorrecto." msgid "Bad job-sheets value type." msgstr "Tipo de valor de job-sheets incorrecto." msgid "Bad job-state value." msgstr "Valor job-state incorrecto." #, c-format msgid "Bad job-uri \"%s\"." msgstr "job-uri \"%s\" incorrecto." #, c-format msgid "Bad notify-pull-method \"%s\"." msgstr "notify-pull-method \"%s\" incorrecto." #, c-format msgid "Bad notify-recipient-uri \"%s\"." msgstr "notify-recipient-uri \"%s\" incorrecto." #, c-format msgid "Bad number-up value %d." msgstr "Valor number-up (páginas por hoja) %d incorrecto." #, c-format msgid "Bad option + choice on line %d." msgstr "Opción + preferencia incorrectas en línea %d." #, c-format msgid "Bad page-ranges values %d-%d." msgstr "Valores de page-ranges %d-%d incorrectos." msgid "Bad port number in URI" msgstr "Número de puerto incorrecto en URI" #, c-format msgid "Bad port-monitor \"%s\"." msgstr "port-monitor \"%s\" incorrecto." #, c-format msgid "Bad printer-state value %d." msgstr "Valor printer-state %d incorrecto." msgid "Bad printer-uri." msgstr "printer-uri incorrecto." #, c-format msgid "Bad request ID %d." msgstr "Petición incorrecta de ID %d." #, c-format msgid "Bad request version number %d.%d." msgstr "Petición incorrecta de número de versión %d.%d." #, c-format msgid "Bad requesting-user-name value: %s" msgstr "" msgid "Bad resource in URI" msgstr "Recurso incorrecto en URI" msgid "Bad scheme in URI" msgstr "Esquema incorrecto en URI" msgid "Bad subscription ID" msgstr "ID de subscripción incorrecto" msgid "Bad username in URI" msgstr "Nombre de usuario incorrecto en URI" msgid "Bad value string" msgstr "Cadena de valores incorrecta" msgid "Bad/empty URI" msgstr "URI incorrecta/vacía" msgid "Bale" msgstr "Fardo" msgid "Banners" msgstr "Rótulos" msgid "Bind" msgstr "Encuadernar" msgid "Bind (Landscape)" msgstr "Encuadernar (apaisado)" msgid "Bind (Portrait)" msgstr "Encuadernar (retrato)" msgid "Bind (Reverse Landscape)" msgstr "Encuadernar (apaisado invertido)" msgid "Bind (Reverse Portrait)" msgstr "Encuadernar (retrato invertido)" msgid "Bond Envelope" msgstr "" msgid "Bond Paper" msgstr "Papel de cartas" msgid "Booklet" msgstr "" msgid "Booklet Maker" msgstr "Fabricante de folleto" #, c-format msgid "Boolean expected for waiteof option \"%s\"." msgstr "Se esperaba un valor lógico para la opción waiteof \"%s\"." msgid "Bottom" msgstr "Inferior" msgid "Bottom Tray" msgstr "" msgid "Buffer overflow detected, aborting." msgstr "Se ha detectado un desbordamiento de buffer, cancelando." msgid "CD" msgstr "" msgid "CMYK" msgstr "CMYK" msgid "CPCL Label Printer" msgstr "Impresora de etiquetas CPCL" msgid "Cancel Jobs" msgstr "Cancelar trabajos" msgid "Cancel RSS Subscription" msgstr "Cancelar subscripción RSS" msgid "Canceling print job." msgstr "Cancelando trabajo de impresión." msgid "Cannot change printer-is-shared for remote queues." msgstr "No se ha podido cambiar printer-is-shared para colas remotas" msgid "Cannot share a remote Kerberized printer." msgstr "No se puede compartir una impresora remota Kerberizada." msgid "Cardboard" msgstr "" msgid "Cardstock" msgstr "Cartulina" msgid "Cassette" msgstr "Casete" msgid "Center" msgstr "Centro" msgid "Center Tray" msgstr "" msgid "Change Settings" msgstr "Cambiar configuración" #, c-format msgid "Character set \"%s\" not supported." msgstr "No se admite el juego de caracteres \"%s\"." msgid "Classes" msgstr "Clases" msgid "Clean Print Heads" msgstr "Limpiar cabezales de impresión" msgid "Close-Job doesn't support the job-uri attribute." msgstr "Close-Job no admite el atributo job-uri." msgid "Coat" msgstr "Capa" msgid "Coated Envelope" msgstr "" msgid "Coated Paper" msgstr "" msgid "Color" msgstr "Color" msgid "Color Mode" msgstr "Modo de color" msgid "Colored Labels" msgstr "" msgid "" "Commands may be abbreviated. Commands are:\n" "\n" "exit help quit status ?" msgstr "" "Los comandos se pueden abreviar. Los comandos son:exit help quit " "status ?" msgid "Community name uses indefinite length" msgstr "Nombre de comunidad usa una longitud indefinida" msgid "Connected to printer." msgstr "Conectado a la impresora." msgid "Connecting to printer." msgstr "Conectando a la impresora." msgid "Continue" msgstr "Continuar" msgid "Continuous" msgstr "Continuo" msgid "Continuous Long" msgstr "" msgid "Continuous Short" msgstr "" msgid "Control file sent successfully." msgstr "Archivo de control enviado correctamente." msgid "Copying print data." msgstr "Copiando datos de impresión." msgid "Cotton Envelope" msgstr "" msgid "Cotton Paper" msgstr "" msgid "Cover" msgstr "Carátula" msgid "Created" msgstr "Creado" msgid "Credentials do not validate against site CA certificate." msgstr "" msgid "Credentials have expired." msgstr "" msgid "Custom" msgstr "A medida" msgid "CustominCutInterval" msgstr "CustominCutInterval" msgid "CustominTearInterval" msgstr "CustominTearInterval" msgid "Cut" msgstr "Cortar" msgid "Cut Media" msgstr "Medio de corte" msgid "Cutter" msgstr "Cortadora" msgid "DVD" msgstr "" msgid "Dark" msgstr "Oscuro" msgid "Darkness" msgstr "Oscuridad" msgid "Data file sent successfully." msgstr "Archivo de datos enviado correctamente." msgid "Deep Color" msgstr "" msgid "Delete Class" msgstr "Borrar clase" msgid "Delete Printer" msgstr "Borrar impresora" msgid "DeskJet Series" msgstr "DeskJet Series" #, c-format msgid "Destination \"%s\" is not accepting jobs." msgstr "El destino %s no acepta trabajos." #, c-format msgid "" "Device: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s" msgstr "" "Dispositivo: uri = %s\n" " clase = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " ubicación: %s" msgid "Direct Thermal Media" msgstr "Soporte térmico directo" #, c-format msgid "Directory \"%s\" contains a relative path." msgstr "El directorio \"%s\" contiene una ruta relativa." #, c-format msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "El directorio \"%s\" tiene permisos no seguros (0%o/uid=%d/gid=%d)." #, c-format msgid "Directory \"%s\" is a file." msgstr "El directorio \"%s\" es un archivo." #, c-format msgid "Directory \"%s\" not available: %s" msgstr "Directorio \"%s\" no disponible: %s" #, c-format msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "Permisos del directorio \"%s\" OK (0%o/uid=%d/gid=%d)." msgid "Disabled" msgstr "Deshabilitado" msgid "Disc" msgstr "Disco" #, c-format msgid "Document #%d does not exist in job #%d." msgstr "El documento #%d no existe en el trabajo #%d." msgid "Double Gate Fold" msgstr "Página desplegable doble" msgid "Double Staple (Landscape)" msgstr "Grapado doble (apaisado)" msgid "Double Staple (Portrait)" msgstr "Grapado doble (retrato)" msgid "Double Staple (Reverse Landscape)" msgstr "Grapado doble (apaisado invertido)" msgid "Double Staple (Reverse Portrait)" msgstr "Grapado doble (retrato invertido)" msgid "Double Wall Cardboard" msgstr "" msgid "Draft" msgstr "Borrador" msgid "Dry Film" msgstr "" msgid "Duplexer" msgstr "Unidad de impresión dúplex" msgid "Dymo" msgstr "Dymo" msgid "EPL1 Label Printer" msgstr "Impresora de etiquetas EPL1" msgid "EPL2 Label Printer" msgstr "Impresora de etiquetas EPL2" msgid "Edit Configuration File" msgstr "Editar archivo de configuración" msgid "Embossing Foil" msgstr "" msgid "Empty PPD file." msgstr "Archivo PPD vacío." msgid "Encryption is not supported." msgstr "El cifrado no está implementado." msgid "End Board" msgstr "" #. TRANSLATORS: Banner/cover sheet after the print job. msgid "Ending Banner" msgstr "Rótulo final" msgid "Engineering Z Fold" msgstr "" msgid "English" msgstr "Spanish" msgid "" "Enter your username and password or the root username and password to access " "this page. If you are using Kerberos authentication, make sure you have a " "valid Kerberos ticket." msgstr "" "Introduzca su nombre de usuario y contraseña o el nombre de usuario y " "contraseña de root para poder acceder a esta página. Si está usando " "autentificación Kerberos, asegúrese de que tiene un ticket Kerberos válido." msgid "Envelope" msgstr "Sobre" msgid "Envelope #10" msgstr "Sobre #10" msgid "Envelope #11" msgstr "Sobre #11" msgid "Envelope #12" msgstr "Sobre #12" msgid "Envelope #14" msgstr "Sobre #14" msgid "Envelope #9" msgstr "Sobre #9" msgid "Envelope B4" msgstr "Sobre B4" msgid "Envelope B5" msgstr "Sobre B5" msgid "Envelope B6" msgstr "Sobre B6" msgid "Envelope C0" msgstr "Sobre C0" msgid "Envelope C1" msgstr "Sobre C1" msgid "Envelope C2" msgstr "Sobre C2" msgid "Envelope C3" msgstr "Sobre C3" msgid "Envelope C4" msgstr "Sobre C4" msgid "Envelope C5" msgstr "Sobre C5" msgid "Envelope C6" msgstr "Sobre C6" msgid "Envelope C65" msgstr "Sobre C65" msgid "Envelope C7" msgstr "Sobre C7" msgid "Envelope Choukei 3" msgstr "Sobre Choukei 3" msgid "Envelope Choukei 3 Long Edge" msgstr "Sobre Choukei 3 lado largo" msgid "Envelope Choukei 4" msgstr "Sobre Choukei 4" msgid "Envelope Choukei 4 Long Edge" msgstr "Sobre Choukei 4 lado largo" msgid "Envelope DL" msgstr "Sobre DL" msgid "Envelope Feed" msgstr "Alimentador de sobre" msgid "Envelope Invite" msgstr "Sobre Invitación" msgid "Envelope Italian" msgstr "Sobre Italiano" msgid "Envelope Kaku2" msgstr "Sobre Kaku2" msgid "Envelope Kaku2 Long Edge" msgstr "Sobre Kaku2 lado largo" msgid "Envelope Kaku3" msgstr "Sobre Kaku3" msgid "Envelope Kaku3 Long Edge" msgstr "Sobre Kaku3 lado largo" msgid "Envelope Monarch" msgstr "Sobre Monarch" msgid "Envelope PRC1" msgstr "Sobre PRC1" msgid "Envelope PRC1 Long Edge" msgstr "Sobre PRC1 lado largo" msgid "Envelope PRC10" msgstr "Sobre PRC10" msgid "Envelope PRC10 Long Edge" msgstr "Sobre PRC10 lado largo" msgid "Envelope PRC2" msgstr "Sobre PRC2" msgid "Envelope PRC2 Long Edge" msgstr "Sobre PRC2 lado largo" msgid "Envelope PRC3" msgstr "Sobre PRC3" msgid "Envelope PRC3 Long Edge" msgstr "Sobre PRC3 lado largo" msgid "Envelope PRC4" msgstr "Sobre PRC4" msgid "Envelope PRC4 Long Edge" msgstr "Sobre PRC4 lado largo" msgid "Envelope PRC5 Long Edge" msgstr "Sobre PRC5 lado largo" msgid "Envelope PRC5PRC5" msgstr "Sobre PRC5PRC5" msgid "Envelope PRC6" msgstr "Sobre PRC6" msgid "Envelope PRC6 Long Edge" msgstr "Sobre PRC6 lado largo" msgid "Envelope PRC7" msgstr "Sobre PRC7" msgid "Envelope PRC7 Long Edge" msgstr "Sobre PRC7 lado largo" msgid "Envelope PRC8" msgstr "Sobre PRC8" msgid "Envelope PRC8 Long Edge" msgstr "Sobre PRC8 lado largo" msgid "Envelope PRC9" msgstr "Sobre PRC9" msgid "Envelope PRC9 Long Edge" msgstr "Sobre PRC9 lado largo" msgid "Envelope Personal" msgstr "Sobre Personal" msgid "Envelope You4" msgstr "Sobre You4" msgid "Envelope You4 Long Edge" msgstr "Sobre You4 lado largo" msgid "Environment Variables:" msgstr "Variables de entorno:" msgid "Epson" msgstr "Epson" msgid "Error Policy" msgstr "Directiva de error" msgid "Error reading raster data." msgstr "Error leyendo trama de datos (raster)." msgid "Error sending raster data." msgstr "Error enviando trama de datos (raster)." msgid "Error: need hostname after \"-h\" option." msgstr "Error: se necesita un nombre de equipo tras la opción \"-h\"." msgid "European Fanfold" msgstr "" msgid "European Fanfold Legal" msgstr "" msgid "Every 10 Labels" msgstr "Cada 10 etiquetas" msgid "Every 2 Labels" msgstr "Cada 2 etiquetas" msgid "Every 3 Labels" msgstr "Cada 3 etiquetas" msgid "Every 4 Labels" msgstr "Cada 4 etiquetas" msgid "Every 5 Labels" msgstr "Cada 5 etiquetas" msgid "Every 6 Labels" msgstr "Cada 6 etiquetas" msgid "Every 7 Labels" msgstr "Cada 7 etiquetas" msgid "Every 8 Labels" msgstr "Cada 8 etiquetas" msgid "Every 9 Labels" msgstr "Cada 9 etiquetas" msgid "Every Label" msgstr "Cada etiqueta" msgid "Everyday Glossy Photo Paper" msgstr "" msgid "Everyday Matte Paper" msgstr "" msgid "Executive" msgstr "Ejecutivo" msgid "Expectation Failed" msgstr "Lo que se esperaba, falló." msgid "Export Printers to Samba" msgstr "Exportar impresoras a Samba" msgid "Expressions:" msgstr "Expresiones:" msgid "Extra Heavyweight Paper" msgstr "" msgid "FAIL" msgstr "FALLO" msgid "Fabric" msgstr "" msgid "Face Down" msgstr "" msgid "Face Up" msgstr "" msgid "Fast Grayscale" msgstr "Escala de grises rápida" #, c-format msgid "File \"%s\" contains a relative path." msgstr "El archivo \"%s\" contiene una ruta relativa." #, c-format msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "El archivo \"%s\" tiene permisos no seguros (0%o/uid=%d/gid=%d)." #, c-format msgid "File \"%s\" is a directory." msgstr "El archivo \"%s\" es un directorio." #, c-format msgid "File \"%s\" not available: %s" msgstr "Archivo \"%s\" no disponible: %s" #, c-format msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "Permisos del archivo \"%s\" OK (0%o/uid=%d/gid=%d)." msgid "File Folder" msgstr "Carpeta de archivo" #, c-format msgid "" "File device URIs have been disabled. To enable, see the FileDevice directive " "in \"%s/cups-files.conf\"." msgstr "" "Los URIs del dispositivo de archivo han sido deshabilitados. Para " "habilitarlos, vea la directiva FileDevice en \"%s/cups-files.conf\"." msgid "Film" msgstr "" msgid "Fine Envelope" msgstr "" #, c-format msgid "Finished page %d." msgstr "Acabada la página %d." msgid "Flexo Base" msgstr "" msgid "Flexo Photo Polymer" msgstr "" msgid "Flute" msgstr "" msgid "Foil" msgstr "" msgid "Fold" msgstr "Plegado" msgid "Folio" msgstr "Folio" msgid "Forbidden" msgstr "Prohibido" msgid "Found" msgstr "" msgid "Full Cut Tabs" msgstr "" msgid "Gate Fold" msgstr "Desplegable" msgid "General" msgstr "General" msgid "Generic" msgstr "Genérico" msgid "Get-Response-PDU uses indefinite length" msgstr "Get-Response-PDU usa una longitud indefinida" msgid "Glass" msgstr "" msgid "Glass Colored" msgstr "" msgid "Glass Opaque" msgstr "" msgid "Glass Surfaced" msgstr "" msgid "Glass Textured" msgstr "" msgid "Glossy Brochure Paper" msgstr "" msgid "Glossy Fabric" msgstr "" msgid "Glossy Labels" msgstr "" msgid "Glossy Optical Disc" msgstr "" msgid "Glossy Paper" msgstr "Papel brillante" msgid "Glossy Photo Paper" msgstr "" msgid "Got a printer-uri attribute but no job-id." msgstr "Se ha obtenido el atributo printer-uri pero no el job-id." msgid "Gravure Cylinder" msgstr "" msgid "Grayscale" msgstr "Escale de grises" msgid "HP" msgstr "HP" msgid "Hagaki" msgstr "Hagaki" msgid "Half Fold" msgstr "Plegado por la mitad" msgid "Half Z Fold" msgstr "Medio plegado en Z" msgid "Hanging Folder" msgstr "Carpeta colgante" msgid "Hash buffer too small." msgstr "Memoria temporal hash demasiado pequeña." msgid "Heavyweight Coated Paper" msgstr "" msgid "Heavyweight Envelope" msgstr "" msgid "Heavyweight Paper" msgstr "" msgid "Help file not in index." msgstr "El archivo de ayuda no está en el índice." msgid "High" msgstr "Alta" msgid "High Gloss Fabric" msgstr "" msgid "High Gloss Labels" msgstr "" msgid "High Gloss Optical Disc" msgstr "" msgid "High Gloss Photo Paper" msgstr "" msgid "IPP 1setOf attribute with incompatible value tags." msgstr "Atributo IPP 1setOf con etiquetas de valor incompatibles." msgid "IPP attribute has no name." msgstr "Atributo IPP sin nombre." msgid "IPP attribute is not a member of the message." msgstr "El atributo IPP no es un miembro del mensaje." msgid "IPP begCollection value not 0 bytes." msgstr "IPP el valor begCollection no es de 0 bytes." msgid "IPP boolean value not 1 byte." msgstr "IPP el valor lógico no es de 1 byte." msgid "IPP date value not 11 bytes." msgstr "IPP el valor de fecha no es de 11 bytes." msgid "IPP endCollection value not 0 bytes." msgstr "IPP el valor endCollection no es de 0 bytes." msgid "IPP enum value not 4 bytes." msgstr "IPP el valor enum no es de 4 bytes." msgid "IPP extension tag larger than 0x7FFFFFFF." msgstr "IPP etiqueta de extensión mayor de 0x7FFFFFFF." msgid "IPP integer value not 4 bytes." msgstr "IPP el valor entero no es de 4 bytes." msgid "IPP language length overflows value." msgstr "IPP la longitud del idioma sobrepasa el valor." msgid "IPP language length too large." msgstr "Longitud de idioma IPP demasiado larga." msgid "IPP member name is not empty." msgstr "IPP el nombre del miembro no está vacío." msgid "IPP memberName value is empty." msgstr "IPP el valor memberName está vacío." msgid "IPP memberName with no attribute." msgstr "IPP memberName sin atributo." msgid "IPP name larger than 32767 bytes." msgstr "IPP nombre mayor de 32767 bytes." msgid "IPP nameWithLanguage value less than minimum 4 bytes." msgstr "IPP el valor nameWithLanguage menor del mínimo de 4 bytes." msgid "IPP octetString length too large." msgstr "Longitud de IPP octetString demasiado larga." msgid "IPP rangeOfInteger value not 8 bytes." msgstr "IPP el valor rangeOfInteger no es de 8 bytes." msgid "IPP resolution value not 9 bytes." msgstr "IPP el valor de la resolución no es de 9 bytes." msgid "IPP string length overflows value." msgstr "IPP la longitud de la cadena sobrepasa el valor." msgid "IPP textWithLanguage value less than minimum 4 bytes." msgstr "IPP el valor textWithLanguage menor del mínimo de 4 bytes." msgid "IPP value larger than 32767 bytes." msgstr "IPP valor mayor de 32767 bytes." msgid "ISOLatin1" msgstr "ISOLatin1" msgid "Illegal control character" msgstr "Carácter de control ilegal" msgid "Illegal main keyword string" msgstr "Cadena de clave principal ilegal" msgid "Illegal option keyword string" msgstr "Cadena de clave de opción ilegal" msgid "Illegal translation string" msgstr "Cadena de traducción ilegal" msgid "Illegal whitespace character" msgstr "Carácter de espacio en blanco ilegal" msgid "Image Setter Paper" msgstr "" msgid "Imaging Cylinder" msgstr "" msgid "Inkjet Envelope" msgstr "" msgid "Inkjet Labels" msgstr "" msgid "Inkjet Paper" msgstr "" msgid "Installable Options" msgstr "Opciones instalables" msgid "Installed" msgstr "Instalada" msgid "IntelliBar Label Printer" msgstr "Impresora de etiquetas IntelliBar" msgid "Intellitech" msgstr "Intellitech" msgid "Internal Server Error" msgstr "Error interno del servidor" msgid "Internal error" msgstr "Error interno" msgid "Internet Postage 2-Part" msgstr "Correo por Internet Parte-2" msgid "Internet Postage 3-Part" msgstr "Correo por Internet Parte-3" msgid "Internet Printing Protocol" msgstr "Protocolo de Impresión de Internet IPP" msgid "Invalid media name arguments." msgstr "Argumentos del nombre del papel no válidos." msgid "Invalid media size." msgstr "Tamaño de papel no válido." msgid "Invalid ppd-name value." msgstr "Valor ppd-name' no válido." #, c-format msgid "Invalid printer command \"%s\"." msgstr "Comando de impresora \"%s\" no válido." msgid "JCL" msgstr "JCL" msgid "JIS B0" msgstr "JIS B0" msgid "JIS B1" msgstr "JIS B1" msgid "JIS B10" msgstr "JIS B10" msgid "JIS B2" msgstr "JIS B2" msgid "JIS B3" msgstr "JIS B3" msgid "JIS B4" msgstr "JIS B4" msgid "JIS B4 Long Edge" msgstr "JIS B4 lado largo" msgid "JIS B5" msgstr "JIS B5" msgid "JIS B5 Long Edge" msgstr "JIS B5 lado largo" msgid "JIS B6" msgstr "JIS B6" msgid "JIS B6 Long Edge" msgstr "JIS B6 lado largo" msgid "JIS B7" msgstr "JIS B7" msgid "JIS B8" msgstr "JIS B8" msgid "JIS B9" msgstr "JIS B9" #, c-format msgid "Job #%d cannot be restarted - no files." msgstr "El trabajo #%d no puede ser reiniciado - no hay archivos." #, c-format msgid "Job #%d does not exist." msgstr "El trabajo #%d no existe." #, c-format msgid "Job #%d is already aborted - can't cancel." msgstr "El trabajo #%d ya está anulado - no se puede cancelar." #, c-format msgid "Job #%d is already canceled - can't cancel." msgstr "El trabajo #%d ya está cancelado - no se puede cancelar." #, c-format msgid "Job #%d is already completed - can't cancel." msgstr "El trabajo #%d ya ha sido completado - no se puede cancelar." #, c-format msgid "Job #%d is finished and cannot be altered." msgstr "El trabajo #%d ha terminado y no puede ser modificado." #, c-format msgid "Job #%d is not complete." msgstr "El trabajo #%d no ha sido completado." #, c-format msgid "Job #%d is not held for authentication." msgstr "El trabajo #%d no está retenido para autentificación." #, c-format msgid "Job #%d is not held." msgstr "El trabajo #%d no está retenido." msgid "Job Completed" msgstr "Trabajo completado" msgid "Job Created" msgstr "Trabajo creado" msgid "Job Options Changed" msgstr "Opciones de trabajo cambiadas" msgid "Job Stopped" msgstr "Trabajo detenido" msgid "Job is completed and cannot be changed." msgstr "El trabajo está terminado y no puede ser cambiado." msgid "Job operation failed" msgstr "La operación del trabajo ha fallado" msgid "Job state cannot be changed." msgstr "No se puede cambiar el estado del trabajo." msgid "Job subscriptions cannot be renewed." msgstr "Las suscripciones de trabajos no han podido ser renovadas." msgid "Jobs" msgstr "Trabajos" msgid "Jog" msgstr "Jog" msgid "LPD/LPR Host or Printer" msgstr "Equipo o impresora LPD/LPR" msgid "Label Printer" msgstr "Impresora de etiquetas" msgid "Label Top" msgstr "Parte superior de la etiqueta" msgid "Labels" msgstr "" msgid "Laminate" msgstr "Laminado" msgid "Laminating Foil" msgstr "" #, c-format msgid "Language \"%s\" not supported." msgstr "No se admite el uso del idioma \"%s\"." msgid "Large Address" msgstr "Dirección grande" msgid "Large Capacity" msgstr "Capacidad grande" msgid "Large Capacity Tray" msgstr "" msgid "LaserJet Series PCL 4/5" msgstr "LaserJet Series PCL 4/5" msgid "Left" msgstr "Izquierda" msgid "Left Gate Fold" msgstr "Desplegable izquierdo" msgid "Left Tray" msgstr "" msgid "Letter Fold" msgstr "Carta plegada" msgid "Letter Oversize" msgstr "Carta Extragrande" msgid "Letter Oversize Long Edge" msgstr "Carta Extragrande lado largo" msgid "Letterhead" msgstr "Membrete" msgid "Light" msgstr "Ligero" msgid "Lightweight Envelope" msgstr "" msgid "Lightweight Paper" msgstr "" msgid "Line longer than the maximum allowed (255 characters)" msgstr "Línea más larga que el máximo permitido (255 caracteres)" msgid "List Available Printers" msgstr "Listar impresoras disponibles" msgid "Load paper." msgstr "Cargar papel." msgid "Local printer created." msgstr "Impresora creada localmente." msgid "Long-Edge (Portrait)" msgstr "Lado largo (retrato)" msgid "Looking for printer." msgstr "" msgid "Mailbox 1" msgstr "" msgid "Mailbox 10" msgstr "" msgid "Mailbox 2" msgstr "" msgid "Mailbox 3" msgstr "" msgid "Mailbox 4" msgstr "" msgid "Mailbox 5" msgstr "" msgid "Mailbox 6" msgstr "" msgid "Mailbox 7" msgstr "" msgid "Mailbox 8" msgstr "" msgid "Mailbox 9" msgstr "" msgid "Main" msgstr "Principaln" msgid "Main Roll" msgstr "Rollo principal" msgid "Manual" msgstr "Manual" msgid "Manual Feed" msgstr "Alimentación manual" msgid "Matte Brochure Paper" msgstr "" msgid "Matte Cover Paper" msgstr "" msgid "Matte Fabric" msgstr "" msgid "Matte Labels" msgstr "" msgid "Matte Optical Disc" msgstr "" msgid "Matte Photo Paper" msgstr "" msgid "Media Size" msgstr "Tamaño de papel" msgid "Media Source" msgstr "Fuente del papel" msgid "Media Tracking" msgstr "Seguimiento del medio" msgid "Media Type" msgstr "Tipo de papel" msgid "Medium" msgstr "Media" msgid "Memory allocation error" msgstr "Error de reserva de memoria" msgid "Metal" msgstr "" msgid "Metal Glossy" msgstr "" msgid "Metal High Gloss" msgstr "" msgid "Metal Matte" msgstr "" msgid "Metal Satin" msgstr "" msgid "Metal Semi Gloss" msgstr "" msgid "Mid-Weight Paper" msgstr "" msgid "Middle" msgstr "Medio" msgid "Missing CloseGroup" msgstr "Falta CloseGroup" msgid "Missing PPD-Adobe-4.x header" msgstr "Falta cabecera PPD-Adobe-4.x" msgid "Missing asterisk in column 1" msgstr "Falta un asterisco en la columna 1" msgid "Missing document-number attribute." msgstr "Falta el atributo document-number." #, c-format msgid "Missing double quote on line %d." msgstr "Faltan dobles comillas en línea %d." msgid "Missing form variable" msgstr "Falta una variable de formulario" msgid "Missing last-document attribute in request." msgstr "Falta el atributo last-document en la petición." msgid "Missing media or media-col." msgstr "Falta media o media-col." msgid "Missing media-size in media-col." msgstr "Falta media-size en media-col." msgid "Missing notify-subscription-ids attribute." msgstr "Falta el atributo notify-subscription-ids." msgid "Missing option keyword" msgstr "Falta cadena de clave de opción" msgid "Missing requesting-user-name attribute." msgstr "Falta el atributo requesting-user-name." #, c-format msgid "Missing required attribute \"%s\"." msgstr "Falta atributo necesario \"%s\"." msgid "Missing required attributes." msgstr "Faltan atributos necesarios." msgid "Missing resource in URI" msgstr "Falta recurso en URI" msgid "Missing scheme in URI" msgstr "Falta esquema en URI" #, c-format msgid "Missing value on line %d." msgstr "Falta un valor en la línea %d." msgid "Missing value string" msgstr "Falta cadena de valores" msgid "Missing x-dimension in media-size." msgstr "Falta x-dimension en media-size." msgid "Missing y-dimension in media-size." msgstr "Falta y-dimension en media-size." #, c-format msgid "" "Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgstr "" "Modelo: nombre = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgid "Modifiers:" msgstr "Modificadores:" msgid "Modify Class" msgstr "Modificar clase" msgid "Modify Printer" msgstr "Modificar impresora" msgid "Mounting Tape" msgstr "" msgid "Move All Jobs" msgstr "Mover todos los trabajos" msgid "Move Job" msgstr "Mover trabajo" msgid "Moved Permanently" msgstr "Movido permanentemente" msgid "Multi Layer" msgstr "" msgid "Multi Part Form" msgstr "" msgid "Multi-Hole Punch (Landscape)" msgstr "" msgid "Multi-Hole Punch (Portrait)" msgstr "" msgid "Multi-Hole Punch (Reverse Landscape)" msgstr "" msgid "Multi-Hole Punch (Reverse Portrait)" msgstr "" msgid "Multipurpose" msgstr "Multipropósito" msgid "Multipurpose Paper" msgstr "" msgid "My Mailbox" msgstr "" msgid "NULL PPD file pointer" msgstr "Puntero de archivo PPD NULO" msgid "Name OID uses indefinite length" msgstr "Nombre OID usa una longitud indefinida" msgid "Nested classes are not allowed." msgstr "No se permiten clases anidadas." msgid "Never" msgstr "Nunca" msgid "New credentials are not valid for name." msgstr "" msgid "New credentials are older than stored credentials." msgstr "" msgid "No" msgstr "No" msgid "No Content" msgstr "No hay contenido" msgid "No IPP attributes." msgstr "" msgid "No PPD name" msgstr "No hay nombre de PPD" msgid "No VarBind SEQUENCE" msgstr "No hay Varbind SEQUENCE" msgid "No Windows printer drivers are installed." msgstr "No está instalado ningún controlador de impresora de Windows." msgid "No active connection" msgstr "No hay conexión activa" msgid "No active connection." msgstr "No hay conexión activa." #, c-format msgid "No active jobs on %s." msgstr "No hay trabajos activos en %s." msgid "No attributes in request." msgstr "No hay atributos en la solicitud." msgid "No authentication information provided." msgstr "No se ha proporcionado información de autentificación." msgid "No common name specified." msgstr "" msgid "No community name" msgstr "No hay nombre de comunidad" msgid "No default printer." msgstr "No hay impresora predeterminada." msgid "No destinations added." msgstr "No se han añadido destinos." msgid "No device URI found in argv[0] or in DEVICE_URI environment variable." msgstr "" "No se ha encontrado el URI del dispositivo en argv[0] o en la variable de " "entorno DEVICE_URI." msgid "No error-index" msgstr "No hay error-index" msgid "No error-status" msgstr "No hay error-status" msgid "No file in print request." msgstr "No hay ningún archivo en la solicitud de impresión." msgid "No modification time" msgstr "No hay tiempo de modificación" msgid "No name OID" msgstr "No hay nombre OID" msgid "No pages were found." msgstr "No se han encontrado páginas." msgid "No printer name" msgstr "No hay nombre de impresora" msgid "No printer-uri found" msgstr "No se encontró printer-uri" msgid "No printer-uri found for class" msgstr "No se encontró printer-uri para la clase" msgid "No printer-uri in request." msgstr "No hay printer-uri en la solicitud." msgid "No request URI." msgstr "No se ha solicitado URI." msgid "No request protocol version." msgstr "No se ha solicitado versión del protocolo." msgid "No request sent." msgstr "No se ha enviado solicitud." msgid "No request-id" msgstr "No hay request-id" msgid "No stored credentials, not valid for name." msgstr "" msgid "No subscription attributes in request." msgstr "No hay atributos de subscripción en la solicitud." msgid "No subscriptions found." msgstr "No se han encontrado subscripciones." msgid "No variable-bindings SEQUENCE" msgstr "No hay variable-bindings SEQUENCE" msgid "No version number" msgstr "No hay número de versión" msgid "Non-continuous (Mark sensing)" msgstr "No continuo (sensible a señal)" msgid "Non-continuous (Web sensing)" msgstr "No continuo (sensible a web)" msgid "None" msgstr "" msgid "Normal" msgstr "Normal" msgid "Not Found" msgstr "No encontrado" msgid "Not Implemented" msgstr "No implementado" msgid "Not Installed" msgstr "No instalado" msgid "Not Modified" msgstr "No modificado" msgid "Not Supported" msgstr "No implementado" msgid "Not allowed to print." msgstr "No se permite imprimir." msgid "Note" msgstr "Nota" msgid "" "Note: this program only validates the DSC comments, not the PostScript " "itself." msgstr "" "Nota: este programa sólo valida los comentarios DSC, no los PostScript." msgid "OK" msgstr "OK" msgid "Off (1-Sided)" msgstr "Desactivado (1 cara)" msgid "Office Recycled Paper" msgstr "" msgid "Oki" msgstr "Oki" msgid "Online Help" msgstr "Ayuda en línea" msgid "Only local users can create a local printer." msgstr "Sólo usuarios locales pueden crear una impresora local." #, c-format msgid "Open of %s failed: %s" msgstr "La apertura de %s ha fallado: %s" msgid "OpenGroup without a CloseGroup first" msgstr "OpenGroup sin un CloseGroup previo" msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" msgstr "OpenUI/JCLOpenUI sin un CloseUI/JCLCloseUI previo" msgid "Operation Policy" msgstr "Directiva de operación" msgid "Optical Disc" msgstr "" #, c-format msgid "Option \"%s\" cannot be included via %%%%IncludeFeature." msgstr "La opción \"%s\" no puede incluirse via %%%%IncludeFeature." msgid "Options Installed" msgstr "Opciones instaladas" msgid "Options:" msgstr "Opciones:" msgid "Other" msgstr "Otro" msgid "Out of date PPD cache file." msgstr "Archivo de caché PPD obsoleto." msgid "Out of memory." msgstr "Sin memoria." msgid "Output Mode" msgstr "Modo de salida" msgid "Output bin is almost full." msgstr "El recipiente de salida está casi lleno." msgid "Output bin is full." msgstr "El recipiente de salida está lleno." msgid "Output bin is missing." msgstr "No se encuentra el recipiente de salida." msgid "PASS" msgstr "PASA" msgid "PCL Laser Printer" msgstr "Impresora Laser PCL" msgid "PRC16K" msgstr "PRC16K" msgid "PRC16K Long Edge" msgstr "PRC16K lado largo" msgid "PRC32K" msgstr "PRC32K" msgid "PRC32K Long Edge" msgstr "PRC32K lado largo" msgid "PRC32K Oversize" msgstr "PRC32K Extragrande" msgid "PRC32K Oversize Long Edge" msgstr "PRC32K Extragrande lado largo" msgid "Packet does not contain a Get-Response-PDU" msgstr "El paquete no contiene un Get-Response-PDU" msgid "Packet does not start with SEQUENCE" msgstr "El paquete no empieza por SEQUENCE" msgid "Paper" msgstr "" msgid "Paper jam." msgstr "Atasco de papel." msgid "Paper tray is almost empty." msgstr "La bandeja de papel está casi vacía." msgid "Paper tray is empty." msgstr "La bandeja de papel está vacía." msgid "Paper tray is missing." msgstr "No se encuentra la bandeja de papel." msgid "Parallel Fold" msgstr "Pliegue paralelo" msgid "ParamCustominCutInterval" msgstr "ParamCustominCutInterval" msgid "ParamCustominTearInterval" msgstr "ParamCustominTearInterval" #, c-format msgid "Password for %s on %s? " msgstr "¿Contraseña de %s en %s? " #, c-format msgid "Password for %s required to access %s via SAMBA: " msgstr "Se requiere la contraseña de %s para acceder a %s vía SAMBA: " msgid "Pause Class" msgstr "Pausar clase" msgid "Pause Printer" msgstr "Pausar impresora" msgid "Peel-Off" msgstr "Despegar" msgid "Permanent Labels" msgstr "" msgid "Photo" msgstr "Foto" msgid "Photo Film" msgstr "" msgid "Photo Labels" msgstr "Foto pequeña" msgid "Photo Paper" msgstr "" msgid "Photo Paper Plus Glossy II" msgstr "" msgid "Photo Paper Pro Platinum" msgstr "" msgid "Plain Envelope" msgstr "" msgid "Plain Paper" msgstr "Papel normal" msgid "Plastic" msgstr "" msgid "Plastic Archival" msgstr "" msgid "Plastic Colored" msgstr "" msgid "Plastic Glossy" msgstr "" msgid "Plastic High Gloss" msgstr "" msgid "Plastic Matte" msgstr "" msgid "Plastic Satin" msgstr "" msgid "Plastic Semi Gloss" msgstr "" msgid "Plate" msgstr "" msgid "Policies" msgstr "Reglas" msgid "Polyester" msgstr "" msgid "Port Monitor" msgstr "Monitor de puerto" msgid "PostScript Printer" msgstr "Impresora PostScript" msgid "Postcard" msgstr "Postal" msgid "Postcard Double" msgstr "Postal doble" msgid "Postcard Double Long Edge" msgstr "Postal doble lado largo" msgid "Postcard Long Edge" msgstr "Postal lado largo" msgid "Poster Fold" msgstr "Póster plegado" msgid "Pre Cut Tabs" msgstr "" msgid "Premium Inkjet Paper" msgstr "" msgid "Premium Photo Glossy Paper" msgstr "" msgid "Premium Presentation Matte Paper" msgstr "" msgid "Preparing to print." msgstr "Preparando la impresión." msgid "Preprinted Envelope" msgstr "" msgid "Preprinted Paper" msgstr "" msgid "Print Density" msgstr "Densidad de impresión" msgid "Print Job:" msgstr "Imprimir trabajo:" msgid "Print Mode" msgstr "Modo de impresión" msgid "Print Quality" msgstr "Calidad de impresión" msgid "Print Rate" msgstr "Tasa de impresión" msgid "Print Self-Test Page" msgstr "Imprimir página de auto-prueba" msgid "Print Speed" msgstr "Velocidad de impresión" msgid "Print Test Page" msgstr "Imprimir página de prueba" msgid "Print and Cut" msgstr "Imprimir y cortar" msgid "Print and Tear" msgstr "Imprimir y romper" msgid "Print file sent." msgstr "Archivo de impresión enviado." msgid "Print job canceled at printer." msgstr "Trabajo de impresión cancelado en la impresora." msgid "Print job too large." msgstr "Trabajo de impresión demasiado grande." msgid "Print job was not accepted." msgstr "No se acepta el trabajo de impresión." #, c-format msgid "Printer \"%s\" already exists." msgstr "Ya existe la impresora \"%s\"." msgid "Printer Added" msgstr "Impresora añadida" msgid "Printer Default" msgstr "Predeterminado de la impresora" msgid "Printer Deleted" msgstr "Impresora borrada" msgid "Printer Modified" msgstr "Impresora modificada" msgid "Printer Paused" msgstr "Impresora en pausa" msgid "Printer Settings" msgstr "Configuración de la impresora" msgid "Printer cannot print supplied content." msgstr "La impresora no puede imprimir el contenido suministrado." msgid "Printer cannot print with supplied options." msgstr "La impresora no puede imprimir con las opciones suministradas." msgid "Printer does not support required IPP attributes or document formats." msgstr "" msgid "Printer:" msgstr "Impresora:" msgid "Printers" msgstr "Impresoras" #, c-format msgid "Printing page %d, %u%% complete." msgstr "Imprimiendo página %d, %u%% completado." msgid "Punch" msgstr "Perforadora" msgid "Punched Paper" msgstr "" msgid "Quarto" msgstr "Libro en cuarto" msgid "Quota limit reached." msgstr "Se ha alcanzado el límite de cuota." msgid "Rank Owner Job File(s) Total Size" msgstr "Rango Propiet. Trabajo Archivo(s) Tamaño total" msgid "Rear" msgstr "Posterior" msgid "Rear Tray" msgstr "" msgid "Reject Jobs" msgstr "Rechazar trabajos" #, c-format msgid "Remote host did not accept control file (%d)." msgstr "El equipo remoto no ha aceptado el archivo de control (%d)." #, c-format msgid "Remote host did not accept data file (%d)." msgstr "El equipo remoto no ha aceptado el archivo de datos (%d)." msgid "Reprint After Error" msgstr "Volver a imprimir tras un error" msgid "Request Entity Too Large" msgstr "La entidad requerida es demasiado larga" msgid "Resolution" msgstr "Resolución" msgid "Resume Class" msgstr "Reanudar clase" msgid "Resume Printer" msgstr "Reanudar impresora" msgid "Return Address" msgstr "Remite" msgid "Rewind" msgstr "Rebobinar" msgid "Right" msgstr "Derecho" msgid "Right Gate Fold" msgstr "Desplegable derecho" msgid "Right Tray" msgstr "" msgid "Roll" msgstr "" msgid "Roll 1" msgstr "Rollo 1" msgid "Roll 10" msgstr "Rollo 10" msgid "Roll 2" msgstr "Rollo 2" msgid "Roll 3" msgstr "Rollo 3" msgid "Roll 4" msgstr "Rollo 4" msgid "Roll 5" msgstr "Rollo 5" msgid "Roll 6" msgstr "Rollo 6" msgid "Roll 7" msgstr "Rollo 7" msgid "Roll 8" msgstr "Rollo 8" msgid "Roll 9" msgstr "Rollo 9" #, c-format msgid "Running command: %s %s -N -A %s -c '%s'" msgstr "Ejecutando comando: %s %s -N -A %s -c '%s'" msgid "SEQUENCE uses indefinite length" msgstr "SEQUENCE usa una longitud indefinida" msgid "SSL/TLS Negotiation Error" msgstr "Error en negociación SSL/TLS" msgid "Saddle Stitch" msgstr "Encuadernador" msgid "Satin Labels" msgstr "" msgid "Satin Optical Disc" msgstr "" msgid "Satin Photo Paper" msgstr "" msgid "Screen" msgstr "" msgid "Screen Paged" msgstr "" msgid "Security Labels" msgstr "" msgid "See Other" msgstr "Ver otros" msgid "See remote printer." msgstr "Ver impresora remota." msgid "Self Adhesive" msgstr "" msgid "Self Adhesive Film" msgstr "" msgid "Self-signed credentials are blocked." msgstr "" msgid "Semi-Gloss Fabric" msgstr "" msgid "Semi-Gloss Labels" msgstr "" msgid "Semi-Gloss Optical Disc" msgstr "" msgid "Semi-Gloss Photo Paper" msgstr "" msgid "Sending data to printer." msgstr "Enviando datos a la impresora." msgid "Server Restarted" msgstr "Servidor reiniciado" msgid "Server Security Auditing" msgstr "Auditoría de seguridad del servidor" msgid "Server Started" msgstr "Servidor iniciado" msgid "Server Stopped" msgstr "Servidor parado" msgid "Server credentials not set." msgstr "Credenciales del servidor no establecidas." msgid "Service Unavailable" msgstr "Servicio no disponible" msgid "Set Allowed Users" msgstr "Establecer usuarios permitidos" msgid "Set As Server Default" msgstr "Establecer como predeterminada del servidor" msgid "Set Class Options" msgstr "Cambiar opciones clase" msgid "Set Printer Options" msgstr "Cambiar opciones impresora" msgid "Set Publishing" msgstr "Hacer pública" msgid "Shipping Address" msgstr "Dirección de envío" msgid "Short-Edge (Landscape)" msgstr "Lado corto (apaisado)" msgid "Shrink Foil" msgstr "" msgid "Side" msgstr "Lateral" msgid "Side Tray" msgstr "" msgid "Single Face" msgstr "" msgid "Single Punch (Landscape)" msgstr "Perforación simple (apaisado)" msgid "Single Punch (Portrait)" msgstr "Perforación única (retrato)" msgid "Single Punch (Reverse Landscape)" msgstr "Perforación única (apaisado invertido)" msgid "Single Punch (Reverse Portrait)" msgstr "Perforación única (retrato invertido)" msgid "Single Staple (Landscape)" msgstr "Grapado simple (apaisado)" msgid "Single Staple (Portrait)" msgstr "Grapado simple (retrato)" msgid "Single Staple (Reverse Landscape)" msgstr "Grapado simple (apaisado invertido)" msgid "Single Staple (Reverse Portrait)" msgstr "Grapado simple (retrato invertido)" msgid "Single Wall Cardboard" msgstr "" msgid "Sleeve" msgstr "" msgid "Special Paper" msgstr "Papel especial" #, c-format msgid "Spooling job, %.0f%% complete." msgstr "Guardando trabajo en cola, %.0f%% completado." msgid "Stacker 1" msgstr "" msgid "Stacker 10" msgstr "" msgid "Stacker 2" msgstr "" msgid "Stacker 3" msgstr "" msgid "Stacker 4" msgstr "" msgid "Stacker 5" msgstr "" msgid "Stacker 6" msgstr "" msgid "Stacker 7" msgstr "" msgid "Stacker 8" msgstr "" msgid "Stacker 9" msgstr "" msgid "Standard" msgstr "Estándar" msgid "Staple" msgstr "Grapa" msgid "Staple Edge" msgstr "Borde de grapas" msgid "Staple Edge (Landscape)" msgstr "Borde de grapas (apaisado)" msgid "Staple Edge (Portrait)" msgstr "Borde de grapas (retrato)" msgid "Staple Edge (Reverse Landscape)" msgstr "Borde de grapas (apaisado invertido)" msgid "Staple Edge (Reverse Portrait)" msgstr "Borde de grapas (retrato invertido)" #. TRANSLATORS: Banner/cover sheet before the print job. msgid "Starting Banner" msgstr "Rótulo inicial" #, c-format msgid "Starting page %d." msgstr "Iniciando página %d." msgid "Statement" msgstr "Declaración" #, c-format msgid "Subscription #%d does not exist." msgstr "Subscripción #%d no existe." msgid "Substitutions:" msgstr "Substituciones:" msgid "Super A" msgstr "Super A" msgid "Super B" msgstr "Super B (13 x 19 pulg.)" msgid "Super B/A3" msgstr "Super B/A3" msgid "Switching Protocols" msgstr "Protocolos de conexión" msgid "Tab Stock" msgstr "" msgid "Tabloid" msgstr "Tabloide" msgid "Tabloid Oversize" msgstr "Tabloide extragrande" msgid "Tabloid Oversize Long Edge" msgstr "Tabloide extragrande lado largo" msgid "Tear" msgstr "Pestaña" msgid "Tear-Off" msgstr "Pestaña desprendible" msgid "Tear-Off Adjust Position" msgstr "Ajuste de posición de la pestaña desprendible" #, c-format msgid "The \"%s\" attribute is required for print jobs." msgstr "Se necesita el atributo \"%s\" para los trabajos de impresión." #, c-format msgid "The %s attribute cannot be provided with job-ids." msgstr "El atributo %s no puede ser usado con jobs-ids." #, c-format msgid "" "The '%s' Job Status attribute cannot be supplied in a job creation request." msgstr "" "El atributo de estado de trabajo '%s' no puede ser suministrado en una " "solicitud de creación de trabajo." #, c-format msgid "" "The '%s' operation attribute cannot be supplied in a Create-Job request." msgstr "" "El atributo de operación '%s' no puede ser suministrado en una petición " "Create-Job." #, c-format msgid "The PPD file \"%s\" could not be found." msgstr "No se ha podido encontrar el archivo PPD \"%s\"." #, c-format msgid "The PPD file \"%s\" could not be opened: %s" msgstr "No se ha podido abrir el archivo PPD \"%s\": %s" msgid "The PPD file could not be opened." msgstr "No se ha podido abrir el archivo PPD." msgid "" "The class name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "El nombre de la clase sólo puede contener hasta 127 caracteres imprimibles y " "no puede contener espacios, barras (/), o la almohadilla (#)." msgid "The developer unit needs to be replaced." msgstr "La unidad de revelado debe ser reemplazada." msgid "The developer unit will need to be replaced soon." msgstr "La unidad de revelado necesitará ser cambiada pronto." msgid "The fuser's temperature is high." msgstr "Temperatura del fusor alta." msgid "The fuser's temperature is low." msgstr "Temperatura del fusor baja." msgid "" "The notify-lease-duration attribute cannot be used with job subscriptions." msgstr "" "El atributo notify-lease-duration no puede ser usado con subscripciones de " "trabajos." #, c-format msgid "The notify-user-data value is too large (%d > 63 octets)." msgstr "El valor notify-user-data es demasiado grande (%d > 63 octetos)." msgid "The optical photoconductor needs to be replaced." msgstr "El fotoconductor óptico necesita ser cambiado." msgid "The optical photoconductor will need to be replaced soon." msgstr "El fotoconductor óptico necesitará ser cambiado pronto." msgid "The printer configuration is incorrect or the printer no longer exists." msgstr "" "La configuración de la impresora es incorrecta o la impresora ya no existe." msgid "The printer did not respond." msgstr "La impresora no respondió." msgid "The printer is in use." msgstr "La impresora está en uso." msgid "The printer is low on ink." msgstr "La impresora tiene poca tinta." msgid "The printer is low on toner." msgstr "La impresora tiene poco toner." msgid "The printer is not connected." msgstr "La impresora no está conectada." msgid "The printer is not responding." msgstr "La impresora no responde." msgid "The printer is now connected." msgstr "La impresora está ahora conectada." msgid "The printer is now online." msgstr "La impresora está ahora en línea." msgid "The printer is offline." msgstr "La impresora está fuera de línea." msgid "The printer is unreachable at this time." msgstr "La impresora es inalcanzable en este momento." msgid "The printer may be out of ink." msgstr "La impresora puede que no tenga tinta." msgid "The printer may be out of toner." msgstr "La impresora puede que esté sin toner." msgid "The printer may not exist or is unavailable at this time." msgstr "La impresora puede no existir o no estar disponible en este momento." msgid "" "The printer name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "El nombre de la impresora sólo puede contener hasta 127 caracteres " "imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)." msgid "The printer or class does not exist." msgstr "La impresora o clase no existe." msgid "The printer or class is not shared." msgstr "La impresora o clase no está compartida." msgid "The printer's cover is open." msgstr "La tapa de la impresora está abierta." msgid "The printer's door is open." msgstr "La puerta de la impresora está abierta." msgid "The printer's interlock is open." msgstr "El dispositivo de seguridad de la impresora está abierto." msgid "The printer's waste bin is almost full." msgstr "Recipiente de residuos de la impresora está casi lleno." msgid "The printer's waste bin is full." msgstr "Recipiente de residuos de la impresora está lleno." #, c-format msgid "The printer-uri \"%s\" contains invalid characters." msgstr "El printer-uri \"%s\" contiene caracteres no válidos." msgid "The printer-uri attribute is required." msgstr "Se necesita el atributo printer-uri." msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." msgstr "" "El printer-uri debe ser de la forma \"ipp://NOMBRE_EQUIPO/classes/" "NOMBRE_CLASE\"." msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgstr "" "El printer-uri debe ser de la forma \"ipp://NOMBRE_EQUIPO/printers/" "NOMBRE_IMPRESORA\"." msgid "" "The subscription name may not contain spaces, slashes (/), question marks " "(?), or the pound sign (#)." msgstr "" "El nombre de la subscripción no puede contener espacios, barras (/), signos " "de interrogación (?), o la almohadilla (#)." msgid "" "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to " "enable it." msgstr "" "La interfaz web está desactivada en este momento. Ejecute \"cupsctl " "WebInterface=yes\" para activarla." #, c-format msgid "The which-jobs value \"%s\" is not supported." msgstr "No se admite el uso del valor which-jobs \"%s\"." msgid "There are too many subscriptions." msgstr "Hay demasiadas subscripciones." msgid "There was an unrecoverable USB error." msgstr "Ha habido un error USB irrecuperable." msgid "Thermal Transfer Media" msgstr "Soporte de transferencia térmica" msgid "Too many active jobs." msgstr "Demasiados trabajos activos." #, c-format msgid "Too many job-sheets values (%d > 2)." msgstr "Demasiados valores de job-sheets (%d > 2)." #, c-format msgid "Too many printer-state-reasons values (%d > %d)." msgstr "Demasiados valores printer-state-reasons (%d > %d)." msgid "Top" msgstr "Superior" msgid "Top Tray" msgstr "" msgid "Tractor" msgstr "" msgid "Transfer" msgstr "" msgid "Transparency" msgstr "Transparencia" msgid "Tray" msgstr "Bandeja" msgid "Tray 1" msgstr "Bandeja 1" msgid "Tray 10" msgstr "Bandeja 10" msgid "Tray 11" msgstr "Bandeja 11" msgid "Tray 12" msgstr "Bandeja 12" msgid "Tray 13" msgstr "Bandeja 13" msgid "Tray 14" msgstr "Bandeja 14" msgid "Tray 15" msgstr "Bandeja 15" msgid "Tray 16" msgstr "Bandeja 16" msgid "Tray 17" msgstr "Bandeja 17" msgid "Tray 18" msgstr "Bandeja 18" msgid "Tray 19" msgstr "Bandeja 19" msgid "Tray 2" msgstr "Bandeja 2" msgid "Tray 20" msgstr "Bandeja 20" msgid "Tray 3" msgstr "Bandeja 3" msgid "Tray 4" msgstr "Bandeja 4" msgid "Tray 5" msgstr "Bandeja 5" msgid "Tray 6" msgstr "Bandeja 6" msgid "Tray 7" msgstr "Bandeja 7" msgid "Tray 8" msgstr "Bandeja 8" msgid "Tray 9" msgstr "Bandeja 9" msgid "Triple Staple (Landscape)" msgstr "Grapado triple (apaisado)" msgid "Triple Staple (Portrait)" msgstr "Grapado triple (retrato)" msgid "Triple Staple (Reverse Landscape)" msgstr "Grapado triple (apaisado invertido)" msgid "Triple Staple (Reverse Portrait)" msgstr "Grapado triple (retrato invertido)" msgid "Triple Wall Cardboard" msgstr "" msgid "Trust on first use is disabled." msgstr "" msgid "URI Too Long" msgstr "URI demasiado largo" msgid "URI too large" msgstr "URI demasiado grande" msgid "US Fanfold" msgstr "" msgid "US Ledger" msgstr "Libro Mayor, 17 x 11 pulg." msgid "US Legal" msgstr "Legal EE.UU." msgid "US Legal Oversize" msgstr "Legal EE.UU. Extragrande" msgid "US Letter" msgstr "Carta EE.UU." msgid "US Letter Long Edge" msgstr "Carta EE.UU. lado largo" msgid "US Letter Oversize" msgstr "Carta EE.UU. Extragrande" msgid "US Letter Oversize Long Edge" msgstr "Carta EE.UU. Extragrande lado largo" msgid "US Letter Small" msgstr "Carta EE.UU. Pequeña" msgid "Unable to access cupsd.conf file" msgstr "No se ha podido acceder al archivo cupsd.conf" msgid "Unable to access help file." msgstr "No se ha podido acceder al archivo de ayuda." msgid "Unable to add RSS subscription" msgstr "No se ha podido añadir la subscripción RSS" msgid "Unable to add class" msgstr "No se ha podido añadir la clase" msgid "Unable to add document to print job." msgstr "No se ha podido añadir el documento al trabajo de impresión." #, c-format msgid "Unable to add job for destination \"%s\"." msgstr "No se ha podido añadir el trabajo para el destino \"%s\"." msgid "Unable to add printer" msgstr "No se ha podido añadir la impresora" msgid "Unable to allocate memory for file types." msgstr "No se ha podido reservar memoria para tipos de archivo." msgid "Unable to allocate memory for page info" msgstr "No se ha podido reservar memoria para la información de página." msgid "Unable to allocate memory for pages array" msgstr "No se ha podido reservar memoria para la secuencia de páginas" msgid "Unable to cancel RSS subscription" msgstr "No se ha podido cancelar la subscripción RSS" msgid "Unable to cancel print job." msgstr "No se ha podido cancelar el trabajo de impresión." msgid "Unable to change printer" msgstr "No se ha podido cambiar la impresora" msgid "Unable to change printer-is-shared attribute" msgstr "No se ha podido cambiar el atributo printer-is-shared" msgid "Unable to change server settings" msgstr "No se ha podido cambiar la configuración del servidor" #, c-format msgid "Unable to compile mimeMediaType regular expression: %s." msgstr "No se ha podido compilar la expresión regular mimeMediaType: %s." #, c-format msgid "Unable to compile naturalLanguage regular expression: %s." msgstr "No se ha podido compilar la expresión regular naturalLanguage: %s." msgid "Unable to configure printer options." msgstr "No se han podido configurar las opciones de impresión." msgid "Unable to connect to host." msgstr "No se ha podido conectar al equipo." msgid "Unable to contact printer, queuing on next printer in class." msgstr "" "No se ha podido contactar con la impresora; poniendo en cola en la siguiente " "impresora de la clase." #, c-format msgid "Unable to copy 64-bit CUPS printer driver files (%d)." msgstr "" "No se han podido copiar los archivos del controlador de impresora de 64-bit " "de CUPS (%d)." #, c-format msgid "Unable to copy 64-bit Windows printer driver files (%d)." msgstr "" "No se han podido copiar los archivos del controlador de impresora de 64-bit " "de Windows (%d)." #, c-format msgid "Unable to copy CUPS printer driver files (%d)." msgstr "" "No se han podido copiar los archivos del controlador de impresora de CUPS " "(%d)." #, c-format msgid "Unable to copy PPD file - %s" msgstr "No se ha podido copiar el archivo PPD - %s" msgid "Unable to copy PPD file." msgstr "No se ha podido copiar el archivo PPD." #, c-format msgid "Unable to copy Windows 2000 printer driver files (%d)." msgstr "" "No se han podido copiar los archivos del controlador de impresora de Windows " "2000 (%d)." #, c-format msgid "Unable to copy Windows 9x printer driver files (%d)." msgstr "" "No se han podido copiar los archivos del controlador de impresora de Windows " "9x (%d)." msgid "Unable to create credentials from array." msgstr "" msgid "Unable to create printer-uri" msgstr "No se ha podido crear printer-uri" msgid "Unable to create printer." msgstr "No se ha podido crear la impresora." msgid "Unable to create server credentials." msgstr "No se han podido crear las credenciales del servidor." msgid "Unable to create temporary file" msgstr "No se ha podido crear el archivo temporal" msgid "Unable to delete class" msgstr "No se ha podido borrar la clase" msgid "Unable to delete printer" msgstr "No se ha podido borrar la impresora" msgid "Unable to do maintenance command" msgstr "No se ha podido realizar el comando de mantenimiento" msgid "Unable to edit cupsd.conf files larger than 1MB" msgstr "No se pueden editar archivos cupsd.conf mayores de 1MB" msgid "" "Unable to establish a secure connection to host (certificate chain invalid)." msgstr "" "No se ha podido establecer una conexión segura con el equipo (cadena " "certificado incorrecta)." msgid "" "Unable to establish a secure connection to host (certificate not yet valid)." msgstr "" "No se ha podido establecer una conexión segura con el equipo (el certificado " "aún no es válido)." msgid "Unable to establish a secure connection to host (expired certificate)." msgstr "" "No se ha podido establecer una conexión segura con el equipo (certificado " "caducado)." msgid "Unable to establish a secure connection to host (host name mismatch)." msgstr "" "No se ha podido establecer una conexión segura con el equipo (el nombre de " "equipo no coincide)." msgid "" "Unable to establish a secure connection to host (peer dropped connection " "before responding)." msgstr "" "No se ha podido establecer una conexión segura con el equipo (el par cortó " "la conexión antes de responder)." msgid "" "Unable to establish a secure connection to host (self-signed certificate)." msgstr "" "No se ha podido establecer una conexión segura con el equipo (certificado " "auto-firmado)." msgid "" "Unable to establish a secure connection to host (untrusted certificate)." msgstr "" "No se ha podido establecer una conexión segura con el equipo (certificado no " "seguro)." msgid "Unable to establish a secure connection to host." msgstr "No se ha podido establecer una conexión segura al equipo." msgid "Unable to find destination for job" msgstr "No se ha podido encontrar destino para el trabajo" msgid "Unable to find printer." msgstr "No se ha podido encontrar la impresora." msgid "Unable to find server credentials." msgstr "No se han podido encontrar las credenciales del servidor." msgid "Unable to get backend exit status." msgstr "No se ha podido obtener el estado de salida del programa backend." msgid "Unable to get class list" msgstr "No se ha podido obtener la lista de clases" msgid "Unable to get class status" msgstr "No se ha podido obtener el estado de la clase" msgid "Unable to get list of printer drivers" msgstr "No se ha podido obtener la lista de controladores de impresora" msgid "Unable to get printer attributes" msgstr "No se han podido obtener los atributos de la impresora" msgid "Unable to get printer list" msgstr "No se ha podido obtener la lista de impresoras" msgid "Unable to get printer status" msgstr "No se ha podido obtener el estado de la impresora" msgid "Unable to get printer status." msgstr "No se ha podido obtener el estado de la impresora." #, c-format msgid "Unable to install Windows 2000 printer driver files (%d)." msgstr "" "No se han podido instalar los archivos del controlador de impresora de " "Windows 2000 (%d)." #, c-format msgid "Unable to install Windows 9x printer driver files (%d)." msgstr "" "No se han podido instalar los archivos del controlador de impresora de " "Windows 9x (%d)." msgid "Unable to load help index." msgstr "No se ha podido cargar el índice de ayuda." #, c-format msgid "Unable to locate printer \"%s\"." msgstr "No se ha podido localizar la impresora \"%s\"." msgid "Unable to locate printer." msgstr "No se ha podido localizar la impresora." msgid "Unable to modify class" msgstr "No se ha podido modificar la clase" msgid "Unable to modify printer" msgstr "No se ha podido modificar la impresora" msgid "Unable to move job" msgstr "No se ha podido mover el trabajo" msgid "Unable to move jobs" msgstr "No se han podido mover los trabajos" msgid "Unable to open PPD file" msgstr "No se ha podido abrir el archivo PPD" msgid "Unable to open cupsd.conf file:" msgstr "No se ha podido abrir el archivo cupsd.conf:" msgid "Unable to open device file" msgstr "No se ha podido abrir el archivo de dispositivo" #, c-format msgid "Unable to open document #%d in job #%d." msgstr "No se ha podido abrir el documento #%d del trabajo #%d." msgid "Unable to open help file." msgstr "No se ha podido abrir el archivo de ayuda." msgid "Unable to open print file" msgstr "No se ha podido abrir el archivo de impresión" msgid "Unable to open raster file" msgstr "No se ha podido abrir el archivo de trama de datos (raster)" msgid "Unable to print test page" msgstr "No se ha podido imprimir la página de prueba" msgid "Unable to read print data." msgstr "No se han podido leer los datos de impresión." msgid "Unable to rename job document file." msgstr "No se ha podido renombrar el archivo del documento de trabajo." msgid "Unable to resolve printer-uri." msgstr "No se ha podido resolver printer-uri." #, c-format msgid "Unable to run \"%s\": %s" msgstr "No se ha podido ejecutar \"%s\": %s" msgid "Unable to see in file" msgstr "No se ha podido mirar en el archivo" msgid "Unable to send command to printer driver" msgstr "No se ha podido enviar un comando al controlador de la impresora" msgid "Unable to send data to printer." msgstr "No se han podido enviar datos a la impresora." #, c-format msgid "Unable to set Windows printer driver (%d)." msgstr "" "No se ha podido configurar el controlador de impresora de Windows (%d)." msgid "Unable to set options" msgstr "No se han podido cambiar las opciones" msgid "Unable to set server default" msgstr "No se ha podido establecer el servidor predeterminado" msgid "Unable to start backend process." msgstr "No se ha podido iniciar el proceso backend." msgid "Unable to upload cupsd.conf file" msgstr "No se ha podido enviar el archivo cupsd.conf" msgid "Unable to use legacy USB class driver." msgstr "" "No se ha podido usar el controlador de dispositivo de clase USB obsoleto." msgid "Unable to write print data" msgstr "No se han podido escribir los datos de impresión" #, c-format msgid "Unable to write uncompressed print data: %s" msgstr "No se han podido escribir los datos de impresión sin comprimir: %s" msgid "Unauthorized" msgstr "No autorizado" msgid "Units" msgstr "Unidades" msgid "Unknown" msgstr "Desconocido" #, c-format msgid "Unknown choice \"%s\" for option \"%s\"." msgstr "Preferencia \"%s\" desconocida para la opción \"%s\"." #, c-format msgid "Unknown encryption option value: \"%s\"." msgstr "Valor de opción de cifrado \"%s\" desconocida." #, c-format msgid "Unknown file order: \"%s\"." msgstr "Orden de archivos \"%s\" desconocido." #, c-format msgid "Unknown format character: \"%c\"." msgstr "Carácter de formato \"%c\" desconocido." msgid "Unknown hash algorithm." msgstr "Algoritmo de hash desconocido." msgid "Unknown media size name." msgstr "Nombre de tamaño de papel desconocido." #, c-format msgid "Unknown option \"%s\" with value \"%s\"." msgstr "Opción \"%s\" con valor \"%s\" desconocida." #, c-format msgid "Unknown option \"%s\"." msgstr "Opción \"%s\" desconocida." #, c-format msgid "Unknown print mode: \"%s\"." msgstr "Modo de impresión \"%s\" desconocido." #, c-format msgid "Unknown printer-error-policy \"%s\"." msgstr "printer-error-policy \"%s\" incorrecto." #, c-format msgid "Unknown printer-op-policy \"%s\"." msgstr "printer-op-policy \"%s\" incorrecto." msgid "Unknown request method." msgstr "Método de solicitud desconocido." msgid "Unknown request version." msgstr "Versión de solicitud desconocida." msgid "Unknown scheme in URI" msgstr "Esquema en URI desconocido" msgid "Unknown service name." msgstr "Nombre de servicio desconocido." #, c-format msgid "Unknown version option value: \"%s\"." msgstr "Valor de opción de versión \"%s\" desconocida." #, c-format msgid "Unsupported 'compression' value \"%s\"." msgstr "Valor 'compression' \"%s\" no implementado." #, c-format msgid "Unsupported 'document-format' value \"%s\"." msgstr "Valor 'document-format' \"%s\" no implementado." msgid "Unsupported 'job-name' value." msgstr "Valor 'job-name' no implementado." #, c-format msgid "Unsupported character set \"%s\"." msgstr "Juego de caracteres \"%s\" no implementado." #, c-format msgid "Unsupported compression \"%s\"." msgstr "Compresión \"%s\" no implementada." #, c-format msgid "Unsupported document-format \"%s\"." msgstr "document-format \"%s\" no implementado." #, c-format msgid "Unsupported document-format \"%s/%s\"." msgstr "document-format \"%s/%s\" no implementado." #, c-format msgid "Unsupported format \"%s\"." msgstr "Formato \"%s\" no implementado." msgid "Unsupported margins." msgstr "Márgenes no implementados." msgid "Unsupported media value." msgstr "Valor del medio no implementado." #, c-format msgid "Unsupported number-up value %d, using number-up=1." msgstr "" "Valor de number-up (páginas por hoja) %d no implementado; usando number-up=1." #, c-format msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb." msgstr "" "Valor de number-up-layout (disposición de páginas por hoja) %s no " "implementado; usando number-up-layout=lrtb." #, c-format msgid "Unsupported page-border value %s, using page-border=none." msgstr "" "Valor de page-border (borde de página) %s no implementado; usando page-" "border=none (ninguno)." msgid "Unsupported raster data." msgstr "Trama de datos no implementados." msgid "Unsupported value type" msgstr "Tipo de valor no implementado" msgid "Upgrade Required" msgstr "Se requiere actualización" msgid "" "Usage:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]" msgstr "" "Uso:\n" "\n" " lpadmin [-h servidor] -d destino\n" " lpadmin [-h servidor] -x destino\n" " lpadmin [-h servidor] -p impresora [-c clase] [-i interfaz] [-m modelo]\n" " [-r clase] [-v dispositivo] [-D descripción]\n" " [-P archivo-ppd] [-o nombre=valor]\n" " [-u allow:usuario,usuario] [-u deny:usuario,usuario]" #, c-format msgid "Usage: %s job-id user title copies options [file]" msgstr "Uso: %s job-id usuario título copias opciones [archivo]" msgid "Usage: cupsaddsmb [options] printer1 ... printerN" msgstr "Uso: cupsaddsmb [opciones] impresora1 ... impresoraN" msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]" msgstr "Uso: cupsctl [opciones] [param=valor ... paramN=valorN]" msgid "Usage: cupsd [options]" msgstr "Uso: cupsd [opciones]" msgid "Usage: cupsfilter [ options ] [ -- ] filename" msgstr "Uso: cupsfilter [ opciones ] [ -- ] nombre_archivo" msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]" msgstr "Uso: cupstestdsc [opciones] nombre_archivo.ps [... nombre_archivo.ps]" msgid "" "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" msgstr "" "Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN.ppd" "[.gz]]" msgid "" "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " ippfind [options] name[.regtype[.domain.]] ... [expression]\n" " ippfind --help\n" " ippfind --version" msgstr "" "Uso: ippfind [opciones] regtipo[,subtipo][.dominio.] ... [expresión]\n" " ippfind [opciones] nombre[.regtipo[.dominio.]] ... [expresión]\n" " ippfind --help\n" " ippfind --version" msgid "Usage: ipptool [options] URI filename [ ... filenameN ]" msgstr "Uso: ipptool [opciones] URI nombre_archivo [ ... nombre_archivoN ]" msgid "Usage: lpmove job/src dest" msgstr "Uso: lpmove trabajo/fuente destino" msgid "" "Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " lpoptions [-h server] [-E] -x printer" msgstr "" "Uso: lpoptions [-h servidor] [-E] -d impresora\n" " lpoptions [-h servidor] [-E] [-p impresora] -l\n" " lpoptions [-h servidor] [-E] -p impresora -o opción[=valor] ...\n" " lpoptions [-h servidor] [-E] -x impresora" msgid "" "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" msgstr "" "Uso: lpq [-P dest] [-U nombre_usuario] [-h nombre_equipo[:puerto]] [-l] " "[+intervalo]" msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" msgstr "Uso: ppdc [opciones] nombre_archivo.drv [ ... nombre_archivoN.drv ]" msgid "Usage: ppdhtml [options] filename.drv >filename.html" msgstr "Uso: ppdhtml [opciones] nombre_archivo.drv >nombre_archivo.html" msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgstr "Uso: ppdi [opciones] nombre_archivo.ppd [ ... nombre_archivoN.ppd ]" msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" "Uso: ppdmerge [opciones] nombre_archivo.ppd [ ... nombre_archivoN.ppd ]" msgid "" "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" msgstr "" "Uso: ppdpo [opciones] -o nombre_archivo.po nombre_archivo.drv [ ... " "nombre_archivoN.drv ]" msgid "Usage: snmp [host-or-ip-address]" msgstr "Uso: snmp [equipo-o-dirección-ip]" msgid "Value uses indefinite length" msgstr "Valor usa una longitud indefinida" msgid "VarBind uses indefinite length" msgstr "VarBind usa una longitud indefinida" msgid "Vellum Paper" msgstr "" msgid "Version uses indefinite length" msgstr "Versión usa una longitud indefinida" msgid "Waiting for job to complete." msgstr "Esperando a que finalice el trabajo." msgid "Waiting for printer to become available." msgstr "Esperando a que la impresora esté disponible." msgid "Waiting for printer to finish." msgstr "Esperando a que finalice la impresora." msgid "Warning, no Windows 2000 printer drivers are installed." msgstr "" "Advertencia, no está instalado ningún controlador de impresora de Windows " "2000." msgid "Waterproof Fabric" msgstr "" msgid "Web Interface is Disabled" msgstr "La interfaz web está desactivada." msgid "Wet Film" msgstr "" msgid "Windowed Envelope" msgstr "" msgid "Yes" msgstr "Si" #, c-format msgid "" "You must access this page using the URL https://" "%s:%d%s." msgstr "" "Debe acceder a esta página usando el URL https://" "%s:%d%s." msgid "Z Fold" msgstr "Plegado en Z" msgid "ZPL Label Printer" msgstr "Impresora de etiquetas ZPL" msgid "Zebra" msgstr "Zebra" msgid "aborted" msgstr "cancelado" msgid "accuracy-units" msgstr "Accuracy Units" msgid "accuracy-units.mm" msgstr "Mm" msgid "accuracy-units.nm" msgstr "Nm" msgid "accuracy-units.um" msgstr "Um" msgid "baling" msgstr "Bale Output" msgid "baling-type" msgstr "Baling Type" msgid "baling-type.band" msgstr "Band" msgid "baling-type.shrink-wrap" msgstr "Shrink Wrap" msgid "baling-type.wrap" msgstr "Wrap" msgid "baling-when" msgstr "Baling When" msgid "baling-when.after-job" msgstr "After Job" msgid "baling-when.after-sets" msgstr "After Sets" msgid "binding" msgstr "Bind Output" msgid "binding-reference-edge" msgstr "Binding Reference Edge" msgid "binding-reference-edge.bottom" msgstr "Bottom" msgid "binding-reference-edge.left" msgstr "Left" msgid "binding-reference-edge.right" msgstr "Right" msgid "binding-reference-edge.top" msgstr "Top" msgid "binding-type" msgstr "Binding Type" msgid "binding-type.adhesive" msgstr "Adhesive" msgid "binding-type.comb" msgstr "Comb" msgid "binding-type.flat" msgstr "Flat" msgid "binding-type.padding" msgstr "Padding" msgid "binding-type.perfect" msgstr "Perfect" msgid "binding-type.spiral" msgstr "Spiral" msgid "binding-type.tape" msgstr "Tape" msgid "binding-type.velo" msgstr "Velo" msgid "canceled" msgstr "cancelado" msgid "charge-info-message" msgstr "Charge Info Message" msgid "coating" msgstr "Coat Sheets" msgid "coating-sides" msgstr "Coating Sides" msgid "coating-sides.back" msgstr "Back" msgid "coating-sides.both" msgstr "Both" msgid "coating-sides.front" msgstr "Front" msgid "coating-type" msgstr "Coating Type" msgid "coating-type.archival" msgstr "Archival" msgid "coating-type.archival-glossy" msgstr "Archival Glossy" msgid "coating-type.archival-matte" msgstr "Archival Matte" msgid "coating-type.archival-semi-gloss" msgstr "Archival Semi Gloss" msgid "coating-type.glossy" msgstr "Glossy" msgid "coating-type.high-gloss" msgstr "High Gloss" msgid "coating-type.matte" msgstr "Matte" msgid "coating-type.semi-gloss" msgstr "Semi-Gloss" msgid "coating-type.silicone" msgstr "Silicone" msgid "coating-type.translucent" msgstr "Translucent" msgid "completed" msgstr "completado" msgid "confirmation-sheet-print" msgstr "Confirmation Sheet Print" msgid "copies" msgstr "Copies" msgid "cover-back" msgstr "Cover Back" msgid "cover-front" msgstr "Cover Front" msgid "cover-sheet-info" msgstr "Cover Sheet Info" msgid "cover-sheet-info-supported.date-time" msgstr "Date Time" msgid "cover-sheet-info-supported.from-name" msgstr "From Name" msgid "cover-sheet-info-supported.logo" msgstr "Logo" msgid "cover-sheet-info-supported.message" msgstr "Message" msgid "cover-sheet-info-supported.organization" msgstr "Organization" msgid "cover-sheet-info-supported.subject" msgstr "Subject" msgid "cover-sheet-info-supported.to-name" msgstr "To Name" msgid "cover-type" msgstr "Cover Type" msgid "cover-type.no-cover" msgstr "No Cover" msgid "cover-type.print-back" msgstr "Print Back" msgid "cover-type.print-both" msgstr "Print Both" msgid "cover-type.print-front" msgstr "Print Front" msgid "cover-type.print-none" msgstr "Print None" msgid "covering" msgstr "Cover Output" msgid "covering-name" msgstr "Covering Name" msgid "covering-name.plain" msgstr "Plain" msgid "covering-name.pre-cut" msgstr "Pre Cut" msgid "covering-name.pre-printed" msgstr "Pre Printed" msgid "cups-deviced failed to execute." msgstr "Ha fallado al ejecutarse cups-deviced." msgid "cups-driverd failed to execute." msgstr "Ha fallado al ejecutarse cups-driverd." #, c-format msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "cupsaddsmb: No hay archivo PPD para la impresora \"%s\" - %s" msgid "cupsctl: Cannot set Listen or Port directly." msgstr "cupsctl: No se puede establecer Listen o Port directamente." #, c-format msgid "cupsctl: Unable to connect to server: %s" msgstr "cupsctl: No se ha podido conectar al servidor: %s" #, c-format msgid "cupsctl: Unknown option \"%s\"" msgstr "cupsctl: Opción \"%s\" desconocida" #, c-format msgid "cupsctl: Unknown option \"-%c\"" msgstr "cupsctl: Opción \"-%c\" desconocida" msgid "cupsd: Expected config filename after \"-c\" option." msgstr "" "cupsd: Se esperaba un nombre de archivo de configuración tras la opción \"-c" "\"." msgid "cupsd: Expected cups-files.conf filename after \"-s\" option." msgstr "" "cupsd: Se esperaba el nombre de archivo cups-files.conf tras la opción \"-s" "\"." msgid "cupsd: On-demand support not compiled in, running in normal mode." msgstr "" "cupsd: El uso bajo-demanda no está compilado. Funcionando en modo normal." msgid "cupsd: Relative cups-files.conf filename not allowed." msgstr "cupsd: No se permite nombre de archivo cups-files.conf relativo." msgid "cupsd: Unable to get current directory." msgstr "cupsd: No se ha podido obtener el directorio actual." msgid "cupsd: Unable to get path to cups-files.conf file." msgstr "cupsd: No se ha podido obtener la ruta al archivo cups-files.conf." #, c-format msgid "cupsd: Unknown argument \"%s\" - aborting." msgstr "cupsd: Argumento \"%s\" desconocido - cancelando." #, c-format msgid "cupsd: Unknown option \"%c\" - aborting." msgstr "cupsd: Opción \"%c\" desconocida - cancelando." #, c-format msgid "cupsfilter: Invalid document number %d." msgstr "cupsfilter: Número de documento %d no válido." #, c-format msgid "cupsfilter: Invalid job ID %d." msgstr "cupsfilter: ID de trabajo %d no válida." msgid "cupsfilter: Only one filename can be specified." msgstr "cupsfilter: Solo se puede especificar un nombre de archivo." #, c-format msgid "cupsfilter: Unable to get job file - %s" msgstr "cupsfilter: No se ha podido obtener el archivo del trabajo - %s" msgid "cupstestppd: The -q option is incompatible with the -v option." msgstr "cupstestppd: La opción -q es incompatible con la opción -v." msgid "cupstestppd: The -v option is incompatible with the -q option." msgstr "cupstestppd: La opción -v es incompatible con la opción -q." msgid "detailed-status-message" msgstr "Detailed Status Message" #, c-format msgid "device for %s/%s: %s" msgstr "dispositivo para %s/%s: %s" #, c-format msgid "device for %s: %s" msgstr "dispositivo para %s: %s" msgid "document-copies" msgstr "Copies" msgid "document-state" msgstr "Document State" msgid "document-state-reasons" msgstr "Detailed Document State" msgid "document-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "document-state-reasons.canceled-at-device" msgstr "Canceled At Device" msgid "document-state-reasons.canceled-by-operator" msgstr "Canceled By Operator" msgid "document-state-reasons.canceled-by-user" msgstr "Canceled By User" msgid "document-state-reasons.completed-successfully" msgstr "Completed Successfully" msgid "document-state-reasons.completed-with-errors" msgstr "Completed With Errors" msgid "document-state-reasons.completed-with-warnings" msgstr "Completed With Warnings" msgid "document-state-reasons.compression-error" msgstr "Compression Error" msgid "document-state-reasons.data-insufficient" msgstr "Data Insufficient" msgid "document-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "document-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "document-state-reasons.digital-signature-wait" msgstr "Digital Signature Wait" msgid "document-state-reasons.document-access-error" msgstr "Document Access Error" msgid "document-state-reasons.document-fetchable" msgstr "Document Fetchable" msgid "document-state-reasons.document-format-error" msgstr "Document Format Error" msgid "document-state-reasons.document-password-error" msgstr "Document Password Error" msgid "document-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "document-state-reasons.document-security-error" msgstr "Document Security Error" msgid "document-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "document-state-reasons.errors-detected" msgstr "Errors Detected" msgid "document-state-reasons.incoming" msgstr "Incoming" msgid "document-state-reasons.interpreting" msgstr "Interpreting" msgid "document-state-reasons.none" msgstr "None" msgid "document-state-reasons.outgoing" msgstr "Outgoing" msgid "document-state-reasons.printing" msgstr "Printing" msgid "document-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "document-state-reasons.queued" msgstr "Queued" msgid "document-state-reasons.queued-for-marker" msgstr "Queued For Marker" msgid "document-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "document-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "document-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "document-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "document-state-reasons.transforming" msgstr "Transforming" msgid "document-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "document-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "document-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "document-state.3" msgstr "Pending" msgid "document-state.5" msgstr "Processing" msgid "document-state.6" msgstr "Processing Stopped" msgid "document-state.7" msgstr "Canceled" msgid "document-state.8" msgstr "Aborted" msgid "document-state.9" msgstr "Completed" msgid "error-index uses indefinite length" msgstr "error-index usa una longitud indefinida" msgid "error-status uses indefinite length" msgstr "error-status usa una longitud indefinida" msgid "feed-orientation" msgstr "Feed Orientation" msgid "feed-orientation.long-edge-first" msgstr "Long Edge First" msgid "feed-orientation.short-edge-first" msgstr "Short Edge First" msgid "fetch-status-code" msgstr "Fetch Status Code" msgid "finishing-template" msgstr "Finishing Template" msgid "finishing-template.bale" msgstr "Bale" msgid "finishing-template.bind" msgstr "Bind" msgid "finishing-template.bind-bottom" msgstr "Bind Bottom" msgid "finishing-template.bind-left" msgstr "Bind Left" msgid "finishing-template.bind-right" msgstr "Bind Right" msgid "finishing-template.bind-top" msgstr "Bind Top" msgid "finishing-template.booklet-maker" msgstr "Booklet Maker" msgid "finishing-template.coat" msgstr "Coat" msgid "finishing-template.cover" msgstr "Cover" msgid "finishing-template.edge-stitch" msgstr "Edge Stitch" msgid "finishing-template.edge-stitch-bottom" msgstr "Edge Stitch Bottom" msgid "finishing-template.edge-stitch-left" msgstr "Edge Stitch Left" msgid "finishing-template.edge-stitch-right" msgstr "Edge Stitch Right" msgid "finishing-template.edge-stitch-top" msgstr "Edge Stitch Top" msgid "finishing-template.fold" msgstr "Fold" msgid "finishing-template.fold-accordion" msgstr "Fold Accordion" msgid "finishing-template.fold-double-gate" msgstr "Fold Double Gate" msgid "finishing-template.fold-engineering-z" msgstr "Fold Engineering Z" msgid "finishing-template.fold-gate" msgstr "Fold Gate" msgid "finishing-template.fold-half" msgstr "Fold Half" msgid "finishing-template.fold-half-z" msgstr "Fold Half Z" msgid "finishing-template.fold-left-gate" msgstr "Fold Left Gate" msgid "finishing-template.fold-letter" msgstr "Fold Letter" msgid "finishing-template.fold-parallel" msgstr "Fold Parallel" msgid "finishing-template.fold-poster" msgstr "Fold Poster" msgid "finishing-template.fold-right-gate" msgstr "Fold Right Gate" msgid "finishing-template.fold-z" msgstr "Fold Z" msgid "finishing-template.jdf-f10-1" msgstr "JDF F10 1" msgid "finishing-template.jdf-f10-2" msgstr "JDF F10 2" msgid "finishing-template.jdf-f10-3" msgstr "JDF F10 3" msgid "finishing-template.jdf-f12-1" msgstr "JDF F12 1" msgid "finishing-template.jdf-f12-10" msgstr "JDF F12 10" msgid "finishing-template.jdf-f12-11" msgstr "JDF F12 11" msgid "finishing-template.jdf-f12-12" msgstr "JDF F12 12" msgid "finishing-template.jdf-f12-13" msgstr "JDF F12 13" msgid "finishing-template.jdf-f12-14" msgstr "JDF F12 14" msgid "finishing-template.jdf-f12-2" msgstr "JDF F12 2" msgid "finishing-template.jdf-f12-3" msgstr "JDF F12 3" msgid "finishing-template.jdf-f12-4" msgstr "JDF F12 4" msgid "finishing-template.jdf-f12-5" msgstr "JDF F12 5" msgid "finishing-template.jdf-f12-6" msgstr "JDF F12 6" msgid "finishing-template.jdf-f12-7" msgstr "JDF F12 7" msgid "finishing-template.jdf-f12-8" msgstr "JDF F12 8" msgid "finishing-template.jdf-f12-9" msgstr "JDF F12 9" msgid "finishing-template.jdf-f14-1" msgstr "JDF F14 1" msgid "finishing-template.jdf-f16-1" msgstr "JDF F16 1" msgid "finishing-template.jdf-f16-10" msgstr "JDF F16 10" msgid "finishing-template.jdf-f16-11" msgstr "JDF F16 11" msgid "finishing-template.jdf-f16-12" msgstr "JDF F16 12" msgid "finishing-template.jdf-f16-13" msgstr "JDF F16 13" msgid "finishing-template.jdf-f16-14" msgstr "JDF F16 14" msgid "finishing-template.jdf-f16-2" msgstr "JDF F16 2" msgid "finishing-template.jdf-f16-3" msgstr "JDF F16 3" msgid "finishing-template.jdf-f16-4" msgstr "JDF F16 4" msgid "finishing-template.jdf-f16-5" msgstr "JDF F16 5" msgid "finishing-template.jdf-f16-6" msgstr "JDF F16 6" msgid "finishing-template.jdf-f16-7" msgstr "JDF F16 7" msgid "finishing-template.jdf-f16-8" msgstr "JDF F16 8" msgid "finishing-template.jdf-f16-9" msgstr "JDF F16 9" msgid "finishing-template.jdf-f18-1" msgstr "JDF F18 1" msgid "finishing-template.jdf-f18-2" msgstr "JDF F18 2" msgid "finishing-template.jdf-f18-3" msgstr "JDF F18 3" msgid "finishing-template.jdf-f18-4" msgstr "JDF F18 4" msgid "finishing-template.jdf-f18-5" msgstr "JDF F18 5" msgid "finishing-template.jdf-f18-6" msgstr "JDF F18 6" msgid "finishing-template.jdf-f18-7" msgstr "JDF F18 7" msgid "finishing-template.jdf-f18-8" msgstr "JDF F18 8" msgid "finishing-template.jdf-f18-9" msgstr "JDF F18 9" msgid "finishing-template.jdf-f2-1" msgstr "JDF F2 1" msgid "finishing-template.jdf-f20-1" msgstr "JDF F20 1" msgid "finishing-template.jdf-f20-2" msgstr "JDF F20 2" msgid "finishing-template.jdf-f24-1" msgstr "JDF F24 1" msgid "finishing-template.jdf-f24-10" msgstr "JDF F24 10" msgid "finishing-template.jdf-f24-11" msgstr "JDF F24 11" msgid "finishing-template.jdf-f24-2" msgstr "JDF F24 2" msgid "finishing-template.jdf-f24-3" msgstr "JDF F24 3" msgid "finishing-template.jdf-f24-4" msgstr "JDF F24 4" msgid "finishing-template.jdf-f24-5" msgstr "JDF F24 5" msgid "finishing-template.jdf-f24-6" msgstr "JDF F24 6" msgid "finishing-template.jdf-f24-7" msgstr "JDF F24 7" msgid "finishing-template.jdf-f24-8" msgstr "JDF F24 8" msgid "finishing-template.jdf-f24-9" msgstr "JDF F24 9" msgid "finishing-template.jdf-f28-1" msgstr "JDF F28 1" msgid "finishing-template.jdf-f32-1" msgstr "JDF F32 1" msgid "finishing-template.jdf-f32-2" msgstr "JDF F32 2" msgid "finishing-template.jdf-f32-3" msgstr "JDF F32 3" msgid "finishing-template.jdf-f32-4" msgstr "JDF F32 4" msgid "finishing-template.jdf-f32-5" msgstr "JDF F32 5" msgid "finishing-template.jdf-f32-6" msgstr "JDF F32 6" msgid "finishing-template.jdf-f32-7" msgstr "JDF F32 7" msgid "finishing-template.jdf-f32-8" msgstr "JDF F32 8" msgid "finishing-template.jdf-f32-9" msgstr "JDF F32 9" msgid "finishing-template.jdf-f36-1" msgstr "JDF F36 1" msgid "finishing-template.jdf-f36-2" msgstr "JDF F36 2" msgid "finishing-template.jdf-f4-1" msgstr "JDF F4 1" msgid "finishing-template.jdf-f4-2" msgstr "JDF F4 2" msgid "finishing-template.jdf-f40-1" msgstr "JDF F40 1" msgid "finishing-template.jdf-f48-1" msgstr "JDF F48 1" msgid "finishing-template.jdf-f48-2" msgstr "JDF F48 2" msgid "finishing-template.jdf-f6-1" msgstr "JDF F6 1" msgid "finishing-template.jdf-f6-2" msgstr "JDF F6 2" msgid "finishing-template.jdf-f6-3" msgstr "JDF F6 3" msgid "finishing-template.jdf-f6-4" msgstr "JDF F6 4" msgid "finishing-template.jdf-f6-5" msgstr "JDF F6 5" msgid "finishing-template.jdf-f6-6" msgstr "JDF F6 6" msgid "finishing-template.jdf-f6-7" msgstr "JDF F6 7" msgid "finishing-template.jdf-f6-8" msgstr "JDF F6 8" msgid "finishing-template.jdf-f64-1" msgstr "JDF F64 1" msgid "finishing-template.jdf-f64-2" msgstr "JDF F64 2" msgid "finishing-template.jdf-f8-1" msgstr "JDF F8 1" msgid "finishing-template.jdf-f8-2" msgstr "JDF F8 2" msgid "finishing-template.jdf-f8-3" msgstr "JDF F8 3" msgid "finishing-template.jdf-f8-4" msgstr "JDF F8 4" msgid "finishing-template.jdf-f8-5" msgstr "JDF F8 5" msgid "finishing-template.jdf-f8-6" msgstr "JDF F8 6" msgid "finishing-template.jdf-f8-7" msgstr "JDF F8 7" msgid "finishing-template.jog-offset" msgstr "Jog Offset" msgid "finishing-template.laminate" msgstr "Laminate" msgid "finishing-template.punch" msgstr "Punch" msgid "finishing-template.punch-bottom-left" msgstr "Punch Bottom Left" msgid "finishing-template.punch-bottom-right" msgstr "Punch Bottom Right" msgid "finishing-template.punch-dual-bottom" msgstr "Punch Dual Bottom" msgid "finishing-template.punch-dual-left" msgstr "Punch Dual Left" msgid "finishing-template.punch-dual-right" msgstr "Punch Dual Right" msgid "finishing-template.punch-dual-top" msgstr "Punch Dual Top" msgid "finishing-template.punch-multiple-bottom" msgstr "Punch Multiple Bottom" msgid "finishing-template.punch-multiple-left" msgstr "Punch Multiple Left" msgid "finishing-template.punch-multiple-right" msgstr "Punch Multiple Right" msgid "finishing-template.punch-multiple-top" msgstr "Punch Multiple Top" msgid "finishing-template.punch-quad-bottom" msgstr "Punch Quad Bottom" msgid "finishing-template.punch-quad-left" msgstr "Punch Quad Left" msgid "finishing-template.punch-quad-right" msgstr "Punch Quad Right" msgid "finishing-template.punch-quad-top" msgstr "Punch Quad Top" msgid "finishing-template.punch-top-left" msgstr "Punch Top Left" msgid "finishing-template.punch-top-right" msgstr "Punch Top Right" msgid "finishing-template.punch-triple-bottom" msgstr "Punch Triple Bottom" msgid "finishing-template.punch-triple-left" msgstr "Punch Triple Left" msgid "finishing-template.punch-triple-right" msgstr "Punch Triple Right" msgid "finishing-template.punch-triple-top" msgstr "Punch Triple Top" msgid "finishing-template.saddle-stitch" msgstr "Saddle Stitch" msgid "finishing-template.staple" msgstr "Staple" msgid "finishing-template.staple-bottom-left" msgstr "Staple Bottom Left" msgid "finishing-template.staple-bottom-right" msgstr "Staple Bottom Right" msgid "finishing-template.staple-dual-bottom" msgstr "Staple Dual Bottom" msgid "finishing-template.staple-dual-left" msgstr "Staple Dual Left" msgid "finishing-template.staple-dual-right" msgstr "Staple Dual Right" msgid "finishing-template.staple-dual-top" msgstr "Staple Dual Top" msgid "finishing-template.staple-top-left" msgstr "Staple Top Left" msgid "finishing-template.staple-top-right" msgstr "Staple Top Right" msgid "finishing-template.staple-triple-bottom" msgstr "Staple Triple Bottom" msgid "finishing-template.staple-triple-left" msgstr "Staple Triple Left" msgid "finishing-template.staple-triple-right" msgstr "Staple Triple Right" msgid "finishing-template.staple-triple-top" msgstr "Staple Triple Top" msgid "finishing-template.trim" msgstr "Trim" msgid "finishing-template.trim-after-copies" msgstr "Trim After Copies" msgid "finishing-template.trim-after-documents" msgstr "Trim After Documents" msgid "finishing-template.trim-after-job" msgstr "Trim After Job" msgid "finishing-template.trim-after-pages" msgstr "Trim After Pages" msgid "finishings" msgstr "Finishings" msgid "finishings-col" msgstr "Finishings" msgid "finishings.10" msgstr "Fold" msgid "finishings.100" msgstr "Fold Z" msgid "finishings.101" msgstr "Fold Engineering Z" msgid "finishings.11" msgstr "Trim" msgid "finishings.12" msgstr "Bale" msgid "finishings.13" msgstr "Booklet Maker" msgid "finishings.14" msgstr "Jog Offset" msgid "finishings.15" msgstr "Coat" msgid "finishings.16" msgstr "Laminate" msgid "finishings.20" msgstr "Staple Top Left" msgid "finishings.21" msgstr "Staple Bottom Left" msgid "finishings.22" msgstr "Staple Top Right" msgid "finishings.23" msgstr "Staple Bottom Right" msgid "finishings.24" msgstr "Edge Stitch Left" msgid "finishings.25" msgstr "Edge Stitch Top" msgid "finishings.26" msgstr "Edge Stitch Right" msgid "finishings.27" msgstr "Edge Stitch Bottom" msgid "finishings.28" msgstr "Staple Dual Left" msgid "finishings.29" msgstr "Staple Dual Top" msgid "finishings.3" msgstr "None" msgid "finishings.30" msgstr "Staple Dual Right" msgid "finishings.31" msgstr "Staple Dual Bottom" msgid "finishings.32" msgstr "Staple Triple Left" msgid "finishings.33" msgstr "Staple Triple Top" msgid "finishings.34" msgstr "Staple Triple Right" msgid "finishings.35" msgstr "Staple Triple Bottom" msgid "finishings.4" msgstr "Staple" msgid "finishings.5" msgstr "Punch" msgid "finishings.50" msgstr "Bind Left" msgid "finishings.51" msgstr "Bind Top" msgid "finishings.52" msgstr "Bind Right" msgid "finishings.53" msgstr "Bind Bottom" msgid "finishings.6" msgstr "Cover" msgid "finishings.60" msgstr "Trim After Pages" msgid "finishings.61" msgstr "Trim After Documents" msgid "finishings.62" msgstr "Trim After Copies" msgid "finishings.63" msgstr "Trim After Job" msgid "finishings.7" msgstr "Bind" msgid "finishings.70" msgstr "Punch Top Left" msgid "finishings.71" msgstr "Punch Bottom Left" msgid "finishings.72" msgstr "Punch Top Right" msgid "finishings.73" msgstr "Punch Bottom Right" msgid "finishings.74" msgstr "Punch Dual Left" msgid "finishings.75" msgstr "Punch Dual Top" msgid "finishings.76" msgstr "Punch Dual Right" msgid "finishings.77" msgstr "Punch Dual Bottom" msgid "finishings.78" msgstr "Punch Triple Left" msgid "finishings.79" msgstr "Punch Triple Top" msgid "finishings.8" msgstr "Saddle Stitch" msgid "finishings.80" msgstr "Punch Triple Right" msgid "finishings.81" msgstr "Punch Triple Bottom" msgid "finishings.82" msgstr "Punch Quad Left" msgid "finishings.83" msgstr "Punch Quad Top" msgid "finishings.84" msgstr "Punch Quad Right" msgid "finishings.85" msgstr "Punch Quad Bottom" msgid "finishings.86" msgstr "Punch Multiple Left" msgid "finishings.87" msgstr "Punch Multiple Top" msgid "finishings.88" msgstr "Punch Multiple Right" msgid "finishings.89" msgstr "Punch Multiple Bottom" msgid "finishings.9" msgstr "Edge Stitch" msgid "finishings.90" msgstr "Fold Accordion" msgid "finishings.91" msgstr "Fold Double Gate" msgid "finishings.92" msgstr "Fold Gate" msgid "finishings.93" msgstr "Fold Half" msgid "finishings.94" msgstr "Fold Half Z" msgid "finishings.95" msgstr "Fold Left Gate" msgid "finishings.96" msgstr "Fold Letter" msgid "finishings.97" msgstr "Fold Parallel" msgid "finishings.98" msgstr "Fold Poster" msgid "finishings.99" msgstr "Fold Right Gate" msgid "folding" msgstr "Fold" msgid "folding-direction" msgstr "Folding Direction" msgid "folding-direction.inward" msgstr "Inward" msgid "folding-direction.outward" msgstr "Outward" msgid "folding-offset" msgstr "Fold Position" msgid "folding-reference-edge" msgstr "Folding Reference Edge" msgid "folding-reference-edge.bottom" msgstr "Bottom" msgid "folding-reference-edge.left" msgstr "Left" msgid "folding-reference-edge.right" msgstr "Right" msgid "folding-reference-edge.top" msgstr "Top" msgid "font-name-requested" msgstr "Font Name" msgid "font-size-requested" msgstr "Font Size" msgid "force-front-side" msgstr "Force Front Side" msgid "from-name" msgstr "From Name" msgid "held" msgstr "retenido" msgid "help\t\tGet help on commands." msgstr "help\t\tProporciona ayuda sobre los comandos." msgid "idle" msgstr "inactiva" msgid "imposition-template" msgstr "Imposition Template" msgid "imposition-template.none" msgstr "None" msgid "imposition-template.signature" msgstr "Signature" msgid "input-attributes" msgstr "Input Attributes" msgid "input-auto-scaling" msgstr "Scan Auto Scaling" msgid "input-auto-skew-correction" msgstr "Scan Auto Skew Correction" msgid "input-brightness" msgstr "Scan Brightness" msgid "input-color-mode" msgstr "Input Color Mode" msgid "input-color-mode.auto" msgstr "Automatic" msgid "input-color-mode.bi-level" msgstr "Bi-Level" msgid "input-color-mode.cmyk_16" msgstr "CMYK 16" msgid "input-color-mode.cmyk_8" msgstr "CMYK 8" msgid "input-color-mode.color" msgstr "Color" msgid "input-color-mode.color_8" msgstr "Color 8" msgid "input-color-mode.monochrome" msgstr "Monochrome" msgid "input-color-mode.monochrome_16" msgstr "Monochrome 16" msgid "input-color-mode.monochrome_4" msgstr "Monochrome 4" msgid "input-color-mode.monochrome_8" msgstr "Monochrome 8" msgid "input-color-mode.rgb_16" msgstr "RGB 16" msgid "input-color-mode.rgba_16" msgstr "RGBA 16" msgid "input-color-mode.rgba_8" msgstr "RGBA 8" msgid "input-content-type" msgstr "Input Content Type" msgid "input-content-type.auto" msgstr "Automatic" msgid "input-content-type.halftone" msgstr "Halftone" msgid "input-content-type.line-art" msgstr "Line Art" msgid "input-content-type.magazine" msgstr "Magazine" msgid "input-content-type.photo" msgstr "Photo" msgid "input-content-type.text" msgstr "Text" msgid "input-content-type.text-and-photo" msgstr "Text And Photo" msgid "input-contrast" msgstr "Scan Contrast" msgid "input-film-scan-mode" msgstr "Input Film Scan Mode" msgid "input-film-scan-mode.black-and-white-negative-film" msgstr "Black And White Negative Film" msgid "input-film-scan-mode.color-negative-film" msgstr "Color Negative Film" msgid "input-film-scan-mode.color-slide-film" msgstr "Color Slide Film" msgid "input-film-scan-mode.not-applicable" msgstr "Not Applicable" msgid "input-images-to-transfer" msgstr "Scan Images To Transfer" msgid "input-media" msgstr "Input Media" msgid "input-media.auto" msgstr "Automatic" msgid "input-orientation-requested" msgstr "Input Orientation" msgid "input-quality" msgstr "Input Quality" msgid "input-resolution" msgstr "Scan Resolution" msgid "input-scaling-height" msgstr "Scan Scaling Height" msgid "input-scaling-width" msgstr "Scan Scaling Width" msgid "input-scan-regions" msgstr "Scan Regions" msgid "input-sharpness" msgstr "Scan Sharpness" msgid "input-sides" msgstr "Input Sides" msgid "input-source" msgstr "Input Source" msgid "input-source.adf" msgstr "Adf" msgid "input-source.film-reader" msgstr "Film Reader" msgid "input-source.platen" msgstr "Platen" msgid "insert-after-page-number" msgstr "Insert Page Number" msgid "insert-count" msgstr "Insert Count" msgid "insert-sheet" msgstr "Insert Sheet" #, c-format msgid "ippfind: Bad regular expression: %s" msgstr "ippfind: Expresión regular incorrecta: %s" msgid "ippfind: Cannot use --and after --or." msgstr "ippfind: No se puede usar --and tras --or." #, c-format msgid "ippfind: Expected key name after %s." msgstr "ippfind: Se esperaba un nombre de clave tras %s." #, c-format msgid "ippfind: Expected port range after %s." msgstr "ippfind: Se esperaba un intervalo de puertos tras %s." #, c-format msgid "ippfind: Expected program after %s." msgstr "ippfind: Se esperaba un programa tras %s." #, c-format msgid "ippfind: Expected semi-colon after %s." msgstr "ippfind: Se esperaba un punto y coma tras %s." msgid "ippfind: Missing close brace in substitution." msgstr "ippfind: Falta la llave de cierre en la substitución." msgid "ippfind: Missing close parenthesis." msgstr "ippfind: Falta el paréntesis de cierre." msgid "ippfind: Missing expression before \"--and\"." msgstr "ippfind: Falta una expresión antes de \"--and\"." msgid "ippfind: Missing expression before \"--or\"." msgstr "ippfind: Falta una expresión antes de \"--or\"." #, c-format msgid "ippfind: Missing key name after %s." msgstr "ippfind: Falta un nombre de clave tras %s." msgid "ippfind: Missing open parenthesis." msgstr "ippfind: Falta el paréntesis de apertura." #, c-format msgid "ippfind: Missing program after %s." msgstr "ippfind: Falta un programa tras %s." #, c-format msgid "ippfind: Missing regular expression after %s." msgstr "ippfind: Falta una expresión regular tras %s." #, c-format msgid "ippfind: Missing semi-colon after %s." msgstr "ippfind: Falta un punto y coma tras %s." msgid "ippfind: Out of memory." msgstr "ippfind: Sin memoria." msgid "ippfind: Too many parenthesis." msgstr "ippfind: Demasiados paréntesis." #, c-format msgid "ippfind: Unable to browse or resolve: %s" msgstr "ippfind: No se ha podido examinar o resolver: %s" #, c-format msgid "ippfind: Unable to execute \"%s\": %s" msgstr "ippfind: No se ha podido ejecutar \"%s\": %s" #, c-format msgid "ippfind: Unable to use Bonjour: %s" msgstr "ippfind: No se ha podido usar Bonjour: %s" #, c-format msgid "ippfind: Unknown variable \"{%s}\"." msgstr "ippfind: Variable desconocida \"{%s}\"." msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." msgstr "ipptool: \"-i\" y \"-n\" no son compatibles con \"-P\" y \"-X\"." #, c-format msgid "ipptool: Bad URI - %s." msgstr "ipptool: URI - %s incorrecto." msgid "ipptool: Invalid seconds for \"-i\"." msgstr "ipptool: Número de segundos no válido para \"-i\"." msgid "ipptool: May only specify a single URI." msgstr "ipptool: Sólo se puede especificar un URI." msgid "ipptool: Missing count for \"-n\"." msgstr "ipptool: Falta el contador para \"-n\"." msgid "ipptool: Missing filename for \"-f\"." msgstr "ipptool: Falta el nombre del archivo para \"-f\"." msgid "ipptool: Missing name=value for \"-d\"." msgstr "ipptool: Falta un nombre=valor para \"-d\"." msgid "ipptool: Missing seconds for \"-i\"." msgstr "ipptool: Falta el número de segundos para \"-i\"." msgid "ipptool: URI required before test file." msgstr "ipptool: Se requiere un URI antes del archivo de prueba." #, c-format msgid "ipptool: Unknown option \"-%c\"." msgstr "ipptool: Opción \"-%c\" desconocida." msgid "job-account-id" msgstr "Job Account ID" msgid "job-account-type" msgstr "Job Account Type" msgid "job-account-type.general" msgstr "General" msgid "job-account-type.group" msgstr "Group" msgid "job-account-type.none" msgstr "None" msgid "job-accounting-output-bin" msgstr "Job Accounting Output Bin" msgid "job-accounting-sheets" msgstr "Job Accounting Sheets" msgid "job-accounting-sheets-type" msgstr "Job Accounting Sheets Type" msgid "job-accounting-sheets-type.none" msgstr "None" msgid "job-accounting-sheets-type.standard" msgstr "Standard" msgid "job-accounting-user-id" msgstr "Job Accounting User ID" msgid "job-collation-type" msgstr "Job Collation Type" msgid "job-collation-type.3" msgstr "Uncollated Sheets" msgid "job-collation-type.4" msgstr "Collated Documents" msgid "job-collation-type.5" msgstr "Uncollated Documents" msgid "job-copies" msgstr "Job Copies" msgid "job-cover-back" msgstr "Job Cover Back" msgid "job-cover-front" msgstr "Job Cover Front" msgid "job-delay-output-until" msgstr "Job Delay Output Until" msgid "job-delay-output-until-time" msgstr "Job Delay Output Until Time" msgid "job-delay-output-until.day-time" msgstr "Day Time" msgid "job-delay-output-until.evening" msgstr "Evening" msgid "job-delay-output-until.indefinite" msgstr "Indefinite" msgid "job-delay-output-until.night" msgstr "Night" msgid "job-delay-output-until.no-delay-output" msgstr "No Delay Output" msgid "job-delay-output-until.second-shift" msgstr "Second Shift" msgid "job-delay-output-until.third-shift" msgstr "Third Shift" msgid "job-delay-output-until.weekend" msgstr "Weekend" msgid "job-error-action" msgstr "Job Error Action" msgid "job-error-action.abort-job" msgstr "Abort Job" msgid "job-error-action.cancel-job" msgstr "Cancel Job" msgid "job-error-action.continue-job" msgstr "Continue Job" msgid "job-error-action.suspend-job" msgstr "Suspend Job" msgid "job-error-sheet" msgstr "Job Error Sheet" msgid "job-error-sheet-type" msgstr "Job Error Sheet Type" msgid "job-error-sheet-type.none" msgstr "None" msgid "job-error-sheet-type.standard" msgstr "Standard" msgid "job-error-sheet-when" msgstr "Job Error Sheet When" msgid "job-error-sheet-when.always" msgstr "Always" msgid "job-error-sheet-when.on-error" msgstr "On Error" msgid "job-finishings" msgstr "Job Finishings" msgid "job-hold-until" msgstr "Hold Until" msgid "job-hold-until-time" msgstr "Job Hold Until Time" msgid "job-hold-until.day-time" msgstr "Day Time" msgid "job-hold-until.evening" msgstr "Evening" msgid "job-hold-until.indefinite" msgstr "Released" msgid "job-hold-until.night" msgstr "Night" msgid "job-hold-until.no-hold" msgstr "No Hold" msgid "job-hold-until.second-shift" msgstr "Second Shift" msgid "job-hold-until.third-shift" msgstr "Third Shift" msgid "job-hold-until.weekend" msgstr "Weekend" msgid "job-mandatory-attributes" msgstr "Job Mandatory Attributes" msgid "job-name" msgstr "Job Name" msgid "job-phone-number" msgstr "Job Phone Number" msgid "job-printer-uri attribute missing." msgstr "Falta el atributo job-printer-uri." msgid "job-priority" msgstr "Job Priority" msgid "job-recipient-name" msgstr "Job Recipient Name" msgid "job-save-disposition" msgstr "Job Save Disposition" msgid "job-sheet-message" msgstr "Job Sheet Message" msgid "job-sheets" msgstr "Banner Page" msgid "job-sheets-col" msgstr "Banner Page" msgid "job-sheets.first-print-stream-page" msgstr "First Print Stream Page" msgid "job-sheets.job-both-sheet" msgstr "Start and End Sheets" msgid "job-sheets.job-end-sheet" msgstr "End Sheet" msgid "job-sheets.job-start-sheet" msgstr "Start Sheet" msgid "job-sheets.none" msgstr "None" msgid "job-sheets.standard" msgstr "Standard" msgid "job-state" msgstr "Job State" msgid "job-state-message" msgstr "Job State Message" msgid "job-state-reasons" msgstr "Detailed Job State" msgid "job-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "job-state-reasons.account-authorization-failed" msgstr "Account Authorization Failed" msgid "job-state-reasons.account-closed" msgstr "Account Closed" msgid "job-state-reasons.account-info-needed" msgstr "Account Info Needed" msgid "job-state-reasons.account-limit-reached" msgstr "Account Limit Reached" msgid "job-state-reasons.compression-error" msgstr "Compression Error" msgid "job-state-reasons.conflicting-attributes" msgstr "Conflicting Attributes" msgid "job-state-reasons.connected-to-destination" msgstr "Connected To Destination" msgid "job-state-reasons.connecting-to-destination" msgstr "Connecting To Destination" msgid "job-state-reasons.destination-uri-failed" msgstr "Destination Uri Failed" msgid "job-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "job-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "job-state-reasons.document-access-error" msgstr "Document Access Error" msgid "job-state-reasons.document-format-error" msgstr "Document Format Error" msgid "job-state-reasons.document-password-error" msgstr "Document Password Error" msgid "job-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "job-state-reasons.document-security-error" msgstr "Document Security Error" msgid "job-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "job-state-reasons.errors-detected" msgstr "Errors Detected" msgid "job-state-reasons.job-canceled-at-device" msgstr "Job Canceled At Device" msgid "job-state-reasons.job-canceled-by-operator" msgstr "Job Canceled By Operator" msgid "job-state-reasons.job-canceled-by-user" msgstr "Job Canceled By User" msgid "job-state-reasons.job-completed-successfully" msgstr "Job Completed Successfully" msgid "job-state-reasons.job-completed-with-errors" msgstr "Job Completed With Errors" msgid "job-state-reasons.job-completed-with-warnings" msgstr "Job Completed With Warnings" msgid "job-state-reasons.job-data-insufficient" msgstr "Job Data Insufficient" msgid "job-state-reasons.job-delay-output-until-specified" msgstr "Job Delay Output Until Specified" msgid "job-state-reasons.job-digital-signature-wait" msgstr "Job Digital Signature Wait" msgid "job-state-reasons.job-fetchable" msgstr "Job Fetchable" msgid "job-state-reasons.job-held-for-review" msgstr "Job Held For Review" msgid "job-state-reasons.job-hold-until-specified" msgstr "Job Hold Until Specified" msgid "job-state-reasons.job-incoming" msgstr "Job Incoming" msgid "job-state-reasons.job-interpreting" msgstr "Job Interpreting" msgid "job-state-reasons.job-outgoing" msgstr "Job Outgoing" msgid "job-state-reasons.job-password-wait" msgstr "Job Password Wait" msgid "job-state-reasons.job-printed-successfully" msgstr "Job Printed Successfully" msgid "job-state-reasons.job-printed-with-errors" msgstr "Job Printed With Errors" msgid "job-state-reasons.job-printed-with-warnings" msgstr "Job Printed With Warnings" msgid "job-state-reasons.job-printing" msgstr "Job Printing" msgid "job-state-reasons.job-queued" msgstr "Job Queued" msgid "job-state-reasons.job-queued-for-marker" msgstr "Job Queued For Marker" msgid "job-state-reasons.job-release-wait" msgstr "Job Release Wait" msgid "job-state-reasons.job-restartable" msgstr "Job Restartable" msgid "job-state-reasons.job-resuming" msgstr "Job Resuming" msgid "job-state-reasons.job-saved-successfully" msgstr "Job Saved Successfully" msgid "job-state-reasons.job-saved-with-errors" msgstr "Job Saved With Errors" msgid "job-state-reasons.job-saved-with-warnings" msgstr "Job Saved With Warnings" msgid "job-state-reasons.job-saving" msgstr "Job Saving" msgid "job-state-reasons.job-spooling" msgstr "Job Spooling" msgid "job-state-reasons.job-streaming" msgstr "Job Streaming" msgid "job-state-reasons.job-suspended" msgstr "Job Suspended" msgid "job-state-reasons.job-suspended-by-operator" msgstr "Job Suspended By Operator" msgid "job-state-reasons.job-suspended-by-system" msgstr "Job Suspended By System" msgid "job-state-reasons.job-suspended-by-user" msgstr "Job Suspended By User" msgid "job-state-reasons.job-suspending" msgstr "Job Suspending" msgid "job-state-reasons.job-transferring" msgstr "Job Transferring" msgid "job-state-reasons.job-transforming" msgstr "Job Transforming" msgid "job-state-reasons.none" msgstr "None" msgid "job-state-reasons.printer-stopped" msgstr "Printer Stopped" msgid "job-state-reasons.printer-stopped-partly" msgstr "Printer Stopped Partly" msgid "job-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "job-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "job-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "job-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "job-state-reasons.service-off-line" msgstr "Service Off Line" msgid "job-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "job-state-reasons.unsupported-attributes-or-values" msgstr "Unsupported Attributes Or Values" msgid "job-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "job-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "job-state-reasons.waiting-for-user-action" msgstr "Waiting For User Action" msgid "job-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "job-state.3" msgstr "Pending" msgid "job-state.4" msgstr "Pending Held" msgid "job-state.5" msgstr "Processing" msgid "job-state.6" msgstr "Processing Stopped" msgid "job-state.7" msgstr "Canceled" msgid "job-state.8" msgstr "Aborted" msgid "job-state.9" msgstr "Completed" msgid "laminating" msgstr "Laminate Pages" msgid "laminating-sides" msgstr "Laminating Sides" msgid "laminating-sides.back" msgstr "Back" msgid "laminating-sides.both" msgstr "Both" msgid "laminating-sides.front" msgstr "Front" msgid "laminating-type" msgstr "Laminating Type" msgid "laminating-type.archival" msgstr "Archival" msgid "laminating-type.glossy" msgstr "Glossy" msgid "laminating-type.high-gloss" msgstr "High Gloss" msgid "laminating-type.matte" msgstr "Matte" msgid "laminating-type.semi-gloss" msgstr "Semi-Gloss" msgid "laminating-type.translucent" msgstr "Translucent" msgid "logo" msgstr "Logo" msgid "lpadmin: Class name can only contain printable characters." msgstr "" "lpadmin: El nombre de la clase sólo puede contener caracteres imprimibles." #, c-format msgid "lpadmin: Expected PPD after \"-%c\" option." msgstr "lpadmin: Se esperaba un PPD tras la opción \"-%c\"." msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option." msgstr "lpadmin: Se esperaba allow/deny:lista_usuarios tras la opción \"-u\"." msgid "lpadmin: Expected class after \"-r\" option." msgstr "lpadmin: Se esperaba una clase tras la opción \"-r\"." msgid "lpadmin: Expected class name after \"-c\" option." msgstr "lpadmin: Se esperaba un nombre de clase tras la opción \"-c\"." msgid "lpadmin: Expected description after \"-D\" option." msgstr "lpadmin: Se esperaba una descripción tras la opción \"-D\"." msgid "lpadmin: Expected device URI after \"-v\" option." msgstr "lpadmin: Se esperaba un URI de dispositivo tras la opción \"-v\"." msgid "lpadmin: Expected file type(s) after \"-I\" option." msgstr "lpadmin: Se esperaba(n) tipo(s) de archivo(s) tras la opción \"-l\"." msgid "lpadmin: Expected hostname after \"-h\" option." msgstr "lpadmin: Se esperaba un nombre de equipo tras la opción \"-h\"." msgid "lpadmin: Expected location after \"-L\" option." msgstr "lpadmin: Se esperaba una ubicación tras la opción \"-L\"." msgid "lpadmin: Expected model after \"-m\" option." msgstr "lpadmin: Se esperaba un modelo tras la opción \"-m\"." msgid "lpadmin: Expected name after \"-R\" option." msgstr "lpadmin: Se esperaba un nombre tras la opción \"-R\"." msgid "lpadmin: Expected name=value after \"-o\" option." msgstr "lpadmin: Se esperaba un nombre=valor tras la opción \"-o\"." msgid "lpadmin: Expected printer after \"-p\" option." msgstr "lpadmin: Se esperaba una impresora tras la opción \"-p\"." msgid "lpadmin: Expected printer name after \"-d\" option." msgstr "lpadmin: Se esperaba un nombre de impresora tras la opción \"-d\"." msgid "lpadmin: Expected printer or class after \"-x\" option." msgstr "lpadmin: Se esperaba una impresora o clase tras la opción \"-x\"." msgid "lpadmin: No member names were seen." msgstr "lpadmin: No se han visto nombres de miembros." #, c-format msgid "lpadmin: Printer %s is already a member of class %s." msgstr "lpadmin: La impresora %s ya es miembro de la clase %s." #, c-format msgid "lpadmin: Printer %s is not a member of class %s." msgstr "lpadmin: La impresora %s no es miembro de la clase %s." msgid "lpadmin: Printer name can only contain printable characters." msgstr "" "lpadmin: El nombre de la impresora sólo puede contener caracteres " "imprimibles." msgid "" "lpadmin: Raw queues are deprecated and will stop working in a future version " "of CUPS." msgstr "" msgid "" "lpadmin: System V interface scripts are no longer supported for security " "reasons." msgstr "" msgid "" "lpadmin: Unable to add a printer to the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: No se ha podido añadir una impresora a la clase:\n" " Debe especificar un nombre de impresora primero." #, c-format msgid "lpadmin: Unable to connect to server: %s" msgstr "lpadmin: No se ha podido conectar al servidor: %s" msgid "lpadmin: Unable to create temporary file" msgstr "lpadmin: No se ha podido crear el archivo temporal" msgid "" "lpadmin: Unable to delete option:\n" " You must specify a printer name first." msgstr "" "lpadmin: No se ha podido borrar la opción:\n" " Debe especificar un nombre de impresora primero." #, c-format msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d." msgstr "" "lpadmin: No se ha podido abrir el archivo PPD: \"%s\": %s en la línea %d." #, c-format msgid "lpadmin: Unable to open PPD file \"%s\" - %s" msgstr "lpadmin: No se ha podido abrir el archivo PPD \"%s\" - %s" msgid "" "lpadmin: Unable to remove a printer from the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: No se ha podido quitar una impresora de la clase:\n" " Debe especificar un nombre de impresora primero." msgid "" "lpadmin: Unable to set the printer options:\n" " You must specify a printer name first." msgstr "" "lpadmin: No se han podido establecer las opciones de la impresora:\n" " Debe especificar un nombre de impresora primero." #, c-format msgid "lpadmin: Unknown allow/deny option \"%s\"." msgstr "lpadmin: Opción allow/deny desconocida \"%s\"." #, c-format msgid "lpadmin: Unknown argument \"%s\"." msgstr "lpadmin: Argumento \"%s\" desconocido." #, c-format msgid "lpadmin: Unknown option \"%c\"." msgstr "lpadmin: Opción \"%c\" desconocida." msgid "lpadmin: Use the 'everywhere' model for shared printers." msgstr "" msgid "lpadmin: Warning - content type list ignored." msgstr "lpadmin: Advertencia - lista de tipo de contenido no tenida en cuenta." msgid "lpc> " msgstr "lpc> " msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"." msgstr "" "lpinfo: Se esperaba una cadena ID de dispositivo 1284 tras \"--device-id\"." msgid "lpinfo: Expected language after \"--language\"." msgstr "lpinfo: Se esperaba un idioma tras \"--language\"." msgid "lpinfo: Expected make and model after \"--make-and-model\"." msgstr "lpinfo: Se esperaba marca y modelo tras \"--make-and-model\"." msgid "lpinfo: Expected product string after \"--product\"." msgstr "lpinfo: Se esperaba una cadena de producto tras \"--product\"." msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"." msgstr "lpinfo: Se esperaba una lista de esquemas tras \"--exclude-schemes\"." msgid "lpinfo: Expected scheme list after \"--include-schemes\"." msgstr "lpinfo: Se esperaba una lista de esquemas tras \"--include-schemes\"." msgid "lpinfo: Expected timeout after \"--timeout\"." msgstr "lpinfo: Se esperaba un tiempo de espera tras \"--timeout\"." #, c-format msgid "lpmove: Unable to connect to server: %s" msgstr "lpmove: No se ha podido conectar al servidor: %s" #, c-format msgid "lpmove: Unknown argument \"%s\"." msgstr "lpmove: Argumento \"%s\" desconocido." msgid "lpoptions: No printers." msgstr "lpoptions: No hay impresoras." #, c-format msgid "lpoptions: Unable to add printer or instance: %s" msgstr "lpoptions: No se ha podido añadir la impresora o la instancia: %s" #, c-format msgid "lpoptions: Unable to get PPD file for %s: %s" msgstr "lpoptions: No se ha podido obtener el archivo PPD para %s: %s" #, c-format msgid "lpoptions: Unable to open PPD file for %s." msgstr "lpoptions: No se ha podido abrir el archivo PPD para %s." msgid "lpoptions: Unknown printer or class." msgstr "lpoptions: Impresora o clase desconocida." #, c-format msgid "" "lpstat: error - %s environment variable names non-existent destination \"%s" "\"." msgstr "" "lpstat: error - Los nombre de variable de entorno %s no existen en el " "destino \"%s\"." msgid "material-amount" msgstr "Amount of Material" msgid "material-amount-units" msgstr "Material Amount Units" msgid "material-amount-units.g" msgstr "G" msgid "material-amount-units.kg" msgstr "Kg" msgid "material-amount-units.l" msgstr "L" msgid "material-amount-units.m" msgstr "M" msgid "material-amount-units.ml" msgstr "Ml" msgid "material-amount-units.mm" msgstr "Mm" msgid "material-color" msgstr "Material Color" msgid "material-diameter" msgstr "Material Diameter" msgid "material-diameter-tolerance" msgstr "Material Diameter Tolerance" msgid "material-fill-density" msgstr "Material Fill Density" msgid "material-name" msgstr "Material Name" msgid "material-purpose" msgstr "Material Purpose" msgid "material-purpose.all" msgstr "All" msgid "material-purpose.base" msgstr "Base" msgid "material-purpose.in-fill" msgstr "In Fill" msgid "material-purpose.shell" msgstr "Shell" msgid "material-purpose.support" msgstr "Support" msgid "material-rate" msgstr "Feed Rate" msgid "material-rate-units" msgstr "Material Rate Units" msgid "material-rate-units.mg_second" msgstr "Mg Second" msgid "material-rate-units.ml_second" msgstr "Ml Second" msgid "material-rate-units.mm_second" msgstr "Mm Second" msgid "material-shell-thickness" msgstr "Material Shell Thickness" msgid "material-temperature" msgstr "Material Temperature" msgid "material-type" msgstr "Material Type" msgid "material-type.abs" msgstr "Abs" msgid "material-type.abs-carbon-fiber" msgstr "Abs Carbon Fiber" msgid "material-type.abs-carbon-nanotube" msgstr "Abs Carbon Nanotube" msgid "material-type.chocolate" msgstr "Chocolate" msgid "material-type.gold" msgstr "Gold" msgid "material-type.nylon" msgstr "Nylon" msgid "material-type.pet" msgstr "Pet" msgid "material-type.photopolymer" msgstr "Photopolymer" msgid "material-type.pla" msgstr "Pla" msgid "material-type.pla-conductive" msgstr "Pla Conductive" msgid "material-type.pla-flexible" msgstr "Pla Flexible" msgid "material-type.pla-magnetic" msgstr "Pla Magnetic" msgid "material-type.pla-steel" msgstr "Pla Steel" msgid "material-type.pla-stone" msgstr "Pla Stone" msgid "material-type.pla-wood" msgstr "Pla Wood" msgid "material-type.polycarbonate" msgstr "Polycarbonate" msgid "material-type.pva-dissolvable" msgstr "Dissolvable PVA" msgid "material-type.silver" msgstr "Silver" msgid "material-type.titanium" msgstr "Titanium" msgid "material-type.wax" msgstr "Wax" msgid "materials-col" msgstr "Materials" msgid "media" msgstr "Media" msgid "media-back-coating" msgstr "Media Back Coating" msgid "media-back-coating.glossy" msgstr "Glossy" msgid "media-back-coating.high-gloss" msgstr "High Gloss" msgid "media-back-coating.matte" msgstr "Matte" msgid "media-back-coating.none" msgstr "None" msgid "media-back-coating.satin" msgstr "Satin" msgid "media-back-coating.semi-gloss" msgstr "Semi-Gloss" msgid "media-bottom-margin" msgstr "Media Bottom Margin" msgid "media-col" msgstr "Media" msgid "media-color" msgstr "Media Color" msgid "media-color.black" msgstr "Black" msgid "media-color.blue" msgstr "Blue" msgid "media-color.brown" msgstr "Brown" msgid "media-color.buff" msgstr "Buff" msgid "media-color.clear-black" msgstr "Clear Black" msgid "media-color.clear-blue" msgstr "Clear Blue" msgid "media-color.clear-brown" msgstr "Clear Brown" msgid "media-color.clear-buff" msgstr "Clear Buff" msgid "media-color.clear-cyan" msgstr "Clear Cyan" msgid "media-color.clear-gold" msgstr "Clear Gold" msgid "media-color.clear-goldenrod" msgstr "Clear Goldenrod" msgid "media-color.clear-gray" msgstr "Clear Gray" msgid "media-color.clear-green" msgstr "Clear Green" msgid "media-color.clear-ivory" msgstr "Clear Ivory" msgid "media-color.clear-magenta" msgstr "Clear Magenta" msgid "media-color.clear-multi-color" msgstr "Clear Multi Color" msgid "media-color.clear-mustard" msgstr "Clear Mustard" msgid "media-color.clear-orange" msgstr "Clear Orange" msgid "media-color.clear-pink" msgstr "Clear Pink" msgid "media-color.clear-red" msgstr "Clear Red" msgid "media-color.clear-silver" msgstr "Clear Silver" msgid "media-color.clear-turquoise" msgstr "Clear Turquoise" msgid "media-color.clear-violet" msgstr "Clear Violet" msgid "media-color.clear-white" msgstr "Clear White" msgid "media-color.clear-yellow" msgstr "Clear Yellow" msgid "media-color.cyan" msgstr "Cyan" msgid "media-color.dark-blue" msgstr "Dark Blue" msgid "media-color.dark-brown" msgstr "Dark Brown" msgid "media-color.dark-buff" msgstr "Dark Buff" msgid "media-color.dark-cyan" msgstr "Dark Cyan" msgid "media-color.dark-gold" msgstr "Dark Gold" msgid "media-color.dark-goldenrod" msgstr "Dark Goldenrod" msgid "media-color.dark-gray" msgstr "Dark Gray" msgid "media-color.dark-green" msgstr "Dark Green" msgid "media-color.dark-ivory" msgstr "Dark Ivory" msgid "media-color.dark-magenta" msgstr "Dark Magenta" msgid "media-color.dark-mustard" msgstr "Dark Mustard" msgid "media-color.dark-orange" msgstr "Dark Orange" msgid "media-color.dark-pink" msgstr "Dark Pink" msgid "media-color.dark-red" msgstr "Dark Red" msgid "media-color.dark-silver" msgstr "Dark Silver" msgid "media-color.dark-turquoise" msgstr "Dark Turquoise" msgid "media-color.dark-violet" msgstr "Dark Violet" msgid "media-color.dark-yellow" msgstr "Dark Yellow" msgid "media-color.gold" msgstr "Gold" msgid "media-color.goldenrod" msgstr "Goldenrod" msgid "media-color.gray" msgstr "Gray" msgid "media-color.green" msgstr "Green" msgid "media-color.ivory" msgstr "Ivory" msgid "media-color.light-black" msgstr "Light Black" msgid "media-color.light-blue" msgstr "Light Blue" msgid "media-color.light-brown" msgstr "Light Brown" msgid "media-color.light-buff" msgstr "Light Buff" msgid "media-color.light-cyan" msgstr "Light Cyan" msgid "media-color.light-gold" msgstr "Light Gold" msgid "media-color.light-goldenrod" msgstr "Light Goldenrod" msgid "media-color.light-gray" msgstr "Light Gray" msgid "media-color.light-green" msgstr "Light Green" msgid "media-color.light-ivory" msgstr "Light Ivory" msgid "media-color.light-magenta" msgstr "Light Magenta" msgid "media-color.light-mustard" msgstr "Light Mustard" msgid "media-color.light-orange" msgstr "Light Orange" msgid "media-color.light-pink" msgstr "Light Pink" msgid "media-color.light-red" msgstr "Light Red" msgid "media-color.light-silver" msgstr "Light Silver" msgid "media-color.light-turquoise" msgstr "Light Turquoise" msgid "media-color.light-violet" msgstr "Light Violet" msgid "media-color.light-yellow" msgstr "Light Yellow" msgid "media-color.magenta" msgstr "Magenta" msgid "media-color.multi-color" msgstr "Multi-Color" msgid "media-color.mustard" msgstr "Mustard" msgid "media-color.no-color" msgstr "No Color" msgid "media-color.orange" msgstr "Orange" msgid "media-color.pink" msgstr "Pink" msgid "media-color.red" msgstr "Red" msgid "media-color.silver" msgstr "Silver" msgid "media-color.turquoise" msgstr "Turquoise" msgid "media-color.violet" msgstr "Violet" msgid "media-color.white" msgstr "White" msgid "media-color.yellow" msgstr "Yellow" msgid "media-front-coating" msgstr "Media Front Coating" msgid "media-grain" msgstr "Media Grain" msgid "media-grain.x-direction" msgstr "Cross-Feed Direction" msgid "media-grain.y-direction" msgstr "Feed Direction" msgid "media-hole-count" msgstr "Media Hole Count" msgid "media-info" msgstr "Media Info" msgid "media-input-tray-check" msgstr "Media Input Tray Check" msgid "media-left-margin" msgstr "Media Left Margin" msgid "media-pre-printed" msgstr "Media Preprinted" msgid "media-pre-printed.blank" msgstr "Blank" msgid "media-pre-printed.letter-head" msgstr "Letterhead" msgid "media-pre-printed.pre-printed" msgstr "Preprinted" msgid "media-recycled" msgstr "Media Recycled" msgid "media-recycled.none" msgstr "None" msgid "media-recycled.standard" msgstr "Standard" msgid "media-right-margin" msgstr "Media Right Margin" msgid "media-size" msgstr "Media Dimensions" msgid "media-size-name" msgstr "Media Name" msgid "media-source" msgstr "Media Source" msgid "media-source.alternate" msgstr "Alternate" msgid "media-source.alternate-roll" msgstr "Alternate Roll" msgid "media-source.auto" msgstr "Automatic" msgid "media-source.bottom" msgstr "Bottom" msgid "media-source.by-pass-tray" msgstr "By Pass Tray" msgid "media-source.center" msgstr "Center" msgid "media-source.disc" msgstr "Disc" msgid "media-source.envelope" msgstr "Envelope" msgid "media-source.hagaki" msgstr "Hagaki" msgid "media-source.large-capacity" msgstr "Large Capacity" msgid "media-source.left" msgstr "Left" msgid "media-source.main" msgstr "Main" msgid "media-source.main-roll" msgstr "Main Roll" msgid "media-source.manual" msgstr "Manual" msgid "media-source.middle" msgstr "Middle" msgid "media-source.photo" msgstr "Photo" msgid "media-source.rear" msgstr "Rear" msgid "media-source.right" msgstr "Right" msgid "media-source.roll-1" msgstr "Roll 1" msgid "media-source.roll-10" msgstr "Roll 10" msgid "media-source.roll-2" msgstr "Roll 2" msgid "media-source.roll-3" msgstr "Roll 3" msgid "media-source.roll-4" msgstr "Roll 4" msgid "media-source.roll-5" msgstr "Roll 5" msgid "media-source.roll-6" msgstr "Roll 6" msgid "media-source.roll-7" msgstr "Roll 7" msgid "media-source.roll-8" msgstr "Roll 8" msgid "media-source.roll-9" msgstr "Roll 9" msgid "media-source.side" msgstr "Side" msgid "media-source.top" msgstr "Top" msgid "media-source.tray-1" msgstr "Tray 1" msgid "media-source.tray-10" msgstr "Tray 10" msgid "media-source.tray-11" msgstr "Tray 11" msgid "media-source.tray-12" msgstr "Tray 12" msgid "media-source.tray-13" msgstr "Tray 13" msgid "media-source.tray-14" msgstr "Tray 14" msgid "media-source.tray-15" msgstr "Tray 15" msgid "media-source.tray-16" msgstr "Tray 16" msgid "media-source.tray-17" msgstr "Tray 17" msgid "media-source.tray-18" msgstr "Tray 18" msgid "media-source.tray-19" msgstr "Tray 19" msgid "media-source.tray-2" msgstr "Tray 2" msgid "media-source.tray-20" msgstr "Tray 20" msgid "media-source.tray-3" msgstr "Tray 3" msgid "media-source.tray-4" msgstr "Tray 4" msgid "media-source.tray-5" msgstr "Tray 5" msgid "media-source.tray-6" msgstr "Tray 6" msgid "media-source.tray-7" msgstr "Tray 7" msgid "media-source.tray-8" msgstr "Tray 8" msgid "media-source.tray-9" msgstr "Tray 9" msgid "media-thickness" msgstr "Media Thickness" msgid "media-tooth" msgstr "Media Tooth" msgid "media-tooth.antique" msgstr "Antique" msgid "media-tooth.calendared" msgstr "Calendared" msgid "media-tooth.coarse" msgstr "Coarse" msgid "media-tooth.fine" msgstr "Fine" msgid "media-tooth.linen" msgstr "Linen" msgid "media-tooth.medium" msgstr "Medium" msgid "media-tooth.smooth" msgstr "Smooth" msgid "media-tooth.stipple" msgstr "Stipple" msgid "media-tooth.uncalendared" msgstr "Uncalendared" msgid "media-tooth.vellum" msgstr "Vellum" msgid "media-top-margin" msgstr "Media Top Margin" msgid "media-type" msgstr "Media Type" msgid "media-type.aluminum" msgstr "Aluminum" msgid "media-type.auto" msgstr "Automatic" msgid "media-type.back-print-film" msgstr "Back Print Film" msgid "media-type.cardboard" msgstr "Cardboard" msgid "media-type.cardstock" msgstr "Cardstock" msgid "media-type.cd" msgstr "CD" msgid "media-type.com.hp.advanced-photo" msgstr "Advanced Photo Paper" msgid "media-type.com.hp.brochure-glossy" msgstr "Glossy Brochure Paper" msgid "media-type.com.hp.brochure-matte" msgstr "Matte Brochure Paper" msgid "media-type.com.hp.cover-matte" msgstr "Matte Cover Paper" msgid "media-type.com.hp.ecosmart-lite" msgstr "Office Recycled Paper" msgid "media-type.com.hp.everyday-glossy" msgstr "Everyday Glossy Photo Paper" msgid "media-type.com.hp.everyday-matte" msgstr "Everyday Matte Paper" msgid "media-type.com.hp.extra-heavy" msgstr "Extra Heavyweight Paper" msgid "media-type.com.hp.intermediate" msgstr "Multipurpose Paper" msgid "media-type.com.hp.mid-weight" msgstr "Mid-Weight Paper" msgid "media-type.com.hp.premium-inkjet" msgstr "Premium Inkjet Paper" msgid "media-type.com.hp.premium-photo" msgstr "Premium Photo Glossy Paper" msgid "media-type.com.hp.premium-presentation-matte" msgstr "Premium Presentation Matte Paper" msgid "media-type.continuous" msgstr "Continuous" msgid "media-type.continuous-long" msgstr "Continuous Long" msgid "media-type.continuous-short" msgstr "Continuous Short" msgid "media-type.corrugated-board" msgstr "Corrugated Board" msgid "media-type.disc" msgstr "Optical Disc" msgid "media-type.disc-glossy" msgstr "Glossy Optical Disc" msgid "media-type.disc-high-gloss" msgstr "High Gloss Optical Disc" msgid "media-type.disc-matte" msgstr "Matte Optical Disc" msgid "media-type.disc-satin" msgstr "Satin Optical Disc" msgid "media-type.disc-semi-gloss" msgstr "Semi-Gloss Optical Disc" msgid "media-type.double-wall" msgstr "Double Wall" msgid "media-type.dry-film" msgstr "Dry Film" msgid "media-type.dvd" msgstr "DVD" msgid "media-type.embossing-foil" msgstr "Embossing Foil" msgid "media-type.end-board" msgstr "End Board" msgid "media-type.envelope" msgstr "Envelope" msgid "media-type.envelope-archival" msgstr "Archival Envelope" msgid "media-type.envelope-bond" msgstr "Bond Envelope" msgid "media-type.envelope-coated" msgstr "Coated Envelope" msgid "media-type.envelope-cotton" msgstr "Cotton Envelope" msgid "media-type.envelope-fine" msgstr "Fine Envelope" msgid "media-type.envelope-heavyweight" msgstr "Heavyweight Envelope" msgid "media-type.envelope-inkjet" msgstr "Inkjet Envelope" msgid "media-type.envelope-lightweight" msgstr "Lightweight Envelope" msgid "media-type.envelope-plain" msgstr "Plain Envelope" msgid "media-type.envelope-preprinted" msgstr "Preprinted Envelope" msgid "media-type.envelope-window" msgstr "Windowed Envelope" msgid "media-type.fabric" msgstr "Fabric" msgid "media-type.fabric-archival" msgstr "Archival Fabric" msgid "media-type.fabric-glossy" msgstr "Glossy Fabric" msgid "media-type.fabric-high-gloss" msgstr "High Gloss Fabric" msgid "media-type.fabric-matte" msgstr "Matte Fabric" msgid "media-type.fabric-semi-gloss" msgstr "Semi-Gloss Fabric" msgid "media-type.fabric-waterproof" msgstr "Waterproof Fabric" msgid "media-type.film" msgstr "Film" msgid "media-type.flexo-base" msgstr "Flexo Base" msgid "media-type.flexo-photo-polymer" msgstr "Flexo Photo Polymer" msgid "media-type.flute" msgstr "Flute" msgid "media-type.foil" msgstr "Foil" msgid "media-type.full-cut-tabs" msgstr "Full Cut Tabs" msgid "media-type.glass" msgstr "Glass" msgid "media-type.glass-colored" msgstr "Glass Colored" msgid "media-type.glass-opaque" msgstr "Glass Opaque" msgid "media-type.glass-surfaced" msgstr "Glass Surfaced" msgid "media-type.glass-textured" msgstr "Glass Textured" msgid "media-type.gravure-cylinder" msgstr "Gravure Cylinder" msgid "media-type.image-setter-paper" msgstr "Image Setter Paper" msgid "media-type.imaging-cylinder" msgstr "Imaging Cylinder" msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon-photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon_photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.labels" msgstr "Labels" msgid "media-type.labels-colored" msgstr "Colored Labels" msgid "media-type.labels-glossy" msgstr "Glossy Labels" msgid "media-type.labels-high-gloss" msgstr "High Gloss Labels" msgid "media-type.labels-inkjet" msgstr "Inkjet Labels" msgid "media-type.labels-matte" msgstr "Matte Labels" msgid "media-type.labels-permanent" msgstr "Permanent Labels" msgid "media-type.labels-satin" msgstr "Satin Labels" msgid "media-type.labels-security" msgstr "Security Labels" msgid "media-type.labels-semi-gloss" msgstr "Semi-Gloss Labels" msgid "media-type.laminating-foil" msgstr "Laminating Foil" msgid "media-type.letterhead" msgstr "Letterhead" msgid "media-type.metal" msgstr "Metal" msgid "media-type.metal-glossy" msgstr "Metal Glossy" msgid "media-type.metal-high-gloss" msgstr "Metal High Gloss" msgid "media-type.metal-matte" msgstr "Metal Matte" msgid "media-type.metal-satin" msgstr "Metal Satin" msgid "media-type.metal-semi-gloss" msgstr "Metal Semi Gloss" msgid "media-type.mounting-tape" msgstr "Mounting Tape" msgid "media-type.multi-layer" msgstr "Multi Layer" msgid "media-type.multi-part-form" msgstr "Multi Part Form" msgid "media-type.other" msgstr "Other" msgid "media-type.paper" msgstr "Paper" msgid "media-type.photographic" msgstr "Photo Paper" msgid "media-type.photographic-archival" msgstr "Photographic Archival" msgid "media-type.photographic-film" msgstr "Photo Film" msgid "media-type.photographic-glossy" msgstr "Glossy Photo Paper" msgid "media-type.photographic-high-gloss" msgstr "High Gloss Photo Paper" msgid "media-type.photographic-matte" msgstr "Matte Photo Paper" msgid "media-type.photographic-satin" msgstr "Satin Photo Paper" msgid "media-type.photographic-semi-gloss" msgstr "Semi-Gloss Photo Paper" msgid "media-type.plastic" msgstr "Plastic" msgid "media-type.plastic-archival" msgstr "Plastic Archival" msgid "media-type.plastic-colored" msgstr "Plastic Colored" msgid "media-type.plastic-glossy" msgstr "Plastic Glossy" msgid "media-type.plastic-high-gloss" msgstr "Plastic High Gloss" msgid "media-type.plastic-matte" msgstr "Plastic Matte" msgid "media-type.plastic-satin" msgstr "Plastic Satin" msgid "media-type.plastic-semi-gloss" msgstr "Plastic Semi Gloss" msgid "media-type.plate" msgstr "Plate" msgid "media-type.polyester" msgstr "Polyester" msgid "media-type.pre-cut-tabs" msgstr "Pre Cut Tabs" msgid "media-type.roll" msgstr "Roll" msgid "media-type.screen" msgstr "Screen" msgid "media-type.screen-paged" msgstr "Screen Paged" msgid "media-type.self-adhesive" msgstr "Self Adhesive" msgid "media-type.self-adhesive-film" msgstr "Self Adhesive Film" msgid "media-type.shrink-foil" msgstr "Shrink Foil" msgid "media-type.single-face" msgstr "Single Face" msgid "media-type.single-wall" msgstr "Single Wall" msgid "media-type.sleeve" msgstr "Sleeve" msgid "media-type.stationery" msgstr "Stationery" msgid "media-type.stationery-archival" msgstr "Stationery Archival" msgid "media-type.stationery-coated" msgstr "Coated Paper" msgid "media-type.stationery-cotton" msgstr "Stationery Cotton" msgid "media-type.stationery-fine" msgstr "Vellum Paper" msgid "media-type.stationery-heavyweight" msgstr "Heavyweight Paper" msgid "media-type.stationery-heavyweight-coated" msgstr "Stationery Heavyweight Coated" msgid "media-type.stationery-inkjet" msgstr "Stationery Inkjet Paper" msgid "media-type.stationery-letterhead" msgstr "Letterhead" msgid "media-type.stationery-lightweight" msgstr "Lightweight Paper" msgid "media-type.stationery-preprinted" msgstr "Preprinted Paper" msgid "media-type.stationery-prepunched" msgstr "Punched Paper" msgid "media-type.tab-stock" msgstr "Tab Stock" msgid "media-type.tractor" msgstr "Tractor" msgid "media-type.transfer" msgstr "Transfer" msgid "media-type.transparency" msgstr "Transparency" msgid "media-type.triple-wall" msgstr "Triple Wall" msgid "media-type.wet-film" msgstr "Wet Film" msgid "media-weight-metric" msgstr "Media Weight (grams per m²)" msgid "media.asme_f_28x40in" msgstr "28 x 40\"" msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" msgstr "A4 or US Letter" msgid "media.iso_2a0_1189x1682mm" msgstr "2a0" msgid "media.iso_a0_841x1189mm" msgstr "A0" msgid "media.iso_a0x3_1189x2523mm" msgstr "A0x3" msgid "media.iso_a10_26x37mm" msgstr "A10" msgid "media.iso_a1_594x841mm" msgstr "A1" msgid "media.iso_a1x3_841x1783mm" msgstr "A1x3" msgid "media.iso_a1x4_841x2378mm" msgstr "A1x4" msgid "media.iso_a2_420x594mm" msgstr "A2" msgid "media.iso_a2x3_594x1261mm" msgstr "A2x3" msgid "media.iso_a2x4_594x1682mm" msgstr "A2x4" msgid "media.iso_a2x5_594x2102mm" msgstr "A2x5" msgid "media.iso_a3-extra_322x445mm" msgstr "A3 (Extra)" msgid "media.iso_a3_297x420mm" msgstr "A3" msgid "media.iso_a3x3_420x891mm" msgstr "A3x3" msgid "media.iso_a3x4_420x1189mm" msgstr "A3x4" msgid "media.iso_a3x5_420x1486mm" msgstr "A3x5" msgid "media.iso_a3x6_420x1783mm" msgstr "A3x6" msgid "media.iso_a3x7_420x2080mm" msgstr "A3x7" msgid "media.iso_a4-extra_235.5x322.3mm" msgstr "A4 (Extra)" msgid "media.iso_a4-tab_225x297mm" msgstr "A4 (Tab)" msgid "media.iso_a4_210x297mm" msgstr "A4" msgid "media.iso_a4x3_297x630mm" msgstr "A4x3" msgid "media.iso_a4x4_297x841mm" msgstr "A4x4" msgid "media.iso_a4x5_297x1051mm" msgstr "A4x5" msgid "media.iso_a4x6_297x1261mm" msgstr "A4x6" msgid "media.iso_a4x7_297x1471mm" msgstr "A4x7" msgid "media.iso_a4x8_297x1682mm" msgstr "A4x8" msgid "media.iso_a4x9_297x1892mm" msgstr "A4x9" msgid "media.iso_a5-extra_174x235mm" msgstr "A5 (Extra)" msgid "media.iso_a5_148x210mm" msgstr "A5" msgid "media.iso_a6_105x148mm" msgstr "A6" msgid "media.iso_a7_74x105mm" msgstr "A7" msgid "media.iso_a8_52x74mm" msgstr "A8" msgid "media.iso_a9_37x52mm" msgstr "A9" msgid "media.iso_b0_1000x1414mm" msgstr "B0" msgid "media.iso_b10_31x44mm" msgstr "B10" msgid "media.iso_b1_707x1000mm" msgstr "B1" msgid "media.iso_b2_500x707mm" msgstr "B2" msgid "media.iso_b3_353x500mm" msgstr "B3" msgid "media.iso_b4_250x353mm" msgstr "B4" msgid "media.iso_b5-extra_201x276mm" msgstr "B5 (Extra)" msgid "media.iso_b5_176x250mm" msgstr "B5 Envelope" msgid "media.iso_b6_125x176mm" msgstr "B6" msgid "media.iso_b6c4_125x324mm" msgstr "B6/C4 Envelope" msgid "media.iso_b7_88x125mm" msgstr "B7" msgid "media.iso_b8_62x88mm" msgstr "B8" msgid "media.iso_b9_44x62mm" msgstr "B9" msgid "media.iso_c0_917x1297mm" msgstr "C0 Envelope" msgid "media.iso_c10_28x40mm" msgstr "C10 Envelope" msgid "media.iso_c1_648x917mm" msgstr "C1 Envelope" msgid "media.iso_c2_458x648mm" msgstr "C2 Envelope" msgid "media.iso_c3_324x458mm" msgstr "C3 Envelope" msgid "media.iso_c4_229x324mm" msgstr "C4 Envelope" msgid "media.iso_c5_162x229mm" msgstr "C5 Envelope" msgid "media.iso_c6_114x162mm" msgstr "C6 Envelope" msgid "media.iso_c6c5_114x229mm" msgstr "C6c5 Envelope" msgid "media.iso_c7_81x114mm" msgstr "C7 Envelope" msgid "media.iso_c7c6_81x162mm" msgstr "C7c6 Envelope" msgid "media.iso_c8_57x81mm" msgstr "C8 Envelope" msgid "media.iso_c9_40x57mm" msgstr "C9 Envelope" msgid "media.iso_dl_110x220mm" msgstr "DL Envelope" msgid "media.iso_ra0_860x1220mm" msgstr "Ra0" msgid "media.iso_ra1_610x860mm" msgstr "Ra1" msgid "media.iso_ra2_430x610mm" msgstr "Ra2" msgid "media.iso_ra3_305x430mm" msgstr "Ra3" msgid "media.iso_ra4_215x305mm" msgstr "Ra4" msgid "media.iso_sra0_900x1280mm" msgstr "Sra0" msgid "media.iso_sra1_640x900mm" msgstr "Sra1" msgid "media.iso_sra2_450x640mm" msgstr "Sra2" msgid "media.iso_sra3_320x450mm" msgstr "Sra3" msgid "media.iso_sra4_225x320mm" msgstr "Sra4" msgid "media.jis_b0_1030x1456mm" msgstr "JIS B0" msgid "media.jis_b10_32x45mm" msgstr "JIS B10" msgid "media.jis_b1_728x1030mm" msgstr "JIS B1" msgid "media.jis_b2_515x728mm" msgstr "JIS B2" msgid "media.jis_b3_364x515mm" msgstr "JIS B3" msgid "media.jis_b4_257x364mm" msgstr "JIS B4" msgid "media.jis_b5_182x257mm" msgstr "JIS B5" msgid "media.jis_b6_128x182mm" msgstr "JIS B6" msgid "media.jis_b7_91x128mm" msgstr "JIS B7" msgid "media.jis_b8_64x91mm" msgstr "JIS B8" msgid "media.jis_b9_45x64mm" msgstr "JIS B9" msgid "media.jis_exec_216x330mm" msgstr "JIS Executive" msgid "media.jpn_chou2_111.1x146mm" msgstr "Chou 2 Envelope" msgid "media.jpn_chou3_120x235mm" msgstr "Chou 3 Envelope" msgid "media.jpn_chou4_90x205mm" msgstr "Chou 4 Envelope" msgid "media.jpn_hagaki_100x148mm" msgstr "Hagaki" msgid "media.jpn_kahu_240x322.1mm" msgstr "Kahu Envelope" msgid "media.jpn_kaku2_240x332mm" msgstr "Kahu 2 Envelope" msgid "media.jpn_kaku3_216x277mm" msgstr "216 x 277mme" msgid "media.jpn_kaku4_197x267mm" msgstr "197 x 267mme" msgid "media.jpn_kaku5_190x240mm" msgstr "190 x 240mme" msgid "media.jpn_kaku7_142x205mm" msgstr "142 x 205mme" msgid "media.jpn_kaku8_119x197mm" msgstr "119 x 197mme" msgid "media.jpn_oufuku_148x200mm" msgstr "Oufuku Reply Postcard" msgid "media.jpn_you4_105x235mm" msgstr "You 4 Envelope" msgid "media.na_10x11_10x11in" msgstr "10 x 11\"" msgid "media.na_10x13_10x13in" msgstr "10 x 13\"" msgid "media.na_10x14_10x14in" msgstr "10 x 14\"" msgid "media.na_10x15_10x15in" msgstr "10 x 15\"" msgid "media.na_11x12_11x12in" msgstr "11 x 12\"" msgid "media.na_11x15_11x15in" msgstr "11 x 15\"" msgid "media.na_12x19_12x19in" msgstr "12 x 19\"" msgid "media.na_5x7_5x7in" msgstr "5 x 7\"" msgid "media.na_6x9_6x9in" msgstr "6 x 9\"" msgid "media.na_7x9_7x9in" msgstr "7 x 9\"" msgid "media.na_9x11_9x11in" msgstr "9 x 11\"" msgid "media.na_a2_4.375x5.75in" msgstr "A2 Envelope" msgid "media.na_arch-a_9x12in" msgstr "9 x 12\"" msgid "media.na_arch-b_12x18in" msgstr "12 x 18\"" msgid "media.na_arch-c_18x24in" msgstr "18 x 24\"" msgid "media.na_arch-d_24x36in" msgstr "24 x 36\"" msgid "media.na_arch-e2_26x38in" msgstr "26 x 38\"" msgid "media.na_arch-e3_27x39in" msgstr "27 x 39\"" msgid "media.na_arch-e_36x48in" msgstr "36 x 48\"" msgid "media.na_b-plus_12x19.17in" msgstr "12 x 19.17\"" msgid "media.na_c5_6.5x9.5in" msgstr "C5 Envelope" msgid "media.na_c_17x22in" msgstr "17 x 22\"" msgid "media.na_d_22x34in" msgstr "22 x 34\"" msgid "media.na_e_34x44in" msgstr "34 x 44\"" msgid "media.na_edp_11x14in" msgstr "11 x 14\"" msgid "media.na_eur-edp_12x14in" msgstr "12 x 14\"" msgid "media.na_executive_7.25x10.5in" msgstr "Executive" msgid "media.na_f_44x68in" msgstr "44 x 68\"" msgid "media.na_fanfold-eur_8.5x12in" msgstr "European Fanfold" msgid "media.na_fanfold-us_11x14.875in" msgstr "US Fanfold" msgid "media.na_foolscap_8.5x13in" msgstr "Foolscap" msgid "media.na_govt-legal_8x13in" msgstr "8 x 13\"" msgid "media.na_govt-letter_8x10in" msgstr "8 x 10\"" msgid "media.na_index-3x5_3x5in" msgstr "3 x 5\"" msgid "media.na_index-4x6-ext_6x8in" msgstr "6 x 8\"" msgid "media.na_index-4x6_4x6in" msgstr "4 x 6\"" msgid "media.na_index-5x8_5x8in" msgstr "5 x 8\"" msgid "media.na_invoice_5.5x8.5in" msgstr "Statement" msgid "media.na_ledger_11x17in" msgstr "11 x 17\"" msgid "media.na_legal-extra_9.5x15in" msgstr "US Legal (Extra)" msgid "media.na_legal_8.5x14in" msgstr "US Legal" msgid "media.na_letter-extra_9.5x12in" msgstr "US Letter (Extra)" msgid "media.na_letter-plus_8.5x12.69in" msgstr "US Letter (Plus)" msgid "media.na_letter_8.5x11in" msgstr "US Letter" msgid "media.na_monarch_3.875x7.5in" msgstr "Monarch Envelope" msgid "media.na_number-10_4.125x9.5in" msgstr "#10 Envelope" msgid "media.na_number-11_4.5x10.375in" msgstr "#11 Envelope" msgid "media.na_number-12_4.75x11in" msgstr "#12 Envelope" msgid "media.na_number-14_5x11.5in" msgstr "#14 Envelope" msgid "media.na_number-9_3.875x8.875in" msgstr "#9 Envelope" msgid "media.na_oficio_8.5x13.4in" msgstr "8.5 x 13.4\"" msgid "media.na_personal_3.625x6.5in" msgstr "Personal Envelope" msgid "media.na_quarto_8.5x10.83in" msgstr "Quarto" msgid "media.na_super-a_8.94x14in" msgstr "8.94 x 14\"" msgid "media.na_super-b_13x19in" msgstr "13 x 19\"" msgid "media.na_wide-format_30x42in" msgstr "30 x 42\"" msgid "media.oe_12x16_12x16in" msgstr "12 x 16\"" msgid "media.oe_14x17_14x17in" msgstr "14 x 17\"" msgid "media.oe_18x22_18x22in" msgstr "18 x 22\"" msgid "media.oe_a2plus_17x24in" msgstr "17 x 24\"" msgid "media.oe_photo-10r_10x12in" msgstr "10 x 12\"" msgid "media.oe_photo-20r_20x24in" msgstr "20 x 24\"" msgid "media.oe_photo-l_3.5x5in" msgstr "3.5 x 5\"" msgid "media.oe_photo-s10r_10x15in" msgstr "10 x 15\"" msgid "media.om_16k_184x260mm" msgstr "184 x 260mm" msgid "media.om_16k_195x270mm" msgstr "195 x 270mm" msgid "media.om_dai-pa-kai_275x395mm" msgstr "275 x 395mm" msgid "media.om_folio-sp_215x315mm" msgstr "Folio" msgid "media.om_folio_210x330mm" msgstr "Folio (Special)" msgid "media.om_invite_220x220mm" msgstr "Invitation Envelope" msgid "media.om_italian_110x230mm" msgstr "Italian Envelope" msgid "media.om_juuro-ku-kai_198x275mm" msgstr "198 x 275mm" msgid "media.om_large-photo_200x300" msgstr "200 x 300mm" msgid "media.om_medium-photo_130x180mm" msgstr "130 x 180mm" msgid "media.om_pa-kai_267x389mm" msgstr "267 x 389mm" msgid "media.om_postfix_114x229mm" msgstr "Postfix Envelope" msgid "media.om_small-photo_100x150mm" msgstr "100 x 150mm" msgid "media.om_wide-photo_100x200mm" msgstr "100 x 200mm" msgid "media.prc_10_324x458mm" msgstr "Chinese #10 Envelope" msgid "media.prc_16k_146x215mm" msgstr "Chinese 16k" msgid "media.prc_1_102x165mm" msgstr "Chinese #1 Envelope" msgid "media.prc_2_102x176mm" msgstr "Chinese #2 Envelope" msgid "media.prc_32k_97x151mm" msgstr "Chinese 32k" msgid "media.prc_3_125x176mm" msgstr "Chinese #3 Envelope" msgid "media.prc_4_110x208mm" msgstr "Chinese #4 Envelope" msgid "media.prc_5_110x220mm" msgstr "Chinese #5 Envelope" msgid "media.prc_6_120x320mm" msgstr "Chinese #6 Envelope" msgid "media.prc_7_160x230mm" msgstr "Chinese #7 Envelope" msgid "media.prc_8_120x309mm" msgstr "Chinese #8 Envelope" msgid "media.roc_16k_7.75x10.75in" msgstr "ROC 16k" msgid "media.roc_8k_10.75x15.5in" msgstr "ROC 8k" #, c-format msgid "members of class %s:" msgstr "miembros de la clase %s:" msgid "multiple-document-handling" msgstr "Multiple Document Handling" msgid "multiple-document-handling.separate-documents-collated-copies" msgstr "Separate Documents Collated Copies" msgid "multiple-document-handling.separate-documents-uncollated-copies" msgstr "Separate Documents Uncollated Copies" msgid "multiple-document-handling.single-document" msgstr "Single Document" msgid "multiple-document-handling.single-document-new-sheet" msgstr "Single Document New Sheet" msgid "multiple-object-handling" msgstr "Multiple Object Handling" msgid "multiple-object-handling.auto" msgstr "Automatic" msgid "multiple-object-handling.best-fit" msgstr "Best Fit" msgid "multiple-object-handling.best-quality" msgstr "Best Quality" msgid "multiple-object-handling.best-speed" msgstr "Best Speed" msgid "multiple-object-handling.one-at-a-time" msgstr "One At A Time" msgid "multiple-operation-time-out-action" msgstr "Multiple Operation Time Out Action" msgid "multiple-operation-time-out-action.abort-job" msgstr "Abort Job" msgid "multiple-operation-time-out-action.hold-job" msgstr "Hold Job" msgid "multiple-operation-time-out-action.process-job" msgstr "Process Job" msgid "no entries" msgstr "no hay entradas" msgid "no system default destination" msgstr "no hay un destino predeterminado del sistema" msgid "noise-removal" msgstr "Noise Removal" msgid "notify-attributes" msgstr "Notify Attributes" msgid "notify-charset" msgstr "Notify Charset" msgid "notify-events" msgstr "Notify Events" msgid "notify-events not specified." msgstr "notify-events no especificado." msgid "notify-events.document-completed" msgstr "Document Completed" msgid "notify-events.document-config-changed" msgstr "Document Config Changed" msgid "notify-events.document-created" msgstr "Document Created" msgid "notify-events.document-fetchable" msgstr "Document Fetchable" msgid "notify-events.document-state-changed" msgstr "Document State Changed" msgid "notify-events.document-stopped" msgstr "Document Stopped" msgid "notify-events.job-completed" msgstr "Job Completed" msgid "notify-events.job-config-changed" msgstr "Job Config Changed" msgid "notify-events.job-created" msgstr "Job Created" msgid "notify-events.job-fetchable" msgstr "Job Fetchable" msgid "notify-events.job-progress" msgstr "Job Progress" msgid "notify-events.job-state-changed" msgstr "Job State Changed" msgid "notify-events.job-stopped" msgstr "Job Stopped" msgid "notify-events.none" msgstr "None" msgid "notify-events.printer-config-changed" msgstr "Printer Config Changed" msgid "notify-events.printer-finishings-changed" msgstr "Printer Finishings Changed" msgid "notify-events.printer-media-changed" msgstr "Printer Media Changed" msgid "notify-events.printer-queue-order-changed" msgstr "Printer Queue Order Changed" msgid "notify-events.printer-restarted" msgstr "Printer Restarted" msgid "notify-events.printer-shutdown" msgstr "Printer Shutdown" msgid "notify-events.printer-state-changed" msgstr "Printer State Changed" msgid "notify-events.printer-stopped" msgstr "Printer Stopped" msgid "notify-get-interval" msgstr "Notify Get Interval" msgid "notify-lease-duration" msgstr "Notify Lease Duration" msgid "notify-natural-language" msgstr "Notify Natural Language" msgid "notify-pull-method" msgstr "Notify Pull Method" msgid "notify-recipient-uri" msgstr "Notify Recipient" #, c-format msgid "notify-recipient-uri URI \"%s\" is already used." msgstr "El URI notify-recipient-uri \"%s\" ya está usado." #, c-format msgid "notify-recipient-uri URI \"%s\" uses unknown scheme." msgstr "El URI notify-recipient-uri \"%s\" usa un esquema desconocido." msgid "notify-sequence-numbers" msgstr "Notify Sequence Numbers" msgid "notify-subscription-ids" msgstr "Notify Subscription Ids" msgid "notify-time-interval" msgstr "Notify Time Interval" msgid "notify-user-data" msgstr "Notify User Data" msgid "notify-wait" msgstr "Notify Wait" msgid "number-of-retries" msgstr "Number Of Retries" msgid "number-up" msgstr "Number-Up" msgid "object-offset" msgstr "Object Offset" msgid "object-size" msgstr "Object Size" msgid "organization-name" msgstr "Organization Name" msgid "orientation-requested" msgstr "Orientation" msgid "orientation-requested.3" msgstr "Portrait" msgid "orientation-requested.4" msgstr "Landscape" msgid "orientation-requested.5" msgstr "Reverse Landscape" msgid "orientation-requested.6" msgstr "Reverse Portrait" msgid "orientation-requested.7" msgstr "None" msgid "output-attributes" msgstr "Output Attributes" msgid "output-bin" msgstr "Output Bin" msgid "output-bin.auto" msgstr "Automatic" msgid "output-bin.bottom" msgstr "Bottom" msgid "output-bin.center" msgstr "Center" msgid "output-bin.face-down" msgstr "Face Down" msgid "output-bin.face-up" msgstr "Face Up" msgid "output-bin.large-capacity" msgstr "Large Capacity" msgid "output-bin.left" msgstr "Left" msgid "output-bin.mailbox-1" msgstr "Mailbox 1" msgid "output-bin.mailbox-10" msgstr "Mailbox 10" msgid "output-bin.mailbox-2" msgstr "Mailbox 2" msgid "output-bin.mailbox-3" msgstr "Mailbox 3" msgid "output-bin.mailbox-4" msgstr "Mailbox 4" msgid "output-bin.mailbox-5" msgstr "Mailbox 5" msgid "output-bin.mailbox-6" msgstr "Mailbox 6" msgid "output-bin.mailbox-7" msgstr "Mailbox 7" msgid "output-bin.mailbox-8" msgstr "Mailbox 8" msgid "output-bin.mailbox-9" msgstr "Mailbox 9" msgid "output-bin.middle" msgstr "Middle" msgid "output-bin.my-mailbox" msgstr "My Mailbox" msgid "output-bin.rear" msgstr "Rear" msgid "output-bin.right" msgstr "Right" msgid "output-bin.side" msgstr "Side" msgid "output-bin.stacker-1" msgstr "Stacker 1" msgid "output-bin.stacker-10" msgstr "Stacker 10" msgid "output-bin.stacker-2" msgstr "Stacker 2" msgid "output-bin.stacker-3" msgstr "Stacker 3" msgid "output-bin.stacker-4" msgstr "Stacker 4" msgid "output-bin.stacker-5" msgstr "Stacker 5" msgid "output-bin.stacker-6" msgstr "Stacker 6" msgid "output-bin.stacker-7" msgstr "Stacker 7" msgid "output-bin.stacker-8" msgstr "Stacker 8" msgid "output-bin.stacker-9" msgstr "Stacker 9" msgid "output-bin.top" msgstr "Top" msgid "output-bin.tray-1" msgstr "Tray 1" msgid "output-bin.tray-10" msgstr "Tray 10" msgid "output-bin.tray-2" msgstr "Tray 2" msgid "output-bin.tray-3" msgstr "Tray 3" msgid "output-bin.tray-4" msgstr "Tray 4" msgid "output-bin.tray-5" msgstr "Tray 5" msgid "output-bin.tray-6" msgstr "Tray 6" msgid "output-bin.tray-7" msgstr "Tray 7" msgid "output-bin.tray-8" msgstr "Tray 8" msgid "output-bin.tray-9" msgstr "Tray 9" msgid "output-compression-quality-factor" msgstr "Scanned Image Quality" msgid "page-delivery" msgstr "Page Delivery" msgid "page-delivery.reverse-order-face-down" msgstr "Reverse Order Face Down" msgid "page-delivery.reverse-order-face-up" msgstr "Reverse Order Face Up" msgid "page-delivery.same-order-face-down" msgstr "Same Order Face Down" msgid "page-delivery.same-order-face-up" msgstr "Same Order Face Up" msgid "page-delivery.system-specified" msgstr "System Specified" msgid "page-order-received" msgstr "Page Order Received" msgid "page-order-received.1-to-n-order" msgstr "1 To N Order" msgid "page-order-received.n-to-1-order" msgstr "N To 1 Order" msgid "page-ranges" msgstr "Page Ranges" msgid "pages" msgstr "Pages" msgid "pages-per-subset" msgstr "Pages Per Subset" msgid "pending" msgstr "pendiente" msgid "platform-shape" msgstr "Platform Shape" msgid "platform-shape.ellipse" msgstr "Round" msgid "platform-shape.rectangle" msgstr "Rectangle" msgid "platform-temperature" msgstr "Platform Temperature" msgid "post-dial-string" msgstr "Post-dial String" #, c-format msgid "ppdc: Adding include directory \"%s\"." msgstr "ppdc: Añadiendo directorio include \"%s\"." #, c-format msgid "ppdc: Adding/updating UI text from %s." msgstr "ppdc: Añadiendo/actualizando texto UI desde %s." #, c-format msgid "ppdc: Bad boolean value (%s) on line %d of %s." msgstr "ppdc: Valor lógico (%s) incorrecto en línea %d de %s." #, c-format msgid "ppdc: Bad font attribute: %s" msgstr "ppdc: Atributo de fuente incorrecto: %s" #, c-format msgid "ppdc: Bad resolution name \"%s\" on line %d of %s." msgstr "ppdc: Resolución de nombre \"%s\" incorrecta en línea %d de %s." #, c-format msgid "ppdc: Bad status keyword %s on line %d of %s." msgstr "ppdc: Clave de estado %s incorrecta en línea %d de %s." #, c-format msgid "ppdc: Bad variable substitution ($%c) on line %d of %s." msgstr "ppdc: Sustitución de variable ($%c) errónea en la línea %d de %s." #, c-format msgid "ppdc: Choice found on line %d of %s with no Option." msgstr "ppdc: Selección encontrada en línea %d de %s sin opciones." #, c-format msgid "ppdc: Duplicate #po for locale %s on line %d of %s." msgstr "ppdc: #po duplicado para código regional %s en línea %d de %s." #, c-format msgid "ppdc: Expected a filter definition on line %d of %s." msgstr "ppdc: Se esperaba una definición de filtro en la línea %d de %s." #, c-format msgid "ppdc: Expected a program name on line %d of %s." msgstr "ppdc: Se esperaba un nombre de programa en la línea %d de %s." #, c-format msgid "ppdc: Expected boolean value on line %d of %s." msgstr "ppdc: Se esperaba un valor lógico en la línea %d de %s." #, c-format msgid "ppdc: Expected charset after Font on line %d of %s." msgstr "" "ppdc: Se esperaba un juego de caracteres tras Font en la línea %d de %s." #, c-format msgid "ppdc: Expected choice code on line %d of %s." msgstr "ppdc: Se esperaba un código apropiado en la línea %d de %s." #, c-format msgid "ppdc: Expected choice name/text on line %d of %s." msgstr "ppdc: Se esperaba un nombre/texto apropiado en la línea %d de %s." #, c-format msgid "ppdc: Expected color order for ColorModel on line %d of %s." msgstr "" "ppdc: Se esperaba un orden de color para ColorModel en la línea %d de %s." #, c-format msgid "ppdc: Expected colorspace for ColorModel on line %d of %s." msgstr "ppdc: Se esperaba colorspace para ColorModel en la línea %d de %s." #, c-format msgid "ppdc: Expected compression for ColorModel on line %d of %s." msgstr "ppdc: Se esperaba compresión para ColorModel en la línea %d de %s." #, c-format msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s." msgstr "" "ppdc: Se esperaba una cadena de restricciones para UIConstraints en la línea " "%d de %s." #, c-format msgid "" "ppdc: Expected driver type keyword following DriverType on line %d of %s." msgstr "" "ppdc: Se esperaba una clave de tipo de controlador tras DriverType en la " "línea %d de %s." #, c-format msgid "ppdc: Expected duplex type after Duplex on line %d of %s." msgstr "ppdc: Se esperaba un tipo dúplex tras Duplex en la línea %d de %s." #, c-format msgid "ppdc: Expected encoding after Font on line %d of %s." msgstr "ppdc: Se esperaba una codificación tras Font en la línea %d de %s." #, c-format msgid "ppdc: Expected filename after #po %s on line %d of %s." msgstr "" "ppdc: Se esperaba un nombre de archivo tras #po %s en la línea %d de %s." #, c-format msgid "ppdc: Expected group name/text on line %d of %s." msgstr "ppdc: Se esperaba un nombre/texto de grupo en la línea %d de %s." #, c-format msgid "ppdc: Expected include filename on line %d of %s." msgstr "ppdc: Se esperaba un nombre de archivo include en la línea %d de %s." #, c-format msgid "ppdc: Expected integer on line %d of %s." msgstr "ppdc: Se esperaba un número entero en la línea %d de %s." #, c-format msgid "ppdc: Expected locale after #po on line %d of %s." msgstr "ppdc: Se esperaba un código regional tras #po en la línea %d de %s." #, c-format msgid "ppdc: Expected name after %s on line %d of %s." msgstr "ppdc: Se esperaba un nombre tras %s en la línea %d de %s." #, c-format msgid "ppdc: Expected name after FileName on line %d of %s." msgstr "ppdc: Se esperaba un nombre tras FileName en la línea %d de %s." #, c-format msgid "ppdc: Expected name after Font on line %d of %s." msgstr "ppdc: Se esperaba un nombre tras Font en la línea %d de %s." #, c-format msgid "ppdc: Expected name after Manufacturer on line %d of %s." msgstr "ppdc: Se esperaba un nombre tras Manufacturer en la línea %d de %s." #, c-format msgid "ppdc: Expected name after MediaSize on line %d of %s." msgstr "ppdc: Se esperaba un nombre tras MediaSize en la línea %d de %s." #, c-format msgid "ppdc: Expected name after ModelName on line %d of %s." msgstr "ppdc: Se esperaba un nombre tras ModelName en la línea %d de %s." #, c-format msgid "ppdc: Expected name after PCFileName on line %d of %s." msgstr "ppdc: Se esperaba un nombre tras PCFileName en la línea %d de %s." #, c-format msgid "ppdc: Expected name/text after %s on line %d of %s." msgstr "ppdc: Se esperaba un nombre/texto tras %s en la línea %d de %s." #, c-format msgid "ppdc: Expected name/text after Installable on line %d of %s." msgstr "" "ppdc: Se esperaba un nombre/texto tras Installable en la línea %d de %s." #, c-format msgid "ppdc: Expected name/text after Resolution on line %d of %s." msgstr "" "ppdc: Se esperaba un nombre/texto tras Resolution en la línea %d de %s." #, c-format msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s." msgstr "" "ppdc: Se esperaba una combinación nombre/texto para ColorModel en la línea " "%d de %s." #, c-format msgid "ppdc: Expected option name/text on line %d of %s." msgstr "ppdc: Se esperaba una opción de nombre/texto en la línea %d de %s." #, c-format msgid "ppdc: Expected option section on line %d of %s." msgstr "ppdc: Se esperaba una sección de opciones en la línea %d de %s." #, c-format msgid "ppdc: Expected option type on line %d of %s." msgstr "ppdc: Se esperaba un tipo de opción en la línea %d de %s." #, c-format msgid "ppdc: Expected override field after Resolution on line %d of %s." msgstr "" "ppdc: Se esperaba un campo de anulación tras Resolution en la línea %d de %s." #, c-format msgid "ppdc: Expected quoted string on line %d of %s." msgstr "ppdc: Se esperaba una cadena entrecomillada en la línea %d de %s." #, c-format msgid "ppdc: Expected real number on line %d of %s." msgstr "ppdc: Se esperaba un número real en la línea %d de %s." #, c-format msgid "" "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s." msgstr "" "ppdc: Se esperaba resolución/tipo de soporte tras ColorProfile en la línea " "%d de %s." #, c-format msgid "" "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d " "of %s." msgstr "" "ppdc: Se esperaba resolución/tipo de soporte tras SimpleColorProfile en la " "línea %d de %s." #, c-format msgid "ppdc: Expected selector after %s on line %d of %s." msgstr "ppdc: Se esperaba un selector tras %s en la línea %d de %s." #, c-format msgid "ppdc: Expected status after Font on line %d of %s." msgstr "ppdc: Se esperaba un estado tras Font en la línea %d de %s." #, c-format msgid "ppdc: Expected string after Copyright on line %d of %s." msgstr "ppdc: Se esperaba una cadena tras Copyright en la línea %d de %s." #, c-format msgid "ppdc: Expected string after Version on line %d of %s." msgstr "ppdc: Se esperaba una cadena tras Version en la línea %d de %s." #, c-format msgid "ppdc: Expected two option names on line %d of %s." msgstr "ppdc: Se esperaban dos nombres de opciones en la línea %d de %s." #, c-format msgid "ppdc: Expected value after %s on line %d of %s." msgstr "ppdc: Se esperaba un valor tras %s en la línea %d de %s." #, c-format msgid "ppdc: Expected version after Font on line %d of %s." msgstr "ppdc: Se esperaba una versión tras Font en la línea %d de %s." #, c-format msgid "ppdc: Invalid #include/#po filename \"%s\"." msgstr "ppdc: Nombre de archivo #include/#po incorrecto \"%s\"." #, c-format msgid "ppdc: Invalid cost for filter on line %d of %s." msgstr "ppdc: Coste incorrecto para el filtro en la línea %d de %s." #, c-format msgid "ppdc: Invalid empty MIME type for filter on line %d of %s." msgstr "ppdc: Tipo MIME vacío incorrecto para el filtro en la línea %d de %s." #, c-format msgid "ppdc: Invalid empty program name for filter on line %d of %s." msgstr "" "ppdc: Nombre de programa vacío incorrecto para el filtro en la línea %d de " "%s." #, c-format msgid "ppdc: Invalid option section \"%s\" on line %d of %s." msgstr "ppdc: Sección de opción incorrecta \"%s\" en la línea %d de %s." #, c-format msgid "ppdc: Invalid option type \"%s\" on line %d of %s." msgstr "ppdc: Tipo de opción incorrecta \"%s\" en la línea %d de %s." #, c-format msgid "ppdc: Loading driver information file \"%s\"." msgstr "ppdc: Cargando archivo de información de controlador \"%s\"." #, c-format msgid "ppdc: Loading messages for locale \"%s\"." msgstr "ppdc: Cargando mensajes del idioma \"%s\"." #, c-format msgid "ppdc: Loading messages from \"%s\"." msgstr "ppdc: Cargando mensajes desde \"%s\"." #, c-format msgid "ppdc: Missing #endif at end of \"%s\"." msgstr "ppdc: Falta un #endif al final de \"%s\"." #, c-format msgid "ppdc: Missing #if on line %d of %s." msgstr "ppdc: Falta un #if en la línea %d de %s." #, c-format msgid "" "ppdc: Need a msgid line before any translation strings on line %d of %s." msgstr "" "ppdc: Se necesita una línea msgid antes de cualquier cadena de traducción en " "línea %d de %s." #, c-format msgid "ppdc: No message catalog provided for locale %s." msgstr "ppdc: No se ha proporcionado catálogo de mensajes para el idioma %s." #, c-format msgid "ppdc: Option %s defined in two different groups on line %d of %s." msgstr "" "ppdc: Opción %s definida en dos diferentes grupos en la línea %d de %s." #, c-format msgid "ppdc: Option %s redefined with a different type on line %d of %s." msgstr "ppdc: Opción %s redefinida con un tipo diferente en la línea %d de %s." #, c-format msgid "ppdc: Option constraint must *name on line %d of %s." msgstr "ppdc: Opción de restricción debe *name en línea %d de %s." #, c-format msgid "ppdc: Too many nested #if's on line %d of %s." msgstr "ppdc: Demasiados #if anidados en la línea %d de %s." #, c-format msgid "ppdc: Unable to create PPD file \"%s\" - %s." msgstr "ppdc: No se ha podido crear el archivo PPD \"%s\" - %s." #, c-format msgid "ppdc: Unable to create output directory %s: %s" msgstr "ppdc: No se ha podido crear el directorio de salida %s: %s" #, c-format msgid "ppdc: Unable to create output pipes: %s" msgstr "ppdc: No se han podido crear canales (pipes) de salida: %s" #, c-format msgid "ppdc: Unable to execute cupstestppd: %s" msgstr "ppdc: No se ha podido ejecutar cupstestppd: %s" #, c-format msgid "ppdc: Unable to find #po file %s on line %d of %s." msgstr "" "ppdc: No se ha podido encontrar el archivo #po %s en la línea %d de %s." #, c-format msgid "ppdc: Unable to find include file \"%s\" on line %d of %s." msgstr "" "ppdc: No se ha podido encontrar el archivo include \"%s\" en la línea %d de " "%s." #, c-format msgid "ppdc: Unable to find localization for \"%s\" - %s" msgstr "ppdc: No se ha podido encontrar localización para \"%s\" - %s" #, c-format msgid "ppdc: Unable to load localization file \"%s\" - %s" msgstr "ppdc: No se ha podido cargar el archivo de localización \"%s\" - %s" #, c-format msgid "ppdc: Unable to open %s: %s" msgstr "ppdc: No se pudo abrir %s: %s" #, c-format msgid "ppdc: Undefined variable (%s) on line %d of %s." msgstr "ppdc: Variable no definida (%s) en la línea %d de %s." #, c-format msgid "ppdc: Unexpected text on line %d of %s." msgstr "ppdc: Texto inesperado en la línea %d del %s." #, c-format msgid "ppdc: Unknown driver type %s on line %d of %s." msgstr "ppdc: Tipo de controlador desconocido %s en la línea %d de %s." #, c-format msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s." msgstr "ppdc: Tipo dúplex desconocido \"%s\" en la línea %d de %s." #, c-format msgid "ppdc: Unknown media size \"%s\" on line %d of %s." msgstr "ppdc: Tamaño de papel desconocido \"%s\" en la línea %d de %s." #, c-format msgid "ppdc: Unknown message catalog format for \"%s\"." msgstr "ppdc: Formato del catálogo de mensajes para \"%s\" desconocido." #, c-format msgid "ppdc: Unknown token \"%s\" seen on line %d of %s." msgstr "ppdc: Elemento desconocido \"%s\" visto en la línea %d de %s." #, c-format msgid "" "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." msgstr "" "ppdc: Caracteres finales desconocidos en el número real \"%s\" en la línea " "%d de %s." #, c-format msgid "ppdc: Unterminated string starting with %c on line %d of %s." msgstr "ppdc: Cadena que comienza por %c sin terminar en la línea %d de %s." #, c-format msgid "ppdc: Warning - overlapping filename \"%s\"." msgstr "ppdc: Advertencia - nombre de archivo superpuesto \"%s\"." #, c-format msgid "ppdc: Writing %s." msgstr "ppdc: Escribiendo %s." #, c-format msgid "ppdc: Writing PPD files to directory \"%s\"." msgstr "ppdc: Escribiendo archivos PPD al directorio \"%s\"." #, c-format msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s." msgstr "ppdmerge: LanguageVersion \"%s\" incorrecto en %s." #, c-format msgid "ppdmerge: Ignoring PPD file %s." msgstr "ppdmerge: Ignorando archivo PPD %s." #, c-format msgid "ppdmerge: Unable to backup %s to %s - %s" msgstr "ppdmerge: No se ha podido hacer copia de respaldo de %s a %s - %s" msgid "pre-dial-string" msgstr "Pre-dial String" msgid "presentation-direction-number-up" msgstr "Number-Up Layout" msgid "presentation-direction-number-up.tobottom-toleft" msgstr "Top-Bottom, Right-Left" msgid "presentation-direction-number-up.tobottom-toright" msgstr "Top-Bottom, Left-Right" msgid "presentation-direction-number-up.toleft-tobottom" msgstr "Right-Left, Top-Bottom" msgid "presentation-direction-number-up.toleft-totop" msgstr "Right-Left, Bottom-Top" msgid "presentation-direction-number-up.toright-tobottom" msgstr "Left-Right, Top-Bottom" msgid "presentation-direction-number-up.toright-totop" msgstr "Left-Right, Bottom-Top" msgid "presentation-direction-number-up.totop-toleft" msgstr "Bottom-Top, Right-Left" msgid "presentation-direction-number-up.totop-toright" msgstr "Bottom-Top, Left-Right" msgid "print-accuracy" msgstr "Print Accuracy" msgid "print-base" msgstr "Print Base" msgid "print-base.brim" msgstr "Brim" msgid "print-base.none" msgstr "None" msgid "print-base.raft" msgstr "Raft" msgid "print-base.skirt" msgstr "Skirt" msgid "print-base.standard" msgstr "Standard" msgid "print-color-mode" msgstr "Print Color Mode" msgid "print-color-mode.auto" msgstr "Automatic" msgid "print-color-mode.bi-level" msgstr "Bi-Level" msgid "print-color-mode.color" msgstr "Color" msgid "print-color-mode.highlight" msgstr "Highlight" msgid "print-color-mode.monochrome" msgstr "Monochrome" msgid "print-color-mode.process-bi-level" msgstr "Process Bi-Level" msgid "print-color-mode.process-monochrome" msgstr "Process Monochrome" msgid "print-content-optimize" msgstr "Print Optimization" msgid "print-content-optimize.auto" msgstr "Automatic" msgid "print-content-optimize.graphic" msgstr "Graphics" msgid "print-content-optimize.photo" msgstr "Photo" msgid "print-content-optimize.text" msgstr "Text" msgid "print-content-optimize.text-and-graphic" msgstr "Text And Graphics" msgid "print-objects" msgstr "Print Objects" msgid "print-quality" msgstr "Print Quality" msgid "print-quality.3" msgstr "Draft" msgid "print-quality.4" msgstr "Normal" msgid "print-quality.5" msgstr "High" msgid "print-rendering-intent" msgstr "Print Rendering Intent" msgid "print-rendering-intent.absolute" msgstr "Absolute" msgid "print-rendering-intent.auto" msgstr "Automatic" msgid "print-rendering-intent.perceptual" msgstr "Perceptual" msgid "print-rendering-intent.relative" msgstr "Relative" msgid "print-rendering-intent.relative-bpc" msgstr "Relative w/Black Point Compensation" msgid "print-rendering-intent.saturation" msgstr "Saturation" msgid "print-scaling" msgstr "Print Scaling" msgid "print-scaling.auto" msgstr "Automatic" msgid "print-scaling.auto-fit" msgstr "Auto Fit" msgid "print-scaling.fill" msgstr "Fill" msgid "print-scaling.fit" msgstr "Fit" msgid "print-scaling.none" msgstr "None" msgid "print-supports" msgstr "Print Supports" msgid "print-supports.material" msgstr "Material" msgid "print-supports.none" msgstr "None" msgid "print-supports.standard" msgstr "Standard" #, c-format msgid "printer %s disabled since %s -" msgstr "la impresora %s está deshabilitada desde %s -" #, c-format msgid "printer %s is idle. enabled since %s" msgstr "la impresora %s está inactiva. activada desde %s" #, c-format msgid "printer %s now printing %s-%d. enabled since %s" msgstr "la impresora %s está ahora imprimiendo %s-%d. activada desde %s" #, c-format msgid "printer %s/%s disabled since %s -" msgstr "la impresora %s/%s está desactivada desde %s -" #, c-format msgid "printer %s/%s is idle. enabled since %s" msgstr "la impresora %s/%s está inactiva. activada desde %s" #, c-format msgid "printer %s/%s now printing %s-%d. enabled since %s" msgstr "la impresora %s/%s está ahora imprimiendo %s-%d. activada desde %s" msgid "printer-message-from-operator" msgstr "Printer Message From Operator" msgid "printer-resolution" msgstr "Printer Resolution" msgid "printer-state" msgstr "Printer State" msgid "printer-state-reasons" msgstr "Detailed Printer State" msgid "printer-state-reasons.alert-removal-of-binary-change-entry" msgstr "Alert Removal Of Binary Change Entry" msgid "printer-state-reasons.bander-added" msgstr "Bander Added" msgid "printer-state-reasons.bander-almost-empty" msgstr "Bander Almost Empty" msgid "printer-state-reasons.bander-almost-full" msgstr "Bander Almost Full" msgid "printer-state-reasons.bander-at-limit" msgstr "Bander At Limit" msgid "printer-state-reasons.bander-closed" msgstr "Bander Closed" msgid "printer-state-reasons.bander-configuration-change" msgstr "Bander Configuration Change" msgid "printer-state-reasons.bander-cover-closed" msgstr "Bander Cover Closed" msgid "printer-state-reasons.bander-cover-open" msgstr "Bander Cover Open" msgid "printer-state-reasons.bander-empty" msgstr "Bander Empty" msgid "printer-state-reasons.bander-full" msgstr "Bander Full" msgid "printer-state-reasons.bander-interlock-closed" msgstr "Bander Interlock Closed" msgid "printer-state-reasons.bander-interlock-open" msgstr "Bander Interlock Open" msgid "printer-state-reasons.bander-jam" msgstr "Bander Jam" msgid "printer-state-reasons.bander-life-almost-over" msgstr "Bander Life Almost Over" msgid "printer-state-reasons.bander-life-over" msgstr "Bander Life Over" msgid "printer-state-reasons.bander-memory-exhausted" msgstr "Bander Memory Exhausted" msgid "printer-state-reasons.bander-missing" msgstr "Bander Missing" msgid "printer-state-reasons.bander-motor-failure" msgstr "Bander Motor Failure" msgid "printer-state-reasons.bander-near-limit" msgstr "Bander Near Limit" msgid "printer-state-reasons.bander-offline" msgstr "Bander Offline" msgid "printer-state-reasons.bander-opened" msgstr "Bander Opened" msgid "printer-state-reasons.bander-over-temperature" msgstr "Bander Over Temperature" msgid "printer-state-reasons.bander-power-saver" msgstr "Bander Power Saver" msgid "printer-state-reasons.bander-recoverable-failure" msgstr "Bander Recoverable Failure" msgid "printer-state-reasons.bander-recoverable-storage" msgstr "Bander Recoverable Storage" msgid "printer-state-reasons.bander-removed" msgstr "Bander Removed" msgid "printer-state-reasons.bander-resource-added" msgstr "Bander Resource Added" msgid "printer-state-reasons.bander-resource-removed" msgstr "Bander Resource Removed" msgid "printer-state-reasons.bander-thermistor-failure" msgstr "Bander Thermistor Failure" msgid "printer-state-reasons.bander-timing-failure" msgstr "Bander Timing Failure" msgid "printer-state-reasons.bander-turned-off" msgstr "Bander Turned Off" msgid "printer-state-reasons.bander-turned-on" msgstr "Bander Turned On" msgid "printer-state-reasons.bander-under-temperature" msgstr "Bander Under Temperature" msgid "printer-state-reasons.bander-unrecoverable-failure" msgstr "Bander Unrecoverable Failure" msgid "printer-state-reasons.bander-unrecoverable-storage-error" msgstr "Bander Unrecoverable Storage Error" msgid "printer-state-reasons.bander-warming-up" msgstr "Bander Warming Up" msgid "printer-state-reasons.binder-added" msgstr "Binder Added" msgid "printer-state-reasons.binder-almost-empty" msgstr "Binder Almost Empty" msgid "printer-state-reasons.binder-almost-full" msgstr "Binder Almost Full" msgid "printer-state-reasons.binder-at-limit" msgstr "Binder At Limit" msgid "printer-state-reasons.binder-closed" msgstr "Binder Closed" msgid "printer-state-reasons.binder-configuration-change" msgstr "Binder Configuration Change" msgid "printer-state-reasons.binder-cover-closed" msgstr "Binder Cover Closed" msgid "printer-state-reasons.binder-cover-open" msgstr "Binder Cover Open" msgid "printer-state-reasons.binder-empty" msgstr "Binder Empty" msgid "printer-state-reasons.binder-full" msgstr "Binder Full" msgid "printer-state-reasons.binder-interlock-closed" msgstr "Binder Interlock Closed" msgid "printer-state-reasons.binder-interlock-open" msgstr "Binder Interlock Open" msgid "printer-state-reasons.binder-jam" msgstr "Binder Jam" msgid "printer-state-reasons.binder-life-almost-over" msgstr "Binder Life Almost Over" msgid "printer-state-reasons.binder-life-over" msgstr "Binder Life Over" msgid "printer-state-reasons.binder-memory-exhausted" msgstr "Binder Memory Exhausted" msgid "printer-state-reasons.binder-missing" msgstr "Binder Missing" msgid "printer-state-reasons.binder-motor-failure" msgstr "Binder Motor Failure" msgid "printer-state-reasons.binder-near-limit" msgstr "Binder Near Limit" msgid "printer-state-reasons.binder-offline" msgstr "Binder Offline" msgid "printer-state-reasons.binder-opened" msgstr "Binder Opened" msgid "printer-state-reasons.binder-over-temperature" msgstr "Binder Over Temperature" msgid "printer-state-reasons.binder-power-saver" msgstr "Binder Power Saver" msgid "printer-state-reasons.binder-recoverable-failure" msgstr "Binder Recoverable Failure" msgid "printer-state-reasons.binder-recoverable-storage" msgstr "Binder Recoverable Storage" msgid "printer-state-reasons.binder-removed" msgstr "Binder Removed" msgid "printer-state-reasons.binder-resource-added" msgstr "Binder Resource Added" msgid "printer-state-reasons.binder-resource-removed" msgstr "Binder Resource Removed" msgid "printer-state-reasons.binder-thermistor-failure" msgstr "Binder Thermistor Failure" msgid "printer-state-reasons.binder-timing-failure" msgstr "Binder Timing Failure" msgid "printer-state-reasons.binder-turned-off" msgstr "Binder Turned Off" msgid "printer-state-reasons.binder-turned-on" msgstr "Binder Turned On" msgid "printer-state-reasons.binder-under-temperature" msgstr "Binder Under Temperature" msgid "printer-state-reasons.binder-unrecoverable-failure" msgstr "Binder Unrecoverable Failure" msgid "printer-state-reasons.binder-unrecoverable-storage-error" msgstr "Binder Unrecoverable Storage Error" msgid "printer-state-reasons.binder-warming-up" msgstr "Binder Warming Up" msgid "printer-state-reasons.camera-failure" msgstr "Camera Failure" msgid "printer-state-reasons.chamber-cooling" msgstr "Chamber Cooling" msgid "printer-state-reasons.chamber-heating" msgstr "Chamber Heating" msgid "printer-state-reasons.chamber-temperature-high" msgstr "Chamber Temperature High" msgid "printer-state-reasons.chamber-temperature-low" msgstr "Chamber Temperature Low" msgid "printer-state-reasons.cleaner-life-almost-over" msgstr "Cleaner Life Almost Over" msgid "printer-state-reasons.cleaner-life-over" msgstr "Cleaner Life Over" msgid "printer-state-reasons.configuration-change" msgstr "Configuration Change" msgid "printer-state-reasons.connecting-to-device" msgstr "Connecting To Device" msgid "printer-state-reasons.cover-open" msgstr "Cover Open" msgid "printer-state-reasons.deactivated" msgstr "Deactivated" msgid "printer-state-reasons.developer-empty" msgstr "Developer Empty" msgid "printer-state-reasons.developer-low" msgstr "Developer Low" msgid "printer-state-reasons.die-cutter-added" msgstr "Die Cutter Added" msgid "printer-state-reasons.die-cutter-almost-empty" msgstr "Die Cutter Almost Empty" msgid "printer-state-reasons.die-cutter-almost-full" msgstr "Die Cutter Almost Full" msgid "printer-state-reasons.die-cutter-at-limit" msgstr "Die Cutter At Limit" msgid "printer-state-reasons.die-cutter-closed" msgstr "Die Cutter Closed" msgid "printer-state-reasons.die-cutter-configuration-change" msgstr "Die Cutter Configuration Change" msgid "printer-state-reasons.die-cutter-cover-closed" msgstr "Die Cutter Cover Closed" msgid "printer-state-reasons.die-cutter-cover-open" msgstr "Die Cutter Cover Open" msgid "printer-state-reasons.die-cutter-empty" msgstr "Die Cutter Empty" msgid "printer-state-reasons.die-cutter-full" msgstr "Die Cutter Full" msgid "printer-state-reasons.die-cutter-interlock-closed" msgstr "Die Cutter Interlock Closed" msgid "printer-state-reasons.die-cutter-interlock-open" msgstr "Die Cutter Interlock Open" msgid "printer-state-reasons.die-cutter-jam" msgstr "Die Cutter Jam" msgid "printer-state-reasons.die-cutter-life-almost-over" msgstr "Die Cutter Life Almost Over" msgid "printer-state-reasons.die-cutter-life-over" msgstr "Die Cutter Life Over" msgid "printer-state-reasons.die-cutter-memory-exhausted" msgstr "Die Cutter Memory Exhausted" msgid "printer-state-reasons.die-cutter-missing" msgstr "Die Cutter Missing" msgid "printer-state-reasons.die-cutter-motor-failure" msgstr "Die Cutter Motor Failure" msgid "printer-state-reasons.die-cutter-near-limit" msgstr "Die Cutter Near Limit" msgid "printer-state-reasons.die-cutter-offline" msgstr "Die Cutter Offline" msgid "printer-state-reasons.die-cutter-opened" msgstr "Die Cutter Opened" msgid "printer-state-reasons.die-cutter-over-temperature" msgstr "Die Cutter Over Temperature" msgid "printer-state-reasons.die-cutter-power-saver" msgstr "Die Cutter Power Saver" msgid "printer-state-reasons.die-cutter-recoverable-failure" msgstr "Die Cutter Recoverable Failure" msgid "printer-state-reasons.die-cutter-recoverable-storage" msgstr "Die Cutter Recoverable Storage" msgid "printer-state-reasons.die-cutter-removed" msgstr "Die Cutter Removed" msgid "printer-state-reasons.die-cutter-resource-added" msgstr "Die Cutter Resource Added" msgid "printer-state-reasons.die-cutter-resource-removed" msgstr "Die Cutter Resource Removed" msgid "printer-state-reasons.die-cutter-thermistor-failure" msgstr "Die Cutter Thermistor Failure" msgid "printer-state-reasons.die-cutter-timing-failure" msgstr "Die Cutter Timing Failure" msgid "printer-state-reasons.die-cutter-turned-off" msgstr "Die Cutter Turned Off" msgid "printer-state-reasons.die-cutter-turned-on" msgstr "Die Cutter Turned On" msgid "printer-state-reasons.die-cutter-under-temperature" msgstr "Die Cutter Under Temperature" msgid "printer-state-reasons.die-cutter-unrecoverable-failure" msgstr "Die Cutter Unrecoverable Failure" msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error" msgstr "Die Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.die-cutter-warming-up" msgstr "Die Cutter Warming Up" msgid "printer-state-reasons.door-open" msgstr "Door Open" msgid "printer-state-reasons.extruder-cooling" msgstr "Extruder Cooling" msgid "printer-state-reasons.extruder-failure" msgstr "Extruder Failure" msgid "printer-state-reasons.extruder-heating" msgstr "Extruder Heating" msgid "printer-state-reasons.extruder-jam" msgstr "Extruder Jam" msgid "printer-state-reasons.extruder-temperature-high" msgstr "Extruder Temperature High" msgid "printer-state-reasons.extruder-temperature-low" msgstr "Extruder Temperature Low" msgid "printer-state-reasons.fan-failure" msgstr "Fan Failure" msgid "printer-state-reasons.folder-added" msgstr "Folder Added" msgid "printer-state-reasons.folder-almost-empty" msgstr "Folder Almost Empty" msgid "printer-state-reasons.folder-almost-full" msgstr "Folder Almost Full" msgid "printer-state-reasons.folder-at-limit" msgstr "Folder At Limit" msgid "printer-state-reasons.folder-closed" msgstr "Folder Closed" msgid "printer-state-reasons.folder-configuration-change" msgstr "Folder Configuration Change" msgid "printer-state-reasons.folder-cover-closed" msgstr "Folder Cover Closed" msgid "printer-state-reasons.folder-cover-open" msgstr "Folder Cover Open" msgid "printer-state-reasons.folder-empty" msgstr "Folder Empty" msgid "printer-state-reasons.folder-full" msgstr "Folder Full" msgid "printer-state-reasons.folder-interlock-closed" msgstr "Folder Interlock Closed" msgid "printer-state-reasons.folder-interlock-open" msgstr "Folder Interlock Open" msgid "printer-state-reasons.folder-jam" msgstr "Folder Jam" msgid "printer-state-reasons.folder-life-almost-over" msgstr "Folder Life Almost Over" msgid "printer-state-reasons.folder-life-over" msgstr "Folder Life Over" msgid "printer-state-reasons.folder-memory-exhausted" msgstr "Folder Memory Exhausted" msgid "printer-state-reasons.folder-missing" msgstr "Folder Missing" msgid "printer-state-reasons.folder-motor-failure" msgstr "Folder Motor Failure" msgid "printer-state-reasons.folder-near-limit" msgstr "Folder Near Limit" msgid "printer-state-reasons.folder-offline" msgstr "Folder Offline" msgid "printer-state-reasons.folder-opened" msgstr "Folder Opened" msgid "printer-state-reasons.folder-over-temperature" msgstr "Folder Over Temperature" msgid "printer-state-reasons.folder-power-saver" msgstr "Folder Power Saver" msgid "printer-state-reasons.folder-recoverable-failure" msgstr "Folder Recoverable Failure" msgid "printer-state-reasons.folder-recoverable-storage" msgstr "Folder Recoverable Storage" msgid "printer-state-reasons.folder-removed" msgstr "Folder Removed" msgid "printer-state-reasons.folder-resource-added" msgstr "Folder Resource Added" msgid "printer-state-reasons.folder-resource-removed" msgstr "Folder Resource Removed" msgid "printer-state-reasons.folder-thermistor-failure" msgstr "Folder Thermistor Failure" msgid "printer-state-reasons.folder-timing-failure" msgstr "Folder Timing Failure" msgid "printer-state-reasons.folder-turned-off" msgstr "Folder Turned Off" msgid "printer-state-reasons.folder-turned-on" msgstr "Folder Turned On" msgid "printer-state-reasons.folder-under-temperature" msgstr "Folder Under Temperature" msgid "printer-state-reasons.folder-unrecoverable-failure" msgstr "Folder Unrecoverable Failure" msgid "printer-state-reasons.folder-unrecoverable-storage-error" msgstr "Folder Unrecoverable Storage Error" msgid "printer-state-reasons.folder-warming-up" msgstr "Folder Warming Up" msgid "printer-state-reasons.fuser-over-temp" msgstr "Fuser Over Temp" msgid "printer-state-reasons.fuser-under-temp" msgstr "Fuser Under Temp" msgid "printer-state-reasons.hold-new-jobs" msgstr "Hold New Jobs" msgid "printer-state-reasons.identify-printer-requested" msgstr "Identify Printer" msgid "printer-state-reasons.imprinter-added" msgstr "Imprinter Added" msgid "printer-state-reasons.imprinter-almost-empty" msgstr "Imprinter Almost Empty" msgid "printer-state-reasons.imprinter-almost-full" msgstr "Imprinter Almost Full" msgid "printer-state-reasons.imprinter-at-limit" msgstr "Imprinter At Limit" msgid "printer-state-reasons.imprinter-closed" msgstr "Imprinter Closed" msgid "printer-state-reasons.imprinter-configuration-change" msgstr "Imprinter Configuration Change" msgid "printer-state-reasons.imprinter-cover-closed" msgstr "Imprinter Cover Closed" msgid "printer-state-reasons.imprinter-cover-open" msgstr "Imprinter Cover Open" msgid "printer-state-reasons.imprinter-empty" msgstr "Imprinter Empty" msgid "printer-state-reasons.imprinter-full" msgstr "Imprinter Full" msgid "printer-state-reasons.imprinter-interlock-closed" msgstr "Imprinter Interlock Closed" msgid "printer-state-reasons.imprinter-interlock-open" msgstr "Imprinter Interlock Open" msgid "printer-state-reasons.imprinter-jam" msgstr "Imprinter Jam" msgid "printer-state-reasons.imprinter-life-almost-over" msgstr "Imprinter Life Almost Over" msgid "printer-state-reasons.imprinter-life-over" msgstr "Imprinter Life Over" msgid "printer-state-reasons.imprinter-memory-exhausted" msgstr "Imprinter Memory Exhausted" msgid "printer-state-reasons.imprinter-missing" msgstr "Imprinter Missing" msgid "printer-state-reasons.imprinter-motor-failure" msgstr "Imprinter Motor Failure" msgid "printer-state-reasons.imprinter-near-limit" msgstr "Imprinter Near Limit" msgid "printer-state-reasons.imprinter-offline" msgstr "Imprinter Offline" msgid "printer-state-reasons.imprinter-opened" msgstr "Imprinter Opened" msgid "printer-state-reasons.imprinter-over-temperature" msgstr "Imprinter Over Temperature" msgid "printer-state-reasons.imprinter-power-saver" msgstr "Imprinter Power Saver" msgid "printer-state-reasons.imprinter-recoverable-failure" msgstr "Imprinter Recoverable Failure" msgid "printer-state-reasons.imprinter-recoverable-storage" msgstr "Imprinter Recoverable Storage" msgid "printer-state-reasons.imprinter-removed" msgstr "Imprinter Removed" msgid "printer-state-reasons.imprinter-resource-added" msgstr "Imprinter Resource Added" msgid "printer-state-reasons.imprinter-resource-removed" msgstr "Imprinter Resource Removed" msgid "printer-state-reasons.imprinter-thermistor-failure" msgstr "Imprinter Thermistor Failure" msgid "printer-state-reasons.imprinter-timing-failure" msgstr "Imprinter Timing Failure" msgid "printer-state-reasons.imprinter-turned-off" msgstr "Imprinter Turned Off" msgid "printer-state-reasons.imprinter-turned-on" msgstr "Imprinter Turned On" msgid "printer-state-reasons.imprinter-under-temperature" msgstr "Imprinter Under Temperature" msgid "printer-state-reasons.imprinter-unrecoverable-failure" msgstr "Imprinter Unrecoverable Failure" msgid "printer-state-reasons.imprinter-unrecoverable-storage-error" msgstr "Imprinter Unrecoverable Storage Error" msgid "printer-state-reasons.imprinter-warming-up" msgstr "Imprinter Warming Up" msgid "printer-state-reasons.input-cannot-feed-size-selected" msgstr "Input Cannot Feed Size Selected" msgid "printer-state-reasons.input-manual-input-request" msgstr "Input Manual Input Request" msgid "printer-state-reasons.input-media-color-change" msgstr "Input Media Color Change" msgid "printer-state-reasons.input-media-form-parts-change" msgstr "Input Media Form Parts Change" msgid "printer-state-reasons.input-media-size-change" msgstr "Input Media Size Change" msgid "printer-state-reasons.input-media-type-change" msgstr "Input Media Type Change" msgid "printer-state-reasons.input-media-weight-change" msgstr "Input Media Weight Change" msgid "printer-state-reasons.input-tray-elevation-failure" msgstr "Input Tray Elevation Failure" msgid "printer-state-reasons.input-tray-missing" msgstr "Input Tray Missing" msgid "printer-state-reasons.input-tray-position-failure" msgstr "Input Tray Position Failure" msgid "printer-state-reasons.inserter-added" msgstr "Inserter Added" msgid "printer-state-reasons.inserter-almost-empty" msgstr "Inserter Almost Empty" msgid "printer-state-reasons.inserter-almost-full" msgstr "Inserter Almost Full" msgid "printer-state-reasons.inserter-at-limit" msgstr "Inserter At Limit" msgid "printer-state-reasons.inserter-closed" msgstr "Inserter Closed" msgid "printer-state-reasons.inserter-configuration-change" msgstr "Inserter Configuration Change" msgid "printer-state-reasons.inserter-cover-closed" msgstr "Inserter Cover Closed" msgid "printer-state-reasons.inserter-cover-open" msgstr "Inserter Cover Open" msgid "printer-state-reasons.inserter-empty" msgstr "Inserter Empty" msgid "printer-state-reasons.inserter-full" msgstr "Inserter Full" msgid "printer-state-reasons.inserter-interlock-closed" msgstr "Inserter Interlock Closed" msgid "printer-state-reasons.inserter-interlock-open" msgstr "Inserter Interlock Open" msgid "printer-state-reasons.inserter-jam" msgstr "Inserter Jam" msgid "printer-state-reasons.inserter-life-almost-over" msgstr "Inserter Life Almost Over" msgid "printer-state-reasons.inserter-life-over" msgstr "Inserter Life Over" msgid "printer-state-reasons.inserter-memory-exhausted" msgstr "Inserter Memory Exhausted" msgid "printer-state-reasons.inserter-missing" msgstr "Inserter Missing" msgid "printer-state-reasons.inserter-motor-failure" msgstr "Inserter Motor Failure" msgid "printer-state-reasons.inserter-near-limit" msgstr "Inserter Near Limit" msgid "printer-state-reasons.inserter-offline" msgstr "Inserter Offline" msgid "printer-state-reasons.inserter-opened" msgstr "Inserter Opened" msgid "printer-state-reasons.inserter-over-temperature" msgstr "Inserter Over Temperature" msgid "printer-state-reasons.inserter-power-saver" msgstr "Inserter Power Saver" msgid "printer-state-reasons.inserter-recoverable-failure" msgstr "Inserter Recoverable Failure" msgid "printer-state-reasons.inserter-recoverable-storage" msgstr "Inserter Recoverable Storage" msgid "printer-state-reasons.inserter-removed" msgstr "Inserter Removed" msgid "printer-state-reasons.inserter-resource-added" msgstr "Inserter Resource Added" msgid "printer-state-reasons.inserter-resource-removed" msgstr "Inserter Resource Removed" msgid "printer-state-reasons.inserter-thermistor-failure" msgstr "Inserter Thermistor Failure" msgid "printer-state-reasons.inserter-timing-failure" msgstr "Inserter Timing Failure" msgid "printer-state-reasons.inserter-turned-off" msgstr "Inserter Turned Off" msgid "printer-state-reasons.inserter-turned-on" msgstr "Inserter Turned On" msgid "printer-state-reasons.inserter-under-temperature" msgstr "Inserter Under Temperature" msgid "printer-state-reasons.inserter-unrecoverable-failure" msgstr "Inserter Unrecoverable Failure" msgid "printer-state-reasons.inserter-unrecoverable-storage-error" msgstr "Inserter Unrecoverable Storage Error" msgid "printer-state-reasons.inserter-warming-up" msgstr "Inserter Warming Up" msgid "printer-state-reasons.interlock-closed" msgstr "Interlock Closed" msgid "printer-state-reasons.interlock-open" msgstr "Interlock Open" msgid "printer-state-reasons.interpreter-cartridge-added" msgstr "Interpreter Cartridge Added" msgid "printer-state-reasons.interpreter-cartridge-deleted" msgstr "Interpreter Cartridge Deleted" msgid "printer-state-reasons.interpreter-complex-page-encountered" msgstr "Interpreter Complex Page Encountered" msgid "printer-state-reasons.interpreter-memory-decrease" msgstr "Interpreter Memory Decrease" msgid "printer-state-reasons.interpreter-memory-increase" msgstr "Interpreter Memory Increase" msgid "printer-state-reasons.interpreter-resource-added" msgstr "Interpreter Resource Added" msgid "printer-state-reasons.interpreter-resource-deleted" msgstr "Interpreter Resource Deleted" msgid "printer-state-reasons.interpreter-resource-unavailable" msgstr "Interpreter Resource Unavailable" msgid "printer-state-reasons.lamp-at-eol" msgstr "Lamp At Eol" msgid "printer-state-reasons.lamp-failure" msgstr "Lamp Failure" msgid "printer-state-reasons.lamp-near-eol" msgstr "Lamp Near Eol" msgid "printer-state-reasons.laser-at-eol" msgstr "Laser At Eol" msgid "printer-state-reasons.laser-failure" msgstr "Laser Failure" msgid "printer-state-reasons.laser-near-eol" msgstr "Laser Near Eol" msgid "printer-state-reasons.make-envelope-added" msgstr "Make Envelope Added" msgid "printer-state-reasons.make-envelope-almost-empty" msgstr "Make Envelope Almost Empty" msgid "printer-state-reasons.make-envelope-almost-full" msgstr "Make Envelope Almost Full" msgid "printer-state-reasons.make-envelope-at-limit" msgstr "Make Envelope At Limit" msgid "printer-state-reasons.make-envelope-closed" msgstr "Make Envelope Closed" msgid "printer-state-reasons.make-envelope-configuration-change" msgstr "Make Envelope Configuration Change" msgid "printer-state-reasons.make-envelope-cover-closed" msgstr "Make Envelope Cover Closed" msgid "printer-state-reasons.make-envelope-cover-open" msgstr "Make Envelope Cover Open" msgid "printer-state-reasons.make-envelope-empty" msgstr "Make Envelope Empty" msgid "printer-state-reasons.make-envelope-full" msgstr "Make Envelope Full" msgid "printer-state-reasons.make-envelope-interlock-closed" msgstr "Make Envelope Interlock Closed" msgid "printer-state-reasons.make-envelope-interlock-open" msgstr "Make Envelope Interlock Open" msgid "printer-state-reasons.make-envelope-jam" msgstr "Make Envelope Jam" msgid "printer-state-reasons.make-envelope-life-almost-over" msgstr "Make Envelope Life Almost Over" msgid "printer-state-reasons.make-envelope-life-over" msgstr "Make Envelope Life Over" msgid "printer-state-reasons.make-envelope-memory-exhausted" msgstr "Make Envelope Memory Exhausted" msgid "printer-state-reasons.make-envelope-missing" msgstr "Make Envelope Missing" msgid "printer-state-reasons.make-envelope-motor-failure" msgstr "Make Envelope Motor Failure" msgid "printer-state-reasons.make-envelope-near-limit" msgstr "Make Envelope Near Limit" msgid "printer-state-reasons.make-envelope-offline" msgstr "Make Envelope Offline" msgid "printer-state-reasons.make-envelope-opened" msgstr "Make Envelope Opened" msgid "printer-state-reasons.make-envelope-over-temperature" msgstr "Make Envelope Over Temperature" msgid "printer-state-reasons.make-envelope-power-saver" msgstr "Make Envelope Power Saver" msgid "printer-state-reasons.make-envelope-recoverable-failure" msgstr "Make Envelope Recoverable Failure" msgid "printer-state-reasons.make-envelope-recoverable-storage" msgstr "Make Envelope Recoverable Storage" msgid "printer-state-reasons.make-envelope-removed" msgstr "Make Envelope Removed" msgid "printer-state-reasons.make-envelope-resource-added" msgstr "Make Envelope Resource Added" msgid "printer-state-reasons.make-envelope-resource-removed" msgstr "Make Envelope Resource Removed" msgid "printer-state-reasons.make-envelope-thermistor-failure" msgstr "Make Envelope Thermistor Failure" msgid "printer-state-reasons.make-envelope-timing-failure" msgstr "Make Envelope Timing Failure" msgid "printer-state-reasons.make-envelope-turned-off" msgstr "Make Envelope Turned Off" msgid "printer-state-reasons.make-envelope-turned-on" msgstr "Make Envelope Turned On" msgid "printer-state-reasons.make-envelope-under-temperature" msgstr "Make Envelope Under Temperature" msgid "printer-state-reasons.make-envelope-unrecoverable-failure" msgstr "Make Envelope Unrecoverable Failure" msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error" msgstr "Make Envelope Unrecoverable Storage Error" msgid "printer-state-reasons.make-envelope-warming-up" msgstr "Make Envelope Warming Up" msgid "printer-state-reasons.marker-adjusting-print-quality" msgstr "Marker Adjusting Print Quality" msgid "printer-state-reasons.marker-developer-almost-empty" msgstr "Marker Developer Almost Empty" msgid "printer-state-reasons.marker-developer-empty" msgstr "Marker Developer Empty" msgid "printer-state-reasons.marker-fuser-thermistor-failure" msgstr "Marker Fuser Thermistor Failure" msgid "printer-state-reasons.marker-fuser-timing-failure" msgstr "Marker Fuser Timing Failure" msgid "printer-state-reasons.marker-ink-almost-empty" msgstr "Marker Ink Almost Empty" msgid "printer-state-reasons.marker-ink-empty" msgstr "Marker Ink Empty" msgid "printer-state-reasons.marker-print-ribbon-almost-empty" msgstr "Marker Print Ribbon Almost Empty" msgid "printer-state-reasons.marker-print-ribbon-empty" msgstr "Marker Print Ribbon Empty" msgid "printer-state-reasons.marker-supply-empty" msgstr "Marker Supply Empty" msgid "printer-state-reasons.marker-supply-low" msgstr "Marker Supply Low" msgid "printer-state-reasons.marker-toner-cartridge-missing" msgstr "Marker Toner Cartridge Missing" msgid "printer-state-reasons.marker-waste-almost-full" msgstr "Marker Waste Almost Full" msgid "printer-state-reasons.marker-waste-full" msgstr "Marker Waste Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full" msgstr "Marker Waste Ink Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-full" msgstr "Marker Waste Ink Receptacle Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full" msgstr "Marker Waste Toner Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-full" msgstr "Marker Waste Toner Receptacle Full" msgid "printer-state-reasons.material-empty" msgstr "Material Empty" msgid "printer-state-reasons.material-low" msgstr "Material Low" msgid "printer-state-reasons.material-needed" msgstr "Material Needed" msgid "printer-state-reasons.media-empty" msgstr "Media Empty" msgid "printer-state-reasons.media-jam" msgstr "Media Jam" msgid "printer-state-reasons.media-low" msgstr "Media Low" msgid "printer-state-reasons.media-needed" msgstr "Media Needed" msgid "printer-state-reasons.media-path-cannot-duplex-media-selected" msgstr "Media Path Cannot Duplex Media Selected" msgid "printer-state-reasons.media-path-media-tray-almost-full" msgstr "Media Path Media Tray Almost Full" msgid "printer-state-reasons.media-path-media-tray-full" msgstr "Media Path Media Tray Full" msgid "printer-state-reasons.media-path-media-tray-missing" msgstr "Media Path Media Tray Missing" msgid "printer-state-reasons.motor-failure" msgstr "Motor Failure" msgid "printer-state-reasons.moving-to-paused" msgstr "Moving To Paused" msgid "printer-state-reasons.none" msgstr "None" msgid "printer-state-reasons.opc-life-over" msgstr "Opc Life Over" msgid "printer-state-reasons.opc-near-eol" msgstr "Opc Near Eol" msgid "printer-state-reasons.other" msgstr "Other" msgid "printer-state-reasons.output-area-almost-full" msgstr "Output Area Almost Full" msgid "printer-state-reasons.output-area-full" msgstr "Output Area Full" msgid "printer-state-reasons.output-mailbox-select-failure" msgstr "Output Mailbox Select Failure" msgid "printer-state-reasons.output-tray-missing" msgstr "Output Tray Missing" msgid "printer-state-reasons.paused" msgstr "Paused" msgid "printer-state-reasons.perforater-added" msgstr "Perforater Added" msgid "printer-state-reasons.perforater-almost-empty" msgstr "Perforater Almost Empty" msgid "printer-state-reasons.perforater-almost-full" msgstr "Perforater Almost Full" msgid "printer-state-reasons.perforater-at-limit" msgstr "Perforater At Limit" msgid "printer-state-reasons.perforater-closed" msgstr "Perforater Closed" msgid "printer-state-reasons.perforater-configuration-change" msgstr "Perforater Configuration Change" msgid "printer-state-reasons.perforater-cover-closed" msgstr "Perforater Cover Closed" msgid "printer-state-reasons.perforater-cover-open" msgstr "Perforater Cover Open" msgid "printer-state-reasons.perforater-empty" msgstr "Perforater Empty" msgid "printer-state-reasons.perforater-full" msgstr "Perforater Full" msgid "printer-state-reasons.perforater-interlock-closed" msgstr "Perforater Interlock Closed" msgid "printer-state-reasons.perforater-interlock-open" msgstr "Perforater Interlock Open" msgid "printer-state-reasons.perforater-jam" msgstr "Perforater Jam" msgid "printer-state-reasons.perforater-life-almost-over" msgstr "Perforater Life Almost Over" msgid "printer-state-reasons.perforater-life-over" msgstr "Perforater Life Over" msgid "printer-state-reasons.perforater-memory-exhausted" msgstr "Perforater Memory Exhausted" msgid "printer-state-reasons.perforater-missing" msgstr "Perforater Missing" msgid "printer-state-reasons.perforater-motor-failure" msgstr "Perforater Motor Failure" msgid "printer-state-reasons.perforater-near-limit" msgstr "Perforater Near Limit" msgid "printer-state-reasons.perforater-offline" msgstr "Perforater Offline" msgid "printer-state-reasons.perforater-opened" msgstr "Perforater Opened" msgid "printer-state-reasons.perforater-over-temperature" msgstr "Perforater Over Temperature" msgid "printer-state-reasons.perforater-power-saver" msgstr "Perforater Power Saver" msgid "printer-state-reasons.perforater-recoverable-failure" msgstr "Perforater Recoverable Failure" msgid "printer-state-reasons.perforater-recoverable-storage" msgstr "Perforater Recoverable Storage" msgid "printer-state-reasons.perforater-removed" msgstr "Perforater Removed" msgid "printer-state-reasons.perforater-resource-added" msgstr "Perforater Resource Added" msgid "printer-state-reasons.perforater-resource-removed" msgstr "Perforater Resource Removed" msgid "printer-state-reasons.perforater-thermistor-failure" msgstr "Perforater Thermistor Failure" msgid "printer-state-reasons.perforater-timing-failure" msgstr "Perforater Timing Failure" msgid "printer-state-reasons.perforater-turned-off" msgstr "Perforater Turned Off" msgid "printer-state-reasons.perforater-turned-on" msgstr "Perforater Turned On" msgid "printer-state-reasons.perforater-under-temperature" msgstr "Perforater Under Temperature" msgid "printer-state-reasons.perforater-unrecoverable-failure" msgstr "Perforater Unrecoverable Failure" msgid "printer-state-reasons.perforater-unrecoverable-storage-error" msgstr "Perforater Unrecoverable Storage Error" msgid "printer-state-reasons.perforater-warming-up" msgstr "Perforater Warming Up" msgid "printer-state-reasons.power-down" msgstr "Power Down" msgid "printer-state-reasons.power-up" msgstr "Power Up" msgid "printer-state-reasons.printer-manual-reset" msgstr "Printer Manual Reset" msgid "printer-state-reasons.printer-nms-reset" msgstr "Printer Nms Reset" msgid "printer-state-reasons.printer-ready-to-print" msgstr "Printer Ready To Print" msgid "printer-state-reasons.puncher-added" msgstr "Puncher Added" msgid "printer-state-reasons.puncher-almost-empty" msgstr "Puncher Almost Empty" msgid "printer-state-reasons.puncher-almost-full" msgstr "Puncher Almost Full" msgid "printer-state-reasons.puncher-at-limit" msgstr "Puncher At Limit" msgid "printer-state-reasons.puncher-closed" msgstr "Puncher Closed" msgid "printer-state-reasons.puncher-configuration-change" msgstr "Puncher Configuration Change" msgid "printer-state-reasons.puncher-cover-closed" msgstr "Puncher Cover Closed" msgid "printer-state-reasons.puncher-cover-open" msgstr "Puncher Cover Open" msgid "printer-state-reasons.puncher-empty" msgstr "Puncher Empty" msgid "printer-state-reasons.puncher-full" msgstr "Puncher Full" msgid "printer-state-reasons.puncher-interlock-closed" msgstr "Puncher Interlock Closed" msgid "printer-state-reasons.puncher-interlock-open" msgstr "Puncher Interlock Open" msgid "printer-state-reasons.puncher-jam" msgstr "Puncher Jam" msgid "printer-state-reasons.puncher-life-almost-over" msgstr "Puncher Life Almost Over" msgid "printer-state-reasons.puncher-life-over" msgstr "Puncher Life Over" msgid "printer-state-reasons.puncher-memory-exhausted" msgstr "Puncher Memory Exhausted" msgid "printer-state-reasons.puncher-missing" msgstr "Puncher Missing" msgid "printer-state-reasons.puncher-motor-failure" msgstr "Puncher Motor Failure" msgid "printer-state-reasons.puncher-near-limit" msgstr "Puncher Near Limit" msgid "printer-state-reasons.puncher-offline" msgstr "Puncher Offline" msgid "printer-state-reasons.puncher-opened" msgstr "Puncher Opened" msgid "printer-state-reasons.puncher-over-temperature" msgstr "Puncher Over Temperature" msgid "printer-state-reasons.puncher-power-saver" msgstr "Puncher Power Saver" msgid "printer-state-reasons.puncher-recoverable-failure" msgstr "Puncher Recoverable Failure" msgid "printer-state-reasons.puncher-recoverable-storage" msgstr "Puncher Recoverable Storage" msgid "printer-state-reasons.puncher-removed" msgstr "Puncher Removed" msgid "printer-state-reasons.puncher-resource-added" msgstr "Puncher Resource Added" msgid "printer-state-reasons.puncher-resource-removed" msgstr "Puncher Resource Removed" msgid "printer-state-reasons.puncher-thermistor-failure" msgstr "Puncher Thermistor Failure" msgid "printer-state-reasons.puncher-timing-failure" msgstr "Puncher Timing Failure" msgid "printer-state-reasons.puncher-turned-off" msgstr "Puncher Turned Off" msgid "printer-state-reasons.puncher-turned-on" msgstr "Puncher Turned On" msgid "printer-state-reasons.puncher-under-temperature" msgstr "Puncher Under Temperature" msgid "printer-state-reasons.puncher-unrecoverable-failure" msgstr "Puncher Unrecoverable Failure" msgid "printer-state-reasons.puncher-unrecoverable-storage-error" msgstr "Puncher Unrecoverable Storage Error" msgid "printer-state-reasons.puncher-warming-up" msgstr "Puncher Warming Up" msgid "printer-state-reasons.separation-cutter-added" msgstr "Separation Cutter Added" msgid "printer-state-reasons.separation-cutter-almost-empty" msgstr "Separation Cutter Almost Empty" msgid "printer-state-reasons.separation-cutter-almost-full" msgstr "Separation Cutter Almost Full" msgid "printer-state-reasons.separation-cutter-at-limit" msgstr "Separation Cutter At Limit" msgid "printer-state-reasons.separation-cutter-closed" msgstr "Separation Cutter Closed" msgid "printer-state-reasons.separation-cutter-configuration-change" msgstr "Separation Cutter Configuration Change" msgid "printer-state-reasons.separation-cutter-cover-closed" msgstr "Separation Cutter Cover Closed" msgid "printer-state-reasons.separation-cutter-cover-open" msgstr "Separation Cutter Cover Open" msgid "printer-state-reasons.separation-cutter-empty" msgstr "Separation Cutter Empty" msgid "printer-state-reasons.separation-cutter-full" msgstr "Separation Cutter Full" msgid "printer-state-reasons.separation-cutter-interlock-closed" msgstr "Separation Cutter Interlock Closed" msgid "printer-state-reasons.separation-cutter-interlock-open" msgstr "Separation Cutter Interlock Open" msgid "printer-state-reasons.separation-cutter-jam" msgstr "Separation Cutter Jam" msgid "printer-state-reasons.separation-cutter-life-almost-over" msgstr "Separation Cutter Life Almost Over" msgid "printer-state-reasons.separation-cutter-life-over" msgstr "Separation Cutter Life Over" msgid "printer-state-reasons.separation-cutter-memory-exhausted" msgstr "Separation Cutter Memory Exhausted" msgid "printer-state-reasons.separation-cutter-missing" msgstr "Separation Cutter Missing" msgid "printer-state-reasons.separation-cutter-motor-failure" msgstr "Separation Cutter Motor Failure" msgid "printer-state-reasons.separation-cutter-near-limit" msgstr "Separation Cutter Near Limit" msgid "printer-state-reasons.separation-cutter-offline" msgstr "Separation Cutter Offline" msgid "printer-state-reasons.separation-cutter-opened" msgstr "Separation Cutter Opened" msgid "printer-state-reasons.separation-cutter-over-temperature" msgstr "Separation Cutter Over Temperature" msgid "printer-state-reasons.separation-cutter-power-saver" msgstr "Separation Cutter Power Saver" msgid "printer-state-reasons.separation-cutter-recoverable-failure" msgstr "Separation Cutter Recoverable Failure" msgid "printer-state-reasons.separation-cutter-recoverable-storage" msgstr "Separation Cutter Recoverable Storage" msgid "printer-state-reasons.separation-cutter-removed" msgstr "Separation Cutter Removed" msgid "printer-state-reasons.separation-cutter-resource-added" msgstr "Separation Cutter Resource Added" msgid "printer-state-reasons.separation-cutter-resource-removed" msgstr "Separation Cutter Resource Removed" msgid "printer-state-reasons.separation-cutter-thermistor-failure" msgstr "Separation Cutter Thermistor Failure" msgid "printer-state-reasons.separation-cutter-timing-failure" msgstr "Separation Cutter Timing Failure" msgid "printer-state-reasons.separation-cutter-turned-off" msgstr "Separation Cutter Turned Off" msgid "printer-state-reasons.separation-cutter-turned-on" msgstr "Separation Cutter Turned On" msgid "printer-state-reasons.separation-cutter-under-temperature" msgstr "Separation Cutter Under Temperature" msgid "printer-state-reasons.separation-cutter-unrecoverable-failure" msgstr "Separation Cutter Unrecoverable Failure" msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error" msgstr "Separation Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.separation-cutter-warming-up" msgstr "Separation Cutter Warming Up" msgid "printer-state-reasons.sheet-rotator-added" msgstr "Sheet Rotator Added" msgid "printer-state-reasons.sheet-rotator-almost-empty" msgstr "Sheet Rotator Almost Empty" msgid "printer-state-reasons.sheet-rotator-almost-full" msgstr "Sheet Rotator Almost Full" msgid "printer-state-reasons.sheet-rotator-at-limit" msgstr "Sheet Rotator At Limit" msgid "printer-state-reasons.sheet-rotator-closed" msgstr "Sheet Rotator Closed" msgid "printer-state-reasons.sheet-rotator-configuration-change" msgstr "Sheet Rotator Configuration Change" msgid "printer-state-reasons.sheet-rotator-cover-closed" msgstr "Sheet Rotator Cover Closed" msgid "printer-state-reasons.sheet-rotator-cover-open" msgstr "Sheet Rotator Cover Open" msgid "printer-state-reasons.sheet-rotator-empty" msgstr "Sheet Rotator Empty" msgid "printer-state-reasons.sheet-rotator-full" msgstr "Sheet Rotator Full" msgid "printer-state-reasons.sheet-rotator-interlock-closed" msgstr "Sheet Rotator Interlock Closed" msgid "printer-state-reasons.sheet-rotator-interlock-open" msgstr "Sheet Rotator Interlock Open" msgid "printer-state-reasons.sheet-rotator-jam" msgstr "Sheet Rotator Jam" msgid "printer-state-reasons.sheet-rotator-life-almost-over" msgstr "Sheet Rotator Life Almost Over" msgid "printer-state-reasons.sheet-rotator-life-over" msgstr "Sheet Rotator Life Over" msgid "printer-state-reasons.sheet-rotator-memory-exhausted" msgstr "Sheet Rotator Memory Exhausted" msgid "printer-state-reasons.sheet-rotator-missing" msgstr "Sheet Rotator Missing" msgid "printer-state-reasons.sheet-rotator-motor-failure" msgstr "Sheet Rotator Motor Failure" msgid "printer-state-reasons.sheet-rotator-near-limit" msgstr "Sheet Rotator Near Limit" msgid "printer-state-reasons.sheet-rotator-offline" msgstr "Sheet Rotator Offline" msgid "printer-state-reasons.sheet-rotator-opened" msgstr "Sheet Rotator Opened" msgid "printer-state-reasons.sheet-rotator-over-temperature" msgstr "Sheet Rotator Over Temperature" msgid "printer-state-reasons.sheet-rotator-power-saver" msgstr "Sheet Rotator Power Saver" msgid "printer-state-reasons.sheet-rotator-recoverable-failure" msgstr "Sheet Rotator Recoverable Failure" msgid "printer-state-reasons.sheet-rotator-recoverable-storage" msgstr "Sheet Rotator Recoverable Storage" msgid "printer-state-reasons.sheet-rotator-removed" msgstr "Sheet Rotator Removed" msgid "printer-state-reasons.sheet-rotator-resource-added" msgstr "Sheet Rotator Resource Added" msgid "printer-state-reasons.sheet-rotator-resource-removed" msgstr "Sheet Rotator Resource Removed" msgid "printer-state-reasons.sheet-rotator-thermistor-failure" msgstr "Sheet Rotator Thermistor Failure" msgid "printer-state-reasons.sheet-rotator-timing-failure" msgstr "Sheet Rotator Timing Failure" msgid "printer-state-reasons.sheet-rotator-turned-off" msgstr "Sheet Rotator Turned Off" msgid "printer-state-reasons.sheet-rotator-turned-on" msgstr "Sheet Rotator Turned On" msgid "printer-state-reasons.sheet-rotator-under-temperature" msgstr "Sheet Rotator Under Temperature" msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure" msgstr "Sheet Rotator Unrecoverable Failure" msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" msgstr "Sheet Rotator Unrecoverable Storage Error" msgid "printer-state-reasons.sheet-rotator-warming-up" msgstr "Sheet Rotator Warming Up" msgid "printer-state-reasons.shutdown" msgstr "Shutdown" msgid "printer-state-reasons.slitter-added" msgstr "Slitter Added" msgid "printer-state-reasons.slitter-almost-empty" msgstr "Slitter Almost Empty" msgid "printer-state-reasons.slitter-almost-full" msgstr "Slitter Almost Full" msgid "printer-state-reasons.slitter-at-limit" msgstr "Slitter At Limit" msgid "printer-state-reasons.slitter-closed" msgstr "Slitter Closed" msgid "printer-state-reasons.slitter-configuration-change" msgstr "Slitter Configuration Change" msgid "printer-state-reasons.slitter-cover-closed" msgstr "Slitter Cover Closed" msgid "printer-state-reasons.slitter-cover-open" msgstr "Slitter Cover Open" msgid "printer-state-reasons.slitter-empty" msgstr "Slitter Empty" msgid "printer-state-reasons.slitter-full" msgstr "Slitter Full" msgid "printer-state-reasons.slitter-interlock-closed" msgstr "Slitter Interlock Closed" msgid "printer-state-reasons.slitter-interlock-open" msgstr "Slitter Interlock Open" msgid "printer-state-reasons.slitter-jam" msgstr "Slitter Jam" msgid "printer-state-reasons.slitter-life-almost-over" msgstr "Slitter Life Almost Over" msgid "printer-state-reasons.slitter-life-over" msgstr "Slitter Life Over" msgid "printer-state-reasons.slitter-memory-exhausted" msgstr "Slitter Memory Exhausted" msgid "printer-state-reasons.slitter-missing" msgstr "Slitter Missing" msgid "printer-state-reasons.slitter-motor-failure" msgstr "Slitter Motor Failure" msgid "printer-state-reasons.slitter-near-limit" msgstr "Slitter Near Limit" msgid "printer-state-reasons.slitter-offline" msgstr "Slitter Offline" msgid "printer-state-reasons.slitter-opened" msgstr "Slitter Opened" msgid "printer-state-reasons.slitter-over-temperature" msgstr "Slitter Over Temperature" msgid "printer-state-reasons.slitter-power-saver" msgstr "Slitter Power Saver" msgid "printer-state-reasons.slitter-recoverable-failure" msgstr "Slitter Recoverable Failure" msgid "printer-state-reasons.slitter-recoverable-storage" msgstr "Slitter Recoverable Storage" msgid "printer-state-reasons.slitter-removed" msgstr "Slitter Removed" msgid "printer-state-reasons.slitter-resource-added" msgstr "Slitter Resource Added" msgid "printer-state-reasons.slitter-resource-removed" msgstr "Slitter Resource Removed" msgid "printer-state-reasons.slitter-thermistor-failure" msgstr "Slitter Thermistor Failure" msgid "printer-state-reasons.slitter-timing-failure" msgstr "Slitter Timing Failure" msgid "printer-state-reasons.slitter-turned-off" msgstr "Slitter Turned Off" msgid "printer-state-reasons.slitter-turned-on" msgstr "Slitter Turned On" msgid "printer-state-reasons.slitter-under-temperature" msgstr "Slitter Under Temperature" msgid "printer-state-reasons.slitter-unrecoverable-failure" msgstr "Slitter Unrecoverable Failure" msgid "printer-state-reasons.slitter-unrecoverable-storage-error" msgstr "Slitter Unrecoverable Storage Error" msgid "printer-state-reasons.slitter-warming-up" msgstr "Slitter Warming Up" msgid "printer-state-reasons.spool-area-full" msgstr "Spool Area Full" msgid "printer-state-reasons.stacker-added" msgstr "Stacker Added" msgid "printer-state-reasons.stacker-almost-empty" msgstr "Stacker Almost Empty" msgid "printer-state-reasons.stacker-almost-full" msgstr "Stacker Almost Full" msgid "printer-state-reasons.stacker-at-limit" msgstr "Stacker At Limit" msgid "printer-state-reasons.stacker-closed" msgstr "Stacker Closed" msgid "printer-state-reasons.stacker-configuration-change" msgstr "Stacker Configuration Change" msgid "printer-state-reasons.stacker-cover-closed" msgstr "Stacker Cover Closed" msgid "printer-state-reasons.stacker-cover-open" msgstr "Stacker Cover Open" msgid "printer-state-reasons.stacker-empty" msgstr "Stacker Empty" msgid "printer-state-reasons.stacker-full" msgstr "Stacker Full" msgid "printer-state-reasons.stacker-interlock-closed" msgstr "Stacker Interlock Closed" msgid "printer-state-reasons.stacker-interlock-open" msgstr "Stacker Interlock Open" msgid "printer-state-reasons.stacker-jam" msgstr "Stacker Jam" msgid "printer-state-reasons.stacker-life-almost-over" msgstr "Stacker Life Almost Over" msgid "printer-state-reasons.stacker-life-over" msgstr "Stacker Life Over" msgid "printer-state-reasons.stacker-memory-exhausted" msgstr "Stacker Memory Exhausted" msgid "printer-state-reasons.stacker-missing" msgstr "Stacker Missing" msgid "printer-state-reasons.stacker-motor-failure" msgstr "Stacker Motor Failure" msgid "printer-state-reasons.stacker-near-limit" msgstr "Stacker Near Limit" msgid "printer-state-reasons.stacker-offline" msgstr "Stacker Offline" msgid "printer-state-reasons.stacker-opened" msgstr "Stacker Opened" msgid "printer-state-reasons.stacker-over-temperature" msgstr "Stacker Over Temperature" msgid "printer-state-reasons.stacker-power-saver" msgstr "Stacker Power Saver" msgid "printer-state-reasons.stacker-recoverable-failure" msgstr "Stacker Recoverable Failure" msgid "printer-state-reasons.stacker-recoverable-storage" msgstr "Stacker Recoverable Storage" msgid "printer-state-reasons.stacker-removed" msgstr "Stacker Removed" msgid "printer-state-reasons.stacker-resource-added" msgstr "Stacker Resource Added" msgid "printer-state-reasons.stacker-resource-removed" msgstr "Stacker Resource Removed" msgid "printer-state-reasons.stacker-thermistor-failure" msgstr "Stacker Thermistor Failure" msgid "printer-state-reasons.stacker-timing-failure" msgstr "Stacker Timing Failure" msgid "printer-state-reasons.stacker-turned-off" msgstr "Stacker Turned Off" msgid "printer-state-reasons.stacker-turned-on" msgstr "Stacker Turned On" msgid "printer-state-reasons.stacker-under-temperature" msgstr "Stacker Under Temperature" msgid "printer-state-reasons.stacker-unrecoverable-failure" msgstr "Stacker Unrecoverable Failure" msgid "printer-state-reasons.stacker-unrecoverable-storage-error" msgstr "Stacker Unrecoverable Storage Error" msgid "printer-state-reasons.stacker-warming-up" msgstr "Stacker Warming Up" msgid "printer-state-reasons.stapler-added" msgstr "Stapler Added" msgid "printer-state-reasons.stapler-almost-empty" msgstr "Stapler Almost Empty" msgid "printer-state-reasons.stapler-almost-full" msgstr "Stapler Almost Full" msgid "printer-state-reasons.stapler-at-limit" msgstr "Stapler At Limit" msgid "printer-state-reasons.stapler-closed" msgstr "Stapler Closed" msgid "printer-state-reasons.stapler-configuration-change" msgstr "Stapler Configuration Change" msgid "printer-state-reasons.stapler-cover-closed" msgstr "Stapler Cover Closed" msgid "printer-state-reasons.stapler-cover-open" msgstr "Stapler Cover Open" msgid "printer-state-reasons.stapler-empty" msgstr "Stapler Empty" msgid "printer-state-reasons.stapler-full" msgstr "Stapler Full" msgid "printer-state-reasons.stapler-interlock-closed" msgstr "Stapler Interlock Closed" msgid "printer-state-reasons.stapler-interlock-open" msgstr "Stapler Interlock Open" msgid "printer-state-reasons.stapler-jam" msgstr "Stapler Jam" msgid "printer-state-reasons.stapler-life-almost-over" msgstr "Stapler Life Almost Over" msgid "printer-state-reasons.stapler-life-over" msgstr "Stapler Life Over" msgid "printer-state-reasons.stapler-memory-exhausted" msgstr "Stapler Memory Exhausted" msgid "printer-state-reasons.stapler-missing" msgstr "Stapler Missing" msgid "printer-state-reasons.stapler-motor-failure" msgstr "Stapler Motor Failure" msgid "printer-state-reasons.stapler-near-limit" msgstr "Stapler Near Limit" msgid "printer-state-reasons.stapler-offline" msgstr "Stapler Offline" msgid "printer-state-reasons.stapler-opened" msgstr "Stapler Opened" msgid "printer-state-reasons.stapler-over-temperature" msgstr "Stapler Over Temperature" msgid "printer-state-reasons.stapler-power-saver" msgstr "Stapler Power Saver" msgid "printer-state-reasons.stapler-recoverable-failure" msgstr "Stapler Recoverable Failure" msgid "printer-state-reasons.stapler-recoverable-storage" msgstr "Stapler Recoverable Storage" msgid "printer-state-reasons.stapler-removed" msgstr "Stapler Removed" msgid "printer-state-reasons.stapler-resource-added" msgstr "Stapler Resource Added" msgid "printer-state-reasons.stapler-resource-removed" msgstr "Stapler Resource Removed" msgid "printer-state-reasons.stapler-thermistor-failure" msgstr "Stapler Thermistor Failure" msgid "printer-state-reasons.stapler-timing-failure" msgstr "Stapler Timing Failure" msgid "printer-state-reasons.stapler-turned-off" msgstr "Stapler Turned Off" msgid "printer-state-reasons.stapler-turned-on" msgstr "Stapler Turned On" msgid "printer-state-reasons.stapler-under-temperature" msgstr "Stapler Under Temperature" msgid "printer-state-reasons.stapler-unrecoverable-failure" msgstr "Stapler Unrecoverable Failure" msgid "printer-state-reasons.stapler-unrecoverable-storage-error" msgstr "Stapler Unrecoverable Storage Error" msgid "printer-state-reasons.stapler-warming-up" msgstr "Stapler Warming Up" msgid "printer-state-reasons.stitcher-added" msgstr "Stitcher Added" msgid "printer-state-reasons.stitcher-almost-empty" msgstr "Stitcher Almost Empty" msgid "printer-state-reasons.stitcher-almost-full" msgstr "Stitcher Almost Full" msgid "printer-state-reasons.stitcher-at-limit" msgstr "Stitcher At Limit" msgid "printer-state-reasons.stitcher-closed" msgstr "Stitcher Closed" msgid "printer-state-reasons.stitcher-configuration-change" msgstr "Stitcher Configuration Change" msgid "printer-state-reasons.stitcher-cover-closed" msgstr "Stitcher Cover Closed" msgid "printer-state-reasons.stitcher-cover-open" msgstr "Stitcher Cover Open" msgid "printer-state-reasons.stitcher-empty" msgstr "Stitcher Empty" msgid "printer-state-reasons.stitcher-full" msgstr "Stitcher Full" msgid "printer-state-reasons.stitcher-interlock-closed" msgstr "Stitcher Interlock Closed" msgid "printer-state-reasons.stitcher-interlock-open" msgstr "Stitcher Interlock Open" msgid "printer-state-reasons.stitcher-jam" msgstr "Stitcher Jam" msgid "printer-state-reasons.stitcher-life-almost-over" msgstr "Stitcher Life Almost Over" msgid "printer-state-reasons.stitcher-life-over" msgstr "Stitcher Life Over" msgid "printer-state-reasons.stitcher-memory-exhausted" msgstr "Stitcher Memory Exhausted" msgid "printer-state-reasons.stitcher-missing" msgstr "Stitcher Missing" msgid "printer-state-reasons.stitcher-motor-failure" msgstr "Stitcher Motor Failure" msgid "printer-state-reasons.stitcher-near-limit" msgstr "Stitcher Near Limit" msgid "printer-state-reasons.stitcher-offline" msgstr "Stitcher Offline" msgid "printer-state-reasons.stitcher-opened" msgstr "Stitcher Opened" msgid "printer-state-reasons.stitcher-over-temperature" msgstr "Stitcher Over Temperature" msgid "printer-state-reasons.stitcher-power-saver" msgstr "Stitcher Power Saver" msgid "printer-state-reasons.stitcher-recoverable-failure" msgstr "Stitcher Recoverable Failure" msgid "printer-state-reasons.stitcher-recoverable-storage" msgstr "Stitcher Recoverable Storage" msgid "printer-state-reasons.stitcher-removed" msgstr "Stitcher Removed" msgid "printer-state-reasons.stitcher-resource-added" msgstr "Stitcher Resource Added" msgid "printer-state-reasons.stitcher-resource-removed" msgstr "Stitcher Resource Removed" msgid "printer-state-reasons.stitcher-thermistor-failure" msgstr "Stitcher Thermistor Failure" msgid "printer-state-reasons.stitcher-timing-failure" msgstr "Stitcher Timing Failure" msgid "printer-state-reasons.stitcher-turned-off" msgstr "Stitcher Turned Off" msgid "printer-state-reasons.stitcher-turned-on" msgstr "Stitcher Turned On" msgid "printer-state-reasons.stitcher-under-temperature" msgstr "Stitcher Under Temperature" msgid "printer-state-reasons.stitcher-unrecoverable-failure" msgstr "Stitcher Unrecoverable Failure" msgid "printer-state-reasons.stitcher-unrecoverable-storage-error" msgstr "Stitcher Unrecoverable Storage Error" msgid "printer-state-reasons.stitcher-warming-up" msgstr "Stitcher Warming Up" msgid "printer-state-reasons.stopped-partly" msgstr "Stopped Partly" msgid "printer-state-reasons.stopping" msgstr "Stopping" msgid "printer-state-reasons.subunit-added" msgstr "Subunit Added" msgid "printer-state-reasons.subunit-almost-empty" msgstr "Subunit Almost Empty" msgid "printer-state-reasons.subunit-almost-full" msgstr "Subunit Almost Full" msgid "printer-state-reasons.subunit-at-limit" msgstr "Subunit At Limit" msgid "printer-state-reasons.subunit-closed" msgstr "Subunit Closed" msgid "printer-state-reasons.subunit-empty" msgstr "Subunit Empty" msgid "printer-state-reasons.subunit-full" msgstr "Subunit Full" msgid "printer-state-reasons.subunit-life-almost-over" msgstr "Subunit Life Almost Over" msgid "printer-state-reasons.subunit-life-over" msgstr "Subunit Life Over" msgid "printer-state-reasons.subunit-memory-exhausted" msgstr "Subunit Memory Exhausted" msgid "printer-state-reasons.subunit-missing" msgstr "Subunit Missing" msgid "printer-state-reasons.subunit-motor-failure" msgstr "Subunit Motor Failure" msgid "printer-state-reasons.subunit-near-limit" msgstr "Subunit Near Limit" msgid "printer-state-reasons.subunit-offline" msgstr "Subunit Offline" msgid "printer-state-reasons.subunit-opened" msgstr "Subunit Opened" msgid "printer-state-reasons.subunit-over-temperature" msgstr "Subunit Over Temperature" msgid "printer-state-reasons.subunit-power-saver" msgstr "Subunit Power Saver" msgid "printer-state-reasons.subunit-recoverable-failure" msgstr "Subunit Recoverable Failure" msgid "printer-state-reasons.subunit-recoverable-storage" msgstr "Subunit Recoverable Storage" msgid "printer-state-reasons.subunit-removed" msgstr "Subunit Removed" msgid "printer-state-reasons.subunit-resource-added" msgstr "Subunit Resource Added" msgid "printer-state-reasons.subunit-resource-removed" msgstr "Subunit Resource Removed" msgid "printer-state-reasons.subunit-thermistor-failure" msgstr "Subunit Thermistor Failure" msgid "printer-state-reasons.subunit-timing-Failure" msgstr "Subunit Timing Failure" msgid "printer-state-reasons.subunit-turned-off" msgstr "Subunit Turned Off" msgid "printer-state-reasons.subunit-turned-on" msgstr "Subunit Turned On" msgid "printer-state-reasons.subunit-under-temperature" msgstr "Subunit Under Temperature" msgid "printer-state-reasons.subunit-unrecoverable-failure" msgstr "Subunit Unrecoverable Failure" msgid "printer-state-reasons.subunit-unrecoverable-storage" msgstr "Subunit Unrecoverable Storage" msgid "printer-state-reasons.subunit-warming-up" msgstr "Subunit Warming Up" msgid "printer-state-reasons.timed-out" msgstr "Timed Out" msgid "printer-state-reasons.toner-empty" msgstr "Toner Empty" msgid "printer-state-reasons.toner-low" msgstr "Toner Low" msgid "printer-state-reasons.trimmer-added" msgstr "Trimmer Added" msgid "printer-state-reasons.trimmer-almost-empty" msgstr "Trimmer Almost Empty" msgid "printer-state-reasons.trimmer-almost-full" msgstr "Trimmer Almost Full" msgid "printer-state-reasons.trimmer-at-limit" msgstr "Trimmer At Limit" msgid "printer-state-reasons.trimmer-closed" msgstr "Trimmer Closed" msgid "printer-state-reasons.trimmer-configuration-change" msgstr "Trimmer Configuration Change" msgid "printer-state-reasons.trimmer-cover-closed" msgstr "Trimmer Cover Closed" msgid "printer-state-reasons.trimmer-cover-open" msgstr "Trimmer Cover Open" msgid "printer-state-reasons.trimmer-empty" msgstr "Trimmer Empty" msgid "printer-state-reasons.trimmer-full" msgstr "Trimmer Full" msgid "printer-state-reasons.trimmer-interlock-closed" msgstr "Trimmer Interlock Closed" msgid "printer-state-reasons.trimmer-interlock-open" msgstr "Trimmer Interlock Open" msgid "printer-state-reasons.trimmer-jam" msgstr "Trimmer Jam" msgid "printer-state-reasons.trimmer-life-almost-over" msgstr "Trimmer Life Almost Over" msgid "printer-state-reasons.trimmer-life-over" msgstr "Trimmer Life Over" msgid "printer-state-reasons.trimmer-memory-exhausted" msgstr "Trimmer Memory Exhausted" msgid "printer-state-reasons.trimmer-missing" msgstr "Trimmer Missing" msgid "printer-state-reasons.trimmer-motor-failure" msgstr "Trimmer Motor Failure" msgid "printer-state-reasons.trimmer-near-limit" msgstr "Trimmer Near Limit" msgid "printer-state-reasons.trimmer-offline" msgstr "Trimmer Offline" msgid "printer-state-reasons.trimmer-opened" msgstr "Trimmer Opened" msgid "printer-state-reasons.trimmer-over-temperature" msgstr "Trimmer Over Temperature" msgid "printer-state-reasons.trimmer-power-saver" msgstr "Trimmer Power Saver" msgid "printer-state-reasons.trimmer-recoverable-failure" msgstr "Trimmer Recoverable Failure" msgid "printer-state-reasons.trimmer-recoverable-storage" msgstr "Trimmer Recoverable Storage" msgid "printer-state-reasons.trimmer-removed" msgstr "Trimmer Removed" msgid "printer-state-reasons.trimmer-resource-added" msgstr "Trimmer Resource Added" msgid "printer-state-reasons.trimmer-resource-removed" msgstr "Trimmer Resource Removed" msgid "printer-state-reasons.trimmer-thermistor-failure" msgstr "Trimmer Thermistor Failure" msgid "printer-state-reasons.trimmer-timing-failure" msgstr "Trimmer Timing Failure" msgid "printer-state-reasons.trimmer-turned-off" msgstr "Trimmer Turned Off" msgid "printer-state-reasons.trimmer-turned-on" msgstr "Trimmer Turned On" msgid "printer-state-reasons.trimmer-under-temperature" msgstr "Trimmer Under Temperature" msgid "printer-state-reasons.trimmer-unrecoverable-failure" msgstr "Trimmer Unrecoverable Failure" msgid "printer-state-reasons.trimmer-unrecoverable-storage-error" msgstr "Trimmer Unrecoverable Storage Error" msgid "printer-state-reasons.trimmer-warming-up" msgstr "Trimmer Warming Up" msgid "printer-state-reasons.unknown" msgstr "Unknown" msgid "printer-state-reasons.wrapper-added" msgstr "Wrapper Added" msgid "printer-state-reasons.wrapper-almost-empty" msgstr "Wrapper Almost Empty" msgid "printer-state-reasons.wrapper-almost-full" msgstr "Wrapper Almost Full" msgid "printer-state-reasons.wrapper-at-limit" msgstr "Wrapper At Limit" msgid "printer-state-reasons.wrapper-closed" msgstr "Wrapper Closed" msgid "printer-state-reasons.wrapper-configuration-change" msgstr "Wrapper Configuration Change" msgid "printer-state-reasons.wrapper-cover-closed" msgstr "Wrapper Cover Closed" msgid "printer-state-reasons.wrapper-cover-open" msgstr "Wrapper Cover Open" msgid "printer-state-reasons.wrapper-empty" msgstr "Wrapper Empty" msgid "printer-state-reasons.wrapper-full" msgstr "Wrapper Full" msgid "printer-state-reasons.wrapper-interlock-closed" msgstr "Wrapper Interlock Closed" msgid "printer-state-reasons.wrapper-interlock-open" msgstr "Wrapper Interlock Open" msgid "printer-state-reasons.wrapper-jam" msgstr "Wrapper Jam" msgid "printer-state-reasons.wrapper-life-almost-over" msgstr "Wrapper Life Almost Over" msgid "printer-state-reasons.wrapper-life-over" msgstr "Wrapper Life Over" msgid "printer-state-reasons.wrapper-memory-exhausted" msgstr "Wrapper Memory Exhausted" msgid "printer-state-reasons.wrapper-missing" msgstr "Wrapper Missing" msgid "printer-state-reasons.wrapper-motor-failure" msgstr "Wrapper Motor Failure" msgid "printer-state-reasons.wrapper-near-limit" msgstr "Wrapper Near Limit" msgid "printer-state-reasons.wrapper-offline" msgstr "Wrapper Offline" msgid "printer-state-reasons.wrapper-opened" msgstr "Wrapper Opened" msgid "printer-state-reasons.wrapper-over-temperature" msgstr "Wrapper Over Temperature" msgid "printer-state-reasons.wrapper-power-saver" msgstr "Wrapper Power Saver" msgid "printer-state-reasons.wrapper-recoverable-failure" msgstr "Wrapper Recoverable Failure" msgid "printer-state-reasons.wrapper-recoverable-storage" msgstr "Wrapper Recoverable Storage" msgid "printer-state-reasons.wrapper-removed" msgstr "Wrapper Removed" msgid "printer-state-reasons.wrapper-resource-added" msgstr "Wrapper Resource Added" msgid "printer-state-reasons.wrapper-resource-removed" msgstr "Wrapper Resource Removed" msgid "printer-state-reasons.wrapper-thermistor-failure" msgstr "Wrapper Thermistor Failure" msgid "printer-state-reasons.wrapper-timing-failure" msgstr "Wrapper Timing Failure" msgid "printer-state-reasons.wrapper-turned-off" msgstr "Wrapper Turned Off" msgid "printer-state-reasons.wrapper-turned-on" msgstr "Wrapper Turned On" msgid "printer-state-reasons.wrapper-under-temperature" msgstr "Wrapper Under Temperature" msgid "printer-state-reasons.wrapper-unrecoverable-failure" msgstr "Wrapper Unrecoverable Failure" msgid "printer-state-reasons.wrapper-unrecoverable-storage-error" msgstr "Wrapper Unrecoverable Storage Error" msgid "printer-state-reasons.wrapper-warming-up" msgstr "Wrapper Warming Up" msgid "printer-state.3" msgstr "Idle" msgid "printer-state.4" msgstr "Processing" msgid "printer-state.5" msgstr "Stopped" msgid "printer-up-time" msgstr "Printer Uptime" msgid "processing" msgstr "en proceso" msgid "proof-print" msgstr "Proof Print" msgid "proof-print-copies" msgstr "Proof Print Copies" msgid "punching" msgstr "Punching" msgid "punching-locations" msgstr "Punching Locations" msgid "punching-offset" msgstr "Punching Offset" msgid "punching-reference-edge" msgstr "Punching Reference Edge" msgid "punching-reference-edge.bottom" msgstr "Bottom" msgid "punching-reference-edge.left" msgstr "Left" msgid "punching-reference-edge.right" msgstr "Right" msgid "punching-reference-edge.top" msgstr "Top" #, c-format msgid "request id is %s-%d (%d file(s))" msgstr "la id solicitada es %s-%d (%d archivo(s))" msgid "request-id uses indefinite length" msgstr "request-id usa una longitud indefinida" msgid "requested-attributes" msgstr "Requested Attributes" msgid "retry-interval" msgstr "Retry Interval" msgid "retry-time-out" msgstr "Retry Time Out" msgid "save-disposition" msgstr "Save Disposition" msgid "save-disposition.none" msgstr "None" msgid "save-disposition.print-save" msgstr "Print Save" msgid "save-disposition.save-only" msgstr "Save Only" msgid "save-document-format" msgstr "Save Document Format" msgid "save-info" msgstr "Save Info" msgid "save-location" msgstr "Save Location" msgid "save-name" msgstr "Save Name" msgid "scheduler is not running" msgstr "el planificador de tareas no se está ejecutando" msgid "scheduler is running" msgstr "el planificador de tareas se está ejecutando" msgid "separator-sheets" msgstr "Separator Sheets" msgid "separator-sheets-type" msgstr "Separator Sheets Type" msgid "separator-sheets-type.both-sheets" msgstr "Both Sheets" msgid "separator-sheets-type.end-sheet" msgstr "End Sheet" msgid "separator-sheets-type.none" msgstr "None" msgid "separator-sheets-type.slip-sheets" msgstr "Slip Sheets" msgid "separator-sheets-type.start-sheet" msgstr "Start Sheet" msgid "sheet-collate" msgstr "Collate Copies" msgid "sheet-collate.collated" msgstr "Yes" msgid "sheet-collate.uncollated" msgstr "No" msgid "sides" msgstr "2-Sided Printing" msgid "sides.one-sided" msgstr "Off" msgid "sides.two-sided-long-edge" msgstr "On (Portrait)" msgid "sides.two-sided-short-edge" msgstr "On (Landscape)" #, c-format msgid "stat of %s failed: %s" msgstr "estado de %s ha fallado: %s" msgid "status\t\tShow status of daemon and queue." msgstr "status\t\tMuestra el estado del demonio (daemon) y la cola." msgid "status-message" msgstr "Status Message" msgid "stitching" msgstr "Staple" msgid "stitching-angle" msgstr "Stitching Angle" msgid "stitching-locations" msgstr "Stitching Locations" msgid "stitching-method" msgstr "Stitching Method" msgid "stitching-method.auto" msgstr "Automatic" msgid "stitching-method.crimp" msgstr "Crimp" msgid "stitching-method.wire" msgstr "Wire" msgid "stitching-offset" msgstr "Stitching Offset" msgid "stitching-reference-edge" msgstr "Stitching Reference Edge" msgid "stitching-reference-edge.bottom" msgstr "Bottom" msgid "stitching-reference-edge.left" msgstr "Left" msgid "stitching-reference-edge.right" msgstr "Right" msgid "stitching-reference-edge.top" msgstr "Top" msgid "stopped" msgstr "parada" msgid "subject" msgstr "Subject" #, c-format msgid "system default destination: %s" msgstr "destino predeterminado del sistema: %s" #, c-format msgid "system default destination: %s/%s" msgstr "destino predeterminado del sistema: %s/%s" msgid "t33-subaddress" msgstr "T33 Subaddress" msgid "to-name" msgstr "To Name" msgid "transmission-status" msgstr "Transmission Status" msgid "transmission-status.3" msgstr "Pending" msgid "transmission-status.4" msgstr "Pending Retry" msgid "transmission-status.5" msgstr "Processing" msgid "transmission-status.7" msgstr "Canceled" msgid "transmission-status.8" msgstr "Aborted" msgid "transmission-status.9" msgstr "Completed" msgid "trimming" msgstr "Cut" msgid "trimming-offset" msgstr "Cut Position" msgid "trimming-reference-edge" msgstr "Trimming Reference Edge" msgid "trimming-reference-edge.bottom" msgstr "Bottom" msgid "trimming-reference-edge.left" msgstr "Left" msgid "trimming-reference-edge.right" msgstr "Right" msgid "trimming-reference-edge.top" msgstr "Top" msgid "trimming-type" msgstr "Trimming Type" msgid "trimming-type.draw-line" msgstr "Draw Line" msgid "trimming-type.full" msgstr "Full" msgid "trimming-type.partial" msgstr "Partial" msgid "trimming-type.perforate" msgstr "Perforate" msgid "trimming-type.score" msgstr "Score" msgid "trimming-type.tab" msgstr "Tab" msgid "trimming-when" msgstr "Trimming When" msgid "trimming-when.after-documents" msgstr "After Documents" msgid "trimming-when.after-job" msgstr "After Job" msgid "trimming-when.after-sets" msgstr "After Sets" msgid "trimming-when.after-sheets" msgstr "After Sheets" msgid "unknown" msgstr "desconocido" msgid "untitled" msgstr "sin título" msgid "variable-bindings uses indefinite length" msgstr "variable-bindings usa una longitud indefinida" msgid "x-accuracy" msgstr "X Accuracy" msgid "x-dimension" msgstr "X Dimension" msgid "x-offset" msgstr "X Offset" msgid "x-origin" msgstr "X Origin" msgid "y-accuracy" msgstr "Y Accuracy" msgid "y-dimension" msgstr "Y Dimension" msgid "y-offset" msgstr "Y Offset" msgid "y-origin" msgstr "Y Origin" msgid "z-accuracy" msgstr "Z Accuracy" msgid "z-dimension" msgstr "Z Dimension" msgid "z-offset" msgstr "Z Offset" #~ msgid " -E Test with HTTP Upgrade to TLS." #~ msgstr " -E Prueba con actualización HTTP a TLS." #~ msgid " -S Test with SSL encryption." #~ msgstr " -S Prueba con cifrado SSL." #~ msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)." #~ msgstr "\"%s\": Valor URI \"%s\" incorrecto - %s (RFC 2911 sección 4.1.5)." #~ msgid "" #~ "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)." #~ msgstr "" #~ "\"%s\": Valor URI \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 " #~ "sección 4.1.5)." #~ msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": Nombre de atributo incorrecto - longitud %d incorrecta (RFC 2911 " #~ "sección 4.1.3)." #~ msgid "" #~ "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": Nombre de atributo incorrecto - carácter inválido (RFC 2911 " #~ "sección 4.1.3)." #~ msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)." #~ msgstr "\"%s\": Valor lógico \"%d\" incorrecto (RFC 2911 sección 4.1.11)." #~ msgid "" #~ "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.7)." #~ msgstr "" #~ "\"%s\": Valor del juego de caracteres \"%s\" incorrecto - caracteres " #~ "incorrectos (RFC 2911 sección 4.1.7)." #~ msgid "" #~ "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)." #~ msgstr "" #~ "\"%s\": Valor del juego de caracteres \"%s\" incorrecto - longitud %d " #~ "incorrecta (RFC 2911 sección 4.1.7)." #~ msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": Horas dateTime UTC %u incorrectas (RFC 2911 sección 4.1.14)." #~ msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": Minutos dateTime UTC %u incorrectos (RFC 2911 sección 4.1.14)." #~ msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Signo dateTime UTC %c incorrecto (RFC 2911 sección 4.1.14)." #~ msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Día dateTime %u incorrecto (RFC 2911 sección 4.1.14)." #~ msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": Décimas de segundo dateTime %u incorrectas (RFC 2911 sección " #~ "4.1.14)." #~ msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Horas dateTime %u incorrectas (RFC 2911 sección 4.1.14)." #~ msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Minutos dateTime %u incorrectos (RFC 2911 sección 4.1.14)." #~ msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Mes dateTime %u incorrecto (RFC 2911 sección 4.1.14)." #~ msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Segundos dateTime %u incorrectos (RFC 2911 sección 4.1.14)." #~ msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)." #~ msgstr "" #~ "\"%s\": Valor enumerado %d incorrecto - fuera de intervalo (RFC 2911 " #~ "sección 4.1.4)." #~ msgid "" #~ "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": Valor clave \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 " #~ "sección 4.1.3)." #~ msgid "" #~ "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section " #~ "4.1.3)." #~ msgstr "" #~ "\"%s\": Valor clave \"%s\" incorrecto - carácter inválido (RFC 2911 " #~ "sección 4.1.3)." #~ msgid "" #~ "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.9)." #~ msgstr "" #~ "\"%s\": Valor mimeMediaType \"%s\" incorrecto - caracteres incorrectos " #~ "(RFC 2911 sección 4.1.9)." #~ msgid "" #~ "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section " #~ "4.1.9)." #~ msgstr "" #~ "\"%s\": Valor mimeMediaType \"%s\" incorrecto - longitud %d incorrecta " #~ "(RFC 2911 sección 4.1.9)." #~ msgid "" #~ "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section " #~ "4.1.2)." #~ msgstr "" #~ "\"%s\": Valor del nombre \"%s\" incorrecto - secuencia UTF-8 incorrecta " #~ "(RFC 2911 sección 4.1.2)." #~ msgid "" #~ "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)." #~ msgstr "" #~ "\"%s\": Valor del nombre \"%s\" incorrecto - longitud %d incorrecta (RFC " #~ "2911 sección 4.1.2)." #~ msgid "" #~ "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 " #~ "section 4.1.8)." #~ msgstr "" #~ "\"%s\": Valor naturalLanguage \"%s\" incorrecto - caracteres incorrectos " #~ "(RFC 2911 sección 4.1.8)." #~ msgid "" #~ "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 " #~ "section 4.1.8)." #~ msgstr "" #~ "\"%s\": Valor naturalLanguage \"%s\" incorrecto - longitud %d incorrecta " #~ "(RFC 2911 sección 4.1.8)." #~ msgid "" #~ "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)." #~ msgstr "" #~ "\"%s\": Valor octetString incorrecto - longitud %d incorrecta (RFC 2911 " #~ "sección 4.1.10)." #~ msgid "" #~ "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC " #~ "2911 section 4.1.13)." #~ msgstr "" #~ "\"%s\": Valor rangeOfInteger %d-%d incorrecto - el más bajo es mayor que " #~ "el más alto (RFC 2911 section 4.1.13)." #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section " #~ "4.1.15)." #~ msgstr "" #~ "\"%s\": Valor de resolución %dx%d%s incorrecto - valores de unidades " #~ "incorrectas (RFC 2911 section 4.1.15)." #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " #~ "positive (RFC 2911 section 4.1.15)." #~ msgstr "" #~ "\"%s\": Valor de resolución %dx%d%s incorrecto - la resolución de la " #~ "alimentación cruzada debe ser positiva (RFC 2911 sección 4.1.15)." #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive " #~ "(RFC 2911 section 4.1.15)." #~ msgstr "" #~ "\"%s\": Valor de resolución %dx%d%s incorrecto - la resolución de la " #~ "alimentación debe ser positiva (RFC 2911 sección 4.1.15)." #~ msgid "" #~ "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section " #~ "4.1.1)." #~ msgstr "" #~ "\"%s\": Valor del texto \"%s\" incorrecto - secuencia UTF-8 incorrecta " #~ "(RFC 2911 sección 4.1.1)." #~ msgid "" #~ "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)." #~ msgstr "" #~ "\"%s\": Valor del texto \"%s\" incorrecto - longitud %d incorrecta (RFC " #~ "2911 sección 4.1.1)." #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.6)." #~ msgstr "" #~ "\"%s\": Valor uriScheme \"%s\" incorrecto - caracteres incorrectos (RFC " #~ "2911 sección 4.1.6)." #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section " #~ "4.1.6)." #~ msgstr "" #~ "\"%s\": Valor uriScheme \"%s\" incorrecto - longitud %d incorrecta (RFC " #~ "2911 sección 4.1.6)." #~ msgid "%g x %g" #~ msgstr "%g x %g" #~ msgid "CD/DVD/Bluray" #~ msgstr "CD/DVD/Bluray" #~ msgid "FanFold German" #~ msgstr "FanFold alemán" #~ msgid "FanFold Legal German" #~ msgstr "FanFold Legal alemán" #~ msgid "Fanfold US" #~ msgstr "FanFold de EE.UU" #~ msgid "Finishing" #~ msgstr "Terminando" #~ msgid "Glossy Photo" #~ msgstr "Foto brillante" #~ msgid "High-Gloss Photo" #~ msgstr "Foto de alto brillo" #~ msgid "Label" #~ msgstr "Etiqueta" #~ msgid "Looking for printer..." #~ msgstr "Buscando impresora..." #~ msgid "Matte Photo" #~ msgstr "Foto mate" #~ msgid "No Finishing" #~ msgstr "Sin terminar" #~ msgid "Satin Photo" #~ msgstr "Foto satinada" #~ msgid "Semi-Gloss Photo" #~ msgstr "Foto semi brillante" #~ msgid "compression" #~ msgstr "Compression" #~ msgid "compression-accepted" #~ msgstr "Compression Accepted" #~ msgid "compression.compress" #~ msgstr "Compress" #~ msgid "compression.deflate" #~ msgstr "Deflate" #~ msgid "compression.gzip" #~ msgstr "Gzip" #~ msgid "compression.none" #~ msgstr "None" #~ msgid "destination-accesses" #~ msgstr "Destination Accesses" #~ msgid "destination-statuses" #~ msgstr "Destination Statuses" #~ msgid "destination-uris" #~ msgstr "Destination Uris" #~ msgid "document-access" #~ msgstr "Document Access" #~ msgid "document-data-get-interval" #~ msgstr "Document Data Get Interval" #~ msgid "document-data-wait" #~ msgstr "Document Data Wait" #~ msgid "document-format-accepted" #~ msgstr "Document Format Accepted" #~ msgid "document-message" #~ msgstr "Document Message" #~ msgid "document-metadata" #~ msgstr "Document Metadata" #~ msgid "document-name" #~ msgstr "Document Name" #~ msgid "document-number" #~ msgstr "Document Number" #~ msgid "document-password" #~ msgstr "Document Password" #~ msgid "document-preprocessed" #~ msgstr "Document Preprocessed" #~ msgid "fetch-status-message" #~ msgstr "Fetch Status Message" #~ msgid "identify-actions" #~ msgstr "Identify Actions" #~ msgid "identify-actions.display" #~ msgstr "Display" #~ msgid "identify-actions.flash" #~ msgstr "Flash" #~ msgid "identify-actions.sound" #~ msgstr "Sound" #~ msgid "identify-actions.speak" #~ msgstr "Speak" #~ msgid "ipp-attribute-fidelity" #~ msgstr "Attribute Fidelity" #~ msgid "job-authorization-uri" #~ msgstr "Job Authorization URI" #~ msgid "job-destination-spooling-supported.automatic" #~ msgstr "Automatic" #~ msgid "job-destination-spooling-supported.spool" #~ msgstr "Spool" #~ msgid "job-destination-spooling-supported.stream" #~ msgstr "Stream" #~ msgid "job-impressions-col" #~ msgstr "Job Impressions" #~ msgid "job-impressions-estimated" #~ msgstr "Job Impressions Estimated" #~ msgid "job-media-sheets-col" #~ msgstr "Job Media Sheets" #~ msgid "job-pages-per-set" #~ msgstr "Job Pages Per Set" #~ msgid "job-password" #~ msgstr "Job Password" #~ msgid "job-password-repertoire-configured" #~ msgstr "Job Password Repertoire Configured" #~ msgid "job-password-repertoire-supported.iana_us-ascii_any" #~ msgstr "Iana Us Ascii Any" #~ msgid "job-password-repertoire-supported.iana_us-ascii_complex" #~ msgstr "Iana Us Ascii Complex" #~ msgid "job-password-repertoire-supported.iana_us-ascii_digits" #~ msgstr "Iana Us Ascii Digits" #~ msgid "job-password-repertoire-supported.iana_us-ascii_letters" #~ msgstr "Iana Us Ascii Letters" #~ msgid "job-password-repertoire-supported.iana_utf-8_any" #~ msgstr "Iana Utf 8 Any" #~ msgid "job-password-repertoire-supported.iana_utf-8_digits" #~ msgstr "Iana Utf 8 Digits" #~ msgid "job-password-repertoire-supported.iana_utf-8_letters" #~ msgstr "Iana Utf 8 Letters" #~ msgid "job-settable-attributes-supported.job-name" #~ msgstr "Job Name" #~ msgid "job-settable-attributes-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.arithmetic" #~ msgstr "Arithmetic" #~ msgid "jpeg-features-supported.cmyk" #~ msgstr "Cmyk" #~ msgid "jpeg-features-supported.deep" #~ msgstr "Deep" #~ msgid "jpeg-features-supported.hierarchical" #~ msgstr "Hierarchical" #~ msgid "jpeg-features-supported.icc" #~ msgstr "Icc" #~ msgid "jpeg-features-supported.lossless" #~ msgstr "Lossless" #~ msgid "jpeg-features-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.progressive" #~ msgstr "Progressive" #~ msgid "material-type.pla-dissolvable" #~ msgstr "Pla Dissolvable" #~ msgid "media.om_large-photo_200x300mm" #~ msgstr "200 x 300mm" #~ msgid "notify-subscribed-event" #~ msgstr "Notify Event" #~ msgid "operations-supported.10" #~ msgstr "Get-Jobs" #~ msgid "operations-supported.11" #~ msgstr "Get-Printer-Attributes" #~ msgid "operations-supported.12" #~ msgstr "Hold-Job" #~ msgid "operations-supported.13" #~ msgstr "Release-Job" #~ msgid "operations-supported.14" #~ msgstr "Restart-Job" #~ msgid "operations-supported.16" #~ msgstr "Pause-Printer" #~ msgid "operations-supported.17" #~ msgstr "Resume-Printer" #~ msgid "operations-supported.18" #~ msgstr "Purge-Jobs" #~ msgid "operations-supported.19" #~ msgstr "Set-Printer-Attributes" #~ msgid "operations-supported.2" #~ msgstr "Print-Job" #~ msgid "operations-supported.20" #~ msgstr "Set-Job-Attributes" #~ msgid "operations-supported.21" #~ msgstr "Get-Printer-Supported-Values" #~ msgid "operations-supported.22" #~ msgstr "Create-Printer-Subscriptions" #~ msgid "operations-supported.23" #~ msgstr "Create-Job-Subscriptions" #~ msgid "operations-supported.24" #~ msgstr "Get-Subscription-Attributes" #~ msgid "operations-supported.25" #~ msgstr "Get-Subscriptions" #~ msgid "operations-supported.26" #~ msgstr "Renew-Subscription" #~ msgid "operations-supported.27" #~ msgstr "Cancel-Subscription" #~ msgid "operations-supported.28" #~ msgstr "Get-Notifications" #~ msgid "operations-supported.3" #~ msgstr "Print-URI" #~ msgid "operations-supported.34" #~ msgstr "Enable-Printer" #~ msgid "operations-supported.35" #~ msgstr "Disable-Printer" #~ msgid "operations-supported.36" #~ msgstr "Pause-Printer-After-Current-Job" #~ msgid "operations-supported.37" #~ msgstr "Hold-New-Jobs" #~ msgid "operations-supported.38" #~ msgstr "Release-Held-New-Jobs" #~ msgid "operations-supported.39" #~ msgstr "Deactivate-Printer" #~ msgid "operations-supported.4" #~ msgstr "Validate-Job" #~ msgid "operations-supported.40" #~ msgstr "Activate-Printer" #~ msgid "operations-supported.41" #~ msgstr "Restart-Printer" #~ msgid "operations-supported.42" #~ msgstr "Shutdown-Printer" #~ msgid "operations-supported.43" #~ msgstr "Startup-Printer" #~ msgid "operations-supported.44" #~ msgstr "Reprocess-Job" #~ msgid "operations-supported.45" #~ msgstr "Cancel-Current-Job" #~ msgid "operations-supported.46" #~ msgstr "Suspend-Current-Job" #~ msgid "operations-supported.47" #~ msgstr "Resume-Job" #~ msgid "operations-supported.48" #~ msgstr "Promote-Job" #~ msgid "operations-supported.49" #~ msgstr "Schedule-Job-After" #~ msgid "operations-supported.5" #~ msgstr "Create-Job" #~ msgid "operations-supported.51" #~ msgstr "Cancel-Document" #~ msgid "operations-supported.52" #~ msgstr "Get-Document-Attributes" #~ msgid "operations-supported.53" #~ msgstr "Get-Documents" #~ msgid "operations-supported.54" #~ msgstr "Delete-Document" #~ msgid "operations-supported.55" #~ msgstr "Set-Document-Attributes" #~ msgid "operations-supported.56" #~ msgstr "Cancel-Jobs" #~ msgid "operations-supported.57" #~ msgstr "Cancel-My-Jobs" #~ msgid "operations-supported.58" #~ msgstr "Resubmit-Job" #~ msgid "operations-supported.59" #~ msgstr "Close-Job" #~ msgid "operations-supported.6" #~ msgstr "Send-Document" #~ msgid "operations-supported.60" #~ msgstr "Identify-Printer" #~ msgid "operations-supported.61" #~ msgstr "Validate-Document" #~ msgid "operations-supported.62" #~ msgstr "Add-Document-Images" #~ msgid "operations-supported.63" #~ msgstr "Acknowledge-Document" #~ msgid "operations-supported.64" #~ msgstr "Acknowledge-Identify-Printer" #~ msgid "operations-supported.65" #~ msgstr "Acknowledge-Job" #~ msgid "operations-supported.66" #~ msgstr "Fetch-Document" #~ msgid "operations-supported.67" #~ msgstr "Fetch-Job" #~ msgid "operations-supported.68" #~ msgstr "Get-Output-Device-Attributes" #~ msgid "operations-supported.69" #~ msgstr "Update-Active-Jobs" #~ msgid "operations-supported.7" #~ msgstr "Send-URI" #~ msgid "operations-supported.70" #~ msgstr "Deregister-Output-Device" #~ msgid "operations-supported.71" #~ msgstr "Update-Document-Status" #~ msgid "operations-supported.72" #~ msgstr "Update-Job-Status" #~ msgid "operations-supported.73" #~ msgstr "Update-Output-Device-Attributes" #~ msgid "operations-supported.74" #~ msgstr "Get-Next-Document-Data" #~ msgid "operations-supported.8" #~ msgstr "Cancel-Job" #~ msgid "operations-supported.9" #~ msgstr "Get-Job-Attributes" #~ msgid "output-device" #~ msgstr "Output Device" #~ msgid "output-device-job-states" #~ msgstr "Output Device Job States" #~ msgid "output-device-uuid" #~ msgstr "Output Device Uuid" #~ msgid "pdf-features-supported.prc" #~ msgstr "Prc" #~ msgid "pdf-features-supported.u3d" #~ msgstr "U3d" #~ msgid "pdf-versions-supported.adobe-1.3" #~ msgstr "Adobe 1.3" #~ msgid "pdf-versions-supported.adobe-1.4" #~ msgstr "Adobe 1.4" #~ msgid "pdf-versions-supported.adobe-1.5" #~ msgstr "Adobe 1.5" #~ msgid "pdf-versions-supported.adobe-1.6" #~ msgstr "Adobe 1.6" #~ msgid "pdf-versions-supported.iso-15930-1_2001" #~ msgstr "ISO 15930-1:2001" #~ msgid "pdf-versions-supported.iso-15930-3_2002" #~ msgstr "ISO 15930-3:2002" #~ msgid "pdf-versions-supported.iso-15930-4_2003" #~ msgstr "ISO 15930-4:2003" #~ msgid "pdf-versions-supported.iso-15930-6_2003" #~ msgstr "ISO 15930-6:2003" #~ msgid "pdf-versions-supported.iso-15930-7_2010" #~ msgstr "ISO 15930-7:2010" #~ msgid "pdf-versions-supported.iso-15930-8_2010" #~ msgstr "ISO 15930-8:2010" #~ msgid "pdf-versions-supported.iso-16612-2_2010" #~ msgstr "ISO 16612-2:2010" #~ msgid "pdf-versions-supported.iso-19005-1_2005" #~ msgstr "ISO 19005-1:2005" #~ msgid "pdf-versions-supported.iso-19005-2_2011" #~ msgstr "ISO 19005-2:2011" #~ msgid "pdf-versions-supported.iso-19005-3_2012" #~ msgstr "ISO 19005-3:2012" #~ msgid "pdf-versions-supported.iso-32000-1_2008" #~ msgstr "ISO 32000-1:2008" #~ msgid "pdf-versions-supported.none" #~ msgstr "None" #~ msgid "pdf-versions-supported.pwg-5102.3" #~ msgstr "PWG 5102.3" #~ msgid "preferred-attributes" #~ msgstr "Preferred Attributes" #~ msgid "printer-mandatory-job-attributes" #~ msgstr "Printer Mandatory Job Attributes" #~ msgid "profile-uri-actual" #~ msgstr "Actual Profile URI" #~ msgid "requested-attributes.all" #~ msgstr "All" #~ msgid "requested-attributes.document-description" #~ msgstr "Document Description" #~ msgid "requested-attributes.document-template" #~ msgstr "Document Template" #~ msgid "requested-attributes.job-actuals" #~ msgstr "Job Actuals" #~ msgid "requested-attributes.job-description" #~ msgstr "Job Description" #~ msgid "requested-attributes.job-template" #~ msgstr "Job Template" #~ msgid "requested-attributes.printer-description" #~ msgstr "Printer Description" #~ msgid "requested-attributes.subscription-description" #~ msgstr "Subscription Description" #~ msgid "requested-attributes.subscription-template" #~ msgstr "Subscription Template" #~ msgid "requesting-user-name" #~ msgstr "Requesting User Name" #~ msgid "requesting-user-uri" #~ msgstr "Requesting User URI" #~ msgid "x-image-position" #~ msgstr "X Image Position" #~ msgid "x-image-position.center" #~ msgstr "Center" #~ msgid "x-image-position.left" #~ msgstr "Left" #~ msgid "x-image-position.none" #~ msgstr "None" #~ msgid "x-image-position.right" #~ msgstr "Right" #~ msgid "x-image-shift" #~ msgstr "X Image Shift" #~ msgid "x-side1-image-shift" #~ msgstr "X Front Side Image Shift" #~ msgid "x-side2-image-shift" #~ msgstr "X Back Side Image Shift" #~ msgid "y-image-position" #~ msgstr "Y Image Position" #~ msgid "y-image-position.bottom" #~ msgstr "Bottom" #~ msgid "y-image-position.center" #~ msgstr "Center" #~ msgid "y-image-position.none" #~ msgstr "None" #~ msgid "y-image-position.top" #~ msgstr "Top" #~ msgid "y-image-shift" #~ msgstr "Y Image Shift" #~ msgid "y-side1-image-shift" #~ msgstr "Y Front Side Image Shift" #~ msgid "y-side2-image-shift" #~ msgstr "Y Back Side Image Shift" cups-2.2.7/locale/cups_fr.po000664 000765 000024 00001051104 13255074424 016415 0ustar00msweetstaff000000 000000 # # "$Id$" # # Message catalog template for CUPS. # # Copyright 2007-2012 by Apple Inc. # Copyright 2005-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # # Notes for Translators: # # The "checkpo" program located in the "locale" source directory can be used # to verify that your translations do not introduce formatting errors or other # problems. Run with: # # cd locale # ./checkpo cups_LL.po # # where "LL" is your locale. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: CUPS 1.6\n" "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n" "POT-Creation-Date: 2018-03-19 18:36-0400\n" "PO-Revision-Date: 2012-12-12 11:12+0100\n" "Last-Translator: Stéphane Blondon \n" "Language-Team: LANGUAGE \n" "Language: French\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgid "\t\t(all)" msgstr "\t\t(tous)" msgid "\t\t(none)" msgstr "\t\t(aucun)" #, c-format msgid "\t%d entries" msgstr "" #, c-format msgid "\t%s" msgstr "" msgid "\tAfter fault: continue" msgstr "" #, c-format msgid "\tAlerts: %s" msgstr "" msgid "\tBanner required" msgstr "" msgid "\tCharset sets:" msgstr "" msgid "\tConnection: direct" msgstr "" msgid "\tConnection: remote" msgstr "" msgid "\tContent types: any" msgstr "" msgid "\tDefault page size:" msgstr "" msgid "\tDefault pitch:" msgstr "" msgid "\tDefault port settings:" msgstr "" #, c-format msgid "\tDescription: %s" msgstr "" msgid "\tForm mounted:" msgstr "" msgid "\tForms allowed:" msgstr "" #, c-format msgid "\tInterface: %s.ppd" msgstr "" #, c-format msgid "\tInterface: %s/ppd/%s.ppd" msgstr "" #, c-format msgid "\tLocation: %s" msgstr "" msgid "\tOn fault: no alert" msgstr "" msgid "\tPrinter types: unknown" msgstr "" #, c-format msgid "\tStatus: %s" msgstr "" msgid "\tUsers allowed:" msgstr "" msgid "\tUsers denied:" msgstr "" msgid "\tdaemon present" msgstr "" msgid "\tno entries" msgstr "" #, c-format msgid "\tprinter is on device '%s' speed -1" msgstr "\timprimante sur le matériel « %s »', vitesse -1" msgid "\tprinting is disabled" msgstr "\tImpression désactivée" msgid "\tprinting is enabled" msgstr "\tImpression activée" #, c-format msgid "\tqueued for %s" msgstr "\tfile d'attente pour %s" msgid "\tqueuing is disabled" msgstr "\tfile désactivée" msgid "\tqueuing is enabled" msgstr "\tfile activée" msgid "\treason unknown" msgstr "\tcause inconnue" msgid "" "\n" " DETAILED CONFORMANCE TEST RESULTS" msgstr "" msgid " Ignore specific warnings." msgstr " Ignorer les alertes spécifiques." msgid " Issue warnings instead of errors." msgstr " Signale des alertes à la place des erreurs." msgid " REF: Page 15, section 3.1." msgstr " REF: Page 15, section 3.1." msgid " REF: Page 15, section 3.2." msgstr " REF: Page 15, section 3.2." msgid " REF: Page 19, section 3.3." msgstr " REF: Page 19, section 3.3." msgid " REF: Page 20, section 3.4." msgstr " REF: Page 20, section 3.4." msgid " REF: Page 27, section 3.5." msgstr " REF: Page 27, section 3.5." msgid " REF: Page 42, section 5.2." msgstr " REF: Page 42, section 5.2." msgid " REF: Pages 16-17, section 3.2." msgstr " REF: Pages 16-17, section 3.2." msgid " REF: Pages 42-45, section 5.2." msgstr " REF: Pages 42-45, section 5.2." msgid " REF: Pages 45-46, section 5.2." msgstr " REF: Pages 45-46, section 5.2." msgid " REF: Pages 48-49, section 5.2." msgstr " REF: Pages 48-49, section 5.2." msgid " REF: Pages 52-54, section 5.2." msgstr " REF: Pages 52-54, section 5.2." #, c-format msgid " %-39.39s %.0f bytes" msgstr " %-39.39s %.0f octets" #, c-format msgid " PASS Default%s" msgstr "" msgid " PASS DefaultImageableArea" msgstr "" msgid " PASS DefaultPaperDimension" msgstr "" msgid " PASS FileVersion" msgstr "" msgid " PASS FormatVersion" msgstr "" msgid " PASS LanguageEncoding" msgstr "" msgid " PASS LanguageVersion" msgstr "" msgid " PASS Manufacturer" msgstr "" msgid " PASS ModelName" msgstr "" msgid " PASS NickName" msgstr "" msgid " PASS PCFileName" msgstr "" msgid " PASS PSVersion" msgstr "" msgid " PASS PageRegion" msgstr "" msgid " PASS PageSize" msgstr "" msgid " PASS Product" msgstr "" msgid " PASS ShortNickName" msgstr "" #, c-format msgid " WARN %s has no corresponding options." msgstr "" #, c-format msgid "" " WARN %s shares a common prefix with %s\n" " REF: Page 15, section 3.2." msgstr "" #, c-format msgid "" " WARN Duplex option keyword %s may not work as expected and should " "be named Duplex.\n" " REF: Page 122, section 5.17" msgstr "" msgid " WARN File contains a mix of CR, LF, and CR LF line endings." msgstr "" msgid "" " WARN LanguageEncoding required by PPD 4.3 spec.\n" " REF: Pages 56-57, section 5.3." msgstr "" #, c-format msgid " WARN Line %d only contains whitespace." msgstr "" msgid "" " WARN Manufacturer required by PPD 4.3 spec.\n" " REF: Pages 58-59, section 5.3." msgstr "" msgid "" " WARN Non-Windows PPD files should use lines ending with only LF, " "not CR LF." msgstr "" #, c-format msgid "" " WARN Obsolete PPD version %.1f.\n" " REF: Page 42, section 5.2." msgstr "" msgid "" " WARN PCFileName longer than 8.3 in violation of PPD spec.\n" " REF: Pages 61-62, section 5.3." msgstr "" msgid "" " WARN PCFileName should contain a unique filename.\n" " REF: Pages 61-62, section 5.3." msgstr "" msgid "" " WARN Protocols contains PJL but JCL attributes are not set.\n" " REF: Pages 78-79, section 5.7." msgstr "" msgid "" " WARN Protocols contains both PJL and BCP; expected TBCP.\n" " REF: Pages 78-79, section 5.7." msgstr "" msgid "" " WARN ShortNickName required by PPD 4.3 spec.\n" " REF: Pages 64-65, section 5.3." msgstr "" msgid " cupsaddsmb [options] -a" msgstr "" msgid " cupstestdsc [options] -" msgstr "" msgid " program | cupstestppd [options] -" msgstr "" #, c-format msgid "" " %s \"%s %s\" conflicts with \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." msgstr "" #, c-format msgid " %s %s %s does not exist." msgstr " %s %s %s n'existe pas." #, c-format msgid " %s %s file \"%s\" has the wrong capitalization." msgstr "" #, c-format msgid "" " %s Bad %s choice %s.\n" " REF: Page 122, section 5.17" msgstr "" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s." msgstr "" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s." msgstr "" #, c-format msgid " %s Bad cupsFilter value \"%s\"." msgstr "" #, c-format msgid " %s Bad cupsFilter2 value \"%s\"." msgstr "" #, c-format msgid " %s Bad cupsICCProfile %s." msgstr "" #, c-format msgid " %s Bad cupsPreFilter value \"%s\"." msgstr "" #, c-format msgid " %s Bad cupsUIConstraints %s: \"%s\"" msgstr "" #, c-format msgid " %s Bad language \"%s\"." msgstr "" #, c-format msgid " %s Bad permissions on %s file \"%s\"." msgstr "" #, c-format msgid " %s Bad spelling of %s - should be %s." msgstr "" #, c-format msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID." msgstr "" #, c-format msgid " %s Default choices conflicting." msgstr "" #, c-format msgid " %s Empty cupsUIConstraints %s" msgstr "" #, c-format msgid " %s Missing \"%s\" translation string for option %s, choice %s." msgstr "" #, c-format msgid " %s Missing \"%s\" translation string for option %s." msgstr "" #, c-format msgid " %s Missing %s file \"%s\"." msgstr "" #, c-format msgid "" " %s Missing REQUIRED PageRegion option.\n" " REF: Page 100, section 5.14." msgstr "" #, c-format msgid "" " %s Missing REQUIRED PageSize option.\n" " REF: Page 99, section 5.14." msgstr "" #, c-format msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" #, c-format msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" msgstr "" #, c-format msgid " %s Missing cupsUIResolver %s" msgstr "" #, c-format msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" #, c-format msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\"" msgstr "" #, c-format msgid " %s No base translation \"%s\" is included in file." msgstr "" #, c-format msgid "" " %s REQUIRED %s does not define choice None.\n" " REF: Page 122, section 5.17" msgstr "" #, c-format msgid " %s Size \"%s\" defined for %s but not for %s." msgstr "" #, c-format msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)." msgstr "" #, c-format msgid " %s Size \"%s\" should be \"%s\"." msgstr "" #, c-format msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"." msgstr "" #, c-format msgid " %s cupsICCProfile %s hash value collides with %s." msgstr "" #, c-format msgid " %s cupsUIResolver %s causes a loop." msgstr "" #, c-format msgid "" " %s cupsUIResolver %s does not list at least two different options." msgstr "" #, c-format msgid "" " **FAIL** %s must be 1284DeviceID\n" " REF: Page 72, section 5.5" msgstr "" #, c-format msgid "" " **FAIL** Bad Default%s %s\n" " REF: Page 40, section 4.5." msgstr "" #, c-format msgid "" " **FAIL** Bad DefaultImageableArea %s\n" " REF: Page 102, section 5.15." msgstr "" #, c-format msgid "" " **FAIL** Bad DefaultPaperDimension %s\n" " REF: Page 103, section 5.15." msgstr "" #, c-format msgid "" " **FAIL** Bad FileVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" #, c-format msgid "" " **FAIL** Bad FormatVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" msgid "" " **FAIL** Bad JobPatchFile attribute in file\n" " REF: Page 24, section 3.4." msgstr "" #, c-format msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1." msgstr "" #, c-format msgid " **FAIL** Bad LanguageVersion %s - must be English." msgstr "" #, c-format msgid "" " **FAIL** Bad Manufacturer (should be \"%s\")\n" " REF: Page 211, table D.1." msgstr "" #, c-format msgid "" " **FAIL** Bad ModelName - \"%c\" not allowed in string.\n" " REF: Pages 59-60, section 5.3." msgstr "" msgid "" " **FAIL** Bad PSVersion - not \"(string) int\".\n" " REF: Pages 62-64, section 5.3." msgstr "" msgid "" " **FAIL** Bad Product - not \"(string)\".\n" " REF: Page 62, section 5.3." msgstr "" msgid "" " **FAIL** Bad ShortNickName - longer than 31 chars.\n" " REF: Pages 64-65, section 5.3." msgstr "" #, c-format msgid "" " **FAIL** Bad option %s choice %s\n" " REF: Page 84, section 5.9" msgstr "" #, c-format msgid " **FAIL** Default option code cannot be interpreted: %s" msgstr "" #, c-format msgid "" " **FAIL** Default translation string for option %s choice %s contains " "8-bit characters." msgstr "" #, c-format msgid "" " **FAIL** Default translation string for option %s contains 8-bit " "characters." msgstr "" #, c-format msgid " **FAIL** Group names %s and %s differ only by case." msgstr "" #, c-format msgid " **FAIL** Multiple occurrences of option %s choice name %s." msgstr "" #, c-format msgid " **FAIL** Option %s choice names %s and %s differ only by case." msgstr "" #, c-format msgid " **FAIL** Option names %s and %s differ only by case." msgstr "" #, c-format msgid "" " **FAIL** REQUIRED Default%s\n" " REF: Page 40, section 4.5." msgstr "" msgid "" " **FAIL** REQUIRED DefaultImageableArea\n" " REF: Page 102, section 5.15." msgstr "" msgid "" " **FAIL** REQUIRED DefaultPaperDimension\n" " REF: Page 103, section 5.15." msgstr "" msgid "" " **FAIL** REQUIRED FileVersion\n" " REF: Page 56, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED FormatVersion\n" " REF: Page 56, section 5.3." msgstr "" #, c-format msgid "" " **FAIL** REQUIRED ImageableArea for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 102, section 5.15." msgstr "" msgid "" " **FAIL** REQUIRED LanguageEncoding\n" " REF: Pages 56-57, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED LanguageVersion\n" " REF: Pages 57-58, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED Manufacturer\n" " REF: Pages 58-59, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED ModelName\n" " REF: Pages 59-60, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED NickName\n" " REF: Page 60, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED PCFileName\n" " REF: Pages 61-62, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED PSVersion\n" " REF: Pages 62-64, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED PageRegion\n" " REF: Page 100, section 5.14." msgstr "" msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Page 41, section 5.\n" " REF: Page 99, section 5.14." msgstr "" msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Pages 99-100, section 5.14." msgstr "" #, c-format msgid "" " **FAIL** REQUIRED PaperDimension for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 103, section 5.15." msgstr "" msgid "" " **FAIL** REQUIRED Product\n" " REF: Page 62, section 5.3." msgstr "" msgid "" " **FAIL** REQUIRED ShortNickName\n" " REF: Page 64-65, section 5.3." msgstr "" #, c-format msgid " **FAIL** Unable to open PPD file - %s on line %d." msgstr "" #, c-format msgid " %d ERRORS FOUND" msgstr " %d ERREURS TROUVÉES" msgid " -h Show program usage" msgstr " -h Affiche l'usage du programme" #, c-format msgid "" " Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:" msgstr "" #, c-format msgid "" " Bad %%%%Page: on line %d.\n" " REF: Page 53, %%%%Page:" msgstr "" #, c-format msgid "" " Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:" msgstr "" #, c-format msgid "" " Line %d is longer than 255 characters (%d).\n" " REF: Page 25, Line Length" msgstr "" msgid "" " Missing %!PS-Adobe-3.0 on first line.\n" " REF: Page 17, 3.1 Conforming Documents" msgstr "" #, c-format msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments" msgstr "" #, c-format msgid "" " Missing or bad %%BoundingBox: comment.\n" " REF: Page 39, %%BoundingBox:" msgstr "" #, c-format msgid "" " Missing or bad %%Page: comments.\n" " REF: Page 53, %%Page:" msgstr "" #, c-format msgid "" " Missing or bad %%Pages: comment.\n" " REF: Page 43, %%Pages:" msgstr "" msgid " NO ERRORS FOUND" msgstr "" #, c-format msgid " Saw %d lines that exceeded 255 characters." msgstr "" #, c-format msgid " Too many %%BeginDocument comments." msgstr "" #, c-format msgid " Too many %%EndDocument comments." msgstr "" msgid " Warning: file contains binary data." msgstr "" #, c-format msgid " Warning: no %%EndComments comment in file." msgstr "" #, c-format msgid " Warning: obsolete DSC version %.1f in file." msgstr "" msgid " ! expression Unary NOT of expression." msgstr " ! expression Opérateur NON sur une expression." msgid " ( expressions ) Group expressions." msgstr " ( expressions ) Groupe d'expressions." msgid " --[no-]debug-logging Turn debug logging on/off." msgstr " --[no-]debug-logging Activer/désactiver les journaux de débogage." msgid " --[no-]remote-admin Turn remote administration on/off." msgstr "" " --[no-]remote-admin Activer/désactiver l'administration à distance." msgid " --[no-]remote-any Allow/prevent access from the Internet." msgstr " --[no-]remote-any Autoriser/interdire l'accès depuis internet." msgid " --[no-]share-printers Turn printer sharing on/off." msgstr " --[no-]share-printers Activer/désactiver le partage d'imprimante." msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job." msgstr "" " --[no-]user-cancel-any Autoriser/interdire aux utilisateurs d'annuler une " "impression." msgid " --cr End lines with CR (Mac OS 9)." msgstr " --cr Fin de ligne avec CR (Mac OS 9)." msgid " --crlf End lines with CR + LF (Windows)." msgstr " --crlf Fin de ligne avec CR + LF (Windows)." msgid " --domain regex Match domain to regular expression." msgstr "" " --domain regex Correspondance du domaine avec une expression " "rationnelle." msgid "" " --exec utility [argument ...] ;\n" " Execute program if true." msgstr "" " --exec programme [argument ...] ;\n" " Executer programme si vrai." msgid " --false Always false." msgstr " --false Toujours faux." msgid " --help Show help." msgstr " --help Afficher l'aide." msgid " --help Show this help." msgstr " --help Show cette help." msgid " --host regex Match hostname to regular expression." msgstr "" " --host regex Correspondance du nom d'hôte avec une expression " "rationnelle." msgid " --lf End lines with LF (UNIX/Linux/macOS)." msgstr " --lf Fin de ligne avec LF (UNIX/Linux/macOS)." msgid " --list-filters List filters that will be used." msgstr " --list-filters Filtres de liste utilisables." msgid " --local True if service is local." msgstr " --local Vrai si le service est local." msgid " --ls List attributes." msgstr " --ls Attributs de liste." msgid " --name regex Match service name to regular expression." msgstr "" " --name regex Correspondance du service avec une expression " "rationnelle." msgid " --not expression Unary NOT of expression." msgstr " --not expression Opérateur NON d'une expression." msgid " --path regex Match resource path to regular expression." msgstr "" " --path regex Correspondance du chemin d'une ressource avec une " "expression rationnelle." msgid " --port number[-number] Match port to number or range." msgstr "" " --port numéro[-numéro] Correspondance du port à un numéro ou une plage de " "numéros." msgid " --print Print URI if true." msgstr " --print Afficher URI si vrai." msgid " --print-name Print service name if true." msgstr " --print-name Afficher le nom de service si vrai." msgid " --quiet Quietly report match via exit code." msgstr "" " --quiet Signale la correspodance par le code de sortie." msgid " --remote True if service is remote." msgstr " --remote Vrai si le service est distant." msgid "" " --stop-after-include-error\n" " Stop tests after a failed INCLUDE." msgstr "" " --stop-after-include-error\n" " Arrêt des tests après un INCLUDE en échec." msgid " --true Always true." msgstr " --true Toujours vrai." msgid " --txt key True if the TXT record contains the key." msgstr "" " --txt key Vrai si l'enregistrement TXT contient la clef." msgid " --txt-* regex Match TXT record key to regular expression." msgstr "" " --txt-* regex Correspondance de la clef TXT avec une expression " "rationnelle." msgid " --uri regex Match URI to regular expression." msgstr "" " --uri regex Correspondance d'une URI avec une expression " "rationnelle." msgid " --version Show program version." msgstr " --version Affiche la version du programme." msgid " --version Show version." msgstr " --version Affiche la version." msgid " -4 Connect using IPv4." msgstr " -4 Connexion en IPv4." msgid " -6 Connect using IPv6." msgstr " -6 Connexion en IPv6." msgid " -C Send requests using chunking (default)." msgstr "" msgid " -D Remove the input file when finished." msgstr "" " -D Suppression du fichier d'entrée une fois terminé." msgid " -D name=value Set named variable to value." msgstr " -D nom=valeur Affecter la variable nom à cette valeur." msgid " -E Encrypt the connection." msgstr " -E Chiffrer la connexion." msgid "" " -E Test with encryption using HTTP Upgrade to TLS." msgstr "" " -E Test avec le chiffrement utilisant HTTP avec TLS." msgid "" " -F Run in the foreground but detach from console." msgstr "" " -F Exécuter en avant-plan mais détaché de la console." msgid " -H samba-server Use the named SAMBA server." msgstr " -H serveur-samba Utiliser le serveur SAMBA nommé." msgid " -I Ignore errors." msgstr " -I Ignorer les erreurs." msgid " -I include-dir Add include directory to search path." msgstr "" " -I rep-inclus Ajouter le répertoire au chemin des recherches." msgid " -I {filename,filters,none,profiles}" msgstr " -I {nomDeFichier,filtres,none,profils}" msgid " -L Send requests using content-length." msgstr "" msgid "" " -P filename.plist Produce XML plist to a file and test report to " "standard output." msgstr "" msgid " -P filename.ppd Set PPD file." msgstr " -P fichier.ppd Choisir un fichier PPD." msgid " -P number[-number] Match port to number or range." msgstr "" " -P numéro[-numéro] Correspondance du port à un numéro ou une plage de " "numéro." msgid " -R root-directory Set alternate root." msgstr " -R répertoire-root Choisir une autre racine." msgid " -S Test with encryption using HTTPS." msgstr " -S Tester avec un chiffrement utilisant HTTPS." msgid " -T seconds Set the browse timeout in seconds." msgstr "" " -T secondes Choisir le délai d'expiration de la navigation en " "secondes." msgid " -T seconds Set the receive/send timeout in seconds." msgstr "" " -T secondes Choisir le délai d'expiration réception/envoi en " "secondes." msgid " -U username Specify username." msgstr " -U nom Indiquer le nom d'utilisateur." msgid " -V version Set default IPP version." msgstr " -V version Choisir la version d'IPP par défaut." msgid "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgstr "" msgid " -X Produce XML plist instead of plain text." msgstr "" msgid " -a Export all printers." msgstr " -a Exporter toutes les imprimantes." msgid " -c Produce CSV output." msgstr " -c Produire une sortie CSV." msgid " -c catalog.po Load the specified message catalog." msgstr " -c catalogue.po Charger le catalogue de messages." msgid " -c cups-files.conf Set cups-files.conf file to use." msgstr " -c fichier-cups.conf Utiliser le fichier fichier-cups.conf." msgid " -c cupsd.conf Set cupsd.conf file to use." msgstr " -c cupsd.conf Utiliser le fichier cupsd.conf." msgid " -d name=value Set named variable to value." msgstr " -d nom=valeur Affecter la valeur à la variable nom." msgid " -d output-dir Specify the output directory." msgstr " -d répertoire-sortie Indiquer le répertoire de sortie." msgid " -d printer Use the named printer." msgstr " -d imprimante Utiliser l'imprimante nommée." msgid " -d regex Match domain to regular expression." msgstr "" " -d regex Correspondance du domaine avec l'expression " "rationnelle." msgid " -e Use every filter from the PPD file." msgstr " -e Utiliser tous les filtres du fichier PPD." msgid " -f Run in the foreground." msgstr " -f Exécuter en avant-plan." msgid " -f filename Set default request filename." msgstr "" msgid " -h Show this usage message." msgstr " -h Afficher le message d'usage." msgid " -h Validate HTTP response headers." msgstr "" msgid " -h regex Match hostname to regular expression." msgstr "" " -h regex Correspondance du nom d'hôte avec l'expression " "rationnelle." msgid " -h server[:port] Specify server address." msgstr " -h serveur[:port] Indiquer l'adresse du serveur." msgid " -i mime/type Set input MIME type (otherwise auto-typed)." msgstr "" " -i mime/type Affecter le type MIME d'entrée (sinon type " "automatique)" msgid "" " -i seconds Repeat the last file with the given time interval." msgstr "" " -i secondes Repéter le dernier fichier avec l'intervale de " "temps indiqué." msgid "" " -j job-id[,N] Filter file N from the specified job (default is " "file 1)." msgstr "" " -j job-id[,N] Filtrer le fichier N de la tâche indiquée (par " "défaut, c'est le fichier 1)." msgid " -l List attributes." msgstr " -l Attributs de la liste." msgid " -l Produce plain text output." msgstr " -l Produire une sortie plain text." msgid " -l Run cupsd on demand." msgstr "" msgid " -l lang[,lang,...] Specify the output language(s) (locale)." msgstr "" " -l lang[,lang,...] Indiquer la(les) langue(s) de sortie (locale)." msgid " -m Use the ModelName value as the filename." msgstr "" msgid "" " -m mime/type Set output MIME type (otherwise application/pdf)." msgstr "" msgid " -n copies Set number of copies." msgstr " -n copies Choisir le nombre de copies." msgid "" " -n count Repeat the last file the given number of times." msgstr "" " -n compteur Repéter le dernier fichier le nombre de fois " "indiqué." msgid " -n regex Match service name to regular expression." msgstr "" " -n regex Correspondance du nom de service avec une " "expression rationnelle." msgid "" " -o filename.drv Set driver information file (otherwise ppdi.drv)." msgstr "" " -o fichier.drv Affecter le fichier d'infos du pilote (sinon ppdi." "drv)." msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)." msgstr "" " -o fichier.ppd[.gz] Affecter le fichier de sortie (sinon sortie " "standard)." msgid " -o name=value Set option(s)." msgstr " -o nom=valeur Affecter des option(s)." msgid " -p Print URI if true." msgstr " -p Afficher l'URI si vrai." msgid " -p filename.ppd Set PPD file." msgstr " -p nomFichier.ppd Affecter le fichier PPD." msgid " -q Quietly report match via exit code." msgstr "" msgid " -q Run silently." msgstr " -q Exécuter silencieusement." msgid " -r True if service is remote." msgstr " -r Vrai si le service est distant." msgid " -r Use 'relaxed' open mode." msgstr "" msgid " -s Print service name if true." msgstr " -s Afficher le nom du service si vrai." msgid " -s cups-files.conf Set cups-files.conf file to use." msgstr "" msgid " -t Produce a test report." msgstr " -t Produire un rapport de test." msgid " -t Test PPDs instead of generating them." msgstr " -t Tester les PPDs plutôt que les produire." msgid " -t Test the configuration file." msgstr " -t Tester le fichier de configuration." msgid " -t key True if the TXT record contains the key." msgstr "" " -t clef Vrai si l'enregistrement TXT contient la clef." msgid " -t title Set title." msgstr " -t title Affecter le titre." msgid " -u Remove the PPD file when finished." msgstr " -u Supprimer le fichier PPD, une fois terminé." msgid " -u regex Match URI to regular expression." msgstr "" " -u regex Correspondance URI avec l'expression rationnelle." msgid " -v Be verbose." msgstr " -v Verbeux." msgid " -vv Be very verbose." msgstr " -vv Très verbeux." msgid "" " -x utility [argument ...] ;\n" " Execute program if true." msgstr "" msgid " -z Compress PPD files using GNU zip." msgstr " -z Compresser les fichiers PPD avec GNU zip." msgid " IPPFIND_SERVICE_DOMAIN Domain name" msgstr " IPPFIND_SERVICE_DOMAIN Nom de domaine" msgid "" " IPPFIND_SERVICE_HOSTNAME\n" " Fully-qualified domain name" msgstr "" " IPPFIND_SERVICE_HOSTNAME\n" " Nom de domaine complet (FQDN)" msgid " IPPFIND_SERVICE_NAME Service instance name" msgstr " IPPFIND_SERVICE_NAME Nom d'instance du service" msgid " IPPFIND_SERVICE_PORT Port number" msgstr " IPPFIND_SERVICE_PORT Numéro du port" msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type" msgstr " IPPFIND_SERVICE_REGTYPE Type d'enregistrement DNS-SD" msgid " IPPFIND_SERVICE_SCHEME URI scheme" msgstr " IPPFIND_SERVICE_SCHEME Schema URI" msgid " IPPFIND_SERVICE_URI URI" msgstr "" msgid " IPPFIND_TXT_* Value of TXT record key" msgstr "" msgid "" " expression --and expression\n" " Logical AND." msgstr "" " expression --and expression\n" " ET logique." msgid "" " expression --or expression\n" " Logical OR." msgstr "" " expression --or expression\n" " OU logique." msgid " expression expression Logical AND." msgstr " expression expression ET logique." msgid " {service_domain} Domain name" msgstr " {service_domain} Nom de domaine" msgid " {service_hostname} Fully-qualified domain name" msgstr " {service_hostname} Nom de domaine complet (FQDN)" msgid " {service_name} Service instance name" msgstr " {service_name} Nom de l'instance du service" msgid " {service_port} Port number" msgstr " {service_port} Numéro du port" msgid " {service_regtype} DNS-SD registration type" msgstr " {service_regtype} Type d'enregistrement DNS-SD" msgid " {service_scheme} URI scheme" msgstr " {service_scheme} Schéma URI" msgid " {service_uri} URI" msgstr " {service_uri} URI" msgid " {txt_*} Value of TXT record key" msgstr " {txt_*} Valeur de la clef d'enregistrement TXT" msgid " {} URI" msgstr " {} URI" msgid " FAIL" msgstr " ÉCHEC" msgid " PASS" msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section " "5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." msgstr "" #, c-format msgid "" "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 " "section 5.1.14)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section " "5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " "positive (RFC 8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC " "8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes" msgstr "%-7s %-7.7s %-7d %-31.31s %.0f octets" #, c-format msgid "%d x %d mm" msgstr "" #, c-format msgid "%g x %g \"" msgstr "" #, c-format msgid "%s (%s)" msgstr "" #, c-format msgid "%s (%s, %s)" msgstr "" #, c-format msgid "%s (Borderless)" msgstr "%s (Sans bordure)" #, c-format msgid "%s (Borderless, %s)" msgstr "%s (Sans bordure, %s)" #, c-format msgid "%s (Borderless, %s, %s)" msgstr "%s (Sans bordure, %s, %s)" #, c-format msgid "%s accepting requests since %s" msgstr "%s accepte des requêtes depuis %s" #, c-format msgid "%s cannot be changed." msgstr "Impossible de modifier « %s »" #, c-format msgid "%s is not implemented by the CUPS version of lpc." msgstr "%s n'est pas disponible dans la version CUPS de lpc." #, c-format msgid "%s is not ready" msgstr "%s n'est pas prêt" #, c-format msgid "%s is ready" msgstr "%s est prêt" #, c-format msgid "%s is ready and printing" msgstr "%s est prêt et en cours d'impression" #, c-format msgid "%s job-id user title copies options [file]" msgstr "" #, c-format msgid "%s not accepting requests since %s -" msgstr "%s n'accepte plus de requêtes depuis %s" #, c-format msgid "%s not supported." msgstr "%s n'est pas géré." #, c-format msgid "%s/%s accepting requests since %s" msgstr "%s/%s accepte des requêtes depuis %s" #, c-format msgid "%s/%s not accepting requests since %s -" msgstr "%s/%s n'accepte plus de requêtes depuis %s" #, c-format msgid "%s: %-33.33s [job %d localhost]" msgstr "" #. TRANSLATORS: Message is "subject: error" #, c-format msgid "%s: %s" msgstr "%s : %s" #, c-format msgid "%s: %s failed: %s" msgstr "%s : %s échec : %s" #, c-format msgid "%s: Bad printer URI \"%s\"." msgstr "%s : mauvaise URI de l'imprimante « %s »." #, c-format msgid "%s: Bad version %s for \"-V\"." msgstr "%s : Mauvaise version %s for « -V »." #, c-format msgid "%s: Don't know what to do." msgstr "%s : ne sait pas quoi faire." #, c-format msgid "%s: Error - %s" msgstr "" #, c-format msgid "" "%s: Error - %s environment variable names non-existent destination \"%s\"." msgstr "" #, c-format msgid "%s: Error - add '/version=1.1' to server name." msgstr "%s : erreur - ajouter « /version=1.1 » au nom du serveur." #, c-format msgid "%s: Error - bad job ID." msgstr "%s : erreur - mauvais ID de tâche" #, c-format msgid "%s: Error - cannot print files and alter jobs simultaneously." msgstr "" #, c-format msgid "%s: Error - cannot print from stdin if files or a job ID are provided." msgstr "" #, c-format msgid "%s: Error - copies must be 1 or more." msgstr "%s : erreur - les copies doivent être supérieures ou égales à 1." #, c-format msgid "%s: Error - expected character set after \"-S\" option." msgstr "%s : erreur - jeu de caractères attendu après l'option « -S »." #, c-format msgid "%s: Error - expected content type after \"-T\" option." msgstr "%s : erreur - type de contenu attendu après l'option « -T »" #, c-format msgid "%s: Error - expected copies after \"-#\" option." msgstr "%s : erreur - copies attendues après l'option « -# »." #, c-format msgid "%s: Error - expected copies after \"-n\" option." msgstr "%s : erreur - copies attendues après l'option « -n »." #, c-format msgid "%s: Error - expected destination after \"-P\" option." msgstr "%s : erreur - destination attendue après l'option « -P »." #, c-format msgid "%s: Error - expected destination after \"-d\" option." msgstr "%s : erreur - destination attendue après l'option « -d »." #, c-format msgid "%s: Error - expected form after \"-f\" option." msgstr "" #, c-format msgid "%s: Error - expected hold name after \"-H\" option." msgstr "" #, c-format msgid "%s: Error - expected hostname after \"-H\" option." msgstr "%s : erreur - nom d'hôte attendu après l'option « -H »." #, c-format msgid "%s: Error - expected hostname after \"-h\" option." msgstr "%s : erreur - nom d'hôte attendu après l'option « -h »." #, c-format msgid "%s: Error - expected mode list after \"-y\" option." msgstr "" #, c-format msgid "%s: Error - expected name after \"-%c\" option." msgstr "%s : erreur - nom attendu après l'option « -%c »." #, c-format msgid "%s: Error - expected option=value after \"-o\" option." msgstr "%s : erreur - option=valeur attendu après l'option « -o »." #, c-format msgid "%s: Error - expected page list after \"-P\" option." msgstr "%s : erreur - liste de page attendue après l'option « -P »." #, c-format msgid "%s: Error - expected priority after \"-%c\" option." msgstr "%s : erreur - priorité attendue après l'option « -%c »." #, c-format msgid "%s: Error - expected reason text after \"-r\" option." msgstr "" #, c-format msgid "%s: Error - expected title after \"-t\" option." msgstr "%s : erreur - titre attendu après l'option « -t »." #, c-format msgid "%s: Error - expected username after \"-U\" option." msgstr "%s : erreur - nom d'utilisateur attendu après l'option « -U »." #, c-format msgid "%s: Error - expected username after \"-u\" option." msgstr "%s : erreur - nom d'utilisateur attendu après l'option « -u »." #, c-format msgid "%s: Error - expected value after \"-%c\" option." msgstr "%s : erreur - valeur attendue après l'option « -%c »." #, c-format msgid "" "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" " "option." msgstr "" #, c-format msgid "%s: Error - no default destination available." msgstr "%s : erreur - aucune destination par défaut disponible." #, c-format msgid "%s: Error - priority must be between 1 and 100." msgstr "%s : erreur - la priorité doit être comprise entre 1 et 100." #, c-format msgid "%s: Error - scheduler not responding." msgstr "%s : erreur - l'ordonnanceur ne répond pas." #, c-format msgid "%s: Error - too many files - \"%s\"." msgstr "%s : erreur - trop de fichiers - « %s »." #, c-format msgid "%s: Error - unable to access \"%s\" - %s" msgstr "%s : erreur - impossible d'accéder à « %s » - « %s »" #, c-format msgid "%s: Error - unable to queue from stdin - %s." msgstr "" #, c-format msgid "%s: Error - unknown destination \"%s\"." msgstr "%s : erreur - destination inconnue - « %s »." #, c-format msgid "%s: Error - unknown destination \"%s/%s\"." msgstr "%s : erreur - destination inconnue - « %s/%s »." #, c-format msgid "%s: Error - unknown option \"%c\"." msgstr "%s : erreur - option inconnue - « %c »." #, c-format msgid "%s: Error - unknown option \"%s\"." msgstr "%s : erreur - option inconnue - « %s »." #, c-format msgid "%s: Expected job ID after \"-i\" option." msgstr "" #, c-format msgid "%s: Invalid destination name in list \"%s\"." msgstr "" #, c-format msgid "%s: Invalid filter string \"%s\"." msgstr "" #, c-format msgid "%s: Missing filename for \"-P\"." msgstr "%s : nom de fichier manquant pour « -P »." #, c-format msgid "%s: Missing timeout for \"-T\"." msgstr "%s : délai d'expiration manquant pour « -T »." #, c-format msgid "%s: Missing version for \"-V\"." msgstr "%s : version manquante pour « -V »." #, c-format msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"." msgstr "" #, c-format msgid "%s: No filter to convert from %s/%s to %s/%s." msgstr "%s : aucun filtre pour convertir %s/%s en %s/%s." #, c-format msgid "%s: Operation failed: %s" msgstr "%s : échec de l'opération : %s" #, c-format msgid "%s: Sorry, no encryption support." msgstr "%s : désolé, chiffrement indisponible." #, c-format msgid "%s: Unable to connect to \"%s:%d\": %s" msgstr "%s : impossible de se connecter à « %s/%d » : %s" #, c-format msgid "%s: Unable to connect to server." msgstr "%s : impossible de se connecter au serveur." #, c-format msgid "%s: Unable to contact server." msgstr "%s : impossible de contacter au serveur." #, c-format msgid "%s: Unable to create PPD file: %s" msgstr "%s : impossible de créer le fichier PPD : %s" #, c-format msgid "%s: Unable to determine MIME type of \"%s\"." msgstr "" #, c-format msgid "%s: Unable to open \"%s\": %s" msgstr "%s : impossible d'ouvrir « %s » : %s" #, c-format msgid "%s: Unable to open %s: %s" msgstr "%s : impossible d'ouvrir %s : %s" #, c-format msgid "%s: Unable to open PPD file: %s on line %d." msgstr "%s : impossible d'ouvrir le fichier PPD : %s sur la ligne %d." #, c-format msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"." msgstr "" #, c-format msgid "%s: Unable to resolve \"%s\"." msgstr "%s : impossible de résoudre « %s »." #, c-format msgid "%s: Unknown argument \"%s\"." msgstr "%s : paramètre inconnu « %s »." #, c-format msgid "%s: Unknown destination \"%s\"." msgstr "%s : destination inconnue « %s »." #, c-format msgid "%s: Unknown destination MIME type %s/%s." msgstr "" #, c-format msgid "%s: Unknown option \"%c\"." msgstr "%s : option inconnue « %c »." #, c-format msgid "%s: Unknown option \"%s\"." msgstr "%s : option inconnue « %s »." #, c-format msgid "%s: Unknown option \"-%c\"." msgstr "%s : option inconnue « -%c »." #, c-format msgid "%s: Unknown source MIME type %s/%s." msgstr "" #, c-format msgid "" "%s: Warning - \"%c\" format modifier not supported - output may not be " "correct." msgstr "" #, c-format msgid "%s: Warning - character set option ignored." msgstr "" #, c-format msgid "%s: Warning - content type option ignored." msgstr "" #, c-format msgid "%s: Warning - form option ignored." msgstr "" #, c-format msgid "%s: Warning - mode option ignored." msgstr "" msgid "-1" msgstr "-1" msgid "-10" msgstr "-10" msgid "-100" msgstr "-100" msgid "-105" msgstr "-105" msgid "-11" msgstr "-11" msgid "-110" msgstr "-110" msgid "-115" msgstr "-115" msgid "-12" msgstr "-12" msgid "-120" msgstr "-120" msgid "-13" msgstr "-13" msgid "-14" msgstr "-14" msgid "-15" msgstr "-15" msgid "-2" msgstr "-2" msgid "-20" msgstr "-20" msgid "-25" msgstr "-25" msgid "-3" msgstr "-3" msgid "-30" msgstr "-30" msgid "-35" msgstr "-35" msgid "-4" msgstr "-4" msgid "-40" msgstr "-40" msgid "-45" msgstr "-45" msgid "-5" msgstr "-5" msgid "-50" msgstr "-50" msgid "-55" msgstr "-55" msgid "-6" msgstr "-6" msgid "-60" msgstr "-60" msgid "-65" msgstr "-65" msgid "-7" msgstr "-7" msgid "-70" msgstr "-70" msgid "-75" msgstr "-75" msgid "-8" msgstr "-8" msgid "-80" msgstr "-80" msgid "-85" msgstr "-85" msgid "-9" msgstr "-9" msgid "-90" msgstr "-90" msgid "-95" msgstr "-95" msgid "0" msgstr "0" msgid "1" msgstr "1" msgid "1 inch/sec." msgstr "1 po/s" msgid "1.25x0.25\"" msgstr "1,25 x 0,25\"" msgid "1.25x2.25\"" msgstr "1,25 x 2,25\"" msgid "1.5 inch/sec." msgstr "1,5 po/s" msgid "1.50x0.25\"" msgstr "1,50 x 0,25\"" msgid "1.50x0.50\"" msgstr "1,50 x 0,50\"" msgid "1.50x1.00\"" msgstr "1,50 x 1,00\"" msgid "1.50x2.00\"" msgstr "1,50 x 2,00\"" msgid "10" msgstr "10" msgid "10 inches/sec." msgstr "10 po/s" msgid "10 x 11" msgstr "" msgid "10 x 13" msgstr "" msgid "10 x 14" msgstr "" msgid "100" msgstr "100" msgid "100 mm/sec." msgstr "100 mm/s" msgid "105" msgstr "105" msgid "11" msgstr "11" msgid "11 inches/sec." msgstr "11 po/s" msgid "110" msgstr "110" msgid "115" msgstr "115" msgid "12" msgstr "12" msgid "12 inches/sec." msgstr "12 po/s" msgid "12 x 11" msgstr "" msgid "120" msgstr "120" msgid "120 mm/sec." msgstr "120 mm/s" msgid "120x60dpi" msgstr "120 x 60 ppp" msgid "120x72dpi" msgstr "120 x 72 ppp" msgid "13" msgstr "13" msgid "136dpi" msgstr "136 ppp" msgid "14" msgstr "14" msgid "15" msgstr "15" msgid "15 mm/sec." msgstr "15 mm/s" msgid "15 x 11" msgstr "" msgid "150 mm/sec." msgstr "150 mm/s" msgid "150dpi" msgstr "150 ppp" msgid "16" msgstr "16" msgid "17" msgstr "17" msgid "18" msgstr "18" msgid "180dpi" msgstr "180 ppp" msgid "19" msgstr "19" msgid "2" msgstr "2" msgid "2 inches/sec." msgstr "2 po/s" msgid "2-Hole Punch (Landscape)" msgstr "Perforation à 2 trous (Paysage)" msgid "2-Hole Punch (Portrait)" msgstr "Perforation à 2 trous (Portrait)" msgid "2-Hole Punch (Reverse Landscape)" msgstr "Perforation à 2 trous (Paysage inversé)" msgid "2-Hole Punch (Reverse Portrait)" msgstr "Perforation à 2 trous (Portrait inversé)" msgid "2-Sided Printing" msgstr "Impression recto-verso" msgid "2.00x0.37\"" msgstr "2,00 x 0,37\"" msgid "2.00x0.50\"" msgstr "2,00 x 0,50\"" msgid "2.00x1.00\"" msgstr "2,00 x 1,00\"" msgid "2.00x1.25\"" msgstr "2,00 x 1,25\"" msgid "2.00x2.00\"" msgstr "2,00 x 2,00\"" msgid "2.00x3.00\"" msgstr "2,00 x 3,00\"" msgid "2.00x4.00\"" msgstr "2,00 x 4,00\"" msgid "2.00x5.50\"" msgstr "2,00 x 5,50\"" msgid "2.25x0.50\"" msgstr "2,25 x 0,50\"" msgid "2.25x1.25\"" msgstr "2,25 x 1,25\"" msgid "2.25x4.00\"" msgstr "2,25 x 4,00\"" msgid "2.25x5.50\"" msgstr "2,25 x 5,50\"" msgid "2.38x5.50\"" msgstr "2,38 x 5,50\"" msgid "2.5 inches/sec." msgstr "2,5 po/s" msgid "2.50x1.00\"" msgstr "2,50 x 1,00\"" msgid "2.50x2.00\"" msgstr "2,50 x 2,00\"" msgid "2.75x1.25\"" msgstr "2,75 x 1,25\"" msgid "2.9 x 1\"" msgstr "2.9 x 1\"" msgid "20" msgstr "20" msgid "20 mm/sec." msgstr "20 mm/s" msgid "200 mm/sec." msgstr "200 mm/s" msgid "203dpi" msgstr "203 ppp" msgid "21" msgstr "21" msgid "22" msgstr "22" msgid "23" msgstr "23" msgid "24" msgstr "24" msgid "24-Pin Series" msgstr "Série 24 broches" msgid "240x72dpi" msgstr "240 x 72 ppp" msgid "25" msgstr "25" msgid "250 mm/sec." msgstr "250 mm/s" msgid "26" msgstr "26" msgid "27" msgstr "27" msgid "28" msgstr "28" msgid "29" msgstr "29" msgid "3" msgstr "3" msgid "3 inches/sec." msgstr "3 po/s" msgid "3 x 5" msgstr "" msgid "3-Hole Punch (Landscape)" msgstr "Perforation à 3 trous (Paysage)" msgid "3-Hole Punch (Portrait)" msgstr "Perforation à 3 trous (Portrait)" msgid "3-Hole Punch (Reverse Landscape)" msgstr "Perforation à 3 trous (Paysage inversé)" msgid "3-Hole Punch (Reverse Portrait)" msgstr "Perforation à 3 trous (Portrait inversé)" msgid "3.00x1.00\"" msgstr "3,00 x 1,00\"" msgid "3.00x1.25\"" msgstr "3,00 x 1,25\"" msgid "3.00x2.00\"" msgstr "3,00 x 2,00\"" msgid "3.00x3.00\"" msgstr "3,00 x 3,00\"" msgid "3.00x5.00\"" msgstr "3,00 x 5,00\"" msgid "3.25x2.00\"" msgstr "3,25 x 2,00\"" msgid "3.25x5.00\"" msgstr "3,25 x 5,00\"" msgid "3.25x5.50\"" msgstr "3,25 x 5,50\"" msgid "3.25x5.83\"" msgstr "3,25 x 5,83\"" msgid "3.25x7.83\"" msgstr "3,25 x 7,83\"" msgid "3.5 x 5" msgstr "" msgid "3.5\" Disk" msgstr "Disque 3,5\"" msgid "3.50x1.00\"" msgstr "3,50 x 1,00\"" msgid "30" msgstr "30" msgid "30 mm/sec." msgstr "30 mm/s" msgid "300 mm/sec." msgstr "300 mm/s" msgid "300dpi" msgstr "300 ppp" msgid "35" msgstr "35" msgid "360dpi" msgstr "360 ppp" msgid "360x180dpi" msgstr "360 x 180 ppp" msgid "4" msgstr "4" msgid "4 inches/sec." msgstr "4 po/s" msgid "4-Hole Punch (Landscape)" msgstr "Perforation à 4 trous (Paysage)" msgid "4-Hole Punch (Portrait)" msgstr "Perforation à 4 trous (Portrait)" msgid "4-Hole Punch (Reverse Landscape)" msgstr "Perforation à 4 trous (Paysage inversé)" msgid "4-Hole Punch (Reverse Portrait)" msgstr "Perforation à 4 trous (Portrait inversé)" msgid "4.00x1.00\"" msgstr "4,00 x 1,00\"" msgid "4.00x13.00\"" msgstr "4,00 x 13,00\"" msgid "4.00x2.00\"" msgstr "4,00 x 2,00\"" msgid "4.00x2.50\"" msgstr "4,00 x 2,50\"" msgid "4.00x3.00\"" msgstr "4,00 x 3,00\"" msgid "4.00x4.00\"" msgstr "4,00 x 4,00\"" msgid "4.00x5.00\"" msgstr "4,00 x 5,00\"" msgid "4.00x6.00\"" msgstr "4,00 x 6,00\"" msgid "4.00x6.50\"" msgstr "4,00 x 6,50\"" msgid "40" msgstr "40" msgid "40 mm/sec." msgstr "40 mm/s" msgid "45" msgstr "45" msgid "5" msgstr "5" msgid "5 inches/sec." msgstr "5 po/s" msgid "5 x 7" msgstr "" msgid "50" msgstr "50" msgid "55" msgstr "55" msgid "6" msgstr "6" msgid "6 inches/sec." msgstr "6 po/s" msgid "6.00x1.00\"" msgstr "6,00 x 1,00\"" msgid "6.00x2.00\"" msgstr "6,00 x 2,00\"" msgid "6.00x3.00\"" msgstr "6,00 x 3,00\"" msgid "6.00x4.00\"" msgstr "6,00 x 4,00\"" msgid "6.00x5.00\"" msgstr "6,00 x 5,00\"" msgid "6.00x6.00\"" msgstr "6,00 x 6,00\"" msgid "6.00x6.50\"" msgstr "6,00 x 6,50\"" msgid "60" msgstr "60" msgid "60 mm/sec." msgstr "60 mm/s" msgid "600dpi" msgstr "600 ppp" msgid "60dpi" msgstr "60 ppp" msgid "60x72dpi" msgstr "" msgid "65" msgstr "65" msgid "7" msgstr "7" msgid "7 inches/sec." msgstr "7 po/s" msgid "7 x 9" msgstr "" msgid "70" msgstr "70" msgid "75" msgstr "75" msgid "8" msgstr "8" msgid "8 inches/sec." msgstr "8 po/s" msgid "8 x 10" msgstr "" msgid "8.00x1.00\"" msgstr "8,00 x 1,00\"" msgid "8.00x2.00\"" msgstr "8,00 x 2,00\"" msgid "8.00x3.00\"" msgstr "8,00 x 3,00\"" msgid "8.00x4.00\"" msgstr "8,00 x 4,00\"" msgid "8.00x5.00\"" msgstr "8,00 x 5,00\"" msgid "8.00x6.00\"" msgstr "8,00 x 6,00\"" msgid "8.00x6.50\"" msgstr "8,00 x 6,50\"" msgid "80" msgstr "80" msgid "80 mm/sec." msgstr "80 mm/s" msgid "85" msgstr "85" msgid "9" msgstr "9" msgid "9 inches/sec." msgstr "9 po/s" msgid "9 x 11" msgstr "" msgid "9 x 12" msgstr "" msgid "9-Pin Series" msgstr "Série 9 broches" msgid "90" msgstr "90" msgid "95" msgstr "95" msgid "?Invalid help command unknown." msgstr "" msgid "A Samba password is required to export printer drivers" msgstr "" msgid "A Samba username is required to export printer drivers" msgstr "" #, c-format msgid "A class named \"%s\" already exists." msgstr "" #, c-format msgid "A printer named \"%s\" already exists." msgstr "Une imprimante nommée « %s » existe déjà." msgid "A0" msgstr "A0" msgid "A0 Long Edge" msgstr "A0 Bord long" msgid "A1" msgstr "A1" msgid "A1 Long Edge" msgstr "A1 Bord long" msgid "A10" msgstr "A10" msgid "A2" msgstr "A2" msgid "A2 Long Edge" msgstr "A2 Bord long" msgid "A3" msgstr "A3" msgid "A3 Long Edge" msgstr "A3 Bord long" msgid "A3 Oversize" msgstr "" msgid "A3 Oversize Long Edge" msgstr "" msgid "A4" msgstr "A4" msgid "A4 Long Edge" msgstr "A4 Bord long" msgid "A4 Oversize" msgstr "" msgid "A4 Small" msgstr "" msgid "A5" msgstr "A5" msgid "A5 Long Edge" msgstr "A5 Bord long" msgid "A5 Oversize" msgstr "" msgid "A6" msgstr "A6" msgid "A6 Long Edge" msgstr "A6 Bord long" msgid "A7" msgstr "A7" msgid "A8" msgstr "A8" msgid "A9" msgstr "A9" msgid "ANSI A" msgstr "ANSI A" msgid "ANSI B" msgstr "ANSI B" msgid "ANSI C" msgstr "ANSI C" msgid "ANSI D" msgstr "ANSI D" msgid "ANSI E" msgstr "ANSI E" msgid "ARCH C" msgstr "ARCH C" msgid "ARCH C Long Edge" msgstr "ARCH C Bord long" msgid "ARCH D" msgstr "ARCH D" msgid "ARCH D Long Edge" msgstr "ARCH D Bord long" msgid "ARCH E" msgstr "ARCH E" msgid "ARCH E Long Edge" msgstr "ARCH E Bord long" msgid "Accept Jobs" msgstr "Accepter les tâches" msgid "Accepted" msgstr "Accepté" msgid "Accordian Fold" msgstr "Pliage en accordéon" msgid "Add Class" msgstr "Ajouter une classe" msgid "Add Printer" msgstr "Ajouter une imprimante" msgid "Add RSS Subscription" msgstr "Ajouter abonnement RSS" msgid "Address" msgstr "Adresse" msgid "Administration" msgstr "Administration" msgid "Advanced Photo Paper" msgstr "" msgid "Alternate" msgstr "" msgid "Alternate Roll" msgstr "" msgid "Aluminum" msgstr "" msgid "Always" msgstr "Toujours" msgid "AppSocket/HP JetDirect" msgstr "AppSocket/HP JetDirect" msgid "Applicator" msgstr "Applicator" msgid "Archival Envelope" msgstr "" msgid "Archival Fabric" msgstr "" msgid "Archival Paper" msgstr "" msgid "Archival Photo Paper" msgstr "" #, c-format msgid "Attempt to set %s printer-state to bad value %d." msgstr "" #, c-format msgid "Attribute \"%s\" is in the wrong group." msgstr "" #, c-format msgid "Attribute \"%s\" is the wrong value type." msgstr "" #, c-format msgid "Attribute groups are out of order (%x < %x)." msgstr "" msgid "Automatic" msgstr "Automatique" msgid "B0" msgstr "B0" msgid "B1" msgstr "B1" msgid "B10" msgstr "B10" msgid "B2" msgstr "B2" msgid "B3" msgstr "B3" msgid "B4" msgstr "B4" msgid "B5" msgstr "B5" msgid "B5 Oversize" msgstr "" msgid "B6" msgstr "B6" msgid "B7" msgstr "B7" msgid "B8" msgstr "B8" msgid "B9" msgstr "B9" msgid "Back Print Film" msgstr "" #, c-format msgid "Bad 'document-format' value \"%s\"." msgstr "" msgid "Bad NULL dests pointer" msgstr "Pointeur de dests NULL incorrect" msgid "Bad OpenGroup" msgstr "OpenGroup erroné" msgid "Bad OpenUI/JCLOpenUI" msgstr "OpenUI/JCLOpenUI erroné" msgid "Bad OrderDependency" msgstr "OrderDependency erroné" msgid "Bad PPD cache file." msgstr "" msgid "Bad PPD file." msgstr "Fichier PPD incorrect." msgid "Bad Request" msgstr "Requête incorrecte." msgid "Bad SNMP version number" msgstr "Numéro de version SNMP incorrect" msgid "Bad UIConstraints" msgstr "" msgid "Bad arguments to function" msgstr "Paramètres de la fonction incorrects" #, c-format msgid "Bad copies value %d." msgstr "Valeur « %d » incorrecte pour copies." msgid "Bad custom parameter" msgstr "Paramètre personnalisé incorrect" #, c-format msgid "Bad device-uri \"%s\"." msgstr "" #, c-format msgid "Bad device-uri scheme \"%s\"." msgstr "" #, c-format msgid "Bad document-format \"%s\"." msgstr "" #, c-format msgid "Bad document-format-default \"%s\"." msgstr "" msgid "Bad filename buffer" msgstr "" msgid "Bad hostname/address in URI" msgstr "" #, c-format msgid "Bad job-name value: %s" msgstr "" msgid "Bad job-name value: Wrong type or count." msgstr "" msgid "Bad job-priority value." msgstr "" #, c-format msgid "Bad job-sheets value \"%s\"." msgstr "" msgid "Bad job-sheets value type." msgstr "" msgid "Bad job-state value." msgstr "" #, c-format msgid "Bad job-uri \"%s\"." msgstr "" #, c-format msgid "Bad notify-pull-method \"%s\"." msgstr "" #, c-format msgid "Bad notify-recipient-uri \"%s\"." msgstr "" #, c-format msgid "Bad number-up value %d." msgstr "Valeur de number-up %d incorrecte." #, c-format msgid "Bad option + choice on line %d." msgstr "" #, c-format msgid "Bad page-ranges values %d-%d." msgstr "Intervalle de pages erroné : %d-%d." msgid "Bad port number in URI" msgstr "Numéro de port incorrect dans l'URI" #, c-format msgid "Bad port-monitor \"%s\"." msgstr "" #, c-format msgid "Bad printer-state value %d." msgstr "" msgid "Bad printer-uri." msgstr "" #, c-format msgid "Bad request ID %d." msgstr "" #, c-format msgid "Bad request version number %d.%d." msgstr "" #, c-format msgid "Bad requesting-user-name value: %s" msgstr "" msgid "Bad resource in URI" msgstr "" msgid "Bad scheme in URI" msgstr "" msgid "Bad subscription ID" msgstr "" msgid "Bad username in URI" msgstr "" msgid "Bad value string" msgstr "" msgid "Bad/empty URI" msgstr "" msgid "Bale" msgstr "" msgid "Banners" msgstr "Bannières" msgid "Bind" msgstr "" msgid "Bind (Landscape)" msgstr "" msgid "Bind (Portrait)" msgstr "" msgid "Bind (Reverse Landscape)" msgstr "" msgid "Bind (Reverse Portrait)" msgstr "" msgid "Bond Envelope" msgstr "" msgid "Bond Paper" msgstr "Papier pour titres" msgid "Booklet" msgstr "" msgid "Booklet Maker" msgstr "" #, c-format msgid "Boolean expected for waiteof option \"%s\"." msgstr "" msgid "Bottom" msgstr "" msgid "Bottom Tray" msgstr "" msgid "Buffer overflow detected, aborting." msgstr "" msgid "CD" msgstr "CD" msgid "CMYK" msgstr "CMJN" msgid "CPCL Label Printer" msgstr "Imprimante pour étiquettes CPCL" msgid "Cancel Jobs" msgstr "Annuler les tâches" msgid "Cancel RSS Subscription" msgstr "Annuler abonnement RSS" msgid "Canceling print job." msgstr "Annulation de la tâche d'impression." msgid "Cannot change printer-is-shared for remote queues." msgstr "" msgid "Cannot share a remote Kerberized printer." msgstr "" msgid "Cardboard" msgstr "" msgid "Cardstock" msgstr "" msgid "Cassette" msgstr "" msgid "Center" msgstr "" msgid "Center Tray" msgstr "" msgid "Change Settings" msgstr "Modifier les paramètres" #, c-format msgid "Character set \"%s\" not supported." msgstr "Le jeu de caractères \"%s\" n'est pas disponible." msgid "Classes" msgstr "Classes" msgid "Clean Print Heads" msgstr "Nettoyer les têtes d’impression" msgid "Close-Job doesn't support the job-uri attribute." msgstr "" msgid "Coat" msgstr "" msgid "Coated Envelope" msgstr "" msgid "Coated Paper" msgstr "" msgid "Color" msgstr "Couleur" msgid "Color Mode" msgstr "Mode de couleur" msgid "Colored Labels" msgstr "" msgid "" "Commands may be abbreviated. Commands are:\n" "\n" "exit help quit status ?" msgstr "" msgid "Community name uses indefinite length" msgstr "Le nom de la communauté s’avère être de longueur indéfinie" msgid "Connected to printer." msgstr "Connecté à l'imprimante." msgid "Connecting to printer." msgstr "Connexion à l'imprimante en cours." msgid "Continue" msgstr "Continuer" msgid "Continuous" msgstr "Continu" msgid "Continuous Long" msgstr "Continu Long" msgid "Continuous Short" msgstr "Continu Court" msgid "Control file sent successfully." msgstr "" msgid "Copying print data." msgstr "" msgid "Cotton Envelope" msgstr "" msgid "Cotton Paper" msgstr "" msgid "Cover" msgstr "Couverture" msgid "Created" msgstr "Créé" msgid "Credentials do not validate against site CA certificate." msgstr "" msgid "Credentials have expired." msgstr "" msgid "Custom" msgstr "Personnalisation" msgid "CustominCutInterval" msgstr "CustominCutInterval" msgid "CustominTearInterval" msgstr "CustominTearInterval" msgid "Cut" msgstr "Couper" msgid "Cut Media" msgstr "" msgid "Cutter" msgstr "Cutter" msgid "DVD" msgstr "DVD" msgid "Dark" msgstr "Foncé" msgid "Darkness" msgstr "Tons foncés" msgid "Data file sent successfully." msgstr "" msgid "Deep Color" msgstr "" msgid "Delete Class" msgstr "Supprimer la classe" msgid "Delete Printer" msgstr "Supprimer l’imprimante" msgid "DeskJet Series" msgstr "Série DeskJet" #, c-format msgid "Destination \"%s\" is not accepting jobs." msgstr "La destination « %s » n’accepte pas de tâche." #, c-format msgid "" "Device: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s" msgstr "" msgid "Direct Thermal Media" msgstr "Papier pour impression thermique directe" #, c-format msgid "Directory \"%s\" contains a relative path." msgstr "Le répertoire « %s » contient un chemin relatif." #, c-format msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "" "Les permissions du répertoire « %s » sont trop souples (0%o/uid=%d/gid=%d)." #, c-format msgid "Directory \"%s\" is a file." msgstr "Le répertoire « %s » est un fichier." #, c-format msgid "Directory \"%s\" not available: %s" msgstr "Le répertoire « %s » n'est pas disponible : %s" #, c-format msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "" "Les permissions du répertoire « %s » sont correctes (0%o/uid=%d/gid=%d)." msgid "Disabled" msgstr "Désactivé" msgid "Disc" msgstr "Disque" #, c-format msgid "Document #%d does not exist in job #%d." msgstr "" msgid "Double Gate Fold" msgstr "" msgid "Double Staple (Landscape)" msgstr "" msgid "Double Staple (Portrait)" msgstr "" msgid "Double Staple (Reverse Landscape)" msgstr "" msgid "Double Staple (Reverse Portrait)" msgstr "" msgid "Double Wall Cardboard" msgstr "" msgid "Draft" msgstr "Brouillon" msgid "Dry Film" msgstr "" msgid "Duplexer" msgstr "Duplexeur" msgid "Dymo" msgstr "Dymo" msgid "EPL1 Label Printer" msgstr "Imprimante pour étiquettes EPL1" msgid "EPL2 Label Printer" msgstr "Imprimante pour étiquettes EPL2" msgid "Edit Configuration File" msgstr "Modifier le fichier de configuration" msgid "Embossing Foil" msgstr "" msgid "Empty PPD file." msgstr "Fichier PPD vide." msgid "Encryption is not supported." msgstr "Chiffrement indisponible." msgid "End Board" msgstr "" #. TRANSLATORS: Banner/cover sheet after the print job. msgid "Ending Banner" msgstr "Fin de la bannière" msgid "Engineering Z Fold" msgstr "" msgid "English" msgstr "French" msgid "" "Enter your username and password or the root username and password to access " "this page. If you are using Kerberos authentication, make sure you have a " "valid Kerberos ticket." msgstr "" "Entrez votre nom et mot de passe ou ceux de root pour accéder à cette page. " "Si vous utilisez une authentifiation Kerberos, vérifiez que vous disposez " "d'un ticket Kerberos valide." msgid "Envelope" msgstr "Enveloppe" msgid "Envelope #10" msgstr "" msgid "Envelope #11" msgstr "" msgid "Envelope #12" msgstr "" msgid "Envelope #14" msgstr "" msgid "Envelope #9" msgstr "" msgid "Envelope B4" msgstr "" msgid "Envelope B5" msgstr "" msgid "Envelope B6" msgstr "" msgid "Envelope C0" msgstr "" msgid "Envelope C1" msgstr "" msgid "Envelope C2" msgstr "" msgid "Envelope C3" msgstr "" msgid "Envelope C4" msgstr "" msgid "Envelope C5" msgstr "" msgid "Envelope C6" msgstr "" msgid "Envelope C65" msgstr "" msgid "Envelope C7" msgstr "" msgid "Envelope Choukei 3" msgstr "" msgid "Envelope Choukei 3 Long Edge" msgstr "" msgid "Envelope Choukei 4" msgstr "" msgid "Envelope Choukei 4 Long Edge" msgstr "" msgid "Envelope DL" msgstr "" msgid "Envelope Feed" msgstr "Alimentation au format enveloppe" msgid "Envelope Invite" msgstr "" msgid "Envelope Italian" msgstr "Enveloppe italienne" msgid "Envelope Kaku2" msgstr "" msgid "Envelope Kaku2 Long Edge" msgstr "" msgid "Envelope Kaku3" msgstr "" msgid "Envelope Kaku3 Long Edge" msgstr "" msgid "Envelope Monarch" msgstr "" msgid "Envelope PRC1" msgstr "" msgid "Envelope PRC1 Long Edge" msgstr "" msgid "Envelope PRC10" msgstr "" msgid "Envelope PRC10 Long Edge" msgstr "" msgid "Envelope PRC2" msgstr "" msgid "Envelope PRC2 Long Edge" msgstr "" msgid "Envelope PRC3" msgstr "" msgid "Envelope PRC3 Long Edge" msgstr "" msgid "Envelope PRC4" msgstr "" msgid "Envelope PRC4 Long Edge" msgstr "" msgid "Envelope PRC5 Long Edge" msgstr "" msgid "Envelope PRC5PRC5" msgstr "" msgid "Envelope PRC6" msgstr "" msgid "Envelope PRC6 Long Edge" msgstr "" msgid "Envelope PRC7" msgstr "" msgid "Envelope PRC7 Long Edge" msgstr "" msgid "Envelope PRC8" msgstr "" msgid "Envelope PRC8 Long Edge" msgstr "" msgid "Envelope PRC9" msgstr "" msgid "Envelope PRC9 Long Edge" msgstr "" msgid "Envelope Personal" msgstr "" msgid "Envelope You4" msgstr "" msgid "Envelope You4 Long Edge" msgstr "" msgid "Environment Variables:" msgstr "Variables d'environnement :" msgid "Epson" msgstr "Epson" msgid "Error Policy" msgstr "Règles d’erreur" msgid "Error reading raster data." msgstr "" msgid "Error sending raster data." msgstr "" msgid "Error: need hostname after \"-h\" option." msgstr "" msgid "European Fanfold" msgstr "" msgid "European Fanfold Legal" msgstr "" msgid "Every 10 Labels" msgstr "Toutes les 10 étiquettes" msgid "Every 2 Labels" msgstr "Toutes les 2 étiquettes" msgid "Every 3 Labels" msgstr "Toutes les 3 étiquettes" msgid "Every 4 Labels" msgstr "Toutes les 4 étiquettes" msgid "Every 5 Labels" msgstr "Toutes les 5 étiquettes" msgid "Every 6 Labels" msgstr "Toutes les 6 étiquettes" msgid "Every 7 Labels" msgstr "Toutes les 7 étiquettes" msgid "Every 8 Labels" msgstr "Toutes les 8 étiquettes" msgid "Every 9 Labels" msgstr "Toutes les 9 étiquettes" msgid "Every Label" msgstr "Chaque étiquette" msgid "Everyday Glossy Photo Paper" msgstr "" msgid "Everyday Matte Paper" msgstr "" msgid "Executive" msgstr "" msgid "Expectation Failed" msgstr "Échec de la condition de valeur attendue" msgid "Export Printers to Samba" msgstr "Exporter les imprimantes vers SAMBA" msgid "Expressions:" msgstr "Expressions :" msgid "Extra Heavyweight Paper" msgstr "" msgid "FAIL" msgstr "ÉCHEC" msgid "Fabric" msgstr "" msgid "Face Down" msgstr "" msgid "Face Up" msgstr "" msgid "Fast Grayscale" msgstr "Niveaux de gris rapide" #, c-format msgid "File \"%s\" contains a relative path." msgstr "" #, c-format msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "" #, c-format msgid "File \"%s\" is a directory." msgstr "" #, c-format msgid "File \"%s\" not available: %s" msgstr "" #, c-format msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "" msgid "File Folder" msgstr "" #, c-format msgid "" "File device URIs have been disabled. To enable, see the FileDevice directive " "in \"%s/cups-files.conf\"." msgstr "" msgid "Film" msgstr "" msgid "Fine Envelope" msgstr "" #, c-format msgid "Finished page %d." msgstr "" msgid "Flexo Base" msgstr "" msgid "Flexo Photo Polymer" msgstr "" msgid "Flute" msgstr "" msgid "Foil" msgstr "" msgid "Fold" msgstr "" msgid "Folio" msgstr "Folio" msgid "Forbidden" msgstr "Interdit" msgid "Found" msgstr "" msgid "Full Cut Tabs" msgstr "" msgid "Gate Fold" msgstr "" msgid "General" msgstr "Général" msgid "Generic" msgstr "Générique" msgid "Get-Response-PDU uses indefinite length" msgstr "Get-Response-PDU s’avère être de longueur indéfinie" msgid "Glass" msgstr "" msgid "Glass Colored" msgstr "" msgid "Glass Opaque" msgstr "" msgid "Glass Surfaced" msgstr "" msgid "Glass Textured" msgstr "" msgid "Glossy Brochure Paper" msgstr "" msgid "Glossy Fabric" msgstr "" msgid "Glossy Labels" msgstr "" msgid "Glossy Optical Disc" msgstr "" msgid "Glossy Paper" msgstr "Papier brillant" msgid "Glossy Photo Paper" msgstr "" msgid "Got a printer-uri attribute but no job-id." msgstr "" msgid "Gravure Cylinder" msgstr "" msgid "Grayscale" msgstr "Niveaux de gris" msgid "HP" msgstr "HP" msgid "Hagaki" msgstr "" msgid "Half Fold" msgstr "" msgid "Half Z Fold" msgstr "" msgid "Hanging Folder" msgstr "Dossier suspendu" msgid "Hash buffer too small." msgstr "" msgid "Heavyweight Coated Paper" msgstr "" msgid "Heavyweight Envelope" msgstr "" msgid "Heavyweight Paper" msgstr "" msgid "Help file not in index." msgstr "" msgid "High" msgstr "" msgid "High Gloss Fabric" msgstr "" msgid "High Gloss Labels" msgstr "" msgid "High Gloss Optical Disc" msgstr "" msgid "High Gloss Photo Paper" msgstr "" msgid "IPP 1setOf attribute with incompatible value tags." msgstr "" msgid "IPP attribute has no name." msgstr "" msgid "IPP attribute is not a member of the message." msgstr "" msgid "IPP begCollection value not 0 bytes." msgstr "" msgid "IPP boolean value not 1 byte." msgstr "" msgid "IPP date value not 11 bytes." msgstr "" msgid "IPP endCollection value not 0 bytes." msgstr "" msgid "IPP enum value not 4 bytes." msgstr "" msgid "IPP extension tag larger than 0x7FFFFFFF." msgstr "" msgid "IPP integer value not 4 bytes." msgstr "" msgid "IPP language length overflows value." msgstr "" msgid "IPP language length too large." msgstr "" msgid "IPP member name is not empty." msgstr "" msgid "IPP memberName value is empty." msgstr "" msgid "IPP memberName with no attribute." msgstr "" msgid "IPP name larger than 32767 bytes." msgstr "" msgid "IPP nameWithLanguage value less than minimum 4 bytes." msgstr "" msgid "IPP octetString length too large." msgstr "" msgid "IPP rangeOfInteger value not 8 bytes." msgstr "" msgid "IPP resolution value not 9 bytes." msgstr "" msgid "IPP string length overflows value." msgstr "" msgid "IPP textWithLanguage value less than minimum 4 bytes." msgstr "" msgid "IPP value larger than 32767 bytes." msgstr "" msgid "ISOLatin1" msgstr "utf-8" msgid "Illegal control character" msgstr "Caractère de contrôle interdit" msgid "Illegal main keyword string" msgstr "Mot-clé essentiel interdit" msgid "Illegal option keyword string" msgstr "Mot-clé d’option interdit" msgid "Illegal translation string" msgstr "Traduction interdite" msgid "Illegal whitespace character" msgstr "Caractère « espace blanc » interdit" msgid "Image Setter Paper" msgstr "" msgid "Imaging Cylinder" msgstr "" msgid "Inkjet Envelope" msgstr "" msgid "Inkjet Labels" msgstr "" msgid "Inkjet Paper" msgstr "" msgid "Installable Options" msgstr "Options installables" msgid "Installed" msgstr "Installée" msgid "IntelliBar Label Printer" msgstr "Imprimante pour étiquettes IntelliBar" msgid "Intellitech" msgstr "Intellitech" msgid "Internal Server Error" msgstr "Erreur interne du serveur" msgid "Internal error" msgstr "Erreur interne" msgid "Internet Postage 2-Part" msgstr "Affranchissement Internet en 2 parties" msgid "Internet Postage 3-Part" msgstr "Affranchissement Internet en 3 parties" msgid "Internet Printing Protocol" msgstr "Internet Printing Protocol" msgid "Invalid media name arguments." msgstr "" msgid "Invalid media size." msgstr "" msgid "Invalid ppd-name value." msgstr "" #, c-format msgid "Invalid printer command \"%s\"." msgstr "" msgid "JCL" msgstr "JCL ( Langage de contrôle de tâche )" msgid "JIS B0" msgstr "" msgid "JIS B1" msgstr "" msgid "JIS B10" msgstr "" msgid "JIS B2" msgstr "" msgid "JIS B3" msgstr "" msgid "JIS B4" msgstr "" msgid "JIS B4 Long Edge" msgstr "" msgid "JIS B5" msgstr "" msgid "JIS B5 Long Edge" msgstr "" msgid "JIS B6" msgstr "" msgid "JIS B6 Long Edge" msgstr "" msgid "JIS B7" msgstr "" msgid "JIS B8" msgstr "" msgid "JIS B9" msgstr "" #, c-format msgid "Job #%d cannot be restarted - no files." msgstr "" #, c-format msgid "Job #%d does not exist." msgstr "La tâche n°%d n'existe pas." #, c-format msgid "Job #%d is already aborted - can't cancel." msgstr "La tâche n°%d est déjà abandonnée - impossible de l’annuler." #, c-format msgid "Job #%d is already canceled - can't cancel." msgstr "La tâche n°%d est déjà annulée - impossible de l’annuler." #, c-format msgid "Job #%d is already completed - can't cancel." msgstr "La tâche n°%d est déjà terminée - impossible de l’annuler." #, c-format msgid "Job #%d is finished and cannot be altered." msgstr "La tâche n°%d est terminée et ne peut être modifiée." #, c-format msgid "Job #%d is not complete." msgstr "La tâche n°%d n'est pas terminée." #, c-format msgid "Job #%d is not held for authentication." msgstr "" #, c-format msgid "Job #%d is not held." msgstr "" msgid "Job Completed" msgstr "terminée" msgid "Job Created" msgstr "Tâche créée" msgid "Job Options Changed" msgstr "Options de la tâche modifiées" msgid "Job Stopped" msgstr "arrêtée" msgid "Job is completed and cannot be changed." msgstr "La tâche est terminée et ne peut être modifiée." msgid "Job operation failed" msgstr "L’opération sur la tâche a échoué :" msgid "Job state cannot be changed." msgstr "L’état de la tâche ne peut pas être modifié." msgid "Job subscriptions cannot be renewed." msgstr "" msgid "Jobs" msgstr "Tâches" msgid "Jog" msgstr "" msgid "LPD/LPR Host or Printer" msgstr "Hôte ou imprimante LPD/LPR" msgid "Label Printer" msgstr "Imprimante pour étiquettes" msgid "Label Top" msgstr "Étiquette supérieure" msgid "Labels" msgstr "Étiquette" msgid "Laminate" msgstr "" msgid "Laminating Foil" msgstr "" #, c-format msgid "Language \"%s\" not supported." msgstr "" msgid "Large Address" msgstr "Adresse étendue" msgid "Large Capacity" msgstr "" msgid "Large Capacity Tray" msgstr "" msgid "LaserJet Series PCL 4/5" msgstr "LaserJet série PCL 4/5" msgid "Left" msgstr "Gauche" msgid "Left Gate Fold" msgstr "" msgid "Left Tray" msgstr "Bac gauche" msgid "Letter Fold" msgstr "" msgid "Letter Oversize" msgstr "" msgid "Letter Oversize Long Edge" msgstr "" msgid "Letterhead" msgstr "" msgid "Light" msgstr "Clair" msgid "Lightweight Envelope" msgstr "" msgid "Lightweight Paper" msgstr "" msgid "Line longer than the maximum allowed (255 characters)" msgstr "Ligne dépassant la longueur maximale autorisée (255 caractères)" msgid "List Available Printers" msgstr "" msgid "Load paper." msgstr "" msgid "Local printer created." msgstr "" msgid "Long-Edge (Portrait)" msgstr "Bord le plus long (Portrait)" msgid "Looking for printer." msgstr "Recherche d'imprimante en cours." msgid "Mailbox 1" msgstr "" msgid "Mailbox 10" msgstr "" msgid "Mailbox 2" msgstr "" msgid "Mailbox 3" msgstr "" msgid "Mailbox 4" msgstr "" msgid "Mailbox 5" msgstr "" msgid "Mailbox 6" msgstr "" msgid "Mailbox 7" msgstr "" msgid "Mailbox 8" msgstr "" msgid "Mailbox 9" msgstr "" msgid "Main" msgstr "" msgid "Main Roll" msgstr "" msgid "Manual" msgstr "" msgid "Manual Feed" msgstr "" msgid "Matte Brochure Paper" msgstr "" msgid "Matte Cover Paper" msgstr "" msgid "Matte Fabric" msgstr "" msgid "Matte Labels" msgstr "" msgid "Matte Optical Disc" msgstr "" msgid "Matte Photo Paper" msgstr "" msgid "Media Size" msgstr "Taille du papier" msgid "Media Source" msgstr "Source du papier" msgid "Media Tracking" msgstr "Crénage du papier" msgid "Media Type" msgstr "Type de papier" msgid "Medium" msgstr "Moyen" msgid "Memory allocation error" msgstr "Erreur d’allocation de mémoire" msgid "Metal" msgstr "" msgid "Metal Glossy" msgstr "" msgid "Metal High Gloss" msgstr "" msgid "Metal Matte" msgstr "" msgid "Metal Satin" msgstr "" msgid "Metal Semi Gloss" msgstr "" msgid "Mid-Weight Paper" msgstr "" msgid "Middle" msgstr "" msgid "Missing CloseGroup" msgstr "" msgid "Missing PPD-Adobe-4.x header" msgstr "Entête PPD-Adobe-4.x manquant" msgid "Missing asterisk in column 1" msgstr "Astérisque manquant à la colonne 1" msgid "Missing document-number attribute." msgstr "" #, c-format msgid "Missing double quote on line %d." msgstr "" msgid "Missing form variable" msgstr "" msgid "Missing last-document attribute in request." msgstr "" msgid "Missing media or media-col." msgstr "" msgid "Missing media-size in media-col." msgstr "" msgid "Missing notify-subscription-ids attribute." msgstr "" msgid "Missing option keyword" msgstr "" msgid "Missing requesting-user-name attribute." msgstr "" #, c-format msgid "Missing required attribute \"%s\"." msgstr "" msgid "Missing required attributes." msgstr "" msgid "Missing resource in URI" msgstr "" msgid "Missing scheme in URI" msgstr "" #, c-format msgid "Missing value on line %d." msgstr "" msgid "Missing value string" msgstr "Chaîne de valeur manquante" msgid "Missing x-dimension in media-size." msgstr "" msgid "Missing y-dimension in media-size." msgstr "" #, c-format msgid "" "Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgstr "" msgid "Modifiers:" msgstr "" msgid "Modify Class" msgstr "Modifier la classe" msgid "Modify Printer" msgstr "Modifier l’imprimante" msgid "Mounting Tape" msgstr "" msgid "Move All Jobs" msgstr "Transférer toutes les tâches" msgid "Move Job" msgstr "Transférer la tâche" msgid "Moved Permanently" msgstr "Transférées de façon permanente" msgid "Multi Layer" msgstr "" msgid "Multi Part Form" msgstr "" msgid "Multi-Hole Punch (Landscape)" msgstr "" msgid "Multi-Hole Punch (Portrait)" msgstr "" msgid "Multi-Hole Punch (Reverse Landscape)" msgstr "" msgid "Multi-Hole Punch (Reverse Portrait)" msgstr "" msgid "Multipurpose" msgstr "" msgid "Multipurpose Paper" msgstr "" msgid "My Mailbox" msgstr "" msgid "NULL PPD file pointer" msgstr "Pointeur de fichier PPD NULL." msgid "Name OID uses indefinite length" msgstr "L’OID du nom s’avère être de longueur indéfinie" msgid "Nested classes are not allowed." msgstr "" msgid "Never" msgstr "Jamais" msgid "New credentials are not valid for name." msgstr "" msgid "New credentials are older than stored credentials." msgstr "" msgid "No" msgstr "Non" msgid "No Content" msgstr "Aucun contenu" msgid "No IPP attributes." msgstr "" msgid "No PPD name" msgstr "" msgid "No VarBind SEQUENCE" msgstr "Aucune SEQUENCE VarBind" msgid "No Windows printer drivers are installed." msgstr "" msgid "No active connection" msgstr "Aucune connexion active" msgid "No active connection." msgstr "Aucune connexion active." #, c-format msgid "No active jobs on %s." msgstr "Aucune tâche active sur %s." msgid "No attributes in request." msgstr "" msgid "No authentication information provided." msgstr "" msgid "No common name specified." msgstr "" msgid "No community name" msgstr "Aucun nom de communauté" msgid "No default printer." msgstr "Aucune imprimante par défaut." msgid "No destinations added." msgstr "Aucune destination ajoutée." msgid "No device URI found in argv[0] or in DEVICE_URI environment variable." msgstr "" msgid "No error-index" msgstr "Paramètre error-index absent" msgid "No error-status" msgstr "" msgid "No file in print request." msgstr "" msgid "No modification time" msgstr "" msgid "No name OID" msgstr "Aucun OID de nom" msgid "No pages were found." msgstr "" msgid "No printer name" msgstr "" msgid "No printer-uri found" msgstr "" msgid "No printer-uri found for class" msgstr "" msgid "No printer-uri in request." msgstr "" msgid "No request URI." msgstr "" msgid "No request protocol version." msgstr "" msgid "No request sent." msgstr "" msgid "No request-id" msgstr "Paramètre request-id absent" msgid "No stored credentials, not valid for name." msgstr "" msgid "No subscription attributes in request." msgstr "" msgid "No subscriptions found." msgstr "Aucun abonnement trouvé." msgid "No variable-bindings SEQUENCE" msgstr "Aucune SEQUENCE variable-bindings" msgid "No version number" msgstr "Aucun numéro de version" msgid "Non-continuous (Mark sensing)" msgstr "Non continu (détection de marque)" msgid "Non-continuous (Web sensing)" msgstr "Non continu (détection Web)" msgid "None" msgstr "Aucun" msgid "Normal" msgstr "Normal" msgid "Not Found" msgstr "Introuvable" msgid "Not Implemented" msgstr "Non implémentée" msgid "Not Installed" msgstr "Non installée" msgid "Not Modified" msgstr "Non modifiée" msgid "Not Supported" msgstr "Non prise en charge" msgid "Not allowed to print." msgstr "Impression interdite" msgid "Note" msgstr "Remarque" msgid "" "Note: this program only validates the DSC comments, not the PostScript " "itself." msgstr "" msgid "OK" msgstr "OK" msgid "Off (1-Sided)" msgstr "Désactivé (recto)" msgid "Office Recycled Paper" msgstr "" msgid "Oki" msgstr "Oki" msgid "Online Help" msgstr "Aide en ligne" msgid "Only local users can create a local printer." msgstr "Seuls les utilisateurs locaux peuvent créer des imprimantes locales." #, c-format msgid "Open of %s failed: %s" msgstr "L’ouverture de %s a échoué : %s" msgid "OpenGroup without a CloseGroup first" msgstr "OpenGroup sans CloseGroup préalable" msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" msgstr "OpenUI/JCLOpenUI sans CloseUI/JCLCloseUI préalable" msgid "Operation Policy" msgstr "Règles de fonctionnement" msgid "Optical Disc" msgstr "" #, c-format msgid "Option \"%s\" cannot be included via %%%%IncludeFeature." msgstr "" msgid "Options Installed" msgstr "Options installées" msgid "Options:" msgstr "Options" msgid "Other" msgstr "" msgid "Out of date PPD cache file." msgstr "" msgid "Out of memory." msgstr "" msgid "Output Mode" msgstr "Mode de sortie" msgid "Output bin is almost full." msgstr "" msgid "Output bin is full." msgstr "" msgid "Output bin is missing." msgstr "" msgid "PASS" msgstr "" msgid "PCL Laser Printer" msgstr "Imprimante laser PCL" msgid "PRC16K" msgstr "PRC16K" msgid "PRC16K Long Edge" msgstr "" msgid "PRC32K" msgstr "PRC32K" msgid "PRC32K Long Edge" msgstr "" msgid "PRC32K Oversize" msgstr "" msgid "PRC32K Oversize Long Edge" msgstr "" msgid "Packet does not contain a Get-Response-PDU" msgstr "Le paquet ne contient aucun paramètre Get-Response-PDU" msgid "Packet does not start with SEQUENCE" msgstr "Le paquet ne commence pas par SEQUENCE" msgid "Paper" msgstr "Papier" msgid "Paper jam." msgstr "Bourrage papier." msgid "Paper tray is almost empty." msgstr "Le bac à papier est quasiment vide." msgid "Paper tray is empty." msgstr "Le bac à papier est vide." msgid "Paper tray is missing." msgstr "Le bac à papier est manquant." msgid "Parallel Fold" msgstr "" msgid "ParamCustominCutInterval" msgstr "ParamCustominCutInterval" msgid "ParamCustominTearInterval" msgstr "ParamCustominTearInterval" #, c-format msgid "Password for %s on %s? " msgstr "Mot de passe pour %s sur %s ? " #, c-format msgid "Password for %s required to access %s via SAMBA: " msgstr "Un mot de passe pour %s est nécessaire pour accéder à %s via SAMBA : " msgid "Pause Class" msgstr "Suspendre la classe" msgid "Pause Printer" msgstr "Suspendre l’imprimante" msgid "Peel-Off" msgstr "Décoller" msgid "Permanent Labels" msgstr "" msgid "Photo" msgstr "Photo" msgid "Photo Film" msgstr "" msgid "Photo Labels" msgstr "Étiquettes photo" msgid "Photo Paper" msgstr "" msgid "Photo Paper Plus Glossy II" msgstr "" msgid "Photo Paper Pro Platinum" msgstr "" msgid "Plain Envelope" msgstr "" msgid "Plain Paper" msgstr "" msgid "Plastic" msgstr "" msgid "Plastic Archival" msgstr "" msgid "Plastic Colored" msgstr "" msgid "Plastic Glossy" msgstr "" msgid "Plastic High Gloss" msgstr "" msgid "Plastic Matte" msgstr "" msgid "Plastic Satin" msgstr "" msgid "Plastic Semi Gloss" msgstr "" msgid "Plate" msgstr "" msgid "Policies" msgstr "Règles" msgid "Polyester" msgstr "" msgid "Port Monitor" msgstr "Moniteur de port" msgid "PostScript Printer" msgstr "Imprimante PostScript" msgid "Postcard" msgstr "Carte postale" msgid "Postcard Double" msgstr "" msgid "Postcard Double Long Edge" msgstr "" msgid "Postcard Long Edge" msgstr "" msgid "Poster Fold" msgstr "" msgid "Pre Cut Tabs" msgstr "" msgid "Premium Inkjet Paper" msgstr "" msgid "Premium Photo Glossy Paper" msgstr "" msgid "Premium Presentation Matte Paper" msgstr "" msgid "Preparing to print." msgstr "" msgid "Preprinted Envelope" msgstr "" msgid "Preprinted Paper" msgstr "" msgid "Print Density" msgstr "Densité d’impression" msgid "Print Job:" msgstr "Tâche d’impression :" msgid "Print Mode" msgstr "Mode d’impression" msgid "Print Quality" msgstr "Qualité d'impression" msgid "Print Rate" msgstr "Taux d’impression" msgid "Print Self-Test Page" msgstr "Imprimer une page d’autotest" msgid "Print Speed" msgstr "Vitesse d’impression" msgid "Print Test Page" msgstr "Imprimer la page de test" msgid "Print and Cut" msgstr "Impression à découper" msgid "Print and Tear" msgstr "Impression à détacher" msgid "Print file sent." msgstr "" msgid "Print job canceled at printer." msgstr "" msgid "Print job too large." msgstr "" msgid "Print job was not accepted." msgstr "" #, c-format msgid "Printer \"%s\" already exists." msgstr "" msgid "Printer Added" msgstr "ajoutée" msgid "Printer Default" msgstr "par défaut" msgid "Printer Deleted" msgstr "supprimée" msgid "Printer Modified" msgstr "modifiée" msgid "Printer Paused" msgstr "en pause" msgid "Printer Settings" msgstr "Réglages de l’imprimante" msgid "Printer cannot print supplied content." msgstr "" msgid "Printer cannot print with supplied options." msgstr "" msgid "Printer does not support required IPP attributes or document formats." msgstr "" msgid "Printer:" msgstr "Imprimante :" msgid "Printers" msgstr "" #, c-format msgid "Printing page %d, %u%% complete." msgstr "" msgid "Punch" msgstr "" msgid "Punched Paper" msgstr "" msgid "Quarto" msgstr "Quarto" msgid "Quota limit reached." msgstr "" msgid "Rank Owner Job File(s) Total Size" msgstr "" msgid "Rear" msgstr "" msgid "Rear Tray" msgstr "" msgid "Reject Jobs" msgstr "Refuser les tâches" #, c-format msgid "Remote host did not accept control file (%d)." msgstr "" #, c-format msgid "Remote host did not accept data file (%d)." msgstr "" msgid "Reprint After Error" msgstr "Réimprimer après erreur" msgid "Request Entity Too Large" msgstr "Entité de requête trop volumineuse" msgid "Resolution" msgstr "Résolution" msgid "Resume Class" msgstr "Relancer la classe" msgid "Resume Printer" msgstr "Relancer l’imprimante" msgid "Return Address" msgstr "Renvoyer l’adresse" msgid "Rewind" msgstr "Rembobiner" msgid "Right" msgstr "Droite" msgid "Right Gate Fold" msgstr "" msgid "Right Tray" msgstr "" msgid "Roll" msgstr "" msgid "Roll 1" msgstr "" msgid "Roll 10" msgstr "" msgid "Roll 2" msgstr "" msgid "Roll 3" msgstr "" msgid "Roll 4" msgstr "" msgid "Roll 5" msgstr "" msgid "Roll 6" msgstr "" msgid "Roll 7" msgstr "" msgid "Roll 8" msgstr "" msgid "Roll 9" msgstr "" #, c-format msgid "Running command: %s %s -N -A %s -c '%s'" msgstr "" msgid "SEQUENCE uses indefinite length" msgstr "SEQUENCE s’avère être de longueur indéfinie" msgid "SSL/TLS Negotiation Error" msgstr "Erreur de négotiation SSL/TLS" msgid "Saddle Stitch" msgstr "" msgid "Satin Labels" msgstr "" msgid "Satin Optical Disc" msgstr "" msgid "Satin Photo Paper" msgstr "" msgid "Screen" msgstr "" msgid "Screen Paged" msgstr "" msgid "Security Labels" msgstr "" msgid "See Other" msgstr "Autres" msgid "See remote printer." msgstr "" msgid "Self Adhesive" msgstr "" msgid "Self Adhesive Film" msgstr "" msgid "Self-signed credentials are blocked." msgstr "" msgid "Semi-Gloss Fabric" msgstr "" msgid "Semi-Gloss Labels" msgstr "" msgid "Semi-Gloss Optical Disc" msgstr "" msgid "Semi-Gloss Photo Paper" msgstr "" msgid "Sending data to printer." msgstr "" msgid "Server Restarted" msgstr "Le serveur a redémarré" msgid "Server Security Auditing" msgstr "Vérification de la sécurité du serveur" msgid "Server Started" msgstr "Le serveur a démarré" msgid "Server Stopped" msgstr "Le serveur s’est arrêté" msgid "Server credentials not set." msgstr "" msgid "Service Unavailable" msgstr "Service indisponible" msgid "Set Allowed Users" msgstr "Définir les autorisations" msgid "Set As Server Default" msgstr "Définir comme valeur par défaut pour le serveur" msgid "Set Class Options" msgstr "Définir les options de classe" msgid "Set Printer Options" msgstr "Définir les options de l’imprimante" msgid "Set Publishing" msgstr "Définir la publication" msgid "Shipping Address" msgstr "Adresse de livraison" msgid "Short-Edge (Landscape)" msgstr "Bord le plus court (paysage)" msgid "Shrink Foil" msgstr "" msgid "Side" msgstr "" msgid "Side Tray" msgstr "" msgid "Single Face" msgstr "" msgid "Single Punch (Landscape)" msgstr "" msgid "Single Punch (Portrait)" msgstr "" msgid "Single Punch (Reverse Landscape)" msgstr "" msgid "Single Punch (Reverse Portrait)" msgstr "" msgid "Single Staple (Landscape)" msgstr "" msgid "Single Staple (Portrait)" msgstr "" msgid "Single Staple (Reverse Landscape)" msgstr "" msgid "Single Staple (Reverse Portrait)" msgstr "" msgid "Single Wall Cardboard" msgstr "" msgid "Sleeve" msgstr "" msgid "Special Paper" msgstr "Papier spécial" #, c-format msgid "Spooling job, %.0f%% complete." msgstr "" msgid "Stacker 1" msgstr "" msgid "Stacker 10" msgstr "" msgid "Stacker 2" msgstr "" msgid "Stacker 3" msgstr "" msgid "Stacker 4" msgstr "" msgid "Stacker 5" msgstr "" msgid "Stacker 6" msgstr "" msgid "Stacker 7" msgstr "" msgid "Stacker 8" msgstr "" msgid "Stacker 9" msgstr "" msgid "Standard" msgstr "Standard" msgid "Staple" msgstr "" msgid "Staple Edge" msgstr "" msgid "Staple Edge (Landscape)" msgstr "" msgid "Staple Edge (Portrait)" msgstr "" msgid "Staple Edge (Reverse Landscape)" msgstr "" msgid "Staple Edge (Reverse Portrait)" msgstr "" #. TRANSLATORS: Banner/cover sheet before the print job. msgid "Starting Banner" msgstr "Début de la bannière" #, c-format msgid "Starting page %d." msgstr "" msgid "Statement" msgstr "Déclaration" #, c-format msgid "Subscription #%d does not exist." msgstr "" msgid "Substitutions:" msgstr "" msgid "Super A" msgstr "" msgid "Super B" msgstr "Super B" msgid "Super B/A3" msgstr "Super B/A3" msgid "Switching Protocols" msgstr "Permuter les protocoles" msgid "Tab Stock" msgstr "" msgid "Tabloid" msgstr "Tabloïd" msgid "Tabloid Oversize" msgstr "" msgid "Tabloid Oversize Long Edge" msgstr "" msgid "Tear" msgstr "Détacher" msgid "Tear-Off" msgstr "Détacher" msgid "Tear-Off Adjust Position" msgstr "Position d’ajustement du détachement" #, c-format msgid "The \"%s\" attribute is required for print jobs." msgstr "" #, c-format msgid "The %s attribute cannot be provided with job-ids." msgstr "" #, c-format msgid "" "The '%s' Job Status attribute cannot be supplied in a job creation request." msgstr "" #, c-format msgid "" "The '%s' operation attribute cannot be supplied in a Create-Job request." msgstr "" #, c-format msgid "The PPD file \"%s\" could not be found." msgstr "Le fichier PPD « %s » n’a pu être trouvé." #, c-format msgid "The PPD file \"%s\" could not be opened: %s" msgstr "Le fichier PPD « %s » n’a pu être ouvert : %s" msgid "The PPD file could not be opened." msgstr "Le fichier PPD n’a pu être ouvert." msgid "" "The class name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "Le nom de classe doit comporter au plus 127 caractères, tous imprimables, " "sans espace, « / » et « # »." msgid "The developer unit needs to be replaced." msgstr "" msgid "The developer unit will need to be replaced soon." msgstr "" msgid "The fuser's temperature is high." msgstr "" msgid "The fuser's temperature is low." msgstr "" msgid "" "The notify-lease-duration attribute cannot be used with job subscriptions." msgstr "" "L’attribut « notify-lease-duration » ne peut pas être utilisé dans un " "abonnement de tâche." #, c-format msgid "The notify-user-data value is too large (%d > 63 octets)." msgstr "" msgid "The optical photoconductor needs to be replaced." msgstr "" msgid "The optical photoconductor will need to be replaced soon." msgstr "" msgid "The printer configuration is incorrect or the printer no longer exists." msgstr "" msgid "The printer did not respond." msgstr "" msgid "The printer is in use." msgstr "" msgid "The printer is low on ink." msgstr "" msgid "The printer is low on toner." msgstr "" msgid "The printer is not connected." msgstr "" msgid "The printer is not responding." msgstr "" msgid "The printer is now connected." msgstr "" msgid "The printer is now online." msgstr "" msgid "The printer is offline." msgstr "" msgid "The printer is unreachable at this time." msgstr "" msgid "The printer may be out of ink." msgstr "" msgid "The printer may be out of toner." msgstr "" msgid "The printer may not exist or is unavailable at this time." msgstr "" msgid "" "The printer name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "Le nom d’imprimante doit comporter au plus 127 caractères, tous imprimables, " "sans espace, « / » et « # »." msgid "The printer or class does not exist." msgstr "" msgid "The printer or class is not shared." msgstr "" msgid "The printer's cover is open." msgstr "" msgid "The printer's door is open." msgstr "" msgid "The printer's interlock is open." msgstr "" msgid "The printer's waste bin is almost full." msgstr "" msgid "The printer's waste bin is full." msgstr "" #, c-format msgid "The printer-uri \"%s\" contains invalid characters." msgstr "Le paramètre printer-uri « %s » contient des caractères non valides." msgid "The printer-uri attribute is required." msgstr "" msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." msgstr "" "L’attribut « printer-uri » doit se présenter sous la forme « ipp://HOSTNAME/" "classes/CLASSNAME »." msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgstr "" "L’attribut « printer-uri » doit se présenter sous la forme « ipp://HOSTNAME/" "printers/PRINTERNAME »." msgid "" "The subscription name may not contain spaces, slashes (/), question marks " "(?), or the pound sign (#)." msgstr "" "Le nom de l’abonnement ne doit pas contenir d’espace ni aucun des symboles " "« / », « ? » et « # »." msgid "" "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to " "enable it." msgstr "" #, c-format msgid "The which-jobs value \"%s\" is not supported." msgstr "" msgid "There are too many subscriptions." msgstr "Les abonnements sont trop nombreux." msgid "There was an unrecoverable USB error." msgstr "" msgid "Thermal Transfer Media" msgstr "Papier pour transfert thermique" msgid "Too many active jobs." msgstr "Trop de tâches en cours." #, c-format msgid "Too many job-sheets values (%d > 2)." msgstr "" #, c-format msgid "Too many printer-state-reasons values (%d > %d)." msgstr "" msgid "Top" msgstr "" msgid "Top Tray" msgstr "" msgid "Tractor" msgstr "" msgid "Transfer" msgstr "" msgid "Transparency" msgstr "Transparence" msgid "Tray" msgstr "Bac" msgid "Tray 1" msgstr "Bac 1" msgid "Tray 10" msgstr "Bac 10" msgid "Tray 11" msgstr "Bac 11" msgid "Tray 12" msgstr "Bac 12" msgid "Tray 13" msgstr "Bac 13" msgid "Tray 14" msgstr "Bac 14" msgid "Tray 15" msgstr "Bac 15" msgid "Tray 16" msgstr "Bac 16" msgid "Tray 17" msgstr "Bac 17" msgid "Tray 18" msgstr "Bac 18" msgid "Tray 19" msgstr "Bac 19" msgid "Tray 2" msgstr "Bac 2" msgid "Tray 20" msgstr "Bac 20" msgid "Tray 3" msgstr "Bac 3" msgid "Tray 4" msgstr "Bac 4" msgid "Tray 5" msgstr "Bac 5" msgid "Tray 6" msgstr "Bac 6" msgid "Tray 7" msgstr "Bac 7" msgid "Tray 8" msgstr "Bac 8" msgid "Tray 9" msgstr "Bac 9" msgid "Triple Staple (Landscape)" msgstr "" msgid "Triple Staple (Portrait)" msgstr "" msgid "Triple Staple (Reverse Landscape)" msgstr "" msgid "Triple Staple (Reverse Portrait)" msgstr "" msgid "Triple Wall Cardboard" msgstr "" msgid "Trust on first use is disabled." msgstr "" msgid "URI Too Long" msgstr "URI trop long" msgid "URI too large" msgstr "" msgid "US Fanfold" msgstr "" msgid "US Ledger" msgstr "US Ledger" msgid "US Legal" msgstr "US Légal" msgid "US Legal Oversize" msgstr "" msgid "US Letter" msgstr "US Lettre" msgid "US Letter Long Edge" msgstr "US Lettre Bord long" msgid "US Letter Oversize" msgstr "" msgid "US Letter Oversize Long Edge" msgstr "" msgid "US Letter Small" msgstr "" msgid "Unable to access cupsd.conf file" msgstr "Impossible d’accéder au fichier cupsd.conf :" msgid "Unable to access help file." msgstr "Impossible d’accéder au fichier d’aide :" msgid "Unable to add RSS subscription" msgstr "Impossible d’ajouter d’abonnement RSS :" msgid "Unable to add class" msgstr "Impossible d’ajouter la classe :" msgid "Unable to add document to print job." msgstr "Impossible d’ajouter le document pour imprimer la tâche :" #, c-format msgid "Unable to add job for destination \"%s\"." msgstr "Impossible d’ajouter la tâche à la destination \"%s\"." msgid "Unable to add printer" msgstr "Impossible d’ajouter l’imprimante :" msgid "Unable to allocate memory for file types." msgstr "" msgid "Unable to allocate memory for page info" msgstr "" msgid "Unable to allocate memory for pages array" msgstr "" msgid "Unable to cancel RSS subscription" msgstr "Impossible d’annuler l’abonnement RSS :" msgid "Unable to cancel print job." msgstr "Impossible d’annuler la tâche d'impression." msgid "Unable to change printer" msgstr "Impossible de changer d'imprimante" msgid "Unable to change printer-is-shared attribute" msgstr "Impossible de modifier l’attribut « printer-is-shared » :" msgid "Unable to change server settings" msgstr "Impossible de modifier les réglages du serveur :" #, c-format msgid "Unable to compile mimeMediaType regular expression: %s." msgstr "" #, c-format msgid "Unable to compile naturalLanguage regular expression: %s." msgstr "" msgid "Unable to configure printer options." msgstr "Impossible de configurer les options de l'imprimante." msgid "Unable to connect to host." msgstr "Connexion à l’hôte impossible." msgid "Unable to contact printer, queuing on next printer in class." msgstr "" #, c-format msgid "Unable to copy 64-bit CUPS printer driver files (%d)." msgstr "" #, c-format msgid "Unable to copy 64-bit Windows printer driver files (%d)." msgstr "" #, c-format msgid "Unable to copy CUPS printer driver files (%d)." msgstr "" #, c-format msgid "Unable to copy PPD file - %s" msgstr "" msgid "Unable to copy PPD file." msgstr "" #, c-format msgid "Unable to copy Windows 2000 printer driver files (%d)." msgstr "" #, c-format msgid "Unable to copy Windows 9x printer driver files (%d)." msgstr "" msgid "Unable to create credentials from array." msgstr "" msgid "Unable to create printer-uri" msgstr "" msgid "Unable to create printer." msgstr "" msgid "Unable to create server credentials." msgstr "" msgid "Unable to create temporary file" msgstr "Impossible de créer le fichier temporaire :" msgid "Unable to delete class" msgstr "Impossible de supprimer la classe :" msgid "Unable to delete printer" msgstr "Impossible de supprimer l’imprimante :" msgid "Unable to do maintenance command" msgstr "Impossible de lancer la commande de maintenance :" msgid "Unable to edit cupsd.conf files larger than 1MB" msgstr "" msgid "" "Unable to establish a secure connection to host (certificate chain invalid)." msgstr "" msgid "" "Unable to establish a secure connection to host (certificate not yet valid)." msgstr "" msgid "Unable to establish a secure connection to host (expired certificate)." msgstr "" msgid "Unable to establish a secure connection to host (host name mismatch)." msgstr "" msgid "" "Unable to establish a secure connection to host (peer dropped connection " "before responding)." msgstr "" msgid "" "Unable to establish a secure connection to host (self-signed certificate)." msgstr "" msgid "" "Unable to establish a secure connection to host (untrusted certificate)." msgstr "" msgid "Unable to establish a secure connection to host." msgstr "" msgid "Unable to find destination for job" msgstr "" msgid "Unable to find printer." msgstr "" msgid "Unable to find server credentials." msgstr "" msgid "Unable to get backend exit status." msgstr "" msgid "Unable to get class list" msgstr "Impossible d’obtenir la liste des classes :" msgid "Unable to get class status" msgstr "Impossible d’obtenir l’état de la classe :" msgid "Unable to get list of printer drivers" msgstr "Impossible d’obtenir la liste des pilotes d’impression :" msgid "Unable to get printer attributes" msgstr "Impossible de récupérer les attributs de l’imprimante :" msgid "Unable to get printer list" msgstr "Impossible d’obtenir la liste des imprimantes :" msgid "Unable to get printer status" msgstr "Impossible d’obtenir l’état de l’imprimante" msgid "Unable to get printer status." msgstr "Impossible d’obtenir l’état de l’imprimante." #, c-format msgid "Unable to install Windows 2000 printer driver files (%d)." msgstr "" #, c-format msgid "Unable to install Windows 9x printer driver files (%d)." msgstr "" msgid "Unable to load help index." msgstr "" #, c-format msgid "Unable to locate printer \"%s\"." msgstr "" msgid "Unable to locate printer." msgstr "" msgid "Unable to modify class" msgstr "Impossible de modifier la classe :" msgid "Unable to modify printer" msgstr "Impossible de modifier l’imprimante :" msgid "Unable to move job" msgstr "Impossible de transférer la tâche." msgid "Unable to move jobs" msgstr "Impossible de transférer les tâches." msgid "Unable to open PPD file" msgstr "" msgid "Unable to open cupsd.conf file:" msgstr "Impossible d’ouvrir le fichier cupsd.conf :" msgid "Unable to open device file" msgstr "" #, c-format msgid "Unable to open document #%d in job #%d." msgstr "" msgid "Unable to open help file." msgstr "" msgid "Unable to open print file" msgstr "" msgid "Unable to open raster file" msgstr "" msgid "Unable to print test page" msgstr "Impossible d’imprimer la page de test :" msgid "Unable to read print data." msgstr "" msgid "Unable to rename job document file." msgstr "" msgid "Unable to resolve printer-uri." msgstr "" #, c-format msgid "Unable to run \"%s\": %s" msgstr "" msgid "Unable to see in file" msgstr "" msgid "Unable to send command to printer driver" msgstr "" msgid "Unable to send data to printer." msgstr "" #, c-format msgid "Unable to set Windows printer driver (%d)." msgstr "" msgid "Unable to set options" msgstr "Impossible de définir les options :" msgid "Unable to set server default" msgstr "Impossible de définir la valeur par défaut pour le serveur :" msgid "Unable to start backend process." msgstr "" msgid "Unable to upload cupsd.conf file" msgstr "Impossible de transmettre le fichier cupsd.conf :" msgid "Unable to use legacy USB class driver." msgstr "" msgid "Unable to write print data" msgstr "" #, c-format msgid "Unable to write uncompressed print data: %s" msgstr "" msgid "Unauthorized" msgstr "Non autorisé" msgid "Units" msgstr "Unités" msgid "Unknown" msgstr "Inconnu" #, c-format msgid "Unknown choice \"%s\" for option \"%s\"." msgstr "" #, c-format msgid "Unknown encryption option value: \"%s\"." msgstr "" #, c-format msgid "Unknown file order: \"%s\"." msgstr "" #, c-format msgid "Unknown format character: \"%c\"." msgstr "" msgid "Unknown hash algorithm." msgstr "" msgid "Unknown media size name." msgstr "" #, c-format msgid "Unknown option \"%s\" with value \"%s\"." msgstr "" #, c-format msgid "Unknown option \"%s\"." msgstr "" #, c-format msgid "Unknown print mode: \"%s\"." msgstr "" #, c-format msgid "Unknown printer-error-policy \"%s\"." msgstr "Paramètre printer-error-policy « %s » inconnu." #, c-format msgid "Unknown printer-op-policy \"%s\"." msgstr "Paramètre printer-op-policy « %s » inconnu." msgid "Unknown request method." msgstr "" msgid "Unknown request version." msgstr "" msgid "Unknown scheme in URI" msgstr "" msgid "Unknown service name." msgstr "" #, c-format msgid "Unknown version option value: \"%s\"." msgstr "" #, c-format msgid "Unsupported 'compression' value \"%s\"." msgstr "" #, c-format msgid "Unsupported 'document-format' value \"%s\"." msgstr "" msgid "Unsupported 'job-name' value." msgstr "" #, c-format msgid "Unsupported character set \"%s\"." msgstr "" #, c-format msgid "Unsupported compression \"%s\"." msgstr "" #, c-format msgid "Unsupported document-format \"%s\"." msgstr "" #, c-format msgid "Unsupported document-format \"%s/%s\"." msgstr "" #, c-format msgid "Unsupported format \"%s\"." msgstr "" msgid "Unsupported margins." msgstr "" msgid "Unsupported media value." msgstr "" #, c-format msgid "Unsupported number-up value %d, using number-up=1." msgstr "" #, c-format msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb." msgstr "" #, c-format msgid "Unsupported page-border value %s, using page-border=none." msgstr "" msgid "Unsupported raster data." msgstr "" msgid "Unsupported value type" msgstr "Type de valeur non pris en charge" msgid "Upgrade Required" msgstr "Mise à niveau obligatoire" msgid "" "Usage:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]" msgstr "" #, c-format msgid "Usage: %s job-id user title copies options [file]" msgstr "" msgid "Usage: cupsaddsmb [options] printer1 ... printerN" msgstr "" msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]" msgstr "" msgid "Usage: cupsd [options]" msgstr "" msgid "Usage: cupsfilter [ options ] [ -- ] filename" msgstr "" msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]" msgstr "" msgid "" "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" msgstr "" msgid "" "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " ippfind [options] name[.regtype[.domain.]] ... [expression]\n" " ippfind --help\n" " ippfind --version" msgstr "" msgid "Usage: ipptool [options] URI filename [ ... filenameN ]" msgstr "" msgid "Usage: lpmove job/src dest" msgstr "" msgid "" "Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " lpoptions [-h server] [-E] -x printer" msgstr "" msgid "" "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" msgstr "" msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" msgstr "" msgid "Usage: ppdhtml [options] filename.drv >filename.html" msgstr "" msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" msgid "" "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" msgstr "" msgid "Usage: snmp [host-or-ip-address]" msgstr "" msgid "Value uses indefinite length" msgstr "La valeur s’avère être de longueur indéfinie" msgid "VarBind uses indefinite length" msgstr "VarBind s’avère être de longueur indéfinie" msgid "Vellum Paper" msgstr "" msgid "Version uses indefinite length" msgstr "La version s’avère être de longueur indéfinie" msgid "Waiting for job to complete." msgstr "" msgid "Waiting for printer to become available." msgstr "" msgid "Waiting for printer to finish." msgstr "" msgid "Warning, no Windows 2000 printer drivers are installed." msgstr "" msgid "Waterproof Fabric" msgstr "" msgid "Web Interface is Disabled" msgstr "" msgid "Wet Film" msgstr "" msgid "Windowed Envelope" msgstr "" msgid "Yes" msgstr "Oui" #, c-format msgid "" "You must access this page using the URL https://" "%s:%d%s." msgstr "" "Vous devez accéder à cette page par l’URL https://%s:%d%s." msgid "Z Fold" msgstr "" msgid "ZPL Label Printer" msgstr "Imprimante pour étiquettes ZPL" msgid "Zebra" msgstr "Zebra" msgid "aborted" msgstr "abandonnée" msgid "accuracy-units" msgstr "Accuracy Units" msgid "accuracy-units.mm" msgstr "Mm" msgid "accuracy-units.nm" msgstr "Nm" msgid "accuracy-units.um" msgstr "Um" msgid "baling" msgstr "Bale Output" msgid "baling-type" msgstr "Baling Type" msgid "baling-type.band" msgstr "Band" msgid "baling-type.shrink-wrap" msgstr "Shrink Wrap" msgid "baling-type.wrap" msgstr "Wrap" msgid "baling-when" msgstr "Baling When" msgid "baling-when.after-job" msgstr "After Job" msgid "baling-when.after-sets" msgstr "After Sets" msgid "binding" msgstr "Bind Output" msgid "binding-reference-edge" msgstr "Binding Reference Edge" msgid "binding-reference-edge.bottom" msgstr "Bottom" msgid "binding-reference-edge.left" msgstr "Left" msgid "binding-reference-edge.right" msgstr "Right" msgid "binding-reference-edge.top" msgstr "Top" msgid "binding-type" msgstr "Binding Type" msgid "binding-type.adhesive" msgstr "Adhesive" msgid "binding-type.comb" msgstr "Comb" msgid "binding-type.flat" msgstr "Flat" msgid "binding-type.padding" msgstr "Padding" msgid "binding-type.perfect" msgstr "Perfect" msgid "binding-type.spiral" msgstr "Spiral" msgid "binding-type.tape" msgstr "Tape" msgid "binding-type.velo" msgstr "Velo" msgid "canceled" msgstr "annulée" msgid "charge-info-message" msgstr "Charge Info Message" msgid "coating" msgstr "Coat Sheets" msgid "coating-sides" msgstr "Coating Sides" msgid "coating-sides.back" msgstr "Back" msgid "coating-sides.both" msgstr "Both" msgid "coating-sides.front" msgstr "Front" msgid "coating-type" msgstr "Coating Type" msgid "coating-type.archival" msgstr "Archival" msgid "coating-type.archival-glossy" msgstr "Archival Glossy" msgid "coating-type.archival-matte" msgstr "Archival Matte" msgid "coating-type.archival-semi-gloss" msgstr "Archival Semi Gloss" msgid "coating-type.glossy" msgstr "Glossy" msgid "coating-type.high-gloss" msgstr "High Gloss" msgid "coating-type.matte" msgstr "Matte" msgid "coating-type.semi-gloss" msgstr "Semi-Gloss" msgid "coating-type.silicone" msgstr "Silicone" msgid "coating-type.translucent" msgstr "Translucent" msgid "completed" msgstr "terminée" msgid "confirmation-sheet-print" msgstr "Confirmation Sheet Print" msgid "copies" msgstr "Copies" msgid "cover-back" msgstr "Cover Back" msgid "cover-front" msgstr "Cover Front" msgid "cover-sheet-info" msgstr "Cover Sheet Info" msgid "cover-sheet-info-supported.date-time" msgstr "Date Time" msgid "cover-sheet-info-supported.from-name" msgstr "From Name" msgid "cover-sheet-info-supported.logo" msgstr "Logo" msgid "cover-sheet-info-supported.message" msgstr "Message" msgid "cover-sheet-info-supported.organization" msgstr "Organization" msgid "cover-sheet-info-supported.subject" msgstr "Subject" msgid "cover-sheet-info-supported.to-name" msgstr "To Name" msgid "cover-type" msgstr "Cover Type" msgid "cover-type.no-cover" msgstr "No Cover" msgid "cover-type.print-back" msgstr "Print Back" msgid "cover-type.print-both" msgstr "Print Both" msgid "cover-type.print-front" msgstr "Print Front" msgid "cover-type.print-none" msgstr "Print None" msgid "covering" msgstr "Cover Output" msgid "covering-name" msgstr "Covering Name" msgid "covering-name.plain" msgstr "Plain" msgid "covering-name.pre-cut" msgstr "Pre Cut" msgid "covering-name.pre-printed" msgstr "Pre Printed" msgid "cups-deviced failed to execute." msgstr "L’exécution de « cups-deviced » a échoué." msgid "cups-driverd failed to execute." msgstr "L’exécution de « cups-driverd » a échoué." #, c-format msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "" msgid "cupsctl: Cannot set Listen or Port directly." msgstr "" #, c-format msgid "cupsctl: Unable to connect to server: %s" msgstr "" #, c-format msgid "cupsctl: Unknown option \"%s\"" msgstr "" #, c-format msgid "cupsctl: Unknown option \"-%c\"" msgstr "" msgid "cupsd: Expected config filename after \"-c\" option." msgstr "" msgid "cupsd: Expected cups-files.conf filename after \"-s\" option." msgstr "" msgid "cupsd: On-demand support not compiled in, running in normal mode." msgstr "" msgid "cupsd: Relative cups-files.conf filename not allowed." msgstr "" msgid "cupsd: Unable to get current directory." msgstr "" msgid "cupsd: Unable to get path to cups-files.conf file." msgstr "" #, c-format msgid "cupsd: Unknown argument \"%s\" - aborting." msgstr "" #, c-format msgid "cupsd: Unknown option \"%c\" - aborting." msgstr "" #, c-format msgid "cupsfilter: Invalid document number %d." msgstr "" #, c-format msgid "cupsfilter: Invalid job ID %d." msgstr "" msgid "cupsfilter: Only one filename can be specified." msgstr "" #, c-format msgid "cupsfilter: Unable to get job file - %s" msgstr "" msgid "cupstestppd: The -q option is incompatible with the -v option." msgstr "" msgid "cupstestppd: The -v option is incompatible with the -q option." msgstr "" msgid "detailed-status-message" msgstr "Detailed Status Message" #, c-format msgid "device for %s/%s: %s" msgstr "matériel pour %s/%s : %s" #, c-format msgid "device for %s: %s" msgstr "matériel pour %s : %s" msgid "document-copies" msgstr "Copies" msgid "document-state" msgstr "Document State" msgid "document-state-reasons" msgstr "Detailed Document State" msgid "document-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "document-state-reasons.canceled-at-device" msgstr "Canceled At Device" msgid "document-state-reasons.canceled-by-operator" msgstr "Canceled By Operator" msgid "document-state-reasons.canceled-by-user" msgstr "Canceled By User" msgid "document-state-reasons.completed-successfully" msgstr "Completed Successfully" msgid "document-state-reasons.completed-with-errors" msgstr "Completed With Errors" msgid "document-state-reasons.completed-with-warnings" msgstr "Completed With Warnings" msgid "document-state-reasons.compression-error" msgstr "Compression Error" msgid "document-state-reasons.data-insufficient" msgstr "Data Insufficient" msgid "document-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "document-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "document-state-reasons.digital-signature-wait" msgstr "Digital Signature Wait" msgid "document-state-reasons.document-access-error" msgstr "Document Access Error" msgid "document-state-reasons.document-fetchable" msgstr "Document Fetchable" msgid "document-state-reasons.document-format-error" msgstr "Document Format Error" msgid "document-state-reasons.document-password-error" msgstr "Document Password Error" msgid "document-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "document-state-reasons.document-security-error" msgstr "Document Security Error" msgid "document-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "document-state-reasons.errors-detected" msgstr "Errors Detected" msgid "document-state-reasons.incoming" msgstr "Incoming" msgid "document-state-reasons.interpreting" msgstr "Interpreting" msgid "document-state-reasons.none" msgstr "None" msgid "document-state-reasons.outgoing" msgstr "Outgoing" msgid "document-state-reasons.printing" msgstr "Printing" msgid "document-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "document-state-reasons.queued" msgstr "Queued" msgid "document-state-reasons.queued-for-marker" msgstr "Queued For Marker" msgid "document-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "document-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "document-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "document-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "document-state-reasons.transforming" msgstr "Transforming" msgid "document-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "document-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "document-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "document-state.3" msgstr "Pending" msgid "document-state.5" msgstr "Processing" msgid "document-state.6" msgstr "Processing Stopped" msgid "document-state.7" msgstr "Canceled" msgid "document-state.8" msgstr "Aborted" msgid "document-state.9" msgstr "Completed" msgid "error-index uses indefinite length" msgstr "Le paramètre error-index s’avère être de longueur indéfinie" msgid "error-status uses indefinite length" msgstr "Le paramètre error-status s’avère être de longueur indéfinie" msgid "feed-orientation" msgstr "Feed Orientation" msgid "feed-orientation.long-edge-first" msgstr "Long Edge First" msgid "feed-orientation.short-edge-first" msgstr "Short Edge First" msgid "fetch-status-code" msgstr "Fetch Status Code" msgid "finishing-template" msgstr "Finishing Template" msgid "finishing-template.bale" msgstr "Bale" msgid "finishing-template.bind" msgstr "Bind" msgid "finishing-template.bind-bottom" msgstr "Bind Bottom" msgid "finishing-template.bind-left" msgstr "Bind Left" msgid "finishing-template.bind-right" msgstr "Bind Right" msgid "finishing-template.bind-top" msgstr "Bind Top" msgid "finishing-template.booklet-maker" msgstr "Booklet Maker" msgid "finishing-template.coat" msgstr "Coat" msgid "finishing-template.cover" msgstr "Cover" msgid "finishing-template.edge-stitch" msgstr "Edge Stitch" msgid "finishing-template.edge-stitch-bottom" msgstr "Edge Stitch Bottom" msgid "finishing-template.edge-stitch-left" msgstr "Edge Stitch Left" msgid "finishing-template.edge-stitch-right" msgstr "Edge Stitch Right" msgid "finishing-template.edge-stitch-top" msgstr "Edge Stitch Top" msgid "finishing-template.fold" msgstr "Fold" msgid "finishing-template.fold-accordion" msgstr "Fold Accordion" msgid "finishing-template.fold-double-gate" msgstr "Fold Double Gate" msgid "finishing-template.fold-engineering-z" msgstr "Fold Engineering Z" msgid "finishing-template.fold-gate" msgstr "Fold Gate" msgid "finishing-template.fold-half" msgstr "Fold Half" msgid "finishing-template.fold-half-z" msgstr "Fold Half Z" msgid "finishing-template.fold-left-gate" msgstr "Fold Left Gate" msgid "finishing-template.fold-letter" msgstr "Fold Letter" msgid "finishing-template.fold-parallel" msgstr "Fold Parallel" msgid "finishing-template.fold-poster" msgstr "Fold Poster" msgid "finishing-template.fold-right-gate" msgstr "Fold Right Gate" msgid "finishing-template.fold-z" msgstr "Fold Z" msgid "finishing-template.jdf-f10-1" msgstr "JDF F10 1" msgid "finishing-template.jdf-f10-2" msgstr "JDF F10 2" msgid "finishing-template.jdf-f10-3" msgstr "JDF F10 3" msgid "finishing-template.jdf-f12-1" msgstr "JDF F12 1" msgid "finishing-template.jdf-f12-10" msgstr "JDF F12 10" msgid "finishing-template.jdf-f12-11" msgstr "JDF F12 11" msgid "finishing-template.jdf-f12-12" msgstr "JDF F12 12" msgid "finishing-template.jdf-f12-13" msgstr "JDF F12 13" msgid "finishing-template.jdf-f12-14" msgstr "JDF F12 14" msgid "finishing-template.jdf-f12-2" msgstr "JDF F12 2" msgid "finishing-template.jdf-f12-3" msgstr "JDF F12 3" msgid "finishing-template.jdf-f12-4" msgstr "JDF F12 4" msgid "finishing-template.jdf-f12-5" msgstr "JDF F12 5" msgid "finishing-template.jdf-f12-6" msgstr "JDF F12 6" msgid "finishing-template.jdf-f12-7" msgstr "JDF F12 7" msgid "finishing-template.jdf-f12-8" msgstr "JDF F12 8" msgid "finishing-template.jdf-f12-9" msgstr "JDF F12 9" msgid "finishing-template.jdf-f14-1" msgstr "JDF F14 1" msgid "finishing-template.jdf-f16-1" msgstr "JDF F16 1" msgid "finishing-template.jdf-f16-10" msgstr "JDF F16 10" msgid "finishing-template.jdf-f16-11" msgstr "JDF F16 11" msgid "finishing-template.jdf-f16-12" msgstr "JDF F16 12" msgid "finishing-template.jdf-f16-13" msgstr "JDF F16 13" msgid "finishing-template.jdf-f16-14" msgstr "JDF F16 14" msgid "finishing-template.jdf-f16-2" msgstr "JDF F16 2" msgid "finishing-template.jdf-f16-3" msgstr "JDF F16 3" msgid "finishing-template.jdf-f16-4" msgstr "JDF F16 4" msgid "finishing-template.jdf-f16-5" msgstr "JDF F16 5" msgid "finishing-template.jdf-f16-6" msgstr "JDF F16 6" msgid "finishing-template.jdf-f16-7" msgstr "JDF F16 7" msgid "finishing-template.jdf-f16-8" msgstr "JDF F16 8" msgid "finishing-template.jdf-f16-9" msgstr "JDF F16 9" msgid "finishing-template.jdf-f18-1" msgstr "JDF F18 1" msgid "finishing-template.jdf-f18-2" msgstr "JDF F18 2" msgid "finishing-template.jdf-f18-3" msgstr "JDF F18 3" msgid "finishing-template.jdf-f18-4" msgstr "JDF F18 4" msgid "finishing-template.jdf-f18-5" msgstr "JDF F18 5" msgid "finishing-template.jdf-f18-6" msgstr "JDF F18 6" msgid "finishing-template.jdf-f18-7" msgstr "JDF F18 7" msgid "finishing-template.jdf-f18-8" msgstr "JDF F18 8" msgid "finishing-template.jdf-f18-9" msgstr "JDF F18 9" msgid "finishing-template.jdf-f2-1" msgstr "JDF F2 1" msgid "finishing-template.jdf-f20-1" msgstr "JDF F20 1" msgid "finishing-template.jdf-f20-2" msgstr "JDF F20 2" msgid "finishing-template.jdf-f24-1" msgstr "JDF F24 1" msgid "finishing-template.jdf-f24-10" msgstr "JDF F24 10" msgid "finishing-template.jdf-f24-11" msgstr "JDF F24 11" msgid "finishing-template.jdf-f24-2" msgstr "JDF F24 2" msgid "finishing-template.jdf-f24-3" msgstr "JDF F24 3" msgid "finishing-template.jdf-f24-4" msgstr "JDF F24 4" msgid "finishing-template.jdf-f24-5" msgstr "JDF F24 5" msgid "finishing-template.jdf-f24-6" msgstr "JDF F24 6" msgid "finishing-template.jdf-f24-7" msgstr "JDF F24 7" msgid "finishing-template.jdf-f24-8" msgstr "JDF F24 8" msgid "finishing-template.jdf-f24-9" msgstr "JDF F24 9" msgid "finishing-template.jdf-f28-1" msgstr "JDF F28 1" msgid "finishing-template.jdf-f32-1" msgstr "JDF F32 1" msgid "finishing-template.jdf-f32-2" msgstr "JDF F32 2" msgid "finishing-template.jdf-f32-3" msgstr "JDF F32 3" msgid "finishing-template.jdf-f32-4" msgstr "JDF F32 4" msgid "finishing-template.jdf-f32-5" msgstr "JDF F32 5" msgid "finishing-template.jdf-f32-6" msgstr "JDF F32 6" msgid "finishing-template.jdf-f32-7" msgstr "JDF F32 7" msgid "finishing-template.jdf-f32-8" msgstr "JDF F32 8" msgid "finishing-template.jdf-f32-9" msgstr "JDF F32 9" msgid "finishing-template.jdf-f36-1" msgstr "JDF F36 1" msgid "finishing-template.jdf-f36-2" msgstr "JDF F36 2" msgid "finishing-template.jdf-f4-1" msgstr "JDF F4 1" msgid "finishing-template.jdf-f4-2" msgstr "JDF F4 2" msgid "finishing-template.jdf-f40-1" msgstr "JDF F40 1" msgid "finishing-template.jdf-f48-1" msgstr "JDF F48 1" msgid "finishing-template.jdf-f48-2" msgstr "JDF F48 2" msgid "finishing-template.jdf-f6-1" msgstr "JDF F6 1" msgid "finishing-template.jdf-f6-2" msgstr "JDF F6 2" msgid "finishing-template.jdf-f6-3" msgstr "JDF F6 3" msgid "finishing-template.jdf-f6-4" msgstr "JDF F6 4" msgid "finishing-template.jdf-f6-5" msgstr "JDF F6 5" msgid "finishing-template.jdf-f6-6" msgstr "JDF F6 6" msgid "finishing-template.jdf-f6-7" msgstr "JDF F6 7" msgid "finishing-template.jdf-f6-8" msgstr "JDF F6 8" msgid "finishing-template.jdf-f64-1" msgstr "JDF F64 1" msgid "finishing-template.jdf-f64-2" msgstr "JDF F64 2" msgid "finishing-template.jdf-f8-1" msgstr "JDF F8 1" msgid "finishing-template.jdf-f8-2" msgstr "JDF F8 2" msgid "finishing-template.jdf-f8-3" msgstr "JDF F8 3" msgid "finishing-template.jdf-f8-4" msgstr "JDF F8 4" msgid "finishing-template.jdf-f8-5" msgstr "JDF F8 5" msgid "finishing-template.jdf-f8-6" msgstr "JDF F8 6" msgid "finishing-template.jdf-f8-7" msgstr "JDF F8 7" msgid "finishing-template.jog-offset" msgstr "Jog Offset" msgid "finishing-template.laminate" msgstr "Laminate" msgid "finishing-template.punch" msgstr "Punch" msgid "finishing-template.punch-bottom-left" msgstr "Punch Bottom Left" msgid "finishing-template.punch-bottom-right" msgstr "Punch Bottom Right" msgid "finishing-template.punch-dual-bottom" msgstr "Punch Dual Bottom" msgid "finishing-template.punch-dual-left" msgstr "Punch Dual Left" msgid "finishing-template.punch-dual-right" msgstr "Punch Dual Right" msgid "finishing-template.punch-dual-top" msgstr "Punch Dual Top" msgid "finishing-template.punch-multiple-bottom" msgstr "Punch Multiple Bottom" msgid "finishing-template.punch-multiple-left" msgstr "Punch Multiple Left" msgid "finishing-template.punch-multiple-right" msgstr "Punch Multiple Right" msgid "finishing-template.punch-multiple-top" msgstr "Punch Multiple Top" msgid "finishing-template.punch-quad-bottom" msgstr "Punch Quad Bottom" msgid "finishing-template.punch-quad-left" msgstr "Punch Quad Left" msgid "finishing-template.punch-quad-right" msgstr "Punch Quad Right" msgid "finishing-template.punch-quad-top" msgstr "Punch Quad Top" msgid "finishing-template.punch-top-left" msgstr "Punch Top Left" msgid "finishing-template.punch-top-right" msgstr "Punch Top Right" msgid "finishing-template.punch-triple-bottom" msgstr "Punch Triple Bottom" msgid "finishing-template.punch-triple-left" msgstr "Punch Triple Left" msgid "finishing-template.punch-triple-right" msgstr "Punch Triple Right" msgid "finishing-template.punch-triple-top" msgstr "Punch Triple Top" msgid "finishing-template.saddle-stitch" msgstr "Saddle Stitch" msgid "finishing-template.staple" msgstr "Staple" msgid "finishing-template.staple-bottom-left" msgstr "Staple Bottom Left" msgid "finishing-template.staple-bottom-right" msgstr "Staple Bottom Right" msgid "finishing-template.staple-dual-bottom" msgstr "Staple Dual Bottom" msgid "finishing-template.staple-dual-left" msgstr "Staple Dual Left" msgid "finishing-template.staple-dual-right" msgstr "Staple Dual Right" msgid "finishing-template.staple-dual-top" msgstr "Staple Dual Top" msgid "finishing-template.staple-top-left" msgstr "Staple Top Left" msgid "finishing-template.staple-top-right" msgstr "Staple Top Right" msgid "finishing-template.staple-triple-bottom" msgstr "Staple Triple Bottom" msgid "finishing-template.staple-triple-left" msgstr "Staple Triple Left" msgid "finishing-template.staple-triple-right" msgstr "Staple Triple Right" msgid "finishing-template.staple-triple-top" msgstr "Staple Triple Top" msgid "finishing-template.trim" msgstr "Trim" msgid "finishing-template.trim-after-copies" msgstr "Trim After Copies" msgid "finishing-template.trim-after-documents" msgstr "Trim After Documents" msgid "finishing-template.trim-after-job" msgstr "Trim After Job" msgid "finishing-template.trim-after-pages" msgstr "Trim After Pages" msgid "finishings" msgstr "Finishings" msgid "finishings-col" msgstr "Finishings" msgid "finishings.10" msgstr "Fold" msgid "finishings.100" msgstr "Fold Z" msgid "finishings.101" msgstr "Fold Engineering Z" msgid "finishings.11" msgstr "Trim" msgid "finishings.12" msgstr "Bale" msgid "finishings.13" msgstr "Booklet Maker" msgid "finishings.14" msgstr "Jog Offset" msgid "finishings.15" msgstr "Coat" msgid "finishings.16" msgstr "Laminate" msgid "finishings.20" msgstr "Staple Top Left" msgid "finishings.21" msgstr "Staple Bottom Left" msgid "finishings.22" msgstr "Staple Top Right" msgid "finishings.23" msgstr "Staple Bottom Right" msgid "finishings.24" msgstr "Edge Stitch Left" msgid "finishings.25" msgstr "Edge Stitch Top" msgid "finishings.26" msgstr "Edge Stitch Right" msgid "finishings.27" msgstr "Edge Stitch Bottom" msgid "finishings.28" msgstr "Staple Dual Left" msgid "finishings.29" msgstr "Staple Dual Top" msgid "finishings.3" msgstr "None" msgid "finishings.30" msgstr "Staple Dual Right" msgid "finishings.31" msgstr "Staple Dual Bottom" msgid "finishings.32" msgstr "Staple Triple Left" msgid "finishings.33" msgstr "Staple Triple Top" msgid "finishings.34" msgstr "Staple Triple Right" msgid "finishings.35" msgstr "Staple Triple Bottom" msgid "finishings.4" msgstr "Staple" msgid "finishings.5" msgstr "Punch" msgid "finishings.50" msgstr "Bind Left" msgid "finishings.51" msgstr "Bind Top" msgid "finishings.52" msgstr "Bind Right" msgid "finishings.53" msgstr "Bind Bottom" msgid "finishings.6" msgstr "Cover" msgid "finishings.60" msgstr "Trim After Pages" msgid "finishings.61" msgstr "Trim After Documents" msgid "finishings.62" msgstr "Trim After Copies" msgid "finishings.63" msgstr "Trim After Job" msgid "finishings.7" msgstr "Bind" msgid "finishings.70" msgstr "Punch Top Left" msgid "finishings.71" msgstr "Punch Bottom Left" msgid "finishings.72" msgstr "Punch Top Right" msgid "finishings.73" msgstr "Punch Bottom Right" msgid "finishings.74" msgstr "Punch Dual Left" msgid "finishings.75" msgstr "Punch Dual Top" msgid "finishings.76" msgstr "Punch Dual Right" msgid "finishings.77" msgstr "Punch Dual Bottom" msgid "finishings.78" msgstr "Punch Triple Left" msgid "finishings.79" msgstr "Punch Triple Top" msgid "finishings.8" msgstr "Saddle Stitch" msgid "finishings.80" msgstr "Punch Triple Right" msgid "finishings.81" msgstr "Punch Triple Bottom" msgid "finishings.82" msgstr "Punch Quad Left" msgid "finishings.83" msgstr "Punch Quad Top" msgid "finishings.84" msgstr "Punch Quad Right" msgid "finishings.85" msgstr "Punch Quad Bottom" msgid "finishings.86" msgstr "Punch Multiple Left" msgid "finishings.87" msgstr "Punch Multiple Top" msgid "finishings.88" msgstr "Punch Multiple Right" msgid "finishings.89" msgstr "Punch Multiple Bottom" msgid "finishings.9" msgstr "Edge Stitch" msgid "finishings.90" msgstr "Fold Accordion" msgid "finishings.91" msgstr "Fold Double Gate" msgid "finishings.92" msgstr "Fold Gate" msgid "finishings.93" msgstr "Fold Half" msgid "finishings.94" msgstr "Fold Half Z" msgid "finishings.95" msgstr "Fold Left Gate" msgid "finishings.96" msgstr "Fold Letter" msgid "finishings.97" msgstr "Fold Parallel" msgid "finishings.98" msgstr "Fold Poster" msgid "finishings.99" msgstr "Fold Right Gate" msgid "folding" msgstr "Fold" msgid "folding-direction" msgstr "Folding Direction" msgid "folding-direction.inward" msgstr "Inward" msgid "folding-direction.outward" msgstr "Outward" msgid "folding-offset" msgstr "Fold Position" msgid "folding-reference-edge" msgstr "Folding Reference Edge" msgid "folding-reference-edge.bottom" msgstr "Bottom" msgid "folding-reference-edge.left" msgstr "Left" msgid "folding-reference-edge.right" msgstr "Right" msgid "folding-reference-edge.top" msgstr "Top" msgid "font-name-requested" msgstr "Font Name" msgid "font-size-requested" msgstr "Font Size" msgid "force-front-side" msgstr "Force Front Side" msgid "from-name" msgstr "From Name" msgid "held" msgstr "retenue" msgid "help\t\tGet help on commands." msgstr "" msgid "idle" msgstr "inactive" msgid "imposition-template" msgstr "Imposition Template" msgid "imposition-template.none" msgstr "None" msgid "imposition-template.signature" msgstr "Signature" msgid "input-attributes" msgstr "Input Attributes" msgid "input-auto-scaling" msgstr "Scan Auto Scaling" msgid "input-auto-skew-correction" msgstr "Scan Auto Skew Correction" msgid "input-brightness" msgstr "Scan Brightness" msgid "input-color-mode" msgstr "Input Color Mode" msgid "input-color-mode.auto" msgstr "Automatic" msgid "input-color-mode.bi-level" msgstr "Bi-Level" msgid "input-color-mode.cmyk_16" msgstr "CMYK 16" msgid "input-color-mode.cmyk_8" msgstr "CMYK 8" msgid "input-color-mode.color" msgstr "Color" msgid "input-color-mode.color_8" msgstr "Color 8" msgid "input-color-mode.monochrome" msgstr "Monochrome" msgid "input-color-mode.monochrome_16" msgstr "Monochrome 16" msgid "input-color-mode.monochrome_4" msgstr "Monochrome 4" msgid "input-color-mode.monochrome_8" msgstr "Monochrome 8" msgid "input-color-mode.rgb_16" msgstr "RGB 16" msgid "input-color-mode.rgba_16" msgstr "RGBA 16" msgid "input-color-mode.rgba_8" msgstr "RGBA 8" msgid "input-content-type" msgstr "Input Content Type" msgid "input-content-type.auto" msgstr "Automatic" msgid "input-content-type.halftone" msgstr "Halftone" msgid "input-content-type.line-art" msgstr "Line Art" msgid "input-content-type.magazine" msgstr "Magazine" msgid "input-content-type.photo" msgstr "Photo" msgid "input-content-type.text" msgstr "Text" msgid "input-content-type.text-and-photo" msgstr "Text And Photo" msgid "input-contrast" msgstr "Scan Contrast" msgid "input-film-scan-mode" msgstr "Input Film Scan Mode" msgid "input-film-scan-mode.black-and-white-negative-film" msgstr "Black And White Negative Film" msgid "input-film-scan-mode.color-negative-film" msgstr "Color Negative Film" msgid "input-film-scan-mode.color-slide-film" msgstr "Color Slide Film" msgid "input-film-scan-mode.not-applicable" msgstr "Not Applicable" msgid "input-images-to-transfer" msgstr "Scan Images To Transfer" msgid "input-media" msgstr "Input Media" msgid "input-media.auto" msgstr "Automatic" msgid "input-orientation-requested" msgstr "Input Orientation" msgid "input-quality" msgstr "Input Quality" msgid "input-resolution" msgstr "Scan Resolution" msgid "input-scaling-height" msgstr "Scan Scaling Height" msgid "input-scaling-width" msgstr "Scan Scaling Width" msgid "input-scan-regions" msgstr "Scan Regions" msgid "input-sharpness" msgstr "Scan Sharpness" msgid "input-sides" msgstr "Input Sides" msgid "input-source" msgstr "Input Source" msgid "input-source.adf" msgstr "Adf" msgid "input-source.film-reader" msgstr "Film Reader" msgid "input-source.platen" msgstr "Platen" msgid "insert-after-page-number" msgstr "Insert Page Number" msgid "insert-count" msgstr "Insert Count" msgid "insert-sheet" msgstr "Insert Sheet" #, c-format msgid "ippfind: Bad regular expression: %s" msgstr "" msgid "ippfind: Cannot use --and after --or." msgstr "" #, c-format msgid "ippfind: Expected key name after %s." msgstr "" #, c-format msgid "ippfind: Expected port range after %s." msgstr "" #, c-format msgid "ippfind: Expected program after %s." msgstr "" #, c-format msgid "ippfind: Expected semi-colon after %s." msgstr "" msgid "ippfind: Missing close brace in substitution." msgstr "" msgid "ippfind: Missing close parenthesis." msgstr "" msgid "ippfind: Missing expression before \"--and\"." msgstr "" msgid "ippfind: Missing expression before \"--or\"." msgstr "" #, c-format msgid "ippfind: Missing key name after %s." msgstr "" msgid "ippfind: Missing open parenthesis." msgstr "" #, c-format msgid "ippfind: Missing program after %s." msgstr "" #, c-format msgid "ippfind: Missing regular expression after %s." msgstr "" #, c-format msgid "ippfind: Missing semi-colon after %s." msgstr "" msgid "ippfind: Out of memory." msgstr "" msgid "ippfind: Too many parenthesis." msgstr "" #, c-format msgid "ippfind: Unable to browse or resolve: %s" msgstr "" #, c-format msgid "ippfind: Unable to execute \"%s\": %s" msgstr "" #, c-format msgid "ippfind: Unable to use Bonjour: %s" msgstr "" #, c-format msgid "ippfind: Unknown variable \"{%s}\"." msgstr "" msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." msgstr "" #, c-format msgid "ipptool: Bad URI - %s." msgstr "" msgid "ipptool: Invalid seconds for \"-i\"." msgstr "" msgid "ipptool: May only specify a single URI." msgstr "" msgid "ipptool: Missing count for \"-n\"." msgstr "" msgid "ipptool: Missing filename for \"-f\"." msgstr "" msgid "ipptool: Missing name=value for \"-d\"." msgstr "" msgid "ipptool: Missing seconds for \"-i\"." msgstr "" msgid "ipptool: URI required before test file." msgstr "" #, c-format msgid "ipptool: Unknown option \"-%c\"." msgstr "" msgid "job-account-id" msgstr "Job Account ID" msgid "job-account-type" msgstr "Job Account Type" msgid "job-account-type.general" msgstr "General" msgid "job-account-type.group" msgstr "Group" msgid "job-account-type.none" msgstr "None" msgid "job-accounting-output-bin" msgstr "Job Accounting Output Bin" msgid "job-accounting-sheets" msgstr "Job Accounting Sheets" msgid "job-accounting-sheets-type" msgstr "Job Accounting Sheets Type" msgid "job-accounting-sheets-type.none" msgstr "None" msgid "job-accounting-sheets-type.standard" msgstr "Standard" msgid "job-accounting-user-id" msgstr "Job Accounting User ID" msgid "job-collation-type" msgstr "Job Collation Type" msgid "job-collation-type.3" msgstr "Uncollated Sheets" msgid "job-collation-type.4" msgstr "Collated Documents" msgid "job-collation-type.5" msgstr "Uncollated Documents" msgid "job-copies" msgstr "Job Copies" msgid "job-cover-back" msgstr "Job Cover Back" msgid "job-cover-front" msgstr "Job Cover Front" msgid "job-delay-output-until" msgstr "Job Delay Output Until" msgid "job-delay-output-until-time" msgstr "Job Delay Output Until Time" msgid "job-delay-output-until.day-time" msgstr "Day Time" msgid "job-delay-output-until.evening" msgstr "Evening" msgid "job-delay-output-until.indefinite" msgstr "Indefinite" msgid "job-delay-output-until.night" msgstr "Night" msgid "job-delay-output-until.no-delay-output" msgstr "No Delay Output" msgid "job-delay-output-until.second-shift" msgstr "Second Shift" msgid "job-delay-output-until.third-shift" msgstr "Third Shift" msgid "job-delay-output-until.weekend" msgstr "Weekend" msgid "job-error-action" msgstr "Job Error Action" msgid "job-error-action.abort-job" msgstr "Abort Job" msgid "job-error-action.cancel-job" msgstr "Cancel Job" msgid "job-error-action.continue-job" msgstr "Continue Job" msgid "job-error-action.suspend-job" msgstr "Suspend Job" msgid "job-error-sheet" msgstr "Job Error Sheet" msgid "job-error-sheet-type" msgstr "Job Error Sheet Type" msgid "job-error-sheet-type.none" msgstr "None" msgid "job-error-sheet-type.standard" msgstr "Standard" msgid "job-error-sheet-when" msgstr "Job Error Sheet When" msgid "job-error-sheet-when.always" msgstr "Always" msgid "job-error-sheet-when.on-error" msgstr "On Error" msgid "job-finishings" msgstr "Job Finishings" msgid "job-hold-until" msgstr "Hold Until" msgid "job-hold-until-time" msgstr "Job Hold Until Time" msgid "job-hold-until.day-time" msgstr "Day Time" msgid "job-hold-until.evening" msgstr "Evening" msgid "job-hold-until.indefinite" msgstr "Released" msgid "job-hold-until.night" msgstr "Night" msgid "job-hold-until.no-hold" msgstr "No Hold" msgid "job-hold-until.second-shift" msgstr "Second Shift" msgid "job-hold-until.third-shift" msgstr "Third Shift" msgid "job-hold-until.weekend" msgstr "Weekend" msgid "job-mandatory-attributes" msgstr "Job Mandatory Attributes" msgid "job-name" msgstr "Job Name" msgid "job-phone-number" msgstr "Job Phone Number" msgid "job-printer-uri attribute missing." msgstr "" msgid "job-priority" msgstr "Job Priority" msgid "job-recipient-name" msgstr "Job Recipient Name" msgid "job-save-disposition" msgstr "Job Save Disposition" msgid "job-sheet-message" msgstr "Job Sheet Message" msgid "job-sheets" msgstr "Banner Page" msgid "job-sheets-col" msgstr "Banner Page" msgid "job-sheets.first-print-stream-page" msgstr "First Print Stream Page" msgid "job-sheets.job-both-sheet" msgstr "Start and End Sheets" msgid "job-sheets.job-end-sheet" msgstr "End Sheet" msgid "job-sheets.job-start-sheet" msgstr "Start Sheet" msgid "job-sheets.none" msgstr "None" msgid "job-sheets.standard" msgstr "Standard" msgid "job-state" msgstr "Job State" msgid "job-state-message" msgstr "Job State Message" msgid "job-state-reasons" msgstr "Detailed Job State" msgid "job-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "job-state-reasons.account-authorization-failed" msgstr "Account Authorization Failed" msgid "job-state-reasons.account-closed" msgstr "Account Closed" msgid "job-state-reasons.account-info-needed" msgstr "Account Info Needed" msgid "job-state-reasons.account-limit-reached" msgstr "Account Limit Reached" msgid "job-state-reasons.compression-error" msgstr "Compression Error" msgid "job-state-reasons.conflicting-attributes" msgstr "Conflicting Attributes" msgid "job-state-reasons.connected-to-destination" msgstr "Connected To Destination" msgid "job-state-reasons.connecting-to-destination" msgstr "Connecting To Destination" msgid "job-state-reasons.destination-uri-failed" msgstr "Destination Uri Failed" msgid "job-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "job-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "job-state-reasons.document-access-error" msgstr "Document Access Error" msgid "job-state-reasons.document-format-error" msgstr "Document Format Error" msgid "job-state-reasons.document-password-error" msgstr "Document Password Error" msgid "job-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "job-state-reasons.document-security-error" msgstr "Document Security Error" msgid "job-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "job-state-reasons.errors-detected" msgstr "Errors Detected" msgid "job-state-reasons.job-canceled-at-device" msgstr "Job Canceled At Device" msgid "job-state-reasons.job-canceled-by-operator" msgstr "Job Canceled By Operator" msgid "job-state-reasons.job-canceled-by-user" msgstr "Job Canceled By User" msgid "job-state-reasons.job-completed-successfully" msgstr "Job Completed Successfully" msgid "job-state-reasons.job-completed-with-errors" msgstr "Job Completed With Errors" msgid "job-state-reasons.job-completed-with-warnings" msgstr "Job Completed With Warnings" msgid "job-state-reasons.job-data-insufficient" msgstr "Job Data Insufficient" msgid "job-state-reasons.job-delay-output-until-specified" msgstr "Job Delay Output Until Specified" msgid "job-state-reasons.job-digital-signature-wait" msgstr "Job Digital Signature Wait" msgid "job-state-reasons.job-fetchable" msgstr "Job Fetchable" msgid "job-state-reasons.job-held-for-review" msgstr "Job Held For Review" msgid "job-state-reasons.job-hold-until-specified" msgstr "Job Hold Until Specified" msgid "job-state-reasons.job-incoming" msgstr "Job Incoming" msgid "job-state-reasons.job-interpreting" msgstr "Job Interpreting" msgid "job-state-reasons.job-outgoing" msgstr "Job Outgoing" msgid "job-state-reasons.job-password-wait" msgstr "Job Password Wait" msgid "job-state-reasons.job-printed-successfully" msgstr "Job Printed Successfully" msgid "job-state-reasons.job-printed-with-errors" msgstr "Job Printed With Errors" msgid "job-state-reasons.job-printed-with-warnings" msgstr "Job Printed With Warnings" msgid "job-state-reasons.job-printing" msgstr "Job Printing" msgid "job-state-reasons.job-queued" msgstr "Job Queued" msgid "job-state-reasons.job-queued-for-marker" msgstr "Job Queued For Marker" msgid "job-state-reasons.job-release-wait" msgstr "Job Release Wait" msgid "job-state-reasons.job-restartable" msgstr "Job Restartable" msgid "job-state-reasons.job-resuming" msgstr "Job Resuming" msgid "job-state-reasons.job-saved-successfully" msgstr "Job Saved Successfully" msgid "job-state-reasons.job-saved-with-errors" msgstr "Job Saved With Errors" msgid "job-state-reasons.job-saved-with-warnings" msgstr "Job Saved With Warnings" msgid "job-state-reasons.job-saving" msgstr "Job Saving" msgid "job-state-reasons.job-spooling" msgstr "Job Spooling" msgid "job-state-reasons.job-streaming" msgstr "Job Streaming" msgid "job-state-reasons.job-suspended" msgstr "Job Suspended" msgid "job-state-reasons.job-suspended-by-operator" msgstr "Job Suspended By Operator" msgid "job-state-reasons.job-suspended-by-system" msgstr "Job Suspended By System" msgid "job-state-reasons.job-suspended-by-user" msgstr "Job Suspended By User" msgid "job-state-reasons.job-suspending" msgstr "Job Suspending" msgid "job-state-reasons.job-transferring" msgstr "Job Transferring" msgid "job-state-reasons.job-transforming" msgstr "Job Transforming" msgid "job-state-reasons.none" msgstr "None" msgid "job-state-reasons.printer-stopped" msgstr "Printer Stopped" msgid "job-state-reasons.printer-stopped-partly" msgstr "Printer Stopped Partly" msgid "job-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "job-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "job-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "job-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "job-state-reasons.service-off-line" msgstr "Service Off Line" msgid "job-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "job-state-reasons.unsupported-attributes-or-values" msgstr "Unsupported Attributes Or Values" msgid "job-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "job-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "job-state-reasons.waiting-for-user-action" msgstr "Waiting For User Action" msgid "job-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "job-state.3" msgstr "Pending" msgid "job-state.4" msgstr "Pending Held" msgid "job-state.5" msgstr "Processing" msgid "job-state.6" msgstr "Processing Stopped" msgid "job-state.7" msgstr "Canceled" msgid "job-state.8" msgstr "Aborted" msgid "job-state.9" msgstr "Completed" msgid "laminating" msgstr "Laminate Pages" msgid "laminating-sides" msgstr "Laminating Sides" msgid "laminating-sides.back" msgstr "Back" msgid "laminating-sides.both" msgstr "Both" msgid "laminating-sides.front" msgstr "Front" msgid "laminating-type" msgstr "Laminating Type" msgid "laminating-type.archival" msgstr "Archival" msgid "laminating-type.glossy" msgstr "Glossy" msgid "laminating-type.high-gloss" msgstr "High Gloss" msgid "laminating-type.matte" msgstr "Matte" msgid "laminating-type.semi-gloss" msgstr "Semi-Gloss" msgid "laminating-type.translucent" msgstr "Translucent" msgid "logo" msgstr "Logo" msgid "lpadmin: Class name can only contain printable characters." msgstr "" #, c-format msgid "lpadmin: Expected PPD after \"-%c\" option." msgstr "" msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option." msgstr "" msgid "lpadmin: Expected class after \"-r\" option." msgstr "" msgid "lpadmin: Expected class name after \"-c\" option." msgstr "" msgid "lpadmin: Expected description after \"-D\" option." msgstr "" msgid "lpadmin: Expected device URI after \"-v\" option." msgstr "" msgid "lpadmin: Expected file type(s) after \"-I\" option." msgstr "" msgid "lpadmin: Expected hostname after \"-h\" option." msgstr "" msgid "lpadmin: Expected location after \"-L\" option." msgstr "" msgid "lpadmin: Expected model after \"-m\" option." msgstr "" msgid "lpadmin: Expected name after \"-R\" option." msgstr "" msgid "lpadmin: Expected name=value after \"-o\" option." msgstr "" msgid "lpadmin: Expected printer after \"-p\" option." msgstr "" msgid "lpadmin: Expected printer name after \"-d\" option." msgstr "" msgid "lpadmin: Expected printer or class after \"-x\" option." msgstr "" msgid "lpadmin: No member names were seen." msgstr "" #, c-format msgid "lpadmin: Printer %s is already a member of class %s." msgstr "" #, c-format msgid "lpadmin: Printer %s is not a member of class %s." msgstr "" msgid "lpadmin: Printer name can only contain printable characters." msgstr "" msgid "" "lpadmin: Raw queues are deprecated and will stop working in a future version " "of CUPS." msgstr "" msgid "" "lpadmin: System V interface scripts are no longer supported for security " "reasons." msgstr "" msgid "" "lpadmin: Unable to add a printer to the class:\n" " You must specify a printer name first." msgstr "" #, c-format msgid "lpadmin: Unable to connect to server: %s" msgstr "" msgid "lpadmin: Unable to create temporary file" msgstr "" msgid "" "lpadmin: Unable to delete option:\n" " You must specify a printer name first." msgstr "" #, c-format msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d." msgstr "" #, c-format msgid "lpadmin: Unable to open PPD file \"%s\" - %s" msgstr "" msgid "" "lpadmin: Unable to remove a printer from the class:\n" " You must specify a printer name first." msgstr "" msgid "" "lpadmin: Unable to set the printer options:\n" " You must specify a printer name first." msgstr "" #, c-format msgid "lpadmin: Unknown allow/deny option \"%s\"." msgstr "" #, c-format msgid "lpadmin: Unknown argument \"%s\"." msgstr "" #, c-format msgid "lpadmin: Unknown option \"%c\"." msgstr "" msgid "lpadmin: Use the 'everywhere' model for shared printers." msgstr "" msgid "lpadmin: Warning - content type list ignored." msgstr "" msgid "lpc> " msgstr "lpc> " msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"." msgstr "" msgid "lpinfo: Expected language after \"--language\"." msgstr "" msgid "lpinfo: Expected make and model after \"--make-and-model\"." msgstr "" msgid "lpinfo: Expected product string after \"--product\"." msgstr "" msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"." msgstr "" msgid "lpinfo: Expected scheme list after \"--include-schemes\"." msgstr "" msgid "lpinfo: Expected timeout after \"--timeout\"." msgstr "" #, c-format msgid "lpmove: Unable to connect to server: %s" msgstr "" #, c-format msgid "lpmove: Unknown argument \"%s\"." msgstr "" msgid "lpoptions: No printers." msgstr "" #, c-format msgid "lpoptions: Unable to add printer or instance: %s" msgstr "" #, c-format msgid "lpoptions: Unable to get PPD file for %s: %s" msgstr "" #, c-format msgid "lpoptions: Unable to open PPD file for %s." msgstr "" msgid "lpoptions: Unknown printer or class." msgstr "" #, c-format msgid "" "lpstat: error - %s environment variable names non-existent destination \"%s" "\"." msgstr "" msgid "material-amount" msgstr "Amount of Material" msgid "material-amount-units" msgstr "Material Amount Units" msgid "material-amount-units.g" msgstr "G" msgid "material-amount-units.kg" msgstr "Kg" msgid "material-amount-units.l" msgstr "L" msgid "material-amount-units.m" msgstr "M" msgid "material-amount-units.ml" msgstr "Ml" msgid "material-amount-units.mm" msgstr "Mm" msgid "material-color" msgstr "Material Color" msgid "material-diameter" msgstr "Material Diameter" msgid "material-diameter-tolerance" msgstr "Material Diameter Tolerance" msgid "material-fill-density" msgstr "Material Fill Density" msgid "material-name" msgstr "Material Name" msgid "material-purpose" msgstr "Material Purpose" msgid "material-purpose.all" msgstr "All" msgid "material-purpose.base" msgstr "Base" msgid "material-purpose.in-fill" msgstr "In Fill" msgid "material-purpose.shell" msgstr "Shell" msgid "material-purpose.support" msgstr "Support" msgid "material-rate" msgstr "Feed Rate" msgid "material-rate-units" msgstr "Material Rate Units" msgid "material-rate-units.mg_second" msgstr "Mg Second" msgid "material-rate-units.ml_second" msgstr "Ml Second" msgid "material-rate-units.mm_second" msgstr "Mm Second" msgid "material-shell-thickness" msgstr "Material Shell Thickness" msgid "material-temperature" msgstr "Material Temperature" msgid "material-type" msgstr "Material Type" msgid "material-type.abs" msgstr "Abs" msgid "material-type.abs-carbon-fiber" msgstr "Abs Carbon Fiber" msgid "material-type.abs-carbon-nanotube" msgstr "Abs Carbon Nanotube" msgid "material-type.chocolate" msgstr "Chocolate" msgid "material-type.gold" msgstr "Gold" msgid "material-type.nylon" msgstr "Nylon" msgid "material-type.pet" msgstr "Pet" msgid "material-type.photopolymer" msgstr "Photopolymer" msgid "material-type.pla" msgstr "Pla" msgid "material-type.pla-conductive" msgstr "Pla Conductive" msgid "material-type.pla-flexible" msgstr "Pla Flexible" msgid "material-type.pla-magnetic" msgstr "Pla Magnetic" msgid "material-type.pla-steel" msgstr "Pla Steel" msgid "material-type.pla-stone" msgstr "Pla Stone" msgid "material-type.pla-wood" msgstr "Pla Wood" msgid "material-type.polycarbonate" msgstr "Polycarbonate" msgid "material-type.pva-dissolvable" msgstr "Dissolvable PVA" msgid "material-type.silver" msgstr "Silver" msgid "material-type.titanium" msgstr "Titanium" msgid "material-type.wax" msgstr "Wax" msgid "materials-col" msgstr "Materials" msgid "media" msgstr "Media" msgid "media-back-coating" msgstr "Media Back Coating" msgid "media-back-coating.glossy" msgstr "Glossy" msgid "media-back-coating.high-gloss" msgstr "High Gloss" msgid "media-back-coating.matte" msgstr "Matte" msgid "media-back-coating.none" msgstr "None" msgid "media-back-coating.satin" msgstr "Satin" msgid "media-back-coating.semi-gloss" msgstr "Semi-Gloss" msgid "media-bottom-margin" msgstr "Media Bottom Margin" msgid "media-col" msgstr "Media" msgid "media-color" msgstr "Media Color" msgid "media-color.black" msgstr "Black" msgid "media-color.blue" msgstr "Blue" msgid "media-color.brown" msgstr "Brown" msgid "media-color.buff" msgstr "Buff" msgid "media-color.clear-black" msgstr "Clear Black" msgid "media-color.clear-blue" msgstr "Clear Blue" msgid "media-color.clear-brown" msgstr "Clear Brown" msgid "media-color.clear-buff" msgstr "Clear Buff" msgid "media-color.clear-cyan" msgstr "Clear Cyan" msgid "media-color.clear-gold" msgstr "Clear Gold" msgid "media-color.clear-goldenrod" msgstr "Clear Goldenrod" msgid "media-color.clear-gray" msgstr "Clear Gray" msgid "media-color.clear-green" msgstr "Clear Green" msgid "media-color.clear-ivory" msgstr "Clear Ivory" msgid "media-color.clear-magenta" msgstr "Clear Magenta" msgid "media-color.clear-multi-color" msgstr "Clear Multi Color" msgid "media-color.clear-mustard" msgstr "Clear Mustard" msgid "media-color.clear-orange" msgstr "Clear Orange" msgid "media-color.clear-pink" msgstr "Clear Pink" msgid "media-color.clear-red" msgstr "Clear Red" msgid "media-color.clear-silver" msgstr "Clear Silver" msgid "media-color.clear-turquoise" msgstr "Clear Turquoise" msgid "media-color.clear-violet" msgstr "Clear Violet" msgid "media-color.clear-white" msgstr "Clear White" msgid "media-color.clear-yellow" msgstr "Clear Yellow" msgid "media-color.cyan" msgstr "Cyan" msgid "media-color.dark-blue" msgstr "Dark Blue" msgid "media-color.dark-brown" msgstr "Dark Brown" msgid "media-color.dark-buff" msgstr "Dark Buff" msgid "media-color.dark-cyan" msgstr "Dark Cyan" msgid "media-color.dark-gold" msgstr "Dark Gold" msgid "media-color.dark-goldenrod" msgstr "Dark Goldenrod" msgid "media-color.dark-gray" msgstr "Dark Gray" msgid "media-color.dark-green" msgstr "Dark Green" msgid "media-color.dark-ivory" msgstr "Dark Ivory" msgid "media-color.dark-magenta" msgstr "Dark Magenta" msgid "media-color.dark-mustard" msgstr "Dark Mustard" msgid "media-color.dark-orange" msgstr "Dark Orange" msgid "media-color.dark-pink" msgstr "Dark Pink" msgid "media-color.dark-red" msgstr "Dark Red" msgid "media-color.dark-silver" msgstr "Dark Silver" msgid "media-color.dark-turquoise" msgstr "Dark Turquoise" msgid "media-color.dark-violet" msgstr "Dark Violet" msgid "media-color.dark-yellow" msgstr "Dark Yellow" msgid "media-color.gold" msgstr "Gold" msgid "media-color.goldenrod" msgstr "Goldenrod" msgid "media-color.gray" msgstr "Gray" msgid "media-color.green" msgstr "Green" msgid "media-color.ivory" msgstr "Ivory" msgid "media-color.light-black" msgstr "Light Black" msgid "media-color.light-blue" msgstr "Light Blue" msgid "media-color.light-brown" msgstr "Light Brown" msgid "media-color.light-buff" msgstr "Light Buff" msgid "media-color.light-cyan" msgstr "Light Cyan" msgid "media-color.light-gold" msgstr "Light Gold" msgid "media-color.light-goldenrod" msgstr "Light Goldenrod" msgid "media-color.light-gray" msgstr "Light Gray" msgid "media-color.light-green" msgstr "Light Green" msgid "media-color.light-ivory" msgstr "Light Ivory" msgid "media-color.light-magenta" msgstr "Light Magenta" msgid "media-color.light-mustard" msgstr "Light Mustard" msgid "media-color.light-orange" msgstr "Light Orange" msgid "media-color.light-pink" msgstr "Light Pink" msgid "media-color.light-red" msgstr "Light Red" msgid "media-color.light-silver" msgstr "Light Silver" msgid "media-color.light-turquoise" msgstr "Light Turquoise" msgid "media-color.light-violet" msgstr "Light Violet" msgid "media-color.light-yellow" msgstr "Light Yellow" msgid "media-color.magenta" msgstr "Magenta" msgid "media-color.multi-color" msgstr "Multi-Color" msgid "media-color.mustard" msgstr "Mustard" msgid "media-color.no-color" msgstr "No Color" msgid "media-color.orange" msgstr "Orange" msgid "media-color.pink" msgstr "Pink" msgid "media-color.red" msgstr "Red" msgid "media-color.silver" msgstr "Silver" msgid "media-color.turquoise" msgstr "Turquoise" msgid "media-color.violet" msgstr "Violet" msgid "media-color.white" msgstr "White" msgid "media-color.yellow" msgstr "Yellow" msgid "media-front-coating" msgstr "Media Front Coating" msgid "media-grain" msgstr "Media Grain" msgid "media-grain.x-direction" msgstr "Cross-Feed Direction" msgid "media-grain.y-direction" msgstr "Feed Direction" msgid "media-hole-count" msgstr "Media Hole Count" msgid "media-info" msgstr "Media Info" msgid "media-input-tray-check" msgstr "Media Input Tray Check" msgid "media-left-margin" msgstr "Media Left Margin" msgid "media-pre-printed" msgstr "Media Preprinted" msgid "media-pre-printed.blank" msgstr "Blank" msgid "media-pre-printed.letter-head" msgstr "Letterhead" msgid "media-pre-printed.pre-printed" msgstr "Preprinted" msgid "media-recycled" msgstr "Media Recycled" msgid "media-recycled.none" msgstr "None" msgid "media-recycled.standard" msgstr "Standard" msgid "media-right-margin" msgstr "Media Right Margin" msgid "media-size" msgstr "Media Dimensions" msgid "media-size-name" msgstr "Media Name" msgid "media-source" msgstr "Media Source" msgid "media-source.alternate" msgstr "Alternate" msgid "media-source.alternate-roll" msgstr "Alternate Roll" msgid "media-source.auto" msgstr "Automatic" msgid "media-source.bottom" msgstr "Bottom" msgid "media-source.by-pass-tray" msgstr "By Pass Tray" msgid "media-source.center" msgstr "Center" msgid "media-source.disc" msgstr "Disc" msgid "media-source.envelope" msgstr "Envelope" msgid "media-source.hagaki" msgstr "Hagaki" msgid "media-source.large-capacity" msgstr "Large Capacity" msgid "media-source.left" msgstr "Left" msgid "media-source.main" msgstr "Main" msgid "media-source.main-roll" msgstr "Main Roll" msgid "media-source.manual" msgstr "Manual" msgid "media-source.middle" msgstr "Middle" msgid "media-source.photo" msgstr "Photo" msgid "media-source.rear" msgstr "Rear" msgid "media-source.right" msgstr "Right" msgid "media-source.roll-1" msgstr "Roll 1" msgid "media-source.roll-10" msgstr "Roll 10" msgid "media-source.roll-2" msgstr "Roll 2" msgid "media-source.roll-3" msgstr "Roll 3" msgid "media-source.roll-4" msgstr "Roll 4" msgid "media-source.roll-5" msgstr "Roll 5" msgid "media-source.roll-6" msgstr "Roll 6" msgid "media-source.roll-7" msgstr "Roll 7" msgid "media-source.roll-8" msgstr "Roll 8" msgid "media-source.roll-9" msgstr "Roll 9" msgid "media-source.side" msgstr "Side" msgid "media-source.top" msgstr "Top" msgid "media-source.tray-1" msgstr "Tray 1" msgid "media-source.tray-10" msgstr "Tray 10" msgid "media-source.tray-11" msgstr "Tray 11" msgid "media-source.tray-12" msgstr "Tray 12" msgid "media-source.tray-13" msgstr "Tray 13" msgid "media-source.tray-14" msgstr "Tray 14" msgid "media-source.tray-15" msgstr "Tray 15" msgid "media-source.tray-16" msgstr "Tray 16" msgid "media-source.tray-17" msgstr "Tray 17" msgid "media-source.tray-18" msgstr "Tray 18" msgid "media-source.tray-19" msgstr "Tray 19" msgid "media-source.tray-2" msgstr "Tray 2" msgid "media-source.tray-20" msgstr "Tray 20" msgid "media-source.tray-3" msgstr "Tray 3" msgid "media-source.tray-4" msgstr "Tray 4" msgid "media-source.tray-5" msgstr "Tray 5" msgid "media-source.tray-6" msgstr "Tray 6" msgid "media-source.tray-7" msgstr "Tray 7" msgid "media-source.tray-8" msgstr "Tray 8" msgid "media-source.tray-9" msgstr "Tray 9" msgid "media-thickness" msgstr "Media Thickness" msgid "media-tooth" msgstr "Media Tooth" msgid "media-tooth.antique" msgstr "Antique" msgid "media-tooth.calendared" msgstr "Calendared" msgid "media-tooth.coarse" msgstr "Coarse" msgid "media-tooth.fine" msgstr "Fine" msgid "media-tooth.linen" msgstr "Linen" msgid "media-tooth.medium" msgstr "Medium" msgid "media-tooth.smooth" msgstr "Smooth" msgid "media-tooth.stipple" msgstr "Stipple" msgid "media-tooth.uncalendared" msgstr "Uncalendared" msgid "media-tooth.vellum" msgstr "Vellum" msgid "media-top-margin" msgstr "Media Top Margin" msgid "media-type" msgstr "Media Type" msgid "media-type.aluminum" msgstr "Aluminum" msgid "media-type.auto" msgstr "Automatic" msgid "media-type.back-print-film" msgstr "Back Print Film" msgid "media-type.cardboard" msgstr "Cardboard" msgid "media-type.cardstock" msgstr "Cardstock" msgid "media-type.cd" msgstr "CD" msgid "media-type.com.hp.advanced-photo" msgstr "Advanced Photo Paper" msgid "media-type.com.hp.brochure-glossy" msgstr "Glossy Brochure Paper" msgid "media-type.com.hp.brochure-matte" msgstr "Matte Brochure Paper" msgid "media-type.com.hp.cover-matte" msgstr "Matte Cover Paper" msgid "media-type.com.hp.ecosmart-lite" msgstr "Office Recycled Paper" msgid "media-type.com.hp.everyday-glossy" msgstr "Everyday Glossy Photo Paper" msgid "media-type.com.hp.everyday-matte" msgstr "Everyday Matte Paper" msgid "media-type.com.hp.extra-heavy" msgstr "Extra Heavyweight Paper" msgid "media-type.com.hp.intermediate" msgstr "Multipurpose Paper" msgid "media-type.com.hp.mid-weight" msgstr "Mid-Weight Paper" msgid "media-type.com.hp.premium-inkjet" msgstr "Premium Inkjet Paper" msgid "media-type.com.hp.premium-photo" msgstr "Premium Photo Glossy Paper" msgid "media-type.com.hp.premium-presentation-matte" msgstr "Premium Presentation Matte Paper" msgid "media-type.continuous" msgstr "Continuous" msgid "media-type.continuous-long" msgstr "Continuous Long" msgid "media-type.continuous-short" msgstr "Continuous Short" msgid "media-type.corrugated-board" msgstr "Corrugated Board" msgid "media-type.disc" msgstr "Optical Disc" msgid "media-type.disc-glossy" msgstr "Glossy Optical Disc" msgid "media-type.disc-high-gloss" msgstr "High Gloss Optical Disc" msgid "media-type.disc-matte" msgstr "Matte Optical Disc" msgid "media-type.disc-satin" msgstr "Satin Optical Disc" msgid "media-type.disc-semi-gloss" msgstr "Semi-Gloss Optical Disc" msgid "media-type.double-wall" msgstr "Double Wall" msgid "media-type.dry-film" msgstr "Dry Film" msgid "media-type.dvd" msgstr "DVD" msgid "media-type.embossing-foil" msgstr "Embossing Foil" msgid "media-type.end-board" msgstr "End Board" msgid "media-type.envelope" msgstr "Envelope" msgid "media-type.envelope-archival" msgstr "Archival Envelope" msgid "media-type.envelope-bond" msgstr "Bond Envelope" msgid "media-type.envelope-coated" msgstr "Coated Envelope" msgid "media-type.envelope-cotton" msgstr "Cotton Envelope" msgid "media-type.envelope-fine" msgstr "Fine Envelope" msgid "media-type.envelope-heavyweight" msgstr "Heavyweight Envelope" msgid "media-type.envelope-inkjet" msgstr "Inkjet Envelope" msgid "media-type.envelope-lightweight" msgstr "Lightweight Envelope" msgid "media-type.envelope-plain" msgstr "Plain Envelope" msgid "media-type.envelope-preprinted" msgstr "Preprinted Envelope" msgid "media-type.envelope-window" msgstr "Windowed Envelope" msgid "media-type.fabric" msgstr "Fabric" msgid "media-type.fabric-archival" msgstr "Archival Fabric" msgid "media-type.fabric-glossy" msgstr "Glossy Fabric" msgid "media-type.fabric-high-gloss" msgstr "High Gloss Fabric" msgid "media-type.fabric-matte" msgstr "Matte Fabric" msgid "media-type.fabric-semi-gloss" msgstr "Semi-Gloss Fabric" msgid "media-type.fabric-waterproof" msgstr "Waterproof Fabric" msgid "media-type.film" msgstr "Film" msgid "media-type.flexo-base" msgstr "Flexo Base" msgid "media-type.flexo-photo-polymer" msgstr "Flexo Photo Polymer" msgid "media-type.flute" msgstr "Flute" msgid "media-type.foil" msgstr "Foil" msgid "media-type.full-cut-tabs" msgstr "Full Cut Tabs" msgid "media-type.glass" msgstr "Glass" msgid "media-type.glass-colored" msgstr "Glass Colored" msgid "media-type.glass-opaque" msgstr "Glass Opaque" msgid "media-type.glass-surfaced" msgstr "Glass Surfaced" msgid "media-type.glass-textured" msgstr "Glass Textured" msgid "media-type.gravure-cylinder" msgstr "Gravure Cylinder" msgid "media-type.image-setter-paper" msgstr "Image Setter Paper" msgid "media-type.imaging-cylinder" msgstr "Imaging Cylinder" msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon-photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon_photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.labels" msgstr "Labels" msgid "media-type.labels-colored" msgstr "Colored Labels" msgid "media-type.labels-glossy" msgstr "Glossy Labels" msgid "media-type.labels-high-gloss" msgstr "High Gloss Labels" msgid "media-type.labels-inkjet" msgstr "Inkjet Labels" msgid "media-type.labels-matte" msgstr "Matte Labels" msgid "media-type.labels-permanent" msgstr "Permanent Labels" msgid "media-type.labels-satin" msgstr "Satin Labels" msgid "media-type.labels-security" msgstr "Security Labels" msgid "media-type.labels-semi-gloss" msgstr "Semi-Gloss Labels" msgid "media-type.laminating-foil" msgstr "Laminating Foil" msgid "media-type.letterhead" msgstr "Letterhead" msgid "media-type.metal" msgstr "Metal" msgid "media-type.metal-glossy" msgstr "Metal Glossy" msgid "media-type.metal-high-gloss" msgstr "Metal High Gloss" msgid "media-type.metal-matte" msgstr "Metal Matte" msgid "media-type.metal-satin" msgstr "Metal Satin" msgid "media-type.metal-semi-gloss" msgstr "Metal Semi Gloss" msgid "media-type.mounting-tape" msgstr "Mounting Tape" msgid "media-type.multi-layer" msgstr "Multi Layer" msgid "media-type.multi-part-form" msgstr "Multi Part Form" msgid "media-type.other" msgstr "Other" msgid "media-type.paper" msgstr "Paper" msgid "media-type.photographic" msgstr "Photo Paper" msgid "media-type.photographic-archival" msgstr "Photographic Archival" msgid "media-type.photographic-film" msgstr "Photo Film" msgid "media-type.photographic-glossy" msgstr "Glossy Photo Paper" msgid "media-type.photographic-high-gloss" msgstr "High Gloss Photo Paper" msgid "media-type.photographic-matte" msgstr "Matte Photo Paper" msgid "media-type.photographic-satin" msgstr "Satin Photo Paper" msgid "media-type.photographic-semi-gloss" msgstr "Semi-Gloss Photo Paper" msgid "media-type.plastic" msgstr "Plastic" msgid "media-type.plastic-archival" msgstr "Plastic Archival" msgid "media-type.plastic-colored" msgstr "Plastic Colored" msgid "media-type.plastic-glossy" msgstr "Plastic Glossy" msgid "media-type.plastic-high-gloss" msgstr "Plastic High Gloss" msgid "media-type.plastic-matte" msgstr "Plastic Matte" msgid "media-type.plastic-satin" msgstr "Plastic Satin" msgid "media-type.plastic-semi-gloss" msgstr "Plastic Semi Gloss" msgid "media-type.plate" msgstr "Plate" msgid "media-type.polyester" msgstr "Polyester" msgid "media-type.pre-cut-tabs" msgstr "Pre Cut Tabs" msgid "media-type.roll" msgstr "Roll" msgid "media-type.screen" msgstr "Screen" msgid "media-type.screen-paged" msgstr "Screen Paged" msgid "media-type.self-adhesive" msgstr "Self Adhesive" msgid "media-type.self-adhesive-film" msgstr "Self Adhesive Film" msgid "media-type.shrink-foil" msgstr "Shrink Foil" msgid "media-type.single-face" msgstr "Single Face" msgid "media-type.single-wall" msgstr "Single Wall" msgid "media-type.sleeve" msgstr "Sleeve" msgid "media-type.stationery" msgstr "Stationery" msgid "media-type.stationery-archival" msgstr "Stationery Archival" msgid "media-type.stationery-coated" msgstr "Coated Paper" msgid "media-type.stationery-cotton" msgstr "Stationery Cotton" msgid "media-type.stationery-fine" msgstr "Vellum Paper" msgid "media-type.stationery-heavyweight" msgstr "Heavyweight Paper" msgid "media-type.stationery-heavyweight-coated" msgstr "Stationery Heavyweight Coated" msgid "media-type.stationery-inkjet" msgstr "Stationery Inkjet Paper" msgid "media-type.stationery-letterhead" msgstr "Letterhead" msgid "media-type.stationery-lightweight" msgstr "Lightweight Paper" msgid "media-type.stationery-preprinted" msgstr "Preprinted Paper" msgid "media-type.stationery-prepunched" msgstr "Punched Paper" msgid "media-type.tab-stock" msgstr "Tab Stock" msgid "media-type.tractor" msgstr "Tractor" msgid "media-type.transfer" msgstr "Transfer" msgid "media-type.transparency" msgstr "Transparency" msgid "media-type.triple-wall" msgstr "Triple Wall" msgid "media-type.wet-film" msgstr "Wet Film" msgid "media-weight-metric" msgstr "Media Weight (grams per m²)" msgid "media.asme_f_28x40in" msgstr "28 x 40\"" msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" msgstr "A4 or US Letter" msgid "media.iso_2a0_1189x1682mm" msgstr "2a0" msgid "media.iso_a0_841x1189mm" msgstr "A0" msgid "media.iso_a0x3_1189x2523mm" msgstr "A0x3" msgid "media.iso_a10_26x37mm" msgstr "A10" msgid "media.iso_a1_594x841mm" msgstr "A1" msgid "media.iso_a1x3_841x1783mm" msgstr "A1x3" msgid "media.iso_a1x4_841x2378mm" msgstr "A1x4" msgid "media.iso_a2_420x594mm" msgstr "A2" msgid "media.iso_a2x3_594x1261mm" msgstr "A2x3" msgid "media.iso_a2x4_594x1682mm" msgstr "A2x4" msgid "media.iso_a2x5_594x2102mm" msgstr "A2x5" msgid "media.iso_a3-extra_322x445mm" msgstr "A3 (Extra)" msgid "media.iso_a3_297x420mm" msgstr "A3" msgid "media.iso_a3x3_420x891mm" msgstr "A3x3" msgid "media.iso_a3x4_420x1189mm" msgstr "A3x4" msgid "media.iso_a3x5_420x1486mm" msgstr "A3x5" msgid "media.iso_a3x6_420x1783mm" msgstr "A3x6" msgid "media.iso_a3x7_420x2080mm" msgstr "A3x7" msgid "media.iso_a4-extra_235.5x322.3mm" msgstr "A4 (Extra)" msgid "media.iso_a4-tab_225x297mm" msgstr "A4 (Tab)" msgid "media.iso_a4_210x297mm" msgstr "A4" msgid "media.iso_a4x3_297x630mm" msgstr "A4x3" msgid "media.iso_a4x4_297x841mm" msgstr "A4x4" msgid "media.iso_a4x5_297x1051mm" msgstr "A4x5" msgid "media.iso_a4x6_297x1261mm" msgstr "A4x6" msgid "media.iso_a4x7_297x1471mm" msgstr "A4x7" msgid "media.iso_a4x8_297x1682mm" msgstr "A4x8" msgid "media.iso_a4x9_297x1892mm" msgstr "A4x9" msgid "media.iso_a5-extra_174x235mm" msgstr "A5 (Extra)" msgid "media.iso_a5_148x210mm" msgstr "A5" msgid "media.iso_a6_105x148mm" msgstr "A6" msgid "media.iso_a7_74x105mm" msgstr "A7" msgid "media.iso_a8_52x74mm" msgstr "A8" msgid "media.iso_a9_37x52mm" msgstr "A9" msgid "media.iso_b0_1000x1414mm" msgstr "B0" msgid "media.iso_b10_31x44mm" msgstr "B10" msgid "media.iso_b1_707x1000mm" msgstr "B1" msgid "media.iso_b2_500x707mm" msgstr "B2" msgid "media.iso_b3_353x500mm" msgstr "B3" msgid "media.iso_b4_250x353mm" msgstr "B4" msgid "media.iso_b5-extra_201x276mm" msgstr "B5 (Extra)" msgid "media.iso_b5_176x250mm" msgstr "B5 Envelope" msgid "media.iso_b6_125x176mm" msgstr "B6" msgid "media.iso_b6c4_125x324mm" msgstr "B6/C4 Envelope" msgid "media.iso_b7_88x125mm" msgstr "B7" msgid "media.iso_b8_62x88mm" msgstr "B8" msgid "media.iso_b9_44x62mm" msgstr "B9" msgid "media.iso_c0_917x1297mm" msgstr "C0 Envelope" msgid "media.iso_c10_28x40mm" msgstr "C10 Envelope" msgid "media.iso_c1_648x917mm" msgstr "C1 Envelope" msgid "media.iso_c2_458x648mm" msgstr "C2 Envelope" msgid "media.iso_c3_324x458mm" msgstr "C3 Envelope" msgid "media.iso_c4_229x324mm" msgstr "C4 Envelope" msgid "media.iso_c5_162x229mm" msgstr "C5 Envelope" msgid "media.iso_c6_114x162mm" msgstr "C6 Envelope" msgid "media.iso_c6c5_114x229mm" msgstr "C6c5 Envelope" msgid "media.iso_c7_81x114mm" msgstr "C7 Envelope" msgid "media.iso_c7c6_81x162mm" msgstr "C7c6 Envelope" msgid "media.iso_c8_57x81mm" msgstr "C8 Envelope" msgid "media.iso_c9_40x57mm" msgstr "C9 Envelope" msgid "media.iso_dl_110x220mm" msgstr "DL Envelope" msgid "media.iso_ra0_860x1220mm" msgstr "Ra0" msgid "media.iso_ra1_610x860mm" msgstr "Ra1" msgid "media.iso_ra2_430x610mm" msgstr "Ra2" msgid "media.iso_ra3_305x430mm" msgstr "Ra3" msgid "media.iso_ra4_215x305mm" msgstr "Ra4" msgid "media.iso_sra0_900x1280mm" msgstr "Sra0" msgid "media.iso_sra1_640x900mm" msgstr "Sra1" msgid "media.iso_sra2_450x640mm" msgstr "Sra2" msgid "media.iso_sra3_320x450mm" msgstr "Sra3" msgid "media.iso_sra4_225x320mm" msgstr "Sra4" msgid "media.jis_b0_1030x1456mm" msgstr "JIS B0" msgid "media.jis_b10_32x45mm" msgstr "JIS B10" msgid "media.jis_b1_728x1030mm" msgstr "JIS B1" msgid "media.jis_b2_515x728mm" msgstr "JIS B2" msgid "media.jis_b3_364x515mm" msgstr "JIS B3" msgid "media.jis_b4_257x364mm" msgstr "JIS B4" msgid "media.jis_b5_182x257mm" msgstr "JIS B5" msgid "media.jis_b6_128x182mm" msgstr "JIS B6" msgid "media.jis_b7_91x128mm" msgstr "JIS B7" msgid "media.jis_b8_64x91mm" msgstr "JIS B8" msgid "media.jis_b9_45x64mm" msgstr "JIS B9" msgid "media.jis_exec_216x330mm" msgstr "JIS Executive" msgid "media.jpn_chou2_111.1x146mm" msgstr "Chou 2 Envelope" msgid "media.jpn_chou3_120x235mm" msgstr "Chou 3 Envelope" msgid "media.jpn_chou4_90x205mm" msgstr "Chou 4 Envelope" msgid "media.jpn_hagaki_100x148mm" msgstr "Hagaki" msgid "media.jpn_kahu_240x322.1mm" msgstr "Kahu Envelope" msgid "media.jpn_kaku2_240x332mm" msgstr "Kahu 2 Envelope" msgid "media.jpn_kaku3_216x277mm" msgstr "216 x 277mme" msgid "media.jpn_kaku4_197x267mm" msgstr "197 x 267mme" msgid "media.jpn_kaku5_190x240mm" msgstr "190 x 240mme" msgid "media.jpn_kaku7_142x205mm" msgstr "142 x 205mme" msgid "media.jpn_kaku8_119x197mm" msgstr "119 x 197mme" msgid "media.jpn_oufuku_148x200mm" msgstr "Oufuku Reply Postcard" msgid "media.jpn_you4_105x235mm" msgstr "You 4 Envelope" msgid "media.na_10x11_10x11in" msgstr "10 x 11\"" msgid "media.na_10x13_10x13in" msgstr "10 x 13\"" msgid "media.na_10x14_10x14in" msgstr "10 x 14\"" msgid "media.na_10x15_10x15in" msgstr "10 x 15\"" msgid "media.na_11x12_11x12in" msgstr "11 x 12\"" msgid "media.na_11x15_11x15in" msgstr "11 x 15\"" msgid "media.na_12x19_12x19in" msgstr "12 x 19\"" msgid "media.na_5x7_5x7in" msgstr "5 x 7\"" msgid "media.na_6x9_6x9in" msgstr "6 x 9\"" msgid "media.na_7x9_7x9in" msgstr "7 x 9\"" msgid "media.na_9x11_9x11in" msgstr "9 x 11\"" msgid "media.na_a2_4.375x5.75in" msgstr "A2 Envelope" msgid "media.na_arch-a_9x12in" msgstr "9 x 12\"" msgid "media.na_arch-b_12x18in" msgstr "12 x 18\"" msgid "media.na_arch-c_18x24in" msgstr "18 x 24\"" msgid "media.na_arch-d_24x36in" msgstr "24 x 36\"" msgid "media.na_arch-e2_26x38in" msgstr "26 x 38\"" msgid "media.na_arch-e3_27x39in" msgstr "27 x 39\"" msgid "media.na_arch-e_36x48in" msgstr "36 x 48\"" msgid "media.na_b-plus_12x19.17in" msgstr "12 x 19.17\"" msgid "media.na_c5_6.5x9.5in" msgstr "C5 Envelope" msgid "media.na_c_17x22in" msgstr "17 x 22\"" msgid "media.na_d_22x34in" msgstr "22 x 34\"" msgid "media.na_e_34x44in" msgstr "34 x 44\"" msgid "media.na_edp_11x14in" msgstr "11 x 14\"" msgid "media.na_eur-edp_12x14in" msgstr "12 x 14\"" msgid "media.na_executive_7.25x10.5in" msgstr "Executive" msgid "media.na_f_44x68in" msgstr "44 x 68\"" msgid "media.na_fanfold-eur_8.5x12in" msgstr "European Fanfold" msgid "media.na_fanfold-us_11x14.875in" msgstr "US Fanfold" msgid "media.na_foolscap_8.5x13in" msgstr "Foolscap" msgid "media.na_govt-legal_8x13in" msgstr "8 x 13\"" msgid "media.na_govt-letter_8x10in" msgstr "8 x 10\"" msgid "media.na_index-3x5_3x5in" msgstr "3 x 5\"" msgid "media.na_index-4x6-ext_6x8in" msgstr "6 x 8\"" msgid "media.na_index-4x6_4x6in" msgstr "4 x 6\"" msgid "media.na_index-5x8_5x8in" msgstr "5 x 8\"" msgid "media.na_invoice_5.5x8.5in" msgstr "Statement" msgid "media.na_ledger_11x17in" msgstr "11 x 17\"" msgid "media.na_legal-extra_9.5x15in" msgstr "US Legal (Extra)" msgid "media.na_legal_8.5x14in" msgstr "US Legal" msgid "media.na_letter-extra_9.5x12in" msgstr "US Letter (Extra)" msgid "media.na_letter-plus_8.5x12.69in" msgstr "US Letter (Plus)" msgid "media.na_letter_8.5x11in" msgstr "US Letter" msgid "media.na_monarch_3.875x7.5in" msgstr "Monarch Envelope" msgid "media.na_number-10_4.125x9.5in" msgstr "#10 Envelope" msgid "media.na_number-11_4.5x10.375in" msgstr "#11 Envelope" msgid "media.na_number-12_4.75x11in" msgstr "#12 Envelope" msgid "media.na_number-14_5x11.5in" msgstr "#14 Envelope" msgid "media.na_number-9_3.875x8.875in" msgstr "#9 Envelope" msgid "media.na_oficio_8.5x13.4in" msgstr "8.5 x 13.4\"" msgid "media.na_personal_3.625x6.5in" msgstr "Personal Envelope" msgid "media.na_quarto_8.5x10.83in" msgstr "Quarto" msgid "media.na_super-a_8.94x14in" msgstr "8.94 x 14\"" msgid "media.na_super-b_13x19in" msgstr "13 x 19\"" msgid "media.na_wide-format_30x42in" msgstr "30 x 42\"" msgid "media.oe_12x16_12x16in" msgstr "12 x 16\"" msgid "media.oe_14x17_14x17in" msgstr "14 x 17\"" msgid "media.oe_18x22_18x22in" msgstr "18 x 22\"" msgid "media.oe_a2plus_17x24in" msgstr "17 x 24\"" msgid "media.oe_photo-10r_10x12in" msgstr "10 x 12\"" msgid "media.oe_photo-20r_20x24in" msgstr "20 x 24\"" msgid "media.oe_photo-l_3.5x5in" msgstr "3.5 x 5\"" msgid "media.oe_photo-s10r_10x15in" msgstr "10 x 15\"" msgid "media.om_16k_184x260mm" msgstr "184 x 260mm" msgid "media.om_16k_195x270mm" msgstr "195 x 270mm" msgid "media.om_dai-pa-kai_275x395mm" msgstr "275 x 395mm" msgid "media.om_folio-sp_215x315mm" msgstr "Folio" msgid "media.om_folio_210x330mm" msgstr "Folio (Special)" msgid "media.om_invite_220x220mm" msgstr "Invitation Envelope" msgid "media.om_italian_110x230mm" msgstr "Italian Envelope" msgid "media.om_juuro-ku-kai_198x275mm" msgstr "198 x 275mm" msgid "media.om_large-photo_200x300" msgstr "200 x 300mm" msgid "media.om_medium-photo_130x180mm" msgstr "130 x 180mm" msgid "media.om_pa-kai_267x389mm" msgstr "267 x 389mm" msgid "media.om_postfix_114x229mm" msgstr "Postfix Envelope" msgid "media.om_small-photo_100x150mm" msgstr "100 x 150mm" msgid "media.om_wide-photo_100x200mm" msgstr "100 x 200mm" msgid "media.prc_10_324x458mm" msgstr "Chinese #10 Envelope" msgid "media.prc_16k_146x215mm" msgstr "Chinese 16k" msgid "media.prc_1_102x165mm" msgstr "Chinese #1 Envelope" msgid "media.prc_2_102x176mm" msgstr "Chinese #2 Envelope" msgid "media.prc_32k_97x151mm" msgstr "Chinese 32k" msgid "media.prc_3_125x176mm" msgstr "Chinese #3 Envelope" msgid "media.prc_4_110x208mm" msgstr "Chinese #4 Envelope" msgid "media.prc_5_110x220mm" msgstr "Chinese #5 Envelope" msgid "media.prc_6_120x320mm" msgstr "Chinese #6 Envelope" msgid "media.prc_7_160x230mm" msgstr "Chinese #7 Envelope" msgid "media.prc_8_120x309mm" msgstr "Chinese #8 Envelope" msgid "media.roc_16k_7.75x10.75in" msgstr "ROC 16k" msgid "media.roc_8k_10.75x15.5in" msgstr "ROC 8k" #, c-format msgid "members of class %s:" msgstr "" msgid "multiple-document-handling" msgstr "Multiple Document Handling" msgid "multiple-document-handling.separate-documents-collated-copies" msgstr "Separate Documents Collated Copies" msgid "multiple-document-handling.separate-documents-uncollated-copies" msgstr "Separate Documents Uncollated Copies" msgid "multiple-document-handling.single-document" msgstr "Single Document" msgid "multiple-document-handling.single-document-new-sheet" msgstr "Single Document New Sheet" msgid "multiple-object-handling" msgstr "Multiple Object Handling" msgid "multiple-object-handling.auto" msgstr "Automatic" msgid "multiple-object-handling.best-fit" msgstr "Best Fit" msgid "multiple-object-handling.best-quality" msgstr "Best Quality" msgid "multiple-object-handling.best-speed" msgstr "Best Speed" msgid "multiple-object-handling.one-at-a-time" msgstr "One At A Time" msgid "multiple-operation-time-out-action" msgstr "Multiple Operation Time Out Action" msgid "multiple-operation-time-out-action.abort-job" msgstr "Abort Job" msgid "multiple-operation-time-out-action.hold-job" msgstr "Hold Job" msgid "multiple-operation-time-out-action.process-job" msgstr "Process Job" msgid "no entries" msgstr "" msgid "no system default destination" msgstr "" msgid "noise-removal" msgstr "Noise Removal" msgid "notify-attributes" msgstr "Notify Attributes" msgid "notify-charset" msgstr "Notify Charset" msgid "notify-events" msgstr "Notify Events" msgid "notify-events not specified." msgstr "" msgid "notify-events.document-completed" msgstr "Document Completed" msgid "notify-events.document-config-changed" msgstr "Document Config Changed" msgid "notify-events.document-created" msgstr "Document Created" msgid "notify-events.document-fetchable" msgstr "Document Fetchable" msgid "notify-events.document-state-changed" msgstr "Document State Changed" msgid "notify-events.document-stopped" msgstr "Document Stopped" msgid "notify-events.job-completed" msgstr "Job Completed" msgid "notify-events.job-config-changed" msgstr "Job Config Changed" msgid "notify-events.job-created" msgstr "Job Created" msgid "notify-events.job-fetchable" msgstr "Job Fetchable" msgid "notify-events.job-progress" msgstr "Job Progress" msgid "notify-events.job-state-changed" msgstr "Job State Changed" msgid "notify-events.job-stopped" msgstr "Job Stopped" msgid "notify-events.none" msgstr "None" msgid "notify-events.printer-config-changed" msgstr "Printer Config Changed" msgid "notify-events.printer-finishings-changed" msgstr "Printer Finishings Changed" msgid "notify-events.printer-media-changed" msgstr "Printer Media Changed" msgid "notify-events.printer-queue-order-changed" msgstr "Printer Queue Order Changed" msgid "notify-events.printer-restarted" msgstr "Printer Restarted" msgid "notify-events.printer-shutdown" msgstr "Printer Shutdown" msgid "notify-events.printer-state-changed" msgstr "Printer State Changed" msgid "notify-events.printer-stopped" msgstr "Printer Stopped" msgid "notify-get-interval" msgstr "Notify Get Interval" msgid "notify-lease-duration" msgstr "Notify Lease Duration" msgid "notify-natural-language" msgstr "Notify Natural Language" msgid "notify-pull-method" msgstr "Notify Pull Method" msgid "notify-recipient-uri" msgstr "Notify Recipient" #, c-format msgid "notify-recipient-uri URI \"%s\" is already used." msgstr "" #, c-format msgid "notify-recipient-uri URI \"%s\" uses unknown scheme." msgstr "" msgid "notify-sequence-numbers" msgstr "Notify Sequence Numbers" msgid "notify-subscription-ids" msgstr "Notify Subscription Ids" msgid "notify-time-interval" msgstr "Notify Time Interval" msgid "notify-user-data" msgstr "Notify User Data" msgid "notify-wait" msgstr "Notify Wait" msgid "number-of-retries" msgstr "Number Of Retries" msgid "number-up" msgstr "Number-Up" msgid "object-offset" msgstr "Object Offset" msgid "object-size" msgstr "Object Size" msgid "organization-name" msgstr "Organization Name" msgid "orientation-requested" msgstr "Orientation" msgid "orientation-requested.3" msgstr "Portrait" msgid "orientation-requested.4" msgstr "Landscape" msgid "orientation-requested.5" msgstr "Reverse Landscape" msgid "orientation-requested.6" msgstr "Reverse Portrait" msgid "orientation-requested.7" msgstr "None" msgid "output-attributes" msgstr "Output Attributes" msgid "output-bin" msgstr "Output Bin" msgid "output-bin.auto" msgstr "Automatic" msgid "output-bin.bottom" msgstr "Bottom" msgid "output-bin.center" msgstr "Center" msgid "output-bin.face-down" msgstr "Face Down" msgid "output-bin.face-up" msgstr "Face Up" msgid "output-bin.large-capacity" msgstr "Large Capacity" msgid "output-bin.left" msgstr "Left" msgid "output-bin.mailbox-1" msgstr "Mailbox 1" msgid "output-bin.mailbox-10" msgstr "Mailbox 10" msgid "output-bin.mailbox-2" msgstr "Mailbox 2" msgid "output-bin.mailbox-3" msgstr "Mailbox 3" msgid "output-bin.mailbox-4" msgstr "Mailbox 4" msgid "output-bin.mailbox-5" msgstr "Mailbox 5" msgid "output-bin.mailbox-6" msgstr "Mailbox 6" msgid "output-bin.mailbox-7" msgstr "Mailbox 7" msgid "output-bin.mailbox-8" msgstr "Mailbox 8" msgid "output-bin.mailbox-9" msgstr "Mailbox 9" msgid "output-bin.middle" msgstr "Middle" msgid "output-bin.my-mailbox" msgstr "My Mailbox" msgid "output-bin.rear" msgstr "Rear" msgid "output-bin.right" msgstr "Right" msgid "output-bin.side" msgstr "Side" msgid "output-bin.stacker-1" msgstr "Stacker 1" msgid "output-bin.stacker-10" msgstr "Stacker 10" msgid "output-bin.stacker-2" msgstr "Stacker 2" msgid "output-bin.stacker-3" msgstr "Stacker 3" msgid "output-bin.stacker-4" msgstr "Stacker 4" msgid "output-bin.stacker-5" msgstr "Stacker 5" msgid "output-bin.stacker-6" msgstr "Stacker 6" msgid "output-bin.stacker-7" msgstr "Stacker 7" msgid "output-bin.stacker-8" msgstr "Stacker 8" msgid "output-bin.stacker-9" msgstr "Stacker 9" msgid "output-bin.top" msgstr "Top" msgid "output-bin.tray-1" msgstr "Tray 1" msgid "output-bin.tray-10" msgstr "Tray 10" msgid "output-bin.tray-2" msgstr "Tray 2" msgid "output-bin.tray-3" msgstr "Tray 3" msgid "output-bin.tray-4" msgstr "Tray 4" msgid "output-bin.tray-5" msgstr "Tray 5" msgid "output-bin.tray-6" msgstr "Tray 6" msgid "output-bin.tray-7" msgstr "Tray 7" msgid "output-bin.tray-8" msgstr "Tray 8" msgid "output-bin.tray-9" msgstr "Tray 9" msgid "output-compression-quality-factor" msgstr "Scanned Image Quality" msgid "page-delivery" msgstr "Page Delivery" msgid "page-delivery.reverse-order-face-down" msgstr "Reverse Order Face Down" msgid "page-delivery.reverse-order-face-up" msgstr "Reverse Order Face Up" msgid "page-delivery.same-order-face-down" msgstr "Same Order Face Down" msgid "page-delivery.same-order-face-up" msgstr "Same Order Face Up" msgid "page-delivery.system-specified" msgstr "System Specified" msgid "page-order-received" msgstr "Page Order Received" msgid "page-order-received.1-to-n-order" msgstr "1 To N Order" msgid "page-order-received.n-to-1-order" msgstr "N To 1 Order" msgid "page-ranges" msgstr "Page Ranges" msgid "pages" msgstr "Pages" msgid "pages-per-subset" msgstr "Pages Per Subset" msgid "pending" msgstr "en attente" msgid "platform-shape" msgstr "Platform Shape" msgid "platform-shape.ellipse" msgstr "Round" msgid "platform-shape.rectangle" msgstr "Rectangle" msgid "platform-temperature" msgstr "Platform Temperature" msgid "post-dial-string" msgstr "Post-dial String" #, c-format msgid "ppdc: Adding include directory \"%s\"." msgstr "" #, c-format msgid "ppdc: Adding/updating UI text from %s." msgstr "" #, c-format msgid "ppdc: Bad boolean value (%s) on line %d of %s." msgstr "" #, c-format msgid "ppdc: Bad font attribute: %s" msgstr "" #, c-format msgid "ppdc: Bad resolution name \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Bad status keyword %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Bad variable substitution ($%c) on line %d of %s." msgstr "" #, c-format msgid "ppdc: Choice found on line %d of %s with no Option." msgstr "" #, c-format msgid "ppdc: Duplicate #po for locale %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected a filter definition on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected a program name on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected boolean value on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected charset after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected choice code on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected choice name/text on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected color order for ColorModel on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected colorspace for ColorModel on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected compression for ColorModel on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Expected driver type keyword following DriverType on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected duplex type after Duplex on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected encoding after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected filename after #po %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected group name/text on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected include filename on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected integer on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected locale after #po on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after FileName on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after Manufacturer on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after MediaSize on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after ModelName on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name after PCFileName on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name/text after %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name/text after Installable on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name/text after Resolution on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected option name/text on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected option section on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected option type on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected override field after Resolution on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected quoted string on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected real number on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d " "of %s." msgstr "" #, c-format msgid "ppdc: Expected selector after %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected status after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected string after Copyright on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected string after Version on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected two option names on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected value after %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Expected version after Font on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid #include/#po filename \"%s\"." msgstr "" #, c-format msgid "ppdc: Invalid cost for filter on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid empty MIME type for filter on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid empty program name for filter on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid option section \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Invalid option type \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Loading driver information file \"%s\"." msgstr "" #, c-format msgid "ppdc: Loading messages for locale \"%s\"." msgstr "" #, c-format msgid "ppdc: Loading messages from \"%s\"." msgstr "" #, c-format msgid "ppdc: Missing #endif at end of \"%s\"." msgstr "" #, c-format msgid "ppdc: Missing #if on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Need a msgid line before any translation strings on line %d of %s." msgstr "" #, c-format msgid "ppdc: No message catalog provided for locale %s." msgstr "" #, c-format msgid "ppdc: Option %s defined in two different groups on line %d of %s." msgstr "" #, c-format msgid "ppdc: Option %s redefined with a different type on line %d of %s." msgstr "" #, c-format msgid "ppdc: Option constraint must *name on line %d of %s." msgstr "" #, c-format msgid "ppdc: Too many nested #if's on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unable to create PPD file \"%s\" - %s." msgstr "" #, c-format msgid "ppdc: Unable to create output directory %s: %s" msgstr "" #, c-format msgid "ppdc: Unable to create output pipes: %s" msgstr "" #, c-format msgid "ppdc: Unable to execute cupstestppd: %s" msgstr "" #, c-format msgid "ppdc: Unable to find #po file %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unable to find include file \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unable to find localization for \"%s\" - %s" msgstr "" #, c-format msgid "ppdc: Unable to load localization file \"%s\" - %s" msgstr "" #, c-format msgid "ppdc: Unable to open %s: %s" msgstr "" #, c-format msgid "ppdc: Undefined variable (%s) on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unexpected text on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unknown driver type %s on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unknown media size \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unknown message catalog format for \"%s\"." msgstr "" #, c-format msgid "ppdc: Unknown token \"%s\" seen on line %d of %s." msgstr "" #, c-format msgid "" "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." msgstr "" #, c-format msgid "ppdc: Unterminated string starting with %c on line %d of %s." msgstr "" #, c-format msgid "ppdc: Warning - overlapping filename \"%s\"." msgstr "" #, c-format msgid "ppdc: Writing %s." msgstr "" #, c-format msgid "ppdc: Writing PPD files to directory \"%s\"." msgstr "" #, c-format msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s." msgstr "" #, c-format msgid "ppdmerge: Ignoring PPD file %s." msgstr "" #, c-format msgid "ppdmerge: Unable to backup %s to %s - %s" msgstr "" msgid "pre-dial-string" msgstr "Pre-dial String" msgid "presentation-direction-number-up" msgstr "Number-Up Layout" msgid "presentation-direction-number-up.tobottom-toleft" msgstr "Top-Bottom, Right-Left" msgid "presentation-direction-number-up.tobottom-toright" msgstr "Top-Bottom, Left-Right" msgid "presentation-direction-number-up.toleft-tobottom" msgstr "Right-Left, Top-Bottom" msgid "presentation-direction-number-up.toleft-totop" msgstr "Right-Left, Bottom-Top" msgid "presentation-direction-number-up.toright-tobottom" msgstr "Left-Right, Top-Bottom" msgid "presentation-direction-number-up.toright-totop" msgstr "Left-Right, Bottom-Top" msgid "presentation-direction-number-up.totop-toleft" msgstr "Bottom-Top, Right-Left" msgid "presentation-direction-number-up.totop-toright" msgstr "Bottom-Top, Left-Right" msgid "print-accuracy" msgstr "Print Accuracy" msgid "print-base" msgstr "Print Base" msgid "print-base.brim" msgstr "Brim" msgid "print-base.none" msgstr "None" msgid "print-base.raft" msgstr "Raft" msgid "print-base.skirt" msgstr "Skirt" msgid "print-base.standard" msgstr "Standard" msgid "print-color-mode" msgstr "Print Color Mode" msgid "print-color-mode.auto" msgstr "Automatic" msgid "print-color-mode.bi-level" msgstr "Bi-Level" msgid "print-color-mode.color" msgstr "Color" msgid "print-color-mode.highlight" msgstr "Highlight" msgid "print-color-mode.monochrome" msgstr "Monochrome" msgid "print-color-mode.process-bi-level" msgstr "Process Bi-Level" msgid "print-color-mode.process-monochrome" msgstr "Process Monochrome" msgid "print-content-optimize" msgstr "Print Optimization" msgid "print-content-optimize.auto" msgstr "Automatic" msgid "print-content-optimize.graphic" msgstr "Graphics" msgid "print-content-optimize.photo" msgstr "Photo" msgid "print-content-optimize.text" msgstr "Text" msgid "print-content-optimize.text-and-graphic" msgstr "Text And Graphics" msgid "print-objects" msgstr "Print Objects" msgid "print-quality" msgstr "Print Quality" msgid "print-quality.3" msgstr "Draft" msgid "print-quality.4" msgstr "Normal" msgid "print-quality.5" msgstr "High" msgid "print-rendering-intent" msgstr "Print Rendering Intent" msgid "print-rendering-intent.absolute" msgstr "Absolute" msgid "print-rendering-intent.auto" msgstr "Automatic" msgid "print-rendering-intent.perceptual" msgstr "Perceptual" msgid "print-rendering-intent.relative" msgstr "Relative" msgid "print-rendering-intent.relative-bpc" msgstr "Relative w/Black Point Compensation" msgid "print-rendering-intent.saturation" msgstr "Saturation" msgid "print-scaling" msgstr "Print Scaling" msgid "print-scaling.auto" msgstr "Automatic" msgid "print-scaling.auto-fit" msgstr "Auto Fit" msgid "print-scaling.fill" msgstr "Fill" msgid "print-scaling.fit" msgstr "Fit" msgid "print-scaling.none" msgstr "None" msgid "print-supports" msgstr "Print Supports" msgid "print-supports.material" msgstr "Material" msgid "print-supports.none" msgstr "None" msgid "print-supports.standard" msgstr "Standard" #, c-format msgid "printer %s disabled since %s -" msgstr "" #, c-format msgid "printer %s is idle. enabled since %s" msgstr "" #, c-format msgid "printer %s now printing %s-%d. enabled since %s" msgstr "" #, c-format msgid "printer %s/%s disabled since %s -" msgstr "" #, c-format msgid "printer %s/%s is idle. enabled since %s" msgstr "" #, c-format msgid "printer %s/%s now printing %s-%d. enabled since %s" msgstr "" msgid "printer-message-from-operator" msgstr "Printer Message From Operator" msgid "printer-resolution" msgstr "Printer Resolution" msgid "printer-state" msgstr "Printer State" msgid "printer-state-reasons" msgstr "Detailed Printer State" msgid "printer-state-reasons.alert-removal-of-binary-change-entry" msgstr "Alert Removal Of Binary Change Entry" msgid "printer-state-reasons.bander-added" msgstr "Bander Added" msgid "printer-state-reasons.bander-almost-empty" msgstr "Bander Almost Empty" msgid "printer-state-reasons.bander-almost-full" msgstr "Bander Almost Full" msgid "printer-state-reasons.bander-at-limit" msgstr "Bander At Limit" msgid "printer-state-reasons.bander-closed" msgstr "Bander Closed" msgid "printer-state-reasons.bander-configuration-change" msgstr "Bander Configuration Change" msgid "printer-state-reasons.bander-cover-closed" msgstr "Bander Cover Closed" msgid "printer-state-reasons.bander-cover-open" msgstr "Bander Cover Open" msgid "printer-state-reasons.bander-empty" msgstr "Bander Empty" msgid "printer-state-reasons.bander-full" msgstr "Bander Full" msgid "printer-state-reasons.bander-interlock-closed" msgstr "Bander Interlock Closed" msgid "printer-state-reasons.bander-interlock-open" msgstr "Bander Interlock Open" msgid "printer-state-reasons.bander-jam" msgstr "Bander Jam" msgid "printer-state-reasons.bander-life-almost-over" msgstr "Bander Life Almost Over" msgid "printer-state-reasons.bander-life-over" msgstr "Bander Life Over" msgid "printer-state-reasons.bander-memory-exhausted" msgstr "Bander Memory Exhausted" msgid "printer-state-reasons.bander-missing" msgstr "Bander Missing" msgid "printer-state-reasons.bander-motor-failure" msgstr "Bander Motor Failure" msgid "printer-state-reasons.bander-near-limit" msgstr "Bander Near Limit" msgid "printer-state-reasons.bander-offline" msgstr "Bander Offline" msgid "printer-state-reasons.bander-opened" msgstr "Bander Opened" msgid "printer-state-reasons.bander-over-temperature" msgstr "Bander Over Temperature" msgid "printer-state-reasons.bander-power-saver" msgstr "Bander Power Saver" msgid "printer-state-reasons.bander-recoverable-failure" msgstr "Bander Recoverable Failure" msgid "printer-state-reasons.bander-recoverable-storage" msgstr "Bander Recoverable Storage" msgid "printer-state-reasons.bander-removed" msgstr "Bander Removed" msgid "printer-state-reasons.bander-resource-added" msgstr "Bander Resource Added" msgid "printer-state-reasons.bander-resource-removed" msgstr "Bander Resource Removed" msgid "printer-state-reasons.bander-thermistor-failure" msgstr "Bander Thermistor Failure" msgid "printer-state-reasons.bander-timing-failure" msgstr "Bander Timing Failure" msgid "printer-state-reasons.bander-turned-off" msgstr "Bander Turned Off" msgid "printer-state-reasons.bander-turned-on" msgstr "Bander Turned On" msgid "printer-state-reasons.bander-under-temperature" msgstr "Bander Under Temperature" msgid "printer-state-reasons.bander-unrecoverable-failure" msgstr "Bander Unrecoverable Failure" msgid "printer-state-reasons.bander-unrecoverable-storage-error" msgstr "Bander Unrecoverable Storage Error" msgid "printer-state-reasons.bander-warming-up" msgstr "Bander Warming Up" msgid "printer-state-reasons.binder-added" msgstr "Binder Added" msgid "printer-state-reasons.binder-almost-empty" msgstr "Binder Almost Empty" msgid "printer-state-reasons.binder-almost-full" msgstr "Binder Almost Full" msgid "printer-state-reasons.binder-at-limit" msgstr "Binder At Limit" msgid "printer-state-reasons.binder-closed" msgstr "Binder Closed" msgid "printer-state-reasons.binder-configuration-change" msgstr "Binder Configuration Change" msgid "printer-state-reasons.binder-cover-closed" msgstr "Binder Cover Closed" msgid "printer-state-reasons.binder-cover-open" msgstr "Binder Cover Open" msgid "printer-state-reasons.binder-empty" msgstr "Binder Empty" msgid "printer-state-reasons.binder-full" msgstr "Binder Full" msgid "printer-state-reasons.binder-interlock-closed" msgstr "Binder Interlock Closed" msgid "printer-state-reasons.binder-interlock-open" msgstr "Binder Interlock Open" msgid "printer-state-reasons.binder-jam" msgstr "Binder Jam" msgid "printer-state-reasons.binder-life-almost-over" msgstr "Binder Life Almost Over" msgid "printer-state-reasons.binder-life-over" msgstr "Binder Life Over" msgid "printer-state-reasons.binder-memory-exhausted" msgstr "Binder Memory Exhausted" msgid "printer-state-reasons.binder-missing" msgstr "Binder Missing" msgid "printer-state-reasons.binder-motor-failure" msgstr "Binder Motor Failure" msgid "printer-state-reasons.binder-near-limit" msgstr "Binder Near Limit" msgid "printer-state-reasons.binder-offline" msgstr "Binder Offline" msgid "printer-state-reasons.binder-opened" msgstr "Binder Opened" msgid "printer-state-reasons.binder-over-temperature" msgstr "Binder Over Temperature" msgid "printer-state-reasons.binder-power-saver" msgstr "Binder Power Saver" msgid "printer-state-reasons.binder-recoverable-failure" msgstr "Binder Recoverable Failure" msgid "printer-state-reasons.binder-recoverable-storage" msgstr "Binder Recoverable Storage" msgid "printer-state-reasons.binder-removed" msgstr "Binder Removed" msgid "printer-state-reasons.binder-resource-added" msgstr "Binder Resource Added" msgid "printer-state-reasons.binder-resource-removed" msgstr "Binder Resource Removed" msgid "printer-state-reasons.binder-thermistor-failure" msgstr "Binder Thermistor Failure" msgid "printer-state-reasons.binder-timing-failure" msgstr "Binder Timing Failure" msgid "printer-state-reasons.binder-turned-off" msgstr "Binder Turned Off" msgid "printer-state-reasons.binder-turned-on" msgstr "Binder Turned On" msgid "printer-state-reasons.binder-under-temperature" msgstr "Binder Under Temperature" msgid "printer-state-reasons.binder-unrecoverable-failure" msgstr "Binder Unrecoverable Failure" msgid "printer-state-reasons.binder-unrecoverable-storage-error" msgstr "Binder Unrecoverable Storage Error" msgid "printer-state-reasons.binder-warming-up" msgstr "Binder Warming Up" msgid "printer-state-reasons.camera-failure" msgstr "Camera Failure" msgid "printer-state-reasons.chamber-cooling" msgstr "Chamber Cooling" msgid "printer-state-reasons.chamber-heating" msgstr "Chamber Heating" msgid "printer-state-reasons.chamber-temperature-high" msgstr "Chamber Temperature High" msgid "printer-state-reasons.chamber-temperature-low" msgstr "Chamber Temperature Low" msgid "printer-state-reasons.cleaner-life-almost-over" msgstr "Cleaner Life Almost Over" msgid "printer-state-reasons.cleaner-life-over" msgstr "Cleaner Life Over" msgid "printer-state-reasons.configuration-change" msgstr "Configuration Change" msgid "printer-state-reasons.connecting-to-device" msgstr "Connecting To Device" msgid "printer-state-reasons.cover-open" msgstr "Cover Open" msgid "printer-state-reasons.deactivated" msgstr "Deactivated" msgid "printer-state-reasons.developer-empty" msgstr "Developer Empty" msgid "printer-state-reasons.developer-low" msgstr "Developer Low" msgid "printer-state-reasons.die-cutter-added" msgstr "Die Cutter Added" msgid "printer-state-reasons.die-cutter-almost-empty" msgstr "Die Cutter Almost Empty" msgid "printer-state-reasons.die-cutter-almost-full" msgstr "Die Cutter Almost Full" msgid "printer-state-reasons.die-cutter-at-limit" msgstr "Die Cutter At Limit" msgid "printer-state-reasons.die-cutter-closed" msgstr "Die Cutter Closed" msgid "printer-state-reasons.die-cutter-configuration-change" msgstr "Die Cutter Configuration Change" msgid "printer-state-reasons.die-cutter-cover-closed" msgstr "Die Cutter Cover Closed" msgid "printer-state-reasons.die-cutter-cover-open" msgstr "Die Cutter Cover Open" msgid "printer-state-reasons.die-cutter-empty" msgstr "Die Cutter Empty" msgid "printer-state-reasons.die-cutter-full" msgstr "Die Cutter Full" msgid "printer-state-reasons.die-cutter-interlock-closed" msgstr "Die Cutter Interlock Closed" msgid "printer-state-reasons.die-cutter-interlock-open" msgstr "Die Cutter Interlock Open" msgid "printer-state-reasons.die-cutter-jam" msgstr "Die Cutter Jam" msgid "printer-state-reasons.die-cutter-life-almost-over" msgstr "Die Cutter Life Almost Over" msgid "printer-state-reasons.die-cutter-life-over" msgstr "Die Cutter Life Over" msgid "printer-state-reasons.die-cutter-memory-exhausted" msgstr "Die Cutter Memory Exhausted" msgid "printer-state-reasons.die-cutter-missing" msgstr "Die Cutter Missing" msgid "printer-state-reasons.die-cutter-motor-failure" msgstr "Die Cutter Motor Failure" msgid "printer-state-reasons.die-cutter-near-limit" msgstr "Die Cutter Near Limit" msgid "printer-state-reasons.die-cutter-offline" msgstr "Die Cutter Offline" msgid "printer-state-reasons.die-cutter-opened" msgstr "Die Cutter Opened" msgid "printer-state-reasons.die-cutter-over-temperature" msgstr "Die Cutter Over Temperature" msgid "printer-state-reasons.die-cutter-power-saver" msgstr "Die Cutter Power Saver" msgid "printer-state-reasons.die-cutter-recoverable-failure" msgstr "Die Cutter Recoverable Failure" msgid "printer-state-reasons.die-cutter-recoverable-storage" msgstr "Die Cutter Recoverable Storage" msgid "printer-state-reasons.die-cutter-removed" msgstr "Die Cutter Removed" msgid "printer-state-reasons.die-cutter-resource-added" msgstr "Die Cutter Resource Added" msgid "printer-state-reasons.die-cutter-resource-removed" msgstr "Die Cutter Resource Removed" msgid "printer-state-reasons.die-cutter-thermistor-failure" msgstr "Die Cutter Thermistor Failure" msgid "printer-state-reasons.die-cutter-timing-failure" msgstr "Die Cutter Timing Failure" msgid "printer-state-reasons.die-cutter-turned-off" msgstr "Die Cutter Turned Off" msgid "printer-state-reasons.die-cutter-turned-on" msgstr "Die Cutter Turned On" msgid "printer-state-reasons.die-cutter-under-temperature" msgstr "Die Cutter Under Temperature" msgid "printer-state-reasons.die-cutter-unrecoverable-failure" msgstr "Die Cutter Unrecoverable Failure" msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error" msgstr "Die Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.die-cutter-warming-up" msgstr "Die Cutter Warming Up" msgid "printer-state-reasons.door-open" msgstr "Door Open" msgid "printer-state-reasons.extruder-cooling" msgstr "Extruder Cooling" msgid "printer-state-reasons.extruder-failure" msgstr "Extruder Failure" msgid "printer-state-reasons.extruder-heating" msgstr "Extruder Heating" msgid "printer-state-reasons.extruder-jam" msgstr "Extruder Jam" msgid "printer-state-reasons.extruder-temperature-high" msgstr "Extruder Temperature High" msgid "printer-state-reasons.extruder-temperature-low" msgstr "Extruder Temperature Low" msgid "printer-state-reasons.fan-failure" msgstr "Fan Failure" msgid "printer-state-reasons.folder-added" msgstr "Folder Added" msgid "printer-state-reasons.folder-almost-empty" msgstr "Folder Almost Empty" msgid "printer-state-reasons.folder-almost-full" msgstr "Folder Almost Full" msgid "printer-state-reasons.folder-at-limit" msgstr "Folder At Limit" msgid "printer-state-reasons.folder-closed" msgstr "Folder Closed" msgid "printer-state-reasons.folder-configuration-change" msgstr "Folder Configuration Change" msgid "printer-state-reasons.folder-cover-closed" msgstr "Folder Cover Closed" msgid "printer-state-reasons.folder-cover-open" msgstr "Folder Cover Open" msgid "printer-state-reasons.folder-empty" msgstr "Folder Empty" msgid "printer-state-reasons.folder-full" msgstr "Folder Full" msgid "printer-state-reasons.folder-interlock-closed" msgstr "Folder Interlock Closed" msgid "printer-state-reasons.folder-interlock-open" msgstr "Folder Interlock Open" msgid "printer-state-reasons.folder-jam" msgstr "Folder Jam" msgid "printer-state-reasons.folder-life-almost-over" msgstr "Folder Life Almost Over" msgid "printer-state-reasons.folder-life-over" msgstr "Folder Life Over" msgid "printer-state-reasons.folder-memory-exhausted" msgstr "Folder Memory Exhausted" msgid "printer-state-reasons.folder-missing" msgstr "Folder Missing" msgid "printer-state-reasons.folder-motor-failure" msgstr "Folder Motor Failure" msgid "printer-state-reasons.folder-near-limit" msgstr "Folder Near Limit" msgid "printer-state-reasons.folder-offline" msgstr "Folder Offline" msgid "printer-state-reasons.folder-opened" msgstr "Folder Opened" msgid "printer-state-reasons.folder-over-temperature" msgstr "Folder Over Temperature" msgid "printer-state-reasons.folder-power-saver" msgstr "Folder Power Saver" msgid "printer-state-reasons.folder-recoverable-failure" msgstr "Folder Recoverable Failure" msgid "printer-state-reasons.folder-recoverable-storage" msgstr "Folder Recoverable Storage" msgid "printer-state-reasons.folder-removed" msgstr "Folder Removed" msgid "printer-state-reasons.folder-resource-added" msgstr "Folder Resource Added" msgid "printer-state-reasons.folder-resource-removed" msgstr "Folder Resource Removed" msgid "printer-state-reasons.folder-thermistor-failure" msgstr "Folder Thermistor Failure" msgid "printer-state-reasons.folder-timing-failure" msgstr "Folder Timing Failure" msgid "printer-state-reasons.folder-turned-off" msgstr "Folder Turned Off" msgid "printer-state-reasons.folder-turned-on" msgstr "Folder Turned On" msgid "printer-state-reasons.folder-under-temperature" msgstr "Folder Under Temperature" msgid "printer-state-reasons.folder-unrecoverable-failure" msgstr "Folder Unrecoverable Failure" msgid "printer-state-reasons.folder-unrecoverable-storage-error" msgstr "Folder Unrecoverable Storage Error" msgid "printer-state-reasons.folder-warming-up" msgstr "Folder Warming Up" msgid "printer-state-reasons.fuser-over-temp" msgstr "Fuser Over Temp" msgid "printer-state-reasons.fuser-under-temp" msgstr "Fuser Under Temp" msgid "printer-state-reasons.hold-new-jobs" msgstr "Hold New Jobs" msgid "printer-state-reasons.identify-printer-requested" msgstr "Identify Printer" msgid "printer-state-reasons.imprinter-added" msgstr "Imprinter Added" msgid "printer-state-reasons.imprinter-almost-empty" msgstr "Imprinter Almost Empty" msgid "printer-state-reasons.imprinter-almost-full" msgstr "Imprinter Almost Full" msgid "printer-state-reasons.imprinter-at-limit" msgstr "Imprinter At Limit" msgid "printer-state-reasons.imprinter-closed" msgstr "Imprinter Closed" msgid "printer-state-reasons.imprinter-configuration-change" msgstr "Imprinter Configuration Change" msgid "printer-state-reasons.imprinter-cover-closed" msgstr "Imprinter Cover Closed" msgid "printer-state-reasons.imprinter-cover-open" msgstr "Imprinter Cover Open" msgid "printer-state-reasons.imprinter-empty" msgstr "Imprinter Empty" msgid "printer-state-reasons.imprinter-full" msgstr "Imprinter Full" msgid "printer-state-reasons.imprinter-interlock-closed" msgstr "Imprinter Interlock Closed" msgid "printer-state-reasons.imprinter-interlock-open" msgstr "Imprinter Interlock Open" msgid "printer-state-reasons.imprinter-jam" msgstr "Imprinter Jam" msgid "printer-state-reasons.imprinter-life-almost-over" msgstr "Imprinter Life Almost Over" msgid "printer-state-reasons.imprinter-life-over" msgstr "Imprinter Life Over" msgid "printer-state-reasons.imprinter-memory-exhausted" msgstr "Imprinter Memory Exhausted" msgid "printer-state-reasons.imprinter-missing" msgstr "Imprinter Missing" msgid "printer-state-reasons.imprinter-motor-failure" msgstr "Imprinter Motor Failure" msgid "printer-state-reasons.imprinter-near-limit" msgstr "Imprinter Near Limit" msgid "printer-state-reasons.imprinter-offline" msgstr "Imprinter Offline" msgid "printer-state-reasons.imprinter-opened" msgstr "Imprinter Opened" msgid "printer-state-reasons.imprinter-over-temperature" msgstr "Imprinter Over Temperature" msgid "printer-state-reasons.imprinter-power-saver" msgstr "Imprinter Power Saver" msgid "printer-state-reasons.imprinter-recoverable-failure" msgstr "Imprinter Recoverable Failure" msgid "printer-state-reasons.imprinter-recoverable-storage" msgstr "Imprinter Recoverable Storage" msgid "printer-state-reasons.imprinter-removed" msgstr "Imprinter Removed" msgid "printer-state-reasons.imprinter-resource-added" msgstr "Imprinter Resource Added" msgid "printer-state-reasons.imprinter-resource-removed" msgstr "Imprinter Resource Removed" msgid "printer-state-reasons.imprinter-thermistor-failure" msgstr "Imprinter Thermistor Failure" msgid "printer-state-reasons.imprinter-timing-failure" msgstr "Imprinter Timing Failure" msgid "printer-state-reasons.imprinter-turned-off" msgstr "Imprinter Turned Off" msgid "printer-state-reasons.imprinter-turned-on" msgstr "Imprinter Turned On" msgid "printer-state-reasons.imprinter-under-temperature" msgstr "Imprinter Under Temperature" msgid "printer-state-reasons.imprinter-unrecoverable-failure" msgstr "Imprinter Unrecoverable Failure" msgid "printer-state-reasons.imprinter-unrecoverable-storage-error" msgstr "Imprinter Unrecoverable Storage Error" msgid "printer-state-reasons.imprinter-warming-up" msgstr "Imprinter Warming Up" msgid "printer-state-reasons.input-cannot-feed-size-selected" msgstr "Input Cannot Feed Size Selected" msgid "printer-state-reasons.input-manual-input-request" msgstr "Input Manual Input Request" msgid "printer-state-reasons.input-media-color-change" msgstr "Input Media Color Change" msgid "printer-state-reasons.input-media-form-parts-change" msgstr "Input Media Form Parts Change" msgid "printer-state-reasons.input-media-size-change" msgstr "Input Media Size Change" msgid "printer-state-reasons.input-media-type-change" msgstr "Input Media Type Change" msgid "printer-state-reasons.input-media-weight-change" msgstr "Input Media Weight Change" msgid "printer-state-reasons.input-tray-elevation-failure" msgstr "Input Tray Elevation Failure" msgid "printer-state-reasons.input-tray-missing" msgstr "Input Tray Missing" msgid "printer-state-reasons.input-tray-position-failure" msgstr "Input Tray Position Failure" msgid "printer-state-reasons.inserter-added" msgstr "Inserter Added" msgid "printer-state-reasons.inserter-almost-empty" msgstr "Inserter Almost Empty" msgid "printer-state-reasons.inserter-almost-full" msgstr "Inserter Almost Full" msgid "printer-state-reasons.inserter-at-limit" msgstr "Inserter At Limit" msgid "printer-state-reasons.inserter-closed" msgstr "Inserter Closed" msgid "printer-state-reasons.inserter-configuration-change" msgstr "Inserter Configuration Change" msgid "printer-state-reasons.inserter-cover-closed" msgstr "Inserter Cover Closed" msgid "printer-state-reasons.inserter-cover-open" msgstr "Inserter Cover Open" msgid "printer-state-reasons.inserter-empty" msgstr "Inserter Empty" msgid "printer-state-reasons.inserter-full" msgstr "Inserter Full" msgid "printer-state-reasons.inserter-interlock-closed" msgstr "Inserter Interlock Closed" msgid "printer-state-reasons.inserter-interlock-open" msgstr "Inserter Interlock Open" msgid "printer-state-reasons.inserter-jam" msgstr "Inserter Jam" msgid "printer-state-reasons.inserter-life-almost-over" msgstr "Inserter Life Almost Over" msgid "printer-state-reasons.inserter-life-over" msgstr "Inserter Life Over" msgid "printer-state-reasons.inserter-memory-exhausted" msgstr "Inserter Memory Exhausted" msgid "printer-state-reasons.inserter-missing" msgstr "Inserter Missing" msgid "printer-state-reasons.inserter-motor-failure" msgstr "Inserter Motor Failure" msgid "printer-state-reasons.inserter-near-limit" msgstr "Inserter Near Limit" msgid "printer-state-reasons.inserter-offline" msgstr "Inserter Offline" msgid "printer-state-reasons.inserter-opened" msgstr "Inserter Opened" msgid "printer-state-reasons.inserter-over-temperature" msgstr "Inserter Over Temperature" msgid "printer-state-reasons.inserter-power-saver" msgstr "Inserter Power Saver" msgid "printer-state-reasons.inserter-recoverable-failure" msgstr "Inserter Recoverable Failure" msgid "printer-state-reasons.inserter-recoverable-storage" msgstr "Inserter Recoverable Storage" msgid "printer-state-reasons.inserter-removed" msgstr "Inserter Removed" msgid "printer-state-reasons.inserter-resource-added" msgstr "Inserter Resource Added" msgid "printer-state-reasons.inserter-resource-removed" msgstr "Inserter Resource Removed" msgid "printer-state-reasons.inserter-thermistor-failure" msgstr "Inserter Thermistor Failure" msgid "printer-state-reasons.inserter-timing-failure" msgstr "Inserter Timing Failure" msgid "printer-state-reasons.inserter-turned-off" msgstr "Inserter Turned Off" msgid "printer-state-reasons.inserter-turned-on" msgstr "Inserter Turned On" msgid "printer-state-reasons.inserter-under-temperature" msgstr "Inserter Under Temperature" msgid "printer-state-reasons.inserter-unrecoverable-failure" msgstr "Inserter Unrecoverable Failure" msgid "printer-state-reasons.inserter-unrecoverable-storage-error" msgstr "Inserter Unrecoverable Storage Error" msgid "printer-state-reasons.inserter-warming-up" msgstr "Inserter Warming Up" msgid "printer-state-reasons.interlock-closed" msgstr "Interlock Closed" msgid "printer-state-reasons.interlock-open" msgstr "Interlock Open" msgid "printer-state-reasons.interpreter-cartridge-added" msgstr "Interpreter Cartridge Added" msgid "printer-state-reasons.interpreter-cartridge-deleted" msgstr "Interpreter Cartridge Deleted" msgid "printer-state-reasons.interpreter-complex-page-encountered" msgstr "Interpreter Complex Page Encountered" msgid "printer-state-reasons.interpreter-memory-decrease" msgstr "Interpreter Memory Decrease" msgid "printer-state-reasons.interpreter-memory-increase" msgstr "Interpreter Memory Increase" msgid "printer-state-reasons.interpreter-resource-added" msgstr "Interpreter Resource Added" msgid "printer-state-reasons.interpreter-resource-deleted" msgstr "Interpreter Resource Deleted" msgid "printer-state-reasons.interpreter-resource-unavailable" msgstr "Interpreter Resource Unavailable" msgid "printer-state-reasons.lamp-at-eol" msgstr "Lamp At Eol" msgid "printer-state-reasons.lamp-failure" msgstr "Lamp Failure" msgid "printer-state-reasons.lamp-near-eol" msgstr "Lamp Near Eol" msgid "printer-state-reasons.laser-at-eol" msgstr "Laser At Eol" msgid "printer-state-reasons.laser-failure" msgstr "Laser Failure" msgid "printer-state-reasons.laser-near-eol" msgstr "Laser Near Eol" msgid "printer-state-reasons.make-envelope-added" msgstr "Make Envelope Added" msgid "printer-state-reasons.make-envelope-almost-empty" msgstr "Make Envelope Almost Empty" msgid "printer-state-reasons.make-envelope-almost-full" msgstr "Make Envelope Almost Full" msgid "printer-state-reasons.make-envelope-at-limit" msgstr "Make Envelope At Limit" msgid "printer-state-reasons.make-envelope-closed" msgstr "Make Envelope Closed" msgid "printer-state-reasons.make-envelope-configuration-change" msgstr "Make Envelope Configuration Change" msgid "printer-state-reasons.make-envelope-cover-closed" msgstr "Make Envelope Cover Closed" msgid "printer-state-reasons.make-envelope-cover-open" msgstr "Make Envelope Cover Open" msgid "printer-state-reasons.make-envelope-empty" msgstr "Make Envelope Empty" msgid "printer-state-reasons.make-envelope-full" msgstr "Make Envelope Full" msgid "printer-state-reasons.make-envelope-interlock-closed" msgstr "Make Envelope Interlock Closed" msgid "printer-state-reasons.make-envelope-interlock-open" msgstr "Make Envelope Interlock Open" msgid "printer-state-reasons.make-envelope-jam" msgstr "Make Envelope Jam" msgid "printer-state-reasons.make-envelope-life-almost-over" msgstr "Make Envelope Life Almost Over" msgid "printer-state-reasons.make-envelope-life-over" msgstr "Make Envelope Life Over" msgid "printer-state-reasons.make-envelope-memory-exhausted" msgstr "Make Envelope Memory Exhausted" msgid "printer-state-reasons.make-envelope-missing" msgstr "Make Envelope Missing" msgid "printer-state-reasons.make-envelope-motor-failure" msgstr "Make Envelope Motor Failure" msgid "printer-state-reasons.make-envelope-near-limit" msgstr "Make Envelope Near Limit" msgid "printer-state-reasons.make-envelope-offline" msgstr "Make Envelope Offline" msgid "printer-state-reasons.make-envelope-opened" msgstr "Make Envelope Opened" msgid "printer-state-reasons.make-envelope-over-temperature" msgstr "Make Envelope Over Temperature" msgid "printer-state-reasons.make-envelope-power-saver" msgstr "Make Envelope Power Saver" msgid "printer-state-reasons.make-envelope-recoverable-failure" msgstr "Make Envelope Recoverable Failure" msgid "printer-state-reasons.make-envelope-recoverable-storage" msgstr "Make Envelope Recoverable Storage" msgid "printer-state-reasons.make-envelope-removed" msgstr "Make Envelope Removed" msgid "printer-state-reasons.make-envelope-resource-added" msgstr "Make Envelope Resource Added" msgid "printer-state-reasons.make-envelope-resource-removed" msgstr "Make Envelope Resource Removed" msgid "printer-state-reasons.make-envelope-thermistor-failure" msgstr "Make Envelope Thermistor Failure" msgid "printer-state-reasons.make-envelope-timing-failure" msgstr "Make Envelope Timing Failure" msgid "printer-state-reasons.make-envelope-turned-off" msgstr "Make Envelope Turned Off" msgid "printer-state-reasons.make-envelope-turned-on" msgstr "Make Envelope Turned On" msgid "printer-state-reasons.make-envelope-under-temperature" msgstr "Make Envelope Under Temperature" msgid "printer-state-reasons.make-envelope-unrecoverable-failure" msgstr "Make Envelope Unrecoverable Failure" msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error" msgstr "Make Envelope Unrecoverable Storage Error" msgid "printer-state-reasons.make-envelope-warming-up" msgstr "Make Envelope Warming Up" msgid "printer-state-reasons.marker-adjusting-print-quality" msgstr "Marker Adjusting Print Quality" msgid "printer-state-reasons.marker-developer-almost-empty" msgstr "Marker Developer Almost Empty" msgid "printer-state-reasons.marker-developer-empty" msgstr "Marker Developer Empty" msgid "printer-state-reasons.marker-fuser-thermistor-failure" msgstr "Marker Fuser Thermistor Failure" msgid "printer-state-reasons.marker-fuser-timing-failure" msgstr "Marker Fuser Timing Failure" msgid "printer-state-reasons.marker-ink-almost-empty" msgstr "Marker Ink Almost Empty" msgid "printer-state-reasons.marker-ink-empty" msgstr "Marker Ink Empty" msgid "printer-state-reasons.marker-print-ribbon-almost-empty" msgstr "Marker Print Ribbon Almost Empty" msgid "printer-state-reasons.marker-print-ribbon-empty" msgstr "Marker Print Ribbon Empty" msgid "printer-state-reasons.marker-supply-empty" msgstr "Marker Supply Empty" msgid "printer-state-reasons.marker-supply-low" msgstr "Marker Supply Low" msgid "printer-state-reasons.marker-toner-cartridge-missing" msgstr "Marker Toner Cartridge Missing" msgid "printer-state-reasons.marker-waste-almost-full" msgstr "Marker Waste Almost Full" msgid "printer-state-reasons.marker-waste-full" msgstr "Marker Waste Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full" msgstr "Marker Waste Ink Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-full" msgstr "Marker Waste Ink Receptacle Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full" msgstr "Marker Waste Toner Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-full" msgstr "Marker Waste Toner Receptacle Full" msgid "printer-state-reasons.material-empty" msgstr "Material Empty" msgid "printer-state-reasons.material-low" msgstr "Material Low" msgid "printer-state-reasons.material-needed" msgstr "Material Needed" msgid "printer-state-reasons.media-empty" msgstr "Media Empty" msgid "printer-state-reasons.media-jam" msgstr "Media Jam" msgid "printer-state-reasons.media-low" msgstr "Media Low" msgid "printer-state-reasons.media-needed" msgstr "Media Needed" msgid "printer-state-reasons.media-path-cannot-duplex-media-selected" msgstr "Media Path Cannot Duplex Media Selected" msgid "printer-state-reasons.media-path-media-tray-almost-full" msgstr "Media Path Media Tray Almost Full" msgid "printer-state-reasons.media-path-media-tray-full" msgstr "Media Path Media Tray Full" msgid "printer-state-reasons.media-path-media-tray-missing" msgstr "Media Path Media Tray Missing" msgid "printer-state-reasons.motor-failure" msgstr "Motor Failure" msgid "printer-state-reasons.moving-to-paused" msgstr "Moving To Paused" msgid "printer-state-reasons.none" msgstr "None" msgid "printer-state-reasons.opc-life-over" msgstr "Opc Life Over" msgid "printer-state-reasons.opc-near-eol" msgstr "Opc Near Eol" msgid "printer-state-reasons.other" msgstr "Other" msgid "printer-state-reasons.output-area-almost-full" msgstr "Output Area Almost Full" msgid "printer-state-reasons.output-area-full" msgstr "Output Area Full" msgid "printer-state-reasons.output-mailbox-select-failure" msgstr "Output Mailbox Select Failure" msgid "printer-state-reasons.output-tray-missing" msgstr "Output Tray Missing" msgid "printer-state-reasons.paused" msgstr "Paused" msgid "printer-state-reasons.perforater-added" msgstr "Perforater Added" msgid "printer-state-reasons.perforater-almost-empty" msgstr "Perforater Almost Empty" msgid "printer-state-reasons.perforater-almost-full" msgstr "Perforater Almost Full" msgid "printer-state-reasons.perforater-at-limit" msgstr "Perforater At Limit" msgid "printer-state-reasons.perforater-closed" msgstr "Perforater Closed" msgid "printer-state-reasons.perforater-configuration-change" msgstr "Perforater Configuration Change" msgid "printer-state-reasons.perforater-cover-closed" msgstr "Perforater Cover Closed" msgid "printer-state-reasons.perforater-cover-open" msgstr "Perforater Cover Open" msgid "printer-state-reasons.perforater-empty" msgstr "Perforater Empty" msgid "printer-state-reasons.perforater-full" msgstr "Perforater Full" msgid "printer-state-reasons.perforater-interlock-closed" msgstr "Perforater Interlock Closed" msgid "printer-state-reasons.perforater-interlock-open" msgstr "Perforater Interlock Open" msgid "printer-state-reasons.perforater-jam" msgstr "Perforater Jam" msgid "printer-state-reasons.perforater-life-almost-over" msgstr "Perforater Life Almost Over" msgid "printer-state-reasons.perforater-life-over" msgstr "Perforater Life Over" msgid "printer-state-reasons.perforater-memory-exhausted" msgstr "Perforater Memory Exhausted" msgid "printer-state-reasons.perforater-missing" msgstr "Perforater Missing" msgid "printer-state-reasons.perforater-motor-failure" msgstr "Perforater Motor Failure" msgid "printer-state-reasons.perforater-near-limit" msgstr "Perforater Near Limit" msgid "printer-state-reasons.perforater-offline" msgstr "Perforater Offline" msgid "printer-state-reasons.perforater-opened" msgstr "Perforater Opened" msgid "printer-state-reasons.perforater-over-temperature" msgstr "Perforater Over Temperature" msgid "printer-state-reasons.perforater-power-saver" msgstr "Perforater Power Saver" msgid "printer-state-reasons.perforater-recoverable-failure" msgstr "Perforater Recoverable Failure" msgid "printer-state-reasons.perforater-recoverable-storage" msgstr "Perforater Recoverable Storage" msgid "printer-state-reasons.perforater-removed" msgstr "Perforater Removed" msgid "printer-state-reasons.perforater-resource-added" msgstr "Perforater Resource Added" msgid "printer-state-reasons.perforater-resource-removed" msgstr "Perforater Resource Removed" msgid "printer-state-reasons.perforater-thermistor-failure" msgstr "Perforater Thermistor Failure" msgid "printer-state-reasons.perforater-timing-failure" msgstr "Perforater Timing Failure" msgid "printer-state-reasons.perforater-turned-off" msgstr "Perforater Turned Off" msgid "printer-state-reasons.perforater-turned-on" msgstr "Perforater Turned On" msgid "printer-state-reasons.perforater-under-temperature" msgstr "Perforater Under Temperature" msgid "printer-state-reasons.perforater-unrecoverable-failure" msgstr "Perforater Unrecoverable Failure" msgid "printer-state-reasons.perforater-unrecoverable-storage-error" msgstr "Perforater Unrecoverable Storage Error" msgid "printer-state-reasons.perforater-warming-up" msgstr "Perforater Warming Up" msgid "printer-state-reasons.power-down" msgstr "Power Down" msgid "printer-state-reasons.power-up" msgstr "Power Up" msgid "printer-state-reasons.printer-manual-reset" msgstr "Printer Manual Reset" msgid "printer-state-reasons.printer-nms-reset" msgstr "Printer Nms Reset" msgid "printer-state-reasons.printer-ready-to-print" msgstr "Printer Ready To Print" msgid "printer-state-reasons.puncher-added" msgstr "Puncher Added" msgid "printer-state-reasons.puncher-almost-empty" msgstr "Puncher Almost Empty" msgid "printer-state-reasons.puncher-almost-full" msgstr "Puncher Almost Full" msgid "printer-state-reasons.puncher-at-limit" msgstr "Puncher At Limit" msgid "printer-state-reasons.puncher-closed" msgstr "Puncher Closed" msgid "printer-state-reasons.puncher-configuration-change" msgstr "Puncher Configuration Change" msgid "printer-state-reasons.puncher-cover-closed" msgstr "Puncher Cover Closed" msgid "printer-state-reasons.puncher-cover-open" msgstr "Puncher Cover Open" msgid "printer-state-reasons.puncher-empty" msgstr "Puncher Empty" msgid "printer-state-reasons.puncher-full" msgstr "Puncher Full" msgid "printer-state-reasons.puncher-interlock-closed" msgstr "Puncher Interlock Closed" msgid "printer-state-reasons.puncher-interlock-open" msgstr "Puncher Interlock Open" msgid "printer-state-reasons.puncher-jam" msgstr "Puncher Jam" msgid "printer-state-reasons.puncher-life-almost-over" msgstr "Puncher Life Almost Over" msgid "printer-state-reasons.puncher-life-over" msgstr "Puncher Life Over" msgid "printer-state-reasons.puncher-memory-exhausted" msgstr "Puncher Memory Exhausted" msgid "printer-state-reasons.puncher-missing" msgstr "Puncher Missing" msgid "printer-state-reasons.puncher-motor-failure" msgstr "Puncher Motor Failure" msgid "printer-state-reasons.puncher-near-limit" msgstr "Puncher Near Limit" msgid "printer-state-reasons.puncher-offline" msgstr "Puncher Offline" msgid "printer-state-reasons.puncher-opened" msgstr "Puncher Opened" msgid "printer-state-reasons.puncher-over-temperature" msgstr "Puncher Over Temperature" msgid "printer-state-reasons.puncher-power-saver" msgstr "Puncher Power Saver" msgid "printer-state-reasons.puncher-recoverable-failure" msgstr "Puncher Recoverable Failure" msgid "printer-state-reasons.puncher-recoverable-storage" msgstr "Puncher Recoverable Storage" msgid "printer-state-reasons.puncher-removed" msgstr "Puncher Removed" msgid "printer-state-reasons.puncher-resource-added" msgstr "Puncher Resource Added" msgid "printer-state-reasons.puncher-resource-removed" msgstr "Puncher Resource Removed" msgid "printer-state-reasons.puncher-thermistor-failure" msgstr "Puncher Thermistor Failure" msgid "printer-state-reasons.puncher-timing-failure" msgstr "Puncher Timing Failure" msgid "printer-state-reasons.puncher-turned-off" msgstr "Puncher Turned Off" msgid "printer-state-reasons.puncher-turned-on" msgstr "Puncher Turned On" msgid "printer-state-reasons.puncher-under-temperature" msgstr "Puncher Under Temperature" msgid "printer-state-reasons.puncher-unrecoverable-failure" msgstr "Puncher Unrecoverable Failure" msgid "printer-state-reasons.puncher-unrecoverable-storage-error" msgstr "Puncher Unrecoverable Storage Error" msgid "printer-state-reasons.puncher-warming-up" msgstr "Puncher Warming Up" msgid "printer-state-reasons.separation-cutter-added" msgstr "Separation Cutter Added" msgid "printer-state-reasons.separation-cutter-almost-empty" msgstr "Separation Cutter Almost Empty" msgid "printer-state-reasons.separation-cutter-almost-full" msgstr "Separation Cutter Almost Full" msgid "printer-state-reasons.separation-cutter-at-limit" msgstr "Separation Cutter At Limit" msgid "printer-state-reasons.separation-cutter-closed" msgstr "Separation Cutter Closed" msgid "printer-state-reasons.separation-cutter-configuration-change" msgstr "Separation Cutter Configuration Change" msgid "printer-state-reasons.separation-cutter-cover-closed" msgstr "Separation Cutter Cover Closed" msgid "printer-state-reasons.separation-cutter-cover-open" msgstr "Separation Cutter Cover Open" msgid "printer-state-reasons.separation-cutter-empty" msgstr "Separation Cutter Empty" msgid "printer-state-reasons.separation-cutter-full" msgstr "Separation Cutter Full" msgid "printer-state-reasons.separation-cutter-interlock-closed" msgstr "Separation Cutter Interlock Closed" msgid "printer-state-reasons.separation-cutter-interlock-open" msgstr "Separation Cutter Interlock Open" msgid "printer-state-reasons.separation-cutter-jam" msgstr "Separation Cutter Jam" msgid "printer-state-reasons.separation-cutter-life-almost-over" msgstr "Separation Cutter Life Almost Over" msgid "printer-state-reasons.separation-cutter-life-over" msgstr "Separation Cutter Life Over" msgid "printer-state-reasons.separation-cutter-memory-exhausted" msgstr "Separation Cutter Memory Exhausted" msgid "printer-state-reasons.separation-cutter-missing" msgstr "Separation Cutter Missing" msgid "printer-state-reasons.separation-cutter-motor-failure" msgstr "Separation Cutter Motor Failure" msgid "printer-state-reasons.separation-cutter-near-limit" msgstr "Separation Cutter Near Limit" msgid "printer-state-reasons.separation-cutter-offline" msgstr "Separation Cutter Offline" msgid "printer-state-reasons.separation-cutter-opened" msgstr "Separation Cutter Opened" msgid "printer-state-reasons.separation-cutter-over-temperature" msgstr "Separation Cutter Over Temperature" msgid "printer-state-reasons.separation-cutter-power-saver" msgstr "Separation Cutter Power Saver" msgid "printer-state-reasons.separation-cutter-recoverable-failure" msgstr "Separation Cutter Recoverable Failure" msgid "printer-state-reasons.separation-cutter-recoverable-storage" msgstr "Separation Cutter Recoverable Storage" msgid "printer-state-reasons.separation-cutter-removed" msgstr "Separation Cutter Removed" msgid "printer-state-reasons.separation-cutter-resource-added" msgstr "Separation Cutter Resource Added" msgid "printer-state-reasons.separation-cutter-resource-removed" msgstr "Separation Cutter Resource Removed" msgid "printer-state-reasons.separation-cutter-thermistor-failure" msgstr "Separation Cutter Thermistor Failure" msgid "printer-state-reasons.separation-cutter-timing-failure" msgstr "Separation Cutter Timing Failure" msgid "printer-state-reasons.separation-cutter-turned-off" msgstr "Separation Cutter Turned Off" msgid "printer-state-reasons.separation-cutter-turned-on" msgstr "Separation Cutter Turned On" msgid "printer-state-reasons.separation-cutter-under-temperature" msgstr "Separation Cutter Under Temperature" msgid "printer-state-reasons.separation-cutter-unrecoverable-failure" msgstr "Separation Cutter Unrecoverable Failure" msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error" msgstr "Separation Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.separation-cutter-warming-up" msgstr "Separation Cutter Warming Up" msgid "printer-state-reasons.sheet-rotator-added" msgstr "Sheet Rotator Added" msgid "printer-state-reasons.sheet-rotator-almost-empty" msgstr "Sheet Rotator Almost Empty" msgid "printer-state-reasons.sheet-rotator-almost-full" msgstr "Sheet Rotator Almost Full" msgid "printer-state-reasons.sheet-rotator-at-limit" msgstr "Sheet Rotator At Limit" msgid "printer-state-reasons.sheet-rotator-closed" msgstr "Sheet Rotator Closed" msgid "printer-state-reasons.sheet-rotator-configuration-change" msgstr "Sheet Rotator Configuration Change" msgid "printer-state-reasons.sheet-rotator-cover-closed" msgstr "Sheet Rotator Cover Closed" msgid "printer-state-reasons.sheet-rotator-cover-open" msgstr "Sheet Rotator Cover Open" msgid "printer-state-reasons.sheet-rotator-empty" msgstr "Sheet Rotator Empty" msgid "printer-state-reasons.sheet-rotator-full" msgstr "Sheet Rotator Full" msgid "printer-state-reasons.sheet-rotator-interlock-closed" msgstr "Sheet Rotator Interlock Closed" msgid "printer-state-reasons.sheet-rotator-interlock-open" msgstr "Sheet Rotator Interlock Open" msgid "printer-state-reasons.sheet-rotator-jam" msgstr "Sheet Rotator Jam" msgid "printer-state-reasons.sheet-rotator-life-almost-over" msgstr "Sheet Rotator Life Almost Over" msgid "printer-state-reasons.sheet-rotator-life-over" msgstr "Sheet Rotator Life Over" msgid "printer-state-reasons.sheet-rotator-memory-exhausted" msgstr "Sheet Rotator Memory Exhausted" msgid "printer-state-reasons.sheet-rotator-missing" msgstr "Sheet Rotator Missing" msgid "printer-state-reasons.sheet-rotator-motor-failure" msgstr "Sheet Rotator Motor Failure" msgid "printer-state-reasons.sheet-rotator-near-limit" msgstr "Sheet Rotator Near Limit" msgid "printer-state-reasons.sheet-rotator-offline" msgstr "Sheet Rotator Offline" msgid "printer-state-reasons.sheet-rotator-opened" msgstr "Sheet Rotator Opened" msgid "printer-state-reasons.sheet-rotator-over-temperature" msgstr "Sheet Rotator Over Temperature" msgid "printer-state-reasons.sheet-rotator-power-saver" msgstr "Sheet Rotator Power Saver" msgid "printer-state-reasons.sheet-rotator-recoverable-failure" msgstr "Sheet Rotator Recoverable Failure" msgid "printer-state-reasons.sheet-rotator-recoverable-storage" msgstr "Sheet Rotator Recoverable Storage" msgid "printer-state-reasons.sheet-rotator-removed" msgstr "Sheet Rotator Removed" msgid "printer-state-reasons.sheet-rotator-resource-added" msgstr "Sheet Rotator Resource Added" msgid "printer-state-reasons.sheet-rotator-resource-removed" msgstr "Sheet Rotator Resource Removed" msgid "printer-state-reasons.sheet-rotator-thermistor-failure" msgstr "Sheet Rotator Thermistor Failure" msgid "printer-state-reasons.sheet-rotator-timing-failure" msgstr "Sheet Rotator Timing Failure" msgid "printer-state-reasons.sheet-rotator-turned-off" msgstr "Sheet Rotator Turned Off" msgid "printer-state-reasons.sheet-rotator-turned-on" msgstr "Sheet Rotator Turned On" msgid "printer-state-reasons.sheet-rotator-under-temperature" msgstr "Sheet Rotator Under Temperature" msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure" msgstr "Sheet Rotator Unrecoverable Failure" msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" msgstr "Sheet Rotator Unrecoverable Storage Error" msgid "printer-state-reasons.sheet-rotator-warming-up" msgstr "Sheet Rotator Warming Up" msgid "printer-state-reasons.shutdown" msgstr "Shutdown" msgid "printer-state-reasons.slitter-added" msgstr "Slitter Added" msgid "printer-state-reasons.slitter-almost-empty" msgstr "Slitter Almost Empty" msgid "printer-state-reasons.slitter-almost-full" msgstr "Slitter Almost Full" msgid "printer-state-reasons.slitter-at-limit" msgstr "Slitter At Limit" msgid "printer-state-reasons.slitter-closed" msgstr "Slitter Closed" msgid "printer-state-reasons.slitter-configuration-change" msgstr "Slitter Configuration Change" msgid "printer-state-reasons.slitter-cover-closed" msgstr "Slitter Cover Closed" msgid "printer-state-reasons.slitter-cover-open" msgstr "Slitter Cover Open" msgid "printer-state-reasons.slitter-empty" msgstr "Slitter Empty" msgid "printer-state-reasons.slitter-full" msgstr "Slitter Full" msgid "printer-state-reasons.slitter-interlock-closed" msgstr "Slitter Interlock Closed" msgid "printer-state-reasons.slitter-interlock-open" msgstr "Slitter Interlock Open" msgid "printer-state-reasons.slitter-jam" msgstr "Slitter Jam" msgid "printer-state-reasons.slitter-life-almost-over" msgstr "Slitter Life Almost Over" msgid "printer-state-reasons.slitter-life-over" msgstr "Slitter Life Over" msgid "printer-state-reasons.slitter-memory-exhausted" msgstr "Slitter Memory Exhausted" msgid "printer-state-reasons.slitter-missing" msgstr "Slitter Missing" msgid "printer-state-reasons.slitter-motor-failure" msgstr "Slitter Motor Failure" msgid "printer-state-reasons.slitter-near-limit" msgstr "Slitter Near Limit" msgid "printer-state-reasons.slitter-offline" msgstr "Slitter Offline" msgid "printer-state-reasons.slitter-opened" msgstr "Slitter Opened" msgid "printer-state-reasons.slitter-over-temperature" msgstr "Slitter Over Temperature" msgid "printer-state-reasons.slitter-power-saver" msgstr "Slitter Power Saver" msgid "printer-state-reasons.slitter-recoverable-failure" msgstr "Slitter Recoverable Failure" msgid "printer-state-reasons.slitter-recoverable-storage" msgstr "Slitter Recoverable Storage" msgid "printer-state-reasons.slitter-removed" msgstr "Slitter Removed" msgid "printer-state-reasons.slitter-resource-added" msgstr "Slitter Resource Added" msgid "printer-state-reasons.slitter-resource-removed" msgstr "Slitter Resource Removed" msgid "printer-state-reasons.slitter-thermistor-failure" msgstr "Slitter Thermistor Failure" msgid "printer-state-reasons.slitter-timing-failure" msgstr "Slitter Timing Failure" msgid "printer-state-reasons.slitter-turned-off" msgstr "Slitter Turned Off" msgid "printer-state-reasons.slitter-turned-on" msgstr "Slitter Turned On" msgid "printer-state-reasons.slitter-under-temperature" msgstr "Slitter Under Temperature" msgid "printer-state-reasons.slitter-unrecoverable-failure" msgstr "Slitter Unrecoverable Failure" msgid "printer-state-reasons.slitter-unrecoverable-storage-error" msgstr "Slitter Unrecoverable Storage Error" msgid "printer-state-reasons.slitter-warming-up" msgstr "Slitter Warming Up" msgid "printer-state-reasons.spool-area-full" msgstr "Spool Area Full" msgid "printer-state-reasons.stacker-added" msgstr "Stacker Added" msgid "printer-state-reasons.stacker-almost-empty" msgstr "Stacker Almost Empty" msgid "printer-state-reasons.stacker-almost-full" msgstr "Stacker Almost Full" msgid "printer-state-reasons.stacker-at-limit" msgstr "Stacker At Limit" msgid "printer-state-reasons.stacker-closed" msgstr "Stacker Closed" msgid "printer-state-reasons.stacker-configuration-change" msgstr "Stacker Configuration Change" msgid "printer-state-reasons.stacker-cover-closed" msgstr "Stacker Cover Closed" msgid "printer-state-reasons.stacker-cover-open" msgstr "Stacker Cover Open" msgid "printer-state-reasons.stacker-empty" msgstr "Stacker Empty" msgid "printer-state-reasons.stacker-full" msgstr "Stacker Full" msgid "printer-state-reasons.stacker-interlock-closed" msgstr "Stacker Interlock Closed" msgid "printer-state-reasons.stacker-interlock-open" msgstr "Stacker Interlock Open" msgid "printer-state-reasons.stacker-jam" msgstr "Stacker Jam" msgid "printer-state-reasons.stacker-life-almost-over" msgstr "Stacker Life Almost Over" msgid "printer-state-reasons.stacker-life-over" msgstr "Stacker Life Over" msgid "printer-state-reasons.stacker-memory-exhausted" msgstr "Stacker Memory Exhausted" msgid "printer-state-reasons.stacker-missing" msgstr "Stacker Missing" msgid "printer-state-reasons.stacker-motor-failure" msgstr "Stacker Motor Failure" msgid "printer-state-reasons.stacker-near-limit" msgstr "Stacker Near Limit" msgid "printer-state-reasons.stacker-offline" msgstr "Stacker Offline" msgid "printer-state-reasons.stacker-opened" msgstr "Stacker Opened" msgid "printer-state-reasons.stacker-over-temperature" msgstr "Stacker Over Temperature" msgid "printer-state-reasons.stacker-power-saver" msgstr "Stacker Power Saver" msgid "printer-state-reasons.stacker-recoverable-failure" msgstr "Stacker Recoverable Failure" msgid "printer-state-reasons.stacker-recoverable-storage" msgstr "Stacker Recoverable Storage" msgid "printer-state-reasons.stacker-removed" msgstr "Stacker Removed" msgid "printer-state-reasons.stacker-resource-added" msgstr "Stacker Resource Added" msgid "printer-state-reasons.stacker-resource-removed" msgstr "Stacker Resource Removed" msgid "printer-state-reasons.stacker-thermistor-failure" msgstr "Stacker Thermistor Failure" msgid "printer-state-reasons.stacker-timing-failure" msgstr "Stacker Timing Failure" msgid "printer-state-reasons.stacker-turned-off" msgstr "Stacker Turned Off" msgid "printer-state-reasons.stacker-turned-on" msgstr "Stacker Turned On" msgid "printer-state-reasons.stacker-under-temperature" msgstr "Stacker Under Temperature" msgid "printer-state-reasons.stacker-unrecoverable-failure" msgstr "Stacker Unrecoverable Failure" msgid "printer-state-reasons.stacker-unrecoverable-storage-error" msgstr "Stacker Unrecoverable Storage Error" msgid "printer-state-reasons.stacker-warming-up" msgstr "Stacker Warming Up" msgid "printer-state-reasons.stapler-added" msgstr "Stapler Added" msgid "printer-state-reasons.stapler-almost-empty" msgstr "Stapler Almost Empty" msgid "printer-state-reasons.stapler-almost-full" msgstr "Stapler Almost Full" msgid "printer-state-reasons.stapler-at-limit" msgstr "Stapler At Limit" msgid "printer-state-reasons.stapler-closed" msgstr "Stapler Closed" msgid "printer-state-reasons.stapler-configuration-change" msgstr "Stapler Configuration Change" msgid "printer-state-reasons.stapler-cover-closed" msgstr "Stapler Cover Closed" msgid "printer-state-reasons.stapler-cover-open" msgstr "Stapler Cover Open" msgid "printer-state-reasons.stapler-empty" msgstr "Stapler Empty" msgid "printer-state-reasons.stapler-full" msgstr "Stapler Full" msgid "printer-state-reasons.stapler-interlock-closed" msgstr "Stapler Interlock Closed" msgid "printer-state-reasons.stapler-interlock-open" msgstr "Stapler Interlock Open" msgid "printer-state-reasons.stapler-jam" msgstr "Stapler Jam" msgid "printer-state-reasons.stapler-life-almost-over" msgstr "Stapler Life Almost Over" msgid "printer-state-reasons.stapler-life-over" msgstr "Stapler Life Over" msgid "printer-state-reasons.stapler-memory-exhausted" msgstr "Stapler Memory Exhausted" msgid "printer-state-reasons.stapler-missing" msgstr "Stapler Missing" msgid "printer-state-reasons.stapler-motor-failure" msgstr "Stapler Motor Failure" msgid "printer-state-reasons.stapler-near-limit" msgstr "Stapler Near Limit" msgid "printer-state-reasons.stapler-offline" msgstr "Stapler Offline" msgid "printer-state-reasons.stapler-opened" msgstr "Stapler Opened" msgid "printer-state-reasons.stapler-over-temperature" msgstr "Stapler Over Temperature" msgid "printer-state-reasons.stapler-power-saver" msgstr "Stapler Power Saver" msgid "printer-state-reasons.stapler-recoverable-failure" msgstr "Stapler Recoverable Failure" msgid "printer-state-reasons.stapler-recoverable-storage" msgstr "Stapler Recoverable Storage" msgid "printer-state-reasons.stapler-removed" msgstr "Stapler Removed" msgid "printer-state-reasons.stapler-resource-added" msgstr "Stapler Resource Added" msgid "printer-state-reasons.stapler-resource-removed" msgstr "Stapler Resource Removed" msgid "printer-state-reasons.stapler-thermistor-failure" msgstr "Stapler Thermistor Failure" msgid "printer-state-reasons.stapler-timing-failure" msgstr "Stapler Timing Failure" msgid "printer-state-reasons.stapler-turned-off" msgstr "Stapler Turned Off" msgid "printer-state-reasons.stapler-turned-on" msgstr "Stapler Turned On" msgid "printer-state-reasons.stapler-under-temperature" msgstr "Stapler Under Temperature" msgid "printer-state-reasons.stapler-unrecoverable-failure" msgstr "Stapler Unrecoverable Failure" msgid "printer-state-reasons.stapler-unrecoverable-storage-error" msgstr "Stapler Unrecoverable Storage Error" msgid "printer-state-reasons.stapler-warming-up" msgstr "Stapler Warming Up" msgid "printer-state-reasons.stitcher-added" msgstr "Stitcher Added" msgid "printer-state-reasons.stitcher-almost-empty" msgstr "Stitcher Almost Empty" msgid "printer-state-reasons.stitcher-almost-full" msgstr "Stitcher Almost Full" msgid "printer-state-reasons.stitcher-at-limit" msgstr "Stitcher At Limit" msgid "printer-state-reasons.stitcher-closed" msgstr "Stitcher Closed" msgid "printer-state-reasons.stitcher-configuration-change" msgstr "Stitcher Configuration Change" msgid "printer-state-reasons.stitcher-cover-closed" msgstr "Stitcher Cover Closed" msgid "printer-state-reasons.stitcher-cover-open" msgstr "Stitcher Cover Open" msgid "printer-state-reasons.stitcher-empty" msgstr "Stitcher Empty" msgid "printer-state-reasons.stitcher-full" msgstr "Stitcher Full" msgid "printer-state-reasons.stitcher-interlock-closed" msgstr "Stitcher Interlock Closed" msgid "printer-state-reasons.stitcher-interlock-open" msgstr "Stitcher Interlock Open" msgid "printer-state-reasons.stitcher-jam" msgstr "Stitcher Jam" msgid "printer-state-reasons.stitcher-life-almost-over" msgstr "Stitcher Life Almost Over" msgid "printer-state-reasons.stitcher-life-over" msgstr "Stitcher Life Over" msgid "printer-state-reasons.stitcher-memory-exhausted" msgstr "Stitcher Memory Exhausted" msgid "printer-state-reasons.stitcher-missing" msgstr "Stitcher Missing" msgid "printer-state-reasons.stitcher-motor-failure" msgstr "Stitcher Motor Failure" msgid "printer-state-reasons.stitcher-near-limit" msgstr "Stitcher Near Limit" msgid "printer-state-reasons.stitcher-offline" msgstr "Stitcher Offline" msgid "printer-state-reasons.stitcher-opened" msgstr "Stitcher Opened" msgid "printer-state-reasons.stitcher-over-temperature" msgstr "Stitcher Over Temperature" msgid "printer-state-reasons.stitcher-power-saver" msgstr "Stitcher Power Saver" msgid "printer-state-reasons.stitcher-recoverable-failure" msgstr "Stitcher Recoverable Failure" msgid "printer-state-reasons.stitcher-recoverable-storage" msgstr "Stitcher Recoverable Storage" msgid "printer-state-reasons.stitcher-removed" msgstr "Stitcher Removed" msgid "printer-state-reasons.stitcher-resource-added" msgstr "Stitcher Resource Added" msgid "printer-state-reasons.stitcher-resource-removed" msgstr "Stitcher Resource Removed" msgid "printer-state-reasons.stitcher-thermistor-failure" msgstr "Stitcher Thermistor Failure" msgid "printer-state-reasons.stitcher-timing-failure" msgstr "Stitcher Timing Failure" msgid "printer-state-reasons.stitcher-turned-off" msgstr "Stitcher Turned Off" msgid "printer-state-reasons.stitcher-turned-on" msgstr "Stitcher Turned On" msgid "printer-state-reasons.stitcher-under-temperature" msgstr "Stitcher Under Temperature" msgid "printer-state-reasons.stitcher-unrecoverable-failure" msgstr "Stitcher Unrecoverable Failure" msgid "printer-state-reasons.stitcher-unrecoverable-storage-error" msgstr "Stitcher Unrecoverable Storage Error" msgid "printer-state-reasons.stitcher-warming-up" msgstr "Stitcher Warming Up" msgid "printer-state-reasons.stopped-partly" msgstr "Stopped Partly" msgid "printer-state-reasons.stopping" msgstr "Stopping" msgid "printer-state-reasons.subunit-added" msgstr "Subunit Added" msgid "printer-state-reasons.subunit-almost-empty" msgstr "Subunit Almost Empty" msgid "printer-state-reasons.subunit-almost-full" msgstr "Subunit Almost Full" msgid "printer-state-reasons.subunit-at-limit" msgstr "Subunit At Limit" msgid "printer-state-reasons.subunit-closed" msgstr "Subunit Closed" msgid "printer-state-reasons.subunit-empty" msgstr "Subunit Empty" msgid "printer-state-reasons.subunit-full" msgstr "Subunit Full" msgid "printer-state-reasons.subunit-life-almost-over" msgstr "Subunit Life Almost Over" msgid "printer-state-reasons.subunit-life-over" msgstr "Subunit Life Over" msgid "printer-state-reasons.subunit-memory-exhausted" msgstr "Subunit Memory Exhausted" msgid "printer-state-reasons.subunit-missing" msgstr "Subunit Missing" msgid "printer-state-reasons.subunit-motor-failure" msgstr "Subunit Motor Failure" msgid "printer-state-reasons.subunit-near-limit" msgstr "Subunit Near Limit" msgid "printer-state-reasons.subunit-offline" msgstr "Subunit Offline" msgid "printer-state-reasons.subunit-opened" msgstr "Subunit Opened" msgid "printer-state-reasons.subunit-over-temperature" msgstr "Subunit Over Temperature" msgid "printer-state-reasons.subunit-power-saver" msgstr "Subunit Power Saver" msgid "printer-state-reasons.subunit-recoverable-failure" msgstr "Subunit Recoverable Failure" msgid "printer-state-reasons.subunit-recoverable-storage" msgstr "Subunit Recoverable Storage" msgid "printer-state-reasons.subunit-removed" msgstr "Subunit Removed" msgid "printer-state-reasons.subunit-resource-added" msgstr "Subunit Resource Added" msgid "printer-state-reasons.subunit-resource-removed" msgstr "Subunit Resource Removed" msgid "printer-state-reasons.subunit-thermistor-failure" msgstr "Subunit Thermistor Failure" msgid "printer-state-reasons.subunit-timing-Failure" msgstr "Subunit Timing Failure" msgid "printer-state-reasons.subunit-turned-off" msgstr "Subunit Turned Off" msgid "printer-state-reasons.subunit-turned-on" msgstr "Subunit Turned On" msgid "printer-state-reasons.subunit-under-temperature" msgstr "Subunit Under Temperature" msgid "printer-state-reasons.subunit-unrecoverable-failure" msgstr "Subunit Unrecoverable Failure" msgid "printer-state-reasons.subunit-unrecoverable-storage" msgstr "Subunit Unrecoverable Storage" msgid "printer-state-reasons.subunit-warming-up" msgstr "Subunit Warming Up" msgid "printer-state-reasons.timed-out" msgstr "Timed Out" msgid "printer-state-reasons.toner-empty" msgstr "Toner Empty" msgid "printer-state-reasons.toner-low" msgstr "Toner Low" msgid "printer-state-reasons.trimmer-added" msgstr "Trimmer Added" msgid "printer-state-reasons.trimmer-almost-empty" msgstr "Trimmer Almost Empty" msgid "printer-state-reasons.trimmer-almost-full" msgstr "Trimmer Almost Full" msgid "printer-state-reasons.trimmer-at-limit" msgstr "Trimmer At Limit" msgid "printer-state-reasons.trimmer-closed" msgstr "Trimmer Closed" msgid "printer-state-reasons.trimmer-configuration-change" msgstr "Trimmer Configuration Change" msgid "printer-state-reasons.trimmer-cover-closed" msgstr "Trimmer Cover Closed" msgid "printer-state-reasons.trimmer-cover-open" msgstr "Trimmer Cover Open" msgid "printer-state-reasons.trimmer-empty" msgstr "Trimmer Empty" msgid "printer-state-reasons.trimmer-full" msgstr "Trimmer Full" msgid "printer-state-reasons.trimmer-interlock-closed" msgstr "Trimmer Interlock Closed" msgid "printer-state-reasons.trimmer-interlock-open" msgstr "Trimmer Interlock Open" msgid "printer-state-reasons.trimmer-jam" msgstr "Trimmer Jam" msgid "printer-state-reasons.trimmer-life-almost-over" msgstr "Trimmer Life Almost Over" msgid "printer-state-reasons.trimmer-life-over" msgstr "Trimmer Life Over" msgid "printer-state-reasons.trimmer-memory-exhausted" msgstr "Trimmer Memory Exhausted" msgid "printer-state-reasons.trimmer-missing" msgstr "Trimmer Missing" msgid "printer-state-reasons.trimmer-motor-failure" msgstr "Trimmer Motor Failure" msgid "printer-state-reasons.trimmer-near-limit" msgstr "Trimmer Near Limit" msgid "printer-state-reasons.trimmer-offline" msgstr "Trimmer Offline" msgid "printer-state-reasons.trimmer-opened" msgstr "Trimmer Opened" msgid "printer-state-reasons.trimmer-over-temperature" msgstr "Trimmer Over Temperature" msgid "printer-state-reasons.trimmer-power-saver" msgstr "Trimmer Power Saver" msgid "printer-state-reasons.trimmer-recoverable-failure" msgstr "Trimmer Recoverable Failure" msgid "printer-state-reasons.trimmer-recoverable-storage" msgstr "Trimmer Recoverable Storage" msgid "printer-state-reasons.trimmer-removed" msgstr "Trimmer Removed" msgid "printer-state-reasons.trimmer-resource-added" msgstr "Trimmer Resource Added" msgid "printer-state-reasons.trimmer-resource-removed" msgstr "Trimmer Resource Removed" msgid "printer-state-reasons.trimmer-thermistor-failure" msgstr "Trimmer Thermistor Failure" msgid "printer-state-reasons.trimmer-timing-failure" msgstr "Trimmer Timing Failure" msgid "printer-state-reasons.trimmer-turned-off" msgstr "Trimmer Turned Off" msgid "printer-state-reasons.trimmer-turned-on" msgstr "Trimmer Turned On" msgid "printer-state-reasons.trimmer-under-temperature" msgstr "Trimmer Under Temperature" msgid "printer-state-reasons.trimmer-unrecoverable-failure" msgstr "Trimmer Unrecoverable Failure" msgid "printer-state-reasons.trimmer-unrecoverable-storage-error" msgstr "Trimmer Unrecoverable Storage Error" msgid "printer-state-reasons.trimmer-warming-up" msgstr "Trimmer Warming Up" msgid "printer-state-reasons.unknown" msgstr "Unknown" msgid "printer-state-reasons.wrapper-added" msgstr "Wrapper Added" msgid "printer-state-reasons.wrapper-almost-empty" msgstr "Wrapper Almost Empty" msgid "printer-state-reasons.wrapper-almost-full" msgstr "Wrapper Almost Full" msgid "printer-state-reasons.wrapper-at-limit" msgstr "Wrapper At Limit" msgid "printer-state-reasons.wrapper-closed" msgstr "Wrapper Closed" msgid "printer-state-reasons.wrapper-configuration-change" msgstr "Wrapper Configuration Change" msgid "printer-state-reasons.wrapper-cover-closed" msgstr "Wrapper Cover Closed" msgid "printer-state-reasons.wrapper-cover-open" msgstr "Wrapper Cover Open" msgid "printer-state-reasons.wrapper-empty" msgstr "Wrapper Empty" msgid "printer-state-reasons.wrapper-full" msgstr "Wrapper Full" msgid "printer-state-reasons.wrapper-interlock-closed" msgstr "Wrapper Interlock Closed" msgid "printer-state-reasons.wrapper-interlock-open" msgstr "Wrapper Interlock Open" msgid "printer-state-reasons.wrapper-jam" msgstr "Wrapper Jam" msgid "printer-state-reasons.wrapper-life-almost-over" msgstr "Wrapper Life Almost Over" msgid "printer-state-reasons.wrapper-life-over" msgstr "Wrapper Life Over" msgid "printer-state-reasons.wrapper-memory-exhausted" msgstr "Wrapper Memory Exhausted" msgid "printer-state-reasons.wrapper-missing" msgstr "Wrapper Missing" msgid "printer-state-reasons.wrapper-motor-failure" msgstr "Wrapper Motor Failure" msgid "printer-state-reasons.wrapper-near-limit" msgstr "Wrapper Near Limit" msgid "printer-state-reasons.wrapper-offline" msgstr "Wrapper Offline" msgid "printer-state-reasons.wrapper-opened" msgstr "Wrapper Opened" msgid "printer-state-reasons.wrapper-over-temperature" msgstr "Wrapper Over Temperature" msgid "printer-state-reasons.wrapper-power-saver" msgstr "Wrapper Power Saver" msgid "printer-state-reasons.wrapper-recoverable-failure" msgstr "Wrapper Recoverable Failure" msgid "printer-state-reasons.wrapper-recoverable-storage" msgstr "Wrapper Recoverable Storage" msgid "printer-state-reasons.wrapper-removed" msgstr "Wrapper Removed" msgid "printer-state-reasons.wrapper-resource-added" msgstr "Wrapper Resource Added" msgid "printer-state-reasons.wrapper-resource-removed" msgstr "Wrapper Resource Removed" msgid "printer-state-reasons.wrapper-thermistor-failure" msgstr "Wrapper Thermistor Failure" msgid "printer-state-reasons.wrapper-timing-failure" msgstr "Wrapper Timing Failure" msgid "printer-state-reasons.wrapper-turned-off" msgstr "Wrapper Turned Off" msgid "printer-state-reasons.wrapper-turned-on" msgstr "Wrapper Turned On" msgid "printer-state-reasons.wrapper-under-temperature" msgstr "Wrapper Under Temperature" msgid "printer-state-reasons.wrapper-unrecoverable-failure" msgstr "Wrapper Unrecoverable Failure" msgid "printer-state-reasons.wrapper-unrecoverable-storage-error" msgstr "Wrapper Unrecoverable Storage Error" msgid "printer-state-reasons.wrapper-warming-up" msgstr "Wrapper Warming Up" msgid "printer-state.3" msgstr "Idle" msgid "printer-state.4" msgstr "Processing" msgid "printer-state.5" msgstr "Stopped" msgid "printer-up-time" msgstr "Printer Uptime" msgid "processing" msgstr "en cours" msgid "proof-print" msgstr "Proof Print" msgid "proof-print-copies" msgstr "Proof Print Copies" msgid "punching" msgstr "Punching" msgid "punching-locations" msgstr "Punching Locations" msgid "punching-offset" msgstr "Punching Offset" msgid "punching-reference-edge" msgstr "Punching Reference Edge" msgid "punching-reference-edge.bottom" msgstr "Bottom" msgid "punching-reference-edge.left" msgstr "Left" msgid "punching-reference-edge.right" msgstr "Right" msgid "punching-reference-edge.top" msgstr "Top" #, c-format msgid "request id is %s-%d (%d file(s))" msgstr "" msgid "request-id uses indefinite length" msgstr "Le paramètre request-id s’avère être de longueur indéfinie" msgid "requested-attributes" msgstr "Requested Attributes" msgid "retry-interval" msgstr "Retry Interval" msgid "retry-time-out" msgstr "Retry Time Out" msgid "save-disposition" msgstr "Save Disposition" msgid "save-disposition.none" msgstr "None" msgid "save-disposition.print-save" msgstr "Print Save" msgid "save-disposition.save-only" msgstr "Save Only" msgid "save-document-format" msgstr "Save Document Format" msgid "save-info" msgstr "Save Info" msgid "save-location" msgstr "Save Location" msgid "save-name" msgstr "Save Name" msgid "scheduler is not running" msgstr "" msgid "scheduler is running" msgstr "" msgid "separator-sheets" msgstr "Separator Sheets" msgid "separator-sheets-type" msgstr "Separator Sheets Type" msgid "separator-sheets-type.both-sheets" msgstr "Both Sheets" msgid "separator-sheets-type.end-sheet" msgstr "End Sheet" msgid "separator-sheets-type.none" msgstr "None" msgid "separator-sheets-type.slip-sheets" msgstr "Slip Sheets" msgid "separator-sheets-type.start-sheet" msgstr "Start Sheet" msgid "sheet-collate" msgstr "Collate Copies" msgid "sheet-collate.collated" msgstr "Yes" msgid "sheet-collate.uncollated" msgstr "No" msgid "sides" msgstr "2-Sided Printing" msgid "sides.one-sided" msgstr "Off" msgid "sides.two-sided-long-edge" msgstr "On (Portrait)" msgid "sides.two-sided-short-edge" msgstr "On (Landscape)" #, c-format msgid "stat of %s failed: %s" msgstr "stat sur %s a échoué : %s" msgid "status\t\tShow status of daemon and queue." msgstr "" msgid "status-message" msgstr "Status Message" msgid "stitching" msgstr "Staple" msgid "stitching-angle" msgstr "Stitching Angle" msgid "stitching-locations" msgstr "Stitching Locations" msgid "stitching-method" msgstr "Stitching Method" msgid "stitching-method.auto" msgstr "Automatic" msgid "stitching-method.crimp" msgstr "Crimp" msgid "stitching-method.wire" msgstr "Wire" msgid "stitching-offset" msgstr "Stitching Offset" msgid "stitching-reference-edge" msgstr "Stitching Reference Edge" msgid "stitching-reference-edge.bottom" msgstr "Bottom" msgid "stitching-reference-edge.left" msgstr "Left" msgid "stitching-reference-edge.right" msgstr "Right" msgid "stitching-reference-edge.top" msgstr "Top" msgid "stopped" msgstr "arrêtée" msgid "subject" msgstr "Subject" #, c-format msgid "system default destination: %s" msgstr "" #, c-format msgid "system default destination: %s/%s" msgstr "" msgid "t33-subaddress" msgstr "T33 Subaddress" msgid "to-name" msgstr "To Name" msgid "transmission-status" msgstr "Transmission Status" msgid "transmission-status.3" msgstr "Pending" msgid "transmission-status.4" msgstr "Pending Retry" msgid "transmission-status.5" msgstr "Processing" msgid "transmission-status.7" msgstr "Canceled" msgid "transmission-status.8" msgstr "Aborted" msgid "transmission-status.9" msgstr "Completed" msgid "trimming" msgstr "Cut" msgid "trimming-offset" msgstr "Cut Position" msgid "trimming-reference-edge" msgstr "Trimming Reference Edge" msgid "trimming-reference-edge.bottom" msgstr "Bottom" msgid "trimming-reference-edge.left" msgstr "Left" msgid "trimming-reference-edge.right" msgstr "Right" msgid "trimming-reference-edge.top" msgstr "Top" msgid "trimming-type" msgstr "Trimming Type" msgid "trimming-type.draw-line" msgstr "Draw Line" msgid "trimming-type.full" msgstr "Full" msgid "trimming-type.partial" msgstr "Partial" msgid "trimming-type.perforate" msgstr "Perforate" msgid "trimming-type.score" msgstr "Score" msgid "trimming-type.tab" msgstr "Tab" msgid "trimming-when" msgstr "Trimming When" msgid "trimming-when.after-documents" msgstr "After Documents" msgid "trimming-when.after-job" msgstr "After Job" msgid "trimming-when.after-sets" msgstr "After Sets" msgid "trimming-when.after-sheets" msgstr "After Sheets" msgid "unknown" msgstr "inconnu" msgid "untitled" msgstr "sans titre" msgid "variable-bindings uses indefinite length" msgstr "" msgid "x-accuracy" msgstr "X Accuracy" msgid "x-dimension" msgstr "X Dimension" msgid "x-offset" msgstr "X Offset" msgid "x-origin" msgstr "X Origin" msgid "y-accuracy" msgstr "Y Accuracy" msgid "y-dimension" msgstr "Y Dimension" msgid "y-offset" msgstr "Y Offset" msgid "y-origin" msgstr "Y Origin" msgid "z-accuracy" msgstr "Z Accuracy" msgid "z-dimension" msgstr "Z Dimension" msgid "z-offset" msgstr "Z Offset" #~ msgid "720dpi" #~ msgstr "720 ppp" #~ msgid "Enter old password:" #~ msgstr "Ancien mot de passe :" #~ msgid "Enter password again:" #~ msgstr "Confirmez le nouveau mot de passe :" #~ msgid "Enter password:" #~ msgstr "Entrez le nouveau mot de passe :" #~ msgid "New Stylus Color Series" #~ msgstr "Nouvelles série Stylus Color" #~ msgid "New Stylus Photo Series" #~ msgstr "Nouvelles série Stylus Photo" #~ msgid "Purge Jobs" #~ msgstr "Purger les tâches" #~ msgid "Stylus Color Series" #~ msgstr "Série Stylus Color" #~ msgid "Stylus Photo Series" #~ msgstr "Série Stylus Photo" #~ msgid "compression" #~ msgstr "Compression" #~ msgid "compression-accepted" #~ msgstr "Compression Accepted" #~ msgid "compression.compress" #~ msgstr "Compress" #~ msgid "compression.deflate" #~ msgstr "Deflate" #~ msgid "compression.gzip" #~ msgstr "Gzip" #~ msgid "compression.none" #~ msgstr "None" #~ msgid "destination-accesses" #~ msgstr "Destination Accesses" #~ msgid "destination-statuses" #~ msgstr "Destination Statuses" #~ msgid "destination-uris" #~ msgstr "Destination Uris" #~ msgid "document-access" #~ msgstr "Document Access" #~ msgid "document-data-get-interval" #~ msgstr "Document Data Get Interval" #~ msgid "document-data-wait" #~ msgstr "Document Data Wait" #~ msgid "document-format-accepted" #~ msgstr "Document Format Accepted" #~ msgid "document-message" #~ msgstr "Document Message" #~ msgid "document-metadata" #~ msgstr "Document Metadata" #~ msgid "document-name" #~ msgstr "Document Name" #~ msgid "document-number" #~ msgstr "Document Number" #~ msgid "document-password" #~ msgstr "Document Password" #~ msgid "document-preprocessed" #~ msgstr "Document Preprocessed" #~ msgid "fetch-status-message" #~ msgstr "Fetch Status Message" #~ msgid "identify-actions" #~ msgstr "Identify Actions" #~ msgid "identify-actions.display" #~ msgstr "Display" #~ msgid "identify-actions.flash" #~ msgstr "Flash" #~ msgid "identify-actions.sound" #~ msgstr "Sound" #~ msgid "identify-actions.speak" #~ msgstr "Speak" #~ msgid "ipp-attribute-fidelity" #~ msgstr "Attribute Fidelity" #~ msgid "job-authorization-uri" #~ msgstr "Job Authorization URI" #~ msgid "job-destination-spooling-supported.automatic" #~ msgstr "Automatic" #~ msgid "job-destination-spooling-supported.spool" #~ msgstr "Spool" #~ msgid "job-destination-spooling-supported.stream" #~ msgstr "Stream" #~ msgid "job-impressions-col" #~ msgstr "Job Impressions" #~ msgid "job-impressions-estimated" #~ msgstr "Job Impressions Estimated" #~ msgid "job-media-sheets-col" #~ msgstr "Job Media Sheets" #~ msgid "job-pages-per-set" #~ msgstr "Job Pages Per Set" #~ msgid "job-password" #~ msgstr "Job Password" #~ msgid "job-password-repertoire-configured" #~ msgstr "Job Password Repertoire Configured" #~ msgid "job-password-repertoire-supported.iana_us-ascii_any" #~ msgstr "Iana Us Ascii Any" #~ msgid "job-password-repertoire-supported.iana_us-ascii_complex" #~ msgstr "Iana Us Ascii Complex" #~ msgid "job-password-repertoire-supported.iana_us-ascii_digits" #~ msgstr "Iana Us Ascii Digits" #~ msgid "job-password-repertoire-supported.iana_us-ascii_letters" #~ msgstr "Iana Us Ascii Letters" #~ msgid "job-password-repertoire-supported.iana_utf-8_any" #~ msgstr "Iana Utf 8 Any" #~ msgid "job-password-repertoire-supported.iana_utf-8_digits" #~ msgstr "Iana Utf 8 Digits" #~ msgid "job-password-repertoire-supported.iana_utf-8_letters" #~ msgstr "Iana Utf 8 Letters" #~ msgid "job-settable-attributes-supported.job-name" #~ msgstr "Job Name" #~ msgid "job-settable-attributes-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.arithmetic" #~ msgstr "Arithmetic" #~ msgid "jpeg-features-supported.cmyk" #~ msgstr "Cmyk" #~ msgid "jpeg-features-supported.deep" #~ msgstr "Deep" #~ msgid "jpeg-features-supported.hierarchical" #~ msgstr "Hierarchical" #~ msgid "jpeg-features-supported.icc" #~ msgstr "Icc" #~ msgid "jpeg-features-supported.lossless" #~ msgstr "Lossless" #~ msgid "jpeg-features-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.progressive" #~ msgstr "Progressive" #~ msgid "material-type.pla-dissolvable" #~ msgstr "Pla Dissolvable" #~ msgid "media.om_large-photo_200x300mm" #~ msgstr "200 x 300mm" #~ msgid "notify-subscribed-event" #~ msgstr "Notify Event" #~ msgid "operations-supported.10" #~ msgstr "Get-Jobs" #~ msgid "operations-supported.11" #~ msgstr "Get-Printer-Attributes" #~ msgid "operations-supported.12" #~ msgstr "Hold-Job" #~ msgid "operations-supported.13" #~ msgstr "Release-Job" #~ msgid "operations-supported.14" #~ msgstr "Restart-Job" #~ msgid "operations-supported.16" #~ msgstr "Pause-Printer" #~ msgid "operations-supported.17" #~ msgstr "Resume-Printer" #~ msgid "operations-supported.18" #~ msgstr "Purge-Jobs" #~ msgid "operations-supported.19" #~ msgstr "Set-Printer-Attributes" #~ msgid "operations-supported.2" #~ msgstr "Print-Job" #~ msgid "operations-supported.20" #~ msgstr "Set-Job-Attributes" #~ msgid "operations-supported.21" #~ msgstr "Get-Printer-Supported-Values" #~ msgid "operations-supported.22" #~ msgstr "Create-Printer-Subscriptions" #~ msgid "operations-supported.23" #~ msgstr "Create-Job-Subscriptions" #~ msgid "operations-supported.24" #~ msgstr "Get-Subscription-Attributes" #~ msgid "operations-supported.25" #~ msgstr "Get-Subscriptions" #~ msgid "operations-supported.26" #~ msgstr "Renew-Subscription" #~ msgid "operations-supported.27" #~ msgstr "Cancel-Subscription" #~ msgid "operations-supported.28" #~ msgstr "Get-Notifications" #~ msgid "operations-supported.3" #~ msgstr "Print-URI" #~ msgid "operations-supported.34" #~ msgstr "Enable-Printer" #~ msgid "operations-supported.35" #~ msgstr "Disable-Printer" #~ msgid "operations-supported.36" #~ msgstr "Pause-Printer-After-Current-Job" #~ msgid "operations-supported.37" #~ msgstr "Hold-New-Jobs" #~ msgid "operations-supported.38" #~ msgstr "Release-Held-New-Jobs" #~ msgid "operations-supported.39" #~ msgstr "Deactivate-Printer" #~ msgid "operations-supported.4" #~ msgstr "Validate-Job" #~ msgid "operations-supported.40" #~ msgstr "Activate-Printer" #~ msgid "operations-supported.41" #~ msgstr "Restart-Printer" #~ msgid "operations-supported.42" #~ msgstr "Shutdown-Printer" #~ msgid "operations-supported.43" #~ msgstr "Startup-Printer" #~ msgid "operations-supported.44" #~ msgstr "Reprocess-Job" #~ msgid "operations-supported.45" #~ msgstr "Cancel-Current-Job" #~ msgid "operations-supported.46" #~ msgstr "Suspend-Current-Job" #~ msgid "operations-supported.47" #~ msgstr "Resume-Job" #~ msgid "operations-supported.48" #~ msgstr "Promote-Job" #~ msgid "operations-supported.49" #~ msgstr "Schedule-Job-After" #~ msgid "operations-supported.5" #~ msgstr "Create-Job" #~ msgid "operations-supported.51" #~ msgstr "Cancel-Document" #~ msgid "operations-supported.52" #~ msgstr "Get-Document-Attributes" #~ msgid "operations-supported.53" #~ msgstr "Get-Documents" #~ msgid "operations-supported.54" #~ msgstr "Delete-Document" #~ msgid "operations-supported.55" #~ msgstr "Set-Document-Attributes" #~ msgid "operations-supported.56" #~ msgstr "Cancel-Jobs" #~ msgid "operations-supported.57" #~ msgstr "Cancel-My-Jobs" #~ msgid "operations-supported.58" #~ msgstr "Resubmit-Job" #~ msgid "operations-supported.59" #~ msgstr "Close-Job" #~ msgid "operations-supported.6" #~ msgstr "Send-Document" #~ msgid "operations-supported.60" #~ msgstr "Identify-Printer" #~ msgid "operations-supported.61" #~ msgstr "Validate-Document" #~ msgid "operations-supported.62" #~ msgstr "Add-Document-Images" #~ msgid "operations-supported.63" #~ msgstr "Acknowledge-Document" #~ msgid "operations-supported.64" #~ msgstr "Acknowledge-Identify-Printer" #~ msgid "operations-supported.65" #~ msgstr "Acknowledge-Job" #~ msgid "operations-supported.66" #~ msgstr "Fetch-Document" #~ msgid "operations-supported.67" #~ msgstr "Fetch-Job" #~ msgid "operations-supported.68" #~ msgstr "Get-Output-Device-Attributes" #~ msgid "operations-supported.69" #~ msgstr "Update-Active-Jobs" #~ msgid "operations-supported.7" #~ msgstr "Send-URI" #~ msgid "operations-supported.70" #~ msgstr "Deregister-Output-Device" #~ msgid "operations-supported.71" #~ msgstr "Update-Document-Status" #~ msgid "operations-supported.72" #~ msgstr "Update-Job-Status" #~ msgid "operations-supported.73" #~ msgstr "Update-Output-Device-Attributes" #~ msgid "operations-supported.74" #~ msgstr "Get-Next-Document-Data" #~ msgid "operations-supported.8" #~ msgstr "Cancel-Job" #~ msgid "operations-supported.9" #~ msgstr "Get-Job-Attributes" #~ msgid "output-device" #~ msgstr "Output Device" #~ msgid "output-device-job-states" #~ msgstr "Output Device Job States" #~ msgid "output-device-uuid" #~ msgstr "Output Device Uuid" #~ msgid "pdf-features-supported.prc" #~ msgstr "Prc" #~ msgid "pdf-features-supported.u3d" #~ msgstr "U3d" #~ msgid "pdf-versions-supported.adobe-1.3" #~ msgstr "Adobe 1.3" #~ msgid "pdf-versions-supported.adobe-1.4" #~ msgstr "Adobe 1.4" #~ msgid "pdf-versions-supported.adobe-1.5" #~ msgstr "Adobe 1.5" #~ msgid "pdf-versions-supported.adobe-1.6" #~ msgstr "Adobe 1.6" #~ msgid "pdf-versions-supported.iso-15930-1_2001" #~ msgstr "ISO 15930-1:2001" #~ msgid "pdf-versions-supported.iso-15930-3_2002" #~ msgstr "ISO 15930-3:2002" #~ msgid "pdf-versions-supported.iso-15930-4_2003" #~ msgstr "ISO 15930-4:2003" #~ msgid "pdf-versions-supported.iso-15930-6_2003" #~ msgstr "ISO 15930-6:2003" #~ msgid "pdf-versions-supported.iso-15930-7_2010" #~ msgstr "ISO 15930-7:2010" #~ msgid "pdf-versions-supported.iso-15930-8_2010" #~ msgstr "ISO 15930-8:2010" #~ msgid "pdf-versions-supported.iso-16612-2_2010" #~ msgstr "ISO 16612-2:2010" #~ msgid "pdf-versions-supported.iso-19005-1_2005" #~ msgstr "ISO 19005-1:2005" #~ msgid "pdf-versions-supported.iso-19005-2_2011" #~ msgstr "ISO 19005-2:2011" #~ msgid "pdf-versions-supported.iso-19005-3_2012" #~ msgstr "ISO 19005-3:2012" #~ msgid "pdf-versions-supported.iso-32000-1_2008" #~ msgstr "ISO 32000-1:2008" #~ msgid "pdf-versions-supported.none" #~ msgstr "None" #~ msgid "pdf-versions-supported.pwg-5102.3" #~ msgstr "PWG 5102.3" #~ msgid "preferred-attributes" #~ msgstr "Preferred Attributes" #~ msgid "printer-mandatory-job-attributes" #~ msgstr "Printer Mandatory Job Attributes" #~ msgid "profile-uri-actual" #~ msgstr "Actual Profile URI" #~ msgid "requested-attributes.all" #~ msgstr "All" #~ msgid "requested-attributes.document-description" #~ msgstr "Document Description" #~ msgid "requested-attributes.document-template" #~ msgstr "Document Template" #~ msgid "requested-attributes.job-actuals" #~ msgstr "Job Actuals" #~ msgid "requested-attributes.job-description" #~ msgstr "Job Description" #~ msgid "requested-attributes.job-template" #~ msgstr "Job Template" #~ msgid "requested-attributes.printer-description" #~ msgstr "Printer Description" #~ msgid "requested-attributes.subscription-description" #~ msgstr "Subscription Description" #~ msgid "requested-attributes.subscription-template" #~ msgstr "Subscription Template" #~ msgid "requesting-user-name" #~ msgstr "Requesting User Name" #~ msgid "requesting-user-uri" #~ msgstr "Requesting User URI" #~ msgid "x-image-position" #~ msgstr "X Image Position" #~ msgid "x-image-position.center" #~ msgstr "Center" #~ msgid "x-image-position.left" #~ msgstr "Left" #~ msgid "x-image-position.none" #~ msgstr "None" #~ msgid "x-image-position.right" #~ msgstr "Right" #~ msgid "x-image-shift" #~ msgstr "X Image Shift" #~ msgid "x-side1-image-shift" #~ msgstr "X Front Side Image Shift" #~ msgid "x-side2-image-shift" #~ msgstr "X Back Side Image Shift" #~ msgid "y-image-position" #~ msgstr "Y Image Position" #~ msgid "y-image-position.bottom" #~ msgstr "Bottom" #~ msgid "y-image-position.center" #~ msgstr "Center" #~ msgid "y-image-position.none" #~ msgstr "None" #~ msgid "y-image-position.top" #~ msgstr "Top" #~ msgid "y-image-shift" #~ msgstr "Y Image Shift" #~ msgid "y-side1-image-shift" #~ msgstr "Y Front Side Image Shift" #~ msgid "y-side2-image-shift" #~ msgstr "Y Back Side Image Shift" cups-2.2.7/locale/cups_it.po000664 000765 000024 00001216577 13255074424 016443 0ustar00msweetstaff000000 000000 # # "$Id$" # # Message catalog template for CUPS. # # Copyright 2007-2012 by Apple Inc. # Copyright 2005-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # # Notes for Translators: # # The "checkpo" program located in the "locale" source directory can be used # to verify that your translations do not introduce formatting errors or other # problems. Run with: # # cd locale # ./checkpo cups_LL.po # # where "LL" is your locale. # # Giovanni Scafora , 2013. msgid "" msgstr "" "Project-Id-Version: CUPS 1.6\n" "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n" "POT-Creation-Date: 2018-03-19 18:36-0400\n" "PO-Revision-Date: 2013-07-14 12:00+0200\n" "Last-Translator: Giovanni Scafora \n" "Language-Team: Arch Linux Italian Team \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgid "\t\t(all)" msgstr "\t\t(tutti)" msgid "\t\t(none)" msgstr "\t\t(nessuno)" #, c-format msgid "\t%d entries" msgstr "\t%d voci" #, c-format msgid "\t%s" msgstr "\t%s" msgid "\tAfter fault: continue" msgstr "\tDopo un errore: continua" #, c-format msgid "\tAlerts: %s" msgstr "\tAvvisi: %s" msgid "\tBanner required" msgstr "\tBanner richiesto" msgid "\tCharset sets:" msgstr "\tSet di caratteri:" msgid "\tConnection: direct" msgstr "\tConnessione: diretta" msgid "\tConnection: remote" msgstr "\tConnessione: remota" msgid "\tContent types: any" msgstr "\tTipi di contenuto: qualsiasi" msgid "\tDefault page size:" msgstr "\tDimensione predefinite della pagina:" msgid "\tDefault pitch:" msgstr "\tTono predefinito:" msgid "\tDefault port settings:" msgstr "\tImpostazioni predefinite della porta:" #, c-format msgid "\tDescription: %s" msgstr "\tDescrizione: %s" msgid "\tForm mounted:" msgstr "\tModulo installato:" msgid "\tForms allowed:" msgstr "\tModuli consentiti:" #, c-format msgid "\tInterface: %s.ppd" msgstr "\tInterfaccia: %s.ppd" #, c-format msgid "\tInterface: %s/ppd/%s.ppd" msgstr "\tInterfaccia: %s/ppd/%s.ppd" #, c-format msgid "\tLocation: %s" msgstr "\tPosizione: %s" msgid "\tOn fault: no alert" msgstr "\tIn caso di errore: nessun avviso" msgid "\tPrinter types: unknown" msgstr "\tTipi di stampanti: sconosciuto" #, c-format msgid "\tStatus: %s" msgstr "\tStato: %s" msgid "\tUsers allowed:" msgstr "\tUtenti autorizzati:" msgid "\tUsers denied:" msgstr "\tUtenti non autorizzati:" msgid "\tdaemon present" msgstr "\tdemone presente" msgid "\tno entries" msgstr "\tnessuna voce" #, c-format msgid "\tprinter is on device '%s' speed -1" msgstr "\tla stampante è sul dispositivo '%s' velocità -1" msgid "\tprinting is disabled" msgstr "\tla stampa è disabilitata" msgid "\tprinting is enabled" msgstr "\tla stampa è abilitata" #, c-format msgid "\tqueued for %s" msgstr "\tin coda per %s" msgid "\tqueuing is disabled" msgstr "\tla coda è disabilitata" msgid "\tqueuing is enabled" msgstr "\tla coda è abilitata" msgid "\treason unknown" msgstr "\tmotivo sconosciuto" msgid "" "\n" " DETAILED CONFORMANCE TEST RESULTS" msgstr "" "\n" " RISULTATI DETTAGLIATI DEL TEST DI CONFORMITÀ" msgid " Ignore specific warnings." msgstr " Ignora avvisi specifici." msgid " Issue warnings instead of errors." msgstr "" " Avvisa in caso di problemi invece degli errori." msgid " REF: Page 15, section 3.1." msgstr " RIF: pagina 15, sezione 3.1." msgid " REF: Page 15, section 3.2." msgstr " RIF: pagina 15, sezione 3.2." msgid " REF: Page 19, section 3.3." msgstr " RIF: pagina 19, sezione 3.3." msgid " REF: Page 20, section 3.4." msgstr " RIF: pagina 20, sezione 3.4." msgid " REF: Page 27, section 3.5." msgstr " RIF: pagina 27, sezione 3.5." msgid " REF: Page 42, section 5.2." msgstr " RIF: pagina 42, sezione 5.2." msgid " REF: Pages 16-17, section 3.2." msgstr " RIF: pagine 16-17, sezione 3.2." msgid " REF: Pages 42-45, section 5.2." msgstr " RIF: pagine 42-45, sezione 5.2." msgid " REF: Pages 45-46, section 5.2." msgstr " RIF: pagine 45-46, sezione 5.2." msgid " REF: Pages 48-49, section 5.2." msgstr " RIF: pagine 48-49, sezione 5.2." msgid " REF: Pages 52-54, section 5.2." msgstr " RIF: pagine 52-54, sezione 5.2." #, c-format msgid " %-39.39s %.0f bytes" msgstr " %-39.39s %.0f byte" #, c-format msgid " PASS Default%s" msgstr " PASS Default%s" msgid " PASS DefaultImageableArea" msgstr " PASS DefaultImageableArea" msgid " PASS DefaultPaperDimension" msgstr " PASS DefaultPaperDimension" msgid " PASS FileVersion" msgstr " PASS FileVersion" msgid " PASS FormatVersion" msgstr " PASS FormatVersion" msgid " PASS LanguageEncoding" msgstr " PASS LanguageEncoding" msgid " PASS LanguageVersion" msgstr " PASS LanguageVersion" msgid " PASS Manufacturer" msgstr " PASS Manufacturer" msgid " PASS ModelName" msgstr " PASS ModelName" msgid " PASS NickName" msgstr " PASS NickName" msgid " PASS PCFileName" msgstr " PASS PCFileName" msgid " PASS PSVersion" msgstr " PASS PSVersion" msgid " PASS PageRegion" msgstr " PASS PageRegion" msgid " PASS PageSize" msgstr " PASS PageSize" msgid " PASS Product" msgstr " PASS Product" msgid " PASS ShortNickName" msgstr " PASS ShortNickName" #, c-format msgid " WARN %s has no corresponding options." msgstr " WARN %s non ha opzioni corrispondenti." #, c-format msgid "" " WARN %s shares a common prefix with %s\n" " REF: Page 15, section 3.2." msgstr "" " WARN %s condivide un prefisso comune con %s\n" " RIF: pagina 15, sezione 3.2." #, c-format msgid "" " WARN Duplex option keyword %s may not work as expected and should " "be named Duplex.\n" " REF: Page 122, section 5.17" msgstr "" " WARN La parola chiave dell'opzione duplex %s potrebbe non " "funzionare come previsto e dovrebbe essere chiamata Duplex.\n" " RIF: pagina 122, sezione 5.17" msgid " WARN File contains a mix of CR, LF, and CR LF line endings." msgstr "" " WARN Il file contiene un insieme di righe che terminano con CR, " "LF e CR LF." msgid "" " WARN LanguageEncoding required by PPD 4.3 spec.\n" " REF: Pages 56-57, section 5.3." msgstr "" " WARN LanguageEncoding è richiesto dalle specifiche PPD 4.3.\n" " RIF: pagine 56-57, sezione 5.3." #, c-format msgid " WARN Line %d only contains whitespace." msgstr " WARN La riga %d contiene solo spazi." msgid "" " WARN Manufacturer required by PPD 4.3 spec.\n" " REF: Pages 58-59, section 5.3." msgstr "" " WARN Manufacturer è richiesto dalle specifiche PPD 4.3.\n" " RIF: pagine 58-59, sezione 5.3." msgid "" " WARN Non-Windows PPD files should use lines ending with only LF, " "not CR LF." msgstr "" " WARN I file PPD per sistemi diversi da Windows dovrebbero " "utilizzare solo righe terminanti con LF e non con CR LF." #, c-format msgid "" " WARN Obsolete PPD version %.1f.\n" " REF: Page 42, section 5.2." msgstr "" " WARN Versione obsoleta di PPD %.1f.\n" " RIF: pagina 42, sezione 5.2." msgid "" " WARN PCFileName longer than 8.3 in violation of PPD spec.\n" " REF: Pages 61-62, section 5.3." msgstr "" " WARN PCFileName più lungo di 8.3 vìola le specifiche PPD.\n" " RIF: pagine 61-62, sezione 5.3." msgid "" " WARN PCFileName should contain a unique filename.\n" " REF: Pages 61-62, section 5.3." msgstr "" " WARN PCFileName dovrebbe contenere un nome del file unico.\n" " RIF: pagine 61-62, sezione 5.3." msgid "" " WARN Protocols contains PJL but JCL attributes are not set.\n" " REF: Pages 78-79, section 5.7." msgstr "" " WARN Il protocollo contiene PJL ma gli attributi di JCL non sono " "impostati.\n" " RIF: pagine 78-79, sezione 5.7." msgid "" " WARN Protocols contains both PJL and BCP; expected TBCP.\n" " REF: Pages 78-79, section 5.7." msgstr "" " WARN Il protocollo contiene entrambi PJL e BCP; è previsto TBCP.\n" " RIF: pagine 78-79, sezione 5.7." msgid "" " WARN ShortNickName required by PPD 4.3 spec.\n" " REF: Pages 64-65, section 5.3." msgstr "" " WARN ShortNickName richiesto dalle specifiche di PPD 4.3.\n" " RIF: pagine 64-65, sezione 5.3." msgid " cupsaddsmb [options] -a" msgstr " cupsaddsmb [opzioni] -a" msgid " cupstestdsc [options] -" msgstr " cupstestdsc [opzioni] -" msgid " program | cupstestppd [options] -" msgstr " programma | cupstestppd [opzioni] -" #, c-format msgid "" " %s \"%s %s\" conflicts with \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." msgstr "" " %s \"%s %s\" confligge con \"%s %s\"\n" " (vincolo=\"%s %s %s %s\")." #, c-format msgid " %s %s %s does not exist." msgstr " %s %s %s non esiste." #, c-format msgid " %s %s file \"%s\" has the wrong capitalization." msgstr " %s %s file \"%s\" ha la capitalizzazione sbagliata." #, c-format msgid "" " %s Bad %s choice %s.\n" " REF: Page 122, section 5.17" msgstr "" " %s errata %s scelta %s.\n" " RIF: pagina 122, sezione 5.17" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s." msgstr "" " %s UTF-8 non è valido \"%s\" la string di traduzione dell'opzione %s, " "scelta %s." #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s." msgstr "" " %s UTF-8 non è valido \"%s\" la stringa di traduzione dell'opzione %s." #, c-format msgid " %s Bad cupsFilter value \"%s\"." msgstr " %s valore di cupsFilter non è valido \"%s\"." #, c-format msgid " %s Bad cupsFilter2 value \"%s\"." msgstr " %s il valore di cupsFilter2 non è valido \"%s\"." #, c-format msgid " %s Bad cupsICCProfile %s." msgstr " %s il valore di cupsICCProfile non è valido %s." #, c-format msgid " %s Bad cupsPreFilter value \"%s\"." msgstr " %s il valore di cupsPreFilter non è valido \"%s\"." #, c-format msgid " %s Bad cupsUIConstraints %s: \"%s\"" msgstr " %s il valore di cupsUIConstraints non è valido %s: \"%s\"" #, c-format msgid " %s Bad language \"%s\"." msgstr " %s la lingua non è valida \"%s\"." #, c-format msgid " %s Bad permissions on %s file \"%s\"." msgstr " %s permessi errati sul file %s \"%s\"." #, c-format msgid " %s Bad spelling of %s - should be %s." msgstr " %s ortografia errata di %s - dovrebbe essere %s." #, c-format msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID." msgstr "" " %s non è possibile passare entrambi APScanAppPath e APScanAppBundleID." #, c-format msgid " %s Default choices conflicting." msgstr " %s le scelte predefinite confliggono." #, c-format msgid " %s Empty cupsUIConstraints %s" msgstr " %s cupsUIConstraints è vuota %s" #, c-format msgid " %s Missing \"%s\" translation string for option %s, choice %s." msgstr "" " %s manca \"%s\" la stringa di traduzione dell'opzione %s, scelta %s." #, c-format msgid " %s Missing \"%s\" translation string for option %s." msgstr " %s manca \"%s\" la stringa di traduzione dell'opzione %s." #, c-format msgid " %s Missing %s file \"%s\"." msgstr " %s manca il file %s \"%s\"." #, c-format msgid "" " %s Missing REQUIRED PageRegion option.\n" " REF: Page 100, section 5.14." msgstr "" " %s manca l'opzione RICHIESTA PageRegion.\n" " RIF: pagina 100, sezione 5.14." #, c-format msgid "" " %s Missing REQUIRED PageSize option.\n" " REF: Page 99, section 5.14." msgstr "" " %s manca l'opzione RICHIESTA PageSize.\n" " RIF: pagina 99, sezione 5.14." #, c-format msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." msgstr " %s manca la scelta *%s %s in UIConstraints \"*%s %s *%s %s\"." #, c-format msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" msgstr " %s manca la scelta *%s %s in cupsUIConstraints %s: \"%s\"" #, c-format msgid " %s Missing cupsUIResolver %s" msgstr " %s manca cupsUIResolver %s" #, c-format msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"." msgstr " %s manca l'opzione %s in UIConstraints \"*%s %s *%s %s\"." #, c-format msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\"" msgstr " %s manca l'opzione %s in cupsUIConstraints %s: \"%s\"" #, c-format msgid " %s No base translation \"%s\" is included in file." msgstr " %s Nessuna traduzione base \"%s\" è inclusa nel file." #, c-format msgid "" " %s REQUIRED %s does not define choice None.\n" " REF: Page 122, section 5.17" msgstr "" " %s RICHIESTA %s non definisce la scelta None.\n" " RIF: pagina 122, sezione 5.17" #, c-format msgid " %s Size \"%s\" defined for %s but not for %s." msgstr " %s dimensione \"%s\" definita per %s ma non per %s." #, c-format msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)." msgstr "" " %s dimensione \"%s\" presenta delle dimensioni inaspettate (%gx%g)." #, c-format msgid " %s Size \"%s\" should be \"%s\"." msgstr " %s dimensione \"%s\" dovrebbe essere \"%s\"." #, c-format msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"." msgstr "" " %s dimensione \"%s\" dovrebbe essere il nome standard di Adobe \"%s\"." #, c-format msgid " %s cupsICCProfile %s hash value collides with %s." msgstr " %s cupsICCProfile %s il valore dell'hash collide con %s." #, c-format msgid " %s cupsUIResolver %s causes a loop." msgstr " %s cupsUIResolver %s causa un loop." #, c-format msgid "" " %s cupsUIResolver %s does not list at least two different options." msgstr " %s cupsUIResolver %s non elenca almeno due opzioni differenti." #, c-format msgid "" " **FAIL** %s must be 1284DeviceID\n" " REF: Page 72, section 5.5" msgstr "" " **FAIL** %s deve essere 1284DeviceID\n" " RIF: pagina 72, sezione 5.5" #, c-format msgid "" " **FAIL** Bad Default%s %s\n" " REF: Page 40, section 4.5." msgstr "" " **FAIL** Valore predefinito errato%s %s\n" " RIF: pagina 40, sezione 4.5." #, c-format msgid "" " **FAIL** Bad DefaultImageableArea %s\n" " REF: Page 102, section 5.15." msgstr "" " **FAIL** DefaultImageableArea non è valido %s\n" " RIF: pagina 102, sezione 5.15." #, c-format msgid "" " **FAIL** Bad DefaultPaperDimension %s\n" " REF: Page 103, section 5.15." msgstr "" " **FAIL** DefaultPaperDimension non è valido %s\n" " RIF: pagina 103, sezione 5.15." #, c-format msgid "" " **FAIL** Bad FileVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" " **FAIL** FileVersion non è valido \"%s\"\n" " RIF: pagina 56, sezione 5.3." #, c-format msgid "" " **FAIL** Bad FormatVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" " **FAIL** FormatVersion non è valido \"%s\"\n" " RIF: pagina 56, sezione 5.3." msgid "" " **FAIL** Bad JobPatchFile attribute in file\n" " REF: Page 24, section 3.4." msgstr "" " **FAIL** l'attributo di JobPatchFile nel file non è valido\n" " RIF: pagina 24, sezione 3.4." #, c-format msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1." msgstr "" " **FAIL** LanguageEncoding non è valido %s - deve essere ISOLatin1." #, c-format msgid " **FAIL** Bad LanguageVersion %s - must be English." msgstr " **FAIL** LanguageVersion non è valido %s - deve essere Inglese." #, c-format msgid "" " **FAIL** Bad Manufacturer (should be \"%s\")\n" " REF: Page 211, table D.1." msgstr "" " **FAIL** Manufacturer non è valido (dovrebbe essere \"%s\")\n" " RIF: pagina 211, tabella D.1." #, c-format msgid "" " **FAIL** Bad ModelName - \"%c\" not allowed in string.\n" " REF: Pages 59-60, section 5.3." msgstr "" " **FAIL** ModelName non è valido - \"%c\" non consentito nella " "stringa.\n" " RIF: pagine 59-60, sezione 5.3." msgid "" " **FAIL** Bad PSVersion - not \"(string) int\".\n" " REF: Pages 62-64, section 5.3." msgstr "" " **FAIL** PSVersion non è valido - non è una \"(stringa) intera\".\n" " RIF: pagine 62-64, sezione 5.3." msgid "" " **FAIL** Bad Product - not \"(string)\".\n" " REF: Page 62, section 5.3." msgstr "" " **FAIL** Product non è valido - non è una \"(stringa)\".\n" " RIF: pagina 62, sezione 5.3." msgid "" " **FAIL** Bad ShortNickName - longer than 31 chars.\n" " REF: Pages 64-65, section 5.3." msgstr "" " **FAIL** ShortNickName non è valido - più lungo di 31 caratteri.\n" " RIF: pagine 64-65, sezione 5.3." #, c-format msgid "" " **FAIL** Bad option %s choice %s\n" " REF: Page 84, section 5.9" msgstr "" " **FAIL** L'opzione %s non è valida scelta %s\n" " RIF: pagina 84, sezione 5.9" #, c-format msgid " **FAIL** Default option code cannot be interpreted: %s" msgstr "" " **FAIL** Il codice dell'opzione predefinita non può essere " "interpretato: %s" #, c-format msgid "" " **FAIL** Default translation string for option %s choice %s contains " "8-bit characters." msgstr "" " **FAIL** La stringa di traduzione predefinita dell'opzione %s scelta " "%s contiene caratteri a 8-bit." #, c-format msgid "" " **FAIL** Default translation string for option %s contains 8-bit " "characters." msgstr "" " **FAIL** La stringa di traduzione predefinita dell'opzione %s " "contiene caratteri a 8-bit." #, c-format msgid " **FAIL** Group names %s and %s differ only by case." msgstr " **FAIL** I nomi dei gruppi %s e %s differiscono solo per caso." #, c-format msgid " **FAIL** Multiple occurrences of option %s choice name %s." msgstr "" " **FAIL** Occorrenze multiple dell'opzione %s nome della scelta %s." #, c-format msgid " **FAIL** Option %s choice names %s and %s differ only by case." msgstr "" " **FAIL** I nomi delle scelte %s e %s dell'opzione %s differiscono " "solo per caso." #, c-format msgid " **FAIL** Option names %s and %s differ only by case." msgstr "" " **FAIL** I nomi delle opzioni %s e %s differiscono solo per caso." #, c-format msgid "" " **FAIL** REQUIRED Default%s\n" " REF: Page 40, section 4.5." msgstr "" " **FAIL** RICHIESTA predefinita%s\n" " RIF: pagina 40, sezione 4.5." msgid "" " **FAIL** REQUIRED DefaultImageableArea\n" " REF: Page 102, section 5.15." msgstr "" " **FAIL** RICHIESTA DefaultImageableArea\n" " RIF: pagina 102, sezione 5.15." msgid "" " **FAIL** REQUIRED DefaultPaperDimension\n" " REF: Page 103, section 5.15." msgstr "" " **FAIL** RICHIESTA DefaultPaperDimension\n" " RIF: pagina 103, sezione 5.15." msgid "" " **FAIL** REQUIRED FileVersion\n" " REF: Page 56, section 5.3." msgstr "" " **FAIL** RICHIESTA FileVersion\n" " RIF: pagina 56, sezione 5.3." msgid "" " **FAIL** REQUIRED FormatVersion\n" " REF: Page 56, section 5.3." msgstr "" " **FAIL** RICHIESTA FormatVersion\n" " RIF: pagina 56, sezione 5.3." #, c-format msgid "" " **FAIL** REQUIRED ImageableArea for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 102, section 5.15." msgstr "" " **FAIL** RICHIESTA ImageableArea per PageSize %s\n" " RIF: pagina 41, sezione 5.\n" " RIF: pagina 102, sezione 5.15." msgid "" " **FAIL** REQUIRED LanguageEncoding\n" " REF: Pages 56-57, section 5.3." msgstr "" " **FAIL** RICHIESTA LanguageEncoding\n" " RIF: pagina 56-57, sezione 5.3." msgid "" " **FAIL** REQUIRED LanguageVersion\n" " REF: Pages 57-58, section 5.3." msgstr "" " **FAIL** RICHIESTA LanguageVersion\n" " RIF: pagine 57-58, sezione 5.3." msgid "" " **FAIL** REQUIRED Manufacturer\n" " REF: Pages 58-59, section 5.3." msgstr "" " **FAIL** RICHIESTA Manufacturer\n" " RIF: pagine 58-59, sezione 5.3." msgid "" " **FAIL** REQUIRED ModelName\n" " REF: Pages 59-60, section 5.3." msgstr "" " **FAIL** RICHIESTA ModelName\n" " RIF: pagine 59-60, sezione 5.3." msgid "" " **FAIL** REQUIRED NickName\n" " REF: Page 60, section 5.3." msgstr "" " **FAIL** RICHIESTA NickName\n" " RIF: pagina 60, sezione 5.3." msgid "" " **FAIL** REQUIRED PCFileName\n" " REF: Pages 61-62, section 5.3." msgstr "" " **FAIL** RICHIESTA PCFileName\n" " RIF: pagine 61-62, sezione 5.3." msgid "" " **FAIL** REQUIRED PSVersion\n" " REF: Pages 62-64, section 5.3." msgstr "" " **FAIL** RICHIESTA PSVersion\n" " RIF: pagine 62-64, sezione 5.3." msgid "" " **FAIL** REQUIRED PageRegion\n" " REF: Page 100, section 5.14." msgstr "" " **FAIL** RICHIESTA PageRegion\n" " RIF: pagina 100, sezione 5.14." msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Page 41, section 5.\n" " REF: Page 99, section 5.14." msgstr "" " **FAIL** RICHIESTA PageSize\n" " RIF: pagina 41, sezione 5.\n" " RIF: pagina 99, sezione 5.14." msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Pages 99-100, section 5.14." msgstr "" " **FAIL** RICHIESTA PageSize\n" " RIF: pagine 99-100, sezione 5.14." #, c-format msgid "" " **FAIL** REQUIRED PaperDimension for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 103, section 5.15." msgstr "" " **FAIL** RICHIESTA PaperDimension per PageSize %s\n" " RIF: pagina 41, sezione 5.\n" " RIF: pagina 103, sezione 5.15." msgid "" " **FAIL** REQUIRED Product\n" " REF: Page 62, section 5.3." msgstr "" " **FAIL** RICHIESTA Product\n" " RIF: pagina 62, sezione 5.3." msgid "" " **FAIL** REQUIRED ShortNickName\n" " REF: Page 64-65, section 5.3." msgstr "" " **FAIL** RICHIESTA ShortNickName\n" " RIF: pagina 64-65, sezione 5.3." #, c-format msgid " **FAIL** Unable to open PPD file - %s on line %d." msgstr " **FAIL** Non è possibile aprire il file PPD - %s alla riga %d." #, c-format msgid " %d ERRORS FOUND" msgstr " %d SONO STATI TROVATI DEGLI ERRORI" msgid " -h Show program usage" msgstr " -h Mostra l'uso del programma" #, c-format msgid "" " Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:" msgstr "" " Non è valido %%%%BoundingBox: alla riga %d.\n" " RIF: pagina 39, %%%%BoundingBox:" #, c-format msgid "" " Bad %%%%Page: on line %d.\n" " REF: Page 53, %%%%Page:" msgstr "" " Non è valido %%%%Page: alla riga %d.\n" " RIF: pagina 53, %%%%Page:" #, c-format msgid "" " Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:" msgstr "" " Non è valido %%%%Pages: alla riga %d.\n" " RIF: pagina 43, %%%%Pages:" #, c-format msgid "" " Line %d is longer than 255 characters (%d).\n" " REF: Page 25, Line Length" msgstr "" " La riga %d è più lunga di 255 caratteri (%d).\n" " RIF: pagina 25, Lunghezza della riga" msgid "" " Missing %!PS-Adobe-3.0 on first line.\n" " REF: Page 17, 3.1 Conforming Documents" msgstr "" " Manca %!PS-Adobe-3.0 nella prima riga.\n" " RIF: pagina 17, 3.1 Documenti conformi" #, c-format msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments" msgstr "" " Manca il commento %%EndComments. RIF: pagina 41, %%EndComments" #, c-format msgid "" " Missing or bad %%BoundingBox: comment.\n" " REF: Page 39, %%BoundingBox:" msgstr "" " Manca o non è valido %%BoundingBox: commento.\n" " RIF: pagina 39, %%BoundingBox:" #, c-format msgid "" " Missing or bad %%Page: comments.\n" " REF: Page 53, %%Page:" msgstr "" " Manca o non è valido %%Page: commenti.\n" " RIF: pagina 53, %%Page:" #, c-format msgid "" " Missing or bad %%Pages: comment.\n" " REF: Page 43, %%Pages:" msgstr "" " Manca o non è valido %%Pages: commento.\n" " RIF: pagina 43, %%Pages:" msgid " NO ERRORS FOUND" msgstr " NON SONO STATI TROVATI ERRORI" #, c-format msgid " Saw %d lines that exceeded 255 characters." msgstr " Tagliare %d righe che hanno superato i 255 caratteri." #, c-format msgid " Too many %%BeginDocument comments." msgstr " Troppi %%BeginDocument commenti." #, c-format msgid " Too many %%EndDocument comments." msgstr " Troppi %%EndDocument commenti." msgid " Warning: file contains binary data." msgstr " Attenzione: il file contiene dei dati binari." #, c-format msgid " Warning: no %%EndComments comment in file." msgstr " Attenzione: nessun %%EndComments commento nel file." #, c-format msgid " Warning: obsolete DSC version %.1f in file." msgstr " Attenzione: versione obsoleta di DSC %.1f nel file." msgid " ! expression Unary NOT of expression." msgstr " ! expression Unario NON di espressione." msgid " ( expressions ) Group expressions." msgstr " ( espressioni ) Gruppo di espressioni." msgid " --[no-]debug-logging Turn debug logging on/off." msgstr " --[no-]debug-logging Attiva/disattiva il logging del debug." msgid " --[no-]remote-admin Turn remote administration on/off." msgstr " --[no-]remote-admin Attiva/disattiva l'amministrazione remota." msgid " --[no-]remote-any Allow/prevent access from the Internet." msgstr " --[no-]remote-any Consente/previene l'accesso da Internet." msgid " --[no-]share-printers Turn printer sharing on/off." msgstr "" " --[no-]share-printers Attiva/disattiva la condivisione della stampante." msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job." msgstr "" " --[no-]user-cancel-any Consente/vieta che gli utenti eliminino le stampe." msgid " --cr End lines with CR (Mac OS 9)." msgstr " --cr Termina righe con CR (Mac OS 9)." msgid " --crlf End lines with CR + LF (Windows)." msgstr " --crlf Termina righe con CR + LF (Windows)." msgid " --domain regex Match domain to regular expression." msgstr "" " --domain regex Corrispondenza del dominio con l'espressione " "regolare." msgid "" " --exec utility [argument ...] ;\n" " Execute program if true." msgstr "" " --exec utility [argument ...] ;\n" " Esegue il programma se vero." msgid " --false Always false." msgstr " --false Sempre falso." msgid " --help Show help." msgstr "" msgid " --help Show this help." msgstr " --help Mostra questo aiuto." msgid " --host regex Match hostname to regular expression." msgstr "" " --host regex Corrispondenza dell'hostname con l'espressione " "regolare." msgid " --lf End lines with LF (UNIX/Linux/macOS)." msgstr "" msgid " --list-filters List filters that will be used." msgstr "" msgid " --local True if service is local." msgstr " --local Vero se il servizio è locale." msgid " --ls List attributes." msgstr " --ls Elenco attributi." msgid " --name regex Match service name to regular expression." msgstr "" " --name regex Corrispondenza del nome del servizio con " "l'espressione regolare." msgid " --not expression Unary NOT of expression." msgstr " --not expression Unario NON di espressione." msgid " --path regex Match resource path to regular expression." msgstr "" " --path regex Corrispondenza del path della risorsa con " "l'espressione regolare." msgid " --port number[-number] Match port to number or range." msgstr "" " --port number[-numero] Corrispondenza della porta con il numero o con " "l'intervallo." msgid " --print Print URI if true." msgstr " --print Stampa URI se vero." msgid " --print-name Print service name if true." msgstr " --print-name Stampa il nome del servizio se vero." msgid " --quiet Quietly report match via exit code." msgstr "" " --quiet Riporta silenziosamente la corrispondenza tramite " "il codice d'uscita." msgid " --remote True if service is remote." msgstr " --remote Vero se il servizio è remoto." msgid "" " --stop-after-include-error\n" " Stop tests after a failed INCLUDE." msgstr "" msgid " --true Always true." msgstr " --true Sempre vero." msgid " --txt key True if the TXT record contains the key." msgstr " --txt key Vero se il record TXT contiene la chiave." msgid " --txt-* regex Match TXT record key to regular expression." msgstr "" " --txt-* regex Corrispondenza della chiave del record TXT con " "l'espressione regolare." msgid " --uri regex Match URI to regular expression." msgstr "" " --uri regex Corrispondenza dell'URI con l'espressione regolare." msgid " --version Show program version." msgstr " --version Mostra la versione del programma." msgid " --version Show version." msgstr "" msgid " -4 Connect using IPv4." msgstr " -4 Connetti utilizzando IPv4." msgid " -6 Connect using IPv6." msgstr " -6 Connetti utilizzando IPv6." msgid " -C Send requests using chunking (default)." msgstr "" " -C Invia richieste utilizzando la suddivisione in " "blocchi (predefinito)." msgid " -D Remove the input file when finished." msgstr "" " -D Rimuovi il file di input una volta terminato." msgid " -D name=value Set named variable to value." msgstr " -D name=value Imposta la variabile chiamata al valore." msgid " -E Encrypt the connection." msgstr " -E Crittografa la connessione." msgid "" " -E Test with encryption using HTTP Upgrade to TLS." msgstr "" msgid "" " -F Run in the foreground but detach from console." msgstr " -F Avvia in foreground ma esce dalla console." msgid " -H samba-server Use the named SAMBA server." msgstr " -H samba-server Utilizza il server SAMBA." msgid " -I Ignore errors." msgstr " -I Ignora gli errori." msgid " -I include-dir Add include directory to search path." msgstr "" " -I include-dir Aggiunge la directory include al percorso della " "ricerca." msgid " -I {filename,filters,none,profiles}" msgstr " -I {file,filtri,nessuno,profili}" msgid " -L Send requests using content-length." msgstr " -L Invia richieste utilizzando content-length." msgid "" " -P filename.plist Produce XML plist to a file and test report to " "standard output." msgstr "" msgid " -P filename.ppd Set PPD file." msgstr " -P filename.ppd Imposta il file PPD." msgid " -P number[-number] Match port to number or range." msgstr "" " -P number[-number] Corrispondenza della porta con il numero o con " "l'intervallo." msgid " -R root-directory Set alternate root." msgstr " -R root-directory Imposta una root alternativa." msgid " -S Test with encryption using HTTPS." msgstr "" msgid " -T seconds Set the browse timeout in seconds." msgstr " -T seconds Imposta il timeout in secondi." msgid " -T seconds Set the receive/send timeout in seconds." msgstr "" " -T seconds Imposta il timeout della ricezione/invio in " "secondi." msgid " -U username Specify username." msgstr " -U username Specifica l'username." msgid " -V version Set default IPP version." msgstr " -V version Imposta la versione predefinita di IPP." msgid "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgstr "" " -W {tutto,nessuno,vincoli,predefiniti,duplex,filtri,profili,dimensioni," "traduzioni}" msgid " -X Produce XML plist instead of plain text." msgstr "" " -X Produce una plist XML invece di un testo normale." msgid " -a Export all printers." msgstr " -a Esporta tutte le stampanti." msgid " -c Produce CSV output." msgstr "" msgid " -c catalog.po Load the specified message catalog." msgstr "" " -c catalog.po Carica il catalogo del messaggio specificato." msgid " -c cups-files.conf Set cups-files.conf file to use." msgstr "" msgid " -c cupsd.conf Set cupsd.conf file to use." msgstr " -c cupsd.conf Imposta il file cupsd.conf da utilizzare." msgid " -d name=value Set named variable to value." msgstr " -d name=value Imposta la variabile specificata al valore." msgid " -d output-dir Specify the output directory." msgstr " -d output-dir Specifica la directory di output." msgid " -d printer Use the named printer." msgstr " -d printer Utilizza la stampante specificata." msgid " -d regex Match domain to regular expression." msgstr "" " -d regex Corrispondenza del dominio con l'espressione " "regolare." msgid " -e Use every filter from the PPD file." msgstr " -e Utilizza tutti i filtri dal file PPD." msgid " -f Run in the foreground." msgstr " -f Avvia in foreground." msgid " -f filename Set default request filename." msgstr " -f filename Imposta il file predefinito richiesto." msgid " -h Show this usage message." msgstr " -h Mostra questo messaggio di utilizzo." msgid " -h Validate HTTP response headers." msgstr "" msgid " -h regex Match hostname to regular expression." msgstr "" " -h regex Corrispondenza dell'hostname con l'espressione " "regolare." msgid " -h server[:port] Specify server address." msgstr " -h server[:porta] Specifica l'indirizzo del server." msgid " -i mime/type Set input MIME type (otherwise auto-typed)." msgstr "" " -i mime/type Imposta il tipo di MIME di input (altrimenti auto-" "typed)." msgid "" " -i seconds Repeat the last file with the given time interval." msgstr "" " -i secondi Ripeti l'ultimo file con il dato intervallo di " "tempo." msgid "" " -j job-id[,N] Filter file N from the specified job (default is " "file 1)." msgstr "" " -j job-id[,N] File del filtro N dal processo specificato (quello " "predefinito è il file 1)." msgid " -l List attributes." msgstr " -l Elenca gli attributi." msgid " -l Produce plain text output." msgstr "" msgid " -l Run cupsd on demand." msgstr "" msgid " -l lang[,lang,...] Specify the output language(s) (locale)." msgstr " -l lang[,lang,...] Specifica la lingua(e) (locale) di output." msgid " -m Use the ModelName value as the filename." msgstr " -m Utilizza il valore di ModelName come file." msgid "" " -m mime/type Set output MIME type (otherwise application/pdf)." msgstr "" " -m mime/type Imposta il tipo di MIME di output (altrimenti " "application/pdf)." msgid " -n copies Set number of copies." msgstr " -n copies Imposta il numero di copie." msgid "" " -n count Repeat the last file the given number of times." msgstr "" " -n count Ripete un numero di volte l'ultimo file dato." msgid " -n regex Match service name to regular expression." msgstr "" " -n regex Corrispondenza del nome del servizio con " "l'espressione regolare." msgid "" " -o filename.drv Set driver information file (otherwise ppdi.drv)." msgstr " -o filename.drv Imposta un driver (altrimenti ppdi.drv)." msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)." msgstr "" " -o filename.ppd[.gz] Imposta il file di output (altrimenti stdout)." msgid " -o name=value Set option(s)." msgstr " -o nome=valore Imposta opzione(i)." msgid " -p Print URI if true." msgstr " -p Stampa l'URI se vero." msgid " -p filename.ppd Set PPD file." msgstr " -p filename.ppd Imposta il file PPD." msgid " -q Quietly report match via exit code." msgstr "" " -q Riporta silenziosamente la corrispondenza tramite " "il codice d'uscita." msgid " -q Run silently." msgstr " -q Avvia silenziosamente." msgid " -r True if service is remote." msgstr " -r Vero se il servizio è remoto." msgid " -r Use 'relaxed' open mode." msgstr " -r Utilizza la modalità di apertura 'relaxed'." msgid " -s Print service name if true." msgstr " -s Stampa il nome del servizio se è vero." msgid " -s cups-files.conf Set cups-files.conf file to use." msgstr "" msgid " -t Produce a test report." msgstr " -t Produce un rapporto di prova." msgid " -t Test PPDs instead of generating them." msgstr " -t Prova i PPD invece di generarli." msgid " -t Test the configuration file." msgstr " -t Prova il file di configurazione." msgid " -t key True if the TXT record contains the key." msgstr " -t key Vero se il record di TXT contiene la chiave." msgid " -t title Set title." msgstr " -t title Imposta il titolo." msgid " -u Remove the PPD file when finished." msgstr " -u Rimuove il file PPD una volta terminato." msgid " -u regex Match URI to regular expression." msgstr "" " -u regex Corrispondenza dell'URI con l'espressione regolare." msgid " -v Be verbose." msgstr " -v Fornisce maggiori dettagli." msgid " -vv Be very verbose." msgstr " -vv Fornisce tantissimi dettagli." msgid "" " -x utility [argument ...] ;\n" " Execute program if true." msgstr "" " -x utility [argument ...] ;\n" " Esegue il programma se è vero." msgid " -z Compress PPD files using GNU zip." msgstr "" " -z Il file PPD compresso sta utilizzando GNU zip." msgid " IPPFIND_SERVICE_DOMAIN Domain name" msgstr " IPPFIND_SERVICE_DOMAIN Nome del dominio" msgid "" " IPPFIND_SERVICE_HOSTNAME\n" " Fully-qualified domain name" msgstr "" " IPPFIND_SERVICE_HOSTNAME\n" " Nome del dominio completo" msgid " IPPFIND_SERVICE_NAME Service instance name" msgstr " IPPFIND_SERVICE_NAME Nome istanza del servizio" msgid " IPPFIND_SERVICE_PORT Port number" msgstr " IPPFIND_SERVICE_PORT Numero della porta" msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type" msgstr " IPPFIND_SERVICE_REGTYPE DNS-SD tipo di registrazione" msgid " IPPFIND_SERVICE_SCHEME URI scheme" msgstr " IPPFIND_SERVICE_SCHEME schema dell'URI" msgid " IPPFIND_SERVICE_URI URI" msgstr " IPPFIND_SERVICE_URI URI" msgid " IPPFIND_TXT_* Value of TXT record key" msgstr " IPPFIND_TXT_* Value della chiave del record TXT" msgid "" " expression --and expression\n" " Logical AND." msgstr "" " espressione --and espressione\n" " AND logico." msgid "" " expression --or expression\n" " Logical OR." msgstr "" " espressione --or espressione\n" " OR logico." msgid " expression expression Logical AND." msgstr " espressione espressione AND logico." msgid " {service_domain} Domain name" msgstr " {service_domain} Nome del dominio" msgid " {service_hostname} Fully-qualified domain name" msgstr " {service_hostname} Nome del dominio completo" msgid " {service_name} Service instance name" msgstr " {service_name} Nome istanza del servizio" msgid " {service_port} Port number" msgstr " {service_port} Numero della porta" msgid " {service_regtype} DNS-SD registration type" msgstr " {service_regtype} Tipo di registrazione DNS-SD" msgid " {service_scheme} URI scheme" msgstr " {service_scheme} Schema dell'URI" msgid " {service_uri} URI" msgstr " {service_uri} URI" msgid " {txt_*} Value of TXT record key" msgstr " {txt_*} Valore della chiave del record TXT" msgid " {} URI" msgstr " {} URI" msgid " FAIL" msgstr " OPERAZIONE NON RIUSCITA CORRETTAMENTE" msgid " PASS" msgstr " OPERAZIONE RIUSCITA CON SUCCESSO" #, c-format msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section " "5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." msgstr "" #, c-format msgid "" "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 " "section 5.1.14)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section " "5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " "positive (RFC 8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC " "8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes" msgstr "%-7s %-7.7s %-7d %-31.31s %.0f byte" #, c-format msgid "%d x %d mm" msgstr "" #, c-format msgid "%g x %g \"" msgstr "" #, c-format msgid "%s (%s)" msgstr "" #, c-format msgid "%s (%s, %s)" msgstr "" #, c-format msgid "%s (Borderless)" msgstr "" #, c-format msgid "%s (Borderless, %s)" msgstr "" #, c-format msgid "%s (Borderless, %s, %s)" msgstr "" #, c-format msgid "%s accepting requests since %s" msgstr "%s sta accettando richieste da %s" #, c-format msgid "%s cannot be changed." msgstr "%s non può essere modificato" #, c-format msgid "%s is not implemented by the CUPS version of lpc." msgstr "%s non è implementato dalla versione di CUPS di lpc." #, c-format msgid "%s is not ready" msgstr "%s non è pronta" #, c-format msgid "%s is ready" msgstr "%s è pronta" #, c-format msgid "%s is ready and printing" msgstr "%s è pronta e sta stampando" #, c-format msgid "%s job-id user title copies options [file]" msgstr "%s job-id titolo dell'utente opzioni delle copie [file]" #, c-format msgid "%s not accepting requests since %s -" msgstr "%s non sta accettando richieste da %s -" #, c-format msgid "%s not supported." msgstr "%s non è supportato." #, c-format msgid "%s/%s accepting requests since %s" msgstr "%s/%s sta accettando richieste da %s" #, c-format msgid "%s/%s not accepting requests since %s -" msgstr "%s/%s non sta accettando richieste da %s -" #, c-format msgid "%s: %-33.33s [job %d localhost]" msgstr "%s: %-33.33s [processo %d localhost]" #. TRANSLATORS: Message is "subject: error" #, c-format msgid "%s: %s" msgstr "%s: %s" #, c-format msgid "%s: %s failed: %s" msgstr "%s: %s non riuscito correttamente: %s" #, c-format msgid "%s: Bad printer URI \"%s\"." msgstr "" #, c-format msgid "%s: Bad version %s for \"-V\"." msgstr "%s: la versione %s non è valida per \"-V\"." #, c-format msgid "%s: Don't know what to do." msgstr "%s: non so cosa fare." #, c-format msgid "%s: Error - %s" msgstr "" #, c-format msgid "" "%s: Error - %s environment variable names non-existent destination \"%s\"." msgstr "" "%s: errore - %s destinazione inesistente dei nomi delle variabili di " "ambiente \"%s\"." #, c-format msgid "%s: Error - add '/version=1.1' to server name." msgstr "%s: errore - aggiungere '/version=1.1' al nome del server." #, c-format msgid "%s: Error - bad job ID." msgstr "%s: errore - l'ID del processo non è valido." #, c-format msgid "%s: Error - cannot print files and alter jobs simultaneously." msgstr "" "%s: errore - non è possibile stampare file e alterare le stampe " "simultaneamente." #, c-format msgid "%s: Error - cannot print from stdin if files or a job ID are provided." msgstr "" "%s: errore - non è possibile stampare da stdin se non si fornisce un file o " "un ID del processo." #, c-format msgid "%s: Error - copies must be 1 or more." msgstr "" #, c-format msgid "%s: Error - expected character set after \"-S\" option." msgstr "%s: errore - è previsto un set di caratteri dopo l'opzione \"-S\"." #, c-format msgid "%s: Error - expected content type after \"-T\" option." msgstr "%s: errore - è previsto il tipo di contenuto dopo l'opzione \"-T\"." #, c-format msgid "%s: Error - expected copies after \"-#\" option." msgstr "%s: errore - sono previste delle copie dopo l'opzione \"-#\"." #, c-format msgid "%s: Error - expected copies after \"-n\" option." msgstr "%s: errore - sono previste delle copie dopo l'opzione \"-n\"." #, c-format msgid "%s: Error - expected destination after \"-P\" option." msgstr "%s: errore - è prevista una destinazione dopo l'opzione \"-P\"." #, c-format msgid "%s: Error - expected destination after \"-d\" option." msgstr "%s: errore - è prevista una destinazione dopo l'opzione \"-d\"." #, c-format msgid "%s: Error - expected form after \"-f\" option." msgstr "%s: errore - è previsto un modulo dopo l'opzione \"-f\"." #, c-format msgid "%s: Error - expected hold name after \"-H\" option." msgstr "%s: errore - è previsto un nome dopo l'opzione \"-H\"." #, c-format msgid "%s: Error - expected hostname after \"-H\" option." msgstr "%s: errore - è previsto un hostname dopo l'opzione \"-H\"." #, c-format msgid "%s: Error - expected hostname after \"-h\" option." msgstr "%s: errore - è previsto un hostname dopo l'opzione \"-h\"." #, c-format msgid "%s: Error - expected mode list after \"-y\" option." msgstr "" "%s: errore - è prevista una lista di modalità di attesa dopo l'opzione \"-y" "\"." #, c-format msgid "%s: Error - expected name after \"-%c\" option." msgstr "%s: errore - è previsto un nome dopo l'opzione \"-%c\"." #, c-format msgid "%s: Error - expected option=value after \"-o\" option." msgstr "%s: errore - è previsto un opzione=valore dopo l'opzione \"-o\"." #, c-format msgid "%s: Error - expected page list after \"-P\" option." msgstr "%s: errore - è previsto un elenco di pagine dopo l'opzione \"-P\"." #, c-format msgid "%s: Error - expected priority after \"-%c\" option." msgstr "%s: errore - è prevista una priorità dopo l'opzione \"-%c\"." #, c-format msgid "%s: Error - expected reason text after \"-r\" option." msgstr "%s: errore - è previsto un testo del motivo dopo l'opzione \"-r\"." #, c-format msgid "%s: Error - expected title after \"-t\" option." msgstr "%s: errore - è previsto un titolo dopo l'opzione \"-t\"." #, c-format msgid "%s: Error - expected username after \"-U\" option." msgstr "%s: errore - è previsto un username dopo l'opzione \"-U\"." #, c-format msgid "%s: Error - expected username after \"-u\" option." msgstr "%s: errore - è previsto un username dopo l'opzione \"-u\"." #, c-format msgid "%s: Error - expected value after \"-%c\" option." msgstr "%s: errore - è previsto un valore dopo l'opzione \"-%c\"." #, c-format msgid "" "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" " "option." msgstr "" "%s: errore - deve seguire \"completed\", \"non-completed\" oppure \"all\" " "dopo l'opzione \"-W\"." #, c-format msgid "%s: Error - no default destination available." msgstr "%s: errore - nessuna destinazione predefinita disponibile." #, c-format msgid "%s: Error - priority must be between 1 and 100." msgstr "%s: errore- la priorità deve essere compresa tra 1 e 100." #, c-format msgid "%s: Error - scheduler not responding." msgstr "%s: errore - lo scheduler non sta rispondendo." #, c-format msgid "%s: Error - too many files - \"%s\"." msgstr "%s: errore - troppi file - \"%s\"." #, c-format msgid "%s: Error - unable to access \"%s\" - %s" msgstr "%s: errore - non è possibile accedere a \"%s\" - %s" #, c-format msgid "%s: Error - unable to queue from stdin - %s." msgstr "%s: errore - non è possibile mettere in coda da stdin - %s." #, c-format msgid "%s: Error - unknown destination \"%s\"." msgstr "%s: errore - destinazione sconosciuta \"%s\"." #, c-format msgid "%s: Error - unknown destination \"%s/%s\"." msgstr "%s: errore - destinazione sconosciuta \"%s/%s\"." #, c-format msgid "%s: Error - unknown option \"%c\"." msgstr "%s: errore - opzione sconosciuta \"%c\"." #, c-format msgid "%s: Error - unknown option \"%s\"." msgstr "%s: errore - opzione sconosciuta \"%s\"." #, c-format msgid "%s: Expected job ID after \"-i\" option." msgstr "%s: è previsto un ID del processo dopo l'opzione \"-i\"." #, c-format msgid "%s: Invalid destination name in list \"%s\"." msgstr "%s: il nome della destinazione non è valido nella lista \"%s\"." #, c-format msgid "%s: Invalid filter string \"%s\"." msgstr "%s: la stringa del filtro non è valida \"%s\"." #, c-format msgid "%s: Missing filename for \"-P\"." msgstr "" #, c-format msgid "%s: Missing timeout for \"-T\"." msgstr "%s: manca il timeout di \"-T\"." #, c-format msgid "%s: Missing version for \"-V\"." msgstr "%s: manca la versione di \"-V\"." #, c-format msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"." msgstr "" "%s: è necessario un ID del processo (\"-i jobid\") prima di \"-H restart\"." #, c-format msgid "%s: No filter to convert from %s/%s to %s/%s." msgstr "%s: nessun filtro per convertire da %s/%s a %s/%s." #, c-format msgid "%s: Operation failed: %s" msgstr "%s: operazione non riuscita correttamente: %s" #, c-format msgid "%s: Sorry, no encryption support." msgstr "%s: spiacenti, nessun supporto per la crittografia." #, c-format msgid "%s: Unable to connect to \"%s:%d\": %s" msgstr "" #, c-format msgid "%s: Unable to connect to server." msgstr "%s: non è possibile connettersi al server." #, c-format msgid "%s: Unable to contact server." msgstr "%s: non è possibile contattare il server." #, c-format msgid "%s: Unable to create PPD file: %s" msgstr "" #, c-format msgid "%s: Unable to determine MIME type of \"%s\"." msgstr "%s: non è possibile determinare il tipo di MIME di \"%s\"." #, c-format msgid "%s: Unable to open \"%s\": %s" msgstr "" #, c-format msgid "%s: Unable to open %s: %s" msgstr "%s: non è possibile aprire %s: %s" #, c-format msgid "%s: Unable to open PPD file: %s on line %d." msgstr "%s: non è possibile aprire il file PPD: %s alla riga %d." #, c-format msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"." msgstr "" "%s: non è possibile leggere il database del MIME da \"%s\" oppure da \"%s\"." #, c-format msgid "%s: Unable to resolve \"%s\"." msgstr "" #, c-format msgid "%s: Unknown argument \"%s\"." msgstr "" #, c-format msgid "%s: Unknown destination \"%s\"." msgstr "%s: destinazione sconosciuta \"%s\"." #, c-format msgid "%s: Unknown destination MIME type %s/%s." msgstr "%s: destinazione sconosciuta del tipo di MIME %s/%s." #, c-format msgid "%s: Unknown option \"%c\"." msgstr "%s: opzione sconosciuta \"%c\"." #, c-format msgid "%s: Unknown option \"%s\"." msgstr "%s: opzione sconosciuta \"%s\"." #, c-format msgid "%s: Unknown option \"-%c\"." msgstr "%s: opzione sconosciuta \"-%c\"." #, c-format msgid "%s: Unknown source MIME type %s/%s." msgstr "%s: sorgente sconosciuto del tipo di MIME %s/%s." #, c-format msgid "" "%s: Warning - \"%c\" format modifier not supported - output may not be " "correct." msgstr "" "%s: attenzione - \"%c\" il formato del modificatore non è supportato - " "l'output potrebbe non essere corretto." #, c-format msgid "%s: Warning - character set option ignored." msgstr "%s: attenzione - l'opzione del set dei caratteri è stata ignorata." #, c-format msgid "%s: Warning - content type option ignored." msgstr "%s: attenzione - l'opzione del tipo di contenuto è stata ignorata." #, c-format msgid "%s: Warning - form option ignored." msgstr "%s: attenzione - l'opzione del modulo è stata ignorata." #, c-format msgid "%s: Warning - mode option ignored." msgstr "%s: attenzione - l'opzione modalità è stata ignorata." msgid "-1" msgstr "-1" msgid "-10" msgstr "-10" msgid "-100" msgstr "-100" msgid "-105" msgstr "-105" msgid "-11" msgstr "-11" msgid "-110" msgstr "-110" msgid "-115" msgstr "-115" msgid "-12" msgstr "-12" msgid "-120" msgstr "-120" msgid "-13" msgstr "-13" msgid "-14" msgstr "-14" msgid "-15" msgstr "-15" msgid "-2" msgstr "-2" msgid "-20" msgstr "-20" msgid "-25" msgstr "-25" msgid "-3" msgstr "-3" msgid "-30" msgstr "-30" msgid "-35" msgstr "-35" msgid "-4" msgstr "-4" msgid "-40" msgstr "-40" msgid "-45" msgstr "-45" msgid "-5" msgstr "-5" msgid "-50" msgstr "-50" msgid "-55" msgstr "-55" msgid "-6" msgstr "-6" msgid "-60" msgstr "-60" msgid "-65" msgstr "-65" msgid "-7" msgstr "-7" msgid "-70" msgstr "-70" msgid "-75" msgstr "-75" msgid "-8" msgstr "-8" msgid "-80" msgstr "-80" msgid "-85" msgstr "-85" msgid "-9" msgstr "-9" msgid "-90" msgstr "-90" msgid "-95" msgstr "-95" msgid "0" msgstr "0" msgid "1" msgstr "1" msgid "1 inch/sec." msgstr "1 inch/sec." msgid "1.25x0.25\"" msgstr "1.25x0.25\"" msgid "1.25x2.25\"" msgstr "1.25x2.25\"" msgid "1.5 inch/sec." msgstr "1.5 inch/sec." msgid "1.50x0.25\"" msgstr "1.50x0.25\"" msgid "1.50x0.50\"" msgstr "1.50x0.50\"" msgid "1.50x1.00\"" msgstr "1.50x1.00\"" msgid "1.50x2.00\"" msgstr "1.50x2.00\"" msgid "10" msgstr "10" msgid "10 inches/sec." msgstr "10 inches/sec." msgid "10 x 11" msgstr "10 x 11" msgid "10 x 13" msgstr "10 x 13" msgid "10 x 14" msgstr "10 x 14" msgid "100" msgstr "100" msgid "100 mm/sec." msgstr "100 mm/sec." msgid "105" msgstr "105" msgid "11" msgstr "11" msgid "11 inches/sec." msgstr "11 inches/sec." msgid "110" msgstr "110" msgid "115" msgstr "115" msgid "12" msgstr "12" msgid "12 inches/sec." msgstr "12 inches/sec." msgid "12 x 11" msgstr "12 x 11" msgid "120" msgstr "120" msgid "120 mm/sec." msgstr "120 mm/sec." msgid "120x60dpi" msgstr "120x60dpi" msgid "120x72dpi" msgstr "120x72dpi" msgid "13" msgstr "13" msgid "136dpi" msgstr "136dpi" msgid "14" msgstr "14" msgid "15" msgstr "15" msgid "15 mm/sec." msgstr "15 mm/sec." msgid "15 x 11" msgstr "15 x 11" msgid "150 mm/sec." msgstr "150 mm/sec." msgid "150dpi" msgstr "150dpi" msgid "16" msgstr "16" msgid "17" msgstr "17" msgid "18" msgstr "18" msgid "180dpi" msgstr "180dpi" msgid "19" msgstr "19" msgid "2" msgstr "2" msgid "2 inches/sec." msgstr "2 inches/sec." msgid "2-Hole Punch (Landscape)" msgstr "" msgid "2-Hole Punch (Portrait)" msgstr "" msgid "2-Hole Punch (Reverse Landscape)" msgstr "" msgid "2-Hole Punch (Reverse Portrait)" msgstr "" msgid "2-Sided Printing" msgstr "2-Sided Printing" msgid "2.00x0.37\"" msgstr "2.00x0.37\"" msgid "2.00x0.50\"" msgstr "2.00x0.50\"" msgid "2.00x1.00\"" msgstr "2.00x1.00\"" msgid "2.00x1.25\"" msgstr "2.00x1.25\"" msgid "2.00x2.00\"" msgstr "2.00x2.00\"" msgid "2.00x3.00\"" msgstr "2.00x3.00\"" msgid "2.00x4.00\"" msgstr "2.00x4.00\"" msgid "2.00x5.50\"" msgstr "2.00x5.50\"" msgid "2.25x0.50\"" msgstr "2.25x0.50\"" msgid "2.25x1.25\"" msgstr "2.25x1.25\"" msgid "2.25x4.00\"" msgstr "2.25x4.00\"" msgid "2.25x5.50\"" msgstr "2.25x5.50\"" msgid "2.38x5.50\"" msgstr "2.38x5.50\"" msgid "2.5 inches/sec." msgstr "2.5 inches/sec." msgid "2.50x1.00\"" msgstr "2.50x1.00\"" msgid "2.50x2.00\"" msgstr "2.50x2.00\"" msgid "2.75x1.25\"" msgstr "2.75x1.25\"" msgid "2.9 x 1\"" msgstr "2.9 x 1\"" msgid "20" msgstr "20" msgid "20 mm/sec." msgstr "20 mm/sec." msgid "200 mm/sec." msgstr "200 mm/sec." msgid "203dpi" msgstr "203dpi" msgid "21" msgstr "21" msgid "22" msgstr "22" msgid "23" msgstr "23" msgid "24" msgstr "24" msgid "24-Pin Series" msgstr "24-Pin Series" msgid "240x72dpi" msgstr "240x72dpi" msgid "25" msgstr "25" msgid "250 mm/sec." msgstr "250 mm/sec." msgid "26" msgstr "26" msgid "27" msgstr "27" msgid "28" msgstr "28" msgid "29" msgstr "29" msgid "3" msgstr "3" msgid "3 inches/sec." msgstr "3 inches/sec." msgid "3 x 5" msgstr "3 x 5" msgid "3-Hole Punch (Landscape)" msgstr "" msgid "3-Hole Punch (Portrait)" msgstr "" msgid "3-Hole Punch (Reverse Landscape)" msgstr "" msgid "3-Hole Punch (Reverse Portrait)" msgstr "" msgid "3.00x1.00\"" msgstr "3.00x1.00\"" msgid "3.00x1.25\"" msgstr "3.00x1.25\"" msgid "3.00x2.00\"" msgstr "3.00x2.00\"" msgid "3.00x3.00\"" msgstr "3.00x3.00\"" msgid "3.00x5.00\"" msgstr "3.00x5.00\"" msgid "3.25x2.00\"" msgstr "3.25x2.00\"" msgid "3.25x5.00\"" msgstr "3.25x5.00\"" msgid "3.25x5.50\"" msgstr "3.25x5.50\"" msgid "3.25x5.83\"" msgstr "3.25x5.83\"" msgid "3.25x7.83\"" msgstr "3.25x7.83\"" msgid "3.5 x 5" msgstr "3.5 x 5" msgid "3.5\" Disk" msgstr "3.5\" Disk" msgid "3.50x1.00\"" msgstr "3.50x1.00\"" msgid "30" msgstr "30" msgid "30 mm/sec." msgstr "30 mm/sec." msgid "300 mm/sec." msgstr "300 mm/sec." msgid "300dpi" msgstr "300dpi" msgid "35" msgstr "35" msgid "360dpi" msgstr "360dpi" msgid "360x180dpi" msgstr "360x180dpi" msgid "4" msgstr "4" msgid "4 inches/sec." msgstr "4 inches/sec." msgid "4-Hole Punch (Landscape)" msgstr "" msgid "4-Hole Punch (Portrait)" msgstr "" msgid "4-Hole Punch (Reverse Landscape)" msgstr "" msgid "4-Hole Punch (Reverse Portrait)" msgstr "" msgid "4.00x1.00\"" msgstr "4.00x1.00\"" msgid "4.00x13.00\"" msgstr "4.00x13.00\"" msgid "4.00x2.00\"" msgstr "4.00x2.00\"" msgid "4.00x2.50\"" msgstr "4.00x2.50\"" msgid "4.00x3.00\"" msgstr "4.00x3.00\"" msgid "4.00x4.00\"" msgstr "4.00x4.00\"" msgid "4.00x5.00\"" msgstr "4.00x5.00\"" msgid "4.00x6.00\"" msgstr "4.00x6.00\"" msgid "4.00x6.50\"" msgstr "4.00x6.50\"" msgid "40" msgstr "40" msgid "40 mm/sec." msgstr "40 mm/sec." msgid "45" msgstr "45" msgid "5" msgstr "5" msgid "5 inches/sec." msgstr "5 inches/sec." msgid "5 x 7" msgstr "5 x 7" msgid "50" msgstr "50" msgid "55" msgstr "55" msgid "6" msgstr "6" msgid "6 inches/sec." msgstr "6 inches/sec." msgid "6.00x1.00\"" msgstr "6.00x1.00\"" msgid "6.00x2.00\"" msgstr "6.00x2.00\"" msgid "6.00x3.00\"" msgstr "6.00x3.00\"" msgid "6.00x4.00\"" msgstr "6.00x4.00\"" msgid "6.00x5.00\"" msgstr "6.00x5.00\"" msgid "6.00x6.00\"" msgstr "6.00x6.00\"" msgid "6.00x6.50\"" msgstr "6.00x6.50\"" msgid "60" msgstr "60" msgid "60 mm/sec." msgstr "60 mm/sec." msgid "600dpi" msgstr "600dpi" msgid "60dpi" msgstr "60dpi" msgid "60x72dpi" msgstr "60x72dpi" msgid "65" msgstr "65" msgid "7" msgstr "7" msgid "7 inches/sec." msgstr "7 inches/sec." msgid "7 x 9" msgstr "7 x 9" msgid "70" msgstr "70" msgid "75" msgstr "75" msgid "8" msgstr "8" msgid "8 inches/sec." msgstr "8 inches/sec." msgid "8 x 10" msgstr "8 x 10" msgid "8.00x1.00\"" msgstr "8.00x1.00\"" msgid "8.00x2.00\"" msgstr "8.00x2.00\"" msgid "8.00x3.00\"" msgstr "8.00x3.00\"" msgid "8.00x4.00\"" msgstr "8.00x4.00\"" msgid "8.00x5.00\"" msgstr "8.00x5.00\"" msgid "8.00x6.00\"" msgstr "8.00x6.00\"" msgid "8.00x6.50\"" msgstr "8.00x6.50\"" msgid "80" msgstr "80" msgid "80 mm/sec." msgstr "80 mm/sec." msgid "85" msgstr "85" msgid "9" msgstr "9" msgid "9 inches/sec." msgstr "9 inches/sec." msgid "9 x 11" msgstr "9 x 11" msgid "9 x 12" msgstr "9 x 12" msgid "9-Pin Series" msgstr "9-Pin Series" msgid "90" msgstr "90" msgid "95" msgstr "95" msgid "?Invalid help command unknown." msgstr "?Aiuto non valido comando sconosciuto." msgid "A Samba password is required to export printer drivers" msgstr "" "Per esportare i driver della stampante è richiesta una password di Samba." msgid "A Samba username is required to export printer drivers" msgstr "" "Per esportare i driver della stampante è richiesto un username di Samba" #, c-format msgid "A class named \"%s\" already exists." msgstr "Una classe denominata \"%s\" già esiste." #, c-format msgid "A printer named \"%s\" already exists." msgstr "Una stampante denominata \"%s\" già esiste." msgid "A0" msgstr "A0" msgid "A0 Long Edge" msgstr "A0 Long Edge" msgid "A1" msgstr "A1" msgid "A1 Long Edge" msgstr "A1 Long Edge" msgid "A10" msgstr "A10" msgid "A2" msgstr "A2" msgid "A2 Long Edge" msgstr "A2 Long Edge" msgid "A3" msgstr "A3" msgid "A3 Long Edge" msgstr "A3 Long Edge" msgid "A3 Oversize" msgstr "A3 Oversize" msgid "A3 Oversize Long Edge" msgstr "A3 Oversize Long Edge" msgid "A4" msgstr "A4" msgid "A4 Long Edge" msgstr "A4 Long Edge" msgid "A4 Oversize" msgstr "A4 Oversize" msgid "A4 Small" msgstr "A4 Small" msgid "A5" msgstr "A5" msgid "A5 Long Edge" msgstr "A5 Long Edge" msgid "A5 Oversize" msgstr "A5 Oversize" msgid "A6" msgstr "A6" msgid "A6 Long Edge" msgstr "A6 Long Edge" msgid "A7" msgstr "A7" msgid "A8" msgstr "A8" msgid "A9" msgstr "A9" msgid "ANSI A" msgstr "ANSI A" msgid "ANSI B" msgstr "ANSI B" msgid "ANSI C" msgstr "ANSI C" msgid "ANSI D" msgstr "ANSI D" msgid "ANSI E" msgstr "ANSI E" msgid "ARCH C" msgstr "ARCH C" msgid "ARCH C Long Edge" msgstr "ARCH C Long Edge" msgid "ARCH D" msgstr "ARCH D" msgid "ARCH D Long Edge" msgstr "ARCH D Long Edge" msgid "ARCH E" msgstr "ARCH E" msgid "ARCH E Long Edge" msgstr "ARCH E Long Edge" msgid "Accept Jobs" msgstr "Accetta le stampe" msgid "Accepted" msgstr "Accettato" msgid "Accordian Fold" msgstr "" msgid "Add Class" msgstr "Aggiungi una classe" msgid "Add Printer" msgstr "Aggiungi una stampante" msgid "Add RSS Subscription" msgstr "Aggiungere l'abbonamento RSS" msgid "Address" msgstr "Indirizzo" msgid "Administration" msgstr "Amministrazione" msgid "Advanced Photo Paper" msgstr "" msgid "Alternate" msgstr "" msgid "Alternate Roll" msgstr "" msgid "Aluminum" msgstr "" msgid "Always" msgstr "Sempre" msgid "AppSocket/HP JetDirect" msgstr "AppSocket/HP JetDirect" msgid "Applicator" msgstr "Applicatore" msgid "Archival Envelope" msgstr "" msgid "Archival Fabric" msgstr "" msgid "Archival Paper" msgstr "" msgid "Archival Photo Paper" msgstr "" #, c-format msgid "Attempt to set %s printer-state to bad value %d." msgstr "Tentativo di impostare %s printer-state al valore non valido %d." #, c-format msgid "Attribute \"%s\" is in the wrong group." msgstr "" #, c-format msgid "Attribute \"%s\" is the wrong value type." msgstr "" #, c-format msgid "Attribute groups are out of order (%x < %x)." msgstr "I gruppi degli attributi sono fuori uso (%x < %x)." msgid "Automatic" msgstr "" msgid "B0" msgstr "B0" msgid "B1" msgstr "B1" msgid "B10" msgstr "B10" msgid "B2" msgstr "B2" msgid "B3" msgstr "B3" msgid "B4" msgstr "B4" msgid "B5" msgstr "B5" msgid "B5 Oversize" msgstr "B5 Oversize" msgid "B6" msgstr "B6" msgid "B7" msgstr "B7" msgid "B8" msgstr "B8" msgid "B9" msgstr "B9" msgid "Back Print Film" msgstr "" #, c-format msgid "Bad 'document-format' value \"%s\"." msgstr "Il valore di 'document-format' non è valido \"%s\"." msgid "Bad NULL dests pointer" msgstr "Le destinazioni del puntatore NULL non sono valide" msgid "Bad OpenGroup" msgstr "OpenGroup non è valido" msgid "Bad OpenUI/JCLOpenUI" msgstr "OpenUI/JCLOpenUI non è valido" msgid "Bad OrderDependency" msgstr "OrderDependency non è valido" msgid "Bad PPD cache file." msgstr "Il file della cache del PPD non è valido." msgid "Bad PPD file." msgstr "" msgid "Bad Request" msgstr "La richiesta non è valida" msgid "Bad SNMP version number" msgstr "Il numero di versione di SNMP non è valido" msgid "Bad UIConstraints" msgstr "UIConstraints non è valido" msgid "Bad arguments to function" msgstr "" #, c-format msgid "Bad copies value %d." msgstr "Il valore %d delle copie non è valido." msgid "Bad custom parameter" msgstr "Il parametro personalizzato non è valido" #, c-format msgid "Bad device-uri \"%s\"." msgstr "Il device-uri \"%s\" non è valido." #, c-format msgid "Bad device-uri scheme \"%s\"." msgstr "Lo schema del device-uri \"%s\" non è valido." #, c-format msgid "Bad document-format \"%s\"." msgstr "Il document-format \"%s\" non è valido." #, c-format msgid "Bad document-format-default \"%s\"." msgstr "Il document-format-default \"%s\" non è valido." msgid "Bad filename buffer" msgstr "Il buffer del file non è valido" msgid "Bad hostname/address in URI" msgstr "" #, c-format msgid "Bad job-name value: %s" msgstr "Il valore di job-name non è valido: %s" msgid "Bad job-name value: Wrong type or count." msgstr "Il valore di job-name non è valido: tipo o conteggio errato." msgid "Bad job-priority value." msgstr "Il valore di job-priority non è valido." #, c-format msgid "Bad job-sheets value \"%s\"." msgstr "Il valore di job-sheets \"%s\" non è valido." msgid "Bad job-sheets value type." msgstr "Il tipo di valore di job-sheets non è valido." msgid "Bad job-state value." msgstr "Il valore di job-state non è valido." #, c-format msgid "Bad job-uri \"%s\"." msgstr "Il valore di job-uri \"%s\" non è valido." #, c-format msgid "Bad notify-pull-method \"%s\"." msgstr "Il valore di notify-pull-method \"%s\" non è valido." #, c-format msgid "Bad notify-recipient-uri \"%s\"." msgstr "Il valore di notify-recipient-uri \"%s\" non è valido." #, c-format msgid "Bad number-up value %d." msgstr "Il valore di number-up %d non è valido." #, c-format msgid "Bad option + choice on line %d." msgstr "L'opzione + scelta alla riga %d non è valida." #, c-format msgid "Bad page-ranges values %d-%d." msgstr "Il valore di page-ranges %d-%d non è valido." msgid "Bad port number in URI" msgstr "" #, c-format msgid "Bad port-monitor \"%s\"." msgstr "Il valore di port-monitor \"%s\" non è valido." #, c-format msgid "Bad printer-state value %d." msgstr "Il valore di printer-state %d non è valido." msgid "Bad printer-uri." msgstr "" #, c-format msgid "Bad request ID %d." msgstr "L'ID della richiesta %d non è valido." #, c-format msgid "Bad request version number %d.%d." msgstr "Il numero della versione richiesta %d.%d non è valido." #, c-format msgid "Bad requesting-user-name value: %s" msgstr "" msgid "Bad resource in URI" msgstr "" msgid "Bad scheme in URI" msgstr "" msgid "Bad subscription ID" msgstr "L'ID della sottoscrizione non è valido" msgid "Bad username in URI" msgstr "" msgid "Bad value string" msgstr "La stringa ha un valore che non è valido" msgid "Bad/empty URI" msgstr "" msgid "Bale" msgstr "" msgid "Banners" msgstr "Banner" msgid "Bind" msgstr "" msgid "Bind (Landscape)" msgstr "" msgid "Bind (Portrait)" msgstr "" msgid "Bind (Reverse Landscape)" msgstr "" msgid "Bind (Reverse Portrait)" msgstr "" msgid "Bond Envelope" msgstr "" msgid "Bond Paper" msgstr "Carta per scrivere" msgid "Booklet" msgstr "" msgid "Booklet Maker" msgstr "" #, c-format msgid "Boolean expected for waiteof option \"%s\"." msgstr "È previsto un valore booleano per l'opzione waiteof \"%s\"." msgid "Bottom" msgstr "" msgid "Bottom Tray" msgstr "" msgid "Buffer overflow detected, aborting." msgstr "È stato individuato un buffer overflow, operazione annullata." msgid "CD" msgstr "" msgid "CMYK" msgstr "CMYK" msgid "CPCL Label Printer" msgstr "CPCL Label Printer" msgid "Cancel Jobs" msgstr "" msgid "Cancel RSS Subscription" msgstr "Eliminare l'abbonamento RSS" msgid "Canceling print job." msgstr "Eliminazione del processo di stampa in corso." msgid "Cannot change printer-is-shared for remote queues." msgstr "" msgid "Cannot share a remote Kerberized printer." msgstr "Non è possibile condividere una stampante remota kerberizzata." msgid "Cardboard" msgstr "" msgid "Cardstock" msgstr "" msgid "Cassette" msgstr "Caricatore" msgid "Center" msgstr "" msgid "Center Tray" msgstr "" msgid "Change Settings" msgstr "Modifica le impostazioni" #, c-format msgid "Character set \"%s\" not supported." msgstr "Il set di caratteri \"%s\" non è supportato." msgid "Classes" msgstr "Classi" msgid "Clean Print Heads" msgstr "Pulisci le testine della stampante" msgid "Close-Job doesn't support the job-uri attribute." msgstr "Close-Job non supporta l'attributo job-uri." msgid "Coat" msgstr "" msgid "Coated Envelope" msgstr "" msgid "Coated Paper" msgstr "" msgid "Color" msgstr "Colore" msgid "Color Mode" msgstr "Modalità colore" msgid "Colored Labels" msgstr "" msgid "" "Commands may be abbreviated. Commands are:\n" "\n" "exit help quit status ?" msgstr "" "I comandi possono essere abbreviati. I comandi sono:\n" "\n" "exit help quit status ?" msgid "Community name uses indefinite length" msgstr "Il nome della comunità utilizza una lunghezza indefinita" msgid "Connected to printer." msgstr "Connesso alla stampante." msgid "Connecting to printer." msgstr "Connessione alla stampante in corso." msgid "Continue" msgstr "Continua" msgid "Continuous" msgstr "Continuo" msgid "Continuous Long" msgstr "" msgid "Continuous Short" msgstr "" msgid "Control file sent successfully." msgstr "Il file del controllo è stato inviato con successo." msgid "Copying print data." msgstr "Copia dei dati di stampa in corso." msgid "Cotton Envelope" msgstr "" msgid "Cotton Paper" msgstr "" msgid "Cover" msgstr "" msgid "Created" msgstr "Creato" msgid "Credentials do not validate against site CA certificate." msgstr "" msgid "Credentials have expired." msgstr "" msgid "Custom" msgstr "Personalizzato" msgid "CustominCutInterval" msgstr "CustominCutInterval" msgid "CustominTearInterval" msgstr "CustominTearInterval" msgid "Cut" msgstr "Taglia" msgid "Cut Media" msgstr "" msgid "Cutter" msgstr "Taglierino" msgid "DVD" msgstr "" msgid "Dark" msgstr "Scuro" msgid "Darkness" msgstr "Oscurità" msgid "Data file sent successfully." msgstr "I dati sono stati inviati con successo." msgid "Deep Color" msgstr "" msgid "Delete Class" msgstr "Elimina la classe" msgid "Delete Printer" msgstr "Elimina la stampante" msgid "DeskJet Series" msgstr "DeskJet Series" #, c-format msgid "Destination \"%s\" is not accepting jobs." msgstr "La destinazione \"%s\" non sta accettando le stampe." #, c-format msgid "" "Device: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s" msgstr "" "Dispositivo: uri = %s\n" " classe = %s\n" " info = %s\n" " marca-e-modello = %s\n" " device-id = %s\n" " posizione = %s" msgid "Direct Thermal Media" msgstr "Direct Thermal Media" #, c-format msgid "Directory \"%s\" contains a relative path." msgstr "La directory \"%s\" contiene un path relativo." #, c-format msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "" "La directory \"%s\" presenta dei permessi non sicuri (0%o/uid=%d/gid=%d)." #, c-format msgid "Directory \"%s\" is a file." msgstr "La directory \"%s\" è un file." #, c-format msgid "Directory \"%s\" not available: %s" msgstr "La directory \"%s\" non è disponibile: %s" #, c-format msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "Directory \"%s\" permessi OK (0%o/uid=%d/gid=%d)." msgid "Disabled" msgstr "Disabilitato" msgid "Disc" msgstr "" #, c-format msgid "Document #%d does not exist in job #%d." msgstr "Il documento #%d non esiste nel processo #%d." msgid "Double Gate Fold" msgstr "" msgid "Double Staple (Landscape)" msgstr "" msgid "Double Staple (Portrait)" msgstr "" msgid "Double Staple (Reverse Landscape)" msgstr "" msgid "Double Staple (Reverse Portrait)" msgstr "" msgid "Double Wall Cardboard" msgstr "" msgid "Draft" msgstr "" msgid "Dry Film" msgstr "" msgid "Duplexer" msgstr "Duplexer" msgid "Dymo" msgstr "Dymo" msgid "EPL1 Label Printer" msgstr "EPL1 Label Printer" msgid "EPL2 Label Printer" msgstr "EPL2 Label Printer" msgid "Edit Configuration File" msgstr "Edita il file di configurazione" msgid "Embossing Foil" msgstr "" msgid "Empty PPD file." msgstr "Il file PPD è vuoto." msgid "Encryption is not supported." msgstr "" msgid "End Board" msgstr "" #. TRANSLATORS: Banner/cover sheet after the print job. msgid "Ending Banner" msgstr "Termine del banner" msgid "Engineering Z Fold" msgstr "" msgid "English" msgstr "Inglese" msgid "" "Enter your username and password or the root username and password to access " "this page. If you are using Kerberos authentication, make sure you have a " "valid Kerberos ticket." msgstr "" "Digitare la username e la password oppure l'username di root e la password " "per accedere a questa pagina. Se si utilizza l'autenticazione Kerberos, " "assicurarsi di disporre di un ticket di Kerberos valido." msgid "Envelope" msgstr "" msgid "Envelope #10" msgstr "" msgid "Envelope #11" msgstr "Envelope #11" msgid "Envelope #12" msgstr "Envelope #12" msgid "Envelope #14" msgstr "Envelope #14" msgid "Envelope #9" msgstr "Envelope #9" msgid "Envelope B4" msgstr "Envelope B4" msgid "Envelope B5" msgstr "Envelope B5" msgid "Envelope B6" msgstr "Envelope B6" msgid "Envelope C0" msgstr "Envelope C0" msgid "Envelope C1" msgstr "Envelope C1" msgid "Envelope C2" msgstr "Envelope C2" msgid "Envelope C3" msgstr "Envelope C3" msgid "Envelope C4" msgstr "Envelope C4" msgid "Envelope C5" msgstr "Envelope C5" msgid "Envelope C6" msgstr "Envelope C6" msgid "Envelope C65" msgstr "Envelope C65" msgid "Envelope C7" msgstr "Envelope C7" msgid "Envelope Choukei 3" msgstr "Envelope Choukei 3" msgid "Envelope Choukei 3 Long Edge" msgstr "Envelope Choukei 3 Long Edge" msgid "Envelope Choukei 4" msgstr "Envelope Choukei 4" msgid "Envelope Choukei 4 Long Edge" msgstr "Envelope Choukei 4 Long Edge" msgid "Envelope DL" msgstr "Envelope DL" msgid "Envelope Feed" msgstr "Envelope Feed" msgid "Envelope Invite" msgstr "Envelope Invite" msgid "Envelope Italian" msgstr "Envelope Italian" msgid "Envelope Kaku2" msgstr "Envelope Kaku2" msgid "Envelope Kaku2 Long Edge" msgstr "Envelope Kaku2 Long Edge" msgid "Envelope Kaku3" msgstr "Envelope Kaku3" msgid "Envelope Kaku3 Long Edge" msgstr "Envelope Kaku3 Long Edge" msgid "Envelope Monarch" msgstr "Envelope Monarch" msgid "Envelope PRC1" msgstr "" msgid "Envelope PRC1 Long Edge" msgstr "Envelope PRC1 Long Edge" msgid "Envelope PRC10" msgstr "Envelope PRC10" msgid "Envelope PRC10 Long Edge" msgstr "Envelope PRC10 Long Edge" msgid "Envelope PRC2" msgstr "Envelope PRC2" msgid "Envelope PRC2 Long Edge" msgstr "Envelope PRC2 Long Edge" msgid "Envelope PRC3" msgstr "Envelope PRC3" msgid "Envelope PRC3 Long Edge" msgstr "Envelope PRC3 Long Edge" msgid "Envelope PRC4" msgstr "Envelope PRC4" msgid "Envelope PRC4 Long Edge" msgstr "Envelope PRC4 Long Edge" msgid "Envelope PRC5 Long Edge" msgstr "Envelope PRC5 Long Edge" msgid "Envelope PRC5PRC5" msgstr "Envelope PRC5PRC5" msgid "Envelope PRC6" msgstr "Envelope PRC6" msgid "Envelope PRC6 Long Edge" msgstr "Envelope PRC6 Long Edge" msgid "Envelope PRC7" msgstr "Envelope PRC7" msgid "Envelope PRC7 Long Edge" msgstr "Envelope PRC7 Long Edge" msgid "Envelope PRC8" msgstr "Envelope PRC8" msgid "Envelope PRC8 Long Edge" msgstr "Envelope PRC8 Long Edge" msgid "Envelope PRC9" msgstr "Envelope PRC9" msgid "Envelope PRC9 Long Edge" msgstr "Envelope PRC9 Long Edge" msgid "Envelope Personal" msgstr "Envelope Personal" msgid "Envelope You4" msgstr "Envelope You4" msgid "Envelope You4 Long Edge" msgstr "Envelope You4 Long Edge" msgid "Environment Variables:" msgstr "Variabili d'ambiente:" msgid "Epson" msgstr "Epson" msgid "Error Policy" msgstr "Policy dell'errore" msgid "Error reading raster data." msgstr "" msgid "Error sending raster data." msgstr "Si è verificato un errore durante l'invio dei dati raster." msgid "Error: need hostname after \"-h\" option." msgstr "Errore: è necessario l'hostname dopo l'opzione \"-h\"." msgid "European Fanfold" msgstr "" msgid "European Fanfold Legal" msgstr "" msgid "Every 10 Labels" msgstr "Ogni 10 etichette" msgid "Every 2 Labels" msgstr "Ogni 2 etichette" msgid "Every 3 Labels" msgstr "Ogni 3 etichette" msgid "Every 4 Labels" msgstr "Ogni 4 etichette" msgid "Every 5 Labels" msgstr "Ogni 5 etichette" msgid "Every 6 Labels" msgstr "Ogni 6 etichette" msgid "Every 7 Labels" msgstr "Ogni 7 etichette" msgid "Every 8 Labels" msgstr "Ogni 8 etichette" msgid "Every 9 Labels" msgstr "Ogni 9 etichette" msgid "Every Label" msgstr "Ogni etichetta" msgid "Everyday Glossy Photo Paper" msgstr "" msgid "Everyday Matte Paper" msgstr "" msgid "Executive" msgstr "Esecutivo" msgid "Expectation Failed" msgstr "Aspettativa non riuscita" msgid "Export Printers to Samba" msgstr "Esporta le stampanti per Samba" msgid "Expressions:" msgstr "Espressioni:" msgid "Extra Heavyweight Paper" msgstr "" msgid "FAIL" msgstr "OPERAZIONE NON RIUSCITA CORRETTAMENTE" msgid "Fabric" msgstr "" msgid "Face Down" msgstr "" msgid "Face Up" msgstr "" msgid "Fast Grayscale" msgstr "" #, c-format msgid "File \"%s\" contains a relative path." msgstr "Il file \"%s\" contiene un path relativo." #, c-format msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "il file \"%s\" presenta dei permessi non sicuri (0%o/uid=%d/gid=%d)." #, c-format msgid "File \"%s\" is a directory." msgstr "Il file \"%s\" è una directory." #, c-format msgid "File \"%s\" not available: %s" msgstr "Il file \"%s\" non è disponibile: %s" #, c-format msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "File \"%s\" permessi OK (0%o/uid=%d/gid=%d)." msgid "File Folder" msgstr "" #, c-format msgid "" "File device URIs have been disabled. To enable, see the FileDevice directive " "in \"%s/cups-files.conf\"." msgstr "" "I file del dispositivo URI sono stati disabilitati. Per abilitare, vedere la " "direttiva FileDevice in \"%s/cups-files.conf\"." msgid "Film" msgstr "" msgid "Fine Envelope" msgstr "" #, c-format msgid "Finished page %d." msgstr "Finito pagina %d." msgid "Flexo Base" msgstr "" msgid "Flexo Photo Polymer" msgstr "" msgid "Flute" msgstr "" msgid "Foil" msgstr "" msgid "Fold" msgstr "" msgid "Folio" msgstr "Foglio" msgid "Forbidden" msgstr "Vietato" msgid "Found" msgstr "" msgid "Full Cut Tabs" msgstr "" msgid "Gate Fold" msgstr "" msgid "General" msgstr "Generale" msgid "Generic" msgstr "Generico" msgid "Get-Response-PDU uses indefinite length" msgstr "Get-Response-PDU utilizza una lunghezza indefinita" msgid "Glass" msgstr "" msgid "Glass Colored" msgstr "" msgid "Glass Opaque" msgstr "" msgid "Glass Surfaced" msgstr "" msgid "Glass Textured" msgstr "" msgid "Glossy Brochure Paper" msgstr "" msgid "Glossy Fabric" msgstr "" msgid "Glossy Labels" msgstr "" msgid "Glossy Optical Disc" msgstr "" msgid "Glossy Paper" msgstr "Carta lucida" msgid "Glossy Photo Paper" msgstr "" msgid "Got a printer-uri attribute but no job-id." msgstr "Esiste un attributo printer-uri ma nessun job-id." msgid "Gravure Cylinder" msgstr "" msgid "Grayscale" msgstr "Scala di grigi" msgid "HP" msgstr "HP" msgid "Hagaki" msgstr "" msgid "Half Fold" msgstr "" msgid "Half Z Fold" msgstr "" msgid "Hanging Folder" msgstr "Directory appesa" msgid "Hash buffer too small." msgstr "" msgid "Heavyweight Coated Paper" msgstr "" msgid "Heavyweight Envelope" msgstr "" msgid "Heavyweight Paper" msgstr "" msgid "Help file not in index." msgstr "Il file di aiuto non è nell'indice." msgid "High" msgstr "" msgid "High Gloss Fabric" msgstr "" msgid "High Gloss Labels" msgstr "" msgid "High Gloss Optical Disc" msgstr "" msgid "High Gloss Photo Paper" msgstr "" msgid "IPP 1setOf attribute with incompatible value tags." msgstr "L'attributo IPP 1setOf con tag di valore incompatibile." msgid "IPP attribute has no name." msgstr "L'attributo dell'IPP non ha nessun nome." msgid "IPP attribute is not a member of the message." msgstr "L'attributo IPP non è un membro del messaggio." msgid "IPP begCollection value not 0 bytes." msgstr "Il valore di IPP begCollection non è di 0 byte." msgid "IPP boolean value not 1 byte." msgstr "Il valore booleano di IPP non è di 1 byte." msgid "IPP date value not 11 bytes." msgstr "Il valore IPP date non è di 11 byte." msgid "IPP endCollection value not 0 bytes." msgstr "Il valore di IPP endCollection non è di 0 byte." msgid "IPP enum value not 4 bytes." msgstr "Il valore di IPP enum non è di 4 byte." msgid "IPP extension tag larger than 0x7FFFFFFF." msgstr "Il tag dell'estensione di IPP è maggiore di 0x7FFFFFFF." msgid "IPP integer value not 4 bytes." msgstr "Il valore intero di IPP non è di 4 byte." msgid "IPP language length overflows value." msgstr "Valore di overflow della lunghezza della lingua di IPP." msgid "IPP language length too large." msgstr "La lunghezza della lingua di IPP è troppo grande." msgid "IPP member name is not empty." msgstr "Il nome del membro IPP non è vuoto." msgid "IPP memberName value is empty." msgstr "Il valore di IPP memberName è vuoto." msgid "IPP memberName with no attribute." msgstr "IPP memberName con nessun attributo." msgid "IPP name larger than 32767 bytes." msgstr "Il nome dell'IPP è più grande di 32767 byte." msgid "IPP nameWithLanguage value less than minimum 4 bytes." msgstr "Il valore di IPP nameWithLanguage è inferiore al minimo di 4 byte." msgid "IPP octetString length too large." msgstr "La lunghezza di IPP octetString è troppo grande." msgid "IPP rangeOfInteger value not 8 bytes." msgstr "Il valore di IPP rangeOfInteger non è di 8 byte." msgid "IPP resolution value not 9 bytes." msgstr "Il valore di IPP resolution non è di 9 byte." msgid "IPP string length overflows value." msgstr "Valore di overflow della lunghezza della stringa di IPP." msgid "IPP textWithLanguage value less than minimum 4 bytes." msgstr "Il valore di textWithLanguage dell'IPP è inferiore a 4 byte." msgid "IPP value larger than 32767 bytes." msgstr "Il valore di IPP è più grande di 32767 byte." msgid "ISOLatin1" msgstr "ISOLatin1" msgid "Illegal control character" msgstr "Il carattere di controllo è illegale" msgid "Illegal main keyword string" msgstr "La stringa della parola chiave principale è illegale" msgid "Illegal option keyword string" msgstr "La stringa della parola chiave dell'opzione è illegale" msgid "Illegal translation string" msgstr "La stringa della traduzione è illegale" msgid "Illegal whitespace character" msgstr "Il carattere spazio è illegale" msgid "Image Setter Paper" msgstr "" msgid "Imaging Cylinder" msgstr "" msgid "Inkjet Envelope" msgstr "" msgid "Inkjet Labels" msgstr "" msgid "Inkjet Paper" msgstr "" msgid "Installable Options" msgstr "Opzioni installabili" msgid "Installed" msgstr "Installato" msgid "IntelliBar Label Printer" msgstr "IntelliBar Label Printer" msgid "Intellitech" msgstr "Intellitech" msgid "Internal Server Error" msgstr "Errore interno del server" msgid "Internal error" msgstr "Errore interno" msgid "Internet Postage 2-Part" msgstr "Internet Postage 2-Part" msgid "Internet Postage 3-Part" msgstr "Internet Postage 3-Part" msgid "Internet Printing Protocol" msgstr "Internet Printing Protocol" msgid "Invalid media name arguments." msgstr "Gli argomenti del nome del supporto non sono validi." msgid "Invalid media size." msgstr "La dimensione del supporto non è valida." msgid "Invalid ppd-name value." msgstr "" #, c-format msgid "Invalid printer command \"%s\"." msgstr "Il comando della stampante non è valido \"%s\"." msgid "JCL" msgstr "JCL" msgid "JIS B0" msgstr "JIS B0" msgid "JIS B1" msgstr "JIS B1" msgid "JIS B10" msgstr "JIS B10" msgid "JIS B2" msgstr "JIS B2" msgid "JIS B3" msgstr "JIS B3" msgid "JIS B4" msgstr "JIS B4" msgid "JIS B4 Long Edge" msgstr "JIS B4 Long Edge" msgid "JIS B5" msgstr "JIS B5" msgid "JIS B5 Long Edge" msgstr "JIS B5 Long Edge" msgid "JIS B6" msgstr "JIS B6" msgid "JIS B6 Long Edge" msgstr "JIS B6 Long Edge" msgid "JIS B7" msgstr "JIS B7" msgid "JIS B8" msgstr "JIS B8" msgid "JIS B9" msgstr "JIS B9" #, c-format msgid "Job #%d cannot be restarted - no files." msgstr "Il processo #%d non può essere riavviato, nessun file." #, c-format msgid "Job #%d does not exist." msgstr "Il processo #%d non esiste." #, c-format msgid "Job #%d is already aborted - can't cancel." msgstr "Il processo #%d è già stato interrotto - non è possibile eliminarlo." #, c-format msgid "Job #%d is already canceled - can't cancel." msgstr "Il processo #%d è già stato eliminato, impossibile eliminarlo." #, c-format msgid "Job #%d is already completed - can't cancel." msgstr "Il processo #%d è già completato, non è possibile eliminarlo." #, c-format msgid "Job #%d is finished and cannot be altered." msgstr "Il processo #%d è terminato e non può essere alterato." #, c-format msgid "Job #%d is not complete." msgstr "Il processo #%d non è stato completato." #, c-format msgid "Job #%d is not held for authentication." msgstr "Il processo #%d non è stato eseguito per l'autenticazione." #, c-format msgid "Job #%d is not held." msgstr "Il processo #%d non è stato eseguito." msgid "Job Completed" msgstr "Il processo è stato completato" msgid "Job Created" msgstr "Il processo è stato creato" msgid "Job Options Changed" msgstr "Le opzioni del processo sono state modificate" msgid "Job Stopped" msgstr "Il processo è stato fermato" msgid "Job is completed and cannot be changed." msgstr "Il processo è stato completato e non può essere modificato." msgid "Job operation failed" msgstr "L'operazione del processo non è andata a buon fine" msgid "Job state cannot be changed." msgstr "Lo stato del processo non può essere modificato." msgid "Job subscriptions cannot be renewed." msgstr "Le sottoscrizioni del processo non possono essere rinnovate." msgid "Jobs" msgstr "Stampe" msgid "Jog" msgstr "" msgid "LPD/LPR Host or Printer" msgstr "LPD/LPR Host o stampante" msgid "Label Printer" msgstr "Label Printer" msgid "Label Top" msgstr "Label Top" msgid "Labels" msgstr "" msgid "Laminate" msgstr "" msgid "Laminating Foil" msgstr "" #, c-format msgid "Language \"%s\" not supported." msgstr "La lingua \"%s\" non è supportata." msgid "Large Address" msgstr "Large Address" msgid "Large Capacity" msgstr "" msgid "Large Capacity Tray" msgstr "" msgid "LaserJet Series PCL 4/5" msgstr "LaserJet Series PCL 4/5" msgid "Left" msgstr "" msgid "Left Gate Fold" msgstr "" msgid "Left Tray" msgstr "" msgid "Letter Fold" msgstr "" msgid "Letter Oversize" msgstr "Letter Oversize" msgid "Letter Oversize Long Edge" msgstr "Letter Oversize Long Edge" msgid "Letterhead" msgstr "" msgid "Light" msgstr "Luce" msgid "Lightweight Envelope" msgstr "" msgid "Lightweight Paper" msgstr "" msgid "Line longer than the maximum allowed (255 characters)" msgstr "Linea più lunga di quella massima consentita (255 caratteri)" msgid "List Available Printers" msgstr "Elenco delle stampanti disponibili" msgid "Load paper." msgstr "" msgid "Local printer created." msgstr "" msgid "Long-Edge (Portrait)" msgstr "Long-Edge (Portrait)" msgid "Looking for printer." msgstr "Cerca una stampante." msgid "Mailbox 1" msgstr "" msgid "Mailbox 10" msgstr "" msgid "Mailbox 2" msgstr "" msgid "Mailbox 3" msgstr "" msgid "Mailbox 4" msgstr "" msgid "Mailbox 5" msgstr "" msgid "Mailbox 6" msgstr "" msgid "Mailbox 7" msgstr "" msgid "Mailbox 8" msgstr "" msgid "Mailbox 9" msgstr "" msgid "Main" msgstr "" msgid "Main Roll" msgstr "" msgid "Manual" msgstr "" msgid "Manual Feed" msgstr "Alimentazione manuale" msgid "Matte Brochure Paper" msgstr "" msgid "Matte Cover Paper" msgstr "" msgid "Matte Fabric" msgstr "" msgid "Matte Labels" msgstr "" msgid "Matte Optical Disc" msgstr "" msgid "Matte Photo Paper" msgstr "" msgid "Media Size" msgstr "Dimensione del supporto" msgid "Media Source" msgstr "Sorgente multimediale" msgid "Media Tracking" msgstr "Monitoraggio del supporto" msgid "Media Type" msgstr "Tipo di supporto" msgid "Medium" msgstr "Supporto" msgid "Memory allocation error" msgstr "Errore di allocazione della memoria" msgid "Metal" msgstr "" msgid "Metal Glossy" msgstr "" msgid "Metal High Gloss" msgstr "" msgid "Metal Matte" msgstr "" msgid "Metal Satin" msgstr "" msgid "Metal Semi Gloss" msgstr "" msgid "Mid-Weight Paper" msgstr "" msgid "Middle" msgstr "" msgid "Missing CloseGroup" msgstr "Manca CloseGroup" msgid "Missing PPD-Adobe-4.x header" msgstr "Manca la libreria di PPD-Adobe-4.x" msgid "Missing asterisk in column 1" msgstr "Manca l'asterisco nella colonna 1" msgid "Missing document-number attribute." msgstr "Manca l'attributo di document-number." #, c-format msgid "Missing double quote on line %d." msgstr "Mancano le virgolette alla riga %d." msgid "Missing form variable" msgstr "Manca la variabile del modulo" msgid "Missing last-document attribute in request." msgstr "Manca l'attributo last-document nella richiesta." msgid "Missing media or media-col." msgstr "Manca media o media-col." msgid "Missing media-size in media-col." msgstr "Manca media-size in media-col." msgid "Missing notify-subscription-ids attribute." msgstr "Manca l'attributo notify-subscription-ids." msgid "Missing option keyword" msgstr "Manca la parola chiave dell'opzione" msgid "Missing requesting-user-name attribute." msgstr "Manca l'attributo di requesting-user-name." #, c-format msgid "Missing required attribute \"%s\"." msgstr "" msgid "Missing required attributes." msgstr "Mancano gli attributi richiesti." msgid "Missing resource in URI" msgstr "" msgid "Missing scheme in URI" msgstr "" #, c-format msgid "Missing value on line %d." msgstr "Manca il valore alla riga %d." msgid "Missing value string" msgstr "Manca la stringa del valore" msgid "Missing x-dimension in media-size." msgstr "Manca x-dimension in media-size." msgid "Missing y-dimension in media-size." msgstr "Manca y-dimension in media-size." #, c-format msgid "" "Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgstr "" "Modello: nome = %s\n" " lingua_naturale = %s\n" " marca-e-modello = %s\n" " device-id = %s" msgid "Modifiers:" msgstr "Modificatori:" msgid "Modify Class" msgstr "Modifica la classe" msgid "Modify Printer" msgstr "Modifica la stampante" msgid "Mounting Tape" msgstr "" msgid "Move All Jobs" msgstr "Sposta tutti le stampe" msgid "Move Job" msgstr "Sposta il processo" msgid "Moved Permanently" msgstr "Spostato in modo permanente" msgid "Multi Layer" msgstr "" msgid "Multi Part Form" msgstr "" msgid "Multi-Hole Punch (Landscape)" msgstr "" msgid "Multi-Hole Punch (Portrait)" msgstr "" msgid "Multi-Hole Punch (Reverse Landscape)" msgstr "" msgid "Multi-Hole Punch (Reverse Portrait)" msgstr "" msgid "Multipurpose" msgstr "" msgid "Multipurpose Paper" msgstr "" msgid "My Mailbox" msgstr "" msgid "NULL PPD file pointer" msgstr "Puntatore del file PPD NULL" msgid "Name OID uses indefinite length" msgstr "Il nome OID utilizza una lunghezza indefinita" msgid "Nested classes are not allowed." msgstr "Le classi nidificate non sono consentite." msgid "Never" msgstr "Mai" msgid "New credentials are not valid for name." msgstr "" msgid "New credentials are older than stored credentials." msgstr "" msgid "No" msgstr "No" msgid "No Content" msgstr "Nessun contenuto" msgid "No IPP attributes." msgstr "" msgid "No PPD name" msgstr "Nessun nome del PPD" msgid "No VarBind SEQUENCE" msgstr "Nessuna SEQUENZA di VarBind" msgid "No Windows printer drivers are installed." msgstr "Non è stato installato nessun driver della stampante di Windows." msgid "No active connection" msgstr "Nessuna connessione attiva" msgid "No active connection." msgstr "" #, c-format msgid "No active jobs on %s." msgstr "Nessun processo attivo su %s." msgid "No attributes in request." msgstr "Nessun attributo nella richiesta." msgid "No authentication information provided." msgstr "Nessuna informazione di autenticazione fornita." msgid "No common name specified." msgstr "" msgid "No community name" msgstr "Nessun nome della comunità" msgid "No default printer." msgstr "Nessuna stampante predefinita." msgid "No destinations added." msgstr "Nessuna destinazione aggiunta." msgid "No device URI found in argv[0] or in DEVICE_URI environment variable." msgstr "" "Non è stato trovato nessun dispositivo URI in argv[0] o nella variabile di " "ambiente DEVICE_URI." msgid "No error-index" msgstr "Nessin error-index" msgid "No error-status" msgstr "Nessun error-status" msgid "No file in print request." msgstr "Nessun file nella richiesta di stampa." msgid "No modification time" msgstr "Nessun orario di modifica" msgid "No name OID" msgstr "Nessun nome OID" msgid "No pages were found." msgstr "Nessuna pagina è stata trovata." msgid "No printer name" msgstr "Nessun nome della stampante" msgid "No printer-uri found" msgstr "Non è stato trovato printer-uri" msgid "No printer-uri found for class" msgstr "Non è stato trovato printer-uri per la classe" msgid "No printer-uri in request." msgstr "Nessun printer-uri nella richiesta." msgid "No request URI." msgstr "" msgid "No request protocol version." msgstr "" msgid "No request sent." msgstr "" msgid "No request-id" msgstr "Nessun request-id" msgid "No stored credentials, not valid for name." msgstr "" msgid "No subscription attributes in request." msgstr "Nessun attributo della sottoscrizione nella richiesta." msgid "No subscriptions found." msgstr "Non è stata trovata nessuna sottoscrizione." msgid "No variable-bindings SEQUENCE" msgstr "Nessuna SEQUENZA di variable-bindings" msgid "No version number" msgstr "Nessun numero di versione" msgid "Non-continuous (Mark sensing)" msgstr "Non-continuous (Mark sensing)" msgid "Non-continuous (Web sensing)" msgstr "Non-continuous (Web sensing)" msgid "None" msgstr "" msgid "Normal" msgstr "Normale" msgid "Not Found" msgstr "Non trovato" msgid "Not Implemented" msgstr "Non implementato" msgid "Not Installed" msgstr "Non installato" msgid "Not Modified" msgstr "Non modificato" msgid "Not Supported" msgstr "Non supportato" msgid "Not allowed to print." msgstr "Non autorizzato a stampare." msgid "Note" msgstr "Nota" msgid "" "Note: this program only validates the DSC comments, not the PostScript " "itself." msgstr "" "Nota: questo programma convalida solo i commenti DSC, non il PostScript " "stesso." msgid "OK" msgstr "OK" msgid "Off (1-Sided)" msgstr "Off (1-Sided)" msgid "Office Recycled Paper" msgstr "" msgid "Oki" msgstr "Oki" msgid "Online Help" msgstr "Guida in linea" msgid "Only local users can create a local printer." msgstr "" #, c-format msgid "Open of %s failed: %s" msgstr "L'apertura di %s non è andata a buon fine: %s" msgid "OpenGroup without a CloseGroup first" msgstr "OpenGroup senza prima un CloseGroup" msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" msgstr "OpenUI/JCLOpenUI senza prima un CloseUI/JCLCloseUI" msgid "Operation Policy" msgstr "Policy dell'operazione" msgid "Optical Disc" msgstr "" #, c-format msgid "Option \"%s\" cannot be included via %%%%IncludeFeature." msgstr "L'opzione \"%s\" non può essere inclusa tramite %%%%IncludeFeature." msgid "Options Installed" msgstr "Opzioni installate" msgid "Options:" msgstr "Opzioni:" msgid "Other" msgstr "" msgid "Out of date PPD cache file." msgstr "Il file della cache del PPD non è aggiornato." msgid "Out of memory." msgstr "Memoria insufficiente." msgid "Output Mode" msgstr "Modalità di output" msgid "Output bin is almost full." msgstr "" msgid "Output bin is full." msgstr "" msgid "Output bin is missing." msgstr "" msgid "PASS" msgstr "OPERAZIONE RIUSCITA CON SUCCESSO" msgid "PCL Laser Printer" msgstr "Stampante laser PCL" msgid "PRC16K" msgstr "PRC16K" msgid "PRC16K Long Edge" msgstr "PRC16K Long Edge" msgid "PRC32K" msgstr "PRC32K" msgid "PRC32K Long Edge" msgstr "PRC32K Long Edge" msgid "PRC32K Oversize" msgstr "PRC32K Oversize" msgid "PRC32K Oversize Long Edge" msgstr "PRC32K Oversize Long Edge" msgid "Packet does not contain a Get-Response-PDU" msgstr "Il pacchetto non contiene un Get-Response-PDU" msgid "Packet does not start with SEQUENCE" msgstr "Il pacchetto non inizia con SEQUENZA" msgid "Paper" msgstr "" msgid "Paper jam." msgstr "" msgid "Paper tray is almost empty." msgstr "" msgid "Paper tray is empty." msgstr "" msgid "Paper tray is missing." msgstr "" msgid "Parallel Fold" msgstr "" msgid "ParamCustominCutInterval" msgstr "ParamCustominCutInterval" msgid "ParamCustominTearInterval" msgstr "ParamCustominTearInterval" #, c-format msgid "Password for %s on %s? " msgstr "Password di %s su %s? " #, c-format msgid "Password for %s required to access %s via SAMBA: " msgstr "La password di %s richiesta per accedere a %s tramite SAMBA:" msgid "Pause Class" msgstr "Metti in pausa la classe" msgid "Pause Printer" msgstr "Metti in pausa la stampante" msgid "Peel-Off" msgstr "Peel-Off" msgid "Permanent Labels" msgstr "" msgid "Photo" msgstr "Foto" msgid "Photo Film" msgstr "" msgid "Photo Labels" msgstr "Etichette delle foto" msgid "Photo Paper" msgstr "" msgid "Photo Paper Plus Glossy II" msgstr "" msgid "Photo Paper Pro Platinum" msgstr "" msgid "Plain Envelope" msgstr "" msgid "Plain Paper" msgstr "Carta comune" msgid "Plastic" msgstr "" msgid "Plastic Archival" msgstr "" msgid "Plastic Colored" msgstr "" msgid "Plastic Glossy" msgstr "" msgid "Plastic High Gloss" msgstr "" msgid "Plastic Matte" msgstr "" msgid "Plastic Satin" msgstr "" msgid "Plastic Semi Gloss" msgstr "" msgid "Plate" msgstr "" msgid "Policies" msgstr "Policy" msgid "Polyester" msgstr "" msgid "Port Monitor" msgstr "Controllo della porta" msgid "PostScript Printer" msgstr "Stampante PostScript" msgid "Postcard" msgstr "Postcard" msgid "Postcard Double" msgstr "" msgid "Postcard Double Long Edge" msgstr "Postcard Double Long Edge" msgid "Postcard Long Edge" msgstr "Postcard Long Edge" msgid "Poster Fold" msgstr "" msgid "Pre Cut Tabs" msgstr "" msgid "Premium Inkjet Paper" msgstr "" msgid "Premium Photo Glossy Paper" msgstr "" msgid "Premium Presentation Matte Paper" msgstr "" msgid "Preparing to print." msgstr "Preparazione per la stampa." msgid "Preprinted Envelope" msgstr "" msgid "Preprinted Paper" msgstr "" msgid "Print Density" msgstr "Densità di stampa" msgid "Print Job:" msgstr "Processo di stampa:" msgid "Print Mode" msgstr "Modalità di stampa" msgid "Print Quality" msgstr "" msgid "Print Rate" msgstr "Velocità di stampa" msgid "Print Self-Test Page" msgstr "Stampa la pagina Self-Test" msgid "Print Speed" msgstr "Velocità di stampa" msgid "Print Test Page" msgstr "Stampa pagina di prova" msgid "Print and Cut" msgstr "Stampa e taglia" msgid "Print and Tear" msgstr "Stampa e strappa" msgid "Print file sent." msgstr "Il file di stampa è stato inviato." msgid "Print job canceled at printer." msgstr "Il processo di stampa è stato annullato." msgid "Print job too large." msgstr "Il processo di stampa è troppo grande." msgid "Print job was not accepted." msgstr "Il processo di stampa non è stato accettato." #, c-format msgid "Printer \"%s\" already exists." msgstr "" msgid "Printer Added" msgstr "La stampante è stata aggiunta" msgid "Printer Default" msgstr "Stampante predefinita" msgid "Printer Deleted" msgstr "La stampante è stata eliminata" msgid "Printer Modified" msgstr "La stampante è stata modificata" msgid "Printer Paused" msgstr "La stampante è stata messa in pausa" msgid "Printer Settings" msgstr "Impostazioni della stampante" msgid "Printer cannot print supplied content." msgstr "La stampante non può stampare il contenuto fornito." msgid "Printer cannot print with supplied options." msgstr "La stampante non può stampare con le opzioni fornite." msgid "Printer does not support required IPP attributes or document formats." msgstr "" msgid "Printer:" msgstr "Stampante:" msgid "Printers" msgstr "Stampanti" #, c-format msgid "Printing page %d, %u%% complete." msgstr "" msgid "Punch" msgstr "" msgid "Punched Paper" msgstr "" msgid "Quarto" msgstr "Quarto" msgid "Quota limit reached." msgstr "Il limite della quota è stato raggiunto." msgid "Rank Owner Job File(s) Total Size" msgstr "Rank Owner Job File(s) Total Size" msgid "Rear" msgstr "" msgid "Rear Tray" msgstr "" msgid "Reject Jobs" msgstr "Stampe rifiutate" #, c-format msgid "Remote host did not accept control file (%d)." msgstr "L'host remosto non ha accettato il controllo (%d)." #, c-format msgid "Remote host did not accept data file (%d)." msgstr "L'host remoto non ha accettato i dati (%d)." msgid "Reprint After Error" msgstr "Ristampa dopo un errore" msgid "Request Entity Too Large" msgstr "Entità della richiesta troppo grande" msgid "Resolution" msgstr "Risoluzione" msgid "Resume Class" msgstr "Riprendi la classe" msgid "Resume Printer" msgstr "Riprendi la stampante" msgid "Return Address" msgstr "Ritorna l'indirizzo" msgid "Rewind" msgstr "Ricarica" msgid "Right" msgstr "" msgid "Right Gate Fold" msgstr "" msgid "Right Tray" msgstr "" msgid "Roll" msgstr "" msgid "Roll 1" msgstr "" msgid "Roll 10" msgstr "" msgid "Roll 2" msgstr "" msgid "Roll 3" msgstr "" msgid "Roll 4" msgstr "" msgid "Roll 5" msgstr "" msgid "Roll 6" msgstr "" msgid "Roll 7" msgstr "" msgid "Roll 8" msgstr "" msgid "Roll 9" msgstr "" #, c-format msgid "Running command: %s %s -N -A %s -c '%s'" msgstr "Avvio in corso del comando: %s %s -N -A %s -c '%s'" msgid "SEQUENCE uses indefinite length" msgstr "SEQUENZA utilizza una lunghezza indefinita" msgid "SSL/TLS Negotiation Error" msgstr "Errore di negoziazione SSL/TLS" msgid "Saddle Stitch" msgstr "" msgid "Satin Labels" msgstr "" msgid "Satin Optical Disc" msgstr "" msgid "Satin Photo Paper" msgstr "" msgid "Screen" msgstr "" msgid "Screen Paged" msgstr "" msgid "Security Labels" msgstr "" msgid "See Other" msgstr "Vedi altro" msgid "See remote printer." msgstr "" msgid "Self Adhesive" msgstr "" msgid "Self Adhesive Film" msgstr "" msgid "Self-signed credentials are blocked." msgstr "" msgid "Semi-Gloss Fabric" msgstr "" msgid "Semi-Gloss Labels" msgstr "" msgid "Semi-Gloss Optical Disc" msgstr "" msgid "Semi-Gloss Photo Paper" msgstr "" msgid "Sending data to printer." msgstr "Invio dei dati alla stampante." msgid "Server Restarted" msgstr "Il server è stato riavviato" msgid "Server Security Auditing" msgstr "Revisione della sicurezza del server" msgid "Server Started" msgstr "Il server è stato avviato" msgid "Server Stopped" msgstr "Il server è stato fermato" msgid "Server credentials not set." msgstr "" msgid "Service Unavailable" msgstr "Servizio non disponibile" msgid "Set Allowed Users" msgstr "Imposta gli utenti autorizzati" msgid "Set As Server Default" msgstr "Imposta come server predefinito" msgid "Set Class Options" msgstr "Imposta le opzioni della classe" msgid "Set Printer Options" msgstr "Imposta le opzioni della stampante" msgid "Set Publishing" msgstr "Imposta la pubblicazione" msgid "Shipping Address" msgstr "Indirizzo di spedizione" msgid "Short-Edge (Landscape)" msgstr "Short-Edge (Landscape)" msgid "Shrink Foil" msgstr "" msgid "Side" msgstr "" msgid "Side Tray" msgstr "" msgid "Single Face" msgstr "" msgid "Single Punch (Landscape)" msgstr "" msgid "Single Punch (Portrait)" msgstr "" msgid "Single Punch (Reverse Landscape)" msgstr "" msgid "Single Punch (Reverse Portrait)" msgstr "" msgid "Single Staple (Landscape)" msgstr "" msgid "Single Staple (Portrait)" msgstr "" msgid "Single Staple (Reverse Landscape)" msgstr "" msgid "Single Staple (Reverse Portrait)" msgstr "" msgid "Single Wall Cardboard" msgstr "" msgid "Sleeve" msgstr "" msgid "Special Paper" msgstr "Carta speciale" #, c-format msgid "Spooling job, %.0f%% complete." msgstr "Processo di spooling, %.0f%% completato." msgid "Stacker 1" msgstr "" msgid "Stacker 10" msgstr "" msgid "Stacker 2" msgstr "" msgid "Stacker 3" msgstr "" msgid "Stacker 4" msgstr "" msgid "Stacker 5" msgstr "" msgid "Stacker 6" msgstr "" msgid "Stacker 7" msgstr "" msgid "Stacker 8" msgstr "" msgid "Stacker 9" msgstr "" msgid "Standard" msgstr "Standard" msgid "Staple" msgstr "" msgid "Staple Edge" msgstr "" msgid "Staple Edge (Landscape)" msgstr "" msgid "Staple Edge (Portrait)" msgstr "" msgid "Staple Edge (Reverse Landscape)" msgstr "" msgid "Staple Edge (Reverse Portrait)" msgstr "" #. TRANSLATORS: Banner/cover sheet before the print job. msgid "Starting Banner" msgstr "Inizio del banner" #, c-format msgid "Starting page %d." msgstr "Pagina iniziale %d." msgid "Statement" msgstr "Rapporto" #, c-format msgid "Subscription #%d does not exist." msgstr "La sottoscrizione #%d non esiste." msgid "Substitutions:" msgstr "Sottoscrizioni:" msgid "Super A" msgstr "Super A" msgid "Super B" msgstr "Super B" msgid "Super B/A3" msgstr "Super B/A3" msgid "Switching Protocols" msgstr "Protocolli di commutazione" msgid "Tab Stock" msgstr "" msgid "Tabloid" msgstr "Tabloid" msgid "Tabloid Oversize" msgstr "Tabloid Oversize" msgid "Tabloid Oversize Long Edge" msgstr "Tabloid Oversize Long Edge" msgid "Tear" msgstr "Tear" msgid "Tear-Off" msgstr "Tear-Off" msgid "Tear-Off Adjust Position" msgstr "Tear-Off Adjust Position" #, c-format msgid "The \"%s\" attribute is required for print jobs." msgstr "L'attributo \"%s\" è richiesto per i processi di stampa." #, c-format msgid "The %s attribute cannot be provided with job-ids." msgstr "L'attributo %s non può essere fornito con job-ids." #, c-format msgid "" "The '%s' Job Status attribute cannot be supplied in a job creation request." msgstr "" #, c-format msgid "" "The '%s' operation attribute cannot be supplied in a Create-Job request." msgstr "" "L'attributo dell'operazione '%s' non può essere fornito in una richiesta " "Create-Job." #, c-format msgid "The PPD file \"%s\" could not be found." msgstr "Il file PPD \"%s\" non è stato trovato." #, c-format msgid "The PPD file \"%s\" could not be opened: %s" msgstr "Non è possibile aprire il file PPD \"%s\": %s" msgid "The PPD file could not be opened." msgstr "Il file PPD non può essere aperto." msgid "" "The class name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "Il nome della classe può contenere fino a 127 caratteri stampabili e non può " "contenere spazi, barre (/) o cancelletto (#)." msgid "The developer unit needs to be replaced." msgstr "L'unità di sviluppo deve essere sostituita." msgid "The developer unit will need to be replaced soon." msgstr "L'unità di sviluppo dovrà essere sostituita a breve." msgid "The fuser's temperature is high." msgstr "La temperatura di fusione è alta." msgid "The fuser's temperature is low." msgstr "La temperatura di fusione è bassa." msgid "" "The notify-lease-duration attribute cannot be used with job subscriptions." msgstr "" "L'attributo notify-lease-duration non può essere utilizzato con le " "sottoscrizioni del processo." #, c-format msgid "The notify-user-data value is too large (%d > 63 octets)." msgstr "Il valore di notify-user-data è troppo grande (%d > 63 ottetti)." msgid "The optical photoconductor needs to be replaced." msgstr "Il fotoconduttore ottico deve essere sostituito." msgid "The optical photoconductor will need to be replaced soon." msgstr "Il fotoconduttore ottico dovrà essere sostituito a breve." msgid "The printer configuration is incorrect or the printer no longer exists." msgstr "" "La configurazione della stampante è errata oppure la stampante non esiste " "più." msgid "The printer did not respond." msgstr "La stampante non ha risposto." msgid "The printer is in use." msgstr "La stampante è in uso." msgid "The printer is low on ink." msgstr "" msgid "The printer is low on toner." msgstr "" msgid "The printer is not connected." msgstr "La stampante non è connessa." msgid "The printer is not responding." msgstr "La stampante non risponde." msgid "The printer is now connected." msgstr "Adesso la stampante è connessa." msgid "The printer is now online." msgstr "Adesso la stampante è online." msgid "The printer is offline." msgstr "La stampante è offline." msgid "The printer is unreachable at this time." msgstr "In questo momento la stampante non è raggiungibile." msgid "The printer may be out of ink." msgstr "L'inchiostro della stampante potrebbe essere esaurito." msgid "The printer may be out of toner." msgstr "Il toner della stampante potrebbe essere esaurito." msgid "The printer may not exist or is unavailable at this time." msgstr "" "La stampante potrebbe non esistere oppure non è disponibile in questo " "momento." msgid "" "The printer name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "Il nome della stampante può contenere solo un massimo di 127 caratteri " "stampabili e non può contenere spazi, barre (/) oppure il simbolo del " "cancelletto (#)." msgid "The printer or class does not exist." msgstr "Non esiste la stampante o la classe." msgid "The printer or class is not shared." msgstr "La stampante o la classe non è condivisa." msgid "The printer's cover is open." msgstr "Il coperchio della stampante è aperto." msgid "The printer's door is open." msgstr "La porta della stampante è aperta." msgid "The printer's interlock is open." msgstr "Il blocco della stampante è aperto." msgid "The printer's waste bin is almost full." msgstr "Il cestino della stampante è quasi pieno." msgid "The printer's waste bin is full." msgstr "Il cestino della stampante è pieno." #, c-format msgid "The printer-uri \"%s\" contains invalid characters." msgstr "Il printer-uri \"%s\" contiene caratteri non validi." msgid "The printer-uri attribute is required." msgstr "L'attributo printer-uri è richiesto." msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." msgstr "" "Il printer-uri deve essere del formato \"ipp://HOSTNAME/classes/CLASSNAME\"." msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgstr "" "Il printer-uri deve essere del formato \"ipp://HOSTNAME/printers/PRINTERNAME" "\"." msgid "" "The subscription name may not contain spaces, slashes (/), question marks " "(?), or the pound sign (#)." msgstr "" "Il nome della sottoscrizione non può contenere spazi, barre (/), punti " "interrogativi (?) o cancelletto (#)." msgid "" "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to " "enable it." msgstr "" "L'interfaccia web è attualmente disabilitata. Avviare \"cupsctl " "WebInterface=yes\" per abilitarla." #, c-format msgid "The which-jobs value \"%s\" is not supported." msgstr "Il valore which-jobs \"%s\" non è supportato." msgid "There are too many subscriptions." msgstr "Ci sono troppe sottoscrizioni." msgid "There was an unrecoverable USB error." msgstr "Si è verificato un errore irreversibile sulla porta USB." msgid "Thermal Transfer Media" msgstr "Trasferimento termico" msgid "Too many active jobs." msgstr "Troppe stampe attive." #, c-format msgid "Too many job-sheets values (%d > 2)." msgstr "Troppi valori di job-sheets (%d > 2)." #, c-format msgid "Too many printer-state-reasons values (%d > %d)." msgstr "Troppi valori di printer-state-reasons (%d > %d)." msgid "Top" msgstr "" msgid "Top Tray" msgstr "" msgid "Tractor" msgstr "" msgid "Transfer" msgstr "" msgid "Transparency" msgstr "Trasparenza" msgid "Tray" msgstr "Vassoio" msgid "Tray 1" msgstr "Vassoio 1" msgid "Tray 10" msgstr "" msgid "Tray 11" msgstr "" msgid "Tray 12" msgstr "" msgid "Tray 13" msgstr "" msgid "Tray 14" msgstr "" msgid "Tray 15" msgstr "" msgid "Tray 16" msgstr "" msgid "Tray 17" msgstr "" msgid "Tray 18" msgstr "" msgid "Tray 19" msgstr "" msgid "Tray 2" msgstr "Vassoio 2" msgid "Tray 20" msgstr "" msgid "Tray 3" msgstr "Vassoio 3" msgid "Tray 4" msgstr "Vassoio 4" msgid "Tray 5" msgstr "" msgid "Tray 6" msgstr "" msgid "Tray 7" msgstr "" msgid "Tray 8" msgstr "" msgid "Tray 9" msgstr "" msgid "Triple Staple (Landscape)" msgstr "" msgid "Triple Staple (Portrait)" msgstr "" msgid "Triple Staple (Reverse Landscape)" msgstr "" msgid "Triple Staple (Reverse Portrait)" msgstr "" msgid "Triple Wall Cardboard" msgstr "" msgid "Trust on first use is disabled." msgstr "" msgid "URI Too Long" msgstr "L'URI è troppo lungo" msgid "URI too large" msgstr "" msgid "US Fanfold" msgstr "" msgid "US Ledger" msgstr "US Ledger" msgid "US Legal" msgstr "US Legal" msgid "US Legal Oversize" msgstr "US Legal Oversize" msgid "US Letter" msgstr "US Letter" msgid "US Letter Long Edge" msgstr "US Letter Long Edge" msgid "US Letter Oversize" msgstr "US Letter Oversize" msgid "US Letter Oversize Long Edge" msgstr "US Letter Oversize Long Edge" msgid "US Letter Small" msgstr "US Letter Small" msgid "Unable to access cupsd.conf file" msgstr "Non è possibile accedere al file cupsd.conf" msgid "Unable to access help file." msgstr "Non è possibile accedere al file help." msgid "Unable to add RSS subscription" msgstr "Non è possibile aggiungere l'abbonamento RSS" msgid "Unable to add class" msgstr "Non è possibile aggiungere la classe" msgid "Unable to add document to print job." msgstr "Non è possibile aggiungere il documento al processo di stampa." #, c-format msgid "Unable to add job for destination \"%s\"." msgstr "Non è possibile aggiungere il processo alla destinazione \"%s\"." msgid "Unable to add printer" msgstr "Non è possibile aggiungere la stampante" msgid "Unable to allocate memory for file types." msgstr "Non è possibile allocare la memoria per i tipi di file." msgid "Unable to allocate memory for page info" msgstr "Non è possibile allocare la memoria per le info della pagina" msgid "Unable to allocate memory for pages array" msgstr "Non è possibile allocare memoria per array di pagine" msgid "Unable to cancel RSS subscription" msgstr "Non è possibile eliminare l'abbonamento RSS" msgid "Unable to cancel print job." msgstr "Non è possibile eliminare il processo di stampa." msgid "Unable to change printer" msgstr "Non è possibile modificare la stampante" msgid "Unable to change printer-is-shared attribute" msgstr "Non è possibile modificare l'attributo printer-is-shared" msgid "Unable to change server settings" msgstr "Non è possibile modificare le impostazioni del server" #, c-format msgid "Unable to compile mimeMediaType regular expression: %s." msgstr "Non è possibile compilare l'espressione regolare mimeMediaType: %s." #, c-format msgid "Unable to compile naturalLanguage regular expression: %s." msgstr "Non è possibile compilare l'espressione regolare naturalLanguage: %s." msgid "Unable to configure printer options." msgstr "Non è possibile configurare le opzioni della stampante." msgid "Unable to connect to host." msgstr "Non è possibile connettersi all'host." msgid "Unable to contact printer, queuing on next printer in class." msgstr "" "Non è possibile contattare la stampante, in coda nella classe della " "stampante successiva." #, c-format msgid "Unable to copy 64-bit CUPS printer driver files (%d)." msgstr "" "Non è possibile copiare i driver della stampante di CUPS a 64-bit (%d)." #, c-format msgid "Unable to copy 64-bit Windows printer driver files (%d)." msgstr "" "Non è possibile copiare i driver della stampante di Windows a 64-bit (%d)." #, c-format msgid "Unable to copy CUPS printer driver files (%d)." msgstr "Non è possibile copiare i driver della stampante di CUPS (%d)." #, c-format msgid "Unable to copy PPD file - %s" msgstr "Non è possibile copiare il file PPD - %s" msgid "Unable to copy PPD file." msgstr "Non è possibile copiare il file PPD." #, c-format msgid "Unable to copy Windows 2000 printer driver files (%d)." msgstr "Non è possibile copiare i driver di Windows 2000 della stampante (%d)." #, c-format msgid "Unable to copy Windows 9x printer driver files (%d)." msgstr "Non è possibile copiare i driver di Windows 9x della stampante (%d)." msgid "Unable to create credentials from array." msgstr "" msgid "Unable to create printer-uri" msgstr "Non è possibile creare il printer-uri" msgid "Unable to create printer." msgstr "" msgid "Unable to create server credentials." msgstr "" msgid "Unable to create temporary file" msgstr "Non è possibile creare un file temporaneo" msgid "Unable to delete class" msgstr "Non è possibile eliminare la classe" msgid "Unable to delete printer" msgstr "Non è possibile eliminare la stampante" msgid "Unable to do maintenance command" msgstr "Non è possibile avviare il comando della manutenzione" msgid "Unable to edit cupsd.conf files larger than 1MB" msgstr "Non è possibile editare i file cupsd.conf più grandi di 1MB" msgid "" "Unable to establish a secure connection to host (certificate chain invalid)." msgstr "" "Non è possibile stabilire una connessione sicura all'host (catena di " "certificati non validi)." msgid "" "Unable to establish a secure connection to host (certificate not yet valid)." msgstr "" "Non è possibile stabilire una connessione sicura all'host (il certificato " "non è ancora valido)." msgid "Unable to establish a secure connection to host (expired certificate)." msgstr "" "Non è possibile stabilire una connessione sicura all'host (il certificato è " "scaduto)." msgid "Unable to establish a secure connection to host (host name mismatch)." msgstr "" "Non è possibile stabilire una connessione sicura all'host (il nome dell'host " "non corrisponde)." msgid "" "Unable to establish a secure connection to host (peer dropped connection " "before responding)." msgstr "" "Non è possibile stabilire una connessione sicura all'host (peer ha chiuso la " "connessione prima di rispondere)." msgid "" "Unable to establish a secure connection to host (self-signed certificate)." msgstr "" "Non è possibile stabilire una connessione sicura all'host (certificato " "autofirmato)." msgid "" "Unable to establish a secure connection to host (untrusted certificate)." msgstr "" "Non è possibile stabilire una connessione sicura all'host (certificato non " "verificato)." msgid "Unable to establish a secure connection to host." msgstr "Non è possibile stabilire una connessione sicura all'host." msgid "Unable to find destination for job" msgstr "Non è possibile trovare la destinazione del processo" msgid "Unable to find printer." msgstr "Non è possibile trovare la stampante." msgid "Unable to find server credentials." msgstr "" msgid "Unable to get backend exit status." msgstr "Non è possibile ottenere lo stato del backend." msgid "Unable to get class list" msgstr "Non è possibile ottenere la lista della classe" msgid "Unable to get class status" msgstr "Non è possibile ottenere lo stato della classe" msgid "Unable to get list of printer drivers" msgstr "Non è possibile ottenere i driver della stampante" msgid "Unable to get printer attributes" msgstr "Non è possibile ottenere gli attributi della stampante" msgid "Unable to get printer list" msgstr "Non è possibile ottenere la lista della stampante" msgid "Unable to get printer status" msgstr "Non è possibile ottenere lo stato della stampante" msgid "Unable to get printer status." msgstr "Non è possibile ottenere lo stato della stampante" #, c-format msgid "Unable to install Windows 2000 printer driver files (%d)." msgstr "" "Non è possibile installare i driver di Windows 2000 della stampante (%d)." #, c-format msgid "Unable to install Windows 9x printer driver files (%d)." msgstr "" "Non è possibile installare i driver di Windows 9x della stampante (%d)." msgid "Unable to load help index." msgstr "Non è possibile caricare l'indice dell'aiuto." #, c-format msgid "Unable to locate printer \"%s\"." msgstr "Non è possibile localizzare la stampante \"%s\"." msgid "Unable to locate printer." msgstr "Non è possibile localizzare la stampante." msgid "Unable to modify class" msgstr "Non è possibile modificare la classe" msgid "Unable to modify printer" msgstr "Non è possibile modificare la stampante" msgid "Unable to move job" msgstr "Non è possibile spostare il processo" msgid "Unable to move jobs" msgstr "Non è possibile spostare le stampe" msgid "Unable to open PPD file" msgstr "Non è possibile aprire il file PPD" msgid "Unable to open cupsd.conf file:" msgstr "Non è possibile aprire il file cupsd.conf:" msgid "Unable to open device file" msgstr "Non è possibile aprire il file del dispositivo:" #, c-format msgid "Unable to open document #%d in job #%d." msgstr "Non è possibile aprire il documento #%d nel processo #%d." msgid "Unable to open help file." msgstr "Non è possibile aprire il file dell'aiuto." msgid "Unable to open print file" msgstr "Non è possibile aprire il file della stampa" msgid "Unable to open raster file" msgstr "non è possibile aprire il file del raster" msgid "Unable to print test page" msgstr "Non è possibile stampare la pagina di prova" msgid "Unable to read print data." msgstr "Non è possibile leggere i dati della stampa." msgid "Unable to rename job document file." msgstr "" msgid "Unable to resolve printer-uri." msgstr "" #, c-format msgid "Unable to run \"%s\": %s" msgstr "Non è possibile avviare \"%s\": %s" msgid "Unable to see in file" msgstr "Non è possibile vedere nel file" msgid "Unable to send command to printer driver" msgstr "Non è possibile inviare il comando al driver della stampante" msgid "Unable to send data to printer." msgstr "Non è possibile inviare i dati alla stampante." #, c-format msgid "Unable to set Windows printer driver (%d)." msgstr "Non è possibile impostare i driver di Windows della stampante (%d)." msgid "Unable to set options" msgstr "Non è possibile impostare le opzioni" msgid "Unable to set server default" msgstr "Non è possibile impostare il server predefinito" msgid "Unable to start backend process." msgstr "Non è possibile avviare il processo del backend." msgid "Unable to upload cupsd.conf file" msgstr "Non è possibile caricare il file cupsd.conf" msgid "Unable to use legacy USB class driver." msgstr "Non è possibile utilizzare il driver legacy della classe USB. " msgid "Unable to write print data" msgstr "Non è possibile scrivere i dati della stampa" #, c-format msgid "Unable to write uncompressed print data: %s" msgstr "Non è possibile scrivere i dati della stampa non compressi: %s" msgid "Unauthorized" msgstr "Non autorizzato" msgid "Units" msgstr "Unità" msgid "Unknown" msgstr "Sconosciuto" #, c-format msgid "Unknown choice \"%s\" for option \"%s\"." msgstr "Scelta sconosciuta \"%s\" dell'opzione \"%s\"." #, c-format msgid "Unknown encryption option value: \"%s\"." msgstr "Valore sconosciuto dell'opzione di crittografia: \"%s\"." #, c-format msgid "Unknown file order: \"%s\"." msgstr "ordine del file sconosciuto: \"%s\"." #, c-format msgid "Unknown format character: \"%c\"." msgstr "Formato del carattere sconosciuto: \"%c\"." msgid "Unknown hash algorithm." msgstr "" msgid "Unknown media size name." msgstr "Nome del formato del supporto sconosciuto." #, c-format msgid "Unknown option \"%s\" with value \"%s\"." msgstr "Opzione sconosciuta \"%s\" con il valore \"%s\"." #, c-format msgid "Unknown option \"%s\"." msgstr "Opzione sconosciuta \"%s\"." #, c-format msgid "Unknown print mode: \"%s\"." msgstr "Modalità di stampa sconosciuta: \"%s\"." #, c-format msgid "Unknown printer-error-policy \"%s\"." msgstr "printer-error-policy sconosciuta \"%s\"." #, c-format msgid "Unknown printer-op-policy \"%s\"." msgstr "printer-op-policy sconosciuta \"%s\"." msgid "Unknown request method." msgstr "" msgid "Unknown request version." msgstr "" msgid "Unknown scheme in URI" msgstr "" msgid "Unknown service name." msgstr "Nome del servizio sconosciuto." #, c-format msgid "Unknown version option value: \"%s\"." msgstr "Valore sconosciuto dell'opzione versione: \"%s\"." #, c-format msgid "Unsupported 'compression' value \"%s\"." msgstr "Valore di 'compressione' non supportato \"%s\"." #, c-format msgid "Unsupported 'document-format' value \"%s\"." msgstr "Valore di 'document-format' non supportato \"%s\"." msgid "Unsupported 'job-name' value." msgstr "Valore di 'job-name' non supportato." #, c-format msgid "Unsupported character set \"%s\"." msgstr "Il set dei caratteri \"%s\" non è supportato." #, c-format msgid "Unsupported compression \"%s\"." msgstr "Compressione non supportata \"%s\"." #, c-format msgid "Unsupported document-format \"%s\"." msgstr "Il formato del documento \"%s\" non è supportato." #, c-format msgid "Unsupported document-format \"%s/%s\"." msgstr "Il formato del documento \"%s/%s\" non è supportato." #, c-format msgid "Unsupported format \"%s\"." msgstr "Il formato \"%s\" non è supportato." msgid "Unsupported margins." msgstr "Margini non supportati." msgid "Unsupported media value." msgstr "Il valore del supporto non è supportato." #, c-format msgid "Unsupported number-up value %d, using number-up=1." msgstr "Il valore %d di number-up non è supportato, usare number-up=1." #, c-format msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb." msgstr "" "Il valore %s di number-up-layout non è supportato, usare number-up-" "layout=1rtb." #, c-format msgid "Unsupported page-border value %s, using page-border=none." msgstr "Il valore %s di page-border non è supportato, usare page-border=none." msgid "Unsupported raster data." msgstr "I dati del raster non sono supportati." msgid "Unsupported value type" msgstr "Tipo di valore non supportato" msgid "Upgrade Required" msgstr "È richiesto l'aggiornamento" msgid "" "Usage:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]" msgstr "" "Uso:\n" "\n" " lpadmin [-h server] -d destinazione\n" " lpadmin [-h server] -x destinazione\n" " lpadmin [-h server] -p stampante [-c add-class] [-i interfaccia] [-m " "modello]\n" " [-r remove-class] [-v dispositivo] [-D descrizione]\n" " [-P ppd-file] [-o nome=valore]\n" " [-u allow:utente,utente] [-u deny:utente,utente]" #, c-format msgid "Usage: %s job-id user title copies options [file]" msgstr "Uso: %s job-id utente titolo copie opzioni [file]" msgid "Usage: cupsaddsmb [options] printer1 ... printerN" msgstr "Uso: cupsaddsmb [opzioni] stampante1 ... stampanteN" msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]" msgstr "Uso: cupsctl [opzioni] [param=valore ... paramN=valoreN]" msgid "Usage: cupsd [options]" msgstr "Uso: cupsd [opzioni]" msgid "Usage: cupsfilter [ options ] [ -- ] filename" msgstr "" msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]" msgstr "Uso: cupstestdsc [opzioni] file.ps [... file.ps]" msgid "" "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" msgstr "Uso: cupstestppd [opzioni] file1.ppd[.gz] [... fileN.ppd[.gz]]" msgid "" "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " ippfind [options] name[.regtype[.domain.]] ... [expression]\n" " ippfind --help\n" " ippfind --version" msgstr "" "Uso: ippfind [opzioni] regtype[,subtype][.dominio.] ... [espressione]\n" " ippfind [opzioni] nome[.regtype[.dominio.]] ... [espressione]\n" " ippfind --help\n" " ippfind --version" msgid "Usage: ipptool [options] URI filename [ ... filenameN ]" msgstr "Uso: ipptool [opzioni] URI file [ ... fileN ]" msgid "Usage: lpmove job/src dest" msgstr "Uso: lpmove job/src dest" msgid "" "Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " lpoptions [-h server] [-E] -x printer" msgstr "" "Uso: lpoptions [-h server] [-E] -d stampante\n" " lpoptions [-h server] [-E] [-p stampante] -l\n" " lpoptions [-h server] [-E] -p stampante -o opzione[=valore] ...\n" " lpoptions [-h server] [-E] -x stampante" msgid "" "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" msgstr "" "Uso: lpq [-P dest] [-U username] [-h hostname[:porta]] [-l] [+intervallo]" msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" msgstr "Uso: ppdc [opzioni] file.drv [ ... fileN.drv ]" msgid "Usage: ppdhtml [options] filename.drv >filename.html" msgstr "Uso: ppdhtml [opzioni] file.drv >file.html" msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgstr "Uso: ppdi [opzioni] file.ppd [ ... fileN.ppd ]" msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgstr "Uso: ppdmerge [opzioni] file.ppd [ ... fileN.ppd ]" msgid "" "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" msgstr "Uso: ppdpo [opzioni] -o file.po file.drv [ ... fileN.drv ]" msgid "Usage: snmp [host-or-ip-address]" msgstr "Uso: snmp [host-o-indirizzo-ip]" msgid "Value uses indefinite length" msgstr "Il valore utilizza una lunghezza indefinita" msgid "VarBind uses indefinite length" msgstr "VarBind utilizza una lunghezza indefinita" msgid "Vellum Paper" msgstr "" msgid "Version uses indefinite length" msgstr "Version utilizza una lunghezza indefinita" msgid "Waiting for job to complete." msgstr "In attesa di lavoro da completare." msgid "Waiting for printer to become available." msgstr "In attesa che la stampante ritorni disponibile." msgid "Waiting for printer to finish." msgstr "In attesa che la stampante finisca." msgid "Warning, no Windows 2000 printer drivers are installed." msgstr "" "Attenzione, nessun driver di Windows 2000 della stampante è stato installato." msgid "Waterproof Fabric" msgstr "" msgid "Web Interface is Disabled" msgstr "L'interfaccia web è stata disabilitata" msgid "Wet Film" msgstr "" msgid "Windowed Envelope" msgstr "" msgid "Yes" msgstr "Sì" #, c-format msgid "" "You must access this page using the URL https://" "%s:%d%s." msgstr "" "Bisogna accedere a questa pagina, usando l'URL https://%s:%d%s." msgid "Z Fold" msgstr "" msgid "ZPL Label Printer" msgstr "ZPL Label Printer" msgid "Zebra" msgstr "Zebra" msgid "aborted" msgstr "interrotto" msgid "accuracy-units" msgstr "Accuracy Units" msgid "accuracy-units.mm" msgstr "Mm" msgid "accuracy-units.nm" msgstr "Nm" msgid "accuracy-units.um" msgstr "Um" msgid "baling" msgstr "Bale Output" msgid "baling-type" msgstr "Baling Type" msgid "baling-type.band" msgstr "Band" msgid "baling-type.shrink-wrap" msgstr "Shrink Wrap" msgid "baling-type.wrap" msgstr "Wrap" msgid "baling-when" msgstr "Baling When" msgid "baling-when.after-job" msgstr "After Job" msgid "baling-when.after-sets" msgstr "After Sets" msgid "binding" msgstr "Bind Output" msgid "binding-reference-edge" msgstr "Binding Reference Edge" msgid "binding-reference-edge.bottom" msgstr "Bottom" msgid "binding-reference-edge.left" msgstr "Left" msgid "binding-reference-edge.right" msgstr "Right" msgid "binding-reference-edge.top" msgstr "Top" msgid "binding-type" msgstr "Binding Type" msgid "binding-type.adhesive" msgstr "Adhesive" msgid "binding-type.comb" msgstr "Comb" msgid "binding-type.flat" msgstr "Flat" msgid "binding-type.padding" msgstr "Padding" msgid "binding-type.perfect" msgstr "Perfect" msgid "binding-type.spiral" msgstr "Spiral" msgid "binding-type.tape" msgstr "Tape" msgid "binding-type.velo" msgstr "Velo" msgid "canceled" msgstr "eliminato" msgid "charge-info-message" msgstr "Charge Info Message" msgid "coating" msgstr "Coat Sheets" msgid "coating-sides" msgstr "Coating Sides" msgid "coating-sides.back" msgstr "Back" msgid "coating-sides.both" msgstr "Both" msgid "coating-sides.front" msgstr "Front" msgid "coating-type" msgstr "Coating Type" msgid "coating-type.archival" msgstr "Archival" msgid "coating-type.archival-glossy" msgstr "Archival Glossy" msgid "coating-type.archival-matte" msgstr "Archival Matte" msgid "coating-type.archival-semi-gloss" msgstr "Archival Semi Gloss" msgid "coating-type.glossy" msgstr "Glossy" msgid "coating-type.high-gloss" msgstr "High Gloss" msgid "coating-type.matte" msgstr "Matte" msgid "coating-type.semi-gloss" msgstr "Semi-Gloss" msgid "coating-type.silicone" msgstr "Silicone" msgid "coating-type.translucent" msgstr "Translucent" msgid "completed" msgstr "completato" msgid "confirmation-sheet-print" msgstr "Confirmation Sheet Print" msgid "copies" msgstr "Copies" msgid "cover-back" msgstr "Cover Back" msgid "cover-front" msgstr "Cover Front" msgid "cover-sheet-info" msgstr "Cover Sheet Info" msgid "cover-sheet-info-supported.date-time" msgstr "Date Time" msgid "cover-sheet-info-supported.from-name" msgstr "From Name" msgid "cover-sheet-info-supported.logo" msgstr "Logo" msgid "cover-sheet-info-supported.message" msgstr "Message" msgid "cover-sheet-info-supported.organization" msgstr "Organization" msgid "cover-sheet-info-supported.subject" msgstr "Subject" msgid "cover-sheet-info-supported.to-name" msgstr "To Name" msgid "cover-type" msgstr "Cover Type" msgid "cover-type.no-cover" msgstr "No Cover" msgid "cover-type.print-back" msgstr "Print Back" msgid "cover-type.print-both" msgstr "Print Both" msgid "cover-type.print-front" msgstr "Print Front" msgid "cover-type.print-none" msgstr "Print None" msgid "covering" msgstr "Cover Output" msgid "covering-name" msgstr "Covering Name" msgid "covering-name.plain" msgstr "Plain" msgid "covering-name.pre-cut" msgstr "Pre Cut" msgid "covering-name.pre-printed" msgstr "Pre Printed" msgid "cups-deviced failed to execute." msgstr "cups-deviced ha smesso di funzionare." msgid "cups-driverd failed to execute." msgstr "cups-driverd ha smesso di funzionare." #, c-format msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "cupsaddsmb: nessun file PPD per la stampante \"%s\" - %s" msgid "cupsctl: Cannot set Listen or Port directly." msgstr "cupsctl: non è possibile impostare direttamente Listen o Port." #, c-format msgid "cupsctl: Unable to connect to server: %s" msgstr "cupsctl: non è possibile connettersi al server: %s" #, c-format msgid "cupsctl: Unknown option \"%s\"" msgstr "cupsctl: opzione sconosciuta \"%s\"" #, c-format msgid "cupsctl: Unknown option \"-%c\"" msgstr "cupsctl: opzione sconosciuta \"-%c\"" msgid "cupsd: Expected config filename after \"-c\" option." msgstr "cupsd: dopo l'opzione \"-c\" è previsto il file di configurazione." msgid "cupsd: Expected cups-files.conf filename after \"-s\" option." msgstr "cupsd: dopo l'opzione \"-s\" è previsto il file cups-files.conf." msgid "cupsd: On-demand support not compiled in, running in normal mode." msgstr "" msgid "cupsd: Relative cups-files.conf filename not allowed." msgstr "cupsd: non è consentito il file relativo cups-files.conf." msgid "cupsd: Unable to get current directory." msgstr "cupsd: non è possibile ottenere la directory corrente." msgid "cupsd: Unable to get path to cups-files.conf file." msgstr "cupsd: non è possibile ottenere il path del file cups-files.conf." #, c-format msgid "cupsd: Unknown argument \"%s\" - aborting." msgstr "cupsd: argomento sconosciuto \"%s\" - operazione interrotta." #, c-format msgid "cupsd: Unknown option \"%c\" - aborting." msgstr "cupsd: opzione sconosciuta \"%c\" - operazione interrotta." #, c-format msgid "cupsfilter: Invalid document number %d." msgstr "cupsfilter: il numero del documento non è valido %d." #, c-format msgid "cupsfilter: Invalid job ID %d." msgstr "cupsfilter: l'ID del processo non è valido %d." msgid "cupsfilter: Only one filename can be specified." msgstr "cupsfilter: può essere specificato solo un nome del file." #, c-format msgid "cupsfilter: Unable to get job file - %s" msgstr "cupsfilter: non è possibile ottenere il file del processo - %s" msgid "cupstestppd: The -q option is incompatible with the -v option." msgstr "cupstestppd: l'opzione -q non è compatibile con l'opzione -v." msgid "cupstestppd: The -v option is incompatible with the -q option." msgstr "cupstestppd: l'opzione -v è incompatibile con l'opzione -q." msgid "detailed-status-message" msgstr "Detailed Status Message" #, c-format msgid "device for %s/%s: %s" msgstr "dispositivo per %s/%s: %s" #, c-format msgid "device for %s: %s" msgstr "dispositivo per %s: %s" msgid "document-copies" msgstr "Copies" msgid "document-state" msgstr "Document State" msgid "document-state-reasons" msgstr "Detailed Document State" msgid "document-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "document-state-reasons.canceled-at-device" msgstr "Canceled At Device" msgid "document-state-reasons.canceled-by-operator" msgstr "Canceled By Operator" msgid "document-state-reasons.canceled-by-user" msgstr "Canceled By User" msgid "document-state-reasons.completed-successfully" msgstr "Completed Successfully" msgid "document-state-reasons.completed-with-errors" msgstr "Completed With Errors" msgid "document-state-reasons.completed-with-warnings" msgstr "Completed With Warnings" msgid "document-state-reasons.compression-error" msgstr "Compression Error" msgid "document-state-reasons.data-insufficient" msgstr "Data Insufficient" msgid "document-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "document-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "document-state-reasons.digital-signature-wait" msgstr "Digital Signature Wait" msgid "document-state-reasons.document-access-error" msgstr "Document Access Error" msgid "document-state-reasons.document-fetchable" msgstr "Document Fetchable" msgid "document-state-reasons.document-format-error" msgstr "Document Format Error" msgid "document-state-reasons.document-password-error" msgstr "Document Password Error" msgid "document-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "document-state-reasons.document-security-error" msgstr "Document Security Error" msgid "document-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "document-state-reasons.errors-detected" msgstr "Errors Detected" msgid "document-state-reasons.incoming" msgstr "Incoming" msgid "document-state-reasons.interpreting" msgstr "Interpreting" msgid "document-state-reasons.none" msgstr "None" msgid "document-state-reasons.outgoing" msgstr "Outgoing" msgid "document-state-reasons.printing" msgstr "Printing" msgid "document-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "document-state-reasons.queued" msgstr "Queued" msgid "document-state-reasons.queued-for-marker" msgstr "Queued For Marker" msgid "document-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "document-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "document-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "document-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "document-state-reasons.transforming" msgstr "Transforming" msgid "document-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "document-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "document-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "document-state.3" msgstr "Pending" msgid "document-state.5" msgstr "Processing" msgid "document-state.6" msgstr "Processing Stopped" msgid "document-state.7" msgstr "Canceled" msgid "document-state.8" msgstr "Aborted" msgid "document-state.9" msgstr "Completed" msgid "error-index uses indefinite length" msgstr "error-index utilizza una lunghezza indefinita" msgid "error-status uses indefinite length" msgstr "error-status utilizza una lunghezza indefinita" msgid "feed-orientation" msgstr "Feed Orientation" msgid "feed-orientation.long-edge-first" msgstr "Long Edge First" msgid "feed-orientation.short-edge-first" msgstr "Short Edge First" msgid "fetch-status-code" msgstr "Fetch Status Code" msgid "finishing-template" msgstr "Finishing Template" msgid "finishing-template.bale" msgstr "Bale" msgid "finishing-template.bind" msgstr "Bind" msgid "finishing-template.bind-bottom" msgstr "Bind Bottom" msgid "finishing-template.bind-left" msgstr "Bind Left" msgid "finishing-template.bind-right" msgstr "Bind Right" msgid "finishing-template.bind-top" msgstr "Bind Top" msgid "finishing-template.booklet-maker" msgstr "Booklet Maker" msgid "finishing-template.coat" msgstr "Coat" msgid "finishing-template.cover" msgstr "Cover" msgid "finishing-template.edge-stitch" msgstr "Edge Stitch" msgid "finishing-template.edge-stitch-bottom" msgstr "Edge Stitch Bottom" msgid "finishing-template.edge-stitch-left" msgstr "Edge Stitch Left" msgid "finishing-template.edge-stitch-right" msgstr "Edge Stitch Right" msgid "finishing-template.edge-stitch-top" msgstr "Edge Stitch Top" msgid "finishing-template.fold" msgstr "Fold" msgid "finishing-template.fold-accordion" msgstr "Fold Accordion" msgid "finishing-template.fold-double-gate" msgstr "Fold Double Gate" msgid "finishing-template.fold-engineering-z" msgstr "Fold Engineering Z" msgid "finishing-template.fold-gate" msgstr "Fold Gate" msgid "finishing-template.fold-half" msgstr "Fold Half" msgid "finishing-template.fold-half-z" msgstr "Fold Half Z" msgid "finishing-template.fold-left-gate" msgstr "Fold Left Gate" msgid "finishing-template.fold-letter" msgstr "Fold Letter" msgid "finishing-template.fold-parallel" msgstr "Fold Parallel" msgid "finishing-template.fold-poster" msgstr "Fold Poster" msgid "finishing-template.fold-right-gate" msgstr "Fold Right Gate" msgid "finishing-template.fold-z" msgstr "Fold Z" msgid "finishing-template.jdf-f10-1" msgstr "JDF F10 1" msgid "finishing-template.jdf-f10-2" msgstr "JDF F10 2" msgid "finishing-template.jdf-f10-3" msgstr "JDF F10 3" msgid "finishing-template.jdf-f12-1" msgstr "JDF F12 1" msgid "finishing-template.jdf-f12-10" msgstr "JDF F12 10" msgid "finishing-template.jdf-f12-11" msgstr "JDF F12 11" msgid "finishing-template.jdf-f12-12" msgstr "JDF F12 12" msgid "finishing-template.jdf-f12-13" msgstr "JDF F12 13" msgid "finishing-template.jdf-f12-14" msgstr "JDF F12 14" msgid "finishing-template.jdf-f12-2" msgstr "JDF F12 2" msgid "finishing-template.jdf-f12-3" msgstr "JDF F12 3" msgid "finishing-template.jdf-f12-4" msgstr "JDF F12 4" msgid "finishing-template.jdf-f12-5" msgstr "JDF F12 5" msgid "finishing-template.jdf-f12-6" msgstr "JDF F12 6" msgid "finishing-template.jdf-f12-7" msgstr "JDF F12 7" msgid "finishing-template.jdf-f12-8" msgstr "JDF F12 8" msgid "finishing-template.jdf-f12-9" msgstr "JDF F12 9" msgid "finishing-template.jdf-f14-1" msgstr "JDF F14 1" msgid "finishing-template.jdf-f16-1" msgstr "JDF F16 1" msgid "finishing-template.jdf-f16-10" msgstr "JDF F16 10" msgid "finishing-template.jdf-f16-11" msgstr "JDF F16 11" msgid "finishing-template.jdf-f16-12" msgstr "JDF F16 12" msgid "finishing-template.jdf-f16-13" msgstr "JDF F16 13" msgid "finishing-template.jdf-f16-14" msgstr "JDF F16 14" msgid "finishing-template.jdf-f16-2" msgstr "JDF F16 2" msgid "finishing-template.jdf-f16-3" msgstr "JDF F16 3" msgid "finishing-template.jdf-f16-4" msgstr "JDF F16 4" msgid "finishing-template.jdf-f16-5" msgstr "JDF F16 5" msgid "finishing-template.jdf-f16-6" msgstr "JDF F16 6" msgid "finishing-template.jdf-f16-7" msgstr "JDF F16 7" msgid "finishing-template.jdf-f16-8" msgstr "JDF F16 8" msgid "finishing-template.jdf-f16-9" msgstr "JDF F16 9" msgid "finishing-template.jdf-f18-1" msgstr "JDF F18 1" msgid "finishing-template.jdf-f18-2" msgstr "JDF F18 2" msgid "finishing-template.jdf-f18-3" msgstr "JDF F18 3" msgid "finishing-template.jdf-f18-4" msgstr "JDF F18 4" msgid "finishing-template.jdf-f18-5" msgstr "JDF F18 5" msgid "finishing-template.jdf-f18-6" msgstr "JDF F18 6" msgid "finishing-template.jdf-f18-7" msgstr "JDF F18 7" msgid "finishing-template.jdf-f18-8" msgstr "JDF F18 8" msgid "finishing-template.jdf-f18-9" msgstr "JDF F18 9" msgid "finishing-template.jdf-f2-1" msgstr "JDF F2 1" msgid "finishing-template.jdf-f20-1" msgstr "JDF F20 1" msgid "finishing-template.jdf-f20-2" msgstr "JDF F20 2" msgid "finishing-template.jdf-f24-1" msgstr "JDF F24 1" msgid "finishing-template.jdf-f24-10" msgstr "JDF F24 10" msgid "finishing-template.jdf-f24-11" msgstr "JDF F24 11" msgid "finishing-template.jdf-f24-2" msgstr "JDF F24 2" msgid "finishing-template.jdf-f24-3" msgstr "JDF F24 3" msgid "finishing-template.jdf-f24-4" msgstr "JDF F24 4" msgid "finishing-template.jdf-f24-5" msgstr "JDF F24 5" msgid "finishing-template.jdf-f24-6" msgstr "JDF F24 6" msgid "finishing-template.jdf-f24-7" msgstr "JDF F24 7" msgid "finishing-template.jdf-f24-8" msgstr "JDF F24 8" msgid "finishing-template.jdf-f24-9" msgstr "JDF F24 9" msgid "finishing-template.jdf-f28-1" msgstr "JDF F28 1" msgid "finishing-template.jdf-f32-1" msgstr "JDF F32 1" msgid "finishing-template.jdf-f32-2" msgstr "JDF F32 2" msgid "finishing-template.jdf-f32-3" msgstr "JDF F32 3" msgid "finishing-template.jdf-f32-4" msgstr "JDF F32 4" msgid "finishing-template.jdf-f32-5" msgstr "JDF F32 5" msgid "finishing-template.jdf-f32-6" msgstr "JDF F32 6" msgid "finishing-template.jdf-f32-7" msgstr "JDF F32 7" msgid "finishing-template.jdf-f32-8" msgstr "JDF F32 8" msgid "finishing-template.jdf-f32-9" msgstr "JDF F32 9" msgid "finishing-template.jdf-f36-1" msgstr "JDF F36 1" msgid "finishing-template.jdf-f36-2" msgstr "JDF F36 2" msgid "finishing-template.jdf-f4-1" msgstr "JDF F4 1" msgid "finishing-template.jdf-f4-2" msgstr "JDF F4 2" msgid "finishing-template.jdf-f40-1" msgstr "JDF F40 1" msgid "finishing-template.jdf-f48-1" msgstr "JDF F48 1" msgid "finishing-template.jdf-f48-2" msgstr "JDF F48 2" msgid "finishing-template.jdf-f6-1" msgstr "JDF F6 1" msgid "finishing-template.jdf-f6-2" msgstr "JDF F6 2" msgid "finishing-template.jdf-f6-3" msgstr "JDF F6 3" msgid "finishing-template.jdf-f6-4" msgstr "JDF F6 4" msgid "finishing-template.jdf-f6-5" msgstr "JDF F6 5" msgid "finishing-template.jdf-f6-6" msgstr "JDF F6 6" msgid "finishing-template.jdf-f6-7" msgstr "JDF F6 7" msgid "finishing-template.jdf-f6-8" msgstr "JDF F6 8" msgid "finishing-template.jdf-f64-1" msgstr "JDF F64 1" msgid "finishing-template.jdf-f64-2" msgstr "JDF F64 2" msgid "finishing-template.jdf-f8-1" msgstr "JDF F8 1" msgid "finishing-template.jdf-f8-2" msgstr "JDF F8 2" msgid "finishing-template.jdf-f8-3" msgstr "JDF F8 3" msgid "finishing-template.jdf-f8-4" msgstr "JDF F8 4" msgid "finishing-template.jdf-f8-5" msgstr "JDF F8 5" msgid "finishing-template.jdf-f8-6" msgstr "JDF F8 6" msgid "finishing-template.jdf-f8-7" msgstr "JDF F8 7" msgid "finishing-template.jog-offset" msgstr "Jog Offset" msgid "finishing-template.laminate" msgstr "Laminate" msgid "finishing-template.punch" msgstr "Punch" msgid "finishing-template.punch-bottom-left" msgstr "Punch Bottom Left" msgid "finishing-template.punch-bottom-right" msgstr "Punch Bottom Right" msgid "finishing-template.punch-dual-bottom" msgstr "Punch Dual Bottom" msgid "finishing-template.punch-dual-left" msgstr "Punch Dual Left" msgid "finishing-template.punch-dual-right" msgstr "Punch Dual Right" msgid "finishing-template.punch-dual-top" msgstr "Punch Dual Top" msgid "finishing-template.punch-multiple-bottom" msgstr "Punch Multiple Bottom" msgid "finishing-template.punch-multiple-left" msgstr "Punch Multiple Left" msgid "finishing-template.punch-multiple-right" msgstr "Punch Multiple Right" msgid "finishing-template.punch-multiple-top" msgstr "Punch Multiple Top" msgid "finishing-template.punch-quad-bottom" msgstr "Punch Quad Bottom" msgid "finishing-template.punch-quad-left" msgstr "Punch Quad Left" msgid "finishing-template.punch-quad-right" msgstr "Punch Quad Right" msgid "finishing-template.punch-quad-top" msgstr "Punch Quad Top" msgid "finishing-template.punch-top-left" msgstr "Punch Top Left" msgid "finishing-template.punch-top-right" msgstr "Punch Top Right" msgid "finishing-template.punch-triple-bottom" msgstr "Punch Triple Bottom" msgid "finishing-template.punch-triple-left" msgstr "Punch Triple Left" msgid "finishing-template.punch-triple-right" msgstr "Punch Triple Right" msgid "finishing-template.punch-triple-top" msgstr "Punch Triple Top" msgid "finishing-template.saddle-stitch" msgstr "Saddle Stitch" msgid "finishing-template.staple" msgstr "Staple" msgid "finishing-template.staple-bottom-left" msgstr "Staple Bottom Left" msgid "finishing-template.staple-bottom-right" msgstr "Staple Bottom Right" msgid "finishing-template.staple-dual-bottom" msgstr "Staple Dual Bottom" msgid "finishing-template.staple-dual-left" msgstr "Staple Dual Left" msgid "finishing-template.staple-dual-right" msgstr "Staple Dual Right" msgid "finishing-template.staple-dual-top" msgstr "Staple Dual Top" msgid "finishing-template.staple-top-left" msgstr "Staple Top Left" msgid "finishing-template.staple-top-right" msgstr "Staple Top Right" msgid "finishing-template.staple-triple-bottom" msgstr "Staple Triple Bottom" msgid "finishing-template.staple-triple-left" msgstr "Staple Triple Left" msgid "finishing-template.staple-triple-right" msgstr "Staple Triple Right" msgid "finishing-template.staple-triple-top" msgstr "Staple Triple Top" msgid "finishing-template.trim" msgstr "Trim" msgid "finishing-template.trim-after-copies" msgstr "Trim After Copies" msgid "finishing-template.trim-after-documents" msgstr "Trim After Documents" msgid "finishing-template.trim-after-job" msgstr "Trim After Job" msgid "finishing-template.trim-after-pages" msgstr "Trim After Pages" msgid "finishings" msgstr "Finishings" msgid "finishings-col" msgstr "Finishings" msgid "finishings.10" msgstr "Fold" msgid "finishings.100" msgstr "Fold Z" msgid "finishings.101" msgstr "Fold Engineering Z" msgid "finishings.11" msgstr "Trim" msgid "finishings.12" msgstr "Bale" msgid "finishings.13" msgstr "Booklet Maker" msgid "finishings.14" msgstr "Jog Offset" msgid "finishings.15" msgstr "Coat" msgid "finishings.16" msgstr "Laminate" msgid "finishings.20" msgstr "Staple Top Left" msgid "finishings.21" msgstr "Staple Bottom Left" msgid "finishings.22" msgstr "Staple Top Right" msgid "finishings.23" msgstr "Staple Bottom Right" msgid "finishings.24" msgstr "Edge Stitch Left" msgid "finishings.25" msgstr "Edge Stitch Top" msgid "finishings.26" msgstr "Edge Stitch Right" msgid "finishings.27" msgstr "Edge Stitch Bottom" msgid "finishings.28" msgstr "Staple Dual Left" msgid "finishings.29" msgstr "Staple Dual Top" msgid "finishings.3" msgstr "None" msgid "finishings.30" msgstr "Staple Dual Right" msgid "finishings.31" msgstr "Staple Dual Bottom" msgid "finishings.32" msgstr "Staple Triple Left" msgid "finishings.33" msgstr "Staple Triple Top" msgid "finishings.34" msgstr "Staple Triple Right" msgid "finishings.35" msgstr "Staple Triple Bottom" msgid "finishings.4" msgstr "Staple" msgid "finishings.5" msgstr "Punch" msgid "finishings.50" msgstr "Bind Left" msgid "finishings.51" msgstr "Bind Top" msgid "finishings.52" msgstr "Bind Right" msgid "finishings.53" msgstr "Bind Bottom" msgid "finishings.6" msgstr "Cover" msgid "finishings.60" msgstr "Trim After Pages" msgid "finishings.61" msgstr "Trim After Documents" msgid "finishings.62" msgstr "Trim After Copies" msgid "finishings.63" msgstr "Trim After Job" msgid "finishings.7" msgstr "Bind" msgid "finishings.70" msgstr "Punch Top Left" msgid "finishings.71" msgstr "Punch Bottom Left" msgid "finishings.72" msgstr "Punch Top Right" msgid "finishings.73" msgstr "Punch Bottom Right" msgid "finishings.74" msgstr "Punch Dual Left" msgid "finishings.75" msgstr "Punch Dual Top" msgid "finishings.76" msgstr "Punch Dual Right" msgid "finishings.77" msgstr "Punch Dual Bottom" msgid "finishings.78" msgstr "Punch Triple Left" msgid "finishings.79" msgstr "Punch Triple Top" msgid "finishings.8" msgstr "Saddle Stitch" msgid "finishings.80" msgstr "Punch Triple Right" msgid "finishings.81" msgstr "Punch Triple Bottom" msgid "finishings.82" msgstr "Punch Quad Left" msgid "finishings.83" msgstr "Punch Quad Top" msgid "finishings.84" msgstr "Punch Quad Right" msgid "finishings.85" msgstr "Punch Quad Bottom" msgid "finishings.86" msgstr "Punch Multiple Left" msgid "finishings.87" msgstr "Punch Multiple Top" msgid "finishings.88" msgstr "Punch Multiple Right" msgid "finishings.89" msgstr "Punch Multiple Bottom" msgid "finishings.9" msgstr "Edge Stitch" msgid "finishings.90" msgstr "Fold Accordion" msgid "finishings.91" msgstr "Fold Double Gate" msgid "finishings.92" msgstr "Fold Gate" msgid "finishings.93" msgstr "Fold Half" msgid "finishings.94" msgstr "Fold Half Z" msgid "finishings.95" msgstr "Fold Left Gate" msgid "finishings.96" msgstr "Fold Letter" msgid "finishings.97" msgstr "Fold Parallel" msgid "finishings.98" msgstr "Fold Poster" msgid "finishings.99" msgstr "Fold Right Gate" msgid "folding" msgstr "Fold" msgid "folding-direction" msgstr "Folding Direction" msgid "folding-direction.inward" msgstr "Inward" msgid "folding-direction.outward" msgstr "Outward" msgid "folding-offset" msgstr "Fold Position" msgid "folding-reference-edge" msgstr "Folding Reference Edge" msgid "folding-reference-edge.bottom" msgstr "Bottom" msgid "folding-reference-edge.left" msgstr "Left" msgid "folding-reference-edge.right" msgstr "Right" msgid "folding-reference-edge.top" msgstr "Top" msgid "font-name-requested" msgstr "Font Name" msgid "font-size-requested" msgstr "Font Size" msgid "force-front-side" msgstr "Force Front Side" msgid "from-name" msgstr "From Name" msgid "held" msgstr "svolto" msgid "help\t\tGet help on commands." msgstr "help\t\tOttenere un aiuto per i comandi." msgid "idle" msgstr "inattiva" msgid "imposition-template" msgstr "Imposition Template" msgid "imposition-template.none" msgstr "None" msgid "imposition-template.signature" msgstr "Signature" msgid "input-attributes" msgstr "Input Attributes" msgid "input-auto-scaling" msgstr "Scan Auto Scaling" msgid "input-auto-skew-correction" msgstr "Scan Auto Skew Correction" msgid "input-brightness" msgstr "Scan Brightness" msgid "input-color-mode" msgstr "Input Color Mode" msgid "input-color-mode.auto" msgstr "Automatic" msgid "input-color-mode.bi-level" msgstr "Bi-Level" msgid "input-color-mode.cmyk_16" msgstr "CMYK 16" msgid "input-color-mode.cmyk_8" msgstr "CMYK 8" msgid "input-color-mode.color" msgstr "Color" msgid "input-color-mode.color_8" msgstr "Color 8" msgid "input-color-mode.monochrome" msgstr "Monochrome" msgid "input-color-mode.monochrome_16" msgstr "Monochrome 16" msgid "input-color-mode.monochrome_4" msgstr "Monochrome 4" msgid "input-color-mode.monochrome_8" msgstr "Monochrome 8" msgid "input-color-mode.rgb_16" msgstr "RGB 16" msgid "input-color-mode.rgba_16" msgstr "RGBA 16" msgid "input-color-mode.rgba_8" msgstr "RGBA 8" msgid "input-content-type" msgstr "Input Content Type" msgid "input-content-type.auto" msgstr "Automatic" msgid "input-content-type.halftone" msgstr "Halftone" msgid "input-content-type.line-art" msgstr "Line Art" msgid "input-content-type.magazine" msgstr "Magazine" msgid "input-content-type.photo" msgstr "Photo" msgid "input-content-type.text" msgstr "Text" msgid "input-content-type.text-and-photo" msgstr "Text And Photo" msgid "input-contrast" msgstr "Scan Contrast" msgid "input-film-scan-mode" msgstr "Input Film Scan Mode" msgid "input-film-scan-mode.black-and-white-negative-film" msgstr "Black And White Negative Film" msgid "input-film-scan-mode.color-negative-film" msgstr "Color Negative Film" msgid "input-film-scan-mode.color-slide-film" msgstr "Color Slide Film" msgid "input-film-scan-mode.not-applicable" msgstr "Not Applicable" msgid "input-images-to-transfer" msgstr "Scan Images To Transfer" msgid "input-media" msgstr "Input Media" msgid "input-media.auto" msgstr "Automatic" msgid "input-orientation-requested" msgstr "Input Orientation" msgid "input-quality" msgstr "Input Quality" msgid "input-resolution" msgstr "Scan Resolution" msgid "input-scaling-height" msgstr "Scan Scaling Height" msgid "input-scaling-width" msgstr "Scan Scaling Width" msgid "input-scan-regions" msgstr "Scan Regions" msgid "input-sharpness" msgstr "Scan Sharpness" msgid "input-sides" msgstr "Input Sides" msgid "input-source" msgstr "Input Source" msgid "input-source.adf" msgstr "Adf" msgid "input-source.film-reader" msgstr "Film Reader" msgid "input-source.platen" msgstr "Platen" msgid "insert-after-page-number" msgstr "Insert Page Number" msgid "insert-count" msgstr "Insert Count" msgid "insert-sheet" msgstr "Insert Sheet" #, c-format msgid "ippfind: Bad regular expression: %s" msgstr "ippfind: l'espressione regolare non è valida: %s" msgid "ippfind: Cannot use --and after --or." msgstr "ippfind: non è possibile usare --and dopo --or." #, c-format msgid "ippfind: Expected key name after %s." msgstr "ippfind: è previsto il nome della chiave dopo %s." #, c-format msgid "ippfind: Expected port range after %s." msgstr "ippfind: è previsto un intervallo di porte dopo %s." #, c-format msgid "ippfind: Expected program after %s." msgstr "ippfind: è previsto un programma dopo %s." #, c-format msgid "ippfind: Expected semi-colon after %s." msgstr "ippfind: è previsto un punto e virgola dopo %s. " msgid "ippfind: Missing close brace in substitution." msgstr "ippfind: manca parentesi graffa di chiusura in sostituzione." msgid "ippfind: Missing close parenthesis." msgstr "ippfind: mancano le parentesi chiuse." msgid "ippfind: Missing expression before \"--and\"." msgstr "ippfind: manca l'espressione prima di \"--and\"." msgid "ippfind: Missing expression before \"--or\"." msgstr "ippfind: manca l'espressione prima di \"--or\"." #, c-format msgid "ippfind: Missing key name after %s." msgstr "ippfind: manca il nome della chiave dopo %s." msgid "ippfind: Missing open parenthesis." msgstr "ippfind: mancano le parentesi aperte." #, c-format msgid "ippfind: Missing program after %s." msgstr "ippfind: manca il programma dopo %s." #, c-format msgid "ippfind: Missing regular expression after %s." msgstr "ippfind: manca l'espressione regolare dopo %s." #, c-format msgid "ippfind: Missing semi-colon after %s." msgstr "ippfind: manca il punto e virgola dopo %s." msgid "ippfind: Out of memory." msgstr "ippfind: memoria insufficiente." msgid "ippfind: Too many parenthesis." msgstr "ippfind: troppe parentesi." #, c-format msgid "ippfind: Unable to browse or resolve: %s" msgstr "ippfind: non è possibile visualizzare oppure risolvere: %s" #, c-format msgid "ippfind: Unable to execute \"%s\": %s" msgstr "ippfind: non è possibile eseguire \"%s\": %s" #, c-format msgid "ippfind: Unable to use Bonjour: %s" msgstr "ippfind: non è possibile utilizzare Bonjour: %s" #, c-format msgid "ippfind: Unknown variable \"{%s}\"." msgstr "ippfind: variabile sconosciuta \"{%s}\"." msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." msgstr "" #, c-format msgid "ipptool: Bad URI - %s." msgstr "ipptool: l'URI non è valido - %s." msgid "ipptool: Invalid seconds for \"-i\"." msgstr "ipptool: secondi non validi per \"-i\"." msgid "ipptool: May only specify a single URI." msgstr "ipptool: può specificare solo un singolo URI." msgid "ipptool: Missing count for \"-n\"." msgstr "ipptool: conteggio mancante per \"-n\"." msgid "ipptool: Missing filename for \"-f\"." msgstr "ipptool: manca il file per \"-f\"." msgid "ipptool: Missing name=value for \"-d\"." msgstr "ipptool: manca nome=valore per \"-d\"." msgid "ipptool: Missing seconds for \"-i\"." msgstr "ipptool: mancano i secondi per \"-i\"." msgid "ipptool: URI required before test file." msgstr "ipptool: l'URI è richiesto prima del file di testo." #, c-format msgid "ipptool: Unknown option \"-%c\"." msgstr "ipptool: opzione sconosciuta \"-%c\"." msgid "job-account-id" msgstr "Job Account ID" msgid "job-account-type" msgstr "Job Account Type" msgid "job-account-type.general" msgstr "General" msgid "job-account-type.group" msgstr "Group" msgid "job-account-type.none" msgstr "None" msgid "job-accounting-output-bin" msgstr "Job Accounting Output Bin" msgid "job-accounting-sheets" msgstr "Job Accounting Sheets" msgid "job-accounting-sheets-type" msgstr "Job Accounting Sheets Type" msgid "job-accounting-sheets-type.none" msgstr "None" msgid "job-accounting-sheets-type.standard" msgstr "Standard" msgid "job-accounting-user-id" msgstr "Job Accounting User ID" msgid "job-collation-type" msgstr "Job Collation Type" msgid "job-collation-type.3" msgstr "Uncollated Sheets" msgid "job-collation-type.4" msgstr "Collated Documents" msgid "job-collation-type.5" msgstr "Uncollated Documents" msgid "job-copies" msgstr "Job Copies" msgid "job-cover-back" msgstr "Job Cover Back" msgid "job-cover-front" msgstr "Job Cover Front" msgid "job-delay-output-until" msgstr "Job Delay Output Until" msgid "job-delay-output-until-time" msgstr "Job Delay Output Until Time" msgid "job-delay-output-until.day-time" msgstr "Day Time" msgid "job-delay-output-until.evening" msgstr "Evening" msgid "job-delay-output-until.indefinite" msgstr "Indefinite" msgid "job-delay-output-until.night" msgstr "Night" msgid "job-delay-output-until.no-delay-output" msgstr "No Delay Output" msgid "job-delay-output-until.second-shift" msgstr "Second Shift" msgid "job-delay-output-until.third-shift" msgstr "Third Shift" msgid "job-delay-output-until.weekend" msgstr "Weekend" msgid "job-error-action" msgstr "Job Error Action" msgid "job-error-action.abort-job" msgstr "Abort Job" msgid "job-error-action.cancel-job" msgstr "Cancel Job" msgid "job-error-action.continue-job" msgstr "Continue Job" msgid "job-error-action.suspend-job" msgstr "Suspend Job" msgid "job-error-sheet" msgstr "Job Error Sheet" msgid "job-error-sheet-type" msgstr "Job Error Sheet Type" msgid "job-error-sheet-type.none" msgstr "None" msgid "job-error-sheet-type.standard" msgstr "Standard" msgid "job-error-sheet-when" msgstr "Job Error Sheet When" msgid "job-error-sheet-when.always" msgstr "Always" msgid "job-error-sheet-when.on-error" msgstr "On Error" msgid "job-finishings" msgstr "Job Finishings" msgid "job-hold-until" msgstr "Hold Until" msgid "job-hold-until-time" msgstr "Job Hold Until Time" msgid "job-hold-until.day-time" msgstr "Day Time" msgid "job-hold-until.evening" msgstr "Evening" msgid "job-hold-until.indefinite" msgstr "Released" msgid "job-hold-until.night" msgstr "Night" msgid "job-hold-until.no-hold" msgstr "No Hold" msgid "job-hold-until.second-shift" msgstr "Second Shift" msgid "job-hold-until.third-shift" msgstr "Third Shift" msgid "job-hold-until.weekend" msgstr "Weekend" msgid "job-mandatory-attributes" msgstr "Job Mandatory Attributes" msgid "job-name" msgstr "Job Name" msgid "job-phone-number" msgstr "Job Phone Number" msgid "job-printer-uri attribute missing." msgstr "manca l'attributo di job-printer-uri." msgid "job-priority" msgstr "Job Priority" msgid "job-recipient-name" msgstr "Job Recipient Name" msgid "job-save-disposition" msgstr "Job Save Disposition" msgid "job-sheet-message" msgstr "Job Sheet Message" msgid "job-sheets" msgstr "Banner Page" msgid "job-sheets-col" msgstr "Banner Page" msgid "job-sheets.first-print-stream-page" msgstr "First Print Stream Page" msgid "job-sheets.job-both-sheet" msgstr "Start and End Sheets" msgid "job-sheets.job-end-sheet" msgstr "End Sheet" msgid "job-sheets.job-start-sheet" msgstr "Start Sheet" msgid "job-sheets.none" msgstr "None" msgid "job-sheets.standard" msgstr "Standard" msgid "job-state" msgstr "Job State" msgid "job-state-message" msgstr "Job State Message" msgid "job-state-reasons" msgstr "Detailed Job State" msgid "job-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "job-state-reasons.account-authorization-failed" msgstr "Account Authorization Failed" msgid "job-state-reasons.account-closed" msgstr "Account Closed" msgid "job-state-reasons.account-info-needed" msgstr "Account Info Needed" msgid "job-state-reasons.account-limit-reached" msgstr "Account Limit Reached" msgid "job-state-reasons.compression-error" msgstr "Compression Error" msgid "job-state-reasons.conflicting-attributes" msgstr "Conflicting Attributes" msgid "job-state-reasons.connected-to-destination" msgstr "Connected To Destination" msgid "job-state-reasons.connecting-to-destination" msgstr "Connecting To Destination" msgid "job-state-reasons.destination-uri-failed" msgstr "Destination Uri Failed" msgid "job-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "job-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "job-state-reasons.document-access-error" msgstr "Document Access Error" msgid "job-state-reasons.document-format-error" msgstr "Document Format Error" msgid "job-state-reasons.document-password-error" msgstr "Document Password Error" msgid "job-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "job-state-reasons.document-security-error" msgstr "Document Security Error" msgid "job-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "job-state-reasons.errors-detected" msgstr "Errors Detected" msgid "job-state-reasons.job-canceled-at-device" msgstr "Job Canceled At Device" msgid "job-state-reasons.job-canceled-by-operator" msgstr "Job Canceled By Operator" msgid "job-state-reasons.job-canceled-by-user" msgstr "Job Canceled By User" msgid "job-state-reasons.job-completed-successfully" msgstr "Job Completed Successfully" msgid "job-state-reasons.job-completed-with-errors" msgstr "Job Completed With Errors" msgid "job-state-reasons.job-completed-with-warnings" msgstr "Job Completed With Warnings" msgid "job-state-reasons.job-data-insufficient" msgstr "Job Data Insufficient" msgid "job-state-reasons.job-delay-output-until-specified" msgstr "Job Delay Output Until Specified" msgid "job-state-reasons.job-digital-signature-wait" msgstr "Job Digital Signature Wait" msgid "job-state-reasons.job-fetchable" msgstr "Job Fetchable" msgid "job-state-reasons.job-held-for-review" msgstr "Job Held For Review" msgid "job-state-reasons.job-hold-until-specified" msgstr "Job Hold Until Specified" msgid "job-state-reasons.job-incoming" msgstr "Job Incoming" msgid "job-state-reasons.job-interpreting" msgstr "Job Interpreting" msgid "job-state-reasons.job-outgoing" msgstr "Job Outgoing" msgid "job-state-reasons.job-password-wait" msgstr "Job Password Wait" msgid "job-state-reasons.job-printed-successfully" msgstr "Job Printed Successfully" msgid "job-state-reasons.job-printed-with-errors" msgstr "Job Printed With Errors" msgid "job-state-reasons.job-printed-with-warnings" msgstr "Job Printed With Warnings" msgid "job-state-reasons.job-printing" msgstr "Job Printing" msgid "job-state-reasons.job-queued" msgstr "Job Queued" msgid "job-state-reasons.job-queued-for-marker" msgstr "Job Queued For Marker" msgid "job-state-reasons.job-release-wait" msgstr "Job Release Wait" msgid "job-state-reasons.job-restartable" msgstr "Job Restartable" msgid "job-state-reasons.job-resuming" msgstr "Job Resuming" msgid "job-state-reasons.job-saved-successfully" msgstr "Job Saved Successfully" msgid "job-state-reasons.job-saved-with-errors" msgstr "Job Saved With Errors" msgid "job-state-reasons.job-saved-with-warnings" msgstr "Job Saved With Warnings" msgid "job-state-reasons.job-saving" msgstr "Job Saving" msgid "job-state-reasons.job-spooling" msgstr "Job Spooling" msgid "job-state-reasons.job-streaming" msgstr "Job Streaming" msgid "job-state-reasons.job-suspended" msgstr "Job Suspended" msgid "job-state-reasons.job-suspended-by-operator" msgstr "Job Suspended By Operator" msgid "job-state-reasons.job-suspended-by-system" msgstr "Job Suspended By System" msgid "job-state-reasons.job-suspended-by-user" msgstr "Job Suspended By User" msgid "job-state-reasons.job-suspending" msgstr "Job Suspending" msgid "job-state-reasons.job-transferring" msgstr "Job Transferring" msgid "job-state-reasons.job-transforming" msgstr "Job Transforming" msgid "job-state-reasons.none" msgstr "None" msgid "job-state-reasons.printer-stopped" msgstr "Printer Stopped" msgid "job-state-reasons.printer-stopped-partly" msgstr "Printer Stopped Partly" msgid "job-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "job-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "job-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "job-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "job-state-reasons.service-off-line" msgstr "Service Off Line" msgid "job-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "job-state-reasons.unsupported-attributes-or-values" msgstr "Unsupported Attributes Or Values" msgid "job-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "job-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "job-state-reasons.waiting-for-user-action" msgstr "Waiting For User Action" msgid "job-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "job-state.3" msgstr "Pending" msgid "job-state.4" msgstr "Pending Held" msgid "job-state.5" msgstr "Processing" msgid "job-state.6" msgstr "Processing Stopped" msgid "job-state.7" msgstr "Canceled" msgid "job-state.8" msgstr "Aborted" msgid "job-state.9" msgstr "Completed" msgid "laminating" msgstr "Laminate Pages" msgid "laminating-sides" msgstr "Laminating Sides" msgid "laminating-sides.back" msgstr "Back" msgid "laminating-sides.both" msgstr "Both" msgid "laminating-sides.front" msgstr "Front" msgid "laminating-type" msgstr "Laminating Type" msgid "laminating-type.archival" msgstr "Archival" msgid "laminating-type.glossy" msgstr "Glossy" msgid "laminating-type.high-gloss" msgstr "High Gloss" msgid "laminating-type.matte" msgstr "Matte" msgid "laminating-type.semi-gloss" msgstr "Semi-Gloss" msgid "laminating-type.translucent" msgstr "Translucent" msgid "logo" msgstr "Logo" msgid "lpadmin: Class name can only contain printable characters." msgstr "lpadmin: il nome della classe può contenere solo caratteri stampabili." #, c-format msgid "lpadmin: Expected PPD after \"-%c\" option." msgstr "" msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option." msgstr "lpadmin: è previsto allow/deny:listautente dopo l'opzione \"-u\"." msgid "lpadmin: Expected class after \"-r\" option." msgstr "lpadmin: è prevista la classe dopo l'opzione \"-r\"." msgid "lpadmin: Expected class name after \"-c\" option." msgstr "lpadmin: è previsto il nome della classe dopo l'opzione \"-c\"." msgid "lpadmin: Expected description after \"-D\" option." msgstr "lpadmin: è prevista la descrizione dopo l'opzione \"-D\"." msgid "lpadmin: Expected device URI after \"-v\" option." msgstr "lpadmin: è previsto l'URI del dispositivo dopo l'opzione \"-v\"." msgid "lpadmin: Expected file type(s) after \"-I\" option." msgstr "lpadmin: è previsto il tipo del(i) file dopo l'opzione \"-I\"." msgid "lpadmin: Expected hostname after \"-h\" option." msgstr "lpadmin: è previsto l'hostname dopo l'opzione \"-h\"." msgid "lpadmin: Expected location after \"-L\" option." msgstr "lpadmin: è prevista la posizione dopo l'opzione \"-L\"." msgid "lpadmin: Expected model after \"-m\" option." msgstr "lpadmin: è previsto il modello dopo l'opzione \"-m\"." msgid "lpadmin: Expected name after \"-R\" option." msgstr "lpadmin: è previsto il nome dopo l'opzione \"-R\"." msgid "lpadmin: Expected name=value after \"-o\" option." msgstr "lpadmin: è previsto nome=valore dopo l'opzione \"-o\"." msgid "lpadmin: Expected printer after \"-p\" option." msgstr "lpadmin: è prevista la stampante dopo l'opzione \"-p\"." msgid "lpadmin: Expected printer name after \"-d\" option." msgstr "lpadmin: è previsto il nome della stampante dopo l'opzione \"-d\"." msgid "lpadmin: Expected printer or class after \"-x\" option." msgstr "lpadmin: è prevista la stampante o la classe dopo l'opzione \"-x\"." msgid "lpadmin: No member names were seen." msgstr "lpadmin: nessun nome dei membri è stato visto." #, c-format msgid "lpadmin: Printer %s is already a member of class %s." msgstr "lpadmin: la stampante %s è già un membro della classe %s." #, c-format msgid "lpadmin: Printer %s is not a member of class %s." msgstr "lpadmin: la stampante %s non è un membro della classe %s." msgid "lpadmin: Printer name can only contain printable characters." msgstr "" "lpadmin: il nome della stampante può contenere solo caratteri stampabili." msgid "" "lpadmin: Raw queues are deprecated and will stop working in a future version " "of CUPS." msgstr "" msgid "" "lpadmin: System V interface scripts are no longer supported for security " "reasons." msgstr "" msgid "" "lpadmin: Unable to add a printer to the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: non è possibile aggiungere una stampante alla classe:\n" " Bisogna specificare prima un nome per la stampante." #, c-format msgid "lpadmin: Unable to connect to server: %s" msgstr "lpadmin: non è possibile connettersi al server: %s" msgid "lpadmin: Unable to create temporary file" msgstr "lpadmin: non è possibile creare il file temporaneo" msgid "" "lpadmin: Unable to delete option:\n" " You must specify a printer name first." msgstr "" "lpadmin: non è possibile eliminare l'opzione:\n" " Bisogna specificare prima un nome per la stampante." #, c-format msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d." msgstr "" #, c-format msgid "lpadmin: Unable to open PPD file \"%s\" - %s" msgstr "lpadmin: non è possibile aprile il file PPD \"%s\" - %s" msgid "" "lpadmin: Unable to remove a printer from the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: non è possibile rimuovere una stampante dalla classe:\n" " Bisogna specificare prima un nome per la stampante." msgid "" "lpadmin: Unable to set the printer options:\n" " You must specify a printer name first." msgstr "" "lpadmin: non è possibile impostare le opzioni della stampante:\n" " Bisogna specificare prima un nome per la stampante." #, c-format msgid "lpadmin: Unknown allow/deny option \"%s\"." msgstr "lpadmin: opzione sconosciuta allow/deny \"%s\"." #, c-format msgid "lpadmin: Unknown argument \"%s\"." msgstr "lpadmin: argomento sconosciuto \"%s\"." #, c-format msgid "lpadmin: Unknown option \"%c\"." msgstr "lpadmin: opzione sconosciuta \"%c\"." msgid "lpadmin: Use the 'everywhere' model for shared printers." msgstr "" msgid "lpadmin: Warning - content type list ignored." msgstr "lpadmin: attenzione - contenuto nell'elenco tipo ignorato." msgid "lpc> " msgstr "lpc> " msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"." msgstr "" "lpinfo: è prevista la stringa ID del dispositivo 1284 dopo \"--device-id\"." msgid "lpinfo: Expected language after \"--language\"." msgstr "lpinfo: è prevista la lingua dopo \"--language\"." msgid "lpinfo: Expected make and model after \"--make-and-model\"." msgstr "lpinfo: è prevista marca e modello dopo \"--make-and-model\"." msgid "lpinfo: Expected product string after \"--product\"." msgstr "lpinfo: è prevista la stringa del prodotto dopo \"--product\"." msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"." msgstr "lpinfo: è prevista la lista dello schema dopo \"--exclude-schemes\"." msgid "lpinfo: Expected scheme list after \"--include-schemes\"." msgstr "lpinfo: è prevista la lista dello schema dopo \"--include-schemes\"." msgid "lpinfo: Expected timeout after \"--timeout\"." msgstr "lpinfo: è previsto un timeout dopo \"--timeout\"." #, c-format msgid "lpmove: Unable to connect to server: %s" msgstr "lpmove: non è possibile connettersi al server: %s" #, c-format msgid "lpmove: Unknown argument \"%s\"." msgstr "lpmove: argomento sconosciuto \"%s\"." msgid "lpoptions: No printers." msgstr "lpoptions: nessuna stampante." #, c-format msgid "lpoptions: Unable to add printer or instance: %s" msgstr "lpoptions: non è possibile aggiungere la stampante o l'istanza: %s" #, c-format msgid "lpoptions: Unable to get PPD file for %s: %s" msgstr "lpoptions: non è possibile ottenere il file PPD per %s: %s" #, c-format msgid "lpoptions: Unable to open PPD file for %s." msgstr "lpoptions: non è possibile aprire il file PPD per %s." msgid "lpoptions: Unknown printer or class." msgstr "lpoptions: stampante o classe sconosciuta." #, c-format msgid "" "lpstat: error - %s environment variable names non-existent destination \"%s" "\"." msgstr "" "lpstat: errore - destinazione inesistente \"%s\" dei nomi delle variabili di " "ambiente %s." msgid "material-amount" msgstr "Amount of Material" msgid "material-amount-units" msgstr "Material Amount Units" msgid "material-amount-units.g" msgstr "G" msgid "material-amount-units.kg" msgstr "Kg" msgid "material-amount-units.l" msgstr "L" msgid "material-amount-units.m" msgstr "M" msgid "material-amount-units.ml" msgstr "Ml" msgid "material-amount-units.mm" msgstr "Mm" msgid "material-color" msgstr "Material Color" msgid "material-diameter" msgstr "Material Diameter" msgid "material-diameter-tolerance" msgstr "Material Diameter Tolerance" msgid "material-fill-density" msgstr "Material Fill Density" msgid "material-name" msgstr "Material Name" msgid "material-purpose" msgstr "Material Purpose" msgid "material-purpose.all" msgstr "All" msgid "material-purpose.base" msgstr "Base" msgid "material-purpose.in-fill" msgstr "In Fill" msgid "material-purpose.shell" msgstr "Shell" msgid "material-purpose.support" msgstr "Support" msgid "material-rate" msgstr "Feed Rate" msgid "material-rate-units" msgstr "Material Rate Units" msgid "material-rate-units.mg_second" msgstr "Mg Second" msgid "material-rate-units.ml_second" msgstr "Ml Second" msgid "material-rate-units.mm_second" msgstr "Mm Second" msgid "material-shell-thickness" msgstr "Material Shell Thickness" msgid "material-temperature" msgstr "Material Temperature" msgid "material-type" msgstr "Material Type" msgid "material-type.abs" msgstr "Abs" msgid "material-type.abs-carbon-fiber" msgstr "Abs Carbon Fiber" msgid "material-type.abs-carbon-nanotube" msgstr "Abs Carbon Nanotube" msgid "material-type.chocolate" msgstr "Chocolate" msgid "material-type.gold" msgstr "Gold" msgid "material-type.nylon" msgstr "Nylon" msgid "material-type.pet" msgstr "Pet" msgid "material-type.photopolymer" msgstr "Photopolymer" msgid "material-type.pla" msgstr "Pla" msgid "material-type.pla-conductive" msgstr "Pla Conductive" msgid "material-type.pla-flexible" msgstr "Pla Flexible" msgid "material-type.pla-magnetic" msgstr "Pla Magnetic" msgid "material-type.pla-steel" msgstr "Pla Steel" msgid "material-type.pla-stone" msgstr "Pla Stone" msgid "material-type.pla-wood" msgstr "Pla Wood" msgid "material-type.polycarbonate" msgstr "Polycarbonate" msgid "material-type.pva-dissolvable" msgstr "Dissolvable PVA" msgid "material-type.silver" msgstr "Silver" msgid "material-type.titanium" msgstr "Titanium" msgid "material-type.wax" msgstr "Wax" msgid "materials-col" msgstr "Materials" msgid "media" msgstr "Media" msgid "media-back-coating" msgstr "Media Back Coating" msgid "media-back-coating.glossy" msgstr "Glossy" msgid "media-back-coating.high-gloss" msgstr "High Gloss" msgid "media-back-coating.matte" msgstr "Matte" msgid "media-back-coating.none" msgstr "None" msgid "media-back-coating.satin" msgstr "Satin" msgid "media-back-coating.semi-gloss" msgstr "Semi-Gloss" msgid "media-bottom-margin" msgstr "Media Bottom Margin" msgid "media-col" msgstr "Media" msgid "media-color" msgstr "Media Color" msgid "media-color.black" msgstr "Black" msgid "media-color.blue" msgstr "Blue" msgid "media-color.brown" msgstr "Brown" msgid "media-color.buff" msgstr "Buff" msgid "media-color.clear-black" msgstr "Clear Black" msgid "media-color.clear-blue" msgstr "Clear Blue" msgid "media-color.clear-brown" msgstr "Clear Brown" msgid "media-color.clear-buff" msgstr "Clear Buff" msgid "media-color.clear-cyan" msgstr "Clear Cyan" msgid "media-color.clear-gold" msgstr "Clear Gold" msgid "media-color.clear-goldenrod" msgstr "Clear Goldenrod" msgid "media-color.clear-gray" msgstr "Clear Gray" msgid "media-color.clear-green" msgstr "Clear Green" msgid "media-color.clear-ivory" msgstr "Clear Ivory" msgid "media-color.clear-magenta" msgstr "Clear Magenta" msgid "media-color.clear-multi-color" msgstr "Clear Multi Color" msgid "media-color.clear-mustard" msgstr "Clear Mustard" msgid "media-color.clear-orange" msgstr "Clear Orange" msgid "media-color.clear-pink" msgstr "Clear Pink" msgid "media-color.clear-red" msgstr "Clear Red" msgid "media-color.clear-silver" msgstr "Clear Silver" msgid "media-color.clear-turquoise" msgstr "Clear Turquoise" msgid "media-color.clear-violet" msgstr "Clear Violet" msgid "media-color.clear-white" msgstr "Clear White" msgid "media-color.clear-yellow" msgstr "Clear Yellow" msgid "media-color.cyan" msgstr "Cyan" msgid "media-color.dark-blue" msgstr "Dark Blue" msgid "media-color.dark-brown" msgstr "Dark Brown" msgid "media-color.dark-buff" msgstr "Dark Buff" msgid "media-color.dark-cyan" msgstr "Dark Cyan" msgid "media-color.dark-gold" msgstr "Dark Gold" msgid "media-color.dark-goldenrod" msgstr "Dark Goldenrod" msgid "media-color.dark-gray" msgstr "Dark Gray" msgid "media-color.dark-green" msgstr "Dark Green" msgid "media-color.dark-ivory" msgstr "Dark Ivory" msgid "media-color.dark-magenta" msgstr "Dark Magenta" msgid "media-color.dark-mustard" msgstr "Dark Mustard" msgid "media-color.dark-orange" msgstr "Dark Orange" msgid "media-color.dark-pink" msgstr "Dark Pink" msgid "media-color.dark-red" msgstr "Dark Red" msgid "media-color.dark-silver" msgstr "Dark Silver" msgid "media-color.dark-turquoise" msgstr "Dark Turquoise" msgid "media-color.dark-violet" msgstr "Dark Violet" msgid "media-color.dark-yellow" msgstr "Dark Yellow" msgid "media-color.gold" msgstr "Gold" msgid "media-color.goldenrod" msgstr "Goldenrod" msgid "media-color.gray" msgstr "Gray" msgid "media-color.green" msgstr "Green" msgid "media-color.ivory" msgstr "Ivory" msgid "media-color.light-black" msgstr "Light Black" msgid "media-color.light-blue" msgstr "Light Blue" msgid "media-color.light-brown" msgstr "Light Brown" msgid "media-color.light-buff" msgstr "Light Buff" msgid "media-color.light-cyan" msgstr "Light Cyan" msgid "media-color.light-gold" msgstr "Light Gold" msgid "media-color.light-goldenrod" msgstr "Light Goldenrod" msgid "media-color.light-gray" msgstr "Light Gray" msgid "media-color.light-green" msgstr "Light Green" msgid "media-color.light-ivory" msgstr "Light Ivory" msgid "media-color.light-magenta" msgstr "Light Magenta" msgid "media-color.light-mustard" msgstr "Light Mustard" msgid "media-color.light-orange" msgstr "Light Orange" msgid "media-color.light-pink" msgstr "Light Pink" msgid "media-color.light-red" msgstr "Light Red" msgid "media-color.light-silver" msgstr "Light Silver" msgid "media-color.light-turquoise" msgstr "Light Turquoise" msgid "media-color.light-violet" msgstr "Light Violet" msgid "media-color.light-yellow" msgstr "Light Yellow" msgid "media-color.magenta" msgstr "Magenta" msgid "media-color.multi-color" msgstr "Multi-Color" msgid "media-color.mustard" msgstr "Mustard" msgid "media-color.no-color" msgstr "No Color" msgid "media-color.orange" msgstr "Orange" msgid "media-color.pink" msgstr "Pink" msgid "media-color.red" msgstr "Red" msgid "media-color.silver" msgstr "Silver" msgid "media-color.turquoise" msgstr "Turquoise" msgid "media-color.violet" msgstr "Violet" msgid "media-color.white" msgstr "White" msgid "media-color.yellow" msgstr "Yellow" msgid "media-front-coating" msgstr "Media Front Coating" msgid "media-grain" msgstr "Media Grain" msgid "media-grain.x-direction" msgstr "Cross-Feed Direction" msgid "media-grain.y-direction" msgstr "Feed Direction" msgid "media-hole-count" msgstr "Media Hole Count" msgid "media-info" msgstr "Media Info" msgid "media-input-tray-check" msgstr "Media Input Tray Check" msgid "media-left-margin" msgstr "Media Left Margin" msgid "media-pre-printed" msgstr "Media Preprinted" msgid "media-pre-printed.blank" msgstr "Blank" msgid "media-pre-printed.letter-head" msgstr "Letterhead" msgid "media-pre-printed.pre-printed" msgstr "Preprinted" msgid "media-recycled" msgstr "Media Recycled" msgid "media-recycled.none" msgstr "None" msgid "media-recycled.standard" msgstr "Standard" msgid "media-right-margin" msgstr "Media Right Margin" msgid "media-size" msgstr "Media Dimensions" msgid "media-size-name" msgstr "Media Name" msgid "media-source" msgstr "Media Source" msgid "media-source.alternate" msgstr "Alternate" msgid "media-source.alternate-roll" msgstr "Alternate Roll" msgid "media-source.auto" msgstr "Automatic" msgid "media-source.bottom" msgstr "Bottom" msgid "media-source.by-pass-tray" msgstr "By Pass Tray" msgid "media-source.center" msgstr "Center" msgid "media-source.disc" msgstr "Disc" msgid "media-source.envelope" msgstr "Envelope" msgid "media-source.hagaki" msgstr "Hagaki" msgid "media-source.large-capacity" msgstr "Large Capacity" msgid "media-source.left" msgstr "Left" msgid "media-source.main" msgstr "Main" msgid "media-source.main-roll" msgstr "Main Roll" msgid "media-source.manual" msgstr "Manual" msgid "media-source.middle" msgstr "Middle" msgid "media-source.photo" msgstr "Photo" msgid "media-source.rear" msgstr "Rear" msgid "media-source.right" msgstr "Right" msgid "media-source.roll-1" msgstr "Roll 1" msgid "media-source.roll-10" msgstr "Roll 10" msgid "media-source.roll-2" msgstr "Roll 2" msgid "media-source.roll-3" msgstr "Roll 3" msgid "media-source.roll-4" msgstr "Roll 4" msgid "media-source.roll-5" msgstr "Roll 5" msgid "media-source.roll-6" msgstr "Roll 6" msgid "media-source.roll-7" msgstr "Roll 7" msgid "media-source.roll-8" msgstr "Roll 8" msgid "media-source.roll-9" msgstr "Roll 9" msgid "media-source.side" msgstr "Side" msgid "media-source.top" msgstr "Top" msgid "media-source.tray-1" msgstr "Tray 1" msgid "media-source.tray-10" msgstr "Tray 10" msgid "media-source.tray-11" msgstr "Tray 11" msgid "media-source.tray-12" msgstr "Tray 12" msgid "media-source.tray-13" msgstr "Tray 13" msgid "media-source.tray-14" msgstr "Tray 14" msgid "media-source.tray-15" msgstr "Tray 15" msgid "media-source.tray-16" msgstr "Tray 16" msgid "media-source.tray-17" msgstr "Tray 17" msgid "media-source.tray-18" msgstr "Tray 18" msgid "media-source.tray-19" msgstr "Tray 19" msgid "media-source.tray-2" msgstr "Tray 2" msgid "media-source.tray-20" msgstr "Tray 20" msgid "media-source.tray-3" msgstr "Tray 3" msgid "media-source.tray-4" msgstr "Tray 4" msgid "media-source.tray-5" msgstr "Tray 5" msgid "media-source.tray-6" msgstr "Tray 6" msgid "media-source.tray-7" msgstr "Tray 7" msgid "media-source.tray-8" msgstr "Tray 8" msgid "media-source.tray-9" msgstr "Tray 9" msgid "media-thickness" msgstr "Media Thickness" msgid "media-tooth" msgstr "Media Tooth" msgid "media-tooth.antique" msgstr "Antique" msgid "media-tooth.calendared" msgstr "Calendared" msgid "media-tooth.coarse" msgstr "Coarse" msgid "media-tooth.fine" msgstr "Fine" msgid "media-tooth.linen" msgstr "Linen" msgid "media-tooth.medium" msgstr "Medium" msgid "media-tooth.smooth" msgstr "Smooth" msgid "media-tooth.stipple" msgstr "Stipple" msgid "media-tooth.uncalendared" msgstr "Uncalendared" msgid "media-tooth.vellum" msgstr "Vellum" msgid "media-top-margin" msgstr "Media Top Margin" msgid "media-type" msgstr "Media Type" msgid "media-type.aluminum" msgstr "Aluminum" msgid "media-type.auto" msgstr "Automatic" msgid "media-type.back-print-film" msgstr "Back Print Film" msgid "media-type.cardboard" msgstr "Cardboard" msgid "media-type.cardstock" msgstr "Cardstock" msgid "media-type.cd" msgstr "CD" msgid "media-type.com.hp.advanced-photo" msgstr "Advanced Photo Paper" msgid "media-type.com.hp.brochure-glossy" msgstr "Glossy Brochure Paper" msgid "media-type.com.hp.brochure-matte" msgstr "Matte Brochure Paper" msgid "media-type.com.hp.cover-matte" msgstr "Matte Cover Paper" msgid "media-type.com.hp.ecosmart-lite" msgstr "Office Recycled Paper" msgid "media-type.com.hp.everyday-glossy" msgstr "Everyday Glossy Photo Paper" msgid "media-type.com.hp.everyday-matte" msgstr "Everyday Matte Paper" msgid "media-type.com.hp.extra-heavy" msgstr "Extra Heavyweight Paper" msgid "media-type.com.hp.intermediate" msgstr "Multipurpose Paper" msgid "media-type.com.hp.mid-weight" msgstr "Mid-Weight Paper" msgid "media-type.com.hp.premium-inkjet" msgstr "Premium Inkjet Paper" msgid "media-type.com.hp.premium-photo" msgstr "Premium Photo Glossy Paper" msgid "media-type.com.hp.premium-presentation-matte" msgstr "Premium Presentation Matte Paper" msgid "media-type.continuous" msgstr "Continuous" msgid "media-type.continuous-long" msgstr "Continuous Long" msgid "media-type.continuous-short" msgstr "Continuous Short" msgid "media-type.corrugated-board" msgstr "Corrugated Board" msgid "media-type.disc" msgstr "Optical Disc" msgid "media-type.disc-glossy" msgstr "Glossy Optical Disc" msgid "media-type.disc-high-gloss" msgstr "High Gloss Optical Disc" msgid "media-type.disc-matte" msgstr "Matte Optical Disc" msgid "media-type.disc-satin" msgstr "Satin Optical Disc" msgid "media-type.disc-semi-gloss" msgstr "Semi-Gloss Optical Disc" msgid "media-type.double-wall" msgstr "Double Wall" msgid "media-type.dry-film" msgstr "Dry Film" msgid "media-type.dvd" msgstr "DVD" msgid "media-type.embossing-foil" msgstr "Embossing Foil" msgid "media-type.end-board" msgstr "End Board" msgid "media-type.envelope" msgstr "Envelope" msgid "media-type.envelope-archival" msgstr "Archival Envelope" msgid "media-type.envelope-bond" msgstr "Bond Envelope" msgid "media-type.envelope-coated" msgstr "Coated Envelope" msgid "media-type.envelope-cotton" msgstr "Cotton Envelope" msgid "media-type.envelope-fine" msgstr "Fine Envelope" msgid "media-type.envelope-heavyweight" msgstr "Heavyweight Envelope" msgid "media-type.envelope-inkjet" msgstr "Inkjet Envelope" msgid "media-type.envelope-lightweight" msgstr "Lightweight Envelope" msgid "media-type.envelope-plain" msgstr "Plain Envelope" msgid "media-type.envelope-preprinted" msgstr "Preprinted Envelope" msgid "media-type.envelope-window" msgstr "Windowed Envelope" msgid "media-type.fabric" msgstr "Fabric" msgid "media-type.fabric-archival" msgstr "Archival Fabric" msgid "media-type.fabric-glossy" msgstr "Glossy Fabric" msgid "media-type.fabric-high-gloss" msgstr "High Gloss Fabric" msgid "media-type.fabric-matte" msgstr "Matte Fabric" msgid "media-type.fabric-semi-gloss" msgstr "Semi-Gloss Fabric" msgid "media-type.fabric-waterproof" msgstr "Waterproof Fabric" msgid "media-type.film" msgstr "Film" msgid "media-type.flexo-base" msgstr "Flexo Base" msgid "media-type.flexo-photo-polymer" msgstr "Flexo Photo Polymer" msgid "media-type.flute" msgstr "Flute" msgid "media-type.foil" msgstr "Foil" msgid "media-type.full-cut-tabs" msgstr "Full Cut Tabs" msgid "media-type.glass" msgstr "Glass" msgid "media-type.glass-colored" msgstr "Glass Colored" msgid "media-type.glass-opaque" msgstr "Glass Opaque" msgid "media-type.glass-surfaced" msgstr "Glass Surfaced" msgid "media-type.glass-textured" msgstr "Glass Textured" msgid "media-type.gravure-cylinder" msgstr "Gravure Cylinder" msgid "media-type.image-setter-paper" msgstr "Image Setter Paper" msgid "media-type.imaging-cylinder" msgstr "Imaging Cylinder" msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon-photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon_photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.labels" msgstr "Labels" msgid "media-type.labels-colored" msgstr "Colored Labels" msgid "media-type.labels-glossy" msgstr "Glossy Labels" msgid "media-type.labels-high-gloss" msgstr "High Gloss Labels" msgid "media-type.labels-inkjet" msgstr "Inkjet Labels" msgid "media-type.labels-matte" msgstr "Matte Labels" msgid "media-type.labels-permanent" msgstr "Permanent Labels" msgid "media-type.labels-satin" msgstr "Satin Labels" msgid "media-type.labels-security" msgstr "Security Labels" msgid "media-type.labels-semi-gloss" msgstr "Semi-Gloss Labels" msgid "media-type.laminating-foil" msgstr "Laminating Foil" msgid "media-type.letterhead" msgstr "Letterhead" msgid "media-type.metal" msgstr "Metal" msgid "media-type.metal-glossy" msgstr "Metal Glossy" msgid "media-type.metal-high-gloss" msgstr "Metal High Gloss" msgid "media-type.metal-matte" msgstr "Metal Matte" msgid "media-type.metal-satin" msgstr "Metal Satin" msgid "media-type.metal-semi-gloss" msgstr "Metal Semi Gloss" msgid "media-type.mounting-tape" msgstr "Mounting Tape" msgid "media-type.multi-layer" msgstr "Multi Layer" msgid "media-type.multi-part-form" msgstr "Multi Part Form" msgid "media-type.other" msgstr "Other" msgid "media-type.paper" msgstr "Paper" msgid "media-type.photographic" msgstr "Photo Paper" msgid "media-type.photographic-archival" msgstr "Photographic Archival" msgid "media-type.photographic-film" msgstr "Photo Film" msgid "media-type.photographic-glossy" msgstr "Glossy Photo Paper" msgid "media-type.photographic-high-gloss" msgstr "High Gloss Photo Paper" msgid "media-type.photographic-matte" msgstr "Matte Photo Paper" msgid "media-type.photographic-satin" msgstr "Satin Photo Paper" msgid "media-type.photographic-semi-gloss" msgstr "Semi-Gloss Photo Paper" msgid "media-type.plastic" msgstr "Plastic" msgid "media-type.plastic-archival" msgstr "Plastic Archival" msgid "media-type.plastic-colored" msgstr "Plastic Colored" msgid "media-type.plastic-glossy" msgstr "Plastic Glossy" msgid "media-type.plastic-high-gloss" msgstr "Plastic High Gloss" msgid "media-type.plastic-matte" msgstr "Plastic Matte" msgid "media-type.plastic-satin" msgstr "Plastic Satin" msgid "media-type.plastic-semi-gloss" msgstr "Plastic Semi Gloss" msgid "media-type.plate" msgstr "Plate" msgid "media-type.polyester" msgstr "Polyester" msgid "media-type.pre-cut-tabs" msgstr "Pre Cut Tabs" msgid "media-type.roll" msgstr "Roll" msgid "media-type.screen" msgstr "Screen" msgid "media-type.screen-paged" msgstr "Screen Paged" msgid "media-type.self-adhesive" msgstr "Self Adhesive" msgid "media-type.self-adhesive-film" msgstr "Self Adhesive Film" msgid "media-type.shrink-foil" msgstr "Shrink Foil" msgid "media-type.single-face" msgstr "Single Face" msgid "media-type.single-wall" msgstr "Single Wall" msgid "media-type.sleeve" msgstr "Sleeve" msgid "media-type.stationery" msgstr "Stationery" msgid "media-type.stationery-archival" msgstr "Stationery Archival" msgid "media-type.stationery-coated" msgstr "Coated Paper" msgid "media-type.stationery-cotton" msgstr "Stationery Cotton" msgid "media-type.stationery-fine" msgstr "Vellum Paper" msgid "media-type.stationery-heavyweight" msgstr "Heavyweight Paper" msgid "media-type.stationery-heavyweight-coated" msgstr "Stationery Heavyweight Coated" msgid "media-type.stationery-inkjet" msgstr "Stationery Inkjet Paper" msgid "media-type.stationery-letterhead" msgstr "Letterhead" msgid "media-type.stationery-lightweight" msgstr "Lightweight Paper" msgid "media-type.stationery-preprinted" msgstr "Preprinted Paper" msgid "media-type.stationery-prepunched" msgstr "Punched Paper" msgid "media-type.tab-stock" msgstr "Tab Stock" msgid "media-type.tractor" msgstr "Tractor" msgid "media-type.transfer" msgstr "Transfer" msgid "media-type.transparency" msgstr "Transparency" msgid "media-type.triple-wall" msgstr "Triple Wall" msgid "media-type.wet-film" msgstr "Wet Film" msgid "media-weight-metric" msgstr "Media Weight (grams per m²)" msgid "media.asme_f_28x40in" msgstr "28 x 40\"" msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" msgstr "A4 or US Letter" msgid "media.iso_2a0_1189x1682mm" msgstr "2a0" msgid "media.iso_a0_841x1189mm" msgstr "A0" msgid "media.iso_a0x3_1189x2523mm" msgstr "A0x3" msgid "media.iso_a10_26x37mm" msgstr "A10" msgid "media.iso_a1_594x841mm" msgstr "A1" msgid "media.iso_a1x3_841x1783mm" msgstr "A1x3" msgid "media.iso_a1x4_841x2378mm" msgstr "A1x4" msgid "media.iso_a2_420x594mm" msgstr "A2" msgid "media.iso_a2x3_594x1261mm" msgstr "A2x3" msgid "media.iso_a2x4_594x1682mm" msgstr "A2x4" msgid "media.iso_a2x5_594x2102mm" msgstr "A2x5" msgid "media.iso_a3-extra_322x445mm" msgstr "A3 (Extra)" msgid "media.iso_a3_297x420mm" msgstr "A3" msgid "media.iso_a3x3_420x891mm" msgstr "A3x3" msgid "media.iso_a3x4_420x1189mm" msgstr "A3x4" msgid "media.iso_a3x5_420x1486mm" msgstr "A3x5" msgid "media.iso_a3x6_420x1783mm" msgstr "A3x6" msgid "media.iso_a3x7_420x2080mm" msgstr "A3x7" msgid "media.iso_a4-extra_235.5x322.3mm" msgstr "A4 (Extra)" msgid "media.iso_a4-tab_225x297mm" msgstr "A4 (Tab)" msgid "media.iso_a4_210x297mm" msgstr "A4" msgid "media.iso_a4x3_297x630mm" msgstr "A4x3" msgid "media.iso_a4x4_297x841mm" msgstr "A4x4" msgid "media.iso_a4x5_297x1051mm" msgstr "A4x5" msgid "media.iso_a4x6_297x1261mm" msgstr "A4x6" msgid "media.iso_a4x7_297x1471mm" msgstr "A4x7" msgid "media.iso_a4x8_297x1682mm" msgstr "A4x8" msgid "media.iso_a4x9_297x1892mm" msgstr "A4x9" msgid "media.iso_a5-extra_174x235mm" msgstr "A5 (Extra)" msgid "media.iso_a5_148x210mm" msgstr "A5" msgid "media.iso_a6_105x148mm" msgstr "A6" msgid "media.iso_a7_74x105mm" msgstr "A7" msgid "media.iso_a8_52x74mm" msgstr "A8" msgid "media.iso_a9_37x52mm" msgstr "A9" msgid "media.iso_b0_1000x1414mm" msgstr "B0" msgid "media.iso_b10_31x44mm" msgstr "B10" msgid "media.iso_b1_707x1000mm" msgstr "B1" msgid "media.iso_b2_500x707mm" msgstr "B2" msgid "media.iso_b3_353x500mm" msgstr "B3" msgid "media.iso_b4_250x353mm" msgstr "B4" msgid "media.iso_b5-extra_201x276mm" msgstr "B5 (Extra)" msgid "media.iso_b5_176x250mm" msgstr "B5 Envelope" msgid "media.iso_b6_125x176mm" msgstr "B6" msgid "media.iso_b6c4_125x324mm" msgstr "B6/C4 Envelope" msgid "media.iso_b7_88x125mm" msgstr "B7" msgid "media.iso_b8_62x88mm" msgstr "B8" msgid "media.iso_b9_44x62mm" msgstr "B9" msgid "media.iso_c0_917x1297mm" msgstr "C0 Envelope" msgid "media.iso_c10_28x40mm" msgstr "C10 Envelope" msgid "media.iso_c1_648x917mm" msgstr "C1 Envelope" msgid "media.iso_c2_458x648mm" msgstr "C2 Envelope" msgid "media.iso_c3_324x458mm" msgstr "C3 Envelope" msgid "media.iso_c4_229x324mm" msgstr "C4 Envelope" msgid "media.iso_c5_162x229mm" msgstr "C5 Envelope" msgid "media.iso_c6_114x162mm" msgstr "C6 Envelope" msgid "media.iso_c6c5_114x229mm" msgstr "C6c5 Envelope" msgid "media.iso_c7_81x114mm" msgstr "C7 Envelope" msgid "media.iso_c7c6_81x162mm" msgstr "C7c6 Envelope" msgid "media.iso_c8_57x81mm" msgstr "C8 Envelope" msgid "media.iso_c9_40x57mm" msgstr "C9 Envelope" msgid "media.iso_dl_110x220mm" msgstr "DL Envelope" msgid "media.iso_ra0_860x1220mm" msgstr "Ra0" msgid "media.iso_ra1_610x860mm" msgstr "Ra1" msgid "media.iso_ra2_430x610mm" msgstr "Ra2" msgid "media.iso_ra3_305x430mm" msgstr "Ra3" msgid "media.iso_ra4_215x305mm" msgstr "Ra4" msgid "media.iso_sra0_900x1280mm" msgstr "Sra0" msgid "media.iso_sra1_640x900mm" msgstr "Sra1" msgid "media.iso_sra2_450x640mm" msgstr "Sra2" msgid "media.iso_sra3_320x450mm" msgstr "Sra3" msgid "media.iso_sra4_225x320mm" msgstr "Sra4" msgid "media.jis_b0_1030x1456mm" msgstr "JIS B0" msgid "media.jis_b10_32x45mm" msgstr "JIS B10" msgid "media.jis_b1_728x1030mm" msgstr "JIS B1" msgid "media.jis_b2_515x728mm" msgstr "JIS B2" msgid "media.jis_b3_364x515mm" msgstr "JIS B3" msgid "media.jis_b4_257x364mm" msgstr "JIS B4" msgid "media.jis_b5_182x257mm" msgstr "JIS B5" msgid "media.jis_b6_128x182mm" msgstr "JIS B6" msgid "media.jis_b7_91x128mm" msgstr "JIS B7" msgid "media.jis_b8_64x91mm" msgstr "JIS B8" msgid "media.jis_b9_45x64mm" msgstr "JIS B9" msgid "media.jis_exec_216x330mm" msgstr "JIS Executive" msgid "media.jpn_chou2_111.1x146mm" msgstr "Chou 2 Envelope" msgid "media.jpn_chou3_120x235mm" msgstr "Chou 3 Envelope" msgid "media.jpn_chou4_90x205mm" msgstr "Chou 4 Envelope" msgid "media.jpn_hagaki_100x148mm" msgstr "Hagaki" msgid "media.jpn_kahu_240x322.1mm" msgstr "Kahu Envelope" msgid "media.jpn_kaku2_240x332mm" msgstr "Kahu 2 Envelope" msgid "media.jpn_kaku3_216x277mm" msgstr "216 x 277mme" msgid "media.jpn_kaku4_197x267mm" msgstr "197 x 267mme" msgid "media.jpn_kaku5_190x240mm" msgstr "190 x 240mme" msgid "media.jpn_kaku7_142x205mm" msgstr "142 x 205mme" msgid "media.jpn_kaku8_119x197mm" msgstr "119 x 197mme" msgid "media.jpn_oufuku_148x200mm" msgstr "Oufuku Reply Postcard" msgid "media.jpn_you4_105x235mm" msgstr "You 4 Envelope" msgid "media.na_10x11_10x11in" msgstr "10 x 11\"" msgid "media.na_10x13_10x13in" msgstr "10 x 13\"" msgid "media.na_10x14_10x14in" msgstr "10 x 14\"" msgid "media.na_10x15_10x15in" msgstr "10 x 15\"" msgid "media.na_11x12_11x12in" msgstr "11 x 12\"" msgid "media.na_11x15_11x15in" msgstr "11 x 15\"" msgid "media.na_12x19_12x19in" msgstr "12 x 19\"" msgid "media.na_5x7_5x7in" msgstr "5 x 7\"" msgid "media.na_6x9_6x9in" msgstr "6 x 9\"" msgid "media.na_7x9_7x9in" msgstr "7 x 9\"" msgid "media.na_9x11_9x11in" msgstr "9 x 11\"" msgid "media.na_a2_4.375x5.75in" msgstr "A2 Envelope" msgid "media.na_arch-a_9x12in" msgstr "9 x 12\"" msgid "media.na_arch-b_12x18in" msgstr "12 x 18\"" msgid "media.na_arch-c_18x24in" msgstr "18 x 24\"" msgid "media.na_arch-d_24x36in" msgstr "24 x 36\"" msgid "media.na_arch-e2_26x38in" msgstr "26 x 38\"" msgid "media.na_arch-e3_27x39in" msgstr "27 x 39\"" msgid "media.na_arch-e_36x48in" msgstr "36 x 48\"" msgid "media.na_b-plus_12x19.17in" msgstr "12 x 19.17\"" msgid "media.na_c5_6.5x9.5in" msgstr "C5 Envelope" msgid "media.na_c_17x22in" msgstr "17 x 22\"" msgid "media.na_d_22x34in" msgstr "22 x 34\"" msgid "media.na_e_34x44in" msgstr "34 x 44\"" msgid "media.na_edp_11x14in" msgstr "11 x 14\"" msgid "media.na_eur-edp_12x14in" msgstr "12 x 14\"" msgid "media.na_executive_7.25x10.5in" msgstr "Executive" msgid "media.na_f_44x68in" msgstr "44 x 68\"" msgid "media.na_fanfold-eur_8.5x12in" msgstr "European Fanfold" msgid "media.na_fanfold-us_11x14.875in" msgstr "US Fanfold" msgid "media.na_foolscap_8.5x13in" msgstr "Foolscap" msgid "media.na_govt-legal_8x13in" msgstr "8 x 13\"" msgid "media.na_govt-letter_8x10in" msgstr "8 x 10\"" msgid "media.na_index-3x5_3x5in" msgstr "3 x 5\"" msgid "media.na_index-4x6-ext_6x8in" msgstr "6 x 8\"" msgid "media.na_index-4x6_4x6in" msgstr "4 x 6\"" msgid "media.na_index-5x8_5x8in" msgstr "5 x 8\"" msgid "media.na_invoice_5.5x8.5in" msgstr "Statement" msgid "media.na_ledger_11x17in" msgstr "11 x 17\"" msgid "media.na_legal-extra_9.5x15in" msgstr "US Legal (Extra)" msgid "media.na_legal_8.5x14in" msgstr "US Legal" msgid "media.na_letter-extra_9.5x12in" msgstr "US Letter (Extra)" msgid "media.na_letter-plus_8.5x12.69in" msgstr "US Letter (Plus)" msgid "media.na_letter_8.5x11in" msgstr "US Letter" msgid "media.na_monarch_3.875x7.5in" msgstr "Monarch Envelope" msgid "media.na_number-10_4.125x9.5in" msgstr "#10 Envelope" msgid "media.na_number-11_4.5x10.375in" msgstr "#11 Envelope" msgid "media.na_number-12_4.75x11in" msgstr "#12 Envelope" msgid "media.na_number-14_5x11.5in" msgstr "#14 Envelope" msgid "media.na_number-9_3.875x8.875in" msgstr "#9 Envelope" msgid "media.na_oficio_8.5x13.4in" msgstr "8.5 x 13.4\"" msgid "media.na_personal_3.625x6.5in" msgstr "Personal Envelope" msgid "media.na_quarto_8.5x10.83in" msgstr "Quarto" msgid "media.na_super-a_8.94x14in" msgstr "8.94 x 14\"" msgid "media.na_super-b_13x19in" msgstr "13 x 19\"" msgid "media.na_wide-format_30x42in" msgstr "30 x 42\"" msgid "media.oe_12x16_12x16in" msgstr "12 x 16\"" msgid "media.oe_14x17_14x17in" msgstr "14 x 17\"" msgid "media.oe_18x22_18x22in" msgstr "18 x 22\"" msgid "media.oe_a2plus_17x24in" msgstr "17 x 24\"" msgid "media.oe_photo-10r_10x12in" msgstr "10 x 12\"" msgid "media.oe_photo-20r_20x24in" msgstr "20 x 24\"" msgid "media.oe_photo-l_3.5x5in" msgstr "3.5 x 5\"" msgid "media.oe_photo-s10r_10x15in" msgstr "10 x 15\"" msgid "media.om_16k_184x260mm" msgstr "184 x 260mm" msgid "media.om_16k_195x270mm" msgstr "195 x 270mm" msgid "media.om_dai-pa-kai_275x395mm" msgstr "275 x 395mm" msgid "media.om_folio-sp_215x315mm" msgstr "Folio" msgid "media.om_folio_210x330mm" msgstr "Folio (Special)" msgid "media.om_invite_220x220mm" msgstr "Invitation Envelope" msgid "media.om_italian_110x230mm" msgstr "Italian Envelope" msgid "media.om_juuro-ku-kai_198x275mm" msgstr "198 x 275mm" msgid "media.om_large-photo_200x300" msgstr "200 x 300mm" msgid "media.om_medium-photo_130x180mm" msgstr "130 x 180mm" msgid "media.om_pa-kai_267x389mm" msgstr "267 x 389mm" msgid "media.om_postfix_114x229mm" msgstr "Postfix Envelope" msgid "media.om_small-photo_100x150mm" msgstr "100 x 150mm" msgid "media.om_wide-photo_100x200mm" msgstr "100 x 200mm" msgid "media.prc_10_324x458mm" msgstr "Chinese #10 Envelope" msgid "media.prc_16k_146x215mm" msgstr "Chinese 16k" msgid "media.prc_1_102x165mm" msgstr "Chinese #1 Envelope" msgid "media.prc_2_102x176mm" msgstr "Chinese #2 Envelope" msgid "media.prc_32k_97x151mm" msgstr "Chinese 32k" msgid "media.prc_3_125x176mm" msgstr "Chinese #3 Envelope" msgid "media.prc_4_110x208mm" msgstr "Chinese #4 Envelope" msgid "media.prc_5_110x220mm" msgstr "Chinese #5 Envelope" msgid "media.prc_6_120x320mm" msgstr "Chinese #6 Envelope" msgid "media.prc_7_160x230mm" msgstr "Chinese #7 Envelope" msgid "media.prc_8_120x309mm" msgstr "Chinese #8 Envelope" msgid "media.roc_16k_7.75x10.75in" msgstr "ROC 16k" msgid "media.roc_8k_10.75x15.5in" msgstr "ROC 8k" #, c-format msgid "members of class %s:" msgstr "membri della classe %s:" msgid "multiple-document-handling" msgstr "Multiple Document Handling" msgid "multiple-document-handling.separate-documents-collated-copies" msgstr "Separate Documents Collated Copies" msgid "multiple-document-handling.separate-documents-uncollated-copies" msgstr "Separate Documents Uncollated Copies" msgid "multiple-document-handling.single-document" msgstr "Single Document" msgid "multiple-document-handling.single-document-new-sheet" msgstr "Single Document New Sheet" msgid "multiple-object-handling" msgstr "Multiple Object Handling" msgid "multiple-object-handling.auto" msgstr "Automatic" msgid "multiple-object-handling.best-fit" msgstr "Best Fit" msgid "multiple-object-handling.best-quality" msgstr "Best Quality" msgid "multiple-object-handling.best-speed" msgstr "Best Speed" msgid "multiple-object-handling.one-at-a-time" msgstr "One At A Time" msgid "multiple-operation-time-out-action" msgstr "Multiple Operation Time Out Action" msgid "multiple-operation-time-out-action.abort-job" msgstr "Abort Job" msgid "multiple-operation-time-out-action.hold-job" msgstr "Hold Job" msgid "multiple-operation-time-out-action.process-job" msgstr "Process Job" msgid "no entries" msgstr "nessuna voce" msgid "no system default destination" msgstr "nessuna destinazione predefinita di sistema" msgid "noise-removal" msgstr "Noise Removal" msgid "notify-attributes" msgstr "Notify Attributes" msgid "notify-charset" msgstr "Notify Charset" msgid "notify-events" msgstr "Notify Events" msgid "notify-events not specified." msgstr "notify-events non è stato specificato." msgid "notify-events.document-completed" msgstr "Document Completed" msgid "notify-events.document-config-changed" msgstr "Document Config Changed" msgid "notify-events.document-created" msgstr "Document Created" msgid "notify-events.document-fetchable" msgstr "Document Fetchable" msgid "notify-events.document-state-changed" msgstr "Document State Changed" msgid "notify-events.document-stopped" msgstr "Document Stopped" msgid "notify-events.job-completed" msgstr "Job Completed" msgid "notify-events.job-config-changed" msgstr "Job Config Changed" msgid "notify-events.job-created" msgstr "Job Created" msgid "notify-events.job-fetchable" msgstr "Job Fetchable" msgid "notify-events.job-progress" msgstr "Job Progress" msgid "notify-events.job-state-changed" msgstr "Job State Changed" msgid "notify-events.job-stopped" msgstr "Job Stopped" msgid "notify-events.none" msgstr "None" msgid "notify-events.printer-config-changed" msgstr "Printer Config Changed" msgid "notify-events.printer-finishings-changed" msgstr "Printer Finishings Changed" msgid "notify-events.printer-media-changed" msgstr "Printer Media Changed" msgid "notify-events.printer-queue-order-changed" msgstr "Printer Queue Order Changed" msgid "notify-events.printer-restarted" msgstr "Printer Restarted" msgid "notify-events.printer-shutdown" msgstr "Printer Shutdown" msgid "notify-events.printer-state-changed" msgstr "Printer State Changed" msgid "notify-events.printer-stopped" msgstr "Printer Stopped" msgid "notify-get-interval" msgstr "Notify Get Interval" msgid "notify-lease-duration" msgstr "Notify Lease Duration" msgid "notify-natural-language" msgstr "Notify Natural Language" msgid "notify-pull-method" msgstr "Notify Pull Method" msgid "notify-recipient-uri" msgstr "Notify Recipient" #, c-format msgid "notify-recipient-uri URI \"%s\" is already used." msgstr "notify-recipient-uri URI \"%s\" è già stato utilizzato." #, c-format msgid "notify-recipient-uri URI \"%s\" uses unknown scheme." msgstr "notify-recipient-uri URI \"%s\" utilizza uno schema sconosciuto." msgid "notify-sequence-numbers" msgstr "Notify Sequence Numbers" msgid "notify-subscription-ids" msgstr "Notify Subscription Ids" msgid "notify-time-interval" msgstr "Notify Time Interval" msgid "notify-user-data" msgstr "Notify User Data" msgid "notify-wait" msgstr "Notify Wait" msgid "number-of-retries" msgstr "Number Of Retries" msgid "number-up" msgstr "Number-Up" msgid "object-offset" msgstr "Object Offset" msgid "object-size" msgstr "Object Size" msgid "organization-name" msgstr "Organization Name" msgid "orientation-requested" msgstr "Orientation" msgid "orientation-requested.3" msgstr "Portrait" msgid "orientation-requested.4" msgstr "Landscape" msgid "orientation-requested.5" msgstr "Reverse Landscape" msgid "orientation-requested.6" msgstr "Reverse Portrait" msgid "orientation-requested.7" msgstr "None" msgid "output-attributes" msgstr "Output Attributes" msgid "output-bin" msgstr "Output Bin" msgid "output-bin.auto" msgstr "Automatic" msgid "output-bin.bottom" msgstr "Bottom" msgid "output-bin.center" msgstr "Center" msgid "output-bin.face-down" msgstr "Face Down" msgid "output-bin.face-up" msgstr "Face Up" msgid "output-bin.large-capacity" msgstr "Large Capacity" msgid "output-bin.left" msgstr "Left" msgid "output-bin.mailbox-1" msgstr "Mailbox 1" msgid "output-bin.mailbox-10" msgstr "Mailbox 10" msgid "output-bin.mailbox-2" msgstr "Mailbox 2" msgid "output-bin.mailbox-3" msgstr "Mailbox 3" msgid "output-bin.mailbox-4" msgstr "Mailbox 4" msgid "output-bin.mailbox-5" msgstr "Mailbox 5" msgid "output-bin.mailbox-6" msgstr "Mailbox 6" msgid "output-bin.mailbox-7" msgstr "Mailbox 7" msgid "output-bin.mailbox-8" msgstr "Mailbox 8" msgid "output-bin.mailbox-9" msgstr "Mailbox 9" msgid "output-bin.middle" msgstr "Middle" msgid "output-bin.my-mailbox" msgstr "My Mailbox" msgid "output-bin.rear" msgstr "Rear" msgid "output-bin.right" msgstr "Right" msgid "output-bin.side" msgstr "Side" msgid "output-bin.stacker-1" msgstr "Stacker 1" msgid "output-bin.stacker-10" msgstr "Stacker 10" msgid "output-bin.stacker-2" msgstr "Stacker 2" msgid "output-bin.stacker-3" msgstr "Stacker 3" msgid "output-bin.stacker-4" msgstr "Stacker 4" msgid "output-bin.stacker-5" msgstr "Stacker 5" msgid "output-bin.stacker-6" msgstr "Stacker 6" msgid "output-bin.stacker-7" msgstr "Stacker 7" msgid "output-bin.stacker-8" msgstr "Stacker 8" msgid "output-bin.stacker-9" msgstr "Stacker 9" msgid "output-bin.top" msgstr "Top" msgid "output-bin.tray-1" msgstr "Tray 1" msgid "output-bin.tray-10" msgstr "Tray 10" msgid "output-bin.tray-2" msgstr "Tray 2" msgid "output-bin.tray-3" msgstr "Tray 3" msgid "output-bin.tray-4" msgstr "Tray 4" msgid "output-bin.tray-5" msgstr "Tray 5" msgid "output-bin.tray-6" msgstr "Tray 6" msgid "output-bin.tray-7" msgstr "Tray 7" msgid "output-bin.tray-8" msgstr "Tray 8" msgid "output-bin.tray-9" msgstr "Tray 9" msgid "output-compression-quality-factor" msgstr "Scanned Image Quality" msgid "page-delivery" msgstr "Page Delivery" msgid "page-delivery.reverse-order-face-down" msgstr "Reverse Order Face Down" msgid "page-delivery.reverse-order-face-up" msgstr "Reverse Order Face Up" msgid "page-delivery.same-order-face-down" msgstr "Same Order Face Down" msgid "page-delivery.same-order-face-up" msgstr "Same Order Face Up" msgid "page-delivery.system-specified" msgstr "System Specified" msgid "page-order-received" msgstr "Page Order Received" msgid "page-order-received.1-to-n-order" msgstr "1 To N Order" msgid "page-order-received.n-to-1-order" msgstr "N To 1 Order" msgid "page-ranges" msgstr "Page Ranges" msgid "pages" msgstr "Pages" msgid "pages-per-subset" msgstr "Pages Per Subset" msgid "pending" msgstr "in attesa" msgid "platform-shape" msgstr "Platform Shape" msgid "platform-shape.ellipse" msgstr "Round" msgid "platform-shape.rectangle" msgstr "Rectangle" msgid "platform-temperature" msgstr "Platform Temperature" msgid "post-dial-string" msgstr "Post-dial String" #, c-format msgid "ppdc: Adding include directory \"%s\"." msgstr "ppdc: aggiunta della directory \"%s\"." #, c-format msgid "ppdc: Adding/updating UI text from %s." msgstr "ppdc: aggiunto/aggiornato il testo della UI da %s." #, c-format msgid "ppdc: Bad boolean value (%s) on line %d of %s." msgstr "ppdc: il valore booleano non è valido (%s) alla riga %d di %s." #, c-format msgid "ppdc: Bad font attribute: %s" msgstr "ppdc: l'attributo del carattere non è valido: %s" #, c-format msgid "ppdc: Bad resolution name \"%s\" on line %d of %s." msgstr "" "ppdc: il nome della risoluzione non è valido \"%s\" alla riga %d di %s." #, c-format msgid "ppdc: Bad status keyword %s on line %d of %s." msgstr "ppdc: lo stato della parola chiave non è valido %s alla riga %d di %s." #, c-format msgid "ppdc: Bad variable substitution ($%c) on line %d of %s." msgstr "" "ppdc: la sostituzione della variabile ($%c) non è valida alla riga %d di %s." #, c-format msgid "ppdc: Choice found on line %d of %s with no Option." msgstr "ppdc: trovata scelta senza opzione alla riga %d di %s." #, c-format msgid "ppdc: Duplicate #po for locale %s on line %d of %s." msgstr "ppdc: #po duplicato per il locale %s alla riga %d di %s." #, c-format msgid "ppdc: Expected a filter definition on line %d of %s." msgstr "ppdc: è prevista una definizione del filtro alla riga %d di %s." #, c-format msgid "ppdc: Expected a program name on line %d of %s." msgstr "ppdc: è previsto il nome del programma alla riga %d di %s." #, c-format msgid "ppdc: Expected boolean value on line %d of %s." msgstr "ppdc: è previsto un valore booleano alla riga %d di %s." #, c-format msgid "ppdc: Expected charset after Font on line %d of %s." msgstr "ppdc: è previsto un set di caratteri dopo Font alla riga %d di %s." #, c-format msgid "ppdc: Expected choice code on line %d of %s." msgstr "ppdc: è previsto un codice di scelta alla riga %d di %s." #, c-format msgid "ppdc: Expected choice name/text on line %d of %s." msgstr "ppdc: è previsto un nome/testo di scelta alla riga %d di %s. " #, c-format msgid "ppdc: Expected color order for ColorModel on line %d of %s." msgstr "ppdc: è previsto un colore per ColorModel alla riga %d di %s." #, c-format msgid "ppdc: Expected colorspace for ColorModel on line %d of %s." msgstr "" "ppdc: è previsto uno spazio di colore per ColorModel alla riga %d di %s." #, c-format msgid "ppdc: Expected compression for ColorModel on line %d of %s." msgstr "ppdc: è prevista una compressione per ColorModel alla riga %d di %s." #, c-format msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s." msgstr "" "ppdc: è prevista una stringa di vincoli per UIConstraints alla riga %d di %s." #, c-format msgid "" "ppdc: Expected driver type keyword following DriverType on line %d of %s." msgstr "" "ppdc: è previsto un driver della parola chiave tipo che segue DriverType " "alla riga %d di %s." #, c-format msgid "ppdc: Expected duplex type after Duplex on line %d of %s." msgstr "ppdc: è previsto il tipo duplex dopo Duplex alla riga %d di %s." #, c-format msgid "ppdc: Expected encoding after Font on line %d of %s." msgstr "ppdc: è prevista una codifica dopo Font alla riga %d di %s." #, c-format msgid "ppdc: Expected filename after #po %s on line %d of %s." msgstr "ppdc: è previsto un file dopo #po %s alla riga %d di %s." #, c-format msgid "ppdc: Expected group name/text on line %d of %s." msgstr "ppdc: è previsto un nome/testo del gruppo alla riga %d di %s." #, c-format msgid "ppdc: Expected include filename on line %d of %s." msgstr "ppdc: è previsto un file da includere alla riga %d di %s." #, c-format msgid "ppdc: Expected integer on line %d of %s." msgstr "ppdc: è previsto un intero alla riga %d di %s." #, c-format msgid "ppdc: Expected locale after #po on line %d of %s." msgstr "ppdc: è previsto un locale dopo #po alla riga %d di %s." #, c-format msgid "ppdc: Expected name after %s on line %d of %s." msgstr "ppdc: è previsto un nome dopo %s alla riga %d di %s." #, c-format msgid "ppdc: Expected name after FileName on line %d of %s." msgstr "ppdc: è previsto un nome dopo FileName alla riga %d di %s." #, c-format msgid "ppdc: Expected name after Font on line %d of %s." msgstr "ppdc: è previsto un nome dopo Font alla riga %d di %s." #, c-format msgid "ppdc: Expected name after Manufacturer on line %d of %s." msgstr "ppdc: è previsto un nome dopo Manufacturer alla riga %d di %s." #, c-format msgid "ppdc: Expected name after MediaSize on line %d of %s." msgstr "ppdc: è previsto un nome dopo MediaSize alla riga %d di %s." #, c-format msgid "ppdc: Expected name after ModelName on line %d of %s." msgstr "ppdc: è previsto un nome dopo ModelName alla riga %d di %s." #, c-format msgid "ppdc: Expected name after PCFileName on line %d of %s." msgstr "ppdc: è previsto un nome dopo PCFileName alla riga %d di %s." #, c-format msgid "ppdc: Expected name/text after %s on line %d of %s." msgstr "ppdc: è previsto un nome/testo dopo %s alla riga %d di %s." #, c-format msgid "ppdc: Expected name/text after Installable on line %d of %s." msgstr "ppdc: è previsto un nome/testo dopo Installable alla riga %d di %s." #, c-format msgid "ppdc: Expected name/text after Resolution on line %d of %s." msgstr "ppdc: è previsto un nome/testo dopo Resolution alla riga %d di %s." #, c-format msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s." msgstr "" "ppdc: è prevista una combinazione nome/testo per ColorModel alla riga %d di " "%s." #, c-format msgid "ppdc: Expected option name/text on line %d of %s." msgstr "ppdc: è prevista l'opzione nome/testo alla riga %d di %s." #, c-format msgid "ppdc: Expected option section on line %d of %s." msgstr "ppdc: è prevista la sezione dell'opzione alla riga %d di %s." #, c-format msgid "ppdc: Expected option type on line %d of %s." msgstr "ppdc: è previsto il tipo di opzione alla riga %d di %s." #, c-format msgid "ppdc: Expected override field after Resolution on line %d of %s." msgstr "" "ppdc: è previsto sovrascrivere il campo dopo Resolution alla riga %d di %s." #, c-format msgid "ppdc: Expected quoted string on line %d of %s." msgstr "ppdc: è prevista una stringa tra virgolette alla riga %d di %s." #, c-format msgid "ppdc: Expected real number on line %d of %s." msgstr "ppdc: è previsto un numero reale alla riga %d di %s." #, c-format msgid "" "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s." msgstr "" "ppdc: è previsto risoluzione/mediatype dopo ColorProfile alla riga %d di %s." #, c-format msgid "" "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d " "of %s." msgstr "" "ppdc: è previsto risoluzione/mediatype dopo SimpleColorProfile alla riga %d " "di %s." #, c-format msgid "ppdc: Expected selector after %s on line %d of %s." msgstr "ppdc: è previsto un selettore %s alla riga %d di %s." #, c-format msgid "ppdc: Expected status after Font on line %d of %s." msgstr "ppdc: è previsto uno stato dopo Font alla riga %d di %s." #, c-format msgid "ppdc: Expected string after Copyright on line %d of %s." msgstr "ppdc: è prevista una stringa dopo Copyright alla riga %d di %s." #, c-format msgid "ppdc: Expected string after Version on line %d of %s." msgstr "ppdc: è prevista una stringa dopo Version alla riga %d di %s." #, c-format msgid "ppdc: Expected two option names on line %d of %s." msgstr "ppdc: sono previsti due nomi di opzioni alla riga %d di %s." #, c-format msgid "ppdc: Expected value after %s on line %d of %s." msgstr "ppdc: è previsto un valore dopo %s alla riga %d di %s." #, c-format msgid "ppdc: Expected version after Font on line %d of %s." msgstr "ppdc: è prevista una versione dopo Font alla riga %d di %s." #, c-format msgid "ppdc: Invalid #include/#po filename \"%s\"." msgstr "ppdc: il file #include/#po non è valido \"%s\"." #, c-format msgid "ppdc: Invalid cost for filter on line %d of %s." msgstr "ppdc: il costo non è valido per il filtro alla riga %d di %s." #, c-format msgid "ppdc: Invalid empty MIME type for filter on line %d of %s." msgstr "" "ppdc: il tipo di MIME vuoto non è valido per il filtro alla riga %d di %s." #, c-format msgid "ppdc: Invalid empty program name for filter on line %d of %s." msgstr "" "ppdc: il nome del programma vuoto non è valido per il filtro alla riga %d di " "%s." #, c-format msgid "ppdc: Invalid option section \"%s\" on line %d of %s." msgstr "ppdc: la sezione dell'opzione \"%s\" non è valida alla riga %d di %s." #, c-format msgid "ppdc: Invalid option type \"%s\" on line %d of %s." msgstr "ppdc: il tipo di opzione \"%s\" non è valido alla riga %d di %s." #, c-format msgid "ppdc: Loading driver information file \"%s\"." msgstr "ppdc: caricamento in corso delle informazioni del driver \"%s\"." #, c-format msgid "ppdc: Loading messages for locale \"%s\"." msgstr "ppdc: caricamento in corso dei messaggi per locale \"%s\"." #, c-format msgid "ppdc: Loading messages from \"%s\"." msgstr "ppdc: caricamento in corso da \"%s\"." #, c-format msgid "ppdc: Missing #endif at end of \"%s\"." msgstr "ppdc. manca #endif alla fine di \"%s\"." #, c-format msgid "ppdc: Missing #if on line %d of %s." msgstr "ppdc: manca #if alla riga %d di %s." #, c-format msgid "" "ppdc: Need a msgid line before any translation strings on line %d of %s." msgstr "" "ppdc: è necessaria la riga msgid prima di ogni stringa di traduzione alla " "riga %d di %s." #, c-format msgid "ppdc: No message catalog provided for locale %s." msgstr "ppdc: Nessun catalogo dei messaggi fornito per locale %s." #, c-format msgid "ppdc: Option %s defined in two different groups on line %d of %s." msgstr "" "ppdc: l'opzione %s è stata definita in due differenti gruppi alla riga %d di " "%s." #, c-format msgid "ppdc: Option %s redefined with a different type on line %d of %s." msgstr "" "ppdc: l'opzione %s è stata ridefinita con un tipo differente alla riga %d di " "%s." #, c-format msgid "ppdc: Option constraint must *name on line %d of %s." msgstr "ppdc: il vincolo dell'opzione deve *citare alla riga %d di %s." #, c-format msgid "ppdc: Too many nested #if's on line %d of %s." msgstr "ppdc: troppi #if sono nidificati alla riga %d di %s." #, c-format msgid "ppdc: Unable to create PPD file \"%s\" - %s." msgstr "ppdc: non è possibile creare il file PPD \"%s\" - %s." #, c-format msgid "ppdc: Unable to create output directory %s: %s" msgstr "ppdc: non è possibile creare la directory di output %s: %s" #, c-format msgid "ppdc: Unable to create output pipes: %s" msgstr "ppdc: non è possibile creare la pipe di output: %s" #, c-format msgid "ppdc: Unable to execute cupstestppd: %s" msgstr "ppdc: non è possibile eseguire cupstestppd: %s" #, c-format msgid "ppdc: Unable to find #po file %s on line %d of %s." msgstr "ppdc: non è possibile trovare il file #po %s alla riga %d di %s." #, c-format msgid "ppdc: Unable to find include file \"%s\" on line %d of %s." msgstr "" "ppdc: non è possibile trovare il file di include \"%s\" alla riga %d di %s." #, c-format msgid "ppdc: Unable to find localization for \"%s\" - %s" msgstr "ppdc: non è possibile trovare la localizzazione di \"%s\" - %s" #, c-format msgid "ppdc: Unable to load localization file \"%s\" - %s" msgstr "" "ppdc: non è possibile caricare il file della localizzazione \"%s\" - %s" #, c-format msgid "ppdc: Unable to open %s: %s" msgstr "ppdc: non è possibile aprire %s: %s" #, c-format msgid "ppdc: Undefined variable (%s) on line %d of %s." msgstr "ppdc: variabile non definita (%s) alla riga %d di %s." #, c-format msgid "ppdc: Unexpected text on line %d of %s." msgstr "ppdc: testo non previsto alla riga %d di %s." #, c-format msgid "ppdc: Unknown driver type %s on line %d of %s." msgstr "ppdc: tipo di driver sconosciuto %s alla riga %d di %s." #, c-format msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s." msgstr "ppdc: tipo duplex sconosciuto \"%s\" alla riga %d di %s." #, c-format msgid "ppdc: Unknown media size \"%s\" on line %d of %s." msgstr "ppdc: dimensione sconosciuta del supporto \"%s\" alla riga %d di %s." #, c-format msgid "ppdc: Unknown message catalog format for \"%s\"." msgstr "ppdc: formato dei cataloghi sconosciuto per \"%s\"." #, c-format msgid "ppdc: Unknown token \"%s\" seen on line %d of %s." msgstr "ppdc: c'è un token sconosciuto \"%s\" alla riga %d di %s." #, c-format msgid "" "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." msgstr "" "ppdc: caratteri finali sconosciuti in un numero reale \"%s\" alla riga %d di " "%s." #, c-format msgid "ppdc: Unterminated string starting with %c on line %d of %s." msgstr "ppdc: stringa senza terminazione che inizia per %c alla riga %d di %s." #, c-format msgid "ppdc: Warning - overlapping filename \"%s\"." msgstr "ppdc: attenzione - sovrapposizione del file \"%s\"." #, c-format msgid "ppdc: Writing %s." msgstr "ppdc: scrittura in corso di %s." #, c-format msgid "ppdc: Writing PPD files to directory \"%s\"." msgstr "ppdc: scrittura in corso dei file PPD nella directory \"%s\"." #, c-format msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s." msgstr "ppdmerge: LanguageVersion non è valido \"%s\" in %s." #, c-format msgid "ppdmerge: Ignoring PPD file %s." msgstr "ppdmerge: il file PPD %s è stato ignorato." #, c-format msgid "ppdmerge: Unable to backup %s to %s - %s" msgstr "ppdmerge: non è possibile salvare %s in %s - %s" msgid "pre-dial-string" msgstr "Pre-dial String" msgid "presentation-direction-number-up" msgstr "Number-Up Layout" msgid "presentation-direction-number-up.tobottom-toleft" msgstr "Top-Bottom, Right-Left" msgid "presentation-direction-number-up.tobottom-toright" msgstr "Top-Bottom, Left-Right" msgid "presentation-direction-number-up.toleft-tobottom" msgstr "Right-Left, Top-Bottom" msgid "presentation-direction-number-up.toleft-totop" msgstr "Right-Left, Bottom-Top" msgid "presentation-direction-number-up.toright-tobottom" msgstr "Left-Right, Top-Bottom" msgid "presentation-direction-number-up.toright-totop" msgstr "Left-Right, Bottom-Top" msgid "presentation-direction-number-up.totop-toleft" msgstr "Bottom-Top, Right-Left" msgid "presentation-direction-number-up.totop-toright" msgstr "Bottom-Top, Left-Right" msgid "print-accuracy" msgstr "Print Accuracy" msgid "print-base" msgstr "Print Base" msgid "print-base.brim" msgstr "Brim" msgid "print-base.none" msgstr "None" msgid "print-base.raft" msgstr "Raft" msgid "print-base.skirt" msgstr "Skirt" msgid "print-base.standard" msgstr "Standard" msgid "print-color-mode" msgstr "Print Color Mode" msgid "print-color-mode.auto" msgstr "Automatic" msgid "print-color-mode.bi-level" msgstr "Bi-Level" msgid "print-color-mode.color" msgstr "Color" msgid "print-color-mode.highlight" msgstr "Highlight" msgid "print-color-mode.monochrome" msgstr "Monochrome" msgid "print-color-mode.process-bi-level" msgstr "Process Bi-Level" msgid "print-color-mode.process-monochrome" msgstr "Process Monochrome" msgid "print-content-optimize" msgstr "Print Optimization" msgid "print-content-optimize.auto" msgstr "Automatic" msgid "print-content-optimize.graphic" msgstr "Graphics" msgid "print-content-optimize.photo" msgstr "Photo" msgid "print-content-optimize.text" msgstr "Text" msgid "print-content-optimize.text-and-graphic" msgstr "Text And Graphics" msgid "print-objects" msgstr "Print Objects" msgid "print-quality" msgstr "Print Quality" msgid "print-quality.3" msgstr "Draft" msgid "print-quality.4" msgstr "Normal" msgid "print-quality.5" msgstr "High" msgid "print-rendering-intent" msgstr "Print Rendering Intent" msgid "print-rendering-intent.absolute" msgstr "Absolute" msgid "print-rendering-intent.auto" msgstr "Automatic" msgid "print-rendering-intent.perceptual" msgstr "Perceptual" msgid "print-rendering-intent.relative" msgstr "Relative" msgid "print-rendering-intent.relative-bpc" msgstr "Relative w/Black Point Compensation" msgid "print-rendering-intent.saturation" msgstr "Saturation" msgid "print-scaling" msgstr "Print Scaling" msgid "print-scaling.auto" msgstr "Automatic" msgid "print-scaling.auto-fit" msgstr "Auto Fit" msgid "print-scaling.fill" msgstr "Fill" msgid "print-scaling.fit" msgstr "Fit" msgid "print-scaling.none" msgstr "None" msgid "print-supports" msgstr "Print Supports" msgid "print-supports.material" msgstr "Material" msgid "print-supports.none" msgstr "None" msgid "print-supports.standard" msgstr "Standard" #, c-format msgid "printer %s disabled since %s -" msgstr "la stampante %s è stata disabilitata da %s" #, c-format msgid "printer %s is idle. enabled since %s" msgstr "la stampante %s è inattiva. è stata abilitata da %s" #, c-format msgid "printer %s now printing %s-%d. enabled since %s" msgstr "la stampante %s sta stampando %s-%d. è stata abilitata da %s" #, c-format msgid "printer %s/%s disabled since %s -" msgstr "la stampante %s/%s è stata disabilitata da %s -" #, c-format msgid "printer %s/%s is idle. enabled since %s" msgstr "la stampante %s/%s è inattiva. è stata abilitata da %s" #, c-format msgid "printer %s/%s now printing %s-%d. enabled since %s" msgstr "la stampante %s/%s sta stampando %s-%d. è stata abilitata da %s" msgid "printer-message-from-operator" msgstr "Printer Message From Operator" msgid "printer-resolution" msgstr "Printer Resolution" msgid "printer-state" msgstr "Printer State" msgid "printer-state-reasons" msgstr "Detailed Printer State" msgid "printer-state-reasons.alert-removal-of-binary-change-entry" msgstr "Alert Removal Of Binary Change Entry" msgid "printer-state-reasons.bander-added" msgstr "Bander Added" msgid "printer-state-reasons.bander-almost-empty" msgstr "Bander Almost Empty" msgid "printer-state-reasons.bander-almost-full" msgstr "Bander Almost Full" msgid "printer-state-reasons.bander-at-limit" msgstr "Bander At Limit" msgid "printer-state-reasons.bander-closed" msgstr "Bander Closed" msgid "printer-state-reasons.bander-configuration-change" msgstr "Bander Configuration Change" msgid "printer-state-reasons.bander-cover-closed" msgstr "Bander Cover Closed" msgid "printer-state-reasons.bander-cover-open" msgstr "Bander Cover Open" msgid "printer-state-reasons.bander-empty" msgstr "Bander Empty" msgid "printer-state-reasons.bander-full" msgstr "Bander Full" msgid "printer-state-reasons.bander-interlock-closed" msgstr "Bander Interlock Closed" msgid "printer-state-reasons.bander-interlock-open" msgstr "Bander Interlock Open" msgid "printer-state-reasons.bander-jam" msgstr "Bander Jam" msgid "printer-state-reasons.bander-life-almost-over" msgstr "Bander Life Almost Over" msgid "printer-state-reasons.bander-life-over" msgstr "Bander Life Over" msgid "printer-state-reasons.bander-memory-exhausted" msgstr "Bander Memory Exhausted" msgid "printer-state-reasons.bander-missing" msgstr "Bander Missing" msgid "printer-state-reasons.bander-motor-failure" msgstr "Bander Motor Failure" msgid "printer-state-reasons.bander-near-limit" msgstr "Bander Near Limit" msgid "printer-state-reasons.bander-offline" msgstr "Bander Offline" msgid "printer-state-reasons.bander-opened" msgstr "Bander Opened" msgid "printer-state-reasons.bander-over-temperature" msgstr "Bander Over Temperature" msgid "printer-state-reasons.bander-power-saver" msgstr "Bander Power Saver" msgid "printer-state-reasons.bander-recoverable-failure" msgstr "Bander Recoverable Failure" msgid "printer-state-reasons.bander-recoverable-storage" msgstr "Bander Recoverable Storage" msgid "printer-state-reasons.bander-removed" msgstr "Bander Removed" msgid "printer-state-reasons.bander-resource-added" msgstr "Bander Resource Added" msgid "printer-state-reasons.bander-resource-removed" msgstr "Bander Resource Removed" msgid "printer-state-reasons.bander-thermistor-failure" msgstr "Bander Thermistor Failure" msgid "printer-state-reasons.bander-timing-failure" msgstr "Bander Timing Failure" msgid "printer-state-reasons.bander-turned-off" msgstr "Bander Turned Off" msgid "printer-state-reasons.bander-turned-on" msgstr "Bander Turned On" msgid "printer-state-reasons.bander-under-temperature" msgstr "Bander Under Temperature" msgid "printer-state-reasons.bander-unrecoverable-failure" msgstr "Bander Unrecoverable Failure" msgid "printer-state-reasons.bander-unrecoverable-storage-error" msgstr "Bander Unrecoverable Storage Error" msgid "printer-state-reasons.bander-warming-up" msgstr "Bander Warming Up" msgid "printer-state-reasons.binder-added" msgstr "Binder Added" msgid "printer-state-reasons.binder-almost-empty" msgstr "Binder Almost Empty" msgid "printer-state-reasons.binder-almost-full" msgstr "Binder Almost Full" msgid "printer-state-reasons.binder-at-limit" msgstr "Binder At Limit" msgid "printer-state-reasons.binder-closed" msgstr "Binder Closed" msgid "printer-state-reasons.binder-configuration-change" msgstr "Binder Configuration Change" msgid "printer-state-reasons.binder-cover-closed" msgstr "Binder Cover Closed" msgid "printer-state-reasons.binder-cover-open" msgstr "Binder Cover Open" msgid "printer-state-reasons.binder-empty" msgstr "Binder Empty" msgid "printer-state-reasons.binder-full" msgstr "Binder Full" msgid "printer-state-reasons.binder-interlock-closed" msgstr "Binder Interlock Closed" msgid "printer-state-reasons.binder-interlock-open" msgstr "Binder Interlock Open" msgid "printer-state-reasons.binder-jam" msgstr "Binder Jam" msgid "printer-state-reasons.binder-life-almost-over" msgstr "Binder Life Almost Over" msgid "printer-state-reasons.binder-life-over" msgstr "Binder Life Over" msgid "printer-state-reasons.binder-memory-exhausted" msgstr "Binder Memory Exhausted" msgid "printer-state-reasons.binder-missing" msgstr "Binder Missing" msgid "printer-state-reasons.binder-motor-failure" msgstr "Binder Motor Failure" msgid "printer-state-reasons.binder-near-limit" msgstr "Binder Near Limit" msgid "printer-state-reasons.binder-offline" msgstr "Binder Offline" msgid "printer-state-reasons.binder-opened" msgstr "Binder Opened" msgid "printer-state-reasons.binder-over-temperature" msgstr "Binder Over Temperature" msgid "printer-state-reasons.binder-power-saver" msgstr "Binder Power Saver" msgid "printer-state-reasons.binder-recoverable-failure" msgstr "Binder Recoverable Failure" msgid "printer-state-reasons.binder-recoverable-storage" msgstr "Binder Recoverable Storage" msgid "printer-state-reasons.binder-removed" msgstr "Binder Removed" msgid "printer-state-reasons.binder-resource-added" msgstr "Binder Resource Added" msgid "printer-state-reasons.binder-resource-removed" msgstr "Binder Resource Removed" msgid "printer-state-reasons.binder-thermistor-failure" msgstr "Binder Thermistor Failure" msgid "printer-state-reasons.binder-timing-failure" msgstr "Binder Timing Failure" msgid "printer-state-reasons.binder-turned-off" msgstr "Binder Turned Off" msgid "printer-state-reasons.binder-turned-on" msgstr "Binder Turned On" msgid "printer-state-reasons.binder-under-temperature" msgstr "Binder Under Temperature" msgid "printer-state-reasons.binder-unrecoverable-failure" msgstr "Binder Unrecoverable Failure" msgid "printer-state-reasons.binder-unrecoverable-storage-error" msgstr "Binder Unrecoverable Storage Error" msgid "printer-state-reasons.binder-warming-up" msgstr "Binder Warming Up" msgid "printer-state-reasons.camera-failure" msgstr "Camera Failure" msgid "printer-state-reasons.chamber-cooling" msgstr "Chamber Cooling" msgid "printer-state-reasons.chamber-heating" msgstr "Chamber Heating" msgid "printer-state-reasons.chamber-temperature-high" msgstr "Chamber Temperature High" msgid "printer-state-reasons.chamber-temperature-low" msgstr "Chamber Temperature Low" msgid "printer-state-reasons.cleaner-life-almost-over" msgstr "Cleaner Life Almost Over" msgid "printer-state-reasons.cleaner-life-over" msgstr "Cleaner Life Over" msgid "printer-state-reasons.configuration-change" msgstr "Configuration Change" msgid "printer-state-reasons.connecting-to-device" msgstr "Connecting To Device" msgid "printer-state-reasons.cover-open" msgstr "Cover Open" msgid "printer-state-reasons.deactivated" msgstr "Deactivated" msgid "printer-state-reasons.developer-empty" msgstr "Developer Empty" msgid "printer-state-reasons.developer-low" msgstr "Developer Low" msgid "printer-state-reasons.die-cutter-added" msgstr "Die Cutter Added" msgid "printer-state-reasons.die-cutter-almost-empty" msgstr "Die Cutter Almost Empty" msgid "printer-state-reasons.die-cutter-almost-full" msgstr "Die Cutter Almost Full" msgid "printer-state-reasons.die-cutter-at-limit" msgstr "Die Cutter At Limit" msgid "printer-state-reasons.die-cutter-closed" msgstr "Die Cutter Closed" msgid "printer-state-reasons.die-cutter-configuration-change" msgstr "Die Cutter Configuration Change" msgid "printer-state-reasons.die-cutter-cover-closed" msgstr "Die Cutter Cover Closed" msgid "printer-state-reasons.die-cutter-cover-open" msgstr "Die Cutter Cover Open" msgid "printer-state-reasons.die-cutter-empty" msgstr "Die Cutter Empty" msgid "printer-state-reasons.die-cutter-full" msgstr "Die Cutter Full" msgid "printer-state-reasons.die-cutter-interlock-closed" msgstr "Die Cutter Interlock Closed" msgid "printer-state-reasons.die-cutter-interlock-open" msgstr "Die Cutter Interlock Open" msgid "printer-state-reasons.die-cutter-jam" msgstr "Die Cutter Jam" msgid "printer-state-reasons.die-cutter-life-almost-over" msgstr "Die Cutter Life Almost Over" msgid "printer-state-reasons.die-cutter-life-over" msgstr "Die Cutter Life Over" msgid "printer-state-reasons.die-cutter-memory-exhausted" msgstr "Die Cutter Memory Exhausted" msgid "printer-state-reasons.die-cutter-missing" msgstr "Die Cutter Missing" msgid "printer-state-reasons.die-cutter-motor-failure" msgstr "Die Cutter Motor Failure" msgid "printer-state-reasons.die-cutter-near-limit" msgstr "Die Cutter Near Limit" msgid "printer-state-reasons.die-cutter-offline" msgstr "Die Cutter Offline" msgid "printer-state-reasons.die-cutter-opened" msgstr "Die Cutter Opened" msgid "printer-state-reasons.die-cutter-over-temperature" msgstr "Die Cutter Over Temperature" msgid "printer-state-reasons.die-cutter-power-saver" msgstr "Die Cutter Power Saver" msgid "printer-state-reasons.die-cutter-recoverable-failure" msgstr "Die Cutter Recoverable Failure" msgid "printer-state-reasons.die-cutter-recoverable-storage" msgstr "Die Cutter Recoverable Storage" msgid "printer-state-reasons.die-cutter-removed" msgstr "Die Cutter Removed" msgid "printer-state-reasons.die-cutter-resource-added" msgstr "Die Cutter Resource Added" msgid "printer-state-reasons.die-cutter-resource-removed" msgstr "Die Cutter Resource Removed" msgid "printer-state-reasons.die-cutter-thermistor-failure" msgstr "Die Cutter Thermistor Failure" msgid "printer-state-reasons.die-cutter-timing-failure" msgstr "Die Cutter Timing Failure" msgid "printer-state-reasons.die-cutter-turned-off" msgstr "Die Cutter Turned Off" msgid "printer-state-reasons.die-cutter-turned-on" msgstr "Die Cutter Turned On" msgid "printer-state-reasons.die-cutter-under-temperature" msgstr "Die Cutter Under Temperature" msgid "printer-state-reasons.die-cutter-unrecoverable-failure" msgstr "Die Cutter Unrecoverable Failure" msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error" msgstr "Die Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.die-cutter-warming-up" msgstr "Die Cutter Warming Up" msgid "printer-state-reasons.door-open" msgstr "Door Open" msgid "printer-state-reasons.extruder-cooling" msgstr "Extruder Cooling" msgid "printer-state-reasons.extruder-failure" msgstr "Extruder Failure" msgid "printer-state-reasons.extruder-heating" msgstr "Extruder Heating" msgid "printer-state-reasons.extruder-jam" msgstr "Extruder Jam" msgid "printer-state-reasons.extruder-temperature-high" msgstr "Extruder Temperature High" msgid "printer-state-reasons.extruder-temperature-low" msgstr "Extruder Temperature Low" msgid "printer-state-reasons.fan-failure" msgstr "Fan Failure" msgid "printer-state-reasons.folder-added" msgstr "Folder Added" msgid "printer-state-reasons.folder-almost-empty" msgstr "Folder Almost Empty" msgid "printer-state-reasons.folder-almost-full" msgstr "Folder Almost Full" msgid "printer-state-reasons.folder-at-limit" msgstr "Folder At Limit" msgid "printer-state-reasons.folder-closed" msgstr "Folder Closed" msgid "printer-state-reasons.folder-configuration-change" msgstr "Folder Configuration Change" msgid "printer-state-reasons.folder-cover-closed" msgstr "Folder Cover Closed" msgid "printer-state-reasons.folder-cover-open" msgstr "Folder Cover Open" msgid "printer-state-reasons.folder-empty" msgstr "Folder Empty" msgid "printer-state-reasons.folder-full" msgstr "Folder Full" msgid "printer-state-reasons.folder-interlock-closed" msgstr "Folder Interlock Closed" msgid "printer-state-reasons.folder-interlock-open" msgstr "Folder Interlock Open" msgid "printer-state-reasons.folder-jam" msgstr "Folder Jam" msgid "printer-state-reasons.folder-life-almost-over" msgstr "Folder Life Almost Over" msgid "printer-state-reasons.folder-life-over" msgstr "Folder Life Over" msgid "printer-state-reasons.folder-memory-exhausted" msgstr "Folder Memory Exhausted" msgid "printer-state-reasons.folder-missing" msgstr "Folder Missing" msgid "printer-state-reasons.folder-motor-failure" msgstr "Folder Motor Failure" msgid "printer-state-reasons.folder-near-limit" msgstr "Folder Near Limit" msgid "printer-state-reasons.folder-offline" msgstr "Folder Offline" msgid "printer-state-reasons.folder-opened" msgstr "Folder Opened" msgid "printer-state-reasons.folder-over-temperature" msgstr "Folder Over Temperature" msgid "printer-state-reasons.folder-power-saver" msgstr "Folder Power Saver" msgid "printer-state-reasons.folder-recoverable-failure" msgstr "Folder Recoverable Failure" msgid "printer-state-reasons.folder-recoverable-storage" msgstr "Folder Recoverable Storage" msgid "printer-state-reasons.folder-removed" msgstr "Folder Removed" msgid "printer-state-reasons.folder-resource-added" msgstr "Folder Resource Added" msgid "printer-state-reasons.folder-resource-removed" msgstr "Folder Resource Removed" msgid "printer-state-reasons.folder-thermistor-failure" msgstr "Folder Thermistor Failure" msgid "printer-state-reasons.folder-timing-failure" msgstr "Folder Timing Failure" msgid "printer-state-reasons.folder-turned-off" msgstr "Folder Turned Off" msgid "printer-state-reasons.folder-turned-on" msgstr "Folder Turned On" msgid "printer-state-reasons.folder-under-temperature" msgstr "Folder Under Temperature" msgid "printer-state-reasons.folder-unrecoverable-failure" msgstr "Folder Unrecoverable Failure" msgid "printer-state-reasons.folder-unrecoverable-storage-error" msgstr "Folder Unrecoverable Storage Error" msgid "printer-state-reasons.folder-warming-up" msgstr "Folder Warming Up" msgid "printer-state-reasons.fuser-over-temp" msgstr "Fuser Over Temp" msgid "printer-state-reasons.fuser-under-temp" msgstr "Fuser Under Temp" msgid "printer-state-reasons.hold-new-jobs" msgstr "Hold New Jobs" msgid "printer-state-reasons.identify-printer-requested" msgstr "Identify Printer" msgid "printer-state-reasons.imprinter-added" msgstr "Imprinter Added" msgid "printer-state-reasons.imprinter-almost-empty" msgstr "Imprinter Almost Empty" msgid "printer-state-reasons.imprinter-almost-full" msgstr "Imprinter Almost Full" msgid "printer-state-reasons.imprinter-at-limit" msgstr "Imprinter At Limit" msgid "printer-state-reasons.imprinter-closed" msgstr "Imprinter Closed" msgid "printer-state-reasons.imprinter-configuration-change" msgstr "Imprinter Configuration Change" msgid "printer-state-reasons.imprinter-cover-closed" msgstr "Imprinter Cover Closed" msgid "printer-state-reasons.imprinter-cover-open" msgstr "Imprinter Cover Open" msgid "printer-state-reasons.imprinter-empty" msgstr "Imprinter Empty" msgid "printer-state-reasons.imprinter-full" msgstr "Imprinter Full" msgid "printer-state-reasons.imprinter-interlock-closed" msgstr "Imprinter Interlock Closed" msgid "printer-state-reasons.imprinter-interlock-open" msgstr "Imprinter Interlock Open" msgid "printer-state-reasons.imprinter-jam" msgstr "Imprinter Jam" msgid "printer-state-reasons.imprinter-life-almost-over" msgstr "Imprinter Life Almost Over" msgid "printer-state-reasons.imprinter-life-over" msgstr "Imprinter Life Over" msgid "printer-state-reasons.imprinter-memory-exhausted" msgstr "Imprinter Memory Exhausted" msgid "printer-state-reasons.imprinter-missing" msgstr "Imprinter Missing" msgid "printer-state-reasons.imprinter-motor-failure" msgstr "Imprinter Motor Failure" msgid "printer-state-reasons.imprinter-near-limit" msgstr "Imprinter Near Limit" msgid "printer-state-reasons.imprinter-offline" msgstr "Imprinter Offline" msgid "printer-state-reasons.imprinter-opened" msgstr "Imprinter Opened" msgid "printer-state-reasons.imprinter-over-temperature" msgstr "Imprinter Over Temperature" msgid "printer-state-reasons.imprinter-power-saver" msgstr "Imprinter Power Saver" msgid "printer-state-reasons.imprinter-recoverable-failure" msgstr "Imprinter Recoverable Failure" msgid "printer-state-reasons.imprinter-recoverable-storage" msgstr "Imprinter Recoverable Storage" msgid "printer-state-reasons.imprinter-removed" msgstr "Imprinter Removed" msgid "printer-state-reasons.imprinter-resource-added" msgstr "Imprinter Resource Added" msgid "printer-state-reasons.imprinter-resource-removed" msgstr "Imprinter Resource Removed" msgid "printer-state-reasons.imprinter-thermistor-failure" msgstr "Imprinter Thermistor Failure" msgid "printer-state-reasons.imprinter-timing-failure" msgstr "Imprinter Timing Failure" msgid "printer-state-reasons.imprinter-turned-off" msgstr "Imprinter Turned Off" msgid "printer-state-reasons.imprinter-turned-on" msgstr "Imprinter Turned On" msgid "printer-state-reasons.imprinter-under-temperature" msgstr "Imprinter Under Temperature" msgid "printer-state-reasons.imprinter-unrecoverable-failure" msgstr "Imprinter Unrecoverable Failure" msgid "printer-state-reasons.imprinter-unrecoverable-storage-error" msgstr "Imprinter Unrecoverable Storage Error" msgid "printer-state-reasons.imprinter-warming-up" msgstr "Imprinter Warming Up" msgid "printer-state-reasons.input-cannot-feed-size-selected" msgstr "Input Cannot Feed Size Selected" msgid "printer-state-reasons.input-manual-input-request" msgstr "Input Manual Input Request" msgid "printer-state-reasons.input-media-color-change" msgstr "Input Media Color Change" msgid "printer-state-reasons.input-media-form-parts-change" msgstr "Input Media Form Parts Change" msgid "printer-state-reasons.input-media-size-change" msgstr "Input Media Size Change" msgid "printer-state-reasons.input-media-type-change" msgstr "Input Media Type Change" msgid "printer-state-reasons.input-media-weight-change" msgstr "Input Media Weight Change" msgid "printer-state-reasons.input-tray-elevation-failure" msgstr "Input Tray Elevation Failure" msgid "printer-state-reasons.input-tray-missing" msgstr "Input Tray Missing" msgid "printer-state-reasons.input-tray-position-failure" msgstr "Input Tray Position Failure" msgid "printer-state-reasons.inserter-added" msgstr "Inserter Added" msgid "printer-state-reasons.inserter-almost-empty" msgstr "Inserter Almost Empty" msgid "printer-state-reasons.inserter-almost-full" msgstr "Inserter Almost Full" msgid "printer-state-reasons.inserter-at-limit" msgstr "Inserter At Limit" msgid "printer-state-reasons.inserter-closed" msgstr "Inserter Closed" msgid "printer-state-reasons.inserter-configuration-change" msgstr "Inserter Configuration Change" msgid "printer-state-reasons.inserter-cover-closed" msgstr "Inserter Cover Closed" msgid "printer-state-reasons.inserter-cover-open" msgstr "Inserter Cover Open" msgid "printer-state-reasons.inserter-empty" msgstr "Inserter Empty" msgid "printer-state-reasons.inserter-full" msgstr "Inserter Full" msgid "printer-state-reasons.inserter-interlock-closed" msgstr "Inserter Interlock Closed" msgid "printer-state-reasons.inserter-interlock-open" msgstr "Inserter Interlock Open" msgid "printer-state-reasons.inserter-jam" msgstr "Inserter Jam" msgid "printer-state-reasons.inserter-life-almost-over" msgstr "Inserter Life Almost Over" msgid "printer-state-reasons.inserter-life-over" msgstr "Inserter Life Over" msgid "printer-state-reasons.inserter-memory-exhausted" msgstr "Inserter Memory Exhausted" msgid "printer-state-reasons.inserter-missing" msgstr "Inserter Missing" msgid "printer-state-reasons.inserter-motor-failure" msgstr "Inserter Motor Failure" msgid "printer-state-reasons.inserter-near-limit" msgstr "Inserter Near Limit" msgid "printer-state-reasons.inserter-offline" msgstr "Inserter Offline" msgid "printer-state-reasons.inserter-opened" msgstr "Inserter Opened" msgid "printer-state-reasons.inserter-over-temperature" msgstr "Inserter Over Temperature" msgid "printer-state-reasons.inserter-power-saver" msgstr "Inserter Power Saver" msgid "printer-state-reasons.inserter-recoverable-failure" msgstr "Inserter Recoverable Failure" msgid "printer-state-reasons.inserter-recoverable-storage" msgstr "Inserter Recoverable Storage" msgid "printer-state-reasons.inserter-removed" msgstr "Inserter Removed" msgid "printer-state-reasons.inserter-resource-added" msgstr "Inserter Resource Added" msgid "printer-state-reasons.inserter-resource-removed" msgstr "Inserter Resource Removed" msgid "printer-state-reasons.inserter-thermistor-failure" msgstr "Inserter Thermistor Failure" msgid "printer-state-reasons.inserter-timing-failure" msgstr "Inserter Timing Failure" msgid "printer-state-reasons.inserter-turned-off" msgstr "Inserter Turned Off" msgid "printer-state-reasons.inserter-turned-on" msgstr "Inserter Turned On" msgid "printer-state-reasons.inserter-under-temperature" msgstr "Inserter Under Temperature" msgid "printer-state-reasons.inserter-unrecoverable-failure" msgstr "Inserter Unrecoverable Failure" msgid "printer-state-reasons.inserter-unrecoverable-storage-error" msgstr "Inserter Unrecoverable Storage Error" msgid "printer-state-reasons.inserter-warming-up" msgstr "Inserter Warming Up" msgid "printer-state-reasons.interlock-closed" msgstr "Interlock Closed" msgid "printer-state-reasons.interlock-open" msgstr "Interlock Open" msgid "printer-state-reasons.interpreter-cartridge-added" msgstr "Interpreter Cartridge Added" msgid "printer-state-reasons.interpreter-cartridge-deleted" msgstr "Interpreter Cartridge Deleted" msgid "printer-state-reasons.interpreter-complex-page-encountered" msgstr "Interpreter Complex Page Encountered" msgid "printer-state-reasons.interpreter-memory-decrease" msgstr "Interpreter Memory Decrease" msgid "printer-state-reasons.interpreter-memory-increase" msgstr "Interpreter Memory Increase" msgid "printer-state-reasons.interpreter-resource-added" msgstr "Interpreter Resource Added" msgid "printer-state-reasons.interpreter-resource-deleted" msgstr "Interpreter Resource Deleted" msgid "printer-state-reasons.interpreter-resource-unavailable" msgstr "Interpreter Resource Unavailable" msgid "printer-state-reasons.lamp-at-eol" msgstr "Lamp At Eol" msgid "printer-state-reasons.lamp-failure" msgstr "Lamp Failure" msgid "printer-state-reasons.lamp-near-eol" msgstr "Lamp Near Eol" msgid "printer-state-reasons.laser-at-eol" msgstr "Laser At Eol" msgid "printer-state-reasons.laser-failure" msgstr "Laser Failure" msgid "printer-state-reasons.laser-near-eol" msgstr "Laser Near Eol" msgid "printer-state-reasons.make-envelope-added" msgstr "Make Envelope Added" msgid "printer-state-reasons.make-envelope-almost-empty" msgstr "Make Envelope Almost Empty" msgid "printer-state-reasons.make-envelope-almost-full" msgstr "Make Envelope Almost Full" msgid "printer-state-reasons.make-envelope-at-limit" msgstr "Make Envelope At Limit" msgid "printer-state-reasons.make-envelope-closed" msgstr "Make Envelope Closed" msgid "printer-state-reasons.make-envelope-configuration-change" msgstr "Make Envelope Configuration Change" msgid "printer-state-reasons.make-envelope-cover-closed" msgstr "Make Envelope Cover Closed" msgid "printer-state-reasons.make-envelope-cover-open" msgstr "Make Envelope Cover Open" msgid "printer-state-reasons.make-envelope-empty" msgstr "Make Envelope Empty" msgid "printer-state-reasons.make-envelope-full" msgstr "Make Envelope Full" msgid "printer-state-reasons.make-envelope-interlock-closed" msgstr "Make Envelope Interlock Closed" msgid "printer-state-reasons.make-envelope-interlock-open" msgstr "Make Envelope Interlock Open" msgid "printer-state-reasons.make-envelope-jam" msgstr "Make Envelope Jam" msgid "printer-state-reasons.make-envelope-life-almost-over" msgstr "Make Envelope Life Almost Over" msgid "printer-state-reasons.make-envelope-life-over" msgstr "Make Envelope Life Over" msgid "printer-state-reasons.make-envelope-memory-exhausted" msgstr "Make Envelope Memory Exhausted" msgid "printer-state-reasons.make-envelope-missing" msgstr "Make Envelope Missing" msgid "printer-state-reasons.make-envelope-motor-failure" msgstr "Make Envelope Motor Failure" msgid "printer-state-reasons.make-envelope-near-limit" msgstr "Make Envelope Near Limit" msgid "printer-state-reasons.make-envelope-offline" msgstr "Make Envelope Offline" msgid "printer-state-reasons.make-envelope-opened" msgstr "Make Envelope Opened" msgid "printer-state-reasons.make-envelope-over-temperature" msgstr "Make Envelope Over Temperature" msgid "printer-state-reasons.make-envelope-power-saver" msgstr "Make Envelope Power Saver" msgid "printer-state-reasons.make-envelope-recoverable-failure" msgstr "Make Envelope Recoverable Failure" msgid "printer-state-reasons.make-envelope-recoverable-storage" msgstr "Make Envelope Recoverable Storage" msgid "printer-state-reasons.make-envelope-removed" msgstr "Make Envelope Removed" msgid "printer-state-reasons.make-envelope-resource-added" msgstr "Make Envelope Resource Added" msgid "printer-state-reasons.make-envelope-resource-removed" msgstr "Make Envelope Resource Removed" msgid "printer-state-reasons.make-envelope-thermistor-failure" msgstr "Make Envelope Thermistor Failure" msgid "printer-state-reasons.make-envelope-timing-failure" msgstr "Make Envelope Timing Failure" msgid "printer-state-reasons.make-envelope-turned-off" msgstr "Make Envelope Turned Off" msgid "printer-state-reasons.make-envelope-turned-on" msgstr "Make Envelope Turned On" msgid "printer-state-reasons.make-envelope-under-temperature" msgstr "Make Envelope Under Temperature" msgid "printer-state-reasons.make-envelope-unrecoverable-failure" msgstr "Make Envelope Unrecoverable Failure" msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error" msgstr "Make Envelope Unrecoverable Storage Error" msgid "printer-state-reasons.make-envelope-warming-up" msgstr "Make Envelope Warming Up" msgid "printer-state-reasons.marker-adjusting-print-quality" msgstr "Marker Adjusting Print Quality" msgid "printer-state-reasons.marker-developer-almost-empty" msgstr "Marker Developer Almost Empty" msgid "printer-state-reasons.marker-developer-empty" msgstr "Marker Developer Empty" msgid "printer-state-reasons.marker-fuser-thermistor-failure" msgstr "Marker Fuser Thermistor Failure" msgid "printer-state-reasons.marker-fuser-timing-failure" msgstr "Marker Fuser Timing Failure" msgid "printer-state-reasons.marker-ink-almost-empty" msgstr "Marker Ink Almost Empty" msgid "printer-state-reasons.marker-ink-empty" msgstr "Marker Ink Empty" msgid "printer-state-reasons.marker-print-ribbon-almost-empty" msgstr "Marker Print Ribbon Almost Empty" msgid "printer-state-reasons.marker-print-ribbon-empty" msgstr "Marker Print Ribbon Empty" msgid "printer-state-reasons.marker-supply-empty" msgstr "Marker Supply Empty" msgid "printer-state-reasons.marker-supply-low" msgstr "Marker Supply Low" msgid "printer-state-reasons.marker-toner-cartridge-missing" msgstr "Marker Toner Cartridge Missing" msgid "printer-state-reasons.marker-waste-almost-full" msgstr "Marker Waste Almost Full" msgid "printer-state-reasons.marker-waste-full" msgstr "Marker Waste Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full" msgstr "Marker Waste Ink Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-full" msgstr "Marker Waste Ink Receptacle Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full" msgstr "Marker Waste Toner Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-full" msgstr "Marker Waste Toner Receptacle Full" msgid "printer-state-reasons.material-empty" msgstr "Material Empty" msgid "printer-state-reasons.material-low" msgstr "Material Low" msgid "printer-state-reasons.material-needed" msgstr "Material Needed" msgid "printer-state-reasons.media-empty" msgstr "Media Empty" msgid "printer-state-reasons.media-jam" msgstr "Media Jam" msgid "printer-state-reasons.media-low" msgstr "Media Low" msgid "printer-state-reasons.media-needed" msgstr "Media Needed" msgid "printer-state-reasons.media-path-cannot-duplex-media-selected" msgstr "Media Path Cannot Duplex Media Selected" msgid "printer-state-reasons.media-path-media-tray-almost-full" msgstr "Media Path Media Tray Almost Full" msgid "printer-state-reasons.media-path-media-tray-full" msgstr "Media Path Media Tray Full" msgid "printer-state-reasons.media-path-media-tray-missing" msgstr "Media Path Media Tray Missing" msgid "printer-state-reasons.motor-failure" msgstr "Motor Failure" msgid "printer-state-reasons.moving-to-paused" msgstr "Moving To Paused" msgid "printer-state-reasons.none" msgstr "None" msgid "printer-state-reasons.opc-life-over" msgstr "Opc Life Over" msgid "printer-state-reasons.opc-near-eol" msgstr "Opc Near Eol" msgid "printer-state-reasons.other" msgstr "Other" msgid "printer-state-reasons.output-area-almost-full" msgstr "Output Area Almost Full" msgid "printer-state-reasons.output-area-full" msgstr "Output Area Full" msgid "printer-state-reasons.output-mailbox-select-failure" msgstr "Output Mailbox Select Failure" msgid "printer-state-reasons.output-tray-missing" msgstr "Output Tray Missing" msgid "printer-state-reasons.paused" msgstr "Paused" msgid "printer-state-reasons.perforater-added" msgstr "Perforater Added" msgid "printer-state-reasons.perforater-almost-empty" msgstr "Perforater Almost Empty" msgid "printer-state-reasons.perforater-almost-full" msgstr "Perforater Almost Full" msgid "printer-state-reasons.perforater-at-limit" msgstr "Perforater At Limit" msgid "printer-state-reasons.perforater-closed" msgstr "Perforater Closed" msgid "printer-state-reasons.perforater-configuration-change" msgstr "Perforater Configuration Change" msgid "printer-state-reasons.perforater-cover-closed" msgstr "Perforater Cover Closed" msgid "printer-state-reasons.perforater-cover-open" msgstr "Perforater Cover Open" msgid "printer-state-reasons.perforater-empty" msgstr "Perforater Empty" msgid "printer-state-reasons.perforater-full" msgstr "Perforater Full" msgid "printer-state-reasons.perforater-interlock-closed" msgstr "Perforater Interlock Closed" msgid "printer-state-reasons.perforater-interlock-open" msgstr "Perforater Interlock Open" msgid "printer-state-reasons.perforater-jam" msgstr "Perforater Jam" msgid "printer-state-reasons.perforater-life-almost-over" msgstr "Perforater Life Almost Over" msgid "printer-state-reasons.perforater-life-over" msgstr "Perforater Life Over" msgid "printer-state-reasons.perforater-memory-exhausted" msgstr "Perforater Memory Exhausted" msgid "printer-state-reasons.perforater-missing" msgstr "Perforater Missing" msgid "printer-state-reasons.perforater-motor-failure" msgstr "Perforater Motor Failure" msgid "printer-state-reasons.perforater-near-limit" msgstr "Perforater Near Limit" msgid "printer-state-reasons.perforater-offline" msgstr "Perforater Offline" msgid "printer-state-reasons.perforater-opened" msgstr "Perforater Opened" msgid "printer-state-reasons.perforater-over-temperature" msgstr "Perforater Over Temperature" msgid "printer-state-reasons.perforater-power-saver" msgstr "Perforater Power Saver" msgid "printer-state-reasons.perforater-recoverable-failure" msgstr "Perforater Recoverable Failure" msgid "printer-state-reasons.perforater-recoverable-storage" msgstr "Perforater Recoverable Storage" msgid "printer-state-reasons.perforater-removed" msgstr "Perforater Removed" msgid "printer-state-reasons.perforater-resource-added" msgstr "Perforater Resource Added" msgid "printer-state-reasons.perforater-resource-removed" msgstr "Perforater Resource Removed" msgid "printer-state-reasons.perforater-thermistor-failure" msgstr "Perforater Thermistor Failure" msgid "printer-state-reasons.perforater-timing-failure" msgstr "Perforater Timing Failure" msgid "printer-state-reasons.perforater-turned-off" msgstr "Perforater Turned Off" msgid "printer-state-reasons.perforater-turned-on" msgstr "Perforater Turned On" msgid "printer-state-reasons.perforater-under-temperature" msgstr "Perforater Under Temperature" msgid "printer-state-reasons.perforater-unrecoverable-failure" msgstr "Perforater Unrecoverable Failure" msgid "printer-state-reasons.perforater-unrecoverable-storage-error" msgstr "Perforater Unrecoverable Storage Error" msgid "printer-state-reasons.perforater-warming-up" msgstr "Perforater Warming Up" msgid "printer-state-reasons.power-down" msgstr "Power Down" msgid "printer-state-reasons.power-up" msgstr "Power Up" msgid "printer-state-reasons.printer-manual-reset" msgstr "Printer Manual Reset" msgid "printer-state-reasons.printer-nms-reset" msgstr "Printer Nms Reset" msgid "printer-state-reasons.printer-ready-to-print" msgstr "Printer Ready To Print" msgid "printer-state-reasons.puncher-added" msgstr "Puncher Added" msgid "printer-state-reasons.puncher-almost-empty" msgstr "Puncher Almost Empty" msgid "printer-state-reasons.puncher-almost-full" msgstr "Puncher Almost Full" msgid "printer-state-reasons.puncher-at-limit" msgstr "Puncher At Limit" msgid "printer-state-reasons.puncher-closed" msgstr "Puncher Closed" msgid "printer-state-reasons.puncher-configuration-change" msgstr "Puncher Configuration Change" msgid "printer-state-reasons.puncher-cover-closed" msgstr "Puncher Cover Closed" msgid "printer-state-reasons.puncher-cover-open" msgstr "Puncher Cover Open" msgid "printer-state-reasons.puncher-empty" msgstr "Puncher Empty" msgid "printer-state-reasons.puncher-full" msgstr "Puncher Full" msgid "printer-state-reasons.puncher-interlock-closed" msgstr "Puncher Interlock Closed" msgid "printer-state-reasons.puncher-interlock-open" msgstr "Puncher Interlock Open" msgid "printer-state-reasons.puncher-jam" msgstr "Puncher Jam" msgid "printer-state-reasons.puncher-life-almost-over" msgstr "Puncher Life Almost Over" msgid "printer-state-reasons.puncher-life-over" msgstr "Puncher Life Over" msgid "printer-state-reasons.puncher-memory-exhausted" msgstr "Puncher Memory Exhausted" msgid "printer-state-reasons.puncher-missing" msgstr "Puncher Missing" msgid "printer-state-reasons.puncher-motor-failure" msgstr "Puncher Motor Failure" msgid "printer-state-reasons.puncher-near-limit" msgstr "Puncher Near Limit" msgid "printer-state-reasons.puncher-offline" msgstr "Puncher Offline" msgid "printer-state-reasons.puncher-opened" msgstr "Puncher Opened" msgid "printer-state-reasons.puncher-over-temperature" msgstr "Puncher Over Temperature" msgid "printer-state-reasons.puncher-power-saver" msgstr "Puncher Power Saver" msgid "printer-state-reasons.puncher-recoverable-failure" msgstr "Puncher Recoverable Failure" msgid "printer-state-reasons.puncher-recoverable-storage" msgstr "Puncher Recoverable Storage" msgid "printer-state-reasons.puncher-removed" msgstr "Puncher Removed" msgid "printer-state-reasons.puncher-resource-added" msgstr "Puncher Resource Added" msgid "printer-state-reasons.puncher-resource-removed" msgstr "Puncher Resource Removed" msgid "printer-state-reasons.puncher-thermistor-failure" msgstr "Puncher Thermistor Failure" msgid "printer-state-reasons.puncher-timing-failure" msgstr "Puncher Timing Failure" msgid "printer-state-reasons.puncher-turned-off" msgstr "Puncher Turned Off" msgid "printer-state-reasons.puncher-turned-on" msgstr "Puncher Turned On" msgid "printer-state-reasons.puncher-under-temperature" msgstr "Puncher Under Temperature" msgid "printer-state-reasons.puncher-unrecoverable-failure" msgstr "Puncher Unrecoverable Failure" msgid "printer-state-reasons.puncher-unrecoverable-storage-error" msgstr "Puncher Unrecoverable Storage Error" msgid "printer-state-reasons.puncher-warming-up" msgstr "Puncher Warming Up" msgid "printer-state-reasons.separation-cutter-added" msgstr "Separation Cutter Added" msgid "printer-state-reasons.separation-cutter-almost-empty" msgstr "Separation Cutter Almost Empty" msgid "printer-state-reasons.separation-cutter-almost-full" msgstr "Separation Cutter Almost Full" msgid "printer-state-reasons.separation-cutter-at-limit" msgstr "Separation Cutter At Limit" msgid "printer-state-reasons.separation-cutter-closed" msgstr "Separation Cutter Closed" msgid "printer-state-reasons.separation-cutter-configuration-change" msgstr "Separation Cutter Configuration Change" msgid "printer-state-reasons.separation-cutter-cover-closed" msgstr "Separation Cutter Cover Closed" msgid "printer-state-reasons.separation-cutter-cover-open" msgstr "Separation Cutter Cover Open" msgid "printer-state-reasons.separation-cutter-empty" msgstr "Separation Cutter Empty" msgid "printer-state-reasons.separation-cutter-full" msgstr "Separation Cutter Full" msgid "printer-state-reasons.separation-cutter-interlock-closed" msgstr "Separation Cutter Interlock Closed" msgid "printer-state-reasons.separation-cutter-interlock-open" msgstr "Separation Cutter Interlock Open" msgid "printer-state-reasons.separation-cutter-jam" msgstr "Separation Cutter Jam" msgid "printer-state-reasons.separation-cutter-life-almost-over" msgstr "Separation Cutter Life Almost Over" msgid "printer-state-reasons.separation-cutter-life-over" msgstr "Separation Cutter Life Over" msgid "printer-state-reasons.separation-cutter-memory-exhausted" msgstr "Separation Cutter Memory Exhausted" msgid "printer-state-reasons.separation-cutter-missing" msgstr "Separation Cutter Missing" msgid "printer-state-reasons.separation-cutter-motor-failure" msgstr "Separation Cutter Motor Failure" msgid "printer-state-reasons.separation-cutter-near-limit" msgstr "Separation Cutter Near Limit" msgid "printer-state-reasons.separation-cutter-offline" msgstr "Separation Cutter Offline" msgid "printer-state-reasons.separation-cutter-opened" msgstr "Separation Cutter Opened" msgid "printer-state-reasons.separation-cutter-over-temperature" msgstr "Separation Cutter Over Temperature" msgid "printer-state-reasons.separation-cutter-power-saver" msgstr "Separation Cutter Power Saver" msgid "printer-state-reasons.separation-cutter-recoverable-failure" msgstr "Separation Cutter Recoverable Failure" msgid "printer-state-reasons.separation-cutter-recoverable-storage" msgstr "Separation Cutter Recoverable Storage" msgid "printer-state-reasons.separation-cutter-removed" msgstr "Separation Cutter Removed" msgid "printer-state-reasons.separation-cutter-resource-added" msgstr "Separation Cutter Resource Added" msgid "printer-state-reasons.separation-cutter-resource-removed" msgstr "Separation Cutter Resource Removed" msgid "printer-state-reasons.separation-cutter-thermistor-failure" msgstr "Separation Cutter Thermistor Failure" msgid "printer-state-reasons.separation-cutter-timing-failure" msgstr "Separation Cutter Timing Failure" msgid "printer-state-reasons.separation-cutter-turned-off" msgstr "Separation Cutter Turned Off" msgid "printer-state-reasons.separation-cutter-turned-on" msgstr "Separation Cutter Turned On" msgid "printer-state-reasons.separation-cutter-under-temperature" msgstr "Separation Cutter Under Temperature" msgid "printer-state-reasons.separation-cutter-unrecoverable-failure" msgstr "Separation Cutter Unrecoverable Failure" msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error" msgstr "Separation Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.separation-cutter-warming-up" msgstr "Separation Cutter Warming Up" msgid "printer-state-reasons.sheet-rotator-added" msgstr "Sheet Rotator Added" msgid "printer-state-reasons.sheet-rotator-almost-empty" msgstr "Sheet Rotator Almost Empty" msgid "printer-state-reasons.sheet-rotator-almost-full" msgstr "Sheet Rotator Almost Full" msgid "printer-state-reasons.sheet-rotator-at-limit" msgstr "Sheet Rotator At Limit" msgid "printer-state-reasons.sheet-rotator-closed" msgstr "Sheet Rotator Closed" msgid "printer-state-reasons.sheet-rotator-configuration-change" msgstr "Sheet Rotator Configuration Change" msgid "printer-state-reasons.sheet-rotator-cover-closed" msgstr "Sheet Rotator Cover Closed" msgid "printer-state-reasons.sheet-rotator-cover-open" msgstr "Sheet Rotator Cover Open" msgid "printer-state-reasons.sheet-rotator-empty" msgstr "Sheet Rotator Empty" msgid "printer-state-reasons.sheet-rotator-full" msgstr "Sheet Rotator Full" msgid "printer-state-reasons.sheet-rotator-interlock-closed" msgstr "Sheet Rotator Interlock Closed" msgid "printer-state-reasons.sheet-rotator-interlock-open" msgstr "Sheet Rotator Interlock Open" msgid "printer-state-reasons.sheet-rotator-jam" msgstr "Sheet Rotator Jam" msgid "printer-state-reasons.sheet-rotator-life-almost-over" msgstr "Sheet Rotator Life Almost Over" msgid "printer-state-reasons.sheet-rotator-life-over" msgstr "Sheet Rotator Life Over" msgid "printer-state-reasons.sheet-rotator-memory-exhausted" msgstr "Sheet Rotator Memory Exhausted" msgid "printer-state-reasons.sheet-rotator-missing" msgstr "Sheet Rotator Missing" msgid "printer-state-reasons.sheet-rotator-motor-failure" msgstr "Sheet Rotator Motor Failure" msgid "printer-state-reasons.sheet-rotator-near-limit" msgstr "Sheet Rotator Near Limit" msgid "printer-state-reasons.sheet-rotator-offline" msgstr "Sheet Rotator Offline" msgid "printer-state-reasons.sheet-rotator-opened" msgstr "Sheet Rotator Opened" msgid "printer-state-reasons.sheet-rotator-over-temperature" msgstr "Sheet Rotator Over Temperature" msgid "printer-state-reasons.sheet-rotator-power-saver" msgstr "Sheet Rotator Power Saver" msgid "printer-state-reasons.sheet-rotator-recoverable-failure" msgstr "Sheet Rotator Recoverable Failure" msgid "printer-state-reasons.sheet-rotator-recoverable-storage" msgstr "Sheet Rotator Recoverable Storage" msgid "printer-state-reasons.sheet-rotator-removed" msgstr "Sheet Rotator Removed" msgid "printer-state-reasons.sheet-rotator-resource-added" msgstr "Sheet Rotator Resource Added" msgid "printer-state-reasons.sheet-rotator-resource-removed" msgstr "Sheet Rotator Resource Removed" msgid "printer-state-reasons.sheet-rotator-thermistor-failure" msgstr "Sheet Rotator Thermistor Failure" msgid "printer-state-reasons.sheet-rotator-timing-failure" msgstr "Sheet Rotator Timing Failure" msgid "printer-state-reasons.sheet-rotator-turned-off" msgstr "Sheet Rotator Turned Off" msgid "printer-state-reasons.sheet-rotator-turned-on" msgstr "Sheet Rotator Turned On" msgid "printer-state-reasons.sheet-rotator-under-temperature" msgstr "Sheet Rotator Under Temperature" msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure" msgstr "Sheet Rotator Unrecoverable Failure" msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" msgstr "Sheet Rotator Unrecoverable Storage Error" msgid "printer-state-reasons.sheet-rotator-warming-up" msgstr "Sheet Rotator Warming Up" msgid "printer-state-reasons.shutdown" msgstr "Shutdown" msgid "printer-state-reasons.slitter-added" msgstr "Slitter Added" msgid "printer-state-reasons.slitter-almost-empty" msgstr "Slitter Almost Empty" msgid "printer-state-reasons.slitter-almost-full" msgstr "Slitter Almost Full" msgid "printer-state-reasons.slitter-at-limit" msgstr "Slitter At Limit" msgid "printer-state-reasons.slitter-closed" msgstr "Slitter Closed" msgid "printer-state-reasons.slitter-configuration-change" msgstr "Slitter Configuration Change" msgid "printer-state-reasons.slitter-cover-closed" msgstr "Slitter Cover Closed" msgid "printer-state-reasons.slitter-cover-open" msgstr "Slitter Cover Open" msgid "printer-state-reasons.slitter-empty" msgstr "Slitter Empty" msgid "printer-state-reasons.slitter-full" msgstr "Slitter Full" msgid "printer-state-reasons.slitter-interlock-closed" msgstr "Slitter Interlock Closed" msgid "printer-state-reasons.slitter-interlock-open" msgstr "Slitter Interlock Open" msgid "printer-state-reasons.slitter-jam" msgstr "Slitter Jam" msgid "printer-state-reasons.slitter-life-almost-over" msgstr "Slitter Life Almost Over" msgid "printer-state-reasons.slitter-life-over" msgstr "Slitter Life Over" msgid "printer-state-reasons.slitter-memory-exhausted" msgstr "Slitter Memory Exhausted" msgid "printer-state-reasons.slitter-missing" msgstr "Slitter Missing" msgid "printer-state-reasons.slitter-motor-failure" msgstr "Slitter Motor Failure" msgid "printer-state-reasons.slitter-near-limit" msgstr "Slitter Near Limit" msgid "printer-state-reasons.slitter-offline" msgstr "Slitter Offline" msgid "printer-state-reasons.slitter-opened" msgstr "Slitter Opened" msgid "printer-state-reasons.slitter-over-temperature" msgstr "Slitter Over Temperature" msgid "printer-state-reasons.slitter-power-saver" msgstr "Slitter Power Saver" msgid "printer-state-reasons.slitter-recoverable-failure" msgstr "Slitter Recoverable Failure" msgid "printer-state-reasons.slitter-recoverable-storage" msgstr "Slitter Recoverable Storage" msgid "printer-state-reasons.slitter-removed" msgstr "Slitter Removed" msgid "printer-state-reasons.slitter-resource-added" msgstr "Slitter Resource Added" msgid "printer-state-reasons.slitter-resource-removed" msgstr "Slitter Resource Removed" msgid "printer-state-reasons.slitter-thermistor-failure" msgstr "Slitter Thermistor Failure" msgid "printer-state-reasons.slitter-timing-failure" msgstr "Slitter Timing Failure" msgid "printer-state-reasons.slitter-turned-off" msgstr "Slitter Turned Off" msgid "printer-state-reasons.slitter-turned-on" msgstr "Slitter Turned On" msgid "printer-state-reasons.slitter-under-temperature" msgstr "Slitter Under Temperature" msgid "printer-state-reasons.slitter-unrecoverable-failure" msgstr "Slitter Unrecoverable Failure" msgid "printer-state-reasons.slitter-unrecoverable-storage-error" msgstr "Slitter Unrecoverable Storage Error" msgid "printer-state-reasons.slitter-warming-up" msgstr "Slitter Warming Up" msgid "printer-state-reasons.spool-area-full" msgstr "Spool Area Full" msgid "printer-state-reasons.stacker-added" msgstr "Stacker Added" msgid "printer-state-reasons.stacker-almost-empty" msgstr "Stacker Almost Empty" msgid "printer-state-reasons.stacker-almost-full" msgstr "Stacker Almost Full" msgid "printer-state-reasons.stacker-at-limit" msgstr "Stacker At Limit" msgid "printer-state-reasons.stacker-closed" msgstr "Stacker Closed" msgid "printer-state-reasons.stacker-configuration-change" msgstr "Stacker Configuration Change" msgid "printer-state-reasons.stacker-cover-closed" msgstr "Stacker Cover Closed" msgid "printer-state-reasons.stacker-cover-open" msgstr "Stacker Cover Open" msgid "printer-state-reasons.stacker-empty" msgstr "Stacker Empty" msgid "printer-state-reasons.stacker-full" msgstr "Stacker Full" msgid "printer-state-reasons.stacker-interlock-closed" msgstr "Stacker Interlock Closed" msgid "printer-state-reasons.stacker-interlock-open" msgstr "Stacker Interlock Open" msgid "printer-state-reasons.stacker-jam" msgstr "Stacker Jam" msgid "printer-state-reasons.stacker-life-almost-over" msgstr "Stacker Life Almost Over" msgid "printer-state-reasons.stacker-life-over" msgstr "Stacker Life Over" msgid "printer-state-reasons.stacker-memory-exhausted" msgstr "Stacker Memory Exhausted" msgid "printer-state-reasons.stacker-missing" msgstr "Stacker Missing" msgid "printer-state-reasons.stacker-motor-failure" msgstr "Stacker Motor Failure" msgid "printer-state-reasons.stacker-near-limit" msgstr "Stacker Near Limit" msgid "printer-state-reasons.stacker-offline" msgstr "Stacker Offline" msgid "printer-state-reasons.stacker-opened" msgstr "Stacker Opened" msgid "printer-state-reasons.stacker-over-temperature" msgstr "Stacker Over Temperature" msgid "printer-state-reasons.stacker-power-saver" msgstr "Stacker Power Saver" msgid "printer-state-reasons.stacker-recoverable-failure" msgstr "Stacker Recoverable Failure" msgid "printer-state-reasons.stacker-recoverable-storage" msgstr "Stacker Recoverable Storage" msgid "printer-state-reasons.stacker-removed" msgstr "Stacker Removed" msgid "printer-state-reasons.stacker-resource-added" msgstr "Stacker Resource Added" msgid "printer-state-reasons.stacker-resource-removed" msgstr "Stacker Resource Removed" msgid "printer-state-reasons.stacker-thermistor-failure" msgstr "Stacker Thermistor Failure" msgid "printer-state-reasons.stacker-timing-failure" msgstr "Stacker Timing Failure" msgid "printer-state-reasons.stacker-turned-off" msgstr "Stacker Turned Off" msgid "printer-state-reasons.stacker-turned-on" msgstr "Stacker Turned On" msgid "printer-state-reasons.stacker-under-temperature" msgstr "Stacker Under Temperature" msgid "printer-state-reasons.stacker-unrecoverable-failure" msgstr "Stacker Unrecoverable Failure" msgid "printer-state-reasons.stacker-unrecoverable-storage-error" msgstr "Stacker Unrecoverable Storage Error" msgid "printer-state-reasons.stacker-warming-up" msgstr "Stacker Warming Up" msgid "printer-state-reasons.stapler-added" msgstr "Stapler Added" msgid "printer-state-reasons.stapler-almost-empty" msgstr "Stapler Almost Empty" msgid "printer-state-reasons.stapler-almost-full" msgstr "Stapler Almost Full" msgid "printer-state-reasons.stapler-at-limit" msgstr "Stapler At Limit" msgid "printer-state-reasons.stapler-closed" msgstr "Stapler Closed" msgid "printer-state-reasons.stapler-configuration-change" msgstr "Stapler Configuration Change" msgid "printer-state-reasons.stapler-cover-closed" msgstr "Stapler Cover Closed" msgid "printer-state-reasons.stapler-cover-open" msgstr "Stapler Cover Open" msgid "printer-state-reasons.stapler-empty" msgstr "Stapler Empty" msgid "printer-state-reasons.stapler-full" msgstr "Stapler Full" msgid "printer-state-reasons.stapler-interlock-closed" msgstr "Stapler Interlock Closed" msgid "printer-state-reasons.stapler-interlock-open" msgstr "Stapler Interlock Open" msgid "printer-state-reasons.stapler-jam" msgstr "Stapler Jam" msgid "printer-state-reasons.stapler-life-almost-over" msgstr "Stapler Life Almost Over" msgid "printer-state-reasons.stapler-life-over" msgstr "Stapler Life Over" msgid "printer-state-reasons.stapler-memory-exhausted" msgstr "Stapler Memory Exhausted" msgid "printer-state-reasons.stapler-missing" msgstr "Stapler Missing" msgid "printer-state-reasons.stapler-motor-failure" msgstr "Stapler Motor Failure" msgid "printer-state-reasons.stapler-near-limit" msgstr "Stapler Near Limit" msgid "printer-state-reasons.stapler-offline" msgstr "Stapler Offline" msgid "printer-state-reasons.stapler-opened" msgstr "Stapler Opened" msgid "printer-state-reasons.stapler-over-temperature" msgstr "Stapler Over Temperature" msgid "printer-state-reasons.stapler-power-saver" msgstr "Stapler Power Saver" msgid "printer-state-reasons.stapler-recoverable-failure" msgstr "Stapler Recoverable Failure" msgid "printer-state-reasons.stapler-recoverable-storage" msgstr "Stapler Recoverable Storage" msgid "printer-state-reasons.stapler-removed" msgstr "Stapler Removed" msgid "printer-state-reasons.stapler-resource-added" msgstr "Stapler Resource Added" msgid "printer-state-reasons.stapler-resource-removed" msgstr "Stapler Resource Removed" msgid "printer-state-reasons.stapler-thermistor-failure" msgstr "Stapler Thermistor Failure" msgid "printer-state-reasons.stapler-timing-failure" msgstr "Stapler Timing Failure" msgid "printer-state-reasons.stapler-turned-off" msgstr "Stapler Turned Off" msgid "printer-state-reasons.stapler-turned-on" msgstr "Stapler Turned On" msgid "printer-state-reasons.stapler-under-temperature" msgstr "Stapler Under Temperature" msgid "printer-state-reasons.stapler-unrecoverable-failure" msgstr "Stapler Unrecoverable Failure" msgid "printer-state-reasons.stapler-unrecoverable-storage-error" msgstr "Stapler Unrecoverable Storage Error" msgid "printer-state-reasons.stapler-warming-up" msgstr "Stapler Warming Up" msgid "printer-state-reasons.stitcher-added" msgstr "Stitcher Added" msgid "printer-state-reasons.stitcher-almost-empty" msgstr "Stitcher Almost Empty" msgid "printer-state-reasons.stitcher-almost-full" msgstr "Stitcher Almost Full" msgid "printer-state-reasons.stitcher-at-limit" msgstr "Stitcher At Limit" msgid "printer-state-reasons.stitcher-closed" msgstr "Stitcher Closed" msgid "printer-state-reasons.stitcher-configuration-change" msgstr "Stitcher Configuration Change" msgid "printer-state-reasons.stitcher-cover-closed" msgstr "Stitcher Cover Closed" msgid "printer-state-reasons.stitcher-cover-open" msgstr "Stitcher Cover Open" msgid "printer-state-reasons.stitcher-empty" msgstr "Stitcher Empty" msgid "printer-state-reasons.stitcher-full" msgstr "Stitcher Full" msgid "printer-state-reasons.stitcher-interlock-closed" msgstr "Stitcher Interlock Closed" msgid "printer-state-reasons.stitcher-interlock-open" msgstr "Stitcher Interlock Open" msgid "printer-state-reasons.stitcher-jam" msgstr "Stitcher Jam" msgid "printer-state-reasons.stitcher-life-almost-over" msgstr "Stitcher Life Almost Over" msgid "printer-state-reasons.stitcher-life-over" msgstr "Stitcher Life Over" msgid "printer-state-reasons.stitcher-memory-exhausted" msgstr "Stitcher Memory Exhausted" msgid "printer-state-reasons.stitcher-missing" msgstr "Stitcher Missing" msgid "printer-state-reasons.stitcher-motor-failure" msgstr "Stitcher Motor Failure" msgid "printer-state-reasons.stitcher-near-limit" msgstr "Stitcher Near Limit" msgid "printer-state-reasons.stitcher-offline" msgstr "Stitcher Offline" msgid "printer-state-reasons.stitcher-opened" msgstr "Stitcher Opened" msgid "printer-state-reasons.stitcher-over-temperature" msgstr "Stitcher Over Temperature" msgid "printer-state-reasons.stitcher-power-saver" msgstr "Stitcher Power Saver" msgid "printer-state-reasons.stitcher-recoverable-failure" msgstr "Stitcher Recoverable Failure" msgid "printer-state-reasons.stitcher-recoverable-storage" msgstr "Stitcher Recoverable Storage" msgid "printer-state-reasons.stitcher-removed" msgstr "Stitcher Removed" msgid "printer-state-reasons.stitcher-resource-added" msgstr "Stitcher Resource Added" msgid "printer-state-reasons.stitcher-resource-removed" msgstr "Stitcher Resource Removed" msgid "printer-state-reasons.stitcher-thermistor-failure" msgstr "Stitcher Thermistor Failure" msgid "printer-state-reasons.stitcher-timing-failure" msgstr "Stitcher Timing Failure" msgid "printer-state-reasons.stitcher-turned-off" msgstr "Stitcher Turned Off" msgid "printer-state-reasons.stitcher-turned-on" msgstr "Stitcher Turned On" msgid "printer-state-reasons.stitcher-under-temperature" msgstr "Stitcher Under Temperature" msgid "printer-state-reasons.stitcher-unrecoverable-failure" msgstr "Stitcher Unrecoverable Failure" msgid "printer-state-reasons.stitcher-unrecoverable-storage-error" msgstr "Stitcher Unrecoverable Storage Error" msgid "printer-state-reasons.stitcher-warming-up" msgstr "Stitcher Warming Up" msgid "printer-state-reasons.stopped-partly" msgstr "Stopped Partly" msgid "printer-state-reasons.stopping" msgstr "Stopping" msgid "printer-state-reasons.subunit-added" msgstr "Subunit Added" msgid "printer-state-reasons.subunit-almost-empty" msgstr "Subunit Almost Empty" msgid "printer-state-reasons.subunit-almost-full" msgstr "Subunit Almost Full" msgid "printer-state-reasons.subunit-at-limit" msgstr "Subunit At Limit" msgid "printer-state-reasons.subunit-closed" msgstr "Subunit Closed" msgid "printer-state-reasons.subunit-empty" msgstr "Subunit Empty" msgid "printer-state-reasons.subunit-full" msgstr "Subunit Full" msgid "printer-state-reasons.subunit-life-almost-over" msgstr "Subunit Life Almost Over" msgid "printer-state-reasons.subunit-life-over" msgstr "Subunit Life Over" msgid "printer-state-reasons.subunit-memory-exhausted" msgstr "Subunit Memory Exhausted" msgid "printer-state-reasons.subunit-missing" msgstr "Subunit Missing" msgid "printer-state-reasons.subunit-motor-failure" msgstr "Subunit Motor Failure" msgid "printer-state-reasons.subunit-near-limit" msgstr "Subunit Near Limit" msgid "printer-state-reasons.subunit-offline" msgstr "Subunit Offline" msgid "printer-state-reasons.subunit-opened" msgstr "Subunit Opened" msgid "printer-state-reasons.subunit-over-temperature" msgstr "Subunit Over Temperature" msgid "printer-state-reasons.subunit-power-saver" msgstr "Subunit Power Saver" msgid "printer-state-reasons.subunit-recoverable-failure" msgstr "Subunit Recoverable Failure" msgid "printer-state-reasons.subunit-recoverable-storage" msgstr "Subunit Recoverable Storage" msgid "printer-state-reasons.subunit-removed" msgstr "Subunit Removed" msgid "printer-state-reasons.subunit-resource-added" msgstr "Subunit Resource Added" msgid "printer-state-reasons.subunit-resource-removed" msgstr "Subunit Resource Removed" msgid "printer-state-reasons.subunit-thermistor-failure" msgstr "Subunit Thermistor Failure" msgid "printer-state-reasons.subunit-timing-Failure" msgstr "Subunit Timing Failure" msgid "printer-state-reasons.subunit-turned-off" msgstr "Subunit Turned Off" msgid "printer-state-reasons.subunit-turned-on" msgstr "Subunit Turned On" msgid "printer-state-reasons.subunit-under-temperature" msgstr "Subunit Under Temperature" msgid "printer-state-reasons.subunit-unrecoverable-failure" msgstr "Subunit Unrecoverable Failure" msgid "printer-state-reasons.subunit-unrecoverable-storage" msgstr "Subunit Unrecoverable Storage" msgid "printer-state-reasons.subunit-warming-up" msgstr "Subunit Warming Up" msgid "printer-state-reasons.timed-out" msgstr "Timed Out" msgid "printer-state-reasons.toner-empty" msgstr "Toner Empty" msgid "printer-state-reasons.toner-low" msgstr "Toner Low" msgid "printer-state-reasons.trimmer-added" msgstr "Trimmer Added" msgid "printer-state-reasons.trimmer-almost-empty" msgstr "Trimmer Almost Empty" msgid "printer-state-reasons.trimmer-almost-full" msgstr "Trimmer Almost Full" msgid "printer-state-reasons.trimmer-at-limit" msgstr "Trimmer At Limit" msgid "printer-state-reasons.trimmer-closed" msgstr "Trimmer Closed" msgid "printer-state-reasons.trimmer-configuration-change" msgstr "Trimmer Configuration Change" msgid "printer-state-reasons.trimmer-cover-closed" msgstr "Trimmer Cover Closed" msgid "printer-state-reasons.trimmer-cover-open" msgstr "Trimmer Cover Open" msgid "printer-state-reasons.trimmer-empty" msgstr "Trimmer Empty" msgid "printer-state-reasons.trimmer-full" msgstr "Trimmer Full" msgid "printer-state-reasons.trimmer-interlock-closed" msgstr "Trimmer Interlock Closed" msgid "printer-state-reasons.trimmer-interlock-open" msgstr "Trimmer Interlock Open" msgid "printer-state-reasons.trimmer-jam" msgstr "Trimmer Jam" msgid "printer-state-reasons.trimmer-life-almost-over" msgstr "Trimmer Life Almost Over" msgid "printer-state-reasons.trimmer-life-over" msgstr "Trimmer Life Over" msgid "printer-state-reasons.trimmer-memory-exhausted" msgstr "Trimmer Memory Exhausted" msgid "printer-state-reasons.trimmer-missing" msgstr "Trimmer Missing" msgid "printer-state-reasons.trimmer-motor-failure" msgstr "Trimmer Motor Failure" msgid "printer-state-reasons.trimmer-near-limit" msgstr "Trimmer Near Limit" msgid "printer-state-reasons.trimmer-offline" msgstr "Trimmer Offline" msgid "printer-state-reasons.trimmer-opened" msgstr "Trimmer Opened" msgid "printer-state-reasons.trimmer-over-temperature" msgstr "Trimmer Over Temperature" msgid "printer-state-reasons.trimmer-power-saver" msgstr "Trimmer Power Saver" msgid "printer-state-reasons.trimmer-recoverable-failure" msgstr "Trimmer Recoverable Failure" msgid "printer-state-reasons.trimmer-recoverable-storage" msgstr "Trimmer Recoverable Storage" msgid "printer-state-reasons.trimmer-removed" msgstr "Trimmer Removed" msgid "printer-state-reasons.trimmer-resource-added" msgstr "Trimmer Resource Added" msgid "printer-state-reasons.trimmer-resource-removed" msgstr "Trimmer Resource Removed" msgid "printer-state-reasons.trimmer-thermistor-failure" msgstr "Trimmer Thermistor Failure" msgid "printer-state-reasons.trimmer-timing-failure" msgstr "Trimmer Timing Failure" msgid "printer-state-reasons.trimmer-turned-off" msgstr "Trimmer Turned Off" msgid "printer-state-reasons.trimmer-turned-on" msgstr "Trimmer Turned On" msgid "printer-state-reasons.trimmer-under-temperature" msgstr "Trimmer Under Temperature" msgid "printer-state-reasons.trimmer-unrecoverable-failure" msgstr "Trimmer Unrecoverable Failure" msgid "printer-state-reasons.trimmer-unrecoverable-storage-error" msgstr "Trimmer Unrecoverable Storage Error" msgid "printer-state-reasons.trimmer-warming-up" msgstr "Trimmer Warming Up" msgid "printer-state-reasons.unknown" msgstr "Unknown" msgid "printer-state-reasons.wrapper-added" msgstr "Wrapper Added" msgid "printer-state-reasons.wrapper-almost-empty" msgstr "Wrapper Almost Empty" msgid "printer-state-reasons.wrapper-almost-full" msgstr "Wrapper Almost Full" msgid "printer-state-reasons.wrapper-at-limit" msgstr "Wrapper At Limit" msgid "printer-state-reasons.wrapper-closed" msgstr "Wrapper Closed" msgid "printer-state-reasons.wrapper-configuration-change" msgstr "Wrapper Configuration Change" msgid "printer-state-reasons.wrapper-cover-closed" msgstr "Wrapper Cover Closed" msgid "printer-state-reasons.wrapper-cover-open" msgstr "Wrapper Cover Open" msgid "printer-state-reasons.wrapper-empty" msgstr "Wrapper Empty" msgid "printer-state-reasons.wrapper-full" msgstr "Wrapper Full" msgid "printer-state-reasons.wrapper-interlock-closed" msgstr "Wrapper Interlock Closed" msgid "printer-state-reasons.wrapper-interlock-open" msgstr "Wrapper Interlock Open" msgid "printer-state-reasons.wrapper-jam" msgstr "Wrapper Jam" msgid "printer-state-reasons.wrapper-life-almost-over" msgstr "Wrapper Life Almost Over" msgid "printer-state-reasons.wrapper-life-over" msgstr "Wrapper Life Over" msgid "printer-state-reasons.wrapper-memory-exhausted" msgstr "Wrapper Memory Exhausted" msgid "printer-state-reasons.wrapper-missing" msgstr "Wrapper Missing" msgid "printer-state-reasons.wrapper-motor-failure" msgstr "Wrapper Motor Failure" msgid "printer-state-reasons.wrapper-near-limit" msgstr "Wrapper Near Limit" msgid "printer-state-reasons.wrapper-offline" msgstr "Wrapper Offline" msgid "printer-state-reasons.wrapper-opened" msgstr "Wrapper Opened" msgid "printer-state-reasons.wrapper-over-temperature" msgstr "Wrapper Over Temperature" msgid "printer-state-reasons.wrapper-power-saver" msgstr "Wrapper Power Saver" msgid "printer-state-reasons.wrapper-recoverable-failure" msgstr "Wrapper Recoverable Failure" msgid "printer-state-reasons.wrapper-recoverable-storage" msgstr "Wrapper Recoverable Storage" msgid "printer-state-reasons.wrapper-removed" msgstr "Wrapper Removed" msgid "printer-state-reasons.wrapper-resource-added" msgstr "Wrapper Resource Added" msgid "printer-state-reasons.wrapper-resource-removed" msgstr "Wrapper Resource Removed" msgid "printer-state-reasons.wrapper-thermistor-failure" msgstr "Wrapper Thermistor Failure" msgid "printer-state-reasons.wrapper-timing-failure" msgstr "Wrapper Timing Failure" msgid "printer-state-reasons.wrapper-turned-off" msgstr "Wrapper Turned Off" msgid "printer-state-reasons.wrapper-turned-on" msgstr "Wrapper Turned On" msgid "printer-state-reasons.wrapper-under-temperature" msgstr "Wrapper Under Temperature" msgid "printer-state-reasons.wrapper-unrecoverable-failure" msgstr "Wrapper Unrecoverable Failure" msgid "printer-state-reasons.wrapper-unrecoverable-storage-error" msgstr "Wrapper Unrecoverable Storage Error" msgid "printer-state-reasons.wrapper-warming-up" msgstr "Wrapper Warming Up" msgid "printer-state.3" msgstr "Idle" msgid "printer-state.4" msgstr "Processing" msgid "printer-state.5" msgstr "Stopped" msgid "printer-up-time" msgstr "Printer Uptime" msgid "processing" msgstr "elaborazione in corso" msgid "proof-print" msgstr "Proof Print" msgid "proof-print-copies" msgstr "Proof Print Copies" msgid "punching" msgstr "Punching" msgid "punching-locations" msgstr "Punching Locations" msgid "punching-offset" msgstr "Punching Offset" msgid "punching-reference-edge" msgstr "Punching Reference Edge" msgid "punching-reference-edge.bottom" msgstr "Bottom" msgid "punching-reference-edge.left" msgstr "Left" msgid "punching-reference-edge.right" msgstr "Right" msgid "punching-reference-edge.top" msgstr "Top" #, c-format msgid "request id is %s-%d (%d file(s))" msgstr "request id è %s-%d (%d file(s))" msgid "request-id uses indefinite length" msgstr "request-id utilizza una lunghezza indefinita" msgid "requested-attributes" msgstr "Requested Attributes" msgid "retry-interval" msgstr "Retry Interval" msgid "retry-time-out" msgstr "Retry Time Out" msgid "save-disposition" msgstr "Save Disposition" msgid "save-disposition.none" msgstr "None" msgid "save-disposition.print-save" msgstr "Print Save" msgid "save-disposition.save-only" msgstr "Save Only" msgid "save-document-format" msgstr "Save Document Format" msgid "save-info" msgstr "Save Info" msgid "save-location" msgstr "Save Location" msgid "save-name" msgstr "Save Name" msgid "scheduler is not running" msgstr "lo scheduler non è in funzione" msgid "scheduler is running" msgstr "lo scheduler è in funzione" msgid "separator-sheets" msgstr "Separator Sheets" msgid "separator-sheets-type" msgstr "Separator Sheets Type" msgid "separator-sheets-type.both-sheets" msgstr "Both Sheets" msgid "separator-sheets-type.end-sheet" msgstr "End Sheet" msgid "separator-sheets-type.none" msgstr "None" msgid "separator-sheets-type.slip-sheets" msgstr "Slip Sheets" msgid "separator-sheets-type.start-sheet" msgstr "Start Sheet" msgid "sheet-collate" msgstr "Collate Copies" msgid "sheet-collate.collated" msgstr "Yes" msgid "sheet-collate.uncollated" msgstr "No" msgid "sides" msgstr "2-Sided Printing" msgid "sides.one-sided" msgstr "Off" msgid "sides.two-sided-long-edge" msgstr "On (Portrait)" msgid "sides.two-sided-short-edge" msgstr "On (Landscape)" #, c-format msgid "stat of %s failed: %s" msgstr "stat di %s non riuscito: %s" msgid "status\t\tShow status of daemon and queue." msgstr "stato\t\tMostra lo stato del demone e della coda." msgid "status-message" msgstr "Status Message" msgid "stitching" msgstr "Staple" msgid "stitching-angle" msgstr "Stitching Angle" msgid "stitching-locations" msgstr "Stitching Locations" msgid "stitching-method" msgstr "Stitching Method" msgid "stitching-method.auto" msgstr "Automatic" msgid "stitching-method.crimp" msgstr "Crimp" msgid "stitching-method.wire" msgstr "Wire" msgid "stitching-offset" msgstr "Stitching Offset" msgid "stitching-reference-edge" msgstr "Stitching Reference Edge" msgid "stitching-reference-edge.bottom" msgstr "Bottom" msgid "stitching-reference-edge.left" msgstr "Left" msgid "stitching-reference-edge.right" msgstr "Right" msgid "stitching-reference-edge.top" msgstr "Top" msgid "stopped" msgstr "fermato" msgid "subject" msgstr "Subject" #, c-format msgid "system default destination: %s" msgstr "destinazione predefinita del sistema: %s" #, c-format msgid "system default destination: %s/%s" msgstr "destinazione predefinita del sistema: %s/%s" msgid "t33-subaddress" msgstr "T33 Subaddress" msgid "to-name" msgstr "To Name" msgid "transmission-status" msgstr "Transmission Status" msgid "transmission-status.3" msgstr "Pending" msgid "transmission-status.4" msgstr "Pending Retry" msgid "transmission-status.5" msgstr "Processing" msgid "transmission-status.7" msgstr "Canceled" msgid "transmission-status.8" msgstr "Aborted" msgid "transmission-status.9" msgstr "Completed" msgid "trimming" msgstr "Cut" msgid "trimming-offset" msgstr "Cut Position" msgid "trimming-reference-edge" msgstr "Trimming Reference Edge" msgid "trimming-reference-edge.bottom" msgstr "Bottom" msgid "trimming-reference-edge.left" msgstr "Left" msgid "trimming-reference-edge.right" msgstr "Right" msgid "trimming-reference-edge.top" msgstr "Top" msgid "trimming-type" msgstr "Trimming Type" msgid "trimming-type.draw-line" msgstr "Draw Line" msgid "trimming-type.full" msgstr "Full" msgid "trimming-type.partial" msgstr "Partial" msgid "trimming-type.perforate" msgstr "Perforate" msgid "trimming-type.score" msgstr "Score" msgid "trimming-type.tab" msgstr "Tab" msgid "trimming-when" msgstr "Trimming When" msgid "trimming-when.after-documents" msgstr "After Documents" msgid "trimming-when.after-job" msgstr "After Job" msgid "trimming-when.after-sets" msgstr "After Sets" msgid "trimming-when.after-sheets" msgstr "After Sheets" msgid "unknown" msgstr "sconosciuto" msgid "untitled" msgstr "senza titolo" msgid "variable-bindings uses indefinite length" msgstr "variable-bindings utilizza una lunghezza indefinita" msgid "x-accuracy" msgstr "X Accuracy" msgid "x-dimension" msgstr "X Dimension" msgid "x-offset" msgstr "X Offset" msgid "x-origin" msgstr "X Origin" msgid "y-accuracy" msgstr "Y Accuracy" msgid "y-dimension" msgstr "Y Dimension" msgid "y-offset" msgstr "Y Offset" msgid "y-origin" msgstr "Y Origin" msgid "z-accuracy" msgstr "Z Accuracy" msgid "z-dimension" msgstr "Z Dimension" msgid "z-offset" msgstr "Z Offset" #~ msgid "\tInterface: %s/interfaces/%s" #~ msgstr "\tInterfaccia: %s/interfacce/%s" #~ msgid " --lf End lines with LF (UNIX/Linux/OS X)." #~ msgstr "" #~ " --lf Termina le righe con LF (UNIX/Linux/OS X)." #~ msgid " -E Test with HTTP Upgrade to TLS." #~ msgstr " -E Prova con l'aggiornamento HTTP a TLS." #~ msgid " -S Test with SSL encryption." #~ msgstr " -S Prova con crittografia SSL." #~ msgid " -a Browse for all services." #~ msgstr " -a Mostra tutti i servizi." #~ msgid " -d domain Browse/resolve in specified domain." #~ msgstr " -d domain Mostra/risolve il dominio specificato." #~ msgid " -l Run cupsd from launchd(8)." #~ msgstr " -l Avvia cupsd da launchd(8)." #~ msgid " -p program Run specified program for each service." #~ msgstr "" #~ " -p program Avvia il programma specificato per ogni " #~ "servizio." #~ msgid " -t type Browse/resolve with specified type." #~ msgstr " -t type Mostra/risolve con il tipo specificato." #~ msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)." #~ msgstr "" #~ "\"%s\": il valore dell'URI non è valido \"%s\" - %s (RFC 2911 sezione " #~ "4.1.5)." #~ msgid "" #~ "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)." #~ msgstr "" #~ "\"%s\": il valore dell'URI non è valido \"%s\" - la lunghezza non è " #~ "valida %d (RFC 2911 sezione 4.1.5)." #~ msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": il nome dell'attributo non è valido - la lunghezza non è valida " #~ "%d (RFC 2911 sezione 4.1.3)." #~ msgid "" #~ "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": il nome dell'attributo non è valido - il carattere non è valido " #~ "(RFC 2911 sezione 4.1.3)." #~ msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)." #~ msgstr "" #~ "\"%s\": il valore booleano non è valido %d (RFC 2911 sezione 4.1.11)." #~ msgid "" #~ "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.7)." #~ msgstr "" #~ "\"%s\": il valore del set dei caratteri non è valido \"%s\" - i caratteri " #~ "non sono validi (RFC 2911 sezione 4.1.7)." #~ msgid "" #~ "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)." #~ msgstr "" #~ "\"%s\": il valore del set dei caratteri non è valido \"%s\" - la " #~ "lunghezza non è valida %d (RFC 2911 sezione 4.1.7)." #~ msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": dateTime UTC non è valido ore %u (RFC 2911 sezione 4.1.14)." #~ msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": dateTime UTC non è valido minuti %u (RFC 2911 sezione 4.1.14)." #~ msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": dateTime UTC non è valido segno '%c' (RFC 2911 sezione 4.1.14)." #~ msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": dateTime non è valido giorno %u (RFC 2911 sezione 4.1.14)." #~ msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": dateTime non è valido decimi di secondi %u (RFC 2911 sezione " #~ "4.1.14)." #~ msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": dateTime non è valido ore %u (RFC 2911 sezione 4.1.14)." #~ msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": dateTime non è valido minuti %u (RFC 2911 sezione 4.1.14)." #~ msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": dateTime non è valido mese %u (RFC 2911 sezione 4.1.14)." #~ msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": dateTime non è valido secondi %u (RFC 2911 sezione 4.1.14)." #~ msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)." #~ msgstr "" #~ "\"%s\": il valore enum non è valido %d - fuori intervallo (RFC 2911 " #~ "sezione 4.1.4)." #~ msgid "" #~ "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": il valore della parola chiave non è valido \"%s\" - la lunghezza " #~ "non è valida %d (RFC 2911 sezione 4.1.3)." #~ msgid "" #~ "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section " #~ "4.1.3)." #~ msgstr "" #~ "\"%s\": il valore della parola chiave non è valido \"%s\" - il carattere " #~ "non è valido (RFC 2911 sezione 4.1.3)." #~ msgid "" #~ "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.9)." #~ msgstr "" #~ "\"%s\": il valore di mimeMediaType non è valido \"%s\" - i caratteri non " #~ "sono validi (RFC 2911 sezione 4.1.9)." #~ msgid "" #~ "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section " #~ "4.1.9)." #~ msgstr "" #~ "\"%s\": il valore di mimeMediaType non è valido \"%s\" - la lunghezza non " #~ "è valida %d (RFC 2911 sezione 4.1.9)." #~ msgid "" #~ "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section " #~ "4.1.2)." #~ msgstr "" #~ "\"%s\": il valore del nome non è valido \"%s\" - la sequenza UTF-8 non è " #~ "valida (RFC 2911 sezione 4.1.2)." #~ msgid "" #~ "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)." #~ msgstr "" #~ "\"%s\": il valore del nome non è valido \"%s\" - la lunghezza non è " #~ "valida %d (RFC 2911 sezione 4.1.2)." #~ msgid "" #~ "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 " #~ "section 4.1.8)." #~ msgstr "" #~ "\"%s\": il valore di naturalLanguage non è valido \"%s\" - i caratteri " #~ "non sono validi (RFC 2911 sezione 4.1.8)." #~ msgid "" #~ "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 " #~ "section 4.1.8)." #~ msgstr "" #~ "\"%s\": il valore di naturalLanguage non è valido \"%s\" - la lunghezza " #~ "non è valida %d (RFC 2911 sezione 4.1.8)." #~ msgid "" #~ "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)." #~ msgstr "" #~ "\"%s\": il valore di octetString non è valido - la lunghezza non è valida " #~ "%d (RFC 2911 sezione 4.1.10)." #~ msgid "" #~ "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC " #~ "2911 section 4.1.13)." #~ msgstr "" #~ "\"%s\": il valore di rangeOfInteger non è valido %d-%d - il più piccolo è " #~ "superiore al più grande (RFC 2911 sezione 4.1.13)." #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section " #~ "4.1.15)." #~ msgstr "" #~ "\"%s\": il valore di resolution non è valido %dx%d%s - il valore " #~ "dell'unità non è valida (RFC 2911 sezione 4.1.15)." #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " #~ "positive (RFC 2911 section 4.1.15)." #~ msgstr "" #~ "\"%s\": il valore della risoluzione non è valido %dx%d%s - la risoluzione " #~ "del feed deve essere positiva (RFC 2911 sezione 4.1.15)." #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive " #~ "(RFC 2911 section 4.1.15)." #~ msgstr "" #~ "\"%s\": il valore della risoluzione non è valido %dx%d%s - la risoluzione " #~ "del feed deve essere positiva (RFC 2911 sezione 4.1.15)." #~ msgid "" #~ "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section " #~ "4.1.1)." #~ msgstr "" #~ "\"%s\": il valore del testo non è valido \"%s\" - la sequenza UTF-8 non è " #~ "valida (RFC 2911 sezione 4.1.1)." #~ msgid "" #~ "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)." #~ msgstr "" #~ "\"%s\": il valore del testo non è valido \"%s\" - la lunghezza non è " #~ "valida %d (RFC 2911 sezione 4.1.1)." #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.6)." #~ msgstr "" #~ "\"%s\": il valore di uriScheme non è valido \"%s\" - i caratteri non sono " #~ "validi (RFC 2911 sezione 4.1.6)." #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section " #~ "4.1.6)." #~ msgstr "" #~ "\"%s\": il valore di uriScheme non è valido \"%s\" - la lunghezza non è " #~ "valida %d (RFC 2911 sezione 4.1.6)." #~ msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes" #~ msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f byte" #~ msgid "720dpi" #~ msgstr "720dpi" #~ msgid "Bad printer URI." #~ msgstr "L'URI della stampante non è valido." #~ msgid "Enter old password:" #~ msgstr "Digitare la vecchia password:" #~ msgid "Enter password again:" #~ msgstr "Digitare di nuovo la password:" #~ msgid "Enter password:" #~ msgstr "Digitare la password:" #~ msgid "Envelope #10 " #~ msgstr "Envelope #10" #~ msgid "Envelope PRC1 " #~ msgstr "Envelope PRC1 " #~ msgid "FanFold German" #~ msgstr "FanFold German" #~ msgid "FanFold Legal German" #~ msgstr "FanFold Legal German" #~ msgid "Fanfold US" #~ msgstr "FanFold US" #~ msgid "File Folder " #~ msgstr "Directory del file" #~ msgid "New Stylus Color Series" #~ msgstr "Nuova Stylus Color Series" #~ msgid "New Stylus Photo Series" #~ msgstr "Nuova Stylus Photo Series" #~ msgid "Output for printer %s is sent to %s" #~ msgstr "L'output della stampante %s è stato inviato a %s" #~ msgid "Output for printer %s is sent to remote printer %s on %s" #~ msgstr "" #~ "L'output della stampante %s è stato inviato alla stampante remota %s su %s" #~ msgid "Output for printer %s/%s is sent to %s" #~ msgstr "L'output della stampante %s/%s è stato inviato a %s" #~ msgid "Output for printer %s/%s is sent to remote printer %s on %s" #~ msgstr "" #~ "L'output della stampante %s/%s è stato inviato alla stampante remota %s " #~ "su %s" #~ msgid "Postcard Double " #~ msgstr "Cartolina doppia " #~ msgid "Printing page %d, %d%% complete." #~ msgstr "Stampa della pagina %d, %d%% completato." #~ msgid "Purge Jobs" #~ msgstr "Elimina le stampe" #~ msgid "" #~ "Rank Owner Pri Job Files Total Size" #~ msgstr "" #~ "Rank Owner Pri Job Files Total Size" #~ msgid "Stylus Color Series" #~ msgstr "Stylus Color Series" #~ msgid "Stylus Photo Series" #~ msgstr "Stylus Photo Series" #~ msgid "" #~ "The '%s' Job Description attribute cannot be supplied in a job creation " #~ "request." #~ msgstr "" #~ "L'attributo della descrizione del processo '%s' non può essere fornito " #~ "nella richiesta di creazione di un processo." #~ msgid "The output bin is almost full." #~ msgstr "Il raccoglitore di uscita è quasi pieno." #~ msgid "The output bin is full." #~ msgstr "Il raccoglitore di uscita è pieno." #~ msgid "The output bin is missing." #~ msgstr "Manca il raccoglitore di uscita." #~ msgid "The paper tray is almost empty." #~ msgstr "Il vassoio della carta è quasi vuoto." #~ msgid "The paper tray is empty." #~ msgstr "Il vassoio della carta è vuoto." #~ msgid "The paper tray is missing." #~ msgstr "Manca il vassoio della carta." #~ msgid "The paper tray needs to be filled." #~ msgstr "Il vassoio della carta deve essere riempito." #~ msgid "The printer is running low on ink." #~ msgstr "L'inchiostro della stampante sta per esaurirsi." #~ msgid "The printer is running low on toner." #~ msgstr "Il toner della stampante sta per esaurirsi." #~ msgid "There is a paper jam." #~ msgstr "Vi è un inceppamento della carta." #~ msgid "Unable to copy interface script - %s" #~ msgstr "Non è possibile copiare lo script dell'interfaccia - %s" #~ msgid "Unable to resolve printer URI." #~ msgstr "Non è possibile risolvere l'URI della stampante." #~ msgid "Usage: cupsfilter [ options ] filename" #~ msgstr "Uso: cupsfilter [ opzioni ] file" #~ msgid "" #~ "Usage: ippdiscover [options] -a\n" #~ " ippdiscover [options] \"service name\"\n" #~ "\n" #~ "Options:" #~ msgstr "" #~ "Uso: ippdiscover [opzioni] -a\n" #~ " ippdiscover [opzioni] \"nome del servizio\"\n" #~ "\n" #~ "Opzioni:" #~ msgid "Usage: lppasswd [-g groupname]" #~ msgstr "Uso: lppasswd [-g groupname]" #~ msgid "" #~ "Usage: lppasswd [-g groupname] [username]\n" #~ " lppasswd [-g groupname] -a [username]\n" #~ " lppasswd [-g groupname] -x [username]" #~ msgstr "" #~ "Uso: lppasswd [-g groupname] [username]\n" #~ " lppasswd [-g groupname] -a [username]\n" #~ " lppasswd [-g groupname] -x [username]" #~ msgid "" #~ "Your password must be at least 6 characters long, cannot contain your " #~ "username, and must contain at least one letter and number." #~ msgstr "" #~ "La password deve contenere almeno 6 caratteri, non può contenere " #~ "l'username e deve contenere almeno una lettera ed un numero." #~ msgid "compression" #~ msgstr "Compression" #~ msgid "compression-accepted" #~ msgstr "Compression Accepted" #~ msgid "compression.compress" #~ msgstr "Compress" #~ msgid "compression.deflate" #~ msgstr "Deflate" #~ msgid "compression.gzip" #~ msgstr "Gzip" #~ msgid "compression.none" #~ msgstr "None" #~ msgid "cupsd: launchd(8) support not compiled in, running in normal mode." #~ msgstr "" #~ "cupsd: launchd(8) non supporta i compilati, quando è in modalità normale." #~ msgid "destination-accesses" #~ msgstr "Destination Accesses" #~ msgid "destination-statuses" #~ msgstr "Destination Statuses" #~ msgid "destination-uris" #~ msgstr "Destination Uris" #~ msgid "document-access" #~ msgstr "Document Access" #~ msgid "document-data-get-interval" #~ msgstr "Document Data Get Interval" #~ msgid "document-data-wait" #~ msgstr "Document Data Wait" #~ msgid "document-format-accepted" #~ msgstr "Document Format Accepted" #~ msgid "document-message" #~ msgstr "Document Message" #~ msgid "document-metadata" #~ msgstr "Document Metadata" #~ msgid "document-name" #~ msgstr "Document Name" #~ msgid "document-number" #~ msgstr "Document Number" #~ msgid "document-password" #~ msgstr "Document Password" #~ msgid "document-preprocessed" #~ msgstr "Document Preprocessed" #~ msgid "fetch-status-message" #~ msgstr "Fetch Status Message" #~ msgid "identify-actions" #~ msgstr "Identify Actions" #~ msgid "identify-actions.display" #~ msgstr "Display" #~ msgid "identify-actions.flash" #~ msgstr "Flash" #~ msgid "identify-actions.sound" #~ msgstr "Sound" #~ msgid "identify-actions.speak" #~ msgstr "Speak" #~ msgid "ipp-attribute-fidelity" #~ msgstr "Attribute Fidelity" #~ msgid "ipptool: \"-i\" and \"-n\" are incompatible with -X\"." #~ msgstr "ipptool: \"-i\" e \"-n\" sono incompatibili con -X\"." #~ msgid "job-authorization-uri" #~ msgstr "Job Authorization URI" #~ msgid "job-destination-spooling-supported.automatic" #~ msgstr "Automatic" #~ msgid "job-destination-spooling-supported.spool" #~ msgstr "Spool" #~ msgid "job-destination-spooling-supported.stream" #~ msgstr "Stream" #~ msgid "job-impressions-col" #~ msgstr "Job Impressions" #~ msgid "job-impressions-estimated" #~ msgstr "Job Impressions Estimated" #~ msgid "job-media-sheets-col" #~ msgstr "Job Media Sheets" #~ msgid "job-pages-per-set" #~ msgstr "Job Pages Per Set" #~ msgid "job-password" #~ msgstr "Job Password" #~ msgid "job-password-repertoire-configured" #~ msgstr "Job Password Repertoire Configured" #~ msgid "job-password-repertoire-supported.iana_us-ascii_any" #~ msgstr "Iana Us Ascii Any" #~ msgid "job-password-repertoire-supported.iana_us-ascii_complex" #~ msgstr "Iana Us Ascii Complex" #~ msgid "job-password-repertoire-supported.iana_us-ascii_digits" #~ msgstr "Iana Us Ascii Digits" #~ msgid "job-password-repertoire-supported.iana_us-ascii_letters" #~ msgstr "Iana Us Ascii Letters" #~ msgid "job-password-repertoire-supported.iana_utf-8_any" #~ msgstr "Iana Utf 8 Any" #~ msgid "job-password-repertoire-supported.iana_utf-8_digits" #~ msgstr "Iana Utf 8 Digits" #~ msgid "job-password-repertoire-supported.iana_utf-8_letters" #~ msgstr "Iana Utf 8 Letters" #~ msgid "job-settable-attributes-supported.job-name" #~ msgstr "Job Name" #~ msgid "job-settable-attributes-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.arithmetic" #~ msgstr "Arithmetic" #~ msgid "jpeg-features-supported.cmyk" #~ msgstr "Cmyk" #~ msgid "jpeg-features-supported.deep" #~ msgstr "Deep" #~ msgid "jpeg-features-supported.hierarchical" #~ msgstr "Hierarchical" #~ msgid "jpeg-features-supported.icc" #~ msgstr "Icc" #~ msgid "jpeg-features-supported.lossless" #~ msgstr "Lossless" #~ msgid "jpeg-features-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.progressive" #~ msgstr "Progressive" #~ msgid "lpadmin: Expected PPD after \"-P\" option." #~ msgstr "lpadmin: è previsto PPD dopo l'opzione \"-P\"." #~ msgid "lpadmin: Expected interface after \"-i\" option." #~ msgstr "lpadmin: è prevista l'interfaccia dopo l'opzione \"-i\"." #~ msgid "lpinfo: Unknown argument \"%s\"." #~ msgstr "lpinfo: argomento sconosciuto \"%s\"." #~ msgid "lpinfo: Unknown option \"%c\"." #~ msgstr "lpinfo: opzione sconosciuta \"%c\"." #~ msgid "lpinfo: Unknown option \"%s\"." #~ msgstr "lpinfo: opzione sconosciuta \"%s\"." #~ msgid "lpmove: Unknown option \"%c\"." #~ msgstr "lpmove: opzione sconosciuta \"%c\"." #~ msgid "lppasswd: Only root can add or delete passwords." #~ msgstr "lppasswd: solo root può aggiungere o eliminare le password." #~ msgid "lppasswd: Password file busy." #~ msgstr "lppasswd: il file delle password è già in uso." #~ msgid "lppasswd: Password file not updated." #~ msgstr "lppasswd: il file delle password non è aggiornato." #~ msgid "lppasswd: Sorry, password doesn't match." #~ msgstr "lppasswd: spiacenti, la password non è esatta." #~ msgid "lppasswd: Sorry, password rejected." #~ msgstr "lppasswd: spiacenti, la password è stata rifiutata." #~ msgid "lppasswd: Sorry, passwords don't match." #~ msgstr "lppasswd: spiacenti, le password non sono esatte." #~ msgid "lppasswd: Unable to copy password string: %s" #~ msgstr "lppasswd: non è possibile copiare la stringa della password: %s" #~ msgid "lppasswd: Unable to open password file: %s" #~ msgstr "lppasswd: non è possibile aprire il file delle password: %s" #~ msgid "lppasswd: Unable to write to password file: %s" #~ msgstr "" #~ "lppasswd: non è possibile scrivere all'interno del file delle password: %s" #~ msgid "lppasswd: failed to backup old password file: %s" #~ msgstr "" #~ "lppasswd: non è possibile eseguire il backup del vecchio file delle " #~ "password: %s" #~ msgid "lppasswd: failed to rename password file: %s" #~ msgstr "lppasswd: non è possibile rinominare il file delle password: %s" #~ msgid "lppasswd: user \"%s\" and group \"%s\" do not exist." #~ msgstr "lppasswd: l'utente \"%s\" ed il gruppo \"%s\" non esistono." #~ msgid "material-type.pla-dissolvable" #~ msgstr "Pla Dissolvable" #~ msgid "media.om_large-photo_200x300mm" #~ msgstr "200 x 300mm" #~ msgid "notify-subscribed-event" #~ msgstr "Notify Event" #~ msgid "operations-supported.10" #~ msgstr "Get-Jobs" #~ msgid "operations-supported.11" #~ msgstr "Get-Printer-Attributes" #~ msgid "operations-supported.12" #~ msgstr "Hold-Job" #~ msgid "operations-supported.13" #~ msgstr "Release-Job" #~ msgid "operations-supported.14" #~ msgstr "Restart-Job" #~ msgid "operations-supported.16" #~ msgstr "Pause-Printer" #~ msgid "operations-supported.17" #~ msgstr "Resume-Printer" #~ msgid "operations-supported.18" #~ msgstr "Purge-Jobs" #~ msgid "operations-supported.19" #~ msgstr "Set-Printer-Attributes" #~ msgid "operations-supported.2" #~ msgstr "Print-Job" #~ msgid "operations-supported.20" #~ msgstr "Set-Job-Attributes" #~ msgid "operations-supported.21" #~ msgstr "Get-Printer-Supported-Values" #~ msgid "operations-supported.22" #~ msgstr "Create-Printer-Subscriptions" #~ msgid "operations-supported.23" #~ msgstr "Create-Job-Subscriptions" #~ msgid "operations-supported.24" #~ msgstr "Get-Subscription-Attributes" #~ msgid "operations-supported.25" #~ msgstr "Get-Subscriptions" #~ msgid "operations-supported.26" #~ msgstr "Renew-Subscription" #~ msgid "operations-supported.27" #~ msgstr "Cancel-Subscription" #~ msgid "operations-supported.28" #~ msgstr "Get-Notifications" #~ msgid "operations-supported.3" #~ msgstr "Print-URI" #~ msgid "operations-supported.34" #~ msgstr "Enable-Printer" #~ msgid "operations-supported.35" #~ msgstr "Disable-Printer" #~ msgid "operations-supported.36" #~ msgstr "Pause-Printer-After-Current-Job" #~ msgid "operations-supported.37" #~ msgstr "Hold-New-Jobs" #~ msgid "operations-supported.38" #~ msgstr "Release-Held-New-Jobs" #~ msgid "operations-supported.39" #~ msgstr "Deactivate-Printer" #~ msgid "operations-supported.4" #~ msgstr "Validate-Job" #~ msgid "operations-supported.40" #~ msgstr "Activate-Printer" #~ msgid "operations-supported.41" #~ msgstr "Restart-Printer" #~ msgid "operations-supported.42" #~ msgstr "Shutdown-Printer" #~ msgid "operations-supported.43" #~ msgstr "Startup-Printer" #~ msgid "operations-supported.44" #~ msgstr "Reprocess-Job" #~ msgid "operations-supported.45" #~ msgstr "Cancel-Current-Job" #~ msgid "operations-supported.46" #~ msgstr "Suspend-Current-Job" #~ msgid "operations-supported.47" #~ msgstr "Resume-Job" #~ msgid "operations-supported.48" #~ msgstr "Promote-Job" #~ msgid "operations-supported.49" #~ msgstr "Schedule-Job-After" #~ msgid "operations-supported.5" #~ msgstr "Create-Job" #~ msgid "operations-supported.51" #~ msgstr "Cancel-Document" #~ msgid "operations-supported.52" #~ msgstr "Get-Document-Attributes" #~ msgid "operations-supported.53" #~ msgstr "Get-Documents" #~ msgid "operations-supported.54" #~ msgstr "Delete-Document" #~ msgid "operations-supported.55" #~ msgstr "Set-Document-Attributes" #~ msgid "operations-supported.56" #~ msgstr "Cancel-Jobs" #~ msgid "operations-supported.57" #~ msgstr "Cancel-My-Jobs" #~ msgid "operations-supported.58" #~ msgstr "Resubmit-Job" #~ msgid "operations-supported.59" #~ msgstr "Close-Job" #~ msgid "operations-supported.6" #~ msgstr "Send-Document" #~ msgid "operations-supported.60" #~ msgstr "Identify-Printer" #~ msgid "operations-supported.61" #~ msgstr "Validate-Document" #~ msgid "operations-supported.62" #~ msgstr "Add-Document-Images" #~ msgid "operations-supported.63" #~ msgstr "Acknowledge-Document" #~ msgid "operations-supported.64" #~ msgstr "Acknowledge-Identify-Printer" #~ msgid "operations-supported.65" #~ msgstr "Acknowledge-Job" #~ msgid "operations-supported.66" #~ msgstr "Fetch-Document" #~ msgid "operations-supported.67" #~ msgstr "Fetch-Job" #~ msgid "operations-supported.68" #~ msgstr "Get-Output-Device-Attributes" #~ msgid "operations-supported.69" #~ msgstr "Update-Active-Jobs" #~ msgid "operations-supported.7" #~ msgstr "Send-URI" #~ msgid "operations-supported.70" #~ msgstr "Deregister-Output-Device" #~ msgid "operations-supported.71" #~ msgstr "Update-Document-Status" #~ msgid "operations-supported.72" #~ msgstr "Update-Job-Status" #~ msgid "operations-supported.73" #~ msgstr "Update-Output-Device-Attributes" #~ msgid "operations-supported.74" #~ msgstr "Get-Next-Document-Data" #~ msgid "operations-supported.8" #~ msgstr "Cancel-Job" #~ msgid "operations-supported.9" #~ msgstr "Get-Job-Attributes" #~ msgid "output-device" #~ msgstr "Output Device" #~ msgid "output-device-job-states" #~ msgstr "Output Device Job States" #~ msgid "output-device-uuid" #~ msgstr "Output Device Uuid" #~ msgid "pdf-features-supported.prc" #~ msgstr "Prc" #~ msgid "pdf-features-supported.u3d" #~ msgstr "U3d" #~ msgid "pdf-versions-supported.adobe-1.3" #~ msgstr "Adobe 1.3" #~ msgid "pdf-versions-supported.adobe-1.4" #~ msgstr "Adobe 1.4" #~ msgid "pdf-versions-supported.adobe-1.5" #~ msgstr "Adobe 1.5" #~ msgid "pdf-versions-supported.adobe-1.6" #~ msgstr "Adobe 1.6" #~ msgid "pdf-versions-supported.iso-15930-1_2001" #~ msgstr "ISO 15930-1:2001" #~ msgid "pdf-versions-supported.iso-15930-3_2002" #~ msgstr "ISO 15930-3:2002" #~ msgid "pdf-versions-supported.iso-15930-4_2003" #~ msgstr "ISO 15930-4:2003" #~ msgid "pdf-versions-supported.iso-15930-6_2003" #~ msgstr "ISO 15930-6:2003" #~ msgid "pdf-versions-supported.iso-15930-7_2010" #~ msgstr "ISO 15930-7:2010" #~ msgid "pdf-versions-supported.iso-15930-8_2010" #~ msgstr "ISO 15930-8:2010" #~ msgid "pdf-versions-supported.iso-16612-2_2010" #~ msgstr "ISO 16612-2:2010" #~ msgid "pdf-versions-supported.iso-19005-1_2005" #~ msgstr "ISO 19005-1:2005" #~ msgid "pdf-versions-supported.iso-19005-2_2011" #~ msgstr "ISO 19005-2:2011" #~ msgid "pdf-versions-supported.iso-19005-3_2012" #~ msgstr "ISO 19005-3:2012" #~ msgid "pdf-versions-supported.iso-32000-1_2008" #~ msgstr "ISO 32000-1:2008" #~ msgid "pdf-versions-supported.none" #~ msgstr "None" #~ msgid "pdf-versions-supported.pwg-5102.3" #~ msgstr "PWG 5102.3" #~ msgid "preferred-attributes" #~ msgstr "Preferred Attributes" #~ msgid "printer-mandatory-job-attributes" #~ msgstr "Printer Mandatory Job Attributes" #~ msgid "profile-uri-actual" #~ msgstr "Actual Profile URI" #~ msgid "requested-attributes.all" #~ msgstr "All" #~ msgid "requested-attributes.document-description" #~ msgstr "Document Description" #~ msgid "requested-attributes.document-template" #~ msgstr "Document Template" #~ msgid "requested-attributes.job-actuals" #~ msgstr "Job Actuals" #~ msgid "requested-attributes.job-description" #~ msgstr "Job Description" #~ msgid "requested-attributes.job-template" #~ msgstr "Job Template" #~ msgid "requested-attributes.printer-description" #~ msgstr "Printer Description" #~ msgid "requested-attributes.subscription-description" #~ msgstr "Subscription Description" #~ msgid "requested-attributes.subscription-template" #~ msgstr "Subscription Template" #~ msgid "requesting-user-name" #~ msgstr "Requesting User Name" #~ msgid "requesting-user-uri" #~ msgstr "Requesting User URI" #~ msgid "x-image-position" #~ msgstr "X Image Position" #~ msgid "x-image-position.center" #~ msgstr "Center" #~ msgid "x-image-position.left" #~ msgstr "Left" #~ msgid "x-image-position.none" #~ msgstr "None" #~ msgid "x-image-position.right" #~ msgstr "Right" #~ msgid "x-image-shift" #~ msgstr "X Image Shift" #~ msgid "x-side1-image-shift" #~ msgstr "X Front Side Image Shift" #~ msgid "x-side2-image-shift" #~ msgstr "X Back Side Image Shift" #~ msgid "y-image-position" #~ msgstr "Y Image Position" #~ msgid "y-image-position.bottom" #~ msgstr "Bottom" #~ msgid "y-image-position.center" #~ msgstr "Center" #~ msgid "y-image-position.none" #~ msgstr "None" #~ msgid "y-image-position.top" #~ msgstr "Top" #~ msgid "y-image-shift" #~ msgstr "Y Image Shift" #~ msgid "y-side1-image-shift" #~ msgstr "Y Front Side Image Shift" #~ msgid "y-side2-image-shift" #~ msgstr "Y Back Side Image Shift" cups-2.2.7/locale/cups_ja.po000664 000765 000024 00001264422 13255074424 016411 0ustar00msweetstaff000000 000000 # # "$Id$" # # Message catalog template for CUPS. # # Copyright 2007-2012 by Apple Inc. # Copyright 2005-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # # Notes for Translators: # # The "checkpo" program located in the "locale" source directory can be used # to verify that your translations do not introduce formatting errors or other # problems. Run with: # # cd locale # ./checkpo cups_LL.po # # where "LL" is your locale. # msgid "" msgstr "" "Project-Id-Version: CUPS 2.0\n" "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n" "POT-Creation-Date: 2018-03-19 18:36-0400\n" "PO-Revision-Date: 2014-11-15 19:27+0900\n" "Last-Translator: OPFC TRANSCUPS \n" "Language-Team: OPFC TRANSCUPS \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgid "\t\t(all)" msgstr "\t\t(ã™ã¹ã¦)" msgid "\t\t(none)" msgstr "\t\t(ãªã—)" #, c-format msgid "\t%d entries" msgstr "\t%d エントリー" #, c-format msgid "\t%s" msgstr "\t%s" msgid "\tAfter fault: continue" msgstr "\t失敗後: 継続" #, c-format msgid "\tAlerts: %s" msgstr "\t警告: %s" msgid "\tBanner required" msgstr "\tãƒãƒŠãƒ¼ãŒå¿…è¦" msgid "\tCharset sets:" msgstr "\t文字セット:" msgid "\tConnection: direct" msgstr "\t接続: ç›´çµ" msgid "\tConnection: remote" msgstr "\t接続: リモート" msgid "\tContent types: any" msgstr "\tコンテンツã®ç¨®é¡ž: ã™ã¹ã¦" msgid "\tDefault page size:" msgstr "\tデフォルト用紙サイズ:" msgid "\tDefault pitch:" msgstr "\tデフォルトピッãƒ:" msgid "\tDefault port settings:" msgstr "\tデフォルトãƒãƒ¼ãƒˆè¨­å®š:" #, c-format msgid "\tDescription: %s" msgstr "\t説明: %s" msgid "\tForm mounted:" msgstr "\t設定ã•れãŸãƒ•ォーム:" msgid "\tForms allowed:" msgstr "\t許å¯ã•れã¦ã„るフォーム:" #, c-format msgid "\tInterface: %s.ppd" msgstr "\tインターフェイス: %s.ppd" #, c-format msgid "\tInterface: %s/ppd/%s.ppd" msgstr "\tインターフェイス: %s/ppd/%s.ppd" #, c-format msgid "\tLocation: %s" msgstr "\t場所: %s" msgid "\tOn fault: no alert" msgstr "\t失敗時: 警告ãªã—" msgid "\tPrinter types: unknown" msgstr "\tプリンターã®ç¨®é¡ž: 䏿˜Ž" #, c-format msgid "\tStatus: %s" msgstr "\tステータス: %s" msgid "\tUsers allowed:" msgstr "\t許å¯ã•れã¦ã„るユーザー:" msgid "\tUsers denied:" msgstr "\tç¦æ­¢ã•れã¦ã„るユーザー:" msgid "\tdaemon present" msgstr "\tãƒ‡ãƒ¼ãƒ¢ãƒ³ã¯æä¾›ã•れã¦ã„ã¾ã™" msgid "\tno entries" msgstr "\tエントリーãŒã‚りã¾ã›ã‚“" #, c-format msgid "\tprinter is on device '%s' speed -1" msgstr "\tデãƒã‚¤ã‚¹ '%s' 上ã®ãƒ—リンター 速度 -1" msgid "\tprinting is disabled" msgstr "\tå°åˆ·ã¯ç„¡åйã§ã™" msgid "\tprinting is enabled" msgstr "\tå°åˆ·ã¯æœ‰åйã§ã™" #, c-format msgid "\tqueued for %s" msgstr "\t%s ã«ã‚­ãƒ¥ãƒ¼ã—ã¾ã—ãŸ" msgid "\tqueuing is disabled" msgstr "\tキューã¯ç„¡åйã§ã™" msgid "\tqueuing is enabled" msgstr "\tã‚­ãƒ¥ãƒ¼ã¯æœ‰åйã§ã™" msgid "\treason unknown" msgstr "\t未知ã®ç†ç”±" msgid "" "\n" " DETAILED CONFORMANCE TEST RESULTS" msgstr "" "\n" " é©åˆãƒ†ã‚¹ãƒˆçµæžœè©³ç´°" msgid " Ignore specific warnings." msgstr " 指定ã•れãŸè­¦å‘Šã‚’無視ã™ã‚‹ã€‚" msgid " Issue warnings instead of errors." msgstr " エラーを警告ã¨ã—ã¦æ‰±ã†ã€‚" msgid " REF: Page 15, section 3.1." msgstr " å‚ç…§: 15 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 3.1。" msgid " REF: Page 15, section 3.2." msgstr " å‚ç…§: 15 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 3.2。" msgid " REF: Page 19, section 3.3." msgstr " å‚ç…§: 19 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 3.3。" msgid " REF: Page 20, section 3.4." msgstr " å‚ç…§: 20 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 3.4。" msgid " REF: Page 27, section 3.5." msgstr " å‚ç…§: 27 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 3.5。" msgid " REF: Page 42, section 5.2." msgstr " å‚ç…§: 42 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.2。" msgid " REF: Pages 16-17, section 3.2." msgstr " å‚ç…§: 16-17 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 3.2。" msgid " REF: Pages 42-45, section 5.2." msgstr " å‚ç…§: 42-45 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.2。" msgid " REF: Pages 45-46, section 5.2." msgstr " å‚ç…§: 45-46 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.2。" msgid " REF: Pages 48-49, section 5.2." msgstr " å‚ç…§: 48-49 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.2。" msgid " REF: Pages 52-54, section 5.2." msgstr " å‚ç…§: 52-54 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.2。" #, c-format msgid " %-39.39s %.0f bytes" msgstr " %-39.39s %.0f ãƒã‚¤ãƒˆ" #, c-format msgid " PASS Default%s" msgstr " åˆæ ¼ Default%s" msgid " PASS DefaultImageableArea" msgstr " åˆæ ¼ DefaultImageableArea" msgid " PASS DefaultPaperDimension" msgstr " åˆæ ¼ DefaultPaperDimension" msgid " PASS FileVersion" msgstr " åˆæ ¼ FileVersion" msgid " PASS FormatVersion" msgstr " åˆæ ¼ FormatVersion" msgid " PASS LanguageEncoding" msgstr " åˆæ ¼ LanguageEncoding" msgid " PASS LanguageVersion" msgstr " åˆæ ¼ LanguageVersion" msgid " PASS Manufacturer" msgstr " åˆæ ¼ Manufacturer" msgid " PASS ModelName" msgstr " åˆæ ¼ ModelName" msgid " PASS NickName" msgstr " åˆæ ¼ NickName" msgid " PASS PCFileName" msgstr " åˆæ ¼ PCFileName" msgid " PASS PSVersion" msgstr " åˆæ ¼ PSVersion" msgid " PASS PageRegion" msgstr " åˆæ ¼ PageRegion" msgid " PASS PageSize" msgstr " åˆæ ¼ PageSize" msgid " PASS Product" msgstr " åˆæ ¼ Product" msgid " PASS ShortNickName" msgstr " åˆæ ¼ ShortNickName" #, c-format msgid " WARN %s has no corresponding options." msgstr " 警告 %s ã¯ç›¸å½“ã™ã‚‹ã‚ªãƒ—ションãŒã‚りã¾ã›ã‚“。" #, c-format msgid "" " WARN %s shares a common prefix with %s\n" " REF: Page 15, section 3.2." msgstr "" " 警告 %s 㯠%s ã¨ä¸€èˆ¬ãƒ—レフィックスを共有ã—ã¾ã™ã€‚\n" " å‚ç…§: 15 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 3.2。" #, c-format msgid "" " WARN Duplex option keyword %s may not work as expected and should " "be named Duplex.\n" " REF: Page 122, section 5.17" msgstr "" " 警告 Duplex オプションキーワード %s ã¯æœŸå¾…通りã«å‹•作ã—ãªã„ã‹ã‚‚ã—れ" "ã¾ã›ã‚“。ã¾ãŸã€Duplex ã¨ã„ã†åå‰ã§ã‚ã‚‹ã¹ãã§ã™ã€‚ å‚ç…§: 122 ペー" "ジã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.17" msgid " WARN File contains a mix of CR, LF, and CR LF line endings." msgstr "" " 警告 ファイル㌠CRã€LFã€CR LF ã®è¡Œæœ«ã‚’混在ã—ã¦å«ã‚“ã§ã„ã¾ã™ã€‚" msgid "" " WARN LanguageEncoding required by PPD 4.3 spec.\n" " REF: Pages 56-57, section 5.3." msgstr "" " 警告 LanguageEncoding 㯠PPD 4.3 仕様ã§å¿…é ˆã§ã™ã€‚\n" " å‚ç…§: 56-57 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" #, c-format msgid " WARN Line %d only contains whitespace." msgstr " 警告 %d 行ãŒç©ºç™½ã ã‘ã§ã™ã€‚" msgid "" " WARN Manufacturer required by PPD 4.3 spec.\n" " REF: Pages 58-59, section 5.3." msgstr "" " 警告 Manufacturer 㯠PPD 4.3 仕様ã§å¿…é ˆã§ã™ã€‚\n" " å‚ç…§: 58-59 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " WARN Non-Windows PPD files should use lines ending with only LF, " "not CR LF." msgstr "" " 警告 éž Windows PPD ファイルã¯ã€CR LF ã§ãªã LF ã®ã¿ã‚’行末ã«ä½¿ã†ã¹" "ãã§ã™ã€‚" #, c-format msgid "" " WARN Obsolete PPD version %.1f.\n" " REF: Page 42, section 5.2." msgstr "" " 警告 PPD ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %.1f ã¯ç¾åœ¨ä½¿ã‚れã¦ã„ã¾ã›ã‚“。\n" " å‚ç…§: 42 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.2。" msgid "" " WARN PCFileName longer than 8.3 in violation of PPD spec.\n" " REF: Pages 61-62, section 5.3." msgstr "" " 警告 8.3 文字より長ㄠPCFileName 㯠PPD 仕様é•åã§ã™ã€‚\n" " å‚ç…§: 61-62 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " WARN PCFileName should contain a unique filename.\n" " REF: Pages 61-62, section 5.3." msgstr "" " 警告 PCFileName ã¯ãƒ¦ãƒ‹ãƒ¼ã‚¯ãªãƒ•ァイルåã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。\n" " å‚ç…§: 61-62 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " WARN Protocols contains PJL but JCL attributes are not set.\n" " REF: Pages 78-79, section 5.7." msgstr "" " 警告 プロトコル㌠PJL ã‚’å«ã‚“ã§ã„ã¾ã™ãŒ JCL 属性ãŒè¨­å®šã•れã¦ã„ã¾ã›" "ん。\n" " å‚ç…§: 78-79 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.7。" msgid "" " WARN Protocols contains both PJL and BCP; expected TBCP.\n" " REF: Pages 78-79, section 5.7." msgstr "" " 警告 プロトコル㌠PJL 㨠BCP ã®ä¸¡æ–¹ã‚’å«ã‚“ã§ã„ã¾ã™; TBCP を想定ã—ã¾" "ã™ã€‚\n" " å‚ç…§: 78-79 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.7。" msgid "" " WARN ShortNickName required by PPD 4.3 spec.\n" " REF: Pages 64-65, section 5.3." msgstr "" " 警告 ShortNickName 㯠PPD 4.3 仕様ã§å¿…é ˆã§ã™ã€‚\n" " å‚ç…§: 64-65 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid " cupsaddsmb [options] -a" msgstr " cupsaddsmb [オプション] -a" msgid " cupstestdsc [options] -" msgstr " cupstestdsc [オプション] -" msgid " program | cupstestppd [options] -" msgstr " program | cupstestppd [オプション] -" #, c-format msgid "" " %s \"%s %s\" conflicts with \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." msgstr "" " %s \"%s %s\" 㯠\"%s %s\" ã¨ç«¶åˆã—ã¾ã™\n" " (ç¦å‰‡=\"%s %s %s %s\")。" #, c-format msgid " %s %s %s does not exist." msgstr " %s %s %s ãŒå­˜åœ¨ã—ã¾ã›ã‚“。" #, c-format msgid " %s %s file \"%s\" has the wrong capitalization." msgstr "" " %s %s ファイル \"%s\" ã¯ä¸æ­£ãªå¤§æ–‡å­—ã§å§‹ã¾ã‚‹ãƒ¯ãƒ¼ãƒ‰ã‚’å«ã‚“ã§ã„ã¾ã™ã€‚" #, c-format msgid "" " %s Bad %s choice %s.\n" " REF: Page 122, section 5.17" msgstr "" " %s 䏿­£ãª %s ㌠%s ã‚’é¸ã‚“ã§ã„ã¾ã™ã€‚\n" " å‚ç…§: 122 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.17" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s." msgstr "" " %s 䏿­£ãª UTF-8 \"%s\" 翻訳文字列 (オプション %s ã€é¸æŠž %s) ã§ã™ã€‚" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s." msgstr " %s 䏿­£ãª UTF-8 \"%s\" 翻訳文字列 (オプション %s 用) ã§ã™ã€‚" #, c-format msgid " %s Bad cupsFilter value \"%s\"." msgstr " %s 䏿­£ãªå€¤ãŒ cupsFilter ã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚ \"%s\"" #, c-format msgid " %s Bad cupsFilter2 value \"%s\"." msgstr " %s 䏿­£ãªå€¤ãŒ cupsFilter2 ã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚ \"%s\"" #, c-format msgid " %s Bad cupsICCProfile %s." msgstr " %s 䏿­£ãª cupsICCProfile %s ã§ã™ã€‚" #, c-format msgid " %s Bad cupsPreFilter value \"%s\"." msgstr " %s 䏿­£ãªå€¤ãŒ cupsPreFilter ã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚ \"%s\"" #, c-format msgid " %s Bad cupsUIConstraints %s: \"%s\"" msgstr " %s 䏿­£ãª cupsUIConstraints %s: \"%s\" ã§ã™ã€‚" #, c-format msgid " %s Bad language \"%s\"." msgstr " %s 無効ãªè¨€èªž \"%s\" ã§ã™ã€‚" #, c-format msgid " %s Bad permissions on %s file \"%s\"." msgstr " %s 䏿­£ãªãƒ‘ーミッション %s ã§ã™ (ファイル \"%s\")。" #, c-format msgid " %s Bad spelling of %s - should be %s." msgstr " %s %s ã®ä¸æ­£ãªç¶´ã‚Šã§ã™ - %s ã§ã‚ã‚‹ã¹ãã§ã™ã€‚" #, c-format msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID." msgstr " %s APScanAppPath 㨠APScanAppBundleID ã¯åŒæ™‚ã«æŒ‡å®šã§ãã¾ã›ã‚“。" #, c-format msgid " %s Default choices conflicting." msgstr " %s デフォルトã®é¸æŠžè‚¢ãŒç«¶åˆã—ã¦ã„ã¾ã™ã€‚" #, c-format msgid " %s Empty cupsUIConstraints %s" msgstr " %s 空㮠cupsUIConstraints %s ã§ã™ã€‚" #, c-format msgid " %s Missing \"%s\" translation string for option %s, choice %s." msgstr "" " %s \"%s\" 翻訳文字列 (オプション %s ã€é¸æŠž %s) ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #, c-format msgid " %s Missing \"%s\" translation string for option %s." msgstr " %s \"%s\" 翻訳文字列 (オプション %s 用) ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #, c-format msgid " %s Missing %s file \"%s\"." msgstr " %s %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ (ファイル \"%s\")。" #, c-format msgid "" " %s Missing REQUIRED PageRegion option.\n" " REF: Page 100, section 5.14." msgstr "" " %s 必須㮠PageRegion オプションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。\n" " å‚ç…§: 100 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.14。" #, c-format msgid "" " %s Missing REQUIRED PageSize option.\n" " REF: Page 99, section 5.14." msgstr "" " %s 必須㮠PageSize オプションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。\n" " å‚ç…§: 99 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.14。" #, c-format msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" " %s  é¸æŠž *%s %s ㌠UIConstraints \"*%s %s *%s %s\" 内ã«è¦‹ã¤ã‹ã‚Šã¾ã›" "ん。" #, c-format msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" msgstr "" " %s é¸æŠž *%s %s ㌠cupsUIConstraints %s: \"%s\" 内ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #, c-format msgid " %s Missing cupsUIResolver %s" msgstr " %s cupsUIResolver ファイル %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #, c-format msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" " %s オプション %s ãŒUIConstraints \"*%s %s *%s %s\" ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #, c-format msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\"" msgstr "" " %s オプション %s ãŒcupsUIConstraints %s ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: \"%s\"" #, c-format msgid " %s No base translation \"%s\" is included in file." msgstr " %s ファイルã«ãƒ™ãƒ¼ã‚¹ç¿»è¨³æ–‡å­—列 \"%s\" ãŒã‚りã¾ã›ã‚“。" #, c-format msgid "" " %s REQUIRED %s does not define choice None.\n" " REF: Page 122, section 5.17" msgstr "" " %s 必須㮠%s ãŒé¸æŠžè‚¢ None を定義ã—ã¦ã„ã¾ã›ã‚“。\n" " å‚ç…§: 122 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.17。" #, c-format msgid " %s Size \"%s\" defined for %s but not for %s." msgstr "" " %s サイズ \"%s\" 㯠%s å‘ã‘ã«å®šç¾©ã•れã¦ã„ã¾ã™ãŒã€%s ã«ã¯ã‚りã¾ã›ã‚“。" #, c-format msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)." msgstr " %s サイズ \"%s\" ã¯è¦å®šå¤–ã®å¯¸æ³• (%gx%g) ã‚’æŒã£ã¦ã„ã¾ã™ã€‚" #, c-format msgid " %s Size \"%s\" should be \"%s\"." msgstr " %s サイズ \"%s\" 㯠\"%s\" ã§ã‚ã‚‹ã¹ãã§ã™ã€‚" #, c-format msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"." msgstr " %s サイズ \"%s\" 㯠Adobe 標準åç§° \"%s\" ã§ã‚ã‚‹ã¹ãã§ã™ã€‚" #, c-format msgid " %s cupsICCProfile %s hash value collides with %s." msgstr " %s cupsICCProfileã®ãƒãƒƒã‚·ãƒ¥å€¤ %s ㌠%s ã¨ä¸€è‡´ã—ã¾ã›ã‚“。" #, c-format msgid " %s cupsUIResolver %s causes a loop." msgstr " %s cupsUIResolverã® %s ãŒãƒ«ãƒ¼ãƒ—ã—ã¦ã„ã¾ã™ã€‚" #, c-format msgid "" " %s cupsUIResolver %s does not list at least two different options." msgstr "" " %s cupsUIResolver %s ã¯æœ€ä½Žã§ã‚‚ 2 ã¤ã®ç•°ãªã£ãŸã‚ªãƒ—ションをæŒã£ã¦ã„ãªã‘" "れã°ãªã‚Šã¾ã›ã‚“。" #, c-format msgid "" " **FAIL** %s must be 1284DeviceID\n" " REF: Page 72, section 5.5" msgstr "" " **失敗** %s 㯠1284DeviceID ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。\n" " å‚ç…§: 72 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.5" #, c-format msgid "" " **FAIL** Bad Default%s %s\n" " REF: Page 40, section 4.5." msgstr "" " **失敗** 䏿­£ãª Default%s %s\n" " å‚ç…§: 40 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 4.5。" #, c-format msgid "" " **FAIL** Bad DefaultImageableArea %s\n" " REF: Page 102, section 5.15." msgstr "" " **失敗** %s ã¯ä¸æ­£ãª DefaultImageableArea ã§ã™ã€‚\n" " å‚ç…§: 102 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.15。" #, c-format msgid "" " **FAIL** Bad DefaultPaperDimension %s\n" " REF: Page 103, section 5.15." msgstr "" " **失敗** %s ã¯ä¸æ­£ãª DefaultPaperDimension ã§ã™ã€‚\n" " å‚ç…§: 103 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.15。" #, c-format msgid "" " **FAIL** Bad FileVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" " **失敗** 䏿­£ãªFileVersion \"%s\"\n" " å‚ç…§: 56 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" #, c-format msgid "" " **FAIL** Bad FormatVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" " **失敗** FormatVersion ãŒé•ã„ã¾ã™ \"%s\"\n" " å‚ç…§: 56 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** Bad JobPatchFile attribute in file\n" " REF: Page 24, section 3.4." msgstr "" " **失敗** ファイルã«ä¸æ­£ãª JobPatchFile 属性ãŒã‚りã¾ã™\n" " å‚ç…§: 24 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 3.4。" #, c-format msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1." msgstr "" " **失敗** 無効㪠LanguageEncoding %s - ISOLatin1 ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #, c-format msgid " **FAIL** Bad LanguageVersion %s - must be English." msgstr "" " **失敗** 無効㪠LanguageVersion %s - English ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #, c-format msgid "" " **FAIL** Bad Manufacturer (should be \"%s\")\n" " REF: Page 211, table D.1." msgstr "" " **失敗** 䏿­£ãª Manufacturer (\"%s\" ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“)\n" " å‚ç…§: 211 ページã€è¡¨ D.1。" #, c-format msgid "" " **FAIL** Bad ModelName - \"%c\" not allowed in string.\n" " REF: Pages 59-60, section 5.3." msgstr "" " **失敗** 䏿­£ãª ModelName - 文字列㫠\"%c\" ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“。\n" " å‚ç…§: 59-60 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** Bad PSVersion - not \"(string) int\".\n" " REF: Pages 62-64, section 5.3." msgstr "" " **失敗** 䏿­£ãª PSVersion - \"(文字列) æ•´æ•°\" ã§ã¯ã‚りã¾ã›ã‚“。\n" " å‚ç…§: 62-64 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** Bad Product - not \"(string)\".\n" " REF: Page 62, section 5.3." msgstr "" " **失敗** 䏿­£ãª Product - \"(文字列)\" ã§ã¯ã‚りã¾ã›ã‚“。\n" " å‚ç…§: 62 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** Bad ShortNickName - longer than 31 chars.\n" " REF: Pages 64-65, section 5.3." msgstr "" " **失敗** 䏿­£ãª ShortNickName - 31 文字を超ãˆã¦ã„ã¾ã™ã€‚\n" " å‚ç…§: 64-65 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" #, c-format msgid "" " **FAIL** Bad option %s choice %s\n" " REF: Page 84, section 5.9" msgstr "" " **失敗** 䏿­£ãª %s ㌠%s ã‚’é¸ã‚“ã§ã„ã¾ã™ã€‚\n" " å‚ç…§: 84 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.9" #, c-format msgid " **FAIL** Default option code cannot be interpreted: %s" msgstr " **失敗** デフォルトã®ã‚ªãƒ—ションコードãŒè§£é‡ˆã§ãã¾ã›ã‚“: %s" #, c-format msgid "" " **FAIL** Default translation string for option %s choice %s contains " "8-bit characters." msgstr "" " **失敗** オプション %sã€é¸æŠžè‚¢ %s ã®ãƒ‡ãƒ•ォルトã®ç¿»è¨³æ–‡å­—列㌠8 ビット" "文字をå«ã‚“ã§ã„ã¾ã™ã€‚" #, c-format msgid "" " **FAIL** Default translation string for option %s contains 8-bit " "characters." msgstr "" " **失敗** オプション %s ã®ãƒ‡ãƒ•ォルトã®ç¿»è¨³æ–‡å­—列㌠8 ビット文字をå«ã‚“ã§" "ã„ã¾ã™ã€‚" #, c-format msgid " **FAIL** Group names %s and %s differ only by case." msgstr " **失敗** グループå %s 㨠%s ã¯å¤§æ–‡å­—/å°æ–‡å­—ãŒé•ã†ã ã‘ã§ã™ã€‚" #, c-format msgid " **FAIL** Multiple occurrences of option %s choice name %s." msgstr " **失敗** %s ã§è¤‡æ•°ã®ã‚ªãƒ—ション %s ãŒé¸æŠžã•れã¦ã„ã¾ã™ã€‚" #, c-format msgid " **FAIL** Option %s choice names %s and %s differ only by case." msgstr "" " **失敗** %s ãŒé¸æŠžã—㟠%s 㨠%s ã¯å¤§æ–‡å­—/å°æ–‡å­—ã®ã¿ãŒé•ã†ã ã‘ã§ã™ã€‚" #, c-format msgid " **FAIL** Option names %s and %s differ only by case." msgstr " **失敗** オプションå %s 㨠%s ã¯å¤§æ–‡å­—/å°æ–‡å­—ãŒé•ã†ã ã‘ã§ã™ã€‚" #, c-format msgid "" " **FAIL** REQUIRED Default%s\n" " REF: Page 40, section 4.5." msgstr "" " **失敗** Default%s ã¯å¿…é ˆ\n" " å‚ç…§: 40 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 4.5。" msgid "" " **FAIL** REQUIRED DefaultImageableArea\n" " REF: Page 102, section 5.15." msgstr "" " **失敗** DefaultImageableArea ã¯å¿…é ˆ\n" " å‚ç…§: 102 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.15。" msgid "" " **FAIL** REQUIRED DefaultPaperDimension\n" " REF: Page 103, section 5.15." msgstr "" " **失敗** DefaultPaperDimension ã¯å¿…é ˆ\n" " å‚ç…§: 103 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.15。" msgid "" " **FAIL** REQUIRED FileVersion\n" " REF: Page 56, section 5.3." msgstr "" " **失敗** FileVersion ã¯å¿…é ˆ\n" " å‚ç…§: 56 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** REQUIRED FormatVersion\n" " REF: Page 56, section 5.3." msgstr "" " **失敗** FormatVersion ã¯å¿…é ˆ\n" " å‚ç…§: 56 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" #, c-format msgid "" " **FAIL** REQUIRED ImageableArea for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 102, section 5.15." msgstr "" " **失敗** PageSize %s ã« ImageableArea ã¯å¿…é ˆ\n" " å‚ç…§: 41 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5。\n" " å‚ç…§: 102 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.15。" msgid "" " **FAIL** REQUIRED LanguageEncoding\n" " REF: Pages 56-57, section 5.3." msgstr "" " **失敗** LanguageEncoding ã¯å¿…é ˆ\n" " å‚ç…§: 56-57 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** REQUIRED LanguageVersion\n" " REF: Pages 57-58, section 5.3." msgstr "" " **失敗** LanguageVersion ã¯å¿…é ˆ\n" " å‚ç…§: 57-58 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** REQUIRED Manufacturer\n" " REF: Pages 58-59, section 5.3." msgstr "" " **失敗** Manufacturer ã¯å¿…é ˆ\n" " å‚ç…§: 58-59 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** REQUIRED ModelName\n" " REF: Pages 59-60, section 5.3." msgstr "" " **失敗** ModelName ã¯å¿…é ˆ\n" " å‚ç…§: 59-60 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** REQUIRED NickName\n" " REF: Page 60, section 5.3." msgstr "" " **失敗** NickName ã¯å¿…é ˆ\n" " å‚ç…§: 60 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** REQUIRED PCFileName\n" " REF: Pages 61-62, section 5.3." msgstr "" " **失敗** PCFileName ã¯å¿…é ˆ\n" " å‚ç…§: 61-62 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** REQUIRED PSVersion\n" " REF: Pages 62-64, section 5.3." msgstr "" " **失敗** PSVersion ã¯å¿…é ˆ\n" " å‚ç…§: 62-64 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** REQUIRED PageRegion\n" " REF: Page 100, section 5.14." msgstr "" " **失敗** PageRegion ã¯å¿…é ˆ\n" " å‚ç…§: 100 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.14。" msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Page 41, section 5.\n" " REF: Page 99, section 5.14." msgstr "" " **失敗** PageSize ã¯å¿…é ˆ\n" " å‚ç…§: 41 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5。\n" " å‚ç…§: 99 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.14。" msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Pages 99-100, section 5.14." msgstr "" " **失敗** PageSize ã¯å¿…é ˆ\n" " å‚ç…§: 99-100 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.14。" #, c-format msgid "" " **FAIL** REQUIRED PaperDimension for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 103, section 5.15." msgstr "" " **失敗** PageSize %s ã« PaperDimension ã¯å¿…é ˆ\n" " å‚ç…§: 41 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5。\n" " å‚ç…§: 103 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.15。" msgid "" " **FAIL** REQUIRED Product\n" " REF: Page 62, section 5.3." msgstr "" " **失敗** Product ã¯å¿…é ˆ\n" " å‚ç…§: 62 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" msgid "" " **FAIL** REQUIRED ShortNickName\n" " REF: Page 64-65, section 5.3." msgstr "" " **失敗** ShortNickName ã¯å¿…é ˆ\n" " å‚ç…§: 64-65 ページã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 5.3。" #, c-format msgid " **FAIL** Unable to open PPD file - %s on line %d." msgstr "" " 失敗\n" " **失敗** PPD ファイルを開ã‘ã¾ã›ã‚“ - %s (%d 行)。" #, c-format msgid " %d ERRORS FOUND" msgstr " %d 個ã®ã‚¨ãƒ©ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ" msgid " -h Show program usage" msgstr " -h ã“ã®ãƒ—ログラムã®åˆ©ç”¨æ³•を表示ã™ã‚‹" #, c-format msgid "" " Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:" msgstr "" " 䏿­£ãª %%%%BoundingBox: (%d 行)。\n" " å‚ç…§: 39 ページã€%%%%BoundingBox:" #, c-format msgid "" " Bad %%%%Page: on line %d.\n" " REF: Page 53, %%%%Page:" msgstr "" " 䏿­£ãª %%%%Page: (%d 行)。\n" " å‚ç…§: 53 ページã€%%%%Page:" #, c-format msgid "" " Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:" msgstr "" " 䏿­£ãª %%%%Pages: (%d 行)。\n" " REF: Page 43, %%%%Pages:" #, c-format msgid "" " Line %d is longer than 255 characters (%d).\n" " REF: Page 25, Line Length" msgstr "" " %d 行㌠255文字より長ããªã£ã¦ã„ã¾ã™ (%d)。\n" " å‚ç…§: 25 ページã€Line Length" msgid "" " Missing %!PS-Adobe-3.0 on first line.\n" " REF: Page 17, 3.1 Conforming Documents" msgstr "" " 先頭行㫠%!PS-Adobe-3.0 ãŒã‚りã¾ã›ã‚“。\n" " å‚ç…§: 17 ページã€3.1 Conforming Documents" #, c-format msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments" msgstr "" " %%EndComments コメントãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。\n" " å‚ç…§: 41 ページã€%%EndComments" #, c-format msgid "" " Missing or bad %%BoundingBox: comment.\n" " REF: Page 39, %%BoundingBox:" msgstr "" " %%BoundingBox: コメントãŒè¦‹ã¤ã‹ã‚‰ãªã„ã‹ä¸æ­£ã§ã™ã€‚\n" " å‚ç…§: 39 ページã€%%BoundingBox:" #, c-format msgid "" " Missing or bad %%Page: comments.\n" " REF: Page 53, %%Page:" msgstr "" " %%Page: コメントãŒè¦‹ã¤ã‹ã‚‰ãªã„ã‹ä¸æ­£ã§ã™ã€‚\n" " å‚ç…§: 53 ページã€%%Page:" #, c-format msgid "" " Missing or bad %%Pages: comment.\n" " REF: Page 43, %%Pages:" msgstr "" " %%Pages: コメントãŒè¦‹ã¤ã‹ã‚‰ãªã„ã‹ä¸æ­£ã§ã™ã€‚\n" " å‚ç…§: 43 ページã€%%Pages:" msgid " NO ERRORS FOUND" msgstr " エラーã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" #, c-format msgid " Saw %d lines that exceeded 255 characters." msgstr " 255文字を超ãˆã‚‹ %d 行ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚" #, c-format msgid " Too many %%BeginDocument comments." msgstr " %%BeginDocument コメントãŒå¤šã™ãŽã¾ã™ã€‚" #, c-format msgid " Too many %%EndDocument comments." msgstr " %%EndDocument コメントãŒå¤šã™ãŽã¾ã™ã€‚" msgid " Warning: file contains binary data." msgstr " 警告: ファイルã«ãƒã‚¤ãƒŠãƒªãƒ‡ãƒ¼ã‚¿ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #, c-format msgid " Warning: no %%EndComments comment in file." msgstr " 警告: ファイル㫠%%EndComments コメントãŒã‚りã¾ã›ã‚“。" #, c-format msgid " Warning: obsolete DSC version %.1f in file." msgstr " 警告: ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ™‚代é…れ㮠DSC ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %.1f ã§ã™ã€‚" msgid " ! expression Unary NOT of expression." msgstr "! <å¼> å¼ã‚’å¦å®šã™ã‚‹å˜é …演算å­ã€‚" msgid " ( expressions ) Group expressions." msgstr " ( <複数ã®å¼> ) グループ化ã•れãŸè¤‡æ•°ã®å¼ã€‚" msgid " --[no-]debug-logging Turn debug logging on/off." msgstr " --[no-]debug-logging デãƒãƒƒã‚°ãƒ­ã‚°ã®æœ‰åй/無効を切り替ãˆã‚‹ã€‚" msgid " --[no-]remote-admin Turn remote administration on/off." msgstr " --[no-]remote-admin リモート管ç†ã®æœ‰åй/無効を切り替ãˆã‚‹ã€‚" msgid " --[no-]remote-any Allow/prevent access from the Internet." msgstr "" " --[no-]remote-any インターãƒãƒƒãƒˆã‹ã‚‰ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯/ç¦æ­¢ã™ã‚‹ã€‚" msgid " --[no-]share-printers Turn printer sharing on/off." msgstr " --[no-]share-printers ãƒ—ãƒªãƒ³ã‚¿ãƒ¼å…±æœ‰ã®æœ‰åй/無効を切り替ãˆã‚‹ã€‚" msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job." msgstr "" " --[no-]user-cancel-any ã‚らゆるジョブã®ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã‚’ユーザーã«è¨±å¯/ç¦æ­¢ã™ã‚‹" msgid " --cr End lines with CR (Mac OS 9)." msgstr " --cr 行末を CR ã¨ã™ã‚‹ (Mac OS 9)。" msgid " --crlf End lines with CR + LF (Windows)." msgstr " --crlf 行末を CR + LF ã¨ã™ã‚‹ (Windows)。" msgid " --domain regex Match domain to regular expression." msgstr " --domain <æ­£è¦è¡¨ç¾> ãƒ‰ãƒ¡ã‚¤ãƒ³ãŒæ­£è¦è¡¨ç¾ã«ãƒžãƒƒãƒã™ã‚‹ã‹ã€‚" msgid "" " --exec utility [argument ...] ;\n" " Execute program if true." msgstr "" " --exec <実行ファイルå> [引数 ...] ;\n" " æˆåŠŸã—ãŸå ´åˆã€<実行ファイルå>を実行ã™ã‚‹ã€‚" msgid " --false Always false." msgstr " --false 常ã«å¤±æ•—。" msgid " --help Show help." msgstr " --help ヘルプを表示ã™ã‚‹ã€‚" msgid " --help Show this help." msgstr " --help ã“ã®ãƒ˜ãƒ«ãƒ—を表示ã™ã‚‹ã€‚" msgid " --host regex Match hostname to regular expression." msgstr " --host <æ­£è¦è¡¨ç¾> ホストåãŒæ­£è¦è¡¨ç¾ã«ãƒžãƒƒãƒã™ã‚‹ã‹ã€‚" msgid " --lf End lines with LF (UNIX/Linux/macOS)." msgstr "" msgid " --list-filters List filters that will be used." msgstr " --list-filters 使用ã•れるフィルターã®ãƒªã‚¹ãƒˆã‚’表示ã™ã‚‹ã€‚" msgid " --local True if service is local." msgstr " --local サービスãŒãƒ­ãƒ¼ã‚«ãƒ«ãªã‚‰çœŸã€‚" msgid " --ls List attributes." msgstr " --ls 属性ã®ä¸€è¦§ã‚’表示ã™ã‚‹ã€‚" msgid " --name regex Match service name to regular expression." msgstr " --name <æ­£è¦è¡¨ç¾> サービスåãŒæ­£è¦è¡¨ç¾ã¨ãƒžãƒƒãƒã™ã‚‹ã‹ã€‚" msgid " --not expression Unary NOT of expression." msgstr " --not <å¼> å¼ã‚’å¦å®šã™ã‚‹å˜é …演算å­ã€‚" msgid " --path regex Match resource path to regular expression." msgstr " --path <æ­£è¦è¡¨ç¾> リソースã®ãƒ‘ã‚¹ãŒæ­£è¦è¡¨ç¾ã¨ãƒžãƒƒãƒã™ã‚‹ã‹ã€‚" msgid " --port number[-number] Match port to number or range." msgstr "" " --port 番å·[-番å·] ãƒãƒ¼ãƒˆãŒæŒ‡å®šã•れãŸç•ªå·ã¾ãŸã¯ç¯„囲ã¨ãƒžãƒƒãƒã™ã‚‹ã‹ã€‚" msgid " --print Print URI if true." msgstr " --print çµæžœãŒçœŸãªã‚‰ URI を表示ã™ã‚‹ã€‚" msgid " --print-name Print service name if true." msgstr " --print-name çµæžœãŒçœŸãªã‚‰ã‚µãƒ¼ãƒ“スåを表示ã™ã‚‹ã€‚" msgid " --quiet Quietly report match via exit code." msgstr "" " --quiet マッãƒçµæžœã‚’終了コードã§å ±å‘Šã—ã€å‡ºåŠ›ã‚’ã—ãªã„。" msgid " --remote True if service is remote." msgstr " --remote サービスãŒãƒªãƒ¢ãƒ¼ãƒˆãªã‚‰çœŸã€‚" msgid "" " --stop-after-include-error\n" " Stop tests after a failed INCLUDE." msgstr "" " --stop-after-include-error\n" " INCLUDE ãŒå¤±æ•—ã—ãŸã¨ããƒ†ã‚¹ãƒˆã‚’åœæ­¢ã™ã‚‹ã€‚" msgid " --true Always true." msgstr " --true 常ã«çœŸã€‚" msgid " --txt key True if the TXT record contains the key." msgstr " --txt <キーå> TXT レコードãŒã‚­ãƒ¼åã‚’å«ã‚“ã§ã„ãŸã‚‰çœŸã€‚" msgid " --txt-* regex Match TXT record key to regular expression." msgstr "" " --txt-* <æ­£è¦è¡¨ç¾> TXT レコードã®ã‚­ãƒ¼ãŒæ­£è¦è¡¨ç¾ã¨ãƒžãƒƒãƒã—ãŸã‚‰çœŸã€‚" msgid " --uri regex Match URI to regular expression." msgstr " --uri <æ­£è¦è¡¨ç¾> URI ãŒæ­£è¦è¡¨ç¾ã¨ãƒžãƒƒãƒã™ã‚‹ã‹ã€‚" msgid " --version Show program version." msgstr " --version プログラムã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’表示。" msgid " --version Show version." msgstr " --version ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’表示ã™ã‚‹ã€‚" msgid " -4 Connect using IPv4." msgstr " -4 IPv4 ã§æŽ¥ç¶šã™ã‚‹ã€‚" msgid " -6 Connect using IPv6." msgstr " -6 IPv6 ã§æŽ¥ç¶šã™ã‚‹ã€‚" msgid " -C Send requests using chunking (default)." msgstr "" " -C chunking を用ã„ã¦ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ã‚‹ (デフォルト)。" msgid " -D Remove the input file when finished." msgstr " -D 終了ã—ãŸã¨ãã«å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å‰Šé™¤ã™ã‚‹ã€‚" msgid " -D name=value Set named variable to value." msgstr "" " -D name=value name ã§æŒ‡å®šã•れãŸå¤‰æ•°ã«å€¤ value をセットã™ã‚‹ã€‚" msgid " -E Encrypt the connection." msgstr " -E 接続を暗å·åŒ–ã™ã‚‹ã€‚" msgid "" " -E Test with encryption using HTTP Upgrade to TLS." msgstr "" msgid "" " -F Run in the foreground but detach from console." msgstr "" " -F フォアグラウンドã§å®Ÿè¡Œã™ã‚‹ãŒã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã‹ã‚‰ã¯ãƒ‡ã‚¿ãƒƒ" "ãƒã™ã‚‹ã€‚" msgid " -H samba-server Use the named SAMBA server." msgstr " -H sambaサーãƒãƒ¼ 指定㮠SAMBA サーãƒãƒ¼ã‚’使ã†ã€‚" msgid " -I Ignore errors." msgstr " -I エラーを無視ã™ã‚‹ã€‚" msgid " -I include-dir Add include directory to search path." msgstr "" " -I include-dir インクルードディレクトリーを検索パスã«å«ã‚る。" msgid " -I {filename,filters,none,profiles}" msgstr " -I {filename,filters,none,profiles}" msgid " -L Send requests using content-length." msgstr " -L content-length を用ã„ã¦ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ã‚‹ã€‚" msgid "" " -P filename.plist Produce XML plist to a file and test report to " "standard output." msgstr "" " -P filename.plist XML ã® plist å½¢å¼ã§æ›¸ã出ã—テストリãƒãƒ¼ãƒˆã‚’標準出力" "ã«ã™ã‚‹ã€‚" msgid " -P filename.ppd Set PPD file." msgstr " -P filename.ppd PPD ファイルを指定ã™ã‚‹ã€‚" msgid " -P number[-number] Match port to number or range." msgstr "" " -P 番å·[-番å·] ãƒãƒ¼ãƒˆãŒæŒ‡å®šã•れãŸç•ªå·ã¾ãŸã¯ç¯„囲ã¨ãƒžãƒƒãƒã™ã‚‹ã‹ã€‚" msgid " -R root-directory Set alternate root." msgstr " -R root-directory 別ã®ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’指定ã™ã‚‹ã€‚" msgid " -S Test with encryption using HTTPS." msgstr "" msgid " -T seconds Set the browse timeout in seconds." msgstr " -T <ç§’> ブラウズã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’ç§’ã§æŒ‡å®šã™ã‚‹ã€‚" msgid " -T seconds Set the receive/send timeout in seconds." msgstr " -T seconds å—ä¿¡ï¼é€ä¿¡ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’ç§’ã§æŒ‡å®šã™ã‚‹ã€‚" msgid " -U username Specify username." msgstr " -U username ユーザーåを指定ã™ã‚‹ã€‚" msgid " -V version Set default IPP version." msgstr " -V version デフォルト㮠IPP ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’指定ã™ã‚‹ã€‚" msgid "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgstr "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgid " -X Produce XML plist instead of plain text." msgstr " -X プレーンテキストã®ä»£ã‚り㫠XML を用ã„る。" msgid " -a Export all printers." msgstr " -a ã™ã¹ã¦ã®ãƒ—リンターをエクスãƒãƒ¼ãƒˆã™ã‚‹ã€‚" msgid " -c Produce CSV output." msgstr " -c CSV 出力を行ã†ã€‚" msgid " -c catalog.po Load the specified message catalog." msgstr " -c catalog.po 指定ã—ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚«ã‚¿ãƒ­ã‚°ã‚’ロードã™ã‚‹ã€‚" msgid " -c cups-files.conf Set cups-files.conf file to use." msgstr " -c cups-files.conf cups-files.conf を利用ã™ã‚‹ã‚ˆã†è¨­å®šã™ã‚‹ã€‚" msgid " -c cupsd.conf Set cupsd.conf file to use." msgstr " -c cupsd.conf 使用ã™ã‚‹ cupsd.conf ファイルを指定ã™ã‚‹ã€‚" msgid " -d name=value Set named variable to value." msgstr "" " -d name=value name ã§æŒ‡å®šã•れãŸå¤‰æ•°ã«å€¤ value をセットã™ã‚‹ã€‚" msgid " -d output-dir Specify the output directory." msgstr " -d output-dir 出力先ディレクトリーを指定ã™ã‚‹ã€‚" msgid " -d printer Use the named printer." msgstr " -d printer 指定ã•れãŸãƒ—リンターを利用ã™ã‚‹ã€‚" msgid " -d regex Match domain to regular expression." msgstr " -d <æ­£è¦è¡¨ç¾> ãƒ‰ãƒ¡ã‚¤ãƒ³ãŒæ­£è¦è¡¨ç¾ã«ãƒžãƒƒãƒã™ã‚‹ã‹ã€‚" msgid " -e Use every filter from the PPD file." msgstr "" " -e PPD ファイルã‹ã‚‰ã™ã¹ã¦ã®ãƒ•ィルターを使用ã™ã‚‹ã€‚" msgid " -f Run in the foreground." msgstr " -f フォアグラウンドã§å®Ÿè¡Œã™ã‚‹ã€‚" msgid " -f filename Set default request filename." msgstr " -f filename デフォルトã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ•ァイルåを指定ã™ã‚‹ã€‚" msgid " -h Show this usage message." msgstr " -h ã“ã®ãƒ˜ãƒ«ãƒ—メッセージを表示ã™ã‚‹ã€‚" msgid " -h Validate HTTP response headers." msgstr "" msgid " -h regex Match hostname to regular expression." msgstr " -h <æ­£è¦è¡¨ç¾> ホストåãŒæ­£è¦è¡¨ç¾ã«ãƒžãƒƒãƒã™ã‚‹ã‹ã€‚" msgid " -h server[:port] Specify server address." msgstr " -h server[:port] サーãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã™ã‚‹ã€‚" msgid " -i mime/type Set input MIME type (otherwise auto-typed)." msgstr "" " -i mime/type 入力㮠MIME タイプを指定ã™ã‚‹ (指定ãŒãªã‘れã°è‡ªå‹•ã‚¿" "イプ)。" msgid "" " -i seconds Repeat the last file with the given time interval." msgstr "" " -i seconds 最後ã®ãƒ•ァイルを与ãˆã‚‰ã‚ŒãŸæ™‚é–“é–“éš”ã§ç¹°ã‚Šè¿”ã™ã€‚" msgid "" " -j job-id[,N] Filter file N from the specified job (default is " "file 1)." msgstr "" " -j job-id[,N] フィルターファイル N を指定ã•れãŸã‚¸ãƒ§ãƒ–ã‹ã‚‰ä½¿ç”¨ã™" "ã‚‹ (デフォルト㯠ファイル 1)。" msgid " -l List attributes." msgstr " -l 属性ã®ä¸€è¦§ã‚’表示ã™ã‚‹ã€‚" msgid " -l Produce plain text output." msgstr " -l プレーンテキスト出力を行ã†ã€‚" msgid " -l Run cupsd on demand." msgstr " -l cupsd をオンデマンドã§å®Ÿè¡Œã™ã‚‹ã€‚" msgid " -l lang[,lang,...] Specify the output language(s) (locale)." msgstr " -l lang[,lang,...] 出力言語を指定ã™ã‚‹ã€‚(複数å¯èƒ½)" msgid " -m Use the ModelName value as the filename." msgstr " -m ModelName ã®å€¤ã‚’ファイルåã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã€‚" msgid "" " -m mime/type Set output MIME type (otherwise application/pdf)." msgstr "" " -m mime/type 出力㮠MIME タイプを指定ã™ã‚‹ (指定ãŒãªã‘れ㰠" "application/pdf)。" msgid " -n copies Set number of copies." msgstr " -n copies 部数を指定ã™ã‚‹ã€‚" msgid "" " -n count Repeat the last file the given number of times." msgstr " -n count 最後ã®ãƒ•ァイルを与ãˆã‚‰ã‚ŒãŸå›žæ•°ã ã‘繰り返ã™ã€‚" msgid " -n regex Match service name to regular expression." msgstr " -n <æ­£è¦è¡¨ç¾> サービスåãŒæ­£è¦è¡¨ç¾ã¨ãƒžãƒƒãƒã™ã‚‹ã‹ã€‚" msgid "" " -o filename.drv Set driver information file (otherwise ppdi.drv)." msgstr "" " -o filename.drv ドライãƒãƒ¼æƒ…報ファイルを指定ã™ã‚‹ (指定ãŒãªã‘れ㰠" "ppdi.drv)。" msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)." msgstr "" " -o filename.ppd[.gz] 出力ファイルを指定ã™ã‚‹ (指定ãŒãªã‘ã‚Œã°æ¨™æº–出力)。" msgid " -o name=value Set option(s)." msgstr " -o name=value オプションを指定ã™ã‚‹ã€‚" msgid " -p Print URI if true." msgstr " -p çµæžœãŒçœŸãªã‚‰ URI を表示ã™ã‚‹ã€‚" msgid " -p filename.ppd Set PPD file." msgstr " -p filename.ppd PPD ファイルを指定ã™ã‚‹ã€‚" msgid " -q Quietly report match via exit code." msgstr "" " -q マッãƒçµæžœã‚’終了コードã§å ±å‘Šã—ã€å‡ºåŠ›ã‚’ã—ãªã„。" msgid " -q Run silently." msgstr " -q 詳細ã¯è¡¨ç¤ºã—ãªã„。" msgid " -r True if service is remote." msgstr " -r サービスãŒãƒªãƒ¢ãƒ¼ãƒˆãªã‚‰çœŸã€‚" msgid " -r Use 'relaxed' open mode." msgstr " -r 寛容モードを用ã„る。" msgid " -s Print service name if true." msgstr " -s çµæžœãŒçœŸãªã‚‰ã‚µãƒ¼ãƒ“スåを表示ã™ã‚‹ã€‚" msgid " -s cups-files.conf Set cups-files.conf file to use." msgstr "" msgid " -t Produce a test report." msgstr " -t テストリãƒãƒ¼ãƒˆã‚’出力ã™ã‚‹ã€‚" msgid " -t Test PPDs instead of generating them." msgstr " -t PPD を出力ã—ãªã„ã§ãƒ†ã‚¹ãƒˆã™ã‚‹ã€‚" msgid " -t Test the configuration file." msgstr " -t 設定ファイルをテストã™ã‚‹ã€‚" msgid " -t key True if the TXT record contains the key." msgstr " -t <キーå> TXT レコードãŒã‚­ãƒ¼åã‚’å«ã‚“ã§ã„ãŸã‚‰çœŸã€‚" msgid " -t title Set title." msgstr " -t title タイトルを指定ã™ã‚‹ã€‚" msgid " -u Remove the PPD file when finished." msgstr " -u 終了ã—ãŸã¨ãã« PPD ファイルを削除ã™ã‚‹ã€‚" msgid " -u regex Match URI to regular expression." msgstr " -u <æ­£è¦è¡¨ç¾> URI ãŒæ­£è¦è¡¨ç¾ã¨ãƒžãƒƒãƒã™ã‚‹ã‹ã€‚" msgid " -v Be verbose." msgstr " -v 冗長出力を行ã†ã€‚" msgid " -vv Be very verbose." msgstr " -vv より冗長ãªå‡ºåŠ›ã‚’è¡Œã†ã€‚" msgid "" " -x utility [argument ...] ;\n" " Execute program if true." msgstr "" " -x <実行ファイルå> [引数 ...] ;\n" " æˆåŠŸã—ãŸå ´åˆã€<実行ファイルå> を実行ã™ã‚‹ã€‚" msgid " -z Compress PPD files using GNU zip." msgstr " -z PPD ファイルを GNU zip を使ã£ã¦åœ§ç¸®ã™ã‚‹ã€‚" msgid " IPPFIND_SERVICE_DOMAIN Domain name" msgstr " IPPFIND_SERVICE_DOMAIN ドメインå" msgid "" " IPPFIND_SERVICE_HOSTNAME\n" " Fully-qualified domain name" msgstr "" " IPPFIND_SERVICE_HOSTNAME\n" " 完全修飾ドメインå (FQDN)" msgid " IPPFIND_SERVICE_NAME Service instance name" msgstr " IPPFIND_SERVICE_NAME サービスインスタンスå" msgid " IPPFIND_SERVICE_PORT Port number" msgstr " IPPFIND_SERVICE_PORT ãƒãƒ¼ãƒˆç•ªå·" msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type" msgstr " IPPFIND_SERVICE_REGTYPE DNS-SD 登録タイプ" msgid " IPPFIND_SERVICE_SCHEME URI scheme" msgstr " IPPFIND_SERVICE_SCHEME URI スキーム" msgid " IPPFIND_SERVICE_URI URI" msgstr " IPPFIND_SERVICE_URI URI" msgid " IPPFIND_TXT_* Value of TXT record key" msgstr " IPPFIND_TXT_* TXT レコードキーã®å€¤" msgid "" " expression --and expression\n" " Logical AND." msgstr " <å¼> --and <å¼> è«–ç† AND。" msgid "" " expression --or expression\n" " Logical OR." msgstr " <å¼> --or <å¼> è«–ç† OR。" msgid " expression expression Logical AND." msgstr " <å¼> <å¼> è«–ç† AND。" msgid " {service_domain} Domain name" msgstr " {service_domain} ドメインå" msgid " {service_hostname} Fully-qualified domain name" msgstr " {service_hostname} 完全修飾ドメインå (FQDN)" msgid " {service_name} Service instance name" msgstr " {service_name} サービスインスタンスå" msgid " {service_port} Port number" msgstr " {service_port} ãƒãƒ¼ãƒˆç•ªå·" msgid " {service_regtype} DNS-SD registration type" msgstr " {service_regtype} DNS-SD 登録タイプ" msgid " {service_scheme} URI scheme" msgstr " {service_scheme} URI スキーム" msgid " {service_uri} URI" msgstr " {service_uri} URI" msgid " {txt_*} Value of TXT record key" msgstr " {txt_*} TXT レコードキーã®å€¤" msgid " {} URI" msgstr " {} URI" msgid " FAIL" msgstr " 失敗" msgid " PASS" msgstr " åˆæ ¼" #, c-format msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section " "5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." msgstr "" #, c-format msgid "" "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 " "section 5.1.14)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section " "5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " "positive (RFC 8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC " "8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes" msgstr "%-7s %-7.7s %-7d %-31.31s %.0f ãƒã‚¤ãƒˆ" #, c-format msgid "%d x %d mm" msgstr "%d x %d mm" #, c-format msgid "%g x %g \"" msgstr "" #, c-format msgid "%s (%s)" msgstr "%s (%s)" #, c-format msgid "%s (%s, %s)" msgstr "%s (%s, %s)" #, c-format msgid "%s (Borderless)" msgstr "%s (ãµã¡ãªã—)" #, c-format msgid "%s (Borderless, %s)" msgstr "%s (ãµã¡ãªã—, %s)" #, c-format msgid "%s (Borderless, %s, %s)" msgstr "%s (ãµã¡ãªã—, %s, %s)" #, c-format msgid "%s accepting requests since %s" msgstr "%s 㯠%s ã‹ã‚‰ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’å—ã‘付ã‘ã¦ã„ã¾ã™" #, c-format msgid "%s cannot be changed." msgstr "%s ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" #, c-format msgid "%s is not implemented by the CUPS version of lpc." msgstr "%s 㯠lpc ã® CUPS ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“。" #, c-format msgid "%s is not ready" msgstr "%s ã¯æº–å‚™ãŒã§ãã¦ã„ã¾ã›ã‚“" #, c-format msgid "%s is ready" msgstr "%s ã¯æº–å‚™ãŒã§ãã¦ã„ã¾ã™" #, c-format msgid "%s is ready and printing" msgstr "%s ã¯æº–å‚™ãŒã§ãã¦ãŠã‚Šå°åˆ·ã—ã¦ã„ã¾ã™" #, c-format msgid "%s job-id user title copies options [file]" msgstr "%s ジョブID ユーザー タイトル コピー数 オプション [ファイル]" #, c-format msgid "%s not accepting requests since %s -" msgstr "%s 㯠%s ã‹ã‚‰ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’å—ã‘付ã‘ã¦ã„ã¾ã›ã‚“ -" #, c-format msgid "%s not supported." msgstr "%s ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。" #, c-format msgid "%s/%s accepting requests since %s" msgstr "%s/%s 㯠%s ã‹ã‚‰ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’å—ã‘付ã‘ã¦ã„ã¾ã™" #, c-format msgid "%s/%s not accepting requests since %s -" msgstr "%s/%s 㯠%s ã‹ã‚‰ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’å—ã‘付ã‘ã¦ã„ã¾ã›ã‚“ - " #, c-format msgid "%s: %-33.33s [job %d localhost]" msgstr "%s:%-33.33s [ジョブ %d localhost]" #. TRANSLATORS: Message is "subject: error" #, c-format msgid "%s: %s" msgstr "%s: %s" #, c-format msgid "%s: %s failed: %s" msgstr "%s: %s ã«å¤±æ•—ã—ã¾ã—ãŸ: %s" #, c-format msgid "%s: Bad printer URI \"%s\"." msgstr "" #, c-format msgid "%s: Bad version %s for \"-V\"." msgstr "%s: -V オプションã«ãŠã„㦠%s ã¯ä¸æ­£ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ã€‚" #, c-format msgid "%s: Don't know what to do." msgstr "%s: 何ãŒèµ·ãã¦ã„ã‚‹ã‹ä¸æ˜Žã§ã™ã€‚" #, c-format msgid "%s: Error - %s" msgstr "" #, c-format msgid "" "%s: Error - %s environment variable names non-existent destination \"%s\"." msgstr "%s: エラー - 環境変数 %s ãŒå­˜åœ¨ã—ãªã„宛先 \"%s\" を指ã—ã¦ã„ã¾ã™ã€‚" #, c-format msgid "%s: Error - add '/version=1.1' to server name." msgstr "%s: エラー - '/version=1.1' をサーãƒãƒ¼åã«ä»˜ä¸Žã—ã¦ãã ã•ã„。" #, c-format msgid "%s: Error - bad job ID." msgstr "%s: エラー - 䏿­£ãªã‚¸ãƒ§ãƒ– ID ã§ã™ã€‚" #, c-format msgid "%s: Error - cannot print files and alter jobs simultaneously." msgstr "" "%s: エラー - ファイルをå°åˆ·ã§ããšã€ã‚¸ãƒ§ãƒ–ã‚’åŒæ™‚ã«å¤‰ãˆã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。" #, c-format msgid "%s: Error - cannot print from stdin if files or a job ID are provided." msgstr "" "%s: エラー - ファイルã¾ãŸã¯ã‚¸ãƒ§ãƒ– ID ãŒæä¾›ã•れã¦ã„ã‚‹å ´åˆã€æ¨™æº–入力ã‹ã‚‰å°åˆ·ã§" "ãã¾ã›ã‚“。 " #, c-format msgid "%s: Error - copies must be 1 or more." msgstr "" #, c-format msgid "%s: Error - expected character set after \"-S\" option." msgstr "%s: エラー - \"-S\" オプションã®ã‚ã¨ã«ã¯æ–‡å­—セットãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected content type after \"-T\" option." msgstr "%s: エラー - \"-T\" オプションã®ã‚ã¨ã«ã¯ã‚³ãƒ³ãƒ†ãƒ³ãƒ„タイプãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected copies after \"-#\" option." msgstr "%s: エラー - \"-#\" オプションã®ã‚ã¨ã«ã¯ã‚³ãƒ”ー数ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected copies after \"-n\" option." msgstr "%s: エラー - \"-n\" オプションã®ã‚ã¨ã«ã¯ã‚³ãƒ”ー数ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected destination after \"-P\" option." msgstr "%s: エラー - \"-P\" オプションã®ã‚ã¨ã«ã¯å®›å…ˆãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected destination after \"-d\" option." msgstr "%s: エラー - \"-d\" オプションã®ã‚ã¨ã«ã¯ãƒ—リンターåãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected form after \"-f\" option." msgstr "%s: エラー - \"-f\" オプションã®ã‚ã¨ã«ã¯ç”¨ç´™åãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected hold name after \"-H\" option." msgstr "%s: エラー - \"-H\" オプションã®ã‚ã¨ã«ã¯ãƒ›ãƒ¼ãƒ«ãƒ‰åãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected hostname after \"-H\" option." msgstr "%s: エラー - \"-H\" オプションã®ã‚ã¨ã«ã¯ãƒ›ã‚¹ãƒˆåãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected hostname after \"-h\" option." msgstr "%s: エラー - \"-h\" オプションã®ã‚ã¨ã«ã¯ãƒ›ã‚¹ãƒˆåãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected mode list after \"-y\" option." msgstr "%s: エラー - \"-y\" オプションã®ã‚ã¨ã«ã¯ãƒ¢ãƒ¼ãƒ‰ãƒªã‚¹ãƒˆãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected name after \"-%c\" option." msgstr "%s: エラー - \"-%c\" オプションã®ã‚ã¨ã«ã¯åå‰ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected option=value after \"-o\" option." msgstr "%s: エラー - \"-o\" オプションã®ã‚ã¨ã«ã¯ オプション=値 ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected page list after \"-P\" option." msgstr "%s: エラー - \"-P\" オプションã®ã‚ã¨ã«ã¯ãƒšãƒ¼ã‚¸ãƒªã‚¹ãƒˆãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected priority after \"-%c\" option." msgstr "%s: エラー - \"-%c\" オプションã®ã‚ã¨ã«ã¯å„ªå…ˆåº¦ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected reason text after \"-r\" option." msgstr "%s: エラー - \"-r\" ã®ã‚ã¨ã«ã¯ç†ç”±ã®ãƒ†ã‚­ã‚¹ãƒˆãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected title after \"-t\" option." msgstr "%s: エラー - \"-t\" オプションã®ã‚ã¨ã«ã¯ã‚¿ã‚¤ãƒˆãƒ«ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected username after \"-U\" option." msgstr "%s: エラー - \"-U\" オプションã®ã‚ã¨ã«ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected username after \"-u\" option." msgstr "%s: エラー - \"-u\" オプションã®ã‚ã¨ã«ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - expected value after \"-%c\" option." msgstr "%s: エラー - \"-%c\" オプションã®ã‚ã¨ã«ã¯å€¤ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "" "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" " "option." msgstr "" "%s: エラー - \"-W\" オプションã®ã‚ã¨ã«ã¯ã€\"completed\"ã€\"not-completed" "\"ã€\"all\" ã®ã„ãšã‚Œã‹ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Error - no default destination available." msgstr "%s: エラー - 利用å¯èƒ½ãªãƒ‡ãƒ•ォルトã®å®›å…ˆãŒã‚りã¾ã›ã‚“。" #, c-format msgid "%s: Error - priority must be between 1 and 100." msgstr "%s: エラー - 優先度㯠1 ã‹ã‚‰ 100 ã®é–“ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #, c-format msgid "%s: Error - scheduler not responding." msgstr "%s: エラー - スケジューラーãŒå¿œç­”ã—ã¦ã„ã¾ã›ã‚“。" #, c-format msgid "%s: Error - too many files - \"%s\"." msgstr "%s: エラー - ファイルãŒå¤šã™ãŽã¾ã™ - \"%s\"" #, c-format msgid "%s: Error - unable to access \"%s\" - %s" msgstr "%s: エラー - \"%s\" ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“ - %s" #, c-format msgid "%s: Error - unable to queue from stdin - %s." msgstr "%s: エラー - 標準入力ã‹ã‚‰ã‚­ãƒ¥ãƒ¼ã«ãƒ‡ãƒ¼ã‚¿ã‚’入力ã§ãã¾ã›ã‚“。 - %s" #, c-format msgid "%s: Error - unknown destination \"%s\"." msgstr "%s: エラー - \"%s\" ã¯æœªçŸ¥ã®å®›å…ˆã§ã™ã€‚" #, c-format msgid "%s: Error - unknown destination \"%s/%s\"." msgstr "%s: エラー - \"%s/%s\" ã¯æœªçŸ¥ã®å®›å…ˆã§ã™ã€‚" #, c-format msgid "%s: Error - unknown option \"%c\"." msgstr "%s: エラー - '%c' ã¯æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™ã€‚" #, c-format msgid "%s: Error - unknown option \"%s\"." msgstr "%s: エラー - '%s' ã¯æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™ã€‚" #, c-format msgid "%s: Expected job ID after \"-i\" option." msgstr "%s: '-i' オプションã®ã‚ã¨ã«ã¯ã‚¸ãƒ§ãƒ– ID ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: Invalid destination name in list \"%s\"." msgstr "%s: リスト \"%s\" ã«ç„¡åйãªå®›å…ˆåãŒã‚りã¾ã™ã€‚" #, c-format msgid "%s: Invalid filter string \"%s\"." msgstr "%s: 無効ãªãƒ•ィルター文字列ã§ã™ \"%s\"" #, c-format msgid "%s: Missing filename for \"-P\"." msgstr "%s: \"-P\" ã«ãƒ•ァイルåãŒã‚りã¾ã›ã‚“。" #, c-format msgid "%s: Missing timeout for \"-T\"." msgstr "%s: \"-T\" オプションã«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“。" #, c-format msgid "%s: Missing version for \"-V\"." msgstr "%s: \"-V\" オプションã«ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®æŒ‡å®šãŒã‚りã¾ã›ã‚“。" #, c-format msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"." msgstr "%s: '-H restart' ã®å‰ã«ã¯ã‚¸ãƒ§ãƒ– ID ('-i ジョブID') ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "%s: No filter to convert from %s/%s to %s/%s." msgstr "%s: %s/%s ã‹ã‚‰ %s/%s ã«å¤‰æ›ã™ã‚‹ãƒ•ィルターãŒã‚りã¾ã›ã‚“。" #, c-format msgid "%s: Operation failed: %s" msgstr "%s: æ“作ã«å¤±æ•—ã—ã¾ã—ãŸ: %s" #, c-format msgid "%s: Sorry, no encryption support." msgstr "%s: 残念ãªãŒã‚‰ã€æš—å·åŒ–サãƒãƒ¼ãƒˆã¯ã‚³ãƒ³ãƒ‘イル時ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã›ã‚“。" #, c-format msgid "%s: Unable to connect to \"%s:%d\": %s" msgstr "" #, c-format msgid "%s: Unable to connect to server." msgstr "%s: サーãƒãƒ¼ã«æŽ¥ç¶šã§ãã¾ã›ã‚“" #, c-format msgid "%s: Unable to contact server." msgstr "%s: サーãƒãƒ¼ã«é€£çµ¡ã§ãã¾ã›ã‚“。" #, c-format msgid "%s: Unable to create PPD file: %s" msgstr "" #, c-format msgid "%s: Unable to determine MIME type of \"%s\"." msgstr "%s: \"%s\" ã® MIME タイプを判別ã§ãã¾ã›ã‚“。" #, c-format msgid "%s: Unable to open \"%s\": %s" msgstr "%s: \"%s\" ã‚’é–‹ã‘ã¾ã›ã‚“: %s" #, c-format msgid "%s: Unable to open %s: %s" msgstr "%s: %s ã‚’é–‹ã‘ã¾ã›ã‚“: %s" #, c-format msgid "%s: Unable to open PPD file: %s on line %d." msgstr "%s: PPD ファイルを開ã‘ã¾ã›ã‚“: %s ã® %d 行目" #, c-format msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"." msgstr "" "%s: \"%s\" ã¾ãŸã¯ \"%s\" ã‹ã‚‰ MIME データベースを読ã¿å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。" #, c-format msgid "%s: Unable to resolve \"%s\"." msgstr "" #, c-format msgid "%s: Unknown argument \"%s\"." msgstr "" #, c-format msgid "%s: Unknown destination \"%s\"." msgstr "%s: \"%s\" ã¯æœªçŸ¥ã®å®›å…ˆã§ã™ã€‚" #, c-format msgid "%s: Unknown destination MIME type %s/%s." msgstr "%s: %s/%s ã¯æœªçŸ¥ã®å®›å…ˆ MIME タイプã§ã™ã€‚" #, c-format msgid "%s: Unknown option \"%c\"." msgstr "%s: '%c' ã¯æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™ã€‚" #, c-format msgid "%s: Unknown option \"%s\"." msgstr "%s: \"%s\" ã¯æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™ã€‚" #, c-format msgid "%s: Unknown option \"-%c\"." msgstr "%s: \"-%c\" ã¯æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™ã€‚" #, c-format msgid "%s: Unknown source MIME type %s/%s." msgstr "%s: %s/%s ã¯æœªçŸ¥ã®ã‚½ãƒ¼ã‚¹ MIME タイプã§ã™ã€‚" #, c-format msgid "" "%s: Warning - \"%c\" format modifier not supported - output may not be " "correct." msgstr "" "%s: 警告 - '%c' å½¢å¼ä¿®é£¾å­ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“ - å‡ºåŠ›ã¯æ­£ã—ããªã„ã‚‚ã®ã«ãª" "ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。" #, c-format msgid "%s: Warning - character set option ignored." msgstr "%s: 警告 - 文字セットオプションã¯ç„¡è¦–ã•れã¾ã™ã€‚" #, c-format msgid "%s: Warning - content type option ignored." msgstr "%s: 警告 - コンテンツタイプオプションã¯ç„¡è¦–ã•れã¾ã™ã€‚" #, c-format msgid "%s: Warning - form option ignored." msgstr "%s: 警告 - 用紙オプションã¯ç„¡è¦–ã•れã¾ã™ã€‚" #, c-format msgid "%s: Warning - mode option ignored." msgstr "%s: 警告 - モードオプションã¯ç„¡è¦–ã•れã¾ã™ã€‚" msgid "-1" msgstr "-1" msgid "-10" msgstr "-10" msgid "-100" msgstr "-100" msgid "-105" msgstr "-105" msgid "-11" msgstr "-11" msgid "-110" msgstr "-110" msgid "-115" msgstr "-115" msgid "-12" msgstr "-12" msgid "-120" msgstr "-120" msgid "-13" msgstr "-13" msgid "-14" msgstr "-14" msgid "-15" msgstr "-15" msgid "-2" msgstr "-2" msgid "-20" msgstr "-20" msgid "-25" msgstr "-25" msgid "-3" msgstr "-3" msgid "-30" msgstr "-30" msgid "-35" msgstr "-35" msgid "-4" msgstr "-4" msgid "-40" msgstr "-40" msgid "-45" msgstr "-45" msgid "-5" msgstr "-5" msgid "-50" msgstr "-50" msgid "-55" msgstr "-55" msgid "-6" msgstr "-6" msgid "-60" msgstr "-60" msgid "-65" msgstr "-65" msgid "-7" msgstr "-7" msgid "-70" msgstr "-70" msgid "-75" msgstr "-75" msgid "-8" msgstr "-8" msgid "-80" msgstr "-80" msgid "-85" msgstr "-85" msgid "-9" msgstr "-9" msgid "-90" msgstr "-90" msgid "-95" msgstr "-95" msgid "0" msgstr "0" msgid "1" msgstr "1" msgid "1 inch/sec." msgstr "1 インãƒ/ç§’" msgid "1.25x0.25\"" msgstr "1.25x0.25 インãƒ" msgid "1.25x2.25\"" msgstr "1.25x2.25 インãƒ" msgid "1.5 inch/sec." msgstr "1.5 インãƒ/ç§’" msgid "1.50x0.25\"" msgstr "1.50x0.25 インãƒ" msgid "1.50x0.50\"" msgstr "1.50x0.50 インãƒ" msgid "1.50x1.00\"" msgstr "1.50x1.00 インãƒ" msgid "1.50x2.00\"" msgstr "1.50x2.00 インãƒ" msgid "10" msgstr "10" msgid "10 inches/sec." msgstr "10 インãƒ/ç§’" msgid "10 x 11" msgstr "10 x 11 インãƒ" msgid "10 x 13" msgstr "10 x 13 インãƒ" msgid "10 x 14" msgstr "10 x 14 インãƒ" msgid "100" msgstr "100" msgid "100 mm/sec." msgstr "100 ミリメートル/ç§’" msgid "105" msgstr "105" msgid "11" msgstr "11" msgid "11 inches/sec." msgstr "11 インãƒ/ç§’" msgid "110" msgstr "110" msgid "115" msgstr "115" msgid "12" msgstr "12" msgid "12 inches/sec." msgstr "12 インãƒ/ç§’" msgid "12 x 11" msgstr "12 x 11 インãƒ" msgid "120" msgstr "120" msgid "120 mm/sec." msgstr "120 ミリメートル/ç§’" msgid "120x60dpi" msgstr "120x60dpi" msgid "120x72dpi" msgstr "120x72dpi" msgid "13" msgstr "13" msgid "136dpi" msgstr "136dpi" msgid "14" msgstr "14" msgid "15" msgstr "15" msgid "15 mm/sec." msgstr "15 ミリメートル/ç§’" msgid "15 x 11" msgstr "15 x 11 インãƒ" msgid "150 mm/sec." msgstr "150 ミリメートル/ç§’" msgid "150dpi" msgstr "150dpi" msgid "16" msgstr "16" msgid "17" msgstr "17" msgid "18" msgstr "18" msgid "180dpi" msgstr "180dpi" msgid "19" msgstr "19" msgid "2" msgstr "2" msgid "2 inches/sec." msgstr "2 インãƒ/ç§’" msgid "2-Hole Punch (Landscape)" msgstr "" msgid "2-Hole Punch (Portrait)" msgstr "" msgid "2-Hole Punch (Reverse Landscape)" msgstr "" msgid "2-Hole Punch (Reverse Portrait)" msgstr "" msgid "2-Sided Printing" msgstr "両é¢å°åˆ·" msgid "2.00x0.37\"" msgstr "2.00x0.37 インãƒ" msgid "2.00x0.50\"" msgstr "2.00x0.50 インãƒ" msgid "2.00x1.00\"" msgstr "2.00x1.00 インãƒ" msgid "2.00x1.25\"" msgstr "2.00x1.25 インãƒ" msgid "2.00x2.00\"" msgstr "2.00x2.00 インãƒ" msgid "2.00x3.00\"" msgstr "2.00x3.00 インãƒ" msgid "2.00x4.00\"" msgstr "2.00x4.00 インãƒ" msgid "2.00x5.50\"" msgstr "2.00x5.50 インãƒ" msgid "2.25x0.50\"" msgstr "2.25x0.50 インãƒ" msgid "2.25x1.25\"" msgstr "2.25x1.25 インãƒ" msgid "2.25x4.00\"" msgstr "2.25x4.00 インãƒ" msgid "2.25x5.50\"" msgstr "2.25x5.50 インãƒ" msgid "2.38x5.50\"" msgstr "2.38x5.50 インãƒ" msgid "2.5 inches/sec." msgstr "2.5 インãƒ/ç§’" msgid "2.50x1.00\"" msgstr "2.50x1.00 インãƒ" msgid "2.50x2.00\"" msgstr "2.50x2.00 インãƒ" msgid "2.75x1.25\"" msgstr "2.75x1.25 インãƒ" msgid "2.9 x 1\"" msgstr "2.9 x 1 インãƒ" msgid "20" msgstr "20" msgid "20 mm/sec." msgstr "20 ミリメートル/ç§’" msgid "200 mm/sec." msgstr "200 ミリメートル/ç§’" msgid "203dpi" msgstr "203dpi" msgid "21" msgstr "21" msgid "22" msgstr "22" msgid "23" msgstr "23" msgid "24" msgstr "24" msgid "24-Pin Series" msgstr "24 ピンシリーズ" msgid "240x72dpi" msgstr "240x72dpi" msgid "25" msgstr "25" msgid "250 mm/sec." msgstr "250 ミリメートル/ç§’" msgid "26" msgstr "26" msgid "27" msgstr "27" msgid "28" msgstr "28" msgid "29" msgstr "29" msgid "3" msgstr "3" msgid "3 inches/sec." msgstr "3 インãƒ/ç§’" msgid "3 x 5" msgstr "3 x 5" msgid "3-Hole Punch (Landscape)" msgstr "" msgid "3-Hole Punch (Portrait)" msgstr "" msgid "3-Hole Punch (Reverse Landscape)" msgstr "" msgid "3-Hole Punch (Reverse Portrait)" msgstr "" msgid "3.00x1.00\"" msgstr "3.00x1.00 インãƒ" msgid "3.00x1.25\"" msgstr "3.00x1.25 インãƒ" msgid "3.00x2.00\"" msgstr "3.00x2.00 インãƒ" msgid "3.00x3.00\"" msgstr "3.00x3.00インãƒ" msgid "3.00x5.00\"" msgstr "3.00x5.00 インãƒ" msgid "3.25x2.00\"" msgstr "3.25x2.00 インãƒ" msgid "3.25x5.00\"" msgstr "3.25x5.00 インãƒ" msgid "3.25x5.50\"" msgstr "3.25x5.50 インãƒ" msgid "3.25x5.83\"" msgstr "3.25x5.83 インãƒ" msgid "3.25x7.83\"" msgstr "3.25x7.83 インãƒ" msgid "3.5 x 5" msgstr "3.5 x 5" msgid "3.5\" Disk" msgstr "3.5 インãƒãƒ‡ã‚£ã‚¹ã‚¯" msgid "3.50x1.00\"" msgstr "3.50x1.00 インãƒ" msgid "30" msgstr "30" msgid "30 mm/sec." msgstr "30 ミリメートル/ç§’" msgid "300 mm/sec." msgstr "300 ミリメートル/ç§’" msgid "300dpi" msgstr "300dpi" msgid "35" msgstr "35" msgid "360dpi" msgstr "360dpi" msgid "360x180dpi" msgstr "360x180dpi" msgid "4" msgstr "4" msgid "4 inches/sec." msgstr "4 インãƒ/ç§’" msgid "4-Hole Punch (Landscape)" msgstr "" msgid "4-Hole Punch (Portrait)" msgstr "" msgid "4-Hole Punch (Reverse Landscape)" msgstr "" msgid "4-Hole Punch (Reverse Portrait)" msgstr "" msgid "4.00x1.00\"" msgstr "4.00x1.00 インãƒ" msgid "4.00x13.00\"" msgstr "4.00x13.00 インãƒ" msgid "4.00x2.00\"" msgstr "4.00x2.00 インãƒ" msgid "4.00x2.50\"" msgstr "4.00x2.50 インãƒ" msgid "4.00x3.00\"" msgstr "4.00x3.00 インãƒ" msgid "4.00x4.00\"" msgstr "4.00x4.00 インãƒ" msgid "4.00x5.00\"" msgstr "4.00x5.00 インãƒ" msgid "4.00x6.00\"" msgstr "4.00x6.00 インãƒ" msgid "4.00x6.50\"" msgstr "4.00x6.50 インãƒ" msgid "40" msgstr "40" msgid "40 mm/sec." msgstr "40 ミリメートル/ç§’" msgid "45" msgstr "45" msgid "5" msgstr "5" msgid "5 inches/sec." msgstr "5 インãƒ/ç§’" msgid "5 x 7" msgstr "5 x 7 インãƒ" msgid "50" msgstr "50" msgid "55" msgstr "55" msgid "6" msgstr "6" msgid "6 inches/sec." msgstr "6 インãƒ/ç§’" msgid "6.00x1.00\"" msgstr "6.00x1.00 インãƒ" msgid "6.00x2.00\"" msgstr "6.00x2.00 インãƒ" msgid "6.00x3.00\"" msgstr "6.00x3.00 インãƒ" msgid "6.00x4.00\"" msgstr "6.00x4.00 インãƒ" msgid "6.00x5.00\"" msgstr "6.00x5.00 インãƒ" msgid "6.00x6.00\"" msgstr "6.00x6.00 インãƒ" msgid "6.00x6.50\"" msgstr "6.00x6.50 インãƒ" msgid "60" msgstr "60" msgid "60 mm/sec." msgstr "60 ミリメートル/ç§’" msgid "600dpi" msgstr "600dpi" msgid "60dpi" msgstr "60dpi" msgid "60x72dpi" msgstr "60x72dpi" msgid "65" msgstr "65" msgid "7" msgstr "7" msgid "7 inches/sec." msgstr "7 インãƒ/ç§’" msgid "7 x 9" msgstr "7 x 9 インãƒ" msgid "70" msgstr "70" msgid "75" msgstr "75" msgid "8" msgstr "8" msgid "8 inches/sec." msgstr "8 インãƒ/ç§’" msgid "8 x 10" msgstr "8 x 10 インãƒ" msgid "8.00x1.00\"" msgstr "8.00x1.00 インãƒ" msgid "8.00x2.00\"" msgstr "8.00x2.00 インãƒ" msgid "8.00x3.00\"" msgstr "8.00x3.00 インãƒ" msgid "8.00x4.00\"" msgstr "8.00x4.00 インãƒ" msgid "8.00x5.00\"" msgstr "8.00x5.00 インãƒ" msgid "8.00x6.00\"" msgstr "8.00x6.00 インãƒ" msgid "8.00x6.50\"" msgstr "8.00x6.50 インãƒ" msgid "80" msgstr "80" msgid "80 mm/sec." msgstr "80 ミリメートル/ç§’" msgid "85" msgstr "85" msgid "9" msgstr "9" msgid "9 inches/sec." msgstr "9 インãƒ/ç§’" msgid "9 x 11" msgstr "9 x 11 インãƒ" msgid "9 x 12" msgstr "9 x 12 インãƒ" msgid "9-Pin Series" msgstr "9 ピンシリーズ" msgid "90" msgstr "90" msgid "95" msgstr "95" msgid "?Invalid help command unknown." msgstr "?無効ãªãƒ˜ãƒ«ãƒ—コマンドã§ã™" msgid "A Samba password is required to export printer drivers" msgstr "" "プリンタードライãƒãƒ¼ã‚’エクスãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ Samba ã®ãƒ‘スワードãŒå¿…è¦ã§ã™ã€‚" msgid "A Samba username is required to export printer drivers" msgstr "" "プリンタードライãƒãƒ¼ã‚’エクスãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€Samba ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "A class named \"%s\" already exists." msgstr "\"%s\" ã¨ã„ã†åå‰ã®ã‚¯ãƒ©ã‚¹ã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™ã€‚" #, c-format msgid "A printer named \"%s\" already exists." msgstr "\"%s\" ã¨ã„ã†åå‰ã®ãƒ—リンターã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™ã€‚" msgid "A0" msgstr "A0" msgid "A0 Long Edge" msgstr "A0 長辺é€ã‚Š" msgid "A1" msgstr "A1" msgid "A1 Long Edge" msgstr "A1 長辺é€ã‚Š" msgid "A10" msgstr "A10" msgid "A2" msgstr "A2" msgid "A2 Long Edge" msgstr "A2 長辺é€ã‚Š" msgid "A3" msgstr "A3" msgid "A3 Long Edge" msgstr "A3 長辺é€ã‚Š" msgid "A3 Oversize" msgstr "A3 (特大)" msgid "A3 Oversize Long Edge" msgstr "A3 (特大) 長辺é€ã‚Š" msgid "A4" msgstr "A4" msgid "A4 Long Edge" msgstr "A4 長辺é€ã‚Š" msgid "A4 Oversize" msgstr "A4 (特大)" msgid "A4 Small" msgstr "A4 (å°)" msgid "A5" msgstr "A5" msgid "A5 Long Edge" msgstr "A5 長辺é€ã‚Š" msgid "A5 Oversize" msgstr "A5 (特大)" msgid "A6" msgstr "A6" msgid "A6 Long Edge" msgstr "A6 長辺é€ã‚Š" msgid "A7" msgstr "A7" msgid "A8" msgstr "A8" msgid "A9" msgstr "A9" msgid "ANSI A" msgstr "ANSI A" msgid "ANSI B" msgstr "ANSI B" msgid "ANSI C" msgstr "ANSI C" msgid "ANSI D" msgstr "ANSI D" msgid "ANSI E" msgstr "ANSI E" msgid "ARCH C" msgstr "ARCH C" msgid "ARCH C Long Edge" msgstr "ARCH C 長辺é€ã‚Š" msgid "ARCH D" msgstr "ARCH D" msgid "ARCH D Long Edge" msgstr "ARCH D 長辺é€ã‚Š" msgid "ARCH E" msgstr "ARCH E" msgid "ARCH E Long Edge" msgstr "ARCH E 長辺é€ã‚Š" msgid "Accept Jobs" msgstr "ジョブã®å—ã‘付ã‘" msgid "Accepted" msgstr "å—ã‘付ã‘ã¾ã—ãŸ" msgid "Accordian Fold" msgstr "" msgid "Add Class" msgstr "クラスã®è¿½åŠ " msgid "Add Printer" msgstr "プリンターã®è¿½åŠ " msgid "Add RSS Subscription" msgstr "RSS 購読を追加" msgid "Address" msgstr "アドレス" msgid "Administration" msgstr "管ç†" msgid "Advanced Photo Paper" msgstr "" msgid "Alternate" msgstr "" msgid "Alternate Roll" msgstr "" msgid "Aluminum" msgstr "" msgid "Always" msgstr "å¸¸ã«æœ‰åй" msgid "AppSocket/HP JetDirect" msgstr "AppSocket/HP JetDirect" msgid "Applicator" msgstr "アプリケーター" msgid "Archival Envelope" msgstr "" msgid "Archival Fabric" msgstr "" msgid "Archival Paper" msgstr "" msgid "Archival Photo Paper" msgstr "" #, c-format msgid "Attempt to set %s printer-state to bad value %d." msgstr "%s printer-state ã« ä¸æ­£ãªå€¤ %d を設定ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚" #, c-format msgid "Attribute \"%s\" is in the wrong group." msgstr "" #, c-format msgid "Attribute \"%s\" is the wrong value type." msgstr "" #, c-format msgid "Attribute groups are out of order (%x < %x)." msgstr "属性グループã¯ç¯„囲外ã§ã™ (%x < %x)。" msgid "Automatic" msgstr "" msgid "B0" msgstr "B0" msgid "B1" msgstr "B1" msgid "B10" msgstr "B10" msgid "B2" msgstr "B2" msgid "B3" msgstr "B3" msgid "B4" msgstr "B4" msgid "B5" msgstr "B5" msgid "B5 Oversize" msgstr "B5 (特大)" msgid "B6" msgstr "B6" msgid "B7" msgstr "B7" msgid "B8" msgstr "B8" msgid "B9" msgstr "B9" msgid "Back Print Film" msgstr "" #, c-format msgid "Bad 'document-format' value \"%s\"." msgstr "誤ã£ãŸ 'document-format' ã®å€¤ã§ã™ \"%s\"。" msgid "Bad NULL dests pointer" msgstr "䏿­£ãª NULL é€ä¿¡å…ˆãƒã‚¤ãƒ³ã‚¿ãƒ¼" msgid "Bad OpenGroup" msgstr "䏿­£ãª OpenGroup" msgid "Bad OpenUI/JCLOpenUI" msgstr "䏿­£ãª OpenUI/JCLOpenUI" msgid "Bad OrderDependency" msgstr "䏿­£ãª OrderDependency" msgid "Bad PPD cache file." msgstr "䏿­£ãª PPD キャッシュファイルã§ã™ã€‚" msgid "Bad PPD file." msgstr "" msgid "Bad Request" msgstr "䏿­£ãªãƒªã‚¯ã‚¨ã‚¹ãƒˆ" msgid "Bad SNMP version number" msgstr "䏿­£ãª SNMP ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·" msgid "Bad UIConstraints" msgstr "䏿­£ãª UIConstraints" msgid "Bad arguments to function" msgstr "関数ã®å¼•æ•°ãŒä¸æ­£" #, c-format msgid "Bad copies value %d." msgstr "%d ã¯ä¸æ­£ãªã‚³ãƒ”ー値ã§ã™ã€‚" msgid "Bad custom parameter" msgstr "䏿­£ãªã‚«ã‚¹ã‚¿ãƒ ãƒ‘ラメーター" #, c-format msgid "Bad device-uri \"%s\"." msgstr "\"%s\" ã¯ç„¡åŠ¹ãª device-uri ã§ã™ã€‚" #, c-format msgid "Bad device-uri scheme \"%s\"." msgstr "\"%s\" ã¯ç„¡åŠ¹ãª device-uri スキーマã§ã™ã€‚" #, c-format msgid "Bad document-format \"%s\"." msgstr "\"%s\" ã¯ä¸æ­£ãª document-format ã§ã™ã€‚" #, c-format msgid "Bad document-format-default \"%s\"." msgstr "\"%s\" ã¯ä¸æ­£ãª document-format-default ã§ã™ã€‚" msgid "Bad filename buffer" msgstr "䏿­£ãªãƒ•ァイルåãƒãƒƒãƒ•ァーã§ã™ã€‚" msgid "Bad hostname/address in URI" msgstr "URI ã®ãƒ›ã‚¹ãƒˆå/アドレスãŒä¸æ­£" #, c-format msgid "Bad job-name value: %s" msgstr "誤ã£ãŸ job-name 値: %s" msgid "Bad job-name value: Wrong type or count." msgstr "誤ã£ãŸ job-name 値: åž‹ã‹ã‚«ã‚¦ãƒ³ãƒˆãŒèª¤ã£ã¦ã„ã¾ã™ã€‚" msgid "Bad job-priority value." msgstr "䏿­£ãª job-priority 値ã§ã™ã€‚" #, c-format msgid "Bad job-sheets value \"%s\"." msgstr "\"%s\" ã¯ä¸æ­£ãª job-sheets 値ã§ã™ã€‚" msgid "Bad job-sheets value type." msgstr "䏿­£ãª job-sheets 値タイプ ã§ã™ã€‚" msgid "Bad job-state value." msgstr "䏿­£ãª job-state 値ã§ã™ã€‚" #, c-format msgid "Bad job-uri \"%s\"." msgstr "\"%s\" ã¯ç„¡åŠ¹ãª job-uri 属性ã§ã™ã€‚" #, c-format msgid "Bad notify-pull-method \"%s\"." msgstr "\"%s\" ã¯ç„¡åŠ¹ãª notify-pull-method ã§ã™ã€‚" #, c-format msgid "Bad notify-recipient-uri \"%s\"." msgstr "URI \"%s\" ã¯ä¸æ­£ãª notify-recipient-uri ã§ã™ã€‚" #, c-format msgid "Bad number-up value %d." msgstr "%d ã¯ä¸æ­£ãª number-up 値ã§ã™ã€‚" #, c-format msgid "Bad option + choice on line %d." msgstr "%d 行ã«ä¸æ­£ãªã‚ªãƒ—ションã¨é¸æŠžãŒã‚りã¾ã™ã€‚" #, c-format msgid "Bad page-ranges values %d-%d." msgstr "%d-%d ã¯ä¸æ­£ãª page-ranges 値ã§ã™ã€‚" msgid "Bad port number in URI" msgstr "URI ã®ãƒãƒ¼ãƒˆç•ªå·ãŒä¸æ­£" #, c-format msgid "Bad port-monitor \"%s\"." msgstr "\"%s\" ã¯ç„¡åŠ¹ãª port-monitor ã§ã™ã€‚" #, c-format msgid "Bad printer-state value %d." msgstr "%d ã¯ç„¡åŠ¹ãª printer-state 値ã§ã™ã€‚" msgid "Bad printer-uri." msgstr "printer-uri ãŒä¸æ­£ã§ã™ã€‚" #, c-format msgid "Bad request ID %d." msgstr "%d ã¯ç„¡åйãªãƒªã‚¯ã‚¨ã‚¹ãƒˆIDã§ã™ã€‚" #, c-format msgid "Bad request version number %d.%d." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå· %d.%d ã¯ç„¡åйãªãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã™ã€‚" #, c-format msgid "Bad requesting-user-name value: %s" msgstr "" msgid "Bad resource in URI" msgstr "URI ã®ãƒªã‚½ãƒ¼ã‚¹ãŒä¸æ­£" msgid "Bad scheme in URI" msgstr "URI ã®ã‚¹ã‚­ãƒ¼ãƒ ãŒä¸æ­£" msgid "Bad subscription ID" msgstr "䏿­£ãªã‚µãƒ–スクリプション ID" msgid "Bad username in URI" msgstr "URI ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŒä¸æ­£" msgid "Bad value string" msgstr "値文字列ãŒã‚りã¾ã›ã‚“" msgid "Bad/empty URI" msgstr "URI ãŒä¸æ­£ã‹ç©º" msgid "Bale" msgstr "" msgid "Banners" msgstr "ãƒãƒŠãƒ¼" msgid "Bind" msgstr "" msgid "Bind (Landscape)" msgstr "" msgid "Bind (Portrait)" msgstr "" msgid "Bind (Reverse Landscape)" msgstr "" msgid "Bind (Reverse Portrait)" msgstr "" msgid "Bond Envelope" msgstr "" msgid "Bond Paper" msgstr "ボンド紙" msgid "Booklet" msgstr "" msgid "Booklet Maker" msgstr "" #, c-format msgid "Boolean expected for waiteof option \"%s\"." msgstr "è«–ç†å€¤ã¯ã€waiteof オプション \"%s\" ã§ã‚ã‚‹ã¹ãã§ã™" msgid "Bottom" msgstr "" msgid "Bottom Tray" msgstr "" msgid "Buffer overflow detected, aborting." msgstr "オーãƒãƒ¼ãƒ•ãƒ­ãƒ¼ãŒæ¤œå‡ºã•れã€ä¸­æ–­ã—ã¾ã—ãŸã€‚" msgid "CD" msgstr "" msgid "CMYK" msgstr "CMYK" msgid "CPCL Label Printer" msgstr "CPCL ラベルプリンター" msgid "Cancel Jobs" msgstr "ジョブをキャンセル" msgid "Cancel RSS Subscription" msgstr "RSS 購読をキャンセル" msgid "Canceling print job." msgstr "プリントジョブをキャンセルã—ã¦ã„ã¾ã™ã€‚" msgid "Cannot change printer-is-shared for remote queues." msgstr "" msgid "Cannot share a remote Kerberized printer." msgstr "リモート㮠Kerberos èªè¨¼ã®ãƒ—リンターを共有ã§ãã¾ã›ã‚“。" msgid "Cardboard" msgstr "" msgid "Cardstock" msgstr "" msgid "Cassette" msgstr "カセット" msgid "Center" msgstr "" msgid "Center Tray" msgstr "" msgid "Change Settings" msgstr "設定ã®å¤‰æ›´" #, c-format msgid "Character set \"%s\" not supported." msgstr "文字セット \"%s\" ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。" msgid "Classes" msgstr "クラス" msgid "Clean Print Heads" msgstr "プリントヘッドクリーニング" msgid "Close-Job doesn't support the job-uri attribute." msgstr "Close-Job 㯠job-uri 属性をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。" msgid "Coat" msgstr "" msgid "Coated Envelope" msgstr "" msgid "Coated Paper" msgstr "" msgid "Color" msgstr "カラー" msgid "Color Mode" msgstr "カラーモード" msgid "Colored Labels" msgstr "" msgid "" "Commands may be abbreviated. Commands are:\n" "\n" "exit help quit status ?" msgstr "" "コマンドã¯çŸ­ç¸®ã§ãã¾ã™ã€‚ コマンド:\n" "\n" "exit help quit status ?" msgid "Community name uses indefinite length" msgstr "コミュニティåã®é•·ã•ãŒä¸å®š" msgid "Connected to printer." msgstr "ãƒ—ãƒªãƒ³ã‚¿ãƒ¼ã«æŽ¥ç¶šã—ã¾ã—ãŸã€‚" msgid "Connecting to printer." msgstr "ãƒ—ãƒªãƒ³ã‚¿ãƒ¼ã«æŽ¥ç¶šä¸­ã€‚" msgid "Continue" msgstr "継続" msgid "Continuous" msgstr "連続" msgid "Continuous Long" msgstr "" msgid "Continuous Short" msgstr "" msgid "Control file sent successfully." msgstr "ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ­£å¸¸ã«é€ä¿¡ã•れã¾ã—ãŸã€‚" msgid "Copying print data." msgstr "å°åˆ·ãƒ‡ãƒ¼ã‚¿ã‚’コピーã—ã¦ã„ã¾ã™ã€‚" msgid "Cotton Envelope" msgstr "" msgid "Cotton Paper" msgstr "" msgid "Cover" msgstr "" msgid "Created" msgstr "ジョブ作æˆ" msgid "Credentials do not validate against site CA certificate." msgstr "" msgid "Credentials have expired." msgstr "" msgid "Custom" msgstr "カスタム" msgid "CustominCutInterval" msgstr "CustominCutInterval" msgid "CustominTearInterval" msgstr "CustominTearInterval" msgid "Cut" msgstr "カット" msgid "Cut Media" msgstr "" msgid "Cutter" msgstr "カッター" msgid "DVD" msgstr "" msgid "Dark" msgstr "濃ã„" msgid "Darkness" msgstr "濃ã•" msgid "Data file sent successfully." msgstr "ãƒ‡ãƒ¼ã‚¿ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ­£å¸¸ã«é€ä¿¡ã•れã¾ã—ãŸã€‚" msgid "Deep Color" msgstr "" msgid "Delete Class" msgstr "クラスã®å‰Šé™¤" msgid "Delete Printer" msgstr "プリンターã®å‰Šé™¤" msgid "DeskJet Series" msgstr "DeskJet シリーズ" #, c-format msgid "Destination \"%s\" is not accepting jobs." msgstr "宛先 \"%s\" ã¯ã‚¸ãƒ§ãƒ–ã‚’å—ã‘付ã‘ã¦ã„ã¾ã›ã‚“。" #, c-format msgid "" "Device: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s" msgstr "" "デãƒã‚¤ã‚¹: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s" msgid "Direct Thermal Media" msgstr "感熱紙" #, c-format msgid "Directory \"%s\" contains a relative path." msgstr "ディレクトリー \"%s\" ã¯ç›¸å¯¾ãƒ‘スをå«ã‚“ã§ã„ã¾ã™ã€‚" #, c-format msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "" "ディレクトリー \"%s\" ã¯å®‰å…¨ã§ãªã„パーミッションãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã™ (0%o/uid=" "%d/gid=%d)。" #, c-format msgid "Directory \"%s\" is a file." msgstr "ディレクトリー \"%s\" ã¯ãƒ•ァイルã§ã™ã€‚" #, c-format msgid "Directory \"%s\" not available: %s" msgstr "ディレクトリー \"%s\" ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“: %s" #, c-format msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "" "ディレクトリー \"%s\" ã®ãƒ‘ーミッションã¯å•題ã‚りã¾ã›ã‚“ (0%o/uid=%d/gid=%d)。" msgid "Disabled" msgstr "無効" msgid "Disc" msgstr "" #, c-format msgid "Document #%d does not exist in job #%d." msgstr "ドキュメント #%d ãŒã‚¸ãƒ§ãƒ– #%d ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" msgid "Double Gate Fold" msgstr "" msgid "Double Staple (Landscape)" msgstr "" msgid "Double Staple (Portrait)" msgstr "" msgid "Double Staple (Reverse Landscape)" msgstr "" msgid "Double Staple (Reverse Portrait)" msgstr "" msgid "Double Wall Cardboard" msgstr "" msgid "Draft" msgstr "" msgid "Dry Film" msgstr "" msgid "Duplexer" msgstr "両é¢ã‚ªãƒ—ション" msgid "Dymo" msgstr "Dymo" msgid "EPL1 Label Printer" msgstr "EPL1 ラベルプリンター" msgid "EPL2 Label Printer" msgstr "EPL2 ラベルプリンター" msgid "Edit Configuration File" msgstr "設定ファイルã®ç·¨é›†" msgid "Embossing Foil" msgstr "" msgid "Empty PPD file." msgstr "PPD ファイルãŒç©ºã§ã™ã€‚" msgid "Encryption is not supported." msgstr "æš—å·åŒ–ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。" msgid "End Board" msgstr "" #. TRANSLATORS: Banner/cover sheet after the print job. msgid "Ending Banner" msgstr "終了ãƒãƒŠãƒ¼" msgid "Engineering Z Fold" msgstr "" msgid "English" msgstr "English" msgid "" "Enter your username and password or the root username and password to access " "this page. If you are using Kerberos authentication, make sure you have a " "valid Kerberos ticket." msgstr "" "ã“ã®ãƒšãƒ¼ã‚¸ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«ã€ã‚ãªãŸã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードã€ã‚ã‚‹ã„㯠" "root ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードを入力ã—ã¦ãã ã•ã„。Kerberos èªè¨¼ã‚’使用ã—ã¦ã„ã‚‹" "å ´åˆã€æœ‰åŠ¹ãª Kerberos ãƒã‚±ãƒƒãƒˆãŒã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" msgid "Envelope" msgstr "" msgid "Envelope #10" msgstr "" msgid "Envelope #11" msgstr "å°ç­’ #11" msgid "Envelope #12" msgstr "å°ç­’ #12" msgid "Envelope #14" msgstr "å°ç­’ #14" msgid "Envelope #9" msgstr "å°ç­’ #9" msgid "Envelope B4" msgstr "å°ç­’ B4" msgid "Envelope B5" msgstr "å°ç­’ B5" msgid "Envelope B6" msgstr "å°ç­’ B6" msgid "Envelope C0" msgstr "å°ç­’ C0" msgid "Envelope C1" msgstr "å°ç­’ C1" msgid "Envelope C2" msgstr "å°ç­’ C2" msgid "Envelope C3" msgstr "å°ç­’ C3" msgid "Envelope C4" msgstr "å°ç­’ C4" msgid "Envelope C5" msgstr "å°ç­’ C5" msgid "Envelope C6" msgstr "å°ç­’ C6" msgid "Envelope C65" msgstr "å°ç­’ C65" msgid "Envelope C7" msgstr "å°ç­’ C7" msgid "Envelope Choukei 3" msgstr "å°ç­’ é•·å½¢3å·" msgid "Envelope Choukei 3 Long Edge" msgstr "å°ç­’ é•·å½¢3å· é•·è¾ºé€ã‚Š" msgid "Envelope Choukei 4" msgstr "å°ç­’ é•·å½¢4å·" msgid "Envelope Choukei 4 Long Edge" msgstr "å°ç­’ é•·å½¢4å· é•·è¾ºé€ã‚Š" msgid "Envelope DL" msgstr "å°ç­’ DL" msgid "Envelope Feed" msgstr "å°ç­’フィード" msgid "Envelope Invite" msgstr "招待状å°ç­’" msgid "Envelope Italian" msgstr "イタリアå°ç­’" msgid "Envelope Kaku2" msgstr "å°ç­’ è§’2" msgid "Envelope Kaku2 Long Edge" msgstr "å°ç­’ è§’2 長辺é€ã‚Š" msgid "Envelope Kaku3" msgstr "å°ç­’ è§’3" msgid "Envelope Kaku3 Long Edge" msgstr "å°ç­’ è§’3 長辺é€ã‚Š" msgid "Envelope Monarch" msgstr "å°ç­’ Monarch" msgid "Envelope PRC1" msgstr "" msgid "Envelope PRC1 Long Edge" msgstr "å°ç­’ PRC1 長辺é€ã‚Š" msgid "Envelope PRC10" msgstr "å°ç­’ PRC10" msgid "Envelope PRC10 Long Edge" msgstr "å°ç­’ PRC10 長辺é€ã‚Š" msgid "Envelope PRC2" msgstr "å°ç­’ PRC2" msgid "Envelope PRC2 Long Edge" msgstr "å°ç­’ PRC2 長辺é€ã‚Š" msgid "Envelope PRC3" msgstr "å°ç­’ PRC3" msgid "Envelope PRC3 Long Edge" msgstr "å°ç­’ PRC3 長辺é€ã‚Š" msgid "Envelope PRC4" msgstr "å°ç­’ PRC4" msgid "Envelope PRC4 Long Edge" msgstr "å°ç­’ PRC4 長辺é€ã‚Š" msgid "Envelope PRC5 Long Edge" msgstr "å°ç­’ PRC5 長辺é€ã‚Š" msgid "Envelope PRC5PRC5" msgstr "å°ç­’ PRC5" msgid "Envelope PRC6" msgstr "å°ç­’ PRC6" msgid "Envelope PRC6 Long Edge" msgstr "å°ç­’ PRC6 長辺é€ã‚Š" msgid "Envelope PRC7" msgstr "å°ç­’ PRC7" msgid "Envelope PRC7 Long Edge" msgstr "å°ç­’ PRC7 長辺é€ã‚Š" msgid "Envelope PRC8" msgstr "å°ç­’ PRC8" msgid "Envelope PRC8 Long Edge" msgstr "å°ç­’ PRC8 長辺é€ã‚Š" msgid "Envelope PRC9" msgstr "å°ç­’ PRC9" msgid "Envelope PRC9 Long Edge" msgstr "å°ç­’ PRC9 長辺é€ã‚Š" msgid "Envelope Personal" msgstr "パーソナルå°ç­’" msgid "Envelope You4" msgstr "å°ç­’ æ´‹å½¢4å·" msgid "Envelope You4 Long Edge" msgstr "å°ç­’ æ´‹å½¢4å· é•·è¾ºé€ã‚Š" msgid "Environment Variables:" msgstr "環境変数:" msgid "Epson" msgstr "Epson" msgid "Error Policy" msgstr "エラーãƒãƒªã‚·ãƒ¼" msgid "Error reading raster data." msgstr "" msgid "Error sending raster data." msgstr "ラスターデータã®é€ä¿¡ã§ã‚¨ãƒ©ãƒ¼ãŒèµ·ãã¾ã—ãŸã€‚" msgid "Error: need hostname after \"-h\" option." msgstr "Error: '-h' オプションã®ã‚ã¨ã«ã¯ãƒ›ã‚¹ãƒˆåãŒå¿…è¦ã§ã™ã€‚" msgid "European Fanfold" msgstr "" msgid "European Fanfold Legal" msgstr "" msgid "Every 10 Labels" msgstr "10 ラベルã”ã¨" msgid "Every 2 Labels" msgstr "2 ラベルã”ã¨" msgid "Every 3 Labels" msgstr "3 ラベルã”ã¨" msgid "Every 4 Labels" msgstr "4 ラベルã”ã¨" msgid "Every 5 Labels" msgstr "5 ラベルã”ã¨" msgid "Every 6 Labels" msgstr "6 ラベルã”ã¨" msgid "Every 7 Labels" msgstr "7 ラベルã”ã¨" msgid "Every 8 Labels" msgstr "8 ラベルã”ã¨" msgid "Every 9 Labels" msgstr "9 ラベルã”ã¨" msgid "Every Label" msgstr "ã™ã¹ã¦ã®ãƒ©ãƒ™ãƒ«" msgid "Everyday Glossy Photo Paper" msgstr "" msgid "Everyday Matte Paper" msgstr "" msgid "Executive" msgstr "エグゼクティブ" msgid "Expectation Failed" msgstr "予測ã«å¤±æ•—ã—ã¾ã—ãŸ" msgid "Export Printers to Samba" msgstr "Samba ã¸ãƒ—リンターをエクスãƒãƒ¼ãƒˆ" msgid "Expressions:" msgstr "å¼:" msgid "Extra Heavyweight Paper" msgstr "" msgid "FAIL" msgstr "失敗" msgid "Fabric" msgstr "" msgid "Face Down" msgstr "" msgid "Face Up" msgstr "" msgid "Fast Grayscale" msgstr "" #, c-format msgid "File \"%s\" contains a relative path." msgstr "ファイル \"%s\" ã¯ç›¸å¯¾ãƒ‘スをå«ã‚“ã§ã„ã¾ã™ã€‚" #, c-format msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "" "ファイル \"%s\" ã¯å®‰å…¨ã§ãªã„パーミッションãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã™ (0%o/uid=%d/gid=" "%d)。" #, c-format msgid "File \"%s\" is a directory." msgstr "ファイル \"%s\" ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã™ã€‚" #, c-format msgid "File \"%s\" not available: %s" msgstr "ファイル \"%s\" ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“: %s" #, c-format msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "ファイル \"%s\" ã®ãƒ‘ーミッションã¯å•題ã‚りã¾ã›ã‚“ (0%o/uid=%d/gid=%d)。" msgid "File Folder" msgstr "" #, c-format msgid "" "File device URIs have been disabled. To enable, see the FileDevice directive " "in \"%s/cups-files.conf\"." msgstr "" "ファイルデãƒã‚¤ã‚¹ URI ã¯ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚有効ã«ã™ã‚‹ã«ã¯ã€\"%s/cups-files." "conf\" ã® FileDevice ディレクティブをå‚ç…§ã—ã¦ãã ã•ã„。" msgid "Film" msgstr "" msgid "Fine Envelope" msgstr "" #, c-format msgid "Finished page %d." msgstr "ページ %d を終了。" msgid "Flexo Base" msgstr "" msgid "Flexo Photo Polymer" msgstr "" msgid "Flute" msgstr "" msgid "Foil" msgstr "" msgid "Fold" msgstr "" msgid "Folio" msgstr "フォリオ" msgid "Forbidden" msgstr "Forbidden" msgid "Found" msgstr "" msgid "Full Cut Tabs" msgstr "" msgid "Gate Fold" msgstr "" msgid "General" msgstr "一般" msgid "Generic" msgstr "汎用" msgid "Get-Response-PDU uses indefinite length" msgstr "Get-Response-PDU ã¯ä¸ç¢ºå®šã®é•·ã•を使用ã—ã¦ã„ã¾ã™" msgid "Glass" msgstr "" msgid "Glass Colored" msgstr "" msgid "Glass Opaque" msgstr "" msgid "Glass Surfaced" msgstr "" msgid "Glass Textured" msgstr "" msgid "Glossy Brochure Paper" msgstr "" msgid "Glossy Fabric" msgstr "" msgid "Glossy Labels" msgstr "" msgid "Glossy Optical Disc" msgstr "" msgid "Glossy Paper" msgstr "光沢紙" msgid "Glossy Photo Paper" msgstr "" msgid "Got a printer-uri attribute but no job-id." msgstr "printer-uri 属性をå–å¾—ã—ã¾ã—ãŸãŒã€job-id ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" msgid "Gravure Cylinder" msgstr "" msgid "Grayscale" msgstr "グレースケール" msgid "HP" msgstr "HP" msgid "Hagaki" msgstr "" msgid "Half Fold" msgstr "" msgid "Half Z Fold" msgstr "" msgid "Hanging Folder" msgstr "Hanging Folder" msgid "Hash buffer too small." msgstr "" msgid "Heavyweight Coated Paper" msgstr "" msgid "Heavyweight Envelope" msgstr "" msgid "Heavyweight Paper" msgstr "" msgid "Help file not in index." msgstr "ヘルプファイルãŒç´¢å¼•ã«å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。" msgid "High" msgstr "" msgid "High Gloss Fabric" msgstr "" msgid "High Gloss Labels" msgstr "" msgid "High Gloss Optical Disc" msgstr "" msgid "High Gloss Photo Paper" msgstr "" msgid "IPP 1setOf attribute with incompatible value tags." msgstr "IPP ã® 1setOf 属性㌠value ã‚¿ã‚°ã¨äº’æ›æ€§ãŒã‚りã¾ã›ã‚“。" msgid "IPP attribute has no name." msgstr "IPP ã®å±žæ€§ã«åå‰ãŒã‚りã¾ã›ã‚“。" msgid "IPP attribute is not a member of the message." msgstr "IPP ã®å±žæ€§ãŒãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚りã¾ã›ã‚“。" msgid "IPP begCollection value not 0 bytes." msgstr "IPP ã® begCollection ã¯æƒ³å®šã•れ㟠0 ãƒã‚¤ãƒˆã«ãªã£ã¦ã„ã¾ã›ã‚“。" msgid "IPP boolean value not 1 byte." msgstr "IPP ã®çœŸå½å€¤ãŒæƒ³å®šã•れ㟠1 ãƒã‚¤ãƒˆã«ãªã£ã¦ã„ã¾ã›ã‚“。" msgid "IPP date value not 11 bytes." msgstr "IPP ã® date å€¤ã¯æƒ³å®šã•れ㟠11 ãƒã‚¤ãƒˆã«ãªã£ã¦ã„ã¾ã›ã‚“。" msgid "IPP endCollection value not 0 bytes." msgstr "IPP ã® endCollection ã¯æƒ³å®šã•れ㟠0 ãƒã‚¤ãƒˆã«ãªã£ã¦ã„ã¾ã›ã‚“。" msgid "IPP enum value not 4 bytes." msgstr "IPP ã® enum å€¤ã¯æƒ³å®šã•れ㟠4 ãƒã‚¤ãƒˆã«ãªã£ã¦ã„ã¾ã›ã‚“。" msgid "IPP extension tag larger than 0x7FFFFFFF." msgstr "IPP ã®æ‹¡å¼µã‚¿ã‚°ãŒ 0x7FFFFFFF より大ãã„ã§ã™ã€‚" msgid "IPP integer value not 4 bytes." msgstr "IPP ã®æ•´æ•°å€¤ã¯æƒ³å®šã•れ㟠4 ãƒã‚¤ãƒˆã«ãªã£ã¦ã„ã¾ã›ã‚“。" msgid "IPP language length overflows value." msgstr "IPP ã® language length ã®å€¤ãŒã‚ªãƒ¼ãƒãƒ¼ãƒ•ローã—ã¦ã„ã¾ã™ã€‚" msgid "IPP language length too large." msgstr "IPP ã® language ã®é•·ã•ãŒé•·ã™ãŽã¾ã™ã€‚" msgid "IPP member name is not empty." msgstr "IPP ã®ãƒ¡ãƒ³ãƒãƒ¼åãŒç©ºã§ã¯ã‚りã¾ã›ã‚“。" msgid "IPP memberName value is empty." msgstr "IPP ã® memberName ã®å€¤ãŒç©ºã§ã™ã€‚" msgid "IPP memberName with no attribute." msgstr "IPP ã® memberName ã«å±žæ€§ãŒã‚りã¾ã›ã‚“。" msgid "IPP name larger than 32767 bytes." msgstr "IPP å㌠32767 ãƒã‚¤ãƒˆã‚ˆã‚Šå¤§ãã„ã§ã™ã€‚" msgid "IPP nameWithLanguage value less than minimum 4 bytes." msgstr "IPP ã® nameWithLanguage ãŒæœ€å°å€¤ 4 ãƒã‚¤ãƒˆæœªæº€ã§ã™ã€‚" msgid "IPP octetString length too large." msgstr "IPP ã® octetString ã®é•·ã•ãŒå¤§ãã™ãŽã¾ã™ã€‚" msgid "IPP rangeOfInteger value not 8 bytes." msgstr "IPP ã® rangeOfInteger ã¯æƒ³å®šã•れ㟠8 ãƒã‚¤ãƒˆã«ãªã£ã¦ã„ã¾ã›ã‚“。" msgid "IPP resolution value not 9 bytes." msgstr "IPP ã® resolution ã¯æƒ³å®šã•れ㟠9 ãƒã‚¤ãƒˆã«ãªã£ã¦ã„ã¾ã›ã‚“。" msgid "IPP string length overflows value." msgstr "IPP ã®æ–‡å­—列長ã®å€¤ãŒã‚ªãƒ¼ãƒãƒ¼ãƒ•ローã—ã¦ã„ã¾ã™ã€‚" msgid "IPP textWithLanguage value less than minimum 4 bytes." msgstr "IPP ã® textWithLanguage ã®å€¤ãŒæœ€å°å€¤ 4 ãƒã‚¤ãƒˆæœªæº€ã§ã™ã€‚" msgid "IPP value larger than 32767 bytes." msgstr "IPP ã®å€¤ãŒ 32767 ãƒã‚¤ãƒˆä»¥ä¸Šã§ã™ã€‚" msgid "ISOLatin1" msgstr "ISOLatin1" msgid "Illegal control character" msgstr "䏿­£ãªåˆ¶å¾¡æ–‡å­—" msgid "Illegal main keyword string" msgstr "䏿­£ãªãƒ¡ã‚¤ãƒ³ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰æ–‡å­—列" msgid "Illegal option keyword string" msgstr "䏿­£ãªã‚ªãƒ—ションキーワード文字列" msgid "Illegal translation string" msgstr "䏿­£ãªç¿»è¨³æ–‡å­—列" msgid "Illegal whitespace character" msgstr "䏿­£ãªç©ºç™½æ–‡å­—" msgid "Image Setter Paper" msgstr "" msgid "Imaging Cylinder" msgstr "" msgid "Inkjet Envelope" msgstr "" msgid "Inkjet Labels" msgstr "" msgid "Inkjet Paper" msgstr "" msgid "Installable Options" msgstr "インストールå¯èƒ½ã‚ªãƒ—ション" msgid "Installed" msgstr "インストールã•れã¦ã„ã¾ã™" msgid "IntelliBar Label Printer" msgstr "IntelliBar ラベルプリンター" msgid "Intellitech" msgstr "Intellitech" msgid "Internal Server Error" msgstr "サーãƒãƒ¼å†…部エラー" msgid "Internal error" msgstr "内部エラー" msgid "Internet Postage 2-Part" msgstr "Internet Postage 2-Part" msgid "Internet Postage 3-Part" msgstr "Internet Postage 3-Part" msgid "Internet Printing Protocol" msgstr "インターãƒãƒƒãƒˆå°åˆ·ãƒ—ロトコル" msgid "Invalid media name arguments." msgstr "無効ãªãƒ¡ãƒ‡ã‚£ã‚¢å引数ã§ã™ã€‚" msgid "Invalid media size." msgstr "無効ãªãƒ¡ãƒ‡ã‚£ã‚¢ã‚µã‚¤ã‚ºã§ã™ã€‚" msgid "Invalid ppd-name value." msgstr "" #, c-format msgid "Invalid printer command \"%s\"." msgstr "無効ãªãƒ—リンターコマンドã§ã™ã€‚ \"%s\"" msgid "JCL" msgstr "JCL" msgid "JIS B0" msgstr "JIS B0" msgid "JIS B1" msgstr "JIS B1" msgid "JIS B10" msgstr "JIS B10" msgid "JIS B2" msgstr "JIS B2" msgid "JIS B3" msgstr "JIS B3" msgid "JIS B4" msgstr "JIS B4" msgid "JIS B4 Long Edge" msgstr "JIS B4 長辺é€ã‚Š" msgid "JIS B5" msgstr "JIS B5" msgid "JIS B5 Long Edge" msgstr "JIS B5 長辺é€ã‚Š" msgid "JIS B6" msgstr "JIS B6" msgid "JIS B6 Long Edge" msgstr "JIS B6 長辺é€ã‚Š" msgid "JIS B7" msgstr "JIS B7" msgid "JIS B8" msgstr "JIS B8" msgid "JIS B9" msgstr "JIS B9" #, c-format msgid "Job #%d cannot be restarted - no files." msgstr "ã‚¸ãƒ§ãƒ–ç•ªå· %d ã‚’å†é–‹ã§ãã¾ã›ã‚“ - ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #, c-format msgid "Job #%d does not exist." msgstr "ã‚¸ãƒ§ãƒ–ç•ªå· %d ã¯å­˜åœ¨ã—ã¾ã›ã‚“。" #, c-format msgid "Job #%d is already aborted - can't cancel." msgstr "ã‚¸ãƒ§ãƒ–ç•ªå· %d ã¯ã™ã§ã«ä¸­æ–­ã•れã¦ã„ã¾ã™ - キャンセルã§ãã¾ã›ã‚“。" #, c-format msgid "Job #%d is already canceled - can't cancel." msgstr "ã‚¸ãƒ§ãƒ–ç•ªå· %d ã¯ã™ã§ã«ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•れã¦ã„ã¾ã™ - キャンセルã§ãã¾ã›ã‚“。" #, c-format msgid "Job #%d is already completed - can't cancel." msgstr "ã‚¸ãƒ§ãƒ–ç•ªå· %d ã¯ã™ã§ã«å®Œäº†ã—ã¦ã„ã¾ã™ - キャンセルã§ãã¾ã›ã‚“。" #, c-format msgid "Job #%d is finished and cannot be altered." msgstr "ã‚¸ãƒ§ãƒ–ç•ªå· %d ã¯ã™ã§ã«çµ‚了ã—ã€å¤‰æ›´ã§ãã¾ã›ã‚“。" #, c-format msgid "Job #%d is not complete." msgstr "ã‚¸ãƒ§ãƒ–ç•ªå· %d ã¯å®Œäº†ã—ã¦ã„ã¾ã›ã‚“。" #, c-format msgid "Job #%d is not held for authentication." msgstr "ã‚¸ãƒ§ãƒ–ç•ªå· %d ã¯èªè¨¼ã®ãŸã‚ã«ä¿ç•™ã•れã¦ã„ã¾ã›ã‚“。" #, c-format msgid "Job #%d is not held." msgstr "ã‚¸ãƒ§ãƒ–ç•ªå· %d ã¯ä¿ç•™ã•れã¦ã„ã¾ã›ã‚“。" msgid "Job Completed" msgstr "ジョブ完了" msgid "Job Created" msgstr "ジョブ作æˆ" msgid "Job Options Changed" msgstr "ジョブオプション変更" msgid "Job Stopped" msgstr "ジョブ中止" msgid "Job is completed and cannot be changed." msgstr "ジョブã¯å®Œäº†ã—変更ã§ãã¾ã›ã‚“。" msgid "Job operation failed" msgstr "ジョブæ“作失敗" msgid "Job state cannot be changed." msgstr "ジョブã®çŠ¶æ…‹ã‚’å¤‰æ›´ã§ãã¾ã›ã‚“。" msgid "Job subscriptions cannot be renewed." msgstr "ジョブサブスクリプションを更新ã§ãã¾ã›ã‚“。" msgid "Jobs" msgstr "ジョブ" msgid "Jog" msgstr "" msgid "LPD/LPR Host or Printer" msgstr "LPD/LPR ホストã¾ãŸã¯ãƒ—リンター" msgid "Label Printer" msgstr "ラベルプリンター" msgid "Label Top" msgstr "ラベルトップ" msgid "Labels" msgstr "" msgid "Laminate" msgstr "" msgid "Laminating Foil" msgstr "" #, c-format msgid "Language \"%s\" not supported." msgstr "言語 \"%s\" ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。" msgid "Large Address" msgstr "ラージアドレス" msgid "Large Capacity" msgstr "" msgid "Large Capacity Tray" msgstr "" msgid "LaserJet Series PCL 4/5" msgstr "LaserJet Series PCL 4/5" msgid "Left" msgstr "" msgid "Left Gate Fold" msgstr "" msgid "Left Tray" msgstr "" msgid "Letter Fold" msgstr "" msgid "Letter Oversize" msgstr "US レター (特大)" msgid "Letter Oversize Long Edge" msgstr "US レター (特大) 長辺é€ã‚Š" msgid "Letterhead" msgstr "" msgid "Light" msgstr "è–„ã„" msgid "Lightweight Envelope" msgstr "" msgid "Lightweight Paper" msgstr "" msgid "Line longer than the maximum allowed (255 characters)" msgstr "1 è¡ŒãŒæœ€å¤§å€¤ (255 文字) ã‚’è¶…ãˆã¦ã„ã¾ã™" msgid "List Available Printers" msgstr "使用å¯èƒ½ãªãƒ—リンター一覧" msgid "Load paper." msgstr "用紙を補給ã—ã¦ãã ã•ã„。" msgid "Local printer created." msgstr "" msgid "Long-Edge (Portrait)" msgstr "長辺給紙 (縦å‘ã)" msgid "Looking for printer." msgstr "プリンターを探ã—ã¦ã„ã¾ã™ã€‚" msgid "Mailbox 1" msgstr "" msgid "Mailbox 10" msgstr "" msgid "Mailbox 2" msgstr "" msgid "Mailbox 3" msgstr "" msgid "Mailbox 4" msgstr "" msgid "Mailbox 5" msgstr "" msgid "Mailbox 6" msgstr "" msgid "Mailbox 7" msgstr "" msgid "Mailbox 8" msgstr "" msgid "Mailbox 9" msgstr "" msgid "Main" msgstr "" msgid "Main Roll" msgstr "" msgid "Manual" msgstr "" msgid "Manual Feed" msgstr "手差ã—" msgid "Matte Brochure Paper" msgstr "" msgid "Matte Cover Paper" msgstr "" msgid "Matte Fabric" msgstr "" msgid "Matte Labels" msgstr "" msgid "Matte Optical Disc" msgstr "" msgid "Matte Photo Paper" msgstr "" msgid "Media Size" msgstr "用紙サイズ" msgid "Media Source" msgstr "給紙" msgid "Media Tracking" msgstr "用紙ã®çµŒè·¯" msgid "Media Type" msgstr "用紙種類" msgid "Medium" msgstr "紙質" msgid "Memory allocation error" msgstr "メモリー割り当ã¦ã‚¨ãƒ©ãƒ¼" msgid "Metal" msgstr "" msgid "Metal Glossy" msgstr "" msgid "Metal High Gloss" msgstr "" msgid "Metal Matte" msgstr "" msgid "Metal Satin" msgstr "" msgid "Metal Semi Gloss" msgstr "" msgid "Mid-Weight Paper" msgstr "" msgid "Middle" msgstr "" msgid "Missing CloseGroup" msgstr "CloseGroup ãŒã‚りã¾ã›ã‚“" msgid "Missing PPD-Adobe-4.x header" msgstr "PPD-Adobe-4.x ヘッダーãŒã‚りã¾ã›ã‚“" msgid "Missing asterisk in column 1" msgstr "1 列目ã«ã‚¢ã‚¹ã‚¿ãƒªã‚¹ã‚¯ãŒã‚りã¾ã›ã‚“" msgid "Missing document-number attribute." msgstr "document-number 属性ãŒã‚りã¾ã›ã‚“。" #, c-format msgid "Missing double quote on line %d." msgstr "%d 行ã«äºŒé‡å¼•用符ãŒã‚りã¾ã›ã‚“。" msgid "Missing form variable" msgstr "form 変数ãŒã‚りã¾ã›ã‚“。" msgid "Missing last-document attribute in request." msgstr "リクエスト㫠last-document 属性ãŒã‚りã¾ã›ã‚“。" msgid "Missing media or media-col." msgstr "media ã¾ãŸã¯ media-col ãŒã‚りã¾ã›ã‚“。" msgid "Missing media-size in media-col." msgstr "media-col ã« media-size ãŒã‚りã¾ã›ã‚“。" msgid "Missing notify-subscription-ids attribute." msgstr "notify-subscription-ids 属性ãŒã‚りã¾ã›ã‚“。" msgid "Missing option keyword" msgstr "オプションキーワードãŒã‚りã¾ã›ã‚“" msgid "Missing requesting-user-name attribute." msgstr "requesting-user-name 属性ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“。" #, c-format msgid "Missing required attribute \"%s\"." msgstr "" msgid "Missing required attributes." msgstr "å¿…é ˆã®å±žæ€§ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“。" msgid "Missing resource in URI" msgstr "URI ã®ãƒªã‚½ãƒ¼ã‚¹ãŒãªã„" msgid "Missing scheme in URI" msgstr "URI ã®ã‚¹ã‚­ãƒ¼ãƒ ãŒãªã„" #, c-format msgid "Missing value on line %d." msgstr "%d 行ã«å€¤ãŒã‚りã¾ã›ã‚“。" msgid "Missing value string" msgstr "値文字列ãŒã‚りã¾ã›ã‚“" msgid "Missing x-dimension in media-size." msgstr "media-size ã« x-dimension ãŒã‚りã¾ã›ã‚“。" msgid "Missing y-dimension in media-size." msgstr "media-size ã« y-dimension ãŒã‚りã¾ã›ã‚“。" #, c-format msgid "" "Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgstr "" "モデル: åå‰ = %s\n" " 言語 = %s\n" " プリンタードライãƒãƒ¼ = %s\n" " デãƒã‚¤ã‚¹ ID = %s" msgid "Modifiers:" msgstr "修飾å­:" msgid "Modify Class" msgstr "クラスã®å¤‰æ›´" msgid "Modify Printer" msgstr "プリンターã®å¤‰æ›´" msgid "Mounting Tape" msgstr "" msgid "Move All Jobs" msgstr "ã™ã¹ã¦ã®ã‚¸ãƒ§ãƒ–ã®ç§»å‹•" msgid "Move Job" msgstr "ジョブã®ç§»å‹•" msgid "Moved Permanently" msgstr "別ã®å ´æ‰€ã¸ç§»å‹•ã—ã¾ã—ãŸ" msgid "Multi Layer" msgstr "" msgid "Multi Part Form" msgstr "" msgid "Multi-Hole Punch (Landscape)" msgstr "" msgid "Multi-Hole Punch (Portrait)" msgstr "" msgid "Multi-Hole Punch (Reverse Landscape)" msgstr "" msgid "Multi-Hole Punch (Reverse Portrait)" msgstr "" msgid "Multipurpose" msgstr "" msgid "Multipurpose Paper" msgstr "" msgid "My Mailbox" msgstr "" msgid "NULL PPD file pointer" msgstr "PPD ファイルãƒã‚¤ãƒ³ã‚¿ãƒ¼ãŒ NULL ã§ã™" msgid "Name OID uses indefinite length" msgstr "OID åã¯é™å®šçš„ãªé•·ã•を使用ã—ã¾ã™" msgid "Nested classes are not allowed." msgstr "入れå­ã«ãªã£ãŸã‚¯ãƒ©ã‚¹ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“。" msgid "Never" msgstr "Never" msgid "New credentials are not valid for name." msgstr "" msgid "New credentials are older than stored credentials." msgstr "" msgid "No" msgstr "ã„ã„ãˆ" msgid "No Content" msgstr "中身ãŒã‚りã¾ã›ã‚“" msgid "No IPP attributes." msgstr "" msgid "No PPD name" msgstr "PPD ã®åå‰ãŒã‚りã¾ã›ã‚“" msgid "No VarBind SEQUENCE" msgstr "VarBind SEQUENCE ãŒã‚りã¾ã›ã‚“" msgid "No Windows printer drivers are installed." msgstr "Windows プリンタードライãƒãƒ¼ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。" msgid "No active connection" msgstr "ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæŽ¥ç¶šã¯ã‚りã¾ã›ã‚“" msgid "No active connection." msgstr "ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæŽ¥ç¶šã¯ã‚りã¾ã›ã‚“。" #, c-format msgid "No active jobs on %s." msgstr "%s ã«ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚¸ãƒ§ãƒ–ã¯ã‚りã¾ã›ã‚“。" msgid "No attributes in request." msgstr "リクエストã«å±žæ€§ãŒã‚りã¾ã›ã‚“。" msgid "No authentication information provided." msgstr "èªè¨¼æƒ…å ±ãŒæä¾›ã•れã¦ã„ã¾ã›ã‚“。" msgid "No common name specified." msgstr "" msgid "No community name" msgstr "コミュニティåãŒã‚りã¾ã›ã‚“" msgid "No default printer." msgstr "デフォルトã®ãƒ—リンターã¯ã‚りã¾ã›ã‚“。" msgid "No destinations added." msgstr "追加ã•れãŸå®›å…ˆã¯ã‚りã¾ã›ã‚“。" msgid "No device URI found in argv[0] or in DEVICE_URI environment variable." msgstr "argv[0] ã¾ãŸã¯ 環境変数 DEVICE_URI ã«ãƒ‡ãƒã‚¤ã‚¹ URI ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" msgid "No error-index" msgstr "エラーインデックスãŒã‚りã¾ã›ã‚“" msgid "No error-status" msgstr "エラーステータスãŒã‚りã¾ã›ã‚“" msgid "No file in print request." msgstr "å°åˆ·ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ãƒ•ァイルãŒã‚りã¾ã›ã‚“。" msgid "No modification time" msgstr "変更時刻ãŒã‚りã¾ã›ã‚“" msgid "No name OID" msgstr "OID åãŒã‚りã¾ã›ã‚“" msgid "No pages were found." msgstr " ページãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" msgid "No printer name" msgstr "プリンターåãŒã‚りã¾ã›ã‚“" msgid "No printer-uri found" msgstr "プリンター URI ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" msgid "No printer-uri found for class" msgstr "クラスã®ãƒ—リンター URI ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" msgid "No printer-uri in request." msgstr "プリンター URI ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒã‚りã¾ã›ã‚“。" msgid "No request URI." msgstr "リクエスト URI ãŒã‚りã¾ã›ã‚“。" msgid "No request protocol version." msgstr "リクエストプロトコルãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚りã¾ã›ã‚“。" msgid "No request sent." msgstr "リクエストãŒé€ã‚‰ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚" msgid "No request-id" msgstr "リクエストID ãŒã‚りã¾ã›ã‚“" msgid "No stored credentials, not valid for name." msgstr "" msgid "No subscription attributes in request." msgstr "リクエストã«ã‚µãƒ–スクリプション属性ãŒã‚りã¾ã›ã‚“。" msgid "No subscriptions found." msgstr "サブスクリプションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" msgid "No variable-bindings SEQUENCE" msgstr "variable-bindings SEQUENCE ãŒã‚りã¾ã›ã‚“" msgid "No version number" msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³åãŒã‚りã¾ã›ã‚“" msgid "Non-continuous (Mark sensing)" msgstr "éžé€£ç¶šã§ã™ (Mark sensing)" msgid "Non-continuous (Web sensing)" msgstr "éžé€£ç¶šã§ã™ (Web sensing)" msgid "None" msgstr "" msgid "Normal" msgstr "標準" msgid "Not Found" msgstr "見ã¤ã‹ã‚Šã¾ã›ã‚“" msgid "Not Implemented" msgstr "実装ã•れã¦ã„ã¾ã›ã‚“" msgid "Not Installed" msgstr "インストールã•れã¦ã„ã¾ã›ã‚“" msgid "Not Modified" msgstr "変更ã•れã¦ã„ã¾ã›ã‚“" msgid "Not Supported" msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" msgid "Not allowed to print." msgstr "å°åˆ·ãŒè¨±å¯ã•れã¦ã„ã¾ã›ã‚“。" msgid "Note" msgstr "注æ„" msgid "" "Note: this program only validates the DSC comments, not the PostScript " "itself." msgstr "" "注æ„: ã“ã®ãƒ—ログラム㯠DSC コメントを検証ã™ã‚‹ã ã‘ã§ã€PostScript 自身を検証ã™" "ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。" msgid "OK" msgstr "OK" msgid "Off (1-Sided)" msgstr "Off (片é¢)" msgid "Office Recycled Paper" msgstr "" msgid "Oki" msgstr "Oki" msgid "Online Help" msgstr "オンラインヘルプ" msgid "Only local users can create a local printer." msgstr "" #, c-format msgid "Open of %s failed: %s" msgstr "%s ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—ã—ã¾ã—ãŸ: %s" msgid "OpenGroup without a CloseGroup first" msgstr "OpenGroup ã®å‰ã«ã¾ãš CloseGroup ãŒå¿…è¦ã§ã™" msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" msgstr "OpenUI/JCLOpenUI ã®å‰ã«ã¾ãš CloseUI/JCLCloseUI ãŒå¿…è¦ã§ã™" msgid "Operation Policy" msgstr "æ“作ãƒãƒªã‚·ãƒ¼" msgid "Optical Disc" msgstr "" #, c-format msgid "Option \"%s\" cannot be included via %%%%IncludeFeature." msgstr "オプション \"%s\" 㯠%%%%IncludeFeature 経由ã§å«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" msgid "Options Installed" msgstr "インストールã•れãŸã‚ªãƒ—ション" msgid "Options:" msgstr "オプション:" msgid "Other" msgstr "" msgid "Out of date PPD cache file." msgstr "PPD キャッシュファイルãŒå¤ã™ãŽã¾ã™ã€‚" msgid "Out of memory." msgstr "メモリーãŒè¶³ã‚Šã¾ã›ã‚“。" msgid "Output Mode" msgstr "出力モード" msgid "Output bin is almost full." msgstr "排紙ビンãŒã»ã¨ã‚“ã©æº€æ¯ã§ã™ã€‚" msgid "Output bin is full." msgstr "æŽ’ç´™ãƒ“ãƒ³ãŒæº€æ¯ã§ã™ã€‚" msgid "Output bin is missing." msgstr "排紙ビンãŒã‚りã¾ã›ã‚“。" msgid "PASS" msgstr "åˆæ ¼" msgid "PCL Laser Printer" msgstr "PCL レーザープリンター" msgid "PRC16K" msgstr "PRC16K" msgid "PRC16K Long Edge" msgstr "PRC16K 長辺é€ã‚Š" msgid "PRC32K" msgstr "PRC32K" msgid "PRC32K Long Edge" msgstr "PRC32K 長辺é€ã‚Š" msgid "PRC32K Oversize" msgstr "PRC32K (特大)" msgid "PRC32K Oversize Long Edge" msgstr "PRC32K (特大) 長辺é€ã‚Š" msgid "Packet does not contain a Get-Response-PDU" msgstr "パケット㌠Get-Response-PDU ã‚’å«ã‚“ã§ã„ã¾ã›ã‚“" msgid "Packet does not start with SEQUENCE" msgstr "パケット㌠SEQUENCE ã‹ã‚‰å§‹ã¾ã‚Šã¾ã›ã‚“" msgid "Paper" msgstr "" msgid "Paper jam." msgstr "用紙詰ã¾ã‚Šã§ã™ã€‚" msgid "Paper tray is almost empty." msgstr "給紙トレイãŒã»ã¨ã‚“ã©ç©ºã§ã™ã€‚" msgid "Paper tray is empty." msgstr "給紙トレイãŒç©ºã§ã™ã€‚" msgid "Paper tray is missing." msgstr "給紙トレイãŒã‚りã¾ã›ã‚“。" msgid "Parallel Fold" msgstr "" msgid "ParamCustominCutInterval" msgstr "ParamCustominCutInterval" msgid "ParamCustominTearInterval" msgstr "ParamCustominTearInterval" #, c-format msgid "Password for %s on %s? " msgstr "%s ã®ãƒ‘スワード (%s 上)? " #, c-format msgid "Password for %s required to access %s via SAMBA: " msgstr "%s ã®ãƒ‘スワード (SAMBA 経由㧠%s ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã®ã«å¿…è¦):" msgid "Pause Class" msgstr "クラスã®ä¼‘æ­¢" msgid "Pause Printer" msgstr "プリンターã®ä¼‘æ­¢" msgid "Peel-Off" msgstr "Peel-Off" msgid "Permanent Labels" msgstr "" msgid "Photo" msgstr "写真" msgid "Photo Film" msgstr "" msgid "Photo Labels" msgstr "写真ラベル" msgid "Photo Paper" msgstr "" msgid "Photo Paper Plus Glossy II" msgstr "" msgid "Photo Paper Pro Platinum" msgstr "" msgid "Plain Envelope" msgstr "" msgid "Plain Paper" msgstr "普通紙" msgid "Plastic" msgstr "" msgid "Plastic Archival" msgstr "" msgid "Plastic Colored" msgstr "" msgid "Plastic Glossy" msgstr "" msgid "Plastic High Gloss" msgstr "" msgid "Plastic Matte" msgstr "" msgid "Plastic Satin" msgstr "" msgid "Plastic Semi Gloss" msgstr "" msgid "Plate" msgstr "" msgid "Policies" msgstr "ãƒãƒªã‚·ãƒ¼" msgid "Polyester" msgstr "" msgid "Port Monitor" msgstr "ãƒãƒ¼ãƒˆãƒ¢ãƒ‹ã‚¿ãƒ¼" msgid "PostScript Printer" msgstr "PostScript プリンター" msgid "Postcard" msgstr "ãƒã‚¬ã‚­" msgid "Postcard Double" msgstr "" msgid "Postcard Double Long Edge" msgstr "往復ãƒã‚¬ã‚­ 長辺é€ã‚Š" msgid "Postcard Long Edge" msgstr "ãƒã‚¬ã‚­ 長辺é€ã‚Š" msgid "Poster Fold" msgstr "" msgid "Pre Cut Tabs" msgstr "" msgid "Premium Inkjet Paper" msgstr "" msgid "Premium Photo Glossy Paper" msgstr "" msgid "Premium Presentation Matte Paper" msgstr "" msgid "Preparing to print." msgstr "å°åˆ·æº–備中ã§ã™ã€‚" msgid "Preprinted Envelope" msgstr "" msgid "Preprinted Paper" msgstr "" msgid "Print Density" msgstr "å°åˆ·å¯†åº¦" msgid "Print Job:" msgstr "ジョブã®å°åˆ·:" msgid "Print Mode" msgstr "å°åˆ·ãƒ¢ãƒ¼ãƒ‰" msgid "Print Quality" msgstr "" msgid "Print Rate" msgstr "å°åˆ·ãƒ¬ãƒ¼ãƒˆ" msgid "Print Self-Test Page" msgstr "自己テストページã®å°åˆ·" msgid "Print Speed" msgstr "å°åˆ·é€Ÿåº¦" msgid "Print Test Page" msgstr "テストページã®å°åˆ·" msgid "Print and Cut" msgstr "プリントã—ã¦ã‚«ãƒƒãƒˆ" msgid "Print and Tear" msgstr "プリントã—ã¦åˆ‡ã‚Šå–ã‚‹" msgid "Print file sent." msgstr "プリントファイルãŒé€ã‚‰ã‚Œã¾ã—ãŸã€‚" msgid "Print job canceled at printer." msgstr "å°åˆ·ã‚¸ãƒ§ãƒ–ã¯ãƒ—リンターã§ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•れã¾ã—ãŸã€‚" msgid "Print job too large." msgstr "å°åˆ·ã‚¸ãƒ§ãƒ–ãŒå¤§ãã™ãŽã¾ã™ã€‚" msgid "Print job was not accepted." msgstr "å°åˆ·ã‚¸ãƒ§ãƒ–ãŒå—ã‘付ã‘られã¾ã›ã‚“ã§ã—ãŸã€‚" #, c-format msgid "Printer \"%s\" already exists." msgstr "" msgid "Printer Added" msgstr "追加ã•れãŸãƒ—リンター" msgid "Printer Default" msgstr "デフォルトã®ãƒ—リンター" msgid "Printer Deleted" msgstr "削除ã•れãŸãƒ—リンター" msgid "Printer Modified" msgstr "変更ã•れãŸãƒ—リンター" msgid "Printer Paused" msgstr "プリンターã®ä¼‘æ­¢" msgid "Printer Settings" msgstr "プリンター設定" msgid "Printer cannot print supplied content." msgstr "プリンターã¯å—ä¿¡ã—ãŸå†…容をå°åˆ·ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" msgid "Printer cannot print with supplied options." msgstr "指定ã•れãŸã‚ªãƒ—ションã§ã¯ãƒ—リンターã¯å°åˆ·ã§ãã¾ã›ã‚“。" msgid "Printer does not support required IPP attributes or document formats." msgstr "" msgid "Printer:" msgstr "プリンター:" msgid "Printers" msgstr "プリンター" #, c-format msgid "Printing page %d, %u%% complete." msgstr "ページ %d, %u%% ã®å°åˆ·ãŒå®Œäº†ã—ã¾ã—ãŸã€‚" msgid "Punch" msgstr "" msgid "Punched Paper" msgstr "" msgid "Quarto" msgstr "Quarto" msgid "Quota limit reached." msgstr "クォータã®åˆ¶é™ã«é”ã—ã¾ã—ãŸã€‚" msgid "Rank Owner Job File(s) Total Size" msgstr "ランク 所有者 ジョブ ファイル åˆè¨ˆã‚µã‚¤ã‚º" msgid "Rear" msgstr "" msgid "Rear Tray" msgstr "" msgid "Reject Jobs" msgstr "ã‚¸ãƒ§ãƒ–ã®æ‹’å¦" #, c-format msgid "Remote host did not accept control file (%d)." msgstr "リモートホストãŒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒ•ァイルをå—ã‘付ã‘ã¾ã›ã‚“ã§ã—㟠(%d)。" #, c-format msgid "Remote host did not accept data file (%d)." msgstr "リモートホストãŒãƒ‡ãƒ¼ã‚¿ãƒ•ァイルをå—ã‘付ã‘ã¾ã›ã‚“ã§ã—㟠(%d)。" msgid "Reprint After Error" msgstr "エラー後ã®å†å°åˆ·" msgid "Request Entity Too Large" msgstr "è¦æ±‚ã™ã‚‹ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãŒå¤§ãã™ãŽã¾ã™" msgid "Resolution" msgstr "è§£åƒåº¦" msgid "Resume Class" msgstr "クラスをå†é–‹ã™ã‚‹" msgid "Resume Printer" msgstr "プリンターをå†é–‹ã™ã‚‹" msgid "Return Address" msgstr "返信用ラベル" msgid "Rewind" msgstr "å·»ãå–り" msgid "Right" msgstr "" msgid "Right Gate Fold" msgstr "" msgid "Right Tray" msgstr "" msgid "Roll" msgstr "" msgid "Roll 1" msgstr "" msgid "Roll 10" msgstr "" msgid "Roll 2" msgstr "" msgid "Roll 3" msgstr "" msgid "Roll 4" msgstr "" msgid "Roll 5" msgstr "" msgid "Roll 6" msgstr "" msgid "Roll 7" msgstr "" msgid "Roll 8" msgstr "" msgid "Roll 9" msgstr "" #, c-format msgid "Running command: %s %s -N -A %s -c '%s'" msgstr "コマンドを実行中: %s %s -N -A %s -c '%s'" msgid "SEQUENCE uses indefinite length" msgstr "SEQUENCE ã¯ä¸å®šé•·ã‚’使用ã—ã¦ã„ã¾ã™" msgid "SSL/TLS Negotiation Error" msgstr "SSL/TLS ã®ãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ã‚¨ãƒ©ãƒ¼" msgid "Saddle Stitch" msgstr "" msgid "Satin Labels" msgstr "" msgid "Satin Optical Disc" msgstr "" msgid "Satin Photo Paper" msgstr "" msgid "Screen" msgstr "" msgid "Screen Paged" msgstr "" msgid "Security Labels" msgstr "" msgid "See Other" msgstr "残りを見ã¦ãã ã•ã„" msgid "See remote printer." msgstr "" msgid "Self Adhesive" msgstr "" msgid "Self Adhesive Film" msgstr "" msgid "Self-signed credentials are blocked." msgstr "" msgid "Semi-Gloss Fabric" msgstr "" msgid "Semi-Gloss Labels" msgstr "" msgid "Semi-Gloss Optical Disc" msgstr "" msgid "Semi-Gloss Photo Paper" msgstr "" msgid "Sending data to printer." msgstr "データをプリンターã«é€ä¿¡ã—ã¦ã„ã¾ã™ã€‚" msgid "Server Restarted" msgstr "å†èµ·å‹•ã•れãŸã‚µãƒ¼ãƒãƒ¼" msgid "Server Security Auditing" msgstr "サーãƒãƒ¼ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ç›£æŸ»" msgid "Server Started" msgstr "é–‹å§‹ã•れãŸã‚µãƒ¼ãƒãƒ¼" msgid "Server Stopped" msgstr "åœæ­¢ã•れãŸã‚µãƒ¼ãƒãƒ¼" msgid "Server credentials not set." msgstr "サーãƒãƒ¼è¨¼æ˜Žæ›¸ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“。" msgid "Service Unavailable" msgstr "利用ã§ããªã„サービス" msgid "Set Allowed Users" msgstr "許å¯ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®è¨­å®š" msgid "Set As Server Default" msgstr "サーãƒãƒ¼ã®ãƒ‡ãƒ•ォルトã«è¨­å®š" msgid "Set Class Options" msgstr "クラスオプションã®è¨­å®š" msgid "Set Printer Options" msgstr "プリンターオプションã®è¨­å®š" msgid "Set Publishing" msgstr "公開ã®è¨­å®š" msgid "Shipping Address" msgstr "発é€å…ˆãƒ©ãƒ™ãƒ«" msgid "Short-Edge (Landscape)" msgstr "短辺 (横原稿)" msgid "Shrink Foil" msgstr "" msgid "Side" msgstr "" msgid "Side Tray" msgstr "" msgid "Single Face" msgstr "" msgid "Single Punch (Landscape)" msgstr "" msgid "Single Punch (Portrait)" msgstr "" msgid "Single Punch (Reverse Landscape)" msgstr "" msgid "Single Punch (Reverse Portrait)" msgstr "" msgid "Single Staple (Landscape)" msgstr "" msgid "Single Staple (Portrait)" msgstr "" msgid "Single Staple (Reverse Landscape)" msgstr "" msgid "Single Staple (Reverse Portrait)" msgstr "" msgid "Single Wall Cardboard" msgstr "" msgid "Sleeve" msgstr "" msgid "Special Paper" msgstr "特殊紙" #, c-format msgid "Spooling job, %.0f%% complete." msgstr "ジョブをスプール中ã€%.0f%% 完了ã—ã¾ã—ãŸã€‚" msgid "Stacker 1" msgstr "" msgid "Stacker 10" msgstr "" msgid "Stacker 2" msgstr "" msgid "Stacker 3" msgstr "" msgid "Stacker 4" msgstr "" msgid "Stacker 5" msgstr "" msgid "Stacker 6" msgstr "" msgid "Stacker 7" msgstr "" msgid "Stacker 8" msgstr "" msgid "Stacker 9" msgstr "" msgid "Standard" msgstr "標準" msgid "Staple" msgstr "" msgid "Staple Edge" msgstr "" msgid "Staple Edge (Landscape)" msgstr "" msgid "Staple Edge (Portrait)" msgstr "" msgid "Staple Edge (Reverse Landscape)" msgstr "" msgid "Staple Edge (Reverse Portrait)" msgstr "" #. TRANSLATORS: Banner/cover sheet before the print job. msgid "Starting Banner" msgstr "é–‹å§‹ãƒãƒŠãƒ¼" #, c-format msgid "Starting page %d." msgstr "ページ %d ã‚’é–‹å§‹ã—ã¦ã„ã¾ã™ã€‚" msgid "Statement" msgstr "記述" #, c-format msgid "Subscription #%d does not exist." msgstr "ã‚µãƒ–ã‚¹ã‚¯ãƒªãƒ—ã‚·ãƒ§ãƒ³ç•ªå· %d ã¯å­˜åœ¨ã—ã¾ã›ã‚“。" msgid "Substitutions:" msgstr "ç½®æ›:" msgid "Super A" msgstr "スーパー A" msgid "Super B" msgstr "スーパー B" msgid "Super B/A3" msgstr "スーパー B/A3" msgid "Switching Protocols" msgstr "プロトコルã®å¤‰æ›´" msgid "Tab Stock" msgstr "" msgid "Tabloid" msgstr "タブロイド" msgid "Tabloid Oversize" msgstr "タブロイド (特大)" msgid "Tabloid Oversize Long Edge" msgstr "タブロイド (特大) 長辺é€ã‚Š" msgid "Tear" msgstr "Tear" msgid "Tear-Off" msgstr "Tear-Off" msgid "Tear-Off Adjust Position" msgstr "Tear-Off ä½ç½®èª¿ç¯€" #, c-format msgid "The \"%s\" attribute is required for print jobs." msgstr "å°åˆ·ã‚¸ãƒ§ãƒ–ã« \"%s\" 属性ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "The %s attribute cannot be provided with job-ids." msgstr "%s 属性ã¯ã€ã‚¸ãƒ§ãƒ– ID ã¨ä¸€ç·’ã«ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #, c-format msgid "" "The '%s' Job Status attribute cannot be supplied in a job creation request." msgstr "" #, c-format msgid "" "The '%s' operation attribute cannot be supplied in a Create-Job request." msgstr "%s æ“作属性ã¯ã€Create-Job リクエストã®ä¸­ã§ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #, c-format msgid "The PPD file \"%s\" could not be found." msgstr "PPD ファイル \"%s\" ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #, c-format msgid "The PPD file \"%s\" could not be opened: %s" msgstr "PPD ファイル \"%s\" ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ: %s" msgid "The PPD file could not be opened." msgstr "PPD ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚" msgid "" "The class name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "クラスå㯠127 文字以内ã®è¡¨ç¤ºå¯èƒ½æ–‡å­—ã‹ã‚‰ãªã‚Šã€ç©ºç™½ã€ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ (/)ã€ãƒãƒƒ" "シュ (#) ã‚’å«ã‚“ã§ã¯ãªã‚Šã¾ã›ã‚“。" msgid "The developer unit needs to be replaced." msgstr "ç¾åƒãƒ¦ãƒ‹ãƒƒãƒˆã®äº¤æ›ãŒå¿…è¦ã§ã™ã€‚" msgid "The developer unit will need to be replaced soon." msgstr "ã‚‚ã†ã™ãç¾åƒãƒ¦ãƒ‹ãƒƒãƒˆã®äº¤æ›æ™‚期ã§ã™ã€‚" msgid "The fuser's temperature is high." msgstr "定ç€å™¨ã®æ¸©åº¦ãŒé«˜ã™ãŽã¾ã™ã€‚" msgid "The fuser's temperature is low." msgstr "定ç€å™¨ã®æ¸©åº¦ãŒä½Žã™ãŽã¾ã™ã€‚" msgid "" "The notify-lease-duration attribute cannot be used with job subscriptions." msgstr "" "notify-lease-duration 属性ã¯ã€ã‚¸ãƒ§ãƒ–サブスクリプションã¨ä¸€ç·’ã«ä½¿ã†ã“ã¨ã¯ã§ã" "ã¾ã›ã‚“。" #, c-format msgid "The notify-user-data value is too large (%d > 63 octets)." msgstr "notify-user-data 値ãŒå¤§ãã™ãŽã¾ã™ (%d > 63 オクテット)。" msgid "The optical photoconductor needs to be replaced." msgstr "感光体ã®äº¤æ›ãŒå¿…è¦ã§ã™ã€‚" msgid "The optical photoconductor will need to be replaced soon." msgstr "ã‚‚ã†ã™ã感光体ã®äº¤æ›æ™‚期ã§ã™ã€‚" msgid "The printer configuration is incorrect or the printer no longer exists." msgstr "プリンターã®è¨­å®šãŒæ­£ã—ããªã„ã‹ãƒ—リンターã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã›ã‚“。" msgid "The printer did not respond." msgstr "プリンターãŒå¿œç­”ã—ã¾ã›ã‚“。" msgid "The printer is in use." msgstr "プリンターã¯ä½¿ç”¨ä¸­ã§ã™ã€‚" msgid "The printer is low on ink." msgstr "インク残é‡ãŒæ®‹ã‚Šå°‘ãªããªã£ã¦ã„ã¾ã™ã€‚" msgid "The printer is low on toner." msgstr "トナー残é‡ãŒæ®‹ã‚Šå°‘ãªããªã£ã¦ã„ã¾ã™ã€‚" msgid "The printer is not connected." msgstr "ãƒ—ãƒªãƒ³ã‚¿ãƒ¼ã¯æŽ¥ç¶šã•れã¦ã„ã¾ã›ã‚“。" msgid "The printer is not responding." msgstr "プリンターãŒå¿œç­”ã—ã¦ã„ã¾ã›ã‚“。" msgid "The printer is now connected." msgstr "ãƒ—ãƒªãƒ³ã‚¿ãƒ¼ãŒæŽ¥ç¶šã•れã¾ã—ãŸã€‚" msgid "The printer is now online." msgstr "プリンターã¯ç¾åœ¨ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã§ã™ã€‚" msgid "The printer is offline." msgstr "プリンターã¯ã‚ªãƒ•ラインã§ã™ã€‚" msgid "The printer is unreachable at this time." msgstr "プリンターã«ã¯ç¾åœ¨åˆ°é”ã§ãã¾ã›ã‚“。" msgid "The printer may be out of ink." msgstr "プリンターã®ã‚¤ãƒ³ã‚¯ãŒãªããªã£ã¦ã„るよã†ã§ã™ã€‚" msgid "The printer may be out of toner." msgstr "プリンターã®ãƒˆãƒŠãƒ¼ãŒãªããªã£ã¦ã„るよã†ã§ã™ã€‚" msgid "The printer may not exist or is unavailable at this time." msgstr "プリンターã¯ç¾åœ¨å­˜åœ¨ã—ãªã„ã‹ã€ä½¿ç”¨ã§ããªã„よã†ã§ã™ã€‚" msgid "" "The printer name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "プリンターå㯠127 文字以内ã®è¡¨ç¤ºå¯èƒ½æ–‡å­—ã‹ã‚‰æˆã‚Šã€ç©ºç™½ã€ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ (/)ã€ãƒãƒƒ" "シュ (#) ã‚’å«ã‚“ã§ã¯ãªã‚Šã¾ã›ã‚“。" msgid "The printer or class does not exist." msgstr "プリンターã¾ãŸã¯ã‚¯ãƒ©ã‚¹ã¯å­˜åœ¨ã—ã¾ã›ã‚“。" msgid "The printer or class is not shared." msgstr "プリンターã¾ãŸã¯ã‚¯ãƒ©ã‚¹ã¯å…±æœ‰ã§ãã¾ã›ã‚“。" msgid "The printer's cover is open." msgstr "プリンターã®ã‚«ãƒãƒ¼ãŒé–‹ã„ã¦ã„ã¾ã™ã€‚" msgid "The printer's door is open." msgstr "プリンターã®ãƒ‰ã‚¢ãŒé–‹ã„ã¦ã„ã¾ã™ã€‚" msgid "The printer's interlock is open." msgstr "プリンターã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ­ãƒƒã‚¯ãŒé–‹ã„ã¦ã„ã¾ã™ã€‚" msgid "The printer's waste bin is almost full." msgstr "プリンターã®å»ƒã‚¤ãƒ³ã‚¯ã¾ãŸã¯å»ƒãƒˆãƒŠãƒ¼å®¹å™¨ãŒã»ã¨ã‚“ã©ä¸€æ¯ã§ã™ã€‚" msgid "The printer's waste bin is full." msgstr "プリンターã®å»ƒã‚¤ãƒ³ã‚¯ã¾ãŸã¯å»ƒãƒˆãƒŠãƒ¼å®¹å™¨ãŒä¸€æ¯ã§ã™ã€‚" #, c-format msgid "The printer-uri \"%s\" contains invalid characters." msgstr "printer-uri \"%s\" ã«ã¯ã€ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" msgid "The printer-uri attribute is required." msgstr "printer-uri 属性ã¯å¿…é ˆã§ã™ã€‚" msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." msgstr "" "printer-uri ã¯ã€\"ipp://ホストå/classes/クラスå\" å½¢å¼ã§ãªã‘れã°ãªã‚Šã¾ã›" "ん。" msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgstr "" "printer-uri 㯠\"ipp://ホストå/printers/プリンターå\" å½¢å¼ã§ãªã‘れã°ãªã‚Šã¾" "ã›ã‚“。" msgid "" "The subscription name may not contain spaces, slashes (/), question marks " "(?), or the pound sign (#)." msgstr "" "サブスクリプションåã«ã¯ã€ã‚¹ãƒšãƒ¼ã‚¹ã€ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ (/)ã€ç–‘å•府 (?)ã€ãƒãƒƒã‚·ãƒ¥ (#) " "を使用ã—ãªã„ã§ãã ã•ã„。" msgid "" "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to " "enable it." msgstr "" "Web インターフェイスãŒç¾åœ¨ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚有効ã«ã™ã‚‹ã«ã¯ \"cupsctl " "WebInterface=yes\" を実行ã—ã¦ãã ã•ã„。" #, c-format msgid "The which-jobs value \"%s\" is not supported." msgstr "which-jobs ã®å€¤ \"%s\" ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。" msgid "There are too many subscriptions." msgstr "サブスクリプションãŒå¤šã™ãŽã¾ã™ã€‚" msgid "There was an unrecoverable USB error." msgstr "回復ä¸å¯èƒ½ãª USB ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¦ã„ã¾ã™ã€‚" msgid "Thermal Transfer Media" msgstr "熱転写メディア" msgid "Too many active jobs." msgstr "アクティブãªã‚¸ãƒ§ãƒ–ãŒå¤šã™ãŽã¾ã™ã€‚" #, c-format msgid "Too many job-sheets values (%d > 2)." msgstr "job-sheets 値ãŒå¤šã™ãŽã¾ã™ (%d > 2)。" #, c-format msgid "Too many printer-state-reasons values (%d > %d)." msgstr "printer-state-reasons 値ãŒå¤šã™ãŽã¾ã™ (%d > %d)。" msgid "Top" msgstr "" msgid "Top Tray" msgstr "" msgid "Tractor" msgstr "" msgid "Transfer" msgstr "" msgid "Transparency" msgstr "OHP シート" msgid "Tray" msgstr "トレイ" msgid "Tray 1" msgstr "トレイ 1" msgid "Tray 10" msgstr "" msgid "Tray 11" msgstr "" msgid "Tray 12" msgstr "" msgid "Tray 13" msgstr "" msgid "Tray 14" msgstr "" msgid "Tray 15" msgstr "" msgid "Tray 16" msgstr "" msgid "Tray 17" msgstr "" msgid "Tray 18" msgstr "" msgid "Tray 19" msgstr "" msgid "Tray 2" msgstr "トレイ 2" msgid "Tray 20" msgstr "" msgid "Tray 3" msgstr "トレイ 3" msgid "Tray 4" msgstr "トレイ 4" msgid "Tray 5" msgstr "" msgid "Tray 6" msgstr "" msgid "Tray 7" msgstr "" msgid "Tray 8" msgstr "" msgid "Tray 9" msgstr "" msgid "Triple Staple (Landscape)" msgstr "" msgid "Triple Staple (Portrait)" msgstr "" msgid "Triple Staple (Reverse Landscape)" msgstr "" msgid "Triple Staple (Reverse Portrait)" msgstr "" msgid "Triple Wall Cardboard" msgstr "" msgid "Trust on first use is disabled." msgstr "" msgid "URI Too Long" msgstr "URI ãŒé•·ã™ãŽã¾ã™" msgid "URI too large" msgstr "URI ãŒé•·ã™ãŽã‚‹" msgid "US Fanfold" msgstr "" msgid "US Ledger" msgstr "US レジャー" msgid "US Legal" msgstr "US リーガル" msgid "US Legal Oversize" msgstr "US リーガル (特大)" msgid "US Letter" msgstr "US レター" msgid "US Letter Long Edge" msgstr "US レター 長辺é€ã‚Š" msgid "US Letter Oversize" msgstr "US レター (特大)" msgid "US Letter Oversize Long Edge" msgstr "US レター (特大) 長辺é€ã‚Š" msgid "US Letter Small" msgstr "US レター (å°)" msgid "Unable to access cupsd.conf file" msgstr "cupsd.conf ファイルã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“" msgid "Unable to access help file." msgstr "ヘルプファイルã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。" msgid "Unable to add RSS subscription" msgstr "RSS 購読を追加ã§ãã¾ã›ã‚“" msgid "Unable to add class" msgstr "クラスを追加ã§ãã¾ã›ã‚“" msgid "Unable to add document to print job." msgstr "ドキュメントをå°åˆ·ã‚¸ãƒ§ãƒ–ã«è¿½åŠ ã§ãã¾ã›ã‚“。" #, c-format msgid "Unable to add job for destination \"%s\"." msgstr "宛先 \"%s\"ã«ã‚¸ãƒ§ãƒ–を追加ã§ãã¾ã›ã‚“。" msgid "Unable to add printer" msgstr "プリンターを追加ã§ãã¾ã›ã‚“" msgid "Unable to allocate memory for file types." msgstr "ファイルタイプ用ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“。" msgid "Unable to allocate memory for page info" msgstr "ページ情報ã®ãƒ¡ãƒ¢ãƒªãƒ¼å‰²ã‚Šå½“ã¦ãŒã§ãã¾ã›ã‚“" msgid "Unable to allocate memory for pages array" msgstr "ページアレイã®ãƒ¡ãƒ¢ãƒªãƒ¼å‰²ã‚Šå½“ã¦ãŒã§ãã¾ã›ã‚“" msgid "Unable to cancel RSS subscription" msgstr "RSS 購読をキャンセルã§ãã¾ã›ã‚“" msgid "Unable to cancel print job." msgstr "プリンターを変更ã§ãã¾ã›ã‚“。" msgid "Unable to change printer" msgstr "プリンターを変更ã§ãã¾ã›ã‚“" msgid "Unable to change printer-is-shared attribute" msgstr "printer-is-shared 属性を変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“" msgid "Unable to change server settings" msgstr "サーãƒãƒ¼ã®è¨­å®šã‚’変更ã§ãã¾ã›ã‚“" #, c-format msgid "Unable to compile mimeMediaType regular expression: %s." msgstr "mimeMediaType ã®æ­£è¦è¡¨ç¾ã‚’解釈ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s。" #, c-format msgid "Unable to compile naturalLanguage regular expression: %s." msgstr "naturalLanguage ã®æ­£è¦è¡¨ç¾ã‚’解釈ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s。" msgid "Unable to configure printer options." msgstr "プリンターオプションを設定ã§ãã¾ã›ã‚“。" msgid "Unable to connect to host." msgstr "ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã§ãã¾ã›ã‚“。" msgid "Unable to contact printer, queuing on next printer in class." msgstr "プリンターã¨äº¤ä¿¡ã§ãã¾ã›ã‚“ã€‚ã‚¯ãƒ©ã‚¹å†…ã®æ¬¡ã®ãƒ—リンターã«ã‚­ãƒ¥ãƒ¼ã—ã¾ã™ã€‚" #, c-format msgid "Unable to copy 64-bit CUPS printer driver files (%d)." msgstr "64-bit 版㮠CUPS プリンタードライãƒãƒ¼ãƒ•ァイルをコピーã§ãã¾ã›ã‚“ (%d)。" #, c-format msgid "Unable to copy 64-bit Windows printer driver files (%d)." msgstr "64-bit 版㮠Windows プリンタードライãƒãƒ¼ã‚’コピーã§ãã¾ã›ã‚“ (%d)。" #, c-format msgid "Unable to copy CUPS printer driver files (%d)." msgstr "複数㮠CUPS プリンタードライãƒãƒ¼ãƒ•ァイルをコピーã§ãã¾ã›ã‚“ (%d)。" #, c-format msgid "Unable to copy PPD file - %s" msgstr "PPD ファイルをコピーã§ãã¾ã›ã‚“ - %s" msgid "Unable to copy PPD file." msgstr "PPD ファイルをコピーã§ãã¾ã›ã‚“。" #, c-format msgid "Unable to copy Windows 2000 printer driver files (%d)." msgstr "" "複数㮠Windows 2000 プリンタードライãƒãƒ¼ãƒ•ァイルをコピーã§ãã¾ã›ã‚“ (%d)。" #, c-format msgid "Unable to copy Windows 9x printer driver files (%d)." msgstr "" "複数㮠Windows 9x プリンタードライãƒãƒ¼ãƒ•ァイルをコピーã§ãã¾ã›ã‚“ (%d)。" msgid "Unable to create credentials from array." msgstr "" msgid "Unable to create printer-uri" msgstr "printer-uri を作æˆã§ãã¾ã›ã‚“" msgid "Unable to create printer." msgstr "" msgid "Unable to create server credentials." msgstr "サーãƒãƒ¼è¨¼æ˜Žæ›¸ã‚’作æˆã§ãã¾ã›ã‚“。" msgid "Unable to create temporary file" msgstr "テンãƒãƒ©ãƒªãƒ¼ãƒ•ァイルを作æˆã§ãã¾ã›ã‚“" msgid "Unable to delete class" msgstr "クラスを削除ã§ãã¾ã›ã‚“" msgid "Unable to delete printer" msgstr "プリンターを削除ã§ãã¾ã›ã‚“" msgid "Unable to do maintenance command" msgstr "メンテナンスコマンドを実行ã§ãã¾ã›ã‚“" msgid "Unable to edit cupsd.conf files larger than 1MB" msgstr "1MB 以上㮠cupsd.conf ファイルã¯ç·¨é›†ã§ãã¾ã›ã‚“" msgid "" "Unable to establish a secure connection to host (certificate chain invalid)." msgstr "ホストã¸ã®å®‰å…¨ãªæŽ¥ç¶šãŒç¢ºç«‹ã§ãã¾ã›ã‚“ (èªè¨¼ãƒ‘スãŒç„¡åйã§ã™)。" msgid "" "Unable to establish a secure connection to host (certificate not yet valid)." msgstr "ホストã¸ã®å®‰å…¨ãªæŽ¥ç¶šãŒç¢ºç«‹ã§ãã¾ã›ã‚“ (èªè¨¼ãŒã¾ã æœ‰åйã§ã¯ã‚りã¾ã›ã‚“)。" msgid "Unable to establish a secure connection to host (expired certificate)." msgstr "ホストã¸ã®å®‰å…¨ãªæŽ¥ç¶šãŒç¢ºç«‹ã§ãã¾ã›ã‚“ (èªè¨¼ãŒæœŸé™åˆ‡ã‚Œã§ã™)。" msgid "Unable to establish a secure connection to host (host name mismatch)." msgstr "ホストã¸ã®å®‰å…¨ãªæŽ¥ç¶šãŒç¢ºç«‹ã§ãã¾ã›ã‚“ (ホストåãŒä¸€è‡´ã—ã¾ã›ã‚“)。" msgid "" "Unable to establish a secure connection to host (peer dropped connection " "before responding)." msgstr "" "ホストã¸ã®å®‰å…¨ãªæŽ¥ç¶šãŒç¢ºç«‹ã§ãã¾ã›ã‚“ (応答ãŒã‚ã‚‹å‰ã«æŽ¥ç¶šãŒåˆ‡æ–­ã•れã¾ã—ãŸ)。" msgid "" "Unable to establish a secure connection to host (self-signed certificate)." msgstr "ホストã¸ã®å®‰å…¨ãªæŽ¥ç¶šãŒç¢ºç«‹ã§ãã¾ã›ã‚“ (自己署å証明書ã§ã™)。" msgid "" "Unable to establish a secure connection to host (untrusted certificate)." msgstr "ホストã¸ã®å®‰å…¨ãªæŽ¥ç¶šãŒç¢ºç«‹ã§ãã¾ã›ã‚“ (信用ã§ããªã„証明書ã§ã™)。" msgid "Unable to establish a secure connection to host." msgstr "ホストã¸ã®å®‰å…¨ãªæŽ¥ç¶šã‚’確立ã§ãã¾ã›ã‚“。" msgid "Unable to find destination for job" msgstr "ジョブã®å®›å…ˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" msgid "Unable to find printer." msgstr "プリンターãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" msgid "Unable to find server credentials." msgstr "サーãƒãƒ¼è¨¼æ˜Žæ›¸ã‚’見ã¤ã‘られã¾ã›ã‚“。" msgid "Unable to get backend exit status." msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®çµ‚了ステータスをå–å¾—ã§ãã¾ã›ã‚“。" msgid "Unable to get class list" msgstr "クラスリストをå–å¾—ã§ãã¾ã›ã‚“" msgid "Unable to get class status" msgstr "クラスã®çŠ¶æ…‹ã‚’å–å¾—ã§ãã¾ã›ã‚“。" msgid "Unable to get list of printer drivers" msgstr "プリンタードライãƒãƒ¼ã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã§ãã¾ã›ã‚“" msgid "Unable to get printer attributes" msgstr "プリンター属性をå–å¾—ã§ãã¾ã›ã‚“" msgid "Unable to get printer list" msgstr "プリンターリストをå–å¾—ã§ãã¾ã›ã‚“" msgid "Unable to get printer status" msgstr "プリンターã®çŠ¶æ…‹ã‚’å–å¾—ã§ãã¾ã›ã‚“" msgid "Unable to get printer status." msgstr "プリンターã®çŠ¶æ…‹ã‚’å–å¾—ã§ãã¾ã›ã‚“。" #, c-format msgid "Unable to install Windows 2000 printer driver files (%d)." msgstr "" "複数㮠Windows 2000 プリンタードライãƒãƒ¼ãƒ•ァイルをインストールã§ãã¾ã›ã‚“ " "(%d)。" #, c-format msgid "Unable to install Windows 9x printer driver files (%d)." msgstr "" "複数㮠Windows 9x プリンタードライãƒãƒ¼ãƒ•ァイルをインストールã§ãã¾ã›ã‚“ (%d)。" msgid "Unable to load help index." msgstr "ヘルプã®ç´¢å¼•を読ã¿è¾¼ã‚ã¾ã›ã‚“。" #, c-format msgid "Unable to locate printer \"%s\"." msgstr "プリンター \"%s\" ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" msgid "Unable to locate printer." msgstr "プリンターãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" msgid "Unable to modify class" msgstr "クラスを変更ã§ãã¾ã›ã‚“" msgid "Unable to modify printer" msgstr "プリンターを変更ã§ãã¾ã›ã‚“" msgid "Unable to move job" msgstr "ジョブを移動ã§ãã¾ã›ã‚“" msgid "Unable to move jobs" msgstr "複数ã®ã‚¸ãƒ§ãƒ–を移動ã§ãã¾ã›ã‚“" msgid "Unable to open PPD file" msgstr "PPD ファイルを読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“" msgid "Unable to open cupsd.conf file:" msgstr "cupsd.conf ファイルを開ã‘ã¾ã›ã‚“:" msgid "Unable to open device file" msgstr "デãƒã‚¤ã‚¹ãƒ•ァイルを開ã‘ã¾ã›ã‚“" #, c-format msgid "Unable to open document #%d in job #%d." msgstr "ドキュメント %d (ジョブ %d) ã‚’é–‹ã‘ã¾ã›ã‚“。" msgid "Unable to open help file." msgstr "ヘルプファイルを読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。" msgid "Unable to open print file" msgstr "å°åˆ·ãƒ•ァイルを開ã‘ã¾ã›ã‚“" msgid "Unable to open raster file" msgstr "ラスターファイルを開ã‘ã¾ã›ã‚“" msgid "Unable to print test page" msgstr "テストページをå°åˆ·ã§ãã¾ã›ã‚“" msgid "Unable to read print data." msgstr "プリントデータを読ã¿è¾¼ã‚ã¾ã›ã‚“。" msgid "Unable to rename job document file." msgstr "" msgid "Unable to resolve printer-uri." msgstr "printer-uri を解決ã§ãã¾ã›ã‚“。" #, c-format msgid "Unable to run \"%s\": %s" msgstr "\"%s\" を実行ã§ãã¾ã›ã‚“: %s" msgid "Unable to see in file" msgstr "ファイルを読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“" msgid "Unable to send command to printer driver" msgstr "プリンタードライãƒãƒ¼ã«ã‚³ãƒžãƒ³ãƒ‰ã‚’é€ä¿¡ã§ãã¾ã›ã‚“" msgid "Unable to send data to printer." msgstr "プリンターã«ãƒ‡ãƒ¼ã‚¿ã‚’é€ä¿¡ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。" #, c-format msgid "Unable to set Windows printer driver (%d)." msgstr "Windows プリンタードライãƒãƒ¼ã‚’設定ã§ãã¾ã›ã‚“ (%d)。" msgid "Unable to set options" msgstr "オプションを設定ã§ãã¾ã›ã‚“" msgid "Unable to set server default" msgstr "サーãƒãƒ¼ã‚’デフォルトã«è¨­å®šã§ãã¾ã›ã‚“" msgid "Unable to start backend process." msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®ãƒ—ロセスを起動ã§ãã¾ã›ã‚“。" msgid "Unable to upload cupsd.conf file" msgstr "cupsd.conf ファイルをアップロードã§ãã¾ã›ã‚“" msgid "Unable to use legacy USB class driver." msgstr "å¤ã„タイプ㮠USB クラスドライãƒãƒ¼ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。" msgid "Unable to write print data" msgstr "プリントデータを書ãè¾¼ã‚ã¾ã›ã‚“" #, c-format msgid "Unable to write uncompressed print data: %s" msgstr "éžåœ§ç¸®ã®ãƒ—リントデータを書ãè¾¼ã‚ã¾ã›ã‚“: %s" msgid "Unauthorized" msgstr "未許å¯" msgid "Units" msgstr "ユニット" msgid "Unknown" msgstr "未知" #, c-format msgid "Unknown choice \"%s\" for option \"%s\"." msgstr "\"%s\" (オプション \"%s\" 用) ã¯æœªçŸ¥ã®è¨­å®šã§ã™ã€‚" #, c-format msgid "Unknown encryption option value: \"%s\"." msgstr "\"%s\" ã¯æœªçŸ¥ã®æš—å·ã‚ªãƒ—ション値ã§ã™ã€‚" #, c-format msgid "Unknown file order: \"%s\"." msgstr "\"%s\" ã¯æœªçŸ¥ã®ãƒ•ァイルオーダーã§ã™ã€‚" #, c-format msgid "Unknown format character: \"%c\"." msgstr "\"%c\" ã¯æœªçŸ¥ã®æ›¸å¼æ–‡å­—ã§ã™ã€‚" msgid "Unknown hash algorithm." msgstr "" msgid "Unknown media size name." msgstr "未知ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã‚µã‚¤ã‚ºåç§°ã§ã™ã€‚" #, c-format msgid "Unknown option \"%s\" with value \"%s\"." msgstr "\"%s\" (値 \"%s\") ã¯æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™ã€‚" #, c-format msgid "Unknown option \"%s\"." msgstr "\"%s\" ã¯æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™ã€‚" #, c-format msgid "Unknown print mode: \"%s\"." msgstr "\"%s\" ã¯æœªçŸ¥ã®ãƒ—リントモードã§ã™ã€‚" #, c-format msgid "Unknown printer-error-policy \"%s\"." msgstr "\"%s\" ã¯æœªçŸ¥ã® printer-error-policy ã§ã™ã€‚" #, c-format msgid "Unknown printer-op-policy \"%s\"." msgstr "\"%s\" ã¯æœªçŸ¥ã® printer-op-policy ã§ã™ã€‚" msgid "Unknown request method." msgstr "未知ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆæ–¹æ³•ã§ã™ã€‚" msgid "Unknown request version." msgstr "未知ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ã€‚" msgid "Unknown scheme in URI" msgstr "URI ã«æœªçŸ¥ã®ã‚¹ã‚­ãƒ¼ãƒžãŒã‚りã¾ã™" msgid "Unknown service name." msgstr "未知ã®ã‚µãƒ¼ãƒ“スåã§ã™ã€‚" #, c-format msgid "Unknown version option value: \"%s\"." msgstr "\"%s\" ã¯æœªçŸ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚ªãƒ—ション値ã§ã™ã€‚" #, c-format msgid "Unsupported 'compression' value \"%s\"." msgstr "\"%s\" ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ 'compression' ã®å€¤ã§ã™ã€‚" #, c-format msgid "Unsupported 'document-format' value \"%s\"." msgstr "\"%s\" ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ 'document-format' ã®å€¤ã§ã™ã€‚" msgid "Unsupported 'job-name' value." msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ 'job-name' ã®å€¤ã§ã™ã€‚" #, c-format msgid "Unsupported character set \"%s\"." msgstr "\"%s\" ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„文字セットã§ã™ã€‚" #, c-format msgid "Unsupported compression \"%s\"." msgstr "\"%s\" ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„圧縮形å¼ã§ã™ã€‚" #, c-format msgid "Unsupported document-format \"%s\"." msgstr "\"%s\" ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„文書形å¼ã§ã™ã€‚" #, c-format msgid "Unsupported document-format \"%s/%s\"." msgstr "\"%s/%s\" ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„文書形å¼ã§ã™ã€‚" #, c-format msgid "Unsupported format \"%s\"." msgstr "\"%s\" ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„å½¢å¼ã§ã™ã€‚" msgid "Unsupported margins." msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„マージンã§ã™ã€‚" msgid "Unsupported media value." msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„メディアã®å€¤ã§ã™ã€‚" #, c-format msgid "Unsupported number-up value %d, using number-up=1." msgstr "%d ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ number-up 値ã§ã™ã€‚number-up=1 を使用ã—ã¾ã™ã€‚" #, c-format msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb." msgstr "" "%s ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ number-up-layout 値ã§ã™ã€‚number-up-layout=lrtb を使" "用ã—ã¾ã™ã€‚" #, c-format msgid "Unsupported page-border value %s, using page-border=none." msgstr "" "%s ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ page-border 値ã§ã™ã€‚page-border=none を使用ã—ã¾ã™ã€‚" msgid "Unsupported raster data." msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ラスターデータã§ã™ã€‚" msgid "Unsupported value type" msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„åž‹ã®å€¤ã§ã™" msgid "Upgrade Required" msgstr "アップグレードãŒå¿…è¦ã§ã™" msgid "" "Usage:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]" msgstr "" "ä½¿ã„æ–¹:\n" "\n" " lpadmin [-h サーãƒãƒ¼] -d 宛先\n" " lpadmin [-h サーãƒãƒ¼] -x 宛先\n" " lpadmin [-h サーãƒãƒ¼] -p プリンター [-c 追加クラス] [-i インターフェイ" "ス]\n" " [-m モデル] [-r 削除クラス] [-v デãƒã‚¤ã‚¹]\n" " [-D 宛先] [-P PPD ファイル] [-o åå‰=値]\n" " [-u allow:ユーザー,ユーザー] [-u deny:ユーザー,ユー" "ザー]" #, c-format msgid "Usage: %s job-id user title copies options [file]" msgstr "ä½¿ã„æ–¹: %s ジョブID ユーザー タイトル コピー数 オプション [ファイル]" msgid "Usage: cupsaddsmb [options] printer1 ... printerN" msgstr "Usage: cupsaddsmb [オプション] プリンター1 ... プリンターN" msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]" msgstr "Usage: cupsctl [オプション] [パラメータ=値 ... パラメータN=値N]" msgid "Usage: cupsd [options]" msgstr "ä½¿ã„æ–¹: cupsd [オプション]" msgid "Usage: cupsfilter [ options ] [ -- ] filename" msgstr "ä½¿ã„æ–¹: cupsfilter [ オプション ] [ -- ] ファイルå" msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]" msgstr "ä½¿ã„æ–¹: cupstestdsc [オプション] ファイルå.ps [... ファイルå.ps]" msgid "" "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" msgstr "" "ä½¿ã„æ–¹: cupstestppd [オプション] ファイルå1.ppd[.gz] [... ファイルåN.ppd[." "gz]]" msgid "" "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " ippfind [options] name[.regtype[.domain.]] ... [expression]\n" " ippfind --help\n" " ippfind --version" msgstr "" "ä½¿ã„æ–¹: ippfind [オプション] 登録タイプ[,サブタイプ][.ドメイン.] ... [å¼]\n" " ippfind [オプション] åå‰[.登録タイプ[.ドメイン.]] ... [å¼]\n" " ippfind --help\n" " ippfind --version" msgid "Usage: ipptool [options] URI filename [ ... filenameN ]" msgstr "ä½¿ã„æ–¹: ipptool [オプション] URI ファイルå [ ... ファイルåN ]" msgid "Usage: lpmove job/src dest" msgstr "ä½¿ã„æ–¹: lpmove ジョブ/ソース 宛先" msgid "" "Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " lpoptions [-h server] [-E] -x printer" msgstr "" "ä½¿ã„æ–¹: lpoptions [-h サーãƒãƒ¼] [-E] -d プリンター\n" "   lpoptions [-h サーãƒãƒ¼] [-E] [-p プリンター] -l\n" " lpoptions [-h サーãƒãƒ¼] [-E] -p プリンター -o オプション[=値] ...\n" " lpoptions [-h サーãƒãƒ¼] [-E] -x プリンター" msgid "" "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" msgstr "" "ä½¿ã„æ–¹: lpq [-P 宛先] [-U ユーザーå] [-h ホストå[:ãƒãƒ¼ãƒˆ]] [-l] [+é–“éš”]" msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" msgstr "ä½¿ã„æ–¹: ppdc [オプション] ファイルå.drv [ ... ファイルåN.drv ]" msgid "Usage: ppdhtml [options] filename.drv >filename.html" msgstr "ä½¿ã„æ–¹: ppdhtml [オプション] ファイルå.drv >ファイルå.html" msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgstr "ä½¿ã„æ–¹: ppdi [オプション] ファイルå.ppd [ ... ファイルåN.ppd ]" msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgstr "ä½¿ã„æ–¹: ppdmerge [オプション] ファイルå.ppd [ ... ファイルåN.ppd ]" msgid "" "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" msgstr "" "ä½¿ã„æ–¹: ppdpo [オプション] -o ファイルå.po ファイルå.drv [ ... ファイルåN." "drv ]" msgid "Usage: snmp [host-or-ip-address]" msgstr "ä½¿ã„æ–¹: snmp [ホストåã¾ãŸã¯IPアドレス]" msgid "Value uses indefinite length" msgstr "値ã¯ä¸å®šé•·ã§ã™" msgid "VarBind uses indefinite length" msgstr "VarBind ã¯ä¸å®šé•·ã§ã™" msgid "Vellum Paper" msgstr "" msgid "Version uses indefinite length" msgstr "Version ã¯ä¸å®šé•·ã§ã™" msgid "Waiting for job to complete." msgstr "ジョブãŒå®Œäº†ã™ã‚‹ã®ã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚" msgid "Waiting for printer to become available." msgstr "プリンターãŒä½¿ç”¨å¯èƒ½ã«ãªã‚‹ã®ã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚" msgid "Waiting for printer to finish." msgstr "プリンターãŒçµ‚了ã™ã‚‹ã®ã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚" msgid "Warning, no Windows 2000 printer drivers are installed." msgstr "警告ã€Windows 2000 プリンタードライãƒãƒ¼ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。" msgid "Waterproof Fabric" msgstr "" msgid "Web Interface is Disabled" msgstr "Web インターフェイスãŒç„¡åйã«ãªã£ã¦ã„ã¾ã™" msgid "Wet Film" msgstr "" msgid "Windowed Envelope" msgstr "" msgid "Yes" msgstr "ã¯ã„" #, c-format msgid "" "You must access this page using the URL https://" "%s:%d%s." msgstr "" "ã“ã®ãƒšãƒ¼ã‚¸ã«ã¯ URL https://%s:%d%s を使ã£ã¦ã‚¢" "クセスã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" msgid "Z Fold" msgstr "" msgid "ZPL Label Printer" msgstr "ZPL ラベルプリンター" msgid "Zebra" msgstr "ゼブラ" msgid "aborted" msgstr "åœæ­¢" msgid "accuracy-units" msgstr "Accuracy Units" msgid "accuracy-units.mm" msgstr "Mm" msgid "accuracy-units.nm" msgstr "Nm" msgid "accuracy-units.um" msgstr "Um" msgid "baling" msgstr "Bale Output" msgid "baling-type" msgstr "Baling Type" msgid "baling-type.band" msgstr "Band" msgid "baling-type.shrink-wrap" msgstr "Shrink Wrap" msgid "baling-type.wrap" msgstr "Wrap" msgid "baling-when" msgstr "Baling When" msgid "baling-when.after-job" msgstr "After Job" msgid "baling-when.after-sets" msgstr "After Sets" msgid "binding" msgstr "Bind Output" msgid "binding-reference-edge" msgstr "Binding Reference Edge" msgid "binding-reference-edge.bottom" msgstr "Bottom" msgid "binding-reference-edge.left" msgstr "Left" msgid "binding-reference-edge.right" msgstr "Right" msgid "binding-reference-edge.top" msgstr "Top" msgid "binding-type" msgstr "Binding Type" msgid "binding-type.adhesive" msgstr "Adhesive" msgid "binding-type.comb" msgstr "Comb" msgid "binding-type.flat" msgstr "Flat" msgid "binding-type.padding" msgstr "Padding" msgid "binding-type.perfect" msgstr "Perfect" msgid "binding-type.spiral" msgstr "Spiral" msgid "binding-type.tape" msgstr "Tape" msgid "binding-type.velo" msgstr "Velo" msgid "canceled" msgstr "キャンセル" msgid "charge-info-message" msgstr "Charge Info Message" msgid "coating" msgstr "Coat Sheets" msgid "coating-sides" msgstr "Coating Sides" msgid "coating-sides.back" msgstr "Back" msgid "coating-sides.both" msgstr "Both" msgid "coating-sides.front" msgstr "Front" msgid "coating-type" msgstr "Coating Type" msgid "coating-type.archival" msgstr "Archival" msgid "coating-type.archival-glossy" msgstr "Archival Glossy" msgid "coating-type.archival-matte" msgstr "Archival Matte" msgid "coating-type.archival-semi-gloss" msgstr "Archival Semi Gloss" msgid "coating-type.glossy" msgstr "Glossy" msgid "coating-type.high-gloss" msgstr "High Gloss" msgid "coating-type.matte" msgstr "Matte" msgid "coating-type.semi-gloss" msgstr "Semi-Gloss" msgid "coating-type.silicone" msgstr "Silicone" msgid "coating-type.translucent" msgstr "Translucent" msgid "completed" msgstr "完了" msgid "confirmation-sheet-print" msgstr "Confirmation Sheet Print" msgid "copies" msgstr "Copies" msgid "cover-back" msgstr "Cover Back" msgid "cover-front" msgstr "Cover Front" msgid "cover-sheet-info" msgstr "Cover Sheet Info" msgid "cover-sheet-info-supported.date-time" msgstr "Date Time" msgid "cover-sheet-info-supported.from-name" msgstr "From Name" msgid "cover-sheet-info-supported.logo" msgstr "Logo" msgid "cover-sheet-info-supported.message" msgstr "Message" msgid "cover-sheet-info-supported.organization" msgstr "Organization" msgid "cover-sheet-info-supported.subject" msgstr "Subject" msgid "cover-sheet-info-supported.to-name" msgstr "To Name" msgid "cover-type" msgstr "Cover Type" msgid "cover-type.no-cover" msgstr "No Cover" msgid "cover-type.print-back" msgstr "Print Back" msgid "cover-type.print-both" msgstr "Print Both" msgid "cover-type.print-front" msgstr "Print Front" msgid "cover-type.print-none" msgstr "Print None" msgid "covering" msgstr "Cover Output" msgid "covering-name" msgstr "Covering Name" msgid "covering-name.plain" msgstr "Plain" msgid "covering-name.pre-cut" msgstr "Pre Cut" msgid "covering-name.pre-printed" msgstr "Pre Printed" msgid "cups-deviced failed to execute." msgstr "cups-deviced ã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸã€‚" msgid "cups-driverd failed to execute." msgstr "cups-driverd ã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #, c-format msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "cupsaddsmb: プリンター \"%s\" ã® PPD ファイルãŒã‚りã¾ã›ã‚“ - %s" msgid "cupsctl: Cannot set Listen or Port directly." msgstr "cupsctl: Listen ã‚ã‚‹ã„㯠Port を直接設定ã§ãã¾ã›ã‚“。" #, c-format msgid "cupsctl: Unable to connect to server: %s" msgstr "cupsctl: サーãƒãƒ¼ã«æŽ¥ç¶šã§ãã¾ã›ã‚“: %s" #, c-format msgid "cupsctl: Unknown option \"%s\"" msgstr "cupsctl: \"%s\" ã¯æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™ã€‚" #, c-format msgid "cupsctl: Unknown option \"-%c\"" msgstr "cupsctl: \"-%c\"ã¯æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™ã€‚" msgid "cupsd: Expected config filename after \"-c\" option." msgstr "cupsd: \"-c\" オプションã®ã‚ã¨ã«ã¯è¨­å®šãƒ•ァイルåãŒå¿…è¦ã§ã™ã€‚" msgid "cupsd: Expected cups-files.conf filename after \"-s\" option." msgstr "" "cupsd: cups-files.conf ファイルå㯠\"-s\" オプションã®å¾Œã‚ã«ã‚ã‚‹ã¹ãã§ã™ã€‚" msgid "cupsd: On-demand support not compiled in, running in normal mode." msgstr "" "cupsd: オンデマンドサãƒãƒ¼ãƒˆæœ‰åйã§ã‚³ãƒ³ãƒ‘イルã•れã¦ã„ã¾ã›ã‚“ã€æ¨™æº–モードã§å‹•作ã—" "ã¾ã™ã€‚" msgid "cupsd: Relative cups-files.conf filename not allowed." msgstr "cupsd: 相対パスã§ã® cups-files.conf ã®æŒ‡å®šã¯ã§ãã¾ã›ã‚“。" msgid "cupsd: Unable to get current directory." msgstr "cupsd: カレントディレクトリーをå–å¾—ã§ãã¾ã›ã‚“。" msgid "cupsd: Unable to get path to cups-files.conf file." msgstr "cupsd: cups-files.conf ファイルã¸ã®ãƒ‘スãŒå–å¾—ã§ãã¾ã›ã‚“。" #, c-format msgid "cupsd: Unknown argument \"%s\" - aborting." msgstr "cupsd: \"%s\" ã¯æœªçŸ¥ã®å¼•æ•°ã§ã™ - åœæ­¢ã—ã¾ã™ã€‚" #, c-format msgid "cupsd: Unknown option \"%c\" - aborting." msgstr "cupsd: \"%c\" ã¯æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™ - åœæ­¢ã—ã¾ã™ã€‚" #, c-format msgid "cupsfilter: Invalid document number %d." msgstr "cupsfilter: 䏿­£ãªæ–‡æ›¸ç•ªå· %d ã§ã™ã€‚" #, c-format msgid "cupsfilter: Invalid job ID %d." msgstr "cupsfilter: 䏿­£ãªã‚¸ãƒ§ãƒ–ID %d ã§ã™ã€‚" msgid "cupsfilter: Only one filename can be specified." msgstr "cupsfilter: 1 ã¤ã®ãƒ•ァイルåã®ã¿ã‚’指定ã§ãã¾ã™ã€‚" #, c-format msgid "cupsfilter: Unable to get job file - %s" msgstr "cupsfilter: ジョブ・ファイルをå–å¾—ã§ãã¾ã›ã‚“ - %s" msgid "cupstestppd: The -q option is incompatible with the -v option." msgstr "cupstestppd: -q オプション㯠-v オプションã¨ä¸¡ç«‹ã§ãã¾ã›ã‚“。" msgid "cupstestppd: The -v option is incompatible with the -q option." msgstr "cupstestppd: -v オプション㯠-q オプションã¨ä¸¡ç«‹ã§ãã¾ã›ã‚“。" msgid "detailed-status-message" msgstr "Detailed Status Message" #, c-format msgid "device for %s/%s: %s" msgstr "%s/%s ã®ãƒ‡ãƒã‚¤ã‚¹: %s" #, c-format msgid "device for %s: %s" msgstr "%s ã®ãƒ‡ãƒã‚¤ã‚¹: %s" msgid "document-copies" msgstr "Copies" msgid "document-state" msgstr "Document State" msgid "document-state-reasons" msgstr "Detailed Document State" msgid "document-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "document-state-reasons.canceled-at-device" msgstr "Canceled At Device" msgid "document-state-reasons.canceled-by-operator" msgstr "Canceled By Operator" msgid "document-state-reasons.canceled-by-user" msgstr "Canceled By User" msgid "document-state-reasons.completed-successfully" msgstr "Completed Successfully" msgid "document-state-reasons.completed-with-errors" msgstr "Completed With Errors" msgid "document-state-reasons.completed-with-warnings" msgstr "Completed With Warnings" msgid "document-state-reasons.compression-error" msgstr "Compression Error" msgid "document-state-reasons.data-insufficient" msgstr "Data Insufficient" msgid "document-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "document-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "document-state-reasons.digital-signature-wait" msgstr "Digital Signature Wait" msgid "document-state-reasons.document-access-error" msgstr "Document Access Error" msgid "document-state-reasons.document-fetchable" msgstr "Document Fetchable" msgid "document-state-reasons.document-format-error" msgstr "Document Format Error" msgid "document-state-reasons.document-password-error" msgstr "Document Password Error" msgid "document-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "document-state-reasons.document-security-error" msgstr "Document Security Error" msgid "document-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "document-state-reasons.errors-detected" msgstr "Errors Detected" msgid "document-state-reasons.incoming" msgstr "Incoming" msgid "document-state-reasons.interpreting" msgstr "Interpreting" msgid "document-state-reasons.none" msgstr "None" msgid "document-state-reasons.outgoing" msgstr "Outgoing" msgid "document-state-reasons.printing" msgstr "Printing" msgid "document-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "document-state-reasons.queued" msgstr "Queued" msgid "document-state-reasons.queued-for-marker" msgstr "Queued For Marker" msgid "document-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "document-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "document-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "document-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "document-state-reasons.transforming" msgstr "Transforming" msgid "document-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "document-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "document-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "document-state.3" msgstr "Pending" msgid "document-state.5" msgstr "Processing" msgid "document-state.6" msgstr "Processing Stopped" msgid "document-state.7" msgstr "Canceled" msgid "document-state.8" msgstr "Aborted" msgid "document-state.9" msgstr "Completed" msgid "error-index uses indefinite length" msgstr "error-index ã¯ä¸å®šé•·ã§ã™" msgid "error-status uses indefinite length" msgstr "error-status ã¯ä¸å®šé•·ã§ã™" msgid "feed-orientation" msgstr "Feed Orientation" msgid "feed-orientation.long-edge-first" msgstr "Long Edge First" msgid "feed-orientation.short-edge-first" msgstr "Short Edge First" msgid "fetch-status-code" msgstr "Fetch Status Code" msgid "finishing-template" msgstr "Finishing Template" msgid "finishing-template.bale" msgstr "Bale" msgid "finishing-template.bind" msgstr "Bind" msgid "finishing-template.bind-bottom" msgstr "Bind Bottom" msgid "finishing-template.bind-left" msgstr "Bind Left" msgid "finishing-template.bind-right" msgstr "Bind Right" msgid "finishing-template.bind-top" msgstr "Bind Top" msgid "finishing-template.booklet-maker" msgstr "Booklet Maker" msgid "finishing-template.coat" msgstr "Coat" msgid "finishing-template.cover" msgstr "Cover" msgid "finishing-template.edge-stitch" msgstr "Edge Stitch" msgid "finishing-template.edge-stitch-bottom" msgstr "Edge Stitch Bottom" msgid "finishing-template.edge-stitch-left" msgstr "Edge Stitch Left" msgid "finishing-template.edge-stitch-right" msgstr "Edge Stitch Right" msgid "finishing-template.edge-stitch-top" msgstr "Edge Stitch Top" msgid "finishing-template.fold" msgstr "Fold" msgid "finishing-template.fold-accordion" msgstr "Fold Accordion" msgid "finishing-template.fold-double-gate" msgstr "Fold Double Gate" msgid "finishing-template.fold-engineering-z" msgstr "Fold Engineering Z" msgid "finishing-template.fold-gate" msgstr "Fold Gate" msgid "finishing-template.fold-half" msgstr "Fold Half" msgid "finishing-template.fold-half-z" msgstr "Fold Half Z" msgid "finishing-template.fold-left-gate" msgstr "Fold Left Gate" msgid "finishing-template.fold-letter" msgstr "Fold Letter" msgid "finishing-template.fold-parallel" msgstr "Fold Parallel" msgid "finishing-template.fold-poster" msgstr "Fold Poster" msgid "finishing-template.fold-right-gate" msgstr "Fold Right Gate" msgid "finishing-template.fold-z" msgstr "Fold Z" msgid "finishing-template.jdf-f10-1" msgstr "JDF F10 1" msgid "finishing-template.jdf-f10-2" msgstr "JDF F10 2" msgid "finishing-template.jdf-f10-3" msgstr "JDF F10 3" msgid "finishing-template.jdf-f12-1" msgstr "JDF F12 1" msgid "finishing-template.jdf-f12-10" msgstr "JDF F12 10" msgid "finishing-template.jdf-f12-11" msgstr "JDF F12 11" msgid "finishing-template.jdf-f12-12" msgstr "JDF F12 12" msgid "finishing-template.jdf-f12-13" msgstr "JDF F12 13" msgid "finishing-template.jdf-f12-14" msgstr "JDF F12 14" msgid "finishing-template.jdf-f12-2" msgstr "JDF F12 2" msgid "finishing-template.jdf-f12-3" msgstr "JDF F12 3" msgid "finishing-template.jdf-f12-4" msgstr "JDF F12 4" msgid "finishing-template.jdf-f12-5" msgstr "JDF F12 5" msgid "finishing-template.jdf-f12-6" msgstr "JDF F12 6" msgid "finishing-template.jdf-f12-7" msgstr "JDF F12 7" msgid "finishing-template.jdf-f12-8" msgstr "JDF F12 8" msgid "finishing-template.jdf-f12-9" msgstr "JDF F12 9" msgid "finishing-template.jdf-f14-1" msgstr "JDF F14 1" msgid "finishing-template.jdf-f16-1" msgstr "JDF F16 1" msgid "finishing-template.jdf-f16-10" msgstr "JDF F16 10" msgid "finishing-template.jdf-f16-11" msgstr "JDF F16 11" msgid "finishing-template.jdf-f16-12" msgstr "JDF F16 12" msgid "finishing-template.jdf-f16-13" msgstr "JDF F16 13" msgid "finishing-template.jdf-f16-14" msgstr "JDF F16 14" msgid "finishing-template.jdf-f16-2" msgstr "JDF F16 2" msgid "finishing-template.jdf-f16-3" msgstr "JDF F16 3" msgid "finishing-template.jdf-f16-4" msgstr "JDF F16 4" msgid "finishing-template.jdf-f16-5" msgstr "JDF F16 5" msgid "finishing-template.jdf-f16-6" msgstr "JDF F16 6" msgid "finishing-template.jdf-f16-7" msgstr "JDF F16 7" msgid "finishing-template.jdf-f16-8" msgstr "JDF F16 8" msgid "finishing-template.jdf-f16-9" msgstr "JDF F16 9" msgid "finishing-template.jdf-f18-1" msgstr "JDF F18 1" msgid "finishing-template.jdf-f18-2" msgstr "JDF F18 2" msgid "finishing-template.jdf-f18-3" msgstr "JDF F18 3" msgid "finishing-template.jdf-f18-4" msgstr "JDF F18 4" msgid "finishing-template.jdf-f18-5" msgstr "JDF F18 5" msgid "finishing-template.jdf-f18-6" msgstr "JDF F18 6" msgid "finishing-template.jdf-f18-7" msgstr "JDF F18 7" msgid "finishing-template.jdf-f18-8" msgstr "JDF F18 8" msgid "finishing-template.jdf-f18-9" msgstr "JDF F18 9" msgid "finishing-template.jdf-f2-1" msgstr "JDF F2 1" msgid "finishing-template.jdf-f20-1" msgstr "JDF F20 1" msgid "finishing-template.jdf-f20-2" msgstr "JDF F20 2" msgid "finishing-template.jdf-f24-1" msgstr "JDF F24 1" msgid "finishing-template.jdf-f24-10" msgstr "JDF F24 10" msgid "finishing-template.jdf-f24-11" msgstr "JDF F24 11" msgid "finishing-template.jdf-f24-2" msgstr "JDF F24 2" msgid "finishing-template.jdf-f24-3" msgstr "JDF F24 3" msgid "finishing-template.jdf-f24-4" msgstr "JDF F24 4" msgid "finishing-template.jdf-f24-5" msgstr "JDF F24 5" msgid "finishing-template.jdf-f24-6" msgstr "JDF F24 6" msgid "finishing-template.jdf-f24-7" msgstr "JDF F24 7" msgid "finishing-template.jdf-f24-8" msgstr "JDF F24 8" msgid "finishing-template.jdf-f24-9" msgstr "JDF F24 9" msgid "finishing-template.jdf-f28-1" msgstr "JDF F28 1" msgid "finishing-template.jdf-f32-1" msgstr "JDF F32 1" msgid "finishing-template.jdf-f32-2" msgstr "JDF F32 2" msgid "finishing-template.jdf-f32-3" msgstr "JDF F32 3" msgid "finishing-template.jdf-f32-4" msgstr "JDF F32 4" msgid "finishing-template.jdf-f32-5" msgstr "JDF F32 5" msgid "finishing-template.jdf-f32-6" msgstr "JDF F32 6" msgid "finishing-template.jdf-f32-7" msgstr "JDF F32 7" msgid "finishing-template.jdf-f32-8" msgstr "JDF F32 8" msgid "finishing-template.jdf-f32-9" msgstr "JDF F32 9" msgid "finishing-template.jdf-f36-1" msgstr "JDF F36 1" msgid "finishing-template.jdf-f36-2" msgstr "JDF F36 2" msgid "finishing-template.jdf-f4-1" msgstr "JDF F4 1" msgid "finishing-template.jdf-f4-2" msgstr "JDF F4 2" msgid "finishing-template.jdf-f40-1" msgstr "JDF F40 1" msgid "finishing-template.jdf-f48-1" msgstr "JDF F48 1" msgid "finishing-template.jdf-f48-2" msgstr "JDF F48 2" msgid "finishing-template.jdf-f6-1" msgstr "JDF F6 1" msgid "finishing-template.jdf-f6-2" msgstr "JDF F6 2" msgid "finishing-template.jdf-f6-3" msgstr "JDF F6 3" msgid "finishing-template.jdf-f6-4" msgstr "JDF F6 4" msgid "finishing-template.jdf-f6-5" msgstr "JDF F6 5" msgid "finishing-template.jdf-f6-6" msgstr "JDF F6 6" msgid "finishing-template.jdf-f6-7" msgstr "JDF F6 7" msgid "finishing-template.jdf-f6-8" msgstr "JDF F6 8" msgid "finishing-template.jdf-f64-1" msgstr "JDF F64 1" msgid "finishing-template.jdf-f64-2" msgstr "JDF F64 2" msgid "finishing-template.jdf-f8-1" msgstr "JDF F8 1" msgid "finishing-template.jdf-f8-2" msgstr "JDF F8 2" msgid "finishing-template.jdf-f8-3" msgstr "JDF F8 3" msgid "finishing-template.jdf-f8-4" msgstr "JDF F8 4" msgid "finishing-template.jdf-f8-5" msgstr "JDF F8 5" msgid "finishing-template.jdf-f8-6" msgstr "JDF F8 6" msgid "finishing-template.jdf-f8-7" msgstr "JDF F8 7" msgid "finishing-template.jog-offset" msgstr "Jog Offset" msgid "finishing-template.laminate" msgstr "Laminate" msgid "finishing-template.punch" msgstr "Punch" msgid "finishing-template.punch-bottom-left" msgstr "Punch Bottom Left" msgid "finishing-template.punch-bottom-right" msgstr "Punch Bottom Right" msgid "finishing-template.punch-dual-bottom" msgstr "Punch Dual Bottom" msgid "finishing-template.punch-dual-left" msgstr "Punch Dual Left" msgid "finishing-template.punch-dual-right" msgstr "Punch Dual Right" msgid "finishing-template.punch-dual-top" msgstr "Punch Dual Top" msgid "finishing-template.punch-multiple-bottom" msgstr "Punch Multiple Bottom" msgid "finishing-template.punch-multiple-left" msgstr "Punch Multiple Left" msgid "finishing-template.punch-multiple-right" msgstr "Punch Multiple Right" msgid "finishing-template.punch-multiple-top" msgstr "Punch Multiple Top" msgid "finishing-template.punch-quad-bottom" msgstr "Punch Quad Bottom" msgid "finishing-template.punch-quad-left" msgstr "Punch Quad Left" msgid "finishing-template.punch-quad-right" msgstr "Punch Quad Right" msgid "finishing-template.punch-quad-top" msgstr "Punch Quad Top" msgid "finishing-template.punch-top-left" msgstr "Punch Top Left" msgid "finishing-template.punch-top-right" msgstr "Punch Top Right" msgid "finishing-template.punch-triple-bottom" msgstr "Punch Triple Bottom" msgid "finishing-template.punch-triple-left" msgstr "Punch Triple Left" msgid "finishing-template.punch-triple-right" msgstr "Punch Triple Right" msgid "finishing-template.punch-triple-top" msgstr "Punch Triple Top" msgid "finishing-template.saddle-stitch" msgstr "Saddle Stitch" msgid "finishing-template.staple" msgstr "Staple" msgid "finishing-template.staple-bottom-left" msgstr "Staple Bottom Left" msgid "finishing-template.staple-bottom-right" msgstr "Staple Bottom Right" msgid "finishing-template.staple-dual-bottom" msgstr "Staple Dual Bottom" msgid "finishing-template.staple-dual-left" msgstr "Staple Dual Left" msgid "finishing-template.staple-dual-right" msgstr "Staple Dual Right" msgid "finishing-template.staple-dual-top" msgstr "Staple Dual Top" msgid "finishing-template.staple-top-left" msgstr "Staple Top Left" msgid "finishing-template.staple-top-right" msgstr "Staple Top Right" msgid "finishing-template.staple-triple-bottom" msgstr "Staple Triple Bottom" msgid "finishing-template.staple-triple-left" msgstr "Staple Triple Left" msgid "finishing-template.staple-triple-right" msgstr "Staple Triple Right" msgid "finishing-template.staple-triple-top" msgstr "Staple Triple Top" msgid "finishing-template.trim" msgstr "Trim" msgid "finishing-template.trim-after-copies" msgstr "Trim After Copies" msgid "finishing-template.trim-after-documents" msgstr "Trim After Documents" msgid "finishing-template.trim-after-job" msgstr "Trim After Job" msgid "finishing-template.trim-after-pages" msgstr "Trim After Pages" msgid "finishings" msgstr "Finishings" msgid "finishings-col" msgstr "Finishings" msgid "finishings.10" msgstr "Fold" msgid "finishings.100" msgstr "Fold Z" msgid "finishings.101" msgstr "Fold Engineering Z" msgid "finishings.11" msgstr "Trim" msgid "finishings.12" msgstr "Bale" msgid "finishings.13" msgstr "Booklet Maker" msgid "finishings.14" msgstr "Jog Offset" msgid "finishings.15" msgstr "Coat" msgid "finishings.16" msgstr "Laminate" msgid "finishings.20" msgstr "Staple Top Left" msgid "finishings.21" msgstr "Staple Bottom Left" msgid "finishings.22" msgstr "Staple Top Right" msgid "finishings.23" msgstr "Staple Bottom Right" msgid "finishings.24" msgstr "Edge Stitch Left" msgid "finishings.25" msgstr "Edge Stitch Top" msgid "finishings.26" msgstr "Edge Stitch Right" msgid "finishings.27" msgstr "Edge Stitch Bottom" msgid "finishings.28" msgstr "Staple Dual Left" msgid "finishings.29" msgstr "Staple Dual Top" msgid "finishings.3" msgstr "None" msgid "finishings.30" msgstr "Staple Dual Right" msgid "finishings.31" msgstr "Staple Dual Bottom" msgid "finishings.32" msgstr "Staple Triple Left" msgid "finishings.33" msgstr "Staple Triple Top" msgid "finishings.34" msgstr "Staple Triple Right" msgid "finishings.35" msgstr "Staple Triple Bottom" msgid "finishings.4" msgstr "Staple" msgid "finishings.5" msgstr "Punch" msgid "finishings.50" msgstr "Bind Left" msgid "finishings.51" msgstr "Bind Top" msgid "finishings.52" msgstr "Bind Right" msgid "finishings.53" msgstr "Bind Bottom" msgid "finishings.6" msgstr "Cover" msgid "finishings.60" msgstr "Trim After Pages" msgid "finishings.61" msgstr "Trim After Documents" msgid "finishings.62" msgstr "Trim After Copies" msgid "finishings.63" msgstr "Trim After Job" msgid "finishings.7" msgstr "Bind" msgid "finishings.70" msgstr "Punch Top Left" msgid "finishings.71" msgstr "Punch Bottom Left" msgid "finishings.72" msgstr "Punch Top Right" msgid "finishings.73" msgstr "Punch Bottom Right" msgid "finishings.74" msgstr "Punch Dual Left" msgid "finishings.75" msgstr "Punch Dual Top" msgid "finishings.76" msgstr "Punch Dual Right" msgid "finishings.77" msgstr "Punch Dual Bottom" msgid "finishings.78" msgstr "Punch Triple Left" msgid "finishings.79" msgstr "Punch Triple Top" msgid "finishings.8" msgstr "Saddle Stitch" msgid "finishings.80" msgstr "Punch Triple Right" msgid "finishings.81" msgstr "Punch Triple Bottom" msgid "finishings.82" msgstr "Punch Quad Left" msgid "finishings.83" msgstr "Punch Quad Top" msgid "finishings.84" msgstr "Punch Quad Right" msgid "finishings.85" msgstr "Punch Quad Bottom" msgid "finishings.86" msgstr "Punch Multiple Left" msgid "finishings.87" msgstr "Punch Multiple Top" msgid "finishings.88" msgstr "Punch Multiple Right" msgid "finishings.89" msgstr "Punch Multiple Bottom" msgid "finishings.9" msgstr "Edge Stitch" msgid "finishings.90" msgstr "Fold Accordion" msgid "finishings.91" msgstr "Fold Double Gate" msgid "finishings.92" msgstr "Fold Gate" msgid "finishings.93" msgstr "Fold Half" msgid "finishings.94" msgstr "Fold Half Z" msgid "finishings.95" msgstr "Fold Left Gate" msgid "finishings.96" msgstr "Fold Letter" msgid "finishings.97" msgstr "Fold Parallel" msgid "finishings.98" msgstr "Fold Poster" msgid "finishings.99" msgstr "Fold Right Gate" msgid "folding" msgstr "Fold" msgid "folding-direction" msgstr "Folding Direction" msgid "folding-direction.inward" msgstr "Inward" msgid "folding-direction.outward" msgstr "Outward" msgid "folding-offset" msgstr "Fold Position" msgid "folding-reference-edge" msgstr "Folding Reference Edge" msgid "folding-reference-edge.bottom" msgstr "Bottom" msgid "folding-reference-edge.left" msgstr "Left" msgid "folding-reference-edge.right" msgstr "Right" msgid "folding-reference-edge.top" msgstr "Top" msgid "font-name-requested" msgstr "Font Name" msgid "font-size-requested" msgstr "Font Size" msgid "force-front-side" msgstr "Force Front Side" msgid "from-name" msgstr "From Name" msgid "held" msgstr "ä¿ç•™" msgid "help\t\tGet help on commands." msgstr "help\t\tコマンドã®ãƒ˜ãƒ«ãƒ—ã‚’å–得。" msgid "idle" msgstr "待機中" msgid "imposition-template" msgstr "Imposition Template" msgid "imposition-template.none" msgstr "None" msgid "imposition-template.signature" msgstr "Signature" msgid "input-attributes" msgstr "Input Attributes" msgid "input-auto-scaling" msgstr "Scan Auto Scaling" msgid "input-auto-skew-correction" msgstr "Scan Auto Skew Correction" msgid "input-brightness" msgstr "Scan Brightness" msgid "input-color-mode" msgstr "Input Color Mode" msgid "input-color-mode.auto" msgstr "Automatic" msgid "input-color-mode.bi-level" msgstr "Bi-Level" msgid "input-color-mode.cmyk_16" msgstr "CMYK 16" msgid "input-color-mode.cmyk_8" msgstr "CMYK 8" msgid "input-color-mode.color" msgstr "Color" msgid "input-color-mode.color_8" msgstr "Color 8" msgid "input-color-mode.monochrome" msgstr "Monochrome" msgid "input-color-mode.monochrome_16" msgstr "Monochrome 16" msgid "input-color-mode.monochrome_4" msgstr "Monochrome 4" msgid "input-color-mode.monochrome_8" msgstr "Monochrome 8" msgid "input-color-mode.rgb_16" msgstr "RGB 16" msgid "input-color-mode.rgba_16" msgstr "RGBA 16" msgid "input-color-mode.rgba_8" msgstr "RGBA 8" msgid "input-content-type" msgstr "Input Content Type" msgid "input-content-type.auto" msgstr "Automatic" msgid "input-content-type.halftone" msgstr "Halftone" msgid "input-content-type.line-art" msgstr "Line Art" msgid "input-content-type.magazine" msgstr "Magazine" msgid "input-content-type.photo" msgstr "Photo" msgid "input-content-type.text" msgstr "Text" msgid "input-content-type.text-and-photo" msgstr "Text And Photo" msgid "input-contrast" msgstr "Scan Contrast" msgid "input-film-scan-mode" msgstr "Input Film Scan Mode" msgid "input-film-scan-mode.black-and-white-negative-film" msgstr "Black And White Negative Film" msgid "input-film-scan-mode.color-negative-film" msgstr "Color Negative Film" msgid "input-film-scan-mode.color-slide-film" msgstr "Color Slide Film" msgid "input-film-scan-mode.not-applicable" msgstr "Not Applicable" msgid "input-images-to-transfer" msgstr "Scan Images To Transfer" msgid "input-media" msgstr "Input Media" msgid "input-media.auto" msgstr "Automatic" msgid "input-orientation-requested" msgstr "Input Orientation" msgid "input-quality" msgstr "Input Quality" msgid "input-resolution" msgstr "Scan Resolution" msgid "input-scaling-height" msgstr "Scan Scaling Height" msgid "input-scaling-width" msgstr "Scan Scaling Width" msgid "input-scan-regions" msgstr "Scan Regions" msgid "input-sharpness" msgstr "Scan Sharpness" msgid "input-sides" msgstr "Input Sides" msgid "input-source" msgstr "Input Source" msgid "input-source.adf" msgstr "Adf" msgid "input-source.film-reader" msgstr "Film Reader" msgid "input-source.platen" msgstr "Platen" msgid "insert-after-page-number" msgstr "Insert Page Number" msgid "insert-count" msgstr "Insert Count" msgid "insert-sheet" msgstr "Insert Sheet" #, c-format msgid "ippfind: Bad regular expression: %s" msgstr "ippfind: 䏿­£ãªæ­£è¦è¡¨ç¾ã§ã™: %s" msgid "ippfind: Cannot use --and after --or." msgstr "ippfind: --and 㯠--or ã®ã‚ã¨ã«æŒ‡å®šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #, c-format msgid "ippfind: Expected key name after %s." msgstr "ippfind: %s ã®ã‚ã¨ã«ã¯ã‚­ãƒ¼åãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ippfind: Expected port range after %s." msgstr "ippfind: %s ã®ã‚ã¨ã«ã¯ãƒãƒ¼ãƒˆç¯„囲ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ippfind: Expected program after %s." msgstr "ippfind: %s ã®ã‚ã¨ã«ã¯ãƒ—ログラムåãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ippfind: Expected semi-colon after %s." msgstr "ippfind: %s ã®ã‚ã¨ã«ã¯ã‚»ãƒŸã‚³ãƒ­ãƒ³ãŒå¿…è¦ã§ã™ã€‚" msgid "ippfind: Missing close brace in substitution." msgstr "ippfind: ç½®æ›æ–‡å­—列ã®é–‰ã˜ã‚«ãƒƒã‚³ãŒã‚りã¾ã›ã‚“。" msgid "ippfind: Missing close parenthesis." msgstr "ippfind: é–‰ã˜ã‚«ãƒƒã‚³ãŒä¸è¶³ã—ã¦ã„ã¾ã™ã€‚" msgid "ippfind: Missing expression before \"--and\"." msgstr "ippfind: \"--and\" ã®å‰ã«ã¯å¼ãŒå¿…è¦ã§ã™ã€‚" msgid "ippfind: Missing expression before \"--or\"." msgstr "ippfind: \"--or\" ã®å‰ã«ã¯å¼ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ippfind: Missing key name after %s." msgstr "ippfind: %s ã®ã‚ã¨ã«ã¯ã‚­ãƒ¼åãŒå¿…è¦ã§ã™ã€‚" msgid "ippfind: Missing open parenthesis." msgstr "ippfind: é–‹ãカッコãŒè¶³ã‚Šã¾ã›ã‚“。" #, c-format msgid "ippfind: Missing program after %s." msgstr "ippfind: %s ã®ã‚ã¨ã«ã¯ãƒ—ログラムåãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ippfind: Missing regular expression after %s." msgstr "ippfind: %s ã®ã‚ã¨ã«ã¯æ­£è¦è¡¨ç¾ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ippfind: Missing semi-colon after %s." msgstr "ippfind: %s ã®ã‚ã¨ã«ã¯ã‚»ãƒŸã‚³ãƒ­ãƒ³ãŒå¿…è¦ã§ã™ã€‚" msgid "ippfind: Out of memory." msgstr "ippfind: メモリä¸è¶³ã§ã™ã€‚" msgid "ippfind: Too many parenthesis." msgstr "ippfind: カッコãŒå¤šã™ãŽã¾ã™ã€‚" #, c-format msgid "ippfind: Unable to browse or resolve: %s" msgstr "ippfind: %s をブラウズã§ããªã„ã‹åå‰è§£æ±ºã§ãã¾ã›ã‚“。" #, c-format msgid "ippfind: Unable to execute \"%s\": %s" msgstr "ippfind: \"%s\" を実行ã§ãã¾ã›ã‚“: %s" #, c-format msgid "ippfind: Unable to use Bonjour: %s" msgstr "ippfind: Bonjour を利用ã§ãã¾ã›ã‚“: %s" #, c-format msgid "ippfind: Unknown variable \"{%s}\"." msgstr "ippfind: \"{%s}\" ã¯ä¸æ˜Žãªå¤‰æ•°ã§ã™ã€‚" msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." msgstr "" "ipptool: \"-i\" ãŠã‚ˆã³ \"-n\" 㯠\"-P\"ã€\"-X\" ã¨ä¸€ç·’ã«æŒ‡å®šã§ãã¾ã›ã‚“。" #, c-format msgid "ipptool: Bad URI - %s." msgstr "ipptool: 䏿­£ãª URI ã§ã™ - %s。" msgid "ipptool: Invalid seconds for \"-i\"." msgstr "ipptool: \"-i\" ã«ä¸æ­£ãªç§’æ•°ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚" msgid "ipptool: May only specify a single URI." msgstr "ipptool: URI 㯠1 ã¤ã ã‘指定ã§ãã¾ã™ã€‚" msgid "ipptool: Missing count for \"-n\"." msgstr "ipptool: \"-n\" ã«å›žæ•°ã®æŒ‡å®šãŒã‚りã¾ã›ã‚“。" msgid "ipptool: Missing filename for \"-f\"." msgstr "ipptool: \"-f\" ã«ãƒ•ァイルåã®æŒ‡å®šãŒã‚りã¾ã›ã‚“。" msgid "ipptool: Missing name=value for \"-d\"." msgstr "ipptool: \"-d\" ã« åå‰=値 ã®æŒ‡å®šãŒã‚りã¾ã›ã‚“。" msgid "ipptool: Missing seconds for \"-i\"." msgstr "ipptool: \"-i\" ã«ç§’æ•°ã®æŒ‡å®šãŒã‚りã¾ã›ã‚“。" msgid "ipptool: URI required before test file." msgstr "ipptool: テストファイルã®å‰ã« URI ã®æŒ‡å®šãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ipptool: Unknown option \"-%c\"." msgstr "ipptool: \"-%c\"ã¯æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™ã€‚" msgid "job-account-id" msgstr "Job Account ID" msgid "job-account-type" msgstr "Job Account Type" msgid "job-account-type.general" msgstr "General" msgid "job-account-type.group" msgstr "Group" msgid "job-account-type.none" msgstr "None" msgid "job-accounting-output-bin" msgstr "Job Accounting Output Bin" msgid "job-accounting-sheets" msgstr "Job Accounting Sheets" msgid "job-accounting-sheets-type" msgstr "Job Accounting Sheets Type" msgid "job-accounting-sheets-type.none" msgstr "None" msgid "job-accounting-sheets-type.standard" msgstr "Standard" msgid "job-accounting-user-id" msgstr "Job Accounting User ID" msgid "job-collation-type" msgstr "Job Collation Type" msgid "job-collation-type.3" msgstr "Uncollated Sheets" msgid "job-collation-type.4" msgstr "Collated Documents" msgid "job-collation-type.5" msgstr "Uncollated Documents" msgid "job-copies" msgstr "Job Copies" msgid "job-cover-back" msgstr "Job Cover Back" msgid "job-cover-front" msgstr "Job Cover Front" msgid "job-delay-output-until" msgstr "Job Delay Output Until" msgid "job-delay-output-until-time" msgstr "Job Delay Output Until Time" msgid "job-delay-output-until.day-time" msgstr "Day Time" msgid "job-delay-output-until.evening" msgstr "Evening" msgid "job-delay-output-until.indefinite" msgstr "Indefinite" msgid "job-delay-output-until.night" msgstr "Night" msgid "job-delay-output-until.no-delay-output" msgstr "No Delay Output" msgid "job-delay-output-until.second-shift" msgstr "Second Shift" msgid "job-delay-output-until.third-shift" msgstr "Third Shift" msgid "job-delay-output-until.weekend" msgstr "Weekend" msgid "job-error-action" msgstr "Job Error Action" msgid "job-error-action.abort-job" msgstr "Abort Job" msgid "job-error-action.cancel-job" msgstr "Cancel Job" msgid "job-error-action.continue-job" msgstr "Continue Job" msgid "job-error-action.suspend-job" msgstr "Suspend Job" msgid "job-error-sheet" msgstr "Job Error Sheet" msgid "job-error-sheet-type" msgstr "Job Error Sheet Type" msgid "job-error-sheet-type.none" msgstr "None" msgid "job-error-sheet-type.standard" msgstr "Standard" msgid "job-error-sheet-when" msgstr "Job Error Sheet When" msgid "job-error-sheet-when.always" msgstr "Always" msgid "job-error-sheet-when.on-error" msgstr "On Error" msgid "job-finishings" msgstr "Job Finishings" msgid "job-hold-until" msgstr "Hold Until" msgid "job-hold-until-time" msgstr "Job Hold Until Time" msgid "job-hold-until.day-time" msgstr "Day Time" msgid "job-hold-until.evening" msgstr "Evening" msgid "job-hold-until.indefinite" msgstr "Released" msgid "job-hold-until.night" msgstr "Night" msgid "job-hold-until.no-hold" msgstr "No Hold" msgid "job-hold-until.second-shift" msgstr "Second Shift" msgid "job-hold-until.third-shift" msgstr "Third Shift" msgid "job-hold-until.weekend" msgstr "Weekend" msgid "job-mandatory-attributes" msgstr "Job Mandatory Attributes" msgid "job-name" msgstr "Job Name" msgid "job-phone-number" msgstr "Job Phone Number" msgid "job-printer-uri attribute missing." msgstr "job-printer-uri 属性ãŒã‚りã¾ã›ã‚“。" msgid "job-priority" msgstr "Job Priority" msgid "job-recipient-name" msgstr "Job Recipient Name" msgid "job-save-disposition" msgstr "Job Save Disposition" msgid "job-sheet-message" msgstr "Job Sheet Message" msgid "job-sheets" msgstr "Banner Page" msgid "job-sheets-col" msgstr "Banner Page" msgid "job-sheets.first-print-stream-page" msgstr "First Print Stream Page" msgid "job-sheets.job-both-sheet" msgstr "Start and End Sheets" msgid "job-sheets.job-end-sheet" msgstr "End Sheet" msgid "job-sheets.job-start-sheet" msgstr "Start Sheet" msgid "job-sheets.none" msgstr "None" msgid "job-sheets.standard" msgstr "Standard" msgid "job-state" msgstr "Job State" msgid "job-state-message" msgstr "Job State Message" msgid "job-state-reasons" msgstr "Detailed Job State" msgid "job-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "job-state-reasons.account-authorization-failed" msgstr "Account Authorization Failed" msgid "job-state-reasons.account-closed" msgstr "Account Closed" msgid "job-state-reasons.account-info-needed" msgstr "Account Info Needed" msgid "job-state-reasons.account-limit-reached" msgstr "Account Limit Reached" msgid "job-state-reasons.compression-error" msgstr "Compression Error" msgid "job-state-reasons.conflicting-attributes" msgstr "Conflicting Attributes" msgid "job-state-reasons.connected-to-destination" msgstr "Connected To Destination" msgid "job-state-reasons.connecting-to-destination" msgstr "Connecting To Destination" msgid "job-state-reasons.destination-uri-failed" msgstr "Destination Uri Failed" msgid "job-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "job-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "job-state-reasons.document-access-error" msgstr "Document Access Error" msgid "job-state-reasons.document-format-error" msgstr "Document Format Error" msgid "job-state-reasons.document-password-error" msgstr "Document Password Error" msgid "job-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "job-state-reasons.document-security-error" msgstr "Document Security Error" msgid "job-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "job-state-reasons.errors-detected" msgstr "Errors Detected" msgid "job-state-reasons.job-canceled-at-device" msgstr "Job Canceled At Device" msgid "job-state-reasons.job-canceled-by-operator" msgstr "Job Canceled By Operator" msgid "job-state-reasons.job-canceled-by-user" msgstr "Job Canceled By User" msgid "job-state-reasons.job-completed-successfully" msgstr "Job Completed Successfully" msgid "job-state-reasons.job-completed-with-errors" msgstr "Job Completed With Errors" msgid "job-state-reasons.job-completed-with-warnings" msgstr "Job Completed With Warnings" msgid "job-state-reasons.job-data-insufficient" msgstr "Job Data Insufficient" msgid "job-state-reasons.job-delay-output-until-specified" msgstr "Job Delay Output Until Specified" msgid "job-state-reasons.job-digital-signature-wait" msgstr "Job Digital Signature Wait" msgid "job-state-reasons.job-fetchable" msgstr "Job Fetchable" msgid "job-state-reasons.job-held-for-review" msgstr "Job Held For Review" msgid "job-state-reasons.job-hold-until-specified" msgstr "Job Hold Until Specified" msgid "job-state-reasons.job-incoming" msgstr "Job Incoming" msgid "job-state-reasons.job-interpreting" msgstr "Job Interpreting" msgid "job-state-reasons.job-outgoing" msgstr "Job Outgoing" msgid "job-state-reasons.job-password-wait" msgstr "Job Password Wait" msgid "job-state-reasons.job-printed-successfully" msgstr "Job Printed Successfully" msgid "job-state-reasons.job-printed-with-errors" msgstr "Job Printed With Errors" msgid "job-state-reasons.job-printed-with-warnings" msgstr "Job Printed With Warnings" msgid "job-state-reasons.job-printing" msgstr "Job Printing" msgid "job-state-reasons.job-queued" msgstr "Job Queued" msgid "job-state-reasons.job-queued-for-marker" msgstr "Job Queued For Marker" msgid "job-state-reasons.job-release-wait" msgstr "Job Release Wait" msgid "job-state-reasons.job-restartable" msgstr "Job Restartable" msgid "job-state-reasons.job-resuming" msgstr "Job Resuming" msgid "job-state-reasons.job-saved-successfully" msgstr "Job Saved Successfully" msgid "job-state-reasons.job-saved-with-errors" msgstr "Job Saved With Errors" msgid "job-state-reasons.job-saved-with-warnings" msgstr "Job Saved With Warnings" msgid "job-state-reasons.job-saving" msgstr "Job Saving" msgid "job-state-reasons.job-spooling" msgstr "Job Spooling" msgid "job-state-reasons.job-streaming" msgstr "Job Streaming" msgid "job-state-reasons.job-suspended" msgstr "Job Suspended" msgid "job-state-reasons.job-suspended-by-operator" msgstr "Job Suspended By Operator" msgid "job-state-reasons.job-suspended-by-system" msgstr "Job Suspended By System" msgid "job-state-reasons.job-suspended-by-user" msgstr "Job Suspended By User" msgid "job-state-reasons.job-suspending" msgstr "Job Suspending" msgid "job-state-reasons.job-transferring" msgstr "Job Transferring" msgid "job-state-reasons.job-transforming" msgstr "Job Transforming" msgid "job-state-reasons.none" msgstr "None" msgid "job-state-reasons.printer-stopped" msgstr "Printer Stopped" msgid "job-state-reasons.printer-stopped-partly" msgstr "Printer Stopped Partly" msgid "job-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "job-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "job-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "job-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "job-state-reasons.service-off-line" msgstr "Service Off Line" msgid "job-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "job-state-reasons.unsupported-attributes-or-values" msgstr "Unsupported Attributes Or Values" msgid "job-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "job-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "job-state-reasons.waiting-for-user-action" msgstr "Waiting For User Action" msgid "job-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "job-state.3" msgstr "Pending" msgid "job-state.4" msgstr "Pending Held" msgid "job-state.5" msgstr "Processing" msgid "job-state.6" msgstr "Processing Stopped" msgid "job-state.7" msgstr "Canceled" msgid "job-state.8" msgstr "Aborted" msgid "job-state.9" msgstr "Completed" msgid "laminating" msgstr "Laminate Pages" msgid "laminating-sides" msgstr "Laminating Sides" msgid "laminating-sides.back" msgstr "Back" msgid "laminating-sides.both" msgstr "Both" msgid "laminating-sides.front" msgstr "Front" msgid "laminating-type" msgstr "Laminating Type" msgid "laminating-type.archival" msgstr "Archival" msgid "laminating-type.glossy" msgstr "Glossy" msgid "laminating-type.high-gloss" msgstr "High Gloss" msgid "laminating-type.matte" msgstr "Matte" msgid "laminating-type.semi-gloss" msgstr "Semi-Gloss" msgid "laminating-type.translucent" msgstr "Translucent" msgid "logo" msgstr "Logo" msgid "lpadmin: Class name can only contain printable characters." msgstr "lpadmin: クラスåã¯è¡¨ç¤ºå¯èƒ½æ–‡å­—ã®ã¿ã§æ§‹æˆã•れãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #, c-format msgid "lpadmin: Expected PPD after \"-%c\" option." msgstr "" msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option." msgstr "" "lpadmin: \"-u\" オプションã®ã‚ã¨ã«ã¯ allow/deny:ユーザーリスト ãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected class after \"-r\" option." msgstr "lpadmin: \"-r\" オプションã®ã‚ã¨ã«ã¯ã‚¯ãƒ©ã‚¹åãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected class name after \"-c\" option." msgstr "lpadmin: \"-c\" オプションã®ã‚ã¨ã«ã¯ã‚¯ãƒ©ã‚¹åãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected description after \"-D\" option." msgstr "lpadmin: \"-D\" オプションã®ã‚ã¨ã«ã¯èª¬æ˜ŽãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected device URI after \"-v\" option." msgstr "lpadmin: \"-v\" オプションã®ã‚ã¨ã«ã¯ãƒ‡ãƒã‚¤ã‚¹ URI ãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected file type(s) after \"-I\" option." msgstr "lpadmin: \"-I\" オプションã®ã‚ã¨ã«ã¯ãƒ•ァイル形å¼ãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected hostname after \"-h\" option." msgstr "lpadmin: \"-h\" オプションã®ã‚ã¨ã«ã¯ãƒ›ã‚¹ãƒˆåãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected location after \"-L\" option." msgstr "lpadmin: \"-L\" オプションã®ã‚ã¨ã«ã¯å ´æ‰€ãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected model after \"-m\" option." msgstr "lpadmin: \"-m\" オプションã®ã‚ã¨ã«ã¯ãƒ¢ãƒ‡ãƒ«åãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected name after \"-R\" option." msgstr "lpadmin: \"-R\" オプションã®ã‚ã¨ã«ã¯åå‰ãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected name=value after \"-o\" option." msgstr "lpadmin: \"-o\" オプションã®ã‚ã¨ã«ã¯ 変数å=値 ãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected printer after \"-p\" option." msgstr "lpadmin: \"-p\" オプションã®ã‚ã¨ã«ã¯ãƒ—リンターåãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected printer name after \"-d\" option." msgstr "lpadmin: \"-d\" オプションã®ã‚ã¨ã«ã¯ãƒ—リンターåãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: Expected printer or class after \"-x\" option." msgstr "" "lpadmin: \"-x\" オプションã®ã‚ã¨ã«ã¯ãƒ—リンターåã¾ãŸã¯ã‚¯ãƒ©ã‚¹åãŒå¿…è¦ã§ã™ã€‚" msgid "lpadmin: No member names were seen." msgstr "lpadmin: メンãƒãƒ¼åãŒè¦‹å½“ãŸã‚Šã¾ã›ã‚“。" #, c-format msgid "lpadmin: Printer %s is already a member of class %s." msgstr "lpadmin: プリンター %s ã¯ã™ã§ã«ã‚¯ãƒ©ã‚¹ %s ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã™ã€‚" #, c-format msgid "lpadmin: Printer %s is not a member of class %s." msgstr "lpadmin: プリンター %s ã¯ã‚¯ãƒ©ã‚¹ %s ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚りã¾ã›ã‚“。" msgid "lpadmin: Printer name can only contain printable characters." msgstr "lpadmin: プリンターåã«ã¯è¡¨ç¤ºå¯èƒ½æ–‡å­—ã ã‘ãŒä½¿ç”¨ã§ãã¾ã™ã€‚" msgid "" "lpadmin: Raw queues are deprecated and will stop working in a future version " "of CUPS." msgstr "" msgid "" "lpadmin: System V interface scripts are no longer supported for security " "reasons." msgstr "" msgid "" "lpadmin: Unable to add a printer to the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: クラスã«ãƒ—リンターを追加ã§ãã¾ã›ã‚“:\n" " å…ˆã«ãƒ—リンターåを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #, c-format msgid "lpadmin: Unable to connect to server: %s" msgstr "lpadmin: サーãƒãƒ¼ã«æŽ¥ç¶šã§ãã¾ã›ã‚“: %s" msgid "lpadmin: Unable to create temporary file" msgstr "lpadmin: テンãƒãƒ©ãƒªãƒ¼ãƒ•ァイルを作æˆã§ãã¾ã›ã‚“" msgid "" "lpadmin: Unable to delete option:\n" " You must specify a printer name first." msgstr "" "lpadmin: プリンター・オプションを削除ã§ãã¾ã›ã‚“:\n" " å…ˆã«ãƒ—リンターåを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #, c-format msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d." msgstr "" #, c-format msgid "lpadmin: Unable to open PPD file \"%s\" - %s" msgstr "lpadmin: PPD ファイル \"%s\" ã‚’é–‹ã‘ã¾ã›ã‚“ - %s" msgid "" "lpadmin: Unable to remove a printer from the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: クラスã‹ã‚‰ãƒ—リンターを削除ã§ãã¾ã›ã‚“:\n" " å…ˆã«ãƒ—リンターåを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" msgid "" "lpadmin: Unable to set the printer options:\n" " You must specify a printer name first." msgstr "" "lpadmin: プリンター・オプションを設定ã§ãã¾ã›ã‚“:\n" " å…ˆã«ãƒ—リンターåを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #, c-format msgid "lpadmin: Unknown allow/deny option \"%s\"." msgstr "lpadmin:\"%s\" ã¯æœªçŸ¥ã® allow/deny オプションã§ã™ã€‚" #, c-format msgid "lpadmin: Unknown argument \"%s\"." msgstr "lpadmin: \"%s\" ã¯æœªçŸ¥ã®å¼•æ•°ã§ã™ã€‚" #, c-format msgid "lpadmin: Unknown option \"%c\"." msgstr "lpadmin: \"%c\" ã¯æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™ã€‚" msgid "lpadmin: Use the 'everywhere' model for shared printers." msgstr "" msgid "lpadmin: Warning - content type list ignored." msgstr "lpadmin: 警告 - コンテンツタイプリストã¯ç„¡è¦–ã•れã¾ã™ã€‚" msgid "lpc> " msgstr "lpc> " msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"." msgstr "" "lpinfo: \"--device-id\" ã®ã‚ã¨ã«ã¯ã€1284 デãƒã‚¤ã‚¹ ID を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾" "ã™ã€‚" msgid "lpinfo: Expected language after \"--language\"." msgstr "lpinfo: \"--language\" ã®ã‚ã¨ã«ã¯ã€è¨€èªžã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" msgid "lpinfo: Expected make and model after \"--make-and-model\"." msgstr "" "lpinfo: \"--make-and-model\" ã®ã‚ã¨ã«ã¯ã€ãƒ¡ãƒ¼ã‚«ãƒ¼ã¨ãƒ¢ãƒ‡ãƒ«ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚り" "ã¾ã™ã€‚" msgid "lpinfo: Expected product string after \"--product\"." msgstr "lpinfo: \"--product\" ã®ã‚ã¨ã«ã¯ã€è£½å“åを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"." msgstr "" "lpinfo: \"--exclude-schemes\" ã®ã‚ã¨ã«ã¯ã€ã‚¹ã‚­ãƒ¼ãƒžãƒ»ãƒªã‚¹ãƒˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚" "りã¾ã™ã€‚" msgid "lpinfo: Expected scheme list after \"--include-schemes\"." msgstr "" "lpinfo: \"--include-schemes\" ã®ã‚ã¨ã«ã¯ã€ã‚¹ã‚­ãƒ¼ãƒžãƒ»ãƒªã‚¹ãƒˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚" "りã¾ã™ã€‚" msgid "lpinfo: Expected timeout after \"--timeout\"." msgstr "" "lpinfo: \"--timeout\" ã®ã‚ã¨ã«ã¯ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #, c-format msgid "lpmove: Unable to connect to server: %s" msgstr "lpmove: サーãƒãƒ¼ã«æŽ¥ç¶šã§ãã¾ã›ã‚“: %s" #, c-format msgid "lpmove: Unknown argument \"%s\"." msgstr "lpmove: 未知ã®å¼•æ•° \"%s\"。" msgid "lpoptions: No printers." msgstr "lpoptions: プリンターãŒã‚りã¾ã›ã‚“。" #, c-format msgid "lpoptions: Unable to add printer or instance: %s" msgstr "lpoptions: プリンターã¾ãŸã¯ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’追加ã§ãã¾ã›ã‚“: %s" #, c-format msgid "lpoptions: Unable to get PPD file for %s: %s" msgstr "lpoptions: %s ã® PPD ファイルをå–å¾—ã§ãã¾ã›ã‚“: %s" #, c-format msgid "lpoptions: Unable to open PPD file for %s." msgstr "lpoptions: %s ã® PPD ファイルを開ã‘ã¾ã›ã‚“。" msgid "lpoptions: Unknown printer or class." msgstr "lpoptions: 未知ã®ãƒ—リンターã¾ãŸã¯ã‚¯ãƒ©ã‚¹ã§ã™ã€‚" #, c-format msgid "" "lpstat: error - %s environment variable names non-existent destination \"%s" "\"." msgstr "" "lpstat: エラー - 環境変数 %s ãŒã€å­˜åœ¨ã—ãªã„宛先 \"%s\" を指ã—ã¦ã„ã¾ã™ã€‚" msgid "material-amount" msgstr "Amount of Material" msgid "material-amount-units" msgstr "Material Amount Units" msgid "material-amount-units.g" msgstr "G" msgid "material-amount-units.kg" msgstr "Kg" msgid "material-amount-units.l" msgstr "L" msgid "material-amount-units.m" msgstr "M" msgid "material-amount-units.ml" msgstr "Ml" msgid "material-amount-units.mm" msgstr "Mm" msgid "material-color" msgstr "Material Color" msgid "material-diameter" msgstr "Material Diameter" msgid "material-diameter-tolerance" msgstr "Material Diameter Tolerance" msgid "material-fill-density" msgstr "Material Fill Density" msgid "material-name" msgstr "Material Name" msgid "material-purpose" msgstr "Material Purpose" msgid "material-purpose.all" msgstr "All" msgid "material-purpose.base" msgstr "Base" msgid "material-purpose.in-fill" msgstr "In Fill" msgid "material-purpose.shell" msgstr "Shell" msgid "material-purpose.support" msgstr "Support" msgid "material-rate" msgstr "Feed Rate" msgid "material-rate-units" msgstr "Material Rate Units" msgid "material-rate-units.mg_second" msgstr "Mg Second" msgid "material-rate-units.ml_second" msgstr "Ml Second" msgid "material-rate-units.mm_second" msgstr "Mm Second" msgid "material-shell-thickness" msgstr "Material Shell Thickness" msgid "material-temperature" msgstr "Material Temperature" msgid "material-type" msgstr "Material Type" msgid "material-type.abs" msgstr "Abs" msgid "material-type.abs-carbon-fiber" msgstr "Abs Carbon Fiber" msgid "material-type.abs-carbon-nanotube" msgstr "Abs Carbon Nanotube" msgid "material-type.chocolate" msgstr "Chocolate" msgid "material-type.gold" msgstr "Gold" msgid "material-type.nylon" msgstr "Nylon" msgid "material-type.pet" msgstr "Pet" msgid "material-type.photopolymer" msgstr "Photopolymer" msgid "material-type.pla" msgstr "Pla" msgid "material-type.pla-conductive" msgstr "Pla Conductive" msgid "material-type.pla-flexible" msgstr "Pla Flexible" msgid "material-type.pla-magnetic" msgstr "Pla Magnetic" msgid "material-type.pla-steel" msgstr "Pla Steel" msgid "material-type.pla-stone" msgstr "Pla Stone" msgid "material-type.pla-wood" msgstr "Pla Wood" msgid "material-type.polycarbonate" msgstr "Polycarbonate" msgid "material-type.pva-dissolvable" msgstr "Dissolvable PVA" msgid "material-type.silver" msgstr "Silver" msgid "material-type.titanium" msgstr "Titanium" msgid "material-type.wax" msgstr "Wax" msgid "materials-col" msgstr "Materials" msgid "media" msgstr "Media" msgid "media-back-coating" msgstr "Media Back Coating" msgid "media-back-coating.glossy" msgstr "Glossy" msgid "media-back-coating.high-gloss" msgstr "High Gloss" msgid "media-back-coating.matte" msgstr "Matte" msgid "media-back-coating.none" msgstr "None" msgid "media-back-coating.satin" msgstr "Satin" msgid "media-back-coating.semi-gloss" msgstr "Semi-Gloss" msgid "media-bottom-margin" msgstr "Media Bottom Margin" msgid "media-col" msgstr "Media" msgid "media-color" msgstr "Media Color" msgid "media-color.black" msgstr "Black" msgid "media-color.blue" msgstr "Blue" msgid "media-color.brown" msgstr "Brown" msgid "media-color.buff" msgstr "Buff" msgid "media-color.clear-black" msgstr "Clear Black" msgid "media-color.clear-blue" msgstr "Clear Blue" msgid "media-color.clear-brown" msgstr "Clear Brown" msgid "media-color.clear-buff" msgstr "Clear Buff" msgid "media-color.clear-cyan" msgstr "Clear Cyan" msgid "media-color.clear-gold" msgstr "Clear Gold" msgid "media-color.clear-goldenrod" msgstr "Clear Goldenrod" msgid "media-color.clear-gray" msgstr "Clear Gray" msgid "media-color.clear-green" msgstr "Clear Green" msgid "media-color.clear-ivory" msgstr "Clear Ivory" msgid "media-color.clear-magenta" msgstr "Clear Magenta" msgid "media-color.clear-multi-color" msgstr "Clear Multi Color" msgid "media-color.clear-mustard" msgstr "Clear Mustard" msgid "media-color.clear-orange" msgstr "Clear Orange" msgid "media-color.clear-pink" msgstr "Clear Pink" msgid "media-color.clear-red" msgstr "Clear Red" msgid "media-color.clear-silver" msgstr "Clear Silver" msgid "media-color.clear-turquoise" msgstr "Clear Turquoise" msgid "media-color.clear-violet" msgstr "Clear Violet" msgid "media-color.clear-white" msgstr "Clear White" msgid "media-color.clear-yellow" msgstr "Clear Yellow" msgid "media-color.cyan" msgstr "Cyan" msgid "media-color.dark-blue" msgstr "Dark Blue" msgid "media-color.dark-brown" msgstr "Dark Brown" msgid "media-color.dark-buff" msgstr "Dark Buff" msgid "media-color.dark-cyan" msgstr "Dark Cyan" msgid "media-color.dark-gold" msgstr "Dark Gold" msgid "media-color.dark-goldenrod" msgstr "Dark Goldenrod" msgid "media-color.dark-gray" msgstr "Dark Gray" msgid "media-color.dark-green" msgstr "Dark Green" msgid "media-color.dark-ivory" msgstr "Dark Ivory" msgid "media-color.dark-magenta" msgstr "Dark Magenta" msgid "media-color.dark-mustard" msgstr "Dark Mustard" msgid "media-color.dark-orange" msgstr "Dark Orange" msgid "media-color.dark-pink" msgstr "Dark Pink" msgid "media-color.dark-red" msgstr "Dark Red" msgid "media-color.dark-silver" msgstr "Dark Silver" msgid "media-color.dark-turquoise" msgstr "Dark Turquoise" msgid "media-color.dark-violet" msgstr "Dark Violet" msgid "media-color.dark-yellow" msgstr "Dark Yellow" msgid "media-color.gold" msgstr "Gold" msgid "media-color.goldenrod" msgstr "Goldenrod" msgid "media-color.gray" msgstr "Gray" msgid "media-color.green" msgstr "Green" msgid "media-color.ivory" msgstr "Ivory" msgid "media-color.light-black" msgstr "Light Black" msgid "media-color.light-blue" msgstr "Light Blue" msgid "media-color.light-brown" msgstr "Light Brown" msgid "media-color.light-buff" msgstr "Light Buff" msgid "media-color.light-cyan" msgstr "Light Cyan" msgid "media-color.light-gold" msgstr "Light Gold" msgid "media-color.light-goldenrod" msgstr "Light Goldenrod" msgid "media-color.light-gray" msgstr "Light Gray" msgid "media-color.light-green" msgstr "Light Green" msgid "media-color.light-ivory" msgstr "Light Ivory" msgid "media-color.light-magenta" msgstr "Light Magenta" msgid "media-color.light-mustard" msgstr "Light Mustard" msgid "media-color.light-orange" msgstr "Light Orange" msgid "media-color.light-pink" msgstr "Light Pink" msgid "media-color.light-red" msgstr "Light Red" msgid "media-color.light-silver" msgstr "Light Silver" msgid "media-color.light-turquoise" msgstr "Light Turquoise" msgid "media-color.light-violet" msgstr "Light Violet" msgid "media-color.light-yellow" msgstr "Light Yellow" msgid "media-color.magenta" msgstr "Magenta" msgid "media-color.multi-color" msgstr "Multi-Color" msgid "media-color.mustard" msgstr "Mustard" msgid "media-color.no-color" msgstr "No Color" msgid "media-color.orange" msgstr "Orange" msgid "media-color.pink" msgstr "Pink" msgid "media-color.red" msgstr "Red" msgid "media-color.silver" msgstr "Silver" msgid "media-color.turquoise" msgstr "Turquoise" msgid "media-color.violet" msgstr "Violet" msgid "media-color.white" msgstr "White" msgid "media-color.yellow" msgstr "Yellow" msgid "media-front-coating" msgstr "Media Front Coating" msgid "media-grain" msgstr "Media Grain" msgid "media-grain.x-direction" msgstr "Cross-Feed Direction" msgid "media-grain.y-direction" msgstr "Feed Direction" msgid "media-hole-count" msgstr "Media Hole Count" msgid "media-info" msgstr "Media Info" msgid "media-input-tray-check" msgstr "Media Input Tray Check" msgid "media-left-margin" msgstr "Media Left Margin" msgid "media-pre-printed" msgstr "Media Preprinted" msgid "media-pre-printed.blank" msgstr "Blank" msgid "media-pre-printed.letter-head" msgstr "Letterhead" msgid "media-pre-printed.pre-printed" msgstr "Preprinted" msgid "media-recycled" msgstr "Media Recycled" msgid "media-recycled.none" msgstr "None" msgid "media-recycled.standard" msgstr "Standard" msgid "media-right-margin" msgstr "Media Right Margin" msgid "media-size" msgstr "Media Dimensions" msgid "media-size-name" msgstr "Media Name" msgid "media-source" msgstr "Media Source" msgid "media-source.alternate" msgstr "Alternate" msgid "media-source.alternate-roll" msgstr "Alternate Roll" msgid "media-source.auto" msgstr "Automatic" msgid "media-source.bottom" msgstr "Bottom" msgid "media-source.by-pass-tray" msgstr "By Pass Tray" msgid "media-source.center" msgstr "Center" msgid "media-source.disc" msgstr "Disc" msgid "media-source.envelope" msgstr "Envelope" msgid "media-source.hagaki" msgstr "Hagaki" msgid "media-source.large-capacity" msgstr "Large Capacity" msgid "media-source.left" msgstr "Left" msgid "media-source.main" msgstr "Main" msgid "media-source.main-roll" msgstr "Main Roll" msgid "media-source.manual" msgstr "Manual" msgid "media-source.middle" msgstr "Middle" msgid "media-source.photo" msgstr "Photo" msgid "media-source.rear" msgstr "Rear" msgid "media-source.right" msgstr "Right" msgid "media-source.roll-1" msgstr "Roll 1" msgid "media-source.roll-10" msgstr "Roll 10" msgid "media-source.roll-2" msgstr "Roll 2" msgid "media-source.roll-3" msgstr "Roll 3" msgid "media-source.roll-4" msgstr "Roll 4" msgid "media-source.roll-5" msgstr "Roll 5" msgid "media-source.roll-6" msgstr "Roll 6" msgid "media-source.roll-7" msgstr "Roll 7" msgid "media-source.roll-8" msgstr "Roll 8" msgid "media-source.roll-9" msgstr "Roll 9" msgid "media-source.side" msgstr "Side" msgid "media-source.top" msgstr "Top" msgid "media-source.tray-1" msgstr "Tray 1" msgid "media-source.tray-10" msgstr "Tray 10" msgid "media-source.tray-11" msgstr "Tray 11" msgid "media-source.tray-12" msgstr "Tray 12" msgid "media-source.tray-13" msgstr "Tray 13" msgid "media-source.tray-14" msgstr "Tray 14" msgid "media-source.tray-15" msgstr "Tray 15" msgid "media-source.tray-16" msgstr "Tray 16" msgid "media-source.tray-17" msgstr "Tray 17" msgid "media-source.tray-18" msgstr "Tray 18" msgid "media-source.tray-19" msgstr "Tray 19" msgid "media-source.tray-2" msgstr "Tray 2" msgid "media-source.tray-20" msgstr "Tray 20" msgid "media-source.tray-3" msgstr "Tray 3" msgid "media-source.tray-4" msgstr "Tray 4" msgid "media-source.tray-5" msgstr "Tray 5" msgid "media-source.tray-6" msgstr "Tray 6" msgid "media-source.tray-7" msgstr "Tray 7" msgid "media-source.tray-8" msgstr "Tray 8" msgid "media-source.tray-9" msgstr "Tray 9" msgid "media-thickness" msgstr "Media Thickness" msgid "media-tooth" msgstr "Media Tooth" msgid "media-tooth.antique" msgstr "Antique" msgid "media-tooth.calendared" msgstr "Calendared" msgid "media-tooth.coarse" msgstr "Coarse" msgid "media-tooth.fine" msgstr "Fine" msgid "media-tooth.linen" msgstr "Linen" msgid "media-tooth.medium" msgstr "Medium" msgid "media-tooth.smooth" msgstr "Smooth" msgid "media-tooth.stipple" msgstr "Stipple" msgid "media-tooth.uncalendared" msgstr "Uncalendared" msgid "media-tooth.vellum" msgstr "Vellum" msgid "media-top-margin" msgstr "Media Top Margin" msgid "media-type" msgstr "Media Type" msgid "media-type.aluminum" msgstr "Aluminum" msgid "media-type.auto" msgstr "Automatic" msgid "media-type.back-print-film" msgstr "Back Print Film" msgid "media-type.cardboard" msgstr "Cardboard" msgid "media-type.cardstock" msgstr "Cardstock" msgid "media-type.cd" msgstr "CD" msgid "media-type.com.hp.advanced-photo" msgstr "Advanced Photo Paper" msgid "media-type.com.hp.brochure-glossy" msgstr "Glossy Brochure Paper" msgid "media-type.com.hp.brochure-matte" msgstr "Matte Brochure Paper" msgid "media-type.com.hp.cover-matte" msgstr "Matte Cover Paper" msgid "media-type.com.hp.ecosmart-lite" msgstr "Office Recycled Paper" msgid "media-type.com.hp.everyday-glossy" msgstr "Everyday Glossy Photo Paper" msgid "media-type.com.hp.everyday-matte" msgstr "Everyday Matte Paper" msgid "media-type.com.hp.extra-heavy" msgstr "Extra Heavyweight Paper" msgid "media-type.com.hp.intermediate" msgstr "Multipurpose Paper" msgid "media-type.com.hp.mid-weight" msgstr "Mid-Weight Paper" msgid "media-type.com.hp.premium-inkjet" msgstr "Premium Inkjet Paper" msgid "media-type.com.hp.premium-photo" msgstr "Premium Photo Glossy Paper" msgid "media-type.com.hp.premium-presentation-matte" msgstr "Premium Presentation Matte Paper" msgid "media-type.continuous" msgstr "Continuous" msgid "media-type.continuous-long" msgstr "Continuous Long" msgid "media-type.continuous-short" msgstr "Continuous Short" msgid "media-type.corrugated-board" msgstr "Corrugated Board" msgid "media-type.disc" msgstr "Optical Disc" msgid "media-type.disc-glossy" msgstr "Glossy Optical Disc" msgid "media-type.disc-high-gloss" msgstr "High Gloss Optical Disc" msgid "media-type.disc-matte" msgstr "Matte Optical Disc" msgid "media-type.disc-satin" msgstr "Satin Optical Disc" msgid "media-type.disc-semi-gloss" msgstr "Semi-Gloss Optical Disc" msgid "media-type.double-wall" msgstr "Double Wall" msgid "media-type.dry-film" msgstr "Dry Film" msgid "media-type.dvd" msgstr "DVD" msgid "media-type.embossing-foil" msgstr "Embossing Foil" msgid "media-type.end-board" msgstr "End Board" msgid "media-type.envelope" msgstr "Envelope" msgid "media-type.envelope-archival" msgstr "Archival Envelope" msgid "media-type.envelope-bond" msgstr "Bond Envelope" msgid "media-type.envelope-coated" msgstr "Coated Envelope" msgid "media-type.envelope-cotton" msgstr "Cotton Envelope" msgid "media-type.envelope-fine" msgstr "Fine Envelope" msgid "media-type.envelope-heavyweight" msgstr "Heavyweight Envelope" msgid "media-type.envelope-inkjet" msgstr "Inkjet Envelope" msgid "media-type.envelope-lightweight" msgstr "Lightweight Envelope" msgid "media-type.envelope-plain" msgstr "Plain Envelope" msgid "media-type.envelope-preprinted" msgstr "Preprinted Envelope" msgid "media-type.envelope-window" msgstr "Windowed Envelope" msgid "media-type.fabric" msgstr "Fabric" msgid "media-type.fabric-archival" msgstr "Archival Fabric" msgid "media-type.fabric-glossy" msgstr "Glossy Fabric" msgid "media-type.fabric-high-gloss" msgstr "High Gloss Fabric" msgid "media-type.fabric-matte" msgstr "Matte Fabric" msgid "media-type.fabric-semi-gloss" msgstr "Semi-Gloss Fabric" msgid "media-type.fabric-waterproof" msgstr "Waterproof Fabric" msgid "media-type.film" msgstr "Film" msgid "media-type.flexo-base" msgstr "Flexo Base" msgid "media-type.flexo-photo-polymer" msgstr "Flexo Photo Polymer" msgid "media-type.flute" msgstr "Flute" msgid "media-type.foil" msgstr "Foil" msgid "media-type.full-cut-tabs" msgstr "Full Cut Tabs" msgid "media-type.glass" msgstr "Glass" msgid "media-type.glass-colored" msgstr "Glass Colored" msgid "media-type.glass-opaque" msgstr "Glass Opaque" msgid "media-type.glass-surfaced" msgstr "Glass Surfaced" msgid "media-type.glass-textured" msgstr "Glass Textured" msgid "media-type.gravure-cylinder" msgstr "Gravure Cylinder" msgid "media-type.image-setter-paper" msgstr "Image Setter Paper" msgid "media-type.imaging-cylinder" msgstr "Imaging Cylinder" msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon-photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon_photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.labels" msgstr "Labels" msgid "media-type.labels-colored" msgstr "Colored Labels" msgid "media-type.labels-glossy" msgstr "Glossy Labels" msgid "media-type.labels-high-gloss" msgstr "High Gloss Labels" msgid "media-type.labels-inkjet" msgstr "Inkjet Labels" msgid "media-type.labels-matte" msgstr "Matte Labels" msgid "media-type.labels-permanent" msgstr "Permanent Labels" msgid "media-type.labels-satin" msgstr "Satin Labels" msgid "media-type.labels-security" msgstr "Security Labels" msgid "media-type.labels-semi-gloss" msgstr "Semi-Gloss Labels" msgid "media-type.laminating-foil" msgstr "Laminating Foil" msgid "media-type.letterhead" msgstr "Letterhead" msgid "media-type.metal" msgstr "Metal" msgid "media-type.metal-glossy" msgstr "Metal Glossy" msgid "media-type.metal-high-gloss" msgstr "Metal High Gloss" msgid "media-type.metal-matte" msgstr "Metal Matte" msgid "media-type.metal-satin" msgstr "Metal Satin" msgid "media-type.metal-semi-gloss" msgstr "Metal Semi Gloss" msgid "media-type.mounting-tape" msgstr "Mounting Tape" msgid "media-type.multi-layer" msgstr "Multi Layer" msgid "media-type.multi-part-form" msgstr "Multi Part Form" msgid "media-type.other" msgstr "Other" msgid "media-type.paper" msgstr "Paper" msgid "media-type.photographic" msgstr "Photo Paper" msgid "media-type.photographic-archival" msgstr "Photographic Archival" msgid "media-type.photographic-film" msgstr "Photo Film" msgid "media-type.photographic-glossy" msgstr "Glossy Photo Paper" msgid "media-type.photographic-high-gloss" msgstr "High Gloss Photo Paper" msgid "media-type.photographic-matte" msgstr "Matte Photo Paper" msgid "media-type.photographic-satin" msgstr "Satin Photo Paper" msgid "media-type.photographic-semi-gloss" msgstr "Semi-Gloss Photo Paper" msgid "media-type.plastic" msgstr "Plastic" msgid "media-type.plastic-archival" msgstr "Plastic Archival" msgid "media-type.plastic-colored" msgstr "Plastic Colored" msgid "media-type.plastic-glossy" msgstr "Plastic Glossy" msgid "media-type.plastic-high-gloss" msgstr "Plastic High Gloss" msgid "media-type.plastic-matte" msgstr "Plastic Matte" msgid "media-type.plastic-satin" msgstr "Plastic Satin" msgid "media-type.plastic-semi-gloss" msgstr "Plastic Semi Gloss" msgid "media-type.plate" msgstr "Plate" msgid "media-type.polyester" msgstr "Polyester" msgid "media-type.pre-cut-tabs" msgstr "Pre Cut Tabs" msgid "media-type.roll" msgstr "Roll" msgid "media-type.screen" msgstr "Screen" msgid "media-type.screen-paged" msgstr "Screen Paged" msgid "media-type.self-adhesive" msgstr "Self Adhesive" msgid "media-type.self-adhesive-film" msgstr "Self Adhesive Film" msgid "media-type.shrink-foil" msgstr "Shrink Foil" msgid "media-type.single-face" msgstr "Single Face" msgid "media-type.single-wall" msgstr "Single Wall" msgid "media-type.sleeve" msgstr "Sleeve" msgid "media-type.stationery" msgstr "Stationery" msgid "media-type.stationery-archival" msgstr "Stationery Archival" msgid "media-type.stationery-coated" msgstr "Coated Paper" msgid "media-type.stationery-cotton" msgstr "Stationery Cotton" msgid "media-type.stationery-fine" msgstr "Vellum Paper" msgid "media-type.stationery-heavyweight" msgstr "Heavyweight Paper" msgid "media-type.stationery-heavyweight-coated" msgstr "Stationery Heavyweight Coated" msgid "media-type.stationery-inkjet" msgstr "Stationery Inkjet Paper" msgid "media-type.stationery-letterhead" msgstr "Letterhead" msgid "media-type.stationery-lightweight" msgstr "Lightweight Paper" msgid "media-type.stationery-preprinted" msgstr "Preprinted Paper" msgid "media-type.stationery-prepunched" msgstr "Punched Paper" msgid "media-type.tab-stock" msgstr "Tab Stock" msgid "media-type.tractor" msgstr "Tractor" msgid "media-type.transfer" msgstr "Transfer" msgid "media-type.transparency" msgstr "Transparency" msgid "media-type.triple-wall" msgstr "Triple Wall" msgid "media-type.wet-film" msgstr "Wet Film" msgid "media-weight-metric" msgstr "Media Weight (grams per m²)" msgid "media.asme_f_28x40in" msgstr "28 x 40\"" msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" msgstr "A4 or US Letter" msgid "media.iso_2a0_1189x1682mm" msgstr "2a0" msgid "media.iso_a0_841x1189mm" msgstr "A0" msgid "media.iso_a0x3_1189x2523mm" msgstr "A0x3" msgid "media.iso_a10_26x37mm" msgstr "A10" msgid "media.iso_a1_594x841mm" msgstr "A1" msgid "media.iso_a1x3_841x1783mm" msgstr "A1x3" msgid "media.iso_a1x4_841x2378mm" msgstr "A1x4" msgid "media.iso_a2_420x594mm" msgstr "A2" msgid "media.iso_a2x3_594x1261mm" msgstr "A2x3" msgid "media.iso_a2x4_594x1682mm" msgstr "A2x4" msgid "media.iso_a2x5_594x2102mm" msgstr "A2x5" msgid "media.iso_a3-extra_322x445mm" msgstr "A3 (Extra)" msgid "media.iso_a3_297x420mm" msgstr "A3" msgid "media.iso_a3x3_420x891mm" msgstr "A3x3" msgid "media.iso_a3x4_420x1189mm" msgstr "A3x4" msgid "media.iso_a3x5_420x1486mm" msgstr "A3x5" msgid "media.iso_a3x6_420x1783mm" msgstr "A3x6" msgid "media.iso_a3x7_420x2080mm" msgstr "A3x7" msgid "media.iso_a4-extra_235.5x322.3mm" msgstr "A4 (Extra)" msgid "media.iso_a4-tab_225x297mm" msgstr "A4 (Tab)" msgid "media.iso_a4_210x297mm" msgstr "A4" msgid "media.iso_a4x3_297x630mm" msgstr "A4x3" msgid "media.iso_a4x4_297x841mm" msgstr "A4x4" msgid "media.iso_a4x5_297x1051mm" msgstr "A4x5" msgid "media.iso_a4x6_297x1261mm" msgstr "A4x6" msgid "media.iso_a4x7_297x1471mm" msgstr "A4x7" msgid "media.iso_a4x8_297x1682mm" msgstr "A4x8" msgid "media.iso_a4x9_297x1892mm" msgstr "A4x9" msgid "media.iso_a5-extra_174x235mm" msgstr "A5 (Extra)" msgid "media.iso_a5_148x210mm" msgstr "A5" msgid "media.iso_a6_105x148mm" msgstr "A6" msgid "media.iso_a7_74x105mm" msgstr "A7" msgid "media.iso_a8_52x74mm" msgstr "A8" msgid "media.iso_a9_37x52mm" msgstr "A9" msgid "media.iso_b0_1000x1414mm" msgstr "B0" msgid "media.iso_b10_31x44mm" msgstr "B10" msgid "media.iso_b1_707x1000mm" msgstr "B1" msgid "media.iso_b2_500x707mm" msgstr "B2" msgid "media.iso_b3_353x500mm" msgstr "B3" msgid "media.iso_b4_250x353mm" msgstr "B4" msgid "media.iso_b5-extra_201x276mm" msgstr "B5 (Extra)" msgid "media.iso_b5_176x250mm" msgstr "B5 Envelope" msgid "media.iso_b6_125x176mm" msgstr "B6" msgid "media.iso_b6c4_125x324mm" msgstr "B6/C4 Envelope" msgid "media.iso_b7_88x125mm" msgstr "B7" msgid "media.iso_b8_62x88mm" msgstr "B8" msgid "media.iso_b9_44x62mm" msgstr "B9" msgid "media.iso_c0_917x1297mm" msgstr "C0 Envelope" msgid "media.iso_c10_28x40mm" msgstr "C10 Envelope" msgid "media.iso_c1_648x917mm" msgstr "C1 Envelope" msgid "media.iso_c2_458x648mm" msgstr "C2 Envelope" msgid "media.iso_c3_324x458mm" msgstr "C3 Envelope" msgid "media.iso_c4_229x324mm" msgstr "C4 Envelope" msgid "media.iso_c5_162x229mm" msgstr "C5 Envelope" msgid "media.iso_c6_114x162mm" msgstr "C6 Envelope" msgid "media.iso_c6c5_114x229mm" msgstr "C6c5 Envelope" msgid "media.iso_c7_81x114mm" msgstr "C7 Envelope" msgid "media.iso_c7c6_81x162mm" msgstr "C7c6 Envelope" msgid "media.iso_c8_57x81mm" msgstr "C8 Envelope" msgid "media.iso_c9_40x57mm" msgstr "C9 Envelope" msgid "media.iso_dl_110x220mm" msgstr "DL Envelope" msgid "media.iso_ra0_860x1220mm" msgstr "Ra0" msgid "media.iso_ra1_610x860mm" msgstr "Ra1" msgid "media.iso_ra2_430x610mm" msgstr "Ra2" msgid "media.iso_ra3_305x430mm" msgstr "Ra3" msgid "media.iso_ra4_215x305mm" msgstr "Ra4" msgid "media.iso_sra0_900x1280mm" msgstr "Sra0" msgid "media.iso_sra1_640x900mm" msgstr "Sra1" msgid "media.iso_sra2_450x640mm" msgstr "Sra2" msgid "media.iso_sra3_320x450mm" msgstr "Sra3" msgid "media.iso_sra4_225x320mm" msgstr "Sra4" msgid "media.jis_b0_1030x1456mm" msgstr "JIS B0" msgid "media.jis_b10_32x45mm" msgstr "JIS B10" msgid "media.jis_b1_728x1030mm" msgstr "JIS B1" msgid "media.jis_b2_515x728mm" msgstr "JIS B2" msgid "media.jis_b3_364x515mm" msgstr "JIS B3" msgid "media.jis_b4_257x364mm" msgstr "JIS B4" msgid "media.jis_b5_182x257mm" msgstr "JIS B5" msgid "media.jis_b6_128x182mm" msgstr "JIS B6" msgid "media.jis_b7_91x128mm" msgstr "JIS B7" msgid "media.jis_b8_64x91mm" msgstr "JIS B8" msgid "media.jis_b9_45x64mm" msgstr "JIS B9" msgid "media.jis_exec_216x330mm" msgstr "JIS Executive" msgid "media.jpn_chou2_111.1x146mm" msgstr "Chou 2 Envelope" msgid "media.jpn_chou3_120x235mm" msgstr "Chou 3 Envelope" msgid "media.jpn_chou4_90x205mm" msgstr "Chou 4 Envelope" msgid "media.jpn_hagaki_100x148mm" msgstr "Hagaki" msgid "media.jpn_kahu_240x322.1mm" msgstr "Kahu Envelope" msgid "media.jpn_kaku2_240x332mm" msgstr "Kahu 2 Envelope" msgid "media.jpn_kaku3_216x277mm" msgstr "216 x 277mme" msgid "media.jpn_kaku4_197x267mm" msgstr "197 x 267mme" msgid "media.jpn_kaku5_190x240mm" msgstr "190 x 240mme" msgid "media.jpn_kaku7_142x205mm" msgstr "142 x 205mme" msgid "media.jpn_kaku8_119x197mm" msgstr "119 x 197mme" msgid "media.jpn_oufuku_148x200mm" msgstr "Oufuku Reply Postcard" msgid "media.jpn_you4_105x235mm" msgstr "You 4 Envelope" msgid "media.na_10x11_10x11in" msgstr "10 x 11\"" msgid "media.na_10x13_10x13in" msgstr "10 x 13\"" msgid "media.na_10x14_10x14in" msgstr "10 x 14\"" msgid "media.na_10x15_10x15in" msgstr "10 x 15\"" msgid "media.na_11x12_11x12in" msgstr "11 x 12\"" msgid "media.na_11x15_11x15in" msgstr "11 x 15\"" msgid "media.na_12x19_12x19in" msgstr "12 x 19\"" msgid "media.na_5x7_5x7in" msgstr "5 x 7\"" msgid "media.na_6x9_6x9in" msgstr "6 x 9\"" msgid "media.na_7x9_7x9in" msgstr "7 x 9\"" msgid "media.na_9x11_9x11in" msgstr "9 x 11\"" msgid "media.na_a2_4.375x5.75in" msgstr "A2 Envelope" msgid "media.na_arch-a_9x12in" msgstr "9 x 12\"" msgid "media.na_arch-b_12x18in" msgstr "12 x 18\"" msgid "media.na_arch-c_18x24in" msgstr "18 x 24\"" msgid "media.na_arch-d_24x36in" msgstr "24 x 36\"" msgid "media.na_arch-e2_26x38in" msgstr "26 x 38\"" msgid "media.na_arch-e3_27x39in" msgstr "27 x 39\"" msgid "media.na_arch-e_36x48in" msgstr "36 x 48\"" msgid "media.na_b-plus_12x19.17in" msgstr "12 x 19.17\"" msgid "media.na_c5_6.5x9.5in" msgstr "C5 Envelope" msgid "media.na_c_17x22in" msgstr "17 x 22\"" msgid "media.na_d_22x34in" msgstr "22 x 34\"" msgid "media.na_e_34x44in" msgstr "34 x 44\"" msgid "media.na_edp_11x14in" msgstr "11 x 14\"" msgid "media.na_eur-edp_12x14in" msgstr "12 x 14\"" msgid "media.na_executive_7.25x10.5in" msgstr "Executive" msgid "media.na_f_44x68in" msgstr "44 x 68\"" msgid "media.na_fanfold-eur_8.5x12in" msgstr "European Fanfold" msgid "media.na_fanfold-us_11x14.875in" msgstr "US Fanfold" msgid "media.na_foolscap_8.5x13in" msgstr "Foolscap" msgid "media.na_govt-legal_8x13in" msgstr "8 x 13\"" msgid "media.na_govt-letter_8x10in" msgstr "8 x 10\"" msgid "media.na_index-3x5_3x5in" msgstr "3 x 5\"" msgid "media.na_index-4x6-ext_6x8in" msgstr "6 x 8\"" msgid "media.na_index-4x6_4x6in" msgstr "4 x 6\"" msgid "media.na_index-5x8_5x8in" msgstr "5 x 8\"" msgid "media.na_invoice_5.5x8.5in" msgstr "Statement" msgid "media.na_ledger_11x17in" msgstr "11 x 17\"" msgid "media.na_legal-extra_9.5x15in" msgstr "US Legal (Extra)" msgid "media.na_legal_8.5x14in" msgstr "US Legal" msgid "media.na_letter-extra_9.5x12in" msgstr "US Letter (Extra)" msgid "media.na_letter-plus_8.5x12.69in" msgstr "US Letter (Plus)" msgid "media.na_letter_8.5x11in" msgstr "US Letter" msgid "media.na_monarch_3.875x7.5in" msgstr "Monarch Envelope" msgid "media.na_number-10_4.125x9.5in" msgstr "#10 Envelope" msgid "media.na_number-11_4.5x10.375in" msgstr "#11 Envelope" msgid "media.na_number-12_4.75x11in" msgstr "#12 Envelope" msgid "media.na_number-14_5x11.5in" msgstr "#14 Envelope" msgid "media.na_number-9_3.875x8.875in" msgstr "#9 Envelope" msgid "media.na_oficio_8.5x13.4in" msgstr "8.5 x 13.4\"" msgid "media.na_personal_3.625x6.5in" msgstr "Personal Envelope" msgid "media.na_quarto_8.5x10.83in" msgstr "Quarto" msgid "media.na_super-a_8.94x14in" msgstr "8.94 x 14\"" msgid "media.na_super-b_13x19in" msgstr "13 x 19\"" msgid "media.na_wide-format_30x42in" msgstr "30 x 42\"" msgid "media.oe_12x16_12x16in" msgstr "12 x 16\"" msgid "media.oe_14x17_14x17in" msgstr "14 x 17\"" msgid "media.oe_18x22_18x22in" msgstr "18 x 22\"" msgid "media.oe_a2plus_17x24in" msgstr "17 x 24\"" msgid "media.oe_photo-10r_10x12in" msgstr "10 x 12\"" msgid "media.oe_photo-20r_20x24in" msgstr "20 x 24\"" msgid "media.oe_photo-l_3.5x5in" msgstr "3.5 x 5\"" msgid "media.oe_photo-s10r_10x15in" msgstr "10 x 15\"" msgid "media.om_16k_184x260mm" msgstr "184 x 260mm" msgid "media.om_16k_195x270mm" msgstr "195 x 270mm" msgid "media.om_dai-pa-kai_275x395mm" msgstr "275 x 395mm" msgid "media.om_folio-sp_215x315mm" msgstr "Folio" msgid "media.om_folio_210x330mm" msgstr "Folio (Special)" msgid "media.om_invite_220x220mm" msgstr "Invitation Envelope" msgid "media.om_italian_110x230mm" msgstr "Italian Envelope" msgid "media.om_juuro-ku-kai_198x275mm" msgstr "198 x 275mm" msgid "media.om_large-photo_200x300" msgstr "200 x 300mm" msgid "media.om_medium-photo_130x180mm" msgstr "130 x 180mm" msgid "media.om_pa-kai_267x389mm" msgstr "267 x 389mm" msgid "media.om_postfix_114x229mm" msgstr "Postfix Envelope" msgid "media.om_small-photo_100x150mm" msgstr "100 x 150mm" msgid "media.om_wide-photo_100x200mm" msgstr "100 x 200mm" msgid "media.prc_10_324x458mm" msgstr "Chinese #10 Envelope" msgid "media.prc_16k_146x215mm" msgstr "Chinese 16k" msgid "media.prc_1_102x165mm" msgstr "Chinese #1 Envelope" msgid "media.prc_2_102x176mm" msgstr "Chinese #2 Envelope" msgid "media.prc_32k_97x151mm" msgstr "Chinese 32k" msgid "media.prc_3_125x176mm" msgstr "Chinese #3 Envelope" msgid "media.prc_4_110x208mm" msgstr "Chinese #4 Envelope" msgid "media.prc_5_110x220mm" msgstr "Chinese #5 Envelope" msgid "media.prc_6_120x320mm" msgstr "Chinese #6 Envelope" msgid "media.prc_7_160x230mm" msgstr "Chinese #7 Envelope" msgid "media.prc_8_120x309mm" msgstr "Chinese #8 Envelope" msgid "media.roc_16k_7.75x10.75in" msgstr "ROC 16k" msgid "media.roc_8k_10.75x15.5in" msgstr "ROC 8k" #, c-format msgid "members of class %s:" msgstr "クラス %s ã®ãƒ¡ãƒ³ãƒãƒ¼:" msgid "multiple-document-handling" msgstr "Multiple Document Handling" msgid "multiple-document-handling.separate-documents-collated-copies" msgstr "Separate Documents Collated Copies" msgid "multiple-document-handling.separate-documents-uncollated-copies" msgstr "Separate Documents Uncollated Copies" msgid "multiple-document-handling.single-document" msgstr "Single Document" msgid "multiple-document-handling.single-document-new-sheet" msgstr "Single Document New Sheet" msgid "multiple-object-handling" msgstr "Multiple Object Handling" msgid "multiple-object-handling.auto" msgstr "Automatic" msgid "multiple-object-handling.best-fit" msgstr "Best Fit" msgid "multiple-object-handling.best-quality" msgstr "Best Quality" msgid "multiple-object-handling.best-speed" msgstr "Best Speed" msgid "multiple-object-handling.one-at-a-time" msgstr "One At A Time" msgid "multiple-operation-time-out-action" msgstr "Multiple Operation Time Out Action" msgid "multiple-operation-time-out-action.abort-job" msgstr "Abort Job" msgid "multiple-operation-time-out-action.hold-job" msgstr "Hold Job" msgid "multiple-operation-time-out-action.process-job" msgstr "Process Job" msgid "no entries" msgstr "エントリーãŒã‚りã¾ã›ã‚“" msgid "no system default destination" msgstr "システムã®ãƒ‡ãƒ•ォルトã®å®›å…ˆãŒã‚りã¾ã›ã‚“" msgid "noise-removal" msgstr "Noise Removal" msgid "notify-attributes" msgstr "Notify Attributes" msgid "notify-charset" msgstr "Notify Charset" msgid "notify-events" msgstr "Notify Events" msgid "notify-events not specified." msgstr "notify-events ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“。" msgid "notify-events.document-completed" msgstr "Document Completed" msgid "notify-events.document-config-changed" msgstr "Document Config Changed" msgid "notify-events.document-created" msgstr "Document Created" msgid "notify-events.document-fetchable" msgstr "Document Fetchable" msgid "notify-events.document-state-changed" msgstr "Document State Changed" msgid "notify-events.document-stopped" msgstr "Document Stopped" msgid "notify-events.job-completed" msgstr "Job Completed" msgid "notify-events.job-config-changed" msgstr "Job Config Changed" msgid "notify-events.job-created" msgstr "Job Created" msgid "notify-events.job-fetchable" msgstr "Job Fetchable" msgid "notify-events.job-progress" msgstr "Job Progress" msgid "notify-events.job-state-changed" msgstr "Job State Changed" msgid "notify-events.job-stopped" msgstr "Job Stopped" msgid "notify-events.none" msgstr "None" msgid "notify-events.printer-config-changed" msgstr "Printer Config Changed" msgid "notify-events.printer-finishings-changed" msgstr "Printer Finishings Changed" msgid "notify-events.printer-media-changed" msgstr "Printer Media Changed" msgid "notify-events.printer-queue-order-changed" msgstr "Printer Queue Order Changed" msgid "notify-events.printer-restarted" msgstr "Printer Restarted" msgid "notify-events.printer-shutdown" msgstr "Printer Shutdown" msgid "notify-events.printer-state-changed" msgstr "Printer State Changed" msgid "notify-events.printer-stopped" msgstr "Printer Stopped" msgid "notify-get-interval" msgstr "Notify Get Interval" msgid "notify-lease-duration" msgstr "Notify Lease Duration" msgid "notify-natural-language" msgstr "Notify Natural Language" msgid "notify-pull-method" msgstr "Notify Pull Method" msgid "notify-recipient-uri" msgstr "Notify Recipient" #, c-format msgid "notify-recipient-uri URI \"%s\" is already used." msgstr "notify-recipient-uri URI \"%s\" ã¯ã™ã§ã«ä½¿ã‚れã¦ã„ã¾ã™ã€‚" #, c-format msgid "notify-recipient-uri URI \"%s\" uses unknown scheme." msgstr "notify-recipient-uri URI \"%s\" ã«ã¯æœªçŸ¥ã®ã‚¹ã‚­ãƒ¼ãƒ ãŒä½¿ã‚れã¦ã„ã¾ã™ã€‚" msgid "notify-sequence-numbers" msgstr "Notify Sequence Numbers" msgid "notify-subscription-ids" msgstr "Notify Subscription Ids" msgid "notify-time-interval" msgstr "Notify Time Interval" msgid "notify-user-data" msgstr "Notify User Data" msgid "notify-wait" msgstr "Notify Wait" msgid "number-of-retries" msgstr "Number Of Retries" msgid "number-up" msgstr "Number-Up" msgid "object-offset" msgstr "Object Offset" msgid "object-size" msgstr "Object Size" msgid "organization-name" msgstr "Organization Name" msgid "orientation-requested" msgstr "Orientation" msgid "orientation-requested.3" msgstr "Portrait" msgid "orientation-requested.4" msgstr "Landscape" msgid "orientation-requested.5" msgstr "Reverse Landscape" msgid "orientation-requested.6" msgstr "Reverse Portrait" msgid "orientation-requested.7" msgstr "None" msgid "output-attributes" msgstr "Output Attributes" msgid "output-bin" msgstr "Output Bin" msgid "output-bin.auto" msgstr "Automatic" msgid "output-bin.bottom" msgstr "Bottom" msgid "output-bin.center" msgstr "Center" msgid "output-bin.face-down" msgstr "Face Down" msgid "output-bin.face-up" msgstr "Face Up" msgid "output-bin.large-capacity" msgstr "Large Capacity" msgid "output-bin.left" msgstr "Left" msgid "output-bin.mailbox-1" msgstr "Mailbox 1" msgid "output-bin.mailbox-10" msgstr "Mailbox 10" msgid "output-bin.mailbox-2" msgstr "Mailbox 2" msgid "output-bin.mailbox-3" msgstr "Mailbox 3" msgid "output-bin.mailbox-4" msgstr "Mailbox 4" msgid "output-bin.mailbox-5" msgstr "Mailbox 5" msgid "output-bin.mailbox-6" msgstr "Mailbox 6" msgid "output-bin.mailbox-7" msgstr "Mailbox 7" msgid "output-bin.mailbox-8" msgstr "Mailbox 8" msgid "output-bin.mailbox-9" msgstr "Mailbox 9" msgid "output-bin.middle" msgstr "Middle" msgid "output-bin.my-mailbox" msgstr "My Mailbox" msgid "output-bin.rear" msgstr "Rear" msgid "output-bin.right" msgstr "Right" msgid "output-bin.side" msgstr "Side" msgid "output-bin.stacker-1" msgstr "Stacker 1" msgid "output-bin.stacker-10" msgstr "Stacker 10" msgid "output-bin.stacker-2" msgstr "Stacker 2" msgid "output-bin.stacker-3" msgstr "Stacker 3" msgid "output-bin.stacker-4" msgstr "Stacker 4" msgid "output-bin.stacker-5" msgstr "Stacker 5" msgid "output-bin.stacker-6" msgstr "Stacker 6" msgid "output-bin.stacker-7" msgstr "Stacker 7" msgid "output-bin.stacker-8" msgstr "Stacker 8" msgid "output-bin.stacker-9" msgstr "Stacker 9" msgid "output-bin.top" msgstr "Top" msgid "output-bin.tray-1" msgstr "Tray 1" msgid "output-bin.tray-10" msgstr "Tray 10" msgid "output-bin.tray-2" msgstr "Tray 2" msgid "output-bin.tray-3" msgstr "Tray 3" msgid "output-bin.tray-4" msgstr "Tray 4" msgid "output-bin.tray-5" msgstr "Tray 5" msgid "output-bin.tray-6" msgstr "Tray 6" msgid "output-bin.tray-7" msgstr "Tray 7" msgid "output-bin.tray-8" msgstr "Tray 8" msgid "output-bin.tray-9" msgstr "Tray 9" msgid "output-compression-quality-factor" msgstr "Scanned Image Quality" msgid "page-delivery" msgstr "Page Delivery" msgid "page-delivery.reverse-order-face-down" msgstr "Reverse Order Face Down" msgid "page-delivery.reverse-order-face-up" msgstr "Reverse Order Face Up" msgid "page-delivery.same-order-face-down" msgstr "Same Order Face Down" msgid "page-delivery.same-order-face-up" msgstr "Same Order Face Up" msgid "page-delivery.system-specified" msgstr "System Specified" msgid "page-order-received" msgstr "Page Order Received" msgid "page-order-received.1-to-n-order" msgstr "1 To N Order" msgid "page-order-received.n-to-1-order" msgstr "N To 1 Order" msgid "page-ranges" msgstr "Page Ranges" msgid "pages" msgstr "Pages" msgid "pages-per-subset" msgstr "Pages Per Subset" msgid "pending" msgstr "プリンター待ã¡" msgid "platform-shape" msgstr "Platform Shape" msgid "platform-shape.ellipse" msgstr "Round" msgid "platform-shape.rectangle" msgstr "Rectangle" msgid "platform-temperature" msgstr "Platform Temperature" msgid "post-dial-string" msgstr "Post-dial String" #, c-format msgid "ppdc: Adding include directory \"%s\"." msgstr "ppdc: ディレクトリー \"%s\" を追加ã—ã¦ã„ã¾ã™ã€‚" #, c-format msgid "ppdc: Adding/updating UI text from %s." msgstr "ppdc: %s ã‹ã‚‰ UI テキストを追加ã¾ãŸã¯æ›´æ–°ã—ã¦ã„ã¾ã™ã€‚" #, c-format msgid "ppdc: Bad boolean value (%s) on line %d of %s." msgstr "ppdc: 䏿­£ãª boolean 値 (%s) ãŒã‚りã¾ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Bad font attribute: %s" msgstr "䏿­£ãªãƒ•ォント属性: %s" #, c-format msgid "ppdc: Bad resolution name \"%s\" on line %d of %s." msgstr "ppdc: 䏿­£ãª resolution å \"%s\" ãŒã‚りã¾ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Bad status keyword %s on line %d of %s." msgstr "ppdc: 䏿­£ãª status キーワード %s ãŒã‚りã¾ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Bad variable substitution ($%c) on line %d of %s." msgstr "ppdc: 䏿­£ãªæ•°å€¤ç½®æ› ($%c) ãŒã‚りã¾ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Choice found on line %d of %s with no Option." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã§ã€Option ãŒãªã„ã®ã« Choice ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚" #, c-format msgid "ppdc: Duplicate #po for locale %s on line %d of %s." msgstr "" "ppdc: locale %s ã«å¯¾ã—㦠#po ãŒäºŒé‡ã«å®šç¾©ã•れã¦ã„ã¾ã™ã€‚%d 行目ã€ãƒ•ァイルå " "%s。" #, c-format msgid "ppdc: Expected a filter definition on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„ã¦ãƒ•ィルター定義ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected a program name on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„ã¦ãƒ—ログラムåãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected boolean value on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠boolean 値ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected charset after Font on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Font ã®ã‚ã¨ã« charset ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected choice code on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠choice code ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected choice name/text on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠choice name/text ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected color order for ColorModel on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠ColorModel ã«å¯¾ã™ã‚‹ color order ãŒå¿…è¦" "ã§ã™ã€‚" #, c-format msgid "ppdc: Expected colorspace for ColorModel on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠ColorModel ã«å¯¾ã™ã‚‹ colorspace ãŒå¿…è¦ã§" "ã™ã€‚" #, c-format msgid "ppdc: Expected compression for ColorModel on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠ColorModel ã«å¯¾ã™ã‚‹ compression ãŒå¿…è¦" "ã§ã™ã€‚" #, c-format msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠UIConstraints ã«å¯¾ã™ã‚‹ constraint ãŒå¿…" "è¦ã§ã™ã€‚" #, c-format msgid "" "ppdc: Expected driver type keyword following DriverType on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠DriverType ã®ã‚ã¨ã« driver type " "keyword ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected duplex type after Duplex on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Duplex ã®ã‚ã¨ã« type ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected encoding after Font on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Font ã®ã‚ã¨ã« encoding ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected filename after #po %s on line %d of %s." msgstr "ppdc: #po %s ã®ã‚ã¨ã«ãƒ•ァイルåãŒå¿…è¦ã§ã™ (%d 行目, ファイル %s)。" #, c-format msgid "ppdc: Expected group name/text on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠group name/text ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected include filename on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠include ファイルå ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected integer on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„ã¦æ•´æ•°æŒ‡å®šãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected locale after #po on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠#po ã®ã‚ã¨ã« locale ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected name after %s on line %d of %s." msgstr "ppdc: %s ã®ã‚ã¨ã« name ãŒå¿…è¦ã§ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Expected name after FileName on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠FileName ã®ã‚ã¨ã« name ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected name after Font on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Font ã®ã‚ã¨ã« name ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected name after Manufacturer on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Manufacturer ã®ã‚ã¨ã« name ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected name after MediaSize on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠MediaSize ã®ã‚ã¨ã« name ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected name after ModelName on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠ModelName ã®ã‚ã¨ã« name ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected name after PCFileName on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠PCFileName ã®ã‚ã¨ã« name ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected name/text after %s on line %d of %s." msgstr "ppdc: %s ã®ã‚ã¨ã« name/text ãŒå¿…è¦ã§ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Expected name/text after Installable on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Installable ã®ã‚ã¨ã« name/text ãŒå¿…è¦ã§" "ã™ã€‚" #, c-format msgid "ppdc: Expected name/text after Resolution on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Resolution ã®ã‚ã¨ã« name/text ãŒå¿…è¦ã§" "ã™ã€‚" #, c-format msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠ColorModel ã«å¯¾ã™ã‚‹ name/text ãŒå¿…è¦ã§" "ã™ã€‚" #, c-format msgid "ppdc: Expected option name/text on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠option name/text ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected option section on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠option section ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected option type on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠option type ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected override field after Resolution on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Resolution ã®ã‚ã¨ã« override field ãŒå¿…" "è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected quoted string on line %d of %s." msgstr "%d 行: %s ã«ã¯å¼•用符ã§å›²ã¾ã‚ŒãŸæ–‡å­—列ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected real number on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„ã¦å®Ÿæ•°ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "" "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠ColorProfile ã«ç¶šã„㦠resolution/" "mediatype ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "" "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d " "of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠SimpleColorProfile ã«ç¶šã„㦠resolution/" "mediatype ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected selector after %s on line %d of %s." msgstr "ppdc: %s ã®ã‚ã¨ã« selector ãŒå¿…è¦ã§ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Expected status after Font on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Font ã®ã‚ã¨ã« status ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected string after Copyright on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Copyright ã®ã‚ã¨ã«æ–‡å­—列ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected string after Version on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Version ã®ã‚ã¨ã«æ–‡å­—列ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected two option names on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠2 ã¤ã®ã‚ªãƒ—ションåãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Expected value after %s on line %d of %s." msgstr "ppdc: %s ã®ã‚ã¨ã« value ãŒå¿…è¦ã§ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Expected version after Font on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Font ã®ã‚ã¨ã« version ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: Invalid #include/#po filename \"%s\"." msgstr "ppdc: 無効㪠#include/#po ファイルåã§ã™ \"%s\"。" #, c-format msgid "ppdc: Invalid cost for filter on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„ã¦ãƒ•ィルターã«å¯¾ã™ã‚‹ç„¡åŠ¹ãª cost ãŒã‚りã¾" "ã™ã€‚" #, c-format msgid "ppdc: Invalid empty MIME type for filter on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„ã¦ãƒ•ィルターã«å¯¾ã™ã‚‹ç„¡åйãªç©ºã® MIME タイプ" "ãŒã‚りã¾ã™ã€‚" #, c-format msgid "ppdc: Invalid empty program name for filter on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„ã¦ãƒ•ィルターã«å¯¾ã™ã‚‹ãƒ—ログラムåãŒç©ºã§ã‚り" "無効ã§ã™ã€‚" #, c-format msgid "ppdc: Invalid option section \"%s\" on line %d of %s." msgstr "" "ppdc: 無効㪠option section ãŒã‚りã¾ã™ \"%s\"。%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Invalid option type \"%s\" on line %d of %s." msgstr "ppdc: 無効㪠option type ãŒã‚りã¾ã™ \"%s\"。%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Loading driver information file \"%s\"." msgstr "ppdc: ドライãƒãƒ¼æƒ…報ファイル \"%s\" を読ã¿è¾¼ã‚“ã§ã„ã¾ã™ã€‚" #, c-format msgid "ppdc: Loading messages for locale \"%s\"." msgstr "ppdc: ロケール \"%s\" ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’読ã¿è¾¼ã‚“ã§ã„ã¾ã™ã€‚" #, c-format msgid "ppdc: Loading messages from \"%s\"." msgstr "ppdc: \"%s\" ã‹ã‚‰ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’読ã¿è¾¼ã‚“ã§ã„ã¾ã™ã€‚" #, c-format msgid "ppdc: Missing #endif at end of \"%s\"." msgstr "ppdc: \"%s\" ã®æœ€å¾Œã« #endif ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #, c-format msgid "ppdc: Missing #if on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠#if ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #, c-format msgid "" "ppdc: Need a msgid line before any translation strings on line %d of %s." msgstr "%d 行: %s ã®ç¿»è¨³æ–‡å­—列ã®å‰ã« msgid 行ãŒå¿…è¦ã§ã™ã€‚" #, c-format msgid "ppdc: No message catalog provided for locale %s." msgstr "ppdc: ロケール %s ã«å¯¾ã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚«ã‚¿ãƒ­ã‚°ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #, c-format msgid "ppdc: Option %s defined in two different groups on line %d of %s." msgstr "" "ppdc: オプション %s ãŒè¡Œ %dã€ãƒ•ァイル %s ã® 2 ã¤ã®ç•°ãªã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã§å®šç¾©ã•れã¦" "ã„ã¾ã™ã€‚" #, c-format msgid "ppdc: Option %s redefined with a different type on line %d of %s." msgstr "" "ppdc: オプション %s ã¯ç•°ãªã‚‹åž‹ã§å†å®šç¾©ã•れã¦ã„ã¾ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Option constraint must *name on line %d of %s." msgstr "" "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠Option constraint 㯠*name ã§æŒ‡å®šã—ãªã‘" "れã°ãªã‚Šã¾ã›ã‚“。" #, c-format msgid "ppdc: Too many nested #if's on line %d of %s." msgstr "ppdc: %d 行目ã€ãƒ•ァイルå %s ã«ãŠã„㦠#if ã®ãƒã‚¹ãƒˆãŒå¤šã™ãŽã¾ã™ã€‚" #, c-format msgid "ppdc: Unable to create PPD file \"%s\" - %s." msgstr "ppdc: PPD ファイル \"%s\" を作æˆã§ãã¾ã›ã‚“ - %s。" #, c-format msgid "ppdc: Unable to create output directory %s: %s" msgstr "ppdc: 出力ディレクトリー \"%s\" を作æˆã§ãã¾ã›ã‚“ - %s" #, c-format msgid "ppdc: Unable to create output pipes: %s" msgstr "ppdc: 出力パイプを作æˆã§ãã¾ã›ã‚“: %s" #, c-format msgid "ppdc: Unable to execute cupstestppd: %s" msgstr "ppdc: cupstestppd を実行ã§ãã¾ã›ã‚“: %s" #, c-format msgid "ppdc: Unable to find #po file %s on line %d of %s." msgstr "ppdc: #po ファイル %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Unable to find include file \"%s\" on line %d of %s." msgstr "" "ppdc: インクルードファイル %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Unable to find localization for \"%s\" - %s" msgstr "ppdc: \"%s\" ã«å¯¾ã™ã‚‹åœ°åŸŸåŒ–情報ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ - %s" #, c-format msgid "ppdc: Unable to load localization file \"%s\" - %s" msgstr "ppdc: \"%s\" ã«å¯¾ã™ã‚‹ãƒ­ãƒ¼ã‚«ãƒ©ã‚¤ã‚ºãƒ•ァイルを読ã¿è¾¼ã‚ã¾ã›ã‚“ - %s" #, c-format msgid "ppdc: Unable to open %s: %s" msgstr "ppdc: %s ã‚’é–‹ã‘ã¾ã›ã‚“: %s" #, c-format msgid "ppdc: Undefined variable (%s) on line %d of %s." msgstr "ppdc: 変数 (%s) ã¯æœªå®šç¾©ã§ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Unexpected text on line %d of %s." msgstr "%d 行: %s ã¯äºˆæœŸã›ã¬ãƒ†ã‚­ã‚¹ãƒˆã§ã™ã€‚" #, c-format msgid "ppdc: Unknown driver type %s on line %d of %s." msgstr "ppdc: %s ã¯æœªçŸ¥ã®ãƒ‰ãƒ©ã‚¤ãƒãƒ¼ã‚¿ã‚¤ãƒ—ã§ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s." msgstr "ppdc: \"%s\" ã¯æœªçŸ¥ã®ä¸¡é¢ã‚¿ã‚¤ãƒ—ã§ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Unknown media size \"%s\" on line %d of %s." msgstr "ppdc: \"%s\" ã¯æœªçŸ¥ã®ç”¨ç´™ã‚µã‚¤ã‚ºã§ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Unknown message catalog format for \"%s\"." msgstr "\"%s\" ã¯æœªçŸ¥ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚«ã‚¿ãƒ­ã‚°ã®æ›¸å¼ã§ã™ã€‚" #, c-format msgid "ppdc: Unknown token \"%s\" seen on line %d of %s." msgstr "ppdc: 未知ã®ãƒˆãƒ¼ã‚¯ãƒ³ \"%s\" ãŒã‚りã¾ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "" "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." msgstr "ppdc: 実数 \"%s\" ã«æœªçŸ¥ã®çµ‚了文字ãŒã‚りã¾ã™ã€‚%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Unterminated string starting with %c on line %d of %s." msgstr "" "ppdc: %c ã§å§‹ã¾ã‚‹æ–‡å­—ã«å¯¾ã—ã¦çµ‚端文字ãŒã‚りã¾ã›ã‚“。%d 行目ã€ãƒ•ァイルå %s。" #, c-format msgid "ppdc: Warning - overlapping filename \"%s\"." msgstr "ppdc: 警告 - ファイルå \"%s\" ãŒé‡è¤‡ã—ã¦ã„ã¾ã™ã€‚" #, c-format msgid "ppdc: Writing %s." msgstr "ppdc: %s を書ã込んã§ã„ã¾ã™ã€‚" #, c-format msgid "ppdc: Writing PPD files to directory \"%s\"." msgstr "ppdc: ディレクトリー \"%s\" ã« PPD ファイルを書ã込んã§ã„ã¾ã™ã€‚" #, c-format msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s." msgstr "ppdmerge: 䏿­£ãª LanguageVersion \"%s\" ㌠%s ã«ã‚りã¾ã™ã€‚" #, c-format msgid "ppdmerge: Ignoring PPD file %s." msgstr "ppdmerge: PPD ファイル %s を無視ã—ã¾ã™ã€‚" #, c-format msgid "ppdmerge: Unable to backup %s to %s - %s" msgstr "ppdmerge: %s ã‚’ %s ã«ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã§ãã¾ã›ã‚“ - %s" msgid "pre-dial-string" msgstr "Pre-dial String" msgid "presentation-direction-number-up" msgstr "Number-Up Layout" msgid "presentation-direction-number-up.tobottom-toleft" msgstr "Top-Bottom, Right-Left" msgid "presentation-direction-number-up.tobottom-toright" msgstr "Top-Bottom, Left-Right" msgid "presentation-direction-number-up.toleft-tobottom" msgstr "Right-Left, Top-Bottom" msgid "presentation-direction-number-up.toleft-totop" msgstr "Right-Left, Bottom-Top" msgid "presentation-direction-number-up.toright-tobottom" msgstr "Left-Right, Top-Bottom" msgid "presentation-direction-number-up.toright-totop" msgstr "Left-Right, Bottom-Top" msgid "presentation-direction-number-up.totop-toleft" msgstr "Bottom-Top, Right-Left" msgid "presentation-direction-number-up.totop-toright" msgstr "Bottom-Top, Left-Right" msgid "print-accuracy" msgstr "Print Accuracy" msgid "print-base" msgstr "Print Base" msgid "print-base.brim" msgstr "Brim" msgid "print-base.none" msgstr "None" msgid "print-base.raft" msgstr "Raft" msgid "print-base.skirt" msgstr "Skirt" msgid "print-base.standard" msgstr "Standard" msgid "print-color-mode" msgstr "Print Color Mode" msgid "print-color-mode.auto" msgstr "Automatic" msgid "print-color-mode.bi-level" msgstr "Bi-Level" msgid "print-color-mode.color" msgstr "Color" msgid "print-color-mode.highlight" msgstr "Highlight" msgid "print-color-mode.monochrome" msgstr "Monochrome" msgid "print-color-mode.process-bi-level" msgstr "Process Bi-Level" msgid "print-color-mode.process-monochrome" msgstr "Process Monochrome" msgid "print-content-optimize" msgstr "Print Optimization" msgid "print-content-optimize.auto" msgstr "Automatic" msgid "print-content-optimize.graphic" msgstr "Graphics" msgid "print-content-optimize.photo" msgstr "Photo" msgid "print-content-optimize.text" msgstr "Text" msgid "print-content-optimize.text-and-graphic" msgstr "Text And Graphics" msgid "print-objects" msgstr "Print Objects" msgid "print-quality" msgstr "Print Quality" msgid "print-quality.3" msgstr "Draft" msgid "print-quality.4" msgstr "Normal" msgid "print-quality.5" msgstr "High" msgid "print-rendering-intent" msgstr "Print Rendering Intent" msgid "print-rendering-intent.absolute" msgstr "Absolute" msgid "print-rendering-intent.auto" msgstr "Automatic" msgid "print-rendering-intent.perceptual" msgstr "Perceptual" msgid "print-rendering-intent.relative" msgstr "Relative" msgid "print-rendering-intent.relative-bpc" msgstr "Relative w/Black Point Compensation" msgid "print-rendering-intent.saturation" msgstr "Saturation" msgid "print-scaling" msgstr "Print Scaling" msgid "print-scaling.auto" msgstr "Automatic" msgid "print-scaling.auto-fit" msgstr "Auto Fit" msgid "print-scaling.fill" msgstr "Fill" msgid "print-scaling.fit" msgstr "Fit" msgid "print-scaling.none" msgstr "None" msgid "print-supports" msgstr "Print Supports" msgid "print-supports.material" msgstr "Material" msgid "print-supports.none" msgstr "None" msgid "print-supports.standard" msgstr "Standard" #, c-format msgid "printer %s disabled since %s -" msgstr "プリンター %s 㯠%s ã‹ã‚‰ç„¡åйã§ã™ -" #, c-format msgid "printer %s is idle. enabled since %s" msgstr "プリンター %s ã¯å¾…機中ã§ã™ã€‚%s ä»¥æ¥æœ‰åйã§ã™" #, c-format msgid "printer %s now printing %s-%d. enabled since %s" msgstr "プリンター %s 㯠%s-%d ã‚’å°åˆ·ã—ã¦ã„ã¾ã™ã€‚%s ä»¥æ¥æœ‰åйã§ã™" #, c-format msgid "printer %s/%s disabled since %s -" msgstr "プリンター %s/%s 㯠%s ã‹ã‚‰ç„¡åйã§ã™ -" #, c-format msgid "printer %s/%s is idle. enabled since %s" msgstr "プリンター %s/%s ã¯å¾…機中ã§ã™ã€‚%s ä»¥æ¥æœ‰åйã§ã™" #, c-format msgid "printer %s/%s now printing %s-%d. enabled since %s" msgstr "プリンター %s/%s ã¯ç¾åœ¨ %s-%d ã‚’å°åˆ·ä¸­ã§ã™ã€‚%s ä»¥æ¥æœ‰åйã§ã™" msgid "printer-message-from-operator" msgstr "Printer Message From Operator" msgid "printer-resolution" msgstr "Printer Resolution" msgid "printer-state" msgstr "Printer State" msgid "printer-state-reasons" msgstr "Detailed Printer State" msgid "printer-state-reasons.alert-removal-of-binary-change-entry" msgstr "Alert Removal Of Binary Change Entry" msgid "printer-state-reasons.bander-added" msgstr "Bander Added" msgid "printer-state-reasons.bander-almost-empty" msgstr "Bander Almost Empty" msgid "printer-state-reasons.bander-almost-full" msgstr "Bander Almost Full" msgid "printer-state-reasons.bander-at-limit" msgstr "Bander At Limit" msgid "printer-state-reasons.bander-closed" msgstr "Bander Closed" msgid "printer-state-reasons.bander-configuration-change" msgstr "Bander Configuration Change" msgid "printer-state-reasons.bander-cover-closed" msgstr "Bander Cover Closed" msgid "printer-state-reasons.bander-cover-open" msgstr "Bander Cover Open" msgid "printer-state-reasons.bander-empty" msgstr "Bander Empty" msgid "printer-state-reasons.bander-full" msgstr "Bander Full" msgid "printer-state-reasons.bander-interlock-closed" msgstr "Bander Interlock Closed" msgid "printer-state-reasons.bander-interlock-open" msgstr "Bander Interlock Open" msgid "printer-state-reasons.bander-jam" msgstr "Bander Jam" msgid "printer-state-reasons.bander-life-almost-over" msgstr "Bander Life Almost Over" msgid "printer-state-reasons.bander-life-over" msgstr "Bander Life Over" msgid "printer-state-reasons.bander-memory-exhausted" msgstr "Bander Memory Exhausted" msgid "printer-state-reasons.bander-missing" msgstr "Bander Missing" msgid "printer-state-reasons.bander-motor-failure" msgstr "Bander Motor Failure" msgid "printer-state-reasons.bander-near-limit" msgstr "Bander Near Limit" msgid "printer-state-reasons.bander-offline" msgstr "Bander Offline" msgid "printer-state-reasons.bander-opened" msgstr "Bander Opened" msgid "printer-state-reasons.bander-over-temperature" msgstr "Bander Over Temperature" msgid "printer-state-reasons.bander-power-saver" msgstr "Bander Power Saver" msgid "printer-state-reasons.bander-recoverable-failure" msgstr "Bander Recoverable Failure" msgid "printer-state-reasons.bander-recoverable-storage" msgstr "Bander Recoverable Storage" msgid "printer-state-reasons.bander-removed" msgstr "Bander Removed" msgid "printer-state-reasons.bander-resource-added" msgstr "Bander Resource Added" msgid "printer-state-reasons.bander-resource-removed" msgstr "Bander Resource Removed" msgid "printer-state-reasons.bander-thermistor-failure" msgstr "Bander Thermistor Failure" msgid "printer-state-reasons.bander-timing-failure" msgstr "Bander Timing Failure" msgid "printer-state-reasons.bander-turned-off" msgstr "Bander Turned Off" msgid "printer-state-reasons.bander-turned-on" msgstr "Bander Turned On" msgid "printer-state-reasons.bander-under-temperature" msgstr "Bander Under Temperature" msgid "printer-state-reasons.bander-unrecoverable-failure" msgstr "Bander Unrecoverable Failure" msgid "printer-state-reasons.bander-unrecoverable-storage-error" msgstr "Bander Unrecoverable Storage Error" msgid "printer-state-reasons.bander-warming-up" msgstr "Bander Warming Up" msgid "printer-state-reasons.binder-added" msgstr "Binder Added" msgid "printer-state-reasons.binder-almost-empty" msgstr "Binder Almost Empty" msgid "printer-state-reasons.binder-almost-full" msgstr "Binder Almost Full" msgid "printer-state-reasons.binder-at-limit" msgstr "Binder At Limit" msgid "printer-state-reasons.binder-closed" msgstr "Binder Closed" msgid "printer-state-reasons.binder-configuration-change" msgstr "Binder Configuration Change" msgid "printer-state-reasons.binder-cover-closed" msgstr "Binder Cover Closed" msgid "printer-state-reasons.binder-cover-open" msgstr "Binder Cover Open" msgid "printer-state-reasons.binder-empty" msgstr "Binder Empty" msgid "printer-state-reasons.binder-full" msgstr "Binder Full" msgid "printer-state-reasons.binder-interlock-closed" msgstr "Binder Interlock Closed" msgid "printer-state-reasons.binder-interlock-open" msgstr "Binder Interlock Open" msgid "printer-state-reasons.binder-jam" msgstr "Binder Jam" msgid "printer-state-reasons.binder-life-almost-over" msgstr "Binder Life Almost Over" msgid "printer-state-reasons.binder-life-over" msgstr "Binder Life Over" msgid "printer-state-reasons.binder-memory-exhausted" msgstr "Binder Memory Exhausted" msgid "printer-state-reasons.binder-missing" msgstr "Binder Missing" msgid "printer-state-reasons.binder-motor-failure" msgstr "Binder Motor Failure" msgid "printer-state-reasons.binder-near-limit" msgstr "Binder Near Limit" msgid "printer-state-reasons.binder-offline" msgstr "Binder Offline" msgid "printer-state-reasons.binder-opened" msgstr "Binder Opened" msgid "printer-state-reasons.binder-over-temperature" msgstr "Binder Over Temperature" msgid "printer-state-reasons.binder-power-saver" msgstr "Binder Power Saver" msgid "printer-state-reasons.binder-recoverable-failure" msgstr "Binder Recoverable Failure" msgid "printer-state-reasons.binder-recoverable-storage" msgstr "Binder Recoverable Storage" msgid "printer-state-reasons.binder-removed" msgstr "Binder Removed" msgid "printer-state-reasons.binder-resource-added" msgstr "Binder Resource Added" msgid "printer-state-reasons.binder-resource-removed" msgstr "Binder Resource Removed" msgid "printer-state-reasons.binder-thermistor-failure" msgstr "Binder Thermistor Failure" msgid "printer-state-reasons.binder-timing-failure" msgstr "Binder Timing Failure" msgid "printer-state-reasons.binder-turned-off" msgstr "Binder Turned Off" msgid "printer-state-reasons.binder-turned-on" msgstr "Binder Turned On" msgid "printer-state-reasons.binder-under-temperature" msgstr "Binder Under Temperature" msgid "printer-state-reasons.binder-unrecoverable-failure" msgstr "Binder Unrecoverable Failure" msgid "printer-state-reasons.binder-unrecoverable-storage-error" msgstr "Binder Unrecoverable Storage Error" msgid "printer-state-reasons.binder-warming-up" msgstr "Binder Warming Up" msgid "printer-state-reasons.camera-failure" msgstr "Camera Failure" msgid "printer-state-reasons.chamber-cooling" msgstr "Chamber Cooling" msgid "printer-state-reasons.chamber-heating" msgstr "Chamber Heating" msgid "printer-state-reasons.chamber-temperature-high" msgstr "Chamber Temperature High" msgid "printer-state-reasons.chamber-temperature-low" msgstr "Chamber Temperature Low" msgid "printer-state-reasons.cleaner-life-almost-over" msgstr "Cleaner Life Almost Over" msgid "printer-state-reasons.cleaner-life-over" msgstr "Cleaner Life Over" msgid "printer-state-reasons.configuration-change" msgstr "Configuration Change" msgid "printer-state-reasons.connecting-to-device" msgstr "Connecting To Device" msgid "printer-state-reasons.cover-open" msgstr "Cover Open" msgid "printer-state-reasons.deactivated" msgstr "Deactivated" msgid "printer-state-reasons.developer-empty" msgstr "Developer Empty" msgid "printer-state-reasons.developer-low" msgstr "Developer Low" msgid "printer-state-reasons.die-cutter-added" msgstr "Die Cutter Added" msgid "printer-state-reasons.die-cutter-almost-empty" msgstr "Die Cutter Almost Empty" msgid "printer-state-reasons.die-cutter-almost-full" msgstr "Die Cutter Almost Full" msgid "printer-state-reasons.die-cutter-at-limit" msgstr "Die Cutter At Limit" msgid "printer-state-reasons.die-cutter-closed" msgstr "Die Cutter Closed" msgid "printer-state-reasons.die-cutter-configuration-change" msgstr "Die Cutter Configuration Change" msgid "printer-state-reasons.die-cutter-cover-closed" msgstr "Die Cutter Cover Closed" msgid "printer-state-reasons.die-cutter-cover-open" msgstr "Die Cutter Cover Open" msgid "printer-state-reasons.die-cutter-empty" msgstr "Die Cutter Empty" msgid "printer-state-reasons.die-cutter-full" msgstr "Die Cutter Full" msgid "printer-state-reasons.die-cutter-interlock-closed" msgstr "Die Cutter Interlock Closed" msgid "printer-state-reasons.die-cutter-interlock-open" msgstr "Die Cutter Interlock Open" msgid "printer-state-reasons.die-cutter-jam" msgstr "Die Cutter Jam" msgid "printer-state-reasons.die-cutter-life-almost-over" msgstr "Die Cutter Life Almost Over" msgid "printer-state-reasons.die-cutter-life-over" msgstr "Die Cutter Life Over" msgid "printer-state-reasons.die-cutter-memory-exhausted" msgstr "Die Cutter Memory Exhausted" msgid "printer-state-reasons.die-cutter-missing" msgstr "Die Cutter Missing" msgid "printer-state-reasons.die-cutter-motor-failure" msgstr "Die Cutter Motor Failure" msgid "printer-state-reasons.die-cutter-near-limit" msgstr "Die Cutter Near Limit" msgid "printer-state-reasons.die-cutter-offline" msgstr "Die Cutter Offline" msgid "printer-state-reasons.die-cutter-opened" msgstr "Die Cutter Opened" msgid "printer-state-reasons.die-cutter-over-temperature" msgstr "Die Cutter Over Temperature" msgid "printer-state-reasons.die-cutter-power-saver" msgstr "Die Cutter Power Saver" msgid "printer-state-reasons.die-cutter-recoverable-failure" msgstr "Die Cutter Recoverable Failure" msgid "printer-state-reasons.die-cutter-recoverable-storage" msgstr "Die Cutter Recoverable Storage" msgid "printer-state-reasons.die-cutter-removed" msgstr "Die Cutter Removed" msgid "printer-state-reasons.die-cutter-resource-added" msgstr "Die Cutter Resource Added" msgid "printer-state-reasons.die-cutter-resource-removed" msgstr "Die Cutter Resource Removed" msgid "printer-state-reasons.die-cutter-thermistor-failure" msgstr "Die Cutter Thermistor Failure" msgid "printer-state-reasons.die-cutter-timing-failure" msgstr "Die Cutter Timing Failure" msgid "printer-state-reasons.die-cutter-turned-off" msgstr "Die Cutter Turned Off" msgid "printer-state-reasons.die-cutter-turned-on" msgstr "Die Cutter Turned On" msgid "printer-state-reasons.die-cutter-under-temperature" msgstr "Die Cutter Under Temperature" msgid "printer-state-reasons.die-cutter-unrecoverable-failure" msgstr "Die Cutter Unrecoverable Failure" msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error" msgstr "Die Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.die-cutter-warming-up" msgstr "Die Cutter Warming Up" msgid "printer-state-reasons.door-open" msgstr "Door Open" msgid "printer-state-reasons.extruder-cooling" msgstr "Extruder Cooling" msgid "printer-state-reasons.extruder-failure" msgstr "Extruder Failure" msgid "printer-state-reasons.extruder-heating" msgstr "Extruder Heating" msgid "printer-state-reasons.extruder-jam" msgstr "Extruder Jam" msgid "printer-state-reasons.extruder-temperature-high" msgstr "Extruder Temperature High" msgid "printer-state-reasons.extruder-temperature-low" msgstr "Extruder Temperature Low" msgid "printer-state-reasons.fan-failure" msgstr "Fan Failure" msgid "printer-state-reasons.folder-added" msgstr "Folder Added" msgid "printer-state-reasons.folder-almost-empty" msgstr "Folder Almost Empty" msgid "printer-state-reasons.folder-almost-full" msgstr "Folder Almost Full" msgid "printer-state-reasons.folder-at-limit" msgstr "Folder At Limit" msgid "printer-state-reasons.folder-closed" msgstr "Folder Closed" msgid "printer-state-reasons.folder-configuration-change" msgstr "Folder Configuration Change" msgid "printer-state-reasons.folder-cover-closed" msgstr "Folder Cover Closed" msgid "printer-state-reasons.folder-cover-open" msgstr "Folder Cover Open" msgid "printer-state-reasons.folder-empty" msgstr "Folder Empty" msgid "printer-state-reasons.folder-full" msgstr "Folder Full" msgid "printer-state-reasons.folder-interlock-closed" msgstr "Folder Interlock Closed" msgid "printer-state-reasons.folder-interlock-open" msgstr "Folder Interlock Open" msgid "printer-state-reasons.folder-jam" msgstr "Folder Jam" msgid "printer-state-reasons.folder-life-almost-over" msgstr "Folder Life Almost Over" msgid "printer-state-reasons.folder-life-over" msgstr "Folder Life Over" msgid "printer-state-reasons.folder-memory-exhausted" msgstr "Folder Memory Exhausted" msgid "printer-state-reasons.folder-missing" msgstr "Folder Missing" msgid "printer-state-reasons.folder-motor-failure" msgstr "Folder Motor Failure" msgid "printer-state-reasons.folder-near-limit" msgstr "Folder Near Limit" msgid "printer-state-reasons.folder-offline" msgstr "Folder Offline" msgid "printer-state-reasons.folder-opened" msgstr "Folder Opened" msgid "printer-state-reasons.folder-over-temperature" msgstr "Folder Over Temperature" msgid "printer-state-reasons.folder-power-saver" msgstr "Folder Power Saver" msgid "printer-state-reasons.folder-recoverable-failure" msgstr "Folder Recoverable Failure" msgid "printer-state-reasons.folder-recoverable-storage" msgstr "Folder Recoverable Storage" msgid "printer-state-reasons.folder-removed" msgstr "Folder Removed" msgid "printer-state-reasons.folder-resource-added" msgstr "Folder Resource Added" msgid "printer-state-reasons.folder-resource-removed" msgstr "Folder Resource Removed" msgid "printer-state-reasons.folder-thermistor-failure" msgstr "Folder Thermistor Failure" msgid "printer-state-reasons.folder-timing-failure" msgstr "Folder Timing Failure" msgid "printer-state-reasons.folder-turned-off" msgstr "Folder Turned Off" msgid "printer-state-reasons.folder-turned-on" msgstr "Folder Turned On" msgid "printer-state-reasons.folder-under-temperature" msgstr "Folder Under Temperature" msgid "printer-state-reasons.folder-unrecoverable-failure" msgstr "Folder Unrecoverable Failure" msgid "printer-state-reasons.folder-unrecoverable-storage-error" msgstr "Folder Unrecoverable Storage Error" msgid "printer-state-reasons.folder-warming-up" msgstr "Folder Warming Up" msgid "printer-state-reasons.fuser-over-temp" msgstr "Fuser Over Temp" msgid "printer-state-reasons.fuser-under-temp" msgstr "Fuser Under Temp" msgid "printer-state-reasons.hold-new-jobs" msgstr "Hold New Jobs" msgid "printer-state-reasons.identify-printer-requested" msgstr "Identify Printer" msgid "printer-state-reasons.imprinter-added" msgstr "Imprinter Added" msgid "printer-state-reasons.imprinter-almost-empty" msgstr "Imprinter Almost Empty" msgid "printer-state-reasons.imprinter-almost-full" msgstr "Imprinter Almost Full" msgid "printer-state-reasons.imprinter-at-limit" msgstr "Imprinter At Limit" msgid "printer-state-reasons.imprinter-closed" msgstr "Imprinter Closed" msgid "printer-state-reasons.imprinter-configuration-change" msgstr "Imprinter Configuration Change" msgid "printer-state-reasons.imprinter-cover-closed" msgstr "Imprinter Cover Closed" msgid "printer-state-reasons.imprinter-cover-open" msgstr "Imprinter Cover Open" msgid "printer-state-reasons.imprinter-empty" msgstr "Imprinter Empty" msgid "printer-state-reasons.imprinter-full" msgstr "Imprinter Full" msgid "printer-state-reasons.imprinter-interlock-closed" msgstr "Imprinter Interlock Closed" msgid "printer-state-reasons.imprinter-interlock-open" msgstr "Imprinter Interlock Open" msgid "printer-state-reasons.imprinter-jam" msgstr "Imprinter Jam" msgid "printer-state-reasons.imprinter-life-almost-over" msgstr "Imprinter Life Almost Over" msgid "printer-state-reasons.imprinter-life-over" msgstr "Imprinter Life Over" msgid "printer-state-reasons.imprinter-memory-exhausted" msgstr "Imprinter Memory Exhausted" msgid "printer-state-reasons.imprinter-missing" msgstr "Imprinter Missing" msgid "printer-state-reasons.imprinter-motor-failure" msgstr "Imprinter Motor Failure" msgid "printer-state-reasons.imprinter-near-limit" msgstr "Imprinter Near Limit" msgid "printer-state-reasons.imprinter-offline" msgstr "Imprinter Offline" msgid "printer-state-reasons.imprinter-opened" msgstr "Imprinter Opened" msgid "printer-state-reasons.imprinter-over-temperature" msgstr "Imprinter Over Temperature" msgid "printer-state-reasons.imprinter-power-saver" msgstr "Imprinter Power Saver" msgid "printer-state-reasons.imprinter-recoverable-failure" msgstr "Imprinter Recoverable Failure" msgid "printer-state-reasons.imprinter-recoverable-storage" msgstr "Imprinter Recoverable Storage" msgid "printer-state-reasons.imprinter-removed" msgstr "Imprinter Removed" msgid "printer-state-reasons.imprinter-resource-added" msgstr "Imprinter Resource Added" msgid "printer-state-reasons.imprinter-resource-removed" msgstr "Imprinter Resource Removed" msgid "printer-state-reasons.imprinter-thermistor-failure" msgstr "Imprinter Thermistor Failure" msgid "printer-state-reasons.imprinter-timing-failure" msgstr "Imprinter Timing Failure" msgid "printer-state-reasons.imprinter-turned-off" msgstr "Imprinter Turned Off" msgid "printer-state-reasons.imprinter-turned-on" msgstr "Imprinter Turned On" msgid "printer-state-reasons.imprinter-under-temperature" msgstr "Imprinter Under Temperature" msgid "printer-state-reasons.imprinter-unrecoverable-failure" msgstr "Imprinter Unrecoverable Failure" msgid "printer-state-reasons.imprinter-unrecoverable-storage-error" msgstr "Imprinter Unrecoverable Storage Error" msgid "printer-state-reasons.imprinter-warming-up" msgstr "Imprinter Warming Up" msgid "printer-state-reasons.input-cannot-feed-size-selected" msgstr "Input Cannot Feed Size Selected" msgid "printer-state-reasons.input-manual-input-request" msgstr "Input Manual Input Request" msgid "printer-state-reasons.input-media-color-change" msgstr "Input Media Color Change" msgid "printer-state-reasons.input-media-form-parts-change" msgstr "Input Media Form Parts Change" msgid "printer-state-reasons.input-media-size-change" msgstr "Input Media Size Change" msgid "printer-state-reasons.input-media-type-change" msgstr "Input Media Type Change" msgid "printer-state-reasons.input-media-weight-change" msgstr "Input Media Weight Change" msgid "printer-state-reasons.input-tray-elevation-failure" msgstr "Input Tray Elevation Failure" msgid "printer-state-reasons.input-tray-missing" msgstr "Input Tray Missing" msgid "printer-state-reasons.input-tray-position-failure" msgstr "Input Tray Position Failure" msgid "printer-state-reasons.inserter-added" msgstr "Inserter Added" msgid "printer-state-reasons.inserter-almost-empty" msgstr "Inserter Almost Empty" msgid "printer-state-reasons.inserter-almost-full" msgstr "Inserter Almost Full" msgid "printer-state-reasons.inserter-at-limit" msgstr "Inserter At Limit" msgid "printer-state-reasons.inserter-closed" msgstr "Inserter Closed" msgid "printer-state-reasons.inserter-configuration-change" msgstr "Inserter Configuration Change" msgid "printer-state-reasons.inserter-cover-closed" msgstr "Inserter Cover Closed" msgid "printer-state-reasons.inserter-cover-open" msgstr "Inserter Cover Open" msgid "printer-state-reasons.inserter-empty" msgstr "Inserter Empty" msgid "printer-state-reasons.inserter-full" msgstr "Inserter Full" msgid "printer-state-reasons.inserter-interlock-closed" msgstr "Inserter Interlock Closed" msgid "printer-state-reasons.inserter-interlock-open" msgstr "Inserter Interlock Open" msgid "printer-state-reasons.inserter-jam" msgstr "Inserter Jam" msgid "printer-state-reasons.inserter-life-almost-over" msgstr "Inserter Life Almost Over" msgid "printer-state-reasons.inserter-life-over" msgstr "Inserter Life Over" msgid "printer-state-reasons.inserter-memory-exhausted" msgstr "Inserter Memory Exhausted" msgid "printer-state-reasons.inserter-missing" msgstr "Inserter Missing" msgid "printer-state-reasons.inserter-motor-failure" msgstr "Inserter Motor Failure" msgid "printer-state-reasons.inserter-near-limit" msgstr "Inserter Near Limit" msgid "printer-state-reasons.inserter-offline" msgstr "Inserter Offline" msgid "printer-state-reasons.inserter-opened" msgstr "Inserter Opened" msgid "printer-state-reasons.inserter-over-temperature" msgstr "Inserter Over Temperature" msgid "printer-state-reasons.inserter-power-saver" msgstr "Inserter Power Saver" msgid "printer-state-reasons.inserter-recoverable-failure" msgstr "Inserter Recoverable Failure" msgid "printer-state-reasons.inserter-recoverable-storage" msgstr "Inserter Recoverable Storage" msgid "printer-state-reasons.inserter-removed" msgstr "Inserter Removed" msgid "printer-state-reasons.inserter-resource-added" msgstr "Inserter Resource Added" msgid "printer-state-reasons.inserter-resource-removed" msgstr "Inserter Resource Removed" msgid "printer-state-reasons.inserter-thermistor-failure" msgstr "Inserter Thermistor Failure" msgid "printer-state-reasons.inserter-timing-failure" msgstr "Inserter Timing Failure" msgid "printer-state-reasons.inserter-turned-off" msgstr "Inserter Turned Off" msgid "printer-state-reasons.inserter-turned-on" msgstr "Inserter Turned On" msgid "printer-state-reasons.inserter-under-temperature" msgstr "Inserter Under Temperature" msgid "printer-state-reasons.inserter-unrecoverable-failure" msgstr "Inserter Unrecoverable Failure" msgid "printer-state-reasons.inserter-unrecoverable-storage-error" msgstr "Inserter Unrecoverable Storage Error" msgid "printer-state-reasons.inserter-warming-up" msgstr "Inserter Warming Up" msgid "printer-state-reasons.interlock-closed" msgstr "Interlock Closed" msgid "printer-state-reasons.interlock-open" msgstr "Interlock Open" msgid "printer-state-reasons.interpreter-cartridge-added" msgstr "Interpreter Cartridge Added" msgid "printer-state-reasons.interpreter-cartridge-deleted" msgstr "Interpreter Cartridge Deleted" msgid "printer-state-reasons.interpreter-complex-page-encountered" msgstr "Interpreter Complex Page Encountered" msgid "printer-state-reasons.interpreter-memory-decrease" msgstr "Interpreter Memory Decrease" msgid "printer-state-reasons.interpreter-memory-increase" msgstr "Interpreter Memory Increase" msgid "printer-state-reasons.interpreter-resource-added" msgstr "Interpreter Resource Added" msgid "printer-state-reasons.interpreter-resource-deleted" msgstr "Interpreter Resource Deleted" msgid "printer-state-reasons.interpreter-resource-unavailable" msgstr "Interpreter Resource Unavailable" msgid "printer-state-reasons.lamp-at-eol" msgstr "Lamp At Eol" msgid "printer-state-reasons.lamp-failure" msgstr "Lamp Failure" msgid "printer-state-reasons.lamp-near-eol" msgstr "Lamp Near Eol" msgid "printer-state-reasons.laser-at-eol" msgstr "Laser At Eol" msgid "printer-state-reasons.laser-failure" msgstr "Laser Failure" msgid "printer-state-reasons.laser-near-eol" msgstr "Laser Near Eol" msgid "printer-state-reasons.make-envelope-added" msgstr "Make Envelope Added" msgid "printer-state-reasons.make-envelope-almost-empty" msgstr "Make Envelope Almost Empty" msgid "printer-state-reasons.make-envelope-almost-full" msgstr "Make Envelope Almost Full" msgid "printer-state-reasons.make-envelope-at-limit" msgstr "Make Envelope At Limit" msgid "printer-state-reasons.make-envelope-closed" msgstr "Make Envelope Closed" msgid "printer-state-reasons.make-envelope-configuration-change" msgstr "Make Envelope Configuration Change" msgid "printer-state-reasons.make-envelope-cover-closed" msgstr "Make Envelope Cover Closed" msgid "printer-state-reasons.make-envelope-cover-open" msgstr "Make Envelope Cover Open" msgid "printer-state-reasons.make-envelope-empty" msgstr "Make Envelope Empty" msgid "printer-state-reasons.make-envelope-full" msgstr "Make Envelope Full" msgid "printer-state-reasons.make-envelope-interlock-closed" msgstr "Make Envelope Interlock Closed" msgid "printer-state-reasons.make-envelope-interlock-open" msgstr "Make Envelope Interlock Open" msgid "printer-state-reasons.make-envelope-jam" msgstr "Make Envelope Jam" msgid "printer-state-reasons.make-envelope-life-almost-over" msgstr "Make Envelope Life Almost Over" msgid "printer-state-reasons.make-envelope-life-over" msgstr "Make Envelope Life Over" msgid "printer-state-reasons.make-envelope-memory-exhausted" msgstr "Make Envelope Memory Exhausted" msgid "printer-state-reasons.make-envelope-missing" msgstr "Make Envelope Missing" msgid "printer-state-reasons.make-envelope-motor-failure" msgstr "Make Envelope Motor Failure" msgid "printer-state-reasons.make-envelope-near-limit" msgstr "Make Envelope Near Limit" msgid "printer-state-reasons.make-envelope-offline" msgstr "Make Envelope Offline" msgid "printer-state-reasons.make-envelope-opened" msgstr "Make Envelope Opened" msgid "printer-state-reasons.make-envelope-over-temperature" msgstr "Make Envelope Over Temperature" msgid "printer-state-reasons.make-envelope-power-saver" msgstr "Make Envelope Power Saver" msgid "printer-state-reasons.make-envelope-recoverable-failure" msgstr "Make Envelope Recoverable Failure" msgid "printer-state-reasons.make-envelope-recoverable-storage" msgstr "Make Envelope Recoverable Storage" msgid "printer-state-reasons.make-envelope-removed" msgstr "Make Envelope Removed" msgid "printer-state-reasons.make-envelope-resource-added" msgstr "Make Envelope Resource Added" msgid "printer-state-reasons.make-envelope-resource-removed" msgstr "Make Envelope Resource Removed" msgid "printer-state-reasons.make-envelope-thermistor-failure" msgstr "Make Envelope Thermistor Failure" msgid "printer-state-reasons.make-envelope-timing-failure" msgstr "Make Envelope Timing Failure" msgid "printer-state-reasons.make-envelope-turned-off" msgstr "Make Envelope Turned Off" msgid "printer-state-reasons.make-envelope-turned-on" msgstr "Make Envelope Turned On" msgid "printer-state-reasons.make-envelope-under-temperature" msgstr "Make Envelope Under Temperature" msgid "printer-state-reasons.make-envelope-unrecoverable-failure" msgstr "Make Envelope Unrecoverable Failure" msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error" msgstr "Make Envelope Unrecoverable Storage Error" msgid "printer-state-reasons.make-envelope-warming-up" msgstr "Make Envelope Warming Up" msgid "printer-state-reasons.marker-adjusting-print-quality" msgstr "Marker Adjusting Print Quality" msgid "printer-state-reasons.marker-developer-almost-empty" msgstr "Marker Developer Almost Empty" msgid "printer-state-reasons.marker-developer-empty" msgstr "Marker Developer Empty" msgid "printer-state-reasons.marker-fuser-thermistor-failure" msgstr "Marker Fuser Thermistor Failure" msgid "printer-state-reasons.marker-fuser-timing-failure" msgstr "Marker Fuser Timing Failure" msgid "printer-state-reasons.marker-ink-almost-empty" msgstr "Marker Ink Almost Empty" msgid "printer-state-reasons.marker-ink-empty" msgstr "Marker Ink Empty" msgid "printer-state-reasons.marker-print-ribbon-almost-empty" msgstr "Marker Print Ribbon Almost Empty" msgid "printer-state-reasons.marker-print-ribbon-empty" msgstr "Marker Print Ribbon Empty" msgid "printer-state-reasons.marker-supply-empty" msgstr "Marker Supply Empty" msgid "printer-state-reasons.marker-supply-low" msgstr "Marker Supply Low" msgid "printer-state-reasons.marker-toner-cartridge-missing" msgstr "Marker Toner Cartridge Missing" msgid "printer-state-reasons.marker-waste-almost-full" msgstr "Marker Waste Almost Full" msgid "printer-state-reasons.marker-waste-full" msgstr "Marker Waste Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full" msgstr "Marker Waste Ink Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-full" msgstr "Marker Waste Ink Receptacle Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full" msgstr "Marker Waste Toner Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-full" msgstr "Marker Waste Toner Receptacle Full" msgid "printer-state-reasons.material-empty" msgstr "Material Empty" msgid "printer-state-reasons.material-low" msgstr "Material Low" msgid "printer-state-reasons.material-needed" msgstr "Material Needed" msgid "printer-state-reasons.media-empty" msgstr "Media Empty" msgid "printer-state-reasons.media-jam" msgstr "Media Jam" msgid "printer-state-reasons.media-low" msgstr "Media Low" msgid "printer-state-reasons.media-needed" msgstr "Media Needed" msgid "printer-state-reasons.media-path-cannot-duplex-media-selected" msgstr "Media Path Cannot Duplex Media Selected" msgid "printer-state-reasons.media-path-media-tray-almost-full" msgstr "Media Path Media Tray Almost Full" msgid "printer-state-reasons.media-path-media-tray-full" msgstr "Media Path Media Tray Full" msgid "printer-state-reasons.media-path-media-tray-missing" msgstr "Media Path Media Tray Missing" msgid "printer-state-reasons.motor-failure" msgstr "Motor Failure" msgid "printer-state-reasons.moving-to-paused" msgstr "Moving To Paused" msgid "printer-state-reasons.none" msgstr "None" msgid "printer-state-reasons.opc-life-over" msgstr "Opc Life Over" msgid "printer-state-reasons.opc-near-eol" msgstr "Opc Near Eol" msgid "printer-state-reasons.other" msgstr "Other" msgid "printer-state-reasons.output-area-almost-full" msgstr "Output Area Almost Full" msgid "printer-state-reasons.output-area-full" msgstr "Output Area Full" msgid "printer-state-reasons.output-mailbox-select-failure" msgstr "Output Mailbox Select Failure" msgid "printer-state-reasons.output-tray-missing" msgstr "Output Tray Missing" msgid "printer-state-reasons.paused" msgstr "Paused" msgid "printer-state-reasons.perforater-added" msgstr "Perforater Added" msgid "printer-state-reasons.perforater-almost-empty" msgstr "Perforater Almost Empty" msgid "printer-state-reasons.perforater-almost-full" msgstr "Perforater Almost Full" msgid "printer-state-reasons.perforater-at-limit" msgstr "Perforater At Limit" msgid "printer-state-reasons.perforater-closed" msgstr "Perforater Closed" msgid "printer-state-reasons.perforater-configuration-change" msgstr "Perforater Configuration Change" msgid "printer-state-reasons.perforater-cover-closed" msgstr "Perforater Cover Closed" msgid "printer-state-reasons.perforater-cover-open" msgstr "Perforater Cover Open" msgid "printer-state-reasons.perforater-empty" msgstr "Perforater Empty" msgid "printer-state-reasons.perforater-full" msgstr "Perforater Full" msgid "printer-state-reasons.perforater-interlock-closed" msgstr "Perforater Interlock Closed" msgid "printer-state-reasons.perforater-interlock-open" msgstr "Perforater Interlock Open" msgid "printer-state-reasons.perforater-jam" msgstr "Perforater Jam" msgid "printer-state-reasons.perforater-life-almost-over" msgstr "Perforater Life Almost Over" msgid "printer-state-reasons.perforater-life-over" msgstr "Perforater Life Over" msgid "printer-state-reasons.perforater-memory-exhausted" msgstr "Perforater Memory Exhausted" msgid "printer-state-reasons.perforater-missing" msgstr "Perforater Missing" msgid "printer-state-reasons.perforater-motor-failure" msgstr "Perforater Motor Failure" msgid "printer-state-reasons.perforater-near-limit" msgstr "Perforater Near Limit" msgid "printer-state-reasons.perforater-offline" msgstr "Perforater Offline" msgid "printer-state-reasons.perforater-opened" msgstr "Perforater Opened" msgid "printer-state-reasons.perforater-over-temperature" msgstr "Perforater Over Temperature" msgid "printer-state-reasons.perforater-power-saver" msgstr "Perforater Power Saver" msgid "printer-state-reasons.perforater-recoverable-failure" msgstr "Perforater Recoverable Failure" msgid "printer-state-reasons.perforater-recoverable-storage" msgstr "Perforater Recoverable Storage" msgid "printer-state-reasons.perforater-removed" msgstr "Perforater Removed" msgid "printer-state-reasons.perforater-resource-added" msgstr "Perforater Resource Added" msgid "printer-state-reasons.perforater-resource-removed" msgstr "Perforater Resource Removed" msgid "printer-state-reasons.perforater-thermistor-failure" msgstr "Perforater Thermistor Failure" msgid "printer-state-reasons.perforater-timing-failure" msgstr "Perforater Timing Failure" msgid "printer-state-reasons.perforater-turned-off" msgstr "Perforater Turned Off" msgid "printer-state-reasons.perforater-turned-on" msgstr "Perforater Turned On" msgid "printer-state-reasons.perforater-under-temperature" msgstr "Perforater Under Temperature" msgid "printer-state-reasons.perforater-unrecoverable-failure" msgstr "Perforater Unrecoverable Failure" msgid "printer-state-reasons.perforater-unrecoverable-storage-error" msgstr "Perforater Unrecoverable Storage Error" msgid "printer-state-reasons.perforater-warming-up" msgstr "Perforater Warming Up" msgid "printer-state-reasons.power-down" msgstr "Power Down" msgid "printer-state-reasons.power-up" msgstr "Power Up" msgid "printer-state-reasons.printer-manual-reset" msgstr "Printer Manual Reset" msgid "printer-state-reasons.printer-nms-reset" msgstr "Printer Nms Reset" msgid "printer-state-reasons.printer-ready-to-print" msgstr "Printer Ready To Print" msgid "printer-state-reasons.puncher-added" msgstr "Puncher Added" msgid "printer-state-reasons.puncher-almost-empty" msgstr "Puncher Almost Empty" msgid "printer-state-reasons.puncher-almost-full" msgstr "Puncher Almost Full" msgid "printer-state-reasons.puncher-at-limit" msgstr "Puncher At Limit" msgid "printer-state-reasons.puncher-closed" msgstr "Puncher Closed" msgid "printer-state-reasons.puncher-configuration-change" msgstr "Puncher Configuration Change" msgid "printer-state-reasons.puncher-cover-closed" msgstr "Puncher Cover Closed" msgid "printer-state-reasons.puncher-cover-open" msgstr "Puncher Cover Open" msgid "printer-state-reasons.puncher-empty" msgstr "Puncher Empty" msgid "printer-state-reasons.puncher-full" msgstr "Puncher Full" msgid "printer-state-reasons.puncher-interlock-closed" msgstr "Puncher Interlock Closed" msgid "printer-state-reasons.puncher-interlock-open" msgstr "Puncher Interlock Open" msgid "printer-state-reasons.puncher-jam" msgstr "Puncher Jam" msgid "printer-state-reasons.puncher-life-almost-over" msgstr "Puncher Life Almost Over" msgid "printer-state-reasons.puncher-life-over" msgstr "Puncher Life Over" msgid "printer-state-reasons.puncher-memory-exhausted" msgstr "Puncher Memory Exhausted" msgid "printer-state-reasons.puncher-missing" msgstr "Puncher Missing" msgid "printer-state-reasons.puncher-motor-failure" msgstr "Puncher Motor Failure" msgid "printer-state-reasons.puncher-near-limit" msgstr "Puncher Near Limit" msgid "printer-state-reasons.puncher-offline" msgstr "Puncher Offline" msgid "printer-state-reasons.puncher-opened" msgstr "Puncher Opened" msgid "printer-state-reasons.puncher-over-temperature" msgstr "Puncher Over Temperature" msgid "printer-state-reasons.puncher-power-saver" msgstr "Puncher Power Saver" msgid "printer-state-reasons.puncher-recoverable-failure" msgstr "Puncher Recoverable Failure" msgid "printer-state-reasons.puncher-recoverable-storage" msgstr "Puncher Recoverable Storage" msgid "printer-state-reasons.puncher-removed" msgstr "Puncher Removed" msgid "printer-state-reasons.puncher-resource-added" msgstr "Puncher Resource Added" msgid "printer-state-reasons.puncher-resource-removed" msgstr "Puncher Resource Removed" msgid "printer-state-reasons.puncher-thermistor-failure" msgstr "Puncher Thermistor Failure" msgid "printer-state-reasons.puncher-timing-failure" msgstr "Puncher Timing Failure" msgid "printer-state-reasons.puncher-turned-off" msgstr "Puncher Turned Off" msgid "printer-state-reasons.puncher-turned-on" msgstr "Puncher Turned On" msgid "printer-state-reasons.puncher-under-temperature" msgstr "Puncher Under Temperature" msgid "printer-state-reasons.puncher-unrecoverable-failure" msgstr "Puncher Unrecoverable Failure" msgid "printer-state-reasons.puncher-unrecoverable-storage-error" msgstr "Puncher Unrecoverable Storage Error" msgid "printer-state-reasons.puncher-warming-up" msgstr "Puncher Warming Up" msgid "printer-state-reasons.separation-cutter-added" msgstr "Separation Cutter Added" msgid "printer-state-reasons.separation-cutter-almost-empty" msgstr "Separation Cutter Almost Empty" msgid "printer-state-reasons.separation-cutter-almost-full" msgstr "Separation Cutter Almost Full" msgid "printer-state-reasons.separation-cutter-at-limit" msgstr "Separation Cutter At Limit" msgid "printer-state-reasons.separation-cutter-closed" msgstr "Separation Cutter Closed" msgid "printer-state-reasons.separation-cutter-configuration-change" msgstr "Separation Cutter Configuration Change" msgid "printer-state-reasons.separation-cutter-cover-closed" msgstr "Separation Cutter Cover Closed" msgid "printer-state-reasons.separation-cutter-cover-open" msgstr "Separation Cutter Cover Open" msgid "printer-state-reasons.separation-cutter-empty" msgstr "Separation Cutter Empty" msgid "printer-state-reasons.separation-cutter-full" msgstr "Separation Cutter Full" msgid "printer-state-reasons.separation-cutter-interlock-closed" msgstr "Separation Cutter Interlock Closed" msgid "printer-state-reasons.separation-cutter-interlock-open" msgstr "Separation Cutter Interlock Open" msgid "printer-state-reasons.separation-cutter-jam" msgstr "Separation Cutter Jam" msgid "printer-state-reasons.separation-cutter-life-almost-over" msgstr "Separation Cutter Life Almost Over" msgid "printer-state-reasons.separation-cutter-life-over" msgstr "Separation Cutter Life Over" msgid "printer-state-reasons.separation-cutter-memory-exhausted" msgstr "Separation Cutter Memory Exhausted" msgid "printer-state-reasons.separation-cutter-missing" msgstr "Separation Cutter Missing" msgid "printer-state-reasons.separation-cutter-motor-failure" msgstr "Separation Cutter Motor Failure" msgid "printer-state-reasons.separation-cutter-near-limit" msgstr "Separation Cutter Near Limit" msgid "printer-state-reasons.separation-cutter-offline" msgstr "Separation Cutter Offline" msgid "printer-state-reasons.separation-cutter-opened" msgstr "Separation Cutter Opened" msgid "printer-state-reasons.separation-cutter-over-temperature" msgstr "Separation Cutter Over Temperature" msgid "printer-state-reasons.separation-cutter-power-saver" msgstr "Separation Cutter Power Saver" msgid "printer-state-reasons.separation-cutter-recoverable-failure" msgstr "Separation Cutter Recoverable Failure" msgid "printer-state-reasons.separation-cutter-recoverable-storage" msgstr "Separation Cutter Recoverable Storage" msgid "printer-state-reasons.separation-cutter-removed" msgstr "Separation Cutter Removed" msgid "printer-state-reasons.separation-cutter-resource-added" msgstr "Separation Cutter Resource Added" msgid "printer-state-reasons.separation-cutter-resource-removed" msgstr "Separation Cutter Resource Removed" msgid "printer-state-reasons.separation-cutter-thermistor-failure" msgstr "Separation Cutter Thermistor Failure" msgid "printer-state-reasons.separation-cutter-timing-failure" msgstr "Separation Cutter Timing Failure" msgid "printer-state-reasons.separation-cutter-turned-off" msgstr "Separation Cutter Turned Off" msgid "printer-state-reasons.separation-cutter-turned-on" msgstr "Separation Cutter Turned On" msgid "printer-state-reasons.separation-cutter-under-temperature" msgstr "Separation Cutter Under Temperature" msgid "printer-state-reasons.separation-cutter-unrecoverable-failure" msgstr "Separation Cutter Unrecoverable Failure" msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error" msgstr "Separation Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.separation-cutter-warming-up" msgstr "Separation Cutter Warming Up" msgid "printer-state-reasons.sheet-rotator-added" msgstr "Sheet Rotator Added" msgid "printer-state-reasons.sheet-rotator-almost-empty" msgstr "Sheet Rotator Almost Empty" msgid "printer-state-reasons.sheet-rotator-almost-full" msgstr "Sheet Rotator Almost Full" msgid "printer-state-reasons.sheet-rotator-at-limit" msgstr "Sheet Rotator At Limit" msgid "printer-state-reasons.sheet-rotator-closed" msgstr "Sheet Rotator Closed" msgid "printer-state-reasons.sheet-rotator-configuration-change" msgstr "Sheet Rotator Configuration Change" msgid "printer-state-reasons.sheet-rotator-cover-closed" msgstr "Sheet Rotator Cover Closed" msgid "printer-state-reasons.sheet-rotator-cover-open" msgstr "Sheet Rotator Cover Open" msgid "printer-state-reasons.sheet-rotator-empty" msgstr "Sheet Rotator Empty" msgid "printer-state-reasons.sheet-rotator-full" msgstr "Sheet Rotator Full" msgid "printer-state-reasons.sheet-rotator-interlock-closed" msgstr "Sheet Rotator Interlock Closed" msgid "printer-state-reasons.sheet-rotator-interlock-open" msgstr "Sheet Rotator Interlock Open" msgid "printer-state-reasons.sheet-rotator-jam" msgstr "Sheet Rotator Jam" msgid "printer-state-reasons.sheet-rotator-life-almost-over" msgstr "Sheet Rotator Life Almost Over" msgid "printer-state-reasons.sheet-rotator-life-over" msgstr "Sheet Rotator Life Over" msgid "printer-state-reasons.sheet-rotator-memory-exhausted" msgstr "Sheet Rotator Memory Exhausted" msgid "printer-state-reasons.sheet-rotator-missing" msgstr "Sheet Rotator Missing" msgid "printer-state-reasons.sheet-rotator-motor-failure" msgstr "Sheet Rotator Motor Failure" msgid "printer-state-reasons.sheet-rotator-near-limit" msgstr "Sheet Rotator Near Limit" msgid "printer-state-reasons.sheet-rotator-offline" msgstr "Sheet Rotator Offline" msgid "printer-state-reasons.sheet-rotator-opened" msgstr "Sheet Rotator Opened" msgid "printer-state-reasons.sheet-rotator-over-temperature" msgstr "Sheet Rotator Over Temperature" msgid "printer-state-reasons.sheet-rotator-power-saver" msgstr "Sheet Rotator Power Saver" msgid "printer-state-reasons.sheet-rotator-recoverable-failure" msgstr "Sheet Rotator Recoverable Failure" msgid "printer-state-reasons.sheet-rotator-recoverable-storage" msgstr "Sheet Rotator Recoverable Storage" msgid "printer-state-reasons.sheet-rotator-removed" msgstr "Sheet Rotator Removed" msgid "printer-state-reasons.sheet-rotator-resource-added" msgstr "Sheet Rotator Resource Added" msgid "printer-state-reasons.sheet-rotator-resource-removed" msgstr "Sheet Rotator Resource Removed" msgid "printer-state-reasons.sheet-rotator-thermistor-failure" msgstr "Sheet Rotator Thermistor Failure" msgid "printer-state-reasons.sheet-rotator-timing-failure" msgstr "Sheet Rotator Timing Failure" msgid "printer-state-reasons.sheet-rotator-turned-off" msgstr "Sheet Rotator Turned Off" msgid "printer-state-reasons.sheet-rotator-turned-on" msgstr "Sheet Rotator Turned On" msgid "printer-state-reasons.sheet-rotator-under-temperature" msgstr "Sheet Rotator Under Temperature" msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure" msgstr "Sheet Rotator Unrecoverable Failure" msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" msgstr "Sheet Rotator Unrecoverable Storage Error" msgid "printer-state-reasons.sheet-rotator-warming-up" msgstr "Sheet Rotator Warming Up" msgid "printer-state-reasons.shutdown" msgstr "Shutdown" msgid "printer-state-reasons.slitter-added" msgstr "Slitter Added" msgid "printer-state-reasons.slitter-almost-empty" msgstr "Slitter Almost Empty" msgid "printer-state-reasons.slitter-almost-full" msgstr "Slitter Almost Full" msgid "printer-state-reasons.slitter-at-limit" msgstr "Slitter At Limit" msgid "printer-state-reasons.slitter-closed" msgstr "Slitter Closed" msgid "printer-state-reasons.slitter-configuration-change" msgstr "Slitter Configuration Change" msgid "printer-state-reasons.slitter-cover-closed" msgstr "Slitter Cover Closed" msgid "printer-state-reasons.slitter-cover-open" msgstr "Slitter Cover Open" msgid "printer-state-reasons.slitter-empty" msgstr "Slitter Empty" msgid "printer-state-reasons.slitter-full" msgstr "Slitter Full" msgid "printer-state-reasons.slitter-interlock-closed" msgstr "Slitter Interlock Closed" msgid "printer-state-reasons.slitter-interlock-open" msgstr "Slitter Interlock Open" msgid "printer-state-reasons.slitter-jam" msgstr "Slitter Jam" msgid "printer-state-reasons.slitter-life-almost-over" msgstr "Slitter Life Almost Over" msgid "printer-state-reasons.slitter-life-over" msgstr "Slitter Life Over" msgid "printer-state-reasons.slitter-memory-exhausted" msgstr "Slitter Memory Exhausted" msgid "printer-state-reasons.slitter-missing" msgstr "Slitter Missing" msgid "printer-state-reasons.slitter-motor-failure" msgstr "Slitter Motor Failure" msgid "printer-state-reasons.slitter-near-limit" msgstr "Slitter Near Limit" msgid "printer-state-reasons.slitter-offline" msgstr "Slitter Offline" msgid "printer-state-reasons.slitter-opened" msgstr "Slitter Opened" msgid "printer-state-reasons.slitter-over-temperature" msgstr "Slitter Over Temperature" msgid "printer-state-reasons.slitter-power-saver" msgstr "Slitter Power Saver" msgid "printer-state-reasons.slitter-recoverable-failure" msgstr "Slitter Recoverable Failure" msgid "printer-state-reasons.slitter-recoverable-storage" msgstr "Slitter Recoverable Storage" msgid "printer-state-reasons.slitter-removed" msgstr "Slitter Removed" msgid "printer-state-reasons.slitter-resource-added" msgstr "Slitter Resource Added" msgid "printer-state-reasons.slitter-resource-removed" msgstr "Slitter Resource Removed" msgid "printer-state-reasons.slitter-thermistor-failure" msgstr "Slitter Thermistor Failure" msgid "printer-state-reasons.slitter-timing-failure" msgstr "Slitter Timing Failure" msgid "printer-state-reasons.slitter-turned-off" msgstr "Slitter Turned Off" msgid "printer-state-reasons.slitter-turned-on" msgstr "Slitter Turned On" msgid "printer-state-reasons.slitter-under-temperature" msgstr "Slitter Under Temperature" msgid "printer-state-reasons.slitter-unrecoverable-failure" msgstr "Slitter Unrecoverable Failure" msgid "printer-state-reasons.slitter-unrecoverable-storage-error" msgstr "Slitter Unrecoverable Storage Error" msgid "printer-state-reasons.slitter-warming-up" msgstr "Slitter Warming Up" msgid "printer-state-reasons.spool-area-full" msgstr "Spool Area Full" msgid "printer-state-reasons.stacker-added" msgstr "Stacker Added" msgid "printer-state-reasons.stacker-almost-empty" msgstr "Stacker Almost Empty" msgid "printer-state-reasons.stacker-almost-full" msgstr "Stacker Almost Full" msgid "printer-state-reasons.stacker-at-limit" msgstr "Stacker At Limit" msgid "printer-state-reasons.stacker-closed" msgstr "Stacker Closed" msgid "printer-state-reasons.stacker-configuration-change" msgstr "Stacker Configuration Change" msgid "printer-state-reasons.stacker-cover-closed" msgstr "Stacker Cover Closed" msgid "printer-state-reasons.stacker-cover-open" msgstr "Stacker Cover Open" msgid "printer-state-reasons.stacker-empty" msgstr "Stacker Empty" msgid "printer-state-reasons.stacker-full" msgstr "Stacker Full" msgid "printer-state-reasons.stacker-interlock-closed" msgstr "Stacker Interlock Closed" msgid "printer-state-reasons.stacker-interlock-open" msgstr "Stacker Interlock Open" msgid "printer-state-reasons.stacker-jam" msgstr "Stacker Jam" msgid "printer-state-reasons.stacker-life-almost-over" msgstr "Stacker Life Almost Over" msgid "printer-state-reasons.stacker-life-over" msgstr "Stacker Life Over" msgid "printer-state-reasons.stacker-memory-exhausted" msgstr "Stacker Memory Exhausted" msgid "printer-state-reasons.stacker-missing" msgstr "Stacker Missing" msgid "printer-state-reasons.stacker-motor-failure" msgstr "Stacker Motor Failure" msgid "printer-state-reasons.stacker-near-limit" msgstr "Stacker Near Limit" msgid "printer-state-reasons.stacker-offline" msgstr "Stacker Offline" msgid "printer-state-reasons.stacker-opened" msgstr "Stacker Opened" msgid "printer-state-reasons.stacker-over-temperature" msgstr "Stacker Over Temperature" msgid "printer-state-reasons.stacker-power-saver" msgstr "Stacker Power Saver" msgid "printer-state-reasons.stacker-recoverable-failure" msgstr "Stacker Recoverable Failure" msgid "printer-state-reasons.stacker-recoverable-storage" msgstr "Stacker Recoverable Storage" msgid "printer-state-reasons.stacker-removed" msgstr "Stacker Removed" msgid "printer-state-reasons.stacker-resource-added" msgstr "Stacker Resource Added" msgid "printer-state-reasons.stacker-resource-removed" msgstr "Stacker Resource Removed" msgid "printer-state-reasons.stacker-thermistor-failure" msgstr "Stacker Thermistor Failure" msgid "printer-state-reasons.stacker-timing-failure" msgstr "Stacker Timing Failure" msgid "printer-state-reasons.stacker-turned-off" msgstr "Stacker Turned Off" msgid "printer-state-reasons.stacker-turned-on" msgstr "Stacker Turned On" msgid "printer-state-reasons.stacker-under-temperature" msgstr "Stacker Under Temperature" msgid "printer-state-reasons.stacker-unrecoverable-failure" msgstr "Stacker Unrecoverable Failure" msgid "printer-state-reasons.stacker-unrecoverable-storage-error" msgstr "Stacker Unrecoverable Storage Error" msgid "printer-state-reasons.stacker-warming-up" msgstr "Stacker Warming Up" msgid "printer-state-reasons.stapler-added" msgstr "Stapler Added" msgid "printer-state-reasons.stapler-almost-empty" msgstr "Stapler Almost Empty" msgid "printer-state-reasons.stapler-almost-full" msgstr "Stapler Almost Full" msgid "printer-state-reasons.stapler-at-limit" msgstr "Stapler At Limit" msgid "printer-state-reasons.stapler-closed" msgstr "Stapler Closed" msgid "printer-state-reasons.stapler-configuration-change" msgstr "Stapler Configuration Change" msgid "printer-state-reasons.stapler-cover-closed" msgstr "Stapler Cover Closed" msgid "printer-state-reasons.stapler-cover-open" msgstr "Stapler Cover Open" msgid "printer-state-reasons.stapler-empty" msgstr "Stapler Empty" msgid "printer-state-reasons.stapler-full" msgstr "Stapler Full" msgid "printer-state-reasons.stapler-interlock-closed" msgstr "Stapler Interlock Closed" msgid "printer-state-reasons.stapler-interlock-open" msgstr "Stapler Interlock Open" msgid "printer-state-reasons.stapler-jam" msgstr "Stapler Jam" msgid "printer-state-reasons.stapler-life-almost-over" msgstr "Stapler Life Almost Over" msgid "printer-state-reasons.stapler-life-over" msgstr "Stapler Life Over" msgid "printer-state-reasons.stapler-memory-exhausted" msgstr "Stapler Memory Exhausted" msgid "printer-state-reasons.stapler-missing" msgstr "Stapler Missing" msgid "printer-state-reasons.stapler-motor-failure" msgstr "Stapler Motor Failure" msgid "printer-state-reasons.stapler-near-limit" msgstr "Stapler Near Limit" msgid "printer-state-reasons.stapler-offline" msgstr "Stapler Offline" msgid "printer-state-reasons.stapler-opened" msgstr "Stapler Opened" msgid "printer-state-reasons.stapler-over-temperature" msgstr "Stapler Over Temperature" msgid "printer-state-reasons.stapler-power-saver" msgstr "Stapler Power Saver" msgid "printer-state-reasons.stapler-recoverable-failure" msgstr "Stapler Recoverable Failure" msgid "printer-state-reasons.stapler-recoverable-storage" msgstr "Stapler Recoverable Storage" msgid "printer-state-reasons.stapler-removed" msgstr "Stapler Removed" msgid "printer-state-reasons.stapler-resource-added" msgstr "Stapler Resource Added" msgid "printer-state-reasons.stapler-resource-removed" msgstr "Stapler Resource Removed" msgid "printer-state-reasons.stapler-thermistor-failure" msgstr "Stapler Thermistor Failure" msgid "printer-state-reasons.stapler-timing-failure" msgstr "Stapler Timing Failure" msgid "printer-state-reasons.stapler-turned-off" msgstr "Stapler Turned Off" msgid "printer-state-reasons.stapler-turned-on" msgstr "Stapler Turned On" msgid "printer-state-reasons.stapler-under-temperature" msgstr "Stapler Under Temperature" msgid "printer-state-reasons.stapler-unrecoverable-failure" msgstr "Stapler Unrecoverable Failure" msgid "printer-state-reasons.stapler-unrecoverable-storage-error" msgstr "Stapler Unrecoverable Storage Error" msgid "printer-state-reasons.stapler-warming-up" msgstr "Stapler Warming Up" msgid "printer-state-reasons.stitcher-added" msgstr "Stitcher Added" msgid "printer-state-reasons.stitcher-almost-empty" msgstr "Stitcher Almost Empty" msgid "printer-state-reasons.stitcher-almost-full" msgstr "Stitcher Almost Full" msgid "printer-state-reasons.stitcher-at-limit" msgstr "Stitcher At Limit" msgid "printer-state-reasons.stitcher-closed" msgstr "Stitcher Closed" msgid "printer-state-reasons.stitcher-configuration-change" msgstr "Stitcher Configuration Change" msgid "printer-state-reasons.stitcher-cover-closed" msgstr "Stitcher Cover Closed" msgid "printer-state-reasons.stitcher-cover-open" msgstr "Stitcher Cover Open" msgid "printer-state-reasons.stitcher-empty" msgstr "Stitcher Empty" msgid "printer-state-reasons.stitcher-full" msgstr "Stitcher Full" msgid "printer-state-reasons.stitcher-interlock-closed" msgstr "Stitcher Interlock Closed" msgid "printer-state-reasons.stitcher-interlock-open" msgstr "Stitcher Interlock Open" msgid "printer-state-reasons.stitcher-jam" msgstr "Stitcher Jam" msgid "printer-state-reasons.stitcher-life-almost-over" msgstr "Stitcher Life Almost Over" msgid "printer-state-reasons.stitcher-life-over" msgstr "Stitcher Life Over" msgid "printer-state-reasons.stitcher-memory-exhausted" msgstr "Stitcher Memory Exhausted" msgid "printer-state-reasons.stitcher-missing" msgstr "Stitcher Missing" msgid "printer-state-reasons.stitcher-motor-failure" msgstr "Stitcher Motor Failure" msgid "printer-state-reasons.stitcher-near-limit" msgstr "Stitcher Near Limit" msgid "printer-state-reasons.stitcher-offline" msgstr "Stitcher Offline" msgid "printer-state-reasons.stitcher-opened" msgstr "Stitcher Opened" msgid "printer-state-reasons.stitcher-over-temperature" msgstr "Stitcher Over Temperature" msgid "printer-state-reasons.stitcher-power-saver" msgstr "Stitcher Power Saver" msgid "printer-state-reasons.stitcher-recoverable-failure" msgstr "Stitcher Recoverable Failure" msgid "printer-state-reasons.stitcher-recoverable-storage" msgstr "Stitcher Recoverable Storage" msgid "printer-state-reasons.stitcher-removed" msgstr "Stitcher Removed" msgid "printer-state-reasons.stitcher-resource-added" msgstr "Stitcher Resource Added" msgid "printer-state-reasons.stitcher-resource-removed" msgstr "Stitcher Resource Removed" msgid "printer-state-reasons.stitcher-thermistor-failure" msgstr "Stitcher Thermistor Failure" msgid "printer-state-reasons.stitcher-timing-failure" msgstr "Stitcher Timing Failure" msgid "printer-state-reasons.stitcher-turned-off" msgstr "Stitcher Turned Off" msgid "printer-state-reasons.stitcher-turned-on" msgstr "Stitcher Turned On" msgid "printer-state-reasons.stitcher-under-temperature" msgstr "Stitcher Under Temperature" msgid "printer-state-reasons.stitcher-unrecoverable-failure" msgstr "Stitcher Unrecoverable Failure" msgid "printer-state-reasons.stitcher-unrecoverable-storage-error" msgstr "Stitcher Unrecoverable Storage Error" msgid "printer-state-reasons.stitcher-warming-up" msgstr "Stitcher Warming Up" msgid "printer-state-reasons.stopped-partly" msgstr "Stopped Partly" msgid "printer-state-reasons.stopping" msgstr "Stopping" msgid "printer-state-reasons.subunit-added" msgstr "Subunit Added" msgid "printer-state-reasons.subunit-almost-empty" msgstr "Subunit Almost Empty" msgid "printer-state-reasons.subunit-almost-full" msgstr "Subunit Almost Full" msgid "printer-state-reasons.subunit-at-limit" msgstr "Subunit At Limit" msgid "printer-state-reasons.subunit-closed" msgstr "Subunit Closed" msgid "printer-state-reasons.subunit-empty" msgstr "Subunit Empty" msgid "printer-state-reasons.subunit-full" msgstr "Subunit Full" msgid "printer-state-reasons.subunit-life-almost-over" msgstr "Subunit Life Almost Over" msgid "printer-state-reasons.subunit-life-over" msgstr "Subunit Life Over" msgid "printer-state-reasons.subunit-memory-exhausted" msgstr "Subunit Memory Exhausted" msgid "printer-state-reasons.subunit-missing" msgstr "Subunit Missing" msgid "printer-state-reasons.subunit-motor-failure" msgstr "Subunit Motor Failure" msgid "printer-state-reasons.subunit-near-limit" msgstr "Subunit Near Limit" msgid "printer-state-reasons.subunit-offline" msgstr "Subunit Offline" msgid "printer-state-reasons.subunit-opened" msgstr "Subunit Opened" msgid "printer-state-reasons.subunit-over-temperature" msgstr "Subunit Over Temperature" msgid "printer-state-reasons.subunit-power-saver" msgstr "Subunit Power Saver" msgid "printer-state-reasons.subunit-recoverable-failure" msgstr "Subunit Recoverable Failure" msgid "printer-state-reasons.subunit-recoverable-storage" msgstr "Subunit Recoverable Storage" msgid "printer-state-reasons.subunit-removed" msgstr "Subunit Removed" msgid "printer-state-reasons.subunit-resource-added" msgstr "Subunit Resource Added" msgid "printer-state-reasons.subunit-resource-removed" msgstr "Subunit Resource Removed" msgid "printer-state-reasons.subunit-thermistor-failure" msgstr "Subunit Thermistor Failure" msgid "printer-state-reasons.subunit-timing-Failure" msgstr "Subunit Timing Failure" msgid "printer-state-reasons.subunit-turned-off" msgstr "Subunit Turned Off" msgid "printer-state-reasons.subunit-turned-on" msgstr "Subunit Turned On" msgid "printer-state-reasons.subunit-under-temperature" msgstr "Subunit Under Temperature" msgid "printer-state-reasons.subunit-unrecoverable-failure" msgstr "Subunit Unrecoverable Failure" msgid "printer-state-reasons.subunit-unrecoverable-storage" msgstr "Subunit Unrecoverable Storage" msgid "printer-state-reasons.subunit-warming-up" msgstr "Subunit Warming Up" msgid "printer-state-reasons.timed-out" msgstr "Timed Out" msgid "printer-state-reasons.toner-empty" msgstr "Toner Empty" msgid "printer-state-reasons.toner-low" msgstr "Toner Low" msgid "printer-state-reasons.trimmer-added" msgstr "Trimmer Added" msgid "printer-state-reasons.trimmer-almost-empty" msgstr "Trimmer Almost Empty" msgid "printer-state-reasons.trimmer-almost-full" msgstr "Trimmer Almost Full" msgid "printer-state-reasons.trimmer-at-limit" msgstr "Trimmer At Limit" msgid "printer-state-reasons.trimmer-closed" msgstr "Trimmer Closed" msgid "printer-state-reasons.trimmer-configuration-change" msgstr "Trimmer Configuration Change" msgid "printer-state-reasons.trimmer-cover-closed" msgstr "Trimmer Cover Closed" msgid "printer-state-reasons.trimmer-cover-open" msgstr "Trimmer Cover Open" msgid "printer-state-reasons.trimmer-empty" msgstr "Trimmer Empty" msgid "printer-state-reasons.trimmer-full" msgstr "Trimmer Full" msgid "printer-state-reasons.trimmer-interlock-closed" msgstr "Trimmer Interlock Closed" msgid "printer-state-reasons.trimmer-interlock-open" msgstr "Trimmer Interlock Open" msgid "printer-state-reasons.trimmer-jam" msgstr "Trimmer Jam" msgid "printer-state-reasons.trimmer-life-almost-over" msgstr "Trimmer Life Almost Over" msgid "printer-state-reasons.trimmer-life-over" msgstr "Trimmer Life Over" msgid "printer-state-reasons.trimmer-memory-exhausted" msgstr "Trimmer Memory Exhausted" msgid "printer-state-reasons.trimmer-missing" msgstr "Trimmer Missing" msgid "printer-state-reasons.trimmer-motor-failure" msgstr "Trimmer Motor Failure" msgid "printer-state-reasons.trimmer-near-limit" msgstr "Trimmer Near Limit" msgid "printer-state-reasons.trimmer-offline" msgstr "Trimmer Offline" msgid "printer-state-reasons.trimmer-opened" msgstr "Trimmer Opened" msgid "printer-state-reasons.trimmer-over-temperature" msgstr "Trimmer Over Temperature" msgid "printer-state-reasons.trimmer-power-saver" msgstr "Trimmer Power Saver" msgid "printer-state-reasons.trimmer-recoverable-failure" msgstr "Trimmer Recoverable Failure" msgid "printer-state-reasons.trimmer-recoverable-storage" msgstr "Trimmer Recoverable Storage" msgid "printer-state-reasons.trimmer-removed" msgstr "Trimmer Removed" msgid "printer-state-reasons.trimmer-resource-added" msgstr "Trimmer Resource Added" msgid "printer-state-reasons.trimmer-resource-removed" msgstr "Trimmer Resource Removed" msgid "printer-state-reasons.trimmer-thermistor-failure" msgstr "Trimmer Thermistor Failure" msgid "printer-state-reasons.trimmer-timing-failure" msgstr "Trimmer Timing Failure" msgid "printer-state-reasons.trimmer-turned-off" msgstr "Trimmer Turned Off" msgid "printer-state-reasons.trimmer-turned-on" msgstr "Trimmer Turned On" msgid "printer-state-reasons.trimmer-under-temperature" msgstr "Trimmer Under Temperature" msgid "printer-state-reasons.trimmer-unrecoverable-failure" msgstr "Trimmer Unrecoverable Failure" msgid "printer-state-reasons.trimmer-unrecoverable-storage-error" msgstr "Trimmer Unrecoverable Storage Error" msgid "printer-state-reasons.trimmer-warming-up" msgstr "Trimmer Warming Up" msgid "printer-state-reasons.unknown" msgstr "Unknown" msgid "printer-state-reasons.wrapper-added" msgstr "Wrapper Added" msgid "printer-state-reasons.wrapper-almost-empty" msgstr "Wrapper Almost Empty" msgid "printer-state-reasons.wrapper-almost-full" msgstr "Wrapper Almost Full" msgid "printer-state-reasons.wrapper-at-limit" msgstr "Wrapper At Limit" msgid "printer-state-reasons.wrapper-closed" msgstr "Wrapper Closed" msgid "printer-state-reasons.wrapper-configuration-change" msgstr "Wrapper Configuration Change" msgid "printer-state-reasons.wrapper-cover-closed" msgstr "Wrapper Cover Closed" msgid "printer-state-reasons.wrapper-cover-open" msgstr "Wrapper Cover Open" msgid "printer-state-reasons.wrapper-empty" msgstr "Wrapper Empty" msgid "printer-state-reasons.wrapper-full" msgstr "Wrapper Full" msgid "printer-state-reasons.wrapper-interlock-closed" msgstr "Wrapper Interlock Closed" msgid "printer-state-reasons.wrapper-interlock-open" msgstr "Wrapper Interlock Open" msgid "printer-state-reasons.wrapper-jam" msgstr "Wrapper Jam" msgid "printer-state-reasons.wrapper-life-almost-over" msgstr "Wrapper Life Almost Over" msgid "printer-state-reasons.wrapper-life-over" msgstr "Wrapper Life Over" msgid "printer-state-reasons.wrapper-memory-exhausted" msgstr "Wrapper Memory Exhausted" msgid "printer-state-reasons.wrapper-missing" msgstr "Wrapper Missing" msgid "printer-state-reasons.wrapper-motor-failure" msgstr "Wrapper Motor Failure" msgid "printer-state-reasons.wrapper-near-limit" msgstr "Wrapper Near Limit" msgid "printer-state-reasons.wrapper-offline" msgstr "Wrapper Offline" msgid "printer-state-reasons.wrapper-opened" msgstr "Wrapper Opened" msgid "printer-state-reasons.wrapper-over-temperature" msgstr "Wrapper Over Temperature" msgid "printer-state-reasons.wrapper-power-saver" msgstr "Wrapper Power Saver" msgid "printer-state-reasons.wrapper-recoverable-failure" msgstr "Wrapper Recoverable Failure" msgid "printer-state-reasons.wrapper-recoverable-storage" msgstr "Wrapper Recoverable Storage" msgid "printer-state-reasons.wrapper-removed" msgstr "Wrapper Removed" msgid "printer-state-reasons.wrapper-resource-added" msgstr "Wrapper Resource Added" msgid "printer-state-reasons.wrapper-resource-removed" msgstr "Wrapper Resource Removed" msgid "printer-state-reasons.wrapper-thermistor-failure" msgstr "Wrapper Thermistor Failure" msgid "printer-state-reasons.wrapper-timing-failure" msgstr "Wrapper Timing Failure" msgid "printer-state-reasons.wrapper-turned-off" msgstr "Wrapper Turned Off" msgid "printer-state-reasons.wrapper-turned-on" msgstr "Wrapper Turned On" msgid "printer-state-reasons.wrapper-under-temperature" msgstr "Wrapper Under Temperature" msgid "printer-state-reasons.wrapper-unrecoverable-failure" msgstr "Wrapper Unrecoverable Failure" msgid "printer-state-reasons.wrapper-unrecoverable-storage-error" msgstr "Wrapper Unrecoverable Storage Error" msgid "printer-state-reasons.wrapper-warming-up" msgstr "Wrapper Warming Up" msgid "printer-state.3" msgstr "Idle" msgid "printer-state.4" msgstr "Processing" msgid "printer-state.5" msgstr "Stopped" msgid "printer-up-time" msgstr "Printer Uptime" msgid "processing" msgstr "処ç†ä¸­" msgid "proof-print" msgstr "Proof Print" msgid "proof-print-copies" msgstr "Proof Print Copies" msgid "punching" msgstr "Punching" msgid "punching-locations" msgstr "Punching Locations" msgid "punching-offset" msgstr "Punching Offset" msgid "punching-reference-edge" msgstr "Punching Reference Edge" msgid "punching-reference-edge.bottom" msgstr "Bottom" msgid "punching-reference-edge.left" msgstr "Left" msgid "punching-reference-edge.right" msgstr "Right" msgid "punching-reference-edge.top" msgstr "Top" #, c-format msgid "request id is %s-%d (%d file(s))" msgstr "リクエスト ID 㯠%s-%d ã§ã™ (%d 個ã®ãƒ•ァイル)" msgid "request-id uses indefinite length" msgstr "リクエスト ID ã®é•·ã•ãŒä¸å®š" msgid "requested-attributes" msgstr "Requested Attributes" msgid "retry-interval" msgstr "Retry Interval" msgid "retry-time-out" msgstr "Retry Time Out" msgid "save-disposition" msgstr "Save Disposition" msgid "save-disposition.none" msgstr "None" msgid "save-disposition.print-save" msgstr "Print Save" msgid "save-disposition.save-only" msgstr "Save Only" msgid "save-document-format" msgstr "Save Document Format" msgid "save-info" msgstr "Save Info" msgid "save-location" msgstr "Save Location" msgid "save-name" msgstr "Save Name" msgid "scheduler is not running" msgstr "スケジューラーã¯å‹•作ã—ã¦ã„ã¾ã›ã‚“" msgid "scheduler is running" msgstr "スケジューラーã¯å‹•作中ã§ã™" msgid "separator-sheets" msgstr "Separator Sheets" msgid "separator-sheets-type" msgstr "Separator Sheets Type" msgid "separator-sheets-type.both-sheets" msgstr "Both Sheets" msgid "separator-sheets-type.end-sheet" msgstr "End Sheet" msgid "separator-sheets-type.none" msgstr "None" msgid "separator-sheets-type.slip-sheets" msgstr "Slip Sheets" msgid "separator-sheets-type.start-sheet" msgstr "Start Sheet" msgid "sheet-collate" msgstr "Collate Copies" msgid "sheet-collate.collated" msgstr "Yes" msgid "sheet-collate.uncollated" msgstr "No" msgid "sides" msgstr "2-Sided Printing" msgid "sides.one-sided" msgstr "Off" msgid "sides.two-sided-long-edge" msgstr "On (Portrait)" msgid "sides.two-sided-short-edge" msgstr "On (Landscape)" #, c-format msgid "stat of %s failed: %s" msgstr "%s ã®çŠ¶æ…‹å–å¾—ã«å¤±æ•—ã—ã¾ã—ãŸ: %s" msgid "status\t\tShow status of daemon and queue." msgstr "status\t\tデーモンã¨ã‚­ãƒ¥ãƒ¼ã®çŠ¶æ…‹ã‚’è¡¨ç¤ºã€‚" msgid "status-message" msgstr "Status Message" msgid "stitching" msgstr "Staple" msgid "stitching-angle" msgstr "Stitching Angle" msgid "stitching-locations" msgstr "Stitching Locations" msgid "stitching-method" msgstr "Stitching Method" msgid "stitching-method.auto" msgstr "Automatic" msgid "stitching-method.crimp" msgstr "Crimp" msgid "stitching-method.wire" msgstr "Wire" msgid "stitching-offset" msgstr "Stitching Offset" msgid "stitching-reference-edge" msgstr "Stitching Reference Edge" msgid "stitching-reference-edge.bottom" msgstr "Bottom" msgid "stitching-reference-edge.left" msgstr "Left" msgid "stitching-reference-edge.right" msgstr "Right" msgid "stitching-reference-edge.top" msgstr "Top" msgid "stopped" msgstr "åœæ­¢" msgid "subject" msgstr "Subject" #, c-format msgid "system default destination: %s" msgstr "システムã®ãƒ‡ãƒ•ォルトã®å®›å…ˆ: %s" #, c-format msgid "system default destination: %s/%s" msgstr "システムã®ãƒ‡ãƒ•ォルトã®å®›å…ˆ: %s/%s" msgid "t33-subaddress" msgstr "T33 Subaddress" msgid "to-name" msgstr "To Name" msgid "transmission-status" msgstr "Transmission Status" msgid "transmission-status.3" msgstr "Pending" msgid "transmission-status.4" msgstr "Pending Retry" msgid "transmission-status.5" msgstr "Processing" msgid "transmission-status.7" msgstr "Canceled" msgid "transmission-status.8" msgstr "Aborted" msgid "transmission-status.9" msgstr "Completed" msgid "trimming" msgstr "Cut" msgid "trimming-offset" msgstr "Cut Position" msgid "trimming-reference-edge" msgstr "Trimming Reference Edge" msgid "trimming-reference-edge.bottom" msgstr "Bottom" msgid "trimming-reference-edge.left" msgstr "Left" msgid "trimming-reference-edge.right" msgstr "Right" msgid "trimming-reference-edge.top" msgstr "Top" msgid "trimming-type" msgstr "Trimming Type" msgid "trimming-type.draw-line" msgstr "Draw Line" msgid "trimming-type.full" msgstr "Full" msgid "trimming-type.partial" msgstr "Partial" msgid "trimming-type.perforate" msgstr "Perforate" msgid "trimming-type.score" msgstr "Score" msgid "trimming-type.tab" msgstr "Tab" msgid "trimming-when" msgstr "Trimming When" msgid "trimming-when.after-documents" msgstr "After Documents" msgid "trimming-when.after-job" msgstr "After Job" msgid "trimming-when.after-sets" msgstr "After Sets" msgid "trimming-when.after-sheets" msgstr "After Sheets" msgid "unknown" msgstr "未知" msgid "untitled" msgstr "タイトルãªã—" msgid "variable-bindings uses indefinite length" msgstr "variable-bindings ã®é•·ã•ãŒä¸å®š" msgid "x-accuracy" msgstr "X Accuracy" msgid "x-dimension" msgstr "X Dimension" msgid "x-offset" msgstr "X Offset" msgid "x-origin" msgstr "X Origin" msgid "y-accuracy" msgstr "Y Accuracy" msgid "y-dimension" msgstr "Y Dimension" msgid "y-offset" msgstr "Y Offset" msgid "y-origin" msgstr "Y Origin" msgid "z-accuracy" msgstr "Z Accuracy" msgid "z-dimension" msgstr "Z Dimension" msgid "z-offset" msgstr "Z Offset" #~ msgid "\tInterface: %s/interfaces/%s" #~ msgstr "\tインターフェイス: %s/interfaces/%s" #~ msgid " --lf End lines with LF (UNIX/Linux/OS X)." #~ msgstr " --lf 行末を LF ã¨ã™ã‚‹ (UNIX/Linux/OS X)。" #~ msgid " -E Test with HTTP Upgrade to TLS." #~ msgstr "" #~ " -E HTTP ã‹ã‚‰ TLS ã¸ã®ã‚¢ãƒƒãƒ—グレードã§ãƒ†ã‚¹ãƒˆã™ã‚‹ã€‚" #~ msgid " -S Test with SSL encryption." #~ msgstr " -S SSL æš—å·åŒ–ã§ãƒ†ã‚¹ãƒˆã™ã‚‹ã€‚" #~ msgid " -a Browse for all services." #~ msgstr " -a ã™ã¹ã¦ã®ã‚µãƒ¼ãƒ“スをブラウズã™ã‚‹ã€‚" #~ msgid " -d domain Browse/resolve in specified domain." #~ msgstr "" #~ " -d <ドメインå> 指定ã•れãŸãƒ‰ãƒ¡ã‚¤ãƒ³ã§ãƒ–ラウズ/åå‰è§£æ±ºã™ã‚‹ã€‚" #~ msgid " -l Run cupsd from launchd(8)." #~ msgstr " -l launchd(8) ã‹ã‚‰ cupsd を実行ã™ã‚‹ã€‚" #~ msgid " -p program Run specified program for each service." #~ msgstr "" #~ " -p <プログラムå> 指定ã•れãŸãƒ—ログラムをãれãžã‚Œã®ã‚µãƒ¼ãƒ“スã«å¯¾ã—実" #~ "行ã™ã‚‹ã€‚" #~ msgid " -t type Browse/resolve with specified type." #~ msgstr " -t タイプ 指定ã•れãŸã‚¿ã‚¤ãƒ—ã§ãƒ–ラウズ/åå‰è§£æ±ºã™ã‚‹ã€‚" #~ msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)." #~ msgstr "\"%s\": URI ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - %s (RFC 2911 4.1.5 節)。" #~ msgid "" #~ "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)." #~ msgstr "" #~ "\"%s\": URI ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - é•·ã•ã®èª¤ã‚Š %d (RFC 2911 4.1.5 " #~ "節)。" #~ msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)." #~ msgstr "\"%s\": 属性åãŒèª¤ã£ã¦ã„ã¾ã™ - é•·ã•ã®èª¤ã‚Š %d (RFC 2911 4.1.3 節)。" #~ msgid "" #~ "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)." #~ msgstr "\"%s\": 属性åãŒèª¤ã£ã¦ã„ã¾ã™ - 䏿­£ãªæ–‡å­— (RFC 2911 4.1.3 節)。" #~ msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)." #~ msgstr "\"%s\": 真å½å€¤ %d ãŒèª¤ã£ã¦ã„ã¾ã™ (RFC 2911 4.1.11 節)。" #~ msgid "" #~ "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.7)." #~ msgstr "" #~ "\"%s\": charset ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - 䏿­£ãªæ–‡å­— (RFC 2911 4.1.7 " #~ "節)。" #~ msgid "" #~ "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)." #~ msgstr "" #~ "\"%s\": charset ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - 䏿­£ãªé•·ã• %d (RFC 2911 " #~ "section 4.1.7)." #~ msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": dateTime UTC ã®æ™‚間指定 %u ãŒèª¤ã£ã¦ã„ã¾ã™ (RFC 2911 4.1.14 節)." #~ msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": dateTime UTC ã®åˆ†æŒ‡å®š %u ãŒèª¤ã£ã¦ã„ã¾ã™ (RFC 2911 4.1.14 節)。" #~ msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": dateTime UTC ã®ç¬¦å·æŒ‡å®š '%c' ãŒèª¤ã£ã¦ã„ã¾ã™ (RFC 2911 4.1.14 節)。" #~ msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": dateTime ã®æ—¥ä»˜æŒ‡å®š %u ãŒèª¤ã£ã¦ã„ã¾ã™ (RFC 2911 4.1.14 節)." #~ msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": dateTime ã® 0.1 ç§’ã®æŒ‡å®š %u ãŒèª¤ã£ã¦ã„ã¾ã™ (RFC 2911 4.1.14 節)。" #~ msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": dateTime ã®æ™‚間指定 %u ãŒèª¤ã£ã¦ã„ã¾ã™ (RFC 2911 4.1.14 節)。" #~ msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": dateTime ã®åˆ†æŒ‡å®šãŒèª¤ã£ã¦ã„ã¾ã™ %u (RFC 2911 4.1.14 節)。" #~ msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": dateTime ã®æœˆæŒ‡å®š %u ãŒèª¤ã£ã¦ã„ã¾ã™ (RFC 2911 4.1.14 節)。" #~ msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": 日時ã®ç§’指定 %u ãŒèª¤ã£ã¦ã„ã¾ã™ (RFC 2911 4.1.14 節)。" #~ msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)." #~ msgstr "" #~ "\"%s\": enum ã®å€¤ %d ãŒèª¤ã£ã¦ã„ã¾ã™ - 範囲外ã®å€¤ (RFC 2911 4.1.4 節)。" #~ msgid "" #~ "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": keyword ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - %d (RFC 2911 section 4.1.3)." #~ msgid "" #~ "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section " #~ "4.1.3)." #~ msgstr "" #~ "\"%s\": keyword ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - 䏿­£ãªæ–‡å­— (RFC 2911 4.1.3 " #~ "節)。" #~ msgid "" #~ "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.9)." #~ msgstr "" #~ "\"%s\": mimeMediaType ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - 誤ã£ãŸæ–‡å­— (RFC 2911 " #~ "4.1.9 節)。" #~ msgid "" #~ "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section " #~ "4.1.9)." #~ msgstr "" #~ "\"%s\": mimeMediaType ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - é•·ã•ã®èª¤ã‚Š %d (RFC " #~ "2911 4.1.9 節)。" #~ msgid "" #~ "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section " #~ "4.1.2)." #~ msgstr "" #~ "\"%s\": name ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - UTF-8 ã¨ã—ã¦èª¤ã£ãŸä¸¦ã³ (RFC " #~ "2911 4.1.2 節)。" #~ msgid "" #~ "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)." #~ msgstr "" #~ "\"%s\": name ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - 誤ã£ãŸé•·ã• %d (RFC 2911 section " #~ "4.1.2)。" #~ msgid "" #~ "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 " #~ "section 4.1.8)." #~ msgstr "" #~ "\"%s\": naturalLanguage ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - 誤ã£ãŸæ–‡å­— (RFC 2911 " #~ "4.1.8 節)。" #~ msgid "" #~ "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 " #~ "section 4.1.8)." #~ msgstr "" #~ "\"%s\": naturalLanguage ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - 誤ã£ãŸé•·ã• %d (RFC " #~ "2911 4.1.8 節)。" #~ msgid "" #~ "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)." #~ msgstr "" #~ "\"%s\": octetString 値ãŒèª¤ã£ã¦ã„ã¾ã™ - 誤ã£ãŸé•·ã• %d (RFC 2911 4.1.10 " #~ "節)。" #~ msgid "" #~ "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC " #~ "2911 section 4.1.13)." #~ msgstr "" #~ "\"%s\": rangeOfInteger ã®å€¤ %d-%d ãŒèª¤ã£ã¦ã„ã¾ã™ - 下é™ãŒä¸Šé™ã‚ˆã‚Šã‚‚大ã" #~ "ã„ (RFC 2911 4.1.13 節)。" #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section " #~ "4.1.15)." #~ msgstr "" #~ "\"%s\": resolution ã®å€¤ %dx%d%s ãŒèª¤ã£ã¦ã„ã¾ã™ - å˜ä½å€¤ã®èª¤ã‚Š (RFC 2911 " #~ "4.1.15 節)。" #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " #~ "positive (RFC 2911 section 4.1.15)." #~ msgstr "" #~ "\"%s\": resolution ã®å€¤ %dx%d%s ãŒèª¤ã£ã¦ã„ã¾ã™ - 主走査解åƒåº¦ãŒè²  (RFC " #~ "2911 4.1.15 節)。" #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive " #~ "(RFC 2911 section 4.1.15)." #~ msgstr "" #~ "\"%s\": resolution ã®å€¤ %dx%d%s ãŒèª¤ã£ã¦ã„ã¾ã™ - 副走査解åƒåº¦ãŒè²  (RFC " #~ "2911 4.1.15 節)。" #~ msgid "" #~ "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section " #~ "4.1.1)." #~ msgstr "" #~ "\"%s\": text ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - UTF-8 ã¨ã—ã¦èª¤ã£ãŸä¸¦ã³ (RFC " #~ "2911 4.1.1 節)。" #~ msgid "" #~ "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)." #~ msgstr "" #~ "\"%s\": text ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - 䏿­£ãªé•·ã• %d (RFC 2911 4.1.1 " #~ "節)。" #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.6)." #~ msgstr "" #~ "\"%s\": uriScheme ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - 誤ã£ãŸæ–‡å­— (RFC 2911 4.1.6 " #~ "節)." #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 4.1.6 節)." #~ msgstr "" #~ "\"%s\": uriScheme 値 \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - 誤ã£ãŸé•·ã• %d (RFC 2911 " #~ "4.1.6 節)." #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section " #~ "4.1.6)." #~ msgstr "" #~ "\"%s\": uriScheme ã®å€¤ \"%s\" ãŒèª¤ã£ã¦ã„ã¾ã™ - 䏿­£ãªé•·ã• %d (RFC 2911 " #~ "4.1.6 節)." #~ msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes" #~ msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f ãƒã‚¤ãƒˆ" #~ msgid "%g x %g" #~ msgstr "%g x %g" #~ msgid "%s: Error - expected destination after \"-b\" option." #~ msgstr "%s: エラー - \"-b\" オプションã®ã‚ã¨ã«å®›å…ˆãŒå¿…è¦ã§ã™ã€‚" #~ msgid "720dpi" #~ msgstr "720dpi" #~ msgid "Bad printer URI." #~ msgstr "䏿­£ãªãƒ—リンター URI ã§ã™ã€‚" #~ msgid "Enter old password:" #~ msgstr "å¤ã„パスワードを入力:" #~ msgid "Enter password again:" #~ msgstr "パスワードをå†åº¦å…¥åŠ›:" #~ msgid "Enter password:" #~ msgstr "パスワードを入力:" #~ msgid "Envelope #10 " #~ msgstr "å°ç­’ #10" #~ msgid "Envelope PRC1 " #~ msgstr "å°ç­’ PRC1" #~ msgid "FanFold German" #~ msgstr "FanFold German" #~ msgid "FanFold Legal German" #~ msgstr "FanFold Legal German" #~ msgid "Fanfold US" #~ msgstr "Fanfold US" #~ msgid "File Folder " #~ msgstr "ファイルフォルダー" #~ msgid "New Stylus Color Series" #~ msgstr "New Stylus Color シリーズ" #~ msgid "New Stylus Photo Series" #~ msgstr "New Stylus Photo シリーズ" #~ msgid "Output for printer %s is sent to %s" #~ msgstr "プリンター %s ã®å‡ºåŠ›ã¯ %s ã«é€ã‚‰ã‚Œã¾ã™" #~ msgid "Output for printer %s is sent to remote printer %s on %s" #~ msgstr "プリンター %s ã®å‡ºåŠ›ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ—リンター %s (%s 上) ã«é€ã‚‰ã‚Œã¾ã™" #~ msgid "Output for printer %s/%s is sent to %s" #~ msgstr "プリンター %s/%s ã®å‡ºåŠ›ã¯ %s ã«é€ã‚‰ã‚Œã¾ã™" #~ msgid "Output for printer %s/%s is sent to remote printer %s on %s" #~ msgstr "" #~ "プリンター %s/%s ã®å‡ºåŠ›ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ—リンター %s (%s 上) ã«é€ã‚‰ã‚Œã¾ã™" #~ msgid "Postcard Double " #~ msgstr "往復ãƒã‚¬ã‚­" #~ msgid "Print file accepted - job ID %d." #~ msgstr "プリントファイルをå—ã‘付ã‘ã¾ã—㟠- ジョブ ID %d。" #~ msgid "Print file accepted - job ID unknown." #~ msgstr "NOTICE: プリントファイルをå—ã‘付ã‘ã¾ã—㟠- ジョブ ID 䏿˜Žã€‚" #~ msgid "Print file was not accepted." #~ msgstr "プリントファイルãŒå—ã‘付ã‘られã¾ã›ã‚“ã§ã—ãŸã€‚" #~ msgid "Printing page %d, %d%% complete." #~ msgstr "ページ %d ã‚’å°åˆ·ä¸­ã€%d%% 完了ã—ã¾ã—ãŸã€‚" #~ msgid "Purge Jobs" #~ msgstr "ジョブã®å‰Šé™¤" #~ msgid "" #~ "Rank Owner Pri Job Files Total Size" #~ msgstr "" #~ "ランク 所有者 優先 ジョブ ファイル åˆè¨ˆã‚µã‚¤ã‚º" #~ msgid "Stylus Color Series" #~ msgstr "Stylus Color シリーズ" #~ msgid "Stylus Photo Series" #~ msgstr "Stylus Photo シリーズ" #~ msgid "" #~ "The '%s' Job Description attribute cannot be supplied in a job creation " #~ "request." #~ msgstr "'%s' Job Description 属性ã¯ã‚¸ãƒ§ãƒ–作æˆè¦æ±‚ã®ä¸­ã§æŒ‡å®šã§ãã¾ã›ã‚“。" #~ msgid "The output bin is almost full." #~ msgstr "排紙トレイãŒã»ã¨ã‚“ã©ä¸€æ¯ã§ã™ã€‚" #~ msgid "The output bin is full." #~ msgstr "排紙トレイãŒä¸€æ¯ã§ã™ã€‚" #~ msgid "The output bin is missing." #~ msgstr "排紙トレイãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #~ msgid "The paper tray is almost empty." #~ msgstr "用紙トレイãŒç©ºã«ãªã‚Šã‹ã‘ã¦ã„ã¾ã™ã€‚" #~ msgid "The paper tray is empty." #~ msgstr "用紙トレイãŒç©ºã§ã™ã€‚" #~ msgid "The paper tray is missing." #~ msgstr "用紙トレイãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #~ msgid "The paper tray needs to be filled." #~ msgstr "用紙トレイã«è£œå……ãŒå¿…è¦ã§ã™ã€‚" #~ msgid "The printer URI is incorrect or no longer exists." #~ msgstr "プリンター URI ãŒèª¤ã£ã¦ã„ã‚‹ã‹ã€ã‚‚ã†å­˜åœ¨ã—ã¾ã›ã‚“。" #~ msgid "The printer does not support IPP/%d.%d, trying IPP/%s." #~ msgstr "プリンター㌠IPP/%d.%d をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。IPP/%s を試ã—ã¾ã™ã€‚" #~ msgid "The printer is running low on ink." #~ msgstr "プリンターã®ã‚¤ãƒ³ã‚¯ãŒã‚‚ã†ã™ããªããªã‚Šã¾ã™ã€‚" #~ msgid "The printer is running low on toner." #~ msgstr "プリンターã®ãƒˆãƒŠãƒ¼ãŒã‚‚ã†ã™ããªããªã‚Šã¾ã™ã€‚" #~ msgid "There is a paper jam." #~ msgstr "用紙ã¥ã¾ã‚ŠãŒç™ºç”Ÿã—ã¦ã„ã¾ã™ã€‚" #~ msgid "Unable to copy interface script - %s" #~ msgstr "インターフェイススクリプトをコピーã§ãã¾ã›ã‚“ - %s" #~ msgid "Unable to create compressed print file" #~ msgstr "圧縮プリントファイルを作æˆã§ãã¾ã›ã‚“" #~ msgid "Unable to generate compressed print file" #~ msgstr "圧縮プリントファイルを生æˆã§ãã¾ã›ã‚“" #~ msgid "Unable to open compressed print file" #~ msgstr "圧縮プリントファイルを開ã‘ã¾ã›ã‚“" #~ msgid "Unable to resolve printer URI." #~ msgstr "プリンター URI を解決ã§ãã¾ã›ã‚“。" #~ msgid "Usage: cupsfilter [ options ] filename" #~ msgstr "ä½¿ã„æ–¹: cupsfilter [オプション] ファイルå" #~ msgid "" #~ "Usage: ippdiscover [options] -a\n" #~ " ippdiscover [options] \"service name\"\n" #~ "\n" #~ "Options:" #~ msgstr "" #~ "ä½¿ã„æ–¹: ippdiscover [オプション] -a\n" #~ " ippdiscover [オプション] \"サービスå\"\n" #~ "\n" #~ "オプション:" #~ msgid "Usage: lppasswd [-g groupname]" #~ msgstr "ä½¿ã„æ–¹: lppasswd [-g グループå]" #~ msgid "" #~ "Usage: lppasswd [-g groupname] [username]\n" #~ " lppasswd [-g groupname] -a [username]\n" #~ " lppasswd [-g groupname] -x [username]" #~ msgstr "" #~ "ä½¿ã„æ–¹: lppasswd [-g グループå] [ユーザーå]\n" #~ " lppasswd [-g グループå] -a [ユーザーå]\n" #~ " lppasswd [-g グループå] -x [ユーザーå]" #~ msgid "" #~ "Your password must be at least 6 characters long, cannot contain your " #~ "username, and must contain at least one letter and number." #~ msgstr "" #~ "パスワードã¯å°‘ãªãã¨ã‚‚ 6 文字以上ã§ã€ã‚ãªãŸã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚’å«ã‚“ã§ã¯ãªã‚‰ãšã€" #~ "å°‘ãªãã¨ã‚‚ 1 ã¤ã®è‹±å­—ãŠã‚ˆã³æ•°å€¤ã‚’å«ã‚“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #~ msgid "compression" #~ msgstr "Compression" #~ msgid "compression-accepted" #~ msgstr "Compression Accepted" #~ msgid "compression.compress" #~ msgstr "Compress" #~ msgid "compression.deflate" #~ msgstr "Deflate" #~ msgid "compression.gzip" #~ msgstr "Gzip" #~ msgid "compression.none" #~ msgstr "None" #~ msgid "cupsd: launchd(8) support not compiled in, running in normal mode." #~ msgstr "" #~ "cupsd: launchd(8) サãƒãƒ¼ãƒˆãŒã‚³ãƒ³ãƒ‘イルã•れã¦ã„ãªã„ã®ã§ã€é€šå¸¸ãƒ¢ãƒ¼ãƒ‰ã§å‹•作ã—" #~ "ã¾ã™ã€‚" #~ msgid "destination-accesses" #~ msgstr "Destination Accesses" #~ msgid "destination-statuses" #~ msgstr "Destination Statuses" #~ msgid "destination-uris" #~ msgstr "Destination Uris" #~ msgid "document-access" #~ msgstr "Document Access" #~ msgid "document-data-get-interval" #~ msgstr "Document Data Get Interval" #~ msgid "document-data-wait" #~ msgstr "Document Data Wait" #~ msgid "document-format-accepted" #~ msgstr "Document Format Accepted" #~ msgid "document-message" #~ msgstr "Document Message" #~ msgid "document-metadata" #~ msgstr "Document Metadata" #~ msgid "document-name" #~ msgstr "Document Name" #~ msgid "document-number" #~ msgstr "Document Number" #~ msgid "document-password" #~ msgstr "Document Password" #~ msgid "document-preprocessed" #~ msgstr "Document Preprocessed" #~ msgid "fetch-status-message" #~ msgstr "Fetch Status Message" #~ msgid "identify-actions" #~ msgstr "Identify Actions" #~ msgid "identify-actions.display" #~ msgstr "Display" #~ msgid "identify-actions.flash" #~ msgstr "Flash" #~ msgid "identify-actions.sound" #~ msgstr "Sound" #~ msgid "identify-actions.speak" #~ msgstr "Speak" #~ msgid "ipp-attribute-fidelity" #~ msgstr "Attribute Fidelity" #~ msgid "ipptool: \"-i\" and \"-n\" are incompatible with -X\"." #~ msgstr "ipptool: \"-i\" 㨠\"-n\" 㯠\"-X\" ã¨çµ„ã¿åˆã‚ã›ã‚‰ã‚Œã¾ã›ã‚“。" #~ msgid "ipptool: Bad version %s for \"-V\"." #~ msgstr "ipptool: \"-V\" オプションã«ä¸æ­£ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚" #~ msgid "ipptool: Missing timeout for \"-T\"." #~ msgstr "ipptool: \"-T\" ã«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã®æŒ‡å®šãŒã‚りã¾ã›ã‚“。" #~ msgid "ipptool: Missing version for \"-V\"." #~ msgstr "ipptool: \"-V\" ã«ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®æŒ‡å®šãŒã‚りã¾ã›ã‚“。" #~ msgid "job-authorization-uri" #~ msgstr "Job Authorization URI" #~ msgid "job-destination-spooling-supported.automatic" #~ msgstr "Automatic" #~ msgid "job-destination-spooling-supported.spool" #~ msgstr "Spool" #~ msgid "job-destination-spooling-supported.stream" #~ msgstr "Stream" #~ msgid "job-impressions-col" #~ msgstr "Job Impressions" #~ msgid "job-impressions-estimated" #~ msgstr "Job Impressions Estimated" #~ msgid "job-media-sheets-col" #~ msgstr "Job Media Sheets" #~ msgid "job-pages-per-set" #~ msgstr "Job Pages Per Set" #~ msgid "job-password" #~ msgstr "Job Password" #~ msgid "job-password-repertoire-configured" #~ msgstr "Job Password Repertoire Configured" #~ msgid "job-password-repertoire-supported.iana_us-ascii_any" #~ msgstr "Iana Us Ascii Any" #~ msgid "job-password-repertoire-supported.iana_us-ascii_complex" #~ msgstr "Iana Us Ascii Complex" #~ msgid "job-password-repertoire-supported.iana_us-ascii_digits" #~ msgstr "Iana Us Ascii Digits" #~ msgid "job-password-repertoire-supported.iana_us-ascii_letters" #~ msgstr "Iana Us Ascii Letters" #~ msgid "job-password-repertoire-supported.iana_utf-8_any" #~ msgstr "Iana Utf 8 Any" #~ msgid "job-password-repertoire-supported.iana_utf-8_digits" #~ msgstr "Iana Utf 8 Digits" #~ msgid "job-password-repertoire-supported.iana_utf-8_letters" #~ msgstr "Iana Utf 8 Letters" #~ msgid "job-settable-attributes-supported.job-name" #~ msgstr "Job Name" #~ msgid "job-settable-attributes-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.arithmetic" #~ msgstr "Arithmetic" #~ msgid "jpeg-features-supported.cmyk" #~ msgstr "Cmyk" #~ msgid "jpeg-features-supported.deep" #~ msgstr "Deep" #~ msgid "jpeg-features-supported.hierarchical" #~ msgstr "Hierarchical" #~ msgid "jpeg-features-supported.icc" #~ msgstr "Icc" #~ msgid "jpeg-features-supported.lossless" #~ msgstr "Lossless" #~ msgid "jpeg-features-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.progressive" #~ msgstr "Progressive" #~ msgid "lpadmin: Expected PPD after \"-P\" option." #~ msgstr "lpadmin: \"-P\" オプションã®ã‚ã¨ã«ã¯ PPD ãŒå¿…è¦ã§ã™ã€‚" #~ msgid "lpadmin: Expected interface after \"-i\" option." #~ msgstr "lpadmin: \"-i\" オプションã®ã‚ã¨ã«ã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスåãŒå¿…è¦ã§ã™ã€‚" #~ msgid "lpinfo: Unknown argument \"%s\"." #~ msgstr "lpinfo: 未知ã®å¼•æ•° \"%s\"。" #~ msgid "lpinfo: Unknown option \"%c\"." #~ msgstr "lpinfo: 未知ã®ã‚ªãƒ—ション \"%c\"。" #~ msgid "lpinfo: Unknown option \"%s\"." #~ msgstr "lpinfo: 未知ã®ã‚ªãƒ—ション \"%s\"。" #~ msgid "lpmove: Unknown option \"%c\"." #~ msgstr "lpmove: 未知ã®ã‚ªãƒ—ション \"%c\"。" #~ msgid "lppasswd: Only root can add or delete passwords." #~ msgstr "lppasswd: root ã ã‘ãŒãƒ‘スワードã®è¿½åŠ ã¨å‰Šé™¤ã‚’行ãˆã¾ã™ã€‚" #~ msgid "lppasswd: Password file busy." #~ msgstr "lppasswd: パスワードファイルãŒãƒ“ジー状態ã§ã™ã€‚" #~ msgid "lppasswd: Password file not updated." #~ msgstr "lppasswd: ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ›´æ–°ã•れã¾ã›ã‚“。" #~ msgid "lppasswd: Sorry, password doesn't match." #~ msgstr "lppasswd: 残念ãªãŒã‚‰ã€ãƒ‘スワードãŒãƒžãƒƒãƒã—ã¾ã›ã‚“。" #~ msgid "lppasswd: Sorry, password rejected." #~ msgstr "lppasswd: 残念ãªãŒã‚‰ã€ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã¯æ‹’å¦ã•れã¾ã—ãŸã€‚" #~ msgid "lppasswd: Sorry, passwords don't match." #~ msgstr "lppasswd: 残念ãªãŒã‚‰ã€ãƒ‘スワードãŒãƒžãƒƒãƒã—ã¾ã›ã‚“。" #~ msgid "lppasswd: Unable to copy password string: %s" #~ msgstr "lppasswd: パスワード文字列をコピーã§ãã¾ã›ã‚“: %s" #~ msgid "lppasswd: Unable to open password file: %s" #~ msgstr "lppasswd: パスワードファイルを開ã‘ã¾ã›ã‚“: %s" #~ msgid "lppasswd: Unable to write to password file: %s" #~ msgstr "lppasswd: ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã‚ã¾ã›ã‚“: %s" #~ msgid "lppasswd: failed to backup old password file: %s" #~ msgstr "lppasswd: å¤ã„パスワードファイルã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã«å¤±æ•—ã—ã¾ã—ãŸ: %s" #~ msgid "lppasswd: failed to rename password file: %s" #~ msgstr "lppasswd: パスワードファイルã®åå‰ã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸ: %s" #~ msgid "lppasswd: user \"%s\" and group \"%s\" do not exist." #~ msgstr "lppasswd: ユーザー \"%s\" ãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ— \"%s\" ã¯å­˜åœ¨ã—ã¾ã›ã‚“。" #~ msgid "material-type.pla-dissolvable" #~ msgstr "Pla Dissolvable" #~ msgid "media.om_large-photo_200x300mm" #~ msgstr "200 x 300mm" #~ msgid "notify-subscribed-event" #~ msgstr "Notify Event" #~ msgid "operations-supported.10" #~ msgstr "Get-Jobs" #~ msgid "operations-supported.11" #~ msgstr "Get-Printer-Attributes" #~ msgid "operations-supported.12" #~ msgstr "Hold-Job" #~ msgid "operations-supported.13" #~ msgstr "Release-Job" #~ msgid "operations-supported.14" #~ msgstr "Restart-Job" #~ msgid "operations-supported.16" #~ msgstr "Pause-Printer" #~ msgid "operations-supported.17" #~ msgstr "Resume-Printer" #~ msgid "operations-supported.18" #~ msgstr "Purge-Jobs" #~ msgid "operations-supported.19" #~ msgstr "Set-Printer-Attributes" #~ msgid "operations-supported.2" #~ msgstr "Print-Job" #~ msgid "operations-supported.20" #~ msgstr "Set-Job-Attributes" #~ msgid "operations-supported.21" #~ msgstr "Get-Printer-Supported-Values" #~ msgid "operations-supported.22" #~ msgstr "Create-Printer-Subscriptions" #~ msgid "operations-supported.23" #~ msgstr "Create-Job-Subscriptions" #~ msgid "operations-supported.24" #~ msgstr "Get-Subscription-Attributes" #~ msgid "operations-supported.25" #~ msgstr "Get-Subscriptions" #~ msgid "operations-supported.26" #~ msgstr "Renew-Subscription" #~ msgid "operations-supported.27" #~ msgstr "Cancel-Subscription" #~ msgid "operations-supported.28" #~ msgstr "Get-Notifications" #~ msgid "operations-supported.3" #~ msgstr "Print-URI" #~ msgid "operations-supported.34" #~ msgstr "Enable-Printer" #~ msgid "operations-supported.35" #~ msgstr "Disable-Printer" #~ msgid "operations-supported.36" #~ msgstr "Pause-Printer-After-Current-Job" #~ msgid "operations-supported.37" #~ msgstr "Hold-New-Jobs" #~ msgid "operations-supported.38" #~ msgstr "Release-Held-New-Jobs" #~ msgid "operations-supported.39" #~ msgstr "Deactivate-Printer" #~ msgid "operations-supported.4" #~ msgstr "Validate-Job" #~ msgid "operations-supported.40" #~ msgstr "Activate-Printer" #~ msgid "operations-supported.41" #~ msgstr "Restart-Printer" #~ msgid "operations-supported.42" #~ msgstr "Shutdown-Printer" #~ msgid "operations-supported.43" #~ msgstr "Startup-Printer" #~ msgid "operations-supported.44" #~ msgstr "Reprocess-Job" #~ msgid "operations-supported.45" #~ msgstr "Cancel-Current-Job" #~ msgid "operations-supported.46" #~ msgstr "Suspend-Current-Job" #~ msgid "operations-supported.47" #~ msgstr "Resume-Job" #~ msgid "operations-supported.48" #~ msgstr "Promote-Job" #~ msgid "operations-supported.49" #~ msgstr "Schedule-Job-After" #~ msgid "operations-supported.5" #~ msgstr "Create-Job" #~ msgid "operations-supported.51" #~ msgstr "Cancel-Document" #~ msgid "operations-supported.52" #~ msgstr "Get-Document-Attributes" #~ msgid "operations-supported.53" #~ msgstr "Get-Documents" #~ msgid "operations-supported.54" #~ msgstr "Delete-Document" #~ msgid "operations-supported.55" #~ msgstr "Set-Document-Attributes" #~ msgid "operations-supported.56" #~ msgstr "Cancel-Jobs" #~ msgid "operations-supported.57" #~ msgstr "Cancel-My-Jobs" #~ msgid "operations-supported.58" #~ msgstr "Resubmit-Job" #~ msgid "operations-supported.59" #~ msgstr "Close-Job" #~ msgid "operations-supported.6" #~ msgstr "Send-Document" #~ msgid "operations-supported.60" #~ msgstr "Identify-Printer" #~ msgid "operations-supported.61" #~ msgstr "Validate-Document" #~ msgid "operations-supported.62" #~ msgstr "Add-Document-Images" #~ msgid "operations-supported.63" #~ msgstr "Acknowledge-Document" #~ msgid "operations-supported.64" #~ msgstr "Acknowledge-Identify-Printer" #~ msgid "operations-supported.65" #~ msgstr "Acknowledge-Job" #~ msgid "operations-supported.66" #~ msgstr "Fetch-Document" #~ msgid "operations-supported.67" #~ msgstr "Fetch-Job" #~ msgid "operations-supported.68" #~ msgstr "Get-Output-Device-Attributes" #~ msgid "operations-supported.69" #~ msgstr "Update-Active-Jobs" #~ msgid "operations-supported.7" #~ msgstr "Send-URI" #~ msgid "operations-supported.70" #~ msgstr "Deregister-Output-Device" #~ msgid "operations-supported.71" #~ msgstr "Update-Document-Status" #~ msgid "operations-supported.72" #~ msgstr "Update-Job-Status" #~ msgid "operations-supported.73" #~ msgstr "Update-Output-Device-Attributes" #~ msgid "operations-supported.74" #~ msgstr "Get-Next-Document-Data" #~ msgid "operations-supported.8" #~ msgstr "Cancel-Job" #~ msgid "operations-supported.9" #~ msgstr "Get-Job-Attributes" #~ msgid "output-device" #~ msgstr "Output Device" #~ msgid "output-device-job-states" #~ msgstr "Output Device Job States" #~ msgid "output-device-uuid" #~ msgstr "Output Device Uuid" #~ msgid "pdf-features-supported.prc" #~ msgstr "Prc" #~ msgid "pdf-features-supported.u3d" #~ msgstr "U3d" #~ msgid "pdf-versions-supported.adobe-1.3" #~ msgstr "Adobe 1.3" #~ msgid "pdf-versions-supported.adobe-1.4" #~ msgstr "Adobe 1.4" #~ msgid "pdf-versions-supported.adobe-1.5" #~ msgstr "Adobe 1.5" #~ msgid "pdf-versions-supported.adobe-1.6" #~ msgstr "Adobe 1.6" #~ msgid "pdf-versions-supported.iso-15930-1_2001" #~ msgstr "ISO 15930-1:2001" #~ msgid "pdf-versions-supported.iso-15930-3_2002" #~ msgstr "ISO 15930-3:2002" #~ msgid "pdf-versions-supported.iso-15930-4_2003" #~ msgstr "ISO 15930-4:2003" #~ msgid "pdf-versions-supported.iso-15930-6_2003" #~ msgstr "ISO 15930-6:2003" #~ msgid "pdf-versions-supported.iso-15930-7_2010" #~ msgstr "ISO 15930-7:2010" #~ msgid "pdf-versions-supported.iso-15930-8_2010" #~ msgstr "ISO 15930-8:2010" #~ msgid "pdf-versions-supported.iso-16612-2_2010" #~ msgstr "ISO 16612-2:2010" #~ msgid "pdf-versions-supported.iso-19005-1_2005" #~ msgstr "ISO 19005-1:2005" #~ msgid "pdf-versions-supported.iso-19005-2_2011" #~ msgstr "ISO 19005-2:2011" #~ msgid "pdf-versions-supported.iso-19005-3_2012" #~ msgstr "ISO 19005-3:2012" #~ msgid "pdf-versions-supported.iso-32000-1_2008" #~ msgstr "ISO 32000-1:2008" #~ msgid "pdf-versions-supported.none" #~ msgstr "None" #~ msgid "pdf-versions-supported.pwg-5102.3" #~ msgstr "PWG 5102.3" #~ msgid "preferred-attributes" #~ msgstr "Preferred Attributes" #~ msgid "printer-mandatory-job-attributes" #~ msgstr "Printer Mandatory Job Attributes" #~ msgid "profile-uri-actual" #~ msgstr "Actual Profile URI" #~ msgid "requested-attributes.all" #~ msgstr "All" #~ msgid "requested-attributes.document-description" #~ msgstr "Document Description" #~ msgid "requested-attributes.document-template" #~ msgstr "Document Template" #~ msgid "requested-attributes.job-actuals" #~ msgstr "Job Actuals" #~ msgid "requested-attributes.job-description" #~ msgstr "Job Description" #~ msgid "requested-attributes.job-template" #~ msgstr "Job Template" #~ msgid "requested-attributes.printer-description" #~ msgstr "Printer Description" #~ msgid "requested-attributes.subscription-description" #~ msgstr "Subscription Description" #~ msgid "requested-attributes.subscription-template" #~ msgstr "Subscription Template" #~ msgid "requesting-user-name" #~ msgstr "Requesting User Name" #~ msgid "requesting-user-uri" #~ msgstr "Requesting User URI" #~ msgid "x-image-position" #~ msgstr "X Image Position" #~ msgid "x-image-position.center" #~ msgstr "Center" #~ msgid "x-image-position.left" #~ msgstr "Left" #~ msgid "x-image-position.none" #~ msgstr "None" #~ msgid "x-image-position.right" #~ msgstr "Right" #~ msgid "x-image-shift" #~ msgstr "X Image Shift" #~ msgid "x-side1-image-shift" #~ msgstr "X Front Side Image Shift" #~ msgid "x-side2-image-shift" #~ msgstr "X Back Side Image Shift" #~ msgid "y-image-position" #~ msgstr "Y Image Position" #~ msgid "y-image-position.bottom" #~ msgstr "Bottom" #~ msgid "y-image-position.center" #~ msgstr "Center" #~ msgid "y-image-position.none" #~ msgstr "None" #~ msgid "y-image-position.top" #~ msgstr "Top" #~ msgid "y-image-shift" #~ msgstr "Y Image Shift" #~ msgid "y-side1-image-shift" #~ msgstr "Y Front Side Image Shift" #~ msgid "y-side2-image-shift" #~ msgstr "Y Back Side Image Shift" cups-2.2.7/locale/cups_pt_BR.po000664 000765 000024 00001220416 13255074424 017020 0ustar00msweetstaff000000 000000 # # "$Id$" # # Brazilian Portuguese message catalog for CUPS. # # Copyright 2007-2014 by Apple Inc. # Copyright 2005-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # # Notes for Translators: # # The "checkpo" program located in the "locale" source directory can be used # to verify that your translations do not introduce formatting errors or other # problems. Run with: # # cd locale # ./checkpo cups_LL.po # # where "LL" is your locale. # # # CUPS Glossary/Terminologies en->pt_BR # # character set = conjunto de caracteres # find = encontrar # get = obter # locate = localizar # not supported = Sem suporte a # open = abrir # status = estado # unable = não foi possível # msgid "" msgstr "" "Project-Id-Version: CUPS 2.1.2\n" "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n" "POT-Creation-Date: 2018-03-19 18:36-0400\n" "PO-Revision-Date: 2016-01-31 16:45-0200\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.6\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" msgid "\t\t(all)" msgstr "\t\t(todos)" msgid "\t\t(none)" msgstr "\t\t(nenhum)" #, c-format msgid "\t%d entries" msgstr "\t%d registros" #, c-format msgid "\t%s" msgstr "\t%s" msgid "\tAfter fault: continue" msgstr "\tApós a falha: continuar" #, c-format msgid "\tAlerts: %s" msgstr "\tAlertas: %s" msgid "\tBanner required" msgstr "\tBanner é necessário" msgid "\tCharset sets:" msgstr "\tDefinições de conjunto de caracteres:" msgid "\tConnection: direct" msgstr "\tConexão: direta" msgid "\tConnection: remote" msgstr "\tConexão: remota" msgid "\tContent types: any" msgstr "\tTipos de conteúdos: qualquer" msgid "\tDefault page size:" msgstr "\tTamanho de página padrão:" msgid "\tDefault pitch:" msgstr "\tPitch padrão:" msgid "\tDefault port settings:" msgstr "\tConfiguração de porta padrão:" #, c-format msgid "\tDescription: %s" msgstr "\tDescrição: %s" msgid "\tForm mounted:" msgstr "\tFormulário montado:" msgid "\tForms allowed:" msgstr "\tFormulários permitidos:" #, c-format msgid "\tInterface: %s.ppd" msgstr "\tInterface: %s.ppd" #, c-format msgid "\tInterface: %s/ppd/%s.ppd" msgstr "\tInterface: %s/ppd/%s.ppd" #, c-format msgid "\tLocation: %s" msgstr "\tLocalização: %s" msgid "\tOn fault: no alert" msgstr "\tCaso de falha: nenhum alerta" msgid "\tPrinter types: unknown" msgstr "\tTipos de impressoras: desconhecido" #, c-format msgid "\tStatus: %s" msgstr "\tEstado: %s" msgid "\tUsers allowed:" msgstr "\tUsuários permitidos:" msgid "\tUsers denied:" msgstr "\tUsuários proibidos:" msgid "\tdaemon present" msgstr "\tdaemon presente" msgid "\tno entries" msgstr "\tnenhum registro" #, c-format msgid "\tprinter is on device '%s' speed -1" msgstr "\timpressora está na velocidade -1 do dispositivo \"%s\"" msgid "\tprinting is disabled" msgstr "\timpressão está desabilitada" msgid "\tprinting is enabled" msgstr "\timpressão está habilitada" #, c-format msgid "\tqueued for %s" msgstr "\tna fila de %s" msgid "\tqueuing is disabled" msgstr "\tenfileiramento está desabilitado" msgid "\tqueuing is enabled" msgstr "\tenfileiramento está habilitado" msgid "\treason unknown" msgstr "\tmotivo desconhecido" msgid "" "\n" " DETAILED CONFORMANCE TEST RESULTS" msgstr "" "\n" " RESULTADOS DETALHADOS DE TESTE DE CONFORMIDADE" msgid " Ignore specific warnings." msgstr " Ignora aviso específicos." msgid " Issue warnings instead of errors." msgstr " Emite avisos ao invés de erros." msgid " REF: Page 15, section 3.1." msgstr " REF: Página 15, seção 3.1." msgid " REF: Page 15, section 3.2." msgstr " REF: Página 15, seção 3.2." msgid " REF: Page 19, section 3.3." msgstr " REF: Página 19, seção 3.3." msgid " REF: Page 20, section 3.4." msgstr " REF: Página 20, seção 3.4." msgid " REF: Page 27, section 3.5." msgstr " REF: Página 27, seção 3.5." msgid " REF: Page 42, section 5.2." msgstr " REF: Página 42, seção 5.2." msgid " REF: Pages 16-17, section 3.2." msgstr " REF: Página 16-17, seção 3.2." msgid " REF: Pages 42-45, section 5.2." msgstr " REF: Página 42-45, seção 5.2." msgid " REF: Pages 45-46, section 5.2." msgstr " REF: Página 45-46, seção 5.2." msgid " REF: Pages 48-49, section 5.2." msgstr " REF: Página 48-49, seção 5.2." msgid " REF: Pages 52-54, section 5.2." msgstr " REF: Página 52-54, seção 5.2." #, c-format msgid " %-39.39s %.0f bytes" msgstr " %-39.39s %.0f bytes" #, c-format msgid " PASS Default%s" msgstr " PASSOU Default%s" msgid " PASS DefaultImageableArea" msgstr " PASSOU DefaultImageableArea" msgid " PASS DefaultPaperDimension" msgstr " PASSOU DefaultPaperDimension" msgid " PASS FileVersion" msgstr " PASSOU FileVersion" msgid " PASS FormatVersion" msgstr " PASSOU FormatVersion" msgid " PASS LanguageEncoding" msgstr " PASSOU LanguageEncoding" msgid " PASS LanguageVersion" msgstr " PASSOU LanguageVersion" msgid " PASS Manufacturer" msgstr " PASSOU Manufacturer" msgid " PASS ModelName" msgstr " PASSOU ModelName" msgid " PASS NickName" msgstr " PASSOU NickName" msgid " PASS PCFileName" msgstr " PASSOU PCFileName" msgid " PASS PSVersion" msgstr " PASSOU PSVersion" msgid " PASS PageRegion" msgstr " PASSOU PageRegion" msgid " PASS PageSize" msgstr " PASSOU PageSize" msgid " PASS Product" msgstr " PASSOU Product" msgid " PASS ShortNickName" msgstr " PASSOU ShortNickName" #, c-format msgid " WARN %s has no corresponding options." msgstr " AVISO %s não possui opções correspondentes." #, c-format msgid "" " WARN %s shares a common prefix with %s\n" " REF: Page 15, section 3.2." msgstr "" " AVISO %s compartilha um prefixo comum com %s\n" " REF: Página 15, seção 3.2." #, c-format msgid "" " WARN Duplex option keyword %s may not work as expected and should " "be named Duplex.\n" " REF: Page 122, section 5.17" msgstr "" " AVISO A opção Duplex de palavra-chave %s pode não funcionar como " "esperado e deve ser renomeada para Duplex.\n" " REF: Página 122, seção 5.17" msgid " WARN File contains a mix of CR, LF, and CR LF line endings." msgstr "" " AVISO Arquivo contém fim das linhas com uma mistura de CR, LF e CR " "LF." msgid "" " WARN LanguageEncoding required by PPD 4.3 spec.\n" " REF: Pages 56-57, section 5.3." msgstr "" " AVISO LanguageEncoding é necessário pela especificação PPD 4.3.\n" " REF: Páginas 56-57, seção 5.3." #, c-format msgid " WARN Line %d only contains whitespace." msgstr " AVISO Linha %d contém somente espaço em branco." msgid "" " WARN Manufacturer required by PPD 4.3 spec.\n" " REF: Pages 58-59, section 5.3." msgstr "" " AVISO Fabricante é necessário pela especificação PPD 4.3.\n" " REF: Páginas 58-59, seção 5.3." msgid "" " WARN Non-Windows PPD files should use lines ending with only LF, " "not CR LF." msgstr "" " AVISO Arquivos PPD de sistemas não-Windows deveriam usar fim de " "linhas somente com LR, e não CR LF." #, c-format msgid "" " WARN Obsolete PPD version %.1f.\n" " REF: Page 42, section 5.2." msgstr "" " AVISO PPD versão %.1f está obsoleto.\n" " REF: Página 42, seção 5.2." msgid "" " WARN PCFileName longer than 8.3 in violation of PPD spec.\n" " REF: Pages 61-62, section 5.3." msgstr "" " AVISO PCFileName maior que 8.3 em violação com especificação PPD.\n" " REF: Páginas 61-62, seção 5.3." msgid "" " WARN PCFileName should contain a unique filename.\n" " REF: Pages 61-62, section 5.3." msgstr "" " AVISO PCFileName deveria conter um nome de arquivo único.\n" " REF: Páginas 61-62, seção 5.3." msgid "" " WARN Protocols contains PJL but JCL attributes are not set.\n" " REF: Pages 78-79, section 5.7." msgstr "" " AVISO Protocolos contêm PJL, mas atributos de JCL não estão " "definidos.\n" " REF: Páginas 78-79, seção 5.7." msgid "" " WARN Protocols contains both PJL and BCP; expected TBCP.\n" " REF: Pages 78-79, section 5.7." msgstr "" " AVISO Protocolos contêm ambos PJL e BCP; esperava-se TBCP.\n" " REF: Páginas 78-79, seção 5.7." msgid "" " WARN ShortNickName required by PPD 4.3 spec.\n" " REF: Pages 64-65, section 5.3." msgstr "" " AVISO ShortNickName é necessário pela especificação PPD 4.3.\n" " REF: Páginas 64-65, seção 5.3." msgid " cupsaddsmb [options] -a" msgstr " cupsaddsmb [opções] -a" msgid " cupstestdsc [options] -" msgstr " cupstestdsc [opções] -" msgid " program | cupstestppd [options] -" msgstr " programa | cupstestppd [opções] -" #, c-format msgid "" " %s \"%s %s\" conflicts with \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." msgstr "" " %s \"%s %s\" conflita com \"%s %s\"\n" " (restrição=\"%s %s %s %s\")." #, c-format msgid " %s %s %s does not exist." msgstr " %s %s %s não existe." #, c-format msgid " %s %s file \"%s\" has the wrong capitalization." msgstr " %s Arquivo de %s \"%s\" possui letra maiúscula incorreta." #, c-format msgid "" " %s Bad %s choice %s.\n" " REF: Page 122, section 5.17" msgstr "" " %s Escolha %s inválida para %s.\n" " REF: Página 122, seção 5.17" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s." msgstr "" " %s Má string de tradução de \"%s\" em UTF-8 para a opção %s, escolha " "%s." #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s." msgstr " %s Má string de tradução de \"%s\" em UTF-8 para a opção %s." #, c-format msgid " %s Bad cupsFilter value \"%s\"." msgstr " %s Valor \"%s\" inválido para cupsFilter." #, c-format msgid " %s Bad cupsFilter2 value \"%s\"." msgstr " %s Valor \"%s\" inválido para cupsFilter2." #, c-format msgid " %s Bad cupsICCProfile %s." msgstr " %s cupsICCProfile %s inválido." #, c-format msgid " %s Bad cupsPreFilter value \"%s\"." msgstr " %s Valor \"%s\" inválido para cupsPreFilter." #, c-format msgid " %s Bad cupsUIConstraints %s: \"%s\"" msgstr " %s cupsUIConstraints %s inválido: \"%s\"" #, c-format msgid " %s Bad language \"%s\"." msgstr " %s Idioma \"%s\" inválido." #, c-format msgid " %s Bad permissions on %s file \"%s\"." msgstr " %s Permissões inválidas no arquivo %s \"%s\"." #, c-format msgid " %s Bad spelling of %s - should be %s." msgstr " %s Pronúncia incorreta de %s - deveria ser %s." #, c-format msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID." msgstr "" " %s Não é possível fornecer ambos APScanAppPath e APScanAppBundleID." #, c-format msgid " %s Default choices conflicting." msgstr " %s Escolhas padrão conflitando." #, c-format msgid " %s Empty cupsUIConstraints %s" msgstr " %s cupsUIConstraints %s vazia" #, c-format msgid " %s Missing \"%s\" translation string for option %s, choice %s." msgstr "" " %s Faltando string de tradução de \"%s\" para a opção %s, escolha %s." #, c-format msgid " %s Missing \"%s\" translation string for option %s." msgstr " %s Faltando string de tradução de \"%s\" para a opção %s." #, c-format msgid " %s Missing %s file \"%s\"." msgstr " %s Faltando %s arquivo \"%s\"." #, c-format msgid "" " %s Missing REQUIRED PageRegion option.\n" " REF: Page 100, section 5.14." msgstr "" " %s Faltando opção NECESSÃRIA PageRegion.\n" " REF: Página 100, seção 5.14." #, c-format msgid "" " %s Missing REQUIRED PageSize option.\n" " REF: Page 99, section 5.14." msgstr "" " %s Faltando opção NECESSÃRIA PageSize.\n" " REF: Página 99, seção 5.14." #, c-format msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" " %s Faltando escolha de *%s %s em UIConstraints \"*%s %s *%s %s\"." #, c-format msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" msgstr " %s Faltando escolha *%s %s em cupsUIConstraints %s: \"%s\"" #, c-format msgid " %s Missing cupsUIResolver %s" msgstr " %s Faltando cupsUIResolver %s" #, c-format msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"." msgstr " %s Faltando a opção %s em UIConstraints \"*%s %s *%s %s\"." #, c-format msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\"" msgstr " %s Faltando a opção %s em cupsUIConstraints %s: \"%s\"" #, c-format msgid " %s No base translation \"%s\" is included in file." msgstr " %s Nenhuma tradução base de \"%s\" está inclusa no arquivo." #, c-format msgid "" " %s REQUIRED %s does not define choice None.\n" " REF: Page 122, section 5.17" msgstr "" " %s %s NECESSÃRIO não define a escolha None.\n" " REF: Página 122, seção 5.17" #, c-format msgid " %s Size \"%s\" defined for %s but not for %s." msgstr " %s Tamanho \"%s\" definido para %s, mas não para %s." #, c-format msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)." msgstr " %s Tamanho \"%s\" tem dimensões inesperadas (%gx%g)." #, c-format msgid " %s Size \"%s\" should be \"%s\"." msgstr " %s Tamanho \"%s\" deveria ser \"%s\"." #, c-format msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"." msgstr "" " %s Tamanho \"%s\" deveria ser no padrão do Adobo chamado \"%s\"." #, c-format msgid " %s cupsICCProfile %s hash value collides with %s." msgstr " %s Valor de hash de cupsICCProfile %s colide com %s." #, c-format msgid " %s cupsUIResolver %s causes a loop." msgstr " %s cupsUIResolver %s causa um loop." #, c-format msgid "" " %s cupsUIResolver %s does not list at least two different options." msgstr "" " %s cupsUIResolver %s não lista pelo menos duas opções diferentes." #, c-format msgid "" " **FAIL** %s must be 1284DeviceID\n" " REF: Page 72, section 5.5" msgstr "" " **FALHA** %s deve ser 1284DeviceID\n" " REF: Página 72, seção 5.5" #, c-format msgid "" " **FAIL** Bad Default%s %s\n" " REF: Page 40, section 4.5." msgstr "" " **FALHA** Default%s inválido %s\n" " REF: Página 40, seção 4.5." #, c-format msgid "" " **FAIL** Bad DefaultImageableArea %s\n" " REF: Page 102, section 5.15." msgstr "" " **FALHA** DefaultImageableArea inválido %s\n" " REF: Página 102, seção 5.15." #, c-format msgid "" " **FAIL** Bad DefaultPaperDimension %s\n" " REF: Page 103, section 5.15." msgstr "" " **FALHA** DefaultPaperDimension inválido %s\n" " REF: Página 103, seção 5.15." #, c-format msgid "" " **FAIL** Bad FileVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" " **FALHA** FileVersion inválido \"%s\"\n" " REF: Página 56, seção 5.3." #, c-format msgid "" " **FAIL** Bad FormatVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" " **FALHA** FormatVersion inválido \"%s\"\n" " REF: Página 56, seção 5.3." msgid "" " **FAIL** Bad JobPatchFile attribute in file\n" " REF: Page 24, section 3.4." msgstr "" " **FALHA** Atributo inválido de JobPatchFile no arquivo\n" " REF: Página 24, seção 3.4." #, c-format msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1." msgstr " **FALHA** LanguageEncoding inválido %s - tem que ser ISOLatin1." #, c-format msgid " **FAIL** Bad LanguageVersion %s - must be English." msgstr " **FALHA** LanguageVersion inválido %s - deve ser Inglês." #, c-format msgid "" " **FAIL** Bad Manufacturer (should be \"%s\")\n" " REF: Page 211, table D.1." msgstr "" " **FALHA** Manufacturer inválido (deveria ser \"%s\")\n" " REF: Página 211, tabela D.1." #, c-format msgid "" " **FAIL** Bad ModelName - \"%c\" not allowed in string.\n" " REF: Pages 59-60, section 5.3." msgstr "" " **FALHA** ModelName inválido - \"%c\" não permitido na string.\n" " REF: Páginas 59-60, seção 5.3." msgid "" " **FAIL** Bad PSVersion - not \"(string) int\".\n" " REF: Pages 62-64, section 5.3." msgstr "" " **FALHA** PSVersion inválida - não \"(string) int\".\n" " REF: Páginas 62-64, seção 5.3." msgid "" " **FAIL** Bad Product - not \"(string)\".\n" " REF: Page 62, section 5.3." msgstr "" " **FALHA** Product inválido - não \"(string)\".\n" " REF: Página 62, seção 5.3." msgid "" " **FAIL** Bad ShortNickName - longer than 31 chars.\n" " REF: Pages 64-65, section 5.3." msgstr "" " **FALHA** ShortNickName inválido - maior do que 31 caracteres.\n" " REF: Páginas 64-65, seção 5.3." #, c-format msgid "" " **FAIL** Bad option %s choice %s\n" " REF: Page 84, section 5.9" msgstr "" " **FALHA** Opção inválido %s escolha %s\n" " REF: Página 84, seção 5.9" #, c-format msgid " **FAIL** Default option code cannot be interpreted: %s" msgstr " **FALHA** Código de opção padrão não pode ser interpretado: %s" #, c-format msgid "" " **FAIL** Default translation string for option %s choice %s contains " "8-bit characters." msgstr "" " **FALHA** String de tradução padrão para opção %s escolha %s contém " "caracteres de 8-bit." #, c-format msgid "" " **FAIL** Default translation string for option %s contains 8-bit " "characters." msgstr "" " **FALHA** String de tradução padrão para opção %s contém caracteres de " "8-bit." #, c-format msgid " **FAIL** Group names %s and %s differ only by case." msgstr "" " **FALHA** Nomes dos grupos %s e %s se diferem somente por maiúsculo/" "minúsculo." #, c-format msgid " **FAIL** Multiple occurrences of option %s choice name %s." msgstr " **FALHA** Múltiplas ocorrências da opção %s escolha de nome %s." #, c-format msgid " **FAIL** Option %s choice names %s and %s differ only by case." msgstr "" " **FALHA** Opção %s escolha de nomes %s e %s se diferem somente por " "maiúsculo/minúsculo." #, c-format msgid " **FAIL** Option names %s and %s differ only by case." msgstr "" " **FALHA** Os nomes de opção %s e %s se diferem somente por maiúsculo/" "minúsculo." #, c-format msgid "" " **FAIL** REQUIRED Default%s\n" " REF: Page 40, section 4.5." msgstr "" " **FALHA** NECESSÃRIO Default%s\n" " REF: Página 40, seção 4.5." msgid "" " **FAIL** REQUIRED DefaultImageableArea\n" " REF: Page 102, section 5.15." msgstr "" " **FALHA** NECESSÃRIO DefaultImageableArea\n" " REF: Página 102, seção 5.15." msgid "" " **FAIL** REQUIRED DefaultPaperDimension\n" " REF: Page 103, section 5.15." msgstr "" " **FALHA** NECESSÃRIO DefaultPaperDimension\n" " REF: Página 103, seção 5.15." msgid "" " **FAIL** REQUIRED FileVersion\n" " REF: Page 56, section 5.3." msgstr "" " **FALHA** NECESSÃRIO FileVersion\n" " REF: Página 56, seção 5.3." msgid "" " **FAIL** REQUIRED FormatVersion\n" " REF: Page 56, section 5.3." msgstr "" " **FALHA** NECESSÃRIO FormatVersion\n" " REF: Página 56, seção 5.3." #, c-format msgid "" " **FAIL** REQUIRED ImageableArea for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 102, section 5.15." msgstr "" " **FALHA** NECESSÃRIO ImageableArea para PageSize %s\n" " REF: Página 41, seção 5.\n" " REF: Página 102, seção 5.15." msgid "" " **FAIL** REQUIRED LanguageEncoding\n" " REF: Pages 56-57, section 5.3." msgstr "" " **FALHA** NECESSÃRIO LanguageEncoding\n" " REF: Páginas 56-57, seção 5.3." msgid "" " **FAIL** REQUIRED LanguageVersion\n" " REF: Pages 57-58, section 5.3." msgstr "" " **FALHA** NECESSÃRIO LanguageVersion\n" " REF: Páginas 57-58, seção 5.3." msgid "" " **FAIL** REQUIRED Manufacturer\n" " REF: Pages 58-59, section 5.3." msgstr "" " **FALHA** NECESSÃRIO Manufacturer\n" " REF: Páginas 58-59, seção 5.3." msgid "" " **FAIL** REQUIRED ModelName\n" " REF: Pages 59-60, section 5.3." msgstr "" " **FALHA** NECESSÃRIO ModelName\n" " REF: Páginas 59-60, seção 5.3." msgid "" " **FAIL** REQUIRED NickName\n" " REF: Page 60, section 5.3." msgstr "" " **FALHA** NECESSÃRIO NickName\n" " REF: Página 60, seção 5.3." msgid "" " **FAIL** REQUIRED PCFileName\n" " REF: Pages 61-62, section 5.3." msgstr "" " **FALHA** NECESSÃRIO PCFileName\n" " REF: Páginas 61-62, seção 5.3." msgid "" " **FAIL** REQUIRED PSVersion\n" " REF: Pages 62-64, section 5.3." msgstr "" " **FALHA** NECESSÃRIO PSVersion\n" " REF: Páginas 62-64, seção 5.3." msgid "" " **FAIL** REQUIRED PageRegion\n" " REF: Page 100, section 5.14." msgstr "" " **FALHA** NECESSÃRIO PageRegion\n" " REF: Página 100, seção 5.14." msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Page 41, section 5.\n" " REF: Page 99, section 5.14." msgstr "" " **FALHA** NECESSÃRIO PageSize\n" " REF: Página 41, seção 5.\n" " REF: Página 99, seção 5.14." msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Pages 99-100, section 5.14." msgstr "" " **FALHA** NECESSÃRIO PageSize\n" " REF: Páginas 99-100, seção 5.14." #, c-format msgid "" " **FAIL** REQUIRED PaperDimension for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 103, section 5.15." msgstr "" " **FALHA** NECESSÃRIO PaperDimension para PageSize %s\n" " REF: Página 41, seção 5.\n" " REF: Página 103, seção 5.15." msgid "" " **FAIL** REQUIRED Product\n" " REF: Page 62, section 5.3." msgstr "" " **FALHA** NECESSÃRIO Product\n" " REF: Página 62, seção 5.3." msgid "" " **FAIL** REQUIRED ShortNickName\n" " REF: Page 64-65, section 5.3." msgstr "" " **FALHA** NECESSÃRIO ShortNickName\n" " REF: Página 64-65, seção 5.3." #, c-format msgid " **FAIL** Unable to open PPD file - %s on line %d." msgstr " **FALHA** Não foi possível abrir o arquivo PPD - %s na linha %d." #, c-format msgid " %d ERRORS FOUND" msgstr " %d ERROS ENCONTRADOS" msgid " -h Show program usage" msgstr " -h Mostra formas de uso do programa" #, c-format msgid "" " Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:" msgstr "" " %%%%BoundingBox inválida: na linha %d.\n" " REF: Página 39, %%%%BoundingBox:" #, c-format msgid "" " Bad %%%%Page: on line %d.\n" " REF: Page 53, %%%%Page:" msgstr "" " %%%%Page inválida: na linha %d.\n" " REF: Página 53, %%%%Page:" #, c-format msgid "" " Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:" msgstr "" " %%%%Pages inválida: na linha %d.\n" " REF: Página 43, %%%%Pages:" #, c-format msgid "" " Line %d is longer than 255 characters (%d).\n" " REF: Page 25, Line Length" msgstr "" " Linha %d é maior do que 255 caracteres (%d).\n" " REF: Página 25, Line Length" msgid "" " Missing %!PS-Adobe-3.0 on first line.\n" " REF: Page 17, 3.1 Conforming Documents" msgstr "" " Faltando %!PS-Adobe-3.0 na primeira linha.\n" " REF: Página 17, 3.1 Conforming Documents" #, c-format msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments" msgstr "" " Faltando comentário de %%EndComments. REF: Página 41, " "%%EndComments" #, c-format msgid "" " Missing or bad %%BoundingBox: comment.\n" " REF: Page 39, %%BoundingBox:" msgstr "" " Faltando %%BoundingBox ou é inválido: comentário.\n" " REF: Página 39, %%BoundingBox:" #, c-format msgid "" " Missing or bad %%Page: comments.\n" " REF: Page 53, %%Page:" msgstr "" " Faltando %%Page ou inválido: comentários.\n" " REF: Página 53, %%Page:" #, c-format msgid "" " Missing or bad %%Pages: comment.\n" " REF: Page 43, %%Pages:" msgstr "" " Faltando %%Pages ou inválido: comentário.\n" " REF: Página 43, %%Pages:" msgid " NO ERRORS FOUND" msgstr " NENHUM ERRO ENCONTRADO" #, c-format msgid " Saw %d lines that exceeded 255 characters." msgstr " Cortadas %d linhas que excederam a 255 caracteres." #, c-format msgid " Too many %%BeginDocument comments." msgstr " Número excessivo de comentários de %%BeginDocument." #, c-format msgid " Too many %%EndDocument comments." msgstr " Número excessivo de comentários de %%EndDocument." msgid " Warning: file contains binary data." msgstr " Aviso: arquivo contém dados binários." #, c-format msgid " Warning: no %%EndComments comment in file." msgstr " Aviso: nenhum comentário de %%EndComments no arquivo." #, c-format msgid " Warning: obsolete DSC version %.1f in file." msgstr " Aviso: versão %.1f obsoleta de DSC no arquivo." msgid " ! expression Unary NOT of expression." msgstr " ! expressão Unário NÃO de expressão." msgid " ( expressions ) Group expressions." msgstr " ( expressões ) Grupo de expressões." msgid " --[no-]debug-logging Turn debug logging on/off." msgstr " --[no-]debug-logging Habilita ou desabilita depuração dos logs." msgid " --[no-]remote-admin Turn remote administration on/off." msgstr " --[no-]remote-admin Habilita ou desabilita administração remota." msgid " --[no-]remote-any Allow/prevent access from the Internet." msgstr " --[no-]remote-any Permite/proíbe acesso por meio da Internet." msgid " --[no-]share-printers Turn printer sharing on/off." msgstr "" " --[no-]share-printers Habilita ou desabilita compartilhamento de " "impressora." msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job." msgstr "" " --[no-]user-cancel-any Permite/proíbe os usuários cancelar qualquer " "trabalho." msgid " --cr End lines with CR (Mac OS 9)." msgstr " --cr Fim de linhas com CR (Mac OS 9)." msgid " --crlf End lines with CR + LF (Windows)." msgstr " --crlf Fim de linhas com CR + LF (Windows)." msgid " --domain regex Match domain to regular expression." msgstr " --domain regex Corresponde o domínio à expressão regular." msgid "" " --exec utility [argument ...] ;\n" " Execute program if true." msgstr "" " --exec utilitário [argumento ...] ;\n" " Executa o programa se verdadeiro." msgid " --false Always false." msgstr " --false Sempre falso." msgid " --help Show help." msgstr " --help Mostra ajuda." msgid " --help Show this help." msgstr " --help Mostra esta ajuda." msgid " --host regex Match hostname to regular expression." msgstr "" " --host regex Corresponde o nome da máquina à expressão regular." msgid " --lf End lines with LF (UNIX/Linux/macOS)." msgstr "" msgid " --list-filters List filters that will be used." msgstr " --list-filters Lista filtros que serão usados." msgid " --local True if service is local." msgstr " --local Verdadeiro se o serviço for local." msgid " --ls List attributes." msgstr " --ls Lista os atributos." msgid " --name regex Match service name to regular expression." msgstr "" " --name regex Corresponde o nome do serviço à expressão regular." msgid " --not expression Unary NOT of expression." msgstr " --not expressão Unário NÃO da expressão." msgid " --path regex Match resource path to regular expression." msgstr "" " --path regex Corresponde o caminho do recurso à expressão " "regular." msgid " --port number[-number] Match port to number or range." msgstr " --port número[-número] Corresponde a porta ao número ou faixa." msgid " --print Print URI if true." msgstr " --print Exibe a URI se verdadeiro." msgid " --print-name Print service name if true." msgstr " --print-name Exibe o nome do serviço se verdadeiro." msgid " --quiet Quietly report match via exit code." msgstr "" " --quiet Relata silenciosamente correspondências via\n" " código de saída." msgid " --remote True if service is remote." msgstr " --remote Verdeiro se o serviço for remoto." msgid "" " --stop-after-include-error\n" " Stop tests after a failed INCLUDE." msgstr "" " --stop-after-include-error\n" " Interrompe testes após um INCLUIDE falhar." msgid " --true Always true." msgstr " --true Sempre verdadeiro." msgid " --txt key True if the TXT record contains the key." msgstr "" " --txt chave Verdadeiro se o registro TXT contiver a chave." msgid " --txt-* regex Match TXT record key to regular expression." msgstr "" " --txt-* regex Corresponde a chave de registro TXT à expressão " "regular." msgid " --uri regex Match URI to regular expression." msgstr " --uri regex Corresponde a URI à expressão regular." msgid " --version Show program version." msgstr " --version Mostra a versão do programa." msgid " --version Show version." msgstr " --version Mostra a versão." msgid " -4 Connect using IPv4." msgstr " -4 Conecta usando IPv4." msgid " -6 Connect using IPv6." msgstr " -6 Conecta usando IPv6." msgid " -C Send requests using chunking (default)." msgstr " -C Envia requisições usando chunking (padrão)." msgid " -D Remove the input file when finished." msgstr " -D Remove o arquivo de entrada ao finalizar." msgid " -D name=value Set named variable to value." msgstr " -D nome=valor Define a variável \"nome\" com \"valor\"." msgid " -E Encrypt the connection." msgstr " -E Criptografa a conexão." msgid "" " -E Test with encryption using HTTP Upgrade to TLS." msgstr "" msgid "" " -F Run in the foreground but detach from console." msgstr "" " -F Executa em primeiro plano, mas desanexa do console." msgid " -H samba-server Use the named SAMBA server." msgstr "" " -H servidor-samba Usa o servidor SAMBA chamado \"servidor-samba\"." msgid " -I Ignore errors." msgstr " -I Ignora erros." msgid " -I include-dir Add include directory to search path." msgstr "" " -I dir-include Adiciona diretório de include ao caminho de " "pesquisa." msgid " -I {filename,filters,none,profiles}" msgstr " -I {filename,filters,none,profiles}" msgid " -L Send requests using content-length." msgstr " -L Envia requisições usando limite de conteúdo." msgid "" " -P filename.plist Produce XML plist to a file and test report to " "standard output." msgstr "" " -P arquivo.plist Produz a plist XML para um arquivo e testa " "relatar\n" " para a saída padrão." msgid " -P filename.ppd Set PPD file." msgstr " -P arquivo.ppd Define arquivo PPD." msgid " -P number[-number] Match port to number or range." msgstr " -P número[-número] Corresponde a porta ao número ou faixa." msgid " -R root-directory Set alternate root." msgstr " -R diretório-raiz Define diretório-raiz alternativo." msgid " -S Test with encryption using HTTPS." msgstr "" msgid " -T seconds Set the browse timeout in seconds." msgstr "" " -T segundos Define o tempo limite do navegador em segundos." msgid " -T seconds Set the receive/send timeout in seconds." msgstr "" " -T segundos Define o limite de tempo de recebimento/envio em\n" " segundos." msgid " -U username Specify username." msgstr " -U usuário Especifica nome do usuário." msgid " -V version Set default IPP version." msgstr " -V versão Define versão padrão de IPP." msgid "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgstr "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgid " -X Produce XML plist instead of plain text." msgstr " -X Produz plist XML ao invés de texto normal." msgid " -a Export all printers." msgstr " -a Exporta todas as impressoras." msgid " -c Produce CSV output." msgstr " -c Produz saída em CSV." msgid " -c catalog.po Load the specified message catalog." msgstr "" " -c catálogo.po Carrega o catálogo de mensagens especificado." msgid " -c cups-files.conf Set cups-files.conf file to use." msgstr "" " -c cups-files.conf Define o arquivo cups-files.conf para ser usado." msgid " -c cupsd.conf Set cupsd.conf file to use." msgstr " -c cupsd.conf Define o arquivo cupsd.conf a ser usado." msgid " -d name=value Set named variable to value." msgstr " -d nome=valor Define a variável \"nome\" com \"valor\"." msgid " -d output-dir Specify the output directory." msgstr " -d dir-saída Especifica o diretório de saída." msgid " -d printer Use the named printer." msgstr " -d impressora Usa a impressora informada." msgid " -d regex Match domain to regular expression." msgstr " -d regex Corresponde o domínio à expressão regular." msgid " -e Use every filter from the PPD file." msgstr " -e Usa todos os filtros do arquivo PPD." msgid " -f Run in the foreground." msgstr " -f Executa em primeiro plano." msgid " -f filename Set default request filename." msgstr "" " -f arquivo Define o nome de arquivo de requisição padrão." msgid " -h Show this usage message." msgstr " -h Exibe esta mensagem de uso." msgid " -h Validate HTTP response headers." msgstr "" msgid " -h regex Match hostname to regular expression." msgstr "" " -h regex Corresponde o nome da máquina à expressão regular." msgid " -h server[:port] Specify server address." msgstr " -h servidor[:porta] Especifica o endereço do servidor." msgid " -i mime/type Set input MIME type (otherwise auto-typed)." msgstr "" " -i tipo-mime Define o tipo MIME de entrada (caso " "contrário, tipo automático)." msgid "" " -i seconds Repeat the last file with the given time interval." msgstr "" " -i segundos Repete o último arquivo com o tempo de intervalo " "dado." msgid "" " -j job-id[,N] Filter file N from the specified job (default is " "file 1)." msgstr "" " -j job-id[,N] Filtra o arquivo N do trabalho especificado " "(o padrão é o arquivo 1)." msgid " -l List attributes." msgstr " -l Lista os atributos." msgid " -l Produce plain text output." msgstr " -l Produz saída em texto plano." msgid " -l Run cupsd on demand." msgstr " -l Executa o cupsd sob demanda." msgid " -l lang[,lang,...] Specify the output language(s) (locale)." msgstr " -l idioma[,idioma,...] Especifica o(s) idioma(s) de saída (locale)." msgid " -m Use the ModelName value as the filename." msgstr "" " -m Usa o valor de ModelName como o nome de arquivo." msgid "" " -m mime/type Set output MIME type (otherwise application/pdf)." msgstr "" " -m tipo-mime Define o tipo MIME de saída (caso " "contrário, aplicação/pdf)." msgid " -n copies Set number of copies." msgstr " -n cópias Define número de cópias." msgid "" " -n count Repeat the last file the given number of times." msgstr "" " -n contagem Repete o último arquivo o número de vezes dado." msgid " -n regex Match service name to regular expression." msgstr "" " -n regex Corresponde o nome do serviço à expressão regular." msgid "" " -o filename.drv Set driver information file (otherwise ppdi.drv)." msgstr "" " -o arquivo.drv Define o arquivo de informações do " "driver (caso contrário, ppdi.drv)." msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)." msgstr "" " -o arquivo.ppd[.gz] Define arquivo de saída (caso contrário, stdout)." msgid " -o name=value Set option(s)." msgstr " -o nome=valor Define opção/opções." msgid " -p Print URI if true." msgstr " -p Exibe a URI se verdadeiro." msgid " -p filename.ppd Set PPD file." msgstr " -p arquivo.ppd Define arquivo PPD." msgid " -q Quietly report match via exit code." msgstr "" " -q Relata silenciosamente correspondências via " "código de saída." msgid " -q Run silently." msgstr " -q Executa silenciosamente." msgid " -r True if service is remote." msgstr " -r Verdadeiro se o serviço for remoto." msgid " -r Use 'relaxed' open mode." msgstr " -r Usa modo aberto \"relaxado\"." msgid " -s Print service name if true." msgstr " -s Exibe o nome do serviço se verdadeiro." msgid " -s cups-files.conf Set cups-files.conf file to use." msgstr "" msgid " -t Produce a test report." msgstr " -t Produz um relatório de teste." msgid " -t Test PPDs instead of generating them." msgstr " -t Testa PPDs ao invés de criá-los." msgid " -t Test the configuration file." msgstr " -t Testa o arquivo de configuração." msgid " -t key True if the TXT record contains the key." msgstr "" " -t chave Verdadeiro se o registro TXT contiver a chave." msgid " -t title Set title." msgstr " -t título Define um título." msgid " -u Remove the PPD file when finished." msgstr " -u Remove o arquivo PPD ao final." msgid " -u regex Match URI to regular expression." msgstr " -u regex Corresponde a URI à expressão regular." msgid " -v Be verbose." msgstr " -v Modo detalhado." msgid " -vv Be very verbose." msgstr " -vv Modo muito detalhado." msgid "" " -x utility [argument ...] ;\n" " Execute program if true." msgstr "" " -x utilitário [argumento ...] ;\n" " Executa o programa se verdadeiro." msgid " -z Compress PPD files using GNU zip." msgstr " -z Compacta arquivos PPD usando GNU zip." msgid " IPPFIND_SERVICE_DOMAIN Domain name" msgstr " IPPFIND_SERVICE_DOMAIN Nome do domínio" msgid "" " IPPFIND_SERVICE_HOSTNAME\n" " Fully-qualified domain name" msgstr "" " IPPFIND_SERVICE_HOSTNAME\n" " Nome completo do domínio (FQDN)" msgid " IPPFIND_SERVICE_NAME Service instance name" msgstr " IPPFIND_SERVICE_NAME Nome da instância do serviço" msgid " IPPFIND_SERVICE_PORT Port number" msgstr " IPPFIND_SERVICE_PORT Número da porta" msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type" msgstr " IPPFIND_SERVICE_REGTYPE Tipo de registro DNS-SD" msgid " IPPFIND_SERVICE_SCHEME URI scheme" msgstr " IPPFIND_SERVICE_SCHEME Esquema URI" msgid " IPPFIND_SERVICE_URI URI" msgstr " IPPFIND_SERVICE_URI URI" msgid " IPPFIND_TXT_* Value of TXT record key" msgstr " IPPFIND_TXT_* Valor da chave de registro TXT" msgid "" " expression --and expression\n" " Logical AND." msgstr "" " expressão --and expressão\n" " AND lógico." msgid "" " expression --or expression\n" " Logical OR." msgstr "" " expressão --or expressão\n" " OR lógico." msgid " expression expression Logical AND." msgstr " expressão expressão AND lógico." msgid " {service_domain} Domain name" msgstr " {service_domain} Nome do domínio" msgid " {service_hostname} Fully-qualified domain name" msgstr " {service_hostname} Nome completo do domínio (FQDN)" msgid " {service_name} Service instance name" msgstr " {service_name} Nome da instância do serviço" msgid " {service_port} Port number" msgstr " {service_port} Número da porta" msgid " {service_regtype} DNS-SD registration type" msgstr " {service_regtype} Tipo de registro DNS-SD" msgid " {service_scheme} URI scheme" msgstr " {service_scheme} Esquema URI" msgid " {service_uri} URI" msgstr " {service_uri} URI" msgid " {txt_*} Value of TXT record key" msgstr " {txt_*} Valor da chave de registro TXT" msgid " {} URI" msgstr " {} URI" msgid " FAIL" msgstr " FALHA" msgid " PASS" msgstr " PASSOU" #, c-format msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section " "5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." msgstr "" #, c-format msgid "" "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 " "section 5.1.14)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section " "5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " "positive (RFC 8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC " "8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes" msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes" #, c-format msgid "%d x %d mm" msgstr "%d x %d mm" #, c-format msgid "%g x %g \"" msgstr "" #, c-format msgid "%s (%s)" msgstr "%s (%s)" #, c-format msgid "%s (%s, %s)" msgstr "%s (%s, %s)" #, c-format msgid "%s (Borderless)" msgstr "%s (Sem borda)" #, c-format msgid "%s (Borderless, %s)" msgstr "%s (Sem borda, %s)" #, c-format msgid "%s (Borderless, %s, %s)" msgstr "%s (Sem borda, %s, %s)" #, c-format msgid "%s accepting requests since %s" msgstr "%s está aceitando requisições desde %s" #, c-format msgid "%s cannot be changed." msgstr "%s não pode ser alterada." #, c-format msgid "%s is not implemented by the CUPS version of lpc." msgstr "%s não está implementada pela versão CUPS do lpc." #, c-format msgid "%s is not ready" msgstr "%s não está pronta" #, c-format msgid "%s is ready" msgstr "%s está pronta" #, c-format msgid "%s is ready and printing" msgstr "%s está pronta e imprimindo" #, c-format msgid "%s job-id user title copies options [file]" msgstr "%s job-id usuário título cópia opções [arquivo]" #, c-format msgid "%s not accepting requests since %s -" msgstr "%s não está aceitando requisições desde %s -" #, c-format msgid "%s not supported." msgstr "não há suporte a %s." #, c-format msgid "%s/%s accepting requests since %s" msgstr "%s/%s está aceitando requisições desde %s" #, c-format msgid "%s/%s not accepting requests since %s -" msgstr "%s/%s não está aceitando requisições desde %s -" #, c-format msgid "%s: %-33.33s [job %d localhost]" msgstr "%s: %-33.33s [trabalho %d localhost]" #. TRANSLATORS: Message is "subject: error" #, c-format msgid "%s: %s" msgstr "%s: %s" #, c-format msgid "%s: %s failed: %s" msgstr "%s: %s falhou: %s" #, c-format msgid "%s: Bad printer URI \"%s\"." msgstr "%s: URI de impressora inválida \"%s\"." #, c-format msgid "%s: Bad version %s for \"-V\"." msgstr "%s: Versão inválida %s para \"-V\"." #, c-format msgid "%s: Don't know what to do." msgstr "%s: Não sei o que fazer." #, c-format msgid "%s: Error - %s" msgstr "" #, c-format msgid "" "%s: Error - %s environment variable names non-existent destination \"%s\"." msgstr "" "%s: Erro - A variável de ambiente %s contém destino inexistente \"%s\"." #, c-format msgid "%s: Error - add '/version=1.1' to server name." msgstr "%s: Erro - adicione '/version=1.1' ao nome do servidor." #, c-format msgid "%s: Error - bad job ID." msgstr "%s: Erro - ID de trabalho inválido." #, c-format msgid "%s: Error - cannot print files and alter jobs simultaneously." msgstr "" "%s: Erro - não é possível imprimir arquivos e alterar trabalhos " "simultaneamente." #, c-format msgid "%s: Error - cannot print from stdin if files or a job ID are provided." msgstr "" "%s: Erro - não é possível imprimir de stdin se os arquivos ou um ID de " "trabalho forem fornecidos." #, c-format msgid "%s: Error - copies must be 1 or more." msgstr "" #, c-format msgid "%s: Error - expected character set after \"-S\" option." msgstr "%s: Erro - esperava uma codificação de caracteres após a opção \"-S\"." #, c-format msgid "%s: Error - expected content type after \"-T\" option." msgstr "%s: Erro - esperava um tipo de conteúdo após a opção \"-T\"." #, c-format msgid "%s: Error - expected copies after \"-#\" option." msgstr "%s: Erro - esperava cópias após a opção \"-#\"." #, c-format msgid "%s: Error - expected copies after \"-n\" option." msgstr "%s: Erro - esperava cópias após a opção \"-n\"." #, c-format msgid "%s: Error - expected destination after \"-P\" option." msgstr "%s: Erro - esperava um destino após a opção \"-P\"." #, c-format msgid "%s: Error - expected destination after \"-d\" option." msgstr "%s: Erro - esperava um destino após a opção \"-d\"." #, c-format msgid "%s: Error - expected form after \"-f\" option." msgstr "%s: Erro - esperava um formulário após a opção \"-f\"." #, c-format msgid "%s: Error - expected hold name after \"-H\" option." msgstr "%s: Erro - esperava um nome para segurar após a opção \"-H\"." #, c-format msgid "%s: Error - expected hostname after \"-H\" option." msgstr "%s: Erro - esperava o nome da máquina após a opção \"-H\"." #, c-format msgid "%s: Error - expected hostname after \"-h\" option." msgstr "%s: Erro - esperava o nome da máquina após a opção \"-h\"." #, c-format msgid "%s: Error - expected mode list after \"-y\" option." msgstr "%s: Erro - esperava uma lista de modos após a opção \"-y\"." #, c-format msgid "%s: Error - expected name after \"-%c\" option." msgstr "%s: Erro - esperava um nome após a opção \"-%c\"." #, c-format msgid "%s: Error - expected option=value after \"-o\" option." msgstr "%s: Erro - esperava opção=valor após a opção \"-o\"." #, c-format msgid "%s: Error - expected page list after \"-P\" option." msgstr "%s: Erro - esperava uma lista de página após a opção \"-P\"." #, c-format msgid "%s: Error - expected priority after \"-%c\" option." msgstr "%s: Erro - esperava uma prioridade após a opção \"-%c\"." #, c-format msgid "%s: Error - expected reason text after \"-r\" option." msgstr "%s: Erro - esperava um texto com motivo após a opção \"-r\"." #, c-format msgid "%s: Error - expected title after \"-t\" option." msgstr "%s: Erro - esperava um título após a opção \"-t\"." #, c-format msgid "%s: Error - expected username after \"-U\" option." msgstr "%s: Erro - esperava um nome de usuário após a opção \"-U\"." #, c-format msgid "%s: Error - expected username after \"-u\" option." msgstr "%s: Erro - esperava um nome de usuário após a opção \"-u\"." #, c-format msgid "%s: Error - expected value after \"-%c\" option." msgstr "%s: Erro - esperava um valor após a opção \"-%c\"." #, c-format msgid "" "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" " "option." msgstr "" "%s: Erro - precisa de \"completed\", \"not-completed\" ou \"all\" após a " "opção \"-W\"." #, c-format msgid "%s: Error - no default destination available." msgstr "%s: Erro - nenhum destino padrão disponível." #, c-format msgid "%s: Error - priority must be between 1 and 100." msgstr "%s: Erro - prioridade deve estar entre 1 e 100." #, c-format msgid "%s: Error - scheduler not responding." msgstr "%s: Erro - agendador não está respondendo." #, c-format msgid "%s: Error - too many files - \"%s\"." msgstr "%s: Erro - arquivos demais - \"%s\"." #, c-format msgid "%s: Error - unable to access \"%s\" - %s" msgstr "%s: Erro - não foi possível acessar \"%s\" - %s" #, c-format msgid "%s: Error - unable to queue from stdin - %s." msgstr "%s: Erro - não foi possível enfilerar de stdin - %s." #, c-format msgid "%s: Error - unknown destination \"%s\"." msgstr "%s: Erro - destino desconhecido \"%s\"." #, c-format msgid "%s: Error - unknown destination \"%s/%s\"." msgstr "%s: Erro - destino desconhecido \"%s/%s\"." #, c-format msgid "%s: Error - unknown option \"%c\"." msgstr "%s: Erro - opção desconhecida \"%c\"." #, c-format msgid "%s: Error - unknown option \"%s\"." msgstr "%s: Erro - opção desconhecida \"%s\"." #, c-format msgid "%s: Expected job ID after \"-i\" option." msgstr "%s: Esperava ID do trabalho após a \"-i\"." #, c-format msgid "%s: Invalid destination name in list \"%s\"." msgstr "%s: Nome de destino inválido na lista \"%s\"." #, c-format msgid "%s: Invalid filter string \"%s\"." msgstr "%s: String de filtro inválida \"%s\"." #, c-format msgid "%s: Missing filename for \"-P\"." msgstr "%s: Faltando nome de arquivo para \"-P\"." #, c-format msgid "%s: Missing timeout for \"-T\"." msgstr "%s: Faltando tempo de espera para \"-T\"." #, c-format msgid "%s: Missing version for \"-V\"." msgstr "%s: Faltando versão para \"-V\"." #, c-format msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"." msgstr "%s: Precisa de ID de trabalho (\"-i jobid\") antes de \"-H restart\"." #, c-format msgid "%s: No filter to convert from %s/%s to %s/%s." msgstr "%s: Nenhum filtro para converter de %s/%s para %s/%s." #, c-format msgid "%s: Operation failed: %s" msgstr "%s: Operação falhou: %s" #, c-format msgid "%s: Sorry, no encryption support." msgstr "%s: Desculpa, não há suporte a criptografia." #, c-format msgid "%s: Unable to connect to \"%s:%d\": %s" msgstr "%s: Não foi possível conectar a \"%s:%d\": %s" #, c-format msgid "%s: Unable to connect to server." msgstr "%s: Não foi possível conectar ao servidor." #, c-format msgid "%s: Unable to contact server." msgstr "%s: Não foi possível contactar o servidor." #, c-format msgid "%s: Unable to create PPD file: %s" msgstr "%s: Não foi possível criar o arquivo PDD: %s" #, c-format msgid "%s: Unable to determine MIME type of \"%s\"." msgstr "%s: Não foi possível determinar o tipo MIME de \"%s\"." #, c-format msgid "%s: Unable to open \"%s\": %s" msgstr "%s: Não foi possível abrir \"%s\": %s" #, c-format msgid "%s: Unable to open %s: %s" msgstr "%s: Não foi possível abrir %s: %s" #, c-format msgid "%s: Unable to open PPD file: %s on line %d." msgstr "%s: Não foi possível abrir o arquivo PPD: %s na linha %d." #, c-format msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"." msgstr "%s: Não foi possível ler o banco de dados MIME de \"%s\" ou \"%s\"." #, c-format msgid "%s: Unable to resolve \"%s\"." msgstr "%s: Não foi possível resolver \"%s\"." #, c-format msgid "%s: Unknown argument \"%s\"." msgstr "" #, c-format msgid "%s: Unknown destination \"%s\"." msgstr "%s: Destino desconhecido \"%s\"." #, c-format msgid "%s: Unknown destination MIME type %s/%s." msgstr "%s: Tipo de MIME de destino desconhecido %s/%s." #, c-format msgid "%s: Unknown option \"%c\"." msgstr "%s: Opção desconhecida \"%c\"." #, c-format msgid "%s: Unknown option \"%s\"." msgstr "%s: Opção desconhecida \"%s\"." #, c-format msgid "%s: Unknown option \"-%c\"." msgstr "%s: Opção desconhecida \"-%c\"." #, c-format msgid "%s: Unknown source MIME type %s/%s." msgstr "%s: Tipo MIME de origem desconhecida %s/%s." #, c-format msgid "" "%s: Warning - \"%c\" format modifier not supported - output may not be " "correct." msgstr "" "%s: Aviso - não há suporte ao modificador de formato \"%c\" - a saída pode " "não ficar correta." #, c-format msgid "%s: Warning - character set option ignored." msgstr "%s: Aviso - opção de conjunto de caracteres ignorada." #, c-format msgid "%s: Warning - content type option ignored." msgstr "%s: Aviso - opção de tipo de conteúdo ignorada." #, c-format msgid "%s: Warning - form option ignored." msgstr "%s: Aviso - opção de formulário ignorada." #, c-format msgid "%s: Warning - mode option ignored." msgstr "%s: Aviso - opção modo ignorada." msgid "-1" msgstr "-1" msgid "-10" msgstr "-10" msgid "-100" msgstr "-100" msgid "-105" msgstr "-105" msgid "-11" msgstr "-11" msgid "-110" msgstr "-110" msgid "-115" msgstr "-115" msgid "-12" msgstr "-12" msgid "-120" msgstr "-120" msgid "-13" msgstr "-13" msgid "-14" msgstr "-14" msgid "-15" msgstr "-15" msgid "-2" msgstr "-2" msgid "-20" msgstr "-20" msgid "-25" msgstr "-25" msgid "-3" msgstr "-3" msgid "-30" msgstr "-30" msgid "-35" msgstr "-35" msgid "-4" msgstr "-4" msgid "-40" msgstr "-40" msgid "-45" msgstr "-45" msgid "-5" msgstr "-5" msgid "-50" msgstr "-50" msgid "-55" msgstr "-55" msgid "-6" msgstr "-6" msgid "-60" msgstr "-60" msgid "-65" msgstr "-65" msgid "-7" msgstr "-7" msgid "-70" msgstr "-70" msgid "-75" msgstr "-75" msgid "-8" msgstr "-8" msgid "-80" msgstr "-80" msgid "-85" msgstr "-85" msgid "-9" msgstr "-9" msgid "-90" msgstr "-90" msgid "-95" msgstr "-95" msgid "0" msgstr "0" msgid "1" msgstr "1" msgid "1 inch/sec." msgstr "1 pol/seg." msgid "1.25x0.25\"" msgstr "1.25x0.25\"" msgid "1.25x2.25\"" msgstr "1.25x2.25\"" msgid "1.5 inch/sec." msgstr "1.5 pol/seg." msgid "1.50x0.25\"" msgstr "1.50x0.25\"" msgid "1.50x0.50\"" msgstr "1.50x0.50\"" msgid "1.50x1.00\"" msgstr "1.50x1.00\"" msgid "1.50x2.00\"" msgstr "1.50x2.00\"" msgid "10" msgstr "10" msgid "10 inches/sec." msgstr "10 pol/seg." msgid "10 x 11" msgstr "10 x 11" msgid "10 x 13" msgstr "10 x 13" msgid "10 x 14" msgstr "10 x 14" msgid "100" msgstr "100" msgid "100 mm/sec." msgstr "100 mm/s" msgid "105" msgstr "105" msgid "11" msgstr "11" msgid "11 inches/sec." msgstr "11 pol/s" msgid "110" msgstr "110" msgid "115" msgstr "115" msgid "12" msgstr "12" msgid "12 inches/sec." msgstr "12 pol/s" msgid "12 x 11" msgstr "12 x 11" msgid "120" msgstr "120" msgid "120 mm/sec." msgstr "120 mm/s" msgid "120x60dpi" msgstr "120x60dpi" msgid "120x72dpi" msgstr "120x72dpi" msgid "13" msgstr "13" msgid "136dpi" msgstr "136dpi" msgid "14" msgstr "14" msgid "15" msgstr "15" msgid "15 mm/sec." msgstr "15 mm/s" msgid "15 x 11" msgstr "15 x 11" msgid "150 mm/sec." msgstr "150 mm/s" msgid "150dpi" msgstr "150dpi" msgid "16" msgstr "16" msgid "17" msgstr "17" msgid "18" msgstr "18" msgid "180dpi" msgstr "180dpi" msgid "19" msgstr "19" msgid "2" msgstr "2" msgid "2 inches/sec." msgstr "2 pol/s" msgid "2-Hole Punch (Landscape)" msgstr "" msgid "2-Hole Punch (Portrait)" msgstr "" msgid "2-Hole Punch (Reverse Landscape)" msgstr "" msgid "2-Hole Punch (Reverse Portrait)" msgstr "" msgid "2-Sided Printing" msgstr "Frente e Verso" msgid "2.00x0.37\"" msgstr "2.00x0.37\"" msgid "2.00x0.50\"" msgstr "2.00x0.50\"" msgid "2.00x1.00\"" msgstr "2.00x1.00\"" msgid "2.00x1.25\"" msgstr "2.00x1.25\"" msgid "2.00x2.00\"" msgstr "2.00x2.00\"" msgid "2.00x3.00\"" msgstr "2.00x3.00\"" msgid "2.00x4.00\"" msgstr "2.00x4.00\"" msgid "2.00x5.50\"" msgstr "2.00x5.50\"" msgid "2.25x0.50\"" msgstr "2.25x0.50\"" msgid "2.25x1.25\"" msgstr "2.25x1.25\"" msgid "2.25x4.00\"" msgstr "2.25x4.00\"" msgid "2.25x5.50\"" msgstr "2.25x5.50\"" msgid "2.38x5.50\"" msgstr "2.38x5.50\"" msgid "2.5 inches/sec." msgstr "2.5 pol/s" msgid "2.50x1.00\"" msgstr "2.50x1.00\"" msgid "2.50x2.00\"" msgstr "2.50x2.00\"" msgid "2.75x1.25\"" msgstr "2.75x1.25\"" msgid "2.9 x 1\"" msgstr "2.9 x 1\"" msgid "20" msgstr "20" msgid "20 mm/sec." msgstr "20 mm/s" msgid "200 mm/sec." msgstr "200 mm/s" msgid "203dpi" msgstr "203dpi" msgid "21" msgstr "21" msgid "22" msgstr "22" msgid "23" msgstr "23" msgid "24" msgstr "24" msgid "24-Pin Series" msgstr "Séries de 24 agulhas" msgid "240x72dpi" msgstr "240x72dpi" msgid "25" msgstr "25" msgid "250 mm/sec." msgstr "250 mm/s" msgid "26" msgstr "26" msgid "27" msgstr "27" msgid "28" msgstr "28" msgid "29" msgstr "29" msgid "3" msgstr "3" msgid "3 inches/sec." msgstr "3 pol/s" msgid "3 x 5" msgstr "3 x 5" msgid "3-Hole Punch (Landscape)" msgstr "" msgid "3-Hole Punch (Portrait)" msgstr "" msgid "3-Hole Punch (Reverse Landscape)" msgstr "" msgid "3-Hole Punch (Reverse Portrait)" msgstr "" msgid "3.00x1.00\"" msgstr "3.00x1.00\"" msgid "3.00x1.25\"" msgstr "3.00x1.25\"" msgid "3.00x2.00\"" msgstr "3.00x2.00\"" msgid "3.00x3.00\"" msgstr "3.00x3.00\"" msgid "3.00x5.00\"" msgstr "3.00x5.00\"" msgid "3.25x2.00\"" msgstr "3.25x2.00\"" msgid "3.25x5.00\"" msgstr "3.25x5.00\"" msgid "3.25x5.50\"" msgstr "3.25x5.50\"" msgid "3.25x5.83\"" msgstr "3.25x5.83\"" msgid "3.25x7.83\"" msgstr "3.25x7.83\"" msgid "3.5 x 5" msgstr "3.5 x 5" msgid "3.5\" Disk" msgstr "Disco de 3.5\"" msgid "3.50x1.00\"" msgstr "3.50x1.00\"" msgid "30" msgstr "30" msgid "30 mm/sec." msgstr "30 mm/s" msgid "300 mm/sec." msgstr "300 mm/s" msgid "300dpi" msgstr "300dpi" msgid "35" msgstr "35" msgid "360dpi" msgstr "360dpi" msgid "360x180dpi" msgstr "360x180dpi" msgid "4" msgstr "4" msgid "4 inches/sec." msgstr "4 pol/s" msgid "4-Hole Punch (Landscape)" msgstr "" msgid "4-Hole Punch (Portrait)" msgstr "" msgid "4-Hole Punch (Reverse Landscape)" msgstr "" msgid "4-Hole Punch (Reverse Portrait)" msgstr "" msgid "4.00x1.00\"" msgstr "4.00x1.00\"" msgid "4.00x13.00\"" msgstr "4.00x13.00\"" msgid "4.00x2.00\"" msgstr "4.00x2.00\"" msgid "4.00x2.50\"" msgstr "4.00x2.50\"" msgid "4.00x3.00\"" msgstr "4.00x3.00\"" msgid "4.00x4.00\"" msgstr "4.00x4.00\"" msgid "4.00x5.00\"" msgstr "4.00x5.00\"" msgid "4.00x6.00\"" msgstr "4.00x6.00\"" msgid "4.00x6.50\"" msgstr "4.00x6.50\"" msgid "40" msgstr "40" msgid "40 mm/sec." msgstr "40 mm/s" msgid "45" msgstr "45" msgid "5" msgstr "5" msgid "5 inches/sec." msgstr "5 pol/s" msgid "5 x 7" msgstr "5 x 7" msgid "50" msgstr "50" msgid "55" msgstr "55" msgid "6" msgstr "6" msgid "6 inches/sec." msgstr "6 pol/s" msgid "6.00x1.00\"" msgstr "6.00x1.00\"" msgid "6.00x2.00\"" msgstr "6.00x2.00\"" msgid "6.00x3.00\"" msgstr "6.00x3.00\"" msgid "6.00x4.00\"" msgstr "6.00x4.00\"" msgid "6.00x5.00\"" msgstr "6.00x5.00\"" msgid "6.00x6.00\"" msgstr "6.00x6.00\"" msgid "6.00x6.50\"" msgstr "6.00x6.50\"" msgid "60" msgstr "60" msgid "60 mm/sec." msgstr "60 mm/s" msgid "600dpi" msgstr "600dpi" msgid "60dpi" msgstr "60dpi" msgid "60x72dpi" msgstr "60x72dpi" msgid "65" msgstr "65" msgid "7" msgstr "7" msgid "7 inches/sec." msgstr "7 pol/s" msgid "7 x 9" msgstr "7 x 9" msgid "70" msgstr "70" msgid "75" msgstr "75" msgid "8" msgstr "8" msgid "8 inches/sec." msgstr "8 pol/s" msgid "8 x 10" msgstr "8 x 10" msgid "8.00x1.00\"" msgstr "8.00x1.00\"" msgid "8.00x2.00\"" msgstr "8.00x2.00\"" msgid "8.00x3.00\"" msgstr "8.00x3.00\"" msgid "8.00x4.00\"" msgstr "8.00x4.00\"" msgid "8.00x5.00\"" msgstr "8.00x5.00\"" msgid "8.00x6.00\"" msgstr "8.00x6.00\"" msgid "8.00x6.50\"" msgstr "8.00x6.50\"" msgid "80" msgstr "80" msgid "80 mm/sec." msgstr "80 mm/s" msgid "85" msgstr "85" msgid "9" msgstr "9" msgid "9 inches/sec." msgstr "9 pol/s" msgid "9 x 11" msgstr "9 x 11" msgid "9 x 12" msgstr "9 x 12" msgid "9-Pin Series" msgstr "Série de 9 agulhas" msgid "90" msgstr "90" msgid "95" msgstr "95" msgid "?Invalid help command unknown." msgstr "?Comando de ajuda inválido desconhecido." msgid "A Samba password is required to export printer drivers" msgstr "Uma senha do Samba é necessária para exportar drivers de impressora" msgid "A Samba username is required to export printer drivers" msgstr "" "Um nome de usuário do Samba é necessário para exportar drivers de impressora" #, c-format msgid "A class named \"%s\" already exists." msgstr "Uma classe chamada \"%s\" já existe." #, c-format msgid "A printer named \"%s\" already exists." msgstr "Uma impressora chamada \"%s\" já existe." msgid "A0" msgstr "A0" msgid "A0 Long Edge" msgstr "A0 borda maior" msgid "A1" msgstr "A1" msgid "A1 Long Edge" msgstr "A1 borda maior" msgid "A10" msgstr "A10" msgid "A2" msgstr "A2" msgid "A2 Long Edge" msgstr "A2 borda maior" msgid "A3" msgstr "A3" msgid "A3 Long Edge" msgstr "A3 borda maior" msgid "A3 Oversize" msgstr "A3 grande" msgid "A3 Oversize Long Edge" msgstr "A3 borda muito maior" msgid "A4" msgstr "A4" msgid "A4 Long Edge" msgstr "A4 borda maior" msgid "A4 Oversize" msgstr "A4 grande" msgid "A4 Small" msgstr "A4 pequeno" msgid "A5" msgstr "A5" msgid "A5 Long Edge" msgstr "A5 borda maior" msgid "A5 Oversize" msgstr "A5 grande" msgid "A6" msgstr "A6" msgid "A6 Long Edge" msgstr "A6 borda maior" msgid "A7" msgstr "A7" msgid "A8" msgstr "A8" msgid "A9" msgstr "A9" msgid "ANSI A" msgstr "ANSI A" msgid "ANSI B" msgstr "ANSI B" msgid "ANSI C" msgstr "ANSI C" msgid "ANSI D" msgstr "ANSI D" msgid "ANSI E" msgstr "ANSI E" msgid "ARCH C" msgstr "ARCH C" msgid "ARCH C Long Edge" msgstr "ARCH C borda maior" msgid "ARCH D" msgstr "ARCH D" msgid "ARCH D Long Edge" msgstr "ARCH D borda maior" msgid "ARCH E" msgstr "ARCH E" msgid "ARCH E Long Edge" msgstr "ARCH E borda maior" msgid "Accept Jobs" msgstr "Aceitando trabalhos" msgid "Accepted" msgstr "Aceitou" msgid "Accordian Fold" msgstr "" msgid "Add Class" msgstr "Adicionar classe" msgid "Add Printer" msgstr "Adicionar impressora" msgid "Add RSS Subscription" msgstr "Adicionar inscrição RSS" msgid "Address" msgstr "Endereço" msgid "Administration" msgstr "Administração" msgid "Advanced Photo Paper" msgstr "" msgid "Alternate" msgstr "" msgid "Alternate Roll" msgstr "" msgid "Aluminum" msgstr "" msgid "Always" msgstr "Sempre" msgid "AppSocket/HP JetDirect" msgstr "AppSocket/HP JetDirect" msgid "Applicator" msgstr "Aplicador" msgid "Archival Envelope" msgstr "" msgid "Archival Fabric" msgstr "" msgid "Archival Paper" msgstr "" msgid "Archival Photo Paper" msgstr "" #, c-format msgid "Attempt to set %s printer-state to bad value %d." msgstr "" "Tentativa de definir o estado da impressora %s para o valor inválido %d." #, c-format msgid "Attribute \"%s\" is in the wrong group." msgstr "" #, c-format msgid "Attribute \"%s\" is the wrong value type." msgstr "" #, c-format msgid "Attribute groups are out of order (%x < %x)." msgstr "Grupos de atributos estão fora de ordem (%x < %x)." msgid "Automatic" msgstr "" msgid "B0" msgstr "B0" msgid "B1" msgstr "B1" msgid "B10" msgstr "B10" msgid "B2" msgstr "B2" msgid "B3" msgstr "B3" msgid "B4" msgstr "B4" msgid "B5" msgstr "B5" msgid "B5 Oversize" msgstr "B5 grande" msgid "B6" msgstr "B6" msgid "B7" msgstr "B7" msgid "B8" msgstr "B8" msgid "B9" msgstr "B9" msgid "Back Print Film" msgstr "" #, c-format msgid "Bad 'document-format' value \"%s\"." msgstr "Valor de \"document-format\" inválido \"%s\"." msgid "Bad NULL dests pointer" msgstr "Ponteiro de destinatário NULO inválido" msgid "Bad OpenGroup" msgstr "OpenGroup inválido" msgid "Bad OpenUI/JCLOpenUI" msgstr "OpenUI/JCLOpenUI inválido" msgid "Bad OrderDependency" msgstr "OrderDependency inválido" msgid "Bad PPD cache file." msgstr "Arquivo de cache de PPD inválido." msgid "Bad PPD file." msgstr "" msgid "Bad Request" msgstr "Requisição inválida" msgid "Bad SNMP version number" msgstr "Número de versão SNMP inválido" msgid "Bad UIConstraints" msgstr "UIConstraints inválido" msgid "Bad arguments to function" msgstr "Argumentos inválidos para função" #, c-format msgid "Bad copies value %d." msgstr "Valor de cópias inválido %d." msgid "Bad custom parameter" msgstr "Parâmetro personalizado inválido" #, c-format msgid "Bad device-uri \"%s\"." msgstr "device-uri inválido \"%s\"." #, c-format msgid "Bad device-uri scheme \"%s\"." msgstr "Esquema device-uri inválido \"%s\"." #, c-format msgid "Bad document-format \"%s\"." msgstr "document-format inválido \"%s\"." #, c-format msgid "Bad document-format-default \"%s\"." msgstr "document-format-default inválido \"%s\"." msgid "Bad filename buffer" msgstr "Buffer de nome de arquivo inválido" msgid "Bad hostname/address in URI" msgstr "Nome de máquina/Endereço inválidos na URI" #, c-format msgid "Bad job-name value: %s" msgstr "Valor de job-name inválido: %s" msgid "Bad job-name value: Wrong type or count." msgstr "Valor de job-name inválido: Quantidade ou tipo inválido." msgid "Bad job-priority value." msgstr "Valor job-priority inválido." #, c-format msgid "Bad job-sheets value \"%s\"." msgstr "Valor de job-sheets inválido \"%s\"." msgid "Bad job-sheets value type." msgstr "Tipo de valor de job-sheets inválido." msgid "Bad job-state value." msgstr "Valor de job-state inválido." #, c-format msgid "Bad job-uri \"%s\"." msgstr "job-uri inválido \"%s\"." #, c-format msgid "Bad notify-pull-method \"%s\"." msgstr "notify-pull-method inválido \"%s\"." #, c-format msgid "Bad notify-recipient-uri \"%s\"." msgstr "notify-recipient-uri inválido \"%s\"." #, c-format msgid "Bad number-up value %d." msgstr "Valor de number-up inválido %d." #, c-format msgid "Bad option + choice on line %d." msgstr "Opção + escolha inválidas na linha %d." #, c-format msgid "Bad page-ranges values %d-%d." msgstr "Valor de page-ranges inválido %d-%d." msgid "Bad port number in URI" msgstr "Número de porta inválida" #, c-format msgid "Bad port-monitor \"%s\"." msgstr "port-monitor inválido \"%s\"." #, c-format msgid "Bad printer-state value %d." msgstr "Valor de printer-state inválido %d." msgid "Bad printer-uri." msgstr "printer-uri inválido." #, c-format msgid "Bad request ID %d." msgstr "ID da requisição inválido %d." #, c-format msgid "Bad request version number %d.%d." msgstr "Número da versão de requisição inválido %d.%d." #, c-format msgid "Bad requesting-user-name value: %s" msgstr "" msgid "Bad resource in URI" msgstr "Recurso inválido na URI" msgid "Bad scheme in URI" msgstr "Esquema inválido na URI" msgid "Bad subscription ID" msgstr "ID de inscrição inválido" msgid "Bad username in URI" msgstr "Usuário inválido na URI" msgid "Bad value string" msgstr "String de valor inválido" msgid "Bad/empty URI" msgstr "URI vazia/inválida" msgid "Bale" msgstr "" msgid "Banners" msgstr "Banners" msgid "Bind" msgstr "" msgid "Bind (Landscape)" msgstr "" msgid "Bind (Portrait)" msgstr "" msgid "Bind (Reverse Landscape)" msgstr "" msgid "Bind (Reverse Portrait)" msgstr "" msgid "Bond Envelope" msgstr "" msgid "Bond Paper" msgstr "Papel autocolante" msgid "Booklet" msgstr "" msgid "Booklet Maker" msgstr "" #, c-format msgid "Boolean expected for waiteof option \"%s\"." msgstr "Esperava booleano para opção waiteof \"%s\"." msgid "Bottom" msgstr "" msgid "Bottom Tray" msgstr "" msgid "Buffer overflow detected, aborting." msgstr "Estouro de pilha do buffer detectado, abortando." msgid "CD" msgstr "" msgid "CMYK" msgstr "CMYK" msgid "CPCL Label Printer" msgstr "Impressora de etiqueta CPCL" msgid "Cancel Jobs" msgstr "Cancelar trabalhos" msgid "Cancel RSS Subscription" msgstr "Cancelar inscrição RSS" msgid "Canceling print job." msgstr "Cancelando trabalho de impressão." msgid "Cannot change printer-is-shared for remote queues." msgstr "" msgid "Cannot share a remote Kerberized printer." msgstr "Não foi possível compartilhar uma impressora remota via Kerberos." msgid "Cardboard" msgstr "" msgid "Cardstock" msgstr "" msgid "Cassette" msgstr "Cassette" msgid "Center" msgstr "" msgid "Center Tray" msgstr "" msgid "Change Settings" msgstr "Alterar configurações" #, c-format msgid "Character set \"%s\" not supported." msgstr "Não há suporte ao conjunto de caracteres \"%s\"." msgid "Classes" msgstr "Classes" msgid "Clean Print Heads" msgstr "Limpar cabeça de impressão" msgid "Close-Job doesn't support the job-uri attribute." msgstr "Close-Job não suporta o atributo job-uri." msgid "Coat" msgstr "" msgid "Coated Envelope" msgstr "" msgid "Coated Paper" msgstr "" msgid "Color" msgstr "Cor" msgid "Color Mode" msgstr "Modo colorido" msgid "Colored Labels" msgstr "" msgid "" "Commands may be abbreviated. Commands are:\n" "\n" "exit help quit status ?" msgstr "" "Comandos podem ser abreviados. Os comandos são:\n" "\n" "exit help quit status ?" msgid "Community name uses indefinite length" msgstr "Nome da comunidade usa comprimento indefinido" msgid "Connected to printer." msgstr "Conectado à impressora." msgid "Connecting to printer." msgstr "Conectando à impressora." msgid "Continue" msgstr "Continuar" msgid "Continuous" msgstr "Contínuo" msgid "Continuous Long" msgstr "" msgid "Continuous Short" msgstr "" msgid "Control file sent successfully." msgstr "Arquivo de controle enviado com sucesso." msgid "Copying print data." msgstr "Copiando dados de impressão." msgid "Cotton Envelope" msgstr "" msgid "Cotton Paper" msgstr "" msgid "Cover" msgstr "" msgid "Created" msgstr "Criada" msgid "Credentials do not validate against site CA certificate." msgstr "" msgid "Credentials have expired." msgstr "" msgid "Custom" msgstr "Personalizar" msgid "CustominCutInterval" msgstr "CustominCutInterval" msgid "CustominTearInterval" msgstr "CustominTearInterval" msgid "Cut" msgstr "Cortar" msgid "Cut Media" msgstr "" msgid "Cutter" msgstr "Cortador" msgid "DVD" msgstr "" msgid "Dark" msgstr "Escuro" msgid "Darkness" msgstr "Escuridão" msgid "Data file sent successfully." msgstr "Arquivo de dados enviado com sucesso." msgid "Deep Color" msgstr "" msgid "Delete Class" msgstr "Excluir classe" msgid "Delete Printer" msgstr "Excluir impressora" msgid "DeskJet Series" msgstr "DeskJet Séries" #, c-format msgid "Destination \"%s\" is not accepting jobs." msgstr "Destino \"%s\" não está aceitando trabalhos." #, c-format msgid "" "Device: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s" msgstr "" "Dispositivo: uri = %s\n" " classe = %s\n" " info = %s\n" " marca-e-modelo = %s\n" " dispo-id = %s\n" " localização = %s" msgid "Direct Thermal Media" msgstr "Mídia Térmica Direta" #, c-format msgid "Directory \"%s\" contains a relative path." msgstr "Diretório \"%s\" contém um caminho relativo." #, c-format msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "Diretório \"%s\" contém permissões inseguras (0%o/uid=%d/gid=%d)." #, c-format msgid "Directory \"%s\" is a file." msgstr "Diretório \"%s\" é um arquivo." #, c-format msgid "Directory \"%s\" not available: %s" msgstr "Diretório \"%s\" não está disponível: %s" #, c-format msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "Permissões do diretório \"%s\" estão OK (0%o/uid=%d/gid=%d)." msgid "Disabled" msgstr "Desabilitado" msgid "Disc" msgstr "" #, c-format msgid "Document #%d does not exist in job #%d." msgstr "Documento #%d não existe no trabalho #%d." msgid "Double Gate Fold" msgstr "" msgid "Double Staple (Landscape)" msgstr "" msgid "Double Staple (Portrait)" msgstr "" msgid "Double Staple (Reverse Landscape)" msgstr "" msgid "Double Staple (Reverse Portrait)" msgstr "" msgid "Double Wall Cardboard" msgstr "" msgid "Draft" msgstr "" msgid "Dry Film" msgstr "" msgid "Duplexer" msgstr "Duplexador" msgid "Dymo" msgstr "Dymo" msgid "EPL1 Label Printer" msgstr "Impressora de etiqueta EPL1" msgid "EPL2 Label Printer" msgstr "Impressora de etiqueta EPL2" msgid "Edit Configuration File" msgstr "Editar arquivo de configuração" msgid "Embossing Foil" msgstr "" msgid "Empty PPD file." msgstr "Arquivo PPD vazio." msgid "Encryption is not supported." msgstr "Não há suporte a criptografia." msgid "End Board" msgstr "" #. TRANSLATORS: Banner/cover sheet after the print job. msgid "Ending Banner" msgstr "Banner ao final" msgid "Engineering Z Fold" msgstr "" msgid "English" msgstr "Inglês" msgid "" "Enter your username and password or the root username and password to access " "this page. If you are using Kerberos authentication, make sure you have a " "valid Kerberos ticket." msgstr "" "Digite seu nome de usuário e senha, ou do usuário root, para acessar esta " "página. Se você estiver usando autenticação Kerberos, certifique-se de que " "você tem um ticket Kerberos válido." msgid "Envelope" msgstr "" msgid "Envelope #10" msgstr "" msgid "Envelope #11" msgstr "Envelope #11" msgid "Envelope #12" msgstr "Envelope #12" msgid "Envelope #14" msgstr "Envelope #14" msgid "Envelope #9" msgstr "Envelope #9" msgid "Envelope B4" msgstr "Envelope B4" msgid "Envelope B5" msgstr "Envelope B5" msgid "Envelope B6" msgstr "Envelope B6" msgid "Envelope C0" msgstr "Envelope C0" msgid "Envelope C1" msgstr "Envelope C1" msgid "Envelope C2" msgstr "Envelope C2" msgid "Envelope C3" msgstr "Envelope C3" msgid "Envelope C4" msgstr "Envelope C4" msgid "Envelope C5" msgstr "Envelope C5" msgid "Envelope C6" msgstr "Envelope C6" msgid "Envelope C65" msgstr "Envelope C65" msgid "Envelope C7" msgstr "Envelope C7" msgid "Envelope Choukei 3" msgstr "Envelope Choukei 3" msgid "Envelope Choukei 3 Long Edge" msgstr "Envelope Choukei 3 borda maior" msgid "Envelope Choukei 4" msgstr "Envelope Choukei 4" msgid "Envelope Choukei 4 Long Edge" msgstr "Envelope Choukei 4 borda maior" msgid "Envelope DL" msgstr "Envelope DL" msgid "Envelope Feed" msgstr "Alimentação de Envelope" msgid "Envelope Invite" msgstr "Envelope Convite" msgid "Envelope Italian" msgstr "Envelope Italiano" msgid "Envelope Kaku2" msgstr "Envelope Kaku2" msgid "Envelope Kaku2 Long Edge" msgstr "Envelope Kaku2 borda maior" msgid "Envelope Kaku3" msgstr "Envelope Kaku3" msgid "Envelope Kaku3 Long Edge" msgstr "Envelope Kaku3 borda maior" msgid "Envelope Monarch" msgstr "Envelope Monarch" msgid "Envelope PRC1" msgstr "" msgid "Envelope PRC1 Long Edge" msgstr "Envelope PRC1 borda maior" msgid "Envelope PRC10" msgstr "Envelope PRC10" msgid "Envelope PRC10 Long Edge" msgstr "Envelope PRC10 borda maior" msgid "Envelope PRC2" msgstr "Envelope PRC2" msgid "Envelope PRC2 Long Edge" msgstr "Envelope PRC2 borda maior" msgid "Envelope PRC3" msgstr "Envelope PRC3" msgid "Envelope PRC3 Long Edge" msgstr "Envelope PRC3 borda maior" msgid "Envelope PRC4" msgstr "Envelope PRC4" msgid "Envelope PRC4 Long Edge" msgstr "Envelope PRC4 borda maior" msgid "Envelope PRC5 Long Edge" msgstr "Envelope PRC5 borda maior" msgid "Envelope PRC5PRC5" msgstr "Envelope PRC5" msgid "Envelope PRC6" msgstr "Envelope PRC6" msgid "Envelope PRC6 Long Edge" msgstr "Envelope PRC6 borda maior" msgid "Envelope PRC7" msgstr "Envelope PRC7" msgid "Envelope PRC7 Long Edge" msgstr "Envelope PRC7 borda maior" msgid "Envelope PRC8" msgstr "Envelope PRC8" msgid "Envelope PRC8 Long Edge" msgstr "Envelope PRC8 borda maior" msgid "Envelope PRC9" msgstr "Envelope PRC9" msgid "Envelope PRC9 Long Edge" msgstr "Envelope PRC9 borda maior" msgid "Envelope Personal" msgstr "Envelope Pessoal" msgid "Envelope You4" msgstr "Envelope You4" msgid "Envelope You4 Long Edge" msgstr "Envelope You4 borda maior" msgid "Environment Variables:" msgstr "Variáveis de ambiente:" msgid "Epson" msgstr "Epson" msgid "Error Policy" msgstr "Política de erro" msgid "Error reading raster data." msgstr "Erro ao ler dados de rasterização." msgid "Error sending raster data." msgstr "Erro ao enviar dados de rasterização." msgid "Error: need hostname after \"-h\" option." msgstr "Erro: precisa de nome da máquina após a opção \"-h\"." msgid "European Fanfold" msgstr "" msgid "European Fanfold Legal" msgstr "" msgid "Every 10 Labels" msgstr "A cada 10 etiquetas" msgid "Every 2 Labels" msgstr "A cada 2 etiquetas" msgid "Every 3 Labels" msgstr "A cada 3 etiquetas" msgid "Every 4 Labels" msgstr "A cada 4 etiquetas" msgid "Every 5 Labels" msgstr "A cada 5 etiquetas" msgid "Every 6 Labels" msgstr "A cada 6 etiquetas" msgid "Every 7 Labels" msgstr "A cada 7 etiquetas" msgid "Every 8 Labels" msgstr "A cada 8 etiquetas" msgid "Every 9 Labels" msgstr "A cada 9 etiquetas" msgid "Every Label" msgstr "A cada etiqueta" msgid "Everyday Glossy Photo Paper" msgstr "" msgid "Everyday Matte Paper" msgstr "" msgid "Executive" msgstr "Executivo" msgid "Expectation Failed" msgstr "Falhou a expectativa" msgid "Export Printers to Samba" msgstr "Exportar impressoras para o Samba" msgid "Expressions:" msgstr "Expressões:" msgid "Extra Heavyweight Paper" msgstr "" msgid "FAIL" msgstr "FALHA" msgid "Fabric" msgstr "" msgid "Face Down" msgstr "" msgid "Face Up" msgstr "" msgid "Fast Grayscale" msgstr "" #, c-format msgid "File \"%s\" contains a relative path." msgstr "Arquivo \"%s\" contém um caminho relativo." #, c-format msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "Arquivo \"%s\" tem permissões inseguras (0%o/uid=%d/gid=%d)." #, c-format msgid "File \"%s\" is a directory." msgstr "Arquivo \"%s\" é um diretório." #, c-format msgid "File \"%s\" not available: %s" msgstr "Arquivo \"%s\" não está disponível: %s" #, c-format msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "Permissões do arquivo \"%s\" estão OK (0%o/uid=%d/gid=%d)." msgid "File Folder" msgstr "" #, c-format msgid "" "File device URIs have been disabled. To enable, see the FileDevice directive " "in \"%s/cups-files.conf\"." msgstr "" "URIs de arquivos de dispositivo foram desabilitadas. Para habilitar, veja a " "diretiva FileDevice em \"%s/cups-files.conf\"." msgid "Film" msgstr "" msgid "Fine Envelope" msgstr "" #, c-format msgid "Finished page %d." msgstr "Terminou página %d." msgid "Flexo Base" msgstr "" msgid "Flexo Photo Polymer" msgstr "" msgid "Flute" msgstr "" msgid "Foil" msgstr "" msgid "Fold" msgstr "" msgid "Folio" msgstr "Fólio" msgid "Forbidden" msgstr "Proibido" msgid "Found" msgstr "" msgid "Full Cut Tabs" msgstr "" msgid "Gate Fold" msgstr "" msgid "General" msgstr "Geral" msgid "Generic" msgstr "Genérico" msgid "Get-Response-PDU uses indefinite length" msgstr "Get-Response-PDU usa comprimento indefinido" msgid "Glass" msgstr "" msgid "Glass Colored" msgstr "" msgid "Glass Opaque" msgstr "" msgid "Glass Surfaced" msgstr "" msgid "Glass Textured" msgstr "" msgid "Glossy Brochure Paper" msgstr "" msgid "Glossy Fabric" msgstr "" msgid "Glossy Labels" msgstr "" msgid "Glossy Optical Disc" msgstr "" msgid "Glossy Paper" msgstr "Papel brilhante" msgid "Glossy Photo Paper" msgstr "" msgid "Got a printer-uri attribute but no job-id." msgstr "Atributo printer-ui obtido, mas nenhum job-id." msgid "Gravure Cylinder" msgstr "" msgid "Grayscale" msgstr "Escalas de cinza" msgid "HP" msgstr "HP" msgid "Hagaki" msgstr "" msgid "Half Fold" msgstr "" msgid "Half Z Fold" msgstr "" msgid "Hanging Folder" msgstr "Pasta suspensa" msgid "Hash buffer too small." msgstr "" msgid "Heavyweight Coated Paper" msgstr "" msgid "Heavyweight Envelope" msgstr "" msgid "Heavyweight Paper" msgstr "" msgid "Help file not in index." msgstr "Arquivo de ajuda não está no índice." msgid "High" msgstr "" msgid "High Gloss Fabric" msgstr "" msgid "High Gloss Labels" msgstr "" msgid "High Gloss Optical Disc" msgstr "" msgid "High Gloss Photo Paper" msgstr "" msgid "IPP 1setOf attribute with incompatible value tags." msgstr "Atributo 1setOf de IPP com tags de valor incompatível." msgid "IPP attribute has no name." msgstr "Atributo de IPP não tem nome." msgid "IPP attribute is not a member of the message." msgstr "Atributo de IPP não é um membro da mensagem." msgid "IPP begCollection value not 0 bytes." msgstr "Valor begCollection de IPP não contém 0 bytes." msgid "IPP boolean value not 1 byte." msgstr "Valor booleano de IPP não contém 1 byte." msgid "IPP date value not 11 bytes." msgstr "Valor de data de IPP não contém 11 bytes." msgid "IPP endCollection value not 0 bytes." msgstr "Valor endCollection IPP não contém 0 bytes." msgid "IPP enum value not 4 bytes." msgstr "Valor enum de IPP não contém 4 bytes." msgid "IPP extension tag larger than 0x7FFFFFFF." msgstr "Tag de extensão de IPP maior do que 0x7FFFFFFF." msgid "IPP integer value not 4 bytes." msgstr "Valor inteiro de IPP não contém 4 bytes." msgid "IPP language length overflows value." msgstr "Comprimento do idioma de IPP excede o valor." msgid "IPP language length too large." msgstr "Comprimento do idioma de IPP muito grande." msgid "IPP member name is not empty." msgstr "Nome de membro de IPP não está vazio." msgid "IPP memberName value is empty." msgstr "Valor de memberName de IPP está vazio." msgid "IPP memberName with no attribute." msgstr "memberName de IPP sem atributo algum." msgid "IPP name larger than 32767 bytes." msgstr "Nome de IPP maior do que 32767 bytes." msgid "IPP nameWithLanguage value less than minimum 4 bytes." msgstr "Valor de nameWithLanguage de IPP menor do que o mínimo de 4 bytes." msgid "IPP octetString length too large." msgstr "Comprimento de octetString de IPP muito grande." msgid "IPP rangeOfInteger value not 8 bytes." msgstr "Valor de rangeOfInteger de IPP não contém 8 bytes." msgid "IPP resolution value not 9 bytes." msgstr "Valor de resolução de IPP não contém 9 bytes." msgid "IPP string length overflows value." msgstr "Comprimento da string de IPP excede o valor." msgid "IPP textWithLanguage value less than minimum 4 bytes." msgstr "Valor de textWithLanguage de IPP menor do que o mínimo de 4 bytes." msgid "IPP value larger than 32767 bytes." msgstr "Valor de IPP maior do que 32767 bytes." msgid "ISOLatin1" msgstr "ISOLatin1" msgid "Illegal control character" msgstr "Caractere de controle é ilegal" msgid "Illegal main keyword string" msgstr "String ilegal de palavra-chave principal" msgid "Illegal option keyword string" msgstr "String ilegal de palavra-chave de opção" msgid "Illegal translation string" msgstr "String ilegal de tradução" msgid "Illegal whitespace character" msgstr "Caractere ilegal de espaço em branco" msgid "Image Setter Paper" msgstr "" msgid "Imaging Cylinder" msgstr "" msgid "Inkjet Envelope" msgstr "" msgid "Inkjet Labels" msgstr "" msgid "Inkjet Paper" msgstr "" msgid "Installable Options" msgstr "Opções instaláveis" msgid "Installed" msgstr "Instalada" msgid "IntelliBar Label Printer" msgstr "Impressora de etiqueta IntelliBar" msgid "Intellitech" msgstr "Intellitech" msgid "Internal Server Error" msgstr "Erro interno de servidor" msgid "Internal error" msgstr "Erro interno" msgid "Internet Postage 2-Part" msgstr "Internet Postage Parte-2" msgid "Internet Postage 3-Part" msgstr "Internet Postage Parte-3" msgid "Internet Printing Protocol" msgstr "Protocolo de Impressão para Internet" msgid "Invalid media name arguments." msgstr "Argumentos de nome de mídia inválidos." msgid "Invalid media size." msgstr "Tamanho de mídia inválido." msgid "Invalid ppd-name value." msgstr "" #, c-format msgid "Invalid printer command \"%s\"." msgstr "Comando de impressora \"%s\" inválido." msgid "JCL" msgstr "JCL" msgid "JIS B0" msgstr "JIS B0" msgid "JIS B1" msgstr "JIS B1" msgid "JIS B10" msgstr "JIS B10" msgid "JIS B2" msgstr "JIS B2" msgid "JIS B3" msgstr "JIS B3" msgid "JIS B4" msgstr "JIS B4" msgid "JIS B4 Long Edge" msgstr "JIS B4 borda maior" msgid "JIS B5" msgstr "JIS B5" msgid "JIS B5 Long Edge" msgstr "JIS B5 borda maior" msgid "JIS B6" msgstr "JIS B6" msgid "JIS B6 Long Edge" msgstr "JIS B6 borda maior" msgid "JIS B7" msgstr "JIS B7" msgid "JIS B8" msgstr "JIS B8" msgid "JIS B9" msgstr "JIS B9" #, c-format msgid "Job #%d cannot be restarted - no files." msgstr "O trabalho #%d não pode ser reiniciado - nenhum arquivo." #, c-format msgid "Job #%d does not exist." msgstr "Trabalho #%d não existe." #, c-format msgid "Job #%d is already aborted - can't cancel." msgstr "Trabalho #%d já foi abortado - não é possível cancelar." #, c-format msgid "Job #%d is already canceled - can't cancel." msgstr "Trabalho #%d já foi cancelado - não é possível cancelar." #, c-format msgid "Job #%d is already completed - can't cancel." msgstr "Trabalho #%d já concluiu - não é possível cancelar." #, c-format msgid "Job #%d is finished and cannot be altered." msgstr "Trabalho #%d já finalizou e não pode ser alterado." #, c-format msgid "Job #%d is not complete." msgstr "Trabalho #%d não concluiu." #, c-format msgid "Job #%d is not held for authentication." msgstr "Trabalho #%d não está agarrado para autenticação." #, c-format msgid "Job #%d is not held." msgstr "Trabalho #%d não está agarrado." msgid "Job Completed" msgstr "Trabalho concluiu" msgid "Job Created" msgstr "Trabalho criado" msgid "Job Options Changed" msgstr "Opções do trabalho alteradas" msgid "Job Stopped" msgstr "Trabalho parou" msgid "Job is completed and cannot be changed." msgstr "Trabalho está concluído e não pode ser alterado." msgid "Job operation failed" msgstr "Operação do trabalho falhou" msgid "Job state cannot be changed." msgstr "Estado do trabalho não pode ser alterado." msgid "Job subscriptions cannot be renewed." msgstr "Inscrições de trabalho não podem ser renovadas." msgid "Jobs" msgstr "Trabalhos" msgid "Jog" msgstr "" msgid "LPD/LPR Host or Printer" msgstr "Impressora ou máquina LPD/LPR" msgid "Label Printer" msgstr "Impressora de etiqueta" msgid "Label Top" msgstr "Parte superior da etiqueta" msgid "Labels" msgstr "" msgid "Laminate" msgstr "" msgid "Laminating Foil" msgstr "" #, c-format msgid "Language \"%s\" not supported." msgstr "Não há suporte ao idioma \"%s\"." msgid "Large Address" msgstr "Endereço grande" msgid "Large Capacity" msgstr "" msgid "Large Capacity Tray" msgstr "" msgid "LaserJet Series PCL 4/5" msgstr "LaserJet Series PCL 4/5" msgid "Left" msgstr "" msgid "Left Gate Fold" msgstr "" msgid "Left Tray" msgstr "" msgid "Letter Fold" msgstr "" msgid "Letter Oversize" msgstr "Carta grande" msgid "Letter Oversize Long Edge" msgstr "Carta borda muito maior" msgid "Letterhead" msgstr "" msgid "Light" msgstr "Leve" msgid "Lightweight Envelope" msgstr "" msgid "Lightweight Paper" msgstr "" msgid "Line longer than the maximum allowed (255 characters)" msgstr "Linha maior do que o máximo permitido (255 caracteres)" msgid "List Available Printers" msgstr "Lista de impressoras disponíveis" msgid "Load paper." msgstr "Carregar papel." msgid "Local printer created." msgstr "" msgid "Long-Edge (Portrait)" msgstr "Borda maior (retrato)" msgid "Looking for printer." msgstr "Procurando impressoras." msgid "Mailbox 1" msgstr "" msgid "Mailbox 10" msgstr "" msgid "Mailbox 2" msgstr "" msgid "Mailbox 3" msgstr "" msgid "Mailbox 4" msgstr "" msgid "Mailbox 5" msgstr "" msgid "Mailbox 6" msgstr "" msgid "Mailbox 7" msgstr "" msgid "Mailbox 8" msgstr "" msgid "Mailbox 9" msgstr "" msgid "Main" msgstr "" msgid "Main Roll" msgstr "" msgid "Manual" msgstr "" msgid "Manual Feed" msgstr "Alimentação manual" msgid "Matte Brochure Paper" msgstr "" msgid "Matte Cover Paper" msgstr "" msgid "Matte Fabric" msgstr "" msgid "Matte Labels" msgstr "" msgid "Matte Optical Disc" msgstr "" msgid "Matte Photo Paper" msgstr "" msgid "Media Size" msgstr "Tamanho de mídia" msgid "Media Source" msgstr "Fonte de mídia" msgid "Media Tracking" msgstr "Rastreamento de mídia" msgid "Media Type" msgstr "Tipo de mídia" msgid "Medium" msgstr "Médio" msgid "Memory allocation error" msgstr "Erro de alocação de memória" msgid "Metal" msgstr "" msgid "Metal Glossy" msgstr "" msgid "Metal High Gloss" msgstr "" msgid "Metal Matte" msgstr "" msgid "Metal Satin" msgstr "" msgid "Metal Semi Gloss" msgstr "" msgid "Mid-Weight Paper" msgstr "" msgid "Middle" msgstr "" msgid "Missing CloseGroup" msgstr "Faltando CloseGroup" msgid "Missing PPD-Adobe-4.x header" msgstr "Faltando cabeçalho PPD-Adobe-4.x" msgid "Missing asterisk in column 1" msgstr "Faltando asterisco na coluna 1" msgid "Missing document-number attribute." msgstr "Faltando atributo document-number." #, c-format msgid "Missing double quote on line %d." msgstr "Faltando aspas duplas na linha %d." msgid "Missing form variable" msgstr "Faltando variável de formulário" msgid "Missing last-document attribute in request." msgstr "Faltando atributo last-document na requisição." msgid "Missing media or media-col." msgstr "Faltando media ou media-col." msgid "Missing media-size in media-col." msgstr "Faltando media-size em media-col." msgid "Missing notify-subscription-ids attribute." msgstr "Faltando atributo notify-subscription-ids." msgid "Missing option keyword" msgstr "Faltando palavra-chave de opção" msgid "Missing requesting-user-name attribute." msgstr "Faltando atributo requesting-user-name." #, c-format msgid "Missing required attribute \"%s\"." msgstr "" msgid "Missing required attributes." msgstr "Faltando atributos necessários." msgid "Missing resource in URI" msgstr "Faltando rescurso na URI" msgid "Missing scheme in URI" msgstr "Faltando esquema na URI" #, c-format msgid "Missing value on line %d." msgstr "Faltando valor na linha %d." msgid "Missing value string" msgstr "Faltando string de valor" msgid "Missing x-dimension in media-size." msgstr "Faltando dimensão-x em media-size." msgid "Missing y-dimension in media-size." msgstr "Faltando dimensão-y em media-size." #, c-format msgid "" "Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgstr "" "Modelo: nome = %s\n" " idioma_natural = %s\n" " marca-e-modelo = %s\n" " id-dispositivo = %s" msgid "Modifiers:" msgstr "Modificadores:" msgid "Modify Class" msgstr "Modificar classe" msgid "Modify Printer" msgstr "Modificar impressora" msgid "Mounting Tape" msgstr "" msgid "Move All Jobs" msgstr "Mover todos trabalhos" msgid "Move Job" msgstr "Mover trabalho" msgid "Moved Permanently" msgstr "Mover permanentemente" msgid "Multi Layer" msgstr "" msgid "Multi Part Form" msgstr "" msgid "Multi-Hole Punch (Landscape)" msgstr "" msgid "Multi-Hole Punch (Portrait)" msgstr "" msgid "Multi-Hole Punch (Reverse Landscape)" msgstr "" msgid "Multi-Hole Punch (Reverse Portrait)" msgstr "" msgid "Multipurpose" msgstr "" msgid "Multipurpose Paper" msgstr "" msgid "My Mailbox" msgstr "" msgid "NULL PPD file pointer" msgstr "Ponteiro NULO para arquivo PPD" msgid "Name OID uses indefinite length" msgstr "OID de nome usa comprimento indefinido" msgid "Nested classes are not allowed." msgstr "Classes aninhadas não são permitidas." msgid "Never" msgstr "Nunca" msgid "New credentials are not valid for name." msgstr "" msgid "New credentials are older than stored credentials." msgstr "" msgid "No" msgstr "Não" msgid "No Content" msgstr "Nenhum conteúdo" msgid "No IPP attributes." msgstr "" msgid "No PPD name" msgstr "Nenhum nome PPD" msgid "No VarBind SEQUENCE" msgstr "Nenhuma SEQUENCE de VarBind" msgid "No Windows printer drivers are installed." msgstr "Nenhum driver de impressora Windows está instalado." msgid "No active connection" msgstr "Nenhuma conexão ativa" msgid "No active connection." msgstr "Nenhuma conexão ativa." #, c-format msgid "No active jobs on %s." msgstr "Nenhum trabalho ativo em %s" msgid "No attributes in request." msgstr "Nenhum atributo na requisição." msgid "No authentication information provided." msgstr "Nenhuma informação de autenticação foi fornecida." msgid "No common name specified." msgstr "" msgid "No community name" msgstr "Nenhum nome de comunidade" msgid "No default printer." msgstr "Nenhuma impressora padrão." msgid "No destinations added." msgstr "Nenhuma destinação foi adicionada." msgid "No device URI found in argv[0] or in DEVICE_URI environment variable." msgstr "" "Nenhum URI de dispositivo encontrado em argv[0] ou na variável de ambiente " "DEVICE_URI." msgid "No error-index" msgstr "Nenhum error-index" msgid "No error-status" msgstr "Nenhum error-status" msgid "No file in print request." msgstr "Nenhum arquivo na requisição de impressão." msgid "No modification time" msgstr "Nenhum horário de modificação" msgid "No name OID" msgstr "Nenhum OID de nome" msgid "No pages were found." msgstr "Nenhuma página foi encontrada." msgid "No printer name" msgstr "Nenhum nome de impressora" msgid "No printer-uri found" msgstr "Nenhum printer-uri foi encontrado" msgid "No printer-uri found for class" msgstr "Nenhum printer-uri foi encontrado para classe" msgid "No printer-uri in request." msgstr "Nenhum printer-uri na requisição." msgid "No request URI." msgstr "Nenhuma URI de requisição." msgid "No request protocol version." msgstr "Nenhuma versão de protocolo de requisição." msgid "No request sent." msgstr "Nenhuma requisição enviada." msgid "No request-id" msgstr "Nenhum request-id" msgid "No stored credentials, not valid for name." msgstr "" msgid "No subscription attributes in request." msgstr "Nenhum atributo de inscrição na requisição." msgid "No subscriptions found." msgstr "Nenhuma inscrição encontrada." msgid "No variable-bindings SEQUENCE" msgstr "Nenhum SEQUENCE em variable-bindings" msgid "No version number" msgstr "Nenhum número de versão" msgid "Non-continuous (Mark sensing)" msgstr "Não-contíguo (Mark sensing)" msgid "Non-continuous (Web sensing)" msgstr "Não-contíguo (Web sensing)" msgid "None" msgstr "" msgid "Normal" msgstr "Normal" msgid "Not Found" msgstr "Não encontrado" msgid "Not Implemented" msgstr "Não implementado" msgid "Not Installed" msgstr "Não instalado" msgid "Not Modified" msgstr "Não modificado" msgid "Not Supported" msgstr "Não há suporte" msgid "Not allowed to print." msgstr "Sem permissão para imprimir." msgid "Note" msgstr "Nota" msgid "" "Note: this program only validates the DSC comments, not the PostScript " "itself." msgstr "" "Nota: esse programa só valida os comentários DSC, e não o próprio PostScript." msgid "OK" msgstr "OK" msgid "Off (1-Sided)" msgstr "Off (1 lado)" msgid "Office Recycled Paper" msgstr "" msgid "Oki" msgstr "Oki" msgid "Online Help" msgstr "Ajuda online" msgid "Only local users can create a local printer." msgstr "" #, c-format msgid "Open of %s failed: %s" msgstr "Abertura de %s falhou: %s" msgid "OpenGroup without a CloseGroup first" msgstr "OpenGroup sem um CloseGroup primeiro" msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" msgstr "OpenUI/JCLOpenUI sem um CloseUI/JCLCloseUI primeiro" msgid "Operation Policy" msgstr "Política de operação" msgid "Optical Disc" msgstr "" #, c-format msgid "Option \"%s\" cannot be included via %%%%IncludeFeature." msgstr "Opção \"%s\" não pode ser incluída via %%%%IncludeFeature." msgid "Options Installed" msgstr "Opções instaladas" msgid "Options:" msgstr "Opções:" msgid "Other" msgstr "" msgid "Out of date PPD cache file." msgstr "Cache de arquivo PPD está desatualizado." msgid "Out of memory." msgstr "Memória insuficiente." msgid "Output Mode" msgstr "Mode de saída" msgid "Output bin is almost full." msgstr "Tabuleiro de saída está quase completo." msgid "Output bin is full." msgstr "Tabuleiro de saída está completo." msgid "Output bin is missing." msgstr "Tabuleiro de saída não foi encontrado." msgid "PASS" msgstr "PASSOU" msgid "PCL Laser Printer" msgstr "Impressora Laser PCL" msgid "PRC16K" msgstr "PRC16K" msgid "PRC16K Long Edge" msgstr "PRC16K borda maior" msgid "PRC32K" msgstr "PRC32K" msgid "PRC32K Long Edge" msgstr "PRC32K borda maior" msgid "PRC32K Oversize" msgstr "PRC32K grande" msgid "PRC32K Oversize Long Edge" msgstr "PRC32K borda muito maior" msgid "Packet does not contain a Get-Response-PDU" msgstr "Pacote não contém um Get-Response-PDU" msgid "Packet does not start with SEQUENCE" msgstr "Pacote não inicia com SEQUENCE" msgid "Paper" msgstr "" msgid "Paper jam." msgstr "Atolamento de papel." msgid "Paper tray is almost empty." msgstr "Bandeja de papel está quase vazia." msgid "Paper tray is empty." msgstr "Bandeja de papel está vazia." msgid "Paper tray is missing." msgstr "Bandeja de papel não foi encontrada." msgid "Parallel Fold" msgstr "" msgid "ParamCustominCutInterval" msgstr "ParamCustominCutInterval" msgid "ParamCustominTearInterval" msgstr "ParamCustominTearInterval" #, c-format msgid "Password for %s on %s? " msgstr "Senha para %s em %s? " #, c-format msgid "Password for %s required to access %s via SAMBA: " msgstr "Senha para %s é necessária para acessar %s via SAMBA: " msgid "Pause Class" msgstr "Pausar classe" msgid "Pause Printer" msgstr "Pausar impressora" # peel-off seria descolar etiqueta do papel? msgid "Peel-Off" msgstr "Descolar" msgid "Permanent Labels" msgstr "" msgid "Photo" msgstr "Foto" msgid "Photo Film" msgstr "" msgid "Photo Labels" msgstr "Foto pequena" msgid "Photo Paper" msgstr "" msgid "Photo Paper Plus Glossy II" msgstr "" msgid "Photo Paper Pro Platinum" msgstr "" msgid "Plain Envelope" msgstr "" msgid "Plain Paper" msgstr "Papel normal" msgid "Plastic" msgstr "" msgid "Plastic Archival" msgstr "" msgid "Plastic Colored" msgstr "" msgid "Plastic Glossy" msgstr "" msgid "Plastic High Gloss" msgstr "" msgid "Plastic Matte" msgstr "" msgid "Plastic Satin" msgstr "" msgid "Plastic Semi Gloss" msgstr "" msgid "Plate" msgstr "" msgid "Policies" msgstr "Políticas" msgid "Polyester" msgstr "" msgid "Port Monitor" msgstr "Monitor de porta" msgid "PostScript Printer" msgstr "Impressora PostScript" msgid "Postcard" msgstr "Postal" msgid "Postcard Double" msgstr "" msgid "Postcard Double Long Edge" msgstr "Postal duplo borda maior" msgid "Postcard Long Edge" msgstr "Postal borda maior" msgid "Poster Fold" msgstr "" msgid "Pre Cut Tabs" msgstr "" msgid "Premium Inkjet Paper" msgstr "" msgid "Premium Photo Glossy Paper" msgstr "" msgid "Premium Presentation Matte Paper" msgstr "" msgid "Preparing to print." msgstr "Preparando para imprimir." msgid "Preprinted Envelope" msgstr "" msgid "Preprinted Paper" msgstr "" msgid "Print Density" msgstr "Densidade de impressão" msgid "Print Job:" msgstr "Trabalho de impressão:" msgid "Print Mode" msgstr "Modo de impressão" msgid "Print Quality" msgstr "" msgid "Print Rate" msgstr "Taxa de impressão" msgid "Print Self-Test Page" msgstr "Imprimir página de auto-teste" msgid "Print Speed" msgstr "Velocidade de impressão" msgid "Print Test Page" msgstr "Imprimir página de teste" msgid "Print and Cut" msgstr "Imprimir e cortar" msgid "Print and Tear" msgstr "Imprimir e rasgar" msgid "Print file sent." msgstr "Arquivo de impressão enviado." msgid "Print job canceled at printer." msgstr "Trabalho de impressão cancelado na impressora." msgid "Print job too large." msgstr "Trabalho de impressão muito grande." msgid "Print job was not accepted." msgstr "Trabalho de impressão não foi aceito." #, c-format msgid "Printer \"%s\" already exists." msgstr "" msgid "Printer Added" msgstr "Impressora adicionada" msgid "Printer Default" msgstr "Impressora padrão" msgid "Printer Deleted" msgstr "Impressora excluída" msgid "Printer Modified" msgstr "Impressora modificada" msgid "Printer Paused" msgstr "Impressora pausada" msgid "Printer Settings" msgstr "Configurações de impressora" msgid "Printer cannot print supplied content." msgstr "Impressora não consegue imprimir o conteúdo fornecido." msgid "Printer cannot print with supplied options." msgstr "Impressora não consegue imprimir os opções fornecidas." msgid "Printer does not support required IPP attributes or document formats." msgstr "" msgid "Printer:" msgstr "Impressora:" msgid "Printers" msgstr "Impressoras" #, c-format msgid "Printing page %d, %u%% complete." msgstr "Imprimindo página %d, %u%% concluído." msgid "Punch" msgstr "" msgid "Punched Paper" msgstr "" msgid "Quarto" msgstr "Quarto" msgid "Quota limit reached." msgstr "Limite de quota alcançado." msgid "Rank Owner Job File(s) Total Size" msgstr "Ordem Dono Trab Arquivo(s) Tamanho total" msgid "Rear" msgstr "" msgid "Rear Tray" msgstr "" msgid "Reject Jobs" msgstr "Rejeitar trabalhos" #, c-format msgid "Remote host did not accept control file (%d)." msgstr "Máquina remota não aceitou arquivo de controle (%d)." #, c-format msgid "Remote host did not accept data file (%d)." msgstr "Máquina remota não aceitou arquivo de dados (%d)." msgid "Reprint After Error" msgstr "Erro após reimpressão" msgid "Request Entity Too Large" msgstr "Entidade de requisição muito grande" msgid "Resolution" msgstr "Resolução" msgid "Resume Class" msgstr "Resumir classe" msgid "Resume Printer" msgstr "Resumir impressora" msgid "Return Address" msgstr "Retornar endereço" msgid "Rewind" msgstr "Rebobinar" msgid "Right" msgstr "" msgid "Right Gate Fold" msgstr "" msgid "Right Tray" msgstr "" msgid "Roll" msgstr "" msgid "Roll 1" msgstr "" msgid "Roll 10" msgstr "" msgid "Roll 2" msgstr "" msgid "Roll 3" msgstr "" msgid "Roll 4" msgstr "" msgid "Roll 5" msgstr "" msgid "Roll 6" msgstr "" msgid "Roll 7" msgstr "" msgid "Roll 8" msgstr "" msgid "Roll 9" msgstr "" #, c-format msgid "Running command: %s %s -N -A %s -c '%s'" msgstr "Executando comando: %s %s -N -A %s -c '%s'" msgid "SEQUENCE uses indefinite length" msgstr "SEQUENCE usa comprimento indefinido" msgid "SSL/TLS Negotiation Error" msgstr "Erro de negociação SSL/TLS" msgid "Saddle Stitch" msgstr "" msgid "Satin Labels" msgstr "" msgid "Satin Optical Disc" msgstr "" msgid "Satin Photo Paper" msgstr "" msgid "Screen" msgstr "" msgid "Screen Paged" msgstr "" msgid "Security Labels" msgstr "" msgid "See Other" msgstr "Veja outro" msgid "See remote printer." msgstr "" msgid "Self Adhesive" msgstr "" msgid "Self Adhesive Film" msgstr "" msgid "Self-signed credentials are blocked." msgstr "" msgid "Semi-Gloss Fabric" msgstr "" msgid "Semi-Gloss Labels" msgstr "" msgid "Semi-Gloss Optical Disc" msgstr "" msgid "Semi-Gloss Photo Paper" msgstr "" msgid "Sending data to printer." msgstr "Enviando dados à impressora." msgid "Server Restarted" msgstr "Servidor reiniciado" msgid "Server Security Auditing" msgstr "Auditoria de segurança de servidor" msgid "Server Started" msgstr "Servidor iniciou" msgid "Server Stopped" msgstr "Servidor parou" msgid "Server credentials not set." msgstr "Credenciais no servidor não definidas." msgid "Service Unavailable" msgstr "Serviço indisponível" msgid "Set Allowed Users" msgstr "Definir usuários permitidos" msgid "Set As Server Default" msgstr "Definir como servidor padrão" msgid "Set Class Options" msgstr "Definir opções de classe" msgid "Set Printer Options" msgstr "Definir opções de impressora" msgid "Set Publishing" msgstr "Definir publicação" msgid "Shipping Address" msgstr "Endereço de entrega" msgid "Short-Edge (Landscape)" msgstr "Borda menor (paisagem)" msgid "Shrink Foil" msgstr "" msgid "Side" msgstr "" msgid "Side Tray" msgstr "" msgid "Single Face" msgstr "" msgid "Single Punch (Landscape)" msgstr "" msgid "Single Punch (Portrait)" msgstr "" msgid "Single Punch (Reverse Landscape)" msgstr "" msgid "Single Punch (Reverse Portrait)" msgstr "" msgid "Single Staple (Landscape)" msgstr "" msgid "Single Staple (Portrait)" msgstr "" msgid "Single Staple (Reverse Landscape)" msgstr "" msgid "Single Staple (Reverse Portrait)" msgstr "" msgid "Single Wall Cardboard" msgstr "" msgid "Sleeve" msgstr "" msgid "Special Paper" msgstr "Papel especial" #, c-format msgid "Spooling job, %.0f%% complete." msgstr "Trabalho de impressão, %.0f%% completo." msgid "Stacker 1" msgstr "" msgid "Stacker 10" msgstr "" msgid "Stacker 2" msgstr "" msgid "Stacker 3" msgstr "" msgid "Stacker 4" msgstr "" msgid "Stacker 5" msgstr "" msgid "Stacker 6" msgstr "" msgid "Stacker 7" msgstr "" msgid "Stacker 8" msgstr "" msgid "Stacker 9" msgstr "" msgid "Standard" msgstr "Padrão" msgid "Staple" msgstr "" msgid "Staple Edge" msgstr "" msgid "Staple Edge (Landscape)" msgstr "" msgid "Staple Edge (Portrait)" msgstr "" msgid "Staple Edge (Reverse Landscape)" msgstr "" msgid "Staple Edge (Reverse Portrait)" msgstr "" #. TRANSLATORS: Banner/cover sheet before the print job. msgid "Starting Banner" msgstr "Iniciando banner" #, c-format msgid "Starting page %d." msgstr "Iniciando página %d." msgid "Statement" msgstr "Declaração" #, c-format msgid "Subscription #%d does not exist." msgstr "Inscrição #%d não existe." msgid "Substitutions:" msgstr "Substituições:" msgid "Super A" msgstr "Super A" msgid "Super B" msgstr "Super B" msgid "Super B/A3" msgstr "Super B/A3" msgid "Switching Protocols" msgstr "Alternando protocolos" msgid "Tab Stock" msgstr "" msgid "Tabloid" msgstr "Tabloide" msgid "Tabloid Oversize" msgstr "Tabloide grande" msgid "Tabloid Oversize Long Edge" msgstr "Tabloide borda muito maior" msgid "Tear" msgstr "Destacar" msgid "Tear-Off" msgstr "Destacar" msgid "Tear-Off Adjust Position" msgstr "Ajuste da posição de destaque" #, c-format msgid "The \"%s\" attribute is required for print jobs." msgstr "O atributo \"%s\" é necessário para imprimir os trabalhos." #, c-format msgid "The %s attribute cannot be provided with job-ids." msgstr "O atributo %s não pode ser fornecido com job-ids." #, c-format msgid "" "The '%s' Job Status attribute cannot be supplied in a job creation request." msgstr "" "O atributo de estado de trabalho '%s' não pode ser fornecido em uma " "requisição de criação de trabalho." #, c-format msgid "" "The '%s' operation attribute cannot be supplied in a Create-Job request." msgstr "" "O atributo de operação '%s' não pode ser fornecido em uma requisição de " "criação de trabalho." #, c-format msgid "The PPD file \"%s\" could not be found." msgstr "O arquivo PPD \"%s\" não pôde ser encontrado." #, c-format msgid "The PPD file \"%s\" could not be opened: %s" msgstr "O arquivo PPD \"%s\" não pôde ser aberto: %s" msgid "The PPD file could not be opened." msgstr "O arquivo PPD não pôde ser aberto." msgid "" "The class name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "O nome da classe pode conter somente até 127 caracteres imprimíveis e não " "pode conter espaços, barras (/), ou sinal de tralha (#)." msgid "The developer unit needs to be replaced." msgstr "A unidade de desenvolvedor precisa ser substituído." msgid "The developer unit will need to be replaced soon." msgstr "A unidade de desenvolvedor precisará ser substituído em breve." msgid "The fuser's temperature is high." msgstr "A temperatura do fusor está alta." msgid "The fuser's temperature is low." msgstr "A temperatura do fusor está baixa." msgid "" "The notify-lease-duration attribute cannot be used with job subscriptions." msgstr "" "O atributo notify-lease-duration não pode ser usado para inscrições de " "trabalhos." #, c-format msgid "The notify-user-data value is too large (%d > 63 octets)." msgstr "O valor de notify-user-data está muito grande (%d > 63 octetos)." msgid "The optical photoconductor needs to be replaced." msgstr "O fotocondutor óptico precisa ser substituído." msgid "The optical photoconductor will need to be replaced soon." msgstr "O fotocondutor óptico precisará ser substituído em breve." msgid "The printer configuration is incorrect or the printer no longer exists." msgstr "" "A configuração da impressora está incorreta ou a impressora não existe mais." msgid "The printer did not respond." msgstr "A impressora não respondeu." msgid "The printer is in use." msgstr "A impressora está em uso." msgid "The printer is low on ink." msgstr "A impressora está ficando sem tinta." msgid "The printer is low on toner." msgstr "A impressora está ficando sem toner." msgid "The printer is not connected." msgstr "A impressora não está conectada." msgid "The printer is not responding." msgstr "A impressora não está respondendo." msgid "The printer is now connected." msgstr "A impressora está agora conectada." msgid "The printer is now online." msgstr "A impressora está agora online." msgid "The printer is offline." msgstr "A impressora está offline." msgid "The printer is unreachable at this time." msgstr "A impressora está inacessível neste momento." msgid "The printer may be out of ink." msgstr "A impressora pode estar sem tinta." msgid "The printer may be out of toner." msgstr "A impressora pode estar sem toner." msgid "The printer may not exist or is unavailable at this time." msgstr "A impressora pode não existir ou está indisponível neste momento." msgid "" "The printer name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "O nome da impressora pode conter somente até 127 caracteres imprimíveis e " "não pode conter espaços, barras (/), ou sinal de tralha (#)." msgid "The printer or class does not exist." msgstr "A impressora ou classe não existe." msgid "The printer or class is not shared." msgstr "A impressora ou classe não está compartilhada." msgid "The printer's cover is open." msgstr "A tampa superior da impressora está aberta." msgid "The printer's door is open." msgstr "A tampa da impressora está aberta." msgid "The printer's interlock is open." msgstr "A interlock da impressora está aberta." msgid "The printer's waste bin is almost full." msgstr "A lixeira da impressora está quase completa." msgid "The printer's waste bin is full." msgstr "A lixeira da impressora está completa." #, c-format msgid "The printer-uri \"%s\" contains invalid characters." msgstr "O printer-uri \"%s\" contém caracteres inválidos." msgid "The printer-uri attribute is required." msgstr "O atributo printer-uri é necessário." msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." msgstr "" "O printer-uri deve estar no formato \"ipp://MAQUINA/classes/NOMECLASSE\"." msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgstr "" "O printer-uri deve estar no formato \"ipp://MAQUINA/printers/NOMEIMPRESSORA" "\"." msgid "" "The subscription name may not contain spaces, slashes (/), question marks " "(?), or the pound sign (#)." msgstr "" "O nome da inscrição não pode conter espaços, barras (/), sinais de " "interrogação (?), ou sinal de tralha (#)." msgid "" "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to " "enable it." msgstr "" "A interface web está desabilitada no momento. Execute \"cupsctl " "WebInterface=yes\" para habilitá-la." #, c-format msgid "The which-jobs value \"%s\" is not supported." msgstr "Não há suporte ao valor de which-jobs \"%s\"." msgid "There are too many subscriptions." msgstr "Há inscrições demais." msgid "There was an unrecoverable USB error." msgstr "Ocorreu um erro de USB irrecuperável." msgid "Thermal Transfer Media" msgstr "Mídia de transferência térmica" msgid "Too many active jobs." msgstr "Há trabalhos demais ativos." #, c-format msgid "Too many job-sheets values (%d > 2)." msgstr "Há valores de job-sheets demais (%d > 2)." #, c-format msgid "Too many printer-state-reasons values (%d > %d)." msgstr "Há valores de printer-state-reasons demais (%d >%d)." msgid "Top" msgstr "" msgid "Top Tray" msgstr "" msgid "Tractor" msgstr "" msgid "Transfer" msgstr "" msgid "Transparency" msgstr "Transparência" msgid "Tray" msgstr "Bandeja" msgid "Tray 1" msgstr "Bandeja 1" msgid "Tray 10" msgstr "" msgid "Tray 11" msgstr "" msgid "Tray 12" msgstr "" msgid "Tray 13" msgstr "" msgid "Tray 14" msgstr "" msgid "Tray 15" msgstr "" msgid "Tray 16" msgstr "" msgid "Tray 17" msgstr "" msgid "Tray 18" msgstr "" msgid "Tray 19" msgstr "" msgid "Tray 2" msgstr "Bandeja 2" msgid "Tray 20" msgstr "" msgid "Tray 3" msgstr "Bandeja 3" msgid "Tray 4" msgstr "Bandeja 4" msgid "Tray 5" msgstr "" msgid "Tray 6" msgstr "" msgid "Tray 7" msgstr "" msgid "Tray 8" msgstr "" msgid "Tray 9" msgstr "" msgid "Triple Staple (Landscape)" msgstr "" msgid "Triple Staple (Portrait)" msgstr "" msgid "Triple Staple (Reverse Landscape)" msgstr "" msgid "Triple Staple (Reverse Portrait)" msgstr "" msgid "Triple Wall Cardboard" msgstr "" msgid "Trust on first use is disabled." msgstr "" msgid "URI Too Long" msgstr "URI muito longa" msgid "URI too large" msgstr "URI muito grande" msgid "US Fanfold" msgstr "" msgid "US Ledger" msgstr "US Ledger" msgid "US Legal" msgstr "US Legal" msgid "US Legal Oversize" msgstr "US Legal grande" msgid "US Letter" msgstr "US Letter" msgid "US Letter Long Edge" msgstr "US Letter borda maior" msgid "US Letter Oversize" msgstr "US Letter grande" msgid "US Letter Oversize Long Edge" msgstr "US Letter borda muito maior" msgid "US Letter Small" msgstr "US Letter pequena" msgid "Unable to access cupsd.conf file" msgstr "Não foi possível acessar o arquivo cupsd.conf" msgid "Unable to access help file." msgstr "Não foi possível acessar o arquivo de ajuda." msgid "Unable to add RSS subscription" msgstr "Não foi possível adicionar inscrição RSS" msgid "Unable to add class" msgstr "Não foi possível adicionar classe" msgid "Unable to add document to print job." msgstr "Não foi possível adicionar o documento ao trabalho de impressão." #, c-format msgid "Unable to add job for destination \"%s\"." msgstr "Não foi possível adicionar trabalho para destino \"%s\"." msgid "Unable to add printer" msgstr "Não foi possível adicionar impressora" msgid "Unable to allocate memory for file types." msgstr "Não foi possível alocar memória para os tipos de arquivos." msgid "Unable to allocate memory for page info" msgstr "Não foi possível alocar memória para informação de página" msgid "Unable to allocate memory for pages array" msgstr "Não foi possível alocar memória para vetor de páginas" msgid "Unable to cancel RSS subscription" msgstr "Não foi possível cancelar inscrição RSS" msgid "Unable to cancel print job." msgstr "Não foi possível cancelar trabalho de impressão." msgid "Unable to change printer" msgstr "Não foi possível alterar a impressora" msgid "Unable to change printer-is-shared attribute" msgstr "Não foi possível alterar o atributo printer-is-shared" msgid "Unable to change server settings" msgstr "Não foi possível alterar as configurações do servidor" #, c-format msgid "Unable to compile mimeMediaType regular expression: %s." msgstr "Não foi possível compilar a expressão regular de mimeMediaType: %s." #, c-format msgid "Unable to compile naturalLanguage regular expression: %s." msgstr "Não foi possível compilar a expressão regular de naturalLanguage: %s." msgid "Unable to configure printer options." msgstr "Não foi possível configurar opções de impressora." msgid "Unable to connect to host." msgstr "Não foi possível conectar à máquina." msgid "Unable to contact printer, queuing on next printer in class." msgstr "" "Não foi possível contactar a impressora, enfileirando na próxima impressora " "na classe." #, c-format msgid "Unable to copy 64-bit CUPS printer driver files (%d)." msgstr "" "Não foi possível copiar arquivos de driver de impressora CUPS 64-bit (%d)." #, c-format msgid "Unable to copy 64-bit Windows printer driver files (%d)." msgstr "" "Não foi possível copiar arquivos de driver de impressora (%d) de Windows 64-" "bit." #, c-format msgid "Unable to copy CUPS printer driver files (%d)." msgstr "Não foi possível copiar arquivos de driver de impressora (%d) de CUPS." #, c-format msgid "Unable to copy PPD file - %s" msgstr "Não foi possível copiar arquivo PPD - %s" msgid "Unable to copy PPD file." msgstr "Não foi possível copiar arquivo PPD." #, c-format msgid "Unable to copy Windows 2000 printer driver files (%d)." msgstr "" "Não foi possível copiar arquivos de driver de impressora (%d) de Windows " "2000." #, c-format msgid "Unable to copy Windows 9x printer driver files (%d)." msgstr "" "Não foi possível copiar arquivos de driver de impressora (%d) de Windows 9x." msgid "Unable to create credentials from array." msgstr "" msgid "Unable to create printer-uri" msgstr "Não foi possível criar uri de impressora" msgid "Unable to create printer." msgstr "" msgid "Unable to create server credentials." msgstr "Não foi possível criar credenciais no servidor." msgid "Unable to create temporary file" msgstr "Não foi possível criar arquivo temporário" msgid "Unable to delete class" msgstr "Não foi possível excluir classe" msgid "Unable to delete printer" msgstr "Não foi possível excluir impressora" msgid "Unable to do maintenance command" msgstr "Não foi possível executar comando de manutenção" msgid "Unable to edit cupsd.conf files larger than 1MB" msgstr "Não foi possível editar arquivos de cupsd.conf maiores que 1MB" msgid "" "Unable to establish a secure connection to host (certificate chain invalid)." msgstr "" "Não foi possível estabelecer uma conexão segura com a máquina (cadeia de " "certificação inválida)." msgid "" "Unable to establish a secure connection to host (certificate not yet valid)." msgstr "" "Não foi possível estabelecer uma conexão segura com a máquina (certificado " "inválido no momento)." msgid "Unable to establish a secure connection to host (expired certificate)." msgstr "" "Não foi possível estabelecer uma conexão segura com a máquina (certificado " "expirou)." msgid "Unable to establish a secure connection to host (host name mismatch)." msgstr "" "Não foi possível estabelecer uma conexão segura com a máquina (nome da " "máquina incorreto)." msgid "" "Unable to establish a secure connection to host (peer dropped connection " "before responding)." msgstr "" "Não foi possível estabelecer uma conexão segura com a máquina (terminou a " "conexão sem a resposta)." msgid "" "Unable to establish a secure connection to host (self-signed certificate)." msgstr "" "Não foi possível estabelecer uma conexão segura com a máquina (certificado " "auto-assinado)." msgid "" "Unable to establish a secure connection to host (untrusted certificate)." msgstr "" "Não foi possível estabelecer uma conexão segura com a máquina (certificado " "não confiado)." msgid "Unable to establish a secure connection to host." msgstr "Não foi possível estabelecer uma conexão segura com a máquina." msgid "Unable to find destination for job" msgstr "Não foi possível encontrar o destino do trabalho" msgid "Unable to find printer." msgstr "Não foi possível encontrar a impressora." msgid "Unable to find server credentials." msgstr "Não foi possível encontrar credenciais no servidor." msgid "Unable to get backend exit status." msgstr "Não foi possível obter o estado de saída do backend." msgid "Unable to get class list" msgstr "Não foi possível obter lista de classes" msgid "Unable to get class status" msgstr "Não foi possível obter o estado da classe" msgid "Unable to get list of printer drivers" msgstr "Não foi possível obter lista de drivers de impressoras" msgid "Unable to get printer attributes" msgstr "Não foi possível obter atributos da impressora" msgid "Unable to get printer list" msgstr "Não foi possível obter lista de impressoras" msgid "Unable to get printer status" msgstr "Não foi possível obter estado da impressora" msgid "Unable to get printer status." msgstr "Não foi possível obter o estado da impressora." #, c-format msgid "Unable to install Windows 2000 printer driver files (%d)." msgstr "" "Não foi possível instalar arquivos de driver de impressora Windows 2000 (%d)." #, c-format msgid "Unable to install Windows 9x printer driver files (%d)." msgstr "" "Não foi possível instalar arquivos de driver de impressora Windows 9x (%d)." msgid "Unable to load help index." msgstr "Não foi possível carregar índice de ajuda." #, c-format msgid "Unable to locate printer \"%s\"." msgstr "Não foi possível localizar a impressora \"%s\"." msgid "Unable to locate printer." msgstr "Não foi possível localizar a impressora." msgid "Unable to modify class" msgstr "Não foi possível modificar classe" msgid "Unable to modify printer" msgstr "Não foi possível modificar impressora" msgid "Unable to move job" msgstr "Não foi possível mover trabalho" msgid "Unable to move jobs" msgstr "Não foi possível mover trabalhos" msgid "Unable to open PPD file" msgstr "Não foi possível abrir arquivo PPD" msgid "Unable to open cupsd.conf file:" msgstr "Não foi possível abrir arquivo cupsd.conf:" msgid "Unable to open device file" msgstr "Não foi possível abrir arquivo dispositivo" #, c-format msgid "Unable to open document #%d in job #%d." msgstr "Não foi possível abrir documento #%d no trabalho #%d." msgid "Unable to open help file." msgstr "Não foi possível abrir arquivo de ajuda." msgid "Unable to open print file" msgstr "Não foi possível abrir arquivo de impressão" msgid "Unable to open raster file" msgstr "Não foi possível arquivo de rasterização" msgid "Unable to print test page" msgstr "Não foi possível imprimir página teste" msgid "Unable to read print data." msgstr "Não foi possível ler dados de impressão." msgid "Unable to rename job document file." msgstr "Não foi possível renomear o arquivo de documento do trabalho." msgid "Unable to resolve printer-uri." msgstr "Não foi possível resolver printer-ui." #, c-format msgid "Unable to run \"%s\": %s" msgstr "Não foi possível executar \"%s\": %s" msgid "Unable to see in file" msgstr "Não foi possível ler o arquivo" msgid "Unable to send command to printer driver" msgstr "Não foi possível enviar comando ao driver da impressora" msgid "Unable to send data to printer." msgstr "Não foi possível enviar dados à impressora." #, c-format msgid "Unable to set Windows printer driver (%d)." msgstr "Não foi possível definir driver de impressora Windows (%d)." msgid "Unable to set options" msgstr "Não foi possível definir opções" msgid "Unable to set server default" msgstr "Não foi possível definir servidor padrão" msgid "Unable to start backend process." msgstr "Não foi possível iniciar processo de backend." msgid "Unable to upload cupsd.conf file" msgstr "Não foi possível atualizar o arquivo cupsd.conf" msgid "Unable to use legacy USB class driver." msgstr "Não foi possível usar driver de classe USB legado." msgid "Unable to write print data" msgstr "Não foi possível escrever dados de impressão" #, c-format msgid "Unable to write uncompressed print data: %s" msgstr "Não foi possível escrever dados descompactados de impressão: %s" msgid "Unauthorized" msgstr "Não autorizado" msgid "Units" msgstr "Unidades" msgid "Unknown" msgstr "Desconhecido" #, c-format msgid "Unknown choice \"%s\" for option \"%s\"." msgstr "Escolha desconhecida \"%s\" para opção \"%s\"." #, c-format msgid "Unknown encryption option value: \"%s\"." msgstr "Valor da opção de criptografia desconhecido: \"%s\"." #, c-format msgid "Unknown file order: \"%s\"." msgstr "Ordem de arquivo desconhecida: \"%s\"." #, c-format msgid "Unknown format character: \"%c\"." msgstr "Caractere de formato desconhecido: \"%c\"." msgid "Unknown hash algorithm." msgstr "" msgid "Unknown media size name." msgstr "Nome de tamanho de mídia desconhecido." #, c-format msgid "Unknown option \"%s\" with value \"%s\"." msgstr "Opção \"%s\" desconhecida com valor \"%s\"." #, c-format msgid "Unknown option \"%s\"." msgstr "Opção \"%s\" desconhecida." #, c-format msgid "Unknown print mode: \"%s\"." msgstr "Modo de impressão desconhecido: \"%s\"." #, c-format msgid "Unknown printer-error-policy \"%s\"." msgstr "printer-error-policy \"%s\" desconhecido." #, c-format msgid "Unknown printer-op-policy \"%s\"." msgstr "printer-op-policy \"%s\" desconhecido." msgid "Unknown request method." msgstr "Método de requisição desconhecido." msgid "Unknown request version." msgstr "Versão de requisição desconhecida." msgid "Unknown scheme in URI" msgstr "Esquema desconhecido na URI" msgid "Unknown service name." msgstr "Nome de serviço desconhecido." #, c-format msgid "Unknown version option value: \"%s\"." msgstr "Valor de opção de versão desconhecido: \"%s\"." #, c-format msgid "Unsupported 'compression' value \"%s\"." msgstr "Não suporte a \"compression\" com valor \"%s\"." #, c-format msgid "Unsupported 'document-format' value \"%s\"." msgstr "Não há suporte a \"document-format\" com valor \"%s\"." msgid "Unsupported 'job-name' value." msgstr "Não há suporte ao valor de \"job-name\"." #, c-format msgid "Unsupported character set \"%s\"." msgstr "Não há suporte ao conjunto de caracteres \"%s\"." #, c-format msgid "Unsupported compression \"%s\"." msgstr "Não há suporte à compressão \"%s\"." #, c-format msgid "Unsupported document-format \"%s\"." msgstr "Não há suporte ao document-format \"%s\"." #, c-format msgid "Unsupported document-format \"%s/%s\"." msgstr "Não há suporte ao document-format \"%s/%s\"." #, c-format msgid "Unsupported format \"%s\"." msgstr "Não há suporte ao formato \"%s\"." msgid "Unsupported margins." msgstr "Não há suporte a margens." msgid "Unsupported media value." msgstr "Não há suporte ao valor de mídia." #, c-format msgid "Unsupported number-up value %d, using number-up=1." msgstr "Não há suporte ao valor de number-up %d; usando number-up=1." #, c-format msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb." msgstr "" "Não há suporte ao valor de number-up-layout %s; usando number-up-layout=lrtb." #, c-format msgid "Unsupported page-border value %s, using page-border=none." msgstr "Não há suporte ao valor de page-border %s; usando page-border=none." msgid "Unsupported raster data." msgstr "Não há suporte a dados de rasterização." msgid "Unsupported value type" msgstr "Não há suporte ao tipo de valor" msgid "Upgrade Required" msgstr "Atualização necessária" msgid "" "Usage:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]" msgstr "" "Uso:\n" "\n" " lpadmin [-h servidor] -d destino\n" " lpadmin [-h servidor] -x destino\n" " lpadmin [-h servidor] -p impressora [-c add-classe] [-i interface]\n" " [-m modelo] [-r remove-classe] [-v dispositivo]\n" " [-D descrição] [-P arquivo-ppd] [-o nome=valor]\n" " [-u allow:usuário,usuário] [-u deny:usuário,usuário]" #, c-format msgid "Usage: %s job-id user title copies options [file]" msgstr "Uso: %s job-id usuário título cópias opções [arquivo]" msgid "Usage: cupsaddsmb [options] printer1 ... printerN" msgstr "Uso: cupsaddsmb [opções] impressora1 ... impressoraN" msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]" msgstr "Uso: cupsctl [opções] [param=valor ... paramN=valorN]" msgid "Usage: cupsd [options]" msgstr "Uso: cupsd [opções]" msgid "Usage: cupsfilter [ options ] [ -- ] filename" msgstr "Uso: cupsfilter [ opções ] [ -- ] arquivo" msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]" msgstr "Uso: cupstestdsc [opções] arquivo.ps [... arquivo.ps]" msgid "" "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" msgstr "Uso: cupstestppd [opções] arquivo1.ppd[.gz] [... arquivoN.ppd[.gz]]" msgid "" "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " ippfind [options] name[.regtype[.domain.]] ... [expression]\n" " ippfind --help\n" " ippfind --version" msgstr "" "Uso: ippfind [opções] tiporeg[,tiposub][.domínio.] ... [expressões]\n" " ippfind [opções] nome[.tiporeg[.domínio.]] ... [expressões]\n" " ippfind --help\n" " ippfind --version" msgid "Usage: ipptool [options] URI filename [ ... filenameN ]" msgstr "Uso: ipptool [opções] URI arquivo [ ... arquivoN ]" msgid "Usage: lpmove job/src dest" msgstr "Uso: lpmove trabalho/fonte dest" msgid "" "Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " lpoptions [-h server] [-E] -x printer" msgstr "" "Uso: lpoptions [-h servidor] [-E] -d impressora\n" " lpoptions [-h servidor] [-E] [-p impressora] -l\n" " lpoptions [-h servidor] [-E] -p impressora -o opção[=valor] ...\n" " lpoptions [-h servidor] [-E] -x impressora" msgid "" "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" msgstr "Uso: lpq [-P dest] [-U usuário] [-h máquina[:porta]] [-l] [+intervalo]" msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" msgstr "Uso: ppdc [opções] arquivo.drv [ ... arquivoN.drv ]" msgid "Usage: ppdhtml [options] filename.drv >filename.html" msgstr "Uso: ppdhtml [opções] arquivo.drv >arquivo.html" msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgstr "Uso: ppdi [opções] arquivo.ppd [ ... arquivoN.ppd ]" msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgstr "Uso: ppdmerge [opções] arquivo.ppd [ ... arquivoN.ppd ]" msgid "" "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" msgstr "Uso: ppdpo [opções] -o arquivo.po arquivo.drv [ ... arquivoN.drv ]" msgid "Usage: snmp [host-or-ip-address]" msgstr "Uso: snmp [máquina-ou-endereço-ip]" msgid "Value uses indefinite length" msgstr "Valor usa comprimento indefinido" msgid "VarBind uses indefinite length" msgstr "VarBind usa comprimento indefinido" msgid "Vellum Paper" msgstr "" msgid "Version uses indefinite length" msgstr "Version usa comprimento indefinido" msgid "Waiting for job to complete." msgstr "Esperando o trabalho completar." msgid "Waiting for printer to become available." msgstr "Esperando a impressora ficar disponível." msgid "Waiting for printer to finish." msgstr "Esperando a impressora finalizar." msgid "Warning, no Windows 2000 printer drivers are installed." msgstr "Aviso, nenhum driver de impressora Windows 2000 está instalado." msgid "Waterproof Fabric" msgstr "" msgid "Web Interface is Disabled" msgstr "Interface web está desabilitada" msgid "Wet Film" msgstr "" msgid "Windowed Envelope" msgstr "" msgid "Yes" msgstr "Sim" #, c-format msgid "" "You must access this page using the URL https://" "%s:%d%s." msgstr "" "Você tem que acessar esta página usando a URL https://%s:%d%s." msgid "Z Fold" msgstr "" msgid "ZPL Label Printer" msgstr "Impressora de etiqueta ZPL" msgid "Zebra" msgstr "Zebra" msgid "aborted" msgstr "abortado" msgid "accuracy-units" msgstr "Accuracy Units" msgid "accuracy-units.mm" msgstr "Mm" msgid "accuracy-units.nm" msgstr "Nm" msgid "accuracy-units.um" msgstr "Um" msgid "baling" msgstr "Bale Output" msgid "baling-type" msgstr "Baling Type" msgid "baling-type.band" msgstr "Band" msgid "baling-type.shrink-wrap" msgstr "Shrink Wrap" msgid "baling-type.wrap" msgstr "Wrap" msgid "baling-when" msgstr "Baling When" msgid "baling-when.after-job" msgstr "After Job" msgid "baling-when.after-sets" msgstr "After Sets" msgid "binding" msgstr "Bind Output" msgid "binding-reference-edge" msgstr "Binding Reference Edge" msgid "binding-reference-edge.bottom" msgstr "Bottom" msgid "binding-reference-edge.left" msgstr "Left" msgid "binding-reference-edge.right" msgstr "Right" msgid "binding-reference-edge.top" msgstr "Top" msgid "binding-type" msgstr "Binding Type" msgid "binding-type.adhesive" msgstr "Adhesive" msgid "binding-type.comb" msgstr "Comb" msgid "binding-type.flat" msgstr "Flat" msgid "binding-type.padding" msgstr "Padding" msgid "binding-type.perfect" msgstr "Perfect" msgid "binding-type.spiral" msgstr "Spiral" msgid "binding-type.tape" msgstr "Tape" msgid "binding-type.velo" msgstr "Velo" msgid "canceled" msgstr "cancelado" msgid "charge-info-message" msgstr "Charge Info Message" msgid "coating" msgstr "Coat Sheets" msgid "coating-sides" msgstr "Coating Sides" msgid "coating-sides.back" msgstr "Back" msgid "coating-sides.both" msgstr "Both" msgid "coating-sides.front" msgstr "Front" msgid "coating-type" msgstr "Coating Type" msgid "coating-type.archival" msgstr "Archival" msgid "coating-type.archival-glossy" msgstr "Archival Glossy" msgid "coating-type.archival-matte" msgstr "Archival Matte" msgid "coating-type.archival-semi-gloss" msgstr "Archival Semi Gloss" msgid "coating-type.glossy" msgstr "Glossy" msgid "coating-type.high-gloss" msgstr "High Gloss" msgid "coating-type.matte" msgstr "Matte" msgid "coating-type.semi-gloss" msgstr "Semi-Gloss" msgid "coating-type.silicone" msgstr "Silicone" msgid "coating-type.translucent" msgstr "Translucent" msgid "completed" msgstr "completou" msgid "confirmation-sheet-print" msgstr "Confirmation Sheet Print" msgid "copies" msgstr "Copies" msgid "cover-back" msgstr "Cover Back" msgid "cover-front" msgstr "Cover Front" msgid "cover-sheet-info" msgstr "Cover Sheet Info" msgid "cover-sheet-info-supported.date-time" msgstr "Date Time" msgid "cover-sheet-info-supported.from-name" msgstr "From Name" msgid "cover-sheet-info-supported.logo" msgstr "Logo" msgid "cover-sheet-info-supported.message" msgstr "Message" msgid "cover-sheet-info-supported.organization" msgstr "Organization" msgid "cover-sheet-info-supported.subject" msgstr "Subject" msgid "cover-sheet-info-supported.to-name" msgstr "To Name" msgid "cover-type" msgstr "Cover Type" msgid "cover-type.no-cover" msgstr "No Cover" msgid "cover-type.print-back" msgstr "Print Back" msgid "cover-type.print-both" msgstr "Print Both" msgid "cover-type.print-front" msgstr "Print Front" msgid "cover-type.print-none" msgstr "Print None" msgid "covering" msgstr "Cover Output" msgid "covering-name" msgstr "Covering Name" msgid "covering-name.plain" msgstr "Plain" msgid "covering-name.pre-cut" msgstr "Pre Cut" msgid "covering-name.pre-printed" msgstr "Pre Printed" msgid "cups-deviced failed to execute." msgstr "cups-deviced falhou na execução." msgid "cups-driverd failed to execute." msgstr "cups-driverd falhou na execução." #, c-format msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "cupsaddsmb: Nenhum arquivo PPD para a impressora \"%s\" - %s" msgid "cupsctl: Cannot set Listen or Port directly." msgstr "cupsctl: Não foi possível definir diretamente Porta ou Listen." #, c-format msgid "cupsctl: Unable to connect to server: %s" msgstr "cupsctl: Não foi possível conectar o servidor: %s" #, c-format msgid "cupsctl: Unknown option \"%s\"" msgstr "cupsctl: Opção desconhecida \"%s\"" #, c-format msgid "cupsctl: Unknown option \"-%c\"" msgstr "cupsctl: Opção desconhecida \"-%c\"" msgid "cupsd: Expected config filename after \"-c\" option." msgstr "cupsd: Esperava nome de arquivo de configuração após a opção \"-c\"." msgid "cupsd: Expected cups-files.conf filename after \"-s\" option." msgstr "" "cupsd: Esperava nome de arquivo de cups-files.conf após a opção \"-s\"." msgid "cupsd: On-demand support not compiled in, running in normal mode." msgstr "" "cupsd: Suporte à funcionalidade sob demanda não compilado, executando em " "modo normal." msgid "cupsd: Relative cups-files.conf filename not allowed." msgstr "cupsd: Nome de arquivo relativo para cups-files.conf não é permitido." msgid "cupsd: Unable to get current directory." msgstr "cupsd: Não é possível obter diretório atual." msgid "cupsd: Unable to get path to cups-files.conf file." msgstr "" "cupsd: Não foi possível obter o caminho para o arquivo cups-files.conf." #, c-format msgid "cupsd: Unknown argument \"%s\" - aborting." msgstr "cupsd: Argumento desconhecido \"%s\" - abortando." #, c-format msgid "cupsd: Unknown option \"%c\" - aborting." msgstr "cupsd: Opção desconhecida \"%c\" - abortando." #, c-format msgid "cupsfilter: Invalid document number %d." msgstr "cupsfilter: Número de documento inválido %d." #, c-format msgid "cupsfilter: Invalid job ID %d." msgstr "cupsfilter: ID de trabalho inválido %d." msgid "cupsfilter: Only one filename can be specified." msgstr "cupsfilter: Somente um nome de arquivo pode ser especificado." #, c-format msgid "cupsfilter: Unable to get job file - %s" msgstr "cupsfilter: Não é possível obter o arquivo do trabalho - %s" msgid "cupstestppd: The -q option is incompatible with the -v option." msgstr "cupstestppd: A opção -q é incompatível com a opção -v." msgid "cupstestppd: The -v option is incompatible with the -q option." msgstr "cupstestppd: A opção -v é incompatível com a opção -q." msgid "detailed-status-message" msgstr "Detailed Status Message" #, c-format msgid "device for %s/%s: %s" msgstr "dispositivo de %s/%s: %s" #, c-format msgid "device for %s: %s" msgstr "dispositivo de %s: %s" msgid "document-copies" msgstr "Copies" msgid "document-state" msgstr "Document State" msgid "document-state-reasons" msgstr "Detailed Document State" msgid "document-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "document-state-reasons.canceled-at-device" msgstr "Canceled At Device" msgid "document-state-reasons.canceled-by-operator" msgstr "Canceled By Operator" msgid "document-state-reasons.canceled-by-user" msgstr "Canceled By User" msgid "document-state-reasons.completed-successfully" msgstr "Completed Successfully" msgid "document-state-reasons.completed-with-errors" msgstr "Completed With Errors" msgid "document-state-reasons.completed-with-warnings" msgstr "Completed With Warnings" msgid "document-state-reasons.compression-error" msgstr "Compression Error" msgid "document-state-reasons.data-insufficient" msgstr "Data Insufficient" msgid "document-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "document-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "document-state-reasons.digital-signature-wait" msgstr "Digital Signature Wait" msgid "document-state-reasons.document-access-error" msgstr "Document Access Error" msgid "document-state-reasons.document-fetchable" msgstr "Document Fetchable" msgid "document-state-reasons.document-format-error" msgstr "Document Format Error" msgid "document-state-reasons.document-password-error" msgstr "Document Password Error" msgid "document-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "document-state-reasons.document-security-error" msgstr "Document Security Error" msgid "document-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "document-state-reasons.errors-detected" msgstr "Errors Detected" msgid "document-state-reasons.incoming" msgstr "Incoming" msgid "document-state-reasons.interpreting" msgstr "Interpreting" msgid "document-state-reasons.none" msgstr "None" msgid "document-state-reasons.outgoing" msgstr "Outgoing" msgid "document-state-reasons.printing" msgstr "Printing" msgid "document-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "document-state-reasons.queued" msgstr "Queued" msgid "document-state-reasons.queued-for-marker" msgstr "Queued For Marker" msgid "document-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "document-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "document-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "document-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "document-state-reasons.transforming" msgstr "Transforming" msgid "document-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "document-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "document-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "document-state.3" msgstr "Pending" msgid "document-state.5" msgstr "Processing" msgid "document-state.6" msgstr "Processing Stopped" msgid "document-state.7" msgstr "Canceled" msgid "document-state.8" msgstr "Aborted" msgid "document-state.9" msgstr "Completed" msgid "error-index uses indefinite length" msgstr "error-index usa comprimento indefinido" msgid "error-status uses indefinite length" msgstr "error-status usa comprimento indefinido" msgid "feed-orientation" msgstr "Feed Orientation" msgid "feed-orientation.long-edge-first" msgstr "Long Edge First" msgid "feed-orientation.short-edge-first" msgstr "Short Edge First" msgid "fetch-status-code" msgstr "Fetch Status Code" msgid "finishing-template" msgstr "Finishing Template" msgid "finishing-template.bale" msgstr "Bale" msgid "finishing-template.bind" msgstr "Bind" msgid "finishing-template.bind-bottom" msgstr "Bind Bottom" msgid "finishing-template.bind-left" msgstr "Bind Left" msgid "finishing-template.bind-right" msgstr "Bind Right" msgid "finishing-template.bind-top" msgstr "Bind Top" msgid "finishing-template.booklet-maker" msgstr "Booklet Maker" msgid "finishing-template.coat" msgstr "Coat" msgid "finishing-template.cover" msgstr "Cover" msgid "finishing-template.edge-stitch" msgstr "Edge Stitch" msgid "finishing-template.edge-stitch-bottom" msgstr "Edge Stitch Bottom" msgid "finishing-template.edge-stitch-left" msgstr "Edge Stitch Left" msgid "finishing-template.edge-stitch-right" msgstr "Edge Stitch Right" msgid "finishing-template.edge-stitch-top" msgstr "Edge Stitch Top" msgid "finishing-template.fold" msgstr "Fold" msgid "finishing-template.fold-accordion" msgstr "Fold Accordion" msgid "finishing-template.fold-double-gate" msgstr "Fold Double Gate" msgid "finishing-template.fold-engineering-z" msgstr "Fold Engineering Z" msgid "finishing-template.fold-gate" msgstr "Fold Gate" msgid "finishing-template.fold-half" msgstr "Fold Half" msgid "finishing-template.fold-half-z" msgstr "Fold Half Z" msgid "finishing-template.fold-left-gate" msgstr "Fold Left Gate" msgid "finishing-template.fold-letter" msgstr "Fold Letter" msgid "finishing-template.fold-parallel" msgstr "Fold Parallel" msgid "finishing-template.fold-poster" msgstr "Fold Poster" msgid "finishing-template.fold-right-gate" msgstr "Fold Right Gate" msgid "finishing-template.fold-z" msgstr "Fold Z" msgid "finishing-template.jdf-f10-1" msgstr "JDF F10 1" msgid "finishing-template.jdf-f10-2" msgstr "JDF F10 2" msgid "finishing-template.jdf-f10-3" msgstr "JDF F10 3" msgid "finishing-template.jdf-f12-1" msgstr "JDF F12 1" msgid "finishing-template.jdf-f12-10" msgstr "JDF F12 10" msgid "finishing-template.jdf-f12-11" msgstr "JDF F12 11" msgid "finishing-template.jdf-f12-12" msgstr "JDF F12 12" msgid "finishing-template.jdf-f12-13" msgstr "JDF F12 13" msgid "finishing-template.jdf-f12-14" msgstr "JDF F12 14" msgid "finishing-template.jdf-f12-2" msgstr "JDF F12 2" msgid "finishing-template.jdf-f12-3" msgstr "JDF F12 3" msgid "finishing-template.jdf-f12-4" msgstr "JDF F12 4" msgid "finishing-template.jdf-f12-5" msgstr "JDF F12 5" msgid "finishing-template.jdf-f12-6" msgstr "JDF F12 6" msgid "finishing-template.jdf-f12-7" msgstr "JDF F12 7" msgid "finishing-template.jdf-f12-8" msgstr "JDF F12 8" msgid "finishing-template.jdf-f12-9" msgstr "JDF F12 9" msgid "finishing-template.jdf-f14-1" msgstr "JDF F14 1" msgid "finishing-template.jdf-f16-1" msgstr "JDF F16 1" msgid "finishing-template.jdf-f16-10" msgstr "JDF F16 10" msgid "finishing-template.jdf-f16-11" msgstr "JDF F16 11" msgid "finishing-template.jdf-f16-12" msgstr "JDF F16 12" msgid "finishing-template.jdf-f16-13" msgstr "JDF F16 13" msgid "finishing-template.jdf-f16-14" msgstr "JDF F16 14" msgid "finishing-template.jdf-f16-2" msgstr "JDF F16 2" msgid "finishing-template.jdf-f16-3" msgstr "JDF F16 3" msgid "finishing-template.jdf-f16-4" msgstr "JDF F16 4" msgid "finishing-template.jdf-f16-5" msgstr "JDF F16 5" msgid "finishing-template.jdf-f16-6" msgstr "JDF F16 6" msgid "finishing-template.jdf-f16-7" msgstr "JDF F16 7" msgid "finishing-template.jdf-f16-8" msgstr "JDF F16 8" msgid "finishing-template.jdf-f16-9" msgstr "JDF F16 9" msgid "finishing-template.jdf-f18-1" msgstr "JDF F18 1" msgid "finishing-template.jdf-f18-2" msgstr "JDF F18 2" msgid "finishing-template.jdf-f18-3" msgstr "JDF F18 3" msgid "finishing-template.jdf-f18-4" msgstr "JDF F18 4" msgid "finishing-template.jdf-f18-5" msgstr "JDF F18 5" msgid "finishing-template.jdf-f18-6" msgstr "JDF F18 6" msgid "finishing-template.jdf-f18-7" msgstr "JDF F18 7" msgid "finishing-template.jdf-f18-8" msgstr "JDF F18 8" msgid "finishing-template.jdf-f18-9" msgstr "JDF F18 9" msgid "finishing-template.jdf-f2-1" msgstr "JDF F2 1" msgid "finishing-template.jdf-f20-1" msgstr "JDF F20 1" msgid "finishing-template.jdf-f20-2" msgstr "JDF F20 2" msgid "finishing-template.jdf-f24-1" msgstr "JDF F24 1" msgid "finishing-template.jdf-f24-10" msgstr "JDF F24 10" msgid "finishing-template.jdf-f24-11" msgstr "JDF F24 11" msgid "finishing-template.jdf-f24-2" msgstr "JDF F24 2" msgid "finishing-template.jdf-f24-3" msgstr "JDF F24 3" msgid "finishing-template.jdf-f24-4" msgstr "JDF F24 4" msgid "finishing-template.jdf-f24-5" msgstr "JDF F24 5" msgid "finishing-template.jdf-f24-6" msgstr "JDF F24 6" msgid "finishing-template.jdf-f24-7" msgstr "JDF F24 7" msgid "finishing-template.jdf-f24-8" msgstr "JDF F24 8" msgid "finishing-template.jdf-f24-9" msgstr "JDF F24 9" msgid "finishing-template.jdf-f28-1" msgstr "JDF F28 1" msgid "finishing-template.jdf-f32-1" msgstr "JDF F32 1" msgid "finishing-template.jdf-f32-2" msgstr "JDF F32 2" msgid "finishing-template.jdf-f32-3" msgstr "JDF F32 3" msgid "finishing-template.jdf-f32-4" msgstr "JDF F32 4" msgid "finishing-template.jdf-f32-5" msgstr "JDF F32 5" msgid "finishing-template.jdf-f32-6" msgstr "JDF F32 6" msgid "finishing-template.jdf-f32-7" msgstr "JDF F32 7" msgid "finishing-template.jdf-f32-8" msgstr "JDF F32 8" msgid "finishing-template.jdf-f32-9" msgstr "JDF F32 9" msgid "finishing-template.jdf-f36-1" msgstr "JDF F36 1" msgid "finishing-template.jdf-f36-2" msgstr "JDF F36 2" msgid "finishing-template.jdf-f4-1" msgstr "JDF F4 1" msgid "finishing-template.jdf-f4-2" msgstr "JDF F4 2" msgid "finishing-template.jdf-f40-1" msgstr "JDF F40 1" msgid "finishing-template.jdf-f48-1" msgstr "JDF F48 1" msgid "finishing-template.jdf-f48-2" msgstr "JDF F48 2" msgid "finishing-template.jdf-f6-1" msgstr "JDF F6 1" msgid "finishing-template.jdf-f6-2" msgstr "JDF F6 2" msgid "finishing-template.jdf-f6-3" msgstr "JDF F6 3" msgid "finishing-template.jdf-f6-4" msgstr "JDF F6 4" msgid "finishing-template.jdf-f6-5" msgstr "JDF F6 5" msgid "finishing-template.jdf-f6-6" msgstr "JDF F6 6" msgid "finishing-template.jdf-f6-7" msgstr "JDF F6 7" msgid "finishing-template.jdf-f6-8" msgstr "JDF F6 8" msgid "finishing-template.jdf-f64-1" msgstr "JDF F64 1" msgid "finishing-template.jdf-f64-2" msgstr "JDF F64 2" msgid "finishing-template.jdf-f8-1" msgstr "JDF F8 1" msgid "finishing-template.jdf-f8-2" msgstr "JDF F8 2" msgid "finishing-template.jdf-f8-3" msgstr "JDF F8 3" msgid "finishing-template.jdf-f8-4" msgstr "JDF F8 4" msgid "finishing-template.jdf-f8-5" msgstr "JDF F8 5" msgid "finishing-template.jdf-f8-6" msgstr "JDF F8 6" msgid "finishing-template.jdf-f8-7" msgstr "JDF F8 7" msgid "finishing-template.jog-offset" msgstr "Jog Offset" msgid "finishing-template.laminate" msgstr "Laminate" msgid "finishing-template.punch" msgstr "Punch" msgid "finishing-template.punch-bottom-left" msgstr "Punch Bottom Left" msgid "finishing-template.punch-bottom-right" msgstr "Punch Bottom Right" msgid "finishing-template.punch-dual-bottom" msgstr "Punch Dual Bottom" msgid "finishing-template.punch-dual-left" msgstr "Punch Dual Left" msgid "finishing-template.punch-dual-right" msgstr "Punch Dual Right" msgid "finishing-template.punch-dual-top" msgstr "Punch Dual Top" msgid "finishing-template.punch-multiple-bottom" msgstr "Punch Multiple Bottom" msgid "finishing-template.punch-multiple-left" msgstr "Punch Multiple Left" msgid "finishing-template.punch-multiple-right" msgstr "Punch Multiple Right" msgid "finishing-template.punch-multiple-top" msgstr "Punch Multiple Top" msgid "finishing-template.punch-quad-bottom" msgstr "Punch Quad Bottom" msgid "finishing-template.punch-quad-left" msgstr "Punch Quad Left" msgid "finishing-template.punch-quad-right" msgstr "Punch Quad Right" msgid "finishing-template.punch-quad-top" msgstr "Punch Quad Top" msgid "finishing-template.punch-top-left" msgstr "Punch Top Left" msgid "finishing-template.punch-top-right" msgstr "Punch Top Right" msgid "finishing-template.punch-triple-bottom" msgstr "Punch Triple Bottom" msgid "finishing-template.punch-triple-left" msgstr "Punch Triple Left" msgid "finishing-template.punch-triple-right" msgstr "Punch Triple Right" msgid "finishing-template.punch-triple-top" msgstr "Punch Triple Top" msgid "finishing-template.saddle-stitch" msgstr "Saddle Stitch" msgid "finishing-template.staple" msgstr "Staple" msgid "finishing-template.staple-bottom-left" msgstr "Staple Bottom Left" msgid "finishing-template.staple-bottom-right" msgstr "Staple Bottom Right" msgid "finishing-template.staple-dual-bottom" msgstr "Staple Dual Bottom" msgid "finishing-template.staple-dual-left" msgstr "Staple Dual Left" msgid "finishing-template.staple-dual-right" msgstr "Staple Dual Right" msgid "finishing-template.staple-dual-top" msgstr "Staple Dual Top" msgid "finishing-template.staple-top-left" msgstr "Staple Top Left" msgid "finishing-template.staple-top-right" msgstr "Staple Top Right" msgid "finishing-template.staple-triple-bottom" msgstr "Staple Triple Bottom" msgid "finishing-template.staple-triple-left" msgstr "Staple Triple Left" msgid "finishing-template.staple-triple-right" msgstr "Staple Triple Right" msgid "finishing-template.staple-triple-top" msgstr "Staple Triple Top" msgid "finishing-template.trim" msgstr "Trim" msgid "finishing-template.trim-after-copies" msgstr "Trim After Copies" msgid "finishing-template.trim-after-documents" msgstr "Trim After Documents" msgid "finishing-template.trim-after-job" msgstr "Trim After Job" msgid "finishing-template.trim-after-pages" msgstr "Trim After Pages" msgid "finishings" msgstr "Finishings" msgid "finishings-col" msgstr "Finishings" msgid "finishings.10" msgstr "Fold" msgid "finishings.100" msgstr "Fold Z" msgid "finishings.101" msgstr "Fold Engineering Z" msgid "finishings.11" msgstr "Trim" msgid "finishings.12" msgstr "Bale" msgid "finishings.13" msgstr "Booklet Maker" msgid "finishings.14" msgstr "Jog Offset" msgid "finishings.15" msgstr "Coat" msgid "finishings.16" msgstr "Laminate" msgid "finishings.20" msgstr "Staple Top Left" msgid "finishings.21" msgstr "Staple Bottom Left" msgid "finishings.22" msgstr "Staple Top Right" msgid "finishings.23" msgstr "Staple Bottom Right" msgid "finishings.24" msgstr "Edge Stitch Left" msgid "finishings.25" msgstr "Edge Stitch Top" msgid "finishings.26" msgstr "Edge Stitch Right" msgid "finishings.27" msgstr "Edge Stitch Bottom" msgid "finishings.28" msgstr "Staple Dual Left" msgid "finishings.29" msgstr "Staple Dual Top" msgid "finishings.3" msgstr "None" msgid "finishings.30" msgstr "Staple Dual Right" msgid "finishings.31" msgstr "Staple Dual Bottom" msgid "finishings.32" msgstr "Staple Triple Left" msgid "finishings.33" msgstr "Staple Triple Top" msgid "finishings.34" msgstr "Staple Triple Right" msgid "finishings.35" msgstr "Staple Triple Bottom" msgid "finishings.4" msgstr "Staple" msgid "finishings.5" msgstr "Punch" msgid "finishings.50" msgstr "Bind Left" msgid "finishings.51" msgstr "Bind Top" msgid "finishings.52" msgstr "Bind Right" msgid "finishings.53" msgstr "Bind Bottom" msgid "finishings.6" msgstr "Cover" msgid "finishings.60" msgstr "Trim After Pages" msgid "finishings.61" msgstr "Trim After Documents" msgid "finishings.62" msgstr "Trim After Copies" msgid "finishings.63" msgstr "Trim After Job" msgid "finishings.7" msgstr "Bind" msgid "finishings.70" msgstr "Punch Top Left" msgid "finishings.71" msgstr "Punch Bottom Left" msgid "finishings.72" msgstr "Punch Top Right" msgid "finishings.73" msgstr "Punch Bottom Right" msgid "finishings.74" msgstr "Punch Dual Left" msgid "finishings.75" msgstr "Punch Dual Top" msgid "finishings.76" msgstr "Punch Dual Right" msgid "finishings.77" msgstr "Punch Dual Bottom" msgid "finishings.78" msgstr "Punch Triple Left" msgid "finishings.79" msgstr "Punch Triple Top" msgid "finishings.8" msgstr "Saddle Stitch" msgid "finishings.80" msgstr "Punch Triple Right" msgid "finishings.81" msgstr "Punch Triple Bottom" msgid "finishings.82" msgstr "Punch Quad Left" msgid "finishings.83" msgstr "Punch Quad Top" msgid "finishings.84" msgstr "Punch Quad Right" msgid "finishings.85" msgstr "Punch Quad Bottom" msgid "finishings.86" msgstr "Punch Multiple Left" msgid "finishings.87" msgstr "Punch Multiple Top" msgid "finishings.88" msgstr "Punch Multiple Right" msgid "finishings.89" msgstr "Punch Multiple Bottom" msgid "finishings.9" msgstr "Edge Stitch" msgid "finishings.90" msgstr "Fold Accordion" msgid "finishings.91" msgstr "Fold Double Gate" msgid "finishings.92" msgstr "Fold Gate" msgid "finishings.93" msgstr "Fold Half" msgid "finishings.94" msgstr "Fold Half Z" msgid "finishings.95" msgstr "Fold Left Gate" msgid "finishings.96" msgstr "Fold Letter" msgid "finishings.97" msgstr "Fold Parallel" msgid "finishings.98" msgstr "Fold Poster" msgid "finishings.99" msgstr "Fold Right Gate" msgid "folding" msgstr "Fold" msgid "folding-direction" msgstr "Folding Direction" msgid "folding-direction.inward" msgstr "Inward" msgid "folding-direction.outward" msgstr "Outward" msgid "folding-offset" msgstr "Fold Position" msgid "folding-reference-edge" msgstr "Folding Reference Edge" msgid "folding-reference-edge.bottom" msgstr "Bottom" msgid "folding-reference-edge.left" msgstr "Left" msgid "folding-reference-edge.right" msgstr "Right" msgid "folding-reference-edge.top" msgstr "Top" msgid "font-name-requested" msgstr "Font Name" msgid "font-size-requested" msgstr "Font Size" msgid "force-front-side" msgstr "Force Front Side" msgid "from-name" msgstr "From Name" msgid "held" msgstr "retido" msgid "help\t\tGet help on commands." msgstr "help\t\tObtém ajuda sobre os comandos." msgid "idle" msgstr "inativo" msgid "imposition-template" msgstr "Imposition Template" msgid "imposition-template.none" msgstr "None" msgid "imposition-template.signature" msgstr "Signature" msgid "input-attributes" msgstr "Input Attributes" msgid "input-auto-scaling" msgstr "Scan Auto Scaling" msgid "input-auto-skew-correction" msgstr "Scan Auto Skew Correction" msgid "input-brightness" msgstr "Scan Brightness" msgid "input-color-mode" msgstr "Input Color Mode" msgid "input-color-mode.auto" msgstr "Automatic" msgid "input-color-mode.bi-level" msgstr "Bi-Level" msgid "input-color-mode.cmyk_16" msgstr "CMYK 16" msgid "input-color-mode.cmyk_8" msgstr "CMYK 8" msgid "input-color-mode.color" msgstr "Color" msgid "input-color-mode.color_8" msgstr "Color 8" msgid "input-color-mode.monochrome" msgstr "Monochrome" msgid "input-color-mode.monochrome_16" msgstr "Monochrome 16" msgid "input-color-mode.monochrome_4" msgstr "Monochrome 4" msgid "input-color-mode.monochrome_8" msgstr "Monochrome 8" msgid "input-color-mode.rgb_16" msgstr "RGB 16" msgid "input-color-mode.rgba_16" msgstr "RGBA 16" msgid "input-color-mode.rgba_8" msgstr "RGBA 8" msgid "input-content-type" msgstr "Input Content Type" msgid "input-content-type.auto" msgstr "Automatic" msgid "input-content-type.halftone" msgstr "Halftone" msgid "input-content-type.line-art" msgstr "Line Art" msgid "input-content-type.magazine" msgstr "Magazine" msgid "input-content-type.photo" msgstr "Photo" msgid "input-content-type.text" msgstr "Text" msgid "input-content-type.text-and-photo" msgstr "Text And Photo" msgid "input-contrast" msgstr "Scan Contrast" msgid "input-film-scan-mode" msgstr "Input Film Scan Mode" msgid "input-film-scan-mode.black-and-white-negative-film" msgstr "Black And White Negative Film" msgid "input-film-scan-mode.color-negative-film" msgstr "Color Negative Film" msgid "input-film-scan-mode.color-slide-film" msgstr "Color Slide Film" msgid "input-film-scan-mode.not-applicable" msgstr "Not Applicable" msgid "input-images-to-transfer" msgstr "Scan Images To Transfer" msgid "input-media" msgstr "Input Media" msgid "input-media.auto" msgstr "Automatic" msgid "input-orientation-requested" msgstr "Input Orientation" msgid "input-quality" msgstr "Input Quality" msgid "input-resolution" msgstr "Scan Resolution" msgid "input-scaling-height" msgstr "Scan Scaling Height" msgid "input-scaling-width" msgstr "Scan Scaling Width" msgid "input-scan-regions" msgstr "Scan Regions" msgid "input-sharpness" msgstr "Scan Sharpness" msgid "input-sides" msgstr "Input Sides" msgid "input-source" msgstr "Input Source" msgid "input-source.adf" msgstr "Adf" msgid "input-source.film-reader" msgstr "Film Reader" msgid "input-source.platen" msgstr "Platen" msgid "insert-after-page-number" msgstr "Insert Page Number" msgid "insert-count" msgstr "Insert Count" msgid "insert-sheet" msgstr "Insert Sheet" #, c-format msgid "ippfind: Bad regular expression: %s" msgstr "ippfind: Expressão regular inválida: %s" msgid "ippfind: Cannot use --and after --or." msgstr "ippfind: Não é possível usar --and após --or." #, c-format msgid "ippfind: Expected key name after %s." msgstr "ippfind: Esperava nome da chave após %s." #, c-format msgid "ippfind: Expected port range after %s." msgstr "ippfind: Esperava faixa de portas após %s." #, c-format msgid "ippfind: Expected program after %s." msgstr "ippfind: Esperava o programa após %s." #, c-format msgid "ippfind: Expected semi-colon after %s." msgstr "ippfind: Esperava ponto-e-vírgula após %s." msgid "ippfind: Missing close brace in substitution." msgstr "ippfind: Faltando chave de fechamento na substituição." msgid "ippfind: Missing close parenthesis." msgstr "ippfind: Faltando parênteses de fechamento." msgid "ippfind: Missing expression before \"--and\"." msgstr "ippfind: Faltando expressão antes de \"--and\"." msgid "ippfind: Missing expression before \"--or\"." msgstr "ippfind: Faltando expressão antes de \"--or\"." #, c-format msgid "ippfind: Missing key name after %s." msgstr "ippfind: Faltando nome da chave após %s." msgid "ippfind: Missing open parenthesis." msgstr "ippfind: Faltando parênteses de abertura." #, c-format msgid "ippfind: Missing program after %s." msgstr "ippfind: Faltando programa após %s." #, c-format msgid "ippfind: Missing regular expression after %s." msgstr "ippfind: Faltando expressão regular após %s." #, c-format msgid "ippfind: Missing semi-colon after %s." msgstr "ippfind: Faltando dois-pontos após %s." msgid "ippfind: Out of memory." msgstr "ippfind: Memória insuficiente." msgid "ippfind: Too many parenthesis." msgstr "ippfind: Número excessivo de parênteses." #, c-format msgid "ippfind: Unable to browse or resolve: %s" msgstr "ippfind: Não foi possível navegar ou resolver: %s" #, c-format msgid "ippfind: Unable to execute \"%s\": %s" msgstr "ippfind: Não foi possível executar \"%s\": %s" #, c-format msgid "ippfind: Unable to use Bonjour: %s" msgstr "ippfind: Não foi possível usar Bonjour: %s" #, c-format msgid "ippfind: Unknown variable \"{%s}\"." msgstr "ippfind: Argumento desconhecido \"{%s}\"." msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." msgstr "ipptool: \"-i\" e \"-n\" são incompatíveis com \"-P\" e \"-X\"." #, c-format msgid "ipptool: Bad URI - %s." msgstr "ipptool: URI inválida - %s." msgid "ipptool: Invalid seconds for \"-i\"." msgstr "ipptool: Segundos inválidos para \"-i\"." msgid "ipptool: May only specify a single URI." msgstr "ipptool: Só é possível especificar uma única URI." msgid "ipptool: Missing count for \"-n\"." msgstr "ipptool: Contagem faltando para \"-n\"." msgid "ipptool: Missing filename for \"-f\"." msgstr "ipptool: Faltando nome de arquivo para \"-f\"." msgid "ipptool: Missing name=value for \"-d\"." msgstr "ipptool: Faltando nome=valor para\"-d\"." msgid "ipptool: Missing seconds for \"-i\"." msgstr "ipptool: Faltando segundos para \"-i\"." msgid "ipptool: URI required before test file." msgstr "ipptool: URI necessária antes do arquivo de teste." #, c-format msgid "ipptool: Unknown option \"-%c\"." msgstr "ipptool: Opção desconhecida \"-%c\"." msgid "job-account-id" msgstr "Job Account ID" msgid "job-account-type" msgstr "Job Account Type" msgid "job-account-type.general" msgstr "General" msgid "job-account-type.group" msgstr "Group" msgid "job-account-type.none" msgstr "None" msgid "job-accounting-output-bin" msgstr "Job Accounting Output Bin" msgid "job-accounting-sheets" msgstr "Job Accounting Sheets" msgid "job-accounting-sheets-type" msgstr "Job Accounting Sheets Type" msgid "job-accounting-sheets-type.none" msgstr "None" msgid "job-accounting-sheets-type.standard" msgstr "Standard" msgid "job-accounting-user-id" msgstr "Job Accounting User ID" msgid "job-collation-type" msgstr "Job Collation Type" msgid "job-collation-type.3" msgstr "Uncollated Sheets" msgid "job-collation-type.4" msgstr "Collated Documents" msgid "job-collation-type.5" msgstr "Uncollated Documents" msgid "job-copies" msgstr "Job Copies" msgid "job-cover-back" msgstr "Job Cover Back" msgid "job-cover-front" msgstr "Job Cover Front" msgid "job-delay-output-until" msgstr "Job Delay Output Until" msgid "job-delay-output-until-time" msgstr "Job Delay Output Until Time" msgid "job-delay-output-until.day-time" msgstr "Day Time" msgid "job-delay-output-until.evening" msgstr "Evening" msgid "job-delay-output-until.indefinite" msgstr "Indefinite" msgid "job-delay-output-until.night" msgstr "Night" msgid "job-delay-output-until.no-delay-output" msgstr "No Delay Output" msgid "job-delay-output-until.second-shift" msgstr "Second Shift" msgid "job-delay-output-until.third-shift" msgstr "Third Shift" msgid "job-delay-output-until.weekend" msgstr "Weekend" msgid "job-error-action" msgstr "Job Error Action" msgid "job-error-action.abort-job" msgstr "Abort Job" msgid "job-error-action.cancel-job" msgstr "Cancel Job" msgid "job-error-action.continue-job" msgstr "Continue Job" msgid "job-error-action.suspend-job" msgstr "Suspend Job" msgid "job-error-sheet" msgstr "Job Error Sheet" msgid "job-error-sheet-type" msgstr "Job Error Sheet Type" msgid "job-error-sheet-type.none" msgstr "None" msgid "job-error-sheet-type.standard" msgstr "Standard" msgid "job-error-sheet-when" msgstr "Job Error Sheet When" msgid "job-error-sheet-when.always" msgstr "Always" msgid "job-error-sheet-when.on-error" msgstr "On Error" msgid "job-finishings" msgstr "Job Finishings" msgid "job-hold-until" msgstr "Hold Until" msgid "job-hold-until-time" msgstr "Job Hold Until Time" msgid "job-hold-until.day-time" msgstr "Day Time" msgid "job-hold-until.evening" msgstr "Evening" msgid "job-hold-until.indefinite" msgstr "Released" msgid "job-hold-until.night" msgstr "Night" msgid "job-hold-until.no-hold" msgstr "No Hold" msgid "job-hold-until.second-shift" msgstr "Second Shift" msgid "job-hold-until.third-shift" msgstr "Third Shift" msgid "job-hold-until.weekend" msgstr "Weekend" msgid "job-mandatory-attributes" msgstr "Job Mandatory Attributes" msgid "job-name" msgstr "Job Name" msgid "job-phone-number" msgstr "Job Phone Number" msgid "job-printer-uri attribute missing." msgstr "Faltando atributo de job-printer-uri." msgid "job-priority" msgstr "Job Priority" msgid "job-recipient-name" msgstr "Job Recipient Name" msgid "job-save-disposition" msgstr "Job Save Disposition" msgid "job-sheet-message" msgstr "Job Sheet Message" msgid "job-sheets" msgstr "Banner Page" msgid "job-sheets-col" msgstr "Banner Page" msgid "job-sheets.first-print-stream-page" msgstr "First Print Stream Page" msgid "job-sheets.job-both-sheet" msgstr "Start and End Sheets" msgid "job-sheets.job-end-sheet" msgstr "End Sheet" msgid "job-sheets.job-start-sheet" msgstr "Start Sheet" msgid "job-sheets.none" msgstr "None" msgid "job-sheets.standard" msgstr "Standard" msgid "job-state" msgstr "Job State" msgid "job-state-message" msgstr "Job State Message" msgid "job-state-reasons" msgstr "Detailed Job State" msgid "job-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "job-state-reasons.account-authorization-failed" msgstr "Account Authorization Failed" msgid "job-state-reasons.account-closed" msgstr "Account Closed" msgid "job-state-reasons.account-info-needed" msgstr "Account Info Needed" msgid "job-state-reasons.account-limit-reached" msgstr "Account Limit Reached" msgid "job-state-reasons.compression-error" msgstr "Compression Error" msgid "job-state-reasons.conflicting-attributes" msgstr "Conflicting Attributes" msgid "job-state-reasons.connected-to-destination" msgstr "Connected To Destination" msgid "job-state-reasons.connecting-to-destination" msgstr "Connecting To Destination" msgid "job-state-reasons.destination-uri-failed" msgstr "Destination Uri Failed" msgid "job-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "job-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "job-state-reasons.document-access-error" msgstr "Document Access Error" msgid "job-state-reasons.document-format-error" msgstr "Document Format Error" msgid "job-state-reasons.document-password-error" msgstr "Document Password Error" msgid "job-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "job-state-reasons.document-security-error" msgstr "Document Security Error" msgid "job-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "job-state-reasons.errors-detected" msgstr "Errors Detected" msgid "job-state-reasons.job-canceled-at-device" msgstr "Job Canceled At Device" msgid "job-state-reasons.job-canceled-by-operator" msgstr "Job Canceled By Operator" msgid "job-state-reasons.job-canceled-by-user" msgstr "Job Canceled By User" msgid "job-state-reasons.job-completed-successfully" msgstr "Job Completed Successfully" msgid "job-state-reasons.job-completed-with-errors" msgstr "Job Completed With Errors" msgid "job-state-reasons.job-completed-with-warnings" msgstr "Job Completed With Warnings" msgid "job-state-reasons.job-data-insufficient" msgstr "Job Data Insufficient" msgid "job-state-reasons.job-delay-output-until-specified" msgstr "Job Delay Output Until Specified" msgid "job-state-reasons.job-digital-signature-wait" msgstr "Job Digital Signature Wait" msgid "job-state-reasons.job-fetchable" msgstr "Job Fetchable" msgid "job-state-reasons.job-held-for-review" msgstr "Job Held For Review" msgid "job-state-reasons.job-hold-until-specified" msgstr "Job Hold Until Specified" msgid "job-state-reasons.job-incoming" msgstr "Job Incoming" msgid "job-state-reasons.job-interpreting" msgstr "Job Interpreting" msgid "job-state-reasons.job-outgoing" msgstr "Job Outgoing" msgid "job-state-reasons.job-password-wait" msgstr "Job Password Wait" msgid "job-state-reasons.job-printed-successfully" msgstr "Job Printed Successfully" msgid "job-state-reasons.job-printed-with-errors" msgstr "Job Printed With Errors" msgid "job-state-reasons.job-printed-with-warnings" msgstr "Job Printed With Warnings" msgid "job-state-reasons.job-printing" msgstr "Job Printing" msgid "job-state-reasons.job-queued" msgstr "Job Queued" msgid "job-state-reasons.job-queued-for-marker" msgstr "Job Queued For Marker" msgid "job-state-reasons.job-release-wait" msgstr "Job Release Wait" msgid "job-state-reasons.job-restartable" msgstr "Job Restartable" msgid "job-state-reasons.job-resuming" msgstr "Job Resuming" msgid "job-state-reasons.job-saved-successfully" msgstr "Job Saved Successfully" msgid "job-state-reasons.job-saved-with-errors" msgstr "Job Saved With Errors" msgid "job-state-reasons.job-saved-with-warnings" msgstr "Job Saved With Warnings" msgid "job-state-reasons.job-saving" msgstr "Job Saving" msgid "job-state-reasons.job-spooling" msgstr "Job Spooling" msgid "job-state-reasons.job-streaming" msgstr "Job Streaming" msgid "job-state-reasons.job-suspended" msgstr "Job Suspended" msgid "job-state-reasons.job-suspended-by-operator" msgstr "Job Suspended By Operator" msgid "job-state-reasons.job-suspended-by-system" msgstr "Job Suspended By System" msgid "job-state-reasons.job-suspended-by-user" msgstr "Job Suspended By User" msgid "job-state-reasons.job-suspending" msgstr "Job Suspending" msgid "job-state-reasons.job-transferring" msgstr "Job Transferring" msgid "job-state-reasons.job-transforming" msgstr "Job Transforming" msgid "job-state-reasons.none" msgstr "None" msgid "job-state-reasons.printer-stopped" msgstr "Printer Stopped" msgid "job-state-reasons.printer-stopped-partly" msgstr "Printer Stopped Partly" msgid "job-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "job-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "job-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "job-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "job-state-reasons.service-off-line" msgstr "Service Off Line" msgid "job-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "job-state-reasons.unsupported-attributes-or-values" msgstr "Unsupported Attributes Or Values" msgid "job-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "job-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "job-state-reasons.waiting-for-user-action" msgstr "Waiting For User Action" msgid "job-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "job-state.3" msgstr "Pending" msgid "job-state.4" msgstr "Pending Held" msgid "job-state.5" msgstr "Processing" msgid "job-state.6" msgstr "Processing Stopped" msgid "job-state.7" msgstr "Canceled" msgid "job-state.8" msgstr "Aborted" msgid "job-state.9" msgstr "Completed" msgid "laminating" msgstr "Laminate Pages" msgid "laminating-sides" msgstr "Laminating Sides" msgid "laminating-sides.back" msgstr "Back" msgid "laminating-sides.both" msgstr "Both" msgid "laminating-sides.front" msgstr "Front" msgid "laminating-type" msgstr "Laminating Type" msgid "laminating-type.archival" msgstr "Archival" msgid "laminating-type.glossy" msgstr "Glossy" msgid "laminating-type.high-gloss" msgstr "High Gloss" msgid "laminating-type.matte" msgstr "Matte" msgid "laminating-type.semi-gloss" msgstr "Semi-Gloss" msgid "laminating-type.translucent" msgstr "Translucent" msgid "logo" msgstr "Logo" msgid "lpadmin: Class name can only contain printable characters." msgstr "lpadmin: Nome da classe só pode conter caracteres imprimíveis." #, c-format msgid "lpadmin: Expected PPD after \"-%c\" option." msgstr "" msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option." msgstr "" "lpadmin: Esperava permitir/negar lista de usuários após a opção \"-u\"." msgid "lpadmin: Expected class after \"-r\" option." msgstr "lpadmin: Esperava a classe após a opção \"-r\"." msgid "lpadmin: Expected class name after \"-c\" option." msgstr "lpadmin: Esperava nome de classe após a opção \"-c\"." msgid "lpadmin: Expected description after \"-D\" option." msgstr "lpadmin: Esperava descrição após a opção \"-D\"." msgid "lpadmin: Expected device URI after \"-v\" option." msgstr "lpadmin: Esperava URI de dispositivo após a opção \"-v\"." msgid "lpadmin: Expected file type(s) after \"-I\" option." msgstr "lpadmin: Esperava tipo(s) de arquivo(s) após a opção \"-I\"." msgid "lpadmin: Expected hostname after \"-h\" option." msgstr "lpadmin: Esperava nome do máquina após a opção \"-h\"." msgid "lpadmin: Expected location after \"-L\" option." msgstr "lpadmin: Esperava localização após a opção \"-L\"." msgid "lpadmin: Expected model after \"-m\" option." msgstr "lpadmin: Esperava modelo após a opção \"-m\"." msgid "lpadmin: Expected name after \"-R\" option." msgstr "lpadmin: Esperava nome após a opção \"-R\"." msgid "lpadmin: Expected name=value after \"-o\" option." msgstr "lpadmin: Esperava nome=valor após a opção \"-o\"." msgid "lpadmin: Expected printer after \"-p\" option." msgstr "lpadmin: Esperava impressora após a opção \"-p\"." msgid "lpadmin: Expected printer name after \"-d\" option." msgstr "lpadmin: Esperava nome da impressora após a opção \"-d\"." msgid "lpadmin: Expected printer or class after \"-x\" option." msgstr "lpadmin: Esperava impressora ou classe após a opção \"-x\"." msgid "lpadmin: No member names were seen." msgstr "lpadmin: Nenhum nome de membros foi encontrado." #, c-format msgid "lpadmin: Printer %s is already a member of class %s." msgstr "lpadmin: Impressora %s já é um membro da classe %s." #, c-format msgid "lpadmin: Printer %s is not a member of class %s." msgstr "lpadmin: Impressora %s não é membro da classe %s." msgid "lpadmin: Printer name can only contain printable characters." msgstr "lpadmin: Nome da impressora só pode conter caracteres imprimíveis." msgid "" "lpadmin: Raw queues are deprecated and will stop working in a future version " "of CUPS." msgstr "" msgid "" "lpadmin: System V interface scripts are no longer supported for security " "reasons." msgstr "" msgid "" "lpadmin: Unable to add a printer to the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: Não é possível adicionar impressora à classe\n" " Você deve primeiro especificar o nome da impressora." #, c-format msgid "lpadmin: Unable to connect to server: %s" msgstr "lpadmin: Não foi possível conectar ao servidor: %s" msgid "lpadmin: Unable to create temporary file" msgstr "lpadmin: Não foi possível criar arquivo temporário" msgid "" "lpadmin: Unable to delete option:\n" " You must specify a printer name first." msgstr "" "lpadmin: Não foi possível excluir opção:\n" " Você deve primeiro especificar o nome da impressora." #, c-format msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d." msgstr "lpadmin: Não foi possível abrir PPD \"%s\": %s na linha %d." #, c-format msgid "lpadmin: Unable to open PPD file \"%s\" - %s" msgstr "lpadmin: Não foi possível abrir o arquivo PPD \"%s\" - %s" msgid "" "lpadmin: Unable to remove a printer from the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: Não foi possível excluir impressora da classe:\n" " Você deve primeiro especificar o nome da impressora." msgid "" "lpadmin: Unable to set the printer options:\n" " You must specify a printer name first." msgstr "" "lpadmin: Não foi possível definir as opções da impressora:\n" " Você deve primeiro especificar o nome da impressora." #, c-format msgid "lpadmin: Unknown allow/deny option \"%s\"." msgstr "lpadmin: Opção de permitir/negar desconhecida \"%s\"." #, c-format msgid "lpadmin: Unknown argument \"%s\"." msgstr "lpadmin: Argumento desconhecido \"%s\"." #, c-format msgid "lpadmin: Unknown option \"%c\"." msgstr "lpadmin: Opção desconhecida \"%c\"." msgid "lpadmin: Use the 'everywhere' model for shared printers." msgstr "" msgid "lpadmin: Warning - content type list ignored." msgstr "lpadmin: Aviso - lista de tipos de conteúdos ignorada." msgid "lpc> " msgstr "lpc> " msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"." msgstr "" "lpinfo: Esperava string de ID de dispositivo 1284 após \"--device-id\"." msgid "lpinfo: Expected language after \"--language\"." msgstr "lpinfo: Esperava idioma após \"--language\"." msgid "lpinfo: Expected make and model after \"--make-and-model\"." msgstr "lpinfo: Esperava marca e modelo após \"--make-and-model\"." msgid "lpinfo: Expected product string after \"--product\"." msgstr "lpinfo: Esperava string de produto após \"--product\"." msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"." msgstr "lpinfo: Esperava lista de esquemas após \"--exclude-schemes\"." msgid "lpinfo: Expected scheme list after \"--include-schemes\"." msgstr "lpinfo: Esperava lista de esquemas após \"--include-schemes\"." msgid "lpinfo: Expected timeout after \"--timeout\"." msgstr "lpinfo: Esperava tempo de espera após \"--timeout\"." #, c-format msgid "lpmove: Unable to connect to server: %s" msgstr "lpmove: Não foi possível conectar ao servidor: %s" #, c-format msgid "lpmove: Unknown argument \"%s\"." msgstr "lpmove: Argumento desconhecido \"%s\"." msgid "lpoptions: No printers." msgstr "lpoptions: Nenhuma impressora." #, c-format msgid "lpoptions: Unable to add printer or instance: %s" msgstr "lpoptions: Não foi possível adicionar impressora ou instância: %s" #, c-format msgid "lpoptions: Unable to get PPD file for %s: %s" msgstr "lpoptions: Não foi possível obter o arquivo PPD para %s: %s" #, c-format msgid "lpoptions: Unable to open PPD file for %s." msgstr "lpoptions: Não foi possível abrir o arquivo PPD para %s." msgid "lpoptions: Unknown printer or class." msgstr "lpoptions: Impressora ou classe desconhecida." #, c-format msgid "" "lpstat: error - %s environment variable names non-existent destination \"%s" "\"." msgstr "" "lpstat: Erro - variável de ambiente %s contém destino inexistente \"%s\"." msgid "material-amount" msgstr "Amount of Material" msgid "material-amount-units" msgstr "Material Amount Units" msgid "material-amount-units.g" msgstr "G" msgid "material-amount-units.kg" msgstr "Kg" msgid "material-amount-units.l" msgstr "L" msgid "material-amount-units.m" msgstr "M" msgid "material-amount-units.ml" msgstr "Ml" msgid "material-amount-units.mm" msgstr "Mm" msgid "material-color" msgstr "Material Color" msgid "material-diameter" msgstr "Material Diameter" msgid "material-diameter-tolerance" msgstr "Material Diameter Tolerance" msgid "material-fill-density" msgstr "Material Fill Density" msgid "material-name" msgstr "Material Name" msgid "material-purpose" msgstr "Material Purpose" msgid "material-purpose.all" msgstr "All" msgid "material-purpose.base" msgstr "Base" msgid "material-purpose.in-fill" msgstr "In Fill" msgid "material-purpose.shell" msgstr "Shell" msgid "material-purpose.support" msgstr "Support" msgid "material-rate" msgstr "Feed Rate" msgid "material-rate-units" msgstr "Material Rate Units" msgid "material-rate-units.mg_second" msgstr "Mg Second" msgid "material-rate-units.ml_second" msgstr "Ml Second" msgid "material-rate-units.mm_second" msgstr "Mm Second" msgid "material-shell-thickness" msgstr "Material Shell Thickness" msgid "material-temperature" msgstr "Material Temperature" msgid "material-type" msgstr "Material Type" msgid "material-type.abs" msgstr "Abs" msgid "material-type.abs-carbon-fiber" msgstr "Abs Carbon Fiber" msgid "material-type.abs-carbon-nanotube" msgstr "Abs Carbon Nanotube" msgid "material-type.chocolate" msgstr "Chocolate" msgid "material-type.gold" msgstr "Gold" msgid "material-type.nylon" msgstr "Nylon" msgid "material-type.pet" msgstr "Pet" msgid "material-type.photopolymer" msgstr "Photopolymer" msgid "material-type.pla" msgstr "Pla" msgid "material-type.pla-conductive" msgstr "Pla Conductive" msgid "material-type.pla-flexible" msgstr "Pla Flexible" msgid "material-type.pla-magnetic" msgstr "Pla Magnetic" msgid "material-type.pla-steel" msgstr "Pla Steel" msgid "material-type.pla-stone" msgstr "Pla Stone" msgid "material-type.pla-wood" msgstr "Pla Wood" msgid "material-type.polycarbonate" msgstr "Polycarbonate" msgid "material-type.pva-dissolvable" msgstr "Dissolvable PVA" msgid "material-type.silver" msgstr "Silver" msgid "material-type.titanium" msgstr "Titanium" msgid "material-type.wax" msgstr "Wax" msgid "materials-col" msgstr "Materials" msgid "media" msgstr "Media" msgid "media-back-coating" msgstr "Media Back Coating" msgid "media-back-coating.glossy" msgstr "Glossy" msgid "media-back-coating.high-gloss" msgstr "High Gloss" msgid "media-back-coating.matte" msgstr "Matte" msgid "media-back-coating.none" msgstr "None" msgid "media-back-coating.satin" msgstr "Satin" msgid "media-back-coating.semi-gloss" msgstr "Semi-Gloss" msgid "media-bottom-margin" msgstr "Media Bottom Margin" msgid "media-col" msgstr "Media" msgid "media-color" msgstr "Media Color" msgid "media-color.black" msgstr "Black" msgid "media-color.blue" msgstr "Blue" msgid "media-color.brown" msgstr "Brown" msgid "media-color.buff" msgstr "Buff" msgid "media-color.clear-black" msgstr "Clear Black" msgid "media-color.clear-blue" msgstr "Clear Blue" msgid "media-color.clear-brown" msgstr "Clear Brown" msgid "media-color.clear-buff" msgstr "Clear Buff" msgid "media-color.clear-cyan" msgstr "Clear Cyan" msgid "media-color.clear-gold" msgstr "Clear Gold" msgid "media-color.clear-goldenrod" msgstr "Clear Goldenrod" msgid "media-color.clear-gray" msgstr "Clear Gray" msgid "media-color.clear-green" msgstr "Clear Green" msgid "media-color.clear-ivory" msgstr "Clear Ivory" msgid "media-color.clear-magenta" msgstr "Clear Magenta" msgid "media-color.clear-multi-color" msgstr "Clear Multi Color" msgid "media-color.clear-mustard" msgstr "Clear Mustard" msgid "media-color.clear-orange" msgstr "Clear Orange" msgid "media-color.clear-pink" msgstr "Clear Pink" msgid "media-color.clear-red" msgstr "Clear Red" msgid "media-color.clear-silver" msgstr "Clear Silver" msgid "media-color.clear-turquoise" msgstr "Clear Turquoise" msgid "media-color.clear-violet" msgstr "Clear Violet" msgid "media-color.clear-white" msgstr "Clear White" msgid "media-color.clear-yellow" msgstr "Clear Yellow" msgid "media-color.cyan" msgstr "Cyan" msgid "media-color.dark-blue" msgstr "Dark Blue" msgid "media-color.dark-brown" msgstr "Dark Brown" msgid "media-color.dark-buff" msgstr "Dark Buff" msgid "media-color.dark-cyan" msgstr "Dark Cyan" msgid "media-color.dark-gold" msgstr "Dark Gold" msgid "media-color.dark-goldenrod" msgstr "Dark Goldenrod" msgid "media-color.dark-gray" msgstr "Dark Gray" msgid "media-color.dark-green" msgstr "Dark Green" msgid "media-color.dark-ivory" msgstr "Dark Ivory" msgid "media-color.dark-magenta" msgstr "Dark Magenta" msgid "media-color.dark-mustard" msgstr "Dark Mustard" msgid "media-color.dark-orange" msgstr "Dark Orange" msgid "media-color.dark-pink" msgstr "Dark Pink" msgid "media-color.dark-red" msgstr "Dark Red" msgid "media-color.dark-silver" msgstr "Dark Silver" msgid "media-color.dark-turquoise" msgstr "Dark Turquoise" msgid "media-color.dark-violet" msgstr "Dark Violet" msgid "media-color.dark-yellow" msgstr "Dark Yellow" msgid "media-color.gold" msgstr "Gold" msgid "media-color.goldenrod" msgstr "Goldenrod" msgid "media-color.gray" msgstr "Gray" msgid "media-color.green" msgstr "Green" msgid "media-color.ivory" msgstr "Ivory" msgid "media-color.light-black" msgstr "Light Black" msgid "media-color.light-blue" msgstr "Light Blue" msgid "media-color.light-brown" msgstr "Light Brown" msgid "media-color.light-buff" msgstr "Light Buff" msgid "media-color.light-cyan" msgstr "Light Cyan" msgid "media-color.light-gold" msgstr "Light Gold" msgid "media-color.light-goldenrod" msgstr "Light Goldenrod" msgid "media-color.light-gray" msgstr "Light Gray" msgid "media-color.light-green" msgstr "Light Green" msgid "media-color.light-ivory" msgstr "Light Ivory" msgid "media-color.light-magenta" msgstr "Light Magenta" msgid "media-color.light-mustard" msgstr "Light Mustard" msgid "media-color.light-orange" msgstr "Light Orange" msgid "media-color.light-pink" msgstr "Light Pink" msgid "media-color.light-red" msgstr "Light Red" msgid "media-color.light-silver" msgstr "Light Silver" msgid "media-color.light-turquoise" msgstr "Light Turquoise" msgid "media-color.light-violet" msgstr "Light Violet" msgid "media-color.light-yellow" msgstr "Light Yellow" msgid "media-color.magenta" msgstr "Magenta" msgid "media-color.multi-color" msgstr "Multi-Color" msgid "media-color.mustard" msgstr "Mustard" msgid "media-color.no-color" msgstr "No Color" msgid "media-color.orange" msgstr "Orange" msgid "media-color.pink" msgstr "Pink" msgid "media-color.red" msgstr "Red" msgid "media-color.silver" msgstr "Silver" msgid "media-color.turquoise" msgstr "Turquoise" msgid "media-color.violet" msgstr "Violet" msgid "media-color.white" msgstr "White" msgid "media-color.yellow" msgstr "Yellow" msgid "media-front-coating" msgstr "Media Front Coating" msgid "media-grain" msgstr "Media Grain" msgid "media-grain.x-direction" msgstr "Cross-Feed Direction" msgid "media-grain.y-direction" msgstr "Feed Direction" msgid "media-hole-count" msgstr "Media Hole Count" msgid "media-info" msgstr "Media Info" msgid "media-input-tray-check" msgstr "Media Input Tray Check" msgid "media-left-margin" msgstr "Media Left Margin" msgid "media-pre-printed" msgstr "Media Preprinted" msgid "media-pre-printed.blank" msgstr "Blank" msgid "media-pre-printed.letter-head" msgstr "Letterhead" msgid "media-pre-printed.pre-printed" msgstr "Preprinted" msgid "media-recycled" msgstr "Media Recycled" msgid "media-recycled.none" msgstr "None" msgid "media-recycled.standard" msgstr "Standard" msgid "media-right-margin" msgstr "Media Right Margin" msgid "media-size" msgstr "Media Dimensions" msgid "media-size-name" msgstr "Media Name" msgid "media-source" msgstr "Media Source" msgid "media-source.alternate" msgstr "Alternate" msgid "media-source.alternate-roll" msgstr "Alternate Roll" msgid "media-source.auto" msgstr "Automatic" msgid "media-source.bottom" msgstr "Bottom" msgid "media-source.by-pass-tray" msgstr "By Pass Tray" msgid "media-source.center" msgstr "Center" msgid "media-source.disc" msgstr "Disc" msgid "media-source.envelope" msgstr "Envelope" msgid "media-source.hagaki" msgstr "Hagaki" msgid "media-source.large-capacity" msgstr "Large Capacity" msgid "media-source.left" msgstr "Left" msgid "media-source.main" msgstr "Main" msgid "media-source.main-roll" msgstr "Main Roll" msgid "media-source.manual" msgstr "Manual" msgid "media-source.middle" msgstr "Middle" msgid "media-source.photo" msgstr "Photo" msgid "media-source.rear" msgstr "Rear" msgid "media-source.right" msgstr "Right" msgid "media-source.roll-1" msgstr "Roll 1" msgid "media-source.roll-10" msgstr "Roll 10" msgid "media-source.roll-2" msgstr "Roll 2" msgid "media-source.roll-3" msgstr "Roll 3" msgid "media-source.roll-4" msgstr "Roll 4" msgid "media-source.roll-5" msgstr "Roll 5" msgid "media-source.roll-6" msgstr "Roll 6" msgid "media-source.roll-7" msgstr "Roll 7" msgid "media-source.roll-8" msgstr "Roll 8" msgid "media-source.roll-9" msgstr "Roll 9" msgid "media-source.side" msgstr "Side" msgid "media-source.top" msgstr "Top" msgid "media-source.tray-1" msgstr "Tray 1" msgid "media-source.tray-10" msgstr "Tray 10" msgid "media-source.tray-11" msgstr "Tray 11" msgid "media-source.tray-12" msgstr "Tray 12" msgid "media-source.tray-13" msgstr "Tray 13" msgid "media-source.tray-14" msgstr "Tray 14" msgid "media-source.tray-15" msgstr "Tray 15" msgid "media-source.tray-16" msgstr "Tray 16" msgid "media-source.tray-17" msgstr "Tray 17" msgid "media-source.tray-18" msgstr "Tray 18" msgid "media-source.tray-19" msgstr "Tray 19" msgid "media-source.tray-2" msgstr "Tray 2" msgid "media-source.tray-20" msgstr "Tray 20" msgid "media-source.tray-3" msgstr "Tray 3" msgid "media-source.tray-4" msgstr "Tray 4" msgid "media-source.tray-5" msgstr "Tray 5" msgid "media-source.tray-6" msgstr "Tray 6" msgid "media-source.tray-7" msgstr "Tray 7" msgid "media-source.tray-8" msgstr "Tray 8" msgid "media-source.tray-9" msgstr "Tray 9" msgid "media-thickness" msgstr "Media Thickness" msgid "media-tooth" msgstr "Media Tooth" msgid "media-tooth.antique" msgstr "Antique" msgid "media-tooth.calendared" msgstr "Calendared" msgid "media-tooth.coarse" msgstr "Coarse" msgid "media-tooth.fine" msgstr "Fine" msgid "media-tooth.linen" msgstr "Linen" msgid "media-tooth.medium" msgstr "Medium" msgid "media-tooth.smooth" msgstr "Smooth" msgid "media-tooth.stipple" msgstr "Stipple" msgid "media-tooth.uncalendared" msgstr "Uncalendared" msgid "media-tooth.vellum" msgstr "Vellum" msgid "media-top-margin" msgstr "Media Top Margin" msgid "media-type" msgstr "Media Type" msgid "media-type.aluminum" msgstr "Aluminum" msgid "media-type.auto" msgstr "Automatic" msgid "media-type.back-print-film" msgstr "Back Print Film" msgid "media-type.cardboard" msgstr "Cardboard" msgid "media-type.cardstock" msgstr "Cardstock" msgid "media-type.cd" msgstr "CD" msgid "media-type.com.hp.advanced-photo" msgstr "Advanced Photo Paper" msgid "media-type.com.hp.brochure-glossy" msgstr "Glossy Brochure Paper" msgid "media-type.com.hp.brochure-matte" msgstr "Matte Brochure Paper" msgid "media-type.com.hp.cover-matte" msgstr "Matte Cover Paper" msgid "media-type.com.hp.ecosmart-lite" msgstr "Office Recycled Paper" msgid "media-type.com.hp.everyday-glossy" msgstr "Everyday Glossy Photo Paper" msgid "media-type.com.hp.everyday-matte" msgstr "Everyday Matte Paper" msgid "media-type.com.hp.extra-heavy" msgstr "Extra Heavyweight Paper" msgid "media-type.com.hp.intermediate" msgstr "Multipurpose Paper" msgid "media-type.com.hp.mid-weight" msgstr "Mid-Weight Paper" msgid "media-type.com.hp.premium-inkjet" msgstr "Premium Inkjet Paper" msgid "media-type.com.hp.premium-photo" msgstr "Premium Photo Glossy Paper" msgid "media-type.com.hp.premium-presentation-matte" msgstr "Premium Presentation Matte Paper" msgid "media-type.continuous" msgstr "Continuous" msgid "media-type.continuous-long" msgstr "Continuous Long" msgid "media-type.continuous-short" msgstr "Continuous Short" msgid "media-type.corrugated-board" msgstr "Corrugated Board" msgid "media-type.disc" msgstr "Optical Disc" msgid "media-type.disc-glossy" msgstr "Glossy Optical Disc" msgid "media-type.disc-high-gloss" msgstr "High Gloss Optical Disc" msgid "media-type.disc-matte" msgstr "Matte Optical Disc" msgid "media-type.disc-satin" msgstr "Satin Optical Disc" msgid "media-type.disc-semi-gloss" msgstr "Semi-Gloss Optical Disc" msgid "media-type.double-wall" msgstr "Double Wall" msgid "media-type.dry-film" msgstr "Dry Film" msgid "media-type.dvd" msgstr "DVD" msgid "media-type.embossing-foil" msgstr "Embossing Foil" msgid "media-type.end-board" msgstr "End Board" msgid "media-type.envelope" msgstr "Envelope" msgid "media-type.envelope-archival" msgstr "Archival Envelope" msgid "media-type.envelope-bond" msgstr "Bond Envelope" msgid "media-type.envelope-coated" msgstr "Coated Envelope" msgid "media-type.envelope-cotton" msgstr "Cotton Envelope" msgid "media-type.envelope-fine" msgstr "Fine Envelope" msgid "media-type.envelope-heavyweight" msgstr "Heavyweight Envelope" msgid "media-type.envelope-inkjet" msgstr "Inkjet Envelope" msgid "media-type.envelope-lightweight" msgstr "Lightweight Envelope" msgid "media-type.envelope-plain" msgstr "Plain Envelope" msgid "media-type.envelope-preprinted" msgstr "Preprinted Envelope" msgid "media-type.envelope-window" msgstr "Windowed Envelope" msgid "media-type.fabric" msgstr "Fabric" msgid "media-type.fabric-archival" msgstr "Archival Fabric" msgid "media-type.fabric-glossy" msgstr "Glossy Fabric" msgid "media-type.fabric-high-gloss" msgstr "High Gloss Fabric" msgid "media-type.fabric-matte" msgstr "Matte Fabric" msgid "media-type.fabric-semi-gloss" msgstr "Semi-Gloss Fabric" msgid "media-type.fabric-waterproof" msgstr "Waterproof Fabric" msgid "media-type.film" msgstr "Film" msgid "media-type.flexo-base" msgstr "Flexo Base" msgid "media-type.flexo-photo-polymer" msgstr "Flexo Photo Polymer" msgid "media-type.flute" msgstr "Flute" msgid "media-type.foil" msgstr "Foil" msgid "media-type.full-cut-tabs" msgstr "Full Cut Tabs" msgid "media-type.glass" msgstr "Glass" msgid "media-type.glass-colored" msgstr "Glass Colored" msgid "media-type.glass-opaque" msgstr "Glass Opaque" msgid "media-type.glass-surfaced" msgstr "Glass Surfaced" msgid "media-type.glass-textured" msgstr "Glass Textured" msgid "media-type.gravure-cylinder" msgstr "Gravure Cylinder" msgid "media-type.image-setter-paper" msgstr "Image Setter Paper" msgid "media-type.imaging-cylinder" msgstr "Imaging Cylinder" msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon-photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon_photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.labels" msgstr "Labels" msgid "media-type.labels-colored" msgstr "Colored Labels" msgid "media-type.labels-glossy" msgstr "Glossy Labels" msgid "media-type.labels-high-gloss" msgstr "High Gloss Labels" msgid "media-type.labels-inkjet" msgstr "Inkjet Labels" msgid "media-type.labels-matte" msgstr "Matte Labels" msgid "media-type.labels-permanent" msgstr "Permanent Labels" msgid "media-type.labels-satin" msgstr "Satin Labels" msgid "media-type.labels-security" msgstr "Security Labels" msgid "media-type.labels-semi-gloss" msgstr "Semi-Gloss Labels" msgid "media-type.laminating-foil" msgstr "Laminating Foil" msgid "media-type.letterhead" msgstr "Letterhead" msgid "media-type.metal" msgstr "Metal" msgid "media-type.metal-glossy" msgstr "Metal Glossy" msgid "media-type.metal-high-gloss" msgstr "Metal High Gloss" msgid "media-type.metal-matte" msgstr "Metal Matte" msgid "media-type.metal-satin" msgstr "Metal Satin" msgid "media-type.metal-semi-gloss" msgstr "Metal Semi Gloss" msgid "media-type.mounting-tape" msgstr "Mounting Tape" msgid "media-type.multi-layer" msgstr "Multi Layer" msgid "media-type.multi-part-form" msgstr "Multi Part Form" msgid "media-type.other" msgstr "Other" msgid "media-type.paper" msgstr "Paper" msgid "media-type.photographic" msgstr "Photo Paper" msgid "media-type.photographic-archival" msgstr "Photographic Archival" msgid "media-type.photographic-film" msgstr "Photo Film" msgid "media-type.photographic-glossy" msgstr "Glossy Photo Paper" msgid "media-type.photographic-high-gloss" msgstr "High Gloss Photo Paper" msgid "media-type.photographic-matte" msgstr "Matte Photo Paper" msgid "media-type.photographic-satin" msgstr "Satin Photo Paper" msgid "media-type.photographic-semi-gloss" msgstr "Semi-Gloss Photo Paper" msgid "media-type.plastic" msgstr "Plastic" msgid "media-type.plastic-archival" msgstr "Plastic Archival" msgid "media-type.plastic-colored" msgstr "Plastic Colored" msgid "media-type.plastic-glossy" msgstr "Plastic Glossy" msgid "media-type.plastic-high-gloss" msgstr "Plastic High Gloss" msgid "media-type.plastic-matte" msgstr "Plastic Matte" msgid "media-type.plastic-satin" msgstr "Plastic Satin" msgid "media-type.plastic-semi-gloss" msgstr "Plastic Semi Gloss" msgid "media-type.plate" msgstr "Plate" msgid "media-type.polyester" msgstr "Polyester" msgid "media-type.pre-cut-tabs" msgstr "Pre Cut Tabs" msgid "media-type.roll" msgstr "Roll" msgid "media-type.screen" msgstr "Screen" msgid "media-type.screen-paged" msgstr "Screen Paged" msgid "media-type.self-adhesive" msgstr "Self Adhesive" msgid "media-type.self-adhesive-film" msgstr "Self Adhesive Film" msgid "media-type.shrink-foil" msgstr "Shrink Foil" msgid "media-type.single-face" msgstr "Single Face" msgid "media-type.single-wall" msgstr "Single Wall" msgid "media-type.sleeve" msgstr "Sleeve" msgid "media-type.stationery" msgstr "Stationery" msgid "media-type.stationery-archival" msgstr "Stationery Archival" msgid "media-type.stationery-coated" msgstr "Coated Paper" msgid "media-type.stationery-cotton" msgstr "Stationery Cotton" msgid "media-type.stationery-fine" msgstr "Vellum Paper" msgid "media-type.stationery-heavyweight" msgstr "Heavyweight Paper" msgid "media-type.stationery-heavyweight-coated" msgstr "Stationery Heavyweight Coated" msgid "media-type.stationery-inkjet" msgstr "Stationery Inkjet Paper" msgid "media-type.stationery-letterhead" msgstr "Letterhead" msgid "media-type.stationery-lightweight" msgstr "Lightweight Paper" msgid "media-type.stationery-preprinted" msgstr "Preprinted Paper" msgid "media-type.stationery-prepunched" msgstr "Punched Paper" msgid "media-type.tab-stock" msgstr "Tab Stock" msgid "media-type.tractor" msgstr "Tractor" msgid "media-type.transfer" msgstr "Transfer" msgid "media-type.transparency" msgstr "Transparency" msgid "media-type.triple-wall" msgstr "Triple Wall" msgid "media-type.wet-film" msgstr "Wet Film" msgid "media-weight-metric" msgstr "Media Weight (grams per m²)" msgid "media.asme_f_28x40in" msgstr "28 x 40\"" msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" msgstr "A4 or US Letter" msgid "media.iso_2a0_1189x1682mm" msgstr "2a0" msgid "media.iso_a0_841x1189mm" msgstr "A0" msgid "media.iso_a0x3_1189x2523mm" msgstr "A0x3" msgid "media.iso_a10_26x37mm" msgstr "A10" msgid "media.iso_a1_594x841mm" msgstr "A1" msgid "media.iso_a1x3_841x1783mm" msgstr "A1x3" msgid "media.iso_a1x4_841x2378mm" msgstr "A1x4" msgid "media.iso_a2_420x594mm" msgstr "A2" msgid "media.iso_a2x3_594x1261mm" msgstr "A2x3" msgid "media.iso_a2x4_594x1682mm" msgstr "A2x4" msgid "media.iso_a2x5_594x2102mm" msgstr "A2x5" msgid "media.iso_a3-extra_322x445mm" msgstr "A3 (Extra)" msgid "media.iso_a3_297x420mm" msgstr "A3" msgid "media.iso_a3x3_420x891mm" msgstr "A3x3" msgid "media.iso_a3x4_420x1189mm" msgstr "A3x4" msgid "media.iso_a3x5_420x1486mm" msgstr "A3x5" msgid "media.iso_a3x6_420x1783mm" msgstr "A3x6" msgid "media.iso_a3x7_420x2080mm" msgstr "A3x7" msgid "media.iso_a4-extra_235.5x322.3mm" msgstr "A4 (Extra)" msgid "media.iso_a4-tab_225x297mm" msgstr "A4 (Tab)" msgid "media.iso_a4_210x297mm" msgstr "A4" msgid "media.iso_a4x3_297x630mm" msgstr "A4x3" msgid "media.iso_a4x4_297x841mm" msgstr "A4x4" msgid "media.iso_a4x5_297x1051mm" msgstr "A4x5" msgid "media.iso_a4x6_297x1261mm" msgstr "A4x6" msgid "media.iso_a4x7_297x1471mm" msgstr "A4x7" msgid "media.iso_a4x8_297x1682mm" msgstr "A4x8" msgid "media.iso_a4x9_297x1892mm" msgstr "A4x9" msgid "media.iso_a5-extra_174x235mm" msgstr "A5 (Extra)" msgid "media.iso_a5_148x210mm" msgstr "A5" msgid "media.iso_a6_105x148mm" msgstr "A6" msgid "media.iso_a7_74x105mm" msgstr "A7" msgid "media.iso_a8_52x74mm" msgstr "A8" msgid "media.iso_a9_37x52mm" msgstr "A9" msgid "media.iso_b0_1000x1414mm" msgstr "B0" msgid "media.iso_b10_31x44mm" msgstr "B10" msgid "media.iso_b1_707x1000mm" msgstr "B1" msgid "media.iso_b2_500x707mm" msgstr "B2" msgid "media.iso_b3_353x500mm" msgstr "B3" msgid "media.iso_b4_250x353mm" msgstr "B4" msgid "media.iso_b5-extra_201x276mm" msgstr "B5 (Extra)" msgid "media.iso_b5_176x250mm" msgstr "B5 Envelope" msgid "media.iso_b6_125x176mm" msgstr "B6" msgid "media.iso_b6c4_125x324mm" msgstr "B6/C4 Envelope" msgid "media.iso_b7_88x125mm" msgstr "B7" msgid "media.iso_b8_62x88mm" msgstr "B8" msgid "media.iso_b9_44x62mm" msgstr "B9" msgid "media.iso_c0_917x1297mm" msgstr "C0 Envelope" msgid "media.iso_c10_28x40mm" msgstr "C10 Envelope" msgid "media.iso_c1_648x917mm" msgstr "C1 Envelope" msgid "media.iso_c2_458x648mm" msgstr "C2 Envelope" msgid "media.iso_c3_324x458mm" msgstr "C3 Envelope" msgid "media.iso_c4_229x324mm" msgstr "C4 Envelope" msgid "media.iso_c5_162x229mm" msgstr "C5 Envelope" msgid "media.iso_c6_114x162mm" msgstr "C6 Envelope" msgid "media.iso_c6c5_114x229mm" msgstr "C6c5 Envelope" msgid "media.iso_c7_81x114mm" msgstr "C7 Envelope" msgid "media.iso_c7c6_81x162mm" msgstr "C7c6 Envelope" msgid "media.iso_c8_57x81mm" msgstr "C8 Envelope" msgid "media.iso_c9_40x57mm" msgstr "C9 Envelope" msgid "media.iso_dl_110x220mm" msgstr "DL Envelope" msgid "media.iso_ra0_860x1220mm" msgstr "Ra0" msgid "media.iso_ra1_610x860mm" msgstr "Ra1" msgid "media.iso_ra2_430x610mm" msgstr "Ra2" msgid "media.iso_ra3_305x430mm" msgstr "Ra3" msgid "media.iso_ra4_215x305mm" msgstr "Ra4" msgid "media.iso_sra0_900x1280mm" msgstr "Sra0" msgid "media.iso_sra1_640x900mm" msgstr "Sra1" msgid "media.iso_sra2_450x640mm" msgstr "Sra2" msgid "media.iso_sra3_320x450mm" msgstr "Sra3" msgid "media.iso_sra4_225x320mm" msgstr "Sra4" msgid "media.jis_b0_1030x1456mm" msgstr "JIS B0" msgid "media.jis_b10_32x45mm" msgstr "JIS B10" msgid "media.jis_b1_728x1030mm" msgstr "JIS B1" msgid "media.jis_b2_515x728mm" msgstr "JIS B2" msgid "media.jis_b3_364x515mm" msgstr "JIS B3" msgid "media.jis_b4_257x364mm" msgstr "JIS B4" msgid "media.jis_b5_182x257mm" msgstr "JIS B5" msgid "media.jis_b6_128x182mm" msgstr "JIS B6" msgid "media.jis_b7_91x128mm" msgstr "JIS B7" msgid "media.jis_b8_64x91mm" msgstr "JIS B8" msgid "media.jis_b9_45x64mm" msgstr "JIS B9" msgid "media.jis_exec_216x330mm" msgstr "JIS Executive" msgid "media.jpn_chou2_111.1x146mm" msgstr "Chou 2 Envelope" msgid "media.jpn_chou3_120x235mm" msgstr "Chou 3 Envelope" msgid "media.jpn_chou4_90x205mm" msgstr "Chou 4 Envelope" msgid "media.jpn_hagaki_100x148mm" msgstr "Hagaki" msgid "media.jpn_kahu_240x322.1mm" msgstr "Kahu Envelope" msgid "media.jpn_kaku2_240x332mm" msgstr "Kahu 2 Envelope" msgid "media.jpn_kaku3_216x277mm" msgstr "216 x 277mme" msgid "media.jpn_kaku4_197x267mm" msgstr "197 x 267mme" msgid "media.jpn_kaku5_190x240mm" msgstr "190 x 240mme" msgid "media.jpn_kaku7_142x205mm" msgstr "142 x 205mme" msgid "media.jpn_kaku8_119x197mm" msgstr "119 x 197mme" msgid "media.jpn_oufuku_148x200mm" msgstr "Oufuku Reply Postcard" msgid "media.jpn_you4_105x235mm" msgstr "You 4 Envelope" msgid "media.na_10x11_10x11in" msgstr "10 x 11\"" msgid "media.na_10x13_10x13in" msgstr "10 x 13\"" msgid "media.na_10x14_10x14in" msgstr "10 x 14\"" msgid "media.na_10x15_10x15in" msgstr "10 x 15\"" msgid "media.na_11x12_11x12in" msgstr "11 x 12\"" msgid "media.na_11x15_11x15in" msgstr "11 x 15\"" msgid "media.na_12x19_12x19in" msgstr "12 x 19\"" msgid "media.na_5x7_5x7in" msgstr "5 x 7\"" msgid "media.na_6x9_6x9in" msgstr "6 x 9\"" msgid "media.na_7x9_7x9in" msgstr "7 x 9\"" msgid "media.na_9x11_9x11in" msgstr "9 x 11\"" msgid "media.na_a2_4.375x5.75in" msgstr "A2 Envelope" msgid "media.na_arch-a_9x12in" msgstr "9 x 12\"" msgid "media.na_arch-b_12x18in" msgstr "12 x 18\"" msgid "media.na_arch-c_18x24in" msgstr "18 x 24\"" msgid "media.na_arch-d_24x36in" msgstr "24 x 36\"" msgid "media.na_arch-e2_26x38in" msgstr "26 x 38\"" msgid "media.na_arch-e3_27x39in" msgstr "27 x 39\"" msgid "media.na_arch-e_36x48in" msgstr "36 x 48\"" msgid "media.na_b-plus_12x19.17in" msgstr "12 x 19.17\"" msgid "media.na_c5_6.5x9.5in" msgstr "C5 Envelope" msgid "media.na_c_17x22in" msgstr "17 x 22\"" msgid "media.na_d_22x34in" msgstr "22 x 34\"" msgid "media.na_e_34x44in" msgstr "34 x 44\"" msgid "media.na_edp_11x14in" msgstr "11 x 14\"" msgid "media.na_eur-edp_12x14in" msgstr "12 x 14\"" msgid "media.na_executive_7.25x10.5in" msgstr "Executive" msgid "media.na_f_44x68in" msgstr "44 x 68\"" msgid "media.na_fanfold-eur_8.5x12in" msgstr "European Fanfold" msgid "media.na_fanfold-us_11x14.875in" msgstr "US Fanfold" msgid "media.na_foolscap_8.5x13in" msgstr "Foolscap" msgid "media.na_govt-legal_8x13in" msgstr "8 x 13\"" msgid "media.na_govt-letter_8x10in" msgstr "8 x 10\"" msgid "media.na_index-3x5_3x5in" msgstr "3 x 5\"" msgid "media.na_index-4x6-ext_6x8in" msgstr "6 x 8\"" msgid "media.na_index-4x6_4x6in" msgstr "4 x 6\"" msgid "media.na_index-5x8_5x8in" msgstr "5 x 8\"" msgid "media.na_invoice_5.5x8.5in" msgstr "Statement" msgid "media.na_ledger_11x17in" msgstr "11 x 17\"" msgid "media.na_legal-extra_9.5x15in" msgstr "US Legal (Extra)" msgid "media.na_legal_8.5x14in" msgstr "US Legal" msgid "media.na_letter-extra_9.5x12in" msgstr "US Letter (Extra)" msgid "media.na_letter-plus_8.5x12.69in" msgstr "US Letter (Plus)" msgid "media.na_letter_8.5x11in" msgstr "US Letter" msgid "media.na_monarch_3.875x7.5in" msgstr "Monarch Envelope" msgid "media.na_number-10_4.125x9.5in" msgstr "#10 Envelope" msgid "media.na_number-11_4.5x10.375in" msgstr "#11 Envelope" msgid "media.na_number-12_4.75x11in" msgstr "#12 Envelope" msgid "media.na_number-14_5x11.5in" msgstr "#14 Envelope" msgid "media.na_number-9_3.875x8.875in" msgstr "#9 Envelope" msgid "media.na_oficio_8.5x13.4in" msgstr "8.5 x 13.4\"" msgid "media.na_personal_3.625x6.5in" msgstr "Personal Envelope" msgid "media.na_quarto_8.5x10.83in" msgstr "Quarto" msgid "media.na_super-a_8.94x14in" msgstr "8.94 x 14\"" msgid "media.na_super-b_13x19in" msgstr "13 x 19\"" msgid "media.na_wide-format_30x42in" msgstr "30 x 42\"" msgid "media.oe_12x16_12x16in" msgstr "12 x 16\"" msgid "media.oe_14x17_14x17in" msgstr "14 x 17\"" msgid "media.oe_18x22_18x22in" msgstr "18 x 22\"" msgid "media.oe_a2plus_17x24in" msgstr "17 x 24\"" msgid "media.oe_photo-10r_10x12in" msgstr "10 x 12\"" msgid "media.oe_photo-20r_20x24in" msgstr "20 x 24\"" msgid "media.oe_photo-l_3.5x5in" msgstr "3.5 x 5\"" msgid "media.oe_photo-s10r_10x15in" msgstr "10 x 15\"" msgid "media.om_16k_184x260mm" msgstr "184 x 260mm" msgid "media.om_16k_195x270mm" msgstr "195 x 270mm" msgid "media.om_dai-pa-kai_275x395mm" msgstr "275 x 395mm" msgid "media.om_folio-sp_215x315mm" msgstr "Folio" msgid "media.om_folio_210x330mm" msgstr "Folio (Special)" msgid "media.om_invite_220x220mm" msgstr "Invitation Envelope" msgid "media.om_italian_110x230mm" msgstr "Italian Envelope" msgid "media.om_juuro-ku-kai_198x275mm" msgstr "198 x 275mm" msgid "media.om_large-photo_200x300" msgstr "200 x 300mm" msgid "media.om_medium-photo_130x180mm" msgstr "130 x 180mm" msgid "media.om_pa-kai_267x389mm" msgstr "267 x 389mm" msgid "media.om_postfix_114x229mm" msgstr "Postfix Envelope" msgid "media.om_small-photo_100x150mm" msgstr "100 x 150mm" msgid "media.om_wide-photo_100x200mm" msgstr "100 x 200mm" msgid "media.prc_10_324x458mm" msgstr "Chinese #10 Envelope" msgid "media.prc_16k_146x215mm" msgstr "Chinese 16k" msgid "media.prc_1_102x165mm" msgstr "Chinese #1 Envelope" msgid "media.prc_2_102x176mm" msgstr "Chinese #2 Envelope" msgid "media.prc_32k_97x151mm" msgstr "Chinese 32k" msgid "media.prc_3_125x176mm" msgstr "Chinese #3 Envelope" msgid "media.prc_4_110x208mm" msgstr "Chinese #4 Envelope" msgid "media.prc_5_110x220mm" msgstr "Chinese #5 Envelope" msgid "media.prc_6_120x320mm" msgstr "Chinese #6 Envelope" msgid "media.prc_7_160x230mm" msgstr "Chinese #7 Envelope" msgid "media.prc_8_120x309mm" msgstr "Chinese #8 Envelope" msgid "media.roc_16k_7.75x10.75in" msgstr "ROC 16k" msgid "media.roc_8k_10.75x15.5in" msgstr "ROC 8k" #, c-format msgid "members of class %s:" msgstr "membros da classe %s:" msgid "multiple-document-handling" msgstr "Multiple Document Handling" msgid "multiple-document-handling.separate-documents-collated-copies" msgstr "Separate Documents Collated Copies" msgid "multiple-document-handling.separate-documents-uncollated-copies" msgstr "Separate Documents Uncollated Copies" msgid "multiple-document-handling.single-document" msgstr "Single Document" msgid "multiple-document-handling.single-document-new-sheet" msgstr "Single Document New Sheet" msgid "multiple-object-handling" msgstr "Multiple Object Handling" msgid "multiple-object-handling.auto" msgstr "Automatic" msgid "multiple-object-handling.best-fit" msgstr "Best Fit" msgid "multiple-object-handling.best-quality" msgstr "Best Quality" msgid "multiple-object-handling.best-speed" msgstr "Best Speed" msgid "multiple-object-handling.one-at-a-time" msgstr "One At A Time" msgid "multiple-operation-time-out-action" msgstr "Multiple Operation Time Out Action" msgid "multiple-operation-time-out-action.abort-job" msgstr "Abort Job" msgid "multiple-operation-time-out-action.hold-job" msgstr "Hold Job" msgid "multiple-operation-time-out-action.process-job" msgstr "Process Job" msgid "no entries" msgstr "nenhum registro" msgid "no system default destination" msgstr "nenhum destino padrão de sistema" msgid "noise-removal" msgstr "Noise Removal" msgid "notify-attributes" msgstr "Notify Attributes" msgid "notify-charset" msgstr "Notify Charset" msgid "notify-events" msgstr "Notify Events" msgid "notify-events not specified." msgstr "notify-events não especificado." msgid "notify-events.document-completed" msgstr "Document Completed" msgid "notify-events.document-config-changed" msgstr "Document Config Changed" msgid "notify-events.document-created" msgstr "Document Created" msgid "notify-events.document-fetchable" msgstr "Document Fetchable" msgid "notify-events.document-state-changed" msgstr "Document State Changed" msgid "notify-events.document-stopped" msgstr "Document Stopped" msgid "notify-events.job-completed" msgstr "Job Completed" msgid "notify-events.job-config-changed" msgstr "Job Config Changed" msgid "notify-events.job-created" msgstr "Job Created" msgid "notify-events.job-fetchable" msgstr "Job Fetchable" msgid "notify-events.job-progress" msgstr "Job Progress" msgid "notify-events.job-state-changed" msgstr "Job State Changed" msgid "notify-events.job-stopped" msgstr "Job Stopped" msgid "notify-events.none" msgstr "None" msgid "notify-events.printer-config-changed" msgstr "Printer Config Changed" msgid "notify-events.printer-finishings-changed" msgstr "Printer Finishings Changed" msgid "notify-events.printer-media-changed" msgstr "Printer Media Changed" msgid "notify-events.printer-queue-order-changed" msgstr "Printer Queue Order Changed" msgid "notify-events.printer-restarted" msgstr "Printer Restarted" msgid "notify-events.printer-shutdown" msgstr "Printer Shutdown" msgid "notify-events.printer-state-changed" msgstr "Printer State Changed" msgid "notify-events.printer-stopped" msgstr "Printer Stopped" msgid "notify-get-interval" msgstr "Notify Get Interval" msgid "notify-lease-duration" msgstr "Notify Lease Duration" msgid "notify-natural-language" msgstr "Notify Natural Language" msgid "notify-pull-method" msgstr "Notify Pull Method" msgid "notify-recipient-uri" msgstr "Notify Recipient" #, c-format msgid "notify-recipient-uri URI \"%s\" is already used." msgstr "URI de notify-recipient-uri \"%s\" já está sendo usada." #, c-format msgid "notify-recipient-uri URI \"%s\" uses unknown scheme." msgstr "URI de notify-recipient-uri \"%s\" usa um esquema desconhecido." msgid "notify-sequence-numbers" msgstr "Notify Sequence Numbers" msgid "notify-subscription-ids" msgstr "Notify Subscription Ids" msgid "notify-time-interval" msgstr "Notify Time Interval" msgid "notify-user-data" msgstr "Notify User Data" msgid "notify-wait" msgstr "Notify Wait" msgid "number-of-retries" msgstr "Number Of Retries" msgid "number-up" msgstr "Number-Up" msgid "object-offset" msgstr "Object Offset" msgid "object-size" msgstr "Object Size" msgid "organization-name" msgstr "Organization Name" msgid "orientation-requested" msgstr "Orientation" msgid "orientation-requested.3" msgstr "Portrait" msgid "orientation-requested.4" msgstr "Landscape" msgid "orientation-requested.5" msgstr "Reverse Landscape" msgid "orientation-requested.6" msgstr "Reverse Portrait" msgid "orientation-requested.7" msgstr "None" msgid "output-attributes" msgstr "Output Attributes" msgid "output-bin" msgstr "Output Bin" msgid "output-bin.auto" msgstr "Automatic" msgid "output-bin.bottom" msgstr "Bottom" msgid "output-bin.center" msgstr "Center" msgid "output-bin.face-down" msgstr "Face Down" msgid "output-bin.face-up" msgstr "Face Up" msgid "output-bin.large-capacity" msgstr "Large Capacity" msgid "output-bin.left" msgstr "Left" msgid "output-bin.mailbox-1" msgstr "Mailbox 1" msgid "output-bin.mailbox-10" msgstr "Mailbox 10" msgid "output-bin.mailbox-2" msgstr "Mailbox 2" msgid "output-bin.mailbox-3" msgstr "Mailbox 3" msgid "output-bin.mailbox-4" msgstr "Mailbox 4" msgid "output-bin.mailbox-5" msgstr "Mailbox 5" msgid "output-bin.mailbox-6" msgstr "Mailbox 6" msgid "output-bin.mailbox-7" msgstr "Mailbox 7" msgid "output-bin.mailbox-8" msgstr "Mailbox 8" msgid "output-bin.mailbox-9" msgstr "Mailbox 9" msgid "output-bin.middle" msgstr "Middle" msgid "output-bin.my-mailbox" msgstr "My Mailbox" msgid "output-bin.rear" msgstr "Rear" msgid "output-bin.right" msgstr "Right" msgid "output-bin.side" msgstr "Side" msgid "output-bin.stacker-1" msgstr "Stacker 1" msgid "output-bin.stacker-10" msgstr "Stacker 10" msgid "output-bin.stacker-2" msgstr "Stacker 2" msgid "output-bin.stacker-3" msgstr "Stacker 3" msgid "output-bin.stacker-4" msgstr "Stacker 4" msgid "output-bin.stacker-5" msgstr "Stacker 5" msgid "output-bin.stacker-6" msgstr "Stacker 6" msgid "output-bin.stacker-7" msgstr "Stacker 7" msgid "output-bin.stacker-8" msgstr "Stacker 8" msgid "output-bin.stacker-9" msgstr "Stacker 9" msgid "output-bin.top" msgstr "Top" msgid "output-bin.tray-1" msgstr "Tray 1" msgid "output-bin.tray-10" msgstr "Tray 10" msgid "output-bin.tray-2" msgstr "Tray 2" msgid "output-bin.tray-3" msgstr "Tray 3" msgid "output-bin.tray-4" msgstr "Tray 4" msgid "output-bin.tray-5" msgstr "Tray 5" msgid "output-bin.tray-6" msgstr "Tray 6" msgid "output-bin.tray-7" msgstr "Tray 7" msgid "output-bin.tray-8" msgstr "Tray 8" msgid "output-bin.tray-9" msgstr "Tray 9" msgid "output-compression-quality-factor" msgstr "Scanned Image Quality" msgid "page-delivery" msgstr "Page Delivery" msgid "page-delivery.reverse-order-face-down" msgstr "Reverse Order Face Down" msgid "page-delivery.reverse-order-face-up" msgstr "Reverse Order Face Up" msgid "page-delivery.same-order-face-down" msgstr "Same Order Face Down" msgid "page-delivery.same-order-face-up" msgstr "Same Order Face Up" msgid "page-delivery.system-specified" msgstr "System Specified" msgid "page-order-received" msgstr "Page Order Received" msgid "page-order-received.1-to-n-order" msgstr "1 To N Order" msgid "page-order-received.n-to-1-order" msgstr "N To 1 Order" msgid "page-ranges" msgstr "Page Ranges" msgid "pages" msgstr "Pages" msgid "pages-per-subset" msgstr "Pages Per Subset" msgid "pending" msgstr "pendente" msgid "platform-shape" msgstr "Platform Shape" msgid "platform-shape.ellipse" msgstr "Round" msgid "platform-shape.rectangle" msgstr "Rectangle" msgid "platform-temperature" msgstr "Platform Temperature" msgid "post-dial-string" msgstr "Post-dial String" #, c-format msgid "ppdc: Adding include directory \"%s\"." msgstr "ppdc: Adicionando diretório de include \"%s\"." #, c-format msgid "ppdc: Adding/updating UI text from %s." msgstr "ppdc: Adicionando/atualizando texto de UI de %s." #, c-format msgid "ppdc: Bad boolean value (%s) on line %d of %s." msgstr "ppdc: Valor booleano inválido (%s) na linha %d de %s." #, c-format msgid "ppdc: Bad font attribute: %s" msgstr "ppdc: Atributo de fonte inválido: %s" #, c-format msgid "ppdc: Bad resolution name \"%s\" on line %d of %s." msgstr "ppdc: Nome de resolução inválido \"%s\" na linha %d de %s." #, c-format msgid "ppdc: Bad status keyword %s on line %d of %s." msgstr "ppdc: palavra-chave de estado inválida %s na linha %d de %s." #, c-format msgid "ppdc: Bad variable substitution ($%c) on line %d of %s." msgstr "ppdc: Substituição de variável inválida ($%c) na linha %d de %s." #, c-format msgid "ppdc: Choice found on line %d of %s with no Option." msgstr "ppdc: Escolha encontrada na linha %d de %s com nenhuma opção." #, c-format msgid "ppdc: Duplicate #po for locale %s on line %d of %s." msgstr "ppdc: Duplicata de #po para o local %s na linha %d de %s." #, c-format msgid "ppdc: Expected a filter definition on line %d of %s." msgstr "ppdc: Esperava a definição de um filtro na linha %d de %s." #, c-format msgid "ppdc: Expected a program name on line %d of %s." msgstr "ppdc: Esperava o nome de um programa na linha %d de %s." #, c-format msgid "ppdc: Expected boolean value on line %d of %s." msgstr "ppdc: Esperava um valor booleano na linha %d de %s." #, c-format msgid "ppdc: Expected charset after Font on line %d of %s." msgstr "ppdc: Esperava conjunto de caracteres após Font na linha %d de %s." #, c-format msgid "ppdc: Expected choice code on line %d of %s." msgstr "ppdc: Esperava código de escolha na linha %d de %s." #, c-format msgid "ppdc: Expected choice name/text on line %d of %s." msgstr "ppdc: Esperava texto/nome de escolha na linha %d de %s." #, c-format msgid "ppdc: Expected color order for ColorModel on line %d of %s." msgstr "ppdc: Esperava ordem de cores para ColorModel na linha %d de %s." #, c-format msgid "ppdc: Expected colorspace for ColorModel on line %d of %s." msgstr "ppdc: Esperava espaço de cores para ColorModel na linha %d de %s." #, c-format msgid "ppdc: Expected compression for ColorModel on line %d of %s." msgstr "ppdc: Esperava compressão para ColorModel na linha %d de %s." #, c-format msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s." msgstr "" "ppdc: Esperava string de restrições para UIConstraints na linha %d de %s." #, c-format msgid "" "ppdc: Expected driver type keyword following DriverType on line %d of %s." msgstr "" "ppdc: Esperava palavra-chave de tipo de driver seguindo DriverType na linha " "%d de %s." #, c-format msgid "ppdc: Expected duplex type after Duplex on line %d of %s." msgstr "ppdc: Esperava tipo Duplex após Duplex na linha %d de %s." #, c-format msgid "ppdc: Expected encoding after Font on line %d of %s." msgstr "ppdc: Esperava codificação após Font na linha %d de %s." #, c-format msgid "ppdc: Expected filename after #po %s on line %d of %s." msgstr "ppdc: Esperava nome de arquivo após #po %s na linha %d de %s." #, c-format msgid "ppdc: Expected group name/text on line %d of %s." msgstr "ppdc: Esperava text/nome de grupo na linha %d de %s." #, c-format msgid "ppdc: Expected include filename on line %d of %s." msgstr "ppdc: Esperava inclusão de nome de arquivo na linha %d de %s." #, c-format msgid "ppdc: Expected integer on line %d of %s." msgstr "ppdc: Esperava número inteiro na linha %d de %s." #, c-format msgid "ppdc: Expected locale after #po on line %d of %s." msgstr "ppdc: Esperava local após #po na linha %d de %s." #, c-format msgid "ppdc: Expected name after %s on line %d of %s." msgstr "ppdc: Esperava nome após %s na linha %d de %s." #, c-format msgid "ppdc: Expected name after FileName on line %d of %s." msgstr "ppdc: Esperava nome após FileName na linha %d de %s." #, c-format msgid "ppdc: Expected name after Font on line %d of %s." msgstr "ppdc: Esperava nome após Font na linha %d de %s." #, c-format msgid "ppdc: Expected name after Manufacturer on line %d of %s." msgstr "ppdc: Esperava nome após Manufacturer na linha %d de %s." #, c-format msgid "ppdc: Expected name after MediaSize on line %d of %s." msgstr "ppdc: Esperava nome após MediaSize na linha %d de %s." #, c-format msgid "ppdc: Expected name after ModelName on line %d of %s." msgstr "ppdc: Esperava nome após ModelName na linha %d de %s." #, c-format msgid "ppdc: Expected name after PCFileName on line %d of %s." msgstr "ppdc: Esperava nome após PCFileName na linha %d de %s." #, c-format msgid "ppdc: Expected name/text after %s on line %d of %s." msgstr "ppdc: Esperava nome/texto após %s na linha %d de %s." #, c-format msgid "ppdc: Expected name/text after Installable on line %d of %s." msgstr "ppdc: Esperava nome/texto após Installable na linha %d de %s." #, c-format msgid "ppdc: Expected name/text after Resolution on line %d of %s." msgstr "ppdc: Esperava nome/texto após Resolution na linha %d de %s." #, c-format msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s." msgstr "" "ppdc: Esperava combinação de nome/texto para ColorModel na linha %d de %s." #, c-format msgid "ppdc: Expected option name/text on line %d of %s." msgstr "ppdc: Esperava opção de nome/texto na linha %d de %s." #, c-format msgid "ppdc: Expected option section on line %d of %s." msgstr "ppdc: Esperava opção de seção na linha %d de %s." #, c-format msgid "ppdc: Expected option type on line %d of %s." msgstr "ppdc: Esperava tipo da opção na linha %d de %s." #, c-format msgid "ppdc: Expected override field after Resolution on line %d of %s." msgstr "" "ppdc: Esperava um campo de substituição após Resolution na linha %d de %s." #, c-format msgid "ppdc: Expected quoted string on line %d of %s." msgstr "ppdc: Esperava string em aspas na linha %d de %s." #, c-format msgid "ppdc: Expected real number on line %d of %s." msgstr "ppdc: Esperava número real na linha %d de %s." #, c-format msgid "" "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s." msgstr "" "ppdc: Esperava resolução/tipo de mídia seguindo ColorProfile na linha %d de " "%s." #, c-format msgid "" "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d " "of %s." msgstr "" "ppdc: Esperava resolução/tipo de mídia seguindo SimpleColorProfile na linha " "%d de %s." #, c-format msgid "ppdc: Expected selector after %s on line %d of %s." msgstr "ppdc: Esperava seletor após %s na linha %d de %s." #, c-format msgid "ppdc: Expected status after Font on line %d of %s." msgstr "ppdc: Esperava estado após Font na linha %d de %s." #, c-format msgid "ppdc: Expected string after Copyright on line %d of %s." msgstr "ppdc: Esperava string após Copyright na linha %d de %s." #, c-format msgid "ppdc: Expected string after Version on line %d of %s." msgstr "ppdc: Esperava string após Version na linha %d de %s." #, c-format msgid "ppdc: Expected two option names on line %d of %s." msgstr "ppdc: Esperava nomes de duas opções na linha %d de %s." #, c-format msgid "ppdc: Expected value after %s on line %d of %s." msgstr "ppdc: Esperava valor após %s na linha %d de %s." #, c-format msgid "ppdc: Expected version after Font on line %d of %s." msgstr "ppdc: Esperava versão após Font na linha %d de %s." #, c-format msgid "ppdc: Invalid #include/#po filename \"%s\"." msgstr "ppdc: Nome de arquivo \"%s\" de #include/#po inválido." #, c-format msgid "ppdc: Invalid cost for filter on line %d of %s." msgstr "ppdc: Custo inválido para filtro na linha %d de %s." #, c-format msgid "ppdc: Invalid empty MIME type for filter on line %d of %s." msgstr "ppdc: Tipo MIME vazio inválido para filtro na linha %d de %s." #, c-format msgid "ppdc: Invalid empty program name for filter on line %d of %s." msgstr "ppdc: Nome de programa vazio inválido na linha %d de %s." #, c-format msgid "ppdc: Invalid option section \"%s\" on line %d of %s." msgstr "ppdc: Seção \"%s\" inválida de opção na linha %d de %s." #, c-format msgid "ppdc: Invalid option type \"%s\" on line %d of %s." msgstr "ppdc: Tipo \"%s\" inválido de opção na linha %d de %s." #, c-format msgid "ppdc: Loading driver information file \"%s\"." msgstr "ppdc: Carregando arquivo \"%s\" de informações de driver." #, c-format msgid "ppdc: Loading messages for locale \"%s\"." msgstr "ppdc: Carregando mensagens para locale \"%s\"." #, c-format msgid "ppdc: Loading messages from \"%s\"." msgstr "ppdc: Carregando mensagens de \"%s\"." #, c-format msgid "ppdc: Missing #endif at end of \"%s\"." msgstr "ppdc: Faltando #endif ao final de \"%s\"." #, c-format msgid "ppdc: Missing #if on line %d of %s." msgstr "ppdc: Faltando #if na linha %d de %s." #, c-format msgid "" "ppdc: Need a msgid line before any translation strings on line %d of %s." msgstr "" "ppdc: Precisa de uma linha de msgid antes de qualquer string de tradução na " "linha %d de %s." #, c-format msgid "ppdc: No message catalog provided for locale %s." msgstr "ppdc: Nenhum catálogo de mensagens fornecido para o locale %s." #, c-format msgid "ppdc: Option %s defined in two different groups on line %d of %s." msgstr "ppdc: Opção %s definida em dois grupos diferentes na linha %d de %s." #, c-format msgid "ppdc: Option %s redefined with a different type on line %d of %s." msgstr "ppdc: Opção %s redefinida com um tipo diferente na linha %d de %s." #, c-format msgid "ppdc: Option constraint must *name on line %d of %s." msgstr "ppdc: Restrição da opção deve *name na linha %d de %s." #, c-format msgid "ppdc: Too many nested #if's on line %d of %s." msgstr "ppdc: Muitos #if aninhados demais na linha %d de %s." #, c-format msgid "ppdc: Unable to create PPD file \"%s\" - %s." msgstr "ppdc: Não foi possível criar o arquivo PPD \"%s\" - %s." #, c-format msgid "ppdc: Unable to create output directory %s: %s" msgstr "ppdc: Não foi possível criar diretório de saída %s: %s" #, c-format msgid "ppdc: Unable to create output pipes: %s" msgstr "ppdc: Não foi possível criar redirecionamento de saída: %s" #, c-format msgid "ppdc: Unable to execute cupstestppd: %s" msgstr "ppdc: Não foi possível executar cupstestppd: %s" #, c-format msgid "ppdc: Unable to find #po file %s on line %d of %s." msgstr "ppdc: Não foi possível encontrar arquivo #po %s na linha %d de %s." #, c-format msgid "ppdc: Unable to find include file \"%s\" on line %d of %s." msgstr "" "ppdc: Não foi possível encontrar o arquivo include \"%s\" na linha %d de %s." #, c-format msgid "ppdc: Unable to find localization for \"%s\" - %s" msgstr "ppdc: Não foi possível encontrar localização para \"%s\" - %s" #, c-format msgid "ppdc: Unable to load localization file \"%s\" - %s" msgstr "ppdc: Não foi possível carregar arquivo de localização \"%s\" - %s" #, c-format msgid "ppdc: Unable to open %s: %s" msgstr "ppdc: Não foi possível abrir %s: %s" #, c-format msgid "ppdc: Undefined variable (%s) on line %d of %s." msgstr "ppdc: Variável indefinida (%s) na linha %d de %s." #, c-format msgid "ppdc: Unexpected text on line %d of %s." msgstr "ppdc: Texto inesperado na linha %d de %s." #, c-format msgid "ppdc: Unknown driver type %s on line %d of %s." msgstr "ppdc: Tipo de driver %s desconhecido na linha %d de %s." #, c-format msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s." msgstr "ppdc: Tipo de duplex desconhecido \"%s\" na linha %d de %s." #, c-format msgid "ppdc: Unknown media size \"%s\" on line %d of %s." msgstr "ppdc: Tamanho de mídia desconhecido \"%s\" na linha %d de %s." #, c-format msgid "ppdc: Unknown message catalog format for \"%s\"." msgstr "ppdc: Formato de catálogo de mensagens desconhecido para \"%s\"." #, c-format msgid "ppdc: Unknown token \"%s\" seen on line %d of %s." msgstr "ppdc: Token desconhecido \"%s\" visto na linha %d de %s." #, c-format msgid "" "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." msgstr "" "ppdc: Caractere final desconhecido em número real \"%s\" na linha %d de %s." #, c-format msgid "ppdc: Unterminated string starting with %c on line %d of %s." msgstr "ppdc: Início de string não terminada com %c na linha %d de %s." #, c-format msgid "ppdc: Warning - overlapping filename \"%s\"." msgstr "ppdc: Aviso - nome de arquivo em sobreposição \"%s\"." #, c-format msgid "ppdc: Writing %s." msgstr "ppdc: Gravando %s." #, c-format msgid "ppdc: Writing PPD files to directory \"%s\"." msgstr "ppdc: Gravando arquivos PPD para a pasta \"%s\"." #, c-format msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s." msgstr "ppdmerge: LanguageVersion incorreto \"%s\" em %s." #, c-format msgid "ppdmerge: Ignoring PPD file %s." msgstr "ppdmerge: Ignorando o arquivo PPD %s." #, c-format msgid "ppdmerge: Unable to backup %s to %s - %s" msgstr "ppdmerge: Não é possível fazer backup de %s para %s - %s" msgid "pre-dial-string" msgstr "Pre-dial String" msgid "presentation-direction-number-up" msgstr "Number-Up Layout" msgid "presentation-direction-number-up.tobottom-toleft" msgstr "Top-Bottom, Right-Left" msgid "presentation-direction-number-up.tobottom-toright" msgstr "Top-Bottom, Left-Right" msgid "presentation-direction-number-up.toleft-tobottom" msgstr "Right-Left, Top-Bottom" msgid "presentation-direction-number-up.toleft-totop" msgstr "Right-Left, Bottom-Top" msgid "presentation-direction-number-up.toright-tobottom" msgstr "Left-Right, Top-Bottom" msgid "presentation-direction-number-up.toright-totop" msgstr "Left-Right, Bottom-Top" msgid "presentation-direction-number-up.totop-toleft" msgstr "Bottom-Top, Right-Left" msgid "presentation-direction-number-up.totop-toright" msgstr "Bottom-Top, Left-Right" msgid "print-accuracy" msgstr "Print Accuracy" msgid "print-base" msgstr "Print Base" msgid "print-base.brim" msgstr "Brim" msgid "print-base.none" msgstr "None" msgid "print-base.raft" msgstr "Raft" msgid "print-base.skirt" msgstr "Skirt" msgid "print-base.standard" msgstr "Standard" msgid "print-color-mode" msgstr "Print Color Mode" msgid "print-color-mode.auto" msgstr "Automatic" msgid "print-color-mode.bi-level" msgstr "Bi-Level" msgid "print-color-mode.color" msgstr "Color" msgid "print-color-mode.highlight" msgstr "Highlight" msgid "print-color-mode.monochrome" msgstr "Monochrome" msgid "print-color-mode.process-bi-level" msgstr "Process Bi-Level" msgid "print-color-mode.process-monochrome" msgstr "Process Monochrome" msgid "print-content-optimize" msgstr "Print Optimization" msgid "print-content-optimize.auto" msgstr "Automatic" msgid "print-content-optimize.graphic" msgstr "Graphics" msgid "print-content-optimize.photo" msgstr "Photo" msgid "print-content-optimize.text" msgstr "Text" msgid "print-content-optimize.text-and-graphic" msgstr "Text And Graphics" msgid "print-objects" msgstr "Print Objects" msgid "print-quality" msgstr "Print Quality" msgid "print-quality.3" msgstr "Draft" msgid "print-quality.4" msgstr "Normal" msgid "print-quality.5" msgstr "High" msgid "print-rendering-intent" msgstr "Print Rendering Intent" msgid "print-rendering-intent.absolute" msgstr "Absolute" msgid "print-rendering-intent.auto" msgstr "Automatic" msgid "print-rendering-intent.perceptual" msgstr "Perceptual" msgid "print-rendering-intent.relative" msgstr "Relative" msgid "print-rendering-intent.relative-bpc" msgstr "Relative w/Black Point Compensation" msgid "print-rendering-intent.saturation" msgstr "Saturation" msgid "print-scaling" msgstr "Print Scaling" msgid "print-scaling.auto" msgstr "Automatic" msgid "print-scaling.auto-fit" msgstr "Auto Fit" msgid "print-scaling.fill" msgstr "Fill" msgid "print-scaling.fit" msgstr "Fit" msgid "print-scaling.none" msgstr "None" msgid "print-supports" msgstr "Print Supports" msgid "print-supports.material" msgstr "Material" msgid "print-supports.none" msgstr "None" msgid "print-supports.standard" msgstr "Standard" #, c-format msgid "printer %s disabled since %s -" msgstr "impressora %s desabilitada desde %s -" #, c-format msgid "printer %s is idle. enabled since %s" msgstr "impressora %s está inativa; habilitada desde %s" #, c-format msgid "printer %s now printing %s-%d. enabled since %s" msgstr "impressora %s está imprimindo %s-%d; habilitada desde %s" #, c-format msgid "printer %s/%s disabled since %s -" msgstr "impressora %s/%s desabilitada desde %s -" #, c-format msgid "printer %s/%s is idle. enabled since %s" msgstr "impressora %s/%s está inativa; habilitada desde %s" #, c-format msgid "printer %s/%s now printing %s-%d. enabled since %s" msgstr "impressora %s/%s está imprimindo %s-%d; habilitada desde %s" msgid "printer-message-from-operator" msgstr "Printer Message From Operator" msgid "printer-resolution" msgstr "Printer Resolution" msgid "printer-state" msgstr "Printer State" msgid "printer-state-reasons" msgstr "Detailed Printer State" msgid "printer-state-reasons.alert-removal-of-binary-change-entry" msgstr "Alert Removal Of Binary Change Entry" msgid "printer-state-reasons.bander-added" msgstr "Bander Added" msgid "printer-state-reasons.bander-almost-empty" msgstr "Bander Almost Empty" msgid "printer-state-reasons.bander-almost-full" msgstr "Bander Almost Full" msgid "printer-state-reasons.bander-at-limit" msgstr "Bander At Limit" msgid "printer-state-reasons.bander-closed" msgstr "Bander Closed" msgid "printer-state-reasons.bander-configuration-change" msgstr "Bander Configuration Change" msgid "printer-state-reasons.bander-cover-closed" msgstr "Bander Cover Closed" msgid "printer-state-reasons.bander-cover-open" msgstr "Bander Cover Open" msgid "printer-state-reasons.bander-empty" msgstr "Bander Empty" msgid "printer-state-reasons.bander-full" msgstr "Bander Full" msgid "printer-state-reasons.bander-interlock-closed" msgstr "Bander Interlock Closed" msgid "printer-state-reasons.bander-interlock-open" msgstr "Bander Interlock Open" msgid "printer-state-reasons.bander-jam" msgstr "Bander Jam" msgid "printer-state-reasons.bander-life-almost-over" msgstr "Bander Life Almost Over" msgid "printer-state-reasons.bander-life-over" msgstr "Bander Life Over" msgid "printer-state-reasons.bander-memory-exhausted" msgstr "Bander Memory Exhausted" msgid "printer-state-reasons.bander-missing" msgstr "Bander Missing" msgid "printer-state-reasons.bander-motor-failure" msgstr "Bander Motor Failure" msgid "printer-state-reasons.bander-near-limit" msgstr "Bander Near Limit" msgid "printer-state-reasons.bander-offline" msgstr "Bander Offline" msgid "printer-state-reasons.bander-opened" msgstr "Bander Opened" msgid "printer-state-reasons.bander-over-temperature" msgstr "Bander Over Temperature" msgid "printer-state-reasons.bander-power-saver" msgstr "Bander Power Saver" msgid "printer-state-reasons.bander-recoverable-failure" msgstr "Bander Recoverable Failure" msgid "printer-state-reasons.bander-recoverable-storage" msgstr "Bander Recoverable Storage" msgid "printer-state-reasons.bander-removed" msgstr "Bander Removed" msgid "printer-state-reasons.bander-resource-added" msgstr "Bander Resource Added" msgid "printer-state-reasons.bander-resource-removed" msgstr "Bander Resource Removed" msgid "printer-state-reasons.bander-thermistor-failure" msgstr "Bander Thermistor Failure" msgid "printer-state-reasons.bander-timing-failure" msgstr "Bander Timing Failure" msgid "printer-state-reasons.bander-turned-off" msgstr "Bander Turned Off" msgid "printer-state-reasons.bander-turned-on" msgstr "Bander Turned On" msgid "printer-state-reasons.bander-under-temperature" msgstr "Bander Under Temperature" msgid "printer-state-reasons.bander-unrecoverable-failure" msgstr "Bander Unrecoverable Failure" msgid "printer-state-reasons.bander-unrecoverable-storage-error" msgstr "Bander Unrecoverable Storage Error" msgid "printer-state-reasons.bander-warming-up" msgstr "Bander Warming Up" msgid "printer-state-reasons.binder-added" msgstr "Binder Added" msgid "printer-state-reasons.binder-almost-empty" msgstr "Binder Almost Empty" msgid "printer-state-reasons.binder-almost-full" msgstr "Binder Almost Full" msgid "printer-state-reasons.binder-at-limit" msgstr "Binder At Limit" msgid "printer-state-reasons.binder-closed" msgstr "Binder Closed" msgid "printer-state-reasons.binder-configuration-change" msgstr "Binder Configuration Change" msgid "printer-state-reasons.binder-cover-closed" msgstr "Binder Cover Closed" msgid "printer-state-reasons.binder-cover-open" msgstr "Binder Cover Open" msgid "printer-state-reasons.binder-empty" msgstr "Binder Empty" msgid "printer-state-reasons.binder-full" msgstr "Binder Full" msgid "printer-state-reasons.binder-interlock-closed" msgstr "Binder Interlock Closed" msgid "printer-state-reasons.binder-interlock-open" msgstr "Binder Interlock Open" msgid "printer-state-reasons.binder-jam" msgstr "Binder Jam" msgid "printer-state-reasons.binder-life-almost-over" msgstr "Binder Life Almost Over" msgid "printer-state-reasons.binder-life-over" msgstr "Binder Life Over" msgid "printer-state-reasons.binder-memory-exhausted" msgstr "Binder Memory Exhausted" msgid "printer-state-reasons.binder-missing" msgstr "Binder Missing" msgid "printer-state-reasons.binder-motor-failure" msgstr "Binder Motor Failure" msgid "printer-state-reasons.binder-near-limit" msgstr "Binder Near Limit" msgid "printer-state-reasons.binder-offline" msgstr "Binder Offline" msgid "printer-state-reasons.binder-opened" msgstr "Binder Opened" msgid "printer-state-reasons.binder-over-temperature" msgstr "Binder Over Temperature" msgid "printer-state-reasons.binder-power-saver" msgstr "Binder Power Saver" msgid "printer-state-reasons.binder-recoverable-failure" msgstr "Binder Recoverable Failure" msgid "printer-state-reasons.binder-recoverable-storage" msgstr "Binder Recoverable Storage" msgid "printer-state-reasons.binder-removed" msgstr "Binder Removed" msgid "printer-state-reasons.binder-resource-added" msgstr "Binder Resource Added" msgid "printer-state-reasons.binder-resource-removed" msgstr "Binder Resource Removed" msgid "printer-state-reasons.binder-thermistor-failure" msgstr "Binder Thermistor Failure" msgid "printer-state-reasons.binder-timing-failure" msgstr "Binder Timing Failure" msgid "printer-state-reasons.binder-turned-off" msgstr "Binder Turned Off" msgid "printer-state-reasons.binder-turned-on" msgstr "Binder Turned On" msgid "printer-state-reasons.binder-under-temperature" msgstr "Binder Under Temperature" msgid "printer-state-reasons.binder-unrecoverable-failure" msgstr "Binder Unrecoverable Failure" msgid "printer-state-reasons.binder-unrecoverable-storage-error" msgstr "Binder Unrecoverable Storage Error" msgid "printer-state-reasons.binder-warming-up" msgstr "Binder Warming Up" msgid "printer-state-reasons.camera-failure" msgstr "Camera Failure" msgid "printer-state-reasons.chamber-cooling" msgstr "Chamber Cooling" msgid "printer-state-reasons.chamber-heating" msgstr "Chamber Heating" msgid "printer-state-reasons.chamber-temperature-high" msgstr "Chamber Temperature High" msgid "printer-state-reasons.chamber-temperature-low" msgstr "Chamber Temperature Low" msgid "printer-state-reasons.cleaner-life-almost-over" msgstr "Cleaner Life Almost Over" msgid "printer-state-reasons.cleaner-life-over" msgstr "Cleaner Life Over" msgid "printer-state-reasons.configuration-change" msgstr "Configuration Change" msgid "printer-state-reasons.connecting-to-device" msgstr "Connecting To Device" msgid "printer-state-reasons.cover-open" msgstr "Cover Open" msgid "printer-state-reasons.deactivated" msgstr "Deactivated" msgid "printer-state-reasons.developer-empty" msgstr "Developer Empty" msgid "printer-state-reasons.developer-low" msgstr "Developer Low" msgid "printer-state-reasons.die-cutter-added" msgstr "Die Cutter Added" msgid "printer-state-reasons.die-cutter-almost-empty" msgstr "Die Cutter Almost Empty" msgid "printer-state-reasons.die-cutter-almost-full" msgstr "Die Cutter Almost Full" msgid "printer-state-reasons.die-cutter-at-limit" msgstr "Die Cutter At Limit" msgid "printer-state-reasons.die-cutter-closed" msgstr "Die Cutter Closed" msgid "printer-state-reasons.die-cutter-configuration-change" msgstr "Die Cutter Configuration Change" msgid "printer-state-reasons.die-cutter-cover-closed" msgstr "Die Cutter Cover Closed" msgid "printer-state-reasons.die-cutter-cover-open" msgstr "Die Cutter Cover Open" msgid "printer-state-reasons.die-cutter-empty" msgstr "Die Cutter Empty" msgid "printer-state-reasons.die-cutter-full" msgstr "Die Cutter Full" msgid "printer-state-reasons.die-cutter-interlock-closed" msgstr "Die Cutter Interlock Closed" msgid "printer-state-reasons.die-cutter-interlock-open" msgstr "Die Cutter Interlock Open" msgid "printer-state-reasons.die-cutter-jam" msgstr "Die Cutter Jam" msgid "printer-state-reasons.die-cutter-life-almost-over" msgstr "Die Cutter Life Almost Over" msgid "printer-state-reasons.die-cutter-life-over" msgstr "Die Cutter Life Over" msgid "printer-state-reasons.die-cutter-memory-exhausted" msgstr "Die Cutter Memory Exhausted" msgid "printer-state-reasons.die-cutter-missing" msgstr "Die Cutter Missing" msgid "printer-state-reasons.die-cutter-motor-failure" msgstr "Die Cutter Motor Failure" msgid "printer-state-reasons.die-cutter-near-limit" msgstr "Die Cutter Near Limit" msgid "printer-state-reasons.die-cutter-offline" msgstr "Die Cutter Offline" msgid "printer-state-reasons.die-cutter-opened" msgstr "Die Cutter Opened" msgid "printer-state-reasons.die-cutter-over-temperature" msgstr "Die Cutter Over Temperature" msgid "printer-state-reasons.die-cutter-power-saver" msgstr "Die Cutter Power Saver" msgid "printer-state-reasons.die-cutter-recoverable-failure" msgstr "Die Cutter Recoverable Failure" msgid "printer-state-reasons.die-cutter-recoverable-storage" msgstr "Die Cutter Recoverable Storage" msgid "printer-state-reasons.die-cutter-removed" msgstr "Die Cutter Removed" msgid "printer-state-reasons.die-cutter-resource-added" msgstr "Die Cutter Resource Added" msgid "printer-state-reasons.die-cutter-resource-removed" msgstr "Die Cutter Resource Removed" msgid "printer-state-reasons.die-cutter-thermistor-failure" msgstr "Die Cutter Thermistor Failure" msgid "printer-state-reasons.die-cutter-timing-failure" msgstr "Die Cutter Timing Failure" msgid "printer-state-reasons.die-cutter-turned-off" msgstr "Die Cutter Turned Off" msgid "printer-state-reasons.die-cutter-turned-on" msgstr "Die Cutter Turned On" msgid "printer-state-reasons.die-cutter-under-temperature" msgstr "Die Cutter Under Temperature" msgid "printer-state-reasons.die-cutter-unrecoverable-failure" msgstr "Die Cutter Unrecoverable Failure" msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error" msgstr "Die Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.die-cutter-warming-up" msgstr "Die Cutter Warming Up" msgid "printer-state-reasons.door-open" msgstr "Door Open" msgid "printer-state-reasons.extruder-cooling" msgstr "Extruder Cooling" msgid "printer-state-reasons.extruder-failure" msgstr "Extruder Failure" msgid "printer-state-reasons.extruder-heating" msgstr "Extruder Heating" msgid "printer-state-reasons.extruder-jam" msgstr "Extruder Jam" msgid "printer-state-reasons.extruder-temperature-high" msgstr "Extruder Temperature High" msgid "printer-state-reasons.extruder-temperature-low" msgstr "Extruder Temperature Low" msgid "printer-state-reasons.fan-failure" msgstr "Fan Failure" msgid "printer-state-reasons.folder-added" msgstr "Folder Added" msgid "printer-state-reasons.folder-almost-empty" msgstr "Folder Almost Empty" msgid "printer-state-reasons.folder-almost-full" msgstr "Folder Almost Full" msgid "printer-state-reasons.folder-at-limit" msgstr "Folder At Limit" msgid "printer-state-reasons.folder-closed" msgstr "Folder Closed" msgid "printer-state-reasons.folder-configuration-change" msgstr "Folder Configuration Change" msgid "printer-state-reasons.folder-cover-closed" msgstr "Folder Cover Closed" msgid "printer-state-reasons.folder-cover-open" msgstr "Folder Cover Open" msgid "printer-state-reasons.folder-empty" msgstr "Folder Empty" msgid "printer-state-reasons.folder-full" msgstr "Folder Full" msgid "printer-state-reasons.folder-interlock-closed" msgstr "Folder Interlock Closed" msgid "printer-state-reasons.folder-interlock-open" msgstr "Folder Interlock Open" msgid "printer-state-reasons.folder-jam" msgstr "Folder Jam" msgid "printer-state-reasons.folder-life-almost-over" msgstr "Folder Life Almost Over" msgid "printer-state-reasons.folder-life-over" msgstr "Folder Life Over" msgid "printer-state-reasons.folder-memory-exhausted" msgstr "Folder Memory Exhausted" msgid "printer-state-reasons.folder-missing" msgstr "Folder Missing" msgid "printer-state-reasons.folder-motor-failure" msgstr "Folder Motor Failure" msgid "printer-state-reasons.folder-near-limit" msgstr "Folder Near Limit" msgid "printer-state-reasons.folder-offline" msgstr "Folder Offline" msgid "printer-state-reasons.folder-opened" msgstr "Folder Opened" msgid "printer-state-reasons.folder-over-temperature" msgstr "Folder Over Temperature" msgid "printer-state-reasons.folder-power-saver" msgstr "Folder Power Saver" msgid "printer-state-reasons.folder-recoverable-failure" msgstr "Folder Recoverable Failure" msgid "printer-state-reasons.folder-recoverable-storage" msgstr "Folder Recoverable Storage" msgid "printer-state-reasons.folder-removed" msgstr "Folder Removed" msgid "printer-state-reasons.folder-resource-added" msgstr "Folder Resource Added" msgid "printer-state-reasons.folder-resource-removed" msgstr "Folder Resource Removed" msgid "printer-state-reasons.folder-thermistor-failure" msgstr "Folder Thermistor Failure" msgid "printer-state-reasons.folder-timing-failure" msgstr "Folder Timing Failure" msgid "printer-state-reasons.folder-turned-off" msgstr "Folder Turned Off" msgid "printer-state-reasons.folder-turned-on" msgstr "Folder Turned On" msgid "printer-state-reasons.folder-under-temperature" msgstr "Folder Under Temperature" msgid "printer-state-reasons.folder-unrecoverable-failure" msgstr "Folder Unrecoverable Failure" msgid "printer-state-reasons.folder-unrecoverable-storage-error" msgstr "Folder Unrecoverable Storage Error" msgid "printer-state-reasons.folder-warming-up" msgstr "Folder Warming Up" msgid "printer-state-reasons.fuser-over-temp" msgstr "Fuser Over Temp" msgid "printer-state-reasons.fuser-under-temp" msgstr "Fuser Under Temp" msgid "printer-state-reasons.hold-new-jobs" msgstr "Hold New Jobs" msgid "printer-state-reasons.identify-printer-requested" msgstr "Identify Printer" msgid "printer-state-reasons.imprinter-added" msgstr "Imprinter Added" msgid "printer-state-reasons.imprinter-almost-empty" msgstr "Imprinter Almost Empty" msgid "printer-state-reasons.imprinter-almost-full" msgstr "Imprinter Almost Full" msgid "printer-state-reasons.imprinter-at-limit" msgstr "Imprinter At Limit" msgid "printer-state-reasons.imprinter-closed" msgstr "Imprinter Closed" msgid "printer-state-reasons.imprinter-configuration-change" msgstr "Imprinter Configuration Change" msgid "printer-state-reasons.imprinter-cover-closed" msgstr "Imprinter Cover Closed" msgid "printer-state-reasons.imprinter-cover-open" msgstr "Imprinter Cover Open" msgid "printer-state-reasons.imprinter-empty" msgstr "Imprinter Empty" msgid "printer-state-reasons.imprinter-full" msgstr "Imprinter Full" msgid "printer-state-reasons.imprinter-interlock-closed" msgstr "Imprinter Interlock Closed" msgid "printer-state-reasons.imprinter-interlock-open" msgstr "Imprinter Interlock Open" msgid "printer-state-reasons.imprinter-jam" msgstr "Imprinter Jam" msgid "printer-state-reasons.imprinter-life-almost-over" msgstr "Imprinter Life Almost Over" msgid "printer-state-reasons.imprinter-life-over" msgstr "Imprinter Life Over" msgid "printer-state-reasons.imprinter-memory-exhausted" msgstr "Imprinter Memory Exhausted" msgid "printer-state-reasons.imprinter-missing" msgstr "Imprinter Missing" msgid "printer-state-reasons.imprinter-motor-failure" msgstr "Imprinter Motor Failure" msgid "printer-state-reasons.imprinter-near-limit" msgstr "Imprinter Near Limit" msgid "printer-state-reasons.imprinter-offline" msgstr "Imprinter Offline" msgid "printer-state-reasons.imprinter-opened" msgstr "Imprinter Opened" msgid "printer-state-reasons.imprinter-over-temperature" msgstr "Imprinter Over Temperature" msgid "printer-state-reasons.imprinter-power-saver" msgstr "Imprinter Power Saver" msgid "printer-state-reasons.imprinter-recoverable-failure" msgstr "Imprinter Recoverable Failure" msgid "printer-state-reasons.imprinter-recoverable-storage" msgstr "Imprinter Recoverable Storage" msgid "printer-state-reasons.imprinter-removed" msgstr "Imprinter Removed" msgid "printer-state-reasons.imprinter-resource-added" msgstr "Imprinter Resource Added" msgid "printer-state-reasons.imprinter-resource-removed" msgstr "Imprinter Resource Removed" msgid "printer-state-reasons.imprinter-thermistor-failure" msgstr "Imprinter Thermistor Failure" msgid "printer-state-reasons.imprinter-timing-failure" msgstr "Imprinter Timing Failure" msgid "printer-state-reasons.imprinter-turned-off" msgstr "Imprinter Turned Off" msgid "printer-state-reasons.imprinter-turned-on" msgstr "Imprinter Turned On" msgid "printer-state-reasons.imprinter-under-temperature" msgstr "Imprinter Under Temperature" msgid "printer-state-reasons.imprinter-unrecoverable-failure" msgstr "Imprinter Unrecoverable Failure" msgid "printer-state-reasons.imprinter-unrecoverable-storage-error" msgstr "Imprinter Unrecoverable Storage Error" msgid "printer-state-reasons.imprinter-warming-up" msgstr "Imprinter Warming Up" msgid "printer-state-reasons.input-cannot-feed-size-selected" msgstr "Input Cannot Feed Size Selected" msgid "printer-state-reasons.input-manual-input-request" msgstr "Input Manual Input Request" msgid "printer-state-reasons.input-media-color-change" msgstr "Input Media Color Change" msgid "printer-state-reasons.input-media-form-parts-change" msgstr "Input Media Form Parts Change" msgid "printer-state-reasons.input-media-size-change" msgstr "Input Media Size Change" msgid "printer-state-reasons.input-media-type-change" msgstr "Input Media Type Change" msgid "printer-state-reasons.input-media-weight-change" msgstr "Input Media Weight Change" msgid "printer-state-reasons.input-tray-elevation-failure" msgstr "Input Tray Elevation Failure" msgid "printer-state-reasons.input-tray-missing" msgstr "Input Tray Missing" msgid "printer-state-reasons.input-tray-position-failure" msgstr "Input Tray Position Failure" msgid "printer-state-reasons.inserter-added" msgstr "Inserter Added" msgid "printer-state-reasons.inserter-almost-empty" msgstr "Inserter Almost Empty" msgid "printer-state-reasons.inserter-almost-full" msgstr "Inserter Almost Full" msgid "printer-state-reasons.inserter-at-limit" msgstr "Inserter At Limit" msgid "printer-state-reasons.inserter-closed" msgstr "Inserter Closed" msgid "printer-state-reasons.inserter-configuration-change" msgstr "Inserter Configuration Change" msgid "printer-state-reasons.inserter-cover-closed" msgstr "Inserter Cover Closed" msgid "printer-state-reasons.inserter-cover-open" msgstr "Inserter Cover Open" msgid "printer-state-reasons.inserter-empty" msgstr "Inserter Empty" msgid "printer-state-reasons.inserter-full" msgstr "Inserter Full" msgid "printer-state-reasons.inserter-interlock-closed" msgstr "Inserter Interlock Closed" msgid "printer-state-reasons.inserter-interlock-open" msgstr "Inserter Interlock Open" msgid "printer-state-reasons.inserter-jam" msgstr "Inserter Jam" msgid "printer-state-reasons.inserter-life-almost-over" msgstr "Inserter Life Almost Over" msgid "printer-state-reasons.inserter-life-over" msgstr "Inserter Life Over" msgid "printer-state-reasons.inserter-memory-exhausted" msgstr "Inserter Memory Exhausted" msgid "printer-state-reasons.inserter-missing" msgstr "Inserter Missing" msgid "printer-state-reasons.inserter-motor-failure" msgstr "Inserter Motor Failure" msgid "printer-state-reasons.inserter-near-limit" msgstr "Inserter Near Limit" msgid "printer-state-reasons.inserter-offline" msgstr "Inserter Offline" msgid "printer-state-reasons.inserter-opened" msgstr "Inserter Opened" msgid "printer-state-reasons.inserter-over-temperature" msgstr "Inserter Over Temperature" msgid "printer-state-reasons.inserter-power-saver" msgstr "Inserter Power Saver" msgid "printer-state-reasons.inserter-recoverable-failure" msgstr "Inserter Recoverable Failure" msgid "printer-state-reasons.inserter-recoverable-storage" msgstr "Inserter Recoverable Storage" msgid "printer-state-reasons.inserter-removed" msgstr "Inserter Removed" msgid "printer-state-reasons.inserter-resource-added" msgstr "Inserter Resource Added" msgid "printer-state-reasons.inserter-resource-removed" msgstr "Inserter Resource Removed" msgid "printer-state-reasons.inserter-thermistor-failure" msgstr "Inserter Thermistor Failure" msgid "printer-state-reasons.inserter-timing-failure" msgstr "Inserter Timing Failure" msgid "printer-state-reasons.inserter-turned-off" msgstr "Inserter Turned Off" msgid "printer-state-reasons.inserter-turned-on" msgstr "Inserter Turned On" msgid "printer-state-reasons.inserter-under-temperature" msgstr "Inserter Under Temperature" msgid "printer-state-reasons.inserter-unrecoverable-failure" msgstr "Inserter Unrecoverable Failure" msgid "printer-state-reasons.inserter-unrecoverable-storage-error" msgstr "Inserter Unrecoverable Storage Error" msgid "printer-state-reasons.inserter-warming-up" msgstr "Inserter Warming Up" msgid "printer-state-reasons.interlock-closed" msgstr "Interlock Closed" msgid "printer-state-reasons.interlock-open" msgstr "Interlock Open" msgid "printer-state-reasons.interpreter-cartridge-added" msgstr "Interpreter Cartridge Added" msgid "printer-state-reasons.interpreter-cartridge-deleted" msgstr "Interpreter Cartridge Deleted" msgid "printer-state-reasons.interpreter-complex-page-encountered" msgstr "Interpreter Complex Page Encountered" msgid "printer-state-reasons.interpreter-memory-decrease" msgstr "Interpreter Memory Decrease" msgid "printer-state-reasons.interpreter-memory-increase" msgstr "Interpreter Memory Increase" msgid "printer-state-reasons.interpreter-resource-added" msgstr "Interpreter Resource Added" msgid "printer-state-reasons.interpreter-resource-deleted" msgstr "Interpreter Resource Deleted" msgid "printer-state-reasons.interpreter-resource-unavailable" msgstr "Interpreter Resource Unavailable" msgid "printer-state-reasons.lamp-at-eol" msgstr "Lamp At Eol" msgid "printer-state-reasons.lamp-failure" msgstr "Lamp Failure" msgid "printer-state-reasons.lamp-near-eol" msgstr "Lamp Near Eol" msgid "printer-state-reasons.laser-at-eol" msgstr "Laser At Eol" msgid "printer-state-reasons.laser-failure" msgstr "Laser Failure" msgid "printer-state-reasons.laser-near-eol" msgstr "Laser Near Eol" msgid "printer-state-reasons.make-envelope-added" msgstr "Make Envelope Added" msgid "printer-state-reasons.make-envelope-almost-empty" msgstr "Make Envelope Almost Empty" msgid "printer-state-reasons.make-envelope-almost-full" msgstr "Make Envelope Almost Full" msgid "printer-state-reasons.make-envelope-at-limit" msgstr "Make Envelope At Limit" msgid "printer-state-reasons.make-envelope-closed" msgstr "Make Envelope Closed" msgid "printer-state-reasons.make-envelope-configuration-change" msgstr "Make Envelope Configuration Change" msgid "printer-state-reasons.make-envelope-cover-closed" msgstr "Make Envelope Cover Closed" msgid "printer-state-reasons.make-envelope-cover-open" msgstr "Make Envelope Cover Open" msgid "printer-state-reasons.make-envelope-empty" msgstr "Make Envelope Empty" msgid "printer-state-reasons.make-envelope-full" msgstr "Make Envelope Full" msgid "printer-state-reasons.make-envelope-interlock-closed" msgstr "Make Envelope Interlock Closed" msgid "printer-state-reasons.make-envelope-interlock-open" msgstr "Make Envelope Interlock Open" msgid "printer-state-reasons.make-envelope-jam" msgstr "Make Envelope Jam" msgid "printer-state-reasons.make-envelope-life-almost-over" msgstr "Make Envelope Life Almost Over" msgid "printer-state-reasons.make-envelope-life-over" msgstr "Make Envelope Life Over" msgid "printer-state-reasons.make-envelope-memory-exhausted" msgstr "Make Envelope Memory Exhausted" msgid "printer-state-reasons.make-envelope-missing" msgstr "Make Envelope Missing" msgid "printer-state-reasons.make-envelope-motor-failure" msgstr "Make Envelope Motor Failure" msgid "printer-state-reasons.make-envelope-near-limit" msgstr "Make Envelope Near Limit" msgid "printer-state-reasons.make-envelope-offline" msgstr "Make Envelope Offline" msgid "printer-state-reasons.make-envelope-opened" msgstr "Make Envelope Opened" msgid "printer-state-reasons.make-envelope-over-temperature" msgstr "Make Envelope Over Temperature" msgid "printer-state-reasons.make-envelope-power-saver" msgstr "Make Envelope Power Saver" msgid "printer-state-reasons.make-envelope-recoverable-failure" msgstr "Make Envelope Recoverable Failure" msgid "printer-state-reasons.make-envelope-recoverable-storage" msgstr "Make Envelope Recoverable Storage" msgid "printer-state-reasons.make-envelope-removed" msgstr "Make Envelope Removed" msgid "printer-state-reasons.make-envelope-resource-added" msgstr "Make Envelope Resource Added" msgid "printer-state-reasons.make-envelope-resource-removed" msgstr "Make Envelope Resource Removed" msgid "printer-state-reasons.make-envelope-thermistor-failure" msgstr "Make Envelope Thermistor Failure" msgid "printer-state-reasons.make-envelope-timing-failure" msgstr "Make Envelope Timing Failure" msgid "printer-state-reasons.make-envelope-turned-off" msgstr "Make Envelope Turned Off" msgid "printer-state-reasons.make-envelope-turned-on" msgstr "Make Envelope Turned On" msgid "printer-state-reasons.make-envelope-under-temperature" msgstr "Make Envelope Under Temperature" msgid "printer-state-reasons.make-envelope-unrecoverable-failure" msgstr "Make Envelope Unrecoverable Failure" msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error" msgstr "Make Envelope Unrecoverable Storage Error" msgid "printer-state-reasons.make-envelope-warming-up" msgstr "Make Envelope Warming Up" msgid "printer-state-reasons.marker-adjusting-print-quality" msgstr "Marker Adjusting Print Quality" msgid "printer-state-reasons.marker-developer-almost-empty" msgstr "Marker Developer Almost Empty" msgid "printer-state-reasons.marker-developer-empty" msgstr "Marker Developer Empty" msgid "printer-state-reasons.marker-fuser-thermistor-failure" msgstr "Marker Fuser Thermistor Failure" msgid "printer-state-reasons.marker-fuser-timing-failure" msgstr "Marker Fuser Timing Failure" msgid "printer-state-reasons.marker-ink-almost-empty" msgstr "Marker Ink Almost Empty" msgid "printer-state-reasons.marker-ink-empty" msgstr "Marker Ink Empty" msgid "printer-state-reasons.marker-print-ribbon-almost-empty" msgstr "Marker Print Ribbon Almost Empty" msgid "printer-state-reasons.marker-print-ribbon-empty" msgstr "Marker Print Ribbon Empty" msgid "printer-state-reasons.marker-supply-empty" msgstr "Marker Supply Empty" msgid "printer-state-reasons.marker-supply-low" msgstr "Marker Supply Low" msgid "printer-state-reasons.marker-toner-cartridge-missing" msgstr "Marker Toner Cartridge Missing" msgid "printer-state-reasons.marker-waste-almost-full" msgstr "Marker Waste Almost Full" msgid "printer-state-reasons.marker-waste-full" msgstr "Marker Waste Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full" msgstr "Marker Waste Ink Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-full" msgstr "Marker Waste Ink Receptacle Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full" msgstr "Marker Waste Toner Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-full" msgstr "Marker Waste Toner Receptacle Full" msgid "printer-state-reasons.material-empty" msgstr "Material Empty" msgid "printer-state-reasons.material-low" msgstr "Material Low" msgid "printer-state-reasons.material-needed" msgstr "Material Needed" msgid "printer-state-reasons.media-empty" msgstr "Media Empty" msgid "printer-state-reasons.media-jam" msgstr "Media Jam" msgid "printer-state-reasons.media-low" msgstr "Media Low" msgid "printer-state-reasons.media-needed" msgstr "Media Needed" msgid "printer-state-reasons.media-path-cannot-duplex-media-selected" msgstr "Media Path Cannot Duplex Media Selected" msgid "printer-state-reasons.media-path-media-tray-almost-full" msgstr "Media Path Media Tray Almost Full" msgid "printer-state-reasons.media-path-media-tray-full" msgstr "Media Path Media Tray Full" msgid "printer-state-reasons.media-path-media-tray-missing" msgstr "Media Path Media Tray Missing" msgid "printer-state-reasons.motor-failure" msgstr "Motor Failure" msgid "printer-state-reasons.moving-to-paused" msgstr "Moving To Paused" msgid "printer-state-reasons.none" msgstr "None" msgid "printer-state-reasons.opc-life-over" msgstr "Opc Life Over" msgid "printer-state-reasons.opc-near-eol" msgstr "Opc Near Eol" msgid "printer-state-reasons.other" msgstr "Other" msgid "printer-state-reasons.output-area-almost-full" msgstr "Output Area Almost Full" msgid "printer-state-reasons.output-area-full" msgstr "Output Area Full" msgid "printer-state-reasons.output-mailbox-select-failure" msgstr "Output Mailbox Select Failure" msgid "printer-state-reasons.output-tray-missing" msgstr "Output Tray Missing" msgid "printer-state-reasons.paused" msgstr "Paused" msgid "printer-state-reasons.perforater-added" msgstr "Perforater Added" msgid "printer-state-reasons.perforater-almost-empty" msgstr "Perforater Almost Empty" msgid "printer-state-reasons.perforater-almost-full" msgstr "Perforater Almost Full" msgid "printer-state-reasons.perforater-at-limit" msgstr "Perforater At Limit" msgid "printer-state-reasons.perforater-closed" msgstr "Perforater Closed" msgid "printer-state-reasons.perforater-configuration-change" msgstr "Perforater Configuration Change" msgid "printer-state-reasons.perforater-cover-closed" msgstr "Perforater Cover Closed" msgid "printer-state-reasons.perforater-cover-open" msgstr "Perforater Cover Open" msgid "printer-state-reasons.perforater-empty" msgstr "Perforater Empty" msgid "printer-state-reasons.perforater-full" msgstr "Perforater Full" msgid "printer-state-reasons.perforater-interlock-closed" msgstr "Perforater Interlock Closed" msgid "printer-state-reasons.perforater-interlock-open" msgstr "Perforater Interlock Open" msgid "printer-state-reasons.perforater-jam" msgstr "Perforater Jam" msgid "printer-state-reasons.perforater-life-almost-over" msgstr "Perforater Life Almost Over" msgid "printer-state-reasons.perforater-life-over" msgstr "Perforater Life Over" msgid "printer-state-reasons.perforater-memory-exhausted" msgstr "Perforater Memory Exhausted" msgid "printer-state-reasons.perforater-missing" msgstr "Perforater Missing" msgid "printer-state-reasons.perforater-motor-failure" msgstr "Perforater Motor Failure" msgid "printer-state-reasons.perforater-near-limit" msgstr "Perforater Near Limit" msgid "printer-state-reasons.perforater-offline" msgstr "Perforater Offline" msgid "printer-state-reasons.perforater-opened" msgstr "Perforater Opened" msgid "printer-state-reasons.perforater-over-temperature" msgstr "Perforater Over Temperature" msgid "printer-state-reasons.perforater-power-saver" msgstr "Perforater Power Saver" msgid "printer-state-reasons.perforater-recoverable-failure" msgstr "Perforater Recoverable Failure" msgid "printer-state-reasons.perforater-recoverable-storage" msgstr "Perforater Recoverable Storage" msgid "printer-state-reasons.perforater-removed" msgstr "Perforater Removed" msgid "printer-state-reasons.perforater-resource-added" msgstr "Perforater Resource Added" msgid "printer-state-reasons.perforater-resource-removed" msgstr "Perforater Resource Removed" msgid "printer-state-reasons.perforater-thermistor-failure" msgstr "Perforater Thermistor Failure" msgid "printer-state-reasons.perforater-timing-failure" msgstr "Perforater Timing Failure" msgid "printer-state-reasons.perforater-turned-off" msgstr "Perforater Turned Off" msgid "printer-state-reasons.perforater-turned-on" msgstr "Perforater Turned On" msgid "printer-state-reasons.perforater-under-temperature" msgstr "Perforater Under Temperature" msgid "printer-state-reasons.perforater-unrecoverable-failure" msgstr "Perforater Unrecoverable Failure" msgid "printer-state-reasons.perforater-unrecoverable-storage-error" msgstr "Perforater Unrecoverable Storage Error" msgid "printer-state-reasons.perforater-warming-up" msgstr "Perforater Warming Up" msgid "printer-state-reasons.power-down" msgstr "Power Down" msgid "printer-state-reasons.power-up" msgstr "Power Up" msgid "printer-state-reasons.printer-manual-reset" msgstr "Printer Manual Reset" msgid "printer-state-reasons.printer-nms-reset" msgstr "Printer Nms Reset" msgid "printer-state-reasons.printer-ready-to-print" msgstr "Printer Ready To Print" msgid "printer-state-reasons.puncher-added" msgstr "Puncher Added" msgid "printer-state-reasons.puncher-almost-empty" msgstr "Puncher Almost Empty" msgid "printer-state-reasons.puncher-almost-full" msgstr "Puncher Almost Full" msgid "printer-state-reasons.puncher-at-limit" msgstr "Puncher At Limit" msgid "printer-state-reasons.puncher-closed" msgstr "Puncher Closed" msgid "printer-state-reasons.puncher-configuration-change" msgstr "Puncher Configuration Change" msgid "printer-state-reasons.puncher-cover-closed" msgstr "Puncher Cover Closed" msgid "printer-state-reasons.puncher-cover-open" msgstr "Puncher Cover Open" msgid "printer-state-reasons.puncher-empty" msgstr "Puncher Empty" msgid "printer-state-reasons.puncher-full" msgstr "Puncher Full" msgid "printer-state-reasons.puncher-interlock-closed" msgstr "Puncher Interlock Closed" msgid "printer-state-reasons.puncher-interlock-open" msgstr "Puncher Interlock Open" msgid "printer-state-reasons.puncher-jam" msgstr "Puncher Jam" msgid "printer-state-reasons.puncher-life-almost-over" msgstr "Puncher Life Almost Over" msgid "printer-state-reasons.puncher-life-over" msgstr "Puncher Life Over" msgid "printer-state-reasons.puncher-memory-exhausted" msgstr "Puncher Memory Exhausted" msgid "printer-state-reasons.puncher-missing" msgstr "Puncher Missing" msgid "printer-state-reasons.puncher-motor-failure" msgstr "Puncher Motor Failure" msgid "printer-state-reasons.puncher-near-limit" msgstr "Puncher Near Limit" msgid "printer-state-reasons.puncher-offline" msgstr "Puncher Offline" msgid "printer-state-reasons.puncher-opened" msgstr "Puncher Opened" msgid "printer-state-reasons.puncher-over-temperature" msgstr "Puncher Over Temperature" msgid "printer-state-reasons.puncher-power-saver" msgstr "Puncher Power Saver" msgid "printer-state-reasons.puncher-recoverable-failure" msgstr "Puncher Recoverable Failure" msgid "printer-state-reasons.puncher-recoverable-storage" msgstr "Puncher Recoverable Storage" msgid "printer-state-reasons.puncher-removed" msgstr "Puncher Removed" msgid "printer-state-reasons.puncher-resource-added" msgstr "Puncher Resource Added" msgid "printer-state-reasons.puncher-resource-removed" msgstr "Puncher Resource Removed" msgid "printer-state-reasons.puncher-thermistor-failure" msgstr "Puncher Thermistor Failure" msgid "printer-state-reasons.puncher-timing-failure" msgstr "Puncher Timing Failure" msgid "printer-state-reasons.puncher-turned-off" msgstr "Puncher Turned Off" msgid "printer-state-reasons.puncher-turned-on" msgstr "Puncher Turned On" msgid "printer-state-reasons.puncher-under-temperature" msgstr "Puncher Under Temperature" msgid "printer-state-reasons.puncher-unrecoverable-failure" msgstr "Puncher Unrecoverable Failure" msgid "printer-state-reasons.puncher-unrecoverable-storage-error" msgstr "Puncher Unrecoverable Storage Error" msgid "printer-state-reasons.puncher-warming-up" msgstr "Puncher Warming Up" msgid "printer-state-reasons.separation-cutter-added" msgstr "Separation Cutter Added" msgid "printer-state-reasons.separation-cutter-almost-empty" msgstr "Separation Cutter Almost Empty" msgid "printer-state-reasons.separation-cutter-almost-full" msgstr "Separation Cutter Almost Full" msgid "printer-state-reasons.separation-cutter-at-limit" msgstr "Separation Cutter At Limit" msgid "printer-state-reasons.separation-cutter-closed" msgstr "Separation Cutter Closed" msgid "printer-state-reasons.separation-cutter-configuration-change" msgstr "Separation Cutter Configuration Change" msgid "printer-state-reasons.separation-cutter-cover-closed" msgstr "Separation Cutter Cover Closed" msgid "printer-state-reasons.separation-cutter-cover-open" msgstr "Separation Cutter Cover Open" msgid "printer-state-reasons.separation-cutter-empty" msgstr "Separation Cutter Empty" msgid "printer-state-reasons.separation-cutter-full" msgstr "Separation Cutter Full" msgid "printer-state-reasons.separation-cutter-interlock-closed" msgstr "Separation Cutter Interlock Closed" msgid "printer-state-reasons.separation-cutter-interlock-open" msgstr "Separation Cutter Interlock Open" msgid "printer-state-reasons.separation-cutter-jam" msgstr "Separation Cutter Jam" msgid "printer-state-reasons.separation-cutter-life-almost-over" msgstr "Separation Cutter Life Almost Over" msgid "printer-state-reasons.separation-cutter-life-over" msgstr "Separation Cutter Life Over" msgid "printer-state-reasons.separation-cutter-memory-exhausted" msgstr "Separation Cutter Memory Exhausted" msgid "printer-state-reasons.separation-cutter-missing" msgstr "Separation Cutter Missing" msgid "printer-state-reasons.separation-cutter-motor-failure" msgstr "Separation Cutter Motor Failure" msgid "printer-state-reasons.separation-cutter-near-limit" msgstr "Separation Cutter Near Limit" msgid "printer-state-reasons.separation-cutter-offline" msgstr "Separation Cutter Offline" msgid "printer-state-reasons.separation-cutter-opened" msgstr "Separation Cutter Opened" msgid "printer-state-reasons.separation-cutter-over-temperature" msgstr "Separation Cutter Over Temperature" msgid "printer-state-reasons.separation-cutter-power-saver" msgstr "Separation Cutter Power Saver" msgid "printer-state-reasons.separation-cutter-recoverable-failure" msgstr "Separation Cutter Recoverable Failure" msgid "printer-state-reasons.separation-cutter-recoverable-storage" msgstr "Separation Cutter Recoverable Storage" msgid "printer-state-reasons.separation-cutter-removed" msgstr "Separation Cutter Removed" msgid "printer-state-reasons.separation-cutter-resource-added" msgstr "Separation Cutter Resource Added" msgid "printer-state-reasons.separation-cutter-resource-removed" msgstr "Separation Cutter Resource Removed" msgid "printer-state-reasons.separation-cutter-thermistor-failure" msgstr "Separation Cutter Thermistor Failure" msgid "printer-state-reasons.separation-cutter-timing-failure" msgstr "Separation Cutter Timing Failure" msgid "printer-state-reasons.separation-cutter-turned-off" msgstr "Separation Cutter Turned Off" msgid "printer-state-reasons.separation-cutter-turned-on" msgstr "Separation Cutter Turned On" msgid "printer-state-reasons.separation-cutter-under-temperature" msgstr "Separation Cutter Under Temperature" msgid "printer-state-reasons.separation-cutter-unrecoverable-failure" msgstr "Separation Cutter Unrecoverable Failure" msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error" msgstr "Separation Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.separation-cutter-warming-up" msgstr "Separation Cutter Warming Up" msgid "printer-state-reasons.sheet-rotator-added" msgstr "Sheet Rotator Added" msgid "printer-state-reasons.sheet-rotator-almost-empty" msgstr "Sheet Rotator Almost Empty" msgid "printer-state-reasons.sheet-rotator-almost-full" msgstr "Sheet Rotator Almost Full" msgid "printer-state-reasons.sheet-rotator-at-limit" msgstr "Sheet Rotator At Limit" msgid "printer-state-reasons.sheet-rotator-closed" msgstr "Sheet Rotator Closed" msgid "printer-state-reasons.sheet-rotator-configuration-change" msgstr "Sheet Rotator Configuration Change" msgid "printer-state-reasons.sheet-rotator-cover-closed" msgstr "Sheet Rotator Cover Closed" msgid "printer-state-reasons.sheet-rotator-cover-open" msgstr "Sheet Rotator Cover Open" msgid "printer-state-reasons.sheet-rotator-empty" msgstr "Sheet Rotator Empty" msgid "printer-state-reasons.sheet-rotator-full" msgstr "Sheet Rotator Full" msgid "printer-state-reasons.sheet-rotator-interlock-closed" msgstr "Sheet Rotator Interlock Closed" msgid "printer-state-reasons.sheet-rotator-interlock-open" msgstr "Sheet Rotator Interlock Open" msgid "printer-state-reasons.sheet-rotator-jam" msgstr "Sheet Rotator Jam" msgid "printer-state-reasons.sheet-rotator-life-almost-over" msgstr "Sheet Rotator Life Almost Over" msgid "printer-state-reasons.sheet-rotator-life-over" msgstr "Sheet Rotator Life Over" msgid "printer-state-reasons.sheet-rotator-memory-exhausted" msgstr "Sheet Rotator Memory Exhausted" msgid "printer-state-reasons.sheet-rotator-missing" msgstr "Sheet Rotator Missing" msgid "printer-state-reasons.sheet-rotator-motor-failure" msgstr "Sheet Rotator Motor Failure" msgid "printer-state-reasons.sheet-rotator-near-limit" msgstr "Sheet Rotator Near Limit" msgid "printer-state-reasons.sheet-rotator-offline" msgstr "Sheet Rotator Offline" msgid "printer-state-reasons.sheet-rotator-opened" msgstr "Sheet Rotator Opened" msgid "printer-state-reasons.sheet-rotator-over-temperature" msgstr "Sheet Rotator Over Temperature" msgid "printer-state-reasons.sheet-rotator-power-saver" msgstr "Sheet Rotator Power Saver" msgid "printer-state-reasons.sheet-rotator-recoverable-failure" msgstr "Sheet Rotator Recoverable Failure" msgid "printer-state-reasons.sheet-rotator-recoverable-storage" msgstr "Sheet Rotator Recoverable Storage" msgid "printer-state-reasons.sheet-rotator-removed" msgstr "Sheet Rotator Removed" msgid "printer-state-reasons.sheet-rotator-resource-added" msgstr "Sheet Rotator Resource Added" msgid "printer-state-reasons.sheet-rotator-resource-removed" msgstr "Sheet Rotator Resource Removed" msgid "printer-state-reasons.sheet-rotator-thermistor-failure" msgstr "Sheet Rotator Thermistor Failure" msgid "printer-state-reasons.sheet-rotator-timing-failure" msgstr "Sheet Rotator Timing Failure" msgid "printer-state-reasons.sheet-rotator-turned-off" msgstr "Sheet Rotator Turned Off" msgid "printer-state-reasons.sheet-rotator-turned-on" msgstr "Sheet Rotator Turned On" msgid "printer-state-reasons.sheet-rotator-under-temperature" msgstr "Sheet Rotator Under Temperature" msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure" msgstr "Sheet Rotator Unrecoverable Failure" msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" msgstr "Sheet Rotator Unrecoverable Storage Error" msgid "printer-state-reasons.sheet-rotator-warming-up" msgstr "Sheet Rotator Warming Up" msgid "printer-state-reasons.shutdown" msgstr "Shutdown" msgid "printer-state-reasons.slitter-added" msgstr "Slitter Added" msgid "printer-state-reasons.slitter-almost-empty" msgstr "Slitter Almost Empty" msgid "printer-state-reasons.slitter-almost-full" msgstr "Slitter Almost Full" msgid "printer-state-reasons.slitter-at-limit" msgstr "Slitter At Limit" msgid "printer-state-reasons.slitter-closed" msgstr "Slitter Closed" msgid "printer-state-reasons.slitter-configuration-change" msgstr "Slitter Configuration Change" msgid "printer-state-reasons.slitter-cover-closed" msgstr "Slitter Cover Closed" msgid "printer-state-reasons.slitter-cover-open" msgstr "Slitter Cover Open" msgid "printer-state-reasons.slitter-empty" msgstr "Slitter Empty" msgid "printer-state-reasons.slitter-full" msgstr "Slitter Full" msgid "printer-state-reasons.slitter-interlock-closed" msgstr "Slitter Interlock Closed" msgid "printer-state-reasons.slitter-interlock-open" msgstr "Slitter Interlock Open" msgid "printer-state-reasons.slitter-jam" msgstr "Slitter Jam" msgid "printer-state-reasons.slitter-life-almost-over" msgstr "Slitter Life Almost Over" msgid "printer-state-reasons.slitter-life-over" msgstr "Slitter Life Over" msgid "printer-state-reasons.slitter-memory-exhausted" msgstr "Slitter Memory Exhausted" msgid "printer-state-reasons.slitter-missing" msgstr "Slitter Missing" msgid "printer-state-reasons.slitter-motor-failure" msgstr "Slitter Motor Failure" msgid "printer-state-reasons.slitter-near-limit" msgstr "Slitter Near Limit" msgid "printer-state-reasons.slitter-offline" msgstr "Slitter Offline" msgid "printer-state-reasons.slitter-opened" msgstr "Slitter Opened" msgid "printer-state-reasons.slitter-over-temperature" msgstr "Slitter Over Temperature" msgid "printer-state-reasons.slitter-power-saver" msgstr "Slitter Power Saver" msgid "printer-state-reasons.slitter-recoverable-failure" msgstr "Slitter Recoverable Failure" msgid "printer-state-reasons.slitter-recoverable-storage" msgstr "Slitter Recoverable Storage" msgid "printer-state-reasons.slitter-removed" msgstr "Slitter Removed" msgid "printer-state-reasons.slitter-resource-added" msgstr "Slitter Resource Added" msgid "printer-state-reasons.slitter-resource-removed" msgstr "Slitter Resource Removed" msgid "printer-state-reasons.slitter-thermistor-failure" msgstr "Slitter Thermistor Failure" msgid "printer-state-reasons.slitter-timing-failure" msgstr "Slitter Timing Failure" msgid "printer-state-reasons.slitter-turned-off" msgstr "Slitter Turned Off" msgid "printer-state-reasons.slitter-turned-on" msgstr "Slitter Turned On" msgid "printer-state-reasons.slitter-under-temperature" msgstr "Slitter Under Temperature" msgid "printer-state-reasons.slitter-unrecoverable-failure" msgstr "Slitter Unrecoverable Failure" msgid "printer-state-reasons.slitter-unrecoverable-storage-error" msgstr "Slitter Unrecoverable Storage Error" msgid "printer-state-reasons.slitter-warming-up" msgstr "Slitter Warming Up" msgid "printer-state-reasons.spool-area-full" msgstr "Spool Area Full" msgid "printer-state-reasons.stacker-added" msgstr "Stacker Added" msgid "printer-state-reasons.stacker-almost-empty" msgstr "Stacker Almost Empty" msgid "printer-state-reasons.stacker-almost-full" msgstr "Stacker Almost Full" msgid "printer-state-reasons.stacker-at-limit" msgstr "Stacker At Limit" msgid "printer-state-reasons.stacker-closed" msgstr "Stacker Closed" msgid "printer-state-reasons.stacker-configuration-change" msgstr "Stacker Configuration Change" msgid "printer-state-reasons.stacker-cover-closed" msgstr "Stacker Cover Closed" msgid "printer-state-reasons.stacker-cover-open" msgstr "Stacker Cover Open" msgid "printer-state-reasons.stacker-empty" msgstr "Stacker Empty" msgid "printer-state-reasons.stacker-full" msgstr "Stacker Full" msgid "printer-state-reasons.stacker-interlock-closed" msgstr "Stacker Interlock Closed" msgid "printer-state-reasons.stacker-interlock-open" msgstr "Stacker Interlock Open" msgid "printer-state-reasons.stacker-jam" msgstr "Stacker Jam" msgid "printer-state-reasons.stacker-life-almost-over" msgstr "Stacker Life Almost Over" msgid "printer-state-reasons.stacker-life-over" msgstr "Stacker Life Over" msgid "printer-state-reasons.stacker-memory-exhausted" msgstr "Stacker Memory Exhausted" msgid "printer-state-reasons.stacker-missing" msgstr "Stacker Missing" msgid "printer-state-reasons.stacker-motor-failure" msgstr "Stacker Motor Failure" msgid "printer-state-reasons.stacker-near-limit" msgstr "Stacker Near Limit" msgid "printer-state-reasons.stacker-offline" msgstr "Stacker Offline" msgid "printer-state-reasons.stacker-opened" msgstr "Stacker Opened" msgid "printer-state-reasons.stacker-over-temperature" msgstr "Stacker Over Temperature" msgid "printer-state-reasons.stacker-power-saver" msgstr "Stacker Power Saver" msgid "printer-state-reasons.stacker-recoverable-failure" msgstr "Stacker Recoverable Failure" msgid "printer-state-reasons.stacker-recoverable-storage" msgstr "Stacker Recoverable Storage" msgid "printer-state-reasons.stacker-removed" msgstr "Stacker Removed" msgid "printer-state-reasons.stacker-resource-added" msgstr "Stacker Resource Added" msgid "printer-state-reasons.stacker-resource-removed" msgstr "Stacker Resource Removed" msgid "printer-state-reasons.stacker-thermistor-failure" msgstr "Stacker Thermistor Failure" msgid "printer-state-reasons.stacker-timing-failure" msgstr "Stacker Timing Failure" msgid "printer-state-reasons.stacker-turned-off" msgstr "Stacker Turned Off" msgid "printer-state-reasons.stacker-turned-on" msgstr "Stacker Turned On" msgid "printer-state-reasons.stacker-under-temperature" msgstr "Stacker Under Temperature" msgid "printer-state-reasons.stacker-unrecoverable-failure" msgstr "Stacker Unrecoverable Failure" msgid "printer-state-reasons.stacker-unrecoverable-storage-error" msgstr "Stacker Unrecoverable Storage Error" msgid "printer-state-reasons.stacker-warming-up" msgstr "Stacker Warming Up" msgid "printer-state-reasons.stapler-added" msgstr "Stapler Added" msgid "printer-state-reasons.stapler-almost-empty" msgstr "Stapler Almost Empty" msgid "printer-state-reasons.stapler-almost-full" msgstr "Stapler Almost Full" msgid "printer-state-reasons.stapler-at-limit" msgstr "Stapler At Limit" msgid "printer-state-reasons.stapler-closed" msgstr "Stapler Closed" msgid "printer-state-reasons.stapler-configuration-change" msgstr "Stapler Configuration Change" msgid "printer-state-reasons.stapler-cover-closed" msgstr "Stapler Cover Closed" msgid "printer-state-reasons.stapler-cover-open" msgstr "Stapler Cover Open" msgid "printer-state-reasons.stapler-empty" msgstr "Stapler Empty" msgid "printer-state-reasons.stapler-full" msgstr "Stapler Full" msgid "printer-state-reasons.stapler-interlock-closed" msgstr "Stapler Interlock Closed" msgid "printer-state-reasons.stapler-interlock-open" msgstr "Stapler Interlock Open" msgid "printer-state-reasons.stapler-jam" msgstr "Stapler Jam" msgid "printer-state-reasons.stapler-life-almost-over" msgstr "Stapler Life Almost Over" msgid "printer-state-reasons.stapler-life-over" msgstr "Stapler Life Over" msgid "printer-state-reasons.stapler-memory-exhausted" msgstr "Stapler Memory Exhausted" msgid "printer-state-reasons.stapler-missing" msgstr "Stapler Missing" msgid "printer-state-reasons.stapler-motor-failure" msgstr "Stapler Motor Failure" msgid "printer-state-reasons.stapler-near-limit" msgstr "Stapler Near Limit" msgid "printer-state-reasons.stapler-offline" msgstr "Stapler Offline" msgid "printer-state-reasons.stapler-opened" msgstr "Stapler Opened" msgid "printer-state-reasons.stapler-over-temperature" msgstr "Stapler Over Temperature" msgid "printer-state-reasons.stapler-power-saver" msgstr "Stapler Power Saver" msgid "printer-state-reasons.stapler-recoverable-failure" msgstr "Stapler Recoverable Failure" msgid "printer-state-reasons.stapler-recoverable-storage" msgstr "Stapler Recoverable Storage" msgid "printer-state-reasons.stapler-removed" msgstr "Stapler Removed" msgid "printer-state-reasons.stapler-resource-added" msgstr "Stapler Resource Added" msgid "printer-state-reasons.stapler-resource-removed" msgstr "Stapler Resource Removed" msgid "printer-state-reasons.stapler-thermistor-failure" msgstr "Stapler Thermistor Failure" msgid "printer-state-reasons.stapler-timing-failure" msgstr "Stapler Timing Failure" msgid "printer-state-reasons.stapler-turned-off" msgstr "Stapler Turned Off" msgid "printer-state-reasons.stapler-turned-on" msgstr "Stapler Turned On" msgid "printer-state-reasons.stapler-under-temperature" msgstr "Stapler Under Temperature" msgid "printer-state-reasons.stapler-unrecoverable-failure" msgstr "Stapler Unrecoverable Failure" msgid "printer-state-reasons.stapler-unrecoverable-storage-error" msgstr "Stapler Unrecoverable Storage Error" msgid "printer-state-reasons.stapler-warming-up" msgstr "Stapler Warming Up" msgid "printer-state-reasons.stitcher-added" msgstr "Stitcher Added" msgid "printer-state-reasons.stitcher-almost-empty" msgstr "Stitcher Almost Empty" msgid "printer-state-reasons.stitcher-almost-full" msgstr "Stitcher Almost Full" msgid "printer-state-reasons.stitcher-at-limit" msgstr "Stitcher At Limit" msgid "printer-state-reasons.stitcher-closed" msgstr "Stitcher Closed" msgid "printer-state-reasons.stitcher-configuration-change" msgstr "Stitcher Configuration Change" msgid "printer-state-reasons.stitcher-cover-closed" msgstr "Stitcher Cover Closed" msgid "printer-state-reasons.stitcher-cover-open" msgstr "Stitcher Cover Open" msgid "printer-state-reasons.stitcher-empty" msgstr "Stitcher Empty" msgid "printer-state-reasons.stitcher-full" msgstr "Stitcher Full" msgid "printer-state-reasons.stitcher-interlock-closed" msgstr "Stitcher Interlock Closed" msgid "printer-state-reasons.stitcher-interlock-open" msgstr "Stitcher Interlock Open" msgid "printer-state-reasons.stitcher-jam" msgstr "Stitcher Jam" msgid "printer-state-reasons.stitcher-life-almost-over" msgstr "Stitcher Life Almost Over" msgid "printer-state-reasons.stitcher-life-over" msgstr "Stitcher Life Over" msgid "printer-state-reasons.stitcher-memory-exhausted" msgstr "Stitcher Memory Exhausted" msgid "printer-state-reasons.stitcher-missing" msgstr "Stitcher Missing" msgid "printer-state-reasons.stitcher-motor-failure" msgstr "Stitcher Motor Failure" msgid "printer-state-reasons.stitcher-near-limit" msgstr "Stitcher Near Limit" msgid "printer-state-reasons.stitcher-offline" msgstr "Stitcher Offline" msgid "printer-state-reasons.stitcher-opened" msgstr "Stitcher Opened" msgid "printer-state-reasons.stitcher-over-temperature" msgstr "Stitcher Over Temperature" msgid "printer-state-reasons.stitcher-power-saver" msgstr "Stitcher Power Saver" msgid "printer-state-reasons.stitcher-recoverable-failure" msgstr "Stitcher Recoverable Failure" msgid "printer-state-reasons.stitcher-recoverable-storage" msgstr "Stitcher Recoverable Storage" msgid "printer-state-reasons.stitcher-removed" msgstr "Stitcher Removed" msgid "printer-state-reasons.stitcher-resource-added" msgstr "Stitcher Resource Added" msgid "printer-state-reasons.stitcher-resource-removed" msgstr "Stitcher Resource Removed" msgid "printer-state-reasons.stitcher-thermistor-failure" msgstr "Stitcher Thermistor Failure" msgid "printer-state-reasons.stitcher-timing-failure" msgstr "Stitcher Timing Failure" msgid "printer-state-reasons.stitcher-turned-off" msgstr "Stitcher Turned Off" msgid "printer-state-reasons.stitcher-turned-on" msgstr "Stitcher Turned On" msgid "printer-state-reasons.stitcher-under-temperature" msgstr "Stitcher Under Temperature" msgid "printer-state-reasons.stitcher-unrecoverable-failure" msgstr "Stitcher Unrecoverable Failure" msgid "printer-state-reasons.stitcher-unrecoverable-storage-error" msgstr "Stitcher Unrecoverable Storage Error" msgid "printer-state-reasons.stitcher-warming-up" msgstr "Stitcher Warming Up" msgid "printer-state-reasons.stopped-partly" msgstr "Stopped Partly" msgid "printer-state-reasons.stopping" msgstr "Stopping" msgid "printer-state-reasons.subunit-added" msgstr "Subunit Added" msgid "printer-state-reasons.subunit-almost-empty" msgstr "Subunit Almost Empty" msgid "printer-state-reasons.subunit-almost-full" msgstr "Subunit Almost Full" msgid "printer-state-reasons.subunit-at-limit" msgstr "Subunit At Limit" msgid "printer-state-reasons.subunit-closed" msgstr "Subunit Closed" msgid "printer-state-reasons.subunit-empty" msgstr "Subunit Empty" msgid "printer-state-reasons.subunit-full" msgstr "Subunit Full" msgid "printer-state-reasons.subunit-life-almost-over" msgstr "Subunit Life Almost Over" msgid "printer-state-reasons.subunit-life-over" msgstr "Subunit Life Over" msgid "printer-state-reasons.subunit-memory-exhausted" msgstr "Subunit Memory Exhausted" msgid "printer-state-reasons.subunit-missing" msgstr "Subunit Missing" msgid "printer-state-reasons.subunit-motor-failure" msgstr "Subunit Motor Failure" msgid "printer-state-reasons.subunit-near-limit" msgstr "Subunit Near Limit" msgid "printer-state-reasons.subunit-offline" msgstr "Subunit Offline" msgid "printer-state-reasons.subunit-opened" msgstr "Subunit Opened" msgid "printer-state-reasons.subunit-over-temperature" msgstr "Subunit Over Temperature" msgid "printer-state-reasons.subunit-power-saver" msgstr "Subunit Power Saver" msgid "printer-state-reasons.subunit-recoverable-failure" msgstr "Subunit Recoverable Failure" msgid "printer-state-reasons.subunit-recoverable-storage" msgstr "Subunit Recoverable Storage" msgid "printer-state-reasons.subunit-removed" msgstr "Subunit Removed" msgid "printer-state-reasons.subunit-resource-added" msgstr "Subunit Resource Added" msgid "printer-state-reasons.subunit-resource-removed" msgstr "Subunit Resource Removed" msgid "printer-state-reasons.subunit-thermistor-failure" msgstr "Subunit Thermistor Failure" msgid "printer-state-reasons.subunit-timing-Failure" msgstr "Subunit Timing Failure" msgid "printer-state-reasons.subunit-turned-off" msgstr "Subunit Turned Off" msgid "printer-state-reasons.subunit-turned-on" msgstr "Subunit Turned On" msgid "printer-state-reasons.subunit-under-temperature" msgstr "Subunit Under Temperature" msgid "printer-state-reasons.subunit-unrecoverable-failure" msgstr "Subunit Unrecoverable Failure" msgid "printer-state-reasons.subunit-unrecoverable-storage" msgstr "Subunit Unrecoverable Storage" msgid "printer-state-reasons.subunit-warming-up" msgstr "Subunit Warming Up" msgid "printer-state-reasons.timed-out" msgstr "Timed Out" msgid "printer-state-reasons.toner-empty" msgstr "Toner Empty" msgid "printer-state-reasons.toner-low" msgstr "Toner Low" msgid "printer-state-reasons.trimmer-added" msgstr "Trimmer Added" msgid "printer-state-reasons.trimmer-almost-empty" msgstr "Trimmer Almost Empty" msgid "printer-state-reasons.trimmer-almost-full" msgstr "Trimmer Almost Full" msgid "printer-state-reasons.trimmer-at-limit" msgstr "Trimmer At Limit" msgid "printer-state-reasons.trimmer-closed" msgstr "Trimmer Closed" msgid "printer-state-reasons.trimmer-configuration-change" msgstr "Trimmer Configuration Change" msgid "printer-state-reasons.trimmer-cover-closed" msgstr "Trimmer Cover Closed" msgid "printer-state-reasons.trimmer-cover-open" msgstr "Trimmer Cover Open" msgid "printer-state-reasons.trimmer-empty" msgstr "Trimmer Empty" msgid "printer-state-reasons.trimmer-full" msgstr "Trimmer Full" msgid "printer-state-reasons.trimmer-interlock-closed" msgstr "Trimmer Interlock Closed" msgid "printer-state-reasons.trimmer-interlock-open" msgstr "Trimmer Interlock Open" msgid "printer-state-reasons.trimmer-jam" msgstr "Trimmer Jam" msgid "printer-state-reasons.trimmer-life-almost-over" msgstr "Trimmer Life Almost Over" msgid "printer-state-reasons.trimmer-life-over" msgstr "Trimmer Life Over" msgid "printer-state-reasons.trimmer-memory-exhausted" msgstr "Trimmer Memory Exhausted" msgid "printer-state-reasons.trimmer-missing" msgstr "Trimmer Missing" msgid "printer-state-reasons.trimmer-motor-failure" msgstr "Trimmer Motor Failure" msgid "printer-state-reasons.trimmer-near-limit" msgstr "Trimmer Near Limit" msgid "printer-state-reasons.trimmer-offline" msgstr "Trimmer Offline" msgid "printer-state-reasons.trimmer-opened" msgstr "Trimmer Opened" msgid "printer-state-reasons.trimmer-over-temperature" msgstr "Trimmer Over Temperature" msgid "printer-state-reasons.trimmer-power-saver" msgstr "Trimmer Power Saver" msgid "printer-state-reasons.trimmer-recoverable-failure" msgstr "Trimmer Recoverable Failure" msgid "printer-state-reasons.trimmer-recoverable-storage" msgstr "Trimmer Recoverable Storage" msgid "printer-state-reasons.trimmer-removed" msgstr "Trimmer Removed" msgid "printer-state-reasons.trimmer-resource-added" msgstr "Trimmer Resource Added" msgid "printer-state-reasons.trimmer-resource-removed" msgstr "Trimmer Resource Removed" msgid "printer-state-reasons.trimmer-thermistor-failure" msgstr "Trimmer Thermistor Failure" msgid "printer-state-reasons.trimmer-timing-failure" msgstr "Trimmer Timing Failure" msgid "printer-state-reasons.trimmer-turned-off" msgstr "Trimmer Turned Off" msgid "printer-state-reasons.trimmer-turned-on" msgstr "Trimmer Turned On" msgid "printer-state-reasons.trimmer-under-temperature" msgstr "Trimmer Under Temperature" msgid "printer-state-reasons.trimmer-unrecoverable-failure" msgstr "Trimmer Unrecoverable Failure" msgid "printer-state-reasons.trimmer-unrecoverable-storage-error" msgstr "Trimmer Unrecoverable Storage Error" msgid "printer-state-reasons.trimmer-warming-up" msgstr "Trimmer Warming Up" msgid "printer-state-reasons.unknown" msgstr "Unknown" msgid "printer-state-reasons.wrapper-added" msgstr "Wrapper Added" msgid "printer-state-reasons.wrapper-almost-empty" msgstr "Wrapper Almost Empty" msgid "printer-state-reasons.wrapper-almost-full" msgstr "Wrapper Almost Full" msgid "printer-state-reasons.wrapper-at-limit" msgstr "Wrapper At Limit" msgid "printer-state-reasons.wrapper-closed" msgstr "Wrapper Closed" msgid "printer-state-reasons.wrapper-configuration-change" msgstr "Wrapper Configuration Change" msgid "printer-state-reasons.wrapper-cover-closed" msgstr "Wrapper Cover Closed" msgid "printer-state-reasons.wrapper-cover-open" msgstr "Wrapper Cover Open" msgid "printer-state-reasons.wrapper-empty" msgstr "Wrapper Empty" msgid "printer-state-reasons.wrapper-full" msgstr "Wrapper Full" msgid "printer-state-reasons.wrapper-interlock-closed" msgstr "Wrapper Interlock Closed" msgid "printer-state-reasons.wrapper-interlock-open" msgstr "Wrapper Interlock Open" msgid "printer-state-reasons.wrapper-jam" msgstr "Wrapper Jam" msgid "printer-state-reasons.wrapper-life-almost-over" msgstr "Wrapper Life Almost Over" msgid "printer-state-reasons.wrapper-life-over" msgstr "Wrapper Life Over" msgid "printer-state-reasons.wrapper-memory-exhausted" msgstr "Wrapper Memory Exhausted" msgid "printer-state-reasons.wrapper-missing" msgstr "Wrapper Missing" msgid "printer-state-reasons.wrapper-motor-failure" msgstr "Wrapper Motor Failure" msgid "printer-state-reasons.wrapper-near-limit" msgstr "Wrapper Near Limit" msgid "printer-state-reasons.wrapper-offline" msgstr "Wrapper Offline" msgid "printer-state-reasons.wrapper-opened" msgstr "Wrapper Opened" msgid "printer-state-reasons.wrapper-over-temperature" msgstr "Wrapper Over Temperature" msgid "printer-state-reasons.wrapper-power-saver" msgstr "Wrapper Power Saver" msgid "printer-state-reasons.wrapper-recoverable-failure" msgstr "Wrapper Recoverable Failure" msgid "printer-state-reasons.wrapper-recoverable-storage" msgstr "Wrapper Recoverable Storage" msgid "printer-state-reasons.wrapper-removed" msgstr "Wrapper Removed" msgid "printer-state-reasons.wrapper-resource-added" msgstr "Wrapper Resource Added" msgid "printer-state-reasons.wrapper-resource-removed" msgstr "Wrapper Resource Removed" msgid "printer-state-reasons.wrapper-thermistor-failure" msgstr "Wrapper Thermistor Failure" msgid "printer-state-reasons.wrapper-timing-failure" msgstr "Wrapper Timing Failure" msgid "printer-state-reasons.wrapper-turned-off" msgstr "Wrapper Turned Off" msgid "printer-state-reasons.wrapper-turned-on" msgstr "Wrapper Turned On" msgid "printer-state-reasons.wrapper-under-temperature" msgstr "Wrapper Under Temperature" msgid "printer-state-reasons.wrapper-unrecoverable-failure" msgstr "Wrapper Unrecoverable Failure" msgid "printer-state-reasons.wrapper-unrecoverable-storage-error" msgstr "Wrapper Unrecoverable Storage Error" msgid "printer-state-reasons.wrapper-warming-up" msgstr "Wrapper Warming Up" msgid "printer-state.3" msgstr "Idle" msgid "printer-state.4" msgstr "Processing" msgid "printer-state.5" msgstr "Stopped" msgid "printer-up-time" msgstr "Printer Uptime" msgid "processing" msgstr "processando" msgid "proof-print" msgstr "Proof Print" msgid "proof-print-copies" msgstr "Proof Print Copies" msgid "punching" msgstr "Punching" msgid "punching-locations" msgstr "Punching Locations" msgid "punching-offset" msgstr "Punching Offset" msgid "punching-reference-edge" msgstr "Punching Reference Edge" msgid "punching-reference-edge.bottom" msgstr "Bottom" msgid "punching-reference-edge.left" msgstr "Left" msgid "punching-reference-edge.right" msgstr "Right" msgid "punching-reference-edge.top" msgstr "Top" #, c-format msgid "request id is %s-%d (%d file(s))" msgstr "id de requisição é %s-%d (%d arquivo(s))" msgid "request-id uses indefinite length" msgstr "request-id usa comprimento indefinido" msgid "requested-attributes" msgstr "Requested Attributes" msgid "retry-interval" msgstr "Retry Interval" msgid "retry-time-out" msgstr "Retry Time Out" msgid "save-disposition" msgstr "Save Disposition" msgid "save-disposition.none" msgstr "None" msgid "save-disposition.print-save" msgstr "Print Save" msgid "save-disposition.save-only" msgstr "Save Only" msgid "save-document-format" msgstr "Save Document Format" msgid "save-info" msgstr "Save Info" msgid "save-location" msgstr "Save Location" msgid "save-name" msgstr "Save Name" msgid "scheduler is not running" msgstr "Agendador não está em execução" msgid "scheduler is running" msgstr "Agendador está em execução" msgid "separator-sheets" msgstr "Separator Sheets" msgid "separator-sheets-type" msgstr "Separator Sheets Type" msgid "separator-sheets-type.both-sheets" msgstr "Both Sheets" msgid "separator-sheets-type.end-sheet" msgstr "End Sheet" msgid "separator-sheets-type.none" msgstr "None" msgid "separator-sheets-type.slip-sheets" msgstr "Slip Sheets" msgid "separator-sheets-type.start-sheet" msgstr "Start Sheet" msgid "sheet-collate" msgstr "Collate Copies" msgid "sheet-collate.collated" msgstr "Yes" msgid "sheet-collate.uncollated" msgstr "No" msgid "sides" msgstr "2-Sided Printing" msgid "sides.one-sided" msgstr "Off" msgid "sides.two-sided-long-edge" msgstr "On (Portrait)" msgid "sides.two-sided-short-edge" msgstr "On (Landscape)" #, c-format msgid "stat of %s failed: %s" msgstr "falhou o estado de %s: %s" msgid "status\t\tShow status of daemon and queue." msgstr "status\t\tMostra estado do daemon e da fila." msgid "status-message" msgstr "Status Message" msgid "stitching" msgstr "Staple" msgid "stitching-angle" msgstr "Stitching Angle" msgid "stitching-locations" msgstr "Stitching Locations" msgid "stitching-method" msgstr "Stitching Method" msgid "stitching-method.auto" msgstr "Automatic" msgid "stitching-method.crimp" msgstr "Crimp" msgid "stitching-method.wire" msgstr "Wire" msgid "stitching-offset" msgstr "Stitching Offset" msgid "stitching-reference-edge" msgstr "Stitching Reference Edge" msgid "stitching-reference-edge.bottom" msgstr "Bottom" msgid "stitching-reference-edge.left" msgstr "Left" msgid "stitching-reference-edge.right" msgstr "Right" msgid "stitching-reference-edge.top" msgstr "Top" msgid "stopped" msgstr "parou" msgid "subject" msgstr "Subject" #, c-format msgid "system default destination: %s" msgstr "destino padrão do sistema: %s" #, c-format msgid "system default destination: %s/%s" msgstr "destino padrão do sistema: %s/%s" msgid "t33-subaddress" msgstr "T33 Subaddress" msgid "to-name" msgstr "To Name" msgid "transmission-status" msgstr "Transmission Status" msgid "transmission-status.3" msgstr "Pending" msgid "transmission-status.4" msgstr "Pending Retry" msgid "transmission-status.5" msgstr "Processing" msgid "transmission-status.7" msgstr "Canceled" msgid "transmission-status.8" msgstr "Aborted" msgid "transmission-status.9" msgstr "Completed" msgid "trimming" msgstr "Cut" msgid "trimming-offset" msgstr "Cut Position" msgid "trimming-reference-edge" msgstr "Trimming Reference Edge" msgid "trimming-reference-edge.bottom" msgstr "Bottom" msgid "trimming-reference-edge.left" msgstr "Left" msgid "trimming-reference-edge.right" msgstr "Right" msgid "trimming-reference-edge.top" msgstr "Top" msgid "trimming-type" msgstr "Trimming Type" msgid "trimming-type.draw-line" msgstr "Draw Line" msgid "trimming-type.full" msgstr "Full" msgid "trimming-type.partial" msgstr "Partial" msgid "trimming-type.perforate" msgstr "Perforate" msgid "trimming-type.score" msgstr "Score" msgid "trimming-type.tab" msgstr "Tab" msgid "trimming-when" msgstr "Trimming When" msgid "trimming-when.after-documents" msgstr "After Documents" msgid "trimming-when.after-job" msgstr "After Job" msgid "trimming-when.after-sets" msgstr "After Sets" msgid "trimming-when.after-sheets" msgstr "After Sheets" msgid "unknown" msgstr "desconhecido" msgid "untitled" msgstr "sem título" msgid "variable-bindings uses indefinite length" msgstr "variable-bindings usa comprimento indefinido" msgid "x-accuracy" msgstr "X Accuracy" msgid "x-dimension" msgstr "X Dimension" msgid "x-offset" msgstr "X Offset" msgid "x-origin" msgstr "X Origin" msgid "y-accuracy" msgstr "Y Accuracy" msgid "y-dimension" msgstr "Y Dimension" msgid "y-offset" msgstr "Y Offset" msgid "y-origin" msgstr "Y Origin" msgid "z-accuracy" msgstr "Z Accuracy" msgid "z-dimension" msgstr "Z Dimension" msgid "z-offset" msgstr "Z Offset" #~ msgid "\tInterface: %s/interfaces/%s" #~ msgstr "\tInterface: %s/interfaces/%s" #~ msgid " --lf End lines with LF (UNIX/Linux/OS X)." #~ msgstr " --lf Fim de linhas com LF (UNIX/Linux/OS X)." #~ msgid " -E Test with HTTP Upgrade to TLS." #~ msgstr " -E Testa com HTTP Upgrade para TLS." #~ msgid " -S Test with SSL encryption." #~ msgstr " -S Testa com criptografia SSL." #~ msgid " -a Browse for all services." #~ msgstr " -a Navega por todos os serviços." #~ msgid " -d domain Browse/resolve in specified domain." #~ msgstr " -d domínio Navega/resolve no domínio especificado." #~ msgid " -l Run cupsd from launchd(8)." #~ msgstr " -l Executa cupsd a partir do launchd(8)." #~ msgid " -p program Run specified program for each service." #~ msgstr "" #~ " -p programa Executa o programa especificado para cada " #~ "serviço." #~ msgid " -t type Browse/resolve with specified type." #~ msgstr " -t tipo Navega/resolve com o tipo especificado." #~ msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)." #~ msgstr "\"%s\": Valor inválido de URI \"%s\" - %s (RFC 2911 seção 4.1.5)." #~ msgid "" #~ "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)." #~ msgstr "" #~ "\"%s\": Valor inválido de URI \"%s\" - comprimento inválido %d (RFC 2911 " #~ "seção 4.1.5)." #~ msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": Nome de atributo inválido - comprimento inválido %d (RFC 2911 " #~ "seção 4.1.3)." #~ msgid "" #~ "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": Nome de atributo inválido - caractere inválido (RFC 2911 seção " #~ "4.1.3)." #~ msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)." #~ msgstr "\"%s\": Valor booleano inválido %d (RFC 2911 seção 4.1.11)." #~ msgid "" #~ "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.7)." #~ msgstr "" #~ "\"%s\": Valor de conjunto de caracteres inválido \"%s\" - caracteres " #~ "inválido (RFC 2911 seção 4.1.7)." #~ msgid "" #~ "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)." #~ msgstr "" #~ "\"%s\": Valor de conjunto de caracteres inválido \"%s\" - comprimento " #~ "inválido %d (RFC 2911 seção 4.1.7)." #~ msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Horas de UTC dateTime inválidas %u (RFC 2911 seção 4.1.14)." #~ msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": Minutos de UTC dateTime inválidos %u (RFC 2911 seção 4.1.14)." #~ msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": Sinal de UTC dateTime inválido \"%c\" (RFC 2911 seção 4.1.14)." #~ msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Dia de dateTime inválido %u (RFC 2911 seção 4.1.14)." #~ msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)." #~ msgstr "" #~ "\"%s\": Décimos de segundos de dateTime inválidos %u (RFC 2911 seção " #~ "4.1.14)." #~ msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Horas de dateTime inválidas %u (RFC 2911 seção 4.1.14)." #~ msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Minutos de dateTime inválidos %u (RFC 2911 seção 4.1.14)." #~ msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Mês de dateTime inválido %u (RFC 2911 seção 4.1.14)." #~ msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Segundos de dateTime inválidos %u (RFC 2911 seção 4.1.14)." #~ msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)." #~ msgstr "" #~ "\"%s\": Valor de enum inválido %d - fora da faixa (RFC 2911 seção 4.1.4)." #~ msgid "" #~ "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": Valor de keyword inválido \"%s\" - comprimento inválido %d (RFC " #~ "2911 seção 4.1.3)." #~ msgid "" #~ "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section " #~ "4.1.3)." #~ msgstr "" #~ "\"%s\": Valor de keyword inválido \"%s\" - caractere inválido (RFC 2911 " #~ "seção 4.1.3)." #~ msgid "" #~ "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.9)." #~ msgstr "" #~ "\"%s\": Valor de mimeMediaType inválido \"%s\" - caracteres inválidos " #~ "(RFC 2911 seção 4.1.9)." #~ msgid "" #~ "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section " #~ "4.1.9)." #~ msgstr "" #~ "\"%s\": Valor de mimeMediaType inválido \"%s\" - comprimento inválido %d " #~ "(RFC 2911 seção 4.1.9)." #~ msgid "" #~ "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section " #~ "4.1.2)." #~ msgstr "" #~ "\"%s\": Valor de name inválido \"%s\" - sequência UTF-8 inválida (RFC " #~ "2911 seção 4.1.2)." #~ msgid "" #~ "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)." #~ msgstr "" #~ "\"%s\": Valor de name inválido \"%s\" - comprimento inválido %d (RFC 2911 " #~ "seção 4.1.2)." #~ msgid "" #~ "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 " #~ "section 4.1.8)." #~ msgstr "" #~ "\"%s\": Valor de naturalLanguage inválido \"%s\" - caracteres inválidos " #~ "(RFC 2911 seção 4.1.8)." #~ msgid "" #~ "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 " #~ "section 4.1.8)." #~ msgstr "" #~ "\"%s\": Valor de naturalLanguage inválido \"%s\" - comprimento inválido " #~ "%d (RFC 2911 seção 4.1.8)." #~ msgid "" #~ "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)." #~ msgstr "" #~ "\"%s\": Valor de octetString inválido - comprimento inválido %d (RFC 2911 " #~ "seção 4.1.10)." #~ msgid "" #~ "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC " #~ "2911 section 4.1.13)." #~ msgstr "" #~ "\"%s\": Valor de rangeOfInteger inválido %d-%d - inferior maior do que o " #~ "superior (RFC 2911 seção 4.1.13)." #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section " #~ "4.1.15)." #~ msgstr "" #~ "\"%s\": Valor de resolução inválido %dx%d%s - valor de unidades inválido " #~ "(RFC 2911 seção 4.1.15)." #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " #~ "positive (RFC 2911 section 4.1.15)." #~ msgstr "" #~ "\"%s\": Valor de resolução inválido %dx%d%s - resolução de cross-feed " #~ "deve ser positiva (RFC 2911 seção 4.1.15)." #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive " #~ "(RFC 2911 section 4.1.15)." #~ msgstr "" #~ "\"%s\": Valor de resolução inválido %dx%d%s - resolução de feed deve ser " #~ "positiva (RFC 2911 seção 4.1.15)." #~ msgid "" #~ "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section " #~ "4.1.1)." #~ msgstr "" #~ "\"%s\": Valor de texto inválido \"%s\" - sequência UTF-8 inválida (RFC " #~ "2911 seção 4.1.1)." #~ msgid "" #~ "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)." #~ msgstr "" #~ "\"%s\": Valor de texto inválido \"%s\" - comprimento inválido %d (RFC " #~ "2911 seção 4.1.1)." #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.6)." #~ msgstr "" #~ "\"%s\": Valor de uriScheme inválido \"%s\" - caracteres inválidos (RFC " #~ "2911 seção 4.1.6)." #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section " #~ "4.1.6)." #~ msgstr "" #~ "\"%s\": Valor de uriScheme inválido \"%s\" - comprimento inválido %d (RFC " #~ "2911 seção 4.1.6)." #~ msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes" #~ msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes" #~ msgid "%g x %g" #~ msgstr "%g x %g" #~ msgid "720dpi" #~ msgstr "720dpi" #~ msgid "Bad printer URI." #~ msgstr "URI de impressora inválido." #~ msgid "Enter old password:" #~ msgstr "Digite a senha antiga:" #~ msgid "Enter password again:" #~ msgstr "Digite sua senha novamente:" #~ msgid "Enter password:" #~ msgstr "Digite a senha:" #~ msgid "Envelope #10 " #~ msgstr "Envelope #10 " #~ msgid "Envelope PRC1 " #~ msgstr "Envelope PRC1 " #~ msgid "FanFold German" #~ msgstr "FanFold German" #~ msgid "FanFold Legal German" #~ msgstr "FanFold Legal German" #~ msgid "Fanfold US" #~ msgstr "Fanfold US" #~ msgid "File Folder " #~ msgstr "Pasta do arquivo " #~ msgid "Looking for printer..." #~ msgstr "Procurando por impressora..." #~ msgid "New Stylus Color Series" #~ msgstr "Nova Stylus Color Séries" #~ msgid "New Stylus Photo Series" #~ msgstr "Nova Stylus Photos Séries" #~ msgid "Output for printer %s is sent to %s" #~ msgstr "Saída da impressora %s é enviada para %s" #~ msgid "Output for printer %s is sent to remote printer %s on %s" #~ msgstr "Saída da impressora %s é enviada para a impressora remota %s em %s" #~ msgid "Output for printer %s/%s is sent to %s" #~ msgstr "Saída da impressora %s/%s é enviada para %s" #~ msgid "Output for printer %s/%s is sent to remote printer %s on %s" #~ msgstr "Saída da impressora %s/%s é enviada para impressora remota %s em %s" #~ msgid "Postcard Double " #~ msgstr "Postal duplo " #~ msgid "Printing page %d, %d%% complete." #~ msgstr "Imprimindo página %d, %d%% completo." #~ msgid "Purge Jobs" #~ msgstr "Apagar trabalhos" #~ msgid "" #~ "Rank Owner Pri Job Files Total Size" #~ msgstr "" #~ "Ordem Dono Pri Trab Arquivos Tamanho " #~ "total" #~ msgid "Stylus Color Series" #~ msgstr "Stylus Color Séries" #~ msgid "Stylus Photo Series" #~ msgstr "Stylus Photo Séries" #~ msgid "" #~ "The '%s' Job Description attribute cannot be supplied in a job creation " #~ "request." #~ msgstr "" #~ "O atributo Job Description \"%s\" não pode ser fornecido em uma " #~ "requisição de criação de trabalho." #~ msgid "The output bin is almost full." #~ msgstr "O tabuleiro de saída está quase completo." #~ msgid "The output bin is full." #~ msgstr "O tabuleiro de saída está completo." #~ msgid "The output bin is missing." #~ msgstr "O tabuleiro de saída não foi encontrado." #~ msgid "The paper tray is almost empty." #~ msgstr "O bandeja de papel está quase vazia." #~ msgid "The paper tray is empty." #~ msgstr "O bandeja de papel está vazia." #~ msgid "The paper tray is missing." #~ msgstr "O bandeja de papel não foi encontrada." #~ msgid "The paper tray needs to be filled." #~ msgstr "O bandeja de papel precisa ser recarregada." #~ msgid "The printer is running low on ink." #~ msgstr "A impressora está ficando sem tinta." #~ msgid "The printer is running low on toner." #~ msgstr "A impressora está ficando sem toner." #~ msgid "There is a paper jam." #~ msgstr "Ocorreu um atolamento de papel." #~ msgid "Unable to copy interface script - %s" #~ msgstr "Não foi possível copiar script de interface - %s" #~ msgid "Unable to resolve printer URI." #~ msgstr "Não foi possível resolver URI da impressora." #~ msgid "Usage: cupsfilter [ options ] filename" #~ msgstr "Uso: cupsfilter [ opções ] arquivo" #~ msgid "" #~ "Usage: ippdiscover [options] -a\n" #~ " ippdiscover [options] \"service name\"\n" #~ "\n" #~ "Options:" #~ msgstr "" #~ "Uso: ippdiscover [opções] -a\n" #~ " ippdiscover [opções] \"nome do serviço\"\n" #~ "\n" #~ "Opções:" #~ msgid "Usage: lppasswd [-g groupname]" #~ msgstr "Uso: lppasswd [-g grupo]" #~ msgid "" #~ "Usage: lppasswd [-g groupname] [username]\n" #~ " lppasswd [-g groupname] -a [username]\n" #~ " lppasswd [-g groupname] -x [username]" #~ msgstr "" #~ "Uso: lppasswd [-g grupo] [usuário]\n" #~ " lppasswd [-g grupo] -a [usuário]\n" #~ " lppasswd [-g grupo] -x [usuário]" #~ msgid "" #~ "Your password must be at least 6 characters long, cannot contain your " #~ "username, and must contain at least one letter and number." #~ msgstr "" #~ "Sua senha deve ser pelo menos de 6 caracteres, não pode conter o seu nome " #~ "de usuário, e deve conter pelo menos uma letra e um número." #~ msgid "compression" #~ msgstr "Compression" #~ msgid "compression-accepted" #~ msgstr "Compression Accepted" #~ msgid "compression.compress" #~ msgstr "Compress" #~ msgid "compression.deflate" #~ msgstr "Deflate" #~ msgid "compression.gzip" #~ msgstr "Gzip" #~ msgid "compression.none" #~ msgstr "None" #~ msgid "cupsd: launchd(8) support not compiled in, running in normal mode." #~ msgstr "" #~ "cupsd: Compilado sem suporte a launchd(8) e, portanto, executando no modo " #~ "normal." #~ msgid "destination-accesses" #~ msgstr "Destination Accesses" #~ msgid "destination-statuses" #~ msgstr "Destination Statuses" #~ msgid "destination-uris" #~ msgstr "Destination Uris" #~ msgid "document-access" #~ msgstr "Document Access" #~ msgid "document-data-get-interval" #~ msgstr "Document Data Get Interval" #~ msgid "document-data-wait" #~ msgstr "Document Data Wait" #~ msgid "document-format-accepted" #~ msgstr "Document Format Accepted" #~ msgid "document-message" #~ msgstr "Document Message" #~ msgid "document-metadata" #~ msgstr "Document Metadata" #~ msgid "document-name" #~ msgstr "Document Name" #~ msgid "document-number" #~ msgstr "Document Number" #~ msgid "document-password" #~ msgstr "Document Password" #~ msgid "document-preprocessed" #~ msgstr "Document Preprocessed" #~ msgid "fetch-status-message" #~ msgstr "Fetch Status Message" #~ msgid "identify-actions" #~ msgstr "Identify Actions" #~ msgid "identify-actions.display" #~ msgstr "Display" #~ msgid "identify-actions.flash" #~ msgstr "Flash" #~ msgid "identify-actions.sound" #~ msgstr "Sound" #~ msgid "identify-actions.speak" #~ msgstr "Speak" #~ msgid "ipp-attribute-fidelity" #~ msgstr "Attribute Fidelity" #~ msgid "ipptool: \"-i\" and \"-n\" are incompatible with -X\"." #~ msgstr "ipptool: \"-i\" e \"-n\" são incompatíveis com \"-X\"." #~ msgid "job-authorization-uri" #~ msgstr "Job Authorization URI" #~ msgid "job-destination-spooling-supported.automatic" #~ msgstr "Automatic" #~ msgid "job-destination-spooling-supported.spool" #~ msgstr "Spool" #~ msgid "job-destination-spooling-supported.stream" #~ msgstr "Stream" #~ msgid "job-impressions-col" #~ msgstr "Job Impressions" #~ msgid "job-impressions-estimated" #~ msgstr "Job Impressions Estimated" #~ msgid "job-media-sheets-col" #~ msgstr "Job Media Sheets" #~ msgid "job-pages-per-set" #~ msgstr "Job Pages Per Set" #~ msgid "job-password" #~ msgstr "Job Password" #~ msgid "job-password-repertoire-configured" #~ msgstr "Job Password Repertoire Configured" #~ msgid "job-password-repertoire-supported.iana_us-ascii_any" #~ msgstr "Iana Us Ascii Any" #~ msgid "job-password-repertoire-supported.iana_us-ascii_complex" #~ msgstr "Iana Us Ascii Complex" #~ msgid "job-password-repertoire-supported.iana_us-ascii_digits" #~ msgstr "Iana Us Ascii Digits" #~ msgid "job-password-repertoire-supported.iana_us-ascii_letters" #~ msgstr "Iana Us Ascii Letters" #~ msgid "job-password-repertoire-supported.iana_utf-8_any" #~ msgstr "Iana Utf 8 Any" #~ msgid "job-password-repertoire-supported.iana_utf-8_digits" #~ msgstr "Iana Utf 8 Digits" #~ msgid "job-password-repertoire-supported.iana_utf-8_letters" #~ msgstr "Iana Utf 8 Letters" #~ msgid "job-settable-attributes-supported.job-name" #~ msgstr "Job Name" #~ msgid "job-settable-attributes-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.arithmetic" #~ msgstr "Arithmetic" #~ msgid "jpeg-features-supported.cmyk" #~ msgstr "Cmyk" #~ msgid "jpeg-features-supported.deep" #~ msgstr "Deep" #~ msgid "jpeg-features-supported.hierarchical" #~ msgstr "Hierarchical" #~ msgid "jpeg-features-supported.icc" #~ msgstr "Icc" #~ msgid "jpeg-features-supported.lossless" #~ msgstr "Lossless" #~ msgid "jpeg-features-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.progressive" #~ msgstr "Progressive" #~ msgid "lpadmin: Expected PPD after \"-P\" option." #~ msgstr "lpadmin: Esperava PPD após a opção \"-P\"." #~ msgid "lpadmin: Expected interface after \"-i\" option." #~ msgstr "lpadmin: Esperava interface após a opção \"-i\"." #~ msgid "lpinfo: Unknown argument \"%s\"." #~ msgstr "lpinfo: Argumento desconhecido \"%s\"." #~ msgid "lpinfo: Unknown option \"%c\"." #~ msgstr "lpinfo: Opção desconhecida \"%c\"." #~ msgid "lpinfo: Unknown option \"%s\"." #~ msgstr "lpinfo: Opção desconhecida \"%s\"." #~ msgid "lpmove: Unknown option \"%c\"." #~ msgstr "lpmove: Opção desconhecida \"%c\"." #~ msgid "lppasswd: Only root can add or delete passwords." #~ msgstr "lppasswd: Somente o root pode adicionar ou excluir senhas." #~ msgid "lppasswd: Password file busy." #~ msgstr "lppasswd: Arquivo de senhas ocupado." #~ msgid "lppasswd: Password file not updated." #~ msgstr "lppasswd: Arquivo de senhas não atualizado." #~ msgid "lppasswd: Sorry, password doesn't match." #~ msgstr "lppasswd: Desculpe, senha não corresponde." #~ msgid "lppasswd: Sorry, password rejected." #~ msgstr "lppasswd: Desculpe, senha rejeitada." #~ msgid "lppasswd: Sorry, passwords don't match." #~ msgstr "lppasswd: Desculpe, senhas não correspondem." #~ msgid "lppasswd: Unable to copy password string: %s" #~ msgstr "lppasswd: Não foi possível copiar string de senha: %s" #~ msgid "lppasswd: Unable to open password file: %s" #~ msgstr "lppasswd: Não foi possível abrir arquivo de senhas: %s" #~ msgid "lppasswd: Unable to write to password file: %s" #~ msgstr "lppasswd: Não foi possível gravar no arquivo de senha: %s" #~ msgid "lppasswd: failed to backup old password file: %s" #~ msgstr "lppasswd: Falha ao fazer backup do arquivo de senhas antigo: %s" #~ msgid "lppasswd: failed to rename password file: %s" #~ msgstr "lppasswd: Falha ao renomear arquivo de senhas: %s" #~ msgid "lppasswd: user \"%s\" and group \"%s\" do not exist." #~ msgstr "lppasswd: Usuário \"%s\" e grupo \"%s\" não existem." #~ msgid "material-type.pla-dissolvable" #~ msgstr "Pla Dissolvable" #~ msgid "media.om_large-photo_200x300mm" #~ msgstr "200 x 300mm" #~ msgid "notify-subscribed-event" #~ msgstr "Notify Event" #~ msgid "operations-supported.10" #~ msgstr "Get-Jobs" #~ msgid "operations-supported.11" #~ msgstr "Get-Printer-Attributes" #~ msgid "operations-supported.12" #~ msgstr "Hold-Job" #~ msgid "operations-supported.13" #~ msgstr "Release-Job" #~ msgid "operations-supported.14" #~ msgstr "Restart-Job" #~ msgid "operations-supported.16" #~ msgstr "Pause-Printer" #~ msgid "operations-supported.17" #~ msgstr "Resume-Printer" #~ msgid "operations-supported.18" #~ msgstr "Purge-Jobs" #~ msgid "operations-supported.19" #~ msgstr "Set-Printer-Attributes" #~ msgid "operations-supported.2" #~ msgstr "Print-Job" #~ msgid "operations-supported.20" #~ msgstr "Set-Job-Attributes" #~ msgid "operations-supported.21" #~ msgstr "Get-Printer-Supported-Values" #~ msgid "operations-supported.22" #~ msgstr "Create-Printer-Subscriptions" #~ msgid "operations-supported.23" #~ msgstr "Create-Job-Subscriptions" #~ msgid "operations-supported.24" #~ msgstr "Get-Subscription-Attributes" #~ msgid "operations-supported.25" #~ msgstr "Get-Subscriptions" #~ msgid "operations-supported.26" #~ msgstr "Renew-Subscription" #~ msgid "operations-supported.27" #~ msgstr "Cancel-Subscription" #~ msgid "operations-supported.28" #~ msgstr "Get-Notifications" #~ msgid "operations-supported.3" #~ msgstr "Print-URI" #~ msgid "operations-supported.34" #~ msgstr "Enable-Printer" #~ msgid "operations-supported.35" #~ msgstr "Disable-Printer" #~ msgid "operations-supported.36" #~ msgstr "Pause-Printer-After-Current-Job" #~ msgid "operations-supported.37" #~ msgstr "Hold-New-Jobs" #~ msgid "operations-supported.38" #~ msgstr "Release-Held-New-Jobs" #~ msgid "operations-supported.39" #~ msgstr "Deactivate-Printer" #~ msgid "operations-supported.4" #~ msgstr "Validate-Job" #~ msgid "operations-supported.40" #~ msgstr "Activate-Printer" #~ msgid "operations-supported.41" #~ msgstr "Restart-Printer" #~ msgid "operations-supported.42" #~ msgstr "Shutdown-Printer" #~ msgid "operations-supported.43" #~ msgstr "Startup-Printer" #~ msgid "operations-supported.44" #~ msgstr "Reprocess-Job" #~ msgid "operations-supported.45" #~ msgstr "Cancel-Current-Job" #~ msgid "operations-supported.46" #~ msgstr "Suspend-Current-Job" #~ msgid "operations-supported.47" #~ msgstr "Resume-Job" #~ msgid "operations-supported.48" #~ msgstr "Promote-Job" #~ msgid "operations-supported.49" #~ msgstr "Schedule-Job-After" #~ msgid "operations-supported.5" #~ msgstr "Create-Job" #~ msgid "operations-supported.51" #~ msgstr "Cancel-Document" #~ msgid "operations-supported.52" #~ msgstr "Get-Document-Attributes" #~ msgid "operations-supported.53" #~ msgstr "Get-Documents" #~ msgid "operations-supported.54" #~ msgstr "Delete-Document" #~ msgid "operations-supported.55" #~ msgstr "Set-Document-Attributes" #~ msgid "operations-supported.56" #~ msgstr "Cancel-Jobs" #~ msgid "operations-supported.57" #~ msgstr "Cancel-My-Jobs" #~ msgid "operations-supported.58" #~ msgstr "Resubmit-Job" #~ msgid "operations-supported.59" #~ msgstr "Close-Job" #~ msgid "operations-supported.6" #~ msgstr "Send-Document" #~ msgid "operations-supported.60" #~ msgstr "Identify-Printer" #~ msgid "operations-supported.61" #~ msgstr "Validate-Document" #~ msgid "operations-supported.62" #~ msgstr "Add-Document-Images" #~ msgid "operations-supported.63" #~ msgstr "Acknowledge-Document" #~ msgid "operations-supported.64" #~ msgstr "Acknowledge-Identify-Printer" #~ msgid "operations-supported.65" #~ msgstr "Acknowledge-Job" #~ msgid "operations-supported.66" #~ msgstr "Fetch-Document" #~ msgid "operations-supported.67" #~ msgstr "Fetch-Job" #~ msgid "operations-supported.68" #~ msgstr "Get-Output-Device-Attributes" #~ msgid "operations-supported.69" #~ msgstr "Update-Active-Jobs" #~ msgid "operations-supported.7" #~ msgstr "Send-URI" #~ msgid "operations-supported.70" #~ msgstr "Deregister-Output-Device" #~ msgid "operations-supported.71" #~ msgstr "Update-Document-Status" #~ msgid "operations-supported.72" #~ msgstr "Update-Job-Status" #~ msgid "operations-supported.73" #~ msgstr "Update-Output-Device-Attributes" #~ msgid "operations-supported.74" #~ msgstr "Get-Next-Document-Data" #~ msgid "operations-supported.8" #~ msgstr "Cancel-Job" #~ msgid "operations-supported.9" #~ msgstr "Get-Job-Attributes" #~ msgid "output-device" #~ msgstr "Output Device" #~ msgid "output-device-job-states" #~ msgstr "Output Device Job States" #~ msgid "output-device-uuid" #~ msgstr "Output Device Uuid" #~ msgid "pdf-features-supported.prc" #~ msgstr "Prc" #~ msgid "pdf-features-supported.u3d" #~ msgstr "U3d" #~ msgid "pdf-versions-supported.adobe-1.3" #~ msgstr "Adobe 1.3" #~ msgid "pdf-versions-supported.adobe-1.4" #~ msgstr "Adobe 1.4" #~ msgid "pdf-versions-supported.adobe-1.5" #~ msgstr "Adobe 1.5" #~ msgid "pdf-versions-supported.adobe-1.6" #~ msgstr "Adobe 1.6" #~ msgid "pdf-versions-supported.iso-15930-1_2001" #~ msgstr "ISO 15930-1:2001" #~ msgid "pdf-versions-supported.iso-15930-3_2002" #~ msgstr "ISO 15930-3:2002" #~ msgid "pdf-versions-supported.iso-15930-4_2003" #~ msgstr "ISO 15930-4:2003" #~ msgid "pdf-versions-supported.iso-15930-6_2003" #~ msgstr "ISO 15930-6:2003" #~ msgid "pdf-versions-supported.iso-15930-7_2010" #~ msgstr "ISO 15930-7:2010" #~ msgid "pdf-versions-supported.iso-15930-8_2010" #~ msgstr "ISO 15930-8:2010" #~ msgid "pdf-versions-supported.iso-16612-2_2010" #~ msgstr "ISO 16612-2:2010" #~ msgid "pdf-versions-supported.iso-19005-1_2005" #~ msgstr "ISO 19005-1:2005" #~ msgid "pdf-versions-supported.iso-19005-2_2011" #~ msgstr "ISO 19005-2:2011" #~ msgid "pdf-versions-supported.iso-19005-3_2012" #~ msgstr "ISO 19005-3:2012" #~ msgid "pdf-versions-supported.iso-32000-1_2008" #~ msgstr "ISO 32000-1:2008" #~ msgid "pdf-versions-supported.none" #~ msgstr "None" #~ msgid "pdf-versions-supported.pwg-5102.3" #~ msgstr "PWG 5102.3" #~ msgid "preferred-attributes" #~ msgstr "Preferred Attributes" #~ msgid "printer-mandatory-job-attributes" #~ msgstr "Printer Mandatory Job Attributes" #~ msgid "profile-uri-actual" #~ msgstr "Actual Profile URI" #~ msgid "requested-attributes.all" #~ msgstr "All" #~ msgid "requested-attributes.document-description" #~ msgstr "Document Description" #~ msgid "requested-attributes.document-template" #~ msgstr "Document Template" #~ msgid "requested-attributes.job-actuals" #~ msgstr "Job Actuals" #~ msgid "requested-attributes.job-description" #~ msgstr "Job Description" #~ msgid "requested-attributes.job-template" #~ msgstr "Job Template" #~ msgid "requested-attributes.printer-description" #~ msgstr "Printer Description" #~ msgid "requested-attributes.subscription-description" #~ msgstr "Subscription Description" #~ msgid "requested-attributes.subscription-template" #~ msgstr "Subscription Template" #~ msgid "requesting-user-name" #~ msgstr "Requesting User Name" #~ msgid "requesting-user-uri" #~ msgstr "Requesting User URI" #~ msgid "x-image-position" #~ msgstr "X Image Position" #~ msgid "x-image-position.center" #~ msgstr "Center" #~ msgid "x-image-position.left" #~ msgstr "Left" #~ msgid "x-image-position.none" #~ msgstr "None" #~ msgid "x-image-position.right" #~ msgstr "Right" #~ msgid "x-image-shift" #~ msgstr "X Image Shift" #~ msgid "x-side1-image-shift" #~ msgstr "X Front Side Image Shift" #~ msgid "x-side2-image-shift" #~ msgstr "X Back Side Image Shift" #~ msgid "y-image-position" #~ msgstr "Y Image Position" #~ msgid "y-image-position.bottom" #~ msgstr "Bottom" #~ msgid "y-image-position.center" #~ msgstr "Center" #~ msgid "y-image-position.none" #~ msgstr "None" #~ msgid "y-image-position.top" #~ msgstr "Top" #~ msgid "y-image-shift" #~ msgstr "Y Image Shift" #~ msgid "y-side1-image-shift" #~ msgstr "Y Front Side Image Shift" #~ msgid "y-side2-image-shift" #~ msgstr "Y Back Side Image Shift" cups-2.2.7/locale/cups_ru.po000664 000765 000024 00001257544 13255074424 016454 0ustar00msweetstaff000000 000000 msgid "" msgstr "" "Project-Id-Version: CUPS 2.0\n" "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n" "POT-Creation-Date: 2018-03-19 18:36-0400\n" "PO-Revision-Date: 2015-01-28 12:00-0800\n" "Last-Translator: Aleksandr Proklov\n" "Language-Team: PuppyRus Linux Team\n" "Language: Russian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" msgid "\t\t(all)" msgstr "\t\t(вÑе)" msgid "\t\t(none)" msgstr "\t\t(нет)" #, c-format msgid "\t%d entries" msgstr "\tзапиÑей: %d" #, c-format msgid "\t%s" msgstr "\t%s" msgid "\tAfter fault: continue" msgstr "\tПоÑле ошибки: продолжить" #, c-format msgid "\tAlerts: %s" msgstr "\tПредупреждениÑ: %s" msgid "\tBanner required" msgstr "\tТребуетÑÑ Ð±Ð°Ð½Ð½ÐµÑ€" msgid "\tCharset sets:" msgstr "\tÐабор Ñимволов уÑтанавливает:" msgid "\tConnection: direct" msgstr "\tПодключение: прÑмое" msgid "\tConnection: remote" msgstr "\tПодключение: удаленное" msgid "\tContent types: any" msgstr "\tТип Ñодержимого: любой" msgid "\tDefault page size:" msgstr "\tРазмер Ñтраницы по умолчанию:" msgid "\tDefault pitch:" msgstr "\tÐ’Ñ‹Ñота по умолчанию:" msgid "\tDefault port settings:" msgstr "\tÐаÑтройки порта по умолчанию:" #, c-format msgid "\tDescription: %s" msgstr "\tОпиÑание: %s" msgid "\tForm mounted:" msgstr "\tФорма подключениÑ:" msgid "\tForms allowed:" msgstr "\tРазрешенные формы:" #, c-format msgid "\tInterface: %s.ppd" msgstr "\tИнтерфейÑ: %s.ppd" #, c-format msgid "\tInterface: %s/ppd/%s.ppd" msgstr "\tИнтерфейÑ: %s/ppd/%s.ppd" #, c-format msgid "\tLocation: %s" msgstr "\tРаÑположение: %s" msgid "\tOn fault: no alert" msgstr "\tПри ошибке: не выводить предупреждение" msgid "\tPrinter types: unknown" msgstr "\tТип принтера: неизвеÑтен" #, c-format msgid "\tStatus: %s" msgstr "\tСтатуÑ: %s" msgid "\tUsers allowed:" msgstr "\tРазрешенные пользователи:" msgid "\tUsers denied:" msgstr "\tЗапрещенные пользователи:" msgid "\tdaemon present" msgstr "\tдемон приÑутÑтвует" msgid "\tno entries" msgstr "\tнет запиÑей" #, c-format msgid "\tprinter is on device '%s' speed -1" msgstr "\tпринтер на ÑкороÑти -1 уÑтройÑтва «%s»" msgid "\tprinting is disabled" msgstr "\tпечать отключена" msgid "\tprinting is enabled" msgstr "\tпечать включена" #, c-format msgid "\tqueued for %s" msgstr "\tочередь Ð´Ð»Ñ %s" msgid "\tqueuing is disabled" msgstr "\tочередь отключена" msgid "\tqueuing is enabled" msgstr "\tочередь включена" msgid "\treason unknown" msgstr "\tпричина неизвеÑтна" msgid "" "\n" " DETAILED CONFORMANCE TEST RESULTS" msgstr "" "\n" " ПОДРОБÐЫЕ РЕЗУЛЬТÐТЫ ТЕСТРСООТВЕТСТВИЯ" msgid " Ignore specific warnings." msgstr " Игнорировать конкретные предупреждениÑ" msgid " Issue warnings instead of errors." msgstr " Выдавать Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð²Ð¼ÐµÑто ошибки" msgid " REF: Page 15, section 3.1." msgstr " REF: Стр. 15, раздел 3.1." msgid " REF: Page 15, section 3.2." msgstr " REF: Стр. 15, раздел 3.2." msgid " REF: Page 19, section 3.3." msgstr " REF: Стр. 19, раздел 3.3." msgid " REF: Page 20, section 3.4." msgstr " REF: Стр. 20, раздел 3.4." msgid " REF: Page 27, section 3.5." msgstr " REF: Стр. 27, раздел 3.5." msgid " REF: Page 42, section 5.2." msgstr " REF: Стр. 42, раздел 5.2." msgid " REF: Pages 16-17, section 3.2." msgstr " REF: Стр. 16-17, раздел 3.2." msgid " REF: Pages 42-45, section 5.2." msgstr " REF: Стр. 42-45, раздел 5.2." msgid " REF: Pages 45-46, section 5.2." msgstr " REF: Стр. 45-46, раздел 5.2." msgid " REF: Pages 48-49, section 5.2." msgstr " REF: Стр. 48-49, раздел 5.2." msgid " REF: Pages 52-54, section 5.2." msgstr " REF: Стр. 52-54, раздел 5.2." #, c-format msgid " %-39.39s %.0f bytes" msgstr " %-39.39s %.0f байт" #, c-format msgid " PASS Default%s" msgstr " PASS Default%s" msgid " PASS DefaultImageableArea" msgstr " PASS DefaultImageableArea" msgid " PASS DefaultPaperDimension" msgstr " PASS DefaultPaperDimension" msgid " PASS FileVersion" msgstr " PASS FileVersion" msgid " PASS FormatVersion" msgstr " PASS FormatVersion" msgid " PASS LanguageEncoding" msgstr " PASS LanguageEncoding" msgid " PASS LanguageVersion" msgstr " PASS LanguageVersion" msgid " PASS Manufacturer" msgstr " PASS Manufacturer" msgid " PASS ModelName" msgstr " PASS ModelName" msgid " PASS NickName" msgstr " PASS NickName" msgid " PASS PCFileName" msgstr " PASS PCFileName" msgid " PASS PSVersion" msgstr " PASS PSVersion" msgid " PASS PageRegion" msgstr " PASS PageRegion" msgid " PASS PageSize" msgstr " PASS PageSize" msgid " PASS Product" msgstr " PASS Product" msgid " PASS ShortNickName" msgstr " PASS ShortNickName" #, c-format msgid " WARN %s has no corresponding options." msgstr "\tWARN\t%s не Ñодержит ÑоответÑтвующих параметров." #, c-format msgid "" " WARN %s shares a common prefix with %s\n" " REF: Page 15, section 3.2." msgstr "" "\tWARN\t%s иÑпользует общий Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ ÑовмеÑтно Ñ %s\n" " REF: Стр. 15, раздел 3.2." #, c-format msgid "" " WARN Duplex option keyword %s may not work as expected and should " "be named Duplex.\n" " REF: Page 122, section 5.17" msgstr "" "\tWARN\tКлючевое Ñлово параметра дуплекÑа %s может привеÑти к некорректным " "результатам. ИÑпользуйте Ð¸Ð¼Ñ 'Duplex'\n" " REF: Стр. 122, раздел 5.17" msgid " WARN File contains a mix of CR, LF, and CR LF line endings." msgstr "\tWARN\tФайл Ñодержит комбинацию окончаний Ñтроки CR, LF, CR LF" msgid "" " WARN LanguageEncoding required by PPD 4.3 spec.\n" " REF: Pages 56-57, section 5.3." msgstr "" "\tWARN\tLanguageEncoding требуетÑÑ Ñпецификацией PPD 4.3.\n" " REF: Стр. 56-57, раздел 5.3." #, c-format msgid " WARN Line %d only contains whitespace." msgstr "\tWARN\tСтрока %d Ñодержит только пробелы." msgid "" " WARN Manufacturer required by PPD 4.3 spec.\n" " REF: Pages 58-59, section 5.3." msgstr "" "\tWARN\tManufacturer требуетÑÑ Ñпецификацией PPD 4.3.\n" " REF: Стр. 58-59, раздел 5.3." msgid "" " WARN Non-Windows PPD files should use lines ending with only LF, " "not CR LF." msgstr "" "\tWARN\tPPD-файлы не из Windows должны иÑпользовать Ñтроки только Ñ " "окончанием LF, а не Ñ CR LF" #, c-format msgid "" " WARN Obsolete PPD version %.1f.\n" " REF: Page 42, section 5.2." msgstr "" "\tWARN\tУÑÑ‚Ð°Ñ€ÐµÐ²ÑˆÐ°Ñ Ð²ÐµÑ€ÑÐ¸Ñ PPD %.1f.\n" " REF: Стр. 42, раздел 5.2." msgid "" " WARN PCFileName longer than 8.3 in violation of PPD spec.\n" " REF: Pages 61-62, section 5.3." msgstr "" "\tWARN\tPCFileName длиннее чем 8.3 нарушает Ñпецификацию PPD.\n" " REF: Стр. 61-62, раздел 5.3." msgid "" " WARN PCFileName should contain a unique filename.\n" " REF: Pages 61-62, section 5.3." msgstr "" "\tWARN\tPCFilename должен Ñодержать уникальное название\n" " REF: Стр. 61-62, раздел 5.3." msgid "" " WARN Protocols contains PJL but JCL attributes are not set.\n" " REF: Pages 78-79, section 5.7." msgstr "" "\tWARN\tProtocols Ñодержит PJL, но атрибуты JCL не наÑтроены.\n" " REF: Стр. 78-79, раздел 5.7." msgid "" " WARN Protocols contains both PJL and BCP; expected TBCP.\n" " REF: Pages 78-79, section 5.7." msgstr "" "\tWARN\tProtocols Ñодержит PJL и BCP; ожидаетÑÑ TBCP.\n" " REF: Стр. 78-79, раздел 5.7." msgid "" " WARN ShortNickName required by PPD 4.3 spec.\n" " REF: Pages 64-65, section 5.3." msgstr "" "\tWARN\tShortNickName требуетÑÑ Ñпецификацией PPD 4.3.\n" " REF: Стр. 64-65, раздел 5.3." msgid " cupsaddsmb [options] -a" msgstr "\tcupsaddsmb [options] -a" msgid " cupstestdsc [options] -" msgstr "\tcupstestdsc [options] -" msgid " program | cupstestppd [options] -" msgstr "\tprogram | cupstestppd [options] -" #, c-format msgid "" " %s \"%s %s\" conflicts with \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." msgstr "" "\t%s \"%s %s\" конфликтует Ñ \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." #, c-format msgid " %s %s %s does not exist." msgstr "\t%s %s %s не ÑущеÑтвует." #, c-format msgid " %s %s file \"%s\" has the wrong capitalization." msgstr "\t%s %s файл \"%s\" имеет неверный региÑтр." #, c-format msgid "" " %s Bad %s choice %s.\n" " REF: Page 122, section 5.17" msgstr "" "\t%s Ðеверный %s выбор %s.\n" " REF: Стр. 122, раздел 5.17" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s." msgstr "\t%s Ðеверный перевод UTF-8 \"%s\" Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° %s, выбора %s" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s." msgstr "\t%s Ðеверный перевод UTF-8 \"%s\" Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° %s" #, c-format msgid " %s Bad cupsFilter value \"%s\"." msgstr "\t%s Ðеверное значение cupsFilter \"%s\"." #, c-format msgid " %s Bad cupsFilter2 value \"%s\"." msgstr "\t%s Ðеверное значение cupsFilter2 \"%s\"." #, c-format msgid " %s Bad cupsICCProfile %s." msgstr "\t%s Ðеверный cupsICCProfile %s." #, c-format msgid " %s Bad cupsPreFilter value \"%s\"." msgstr "\t%s Ðеверное значение cupsPreFilter \"%s\"." #, c-format msgid " %s Bad cupsUIConstraints %s: \"%s\"" msgstr "\t%s Ðеверное значение cupsUIConstraints %s: \"%s\"" #, c-format msgid " %s Bad language \"%s\"." msgstr "\t%s Ðеверный Ñзык \"%s\"." #, c-format msgid " %s Bad permissions on %s file \"%s\"." msgstr "\t%s Ðеверные права %s Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° \"%s\"." #, c-format msgid " %s Bad spelling of %s - should be %s." msgstr " %s Ошибки в %s - должно быть %s." #, c-format msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID." msgstr "\t%s Ðевозможно предоÑтавить APScanAppPath и APScanAppBundleID вмеÑте." #, c-format msgid " %s Default choices conflicting." msgstr "\t%s\tЗначениÑ, иÑпользуемые по умолчанию, конфликтуют." #, c-format msgid " %s Empty cupsUIConstraints %s" msgstr " %s ПуÑтой cupsUIConstraints %s" #, c-format msgid " %s Missing \"%s\" translation string for option %s, choice %s." msgstr "\t%s Перевод \"%s\" отÑутÑтвует Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° %s, выбора %s" #, c-format msgid " %s Missing \"%s\" translation string for option %s." msgstr "" #, c-format msgid " %s Missing %s file \"%s\"." msgstr "\t%s отÑутÑтвует %s файл \"%s\"." #, c-format msgid "" " %s Missing REQUIRED PageRegion option.\n" " REF: Page 100, section 5.14." msgstr "" "\t%s ОбÑзательный параметр PageRegion отÑутÑтвует.\n" "\t\t REF: Стр. 100, раздел 5.14." #, c-format msgid "" " %s Missing REQUIRED PageSize option.\n" " REF: Page 99, section 5.14." msgstr "" "\t%s ОбÑзательный параметр PageSize отÑутÑтвует.\n" " REF: Стр. 99, раздел 5.14." #, c-format msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." msgstr " %s Выбор *%s %s отÑутÑтвует в UIConstraints \"*%s %s *%s %s\"." #, c-format msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" msgstr " %s Выбор *%s %s отÑутÑтвует в cupsUIConstraints %s: \"%s\"" #, c-format msgid " %s Missing cupsUIResolver %s" msgstr "\t%s cupsUIResolver отÑутÑтвует %s" #, c-format msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"." msgstr "\t%s ОтÑутÑтвует параметр %s у UIConstraints \"*%s %s *%s %s\"." #, c-format msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\"" msgstr "\t%s ОтÑутÑтвует параметр %s у cupsUIConstraints %s: \"%s\"" #, c-format msgid " %s No base translation \"%s\" is included in file." msgstr "\t%s ОÑновной перевод \"%s\" не включен в файл." #, c-format msgid "" " %s REQUIRED %s does not define choice None.\n" " REF: Page 122, section 5.17" msgstr "" "\t ТРЕБУЕТСЯ %s: %s не определÑет выбор \"Ðет\".\n" " REF: Стр. 122, раздел 5.17\n" #, c-format msgid " %s Size \"%s\" defined for %s but not for %s." msgstr "\t%s Размер \"%s\" определен Ð´Ð»Ñ %s, но не определен Ð´Ð»Ñ %s." #, c-format msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)." msgstr "\t%s Размер \"%s\" имеет неверное значение (%gx%g)." #, c-format msgid " %s Size \"%s\" should be \"%s\"." msgstr "\t%s Размер \"%s\" должен быть \"%s\"." #, c-format msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"." msgstr "\t%s Размер \"%s\" должен быть в формате Adobe standard name \"%s\"." #, c-format msgid " %s cupsICCProfile %s hash value collides with %s." msgstr "\tХеш-значение %s cupsICCProfile %s конфликтует Ñ %s." #, c-format msgid " %s cupsUIResolver %s causes a loop." msgstr "\t%s cupsUIResolver %s Ñоздает цикл." #, c-format msgid "" " %s cupsUIResolver %s does not list at least two different options." msgstr "\t%s Ð’ cupsUIResolver %s не перечиÑлено как минимум два параметра." #, c-format msgid "" " **FAIL** %s must be 1284DeviceID\n" " REF: Page 72, section 5.5" msgstr "" "\t**FAIL** %s должно ÑоответÑтвовать 1284DeviceID\n" " REF: Стр. 72, раздел 5.5" #, c-format msgid "" " **FAIL** Bad Default%s %s\n" " REF: Page 40, section 4.5." msgstr "" "\t**FAIL** Ðеверный Default%s %s\n" " REF: Стр. 40, раздел 4.5." #, c-format msgid "" " **FAIL** Bad DefaultImageableArea %s\n" " REF: Page 102, section 5.15." msgstr "" "\t**FAIL** Ðеверный DefaultImageableArea %s\n" " REF: Стр. 102, раздел 5.15." #, c-format msgid "" " **FAIL** Bad DefaultPaperDimension %s\n" " REF: Page 103, section 5.15." msgstr "" "\t**FAIL** Ðеверный DefaultPaperDimension %s\n" " REF: Стр. 103, раздел 5.15." #, c-format msgid "" " **FAIL** Bad FileVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" "\t**FAIL** Ðеверный FileVersion \"%s\"\n" " REF: Стр. 56, раздел 5.3." #, c-format msgid "" " **FAIL** Bad FormatVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" "\t**FAIL** Ðеверный FormatVersion \"%s\"\n" " REF: Стр. 56, раздел 5.3." msgid "" " **FAIL** Bad JobPatchFile attribute in file\n" " REF: Page 24, section 3.4." msgstr "" "\t**FAIL** Ðеверный JobPatchFile атрибут в файле\n" " REF: Стр. 24, раздел 3.4." #, c-format msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1." msgstr "\t**FAIL** Ðеверный LanguageEncoding %s - должен быть ISOLatin1." #, c-format msgid " **FAIL** Bad LanguageVersion %s - must be English." msgstr "\t**FAIL** Ðеверный LanguageVersion %s - должен быть английÑкий." #, c-format msgid "" " **FAIL** Bad Manufacturer (should be \"%s\")\n" " REF: Page 211, table D.1." msgstr "" "\t**FAIL** Ðеверный Manufacturer (должен быть \"%s\")\n" " REF: Стр. 211, таблица D.1." #, c-format msgid "" " **FAIL** Bad ModelName - \"%c\" not allowed in string.\n" " REF: Pages 59-60, section 5.3." msgstr "" "\t**FAIL** Ðеверное ModelName – \"%c\" не разрешено в Ñтроке.\n" " REF: Стр. 59-60, раздел 5.3." msgid "" " **FAIL** Bad PSVersion - not \"(string) int\".\n" " REF: Pages 62-64, section 5.3." msgstr "" "\t**FAIL** ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ PSVersion – не «(string) int».\n" " REF: Стр. 62-64, раздел 5.3." msgid "" " **FAIL** Bad Product - not \"(string)\".\n" " REF: Page 62, section 5.3." msgstr "" "\t**FAIL** Ðеверный Product – не \"(string)\".\n" " REF: Стр. 62, раздел 5.3." msgid "" " **FAIL** Bad ShortNickName - longer than 31 chars.\n" " REF: Pages 64-65, section 5.3." msgstr "" "\t**FAIL** Ðеверный ShortNickName – длиннее чем 31 Ñимв.\n" " REF: Стр. 64-65, раздел 5.3." #, c-format msgid "" " **FAIL** Bad option %s choice %s\n" " REF: Page 84, section 5.9" msgstr "" "\t**FAIL** Ðеверный параметр %s выбор %s\n" " REF: Стр. 84, раздел 5.9" #, c-format msgid " **FAIL** Default option code cannot be interpreted: %s" msgstr "\t**FAIL** Ðе удаетÑÑ Ð¾Ð¿Ð¾Ð·Ð½Ð°Ñ‚ÑŒ код параметра по умолчанию: %s" #, c-format msgid "" " **FAIL** Default translation string for option %s choice %s contains " "8-bit characters." msgstr "" "\t**FAIL** Стандартный перевод Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° %s выбора %s Ñодержит 8-битовые " "Ñимволы." #, c-format msgid "" " **FAIL** Default translation string for option %s contains 8-bit " "characters." msgstr "" "\t**FAIL** Стандартный перевод Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° %s Ñодержит 8-битовые Ñимволы." #, c-format msgid " **FAIL** Group names %s and %s differ only by case." msgstr "\t**FAIL** Имена групп %s и %s отличаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ региÑтром Ñимволов." #, c-format msgid " **FAIL** Multiple occurrences of option %s choice name %s." msgstr "\t**FAIL** Ð”Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° параметра %s Ð¸Ð¼Ñ %s вÑтречаетÑÑ Ð½ÐµÑколько раз." #, c-format msgid " **FAIL** Option %s choice names %s and %s differ only by case." msgstr "" "\t**FAIL** Параметр %s Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ %s и %s отличаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ региÑтром " "Ñимволов." #, c-format msgid " **FAIL** Option names %s and %s differ only by case." msgstr "" "\t**FAIL** ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² %s и %s отличаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ региÑтром Ñимволов." #, c-format msgid "" " **FAIL** REQUIRED Default%s\n" " REF: Page 40, section 4.5." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ Default%s\n" " REF: Стр. 40, раздел 4.5." msgid "" " **FAIL** REQUIRED DefaultImageableArea\n" " REF: Page 102, section 5.15." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ DefaultImageableArea\n" " REF: Стр. 102, раздел 5.15." msgid "" " **FAIL** REQUIRED DefaultPaperDimension\n" " REF: Page 103, section 5.15." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ DefaultPaperDimension\n" " REF: Стр. 103, раздел 5.15." msgid "" " **FAIL** REQUIRED FileVersion\n" " REF: Page 56, section 5.3." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ FileVersion\n" " REF: Стр. 56, раздел 5.3." msgid "" " **FAIL** REQUIRED FormatVersion\n" " REF: Page 56, section 5.3." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ FormatVersion\n" " REF: Стр. 56, раздел 5.3." #, c-format msgid "" " **FAIL** REQUIRED ImageableArea for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 102, section 5.15." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ ImageableArea Ð´Ð»Ñ PageSize %s\n" " REF: Стр. 41, раздел 5.\n" " REF: Стр. 102, раздел 5.15." msgid "" " **FAIL** REQUIRED LanguageEncoding\n" " REF: Pages 56-57, section 5.3." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ LanguageEncoding\n" " REF: Стр. 56-57, раздел 5.3." msgid "" " **FAIL** REQUIRED LanguageVersion\n" " REF: Pages 57-58, section 5.3." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ LanguageVersion\n" " REF: Стр. 57-58, раздел 5.3." msgid "" " **FAIL** REQUIRED Manufacturer\n" " REF: Pages 58-59, section 5.3." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ Manufacturer\n" " REF: Стр. 58-59, раздел 5.3." msgid "" " **FAIL** REQUIRED ModelName\n" " REF: Pages 59-60, section 5.3." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ ModelName\n" " REF: Стр. 59-60, раздел 5.3." msgid "" " **FAIL** REQUIRED NickName\n" " REF: Page 60, section 5.3." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ NickName\n" " REF: Стр. 60, раздел 5.3." msgid "" " **FAIL** REQUIRED PCFileName\n" " REF: Pages 61-62, section 5.3." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ PCFileName\n" " REF: Стр. 61-62, раздел 5.3." msgid "" " **FAIL** REQUIRED PSVersion\n" " REF: Pages 62-64, section 5.3." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ PSVersion\n" " REF: Стр. 62-64, раздел 5.3." msgid "" " **FAIL** REQUIRED PageRegion\n" " REF: Page 100, section 5.14." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ PageRegion\n" " REF: Стр. 100, раздел 5.14." msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Page 41, section 5.\n" " REF: Page 99, section 5.14." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ PageSize\n" " REF: Стр. 41, раздел 5.\n" " REF: Стр. 99, раздел 5.14." msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Pages 99-100, section 5.14." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ PageSize\n" " REF: Стр. 99-100, раздел 5.14." #, c-format msgid "" " **FAIL** REQUIRED PaperDimension for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 103, section 5.15." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ PaperDimension Ð´Ð»Ñ PageSize %s\n" " REF: Стр. 41, раздел 5.\n" " REF: Стр. 103, раздел 5.15." msgid "" " **FAIL** REQUIRED Product\n" " REF: Page 62, section 5.3." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ Product\n" " REF: Стр. 62, раздел 5.3." msgid "" " **FAIL** REQUIRED ShortNickName\n" " REF: Page 64-65, section 5.3." msgstr "" "\t**FAIL** ТРЕБУЕТСЯ ShortNickName\n" " REF: Стр. 64-65, раздел 5.3." #, c-format msgid " **FAIL** Unable to open PPD file - %s on line %d." msgstr "\t**FAIL** Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ PPD-файл – %s в Ñтроке %d." #, c-format msgid " %d ERRORS FOUND" msgstr " ОБÐÐРУЖЕÐО ОШИБОК: %d" msgid " -h Show program usage" msgstr " -h Показать Ñправку по иÑпользованию программы" #, c-format msgid "" " Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:" msgstr "" " Ðеверный %%%%BoundingBox: в Ñтроке %d\n" " REF: Стр. 39, %%%%BoundingBox:" #, c-format msgid "" " Bad %%%%Page: on line %d.\n" " REF: Page 53, %%%%Page:" msgstr "" " ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ %%%%Page: в Ñтроке %d\n" " REF: Стр. 53, %%%%Page:" #, c-format msgid "" " Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:" msgstr "" " ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ %%%%Pages: в Ñтроке %d\n" " REF: Стр. 43, %%%%Pages:" #, c-format msgid "" " Line %d is longer than 255 characters (%d).\n" " REF: Page 25, Line Length" msgstr "" " Длина Ñтроки %d больше 255 Ñимволов (%d)\n" " REF: Стр. 25, Длина Ñтроки " msgid "" " Missing %!PS-Adobe-3.0 on first line.\n" " REF: Page 17, 3.1 Conforming Documents" msgstr "" " %!PS-Adobe-3.0 отÑутÑтвует в первой Ñтроке.\n" " REF: Стр. 17, 3.1 СоответÑтвующие документы" #, c-format msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments" msgstr "" #, c-format msgid "" " Missing or bad %%BoundingBox: comment.\n" " REF: Page 39, %%BoundingBox:" msgstr "" " ОтÑутÑтвует или неверный %%BoundingBox: комментарий.\n" " REF: Стр. 39, %%BoundingBox:" #, c-format msgid "" " Missing or bad %%Page: comments.\n" " REF: Page 53, %%Page:" msgstr "" " ОтÑутÑтвует или Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ %%Page: комментарий.\n" " REF: Стр. 53, %%Page:" #, c-format msgid "" " Missing or bad %%Pages: comment.\n" " REF: Page 43, %%Pages:" msgstr "" " ОтÑутÑтвуют или неверные %%Pages: комментарий.\n" " REF: Стр. 43, %%Pages:" msgid " NO ERRORS FOUND" msgstr " ОШИБОК ÐЕ ОБÐÐРУЖЕÐО" #, c-format msgid " Saw %d lines that exceeded 255 characters." msgstr "\tÐайдено %d Ñтрок, длина которых превышает 255 Ñимволов." #, c-format msgid " Too many %%BeginDocument comments." msgstr "\tСлишком много комментариев %%BeginDocument" #, c-format msgid " Too many %%EndDocument comments." msgstr "\tСлишком много комментариев %%EndDocument" msgid " Warning: file contains binary data." msgstr "\tWARNING: файл Ñодержит бинарные данные." #, c-format msgid " Warning: no %%EndComments comment in file." msgstr " WARNING: нет ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸Ñ %%EndComments в файле." #, c-format msgid " Warning: obsolete DSC version %.1f in file." msgstr " WARNING: уÑÑ‚Ð°Ñ€ÐµÐ²ÑˆÐ°Ñ Ð²ÐµÑ€ÑÐ¸Ñ DSC %.1f в файле." msgid " ! expression Unary NOT of expression." msgstr " ! expression ЛогичеÑкое NOT Ð´Ð»Ñ Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ." msgid " ( expressions ) Group expressions." msgstr " ( expressions ) Группа выражений." msgid " --[no-]debug-logging Turn debug logging on/off." msgstr " --[no-]debug-logging Вкл./откл. ведение журнала." msgid " --[no-]remote-admin Turn remote administration on/off." msgstr " --[no-]remote-admin Вкл./откл. удаленное админиÑтрирование." msgid " --[no-]remote-any Allow/prevent access from the Internet." msgstr " --[no-]remote-any РазрешаетÑÑ/запрещаетÑÑ Ð´Ð¾Ñтуп из Интернет." msgid " --[no-]share-printers Turn printer sharing on/off." msgstr "" " --[no-]share-printers Вкл./откл. ÑовмеÑтное иÑпользование принтеров." msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job." msgstr "" " --[no-]user-cancel-any ПользователÑм разрешаетÑÑ/запрещаетÑÑ Ð¾Ñ‚Ð¼ÐµÐ½Ñть " "заданиÑ." msgid " --cr End lines with CR (Mac OS 9)." msgstr " --cr Строки заканчиваютÑÑ Ð½Ð° CR (Mac OS 9)." msgid " --crlf End lines with CR + LF (Windows)." msgstr " --crlf Строки заканчиваютÑÑ Ð½Ð° CR + LF (Windows)." msgid " --domain regex Match domain to regular expression." msgstr " --domain regex ИÑкать домен по регулÑрному выражению." msgid "" " --exec utility [argument ...] ;\n" " Execute program if true." msgstr "" " --exec utility [argument ...] ;\n" " Выполнить программу." msgid " --false Always false." msgstr " --false Ð’Ñегда Ложь." msgid " --help Show help." msgstr " --help Показать Ñправку." msgid " --help Show this help." msgstr " --help Показать Ñту Ñправку." msgid " --host regex Match hostname to regular expression." msgstr " --host regex Ðайти hostname по регулÑрному выражению." msgid " --lf End lines with LF (UNIX/Linux/macOS)." msgstr "" msgid " --list-filters List filters that will be used." msgstr "" " --list-filters СпиÑок фильтров которые должны иÑпользоватьÑÑ." msgid " --local True if service is local." msgstr " --local \"ИÑтина\" еÑли ÑÐµÑ€Ð²Ð¸Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹." msgid " --ls List attributes." msgstr " --ls СпиÑок атрибутов." msgid " --name regex Match service name to regular expression." msgstr " --name regex Ðайти Ð¸Ð¼Ñ Ð¿Ð¾ регулÑрному выражению." msgid " --not expression Unary NOT of expression." msgstr " --not expression ЛогичеÑкое NOT Ð´Ð»Ñ Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ." msgid " --path regex Match resource path to regular expression." msgstr "" " --path regex Ðайти путь к реÑурÑу по регулÑрному выражению." msgid " --port number[-number] Match port to number or range." msgstr "" " --port number[-number] Ðайти номер порта по номеру или диапазону портов." msgid " --print Print URI if true." msgstr " --print Печать URI при ÑоответÑтвии." msgid " --print-name Print service name if true." msgstr " --print-name Печать имени ÑервиÑа еÑли ÑоответÑтвует." msgid " --quiet Quietly report match via exit code." msgstr "" " --quiet Кратко уведомлÑть о Ñовпадении через код выхода." msgid " --remote True if service is remote." msgstr " --remote \"ИÑтина\" еÑли ÑÐµÑ€Ð²Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ñ‹Ð¹." msgid "" " --stop-after-include-error\n" " Stop tests after a failed INCLUDE." msgstr "" " --stop-after-include-error\n" " ОÑтанавливать проверку поÑле ошибки INCLUDE." msgid " --true Always true." msgstr " --true Ð’Ñегда ИÑтина." msgid " --txt key True if the TXT record contains the key." msgstr " --txt key \"ИÑтина\" еÑли TXT запиÑÑŒ Ñодержит key." msgid " --txt-* regex Match TXT record key to regular expression." msgstr " --txt-* regex Ðайти запиÑÑŒ TXT по регулÑрному выражению." msgid " --uri regex Match URI to regular expression." msgstr " --uri regex Ðайти URI по регулÑрному выражению." msgid " --version Show program version." msgstr " --version Показать верÑию программы." msgid " --version Show version." msgstr " --version Показать верÑию." msgid " -4 Connect using IPv4." msgstr " -4 Соединение иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ IPv4." msgid " -6 Connect using IPv6." msgstr " -6 Соединение иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ IPv6." msgid " -C Send requests using chunking (default)." msgstr "" " -C Передача запроÑа Ñ Ð¸Ñпользованием chunking (по " "умолчанию)" msgid " -D Remove the input file when finished." msgstr " -D Удалить входной файл поÑле завершениÑ." msgid " -D name=value Set named variable to value." msgstr " -D name=value Определение переменной." msgid " -E Encrypt the connection." msgstr " -E Подключение к Ñерверу шифруетÑÑ." msgid "" " -E Test with encryption using HTTP Upgrade to TLS." msgstr "" msgid "" " -F Run in the foreground but detach from console." msgstr "" " -F ЗапуÑкать Ñ Ð²Ñ‹Ñоким приоритетом и отдельно от " "конÑоли." msgid " -H samba-server Use the named SAMBA server." msgstr " -H samba-server ИÑпользовать заданный Ñервер SAMBA." msgid " -I Ignore errors." msgstr " -I Игнорировать ошибки." msgid " -I include-dir Add include directory to search path." msgstr " -I include-dir Добавить каталог include в путь поиÑка." msgid " -I {filename,filters,none,profiles}" msgstr " -I {filename,filters,none,profiles}" msgid " -L Send requests using content-length." msgstr "" " -L Передача запроÑа Ñ Ð¸Ñпользованием content-length." msgid "" " -P filename.plist Produce XML plist to a file and test report to " "standard output." msgstr "" " -P filename.plist ВывеÑти XML plist в файл и проверить результат на " "Ñтандартном выводе." msgid " -P filename.ppd Set PPD file." msgstr " -P filename.ppd Задать PPD-файл." msgid " -P number[-number] Match port to number or range." msgstr "" " -P number[-number] Ðайти номер порта по номеру или диапазону портов." msgid " -R root-directory Set alternate root." msgstr " -R root-directory Задать корневой каталог." msgid " -S Test with encryption using HTTPS." msgstr "" msgid " -T seconds Set the browse timeout in seconds." msgstr " -T seconds Задать Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð² Ñекундах." msgid " -T seconds Set the receive/send timeout in seconds." msgstr "" " -T seconds Задать Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ÐµÐ¼Ð°/передачи в Ñекундах." msgid " -U username Specify username." msgstr " -U username Указание имени пользователÑ." msgid " -V version Set default IPP version." msgstr " -V version Задать верÑию IPP по умолчанию." msgid "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgstr "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgid " -X Produce XML plist instead of plain text." msgstr " -X Выводить XML plist вмеÑто обычного текÑта." msgid " -a Export all printers." msgstr " -a ЭкÑпорт вÑех принтеров." msgid " -c Produce CSV output." msgstr " -c Вывод в формате CSV." msgid " -c catalog.po Load the specified message catalog." msgstr " -c catalog.po ЗагружаетÑÑ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¹ каталог Ñообщений." msgid " -c cups-files.conf Set cups-files.conf file to use." msgstr " -c cups-files.conf ИÑпользовать заданный cups-files.conf" msgid " -c cupsd.conf Set cupsd.conf file to use." msgstr " -c cupsd.conf ИÑпользовать заданный cupsd.conf" msgid " -d name=value Set named variable to value." msgstr " -d name=value Указанной переменной приÑваиваетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ." msgid " -d output-dir Specify the output directory." msgstr " -d output-dir Задать выходной каталог." msgid " -d printer Use the named printer." msgstr " -d printer ИÑпользовать заданный принтер." msgid " -d regex Match domain to regular expression." msgstr " -d regex ИÑкать домен по регулÑрному выражению." msgid " -e Use every filter from the PPD file." msgstr " -e ИÑпользовать каждый фильтр из PPD-файла." msgid " -f Run in the foreground." msgstr " -f ЗапуÑкать Ñ Ð²Ñ‹Ñоким приоритетом." msgid " -f filename Set default request filename." msgstr " -f filename Задать Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° по умолчанию." msgid " -h Show this usage message." msgstr " -h Show this usage message." msgid " -h Validate HTTP response headers." msgstr "" msgid " -h regex Match hostname to regular expression." msgstr " -h regex Ðайти hostname по регулÑрному выражению." msgid " -h server[:port] Specify server address." msgstr " -h server[:port] Задать Ð°Ð´Ñ€ÐµÑ Ð¸ порт Ñервера." msgid " -i mime/type Set input MIME type (otherwise auto-typed)." msgstr "" " -i mime/type Указать MIME-тип данных на входе (иначе " "автоопред.)." msgid "" " -i seconds Repeat the last file with the given time interval." msgstr "" " -i seconds Повтор поÑледнего файла через заданный интервал в " "Ñек." msgid "" " -j job-id[,N] Filter file N from the specified job (default is " "file 1)." msgstr "" " -j job-id[,N] Из указанного Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð²Ñ‹Ð±Ð¸Ñ€Ð°ÐµÑ‚ÑÑ Ñ„Ð°Ð¹Ð» N (по " "умолчанию файл 1)." msgid " -l List attributes." msgstr " -l СпиÑок атрибутов." msgid " -l Produce plain text output." msgstr " -l Вывод в формате проÑтого текÑта." msgid " -l Run cupsd on demand." msgstr " -l ЗапуÑкать cupsd по запроÑу." msgid " -l lang[,lang,...] Specify the output language(s) (locale)." msgstr " -l lang[,lang,...] Задать выходной Ñзык(и) (locale)." msgid " -m Use the ModelName value as the filename." msgstr "" " -m Ð’ качеÑтве имени файла иÑпользуетÑÑ ModelName." msgid "" " -m mime/type Set output MIME type (otherwise application/pdf)." msgstr "" " -m mime/type Указать MIME-тип данных на выходе (иначе " "application/pdf)." msgid " -n copies Set number of copies." msgstr " -n copies Указать количеÑтво копий." msgid "" " -n count Repeat the last file the given number of times." msgstr " -n count Повтор поÑледнего файла заданное чиÑло раз." msgid " -n regex Match service name to regular expression." msgstr " -n regex Ðайти Ð¸Ð¼Ñ Ð¿Ð¾ регулÑрному выражению." msgid "" " -o filename.drv Set driver information file (otherwise ppdi.drv)." msgstr "" " -o filename.drv Указать файл Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ о драйвере (иначе ppdi." "drv)." msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)." msgstr " -o filename.ppd[.gz] Задать выходной файл (иначе stdout)." msgid " -o name=value Set option(s)." msgstr " -o name=value Задать параметры." msgid " -p Print URI if true." msgstr " -p Печать URI при ÑоответÑтвии." msgid " -p filename.ppd Set PPD file." msgstr " -p filename.ppd Задать PPD-файл." msgid " -q Quietly report match via exit code." msgstr "" " -q Кратко уведомлÑть о Ñовпадении через код выхода." msgid " -q Run silently." msgstr " -q Команда выполнÑетÑÑ Ð² «тихом» режиме." msgid " -r True if service is remote." msgstr " -r \"ИÑтина\" еÑли ÑÐµÑ€Ð²Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ñ‹Ð¹." msgid " -r Use 'relaxed' open mode." msgstr " -r ИÑпользуетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ режим." msgid " -s Print service name if true." msgstr " -s Печать имени ÑервиÑа еÑли ÑоответÑтвует." msgid " -s cups-files.conf Set cups-files.conf file to use." msgstr "" msgid " -t Produce a test report." msgstr " -t Создать теÑтовый отчет." msgid " -t Test PPDs instead of generating them." msgstr " -t ТеÑÑ‚ PPDs вмеÑто его ÑозданиÑ." msgid " -t Test the configuration file." msgstr " -t Проверка файла конфигурации." msgid " -t key True if the TXT record contains the key." msgstr " -t key \"ИÑтина\" еÑли TXT запиÑÑŒ Ñодержит key." msgid " -t title Set title." msgstr " -t title Задать заголовок." msgid " -u Remove the PPD file when finished." msgstr " -u Удалить PPD-файл поÑле завершениÑ." msgid " -u regex Match URI to regular expression." msgstr " -u regex Ðайти URI по регулÑрному выражению." msgid " -v Be verbose." msgstr " -v Подробный вывод лога." msgid " -vv Be very verbose." msgstr " -vv Очень подробный вывод лога." msgid "" " -x utility [argument ...] ;\n" " Execute program if true." msgstr "" " -x utility [argument ...] ;\n" " Выполнить программу." msgid " -z Compress PPD files using GNU zip." msgstr " -z Сжимать PPD-файл иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ GNU zip." msgid " IPPFIND_SERVICE_DOMAIN Domain name" msgstr " IPPFIND_SERVICE_DOMAIN Ð˜Ð¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°" msgid "" " IPPFIND_SERVICE_HOSTNAME\n" " Fully-qualified domain name" msgstr "" " IPPFIND_SERVICE_HOSTNAME\n" " Полный путь Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ домена" msgid " IPPFIND_SERVICE_NAME Service instance name" msgstr " IPPFIND_SERVICE_NAME Ð˜Ð¼Ñ ÑервиÑа" msgid " IPPFIND_SERVICE_PORT Port number" msgstr " IPPFIND_SERVICE_PORT Ðомер порта" msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type" msgstr " IPPFIND_SERVICE_REGTYPE Тип региÑтрации DNS-SD" msgid " IPPFIND_SERVICE_SCHEME URI scheme" msgstr " IPPFIND_SERVICE_SCHEME Схема URI" msgid " IPPFIND_SERVICE_URI URI" msgstr " IPPFIND_SERVICE_URI URI" msgid " IPPFIND_TXT_* Value of TXT record key" msgstr " IPPFIND_TXT_* Значение TXT запиÑи key" msgid "" " expression --and expression\n" " Logical AND." msgstr "" " expression --and expression\n" " ЛогичеÑкое И." msgid "" " expression --or expression\n" " Logical OR." msgstr "" " expression --or expression\n" " ЛогичеÑкое ИЛИ." msgid " expression expression Logical AND." msgstr " expression expression ЛогичеÑкое И." msgid " {service_domain} Domain name" msgstr " {service_domain} Ð˜Ð¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°" msgid " {service_hostname} Fully-qualified domain name" msgstr " {service_hostname} Полный путь Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ домена" msgid " {service_name} Service instance name" msgstr " {service_name} Ð˜Ð¼Ñ ÑервиÑа" msgid " {service_port} Port number" msgstr " {service_port} Ðомер порта" msgid " {service_regtype} DNS-SD registration type" msgstr " {service_regtype} Тип региÑтрации DNS-SD" msgid " {service_scheme} URI scheme" msgstr " {service_scheme} Схема URI" msgid " {service_uri} URI" msgstr " {service_uri} URI" msgid " {txt_*} Value of TXT record key" msgstr " {txt_*} Значение TXT запиÑи key" msgid " {} URI" msgstr " {} URI" msgid " FAIL" msgstr " FAIL" msgid " PASS" msgstr " PASS" #, c-format msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section " "5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." msgstr "" #, c-format msgid "" "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 " "section 5.1.14)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section " "5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " "positive (RFC 8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC " "8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes" msgstr "%-7s %-7.7s %-7d %-31.31s %.0f байт" #, c-format msgid "%d x %d mm" msgstr "%d x %d мм" #, c-format msgid "%g x %g \"" msgstr "" #, c-format msgid "%s (%s)" msgstr "%s (%s)" #, c-format msgid "%s (%s, %s)" msgstr "%s (%s, %s)" #, c-format msgid "%s (Borderless)" msgstr "%s (без полей)" #, c-format msgid "%s (Borderless, %s)" msgstr "%s (без полей, %s)" #, c-format msgid "%s (Borderless, %s, %s)" msgstr "%s (без полей, %s, %s)" #, c-format msgid "%s accepting requests since %s" msgstr "%s принимает запроÑÑ‹ Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° %s" #, c-format msgid "%s cannot be changed." msgstr "%s не может быть изменен." #, c-format msgid "%s is not implemented by the CUPS version of lpc." msgstr "%s не выполнено верÑией CUPS Ð´Ð»Ñ lpc." #, c-format msgid "%s is not ready" msgstr "%s не готов" #, c-format msgid "%s is ready" msgstr "%s готов" #, c-format msgid "%s is ready and printing" msgstr "%s готов и печатает" #, c-format msgid "%s job-id user title copies options [file]" msgstr "%s задание пользователь название копий параметры [файл]" #, c-format msgid "%s not accepting requests since %s -" msgstr "%s не принимает запроÑÑ‹ Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° %s -" #, c-format msgid "%s not supported." msgstr "%s не поддерживаетÑÑ." #, c-format msgid "%s/%s accepting requests since %s" msgstr "%s/%s принимает запроÑÑ‹ Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° %s" #, c-format msgid "%s/%s not accepting requests since %s -" msgstr "%s/%s не принимает запроÑÑ‹ Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° %s -" #, c-format msgid "%s: %-33.33s [job %d localhost]" msgstr "%s: %-33.33s [задание %d localhost]" #. TRANSLATORS: Message is "subject: error" #, c-format msgid "%s: %s" msgstr "%s: %s" #, c-format msgid "%s: %s failed: %s" msgstr "%s: ошибка %s: %s" #, c-format msgid "%s: Bad printer URI \"%s\"." msgstr "" #, c-format msgid "%s: Bad version %s for \"-V\"." msgstr "%s: ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ %s Ð´Ð»Ñ \"-V\"." #, c-format msgid "%s: Don't know what to do." msgstr "%s: Дальнейшие дейÑÑ‚Ð²Ð¸Ñ Ð½ÐµÐ¸Ð·Ð²ÐµÑтны." #, c-format msgid "%s: Error - %s" msgstr "" #, c-format msgid "" "%s: Error - %s environment variable names non-existent destination \"%s\"." msgstr "" "%s: Ошибка - %s Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ на неÑущеÑтвующее назначение " "\"%s\"." #, c-format msgid "%s: Error - add '/version=1.1' to server name." msgstr "%s: Ошибка - добавьте '/version=1.1' к имени Ñервера." #, c-format msgid "%s: Error - bad job ID." msgstr "%s: Ошибка - неверный ID заданиÑ." #, c-format msgid "%s: Error - cannot print files and alter jobs simultaneously." msgstr "" "%s: Ошибка - невозможно печатать файлы и редактировать Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾." #, c-format msgid "%s: Error - cannot print from stdin if files or a job ID are provided." msgstr "" "%s: Ошибка - не удаетÑÑ Ð¿ÐµÑ‡Ð°Ñ‚ÑŒ из stdin, еÑли предоÑтавлены файлы или ID " "заданиÑ." #, c-format msgid "%s: Error - copies must be 1 or more." msgstr "" #, c-format msgid "%s: Error - expected character set after \"-S\" option." msgstr "%s: Ошибка - поÑле параметра \"-S\" должен идти набор Ñимволов." #, c-format msgid "%s: Error - expected content type after \"-T\" option." msgstr "" "%s: Ошибка - поÑле параметра \"-T\" должен быть указан тип Ñодержимого." #, c-format msgid "%s: Error - expected copies after \"-#\" option." msgstr "" "%s: Ошибка - поÑле параметра \"-#\" должно быть указано количеÑтво копий." #, c-format msgid "%s: Error - expected copies after \"-n\" option." msgstr "" "%s: Ошибка - поÑле параметра \"-n\" должно быть указано количеÑтво копий." #, c-format msgid "%s: Error - expected destination after \"-P\" option." msgstr "%s: Ошибка - поÑле параметра \"-P\" должно быть указано назначение." #, c-format msgid "%s: Error - expected destination after \"-d\" option." msgstr "%s: Ошибка - поÑле параметра \"-d\" должно быть указано назначение." #, c-format msgid "%s: Error - expected form after \"-f\" option." msgstr "%s: Ошибка - поÑле параметра \"-f\" должна быть указана форма." #, c-format msgid "%s: Error - expected hold name after \"-H\" option." msgstr "%s: Ошибка - поÑле параметра \"-H\" должно быть указано Ð¸Ð¼Ñ Ñ…Ð¾Ñта." #, c-format msgid "%s: Error - expected hostname after \"-H\" option." msgstr "%s: Ошибка - поÑле параметра \"-H\" должно быть указано Ð¸Ð¼Ñ Ñ…Ð¾Ñта." #, c-format msgid "%s: Error - expected hostname after \"-h\" option." msgstr "%s: Ошибка - поÑле параметра \"-h\" должно быть указано Ð¸Ð¼Ñ Ñ…Ð¾Ñта." #, c-format msgid "%s: Error - expected mode list after \"-y\" option." msgstr "%s: Ошибка - поÑле параметра \"-y\" должен быть указан ÑпиÑок режимов." #, c-format msgid "%s: Error - expected name after \"-%c\" option." msgstr "%s: Ошибка - поÑле параметра \"-%c\" должно быть указано имÑ." #, c-format msgid "%s: Error - expected option=value after \"-o\" option." msgstr "" "%s: Ошибка - поÑле параметра '-o' должна быть указана Ñтрока вида " "option=value" #, c-format msgid "%s: Error - expected page list after \"-P\" option." msgstr "%s: Ошибка – поÑле параметра \"-P\" должен идти ÑпиÑок Ñтраниц." #, c-format msgid "%s: Error - expected priority after \"-%c\" option." msgstr "%s: Ошибка - поÑле параметра \"-%c\" должен быть указан приоритет." #, c-format msgid "%s: Error - expected reason text after \"-r\" option." msgstr "%s: Ошибка - поÑле параметра \"-r\" должен идти текÑÑ‚ причины." #, c-format msgid "%s: Error - expected title after \"-t\" option." msgstr "%s: Ошибка - поÑле параметра \"-t\" должен быть указан заголовок." #, c-format msgid "%s: Error - expected username after \"-U\" option." msgstr "" "%s: Ошибка - поÑле параметра \"-U\" должно быть указано Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ." #, c-format msgid "%s: Error - expected username after \"-u\" option." msgstr "" "%s: Ошибка - поÑле параметра \"-u\" должно быть указано Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ." #, c-format msgid "%s: Error - expected value after \"-%c\" option." msgstr "%s: Ошибка - поÑле параметра \"-%c\" должно быть указано значение." #, c-format msgid "" "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" " "option." msgstr "" "%s: Ошибка - требуетÑÑ \"завершено\",\"не завершено\" или \"вÑе\" поÑле " "параметра \"-W\" " #, c-format msgid "%s: Error - no default destination available." msgstr "%s: Ошибка – нет доÑтупного Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию." #, c-format msgid "%s: Error - priority must be between 1 and 100." msgstr "%s: Ошибка – приоритет должен быть от 1 до 100." #, c-format msgid "%s: Error - scheduler not responding." msgstr "%s: Ошибка - планировщик не отвечает." #, c-format msgid "%s: Error - too many files - \"%s\"." msgstr "%s: Ошибка – Ñлишком много файлов – \"%s\"." #, c-format msgid "%s: Error - unable to access \"%s\" - %s" msgstr "%s: Ошибка – не удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ доÑтуп к \"%s\" – %s" #, c-format msgid "%s: Error - unable to queue from stdin - %s." msgstr "%s: Ошибка – не удаетÑÑ Ð¿Ð¾Ñтавить в очередь из stdin - %s." #, c-format msgid "%s: Error - unknown destination \"%s\"." msgstr "%s: Ошибка - неизвеÑтное назначение \"%s\"." #, c-format msgid "%s: Error - unknown destination \"%s/%s\"." msgstr "%s: ошибка - неизвеÑтное назначение \"%s/%s\"." #, c-format msgid "%s: Error - unknown option \"%c\"." msgstr "%s: Ошибка - неизвеÑтный параметр \"%c\"." #, c-format msgid "%s: Error - unknown option \"%s\"." msgstr "%s: Ошибка - неизвеÑтный параметр \"%s\"." #, c-format msgid "%s: Expected job ID after \"-i\" option." msgstr "%s: ПоÑле параметра \"-i\" должен быть указан ID заданиÑ." #, c-format msgid "%s: Invalid destination name in list \"%s\"." msgstr "%s: ÐедопуÑтимое Ð¸Ð¼Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² ÑпиÑке \"%s\"." #, c-format msgid "%s: Invalid filter string \"%s\"." msgstr "%s: ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñтрока фильтра \"%s\"." #, c-format msgid "%s: Missing filename for \"-P\"." msgstr "%s: Пропущено Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ \"-P\"." #, c-format msgid "%s: Missing timeout for \"-T\"." msgstr "%s: Пропущен таймаут Ð´Ð»Ñ \"-T\"." #, c-format msgid "%s: Missing version for \"-V\"." msgstr "%s: Пропущена верÑÐ¸Ñ Ð´Ð»Ñ \"-V\"." #, c-format msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"." msgstr "%s: Ðеобходимо указать ID Ð·Ð°Ð´Ð°Ð½Ð¸Ñ (\"-i jobid\") перед \"-H restart\"." #, c-format msgid "%s: No filter to convert from %s/%s to %s/%s." msgstr "" "%s: ОтÑутÑтвует фильтр, необходимый Ð´Ð»Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· %s/%s в %s/%s." #, c-format msgid "%s: Operation failed: %s" msgstr "%s: ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ удалаÑÑŒ: %s" #, c-format msgid "%s: Sorry, no encryption support." msgstr "%s: Ðет поддержки шифрованиÑ." #, c-format msgid "%s: Unable to connect to \"%s:%d\": %s" msgstr "" #, c-format msgid "%s: Unable to connect to server." msgstr "%s: Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº Ñерверу." #, c-format msgid "%s: Unable to contact server." msgstr "%s: Ðе удаетÑÑ ÑƒÑтановить ÑвÑзь Ñ Ñервером." #, c-format msgid "%s: Unable to create PPD file: %s" msgstr "" #, c-format msgid "%s: Unable to determine MIME type of \"%s\"." msgstr "%s: Ðе удаетÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ тип MIME \"%s\"." #, c-format msgid "%s: Unable to open \"%s\": %s" msgstr "%s: Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ \"%s\": %s" #, c-format msgid "%s: Unable to open %s: %s" msgstr "%s: Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ %s: %s" #, c-format msgid "%s: Unable to open PPD file: %s on line %d." msgstr "%s: Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ PPD-файл: %s в Ñтроке %d." #, c-format msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"." msgstr "%s: Ðе удаетÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ базу данных MIME из \"%s\" или \"%s\"." #, c-format msgid "%s: Unable to resolve \"%s\"." msgstr "" #, c-format msgid "%s: Unknown argument \"%s\"." msgstr "" #, c-format msgid "%s: Unknown destination \"%s\"." msgstr "%s: ÐеизвеÑтное назначение \"%s\"." #, c-format msgid "%s: Unknown destination MIME type %s/%s." msgstr "%s: ÐеизвеÑтный MIME-тип Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ %s/%s." #, c-format msgid "%s: Unknown option \"%c\"." msgstr "%s: ÐеизвеÑтный параметр \"%c\"." #, c-format msgid "%s: Unknown option \"%s\"." msgstr "%s: ÐеизвеÑтный параметр \"%s\"." #, c-format msgid "%s: Unknown option \"-%c\"." msgstr "%s: ÐеизвеÑтный параметр \"-%c\"." #, c-format msgid "%s: Unknown source MIME type %s/%s." msgstr "%s: ÐеизвеÑтный MIME-тип иÑточника %s/%s." #, c-format msgid "" "%s: Warning - \"%c\" format modifier not supported - output may not be " "correct." msgstr "" "%s: Внимание - модификатор формата \"%c\" не поддерживаетÑÑ - вывод может " "быть неправильным." #, c-format msgid "%s: Warning - character set option ignored." msgstr "%s: Внимание - параметр набора Ñимволов пропущен." #, c-format msgid "%s: Warning - content type option ignored." msgstr "%s: Внимание - параметр типа Ñодержимого пропущен." #, c-format msgid "%s: Warning - form option ignored." msgstr "%s: Внимание - параметр формы пропущен." #, c-format msgid "%s: Warning - mode option ignored." msgstr "%s: Внимание - параметр режима пропущен." msgid "-1" msgstr "-1" msgid "-10" msgstr "-10" msgid "-100" msgstr "-100" msgid "-105" msgstr "-105" msgid "-11" msgstr "-11" msgid "-110" msgstr "-110" msgid "-115" msgstr "-115" msgid "-12" msgstr "-12" msgid "-120" msgstr "-120" msgid "-13" msgstr "-13" msgid "-14" msgstr "-14" msgid "-15" msgstr "-15" msgid "-2" msgstr "-2" msgid "-20" msgstr "-20" msgid "-25" msgstr "-25" msgid "-3" msgstr "-3" msgid "-30" msgstr "-30" msgid "-35" msgstr "-35" msgid "-4" msgstr "-4" msgid "-40" msgstr "-40" msgid "-45" msgstr "-45" msgid "-5" msgstr "-5" msgid "-50" msgstr "-50" msgid "-55" msgstr "-55" msgid "-6" msgstr "-6" msgid "-60" msgstr "-60" msgid "-65" msgstr "-65" msgid "-7" msgstr "-7" msgid "-70" msgstr "-70" msgid "-75" msgstr "-75" msgid "-8" msgstr "-8" msgid "-80" msgstr "-80" msgid "-85" msgstr "-85" msgid "-9" msgstr "-9" msgid "-90" msgstr "-90" msgid "-95" msgstr "-95" msgid "0" msgstr "0" msgid "1" msgstr "1" msgid "1 inch/sec." msgstr "1 дюйм/Ñ" msgid "1.25x0.25\"" msgstr "1,25x0,25\"" msgid "1.25x2.25\"" msgstr "1,25x2,25\"" msgid "1.5 inch/sec." msgstr "1,5 дюйма/Ñ" msgid "1.50x0.25\"" msgstr "1,50x0,25\"" msgid "1.50x0.50\"" msgstr "1,50x0,50\"" msgid "1.50x1.00\"" msgstr "1,50x1,00\"" msgid "1.50x2.00\"" msgstr "1,50x2,00\"" msgid "10" msgstr "10" msgid "10 inches/sec." msgstr "10 дюймов/Ñ" msgid "10 x 11" msgstr "" msgid "10 x 13" msgstr "" msgid "10 x 14" msgstr "" msgid "100" msgstr "100" msgid "100 mm/sec." msgstr "100 мм/Ñ" msgid "105" msgstr "105" msgid "11" msgstr "11" msgid "11 inches/sec." msgstr "11 дюймов/Ñ" msgid "110" msgstr "110" msgid "115" msgstr "115" msgid "12" msgstr "12" msgid "12 inches/sec." msgstr "12 дюймов/Ñ" msgid "12 x 11" msgstr "" msgid "120" msgstr "120" msgid "120 mm/sec." msgstr "120 мм/Ñ" msgid "120x60dpi" msgstr "120x60dpi" msgid "120x72dpi" msgstr "120x72dpi" msgid "13" msgstr "13" msgid "136dpi" msgstr "136dpi" msgid "14" msgstr "14" msgid "15" msgstr "15" msgid "15 mm/sec." msgstr "15 мм/Ñ" msgid "15 x 11" msgstr "" msgid "150 mm/sec." msgstr "150 мм/Ñ" msgid "150dpi" msgstr "150dpi" msgid "16" msgstr "16" msgid "17" msgstr "17" msgid "18" msgstr "18" msgid "180dpi" msgstr "180dpi" msgid "19" msgstr "19" msgid "2" msgstr "2" msgid "2 inches/sec." msgstr "2 дюйма/Ñ" msgid "2-Hole Punch (Landscape)" msgstr "" msgid "2-Hole Punch (Portrait)" msgstr "" msgid "2-Hole Punch (Reverse Landscape)" msgstr "" msgid "2-Hole Punch (Reverse Portrait)" msgstr "" msgid "2-Sided Printing" msgstr "двуÑтороннÑÑ Ð¿ÐµÑ‡Ð°Ñ‚ÑŒ" msgid "2.00x0.37\"" msgstr "2,00x0,37\"" msgid "2.00x0.50\"" msgstr "2,00x0,50\"" msgid "2.00x1.00\"" msgstr "2,00x1,00\"" msgid "2.00x1.25\"" msgstr "2,00x1,25\"" msgid "2.00x2.00\"" msgstr "2,00x2,00\"" msgid "2.00x3.00\"" msgstr "2,00x3,00\"" msgid "2.00x4.00\"" msgstr "2,00x4,00\"" msgid "2.00x5.50\"" msgstr "2,00x5,50\"" msgid "2.25x0.50\"" msgstr "2,25x0,50\"" msgid "2.25x1.25\"" msgstr "2,25x1,25\"" msgid "2.25x4.00\"" msgstr "2,25x4,00\"" msgid "2.25x5.50\"" msgstr "2,25x5,50\"" msgid "2.38x5.50\"" msgstr "2,38x5,50\"" msgid "2.5 inches/sec." msgstr "2,5 дюйма/Ñ" msgid "2.50x1.00\"" msgstr "2,50x1,00\"" msgid "2.50x2.00\"" msgstr "2,50x2,00\"" msgid "2.75x1.25\"" msgstr "2,75x1,25\"" msgid "2.9 x 1\"" msgstr "2,9 x 1\"" msgid "20" msgstr "20" msgid "20 mm/sec." msgstr "20 мм/Ñ" msgid "200 mm/sec." msgstr "200 мм/Ñ" msgid "203dpi" msgstr "203dpi" msgid "21" msgstr "21" msgid "22" msgstr "22" msgid "23" msgstr "23" msgid "24" msgstr "24" msgid "24-Pin Series" msgstr "Тип 24-Pin" msgid "240x72dpi" msgstr "240x72dpi" msgid "25" msgstr "25" msgid "250 mm/sec." msgstr "250 мм/Ñ" msgid "26" msgstr "26" msgid "27" msgstr "27" msgid "28" msgstr "28" msgid "29" msgstr "29" msgid "3" msgstr "3" msgid "3 inches/sec." msgstr "3 дюйма/Ñ" msgid "3 x 5" msgstr "" msgid "3-Hole Punch (Landscape)" msgstr "" msgid "3-Hole Punch (Portrait)" msgstr "" msgid "3-Hole Punch (Reverse Landscape)" msgstr "" msgid "3-Hole Punch (Reverse Portrait)" msgstr "" msgid "3.00x1.00\"" msgstr "3,00x1,00\"" msgid "3.00x1.25\"" msgstr "3,00x1,25\"" msgid "3.00x2.00\"" msgstr "3,00x2,00\"" msgid "3.00x3.00\"" msgstr "3,00x3,00\"" msgid "3.00x5.00\"" msgstr "3,00x5,00\"" msgid "3.25x2.00\"" msgstr "3,25x2,00\"" msgid "3.25x5.00\"" msgstr "3,25x5,00\"" msgid "3.25x5.50\"" msgstr "3,25x5,50\"" msgid "3.25x5.83\"" msgstr "3,25x5,83\"" msgid "3.25x7.83\"" msgstr "3,25x7,83\"" msgid "3.5 x 5" msgstr "" msgid "3.5\" Disk" msgstr "ДиÑк 3.5\"" msgid "3.50x1.00\"" msgstr "3,50x1,00\"" msgid "30" msgstr "30" msgid "30 mm/sec." msgstr "30 мм/Ñ" msgid "300 mm/sec." msgstr "300 мм/Ñ" msgid "300dpi" msgstr "300dpi" msgid "35" msgstr "35" msgid "360dpi" msgstr "360dpi" msgid "360x180dpi" msgstr "360x180dpi" msgid "4" msgstr "4" msgid "4 inches/sec." msgstr "4 дюйма/Ñ" msgid "4-Hole Punch (Landscape)" msgstr "" msgid "4-Hole Punch (Portrait)" msgstr "" msgid "4-Hole Punch (Reverse Landscape)" msgstr "" msgid "4-Hole Punch (Reverse Portrait)" msgstr "" msgid "4.00x1.00\"" msgstr "4,00x1,00\"" msgid "4.00x13.00\"" msgstr "4,00x13,00\"" msgid "4.00x2.00\"" msgstr "4,00x2,00\"" msgid "4.00x2.50\"" msgstr "4,00x2,50\"" msgid "4.00x3.00\"" msgstr "4,00x3,00\"" msgid "4.00x4.00\"" msgstr "4,00x4,00\"" msgid "4.00x5.00\"" msgstr "4,00x5,00\"" msgid "4.00x6.00\"" msgstr "4,00x6,00\"" msgid "4.00x6.50\"" msgstr "4,00x6,50\"" msgid "40" msgstr "40" msgid "40 mm/sec." msgstr "40 мм/Ñ" msgid "45" msgstr "45" msgid "5" msgstr "5" msgid "5 inches/sec." msgstr "5 дюймов/Ñ" msgid "5 x 7" msgstr "" msgid "50" msgstr "50" msgid "55" msgstr "55" msgid "6" msgstr "6" msgid "6 inches/sec." msgstr "6 дюймов/Ñ" msgid "6.00x1.00\"" msgstr "6,00x1,00\"" msgid "6.00x2.00\"" msgstr "6,00x2,00\"" msgid "6.00x3.00\"" msgstr "6,00x3,00\"" msgid "6.00x4.00\"" msgstr "6,00x4,00\"" msgid "6.00x5.00\"" msgstr "6,00x5,00\"" msgid "6.00x6.00\"" msgstr "6,00x6,00\"" msgid "6.00x6.50\"" msgstr "6,00x6,50\"" msgid "60" msgstr "60" msgid "60 mm/sec." msgstr "60 мм/Ñ" msgid "600dpi" msgstr "600dpi" msgid "60dpi" msgstr "60dpi" msgid "60x72dpi" msgstr "" msgid "65" msgstr "65" msgid "7" msgstr "7" msgid "7 inches/sec." msgstr "7 дюймов/Ñ" msgid "7 x 9" msgstr "" msgid "70" msgstr "70" msgid "75" msgstr "75" msgid "8" msgstr "8" msgid "8 inches/sec." msgstr "8 дюймов/Ñ" msgid "8 x 10" msgstr "" msgid "8.00x1.00\"" msgstr "8,00x1,00\"" msgid "8.00x2.00\"" msgstr "8,00x2,00\"" msgid "8.00x3.00\"" msgstr "8,00x3,00\"" msgid "8.00x4.00\"" msgstr "8,00x4,00\"" msgid "8.00x5.00\"" msgstr "8,00x5,00\"" msgid "8.00x6.00\"" msgstr "8,00x6,00\"" msgid "8.00x6.50\"" msgstr "8,00x6,50\"" msgid "80" msgstr "80" msgid "80 mm/sec." msgstr "80 мм/Ñ" msgid "85" msgstr "85" msgid "9" msgstr "9" msgid "9 inches/sec." msgstr "9 дюймов/Ñ" msgid "9 x 11" msgstr "" msgid "9 x 12" msgstr "" msgid "9-Pin Series" msgstr "Тип 9-Pin" msgid "90" msgstr "90" msgid "95" msgstr "95" msgid "?Invalid help command unknown." msgstr "" msgid "A Samba password is required to export printer drivers" msgstr "Ð”Ð»Ñ ÑкÑпорта драйверов принтера требуетÑÑ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ Samba" msgid "A Samba username is required to export printer drivers" msgstr "Ð”Ð»Ñ ÑкÑпорта драйверов принтера требуетÑÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Samba" #, c-format msgid "A class named \"%s\" already exists." msgstr "Группа Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ \"%s\" уже ÑущеÑтвует." #, c-format msgid "A printer named \"%s\" already exists." msgstr "Принтер Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ \"%s\" уже ÑущеÑтвует." msgid "A0" msgstr "A0" msgid "A0 Long Edge" msgstr "" msgid "A1" msgstr "A1" msgid "A1 Long Edge" msgstr "" msgid "A10" msgstr "A10" msgid "A2" msgstr "A2" msgid "A2 Long Edge" msgstr "" msgid "A3" msgstr "A3" msgid "A3 Long Edge" msgstr "" msgid "A3 Oversize" msgstr "" msgid "A3 Oversize Long Edge" msgstr "" msgid "A4" msgstr "A4" msgid "A4 Long Edge" msgstr "" msgid "A4 Oversize" msgstr "" msgid "A4 Small" msgstr "" msgid "A5" msgstr "A5" msgid "A5 Long Edge" msgstr "" msgid "A5 Oversize" msgstr "" msgid "A6" msgstr "A6" msgid "A6 Long Edge" msgstr "" msgid "A7" msgstr "A7" msgid "A8" msgstr "A8" msgid "A9" msgstr "A9" msgid "ANSI A" msgstr "ANSI A" msgid "ANSI B" msgstr "ANSI B" msgid "ANSI C" msgstr "ANSI C" msgid "ANSI D" msgstr "ANSI D" msgid "ANSI E" msgstr "ANSI E" msgid "ARCH C" msgstr "ARCH C" msgid "ARCH C Long Edge" msgstr "" msgid "ARCH D" msgstr "ARCH D" msgid "ARCH D Long Edge" msgstr "" msgid "ARCH E" msgstr "ARCH E" msgid "ARCH E Long Edge" msgstr "" msgid "Accept Jobs" msgstr "ПринÑть заданиÑ" msgid "Accepted" msgstr "ПринÑто" msgid "Accordian Fold" msgstr "" msgid "Add Class" msgstr "Добавить группу" msgid "Add Printer" msgstr "Добавить принтер" msgid "Add RSS Subscription" msgstr "Добавить подпиÑку на RSS" msgid "Address" msgstr "ÐдреÑ" msgid "Administration" msgstr "ÐдминиÑтрирование" msgid "Advanced Photo Paper" msgstr "" msgid "Alternate" msgstr "" msgid "Alternate Roll" msgstr "" msgid "Aluminum" msgstr "" msgid "Always" msgstr "Ð’Ñегда" msgid "AppSocket/HP JetDirect" msgstr "AppSocket/HP JetDirect" msgid "Applicator" msgstr "ИÑполнительное уÑтройÑтво" msgid "Archival Envelope" msgstr "" msgid "Archival Fabric" msgstr "" msgid "Archival Paper" msgstr "" msgid "Archival Photo Paper" msgstr "" #, c-format msgid "Attempt to set %s printer-state to bad value %d." msgstr "Попытка уÑтановить %s printer-state на неверное значение %d" #, c-format msgid "Attribute \"%s\" is in the wrong group." msgstr "" #, c-format msgid "Attribute \"%s\" is the wrong value type." msgstr "" #, c-format msgid "Attribute groups are out of order (%x < %x)." msgstr "Ðтрибут группы не в диапазоне (%x < %x)" msgid "Automatic" msgstr "" msgid "B0" msgstr "B0" msgid "B1" msgstr "B1" msgid "B10" msgstr "B10" msgid "B2" msgstr "B2" msgid "B3" msgstr "B3" msgid "B4" msgstr "B4" msgid "B5" msgstr "B5" msgid "B5 Oversize" msgstr "" msgid "B6" msgstr "B6" msgid "B7" msgstr "B7" msgid "B8" msgstr "B8" msgid "B9" msgstr "B9" msgid "Back Print Film" msgstr "" #, c-format msgid "Bad 'document-format' value \"%s\"." msgstr "" msgid "Bad NULL dests pointer" msgstr "Ðеверный указатель NULL dests" msgid "Bad OpenGroup" msgstr "Ðеверное значение OpenGroup" msgid "Bad OpenUI/JCLOpenUI" msgstr "Ðеверное значение OpenUI/JCLOpenUI" msgid "Bad OrderDependency" msgstr "Ðеверное значение OrderDependency" msgid "Bad PPD cache file." msgstr "" msgid "Bad PPD file." msgstr "" msgid "Bad Request" msgstr "Ðеверный запроÑ" msgid "Bad SNMP version number" msgstr "Ðеверный номер верÑии SNMP" msgid "Bad UIConstraints" msgstr "Ðеверное значение UIConstraints" msgid "Bad arguments to function" msgstr "Ðеверные аргументы Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸" #, c-format msgid "Bad copies value %d." msgstr "Ðеверное значение количеÑтва копий %d." msgid "Bad custom parameter" msgstr "Ðеверный индивидуальный параметр" #, c-format msgid "Bad device-uri \"%s\"." msgstr "Ðеверное значение device-uri \"%s\"." #, c-format msgid "Bad device-uri scheme \"%s\"." msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñхема device-uri \"%s\"." #, c-format msgid "Bad document-format \"%s\"." msgstr "Ðеверное значение document-format \"%s\"." #, c-format msgid "Bad document-format-default \"%s\"." msgstr "Ðеверное значение document-format-default \"%s\"." msgid "Bad filename buffer" msgstr "Ошибка в буфере filename" msgid "Bad hostname/address in URI" msgstr "Ðеверный hostname/address в URI" #, c-format msgid "Bad job-name value: %s" msgstr "Ðеверное значение job-name: %s" msgid "Bad job-name value: Wrong type or count." msgstr "Ðеверное значение job-name: Wrong type or count." msgid "Bad job-priority value." msgstr "Ðеверное значение job-priority." #, c-format msgid "Bad job-sheets value \"%s\"." msgstr "Ðеверное значение job-sheets \"%s\"." msgid "Bad job-sheets value type." msgstr "Ðеверный тип Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ job-sheets." msgid "Bad job-state value." msgstr "Ðеверное значение job-state." #, c-format msgid "Bad job-uri \"%s\"." msgstr "Ðеверный job-uri \"%s\"." #, c-format msgid "Bad notify-pull-method \"%s\"." msgstr "Ðеверное значение notify-pull-method \"%s\"." #, c-format msgid "Bad notify-recipient-uri \"%s\"." msgstr "Ðеверный notify-recipient-uri \"%s\"." #, c-format msgid "Bad number-up value %d." msgstr "Ðеверное значение number-up %d." #, c-format msgid "Bad option + choice on line %d." msgstr "Ðеверный параметр + выбор в Ñтроке %d." #, c-format msgid "Bad page-ranges values %d-%d." msgstr "Ðеверные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ page-ranges %d-%d." msgid "Bad port number in URI" msgstr "Ðеверный номер порта в URI" #, c-format msgid "Bad port-monitor \"%s\"." msgstr "Ðеверное значение port-monitor \"%s\"." #, c-format msgid "Bad printer-state value %d." msgstr "Ðеверное значение printer-state %d." msgid "Bad printer-uri." msgstr "Ðеверное значение printer-uri" #, c-format msgid "Bad request ID %d." msgstr "Ðеверный ID запроÑа %d." #, c-format msgid "Bad request version number %d.%d." msgstr "Ðеверный номер верÑии запроÑа %d.%d." #, c-format msgid "Bad requesting-user-name value: %s" msgstr "" msgid "Bad resource in URI" msgstr "" msgid "Bad scheme in URI" msgstr "" msgid "Bad subscription ID" msgstr "Ðеверный ID подпиÑки" msgid "Bad username in URI" msgstr "Ðеверное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² URI" msgid "Bad value string" msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñтрока значений" msgid "Bad/empty URI" msgstr "Ðеверный или пуÑтой URI" msgid "Bale" msgstr "" msgid "Banners" msgstr "Баннеры" msgid "Bind" msgstr "" msgid "Bind (Landscape)" msgstr "" msgid "Bind (Portrait)" msgstr "" msgid "Bind (Reverse Landscape)" msgstr "" msgid "Bind (Reverse Portrait)" msgstr "" msgid "Bond Envelope" msgstr "" msgid "Bond Paper" msgstr "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð½Ð°Ñ Ð±ÑƒÐ¼Ð°Ð³Ð°" msgid "Booklet" msgstr "" msgid "Booklet Maker" msgstr "" #, c-format msgid "Boolean expected for waiteof option \"%s\"." msgstr "Параметр waiteof \"%s\" должен иметь двоичное значение" msgid "Bottom" msgstr "" msgid "Bottom Tray" msgstr "" msgid "Buffer overflow detected, aborting." msgstr "Обнаружено переполнение буфера, прерывание." msgid "CD" msgstr "" msgid "CMYK" msgstr "CMYK" msgid "CPCL Label Printer" msgstr "Принтер Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸ Ñтикеток CPCL" msgid "Cancel Jobs" msgstr "Отменить заданиÑ" msgid "Cancel RSS Subscription" msgstr "Отменить подпиÑку на RSS" msgid "Canceling print job." msgstr "Отмена Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸." msgid "Cannot change printer-is-shared for remote queues." msgstr "" msgid "Cannot share a remote Kerberized printer." msgstr "" msgid "Cardboard" msgstr "" msgid "Cardstock" msgstr "" msgid "Cassette" msgstr "Лоток" msgid "Center" msgstr "" msgid "Center Tray" msgstr "" msgid "Change Settings" msgstr "Изменить наÑтройки" #, c-format msgid "Character set \"%s\" not supported." msgstr "Ðабор Ñимволов \"%s\" не поддерживаетÑÑ." msgid "Classes" msgstr "Группы" msgid "Clean Print Heads" msgstr "ОчиÑтить головки принтера" msgid "Close-Job doesn't support the job-uri attribute." msgstr "Close-Job не подерживает атрибут job-uri" msgid "Coat" msgstr "" msgid "Coated Envelope" msgstr "" msgid "Coated Paper" msgstr "" msgid "Color" msgstr "Цвет" msgid "Color Mode" msgstr "Цветной режим" msgid "Colored Labels" msgstr "" msgid "" "Commands may be abbreviated. Commands are:\n" "\n" "exit help quit status ?" msgstr "" "Команды могут быть Ñокращены. Команды:\n" "\n" "exit help quit status ?" msgid "Community name uses indefinite length" msgstr "Ð”Ð»Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÑообщеÑтва длина не уÑтановлена" msgid "Connected to printer." msgstr "Подключен к принтеру." msgid "Connecting to printer." msgstr "Подключение к принтеру" msgid "Continue" msgstr "Продолжить" msgid "Continuous" msgstr "Ðепрерывно" msgid "Continuous Long" msgstr "" msgid "Continuous Short" msgstr "" msgid "Control file sent successfully." msgstr "Контрольный файл уÑпешно отправлен." msgid "Copying print data." msgstr "Копирование данных печати." msgid "Cotton Envelope" msgstr "" msgid "Cotton Paper" msgstr "" msgid "Cover" msgstr "" msgid "Created" msgstr "Создано" msgid "Credentials do not validate against site CA certificate." msgstr "" msgid "Credentials have expired." msgstr "" msgid "Custom" msgstr "Индивидуальный" msgid "CustominCutInterval" msgstr "CustominCutInterval" msgid "CustominTearInterval" msgstr "CustominTearInterval" msgid "Cut" msgstr "Обрезать" msgid "Cut Media" msgstr "" msgid "Cutter" msgstr "Резак" msgid "DVD" msgstr "" msgid "Dark" msgstr "Темный" msgid "Darkness" msgstr "ЗатемненноÑть" msgid "Data file sent successfully." msgstr "Файл данных уÑпешно отправлен." msgid "Deep Color" msgstr "" msgid "Delete Class" msgstr "Удалить группу" msgid "Delete Printer" msgstr "Удалить принтер" msgid "DeskJet Series" msgstr "Ð¡ÐµÑ€Ð¸Ñ DeskJet" #, c-format msgid "Destination \"%s\" is not accepting jobs." msgstr "Ðазначение «%s» не принимает заданиÑ." #, c-format msgid "" "Device: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s" msgstr "" msgid "Direct Thermal Media" msgstr "ÐоÑитель Ð´Ð»Ñ Ñ‚ÐµÑ€Ð¼Ð¾Ð¿ÐµÑ‡Ð°Ñ‚Ð¸" #, c-format msgid "Directory \"%s\" contains a relative path." msgstr "Каталог \"%s\" Ñодержит отноÑительный путь." #, c-format msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "Каталог \"%s\" имеет небезопаÑные права доÑтупа (0%o/uid=%d/gid=%d)." #, c-format msgid "Directory \"%s\" is a file." msgstr "Каталог \"%s\" Ñто файл." #, c-format msgid "Directory \"%s\" not available: %s" msgstr "Каталог \"%s\" недоÑтупен: %s" #, c-format msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "Каталог \"%s\" доÑтуп OK (0%o/uid=%d/gid=%d)." msgid "Disabled" msgstr "Отключено" msgid "Disc" msgstr "" #, c-format msgid "Document #%d does not exist in job #%d." msgstr "Документ #%d не ÑущеÑтвует в задании #%d." msgid "Double Gate Fold" msgstr "" msgid "Double Staple (Landscape)" msgstr "" msgid "Double Staple (Portrait)" msgstr "" msgid "Double Staple (Reverse Landscape)" msgstr "" msgid "Double Staple (Reverse Portrait)" msgstr "" msgid "Double Wall Cardboard" msgstr "" msgid "Draft" msgstr "" msgid "Dry Film" msgstr "" msgid "Duplexer" msgstr "ДуплекÑер" msgid "Dymo" msgstr "Dymo" msgid "EPL1 Label Printer" msgstr "Принтер Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸ Ñтикеток EPL1" msgid "EPL2 Label Printer" msgstr "Принтер Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸ Ñтикеток EPL2" msgid "Edit Configuration File" msgstr "Редактировать файл конфигурации" msgid "Embossing Foil" msgstr "" msgid "Empty PPD file." msgstr "ПуÑтой PPD файл." msgid "Encryption is not supported." msgstr "Шифрование не поддерживаетÑÑ." msgid "End Board" msgstr "" #. TRANSLATORS: Banner/cover sheet after the print job. msgid "Ending Banner" msgstr "Конечный баннер" msgid "Engineering Z Fold" msgstr "" msgid "English" msgstr "Russian" msgid "" "Enter your username and password or the root username and password to access " "this page. If you are using Kerberos authentication, make sure you have a " "valid Kerberos ticket." msgstr "" "Введите Ñвое Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ пароль или данные учетной запиÑи root, чтобы " "получить доÑтуп к Ñтой Ñтранице. ЕÑли иÑпользуетÑÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° подлинноÑти " "Kerberos, необходимо также иметь дейÑтвительный билет Kerberos." msgid "Envelope" msgstr "" msgid "Envelope #10" msgstr "" msgid "Envelope #11" msgstr "" msgid "Envelope #12" msgstr "" msgid "Envelope #14" msgstr "" msgid "Envelope #9" msgstr "" msgid "Envelope B4" msgstr "" msgid "Envelope B5" msgstr "" msgid "Envelope B6" msgstr "" msgid "Envelope C0" msgstr "" msgid "Envelope C1" msgstr "" msgid "Envelope C2" msgstr "" msgid "Envelope C3" msgstr "" msgid "Envelope C4" msgstr "" msgid "Envelope C5" msgstr "" msgid "Envelope C6" msgstr "" msgid "Envelope C65" msgstr "" msgid "Envelope C7" msgstr "" msgid "Envelope Choukei 3" msgstr "" msgid "Envelope Choukei 3 Long Edge" msgstr "" msgid "Envelope Choukei 4" msgstr "" msgid "Envelope Choukei 4 Long Edge" msgstr "" msgid "Envelope DL" msgstr "" msgid "Envelope Feed" msgstr "Подача конвертов" msgid "Envelope Invite" msgstr "" msgid "Envelope Italian" msgstr "" msgid "Envelope Kaku2" msgstr "" msgid "Envelope Kaku2 Long Edge" msgstr "" msgid "Envelope Kaku3" msgstr "" msgid "Envelope Kaku3 Long Edge" msgstr "" msgid "Envelope Monarch" msgstr "" msgid "Envelope PRC1" msgstr "" msgid "Envelope PRC1 Long Edge" msgstr "" msgid "Envelope PRC10" msgstr "" msgid "Envelope PRC10 Long Edge" msgstr "" msgid "Envelope PRC2" msgstr "" msgid "Envelope PRC2 Long Edge" msgstr "" msgid "Envelope PRC3" msgstr "" msgid "Envelope PRC3 Long Edge" msgstr "" msgid "Envelope PRC4" msgstr "" msgid "Envelope PRC4 Long Edge" msgstr "" msgid "Envelope PRC5 Long Edge" msgstr "" msgid "Envelope PRC5PRC5" msgstr "" msgid "Envelope PRC6" msgstr "" msgid "Envelope PRC6 Long Edge" msgstr "" msgid "Envelope PRC7" msgstr "" msgid "Envelope PRC7 Long Edge" msgstr "" msgid "Envelope PRC8" msgstr "" msgid "Envelope PRC8 Long Edge" msgstr "" msgid "Envelope PRC9" msgstr "" msgid "Envelope PRC9 Long Edge" msgstr "" msgid "Envelope Personal" msgstr "" msgid "Envelope You4" msgstr "" msgid "Envelope You4 Long Edge" msgstr "" msgid "Environment Variables:" msgstr "" msgid "Epson" msgstr "Epson" msgid "Error Policy" msgstr "Политика ошибок" msgid "Error reading raster data." msgstr "" msgid "Error sending raster data." msgstr "Ошибка отправки данных раÑтра." msgid "Error: need hostname after \"-h\" option." msgstr "ERROR: ТребуетÑÑ Ð¸Ð¼Ñ Ñ…Ð¾Ñта поÑле параметра \"-h\"" msgid "European Fanfold" msgstr "" msgid "European Fanfold Legal" msgstr "" msgid "Every 10 Labels" msgstr "Каждые 10 Ñтикеток" msgid "Every 2 Labels" msgstr "Каждые 2 Ñтикетки" msgid "Every 3 Labels" msgstr "Каждые 3 Ñтикетки" msgid "Every 4 Labels" msgstr "Каждые 4 Ñтикетки" msgid "Every 5 Labels" msgstr "Каждые 5 Ñтикеток" msgid "Every 6 Labels" msgstr "Каждые 6 Ñтикеток" msgid "Every 7 Labels" msgstr "Каждые 7 Ñтикеток" msgid "Every 8 Labels" msgstr "Каждые 8 Ñтикеток" msgid "Every 9 Labels" msgstr "Каждые 9 Ñтикеток" msgid "Every Label" msgstr "ÐšÐ°Ð¶Ð´Ð°Ñ Ñтикетка" msgid "Everyday Glossy Photo Paper" msgstr "" msgid "Everyday Matte Paper" msgstr "" msgid "Executive" msgstr "Executive" msgid "Expectation Failed" msgstr "Сбой ожиданиÑ" msgid "Export Printers to Samba" msgstr "ЭкÑпортировать принтеры в Samba" msgid "Expressions:" msgstr "Выражение:" msgid "Extra Heavyweight Paper" msgstr "" msgid "FAIL" msgstr "FAIL" msgid "Fabric" msgstr "" msgid "Face Down" msgstr "" msgid "Face Up" msgstr "" msgid "Fast Grayscale" msgstr "" #, c-format msgid "File \"%s\" contains a relative path." msgstr "Файл \"%s\" Ñодержит отноÑительный путь." #, c-format msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "Файл \"%s\" имеет небезопаÑные права доÑтупа (0%o/uid=%d/gid=%d)." #, c-format msgid "File \"%s\" is a directory." msgstr "Файл \"%s\" ÑвлÑетÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼." #, c-format msgid "File \"%s\" not available: %s" msgstr "Файл \"%s\" недоÑтупен: %s" #, c-format msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "Файл \"%s\" права доÑтупа OK (0%o/uid=%d/gid=%d)." msgid "File Folder" msgstr "" #, c-format msgid "" "File device URIs have been disabled. To enable, see the FileDevice directive " "in \"%s/cups-files.conf\"." msgstr "" "URI-адреÑа файлового уÑтройÑтва отключены! Чтобы включить их, иÑпользуйте " "параметр FileDevice в \"%s/cups-files.conf\"." msgid "Film" msgstr "" msgid "Fine Envelope" msgstr "" #, c-format msgid "Finished page %d." msgstr "ПоÑледнÑÑ Ñтраница %d." msgid "Flexo Base" msgstr "" msgid "Flexo Photo Polymer" msgstr "" msgid "Flute" msgstr "" msgid "Foil" msgstr "" msgid "Fold" msgstr "" msgid "Folio" msgstr "Фолио" msgid "Forbidden" msgstr "Запрещено" msgid "Found" msgstr "" msgid "Full Cut Tabs" msgstr "" msgid "Gate Fold" msgstr "" msgid "General" msgstr "ОÑновные" msgid "Generic" msgstr "Общее" msgid "Get-Response-PDU uses indefinite length" msgstr "Ð”Ð»Ñ Get-Response-PDU длина не уÑтановлена" msgid "Glass" msgstr "" msgid "Glass Colored" msgstr "" msgid "Glass Opaque" msgstr "" msgid "Glass Surfaced" msgstr "" msgid "Glass Textured" msgstr "" msgid "Glossy Brochure Paper" msgstr "" msgid "Glossy Fabric" msgstr "" msgid "Glossy Labels" msgstr "" msgid "Glossy Optical Disc" msgstr "" msgid "Glossy Paper" msgstr "ГлÑÐ½Ñ†ÐµÐ²Ð°Ñ Ð±ÑƒÐ¼Ð°Ð³Ð°" msgid "Glossy Photo Paper" msgstr "" msgid "Got a printer-uri attribute but no job-id." msgstr "Получен атрибут printer-uri, но не job-id" msgid "Gravure Cylinder" msgstr "" msgid "Grayscale" msgstr "Оттенки Ñерого" msgid "HP" msgstr "HP" msgid "Hagaki" msgstr "" msgid "Half Fold" msgstr "" msgid "Half Z Fold" msgstr "" msgid "Hanging Folder" msgstr "Папка подвеÑного хранениÑ" msgid "Hash buffer too small." msgstr "" msgid "Heavyweight Coated Paper" msgstr "" msgid "Heavyweight Envelope" msgstr "" msgid "Heavyweight Paper" msgstr "" msgid "Help file not in index." msgstr "Файл Ñправки не проиндекÑирован." msgid "High" msgstr "" msgid "High Gloss Fabric" msgstr "" msgid "High Gloss Labels" msgstr "" msgid "High Gloss Optical Disc" msgstr "" msgid "High Gloss Photo Paper" msgstr "" msgid "IPP 1setOf attribute with incompatible value tags." msgstr "IPP атрибут 1setOf Ñ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑтимым значением." msgid "IPP attribute has no name." msgstr "IPP атрибут не имеет имени." msgid "IPP attribute is not a member of the message." msgstr "IPP атрибут не входит в ÑоÑтав ÑообщениÑ." msgid "IPP begCollection value not 0 bytes." msgstr "IPP значение begCollection не 0 байт." msgid "IPP boolean value not 1 byte." msgstr "IPP двоичное значение не 1 байт." msgid "IPP date value not 11 bytes." msgstr "IPP длина даты не 11 байтов." msgid "IPP endCollection value not 0 bytes." msgstr "IPP значение endCollection не 0 байт." msgid "IPP enum value not 4 bytes." msgstr "IPP значение enum не 4 байта." msgid "IPP extension tag larger than 0x7FFFFFFF." msgstr "IPP extension tag больше чем 0x7FFFFFFF." msgid "IPP integer value not 4 bytes." msgstr "IPP тип integer не 4 байта" msgid "IPP language length overflows value." msgstr "IPP переполнение Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ language length" msgid "IPP language length too large." msgstr "IPP language length Ñлишком длинное." msgid "IPP member name is not empty." msgstr "IPP member name не пуÑтое." msgid "IPP memberName value is empty." msgstr "IPP memberName пуÑтое значение." msgid "IPP memberName with no attribute." msgstr "IPP memberName без атрибута." msgid "IPP name larger than 32767 bytes." msgstr "IPP Ð¸Ð¼Ñ Ð±Ð¾Ð»ÑŒÑˆÐµ чем 32767 байт." msgid "IPP nameWithLanguage value less than minimum 4 bytes." msgstr "IPP значение nameWithLanguage меньше минимума 4 байт." msgid "IPP octetString length too large." msgstr "IPP octetString Ñлишком длинное." msgid "IPP rangeOfInteger value not 8 bytes." msgstr "IPP rangeOfInteger значение не 8 байт." msgid "IPP resolution value not 9 bytes." msgstr "IPP resolution значение не 9 байт." msgid "IPP string length overflows value." msgstr "IPP переполнение Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ string length." msgid "IPP textWithLanguage value less than minimum 4 bytes." msgstr "IPP textWithLanguage меньше минимума 4 байт." msgid "IPP value larger than 32767 bytes." msgstr "IPP значение больше чем 32767 байт." msgid "ISOLatin1" msgstr "UTF-8" msgid "Illegal control character" msgstr "ÐедейÑтвительный контрольный Ñимвол" msgid "Illegal main keyword string" msgstr "ÐедейÑÑ‚Ð²Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¾ÑÐ½Ð¾Ð²Ð½Ð°Ñ Ñтрока ключевых Ñлов" msgid "Illegal option keyword string" msgstr "ÐедейÑÑ‚Ð²Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñтрока ключевых Ñлов параметра" msgid "Illegal translation string" msgstr "ÐедейÑтвительный перевод" msgid "Illegal whitespace character" msgstr "ÐедейÑтвительный Ñимвол пробела" msgid "Image Setter Paper" msgstr "" msgid "Imaging Cylinder" msgstr "" msgid "Inkjet Envelope" msgstr "" msgid "Inkjet Labels" msgstr "" msgid "Inkjet Paper" msgstr "" msgid "Installable Options" msgstr "Параметры, разрешенные к уÑтановке" msgid "Installed" msgstr "УÑтановлено" msgid "IntelliBar Label Printer" msgstr "Принтер Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸ Ñтикеток IntelliBar" msgid "Intellitech" msgstr "Intellitech" msgid "Internal Server Error" msgstr "ВнутреннÑÑ ÐžÑˆÐ¸Ð±ÐºÐ° Ñервера" msgid "Internal error" msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°" msgid "Internet Postage 2-Part" msgstr "Ðаклейки Internet Postage 2-Part" msgid "Internet Postage 3-Part" msgstr "Ðаклейки Internet Postage 3-Part" msgid "Internet Printing Protocol" msgstr "Протокол интернет-печати" msgid "Invalid media name arguments." msgstr "Ðеверные аргументы имени бумаги." msgid "Invalid media size." msgstr "Ðеверный размер бумаги." msgid "Invalid ppd-name value." msgstr "" #, c-format msgid "Invalid printer command \"%s\"." msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° принтера \"%s\"." msgid "JCL" msgstr "JCL" msgid "JIS B0" msgstr "" msgid "JIS B1" msgstr "" msgid "JIS B10" msgstr "" msgid "JIS B2" msgstr "" msgid "JIS B3" msgstr "" msgid "JIS B4" msgstr "" msgid "JIS B4 Long Edge" msgstr "" msgid "JIS B5" msgstr "" msgid "JIS B5 Long Edge" msgstr "" msgid "JIS B6" msgstr "" msgid "JIS B6 Long Edge" msgstr "" msgid "JIS B7" msgstr "" msgid "JIS B8" msgstr "" msgid "JIS B9" msgstr "" #, c-format msgid "Job #%d cannot be restarted - no files." msgstr "Задание #%d не может быть перезапущено - отÑутÑтвуют файлы." #, c-format msgid "Job #%d does not exist." msgstr "Задание #%d не ÑущеÑтвует." #, c-format msgid "Job #%d is already aborted - can't cancel." msgstr "Задание #%d уже прервано – не удаетÑÑ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #, c-format msgid "Job #%d is already canceled - can't cancel." msgstr "Задание #%d уже отменено – не удаетÑÑ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #, c-format msgid "Job #%d is already completed - can't cancel." msgstr "Задание #%d уже завершено – не удаетÑÑ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #, c-format msgid "Job #%d is finished and cannot be altered." msgstr "Задание #%d завершено и не может быть изменено." #, c-format msgid "Job #%d is not complete." msgstr "Задание #%d не завершено." #, c-format msgid "Job #%d is not held for authentication." msgstr "Задание #%d не задержано Ð´Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸." #, c-format msgid "Job #%d is not held." msgstr "Задание #%d не задержано." msgid "Job Completed" msgstr "Задание завершено" msgid "Job Created" msgstr "Задание Ñоздано" msgid "Job Options Changed" msgstr "Параметры Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ‹" msgid "Job Stopped" msgstr "Задание оÑтановлено" msgid "Job is completed and cannot be changed." msgstr "Задание завершено и не может быть изменено." msgid "Job operation failed" msgstr "Сбой операции заданиÑ." msgid "Job state cannot be changed." msgstr "СоÑтоÑние Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð½Ðµ может быть изменено." msgid "Job subscriptions cannot be renewed." msgstr "ПодпиÑки на задание не могут быть обновлены." msgid "Jobs" msgstr "ЗаданиÑ" msgid "Jog" msgstr "" msgid "LPD/LPR Host or Printer" msgstr "ХоÑÑ‚ или принтер LPD/LPR" msgid "Label Printer" msgstr "Принтер Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸ Ñтикеток" msgid "Label Top" msgstr "Верхний край Ñтикетки" msgid "Labels" msgstr "" msgid "Laminate" msgstr "" msgid "Laminating Foil" msgstr "" #, c-format msgid "Language \"%s\" not supported." msgstr "Язык \"%s\" не поддерживаетÑÑ." msgid "Large Address" msgstr "Полный адреÑ" msgid "Large Capacity" msgstr "" msgid "Large Capacity Tray" msgstr "" msgid "LaserJet Series PCL 4/5" msgstr "Ð¡ÐµÑ€Ð¸Ñ LaserJet, PCL 4/5" msgid "Left" msgstr "" msgid "Left Gate Fold" msgstr "" msgid "Left Tray" msgstr "" msgid "Letter Fold" msgstr "" msgid "Letter Oversize" msgstr "" msgid "Letter Oversize Long Edge" msgstr "" msgid "Letterhead" msgstr "" msgid "Light" msgstr "Светлый" msgid "Lightweight Envelope" msgstr "" msgid "Lightweight Paper" msgstr "" msgid "Line longer than the maximum allowed (255 characters)" msgstr "Строка длиннее разрешенного предела (255 Ñимволов)" msgid "List Available Printers" msgstr "СпиÑок доÑтупных принтеров" msgid "Load paper." msgstr "Загрузка бумаги." msgid "Local printer created." msgstr "" msgid "Long-Edge (Portrait)" msgstr "По длинной Ñтороне (книжнаÑ)" msgid "Looking for printer." msgstr "ПоиÑк принтера." msgid "Mailbox 1" msgstr "" msgid "Mailbox 10" msgstr "" msgid "Mailbox 2" msgstr "" msgid "Mailbox 3" msgstr "" msgid "Mailbox 4" msgstr "" msgid "Mailbox 5" msgstr "" msgid "Mailbox 6" msgstr "" msgid "Mailbox 7" msgstr "" msgid "Mailbox 8" msgstr "" msgid "Mailbox 9" msgstr "" msgid "Main" msgstr "" msgid "Main Roll" msgstr "" msgid "Manual" msgstr "" msgid "Manual Feed" msgstr "Ð ÑƒÑ‡Ð½Ð°Ñ Ð¿Ð¾Ð´Ð°Ñ‡Ð°" msgid "Matte Brochure Paper" msgstr "" msgid "Matte Cover Paper" msgstr "" msgid "Matte Fabric" msgstr "" msgid "Matte Labels" msgstr "" msgid "Matte Optical Disc" msgstr "" msgid "Matte Photo Paper" msgstr "" msgid "Media Size" msgstr "Размер бумаги" msgid "Media Source" msgstr "ИÑточник бумаги" msgid "Media Tracking" msgstr "Контроль подачи бумаги" msgid "Media Type" msgstr "Тип бумаги" msgid "Medium" msgstr "Средний" msgid "Memory allocation error" msgstr "Ошибка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти" msgid "Metal" msgstr "" msgid "Metal Glossy" msgstr "" msgid "Metal High Gloss" msgstr "" msgid "Metal Matte" msgstr "" msgid "Metal Satin" msgstr "" msgid "Metal Semi Gloss" msgstr "" msgid "Mid-Weight Paper" msgstr "" msgid "Middle" msgstr "" msgid "Missing CloseGroup" msgstr "Пропущен CloseGroup" msgid "Missing PPD-Adobe-4.x header" msgstr "ОтÑутÑтвует заголовок PPD-Adobe-4.x" msgid "Missing asterisk in column 1" msgstr "ОтÑутÑтвует звездочка в колонке 1" msgid "Missing document-number attribute." msgstr "ОтÑутÑтвует атрибут document-number" #, c-format msgid "Missing double quote on line %d." msgstr "ОтÑутÑтвует Ð´Ð²Ð¾Ð¹Ð½Ð°Ñ ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ° в Ñтроке %d" msgid "Missing form variable" msgstr "ОтÑутÑтвует Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ñ‹" msgid "Missing last-document attribute in request." msgstr "ОтÑутÑтвует атрибут last-document в запроÑе." msgid "Missing media or media-col." msgstr "ОтÑутÑтвует media или media-col." msgid "Missing media-size in media-col." msgstr "ОтÑутÑтвует media-size в media-col." msgid "Missing notify-subscription-ids attribute." msgstr "ОтÑутÑтвует атрибут notify-subscription-ids" msgid "Missing option keyword" msgstr "ОтÑутÑтвует ключевое Ñлово параметра" msgid "Missing requesting-user-name attribute." msgstr "ОтÑутÑтвует атрибут requesting-user-name." #, c-format msgid "Missing required attribute \"%s\"." msgstr "" msgid "Missing required attributes." msgstr "ОтÑутÑтвуют обÑзательные атрибуты." msgid "Missing resource in URI" msgstr "ОтÑутÑтвует resource в URI" msgid "Missing scheme in URI" msgstr "ОтÑутÑтвует scheme в URI" #, c-format msgid "Missing value on line %d." msgstr "ОтÑутÑтвует значение в Ñтроке %d." msgid "Missing value string" msgstr "ОтÑутÑтвует Ñтрока значениÑ" msgid "Missing x-dimension in media-size." msgstr "ОтÑутÑтвует x-dimension в media-size." msgid "Missing y-dimension in media-size." msgstr "ОтÑутÑтвует y-dimension в media-size." #, c-format msgid "" "Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgstr "" "Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgid "Modifiers:" msgstr "Управление:" msgid "Modify Class" msgstr "Изменить группу" msgid "Modify Printer" msgstr "Изменить принтер" msgid "Mounting Tape" msgstr "" msgid "Move All Jobs" msgstr "ПеремеÑтить вÑе заданиÑ" msgid "Move Job" msgstr "ПеремеÑтить задание" msgid "Moved Permanently" msgstr "Перемещено окончательно" msgid "Multi Layer" msgstr "" msgid "Multi Part Form" msgstr "" msgid "Multi-Hole Punch (Landscape)" msgstr "" msgid "Multi-Hole Punch (Portrait)" msgstr "" msgid "Multi-Hole Punch (Reverse Landscape)" msgstr "" msgid "Multi-Hole Punch (Reverse Portrait)" msgstr "" msgid "Multipurpose" msgstr "" msgid "Multipurpose Paper" msgstr "" msgid "My Mailbox" msgstr "" msgid "NULL PPD file pointer" msgstr "Указатель PPD-файла уÑтановлен на NULL" msgid "Name OID uses indefinite length" msgstr "Ð”Ð»Ñ Ð¸Ð¼ÐµÐ½Ð¸ OID длина не уÑтановлена" msgid "Nested classes are not allowed." msgstr "Вложенные группы не допуÑкаютÑÑ." msgid "Never" msgstr "Ðикогда" msgid "New credentials are not valid for name." msgstr "" msgid "New credentials are older than stored credentials." msgstr "" msgid "No" msgstr "Ðет" msgid "No Content" msgstr "Ðет Ñодержимого" msgid "No IPP attributes." msgstr "" msgid "No PPD name" msgstr "Ðет имени PPD" msgid "No VarBind SEQUENCE" msgstr "Ðет поÑледовательноÑти VarBind" msgid "No Windows printer drivers are installed." msgstr "Ðет уÑтановленных драйверов принтера Windows." msgid "No active connection" msgstr "Ðет рабочего подключениÑ" msgid "No active connection." msgstr "Ðет рабочего подключениÑ." #, c-format msgid "No active jobs on %s." msgstr "Ðет активных заданий на %s" msgid "No attributes in request." msgstr "Ðет атрибутов в запроÑе." msgid "No authentication information provided." msgstr "Ðет информации Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ подлинноÑти." msgid "No common name specified." msgstr "" msgid "No community name" msgstr "Ðет имени ÑообщеÑтва" msgid "No default printer." msgstr "Ðет принтера по умолчанию." msgid "No destinations added." msgstr "Ðет добавленных назначений." msgid "No device URI found in argv[0] or in DEVICE_URI environment variable." msgstr "" "Ðе обнаружено URI уÑтройÑтва в argv[0] или в переменной Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ DEVICE_URI" msgid "No error-index" msgstr "Ðет Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ error-index" msgid "No error-status" msgstr "Ðет Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ error-status" msgid "No file in print request." msgstr "Ðет файла в запроÑе на печать." msgid "No modification time" msgstr "Ðе указано Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ" msgid "No name OID" msgstr "Ðет имени OID" msgid "No pages were found." msgstr "Страницы не были найдены." msgid "No printer name" msgstr "Ðет имени принтера" msgid "No printer-uri found" msgstr "Ðе указан Ð°Ð´Ñ€ÐµÑ printer-uri" msgid "No printer-uri found for class" msgstr "Ðе указан Ð°Ð´Ñ€ÐµÑ printer-uri Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹" msgid "No printer-uri in request." msgstr "Ðет адреÑа printer-uri в запроÑе." msgid "No request URI." msgstr "Ðет запроÑа URI." msgid "No request protocol version." msgstr "Ðет запроÑа верÑии протокола." msgid "No request sent." msgstr "Ðе отправлен запроÑ." msgid "No request-id" msgstr "Ðет идентификатора request-id" msgid "No stored credentials, not valid for name." msgstr "" msgid "No subscription attributes in request." msgstr "Ðет атрибутов подпиÑки в запроÑе." msgid "No subscriptions found." msgstr "ПодпиÑки не найдены." msgid "No variable-bindings SEQUENCE" msgstr "Ðет поÑледовательноÑти variable-bindings" msgid "No version number" msgstr "Ðет номера верÑии" msgid "Non-continuous (Mark sensing)" msgstr "С прерыванием (Mark sensing)" msgid "Non-continuous (Web sensing)" msgstr "С прерыванием (Web sensing)" msgid "None" msgstr "" msgid "Normal" msgstr "Ðормальный" msgid "Not Found" msgstr "Ðе найден" msgid "Not Implemented" msgstr "Ðе реализовано" msgid "Not Installed" msgstr "Ðе уÑтановлено" msgid "Not Modified" msgstr "Ðе изменено" msgid "Not Supported" msgstr "Ðе поддерживаетÑÑ" msgid "Not allowed to print." msgstr "Ðе разрешено печатать." msgid "Note" msgstr "Примечание" msgid "" "Note: this program only validates the DSC comments, not the PostScript " "itself." msgstr "" "Примечание: Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° проверÑет только комментарии DSC, а не Ñам " "PostScript." msgid "OK" msgstr "ОК" msgid "Off (1-Sided)" msgstr "Выкл. (1-ÑтороннÑÑ Ð¿ÐµÑ‡Ð°Ñ‚ÑŒ)" msgid "Office Recycled Paper" msgstr "" msgid "Oki" msgstr "Oki" msgid "Online Help" msgstr "Интернет Ñправка" msgid "Only local users can create a local printer." msgstr "" #, c-format msgid "Open of %s failed: %s" msgstr "Ðе удалоÑÑŒ открыть %s: %s" msgid "OpenGroup without a CloseGroup first" msgstr "OpenGroup без предыдущего CloseGroup" msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" msgstr "OpenUI/JCLOpenUI без предыдущего CloseUI/JCLCloseUI" msgid "Operation Policy" msgstr "Политика операций" msgid "Optical Disc" msgstr "" #, c-format msgid "Option \"%s\" cannot be included via %%%%IncludeFeature." msgstr "Параметр \"%s\" не может быть добавлен через %%%%IncludeFeature." msgid "Options Installed" msgstr "Доп.уÑтройÑтва" msgid "Options:" msgstr "Параметры:" msgid "Other" msgstr "" msgid "Out of date PPD cache file." msgstr "УÑтаревший файл кеша PPD" msgid "Out of memory." msgstr "ÐедоÑтаточно памÑти." msgid "Output Mode" msgstr "Режим вывода" msgid "Output bin is almost full." msgstr "Лоток вывода почти заполнен." msgid "Output bin is full." msgstr "Лоток вывода заполнен." msgid "Output bin is missing." msgstr "ОтÑутÑтвует лоток вывода." msgid "PASS" msgstr "PASS" msgid "PCL Laser Printer" msgstr "Лазерный принтер PCL" msgid "PRC16K" msgstr "PRC16K" msgid "PRC16K Long Edge" msgstr "" msgid "PRC32K" msgstr "PRC32K" msgid "PRC32K Long Edge" msgstr "" msgid "PRC32K Oversize" msgstr "" msgid "PRC32K Oversize Long Edge" msgstr "" msgid "Packet does not contain a Get-Response-PDU" msgstr "Ð’ пакете нет Get-Response-PDU" msgid "Packet does not start with SEQUENCE" msgstr "Ðет индикатора SEQUENCE в начале пакета" msgid "Paper" msgstr "" msgid "Paper jam." msgstr "ЗамÑтие бумаги." msgid "Paper tray is almost empty." msgstr "Лоток Ñ Ð±ÑƒÐ¼Ð°Ð³Ð¾Ð¹ почти пуÑÑ‚." msgid "Paper tray is empty." msgstr "Лоток Ñ Ð±ÑƒÐ¼Ð°Ð³Ð¾Ð¹ пуÑÑ‚." msgid "Paper tray is missing." msgstr "Лоток Ñ Ð±ÑƒÐ¼Ð°Ð³Ð¾Ð¹ отÑутÑтвует." msgid "Parallel Fold" msgstr "" msgid "ParamCustominCutInterval" msgstr "ParamCustominCutInterval" msgid "ParamCustominTearInterval" msgstr "ParamCustominTearInterval" #, c-format msgid "Password for %s on %s? " msgstr "Пароль Ð´Ð»Ñ %s на %s? " #, c-format msgid "Password for %s required to access %s via SAMBA: " msgstr "Ð”Ð»Ñ Ð´Ð¾Ñтупа к %s через SAMBA требуетÑÑ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ Ð´Ð»Ñ %s: " msgid "Pause Class" msgstr "ПриоÑтановить группу" msgid "Pause Printer" msgstr "ПриоÑтановить принтер" msgid "Peel-Off" msgstr "Съемный Ñлой" msgid "Permanent Labels" msgstr "" msgid "Photo" msgstr "Фото" msgid "Photo Film" msgstr "" msgid "Photo Labels" msgstr "ФотоÑтикетки" msgid "Photo Paper" msgstr "" msgid "Photo Paper Plus Glossy II" msgstr "" msgid "Photo Paper Pro Platinum" msgstr "" msgid "Plain Envelope" msgstr "" msgid "Plain Paper" msgstr "ÐžÐ±Ñ‹Ñ‡Ð½Ð°Ñ Ð±ÑƒÐ¼Ð°Ð³Ð°" msgid "Plastic" msgstr "" msgid "Plastic Archival" msgstr "" msgid "Plastic Colored" msgstr "" msgid "Plastic Glossy" msgstr "" msgid "Plastic High Gloss" msgstr "" msgid "Plastic Matte" msgstr "" msgid "Plastic Satin" msgstr "" msgid "Plastic Semi Gloss" msgstr "" msgid "Plate" msgstr "" msgid "Policies" msgstr "Политики" msgid "Polyester" msgstr "" msgid "Port Monitor" msgstr "Мониторинг порта" msgid "PostScript Printer" msgstr "Принтер PostScript" msgid "Postcard" msgstr "Открытка" msgid "Postcard Double" msgstr "" msgid "Postcard Double Long Edge" msgstr "Открытка Ð´Ð²Ð¾Ð¹Ð½Ð°Ñ Long Edge" msgid "Postcard Long Edge" msgstr "Открытка Long Edge" msgid "Poster Fold" msgstr "" msgid "Pre Cut Tabs" msgstr "" msgid "Premium Inkjet Paper" msgstr "" msgid "Premium Photo Glossy Paper" msgstr "" msgid "Premium Presentation Matte Paper" msgstr "" msgid "Preparing to print." msgstr "Подготовка к печати." msgid "Preprinted Envelope" msgstr "" msgid "Preprinted Paper" msgstr "" msgid "Print Density" msgstr "ПлотноÑть печати" msgid "Print Job:" msgstr "Задание печати:" msgid "Print Mode" msgstr "Режим печати" msgid "Print Quality" msgstr "" msgid "Print Rate" msgstr "СкороÑть печати" msgid "Print Self-Test Page" msgstr "Ðапечатать пробную Ñтраницу" msgid "Print Speed" msgstr "СкороÑть печати" msgid "Print Test Page" msgstr "Ðапечатать пробную Ñтраницу" msgid "Print and Cut" msgstr "Ðапечатать и обрезать" msgid "Print and Tear" msgstr "Ðапечатать и оборвать" msgid "Print file sent." msgstr "Файл печати отправлен." msgid "Print job canceled at printer." msgstr "Задание отменено на принтере." msgid "Print job too large." msgstr "Задание Ñлишком большое." msgid "Print job was not accepted." msgstr "Задание не принÑто." #, c-format msgid "Printer \"%s\" already exists." msgstr "" msgid "Printer Added" msgstr "Принтер добавлен" msgid "Printer Default" msgstr "Принтер выбран по умолчанию" msgid "Printer Deleted" msgstr "Принтер удален" msgid "Printer Modified" msgstr "Принтер изменен" msgid "Printer Paused" msgstr "Принтер приоÑтановлен" msgid "Printer Settings" msgstr "Параметры принтера" msgid "Printer cannot print supplied content." msgstr "Принтер не может раÑпечатать Ñодержимое." msgid "Printer cannot print with supplied options." msgstr "Принтер не может печатать Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ параметрами." msgid "Printer does not support required IPP attributes or document formats." msgstr "" msgid "Printer:" msgstr "Принтер:" msgid "Printers" msgstr "Принтеры" #, c-format msgid "Printing page %d, %u%% complete." msgstr "Печать Ñтраницы %d, %u%% завершена." msgid "Punch" msgstr "" msgid "Punched Paper" msgstr "" msgid "Quarto" msgstr "Кватро" msgid "Quota limit reached." msgstr "Предел квоты доÑтигнут." msgid "Rank Owner Job File(s) Total Size" msgstr "" "Ранг Владелец Задание Файл(Ñ‹) Общий размер" msgid "Rear" msgstr "" msgid "Rear Tray" msgstr "" msgid "Reject Jobs" msgstr "Отклонить заданиÑ" #, c-format msgid "Remote host did not accept control file (%d)." msgstr "Удаленный хоÑÑ‚ не принÑл контрольный файл (%d)." #, c-format msgid "Remote host did not accept data file (%d)." msgstr "Удаленный хоÑÑ‚ не принÑл файл данных (%d)." msgid "Reprint After Error" msgstr "Повторить печать поÑле ошибки" msgid "Request Entity Too Large" msgstr "Слишком большое Ñодержимое запроÑа" msgid "Resolution" msgstr "Разрешение" msgid "Resume Class" msgstr "Возобновить работу группы" msgid "Resume Printer" msgstr "Возобновить работу принтера" msgid "Return Address" msgstr "Обратный адреÑ" msgid "Rewind" msgstr "ВернутьÑÑ Ð² начало" msgid "Right" msgstr "" msgid "Right Gate Fold" msgstr "" msgid "Right Tray" msgstr "" msgid "Roll" msgstr "" msgid "Roll 1" msgstr "" msgid "Roll 10" msgstr "" msgid "Roll 2" msgstr "" msgid "Roll 3" msgstr "" msgid "Roll 4" msgstr "" msgid "Roll 5" msgstr "" msgid "Roll 6" msgstr "" msgid "Roll 7" msgstr "" msgid "Roll 8" msgstr "" msgid "Roll 9" msgstr "" #, c-format msgid "Running command: %s %s -N -A %s -c '%s'" msgstr "Ð—Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°: %s %s -N -A %s -c '%s'" msgid "SEQUENCE uses indefinite length" msgstr "Ð”Ð»Ñ SEQUENCE длина не уÑтановлена" msgid "SSL/TLS Negotiation Error" msgstr "SSL/TLS Negotiation Error" msgid "Saddle Stitch" msgstr "" msgid "Satin Labels" msgstr "" msgid "Satin Optical Disc" msgstr "" msgid "Satin Photo Paper" msgstr "" msgid "Screen" msgstr "" msgid "Screen Paged" msgstr "" msgid "Security Labels" msgstr "" msgid "See Other" msgstr "ПоÑмотреть другие" msgid "See remote printer." msgstr "" msgid "Self Adhesive" msgstr "" msgid "Self Adhesive Film" msgstr "" msgid "Self-signed credentials are blocked." msgstr "" msgid "Semi-Gloss Fabric" msgstr "" msgid "Semi-Gloss Labels" msgstr "" msgid "Semi-Gloss Optical Disc" msgstr "" msgid "Semi-Gloss Photo Paper" msgstr "" msgid "Sending data to printer." msgstr "Отправка данных на принтер." msgid "Server Restarted" msgstr "Сервер перезагружен" msgid "Server Security Auditing" msgstr "Проверка безопаÑноÑти Ñервера" msgid "Server Started" msgstr "Сервер загружен" msgid "Server Stopped" msgstr "Сервер оÑтановлен" msgid "Server credentials not set." msgstr "Учетные данные Ñервера не заданы." msgid "Service Unavailable" msgstr "Служба недоÑтупна" msgid "Set Allowed Users" msgstr "Указать допущенных пользователей" msgid "Set As Server Default" msgstr "ИÑпользовать данный Ñервер по умолчанию" msgid "Set Class Options" msgstr "ÐаÑтроить параметры группы" msgid "Set Printer Options" msgstr "ÐаÑтроить параметры принтера" msgid "Set Publishing" msgstr "ÐаÑтроить публикацию" msgid "Shipping Address" msgstr "ÐÐ´Ñ€ÐµÑ Ð´Ð¾Ñтавки" msgid "Short-Edge (Landscape)" msgstr "По короткой Ñтороне (альбомнаÑ)" msgid "Shrink Foil" msgstr "" msgid "Side" msgstr "" msgid "Side Tray" msgstr "" msgid "Single Face" msgstr "" msgid "Single Punch (Landscape)" msgstr "" msgid "Single Punch (Portrait)" msgstr "" msgid "Single Punch (Reverse Landscape)" msgstr "" msgid "Single Punch (Reverse Portrait)" msgstr "" msgid "Single Staple (Landscape)" msgstr "" msgid "Single Staple (Portrait)" msgstr "" msgid "Single Staple (Reverse Landscape)" msgstr "" msgid "Single Staple (Reverse Portrait)" msgstr "" msgid "Single Wall Cardboard" msgstr "" msgid "Sleeve" msgstr "" msgid "Special Paper" msgstr "ОÑÐ¾Ð±Ð°Ñ Ð±ÑƒÐ¼Ð°Ð³Ð°" #, c-format msgid "Spooling job, %.0f%% complete." msgstr "ПоÑтановка в очередь, %.0f%% завершено." msgid "Stacker 1" msgstr "" msgid "Stacker 10" msgstr "" msgid "Stacker 2" msgstr "" msgid "Stacker 3" msgstr "" msgid "Stacker 4" msgstr "" msgid "Stacker 5" msgstr "" msgid "Stacker 6" msgstr "" msgid "Stacker 7" msgstr "" msgid "Stacker 8" msgstr "" msgid "Stacker 9" msgstr "" msgid "Standard" msgstr "Стандартный" msgid "Staple" msgstr "" msgid "Staple Edge" msgstr "" msgid "Staple Edge (Landscape)" msgstr "" msgid "Staple Edge (Portrait)" msgstr "" msgid "Staple Edge (Reverse Landscape)" msgstr "" msgid "Staple Edge (Reverse Portrait)" msgstr "" #. TRANSLATORS: Banner/cover sheet before the print job. msgid "Starting Banner" msgstr "Стартовый баннер" #, c-format msgid "Starting page %d." msgstr "Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ñтраница %d." msgid "Statement" msgstr "Оператор" #, c-format msgid "Subscription #%d does not exist." msgstr "ПодпиÑка #%d не ÑущеÑтвует." msgid "Substitutions:" msgstr "ЗамещениÑ:" msgid "Super A" msgstr "Super A" msgid "Super B" msgstr "Super B" msgid "Super B/A3" msgstr "Super B/A3" msgid "Switching Protocols" msgstr "Протоколы переключениÑ" msgid "Tab Stock" msgstr "" msgid "Tabloid" msgstr "Tabloid" msgid "Tabloid Oversize" msgstr "" msgid "Tabloid Oversize Long Edge" msgstr "" msgid "Tear" msgstr "Оборвать" msgid "Tear-Off" msgstr "МеÑто отрыва" msgid "Tear-Off Adjust Position" msgstr "Откорректировать положение меÑта отрыва" #, c-format msgid "The \"%s\" attribute is required for print jobs." msgstr "Ðтрибут \"%s\" требуетÑÑ Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸ заданиÑ." #, c-format msgid "The %s attribute cannot be provided with job-ids." msgstr "Ðтрибут %s не может быть иÑпользован Ñ job-ids." #, c-format msgid "" "The '%s' Job Status attribute cannot be supplied in a job creation request." msgstr "" #, c-format msgid "" "The '%s' operation attribute cannot be supplied in a Create-Job request." msgstr "Ðтрибут '%s' не может быть подÑтавлен в Ð·Ð°Ð¿Ñ€Ð¾Ñ Create-Job" #, c-format msgid "The PPD file \"%s\" could not be found." msgstr "Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ PPD-файл \"%s\"." #, c-format msgid "The PPD file \"%s\" could not be opened: %s" msgstr "Ðе удалоÑÑŒ открыть PPD-файл \"%s\": %s" msgid "The PPD file could not be opened." msgstr "Ðе удалоÑÑŒ открыть PPD-файл." msgid "" "The class name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "Ð˜Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ может Ñодержать макÑимально 127 печатных Ñимволов и не может " "Ñодержать пробелы, дроби (/) или знак \"решетки\" (#)." msgid "The developer unit needs to be replaced." msgstr "Developer unit нуждаетÑÑ Ð² замене." msgid "The developer unit will need to be replaced soon." msgstr "Developer unit нуждаетÑÑ Ð² замене в ближайшее времÑ." msgid "The fuser's temperature is high." msgstr "Ð’Ñ‹ÑÐ¾ÐºÐ°Ñ Ñ‚ÐµÐ¼Ð¿ÐµÑ€Ð°Ñ‚ÑƒÑ€Ð° термофикÑатора." msgid "The fuser's temperature is low." msgstr "ÐÐ¸Ð·ÐºÐ°Ñ Ñ‚ÐµÐ¼Ð¿ÐµÑ€Ð°Ñ‚ÑƒÑ€Ð° термофикÑатора." msgid "" "The notify-lease-duration attribute cannot be used with job subscriptions." msgstr "" "Ðтрибут notify-lease-duration не может иÑпользоватьÑÑ Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñками на " "задание." #, c-format msgid "The notify-user-data value is too large (%d > 63 octets)." msgstr "Значение notify-user-data Ñлишком большое(%d > 63 октета)" msgid "The optical photoconductor needs to be replaced." msgstr "ОптичеÑкий фоторегиÑтратор нуждаетÑÑ Ð² замене." msgid "The optical photoconductor will need to be replaced soon." msgstr "ОптичеÑкий фоторегиÑтратор нуждаетÑÑ Ð² замене в ближайшее времÑ." msgid "The printer configuration is incorrect or the printer no longer exists." msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð°, или принтер больше не доÑтупен." msgid "The printer did not respond." msgstr "Принтер не отвечает." msgid "The printer is in use." msgstr "Принтер иÑпользуетÑÑ." msgid "The printer is low on ink." msgstr "ЗаканчиваютÑÑ Ñ‡ÐµÑ€Ð½Ð¸Ð»Ð°." msgid "The printer is low on toner." msgstr "ЗаканчиваетÑÑ Ñ‚Ð¾Ð½ÐµÑ€." msgid "The printer is not connected." msgstr "Принтер не подключен." msgid "The printer is not responding." msgstr "Принтер не отвечает." msgid "The printer is now connected." msgstr "Принтер подключен." msgid "The printer is now online." msgstr "Принтер подключен." msgid "The printer is offline." msgstr "Принтер выключен." msgid "The printer is unreachable at this time." msgstr "Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€ недоÑтупен." msgid "The printer may be out of ink." msgstr "Возможно в принтере закончилиÑÑŒ чернила." msgid "The printer may be out of toner." msgstr "Возможно в принтере закончилÑÑ Ñ‚Ð¾Ð½ÐµÑ€." msgid "The printer may not exist or is unavailable at this time." msgstr "Возможно принтер недоÑтупен в наÑтоÑщее времÑ." msgid "" "The printer name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "Ð˜Ð¼Ñ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð° может Ñодержать макÑимально 127 печатных Ñимволов и не может " "Ñодержать пробелы, дроби (/) или знак \"решетки\" (#)." msgid "The printer or class does not exist." msgstr "Принтер или группа не ÑущеÑтвует." msgid "The printer or class is not shared." msgstr "Принтер или группа без ÑовмеÑтного доÑтупа." msgid "The printer's cover is open." msgstr "Крышка принтера открыта." msgid "The printer's door is open." msgstr "Дверца принтера открыта." msgid "The printer's interlock is open." msgstr "Открыт замок." msgid "The printer's waste bin is almost full." msgstr "ОтÑек Ð´Ð»Ñ Ð¼ÑƒÑора почти заполнен." msgid "The printer's waste bin is full." msgstr "ОтÑек Ð´Ð»Ñ Ð¼ÑƒÑора заполнен." #, c-format msgid "The printer-uri \"%s\" contains invalid characters." msgstr "printer-uri \"%s\" Ñодержит недопуÑтимые Ñимволы." msgid "The printer-uri attribute is required." msgstr "Ð”Ð»Ñ printer-uri требуетÑÑ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚." msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." msgstr "printer-uri должен иметь форму «ipp://HOSTNAME/classes/CLASSNAME»." msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgstr "printer-uri должен иметь форму «ipp://HOSTNAME/printers/PRINTERNAME»." msgid "" "The subscription name may not contain spaces, slashes (/), question marks " "(?), or the pound sign (#)." msgstr "" "Ð˜Ð¼Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки не может Ñодержать пробелы, дроби (/), вопроÑительные знаки (?) " "или знак \"решетки\" (#)." msgid "" "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to " "enable it." msgstr "" "Web Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑÐµÐ¹Ñ‡Ð°Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½. Выполните \"cupsctl WebInterface=yes\" Ð´Ð»Ñ " "включениÑ." #, c-format msgid "The which-jobs value \"%s\" is not supported." msgstr "Значение \"%s\" Ð´Ð»Ñ which-jobs не поддерживаетÑÑ." msgid "There are too many subscriptions." msgstr "Слишком много подпиÑок." msgid "There was an unrecoverable USB error." msgstr "Обнаружена ошибка USB." msgid "Thermal Transfer Media" msgstr "ÐоÑитель Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸ методом термопереноÑа" msgid "Too many active jobs." msgstr "Слишком много активных заданий." #, c-format msgid "Too many job-sheets values (%d > 2)." msgstr "Слишком много значений job-sheets (%d>2)" #, c-format msgid "Too many printer-state-reasons values (%d > %d)." msgstr "Слишком много значений printer-state-reasons (%d > %d)" msgid "Top" msgstr "" msgid "Top Tray" msgstr "" msgid "Tractor" msgstr "" msgid "Transfer" msgstr "" msgid "Transparency" msgstr "ПрозрачноÑть" msgid "Tray" msgstr "Лоток" msgid "Tray 1" msgstr "Лоток 1" msgid "Tray 10" msgstr "" msgid "Tray 11" msgstr "" msgid "Tray 12" msgstr "" msgid "Tray 13" msgstr "" msgid "Tray 14" msgstr "" msgid "Tray 15" msgstr "" msgid "Tray 16" msgstr "" msgid "Tray 17" msgstr "" msgid "Tray 18" msgstr "" msgid "Tray 19" msgstr "" msgid "Tray 2" msgstr "Лоток 2" msgid "Tray 20" msgstr "" msgid "Tray 3" msgstr "Лоток 3" msgid "Tray 4" msgstr "Лоток 4" msgid "Tray 5" msgstr "" msgid "Tray 6" msgstr "" msgid "Tray 7" msgstr "" msgid "Tray 8" msgstr "" msgid "Tray 9" msgstr "" msgid "Triple Staple (Landscape)" msgstr "" msgid "Triple Staple (Portrait)" msgstr "" msgid "Triple Staple (Reverse Landscape)" msgstr "" msgid "Triple Staple (Reverse Portrait)" msgstr "" msgid "Triple Wall Cardboard" msgstr "" msgid "Trust on first use is disabled." msgstr "" msgid "URI Too Long" msgstr "Слишком длинный Ð°Ð´Ñ€ÐµÑ URI" msgid "URI too large" msgstr "Слишком большой Ð°Ð´Ñ€ÐµÑ URI" msgid "US Fanfold" msgstr "" msgid "US Ledger" msgstr "US Ledger" msgid "US Legal" msgstr "US Legal" msgid "US Legal Oversize" msgstr "" msgid "US Letter" msgstr "US Letter" msgid "US Letter Long Edge" msgstr "" msgid "US Letter Oversize" msgstr "" msgid "US Letter Oversize Long Edge" msgstr "" msgid "US Letter Small" msgstr "" msgid "Unable to access cupsd.conf file" msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ доÑтуп к файлу \"cupsd.conf\"" msgid "Unable to access help file." msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ доÑтуп к файлу помощи." msgid "Unable to add RSS subscription" msgstr "Ðе удаетÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ подпиÑку RSS." msgid "Unable to add class" msgstr "Ðе удаетÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ группу" msgid "Unable to add document to print job." msgstr "Ðе удаетÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ документ в задание печати." #, c-format msgid "Unable to add job for destination \"%s\"." msgstr "Ðе удаетÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ задание Ð´Ð»Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ \"%s\"" msgid "Unable to add printer" msgstr "Ðе удаетÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ принтер" msgid "Unable to allocate memory for file types." msgstr "Ðе удаетÑÑ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ памÑть Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð¾Ð² файлов." msgid "Unable to allocate memory for page info" msgstr "Ðе удаетÑÑ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ памÑть Ð´Ð»Ñ Ñтраницы информации" msgid "Unable to allocate memory for pages array" msgstr "Ðе удаетÑÑ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ памÑть Ð´Ð»Ñ Ñтраниц" msgid "Unable to cancel RSS subscription" msgstr "Ðе удаетÑÑ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ подпиÑку RSS" msgid "Unable to cancel print job." msgstr "Ðе удаетÑÑ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ задание печати." msgid "Unable to change printer" msgstr "Ðе удаетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ принтер" msgid "Unable to change printer-is-shared attribute" msgstr "Ðе удаетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ атрибут printer-is-shared" msgid "Unable to change server settings" msgstr "Ðе удаетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ наÑтройки Ñервера" #, c-format msgid "Unable to compile mimeMediaType regular expression: %s." msgstr "Ðе удаетÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ mimeMediaType регулÑрное выражение: %s." #, c-format msgid "Unable to compile naturalLanguage regular expression: %s." msgstr "Ðе удаетÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ naturalLanguage регулÑрное выражение: %s." msgid "Unable to configure printer options." msgstr "Ðе удаетÑÑ Ð½Ð°Ñтроить параметры принтера." msgid "Unable to connect to host." msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº хоÑту." msgid "Unable to contact printer, queuing on next printer in class." msgstr "" "Ðе удаетÑÑ ÑƒÑтановить ÑвÑзь Ñ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð¾Ð¼, поÑтановка в очередь на Ñледующем " "принтере в группе." #, c-format msgid "Unable to copy 64-bit CUPS printer driver files (%d)." msgstr "Ðе удаетÑÑ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ 64-битовые файлы драйвера принтера CUPS (%d)." #, c-format msgid "Unable to copy 64-bit Windows printer driver files (%d)." msgstr "" "Ðе удаетÑÑ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ 64-битовые файлы драйвера принтера Ð´Ð»Ñ Windows (%d)." #, c-format msgid "Unable to copy CUPS printer driver files (%d)." msgstr "Ðе удаетÑÑ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ файлы драйвера принтера CUPS (%d)" #, c-format msgid "Unable to copy PPD file - %s" msgstr "Ðе удаетÑÑ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ PPD-файл - %s" msgid "Unable to copy PPD file." msgstr "Ðе удаетÑÑ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ PPD-файл." #, c-format msgid "Unable to copy Windows 2000 printer driver files (%d)." msgstr "Ðе удаетÑÑ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ файлы драйвера принтера Windows 2000 (%d)" #, c-format msgid "Unable to copy Windows 9x printer driver files (%d)." msgstr "Ðе удаетÑÑ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ файлы драйвера принтера Windows 9x (%d)" msgid "Unable to create credentials from array." msgstr "" msgid "Unable to create printer-uri" msgstr "Ðе удаетÑÑ Ñоздать printer-uri" msgid "Unable to create printer." msgstr "" msgid "Unable to create server credentials." msgstr "Ðе удаетÑÑ Ñоздать учетные данные Ñервера." msgid "Unable to create temporary file" msgstr "Ðе удаетÑÑ Ñоздать временный файл" msgid "Unable to delete class" msgstr "Ðе удаетÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ группу" msgid "Unable to delete printer" msgstr "Ðе удаетÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ принтер" msgid "Unable to do maintenance command" msgstr "Ðе удаетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ команду обÑлуживаниÑ" msgid "Unable to edit cupsd.conf files larger than 1MB" msgstr "Ðевозможно редактировать файлы cupsd.conf больше 1 МБ" msgid "" "Unable to establish a secure connection to host (certificate chain invalid)." msgstr "" "Ðе удаетÑÑ ÑƒÑтановить защищенное Ñоединение (Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ñ†ÐµÐ¿Ð¾Ñ‡ÐºÐ° " "Ñертификатов)." msgid "" "Unable to establish a secure connection to host (certificate not yet valid)." msgstr "" "Ðе удаетÑÑ ÑƒÑтановить защищенное Ñоединение (недейÑтвительный Ñертификат)." msgid "Unable to establish a secure connection to host (expired certificate)." msgstr "Ðе удаетÑÑ ÑƒÑтановить защищенное Ñоединение (Ñертификат проÑрочен)." msgid "Unable to establish a secure connection to host (host name mismatch)." msgstr "" "Ðе удаетÑÑ ÑƒÑтановить защищенное Ñоединение (неÑовпадение имени хоÑта)." msgid "" "Unable to establish a secure connection to host (peer dropped connection " "before responding)." msgstr "" "Ðе удаетÑÑ ÑƒÑтановить защищенное Ñоединение (Ñоединение разорвано удаленной " "Ñтороной.)" msgid "" "Unable to establish a secure connection to host (self-signed certificate)." msgstr "" "Ðе удаетÑÑ ÑƒÑтановить защищенное Ñоединение (ÑамоподпиÑанный Ñертификат)." msgid "" "Unable to establish a secure connection to host (untrusted certificate)." msgstr "Ðе удаетÑÑ ÑƒÑтановить защищенное Ñоединение (ненадежный Ñертификат)." msgid "Unable to establish a secure connection to host." msgstr "Ðе удаетÑÑ ÑƒÑтановить защищенное Ñоединение." msgid "Unable to find destination for job" msgstr "Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ назначение Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ" msgid "Unable to find printer." msgstr "Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ принтер." msgid "Unable to find server credentials." msgstr "Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ учетные данные Ñервера." msgid "Unable to get backend exit status." msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ код Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¾Ñ‚ backend." msgid "Unable to get class list" msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ ÑпиÑок групп" msgid "Unable to get class status" msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ ÑÑ‚Ð°Ñ‚ÑƒÑ Ð³Ñ€ÑƒÐ¿Ð¿" msgid "Unable to get list of printer drivers" msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ ÑпиÑок драйверов принтера" msgid "Unable to get printer attributes" msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ атрибуты принтера" msgid "Unable to get printer list" msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ ÑпиÑок принтеров" msgid "Unable to get printer status" msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð°" msgid "Unable to get printer status." msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð°." #, c-format msgid "Unable to install Windows 2000 printer driver files (%d)." msgstr "Ðе удаетÑÑ ÑƒÑтановить файлы драйвера принтера Windows 2000 (%d)" #, c-format msgid "Unable to install Windows 9x printer driver files (%d)." msgstr "Ðе удаетÑÑ ÑƒÑтановить файлы драйвера принтера Windows 9x (%d)" msgid "Unable to load help index." msgstr "Ðе удаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ñодержание Ñправки." #, c-format msgid "Unable to locate printer \"%s\"." msgstr "Принтер \"%s\" не найден" msgid "Unable to locate printer." msgstr "Принтер не найден" msgid "Unable to modify class" msgstr "Ðе удаетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ группу" msgid "Unable to modify printer" msgstr "Ðе удаетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ принтер" msgid "Unable to move job" msgstr "Ðе удаетÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÑтить задание" msgid "Unable to move jobs" msgstr "Ðе удаетÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÑтить заданиÑ" msgid "Unable to open PPD file" msgstr "Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ PPD-файл" msgid "Unable to open cupsd.conf file:" msgstr "Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ файл cupsd.conf:" msgid "Unable to open device file" msgstr "Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ файл уÑтройÑтва" #, c-format msgid "Unable to open document #%d in job #%d." msgstr "Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ документ #%d в задании #%d." msgid "Unable to open help file." msgstr "Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ файл Ñправки." msgid "Unable to open print file" msgstr "Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ файл печати" msgid "Unable to open raster file" msgstr "Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ раÑтровый файл" msgid "Unable to print test page" msgstr "Ðе удаетÑÑ Ð½Ð°Ð¿ÐµÑ‡Ð°Ñ‚Ð°Ñ‚ÑŒ пробную Ñтраницу" msgid "Unable to read print data." msgstr "Ðе удаетÑÑ Ñчитать данные печати." msgid "Unable to rename job document file." msgstr "" msgid "Unable to resolve printer-uri." msgstr "Ðе удаетÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ printer-uri" #, c-format msgid "Unable to run \"%s\": %s" msgstr "Ðе удаетÑÑ Ð·Ð°Ð¿ÑƒÑтить \"%s\": %s" msgid "Unable to see in file" msgstr "Ðе удаетÑÑ ÑƒÐ²Ð¸Ð´ÐµÑ‚ÑŒ в файле" msgid "Unable to send command to printer driver" msgstr "Ðе удаетÑÑ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÑŒ команду драйверу принтера" msgid "Unable to send data to printer." msgstr "Ðе удаетÑÑ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÑŒ данные на принтер." #, c-format msgid "Unable to set Windows printer driver (%d)." msgstr "Ðе удаетÑÑ Ð½Ð°Ñтроить драйвер принтера Windows (%d)." msgid "Unable to set options" msgstr "Ðе удаетÑÑ Ð½Ð°Ñтроить параметры" msgid "Unable to set server default" msgstr "Ðе удаетÑÑ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ Ñервер иÑпользуемым по умолчанию" msgid "Unable to start backend process." msgstr "Ðе удаетÑÑ Ð·Ð°Ð¿ÑƒÑтить фоновый процеÑÑ" msgid "Unable to upload cupsd.conf file" msgstr "Ðе удаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ файл cupsd.conf" msgid "Unable to use legacy USB class driver." msgstr "Ðе удаетÑÑ Ð¸Ñпользовать уÑтаревший драйвер USB." msgid "Unable to write print data" msgstr "Ðе удаетÑÑ Ð·Ð°Ð¿Ð¸Ñать данные печати" #, c-format msgid "Unable to write uncompressed print data: %s" msgstr "Ðе удаетÑÑ Ð·Ð°Ð¿Ð¸Ñать неÑжатые данные печати: %s" msgid "Unauthorized" msgstr "Ð’ доÑтупе отказано" msgid "Units" msgstr "Единицы" msgid "Unknown" msgstr "ÐеизвеÑтный" #, c-format msgid "Unknown choice \"%s\" for option \"%s\"." msgstr "ÐеизвеÑтный выбор \"%s\" Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° \"%s\"." #, c-format msgid "Unknown encryption option value: \"%s\"." msgstr "ÐеизвеÑтное значение \"%s\" параметра шифрованиÑ." #, c-format msgid "Unknown file order: \"%s\"." msgstr "ÐеизвеÑтный порÑдок файлов \"%s\"." #, c-format msgid "Unknown format character: \"%c\"." msgstr "Символ неизвеÑтного формата \"%c\"." msgid "Unknown hash algorithm." msgstr "" msgid "Unknown media size name." msgstr "ÐеизвеÑтное Ð¸Ð¼Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° бумаги." #, c-format msgid "Unknown option \"%s\" with value \"%s\"." msgstr "ÐеизвеÑтный параметр \"%s\" Ñо значением \"%s\"." #, c-format msgid "Unknown option \"%s\"." msgstr "ÐеизвеÑтный параметр \"%s\"." #, c-format msgid "Unknown print mode: \"%s\"." msgstr "ÐеизвеÑтный режим печати: \"%s\"." #, c-format msgid "Unknown printer-error-policy \"%s\"." msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¿Ð¾Ð»Ð¸Ñ‚Ð¸ÐºÐ° printer-error-policy \"%s\"." #, c-format msgid "Unknown printer-op-policy \"%s\"." msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¿Ð¾Ð»Ð¸Ñ‚Ð¸ÐºÐ° printer-op-policy \"%s\"." msgid "Unknown request method." msgstr "ÐеизвеÑтный метод запроÑа." msgid "Unknown request version." msgstr "ÐеизвеÑтный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð²ÐµÑ€Ñии." msgid "Unknown scheme in URI" msgstr "ÐеизвеÑтный scheme в URI" msgid "Unknown service name." msgstr "ÐеизвеÑтное Ð¸Ð¼Ñ ÑервиÑа." #, c-format msgid "Unknown version option value: \"%s\"." msgstr "ÐеизвеÑтное значение параметра верÑии \"%s\"." #, c-format msgid "Unsupported 'compression' value \"%s\"." msgstr "Ðеподдерживаемое значение 'compression' \"%s\"." #, c-format msgid "Unsupported 'document-format' value \"%s\"." msgstr "Ðеподдерживаемое значение'document-format' \"%s\"." msgid "Unsupported 'job-name' value." msgstr "Ðеподдерживаемое значение 'job-name'." #, c-format msgid "Unsupported character set \"%s\"." msgstr "Ðеподдерживаемый набор Ñимволов \"%s\"." #, c-format msgid "Unsupported compression \"%s\"." msgstr "Ðеподдерживаемое Ñжатие \"%s\"." #, c-format msgid "Unsupported document-format \"%s\"." msgstr "Ðеподдерживаемый document-format \"%s\"." #, c-format msgid "Unsupported document-format \"%s/%s\"." msgstr "Ðеподдерживаемый document-format \"%s/%s\"." #, c-format msgid "Unsupported format \"%s\"." msgstr "Ðеподдерживаемый формат \"%s\"." msgid "Unsupported margins." msgstr "Ðеподдерживаемые полÑ." msgid "Unsupported media value." msgstr "Ðеподдерживаемое значение бумаги." #, c-format msgid "Unsupported number-up value %d, using number-up=1." msgstr "" "Ðеподдерживаемое значение number-up %d, иÑпользуетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ number-up=1." #, c-format msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb." msgstr "" "Ðеподдерживаемое значение number-up-layout %s, иÑпользуетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ number-" "up-layout=lrtb." #, c-format msgid "Unsupported page-border value %s, using page-border=none." msgstr "" "Ðеподдерживаемое значение page-border %s, иÑпользуетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ page-" "border=none." msgid "Unsupported raster data." msgstr "Ðеподдерживаемые данные раÑтра." msgid "Unsupported value type" msgstr "Ðеподдерживаемый тип значениÑ" msgid "Upgrade Required" msgstr "ТребуетÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ðµ" msgid "" "Usage:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]" msgstr "" "ИÑпользование:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]\n" "\n" #, c-format msgid "Usage: %s job-id user title copies options [file]" msgstr "" msgid "Usage: cupsaddsmb [options] printer1 ... printerN" msgstr "" msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]" msgstr "" msgid "Usage: cupsd [options]" msgstr "" msgid "Usage: cupsfilter [ options ] [ -- ] filename" msgstr "" msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]" msgstr "" msgid "" "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" msgstr "" msgid "" "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " ippfind [options] name[.regtype[.domain.]] ... [expression]\n" " ippfind --help\n" " ippfind --version" msgstr "" "ИÑпользование:\n" " ippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " ippfind [options] name[.regtype[.domain.]] ... [expression]\n" " ippfind --help\n" " ippfind --version" msgid "Usage: ipptool [options] URI filename [ ... filenameN ]" msgstr "" msgid "Usage: lpmove job/src dest" msgstr "" msgid "" "Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " lpoptions [-h server] [-E] -x printer" msgstr "" "ИÑпользование:\n" " lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " lpoptions [-h server] [-E] -x printer" msgid "" "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" msgstr "" msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" msgstr "" msgid "Usage: ppdhtml [options] filename.drv >filename.html" msgstr "" msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgstr "" msgid "" "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" msgstr "" msgid "Usage: snmp [host-or-ip-address]" msgstr "" msgid "Value uses indefinite length" msgstr "Ð”Ð»Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ð¸Ð½Ð° не уÑтановлена" msgid "VarBind uses indefinite length" msgstr "Ð”Ð»Ñ VarBind длина не уÑтановлена" msgid "Vellum Paper" msgstr "" msgid "Version uses indefinite length" msgstr "Ð”Ð»Ñ Version длина не уÑтановлена" msgid "Waiting for job to complete." msgstr "Ожидание Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ." msgid "Waiting for printer to become available." msgstr "Ожидание доÑтупа к принтеру." msgid "Waiting for printer to finish." msgstr "Ожидание Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ принтера." msgid "Warning, no Windows 2000 printer drivers are installed." msgstr "Внимание, драйверы принтера Windows 2000 не уÑтановлены" msgid "Waterproof Fabric" msgstr "" msgid "Web Interface is Disabled" msgstr "Web Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½" msgid "Wet Film" msgstr "" msgid "Windowed Envelope" msgstr "" msgid "Yes" msgstr "Да" #, c-format msgid "" "You must access this page using the URL https://" "%s:%d%s." msgstr "" "Ð’Ñ‹ должны получить доÑтуп к Ñтой Ñтранице Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ URL https://%s:%d%s." msgid "Z Fold" msgstr "" msgid "ZPL Label Printer" msgstr "Принтер Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸ Ñтикеток ZPL" msgid "Zebra" msgstr "Zebra" msgid "aborted" msgstr "прервано" msgid "accuracy-units" msgstr "Accuracy Units" msgid "accuracy-units.mm" msgstr "Mm" msgid "accuracy-units.nm" msgstr "Nm" msgid "accuracy-units.um" msgstr "Um" msgid "baling" msgstr "Bale Output" msgid "baling-type" msgstr "Baling Type" msgid "baling-type.band" msgstr "Band" msgid "baling-type.shrink-wrap" msgstr "Shrink Wrap" msgid "baling-type.wrap" msgstr "Wrap" msgid "baling-when" msgstr "Baling When" msgid "baling-when.after-job" msgstr "After Job" msgid "baling-when.after-sets" msgstr "After Sets" msgid "binding" msgstr "Bind Output" msgid "binding-reference-edge" msgstr "Binding Reference Edge" msgid "binding-reference-edge.bottom" msgstr "Bottom" msgid "binding-reference-edge.left" msgstr "Left" msgid "binding-reference-edge.right" msgstr "Right" msgid "binding-reference-edge.top" msgstr "Top" msgid "binding-type" msgstr "Binding Type" msgid "binding-type.adhesive" msgstr "Adhesive" msgid "binding-type.comb" msgstr "Comb" msgid "binding-type.flat" msgstr "Flat" msgid "binding-type.padding" msgstr "Padding" msgid "binding-type.perfect" msgstr "Perfect" msgid "binding-type.spiral" msgstr "Spiral" msgid "binding-type.tape" msgstr "Tape" msgid "binding-type.velo" msgstr "Velo" msgid "canceled" msgstr "отменено" msgid "charge-info-message" msgstr "Charge Info Message" msgid "coating" msgstr "Coat Sheets" msgid "coating-sides" msgstr "Coating Sides" msgid "coating-sides.back" msgstr "Back" msgid "coating-sides.both" msgstr "Both" msgid "coating-sides.front" msgstr "Front" msgid "coating-type" msgstr "Coating Type" msgid "coating-type.archival" msgstr "Archival" msgid "coating-type.archival-glossy" msgstr "Archival Glossy" msgid "coating-type.archival-matte" msgstr "Archival Matte" msgid "coating-type.archival-semi-gloss" msgstr "Archival Semi Gloss" msgid "coating-type.glossy" msgstr "Glossy" msgid "coating-type.high-gloss" msgstr "High Gloss" msgid "coating-type.matte" msgstr "Matte" msgid "coating-type.semi-gloss" msgstr "Semi-Gloss" msgid "coating-type.silicone" msgstr "Silicone" msgid "coating-type.translucent" msgstr "Translucent" msgid "completed" msgstr "завершено" msgid "confirmation-sheet-print" msgstr "Confirmation Sheet Print" msgid "copies" msgstr "Copies" msgid "cover-back" msgstr "Cover Back" msgid "cover-front" msgstr "Cover Front" msgid "cover-sheet-info" msgstr "Cover Sheet Info" msgid "cover-sheet-info-supported.date-time" msgstr "Date Time" msgid "cover-sheet-info-supported.from-name" msgstr "From Name" msgid "cover-sheet-info-supported.logo" msgstr "Logo" msgid "cover-sheet-info-supported.message" msgstr "Message" msgid "cover-sheet-info-supported.organization" msgstr "Organization" msgid "cover-sheet-info-supported.subject" msgstr "Subject" msgid "cover-sheet-info-supported.to-name" msgstr "To Name" msgid "cover-type" msgstr "Cover Type" msgid "cover-type.no-cover" msgstr "No Cover" msgid "cover-type.print-back" msgstr "Print Back" msgid "cover-type.print-both" msgstr "Print Both" msgid "cover-type.print-front" msgstr "Print Front" msgid "cover-type.print-none" msgstr "Print None" msgid "covering" msgstr "Cover Output" msgid "covering-name" msgstr "Covering Name" msgid "covering-name.plain" msgstr "Plain" msgid "covering-name.pre-cut" msgstr "Pre Cut" msgid "covering-name.pre-printed" msgstr "Pre Printed" msgid "cups-deviced failed to execute." msgstr "Ðе удалоÑÑŒ выполнить cups-deviced." msgid "cups-driverd failed to execute." msgstr "Ðе удалоÑÑŒ выполнить cups-driverd." #, c-format msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "cupsaddsmb: Ðет PPD-файла Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð° \"%s\" - %s" msgid "cupsctl: Cannot set Listen or Port directly." msgstr "cupsctl: Ðе удаетÑÑ Ð·Ð°Ð´Ð°Ñ‚ÑŒ Listen или Port." #, c-format msgid "cupsctl: Unable to connect to server: %s" msgstr "cupsctl: Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº Ñерверу: %s" #, c-format msgid "cupsctl: Unknown option \"%s\"" msgstr "cupsctl: ÐеизвеÑтный параметр \"%s\"" #, c-format msgid "cupsctl: Unknown option \"-%c\"" msgstr "cupsctl: ÐеизвеÑтный параметр \"-%c\"" msgid "cupsd: Expected config filename after \"-c\" option." msgstr "cupsd: Пропущено Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° конфигурации поÑле параметра \"-Ñ\"" msgid "cupsd: Expected cups-files.conf filename after \"-s\" option." msgstr "cupsd: Пропущено Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° cups-files.conf поÑле параметра \"-s\"" msgid "cupsd: On-demand support not compiled in, running in normal mode." msgstr "" "cupsd: Поддержка запуÑка \"по запроÑу\" не включена, запуÑк в нормальном " "режиме." msgid "cupsd: Relative cups-files.conf filename not allowed." msgstr "" msgid "cupsd: Unable to get current directory." msgstr "cupsd: Ðе удаетÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ текущий каталог" msgid "cupsd: Unable to get path to cups-files.conf file." msgstr "cupsd: Ðе удаетÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ путь до cups-files.conf" #, c-format msgid "cupsd: Unknown argument \"%s\" - aborting." msgstr "cupsd: ÐеизвеÑтный аргумент \"%s\" - прерывание." #, c-format msgid "cupsd: Unknown option \"%c\" - aborting." msgstr "cupsd: ÐеизвеÑтный параметр \"%c\" - прерывание." #, c-format msgid "cupsfilter: Invalid document number %d." msgstr "cupsfilter: ÐедопуÑтимый номер документа %d." #, c-format msgid "cupsfilter: Invalid job ID %d." msgstr "cupsfilter: ÐедопуÑтимый ID Ð·Ð°Ð´Ð°Ð½Ð¸Ñ %d." msgid "cupsfilter: Only one filename can be specified." msgstr "cupsfilter: Может быть указано только одно Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°." #, c-format msgid "cupsfilter: Unable to get job file - %s" msgstr "cupsfilter: Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ файл Ð·Ð°Ð´Ð°Ð½Ð¸Ñ - %s" msgid "cupstestppd: The -q option is incompatible with the -v option." msgstr "cupstestppd: Параметр -q неÑовмеÑтим Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -v" msgid "cupstestppd: The -v option is incompatible with the -q option." msgstr "cupstestppd: Параметр -v неÑовмеÑтим Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -q" msgid "detailed-status-message" msgstr "Detailed Status Message" #, c-format msgid "device for %s/%s: %s" msgstr "уÑтройÑтво Ð´Ð»Ñ %s/%s: %s" #, c-format msgid "device for %s: %s" msgstr "уÑтройÑтво Ð´Ð»Ñ %s: %s" msgid "document-copies" msgstr "Copies" msgid "document-state" msgstr "Document State" msgid "document-state-reasons" msgstr "Detailed Document State" msgid "document-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "document-state-reasons.canceled-at-device" msgstr "Canceled At Device" msgid "document-state-reasons.canceled-by-operator" msgstr "Canceled By Operator" msgid "document-state-reasons.canceled-by-user" msgstr "Canceled By User" msgid "document-state-reasons.completed-successfully" msgstr "Completed Successfully" msgid "document-state-reasons.completed-with-errors" msgstr "Completed With Errors" msgid "document-state-reasons.completed-with-warnings" msgstr "Completed With Warnings" msgid "document-state-reasons.compression-error" msgstr "Compression Error" msgid "document-state-reasons.data-insufficient" msgstr "Data Insufficient" msgid "document-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "document-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "document-state-reasons.digital-signature-wait" msgstr "Digital Signature Wait" msgid "document-state-reasons.document-access-error" msgstr "Document Access Error" msgid "document-state-reasons.document-fetchable" msgstr "Document Fetchable" msgid "document-state-reasons.document-format-error" msgstr "Document Format Error" msgid "document-state-reasons.document-password-error" msgstr "Document Password Error" msgid "document-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "document-state-reasons.document-security-error" msgstr "Document Security Error" msgid "document-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "document-state-reasons.errors-detected" msgstr "Errors Detected" msgid "document-state-reasons.incoming" msgstr "Incoming" msgid "document-state-reasons.interpreting" msgstr "Interpreting" msgid "document-state-reasons.none" msgstr "None" msgid "document-state-reasons.outgoing" msgstr "Outgoing" msgid "document-state-reasons.printing" msgstr "Printing" msgid "document-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "document-state-reasons.queued" msgstr "Queued" msgid "document-state-reasons.queued-for-marker" msgstr "Queued For Marker" msgid "document-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "document-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "document-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "document-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "document-state-reasons.transforming" msgstr "Transforming" msgid "document-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "document-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "document-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "document-state.3" msgstr "Pending" msgid "document-state.5" msgstr "Processing" msgid "document-state.6" msgstr "Processing Stopped" msgid "document-state.7" msgstr "Canceled" msgid "document-state.8" msgstr "Aborted" msgid "document-state.9" msgstr "Completed" msgid "error-index uses indefinite length" msgstr "Ð”Ð»Ñ error-index длина не уÑтановлена" msgid "error-status uses indefinite length" msgstr "Ð”Ð»Ñ error-status длина не уÑтановлена" msgid "feed-orientation" msgstr "Feed Orientation" msgid "feed-orientation.long-edge-first" msgstr "Long Edge First" msgid "feed-orientation.short-edge-first" msgstr "Short Edge First" msgid "fetch-status-code" msgstr "Fetch Status Code" msgid "finishing-template" msgstr "Finishing Template" msgid "finishing-template.bale" msgstr "Bale" msgid "finishing-template.bind" msgstr "Bind" msgid "finishing-template.bind-bottom" msgstr "Bind Bottom" msgid "finishing-template.bind-left" msgstr "Bind Left" msgid "finishing-template.bind-right" msgstr "Bind Right" msgid "finishing-template.bind-top" msgstr "Bind Top" msgid "finishing-template.booklet-maker" msgstr "Booklet Maker" msgid "finishing-template.coat" msgstr "Coat" msgid "finishing-template.cover" msgstr "Cover" msgid "finishing-template.edge-stitch" msgstr "Edge Stitch" msgid "finishing-template.edge-stitch-bottom" msgstr "Edge Stitch Bottom" msgid "finishing-template.edge-stitch-left" msgstr "Edge Stitch Left" msgid "finishing-template.edge-stitch-right" msgstr "Edge Stitch Right" msgid "finishing-template.edge-stitch-top" msgstr "Edge Stitch Top" msgid "finishing-template.fold" msgstr "Fold" msgid "finishing-template.fold-accordion" msgstr "Fold Accordion" msgid "finishing-template.fold-double-gate" msgstr "Fold Double Gate" msgid "finishing-template.fold-engineering-z" msgstr "Fold Engineering Z" msgid "finishing-template.fold-gate" msgstr "Fold Gate" msgid "finishing-template.fold-half" msgstr "Fold Half" msgid "finishing-template.fold-half-z" msgstr "Fold Half Z" msgid "finishing-template.fold-left-gate" msgstr "Fold Left Gate" msgid "finishing-template.fold-letter" msgstr "Fold Letter" msgid "finishing-template.fold-parallel" msgstr "Fold Parallel" msgid "finishing-template.fold-poster" msgstr "Fold Poster" msgid "finishing-template.fold-right-gate" msgstr "Fold Right Gate" msgid "finishing-template.fold-z" msgstr "Fold Z" msgid "finishing-template.jdf-f10-1" msgstr "JDF F10 1" msgid "finishing-template.jdf-f10-2" msgstr "JDF F10 2" msgid "finishing-template.jdf-f10-3" msgstr "JDF F10 3" msgid "finishing-template.jdf-f12-1" msgstr "JDF F12 1" msgid "finishing-template.jdf-f12-10" msgstr "JDF F12 10" msgid "finishing-template.jdf-f12-11" msgstr "JDF F12 11" msgid "finishing-template.jdf-f12-12" msgstr "JDF F12 12" msgid "finishing-template.jdf-f12-13" msgstr "JDF F12 13" msgid "finishing-template.jdf-f12-14" msgstr "JDF F12 14" msgid "finishing-template.jdf-f12-2" msgstr "JDF F12 2" msgid "finishing-template.jdf-f12-3" msgstr "JDF F12 3" msgid "finishing-template.jdf-f12-4" msgstr "JDF F12 4" msgid "finishing-template.jdf-f12-5" msgstr "JDF F12 5" msgid "finishing-template.jdf-f12-6" msgstr "JDF F12 6" msgid "finishing-template.jdf-f12-7" msgstr "JDF F12 7" msgid "finishing-template.jdf-f12-8" msgstr "JDF F12 8" msgid "finishing-template.jdf-f12-9" msgstr "JDF F12 9" msgid "finishing-template.jdf-f14-1" msgstr "JDF F14 1" msgid "finishing-template.jdf-f16-1" msgstr "JDF F16 1" msgid "finishing-template.jdf-f16-10" msgstr "JDF F16 10" msgid "finishing-template.jdf-f16-11" msgstr "JDF F16 11" msgid "finishing-template.jdf-f16-12" msgstr "JDF F16 12" msgid "finishing-template.jdf-f16-13" msgstr "JDF F16 13" msgid "finishing-template.jdf-f16-14" msgstr "JDF F16 14" msgid "finishing-template.jdf-f16-2" msgstr "JDF F16 2" msgid "finishing-template.jdf-f16-3" msgstr "JDF F16 3" msgid "finishing-template.jdf-f16-4" msgstr "JDF F16 4" msgid "finishing-template.jdf-f16-5" msgstr "JDF F16 5" msgid "finishing-template.jdf-f16-6" msgstr "JDF F16 6" msgid "finishing-template.jdf-f16-7" msgstr "JDF F16 7" msgid "finishing-template.jdf-f16-8" msgstr "JDF F16 8" msgid "finishing-template.jdf-f16-9" msgstr "JDF F16 9" msgid "finishing-template.jdf-f18-1" msgstr "JDF F18 1" msgid "finishing-template.jdf-f18-2" msgstr "JDF F18 2" msgid "finishing-template.jdf-f18-3" msgstr "JDF F18 3" msgid "finishing-template.jdf-f18-4" msgstr "JDF F18 4" msgid "finishing-template.jdf-f18-5" msgstr "JDF F18 5" msgid "finishing-template.jdf-f18-6" msgstr "JDF F18 6" msgid "finishing-template.jdf-f18-7" msgstr "JDF F18 7" msgid "finishing-template.jdf-f18-8" msgstr "JDF F18 8" msgid "finishing-template.jdf-f18-9" msgstr "JDF F18 9" msgid "finishing-template.jdf-f2-1" msgstr "JDF F2 1" msgid "finishing-template.jdf-f20-1" msgstr "JDF F20 1" msgid "finishing-template.jdf-f20-2" msgstr "JDF F20 2" msgid "finishing-template.jdf-f24-1" msgstr "JDF F24 1" msgid "finishing-template.jdf-f24-10" msgstr "JDF F24 10" msgid "finishing-template.jdf-f24-11" msgstr "JDF F24 11" msgid "finishing-template.jdf-f24-2" msgstr "JDF F24 2" msgid "finishing-template.jdf-f24-3" msgstr "JDF F24 3" msgid "finishing-template.jdf-f24-4" msgstr "JDF F24 4" msgid "finishing-template.jdf-f24-5" msgstr "JDF F24 5" msgid "finishing-template.jdf-f24-6" msgstr "JDF F24 6" msgid "finishing-template.jdf-f24-7" msgstr "JDF F24 7" msgid "finishing-template.jdf-f24-8" msgstr "JDF F24 8" msgid "finishing-template.jdf-f24-9" msgstr "JDF F24 9" msgid "finishing-template.jdf-f28-1" msgstr "JDF F28 1" msgid "finishing-template.jdf-f32-1" msgstr "JDF F32 1" msgid "finishing-template.jdf-f32-2" msgstr "JDF F32 2" msgid "finishing-template.jdf-f32-3" msgstr "JDF F32 3" msgid "finishing-template.jdf-f32-4" msgstr "JDF F32 4" msgid "finishing-template.jdf-f32-5" msgstr "JDF F32 5" msgid "finishing-template.jdf-f32-6" msgstr "JDF F32 6" msgid "finishing-template.jdf-f32-7" msgstr "JDF F32 7" msgid "finishing-template.jdf-f32-8" msgstr "JDF F32 8" msgid "finishing-template.jdf-f32-9" msgstr "JDF F32 9" msgid "finishing-template.jdf-f36-1" msgstr "JDF F36 1" msgid "finishing-template.jdf-f36-2" msgstr "JDF F36 2" msgid "finishing-template.jdf-f4-1" msgstr "JDF F4 1" msgid "finishing-template.jdf-f4-2" msgstr "JDF F4 2" msgid "finishing-template.jdf-f40-1" msgstr "JDF F40 1" msgid "finishing-template.jdf-f48-1" msgstr "JDF F48 1" msgid "finishing-template.jdf-f48-2" msgstr "JDF F48 2" msgid "finishing-template.jdf-f6-1" msgstr "JDF F6 1" msgid "finishing-template.jdf-f6-2" msgstr "JDF F6 2" msgid "finishing-template.jdf-f6-3" msgstr "JDF F6 3" msgid "finishing-template.jdf-f6-4" msgstr "JDF F6 4" msgid "finishing-template.jdf-f6-5" msgstr "JDF F6 5" msgid "finishing-template.jdf-f6-6" msgstr "JDF F6 6" msgid "finishing-template.jdf-f6-7" msgstr "JDF F6 7" msgid "finishing-template.jdf-f6-8" msgstr "JDF F6 8" msgid "finishing-template.jdf-f64-1" msgstr "JDF F64 1" msgid "finishing-template.jdf-f64-2" msgstr "JDF F64 2" msgid "finishing-template.jdf-f8-1" msgstr "JDF F8 1" msgid "finishing-template.jdf-f8-2" msgstr "JDF F8 2" msgid "finishing-template.jdf-f8-3" msgstr "JDF F8 3" msgid "finishing-template.jdf-f8-4" msgstr "JDF F8 4" msgid "finishing-template.jdf-f8-5" msgstr "JDF F8 5" msgid "finishing-template.jdf-f8-6" msgstr "JDF F8 6" msgid "finishing-template.jdf-f8-7" msgstr "JDF F8 7" msgid "finishing-template.jog-offset" msgstr "Jog Offset" msgid "finishing-template.laminate" msgstr "Laminate" msgid "finishing-template.punch" msgstr "Punch" msgid "finishing-template.punch-bottom-left" msgstr "Punch Bottom Left" msgid "finishing-template.punch-bottom-right" msgstr "Punch Bottom Right" msgid "finishing-template.punch-dual-bottom" msgstr "Punch Dual Bottom" msgid "finishing-template.punch-dual-left" msgstr "Punch Dual Left" msgid "finishing-template.punch-dual-right" msgstr "Punch Dual Right" msgid "finishing-template.punch-dual-top" msgstr "Punch Dual Top" msgid "finishing-template.punch-multiple-bottom" msgstr "Punch Multiple Bottom" msgid "finishing-template.punch-multiple-left" msgstr "Punch Multiple Left" msgid "finishing-template.punch-multiple-right" msgstr "Punch Multiple Right" msgid "finishing-template.punch-multiple-top" msgstr "Punch Multiple Top" msgid "finishing-template.punch-quad-bottom" msgstr "Punch Quad Bottom" msgid "finishing-template.punch-quad-left" msgstr "Punch Quad Left" msgid "finishing-template.punch-quad-right" msgstr "Punch Quad Right" msgid "finishing-template.punch-quad-top" msgstr "Punch Quad Top" msgid "finishing-template.punch-top-left" msgstr "Punch Top Left" msgid "finishing-template.punch-top-right" msgstr "Punch Top Right" msgid "finishing-template.punch-triple-bottom" msgstr "Punch Triple Bottom" msgid "finishing-template.punch-triple-left" msgstr "Punch Triple Left" msgid "finishing-template.punch-triple-right" msgstr "Punch Triple Right" msgid "finishing-template.punch-triple-top" msgstr "Punch Triple Top" msgid "finishing-template.saddle-stitch" msgstr "Saddle Stitch" msgid "finishing-template.staple" msgstr "Staple" msgid "finishing-template.staple-bottom-left" msgstr "Staple Bottom Left" msgid "finishing-template.staple-bottom-right" msgstr "Staple Bottom Right" msgid "finishing-template.staple-dual-bottom" msgstr "Staple Dual Bottom" msgid "finishing-template.staple-dual-left" msgstr "Staple Dual Left" msgid "finishing-template.staple-dual-right" msgstr "Staple Dual Right" msgid "finishing-template.staple-dual-top" msgstr "Staple Dual Top" msgid "finishing-template.staple-top-left" msgstr "Staple Top Left" msgid "finishing-template.staple-top-right" msgstr "Staple Top Right" msgid "finishing-template.staple-triple-bottom" msgstr "Staple Triple Bottom" msgid "finishing-template.staple-triple-left" msgstr "Staple Triple Left" msgid "finishing-template.staple-triple-right" msgstr "Staple Triple Right" msgid "finishing-template.staple-triple-top" msgstr "Staple Triple Top" msgid "finishing-template.trim" msgstr "Trim" msgid "finishing-template.trim-after-copies" msgstr "Trim After Copies" msgid "finishing-template.trim-after-documents" msgstr "Trim After Documents" msgid "finishing-template.trim-after-job" msgstr "Trim After Job" msgid "finishing-template.trim-after-pages" msgstr "Trim After Pages" msgid "finishings" msgstr "Finishings" msgid "finishings-col" msgstr "Finishings" msgid "finishings.10" msgstr "Fold" msgid "finishings.100" msgstr "Fold Z" msgid "finishings.101" msgstr "Fold Engineering Z" msgid "finishings.11" msgstr "Trim" msgid "finishings.12" msgstr "Bale" msgid "finishings.13" msgstr "Booklet Maker" msgid "finishings.14" msgstr "Jog Offset" msgid "finishings.15" msgstr "Coat" msgid "finishings.16" msgstr "Laminate" msgid "finishings.20" msgstr "Staple Top Left" msgid "finishings.21" msgstr "Staple Bottom Left" msgid "finishings.22" msgstr "Staple Top Right" msgid "finishings.23" msgstr "Staple Bottom Right" msgid "finishings.24" msgstr "Edge Stitch Left" msgid "finishings.25" msgstr "Edge Stitch Top" msgid "finishings.26" msgstr "Edge Stitch Right" msgid "finishings.27" msgstr "Edge Stitch Bottom" msgid "finishings.28" msgstr "Staple Dual Left" msgid "finishings.29" msgstr "Staple Dual Top" msgid "finishings.3" msgstr "None" msgid "finishings.30" msgstr "Staple Dual Right" msgid "finishings.31" msgstr "Staple Dual Bottom" msgid "finishings.32" msgstr "Staple Triple Left" msgid "finishings.33" msgstr "Staple Triple Top" msgid "finishings.34" msgstr "Staple Triple Right" msgid "finishings.35" msgstr "Staple Triple Bottom" msgid "finishings.4" msgstr "Staple" msgid "finishings.5" msgstr "Punch" msgid "finishings.50" msgstr "Bind Left" msgid "finishings.51" msgstr "Bind Top" msgid "finishings.52" msgstr "Bind Right" msgid "finishings.53" msgstr "Bind Bottom" msgid "finishings.6" msgstr "Cover" msgid "finishings.60" msgstr "Trim After Pages" msgid "finishings.61" msgstr "Trim After Documents" msgid "finishings.62" msgstr "Trim After Copies" msgid "finishings.63" msgstr "Trim After Job" msgid "finishings.7" msgstr "Bind" msgid "finishings.70" msgstr "Punch Top Left" msgid "finishings.71" msgstr "Punch Bottom Left" msgid "finishings.72" msgstr "Punch Top Right" msgid "finishings.73" msgstr "Punch Bottom Right" msgid "finishings.74" msgstr "Punch Dual Left" msgid "finishings.75" msgstr "Punch Dual Top" msgid "finishings.76" msgstr "Punch Dual Right" msgid "finishings.77" msgstr "Punch Dual Bottom" msgid "finishings.78" msgstr "Punch Triple Left" msgid "finishings.79" msgstr "Punch Triple Top" msgid "finishings.8" msgstr "Saddle Stitch" msgid "finishings.80" msgstr "Punch Triple Right" msgid "finishings.81" msgstr "Punch Triple Bottom" msgid "finishings.82" msgstr "Punch Quad Left" msgid "finishings.83" msgstr "Punch Quad Top" msgid "finishings.84" msgstr "Punch Quad Right" msgid "finishings.85" msgstr "Punch Quad Bottom" msgid "finishings.86" msgstr "Punch Multiple Left" msgid "finishings.87" msgstr "Punch Multiple Top" msgid "finishings.88" msgstr "Punch Multiple Right" msgid "finishings.89" msgstr "Punch Multiple Bottom" msgid "finishings.9" msgstr "Edge Stitch" msgid "finishings.90" msgstr "Fold Accordion" msgid "finishings.91" msgstr "Fold Double Gate" msgid "finishings.92" msgstr "Fold Gate" msgid "finishings.93" msgstr "Fold Half" msgid "finishings.94" msgstr "Fold Half Z" msgid "finishings.95" msgstr "Fold Left Gate" msgid "finishings.96" msgstr "Fold Letter" msgid "finishings.97" msgstr "Fold Parallel" msgid "finishings.98" msgstr "Fold Poster" msgid "finishings.99" msgstr "Fold Right Gate" msgid "folding" msgstr "Fold" msgid "folding-direction" msgstr "Folding Direction" msgid "folding-direction.inward" msgstr "Inward" msgid "folding-direction.outward" msgstr "Outward" msgid "folding-offset" msgstr "Fold Position" msgid "folding-reference-edge" msgstr "Folding Reference Edge" msgid "folding-reference-edge.bottom" msgstr "Bottom" msgid "folding-reference-edge.left" msgstr "Left" msgid "folding-reference-edge.right" msgstr "Right" msgid "folding-reference-edge.top" msgstr "Top" msgid "font-name-requested" msgstr "Font Name" msgid "font-size-requested" msgstr "Font Size" msgid "force-front-side" msgstr "Force Front Side" msgid "from-name" msgstr "From Name" msgid "held" msgstr "задержано" msgid "help\t\tGet help on commands." msgstr "help\t\tПолучить Ñправку по командам." msgid "idle" msgstr "Ñвободен" msgid "imposition-template" msgstr "Imposition Template" msgid "imposition-template.none" msgstr "None" msgid "imposition-template.signature" msgstr "Signature" msgid "input-attributes" msgstr "Input Attributes" msgid "input-auto-scaling" msgstr "Scan Auto Scaling" msgid "input-auto-skew-correction" msgstr "Scan Auto Skew Correction" msgid "input-brightness" msgstr "Scan Brightness" msgid "input-color-mode" msgstr "Input Color Mode" msgid "input-color-mode.auto" msgstr "Automatic" msgid "input-color-mode.bi-level" msgstr "Bi-Level" msgid "input-color-mode.cmyk_16" msgstr "CMYK 16" msgid "input-color-mode.cmyk_8" msgstr "CMYK 8" msgid "input-color-mode.color" msgstr "Color" msgid "input-color-mode.color_8" msgstr "Color 8" msgid "input-color-mode.monochrome" msgstr "Monochrome" msgid "input-color-mode.monochrome_16" msgstr "Monochrome 16" msgid "input-color-mode.monochrome_4" msgstr "Monochrome 4" msgid "input-color-mode.monochrome_8" msgstr "Monochrome 8" msgid "input-color-mode.rgb_16" msgstr "RGB 16" msgid "input-color-mode.rgba_16" msgstr "RGBA 16" msgid "input-color-mode.rgba_8" msgstr "RGBA 8" msgid "input-content-type" msgstr "Input Content Type" msgid "input-content-type.auto" msgstr "Automatic" msgid "input-content-type.halftone" msgstr "Halftone" msgid "input-content-type.line-art" msgstr "Line Art" msgid "input-content-type.magazine" msgstr "Magazine" msgid "input-content-type.photo" msgstr "Photo" msgid "input-content-type.text" msgstr "Text" msgid "input-content-type.text-and-photo" msgstr "Text And Photo" msgid "input-contrast" msgstr "Scan Contrast" msgid "input-film-scan-mode" msgstr "Input Film Scan Mode" msgid "input-film-scan-mode.black-and-white-negative-film" msgstr "Black And White Negative Film" msgid "input-film-scan-mode.color-negative-film" msgstr "Color Negative Film" msgid "input-film-scan-mode.color-slide-film" msgstr "Color Slide Film" msgid "input-film-scan-mode.not-applicable" msgstr "Not Applicable" msgid "input-images-to-transfer" msgstr "Scan Images To Transfer" msgid "input-media" msgstr "Input Media" msgid "input-media.auto" msgstr "Automatic" msgid "input-orientation-requested" msgstr "Input Orientation" msgid "input-quality" msgstr "Input Quality" msgid "input-resolution" msgstr "Scan Resolution" msgid "input-scaling-height" msgstr "Scan Scaling Height" msgid "input-scaling-width" msgstr "Scan Scaling Width" msgid "input-scan-regions" msgstr "Scan Regions" msgid "input-sharpness" msgstr "Scan Sharpness" msgid "input-sides" msgstr "Input Sides" msgid "input-source" msgstr "Input Source" msgid "input-source.adf" msgstr "Adf" msgid "input-source.film-reader" msgstr "Film Reader" msgid "input-source.platen" msgstr "Platen" msgid "insert-after-page-number" msgstr "Insert Page Number" msgid "insert-count" msgstr "Insert Count" msgid "insert-sheet" msgstr "Insert Sheet" #, c-format msgid "ippfind: Bad regular expression: %s" msgstr "ippfind: неправильное регулÑрное выражение: %s" msgid "ippfind: Cannot use --and after --or." msgstr "ippfind: не иÑпользуйте --and поÑле --or." #, c-format msgid "ippfind: Expected key name after %s." msgstr "ippfind: ОжидаетÑÑ key name поÑле %s." #, c-format msgid "ippfind: Expected port range after %s." msgstr "ippfind: ОжидаетÑÑ port range поÑле %s." #, c-format msgid "ippfind: Expected program after %s." msgstr "ippfind: ОжидаетÑÑ program поÑле %s." #, c-format msgid "ippfind: Expected semi-colon after %s." msgstr "ippfind: ОжидаетÑÑ semi-colon поÑле %s." msgid "ippfind: Missing close brace in substitution." msgstr "ippfind: ОтÑутÑтвует Ð·Ð°ÐºÑ€Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð½Ð°Ñ Ñкобка в замене." msgid "ippfind: Missing close parenthesis." msgstr "ippfind: ОтÑутÑтвует Ð·Ð°ÐºÑ€Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ñкобка." msgid "ippfind: Missing expression before \"--and\"." msgstr "ippfind: ОтÑутÑтвует выражение перед \"--and\"." msgid "ippfind: Missing expression before \"--or\"." msgstr "ippfind: ОтÑутÑтвует выражение перед \"--or\"." #, c-format msgid "ippfind: Missing key name after %s." msgstr "ippfind: ОтÑутÑтвует key name поÑле %s." msgid "ippfind: Missing open parenthesis." msgstr "ippfind: ОтÑутÑтвует Ð¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ñкобка." #, c-format msgid "ippfind: Missing program after %s." msgstr "ippfind: ОтÑутÑтвует program поÑле %s." #, c-format msgid "ippfind: Missing regular expression after %s." msgstr "ippfind: ОтÑутÑтвует регулÑрное выражение поÑле %s." #, c-format msgid "ippfind: Missing semi-colon after %s." msgstr "ippfind: ОтÑутÑтвует semi-colon поÑле %s." msgid "ippfind: Out of memory." msgstr "ippfind: ÐедоÑтаточно памÑти." msgid "ippfind: Too many parenthesis." msgstr "ippfind: Слишком много Ñкобок." #, c-format msgid "ippfind: Unable to browse or resolve: %s" msgstr "ippfind: Ðе удаетÑÑ Ð¿Ñ€Ð¾Ñмотреть или определить: %s" #, c-format msgid "ippfind: Unable to execute \"%s\": %s" msgstr "ippfind: Ðе удаетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ \"%s\": %s" #, c-format msgid "ippfind: Unable to use Bonjour: %s" msgstr "ippfind: Ðе удаетÑÑ Ð¸Ñпользовать Bonjour: %s" #, c-format msgid "ippfind: Unknown variable \"{%s}\"." msgstr "ippfind: ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ \"{%s}\"." msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." msgstr "ipptool: Параметры \"-i\" и \"-n\" неÑовмеÑтимы Ñ \"-P\" и \"-X\"." #, c-format msgid "ipptool: Bad URI - %s." msgstr "ipptool: Ðеправильный URI - %s." msgid "ipptool: Invalid seconds for \"-i\"." msgstr "ipptool: Ðеправильные Ñекунды Ð´Ð»Ñ \"-i\"." msgid "ipptool: May only specify a single URI." msgstr "ipptool: Может быть определен лишь один URI." msgid "ipptool: Missing count for \"-n\"." msgstr "ipptool: ОтÑутÑтвует count Ð´Ð»Ñ \"-n\"." msgid "ipptool: Missing filename for \"-f\"." msgstr "ipptool: ОтÑутÑтвует Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ \"-f\"." msgid "ipptool: Missing name=value for \"-d\"." msgstr "ipptool: ОтÑутÑтвует name=value Ð´Ð»Ñ \"-d\"." msgid "ipptool: Missing seconds for \"-i\"." msgstr "ipptool: ОтÑутÑтвуют Ñекунды Ð´Ð»Ñ \"-i\"." msgid "ipptool: URI required before test file." msgstr "ipptool: Ðеобходим URI перед указанием теÑÑ‚-файла." #, c-format msgid "ipptool: Unknown option \"-%c\"." msgstr "ipptool: ÐеизвеÑтный параметр \"-%c\"." msgid "job-account-id" msgstr "Job Account ID" msgid "job-account-type" msgstr "Job Account Type" msgid "job-account-type.general" msgstr "General" msgid "job-account-type.group" msgstr "Group" msgid "job-account-type.none" msgstr "None" msgid "job-accounting-output-bin" msgstr "Job Accounting Output Bin" msgid "job-accounting-sheets" msgstr "Job Accounting Sheets" msgid "job-accounting-sheets-type" msgstr "Job Accounting Sheets Type" msgid "job-accounting-sheets-type.none" msgstr "None" msgid "job-accounting-sheets-type.standard" msgstr "Standard" msgid "job-accounting-user-id" msgstr "Job Accounting User ID" msgid "job-collation-type" msgstr "Job Collation Type" msgid "job-collation-type.3" msgstr "Uncollated Sheets" msgid "job-collation-type.4" msgstr "Collated Documents" msgid "job-collation-type.5" msgstr "Uncollated Documents" msgid "job-copies" msgstr "Job Copies" msgid "job-cover-back" msgstr "Job Cover Back" msgid "job-cover-front" msgstr "Job Cover Front" msgid "job-delay-output-until" msgstr "Job Delay Output Until" msgid "job-delay-output-until-time" msgstr "Job Delay Output Until Time" msgid "job-delay-output-until.day-time" msgstr "Day Time" msgid "job-delay-output-until.evening" msgstr "Evening" msgid "job-delay-output-until.indefinite" msgstr "Indefinite" msgid "job-delay-output-until.night" msgstr "Night" msgid "job-delay-output-until.no-delay-output" msgstr "No Delay Output" msgid "job-delay-output-until.second-shift" msgstr "Second Shift" msgid "job-delay-output-until.third-shift" msgstr "Third Shift" msgid "job-delay-output-until.weekend" msgstr "Weekend" msgid "job-error-action" msgstr "Job Error Action" msgid "job-error-action.abort-job" msgstr "Abort Job" msgid "job-error-action.cancel-job" msgstr "Cancel Job" msgid "job-error-action.continue-job" msgstr "Continue Job" msgid "job-error-action.suspend-job" msgstr "Suspend Job" msgid "job-error-sheet" msgstr "Job Error Sheet" msgid "job-error-sheet-type" msgstr "Job Error Sheet Type" msgid "job-error-sheet-type.none" msgstr "None" msgid "job-error-sheet-type.standard" msgstr "Standard" msgid "job-error-sheet-when" msgstr "Job Error Sheet When" msgid "job-error-sheet-when.always" msgstr "Always" msgid "job-error-sheet-when.on-error" msgstr "On Error" msgid "job-finishings" msgstr "Job Finishings" msgid "job-hold-until" msgstr "Hold Until" msgid "job-hold-until-time" msgstr "Job Hold Until Time" msgid "job-hold-until.day-time" msgstr "Day Time" msgid "job-hold-until.evening" msgstr "Evening" msgid "job-hold-until.indefinite" msgstr "Released" msgid "job-hold-until.night" msgstr "Night" msgid "job-hold-until.no-hold" msgstr "No Hold" msgid "job-hold-until.second-shift" msgstr "Second Shift" msgid "job-hold-until.third-shift" msgstr "Third Shift" msgid "job-hold-until.weekend" msgstr "Weekend" msgid "job-mandatory-attributes" msgstr "Job Mandatory Attributes" msgid "job-name" msgstr "Job Name" msgid "job-phone-number" msgstr "Job Phone Number" msgid "job-printer-uri attribute missing." msgstr "Ðтрибут job-printer-uri отÑутÑтвует." msgid "job-priority" msgstr "Job Priority" msgid "job-recipient-name" msgstr "Job Recipient Name" msgid "job-save-disposition" msgstr "Job Save Disposition" msgid "job-sheet-message" msgstr "Job Sheet Message" msgid "job-sheets" msgstr "Banner Page" msgid "job-sheets-col" msgstr "Banner Page" msgid "job-sheets.first-print-stream-page" msgstr "First Print Stream Page" msgid "job-sheets.job-both-sheet" msgstr "Start and End Sheets" msgid "job-sheets.job-end-sheet" msgstr "End Sheet" msgid "job-sheets.job-start-sheet" msgstr "Start Sheet" msgid "job-sheets.none" msgstr "None" msgid "job-sheets.standard" msgstr "Standard" msgid "job-state" msgstr "Job State" msgid "job-state-message" msgstr "Job State Message" msgid "job-state-reasons" msgstr "Detailed Job State" msgid "job-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "job-state-reasons.account-authorization-failed" msgstr "Account Authorization Failed" msgid "job-state-reasons.account-closed" msgstr "Account Closed" msgid "job-state-reasons.account-info-needed" msgstr "Account Info Needed" msgid "job-state-reasons.account-limit-reached" msgstr "Account Limit Reached" msgid "job-state-reasons.compression-error" msgstr "Compression Error" msgid "job-state-reasons.conflicting-attributes" msgstr "Conflicting Attributes" msgid "job-state-reasons.connected-to-destination" msgstr "Connected To Destination" msgid "job-state-reasons.connecting-to-destination" msgstr "Connecting To Destination" msgid "job-state-reasons.destination-uri-failed" msgstr "Destination Uri Failed" msgid "job-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "job-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "job-state-reasons.document-access-error" msgstr "Document Access Error" msgid "job-state-reasons.document-format-error" msgstr "Document Format Error" msgid "job-state-reasons.document-password-error" msgstr "Document Password Error" msgid "job-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "job-state-reasons.document-security-error" msgstr "Document Security Error" msgid "job-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "job-state-reasons.errors-detected" msgstr "Errors Detected" msgid "job-state-reasons.job-canceled-at-device" msgstr "Job Canceled At Device" msgid "job-state-reasons.job-canceled-by-operator" msgstr "Job Canceled By Operator" msgid "job-state-reasons.job-canceled-by-user" msgstr "Job Canceled By User" msgid "job-state-reasons.job-completed-successfully" msgstr "Job Completed Successfully" msgid "job-state-reasons.job-completed-with-errors" msgstr "Job Completed With Errors" msgid "job-state-reasons.job-completed-with-warnings" msgstr "Job Completed With Warnings" msgid "job-state-reasons.job-data-insufficient" msgstr "Job Data Insufficient" msgid "job-state-reasons.job-delay-output-until-specified" msgstr "Job Delay Output Until Specified" msgid "job-state-reasons.job-digital-signature-wait" msgstr "Job Digital Signature Wait" msgid "job-state-reasons.job-fetchable" msgstr "Job Fetchable" msgid "job-state-reasons.job-held-for-review" msgstr "Job Held For Review" msgid "job-state-reasons.job-hold-until-specified" msgstr "Job Hold Until Specified" msgid "job-state-reasons.job-incoming" msgstr "Job Incoming" msgid "job-state-reasons.job-interpreting" msgstr "Job Interpreting" msgid "job-state-reasons.job-outgoing" msgstr "Job Outgoing" msgid "job-state-reasons.job-password-wait" msgstr "Job Password Wait" msgid "job-state-reasons.job-printed-successfully" msgstr "Job Printed Successfully" msgid "job-state-reasons.job-printed-with-errors" msgstr "Job Printed With Errors" msgid "job-state-reasons.job-printed-with-warnings" msgstr "Job Printed With Warnings" msgid "job-state-reasons.job-printing" msgstr "Job Printing" msgid "job-state-reasons.job-queued" msgstr "Job Queued" msgid "job-state-reasons.job-queued-for-marker" msgstr "Job Queued For Marker" msgid "job-state-reasons.job-release-wait" msgstr "Job Release Wait" msgid "job-state-reasons.job-restartable" msgstr "Job Restartable" msgid "job-state-reasons.job-resuming" msgstr "Job Resuming" msgid "job-state-reasons.job-saved-successfully" msgstr "Job Saved Successfully" msgid "job-state-reasons.job-saved-with-errors" msgstr "Job Saved With Errors" msgid "job-state-reasons.job-saved-with-warnings" msgstr "Job Saved With Warnings" msgid "job-state-reasons.job-saving" msgstr "Job Saving" msgid "job-state-reasons.job-spooling" msgstr "Job Spooling" msgid "job-state-reasons.job-streaming" msgstr "Job Streaming" msgid "job-state-reasons.job-suspended" msgstr "Job Suspended" msgid "job-state-reasons.job-suspended-by-operator" msgstr "Job Suspended By Operator" msgid "job-state-reasons.job-suspended-by-system" msgstr "Job Suspended By System" msgid "job-state-reasons.job-suspended-by-user" msgstr "Job Suspended By User" msgid "job-state-reasons.job-suspending" msgstr "Job Suspending" msgid "job-state-reasons.job-transferring" msgstr "Job Transferring" msgid "job-state-reasons.job-transforming" msgstr "Job Transforming" msgid "job-state-reasons.none" msgstr "None" msgid "job-state-reasons.printer-stopped" msgstr "Printer Stopped" msgid "job-state-reasons.printer-stopped-partly" msgstr "Printer Stopped Partly" msgid "job-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "job-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "job-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "job-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "job-state-reasons.service-off-line" msgstr "Service Off Line" msgid "job-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "job-state-reasons.unsupported-attributes-or-values" msgstr "Unsupported Attributes Or Values" msgid "job-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "job-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "job-state-reasons.waiting-for-user-action" msgstr "Waiting For User Action" msgid "job-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "job-state.3" msgstr "Pending" msgid "job-state.4" msgstr "Pending Held" msgid "job-state.5" msgstr "Processing" msgid "job-state.6" msgstr "Processing Stopped" msgid "job-state.7" msgstr "Canceled" msgid "job-state.8" msgstr "Aborted" msgid "job-state.9" msgstr "Completed" msgid "laminating" msgstr "Laminate Pages" msgid "laminating-sides" msgstr "Laminating Sides" msgid "laminating-sides.back" msgstr "Back" msgid "laminating-sides.both" msgstr "Both" msgid "laminating-sides.front" msgstr "Front" msgid "laminating-type" msgstr "Laminating Type" msgid "laminating-type.archival" msgstr "Archival" msgid "laminating-type.glossy" msgstr "Glossy" msgid "laminating-type.high-gloss" msgstr "High Gloss" msgid "laminating-type.matte" msgstr "Matte" msgid "laminating-type.semi-gloss" msgstr "Semi-Gloss" msgid "laminating-type.translucent" msgstr "Translucent" msgid "logo" msgstr "Logo" msgid "lpadmin: Class name can only contain printable characters." msgstr "lpadmin: Ð˜Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ может Ñодержать только печатаемые Ñимволы." #, c-format msgid "lpadmin: Expected PPD after \"-%c\" option." msgstr "" msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option." msgstr "lpadmin: ПоÑле параметра '-u' должен быть указан allow/deny:userlist." msgid "lpadmin: Expected class after \"-r\" option." msgstr "lpadmin: ПоÑле параметра \"-r\" должно быть указано Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹." msgid "lpadmin: Expected class name after \"-c\" option." msgstr "lpadmin: ПоÑле параметра \"-c\" должно быть указано Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹." msgid "lpadmin: Expected description after \"-D\" option." msgstr "lpadmin: ПоÑле параметра \"-D\" должно быть указано опиÑание." msgid "lpadmin: Expected device URI after \"-v\" option." msgstr "lpadmin: ПоÑле параметра \"-v\" должен быть указан URI" msgid "lpadmin: Expected file type(s) after \"-I\" option." msgstr "ПоÑле параметра \"-I\" должен(-ны) быть указан(-Ñ‹) тип(-Ñ‹) файла(-ов)." msgid "lpadmin: Expected hostname after \"-h\" option." msgstr "lpadmin: ПоÑле параметра \"-h\" должно быть указано Ð¸Ð¼Ñ Ñ…Ð¾Ñта." msgid "lpadmin: Expected location after \"-L\" option." msgstr "lpadmin: ПоÑле параметра \"-L\" должно быть указано меÑтоположение." msgid "lpadmin: Expected model after \"-m\" option." msgstr "lpadmin: ПоÑле параметра \"-m\" должна быть указана модель." msgid "lpadmin: Expected name after \"-R\" option." msgstr "lpadmin: ПоÑле параметра \"-R\" должно быть указано имÑ." msgid "lpadmin: Expected name=value after \"-o\" option." msgstr "lpadmin: ПоÑле параметра \"-o\" должно быть указано name=value" msgid "lpadmin: Expected printer after \"-p\" option." msgstr "lpadmin: ПоÑле параметра \"-p\" должен быть указан принтер." msgid "lpadmin: Expected printer name after \"-d\" option." msgstr "lpadmin: ПоÑле параметра \"-d\" должно быть указано Ð¸Ð¼Ñ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð°." msgid "lpadmin: Expected printer or class after \"-x\" option." msgstr "lpadmin: ПоÑле параметра \"-x\" должен быть указан принтер или группа." msgid "lpadmin: No member names were seen." msgstr "lpadmin: Имена пользователей не были найдены." #, c-format msgid "lpadmin: Printer %s is already a member of class %s." msgstr "lpadmin: Принтер %s уже находитÑÑ Ð² группе %s." #, c-format msgid "lpadmin: Printer %s is not a member of class %s." msgstr "lpadmin: Принтер %s не находитÑÑ Ð² группе %s." msgid "lpadmin: Printer name can only contain printable characters." msgstr "lpadmin: Ð˜Ð¼Ñ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð° может Ñодержать только печатаемые Ñимволы." msgid "" "lpadmin: Raw queues are deprecated and will stop working in a future version " "of CUPS." msgstr "" msgid "" "lpadmin: System V interface scripts are no longer supported for security " "reasons." msgstr "" msgid "" "lpadmin: Unable to add a printer to the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: Ðе удаетÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ принтер в группу:\n" "\t Ðеобходимо Ñначала указать Ð¸Ð¼Ñ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð°." #, c-format msgid "lpadmin: Unable to connect to server: %s" msgstr "lpadmin: Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº Ñерверу: %s" msgid "lpadmin: Unable to create temporary file" msgstr "lpadmin: Ðе удаетÑÑ Ñоздать временный файл" msgid "" "lpadmin: Unable to delete option:\n" " You must specify a printer name first." msgstr "" "lpadmin: Ðе удаетÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ параметр:\n" "\t Ðеобходимо Ñначала указать Ð¸Ð¼Ñ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð°." #, c-format msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d." msgstr "" #, c-format msgid "lpadmin: Unable to open PPD file \"%s\" - %s" msgstr "lpadmin: Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ PPD-файл \"%s\" - %s" msgid "" "lpadmin: Unable to remove a printer from the class:\n" " You must specify a printer name first." msgstr "" "lpadmin: Ðе удаетÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ принтер из группы:\n" "\t Ðеобходимо Ñначала указать Ð¸Ð¼Ñ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð°." msgid "" "lpadmin: Unable to set the printer options:\n" " You must specify a printer name first." msgstr "" "lpadmin: Ðе удаетÑÑ Ð½Ð°Ñтроить параметры принтера:\n" "\t Ðеобходимо Ñначала указать Ð¸Ð¼Ñ Ð¿Ñ€Ð¸Ð½Ñ‚ÐµÑ€Ð°." #, c-format msgid "lpadmin: Unknown allow/deny option \"%s\"." msgstr "lpadmin: ÐеизвеÑтный параметр allow/deny \"%s\"." #, c-format msgid "lpadmin: Unknown argument \"%s\"." msgstr "lpadmin: ÐеизвеÑтный аргумент \"%s\"." #, c-format msgid "lpadmin: Unknown option \"%c\"." msgstr "lpadmin: ÐеизвеÑтный параметр \"%c\"." msgid "lpadmin: Use the 'everywhere' model for shared printers." msgstr "" msgid "lpadmin: Warning - content type list ignored." msgstr "lpadmin: Внимание - ÑпиÑок типов Ñодержимого пропущен." msgid "lpc> " msgstr "lpc> " msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"." msgstr "lpinfo: ПоÑле \"--device-id\" должна идти Ñтрока ID уÑтройÑтва 1284" msgid "lpinfo: Expected language after \"--language\"." msgstr "lpinfo: ПоÑле \"--language\" необходимо указать Ñзык." msgid "lpinfo: Expected make and model after \"--make-and-model\"." msgstr "lpinfo: ПоÑле \"--make-and-model\" должна быть указана марка и модель." msgid "lpinfo: Expected product string after \"--product\"." msgstr "lpinfo: ПоÑле \"--product\" должна идти Ñтрока продукта." msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"." msgstr "lpinfo: ПоÑле \"--exclude-schemes\" должен идти ÑпиÑок Ñхем." msgid "lpinfo: Expected scheme list after \"--include-schemes\"." msgstr "lpinfo: ПоÑле \"--include-schemes\" должен идти ÑпиÑок Ñхем." msgid "lpinfo: Expected timeout after \"--timeout\"." msgstr "lpinfo: ПоÑле \"--timeout\" должно быть указано Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ" #, c-format msgid "lpmove: Unable to connect to server: %s" msgstr "lpmove: Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº Ñерверу: %s" #, c-format msgid "lpmove: Unknown argument \"%s\"." msgstr "lpmove: ÐеизвеÑтный аргумент \"%s\"." msgid "lpoptions: No printers." msgstr "lpoptions: Ðет принтеров." #, c-format msgid "lpoptions: Unable to add printer or instance: %s" msgstr "lpoptions: Ðе удаетÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ принтер или предÑÑ‚Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ ÐºÐ»Ð°ÑÑа: %s" #, c-format msgid "lpoptions: Unable to get PPD file for %s: %s" msgstr "lpoptions: Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ PPD-файл Ð´Ð»Ñ %s: %s" #, c-format msgid "lpoptions: Unable to open PPD file for %s." msgstr "lpoptions: Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ PPD файл Ð´Ð»Ñ %s" msgid "lpoptions: Unknown printer or class." msgstr "lpoptions: ÐеизвеÑтный принтер или группа" #, c-format msgid "" "lpstat: error - %s environment variable names non-existent destination \"%s" "\"." msgstr "" "lpstat: ошибка - %s Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ неÑущеÑтвующее " "назначение \"%s\"\n" msgid "material-amount" msgstr "Amount of Material" msgid "material-amount-units" msgstr "Material Amount Units" msgid "material-amount-units.g" msgstr "G" msgid "material-amount-units.kg" msgstr "Kg" msgid "material-amount-units.l" msgstr "L" msgid "material-amount-units.m" msgstr "M" msgid "material-amount-units.ml" msgstr "Ml" msgid "material-amount-units.mm" msgstr "Mm" msgid "material-color" msgstr "Material Color" msgid "material-diameter" msgstr "Material Diameter" msgid "material-diameter-tolerance" msgstr "Material Diameter Tolerance" msgid "material-fill-density" msgstr "Material Fill Density" msgid "material-name" msgstr "Material Name" msgid "material-purpose" msgstr "Material Purpose" msgid "material-purpose.all" msgstr "All" msgid "material-purpose.base" msgstr "Base" msgid "material-purpose.in-fill" msgstr "In Fill" msgid "material-purpose.shell" msgstr "Shell" msgid "material-purpose.support" msgstr "Support" msgid "material-rate" msgstr "Feed Rate" msgid "material-rate-units" msgstr "Material Rate Units" msgid "material-rate-units.mg_second" msgstr "Mg Second" msgid "material-rate-units.ml_second" msgstr "Ml Second" msgid "material-rate-units.mm_second" msgstr "Mm Second" msgid "material-shell-thickness" msgstr "Material Shell Thickness" msgid "material-temperature" msgstr "Material Temperature" msgid "material-type" msgstr "Material Type" msgid "material-type.abs" msgstr "Abs" msgid "material-type.abs-carbon-fiber" msgstr "Abs Carbon Fiber" msgid "material-type.abs-carbon-nanotube" msgstr "Abs Carbon Nanotube" msgid "material-type.chocolate" msgstr "Chocolate" msgid "material-type.gold" msgstr "Gold" msgid "material-type.nylon" msgstr "Nylon" msgid "material-type.pet" msgstr "Pet" msgid "material-type.photopolymer" msgstr "Photopolymer" msgid "material-type.pla" msgstr "Pla" msgid "material-type.pla-conductive" msgstr "Pla Conductive" msgid "material-type.pla-flexible" msgstr "Pla Flexible" msgid "material-type.pla-magnetic" msgstr "Pla Magnetic" msgid "material-type.pla-steel" msgstr "Pla Steel" msgid "material-type.pla-stone" msgstr "Pla Stone" msgid "material-type.pla-wood" msgstr "Pla Wood" msgid "material-type.polycarbonate" msgstr "Polycarbonate" msgid "material-type.pva-dissolvable" msgstr "Dissolvable PVA" msgid "material-type.silver" msgstr "Silver" msgid "material-type.titanium" msgstr "Titanium" msgid "material-type.wax" msgstr "Wax" msgid "materials-col" msgstr "Materials" msgid "media" msgstr "Media" msgid "media-back-coating" msgstr "Media Back Coating" msgid "media-back-coating.glossy" msgstr "Glossy" msgid "media-back-coating.high-gloss" msgstr "High Gloss" msgid "media-back-coating.matte" msgstr "Matte" msgid "media-back-coating.none" msgstr "None" msgid "media-back-coating.satin" msgstr "Satin" msgid "media-back-coating.semi-gloss" msgstr "Semi-Gloss" msgid "media-bottom-margin" msgstr "Media Bottom Margin" msgid "media-col" msgstr "Media" msgid "media-color" msgstr "Media Color" msgid "media-color.black" msgstr "Black" msgid "media-color.blue" msgstr "Blue" msgid "media-color.brown" msgstr "Brown" msgid "media-color.buff" msgstr "Buff" msgid "media-color.clear-black" msgstr "Clear Black" msgid "media-color.clear-blue" msgstr "Clear Blue" msgid "media-color.clear-brown" msgstr "Clear Brown" msgid "media-color.clear-buff" msgstr "Clear Buff" msgid "media-color.clear-cyan" msgstr "Clear Cyan" msgid "media-color.clear-gold" msgstr "Clear Gold" msgid "media-color.clear-goldenrod" msgstr "Clear Goldenrod" msgid "media-color.clear-gray" msgstr "Clear Gray" msgid "media-color.clear-green" msgstr "Clear Green" msgid "media-color.clear-ivory" msgstr "Clear Ivory" msgid "media-color.clear-magenta" msgstr "Clear Magenta" msgid "media-color.clear-multi-color" msgstr "Clear Multi Color" msgid "media-color.clear-mustard" msgstr "Clear Mustard" msgid "media-color.clear-orange" msgstr "Clear Orange" msgid "media-color.clear-pink" msgstr "Clear Pink" msgid "media-color.clear-red" msgstr "Clear Red" msgid "media-color.clear-silver" msgstr "Clear Silver" msgid "media-color.clear-turquoise" msgstr "Clear Turquoise" msgid "media-color.clear-violet" msgstr "Clear Violet" msgid "media-color.clear-white" msgstr "Clear White" msgid "media-color.clear-yellow" msgstr "Clear Yellow" msgid "media-color.cyan" msgstr "Cyan" msgid "media-color.dark-blue" msgstr "Dark Blue" msgid "media-color.dark-brown" msgstr "Dark Brown" msgid "media-color.dark-buff" msgstr "Dark Buff" msgid "media-color.dark-cyan" msgstr "Dark Cyan" msgid "media-color.dark-gold" msgstr "Dark Gold" msgid "media-color.dark-goldenrod" msgstr "Dark Goldenrod" msgid "media-color.dark-gray" msgstr "Dark Gray" msgid "media-color.dark-green" msgstr "Dark Green" msgid "media-color.dark-ivory" msgstr "Dark Ivory" msgid "media-color.dark-magenta" msgstr "Dark Magenta" msgid "media-color.dark-mustard" msgstr "Dark Mustard" msgid "media-color.dark-orange" msgstr "Dark Orange" msgid "media-color.dark-pink" msgstr "Dark Pink" msgid "media-color.dark-red" msgstr "Dark Red" msgid "media-color.dark-silver" msgstr "Dark Silver" msgid "media-color.dark-turquoise" msgstr "Dark Turquoise" msgid "media-color.dark-violet" msgstr "Dark Violet" msgid "media-color.dark-yellow" msgstr "Dark Yellow" msgid "media-color.gold" msgstr "Gold" msgid "media-color.goldenrod" msgstr "Goldenrod" msgid "media-color.gray" msgstr "Gray" msgid "media-color.green" msgstr "Green" msgid "media-color.ivory" msgstr "Ivory" msgid "media-color.light-black" msgstr "Light Black" msgid "media-color.light-blue" msgstr "Light Blue" msgid "media-color.light-brown" msgstr "Light Brown" msgid "media-color.light-buff" msgstr "Light Buff" msgid "media-color.light-cyan" msgstr "Light Cyan" msgid "media-color.light-gold" msgstr "Light Gold" msgid "media-color.light-goldenrod" msgstr "Light Goldenrod" msgid "media-color.light-gray" msgstr "Light Gray" msgid "media-color.light-green" msgstr "Light Green" msgid "media-color.light-ivory" msgstr "Light Ivory" msgid "media-color.light-magenta" msgstr "Light Magenta" msgid "media-color.light-mustard" msgstr "Light Mustard" msgid "media-color.light-orange" msgstr "Light Orange" msgid "media-color.light-pink" msgstr "Light Pink" msgid "media-color.light-red" msgstr "Light Red" msgid "media-color.light-silver" msgstr "Light Silver" msgid "media-color.light-turquoise" msgstr "Light Turquoise" msgid "media-color.light-violet" msgstr "Light Violet" msgid "media-color.light-yellow" msgstr "Light Yellow" msgid "media-color.magenta" msgstr "Magenta" msgid "media-color.multi-color" msgstr "Multi-Color" msgid "media-color.mustard" msgstr "Mustard" msgid "media-color.no-color" msgstr "No Color" msgid "media-color.orange" msgstr "Orange" msgid "media-color.pink" msgstr "Pink" msgid "media-color.red" msgstr "Red" msgid "media-color.silver" msgstr "Silver" msgid "media-color.turquoise" msgstr "Turquoise" msgid "media-color.violet" msgstr "Violet" msgid "media-color.white" msgstr "White" msgid "media-color.yellow" msgstr "Yellow" msgid "media-front-coating" msgstr "Media Front Coating" msgid "media-grain" msgstr "Media Grain" msgid "media-grain.x-direction" msgstr "Cross-Feed Direction" msgid "media-grain.y-direction" msgstr "Feed Direction" msgid "media-hole-count" msgstr "Media Hole Count" msgid "media-info" msgstr "Media Info" msgid "media-input-tray-check" msgstr "Media Input Tray Check" msgid "media-left-margin" msgstr "Media Left Margin" msgid "media-pre-printed" msgstr "Media Preprinted" msgid "media-pre-printed.blank" msgstr "Blank" msgid "media-pre-printed.letter-head" msgstr "Letterhead" msgid "media-pre-printed.pre-printed" msgstr "Preprinted" msgid "media-recycled" msgstr "Media Recycled" msgid "media-recycled.none" msgstr "None" msgid "media-recycled.standard" msgstr "Standard" msgid "media-right-margin" msgstr "Media Right Margin" msgid "media-size" msgstr "Media Dimensions" msgid "media-size-name" msgstr "Media Name" msgid "media-source" msgstr "Media Source" msgid "media-source.alternate" msgstr "Alternate" msgid "media-source.alternate-roll" msgstr "Alternate Roll" msgid "media-source.auto" msgstr "Automatic" msgid "media-source.bottom" msgstr "Bottom" msgid "media-source.by-pass-tray" msgstr "By Pass Tray" msgid "media-source.center" msgstr "Center" msgid "media-source.disc" msgstr "Disc" msgid "media-source.envelope" msgstr "Envelope" msgid "media-source.hagaki" msgstr "Hagaki" msgid "media-source.large-capacity" msgstr "Large Capacity" msgid "media-source.left" msgstr "Left" msgid "media-source.main" msgstr "Main" msgid "media-source.main-roll" msgstr "Main Roll" msgid "media-source.manual" msgstr "Manual" msgid "media-source.middle" msgstr "Middle" msgid "media-source.photo" msgstr "Photo" msgid "media-source.rear" msgstr "Rear" msgid "media-source.right" msgstr "Right" msgid "media-source.roll-1" msgstr "Roll 1" msgid "media-source.roll-10" msgstr "Roll 10" msgid "media-source.roll-2" msgstr "Roll 2" msgid "media-source.roll-3" msgstr "Roll 3" msgid "media-source.roll-4" msgstr "Roll 4" msgid "media-source.roll-5" msgstr "Roll 5" msgid "media-source.roll-6" msgstr "Roll 6" msgid "media-source.roll-7" msgstr "Roll 7" msgid "media-source.roll-8" msgstr "Roll 8" msgid "media-source.roll-9" msgstr "Roll 9" msgid "media-source.side" msgstr "Side" msgid "media-source.top" msgstr "Top" msgid "media-source.tray-1" msgstr "Tray 1" msgid "media-source.tray-10" msgstr "Tray 10" msgid "media-source.tray-11" msgstr "Tray 11" msgid "media-source.tray-12" msgstr "Tray 12" msgid "media-source.tray-13" msgstr "Tray 13" msgid "media-source.tray-14" msgstr "Tray 14" msgid "media-source.tray-15" msgstr "Tray 15" msgid "media-source.tray-16" msgstr "Tray 16" msgid "media-source.tray-17" msgstr "Tray 17" msgid "media-source.tray-18" msgstr "Tray 18" msgid "media-source.tray-19" msgstr "Tray 19" msgid "media-source.tray-2" msgstr "Tray 2" msgid "media-source.tray-20" msgstr "Tray 20" msgid "media-source.tray-3" msgstr "Tray 3" msgid "media-source.tray-4" msgstr "Tray 4" msgid "media-source.tray-5" msgstr "Tray 5" msgid "media-source.tray-6" msgstr "Tray 6" msgid "media-source.tray-7" msgstr "Tray 7" msgid "media-source.tray-8" msgstr "Tray 8" msgid "media-source.tray-9" msgstr "Tray 9" msgid "media-thickness" msgstr "Media Thickness" msgid "media-tooth" msgstr "Media Tooth" msgid "media-tooth.antique" msgstr "Antique" msgid "media-tooth.calendared" msgstr "Calendared" msgid "media-tooth.coarse" msgstr "Coarse" msgid "media-tooth.fine" msgstr "Fine" msgid "media-tooth.linen" msgstr "Linen" msgid "media-tooth.medium" msgstr "Medium" msgid "media-tooth.smooth" msgstr "Smooth" msgid "media-tooth.stipple" msgstr "Stipple" msgid "media-tooth.uncalendared" msgstr "Uncalendared" msgid "media-tooth.vellum" msgstr "Vellum" msgid "media-top-margin" msgstr "Media Top Margin" msgid "media-type" msgstr "Media Type" msgid "media-type.aluminum" msgstr "Aluminum" msgid "media-type.auto" msgstr "Automatic" msgid "media-type.back-print-film" msgstr "Back Print Film" msgid "media-type.cardboard" msgstr "Cardboard" msgid "media-type.cardstock" msgstr "Cardstock" msgid "media-type.cd" msgstr "CD" msgid "media-type.com.hp.advanced-photo" msgstr "Advanced Photo Paper" msgid "media-type.com.hp.brochure-glossy" msgstr "Glossy Brochure Paper" msgid "media-type.com.hp.brochure-matte" msgstr "Matte Brochure Paper" msgid "media-type.com.hp.cover-matte" msgstr "Matte Cover Paper" msgid "media-type.com.hp.ecosmart-lite" msgstr "Office Recycled Paper" msgid "media-type.com.hp.everyday-glossy" msgstr "Everyday Glossy Photo Paper" msgid "media-type.com.hp.everyday-matte" msgstr "Everyday Matte Paper" msgid "media-type.com.hp.extra-heavy" msgstr "Extra Heavyweight Paper" msgid "media-type.com.hp.intermediate" msgstr "Multipurpose Paper" msgid "media-type.com.hp.mid-weight" msgstr "Mid-Weight Paper" msgid "media-type.com.hp.premium-inkjet" msgstr "Premium Inkjet Paper" msgid "media-type.com.hp.premium-photo" msgstr "Premium Photo Glossy Paper" msgid "media-type.com.hp.premium-presentation-matte" msgstr "Premium Presentation Matte Paper" msgid "media-type.continuous" msgstr "Continuous" msgid "media-type.continuous-long" msgstr "Continuous Long" msgid "media-type.continuous-short" msgstr "Continuous Short" msgid "media-type.corrugated-board" msgstr "Corrugated Board" msgid "media-type.disc" msgstr "Optical Disc" msgid "media-type.disc-glossy" msgstr "Glossy Optical Disc" msgid "media-type.disc-high-gloss" msgstr "High Gloss Optical Disc" msgid "media-type.disc-matte" msgstr "Matte Optical Disc" msgid "media-type.disc-satin" msgstr "Satin Optical Disc" msgid "media-type.disc-semi-gloss" msgstr "Semi-Gloss Optical Disc" msgid "media-type.double-wall" msgstr "Double Wall" msgid "media-type.dry-film" msgstr "Dry Film" msgid "media-type.dvd" msgstr "DVD" msgid "media-type.embossing-foil" msgstr "Embossing Foil" msgid "media-type.end-board" msgstr "End Board" msgid "media-type.envelope" msgstr "Envelope" msgid "media-type.envelope-archival" msgstr "Archival Envelope" msgid "media-type.envelope-bond" msgstr "Bond Envelope" msgid "media-type.envelope-coated" msgstr "Coated Envelope" msgid "media-type.envelope-cotton" msgstr "Cotton Envelope" msgid "media-type.envelope-fine" msgstr "Fine Envelope" msgid "media-type.envelope-heavyweight" msgstr "Heavyweight Envelope" msgid "media-type.envelope-inkjet" msgstr "Inkjet Envelope" msgid "media-type.envelope-lightweight" msgstr "Lightweight Envelope" msgid "media-type.envelope-plain" msgstr "Plain Envelope" msgid "media-type.envelope-preprinted" msgstr "Preprinted Envelope" msgid "media-type.envelope-window" msgstr "Windowed Envelope" msgid "media-type.fabric" msgstr "Fabric" msgid "media-type.fabric-archival" msgstr "Archival Fabric" msgid "media-type.fabric-glossy" msgstr "Glossy Fabric" msgid "media-type.fabric-high-gloss" msgstr "High Gloss Fabric" msgid "media-type.fabric-matte" msgstr "Matte Fabric" msgid "media-type.fabric-semi-gloss" msgstr "Semi-Gloss Fabric" msgid "media-type.fabric-waterproof" msgstr "Waterproof Fabric" msgid "media-type.film" msgstr "Film" msgid "media-type.flexo-base" msgstr "Flexo Base" msgid "media-type.flexo-photo-polymer" msgstr "Flexo Photo Polymer" msgid "media-type.flute" msgstr "Flute" msgid "media-type.foil" msgstr "Foil" msgid "media-type.full-cut-tabs" msgstr "Full Cut Tabs" msgid "media-type.glass" msgstr "Glass" msgid "media-type.glass-colored" msgstr "Glass Colored" msgid "media-type.glass-opaque" msgstr "Glass Opaque" msgid "media-type.glass-surfaced" msgstr "Glass Surfaced" msgid "media-type.glass-textured" msgstr "Glass Textured" msgid "media-type.gravure-cylinder" msgstr "Gravure Cylinder" msgid "media-type.image-setter-paper" msgstr "Image Setter Paper" msgid "media-type.imaging-cylinder" msgstr "Imaging Cylinder" msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon-photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon_photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.labels" msgstr "Labels" msgid "media-type.labels-colored" msgstr "Colored Labels" msgid "media-type.labels-glossy" msgstr "Glossy Labels" msgid "media-type.labels-high-gloss" msgstr "High Gloss Labels" msgid "media-type.labels-inkjet" msgstr "Inkjet Labels" msgid "media-type.labels-matte" msgstr "Matte Labels" msgid "media-type.labels-permanent" msgstr "Permanent Labels" msgid "media-type.labels-satin" msgstr "Satin Labels" msgid "media-type.labels-security" msgstr "Security Labels" msgid "media-type.labels-semi-gloss" msgstr "Semi-Gloss Labels" msgid "media-type.laminating-foil" msgstr "Laminating Foil" msgid "media-type.letterhead" msgstr "Letterhead" msgid "media-type.metal" msgstr "Metal" msgid "media-type.metal-glossy" msgstr "Metal Glossy" msgid "media-type.metal-high-gloss" msgstr "Metal High Gloss" msgid "media-type.metal-matte" msgstr "Metal Matte" msgid "media-type.metal-satin" msgstr "Metal Satin" msgid "media-type.metal-semi-gloss" msgstr "Metal Semi Gloss" msgid "media-type.mounting-tape" msgstr "Mounting Tape" msgid "media-type.multi-layer" msgstr "Multi Layer" msgid "media-type.multi-part-form" msgstr "Multi Part Form" msgid "media-type.other" msgstr "Other" msgid "media-type.paper" msgstr "Paper" msgid "media-type.photographic" msgstr "Photo Paper" msgid "media-type.photographic-archival" msgstr "Photographic Archival" msgid "media-type.photographic-film" msgstr "Photo Film" msgid "media-type.photographic-glossy" msgstr "Glossy Photo Paper" msgid "media-type.photographic-high-gloss" msgstr "High Gloss Photo Paper" msgid "media-type.photographic-matte" msgstr "Matte Photo Paper" msgid "media-type.photographic-satin" msgstr "Satin Photo Paper" msgid "media-type.photographic-semi-gloss" msgstr "Semi-Gloss Photo Paper" msgid "media-type.plastic" msgstr "Plastic" msgid "media-type.plastic-archival" msgstr "Plastic Archival" msgid "media-type.plastic-colored" msgstr "Plastic Colored" msgid "media-type.plastic-glossy" msgstr "Plastic Glossy" msgid "media-type.plastic-high-gloss" msgstr "Plastic High Gloss" msgid "media-type.plastic-matte" msgstr "Plastic Matte" msgid "media-type.plastic-satin" msgstr "Plastic Satin" msgid "media-type.plastic-semi-gloss" msgstr "Plastic Semi Gloss" msgid "media-type.plate" msgstr "Plate" msgid "media-type.polyester" msgstr "Polyester" msgid "media-type.pre-cut-tabs" msgstr "Pre Cut Tabs" msgid "media-type.roll" msgstr "Roll" msgid "media-type.screen" msgstr "Screen" msgid "media-type.screen-paged" msgstr "Screen Paged" msgid "media-type.self-adhesive" msgstr "Self Adhesive" msgid "media-type.self-adhesive-film" msgstr "Self Adhesive Film" msgid "media-type.shrink-foil" msgstr "Shrink Foil" msgid "media-type.single-face" msgstr "Single Face" msgid "media-type.single-wall" msgstr "Single Wall" msgid "media-type.sleeve" msgstr "Sleeve" msgid "media-type.stationery" msgstr "Stationery" msgid "media-type.stationery-archival" msgstr "Stationery Archival" msgid "media-type.stationery-coated" msgstr "Coated Paper" msgid "media-type.stationery-cotton" msgstr "Stationery Cotton" msgid "media-type.stationery-fine" msgstr "Vellum Paper" msgid "media-type.stationery-heavyweight" msgstr "Heavyweight Paper" msgid "media-type.stationery-heavyweight-coated" msgstr "Stationery Heavyweight Coated" msgid "media-type.stationery-inkjet" msgstr "Stationery Inkjet Paper" msgid "media-type.stationery-letterhead" msgstr "Letterhead" msgid "media-type.stationery-lightweight" msgstr "Lightweight Paper" msgid "media-type.stationery-preprinted" msgstr "Preprinted Paper" msgid "media-type.stationery-prepunched" msgstr "Punched Paper" msgid "media-type.tab-stock" msgstr "Tab Stock" msgid "media-type.tractor" msgstr "Tractor" msgid "media-type.transfer" msgstr "Transfer" msgid "media-type.transparency" msgstr "Transparency" msgid "media-type.triple-wall" msgstr "Triple Wall" msgid "media-type.wet-film" msgstr "Wet Film" msgid "media-weight-metric" msgstr "Media Weight (grams per m²)" msgid "media.asme_f_28x40in" msgstr "28 x 40\"" msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" msgstr "A4 or US Letter" msgid "media.iso_2a0_1189x1682mm" msgstr "2a0" msgid "media.iso_a0_841x1189mm" msgstr "A0" msgid "media.iso_a0x3_1189x2523mm" msgstr "A0x3" msgid "media.iso_a10_26x37mm" msgstr "A10" msgid "media.iso_a1_594x841mm" msgstr "A1" msgid "media.iso_a1x3_841x1783mm" msgstr "A1x3" msgid "media.iso_a1x4_841x2378mm" msgstr "A1x4" msgid "media.iso_a2_420x594mm" msgstr "A2" msgid "media.iso_a2x3_594x1261mm" msgstr "A2x3" msgid "media.iso_a2x4_594x1682mm" msgstr "A2x4" msgid "media.iso_a2x5_594x2102mm" msgstr "A2x5" msgid "media.iso_a3-extra_322x445mm" msgstr "A3 (Extra)" msgid "media.iso_a3_297x420mm" msgstr "A3" msgid "media.iso_a3x3_420x891mm" msgstr "A3x3" msgid "media.iso_a3x4_420x1189mm" msgstr "A3x4" msgid "media.iso_a3x5_420x1486mm" msgstr "A3x5" msgid "media.iso_a3x6_420x1783mm" msgstr "A3x6" msgid "media.iso_a3x7_420x2080mm" msgstr "A3x7" msgid "media.iso_a4-extra_235.5x322.3mm" msgstr "A4 (Extra)" msgid "media.iso_a4-tab_225x297mm" msgstr "A4 (Tab)" msgid "media.iso_a4_210x297mm" msgstr "A4" msgid "media.iso_a4x3_297x630mm" msgstr "A4x3" msgid "media.iso_a4x4_297x841mm" msgstr "A4x4" msgid "media.iso_a4x5_297x1051mm" msgstr "A4x5" msgid "media.iso_a4x6_297x1261mm" msgstr "A4x6" msgid "media.iso_a4x7_297x1471mm" msgstr "A4x7" msgid "media.iso_a4x8_297x1682mm" msgstr "A4x8" msgid "media.iso_a4x9_297x1892mm" msgstr "A4x9" msgid "media.iso_a5-extra_174x235mm" msgstr "A5 (Extra)" msgid "media.iso_a5_148x210mm" msgstr "A5" msgid "media.iso_a6_105x148mm" msgstr "A6" msgid "media.iso_a7_74x105mm" msgstr "A7" msgid "media.iso_a8_52x74mm" msgstr "A8" msgid "media.iso_a9_37x52mm" msgstr "A9" msgid "media.iso_b0_1000x1414mm" msgstr "B0" msgid "media.iso_b10_31x44mm" msgstr "B10" msgid "media.iso_b1_707x1000mm" msgstr "B1" msgid "media.iso_b2_500x707mm" msgstr "B2" msgid "media.iso_b3_353x500mm" msgstr "B3" msgid "media.iso_b4_250x353mm" msgstr "B4" msgid "media.iso_b5-extra_201x276mm" msgstr "B5 (Extra)" msgid "media.iso_b5_176x250mm" msgstr "B5 Envelope" msgid "media.iso_b6_125x176mm" msgstr "B6" msgid "media.iso_b6c4_125x324mm" msgstr "B6/C4 Envelope" msgid "media.iso_b7_88x125mm" msgstr "B7" msgid "media.iso_b8_62x88mm" msgstr "B8" msgid "media.iso_b9_44x62mm" msgstr "B9" msgid "media.iso_c0_917x1297mm" msgstr "C0 Envelope" msgid "media.iso_c10_28x40mm" msgstr "C10 Envelope" msgid "media.iso_c1_648x917mm" msgstr "C1 Envelope" msgid "media.iso_c2_458x648mm" msgstr "C2 Envelope" msgid "media.iso_c3_324x458mm" msgstr "C3 Envelope" msgid "media.iso_c4_229x324mm" msgstr "C4 Envelope" msgid "media.iso_c5_162x229mm" msgstr "C5 Envelope" msgid "media.iso_c6_114x162mm" msgstr "C6 Envelope" msgid "media.iso_c6c5_114x229mm" msgstr "C6c5 Envelope" msgid "media.iso_c7_81x114mm" msgstr "C7 Envelope" msgid "media.iso_c7c6_81x162mm" msgstr "C7c6 Envelope" msgid "media.iso_c8_57x81mm" msgstr "C8 Envelope" msgid "media.iso_c9_40x57mm" msgstr "C9 Envelope" msgid "media.iso_dl_110x220mm" msgstr "DL Envelope" msgid "media.iso_ra0_860x1220mm" msgstr "Ra0" msgid "media.iso_ra1_610x860mm" msgstr "Ra1" msgid "media.iso_ra2_430x610mm" msgstr "Ra2" msgid "media.iso_ra3_305x430mm" msgstr "Ra3" msgid "media.iso_ra4_215x305mm" msgstr "Ra4" msgid "media.iso_sra0_900x1280mm" msgstr "Sra0" msgid "media.iso_sra1_640x900mm" msgstr "Sra1" msgid "media.iso_sra2_450x640mm" msgstr "Sra2" msgid "media.iso_sra3_320x450mm" msgstr "Sra3" msgid "media.iso_sra4_225x320mm" msgstr "Sra4" msgid "media.jis_b0_1030x1456mm" msgstr "JIS B0" msgid "media.jis_b10_32x45mm" msgstr "JIS B10" msgid "media.jis_b1_728x1030mm" msgstr "JIS B1" msgid "media.jis_b2_515x728mm" msgstr "JIS B2" msgid "media.jis_b3_364x515mm" msgstr "JIS B3" msgid "media.jis_b4_257x364mm" msgstr "JIS B4" msgid "media.jis_b5_182x257mm" msgstr "JIS B5" msgid "media.jis_b6_128x182mm" msgstr "JIS B6" msgid "media.jis_b7_91x128mm" msgstr "JIS B7" msgid "media.jis_b8_64x91mm" msgstr "JIS B8" msgid "media.jis_b9_45x64mm" msgstr "JIS B9" msgid "media.jis_exec_216x330mm" msgstr "JIS Executive" msgid "media.jpn_chou2_111.1x146mm" msgstr "Chou 2 Envelope" msgid "media.jpn_chou3_120x235mm" msgstr "Chou 3 Envelope" msgid "media.jpn_chou4_90x205mm" msgstr "Chou 4 Envelope" msgid "media.jpn_hagaki_100x148mm" msgstr "Hagaki" msgid "media.jpn_kahu_240x322.1mm" msgstr "Kahu Envelope" msgid "media.jpn_kaku2_240x332mm" msgstr "Kahu 2 Envelope" msgid "media.jpn_kaku3_216x277mm" msgstr "216 x 277mme" msgid "media.jpn_kaku4_197x267mm" msgstr "197 x 267mme" msgid "media.jpn_kaku5_190x240mm" msgstr "190 x 240mme" msgid "media.jpn_kaku7_142x205mm" msgstr "142 x 205mme" msgid "media.jpn_kaku8_119x197mm" msgstr "119 x 197mme" msgid "media.jpn_oufuku_148x200mm" msgstr "Oufuku Reply Postcard" msgid "media.jpn_you4_105x235mm" msgstr "You 4 Envelope" msgid "media.na_10x11_10x11in" msgstr "10 x 11\"" msgid "media.na_10x13_10x13in" msgstr "10 x 13\"" msgid "media.na_10x14_10x14in" msgstr "10 x 14\"" msgid "media.na_10x15_10x15in" msgstr "10 x 15\"" msgid "media.na_11x12_11x12in" msgstr "11 x 12\"" msgid "media.na_11x15_11x15in" msgstr "11 x 15\"" msgid "media.na_12x19_12x19in" msgstr "12 x 19\"" msgid "media.na_5x7_5x7in" msgstr "5 x 7\"" msgid "media.na_6x9_6x9in" msgstr "6 x 9\"" msgid "media.na_7x9_7x9in" msgstr "7 x 9\"" msgid "media.na_9x11_9x11in" msgstr "9 x 11\"" msgid "media.na_a2_4.375x5.75in" msgstr "A2 Envelope" msgid "media.na_arch-a_9x12in" msgstr "9 x 12\"" msgid "media.na_arch-b_12x18in" msgstr "12 x 18\"" msgid "media.na_arch-c_18x24in" msgstr "18 x 24\"" msgid "media.na_arch-d_24x36in" msgstr "24 x 36\"" msgid "media.na_arch-e2_26x38in" msgstr "26 x 38\"" msgid "media.na_arch-e3_27x39in" msgstr "27 x 39\"" msgid "media.na_arch-e_36x48in" msgstr "36 x 48\"" msgid "media.na_b-plus_12x19.17in" msgstr "12 x 19.17\"" msgid "media.na_c5_6.5x9.5in" msgstr "C5 Envelope" msgid "media.na_c_17x22in" msgstr "17 x 22\"" msgid "media.na_d_22x34in" msgstr "22 x 34\"" msgid "media.na_e_34x44in" msgstr "34 x 44\"" msgid "media.na_edp_11x14in" msgstr "11 x 14\"" msgid "media.na_eur-edp_12x14in" msgstr "12 x 14\"" msgid "media.na_executive_7.25x10.5in" msgstr "Executive" msgid "media.na_f_44x68in" msgstr "44 x 68\"" msgid "media.na_fanfold-eur_8.5x12in" msgstr "European Fanfold" msgid "media.na_fanfold-us_11x14.875in" msgstr "US Fanfold" msgid "media.na_foolscap_8.5x13in" msgstr "Foolscap" msgid "media.na_govt-legal_8x13in" msgstr "8 x 13\"" msgid "media.na_govt-letter_8x10in" msgstr "8 x 10\"" msgid "media.na_index-3x5_3x5in" msgstr "3 x 5\"" msgid "media.na_index-4x6-ext_6x8in" msgstr "6 x 8\"" msgid "media.na_index-4x6_4x6in" msgstr "4 x 6\"" msgid "media.na_index-5x8_5x8in" msgstr "5 x 8\"" msgid "media.na_invoice_5.5x8.5in" msgstr "Statement" msgid "media.na_ledger_11x17in" msgstr "11 x 17\"" msgid "media.na_legal-extra_9.5x15in" msgstr "US Legal (Extra)" msgid "media.na_legal_8.5x14in" msgstr "US Legal" msgid "media.na_letter-extra_9.5x12in" msgstr "US Letter (Extra)" msgid "media.na_letter-plus_8.5x12.69in" msgstr "US Letter (Plus)" msgid "media.na_letter_8.5x11in" msgstr "US Letter" msgid "media.na_monarch_3.875x7.5in" msgstr "Monarch Envelope" msgid "media.na_number-10_4.125x9.5in" msgstr "#10 Envelope" msgid "media.na_number-11_4.5x10.375in" msgstr "#11 Envelope" msgid "media.na_number-12_4.75x11in" msgstr "#12 Envelope" msgid "media.na_number-14_5x11.5in" msgstr "#14 Envelope" msgid "media.na_number-9_3.875x8.875in" msgstr "#9 Envelope" msgid "media.na_oficio_8.5x13.4in" msgstr "8.5 x 13.4\"" msgid "media.na_personal_3.625x6.5in" msgstr "Personal Envelope" msgid "media.na_quarto_8.5x10.83in" msgstr "Quarto" msgid "media.na_super-a_8.94x14in" msgstr "8.94 x 14\"" msgid "media.na_super-b_13x19in" msgstr "13 x 19\"" msgid "media.na_wide-format_30x42in" msgstr "30 x 42\"" msgid "media.oe_12x16_12x16in" msgstr "12 x 16\"" msgid "media.oe_14x17_14x17in" msgstr "14 x 17\"" msgid "media.oe_18x22_18x22in" msgstr "18 x 22\"" msgid "media.oe_a2plus_17x24in" msgstr "17 x 24\"" msgid "media.oe_photo-10r_10x12in" msgstr "10 x 12\"" msgid "media.oe_photo-20r_20x24in" msgstr "20 x 24\"" msgid "media.oe_photo-l_3.5x5in" msgstr "3.5 x 5\"" msgid "media.oe_photo-s10r_10x15in" msgstr "10 x 15\"" msgid "media.om_16k_184x260mm" msgstr "184 x 260mm" msgid "media.om_16k_195x270mm" msgstr "195 x 270mm" msgid "media.om_dai-pa-kai_275x395mm" msgstr "275 x 395mm" msgid "media.om_folio-sp_215x315mm" msgstr "Folio" msgid "media.om_folio_210x330mm" msgstr "Folio (Special)" msgid "media.om_invite_220x220mm" msgstr "Invitation Envelope" msgid "media.om_italian_110x230mm" msgstr "Italian Envelope" msgid "media.om_juuro-ku-kai_198x275mm" msgstr "198 x 275mm" msgid "media.om_large-photo_200x300" msgstr "200 x 300mm" msgid "media.om_medium-photo_130x180mm" msgstr "130 x 180mm" msgid "media.om_pa-kai_267x389mm" msgstr "267 x 389mm" msgid "media.om_postfix_114x229mm" msgstr "Postfix Envelope" msgid "media.om_small-photo_100x150mm" msgstr "100 x 150mm" msgid "media.om_wide-photo_100x200mm" msgstr "100 x 200mm" msgid "media.prc_10_324x458mm" msgstr "Chinese #10 Envelope" msgid "media.prc_16k_146x215mm" msgstr "Chinese 16k" msgid "media.prc_1_102x165mm" msgstr "Chinese #1 Envelope" msgid "media.prc_2_102x176mm" msgstr "Chinese #2 Envelope" msgid "media.prc_32k_97x151mm" msgstr "Chinese 32k" msgid "media.prc_3_125x176mm" msgstr "Chinese #3 Envelope" msgid "media.prc_4_110x208mm" msgstr "Chinese #4 Envelope" msgid "media.prc_5_110x220mm" msgstr "Chinese #5 Envelope" msgid "media.prc_6_120x320mm" msgstr "Chinese #6 Envelope" msgid "media.prc_7_160x230mm" msgstr "Chinese #7 Envelope" msgid "media.prc_8_120x309mm" msgstr "Chinese #8 Envelope" msgid "media.roc_16k_7.75x10.75in" msgstr "ROC 16k" msgid "media.roc_8k_10.75x15.5in" msgstr "ROC 8k" #, c-format msgid "members of class %s:" msgstr "члены группы %s:" msgid "multiple-document-handling" msgstr "Multiple Document Handling" msgid "multiple-document-handling.separate-documents-collated-copies" msgstr "Separate Documents Collated Copies" msgid "multiple-document-handling.separate-documents-uncollated-copies" msgstr "Separate Documents Uncollated Copies" msgid "multiple-document-handling.single-document" msgstr "Single Document" msgid "multiple-document-handling.single-document-new-sheet" msgstr "Single Document New Sheet" msgid "multiple-object-handling" msgstr "Multiple Object Handling" msgid "multiple-object-handling.auto" msgstr "Automatic" msgid "multiple-object-handling.best-fit" msgstr "Best Fit" msgid "multiple-object-handling.best-quality" msgstr "Best Quality" msgid "multiple-object-handling.best-speed" msgstr "Best Speed" msgid "multiple-object-handling.one-at-a-time" msgstr "One At A Time" msgid "multiple-operation-time-out-action" msgstr "Multiple Operation Time Out Action" msgid "multiple-operation-time-out-action.abort-job" msgstr "Abort Job" msgid "multiple-operation-time-out-action.hold-job" msgstr "Hold Job" msgid "multiple-operation-time-out-action.process-job" msgstr "Process Job" msgid "no entries" msgstr "нет запиÑей" msgid "no system default destination" msgstr "Ðет назначение ÑиÑтемы по умолчанию" msgid "noise-removal" msgstr "Noise Removal" msgid "notify-attributes" msgstr "Notify Attributes" msgid "notify-charset" msgstr "Notify Charset" msgid "notify-events" msgstr "Notify Events" msgid "notify-events not specified." msgstr "notify-events не указаны." msgid "notify-events.document-completed" msgstr "Document Completed" msgid "notify-events.document-config-changed" msgstr "Document Config Changed" msgid "notify-events.document-created" msgstr "Document Created" msgid "notify-events.document-fetchable" msgstr "Document Fetchable" msgid "notify-events.document-state-changed" msgstr "Document State Changed" msgid "notify-events.document-stopped" msgstr "Document Stopped" msgid "notify-events.job-completed" msgstr "Job Completed" msgid "notify-events.job-config-changed" msgstr "Job Config Changed" msgid "notify-events.job-created" msgstr "Job Created" msgid "notify-events.job-fetchable" msgstr "Job Fetchable" msgid "notify-events.job-progress" msgstr "Job Progress" msgid "notify-events.job-state-changed" msgstr "Job State Changed" msgid "notify-events.job-stopped" msgstr "Job Stopped" msgid "notify-events.none" msgstr "None" msgid "notify-events.printer-config-changed" msgstr "Printer Config Changed" msgid "notify-events.printer-finishings-changed" msgstr "Printer Finishings Changed" msgid "notify-events.printer-media-changed" msgstr "Printer Media Changed" msgid "notify-events.printer-queue-order-changed" msgstr "Printer Queue Order Changed" msgid "notify-events.printer-restarted" msgstr "Printer Restarted" msgid "notify-events.printer-shutdown" msgstr "Printer Shutdown" msgid "notify-events.printer-state-changed" msgstr "Printer State Changed" msgid "notify-events.printer-stopped" msgstr "Printer Stopped" msgid "notify-get-interval" msgstr "Notify Get Interval" msgid "notify-lease-duration" msgstr "Notify Lease Duration" msgid "notify-natural-language" msgstr "Notify Natural Language" msgid "notify-pull-method" msgstr "Notify Pull Method" msgid "notify-recipient-uri" msgstr "Notify Recipient" #, c-format msgid "notify-recipient-uri URI \"%s\" is already used." msgstr "notify-recipient-uri URI \"%s\" уже иÑпользуетÑÑ." #, c-format msgid "notify-recipient-uri URI \"%s\" uses unknown scheme." msgstr "notify-recipient-uri URI \"%s\" иÑпользует неизвеÑтную Ñхему." msgid "notify-sequence-numbers" msgstr "Notify Sequence Numbers" msgid "notify-subscription-ids" msgstr "Notify Subscription Ids" msgid "notify-time-interval" msgstr "Notify Time Interval" msgid "notify-user-data" msgstr "Notify User Data" msgid "notify-wait" msgstr "Notify Wait" msgid "number-of-retries" msgstr "Number Of Retries" msgid "number-up" msgstr "Number-Up" msgid "object-offset" msgstr "Object Offset" msgid "object-size" msgstr "Object Size" msgid "organization-name" msgstr "Organization Name" msgid "orientation-requested" msgstr "Orientation" msgid "orientation-requested.3" msgstr "Portrait" msgid "orientation-requested.4" msgstr "Landscape" msgid "orientation-requested.5" msgstr "Reverse Landscape" msgid "orientation-requested.6" msgstr "Reverse Portrait" msgid "orientation-requested.7" msgstr "None" msgid "output-attributes" msgstr "Output Attributes" msgid "output-bin" msgstr "Output Bin" msgid "output-bin.auto" msgstr "Automatic" msgid "output-bin.bottom" msgstr "Bottom" msgid "output-bin.center" msgstr "Center" msgid "output-bin.face-down" msgstr "Face Down" msgid "output-bin.face-up" msgstr "Face Up" msgid "output-bin.large-capacity" msgstr "Large Capacity" msgid "output-bin.left" msgstr "Left" msgid "output-bin.mailbox-1" msgstr "Mailbox 1" msgid "output-bin.mailbox-10" msgstr "Mailbox 10" msgid "output-bin.mailbox-2" msgstr "Mailbox 2" msgid "output-bin.mailbox-3" msgstr "Mailbox 3" msgid "output-bin.mailbox-4" msgstr "Mailbox 4" msgid "output-bin.mailbox-5" msgstr "Mailbox 5" msgid "output-bin.mailbox-6" msgstr "Mailbox 6" msgid "output-bin.mailbox-7" msgstr "Mailbox 7" msgid "output-bin.mailbox-8" msgstr "Mailbox 8" msgid "output-bin.mailbox-9" msgstr "Mailbox 9" msgid "output-bin.middle" msgstr "Middle" msgid "output-bin.my-mailbox" msgstr "My Mailbox" msgid "output-bin.rear" msgstr "Rear" msgid "output-bin.right" msgstr "Right" msgid "output-bin.side" msgstr "Side" msgid "output-bin.stacker-1" msgstr "Stacker 1" msgid "output-bin.stacker-10" msgstr "Stacker 10" msgid "output-bin.stacker-2" msgstr "Stacker 2" msgid "output-bin.stacker-3" msgstr "Stacker 3" msgid "output-bin.stacker-4" msgstr "Stacker 4" msgid "output-bin.stacker-5" msgstr "Stacker 5" msgid "output-bin.stacker-6" msgstr "Stacker 6" msgid "output-bin.stacker-7" msgstr "Stacker 7" msgid "output-bin.stacker-8" msgstr "Stacker 8" msgid "output-bin.stacker-9" msgstr "Stacker 9" msgid "output-bin.top" msgstr "Top" msgid "output-bin.tray-1" msgstr "Tray 1" msgid "output-bin.tray-10" msgstr "Tray 10" msgid "output-bin.tray-2" msgstr "Tray 2" msgid "output-bin.tray-3" msgstr "Tray 3" msgid "output-bin.tray-4" msgstr "Tray 4" msgid "output-bin.tray-5" msgstr "Tray 5" msgid "output-bin.tray-6" msgstr "Tray 6" msgid "output-bin.tray-7" msgstr "Tray 7" msgid "output-bin.tray-8" msgstr "Tray 8" msgid "output-bin.tray-9" msgstr "Tray 9" msgid "output-compression-quality-factor" msgstr "Scanned Image Quality" msgid "page-delivery" msgstr "Page Delivery" msgid "page-delivery.reverse-order-face-down" msgstr "Reverse Order Face Down" msgid "page-delivery.reverse-order-face-up" msgstr "Reverse Order Face Up" msgid "page-delivery.same-order-face-down" msgstr "Same Order Face Down" msgid "page-delivery.same-order-face-up" msgstr "Same Order Face Up" msgid "page-delivery.system-specified" msgstr "System Specified" msgid "page-order-received" msgstr "Page Order Received" msgid "page-order-received.1-to-n-order" msgstr "1 To N Order" msgid "page-order-received.n-to-1-order" msgstr "N To 1 Order" msgid "page-ranges" msgstr "Page Ranges" msgid "pages" msgstr "Pages" msgid "pages-per-subset" msgstr "Pages Per Subset" msgid "pending" msgstr "задержка" msgid "platform-shape" msgstr "Platform Shape" msgid "platform-shape.ellipse" msgstr "Round" msgid "platform-shape.rectangle" msgstr "Rectangle" msgid "platform-temperature" msgstr "Platform Temperature" msgid "post-dial-string" msgstr "Post-dial String" #, c-format msgid "ppdc: Adding include directory \"%s\"." msgstr "ppdc: Добавление каталога \"%s\"." #, c-format msgid "ppdc: Adding/updating UI text from %s." msgstr "ppdc: Добавление/обновление текÑта интерфейÑа из %s." #, c-format msgid "ppdc: Bad boolean value (%s) on line %d of %s." msgstr "ppdc: ÐедопуÑтимое двоичное значение (%s) в Ñтроке %d из %s." #, c-format msgid "ppdc: Bad font attribute: %s" msgstr "ppdc: ÐедопуÑтимый атрибут шрифта: %s" #, c-format msgid "ppdc: Bad resolution name \"%s\" on line %d of %s." msgstr "ppdc: ÐедопуÑтимое Ð¸Ð¼Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ \"%s\" в Ñтроке %d из %s." #, c-format msgid "ppdc: Bad status keyword %s on line %d of %s." msgstr "ppdc: ÐедопуÑтимое ключевое Ñлово ÑтатуÑа %s в Ñтроке %d из %s." #, c-format msgid "ppdc: Bad variable substitution ($%c) on line %d of %s." msgstr "ppdc: ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð·Ð°Ð¼ÐµÐ½Ð° переменной ($%c) в Ñтроке %d из %s." #, c-format msgid "ppdc: Choice found on line %d of %s with no Option." msgstr "" "ppdc: Ð’ Ñтроке %d из %s обнаружено значение, не привÑзанное к параметру" #, c-format msgid "ppdc: Duplicate #po for locale %s on line %d of %s." msgstr "ppdc: Дубликат #po Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ð¾Ð½Ð° %s в Ñтроке %d из %s" #, c-format msgid "ppdc: Expected a filter definition on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должно быть определение фильтра." #, c-format msgid "ppdc: Expected a program name on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должно быть Ð¸Ð¼Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹." #, c-format msgid "ppdc: Expected boolean value on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должно быть двоичное значение." #, c-format msgid "ppdc: Expected charset after Font on line %d of %s." msgstr "ppdc: ПоÑле Font в Ñтроке %d из %s должен быть набор Ñимволов." #, c-format msgid "ppdc: Expected choice code on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должно быть код выбора." #, c-format msgid "ppdc: Expected choice name/text on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должно быть имÑ/текÑÑ‚ выбора." #, c-format msgid "ppdc: Expected color order for ColorModel on line %d of %s." msgstr "" "ppdc: ПоÑле ColorModel в Ñтроке %d из %s должна быть указана Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ñхема." #, c-format msgid "ppdc: Expected colorspace for ColorModel on line %d of %s." msgstr "ppdc: Ð”Ð»Ñ ColorModel в Ñтроке %d из %s должно быть указано colorspace." #, c-format msgid "ppdc: Expected compression for ColorModel on line %d of %s." msgstr "ppdc: Ð”Ð»Ñ ColorModel в Ñтроке %d из %s должно быть указано Ñжатие." #, c-format msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s." msgstr "" "ppdc: Ð”Ð»Ñ UIConstraints в Ñтроке %d из %s должна быть указана Ñтрока " "ограничений." #, c-format msgid "" "ppdc: Expected driver type keyword following DriverType on line %d of %s." msgstr "" "ppdc: ПоÑле DriverType в Ñтроке %d из %s должно быть указано ключевое Ñлово " "типа драйвера." #, c-format msgid "ppdc: Expected duplex type after Duplex on line %d of %s." msgstr "ppdc: ПоÑле Duplex в Ñтроке %d из %s должен быть указан тип дуплекÑа." #, c-format msgid "ppdc: Expected encoding after Font on line %d of %s." msgstr "ppdc: ПоÑле Font в Ñтроке %d из %s должна быть указана кодировка." #, c-format msgid "ppdc: Expected filename after #po %s on line %d of %s." msgstr "ПоÑле #po %s в Ñтроке %d из %s должно быть указано Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°." #, c-format msgid "ppdc: Expected group name/text on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должно быть указанно Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹/текÑÑ‚." #, c-format msgid "ppdc: Expected include filename on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должно быть указано Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°." #, c-format msgid "ppdc: Expected integer on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должно быть целое чиÑло." #, c-format msgid "ppdc: Expected locale after #po on line %d of %s." msgstr "ppdc: ПоÑле #po в Ñтроке %d из %s должен быть указан регион." #, c-format msgid "ppdc: Expected name after %s on line %d of %s." msgstr "ppdc: ПоÑле %s в Ñтроке %d из %s должно быть указано имÑ." #, c-format msgid "ppdc: Expected name after FileName on line %d of %s." msgstr "ppdc: ПоÑле FileName в Ñтроке %d из %s должно быть указано имÑ." #, c-format msgid "ppdc: Expected name after Font on line %d of %s." msgstr "ppdc: ПоÑле Font в Ñтроке %d из %s должно быть указано имÑ." #, c-format msgid "ppdc: Expected name after Manufacturer on line %d of %s." msgstr "ppdc: ПоÑле Manufacturer в Ñтроке %d из %s должно быть указано имÑ." #, c-format msgid "ppdc: Expected name after MediaSize on line %d of %s." msgstr "ppdc: ПоÑле MediaSize в Ñтроке %d из %s должно быть указано имÑ." #, c-format msgid "ppdc: Expected name after ModelName on line %d of %s." msgstr "ppdc: ПоÑле ModelName в Ñтроке %d из %s должно быть указано имÑ." #, c-format msgid "ppdc: Expected name after PCFileName on line %d of %s." msgstr "ppdc: ПоÑле PCFileName в Ñтроке %d из %s должно быть указано имÑ." #, c-format msgid "ppdc: Expected name/text after %s on line %d of %s." msgstr "ppdc: ПоÑле %s в Ñтроке %d из %s должно быть указано имÑ/текÑÑ‚." #, c-format msgid "ppdc: Expected name/text after Installable on line %d of %s." msgstr "" "ppdc: ПоÑле Installable в Ñтроке %d из %s должно быть указано имÑ/текÑÑ‚." #, c-format msgid "ppdc: Expected name/text after Resolution on line %d of %s." msgstr "" "ppdc: ПоÑле Resolution в Ñтроке %d из %s должно быть указано имÑ/текÑÑ‚." #, c-format msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s." msgstr "" "ppdc: ПоÑле ColorModel в Ñтроке %d из %s должно быть указано имÑ/текÑÑ‚." #, c-format msgid "ppdc: Expected option name/text on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должно быть указано Ð¸Ð¼Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°/текÑÑ‚." #, c-format msgid "ppdc: Expected option section on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должен быть указан раздел параметров." #, c-format msgid "ppdc: Expected option type on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должен быть указан тип параметра." #, c-format msgid "ppdc: Expected override field after Resolution on line %d of %s." msgstr "" "ppdc: ПоÑле Resolution в Ñтроке %d из %s должно быть поле переопределениÑ." #, c-format msgid "ppdc: Expected quoted string on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должна быть запиÑÑŒ в кавычках." #, c-format msgid "ppdc: Expected real number on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должно быть дейÑтвительное чиÑло." #, c-format msgid "" "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s." msgstr "" "ppdc: ПоÑле ColorProfile в Ñтроке %d из %s должно быть указано разрешение/" "тип ноÑителÑ." #, c-format msgid "" "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d " "of %s." msgstr "" "ppdc: ПоÑле SimpleColorProfile в Ñтроке %d из %s должно быть указано " "разрешение/тип ноÑителÑ." #, c-format msgid "ppdc: Expected selector after %s on line %d of %s." msgstr "ppdc: ПоÑле %s в Ñтроке %d из %s должен быть selector." #, c-format msgid "ppdc: Expected status after Font on line %d of %s." msgstr "ppdc: ПоÑле Font в Ñтроке %d из %s должен быть указан ÑтатуÑ." #, c-format msgid "ppdc: Expected string after Copyright on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s пропущено значение параметра Copyright." #, c-format msgid "ppdc: Expected string after Version on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s пропущено значение параметра Version." #, c-format msgid "ppdc: Expected two option names on line %d of %s." msgstr "ppdc: Ð’ Ñтроке %d из %s должны быть два имени параметра." #, c-format msgid "ppdc: Expected value after %s on line %d of %s." msgstr "ppdc: ПоÑле %s в Ñтроке %d из %s должно быть значение." #, c-format msgid "ppdc: Expected version after Font on line %d of %s." msgstr "ppdc: ПоÑле Font в Ñтроке %d из %s должна быть указана верÑиÑ." #, c-format msgid "ppdc: Invalid #include/#po filename \"%s\"." msgstr "ppdc: Ðеверное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° #include/#po \"%s\"." #, c-format msgid "ppdc: Invalid cost for filter on line %d of %s." msgstr "ppdc: Затраты на фильтр в Ñтроке %d из %s указаны неверно." #, c-format msgid "ppdc: Invalid empty MIME type for filter on line %d of %s." msgstr "ppdc: ÐедопуÑтимый пуÑтой MIME-тип Ð´Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° в Ñтроке %d из %s." #, c-format msgid "ppdc: Invalid empty program name for filter on line %d of %s." msgstr "ppdc: ÐедопуÑтимое пуÑтое Ð¸Ð¼Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ Ð´Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° в Ñтроке %d из %s." #, c-format msgid "ppdc: Invalid option section \"%s\" on line %d of %s." msgstr "ppdc: Ðеверный раздел параметров \"%s\" в Ñтроке %d из %s." #, c-format msgid "ppdc: Invalid option type \"%s\" on line %d of %s." msgstr "ppdc: Ðеверный тип параметра \"%s\" в Ñтроке %d из %s." #, c-format msgid "ppdc: Loading driver information file \"%s\"." msgstr "ppdc: ЗагружаетÑÑ Ñ„Ð°Ð¹Ð» Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ о драйвере \"%s\"." #, c-format msgid "ppdc: Loading messages for locale \"%s\"." msgstr "ppdc: Загружаю ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ð¾Ð½Ð° \"%s\"." #, c-format msgid "ppdc: Loading messages from \"%s\"." msgstr "ppdc: Загружаю ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð· \"%s\"." #, c-format msgid "ppdc: Missing #endif at end of \"%s\"." msgstr "ppdc: ОтÑутÑтвует #endif в конце \"%s\"." #, c-format msgid "ppdc: Missing #if on line %d of %s." msgstr "ppdc: ОтÑутÑтвует #if в Ñтроке %d из %s." #, c-format msgid "" "ppdc: Need a msgid line before any translation strings on line %d of %s." msgstr "ppdc: ТребуетÑÑ Ñтрока msgid перед Ñтрокой перевода в Ñтроке %d из %s" #, c-format msgid "ppdc: No message catalog provided for locale %s." msgstr "ppdc: Ðе указан каталог Ñообщений Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ð¾Ð½Ð° %s." #, c-format msgid "ppdc: Option %s defined in two different groups on line %d of %s." msgstr "ppdc: Параметр %s определен в двух разных группах в Ñтроке %d из %s." #, c-format msgid "ppdc: Option %s redefined with a different type on line %d of %s." msgstr "ppdc: Ð”Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° %s определен другой тип в Ñтроке %d из %s." #, c-format msgid "ppdc: Option constraint must *name on line %d of %s." msgstr "" "ppdc: Ð”Ð»Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° должно быть указано *name в Ñтроке %d из %s." #, c-format msgid "ppdc: Too many nested #if's on line %d of %s." msgstr "ppdc: Слишком много вложенных операторов #if в Ñтроке %d из %s." #, c-format msgid "ppdc: Unable to create PPD file \"%s\" - %s." msgstr "ppdc: Ðе удаетÑÑ Ñоздать PPD-файл \"%s\" - %s." #, c-format msgid "ppdc: Unable to create output directory %s: %s" msgstr "ppdc: Ðе удаетÑÑ Ñоздать каталог Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ñ… данных %s: %s" #, c-format msgid "ppdc: Unable to create output pipes: %s" msgstr "ppdc: Ðе удаетÑÑ Ñоздать конвейеры Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ñ… данных: %s" #, c-format msgid "ppdc: Unable to execute cupstestppd: %s" msgstr "ppdc: Ðе удаетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ cupstestppd: %s" #, c-format msgid "ppdc: Unable to find #po file %s on line %d of %s." msgstr "ppdc: Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ файл #po %s в Ñтроке %d из %s." #, c-format msgid "ppdc: Unable to find include file \"%s\" on line %d of %s." msgstr "ppdc: Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ файл \"%s\" в Ñтроке %d из %s." #, c-format msgid "ppdc: Unable to find localization for \"%s\" - %s" msgstr "ppdc: Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ перевод Ð´Ð»Ñ \"%s\" - %s" #, c-format msgid "ppdc: Unable to load localization file \"%s\" - %s" msgstr "ppdc: Ðе удаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ файл перевода \"%s\" - %s" #, c-format msgid "ppdc: Unable to open %s: %s" msgstr "ppdc: Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ %s: %s" #, c-format msgid "ppdc: Undefined variable (%s) on line %d of %s." msgstr "ppdc: Ðе определена Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ (%s) в Ñтроке %d из %s." #, c-format msgid "ppdc: Unexpected text on line %d of %s." msgstr "ppdc: ÐеизвеÑтный текÑÑ‚ в %2$s Ñтроки %1$d" #, c-format msgid "ppdc: Unknown driver type %s on line %d of %s." msgstr "ppdc: ÐеизвеÑтный тип драйвера %s в Ñтроке %d из %s." #, c-format msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s." msgstr "ppdc: ÐеизвеÑтный тип дуплекÑа \"%s\" в Ñтроке %d из %s." #, c-format msgid "ppdc: Unknown media size \"%s\" on line %d of %s." msgstr "ppdc: ÐеизвеÑтный размер бумаги \"%s\" в Ñтроке %d из %s." #, c-format msgid "ppdc: Unknown message catalog format for \"%s\"." msgstr "ppdc: ÐеизвеÑтный формат каталога Ñообщений Ð´Ð»Ñ \"%s\"" #, c-format msgid "ppdc: Unknown token \"%s\" seen on line %d of %s." msgstr "ppdc: ÐеизвеÑтный маркер \"%s\" в Ñтроке %d из %s." #, c-format msgid "" "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." msgstr "" "ppdc: ÐеизвеÑтные конечные Ñимволы в вещеÑтвенном чиÑле \"%s\" в Ñтроке %d " "из %s." #, c-format msgid "ppdc: Unterminated string starting with %c on line %d of %s." msgstr "ppdc: Ðе завершена Ñтрока, начинающаÑÑÑ Ñ %c в Ñтроке %d из %s." #, c-format msgid "ppdc: Warning - overlapping filename \"%s\"." msgstr "ppdc: Внимание - дублирующееÑÑ Ð¸Ð¼Ñ \"%s\"." #, c-format msgid "ppdc: Writing %s." msgstr "ppdc: ЗапиÑываетÑÑ %s." #, c-format msgid "ppdc: Writing PPD files to directory \"%s\"." msgstr "ppdc: ЗапиÑываютÑÑ PPD-файлы в каталог \"%s\"." #, c-format msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s." msgstr "ppdmerge: Ðеверное значение LanguageVersion \"%s\" в %s." #, c-format msgid "ppdmerge: Ignoring PPD file %s." msgstr "ppdmerge: ПропуÑкаетÑÑ PPD-файл %s." #, c-format msgid "ppdmerge: Unable to backup %s to %s - %s" msgstr "ppdmerge: Ðе удаетÑÑ Ñоздать резервную копию %s на %s- %s" msgid "pre-dial-string" msgstr "Pre-dial String" msgid "presentation-direction-number-up" msgstr "Number-Up Layout" msgid "presentation-direction-number-up.tobottom-toleft" msgstr "Top-Bottom, Right-Left" msgid "presentation-direction-number-up.tobottom-toright" msgstr "Top-Bottom, Left-Right" msgid "presentation-direction-number-up.toleft-tobottom" msgstr "Right-Left, Top-Bottom" msgid "presentation-direction-number-up.toleft-totop" msgstr "Right-Left, Bottom-Top" msgid "presentation-direction-number-up.toright-tobottom" msgstr "Left-Right, Top-Bottom" msgid "presentation-direction-number-up.toright-totop" msgstr "Left-Right, Bottom-Top" msgid "presentation-direction-number-up.totop-toleft" msgstr "Bottom-Top, Right-Left" msgid "presentation-direction-number-up.totop-toright" msgstr "Bottom-Top, Left-Right" msgid "print-accuracy" msgstr "Print Accuracy" msgid "print-base" msgstr "Print Base" msgid "print-base.brim" msgstr "Brim" msgid "print-base.none" msgstr "None" msgid "print-base.raft" msgstr "Raft" msgid "print-base.skirt" msgstr "Skirt" msgid "print-base.standard" msgstr "Standard" msgid "print-color-mode" msgstr "Print Color Mode" msgid "print-color-mode.auto" msgstr "Automatic" msgid "print-color-mode.bi-level" msgstr "Bi-Level" msgid "print-color-mode.color" msgstr "Color" msgid "print-color-mode.highlight" msgstr "Highlight" msgid "print-color-mode.monochrome" msgstr "Monochrome" msgid "print-color-mode.process-bi-level" msgstr "Process Bi-Level" msgid "print-color-mode.process-monochrome" msgstr "Process Monochrome" msgid "print-content-optimize" msgstr "Print Optimization" msgid "print-content-optimize.auto" msgstr "Automatic" msgid "print-content-optimize.graphic" msgstr "Graphics" msgid "print-content-optimize.photo" msgstr "Photo" msgid "print-content-optimize.text" msgstr "Text" msgid "print-content-optimize.text-and-graphic" msgstr "Text And Graphics" msgid "print-objects" msgstr "Print Objects" msgid "print-quality" msgstr "Print Quality" msgid "print-quality.3" msgstr "Draft" msgid "print-quality.4" msgstr "Normal" msgid "print-quality.5" msgstr "High" msgid "print-rendering-intent" msgstr "Print Rendering Intent" msgid "print-rendering-intent.absolute" msgstr "Absolute" msgid "print-rendering-intent.auto" msgstr "Automatic" msgid "print-rendering-intent.perceptual" msgstr "Perceptual" msgid "print-rendering-intent.relative" msgstr "Relative" msgid "print-rendering-intent.relative-bpc" msgstr "Relative w/Black Point Compensation" msgid "print-rendering-intent.saturation" msgstr "Saturation" msgid "print-scaling" msgstr "Print Scaling" msgid "print-scaling.auto" msgstr "Automatic" msgid "print-scaling.auto-fit" msgstr "Auto Fit" msgid "print-scaling.fill" msgstr "Fill" msgid "print-scaling.fit" msgstr "Fit" msgid "print-scaling.none" msgstr "None" msgid "print-supports" msgstr "Print Supports" msgid "print-supports.material" msgstr "Material" msgid "print-supports.none" msgstr "None" msgid "print-supports.standard" msgstr "Standard" #, c-format msgid "printer %s disabled since %s -" msgstr "принтер %s отключен Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° %s -" #, c-format msgid "printer %s is idle. enabled since %s" msgstr "принтер %s Ñвободен. Включен Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° %s" #, c-format msgid "printer %s now printing %s-%d. enabled since %s" msgstr "принтер %s ÑÐµÐ¹Ñ‡Ð°Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð°ÐµÑ‚ %s-%d. Включен Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° %s" #, c-format msgid "printer %s/%s disabled since %s -" msgstr "принтер %s/%s отключен Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° %s -" #, c-format msgid "printer %s/%s is idle. enabled since %s" msgstr "принтер %s/%s Ñвободен. Включен Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° %s" #, c-format msgid "printer %s/%s now printing %s-%d. enabled since %s" msgstr "принтер %s/%s ÑÐµÐ¹Ñ‡Ð°Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð°ÐµÑ‚ %s-%d. Включен Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° %s" msgid "printer-message-from-operator" msgstr "Printer Message From Operator" msgid "printer-resolution" msgstr "Printer Resolution" msgid "printer-state" msgstr "Printer State" msgid "printer-state-reasons" msgstr "Detailed Printer State" msgid "printer-state-reasons.alert-removal-of-binary-change-entry" msgstr "Alert Removal Of Binary Change Entry" msgid "printer-state-reasons.bander-added" msgstr "Bander Added" msgid "printer-state-reasons.bander-almost-empty" msgstr "Bander Almost Empty" msgid "printer-state-reasons.bander-almost-full" msgstr "Bander Almost Full" msgid "printer-state-reasons.bander-at-limit" msgstr "Bander At Limit" msgid "printer-state-reasons.bander-closed" msgstr "Bander Closed" msgid "printer-state-reasons.bander-configuration-change" msgstr "Bander Configuration Change" msgid "printer-state-reasons.bander-cover-closed" msgstr "Bander Cover Closed" msgid "printer-state-reasons.bander-cover-open" msgstr "Bander Cover Open" msgid "printer-state-reasons.bander-empty" msgstr "Bander Empty" msgid "printer-state-reasons.bander-full" msgstr "Bander Full" msgid "printer-state-reasons.bander-interlock-closed" msgstr "Bander Interlock Closed" msgid "printer-state-reasons.bander-interlock-open" msgstr "Bander Interlock Open" msgid "printer-state-reasons.bander-jam" msgstr "Bander Jam" msgid "printer-state-reasons.bander-life-almost-over" msgstr "Bander Life Almost Over" msgid "printer-state-reasons.bander-life-over" msgstr "Bander Life Over" msgid "printer-state-reasons.bander-memory-exhausted" msgstr "Bander Memory Exhausted" msgid "printer-state-reasons.bander-missing" msgstr "Bander Missing" msgid "printer-state-reasons.bander-motor-failure" msgstr "Bander Motor Failure" msgid "printer-state-reasons.bander-near-limit" msgstr "Bander Near Limit" msgid "printer-state-reasons.bander-offline" msgstr "Bander Offline" msgid "printer-state-reasons.bander-opened" msgstr "Bander Opened" msgid "printer-state-reasons.bander-over-temperature" msgstr "Bander Over Temperature" msgid "printer-state-reasons.bander-power-saver" msgstr "Bander Power Saver" msgid "printer-state-reasons.bander-recoverable-failure" msgstr "Bander Recoverable Failure" msgid "printer-state-reasons.bander-recoverable-storage" msgstr "Bander Recoverable Storage" msgid "printer-state-reasons.bander-removed" msgstr "Bander Removed" msgid "printer-state-reasons.bander-resource-added" msgstr "Bander Resource Added" msgid "printer-state-reasons.bander-resource-removed" msgstr "Bander Resource Removed" msgid "printer-state-reasons.bander-thermistor-failure" msgstr "Bander Thermistor Failure" msgid "printer-state-reasons.bander-timing-failure" msgstr "Bander Timing Failure" msgid "printer-state-reasons.bander-turned-off" msgstr "Bander Turned Off" msgid "printer-state-reasons.bander-turned-on" msgstr "Bander Turned On" msgid "printer-state-reasons.bander-under-temperature" msgstr "Bander Under Temperature" msgid "printer-state-reasons.bander-unrecoverable-failure" msgstr "Bander Unrecoverable Failure" msgid "printer-state-reasons.bander-unrecoverable-storage-error" msgstr "Bander Unrecoverable Storage Error" msgid "printer-state-reasons.bander-warming-up" msgstr "Bander Warming Up" msgid "printer-state-reasons.binder-added" msgstr "Binder Added" msgid "printer-state-reasons.binder-almost-empty" msgstr "Binder Almost Empty" msgid "printer-state-reasons.binder-almost-full" msgstr "Binder Almost Full" msgid "printer-state-reasons.binder-at-limit" msgstr "Binder At Limit" msgid "printer-state-reasons.binder-closed" msgstr "Binder Closed" msgid "printer-state-reasons.binder-configuration-change" msgstr "Binder Configuration Change" msgid "printer-state-reasons.binder-cover-closed" msgstr "Binder Cover Closed" msgid "printer-state-reasons.binder-cover-open" msgstr "Binder Cover Open" msgid "printer-state-reasons.binder-empty" msgstr "Binder Empty" msgid "printer-state-reasons.binder-full" msgstr "Binder Full" msgid "printer-state-reasons.binder-interlock-closed" msgstr "Binder Interlock Closed" msgid "printer-state-reasons.binder-interlock-open" msgstr "Binder Interlock Open" msgid "printer-state-reasons.binder-jam" msgstr "Binder Jam" msgid "printer-state-reasons.binder-life-almost-over" msgstr "Binder Life Almost Over" msgid "printer-state-reasons.binder-life-over" msgstr "Binder Life Over" msgid "printer-state-reasons.binder-memory-exhausted" msgstr "Binder Memory Exhausted" msgid "printer-state-reasons.binder-missing" msgstr "Binder Missing" msgid "printer-state-reasons.binder-motor-failure" msgstr "Binder Motor Failure" msgid "printer-state-reasons.binder-near-limit" msgstr "Binder Near Limit" msgid "printer-state-reasons.binder-offline" msgstr "Binder Offline" msgid "printer-state-reasons.binder-opened" msgstr "Binder Opened" msgid "printer-state-reasons.binder-over-temperature" msgstr "Binder Over Temperature" msgid "printer-state-reasons.binder-power-saver" msgstr "Binder Power Saver" msgid "printer-state-reasons.binder-recoverable-failure" msgstr "Binder Recoverable Failure" msgid "printer-state-reasons.binder-recoverable-storage" msgstr "Binder Recoverable Storage" msgid "printer-state-reasons.binder-removed" msgstr "Binder Removed" msgid "printer-state-reasons.binder-resource-added" msgstr "Binder Resource Added" msgid "printer-state-reasons.binder-resource-removed" msgstr "Binder Resource Removed" msgid "printer-state-reasons.binder-thermistor-failure" msgstr "Binder Thermistor Failure" msgid "printer-state-reasons.binder-timing-failure" msgstr "Binder Timing Failure" msgid "printer-state-reasons.binder-turned-off" msgstr "Binder Turned Off" msgid "printer-state-reasons.binder-turned-on" msgstr "Binder Turned On" msgid "printer-state-reasons.binder-under-temperature" msgstr "Binder Under Temperature" msgid "printer-state-reasons.binder-unrecoverable-failure" msgstr "Binder Unrecoverable Failure" msgid "printer-state-reasons.binder-unrecoverable-storage-error" msgstr "Binder Unrecoverable Storage Error" msgid "printer-state-reasons.binder-warming-up" msgstr "Binder Warming Up" msgid "printer-state-reasons.camera-failure" msgstr "Camera Failure" msgid "printer-state-reasons.chamber-cooling" msgstr "Chamber Cooling" msgid "printer-state-reasons.chamber-heating" msgstr "Chamber Heating" msgid "printer-state-reasons.chamber-temperature-high" msgstr "Chamber Temperature High" msgid "printer-state-reasons.chamber-temperature-low" msgstr "Chamber Temperature Low" msgid "printer-state-reasons.cleaner-life-almost-over" msgstr "Cleaner Life Almost Over" msgid "printer-state-reasons.cleaner-life-over" msgstr "Cleaner Life Over" msgid "printer-state-reasons.configuration-change" msgstr "Configuration Change" msgid "printer-state-reasons.connecting-to-device" msgstr "Connecting To Device" msgid "printer-state-reasons.cover-open" msgstr "Cover Open" msgid "printer-state-reasons.deactivated" msgstr "Deactivated" msgid "printer-state-reasons.developer-empty" msgstr "Developer Empty" msgid "printer-state-reasons.developer-low" msgstr "Developer Low" msgid "printer-state-reasons.die-cutter-added" msgstr "Die Cutter Added" msgid "printer-state-reasons.die-cutter-almost-empty" msgstr "Die Cutter Almost Empty" msgid "printer-state-reasons.die-cutter-almost-full" msgstr "Die Cutter Almost Full" msgid "printer-state-reasons.die-cutter-at-limit" msgstr "Die Cutter At Limit" msgid "printer-state-reasons.die-cutter-closed" msgstr "Die Cutter Closed" msgid "printer-state-reasons.die-cutter-configuration-change" msgstr "Die Cutter Configuration Change" msgid "printer-state-reasons.die-cutter-cover-closed" msgstr "Die Cutter Cover Closed" msgid "printer-state-reasons.die-cutter-cover-open" msgstr "Die Cutter Cover Open" msgid "printer-state-reasons.die-cutter-empty" msgstr "Die Cutter Empty" msgid "printer-state-reasons.die-cutter-full" msgstr "Die Cutter Full" msgid "printer-state-reasons.die-cutter-interlock-closed" msgstr "Die Cutter Interlock Closed" msgid "printer-state-reasons.die-cutter-interlock-open" msgstr "Die Cutter Interlock Open" msgid "printer-state-reasons.die-cutter-jam" msgstr "Die Cutter Jam" msgid "printer-state-reasons.die-cutter-life-almost-over" msgstr "Die Cutter Life Almost Over" msgid "printer-state-reasons.die-cutter-life-over" msgstr "Die Cutter Life Over" msgid "printer-state-reasons.die-cutter-memory-exhausted" msgstr "Die Cutter Memory Exhausted" msgid "printer-state-reasons.die-cutter-missing" msgstr "Die Cutter Missing" msgid "printer-state-reasons.die-cutter-motor-failure" msgstr "Die Cutter Motor Failure" msgid "printer-state-reasons.die-cutter-near-limit" msgstr "Die Cutter Near Limit" msgid "printer-state-reasons.die-cutter-offline" msgstr "Die Cutter Offline" msgid "printer-state-reasons.die-cutter-opened" msgstr "Die Cutter Opened" msgid "printer-state-reasons.die-cutter-over-temperature" msgstr "Die Cutter Over Temperature" msgid "printer-state-reasons.die-cutter-power-saver" msgstr "Die Cutter Power Saver" msgid "printer-state-reasons.die-cutter-recoverable-failure" msgstr "Die Cutter Recoverable Failure" msgid "printer-state-reasons.die-cutter-recoverable-storage" msgstr "Die Cutter Recoverable Storage" msgid "printer-state-reasons.die-cutter-removed" msgstr "Die Cutter Removed" msgid "printer-state-reasons.die-cutter-resource-added" msgstr "Die Cutter Resource Added" msgid "printer-state-reasons.die-cutter-resource-removed" msgstr "Die Cutter Resource Removed" msgid "printer-state-reasons.die-cutter-thermistor-failure" msgstr "Die Cutter Thermistor Failure" msgid "printer-state-reasons.die-cutter-timing-failure" msgstr "Die Cutter Timing Failure" msgid "printer-state-reasons.die-cutter-turned-off" msgstr "Die Cutter Turned Off" msgid "printer-state-reasons.die-cutter-turned-on" msgstr "Die Cutter Turned On" msgid "printer-state-reasons.die-cutter-under-temperature" msgstr "Die Cutter Under Temperature" msgid "printer-state-reasons.die-cutter-unrecoverable-failure" msgstr "Die Cutter Unrecoverable Failure" msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error" msgstr "Die Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.die-cutter-warming-up" msgstr "Die Cutter Warming Up" msgid "printer-state-reasons.door-open" msgstr "Door Open" msgid "printer-state-reasons.extruder-cooling" msgstr "Extruder Cooling" msgid "printer-state-reasons.extruder-failure" msgstr "Extruder Failure" msgid "printer-state-reasons.extruder-heating" msgstr "Extruder Heating" msgid "printer-state-reasons.extruder-jam" msgstr "Extruder Jam" msgid "printer-state-reasons.extruder-temperature-high" msgstr "Extruder Temperature High" msgid "printer-state-reasons.extruder-temperature-low" msgstr "Extruder Temperature Low" msgid "printer-state-reasons.fan-failure" msgstr "Fan Failure" msgid "printer-state-reasons.folder-added" msgstr "Folder Added" msgid "printer-state-reasons.folder-almost-empty" msgstr "Folder Almost Empty" msgid "printer-state-reasons.folder-almost-full" msgstr "Folder Almost Full" msgid "printer-state-reasons.folder-at-limit" msgstr "Folder At Limit" msgid "printer-state-reasons.folder-closed" msgstr "Folder Closed" msgid "printer-state-reasons.folder-configuration-change" msgstr "Folder Configuration Change" msgid "printer-state-reasons.folder-cover-closed" msgstr "Folder Cover Closed" msgid "printer-state-reasons.folder-cover-open" msgstr "Folder Cover Open" msgid "printer-state-reasons.folder-empty" msgstr "Folder Empty" msgid "printer-state-reasons.folder-full" msgstr "Folder Full" msgid "printer-state-reasons.folder-interlock-closed" msgstr "Folder Interlock Closed" msgid "printer-state-reasons.folder-interlock-open" msgstr "Folder Interlock Open" msgid "printer-state-reasons.folder-jam" msgstr "Folder Jam" msgid "printer-state-reasons.folder-life-almost-over" msgstr "Folder Life Almost Over" msgid "printer-state-reasons.folder-life-over" msgstr "Folder Life Over" msgid "printer-state-reasons.folder-memory-exhausted" msgstr "Folder Memory Exhausted" msgid "printer-state-reasons.folder-missing" msgstr "Folder Missing" msgid "printer-state-reasons.folder-motor-failure" msgstr "Folder Motor Failure" msgid "printer-state-reasons.folder-near-limit" msgstr "Folder Near Limit" msgid "printer-state-reasons.folder-offline" msgstr "Folder Offline" msgid "printer-state-reasons.folder-opened" msgstr "Folder Opened" msgid "printer-state-reasons.folder-over-temperature" msgstr "Folder Over Temperature" msgid "printer-state-reasons.folder-power-saver" msgstr "Folder Power Saver" msgid "printer-state-reasons.folder-recoverable-failure" msgstr "Folder Recoverable Failure" msgid "printer-state-reasons.folder-recoverable-storage" msgstr "Folder Recoverable Storage" msgid "printer-state-reasons.folder-removed" msgstr "Folder Removed" msgid "printer-state-reasons.folder-resource-added" msgstr "Folder Resource Added" msgid "printer-state-reasons.folder-resource-removed" msgstr "Folder Resource Removed" msgid "printer-state-reasons.folder-thermistor-failure" msgstr "Folder Thermistor Failure" msgid "printer-state-reasons.folder-timing-failure" msgstr "Folder Timing Failure" msgid "printer-state-reasons.folder-turned-off" msgstr "Folder Turned Off" msgid "printer-state-reasons.folder-turned-on" msgstr "Folder Turned On" msgid "printer-state-reasons.folder-under-temperature" msgstr "Folder Under Temperature" msgid "printer-state-reasons.folder-unrecoverable-failure" msgstr "Folder Unrecoverable Failure" msgid "printer-state-reasons.folder-unrecoverable-storage-error" msgstr "Folder Unrecoverable Storage Error" msgid "printer-state-reasons.folder-warming-up" msgstr "Folder Warming Up" msgid "printer-state-reasons.fuser-over-temp" msgstr "Fuser Over Temp" msgid "printer-state-reasons.fuser-under-temp" msgstr "Fuser Under Temp" msgid "printer-state-reasons.hold-new-jobs" msgstr "Hold New Jobs" msgid "printer-state-reasons.identify-printer-requested" msgstr "Identify Printer" msgid "printer-state-reasons.imprinter-added" msgstr "Imprinter Added" msgid "printer-state-reasons.imprinter-almost-empty" msgstr "Imprinter Almost Empty" msgid "printer-state-reasons.imprinter-almost-full" msgstr "Imprinter Almost Full" msgid "printer-state-reasons.imprinter-at-limit" msgstr "Imprinter At Limit" msgid "printer-state-reasons.imprinter-closed" msgstr "Imprinter Closed" msgid "printer-state-reasons.imprinter-configuration-change" msgstr "Imprinter Configuration Change" msgid "printer-state-reasons.imprinter-cover-closed" msgstr "Imprinter Cover Closed" msgid "printer-state-reasons.imprinter-cover-open" msgstr "Imprinter Cover Open" msgid "printer-state-reasons.imprinter-empty" msgstr "Imprinter Empty" msgid "printer-state-reasons.imprinter-full" msgstr "Imprinter Full" msgid "printer-state-reasons.imprinter-interlock-closed" msgstr "Imprinter Interlock Closed" msgid "printer-state-reasons.imprinter-interlock-open" msgstr "Imprinter Interlock Open" msgid "printer-state-reasons.imprinter-jam" msgstr "Imprinter Jam" msgid "printer-state-reasons.imprinter-life-almost-over" msgstr "Imprinter Life Almost Over" msgid "printer-state-reasons.imprinter-life-over" msgstr "Imprinter Life Over" msgid "printer-state-reasons.imprinter-memory-exhausted" msgstr "Imprinter Memory Exhausted" msgid "printer-state-reasons.imprinter-missing" msgstr "Imprinter Missing" msgid "printer-state-reasons.imprinter-motor-failure" msgstr "Imprinter Motor Failure" msgid "printer-state-reasons.imprinter-near-limit" msgstr "Imprinter Near Limit" msgid "printer-state-reasons.imprinter-offline" msgstr "Imprinter Offline" msgid "printer-state-reasons.imprinter-opened" msgstr "Imprinter Opened" msgid "printer-state-reasons.imprinter-over-temperature" msgstr "Imprinter Over Temperature" msgid "printer-state-reasons.imprinter-power-saver" msgstr "Imprinter Power Saver" msgid "printer-state-reasons.imprinter-recoverable-failure" msgstr "Imprinter Recoverable Failure" msgid "printer-state-reasons.imprinter-recoverable-storage" msgstr "Imprinter Recoverable Storage" msgid "printer-state-reasons.imprinter-removed" msgstr "Imprinter Removed" msgid "printer-state-reasons.imprinter-resource-added" msgstr "Imprinter Resource Added" msgid "printer-state-reasons.imprinter-resource-removed" msgstr "Imprinter Resource Removed" msgid "printer-state-reasons.imprinter-thermistor-failure" msgstr "Imprinter Thermistor Failure" msgid "printer-state-reasons.imprinter-timing-failure" msgstr "Imprinter Timing Failure" msgid "printer-state-reasons.imprinter-turned-off" msgstr "Imprinter Turned Off" msgid "printer-state-reasons.imprinter-turned-on" msgstr "Imprinter Turned On" msgid "printer-state-reasons.imprinter-under-temperature" msgstr "Imprinter Under Temperature" msgid "printer-state-reasons.imprinter-unrecoverable-failure" msgstr "Imprinter Unrecoverable Failure" msgid "printer-state-reasons.imprinter-unrecoverable-storage-error" msgstr "Imprinter Unrecoverable Storage Error" msgid "printer-state-reasons.imprinter-warming-up" msgstr "Imprinter Warming Up" msgid "printer-state-reasons.input-cannot-feed-size-selected" msgstr "Input Cannot Feed Size Selected" msgid "printer-state-reasons.input-manual-input-request" msgstr "Input Manual Input Request" msgid "printer-state-reasons.input-media-color-change" msgstr "Input Media Color Change" msgid "printer-state-reasons.input-media-form-parts-change" msgstr "Input Media Form Parts Change" msgid "printer-state-reasons.input-media-size-change" msgstr "Input Media Size Change" msgid "printer-state-reasons.input-media-type-change" msgstr "Input Media Type Change" msgid "printer-state-reasons.input-media-weight-change" msgstr "Input Media Weight Change" msgid "printer-state-reasons.input-tray-elevation-failure" msgstr "Input Tray Elevation Failure" msgid "printer-state-reasons.input-tray-missing" msgstr "Input Tray Missing" msgid "printer-state-reasons.input-tray-position-failure" msgstr "Input Tray Position Failure" msgid "printer-state-reasons.inserter-added" msgstr "Inserter Added" msgid "printer-state-reasons.inserter-almost-empty" msgstr "Inserter Almost Empty" msgid "printer-state-reasons.inserter-almost-full" msgstr "Inserter Almost Full" msgid "printer-state-reasons.inserter-at-limit" msgstr "Inserter At Limit" msgid "printer-state-reasons.inserter-closed" msgstr "Inserter Closed" msgid "printer-state-reasons.inserter-configuration-change" msgstr "Inserter Configuration Change" msgid "printer-state-reasons.inserter-cover-closed" msgstr "Inserter Cover Closed" msgid "printer-state-reasons.inserter-cover-open" msgstr "Inserter Cover Open" msgid "printer-state-reasons.inserter-empty" msgstr "Inserter Empty" msgid "printer-state-reasons.inserter-full" msgstr "Inserter Full" msgid "printer-state-reasons.inserter-interlock-closed" msgstr "Inserter Interlock Closed" msgid "printer-state-reasons.inserter-interlock-open" msgstr "Inserter Interlock Open" msgid "printer-state-reasons.inserter-jam" msgstr "Inserter Jam" msgid "printer-state-reasons.inserter-life-almost-over" msgstr "Inserter Life Almost Over" msgid "printer-state-reasons.inserter-life-over" msgstr "Inserter Life Over" msgid "printer-state-reasons.inserter-memory-exhausted" msgstr "Inserter Memory Exhausted" msgid "printer-state-reasons.inserter-missing" msgstr "Inserter Missing" msgid "printer-state-reasons.inserter-motor-failure" msgstr "Inserter Motor Failure" msgid "printer-state-reasons.inserter-near-limit" msgstr "Inserter Near Limit" msgid "printer-state-reasons.inserter-offline" msgstr "Inserter Offline" msgid "printer-state-reasons.inserter-opened" msgstr "Inserter Opened" msgid "printer-state-reasons.inserter-over-temperature" msgstr "Inserter Over Temperature" msgid "printer-state-reasons.inserter-power-saver" msgstr "Inserter Power Saver" msgid "printer-state-reasons.inserter-recoverable-failure" msgstr "Inserter Recoverable Failure" msgid "printer-state-reasons.inserter-recoverable-storage" msgstr "Inserter Recoverable Storage" msgid "printer-state-reasons.inserter-removed" msgstr "Inserter Removed" msgid "printer-state-reasons.inserter-resource-added" msgstr "Inserter Resource Added" msgid "printer-state-reasons.inserter-resource-removed" msgstr "Inserter Resource Removed" msgid "printer-state-reasons.inserter-thermistor-failure" msgstr "Inserter Thermistor Failure" msgid "printer-state-reasons.inserter-timing-failure" msgstr "Inserter Timing Failure" msgid "printer-state-reasons.inserter-turned-off" msgstr "Inserter Turned Off" msgid "printer-state-reasons.inserter-turned-on" msgstr "Inserter Turned On" msgid "printer-state-reasons.inserter-under-temperature" msgstr "Inserter Under Temperature" msgid "printer-state-reasons.inserter-unrecoverable-failure" msgstr "Inserter Unrecoverable Failure" msgid "printer-state-reasons.inserter-unrecoverable-storage-error" msgstr "Inserter Unrecoverable Storage Error" msgid "printer-state-reasons.inserter-warming-up" msgstr "Inserter Warming Up" msgid "printer-state-reasons.interlock-closed" msgstr "Interlock Closed" msgid "printer-state-reasons.interlock-open" msgstr "Interlock Open" msgid "printer-state-reasons.interpreter-cartridge-added" msgstr "Interpreter Cartridge Added" msgid "printer-state-reasons.interpreter-cartridge-deleted" msgstr "Interpreter Cartridge Deleted" msgid "printer-state-reasons.interpreter-complex-page-encountered" msgstr "Interpreter Complex Page Encountered" msgid "printer-state-reasons.interpreter-memory-decrease" msgstr "Interpreter Memory Decrease" msgid "printer-state-reasons.interpreter-memory-increase" msgstr "Interpreter Memory Increase" msgid "printer-state-reasons.interpreter-resource-added" msgstr "Interpreter Resource Added" msgid "printer-state-reasons.interpreter-resource-deleted" msgstr "Interpreter Resource Deleted" msgid "printer-state-reasons.interpreter-resource-unavailable" msgstr "Interpreter Resource Unavailable" msgid "printer-state-reasons.lamp-at-eol" msgstr "Lamp At Eol" msgid "printer-state-reasons.lamp-failure" msgstr "Lamp Failure" msgid "printer-state-reasons.lamp-near-eol" msgstr "Lamp Near Eol" msgid "printer-state-reasons.laser-at-eol" msgstr "Laser At Eol" msgid "printer-state-reasons.laser-failure" msgstr "Laser Failure" msgid "printer-state-reasons.laser-near-eol" msgstr "Laser Near Eol" msgid "printer-state-reasons.make-envelope-added" msgstr "Make Envelope Added" msgid "printer-state-reasons.make-envelope-almost-empty" msgstr "Make Envelope Almost Empty" msgid "printer-state-reasons.make-envelope-almost-full" msgstr "Make Envelope Almost Full" msgid "printer-state-reasons.make-envelope-at-limit" msgstr "Make Envelope At Limit" msgid "printer-state-reasons.make-envelope-closed" msgstr "Make Envelope Closed" msgid "printer-state-reasons.make-envelope-configuration-change" msgstr "Make Envelope Configuration Change" msgid "printer-state-reasons.make-envelope-cover-closed" msgstr "Make Envelope Cover Closed" msgid "printer-state-reasons.make-envelope-cover-open" msgstr "Make Envelope Cover Open" msgid "printer-state-reasons.make-envelope-empty" msgstr "Make Envelope Empty" msgid "printer-state-reasons.make-envelope-full" msgstr "Make Envelope Full" msgid "printer-state-reasons.make-envelope-interlock-closed" msgstr "Make Envelope Interlock Closed" msgid "printer-state-reasons.make-envelope-interlock-open" msgstr "Make Envelope Interlock Open" msgid "printer-state-reasons.make-envelope-jam" msgstr "Make Envelope Jam" msgid "printer-state-reasons.make-envelope-life-almost-over" msgstr "Make Envelope Life Almost Over" msgid "printer-state-reasons.make-envelope-life-over" msgstr "Make Envelope Life Over" msgid "printer-state-reasons.make-envelope-memory-exhausted" msgstr "Make Envelope Memory Exhausted" msgid "printer-state-reasons.make-envelope-missing" msgstr "Make Envelope Missing" msgid "printer-state-reasons.make-envelope-motor-failure" msgstr "Make Envelope Motor Failure" msgid "printer-state-reasons.make-envelope-near-limit" msgstr "Make Envelope Near Limit" msgid "printer-state-reasons.make-envelope-offline" msgstr "Make Envelope Offline" msgid "printer-state-reasons.make-envelope-opened" msgstr "Make Envelope Opened" msgid "printer-state-reasons.make-envelope-over-temperature" msgstr "Make Envelope Over Temperature" msgid "printer-state-reasons.make-envelope-power-saver" msgstr "Make Envelope Power Saver" msgid "printer-state-reasons.make-envelope-recoverable-failure" msgstr "Make Envelope Recoverable Failure" msgid "printer-state-reasons.make-envelope-recoverable-storage" msgstr "Make Envelope Recoverable Storage" msgid "printer-state-reasons.make-envelope-removed" msgstr "Make Envelope Removed" msgid "printer-state-reasons.make-envelope-resource-added" msgstr "Make Envelope Resource Added" msgid "printer-state-reasons.make-envelope-resource-removed" msgstr "Make Envelope Resource Removed" msgid "printer-state-reasons.make-envelope-thermistor-failure" msgstr "Make Envelope Thermistor Failure" msgid "printer-state-reasons.make-envelope-timing-failure" msgstr "Make Envelope Timing Failure" msgid "printer-state-reasons.make-envelope-turned-off" msgstr "Make Envelope Turned Off" msgid "printer-state-reasons.make-envelope-turned-on" msgstr "Make Envelope Turned On" msgid "printer-state-reasons.make-envelope-under-temperature" msgstr "Make Envelope Under Temperature" msgid "printer-state-reasons.make-envelope-unrecoverable-failure" msgstr "Make Envelope Unrecoverable Failure" msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error" msgstr "Make Envelope Unrecoverable Storage Error" msgid "printer-state-reasons.make-envelope-warming-up" msgstr "Make Envelope Warming Up" msgid "printer-state-reasons.marker-adjusting-print-quality" msgstr "Marker Adjusting Print Quality" msgid "printer-state-reasons.marker-developer-almost-empty" msgstr "Marker Developer Almost Empty" msgid "printer-state-reasons.marker-developer-empty" msgstr "Marker Developer Empty" msgid "printer-state-reasons.marker-fuser-thermistor-failure" msgstr "Marker Fuser Thermistor Failure" msgid "printer-state-reasons.marker-fuser-timing-failure" msgstr "Marker Fuser Timing Failure" msgid "printer-state-reasons.marker-ink-almost-empty" msgstr "Marker Ink Almost Empty" msgid "printer-state-reasons.marker-ink-empty" msgstr "Marker Ink Empty" msgid "printer-state-reasons.marker-print-ribbon-almost-empty" msgstr "Marker Print Ribbon Almost Empty" msgid "printer-state-reasons.marker-print-ribbon-empty" msgstr "Marker Print Ribbon Empty" msgid "printer-state-reasons.marker-supply-empty" msgstr "Marker Supply Empty" msgid "printer-state-reasons.marker-supply-low" msgstr "Marker Supply Low" msgid "printer-state-reasons.marker-toner-cartridge-missing" msgstr "Marker Toner Cartridge Missing" msgid "printer-state-reasons.marker-waste-almost-full" msgstr "Marker Waste Almost Full" msgid "printer-state-reasons.marker-waste-full" msgstr "Marker Waste Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full" msgstr "Marker Waste Ink Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-full" msgstr "Marker Waste Ink Receptacle Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full" msgstr "Marker Waste Toner Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-full" msgstr "Marker Waste Toner Receptacle Full" msgid "printer-state-reasons.material-empty" msgstr "Material Empty" msgid "printer-state-reasons.material-low" msgstr "Material Low" msgid "printer-state-reasons.material-needed" msgstr "Material Needed" msgid "printer-state-reasons.media-empty" msgstr "Media Empty" msgid "printer-state-reasons.media-jam" msgstr "Media Jam" msgid "printer-state-reasons.media-low" msgstr "Media Low" msgid "printer-state-reasons.media-needed" msgstr "Media Needed" msgid "printer-state-reasons.media-path-cannot-duplex-media-selected" msgstr "Media Path Cannot Duplex Media Selected" msgid "printer-state-reasons.media-path-media-tray-almost-full" msgstr "Media Path Media Tray Almost Full" msgid "printer-state-reasons.media-path-media-tray-full" msgstr "Media Path Media Tray Full" msgid "printer-state-reasons.media-path-media-tray-missing" msgstr "Media Path Media Tray Missing" msgid "printer-state-reasons.motor-failure" msgstr "Motor Failure" msgid "printer-state-reasons.moving-to-paused" msgstr "Moving To Paused" msgid "printer-state-reasons.none" msgstr "None" msgid "printer-state-reasons.opc-life-over" msgstr "Opc Life Over" msgid "printer-state-reasons.opc-near-eol" msgstr "Opc Near Eol" msgid "printer-state-reasons.other" msgstr "Other" msgid "printer-state-reasons.output-area-almost-full" msgstr "Output Area Almost Full" msgid "printer-state-reasons.output-area-full" msgstr "Output Area Full" msgid "printer-state-reasons.output-mailbox-select-failure" msgstr "Output Mailbox Select Failure" msgid "printer-state-reasons.output-tray-missing" msgstr "Output Tray Missing" msgid "printer-state-reasons.paused" msgstr "Paused" msgid "printer-state-reasons.perforater-added" msgstr "Perforater Added" msgid "printer-state-reasons.perforater-almost-empty" msgstr "Perforater Almost Empty" msgid "printer-state-reasons.perforater-almost-full" msgstr "Perforater Almost Full" msgid "printer-state-reasons.perforater-at-limit" msgstr "Perforater At Limit" msgid "printer-state-reasons.perforater-closed" msgstr "Perforater Closed" msgid "printer-state-reasons.perforater-configuration-change" msgstr "Perforater Configuration Change" msgid "printer-state-reasons.perforater-cover-closed" msgstr "Perforater Cover Closed" msgid "printer-state-reasons.perforater-cover-open" msgstr "Perforater Cover Open" msgid "printer-state-reasons.perforater-empty" msgstr "Perforater Empty" msgid "printer-state-reasons.perforater-full" msgstr "Perforater Full" msgid "printer-state-reasons.perforater-interlock-closed" msgstr "Perforater Interlock Closed" msgid "printer-state-reasons.perforater-interlock-open" msgstr "Perforater Interlock Open" msgid "printer-state-reasons.perforater-jam" msgstr "Perforater Jam" msgid "printer-state-reasons.perforater-life-almost-over" msgstr "Perforater Life Almost Over" msgid "printer-state-reasons.perforater-life-over" msgstr "Perforater Life Over" msgid "printer-state-reasons.perforater-memory-exhausted" msgstr "Perforater Memory Exhausted" msgid "printer-state-reasons.perforater-missing" msgstr "Perforater Missing" msgid "printer-state-reasons.perforater-motor-failure" msgstr "Perforater Motor Failure" msgid "printer-state-reasons.perforater-near-limit" msgstr "Perforater Near Limit" msgid "printer-state-reasons.perforater-offline" msgstr "Perforater Offline" msgid "printer-state-reasons.perforater-opened" msgstr "Perforater Opened" msgid "printer-state-reasons.perforater-over-temperature" msgstr "Perforater Over Temperature" msgid "printer-state-reasons.perforater-power-saver" msgstr "Perforater Power Saver" msgid "printer-state-reasons.perforater-recoverable-failure" msgstr "Perforater Recoverable Failure" msgid "printer-state-reasons.perforater-recoverable-storage" msgstr "Perforater Recoverable Storage" msgid "printer-state-reasons.perforater-removed" msgstr "Perforater Removed" msgid "printer-state-reasons.perforater-resource-added" msgstr "Perforater Resource Added" msgid "printer-state-reasons.perforater-resource-removed" msgstr "Perforater Resource Removed" msgid "printer-state-reasons.perforater-thermistor-failure" msgstr "Perforater Thermistor Failure" msgid "printer-state-reasons.perforater-timing-failure" msgstr "Perforater Timing Failure" msgid "printer-state-reasons.perforater-turned-off" msgstr "Perforater Turned Off" msgid "printer-state-reasons.perforater-turned-on" msgstr "Perforater Turned On" msgid "printer-state-reasons.perforater-under-temperature" msgstr "Perforater Under Temperature" msgid "printer-state-reasons.perforater-unrecoverable-failure" msgstr "Perforater Unrecoverable Failure" msgid "printer-state-reasons.perforater-unrecoverable-storage-error" msgstr "Perforater Unrecoverable Storage Error" msgid "printer-state-reasons.perforater-warming-up" msgstr "Perforater Warming Up" msgid "printer-state-reasons.power-down" msgstr "Power Down" msgid "printer-state-reasons.power-up" msgstr "Power Up" msgid "printer-state-reasons.printer-manual-reset" msgstr "Printer Manual Reset" msgid "printer-state-reasons.printer-nms-reset" msgstr "Printer Nms Reset" msgid "printer-state-reasons.printer-ready-to-print" msgstr "Printer Ready To Print" msgid "printer-state-reasons.puncher-added" msgstr "Puncher Added" msgid "printer-state-reasons.puncher-almost-empty" msgstr "Puncher Almost Empty" msgid "printer-state-reasons.puncher-almost-full" msgstr "Puncher Almost Full" msgid "printer-state-reasons.puncher-at-limit" msgstr "Puncher At Limit" msgid "printer-state-reasons.puncher-closed" msgstr "Puncher Closed" msgid "printer-state-reasons.puncher-configuration-change" msgstr "Puncher Configuration Change" msgid "printer-state-reasons.puncher-cover-closed" msgstr "Puncher Cover Closed" msgid "printer-state-reasons.puncher-cover-open" msgstr "Puncher Cover Open" msgid "printer-state-reasons.puncher-empty" msgstr "Puncher Empty" msgid "printer-state-reasons.puncher-full" msgstr "Puncher Full" msgid "printer-state-reasons.puncher-interlock-closed" msgstr "Puncher Interlock Closed" msgid "printer-state-reasons.puncher-interlock-open" msgstr "Puncher Interlock Open" msgid "printer-state-reasons.puncher-jam" msgstr "Puncher Jam" msgid "printer-state-reasons.puncher-life-almost-over" msgstr "Puncher Life Almost Over" msgid "printer-state-reasons.puncher-life-over" msgstr "Puncher Life Over" msgid "printer-state-reasons.puncher-memory-exhausted" msgstr "Puncher Memory Exhausted" msgid "printer-state-reasons.puncher-missing" msgstr "Puncher Missing" msgid "printer-state-reasons.puncher-motor-failure" msgstr "Puncher Motor Failure" msgid "printer-state-reasons.puncher-near-limit" msgstr "Puncher Near Limit" msgid "printer-state-reasons.puncher-offline" msgstr "Puncher Offline" msgid "printer-state-reasons.puncher-opened" msgstr "Puncher Opened" msgid "printer-state-reasons.puncher-over-temperature" msgstr "Puncher Over Temperature" msgid "printer-state-reasons.puncher-power-saver" msgstr "Puncher Power Saver" msgid "printer-state-reasons.puncher-recoverable-failure" msgstr "Puncher Recoverable Failure" msgid "printer-state-reasons.puncher-recoverable-storage" msgstr "Puncher Recoverable Storage" msgid "printer-state-reasons.puncher-removed" msgstr "Puncher Removed" msgid "printer-state-reasons.puncher-resource-added" msgstr "Puncher Resource Added" msgid "printer-state-reasons.puncher-resource-removed" msgstr "Puncher Resource Removed" msgid "printer-state-reasons.puncher-thermistor-failure" msgstr "Puncher Thermistor Failure" msgid "printer-state-reasons.puncher-timing-failure" msgstr "Puncher Timing Failure" msgid "printer-state-reasons.puncher-turned-off" msgstr "Puncher Turned Off" msgid "printer-state-reasons.puncher-turned-on" msgstr "Puncher Turned On" msgid "printer-state-reasons.puncher-under-temperature" msgstr "Puncher Under Temperature" msgid "printer-state-reasons.puncher-unrecoverable-failure" msgstr "Puncher Unrecoverable Failure" msgid "printer-state-reasons.puncher-unrecoverable-storage-error" msgstr "Puncher Unrecoverable Storage Error" msgid "printer-state-reasons.puncher-warming-up" msgstr "Puncher Warming Up" msgid "printer-state-reasons.separation-cutter-added" msgstr "Separation Cutter Added" msgid "printer-state-reasons.separation-cutter-almost-empty" msgstr "Separation Cutter Almost Empty" msgid "printer-state-reasons.separation-cutter-almost-full" msgstr "Separation Cutter Almost Full" msgid "printer-state-reasons.separation-cutter-at-limit" msgstr "Separation Cutter At Limit" msgid "printer-state-reasons.separation-cutter-closed" msgstr "Separation Cutter Closed" msgid "printer-state-reasons.separation-cutter-configuration-change" msgstr "Separation Cutter Configuration Change" msgid "printer-state-reasons.separation-cutter-cover-closed" msgstr "Separation Cutter Cover Closed" msgid "printer-state-reasons.separation-cutter-cover-open" msgstr "Separation Cutter Cover Open" msgid "printer-state-reasons.separation-cutter-empty" msgstr "Separation Cutter Empty" msgid "printer-state-reasons.separation-cutter-full" msgstr "Separation Cutter Full" msgid "printer-state-reasons.separation-cutter-interlock-closed" msgstr "Separation Cutter Interlock Closed" msgid "printer-state-reasons.separation-cutter-interlock-open" msgstr "Separation Cutter Interlock Open" msgid "printer-state-reasons.separation-cutter-jam" msgstr "Separation Cutter Jam" msgid "printer-state-reasons.separation-cutter-life-almost-over" msgstr "Separation Cutter Life Almost Over" msgid "printer-state-reasons.separation-cutter-life-over" msgstr "Separation Cutter Life Over" msgid "printer-state-reasons.separation-cutter-memory-exhausted" msgstr "Separation Cutter Memory Exhausted" msgid "printer-state-reasons.separation-cutter-missing" msgstr "Separation Cutter Missing" msgid "printer-state-reasons.separation-cutter-motor-failure" msgstr "Separation Cutter Motor Failure" msgid "printer-state-reasons.separation-cutter-near-limit" msgstr "Separation Cutter Near Limit" msgid "printer-state-reasons.separation-cutter-offline" msgstr "Separation Cutter Offline" msgid "printer-state-reasons.separation-cutter-opened" msgstr "Separation Cutter Opened" msgid "printer-state-reasons.separation-cutter-over-temperature" msgstr "Separation Cutter Over Temperature" msgid "printer-state-reasons.separation-cutter-power-saver" msgstr "Separation Cutter Power Saver" msgid "printer-state-reasons.separation-cutter-recoverable-failure" msgstr "Separation Cutter Recoverable Failure" msgid "printer-state-reasons.separation-cutter-recoverable-storage" msgstr "Separation Cutter Recoverable Storage" msgid "printer-state-reasons.separation-cutter-removed" msgstr "Separation Cutter Removed" msgid "printer-state-reasons.separation-cutter-resource-added" msgstr "Separation Cutter Resource Added" msgid "printer-state-reasons.separation-cutter-resource-removed" msgstr "Separation Cutter Resource Removed" msgid "printer-state-reasons.separation-cutter-thermistor-failure" msgstr "Separation Cutter Thermistor Failure" msgid "printer-state-reasons.separation-cutter-timing-failure" msgstr "Separation Cutter Timing Failure" msgid "printer-state-reasons.separation-cutter-turned-off" msgstr "Separation Cutter Turned Off" msgid "printer-state-reasons.separation-cutter-turned-on" msgstr "Separation Cutter Turned On" msgid "printer-state-reasons.separation-cutter-under-temperature" msgstr "Separation Cutter Under Temperature" msgid "printer-state-reasons.separation-cutter-unrecoverable-failure" msgstr "Separation Cutter Unrecoverable Failure" msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error" msgstr "Separation Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.separation-cutter-warming-up" msgstr "Separation Cutter Warming Up" msgid "printer-state-reasons.sheet-rotator-added" msgstr "Sheet Rotator Added" msgid "printer-state-reasons.sheet-rotator-almost-empty" msgstr "Sheet Rotator Almost Empty" msgid "printer-state-reasons.sheet-rotator-almost-full" msgstr "Sheet Rotator Almost Full" msgid "printer-state-reasons.sheet-rotator-at-limit" msgstr "Sheet Rotator At Limit" msgid "printer-state-reasons.sheet-rotator-closed" msgstr "Sheet Rotator Closed" msgid "printer-state-reasons.sheet-rotator-configuration-change" msgstr "Sheet Rotator Configuration Change" msgid "printer-state-reasons.sheet-rotator-cover-closed" msgstr "Sheet Rotator Cover Closed" msgid "printer-state-reasons.sheet-rotator-cover-open" msgstr "Sheet Rotator Cover Open" msgid "printer-state-reasons.sheet-rotator-empty" msgstr "Sheet Rotator Empty" msgid "printer-state-reasons.sheet-rotator-full" msgstr "Sheet Rotator Full" msgid "printer-state-reasons.sheet-rotator-interlock-closed" msgstr "Sheet Rotator Interlock Closed" msgid "printer-state-reasons.sheet-rotator-interlock-open" msgstr "Sheet Rotator Interlock Open" msgid "printer-state-reasons.sheet-rotator-jam" msgstr "Sheet Rotator Jam" msgid "printer-state-reasons.sheet-rotator-life-almost-over" msgstr "Sheet Rotator Life Almost Over" msgid "printer-state-reasons.sheet-rotator-life-over" msgstr "Sheet Rotator Life Over" msgid "printer-state-reasons.sheet-rotator-memory-exhausted" msgstr "Sheet Rotator Memory Exhausted" msgid "printer-state-reasons.sheet-rotator-missing" msgstr "Sheet Rotator Missing" msgid "printer-state-reasons.sheet-rotator-motor-failure" msgstr "Sheet Rotator Motor Failure" msgid "printer-state-reasons.sheet-rotator-near-limit" msgstr "Sheet Rotator Near Limit" msgid "printer-state-reasons.sheet-rotator-offline" msgstr "Sheet Rotator Offline" msgid "printer-state-reasons.sheet-rotator-opened" msgstr "Sheet Rotator Opened" msgid "printer-state-reasons.sheet-rotator-over-temperature" msgstr "Sheet Rotator Over Temperature" msgid "printer-state-reasons.sheet-rotator-power-saver" msgstr "Sheet Rotator Power Saver" msgid "printer-state-reasons.sheet-rotator-recoverable-failure" msgstr "Sheet Rotator Recoverable Failure" msgid "printer-state-reasons.sheet-rotator-recoverable-storage" msgstr "Sheet Rotator Recoverable Storage" msgid "printer-state-reasons.sheet-rotator-removed" msgstr "Sheet Rotator Removed" msgid "printer-state-reasons.sheet-rotator-resource-added" msgstr "Sheet Rotator Resource Added" msgid "printer-state-reasons.sheet-rotator-resource-removed" msgstr "Sheet Rotator Resource Removed" msgid "printer-state-reasons.sheet-rotator-thermistor-failure" msgstr "Sheet Rotator Thermistor Failure" msgid "printer-state-reasons.sheet-rotator-timing-failure" msgstr "Sheet Rotator Timing Failure" msgid "printer-state-reasons.sheet-rotator-turned-off" msgstr "Sheet Rotator Turned Off" msgid "printer-state-reasons.sheet-rotator-turned-on" msgstr "Sheet Rotator Turned On" msgid "printer-state-reasons.sheet-rotator-under-temperature" msgstr "Sheet Rotator Under Temperature" msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure" msgstr "Sheet Rotator Unrecoverable Failure" msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" msgstr "Sheet Rotator Unrecoverable Storage Error" msgid "printer-state-reasons.sheet-rotator-warming-up" msgstr "Sheet Rotator Warming Up" msgid "printer-state-reasons.shutdown" msgstr "Shutdown" msgid "printer-state-reasons.slitter-added" msgstr "Slitter Added" msgid "printer-state-reasons.slitter-almost-empty" msgstr "Slitter Almost Empty" msgid "printer-state-reasons.slitter-almost-full" msgstr "Slitter Almost Full" msgid "printer-state-reasons.slitter-at-limit" msgstr "Slitter At Limit" msgid "printer-state-reasons.slitter-closed" msgstr "Slitter Closed" msgid "printer-state-reasons.slitter-configuration-change" msgstr "Slitter Configuration Change" msgid "printer-state-reasons.slitter-cover-closed" msgstr "Slitter Cover Closed" msgid "printer-state-reasons.slitter-cover-open" msgstr "Slitter Cover Open" msgid "printer-state-reasons.slitter-empty" msgstr "Slitter Empty" msgid "printer-state-reasons.slitter-full" msgstr "Slitter Full" msgid "printer-state-reasons.slitter-interlock-closed" msgstr "Slitter Interlock Closed" msgid "printer-state-reasons.slitter-interlock-open" msgstr "Slitter Interlock Open" msgid "printer-state-reasons.slitter-jam" msgstr "Slitter Jam" msgid "printer-state-reasons.slitter-life-almost-over" msgstr "Slitter Life Almost Over" msgid "printer-state-reasons.slitter-life-over" msgstr "Slitter Life Over" msgid "printer-state-reasons.slitter-memory-exhausted" msgstr "Slitter Memory Exhausted" msgid "printer-state-reasons.slitter-missing" msgstr "Slitter Missing" msgid "printer-state-reasons.slitter-motor-failure" msgstr "Slitter Motor Failure" msgid "printer-state-reasons.slitter-near-limit" msgstr "Slitter Near Limit" msgid "printer-state-reasons.slitter-offline" msgstr "Slitter Offline" msgid "printer-state-reasons.slitter-opened" msgstr "Slitter Opened" msgid "printer-state-reasons.slitter-over-temperature" msgstr "Slitter Over Temperature" msgid "printer-state-reasons.slitter-power-saver" msgstr "Slitter Power Saver" msgid "printer-state-reasons.slitter-recoverable-failure" msgstr "Slitter Recoverable Failure" msgid "printer-state-reasons.slitter-recoverable-storage" msgstr "Slitter Recoverable Storage" msgid "printer-state-reasons.slitter-removed" msgstr "Slitter Removed" msgid "printer-state-reasons.slitter-resource-added" msgstr "Slitter Resource Added" msgid "printer-state-reasons.slitter-resource-removed" msgstr "Slitter Resource Removed" msgid "printer-state-reasons.slitter-thermistor-failure" msgstr "Slitter Thermistor Failure" msgid "printer-state-reasons.slitter-timing-failure" msgstr "Slitter Timing Failure" msgid "printer-state-reasons.slitter-turned-off" msgstr "Slitter Turned Off" msgid "printer-state-reasons.slitter-turned-on" msgstr "Slitter Turned On" msgid "printer-state-reasons.slitter-under-temperature" msgstr "Slitter Under Temperature" msgid "printer-state-reasons.slitter-unrecoverable-failure" msgstr "Slitter Unrecoverable Failure" msgid "printer-state-reasons.slitter-unrecoverable-storage-error" msgstr "Slitter Unrecoverable Storage Error" msgid "printer-state-reasons.slitter-warming-up" msgstr "Slitter Warming Up" msgid "printer-state-reasons.spool-area-full" msgstr "Spool Area Full" msgid "printer-state-reasons.stacker-added" msgstr "Stacker Added" msgid "printer-state-reasons.stacker-almost-empty" msgstr "Stacker Almost Empty" msgid "printer-state-reasons.stacker-almost-full" msgstr "Stacker Almost Full" msgid "printer-state-reasons.stacker-at-limit" msgstr "Stacker At Limit" msgid "printer-state-reasons.stacker-closed" msgstr "Stacker Closed" msgid "printer-state-reasons.stacker-configuration-change" msgstr "Stacker Configuration Change" msgid "printer-state-reasons.stacker-cover-closed" msgstr "Stacker Cover Closed" msgid "printer-state-reasons.stacker-cover-open" msgstr "Stacker Cover Open" msgid "printer-state-reasons.stacker-empty" msgstr "Stacker Empty" msgid "printer-state-reasons.stacker-full" msgstr "Stacker Full" msgid "printer-state-reasons.stacker-interlock-closed" msgstr "Stacker Interlock Closed" msgid "printer-state-reasons.stacker-interlock-open" msgstr "Stacker Interlock Open" msgid "printer-state-reasons.stacker-jam" msgstr "Stacker Jam" msgid "printer-state-reasons.stacker-life-almost-over" msgstr "Stacker Life Almost Over" msgid "printer-state-reasons.stacker-life-over" msgstr "Stacker Life Over" msgid "printer-state-reasons.stacker-memory-exhausted" msgstr "Stacker Memory Exhausted" msgid "printer-state-reasons.stacker-missing" msgstr "Stacker Missing" msgid "printer-state-reasons.stacker-motor-failure" msgstr "Stacker Motor Failure" msgid "printer-state-reasons.stacker-near-limit" msgstr "Stacker Near Limit" msgid "printer-state-reasons.stacker-offline" msgstr "Stacker Offline" msgid "printer-state-reasons.stacker-opened" msgstr "Stacker Opened" msgid "printer-state-reasons.stacker-over-temperature" msgstr "Stacker Over Temperature" msgid "printer-state-reasons.stacker-power-saver" msgstr "Stacker Power Saver" msgid "printer-state-reasons.stacker-recoverable-failure" msgstr "Stacker Recoverable Failure" msgid "printer-state-reasons.stacker-recoverable-storage" msgstr "Stacker Recoverable Storage" msgid "printer-state-reasons.stacker-removed" msgstr "Stacker Removed" msgid "printer-state-reasons.stacker-resource-added" msgstr "Stacker Resource Added" msgid "printer-state-reasons.stacker-resource-removed" msgstr "Stacker Resource Removed" msgid "printer-state-reasons.stacker-thermistor-failure" msgstr "Stacker Thermistor Failure" msgid "printer-state-reasons.stacker-timing-failure" msgstr "Stacker Timing Failure" msgid "printer-state-reasons.stacker-turned-off" msgstr "Stacker Turned Off" msgid "printer-state-reasons.stacker-turned-on" msgstr "Stacker Turned On" msgid "printer-state-reasons.stacker-under-temperature" msgstr "Stacker Under Temperature" msgid "printer-state-reasons.stacker-unrecoverable-failure" msgstr "Stacker Unrecoverable Failure" msgid "printer-state-reasons.stacker-unrecoverable-storage-error" msgstr "Stacker Unrecoverable Storage Error" msgid "printer-state-reasons.stacker-warming-up" msgstr "Stacker Warming Up" msgid "printer-state-reasons.stapler-added" msgstr "Stapler Added" msgid "printer-state-reasons.stapler-almost-empty" msgstr "Stapler Almost Empty" msgid "printer-state-reasons.stapler-almost-full" msgstr "Stapler Almost Full" msgid "printer-state-reasons.stapler-at-limit" msgstr "Stapler At Limit" msgid "printer-state-reasons.stapler-closed" msgstr "Stapler Closed" msgid "printer-state-reasons.stapler-configuration-change" msgstr "Stapler Configuration Change" msgid "printer-state-reasons.stapler-cover-closed" msgstr "Stapler Cover Closed" msgid "printer-state-reasons.stapler-cover-open" msgstr "Stapler Cover Open" msgid "printer-state-reasons.stapler-empty" msgstr "Stapler Empty" msgid "printer-state-reasons.stapler-full" msgstr "Stapler Full" msgid "printer-state-reasons.stapler-interlock-closed" msgstr "Stapler Interlock Closed" msgid "printer-state-reasons.stapler-interlock-open" msgstr "Stapler Interlock Open" msgid "printer-state-reasons.stapler-jam" msgstr "Stapler Jam" msgid "printer-state-reasons.stapler-life-almost-over" msgstr "Stapler Life Almost Over" msgid "printer-state-reasons.stapler-life-over" msgstr "Stapler Life Over" msgid "printer-state-reasons.stapler-memory-exhausted" msgstr "Stapler Memory Exhausted" msgid "printer-state-reasons.stapler-missing" msgstr "Stapler Missing" msgid "printer-state-reasons.stapler-motor-failure" msgstr "Stapler Motor Failure" msgid "printer-state-reasons.stapler-near-limit" msgstr "Stapler Near Limit" msgid "printer-state-reasons.stapler-offline" msgstr "Stapler Offline" msgid "printer-state-reasons.stapler-opened" msgstr "Stapler Opened" msgid "printer-state-reasons.stapler-over-temperature" msgstr "Stapler Over Temperature" msgid "printer-state-reasons.stapler-power-saver" msgstr "Stapler Power Saver" msgid "printer-state-reasons.stapler-recoverable-failure" msgstr "Stapler Recoverable Failure" msgid "printer-state-reasons.stapler-recoverable-storage" msgstr "Stapler Recoverable Storage" msgid "printer-state-reasons.stapler-removed" msgstr "Stapler Removed" msgid "printer-state-reasons.stapler-resource-added" msgstr "Stapler Resource Added" msgid "printer-state-reasons.stapler-resource-removed" msgstr "Stapler Resource Removed" msgid "printer-state-reasons.stapler-thermistor-failure" msgstr "Stapler Thermistor Failure" msgid "printer-state-reasons.stapler-timing-failure" msgstr "Stapler Timing Failure" msgid "printer-state-reasons.stapler-turned-off" msgstr "Stapler Turned Off" msgid "printer-state-reasons.stapler-turned-on" msgstr "Stapler Turned On" msgid "printer-state-reasons.stapler-under-temperature" msgstr "Stapler Under Temperature" msgid "printer-state-reasons.stapler-unrecoverable-failure" msgstr "Stapler Unrecoverable Failure" msgid "printer-state-reasons.stapler-unrecoverable-storage-error" msgstr "Stapler Unrecoverable Storage Error" msgid "printer-state-reasons.stapler-warming-up" msgstr "Stapler Warming Up" msgid "printer-state-reasons.stitcher-added" msgstr "Stitcher Added" msgid "printer-state-reasons.stitcher-almost-empty" msgstr "Stitcher Almost Empty" msgid "printer-state-reasons.stitcher-almost-full" msgstr "Stitcher Almost Full" msgid "printer-state-reasons.stitcher-at-limit" msgstr "Stitcher At Limit" msgid "printer-state-reasons.stitcher-closed" msgstr "Stitcher Closed" msgid "printer-state-reasons.stitcher-configuration-change" msgstr "Stitcher Configuration Change" msgid "printer-state-reasons.stitcher-cover-closed" msgstr "Stitcher Cover Closed" msgid "printer-state-reasons.stitcher-cover-open" msgstr "Stitcher Cover Open" msgid "printer-state-reasons.stitcher-empty" msgstr "Stitcher Empty" msgid "printer-state-reasons.stitcher-full" msgstr "Stitcher Full" msgid "printer-state-reasons.stitcher-interlock-closed" msgstr "Stitcher Interlock Closed" msgid "printer-state-reasons.stitcher-interlock-open" msgstr "Stitcher Interlock Open" msgid "printer-state-reasons.stitcher-jam" msgstr "Stitcher Jam" msgid "printer-state-reasons.stitcher-life-almost-over" msgstr "Stitcher Life Almost Over" msgid "printer-state-reasons.stitcher-life-over" msgstr "Stitcher Life Over" msgid "printer-state-reasons.stitcher-memory-exhausted" msgstr "Stitcher Memory Exhausted" msgid "printer-state-reasons.stitcher-missing" msgstr "Stitcher Missing" msgid "printer-state-reasons.stitcher-motor-failure" msgstr "Stitcher Motor Failure" msgid "printer-state-reasons.stitcher-near-limit" msgstr "Stitcher Near Limit" msgid "printer-state-reasons.stitcher-offline" msgstr "Stitcher Offline" msgid "printer-state-reasons.stitcher-opened" msgstr "Stitcher Opened" msgid "printer-state-reasons.stitcher-over-temperature" msgstr "Stitcher Over Temperature" msgid "printer-state-reasons.stitcher-power-saver" msgstr "Stitcher Power Saver" msgid "printer-state-reasons.stitcher-recoverable-failure" msgstr "Stitcher Recoverable Failure" msgid "printer-state-reasons.stitcher-recoverable-storage" msgstr "Stitcher Recoverable Storage" msgid "printer-state-reasons.stitcher-removed" msgstr "Stitcher Removed" msgid "printer-state-reasons.stitcher-resource-added" msgstr "Stitcher Resource Added" msgid "printer-state-reasons.stitcher-resource-removed" msgstr "Stitcher Resource Removed" msgid "printer-state-reasons.stitcher-thermistor-failure" msgstr "Stitcher Thermistor Failure" msgid "printer-state-reasons.stitcher-timing-failure" msgstr "Stitcher Timing Failure" msgid "printer-state-reasons.stitcher-turned-off" msgstr "Stitcher Turned Off" msgid "printer-state-reasons.stitcher-turned-on" msgstr "Stitcher Turned On" msgid "printer-state-reasons.stitcher-under-temperature" msgstr "Stitcher Under Temperature" msgid "printer-state-reasons.stitcher-unrecoverable-failure" msgstr "Stitcher Unrecoverable Failure" msgid "printer-state-reasons.stitcher-unrecoverable-storage-error" msgstr "Stitcher Unrecoverable Storage Error" msgid "printer-state-reasons.stitcher-warming-up" msgstr "Stitcher Warming Up" msgid "printer-state-reasons.stopped-partly" msgstr "Stopped Partly" msgid "printer-state-reasons.stopping" msgstr "Stopping" msgid "printer-state-reasons.subunit-added" msgstr "Subunit Added" msgid "printer-state-reasons.subunit-almost-empty" msgstr "Subunit Almost Empty" msgid "printer-state-reasons.subunit-almost-full" msgstr "Subunit Almost Full" msgid "printer-state-reasons.subunit-at-limit" msgstr "Subunit At Limit" msgid "printer-state-reasons.subunit-closed" msgstr "Subunit Closed" msgid "printer-state-reasons.subunit-empty" msgstr "Subunit Empty" msgid "printer-state-reasons.subunit-full" msgstr "Subunit Full" msgid "printer-state-reasons.subunit-life-almost-over" msgstr "Subunit Life Almost Over" msgid "printer-state-reasons.subunit-life-over" msgstr "Subunit Life Over" msgid "printer-state-reasons.subunit-memory-exhausted" msgstr "Subunit Memory Exhausted" msgid "printer-state-reasons.subunit-missing" msgstr "Subunit Missing" msgid "printer-state-reasons.subunit-motor-failure" msgstr "Subunit Motor Failure" msgid "printer-state-reasons.subunit-near-limit" msgstr "Subunit Near Limit" msgid "printer-state-reasons.subunit-offline" msgstr "Subunit Offline" msgid "printer-state-reasons.subunit-opened" msgstr "Subunit Opened" msgid "printer-state-reasons.subunit-over-temperature" msgstr "Subunit Over Temperature" msgid "printer-state-reasons.subunit-power-saver" msgstr "Subunit Power Saver" msgid "printer-state-reasons.subunit-recoverable-failure" msgstr "Subunit Recoverable Failure" msgid "printer-state-reasons.subunit-recoverable-storage" msgstr "Subunit Recoverable Storage" msgid "printer-state-reasons.subunit-removed" msgstr "Subunit Removed" msgid "printer-state-reasons.subunit-resource-added" msgstr "Subunit Resource Added" msgid "printer-state-reasons.subunit-resource-removed" msgstr "Subunit Resource Removed" msgid "printer-state-reasons.subunit-thermistor-failure" msgstr "Subunit Thermistor Failure" msgid "printer-state-reasons.subunit-timing-Failure" msgstr "Subunit Timing Failure" msgid "printer-state-reasons.subunit-turned-off" msgstr "Subunit Turned Off" msgid "printer-state-reasons.subunit-turned-on" msgstr "Subunit Turned On" msgid "printer-state-reasons.subunit-under-temperature" msgstr "Subunit Under Temperature" msgid "printer-state-reasons.subunit-unrecoverable-failure" msgstr "Subunit Unrecoverable Failure" msgid "printer-state-reasons.subunit-unrecoverable-storage" msgstr "Subunit Unrecoverable Storage" msgid "printer-state-reasons.subunit-warming-up" msgstr "Subunit Warming Up" msgid "printer-state-reasons.timed-out" msgstr "Timed Out" msgid "printer-state-reasons.toner-empty" msgstr "Toner Empty" msgid "printer-state-reasons.toner-low" msgstr "Toner Low" msgid "printer-state-reasons.trimmer-added" msgstr "Trimmer Added" msgid "printer-state-reasons.trimmer-almost-empty" msgstr "Trimmer Almost Empty" msgid "printer-state-reasons.trimmer-almost-full" msgstr "Trimmer Almost Full" msgid "printer-state-reasons.trimmer-at-limit" msgstr "Trimmer At Limit" msgid "printer-state-reasons.trimmer-closed" msgstr "Trimmer Closed" msgid "printer-state-reasons.trimmer-configuration-change" msgstr "Trimmer Configuration Change" msgid "printer-state-reasons.trimmer-cover-closed" msgstr "Trimmer Cover Closed" msgid "printer-state-reasons.trimmer-cover-open" msgstr "Trimmer Cover Open" msgid "printer-state-reasons.trimmer-empty" msgstr "Trimmer Empty" msgid "printer-state-reasons.trimmer-full" msgstr "Trimmer Full" msgid "printer-state-reasons.trimmer-interlock-closed" msgstr "Trimmer Interlock Closed" msgid "printer-state-reasons.trimmer-interlock-open" msgstr "Trimmer Interlock Open" msgid "printer-state-reasons.trimmer-jam" msgstr "Trimmer Jam" msgid "printer-state-reasons.trimmer-life-almost-over" msgstr "Trimmer Life Almost Over" msgid "printer-state-reasons.trimmer-life-over" msgstr "Trimmer Life Over" msgid "printer-state-reasons.trimmer-memory-exhausted" msgstr "Trimmer Memory Exhausted" msgid "printer-state-reasons.trimmer-missing" msgstr "Trimmer Missing" msgid "printer-state-reasons.trimmer-motor-failure" msgstr "Trimmer Motor Failure" msgid "printer-state-reasons.trimmer-near-limit" msgstr "Trimmer Near Limit" msgid "printer-state-reasons.trimmer-offline" msgstr "Trimmer Offline" msgid "printer-state-reasons.trimmer-opened" msgstr "Trimmer Opened" msgid "printer-state-reasons.trimmer-over-temperature" msgstr "Trimmer Over Temperature" msgid "printer-state-reasons.trimmer-power-saver" msgstr "Trimmer Power Saver" msgid "printer-state-reasons.trimmer-recoverable-failure" msgstr "Trimmer Recoverable Failure" msgid "printer-state-reasons.trimmer-recoverable-storage" msgstr "Trimmer Recoverable Storage" msgid "printer-state-reasons.trimmer-removed" msgstr "Trimmer Removed" msgid "printer-state-reasons.trimmer-resource-added" msgstr "Trimmer Resource Added" msgid "printer-state-reasons.trimmer-resource-removed" msgstr "Trimmer Resource Removed" msgid "printer-state-reasons.trimmer-thermistor-failure" msgstr "Trimmer Thermistor Failure" msgid "printer-state-reasons.trimmer-timing-failure" msgstr "Trimmer Timing Failure" msgid "printer-state-reasons.trimmer-turned-off" msgstr "Trimmer Turned Off" msgid "printer-state-reasons.trimmer-turned-on" msgstr "Trimmer Turned On" msgid "printer-state-reasons.trimmer-under-temperature" msgstr "Trimmer Under Temperature" msgid "printer-state-reasons.trimmer-unrecoverable-failure" msgstr "Trimmer Unrecoverable Failure" msgid "printer-state-reasons.trimmer-unrecoverable-storage-error" msgstr "Trimmer Unrecoverable Storage Error" msgid "printer-state-reasons.trimmer-warming-up" msgstr "Trimmer Warming Up" msgid "printer-state-reasons.unknown" msgstr "Unknown" msgid "printer-state-reasons.wrapper-added" msgstr "Wrapper Added" msgid "printer-state-reasons.wrapper-almost-empty" msgstr "Wrapper Almost Empty" msgid "printer-state-reasons.wrapper-almost-full" msgstr "Wrapper Almost Full" msgid "printer-state-reasons.wrapper-at-limit" msgstr "Wrapper At Limit" msgid "printer-state-reasons.wrapper-closed" msgstr "Wrapper Closed" msgid "printer-state-reasons.wrapper-configuration-change" msgstr "Wrapper Configuration Change" msgid "printer-state-reasons.wrapper-cover-closed" msgstr "Wrapper Cover Closed" msgid "printer-state-reasons.wrapper-cover-open" msgstr "Wrapper Cover Open" msgid "printer-state-reasons.wrapper-empty" msgstr "Wrapper Empty" msgid "printer-state-reasons.wrapper-full" msgstr "Wrapper Full" msgid "printer-state-reasons.wrapper-interlock-closed" msgstr "Wrapper Interlock Closed" msgid "printer-state-reasons.wrapper-interlock-open" msgstr "Wrapper Interlock Open" msgid "printer-state-reasons.wrapper-jam" msgstr "Wrapper Jam" msgid "printer-state-reasons.wrapper-life-almost-over" msgstr "Wrapper Life Almost Over" msgid "printer-state-reasons.wrapper-life-over" msgstr "Wrapper Life Over" msgid "printer-state-reasons.wrapper-memory-exhausted" msgstr "Wrapper Memory Exhausted" msgid "printer-state-reasons.wrapper-missing" msgstr "Wrapper Missing" msgid "printer-state-reasons.wrapper-motor-failure" msgstr "Wrapper Motor Failure" msgid "printer-state-reasons.wrapper-near-limit" msgstr "Wrapper Near Limit" msgid "printer-state-reasons.wrapper-offline" msgstr "Wrapper Offline" msgid "printer-state-reasons.wrapper-opened" msgstr "Wrapper Opened" msgid "printer-state-reasons.wrapper-over-temperature" msgstr "Wrapper Over Temperature" msgid "printer-state-reasons.wrapper-power-saver" msgstr "Wrapper Power Saver" msgid "printer-state-reasons.wrapper-recoverable-failure" msgstr "Wrapper Recoverable Failure" msgid "printer-state-reasons.wrapper-recoverable-storage" msgstr "Wrapper Recoverable Storage" msgid "printer-state-reasons.wrapper-removed" msgstr "Wrapper Removed" msgid "printer-state-reasons.wrapper-resource-added" msgstr "Wrapper Resource Added" msgid "printer-state-reasons.wrapper-resource-removed" msgstr "Wrapper Resource Removed" msgid "printer-state-reasons.wrapper-thermistor-failure" msgstr "Wrapper Thermistor Failure" msgid "printer-state-reasons.wrapper-timing-failure" msgstr "Wrapper Timing Failure" msgid "printer-state-reasons.wrapper-turned-off" msgstr "Wrapper Turned Off" msgid "printer-state-reasons.wrapper-turned-on" msgstr "Wrapper Turned On" msgid "printer-state-reasons.wrapper-under-temperature" msgstr "Wrapper Under Temperature" msgid "printer-state-reasons.wrapper-unrecoverable-failure" msgstr "Wrapper Unrecoverable Failure" msgid "printer-state-reasons.wrapper-unrecoverable-storage-error" msgstr "Wrapper Unrecoverable Storage Error" msgid "printer-state-reasons.wrapper-warming-up" msgstr "Wrapper Warming Up" msgid "printer-state.3" msgstr "Idle" msgid "printer-state.4" msgstr "Processing" msgid "printer-state.5" msgstr "Stopped" msgid "printer-up-time" msgstr "Printer Uptime" msgid "processing" msgstr "обработка" msgid "proof-print" msgstr "Proof Print" msgid "proof-print-copies" msgstr "Proof Print Copies" msgid "punching" msgstr "Punching" msgid "punching-locations" msgstr "Punching Locations" msgid "punching-offset" msgstr "Punching Offset" msgid "punching-reference-edge" msgstr "Punching Reference Edge" msgid "punching-reference-edge.bottom" msgstr "Bottom" msgid "punching-reference-edge.left" msgstr "Left" msgid "punching-reference-edge.right" msgstr "Right" msgid "punching-reference-edge.top" msgstr "Top" #, c-format msgid "request id is %s-%d (%d file(s))" msgstr "id запроÑа %s-%d (%d файл.)" msgid "request-id uses indefinite length" msgstr "Ð”Ð»Ñ request-id длина не определена" msgid "requested-attributes" msgstr "Requested Attributes" msgid "retry-interval" msgstr "Retry Interval" msgid "retry-time-out" msgstr "Retry Time Out" msgid "save-disposition" msgstr "Save Disposition" msgid "save-disposition.none" msgstr "None" msgid "save-disposition.print-save" msgstr "Print Save" msgid "save-disposition.save-only" msgstr "Save Only" msgid "save-document-format" msgstr "Save Document Format" msgid "save-info" msgstr "Save Info" msgid "save-location" msgstr "Save Location" msgid "save-name" msgstr "Save Name" msgid "scheduler is not running" msgstr "планировщик не запущен" msgid "scheduler is running" msgstr "планировщик запущен" msgid "separator-sheets" msgstr "Separator Sheets" msgid "separator-sheets-type" msgstr "Separator Sheets Type" msgid "separator-sheets-type.both-sheets" msgstr "Both Sheets" msgid "separator-sheets-type.end-sheet" msgstr "End Sheet" msgid "separator-sheets-type.none" msgstr "None" msgid "separator-sheets-type.slip-sheets" msgstr "Slip Sheets" msgid "separator-sheets-type.start-sheet" msgstr "Start Sheet" msgid "sheet-collate" msgstr "Collate Copies" msgid "sheet-collate.collated" msgstr "Yes" msgid "sheet-collate.uncollated" msgstr "No" msgid "sides" msgstr "2-Sided Printing" msgid "sides.one-sided" msgstr "Off" msgid "sides.two-sided-long-edge" msgstr "On (Portrait)" msgid "sides.two-sided-short-edge" msgstr "On (Landscape)" #, c-format msgid "stat of %s failed: %s" msgstr "не удалоÑÑŒ уÑтановить %s: %s" msgid "status\t\tShow status of daemon and queue." msgstr "ÑтатуÑ\t\tпоказать ÑÑ‚Ð°Ñ‚ÑƒÑ Ð´ÐµÐ¼Ð¾Ð½Ð° и очереди" msgid "status-message" msgstr "Status Message" msgid "stitching" msgstr "Staple" msgid "stitching-angle" msgstr "Stitching Angle" msgid "stitching-locations" msgstr "Stitching Locations" msgid "stitching-method" msgstr "Stitching Method" msgid "stitching-method.auto" msgstr "Automatic" msgid "stitching-method.crimp" msgstr "Crimp" msgid "stitching-method.wire" msgstr "Wire" msgid "stitching-offset" msgstr "Stitching Offset" msgid "stitching-reference-edge" msgstr "Stitching Reference Edge" msgid "stitching-reference-edge.bottom" msgstr "Bottom" msgid "stitching-reference-edge.left" msgstr "Left" msgid "stitching-reference-edge.right" msgstr "Right" msgid "stitching-reference-edge.top" msgstr "Top" msgid "stopped" msgstr "оÑтановлен" msgid "subject" msgstr "Subject" #, c-format msgid "system default destination: %s" msgstr "назначение ÑиÑтемы по умолчанию: %s" #, c-format msgid "system default destination: %s/%s" msgstr "назначение ÑиÑтемы по умолчанию: %s/%s" msgid "t33-subaddress" msgstr "T33 Subaddress" msgid "to-name" msgstr "To Name" msgid "transmission-status" msgstr "Transmission Status" msgid "transmission-status.3" msgstr "Pending" msgid "transmission-status.4" msgstr "Pending Retry" msgid "transmission-status.5" msgstr "Processing" msgid "transmission-status.7" msgstr "Canceled" msgid "transmission-status.8" msgstr "Aborted" msgid "transmission-status.9" msgstr "Completed" msgid "trimming" msgstr "Cut" msgid "trimming-offset" msgstr "Cut Position" msgid "trimming-reference-edge" msgstr "Trimming Reference Edge" msgid "trimming-reference-edge.bottom" msgstr "Bottom" msgid "trimming-reference-edge.left" msgstr "Left" msgid "trimming-reference-edge.right" msgstr "Right" msgid "trimming-reference-edge.top" msgstr "Top" msgid "trimming-type" msgstr "Trimming Type" msgid "trimming-type.draw-line" msgstr "Draw Line" msgid "trimming-type.full" msgstr "Full" msgid "trimming-type.partial" msgstr "Partial" msgid "trimming-type.perforate" msgstr "Perforate" msgid "trimming-type.score" msgstr "Score" msgid "trimming-type.tab" msgstr "Tab" msgid "trimming-when" msgstr "Trimming When" msgid "trimming-when.after-documents" msgstr "After Documents" msgid "trimming-when.after-job" msgstr "After Job" msgid "trimming-when.after-sets" msgstr "After Sets" msgid "trimming-when.after-sheets" msgstr "After Sheets" msgid "unknown" msgstr "неизвеÑтный" msgid "untitled" msgstr "новый" msgid "variable-bindings uses indefinite length" msgstr "Ð”Ð»Ñ variable-bindings длина не уÑтановлена" msgid "x-accuracy" msgstr "X Accuracy" msgid "x-dimension" msgstr "X Dimension" msgid "x-offset" msgstr "X Offset" msgid "x-origin" msgstr "X Origin" msgid "y-accuracy" msgstr "Y Accuracy" msgid "y-dimension" msgstr "Y Dimension" msgid "y-offset" msgstr "Y Offset" msgid "y-origin" msgstr "Y Origin" msgid "z-accuracy" msgstr "Z Accuracy" msgid "z-dimension" msgstr "Z Dimension" msgid "z-offset" msgstr "Z Offset" #~ msgid "\tInterface: %s/interfaces/%s" #~ msgstr "\tИнтерфейÑ: %s/интерфейÑÑ‹/%s" #~ msgid " %s Missing \"%s\" translation string for option %s" #~ msgstr "\t%s Перевод \"%s\" отÑутÑтвует Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° %s" #~ msgid "" #~ " Missing %%EndComments comment.\n" #~ " REF: Page 41, %%EndComments" #~ msgstr "" #~ " Комментарий %%EndComments отÑутÑтвует.\n" #~ " REF: Стр. 41, %%EndComments" #~ msgid " --lf End lines with LF (UNIX/Linux/OS X)." #~ msgstr "" #~ " --lf Строки заканчиваютÑÑ Ð½Ð° LF (UNIX/Linux/Mac OS " #~ "X)." #~ msgid " -E Test with HTTP Upgrade to TLS." #~ msgstr " -E ПроверÑть что HTTP иÑпользует TLS." #~ msgid " -S Test with SSL encryption." #~ msgstr " -S ПроверÑть шифрование SSL." #~ msgid " -a Browse for all services." #~ msgstr " -a Обзор вÑех ÑервиÑов." #~ msgid " -d domain Browse/resolve in specified domain." #~ msgstr " -d domain ПроÑмотр в заданном домене." #~ msgid " -p program Run specified program for each service." #~ msgstr " -p program ЗапуÑтить указанную программу." #~ msgid " -t type Browse/resolve with specified type." #~ msgstr " -t type ПроÑмотр/определение по указанному типу." #~ msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)." #~ msgstr "" #~ "\"%s\": Ðеправильное значение URI \"%s\" - %s (RFC 2911 раздел 4.1.5)." #~ msgid "" #~ "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)." #~ msgstr "" #~ "\"%s\": Ðеправильное значение URI \"%s\" - ошибка длины %d (RFC 2911 " #~ "раздел 4.1.5)." #~ msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": Ðеправильный атрибут имени - ошибка длины %d (RFC 2911 раздел " #~ "4.1.3)." #~ msgid "" #~ "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": Ðеправильный атрибут имени - недопуÑтимый Ñимвол (RFC 2911 раздел " #~ "4.1.3)." #~ msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)." #~ msgstr "\"%s\": Ðеправильное двоичное значение %d (RFC 2911 раздел 4.1.11)." #~ msgid "" #~ "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.7)." #~ msgstr "" #~ "\"%s\": Ðеправильное Ñимвольное значение \"%s\" - недопуÑтимые Ñимволы " #~ "(RFC 2911 раздел 4.1.7)." #~ msgid "" #~ "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)." #~ msgstr "" #~ "\"%s\": Ðеправильное Ñимвольное значение \"%s\" - ошибка длины %d (RFC " #~ "2911 раздел 4.1.7)." #~ msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Ошибка в dateTime UTC чаÑов %u (RFC 2911 раздел 4.1.14)." #~ msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Ошибка в dateTime UTC минут %u (RFC 2911 раздел 4.1.14)." #~ msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Ошибка в dateTime UTC sign '%c' (RFC 2911 раздел 4.1.14)." #~ msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Ошибка в dateTime дни %u (RFC 2911 раздел 4.1.14)." #~ msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Ошибка в dateTime миллиÑекунды %u (RFC 2911 раздел 4.1.14)." #~ msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Ошибка в dateTime чаÑÑ‹ %u (RFC 2911 раздел 4.1.14)." #~ msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Ошибка в dateTime минуты %u (RFC 2911 раздел 4.1.14)." #~ msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Ошибка в dateTime меÑÑц %u (RFC 2911 раздел 4.1.14)." #~ msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)." #~ msgstr "\"%s\": Ошибка в dateTime Ñекунды %u (RFC 2911 раздел 4.1.14)." #~ msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)." #~ msgstr "" #~ "\"%s\": Ошибка в значении %d - за пределами диапазона (RFC 2911 раздел " #~ "4.1.4)." #~ msgid "" #~ "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)." #~ msgstr "" #~ "\"%s\": Ошибка в значении \"%s\" - Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° %d (RFC 2911 раздел " #~ "4.1.3)." #~ msgid "" #~ "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section " #~ "4.1.3)." #~ msgstr "" #~ "\"%s\": Ошибка в значении \"%s\" - недопуÑтимый Ñимвол (RFC 2911 раздел " #~ "4.1.3)." #~ msgid "" #~ "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.9)." #~ msgstr "" #~ "\"%s\": Ошибка mimeMediaType значение \"%s\" - недопуÑтимые Ñимволы (RFC " #~ "2911 раздел 4.1.9)." #~ msgid "" #~ "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section " #~ "4.1.9)." #~ msgstr "" #~ "\"%s\": Ошибка mimeMediaType значение \"%s\" - Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° %d (RFC " #~ "2911 раздел 4.1.9)." #~ msgid "" #~ "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section " #~ "4.1.2)." #~ msgstr "" #~ "\"%s\": Ðеправильное Ð¸Ð¼Ñ \"%s\" - ошибка в UTF-8 (RFC 2911 раздел 4.1.2)." #~ msgid "" #~ "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)." #~ msgstr "" #~ "\"%s\": Ðеправильное Ð¸Ð¼Ñ \"%s\" - Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° %d (RFC 2911 раздел " #~ "4.1.2)." #~ msgid "" #~ "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 " #~ "section 4.1.8)." #~ msgstr "" #~ "\"%s\": Ошибка naturalLanguage значение \"%s\" - недопуÑтимые Ñимволы " #~ "(RFC 2911 раздел 4.1.8)." #~ msgid "" #~ "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 " #~ "section 4.1.8)." #~ msgstr "" #~ "\"%s\": Ошибка naturalLanguage значение \"%s\" - Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° %d " #~ "(RFC 2911 раздел 4.1.8)." #~ msgid "" #~ "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)." #~ msgstr "" #~ "\"%s\": Ошибка Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ octetString - Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° %d (RFC 2911 " #~ "раздел 4.1.10)." #~ msgid "" #~ "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC " #~ "2911 section 4.1.13)." #~ msgstr "" #~ "\"%s\": Ошибка rangeOfInteger значение %d-%d - первое больше чем второе " #~ "(RFC 2911 раздел 4.1.13)." #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section " #~ "4.1.15)." #~ msgstr "" #~ "\"%s\": Ðеправильное значение Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ %dx%d%s - ошибка в значении " #~ "units (RFC 2911 раздел 4.1.15)." #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " #~ "positive (RFC 2911 section 4.1.15)." #~ msgstr "" #~ "\"%s\": Ðеправильное значение Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ %dx%d%s - значение cross feed " #~ "должно быть положительным (RFC 2911 раздел 4.1.15)." #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive " #~ "(RFC 2911 section 4.1.15)." #~ msgstr "" #~ "\"%s\": Ðеправильное значение Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ %dx%d%s - значение feed должно " #~ "быть положительным (RFC 2911 раздел 4.1.15)." #~ msgid "" #~ "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section " #~ "4.1.1)." #~ msgstr "" #~ "\"%s\": Ðеправильное текÑтовое значение \"%s\" - ошибка в UTF-8 (RFC 2911 " #~ "раздел 4.1.1)." #~ msgid "" #~ "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)." #~ msgstr "" #~ "\"%s\": Ðеправильное текÑтовое значение \"%s\" - ошибка длины %d (RFC " #~ "2911 раздел 4.1.1)." #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.6)." #~ msgstr "" #~ "\"%s\": Ошибка uriScheme значение \"%s\" - недопуÑтимые Ñимволы (RFC 2911 " #~ "раздел 4.1.6)." #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section " #~ "4.1.6)." #~ msgstr "" #~ "\"%s\": Ошибка uriScheme значение \"%s\" - ошибка длины %d (RFC 2911 " #~ "раздел 4.1.6)." #~ msgid "%g x %g" #~ msgstr "%g x %g" #~ msgid "File Folder " #~ msgstr "Каталог файла " #~ msgid "Postcard Double " #~ msgstr "Открытка двойнаÑ" #~ msgid "" #~ "The '%s' Job Description attribute cannot be supplied in a job creation " #~ "request." #~ msgstr "" #~ "Ðтрибут '%s' Job Description не может быть подÑтавлен при ÑозданиизаданиÑ" #~ msgid "Unable to copy interface script - %s" #~ msgstr "Ðе удаетÑÑ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñкрипт интерфейÑа - %s" #~ msgid "" #~ "Usage: ippdiscover [options] -a\n" #~ " ippdiscover [options] \"service name\"\n" #~ "\n" #~ "Options:" #~ msgstr "" #~ "ИÑпользование:\n" #~ " ippdiscover [options] -a\n" #~ " ippdiscover [options] \"service name\"\n" #~ "\n" #~ "Параметры:" #~ msgid "compression" #~ msgstr "Compression" #~ msgid "compression-accepted" #~ msgstr "Compression Accepted" #~ msgid "compression.compress" #~ msgstr "Compress" #~ msgid "compression.deflate" #~ msgstr "Deflate" #~ msgid "compression.gzip" #~ msgstr "Gzip" #~ msgid "compression.none" #~ msgstr "None" #~ msgid "destination-accesses" #~ msgstr "Destination Accesses" #~ msgid "destination-statuses" #~ msgstr "Destination Statuses" #~ msgid "destination-uris" #~ msgstr "Destination Uris" #~ msgid "document-access" #~ msgstr "Document Access" #~ msgid "document-data-get-interval" #~ msgstr "Document Data Get Interval" #~ msgid "document-data-wait" #~ msgstr "Document Data Wait" #~ msgid "document-format-accepted" #~ msgstr "Document Format Accepted" #~ msgid "document-message" #~ msgstr "Document Message" #~ msgid "document-metadata" #~ msgstr "Document Metadata" #~ msgid "document-name" #~ msgstr "Document Name" #~ msgid "document-number" #~ msgstr "Document Number" #~ msgid "document-password" #~ msgstr "Document Password" #~ msgid "document-preprocessed" #~ msgstr "Document Preprocessed" #~ msgid "fetch-status-message" #~ msgstr "Fetch Status Message" #~ msgid "identify-actions" #~ msgstr "Identify Actions" #~ msgid "identify-actions.display" #~ msgstr "Display" #~ msgid "identify-actions.flash" #~ msgstr "Flash" #~ msgid "identify-actions.sound" #~ msgstr "Sound" #~ msgid "identify-actions.speak" #~ msgstr "Speak" #~ msgid "ipp-attribute-fidelity" #~ msgstr "Attribute Fidelity" #~ msgid "job-authorization-uri" #~ msgstr "Job Authorization URI" #~ msgid "job-destination-spooling-supported.automatic" #~ msgstr "Automatic" #~ msgid "job-destination-spooling-supported.spool" #~ msgstr "Spool" #~ msgid "job-destination-spooling-supported.stream" #~ msgstr "Stream" #~ msgid "job-impressions-col" #~ msgstr "Job Impressions" #~ msgid "job-impressions-estimated" #~ msgstr "Job Impressions Estimated" #~ msgid "job-media-sheets-col" #~ msgstr "Job Media Sheets" #~ msgid "job-pages-per-set" #~ msgstr "Job Pages Per Set" #~ msgid "job-password" #~ msgstr "Job Password" #~ msgid "job-password-repertoire-configured" #~ msgstr "Job Password Repertoire Configured" #~ msgid "job-password-repertoire-supported.iana_us-ascii_any" #~ msgstr "Iana Us Ascii Any" #~ msgid "job-password-repertoire-supported.iana_us-ascii_complex" #~ msgstr "Iana Us Ascii Complex" #~ msgid "job-password-repertoire-supported.iana_us-ascii_digits" #~ msgstr "Iana Us Ascii Digits" #~ msgid "job-password-repertoire-supported.iana_us-ascii_letters" #~ msgstr "Iana Us Ascii Letters" #~ msgid "job-password-repertoire-supported.iana_utf-8_any" #~ msgstr "Iana Utf 8 Any" #~ msgid "job-password-repertoire-supported.iana_utf-8_digits" #~ msgstr "Iana Utf 8 Digits" #~ msgid "job-password-repertoire-supported.iana_utf-8_letters" #~ msgstr "Iana Utf 8 Letters" #~ msgid "job-settable-attributes-supported.job-name" #~ msgstr "Job Name" #~ msgid "job-settable-attributes-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.arithmetic" #~ msgstr "Arithmetic" #~ msgid "jpeg-features-supported.cmyk" #~ msgstr "Cmyk" #~ msgid "jpeg-features-supported.deep" #~ msgstr "Deep" #~ msgid "jpeg-features-supported.hierarchical" #~ msgstr "Hierarchical" #~ msgid "jpeg-features-supported.icc" #~ msgstr "Icc" #~ msgid "jpeg-features-supported.lossless" #~ msgstr "Lossless" #~ msgid "jpeg-features-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.progressive" #~ msgstr "Progressive" #~ msgid "lpadmin: Expected PPD after \"-P\" option." #~ msgstr "lpadmin: ПоÑле параметра '-P' должен быть указан PPD" #~ msgid "lpadmin: Expected interface after \"-i\" option." #~ msgstr "lpadmin: ПоÑле параметра \"-i\" должен быть указан интерфейÑ." #~ msgid "lpinfo: Unknown argument \"%s\"." #~ msgstr "lpinfo: ÐеизвеÑтный аргумент \"%s\"." #~ msgid "lpinfo: Unknown option \"%c\"." #~ msgstr "lpinfo: ÐеизвеÑтный параметр \"%c\"." #~ msgid "lpinfo: Unknown option \"%s\"." #~ msgstr "lpinfo: ÐеизвеÑтный параметр \"%s\"." #~ msgid "lpmove: Unknown option \"%c\"." #~ msgstr "lpmove: ÐеизвеÑтный параметр \"%c\"." #~ msgid "material-type.pla-dissolvable" #~ msgstr "Pla Dissolvable" #~ msgid "media.om_large-photo_200x300mm" #~ msgstr "200 x 300mm" #~ msgid "notify-subscribed-event" #~ msgstr "Notify Event" #~ msgid "operations-supported.10" #~ msgstr "Get-Jobs" #~ msgid "operations-supported.11" #~ msgstr "Get-Printer-Attributes" #~ msgid "operations-supported.12" #~ msgstr "Hold-Job" #~ msgid "operations-supported.13" #~ msgstr "Release-Job" #~ msgid "operations-supported.14" #~ msgstr "Restart-Job" #~ msgid "operations-supported.16" #~ msgstr "Pause-Printer" #~ msgid "operations-supported.17" #~ msgstr "Resume-Printer" #~ msgid "operations-supported.18" #~ msgstr "Purge-Jobs" #~ msgid "operations-supported.19" #~ msgstr "Set-Printer-Attributes" #~ msgid "operations-supported.2" #~ msgstr "Print-Job" #~ msgid "operations-supported.20" #~ msgstr "Set-Job-Attributes" #~ msgid "operations-supported.21" #~ msgstr "Get-Printer-Supported-Values" #~ msgid "operations-supported.22" #~ msgstr "Create-Printer-Subscriptions" #~ msgid "operations-supported.23" #~ msgstr "Create-Job-Subscriptions" #~ msgid "operations-supported.24" #~ msgstr "Get-Subscription-Attributes" #~ msgid "operations-supported.25" #~ msgstr "Get-Subscriptions" #~ msgid "operations-supported.26" #~ msgstr "Renew-Subscription" #~ msgid "operations-supported.27" #~ msgstr "Cancel-Subscription" #~ msgid "operations-supported.28" #~ msgstr "Get-Notifications" #~ msgid "operations-supported.3" #~ msgstr "Print-URI" #~ msgid "operations-supported.34" #~ msgstr "Enable-Printer" #~ msgid "operations-supported.35" #~ msgstr "Disable-Printer" #~ msgid "operations-supported.36" #~ msgstr "Pause-Printer-After-Current-Job" #~ msgid "operations-supported.37" #~ msgstr "Hold-New-Jobs" #~ msgid "operations-supported.38" #~ msgstr "Release-Held-New-Jobs" #~ msgid "operations-supported.39" #~ msgstr "Deactivate-Printer" #~ msgid "operations-supported.4" #~ msgstr "Validate-Job" #~ msgid "operations-supported.40" #~ msgstr "Activate-Printer" #~ msgid "operations-supported.41" #~ msgstr "Restart-Printer" #~ msgid "operations-supported.42" #~ msgstr "Shutdown-Printer" #~ msgid "operations-supported.43" #~ msgstr "Startup-Printer" #~ msgid "operations-supported.44" #~ msgstr "Reprocess-Job" #~ msgid "operations-supported.45" #~ msgstr "Cancel-Current-Job" #~ msgid "operations-supported.46" #~ msgstr "Suspend-Current-Job" #~ msgid "operations-supported.47" #~ msgstr "Resume-Job" #~ msgid "operations-supported.48" #~ msgstr "Promote-Job" #~ msgid "operations-supported.49" #~ msgstr "Schedule-Job-After" #~ msgid "operations-supported.5" #~ msgstr "Create-Job" #~ msgid "operations-supported.51" #~ msgstr "Cancel-Document" #~ msgid "operations-supported.52" #~ msgstr "Get-Document-Attributes" #~ msgid "operations-supported.53" #~ msgstr "Get-Documents" #~ msgid "operations-supported.54" #~ msgstr "Delete-Document" #~ msgid "operations-supported.55" #~ msgstr "Set-Document-Attributes" #~ msgid "operations-supported.56" #~ msgstr "Cancel-Jobs" #~ msgid "operations-supported.57" #~ msgstr "Cancel-My-Jobs" #~ msgid "operations-supported.58" #~ msgstr "Resubmit-Job" #~ msgid "operations-supported.59" #~ msgstr "Close-Job" #~ msgid "operations-supported.6" #~ msgstr "Send-Document" #~ msgid "operations-supported.60" #~ msgstr "Identify-Printer" #~ msgid "operations-supported.61" #~ msgstr "Validate-Document" #~ msgid "operations-supported.62" #~ msgstr "Add-Document-Images" #~ msgid "operations-supported.63" #~ msgstr "Acknowledge-Document" #~ msgid "operations-supported.64" #~ msgstr "Acknowledge-Identify-Printer" #~ msgid "operations-supported.65" #~ msgstr "Acknowledge-Job" #~ msgid "operations-supported.66" #~ msgstr "Fetch-Document" #~ msgid "operations-supported.67" #~ msgstr "Fetch-Job" #~ msgid "operations-supported.68" #~ msgstr "Get-Output-Device-Attributes" #~ msgid "operations-supported.69" #~ msgstr "Update-Active-Jobs" #~ msgid "operations-supported.7" #~ msgstr "Send-URI" #~ msgid "operations-supported.70" #~ msgstr "Deregister-Output-Device" #~ msgid "operations-supported.71" #~ msgstr "Update-Document-Status" #~ msgid "operations-supported.72" #~ msgstr "Update-Job-Status" #~ msgid "operations-supported.73" #~ msgstr "Update-Output-Device-Attributes" #~ msgid "operations-supported.74" #~ msgstr "Get-Next-Document-Data" #~ msgid "operations-supported.8" #~ msgstr "Cancel-Job" #~ msgid "operations-supported.9" #~ msgstr "Get-Job-Attributes" #~ msgid "output-device" #~ msgstr "Output Device" #~ msgid "output-device-job-states" #~ msgstr "Output Device Job States" #~ msgid "output-device-uuid" #~ msgstr "Output Device Uuid" #~ msgid "pdf-features-supported.prc" #~ msgstr "Prc" #~ msgid "pdf-features-supported.u3d" #~ msgstr "U3d" #~ msgid "pdf-versions-supported.adobe-1.3" #~ msgstr "Adobe 1.3" #~ msgid "pdf-versions-supported.adobe-1.4" #~ msgstr "Adobe 1.4" #~ msgid "pdf-versions-supported.adobe-1.5" #~ msgstr "Adobe 1.5" #~ msgid "pdf-versions-supported.adobe-1.6" #~ msgstr "Adobe 1.6" #~ msgid "pdf-versions-supported.iso-15930-1_2001" #~ msgstr "ISO 15930-1:2001" #~ msgid "pdf-versions-supported.iso-15930-3_2002" #~ msgstr "ISO 15930-3:2002" #~ msgid "pdf-versions-supported.iso-15930-4_2003" #~ msgstr "ISO 15930-4:2003" #~ msgid "pdf-versions-supported.iso-15930-6_2003" #~ msgstr "ISO 15930-6:2003" #~ msgid "pdf-versions-supported.iso-15930-7_2010" #~ msgstr "ISO 15930-7:2010" #~ msgid "pdf-versions-supported.iso-15930-8_2010" #~ msgstr "ISO 15930-8:2010" #~ msgid "pdf-versions-supported.iso-16612-2_2010" #~ msgstr "ISO 16612-2:2010" #~ msgid "pdf-versions-supported.iso-19005-1_2005" #~ msgstr "ISO 19005-1:2005" #~ msgid "pdf-versions-supported.iso-19005-2_2011" #~ msgstr "ISO 19005-2:2011" #~ msgid "pdf-versions-supported.iso-19005-3_2012" #~ msgstr "ISO 19005-3:2012" #~ msgid "pdf-versions-supported.iso-32000-1_2008" #~ msgstr "ISO 32000-1:2008" #~ msgid "pdf-versions-supported.none" #~ msgstr "None" #~ msgid "pdf-versions-supported.pwg-5102.3" #~ msgstr "PWG 5102.3" #~ msgid "preferred-attributes" #~ msgstr "Preferred Attributes" #~ msgid "printer-mandatory-job-attributes" #~ msgstr "Printer Mandatory Job Attributes" #~ msgid "profile-uri-actual" #~ msgstr "Actual Profile URI" #~ msgid "requested-attributes.all" #~ msgstr "All" #~ msgid "requested-attributes.document-description" #~ msgstr "Document Description" #~ msgid "requested-attributes.document-template" #~ msgstr "Document Template" #~ msgid "requested-attributes.job-actuals" #~ msgstr "Job Actuals" #~ msgid "requested-attributes.job-description" #~ msgstr "Job Description" #~ msgid "requested-attributes.job-template" #~ msgstr "Job Template" #~ msgid "requested-attributes.printer-description" #~ msgstr "Printer Description" #~ msgid "requested-attributes.subscription-description" #~ msgstr "Subscription Description" #~ msgid "requested-attributes.subscription-template" #~ msgstr "Subscription Template" #~ msgid "requesting-user-name" #~ msgstr "Requesting User Name" #~ msgid "requesting-user-uri" #~ msgstr "Requesting User URI" #~ msgid "x-image-position" #~ msgstr "X Image Position" #~ msgid "x-image-position.center" #~ msgstr "Center" #~ msgid "x-image-position.left" #~ msgstr "Left" #~ msgid "x-image-position.none" #~ msgstr "None" #~ msgid "x-image-position.right" #~ msgstr "Right" #~ msgid "x-image-shift" #~ msgstr "X Image Shift" #~ msgid "x-side1-image-shift" #~ msgstr "X Front Side Image Shift" #~ msgid "x-side2-image-shift" #~ msgstr "X Back Side Image Shift" #~ msgid "y-image-position" #~ msgstr "Y Image Position" #~ msgid "y-image-position.bottom" #~ msgstr "Bottom" #~ msgid "y-image-position.center" #~ msgstr "Center" #~ msgid "y-image-position.none" #~ msgstr "None" #~ msgid "y-image-position.top" #~ msgstr "Top" #~ msgid "y-image-shift" #~ msgstr "Y Image Shift" #~ msgid "y-side1-image-shift" #~ msgstr "Y Front Side Image Shift" #~ msgid "y-side2-image-shift" #~ msgstr "Y Back Side Image Shift" cups-2.2.7/locale/cups_zh_CN.po000664 000765 000024 00001177440 13255074424 017023 0ustar00msweetstaff000000 000000 # # "$Id$" # # Message catalog template for CUPS. # # Copyright 2007-2014 by Apple Inc. # Copyright 2005-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # # Notes for Translators: # # The "checkpo" program located in the "locale" source directory can be used # to verify that your translations do not introduce formatting errors or other # problems. Run with: # # cd locale # ./checkpo cups_LL.po # # where "LL" is your locale. # # Jeff Bai , 2016. msgid "" msgstr "" "Project-Id-Version: CUPS 1.6\n" "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n" "POT-Creation-Date: 2018-03-19 18:36-0400\n" "PO-Revision-Date: 2017-06-11 12:38+0800\n" "Last-Translator: Mingcong Bai \n" "Language-Team: \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.2\n" "Plural-Forms: nplurals=1; plural=0;\n" msgid "\t\t(all)" msgstr "\t\t(全部)" msgid "\t\t(none)" msgstr "\t\t(无)" #, c-format msgid "\t%d entries" msgstr "\t%d 个æ¡ç›®" #, c-format msgid "\t%s" msgstr "\t%s" msgid "\tAfter fault: continue" msgstr "\tå‘生错误时:继续" #, c-format msgid "\tAlerts: %s" msgstr "\t警告:%s" msgid "\tBanner required" msgstr "\téœ€è¦æ¨ªå¹…" msgid "\tCharset sets:" msgstr "\t字符集:" msgid "\tConnection: direct" msgstr "\t连接:直接" msgid "\tConnection: remote" msgstr "\t连接:远程" msgid "\tContent types: any" msgstr "\t内容类型:任æ„" msgid "\tDefault page size:" msgstr "\t默认页é¢å°ºå¯¸ï¼š" msgid "\tDefault pitch:" msgstr "\t默认字间è·ï¼š" msgid "\tDefault port settings:" msgstr "\t默认端å£è®¾ç½®ï¼š" #, c-format msgid "\tDescription: %s" msgstr "\tæè¿°ï¼š%s" msgid "\tForm mounted:" msgstr "\t已挂载表å•:" msgid "\tForms allowed:" msgstr "\tå·²å…许表å•:" #, c-format msgid "\tInterface: %s.ppd" msgstr "\t界é¢ï¼š%s.ppd" #, c-format msgid "\tInterface: %s/ppd/%s.ppd" msgstr "\t界é¢ï¼š%s/ppd/%s.ppd" #, c-format msgid "\tLocation: %s" msgstr "\tä½ç½®ï¼š%s" msgid "\tOn fault: no alert" msgstr "\tå‘生错误时:无警告" msgid "\tPrinter types: unknown" msgstr "\tæ‰“å°æœºç±»åž‹ï¼šæœªçŸ¥" #, c-format msgid "\tStatus: %s" msgstr "\t状æ€ï¼š%s" msgid "\tUsers allowed:" msgstr "\tå…许的用户:" msgid "\tUsers denied:" msgstr "\tæ‹’ç»çš„用户:" msgid "\tdaemon present" msgstr "\tå®ˆæŠ¤ç¨‹åºæ­£åœ¨è¿è¡Œ" msgid "\tno entries" msgstr "\tæ— æ¡ç›®" #, c-format msgid "\tprinter is on device '%s' speed -1" msgstr "\tæ‰“å°æœºå­˜åœ¨äºŽè®¾å¤‡â€œ%sâ€ï¼Œé€Ÿåº¦ä¸º -1" msgid "\tprinting is disabled" msgstr "\tå·²ç¦ç”¨æ‰“å°" msgid "\tprinting is enabled" msgstr "\tå·²å¯ç”¨æ‰“å°" #, c-format msgid "\tqueued for %s" msgstr "\t已为 %s 列队" msgid "\tqueuing is disabled" msgstr "\tå·²ç¦ç”¨é˜Ÿåˆ—" msgid "\tqueuing is enabled" msgstr "\tå·²å¯ç”¨é˜Ÿåˆ—" msgid "\treason unknown" msgstr "\t未知原因" msgid "" "\n" " DETAILED CONFORMANCE TEST RESULTS" msgstr "" "\n" " 详细兼容性测试结果" msgid " Ignore specific warnings." msgstr " 忽略特定类型的警告。" msgid " Issue warnings instead of errors." msgstr " å‘å‡ºè­¦å‘Šè€Œä¸æ˜¯é”™è¯¯ã€‚" msgid " REF: Page 15, section 3.1." msgstr " 引用:第 15 页,章节 3.1。" msgid " REF: Page 15, section 3.2." msgstr " 引用:第 15 页,章节 3.2。" msgid " REF: Page 19, section 3.3." msgstr " 引用:第 19 页,章节 3.3。" msgid " REF: Page 20, section 3.4." msgstr " 引用:第 20 页,章节 3.4。" msgid " REF: Page 27, section 3.5." msgstr " 引用:第 27 页,章节 3.5。" msgid " REF: Page 42, section 5.2." msgstr " 引用:第 42 页,章节 5.2。" msgid " REF: Pages 16-17, section 3.2." msgstr " 引用:第 16-17 页,章节 3.2。" msgid " REF: Pages 42-45, section 5.2." msgstr " 引用:第 42-45 页,章节 5.2。" msgid " REF: Pages 45-46, section 5.2." msgstr " 引用:第 45-46 页,章节 5.2。" msgid " REF: Pages 48-49, section 5.2." msgstr " 引用:第 48-49 页,章节 5.2。" msgid " REF: Pages 52-54, section 5.2." msgstr " 引用:第 52-54 页,章节 5.2。" #, c-format msgid " %-39.39s %.0f bytes" msgstr " %-39.39s %.0f 字节" #, c-format msgid " PASS Default%s" msgstr " 通过 Default%s" msgid " PASS DefaultImageableArea" msgstr " 通过 DefaultImageableArea" msgid " PASS DefaultPaperDimension" msgstr " 通过 DefaultPaperDimension" msgid " PASS FileVersion" msgstr " 通过 FileVersion" msgid " PASS FormatVersion" msgstr " 通过 FormatVersion" msgid " PASS LanguageEncoding" msgstr " 通过 LanguageEncoding" msgid " PASS LanguageVersion" msgstr " 通过 LanguageVersion" msgid " PASS Manufacturer" msgstr " 通过 Manufacturer" msgid " PASS ModelName" msgstr " 通过 ModelName" msgid " PASS NickName" msgstr " 通过 NickName" msgid " PASS PCFileName" msgstr " 通过 PCFileName" msgid " PASS PSVersion" msgstr " 通过 PSVersion" msgid " PASS PageRegion" msgstr " 通过 PageRegion" msgid " PASS PageSize" msgstr " 通过 PageSize" msgid " PASS Product" msgstr " 通过 Product" msgid " PASS ShortNickName" msgstr " 通过 ShortNickName" #, c-format msgid " WARN %s has no corresponding options." msgstr " 警告 %s 没有å“应选项。" #, c-format msgid "" " WARN %s shares a common prefix with %s\n" " REF: Page 15, section 3.2." msgstr "" " 警告 %s å’Œ %s 共享å‰ç¼€\n" " 引用:第 15 页,章节 3.2。" #, c-format msgid "" " WARN Duplex option keyword %s may not work as expected and should " "be named Duplex.\n" " REF: Page 122, section 5.17" msgstr "" " 警告 Duplex é€‰é¡¹å…³é”®è¯ %s å¯èƒ½ä¸èƒ½æ­£å¸¸å·¥ä½œï¼Œä¸”应命å为 Duplex。\n" " 引用:第 122 页,章节 5.17" msgid " WARN File contains a mix of CR, LF, and CR LF line endings." msgstr " 警告 文件中存在 CR,LF å’Œ CR LF 行末混用。" msgid "" " WARN LanguageEncoding required by PPD 4.3 spec.\n" " REF: Pages 56-57, section 5.3." msgstr "" " 警告 PPD 4.3 è§„èŒƒéœ€è¦ LanguageEncoding。\n" " 引用:第 56-57 页,章节 5.3。" #, c-format msgid " WARN Line %d only contains whitespace." msgstr " 警告 行 %d 仅包å«ç©ºç™½ã€‚" msgid "" " WARN Manufacturer required by PPD 4.3 spec.\n" " REF: Pages 58-59, section 5.3." msgstr "" " 警告 PPD 4.3 è§„èŒƒéœ€è¦ Manufacturer。\n" " 引用:第 58-59 页,章节 5.3。" msgid "" " WARN Non-Windows PPD files should use lines ending with only LF, " "not CR LF." msgstr " 警告 éž Windows PPD 文件应该使用 LF è¡Œæœ«è€Œä¸æ˜¯ CR LF。" #, c-format msgid "" " WARN Obsolete PPD version %.1f.\n" " REF: Page 42, section 5.2." msgstr "" " 警告 过时的 PPD 版本 %.1f。\n" " 引用:第 42 页,章节 5.2。" msgid "" " WARN PCFileName longer than 8.3 in violation of PPD spec.\n" " REF: Pages 61-62, section 5.3." msgstr "" " 警告 PCFileName 超过 8.3 长度,ä¸ç¬¦åˆ PPD 规范。\n" " REF:第 61-62 页,章节 5.3。" msgid "" " WARN PCFileName should contain a unique filename.\n" " REF: Pages 61-62, section 5.3." msgstr "" " 警告 PCFileName 应包å«ç‰¹æ®Šæ–‡ä»¶å。\n" " 引用:第 61-62 页,章节 5.3。" msgid "" " WARN Protocols contains PJL but JCL attributes are not set.\n" " REF: Pages 78-79, section 5.7." msgstr "" " 警告 åè®®åŒ…å« PJL 但未设置 JCL 属性。\n" " 引用:第 78-79 页,章节 5.7。" msgid "" " WARN Protocols contains both PJL and BCP; expected TBCP.\n" " REF: Pages 78-79, section 5.7." msgstr "" " 警告 åè®®åŒ…å« PJL åŠ BCP;预期 TBCP。\n" " 引用:第 78-79 页,章节 5.7。" msgid "" " WARN ShortNickName required by PPD 4.3 spec.\n" " REF: Pages 64-65, section 5.3." msgstr "" " 警告 PPD 4.3 è§„èŒƒéœ€è¦ ShortNickName。\n" " 引用:第 64-65 页,章节 5.3。" msgid " cupsaddsmb [options] -a" msgstr " cupsaddsmb [选项] -a" msgid " cupstestdsc [options] -" msgstr " cupstestdsc [选项] -" msgid " program | cupstestppd [options] -" msgstr " ç¨‹åº | cupstestppd [选项] -" #, c-format msgid "" " %s \"%s %s\" conflicts with \"%s %s\"\n" " (constraint=\"%s %s %s %s\")." msgstr "" " %s “%s %sâ€ä¸Žâ€œ%s %sâ€å†²çª\n" " (é™åˆ¶=“%s %s %s %sâ€ï¼‰ã€‚" #, c-format msgid " %s %s %s does not exist." msgstr " %s %s %s ä¸å­˜åœ¨ã€‚" #, c-format msgid " %s %s file \"%s\" has the wrong capitalization." msgstr " %s %s 文件“%sâ€åŒ…å«é”™è¯¯å¤§å°å†™ã€‚" #, c-format msgid "" " %s Bad %s choice %s.\n" " REF: Page 122, section 5.17" msgstr "" " %s 无效的 %s 选项 %s。\n" " 引用:第 122 页,章节 5.17" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s." msgstr " %1$s 无效的选项 %3$s çš„ UTF-8“%2$sâ€å­—串翻译,选择 %4$s。" #, c-format msgid " %s Bad UTF-8 \"%s\" translation string for option %s." msgstr " %1$s 无效的选项 %3$s çš„ UTF-8“%2$sâ€å­—串翻译。" #, c-format msgid " %s Bad cupsFilter value \"%s\"." msgstr " %s 无效的 cupsFilter 值“%sâ€ã€‚" #, c-format msgid " %s Bad cupsFilter2 value \"%s\"." msgstr " %s 无效的 cupsFilter2 值“%sâ€ã€‚" #, c-format msgid " %s Bad cupsICCProfile %s." msgstr " %s 无效 cupsICCProfile %s。" #, c-format msgid " %s Bad cupsPreFilter value \"%s\"." msgstr " %s 无效的 cupsPreFilter 值“%sâ€ã€‚" #, c-format msgid " %s Bad cupsUIConstraints %s: \"%s\"" msgstr " %s 无效 cupsUIConstraints %s:“%sâ€" #, c-format msgid " %s Bad language \"%s\"." msgstr " %s 无效语言“%sâ€ã€‚" #, c-format msgid " %s Bad permissions on %s file \"%s\"." msgstr " %s %s 文件“%sâ€å­˜åœ¨æ— æ•ˆæƒé™ã€‚" #, c-format msgid " %s Bad spelling of %s - should be %s." msgstr " %s %s 拼写错误 — 应为 %s。" #, c-format msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID." msgstr " %s æ— æ³•åŒæ—¶æä¾› APScanAppPath åŠ APScanAppBundleID。" #, c-format msgid " %s Default choices conflicting." msgstr " %s 默认选择相互冲çªã€‚" #, c-format msgid " %s Empty cupsUIConstraints %s" msgstr " %s 空白 cupsUIConstraints %s" #, c-format msgid " %s Missing \"%s\" translation string for option %s, choice %s." msgstr " %1$s 选项 %3$s 缺少“%2$sâ€ç¿»è¯‘字串,选择 %4$s。" #, c-format msgid " %s Missing \"%s\" translation string for option %s." msgstr " %1$s 选项 %3$s 缺少“%2$sâ€ç¿»è¯‘字串。" #, c-format msgid " %s Missing %s file \"%s\"." msgstr " %s 缺少 %s 文件“%sâ€ã€‚" #, c-format msgid "" " %s Missing REQUIRED PageRegion option.\n" " REF: Page 100, section 5.14." msgstr "" " %s 缺少必须的 PageRegion 选项。\n" " 引用:第 100 页,章节 5.14。" #, c-format msgid "" " %s Missing REQUIRED PageSize option.\n" " REF: Page 99, section 5.14." msgstr "" " %s 缺少必须的 PageSize 选项。\n" " 引用:第 99 页,章节 5.14。" #, c-format msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." msgstr "" " %1$s UIConstraints “*%4$s %5$s *%6$s %7$sâ€ä¸­ç¼ºå°‘选择 %2$s %3$s。" #, c-format msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" msgstr " %1$s cupsUIConstraints %4$s:“%5$s†中缺少选择 *%2$s %3$s" #, c-format msgid " %s Missing cupsUIResolver %s" msgstr " %s 缺少 cupsUIResolver %s" #, c-format msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"." msgstr " %1$s UIConstraints “*%3$s %4$s *%5$s %6$s†中缺少选项 %2$s。" #, c-format msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\"" msgstr " %1$s cupsUIConstraints %3$s:“%4$s†中缺少选项 %2$s" #, c-format msgid " %s No base translation \"%s\" is included in file." msgstr " %s 文件中无基础翻译“%sâ€ã€‚" #, c-format msgid "" " %s REQUIRED %s does not define choice None.\n" " REF: Page 122, section 5.17" msgstr "" " %s 必须的 %s 未定义空选项。\n" " 引用:第 122 页,章节 5.17" #, c-format msgid " %s Size \"%s\" defined for %s but not for %s." msgstr " %1$s 已为 %3$s 定义尺寸“%2$sâ€ï¼Œä½†æœªä¸º %4$s 定义。" #, c-format msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)." msgstr " %s 大å°â€œ%sâ€åŒ…嫿œªé¢„期尺寸 (%gx%g)。" #, c-format msgid " %s Size \"%s\" should be \"%s\"." msgstr " %s 大å°â€œ%sâ€åº”为“%sâ€ã€‚" #, c-format msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"." msgstr " %s 大å°â€œ%sâ€åº”为 Adobe 标准å称“%sâ€ã€‚" #, c-format msgid " %s cupsICCProfile %s hash value collides with %s." msgstr " %s cupsICCProfile %s 包å«ä¸Ž %s 冲çªçš„哈希值。" #, c-format msgid " %s cupsUIResolver %s causes a loop." msgstr " %s cupsUIResolver %s 导致循环。" #, c-format msgid "" " %s cupsUIResolver %s does not list at least two different options." msgstr " %s cupsUIResolver %s 未列出至少两个ä¸åŒçš„选项。" #, c-format msgid "" " **FAIL** %s must be 1284DeviceID\n" " REF: Page 72, section 5.5" msgstr "" " **失败** %s 必须为 1284DeviceID\n" " 引用:第 72 页,章节 5.5" #, c-format msgid "" " **FAIL** Bad Default%s %s\n" " REF: Page 40, section 4.5." msgstr "" " **失败** 无效的 Default%s 值 %s\n" " 引用:第 40 页,章节 4.5。" #, c-format msgid "" " **FAIL** Bad DefaultImageableArea %s\n" " REF: Page 102, section 5.15." msgstr "" " **失败** 无效的 DefaultImageableArea 值 %s\n" " 引用:第 102 页,章节 5.15。" #, c-format msgid "" " **FAIL** Bad DefaultPaperDimension %s\n" " REF: Page 103, section 5.15." msgstr "" " **失败** 无效的 DefaultPaperDimension 值 %s\n" " 引用:第 103 页,章节 5.15。" #, c-format msgid "" " **FAIL** Bad FileVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" " **失败** 无效的 FileVersion 值“%sâ€\n" " 引用:第 56 页,章节 5.3。" #, c-format msgid "" " **FAIL** Bad FormatVersion \"%s\"\n" " REF: Page 56, section 5.3." msgstr "" " **失败** 无效的 FormatVersion 值“%sâ€\n" " 引用:第 56 页,章节 5.3。" msgid "" " **FAIL** Bad JobPatchFile attribute in file\n" " REF: Page 24, section 3.4." msgstr "" " **失败** æ–‡ä»¶ä¸­åŒ…å«æ— æ•ˆçš„ JobPatchFile 属性\n" " 引用:第 24 页,章节 3.4。" #, c-format msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1." msgstr " **失败** 无效的 LanguageEncoding 值 %s — 值必须为 ISOLatin1." #, c-format msgid " **FAIL** Bad LanguageVersion %s - must be English." msgstr " **失败** 无效的 LanguageVersion 值 %s — 值必须为 English." #, c-format msgid "" " **FAIL** Bad Manufacturer (should be \"%s\")\n" " REF: Page 211, table D.1." msgstr "" " **失败** 无效的 Manufacturer 值(应为“%sâ€ï¼‰\n" " 引用:第 211 页,表格 D.1。" #, c-format msgid "" " **FAIL** Bad ModelName - \"%c\" not allowed in string.\n" " REF: Pages 59-60, section 5.3." msgstr "" " **失败** 无效的 ModelName 值 — 字串ä¸åº”包å«â€œ%câ€ã€‚\n" " 引用:第 59-60 页,章节 5.3。" msgid "" " **FAIL** Bad PSVersion - not \"(string) int\".\n" " REF: Pages 62-64, section 5.3." msgstr "" " **失败** 无效的 PSVersion 值 — 赋值éžâ€œ(string) intâ€ã€‚\n" " 引用:第 62-64 页,章节 5.3。" msgid "" " **FAIL** Bad Product - not \"(string)\".\n" " REF: Page 62, section 5.3." msgstr "" " **失败** 无效的 Product 值 — 赋值éžâ€œ(string)â€ã€‚\n" " 引用:第 62 页,章节 5.3。" msgid "" " **FAIL** Bad ShortNickName - longer than 31 chars.\n" " REF: Pages 64-65, section 5.3." msgstr "" " **失败** 无效的 ShortNickName 值 — 长度超过 31 个字符。\n" " 引用:第 64-65 页,章节 5.3。" #, c-format msgid "" " **FAIL** Bad option %s choice %s\n" " REF: Page 84, section 5.9" msgstr "" " **失败** 无效的选项 %s 选择 %s。\n" " 引用:第 84 页,章节 5.9" #, c-format msgid " **FAIL** Default option code cannot be interpreted: %s" msgstr " **失败** 无法解æžé»˜è®¤é€‰é¡¹ä»£ç ï¼š%s" #, c-format msgid "" " **FAIL** Default translation string for option %s choice %s contains " "8-bit characters." msgstr " **失败** 选项 %s 选择 %s çš„é»˜è®¤ç¿»è¯‘å­—ä¸²åŒ…å« 8 ä½å­—符。" #, c-format msgid "" " **FAIL** Default translation string for option %s contains 8-bit " "characters." msgstr " **失败** 选项 %s çš„é»˜è®¤ç¿»è¯‘å­—ä¸²åŒ…å« 8 ä½å­—符。" #, c-format msgid " **FAIL** Group names %s and %s differ only by case." msgstr " **失败** 组å %s åŠ %s 仅包å«å¤§å°å†™åŒºåˆ«ã€‚" #, c-format msgid " **FAIL** Multiple occurrences of option %s choice name %s." msgstr " **失败** 选项 %s 的选择åç§° %s 多次出现。" #, c-format msgid " **FAIL** Option %s choice names %s and %s differ only by case." msgstr " **失败** 选项 %s 的选择åç§° %s åŠ %s 仅包å«å¤§å°å†™åŒºåˆ«ã€‚" #, c-format msgid " **FAIL** Option names %s and %s differ only by case." msgstr " **失败** 选项åç§° %s åŠ %s 仅包å«å¤§å°å†™åŒºåˆ«ã€‚" #, c-format msgid "" " **FAIL** REQUIRED Default%s\n" " REF: Page 40, section 4.5." msgstr "" " **失败** éœ€è¦ Default%s\n" " 引用:第 40 页,章节 4.5。" msgid "" " **FAIL** REQUIRED DefaultImageableArea\n" " REF: Page 102, section 5.15." msgstr "" " **失败** éœ€è¦ DefaultImageableArea\n" " 引用:第 102 页,章节 5.15。" msgid "" " **FAIL** REQUIRED DefaultPaperDimension\n" " REF: Page 103, section 5.15." msgstr "" " **失败** éœ€è¦ DefaultPaperDimension\n" " 引用:第 103 页,章节 5.15。" msgid "" " **FAIL** REQUIRED FileVersion\n" " REF: Page 56, section 5.3." msgstr "" " **失败** éœ€è¦ FileVersion\n" " 引用:第 56 页,章节 5.3。" msgid "" " **FAIL** REQUIRED FormatVersion\n" " REF: Page 56, section 5.3." msgstr "" " **失败** éœ€è¦ FormatVersion\n" " 引用:第 56 页,章节 5.3。" #, c-format msgid "" " **FAIL** REQUIRED ImageableArea for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 102, section 5.15." msgstr "" " **失败** 需è¦ä¸º PageSize 值 %s 定义 ImageableArea\n" " 引用:第 41 页,章节 5。\n" " 引用:第 102 页,章节 5.15。" msgid "" " **FAIL** REQUIRED LanguageEncoding\n" " REF: Pages 56-57, section 5.3." msgstr "" " **失败** éœ€è¦ LanguageEncoding\n" " 引用:第 56-57 页,章节 5.3。" msgid "" " **FAIL** REQUIRED LanguageVersion\n" " REF: Pages 57-58, section 5.3." msgstr "" " **失败** éœ€è¦ LanguageVersion\n" " 引用:第 57-58 页,章节 5.3。" msgid "" " **FAIL** REQUIRED Manufacturer\n" " REF: Pages 58-59, section 5.3." msgstr "" " **失败** éœ€è¦ Manufacturer\n" " 引用:第 58-59 页,章节 5.3。" msgid "" " **FAIL** REQUIRED ModelName\n" " REF: Pages 59-60, section 5.3." msgstr "" " **失败** éœ€è¦ ModelName\n" " 引用:第 59-60 页,章节 5.3。" msgid "" " **FAIL** REQUIRED NickName\n" " REF: Page 60, section 5.3." msgstr "" " **失败** éœ€è¦ NickName\n" " 引用:第 60 页,章节 5.3。" msgid "" " **FAIL** REQUIRED PCFileName\n" " REF: Pages 61-62, section 5.3." msgstr "" " **失败** éœ€è¦ PCFileName\n" " 引用:第 61-62 页,章节 5.3。" msgid "" " **FAIL** REQUIRED PSVersion\n" " REF: Pages 62-64, section 5.3." msgstr "" " **失败** éœ€è¦ PSVersion\n" " 引用:第 62-64 页,章节 5.3。" msgid "" " **FAIL** REQUIRED PageRegion\n" " REF: Page 100, section 5.14." msgstr "" " **失败** éœ€è¦ PageRegion\n" " 引用:第 100 页,章节 5.14。" msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Page 41, section 5.\n" " REF: Page 99, section 5.14." msgstr "" " **失败** éœ€è¦ PageSize\n" " 引用:第 41 页,章节 5。\n" " 引用:第 99 页,章节 5.14。" msgid "" " **FAIL** REQUIRED PageSize\n" " REF: Pages 99-100, section 5.14." msgstr "" " **失败** éœ€è¦ PageSize\n" " 引用:第 99-100 页,章节 5.14。" #, c-format msgid "" " **FAIL** REQUIRED PaperDimension for PageSize %s\n" " REF: Page 41, section 5.\n" " REF: Page 103, section 5.15." msgstr "" " **失败** 需è¦ä¸º PageSize 值 %s 定义 PaperDimension\n" " 引用:第 41 页,章节 5。\n" " 引用:第 103 页,章节 5.15。" msgid "" " **FAIL** REQUIRED Product\n" " REF: Page 62, section 5.3." msgstr "" " **失败** éœ€è¦ Product\n" " 引用:第 62 页,章节 5.3。" msgid "" " **FAIL** REQUIRED ShortNickName\n" " REF: Page 64-65, section 5.3." msgstr "" " **失败** éœ€è¦ ShortNickName\n" " 引用:第 64-65 页,章节 5.3。" #, c-format msgid " **FAIL** Unable to open PPD file - %s on line %d." msgstr " **失败** 无法打开 PPD 文件 — 行 %2$d 上的 %1$s。" #, c-format msgid " %d ERRORS FOUND" msgstr " å‘现 %d 个错误" msgid " -h Show program usage" msgstr " -h 显示程åºä½¿ç”¨æ–¹æ³•" #, c-format msgid "" " Bad %%%%BoundingBox: on line %d.\n" " REF: Page 39, %%%%BoundingBox:" msgstr "" " 无效的 %%%%BoundingBox:ä½äºŽè¡Œ %d。\n" " 引用:第 39 页,%%%%BoundingBox:" #, c-format msgid "" " Bad %%%%Page: on line %d.\n" " REF: Page 53, %%%%Page:" msgstr "" " 无效的 %%%%Page:ä½äºŽè¡Œ %d。\n" " 引用:第 53 页,%%%%Page:" #, c-format msgid "" " Bad %%%%Pages: on line %d.\n" " REF: Page 43, %%%%Pages:" msgstr "" " 无效的 %%%%Pages:ä½äºŽè¡Œ %d。\n" " 引用:第 43 页,%%%%Pages:" #, c-format msgid "" " Line %d is longer than 255 characters (%d).\n" " REF: Page 25, Line Length" msgstr "" " 行 %d 长度超过 255 个字符 (%d)。\n" " 引用:第 25 页,行长度" # Should chapter titles be translated? msgid "" " Missing %!PS-Adobe-3.0 on first line.\n" " REF: Page 17, 3.1 Conforming Documents" msgstr "" " 首行缺少 %!PS-Adobe-3.0。\n" " 引用:第 17 页,3.1 符åˆè§„范的文档" #, c-format msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments" msgstr " 缺少 %%EndComments 注释。 引用:第 41 页,%%EndComments" #, c-format msgid "" " Missing or bad %%BoundingBox: comment.\n" " REF: Page 39, %%BoundingBox:" msgstr "" " %%BoundingBox 缺失或无效:注释。\n" " 引用:第 39 页,%%BoundingBox:" #, c-format msgid "" " Missing or bad %%Page: comments.\n" " REF: Page 53, %%Page:" msgstr "" " %%Page 缺失或无效:注释。\n" " 引用:第 53 页,%%Page:" #, c-format msgid "" " Missing or bad %%Pages: comment.\n" " REF: Page 43, %%Pages:" msgstr "" " %%Pages 缺失或无效:注释。\n" " 引用:第 43 页,%%Pages:" msgid " NO ERRORS FOUND" msgstr " 未å‘现错误" #, c-format msgid " Saw %d lines that exceeded 255 characters." msgstr " å…±å‘现 %d 个超过 255 字符的行。" #, c-format msgid " Too many %%BeginDocument comments." msgstr " %%BeginDocument 注释过多。" #, c-format msgid " Too many %%EndDocument comments." msgstr " %%EndDocument 注释过多。" msgid " Warning: file contains binary data." msgstr " 警告:文件包å«äºŒè¿›åˆ¶æ•°æ®ã€‚" #, c-format msgid " Warning: no %%EndComments comment in file." msgstr " 警告:文件中无 %%EndComments 注释。" #, c-format msgid " Warning: obsolete DSC version %.1f in file." msgstr " 警告:文件中包å«å·²é—弃的 DSC 版本 %.1f。" msgid " ! expression Unary NOT of expression." msgstr " ! è¡¨è¾¾å¼ ä¸€å…ƒå¦å®šè¡¨è¾¾å¼ã€‚" msgid " ( expressions ) Group expressions." msgstr " ( è¡¨è¾¾å¼ ) 表达å¼ç»„。" msgid " --[no-]debug-logging Turn debug logging on/off." msgstr " --[no-]debug-logging 打开/关闭查错日志。" msgid " --[no-]remote-admin Turn remote administration on/off." msgstr " --[no-]remote-admin 打开/关闭远程管ç†ã€‚" msgid " --[no-]remote-any Allow/prevent access from the Internet." msgstr " --[no-]remote-any å…许/ç¦æ­¢äº’è”网访问。" msgid " --[no-]share-printers Turn printer sharing on/off." msgstr " --[no-]share-printers 打开/å…³é—­æ‰“å°æœºå…±äº«ã€‚" msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job." msgstr " --[no-]user-cancel-any å…许/ç¦æ­¢ç”¨æˆ·å–消任æ„任务。" msgid " --cr End lines with CR (Mac OS 9)." msgstr " --cr 使用 CR 行末 (Mac OS 9)。" msgid " --crlf End lines with CR + LF (Windows)." msgstr " --crlf 使用 CR + LF 行末 (Windows)。" msgid " --domain regex Match domain to regular expression." msgstr " --domain æ­£åˆ™è¡¨è¾¾å¼ ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŒ¹é…域。" msgid "" " --exec utility [argument ...] ;\n" " Execute program if true." msgstr "" " --exec ç¨‹åº [傿•° ...] ;\n" " 如返回 true 则执行程åºã€‚" msgid " --false Always false." msgstr " --false 总是返回 false。" msgid " --help Show help." msgstr " --help 显示帮助。" msgid " --help Show this help." msgstr " --help 显示此帮助信æ¯ã€‚" msgid " --host regex Match hostname to regular expression." msgstr " --host æ­£åˆ™è¡¨è¾¾å¼ ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŒ¹é…主机å。" msgid " --lf End lines with LF (UNIX/Linux/macOS)." msgstr " --lf 使用 LF 行末(UNIX/Linux/macOS)。" msgid " --list-filters List filters that will be used." msgstr " --list-filters 列出è¦ä½¿ç”¨çš„æ»¤é•œã€‚" msgid " --local True if service is local." msgstr " --local 如为本地æœåŠ¡åˆ™è¿”å›ž true。" msgid " --ls List attributes." msgstr " --ls 列出属性。" msgid " --name regex Match service name to regular expression." msgstr " --name æ­£åˆ™è¡¨è¾¾å¼ ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŒ¹é…æœåŠ¡å称。" msgid " --not expression Unary NOT of expression." msgstr " --not è¡¨è¾¾å¼ ä¸€å…ƒå¦å®šè¡¨è¾¾å¼ã€‚" msgid " --path regex Match resource path to regular expression." msgstr " --path æ­£åˆ™è¡¨è¾¾å¼ ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŒ¹é…资æºè·¯å¾„。" msgid " --port number[-number] Match port to number or range." msgstr " --port æ•°å­—[-æ•°å­—] 匹é…端å£å·æˆ–返回。" msgid " --print Print URI if true." msgstr " --print 如果为 true 则回显 URI。" msgid " --print-name Print service name if true." msgstr " --print-name 如果为 true 则回显æœåŠ¡å称。" msgid " --quiet Quietly report match via exit code." msgstr " --quiet é™é»˜ä½¿ç”¨é€€å‡ºä»£ç è¿”回匹é…。" msgid " --remote True if service is remote." msgstr " --remote 如为远程æœåŠ¡åˆ™è¿”å›ž true。" msgid "" " --stop-after-include-error\n" " Stop tests after a failed INCLUDE." msgstr "" " --stop-after-include-error\n" " é‡åˆ°å¤±è´¥çš„ INCLUDE æ—¶åœæ­¢æµ‹è¯•。" msgid " --true Always true." msgstr " --true 总是返回 true。" msgid " --txt key True if the TXT record contains the key." msgstr " --txt 键值 如 TXT 记录包å«é”®å€¼åˆ™è¿”回 true。" msgid " --txt-* regex Match TXT record key to regular expression." msgstr " --txt-* æ­£åˆ™è¡¨è¾¾å¼ ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŒ¹é… TXT 记录键值。" msgid " --uri regex Match URI to regular expression." msgstr " --uri æ­£åˆ™è¡¨è¾¾å¼ ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŒ¹é… URI。" msgid " --version Show program version." msgstr " --version 显示程åºç‰ˆæœ¬ã€‚" msgid " --version Show version." msgstr " --version 显示版本。" msgid " -4 Connect using IPv4." msgstr " -4 使用 IPv4 连接。" msgid " -6 Connect using IPv6." msgstr " -6 使用 IPv6 连接。" msgid " -C Send requests using chunking (default)." msgstr " -C 使用分å—请求å‘é€ï¼ˆé»˜è®¤ï¼‰ã€‚" msgid " -D Remove the input file when finished." msgstr " -D 完æˆåŽåˆ é™¤è¾“入文件。" msgid " -D name=value Set named variable to value." msgstr " -D åç§°=赋值 为指定å˜é‡èµ‹å€¼ã€‚" msgid " -E Encrypt the connection." msgstr " -E 加密连接。" msgid "" " -E Test with encryption using HTTP Upgrade to TLS." msgstr "" msgid "" " -F Run in the foreground but detach from console." msgstr " -F 在å‰å°è¿è¡Œä½†ä»Žç»ˆç«¯åˆ†ç¦»ã€‚" msgid " -H samba-server Use the named SAMBA server." msgstr " -H samba-server 使用指定的 Samba æœåŠ¡å™¨ã€‚" msgid " -I Ignore errors." msgstr " -I 忽略错误。" msgid " -I include-dir Add include directory to search path." msgstr " -I include-dir 将引用目录加入到æœç´¢è·¯å¾„。" msgid " -I {filename,filters,none,profiles}" msgstr " -I {文件å,滤镜,æ— ,é…置档案}" msgid " -L Send requests using content-length." msgstr " -L 使用 content-length å‘é€è¯·æ±‚。" msgid "" " -P filename.plist Produce XML plist to a file and test report to " "standard output." msgstr "" " -P filename.plist ç”Ÿæˆ XML plist 文件并将测试报告å‘é€åˆ°æ ‡å‡†è¾“出。" msgid " -P filename.ppd Set PPD file." msgstr " -P filename.ppd 设置 PPD 文件。" msgid " -P number[-number] Match port to number or range." msgstr " -P æ•°å­—[-æ•°å­—] 匹é…端å£å·æˆ–范围。" msgid " -R root-directory Set alternate root." msgstr " -R root-directory 设置备用根目录。" msgid " -S Test with encryption using HTTPS." msgstr "" msgid " -T seconds Set the browse timeout in seconds." msgstr " -T ç§’æ•° 设置æµè§ˆè¶…时(按秒计)。" msgid " -T seconds Set the receive/send timeout in seconds." msgstr " -T ç§’æ•° 设置å‘é€/接收超时(按秒计)。" msgid " -U username Specify username." msgstr " -U ç”¨æˆ·å æŒ‡å®šç”¨æˆ·å。" msgid " -V version Set default IPP version." msgstr " -V 版本 设置默认 IPP 版本。" msgid "" " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes," "translations}" msgstr " -W {所有,æ— ,é™åˆ¶,默认,å¤å¼,滤镜,é…置档案,尺寸,翻译}" msgid " -X Produce XML plist instead of plain text." msgstr " -X ç”Ÿæˆ XML plist è€Œä¸æ˜¯çº¯æ–‡æœ¬ã€‚" msgid " -a Export all printers." msgstr " -a å¯¼å‡ºæ‰€æœ‰æ‰“å°æœºã€‚" msgid " -c Produce CSV output." msgstr " -c ç”Ÿæˆ CSV 输出。" msgid " -c catalog.po Load the specified message catalog." msgstr " -c catalog.po 载入指定的消æ¯ç´¢å¼•。" msgid " -c cups-files.conf Set cups-files.conf file to use." msgstr " -c cups-files.conf 设置è¦ä½¿ç”¨çš„ cups-files.conf 文件。" msgid " -c cupsd.conf Set cupsd.conf file to use." msgstr " -c cupsd.conf 设置è¦ä½¿ç”¨çš„ cupsd.conf 文件。" msgid " -d name=value Set named variable to value." msgstr " -d åç§°=赋值 为指定å˜é‡èµ‹å€¼ã€‚" msgid " -d output-dir Specify the output directory." msgstr " -d output-dir 指定输出目录。" msgid " -d printer Use the named printer." msgstr " -d æ‰“å°æœº ä½¿ç”¨æŒ‡å®šçš„æ‰“å°æœºã€‚" msgid " -d regex Match domain to regular expression." msgstr " -d æ­£åˆ™è¡¨è¾¾å¼ ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŒ¹é…域å。" msgid " -e Use every filter from the PPD file." msgstr " -e 使用æ¥è‡ª PPD 文件的所有滤镜。" msgid " -f Run in the foreground." msgstr " -f å‰å°è¿è¡Œã€‚" msgid " -f filename Set default request filename." msgstr " -f 文件å 设置默认请求文件å。" msgid " -h Show this usage message." msgstr " -h 显示此使用方法信æ¯ã€‚" msgid " -h Validate HTTP response headers." msgstr "" msgid " -h regex Match hostname to regular expression." msgstr " -h æ­£åˆ™è¡¨è¾¾å¼ ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŒ¹é…主机å。" msgid " -h server[:port] Specify server address." msgstr " -h æœåС噍[:端å£] 指定æœåŠ¡å™¨åœ°å€ã€‚" msgid " -i mime/type Set input MIME type (otherwise auto-typed)." msgstr " -i mime/type 设置输入的 MIME 类型(å¦åˆ™è‡ªåŠ¨æŽ¢æµ‹ç±»åž‹ï¼‰ã€‚" msgid "" " -i seconds Repeat the last file with the given time interval." msgstr " -i ç§’æ•° 指定é‡å¤ä¸Šä¸€æ–‡ä»¶çš„间隔(按秒计)。" msgid "" " -j job-id[,N] Filter file N from the specified job (default is " "file 1)." msgstr " -j job-id[,N] 从指定任务中过滤文件 N(默认为文件 1)。" msgid " -l List attributes." msgstr " -l 列出属性。" msgid " -l Produce plain text output." msgstr " -l 生æˆçº¯æ–‡æœ¬è¾“出。" msgid " -l Run cupsd on demand." msgstr " -l 按需å¯åЍ cupsd。" msgid " -l lang[,lang,...] Specify the output language(s) (locale)." msgstr " -l lang[,lang,...] 指定输出语言(地域é…置)。" msgid " -m Use the ModelName value as the filename." msgstr " -m å°† ModelName 值作为文件å。" msgid "" " -m mime/type Set output MIME type (otherwise application/pdf)." msgstr "" " -m mime/type 设置输出 MIME 类型(缺çœä¸º application/pdf)。" msgid " -n copies Set number of copies." msgstr " -n 副本数 设置副本数é‡ã€‚" msgid "" " -n count Repeat the last file the given number of times." msgstr " -n æ•°é‡ æŒ‰æŒ‡å®šæ•°é‡é‡å¤ä¸Šä¸€æ–‡ä»¶ã€‚" msgid " -n regex Match service name to regular expression." msgstr " -n æ­£åˆ™è¡¨è¾¾å¼ ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŒ¹é…æœåŠ¡å称。" msgid "" " -o filename.drv Set driver information file (otherwise ppdi.drv)." msgstr " -o filename.drv æŒ‡å®šé©±åŠ¨ä¿¡æ¯æ–‡ä»¶ï¼ˆç¼ºçœä¸º ppdi.drv)。" msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)." msgstr " -o filename.ppd[.gz] 设置输出文件(缺çœä¸ºæ ‡å‡†è¾“出)。" msgid " -o name=value Set option(s)." msgstr " -o åç§°=赋值 设置选项。" msgid " -p Print URI if true." msgstr " -p 如果为 true 则回显 URI。" msgid " -p filename.ppd Set PPD file." msgstr " -p filename.ppd 指定 PPD 文件。" msgid " -q Quietly report match via exit code." msgstr " -q é™é»˜ä½¿ç”¨é€€å‡ºä»£ç æŠ¥å‘ŠåŒ¹é…。" msgid " -q Run silently." msgstr " -q é™é»˜è¿è¡Œã€‚" msgid " -r True if service is remote." msgstr " -r 如为远程æœåŠ¡åˆ™è¿”å›ž true。" msgid " -r Use 'relaxed' open mode." msgstr " -r 使用“relaxedâ€æ‰“开模å¼ã€‚" msgid " -s Print service name if true." msgstr " -s 如果为 true 则回显æœåŠ¡å称。" msgid " -s cups-files.conf Set cups-files.conf file to use." msgstr " -s cups-files.conf 设置è¦ä½¿ç”¨çš„ cups-files.conf 文件。" msgid " -t Produce a test report." msgstr " -t ç”Ÿæˆæµ‹è¯•报告。" msgid " -t Test PPDs instead of generating them." msgstr " -t 测试而éžç”Ÿæˆ PPD 文件。" msgid " -t Test the configuration file." msgstr " -t 测试é…置文件。" msgid " -t key True if the TXT record contains the key." msgstr " -t 键值 如 TXT 记录包å«é”®å€¼åˆ™è¿”回 true。" msgid " -t title Set title." msgstr " -t 标题 设置标题。" msgid " -u Remove the PPD file when finished." msgstr " -u 完æˆåŽåˆ é™¤ PPD 文件。" msgid " -u regex Match URI to regular expression." msgstr " -u æ­£åˆ™è¡¨è¾¾å¼ ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŒ¹é… URI。" msgid " -v Be verbose." msgstr " -v å¼€å¯è¯¦ç»†è¾“出。" msgid " -vv Be very verbose." msgstr " -vv 进一步æé«˜è¾“出详尽度。" msgid "" " -x utility [argument ...] ;\n" " Execute program if true." msgstr "" " -x ç¨‹åº [傿•° ...] ;\n" " 如果为 true 则执行程åºã€‚" msgid " -z Compress PPD files using GNU zip." msgstr " -z 使用 GNU zip 压缩 PPD 文件。" msgid " IPPFIND_SERVICE_DOMAIN Domain name" msgstr " IPPFIND_SERVICE_DOMAIN 域å" msgid "" " IPPFIND_SERVICE_HOSTNAME\n" " Fully-qualified domain name" msgstr "" " IPPFIND_SERVICE_HOSTNAME\n" " 完全é™å®šåŸŸå" msgid " IPPFIND_SERVICE_NAME Service instance name" msgstr " IPPFIND_SERVICE_NAME æœåŠ¡å®žä¾‹åç§°" msgid " IPPFIND_SERVICE_PORT Port number" msgstr " IPPFIND_SERVICE_PORT 端å£å·" msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type" msgstr " IPPFIND_SERVICE_REGTYPE DNS-SD 注册类型" msgid " IPPFIND_SERVICE_SCHEME URI scheme" msgstr " IPPFIND_SERVICE_SCHEME URI 方案" msgid " IPPFIND_SERVICE_URI URI" msgstr " IPPFIND_SERVICE_URI URI" msgid " IPPFIND_TXT_* Value of TXT record key" msgstr " IPPFIND_TXT_* TXT 记录键值" msgid "" " expression --and expression\n" " Logical AND." msgstr "" " è¡¨è¾¾å¼ --and 表达å¼\n" " AND 逻辑。" msgid "" " expression --or expression\n" " Logical OR." msgstr "" " è¡¨è¾¾å¼ --or 表达å¼\n" " OR 逻辑。" msgid " expression expression Logical AND." msgstr " è¡¨è¾¾å¼ è¡¨è¾¾å¼ AND 逻辑。" msgid " {service_domain} Domain name" msgstr " {service_domain} 域å" msgid " {service_hostname} Fully-qualified domain name" msgstr " {service_hostname} 完全é™å®šåŸŸå" msgid " {service_name} Service instance name" msgstr " {service_name} æœåŠ¡å®žä¾‹åç§°" msgid " {service_port} Port number" msgstr " {service_port} 端å£å·" msgid " {service_regtype} DNS-SD registration type" msgstr " {service_regtype} DNS-SD 注册åç§°" msgid " {service_scheme} URI scheme" msgstr " {service_scheme} URI 方案" msgid " {service_uri} URI" msgstr " {service_uri} URI" msgid " {txt_*} Value of TXT record key" msgstr " {txt_*} TXT 记录键值" msgid " {} URI" msgstr " {} URI" msgid " FAIL" msgstr " 失败" msgid " PASS" msgstr " 通过" #, c-format msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." msgstr "" #, c-format msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "" "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." msgstr "" #, c-format msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section " "5.1.4)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section " "5.1.10)." msgstr "" #, c-format msgid "" "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section " "5.1.9)." msgstr "" #, c-format msgid "" "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." msgstr "" #, c-format msgid "" "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 " "section 5.1.14)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section " "5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " "positive (RFC 8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC " "8011 section 5.1.16)." msgstr "" #, c-format msgid "" "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "" "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." msgstr "" #, c-format msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes" msgstr "%-7s %-7.7s %-7d %-31.31s %.0f 字节" #, c-format msgid "%d x %d mm" msgstr "%d x %d 毫米" #, c-format msgid "%g x %g \"" msgstr "" #, c-format msgid "%s (%s)" msgstr "%s (%s)" #, c-format msgid "%s (%s, %s)" msgstr "%s (%s, %s)" #, c-format msgid "%s (Borderless)" msgstr "%s(无边界)" #, c-format msgid "%s (Borderless, %s)" msgstr "%s(无边界,%s)" #, c-format msgid "%s (Borderless, %s, %s)" msgstr "%s(无边界,%s,%s)" #, c-format msgid "%s accepting requests since %s" msgstr "%s 自从 %s 开始接å—请求" #, c-format msgid "%s cannot be changed." msgstr "无法更改 %s。" #, c-format msgid "%s is not implemented by the CUPS version of lpc." msgstr "%s 未在 CUPS 版本的 lpc 中实现。" #, c-format msgid "%s is not ready" msgstr "%s 未就绪" #, c-format msgid "%s is ready" msgstr "%s 就绪" #, c-format msgid "%s is ready and printing" msgstr "%s 就绪且正在打å°" #, c-format msgid "%s job-id user title copies options [file]" msgstr "%s job-id 用户标题副本选项 [文件]" #, c-format msgid "%s not accepting requests since %s -" msgstr "%s 自从 %s ä¸å†æŽ¥å—请求" #, c-format msgid "%s not supported." msgstr "%s ä¸è¢«æ”¯æŒã€‚" #, c-format msgid "%s/%s accepting requests since %s" msgstr "%s/%s 自从 %s 开始接å—请求" #, c-format msgid "%s/%s not accepting requests since %s -" msgstr "%s/%s 自从 %s ä¸å†æŽ¥å—请求" #, c-format msgid "%s: %-33.33s [job %d localhost]" msgstr "%s:%-33.33s [任务 %d localhost]" #. TRANSLATORS: Message is "subject: error" #, c-format msgid "%s: %s" msgstr "%s:%s" #, c-format msgid "%s: %s failed: %s" msgstr "%s:%s 失败:%s" #, c-format msgid "%s: Bad printer URI \"%s\"." msgstr "%sï¼šæ— æ•ˆçš„æ‰“å°æœº URI“%sâ€ã€‚" #, c-format msgid "%s: Bad version %s for \"-V\"." msgstr "%s:用于“-Vâ€çš„版本 %s 无效。" #, c-format msgid "%s: Don't know what to do." msgstr "%s:ä¸çŸ¥å¦‚何处ç†ã€‚" #, c-format msgid "%s: Error - %s" msgstr "" #, c-format msgid "" "%s: Error - %s environment variable names non-existent destination \"%s\"." msgstr "%s:错误 — %s 环境å˜é‡æŒ‡å®šäº†ä¸å­˜åœ¨çš„目的地“%sâ€ã€‚" #, c-format msgid "%s: Error - add '/version=1.1' to server name." msgstr "%s:错误 — 请将“/version=1.1â€æ·»åŠ åˆ°æœåС噍å称。" #, c-format msgid "%s: Error - bad job ID." msgstr "%s:错误 — 无效的任务 ID。" #, c-format msgid "%s: Error - cannot print files and alter jobs simultaneously." msgstr "%s:错误 — æ— æ³•åœ¨æ‰“å°æ–‡ä»¶çš„åŒæ—¶æ›´æ”¹ä»»åŠ¡ã€‚" #, c-format msgid "%s: Error - cannot print from stdin if files or a job ID are provided." msgstr "%s:错误 — 在指定了文件或任务 ID 的情况下ä¸èƒ½ä»Žæ ‡å‡†è¾“入打å°ã€‚" #, c-format msgid "%s: Error - copies must be 1 or more." msgstr "%s:错误 — 副本数必须为至少 1。" #, c-format msgid "%s: Error - expected character set after \"-S\" option." msgstr "%s:错误 — 在“-Sâ€é€‰é¡¹åŽé¢„期字符集。" #, c-format msgid "%s: Error - expected content type after \"-T\" option." msgstr "%s:错误 — 在“-Tâ€é€‰é¡¹åŽé¢„期内容类型。" #, c-format msgid "%s: Error - expected copies after \"-#\" option." msgstr "%s:错误 — 在“-#â€é€‰é¡¹åŽé¢„期副本数é‡ã€‚" #, c-format msgid "%s: Error - expected copies after \"-n\" option." msgstr "%s:错误 — 在“-nâ€é€‰é¡¹åŽé¢„期副本数é‡ã€‚" #, c-format msgid "%s: Error - expected destination after \"-P\" option." msgstr "%s:错误 — 在“-Pâ€é€‰é¡¹åŽé¢„期目的地。" #, c-format msgid "%s: Error - expected destination after \"-d\" option." msgstr "%s:错误 — 在“-dâ€é€‰é¡¹åŽé¢„期目的地。" #, c-format msgid "%s: Error - expected form after \"-f\" option." msgstr "%s:错误 — 在“-fâ€é€‰é¡¹åŽé¢„期表å•。" #, c-format msgid "%s: Error - expected hold name after \"-H\" option." msgstr "%s:错误 — 在“-Hâ€é€‰é¡¹åŽæœŸå¾…ä¿æŒå称。" #, c-format msgid "%s: Error - expected hostname after \"-H\" option." msgstr "%s:错误 — 在“-Hâ€é€‰é¡¹åŽé¢„期主机å。" #, c-format msgid "%s: Error - expected hostname after \"-h\" option." msgstr "%s:错误 — 在“-hâ€é€‰é¡¹åŽé¢„期主机å。" #, c-format msgid "%s: Error - expected mode list after \"-y\" option." msgstr "%s:错误 — 在“-yâ€é€‰é¡¹åŽé¢„期模å¼åˆ—表。" #, c-format msgid "%s: Error - expected name after \"-%c\" option." msgstr "%s:错误 — 在“-%câ€é€‰é¡¹åŽé¢„期å称。" #, c-format msgid "%s: Error - expected option=value after \"-o\" option." msgstr "%s:错误 — 在“-oâ€é€‰é¡¹åŽé¢„期选项=赋值。" #, c-format msgid "%s: Error - expected page list after \"-P\" option." msgstr "%s:错误 — 在“-Pâ€é€‰é¡¹åŽé¢„期页ç åˆ—表。" #, c-format msgid "%s: Error - expected priority after \"-%c\" option." msgstr "%s:错误 — 在“-%câ€é€‰é¡¹åŽé¢„期优先级。" #, c-format msgid "%s: Error - expected reason text after \"-r\" option." msgstr "%s:错误 — 在“-râ€é€‰é¡¹åŽé¢„期ç†ç”±æ–‡æœ¬ã€‚" #, c-format msgid "%s: Error - expected title after \"-t\" option." msgstr "%s:错误 — 在“-tâ€é€‰é¡¹åŽé¢„期标题。" #, c-format msgid "%s: Error - expected username after \"-U\" option." msgstr "%s:错误 — 在“-Uâ€é€‰é¡¹åŽé¢„期用户å。" #, c-format msgid "%s: Error - expected username after \"-u\" option." msgstr "%s:错误 — 在“-uâ€é€‰é¡¹åŽé¢„期用户å。" #, c-format msgid "%s: Error - expected value after \"-%c\" option." msgstr "%s:错误 — 在“-%câ€é€‰é¡¹åŽé¢„期赋值。" #, c-format msgid "" "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" " "option." msgstr "%s:错误 — 在“-Wâ€é€‰é¡¹åŽéœ€è¦â€œcompletedâ€ï¼Œâ€œnot-completedâ€æˆ–“allâ€å€¼ã€‚" #, c-format msgid "%s: Error - no default destination available." msgstr "%s:错误 — æ— å¯ç”¨çš„默认目的地。" #, c-format msgid "%s: Error - priority must be between 1 and 100." msgstr "%s:错误 — 优先级必须在 1 至 100 之间。" #, c-format msgid "%s: Error - scheduler not responding." msgstr "%s:错误 — 调度器无å“应。" #, c-format msgid "%s: Error - too many files - \"%s\"." msgstr "%s:错误 — 文件太多 -“%sâ€ã€‚" #, c-format msgid "%s: Error - unable to access \"%s\" - %s" msgstr "%s:错误 — 无法访问“%sâ€- %s" #, c-format msgid "%s: Error - unable to queue from stdin - %s." msgstr "%s:错误 — 无法从标准输出列表 — %s。" #, c-format msgid "%s: Error - unknown destination \"%s\"." msgstr "%s:错误 — 未知目的地“%sâ€ã€‚" #, c-format msgid "%s: Error - unknown destination \"%s/%s\"." msgstr "%s:错误 — 未知目的地“%s/%sâ€ã€‚" #, c-format msgid "%s: Error - unknown option \"%c\"." msgstr "%s:错误 — 未知选项“%câ€ã€‚" #, c-format msgid "%s: Error - unknown option \"%s\"." msgstr "%s:错误 — 未知选项“%sâ€ã€‚" #, c-format msgid "%s: Expected job ID after \"-i\" option." msgstr "%s:在选项“-iâ€åŽé¢„期任务 ID。" #, c-format msgid "%s: Invalid destination name in list \"%s\"." msgstr "%s:列表“%sâ€ä¸­çš„目的地å称无效。" #, c-format msgid "%s: Invalid filter string \"%s\"." msgstr "%s:无效的滤镜字串“%sâ€ã€‚" #, c-format msgid "%s: Missing filename for \"-P\"." msgstr "%s:“-Pâ€é€‰é¡¹ç¼ºå°‘文件å。" #, c-format msgid "%s: Missing timeout for \"-T\"." msgstr "%s:“-Tâ€é€‰é¡¹ç¼ºå°‘超时。" #, c-format msgid "%s: Missing version for \"-V\"." msgstr "%s:“-Vâ€é€‰é¡¹ç¼ºå°‘版本。" #, c-format msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"." msgstr "%s:在指定“-H restartâ€ä¹‹å‰éœ€è¦ä»»åŠ¡ ID (\"-i jobid\")。" #, c-format msgid "%s: No filter to convert from %s/%s to %s/%s." msgstr "%s:没有å¯ä»¥å°† %s/%s 转æ¢ä¸º %s/%s 的滤镜。" #, c-format msgid "%s: Operation failed: %s" msgstr "%s:æ“作失败:%s" #, c-format msgid "%s: Sorry, no encryption support." msgstr "%s:抱歉,无加密支æŒã€‚" #, c-format msgid "%s: Unable to connect to \"%s:%d\": %s" msgstr "%s:无法连接到“%s:%dâ€ï¼š%s" #, c-format msgid "%s: Unable to connect to server." msgstr "%s:无法连接到æœåŠ¡å™¨ã€‚" #, c-format msgid "%s: Unable to contact server." msgstr "%s:无法与æœåŠ¡å™¨é€šä¿¡ã€‚" #, c-format msgid "%s: Unable to create PPD file: %s" msgstr "%s:无法创建 PPD 文件:%s" #, c-format msgid "%s: Unable to determine MIME type of \"%s\"." msgstr "%s:无法确定“%sâ€çš„ MIME 类型。" #, c-format msgid "%s: Unable to open \"%s\": %s" msgstr "%s:无法打开“%sâ€ï¼š%s" #, c-format msgid "%s: Unable to open %s: %s" msgstr "%s:无法打开 %s:%s" #, c-format msgid "%s: Unable to open PPD file: %s on line %d." msgstr "%1$s:无法打开 PPD 文件:行 %3$d 上的 %2$s。" #, c-format msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"." msgstr "%s:无法从“%sâ€æˆ–“%sâ€è¯»å– MIME æ•°æ®åº“。" #, c-format msgid "%s: Unable to resolve \"%s\"." msgstr "%s:无法解æžâ€œ%sâ€ã€‚" #, c-format msgid "%s: Unknown argument \"%s\"." msgstr "%sï¼šæœªçŸ¥å‚æ•°â€œ%sâ€ã€‚" #, c-format msgid "%s: Unknown destination \"%s\"." msgstr "%s:未知目的地“%sâ€ã€‚" #, c-format msgid "%s: Unknown destination MIME type %s/%s." msgstr "%s:MIME 类型 %s/%s 的目的地未知。" #, c-format msgid "%s: Unknown option \"%c\"." msgstr "%s:未知选项“%câ€ã€‚" #, c-format msgid "%s: Unknown option \"%s\"." msgstr "%s:未知选项“%sâ€ã€‚" #, c-format msgid "%s: Unknown option \"-%c\"." msgstr "%s:未知选项“-%câ€ã€‚" #, c-format msgid "%s: Unknown source MIME type %s/%s." msgstr "%sï¼šæœªçŸ¥æº MIME 类型 %s/%s。" #, c-format msgid "" "%s: Warning - \"%c\" format modifier not supported - output may not be " "correct." msgstr "%s:警告 — 䏿”¯æŒâ€œ%câ€æ ¼å¼çš„修饰符 — 输出å¯èƒ½ä¸æ­£ç¡®ã€‚" #, c-format msgid "%s: Warning - character set option ignored." msgstr "%s:警告 — 字符集选项被忽略。" #, c-format msgid "%s: Warning - content type option ignored." msgstr "%s:警告 — 内容类型选项被忽略。" #, c-format msgid "%s: Warning - form option ignored." msgstr "%s:警告 — 图标选项被忽略。" #, c-format msgid "%s: Warning - mode option ignored." msgstr "%s:警告 — 模å¼é€‰é¡¹è¢«å¿½ç•¥ã€‚" msgid "-1" msgstr "-1" msgid "-10" msgstr "-10" msgid "-100" msgstr "-100" msgid "-105" msgstr "-105" msgid "-11" msgstr "-11" msgid "-110" msgstr "-110" msgid "-115" msgstr "-115" msgid "-12" msgstr "-12" msgid "-120" msgstr "-120" msgid "-13" msgstr "-13" msgid "-14" msgstr "-14" msgid "-15" msgstr "-15" msgid "-2" msgstr "-2" msgid "-20" msgstr "-20" msgid "-25" msgstr "-25" msgid "-3" msgstr "-3" msgid "-30" msgstr "-30" msgid "-35" msgstr "-35" msgid "-4" msgstr "-4" msgid "-40" msgstr "-40" msgid "-45" msgstr "-45" msgid "-5" msgstr "-5" msgid "-50" msgstr "-50" msgid "-55" msgstr "-55" msgid "-6" msgstr "-6" msgid "-60" msgstr "-60" msgid "-65" msgstr "-65" msgid "-7" msgstr "-7" msgid "-70" msgstr "-70" msgid "-75" msgstr "-75" msgid "-8" msgstr "-8" msgid "-80" msgstr "-80" msgid "-85" msgstr "-85" msgid "-9" msgstr "-9" msgid "-90" msgstr "-90" msgid "-95" msgstr "-95" msgid "0" msgstr "0" msgid "1" msgstr "1" msgid "1 inch/sec." msgstr "1 英寸/ç§’" msgid "1.25x0.25\"" msgstr "1.25×0.25 英寸" msgid "1.25x2.25\"" msgstr "1.25×2.25 英寸" msgid "1.5 inch/sec." msgstr "1.5 英寸/ç§’" msgid "1.50x0.25\"" msgstr "1.50×0.25 英寸" msgid "1.50x0.50\"" msgstr "1.50×0.50 英寸" msgid "1.50x1.00\"" msgstr "1.50×1.00 英寸" msgid "1.50x2.00\"" msgstr "1.50×2.00 英寸" msgid "10" msgstr "10" msgid "10 inches/sec." msgstr "10 英寸/ç§’" msgid "10 x 11" msgstr "10×11" msgid "10 x 13" msgstr "10×13" msgid "10 x 14" msgstr "10×14" msgid "100" msgstr "100" msgid "100 mm/sec." msgstr "100 毫米/ç§’" msgid "105" msgstr "105" msgid "11" msgstr "11" msgid "11 inches/sec." msgstr "11 英寸/ç§’" msgid "110" msgstr "110" msgid "115" msgstr "115" msgid "12" msgstr "12" msgid "12 inches/sec." msgstr "12 英寸/ç§’" msgid "12 x 11" msgstr "12×11" msgid "120" msgstr "120" msgid "120 mm/sec." msgstr "120 毫米/ç§’" msgid "120x60dpi" msgstr "120×60 dpi" msgid "120x72dpi" msgstr "120×72 dpi" msgid "13" msgstr "13" msgid "136dpi" msgstr "136 dpi" msgid "14" msgstr "14" msgid "15" msgstr "15" msgid "15 mm/sec." msgstr "15 毫米/ç§’" msgid "15 x 11" msgstr "15×11" msgid "150 mm/sec." msgstr "150 毫米/ç§’" msgid "150dpi" msgstr "150 dpi" msgid "16" msgstr "16" msgid "17" msgstr "17" msgid "18" msgstr "18" msgid "180dpi" msgstr "180 dpi" msgid "19" msgstr "19" msgid "2" msgstr "2" msgid "2 inches/sec." msgstr "2 英寸/ç§’" msgid "2-Hole Punch (Landscape)" msgstr "åŒå­”冲压(水平)" msgid "2-Hole Punch (Portrait)" msgstr "åŒå­”冲压(垂直)" msgid "2-Hole Punch (Reverse Landscape)" msgstr "åŒå­”冲压(å呿°´å¹³ï¼‰" msgid "2-Hole Punch (Reverse Portrait)" msgstr "åŒå­”冲压(åå‘垂直)" msgid "2-Sided Printing" msgstr "åŒé¢å°åˆ·" msgid "2.00x0.37\"" msgstr "2.00×0.37 英寸" msgid "2.00x0.50\"" msgstr "2.00×0.50 英寸" msgid "2.00x1.00\"" msgstr "2.00×1.00 英寸" msgid "2.00x1.25\"" msgstr "2.00×1.25 英寸" msgid "2.00x2.00\"" msgstr "2.00×2.00 英寸" msgid "2.00x3.00\"" msgstr "2.00×3.00 英寸" msgid "2.00x4.00\"" msgstr "2.00×4.00 英寸" msgid "2.00x5.50\"" msgstr "2.00×5.50 英寸" msgid "2.25x0.50\"" msgstr "2.25×0.50 英寸" msgid "2.25x1.25\"" msgstr "2.25×1.25 英寸" msgid "2.25x4.00\"" msgstr "2.25×4.00 英寸" msgid "2.25x5.50\"" msgstr "2.25×5.50 英寸" msgid "2.38x5.50\"" msgstr "2.38×5.50 英寸" msgid "2.5 inches/sec." msgstr "2.5 英寸/ç§’" msgid "2.50x1.00\"" msgstr "2.50×1.00 英寸" msgid "2.50x2.00\"" msgstr "2.50×2.00 英寸" msgid "2.75x1.25\"" msgstr "2.75×1.25 英寸" msgid "2.9 x 1\"" msgstr "2.9×1 英寸" msgid "20" msgstr "20" msgid "20 mm/sec." msgstr "20 毫米/ç§’" msgid "200 mm/sec." msgstr "200 毫米/ç§’" msgid "203dpi" msgstr "203 dpi" msgid "21" msgstr "21" msgid "22" msgstr "22" msgid "23" msgstr "23" msgid "24" msgstr "24" msgid "24-Pin Series" msgstr "24 é’ˆåºåˆ—" msgid "240x72dpi" msgstr "240×72 dpi" msgid "25" msgstr "25" msgid "250 mm/sec." msgstr "250 毫米/ç§’" msgid "26" msgstr "26" msgid "27" msgstr "27" msgid "28" msgstr "28" msgid "29" msgstr "29" msgid "3" msgstr "3" msgid "3 inches/sec." msgstr "3 英寸/ç§’" msgid "3 x 5" msgstr "3×5" msgid "3-Hole Punch (Landscape)" msgstr "三孔冲压(水平)" msgid "3-Hole Punch (Portrait)" msgstr "三孔冲压(垂直)" msgid "3-Hole Punch (Reverse Landscape)" msgstr "三孔冲压(å呿°´å¹³ï¼‰" msgid "3-Hole Punch (Reverse Portrait)" msgstr "三孔冲压(åå‘垂直)" msgid "3.00x1.00\"" msgstr "3.00×1.00 英寸" msgid "3.00x1.25\"" msgstr "3.00×1.25 英寸" msgid "3.00x2.00\"" msgstr "3.00×2.00 英寸" msgid "3.00x3.00\"" msgstr "3.00×3.00 英寸" msgid "3.00x5.00\"" msgstr "3.00×5.00 英寸" msgid "3.25x2.00\"" msgstr "3.25×2.00 英寸" msgid "3.25x5.00\"" msgstr "3.25×5.00 英寸" msgid "3.25x5.50\"" msgstr "3.25×5.50 英寸" msgid "3.25x5.83\"" msgstr "3.25×5.83 英寸" msgid "3.25x7.83\"" msgstr "3.25×7.83 英寸" msgid "3.5 x 5" msgstr "3.5×5" msgid "3.5\" Disk" msgstr "3.5 英寸ç£ç›˜" msgid "3.50x1.00\"" msgstr "3.50×1.00 英寸" msgid "30" msgstr "30" msgid "30 mm/sec." msgstr "30 毫米/ç§’" msgid "300 mm/sec." msgstr "300 毫米/ç§’" msgid "300dpi" msgstr "300 dpi" msgid "35" msgstr "35" msgid "360dpi" msgstr "360 dpi" msgid "360x180dpi" msgstr "360×180 dpi" msgid "4" msgstr "4" msgid "4 inches/sec." msgstr "4 英寸/ç§’" msgid "4-Hole Punch (Landscape)" msgstr "四孔冲压(水平)" msgid "4-Hole Punch (Portrait)" msgstr "四孔冲压(垂直)" msgid "4-Hole Punch (Reverse Landscape)" msgstr "四孔冲压(å呿°´å¹³ï¼‰" msgid "4-Hole Punch (Reverse Portrait)" msgstr "四孔冲压(åå‘垂直)" msgid "4.00x1.00\"" msgstr "4.00×1.00 英寸" msgid "4.00x13.00\"" msgstr "4.00×13.00 英寸" msgid "4.00x2.00\"" msgstr "4.00×2.00 英寸" msgid "4.00x2.50\"" msgstr "4.00×2.50 英寸" msgid "4.00x3.00\"" msgstr "4.00×3.00 英寸" msgid "4.00x4.00\"" msgstr "4.00×4.00 英寸" msgid "4.00x5.00\"" msgstr "4.00×5.00 英寸" msgid "4.00x6.00\"" msgstr "4.00×6.00 英寸" msgid "4.00x6.50\"" msgstr "4.00×6.50 英寸" msgid "40" msgstr "40" msgid "40 mm/sec." msgstr "40 毫米/ç§’" msgid "45" msgstr "45" msgid "5" msgstr "5" msgid "5 inches/sec." msgstr "5 英寸/ç§’" msgid "5 x 7" msgstr "5×7" msgid "50" msgstr "50" msgid "55" msgstr "55" msgid "6" msgstr "6" msgid "6 inches/sec." msgstr "6 英寸/ç§’" msgid "6.00x1.00\"" msgstr "6.00×1.00 英寸" msgid "6.00x2.00\"" msgstr "6.00×2.00 英寸" msgid "6.00x3.00\"" msgstr "6.00×3.00 英寸" msgid "6.00x4.00\"" msgstr "6.00×4.00 英寸" msgid "6.00x5.00\"" msgstr "6.00×5.00 英寸" msgid "6.00x6.00\"" msgstr "6.00×6.00 英寸" msgid "6.00x6.50\"" msgstr "6.00×6.50 英寸" msgid "60" msgstr "60" msgid "60 mm/sec." msgstr "60 毫米/ç§’" msgid "600dpi" msgstr "600 dpi" msgid "60dpi" msgstr "60 dpi" msgid "60x72dpi" msgstr "60×72 dpi" msgid "65" msgstr "65" msgid "7" msgstr "7" msgid "7 inches/sec." msgstr "7 英寸/ç§’" msgid "7 x 9" msgstr "7×9" msgid "70" msgstr "70" msgid "75" msgstr "75" msgid "8" msgstr "8" msgid "8 inches/sec." msgstr "8 英寸/ç§’" msgid "8 x 10" msgstr "8×10" msgid "8.00x1.00\"" msgstr "8.00×1.00 英寸" msgid "8.00x2.00\"" msgstr "8.00×2.00 英寸" msgid "8.00x3.00\"" msgstr "8.00×3.00 英寸" msgid "8.00x4.00\"" msgstr "8.00×4.00 英寸" msgid "8.00x5.00\"" msgstr "8.00×5.00 英寸" msgid "8.00x6.00\"" msgstr "8.00×6.00 英寸" msgid "8.00x6.50\"" msgstr "8.00×6.50 英寸" msgid "80" msgstr "80" msgid "80 mm/sec." msgstr "80 毫米/ç§’" msgid "85" msgstr "85" msgid "9" msgstr "9" msgid "9 inches/sec." msgstr "9 英寸/ç§’" msgid "9 x 11" msgstr "9×11" msgid "9 x 12" msgstr "9×12" msgid "9-Pin Series" msgstr "9 é’ˆåºåˆ—" msgid "90" msgstr "90" msgid "95" msgstr "95" msgid "?Invalid help command unknown." msgstr "?无效 未知帮助命令。" msgid "A Samba password is required to export printer drivers" msgstr "éœ€è¦ Samba 密ç ä»¥å¯¼å‡ºæ‰“å°æœºé©±åЍ" msgid "A Samba username is required to export printer drivers" msgstr "éœ€è¦ Samba 用户åä»¥å¯¼å‡ºæ‰“å°æœºé©±åЍ" #, c-format msgid "A class named \"%s\" already exists." msgstr "已存在å为“%sâ€çš„类。" #, c-format msgid "A printer named \"%s\" already exists." msgstr "已存在å为“%sâ€çš„æ‰“å°æœºã€‚" msgid "A0" msgstr "A0" msgid "A0 Long Edge" msgstr "A0 长边缘" msgid "A1" msgstr "A1" msgid "A1 Long Edge" msgstr "A1 长边缘" msgid "A10" msgstr "A10" msgid "A2" msgstr "A2" msgid "A2 Long Edge" msgstr "A2 长边缘" msgid "A3" msgstr "A3" msgid "A3 Long Edge" msgstr "A3 长边缘" msgid "A3 Oversize" msgstr "A3 超大" msgid "A3 Oversize Long Edge" msgstr "A3 超大长边缘" msgid "A4" msgstr "A4" msgid "A4 Long Edge" msgstr "A4 长边缘" msgid "A4 Oversize" msgstr "A4 超大" msgid "A4 Small" msgstr "A4 å°åž‹" msgid "A5" msgstr "A5" msgid "A5 Long Edge" msgstr "A5 长边缘" msgid "A5 Oversize" msgstr "A5 超大" msgid "A6" msgstr "A6" msgid "A6 Long Edge" msgstr "A6 长边缘" msgid "A7" msgstr "A7" msgid "A8" msgstr "A8" msgid "A9" msgstr "A9" msgid "ANSI A" msgstr "ANSI A" msgid "ANSI B" msgstr "ANSI B" msgid "ANSI C" msgstr "ANSI C" msgid "ANSI D" msgstr "ANSI D" msgid "ANSI E" msgstr "ANSI E" msgid "ARCH C" msgstr "ARCH C" msgid "ARCH C Long Edge" msgstr "ARCH C 长边缘" msgid "ARCH D" msgstr "ARCH D" msgid "ARCH D Long Edge" msgstr "ARCH D 长边缘" msgid "ARCH E" msgstr "ARCH E" msgid "ARCH E Long Edge" msgstr "ARCH E 长边缘" msgid "Accept Jobs" msgstr "接å—任务" msgid "Accepted" msgstr "已接å—" msgid "Accordian Fold" msgstr "手风ç´å¼æŠ˜çº¸æ³•" msgid "Add Class" msgstr "添加类" msgid "Add Printer" msgstr "æ·»åŠ æ‰“å°æœº" msgid "Add RSS Subscription" msgstr "添加 RSS 订阅" msgid "Address" msgstr "地å€" msgid "Administration" msgstr "管ç†" msgid "Advanced Photo Paper" msgstr "高级照片纸" msgid "Alternate" msgstr "交替" msgid "Alternate Roll" msgstr "交替滚筒" msgid "Aluminum" msgstr "é“" msgid "Always" msgstr "总是" msgid "AppSocket/HP JetDirect" msgstr "AppSocket/HP JetDirect" msgid "Applicator" msgstr "æ¶‚è¯å™¨" msgid "Archival Envelope" msgstr "档案用信å°" msgid "Archival Fabric" msgstr "档案用编织物" msgid "Archival Paper" msgstr "档案用纸张" msgid "Archival Photo Paper" msgstr "档案用照片纸" #, c-format msgid "Attempt to set %s printer-state to bad value %d." msgstr "å°è¯•设置 %s æ‰“å°æœºçжæ€ä¸ºæ— æ•ˆå€¼ %d。" #, c-format msgid "Attribute \"%s\" is in the wrong group." msgstr "属性“%sâ€ä½äºŽé”™è¯¯çš„组。" #, c-format msgid "Attribute \"%s\" is the wrong value type." msgstr "属性“%sâ€ä¸æ˜¯æ­£ç¡®çš„值类型。" #, c-format msgid "Attribute groups are out of order (%x < %x)." msgstr "属性组排åºé”™ä¹±ï¼ˆ%x < %x)。" msgid "Automatic" msgstr "自动" msgid "B0" msgstr "B0" msgid "B1" msgstr "B1" msgid "B10" msgstr "B10" msgid "B2" msgstr "B2" msgid "B3" msgstr "B3" msgid "B4" msgstr "B4" msgid "B5" msgstr "B5" msgid "B5 Oversize" msgstr "B5 超大" msgid "B6" msgstr "B6" msgid "B7" msgstr "B7" msgid "B8" msgstr "B8" msgid "B9" msgstr "B9" msgid "Back Print Film" msgstr "å°ç‰‡ç”¨èƒ¶ç‰‡" #, c-format msgid "Bad 'document-format' value \"%s\"." msgstr "无效的“document-formatâ€å€¼â€œ%sâ€ã€‚" msgid "Bad NULL dests pointer" msgstr "无效的 NULL 目标指针" msgid "Bad OpenGroup" msgstr "无效的 OpenGroup 值" msgid "Bad OpenUI/JCLOpenUI" msgstr "无效的 OpenUI/JCLOpenUI 值" msgid "Bad OrderDependency" msgstr "无效的 OrderDependency 值" msgid "Bad PPD cache file." msgstr "无效的 PPD 缓存文件。" msgid "Bad PPD file." msgstr "无效的 PPD 文件。" msgid "Bad Request" msgstr "无效请求" msgid "Bad SNMP version number" msgstr "无效的 SNMP 版本å·" msgid "Bad UIConstraints" msgstr "无锡噢的 UIConstraints 值" msgid "Bad arguments to function" msgstr "å‡½æ•°çš„å‚æ•°æ— æ•ˆ" #, c-format msgid "Bad copies value %d." msgstr "无效的副本值 %d。" msgid "Bad custom parameter" msgstr "æ— æ•ˆçš„è‡ªå®šä¹‰å‚æ•°" #, c-format msgid "Bad device-uri \"%s\"." msgstr "无效的 device-uri 值“%sâ€ã€‚" #, c-format msgid "Bad device-uri scheme \"%s\"." msgstr "无效的 device-uri 方案“%sâ€ã€‚" #, c-format msgid "Bad document-format \"%s\"." msgstr "无效的 document-format 值“%sâ€ã€‚" #, c-format msgid "Bad document-format-default \"%s\"." msgstr "无效的 document-format-default 值“%sâ€ã€‚" msgid "Bad filename buffer" msgstr "无效的文件å缓存" msgid "Bad hostname/address in URI" msgstr "URI 中的主机å/åœ°å€æ— æ•ˆ" #, c-format msgid "Bad job-name value: %s" msgstr "无效的 job-name 值:%s" msgid "Bad job-name value: Wrong type or count." msgstr "无效的 job-name 支æŒï¼šæ— æ•ˆçš„类型或åºå·ã€‚" msgid "Bad job-priority value." msgstr "无效的 job-priority 值。" #, c-format msgid "Bad job-sheets value \"%s\"." msgstr "无效的 job-sheets 值“%sâ€ã€‚" msgid "Bad job-sheets value type." msgstr "无效的 job-sheets 值类型。" msgid "Bad job-state value." msgstr "无效的 job-state 值。" #, c-format msgid "Bad job-uri \"%s\"." msgstr "无效的 job-uri 值“%sâ€ã€‚" #, c-format msgid "Bad notify-pull-method \"%s\"." msgstr "无效的 notify-pull-method 值“%sâ€ã€‚" #, c-format msgid "Bad notify-recipient-uri \"%s\"." msgstr "无效的 notify-recipient-uri 值“%sâ€ã€‚" #, c-format msgid "Bad number-up value %d." msgstr "无效的 number-up 值 %d。" #, c-format msgid "Bad option + choice on line %d." msgstr "行 %d 中存在无效的选项 + 选择。" #, c-format msgid "Bad page-ranges values %d-%d." msgstr "无效的 page-range 值 %d-%d。" msgid "Bad port number in URI" msgstr "URI 中的端å£å·æ— æ•ˆ" #, c-format msgid "Bad port-monitor \"%s\"." msgstr "无效的 port-monitor 值“%sâ€ã€‚" #, c-format msgid "Bad printer-state value %d." msgstr "无效的 printer-state 值 %d。" msgid "Bad printer-uri." msgstr "无效的 printer-uri 值。" #, c-format msgid "Bad request ID %d." msgstr "无效的请求 ID %d。" #, c-format msgid "Bad request version number %d.%d." msgstr "æ— æ•ˆçš„è¯·æ±‚ç‰ˆæœ¬å· %d.%d。" #, c-format msgid "Bad requesting-user-name value: %s" msgstr "" msgid "Bad resource in URI" msgstr "URI ä¸­çš„èµ„æºæ— æ•ˆ" msgid "Bad scheme in URI" msgstr "URI 中的方案无效" msgid "Bad subscription ID" msgstr "无效的订阅 ID" msgid "Bad username in URI" msgstr "URI ä¸­çš„ç”¨æˆ·åæ— æ•ˆ" msgid "Bad value string" msgstr "无效的值字串" msgid "Bad/empty URI" msgstr "无效或空的 URI" msgid "Bale" msgstr "10 令" msgid "Banners" msgstr "æ¡å¹…" msgid "Bind" msgstr "æ†æ‰Ž" msgid "Bind (Landscape)" msgstr "æ†æ‰Žï¼ˆæ°´å¹³ï¼‰" msgid "Bind (Portrait)" msgstr "æ†æ‰Žï¼ˆåž‚直)" msgid "Bind (Reverse Landscape)" msgstr "æ†æ‰Žï¼ˆå呿°´å¹³ï¼‰" msgid "Bind (Reverse Portrait)" msgstr "æ†æ‰Žï¼ˆåå‘垂直)" msgid "Bond Envelope" msgstr "è¯åˆ¸ä¿¡å°" msgid "Bond Paper" msgstr "è¯åˆ¸çº¸" msgid "Booklet" msgstr "册å­" msgid "Booklet Maker" msgstr "å†Œå­æœº" #, c-format msgid "Boolean expected for waiteof option \"%s\"." msgstr "waiteof 选项“%sâ€é¢„期布里值。" msgid "Bottom" msgstr "底部" msgid "Bottom Tray" msgstr "底部纸盘" msgid "Buffer overflow detected, aborting." msgstr "检测到缓冲区溢出,正在中止。" msgid "CD" msgstr "CD" msgid "CMYK" msgstr "CMYK" msgid "CPCL Label Printer" msgstr "CPCL æ ‡ç­¾æ‰“å°æœº" msgid "Cancel Jobs" msgstr "å–æ¶ˆä»»åŠ¡" msgid "Cancel RSS Subscription" msgstr "å–æ¶ˆ RSS 订阅" msgid "Canceling print job." msgstr "æ­£åœ¨å–æ¶ˆæ‰“å°ä»»åŠ¡" msgid "Cannot change printer-is-shared for remote queues." msgstr "无法为远程队列更改 printer-is-shared 值。" msgid "Cannot share a remote Kerberized printer." msgstr "无法共享远程的通过 Kerberos 授æƒçš„æ‰“å°æœºã€‚" msgid "Cardboard" msgstr "纸æ¿" msgid "Cardstock" msgstr "é‡ç£…纸" msgid "Cassette" msgstr "ç£å¸¦" msgid "Center" msgstr "中部" msgid "Center Tray" msgstr "中部纸盘" msgid "Change Settings" msgstr "更改选项" #, c-format msgid "Character set \"%s\" not supported." msgstr "ä¸å—支æŒçš„字符集“%sâ€ã€‚" msgid "Classes" msgstr "ç±»" msgid "Clean Print Heads" msgstr "æ¸…ç†æ‰“å°å¤´" msgid "Close-Job doesn't support the job-uri attribute." msgstr "Close-Job æŒ‡ä»¤ä¸æ”¯æŒ job-uri 属性。" msgid "Coat" msgstr "æ¶‚æ–™" msgid "Coated Envelope" msgstr "æ¶‚é¢ä¿¡å°" msgid "Coated Paper" msgstr "æ¶‚é¢çº¸" msgid "Color" msgstr "彩色" msgid "Color Mode" msgstr "色彩模å¼" msgid "Colored Labels" msgstr "彩色标签" msgid "" "Commands may be abbreviated. Commands are:\n" "\n" "exit help quit status ?" msgstr "" "命令å¯èƒ½ä¸ºç¼©å†™ã€‚å¯ç”¨å‘½ä»¤å¦‚下:\n" "\n" "exit help quit status ?" msgid "Community name uses indefinite length" msgstr "社群åç§°ä¸é™é•¿åº¦" msgid "Connected to printer." msgstr "å·²è¿žæŽ¥åˆ°æ‰“å°æœºã€‚" msgid "Connecting to printer." msgstr "æ­£åœ¨è¿žæŽ¥åˆ°æ‰“å°æœºã€‚" msgid "Continue" msgstr "ç»§ç»­" msgid "Continuous" msgstr "连续" msgid "Continuous Long" msgstr "长连续" msgid "Continuous Short" msgstr "短连续" msgid "Control file sent successfully." msgstr "å·²æˆåŠŸå‘é€æŽ§åˆ¶æ–‡ä»¶ã€‚" msgid "Copying print data." msgstr "正在å¤åˆ¶æ‰“å°æ•°æ®ã€‚" msgid "Cotton Envelope" msgstr "棉质信å°" msgid "Cotton Paper" msgstr "棉质纸张" msgid "Cover" msgstr "å°é¢" msgid "Created" msgstr "创建时间" msgid "Credentials do not validate against site CA certificate." msgstr "无法与站点 CA è¯ä¹¦éªŒè¯å‡­æ®ã€‚" msgid "Credentials have expired." msgstr "凭æ®å·²è¿‡æœŸã€‚" msgid "Custom" msgstr "自定义" msgid "CustominCutInterval" msgstr "CustominCutInterval" msgid "CustominTearInterval" msgstr "CustominTearInterval" msgid "Cut" msgstr "剪切" msgid "Cut Media" msgstr "剪切媒体" msgid "Cutter" msgstr "车床刀具" msgid "DVD" msgstr "DVD" msgid "Dark" msgstr "暗色" msgid "Darkness" msgstr "暗度" msgid "Data file sent successfully." msgstr "å·²æˆåŠŸå‘逿•°æ®æ–‡ä»¶ã€‚" msgid "Deep Color" msgstr "深色" msgid "Delete Class" msgstr "删除类" msgid "Delete Printer" msgstr "åˆ é™¤æ‰“å°æœº" msgid "DeskJet Series" msgstr "DeskJet 系列" #, c-format msgid "Destination \"%s\" is not accepting jobs." msgstr "目标“%sâ€ä¸æŽ¥å—任务。" #, c-format msgid "" "Device: uri = %s\n" " class = %s\n" " info = %s\n" " make-and-model = %s\n" " device-id = %s\n" " location = %s" msgstr "" "设备:\turi = %s\n" "\tclass = %s\n" "\tinfo = %s\n" "\tmake-and-model = %s\n" "\tdevice-id = %s\n" "\tlocation = %s" msgid "Direct Thermal Media" msgstr "直接热æ•介质" #, c-format msgid "Directory \"%s\" contains a relative path." msgstr "目录“%sâ€åŒ…å«ç›¸å¯¹è·¯å¾„。" #, c-format msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "目录“%sâ€å¸¦æœ‰ä¸å®‰å…¨çš„æƒé™è®¸å¯ (0%o/uid=%d/gid=%d)。" #, c-format msgid "Directory \"%s\" is a file." msgstr "目录“%sâ€æ˜¯ä¸€ä¸ªæ–‡ä»¶ã€‚" #, c-format msgid "Directory \"%s\" not available: %s" msgstr "目录“%sâ€ä¸å¯ç”¨ï¼š%s" #, c-format msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "目录“%sâ€çš„æƒé™è®¸å¯æ— é—®é¢˜ (0%o/uid=%d/gid=%d)。" msgid "Disabled" msgstr "å·²ç¦ç”¨" msgid "Disc" msgstr "光盘" #, c-format msgid "Document #%d does not exist in job #%d." msgstr "任务 #%2$d 中ä¸åŒ…嫿–‡æ¡£ #%1$d。" msgid "Double Gate Fold" msgstr "å°é¢æ‹‰é¡µ" msgid "Double Staple (Landscape)" msgstr "å°é¢æ‹‰é¡µï¼ˆæ°´å¹³ï¼‰" msgid "Double Staple (Portrait)" msgstr "å°é¢æ‹‰é¡µï¼ˆåž‚直)" msgid "Double Staple (Reverse Landscape)" msgstr "å°é¢æ‹‰é¡µï¼ˆå呿°´å¹³ï¼‰" msgid "Double Staple (Reverse Portrait)" msgstr "å°é¢æ‹‰é¡µï¼ˆåå‘垂直)" msgid "Double Wall Cardboard" msgstr "åŒå±‚纸æ¿" msgid "Draft" msgstr "è‰ç¨¿" msgid "Dry Film" msgstr "干膜" msgid "Duplexer" msgstr "åŒå·¥å™¨" msgid "Dymo" msgstr "Dymo" msgid "EPL1 Label Printer" msgstr "EPL1 æ ‡ç­¾æ‰“å°æœº" msgid "EPL2 Label Printer" msgstr "EPL2 æ ‡ç­¾æ‰“å°æœº" msgid "Edit Configuration File" msgstr "编辑é…置文件" msgid "Embossing Foil" msgstr "压花彩箔" msgid "Empty PPD file." msgstr "空 PPD 文件。" msgid "Encryption is not supported." msgstr "䏿”¯æŒåŠ å¯†ã€‚" msgid "End Board" msgstr "结尾æ¿" #. TRANSLATORS: Banner/cover sheet after the print job. msgid "Ending Banner" msgstr "结尾横幅" msgid "Engineering Z Fold" msgstr "工程用 Z 折纸法" msgid "English" msgstr "英语" msgid "" "Enter your username and password or the root username and password to access " "this page. If you are using Kerberos authentication, make sure you have a " "valid Kerberos ticket." msgstr "" "输入你的用户åå’Œå¯†ç æˆ– root 的用户å和密ç ä»¥è®¿é—®æ­¤é¡µé¢ã€‚如果您正在使用 " "Kerberos 认è¯ï¼Œè¯·æ±‚确定您拥有有效的 Kerberos 凭æ®ã€‚" msgid "Envelope" msgstr "ä¿¡å°" msgid "Envelope #10" msgstr "10 å·ä¿¡å°" msgid "Envelope #11" msgstr "11 å·ä¿¡å°" msgid "Envelope #12" msgstr "12 å·ä¿¡å°" msgid "Envelope #14" msgstr "14 å·ä¿¡å°" msgid "Envelope #9" msgstr "9 å·ä¿¡å°" msgid "Envelope B4" msgstr "B4 ä¿¡å°" msgid "Envelope B5" msgstr "B5 ä¿¡å°" msgid "Envelope B6" msgstr "B6 ä¿¡å°" msgid "Envelope C0" msgstr "C0 ä¿¡å°" msgid "Envelope C1" msgstr "C1 ä¿¡å°" msgid "Envelope C2" msgstr "C2 ä¿¡å°" msgid "Envelope C3" msgstr "C3 ä¿¡å°" msgid "Envelope C4" msgstr "C4 ä¿¡å°" msgid "Envelope C5" msgstr "C5 ä¿¡å°" msgid "Envelope C6" msgstr "C6 ä¿¡å°" msgid "Envelope C65" msgstr "C65 ä¿¡å°" msgid "Envelope C7" msgstr "C7 ä¿¡å°" msgid "Envelope Choukei 3" msgstr "Choukei 3 ä¿¡å°" msgid "Envelope Choukei 3 Long Edge" msgstr "Choukei 3 长边缘信å°" msgid "Envelope Choukei 4" msgstr "Choukei 4 ä¿¡å°" msgid "Envelope Choukei 4 Long Edge" msgstr "Choukei 4 长边缘信å°" msgid "Envelope DL" msgstr "DL ä¿¡å°" msgid "Envelope Feed" msgstr "ä¿¡å°å–‚纸å£" msgid "Envelope Invite" msgstr "请柬信å°" msgid "Envelope Italian" msgstr "æ„大利信å°" msgid "Envelope Kaku2" msgstr "Kaku2 ä¿¡å°" msgid "Envelope Kaku2 Long Edge" msgstr "Kaku2 长边缘信å°" msgid "Envelope Kaku3" msgstr "Kaku3 ä¿¡å°" msgid "Envelope Kaku3 Long Edge" msgstr "Kaku2 长边缘信å°" msgid "Envelope Monarch" msgstr "å›ä¸»ä¿¡å°" msgid "Envelope PRC1" msgstr "中国一å·ä¿¡å°" msgid "Envelope PRC1 Long Edge" msgstr "中国一å·é•¿è¾¹ç¼˜ä¿¡å°" msgid "Envelope PRC10" msgstr "中国åå·ä¿¡å°" msgid "Envelope PRC10 Long Edge" msgstr "中国åå·é•¿è¾¹ç¼˜ä¿¡å°" msgid "Envelope PRC2" msgstr "中国二å·ä¿¡å°" msgid "Envelope PRC2 Long Edge" msgstr "中国二å·é•¿è¾¹ç¼˜ä¿¡å°" msgid "Envelope PRC3" msgstr "中国三å·ä¿¡å°" msgid "Envelope PRC3 Long Edge" msgstr "中国三å·é•¿è¾¹ç¼˜ä¿¡å°" msgid "Envelope PRC4" msgstr "中国四å·ä¿¡å°" msgid "Envelope PRC4 Long Edge" msgstr "中国四å·é•¿è¾¹ç¼˜ä¿¡å°" msgid "Envelope PRC5 Long Edge" msgstr "中国五å·é•¿è¾¹ç¼˜ä¿¡å°" msgid "Envelope PRC5PRC5" msgstr "中国五å·ä¿¡å°" msgid "Envelope PRC6" msgstr "中国六å·ä¿¡å°" msgid "Envelope PRC6 Long Edge" msgstr "中国六å·é•¿è¾¹ç¼˜ä¿¡å°" msgid "Envelope PRC7" msgstr "中国七å·ä¿¡å°" msgid "Envelope PRC7 Long Edge" msgstr "中国七å·é•¿è¾¹ç¼˜ä¿¡å°" msgid "Envelope PRC8" msgstr "中国八å·ä¿¡å°" msgid "Envelope PRC8 Long Edge" msgstr "中国八å·é•¿è¾¹ç¼˜ä¿¡å°" msgid "Envelope PRC9" msgstr "中国ä¹å·ä¿¡å°" msgid "Envelope PRC9 Long Edge" msgstr "中国ä¹å·é•¿è¾¹ç¼˜ä¿¡å°" msgid "Envelope Personal" msgstr "个人信å°" msgid "Envelope You4" msgstr "You4 ä¿¡å°" msgid "Envelope You4 Long Edge" msgstr "You4 长边缘信å°" msgid "Environment Variables:" msgstr "环境å˜é‡ï¼š" msgid "Epson" msgstr "Epson" msgid "Error Policy" msgstr "错误策略" msgid "Error reading raster data." msgstr "è¯»å–æ …格化数æ®å‡ºé”™ã€‚" msgid "Error sending raster data." msgstr "å‘逿 …格化数æ®å‡ºé”™ã€‚" msgid "Error: need hostname after \"-h\" option." msgstr "错误:“-hâ€é€‰é¡¹åŽéœ€è¦ä¸»æœºå。" msgid "European Fanfold" msgstr "" msgid "European Fanfold Legal" msgstr "" msgid "Every 10 Labels" msgstr "æ¯ 10 个标签" msgid "Every 2 Labels" msgstr "æ¯ 2 个标签" msgid "Every 3 Labels" msgstr "æ¯ 3 个标签" msgid "Every 4 Labels" msgstr "æ¯ 4 个标签" msgid "Every 5 Labels" msgstr "æ¯ 5 个标签" msgid "Every 6 Labels" msgstr "æ¯ 6 个标签" msgid "Every 7 Labels" msgstr "æ¯ 7 个标签" msgid "Every 8 Labels" msgstr "æ¯ 8 个标签" msgid "Every 9 Labels" msgstr "æ¯ 9 个标签" msgid "Every Label" msgstr "æ¯ä¸ªæ ‡ç­¾" msgid "Everyday Glossy Photo Paper" msgstr "日常用光é¢ç…§ç‰‡çº¸" msgid "Everyday Matte Paper" msgstr "日常用雾é¢çº¸" msgid "Executive" msgstr "执行" msgid "Expectation Failed" msgstr "未满足期望" msgid "Export Printers to Samba" msgstr "å°†æ‰“å°æœºå¯¼å‡ºåˆ° Samba" msgid "Expressions:" msgstr "表达å¼ï¼š" msgid "Extra Heavyweight Paper" msgstr "è¶…é‡ç£…纸" msgid "FAIL" msgstr "失败" msgid "Fabric" msgstr "编织物" msgid "Face Down" msgstr "æœä¸‹" msgid "Face Up" msgstr "æœä¸Š" msgid "Fast Grayscale" msgstr "快速ç°åº¦" #, c-format msgid "File \"%s\" contains a relative path." msgstr "文件“%sâ€åŒ…å«ç›¸å¯¹è·¯å¾„。" #, c-format msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." msgstr "文件“%sâ€å¸¦æœ‰ä¸å®‰å…¨çš„æƒé™è®¸å¯ (0%o/uid=%d/gid=%d)。" #, c-format msgid "File \"%s\" is a directory." msgstr "文件“%sâ€æ˜¯ä¸€ä¸ªç›®å½•。" #, c-format msgid "File \"%s\" not available: %s" msgstr "文件“%sâ€ä¸å¯ç”¨ï¼š%s" #, c-format msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." msgstr "文件“%sâ€çš„æƒé™è®¸å¯æ— é—®é¢˜ (0%o/uid=%d/gid=%d)。" msgid "File Folder" msgstr "文件夹" #, c-format msgid "" "File device URIs have been disabled. To enable, see the FileDevice directive " "in \"%s/cups-files.conf\"." msgstr "" "å·²ç¦ç”¨æ–‡ä»¶è®¾å¤‡ URI。è¦å¯ç”¨æ­¤åŠŸèƒ½ï¼Œå‚阅“%s/cups-files.confâ€ä¸­çš„ FileDevice å‚" "数。" msgid "Film" msgstr "胶片" msgid "Fine Envelope" msgstr "精致信å°" #, c-format msgid "Finished page %d." msgstr "已完æˆç¬¬ %d 页。" msgid "Flexo Base" msgstr "柔性版基" msgid "Flexo Photo Polymer" msgstr "柔性照片èšåˆç‰©" msgid "Flute" msgstr "瓦楞纸" msgid "Foil" msgstr "烫压" msgid "Fold" msgstr "折纸" msgid "Folio" msgstr "对开本" msgid "Forbidden" msgstr "å·²ç¦æ­¢" msgid "Found" msgstr "" msgid "Full Cut Tabs" msgstr "完整è£å‰ªæ ‡ç­¾" msgid "Gate Fold" msgstr "对开页" msgid "General" msgstr "常规" msgid "Generic" msgstr "通用" msgid "Get-Response-PDU uses indefinite length" msgstr "Get-Response-PDU 使用无é™é•¿åº¦" msgid "Glass" msgstr "玻璃" msgid "Glass Colored" msgstr "彩色玻璃" msgid "Glass Opaque" msgstr "ä¸é€æ˜ŽçŽ»ç’ƒ" msgid "Glass Surfaced" msgstr "æ¶‚é¢çŽ»ç’ƒ" msgid "Glass Textured" msgstr "æè´¨çŽ»ç’ƒ" msgid "Glossy Brochure Paper" msgstr "光颿µ·æŠ¥çº¸" msgid "Glossy Fabric" msgstr "å…‰é¢ç¼–织物" msgid "Glossy Labels" msgstr "光颿 ‡ç­¾" msgid "Glossy Optical Disc" msgstr "å…‰é¢å…‰ç›˜" msgid "Glossy Paper" msgstr "å…‰é¢çº¸" msgid "Glossy Photo Paper" msgstr "å…‰é¢ç…§ç‰‡çº¸" msgid "Got a printer-uri attribute but no job-id." msgstr "获å–到了 printer-uri å±žæ€§å´æœªèŽ·å–到 job-id。" msgid "Gravure Cylinder" msgstr "凹尿»šç­’" msgid "Grayscale" msgstr "ç°åº¦" msgid "HP" msgstr "HP" msgid "Hagaki" msgstr "å¶ä¹¦" msgid "Half Fold" msgstr "对折" msgid "Half Z Fold" msgstr "åŠ Z 折" msgid "Hanging Folder" msgstr "倒挂文件夹" msgid "Hash buffer too small." msgstr "哈希值缓冲区太å°ã€‚" msgid "Heavyweight Coated Paper" msgstr "é‡ç£…æ¶‚é¢çº¸" msgid "Heavyweight Envelope" msgstr "é‡ç£…ä¿¡å°" msgid "Heavyweight Paper" msgstr "é‡ç£…纸" msgid "Help file not in index." msgstr "帮助文件ä¸åœ¨ç´¢å¼•中。" msgid "High" msgstr "高" msgid "High Gloss Fabric" msgstr "高光编织物" msgid "High Gloss Labels" msgstr "高光标签" msgid "High Gloss Optical Disc" msgstr "高光光盘" msgid "High Gloss Photo Paper" msgstr "高光照片纸" msgid "IPP 1setOf attribute with incompatible value tags." msgstr "带有ä¸å…¼å®¹å€¼æ ‡ç­¾çš„ IPP 1setOf 属性。" msgid "IPP attribute has no name." msgstr "IPP 属性未命å。" msgid "IPP attribute is not a member of the message." msgstr "IPP å±žæ€§ä¸æ˜¯æ¶ˆæ¯æˆå‘˜ã€‚" msgid "IPP begCollection value not 0 bytes." msgstr "IPP begCollection 值大å°ä¸æ˜¯ 0 字节。" msgid "IPP boolean value not 1 byte." msgstr "IPP 布里值大å°ä¸æ˜¯ 1 字节。" msgid "IPP date value not 11 bytes." msgstr "IPP 日期值大å°ä¸æ˜¯ 11 字节。" msgid "IPP endCollection value not 0 bytes." msgstr "IPP endCollection 值大å°ä¸æ˜¯ 0 字节。" msgid "IPP enum value not 4 bytes." msgstr "IPP enum 值大å°ä¸æ˜¯ 4 字节。" msgid "IPP extension tag larger than 0x7FFFFFFF." msgstr "IPP 扩展标签大于 0x7FFFFFFF。" msgid "IPP integer value not 4 bytes." msgstr "IPP 整数值大å°ä¸æ˜¯ 4 字节。" msgid "IPP language length overflows value." msgstr "IPP 语言长度溢出值é™åˆ¶ã€‚" msgid "IPP language length too large." msgstr "IPP 语言长度太长。" msgid "IPP member name is not empty." msgstr "IPP æˆå‘˜åç§°éžç©ºã€‚" msgid "IPP memberName value is empty." msgstr "IPP memberName 值为空。" msgid "IPP memberName with no attribute." msgstr "IPP memberName 无属性。" msgid "IPP name larger than 32767 bytes." msgstr "IPP å称大å°è¶…过 32767 字节。" msgid "IPP nameWithLanguage value less than minimum 4 bytes." msgstr "IPP nameWithLanguage 值大å°å°äºŽ 4 字节的最å°é™åˆ¶ã€‚" msgid "IPP octetString length too large." msgstr "IPP octetString 长度过长。" msgid "IPP rangeOfInteger value not 8 bytes." msgstr "IPP rangeOfInteger 值大å°ä¸æ˜¯ 8 字节。" msgid "IPP resolution value not 9 bytes." msgstr "IPP 分辨率值大å°ä¸æ˜¯ 9 字节。" msgid "IPP string length overflows value." msgstr "IPP 字串长度超过溢出值é™åˆ¶ã€‚" msgid "IPP textWithLanguage value less than minimum 4 bytes." msgstr "IPP textWithLanguage 值大å°å°äºŽ 4 字节的最å°é™åˆ¶ã€‚" msgid "IPP value larger than 32767 bytes." msgstr "IPP 值大å°è¶…过 32767 字节。" msgid "ISOLatin1" msgstr "ISOLatin1" msgid "Illegal control character" msgstr "éžæ³•控制字符" msgid "Illegal main keyword string" msgstr "éžæ³•主关键è¯å­—串" msgid "Illegal option keyword string" msgstr "éžæ³•选项关键è¯å­—串" msgid "Illegal translation string" msgstr "éžæ³•翻译字串" msgid "Illegal whitespace character" msgstr "éžæ³•空白字符" msgid "Image Setter Paper" msgstr "底片输出机纸" msgid "Imaging Cylinder" msgstr "å›¾åƒæ»šç­’" msgid "Inkjet Envelope" msgstr "喷墨信å°" msgid "Inkjet Labels" msgstr "喷墨标签" msgid "Inkjet Paper" msgstr "喷墨纸" msgid "Installable Options" msgstr "å¯å®‰è£…选项" msgid "Installed" msgstr "已安装" msgid "IntelliBar Label Printer" msgstr "IntelliBar æ ‡ç­¾æ‰“å°æœº" msgid "Intellitech" msgstr "Intellitech" msgid "Internal Server Error" msgstr "内部æœåŠ¡å™¨é”™è¯¯" msgid "Internal error" msgstr "内部错误" msgid "Internet Postage 2-Part" msgstr "网邮 2 部" msgid "Internet Postage 3-Part" msgstr "网邮 3 部" msgid "Internet Printing Protocol" msgstr "互è”网打å°åè®®" msgid "Invalid media name arguments." msgstr "无效的媒体åç§°å‚æ•°ã€‚" msgid "Invalid media size." msgstr "无效的媒体大å°ã€‚" msgid "Invalid ppd-name value." msgstr "无效的 ppd-name 值。" #, c-format msgid "Invalid printer command \"%s\"." msgstr "æ— æ•ˆçš„æ‰“å°æœºå‘½ä»¤â€œ%sâ€ã€‚" msgid "JCL" msgstr "JCL" msgid "JIS B0" msgstr "JIS B0" msgid "JIS B1" msgstr "JIS B1" msgid "JIS B10" msgstr "JIS B10" msgid "JIS B2" msgstr "JIS B2" msgid "JIS B3" msgstr "JIS B3" msgid "JIS B4" msgstr "JIS B4" msgid "JIS B4 Long Edge" msgstr "JIS B4 长边缘" msgid "JIS B5" msgstr "JIS B5" msgid "JIS B5 Long Edge" msgstr "JIS B5 长边缘" msgid "JIS B6" msgstr "JIS B6" msgid "JIS B6 Long Edge" msgstr "JIS B6 长边缘" msgid "JIS B7" msgstr "JIS B7" msgid "JIS B8" msgstr "JIS B8" msgid "JIS B9" msgstr "JIS B9" #, c-format msgid "Job #%d cannot be restarted - no files." msgstr "无法é‡å¯ä»»åŠ¡ #%d — 没有文件。" #, c-format msgid "Job #%d does not exist." msgstr "任务 #%d ä¸å­˜åœ¨ã€‚" #, c-format msgid "Job #%d is already aborted - can't cancel." msgstr "任务 #%d 已中止 — æ— æ³•å–æ¶ˆã€‚" #, c-format msgid "Job #%d is already canceled - can't cancel." msgstr "任务 #%d 已喿¶ˆ — æ— æ³•å–æ¶ˆã€‚" #, c-format msgid "Job #%d is already completed - can't cancel." msgstr "任务 #%d å·²å®Œæˆ â€” æ— æ³•å–æ¶ˆã€‚" #, c-format msgid "Job #%d is finished and cannot be altered." msgstr "任务 #%d 已完æˆä¸”ä¸å¯æ›´åŠ¨ã€‚" #, c-format msgid "Job #%d is not complete." msgstr "任务 #%d 未完æˆã€‚" #, c-format msgid "Job #%d is not held for authentication." msgstr "任务 #%d æœªè¢«è®¤è¯æ‰£ç•™ã€‚" #, c-format msgid "Job #%d is not held." msgstr "任务 #%d 未被扣留。" msgid "Job Completed" msgstr "任务已完æˆ" msgid "Job Created" msgstr "任务已创建" msgid "Job Options Changed" msgstr "任务选项更动" msgid "Job Stopped" msgstr "ä»»åŠ¡å·²åœæ­¢" msgid "Job is completed and cannot be changed." msgstr "任务已完æˆä¸”ä¸èƒ½æ›´æ”¹ã€‚" msgid "Job operation failed" msgstr "任务æ“作失败" msgid "Job state cannot be changed." msgstr "无法更改任务状æ€ã€‚" msgid "Job subscriptions cannot be renewed." msgstr "无法为任务订阅续期。" msgid "Jobs" msgstr "任务" msgid "Jog" msgstr "åž›é½" msgid "LPD/LPR Host or Printer" msgstr "LPD/LPR ä¸»æœºæˆ–æ‰“å°æœº" msgid "Label Printer" msgstr "æ ‡ç­¾æ‰“å°æœº" msgid "Label Top" msgstr "标签顶部" msgid "Labels" msgstr "标签" msgid "Laminate" msgstr "裱" msgid "Laminating Foil" msgstr "裱箔" #, c-format msgid "Language \"%s\" not supported." msgstr "䏿”¯æŒçš„语言“%sâ€ã€‚" msgid "Large Address" msgstr "大地å€" msgid "Large Capacity" msgstr "大容é‡" msgid "Large Capacity Tray" msgstr "大容é‡çº¸ç›˜" msgid "LaserJet Series PCL 4/5" msgstr "LaserJet 系列 PCL 4/5" msgid "Left" msgstr "å·¦" msgid "Left Gate Fold" msgstr "左对开页" msgid "Left Tray" msgstr "左纸盘" msgid "Letter Fold" msgstr "信函折法" msgid "Letter Oversize" msgstr "信函超大" msgid "Letter Oversize Long Edge" msgstr "信函超大长边缘" msgid "Letterhead" msgstr "笺头" msgid "Light" msgstr "è½»" msgid "Lightweight Envelope" msgstr "轻型信å°" msgid "Lightweight Paper" msgstr "轻型纸张" msgid "Line longer than the maximum allowed (255 characters)" msgstr "行长度超过å…许的最大值(255 字符)" msgid "List Available Printers" msgstr "列出å¯ç”¨æ‰“å°æœº" msgid "Load paper." msgstr "装入纸张。" msgid "Local printer created." msgstr "å·²åˆ›å»ºæœ¬åœ°æ‰“å°æœºã€‚" msgid "Long-Edge (Portrait)" msgstr "长边缘(竖直)" msgid "Looking for printer." msgstr "æ­£åœ¨å¯»æ‰¾æ‰“å°æœºã€‚" msgid "Mailbox 1" msgstr "1 å·ä¿¡ç®±" msgid "Mailbox 10" msgstr "10 å·ä¿¡ç®±" msgid "Mailbox 2" msgstr "2 å·ä¿¡ç®±" msgid "Mailbox 3" msgstr "3 å·ä¿¡ç®±" msgid "Mailbox 4" msgstr "4 å·ä¿¡ç®±" msgid "Mailbox 5" msgstr "5 å·ä¿¡ç®±" msgid "Mailbox 6" msgstr "6 å·ä¿¡ç®±" msgid "Mailbox 7" msgstr "7 å·ä¿¡ç®±" msgid "Mailbox 8" msgstr "8 å·ä¿¡ç®±" msgid "Mailbox 9" msgstr "9 å·ä¿¡ç®±" msgid "Main" msgstr "主队列" msgid "Main Roll" msgstr "主滚筒" msgid "Manual" msgstr "手动" msgid "Manual Feed" msgstr "手动喂纸" msgid "Matte Brochure Paper" msgstr "雾颿µ·æŠ¥çº¸" msgid "Matte Cover Paper" msgstr "雾é¢å°é¢çº¸" msgid "Matte Fabric" msgstr "雾é¢ç¼–织物" msgid "Matte Labels" msgstr "雾颿 ‡ç­¾" msgid "Matte Optical Disc" msgstr "雾é¢å…‰ç›˜" msgid "Matte Photo Paper" msgstr "雾é¢ç…§ç‰‡çº¸" msgid "Media Size" msgstr "媒体大å°" msgid "Media Source" msgstr "åª’ä½“æ¥æº" msgid "Media Tracking" msgstr "媒体跟踪" msgid "Media Type" msgstr "媒体类型" msgid "Medium" msgstr "介质" msgid "Memory allocation error" msgstr "内存分é…错误" msgid "Metal" msgstr "金属" msgid "Metal Glossy" msgstr "å…‰é¢é‡‘属" msgid "Metal High Gloss" msgstr "高光金属" msgid "Metal Matte" msgstr "雾é¢é‡‘属" msgid "Metal Satin" msgstr "ç¼Žé¢æŠ›å…‰é‡‘å±ž" msgid "Metal Semi Gloss" msgstr "åŠå…‰é¢é‡‘属" msgid "Mid-Weight Paper" msgstr "中é‡çº¸å¼ " msgid "Middle" msgstr "中间" msgid "Missing CloseGroup" msgstr "缺少 CloseGroup" msgid "Missing PPD-Adobe-4.x header" msgstr "缺少 PPD-Adobe-4.x 文件头" msgid "Missing asterisk in column 1" msgstr "列 1 中缺少星å·" msgid "Missing document-number attribute." msgstr "缺少 document-number 属性。" #, c-format msgid "Missing double quote on line %d." msgstr "行 %d 缺少åŒå¼•å·ã€‚" msgid "Missing form variable" msgstr "缺少表å•å˜é‡" msgid "Missing last-document attribute in request." msgstr "请求中缺少 last-document 属性。" msgid "Missing media or media-col." msgstr "缺少 media 或 media-col。" msgid "Missing media-size in media-col." msgstr "media-col 中缺少 media-size。" msgid "Missing notify-subscription-ids attribute." msgstr "缺少 notify-subscription-ids 属性。" msgid "Missing option keyword" msgstr "缺少选项关键è¯" msgid "Missing requesting-user-name attribute." msgstr "缺少 requesting-user-name 属性。" #, c-format msgid "Missing required attribute \"%s\"." msgstr "缺少必è¦çš„属性“%sâ€ã€‚" msgid "Missing required attributes." msgstr "缺少必è¦çš„属性。" msgid "Missing resource in URI" msgstr "URI 中缺少资æº" msgid "Missing scheme in URI" msgstr "URI 中缺少方案" #, c-format msgid "Missing value on line %d." msgstr "行 %d 缺少值。" msgid "Missing value string" msgstr "缺少值字串。" msgid "Missing x-dimension in media-size." msgstr "media-size 中缺少 x-dimension。" msgid "Missing y-dimension in media-size." msgstr "media-size 中缺少 y-dimension。" #, c-format msgid "" "Model: name = %s\n" " natural_language = %s\n" " make-and-model = %s\n" " device-id = %s" msgstr "" "åž‹å·ï¼š\tname = %s\n" "\tnatural_language = %s\n" "\tmake-and-model = %s\n" "\tdevice-id = %s" msgid "Modifiers:" msgstr "修饰符:" msgid "Modify Class" msgstr "修改类" msgid "Modify Printer" msgstr "ä¿®æ”¹æ‰“å°æœº" msgid "Mounting Tape" msgstr "装载带" msgid "Move All Jobs" msgstr "移动所有任务" msgid "Move Job" msgstr "移动任务" msgid "Moved Permanently" msgstr "已永久移动" msgid "Multi Layer" msgstr "多é¢" msgid "Multi Part Form" msgstr "多部表å•" msgid "Multi-Hole Punch (Landscape)" msgstr "多孔冲压(水平)" msgid "Multi-Hole Punch (Portrait)" msgstr "多孔冲压(垂直)" msgid "Multi-Hole Punch (Reverse Landscape)" msgstr "多孔冲压(å呿°´å¹³ï¼‰" msgid "Multi-Hole Punch (Reverse Portrait)" msgstr "多孔冲压(åå‘垂直)" msgid "Multipurpose" msgstr "多用" msgid "Multipurpose Paper" msgstr "多用纸" msgid "My Mailbox" msgstr "我的信箱" msgid "NULL PPD file pointer" msgstr "PPD 文件指针为 NULL" msgid "Name OID uses indefinite length" msgstr "åç§° OID 使用ä¸å®šé•¿åº¦" msgid "Nested classes are not allowed." msgstr "ä¸å…许嵌套类。" msgid "Never" msgstr "从ä¸" msgid "New credentials are not valid for name." msgstr "新凭æ®ä¸å¯ç”¨äºŽå称。" msgid "New credentials are older than stored credentials." msgstr "新凭æ®è€äºŽå·²å­˜å‚¨çš„凭æ®ã€‚" msgid "No" msgstr "å¦" msgid "No Content" msgstr "无内容" msgid "No IPP attributes." msgstr "æ—  IPP 属性。" msgid "No PPD name" msgstr "æ—  PPD åç§°" msgid "No VarBind SEQUENCE" msgstr "æ—  VarBind SEQUENCE" msgid "No Windows printer drivers are installed." msgstr "未安装 Windows æ‰“å°æœºé©±åŠ¨ã€‚" msgid "No active connection" msgstr "无活动连接" msgid "No active connection." msgstr "无活动连接。" #, c-format msgid "No active jobs on %s." msgstr "%s 上无活动任务。" msgid "No attributes in request." msgstr "请求中无属性。" msgid "No authentication information provided." msgstr "未æä¾›è®¤è¯ä¿¡æ¯ã€‚" msgid "No common name specified." msgstr "未指定通用å称。" msgid "No community name" msgstr "无社群åç§°" msgid "No default printer." msgstr "æ— é»˜è®¤æ‰“å°æœºã€‚" msgid "No destinations added." msgstr "未添加目标。" msgid "No device URI found in argv[0] or in DEVICE_URI environment variable." msgstr "argv[0] 或 DEVICE_URI 环境å˜é‡ä¸­æ— è®¾å¤‡ URI。" msgid "No error-index" msgstr "æ—  error-index" msgid "No error-status" msgstr "æ—  error-status" msgid "No file in print request." msgstr "打å°è¯·æ±‚中无文件。" msgid "No modification time" msgstr "无修改时间" msgid "No name OID" msgstr "æ— åç§° OID" msgid "No pages were found." msgstr "未找到页é¢ã€‚" msgid "No printer name" msgstr "æ— æ‰“å°æœºåç§°" msgid "No printer-uri found" msgstr "未找到 printer-uri" msgid "No printer-uri found for class" msgstr "未找到类的 print-uri" msgid "No printer-uri in request." msgstr "请求中无 printer-uri。" msgid "No request URI." msgstr "无请求 URI。" msgid "No request protocol version." msgstr "无请求å议版本。" msgid "No request sent." msgstr "未å‘é€è¯·æ±‚。" msgid "No request-id" msgstr "æ—  request-id" msgid "No stored credentials, not valid for name." msgstr "无已存储的凭æ®ï¼Œä¸å¯ç”¨äºŽå称。" msgid "No subscription attributes in request." msgstr "请求中无订阅属性。" msgid "No subscriptions found." msgstr "未找到订阅。" msgid "No variable-bindings SEQUENCE" msgstr "æ—  variable-bindings SEQUENCE" msgid "No version number" msgstr "无版本å·" msgid "Non-continuous (Mark sensing)" msgstr "éžè¿žç»­ï¼ˆæ ‡è®°å—…探)" msgid "Non-continuous (Web sensing)" msgstr "éžè¿žç»­ï¼ˆWeb 嗅探)" msgid "None" msgstr "æ— " msgid "Normal" msgstr "一般" msgid "Not Found" msgstr "未找到" msgid "Not Implemented" msgstr "未实现" msgid "Not Installed" msgstr "未安装" msgid "Not Modified" msgstr "未修改" msgid "Not Supported" msgstr "未支æŒ" msgid "Not allowed to print." msgstr "ä¸å…许打å°ã€‚" msgid "Note" msgstr "注释" msgid "" "Note: this program only validates the DSC comments, not the PostScript " "itself." msgstr "注:此程åºä»…用于检验 DSC æ³¨é‡Šï¼Œè€Œéž PostScript 本身。" msgid "OK" msgstr "确定" msgid "Off (1-Sided)" msgstr "关(å•é¢ï¼‰" msgid "Office Recycled Paper" msgstr "办公室用å†ç”Ÿçº¸" msgid "Oki" msgstr "日冲" msgid "Online Help" msgstr "在线帮助" msgid "Only local users can create a local printer." msgstr "æœ¬åœ°æ‰“å°æœºåªèƒ½ä½¿ç”¨æœ¬åœ°ç”¨æˆ·åˆ›å»ºã€‚" #, c-format msgid "Open of %s failed: %s" msgstr "打开 %s 失败:%s" msgid "OpenGroup without a CloseGroup first" msgstr "OpenGroup 缺少å‰ç½® CloseGroup" msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" msgstr "OpenUI/JCLOpenUI 缺少å‰ç½® CloseUI/JCLCloseUI" msgid "Operation Policy" msgstr "æ“作策略" msgid "Optical Disc" msgstr "光盘" #, c-format msgid "Option \"%s\" cannot be included via %%%%IncludeFeature." msgstr "选项“%sâ€ä¸èƒ½é€šè¿‡ %%%%IncludeFeature 引用。" msgid "Options Installed" msgstr "已安装选项" msgid "Options:" msgstr "选项:" msgid "Other" msgstr "å…¶ä»–" msgid "Out of date PPD cache file." msgstr "过时的 PPD 缓存文件。" msgid "Out of memory." msgstr "内存耗尽。" msgid "Output Mode" msgstr "输出模å¼" msgid "Output bin is almost full." msgstr "出纸盘已几乎用满。" msgid "Output bin is full." msgstr "出纸盘已满。" msgid "Output bin is missing." msgstr "无出纸盘。" msgid "PASS" msgstr "通过" msgid "PCL Laser Printer" msgstr "PCL æ¿€å…‰æ‰“å°æœº" msgid "PRC16K" msgstr "16 å¼€" msgid "PRC16K Long Edge" msgstr "长边缘 16 å¼€" msgid "PRC32K" msgstr "32 å¼€" msgid "PRC32K Long Edge" msgstr "长边缘 32 å¼€" msgid "PRC32K Oversize" msgstr "超大 32 å¼€" msgid "PRC32K Oversize Long Edge" msgstr "超大长边缘 32 å¼€" msgid "Packet does not contain a Get-Response-PDU" msgstr "åŒ…è£¹ä¸­æœªåŒ…å« Get-Response-PDU" msgid "Packet does not start with SEQUENCE" msgstr "包裹未使用 SEQUENCE 开头" msgid "Paper" msgstr "纸张" msgid "Paper jam." msgstr "å¡çº¸ã€‚" msgid "Paper tray is almost empty." msgstr "纸张å³å°†è€—尽。" msgid "Paper tray is empty." msgstr "纸槽已空。" msgid "Paper tray is missing." msgstr "纸槽缺失。" msgid "Parallel Fold" msgstr "并行折å " msgid "ParamCustominCutInterval" msgstr "ParamCustominCutInterval" msgid "ParamCustominTearInterval" msgstr "ParamCustominTearInterval" #, c-format msgid "Password for %s on %s? " msgstr "请输入 %2$s 上 %1$s çš„å¯†ç  " #, c-format msgid "Password for %s required to access %s via SAMBA: " msgstr "è¦é€šè¿‡ SAMBA 访问 %2$s,必须输入 %1$s 的密ç ï¼š" msgid "Pause Class" msgstr "æš‚åœç±»" msgid "Pause Printer" msgstr "æš‚åœæ‰“å°æœº" msgid "Peel-Off" msgstr "剥片" msgid "Permanent Labels" msgstr "永久标签" msgid "Photo" msgstr "照片" msgid "Photo Film" msgstr "照片胶å·" msgid "Photo Labels" msgstr "照片标签" msgid "Photo Paper" msgstr "照片纸" msgid "Photo Paper Plus Glossy II" msgstr "Photo Paper Plus Glossy II" msgid "Photo Paper Pro Platinum" msgstr "Photo Paper Pro Platinum" msgid "Plain Envelope" msgstr "普通信å°" msgid "Plain Paper" msgstr "普通纸" msgid "Plastic" msgstr "å¡‘æ–™" msgid "Plastic Archival" msgstr "档案用塑料" msgid "Plastic Colored" msgstr "彩色塑料" msgid "Plastic Glossy" msgstr "å…‰é¢å¡‘æ–™" msgid "Plastic High Gloss" msgstr "高光塑料" msgid "Plastic Matte" msgstr "雾é¢å¡‘æ–™" msgid "Plastic Satin" msgstr "ç¼Žé¢æŠ›å…‰å¡‘æ–™" msgid "Plastic Semi Gloss" msgstr "åŠå…‰é¢å¡‘æ–™" msgid "Plate" msgstr "å°åˆ·æ¿" msgid "Policies" msgstr "ç­–ç•¥" msgid "Polyester" msgstr "èšé…¯" msgid "Port Monitor" msgstr "端å£ç›‘视器" msgid "PostScript Printer" msgstr "PostScript æ‰“å°æœº" msgid "Postcard" msgstr "明信片" msgid "Postcard Double" msgstr "åŒé¢æ˜Žä¿¡ç‰‡" msgid "Postcard Double Long Edge" msgstr "超长边缘åŒé¢æ˜Žä¿¡ç‰‡" msgid "Postcard Long Edge" msgstr "超长边缘明信片" msgid "Poster Fold" msgstr "对折明信片" msgid "Pre Cut Tabs" msgstr "å·²è£å‰ªæ ‡ç­¾" msgid "Premium Inkjet Paper" msgstr "高级喷墨纸" msgid "Premium Photo Glossy Paper" msgstr "高级光é¢ç…§ç‰‡çº¸" msgid "Premium Presentation Matte Paper" msgstr "高级雾é¢å±•示用纸" msgid "Preparing to print." msgstr "正在准备打å°ã€‚" msgid "Preprinted Envelope" msgstr "预打å°ä¿¡å°" msgid "Preprinted Paper" msgstr "预打å°çº¸" msgid "Print Density" msgstr "打å°å¯†åº¦" msgid "Print Job:" msgstr "打å°ä»»åŠ¡ï¼š" msgid "Print Mode" msgstr "æ‰“å°æ¨¡å¼" msgid "Print Quality" msgstr "打å°è´¨é‡" msgid "Print Rate" msgstr "打å°é¢‘率" msgid "Print Self-Test Page" msgstr "打å°è‡ªæ£€é¡µ" msgid "Print Speed" msgstr "打å°é€Ÿåº¦" msgid "Print Test Page" msgstr "æ‰“å°æµ‹è¯•页" msgid "Print and Cut" msgstr "打å°å’Œè£å‰ª" msgid "Print and Tear" msgstr "打å°å’Œæ’•纸" msgid "Print file sent." msgstr "å·²å‘逿‰“å°æ–‡ä»¶ã€‚" msgid "Print job canceled at printer." msgstr "打å°ä»»åŠ¡åœ¨æ‰“å°æœºç«¯è¢«å–消。" msgid "Print job too large." msgstr "打å°ä»»åŠ¡å¤ªå¤§ã€‚" msgid "Print job was not accepted." msgstr "打å°ä»»åŠ¡è¢«æ‹’ç»ã€‚" #, c-format msgid "Printer \"%s\" already exists." msgstr "æ‰“å°æœºâ€œ%sâ€å·²å­˜åœ¨ã€‚" msgid "Printer Added" msgstr "å·²æ·»åŠ æ‰“å°æœº" msgid "Printer Default" msgstr "æ‰“å°æœºé»˜è®¤å€¼" msgid "Printer Deleted" msgstr "å·²åˆ é™¤æ‰“å°æœº" msgid "Printer Modified" msgstr "å·²ç¼–è¾‘æ‰“å°æœº" msgid "Printer Paused" msgstr "æ‰“å°æœºå·²æš‚åœ" msgid "Printer Settings" msgstr "æ‰“å°æœºè®¾ç½®" msgid "Printer cannot print supplied content." msgstr "æ‰“å°æœºæ— æ³•æ‰“å°æ‰€æä¾›çš„内容。" msgid "Printer cannot print with supplied options." msgstr "æ‰“å°æœºæ— æ³•使用所æä¾›çš„选项打å°ã€‚" msgid "Printer does not support required IPP attributes or document formats." msgstr "æ‰“å°æœºä¸æ”¯æŒå¿…è¦çš„ IPP 属性或文档格å¼ã€‚" msgid "Printer:" msgstr "æ‰“å°æœºï¼š" msgid "Printers" msgstr "æ‰“å°æœº" #, c-format msgid "Printing page %d, %u%% complete." msgstr "正在打å°ç¬¬ %d é¡µï¼Œå·²å®Œæˆ %u%%。" msgid "Punch" msgstr "冲压" msgid "Punched Paper" msgstr "打孔纸" msgid "Quarto" msgstr "四开" msgid "Quota limit reached." msgstr "已达到é™é¢ä¸Šé™ã€‚" # Bug report to be opened at upstream: # - Not using Tab for formatting. # - Will mess up on CJK and double-width environments. msgid "Rank Owner Job File(s) Total Size" msgstr "æŽ’åº æ‰€æœ‰è€… 任务 文件 总大å°" msgid "Rear" msgstr "åŽéƒ¨" msgid "Rear Tray" msgstr "åŽéƒ¨çº¸ç›˜" msgid "Reject Jobs" msgstr "æ‹’ç»ä»»åŠ¡" #, c-format msgid "Remote host did not accept control file (%d)." msgstr "è¿œç¨‹ä¸»æœºæœªæŽ¥å—æŽ§åˆ¶æ–‡ä»¶ï¼ˆ%d)。" #, c-format msgid "Remote host did not accept data file (%d)." msgstr "è¿œç¨‹ä¸»æœºæœªæŽ¥å—æ•°æ®æ–‡ä»¶ï¼ˆ%d)。" msgid "Reprint After Error" msgstr "错误åŽé‡æ–°æ‰“å°" msgid "Request Entity Too Large" msgstr "请求的æ¡ç›®è¿‡å¤§" msgid "Resolution" msgstr "分辨率" msgid "Resume Class" msgstr "ç»§ç»­ç±»" msgid "Resume Printer" msgstr "ç»§ç»­æ‰“å°æœº" msgid "Return Address" msgstr "返回地å€" msgid "Rewind" msgstr "回退" msgid "Right" msgstr "å³" msgid "Right Gate Fold" msgstr "å³å¯¹å¼€é¡µ" msgid "Right Tray" msgstr "å³éƒ¨çº¸ç›˜" msgid "Roll" msgstr "滚筒" msgid "Roll 1" msgstr "滚筒 1" msgid "Roll 10" msgstr "滚筒 10" msgid "Roll 2" msgstr "滚筒 2" msgid "Roll 3" msgstr "滚筒 3" msgid "Roll 4" msgstr "滚筒 4" msgid "Roll 5" msgstr "滚筒 5" msgid "Roll 6" msgstr "滚筒 6" msgid "Roll 7" msgstr "滚筒 7" msgid "Roll 8" msgstr "滚筒 8" msgid "Roll 9" msgstr "滚筒 9" #, c-format msgid "Running command: %s %s -N -A %s -c '%s'" msgstr "正在è¿è¡Œå‘½ä»¤ï¼š%s %s -N -A %s -c '%s'" msgid "SEQUENCE uses indefinite length" msgstr "SEQUENCE 使用ä¸å®šé•¿åº¦" msgid "SSL/TLS Negotiation Error" msgstr "SSL/TLS å商错误" msgid "Saddle Stitch" msgstr "骑马订装" msgid "Satin Labels" msgstr "ç¼Žé¢æŠ›å…‰æ ‡ç­¾" msgid "Satin Optical Disc" msgstr "ç¼Žé¢æŠ›å…‰å…‰ç›˜" msgid "Satin Photo Paper" msgstr "ç¼Žé¢æŠ›å…‰ç…§ç‰‡çº¸" msgid "Screen" msgstr "网å°" msgid "Screen Paged" msgstr "网å°åˆ†é¡µ" msgid "Security Labels" msgstr "安全标签" msgid "See Other" msgstr "查看其他" msgid "See remote printer." msgstr "æŸ¥çœ‹è¿œç¨‹æ‰“å°æœºã€‚" msgid "Self Adhesive" msgstr "自粘åˆ" msgid "Self Adhesive Film" msgstr "自粘åˆèƒ¶ç‰‡" msgid "Self-signed credentials are blocked." msgstr "ç¦æ­¢ä½¿ç”¨è‡ªç­¾å‘的凭æ®ã€‚" msgid "Semi-Gloss Fabric" msgstr "åŠå…‰é¢ç¼–织物" msgid "Semi-Gloss Labels" msgstr "åŠå…‰é¢æ ‡ç­¾" msgid "Semi-Gloss Optical Disc" msgstr "åŠå…‰é¢å…‰ç›˜" msgid "Semi-Gloss Photo Paper" msgstr "åŠå…‰é¢ç…§ç‰‡çº¸" msgid "Sending data to printer." msgstr "æ­£åœ¨å‘æ‰“å°æœºå‘逿•°æ®ã€‚" msgid "Server Restarted" msgstr "æœåС噍已é‡å¯" msgid "Server Security Auditing" msgstr "æœåŠ¡å™¨å®‰å…¨å®¡è®¡" msgid "Server Started" msgstr "æœåС噍已å¯åЍ" msgid "Server Stopped" msgstr "æœåŠ¡å™¨å·²åœæ­¢" msgid "Server credentials not set." msgstr "未设置æœåС噍凭æ®ã€‚" msgid "Service Unavailable" msgstr "æœåŠ¡ä¸å¯ç”¨" msgid "Set Allowed Users" msgstr "设置å…许的用户" msgid "Set As Server Default" msgstr "设置为æœåŠ¡å™¨é»˜è®¤å€¼" msgid "Set Class Options" msgstr "设置类选项" msgid "Set Printer Options" msgstr "è®¾ç½®æ‰“å°æœºé€‰é¡¹" msgid "Set Publishing" msgstr "设置出版" msgid "Shipping Address" msgstr "邮寄地å€" msgid "Short-Edge (Landscape)" msgstr "短边缘(水平)" msgid "Shrink Foil" msgstr "热缩é“ç®”" msgid "Side" msgstr "ä¾§é¢" msgid "Side Tray" msgstr "ä¾§é¢çº¸ç›˜" msgid "Single Face" msgstr "å•é¢" msgid "Single Punch (Landscape)" msgstr "å•孔冲压(水平)" msgid "Single Punch (Portrait)" msgstr "å•孔冲压(垂直)" msgid "Single Punch (Reverse Landscape)" msgstr "å•孔冲压(å呿°´å¹³ï¼‰" msgid "Single Punch (Reverse Portrait)" msgstr "å•孔冲压(åå‘垂直)" msgid "Single Staple (Landscape)" msgstr "å•钉装(水平)" msgid "Single Staple (Portrait)" msgstr "å•钉装(垂直)" msgid "Single Staple (Reverse Landscape)" msgstr "å•钉装(å呿°´å¹³ï¼‰" msgid "Single Staple (Reverse Portrait)" msgstr "å•钉装(åå‘垂直)" msgid "Single Wall Cardboard" msgstr "å•层纸æ¿" msgid "Sleeve" msgstr "套筒" msgid "Special Paper" msgstr "特殊纸张" #, c-format msgid "Spooling job, %.0f%% complete." msgstr "æ­£åœ¨è½¬å­˜ä»»åŠ¡ï¼Œå·²å®Œæˆ %.0f%%。" msgid "Stacker 1" msgstr "摞纸器 1" msgid "Stacker 10" msgstr "摞纸器 10" msgid "Stacker 2" msgstr "摞纸器 2" msgid "Stacker 3" msgstr "摞纸器 3" msgid "Stacker 4" msgstr "摞纸器 4" msgid "Stacker 5" msgstr "摞纸器 5" msgid "Stacker 6" msgstr "摞纸器 6" msgid "Stacker 7" msgstr "摞纸器 7" msgid "Stacker 8" msgstr "摞纸器 8" msgid "Stacker 9" msgstr "摞纸器 9" msgid "Standard" msgstr "标准" msgid "Staple" msgstr "装订" msgid "Staple Edge" msgstr "装订边缘" msgid "Staple Edge (Landscape)" msgstr "装订边缘(水平)" msgid "Staple Edge (Portrait)" msgstr "装订边缘(垂直)" msgid "Staple Edge (Reverse Landscape)" msgstr "装订边缘(å呿°´å¹³ï¼‰" msgid "Staple Edge (Reverse Portrait)" msgstr "装订边缘(åå‘垂直)" #. TRANSLATORS: Banner/cover sheet before the print job. msgid "Starting Banner" msgstr "起始横幅" #, c-format msgid "Starting page %d." msgstr "正在开始第 %d 页。" msgid "Statement" msgstr "声明" #, c-format msgid "Subscription #%d does not exist." msgstr "订阅 #%d ä¸å­˜åœ¨ã€‚" msgid "Substitutions:" msgstr "替代:" msgid "Super A" msgstr "超大 A" msgid "Super B" msgstr "超大 B" msgid "Super B/A3" msgstr "超大 B/A3" msgid "Switching Protocols" msgstr "正在切æ¢åè®®" msgid "Tab Stock" msgstr "é‡ç£…标签" msgid "Tabloid" msgstr "大幅é¢" msgid "Tabloid Oversize" msgstr "超大幅é¢" msgid "Tabloid Oversize Long Edge" msgstr "超大幅é¢é•¿è¾¹ç¼˜" msgid "Tear" msgstr "撕纸" msgid "Tear-Off" msgstr "撕纸" msgid "Tear-Off Adjust Position" msgstr "调整撕纸ä½ç½®" #, c-format msgid "The \"%s\" attribute is required for print jobs." msgstr "打å°ä»»åŠ¡å¿…é¡»å¸¦æœ‰â€œ%sâ€å±žæ€§ã€‚" #, c-format msgid "The %s attribute cannot be provided with job-ids." msgstr "属性 %s ä¸èƒ½å’Œ job-id ä¸€åŒæä¾›ã€‚" #, c-format msgid "" "The '%s' Job Status attribute cannot be supplied in a job creation request." msgstr "任务状æ€å±žæ€§â€œ%sâ€ä¸èƒ½ä¸Žä»»åŠ¡åˆ›å»ºè¯·æ±‚ä¸€åŒæä¾›ã€‚" #, c-format msgid "" "The '%s' operation attribute cannot be supplied in a Create-Job request." msgstr "æ“作属性“%sâ€ä¸èƒ½ä¸Ž Create-Job è¯·æ±‚ä¸€åŒæä¾›ã€‚" #, c-format msgid "The PPD file \"%s\" could not be found." msgstr "找ä¸åˆ° PPD 文件“%sâ€ã€‚" #, c-format msgid "The PPD file \"%s\" could not be opened: %s" msgstr "无法打开 PPD 文件“%sâ€ï¼š%s" msgid "The PPD file could not be opened." msgstr "无法打开 PPD 文件。" msgid "" "The class name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "ç±»åæœ€å¤šå¯åŒ…å« 127 坿‰“å°å­—符,ä¸èƒ½åŒ…å«ç©ºæ ¼ã€æ–œæ ï¼ˆ/)或井å·ï¼ˆ#)。" msgid "The developer unit needs to be replaced." msgstr "显影å•元需替æ¢ã€‚" msgid "The developer unit will need to be replaced soon." msgstr "显影å•元最近需替æ¢ã€‚" msgid "The fuser's temperature is high." msgstr "熔å‡å™¨æ¸©åº¦é«˜ã€‚" msgid "The fuser's temperature is low." msgstr "熔å‡å™¨æ¸©åº¦ä½Žã€‚" msgid "" "The notify-lease-duration attribute cannot be used with job subscriptions." msgstr "notify-lease-duration 属性ä¸å¯ç”¨äºŽä»»åŠ¡è®¢é˜…ã€‚" #, c-format msgid "The notify-user-data value is too large (%d > 63 octets)." msgstr "notify-user-data 值过大(%d > 63 å…«ä½å€¼ï¼‰ã€‚" msgid "The optical photoconductor needs to be replaced." msgstr "光导元件需替æ¢ã€‚" msgid "The optical photoconductor will need to be replaced soon." msgstr "光导元件最近需替æ¢ã€‚" msgid "The printer configuration is incorrect or the printer no longer exists." msgstr "æ‰“å°æœºé…ç½®ä¸æ­£ç¡®æˆ–æ‰“å°æœºå·²ä¸å­˜åœ¨ã€‚" msgid "The printer did not respond." msgstr "æ‰“å°æœºæ— å“应。" msgid "The printer is in use." msgstr "æ‰“å°æœºæ­£åœ¨ä½¿ç”¨ä¸­ã€‚" msgid "The printer is low on ink." msgstr "æ‰“å°æœºå¢¨æ°´å³å°†è€—尽。" msgid "The printer is low on toner." msgstr "æ‰“å°æœºå¢¨ç²‰å³å°†è€—尽。" msgid "The printer is not connected." msgstr "æ‰“å°æœºæœªè¿žæŽ¥ã€‚" msgid "The printer is not responding." msgstr "æ‰“å°æœºæ— å“应。" msgid "The printer is now connected." msgstr "æ‰“å°æœºå·²è¿žæŽ¥ã€‚" msgid "The printer is now online." msgstr "æ‰“å°æœºåœ¨çº¿ã€‚" msgid "The printer is offline." msgstr "æ‰“å°æœºç¦»çº¿ã€‚" msgid "The printer is unreachable at this time." msgstr "æ‰“å°æœºæš‚时无法访问。" msgid "The printer may be out of ink." msgstr "æ‰“å°æœºå¢¨æ°´å¯èƒ½å·²è€—尽。" msgid "The printer may be out of toner." msgstr "æ‰“å°æœºå¢¨ç²‰å¯èƒ½å·²è€—尽。" msgid "The printer may not exist or is unavailable at this time." msgstr "æ‰“å°æœºæš‚æ—¶ä¸å­˜åœ¨æˆ–ä¸å¯ç”¨ã€‚" msgid "" "The printer name may only contain up to 127 printable characters and may not " "contain spaces, slashes (/), or the pound sign (#)." msgstr "" "æ‰“å°æœºå称最多å¯åŒ…å« 127 坿‰“å°å­—符,ä¸èƒ½åŒ…å«ç©ºæ ¼ã€æ–œæ ï¼ˆ/)或井å·ï¼ˆ#)。" msgid "The printer or class does not exist." msgstr "æ‰“å°æœºæˆ–ç±»ä¸å­˜åœ¨ã€‚" msgid "The printer or class is not shared." msgstr "æ‰“å°æœºæˆ–类未共享。" msgid "The printer's cover is open." msgstr "æ‰“å°æœºç›–被打开。" msgid "The printer's door is open." msgstr "æ‰“å°æœºé—¨è¢«æ‰“开。" msgid "The printer's interlock is open." msgstr "æ‰“å°æœºè”é”被打开。" msgid "The printer's waste bin is almost full." msgstr "æ‰“å°æœºçš„废纸篓å³å°†å æ»¡ã€‚" msgid "The printer's waste bin is full." msgstr "æ‰“å°æœºçš„废纸篓已满。" #, c-format msgid "The printer-uri \"%s\" contains invalid characters." msgstr "printer-uri“%sâ€åŒ…嫿— æ•ˆå­—符。" msgid "The printer-uri attribute is required." msgstr "å¿…é¡»æä¾› printer-uri 属性。" msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." msgstr "printer-uri 必须使用如下格å¼ï¼šâ€œipp://HOSTNAME/classes/CLASSNAMEâ€ã€‚" msgid "" "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." msgstr "printer-uri 必须使用如下格å¼ï¼šâ€œipp://HOSTNAME/printers/PRINTERNAMEâ€ã€‚" msgid "" "The subscription name may not contain spaces, slashes (/), question marks " "(?), or the pound sign (#)." msgstr "订阅åç§°ä¸å¾—包å«ç©ºæ ¼ï¼Œæ–œæ ï¼ˆ/),问å·ï¼ˆ?)或井å·ï¼ˆ#)。" msgid "" "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to " "enable it." msgstr "网页界é¢å½“å‰è¢«ç¦ç”¨ã€‚è¿è¡Œâ€œcupsctl WebInterface=yesâ€æ¥å¯ç”¨ã€‚" #, c-format msgid "The which-jobs value \"%s\" is not supported." msgstr "䏿”¯æŒçš„ which-jobs 值“%sâ€ã€‚" msgid "There are too many subscriptions." msgstr "订阅过多。" msgid "There was an unrecoverable USB error." msgstr "é‡åˆ°äº†ä¸å¯æ¢å¤çš„ USB 错误。" msgid "Thermal Transfer Media" msgstr "热æ•介质" msgid "Too many active jobs." msgstr "活动任务过多。" #, c-format msgid "Too many job-sheets values (%d > 2)." msgstr "job-sheets 值过多(%d > 2)。" #, c-format msgid "Too many printer-state-reasons values (%d > %d)." msgstr "printer-state-reasons 值过多(%d > %d)。" msgid "Top" msgstr "顶部" msgid "Top Tray" msgstr "顶部纸盘" msgid "Tractor" msgstr "墨辊" msgid "Transfer" msgstr "传输" msgid "Transparency" msgstr "逿˜Žåº¦" msgid "Tray" msgstr "托盘" msgid "Tray 1" msgstr "托盘 1" msgid "Tray 10" msgstr "托盘 10" msgid "Tray 11" msgstr "托盘 11" msgid "Tray 12" msgstr "托盘 12" msgid "Tray 13" msgstr "托盘 13" msgid "Tray 14" msgstr "托盘 14" msgid "Tray 15" msgstr "托盘 15" msgid "Tray 16" msgstr "托盘 16" msgid "Tray 17" msgstr "托盘 17" msgid "Tray 18" msgstr "托盘 18" msgid "Tray 19" msgstr "托盘 19" msgid "Tray 2" msgstr "托盘 2" msgid "Tray 20" msgstr "托盘 20" msgid "Tray 3" msgstr "托盘 3" msgid "Tray 4" msgstr "托盘 4" msgid "Tray 5" msgstr "托盘 5" msgid "Tray 6" msgstr "托盘 6" msgid "Tray 7" msgstr "托盘 7" msgid "Tray 8" msgstr "托盘 8" msgid "Tray 9" msgstr "托盘 9" msgid "Triple Staple (Landscape)" msgstr "三钉装(水平)" msgid "Triple Staple (Portrait)" msgstr "三钉装(垂直)" msgid "Triple Staple (Reverse Landscape)" msgstr "三钉装(å呿°´å¹³ï¼‰" msgid "Triple Staple (Reverse Portrait)" msgstr "三钉装(åå‘垂直)" msgid "Triple Wall Cardboard" msgstr "三层纸æ¿" msgid "Trust on first use is disabled." msgstr "åˆæ¬¡ä½¿ç”¨ä¿¡ä»»å·²ç¦ç”¨ã€‚" msgid "URI Too Long" msgstr "URI 过长" msgid "URI too large" msgstr "URI 过大" msgid "US Fanfold" msgstr "" msgid "US Ledger" msgstr "US Ledger" msgid "US Legal" msgstr "US Legal" msgid "US Legal Oversize" msgstr "超大 US Legal" msgid "US Letter" msgstr "US Letter" msgid "US Letter Long Edge" msgstr "长边缘 US Letter" msgid "US Letter Oversize" msgstr "超大 US Letter" msgid "US Letter Oversize Long Edge" msgstr "超大长边缘 US Letter" msgid "US Letter Small" msgstr "å°åž‹ US Letter" msgid "Unable to access cupsd.conf file" msgstr "无法访问 cupsd.conf 文件。" msgid "Unable to access help file." msgstr "无法访问帮助文件。" msgid "Unable to add RSS subscription" msgstr "无法添加 RSS 订阅" msgid "Unable to add class" msgstr "无法添加类" msgid "Unable to add document to print job." msgstr "æ— æ³•å‘æ‰“å°ä»»åŠ¡æ·»åŠ æ–‡æ¡£ã€‚" #, c-format msgid "Unable to add job for destination \"%s\"." msgstr "无法å‘目标“%sâ€æ·»åŠ ä»»åŠ¡ã€‚" msgid "Unable to add printer" msgstr "æ— æ³•æ·»åŠ æ‰“å°æœº" msgid "Unable to allocate memory for file types." msgstr "无法为文件类型分é…内存。" msgid "Unable to allocate memory for page info" msgstr "无法为页é¢ä¿¡æ¯åˆ†é…内存" msgid "Unable to allocate memory for pages array" msgstr "无法为页é¢ç»„分é…内存" msgid "Unable to cancel RSS subscription" msgstr "æ— æ³•å–æ¶ˆ RSS 订阅" msgid "Unable to cancel print job." msgstr "æ— æ³•å–æ¶ˆæ‰“å°ä»»åŠ¡ã€‚" msgid "Unable to change printer" msgstr "æ— æ³•æ›´æ¢æ‰“å°æœº" msgid "Unable to change printer-is-shared attribute" msgstr "无法更改 printer-is-shared 属性" msgid "Unable to change server settings" msgstr "无法更改æœåС噍选项" #, c-format msgid "Unable to compile mimeMediaType regular expression: %s." msgstr "无法编译 mimeMediaType 正则表达å¼ï¼š%s。" #, c-format msgid "Unable to compile naturalLanguage regular expression: %s." msgstr "无法编译 naturalLanguage 正则表达å¼ï¼š%s。" msgid "Unable to configure printer options." msgstr "无法é…ç½®æ‰“å°æœºé€‰é¡¹ã€‚" msgid "Unable to connect to host." msgstr "无法连接主机。" msgid "Unable to contact printer, queuing on next printer in class." msgstr "无法è”ç³»æ‰“å°æœºï¼Œå·²åˆ—é˜ŸäºŽç±»ä¸­çš„ä¸‹ä¸€å°æ‰“å°æœºã€‚" #, c-format msgid "Unable to copy 64-bit CUPS printer driver files (%d)." msgstr "无法å¤åˆ¶ 64 ä½ CUPS æ‰“å°æœºé©±åŠ¨æ–‡ä»¶ï¼ˆ%d)。" #, c-format msgid "Unable to copy 64-bit Windows printer driver files (%d)." msgstr "无法å¤åˆ¶ 64 ä½ Windows æ‰“å°æœºé©±åŠ¨æ–‡ä»¶ï¼ˆ%d)。" #, c-format msgid "Unable to copy CUPS printer driver files (%d)." msgstr "无法å¤åˆ¶ CUPS æ‰“å°æœºé©±åŠ¨æ–‡ä»¶ï¼ˆ%d)。" #, c-format msgid "Unable to copy PPD file - %s" msgstr "无法å¤åˆ¶ PPD 文件 — %s" msgid "Unable to copy PPD file." msgstr "无法å¤åˆ¶ PPD 文件。" #, c-format msgid "Unable to copy Windows 2000 printer driver files (%d)." msgstr "无法å¤åˆ¶ Windows 2000 æ‰“å°æœºé©±åŠ¨æ–‡ä»¶ï¼ˆ%d)。" #, c-format msgid "Unable to copy Windows 9x printer driver files (%d)." msgstr "无法å¤åˆ¶ Windows 9x æ‰“å°æœºé©±åŠ¨æ–‡ä»¶ï¼ˆ%d)。" msgid "Unable to create credentials from array." msgstr "无法从打å°ç»„创建æœåС噍凭æ®ã€‚" msgid "Unable to create printer-uri" msgstr "无法创建 printer-uri。" msgid "Unable to create printer." msgstr "æ— æ³•åˆ›å»ºæ‰“å°æœºã€‚" msgid "Unable to create server credentials." msgstr "无法创建æœåС噍凭æ®ã€‚" msgid "Unable to create temporary file" msgstr "无法创建临时文件" msgid "Unable to delete class" msgstr "无法删除类" msgid "Unable to delete printer" msgstr "æ— æ³•åˆ é™¤æ‰“å°æœº" msgid "Unable to do maintenance command" msgstr "无法执行维护命令" msgid "Unable to edit cupsd.conf files larger than 1MB" msgstr "无法编辑大å°è¶…过 1MB çš„ cupsd.conf 文件" msgid "" "Unable to establish a secure connection to host (certificate chain invalid)." msgstr "无法建立到主机的安全连接(无效è¯ä¹¦é“¾ï¼‰ã€‚" msgid "" "Unable to establish a secure connection to host (certificate not yet valid)." msgstr "无法建立到主机的安全连接(è¯ä¹¦å°šæœªç”Ÿæ•ˆï¼‰ã€‚" msgid "Unable to establish a secure connection to host (expired certificate)." msgstr "无法建立到主机的安全连接(è¯ä¹¦å·²è¿‡æœŸï¼‰ã€‚" msgid "Unable to establish a secure connection to host (host name mismatch)." msgstr "无法建立到主机的安全连接(主机åä¸åŒ¹é…)。" msgid "" "Unable to establish a secure connection to host (peer dropped connection " "before responding)." msgstr "无法建立到主机的安全连接(对方在回å¤å‰æ–­å¼€è¿žæŽ¥ï¼‰ã€‚" msgid "" "Unable to establish a secure connection to host (self-signed certificate)." msgstr "无法建立到主机的安全连接(自签å‘è¯ä¹¦ï¼‰ã€‚" msgid "" "Unable to establish a secure connection to host (untrusted certificate)." msgstr "无法建立到主机的安全连接(未信任的è¯ä¹¦ï¼‰ã€‚" msgid "Unable to establish a secure connection to host." msgstr "无法建立到主机的安全连接。" msgid "Unable to find destination for job" msgstr "找ä¸åˆ°ä»»åŠ¡ç›®çš„åœ°" msgid "Unable to find printer." msgstr "找ä¸åˆ°æ‰“å°æœºã€‚" msgid "Unable to find server credentials." msgstr "找ä¸åˆ°æœåС噍凭æ®ã€‚" msgid "Unable to get backend exit status." msgstr "无法获å–åŽç«¯é€€å‡ºçжæ€ã€‚" msgid "Unable to get class list" msgstr "无法获å–类列表" msgid "Unable to get class status" msgstr "无法获å–类状æ€" msgid "Unable to get list of printer drivers" msgstr "æ— æ³•èŽ·å–æ‰“å°æœºé©±åŠ¨åˆ—è¡¨" msgid "Unable to get printer attributes" msgstr "æ— æ³•èŽ·å–æ‰“å°æœºå±žæ€§" msgid "Unable to get printer list" msgstr "æ— æ³•èŽ·å–æ‰“å°æœºåˆ—表" msgid "Unable to get printer status" msgstr "æ— æ³•èŽ·å–æ‰“å°æœºçжæ€" msgid "Unable to get printer status." msgstr "æ— æ³•èŽ·å–æ‰“å°æœºçжæ€ã€‚" #, c-format msgid "Unable to install Windows 2000 printer driver files (%d)." msgstr "无法安装 Windows 2000 æ‰“å°æœºé©±åŠ¨æ–‡ä»¶ï¼ˆ%d)。" #, c-format msgid "Unable to install Windows 9x printer driver files (%d)." msgstr "无法安装 Windows 9x æ‰“å°æœºé©±åŠ¨æ–‡ä»¶ï¼ˆ%d)。" msgid "Unable to load help index." msgstr "无法载入帮助索引。" #, c-format msgid "Unable to locate printer \"%s\"." msgstr "æ— æ³•å®šä½æ‰“å°æœºâ€œ%sâ€ã€‚" msgid "Unable to locate printer." msgstr "æ— æ³•å®šä½æ‰“å°æœºã€‚" msgid "Unable to modify class" msgstr "无法编辑类" msgid "Unable to modify printer" msgstr "æ— æ³•ç¼–è¾‘æ‰“å°æœº" msgid "Unable to move job" msgstr "无法移动任务" msgid "Unable to move jobs" msgstr "无法移动任务" msgid "Unable to open PPD file" msgstr "无法打开 PPD 文件" msgid "Unable to open cupsd.conf file:" msgstr "无法打开 cupsd.conf 文件:" msgid "Unable to open device file" msgstr "无法打开设备文件" #, c-format msgid "Unable to open document #%d in job #%d." msgstr "无法打开任务 #%2$d 中的文档 #%1$d。" msgid "Unable to open help file." msgstr "无法打开帮助文件。" msgid "Unable to open print file" msgstr "æ— æ³•æ‰“å¼€æ‰“å°æ–‡ä»¶" msgid "Unable to open raster file" msgstr "无法打开栅格文件" msgid "Unable to print test page" msgstr "æ— æ³•æ‰“å°æµ‹è¯•页" msgid "Unable to read print data." msgstr "æ— æ³•è¯»å–æ‰“å°æ•°æ®ã€‚" msgid "Unable to rename job document file." msgstr "无法é‡å‘½å任务文档。" msgid "Unable to resolve printer-uri." msgstr "æ— æ³•è§£æž printer-uri。" #, c-format msgid "Unable to run \"%s\": %s" msgstr "无法è¿è¡Œâ€œ%sâ€ï¼š%s" # "Unable to read file" perhaps? msgid "Unable to see in file" msgstr "æ— æ³•è¯»å–æ–‡ä»¶" msgid "Unable to send command to printer driver" msgstr "æ— æ³•å‘æ‰“å°æœºé©±åЍå‘é€å‘½ä»¤" msgid "Unable to send data to printer." msgstr "æ— æ³•å‘æ‰“å°æœºå‘逿•°æ®ã€‚" #, c-format msgid "Unable to set Windows printer driver (%d)." msgstr "无法设置 Windows æ‰“å°æœºé©±åŠ¨ï¼ˆ%d)。" msgid "Unable to set options" msgstr "无法设置选项" msgid "Unable to set server default" msgstr "无法设置æœåŠ¡å™¨é»˜è®¤å€¼" msgid "Unable to start backend process." msgstr "无法å¯åЍåŽç«¯è¿›ç¨‹ã€‚" msgid "Unable to upload cupsd.conf file" msgstr "无法上传 cupsd.conf 文件" msgid "Unable to use legacy USB class driver." msgstr "无法使用è€å¼ USB 类驱动。" msgid "Unable to write print data" msgstr "æ— æ³•å†™å…¥æ‰“å°æ•°æ®" #, c-format msgid "Unable to write uncompressed print data: %s" msgstr "æ— æ³•å†™å…¥å·²è§£åŒ…çš„æ‰“å°æ•°æ®ï¼š%s" msgid "Unauthorized" msgstr "未认è¯" msgid "Units" msgstr "å•å…ƒ" msgid "Unknown" msgstr "未知" #, c-format msgid "Unknown choice \"%s\" for option \"%s\"." msgstr "选项“%2$sâ€å¸¦æœ‰æœªçŸ¥é€‰æ‹©â€œ%1$sâ€ã€‚" #, c-format msgid "Unknown encryption option value: \"%s\"." msgstr "未知加密选项值:“%sâ€ã€‚" #, c-format msgid "Unknown file order: \"%s\"." msgstr "未知文件排åºï¼šâ€œ%sâ€ã€‚" #, c-format msgid "Unknown format character: \"%c\"." msgstr "未知格å¼å­—符:“%câ€ã€‚" msgid "Unknown hash algorithm." msgstr "未知哈希值算法。" msgid "Unknown media size name." msgstr "未知介质尺寸å。" #, c-format msgid "Unknown option \"%s\" with value \"%s\"." msgstr "带有值“%2$sâ€çš„æœªçŸ¥é€‰é¡¹â€œ%1$sâ€ã€‚" #, c-format msgid "Unknown option \"%s\"." msgstr "未知选项“%sâ€ã€‚" #, c-format msgid "Unknown print mode: \"%s\"." msgstr "æœªçŸ¥æ‰“å°æ¨¡å¼ï¼šâ€œ%sâ€ã€‚" #, c-format msgid "Unknown printer-error-policy \"%s\"." msgstr "未知 printer-error-policy“%sâ€ã€‚" #, c-format msgid "Unknown printer-op-policy \"%s\"." msgstr "未知 printer-op-policy“%sâ€ã€‚" msgid "Unknown request method." msgstr "未知请求方å¼ã€‚" msgid "Unknown request version." msgstr "未知请求版本。" msgid "Unknown scheme in URI" msgstr "URI 䏭嫿œ‰æœªçŸ¥æ–¹æ¡ˆ" msgid "Unknown service name." msgstr "未知æœåŠ¡å称。" #, c-format msgid "Unknown version option value: \"%s\"." msgstr "未知版本选项值:“%sâ€ã€‚" #, c-format msgid "Unsupported 'compression' value \"%s\"." msgstr "䏿”¯æŒçš„“compressionâ€å€¼â€œ%sâ€ã€‚" #, c-format msgid "Unsupported 'document-format' value \"%s\"." msgstr "䏿”¯æŒçš„“document-formatâ€å€¼â€œ%sâ€ã€‚" msgid "Unsupported 'job-name' value." msgstr "䏿”¯æŒçš„“job-nameâ€å€¼ã€‚" #, c-format msgid "Unsupported character set \"%s\"." msgstr "䏿”¯æŒçš„字符集“%sâ€ã€‚" #, c-format msgid "Unsupported compression \"%s\"." msgstr "䏿”¯æŒçš„压缩算法“%sâ€ã€‚" #, c-format msgid "Unsupported document-format \"%s\"." msgstr "䏿”¯æŒçš„ document-format“%sâ€ã€‚" #, c-format msgid "Unsupported document-format \"%s/%s\"." msgstr "䏿”¯æŒçš„ document-format“%s/%sâ€ã€‚" #, c-format msgid "Unsupported format \"%s\"." msgstr "䏿”¯æŒçš„æ ¼å¼â€œ%sâ€ã€‚" msgid "Unsupported margins." msgstr "䏿”¯æŒçš„边界。" msgid "Unsupported media value." msgstr "䏿”¯æŒçš„介质值。" #, c-format msgid "Unsupported number-up value %d, using number-up=1." msgstr "䏿”¯æŒçš„ number-up 值 %d,将使用 number-up=1。" #, c-format msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb." msgstr "䏿”¯æŒçš„ number-up-layout 值 %s,将使用 number-up-layout=lrtb。" #, c-format msgid "Unsupported page-border value %s, using page-border=none." msgstr "䏿”¯æŒçš„ page-border 值 %s,将使用 page-border=none。" msgid "Unsupported raster data." msgstr "䏿”¯æŒçš„æ …格化数æ®ã€‚" msgid "Unsupported value type" msgstr "䏿”¯æŒçš„值类型" msgid "Upgrade Required" msgstr "需è¦å‡çº§" msgid "" "Usage:\n" "\n" " lpadmin [-h server] -d destination\n" " lpadmin [-h server] -x destination\n" " lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]" msgstr "" "用法:\n" "\n" " lpadmin [-h æœåС噍] -d 目标\n" " lpadmin [-h æœåС噍] -x 目标\n" " lpadmin [-h æœåС噍] -p æ‰“å°æœº [-c add-class] [-i interface] [-m model]\n" " [-r remove-class] [-v device] [-D description]\n" " [-P ppd-file] [-o name=value]\n" " [-u allow:user,user] [-u deny:user,user]" #, c-format msgid "Usage: %s job-id user title copies options [file]" msgstr "用法:%s job-id user title copies options [file]" msgid "Usage: cupsaddsmb [options] printer1 ... printerN" msgstr "用法:cupsaddsmb [options] printer1 ... printerN" msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]" msgstr "用法:cupsctl [options] [param=value ... paramN=valueN]" msgid "Usage: cupsd [options]" msgstr "用法:cupsd [options]" msgid "Usage: cupsfilter [ options ] [ -- ] filename" msgstr "用法:cupsfilter [ options ] [ -- ] filename" msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]" msgstr "用法:cupstestdsc [options] filename.ps [... filename.ps]" msgid "" "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" msgstr "" "用法:cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" msgid "" "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " ippfind [options] name[.regtype[.domain.]] ... [expression]\n" " ippfind --help\n" " ippfind --version" msgstr "" "用法:\tippfind [options] regtype[,subtype][.domain.] ... [expression]\n" " \tippfind [options] name[.regtype[.domain.]] ... [expression]\n" " \tippfind --help\n" " \tippfind --version" msgid "Usage: ipptool [options] URI filename [ ... filenameN ]" msgstr "用法:ipptool [options] URI filename [ ... filenameN ]" msgid "Usage: lpmove job/src dest" msgstr "用法:lpmove job/src dest" msgid "" "Usage: lpoptions [-h server] [-E] -d printer\n" " lpoptions [-h server] [-E] [-p printer] -l\n" " lpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " lpoptions [-h server] [-E] -x printer" msgstr "" "用法:\tlpoptions [-h server] [-E] -d printer\n" " \tlpoptions [-h server] [-E] [-p printer] -l\n" " \tlpoptions [-h server] [-E] -p printer -o option[=value] ...\n" " \tlpoptions [-h server] [-E] -x printer" msgid "" "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" msgstr "" "用法:lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" msgstr "用法:ppdc [options] filename.drv [ ... filenameN.drv ]" msgid "Usage: ppdhtml [options] filename.drv >filename.html" msgstr "用法:ppdhtml [options] filename.drv >filename.html" msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgstr "用法:ppdi [options] filename.ppd [ ... filenameN.ppd ]" msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgstr "用法:ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" msgid "" "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" msgstr "" "用法:ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" msgid "Usage: snmp [host-or-ip-address]" msgstr "用法:snmp [host-or-ip-address]" msgid "Value uses indefinite length" msgstr "Value 使用ä¸å®šé•¿åº¦" msgid "VarBind uses indefinite length" msgstr "VarBind 使用ä¸å®šé•¿åº¦" msgid "Vellum Paper" msgstr "羊皮纸" msgid "Version uses indefinite length" msgstr "Version 使用ä¸å®šé•¿åº¦" msgid "Waiting for job to complete." msgstr "正在等待任务完æˆã€‚" msgid "Waiting for printer to become available." msgstr "æ­£åœ¨ç­‰å¾…æ‰“å°æœºå˜å¾—å¯ç”¨ã€‚" msgid "Waiting for printer to finish." msgstr "æ­£åœ¨ç­‰å¾…æ‰“å°æœºå®Œæˆä»»åŠ¡ã€‚" msgid "Warning, no Windows 2000 printer drivers are installed." msgstr "警告,未安装 Windows 2000 æ‰“å°æœºé©±åŠ¨ã€‚" msgid "Waterproof Fabric" msgstr "防水编织物" msgid "Web Interface is Disabled" msgstr "网页界é¢è¢«ç¦ç”¨" msgid "Wet Film" msgstr "湿膜" msgid "Windowed Envelope" msgstr "逿˜Žä¿¡å°" msgid "Yes" msgstr "是" #, c-format msgid "" "You must access this page using the URL https://" "%s:%d%s." msgstr "" "你必须通过此 URL 访问此页é¢ï¼šhttps://%s:%d%s." msgid "Z Fold" msgstr "Z 折" msgid "ZPL Label Printer" msgstr "ZPL æ ‡ç­¾æ‰“å°æœº" msgid "Zebra" msgstr "Zebra" msgid "aborted" msgstr "已中止" msgid "accuracy-units" msgstr "Accuracy Units" msgid "accuracy-units.mm" msgstr "Mm" msgid "accuracy-units.nm" msgstr "Nm" msgid "accuracy-units.um" msgstr "Um" msgid "baling" msgstr "Bale Output" msgid "baling-type" msgstr "Baling Type" msgid "baling-type.band" msgstr "Band" msgid "baling-type.shrink-wrap" msgstr "Shrink Wrap" msgid "baling-type.wrap" msgstr "Wrap" msgid "baling-when" msgstr "Baling When" msgid "baling-when.after-job" msgstr "After Job" msgid "baling-when.after-sets" msgstr "After Sets" msgid "binding" msgstr "Bind Output" msgid "binding-reference-edge" msgstr "Binding Reference Edge" msgid "binding-reference-edge.bottom" msgstr "Bottom" msgid "binding-reference-edge.left" msgstr "Left" msgid "binding-reference-edge.right" msgstr "Right" msgid "binding-reference-edge.top" msgstr "Top" msgid "binding-type" msgstr "Binding Type" msgid "binding-type.adhesive" msgstr "Adhesive" msgid "binding-type.comb" msgstr "Comb" msgid "binding-type.flat" msgstr "Flat" msgid "binding-type.padding" msgstr "Padding" msgid "binding-type.perfect" msgstr "Perfect" msgid "binding-type.spiral" msgstr "Spiral" msgid "binding-type.tape" msgstr "Tape" msgid "binding-type.velo" msgstr "Velo" msgid "canceled" msgstr "已喿¶ˆ" msgid "charge-info-message" msgstr "Charge Info Message" msgid "coating" msgstr "Coat Sheets" msgid "coating-sides" msgstr "Coating Sides" msgid "coating-sides.back" msgstr "Back" msgid "coating-sides.both" msgstr "Both" msgid "coating-sides.front" msgstr "Front" msgid "coating-type" msgstr "Coating Type" msgid "coating-type.archival" msgstr "Archival" msgid "coating-type.archival-glossy" msgstr "Archival Glossy" msgid "coating-type.archival-matte" msgstr "Archival Matte" msgid "coating-type.archival-semi-gloss" msgstr "Archival Semi Gloss" msgid "coating-type.glossy" msgstr "Glossy" msgid "coating-type.high-gloss" msgstr "High Gloss" msgid "coating-type.matte" msgstr "Matte" msgid "coating-type.semi-gloss" msgstr "Semi-Gloss" msgid "coating-type.silicone" msgstr "Silicone" msgid "coating-type.translucent" msgstr "Translucent" msgid "completed" msgstr "已完æˆ" msgid "confirmation-sheet-print" msgstr "Confirmation Sheet Print" msgid "copies" msgstr "Copies" msgid "cover-back" msgstr "Cover Back" msgid "cover-front" msgstr "Cover Front" msgid "cover-sheet-info" msgstr "Cover Sheet Info" msgid "cover-sheet-info-supported.date-time" msgstr "Date Time" msgid "cover-sheet-info-supported.from-name" msgstr "From Name" msgid "cover-sheet-info-supported.logo" msgstr "Logo" msgid "cover-sheet-info-supported.message" msgstr "Message" msgid "cover-sheet-info-supported.organization" msgstr "Organization" msgid "cover-sheet-info-supported.subject" msgstr "Subject" msgid "cover-sheet-info-supported.to-name" msgstr "To Name" msgid "cover-type" msgstr "Cover Type" msgid "cover-type.no-cover" msgstr "No Cover" msgid "cover-type.print-back" msgstr "Print Back" msgid "cover-type.print-both" msgstr "Print Both" msgid "cover-type.print-front" msgstr "Print Front" msgid "cover-type.print-none" msgstr "Print None" msgid "covering" msgstr "Cover Output" msgid "covering-name" msgstr "Covering Name" msgid "covering-name.plain" msgstr "Plain" msgid "covering-name.pre-cut" msgstr "Pre Cut" msgid "covering-name.pre-printed" msgstr "Pre Printed" msgid "cups-deviced failed to execute." msgstr "无法执行 cups-deviced。" msgid "cups-driverd failed to execute." msgstr "无法执行 cups-driverd。" #, c-format msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s" msgstr "cupsaddsmbï¼šæ‰“å°æœºâ€œ%sâ€æ—  PPD 文件 — %s" msgid "cupsctl: Cannot set Listen or Port directly." msgstr "cupsctl:无法直接设置 Listen 或 Port 值。" #, c-format msgid "cupsctl: Unable to connect to server: %s" msgstr "cupsctl:无法连接æœåŠ¡å™¨ï¼š%s" #, c-format msgid "cupsctl: Unknown option \"%s\"" msgstr "cupsctl:未知选项“%sâ€" #, c-format msgid "cupsctl: Unknown option \"-%c\"" msgstr "cupsctl:未知选项“-%câ€" msgid "cupsd: Expected config filename after \"-c\" option." msgstr "cupsd:“-câ€é€‰é¡¹åŽé¢„期é…置文件å。" msgid "cupsd: Expected cups-files.conf filename after \"-s\" option." msgstr "cupsd:“-sâ€é€‰é¡¹åŽé¢„期 cups-files.conf 文件å。" msgid "cupsd: On-demand support not compiled in, running in normal mode." msgstr "cupsd:未编译按需 (on-demand) 支æŒï¼Œä½¿ç”¨ä¸€èˆ¬æ¨¡å¼è¿è¡Œã€‚" msgid "cupsd: Relative cups-files.conf filename not allowed." msgstr "cupsd:ä¸å…许相对 cups-files.conf 文件å。" msgid "cupsd: Unable to get current directory." msgstr "cupsd:无法获å–当å‰ç›®å½•。" msgid "cupsd: Unable to get path to cups-files.conf file." msgstr "cupsdï¼šæ— æ³•èŽ·å– cups-files.conf 文件的路径。" #, c-format msgid "cupsd: Unknown argument \"%s\" - aborting." msgstr "cupsdï¼šæœªçŸ¥å‚æ•°â€œ%sâ€- 已中止。" #, c-format msgid "cupsd: Unknown option \"%c\" - aborting." msgstr "cupsd:未知选项“%câ€- 已中止。" #, c-format msgid "cupsfilter: Invalid document number %d." msgstr "cupsfilter:无效文档数 %d。" #, c-format msgid "cupsfilter: Invalid job ID %d." msgstr "cupsfilter:无效任务 ID %d。" msgid "cupsfilter: Only one filename can be specified." msgstr "cupsfilter:åªèƒ½æŒ‡å®šä¸€ä¸ªæ–‡ä»¶å。" #, c-format msgid "cupsfilter: Unable to get job file - %s" msgstr "cupsfilter:无法获å–任务文件 — %s" msgid "cupstestppd: The -q option is incompatible with the -v option." msgstr "cupstestppd:ä¸èƒ½åŒæ—¶ä½¿ç”¨ -q å’Œ -v 选项。" msgid "cupstestppd: The -v option is incompatible with the -q option." msgstr "cupstestppd:ä¸èƒ½åŒæ—¶ä½¿ç”¨ -v å’Œ -q 选项。" msgid "detailed-status-message" msgstr "Detailed Status Message" #, c-format msgid "device for %s/%s: %s" msgstr "用于 %s/%s 的设备:%s" #, c-format msgid "device for %s: %s" msgstr "用于 %s 的设备:%s" msgid "document-copies" msgstr "Copies" msgid "document-state" msgstr "Document State" msgid "document-state-reasons" msgstr "Detailed Document State" msgid "document-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "document-state-reasons.canceled-at-device" msgstr "Canceled At Device" msgid "document-state-reasons.canceled-by-operator" msgstr "Canceled By Operator" msgid "document-state-reasons.canceled-by-user" msgstr "Canceled By User" msgid "document-state-reasons.completed-successfully" msgstr "Completed Successfully" msgid "document-state-reasons.completed-with-errors" msgstr "Completed With Errors" msgid "document-state-reasons.completed-with-warnings" msgstr "Completed With Warnings" msgid "document-state-reasons.compression-error" msgstr "Compression Error" msgid "document-state-reasons.data-insufficient" msgstr "Data Insufficient" msgid "document-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "document-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "document-state-reasons.digital-signature-wait" msgstr "Digital Signature Wait" msgid "document-state-reasons.document-access-error" msgstr "Document Access Error" msgid "document-state-reasons.document-fetchable" msgstr "Document Fetchable" msgid "document-state-reasons.document-format-error" msgstr "Document Format Error" msgid "document-state-reasons.document-password-error" msgstr "Document Password Error" msgid "document-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "document-state-reasons.document-security-error" msgstr "Document Security Error" msgid "document-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "document-state-reasons.errors-detected" msgstr "Errors Detected" msgid "document-state-reasons.incoming" msgstr "Incoming" msgid "document-state-reasons.interpreting" msgstr "Interpreting" msgid "document-state-reasons.none" msgstr "None" msgid "document-state-reasons.outgoing" msgstr "Outgoing" msgid "document-state-reasons.printing" msgstr "Printing" msgid "document-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "document-state-reasons.queued" msgstr "Queued" msgid "document-state-reasons.queued-for-marker" msgstr "Queued For Marker" msgid "document-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "document-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "document-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "document-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "document-state-reasons.transforming" msgstr "Transforming" msgid "document-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "document-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "document-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "document-state.3" msgstr "Pending" msgid "document-state.5" msgstr "Processing" msgid "document-state.6" msgstr "Processing Stopped" msgid "document-state.7" msgstr "Canceled" msgid "document-state.8" msgstr "Aborted" msgid "document-state.9" msgstr "Completed" msgid "error-index uses indefinite length" msgstr "error-index 使用ä¸å®šé•¿åº¦" msgid "error-status uses indefinite length" msgstr "error-status 使用ä¸å®šé•¿åº¦" msgid "feed-orientation" msgstr "Feed Orientation" msgid "feed-orientation.long-edge-first" msgstr "Long Edge First" msgid "feed-orientation.short-edge-first" msgstr "Short Edge First" msgid "fetch-status-code" msgstr "Fetch Status Code" msgid "finishing-template" msgstr "Finishing Template" msgid "finishing-template.bale" msgstr "Bale" msgid "finishing-template.bind" msgstr "Bind" msgid "finishing-template.bind-bottom" msgstr "Bind Bottom" msgid "finishing-template.bind-left" msgstr "Bind Left" msgid "finishing-template.bind-right" msgstr "Bind Right" msgid "finishing-template.bind-top" msgstr "Bind Top" msgid "finishing-template.booklet-maker" msgstr "Booklet Maker" msgid "finishing-template.coat" msgstr "Coat" msgid "finishing-template.cover" msgstr "Cover" msgid "finishing-template.edge-stitch" msgstr "Edge Stitch" msgid "finishing-template.edge-stitch-bottom" msgstr "Edge Stitch Bottom" msgid "finishing-template.edge-stitch-left" msgstr "Edge Stitch Left" msgid "finishing-template.edge-stitch-right" msgstr "Edge Stitch Right" msgid "finishing-template.edge-stitch-top" msgstr "Edge Stitch Top" msgid "finishing-template.fold" msgstr "Fold" msgid "finishing-template.fold-accordion" msgstr "Fold Accordion" msgid "finishing-template.fold-double-gate" msgstr "Fold Double Gate" msgid "finishing-template.fold-engineering-z" msgstr "Fold Engineering Z" msgid "finishing-template.fold-gate" msgstr "Fold Gate" msgid "finishing-template.fold-half" msgstr "Fold Half" msgid "finishing-template.fold-half-z" msgstr "Fold Half Z" msgid "finishing-template.fold-left-gate" msgstr "Fold Left Gate" msgid "finishing-template.fold-letter" msgstr "Fold Letter" msgid "finishing-template.fold-parallel" msgstr "Fold Parallel" msgid "finishing-template.fold-poster" msgstr "Fold Poster" msgid "finishing-template.fold-right-gate" msgstr "Fold Right Gate" msgid "finishing-template.fold-z" msgstr "Fold Z" msgid "finishing-template.jdf-f10-1" msgstr "JDF F10 1" msgid "finishing-template.jdf-f10-2" msgstr "JDF F10 2" msgid "finishing-template.jdf-f10-3" msgstr "JDF F10 3" msgid "finishing-template.jdf-f12-1" msgstr "JDF F12 1" msgid "finishing-template.jdf-f12-10" msgstr "JDF F12 10" msgid "finishing-template.jdf-f12-11" msgstr "JDF F12 11" msgid "finishing-template.jdf-f12-12" msgstr "JDF F12 12" msgid "finishing-template.jdf-f12-13" msgstr "JDF F12 13" msgid "finishing-template.jdf-f12-14" msgstr "JDF F12 14" msgid "finishing-template.jdf-f12-2" msgstr "JDF F12 2" msgid "finishing-template.jdf-f12-3" msgstr "JDF F12 3" msgid "finishing-template.jdf-f12-4" msgstr "JDF F12 4" msgid "finishing-template.jdf-f12-5" msgstr "JDF F12 5" msgid "finishing-template.jdf-f12-6" msgstr "JDF F12 6" msgid "finishing-template.jdf-f12-7" msgstr "JDF F12 7" msgid "finishing-template.jdf-f12-8" msgstr "JDF F12 8" msgid "finishing-template.jdf-f12-9" msgstr "JDF F12 9" msgid "finishing-template.jdf-f14-1" msgstr "JDF F14 1" msgid "finishing-template.jdf-f16-1" msgstr "JDF F16 1" msgid "finishing-template.jdf-f16-10" msgstr "JDF F16 10" msgid "finishing-template.jdf-f16-11" msgstr "JDF F16 11" msgid "finishing-template.jdf-f16-12" msgstr "JDF F16 12" msgid "finishing-template.jdf-f16-13" msgstr "JDF F16 13" msgid "finishing-template.jdf-f16-14" msgstr "JDF F16 14" msgid "finishing-template.jdf-f16-2" msgstr "JDF F16 2" msgid "finishing-template.jdf-f16-3" msgstr "JDF F16 3" msgid "finishing-template.jdf-f16-4" msgstr "JDF F16 4" msgid "finishing-template.jdf-f16-5" msgstr "JDF F16 5" msgid "finishing-template.jdf-f16-6" msgstr "JDF F16 6" msgid "finishing-template.jdf-f16-7" msgstr "JDF F16 7" msgid "finishing-template.jdf-f16-8" msgstr "JDF F16 8" msgid "finishing-template.jdf-f16-9" msgstr "JDF F16 9" msgid "finishing-template.jdf-f18-1" msgstr "JDF F18 1" msgid "finishing-template.jdf-f18-2" msgstr "JDF F18 2" msgid "finishing-template.jdf-f18-3" msgstr "JDF F18 3" msgid "finishing-template.jdf-f18-4" msgstr "JDF F18 4" msgid "finishing-template.jdf-f18-5" msgstr "JDF F18 5" msgid "finishing-template.jdf-f18-6" msgstr "JDF F18 6" msgid "finishing-template.jdf-f18-7" msgstr "JDF F18 7" msgid "finishing-template.jdf-f18-8" msgstr "JDF F18 8" msgid "finishing-template.jdf-f18-9" msgstr "JDF F18 9" msgid "finishing-template.jdf-f2-1" msgstr "JDF F2 1" msgid "finishing-template.jdf-f20-1" msgstr "JDF F20 1" msgid "finishing-template.jdf-f20-2" msgstr "JDF F20 2" msgid "finishing-template.jdf-f24-1" msgstr "JDF F24 1" msgid "finishing-template.jdf-f24-10" msgstr "JDF F24 10" msgid "finishing-template.jdf-f24-11" msgstr "JDF F24 11" msgid "finishing-template.jdf-f24-2" msgstr "JDF F24 2" msgid "finishing-template.jdf-f24-3" msgstr "JDF F24 3" msgid "finishing-template.jdf-f24-4" msgstr "JDF F24 4" msgid "finishing-template.jdf-f24-5" msgstr "JDF F24 5" msgid "finishing-template.jdf-f24-6" msgstr "JDF F24 6" msgid "finishing-template.jdf-f24-7" msgstr "JDF F24 7" msgid "finishing-template.jdf-f24-8" msgstr "JDF F24 8" msgid "finishing-template.jdf-f24-9" msgstr "JDF F24 9" msgid "finishing-template.jdf-f28-1" msgstr "JDF F28 1" msgid "finishing-template.jdf-f32-1" msgstr "JDF F32 1" msgid "finishing-template.jdf-f32-2" msgstr "JDF F32 2" msgid "finishing-template.jdf-f32-3" msgstr "JDF F32 3" msgid "finishing-template.jdf-f32-4" msgstr "JDF F32 4" msgid "finishing-template.jdf-f32-5" msgstr "JDF F32 5" msgid "finishing-template.jdf-f32-6" msgstr "JDF F32 6" msgid "finishing-template.jdf-f32-7" msgstr "JDF F32 7" msgid "finishing-template.jdf-f32-8" msgstr "JDF F32 8" msgid "finishing-template.jdf-f32-9" msgstr "JDF F32 9" msgid "finishing-template.jdf-f36-1" msgstr "JDF F36 1" msgid "finishing-template.jdf-f36-2" msgstr "JDF F36 2" msgid "finishing-template.jdf-f4-1" msgstr "JDF F4 1" msgid "finishing-template.jdf-f4-2" msgstr "JDF F4 2" msgid "finishing-template.jdf-f40-1" msgstr "JDF F40 1" msgid "finishing-template.jdf-f48-1" msgstr "JDF F48 1" msgid "finishing-template.jdf-f48-2" msgstr "JDF F48 2" msgid "finishing-template.jdf-f6-1" msgstr "JDF F6 1" msgid "finishing-template.jdf-f6-2" msgstr "JDF F6 2" msgid "finishing-template.jdf-f6-3" msgstr "JDF F6 3" msgid "finishing-template.jdf-f6-4" msgstr "JDF F6 4" msgid "finishing-template.jdf-f6-5" msgstr "JDF F6 5" msgid "finishing-template.jdf-f6-6" msgstr "JDF F6 6" msgid "finishing-template.jdf-f6-7" msgstr "JDF F6 7" msgid "finishing-template.jdf-f6-8" msgstr "JDF F6 8" msgid "finishing-template.jdf-f64-1" msgstr "JDF F64 1" msgid "finishing-template.jdf-f64-2" msgstr "JDF F64 2" msgid "finishing-template.jdf-f8-1" msgstr "JDF F8 1" msgid "finishing-template.jdf-f8-2" msgstr "JDF F8 2" msgid "finishing-template.jdf-f8-3" msgstr "JDF F8 3" msgid "finishing-template.jdf-f8-4" msgstr "JDF F8 4" msgid "finishing-template.jdf-f8-5" msgstr "JDF F8 5" msgid "finishing-template.jdf-f8-6" msgstr "JDF F8 6" msgid "finishing-template.jdf-f8-7" msgstr "JDF F8 7" msgid "finishing-template.jog-offset" msgstr "Jog Offset" msgid "finishing-template.laminate" msgstr "Laminate" msgid "finishing-template.punch" msgstr "Punch" msgid "finishing-template.punch-bottom-left" msgstr "Punch Bottom Left" msgid "finishing-template.punch-bottom-right" msgstr "Punch Bottom Right" msgid "finishing-template.punch-dual-bottom" msgstr "Punch Dual Bottom" msgid "finishing-template.punch-dual-left" msgstr "Punch Dual Left" msgid "finishing-template.punch-dual-right" msgstr "Punch Dual Right" msgid "finishing-template.punch-dual-top" msgstr "Punch Dual Top" msgid "finishing-template.punch-multiple-bottom" msgstr "Punch Multiple Bottom" msgid "finishing-template.punch-multiple-left" msgstr "Punch Multiple Left" msgid "finishing-template.punch-multiple-right" msgstr "Punch Multiple Right" msgid "finishing-template.punch-multiple-top" msgstr "Punch Multiple Top" msgid "finishing-template.punch-quad-bottom" msgstr "Punch Quad Bottom" msgid "finishing-template.punch-quad-left" msgstr "Punch Quad Left" msgid "finishing-template.punch-quad-right" msgstr "Punch Quad Right" msgid "finishing-template.punch-quad-top" msgstr "Punch Quad Top" msgid "finishing-template.punch-top-left" msgstr "Punch Top Left" msgid "finishing-template.punch-top-right" msgstr "Punch Top Right" msgid "finishing-template.punch-triple-bottom" msgstr "Punch Triple Bottom" msgid "finishing-template.punch-triple-left" msgstr "Punch Triple Left" msgid "finishing-template.punch-triple-right" msgstr "Punch Triple Right" msgid "finishing-template.punch-triple-top" msgstr "Punch Triple Top" msgid "finishing-template.saddle-stitch" msgstr "Saddle Stitch" msgid "finishing-template.staple" msgstr "Staple" msgid "finishing-template.staple-bottom-left" msgstr "Staple Bottom Left" msgid "finishing-template.staple-bottom-right" msgstr "Staple Bottom Right" msgid "finishing-template.staple-dual-bottom" msgstr "Staple Dual Bottom" msgid "finishing-template.staple-dual-left" msgstr "Staple Dual Left" msgid "finishing-template.staple-dual-right" msgstr "Staple Dual Right" msgid "finishing-template.staple-dual-top" msgstr "Staple Dual Top" msgid "finishing-template.staple-top-left" msgstr "Staple Top Left" msgid "finishing-template.staple-top-right" msgstr "Staple Top Right" msgid "finishing-template.staple-triple-bottom" msgstr "Staple Triple Bottom" msgid "finishing-template.staple-triple-left" msgstr "Staple Triple Left" msgid "finishing-template.staple-triple-right" msgstr "Staple Triple Right" msgid "finishing-template.staple-triple-top" msgstr "Staple Triple Top" msgid "finishing-template.trim" msgstr "Trim" msgid "finishing-template.trim-after-copies" msgstr "Trim After Copies" msgid "finishing-template.trim-after-documents" msgstr "Trim After Documents" msgid "finishing-template.trim-after-job" msgstr "Trim After Job" msgid "finishing-template.trim-after-pages" msgstr "Trim After Pages" msgid "finishings" msgstr "Finishings" msgid "finishings-col" msgstr "Finishings" msgid "finishings.10" msgstr "Fold" msgid "finishings.100" msgstr "Fold Z" msgid "finishings.101" msgstr "Fold Engineering Z" msgid "finishings.11" msgstr "Trim" msgid "finishings.12" msgstr "Bale" msgid "finishings.13" msgstr "Booklet Maker" msgid "finishings.14" msgstr "Jog Offset" msgid "finishings.15" msgstr "Coat" msgid "finishings.16" msgstr "Laminate" msgid "finishings.20" msgstr "Staple Top Left" msgid "finishings.21" msgstr "Staple Bottom Left" msgid "finishings.22" msgstr "Staple Top Right" msgid "finishings.23" msgstr "Staple Bottom Right" msgid "finishings.24" msgstr "Edge Stitch Left" msgid "finishings.25" msgstr "Edge Stitch Top" msgid "finishings.26" msgstr "Edge Stitch Right" msgid "finishings.27" msgstr "Edge Stitch Bottom" msgid "finishings.28" msgstr "Staple Dual Left" msgid "finishings.29" msgstr "Staple Dual Top" msgid "finishings.3" msgstr "None" msgid "finishings.30" msgstr "Staple Dual Right" msgid "finishings.31" msgstr "Staple Dual Bottom" msgid "finishings.32" msgstr "Staple Triple Left" msgid "finishings.33" msgstr "Staple Triple Top" msgid "finishings.34" msgstr "Staple Triple Right" msgid "finishings.35" msgstr "Staple Triple Bottom" msgid "finishings.4" msgstr "Staple" msgid "finishings.5" msgstr "Punch" msgid "finishings.50" msgstr "Bind Left" msgid "finishings.51" msgstr "Bind Top" msgid "finishings.52" msgstr "Bind Right" msgid "finishings.53" msgstr "Bind Bottom" msgid "finishings.6" msgstr "Cover" msgid "finishings.60" msgstr "Trim After Pages" msgid "finishings.61" msgstr "Trim After Documents" msgid "finishings.62" msgstr "Trim After Copies" msgid "finishings.63" msgstr "Trim After Job" msgid "finishings.7" msgstr "Bind" msgid "finishings.70" msgstr "Punch Top Left" msgid "finishings.71" msgstr "Punch Bottom Left" msgid "finishings.72" msgstr "Punch Top Right" msgid "finishings.73" msgstr "Punch Bottom Right" msgid "finishings.74" msgstr "Punch Dual Left" msgid "finishings.75" msgstr "Punch Dual Top" msgid "finishings.76" msgstr "Punch Dual Right" msgid "finishings.77" msgstr "Punch Dual Bottom" msgid "finishings.78" msgstr "Punch Triple Left" msgid "finishings.79" msgstr "Punch Triple Top" msgid "finishings.8" msgstr "Saddle Stitch" msgid "finishings.80" msgstr "Punch Triple Right" msgid "finishings.81" msgstr "Punch Triple Bottom" msgid "finishings.82" msgstr "Punch Quad Left" msgid "finishings.83" msgstr "Punch Quad Top" msgid "finishings.84" msgstr "Punch Quad Right" msgid "finishings.85" msgstr "Punch Quad Bottom" msgid "finishings.86" msgstr "Punch Multiple Left" msgid "finishings.87" msgstr "Punch Multiple Top" msgid "finishings.88" msgstr "Punch Multiple Right" msgid "finishings.89" msgstr "Punch Multiple Bottom" msgid "finishings.9" msgstr "Edge Stitch" msgid "finishings.90" msgstr "Fold Accordion" msgid "finishings.91" msgstr "Fold Double Gate" msgid "finishings.92" msgstr "Fold Gate" msgid "finishings.93" msgstr "Fold Half" msgid "finishings.94" msgstr "Fold Half Z" msgid "finishings.95" msgstr "Fold Left Gate" msgid "finishings.96" msgstr "Fold Letter" msgid "finishings.97" msgstr "Fold Parallel" msgid "finishings.98" msgstr "Fold Poster" msgid "finishings.99" msgstr "Fold Right Gate" msgid "folding" msgstr "Fold" msgid "folding-direction" msgstr "Folding Direction" msgid "folding-direction.inward" msgstr "Inward" msgid "folding-direction.outward" msgstr "Outward" msgid "folding-offset" msgstr "Fold Position" msgid "folding-reference-edge" msgstr "Folding Reference Edge" msgid "folding-reference-edge.bottom" msgstr "Bottom" msgid "folding-reference-edge.left" msgstr "Left" msgid "folding-reference-edge.right" msgstr "Right" msgid "folding-reference-edge.top" msgstr "Top" msgid "font-name-requested" msgstr "Font Name" msgid "font-size-requested" msgstr "Font Size" msgid "force-front-side" msgstr "Force Front Side" msgid "from-name" msgstr "From Name" msgid "held" msgstr "ä¿æŒ" msgid "help\t\tGet help on commands." msgstr "帮助\t\t获å–关于命令的帮助。" msgid "idle" msgstr "空闲" msgid "imposition-template" msgstr "Imposition Template" msgid "imposition-template.none" msgstr "None" msgid "imposition-template.signature" msgstr "Signature" msgid "input-attributes" msgstr "Input Attributes" msgid "input-auto-scaling" msgstr "Scan Auto Scaling" msgid "input-auto-skew-correction" msgstr "Scan Auto Skew Correction" msgid "input-brightness" msgstr "Scan Brightness" msgid "input-color-mode" msgstr "Input Color Mode" msgid "input-color-mode.auto" msgstr "Automatic" msgid "input-color-mode.bi-level" msgstr "Bi-Level" msgid "input-color-mode.cmyk_16" msgstr "CMYK 16" msgid "input-color-mode.cmyk_8" msgstr "CMYK 8" msgid "input-color-mode.color" msgstr "Color" msgid "input-color-mode.color_8" msgstr "Color 8" msgid "input-color-mode.monochrome" msgstr "Monochrome" msgid "input-color-mode.monochrome_16" msgstr "Monochrome 16" msgid "input-color-mode.monochrome_4" msgstr "Monochrome 4" msgid "input-color-mode.monochrome_8" msgstr "Monochrome 8" msgid "input-color-mode.rgb_16" msgstr "RGB 16" msgid "input-color-mode.rgba_16" msgstr "RGBA 16" msgid "input-color-mode.rgba_8" msgstr "RGBA 8" msgid "input-content-type" msgstr "Input Content Type" msgid "input-content-type.auto" msgstr "Automatic" msgid "input-content-type.halftone" msgstr "Halftone" msgid "input-content-type.line-art" msgstr "Line Art" msgid "input-content-type.magazine" msgstr "Magazine" msgid "input-content-type.photo" msgstr "Photo" msgid "input-content-type.text" msgstr "Text" msgid "input-content-type.text-and-photo" msgstr "Text And Photo" msgid "input-contrast" msgstr "Scan Contrast" msgid "input-film-scan-mode" msgstr "Input Film Scan Mode" msgid "input-film-scan-mode.black-and-white-negative-film" msgstr "Black And White Negative Film" msgid "input-film-scan-mode.color-negative-film" msgstr "Color Negative Film" msgid "input-film-scan-mode.color-slide-film" msgstr "Color Slide Film" msgid "input-film-scan-mode.not-applicable" msgstr "Not Applicable" msgid "input-images-to-transfer" msgstr "Scan Images To Transfer" msgid "input-media" msgstr "Input Media" msgid "input-media.auto" msgstr "Automatic" msgid "input-orientation-requested" msgstr "Input Orientation" msgid "input-quality" msgstr "Input Quality" msgid "input-resolution" msgstr "Scan Resolution" msgid "input-scaling-height" msgstr "Scan Scaling Height" msgid "input-scaling-width" msgstr "Scan Scaling Width" msgid "input-scan-regions" msgstr "Scan Regions" msgid "input-sharpness" msgstr "Scan Sharpness" msgid "input-sides" msgstr "Input Sides" msgid "input-source" msgstr "Input Source" msgid "input-source.adf" msgstr "Adf" msgid "input-source.film-reader" msgstr "Film Reader" msgid "input-source.platen" msgstr "Platen" msgid "insert-after-page-number" msgstr "Insert Page Number" msgid "insert-count" msgstr "Insert Count" msgid "insert-sheet" msgstr "Insert Sheet" #, c-format msgid "ippfind: Bad regular expression: %s" msgstr "ippfind:无效的正则表达å¼ï¼š%s" msgid "ippfind: Cannot use --and after --or." msgstr "ippfind:ä¸èƒ½åœ¨ --or åŽä½¿ç”¨ --and。" #, c-format msgid "ippfind: Expected key name after %s." msgstr "ippfind:在 %s åŽé¢„期键å。" #, c-format msgid "ippfind: Expected port range after %s." msgstr "ippfind:在 %s åŽé¢„期端å£èŒƒå›´ã€‚" #, c-format msgid "ippfind: Expected program after %s." msgstr "ippfind:在 %s åŽé¢„期程åºã€‚" #, c-format msgid "ippfind: Expected semi-colon after %s." msgstr "ippfind:在 %s åŽé¢„期分å·ã€‚" msgid "ippfind: Missing close brace in substitution." msgstr "ippfindï¼šæ›¿æ¢æ“作åŽç¼ºå°‘å³èŠ±æ‹¬å·ã€‚" msgid "ippfind: Missing close parenthesis." msgstr "ippfindï¼šç¼ºå°‘å³æ‹¬å·ã€‚" msgid "ippfind: Missing expression before \"--and\"." msgstr "ippfind:“--andâ€å‰ç¼ºå°‘表达å¼ã€‚" msgid "ippfind: Missing expression before \"--or\"." msgstr "ippfind:“--orâ€å‰ç¼ºå°‘表达å¼ã€‚" #, c-format msgid "ippfind: Missing key name after %s." msgstr "ippfind:在 %s åŽç¼ºå°‘é”®å。" msgid "ippfind: Missing open parenthesis." msgstr "ippfind:缺少左括å·ã€‚" #, c-format msgid "ippfind: Missing program after %s." msgstr "ippfind:在 %s åŽç¼ºå°‘程åºã€‚" #, c-format msgid "ippfind: Missing regular expression after %s." msgstr "ippfind:在 %s åŽç¼ºå°‘正则表达å¼ã€‚" #, c-format msgid "ippfind: Missing semi-colon after %s." msgstr "ippfind:在 %s åŽç¼ºå°‘分å·ã€‚" msgid "ippfind: Out of memory." msgstr "ippfind:内存ä¸è¶³ã€‚" msgid "ippfind: Too many parenthesis." msgstr "ippfind:括å·è¿‡å¤šã€‚" #, c-format msgid "ippfind: Unable to browse or resolve: %s" msgstr "ippfind:无法æµè§ˆæˆ–è§£æžï¼š%s" #, c-format msgid "ippfind: Unable to execute \"%s\": %s" msgstr "ippfind:无法执行“%sâ€ï¼š%s" #, c-format msgid "ippfind: Unable to use Bonjour: %s" msgstr "ippfind:无法使用 Bonjour:%s" #, c-format msgid "ippfind: Unknown variable \"{%s}\"." msgstr "ippfind:未知å˜é‡â€œ{%s}â€ã€‚" msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." msgstr "ipptool:“-iâ€å’Œâ€œ-nâ€ä¸èƒ½ä¸Žâ€œ-Pâ€å’Œâ€œ-Xâ€æ··ç”¨ã€‚" #, c-format msgid "ipptool: Bad URI - %s." msgstr "ipptool:无效 URI — %s。" msgid "ipptool: Invalid seconds for \"-i\"." msgstr "ipptool:“-iâ€é€‰é¡¹åŽæŒ‡å®šçš„秒数无效。" msgid "ipptool: May only specify a single URI." msgstr "ipptool:åªèƒ½æŒ‡å®šä¸€ä¸ª URI。" msgid "ipptool: Missing count for \"-n\"." msgstr "ipptool:“-nâ€é€‰é¡¹åŽç¼ºå°‘æ•°é‡ã€‚" msgid "ipptool: Missing filename for \"-f\"." msgstr "ipptool:“-fâ€é€‰é¡¹åŽç¼ºå°‘文件å。" msgid "ipptool: Missing name=value for \"-d\"." msgstr "ipptool:“-dâ€é€‰é¡¹åŽç¼ºå°‘ name=value 声明。" msgid "ipptool: Missing seconds for \"-i\"." msgstr "ipptool:“-iâ€é€‰é¡¹åŽç¼ºå°‘秒数。" msgid "ipptool: URI required before test file." msgstr "ipptool:测试文件å‰éœ€è¦ URI。" #, c-format msgid "ipptool: Unknown option \"-%c\"." msgstr "ipptool:未知选项“-%câ€ã€‚" msgid "job-account-id" msgstr "Job Account ID" msgid "job-account-type" msgstr "Job Account Type" msgid "job-account-type.general" msgstr "General" msgid "job-account-type.group" msgstr "Group" msgid "job-account-type.none" msgstr "None" msgid "job-accounting-output-bin" msgstr "Job Accounting Output Bin" msgid "job-accounting-sheets" msgstr "Job Accounting Sheets" msgid "job-accounting-sheets-type" msgstr "Job Accounting Sheets Type" msgid "job-accounting-sheets-type.none" msgstr "None" msgid "job-accounting-sheets-type.standard" msgstr "Standard" msgid "job-accounting-user-id" msgstr "Job Accounting User ID" msgid "job-collation-type" msgstr "Job Collation Type" msgid "job-collation-type.3" msgstr "Uncollated Sheets" msgid "job-collation-type.4" msgstr "Collated Documents" msgid "job-collation-type.5" msgstr "Uncollated Documents" msgid "job-copies" msgstr "Job Copies" msgid "job-cover-back" msgstr "Job Cover Back" msgid "job-cover-front" msgstr "Job Cover Front" msgid "job-delay-output-until" msgstr "Job Delay Output Until" msgid "job-delay-output-until-time" msgstr "Job Delay Output Until Time" msgid "job-delay-output-until.day-time" msgstr "Day Time" msgid "job-delay-output-until.evening" msgstr "Evening" msgid "job-delay-output-until.indefinite" msgstr "Indefinite" msgid "job-delay-output-until.night" msgstr "Night" msgid "job-delay-output-until.no-delay-output" msgstr "No Delay Output" msgid "job-delay-output-until.second-shift" msgstr "Second Shift" msgid "job-delay-output-until.third-shift" msgstr "Third Shift" msgid "job-delay-output-until.weekend" msgstr "Weekend" msgid "job-error-action" msgstr "Job Error Action" msgid "job-error-action.abort-job" msgstr "Abort Job" msgid "job-error-action.cancel-job" msgstr "Cancel Job" msgid "job-error-action.continue-job" msgstr "Continue Job" msgid "job-error-action.suspend-job" msgstr "Suspend Job" msgid "job-error-sheet" msgstr "Job Error Sheet" msgid "job-error-sheet-type" msgstr "Job Error Sheet Type" msgid "job-error-sheet-type.none" msgstr "None" msgid "job-error-sheet-type.standard" msgstr "Standard" msgid "job-error-sheet-when" msgstr "Job Error Sheet When" msgid "job-error-sheet-when.always" msgstr "Always" msgid "job-error-sheet-when.on-error" msgstr "On Error" msgid "job-finishings" msgstr "Job Finishings" msgid "job-hold-until" msgstr "Hold Until" msgid "job-hold-until-time" msgstr "Job Hold Until Time" msgid "job-hold-until.day-time" msgstr "Day Time" msgid "job-hold-until.evening" msgstr "Evening" msgid "job-hold-until.indefinite" msgstr "Released" msgid "job-hold-until.night" msgstr "Night" msgid "job-hold-until.no-hold" msgstr "No Hold" msgid "job-hold-until.second-shift" msgstr "Second Shift" msgid "job-hold-until.third-shift" msgstr "Third Shift" msgid "job-hold-until.weekend" msgstr "Weekend" msgid "job-mandatory-attributes" msgstr "Job Mandatory Attributes" msgid "job-name" msgstr "Job Name" msgid "job-phone-number" msgstr "Job Phone Number" msgid "job-printer-uri attribute missing." msgstr "缺少 job-printer-uri 属性。" msgid "job-priority" msgstr "Job Priority" msgid "job-recipient-name" msgstr "Job Recipient Name" msgid "job-save-disposition" msgstr "Job Save Disposition" msgid "job-sheet-message" msgstr "Job Sheet Message" msgid "job-sheets" msgstr "Banner Page" msgid "job-sheets-col" msgstr "Banner Page" msgid "job-sheets.first-print-stream-page" msgstr "First Print Stream Page" msgid "job-sheets.job-both-sheet" msgstr "Start and End Sheets" msgid "job-sheets.job-end-sheet" msgstr "End Sheet" msgid "job-sheets.job-start-sheet" msgstr "Start Sheet" msgid "job-sheets.none" msgstr "None" msgid "job-sheets.standard" msgstr "Standard" msgid "job-state" msgstr "Job State" msgid "job-state-message" msgstr "Job State Message" msgid "job-state-reasons" msgstr "Detailed Job State" msgid "job-state-reasons.aborted-by-system" msgstr "Aborted By System" msgid "job-state-reasons.account-authorization-failed" msgstr "Account Authorization Failed" msgid "job-state-reasons.account-closed" msgstr "Account Closed" msgid "job-state-reasons.account-info-needed" msgstr "Account Info Needed" msgid "job-state-reasons.account-limit-reached" msgstr "Account Limit Reached" msgid "job-state-reasons.compression-error" msgstr "Compression Error" msgid "job-state-reasons.conflicting-attributes" msgstr "Conflicting Attributes" msgid "job-state-reasons.connected-to-destination" msgstr "Connected To Destination" msgid "job-state-reasons.connecting-to-destination" msgstr "Connecting To Destination" msgid "job-state-reasons.destination-uri-failed" msgstr "Destination Uri Failed" msgid "job-state-reasons.digital-signature-did-not-verify" msgstr "Digital Signature Did Not Verify" msgid "job-state-reasons.digital-signature-type-not-supported" msgstr "Digital Signature Type Not Supported" msgid "job-state-reasons.document-access-error" msgstr "Document Access Error" msgid "job-state-reasons.document-format-error" msgstr "Document Format Error" msgid "job-state-reasons.document-password-error" msgstr "Document Password Error" msgid "job-state-reasons.document-permission-error" msgstr "Document Permission Error" msgid "job-state-reasons.document-security-error" msgstr "Document Security Error" msgid "job-state-reasons.document-unprintable-error" msgstr "Document Unprintable Error" msgid "job-state-reasons.errors-detected" msgstr "Errors Detected" msgid "job-state-reasons.job-canceled-at-device" msgstr "Job Canceled At Device" msgid "job-state-reasons.job-canceled-by-operator" msgstr "Job Canceled By Operator" msgid "job-state-reasons.job-canceled-by-user" msgstr "Job Canceled By User" msgid "job-state-reasons.job-completed-successfully" msgstr "Job Completed Successfully" msgid "job-state-reasons.job-completed-with-errors" msgstr "Job Completed With Errors" msgid "job-state-reasons.job-completed-with-warnings" msgstr "Job Completed With Warnings" msgid "job-state-reasons.job-data-insufficient" msgstr "Job Data Insufficient" msgid "job-state-reasons.job-delay-output-until-specified" msgstr "Job Delay Output Until Specified" msgid "job-state-reasons.job-digital-signature-wait" msgstr "Job Digital Signature Wait" msgid "job-state-reasons.job-fetchable" msgstr "Job Fetchable" msgid "job-state-reasons.job-held-for-review" msgstr "Job Held For Review" msgid "job-state-reasons.job-hold-until-specified" msgstr "Job Hold Until Specified" msgid "job-state-reasons.job-incoming" msgstr "Job Incoming" msgid "job-state-reasons.job-interpreting" msgstr "Job Interpreting" msgid "job-state-reasons.job-outgoing" msgstr "Job Outgoing" msgid "job-state-reasons.job-password-wait" msgstr "Job Password Wait" msgid "job-state-reasons.job-printed-successfully" msgstr "Job Printed Successfully" msgid "job-state-reasons.job-printed-with-errors" msgstr "Job Printed With Errors" msgid "job-state-reasons.job-printed-with-warnings" msgstr "Job Printed With Warnings" msgid "job-state-reasons.job-printing" msgstr "Job Printing" msgid "job-state-reasons.job-queued" msgstr "Job Queued" msgid "job-state-reasons.job-queued-for-marker" msgstr "Job Queued For Marker" msgid "job-state-reasons.job-release-wait" msgstr "Job Release Wait" msgid "job-state-reasons.job-restartable" msgstr "Job Restartable" msgid "job-state-reasons.job-resuming" msgstr "Job Resuming" msgid "job-state-reasons.job-saved-successfully" msgstr "Job Saved Successfully" msgid "job-state-reasons.job-saved-with-errors" msgstr "Job Saved With Errors" msgid "job-state-reasons.job-saved-with-warnings" msgstr "Job Saved With Warnings" msgid "job-state-reasons.job-saving" msgstr "Job Saving" msgid "job-state-reasons.job-spooling" msgstr "Job Spooling" msgid "job-state-reasons.job-streaming" msgstr "Job Streaming" msgid "job-state-reasons.job-suspended" msgstr "Job Suspended" msgid "job-state-reasons.job-suspended-by-operator" msgstr "Job Suspended By Operator" msgid "job-state-reasons.job-suspended-by-system" msgstr "Job Suspended By System" msgid "job-state-reasons.job-suspended-by-user" msgstr "Job Suspended By User" msgid "job-state-reasons.job-suspending" msgstr "Job Suspending" msgid "job-state-reasons.job-transferring" msgstr "Job Transferring" msgid "job-state-reasons.job-transforming" msgstr "Job Transforming" msgid "job-state-reasons.none" msgstr "None" msgid "job-state-reasons.printer-stopped" msgstr "Printer Stopped" msgid "job-state-reasons.printer-stopped-partly" msgstr "Printer Stopped Partly" msgid "job-state-reasons.processing-to-stop-point" msgstr "Processing To Stop Point" msgid "job-state-reasons.queued-in-device" msgstr "Queued In Device" msgid "job-state-reasons.resources-are-not-ready" msgstr "Resources Are Not Ready" msgid "job-state-reasons.resources-are-not-supported" msgstr "Resources Are Not Supported" msgid "job-state-reasons.service-off-line" msgstr "Service Off Line" msgid "job-state-reasons.submission-interrupted" msgstr "Submission Interrupted" msgid "job-state-reasons.unsupported-attributes-or-values" msgstr "Unsupported Attributes Or Values" msgid "job-state-reasons.unsupported-compression" msgstr "Unsupported Compression" msgid "job-state-reasons.unsupported-document-format" msgstr "Unsupported Document Format" msgid "job-state-reasons.waiting-for-user-action" msgstr "Waiting For User Action" msgid "job-state-reasons.warnings-detected" msgstr "Warnings Detected" msgid "job-state.3" msgstr "Pending" msgid "job-state.4" msgstr "Pending Held" msgid "job-state.5" msgstr "Processing" msgid "job-state.6" msgstr "Processing Stopped" msgid "job-state.7" msgstr "Canceled" msgid "job-state.8" msgstr "Aborted" msgid "job-state.9" msgstr "Completed" msgid "laminating" msgstr "Laminate Pages" msgid "laminating-sides" msgstr "Laminating Sides" msgid "laminating-sides.back" msgstr "Back" msgid "laminating-sides.both" msgstr "Both" msgid "laminating-sides.front" msgstr "Front" msgid "laminating-type" msgstr "Laminating Type" msgid "laminating-type.archival" msgstr "Archival" msgid "laminating-type.glossy" msgstr "Glossy" msgid "laminating-type.high-gloss" msgstr "High Gloss" msgid "laminating-type.matte" msgstr "Matte" msgid "laminating-type.semi-gloss" msgstr "Semi-Gloss" msgid "laminating-type.translucent" msgstr "Translucent" msgid "logo" msgstr "Logo" msgid "lpadmin: Class name can only contain printable characters." msgstr "lpadmin:类å中åªèƒ½åŒ…å«å¯æ‰“å°å­—符。" #, c-format msgid "lpadmin: Expected PPD after \"-%c\" option." msgstr "lpadmin:“-%câ€é€‰é¡¹åŽé¢„期 PPD。" msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option." msgstr "lpadmin:“-uâ€é€‰é¡¹åŽé¢„期 allow/deny:userlist 表达å¼ã€‚" msgid "lpadmin: Expected class after \"-r\" option." msgstr "lpadmin:“-râ€é€‰é¡¹åŽé¢„期类。" msgid "lpadmin: Expected class name after \"-c\" option." msgstr "lpadmin:“-câ€é€‰é¡¹åŽé¢„期类å称。" msgid "lpadmin: Expected description after \"-D\" option." msgstr "lpadmin:“-Dâ€é€‰é¡¹åŽé¢„期æè¿°ã€‚" msgid "lpadmin: Expected device URI after \"-v\" option." msgstr "lpadmin:“-vâ€é€‰é¡¹åŽé¢„期设备 URI。" msgid "lpadmin: Expected file type(s) after \"-I\" option." msgstr "lpadmin:“-Iâ€é€‰é¡¹åŽé¢„期文件类型。" msgid "lpadmin: Expected hostname after \"-h\" option." msgstr "lpadmin:“-hâ€é€‰é¡¹åŽé¢„期主机å。" msgid "lpadmin: Expected location after \"-L\" option." msgstr "lpadmin:“-Lâ€é€‰é¡¹åŽé¢„期ä½ç½®ã€‚" msgid "lpadmin: Expected model after \"-m\" option." msgstr "lpadmin:“-mâ€é€‰é¡¹åŽé¢„期型å·ã€‚" msgid "lpadmin: Expected name after \"-R\" option." msgstr "lpadmin:“-Râ€é€‰é¡¹åŽé¢„期å称。" msgid "lpadmin: Expected name=value after \"-o\" option." msgstr "lpadmin:“-oâ€é€‰é¡¹åŽé¢„期 name=value 表达å¼ã€‚" msgid "lpadmin: Expected printer after \"-p\" option." msgstr "lpadmin:“-pâ€é€‰é¡¹åŽé¢„æœŸæ‰“å°æœºã€‚" msgid "lpadmin: Expected printer name after \"-d\" option." msgstr "lpadmin:“-dâ€é€‰é¡¹åŽé¢„æœŸæ‰“å°æœºå称。" msgid "lpadmin: Expected printer or class after \"-x\" option." msgstr "lpadmin:“-xâ€é€‰é¡¹åŽé¢„æœŸæ‰“å°æœºæˆ–类。" msgid "lpadmin: No member names were seen." msgstr "lpadmin:未找到æˆå‘˜å称。" #, c-format msgid "lpadmin: Printer %s is already a member of class %s." msgstr "lpadminï¼šæ‰“å°æœº %s å·²ç»æ˜¯ç±» %s 中的æˆå‘˜ã€‚" #, c-format msgid "lpadmin: Printer %s is not a member of class %s." msgstr "lpadminï¼šæ‰“å°æœº %s 䏿˜¯ç±» %s 中的æˆå‘˜ã€‚" msgid "lpadmin: Printer name can only contain printable characters." msgstr "lpadminï¼šæ‰“å°æœºå称中åªèƒ½åŒ…å«å¯æ‰“å°å­—符。" msgid "" "lpadmin: Raw queues are deprecated and will stop working in a future version " "of CUPS." msgstr "" msgid "" "lpadmin: System V interface scripts are no longer supported for security " "reasons." msgstr "" msgid "" "lpadmin: Unable to add a printer to the class:\n" " You must specify a printer name first." msgstr "" "lpadminï¼šæ— æ³•å°†æ‰“å°æœºæ·»åŠ åˆ°ç±»ï¼š\n" " ä½ å¿…é¡»å…ˆæŒ‡å®šæ‰“å°æœºå称。" #, c-format msgid "lpadmin: Unable to connect to server: %s" msgstr "lpadmin:无法连接到æœåŠ¡å™¨ï¼š%s" msgid "lpadmin: Unable to create temporary file" msgstr "lpadmin:无法创建临时文件" msgid "" "lpadmin: Unable to delete option:\n" " You must specify a printer name first." msgstr "" "lpadmin:无法删除选项:\n" " ä½ å¿…é¡»å…ˆæŒ‡å®šæ‰“å°æœºå称。" #, c-format msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d." msgstr "lpadmin:无法打开 PPD“%1$sâ€ï¼šåœ¨è¡Œ %3$d 中的 %2$s。" #, c-format msgid "lpadmin: Unable to open PPD file \"%s\" - %s" msgstr "lpadmin:无法打开 PPD 文件“%sâ€- %s" msgid "" "lpadmin: Unable to remove a printer from the class:\n" " You must specify a printer name first." msgstr "" "lpadminï¼šæ— æ³•ä»Žç±»åˆ é™¤æ‰“å°æœºï¼š\n" " ä½ å¿…é¡»å…ˆæŒ‡å®šæ‰“å°æœºå称。" msgid "" "lpadmin: Unable to set the printer options:\n" " You must specify a printer name first." msgstr "" "lpadminï¼šæ— æ³•è®¾ç½®æ‰“å°æœºé€‰é¡¹ï¼š\n" " ä½ å¿…é¡»å…ˆæŒ‡å®šæ‰“å°æœºå称。" #, c-format msgid "lpadmin: Unknown allow/deny option \"%s\"." msgstr "lpadmin:未知å…许/æ‹’ç»é€‰é¡¹â€œ%sâ€ã€‚" #, c-format msgid "lpadmin: Unknown argument \"%s\"." msgstr "lpadminï¼šæœªçŸ¥å‚æ•°â€œ%sâ€ã€‚" #, c-format msgid "lpadmin: Unknown option \"%c\"." msgstr "lpadmin:未知选项“%câ€ã€‚" msgid "lpadmin: Use the 'everywhere' model for shared printers." msgstr "" msgid "lpadmin: Warning - content type list ignored." msgstr "lpadmin:警告 — 内容类型列表已被忽略。" msgid "lpc> " msgstr "lpc> " msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"." msgstr "lpinfo:“--device-idâ€é€‰é¡¹åŽé¢„期 1284 设备 ID 字串。" msgid "lpinfo: Expected language after \"--language\"." msgstr "lpinfo:“--languageâ€é€‰é¡¹åŽé¢„期语言。" msgid "lpinfo: Expected make and model after \"--make-and-model\"." msgstr "lpinfo:“--make-and-modelâ€é€‰é¡¹åŽé¢„期生产商和型å·ã€‚" msgid "lpinfo: Expected product string after \"--product\"." msgstr "lpinfo:“--productâ€é€‰é¡¹åŽé¢„期产å“。" msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"." msgstr "lpinfo:“--exclude-schemesâ€é€‰é¡¹åŽé¢„期方案列表。" msgid "lpinfo: Expected scheme list after \"--include-schemes\"." msgstr "lpinfo:“--include-schemesâ€é€‰é¡¹åŽé¢„期方案列表。" msgid "lpinfo: Expected timeout after \"--timeout\"." msgstr "lpinfo:“--timeoutâ€é€‰é¡¹åŽé¢„期超时。" #, c-format msgid "lpmove: Unable to connect to server: %s" msgstr "lpmove:无法连接到æœåŠ¡å™¨ï¼š%s" #, c-format msgid "lpmove: Unknown argument \"%s\"." msgstr "lpmoveï¼šæœªçŸ¥å‚æ•°â€œ%sâ€ã€‚" msgid "lpoptions: No printers." msgstr "lpoptionsï¼šæ²¡æœ‰æ‰“å°æœºã€‚" #, c-format msgid "lpoptions: Unable to add printer or instance: %s" msgstr "lpoptionsï¼šæ— æ³•æ·»åŠ æ‰“å°æœºæˆ–实例:%s" #, c-format msgid "lpoptions: Unable to get PPD file for %s: %s" msgstr "lpoptions:无法为 %s èŽ·å– PPD 文件:%s" #, c-format msgid "lpoptions: Unable to open PPD file for %s." msgstr "lpoptions:无法为 %s 打开 PPD 文件。" msgid "lpoptions: Unknown printer or class." msgstr "lpoptionsï¼šæœªçŸ¥æ‰“å°æœºæˆ–类。" #, c-format msgid "" "lpstat: error - %s environment variable names non-existent destination \"%s" "\"." msgstr "lpstat:错误 — %s 环境å˜é‡æŒ‡å®šäº†ä¸å­˜åœ¨çš„目的地“%sâ€ã€‚" msgid "material-amount" msgstr "Amount of Material" msgid "material-amount-units" msgstr "Material Amount Units" msgid "material-amount-units.g" msgstr "G" msgid "material-amount-units.kg" msgstr "Kg" msgid "material-amount-units.l" msgstr "L" msgid "material-amount-units.m" msgstr "M" msgid "material-amount-units.ml" msgstr "Ml" msgid "material-amount-units.mm" msgstr "Mm" msgid "material-color" msgstr "Material Color" msgid "material-diameter" msgstr "Material Diameter" msgid "material-diameter-tolerance" msgstr "Material Diameter Tolerance" msgid "material-fill-density" msgstr "Material Fill Density" msgid "material-name" msgstr "Material Name" msgid "material-purpose" msgstr "Material Purpose" msgid "material-purpose.all" msgstr "All" msgid "material-purpose.base" msgstr "Base" msgid "material-purpose.in-fill" msgstr "In Fill" msgid "material-purpose.shell" msgstr "Shell" msgid "material-purpose.support" msgstr "Support" msgid "material-rate" msgstr "Feed Rate" msgid "material-rate-units" msgstr "Material Rate Units" msgid "material-rate-units.mg_second" msgstr "Mg Second" msgid "material-rate-units.ml_second" msgstr "Ml Second" msgid "material-rate-units.mm_second" msgstr "Mm Second" msgid "material-shell-thickness" msgstr "Material Shell Thickness" msgid "material-temperature" msgstr "Material Temperature" msgid "material-type" msgstr "Material Type" msgid "material-type.abs" msgstr "Abs" msgid "material-type.abs-carbon-fiber" msgstr "Abs Carbon Fiber" msgid "material-type.abs-carbon-nanotube" msgstr "Abs Carbon Nanotube" msgid "material-type.chocolate" msgstr "Chocolate" msgid "material-type.gold" msgstr "Gold" msgid "material-type.nylon" msgstr "Nylon" msgid "material-type.pet" msgstr "Pet" msgid "material-type.photopolymer" msgstr "Photopolymer" msgid "material-type.pla" msgstr "Pla" msgid "material-type.pla-conductive" msgstr "Pla Conductive" msgid "material-type.pla-flexible" msgstr "Pla Flexible" msgid "material-type.pla-magnetic" msgstr "Pla Magnetic" msgid "material-type.pla-steel" msgstr "Pla Steel" msgid "material-type.pla-stone" msgstr "Pla Stone" msgid "material-type.pla-wood" msgstr "Pla Wood" msgid "material-type.polycarbonate" msgstr "Polycarbonate" msgid "material-type.pva-dissolvable" msgstr "Dissolvable PVA" msgid "material-type.silver" msgstr "Silver" msgid "material-type.titanium" msgstr "Titanium" msgid "material-type.wax" msgstr "Wax" msgid "materials-col" msgstr "Materials" msgid "media" msgstr "Media" msgid "media-back-coating" msgstr "Media Back Coating" msgid "media-back-coating.glossy" msgstr "Glossy" msgid "media-back-coating.high-gloss" msgstr "High Gloss" msgid "media-back-coating.matte" msgstr "Matte" msgid "media-back-coating.none" msgstr "None" msgid "media-back-coating.satin" msgstr "Satin" msgid "media-back-coating.semi-gloss" msgstr "Semi-Gloss" msgid "media-bottom-margin" msgstr "Media Bottom Margin" msgid "media-col" msgstr "Media" msgid "media-color" msgstr "Media Color" msgid "media-color.black" msgstr "Black" msgid "media-color.blue" msgstr "Blue" msgid "media-color.brown" msgstr "Brown" msgid "media-color.buff" msgstr "Buff" msgid "media-color.clear-black" msgstr "Clear Black" msgid "media-color.clear-blue" msgstr "Clear Blue" msgid "media-color.clear-brown" msgstr "Clear Brown" msgid "media-color.clear-buff" msgstr "Clear Buff" msgid "media-color.clear-cyan" msgstr "Clear Cyan" msgid "media-color.clear-gold" msgstr "Clear Gold" msgid "media-color.clear-goldenrod" msgstr "Clear Goldenrod" msgid "media-color.clear-gray" msgstr "Clear Gray" msgid "media-color.clear-green" msgstr "Clear Green" msgid "media-color.clear-ivory" msgstr "Clear Ivory" msgid "media-color.clear-magenta" msgstr "Clear Magenta" msgid "media-color.clear-multi-color" msgstr "Clear Multi Color" msgid "media-color.clear-mustard" msgstr "Clear Mustard" msgid "media-color.clear-orange" msgstr "Clear Orange" msgid "media-color.clear-pink" msgstr "Clear Pink" msgid "media-color.clear-red" msgstr "Clear Red" msgid "media-color.clear-silver" msgstr "Clear Silver" msgid "media-color.clear-turquoise" msgstr "Clear Turquoise" msgid "media-color.clear-violet" msgstr "Clear Violet" msgid "media-color.clear-white" msgstr "Clear White" msgid "media-color.clear-yellow" msgstr "Clear Yellow" msgid "media-color.cyan" msgstr "Cyan" msgid "media-color.dark-blue" msgstr "Dark Blue" msgid "media-color.dark-brown" msgstr "Dark Brown" msgid "media-color.dark-buff" msgstr "Dark Buff" msgid "media-color.dark-cyan" msgstr "Dark Cyan" msgid "media-color.dark-gold" msgstr "Dark Gold" msgid "media-color.dark-goldenrod" msgstr "Dark Goldenrod" msgid "media-color.dark-gray" msgstr "Dark Gray" msgid "media-color.dark-green" msgstr "Dark Green" msgid "media-color.dark-ivory" msgstr "Dark Ivory" msgid "media-color.dark-magenta" msgstr "Dark Magenta" msgid "media-color.dark-mustard" msgstr "Dark Mustard" msgid "media-color.dark-orange" msgstr "Dark Orange" msgid "media-color.dark-pink" msgstr "Dark Pink" msgid "media-color.dark-red" msgstr "Dark Red" msgid "media-color.dark-silver" msgstr "Dark Silver" msgid "media-color.dark-turquoise" msgstr "Dark Turquoise" msgid "media-color.dark-violet" msgstr "Dark Violet" msgid "media-color.dark-yellow" msgstr "Dark Yellow" msgid "media-color.gold" msgstr "Gold" msgid "media-color.goldenrod" msgstr "Goldenrod" msgid "media-color.gray" msgstr "Gray" msgid "media-color.green" msgstr "Green" msgid "media-color.ivory" msgstr "Ivory" msgid "media-color.light-black" msgstr "Light Black" msgid "media-color.light-blue" msgstr "Light Blue" msgid "media-color.light-brown" msgstr "Light Brown" msgid "media-color.light-buff" msgstr "Light Buff" msgid "media-color.light-cyan" msgstr "Light Cyan" msgid "media-color.light-gold" msgstr "Light Gold" msgid "media-color.light-goldenrod" msgstr "Light Goldenrod" msgid "media-color.light-gray" msgstr "Light Gray" msgid "media-color.light-green" msgstr "Light Green" msgid "media-color.light-ivory" msgstr "Light Ivory" msgid "media-color.light-magenta" msgstr "Light Magenta" msgid "media-color.light-mustard" msgstr "Light Mustard" msgid "media-color.light-orange" msgstr "Light Orange" msgid "media-color.light-pink" msgstr "Light Pink" msgid "media-color.light-red" msgstr "Light Red" msgid "media-color.light-silver" msgstr "Light Silver" msgid "media-color.light-turquoise" msgstr "Light Turquoise" msgid "media-color.light-violet" msgstr "Light Violet" msgid "media-color.light-yellow" msgstr "Light Yellow" msgid "media-color.magenta" msgstr "Magenta" msgid "media-color.multi-color" msgstr "Multi-Color" msgid "media-color.mustard" msgstr "Mustard" msgid "media-color.no-color" msgstr "No Color" msgid "media-color.orange" msgstr "Orange" msgid "media-color.pink" msgstr "Pink" msgid "media-color.red" msgstr "Red" msgid "media-color.silver" msgstr "Silver" msgid "media-color.turquoise" msgstr "Turquoise" msgid "media-color.violet" msgstr "Violet" msgid "media-color.white" msgstr "White" msgid "media-color.yellow" msgstr "Yellow" msgid "media-front-coating" msgstr "Media Front Coating" msgid "media-grain" msgstr "Media Grain" msgid "media-grain.x-direction" msgstr "Cross-Feed Direction" msgid "media-grain.y-direction" msgstr "Feed Direction" msgid "media-hole-count" msgstr "Media Hole Count" msgid "media-info" msgstr "Media Info" msgid "media-input-tray-check" msgstr "Media Input Tray Check" msgid "media-left-margin" msgstr "Media Left Margin" msgid "media-pre-printed" msgstr "Media Preprinted" msgid "media-pre-printed.blank" msgstr "Blank" msgid "media-pre-printed.letter-head" msgstr "Letterhead" msgid "media-pre-printed.pre-printed" msgstr "Preprinted" msgid "media-recycled" msgstr "Media Recycled" msgid "media-recycled.none" msgstr "None" msgid "media-recycled.standard" msgstr "Standard" msgid "media-right-margin" msgstr "Media Right Margin" msgid "media-size" msgstr "Media Dimensions" msgid "media-size-name" msgstr "Media Name" msgid "media-source" msgstr "Media Source" msgid "media-source.alternate" msgstr "Alternate" msgid "media-source.alternate-roll" msgstr "Alternate Roll" msgid "media-source.auto" msgstr "Automatic" msgid "media-source.bottom" msgstr "Bottom" msgid "media-source.by-pass-tray" msgstr "By Pass Tray" msgid "media-source.center" msgstr "Center" msgid "media-source.disc" msgstr "Disc" msgid "media-source.envelope" msgstr "Envelope" msgid "media-source.hagaki" msgstr "Hagaki" msgid "media-source.large-capacity" msgstr "Large Capacity" msgid "media-source.left" msgstr "Left" msgid "media-source.main" msgstr "Main" msgid "media-source.main-roll" msgstr "Main Roll" msgid "media-source.manual" msgstr "Manual" msgid "media-source.middle" msgstr "Middle" msgid "media-source.photo" msgstr "Photo" msgid "media-source.rear" msgstr "Rear" msgid "media-source.right" msgstr "Right" msgid "media-source.roll-1" msgstr "Roll 1" msgid "media-source.roll-10" msgstr "Roll 10" msgid "media-source.roll-2" msgstr "Roll 2" msgid "media-source.roll-3" msgstr "Roll 3" msgid "media-source.roll-4" msgstr "Roll 4" msgid "media-source.roll-5" msgstr "Roll 5" msgid "media-source.roll-6" msgstr "Roll 6" msgid "media-source.roll-7" msgstr "Roll 7" msgid "media-source.roll-8" msgstr "Roll 8" msgid "media-source.roll-9" msgstr "Roll 9" msgid "media-source.side" msgstr "Side" msgid "media-source.top" msgstr "Top" msgid "media-source.tray-1" msgstr "Tray 1" msgid "media-source.tray-10" msgstr "Tray 10" msgid "media-source.tray-11" msgstr "Tray 11" msgid "media-source.tray-12" msgstr "Tray 12" msgid "media-source.tray-13" msgstr "Tray 13" msgid "media-source.tray-14" msgstr "Tray 14" msgid "media-source.tray-15" msgstr "Tray 15" msgid "media-source.tray-16" msgstr "Tray 16" msgid "media-source.tray-17" msgstr "Tray 17" msgid "media-source.tray-18" msgstr "Tray 18" msgid "media-source.tray-19" msgstr "Tray 19" msgid "media-source.tray-2" msgstr "Tray 2" msgid "media-source.tray-20" msgstr "Tray 20" msgid "media-source.tray-3" msgstr "Tray 3" msgid "media-source.tray-4" msgstr "Tray 4" msgid "media-source.tray-5" msgstr "Tray 5" msgid "media-source.tray-6" msgstr "Tray 6" msgid "media-source.tray-7" msgstr "Tray 7" msgid "media-source.tray-8" msgstr "Tray 8" msgid "media-source.tray-9" msgstr "Tray 9" msgid "media-thickness" msgstr "Media Thickness" msgid "media-tooth" msgstr "Media Tooth" msgid "media-tooth.antique" msgstr "Antique" msgid "media-tooth.calendared" msgstr "Calendared" msgid "media-tooth.coarse" msgstr "Coarse" msgid "media-tooth.fine" msgstr "Fine" msgid "media-tooth.linen" msgstr "Linen" msgid "media-tooth.medium" msgstr "Medium" msgid "media-tooth.smooth" msgstr "Smooth" msgid "media-tooth.stipple" msgstr "Stipple" msgid "media-tooth.uncalendared" msgstr "Uncalendared" msgid "media-tooth.vellum" msgstr "Vellum" msgid "media-top-margin" msgstr "Media Top Margin" msgid "media-type" msgstr "Media Type" msgid "media-type.aluminum" msgstr "Aluminum" msgid "media-type.auto" msgstr "Automatic" msgid "media-type.back-print-film" msgstr "Back Print Film" msgid "media-type.cardboard" msgstr "Cardboard" msgid "media-type.cardstock" msgstr "Cardstock" msgid "media-type.cd" msgstr "CD" msgid "media-type.com.hp.advanced-photo" msgstr "Advanced Photo Paper" msgid "media-type.com.hp.brochure-glossy" msgstr "Glossy Brochure Paper" msgid "media-type.com.hp.brochure-matte" msgstr "Matte Brochure Paper" msgid "media-type.com.hp.cover-matte" msgstr "Matte Cover Paper" msgid "media-type.com.hp.ecosmart-lite" msgstr "Office Recycled Paper" msgid "media-type.com.hp.everyday-glossy" msgstr "Everyday Glossy Photo Paper" msgid "media-type.com.hp.everyday-matte" msgstr "Everyday Matte Paper" msgid "media-type.com.hp.extra-heavy" msgstr "Extra Heavyweight Paper" msgid "media-type.com.hp.intermediate" msgstr "Multipurpose Paper" msgid "media-type.com.hp.mid-weight" msgstr "Mid-Weight Paper" msgid "media-type.com.hp.premium-inkjet" msgstr "Premium Inkjet Paper" msgid "media-type.com.hp.premium-photo" msgstr "Premium Photo Glossy Paper" msgid "media-type.com.hp.premium-presentation-matte" msgstr "Premium Presentation Matte Paper" msgid "media-type.continuous" msgstr "Continuous" msgid "media-type.continuous-long" msgstr "Continuous Long" msgid "media-type.continuous-short" msgstr "Continuous Short" msgid "media-type.corrugated-board" msgstr "Corrugated Board" msgid "media-type.disc" msgstr "Optical Disc" msgid "media-type.disc-glossy" msgstr "Glossy Optical Disc" msgid "media-type.disc-high-gloss" msgstr "High Gloss Optical Disc" msgid "media-type.disc-matte" msgstr "Matte Optical Disc" msgid "media-type.disc-satin" msgstr "Satin Optical Disc" msgid "media-type.disc-semi-gloss" msgstr "Semi-Gloss Optical Disc" msgid "media-type.double-wall" msgstr "Double Wall" msgid "media-type.dry-film" msgstr "Dry Film" msgid "media-type.dvd" msgstr "DVD" msgid "media-type.embossing-foil" msgstr "Embossing Foil" msgid "media-type.end-board" msgstr "End Board" msgid "media-type.envelope" msgstr "Envelope" msgid "media-type.envelope-archival" msgstr "Archival Envelope" msgid "media-type.envelope-bond" msgstr "Bond Envelope" msgid "media-type.envelope-coated" msgstr "Coated Envelope" msgid "media-type.envelope-cotton" msgstr "Cotton Envelope" msgid "media-type.envelope-fine" msgstr "Fine Envelope" msgid "media-type.envelope-heavyweight" msgstr "Heavyweight Envelope" msgid "media-type.envelope-inkjet" msgstr "Inkjet Envelope" msgid "media-type.envelope-lightweight" msgstr "Lightweight Envelope" msgid "media-type.envelope-plain" msgstr "Plain Envelope" msgid "media-type.envelope-preprinted" msgstr "Preprinted Envelope" msgid "media-type.envelope-window" msgstr "Windowed Envelope" msgid "media-type.fabric" msgstr "Fabric" msgid "media-type.fabric-archival" msgstr "Archival Fabric" msgid "media-type.fabric-glossy" msgstr "Glossy Fabric" msgid "media-type.fabric-high-gloss" msgstr "High Gloss Fabric" msgid "media-type.fabric-matte" msgstr "Matte Fabric" msgid "media-type.fabric-semi-gloss" msgstr "Semi-Gloss Fabric" msgid "media-type.fabric-waterproof" msgstr "Waterproof Fabric" msgid "media-type.film" msgstr "Film" msgid "media-type.flexo-base" msgstr "Flexo Base" msgid "media-type.flexo-photo-polymer" msgstr "Flexo Photo Polymer" msgid "media-type.flute" msgstr "Flute" msgid "media-type.foil" msgstr "Foil" msgid "media-type.full-cut-tabs" msgstr "Full Cut Tabs" msgid "media-type.glass" msgstr "Glass" msgid "media-type.glass-colored" msgstr "Glass Colored" msgid "media-type.glass-opaque" msgstr "Glass Opaque" msgid "media-type.glass-surfaced" msgstr "Glass Surfaced" msgid "media-type.glass-textured" msgstr "Glass Textured" msgid "media-type.gravure-cylinder" msgstr "Gravure Cylinder" msgid "media-type.image-setter-paper" msgstr "Image Setter Paper" msgid "media-type.imaging-cylinder" msgstr "Imaging Cylinder" msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon-photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii" msgstr "Photo Paper Plus Glossy II" msgid "media-type.jp.co.canon_photo-paper-pro-platinum" msgstr "Photo Paper Pro Platinum" msgid "media-type.labels" msgstr "Labels" msgid "media-type.labels-colored" msgstr "Colored Labels" msgid "media-type.labels-glossy" msgstr "Glossy Labels" msgid "media-type.labels-high-gloss" msgstr "High Gloss Labels" msgid "media-type.labels-inkjet" msgstr "Inkjet Labels" msgid "media-type.labels-matte" msgstr "Matte Labels" msgid "media-type.labels-permanent" msgstr "Permanent Labels" msgid "media-type.labels-satin" msgstr "Satin Labels" msgid "media-type.labels-security" msgstr "Security Labels" msgid "media-type.labels-semi-gloss" msgstr "Semi-Gloss Labels" msgid "media-type.laminating-foil" msgstr "Laminating Foil" msgid "media-type.letterhead" msgstr "Letterhead" msgid "media-type.metal" msgstr "Metal" msgid "media-type.metal-glossy" msgstr "Metal Glossy" msgid "media-type.metal-high-gloss" msgstr "Metal High Gloss" msgid "media-type.metal-matte" msgstr "Metal Matte" msgid "media-type.metal-satin" msgstr "Metal Satin" msgid "media-type.metal-semi-gloss" msgstr "Metal Semi Gloss" msgid "media-type.mounting-tape" msgstr "Mounting Tape" msgid "media-type.multi-layer" msgstr "Multi Layer" msgid "media-type.multi-part-form" msgstr "Multi Part Form" msgid "media-type.other" msgstr "Other" msgid "media-type.paper" msgstr "Paper" msgid "media-type.photographic" msgstr "Photo Paper" msgid "media-type.photographic-archival" msgstr "Photographic Archival" msgid "media-type.photographic-film" msgstr "Photo Film" msgid "media-type.photographic-glossy" msgstr "Glossy Photo Paper" msgid "media-type.photographic-high-gloss" msgstr "High Gloss Photo Paper" msgid "media-type.photographic-matte" msgstr "Matte Photo Paper" msgid "media-type.photographic-satin" msgstr "Satin Photo Paper" msgid "media-type.photographic-semi-gloss" msgstr "Semi-Gloss Photo Paper" msgid "media-type.plastic" msgstr "Plastic" msgid "media-type.plastic-archival" msgstr "Plastic Archival" msgid "media-type.plastic-colored" msgstr "Plastic Colored" msgid "media-type.plastic-glossy" msgstr "Plastic Glossy" msgid "media-type.plastic-high-gloss" msgstr "Plastic High Gloss" msgid "media-type.plastic-matte" msgstr "Plastic Matte" msgid "media-type.plastic-satin" msgstr "Plastic Satin" msgid "media-type.plastic-semi-gloss" msgstr "Plastic Semi Gloss" msgid "media-type.plate" msgstr "Plate" msgid "media-type.polyester" msgstr "Polyester" msgid "media-type.pre-cut-tabs" msgstr "Pre Cut Tabs" msgid "media-type.roll" msgstr "Roll" msgid "media-type.screen" msgstr "Screen" msgid "media-type.screen-paged" msgstr "Screen Paged" msgid "media-type.self-adhesive" msgstr "Self Adhesive" msgid "media-type.self-adhesive-film" msgstr "Self Adhesive Film" msgid "media-type.shrink-foil" msgstr "Shrink Foil" msgid "media-type.single-face" msgstr "Single Face" msgid "media-type.single-wall" msgstr "Single Wall" msgid "media-type.sleeve" msgstr "Sleeve" msgid "media-type.stationery" msgstr "Stationery" msgid "media-type.stationery-archival" msgstr "Stationery Archival" msgid "media-type.stationery-coated" msgstr "Coated Paper" msgid "media-type.stationery-cotton" msgstr "Stationery Cotton" msgid "media-type.stationery-fine" msgstr "Vellum Paper" msgid "media-type.stationery-heavyweight" msgstr "Heavyweight Paper" msgid "media-type.stationery-heavyweight-coated" msgstr "Stationery Heavyweight Coated" msgid "media-type.stationery-inkjet" msgstr "Stationery Inkjet Paper" msgid "media-type.stationery-letterhead" msgstr "Letterhead" msgid "media-type.stationery-lightweight" msgstr "Lightweight Paper" msgid "media-type.stationery-preprinted" msgstr "Preprinted Paper" msgid "media-type.stationery-prepunched" msgstr "Punched Paper" msgid "media-type.tab-stock" msgstr "Tab Stock" msgid "media-type.tractor" msgstr "Tractor" msgid "media-type.transfer" msgstr "Transfer" msgid "media-type.transparency" msgstr "Transparency" msgid "media-type.triple-wall" msgstr "Triple Wall" msgid "media-type.wet-film" msgstr "Wet Film" msgid "media-weight-metric" msgstr "Media Weight (grams per m²)" msgid "media.asme_f_28x40in" msgstr "28 x 40\"" msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in" msgstr "A4 or US Letter" msgid "media.iso_2a0_1189x1682mm" msgstr "2a0" msgid "media.iso_a0_841x1189mm" msgstr "A0" msgid "media.iso_a0x3_1189x2523mm" msgstr "A0x3" msgid "media.iso_a10_26x37mm" msgstr "A10" msgid "media.iso_a1_594x841mm" msgstr "A1" msgid "media.iso_a1x3_841x1783mm" msgstr "A1x3" msgid "media.iso_a1x4_841x2378mm" msgstr "A1x4" msgid "media.iso_a2_420x594mm" msgstr "A2" msgid "media.iso_a2x3_594x1261mm" msgstr "A2x3" msgid "media.iso_a2x4_594x1682mm" msgstr "A2x4" msgid "media.iso_a2x5_594x2102mm" msgstr "A2x5" msgid "media.iso_a3-extra_322x445mm" msgstr "A3 (Extra)" msgid "media.iso_a3_297x420mm" msgstr "A3" msgid "media.iso_a3x3_420x891mm" msgstr "A3x3" msgid "media.iso_a3x4_420x1189mm" msgstr "A3x4" msgid "media.iso_a3x5_420x1486mm" msgstr "A3x5" msgid "media.iso_a3x6_420x1783mm" msgstr "A3x6" msgid "media.iso_a3x7_420x2080mm" msgstr "A3x7" msgid "media.iso_a4-extra_235.5x322.3mm" msgstr "A4 (Extra)" msgid "media.iso_a4-tab_225x297mm" msgstr "A4 (Tab)" msgid "media.iso_a4_210x297mm" msgstr "A4" msgid "media.iso_a4x3_297x630mm" msgstr "A4x3" msgid "media.iso_a4x4_297x841mm" msgstr "A4x4" msgid "media.iso_a4x5_297x1051mm" msgstr "A4x5" msgid "media.iso_a4x6_297x1261mm" msgstr "A4x6" msgid "media.iso_a4x7_297x1471mm" msgstr "A4x7" msgid "media.iso_a4x8_297x1682mm" msgstr "A4x8" msgid "media.iso_a4x9_297x1892mm" msgstr "A4x9" msgid "media.iso_a5-extra_174x235mm" msgstr "A5 (Extra)" msgid "media.iso_a5_148x210mm" msgstr "A5" msgid "media.iso_a6_105x148mm" msgstr "A6" msgid "media.iso_a7_74x105mm" msgstr "A7" msgid "media.iso_a8_52x74mm" msgstr "A8" msgid "media.iso_a9_37x52mm" msgstr "A9" msgid "media.iso_b0_1000x1414mm" msgstr "B0" msgid "media.iso_b10_31x44mm" msgstr "B10" msgid "media.iso_b1_707x1000mm" msgstr "B1" msgid "media.iso_b2_500x707mm" msgstr "B2" msgid "media.iso_b3_353x500mm" msgstr "B3" msgid "media.iso_b4_250x353mm" msgstr "B4" msgid "media.iso_b5-extra_201x276mm" msgstr "B5 (Extra)" msgid "media.iso_b5_176x250mm" msgstr "B5 Envelope" msgid "media.iso_b6_125x176mm" msgstr "B6" msgid "media.iso_b6c4_125x324mm" msgstr "B6/C4 Envelope" msgid "media.iso_b7_88x125mm" msgstr "B7" msgid "media.iso_b8_62x88mm" msgstr "B8" msgid "media.iso_b9_44x62mm" msgstr "B9" msgid "media.iso_c0_917x1297mm" msgstr "C0 Envelope" msgid "media.iso_c10_28x40mm" msgstr "C10 Envelope" msgid "media.iso_c1_648x917mm" msgstr "C1 Envelope" msgid "media.iso_c2_458x648mm" msgstr "C2 Envelope" msgid "media.iso_c3_324x458mm" msgstr "C3 Envelope" msgid "media.iso_c4_229x324mm" msgstr "C4 Envelope" msgid "media.iso_c5_162x229mm" msgstr "C5 Envelope" msgid "media.iso_c6_114x162mm" msgstr "C6 Envelope" msgid "media.iso_c6c5_114x229mm" msgstr "C6c5 Envelope" msgid "media.iso_c7_81x114mm" msgstr "C7 Envelope" msgid "media.iso_c7c6_81x162mm" msgstr "C7c6 Envelope" msgid "media.iso_c8_57x81mm" msgstr "C8 Envelope" msgid "media.iso_c9_40x57mm" msgstr "C9 Envelope" msgid "media.iso_dl_110x220mm" msgstr "DL Envelope" msgid "media.iso_ra0_860x1220mm" msgstr "Ra0" msgid "media.iso_ra1_610x860mm" msgstr "Ra1" msgid "media.iso_ra2_430x610mm" msgstr "Ra2" msgid "media.iso_ra3_305x430mm" msgstr "Ra3" msgid "media.iso_ra4_215x305mm" msgstr "Ra4" msgid "media.iso_sra0_900x1280mm" msgstr "Sra0" msgid "media.iso_sra1_640x900mm" msgstr "Sra1" msgid "media.iso_sra2_450x640mm" msgstr "Sra2" msgid "media.iso_sra3_320x450mm" msgstr "Sra3" msgid "media.iso_sra4_225x320mm" msgstr "Sra4" msgid "media.jis_b0_1030x1456mm" msgstr "JIS B0" msgid "media.jis_b10_32x45mm" msgstr "JIS B10" msgid "media.jis_b1_728x1030mm" msgstr "JIS B1" msgid "media.jis_b2_515x728mm" msgstr "JIS B2" msgid "media.jis_b3_364x515mm" msgstr "JIS B3" msgid "media.jis_b4_257x364mm" msgstr "JIS B4" msgid "media.jis_b5_182x257mm" msgstr "JIS B5" msgid "media.jis_b6_128x182mm" msgstr "JIS B6" msgid "media.jis_b7_91x128mm" msgstr "JIS B7" msgid "media.jis_b8_64x91mm" msgstr "JIS B8" msgid "media.jis_b9_45x64mm" msgstr "JIS B9" msgid "media.jis_exec_216x330mm" msgstr "JIS Executive" msgid "media.jpn_chou2_111.1x146mm" msgstr "Chou 2 Envelope" msgid "media.jpn_chou3_120x235mm" msgstr "Chou 3 Envelope" msgid "media.jpn_chou4_90x205mm" msgstr "Chou 4 Envelope" msgid "media.jpn_hagaki_100x148mm" msgstr "Hagaki" msgid "media.jpn_kahu_240x322.1mm" msgstr "Kahu Envelope" msgid "media.jpn_kaku2_240x332mm" msgstr "Kahu 2 Envelope" msgid "media.jpn_kaku3_216x277mm" msgstr "216 x 277mme" msgid "media.jpn_kaku4_197x267mm" msgstr "197 x 267mme" msgid "media.jpn_kaku5_190x240mm" msgstr "190 x 240mme" msgid "media.jpn_kaku7_142x205mm" msgstr "142 x 205mme" msgid "media.jpn_kaku8_119x197mm" msgstr "119 x 197mme" msgid "media.jpn_oufuku_148x200mm" msgstr "Oufuku Reply Postcard" msgid "media.jpn_you4_105x235mm" msgstr "You 4 Envelope" msgid "media.na_10x11_10x11in" msgstr "10 x 11\"" msgid "media.na_10x13_10x13in" msgstr "10 x 13\"" msgid "media.na_10x14_10x14in" msgstr "10 x 14\"" msgid "media.na_10x15_10x15in" msgstr "10 x 15\"" msgid "media.na_11x12_11x12in" msgstr "11 x 12\"" msgid "media.na_11x15_11x15in" msgstr "11 x 15\"" msgid "media.na_12x19_12x19in" msgstr "12 x 19\"" msgid "media.na_5x7_5x7in" msgstr "5 x 7\"" msgid "media.na_6x9_6x9in" msgstr "6 x 9\"" msgid "media.na_7x9_7x9in" msgstr "7 x 9\"" msgid "media.na_9x11_9x11in" msgstr "9 x 11\"" msgid "media.na_a2_4.375x5.75in" msgstr "A2 Envelope" msgid "media.na_arch-a_9x12in" msgstr "9 x 12\"" msgid "media.na_arch-b_12x18in" msgstr "12 x 18\"" msgid "media.na_arch-c_18x24in" msgstr "18 x 24\"" msgid "media.na_arch-d_24x36in" msgstr "24 x 36\"" msgid "media.na_arch-e2_26x38in" msgstr "26 x 38\"" msgid "media.na_arch-e3_27x39in" msgstr "27 x 39\"" msgid "media.na_arch-e_36x48in" msgstr "36 x 48\"" msgid "media.na_b-plus_12x19.17in" msgstr "12 x 19.17\"" msgid "media.na_c5_6.5x9.5in" msgstr "C5 Envelope" msgid "media.na_c_17x22in" msgstr "17 x 22\"" msgid "media.na_d_22x34in" msgstr "22 x 34\"" msgid "media.na_e_34x44in" msgstr "34 x 44\"" msgid "media.na_edp_11x14in" msgstr "11 x 14\"" msgid "media.na_eur-edp_12x14in" msgstr "12 x 14\"" msgid "media.na_executive_7.25x10.5in" msgstr "Executive" msgid "media.na_f_44x68in" msgstr "44 x 68\"" msgid "media.na_fanfold-eur_8.5x12in" msgstr "European Fanfold" msgid "media.na_fanfold-us_11x14.875in" msgstr "US Fanfold" msgid "media.na_foolscap_8.5x13in" msgstr "Foolscap" msgid "media.na_govt-legal_8x13in" msgstr "8 x 13\"" msgid "media.na_govt-letter_8x10in" msgstr "8 x 10\"" msgid "media.na_index-3x5_3x5in" msgstr "3 x 5\"" msgid "media.na_index-4x6-ext_6x8in" msgstr "6 x 8\"" msgid "media.na_index-4x6_4x6in" msgstr "4 x 6\"" msgid "media.na_index-5x8_5x8in" msgstr "5 x 8\"" msgid "media.na_invoice_5.5x8.5in" msgstr "Statement" msgid "media.na_ledger_11x17in" msgstr "11 x 17\"" msgid "media.na_legal-extra_9.5x15in" msgstr "US Legal (Extra)" msgid "media.na_legal_8.5x14in" msgstr "US Legal" msgid "media.na_letter-extra_9.5x12in" msgstr "US Letter (Extra)" msgid "media.na_letter-plus_8.5x12.69in" msgstr "US Letter (Plus)" msgid "media.na_letter_8.5x11in" msgstr "US Letter" msgid "media.na_monarch_3.875x7.5in" msgstr "Monarch Envelope" msgid "media.na_number-10_4.125x9.5in" msgstr "#10 Envelope" msgid "media.na_number-11_4.5x10.375in" msgstr "#11 Envelope" msgid "media.na_number-12_4.75x11in" msgstr "#12 Envelope" msgid "media.na_number-14_5x11.5in" msgstr "#14 Envelope" msgid "media.na_number-9_3.875x8.875in" msgstr "#9 Envelope" msgid "media.na_oficio_8.5x13.4in" msgstr "8.5 x 13.4\"" msgid "media.na_personal_3.625x6.5in" msgstr "Personal Envelope" msgid "media.na_quarto_8.5x10.83in" msgstr "Quarto" msgid "media.na_super-a_8.94x14in" msgstr "8.94 x 14\"" msgid "media.na_super-b_13x19in" msgstr "13 x 19\"" msgid "media.na_wide-format_30x42in" msgstr "30 x 42\"" msgid "media.oe_12x16_12x16in" msgstr "12 x 16\"" msgid "media.oe_14x17_14x17in" msgstr "14 x 17\"" msgid "media.oe_18x22_18x22in" msgstr "18 x 22\"" msgid "media.oe_a2plus_17x24in" msgstr "17 x 24\"" msgid "media.oe_photo-10r_10x12in" msgstr "10 x 12\"" msgid "media.oe_photo-20r_20x24in" msgstr "20 x 24\"" msgid "media.oe_photo-l_3.5x5in" msgstr "3.5 x 5\"" msgid "media.oe_photo-s10r_10x15in" msgstr "10 x 15\"" msgid "media.om_16k_184x260mm" msgstr "184 x 260mm" msgid "media.om_16k_195x270mm" msgstr "195 x 270mm" msgid "media.om_dai-pa-kai_275x395mm" msgstr "275 x 395mm" msgid "media.om_folio-sp_215x315mm" msgstr "Folio" msgid "media.om_folio_210x330mm" msgstr "Folio (Special)" msgid "media.om_invite_220x220mm" msgstr "Invitation Envelope" msgid "media.om_italian_110x230mm" msgstr "Italian Envelope" msgid "media.om_juuro-ku-kai_198x275mm" msgstr "198 x 275mm" msgid "media.om_large-photo_200x300" msgstr "200 x 300mm" msgid "media.om_medium-photo_130x180mm" msgstr "130 x 180mm" msgid "media.om_pa-kai_267x389mm" msgstr "267 x 389mm" msgid "media.om_postfix_114x229mm" msgstr "Postfix Envelope" msgid "media.om_small-photo_100x150mm" msgstr "100 x 150mm" msgid "media.om_wide-photo_100x200mm" msgstr "100 x 200mm" msgid "media.prc_10_324x458mm" msgstr "Chinese #10 Envelope" msgid "media.prc_16k_146x215mm" msgstr "Chinese 16k" msgid "media.prc_1_102x165mm" msgstr "Chinese #1 Envelope" msgid "media.prc_2_102x176mm" msgstr "Chinese #2 Envelope" msgid "media.prc_32k_97x151mm" msgstr "Chinese 32k" msgid "media.prc_3_125x176mm" msgstr "Chinese #3 Envelope" msgid "media.prc_4_110x208mm" msgstr "Chinese #4 Envelope" msgid "media.prc_5_110x220mm" msgstr "Chinese #5 Envelope" msgid "media.prc_6_120x320mm" msgstr "Chinese #6 Envelope" msgid "media.prc_7_160x230mm" msgstr "Chinese #7 Envelope" msgid "media.prc_8_120x309mm" msgstr "Chinese #8 Envelope" msgid "media.roc_16k_7.75x10.75in" msgstr "ROC 16k" msgid "media.roc_8k_10.75x15.5in" msgstr "ROC 8k" #, c-format msgid "members of class %s:" msgstr "ç±» %s çš„æˆå‘˜ï¼š" msgid "multiple-document-handling" msgstr "Multiple Document Handling" msgid "multiple-document-handling.separate-documents-collated-copies" msgstr "Separate Documents Collated Copies" msgid "multiple-document-handling.separate-documents-uncollated-copies" msgstr "Separate Documents Uncollated Copies" msgid "multiple-document-handling.single-document" msgstr "Single Document" msgid "multiple-document-handling.single-document-new-sheet" msgstr "Single Document New Sheet" msgid "multiple-object-handling" msgstr "Multiple Object Handling" msgid "multiple-object-handling.auto" msgstr "Automatic" msgid "multiple-object-handling.best-fit" msgstr "Best Fit" msgid "multiple-object-handling.best-quality" msgstr "Best Quality" msgid "multiple-object-handling.best-speed" msgstr "Best Speed" msgid "multiple-object-handling.one-at-a-time" msgstr "One At A Time" msgid "multiple-operation-time-out-action" msgstr "Multiple Operation Time Out Action" msgid "multiple-operation-time-out-action.abort-job" msgstr "Abort Job" msgid "multiple-operation-time-out-action.hold-job" msgstr "Hold Job" msgid "multiple-operation-time-out-action.process-job" msgstr "Process Job" msgid "no entries" msgstr "æ— æ¡ç›®" msgid "no system default destination" msgstr "无系统默认目标" msgid "noise-removal" msgstr "Noise Removal" msgid "notify-attributes" msgstr "Notify Attributes" msgid "notify-charset" msgstr "Notify Charset" msgid "notify-events" msgstr "Notify Events" msgid "notify-events not specified." msgstr "未指定 notify-events。" msgid "notify-events.document-completed" msgstr "Document Completed" msgid "notify-events.document-config-changed" msgstr "Document Config Changed" msgid "notify-events.document-created" msgstr "Document Created" msgid "notify-events.document-fetchable" msgstr "Document Fetchable" msgid "notify-events.document-state-changed" msgstr "Document State Changed" msgid "notify-events.document-stopped" msgstr "Document Stopped" msgid "notify-events.job-completed" msgstr "Job Completed" msgid "notify-events.job-config-changed" msgstr "Job Config Changed" msgid "notify-events.job-created" msgstr "Job Created" msgid "notify-events.job-fetchable" msgstr "Job Fetchable" msgid "notify-events.job-progress" msgstr "Job Progress" msgid "notify-events.job-state-changed" msgstr "Job State Changed" msgid "notify-events.job-stopped" msgstr "Job Stopped" msgid "notify-events.none" msgstr "None" msgid "notify-events.printer-config-changed" msgstr "Printer Config Changed" msgid "notify-events.printer-finishings-changed" msgstr "Printer Finishings Changed" msgid "notify-events.printer-media-changed" msgstr "Printer Media Changed" msgid "notify-events.printer-queue-order-changed" msgstr "Printer Queue Order Changed" msgid "notify-events.printer-restarted" msgstr "Printer Restarted" msgid "notify-events.printer-shutdown" msgstr "Printer Shutdown" msgid "notify-events.printer-state-changed" msgstr "Printer State Changed" msgid "notify-events.printer-stopped" msgstr "Printer Stopped" msgid "notify-get-interval" msgstr "Notify Get Interval" msgid "notify-lease-duration" msgstr "Notify Lease Duration" msgid "notify-natural-language" msgstr "Notify Natural Language" msgid "notify-pull-method" msgstr "Notify Pull Method" msgid "notify-recipient-uri" msgstr "Notify Recipient" #, c-format msgid "notify-recipient-uri URI \"%s\" is already used." msgstr "notify-recipient-uri URI“%sâ€å·²è¢«å ç”¨ã€‚" #, c-format msgid "notify-recipient-uri URI \"%s\" uses unknown scheme." msgstr "notify-recipient-uri URI“%sâ€ä½¿ç”¨äº†æœªçŸ¥æ–¹æ¡ˆã€‚" msgid "notify-sequence-numbers" msgstr "Notify Sequence Numbers" msgid "notify-subscription-ids" msgstr "Notify Subscription Ids" msgid "notify-time-interval" msgstr "Notify Time Interval" msgid "notify-user-data" msgstr "Notify User Data" msgid "notify-wait" msgstr "Notify Wait" msgid "number-of-retries" msgstr "Number Of Retries" msgid "number-up" msgstr "Number-Up" msgid "object-offset" msgstr "Object Offset" msgid "object-size" msgstr "Object Size" msgid "organization-name" msgstr "Organization Name" msgid "orientation-requested" msgstr "Orientation" msgid "orientation-requested.3" msgstr "Portrait" msgid "orientation-requested.4" msgstr "Landscape" msgid "orientation-requested.5" msgstr "Reverse Landscape" msgid "orientation-requested.6" msgstr "Reverse Portrait" msgid "orientation-requested.7" msgstr "None" msgid "output-attributes" msgstr "Output Attributes" msgid "output-bin" msgstr "Output Bin" msgid "output-bin.auto" msgstr "Automatic" msgid "output-bin.bottom" msgstr "Bottom" msgid "output-bin.center" msgstr "Center" msgid "output-bin.face-down" msgstr "Face Down" msgid "output-bin.face-up" msgstr "Face Up" msgid "output-bin.large-capacity" msgstr "Large Capacity" msgid "output-bin.left" msgstr "Left" msgid "output-bin.mailbox-1" msgstr "Mailbox 1" msgid "output-bin.mailbox-10" msgstr "Mailbox 10" msgid "output-bin.mailbox-2" msgstr "Mailbox 2" msgid "output-bin.mailbox-3" msgstr "Mailbox 3" msgid "output-bin.mailbox-4" msgstr "Mailbox 4" msgid "output-bin.mailbox-5" msgstr "Mailbox 5" msgid "output-bin.mailbox-6" msgstr "Mailbox 6" msgid "output-bin.mailbox-7" msgstr "Mailbox 7" msgid "output-bin.mailbox-8" msgstr "Mailbox 8" msgid "output-bin.mailbox-9" msgstr "Mailbox 9" msgid "output-bin.middle" msgstr "Middle" msgid "output-bin.my-mailbox" msgstr "My Mailbox" msgid "output-bin.rear" msgstr "Rear" msgid "output-bin.right" msgstr "Right" msgid "output-bin.side" msgstr "Side" msgid "output-bin.stacker-1" msgstr "Stacker 1" msgid "output-bin.stacker-10" msgstr "Stacker 10" msgid "output-bin.stacker-2" msgstr "Stacker 2" msgid "output-bin.stacker-3" msgstr "Stacker 3" msgid "output-bin.stacker-4" msgstr "Stacker 4" msgid "output-bin.stacker-5" msgstr "Stacker 5" msgid "output-bin.stacker-6" msgstr "Stacker 6" msgid "output-bin.stacker-7" msgstr "Stacker 7" msgid "output-bin.stacker-8" msgstr "Stacker 8" msgid "output-bin.stacker-9" msgstr "Stacker 9" msgid "output-bin.top" msgstr "Top" msgid "output-bin.tray-1" msgstr "Tray 1" msgid "output-bin.tray-10" msgstr "Tray 10" msgid "output-bin.tray-2" msgstr "Tray 2" msgid "output-bin.tray-3" msgstr "Tray 3" msgid "output-bin.tray-4" msgstr "Tray 4" msgid "output-bin.tray-5" msgstr "Tray 5" msgid "output-bin.tray-6" msgstr "Tray 6" msgid "output-bin.tray-7" msgstr "Tray 7" msgid "output-bin.tray-8" msgstr "Tray 8" msgid "output-bin.tray-9" msgstr "Tray 9" msgid "output-compression-quality-factor" msgstr "Scanned Image Quality" msgid "page-delivery" msgstr "Page Delivery" msgid "page-delivery.reverse-order-face-down" msgstr "Reverse Order Face Down" msgid "page-delivery.reverse-order-face-up" msgstr "Reverse Order Face Up" msgid "page-delivery.same-order-face-down" msgstr "Same Order Face Down" msgid "page-delivery.same-order-face-up" msgstr "Same Order Face Up" msgid "page-delivery.system-specified" msgstr "System Specified" msgid "page-order-received" msgstr "Page Order Received" msgid "page-order-received.1-to-n-order" msgstr "1 To N Order" msgid "page-order-received.n-to-1-order" msgstr "N To 1 Order" msgid "page-ranges" msgstr "Page Ranges" msgid "pages" msgstr "Pages" msgid "pages-per-subset" msgstr "Pages Per Subset" msgid "pending" msgstr "正在等待" msgid "platform-shape" msgstr "Platform Shape" msgid "platform-shape.ellipse" msgstr "Round" msgid "platform-shape.rectangle" msgstr "Rectangle" msgid "platform-temperature" msgstr "Platform Temperature" msgid "post-dial-string" msgstr "Post-dial String" #, c-format msgid "ppdc: Adding include directory \"%s\"." msgstr "ppdc:正在添加包å«ç›®å½•“%sâ€ã€‚" #, c-format msgid "ppdc: Adding/updating UI text from %s." msgstr "ppdc:正在从 %s 添加/æ›´æ–° UI 文本。" #, c-format msgid "ppdc: Bad boolean value (%s) on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d è¡Œä¸­åŒ…å«æ— æ•ˆå¸ƒé‡Œå€¼ï¼ˆ%1$s)。" #, c-format msgid "ppdc: Bad font attribute: %s" msgstr "ppdc:无效的字体属性:%s" #, c-format msgid "ppdc: Bad resolution name \"%s\" on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d è¡Œä¸­åŒ…å«æ— æ•ˆåˆ†è¾¨çއå称“%1$sâ€ã€‚" #, c-format msgid "ppdc: Bad status keyword %s on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d è¡Œä¸­åŒ…å«æ— æ•ˆçжæ€å…³é”®è¯ %1$s。" #, c-format msgid "ppdc: Bad variable substitution ($%c) on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d è¡Œä¸­åŒ…å«æ— æ•ˆå˜é‡æ›¿ä»£ %1$c。" #, c-format msgid "ppdc: Choice found on line %d of %s with no Option." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中找到ä¸å¸¦æœ‰ Option çš„ Choice。" #, c-format msgid "ppdc: Duplicate #po for locale %s on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d 行中包å«é‡å¤çš„为地域 %1$s æä¾›çš„ #po。" #, c-format msgid "ppdc: Expected a filter definition on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期滤镜定义。" #, c-format msgid "ppdc: Expected a program name on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期程åºå。" #, c-format msgid "ppdc: Expected boolean value on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期布里值。" #, c-format msgid "ppdc: Expected charset after Font on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Font 声明åŽé¢„期字符集。" #, c-format msgid "ppdc: Expected choice code on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期选择代ç ã€‚" #, c-format msgid "ppdc: Expected choice name/text on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期选择åç§°/文本。" #, c-format msgid "ppdc: Expected color order for ColorModel on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 ColorModel 的颜色顺åºã€‚" #, c-format msgid "ppdc: Expected colorspace for ColorModel on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 ColorMode 的色彩空间。" #, c-format msgid "ppdc: Expected compression for ColorModel on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 ColorMode 的压缩模å¼ã€‚" #, c-format msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 UIConstraints çš„é™åˆ¶å­—符串。" #, c-format msgid "" "ppdc: Expected driver type keyword following DriverType on line %d of %s." msgstr "" "ppdc:共 %2$s 行中的第 %1$d 行中在 DriverType 声明åŽé¢„期驱动类型关键è¯ã€‚" #, c-format msgid "ppdc: Expected duplex type after Duplex on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Duplex 声明åŽé¢„期åŒå·¥ç±»åž‹ã€‚" #, c-format msgid "ppdc: Expected encoding after Font on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Font 声明åŽé¢„期编ç ç±»åž‹ã€‚" #, c-format msgid "ppdc: Expected filename after #po %s on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d 行中在 #po %1$s 声明åŽé¢„期文件å。" #, c-format msgid "ppdc: Expected group name/text on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期组åç§°/文本。" #, c-format msgid "ppdc: Expected include filename on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期引用文件å。" #, c-format msgid "ppdc: Expected integer on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期整数。" #, c-format msgid "ppdc: Expected locale after #po on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 #po 声明åŽé¢„期地域值。" #, c-format msgid "ppdc: Expected name after %s on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d 行中在 %1$s åŽé¢„期å称。" #, c-format msgid "ppdc: Expected name after FileName on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 FileName 声明åŽé¢„期å称。" #, c-format msgid "ppdc: Expected name after Font on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Font 声明åŽé¢„期å称。" #, c-format msgid "ppdc: Expected name after Manufacturer on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Manufacturer 声明åŽé¢„期å称。" #, c-format msgid "ppdc: Expected name after MediaSize on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 MediaSize 声明åŽé¢„期å称。" #, c-format msgid "ppdc: Expected name after ModelName on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 ModelName 声明åŽé¢„期å称。" #, c-format msgid "ppdc: Expected name after PCFileName on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 PCFileName 声明åŽé¢„期å称。" #, c-format msgid "ppdc: Expected name/text after %s on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d 行中在 %1$s 声明åŽé¢„期åç§°/文本。" #, c-format msgid "ppdc: Expected name/text after Installable on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Installable 声明åŽé¢„期åç§°/文本。" #, c-format msgid "ppdc: Expected name/text after Resolution on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Resolution 声明åŽé¢„期åç§°/文本。" #, c-format msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s." msgstr "" "ppdc:共 %2$s 行中的第 %1$d 行中在 ColorModel 声明åŽé¢„期åç§°/文本组åˆã€‚" #, c-format msgid "ppdc: Expected option name/text on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期选项åç§°/文本。" #, c-format msgid "ppdc: Expected option section on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期选项节。" #, c-format msgid "ppdc: Expected option type on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期选项类型。" #, c-format msgid "ppdc: Expected override field after Resolution on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Resolution 声明åŽé¢„期覆盖项。" #, c-format msgid "ppdc: Expected quoted string on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期引å·ä¸­çš„字符串。" #, c-format msgid "ppdc: Expected real number on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期实数。" #, c-format msgid "" "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s." msgstr "" "ppdc:共 %2$s 行中的第 %1$d 行中在 ColorProfile 声明åŽé¢„期分辨率/介质类型。" #, c-format msgid "" "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d " "of %s." msgstr "" "ppdc:共 %2$s 行中的第 %1$d 行中在 SimpleColorProfile 声明åŽé¢„期分辨率/介质类" "型。" #, c-format msgid "ppdc: Expected selector after %s on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d 行中在 %1$s 声明åŽé¢„期选择器。" #, c-format msgid "ppdc: Expected status after Font on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Font 声明åŽé¢„期状æ€ã€‚" #, c-format msgid "ppdc: Expected string after Copyright on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 Copyright 声明åŽçš„字符串。" #, c-format msgid "ppdc: Expected string after Version on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 Version 声明åŽçš„字符串。" #, c-format msgid "ppdc: Expected two option names on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期两个选项å。" #, c-format msgid "ppdc: Expected value after %s on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d 行中 %1$s åŽé¢„期值。" #, c-format msgid "ppdc: Expected version after Font on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 Font 声明åŽçš„版本å·ã€‚" #, c-format msgid "ppdc: Invalid #include/#po filename \"%s\"." msgstr "ppdc:无效的 #include/#po 文件å“%sâ€ã€‚" #, c-format msgid "ppdc: Invalid cost for filter on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中滤镜值无效。" #, c-format msgid "ppdc: Invalid empty MIME type for filter on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中滤镜 MIME 类型无效且为空。" #, c-format msgid "ppdc: Invalid empty program name for filter on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中滤镜程åºå无效且为空。" #, c-format msgid "ppdc: Invalid option section \"%s\" on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d è¡Œä¸­å«æœ‰æ— æ•ˆé€‰é¡¹èŠ‚â€œ%1$sâ€ã€‚" #, c-format msgid "ppdc: Invalid option type \"%s\" on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d è¡Œä¸­å«æœ‰æ— æ•ˆé€‰é¡¹ç±»åž‹â€œ%1$sâ€ã€‚" #, c-format msgid "ppdc: Loading driver information file \"%s\"." msgstr "ppdcï¼šæ­£åœ¨è½½å…¥é©±åŠ¨ä¿¡æ¯æ–‡ä»¶â€œ%sâ€ã€‚" #, c-format msgid "ppdc: Loading messages for locale \"%s\"." msgstr "ppdc:正在载入地域“%sâ€çš„æ¶ˆæ¯æ–‡æœ¬ã€‚" #, c-format msgid "ppdc: Loading messages from \"%s\"." msgstr "ppdc:正在从“%sâ€è½½å…¥æ¶ˆæ¯æ–‡æœ¬ã€‚" #, c-format msgid "ppdc: Missing #endif at end of \"%s\"." msgstr "ppdc:在“%sâ€ç»“尾缺少 #endif。" #, c-format msgid "ppdc: Missing #if on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中缺少 #if。" #, c-format msgid "" "ppdc: Need a msgid line before any translation strings on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中,在任何翻译字串å‰éœ€è¦ msgid 行。" #, c-format msgid "ppdc: No message catalog provided for locale %s." msgstr "ppdc:未给地域 %s æä¾›æ¶ˆæ¯æ–‡æœ¬ç›®å½•。" #, c-format msgid "ppdc: Option %s defined in two different groups on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d 行中选项 %1$s 在两个ä¸åŒçš„组中被定义。" #, c-format msgid "ppdc: Option %s redefined with a different type on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d 行中选项 %1$s 被é‡å®šä¹‰ä¸ºå¦ä¸€ä¸ªç±»åž‹ã€‚" #, c-format msgid "ppdc: Option constraint must *name on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d è¡Œä¸­é€‰é¡¹åˆ¶çº¦å¿…é¡»åŒ…å« *name 声明。" #, c-format msgid "ppdc: Too many nested #if's on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d 行中包å«å¤ªå¤šåµŒå¥—çš„ #if。" #, c-format msgid "ppdc: Unable to create PPD file \"%s\" - %s." msgstr "ppdc:无法创建 PPD 文件“%s†— %s。" #, c-format msgid "ppdc: Unable to create output directory %s: %s" msgstr "ppdc:无法创建输出目录 %s:%s" #, c-format msgid "ppdc: Unable to create output pipes: %s" msgstr "ppdc:无法创建输出管é“:%s" #, c-format msgid "ppdc: Unable to execute cupstestppd: %s" msgstr "ppdc:无法执行 cupstestppd:%s" #, c-format msgid "ppdc: Unable to find #po file %s on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d 行中找ä¸åˆ° #po 文件 %1$s。" #, c-format msgid "ppdc: Unable to find include file \"%s\" on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d 行中找ä¸åˆ°å¼•用的文件“%1$sâ€ã€‚" #, c-format msgid "ppdc: Unable to find localization for \"%s\" - %s" msgstr "ppdc:无法为“%sâ€æ‰¾åˆ°æœ¬åœ°åŒ–文件 — %s" #, c-format msgid "ppdc: Unable to load localization file \"%s\" - %s" msgstr "ppdc:无法载入本地化文件“%s†— %s" #, c-format msgid "ppdc: Unable to open %s: %s" msgstr "ppdc:无法打开 %s:%s" #, c-format msgid "ppdc: Undefined variable (%s) on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d è¡Œä¸­å«æœ‰æœªå®šä¹‰çš„å˜é‡ï¼ˆ%1$s)。" #, c-format msgid "ppdc: Unexpected text on line %d of %s." msgstr "ppdc:共 %2$s 行中的第 %1$d è¡Œä¸­å«æœ‰æœªé¢„期的文本。" #, c-format msgid "ppdc: Unknown driver type %s on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d è¡Œä¸­åŒ…å«æœªçŸ¥é©±åŠ¨ç±»åž‹ %1$s。" #, c-format msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d è¡Œä¸­å«æœ‰æœªçŸ¥åŒå·¥ç±»åž‹â€œ%1$sâ€ã€‚" #, c-format msgid "ppdc: Unknown media size \"%s\" on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d è¡Œä¸­åŒ…å«æœªçŸ¥åª’体大å°â€œ%1$sâ€ã€‚" #, c-format msgid "ppdc: Unknown message catalog format for \"%s\"." msgstr "ppdc:用于“%sâ€çš„æ¶ˆæ¯æ–‡æœ¬ç›®å½•æ ¼å¼æœªçŸ¥ã€‚" #, c-format msgid "ppdc: Unknown token \"%s\" seen on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d 行中找到未知令牌“%1$sâ€ã€‚" #, c-format msgid "" "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d 行中实数“%1$sâ€åŽæ‰¾åˆ°æœªçŸ¥å°¾éšå­—符。" #, c-format msgid "ppdc: Unterminated string starting with %c on line %d of %s." msgstr "ppdc:共 %3$s 行中的第 %2$d è¡Œä¸­åŒ…å«æœªç»ˆæ­¢çš„字符串,开头为 %1$c。" #, c-format msgid "ppdc: Warning - overlapping filename \"%s\"." msgstr "ppdc:警告 — é‡å¤çš„æ–‡ä»¶å“%sâ€ã€‚" #, c-format msgid "ppdc: Writing %s." msgstr "ppdc:正在写入 %s。" #, c-format msgid "ppdc: Writing PPD files to directory \"%s\"." msgstr "ppdc:正在将 PPD 文件写入到路径“%sâ€ã€‚" #, c-format msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s." msgstr "ppdmerge:在 %2$s ä¸­åŒ…å«æ— æ•ˆçš„ LanguageVersion“%1$sâ€ã€‚" #, c-format msgid "ppdmerge: Ignoring PPD file %s." msgstr "ppdmerge:正在忽略 PPD 文件 %s。" #, c-format msgid "ppdmerge: Unable to backup %s to %s - %s" msgstr "ppdmerge:无法将 %s 备份至 %s — %s" msgid "pre-dial-string" msgstr "Pre-dial String" msgid "presentation-direction-number-up" msgstr "Number-Up Layout" msgid "presentation-direction-number-up.tobottom-toleft" msgstr "Top-Bottom, Right-Left" msgid "presentation-direction-number-up.tobottom-toright" msgstr "Top-Bottom, Left-Right" msgid "presentation-direction-number-up.toleft-tobottom" msgstr "Right-Left, Top-Bottom" msgid "presentation-direction-number-up.toleft-totop" msgstr "Right-Left, Bottom-Top" msgid "presentation-direction-number-up.toright-tobottom" msgstr "Left-Right, Top-Bottom" msgid "presentation-direction-number-up.toright-totop" msgstr "Left-Right, Bottom-Top" msgid "presentation-direction-number-up.totop-toleft" msgstr "Bottom-Top, Right-Left" msgid "presentation-direction-number-up.totop-toright" msgstr "Bottom-Top, Left-Right" msgid "print-accuracy" msgstr "Print Accuracy" msgid "print-base" msgstr "Print Base" msgid "print-base.brim" msgstr "Brim" msgid "print-base.none" msgstr "None" msgid "print-base.raft" msgstr "Raft" msgid "print-base.skirt" msgstr "Skirt" msgid "print-base.standard" msgstr "Standard" msgid "print-color-mode" msgstr "Print Color Mode" msgid "print-color-mode.auto" msgstr "Automatic" msgid "print-color-mode.bi-level" msgstr "Bi-Level" msgid "print-color-mode.color" msgstr "Color" msgid "print-color-mode.highlight" msgstr "Highlight" msgid "print-color-mode.monochrome" msgstr "Monochrome" msgid "print-color-mode.process-bi-level" msgstr "Process Bi-Level" msgid "print-color-mode.process-monochrome" msgstr "Process Monochrome" msgid "print-content-optimize" msgstr "Print Optimization" msgid "print-content-optimize.auto" msgstr "Automatic" msgid "print-content-optimize.graphic" msgstr "Graphics" msgid "print-content-optimize.photo" msgstr "Photo" msgid "print-content-optimize.text" msgstr "Text" msgid "print-content-optimize.text-and-graphic" msgstr "Text And Graphics" msgid "print-objects" msgstr "Print Objects" msgid "print-quality" msgstr "Print Quality" msgid "print-quality.3" msgstr "Draft" msgid "print-quality.4" msgstr "Normal" msgid "print-quality.5" msgstr "High" msgid "print-rendering-intent" msgstr "Print Rendering Intent" msgid "print-rendering-intent.absolute" msgstr "Absolute" msgid "print-rendering-intent.auto" msgstr "Automatic" msgid "print-rendering-intent.perceptual" msgstr "Perceptual" msgid "print-rendering-intent.relative" msgstr "Relative" msgid "print-rendering-intent.relative-bpc" msgstr "Relative w/Black Point Compensation" msgid "print-rendering-intent.saturation" msgstr "Saturation" msgid "print-scaling" msgstr "Print Scaling" msgid "print-scaling.auto" msgstr "Automatic" msgid "print-scaling.auto-fit" msgstr "Auto Fit" msgid "print-scaling.fill" msgstr "Fill" msgid "print-scaling.fit" msgstr "Fit" msgid "print-scaling.none" msgstr "None" msgid "print-supports" msgstr "Print Supports" msgid "print-supports.material" msgstr "Material" msgid "print-supports.none" msgstr "None" msgid "print-supports.standard" msgstr "Standard" #, c-format msgid "printer %s disabled since %s -" msgstr "æ‰“å°æœº %s 从 %s 开始被ç¦ç”¨ -" #, c-format msgid "printer %s is idle. enabled since %s" msgstr "æ‰“å°æœº %s ç›®å‰ç©ºé—²ã€‚从 %s 开始å¯ç”¨" #, c-format msgid "printer %s now printing %s-%d. enabled since %s" msgstr "æ‰“å°æœº %s æ­£åœ¨æ‰“å° %s-%d。从 %s 开始å¯ç”¨" #, c-format msgid "printer %s/%s disabled since %s -" msgstr "æ‰“å°æœº %s/%s 从 %s 开始被ç¦ç”¨ -" #, c-format msgid "printer %s/%s is idle. enabled since %s" msgstr "æ‰“å°æœº %s/%s ç›®å‰ç©ºé—²ã€‚从 %s 开始å¯ç”¨" #, c-format msgid "printer %s/%s now printing %s-%d. enabled since %s" msgstr "æ‰“å°æœº %s/%s æ­£åœ¨æ‰“å° %s-%d。从 %s 开始å¯ç”¨" msgid "printer-message-from-operator" msgstr "Printer Message From Operator" msgid "printer-resolution" msgstr "Printer Resolution" msgid "printer-state" msgstr "Printer State" msgid "printer-state-reasons" msgstr "Detailed Printer State" msgid "printer-state-reasons.alert-removal-of-binary-change-entry" msgstr "Alert Removal Of Binary Change Entry" msgid "printer-state-reasons.bander-added" msgstr "Bander Added" msgid "printer-state-reasons.bander-almost-empty" msgstr "Bander Almost Empty" msgid "printer-state-reasons.bander-almost-full" msgstr "Bander Almost Full" msgid "printer-state-reasons.bander-at-limit" msgstr "Bander At Limit" msgid "printer-state-reasons.bander-closed" msgstr "Bander Closed" msgid "printer-state-reasons.bander-configuration-change" msgstr "Bander Configuration Change" msgid "printer-state-reasons.bander-cover-closed" msgstr "Bander Cover Closed" msgid "printer-state-reasons.bander-cover-open" msgstr "Bander Cover Open" msgid "printer-state-reasons.bander-empty" msgstr "Bander Empty" msgid "printer-state-reasons.bander-full" msgstr "Bander Full" msgid "printer-state-reasons.bander-interlock-closed" msgstr "Bander Interlock Closed" msgid "printer-state-reasons.bander-interlock-open" msgstr "Bander Interlock Open" msgid "printer-state-reasons.bander-jam" msgstr "Bander Jam" msgid "printer-state-reasons.bander-life-almost-over" msgstr "Bander Life Almost Over" msgid "printer-state-reasons.bander-life-over" msgstr "Bander Life Over" msgid "printer-state-reasons.bander-memory-exhausted" msgstr "Bander Memory Exhausted" msgid "printer-state-reasons.bander-missing" msgstr "Bander Missing" msgid "printer-state-reasons.bander-motor-failure" msgstr "Bander Motor Failure" msgid "printer-state-reasons.bander-near-limit" msgstr "Bander Near Limit" msgid "printer-state-reasons.bander-offline" msgstr "Bander Offline" msgid "printer-state-reasons.bander-opened" msgstr "Bander Opened" msgid "printer-state-reasons.bander-over-temperature" msgstr "Bander Over Temperature" msgid "printer-state-reasons.bander-power-saver" msgstr "Bander Power Saver" msgid "printer-state-reasons.bander-recoverable-failure" msgstr "Bander Recoverable Failure" msgid "printer-state-reasons.bander-recoverable-storage" msgstr "Bander Recoverable Storage" msgid "printer-state-reasons.bander-removed" msgstr "Bander Removed" msgid "printer-state-reasons.bander-resource-added" msgstr "Bander Resource Added" msgid "printer-state-reasons.bander-resource-removed" msgstr "Bander Resource Removed" msgid "printer-state-reasons.bander-thermistor-failure" msgstr "Bander Thermistor Failure" msgid "printer-state-reasons.bander-timing-failure" msgstr "Bander Timing Failure" msgid "printer-state-reasons.bander-turned-off" msgstr "Bander Turned Off" msgid "printer-state-reasons.bander-turned-on" msgstr "Bander Turned On" msgid "printer-state-reasons.bander-under-temperature" msgstr "Bander Under Temperature" msgid "printer-state-reasons.bander-unrecoverable-failure" msgstr "Bander Unrecoverable Failure" msgid "printer-state-reasons.bander-unrecoverable-storage-error" msgstr "Bander Unrecoverable Storage Error" msgid "printer-state-reasons.bander-warming-up" msgstr "Bander Warming Up" msgid "printer-state-reasons.binder-added" msgstr "Binder Added" msgid "printer-state-reasons.binder-almost-empty" msgstr "Binder Almost Empty" msgid "printer-state-reasons.binder-almost-full" msgstr "Binder Almost Full" msgid "printer-state-reasons.binder-at-limit" msgstr "Binder At Limit" msgid "printer-state-reasons.binder-closed" msgstr "Binder Closed" msgid "printer-state-reasons.binder-configuration-change" msgstr "Binder Configuration Change" msgid "printer-state-reasons.binder-cover-closed" msgstr "Binder Cover Closed" msgid "printer-state-reasons.binder-cover-open" msgstr "Binder Cover Open" msgid "printer-state-reasons.binder-empty" msgstr "Binder Empty" msgid "printer-state-reasons.binder-full" msgstr "Binder Full" msgid "printer-state-reasons.binder-interlock-closed" msgstr "Binder Interlock Closed" msgid "printer-state-reasons.binder-interlock-open" msgstr "Binder Interlock Open" msgid "printer-state-reasons.binder-jam" msgstr "Binder Jam" msgid "printer-state-reasons.binder-life-almost-over" msgstr "Binder Life Almost Over" msgid "printer-state-reasons.binder-life-over" msgstr "Binder Life Over" msgid "printer-state-reasons.binder-memory-exhausted" msgstr "Binder Memory Exhausted" msgid "printer-state-reasons.binder-missing" msgstr "Binder Missing" msgid "printer-state-reasons.binder-motor-failure" msgstr "Binder Motor Failure" msgid "printer-state-reasons.binder-near-limit" msgstr "Binder Near Limit" msgid "printer-state-reasons.binder-offline" msgstr "Binder Offline" msgid "printer-state-reasons.binder-opened" msgstr "Binder Opened" msgid "printer-state-reasons.binder-over-temperature" msgstr "Binder Over Temperature" msgid "printer-state-reasons.binder-power-saver" msgstr "Binder Power Saver" msgid "printer-state-reasons.binder-recoverable-failure" msgstr "Binder Recoverable Failure" msgid "printer-state-reasons.binder-recoverable-storage" msgstr "Binder Recoverable Storage" msgid "printer-state-reasons.binder-removed" msgstr "Binder Removed" msgid "printer-state-reasons.binder-resource-added" msgstr "Binder Resource Added" msgid "printer-state-reasons.binder-resource-removed" msgstr "Binder Resource Removed" msgid "printer-state-reasons.binder-thermistor-failure" msgstr "Binder Thermistor Failure" msgid "printer-state-reasons.binder-timing-failure" msgstr "Binder Timing Failure" msgid "printer-state-reasons.binder-turned-off" msgstr "Binder Turned Off" msgid "printer-state-reasons.binder-turned-on" msgstr "Binder Turned On" msgid "printer-state-reasons.binder-under-temperature" msgstr "Binder Under Temperature" msgid "printer-state-reasons.binder-unrecoverable-failure" msgstr "Binder Unrecoverable Failure" msgid "printer-state-reasons.binder-unrecoverable-storage-error" msgstr "Binder Unrecoverable Storage Error" msgid "printer-state-reasons.binder-warming-up" msgstr "Binder Warming Up" msgid "printer-state-reasons.camera-failure" msgstr "Camera Failure" msgid "printer-state-reasons.chamber-cooling" msgstr "Chamber Cooling" msgid "printer-state-reasons.chamber-heating" msgstr "Chamber Heating" msgid "printer-state-reasons.chamber-temperature-high" msgstr "Chamber Temperature High" msgid "printer-state-reasons.chamber-temperature-low" msgstr "Chamber Temperature Low" msgid "printer-state-reasons.cleaner-life-almost-over" msgstr "Cleaner Life Almost Over" msgid "printer-state-reasons.cleaner-life-over" msgstr "Cleaner Life Over" msgid "printer-state-reasons.configuration-change" msgstr "Configuration Change" msgid "printer-state-reasons.connecting-to-device" msgstr "Connecting To Device" msgid "printer-state-reasons.cover-open" msgstr "Cover Open" msgid "printer-state-reasons.deactivated" msgstr "Deactivated" msgid "printer-state-reasons.developer-empty" msgstr "Developer Empty" msgid "printer-state-reasons.developer-low" msgstr "Developer Low" msgid "printer-state-reasons.die-cutter-added" msgstr "Die Cutter Added" msgid "printer-state-reasons.die-cutter-almost-empty" msgstr "Die Cutter Almost Empty" msgid "printer-state-reasons.die-cutter-almost-full" msgstr "Die Cutter Almost Full" msgid "printer-state-reasons.die-cutter-at-limit" msgstr "Die Cutter At Limit" msgid "printer-state-reasons.die-cutter-closed" msgstr "Die Cutter Closed" msgid "printer-state-reasons.die-cutter-configuration-change" msgstr "Die Cutter Configuration Change" msgid "printer-state-reasons.die-cutter-cover-closed" msgstr "Die Cutter Cover Closed" msgid "printer-state-reasons.die-cutter-cover-open" msgstr "Die Cutter Cover Open" msgid "printer-state-reasons.die-cutter-empty" msgstr "Die Cutter Empty" msgid "printer-state-reasons.die-cutter-full" msgstr "Die Cutter Full" msgid "printer-state-reasons.die-cutter-interlock-closed" msgstr "Die Cutter Interlock Closed" msgid "printer-state-reasons.die-cutter-interlock-open" msgstr "Die Cutter Interlock Open" msgid "printer-state-reasons.die-cutter-jam" msgstr "Die Cutter Jam" msgid "printer-state-reasons.die-cutter-life-almost-over" msgstr "Die Cutter Life Almost Over" msgid "printer-state-reasons.die-cutter-life-over" msgstr "Die Cutter Life Over" msgid "printer-state-reasons.die-cutter-memory-exhausted" msgstr "Die Cutter Memory Exhausted" msgid "printer-state-reasons.die-cutter-missing" msgstr "Die Cutter Missing" msgid "printer-state-reasons.die-cutter-motor-failure" msgstr "Die Cutter Motor Failure" msgid "printer-state-reasons.die-cutter-near-limit" msgstr "Die Cutter Near Limit" msgid "printer-state-reasons.die-cutter-offline" msgstr "Die Cutter Offline" msgid "printer-state-reasons.die-cutter-opened" msgstr "Die Cutter Opened" msgid "printer-state-reasons.die-cutter-over-temperature" msgstr "Die Cutter Over Temperature" msgid "printer-state-reasons.die-cutter-power-saver" msgstr "Die Cutter Power Saver" msgid "printer-state-reasons.die-cutter-recoverable-failure" msgstr "Die Cutter Recoverable Failure" msgid "printer-state-reasons.die-cutter-recoverable-storage" msgstr "Die Cutter Recoverable Storage" msgid "printer-state-reasons.die-cutter-removed" msgstr "Die Cutter Removed" msgid "printer-state-reasons.die-cutter-resource-added" msgstr "Die Cutter Resource Added" msgid "printer-state-reasons.die-cutter-resource-removed" msgstr "Die Cutter Resource Removed" msgid "printer-state-reasons.die-cutter-thermistor-failure" msgstr "Die Cutter Thermistor Failure" msgid "printer-state-reasons.die-cutter-timing-failure" msgstr "Die Cutter Timing Failure" msgid "printer-state-reasons.die-cutter-turned-off" msgstr "Die Cutter Turned Off" msgid "printer-state-reasons.die-cutter-turned-on" msgstr "Die Cutter Turned On" msgid "printer-state-reasons.die-cutter-under-temperature" msgstr "Die Cutter Under Temperature" msgid "printer-state-reasons.die-cutter-unrecoverable-failure" msgstr "Die Cutter Unrecoverable Failure" msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error" msgstr "Die Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.die-cutter-warming-up" msgstr "Die Cutter Warming Up" msgid "printer-state-reasons.door-open" msgstr "Door Open" msgid "printer-state-reasons.extruder-cooling" msgstr "Extruder Cooling" msgid "printer-state-reasons.extruder-failure" msgstr "Extruder Failure" msgid "printer-state-reasons.extruder-heating" msgstr "Extruder Heating" msgid "printer-state-reasons.extruder-jam" msgstr "Extruder Jam" msgid "printer-state-reasons.extruder-temperature-high" msgstr "Extruder Temperature High" msgid "printer-state-reasons.extruder-temperature-low" msgstr "Extruder Temperature Low" msgid "printer-state-reasons.fan-failure" msgstr "Fan Failure" msgid "printer-state-reasons.folder-added" msgstr "Folder Added" msgid "printer-state-reasons.folder-almost-empty" msgstr "Folder Almost Empty" msgid "printer-state-reasons.folder-almost-full" msgstr "Folder Almost Full" msgid "printer-state-reasons.folder-at-limit" msgstr "Folder At Limit" msgid "printer-state-reasons.folder-closed" msgstr "Folder Closed" msgid "printer-state-reasons.folder-configuration-change" msgstr "Folder Configuration Change" msgid "printer-state-reasons.folder-cover-closed" msgstr "Folder Cover Closed" msgid "printer-state-reasons.folder-cover-open" msgstr "Folder Cover Open" msgid "printer-state-reasons.folder-empty" msgstr "Folder Empty" msgid "printer-state-reasons.folder-full" msgstr "Folder Full" msgid "printer-state-reasons.folder-interlock-closed" msgstr "Folder Interlock Closed" msgid "printer-state-reasons.folder-interlock-open" msgstr "Folder Interlock Open" msgid "printer-state-reasons.folder-jam" msgstr "Folder Jam" msgid "printer-state-reasons.folder-life-almost-over" msgstr "Folder Life Almost Over" msgid "printer-state-reasons.folder-life-over" msgstr "Folder Life Over" msgid "printer-state-reasons.folder-memory-exhausted" msgstr "Folder Memory Exhausted" msgid "printer-state-reasons.folder-missing" msgstr "Folder Missing" msgid "printer-state-reasons.folder-motor-failure" msgstr "Folder Motor Failure" msgid "printer-state-reasons.folder-near-limit" msgstr "Folder Near Limit" msgid "printer-state-reasons.folder-offline" msgstr "Folder Offline" msgid "printer-state-reasons.folder-opened" msgstr "Folder Opened" msgid "printer-state-reasons.folder-over-temperature" msgstr "Folder Over Temperature" msgid "printer-state-reasons.folder-power-saver" msgstr "Folder Power Saver" msgid "printer-state-reasons.folder-recoverable-failure" msgstr "Folder Recoverable Failure" msgid "printer-state-reasons.folder-recoverable-storage" msgstr "Folder Recoverable Storage" msgid "printer-state-reasons.folder-removed" msgstr "Folder Removed" msgid "printer-state-reasons.folder-resource-added" msgstr "Folder Resource Added" msgid "printer-state-reasons.folder-resource-removed" msgstr "Folder Resource Removed" msgid "printer-state-reasons.folder-thermistor-failure" msgstr "Folder Thermistor Failure" msgid "printer-state-reasons.folder-timing-failure" msgstr "Folder Timing Failure" msgid "printer-state-reasons.folder-turned-off" msgstr "Folder Turned Off" msgid "printer-state-reasons.folder-turned-on" msgstr "Folder Turned On" msgid "printer-state-reasons.folder-under-temperature" msgstr "Folder Under Temperature" msgid "printer-state-reasons.folder-unrecoverable-failure" msgstr "Folder Unrecoverable Failure" msgid "printer-state-reasons.folder-unrecoverable-storage-error" msgstr "Folder Unrecoverable Storage Error" msgid "printer-state-reasons.folder-warming-up" msgstr "Folder Warming Up" msgid "printer-state-reasons.fuser-over-temp" msgstr "Fuser Over Temp" msgid "printer-state-reasons.fuser-under-temp" msgstr "Fuser Under Temp" msgid "printer-state-reasons.hold-new-jobs" msgstr "Hold New Jobs" msgid "printer-state-reasons.identify-printer-requested" msgstr "Identify Printer" msgid "printer-state-reasons.imprinter-added" msgstr "Imprinter Added" msgid "printer-state-reasons.imprinter-almost-empty" msgstr "Imprinter Almost Empty" msgid "printer-state-reasons.imprinter-almost-full" msgstr "Imprinter Almost Full" msgid "printer-state-reasons.imprinter-at-limit" msgstr "Imprinter At Limit" msgid "printer-state-reasons.imprinter-closed" msgstr "Imprinter Closed" msgid "printer-state-reasons.imprinter-configuration-change" msgstr "Imprinter Configuration Change" msgid "printer-state-reasons.imprinter-cover-closed" msgstr "Imprinter Cover Closed" msgid "printer-state-reasons.imprinter-cover-open" msgstr "Imprinter Cover Open" msgid "printer-state-reasons.imprinter-empty" msgstr "Imprinter Empty" msgid "printer-state-reasons.imprinter-full" msgstr "Imprinter Full" msgid "printer-state-reasons.imprinter-interlock-closed" msgstr "Imprinter Interlock Closed" msgid "printer-state-reasons.imprinter-interlock-open" msgstr "Imprinter Interlock Open" msgid "printer-state-reasons.imprinter-jam" msgstr "Imprinter Jam" msgid "printer-state-reasons.imprinter-life-almost-over" msgstr "Imprinter Life Almost Over" msgid "printer-state-reasons.imprinter-life-over" msgstr "Imprinter Life Over" msgid "printer-state-reasons.imprinter-memory-exhausted" msgstr "Imprinter Memory Exhausted" msgid "printer-state-reasons.imprinter-missing" msgstr "Imprinter Missing" msgid "printer-state-reasons.imprinter-motor-failure" msgstr "Imprinter Motor Failure" msgid "printer-state-reasons.imprinter-near-limit" msgstr "Imprinter Near Limit" msgid "printer-state-reasons.imprinter-offline" msgstr "Imprinter Offline" msgid "printer-state-reasons.imprinter-opened" msgstr "Imprinter Opened" msgid "printer-state-reasons.imprinter-over-temperature" msgstr "Imprinter Over Temperature" msgid "printer-state-reasons.imprinter-power-saver" msgstr "Imprinter Power Saver" msgid "printer-state-reasons.imprinter-recoverable-failure" msgstr "Imprinter Recoverable Failure" msgid "printer-state-reasons.imprinter-recoverable-storage" msgstr "Imprinter Recoverable Storage" msgid "printer-state-reasons.imprinter-removed" msgstr "Imprinter Removed" msgid "printer-state-reasons.imprinter-resource-added" msgstr "Imprinter Resource Added" msgid "printer-state-reasons.imprinter-resource-removed" msgstr "Imprinter Resource Removed" msgid "printer-state-reasons.imprinter-thermistor-failure" msgstr "Imprinter Thermistor Failure" msgid "printer-state-reasons.imprinter-timing-failure" msgstr "Imprinter Timing Failure" msgid "printer-state-reasons.imprinter-turned-off" msgstr "Imprinter Turned Off" msgid "printer-state-reasons.imprinter-turned-on" msgstr "Imprinter Turned On" msgid "printer-state-reasons.imprinter-under-temperature" msgstr "Imprinter Under Temperature" msgid "printer-state-reasons.imprinter-unrecoverable-failure" msgstr "Imprinter Unrecoverable Failure" msgid "printer-state-reasons.imprinter-unrecoverable-storage-error" msgstr "Imprinter Unrecoverable Storage Error" msgid "printer-state-reasons.imprinter-warming-up" msgstr "Imprinter Warming Up" msgid "printer-state-reasons.input-cannot-feed-size-selected" msgstr "Input Cannot Feed Size Selected" msgid "printer-state-reasons.input-manual-input-request" msgstr "Input Manual Input Request" msgid "printer-state-reasons.input-media-color-change" msgstr "Input Media Color Change" msgid "printer-state-reasons.input-media-form-parts-change" msgstr "Input Media Form Parts Change" msgid "printer-state-reasons.input-media-size-change" msgstr "Input Media Size Change" msgid "printer-state-reasons.input-media-type-change" msgstr "Input Media Type Change" msgid "printer-state-reasons.input-media-weight-change" msgstr "Input Media Weight Change" msgid "printer-state-reasons.input-tray-elevation-failure" msgstr "Input Tray Elevation Failure" msgid "printer-state-reasons.input-tray-missing" msgstr "Input Tray Missing" msgid "printer-state-reasons.input-tray-position-failure" msgstr "Input Tray Position Failure" msgid "printer-state-reasons.inserter-added" msgstr "Inserter Added" msgid "printer-state-reasons.inserter-almost-empty" msgstr "Inserter Almost Empty" msgid "printer-state-reasons.inserter-almost-full" msgstr "Inserter Almost Full" msgid "printer-state-reasons.inserter-at-limit" msgstr "Inserter At Limit" msgid "printer-state-reasons.inserter-closed" msgstr "Inserter Closed" msgid "printer-state-reasons.inserter-configuration-change" msgstr "Inserter Configuration Change" msgid "printer-state-reasons.inserter-cover-closed" msgstr "Inserter Cover Closed" msgid "printer-state-reasons.inserter-cover-open" msgstr "Inserter Cover Open" msgid "printer-state-reasons.inserter-empty" msgstr "Inserter Empty" msgid "printer-state-reasons.inserter-full" msgstr "Inserter Full" msgid "printer-state-reasons.inserter-interlock-closed" msgstr "Inserter Interlock Closed" msgid "printer-state-reasons.inserter-interlock-open" msgstr "Inserter Interlock Open" msgid "printer-state-reasons.inserter-jam" msgstr "Inserter Jam" msgid "printer-state-reasons.inserter-life-almost-over" msgstr "Inserter Life Almost Over" msgid "printer-state-reasons.inserter-life-over" msgstr "Inserter Life Over" msgid "printer-state-reasons.inserter-memory-exhausted" msgstr "Inserter Memory Exhausted" msgid "printer-state-reasons.inserter-missing" msgstr "Inserter Missing" msgid "printer-state-reasons.inserter-motor-failure" msgstr "Inserter Motor Failure" msgid "printer-state-reasons.inserter-near-limit" msgstr "Inserter Near Limit" msgid "printer-state-reasons.inserter-offline" msgstr "Inserter Offline" msgid "printer-state-reasons.inserter-opened" msgstr "Inserter Opened" msgid "printer-state-reasons.inserter-over-temperature" msgstr "Inserter Over Temperature" msgid "printer-state-reasons.inserter-power-saver" msgstr "Inserter Power Saver" msgid "printer-state-reasons.inserter-recoverable-failure" msgstr "Inserter Recoverable Failure" msgid "printer-state-reasons.inserter-recoverable-storage" msgstr "Inserter Recoverable Storage" msgid "printer-state-reasons.inserter-removed" msgstr "Inserter Removed" msgid "printer-state-reasons.inserter-resource-added" msgstr "Inserter Resource Added" msgid "printer-state-reasons.inserter-resource-removed" msgstr "Inserter Resource Removed" msgid "printer-state-reasons.inserter-thermistor-failure" msgstr "Inserter Thermistor Failure" msgid "printer-state-reasons.inserter-timing-failure" msgstr "Inserter Timing Failure" msgid "printer-state-reasons.inserter-turned-off" msgstr "Inserter Turned Off" msgid "printer-state-reasons.inserter-turned-on" msgstr "Inserter Turned On" msgid "printer-state-reasons.inserter-under-temperature" msgstr "Inserter Under Temperature" msgid "printer-state-reasons.inserter-unrecoverable-failure" msgstr "Inserter Unrecoverable Failure" msgid "printer-state-reasons.inserter-unrecoverable-storage-error" msgstr "Inserter Unrecoverable Storage Error" msgid "printer-state-reasons.inserter-warming-up" msgstr "Inserter Warming Up" msgid "printer-state-reasons.interlock-closed" msgstr "Interlock Closed" msgid "printer-state-reasons.interlock-open" msgstr "Interlock Open" msgid "printer-state-reasons.interpreter-cartridge-added" msgstr "Interpreter Cartridge Added" msgid "printer-state-reasons.interpreter-cartridge-deleted" msgstr "Interpreter Cartridge Deleted" msgid "printer-state-reasons.interpreter-complex-page-encountered" msgstr "Interpreter Complex Page Encountered" msgid "printer-state-reasons.interpreter-memory-decrease" msgstr "Interpreter Memory Decrease" msgid "printer-state-reasons.interpreter-memory-increase" msgstr "Interpreter Memory Increase" msgid "printer-state-reasons.interpreter-resource-added" msgstr "Interpreter Resource Added" msgid "printer-state-reasons.interpreter-resource-deleted" msgstr "Interpreter Resource Deleted" msgid "printer-state-reasons.interpreter-resource-unavailable" msgstr "Interpreter Resource Unavailable" msgid "printer-state-reasons.lamp-at-eol" msgstr "Lamp At Eol" msgid "printer-state-reasons.lamp-failure" msgstr "Lamp Failure" msgid "printer-state-reasons.lamp-near-eol" msgstr "Lamp Near Eol" msgid "printer-state-reasons.laser-at-eol" msgstr "Laser At Eol" msgid "printer-state-reasons.laser-failure" msgstr "Laser Failure" msgid "printer-state-reasons.laser-near-eol" msgstr "Laser Near Eol" msgid "printer-state-reasons.make-envelope-added" msgstr "Make Envelope Added" msgid "printer-state-reasons.make-envelope-almost-empty" msgstr "Make Envelope Almost Empty" msgid "printer-state-reasons.make-envelope-almost-full" msgstr "Make Envelope Almost Full" msgid "printer-state-reasons.make-envelope-at-limit" msgstr "Make Envelope At Limit" msgid "printer-state-reasons.make-envelope-closed" msgstr "Make Envelope Closed" msgid "printer-state-reasons.make-envelope-configuration-change" msgstr "Make Envelope Configuration Change" msgid "printer-state-reasons.make-envelope-cover-closed" msgstr "Make Envelope Cover Closed" msgid "printer-state-reasons.make-envelope-cover-open" msgstr "Make Envelope Cover Open" msgid "printer-state-reasons.make-envelope-empty" msgstr "Make Envelope Empty" msgid "printer-state-reasons.make-envelope-full" msgstr "Make Envelope Full" msgid "printer-state-reasons.make-envelope-interlock-closed" msgstr "Make Envelope Interlock Closed" msgid "printer-state-reasons.make-envelope-interlock-open" msgstr "Make Envelope Interlock Open" msgid "printer-state-reasons.make-envelope-jam" msgstr "Make Envelope Jam" msgid "printer-state-reasons.make-envelope-life-almost-over" msgstr "Make Envelope Life Almost Over" msgid "printer-state-reasons.make-envelope-life-over" msgstr "Make Envelope Life Over" msgid "printer-state-reasons.make-envelope-memory-exhausted" msgstr "Make Envelope Memory Exhausted" msgid "printer-state-reasons.make-envelope-missing" msgstr "Make Envelope Missing" msgid "printer-state-reasons.make-envelope-motor-failure" msgstr "Make Envelope Motor Failure" msgid "printer-state-reasons.make-envelope-near-limit" msgstr "Make Envelope Near Limit" msgid "printer-state-reasons.make-envelope-offline" msgstr "Make Envelope Offline" msgid "printer-state-reasons.make-envelope-opened" msgstr "Make Envelope Opened" msgid "printer-state-reasons.make-envelope-over-temperature" msgstr "Make Envelope Over Temperature" msgid "printer-state-reasons.make-envelope-power-saver" msgstr "Make Envelope Power Saver" msgid "printer-state-reasons.make-envelope-recoverable-failure" msgstr "Make Envelope Recoverable Failure" msgid "printer-state-reasons.make-envelope-recoverable-storage" msgstr "Make Envelope Recoverable Storage" msgid "printer-state-reasons.make-envelope-removed" msgstr "Make Envelope Removed" msgid "printer-state-reasons.make-envelope-resource-added" msgstr "Make Envelope Resource Added" msgid "printer-state-reasons.make-envelope-resource-removed" msgstr "Make Envelope Resource Removed" msgid "printer-state-reasons.make-envelope-thermistor-failure" msgstr "Make Envelope Thermistor Failure" msgid "printer-state-reasons.make-envelope-timing-failure" msgstr "Make Envelope Timing Failure" msgid "printer-state-reasons.make-envelope-turned-off" msgstr "Make Envelope Turned Off" msgid "printer-state-reasons.make-envelope-turned-on" msgstr "Make Envelope Turned On" msgid "printer-state-reasons.make-envelope-under-temperature" msgstr "Make Envelope Under Temperature" msgid "printer-state-reasons.make-envelope-unrecoverable-failure" msgstr "Make Envelope Unrecoverable Failure" msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error" msgstr "Make Envelope Unrecoverable Storage Error" msgid "printer-state-reasons.make-envelope-warming-up" msgstr "Make Envelope Warming Up" msgid "printer-state-reasons.marker-adjusting-print-quality" msgstr "Marker Adjusting Print Quality" msgid "printer-state-reasons.marker-developer-almost-empty" msgstr "Marker Developer Almost Empty" msgid "printer-state-reasons.marker-developer-empty" msgstr "Marker Developer Empty" msgid "printer-state-reasons.marker-fuser-thermistor-failure" msgstr "Marker Fuser Thermistor Failure" msgid "printer-state-reasons.marker-fuser-timing-failure" msgstr "Marker Fuser Timing Failure" msgid "printer-state-reasons.marker-ink-almost-empty" msgstr "Marker Ink Almost Empty" msgid "printer-state-reasons.marker-ink-empty" msgstr "Marker Ink Empty" msgid "printer-state-reasons.marker-print-ribbon-almost-empty" msgstr "Marker Print Ribbon Almost Empty" msgid "printer-state-reasons.marker-print-ribbon-empty" msgstr "Marker Print Ribbon Empty" msgid "printer-state-reasons.marker-supply-empty" msgstr "Marker Supply Empty" msgid "printer-state-reasons.marker-supply-low" msgstr "Marker Supply Low" msgid "printer-state-reasons.marker-toner-cartridge-missing" msgstr "Marker Toner Cartridge Missing" msgid "printer-state-reasons.marker-waste-almost-full" msgstr "Marker Waste Almost Full" msgid "printer-state-reasons.marker-waste-full" msgstr "Marker Waste Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full" msgstr "Marker Waste Ink Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-ink-receptacle-full" msgstr "Marker Waste Ink Receptacle Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full" msgstr "Marker Waste Toner Receptacle Almost Full" msgid "printer-state-reasons.marker-waste-toner-receptacle-full" msgstr "Marker Waste Toner Receptacle Full" msgid "printer-state-reasons.material-empty" msgstr "Material Empty" msgid "printer-state-reasons.material-low" msgstr "Material Low" msgid "printer-state-reasons.material-needed" msgstr "Material Needed" msgid "printer-state-reasons.media-empty" msgstr "Media Empty" msgid "printer-state-reasons.media-jam" msgstr "Media Jam" msgid "printer-state-reasons.media-low" msgstr "Media Low" msgid "printer-state-reasons.media-needed" msgstr "Media Needed" msgid "printer-state-reasons.media-path-cannot-duplex-media-selected" msgstr "Media Path Cannot Duplex Media Selected" msgid "printer-state-reasons.media-path-media-tray-almost-full" msgstr "Media Path Media Tray Almost Full" msgid "printer-state-reasons.media-path-media-tray-full" msgstr "Media Path Media Tray Full" msgid "printer-state-reasons.media-path-media-tray-missing" msgstr "Media Path Media Tray Missing" msgid "printer-state-reasons.motor-failure" msgstr "Motor Failure" msgid "printer-state-reasons.moving-to-paused" msgstr "Moving To Paused" msgid "printer-state-reasons.none" msgstr "None" msgid "printer-state-reasons.opc-life-over" msgstr "Opc Life Over" msgid "printer-state-reasons.opc-near-eol" msgstr "Opc Near Eol" msgid "printer-state-reasons.other" msgstr "Other" msgid "printer-state-reasons.output-area-almost-full" msgstr "Output Area Almost Full" msgid "printer-state-reasons.output-area-full" msgstr "Output Area Full" msgid "printer-state-reasons.output-mailbox-select-failure" msgstr "Output Mailbox Select Failure" msgid "printer-state-reasons.output-tray-missing" msgstr "Output Tray Missing" msgid "printer-state-reasons.paused" msgstr "Paused" msgid "printer-state-reasons.perforater-added" msgstr "Perforater Added" msgid "printer-state-reasons.perforater-almost-empty" msgstr "Perforater Almost Empty" msgid "printer-state-reasons.perforater-almost-full" msgstr "Perforater Almost Full" msgid "printer-state-reasons.perforater-at-limit" msgstr "Perforater At Limit" msgid "printer-state-reasons.perforater-closed" msgstr "Perforater Closed" msgid "printer-state-reasons.perforater-configuration-change" msgstr "Perforater Configuration Change" msgid "printer-state-reasons.perforater-cover-closed" msgstr "Perforater Cover Closed" msgid "printer-state-reasons.perforater-cover-open" msgstr "Perforater Cover Open" msgid "printer-state-reasons.perforater-empty" msgstr "Perforater Empty" msgid "printer-state-reasons.perforater-full" msgstr "Perforater Full" msgid "printer-state-reasons.perforater-interlock-closed" msgstr "Perforater Interlock Closed" msgid "printer-state-reasons.perforater-interlock-open" msgstr "Perforater Interlock Open" msgid "printer-state-reasons.perforater-jam" msgstr "Perforater Jam" msgid "printer-state-reasons.perforater-life-almost-over" msgstr "Perforater Life Almost Over" msgid "printer-state-reasons.perforater-life-over" msgstr "Perforater Life Over" msgid "printer-state-reasons.perforater-memory-exhausted" msgstr "Perforater Memory Exhausted" msgid "printer-state-reasons.perforater-missing" msgstr "Perforater Missing" msgid "printer-state-reasons.perforater-motor-failure" msgstr "Perforater Motor Failure" msgid "printer-state-reasons.perforater-near-limit" msgstr "Perforater Near Limit" msgid "printer-state-reasons.perforater-offline" msgstr "Perforater Offline" msgid "printer-state-reasons.perforater-opened" msgstr "Perforater Opened" msgid "printer-state-reasons.perforater-over-temperature" msgstr "Perforater Over Temperature" msgid "printer-state-reasons.perforater-power-saver" msgstr "Perforater Power Saver" msgid "printer-state-reasons.perforater-recoverable-failure" msgstr "Perforater Recoverable Failure" msgid "printer-state-reasons.perforater-recoverable-storage" msgstr "Perforater Recoverable Storage" msgid "printer-state-reasons.perforater-removed" msgstr "Perforater Removed" msgid "printer-state-reasons.perforater-resource-added" msgstr "Perforater Resource Added" msgid "printer-state-reasons.perforater-resource-removed" msgstr "Perforater Resource Removed" msgid "printer-state-reasons.perforater-thermistor-failure" msgstr "Perforater Thermistor Failure" msgid "printer-state-reasons.perforater-timing-failure" msgstr "Perforater Timing Failure" msgid "printer-state-reasons.perforater-turned-off" msgstr "Perforater Turned Off" msgid "printer-state-reasons.perforater-turned-on" msgstr "Perforater Turned On" msgid "printer-state-reasons.perforater-under-temperature" msgstr "Perforater Under Temperature" msgid "printer-state-reasons.perforater-unrecoverable-failure" msgstr "Perforater Unrecoverable Failure" msgid "printer-state-reasons.perforater-unrecoverable-storage-error" msgstr "Perforater Unrecoverable Storage Error" msgid "printer-state-reasons.perforater-warming-up" msgstr "Perforater Warming Up" msgid "printer-state-reasons.power-down" msgstr "Power Down" msgid "printer-state-reasons.power-up" msgstr "Power Up" msgid "printer-state-reasons.printer-manual-reset" msgstr "Printer Manual Reset" msgid "printer-state-reasons.printer-nms-reset" msgstr "Printer Nms Reset" msgid "printer-state-reasons.printer-ready-to-print" msgstr "Printer Ready To Print" msgid "printer-state-reasons.puncher-added" msgstr "Puncher Added" msgid "printer-state-reasons.puncher-almost-empty" msgstr "Puncher Almost Empty" msgid "printer-state-reasons.puncher-almost-full" msgstr "Puncher Almost Full" msgid "printer-state-reasons.puncher-at-limit" msgstr "Puncher At Limit" msgid "printer-state-reasons.puncher-closed" msgstr "Puncher Closed" msgid "printer-state-reasons.puncher-configuration-change" msgstr "Puncher Configuration Change" msgid "printer-state-reasons.puncher-cover-closed" msgstr "Puncher Cover Closed" msgid "printer-state-reasons.puncher-cover-open" msgstr "Puncher Cover Open" msgid "printer-state-reasons.puncher-empty" msgstr "Puncher Empty" msgid "printer-state-reasons.puncher-full" msgstr "Puncher Full" msgid "printer-state-reasons.puncher-interlock-closed" msgstr "Puncher Interlock Closed" msgid "printer-state-reasons.puncher-interlock-open" msgstr "Puncher Interlock Open" msgid "printer-state-reasons.puncher-jam" msgstr "Puncher Jam" msgid "printer-state-reasons.puncher-life-almost-over" msgstr "Puncher Life Almost Over" msgid "printer-state-reasons.puncher-life-over" msgstr "Puncher Life Over" msgid "printer-state-reasons.puncher-memory-exhausted" msgstr "Puncher Memory Exhausted" msgid "printer-state-reasons.puncher-missing" msgstr "Puncher Missing" msgid "printer-state-reasons.puncher-motor-failure" msgstr "Puncher Motor Failure" msgid "printer-state-reasons.puncher-near-limit" msgstr "Puncher Near Limit" msgid "printer-state-reasons.puncher-offline" msgstr "Puncher Offline" msgid "printer-state-reasons.puncher-opened" msgstr "Puncher Opened" msgid "printer-state-reasons.puncher-over-temperature" msgstr "Puncher Over Temperature" msgid "printer-state-reasons.puncher-power-saver" msgstr "Puncher Power Saver" msgid "printer-state-reasons.puncher-recoverable-failure" msgstr "Puncher Recoverable Failure" msgid "printer-state-reasons.puncher-recoverable-storage" msgstr "Puncher Recoverable Storage" msgid "printer-state-reasons.puncher-removed" msgstr "Puncher Removed" msgid "printer-state-reasons.puncher-resource-added" msgstr "Puncher Resource Added" msgid "printer-state-reasons.puncher-resource-removed" msgstr "Puncher Resource Removed" msgid "printer-state-reasons.puncher-thermistor-failure" msgstr "Puncher Thermistor Failure" msgid "printer-state-reasons.puncher-timing-failure" msgstr "Puncher Timing Failure" msgid "printer-state-reasons.puncher-turned-off" msgstr "Puncher Turned Off" msgid "printer-state-reasons.puncher-turned-on" msgstr "Puncher Turned On" msgid "printer-state-reasons.puncher-under-temperature" msgstr "Puncher Under Temperature" msgid "printer-state-reasons.puncher-unrecoverable-failure" msgstr "Puncher Unrecoverable Failure" msgid "printer-state-reasons.puncher-unrecoverable-storage-error" msgstr "Puncher Unrecoverable Storage Error" msgid "printer-state-reasons.puncher-warming-up" msgstr "Puncher Warming Up" msgid "printer-state-reasons.separation-cutter-added" msgstr "Separation Cutter Added" msgid "printer-state-reasons.separation-cutter-almost-empty" msgstr "Separation Cutter Almost Empty" msgid "printer-state-reasons.separation-cutter-almost-full" msgstr "Separation Cutter Almost Full" msgid "printer-state-reasons.separation-cutter-at-limit" msgstr "Separation Cutter At Limit" msgid "printer-state-reasons.separation-cutter-closed" msgstr "Separation Cutter Closed" msgid "printer-state-reasons.separation-cutter-configuration-change" msgstr "Separation Cutter Configuration Change" msgid "printer-state-reasons.separation-cutter-cover-closed" msgstr "Separation Cutter Cover Closed" msgid "printer-state-reasons.separation-cutter-cover-open" msgstr "Separation Cutter Cover Open" msgid "printer-state-reasons.separation-cutter-empty" msgstr "Separation Cutter Empty" msgid "printer-state-reasons.separation-cutter-full" msgstr "Separation Cutter Full" msgid "printer-state-reasons.separation-cutter-interlock-closed" msgstr "Separation Cutter Interlock Closed" msgid "printer-state-reasons.separation-cutter-interlock-open" msgstr "Separation Cutter Interlock Open" msgid "printer-state-reasons.separation-cutter-jam" msgstr "Separation Cutter Jam" msgid "printer-state-reasons.separation-cutter-life-almost-over" msgstr "Separation Cutter Life Almost Over" msgid "printer-state-reasons.separation-cutter-life-over" msgstr "Separation Cutter Life Over" msgid "printer-state-reasons.separation-cutter-memory-exhausted" msgstr "Separation Cutter Memory Exhausted" msgid "printer-state-reasons.separation-cutter-missing" msgstr "Separation Cutter Missing" msgid "printer-state-reasons.separation-cutter-motor-failure" msgstr "Separation Cutter Motor Failure" msgid "printer-state-reasons.separation-cutter-near-limit" msgstr "Separation Cutter Near Limit" msgid "printer-state-reasons.separation-cutter-offline" msgstr "Separation Cutter Offline" msgid "printer-state-reasons.separation-cutter-opened" msgstr "Separation Cutter Opened" msgid "printer-state-reasons.separation-cutter-over-temperature" msgstr "Separation Cutter Over Temperature" msgid "printer-state-reasons.separation-cutter-power-saver" msgstr "Separation Cutter Power Saver" msgid "printer-state-reasons.separation-cutter-recoverable-failure" msgstr "Separation Cutter Recoverable Failure" msgid "printer-state-reasons.separation-cutter-recoverable-storage" msgstr "Separation Cutter Recoverable Storage" msgid "printer-state-reasons.separation-cutter-removed" msgstr "Separation Cutter Removed" msgid "printer-state-reasons.separation-cutter-resource-added" msgstr "Separation Cutter Resource Added" msgid "printer-state-reasons.separation-cutter-resource-removed" msgstr "Separation Cutter Resource Removed" msgid "printer-state-reasons.separation-cutter-thermistor-failure" msgstr "Separation Cutter Thermistor Failure" msgid "printer-state-reasons.separation-cutter-timing-failure" msgstr "Separation Cutter Timing Failure" msgid "printer-state-reasons.separation-cutter-turned-off" msgstr "Separation Cutter Turned Off" msgid "printer-state-reasons.separation-cutter-turned-on" msgstr "Separation Cutter Turned On" msgid "printer-state-reasons.separation-cutter-under-temperature" msgstr "Separation Cutter Under Temperature" msgid "printer-state-reasons.separation-cutter-unrecoverable-failure" msgstr "Separation Cutter Unrecoverable Failure" msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error" msgstr "Separation Cutter Unrecoverable Storage Error" msgid "printer-state-reasons.separation-cutter-warming-up" msgstr "Separation Cutter Warming Up" msgid "printer-state-reasons.sheet-rotator-added" msgstr "Sheet Rotator Added" msgid "printer-state-reasons.sheet-rotator-almost-empty" msgstr "Sheet Rotator Almost Empty" msgid "printer-state-reasons.sheet-rotator-almost-full" msgstr "Sheet Rotator Almost Full" msgid "printer-state-reasons.sheet-rotator-at-limit" msgstr "Sheet Rotator At Limit" msgid "printer-state-reasons.sheet-rotator-closed" msgstr "Sheet Rotator Closed" msgid "printer-state-reasons.sheet-rotator-configuration-change" msgstr "Sheet Rotator Configuration Change" msgid "printer-state-reasons.sheet-rotator-cover-closed" msgstr "Sheet Rotator Cover Closed" msgid "printer-state-reasons.sheet-rotator-cover-open" msgstr "Sheet Rotator Cover Open" msgid "printer-state-reasons.sheet-rotator-empty" msgstr "Sheet Rotator Empty" msgid "printer-state-reasons.sheet-rotator-full" msgstr "Sheet Rotator Full" msgid "printer-state-reasons.sheet-rotator-interlock-closed" msgstr "Sheet Rotator Interlock Closed" msgid "printer-state-reasons.sheet-rotator-interlock-open" msgstr "Sheet Rotator Interlock Open" msgid "printer-state-reasons.sheet-rotator-jam" msgstr "Sheet Rotator Jam" msgid "printer-state-reasons.sheet-rotator-life-almost-over" msgstr "Sheet Rotator Life Almost Over" msgid "printer-state-reasons.sheet-rotator-life-over" msgstr "Sheet Rotator Life Over" msgid "printer-state-reasons.sheet-rotator-memory-exhausted" msgstr "Sheet Rotator Memory Exhausted" msgid "printer-state-reasons.sheet-rotator-missing" msgstr "Sheet Rotator Missing" msgid "printer-state-reasons.sheet-rotator-motor-failure" msgstr "Sheet Rotator Motor Failure" msgid "printer-state-reasons.sheet-rotator-near-limit" msgstr "Sheet Rotator Near Limit" msgid "printer-state-reasons.sheet-rotator-offline" msgstr "Sheet Rotator Offline" msgid "printer-state-reasons.sheet-rotator-opened" msgstr "Sheet Rotator Opened" msgid "printer-state-reasons.sheet-rotator-over-temperature" msgstr "Sheet Rotator Over Temperature" msgid "printer-state-reasons.sheet-rotator-power-saver" msgstr "Sheet Rotator Power Saver" msgid "printer-state-reasons.sheet-rotator-recoverable-failure" msgstr "Sheet Rotator Recoverable Failure" msgid "printer-state-reasons.sheet-rotator-recoverable-storage" msgstr "Sheet Rotator Recoverable Storage" msgid "printer-state-reasons.sheet-rotator-removed" msgstr "Sheet Rotator Removed" msgid "printer-state-reasons.sheet-rotator-resource-added" msgstr "Sheet Rotator Resource Added" msgid "printer-state-reasons.sheet-rotator-resource-removed" msgstr "Sheet Rotator Resource Removed" msgid "printer-state-reasons.sheet-rotator-thermistor-failure" msgstr "Sheet Rotator Thermistor Failure" msgid "printer-state-reasons.sheet-rotator-timing-failure" msgstr "Sheet Rotator Timing Failure" msgid "printer-state-reasons.sheet-rotator-turned-off" msgstr "Sheet Rotator Turned Off" msgid "printer-state-reasons.sheet-rotator-turned-on" msgstr "Sheet Rotator Turned On" msgid "printer-state-reasons.sheet-rotator-under-temperature" msgstr "Sheet Rotator Under Temperature" msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure" msgstr "Sheet Rotator Unrecoverable Failure" msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error" msgstr "Sheet Rotator Unrecoverable Storage Error" msgid "printer-state-reasons.sheet-rotator-warming-up" msgstr "Sheet Rotator Warming Up" msgid "printer-state-reasons.shutdown" msgstr "Shutdown" msgid "printer-state-reasons.slitter-added" msgstr "Slitter Added" msgid "printer-state-reasons.slitter-almost-empty" msgstr "Slitter Almost Empty" msgid "printer-state-reasons.slitter-almost-full" msgstr "Slitter Almost Full" msgid "printer-state-reasons.slitter-at-limit" msgstr "Slitter At Limit" msgid "printer-state-reasons.slitter-closed" msgstr "Slitter Closed" msgid "printer-state-reasons.slitter-configuration-change" msgstr "Slitter Configuration Change" msgid "printer-state-reasons.slitter-cover-closed" msgstr "Slitter Cover Closed" msgid "printer-state-reasons.slitter-cover-open" msgstr "Slitter Cover Open" msgid "printer-state-reasons.slitter-empty" msgstr "Slitter Empty" msgid "printer-state-reasons.slitter-full" msgstr "Slitter Full" msgid "printer-state-reasons.slitter-interlock-closed" msgstr "Slitter Interlock Closed" msgid "printer-state-reasons.slitter-interlock-open" msgstr "Slitter Interlock Open" msgid "printer-state-reasons.slitter-jam" msgstr "Slitter Jam" msgid "printer-state-reasons.slitter-life-almost-over" msgstr "Slitter Life Almost Over" msgid "printer-state-reasons.slitter-life-over" msgstr "Slitter Life Over" msgid "printer-state-reasons.slitter-memory-exhausted" msgstr "Slitter Memory Exhausted" msgid "printer-state-reasons.slitter-missing" msgstr "Slitter Missing" msgid "printer-state-reasons.slitter-motor-failure" msgstr "Slitter Motor Failure" msgid "printer-state-reasons.slitter-near-limit" msgstr "Slitter Near Limit" msgid "printer-state-reasons.slitter-offline" msgstr "Slitter Offline" msgid "printer-state-reasons.slitter-opened" msgstr "Slitter Opened" msgid "printer-state-reasons.slitter-over-temperature" msgstr "Slitter Over Temperature" msgid "printer-state-reasons.slitter-power-saver" msgstr "Slitter Power Saver" msgid "printer-state-reasons.slitter-recoverable-failure" msgstr "Slitter Recoverable Failure" msgid "printer-state-reasons.slitter-recoverable-storage" msgstr "Slitter Recoverable Storage" msgid "printer-state-reasons.slitter-removed" msgstr "Slitter Removed" msgid "printer-state-reasons.slitter-resource-added" msgstr "Slitter Resource Added" msgid "printer-state-reasons.slitter-resource-removed" msgstr "Slitter Resource Removed" msgid "printer-state-reasons.slitter-thermistor-failure" msgstr "Slitter Thermistor Failure" msgid "printer-state-reasons.slitter-timing-failure" msgstr "Slitter Timing Failure" msgid "printer-state-reasons.slitter-turned-off" msgstr "Slitter Turned Off" msgid "printer-state-reasons.slitter-turned-on" msgstr "Slitter Turned On" msgid "printer-state-reasons.slitter-under-temperature" msgstr "Slitter Under Temperature" msgid "printer-state-reasons.slitter-unrecoverable-failure" msgstr "Slitter Unrecoverable Failure" msgid "printer-state-reasons.slitter-unrecoverable-storage-error" msgstr "Slitter Unrecoverable Storage Error" msgid "printer-state-reasons.slitter-warming-up" msgstr "Slitter Warming Up" msgid "printer-state-reasons.spool-area-full" msgstr "Spool Area Full" msgid "printer-state-reasons.stacker-added" msgstr "Stacker Added" msgid "printer-state-reasons.stacker-almost-empty" msgstr "Stacker Almost Empty" msgid "printer-state-reasons.stacker-almost-full" msgstr "Stacker Almost Full" msgid "printer-state-reasons.stacker-at-limit" msgstr "Stacker At Limit" msgid "printer-state-reasons.stacker-closed" msgstr "Stacker Closed" msgid "printer-state-reasons.stacker-configuration-change" msgstr "Stacker Configuration Change" msgid "printer-state-reasons.stacker-cover-closed" msgstr "Stacker Cover Closed" msgid "printer-state-reasons.stacker-cover-open" msgstr "Stacker Cover Open" msgid "printer-state-reasons.stacker-empty" msgstr "Stacker Empty" msgid "printer-state-reasons.stacker-full" msgstr "Stacker Full" msgid "printer-state-reasons.stacker-interlock-closed" msgstr "Stacker Interlock Closed" msgid "printer-state-reasons.stacker-interlock-open" msgstr "Stacker Interlock Open" msgid "printer-state-reasons.stacker-jam" msgstr "Stacker Jam" msgid "printer-state-reasons.stacker-life-almost-over" msgstr "Stacker Life Almost Over" msgid "printer-state-reasons.stacker-life-over" msgstr "Stacker Life Over" msgid "printer-state-reasons.stacker-memory-exhausted" msgstr "Stacker Memory Exhausted" msgid "printer-state-reasons.stacker-missing" msgstr "Stacker Missing" msgid "printer-state-reasons.stacker-motor-failure" msgstr "Stacker Motor Failure" msgid "printer-state-reasons.stacker-near-limit" msgstr "Stacker Near Limit" msgid "printer-state-reasons.stacker-offline" msgstr "Stacker Offline" msgid "printer-state-reasons.stacker-opened" msgstr "Stacker Opened" msgid "printer-state-reasons.stacker-over-temperature" msgstr "Stacker Over Temperature" msgid "printer-state-reasons.stacker-power-saver" msgstr "Stacker Power Saver" msgid "printer-state-reasons.stacker-recoverable-failure" msgstr "Stacker Recoverable Failure" msgid "printer-state-reasons.stacker-recoverable-storage" msgstr "Stacker Recoverable Storage" msgid "printer-state-reasons.stacker-removed" msgstr "Stacker Removed" msgid "printer-state-reasons.stacker-resource-added" msgstr "Stacker Resource Added" msgid "printer-state-reasons.stacker-resource-removed" msgstr "Stacker Resource Removed" msgid "printer-state-reasons.stacker-thermistor-failure" msgstr "Stacker Thermistor Failure" msgid "printer-state-reasons.stacker-timing-failure" msgstr "Stacker Timing Failure" msgid "printer-state-reasons.stacker-turned-off" msgstr "Stacker Turned Off" msgid "printer-state-reasons.stacker-turned-on" msgstr "Stacker Turned On" msgid "printer-state-reasons.stacker-under-temperature" msgstr "Stacker Under Temperature" msgid "printer-state-reasons.stacker-unrecoverable-failure" msgstr "Stacker Unrecoverable Failure" msgid "printer-state-reasons.stacker-unrecoverable-storage-error" msgstr "Stacker Unrecoverable Storage Error" msgid "printer-state-reasons.stacker-warming-up" msgstr "Stacker Warming Up" msgid "printer-state-reasons.stapler-added" msgstr "Stapler Added" msgid "printer-state-reasons.stapler-almost-empty" msgstr "Stapler Almost Empty" msgid "printer-state-reasons.stapler-almost-full" msgstr "Stapler Almost Full" msgid "printer-state-reasons.stapler-at-limit" msgstr "Stapler At Limit" msgid "printer-state-reasons.stapler-closed" msgstr "Stapler Closed" msgid "printer-state-reasons.stapler-configuration-change" msgstr "Stapler Configuration Change" msgid "printer-state-reasons.stapler-cover-closed" msgstr "Stapler Cover Closed" msgid "printer-state-reasons.stapler-cover-open" msgstr "Stapler Cover Open" msgid "printer-state-reasons.stapler-empty" msgstr "Stapler Empty" msgid "printer-state-reasons.stapler-full" msgstr "Stapler Full" msgid "printer-state-reasons.stapler-interlock-closed" msgstr "Stapler Interlock Closed" msgid "printer-state-reasons.stapler-interlock-open" msgstr "Stapler Interlock Open" msgid "printer-state-reasons.stapler-jam" msgstr "Stapler Jam" msgid "printer-state-reasons.stapler-life-almost-over" msgstr "Stapler Life Almost Over" msgid "printer-state-reasons.stapler-life-over" msgstr "Stapler Life Over" msgid "printer-state-reasons.stapler-memory-exhausted" msgstr "Stapler Memory Exhausted" msgid "printer-state-reasons.stapler-missing" msgstr "Stapler Missing" msgid "printer-state-reasons.stapler-motor-failure" msgstr "Stapler Motor Failure" msgid "printer-state-reasons.stapler-near-limit" msgstr "Stapler Near Limit" msgid "printer-state-reasons.stapler-offline" msgstr "Stapler Offline" msgid "printer-state-reasons.stapler-opened" msgstr "Stapler Opened" msgid "printer-state-reasons.stapler-over-temperature" msgstr "Stapler Over Temperature" msgid "printer-state-reasons.stapler-power-saver" msgstr "Stapler Power Saver" msgid "printer-state-reasons.stapler-recoverable-failure" msgstr "Stapler Recoverable Failure" msgid "printer-state-reasons.stapler-recoverable-storage" msgstr "Stapler Recoverable Storage" msgid "printer-state-reasons.stapler-removed" msgstr "Stapler Removed" msgid "printer-state-reasons.stapler-resource-added" msgstr "Stapler Resource Added" msgid "printer-state-reasons.stapler-resource-removed" msgstr "Stapler Resource Removed" msgid "printer-state-reasons.stapler-thermistor-failure" msgstr "Stapler Thermistor Failure" msgid "printer-state-reasons.stapler-timing-failure" msgstr "Stapler Timing Failure" msgid "printer-state-reasons.stapler-turned-off" msgstr "Stapler Turned Off" msgid "printer-state-reasons.stapler-turned-on" msgstr "Stapler Turned On" msgid "printer-state-reasons.stapler-under-temperature" msgstr "Stapler Under Temperature" msgid "printer-state-reasons.stapler-unrecoverable-failure" msgstr "Stapler Unrecoverable Failure" msgid "printer-state-reasons.stapler-unrecoverable-storage-error" msgstr "Stapler Unrecoverable Storage Error" msgid "printer-state-reasons.stapler-warming-up" msgstr "Stapler Warming Up" msgid "printer-state-reasons.stitcher-added" msgstr "Stitcher Added" msgid "printer-state-reasons.stitcher-almost-empty" msgstr "Stitcher Almost Empty" msgid "printer-state-reasons.stitcher-almost-full" msgstr "Stitcher Almost Full" msgid "printer-state-reasons.stitcher-at-limit" msgstr "Stitcher At Limit" msgid "printer-state-reasons.stitcher-closed" msgstr "Stitcher Closed" msgid "printer-state-reasons.stitcher-configuration-change" msgstr "Stitcher Configuration Change" msgid "printer-state-reasons.stitcher-cover-closed" msgstr "Stitcher Cover Closed" msgid "printer-state-reasons.stitcher-cover-open" msgstr "Stitcher Cover Open" msgid "printer-state-reasons.stitcher-empty" msgstr "Stitcher Empty" msgid "printer-state-reasons.stitcher-full" msgstr "Stitcher Full" msgid "printer-state-reasons.stitcher-interlock-closed" msgstr "Stitcher Interlock Closed" msgid "printer-state-reasons.stitcher-interlock-open" msgstr "Stitcher Interlock Open" msgid "printer-state-reasons.stitcher-jam" msgstr "Stitcher Jam" msgid "printer-state-reasons.stitcher-life-almost-over" msgstr "Stitcher Life Almost Over" msgid "printer-state-reasons.stitcher-life-over" msgstr "Stitcher Life Over" msgid "printer-state-reasons.stitcher-memory-exhausted" msgstr "Stitcher Memory Exhausted" msgid "printer-state-reasons.stitcher-missing" msgstr "Stitcher Missing" msgid "printer-state-reasons.stitcher-motor-failure" msgstr "Stitcher Motor Failure" msgid "printer-state-reasons.stitcher-near-limit" msgstr "Stitcher Near Limit" msgid "printer-state-reasons.stitcher-offline" msgstr "Stitcher Offline" msgid "printer-state-reasons.stitcher-opened" msgstr "Stitcher Opened" msgid "printer-state-reasons.stitcher-over-temperature" msgstr "Stitcher Over Temperature" msgid "printer-state-reasons.stitcher-power-saver" msgstr "Stitcher Power Saver" msgid "printer-state-reasons.stitcher-recoverable-failure" msgstr "Stitcher Recoverable Failure" msgid "printer-state-reasons.stitcher-recoverable-storage" msgstr "Stitcher Recoverable Storage" msgid "printer-state-reasons.stitcher-removed" msgstr "Stitcher Removed" msgid "printer-state-reasons.stitcher-resource-added" msgstr "Stitcher Resource Added" msgid "printer-state-reasons.stitcher-resource-removed" msgstr "Stitcher Resource Removed" msgid "printer-state-reasons.stitcher-thermistor-failure" msgstr "Stitcher Thermistor Failure" msgid "printer-state-reasons.stitcher-timing-failure" msgstr "Stitcher Timing Failure" msgid "printer-state-reasons.stitcher-turned-off" msgstr "Stitcher Turned Off" msgid "printer-state-reasons.stitcher-turned-on" msgstr "Stitcher Turned On" msgid "printer-state-reasons.stitcher-under-temperature" msgstr "Stitcher Under Temperature" msgid "printer-state-reasons.stitcher-unrecoverable-failure" msgstr "Stitcher Unrecoverable Failure" msgid "printer-state-reasons.stitcher-unrecoverable-storage-error" msgstr "Stitcher Unrecoverable Storage Error" msgid "printer-state-reasons.stitcher-warming-up" msgstr "Stitcher Warming Up" msgid "printer-state-reasons.stopped-partly" msgstr "Stopped Partly" msgid "printer-state-reasons.stopping" msgstr "Stopping" msgid "printer-state-reasons.subunit-added" msgstr "Subunit Added" msgid "printer-state-reasons.subunit-almost-empty" msgstr "Subunit Almost Empty" msgid "printer-state-reasons.subunit-almost-full" msgstr "Subunit Almost Full" msgid "printer-state-reasons.subunit-at-limit" msgstr "Subunit At Limit" msgid "printer-state-reasons.subunit-closed" msgstr "Subunit Closed" msgid "printer-state-reasons.subunit-empty" msgstr "Subunit Empty" msgid "printer-state-reasons.subunit-full" msgstr "Subunit Full" msgid "printer-state-reasons.subunit-life-almost-over" msgstr "Subunit Life Almost Over" msgid "printer-state-reasons.subunit-life-over" msgstr "Subunit Life Over" msgid "printer-state-reasons.subunit-memory-exhausted" msgstr "Subunit Memory Exhausted" msgid "printer-state-reasons.subunit-missing" msgstr "Subunit Missing" msgid "printer-state-reasons.subunit-motor-failure" msgstr "Subunit Motor Failure" msgid "printer-state-reasons.subunit-near-limit" msgstr "Subunit Near Limit" msgid "printer-state-reasons.subunit-offline" msgstr "Subunit Offline" msgid "printer-state-reasons.subunit-opened" msgstr "Subunit Opened" msgid "printer-state-reasons.subunit-over-temperature" msgstr "Subunit Over Temperature" msgid "printer-state-reasons.subunit-power-saver" msgstr "Subunit Power Saver" msgid "printer-state-reasons.subunit-recoverable-failure" msgstr "Subunit Recoverable Failure" msgid "printer-state-reasons.subunit-recoverable-storage" msgstr "Subunit Recoverable Storage" msgid "printer-state-reasons.subunit-removed" msgstr "Subunit Removed" msgid "printer-state-reasons.subunit-resource-added" msgstr "Subunit Resource Added" msgid "printer-state-reasons.subunit-resource-removed" msgstr "Subunit Resource Removed" msgid "printer-state-reasons.subunit-thermistor-failure" msgstr "Subunit Thermistor Failure" msgid "printer-state-reasons.subunit-timing-Failure" msgstr "Subunit Timing Failure" msgid "printer-state-reasons.subunit-turned-off" msgstr "Subunit Turned Off" msgid "printer-state-reasons.subunit-turned-on" msgstr "Subunit Turned On" msgid "printer-state-reasons.subunit-under-temperature" msgstr "Subunit Under Temperature" msgid "printer-state-reasons.subunit-unrecoverable-failure" msgstr "Subunit Unrecoverable Failure" msgid "printer-state-reasons.subunit-unrecoverable-storage" msgstr "Subunit Unrecoverable Storage" msgid "printer-state-reasons.subunit-warming-up" msgstr "Subunit Warming Up" msgid "printer-state-reasons.timed-out" msgstr "Timed Out" msgid "printer-state-reasons.toner-empty" msgstr "Toner Empty" msgid "printer-state-reasons.toner-low" msgstr "Toner Low" msgid "printer-state-reasons.trimmer-added" msgstr "Trimmer Added" msgid "printer-state-reasons.trimmer-almost-empty" msgstr "Trimmer Almost Empty" msgid "printer-state-reasons.trimmer-almost-full" msgstr "Trimmer Almost Full" msgid "printer-state-reasons.trimmer-at-limit" msgstr "Trimmer At Limit" msgid "printer-state-reasons.trimmer-closed" msgstr "Trimmer Closed" msgid "printer-state-reasons.trimmer-configuration-change" msgstr "Trimmer Configuration Change" msgid "printer-state-reasons.trimmer-cover-closed" msgstr "Trimmer Cover Closed" msgid "printer-state-reasons.trimmer-cover-open" msgstr "Trimmer Cover Open" msgid "printer-state-reasons.trimmer-empty" msgstr "Trimmer Empty" msgid "printer-state-reasons.trimmer-full" msgstr "Trimmer Full" msgid "printer-state-reasons.trimmer-interlock-closed" msgstr "Trimmer Interlock Closed" msgid "printer-state-reasons.trimmer-interlock-open" msgstr "Trimmer Interlock Open" msgid "printer-state-reasons.trimmer-jam" msgstr "Trimmer Jam" msgid "printer-state-reasons.trimmer-life-almost-over" msgstr "Trimmer Life Almost Over" msgid "printer-state-reasons.trimmer-life-over" msgstr "Trimmer Life Over" msgid "printer-state-reasons.trimmer-memory-exhausted" msgstr "Trimmer Memory Exhausted" msgid "printer-state-reasons.trimmer-missing" msgstr "Trimmer Missing" msgid "printer-state-reasons.trimmer-motor-failure" msgstr "Trimmer Motor Failure" msgid "printer-state-reasons.trimmer-near-limit" msgstr "Trimmer Near Limit" msgid "printer-state-reasons.trimmer-offline" msgstr "Trimmer Offline" msgid "printer-state-reasons.trimmer-opened" msgstr "Trimmer Opened" msgid "printer-state-reasons.trimmer-over-temperature" msgstr "Trimmer Over Temperature" msgid "printer-state-reasons.trimmer-power-saver" msgstr "Trimmer Power Saver" msgid "printer-state-reasons.trimmer-recoverable-failure" msgstr "Trimmer Recoverable Failure" msgid "printer-state-reasons.trimmer-recoverable-storage" msgstr "Trimmer Recoverable Storage" msgid "printer-state-reasons.trimmer-removed" msgstr "Trimmer Removed" msgid "printer-state-reasons.trimmer-resource-added" msgstr "Trimmer Resource Added" msgid "printer-state-reasons.trimmer-resource-removed" msgstr "Trimmer Resource Removed" msgid "printer-state-reasons.trimmer-thermistor-failure" msgstr "Trimmer Thermistor Failure" msgid "printer-state-reasons.trimmer-timing-failure" msgstr "Trimmer Timing Failure" msgid "printer-state-reasons.trimmer-turned-off" msgstr "Trimmer Turned Off" msgid "printer-state-reasons.trimmer-turned-on" msgstr "Trimmer Turned On" msgid "printer-state-reasons.trimmer-under-temperature" msgstr "Trimmer Under Temperature" msgid "printer-state-reasons.trimmer-unrecoverable-failure" msgstr "Trimmer Unrecoverable Failure" msgid "printer-state-reasons.trimmer-unrecoverable-storage-error" msgstr "Trimmer Unrecoverable Storage Error" msgid "printer-state-reasons.trimmer-warming-up" msgstr "Trimmer Warming Up" msgid "printer-state-reasons.unknown" msgstr "Unknown" msgid "printer-state-reasons.wrapper-added" msgstr "Wrapper Added" msgid "printer-state-reasons.wrapper-almost-empty" msgstr "Wrapper Almost Empty" msgid "printer-state-reasons.wrapper-almost-full" msgstr "Wrapper Almost Full" msgid "printer-state-reasons.wrapper-at-limit" msgstr "Wrapper At Limit" msgid "printer-state-reasons.wrapper-closed" msgstr "Wrapper Closed" msgid "printer-state-reasons.wrapper-configuration-change" msgstr "Wrapper Configuration Change" msgid "printer-state-reasons.wrapper-cover-closed" msgstr "Wrapper Cover Closed" msgid "printer-state-reasons.wrapper-cover-open" msgstr "Wrapper Cover Open" msgid "printer-state-reasons.wrapper-empty" msgstr "Wrapper Empty" msgid "printer-state-reasons.wrapper-full" msgstr "Wrapper Full" msgid "printer-state-reasons.wrapper-interlock-closed" msgstr "Wrapper Interlock Closed" msgid "printer-state-reasons.wrapper-interlock-open" msgstr "Wrapper Interlock Open" msgid "printer-state-reasons.wrapper-jam" msgstr "Wrapper Jam" msgid "printer-state-reasons.wrapper-life-almost-over" msgstr "Wrapper Life Almost Over" msgid "printer-state-reasons.wrapper-life-over" msgstr "Wrapper Life Over" msgid "printer-state-reasons.wrapper-memory-exhausted" msgstr "Wrapper Memory Exhausted" msgid "printer-state-reasons.wrapper-missing" msgstr "Wrapper Missing" msgid "printer-state-reasons.wrapper-motor-failure" msgstr "Wrapper Motor Failure" msgid "printer-state-reasons.wrapper-near-limit" msgstr "Wrapper Near Limit" msgid "printer-state-reasons.wrapper-offline" msgstr "Wrapper Offline" msgid "printer-state-reasons.wrapper-opened" msgstr "Wrapper Opened" msgid "printer-state-reasons.wrapper-over-temperature" msgstr "Wrapper Over Temperature" msgid "printer-state-reasons.wrapper-power-saver" msgstr "Wrapper Power Saver" msgid "printer-state-reasons.wrapper-recoverable-failure" msgstr "Wrapper Recoverable Failure" msgid "printer-state-reasons.wrapper-recoverable-storage" msgstr "Wrapper Recoverable Storage" msgid "printer-state-reasons.wrapper-removed" msgstr "Wrapper Removed" msgid "printer-state-reasons.wrapper-resource-added" msgstr "Wrapper Resource Added" msgid "printer-state-reasons.wrapper-resource-removed" msgstr "Wrapper Resource Removed" msgid "printer-state-reasons.wrapper-thermistor-failure" msgstr "Wrapper Thermistor Failure" msgid "printer-state-reasons.wrapper-timing-failure" msgstr "Wrapper Timing Failure" msgid "printer-state-reasons.wrapper-turned-off" msgstr "Wrapper Turned Off" msgid "printer-state-reasons.wrapper-turned-on" msgstr "Wrapper Turned On" msgid "printer-state-reasons.wrapper-under-temperature" msgstr "Wrapper Under Temperature" msgid "printer-state-reasons.wrapper-unrecoverable-failure" msgstr "Wrapper Unrecoverable Failure" msgid "printer-state-reasons.wrapper-unrecoverable-storage-error" msgstr "Wrapper Unrecoverable Storage Error" msgid "printer-state-reasons.wrapper-warming-up" msgstr "Wrapper Warming Up" msgid "printer-state.3" msgstr "Idle" msgid "printer-state.4" msgstr "Processing" msgid "printer-state.5" msgstr "Stopped" msgid "printer-up-time" msgstr "Printer Uptime" msgid "processing" msgstr "正在处ç†" msgid "proof-print" msgstr "Proof Print" msgid "proof-print-copies" msgstr "Proof Print Copies" msgid "punching" msgstr "Punching" msgid "punching-locations" msgstr "Punching Locations" msgid "punching-offset" msgstr "Punching Offset" msgid "punching-reference-edge" msgstr "Punching Reference Edge" msgid "punching-reference-edge.bottom" msgstr "Bottom" msgid "punching-reference-edge.left" msgstr "Left" msgid "punching-reference-edge.right" msgstr "Right" msgid "punching-reference-edge.top" msgstr "Top" #, c-format msgid "request id is %s-%d (%d file(s))" msgstr "请求 ID 为 %s-%d(%d 个文件)" msgid "request-id uses indefinite length" msgstr "request-id 使用ä¸å®šé•¿åº¦" msgid "requested-attributes" msgstr "Requested Attributes" msgid "retry-interval" msgstr "Retry Interval" msgid "retry-time-out" msgstr "Retry Time Out" msgid "save-disposition" msgstr "Save Disposition" msgid "save-disposition.none" msgstr "None" msgid "save-disposition.print-save" msgstr "Print Save" msgid "save-disposition.save-only" msgstr "Save Only" msgid "save-document-format" msgstr "Save Document Format" msgid "save-info" msgstr "Save Info" msgid "save-location" msgstr "Save Location" msgid "save-name" msgstr "Save Name" msgid "scheduler is not running" msgstr "调度器未è¿è¡Œ" msgid "scheduler is running" msgstr "调度器正在è¿è¡Œ" msgid "separator-sheets" msgstr "Separator Sheets" msgid "separator-sheets-type" msgstr "Separator Sheets Type" msgid "separator-sheets-type.both-sheets" msgstr "Both Sheets" msgid "separator-sheets-type.end-sheet" msgstr "End Sheet" msgid "separator-sheets-type.none" msgstr "None" msgid "separator-sheets-type.slip-sheets" msgstr "Slip Sheets" msgid "separator-sheets-type.start-sheet" msgstr "Start Sheet" msgid "sheet-collate" msgstr "Collate Copies" msgid "sheet-collate.collated" msgstr "Yes" msgid "sheet-collate.uncollated" msgstr "No" msgid "sides" msgstr "2-Sided Printing" msgid "sides.one-sided" msgstr "Off" msgid "sides.two-sided-long-edge" msgstr "On (Portrait)" msgid "sides.two-sided-short-edge" msgstr "On (Landscape)" #, c-format msgid "stat of %s failed: %s" msgstr "为 %s è¿è¡Œ stat 失败:%s" msgid "status\t\tShow status of daemon and queue." msgstr "状æ€\t\t显示守护程åºå’Œé˜Ÿåˆ—的状æ€ã€‚" msgid "status-message" msgstr "Status Message" msgid "stitching" msgstr "Staple" msgid "stitching-angle" msgstr "Stitching Angle" msgid "stitching-locations" msgstr "Stitching Locations" msgid "stitching-method" msgstr "Stitching Method" msgid "stitching-method.auto" msgstr "Automatic" msgid "stitching-method.crimp" msgstr "Crimp" msgid "stitching-method.wire" msgstr "Wire" msgid "stitching-offset" msgstr "Stitching Offset" msgid "stitching-reference-edge" msgstr "Stitching Reference Edge" msgid "stitching-reference-edge.bottom" msgstr "Bottom" msgid "stitching-reference-edge.left" msgstr "Left" msgid "stitching-reference-edge.right" msgstr "Right" msgid "stitching-reference-edge.top" msgstr "Top" msgid "stopped" msgstr "å·²åœæ­¢" msgid "subject" msgstr "Subject" #, c-format msgid "system default destination: %s" msgstr "系统默认目标:%s" #, c-format msgid "system default destination: %s/%s" msgstr "系统默认目标:%s/%s" msgid "t33-subaddress" msgstr "T33 Subaddress" msgid "to-name" msgstr "To Name" msgid "transmission-status" msgstr "Transmission Status" msgid "transmission-status.3" msgstr "Pending" msgid "transmission-status.4" msgstr "Pending Retry" msgid "transmission-status.5" msgstr "Processing" msgid "transmission-status.7" msgstr "Canceled" msgid "transmission-status.8" msgstr "Aborted" msgid "transmission-status.9" msgstr "Completed" msgid "trimming" msgstr "Cut" msgid "trimming-offset" msgstr "Cut Position" msgid "trimming-reference-edge" msgstr "Trimming Reference Edge" msgid "trimming-reference-edge.bottom" msgstr "Bottom" msgid "trimming-reference-edge.left" msgstr "Left" msgid "trimming-reference-edge.right" msgstr "Right" msgid "trimming-reference-edge.top" msgstr "Top" msgid "trimming-type" msgstr "Trimming Type" msgid "trimming-type.draw-line" msgstr "Draw Line" msgid "trimming-type.full" msgstr "Full" msgid "trimming-type.partial" msgstr "Partial" msgid "trimming-type.perforate" msgstr "Perforate" msgid "trimming-type.score" msgstr "Score" msgid "trimming-type.tab" msgstr "Tab" msgid "trimming-when" msgstr "Trimming When" msgid "trimming-when.after-documents" msgstr "After Documents" msgid "trimming-when.after-job" msgstr "After Job" msgid "trimming-when.after-sets" msgstr "After Sets" msgid "trimming-when.after-sheets" msgstr "After Sheets" msgid "unknown" msgstr "未知" msgid "untitled" msgstr "无标题" msgid "variable-bindings uses indefinite length" msgstr "variable-bindings 使用ä¸å®šé•¿åº¦" msgid "x-accuracy" msgstr "X Accuracy" msgid "x-dimension" msgstr "X Dimension" msgid "x-offset" msgstr "X Offset" msgid "x-origin" msgstr "X Origin" msgid "y-accuracy" msgstr "Y Accuracy" msgid "y-dimension" msgstr "Y Dimension" msgid "y-offset" msgstr "Y Offset" msgid "y-origin" msgstr "Y Origin" msgid "z-accuracy" msgstr "Z Accuracy" msgid "z-dimension" msgstr "Z Dimension" msgid "z-offset" msgstr "Z Offset" #~ msgid " --lf End lines with LF (UNIX/Linux/OS X)." #~ msgstr " --lf 使用 LF 行末 (UNIX/Linux/OS X)。" #~ msgid " -E Test with HTTP Upgrade to TLS." #~ msgstr " -E 使用å‡çº§ä¸º TLS çš„ HTTP 测试。" #~ msgid " -S Test with SSL encryption." #~ msgstr " -S 使用 SSL 加密测试。" #~ msgid " -a Browse for all services." #~ msgstr " -a æµè§ˆæ‰€æœ‰æœåŠ¡ã€‚" #~ msgid " -d domain Browse/resolve in specified domain." #~ msgstr " -d åŸŸå æµè§ˆ/è§£æžæŒ‡å®šåŸŸå。" #~ msgid " -p program Run specified program for each service." #~ msgstr " -p ç¨‹åº ä¸ºæ¯ä¸ªæœåŠ¡è¿è¡ŒæŒ‡å®šç¨‹åºã€‚" #~ msgid " -t type Browse/resolve with specified type." #~ msgstr " -t 类型 使用指定类型æµè§ˆ/è§£æžã€‚" #~ msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ URI 值“%s†— %s(RFC 2911 章节 4.1.5)。" #~ msgid "" #~ "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ URI 值“%s†— 无效的长度 %d(RFC 2911 章节 4.1.5)。" #~ msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„属性åç§° — 无效的长度 %d(RFC 2911 章节 4.1.3)。" #~ msgid "" #~ "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„属性åç§° — 无效字符(RFC 2911 章节 4.1.3)。" #~ msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆå¸ƒé‡Œå€¼ %d(RFC 2911 章节 4.1.11)。" #~ msgid "" #~ "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.7)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„字符集值“%sâ€- 无效字符(RFC 2911 章节 4.1.7)。" #~ msgid "" #~ "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„字符集值“%sâ€- 无效长度 %d(RFC 2911 章节 4.1.7)。" #~ msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ dateTime UTC å°æ—¶ %u(RFC 2911 章节 4.1.14)。" #~ msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ dateTime UTC 分钟 %u(RFC 2911 章节 4.1.14)。" #~ msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ dateTime UTC 符å·â€œ%câ€ï¼ˆRFC 2911 章节 4.1.14)。" #~ msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ dateTime 日期 %u(RFC 2911 章节 4.1.14)。" #~ msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ dateTime 毫秒 %u(RFC 2911 章节 4.1.14)。" #~ msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ dateTime å°æ—¶ %u(RFC 2911 章节 4.1.14)。" #~ msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ dateTime 分钟 %u(RFC 2911 章节 4.1.14)。" #~ msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ dateTime 月份 %u(RFC 2911 章节 4.1.14)。" #~ msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ dateTime ç§’ %u(RFC 2911 章节 4.1.14)。" #~ msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ enum 值 %d — 数值越界(RFC 2911 章节 4.1.4)。" #~ msgid "" #~ "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„关键è¯èµ‹å€¼â€œ%sâ€- 无效长度 %d(RFC 2911 章节 4.1.3)。" #~ msgid "" #~ "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section " #~ "4.1.3)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„关键è¯èµ‹å€¼â€œ%sâ€- 无效字符(RFC 2911 章节 4.1.3)。" #~ msgid "" #~ "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.9)." #~ msgstr "" #~ "“%sâ€ï¼šæ— æ•ˆçš„ mimeMediaType 赋值“%sâ€- 无效字符(RFC 2911 章节 4.1.9)。" #~ msgid "" #~ "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section " #~ "4.1.9)." #~ msgstr "" #~ "“%sâ€ï¼šæ— æ•ˆçš„ mimeMediaType 赋值“%sâ€- 无效长度 %d(RFC 2911 章节 4.1.9)。" #~ msgid "" #~ "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section " #~ "4.1.2)." #~ msgstr "" #~ "“%sâ€ï¼šæ— æ•ˆçš„å称赋值“%sâ€- 无效的 UTF-8 åºåˆ—(RFC 2911 章节 4.1.2)。" #~ msgid "" #~ "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„å称赋值“%sâ€- 无效长度 %d(RFC 2911 章节 4.1.2)。" #~ msgid "" #~ "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 " #~ "section 4.1.8)." #~ msgstr "" #~ "“%sâ€ï¼šæ— æ•ˆçš„ naturalLanguage 赋值“%sâ€- 无效字符(RFC 2911 章节 4.1.8)。" #~ msgid "" #~ "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 " #~ "section 4.1.8)." #~ msgstr "" #~ "“%sâ€ï¼šæ— æ•ˆçš„ naturalLanguage 赋值“%sâ€- 无效长度 %d(RFC 2911 章节 " #~ "4.1.8)。" #~ msgid "" #~ "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ octetString 值 — 无效长度 %d(RFC 2911 章节 4.1.10)。" #~ msgid "" #~ "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC " #~ "2911 section 4.1.13)." #~ msgstr "" #~ "“%sâ€ï¼šæ— æ•ˆçš„ rangeOfInteger 值 %d-%d — 下界大于上界(RFC 2911 章节 " #~ "4.1.13)。" #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section " #~ "4.1.15)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„分辨率值 %dx%d%s — 无效å•ä½å€¼ï¼ˆRFC 2911 章节 4.1.15)。" #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be " #~ "positive (RFC 2911 section 4.1.15)." #~ msgstr "" #~ "“%sâ€ï¼šæ— æ•ˆçš„分辨率值 %d×%d%s — 横å‘喂入分辨率必须为正值(RFC 2911 章节 " #~ "4.1.15)。" #~ msgid "" #~ "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive " #~ "(RFC 2911 section 4.1.15)." #~ msgstr "" #~ "“%sâ€ï¼šæ— æ•ˆçš„分辨率值 %d×%d%s — 喂入分辨率必须为正值(RFC 2911 章节 " #~ "4.1.15)。" #~ msgid "" #~ "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section " #~ "4.1.1)." #~ msgstr "" #~ "“%sâ€ï¼šæ— æ•ˆçš„æ–‡æœ¬èµ‹å€¼â€œ%sâ€- 无效的 UTF-8 åºåˆ—(RFC 2911 章节 4.1.1)。" #~ msgid "" #~ "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„æ–‡æœ¬èµ‹å€¼â€œ%sâ€- 无效长度 %d(RFC 2911 章节 4.1.1)。" #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section " #~ "4.1.6)." #~ msgstr "“%sâ€ï¼šæ— æ•ˆçš„ uriScheme 赋值“%sâ€- 无效字符(RFC 2911 章节 4.1.6)。" #~ msgid "" #~ "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section " #~ "4.1.6)." #~ msgstr "" #~ "“%sâ€ï¼šæ— æ•ˆçš„ uriScheme 赋值“%sâ€- 无效长度 %d(RFC 2911 章节 4.1.6)。" #~ msgid "%g x %g" #~ msgstr "%g x %g" #~ msgid "Envelope #10 " #~ msgstr "10 å·ä¿¡å° " #~ msgid "Envelope PRC1 " #~ msgstr "中国一å·ä¿¡å° " #~ msgid "FanFold German" #~ msgstr "德国弿‰‡æŠ˜" #~ msgid "FanFold Legal German" #~ msgstr "德国弿³•律扇折" #~ msgid "Fanfold US" #~ msgstr "ç¾Žå›½å¼æ‰‡æŠ˜" #, fuzzy #~ msgid "File Folder " #~ msgstr "文件夹 " #~ msgid "Postcard Double " #~ msgstr "åŒé¢æ˜Žä¿¡ç‰‡ " #~ msgid "" #~ "Usage: ippdiscover [options] -a\n" #~ " ippdiscover [options] \"service name\"\n" #~ "\n" #~ "Options:" #~ msgstr "" #~ "用法:\tippdiscover [options] -a\n" #~ " \tippdiscover [options] \"service name\"\n" #~ "\n" #~ "选项:" #~ msgid "compression" #~ msgstr "Compression" #~ msgid "compression-accepted" #~ msgstr "Compression Accepted" #~ msgid "compression.compress" #~ msgstr "Compress" #~ msgid "compression.deflate" #~ msgstr "Deflate" #~ msgid "compression.gzip" #~ msgstr "Gzip" #~ msgid "compression.none" #~ msgstr "None" #~ msgid "destination-accesses" #~ msgstr "Destination Accesses" #~ msgid "destination-statuses" #~ msgstr "Destination Statuses" #~ msgid "destination-uris" #~ msgstr "Destination Uris" #~ msgid "document-access" #~ msgstr "Document Access" #~ msgid "document-data-get-interval" #~ msgstr "Document Data Get Interval" #~ msgid "document-data-wait" #~ msgstr "Document Data Wait" #~ msgid "document-format-accepted" #~ msgstr "Document Format Accepted" #~ msgid "document-message" #~ msgstr "Document Message" #~ msgid "document-metadata" #~ msgstr "Document Metadata" #~ msgid "document-name" #~ msgstr "Document Name" #~ msgid "document-number" #~ msgstr "Document Number" #~ msgid "document-password" #~ msgstr "Document Password" #~ msgid "document-preprocessed" #~ msgstr "Document Preprocessed" #~ msgid "fetch-status-message" #~ msgstr "Fetch Status Message" #~ msgid "identify-actions" #~ msgstr "Identify Actions" #~ msgid "identify-actions.display" #~ msgstr "Display" #~ msgid "identify-actions.flash" #~ msgstr "Flash" #~ msgid "identify-actions.sound" #~ msgstr "Sound" #~ msgid "identify-actions.speak" #~ msgstr "Speak" #~ msgid "ipp-attribute-fidelity" #~ msgstr "Attribute Fidelity" #~ msgid "job-authorization-uri" #~ msgstr "Job Authorization URI" #~ msgid "job-destination-spooling-supported.automatic" #~ msgstr "Automatic" #~ msgid "job-destination-spooling-supported.spool" #~ msgstr "Spool" #~ msgid "job-destination-spooling-supported.stream" #~ msgstr "Stream" #~ msgid "job-impressions-col" #~ msgstr "Job Impressions" #~ msgid "job-impressions-estimated" #~ msgstr "Job Impressions Estimated" #~ msgid "job-media-sheets-col" #~ msgstr "Job Media Sheets" #~ msgid "job-pages-per-set" #~ msgstr "Job Pages Per Set" #~ msgid "job-password" #~ msgstr "Job Password" #~ msgid "job-password-repertoire-configured" #~ msgstr "Job Password Repertoire Configured" #~ msgid "job-password-repertoire-supported.iana_us-ascii_any" #~ msgstr "Iana Us Ascii Any" #~ msgid "job-password-repertoire-supported.iana_us-ascii_complex" #~ msgstr "Iana Us Ascii Complex" #~ msgid "job-password-repertoire-supported.iana_us-ascii_digits" #~ msgstr "Iana Us Ascii Digits" #~ msgid "job-password-repertoire-supported.iana_us-ascii_letters" #~ msgstr "Iana Us Ascii Letters" #~ msgid "job-password-repertoire-supported.iana_utf-8_any" #~ msgstr "Iana Utf 8 Any" #~ msgid "job-password-repertoire-supported.iana_utf-8_digits" #~ msgstr "Iana Utf 8 Digits" #~ msgid "job-password-repertoire-supported.iana_utf-8_letters" #~ msgstr "Iana Utf 8 Letters" #~ msgid "job-settable-attributes-supported.job-name" #~ msgstr "Job Name" #~ msgid "job-settable-attributes-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.arithmetic" #~ msgstr "Arithmetic" #~ msgid "jpeg-features-supported.cmyk" #~ msgstr "Cmyk" #~ msgid "jpeg-features-supported.deep" #~ msgstr "Deep" #~ msgid "jpeg-features-supported.hierarchical" #~ msgstr "Hierarchical" #~ msgid "jpeg-features-supported.icc" #~ msgstr "Icc" #~ msgid "jpeg-features-supported.lossless" #~ msgstr "Lossless" #~ msgid "jpeg-features-supported.none" #~ msgstr "None" #~ msgid "jpeg-features-supported.progressive" #~ msgstr "Progressive" #~ msgid "lpinfo: Unknown argument \"%s\"." #~ msgstr "lpinfoï¼šæœªçŸ¥å‚æ•°â€œ%sâ€ã€‚" #~ msgid "lpinfo: Unknown option \"%c\"." #~ msgstr "lpinfo:未知选项“%câ€ã€‚" #~ msgid "lpinfo: Unknown option \"%s\"." #~ msgstr "lpinfo:未知选项“%sâ€ã€‚" #~ msgid "lpmove: Unknown option \"%c\"." #~ msgstr "lpmove:未知选项“%câ€ã€‚" #~ msgid "material-type.pla-dissolvable" #~ msgstr "Pla Dissolvable" #~ msgid "media.om_large-photo_200x300mm" #~ msgstr "200 x 300mm" #~ msgid "notify-subscribed-event" #~ msgstr "Notify Event" #~ msgid "operations-supported.10" #~ msgstr "Get-Jobs" #~ msgid "operations-supported.11" #~ msgstr "Get-Printer-Attributes" #~ msgid "operations-supported.12" #~ msgstr "Hold-Job" #~ msgid "operations-supported.13" #~ msgstr "Release-Job" #~ msgid "operations-supported.14" #~ msgstr "Restart-Job" #~ msgid "operations-supported.16" #~ msgstr "Pause-Printer" #~ msgid "operations-supported.17" #~ msgstr "Resume-Printer" #~ msgid "operations-supported.18" #~ msgstr "Purge-Jobs" #~ msgid "operations-supported.19" #~ msgstr "Set-Printer-Attributes" #~ msgid "operations-supported.2" #~ msgstr "Print-Job" #~ msgid "operations-supported.20" #~ msgstr "Set-Job-Attributes" #~ msgid "operations-supported.21" #~ msgstr "Get-Printer-Supported-Values" #~ msgid "operations-supported.22" #~ msgstr "Create-Printer-Subscriptions" #~ msgid "operations-supported.23" #~ msgstr "Create-Job-Subscriptions" #~ msgid "operations-supported.24" #~ msgstr "Get-Subscription-Attributes" #~ msgid "operations-supported.25" #~ msgstr "Get-Subscriptions" #~ msgid "operations-supported.26" #~ msgstr "Renew-Subscription" #~ msgid "operations-supported.27" #~ msgstr "Cancel-Subscription" #~ msgid "operations-supported.28" #~ msgstr "Get-Notifications" #~ msgid "operations-supported.3" #~ msgstr "Print-URI" #~ msgid "operations-supported.34" #~ msgstr "Enable-Printer" #~ msgid "operations-supported.35" #~ msgstr "Disable-Printer" #~ msgid "operations-supported.36" #~ msgstr "Pause-Printer-After-Current-Job" #~ msgid "operations-supported.37" #~ msgstr "Hold-New-Jobs" #~ msgid "operations-supported.38" #~ msgstr "Release-Held-New-Jobs" #~ msgid "operations-supported.39" #~ msgstr "Deactivate-Printer" #~ msgid "operations-supported.4" #~ msgstr "Validate-Job" #~ msgid "operations-supported.40" #~ msgstr "Activate-Printer" #~ msgid "operations-supported.41" #~ msgstr "Restart-Printer" #~ msgid "operations-supported.42" #~ msgstr "Shutdown-Printer" #~ msgid "operations-supported.43" #~ msgstr "Startup-Printer" #~ msgid "operations-supported.44" #~ msgstr "Reprocess-Job" #~ msgid "operations-supported.45" #~ msgstr "Cancel-Current-Job" #~ msgid "operations-supported.46" #~ msgstr "Suspend-Current-Job" #~ msgid "operations-supported.47" #~ msgstr "Resume-Job" #~ msgid "operations-supported.48" #~ msgstr "Promote-Job" #~ msgid "operations-supported.49" #~ msgstr "Schedule-Job-After" #~ msgid "operations-supported.5" #~ msgstr "Create-Job" #~ msgid "operations-supported.51" #~ msgstr "Cancel-Document" #~ msgid "operations-supported.52" #~ msgstr "Get-Document-Attributes" #~ msgid "operations-supported.53" #~ msgstr "Get-Documents" #~ msgid "operations-supported.54" #~ msgstr "Delete-Document" #~ msgid "operations-supported.55" #~ msgstr "Set-Document-Attributes" #~ msgid "operations-supported.56" #~ msgstr "Cancel-Jobs" #~ msgid "operations-supported.57" #~ msgstr "Cancel-My-Jobs" #~ msgid "operations-supported.58" #~ msgstr "Resubmit-Job" #~ msgid "operations-supported.59" #~ msgstr "Close-Job" #~ msgid "operations-supported.6" #~ msgstr "Send-Document" #~ msgid "operations-supported.60" #~ msgstr "Identify-Printer" #~ msgid "operations-supported.61" #~ msgstr "Validate-Document" #~ msgid "operations-supported.62" #~ msgstr "Add-Document-Images" #~ msgid "operations-supported.63" #~ msgstr "Acknowledge-Document" #~ msgid "operations-supported.64" #~ msgstr "Acknowledge-Identify-Printer" #~ msgid "operations-supported.65" #~ msgstr "Acknowledge-Job" #~ msgid "operations-supported.66" #~ msgstr "Fetch-Document" #~ msgid "operations-supported.67" #~ msgstr "Fetch-Job" #~ msgid "operations-supported.68" #~ msgstr "Get-Output-Device-Attributes" #~ msgid "operations-supported.69" #~ msgstr "Update-Active-Jobs" #~ msgid "operations-supported.7" #~ msgstr "Send-URI" #~ msgid "operations-supported.70" #~ msgstr "Deregister-Output-Device" #~ msgid "operations-supported.71" #~ msgstr "Update-Document-Status" #~ msgid "operations-supported.72" #~ msgstr "Update-Job-Status" #~ msgid "operations-supported.73" #~ msgstr "Update-Output-Device-Attributes" #~ msgid "operations-supported.74" #~ msgstr "Get-Next-Document-Data" #~ msgid "operations-supported.8" #~ msgstr "Cancel-Job" #~ msgid "operations-supported.9" #~ msgstr "Get-Job-Attributes" #~ msgid "output-device" #~ msgstr "Output Device" #~ msgid "output-device-job-states" #~ msgstr "Output Device Job States" #~ msgid "output-device-uuid" #~ msgstr "Output Device Uuid" #~ msgid "pdf-features-supported.prc" #~ msgstr "Prc" #~ msgid "pdf-features-supported.u3d" #~ msgstr "U3d" #~ msgid "pdf-versions-supported.adobe-1.3" #~ msgstr "Adobe 1.3" #~ msgid "pdf-versions-supported.adobe-1.4" #~ msgstr "Adobe 1.4" #~ msgid "pdf-versions-supported.adobe-1.5" #~ msgstr "Adobe 1.5" #~ msgid "pdf-versions-supported.adobe-1.6" #~ msgstr "Adobe 1.6" #~ msgid "pdf-versions-supported.iso-15930-1_2001" #~ msgstr "ISO 15930-1:2001" #~ msgid "pdf-versions-supported.iso-15930-3_2002" #~ msgstr "ISO 15930-3:2002" #~ msgid "pdf-versions-supported.iso-15930-4_2003" #~ msgstr "ISO 15930-4:2003" #~ msgid "pdf-versions-supported.iso-15930-6_2003" #~ msgstr "ISO 15930-6:2003" #~ msgid "pdf-versions-supported.iso-15930-7_2010" #~ msgstr "ISO 15930-7:2010" #~ msgid "pdf-versions-supported.iso-15930-8_2010" #~ msgstr "ISO 15930-8:2010" #~ msgid "pdf-versions-supported.iso-16612-2_2010" #~ msgstr "ISO 16612-2:2010" #~ msgid "pdf-versions-supported.iso-19005-1_2005" #~ msgstr "ISO 19005-1:2005" #~ msgid "pdf-versions-supported.iso-19005-2_2011" #~ msgstr "ISO 19005-2:2011" #~ msgid "pdf-versions-supported.iso-19005-3_2012" #~ msgstr "ISO 19005-3:2012" #~ msgid "pdf-versions-supported.iso-32000-1_2008" #~ msgstr "ISO 32000-1:2008" #~ msgid "pdf-versions-supported.none" #~ msgstr "None" #~ msgid "pdf-versions-supported.pwg-5102.3" #~ msgstr "PWG 5102.3" #~ msgid "preferred-attributes" #~ msgstr "Preferred Attributes" #~ msgid "printer-mandatory-job-attributes" #~ msgstr "Printer Mandatory Job Attributes" #~ msgid "profile-uri-actual" #~ msgstr "Actual Profile URI" #~ msgid "requested-attributes.all" #~ msgstr "All" #~ msgid "requested-attributes.document-description" #~ msgstr "Document Description" #~ msgid "requested-attributes.document-template" #~ msgstr "Document Template" #~ msgid "requested-attributes.job-actuals" #~ msgstr "Job Actuals" #~ msgid "requested-attributes.job-description" #~ msgstr "Job Description" #~ msgid "requested-attributes.job-template" #~ msgstr "Job Template" #~ msgid "requested-attributes.printer-description" #~ msgstr "Printer Description" #~ msgid "requested-attributes.subscription-description" #~ msgstr "Subscription Description" #~ msgid "requested-attributes.subscription-template" #~ msgstr "Subscription Template" #~ msgid "requesting-user-name" #~ msgstr "Requesting User Name" #~ msgid "requesting-user-uri" #~ msgstr "Requesting User URI" #~ msgid "x-image-position" #~ msgstr "X Image Position" #~ msgid "x-image-position.center" #~ msgstr "Center" #~ msgid "x-image-position.left" #~ msgstr "Left" #~ msgid "x-image-position.none" #~ msgstr "None" #~ msgid "x-image-position.right" #~ msgstr "Right" #~ msgid "x-image-shift" #~ msgstr "X Image Shift" #~ msgid "x-side1-image-shift" #~ msgstr "X Front Side Image Shift" #~ msgid "x-side2-image-shift" #~ msgstr "X Back Side Image Shift" #~ msgid "y-image-position" #~ msgstr "Y Image Position" #~ msgid "y-image-position.bottom" #~ msgstr "Bottom" #~ msgid "y-image-position.center" #~ msgstr "Center" #~ msgid "y-image-position.none" #~ msgstr "None" #~ msgid "y-image-position.top" #~ msgstr "Top" #~ msgid "y-image-shift" #~ msgstr "Y Image Shift" #~ msgid "y-side1-image-shift" #~ msgstr "Y Front Side Image Shift" #~ msgid "y-side2-image-shift" #~ msgstr "Y Back Side Image Shift" cups-2.2.7/locale/Dependencies000664 000765 000024 00000001627 13255074424 016731 0ustar00msweetstaff000000 000000 checkpo.o: checkpo.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h po2strings.o: po2strings.c ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h strings2po.o: strings2po.c cups-2.2.7/locale/locale.txt000664 000765 000024 00000001757 13255074424 016424 0ustar00msweetstaff000000 000000 This directory contains the message strings used by CUPS for various languages. Each subdirectory corresponds to a different locale, and the cups_xx and cups_xx_YY files contain the messages for the locales named "xx" or "xx_YY". Each message file starts with a character set identifier, which can be one of the following: us-ascii iso-8859-1 iso-8859-2 iso-8859-3 iso-8859-4 iso-8859-5 iso-8859-6 iso-8859-7 iso-8859-8 iso-8859-9 utf-8 After that, all non-blank lines are treated as messages, with any leading whitespace removed. If a line starts with a number then the message index is updated to the number. Otherwise, the next message number is used. The message indices are defined in the include file . The HTTP status messages use the status codes defined in . If you would like to contribute a new message file for your locale, or have corrections to the current ones, please send them to: cups-support@cups.org cups-2.2.7/locale/Makefile000664 000765 000024 00000007741 13255074424 016063 0ustar00msweetstaff000000 000000 # # Locale file makefile for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 1993-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include ../Makedefs OBJS = checkpo.o po2strings.o strings2po.o TARGETS = checkpo po2strings strings2po # # Make everything... # all: $(TARGETS) # # Make library targets... # libs: # # Make unit tests... # unittests: # # Clean all config and object files... # clean: $(RM) $(TARGETS) $(OBJS) # # Update dependencies (without system header dependencies...) # depend: $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: $(INSTALL_LANGUAGES) install-languages: $(INSTALL_DIR) -m 755 $(LOCALEDIR) for loc in $(LANGUAGES) ; do \ if test -f cups_$$loc.po; then \ $(INSTALL_DIR) -m 755 $(LOCALEDIR)/$$loc ; \ $(INSTALL_DATA) cups_$$loc.po $(LOCALEDIR)/$$loc/cups_$$loc.po ; \ fi ; \ done install-langbundle: po2strings $(INSTALL_DIR) -m 755 "$(BUILDROOT)$(BUNDLEDIR)/Resources/English.lproj" $(INSTALL_DATA) cups.strings "$(BUILDROOT)$(BUNDLEDIR)/Resources/English.lproj" # # Install programs... # install-exec: # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Uninstall files... # uninstall: $(UNINSTALL_LANGUAGES) uninstall-languages: -for loc in $(LANGUAGES) ; do \ $(RM) $(LOCALEDIR)/$$loc/cups_$$loc.po ; \ done uninstall-langbundle: $(RM) "$(BUILDROOT)$(BUNDLEDIR)/Resources/English.lproj/cups.strings" # # pot - Creates/updates the cups.pot template file, merges changes into existing # message catalogs, and updates the cups.strings file. We don't use # xgettext to update the cups.strings file due to known xgettext bugs. # pot: checkpo po2strings echo Updating cups.pot... mv cups.pot cups.pot.bck touch cups.pot cd ..; xgettext -o locale/cups.pot -cTRANSLATORS -s \ --keyword=_ --no-wrap \ --copyright-holder="Apple Inc." \ --package-name="CUPS" --package-version="$(CUPS_VERSION)" \ --msgid-bugs-address="https://github.com/apple/cups/issues" \ */*.c */*.cxx (cat cups.header; tail +6 cups.pot; cat cups.footer) > cups.pot.N mv cups.pot.N cups.pot echo Checking cups.pot... ./checkpo cups.pot for loc in *.po ; do \ if test $$loc = '*.po'; then \ break; \ fi; \ echo Merging changes into $$loc... ; \ msgmerge -o $$loc -s -N --no-location $$loc cups.pot ; \ done echo Updating cups.strings... ./po2strings cups.pot cups.strings # # checkpo - A simple utility to check PO files for correct translation # strings. Dependency on static library is deliberate. # # checkpo filename.po [... filenameN.po] # checkpo: checkpo.o ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o checkpo checkpo.o \ ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \ $(COMMONLIBS) $(LIBZ) checkall: checkpo ./checkpo *.po *.strings # # po2strings - A simple utility which uses iconv to convert GNU gettext # message catalogs to macOS .strings files. # # po2strings filename.po filename.strings # po2strings: po2strings.o ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o po2strings po2strings.o \ ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \ $(COMMONLIBS) $(LIBZ) # # strings2po - A simple utility which uses iconv to convert macOS .strings files # to GNU gettext message catalogs. # # strings2po filename.strings filename.po # strings2po: strings2po.o echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o strings2po strings2po.o # # Dependencies... # include Dependencies cups-2.2.7/locale/po2strings.c000664 000765 000024 00000017747 13255074424 016710 0ustar00msweetstaff000000 000000 /* * Convert a GNU gettext .po file to an Apple .strings file. * * Copyright 2007-2017 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * Usage: * * po2strings filename.strings filename.po * * Compile with: * * gcc -o po2strings po2strings.c `cups-config --libs` */ #include /* * The .strings file format is simple: * * // comment * "msgid" = "msgstr"; * * The GNU gettext .po format is also fairly simple: * * #. comment * msgid "some text" * msgstr "localized text" * * The comment, msgid, and msgstr text can span multiple lines using the form: * * #. comment * #. more comments * msgid "" * "some long text" * msgstr "" * "localized text spanning " * "multiple lines" * * Both the msgid and msgstr strings use standard C quoting for special * characters like newline and the double quote character. */ static char *normalize_string(const char *idstr, char *buffer, size_t bufsize); /* * main() - Convert .po file to .strings. */ int /* O - Exit code */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ const char *pofile, /* .po filename */ *stringsfile; /* .strings filename */ cups_file_t *po, /* .po file */ *strings; /* .strings file */ char s[4096], /* String buffer */ *ptr, /* Pointer into buffer */ *temp, /* New string */ *msgid, /* msgid string */ *msgstr, /* msgstr string */ normalized[8192];/* Normalized msgid string */ size_t length; /* Length of combined strings */ int use_msgid; /* Use msgid strings for msgstr? */ /* * Process command-line arguments... */ pofile = NULL; stringsfile = NULL; use_msgid = 0; for (i = 1; i < argc; i ++) { if (!strcmp(argv[i], "-m")) use_msgid = 1; else if (argv[i][0] == '-') { puts("Usage: po2strings [-m] filename.po filename.strings"); return (1); } else if (!pofile) pofile = argv[i]; else if (!stringsfile) stringsfile = argv[i]; else { puts("Usage: po2strings [-m] filename.po filename.strings"); return (1); } } if (!pofile || !stringsfile) { puts("Usage: po2strings [-m] filename.po filename.strings"); return (1); } /* * Read strings from the .po file and write to the .strings file... */ if ((po = cupsFileOpen(pofile, "r")) == NULL) { perror(pofile); return (1); } if ((strings = cupsFileOpen(stringsfile, "w")) == NULL) { perror(stringsfile); cupsFileClose(po); return (1); } msgid = msgstr = NULL; while (cupsFileGets(po, s, sizeof(s)) != NULL) { if (s[0] == '#' && s[1] == '.') { /* * Copy comment string... */ if (msgid && msgstr) { /* * First output the last localization string... */ if (*msgid) cupsFilePrintf(strings, "\"%s\" = \"%s\";\n", msgid, (use_msgid || !*msgstr) ? msgid : msgstr); free(msgid); free(msgstr); msgid = msgstr = NULL; } cupsFilePrintf(strings, "//%s\n", s + 2); } else if (s[0] == '#' || !s[0]) { /* * Skip blank and file comment lines... */ continue; } else { /* * Strip the trailing quote... */ if ((ptr = strrchr(s, '\"')) == NULL) continue; *ptr = '\0'; /* * Find start of value... */ if ((ptr = strchr(s, '\"')) == NULL) continue; ptr ++; /* * Create or add to a message... */ if (!strncmp(s, "msgid", 5)) { /* * Output previous message as needed... */ if (msgid && msgstr) { if (*msgid) cupsFilePrintf(strings, "\"%s\" = \"%s\";\n", msgid, normalize_string((use_msgid || !*msgstr) ? msgid : msgstr, normalized, sizeof(normalized))); } if (msgid) free(msgid); if (msgstr) free(msgstr); msgid = strdup(ptr); msgstr = NULL; } else if (s[0] == '\"' && (msgid || msgstr)) { /* * Append to current string... */ size_t ptrlen = strlen(ptr); /* Length of string */ length = strlen(msgstr ? msgstr : msgid); if ((temp = realloc(msgstr ? msgstr : msgid, length + ptrlen + 1)) == NULL) { free(msgid); if (msgstr) free(msgstr); perror("Unable to allocate string"); return (1); } if (msgstr) { /* * Copy the new portion to the end of the msgstr string - safe * to use strcpy because the buffer is allocated to the correct * size... */ msgstr = temp; memcpy(msgstr + length, ptr, ptrlen + 1); } else { /* * Copy the new portion to the end of the msgid string - safe * to use strcpy because the buffer is allocated to the correct * size... */ msgid = temp; memcpy(msgid + length, ptr, ptrlen + 1); } } else if (!strncmp(s, "msgstr", 6) && msgid) { /* * Set the string... */ if (msgstr) free(msgstr); if ((msgstr = strdup(ptr)) == NULL) { free(msgid); perror("Unable to allocate msgstr"); return (1); } } } } if (msgid && msgstr) { if (*msgid) cupsFilePrintf(strings, "\"%s\" = \"%s\";\n", msgid, normalize_string((use_msgid || !*msgstr) ? msgid : msgstr, normalized, sizeof(normalized))); } if (msgid) free(msgid); if (msgstr) free(msgstr); cupsFileClose(po); cupsFileClose(strings); return (0); } /* * 'normalize_string()' - Normalize a msgid string. * * This function converts ASCII ellipsis and double quotes to their Unicode * counterparts. */ static char * /* O - Normalized string */ normalize_string(const char *idstr, /* I - msgid string */ char *buffer, /* I - Normalized string buffer */ size_t bufsize) /* I - Size of string buffer */ { char *bufptr = buffer, /* Pointer into buffer */ *bufend = buffer + bufsize - 3; /* End of buffer */ int quote = 0, /* Quote direction */ html = 0; /* HTML text */ while (*idstr && bufptr < bufend) { if (!strncmp(idstr, "') html = 0; if (*idstr == '.' && idstr[1] == '.' && idstr[2] == '.') { /* * Convert ... to Unicode ellipsis... */ *bufptr++ = (char)0xE2; *bufptr++ = (char)0x80; *bufptr++ = (char)0xA6; idstr += 2; } else if (!html && *idstr == '\\' && idstr[1] == '\"') { if (quote) { /* * Convert second \" to Unicode right (curley) double quote. */ *bufptr++ = (char)0xE2; *bufptr++ = (char)0x80; *bufptr++ = (char)0x9D; quote = 0; } else if (strchr(idstr + 2, '\"') != NULL) { /* * Convert first \" to Unicode left (curley) double quote. */ *bufptr++ = (char)0xE2; *bufptr++ = (char)0x80; *bufptr++ = (char)0x9C; quote = 1; } else { /* * Convert lone \" to Unicode double prime. */ *bufptr++ = (char)0xE2; *bufptr++ = (char)0x80; *bufptr++ = (char)0xB3; } idstr ++; } else if (*idstr == '\'') { if (strchr(idstr + 1, '\'') == NULL || quote) { /* * Convert second ' (or ' used for a contraction) to Unicode right * (curley) single quote. */ *bufptr++ = (char)0xE2; *bufptr++ = (char)0x80; *bufptr++ = (char)0x99; quote = 0; } else { /* * Convert first ' to Unicode left (curley) single quote. */ *bufptr++ = (char)0xE2; *bufptr++ = (char)0x80; *bufptr++ = (char)0x98; quote = 1; } } else *bufptr++ = *idstr; idstr ++; } *bufptr = '\0'; return (buffer); } cups-2.2.7/locale/strings2po.c000664 000765 000024 00000007064 13255074424 016677 0ustar00msweetstaff000000 000000 /* * Convert Apple .strings file (UTF-16 BE text file) to GNU gettext .po files. * * Copyright 2007-2014 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * Usage: * * strings2po filename.strings filename.po * * Compile with: * * gcc -o strings2po strings2po.c */ #include #include /* * The .strings file format is simple: * * // comment * "id" = "str"; * * Both the id and str strings use standard C quoting for special characters * like newline and the double quote character. */ /* * Local functions... */ static int read_strings(FILE *strings, char *buffer, size_t bufsize, char **id, char **str); static void write_po(FILE *po, const char *what, const char *s); /* * main() - Convert .strings file to .po. */ int /* O - Exit code */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { FILE *strings, /* .strings file */ *po; /* .po file */ char iconv[1024], /* iconv command */ buffer[8192], /* Line buffer */ *id, /* ID string */ *str; /* Translation string */ int count; /* Number of messages converted */ if (argc != 3) { puts("Usage: strings2po filename.strings filename.po"); return (1); } /* * Cheat by using iconv to convert the .strings file from UTF-16 to UTF-8 * which is what we need for the .po file (and it makes things a lot * simpler...) */ snprintf(iconv, sizeof(iconv), "iconv -f utf-16 -t utf-8 '%s'", argv[1]); if ((strings = popen(iconv, "r")) == NULL) { perror(argv[1]); return (1); } if ((po = fopen(argv[2], "w")) == NULL) { perror(argv[2]); pclose(strings); return (1); } count = 0; while (read_strings(strings, buffer, sizeof(buffer), &id, &str)) { count ++; write_po(po, "msgid", id); write_po(po, "msgstr", str); } pclose(strings); fclose(po); printf("%s: %d messages.\n", argv[2], count); return (0); } /* * 'read_strings()' - Read a line from a .strings file. */ static int /* O - 1 on success, 0 on failure */ read_strings(FILE *strings, /* I - .strings file */ char *buffer, /* I - Line buffer */ size_t bufsize, /* I - Size of line buffer */ char **id, /* O - Pointer to ID string */ char **str) /* O - Pointer to translation string */ { char *bufptr; /* Pointer into buffer */ while (fgets(buffer, (int)bufsize, strings)) { if (buffer[0] != '\"') continue; *id = buffer + 1; for (bufptr = buffer + 1; *bufptr && *bufptr != '\"'; bufptr ++) if (*bufptr == '\\') bufptr ++; if (*bufptr != '\"') continue; *bufptr++ = '\0'; while (*bufptr && *bufptr != '\"') bufptr ++; if (!*bufptr) continue; bufptr ++; *str = bufptr; for (; *bufptr && *bufptr != '\"'; bufptr ++) if (*bufptr == '\\') bufptr ++; if (*bufptr != '\"') continue; *bufptr = '\0'; return (1); } return (0); } /* * 'write_po()' - Write a line to the .po file. */ static void write_po(FILE *po, /* I - .po file */ const char *what, /* I - Type of string */ const char *s) /* I - String to write */ { fprintf(po, "%s \"%s\"\n", what, s); } cups-2.2.7/filter/api-raster.header000664 000765 000024 00000001717 13255074424 017667 0ustar00msweetstaff000000 000000

    Raster API

    Header cups/raster.h
    Library -lcupsimage
    See Also Programming: Introduction to CUPS Programming
    Programming: CUPS API
    Programming: PPD API
    References: CUPS PPD Specification
    cups-2.2.7/filter/api-raster.shtml000664 000765 000024 00000014235 13255074424 017565 0ustar00msweetstaff000000 000000

    Overview

    The CUPS raster API provides a standard interface for reading and writing CUPS raster streams which are used for printing to raster printers. Because the raster format is updated from time to time, it is important to use this API to avoid incompatibilities with newer versions of CUPS.

    Two kinds of CUPS filters use the CUPS raster API - raster image processor (RIP) filters such as pstoraster and cgpdftoraster (macOS) that produce CUPS raster files and printer driver filters that convert CUPS raster files into a format usable by the printer. Printer driver filters are by far the most common.

    CUPS raster files (application/vnd.cups-raster) consists of a stream of raster page descriptions produced by one of the RIP filters such as pstoraster, imagetoraster, or cgpdftoraster. CUPS raster files are referred to using the cups_raster_t type and are opened using the cupsRasterOpen function. For example, to read raster data from the standard input, open file descriptor 0:

    #include <cups/raster.h>
    
    cups_raster_t *ras = cupsRasterOpen(0, CUPS_RASTER_READ);
    

    Each page of data begins with a page dictionary structure called cups_page_header2_t. This structure contains the colorspace, bits per color, media size, media type, hardware resolution, and so forth used for the page.

    Note:

    Do not confuse the colorspace in the page header with the PPD ColorModel keyword. ColorModel refers to the general type of color used for a device (Gray, RGB, CMYK, DeviceN) and is often used to select a particular colorspace for the page header along with the associate color profile. The page header colorspace (cupsColorSpace) describes both the type and organization of the color data, for example KCMY (black first) instead of CMYK and RGBA (RGB + alpha) instead of RGB.

    You read the page header using the cupsRasterReadHeader2 function:

    #include <cups/raster.h>
    
    cups_raster_t *ras = cupsRasterOpen(0, CUPS_RASTER_READ);
    cups_page_header2_t header;
    
    while (cupsRasterReadHeader2(ras, &header))
    {
      /* setup this page */
    
      /* read raster data */
    
      /* finish this page */
    }
    

    After the page dictionary comes the page data which is a full-resolution, possibly compressed bitmap representing the page in the printer's output colorspace. You read uncompressed raster data using the cupsRasterReadPixels function. A for loop is normally used to read the page one line at a time:

    #include <cups/raster.h>
    
    cups_raster_t *ras = cupsRasterOpen(0, CUPS_RASTER_READ);
    cups_page_header2_t header;
    int page = 0;
    int y;
    char *buffer;
    
    while (cupsRasterReadHeader2(ras, &header))
    {
      /* setup this page */
      page ++;
      fprintf(stderr, "PAGE: %d %d\n", page, header.NumCopies);
    
      /* allocate memory for 1 line */
      buffer = malloc(header.cupsBytesPerLine);
    
      /* read raster data */
      for (y = 0; y < header.cupsHeight; y ++)
      {
        if (cupsRasterReadPixels(ras, buffer, header.cupsBytesPerLine) == 0)
          break;
    
        /* write raster data to printer on stdout */
      }
    
      /* finish this page */
    }
    

    When you are done reading the raster data, call the cupsRasterClose function to free the memory used to read the raster file:

    cups_raster_t *ras;
    
    cupsRasterClose(ras);
    

    Functions by Task

    Opening and Closing Raster Streams

    Reading Raster Streams

    Writing Raster Streams

    cups-2.2.7/filter/commandtops.c000664 000765 000024 00000027032 13255074424 017134 0ustar00msweetstaff000000 000000 /* * PostScript command filter for CUPS. * * Copyright 2008-2014 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include /* * Local functions... */ static int auto_configure(ppd_file_t *ppd, const char *user); static void begin_ps(ppd_file_t *ppd, const char *user); static void end_ps(ppd_file_t *ppd); static void print_self_test_page(ppd_file_t *ppd, const char *user); static void report_levels(ppd_file_t *ppd, const char *user); /* * 'main()' - Process a CUPS command file. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int status = 0; /* Exit status */ cups_file_t *fp; /* Command file */ char line[1024], /* Line from file */ *value; /* Value on line */ int linenum; /* Line number in file */ ppd_file_t *ppd; /* PPD file */ /* * Check for valid arguments... */ if (argc < 6 || argc > 7) { /* * We don't have the correct number of arguments; write an error message * and return. */ _cupsLangPrintf(stderr, _("Usage: %s job-id user title copies options [file]"), argv[0]); return (1); } /* * Open the PPD file... */ if ((ppd = ppdOpenFile(getenv("PPD"))) == NULL) { fputs("ERROR: Unable to open PPD file!\n", stderr); return (1); } /* * Open the command file as needed... */ if (argc == 7) { if ((fp = cupsFileOpen(argv[6], "r")) == NULL) { perror("ERROR: Unable to open command file - "); return (1); } } else fp = cupsFileStdin(); /* * Read the commands from the file and send the appropriate commands... */ linenum = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { /* * Parse the command... */ if (!_cups_strcasecmp(line, "AutoConfigure")) status |= auto_configure(ppd, argv[2]); else if (!_cups_strcasecmp(line, "PrintSelfTestPage")) print_self_test_page(ppd, argv[2]); else if (!_cups_strcasecmp(line, "ReportLevels")) report_levels(ppd, argv[2]); else { _cupsLangPrintFilter(stderr, "ERROR", _("Invalid printer command \"%s\"."), line); status = 1; } } return (status); } /* * 'auto_configure()' - Automatically configure the printer using PostScript * query commands and/or SNMP lookups. */ static int /* O - Exit status */ auto_configure(ppd_file_t *ppd, /* I - PPD file */ const char *user) /* I - Printing user */ { int status = 0; /* Exit status */ ppd_option_t *option; /* Current option in PPD */ ppd_attr_t *attr; /* Query command attribute */ const char *valptr; /* Pointer into attribute value */ char buffer[1024], /* String buffer */ *bufptr; /* Pointer into buffer */ ssize_t bytes; /* Number of bytes read */ int datalen; /* Side-channel data length */ /* * See if the backend supports bidirectional I/O... */ datalen = 1; if (cupsSideChannelDoRequest(CUPS_SC_CMD_GET_BIDI, buffer, &datalen, 30.0) != CUPS_SC_STATUS_OK || buffer[0] != CUPS_SC_BIDI_SUPPORTED) { fputs("DEBUG: Unable to auto-configure PostScript Printer - no " "bidirectional I/O available!\n", stderr); return (1); } /* * Put the printer in PostScript mode... */ begin_ps(ppd, user); /* * (STR #4028) * * As a lot of PPDs contain bad PostScript query code, we need to prevent one * bad query sequence from affecting all auto-configuration. The following * error handler allows us to log PostScript errors to cupsd. */ puts("/cups_handleerror {\n" " $error /newerror false put\n" " (:PostScript error in \") print cups_query_keyword print (\": ) " "print\n" " $error /errorname get 128 string cvs print\n" " (; offending command:) print $error /command get 128 string cvs " "print (\n) print flush\n" "} bind def\n" "errordict /timeout {} put\n" "/cups_query_keyword (?Unknown) def\n"); fflush(stdout); /* * Wait for the printer to become connected... */ do { sleep(1); datalen = 1; } while (cupsSideChannelDoRequest(CUPS_SC_CMD_GET_CONNECTED, buffer, &datalen, 5.0) == CUPS_SC_STATUS_OK && !buffer[0]); /* * Then loop through every option in the PPD file and ask for the current * value... */ fputs("DEBUG: Auto-configuring PostScript printer...\n", stderr); for (option = ppdFirstOption(ppd); option; option = ppdNextOption(ppd)) { /* * See if we have a query command for this option... */ snprintf(buffer, sizeof(buffer), "?%s", option->keyword); if ((attr = ppdFindAttr(ppd, buffer, NULL)) == NULL || !attr->value) { fprintf(stderr, "DEBUG: Skipping %s option...\n", option->keyword); continue; } /* * Send the query code to the printer... */ fprintf(stderr, "DEBUG: Querying %s...\n", option->keyword); for (bufptr = buffer, valptr = attr->value; *valptr; valptr ++) { /* * Log the query code, breaking at newlines... */ if (*valptr == '\n') { *bufptr = '\0'; fprintf(stderr, "DEBUG: %s\\n\n", buffer); bufptr = buffer; } else if (*valptr < ' ') { if (bufptr >= (buffer + sizeof(buffer) - 4)) { *bufptr = '\0'; fprintf(stderr, "DEBUG: %s\n", buffer); bufptr = buffer; } if (*valptr == '\r') { *bufptr++ = '\\'; *bufptr++ = 'r'; } else if (*valptr == '\t') { *bufptr++ = '\\'; *bufptr++ = 't'; } else { *bufptr++ = '\\'; *bufptr++ = '0' + ((*valptr / 64) & 7); *bufptr++ = '0' + ((*valptr / 8) & 7); *bufptr++ = '0' + (*valptr & 7); } } else { if (bufptr >= (buffer + sizeof(buffer) - 1)) { *bufptr = '\0'; fprintf(stderr, "DEBUG: %s\n", buffer); bufptr = buffer; } *bufptr++ = *valptr; } } if (bufptr > buffer) { *bufptr = '\0'; fprintf(stderr, "DEBUG: %s\n", buffer); } printf("/cups_query_keyword (?%s) def\n", option->keyword); /* Set keyword for error reporting */ fputs("{ (", stdout); for (valptr = attr->value; *valptr; valptr ++) { if (*valptr == '(' || *valptr == ')' || *valptr == '\\') putchar('\\'); putchar(*valptr); } fputs(") cvx exec } stopped { cups_handleerror } if clear\n", stdout); /* Send query code */ fflush(stdout); datalen = 0; cupsSideChannelDoRequest(CUPS_SC_CMD_DRAIN_OUTPUT, buffer, &datalen, 5.0); /* * Read the response data... */ bufptr = buffer; buffer[0] = '\0'; while ((bytes = cupsBackChannelRead(bufptr, sizeof(buffer) - (size_t)(bufptr - buffer) - 1, 10.0)) > 0) { /* * No newline at the end? Go on reading ... */ bufptr += bytes; *bufptr = '\0'; if (bytes == 0 || (bufptr > buffer && bufptr[-1] != '\r' && bufptr[-1] != '\n')) continue; /* * Trim whitespace and control characters from both ends... */ bytes = bufptr - buffer; for (bufptr --; bufptr >= buffer; bufptr --) if (isspace(*bufptr & 255) || iscntrl(*bufptr & 255)) *bufptr = '\0'; else break; for (bufptr = buffer; isspace(*bufptr & 255) || iscntrl(*bufptr & 255); bufptr ++); if (bufptr > buffer) { _cups_strcpy(buffer, bufptr); bufptr = buffer; } fprintf(stderr, "DEBUG: Got %d bytes.\n", (int)bytes); /* * Skip blank lines... */ if (!buffer[0]) continue; /* * Check the response... */ if ((bufptr = strchr(buffer, ':')) != NULL) { /* * PostScript code for this option in the PPD is broken; show the * interpreter's error message that came back... */ fprintf(stderr, "DEBUG%s\n", bufptr); break; } /* * Verify the result is a valid option choice... */ if (!ppdFindChoice(option, buffer)) { if (!strcasecmp(buffer, "Unknown")) break; bufptr = buffer; buffer[0] = '\0'; continue; } /* * Write out the result and move on to the next option... */ fprintf(stderr, "PPD: Default%s=%s\n", option->keyword, buffer); break; } /* * Printer did not answer this option's query */ if (bytes <= 0) { fprintf(stderr, "DEBUG: No answer to query for option %s within 10 seconds.\n", option->keyword); status = 1; } } /* * Finish the job... */ fflush(stdout); end_ps(ppd); /* * Return... */ if (status) _cupsLangPrintFilter(stderr, "WARNING", _("Unable to configure printer options.")); return (0); } /* * 'begin_ps()' - Send the standard PostScript prolog. */ static void begin_ps(ppd_file_t *ppd, /* I - PPD file */ const char *user) /* I - Username */ { (void)user; if (ppd->jcl_begin) { fputs(ppd->jcl_begin, stdout); fputs(ppd->jcl_ps, stdout); } puts("%!"); puts("userdict dup(\\004)cvn{}put (\\004\\004)cvn{}put\n"); fflush(stdout); } /* * 'end_ps()' - Send the standard PostScript trailer. */ static void end_ps(ppd_file_t *ppd) /* I - PPD file */ { if (ppd->jcl_end) fputs(ppd->jcl_end, stdout); else putchar(0x04); fflush(stdout); } /* * 'print_self_test_page()' - Print a self-test page. */ static void print_self_test_page(ppd_file_t *ppd, /* I - PPD file */ const char *user) /* I - Printing user */ { /* * Put the printer in PostScript mode... */ begin_ps(ppd, user); /* * Send a simple file the draws a box around the imageable area and shows * the product/interpreter information... */ puts("\r%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" "%%%%%%%%%%%%%\n" "\r%%%% If you can read this, you are using the wrong driver for your " "printer. %%%%\n" "\r%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" "%%%%%%%%%%%%%\n" "0 setgray\n" "2 setlinewidth\n" "initclip newpath clippath gsave stroke grestore pathbbox\n" "exch pop exch pop exch 9 add exch 9 sub moveto\n" "/Courier findfont 12 scalefont setfont\n" "0 -12 rmoveto gsave product show grestore\n" "0 -12 rmoveto gsave version show ( ) show revision 20 string cvs show " "grestore\n" "0 -12 rmoveto gsave serialnumber 20 string cvs show grestore\n" "showpage"); /* * Finish the job... */ end_ps(ppd); } /* * 'report_levels()' - Report supply levels. */ static void report_levels(ppd_file_t *ppd, /* I - PPD file */ const char *user) /* I - Printing user */ { /* * Put the printer in PostScript mode... */ begin_ps(ppd, user); /* * Don't bother sending any additional PostScript commands, since we just * want the backend to have enough time to collect the supply info. */ /* * Finish the job... */ end_ps(ppd); } cups-2.2.7/filter/common.c000664 000765 000024 00000027253 13255074424 016105 0ustar00msweetstaff000000 000000 /* * Common filter routines for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "common.h" #include /* * Globals... */ int Orientation = 0, /* 0 = portrait, 1 = landscape, etc. */ Duplex = 0, /* Duplexed? */ LanguageLevel = 1, /* Language level of printer */ ColorDevice = 1; /* Do color text? */ float PageLeft = 18.0f, /* Left margin */ PageRight = 594.0f, /* Right margin */ PageBottom = 36.0f, /* Bottom margin */ PageTop = 756.0f, /* Top margin */ PageWidth = 612.0f, /* Total page width */ PageLength = 792.0f; /* Total page length */ /* * 'SetCommonOptions()' - Set common filter options for media size, etc. */ ppd_file_t * /* O - PPD file */ SetCommonOptions( int num_options, /* I - Number of options */ cups_option_t *options, /* I - Options */ int change_size) /* I - Change page size? */ { ppd_file_t *ppd; /* PPD file */ ppd_size_t *pagesize; /* Current page size */ const char *val; /* Option value */ #ifdef LC_TIME setlocale(LC_TIME, ""); #endif /* LC_TIME */ ppd = ppdOpenFile(getenv("PPD")); ppdMarkDefaults(ppd); cupsMarkOptions(ppd, num_options, options); if ((pagesize = ppdPageSize(ppd, NULL)) != NULL) { PageWidth = pagesize->width; PageLength = pagesize->length; PageTop = pagesize->top; PageBottom = pagesize->bottom; PageLeft = pagesize->left; PageRight = pagesize->right; fprintf(stderr, "DEBUG: Page = %.0fx%.0f; %.0f,%.0f to %.0f,%.0f\n", PageWidth, PageLength, PageLeft, PageBottom, PageRight, PageTop); } if (ppd != NULL) { ColorDevice = ppd->color_device; LanguageLevel = ppd->language_level; } if ((val = cupsGetOption("landscape", num_options, options)) != NULL) { if (_cups_strcasecmp(val, "no") != 0 && _cups_strcasecmp(val, "off") != 0 && _cups_strcasecmp(val, "false") != 0) { if (ppd && ppd->landscape > 0) Orientation = 1; else Orientation = 3; } } else if ((val = cupsGetOption("orientation-requested", num_options, options)) != NULL) { /* * Map IPP orientation values to 0 to 3: * * 3 = 0 degrees = 0 * 4 = 90 degrees = 1 * 5 = -90 degrees = 3 * 6 = 180 degrees = 2 */ Orientation = atoi(val) - 3; if (Orientation >= 2) Orientation ^= 1; } if ((val = cupsGetOption("page-left", num_options, options)) != NULL) { switch (Orientation & 3) { case 0 : PageLeft = (float)atof(val); break; case 1 : PageBottom = (float)atof(val); break; case 2 : PageRight = PageWidth - (float)atof(val); break; case 3 : PageTop = PageLength - (float)atof(val); break; } } if ((val = cupsGetOption("page-right", num_options, options)) != NULL) { switch (Orientation & 3) { case 0 : PageRight = PageWidth - (float)atof(val); break; case 1 : PageTop = PageLength - (float)atof(val); break; case 2 : PageLeft = (float)atof(val); break; case 3 : PageBottom = (float)atof(val); break; } } if ((val = cupsGetOption("page-bottom", num_options, options)) != NULL) { switch (Orientation & 3) { case 0 : PageBottom = (float)atof(val); break; case 1 : PageLeft = (float)atof(val); break; case 2 : PageTop = PageLength - (float)atof(val); break; case 3 : PageRight = PageWidth - (float)atof(val); break; } } if ((val = cupsGetOption("page-top", num_options, options)) != NULL) { switch (Orientation & 3) { case 0 : PageTop = PageLength - (float)atof(val); break; case 1 : PageRight = PageWidth - (float)atof(val); break; case 2 : PageBottom = (float)atof(val); break; case 3 : PageLeft = (float)atof(val); break; } } if (change_size) UpdatePageVars(); if (ppdIsMarked(ppd, "Duplex", "DuplexNoTumble") || ppdIsMarked(ppd, "Duplex", "DuplexTumble") || ppdIsMarked(ppd, "JCLDuplex", "DuplexNoTumble") || ppdIsMarked(ppd, "JCLDuplex", "DuplexTumble") || ppdIsMarked(ppd, "EFDuplex", "DuplexNoTumble") || ppdIsMarked(ppd, "EFDuplex", "DuplexTumble") || ppdIsMarked(ppd, "KD03Duplex", "DuplexNoTumble") || ppdIsMarked(ppd, "KD03Duplex", "DuplexTumble")) Duplex = 1; return (ppd); } /* * 'UpdatePageVars()' - Update the page variables for the orientation. */ void UpdatePageVars(void) { float temp; /* Swapping variable */ switch (Orientation & 3) { case 0 : /* Portait */ break; case 1 : /* Landscape */ temp = PageLeft; PageLeft = PageBottom; PageBottom = temp; temp = PageRight; PageRight = PageTop; PageTop = temp; temp = PageWidth; PageWidth = PageLength; PageLength = temp; break; case 2 : /* Reverse Portrait */ temp = PageWidth - PageLeft; PageLeft = PageWidth - PageRight; PageRight = temp; temp = PageLength - PageBottom; PageBottom = PageLength - PageTop; PageTop = temp; break; case 3 : /* Reverse Landscape */ temp = PageWidth - PageLeft; PageLeft = PageWidth - PageRight; PageRight = temp; temp = PageLength - PageBottom; PageBottom = PageLength - PageTop; PageTop = temp; temp = PageLeft; PageLeft = PageBottom; PageBottom = temp; temp = PageRight; PageRight = PageTop; PageTop = temp; temp = PageWidth; PageWidth = PageLength; PageLength = temp; break; } } /* * 'WriteCommon()' - Write common procedures... */ void WriteCommon(void) { puts("% x y w h ESPrc - Clip to a rectangle.\n" "userdict/ESPrc/rectclip where{pop/rectclip load}\n" "{{newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto\n" "neg 0 rlineto closepath clip newpath}bind}ifelse put"); puts("% x y w h ESPrf - Fill a rectangle.\n" "userdict/ESPrf/rectfill where{pop/rectfill load}\n" "{{gsave newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto\n" "neg 0 rlineto closepath fill grestore}bind}ifelse put"); puts("% x y w h ESPrs - Stroke a rectangle.\n" "userdict/ESPrs/rectstroke where{pop/rectstroke load}\n" "{{gsave newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto\n" "neg 0 rlineto closepath stroke grestore}bind}ifelse put"); } /* * 'WriteLabelProlog()' - Write the prolog with the classification * and page label. */ void WriteLabelProlog(const char *label, /* I - Page label */ float bottom, /* I - Bottom position in points */ float top, /* I - Top position in points */ float width) /* I - Width in points */ { const char *classification; /* CLASSIFICATION environment variable */ const char *ptr; /* Temporary string pointer */ /* * First get the current classification... */ if ((classification = getenv("CLASSIFICATION")) == NULL) classification = ""; if (strcmp(classification, "none") == 0) classification = ""; /* * If there is nothing to show, bind an empty 'write labels' procedure * and return... */ if (!classification[0] && (label == NULL || !label[0])) { puts("userdict/ESPwl{}bind put"); return; } /* * Set the classification + page label string... */ printf("userdict"); if (strcmp(classification, "confidential") == 0) printf("/ESPpl(CONFIDENTIAL"); else if (strcmp(classification, "classified") == 0) printf("/ESPpl(CLASSIFIED"); else if (strcmp(classification, "secret") == 0) printf("/ESPpl(SECRET"); else if (strcmp(classification, "topsecret") == 0) printf("/ESPpl(TOP SECRET"); else if (strcmp(classification, "unclassified") == 0) printf("/ESPpl(UNCLASSIFIED"); else { printf("/ESPpl("); for (ptr = classification; *ptr; ptr ++) if (*ptr < 32 || *ptr > 126) printf("\\%03o", *ptr); else if (*ptr == '_') putchar(' '); else { if (*ptr == '(' || *ptr == ')' || *ptr == '\\') putchar('\\'); putchar(*ptr); } } if (label) { if (classification[0]) printf(" - "); /* * Quote the label string as needed... */ for (ptr = label; *ptr; ptr ++) if (*ptr < 32 || *ptr > 126) printf("\\%03o", *ptr); else { if (*ptr == '(' || *ptr == ')' || *ptr == '\\') putchar('\\'); putchar(*ptr); } } puts(")put"); /* * Then get a 14 point Helvetica-Bold font... */ puts("userdict/ESPpf /Helvetica-Bold findfont 14 scalefont put"); /* * Finally, the procedure to write the labels on the page... */ puts("userdict/ESPwl{"); puts(" ESPpf setfont"); printf(" ESPpl stringwidth pop dup 12 add exch -0.5 mul %.0f add\n", width * 0.5f); puts(" 1 setgray"); printf(" dup 6 sub %.0f 3 index 20 ESPrf\n", bottom - 2.0); printf(" dup 6 sub %.0f 3 index 20 ESPrf\n", top - 18.0); puts(" 0 setgray"); printf(" dup 6 sub %.0f 3 index 20 ESPrs\n", bottom - 2.0); printf(" dup 6 sub %.0f 3 index 20 ESPrs\n", top - 18.0); printf(" dup %.0f moveto ESPpl show\n", bottom + 2.0); printf(" %.0f moveto ESPpl show\n", top - 14.0); puts("pop"); puts("}bind put"); } /* * 'WriteLabels()' - Write the actual page labels. */ void WriteLabels(int orient) /* I - Orientation of the page */ { float width, /* Width of page */ length; /* Length of page */ puts("gsave"); if ((orient ^ Orientation) & 1) { width = PageLength; length = PageWidth; } else { width = PageWidth; length = PageLength; } switch (orient & 3) { case 1 : /* Landscape */ printf("%.1f 0.0 translate 90 rotate\n", length); break; case 2 : /* Reverse Portrait */ printf("%.1f %.1f translate 180 rotate\n", width, length); break; case 3 : /* Reverse Landscape */ printf("0.0 %.1f translate -90 rotate\n", width); break; } puts("ESPwl"); puts("grestore"); } /* * 'WriteTextComment()' - Write a DSC text comment. */ void WriteTextComment(const char *name, /* I - Comment name ("Title", etc.) */ const char *value) /* I - Comment value */ { int len; /* Current line length */ /* * DSC comments are of the form: * * %%name: value * * The name and value must be limited to 7-bit ASCII for most printers, * so we escape all non-ASCII and ASCII control characters as described * in the Adobe Document Structuring Conventions specification. */ printf("%%%%%s: (", name); len = 5 + (int)strlen(name); while (*value) { if (*value < ' ' || *value >= 127) { /* * Escape this character value... */ if (len >= 251) /* Keep line < 254 chars */ break; printf("\\%03o", *value & 255); len += 4; } else if (*value == '\\') { /* * Escape the backslash... */ if (len >= 253) /* Keep line < 254 chars */ break; putchar('\\'); putchar('\\'); len += 2; } else { /* * Put this character literally... */ if (len >= 254) /* Keep line < 254 chars */ break; putchar(*value); len ++; } value ++; } puts(")"); } cups-2.2.7/filter/common.h000664 000765 000024 00000003216 13255074424 016103 0ustar00msweetstaff000000 000000 /* * Common filter definitions for CUPS. * * Copyright 2007-2010 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include #include #include /* * C++ magic... */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Globals... */ extern int Orientation, /* 0 = portrait, 1 = landscape, etc. */ Duplex, /* Duplexed? */ LanguageLevel, /* Language level of printer */ ColorDevice; /* Do color text? */ extern float PageLeft, /* Left margin */ PageRight, /* Right margin */ PageBottom, /* Bottom margin */ PageTop, /* Top margin */ PageWidth, /* Total page width */ PageLength; /* Total page length */ /* * Prototypes... */ extern ppd_file_t *SetCommonOptions(int num_options, cups_option_t *options, int change_size); extern void UpdatePageVars(void); extern void WriteCommon(void); extern void WriteLabelProlog(const char *label, float bottom, float top, float width); extern void WriteLabels(int orient); extern void WriteTextComment(const char *name, const char *value); /* * C++ magic... */ #ifdef __cplusplus } #endif /* __cplusplus */ cups-2.2.7/filter/Dependencies000664 000765 000024 00000010074 13255074424 016753 0ustar00msweetstaff000000 000000 error.o: error.c ../cups/raster-private.h ../cups/raster.h ../cups/cups.h \ ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h \ ../cups/array.h ../cups/language.h ../cups/pwg.h \ ../cups/debug-private.h ../cups/string-private.h ../config.h interpret.o: interpret.c ../cups/raster-private.h ../cups/raster.h \ ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.h \ ../cups/http.h ../cups/array.h ../cups/language.h ../cups/pwg.h \ ../cups/debug-private.h ../cups/string-private.h ../config.h \ ../cups/ppd.h raster.o: raster.c ../cups/raster-private.h ../cups/raster.h \ ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.h \ ../cups/http.h ../cups/array.h ../cups/language.h ../cups/pwg.h \ ../cups/debug-private.h ../cups/string-private.h ../config.h commandtops.o: commandtops.c ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/ppd.h ../cups/raster.h ../cups/sidechannel.h gziptoany.o: gziptoany.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h common.o: common.c common.h ../cups/string-private.h ../config.h \ ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.h \ ../cups/http.h ../cups/array.h ../cups/language.h ../cups/pwg.h \ ../cups/ppd.h ../cups/raster.h pstops.o: pstops.c common.h ../cups/string-private.h ../config.h \ ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.h \ ../cups/http.h ../cups/array.h ../cups/language.h ../cups/pwg.h \ ../cups/ppd.h ../cups/raster.h ../cups/language-private.h \ ../cups/transcode.h rasterbench.o: rasterbench.c ../config.h ../cups/raster.h ../cups/cups.h \ ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h \ ../cups/array.h ../cups/language.h ../cups/pwg.h rastertoepson.o: rastertoepson.c ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h ../cups/ppd.h ../cups/raster.h \ ../cups/string-private.h ../config.h ../cups/language-private.h \ ../cups/transcode.h rastertohp.o: rastertohp.c ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h ../cups/ppd.h ../cups/raster.h \ ../cups/string-private.h ../config.h ../cups/language-private.h \ ../cups/transcode.h rastertolabel.o: rastertolabel.c ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h ../cups/ppd.h ../cups/raster.h \ ../cups/string-private.h ../config.h ../cups/language-private.h \ ../cups/transcode.h rastertopwg.o: rastertopwg.c ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/ppd-private.h ../cups/ppd.h ../cups/raster.h testraster.o: testraster.c ../cups/raster-private.h ../cups/raster.h \ ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.h \ ../cups/http.h ../cups/array.h ../cups/language.h ../cups/pwg.h \ ../cups/debug-private.h ../cups/string-private.h ../config.h \ ../cups/ppd.h cups-2.2.7/filter/error.c000664 000765 000024 00000012133 13255074424 015735 0ustar00msweetstaff000000 000000 /* * Raster error handling for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include /* * Local structures... */ typedef struct _cups_raster_error_s /**** Error buffer structure ****/ { char *start, /* Start of buffer */ *current, /* Current position in buffer */ *end; /* End of buffer */ } _cups_raster_error_t; /* * Local functions... */ static _cups_raster_error_t *get_error_buffer(void); /* * '_cupsRasterAddError()' - Add an error message to the error buffer. */ void _cupsRasterAddError(const char *f, /* I - Printf-style error message */ ...) /* I - Additional arguments as needed */ { _cups_raster_error_t *buf = get_error_buffer(); /* Error buffer */ va_list ap; /* Pointer to additional arguments */ char s[2048]; /* Message string */ ssize_t bytes; /* Bytes in message string */ DEBUG_printf(("_cupsRasterAddError(f=\"%s\", ...)", f)); va_start(ap, f); bytes = vsnprintf(s, sizeof(s), f, ap); va_end(ap); if (bytes <= 0) return; DEBUG_printf(("1_cupsRasterAddError: %s", s)); bytes ++; if ((size_t)bytes >= sizeof(s)) return; if (bytes > (ssize_t)(buf->end - buf->current)) { /* * Allocate more memory... */ char *temp; /* New buffer */ size_t size; /* Size of buffer */ size = (size_t)(buf->end - buf->start + 2 * bytes + 1024); if (buf->start) temp = realloc(buf->start, size); else temp = malloc(size); if (!temp) return; /* * Update pointers... */ buf->end = temp + size; buf->current = temp + (buf->current - buf->start); buf->start = temp; } /* * Append the message to the end of the current string... */ memcpy(buf->current, s, (size_t)bytes); buf->current += bytes - 1; } /* * '_cupsRasterClearError()' - Clear the error buffer. */ void _cupsRasterClearError(void) { _cups_raster_error_t *buf = get_error_buffer(); /* Error buffer */ buf->current = buf->start; if (buf->start) *(buf->start) = '\0'; } /* * 'cupsRasterErrorString()' - Return the last error from a raster function. * * If there are no recent errors, NULL is returned. * * @since CUPS 1.3/macOS 10.5@ */ const char * /* O - Last error */ cupsRasterErrorString(void) { _cups_raster_error_t *buf = get_error_buffer(); /* Error buffer */ if (buf->current == buf->start) return (NULL); else return (buf->start); } #ifdef HAVE_PTHREAD_H /* * Implement per-thread globals... */ # include /* * Local globals... */ static pthread_key_t raster_key = 0; /* Thread local storage key */ static pthread_once_t raster_key_once = PTHREAD_ONCE_INIT; /* One-time initialization object */ /* * Local functions... */ static void raster_init(void); static void raster_destructor(void *value); /* * 'get_error_buffer()' - Return a pointer to thread local storage. */ _cups_raster_error_t * /* O - Pointer to error buffer */ get_error_buffer(void) { _cups_raster_error_t *buf; /* Pointer to error buffer */ /* * Initialize the global data exactly once... */ DEBUG_puts("3get_error_buffer()"); pthread_once(&raster_key_once, raster_init); /* * See if we have allocated the data yet... */ if ((buf = (_cups_raster_error_t *)pthread_getspecific(raster_key)) == NULL) { DEBUG_puts("4get_error_buffer: allocating memory for thread."); /* * No, allocate memory as set the pointer for the key... */ buf = calloc(1, sizeof(_cups_raster_error_t)); pthread_setspecific(raster_key, buf); DEBUG_printf(("4get_error_buffer: buf=%p", (void *)buf)); } /* * Return the pointer to the data... */ return (buf); } /* * 'raster_init()' - Initialize error buffer once. */ static void raster_init(void) { pthread_key_create(&raster_key, raster_destructor); DEBUG_printf(("3raster_init(): raster_key=%x(%u)", (unsigned)raster_key, (unsigned)raster_key)); } /* * 'raster_destructor()' - Free memory allocated by get_error_buffer(). */ static void raster_destructor(void *value) /* I - Data to free */ { _cups_raster_error_t *buf = (_cups_raster_error_t *)value; /* Error buffer */ DEBUG_printf(("3raster_destructor(value=%p)", value)); if (buf->start) free(buf->start); free(value); } #else /* * Implement static globals... */ /* * 'get_error_buffer()' - Return a pointer to thread local storage. */ _cups_raster_error_t * /* O - Pointer to error buffer */ get_error_buffer(void) { static _cups_raster_error_t buf = { 0, 0, 0 }; /* Error buffer */ return (&buf); } #endif /* HAVE_PTHREAD_H */ cups-2.2.7/filter/gziptoany.c000664 000765 000024 00000004504 13255074424 016633 0ustar00msweetstaff000000 000000 /* * GZIP/raw pre-filter for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1993-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include /* * 'main()' - Copy (and uncompress) files to stdout. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { cups_file_t *fp; /* File */ char buffer[8192]; /* Data buffer */ ssize_t bytes; /* Number of bytes read/written */ int copies; /* Number of copies */ /* * Check command-line... */ if (argc < 6 || argc > 7) { _cupsLangPrintf(stderr, _("Usage: %s job-id user title copies options [file]"), argv[0]); return (1); } /* * Get the copy count; if we have no final content type, this is a * raw queue or raw print file, so we need to make copies... */ if (!getenv("FINAL_CONTENT_TYPE")) copies = atoi(argv[4]); else copies = 1; /* * Open the file... */ if (argc == 6) { copies = 1; fp = cupsFileStdin(); } else if ((fp = cupsFileOpen(argv[6], "r")) == NULL) { fprintf(stderr, "DEBUG: Unable to open \"%s\".\n", argv[6]); _cupsLangPrintError("ERROR", _("Unable to open print file")); return (1); } /* * Copy the file to stdout... */ while (copies > 0) { if (!getenv("FINAL_CONTENT_TYPE")) fputs("PAGE: 1 1\n", stderr); cupsFileRewind(fp); while ((bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0) if (write(1, buffer, (size_t)bytes) < bytes) { _cupsLangPrintFilter(stderr, "ERROR", _("Unable to write uncompressed print data: %s"), strerror(errno)); if (argc == 7) cupsFileClose(fp); return (1); } copies --; } /* * Close the file and return... */ if (argc == 7) cupsFileClose(fp); return (0); } cups-2.2.7/filter/interpret.c000664 000765 000024 00000121425 13255074424 016625 0ustar00msweetstaff000000 000000 /* * PPD command interpreter for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1993-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include /* * Stack values for the PostScript mini-interpreter... */ typedef enum { CUPS_PS_NAME, CUPS_PS_NUMBER, CUPS_PS_STRING, CUPS_PS_BOOLEAN, CUPS_PS_NULL, CUPS_PS_START_ARRAY, CUPS_PS_END_ARRAY, CUPS_PS_START_DICT, CUPS_PS_END_DICT, CUPS_PS_START_PROC, CUPS_PS_END_PROC, CUPS_PS_CLEARTOMARK, CUPS_PS_COPY, CUPS_PS_DUP, CUPS_PS_INDEX, CUPS_PS_POP, CUPS_PS_ROLL, CUPS_PS_SETPAGEDEVICE, CUPS_PS_STOPPED, CUPS_PS_OTHER } _cups_ps_type_t; typedef struct { _cups_ps_type_t type; /* Object type */ union { int boolean; /* Boolean value */ char name[64]; /* Name value */ double number; /* Number value */ char other[64]; /* Other operator */ char string[64]; /* Sring value */ } value; /* Value */ } _cups_ps_obj_t; typedef struct { int num_objs, /* Number of objects on stack */ alloc_objs; /* Number of allocated objects */ _cups_ps_obj_t *objs; /* Objects in stack */ } _cups_ps_stack_t; /* * Local functions... */ static int cleartomark_stack(_cups_ps_stack_t *st); static int copy_stack(_cups_ps_stack_t *st, int count); static void delete_stack(_cups_ps_stack_t *st); static void error_object(_cups_ps_obj_t *obj); static void error_stack(_cups_ps_stack_t *st, const char *title); static _cups_ps_obj_t *index_stack(_cups_ps_stack_t *st, int n); static _cups_ps_stack_t *new_stack(void); static _cups_ps_obj_t *pop_stack(_cups_ps_stack_t *st); static _cups_ps_obj_t *push_stack(_cups_ps_stack_t *st, _cups_ps_obj_t *obj); static int roll_stack(_cups_ps_stack_t *st, int c, int s); static _cups_ps_obj_t *scan_ps(_cups_ps_stack_t *st, char **ptr); static int setpagedevice(_cups_ps_stack_t *st, cups_page_header2_t *h, int *preferred_bits); #ifdef DEBUG static void DEBUG_object(const char *prefix, _cups_ps_obj_t *obj); static void DEBUG_stack(const char *prefix, _cups_ps_stack_t *st); #endif /* DEBUG */ /* * 'cupsRasterInterpretPPD()' - Interpret PPD commands to create a page header. * * This function is used by raster image processing (RIP) filters like * cgpdftoraster and imagetoraster when writing CUPS raster data for a page. * It is not used by raster printer driver filters which only read CUPS * raster data. * * * @code cupsRasterInterpretPPD@ does not mark the options in the PPD using * the "num_options" and "options" arguments. Instead, mark the options with * @code cupsMarkOptions@ and @code ppdMarkOption@ prior to calling it - * this allows for per-page options without manipulating the options array. * * The "func" argument specifies an optional callback function that is * called prior to the computation of the final raster data. The function * can make changes to the @link cups_page_header2_t@ data as needed to use a * supported raster format and then returns 0 on success and -1 if the * requested attributes cannot be supported. * * * @code cupsRasterInterpretPPD@ supports a subset of the PostScript language. * Currently only the @code [@, @code ]@, @code <<@, @code >>@, @code {@, * @code }@, @code cleartomark@, @code copy@, @code dup@, @code index@, * @code pop@, @code roll@, @code setpagedevice@, and @code stopped@ operators * are supported. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 0 on success, -1 on failure */ cupsRasterInterpretPPD( cups_page_header2_t *h, /* O - Page header to create */ ppd_file_t *ppd, /* I - PPD file */ int num_options, /* I - Number of options */ cups_option_t *options, /* I - Options */ cups_interpret_cb_t func) /* I - Optional page header callback (@code NULL@ for none) */ { int status; /* Cummulative status */ char *code; /* Code to run */ const char *val; /* Option value */ ppd_size_t *size; /* Current size */ float left, /* Left position */ bottom, /* Bottom position */ right, /* Right position */ top, /* Top position */ temp1, temp2; /* Temporary variables for swapping */ int preferred_bits; /* Preferred bits per color */ /* * Range check input... */ _cupsRasterClearError(); if (!h) { _cupsRasterAddError("Page header cannot be NULL!\n"); return (-1); } /* * Reset the page header to the defaults... */ memset(h, 0, sizeof(cups_page_header2_t)); h->NumCopies = 1; h->PageSize[0] = 612; h->PageSize[1] = 792; h->HWResolution[0] = 100; h->HWResolution[1] = 100; h->cupsBitsPerColor = 1; h->cupsColorOrder = CUPS_ORDER_CHUNKED; h->cupsColorSpace = CUPS_CSPACE_K; h->cupsBorderlessScalingFactor = 1.0f; h->cupsPageSize[0] = 612.0f; h->cupsPageSize[1] = 792.0f; h->cupsImagingBBox[0] = 0.0f; h->cupsImagingBBox[1] = 0.0f; h->cupsImagingBBox[2] = 612.0f; h->cupsImagingBBox[3] = 792.0f; strlcpy(h->cupsPageSizeName, "Letter", sizeof(h->cupsPageSizeName)); #ifdef __APPLE__ /* * cupsInteger0 is also used for the total page count on macOS; set an * uncommon default value so we can tell if the driver is using cupsInteger0. */ h->cupsInteger[0] = 0x80000000; #endif /* __APPLE__ */ /* * Apply patches and options to the page header... */ status = 0; preferred_bits = 0; if (ppd) { /* * Apply any patch code (used to override the defaults...) */ if (ppd->patches) status |= _cupsRasterExecPS(h, &preferred_bits, ppd->patches); /* * Then apply printer options in the proper order... */ if ((code = ppdEmitString(ppd, PPD_ORDER_DOCUMENT, 0.0)) != NULL) { status |= _cupsRasterExecPS(h, &preferred_bits, code); free(code); } if ((code = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL) { status |= _cupsRasterExecPS(h, &preferred_bits, code); free(code); } if ((code = ppdEmitString(ppd, PPD_ORDER_PROLOG, 0.0)) != NULL) { status |= _cupsRasterExecPS(h, &preferred_bits, code); free(code); } if ((code = ppdEmitString(ppd, PPD_ORDER_PAGE, 0.0)) != NULL) { status |= _cupsRasterExecPS(h, &preferred_bits, code); free(code); } } /* * Allow option override for page scaling... */ if ((val = cupsGetOption("cupsBorderlessScalingFactor", num_options, options)) != NULL) { double sc = atof(val); /* Scale factor */ if (sc >= 0.1 && sc <= 2.0) h->cupsBorderlessScalingFactor = (float)sc; } /* * Get the margins for the current size... */ if ((size = ppdPageSize(ppd, NULL)) != NULL) { /* * Use the margins from the PPD file... */ left = size->left; bottom = size->bottom; right = size->right; top = size->top; strlcpy(h->cupsPageSizeName, size->name, sizeof(h->cupsPageSizeName)); h->cupsPageSize[0] = size->width; h->cupsPageSize[1] = size->length; } else { /* * Use the default margins... */ left = 0.0f; bottom = 0.0f; right = 612.0f; top = 792.0f; } /* * Handle orientation... */ switch (h->Orientation) { case CUPS_ORIENT_0 : default : /* Do nothing */ break; case CUPS_ORIENT_90 : temp1 = h->cupsPageSize[0]; h->cupsPageSize[0] = h->cupsPageSize[1]; h->cupsPageSize[1] = temp1; temp1 = left; temp2 = right; left = h->cupsPageSize[0] - top; right = h->cupsPageSize[0] - bottom; bottom = h->cupsPageSize[1] - temp1; top = h->cupsPageSize[1] - temp2; break; case CUPS_ORIENT_180 : temp1 = left; temp2 = bottom; left = h->cupsPageSize[0] - right; right = h->cupsPageSize[0] - temp1; bottom = h->cupsPageSize[1] - top; top = h->cupsPageSize[1] - temp2; break; case CUPS_ORIENT_270 : temp1 = h->cupsPageSize[0]; h->cupsPageSize[0] = h->cupsPageSize[1]; h->cupsPageSize[1] = temp1; temp1 = left; temp2 = right; left = bottom; right = top; bottom = h->cupsPageSize[1] - temp2; top = h->cupsPageSize[1] - temp1; break; } if (left > right) { temp1 = left; left = right; right = temp1; } if (bottom > top) { temp1 = bottom; bottom = top; top = temp1; } h->PageSize[0] = (unsigned)(h->cupsPageSize[0] * h->cupsBorderlessScalingFactor); h->PageSize[1] = (unsigned)(h->cupsPageSize[1] * h->cupsBorderlessScalingFactor); h->Margins[0] = (unsigned)(left * h->cupsBorderlessScalingFactor); h->Margins[1] = (unsigned)(bottom * h->cupsBorderlessScalingFactor); h->ImagingBoundingBox[0] = (unsigned)(left * h->cupsBorderlessScalingFactor); h->ImagingBoundingBox[1] = (unsigned)(bottom * h->cupsBorderlessScalingFactor); h->ImagingBoundingBox[2] = (unsigned)(right * h->cupsBorderlessScalingFactor); h->ImagingBoundingBox[3] = (unsigned)(top * h->cupsBorderlessScalingFactor); h->cupsImagingBBox[0] = (float)left; h->cupsImagingBBox[1] = (float)bottom; h->cupsImagingBBox[2] = (float)right; h->cupsImagingBBox[3] = (float)top; /* * Use the callback to validate the page header... */ if (func && (*func)(h, preferred_bits)) { _cupsRasterAddError("Page header callback returned error.\n"); return (-1); } /* * Check parameters... */ if (!h->HWResolution[0] || !h->HWResolution[1] || !h->PageSize[0] || !h->PageSize[1] || (h->cupsBitsPerColor != 1 && h->cupsBitsPerColor != 2 && h->cupsBitsPerColor != 4 && h->cupsBitsPerColor != 8 && h->cupsBitsPerColor != 16) || h->cupsBorderlessScalingFactor < 0.1 || h->cupsBorderlessScalingFactor > 2.0) { _cupsRasterAddError("Page header uses unsupported values.\n"); return (-1); } /* * Compute the bitmap parameters... */ h->cupsWidth = (unsigned)((right - left) * h->cupsBorderlessScalingFactor * h->HWResolution[0] / 72.0f + 0.5f); h->cupsHeight = (unsigned)((top - bottom) * h->cupsBorderlessScalingFactor * h->HWResolution[1] / 72.0f + 0.5f); switch (h->cupsColorSpace) { case CUPS_CSPACE_W : case CUPS_CSPACE_K : case CUPS_CSPACE_WHITE : case CUPS_CSPACE_GOLD : case CUPS_CSPACE_SILVER : case CUPS_CSPACE_SW : h->cupsNumColors = 1; h->cupsBitsPerPixel = h->cupsBitsPerColor; break; default : /* * Ensure that colorimetric colorspaces use at least 8 bits per * component... */ if (h->cupsColorSpace >= CUPS_CSPACE_CIEXYZ && h->cupsBitsPerColor < 8) h->cupsBitsPerColor = 8; /* * Figure out the number of bits per pixel... */ if (h->cupsColorOrder == CUPS_ORDER_CHUNKED) { if (h->cupsBitsPerColor >= 8) h->cupsBitsPerPixel = h->cupsBitsPerColor * 3; else h->cupsBitsPerPixel = h->cupsBitsPerColor * 4; } else h->cupsBitsPerPixel = h->cupsBitsPerColor; h->cupsNumColors = 3; break; case CUPS_CSPACE_KCMYcm : if (h->cupsBitsPerColor == 1) { if (h->cupsColorOrder == CUPS_ORDER_CHUNKED) h->cupsBitsPerPixel = 8; else h->cupsBitsPerPixel = 1; h->cupsNumColors = 6; break; } /* * Fall through to CMYK code... */ case CUPS_CSPACE_RGBA : case CUPS_CSPACE_RGBW : case CUPS_CSPACE_CMYK : case CUPS_CSPACE_YMCK : case CUPS_CSPACE_KCMY : case CUPS_CSPACE_GMCK : case CUPS_CSPACE_GMCS : if (h->cupsColorOrder == CUPS_ORDER_CHUNKED) h->cupsBitsPerPixel = h->cupsBitsPerColor * 4; else h->cupsBitsPerPixel = h->cupsBitsPerColor; h->cupsNumColors = 4; break; case CUPS_CSPACE_DEVICE1 : case CUPS_CSPACE_DEVICE2 : case CUPS_CSPACE_DEVICE3 : case CUPS_CSPACE_DEVICE4 : case CUPS_CSPACE_DEVICE5 : case CUPS_CSPACE_DEVICE6 : case CUPS_CSPACE_DEVICE7 : case CUPS_CSPACE_DEVICE8 : case CUPS_CSPACE_DEVICE9 : case CUPS_CSPACE_DEVICEA : case CUPS_CSPACE_DEVICEB : case CUPS_CSPACE_DEVICEC : case CUPS_CSPACE_DEVICED : case CUPS_CSPACE_DEVICEE : case CUPS_CSPACE_DEVICEF : h->cupsNumColors = h->cupsColorSpace - CUPS_CSPACE_DEVICE1 + 1; if (h->cupsColorOrder == CUPS_ORDER_CHUNKED) h->cupsBitsPerPixel = h->cupsBitsPerColor * h->cupsNumColors; else h->cupsBitsPerPixel = h->cupsBitsPerColor; break; } h->cupsBytesPerLine = (h->cupsBitsPerPixel * h->cupsWidth + 7) / 8; if (h->cupsColorOrder == CUPS_ORDER_BANDED) h->cupsBytesPerLine *= h->cupsNumColors; return (status); } /* * '_cupsRasterExecPS()' - Execute PostScript code to initialize a page header. */ int /* O - 0 on success, -1 on error */ _cupsRasterExecPS( cups_page_header2_t *h, /* O - Page header */ int *preferred_bits,/* O - Preferred bits per color */ const char *code) /* I - PS code to execute */ { int error = 0; /* Error condition? */ _cups_ps_stack_t *st; /* PostScript value stack */ _cups_ps_obj_t *obj; /* Object from top of stack */ char *codecopy, /* Copy of code */ *codeptr; /* Pointer into copy of code */ DEBUG_printf(("_cupsRasterExecPS(h=%p, preferred_bits=%p, code=\"%s\")\n", h, preferred_bits, code)); /* * Copy the PostScript code and create a stack... */ if ((codecopy = strdup(code)) == NULL) { _cupsRasterAddError("Unable to duplicate code string.\n"); return (-1); } if ((st = new_stack()) == NULL) { _cupsRasterAddError("Unable to create stack.\n"); free(codecopy); return (-1); } /* * Parse the PS string until we run out of data... */ codeptr = codecopy; while ((obj = scan_ps(st, &codeptr)) != NULL) { #ifdef DEBUG DEBUG_printf(("_cupsRasterExecPS: Stack (%d objects)", st->num_objs)); DEBUG_object("_cupsRasterExecPS", obj); #endif /* DEBUG */ switch (obj->type) { default : /* Do nothing for regular values */ break; case CUPS_PS_CLEARTOMARK : pop_stack(st); if (cleartomark_stack(st)) _cupsRasterAddError("cleartomark: Stack underflow.\n"); #ifdef DEBUG DEBUG_puts("1_cupsRasterExecPS: dup"); DEBUG_stack("_cupsRasterExecPS", st); #endif /* DEBUG */ break; case CUPS_PS_COPY : pop_stack(st); if ((obj = pop_stack(st)) != NULL) { copy_stack(st, (int)obj->value.number); #ifdef DEBUG DEBUG_puts("_cupsRasterExecPS: copy"); DEBUG_stack("_cupsRasterExecPS", st); #endif /* DEBUG */ } break; case CUPS_PS_DUP : pop_stack(st); copy_stack(st, 1); #ifdef DEBUG DEBUG_puts("_cupsRasterExecPS: dup"); DEBUG_stack("_cupsRasterExecPS", st); #endif /* DEBUG */ break; case CUPS_PS_INDEX : pop_stack(st); if ((obj = pop_stack(st)) != NULL) { index_stack(st, (int)obj->value.number); #ifdef DEBUG DEBUG_puts("_cupsRasterExecPS: index"); DEBUG_stack("_cupsRasterExecPS", st); #endif /* DEBUG */ } break; case CUPS_PS_POP : pop_stack(st); pop_stack(st); #ifdef DEBUG DEBUG_puts("_cupsRasterExecPS: pop"); DEBUG_stack("_cupsRasterExecPS", st); #endif /* DEBUG */ break; case CUPS_PS_ROLL : pop_stack(st); if ((obj = pop_stack(st)) != NULL) { int c; /* Count */ c = (int)obj->value.number; if ((obj = pop_stack(st)) != NULL) { roll_stack(st, (int)obj->value.number, c); #ifdef DEBUG DEBUG_puts("_cupsRasterExecPS: roll"); DEBUG_stack("_cupsRasterExecPS", st); #endif /* DEBUG */ } } break; case CUPS_PS_SETPAGEDEVICE : pop_stack(st); setpagedevice(st, h, preferred_bits); #ifdef DEBUG DEBUG_puts("_cupsRasterExecPS: setpagedevice"); DEBUG_stack("_cupsRasterExecPS", st); #endif /* DEBUG */ break; case CUPS_PS_START_PROC : case CUPS_PS_END_PROC : case CUPS_PS_STOPPED : pop_stack(st); break; case CUPS_PS_OTHER : _cupsRasterAddError("Unknown operator \"%s\".\n", obj->value.other); error = 1; DEBUG_printf(("_cupsRasterExecPS: Unknown operator \"%s\".", obj->value.other)); break; } if (error) break; } /* * Cleanup... */ free(codecopy); if (st->num_objs > 0) { error_stack(st, "Stack not empty:"); #ifdef DEBUG DEBUG_puts("_cupsRasterExecPS: Stack not empty"); DEBUG_stack("_cupsRasterExecPS", st); #endif /* DEBUG */ delete_stack(st); return (-1); } delete_stack(st); /* * Return success... */ return (0); } /* * 'cleartomark_stack()' - Clear to the last mark ([) on the stack. */ static int /* O - 0 on success, -1 on error */ cleartomark_stack(_cups_ps_stack_t *st) /* I - Stack */ { _cups_ps_obj_t *obj; /* Current object on stack */ while ((obj = pop_stack(st)) != NULL) if (obj->type == CUPS_PS_START_ARRAY) break; return (obj ? 0 : -1); } /* * 'copy_stack()' - Copy the top N stack objects. */ static int /* O - 0 on success, -1 on error */ copy_stack(_cups_ps_stack_t *st, /* I - Stack */ int c) /* I - Number of objects to copy */ { int n; /* Index */ if (c < 0) return (-1); else if (c == 0) return (0); if ((n = st->num_objs - c) < 0) return (-1); while (c > 0) { if (!push_stack(st, st->objs + n)) return (-1); n ++; c --; } return (0); } /* * 'delete_stack()' - Free memory used by a stack. */ static void delete_stack(_cups_ps_stack_t *st) /* I - Stack */ { free(st->objs); free(st); } /* * 'error_object()' - Add an object's value to the current error message. */ static void error_object(_cups_ps_obj_t *obj) /* I - Object to add */ { switch (obj->type) { case CUPS_PS_NAME : _cupsRasterAddError(" /%s", obj->value.name); break; case CUPS_PS_NUMBER : _cupsRasterAddError(" %g", obj->value.number); break; case CUPS_PS_STRING : _cupsRasterAddError(" (%s)", obj->value.string); break; case CUPS_PS_BOOLEAN : if (obj->value.boolean) _cupsRasterAddError(" true"); else _cupsRasterAddError(" false"); break; case CUPS_PS_NULL : _cupsRasterAddError(" null"); break; case CUPS_PS_START_ARRAY : _cupsRasterAddError(" ["); break; case CUPS_PS_END_ARRAY : _cupsRasterAddError(" ]"); break; case CUPS_PS_START_DICT : _cupsRasterAddError(" <<"); break; case CUPS_PS_END_DICT : _cupsRasterAddError(" >>"); break; case CUPS_PS_START_PROC : _cupsRasterAddError(" {"); break; case CUPS_PS_END_PROC : _cupsRasterAddError(" }"); break; case CUPS_PS_COPY : _cupsRasterAddError(" --copy--"); break; case CUPS_PS_CLEARTOMARK : _cupsRasterAddError(" --cleartomark--"); break; case CUPS_PS_DUP : _cupsRasterAddError(" --dup--"); break; case CUPS_PS_INDEX : _cupsRasterAddError(" --index--"); break; case CUPS_PS_POP : _cupsRasterAddError(" --pop--"); break; case CUPS_PS_ROLL : _cupsRasterAddError(" --roll--"); break; case CUPS_PS_SETPAGEDEVICE : _cupsRasterAddError(" --setpagedevice--"); break; case CUPS_PS_STOPPED : _cupsRasterAddError(" --stopped--"); break; case CUPS_PS_OTHER : _cupsRasterAddError(" --%s--", obj->value.other); break; } } /* * 'error_stack()' - Add a stack to the current error message... */ static void error_stack(_cups_ps_stack_t *st, /* I - Stack */ const char *title) /* I - Title string */ { int c; /* Looping var */ _cups_ps_obj_t *obj; /* Current object on stack */ _cupsRasterAddError("%s", title); for (obj = st->objs, c = st->num_objs; c > 0; c --, obj ++) error_object(obj); _cupsRasterAddError("\n"); } /* * 'index_stack()' - Copy the Nth value on the stack. */ static _cups_ps_obj_t * /* O - New object */ index_stack(_cups_ps_stack_t *st, /* I - Stack */ int n) /* I - Object index */ { if (n < 0 || (n = st->num_objs - n - 1) < 0) return (NULL); return (push_stack(st, st->objs + n)); } /* * 'new_stack()' - Create a new stack. */ static _cups_ps_stack_t * /* O - New stack */ new_stack(void) { _cups_ps_stack_t *st; /* New stack */ if ((st = calloc(1, sizeof(_cups_ps_stack_t))) == NULL) return (NULL); st->alloc_objs = 32; if ((st->objs = calloc(32, sizeof(_cups_ps_obj_t))) == NULL) { free(st); return (NULL); } else return (st); } /* * 'pop_stock()' - Pop the top object off the stack. */ static _cups_ps_obj_t * /* O - Object */ pop_stack(_cups_ps_stack_t *st) /* I - Stack */ { if (st->num_objs > 0) { st->num_objs --; return (st->objs + st->num_objs); } else return (NULL); } /* * 'push_stack()' - Push an object on the stack. */ static _cups_ps_obj_t * /* O - New object */ push_stack(_cups_ps_stack_t *st, /* I - Stack */ _cups_ps_obj_t *obj) /* I - Object */ { _cups_ps_obj_t *temp; /* New object */ if (st->num_objs >= st->alloc_objs) { st->alloc_objs += 32; if ((temp = realloc(st->objs, (size_t)st->alloc_objs * sizeof(_cups_ps_obj_t))) == NULL) return (NULL); st->objs = temp; memset(temp + st->num_objs, 0, 32 * sizeof(_cups_ps_obj_t)); } temp = st->objs + st->num_objs; st->num_objs ++; memcpy(temp, obj, sizeof(_cups_ps_obj_t)); return (temp); } /* * 'roll_stack()' - Rotate stack objects. */ static int /* O - 0 on success, -1 on error */ roll_stack(_cups_ps_stack_t *st, /* I - Stack */ int c, /* I - Number of objects */ int s) /* I - Amount to shift */ { _cups_ps_obj_t *temp; /* Temporary array of objects */ int n; /* Index into array */ DEBUG_printf(("3roll_stack(st=%p, s=%d, c=%d)", st, s, c)); /* * Range check input... */ if (c < 0) return (-1); else if (c == 0) return (0); if ((n = st->num_objs - c) < 0) return (-1); s %= c; if (s == 0) return (0); /* * Copy N objects and move things around... */ if (s < 0) { /* * Shift down... */ s = -s; if ((temp = calloc((size_t)s, sizeof(_cups_ps_obj_t))) == NULL) return (-1); memcpy(temp, st->objs + n, (size_t)s * sizeof(_cups_ps_obj_t)); memmove(st->objs + n, st->objs + n + s, (size_t)(c - s) * sizeof(_cups_ps_obj_t)); memcpy(st->objs + n + c - s, temp, (size_t)s * sizeof(_cups_ps_obj_t)); } else { /* * Shift up... */ if ((temp = calloc((size_t)s, sizeof(_cups_ps_obj_t))) == NULL) return (-1); memcpy(temp, st->objs + n + c - s, (size_t)s * sizeof(_cups_ps_obj_t)); memmove(st->objs + n + s, st->objs + n, (size_t)(c - s) * sizeof(_cups_ps_obj_t)); memcpy(st->objs + n, temp, (size_t)s * sizeof(_cups_ps_obj_t)); } free(temp); return (0); } /* * 'scan_ps()' - Scan a string for the next PS object. */ static _cups_ps_obj_t * /* O - New object or NULL on EOF */ scan_ps(_cups_ps_stack_t *st, /* I - Stack */ char **ptr) /* IO - String pointer */ { _cups_ps_obj_t obj; /* Current object */ char *start, /* Start of object */ *cur, /* Current position */ *valptr, /* Pointer into value string */ *valend; /* End of value string */ int parens; /* Parenthesis nesting level */ /* * Skip leading whitespace... */ for (cur = *ptr; *cur; cur ++) { if (*cur == '%') { /* * Comment, skip to end of line... */ for (cur ++; *cur && *cur != '\n' && *cur != '\r'; cur ++); if (!*cur) cur --; } else if (!isspace(*cur & 255)) break; } if (!*cur) { *ptr = NULL; return (NULL); } /* * See what we have... */ memset(&obj, 0, sizeof(obj)); switch (*cur) { case '(' : /* (string) */ obj.type = CUPS_PS_STRING; start = cur; for (cur ++, parens = 1, valptr = obj.value.string, valend = obj.value.string + sizeof(obj.value.string) - 1; *cur; cur ++) { if (*cur == ')' && parens == 1) break; if (*cur == '(') parens ++; else if (*cur == ')') parens --; if (valptr >= valend) { *ptr = start; return (NULL); } if (*cur == '\\') { /* * Decode escaped character... */ cur ++; if (*cur == 'b') *valptr++ = '\b'; else if (*cur == 'f') *valptr++ = '\f'; else if (*cur == 'n') *valptr++ = '\n'; else if (*cur == 'r') *valptr++ = '\r'; else if (*cur == 't') *valptr++ = '\t'; else if (*cur >= '0' && *cur <= '7') { int ch = *cur - '0'; if (cur[1] >= '0' && cur[1] <= '7') { cur ++; ch = (ch << 3) + *cur - '0'; } if (cur[1] >= '0' && cur[1] <= '7') { cur ++; ch = (ch << 3) + *cur - '0'; } *valptr++ = (char)ch; } else if (*cur == '\r') { if (cur[1] == '\n') cur ++; } else if (*cur != '\n') *valptr++ = *cur; } else *valptr++ = *cur; } if (*cur != ')') { *ptr = start; return (NULL); } cur ++; break; case '[' : /* Start array */ obj.type = CUPS_PS_START_ARRAY; cur ++; break; case ']' : /* End array */ obj.type = CUPS_PS_END_ARRAY; cur ++; break; case '<' : /* Start dictionary or hex string */ if (cur[1] == '<') { obj.type = CUPS_PS_START_DICT; cur += 2; } else { obj.type = CUPS_PS_STRING; start = cur; for (cur ++, valptr = obj.value.string, valend = obj.value.string + sizeof(obj.value.string) - 1; *cur; cur ++) { int ch; /* Current character */ if (*cur == '>') break; else if (valptr >= valend || !isxdigit(*cur & 255)) { *ptr = start; return (NULL); } if (*cur >= '0' && *cur <= '9') ch = (*cur - '0') << 4; else ch = (tolower(*cur) - 'a' + 10) << 4; if (isxdigit(cur[1] & 255)) { cur ++; if (*cur >= '0' && *cur <= '9') ch |= *cur - '0'; else ch |= tolower(*cur) - 'a' + 10; } *valptr++ = (char)ch; } if (*cur != '>') { *ptr = start; return (NULL); } cur ++; } break; case '>' : /* End dictionary? */ if (cur[1] == '>') { obj.type = CUPS_PS_END_DICT; cur += 2; } else { obj.type = CUPS_PS_OTHER; obj.value.other[0] = *cur; cur ++; } break; case '{' : /* Start procedure */ obj.type = CUPS_PS_START_PROC; cur ++; break; case '}' : /* End procedure */ obj.type = CUPS_PS_END_PROC; cur ++; break; case '-' : /* Possible number */ case '+' : if (!isdigit(cur[1] & 255) && cur[1] != '.') { obj.type = CUPS_PS_OTHER; obj.value.other[0] = *cur; cur ++; break; } case '0' : /* Number */ case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : case '8' : case '9' : case '.' : obj.type = CUPS_PS_NUMBER; start = cur; for (cur ++; *cur; cur ++) if (!isdigit(*cur & 255)) break; if (*cur == '#') { /* * Integer with radix... */ obj.value.number = strtol(cur + 1, &cur, atoi(start)); break; } else if (strchr(".Ee()<>[]{}/%", *cur) || isspace(*cur & 255)) { /* * Integer or real number... */ obj.value.number = _cupsStrScand(start, &cur, localeconv()); break; } else cur = start; default : /* Operator/variable name */ start = cur; if (*cur == '/') { obj.type = CUPS_PS_NAME; valptr = obj.value.name; valend = obj.value.name + sizeof(obj.value.name) - 1; cur ++; } else { obj.type = CUPS_PS_OTHER; valptr = obj.value.other; valend = obj.value.other + sizeof(obj.value.other) - 1; } while (*cur) { if (strchr("()<>[]{}/%", *cur) || isspace(*cur & 255)) break; else if (valptr < valend) *valptr++ = *cur++; else { *ptr = start; return (NULL); } } if (obj.type == CUPS_PS_OTHER) { if (!strcmp(obj.value.other, "true")) { obj.type = CUPS_PS_BOOLEAN; obj.value.boolean = 1; } else if (!strcmp(obj.value.other, "false")) { obj.type = CUPS_PS_BOOLEAN; obj.value.boolean = 0; } else if (!strcmp(obj.value.other, "null")) obj.type = CUPS_PS_NULL; else if (!strcmp(obj.value.other, "cleartomark")) obj.type = CUPS_PS_CLEARTOMARK; else if (!strcmp(obj.value.other, "copy")) obj.type = CUPS_PS_COPY; else if (!strcmp(obj.value.other, "dup")) obj.type = CUPS_PS_DUP; else if (!strcmp(obj.value.other, "index")) obj.type = CUPS_PS_INDEX; else if (!strcmp(obj.value.other, "pop")) obj.type = CUPS_PS_POP; else if (!strcmp(obj.value.other, "roll")) obj.type = CUPS_PS_ROLL; else if (!strcmp(obj.value.other, "setpagedevice")) obj.type = CUPS_PS_SETPAGEDEVICE; else if (!strcmp(obj.value.other, "stopped")) obj.type = CUPS_PS_STOPPED; } break; } /* * Save the current position in the string and return the new object... */ *ptr = cur; return (push_stack(st, &obj)); } /* * 'setpagedevice()' - Simulate the PostScript setpagedevice operator. */ static int /* O - 0 on success, -1 on error */ setpagedevice( _cups_ps_stack_t *st, /* I - Stack */ cups_page_header2_t *h, /* O - Page header */ int *preferred_bits)/* O - Preferred bits per color */ { int i; /* Index into array */ _cups_ps_obj_t *obj, /* Current object */ *end; /* End of dictionary */ const char *name; /* Attribute name */ /* * Make sure we have a dictionary on the stack... */ if (st->num_objs == 0) return (-1); obj = end = st->objs + st->num_objs - 1; if (obj->type != CUPS_PS_END_DICT) return (-1); obj --; while (obj > st->objs) { if (obj->type == CUPS_PS_START_DICT) break; obj --; } if (obj < st->objs) return (-1); /* * Found the start of the dictionary, empty the stack to this point... */ st->num_objs = (int)(obj - st->objs); /* * Now pull /name and value pairs from the dictionary... */ DEBUG_puts("3setpagedevice: Dictionary:"); for (obj ++; obj < end; obj ++) { /* * Grab the name... */ if (obj->type != CUPS_PS_NAME) return (-1); name = obj->value.name; obj ++; #ifdef DEBUG DEBUG_printf(("4setpagedevice: /%s ", name)); DEBUG_object("setpagedevice", obj); #endif /* DEBUG */ /* * Then grab the value... */ if (!strcmp(name, "MediaClass") && obj->type == CUPS_PS_STRING) strlcpy(h->MediaClass, obj->value.string, sizeof(h->MediaClass)); else if (!strcmp(name, "MediaColor") && obj->type == CUPS_PS_STRING) strlcpy(h->MediaColor, obj->value.string, sizeof(h->MediaColor)); else if (!strcmp(name, "MediaType") && obj->type == CUPS_PS_STRING) strlcpy(h->MediaType, obj->value.string, sizeof(h->MediaType)); else if (!strcmp(name, "OutputType") && obj->type == CUPS_PS_STRING) strlcpy(h->OutputType, obj->value.string, sizeof(h->OutputType)); else if (!strcmp(name, "AdvanceDistance") && obj->type == CUPS_PS_NUMBER) h->AdvanceDistance = (unsigned)obj->value.number; else if (!strcmp(name, "AdvanceMedia") && obj->type == CUPS_PS_NUMBER) h->AdvanceMedia = (unsigned)obj->value.number; else if (!strcmp(name, "Collate") && obj->type == CUPS_PS_BOOLEAN) h->Collate = (unsigned)obj->value.boolean; else if (!strcmp(name, "CutMedia") && obj->type == CUPS_PS_NUMBER) h->CutMedia = (cups_cut_t)(unsigned)obj->value.number; else if (!strcmp(name, "Duplex") && obj->type == CUPS_PS_BOOLEAN) h->Duplex = (unsigned)obj->value.boolean; else if (!strcmp(name, "HWResolution") && obj->type == CUPS_PS_START_ARRAY) { if (obj[1].type == CUPS_PS_NUMBER && obj[2].type == CUPS_PS_NUMBER && obj[3].type == CUPS_PS_END_ARRAY) { h->HWResolution[0] = (unsigned)obj[1].value.number; h->HWResolution[1] = (unsigned)obj[2].value.number; obj += 3; } else return (-1); } else if (!strcmp(name, "InsertSheet") && obj->type == CUPS_PS_BOOLEAN) h->InsertSheet = (unsigned)obj->value.boolean; else if (!strcmp(name, "Jog") && obj->type == CUPS_PS_NUMBER) h->Jog = (unsigned)obj->value.number; else if (!strcmp(name, "LeadingEdge") && obj->type == CUPS_PS_NUMBER) h->LeadingEdge = (unsigned)obj->value.number; else if (!strcmp(name, "ManualFeed") && obj->type == CUPS_PS_BOOLEAN) h->ManualFeed = (unsigned)obj->value.boolean; else if ((!strcmp(name, "cupsMediaPosition") || !strcmp(name, "MediaPosition")) && obj->type == CUPS_PS_NUMBER) { /* * cupsMediaPosition is supported for backwards compatibility only. * We added it back in the Ghostscript 5.50 days to work around a * bug in Ghostscript WRT handling of MediaPosition and setpagedevice. * * All new development should set MediaPosition... */ h->MediaPosition = (unsigned)obj->value.number; } else if (!strcmp(name, "MediaWeight") && obj->type == CUPS_PS_NUMBER) h->MediaWeight = (unsigned)obj->value.number; else if (!strcmp(name, "MirrorPrint") && obj->type == CUPS_PS_BOOLEAN) h->MirrorPrint = (unsigned)obj->value.boolean; else if (!strcmp(name, "NegativePrint") && obj->type == CUPS_PS_BOOLEAN) h->NegativePrint = (unsigned)obj->value.boolean; else if (!strcmp(name, "NumCopies") && obj->type == CUPS_PS_NUMBER) h->NumCopies = (unsigned)obj->value.number; else if (!strcmp(name, "Orientation") && obj->type == CUPS_PS_NUMBER) h->Orientation = (unsigned)obj->value.number; else if (!strcmp(name, "OutputFaceUp") && obj->type == CUPS_PS_BOOLEAN) h->OutputFaceUp = (unsigned)obj->value.boolean; else if (!strcmp(name, "PageSize") && obj->type == CUPS_PS_START_ARRAY) { if (obj[1].type == CUPS_PS_NUMBER && obj[2].type == CUPS_PS_NUMBER && obj[3].type == CUPS_PS_END_ARRAY) { h->cupsPageSize[0] = (float)obj[1].value.number; h->cupsPageSize[1] = (float)obj[2].value.number; h->PageSize[0] = (unsigned)obj[1].value.number; h->PageSize[1] = (unsigned)obj[2].value.number; obj += 3; } else return (-1); } else if (!strcmp(name, "Separations") && obj->type == CUPS_PS_BOOLEAN) h->Separations = (unsigned)obj->value.boolean; else if (!strcmp(name, "TraySwitch") && obj->type == CUPS_PS_BOOLEAN) h->TraySwitch = (unsigned)obj->value.boolean; else if (!strcmp(name, "Tumble") && obj->type == CUPS_PS_BOOLEAN) h->Tumble = (unsigned)obj->value.boolean; else if (!strcmp(name, "cupsMediaType") && obj->type == CUPS_PS_NUMBER) h->cupsMediaType = (unsigned)obj->value.number; else if (!strcmp(name, "cupsBitsPerColor") && obj->type == CUPS_PS_NUMBER) h->cupsBitsPerColor = (unsigned)obj->value.number; else if (!strcmp(name, "cupsPreferredBitsPerColor") && obj->type == CUPS_PS_NUMBER) *preferred_bits = (int)obj->value.number; else if (!strcmp(name, "cupsColorOrder") && obj->type == CUPS_PS_NUMBER) h->cupsColorOrder = (cups_order_t)(unsigned)obj->value.number; else if (!strcmp(name, "cupsColorSpace") && obj->type == CUPS_PS_NUMBER) h->cupsColorSpace = (cups_cspace_t)(unsigned)obj->value.number; else if (!strcmp(name, "cupsCompression") && obj->type == CUPS_PS_NUMBER) h->cupsCompression = (unsigned)obj->value.number; else if (!strcmp(name, "cupsRowCount") && obj->type == CUPS_PS_NUMBER) h->cupsRowCount = (unsigned)obj->value.number; else if (!strcmp(name, "cupsRowFeed") && obj->type == CUPS_PS_NUMBER) h->cupsRowFeed = (unsigned)obj->value.number; else if (!strcmp(name, "cupsRowStep") && obj->type == CUPS_PS_NUMBER) h->cupsRowStep = (unsigned)obj->value.number; else if (!strcmp(name, "cupsBorderlessScalingFactor") && obj->type == CUPS_PS_NUMBER) h->cupsBorderlessScalingFactor = (float)obj->value.number; else if (!strncmp(name, "cupsInteger", 11) && obj->type == CUPS_PS_NUMBER) { if ((i = atoi(name + 11)) < 0 || i > 15) return (-1); h->cupsInteger[i] = (unsigned)obj->value.number; } else if (!strncmp(name, "cupsReal", 8) && obj->type == CUPS_PS_NUMBER) { if ((i = atoi(name + 8)) < 0 || i > 15) return (-1); h->cupsReal[i] = (float)obj->value.number; } else if (!strncmp(name, "cupsString", 10) && obj->type == CUPS_PS_STRING) { if ((i = atoi(name + 10)) < 0 || i > 15) return (-1); strlcpy(h->cupsString[i], obj->value.string, sizeof(h->cupsString[i])); } else if (!strcmp(name, "cupsMarkerType") && obj->type == CUPS_PS_STRING) strlcpy(h->cupsMarkerType, obj->value.string, sizeof(h->cupsMarkerType)); else if (!strcmp(name, "cupsPageSizeName") && obj->type == CUPS_PS_STRING) strlcpy(h->cupsPageSizeName, obj->value.string, sizeof(h->cupsPageSizeName)); else if (!strcmp(name, "cupsRenderingIntent") && obj->type == CUPS_PS_STRING) strlcpy(h->cupsRenderingIntent, obj->value.string, sizeof(h->cupsRenderingIntent)); else { /* * Ignore unknown name+value... */ DEBUG_printf(("4setpagedevice: Unknown name (\"%s\") or value...\n", name)); while (obj[1].type != CUPS_PS_NAME && obj < end) obj ++; } } return (0); } #ifdef DEBUG /* * 'DEBUG_object()' - Print an object's value... */ static void DEBUG_object(const char *prefix, /* I - Prefix string */ _cups_ps_obj_t *obj) /* I - Object to print */ { switch (obj->type) { case CUPS_PS_NAME : DEBUG_printf(("4%s: /%s\n", prefix, obj->value.name)); break; case CUPS_PS_NUMBER : DEBUG_printf(("4%s: %g\n", prefix, obj->value.number)); break; case CUPS_PS_STRING : DEBUG_printf(("4%s: (%s)\n", prefix, obj->value.string)); break; case CUPS_PS_BOOLEAN : if (obj->value.boolean) DEBUG_printf(("4%s: true", prefix)); else DEBUG_printf(("4%s: false", prefix)); break; case CUPS_PS_NULL : DEBUG_printf(("4%s: null", prefix)); break; case CUPS_PS_START_ARRAY : DEBUG_printf(("4%s: [", prefix)); break; case CUPS_PS_END_ARRAY : DEBUG_printf(("4%s: ]", prefix)); break; case CUPS_PS_START_DICT : DEBUG_printf(("4%s: <<", prefix)); break; case CUPS_PS_END_DICT : DEBUG_printf(("4%s: >>", prefix)); break; case CUPS_PS_START_PROC : DEBUG_printf(("4%s: {", prefix)); break; case CUPS_PS_END_PROC : DEBUG_printf(("4%s: }", prefix)); break; case CUPS_PS_CLEARTOMARK : DEBUG_printf(("4%s: --cleartomark--", prefix)); break; case CUPS_PS_COPY : DEBUG_printf(("4%s: --copy--", prefix)); break; case CUPS_PS_DUP : DEBUG_printf(("4%s: --dup--", prefix)); break; case CUPS_PS_INDEX : DEBUG_printf(("4%s: --index--", prefix)); break; case CUPS_PS_POP : DEBUG_printf(("4%s: --pop--", prefix)); break; case CUPS_PS_ROLL : DEBUG_printf(("4%s: --roll--", prefix)); break; case CUPS_PS_SETPAGEDEVICE : DEBUG_printf(("4%s: --setpagedevice--", prefix)); break; case CUPS_PS_STOPPED : DEBUG_printf(("4%s: --stopped--", prefix)); break; case CUPS_PS_OTHER : DEBUG_printf(("4%s: --%s--", prefix, obj->value.other)); break; } } /* * 'DEBUG_stack()' - Print a stack... */ static void DEBUG_stack(const char *prefix, /* I - Prefix string */ _cups_ps_stack_t *st) /* I - Stack */ { int c; /* Looping var */ _cups_ps_obj_t *obj; /* Current object on stack */ for (obj = st->objs, c = st->num_objs; c > 0; c --, obj ++) DEBUG_object(prefix, obj); } #endif /* DEBUG */ cups-2.2.7/filter/libcupsimage2.def000664 000765 000024 00000000430 13255074424 017643 0ustar00msweetstaff000000 000000 LIBRARY libcupsimage2 VERSION 2.3 EXPORTS cupsRasterClose cupsRasterErrorString cupsRasterInterpretPPD cupsRasterOpen cupsRasterOpenIO cupsRasterReadHeader cupsRasterReadHeader2 cupsRasterReadPixels cupsRasterWriteHeader cupsRasterWriteHeader2 cupsRasterWritePixels cups-2.2.7/filter/libcupsimage_s.exp000664 000765 000024 00000000456 13255074424 020151 0ustar00msweetstaff000000 000000 _cupsImagePutCol _cupsImagePutRow _cupsImageReadBMP _cupsImageReadGIF _cupsImageReadJPEG _cupsImageReadPIX _cupsImageReadPNG _cupsImageReadPNM _cupsImageReadPhotoCD _cupsImageReadSGI _cupsImageReadSunRaster _cupsImageReadTIFF _cupsImageZoomDelete _cupsImageZoomFill _cupsImageZoomNew _cupsRasterExecPS cups-2.2.7/filter/Makefile000664 000765 000024 00000017741 13255074424 016112 0ustar00msweetstaff000000 000000 # # Filter makefile for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 1997-2006 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # # This file is subject to the Apple OS-Developed Software exception. # include ../Makedefs FILTERS = \ commandtops \ gziptoany \ pstops \ rastertoepson \ rastertohp \ rastertolabel \ rastertopwg LIBTARGETS = \ $(LIBCUPSIMAGE) \ libcupsimage.a UNITTARGETS = \ rasterbench \ testclient \ testraster TARGETS = \ $(LIBTARGETS) \ $(FILTERS) IMAGEOBJS = error.o interpret.o raster.o OBJS = $(IMAGEOBJS) \ commandtops.o gziptoany.o common.o pstops.o \ rasterbench.o rastertoepson.o rastertohp.o rastertolabel.o \ rastertopwg.o testclient.o testraster.o # # Make all targets... # all: $(TARGETS) # # Make library targets... # libs: $(LIBTARGETS) # # Make unit tests... # unittests: $(UNITTARGETS) # # Clean all object files... # clean: $(RM) $(OBJS) $(TARGETS) $(UNITTARGETS) $(RM) libcupsimage.so libcupsimage.sl libcupsimage.dylib # # Update dependencies (without system header dependencies...) # depend: $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: # # Install programs... # install-exec: $(INSTALL_DIR) -m 755 $(SERVERBIN)/filter for file in $(FILTERS); do \ $(INSTALL_BIN) $$file $(SERVERBIN)/filter; \ done $(RM) $(SERVERBIN)/filter/rastertodymo $(LN) rastertolabel $(SERVERBIN)/filter/rastertodymo if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ for file in $(FILTERS); do \ cp $$file $(SYMROOT); \ dsymutil $(SYMROOT)/$$file; \ done \ fi # # Install headers... # install-headers: # # Install libraries... # install-libs: $(INSTALLSTATIC) $(INSTALL_DIR) -m 755 $(LIBDIR) $(INSTALL_LIB) $(LIBCUPSIMAGE) $(LIBDIR) -if test $(LIBCUPSIMAGE) = "libcupsimage.so.2" -o $(LIBCUPSIMAGE) = "libcupsimage.sl.2"; then \ $(RM) $(LIBDIR)/`basename $(LIBCUPSIMAGE) .2`; \ $(LN) $(LIBCUPSIMAGE) $(LIBDIR)/`basename $(LIBCUPSIMAGE) .2`; \ fi -if test $(LIBCUPSIMAGE) = "libcupsimage.2.dylib"; then \ $(RM) $(LIBDIR)/libcupsimage.dylib; \ $(LN) $(LIBCUPSIMAGE) $(LIBDIR)/libcupsimage.dylib; \ fi if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ cp $(LIBCUPSIMAGE) $(SYMROOT); \ dsymutil $(SYMROOT)/$(LIBCUPSIMAGE); \ fi installstatic: $(INSTALL_DIR) -m 755 $(LIBDIR) $(INSTALL_LIB) -m 755 libcupsimage.a $(LIBDIR) $(RANLIB) $(LIBDIR)/libcupsimage.a $(CHMOD) 555 $(LIBDIR)/libcupsimage.a # # Uninstall all targets... # uninstall: for file in $(FILTERS); do \ $(RM) $(SERVERBIN)/filter/$$file; \ done $(RM) $(SERVERBIN)/filter/rastertodymo -$(RMDIR) $(SERVERBIN)/filter -$(RMDIR) $(SERVERBIN) $(RM) $(LIBDIR)/libcupsimage.2.dylib $(RM) $(LIBDIR)/libcupsimage.a $(RM) $(LIBDIR)/libcupsimage.dylib $(RM) $(LIBDIR)/libcupsimage_s.a $(RM) $(LIBDIR)/libcupsimage.sl $(RM) $(LIBDIR)/libcupsimage.sl.2 $(RM) $(LIBDIR)/libcupsimage.so $(RM) $(LIBDIR)/libcupsimage.so.2 -$(RMDIR) $(LIBDIR) # # Automatic API help files... # apihelp: echo Generating CUPS API help files... mxmldoc --section "Programming" --title "Raster API" \ --css ../doc/cups-printable.css \ --header api-raster.header --intro api-raster.shtml \ api-raster.xml \ ../cups/raster.h interpret.c raster.c \ >../doc/help/api-raster.html mxmldoc --tokens help/api-raster.html api-raster.xml >../doc/help/api-raster.tokens $(RM) api-raster.xml mxmldoc --section "Programming" \ --title "Developing PostScript Printer Drivers" \ --css ../doc/cups-printable.css \ --header postscript-driver.header \ --intro postscript-driver.shtml \ >../doc/help/postscript-driver.html mxmldoc --section "Programming" \ --title "Introduction to the PPD Compiler" \ --css ../doc/cups-printable.css \ --header ppd-compiler.header \ --intro ppd-compiler.shtml \ >../doc/help/ppd-compiler.html mxmldoc --section "Programming" \ --title "Developing Raster Printer Drivers" \ --css ../doc/cups-printable.css \ --header raster-driver.header \ --intro raster-driver.shtml \ >../doc/help/raster-driver.html mxmldoc --section "Specifications" \ --title "CUPS PPD Extensions" \ --css ../doc/cups-printable.css \ --header spec-ppd.header \ --intro spec-ppd.shtml \ >../doc/help/spec-ppd.html # # commandtops # commandtops: commandtops.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ commandtops.o $(LIBS) # # gziptoany # gziptoany: gziptoany.o ../Makedefs ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ gziptoany.o $(LIBZ) $(LIBS) # # libcupsimage.so.2, libcupsimage.sl.2 # libcupsimage.so.2 libcupsimage.sl.2: $(IMAGEOBJS) echo Linking $@... $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(IMAGEOBJS) $(DSOLIBS) \ -L../cups $(LINKCUPS) $(RM) `basename $@ .2` $(LN) $@ `basename $@ .2` # # libcupsimage.2.dylib # libcupsimage.2.dylib: $(IMAGEOBJS) $(LIBCUPSIMAGEORDER) echo Linking $@... $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \ -install_name $(libdir)/$@ \ -current_version 2.3.0 \ -compatibility_version 2.0.0 \ $(IMAGEOBJS) $(DSOLIBS) -L../cups $(LINKCUPS) $(RM) libcupsimage.dylib $(LN) $@ libcupsimage.dylib # # libcupsimage_s.a # libcupsimage_s.a: $(IMAGEOBJS) libcupsimage_s.exp echo Linking $@... $(DSO) $(DSOFLAGS) -Wl,-berok,-bexport:libcupsimage_s.exp \ -o libcupsimage_s.o $(IMAGEOBJS) $(DSOLIBS) $(RM) $@ $(AR) $(ARFLAGS) $@ libcupsimage_s.o # # libcupsimage.la # libcupsimage.la: $(IMAGEOBJS) echo Linking $@... $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(IMAGEOBJS:.o=.lo) $(DSOLIBS) \ -L../cups $(LINKCUPS) \ -rpath $(LIBDIR) -version-info 2:3 # # libcupsimage.a # libcupsimage.a: $(IMAGEOBJS) echo Archiving $@... $(RM) $@ $(AR) $(ARFLAGS) $@ $(IMAGEOBJS) $(RANLIB) $@ # # pstops # pstops: pstops.o common.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ pstops.o common.o $(LIBS) # # rastertoepson # rastertoepson: rastertoepson.o ../cups/$(LIBCUPS) $(LIBCUPSIMAGE) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ rastertoepson.o $(LINKCUPSIMAGE) $(IMGLIBS) $(LIBS) # # rastertohp # rastertohp: rastertohp.o ../cups/$(LIBCUPS) $(LIBCUPSIMAGE) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ rastertohp.o $(LINKCUPSIMAGE) $(IMGLIBS) $(LIBS) # # rastertolabel # rastertolabel: rastertolabel.o ../cups/$(LIBCUPS) $(LIBCUPSIMAGE) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ rastertolabel.o $(LINKCUPSIMAGE) $(IMGLIBS) $(LIBS) # # rastertopwg # rastertopwg: rastertopwg.o ../cups/$(LIBCUPS) $(LIBCUPSIMAGE) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ rastertopwg.o $(LINKCUPSIMAGE) $(IMGLIBS) $(LIBS) rastertopwg-static: rastertopwg.o ../cups/$(LIBCUPSSTATIC) libcupsimage.a echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ rastertopwg.o libcupsimage.a \ ../cups/$(LIBCUPSSTATIC) $(IMGLIBS) $(DSOLIBS) $(COMMONLIBS) \ $(SSLLIBS) $(DNSSDLIBS) $(LIBGSSAPI) # # testclient (dependency on static libraries is intentional) # testclient: testclient.o ../cups/$(LIBCUPSSTATIC) libcupsimage.a echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ testclient.o \ libcupsimage.a ../cups/$(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # testraster # testraster: testraster.o ../cups/$(LIBCUPSSTATIC) libcupsimage.a echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testraster.o libcupsimage.a \ ../cups/$(LIBCUPSSTATIC) $(IMGLIBS) $(DSOLIBS) $(COMMONLIBS) \ $(SSLLIBS) $(DNSSDLIBS) $(LIBGSSAPI) echo Running raster API tests... ./testraster # # rasterbench # rasterbench: rasterbench.o libcupsimage.a echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ rasterbench.o libcupsimage.a $(LIBS) # # Dependencies... # include Dependencies cups-2.2.7/filter/postscript-driver.header000664 000765 000024 00000003016 13255074424 021315 0ustar00msweetstaff000000 000000

    Developing PostScript Printer Drivers

    This document describes how to develop printer drivers for PostScript printers. Topics include: printer driver basics, creating new PPD files, importing existing PPD files, using custom filters, implementing color management, and adding macOS features.

    cups-2.2.7/filter/postscript-driver.shtml000664 000765 000024 00000034555 13255074424 021230 0ustar00msweetstaff000000 000000

    Printer Driver Basics

    A CUPS PostScript printer driver consists of a PostScript Printer Description (PPD) file that describes the features and capabilities of the device, zero or more filter programs that prepare print data for the device, and zero or more support files for color management, online help, and so forth. The PPD file includes references to all of the filters and support files used by the driver.

    Every time a user prints something the scheduler program, cupsd(8), determines the format of the print job and the programs required to convert that job into something the printer understands. CUPS includes filter programs for many common formats, for example to convert Portable Document Format (PDF) files into device-independent PostScript, and then from device-independent PostScript to device-dependent PostScript. Figure 1 shows the data flow of a typical print job.

    The optional PostScript filter can be provided to add printer-specific commands to the PostScript output that cannot be represented in the PPD file or to reorganize the output for special printer features. Typically this is used to support advanced job management or finishing functions on the printer. CUPS includes a generic PostScript filter that handles all PPD-defined commands.

    The optional port monitor handles interface-specific protocol or encoding issues. For example, many PostScript printers support the Binary Communications Protocol (BCP) and Tagged Binary Communications Protocol (TBCP) to allow applications to print 8-bit ("binary") PostScript jobs. CUPS includes port monitors for BCP and TBCP, and you can supply your own port monitors as needed.

    The backend handles communications with the printer, sending print data from the last filter to the printer and relaying back-channel data from the printer to the upstream filters. CUPS includes backend programs for common direct-connect interfaces and network protocols, and you can provide your own backend to support custom interfaces and protocols.

    The scheduler also supports a special "command" file format for sending maintenance commands and status queries to a printer or printer driver. Command print jobs typically use a single command filter program defined in the PPD file to generate the appropriate printer commands and handle any responses from the printer. Figure 2 shows the data flow of a typical command job.

    PostScript printer drivers typically do not require their own command filter since CUPS includes a generic PostScript command filter that supports all of the standard functions using PPD-defined commands.

    Creating New PPD Files

    We recommend using the CUPS PPD compiler, ppdc(1), to create new PPD files since it manages many of the tedious (and error-prone!) details of paper sizes and localization for you. It also allows you to easily support multiple devices from a single source file. For more information see the "Introduction to the PPD Compiler" document. Listing 1 shows a driver information file for a black-and-white PostScript printer.

    Listing 1: "examples/postscript.drv"

    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // Specify this is a PostScript printer driver
    DriverType ps
    
    // List the fonts that are supported, in this case all standard fonts
    Font *
    
    // Manufacturer, model name, and version
    Manufacturer "Foo"
    ModelName "Foo LaserProofer 2000"
    Version 1.0
    
    // PostScript printer attributes
    Attribute DefaultColorSpace "" Gray
    Attribute LandscapeOrientation "" Minus90
    Attribute LanguageLevel "" "3"
    Attribute Product "" "(Foo LaserProofer 2000)"
    Attribute PSVersion "" "(3010) 0"
    Attribute TTRasterizer "" Type42
    
    // Supported page sizes
    *MediaSize Letter
    MediaSize Legal
    MediaSize A4
    
    // Query command for page size
    Attribute "?PageSize" "" "
          save
          currentpagedevice /PageSize get aload pop
          2 copy gt {exch} if (Unknown)
          23 dict
                  dup [612 792] (Letter) put
                  dup [612 1008] (Legal) put
                  dup [595 842] (A4) put
                  {exch aload pop 4 index sub abs 5 le exch
                   5 index sub abs 5 le and
                  {exch pop exit} {pop} ifelse
          } bind forall = flush pop pop
          restore"
    
    // Specify the name of the PPD file we want to generate
    PCFileName "fooproof.ppd"
    

    Required Attributes

    PostScript drivers require the attributes listed in Table 1. If not specified, the defaults for CUPS drivers are used. A typical PostScript driver information file would include the following attributes:

    Attribute DefaultColorSpace "" Gray
    Attribute LandscapeOrientation "" Minus90
    Attribute LanguageLevel "" "3"
    Attribute Product "" "(Foo LaserProofer 2000)"
    Attribute PSVersion "" "(3010) 0"
    Attribute TTRasterizer "" Type42
    
    Table 1: Required PostScript Printer Driver Attributes
    Attribute Description
    DefaultColorSpace The default colorspace: Gray, RGB, CMY, or CMYK. If not specified, then RGB is assumed.
    LandscapeOrientation The preferred landscape orientation: Plus90, Minus90, or Any. If not specified, Plus90 is assumed.
    LanguageLevel The PostScript language level supported by the device: 1, 2, or 3. If not specified, 2 is assumed.
    Product The string returned by the PostScript product operator, which must include parenthesis to conform with PostScript syntax rules for strings. Multiple Product attributes may be specified to support multiple products with the same PPD file. If not specified, "(ESP Ghostscript)" and "(GNU Ghostscript)" are assumed.
    PSVersion The PostScript interpreter version numbers as returned by the version and revision operators. The required format is "(version) revision". Multiple PSVersion attributes may be specified to support multiple interpreter version numbers. If not specified, "(3010) 705" and "(3010) 707" are assumed.
    TTRasterizer The type of TrueType font rasterizer supported by the device, if any. The supported values are None, Accept68k, Type42, and TrueImage. If not specified, None is assumed.

    Query Commands

    Most PostScript printer PPD files include query commands (?PageSize, etc.) that allow applications to query the printer for its current settings and configuration. Query commands are included in driver information files as attributes. For example, the example in Listing 1 uses the following definition for the PageSize query command:

    Attribute "?PageSize" "" "
          save
          currentpagedevice /PageSize get aload pop
          2 copy gt {exch} if (Unknown)
          23 dict
                  dup [612 792] (Letter) put
                  dup [612 1008] (Legal) put
                  dup [595 842] (A4) put
                  {exch aload pop 4 index sub abs 5 le exch
                   5 index sub abs 5 le and
                  {exch pop exit} {pop} ifelse
          } bind forall = flush pop pop
          restore"
    

    Query commands can span multiple lines, however no single line may contain more than 255 characters.

    Importing Existing PPD Files

    CUPS includes a utility called ppdi(1) which allows you to import existing PPD files into the driver information file format used by the PPD compiler ppdc(1). Once imported, you can modify, localize, and regenerate the PPD files easily. Type the following command to import the PPD file mydevice.ppd into the driver information file mydevice.drv:

    ppdi -o mydevice.drv mydevice.ppd
    

    If you have a whole directory of PPD files that you would like to import, you can list multiple filenames or use shell wildcards to import more than one PPD file on the command-line:

    ppdi -o mydevice.drv mydevice1.ppd mydevice2.ppd
    ppdi -o mydevice.drv *.ppd
    

    If the driver information file already exists, the new PPD file entries are appended to the end of the file. Each PPD file is placed in its own group of curly braces within the driver information file.

    Using Custom Filters

    Normally a PostScript printer driver will not utilize any additional print filters. For drivers that provide additional filters such as a CUPS command file filter for doing printer maintenance, you must also list the following Filter directive to handle printing PostScript files:

    Filter application/vnd.cups-postscript 0 -
    

    Custom Command Filters

    The application/vnd.cups-command file type is used for CUPS command files. Use the following Filter directive to handle CUPS command files:

    Filter application/vnd.cups-command 100 /path/to/command/filter
    

    To use the standard PostScript command filter, specify commandtops as the path to the command filter.

    Custom PDF Filters

    The application/pdf file type is used for unfiltered PDF files while the application/vnd.cups-pdf file type is used for filtered PDF files. Use the following Filter directive to handle filtered PDF files:

    Filter application/vnd.cups-pdf 100 /path/to/pdf/filter
    

    For unfiltered PDF files, use:

    Filter application/pdf 100 /path/to/pdf/filter
    

    Custom PDF filters that accept filtered data do not need to perform number-up processing and other types of page imposition, while those that accept unfiltered data MUST do the number-up processing themselves.

    Custom PostScript Filters

    The application/vnd.cups-postscript file type is used for filtered PostScript files. Use the following Filter directive to handle PostScript files:

    Filter application/vnd.cups-postscript 100 /path/to/postscript/filter
    

    Implementing Color Management

    CUPS uses ICC color profiles to provide more accurate color reproduction. The cupsICCProfile attribute defines the color profiles that are available for a given printer, for example:

    Attribute cupsICCProfile "ColorModel.MediaType.Resolution/Description" /path/to/ICC/profile
    

    where "ColorModel.MediaType.Resolution" defines a selector based on the corresponding option selections. A simple driver might only define profiles for the color models that are supported, for example a printer supporting Gray and RGB might use:

    Attribute cupsICCProfile "Gray../Grayscale Profile" /path/to/ICC/gray-profile
    Attribute cupsICCProfile "RGB../Full Color Profile" /path/to/ICC/rgb-profile
    

    The options used for profile selection can be customized using the cupsICCQualifier2 and cupsICCQualifier3 attributes.

    Adding macOS Features

    macOS printer drivers can provide additional attributes to specify additional option panes in the print dialog, an image of the printer, a help book, and option presets for the driver software:

    Attribute APDialogExtension "" /Library/Printers/Vendor/filename.plugin
    Attribute APHelpBook "" /Library/Printers/Vendor/filename.bundle
    Attribute APPrinterIconPath "" /Library/Printers/Vendor/filename.icns
    Attribute APPrinterPreset "name/text" "*option choice ..."
    
    cups-2.2.7/filter/ppd-compiler.header000664 000765 000024 00000002772 13255074424 020215 0ustar00msweetstaff000000 000000

    Introduction to the PPD Compiler

    This document describes how to use the CUPS PostScript Printer Description (PPD) file compiler. The PPD compiler generates PPD files from simple text files that describe the features and capabilities of one or more printers.

    Note:

    The PPD compiler and related tools are deprecated and will be removed in a future release of CUPS.

    cups-2.2.7/filter/ppd-compiler.shtml000664 000765 000024 00000107516 13255074424 020116 0ustar00msweetstaff000000 000000

    The Basics

    The PPD compiler, ppdc(1), is a simple command-line tool that takes a single driver information file, which by convention uses the extension .drv, and produces one or more PPD files that may be distributed with your printer drivers for use with CUPS. For example, you would run the following command to create the English language PPD files defined by the driver information file mydrivers.drv:

    ppdc mydrivers.drv
    

    The PPD files are placed in a subdirectory called ppd. The -d option is used to put the PPD files in a different location, for example:

    ppdc -d myppds mydrivers.drv
    

    places the PPD files in a subdirectory named myppds. Finally, use the -l option to specify the language localization for the PPD files that are created, for example:

    ppdc -d myppds/de -l de mydrivers.drv
    ppdc -d myppds/en -l en mydrivers.drv
    ppdc -d myppds/es -l es mydrivers.drv
    ppdc -d myppds/fr -l fr mydrivers.drv
    ppdc -d myppds/it -l it mydrivers.drv
    

    creates PPD files in German (de), English (en), Spanish (es), French (fr), and Italian (it) in the corresponding subdirectories. Specify multiple languages (separated by commas) to produce "globalized" PPD files:

    ppdc -d myppds -l de,en,es,fr,it mydrivers.drv
    

    Driver Information Files

    The driver information files accepted by the PPD compiler are plain text files that define the various attributes and options that are included in the PPD files that are generated. A driver information file can define the information for one or more printers and their corresponding PPD files.

    Listing 1: "examples/minimum.drv"

    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // List the fonts that are supported, in this case all standard fonts...
    Font *
    
    // Manufacturer, model name, and version
    Manufacturer "Foo"
    ModelName "FooJet 2000"
    Version 1.0
    
    // Each filter provided by the driver...
    Filter application/vnd.cups-raster 100 rastertofoo
    
    // Supported page sizes
    *MediaSize Letter
    MediaSize A4
    
    // Supported resolutions
    *Resolution k 8 0 0 0 "600dpi/600 DPI"
    
    // Specify the name of the PPD file we want to generate...
    PCFileName "foojet2k.ppd"
    

    A Simple Example

    The example in Listing 1 shows a driver information file which defines the minimum required attributes to provide a valid PPD file. The first part of the file includes standard definition files for fonts and media sizes:

    #include <font.defs>
    #include <media.defs>
    

    The #include directive works just like the C/C++ include directive; files included using the angle brackets (<filename>) are found in any of the standard include directories and files included using quotes ("filename") are found in the same directory as the source or include file. The <font.defs> include file defines the standard fonts which are included with GPL Ghostscript and the Apple PDF RIP, while the <media.defs> include file defines the standard media sizes listed in Appendix B of the Adobe PostScript Printer Description File Format Specification.

    CUPS provides several other standard include files:

    • <epson.h> - Defines all of the rastertoepson driver constants.
    • <escp.h> - Defines all of the rastertoescpx driver constants.
    • <hp.h> - Defines all of the rastertohp driver constants.
    • <label.h> - Defines all of the rastertolabel driver constants.
    • <pcl.h> - Defines all of the rastertopclx driver constants.
    • <raster.defs> - Defines all of the CUPS raster format constants.

    Next we list all of the fonts that are available in the driver; for CUPS raster drivers, the following line is all that is usually supplied:

    Font *
    

    The Font directive specifies the name of a single font or the asterisk to specify all fonts. For example, you would use the following line to define an additional bar code font that you are supplying with your printer driver:

    //   name         encoding  version  charset  status
    Font Barcode-Foo  Special   "(1.0)"  Special  ROM
    

    The name of the font is Barcode-Foo. Since it is not a standard text font, the encoding and charset name Special is used. The version number is 1.0 and the status (where the font is located) is ROM to indicate that the font does not need to be embedded in documents that use the font for this printer.

    Third comes the manufacturer, model name, and version number information strings:

    Manufacturer "Foo"
    ModelName "FooJet 2000"
    Version 1.0
    

    These strings are used when the user (or auto-configuration program) selects the printer driver for a newly connected device.

    The list of filters comes after the information strings; for the example in Listing 1, we have a single filter that takes CUPS raster data:

    Filter application/vnd.cups-raster 100 rastertofoo
    

    Each filter specified in the driver information file is the equivalent of a printer driver for that format; if a user submits a print job in a different format, CUPS figures out the sequence of commands that will produce a supported format for the least relative cost.

    Once we have defined the driver information we specify the supported options. For the example driver we support a single resolution of 600 dots per inch and two media sizes, A4 and Letter:

    *MediaSize Letter
    MediaSize A4
    
    *Resolution k 8 0 0 0 "600dpi/600 DPI"
    

    The asterisk in front of the MediaSize and Resolution directives specify that those option choices are the default. The MediaSize directive is followed by a media size name which is normally defined in the <media.defs> file and corresponds to a standard Adobe media size name. If the default media size is Letter, the PPD compiler will override it to be A4 for non-English localizations for you automatically.

    The Resolution directive accepts several values after it as follows:

    1. Colorspace for this resolution, if any. In the example file, the colorspace k is used which corresponds to black. For printer drivers that support color printing, this field is usually specified as "-" for "no change".
    2. Bits per color. In the example file, we define 8 bits per color, for a continuous-tone grayscale output. All versions of CUPS support 1 and 8 bits per color. CUPS 1.2 and higher (macOS 10.5 and higher) also supports 16 bits per color.
    3. Rows per band. In the example file, we define 0 rows per band to indicate that our printer driver does not process the page in bands.
    4. Row feed. In the example, we define the feed value to be 0 to indicate that our printer driver does not interleave the output.
    5. Row step. In the example, we define the step value to be 0 to indicate that our printer driver does not interleave the output. This value normally indicates the spacing between the nozzles of an inkjet printer - when combined with the previous two values, it informs the driver how to stagger the output on the page to produce interleaved lines on the page for higher-resolution output.
    6. Choice name and text. In the example, we define the choice name and text to be "600dpi/600 DPI". The name and text are separated by slash (/) character; if no text is specified, then the name is used as the text. The PPD compiler parses the name to determine the actual resolution; the name can be of the form RESOLUTIONdpi for resolutions that are equal horizontally and vertically or HRESxVRESdpi for isometric resolutions. Only integer resolution values are supported, so a resolution name of 300dpi is valid while 300.1dpi is not.

    Finally, the PCFileName directive specifies that the named PPD file should be written for the current driver definitions:

    PCFileName "foojet2k.ppd"
    

    The filename follows the directive and must conform to the Adobe filename requirements in the Adobe Postscript Printer Description File Format Specification. Specifically, the filename may not exceed 8 characters followed by the extension .ppd. The FileName directive can be used to specify longer filenames:

    FileName "FooJet 2000"
    

    Grouping and Inheritance

    The previous example created a single PPD file. Driver information files can also define multiple printers by using the PPD compiler grouping functionality. Directives are grouped using the curly braces ({ and }) and every group that uses the PCFileName or FileName directives produces a PPD file with that name. Listing 2 shows a variation of the original example that uses two groups to define two printers that share the same printer driver filter but provide two different resolution options.

    Listing 2: "examples/grouping.drv"

    
    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // List the fonts that are supported, in this case all standard fonts...
    Font *
    
    // Manufacturer and version
    Manufacturer "Foo"
    Version 1.0
    
    // Each filter provided by the driver...
    Filter application/vnd.cups-raster 100 rastertofoo
    
    // Supported page sizes
    *MediaSize Letter
    MediaSize A4
    
    {
      // Supported resolutions
      *Resolution k 8 0 0 0 "600dpi/600 DPI"
    
      // Specify the model name and filename...
      ModelName "FooJet 2000"
      PCFileName "foojet2k.ppd"
    }
    
    {
      // Supported resolutions
      *Resolution k 8 0 0 0 "1200dpi/1200 DPI"
    
      // Specify the model name and filename...
      ModelName "FooJet 2001"
      PCFileName "foojt2k1.ppd"
    }
    

    The second example is essentially the same as the first, except that each printer model is defined inside of a pair of curly braces. For example, the first printer is defined using:

    {
      // Supported resolutions
      *Resolution k 8 0 0 0 "600dpi/600 DPI"
    
      // Specify the model name and filename...
      ModelName "FooJet 2000"
      PCFileName "foojet2k.ppd"
    }
    

    The printer inherits all of the definitions from the parent group (the top part of the file) and adds the additional definitions inside the curly braces for that printer driver. When we define the second group, it also inherits the same definitions from the parent group but none of the definitions from the first driver. Groups can be nested to any number of levels to support variations of similar models without duplication of information.

    Color Support

    For printer drivers that support color printing, the ColorDevice and ColorModel directives should be used to tell the printing system that color output is desired and in what formats. Listing 3 shows a variation of the previous example which includes a color printer that supports printing at 300 and 600 DPI.

    The key changes are the addition of the ColorDevice directive:

    ColorDevice true
    

    which tells the printing system that the printer supports color printing, and the ColorModel directives:

    ColorModel Gray/Grayscale w chunky 0
    *ColorModel RGB/Color rgb chunky 0
    

    which tell the printing system which colorspaces are supported by the printer driver for color printing. Each of the ColorModel directives is followed by the option name and text (Gray/Grayscale and RGB/Color), the colorspace name (w and rgb), the color organization (chunky), and the compression mode number (0) to be passed to the driver. The option name can be any of the standard Adobe ColorModel names:

    • Gray - Grayscale output.
    • RGB - Color output, typically using the RGB colorspace, but without a separate black channel.
    • CMYK - Color output with a separate black channel.

    Custom names can be used, however it is recommended that you use your vendor prefix for any custom names, for example "fooName".

    The colorspace name can be any of the following universally supported colorspaces:

    • w - Luminance
    • rgb - Red, green, blue
    • k - Black
    • cmy - Cyan, magenta, yellow
    • cmyk - Cyan, magenta, yellow, black

    The color organization can be any of the following values:

    • chunky - Color values are passed together on a line as RGB RGB RGB RGB
    • banded - Color values are passed separately on a line as RRRR GGGG BBBB; not supported by the Apple RIP filters
    • planar - Color values are passed separately on a page as RRRR RRRR RRRR ... GGGG GGGG GGGG ... BBBB BBBB BBBB; not supported by the Apple RIP filters

    The compression mode value is passed to the driver in the cupsCompression attribute. It is traditionally used to select an appropriate compression mode for the color model but can be used for any purpose, such as specifying a photo mode vs. standard mode.

    Listing 3: "examples/color.drv"

    
    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // List the fonts that are supported, in this case all standard fonts...
    Font *
    
    // Manufacturer and version
    Manufacturer "Foo"
    Version 1.0
    
    // Each filter provided by the driver...
    Filter application/vnd.cups-raster 100 rastertofoo
    
    // Supported page sizes
    *MediaSize Letter
    MediaSize A4
    
    {
      // Supported resolutions
      *Resolution k 8 0 0 0 "600dpi/600 DPI"
    
      // Specify the model name and filename...
      ModelName "FooJet 2000"
      PCFileName "foojet2k.ppd"
    }
    
    {
      // Supports color printing
      ColorDevice true
    
      // Supported colorspaces
      ColorModel Gray/Grayscale w chunky 0
      *ColorModel RGB/Color rgb chunky 0
    
      // Supported resolutions
      *Resolution - 8 0 0 0 "300dpi/300 DPI"
      Resolution - 8 0 0 0 "600dpi/600 DPI"
    
      // Specify the model name and filename...
      ModelName "FooJet Color"
      PCFileName "foojetco.ppd"
    }
    

    Defining Custom Options and Option Groups

    The Group, Option, and Choice directives are used to define or select a group, option, or choice. Listing 4 shows a variation of the first example that provides two custom options in a group named "Footasm".

    Listing 4: "examples/custom.drv"

    
    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // List the fonts that are supported, in this case all standard fonts...
    Font *
    
    // Manufacturer, model name, and version
    Manufacturer "Foo"
    ModelName "FooJet 2000"
    Version 1.0
    
    // Each filter provided by the driver...
    Filter application/vnd.cups-raster 100 rastertofoo
    
    // Supported page sizes
    *MediaSize Letter
    MediaSize A4
    
    // Supported resolutions
    *Resolution k 8 0 0 0 "600dpi/600 DPI"
    
    // Option Group
    Group "Footasm"
    
      // Boolean option
      Option "fooEnhance/Resolution Enhancement" Boolean AnySetup 10
        *Choice True/Yes "<</cupsCompression 1>>setpagedevice"
        Choice False/No "<</cupsCompression 0>>setpagedevice"
    
      // Multiple choice option
      Option "fooOutputType/Output Quality" PickOne AnySetup 10
        *Choice "Auto/Automatic Selection"
                "<</OutputType(Auto)>>setpagedevice""
        Choice "Text/Optimize for Text"
                "<</OutputType(Text)>>setpagedevice""
        Choice "Graph/Optimize for Graphics"
                "<</OutputType(Graph)>>setpagedevice""
        Choice "Photo/Optimize for Photos"
                "<</OutputType(Photo)>>setpagedevice""
    
    // Specify the name of the PPD file we want to generate...
    PCFileName "foojet2k.ppd"
    

    The custom group is introduced by the Group directive which is followed by the name and optionally text for the user:

    Group "Footasm/Footastic Options"
    

    The group name must conform to the PPD specification and cannot exceed 40 characters in length. If you specify user text, it cannot exceed 80 characters in length. The groups General, Extra, and InstallableOptions are predefined by CUPS; the general and extra groups are filled by the UI options defined by the PPD specification. The InstallableOptions group is reserved for options that define whether accessories for the printer (duplexer unit, finisher, stapler, etc.) are installed.

    Once the group is specified, the Option directive is used to introduce a new option:

    Option "fooEnhance/Resolution Enhancement" Boolean AnySetup 10
    

    The directive is followed by the name of the option and any optional user text, the option type, the PostScript document group, and the sort order number. The option name must conform to the PPD specification and cannot exceed 40 characters in length. If you specify user text, it cannot exceed 80 characters in length.

    The option type can be Boolean for true/false selections, PickOne for picking one of many choices, or PickMany for picking zero or more choices. Boolean options can have at most two choices with the names False and True. Pick options can have any number of choices, although for Windows compatibility reasons the number of choices should not exceed 255.

    The PostScript document group is typically AnySetup, meaning that the option can be introduced at any point in the PostScript document. Other values include PageSetup to include the option before each page and DocumentSetup to include the option once at the beginning of the document.

    The sort order number is used to sort the printer commands associated with each option choice within the PostScript document. This allows you to setup certain options before others as required by the printer. For most CUPS raster printer drivers, the value 10 can be used for all options.

    Once the option is specified, each option choice can be listed using the Choice directive:

    *Choice True/Yes "<</cupsCompression 1>>setpagedevice"
    Choice False/No "<</cupsCompression 0>>setpagedevice"
    

    The directive is followed by the choice name and optionally user text, and the PostScript commands that should be inserted when printing a file to this printer. The option name must conform to the PPD specification and cannot exceed 40 characters in length. If you specify user text, it cannot exceed 80 characters in length.

    The PostScript commands are also interpreted by any RIP filters, so these commands typically must be present for all option choices. Most commands take the form:

    <</name value>>setpagedevice
    

    where name is the name of the PostScript page device attribute and value is the numeric or string value for that attribute.

    Defining Constants

    Sometimes you will want to define constants for your drivers so that you can share values in different groups within the same driver information file, or to share values between different driver information files using the #include directive. The #define directive is used to define constants for use in your printer definitions:

    #define NAME value
    

    The NAME is any sequence of letters, numbers, and the underscore. The value is a number or string; if the value contains spaces you must put double quotes around it, for example:

    #define FOO "My String Value"
    

    Constants can also be defined on the command-line using the -D option:

    ppdc -DNAME="value" filename.drv
    

    Once defined, you use the notation $NAME to substitute the value of the constant in the file, for example:

    #define MANUFACTURER "Foo"
    #define FOO_600      0
    #define FOO_1200     1
    
    {
      Manufacturer "$MANUFACTURER"
      ModelNumber $FOO_600
      ModelName "FooJet 2000"
      ...
    }
    
    {
      Manufacturer "$MANUFACTURER"
      ModelNumber $FOO_1200
      ModelName "FooJet 2001"
      ...
    }
    

    Numeric constants can be bitwise OR'd together by placing the constants inside parenthesis, for example:

    // ModelNumber capability bits
    #define DUPLEX 1
    #define COLOR  2
    
    ...
    
    {
      // Define a model number specifying the capabilities of the printer...
      ModelNumber ($DUPLEX $COLOR)
      ...
    }
    

    Conditional Statements

    The PPD compiler supports conditional compilation using the #if, #elif, #else, and #endif directives. The #if and #elif directives are followed by a constant name or an expression. For example, to include a group of options when "ADVANCED" is defined:

    #if ADVANCED
    Group "Advanced/Advanced Options"
      Option "fooCyanAdjust/Cyan Adjustment"
        Choice "plus10/+10%" ""
        Choice "plus5/+5%" ""
        *Choice "none/No Adjustment" ""
        Choice "minus5/-5%" ""
        Choice "minus10/-10%" ""
      Option "fooMagentaAdjust/Magenta Adjustment"
        Choice "plus10/+10%" ""
        Choice "plus5/+5%" ""
        *Choice "none/No Adjustment" ""
        Choice "minus5/-5%" ""
        Choice "minus10/-10%" ""
      Option "fooYellowAdjust/Yellow Adjustment"
        Choice "plus10/+10%" ""
        Choice "plus5/+5%" ""
        *Choice "none/No Adjustment" ""
        Choice "minus5/-5%" ""
        Choice "minus10/-10%" ""
      Option "fooBlackAdjust/Black Adjustment"
        Choice "plus10/+10%" ""
        Choice "plus5/+5%" ""
        *Choice "none/No Adjustment" ""
        Choice "minus5/-5%" ""
        Choice "minus10/-10%" ""
    #endif
    

    Defining Constraints

    Constraints are strings that are used to specify that one or more option choices are incompatible, for example two-sided printing on transparency media. Constraints are also used to prevent the use of uninstalled features such as the duplexer unit, additional media trays, and so forth.

    The UIConstraints directive is used to specify a constraint that is placed in the PPD file. The directive is followed by a string using one of the following formats:

    UIConstraints "*Option1 *Option2"
    UIConstraints "*Option1 Choice1 *Option2"
    UIConstraints "*Option1 *Option2 Choice2"
    UIConstraints "*Option1 Choice1 *Option2 Choice2"
    

    Each option name is preceded by the asterisk (*). If no choice is given for an option, then all choices except False and None will conflict with the other option and choice(s). Since the PPD compiler automatically adds reciprocal constraints (option A conflicts with option B, so therefore option B conflicts with option A), you need only specify the constraint once.

    Listing 5: "examples/constraint.drv"

    
    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // List the fonts that are supported, in this case all standard fonts...
    Font *
    
    // Manufacturer, model name, and version
    Manufacturer "Foo"
    ModelName "FooJet 2000"
    Version 1.0
    
    // Each filter provided by the driver...
    Filter application/vnd.cups-raster 100 rastertofoo
    
    // Supported page sizes
    *MediaSize Letter
    MediaSize A4
    
    // Supported resolutions
    *Resolution k 8 0 0 0 "600dpi/600 DPI"
    
    // Installable Option Group
    Group "InstallableOptions/Options Installed"
    
      // Duplexing unit option
      Option "OptionDuplexer/Duplexing Unit" Boolean AnySetup 10
        Choice True/Installed ""
        *Choice "False/Not Installed" ""
    
    // General Option Group
    Group General
    
      // Duplexing option
      Option "Duplex/Two-Sided Printing" PickOne AnySetup 10
        *Choice "None/No" "<</Duplex false>>setpagedevice""
        Choice "DuplexNoTumble/Long Edge Binding"
               "<</Duplex true/Tumble false>>setpagedevice""
        Choice "DuplexTumble/Short Edge Binding"
               "<</Duplex true/Tumble true>>setpagedevice""
    
    // Only allow duplexing if the duplexer is installed
    UIConstraints "*Duplex *OptionDuplexer False"
    
    // Specify the name of the PPD file we want to generate...
    PCFileName "foojet2k.ppd"
    

    Listing 5 shows a variation of the first example with an added Duplex option and installable option for the duplexer, OptionDuplex. A constraint is added at the end to specify that any choice of the Duplex option that is not None is incompatible with the "Duplexer Installed" option set to "Not Installed" (False):

    UIConstraints "*Duplex *OptionDuplexer False"
    

    Enhanced Constraints

    CUPS 1.4 supports constraints between 2 or more options using the Attribute directive. cupsUIConstraints attributes define the constraints, while cupsUIResolver attributes define option changes to resolve constraints. For example, we can specify the previous duplex constraint with a resolver that turns off duplexing with the following two lines:

    Attribute cupsUIConstraints DuplexOff "*Duplex *OptionDuplexer False"
    Attribute cupsUIResolver DuplexOff "*Duplex None"
    

    Localization

    The PPD compiler provides localization of PPD files in different languages through message catalog files in the GNU gettext or Apple .strings formats. Each user text string and several key PPD attribute values such as LanguageVersion and LanguageEncoding are looked up in the corresponding message catalog and the translated text is substituted in the generated PPD files. One message catalog file can be used by multiple driver information files, and each file contains a single language translation.

    The ppdpo Utility

    While CUPS includes localizations of all standard media sizes and options in several languages, your driver information files may provide their own media sizes and options that need to be localized. CUPS provides a utility program to aid in the localization of drivers called ppdpo(1). The ppdpo program creates or updates a message catalog file based upon one or more driver information files. New messages are added with the word "TRANSLATE" added to the front of the translation string to make locating new strings for translation easier. The program accepts the message catalog filename and one or more driver information files.

    For example, run the following command to create a new German message catalog called de.po for all of the driver information files in the current directory:

    ppdpo -o de.po *.drv
    

    If the file de.po already exists, ppdpo will update the contents of the file with any new messages that need to be translated. To create an Apple .strings file instead, specify the output filename with a .strings extension, for example:

    ppdpo -o de.strings *.drv
    

    Using Message Catalogs with the PPD Compiler

    Once you have created a message catalog, use the #po directive to declare it in each driver information file. For example, to declare the German message catalog for a driver use:

    #po de "de.po"  // German
    

    In fact, you can use the #po directive as many times as needed:

    #po de "de.po"  // German
    #po es "es.po"  // Spanish
    #po fr "fr.po"  // French
    #po it "it.po"  // Italian
    #po ja "ja.po"  // Japanese
    

    The filename ("de.po", etc.) can be relative to the location of the driver information file or an absolute path. Once defined, the PPD compiler will automatically generate a globalized PPD for every language declared in your driver information file. To generate a single-language PPD file, simply use the -l option to list the corresponding locale, for example:

    ppdc -l de -d ppd/de mydrivers.drv
    

    to generate German PPD files.

    cups-2.2.7/filter/pstops.c000664 000765 000024 00000251510 13255074424 016140 0ustar00msweetstaff000000 000000 /* * PostScript filter for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1993-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "common.h" #include #include #include #include #include #include /* * Constants... */ #define PSTOPS_BORDERNONE 0 /* No border or hairline border */ #define PSTOPS_BORDERTHICK 1 /* Think border */ #define PSTOPS_BORDERSINGLE 2 /* Single-line hairline border */ #define PSTOPS_BORDERSINGLE2 3 /* Single-line thick border */ #define PSTOPS_BORDERDOUBLE 4 /* Double-line hairline border */ #define PSTOPS_BORDERDOUBLE2 5 /* Double-line thick border */ #define PSTOPS_LAYOUT_LRBT 0 /* Left to right, bottom to top */ #define PSTOPS_LAYOUT_LRTB 1 /* Left to right, top to bottom */ #define PSTOPS_LAYOUT_RLBT 2 /* Right to left, bottom to top */ #define PSTOPS_LAYOUT_RLTB 3 /* Right to left, top to bottom */ #define PSTOPS_LAYOUT_BTLR 4 /* Bottom to top, left to right */ #define PSTOPS_LAYOUT_TBLR 5 /* Top to bottom, left to right */ #define PSTOPS_LAYOUT_BTRL 6 /* Bottom to top, right to left */ #define PSTOPS_LAYOUT_TBRL 7 /* Top to bottom, right to left */ #define PSTOPS_LAYOUT_NEGATEY 1 /* The bits for the layout */ #define PSTOPS_LAYOUT_NEGATEX 2 /* definitions above... */ #define PSTOPS_LAYOUT_VERTICAL 4 /* * Types... */ typedef struct /**** Page information ****/ { char *label; /* Page label */ int bounding_box[4]; /* PageBoundingBox */ off_t offset; /* Offset to start of page */ ssize_t length; /* Number of bytes for page */ int num_options; /* Number of options for this page */ cups_option_t *options; /* Options for this page */ } pstops_page_t; typedef struct /**** Document information ****/ { int page; /* Current page */ int bounding_box[4]; /* BoundingBox from header */ int new_bounding_box[4]; /* New composite bounding box */ int num_options; /* Number of document-wide options */ cups_option_t *options; /* Document-wide options */ int normal_landscape, /* Normal rotation for landscape? */ saw_eof, /* Saw the %%EOF comment? */ slow_collate, /* Collate copies by hand? */ slow_duplex, /* Duplex pages slowly? */ slow_order, /* Reverse pages slowly? */ use_ESPshowpage; /* Use ESPshowpage? */ cups_array_t *pages; /* Pages in document */ cups_file_t *temp; /* Temporary file, if any */ char tempfile[1024]; /* Temporary filename */ int job_id; /* Job ID */ const char *user, /* User name */ *title; /* Job name */ int copies; /* Number of copies */ const char *ap_input_slot, /* AP_FIRSTPAGE_InputSlot value */ *ap_manual_feed, /* AP_FIRSTPAGE_ManualFeed value */ *ap_media_color, /* AP_FIRSTPAGE_MediaColor value */ *ap_media_type, /* AP_FIRSTPAGE_MediaType value */ *ap_page_region, /* AP_FIRSTPAGE_PageRegion value */ *ap_page_size; /* AP_FIRSTPAGE_PageSize value */ int collate, /* Collate copies? */ emit_jcl, /* Emit JCL commands? */ fit_to_page; /* Fit pages to media */ const char *input_slot, /* InputSlot value */ *manual_feed, /* ManualFeed value */ *media_color, /* MediaColor value */ *media_type, /* MediaType value */ *page_region, /* PageRegion value */ *page_size; /* PageSize value */ int mirror, /* doc->mirror/mirror pages */ number_up, /* Number of pages on each sheet */ number_up_layout, /* doc->number_up_layout of N-up pages */ output_order, /* Requested reverse output order? */ page_border; /* doc->page_border around pages */ const char *page_label, /* page-label option, if any */ *page_ranges, /* page-ranges option, if any */ *page_set; /* page-set option, if any */ } pstops_doc_t; /* * Convenience macros... */ #define is_first_page(p) (doc->number_up == 1 || \ ((p) % doc->number_up) == 1) #define is_last_page(p) (doc->number_up == 1 || \ ((p) % doc->number_up) == 0) #define is_not_last_page(p) (doc->number_up > 1 && \ ((p) % doc->number_up) != 0) /* * Local globals... */ static int JobCanceled = 0;/* Set to 1 on SIGTERM */ /* * Local functions... */ static pstops_page_t *add_page(pstops_doc_t *doc, const char *label); static void cancel_job(int sig); static int check_range(pstops_doc_t *doc, int page); static void copy_bytes(cups_file_t *fp, off_t offset, size_t length); static ssize_t copy_comments(cups_file_t *fp, pstops_doc_t *doc, ppd_file_t *ppd, char *line, ssize_t linelen, size_t linesize); static void copy_dsc(cups_file_t *fp, pstops_doc_t *doc, ppd_file_t *ppd, char *line, ssize_t linelen, size_t linesize); static void copy_non_dsc(cups_file_t *fp, pstops_doc_t *doc, ppd_file_t *ppd, char *line, ssize_t linelen, size_t linesize); static ssize_t copy_page(cups_file_t *fp, pstops_doc_t *doc, ppd_file_t *ppd, int number, char *line, ssize_t linelen, size_t linesize); static ssize_t copy_prolog(cups_file_t *fp, pstops_doc_t *doc, ppd_file_t *ppd, char *line, ssize_t linelen, size_t linesize); static ssize_t copy_setup(cups_file_t *fp, pstops_doc_t *doc, ppd_file_t *ppd, char *line, ssize_t linelen, size_t linesize); static ssize_t copy_trailer(cups_file_t *fp, pstops_doc_t *doc, ppd_file_t *ppd, int number, char *line, ssize_t linelen, size_t linesize); static void do_prolog(pstops_doc_t *doc, ppd_file_t *ppd); static void do_setup(pstops_doc_t *doc, ppd_file_t *ppd); static void doc_printf(pstops_doc_t *doc, const char *format, ...) __attribute__ ((__format__ (__printf__, 2, 3))); static void doc_puts(pstops_doc_t *doc, const char *s); static void doc_write(pstops_doc_t *doc, const char *s, size_t len); static void end_nup(pstops_doc_t *doc, int number); static int include_feature(ppd_file_t *ppd, const char *line, int num_options, cups_option_t **options); static char *parse_text(const char *start, char **end, char *buffer, size_t bufsize); static void set_pstops_options(pstops_doc_t *doc, ppd_file_t *ppd, char *argv[], int num_options, cups_option_t *options); static ssize_t skip_page(cups_file_t *fp, char *line, ssize_t linelen, size_t linesize); static void start_nup(pstops_doc_t *doc, int number, int show_border, const int *bounding_box); static void write_label_prolog(pstops_doc_t *doc, const char *label, float bottom, float top, float width); static void write_labels(pstops_doc_t *doc, int orient); static void write_options(pstops_doc_t *doc, ppd_file_t *ppd, int num_options, cups_option_t *options); /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { pstops_doc_t doc; /* Document information */ cups_file_t *fp; /* Print file */ ppd_file_t *ppd; /* PPD file */ int num_options; /* Number of print options */ cups_option_t *options; /* Print options */ char line[8192]; /* Line buffer */ ssize_t len; /* Length of line buffer */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ /* * Make sure status messages are not buffered... */ setbuf(stderr, NULL); /* * Ignore broken pipe signals... */ signal(SIGPIPE, SIG_IGN); /* * Check command-line... */ if (argc < 6 || argc > 7) { _cupsLangPrintf(stderr, _("Usage: %s job-id user title copies options [file]"), argv[0]); return (1); } /* * Register a signal handler to cleanly cancel a job. */ #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */ sigset(SIGTERM, cancel_job); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); action.sa_handler = cancel_job; sigaction(SIGTERM, &action, NULL); #else signal(SIGTERM, cancel_job); #endif /* HAVE_SIGSET */ /* * If we have 7 arguments, print the file named on the command-line. * Otherwise, send stdin instead... */ if (argc == 6) fp = cupsFileStdin(); else { /* * Try to open the print file... */ if ((fp = cupsFileOpen(argv[6], "r")) == NULL) { if (!JobCanceled) { fprintf(stderr, "DEBUG: Unable to open \"%s\".\n", argv[6]); _cupsLangPrintError("ERROR", _("Unable to open print file")); } return (1); } } /* * Read the first line to see if we have DSC comments... */ if ((len = (ssize_t)cupsFileGetLine(fp, line, sizeof(line))) == 0) { fputs("DEBUG: The print file is empty.\n", stderr); return (1); } /* * Process command-line options... */ options = NULL; num_options = cupsParseOptions(argv[5], 0, &options); ppd = SetCommonOptions(num_options, options, 1); set_pstops_options(&doc, ppd, argv, num_options, options); /* * Write any "exit server" options that have been selected... */ ppdEmit(ppd, stdout, PPD_ORDER_EXIT); /* * Write any JCL commands that are needed to print PostScript code... */ if (doc.emit_jcl) ppdEmitJCL(ppd, stdout, doc.job_id, doc.user, doc.title); /* * Start with a DSC header... */ puts("%!PS-Adobe-3.0"); /* * Skip leading PJL in the document... */ while (!strncmp(line, "\033%-12345X", 9) || !strncmp(line, "@PJL ", 5)) { /* * Yup, we have leading PJL fun, so skip it until we hit the line * with "ENTER LANGUAGE"... */ fputs("DEBUG: Skipping PJL header...\n", stderr); while (strstr(line, "ENTER LANGUAGE") == NULL && strncmp(line, "%!", 2)) if ((len = (ssize_t)cupsFileGetLine(fp, line, sizeof(line))) == 0) break; if (!strncmp(line, "%!", 2)) break; if ((len = (ssize_t)cupsFileGetLine(fp, line, sizeof(line))) == 0) break; } /* * Now see if the document conforms to the Adobe Document Structuring * Conventions... */ if (!strncmp(line, "%!PS-Adobe-", 11)) { /* * Yes, filter the document... */ copy_dsc(fp, &doc, ppd, line, len, sizeof(line)); } else { /* * No, display an error message and treat the file as if it contains * a single page... */ copy_non_dsc(fp, &doc, ppd, line, len, sizeof(line)); } /* * Send %%EOF as needed... */ if (!doc.saw_eof) puts("%%EOF"); /* * End the job with the appropriate JCL command or CTRL-D... */ if (doc.emit_jcl) { if (ppd && ppd->jcl_end) ppdEmitJCLEnd(ppd, stdout); else putchar(0x04); } /* * Close files and remove the temporary file if needed... */ if (doc.temp) { cupsFileClose(doc.temp); unlink(doc.tempfile); } ppdClose(ppd); cupsFreeOptions(num_options, options); cupsFileClose(fp); return (0); } /* * 'add_page()' - Add a page to the pages array. */ static pstops_page_t * /* O - New page info object */ add_page(pstops_doc_t *doc, /* I - Document information */ const char *label) /* I - Page label */ { pstops_page_t *pageinfo; /* New page info object */ if (!doc->pages) doc->pages = cupsArrayNew(NULL, NULL); if (!doc->pages) { _cupsLangPrintError("EMERG", _("Unable to allocate memory for pages array")); exit(1); } if ((pageinfo = calloc(1, sizeof(pstops_page_t))) == NULL) { _cupsLangPrintError("EMERG", _("Unable to allocate memory for page info")); exit(1); } pageinfo->label = strdup(label); pageinfo->offset = cupsFileTell(doc->temp); cupsArrayAdd(doc->pages, pageinfo); doc->page ++; return (pageinfo); } /* * 'cancel_job()' - Flag the job as canceled. */ static void cancel_job(int sig) /* I - Signal number (unused) */ { (void)sig; JobCanceled = 1; } /* * 'check_range()' - Check to see if the current page is selected for * printing. */ static int /* O - 1 if selected, 0 otherwise */ check_range(pstops_doc_t *doc, /* I - Document information */ int page) /* I - Page number */ { const char *range; /* Pointer into range string */ int lower, upper; /* Lower and upper page numbers */ if (doc->page_set) { /* * See if we only print even or odd pages... */ if (!_cups_strcasecmp(doc->page_set, "even") && (page & 1)) return (0); if (!_cups_strcasecmp(doc->page_set, "odd") && !(page & 1)) return (0); } if (!doc->page_ranges) return (1); /* No range, print all pages... */ for (range = doc->page_ranges; *range != '\0';) { if (*range == '-') { lower = 1; range ++; upper = (int)strtol(range, (char **)&range, 10); } else { lower = (int)strtol(range, (char **)&range, 10); if (*range == '-') { range ++; if (!isdigit(*range & 255)) upper = 65535; else upper = (int)strtol(range, (char **)&range, 10); } else upper = lower; } if (page >= lower && page <= upper) return (1); if (*range == ',') range ++; else break; } return (0); } /* * 'copy_bytes()' - Copy bytes from the input file to stdout. */ static void copy_bytes(cups_file_t *fp, /* I - File to read from */ off_t offset, /* I - Offset to page data */ size_t length) /* I - Length of page data */ { char buffer[8192]; /* Data buffer */ ssize_t nbytes; /* Number of bytes read */ size_t nleft; /* Number of bytes left/remaining */ nleft = length; if (cupsFileSeek(fp, offset) < 0) { _cupsLangPrintError("ERROR", _("Unable to see in file")); return; } while (nleft > 0 || length == 0) { if (nleft > sizeof(buffer) || length == 0) nbytes = sizeof(buffer); else nbytes = (ssize_t)nleft; if ((nbytes = cupsFileRead(fp, buffer, (size_t)nbytes)) < 1) return; nleft -= (size_t)nbytes; fwrite(buffer, 1, (size_t)nbytes, stdout); } } /* * 'copy_comments()' - Copy all of the comments section. * * This function expects "line" to be filled with a comment line. * On return, "line" will contain the next line in the file, if any. */ static ssize_t /* O - Length of next line */ copy_comments(cups_file_t *fp, /* I - File to read from */ pstops_doc_t *doc, /* I - Document info */ ppd_file_t *ppd, /* I - PPD file */ char *line, /* I - Line buffer */ ssize_t linelen, /* I - Length of initial line */ size_t linesize) /* I - Size of line buffer */ { int saw_bounding_box, /* Saw %%BoundingBox: comment? */ saw_for, /* Saw %%For: comment? */ saw_pages, /* Saw %%Pages: comment? */ saw_title; /* Saw %%Title: comment? */ /* * Loop until we see %%EndComments or a non-comment line... */ saw_bounding_box = 0; saw_for = 0; saw_pages = 0; saw_title = 0; while (line[0] == '%') { /* * Strip trailing whitespace... */ while (linelen > 0) { linelen --; if (!isspace(line[linelen] & 255)) break; else line[linelen] = '\0'; } /* * Log the header... */ fprintf(stderr, "DEBUG: %s\n", line); /* * Pull the headers out... */ if (!strncmp(line, "%%Pages:", 8)) { int pages; /* Number of pages */ if (saw_pages) fputs("DEBUG: A duplicate %%Pages: comment was seen.\n", stderr); saw_pages = 1; if (Duplex && (pages = atoi(line + 8)) > 0 && pages <= doc->number_up) { /* * Since we will only be printing on a single page, disable duplexing. */ Duplex = 0; doc->slow_duplex = 0; if (cupsGetOption("sides", doc->num_options, doc->options)) doc->num_options = cupsAddOption("sides", "one-sided", doc->num_options, &(doc->options)); if (cupsGetOption("Duplex", doc->num_options, doc->options)) doc->num_options = cupsAddOption("Duplex", "None", doc->num_options, &(doc->options)); if (cupsGetOption("EFDuplex", doc->num_options, doc->options)) doc->num_options = cupsAddOption("EFDuplex", "None", doc->num_options, &(doc->options)); if (cupsGetOption("EFDuplexing", doc->num_options, doc->options)) doc->num_options = cupsAddOption("EFDuplexing", "False", doc->num_options, &(doc->options)); if (cupsGetOption("KD03Duplex", doc->num_options, doc->options)) doc->num_options = cupsAddOption("KD03Duplex", "None", doc->num_options, &(doc->options)); if (cupsGetOption("JCLDuplex", doc->num_options, doc->options)) doc->num_options = cupsAddOption("JCLDuplex", "None", doc->num_options, &(doc->options)); ppdMarkOption(ppd, "Duplex", "None"); ppdMarkOption(ppd, "EFDuplex", "None"); ppdMarkOption(ppd, "EFDuplexing", "False"); ppdMarkOption(ppd, "KD03Duplex", "None"); ppdMarkOption(ppd, "JCLDuplex", "None"); } } else if (!strncmp(line, "%%BoundingBox:", 14)) { if (saw_bounding_box) fputs("DEBUG: A duplicate %%BoundingBox: comment was seen.\n", stderr); else if (strstr(line + 14, "(atend)")) { /* * Do nothing for now but use the default imageable area... */ } else if (sscanf(line + 14, "%d%d%d%d", doc->bounding_box + 0, doc->bounding_box + 1, doc->bounding_box + 2, doc->bounding_box + 3) != 4) { fputs("DEBUG: A bad %%BoundingBox: comment was seen.\n", stderr); doc->bounding_box[0] = (int)PageLeft; doc->bounding_box[1] = (int)PageBottom; doc->bounding_box[2] = (int)PageRight; doc->bounding_box[3] = (int)PageTop; } saw_bounding_box = 1; } else if (!strncmp(line, "%%For:", 6)) { saw_for = 1; doc_printf(doc, "%s\n", line); } else if (!strncmp(line, "%%Title:", 8)) { saw_title = 1; doc_printf(doc, "%s\n", line); } else if (!strncmp(line, "%cupsRotation:", 14)) { /* * Reset orientation of document? */ int orient = (atoi(line + 14) / 90) & 3; if (orient != Orientation) { /* * Yes, update things so that the pages come out right... */ Orientation = (4 - Orientation + orient) & 3; UpdatePageVars(); Orientation = orient; } } else if (!strcmp(line, "%%EndComments")) { linelen = (ssize_t)cupsFileGetLine(fp, line, linesize); break; } else if (strncmp(line, "%!", 2) && strncmp(line, "%cups", 5)) doc_printf(doc, "%s\n", line); if ((linelen = (ssize_t)cupsFileGetLine(fp, line, linesize)) == 0) break; } if (!saw_bounding_box) fputs("DEBUG: There wasn't a %%BoundingBox: comment in the header.\n", stderr); if (!saw_pages) fputs("DEBUG: There wasn't a %%Pages: comment in the header.\n", stderr); if (!saw_for) WriteTextComment("For", doc->user); if (!saw_title) WriteTextComment("Title", doc->title); if (doc->copies != 1 && (!doc->collate || !doc->slow_collate)) { /* * Tell the document processor the copy and duplex options * that are required... */ doc_printf(doc, "%%%%Requirements: numcopies(%d)%s%s\n", doc->copies, doc->collate ? " collate" : "", Duplex ? " duplex" : ""); /* * Apple uses RBI comments for various non-PPD options... */ doc_printf(doc, "%%RBINumCopies: %d\n", doc->copies); } else { /* * Tell the document processor the duplex option that is required... */ if (Duplex) doc_puts(doc, "%%Requirements: duplex\n"); /* * Apple uses RBI comments for various non-PPD options... */ doc_puts(doc, "%RBINumCopies: 1\n"); } doc_puts(doc, "%%Pages: (atend)\n"); doc_puts(doc, "%%BoundingBox: (atend)\n"); doc_puts(doc, "%%EndComments\n"); return (linelen); } /* * 'copy_dsc()' - Copy a DSC-conforming document. * * This function expects "line" to be filled with the %!PS-Adobe comment line. */ static void copy_dsc(cups_file_t *fp, /* I - File to read from */ pstops_doc_t *doc, /* I - Document info */ ppd_file_t *ppd, /* I - PPD file */ char *line, /* I - Line buffer */ ssize_t linelen, /* I - Length of initial line */ size_t linesize) /* I - Size of line buffer */ { int number; /* Page number */ pstops_page_t *pageinfo; /* Page information */ /* * Make sure we use ESPshowpage for EPS files... */ if (strstr(line, "EPSF")) { doc->use_ESPshowpage = 1; doc->number_up = 1; } /* * Start sending the document with any commands needed... */ fprintf(stderr, "DEBUG: Before copy_comments - %s", line); linelen = copy_comments(fp, doc, ppd, line, linelen, linesize); /* * Now find the prolog section, if any... */ fprintf(stderr, "DEBUG: Before copy_prolog - %s", line); linelen = copy_prolog(fp, doc, ppd, line, linelen, linesize); /* * Then the document setup section... */ fprintf(stderr, "DEBUG: Before copy_setup - %s", line); linelen = copy_setup(fp, doc, ppd, line, linelen, linesize); /* * Copy until we see %%Page:... */ while (strncmp(line, "%%Page:", 7) && strncmp(line, "%%Trailer", 9)) { doc_write(doc, line, (size_t)linelen); if ((linelen = (ssize_t)cupsFileGetLine(fp, line, linesize)) == 0) break; } /* * Then process pages until we have no more... */ number = 0; fprintf(stderr, "DEBUG: Before page loop - %s", line); while (!strncmp(line, "%%Page:", 7)) { if (JobCanceled) break; number ++; if (check_range(doc, (number - 1) / doc->number_up + 1)) { fprintf(stderr, "DEBUG: Copying page %d...\n", number); linelen = copy_page(fp, doc, ppd, number, line, linelen, linesize); } else { fprintf(stderr, "DEBUG: Skipping page %d...\n", number); linelen = skip_page(fp, line, linelen, linesize); } } /* * Finish up the last page(s)... */ if (number && is_not_last_page(number) && cupsArrayLast(doc->pages) && check_range(doc, (number - 1) / doc->number_up + 1)) { pageinfo = (pstops_page_t *)cupsArrayLast(doc->pages); start_nup(doc, doc->number_up, 0, doc->bounding_box); doc_puts(doc, "showpage\n"); end_nup(doc, doc->number_up); pageinfo->length = (ssize_t)(cupsFileTell(doc->temp) - pageinfo->offset); } if (doc->slow_duplex && (doc->page & 1)) { /* * Make sure we have an even number of pages... */ pageinfo = add_page(doc, "(filler)"); if (!doc->slow_order) { if (!ppd || !ppd->num_filters) fprintf(stderr, "PAGE: %d %d\n", doc->page, doc->slow_collate ? 1 : doc->copies); printf("%%%%Page: (filler) %d\n", doc->page); } start_nup(doc, doc->number_up, 0, doc->bounding_box); doc_puts(doc, "showpage\n"); end_nup(doc, doc->number_up); pageinfo->length = (ssize_t)(cupsFileTell(doc->temp) - pageinfo->offset); } /* * Make additional copies as necessary... */ number = doc->slow_order ? 0 : doc->page; if (doc->temp && !JobCanceled && cupsArrayCount(doc->pages) > 0) { int copy; /* Current copy */ /* * Reopen the temporary file for reading... */ cupsFileClose(doc->temp); doc->temp = cupsFileOpen(doc->tempfile, "r"); /* * Make the copies... */ if (doc->slow_collate) copy = !doc->slow_order; else copy = doc->copies - 1; for (; copy < doc->copies; copy ++) { if (JobCanceled) break; /* * Send end-of-job stuff followed by any start-of-job stuff required * for the JCL options... */ if (number && doc->emit_jcl && ppd && ppd->jcl_end) { /* * Send the trailer... */ puts("%%Trailer"); printf("%%%%Pages: %d\n", cupsArrayCount(doc->pages)); if (doc->number_up > 1 || doc->fit_to_page) printf("%%%%BoundingBox: %.0f %.0f %.0f %.0f\n", PageLeft, PageBottom, PageRight, PageTop); else printf("%%%%BoundingBox: %d %d %d %d\n", doc->new_bounding_box[0], doc->new_bounding_box[1], doc->new_bounding_box[2], doc->new_bounding_box[3]); puts("%%EOF"); /* * Start a new document... */ ppdEmitJCLEnd(ppd, stdout); ppdEmitJCL(ppd, stdout, doc->job_id, doc->user, doc->title); puts("%!PS-Adobe-3.0"); number = 0; } /* * Copy the prolog as needed... */ if (!number) { pageinfo = (pstops_page_t *)cupsArrayFirst(doc->pages); copy_bytes(doc->temp, 0, (size_t)pageinfo->offset); } /* * Then copy all of the pages... */ pageinfo = doc->slow_order ? (pstops_page_t *)cupsArrayLast(doc->pages) : (pstops_page_t *)cupsArrayFirst(doc->pages); while (pageinfo) { if (JobCanceled) break; number ++; if (!ppd || !ppd->num_filters) fprintf(stderr, "PAGE: %d %d\n", number, doc->slow_collate ? 1 : doc->copies); if (doc->number_up > 1) { printf("%%%%Page: (%d) %d\n", number, number); printf("%%%%PageBoundingBox: %.0f %.0f %.0f %.0f\n", PageLeft, PageBottom, PageRight, PageTop); } else { printf("%%%%Page: %s %d\n", pageinfo->label, number); printf("%%%%PageBoundingBox: %d %d %d %d\n", pageinfo->bounding_box[0], pageinfo->bounding_box[1], pageinfo->bounding_box[2], pageinfo->bounding_box[3]); } copy_bytes(doc->temp, pageinfo->offset, (size_t)pageinfo->length); pageinfo = doc->slow_order ? (pstops_page_t *)cupsArrayPrev(doc->pages) : (pstops_page_t *)cupsArrayNext(doc->pages); } } } /* * Restore the old showpage operator as needed... */ if (doc->use_ESPshowpage) puts("userdict/showpage/ESPshowpage load put\n"); /* * Write/copy the trailer... */ if (!JobCanceled) copy_trailer(fp, doc, ppd, number, line, linelen, linesize); } /* * 'copy_non_dsc()' - Copy a document that does not conform to the DSC. * * This function expects "line" to be filled with the %! comment line. */ static void copy_non_dsc(cups_file_t *fp, /* I - File to read from */ pstops_doc_t *doc, /* I - Document info */ ppd_file_t *ppd, /* I - PPD file */ char *line, /* I - Line buffer */ ssize_t linelen, /* I - Length of initial line */ size_t linesize) /* I - Size of line buffer */ { int copy; /* Current copy */ char buffer[8192]; /* Copy buffer */ ssize_t bytes; /* Number of bytes copied */ (void)linesize; /* * First let the user know that they are attempting to print a file * that may not print correctly... */ fputs("DEBUG: This document does not conform to the Adobe Document " "Structuring Conventions and may not print correctly.\n", stderr); /* * Then write a standard DSC comment section... */ printf("%%%%BoundingBox: %.0f %.0f %.0f %.0f\n", PageLeft, PageBottom, PageRight, PageTop); if (doc->slow_collate && doc->copies > 1) printf("%%%%Pages: %d\n", doc->copies); else puts("%%Pages: 1"); WriteTextComment("For", doc->user); WriteTextComment("Title", doc->title); if (doc->copies != 1 && (!doc->collate || !doc->slow_collate)) { /* * Tell the document processor the copy and duplex options * that are required... */ printf("%%%%Requirements: numcopies(%d)%s%s\n", doc->copies, doc->collate ? " collate" : "", Duplex ? " duplex" : ""); /* * Apple uses RBI comments for various non-PPD options... */ printf("%%RBINumCopies: %d\n", doc->copies); } else { /* * Tell the document processor the duplex option that is required... */ if (Duplex) puts("%%Requirements: duplex"); /* * Apple uses RBI comments for various non-PPD options... */ puts("%RBINumCopies: 1"); } puts("%%EndComments"); /* * Then the prolog... */ puts("%%BeginProlog"); do_prolog(doc, ppd); puts("%%EndProlog"); /* * Then the setup section... */ puts("%%BeginSetup"); do_setup(doc, ppd); puts("%%EndSetup"); /* * Finally, embed a copy of the file inside a %%Page... */ if (!ppd || !ppd->num_filters) fprintf(stderr, "PAGE: 1 %d\n", doc->temp ? 1 : doc->copies); puts("%%Page: 1 1"); puts("%%BeginPageSetup"); ppdEmit(ppd, stdout, PPD_ORDER_PAGE); puts("%%EndPageSetup"); puts("%%BeginDocument: nondsc"); fwrite(line, (size_t)linelen, 1, stdout); if (doc->temp) cupsFileWrite(doc->temp, line, (size_t)linelen); while ((bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0) { fwrite(buffer, 1, (size_t)bytes, stdout); if (doc->temp) cupsFileWrite(doc->temp, buffer, (size_t)bytes); } puts("%%EndDocument"); if (doc->use_ESPshowpage) { WriteLabels(Orientation); puts("ESPshowpage"); } if (doc->temp && !JobCanceled) { /* * Reopen the temporary file for reading... */ cupsFileClose(doc->temp); doc->temp = cupsFileOpen(doc->tempfile, "r"); /* * Make the additional copies as needed... */ for (copy = 1; copy < doc->copies; copy ++) { if (JobCanceled) break; if (!ppd || !ppd->num_filters) fputs("PAGE: 1 1\n", stderr); printf("%%%%Page: %d %d\n", copy + 1, copy + 1); puts("%%BeginPageSetup"); ppdEmit(ppd, stdout, PPD_ORDER_PAGE); puts("%%EndPageSetup"); puts("%%BeginDocument: nondsc"); copy_bytes(doc->temp, 0, 0); puts("%%EndDocument"); if (doc->use_ESPshowpage) { WriteLabels(Orientation); puts("ESPshowpage"); } } } /* * Restore the old showpage operator as needed... */ if (doc->use_ESPshowpage) puts("userdict/showpage/ESPshowpage load put\n"); } /* * 'copy_page()' - Copy a page description. * * This function expects "line" to be filled with a %%Page comment line. * On return, "line" will contain the next line in the file, if any. */ static ssize_t /* O - Length of next line */ copy_page(cups_file_t *fp, /* I - File to read from */ pstops_doc_t *doc, /* I - Document info */ ppd_file_t *ppd, /* I - PPD file */ int number, /* I - Current page number */ char *line, /* I - Line buffer */ ssize_t linelen, /* I - Length of initial line */ size_t linesize) /* I - Size of line buffer */ { char label[256], /* Page label string */ *ptr; /* Pointer into line */ int level; /* Embedded document level */ pstops_page_t *pageinfo; /* Page information */ int first_page; /* First page on N-up output? */ int has_page_setup = 0; /* Does the page have %%Begin/EndPageSetup? */ int bounding_box[4]; /* PageBoundingBox */ /* * Get the page label for this page... */ first_page = is_first_page(number); if (!parse_text(line + 7, &ptr, label, sizeof(label))) { fputs("DEBUG: There was a bad %%Page: comment in the file.\n", stderr); label[0] = '\0'; number = doc->page; } else if (strtol(ptr, &ptr, 10) == LONG_MAX || !isspace(*ptr & 255)) { fputs("DEBUG: There was a bad %%Page: comment in the file.\n", stderr); number = doc->page; } /* * Create or update the current output page... */ if (first_page) pageinfo = add_page(doc, label); else pageinfo = (pstops_page_t *)cupsArrayLast(doc->pages); /* * Handle first page override... */ if (doc->ap_input_slot || doc->ap_manual_feed) { if ((doc->page == 1 && (!doc->slow_order || !Duplex)) || (doc->page == 2 && doc->slow_order && Duplex)) { /* * First page/sheet gets AP_FIRSTPAGE_* options... */ pageinfo->num_options = cupsAddOption("InputSlot", doc->ap_input_slot, pageinfo->num_options, &(pageinfo->options)); pageinfo->num_options = cupsAddOption("ManualFeed", doc->ap_input_slot ? "False" : doc->ap_manual_feed, pageinfo->num_options, &(pageinfo->options)); pageinfo->num_options = cupsAddOption("MediaColor", doc->ap_media_color, pageinfo->num_options, &(pageinfo->options)); pageinfo->num_options = cupsAddOption("MediaType", doc->ap_media_type, pageinfo->num_options, &(pageinfo->options)); pageinfo->num_options = cupsAddOption("PageRegion", doc->ap_page_region, pageinfo->num_options, &(pageinfo->options)); pageinfo->num_options = cupsAddOption("PageSize", doc->ap_page_size, pageinfo->num_options, &(pageinfo->options)); } else if (doc->page == (Duplex + 2)) { /* * Second page/sheet gets default options... */ pageinfo->num_options = cupsAddOption("InputSlot", doc->input_slot, pageinfo->num_options, &(pageinfo->options)); pageinfo->num_options = cupsAddOption("ManualFeed", doc->input_slot ? "False" : doc->manual_feed, pageinfo->num_options, &(pageinfo->options)); pageinfo->num_options = cupsAddOption("MediaColor", doc->media_color, pageinfo->num_options, &(pageinfo->options)); pageinfo->num_options = cupsAddOption("MediaType", doc->media_type, pageinfo->num_options, &(pageinfo->options)); pageinfo->num_options = cupsAddOption("PageRegion", doc->page_region, pageinfo->num_options, &(pageinfo->options)); pageinfo->num_options = cupsAddOption("PageSize", doc->page_size, pageinfo->num_options, &(pageinfo->options)); } } /* * Scan comments until we see something other than %%Page*: or * %%Include*... */ memcpy(bounding_box, doc->bounding_box, sizeof(bounding_box)); while ((linelen = (ssize_t)cupsFileGetLine(fp, line, linesize)) > 0) { if (!strncmp(line, "%%PageBoundingBox:", 18)) { /* * %%PageBoundingBox: llx lly urx ury */ if (sscanf(line + 18, "%d%d%d%d", bounding_box + 0, bounding_box + 1, bounding_box + 2, bounding_box + 3) != 4) { fputs("DEBUG: There was a bad %%PageBoundingBox: comment in the file.\n", stderr); memcpy(bounding_box, doc->bounding_box, sizeof(bounding_box)); } else if (doc->number_up == 1 && !doc->fit_to_page && Orientation) { int temp_bbox[4]; /* Temporary bounding box */ memcpy(temp_bbox, bounding_box, sizeof(temp_bbox)); fprintf(stderr, "DEBUG: Orientation = %d\n", Orientation); fprintf(stderr, "DEBUG: original bounding_box = [ %d %d %d %d ]\n", bounding_box[0], bounding_box[1], bounding_box[2], bounding_box[3]); fprintf(stderr, "DEBUG: PageWidth = %.1f, PageLength = %.1f\n", PageWidth, PageLength); switch (Orientation) { case 1 : /* Landscape */ bounding_box[0] = (int)(PageLength - temp_bbox[3]); bounding_box[1] = temp_bbox[0]; bounding_box[2] = (int)(PageLength - temp_bbox[1]); bounding_box[3] = temp_bbox[2]; break; case 2 : /* Reverse Portrait */ bounding_box[0] = (int)(PageWidth - temp_bbox[2]); bounding_box[1] = (int)(PageLength - temp_bbox[3]); bounding_box[2] = (int)(PageWidth - temp_bbox[0]); bounding_box[3] = (int)(PageLength - temp_bbox[1]); break; case 3 : /* Reverse Landscape */ bounding_box[0] = temp_bbox[1]; bounding_box[1] = (int)(PageWidth - temp_bbox[2]); bounding_box[2] = temp_bbox[3]; bounding_box[3] = (int)(PageWidth - temp_bbox[0]); break; } fprintf(stderr, "DEBUG: updated bounding_box = [ %d %d %d %d ]\n", bounding_box[0], bounding_box[1], bounding_box[2], bounding_box[3]); } } #if 0 else if (!strncmp(line, "%%PageCustomColors:", 19) || !strncmp(line, "%%PageMedia:", 12) || !strncmp(line, "%%PageOrientation:", 18) || !strncmp(line, "%%PageProcessColors:", 20) || !strncmp(line, "%%PageRequirements:", 18) || !strncmp(line, "%%PageResources:", 16)) { /* * Copy literal... */ } #endif /* 0 */ else if (!strncmp(line, "%%PageCustomColors:", 19)) { /* * %%PageCustomColors: ... */ } else if (!strncmp(line, "%%PageMedia:", 12)) { /* * %%PageMedia: ... */ } else if (!strncmp(line, "%%PageOrientation:", 18)) { /* * %%PageOrientation: ... */ } else if (!strncmp(line, "%%PageProcessColors:", 20)) { /* * %%PageProcessColors: ... */ } else if (!strncmp(line, "%%PageRequirements:", 18)) { /* * %%PageRequirements: ... */ } else if (!strncmp(line, "%%PageResources:", 16)) { /* * %%PageResources: ... */ } else if (!strncmp(line, "%%IncludeFeature:", 17)) { /* * %%IncludeFeature: *MainKeyword OptionKeyword */ if (doc->number_up == 1 &&!doc->fit_to_page) pageinfo->num_options = include_feature(ppd, line, pageinfo->num_options, &(pageinfo->options)); } else if (!strncmp(line, "%%BeginPageSetup", 16)) { has_page_setup = 1; break; } else break; } if (doc->number_up == 1) { /* * Update the document's composite and page bounding box... */ memcpy(pageinfo->bounding_box, bounding_box, sizeof(pageinfo->bounding_box)); if (bounding_box[0] < doc->new_bounding_box[0]) doc->new_bounding_box[0] = bounding_box[0]; if (bounding_box[1] < doc->new_bounding_box[1]) doc->new_bounding_box[1] = bounding_box[1]; if (bounding_box[2] > doc->new_bounding_box[2]) doc->new_bounding_box[2] = bounding_box[2]; if (bounding_box[3] > doc->new_bounding_box[3]) doc->new_bounding_box[3] = bounding_box[3]; } /* * Output the page header as needed... */ if (!doc->slow_order && first_page) { if (!ppd || !ppd->num_filters) fprintf(stderr, "PAGE: %d %d\n", doc->page, doc->slow_collate ? 1 : doc->copies); if (doc->number_up > 1) { printf("%%%%Page: (%d) %d\n", doc->page, doc->page); printf("%%%%PageBoundingBox: %.0f %.0f %.0f %.0f\n", PageLeft, PageBottom, PageRight, PageTop); } else { printf("%%%%Page: %s %d\n", pageinfo->label, doc->page); printf("%%%%PageBoundingBox: %d %d %d %d\n", pageinfo->bounding_box[0], pageinfo->bounding_box[1], pageinfo->bounding_box[2], pageinfo->bounding_box[3]); } } /* * Copy any page setup commands... */ if (first_page) doc_puts(doc, "%%BeginPageSetup\n"); if (has_page_setup) { int feature = 0; /* In a Begin/EndFeature block? */ while ((linelen = (ssize_t)cupsFileGetLine(fp, line, linesize)) > 0) { if (!strncmp(line, "%%EndPageSetup", 14)) break; else if (!strncmp(line, "%%BeginFeature:", 15)) { feature = 1; if (doc->number_up > 1 || doc->fit_to_page) continue; } else if (!strncmp(line, "%%EndFeature", 12)) { feature = 0; if (doc->number_up > 1 || doc->fit_to_page) continue; } else if (!strncmp(line, "%%IncludeFeature:", 17)) { pageinfo->num_options = include_feature(ppd, line, pageinfo->num_options, &(pageinfo->options)); continue; } else if (!strncmp(line, "%%Include", 9)) continue; if (line[0] != '%' && !feature) break; if (!feature || (doc->number_up == 1 && !doc->fit_to_page)) doc_write(doc, line, (size_t)linelen); } /* * Skip %%EndPageSetup... */ if (linelen > 0 && !strncmp(line, "%%EndPageSetup", 14)) linelen = (ssize_t)cupsFileGetLine(fp, line, linesize); } if (first_page) { char *page_setup; /* PageSetup commands to send */ if (pageinfo->num_options > 0) write_options(doc, ppd, pageinfo->num_options, pageinfo->options); /* * Output commands for the current page... */ page_setup = ppdEmitString(ppd, PPD_ORDER_PAGE, 0); if (page_setup) { doc_puts(doc, page_setup); free(page_setup); } } /* * Prep for the start of the page description... */ start_nup(doc, number, 1, bounding_box); if (first_page) doc_puts(doc, "%%EndPageSetup\n"); /* * Read the rest of the page description... */ level = 0; do { if (level == 0 && (!strncmp(line, "%%Page:", 7) || !strncmp(line, "%%Trailer", 9) || !strncmp(line, "%%EOF", 5))) break; else if (!strncmp(line, "%%BeginDocument", 15) || !strncmp(line, "%ADO_BeginApplication", 21)) { doc_write(doc, line, (size_t)linelen); level ++; } else if ((!strncmp(line, "%%EndDocument", 13) || !strncmp(line, "%ADO_EndApplication", 19)) && level > 0) { doc_write(doc, line, (size_t)linelen); level --; } else if (!strncmp(line, "%%BeginBinary:", 14) || (!strncmp(line, "%%BeginData:", 12) && !strstr(line, "ASCII") && !strstr(line, "Hex"))) { /* * Copy binary data... */ int bytes; /* Bytes of data */ doc_write(doc, line, (size_t)linelen); bytes = atoi(strchr(line, ':') + 1); while (bytes > 0) { if ((size_t)bytes > linesize) linelen = cupsFileRead(fp, line, linesize); else linelen = cupsFileRead(fp, line, (size_t)bytes); if (linelen < 1) { line[0] = '\0'; perror("ERROR: Early end-of-file while reading binary data"); return (0); } doc_write(doc, line, (size_t)linelen); bytes -= linelen; } } else doc_write(doc, line, (size_t)linelen); } while ((linelen = (ssize_t)cupsFileGetLine(fp, line, linesize)) > 0); /* * Finish up this page and return... */ end_nup(doc, number); pageinfo->length = (ssize_t)(cupsFileTell(doc->temp) - pageinfo->offset); return (linelen); } /* * 'copy_prolog()' - Copy the document prolog section. * * This function expects "line" to be filled with a %%BeginProlog comment line. * On return, "line" will contain the next line in the file, if any. */ static ssize_t /* O - Length of next line */ copy_prolog(cups_file_t *fp, /* I - File to read from */ pstops_doc_t *doc, /* I - Document info */ ppd_file_t *ppd, /* I - PPD file */ char *line, /* I - Line buffer */ ssize_t linelen, /* I - Length of initial line */ size_t linesize) /* I - Size of line buffer */ { while (strncmp(line, "%%BeginProlog", 13)) { if (!strncmp(line, "%%BeginSetup", 12) || !strncmp(line, "%%Page:", 7)) break; doc_write(doc, line, (size_t)linelen); if ((linelen = (ssize_t)cupsFileGetLine(fp, line, linesize)) == 0) break; } doc_puts(doc, "%%BeginProlog\n"); do_prolog(doc, ppd); if (!strncmp(line, "%%BeginProlog", 13)) { while ((linelen = (ssize_t)cupsFileGetLine(fp, line, linesize)) > 0) { if (!strncmp(line, "%%EndProlog", 11) || !strncmp(line, "%%BeginSetup", 12) || !strncmp(line, "%%Page:", 7)) break; doc_write(doc, line, (size_t)linelen); } if (!strncmp(line, "%%EndProlog", 11)) linelen = (ssize_t)cupsFileGetLine(fp, line, linesize); else fputs("DEBUG: The %%EndProlog comment is missing.\n", stderr); } doc_puts(doc, "%%EndProlog\n"); return (linelen); } /* * 'copy_setup()' - Copy the document setup section. * * This function expects "line" to be filled with a %%BeginSetup comment line. * On return, "line" will contain the next line in the file, if any. */ static ssize_t /* O - Length of next line */ copy_setup(cups_file_t *fp, /* I - File to read from */ pstops_doc_t *doc, /* I - Document info */ ppd_file_t *ppd, /* I - PPD file */ char *line, /* I - Line buffer */ ssize_t linelen, /* I - Length of initial line */ size_t linesize) /* I - Size of line buffer */ { int num_options; /* Number of options */ cups_option_t *options; /* Options */ while (strncmp(line, "%%BeginSetup", 12)) { if (!strncmp(line, "%%Page:", 7)) break; doc_write(doc, line, (size_t)linelen); if ((linelen = (ssize_t)cupsFileGetLine(fp, line, linesize)) == 0) break; } doc_puts(doc, "%%BeginSetup\n"); do_setup(doc, ppd); num_options = 0; options = NULL; if (!strncmp(line, "%%BeginSetup", 12)) { while (strncmp(line, "%%EndSetup", 10)) { if (!strncmp(line, "%%Page:", 7)) break; else if (!strncmp(line, "%%IncludeFeature:", 17)) { /* * %%IncludeFeature: *MainKeyword OptionKeyword */ if (doc->number_up == 1 && !doc->fit_to_page) num_options = include_feature(ppd, line, num_options, &options); } else if (strncmp(line, "%%BeginSetup", 12)) doc_write(doc, line, (size_t)linelen); if ((linelen = (ssize_t)cupsFileGetLine(fp, line, linesize)) == 0) break; } if (!strncmp(line, "%%EndSetup", 10)) linelen = (ssize_t)cupsFileGetLine(fp, line, linesize); else fputs("DEBUG: The %%EndSetup comment is missing.\n", stderr); } if (num_options > 0) { write_options(doc, ppd, num_options, options); cupsFreeOptions(num_options, options); } doc_puts(doc, "%%EndSetup\n"); return (linelen); } /* * 'copy_trailer()' - Copy the document trailer. * * This function expects "line" to be filled with a %%Trailer comment line. * On return, "line" will contain the next line in the file, if any. */ static ssize_t /* O - Length of next line */ copy_trailer(cups_file_t *fp, /* I - File to read from */ pstops_doc_t *doc, /* I - Document info */ ppd_file_t *ppd, /* I - PPD file */ int number, /* I - Number of pages */ char *line, /* I - Line buffer */ ssize_t linelen, /* I - Length of initial line */ size_t linesize) /* I - Size of line buffer */ { /* * Write the trailer comments... */ (void)ppd; puts("%%Trailer"); while (linelen > 0) { if (!strncmp(line, "%%EOF", 5)) break; else if (strncmp(line, "%%Trailer", 9) && strncmp(line, "%%Pages:", 8) && strncmp(line, "%%BoundingBox:", 14)) fwrite(line, 1, (size_t)linelen, stdout); linelen = (ssize_t)cupsFileGetLine(fp, line, linesize); } fprintf(stderr, "DEBUG: Wrote %d pages...\n", number); printf("%%%%Pages: %d\n", number); if (doc->number_up > 1 || doc->fit_to_page) printf("%%%%BoundingBox: %.0f %.0f %.0f %.0f\n", PageLeft, PageBottom, PageRight, PageTop); else printf("%%%%BoundingBox: %d %d %d %d\n", doc->new_bounding_box[0], doc->new_bounding_box[1], doc->new_bounding_box[2], doc->new_bounding_box[3]); return (linelen); } /* * 'do_prolog()' - Send the necessary document prolog commands. */ static void do_prolog(pstops_doc_t *doc, /* I - Document information */ ppd_file_t *ppd) /* I - PPD file */ { char *ps; /* PS commands */ /* * Send the document prolog commands... */ if (ppd && ppd->patches) { doc_puts(doc, "%%BeginFeature: *JobPatchFile 1\n"); doc_puts(doc, ppd->patches); doc_puts(doc, "\n%%EndFeature\n"); } if ((ps = ppdEmitString(ppd, PPD_ORDER_PROLOG, 0.0)) != NULL) { doc_puts(doc, ps); free(ps); } /* * Define ESPshowpage here so that applications that define their * own procedure to do a showpage pick it up... */ if (doc->use_ESPshowpage) doc_puts(doc, "userdict/ESPshowpage/showpage load put\n" "userdict/showpage{}put\n"); } /* * 'do_setup()' - Send the necessary document setup commands. */ static void do_setup(pstops_doc_t *doc, /* I - Document information */ ppd_file_t *ppd) /* I - PPD file */ { char *ps; /* PS commands */ /* * Disable CTRL-D so that embedded files don't cause printing * errors... */ doc_puts(doc, "% Disable CTRL-D as an end-of-file marker...\n"); doc_puts(doc, "userdict dup(\\004)cvn{}put (\\004\\004)cvn{}put\n"); /* * Mark job options... */ cupsMarkOptions(ppd, doc->num_options, doc->options); /* * Send all the printer-specific setup commands... */ if ((ps = ppdEmitString(ppd, PPD_ORDER_DOCUMENT, 0.0)) != NULL) { doc_puts(doc, ps); free(ps); } if ((ps = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL) { doc_puts(doc, ps); free(ps); } /* * Set the number of copies for the job... */ if (doc->copies != 1 && (!doc->collate || !doc->slow_collate)) { doc_printf(doc, "%%RBIBeginNonPPDFeature: *NumCopies %d\n", doc->copies); doc_printf(doc, "%d/languagelevel where{pop languagelevel 2 ge}{false}ifelse\n" "{1 dict begin/NumCopies exch def currentdict end " "setpagedevice}\n" "{userdict/#copies 3 -1 roll put}ifelse\n", doc->copies); doc_puts(doc, "%RBIEndNonPPDFeature\n"); } /* * If we are doing N-up printing, disable setpagedevice... */ if (doc->number_up > 1) { doc_puts(doc, "userdict/CUPSsetpagedevice/setpagedevice load put\n"); doc_puts(doc, "userdict/setpagedevice{pop}bind put\n"); } /* * Make sure we have rectclip and rectstroke procedures of some sort... */ doc_puts(doc, "% x y w h ESPrc - Clip to a rectangle.\n" "userdict/ESPrc/rectclip where{pop/rectclip load}\n" "{{newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto\n" "neg 0 rlineto closepath clip newpath}bind}ifelse put\n"); doc_puts(doc, "% x y w h ESPrf - Fill a rectangle.\n" "userdict/ESPrf/rectfill where{pop/rectfill load}\n" "{{gsave newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto\n" "neg 0 rlineto closepath fill grestore}bind}ifelse put\n"); doc_puts(doc, "% x y w h ESPrs - Stroke a rectangle.\n" "userdict/ESPrs/rectstroke where{pop/rectstroke load}\n" "{{gsave newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto\n" "neg 0 rlineto closepath stroke grestore}bind}ifelse put\n"); /* * Write the page and label prologs... */ if (doc->number_up == 2 || doc->number_up == 6) { /* * For 2- and 6-up output, rotate the labels to match the orientation * of the pages... */ if (Orientation & 1) write_label_prolog(doc, doc->page_label, PageBottom, PageWidth - PageLength + PageTop, PageLength); else write_label_prolog(doc, doc->page_label, PageLeft, PageRight, PageLength); } else write_label_prolog(doc, doc->page_label, PageBottom, PageTop, PageWidth); } /* * 'doc_printf()' - Send a formatted string to stdout and/or the temp file. * * This function should be used for all page-level output that is affected * by ordering, collation, etc. */ static void doc_printf(pstops_doc_t *doc, /* I - Document information */ const char *format, /* I - Printf-style format string */ ...) /* I - Additional arguments as needed */ { va_list ap; /* Pointer to arguments */ char buffer[1024]; /* Output buffer */ ssize_t bytes; /* Number of bytes to write */ va_start(ap, format); bytes = vsnprintf(buffer, sizeof(buffer), format, ap); va_end(ap); if ((size_t)bytes > sizeof(buffer)) { _cupsLangPrintFilter(stderr, "ERROR", _("Buffer overflow detected, aborting.")); exit(1); } doc_write(doc, buffer, (size_t)bytes); } /* * 'doc_puts()' - Send a nul-terminated string to stdout and/or the temp file. * * This function should be used for all page-level output that is affected * by ordering, collation, etc. */ static void doc_puts(pstops_doc_t *doc, /* I - Document information */ const char *s) /* I - String to send */ { doc_write(doc, s, strlen(s)); } /* * 'doc_write()' - Send data to stdout and/or the temp file. */ static void doc_write(pstops_doc_t *doc, /* I - Document information */ const char *s, /* I - Data to send */ size_t len) /* I - Number of bytes to send */ { if (!doc->slow_order) fwrite(s, 1, len, stdout); if (doc->temp) cupsFileWrite(doc->temp, s, len); } /* * 'end_nup()' - End processing for N-up printing. */ static void end_nup(pstops_doc_t *doc, /* I - Document information */ int number) /* I - Page number */ { if (doc->number_up > 1) doc_puts(doc, "userdict/ESPsave get restore\n"); switch (doc->number_up) { case 1 : if (doc->use_ESPshowpage) { write_labels(doc, Orientation); doc_puts(doc, "ESPshowpage\n"); } break; case 2 : case 6 : if (is_last_page(number) && doc->use_ESPshowpage) { if (Orientation & 1) { /* * Rotate the labels back to portrait... */ write_labels(doc, Orientation - 1); } else if (Orientation == 0) { /* * Rotate the labels to landscape... */ write_labels(doc, doc->normal_landscape ? 1 : 3); } else { /* * Rotate the labels to landscape... */ write_labels(doc, doc->normal_landscape ? 3 : 1); } doc_puts(doc, "ESPshowpage\n"); } break; default : if (is_last_page(number) && doc->use_ESPshowpage) { write_labels(doc, Orientation); doc_puts(doc, "ESPshowpage\n"); } break; } fflush(stdout); } /* * 'include_feature()' - Include a printer option/feature command. */ static int /* O - New number of options */ include_feature( ppd_file_t *ppd, /* I - PPD file */ const char *line, /* I - DSC line */ int num_options, /* I - Number of options */ cups_option_t **options) /* IO - Options */ { char name[255], /* Option name */ value[255]; /* Option value */ ppd_option_t *option; /* Option in file */ /* * Get the "%%IncludeFeature: *Keyword OptionKeyword" values... */ if (sscanf(line + 17, "%254s%254s", name, value) != 2) { fputs("DEBUG: The %%IncludeFeature: comment is not valid.\n", stderr); return (num_options); } /* * Find the option and choice... */ if ((option = ppdFindOption(ppd, name + 1)) == NULL) { _cupsLangPrintFilter(stderr, "WARNING", _("Unknown option \"%s\"."), name + 1); return (num_options); } if (option->section == PPD_ORDER_EXIT || option->section == PPD_ORDER_JCL) { _cupsLangPrintFilter(stderr, "WARNING", _("Option \"%s\" cannot be included via " "%%%%IncludeFeature."), name + 1); return (num_options); } if (!ppdFindChoice(option, value)) { _cupsLangPrintFilter(stderr, "WARNING", _("Unknown choice \"%s\" for option \"%s\"."), value, name + 1); return (num_options); } /* * Add the option to the option array and return... */ return (cupsAddOption(name + 1, value, num_options, options)); } /* * 'parse_text()' - Parse a text value in a comment. * * This function parses a DSC text value as defined on page 36 of the * DSC specification. Text values are either surrounded by parenthesis * or whitespace-delimited. * * The value returned is the literal characters for the entire text * string, including any parenthesis and escape characters. */ static char * /* O - Value or NULL on error */ parse_text(const char *start, /* I - Start of text value */ char **end, /* O - End of text value */ char *buffer, /* I - Buffer */ size_t bufsize) /* I - Size of buffer */ { char *bufptr, /* Pointer in buffer */ *bufend; /* End of buffer */ int level; /* Parenthesis level */ /* * Skip leading whitespace... */ while (isspace(*start & 255)) start ++; /* * Then copy the value... */ level = 0; bufptr = buffer; bufend = buffer + bufsize - 1; while (bufptr < bufend) { if (isspace(*start & 255) && !level) break; *bufptr++ = *start; if (*start == '(') level ++; else if (*start == ')') { if (!level) { start ++; break; } else level --; } else if (*start == '\\') { /* * Copy escaped character... */ int i; /* Looping var */ for (i = 1; i <= 3 && isdigit(start[i] & 255) && bufptr < bufend; *bufptr++ = start[i], i ++); } start ++; } *bufptr = '\0'; /* * Return the value and new pointer into the line... */ if (end) *end = (char *)start; if (bufptr == bufend) return (NULL); else return (buffer); } /* * 'set_pstops_options()' - Set pstops options. */ static void set_pstops_options( pstops_doc_t *doc, /* I - Document information */ ppd_file_t *ppd, /* I - PPD file */ char *argv[], /* I - Command-line arguments */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { const char *val; /* Option value */ int intval; /* Integer option value */ ppd_attr_t *attr; /* PPD attribute */ ppd_option_t *option; /* PPD option */ ppd_choice_t *choice; /* PPD choice */ const char *content_type; /* Original content type */ int max_copies; /* Maximum number of copies supported */ /* * Initialize document information structure... */ memset(doc, 0, sizeof(pstops_doc_t)); doc->job_id = atoi(argv[1]); doc->user = argv[2]; doc->title = argv[3]; doc->copies = atoi(argv[4]); if (ppd && ppd->landscape > 0) doc->normal_landscape = 1; doc->bounding_box[0] = (int)PageLeft; doc->bounding_box[1] = (int)PageBottom; doc->bounding_box[2] = (int)PageRight; doc->bounding_box[3] = (int)PageTop; doc->new_bounding_box[0] = INT_MAX; doc->new_bounding_box[1] = INT_MAX; doc->new_bounding_box[2] = INT_MIN; doc->new_bounding_box[3] = INT_MIN; /* * AP_FIRSTPAGE_* and the corresponding non-first-page options. */ doc->ap_input_slot = cupsGetOption("AP_FIRSTPAGE_InputSlot", num_options, options); doc->ap_manual_feed = cupsGetOption("AP_FIRSTPAGE_ManualFeed", num_options, options); doc->ap_media_color = cupsGetOption("AP_FIRSTPAGE_MediaColor", num_options, options); doc->ap_media_type = cupsGetOption("AP_FIRSTPAGE_MediaType", num_options, options); doc->ap_page_region = cupsGetOption("AP_FIRSTPAGE_PageRegion", num_options, options); doc->ap_page_size = cupsGetOption("AP_FIRSTPAGE_PageSize", num_options, options); if ((choice = ppdFindMarkedChoice(ppd, "InputSlot")) != NULL) doc->input_slot = choice->choice; if ((choice = ppdFindMarkedChoice(ppd, "ManualFeed")) != NULL) doc->manual_feed = choice->choice; if ((choice = ppdFindMarkedChoice(ppd, "MediaColor")) != NULL) doc->media_color = choice->choice; if ((choice = ppdFindMarkedChoice(ppd, "MediaType")) != NULL) doc->media_type = choice->choice; if ((choice = ppdFindMarkedChoice(ppd, "PageRegion")) != NULL) doc->page_region = choice->choice; if ((choice = ppdFindMarkedChoice(ppd, "PageSize")) != NULL) doc->page_size = choice->choice; /* * collate, multiple-document-handling */ if ((val = cupsGetOption("multiple-document-handling", num_options, options)) != NULL) { /* * This IPP attribute is unnecessarily complicated... * * single-document, separate-documents-collated-copies, and * single-document-new-sheet all require collated copies. * * separate-documents-uncollated-copies allows for uncollated copies. */ doc->collate = _cups_strcasecmp(val, "separate-documents-uncollated-copies") != 0; } if ((val = cupsGetOption("Collate", num_options, options)) != NULL && (!_cups_strcasecmp(val, "true") ||!_cups_strcasecmp(val, "on") || !_cups_strcasecmp(val, "yes"))) doc->collate = 1; /* * emit-jcl */ if ((val = cupsGetOption("emit-jcl", num_options, options)) != NULL && (!_cups_strcasecmp(val, "false") || !_cups_strcasecmp(val, "off") || !_cups_strcasecmp(val, "no") || !strcmp(val, "0"))) doc->emit_jcl = 0; else doc->emit_jcl = 1; /* * fit-to-page/ipp-attribute-fidelity * * (Only for original PostScript content) */ if ((content_type = getenv("CONTENT_TYPE")) == NULL) content_type = "application/postscript"; if (!_cups_strcasecmp(content_type, "application/postscript")) { if ((val = cupsGetOption("fit-to-page", num_options, options)) != NULL && !_cups_strcasecmp(val, "true")) doc->fit_to_page = 1; else if ((val = cupsGetOption("ipp-attribute-fidelity", num_options, options)) != NULL && !_cups_strcasecmp(val, "true")) doc->fit_to_page = 1; } /* * mirror/MirrorPrint */ if ((choice = ppdFindMarkedChoice(ppd, "MirrorPrint")) != NULL) { val = choice->choice; choice->marked = 0; } else val = cupsGetOption("mirror", num_options, options); if (val && (!_cups_strcasecmp(val, "true") || !_cups_strcasecmp(val, "on") || !_cups_strcasecmp(val, "yes"))) doc->mirror = 1; /* * number-up */ if ((val = cupsGetOption("number-up", num_options, options)) != NULL) { switch (intval = atoi(val)) { case 1 : case 2 : case 4 : case 6 : case 9 : case 16 : doc->number_up = intval; break; default : _cupsLangPrintFilter(stderr, "ERROR", _("Unsupported number-up value %d, using " "number-up=1."), intval); doc->number_up = 1; break; } } else doc->number_up = 1; /* * number-up-layout */ if ((val = cupsGetOption("number-up-layout", num_options, options)) != NULL) { if (!_cups_strcasecmp(val, "lrtb")) doc->number_up_layout = PSTOPS_LAYOUT_LRTB; else if (!_cups_strcasecmp(val, "lrbt")) doc->number_up_layout = PSTOPS_LAYOUT_LRBT; else if (!_cups_strcasecmp(val, "rltb")) doc->number_up_layout = PSTOPS_LAYOUT_RLTB; else if (!_cups_strcasecmp(val, "rlbt")) doc->number_up_layout = PSTOPS_LAYOUT_RLBT; else if (!_cups_strcasecmp(val, "tblr")) doc->number_up_layout = PSTOPS_LAYOUT_TBLR; else if (!_cups_strcasecmp(val, "tbrl")) doc->number_up_layout = PSTOPS_LAYOUT_TBRL; else if (!_cups_strcasecmp(val, "btlr")) doc->number_up_layout = PSTOPS_LAYOUT_BTLR; else if (!_cups_strcasecmp(val, "btrl")) doc->number_up_layout = PSTOPS_LAYOUT_BTRL; else { _cupsLangPrintFilter(stderr, "ERROR", _("Unsupported number-up-layout value %s, using " "number-up-layout=lrtb."), val); doc->number_up_layout = PSTOPS_LAYOUT_LRTB; } } else doc->number_up_layout = PSTOPS_LAYOUT_LRTB; /* * OutputOrder */ if ((val = cupsGetOption("OutputOrder", num_options, options)) != NULL) { if (!_cups_strcasecmp(val, "Reverse")) doc->output_order = 1; } else if (ppd) { /* * Figure out the right default output order from the PPD file... */ if ((choice = ppdFindMarkedChoice(ppd, "OutputBin")) != NULL && (attr = ppdFindAttr(ppd, "PageStackOrder", choice->choice)) != NULL && attr->value) doc->output_order = !_cups_strcasecmp(attr->value, "Reverse"); else if ((attr = ppdFindAttr(ppd, "DefaultOutputOrder", NULL)) != NULL && attr->value) doc->output_order = !_cups_strcasecmp(attr->value, "Reverse"); } /* * page-border */ if ((val = cupsGetOption("page-border", num_options, options)) != NULL) { if (!_cups_strcasecmp(val, "none")) doc->page_border = PSTOPS_BORDERNONE; else if (!_cups_strcasecmp(val, "single")) doc->page_border = PSTOPS_BORDERSINGLE; else if (!_cups_strcasecmp(val, "single-thick")) doc->page_border = PSTOPS_BORDERSINGLE2; else if (!_cups_strcasecmp(val, "double")) doc->page_border = PSTOPS_BORDERDOUBLE; else if (!_cups_strcasecmp(val, "double-thick")) doc->page_border = PSTOPS_BORDERDOUBLE2; else { _cupsLangPrintFilter(stderr, "ERROR", _("Unsupported page-border value %s, using " "page-border=none."), val); doc->page_border = PSTOPS_BORDERNONE; } } else doc->page_border = PSTOPS_BORDERNONE; /* * page-label */ doc->page_label = cupsGetOption("page-label", num_options, options); /* * page-ranges */ doc->page_ranges = cupsGetOption("page-ranges", num_options, options); /* * page-set */ doc->page_set = cupsGetOption("page-set", num_options, options); /* * Now figure out if we have to force collated copies, etc. */ if ((attr = ppdFindAttr(ppd, "cupsMaxCopies", NULL)) != NULL) max_copies = atoi(attr->value); else if (ppd && ppd->manual_copies) max_copies = 1; else max_copies = 9999; if (doc->copies > max_copies) doc->collate = 1; else if (ppd && ppd->manual_copies && Duplex && doc->copies > 1) { /* * Force collated copies when printing a duplexed document to * a non-PS printer that doesn't do hardware copy generation. * Otherwise the copies will end up on the front/back side of * each page. */ doc->collate = 1; } /* * See if we have to filter the fast or slow way... */ if (doc->collate && doc->copies > 1) { /* * See if we need to manually collate the pages... */ doc->slow_collate = 1; if (doc->copies <= max_copies && (choice = ppdFindMarkedChoice(ppd, "Collate")) != NULL && !_cups_strcasecmp(choice->choice, "True")) { /* * Hardware collate option is selected, see if the option is * conflicting - if not, collate in hardware. Otherwise, * turn the hardware collate option off... */ if ((option = ppdFindOption(ppd, "Collate")) != NULL && !option->conflicted) doc->slow_collate = 0; else ppdMarkOption(ppd, "Collate", "False"); } } else doc->slow_collate = 0; if (!ppdFindOption(ppd, "OutputOrder") && doc->output_order) doc->slow_order = 1; else doc->slow_order = 0; if (Duplex && (doc->slow_collate || doc->slow_order || ((attr = ppdFindAttr(ppd, "cupsEvenDuplex", NULL)) != NULL && attr->value && !_cups_strcasecmp(attr->value, "true")))) doc->slow_duplex = 1; else doc->slow_duplex = 0; /* * Create a temporary file for page data if we need to filter slowly... */ if (doc->slow_order || doc->slow_collate) { if ((doc->temp = cupsTempFile2(doc->tempfile, sizeof(doc->tempfile))) == NULL) { perror("DEBUG: Unable to create temporary file"); exit(1); } } /* * Figure out if we should use ESPshowpage or not... */ if (doc->page_label || getenv("CLASSIFICATION") || doc->number_up > 1 || doc->page_border) { /* * Yes, use ESPshowpage... */ doc->use_ESPshowpage = 1; } fprintf(stderr, "DEBUG: slow_collate=%d, slow_duplex=%d, slow_order=%d\n", doc->slow_collate, doc->slow_duplex, doc->slow_order); } /* * 'skip_page()' - Skip past a page that won't be printed. */ static ssize_t /* O - Length of next line */ skip_page(cups_file_t *fp, /* I - File to read from */ char *line, /* I - Line buffer */ ssize_t linelen, /* I - Length of initial line */ size_t linesize) /* I - Size of line buffer */ { int level; /* Embedded document level */ level = 0; while ((linelen = (ssize_t)cupsFileGetLine(fp, line, linesize)) > 0) { if (level == 0 && (!strncmp(line, "%%Page:", 7) || !strncmp(line, "%%Trailer", 9))) break; else if (!strncmp(line, "%%BeginDocument", 15) || !strncmp(line, "%ADO_BeginApplication", 21)) level ++; else if ((!strncmp(line, "%%EndDocument", 13) || !strncmp(line, "%ADO_EndApplication", 19)) && level > 0) level --; else if (!strncmp(line, "%%BeginBinary:", 14) || (!strncmp(line, "%%BeginData:", 12) && !strstr(line, "ASCII") && !strstr(line, "Hex"))) { /* * Skip binary data... */ ssize_t bytes; /* Bytes of data */ bytes = atoi(strchr(line, ':') + 1); while (bytes > 0) { if ((size_t)bytes > linesize) linelen = (ssize_t)cupsFileRead(fp, line, linesize); else linelen = (ssize_t)cupsFileRead(fp, line, (size_t)bytes); if (linelen < 1) { line[0] = '\0'; perror("ERROR: Early end-of-file while reading binary data"); return (0); } bytes -= linelen; } } } return (linelen); } /* * 'start_nup()' - Start processing for N-up printing. */ static void start_nup(pstops_doc_t *doc, /* I - Document information */ int number, /* I - Page number */ int show_border, /* I - Show the border? */ const int *bounding_box) /* I - BoundingBox value */ { int pos; /* Position on page */ int x, y; /* Relative position of subpage */ double w, l, /* Width and length of subpage */ tx, ty; /* Translation values for subpage */ double pagew, /* Printable width of page */ pagel; /* Printable height of page */ int bboxx, /* BoundingBox X origin */ bboxy, /* BoundingBox Y origin */ bboxw, /* BoundingBox width */ bboxl; /* BoundingBox height */ double margin = 0; /* Current margin for border */ if (doc->number_up > 1) doc_puts(doc, "userdict/ESPsave save put\n"); pos = (number - 1) % doc->number_up; pagew = PageRight - PageLeft; pagel = PageTop - PageBottom; if (doc->fit_to_page) { bboxx = bounding_box[0]; bboxy = bounding_box[1]; bboxw = bounding_box[2] - bounding_box[0]; bboxl = bounding_box[3] - bounding_box[1]; } else { bboxx = 0; bboxy = 0; bboxw = (int)PageWidth; bboxl = (int)PageLength; } fprintf(stderr, "DEBUG: pagew = %.1f, pagel = %.1f\n", pagew, pagel); fprintf(stderr, "DEBUG: bboxx = %d, bboxy = %d, bboxw = %d, bboxl = %d\n", bboxx, bboxy, bboxw, bboxl); fprintf(stderr, "DEBUG: PageLeft = %.1f, PageRight = %.1f\n", PageLeft, PageRight); fprintf(stderr, "DEBUG: PageTop = %.1f, PageBottom = %.1f\n", PageTop, PageBottom); fprintf(stderr, "DEBUG: PageWidth = %.1f, PageLength = %.1f\n", PageWidth, PageLength); switch (Orientation) { case 1 : /* Landscape */ doc_printf(doc, "%.1f 0.0 translate 90 rotate\n", PageLength); break; case 2 : /* Reverse Portrait */ doc_printf(doc, "%.1f %.1f translate 180 rotate\n", PageWidth, PageLength); break; case 3 : /* Reverse Landscape */ doc_printf(doc, "0.0 %.1f translate -90 rotate\n", PageWidth); break; } /* * Mirror the page as needed... */ if (doc->mirror) doc_printf(doc, "%.1f 0.0 translate -1 1 scale\n", PageWidth); /* * Offset and scale as necessary for fit_to_page/fit-to-page/number-up... */ if (Duplex && doc->number_up > 1 && ((number / doc->number_up) & 1)) doc_printf(doc, "%.1f %.1f translate\n", PageWidth - PageRight, PageBottom); else if (doc->number_up > 1 || doc->fit_to_page) doc_printf(doc, "%.1f %.1f translate\n", PageLeft, PageBottom); switch (doc->number_up) { default : if (doc->fit_to_page) { w = pagew; l = w * bboxl / bboxw; if (l > pagel) { l = pagel; w = l * bboxw / bboxl; } tx = 0.5 * (pagew - w); ty = 0.5 * (pagel - l); doc_printf(doc, "%.1f %.1f translate %.3f %.3f scale\n", tx, ty, w / bboxw, l / bboxl); } else w = PageWidth; break; case 2 : if (Orientation & 1) { x = pos & 1; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEY) x = 1 - x; w = pagel; l = w * bboxl / bboxw; if (l > (pagew * 0.5)) { l = pagew * 0.5; w = l * bboxw / bboxl; } tx = 0.5 * (pagew * 0.5 - l); ty = 0.5 * (pagel - w); if (doc->normal_landscape) doc_printf(doc, "0.0 %.1f translate -90 rotate\n", pagel); else doc_printf(doc, "%.1f 0.0 translate 90 rotate\n", pagew); doc_printf(doc, "%.1f %.1f translate %.3f %.3f scale\n", ty, tx + pagew * 0.5 * x, w / bboxw, l / bboxl); } else { x = pos & 1; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEX) x = 1 - x; l = pagew; w = l * bboxw / bboxl; if (w > (pagel * 0.5)) { w = pagel * 0.5; l = w * bboxl / bboxw; } tx = 0.5 * (pagel * 0.5 - w); ty = 0.5 * (pagew - l); if (doc->normal_landscape) doc_printf(doc, "%.1f 0.0 translate 90 rotate\n", pagew); else doc_printf(doc, "0.0 %.1f translate -90 rotate\n", pagel); doc_printf(doc, "%.1f %.1f translate %.3f %.3f scale\n", tx + pagel * 0.5 * x, ty, w / bboxw, l / bboxl); } break; case 4 : if (doc->number_up_layout & PSTOPS_LAYOUT_VERTICAL) { x = (pos / 2) & 1; y = pos & 1; } else { x = pos & 1; y = (pos / 2) & 1; } if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEX) x = 1 - x; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEY) y = 1 - y; w = pagew * 0.5; l = w * bboxl / bboxw; if (l > (pagel * 0.5)) { l = pagel * 0.5; w = l * bboxw / bboxl; } tx = 0.5 * (pagew * 0.5 - w); ty = 0.5 * (pagel * 0.5 - l); doc_printf(doc, "%.1f %.1f translate %.3f %.3f scale\n", tx + x * pagew * 0.5, ty + y * pagel * 0.5, w / bboxw, l / bboxl); break; case 6 : if (Orientation & 1) { if (doc->number_up_layout & PSTOPS_LAYOUT_VERTICAL) { x = pos / 3; y = pos % 3; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEX) x = 1 - x; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEY) y = 2 - y; } else { x = pos & 1; y = pos / 2; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEX) x = 1 - x; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEY) y = 2 - y; } w = pagel * 0.5; l = w * bboxl / bboxw; if (l > (pagew * 0.333)) { l = pagew * 0.333; w = l * bboxw / bboxl; } tx = 0.5 * (pagel - 2 * w); ty = 0.5 * (pagew - 3 * l); if (doc->normal_landscape) doc_printf(doc, "0 %.1f translate -90 rotate\n", pagel); else doc_printf(doc, "%.1f 0 translate 90 rotate\n", pagew); doc_printf(doc, "%.1f %.1f translate %.3f %.3f scale\n", tx + x * w, ty + y * l, l / bboxl, w / bboxw); } else { if (doc->number_up_layout & PSTOPS_LAYOUT_VERTICAL) { x = pos / 2; y = pos & 1; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEX) x = 2 - x; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEY) y = 1 - y; } else { x = pos % 3; y = pos / 3; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEX) x = 2 - x; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEY) y = 1 - y; } l = pagew * 0.5; w = l * bboxw / bboxl; if (w > (pagel * 0.333)) { w = pagel * 0.333; l = w * bboxl / bboxw; } tx = 0.5 * (pagel - 3 * w); ty = 0.5 * (pagew - 2 * l); if (doc->normal_landscape) doc_printf(doc, "%.1f 0 translate 90 rotate\n", pagew); else doc_printf(doc, "0 %.1f translate -90 rotate\n", pagel); doc_printf(doc, "%.1f %.1f translate %.3f %.3f scale\n", tx + w * x, ty + l * y, w / bboxw, l / bboxl); } break; case 9 : if (doc->number_up_layout & PSTOPS_LAYOUT_VERTICAL) { x = (pos / 3) % 3; y = pos % 3; } else { x = pos % 3; y = (pos / 3) % 3; } if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEX) x = 2 - x; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEY) y = 2 - y; w = pagew * 0.333; l = w * bboxl / bboxw; if (l > (pagel * 0.333)) { l = pagel * 0.333; w = l * bboxw / bboxl; } tx = 0.5 * (pagew * 0.333 - w); ty = 0.5 * (pagel * 0.333 - l); doc_printf(doc, "%.1f %.1f translate %.3f %.3f scale\n", tx + x * pagew * 0.333, ty + y * pagel * 0.333, w / bboxw, l / bboxl); break; case 16 : if (doc->number_up_layout & PSTOPS_LAYOUT_VERTICAL) { x = (pos / 4) & 3; y = pos & 3; } else { x = pos & 3; y = (pos / 4) & 3; } if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEX) x = 3 - x; if (doc->number_up_layout & PSTOPS_LAYOUT_NEGATEY) y = 3 - y; w = pagew * 0.25; l = w * bboxl / bboxw; if (l > (pagel * 0.25)) { l = pagel * 0.25; w = l * bboxw / bboxl; } tx = 0.5 * (pagew * 0.25 - w); ty = 0.5 * (pagel * 0.25 - l); doc_printf(doc, "%.1f %.1f translate %.3f %.3f scale\n", tx + x * pagew * 0.25, ty + y * pagel * 0.25, w / bboxw, l / bboxl); break; } /* * Draw borders as necessary... */ if (doc->page_border && show_border) { int rects; /* Number of border rectangles */ double fscale; /* Scaling value for points */ rects = (doc->page_border & PSTOPS_BORDERDOUBLE) ? 2 : 1; fscale = PageWidth / w; margin = 2.25 * fscale; /* * Set the line width and color... */ doc_puts(doc, "gsave\n"); doc_printf(doc, "%.3f setlinewidth 0 setgray newpath\n", (doc->page_border & PSTOPS_BORDERTHICK) ? 0.5 * fscale : 0.24 * fscale); /* * Draw border boxes... */ for (; rects > 0; rects --, margin += 2 * fscale) if (doc->number_up > 1) doc_printf(doc, "%.1f %.1f %.1f %.1f ESPrs\n", margin, margin, bboxw - 2 * margin, bboxl - 2 * margin); else doc_printf(doc, "%.1f %.1f %.1f %.1f ESPrs\n", PageLeft + margin, PageBottom + margin, PageRight - PageLeft - 2 * margin, PageTop - PageBottom - 2 * margin); /* * Restore pen settings... */ doc_puts(doc, "grestore\n"); } if (doc->fit_to_page) { /* * Offset the page by its bounding box... */ doc_printf(doc, "%d %d translate\n", -bounding_box[0], -bounding_box[1]); } if (doc->fit_to_page || doc->number_up > 1) { /* * Clip the page to the page's bounding box... */ doc_printf(doc, "%.1f %.1f %.1f %.1f ESPrc\n", bboxx + margin, bboxy + margin, bboxw - 2 * margin, bboxl - 2 * margin); } } /* * 'write_label_prolog()' - Write the prolog with the classification * and page label. */ static void write_label_prolog(pstops_doc_t *doc, /* I - Document info */ const char *label, /* I - Page label */ float bottom, /* I - Bottom position in points */ float top, /* I - Top position in points */ float width) /* I - Width in points */ { const char *classification; /* CLASSIFICATION environment variable */ const char *ptr; /* Temporary string pointer */ /* * First get the current classification... */ if ((classification = getenv("CLASSIFICATION")) == NULL) classification = ""; if (strcmp(classification, "none") == 0) classification = ""; /* * If there is nothing to show, bind an empty 'write labels' procedure * and return... */ if (!classification[0] && (label == NULL || !label[0])) { doc_puts(doc, "userdict/ESPwl{}bind put\n"); return; } /* * Set the classification + page label string... */ doc_puts(doc, "userdict"); if (!strcmp(classification, "confidential")) doc_puts(doc, "/ESPpl(CONFIDENTIAL"); else if (!strcmp(classification, "classified")) doc_puts(doc, "/ESPpl(CLASSIFIED"); else if (!strcmp(classification, "secret")) doc_puts(doc, "/ESPpl(SECRET"); else if (!strcmp(classification, "topsecret")) doc_puts(doc, "/ESPpl(TOP SECRET"); else if (!strcmp(classification, "unclassified")) doc_puts(doc, "/ESPpl(UNCLASSIFIED"); else { doc_puts(doc, "/ESPpl("); for (ptr = classification; *ptr; ptr ++) { if (*ptr < 32 || *ptr > 126) doc_printf(doc, "\\%03o", *ptr); else if (*ptr == '_') doc_puts(doc, " "); else if (*ptr == '(' || *ptr == ')' || *ptr == '\\') doc_printf(doc, "\\%c", *ptr); else doc_printf(doc, "%c", *ptr); } } if (label) { if (classification[0]) doc_puts(doc, " - "); /* * Quote the label string as needed... */ for (ptr = label; *ptr; ptr ++) { if (*ptr < 32 || *ptr > 126) doc_printf(doc, "\\%03o", *ptr); else if (*ptr == '(' || *ptr == ')' || *ptr == '\\') doc_printf(doc, "\\%c", *ptr); else doc_printf(doc, "%c", *ptr); } } doc_puts(doc, ")put\n"); /* * Then get a 14 point Helvetica-Bold font... */ doc_puts(doc, "userdict/ESPpf /Helvetica-Bold findfont 14 scalefont put\n"); /* * Finally, the procedure to write the labels on the page... */ doc_puts(doc, "userdict/ESPwl{\n"); doc_puts(doc, " ESPpf setfont\n"); doc_printf(doc, " ESPpl stringwidth pop dup 12 add exch -0.5 mul %.0f add\n", width * 0.5f); doc_puts(doc, " 1 setgray\n"); doc_printf(doc, " dup 6 sub %.0f 3 index 20 ESPrf\n", bottom - 2.0); doc_printf(doc, " dup 6 sub %.0f 3 index 20 ESPrf\n", top - 18.0); doc_puts(doc, " 0 setgray\n"); doc_printf(doc, " dup 6 sub %.0f 3 index 20 ESPrs\n", bottom - 2.0); doc_printf(doc, " dup 6 sub %.0f 3 index 20 ESPrs\n", top - 18.0); doc_printf(doc, " dup %.0f moveto ESPpl show\n", bottom + 2.0); doc_printf(doc, " %.0f moveto ESPpl show\n", top - 14.0); doc_puts(doc, "pop\n"); doc_puts(doc, "}bind put\n"); } /* * 'write_labels()' - Write the actual page labels. * * This function is a copy of the one in common.c since we need to * use doc_puts/doc_printf instead of puts/printf... */ static void write_labels(pstops_doc_t *doc, /* I - Document information */ int orient) /* I - Orientation of the page */ { float width, /* Width of page */ length; /* Length of page */ doc_puts(doc, "gsave\n"); if ((orient ^ Orientation) & 1) { width = PageLength; length = PageWidth; } else { width = PageWidth; length = PageLength; } switch (orient & 3) { case 1 : /* Landscape */ doc_printf(doc, "%.1f 0.0 translate 90 rotate\n", length); break; case 2 : /* Reverse Portrait */ doc_printf(doc, "%.1f %.1f translate 180 rotate\n", width, length); break; case 3 : /* Reverse Landscape */ doc_printf(doc, "0.0 %.1f translate -90 rotate\n", width); break; } doc_puts(doc, "ESPwl\n"); doc_puts(doc, "grestore\n"); } /* * 'write_options()' - Write options provided via %%IncludeFeature. */ static void write_options( pstops_doc_t *doc, /* I - Document */ ppd_file_t *ppd, /* I - PPD file */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { int i; /* Looping var */ ppd_option_t *option; /* PPD option */ float min_order; /* Minimum OrderDependency value */ char *doc_setup, /* DocumentSetup commands to send */ *any_setup; /* AnySetup commands to send */ /* * Figure out the minimum OrderDependency value... */ if ((option = ppdFindOption(ppd, "PageRegion")) != NULL) min_order = option->order; else min_order = 999.0f; for (i = 0; i < num_options; i ++) if ((option = ppdFindOption(ppd, options[i].name)) != NULL && option->order < min_order) min_order = option->order; /* * Mark and extract them... */ cupsMarkOptions(ppd, num_options, options); doc_setup = ppdEmitString(ppd, PPD_ORDER_DOCUMENT, min_order); any_setup = ppdEmitString(ppd, PPD_ORDER_ANY, min_order); /* * Then send them out... */ if (doc->number_up > 1) { /* * Temporarily restore setpagedevice so we can set the options... */ doc_puts(doc, "userdict/setpagedevice/CUPSsetpagedevice load put\n"); } if (doc_setup) { doc_puts(doc, doc_setup); free(doc_setup); } if (any_setup) { doc_puts(doc, any_setup); free(any_setup); } if (doc->number_up > 1) { /* * Disable setpagedevice again... */ doc_puts(doc, "userdict/setpagedevice{pop}bind put\n"); } } cups-2.2.7/filter/raster-driver.header000664 000765 000024 00000002717 13255074424 020412 0ustar00msweetstaff000000 000000

    Developing Raster Printer Drivers

    This document describes how to develop printer drivers for raster printers. Topics include: printer driver basics, creating new PPD files, using filters, implementing color management, and adding macOS features.

    cups-2.2.7/filter/raster-driver.shtml000664 000765 000024 00000027135 13255074424 020312 0ustar00msweetstaff000000 000000

    Printer Driver Basics

    A CUPS raster printer driver consists of a PostScript Printer Description (PPD) file that describes the features and capabilities of the device, one or more filter programs that prepare print data for the device, and zero or more support files for color management, online help, and so forth. The PPD file includes references to all of the filters and support files used by the driver.

    Every time a user prints something the scheduler program, cupsd(8), determines the format of the print job and the programs required to convert that job into something the printer understands. CUPS includes filter programs for many common formats, for example to convert Portable Document Format (PDF) files into CUPS raster data. Figure 1 shows the data flow of a typical print job.

    The raster filter converts CUPS raster data into a format the printer understands, for example HP-PCL. CUPS includes several sample raster filters supporting standard page description languages (PDLs). Table 1 shows the raster filters that are bundled with CUPS and the languages they support.

    Table 1: Standard CUPS Raster Filters
    FilterPDLsppdc DriverTypeppdc #include file
    rastertoepsonESC/P, ESC/P2epsonepson.h
    rastertoescpxESC/P, ESC/P2, EPSON Remote Modeescpescp.h
    rastertohpHP-PCL3, HP-PCL5hphp.h
    rastertolabelCPCL, Dymo, EPL1, EPL2, Intellitech PCL, ZPLlabellabel.h
    rastertopclxHP-RTL, HP-PCL3, HP-PCL3GUI, HP-PCL5, HP-PCL5c, HP-PCL5epclpcl.h

    The optional port monitor handles interface-specific protocol or encoding issues. For example, some raster printers use the 1284.4 communications protocol.

    The backend handles communications with the printer, sending print data from the last filter to the printer and relaying back-channel data from the printer to the upstream filters. CUPS includes backend programs for common direct-connect interfaces and network protocols, and you can provide your own backend to support custom interfaces and protocols.

    The scheduler also supports a special "command" file format for sending maintenance commands and status queries to a printer or printer driver. Command print jobs typically use a single command filter program defined in the PPD file to generate the appropriate printer commands and handle any responses from the printer. Figure 2 shows the data flow of a typical command job.

    Raster printer drivers must provide their own command filter.

    Creating New PPD Files

    We recommend using the CUPS PPD compiler, ppdc(1), to create new PPD files since it manages many of the tedious (and error-prone!) details of paper sizes and localization for you. It also allows you to easily support multiple devices from a single source file. For more information see the "Introduction to the PPD Compiler" document. Listing 1 shows a driver information file for several similar black-and-white HP-PCL5 laser printers.

    Listing 1: "examples/laserjet-basic.drv"

    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // Include HP-PCL driver definitions
    #include <pcl.h>
    
    // Specify that this driver uses the HP-PCL driver...
    DriverType pcl
    
    // Specify the driver options via the model number...
    ModelNumber ($PCL_PAPER_SIZE $PCL_PJL $PCL_PJL_RESOLUTION)
    
    // List the fonts that are supported, in this case all standard fonts...
    Font *
    
    // Manufacturer and driver version
    Manufacturer "HP"
    Version 1.0
    
    // Supported page sizes and their margins
    HWMargins 18 12 18 12
    *MediaSize Letter
    MediaSize Legal
    MediaSize Executive
    MediaSize Monarch
    MediaSize Statement
    MediaSize FanFoldGermanLegal
    
    HWMargins 18 12.72 18 12.72
    MediaSize Env10
    
    HWMargins 9.72 12 9.72 12
    MediaSize A4
    MediaSize A5
    MediaSize B5
    MediaSize EnvC5
    MediaSize EnvDL
    MediaSize EnvISOB5
    MediaSize Postcard
    MediaSize DoublePostcard
    
    // Only black-and-white output with mode 3 compression...
    ColorModel Gray k chunky 3
    
    // Supported resolutions
    Resolution - 1 0 0 0 "300dpi/300 DPI"
    *Resolution - 8 0 0 0 "600dpi/600 DPI"
    
    // Supported input slots
    *InputSlot 7 "Auto/Automatic Selection"
    InputSlot 2 "Manual/Tray 1 - Manual Feed"
    InputSlot 4 "Upper/Tray 1"
    InputSlot 1 "Lower/Tray 2"
    InputSlot 5 "LargeCapacity/Tray 3"
    
    // Tray 3 is an option...
    Installable "OptionLargeCapacity/Tray 3 Installed"
    UIConstraints "*OptionLargeCapacity False *InputSlot LargeCapacity"
    
    {
      // HP LaserJet 2100 Series
      Throughput 10
      ModelName "LaserJet 2100 Series"
      PCFileName "hpljt211.ppd"
    }
    
    {
      // LaserJet 2200 and 2300 series have duplexer option...
      Duplex normal
      Installable "OptionDuplex/Duplexer Installed"
      UIConstraints "*OptionDuplex False *Duplex"
    
      {
        // HP LaserJet 2200 Series
        Throughput 19
        ModelName "LaserJet 2200 Series"
        PCFileName "hpljt221.ppd"
      }
    
      {
        // HP LaserJet 2300 Series
        Throughput 25
        ModelName "LaserJet 2300 Series"
        PCFileName "hpljt231.ppd"
      }
    }
    

    Using Filters

    The standard CUPS raster filters can be specified using the DriverType directive, for example:

    // Specify that this driver uses the HP-PCL driver...
    DriverType pcl
    

    Table 1 shows the driver types for each of the standard CUPS raster filters. For drivers that do not use the standard raster filters, the "custom" type is used with Filter directives:

    DriverType custom
    Filter application/vnd.cups-raster 100 /path/to/raster/filter
    Filter application/vnd.cups-command 100 /path/to/command/filter
    

    Implementing Color Management

    CUPS uses ICC color profiles to provide more accurate color reproduction. The cupsICCProfile attribute defines the color profiles that are available for a given printer, for example:

    Attribute cupsICCProfile "ColorModel.MediaType.Resolution/Description" /path/to/ICC/profile
    

    where "ColorModel.MediaType.Resolution" defines a selector based on the corresponding option selections. A simple driver might only define profiles for the color models that are supported, for example a printer supporting Gray and RGB might use:

    Attribute cupsICCProfile "Gray../Grayscale Profile" /path/to/ICC/gray-profile
    Attribute cupsICCProfile "RGB../Full Color Profile" /path/to/ICC/rgb-profile
    

    The options used for profile selection can be customized using the cupsICCQualifier2 and cupsICCQualifier3 attributes.

    Since macOS 10.5Custom Color Matching Support

    macOS printer drivers that are based on an existing standard RGB colorspace can tell the system to use the corresponding colorspace instead of an arbitrary ICC color profile when doing color management. The APSupportsCustomColorMatching and APDefaultCustomColorMatchingProfile attributes can be used to enable this mode:

    Attribute APSupportsCustomColorMatching "" true
    Attribute APDefaultCustomColorMatchingProfile "" sRGB
    

    Adding macOS Features

    macOS printer drivers can provide additional attributes to specify additional option panes in the print dialog, an image of the printer, a help book, and option presets for the driver software:

    Attribute APDialogExtension "" /Library/Printers/Vendor/filename.plugin
    Attribute APHelpBook "" /Library/Printers/Vendor/filename.bundle
    Attribute APPrinterIconPath "" /Library/Printers/Vendor/filename.icns
    Attribute APPrinterPreset "name/text" "*option choice ..."
    
    cups-2.2.7/filter/raster.c000664 000765 000024 00000173163 13255074424 016117 0ustar00msweetstaff000000 000000 /* * Raster file routines for CUPS. * * Copyright 2007-2018 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * This file is part of the CUPS Imaging library. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #ifdef HAVE_STDINT_H # include #endif /* HAVE_STDINT_H */ /* * Private structures... */ struct _cups_raster_s /**** Raster stream data ****/ { unsigned sync; /* Sync word from start of stream */ void *ctx; /* File descriptor */ cups_raster_iocb_t iocb; /* IO callback */ cups_mode_t mode; /* Read/write mode */ cups_page_header2_t header; /* Raster header for current page */ unsigned rowheight, /* Row height in lines */ count, /* Current row run-length count */ remaining, /* Remaining rows in page image */ bpp; /* Bytes per pixel/color */ unsigned char *pixels, /* Pixels for current row */ *pend, /* End of pixel buffer */ *pcurrent; /* Current byte in pixel buffer */ int compressed, /* Non-zero if data is compressed */ swapped; /* Non-zero if data is byte-swapped */ unsigned char *buffer, /* Read/write buffer */ *bufptr, /* Current (read) position in buffer */ *bufend; /* End of current (read) buffer */ size_t bufsize; /* Buffer size */ #ifdef DEBUG size_t iostart, /* Start of read/write buffer */ iocount; /* Number of bytes read/written */ #endif /* DEBUG */ unsigned apple_page_count;/* Apple raster page count */ }; typedef void (*_cups_copyfunc_t)(void *dst, const void *src, size_t bytes); /* * Local globals... */ #ifdef DEBUG static const char * const cups_color_spaces[] = { /* Color spaces */ "CUPS_CSPACE_W", "CUPS_CSPACE_RGB", "CUPS_CSPACE_RGBA", "CUPS_CSPACE_K", "CUPS_CSPACE_CMY", "CUPS_CSPACE_YMC", "CUPS_CSPACE_CMYK", "CUPS_CSPACE_YMCK", "CUPS_CSPACE_KCMY", "CUPS_CSPACE_KCMYcm", "CUPS_CSPACE_GMCK", "CUPS_CSPACE_GMCS", "CUPS_CSPACE_WHITE", "CUPS_CSPACE_GOLD", "CUPS_CSPACE_SILVER", "CUPS_CSPACE_CIEXYZ", "CUPS_CSPACE_CIELab", "CUPS_CSPACE_RGBW", "CUPS_CSPACE_SW", "CUPS_CSPACE_SRGB", "CUPS_CSPACE_ADOBERGB", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "CUPS_CSPACE_ICC1", "CUPS_CSPACE_ICC2", "CUPS_CSPACE_ICC3", "CUPS_CSPACE_ICC4", "CUPS_CSPACE_ICC5", "CUPS_CSPACE_ICC6", "CUPS_CSPACE_ICC7", "CUPS_CSPACE_ICC8", "CUPS_CSPACE_ICC9", "CUPS_CSPACE_ICCA", "CUPS_CSPACE_ICCB", "CUPS_CSPACE_ICCC", "CUPS_CSPACE_ICCD", "CUPS_CSPACE_ICCE", "CUPS_CSPACE_ICCF", "47", "CUPS_CSPACE_DEVICE1", "CUPS_CSPACE_DEVICE2", "CUPS_CSPACE_DEVICE3", "CUPS_CSPACE_DEVICE4", "CUPS_CSPACE_DEVICE5", "CUPS_CSPACE_DEVICE6", "CUPS_CSPACE_DEVICE7", "CUPS_CSPACE_DEVICE8", "CUPS_CSPACE_DEVICE9", "CUPS_CSPACE_DEVICEA", "CUPS_CSPACE_DEVICEB", "CUPS_CSPACE_DEVICEC", "CUPS_CSPACE_DEVICED", "CUPS_CSPACE_DEVICEE", "CUPS_CSPACE_DEVICEF" }; static const char * const cups_modes[] = { /* Open modes */ "CUPS_RASTER_READ", "CUPS_RASTER_WRITE", "CUPS_RASTER_WRITE_COMPRESSED", "CUPS_RASTER_WRITE_PWG", "CUPS_RASTER_WRITE_APPLE" }; #endif /* DEBUG */ /* * Local functions... */ static ssize_t cups_raster_io(cups_raster_t *r, unsigned char *buf, size_t bytes); static unsigned cups_raster_read_header(cups_raster_t *r); static ssize_t cups_raster_read(cups_raster_t *r, unsigned char *buf, size_t bytes); static int cups_raster_update(cups_raster_t *r); static ssize_t cups_raster_write(cups_raster_t *r, const unsigned char *pixels); static ssize_t cups_read_fd(void *ctx, unsigned char *buf, size_t bytes); static void cups_swap(unsigned char *buf, size_t bytes); static void cups_swap_copy(unsigned char *dst, const unsigned char *src, size_t bytes); static ssize_t cups_write_fd(void *ctx, unsigned char *buf, size_t bytes); /* * 'cupsRasterClose()' - Close a raster stream. * * The file descriptor associated with the raster stream must be closed * separately as needed. */ void cupsRasterClose(cups_raster_t *r) /* I - Stream to close */ { if (r != NULL) { if (r->buffer) free(r->buffer); if (r->pixels) free(r->pixels); free(r); } } /* * 'cupsRasterInitPWGHeader()' - Initialize a page header for PWG Raster output. * * The "media" argument specifies the media to use. * * The "type" argument specifies a "pwg-raster-document-type-supported" value * that controls the color space and bit depth of the raster data. * * The "xres" and "yres" arguments specify the raster resolution in dots per * inch. * * The "sheet_back" argument specifies a "pwg-raster-document-sheet-back" value * to apply for the back side of a page. Pass @code NULL@ for the front side. * * @since CUPS 2.2/macOS 10.12@ */ int /* O - 1 on success, 0 on failure */ cupsRasterInitPWGHeader( cups_page_header2_t *h, /* I - Page header */ pwg_media_t *media, /* I - PWG media information */ const char *type, /* I - PWG raster type string */ int xdpi, /* I - Cross-feed direction (horizontal) resolution */ int ydpi, /* I - Feed direction (vertical) resolution */ const char *sides, /* I - IPP "sides" option value */ const char *sheet_back) /* I - Transform for back side or @code NULL@ for none */ { if (!h || !media || !type || xdpi <= 0 || ydpi <= 0) { _cupsRasterAddError("%s", strerror(EINVAL)); return (0); } /* * Initialize the page header... */ memset(h, 0, sizeof(cups_page_header2_t)); strlcpy(h->cupsPageSizeName, media->pwg, sizeof(h->cupsPageSizeName)); h->PageSize[0] = (unsigned)(72 * media->width / 2540); h->PageSize[1] = (unsigned)(72 * media->length / 2540); /* This never gets written but is needed for some applications */ h->cupsPageSize[0] = 72.0f * media->width / 2540.0f; h->cupsPageSize[1] = 72.0f * media->length / 2540.0f; h->ImagingBoundingBox[2] = h->PageSize[0]; h->ImagingBoundingBox[3] = h->PageSize[1]; h->HWResolution[0] = (unsigned)xdpi; h->HWResolution[1] = (unsigned)ydpi; h->cupsWidth = (unsigned)(media->width * xdpi / 2540); h->cupsHeight = (unsigned)(media->length * ydpi / 2540); if (h->cupsWidth > 0x00ffffff || h->cupsHeight > 0x00ffffff) { _cupsRasterAddError("Raster dimensions too large."); return (0); } h->cupsInteger[CUPS_RASTER_PWG_ImageBoxRight] = h->cupsWidth; h->cupsInteger[CUPS_RASTER_PWG_ImageBoxBottom] = h->cupsHeight; /* * Colorspace and bytes per line... */ if (!strcmp(type, "adobe-rgb_8")) { h->cupsBitsPerColor = 8; h->cupsBitsPerPixel = 24; h->cupsColorSpace = CUPS_CSPACE_ADOBERGB; } else if (!strcmp(type, "adobe-rgb_16")) { h->cupsBitsPerColor = 16; h->cupsBitsPerPixel = 48; h->cupsColorSpace = CUPS_CSPACE_ADOBERGB; } else if (!strcmp(type, "black_1")) { h->cupsBitsPerColor = 1; h->cupsBitsPerPixel = 1; h->cupsColorSpace = CUPS_CSPACE_K; } else if (!strcmp(type, "black_8")) { h->cupsBitsPerColor = 8; h->cupsBitsPerPixel = 8; h->cupsColorSpace = CUPS_CSPACE_K; } else if (!strcmp(type, "black_16")) { h->cupsBitsPerColor = 16; h->cupsBitsPerPixel = 16; h->cupsColorSpace = CUPS_CSPACE_K; } else if (!strcmp(type, "cmyk_8")) { h->cupsBitsPerColor = 8; h->cupsBitsPerPixel = 32; h->cupsColorSpace = CUPS_CSPACE_CMYK; } else if (!strcmp(type, "cmyk_16")) { h->cupsBitsPerColor = 16; h->cupsBitsPerPixel = 64; h->cupsColorSpace = CUPS_CSPACE_CMYK; } else if (!strncmp(type, "device", 6) && type[6] >= '1' && type[6] <= '9') { int ncolors, bits; /* Number of colors and bits */ if (sscanf(type, "device%d_%d", &ncolors, &bits) != 2 || ncolors > 15 || (bits != 8 && bits != 16)) { _cupsRasterAddError("Unsupported raster type \'%s\'.", type); return (0); } h->cupsBitsPerColor = (unsigned)bits; h->cupsBitsPerPixel = (unsigned)(ncolors * bits); h->cupsColorSpace = (cups_cspace_t)(CUPS_CSPACE_DEVICE1 + ncolors - 1); } else if (!strcmp(type, "rgb_8")) { h->cupsBitsPerColor = 8; h->cupsBitsPerPixel = 24; h->cupsColorSpace = CUPS_CSPACE_RGB; } else if (!strcmp(type, "rgb_16")) { h->cupsBitsPerColor = 16; h->cupsBitsPerPixel = 48; h->cupsColorSpace = CUPS_CSPACE_RGB; } else if (!strcmp(type, "sgray_1")) { h->cupsBitsPerColor = 1; h->cupsBitsPerPixel = 1; h->cupsColorSpace = CUPS_CSPACE_SW; } else if (!strcmp(type, "sgray_8")) { h->cupsBitsPerColor = 8; h->cupsBitsPerPixel = 8; h->cupsColorSpace = CUPS_CSPACE_SW; } else if (!strcmp(type, "sgray_16")) { h->cupsBitsPerColor = 16; h->cupsBitsPerPixel = 16; h->cupsColorSpace = CUPS_CSPACE_SW; } else if (!strcmp(type, "srgb_8")) { h->cupsBitsPerColor = 8; h->cupsBitsPerPixel = 24; h->cupsColorSpace = CUPS_CSPACE_SRGB; } else if (!strcmp(type, "srgb_16")) { h->cupsBitsPerColor = 16; h->cupsBitsPerPixel = 48; h->cupsColorSpace = CUPS_CSPACE_SRGB; } else { _cupsRasterAddError("Unsupported raster type \'%s\'.", type); return (0); } h->cupsColorOrder = CUPS_ORDER_CHUNKED; h->cupsNumColors = h->cupsBitsPerPixel / h->cupsBitsPerColor; h->cupsBytesPerLine = (h->cupsWidth * h->cupsBitsPerPixel + 7) / 8; /* * Duplex support... */ h->cupsInteger[CUPS_RASTER_PWG_CrossFeedTransform] = 1; h->cupsInteger[CUPS_RASTER_PWG_FeedTransform] = 1; if (sides) { if (!strcmp(sides, "two-sided-long-edge")) { h->Duplex = 1; } else if (!strcmp(sides, "two-sided-short-edge")) { h->Duplex = 1; h->Tumble = 1; } else if (strcmp(sides, "one-sided")) { _cupsRasterAddError("Unsupported sides value \'%s\'.", sides); return (0); } if (sheet_back) { if (!strcmp(sheet_back, "flipped")) { if (h->Tumble) h->cupsInteger[CUPS_RASTER_PWG_CrossFeedTransform] = 0xffffffffU; else h->cupsInteger[CUPS_RASTER_PWG_FeedTransform] = 0xffffffffU; } else if (!strcmp(sheet_back, "manual-tumble")) { if (h->Tumble) { h->cupsInteger[CUPS_RASTER_PWG_CrossFeedTransform] = 0xffffffffU; h->cupsInteger[CUPS_RASTER_PWG_FeedTransform] = 0xffffffffU; } } else if (!strcmp(sheet_back, "rotated")) { if (!h->Tumble) { h->cupsInteger[CUPS_RASTER_PWG_CrossFeedTransform] = 0xffffffffU; h->cupsInteger[CUPS_RASTER_PWG_FeedTransform] = 0xffffffffU; } } else if (strcmp(sheet_back, "normal")) { _cupsRasterAddError("Unsupported sheet_back value \'%s\'.", sheet_back); return (0); } } } return (1); } /* * 'cupsRasterOpen()' - Open a raster stream using a file descriptor. * * This function associates a raster stream with the given file descriptor. * For most printer driver filters, "fd" will be 0 (stdin). For most raster * image processor (RIP) filters that generate raster data, "fd" will be 1 * (stdout). * * When writing raster data, the @code CUPS_RASTER_WRITE@, * @code CUPS_RASTER_WRITE_COMPRESS@, or @code CUPS_RASTER_WRITE_PWG@ mode can * be used - compressed and PWG output is generally 25-50% smaller but adds a * 100-300% execution time overhead. */ cups_raster_t * /* O - New stream */ cupsRasterOpen(int fd, /* I - File descriptor */ cups_mode_t mode) /* I - Mode - @code CUPS_RASTER_READ@, @code CUPS_RASTER_WRITE@, @code CUPS_RASTER_WRITE_COMPRESSED@, or @code CUPS_RASTER_WRITE_PWG@ */ { DEBUG_printf(("cupsRasterOpen(fd=%d, mode=%s)", fd, cups_modes[mode])); if (mode == CUPS_RASTER_READ) return (cupsRasterOpenIO(cups_read_fd, (void *)((intptr_t)fd), mode)); else return (cupsRasterOpenIO(cups_write_fd, (void *)((intptr_t)fd), mode)); } /* * 'cupsRasterOpenIO()' - Open a raster stream using a callback function. * * This function associates a raster stream with the given callback function and * context pointer. * * When writing raster data, the @code CUPS_RASTER_WRITE@, * @code CUPS_RASTER_WRITE_COMPRESS@, or @code CUPS_RASTER_WRITE_PWG@ mode can * be used - compressed and PWG output is generally 25-50% smaller but adds a * 100-300% execution time overhead. */ cups_raster_t * /* O - New stream */ cupsRasterOpenIO( cups_raster_iocb_t iocb, /* I - Read/write callback */ void *ctx, /* I - Context pointer for callback */ cups_mode_t mode) /* I - Mode - @code CUPS_RASTER_READ@, @code CUPS_RASTER_WRITE@, @code CUPS_RASTER_WRITE_COMPRESSED@, or @code CUPS_RASTER_WRITE_PWG@ */ { cups_raster_t *r; /* New stream */ DEBUG_printf(("cupsRasterOpenIO(iocb=%p, ctx=%p, mode=%s)", (void *)iocb, ctx, cups_modes[mode])); _cupsRasterClearError(); if ((r = calloc(sizeof(cups_raster_t), 1)) == NULL) { _cupsRasterAddError("Unable to allocate memory for raster stream: %s\n", strerror(errno)); DEBUG_puts("1cupsRasterOpenIO: Returning NULL."); return (NULL); } r->ctx = ctx; r->iocb = iocb; r->mode = mode; if (mode == CUPS_RASTER_READ) { /* * Open for read - get sync word... */ if (cups_raster_io(r, (unsigned char *)&(r->sync), sizeof(r->sync)) != sizeof(r->sync)) { _cupsRasterAddError("Unable to read header from raster stream: %s\n", strerror(errno)); free(r); DEBUG_puts("1cupsRasterOpenIO: Unable to read header, returning NULL."); return (NULL); } if (r->sync != CUPS_RASTER_SYNC && r->sync != CUPS_RASTER_REVSYNC && r->sync != CUPS_RASTER_SYNCv1 && r->sync != CUPS_RASTER_REVSYNCv1 && r->sync != CUPS_RASTER_SYNCv2 && r->sync != CUPS_RASTER_REVSYNCv2 && r->sync != CUPS_RASTER_SYNCapple && r->sync != CUPS_RASTER_REVSYNCapple) { _cupsRasterAddError("Unknown raster format %08x!\n", r->sync); free(r); DEBUG_puts("1cupsRasterOpenIO: Unknown format, returning NULL."); return (NULL); } if (r->sync == CUPS_RASTER_SYNCv2 || r->sync == CUPS_RASTER_REVSYNCv2 || r->sync == CUPS_RASTER_SYNCapple || r->sync == CUPS_RASTER_REVSYNCapple) r->compressed = 1; DEBUG_printf(("1cupsRasterOpenIO: sync=%08x", r->sync)); if (r->sync == CUPS_RASTER_REVSYNC || r->sync == CUPS_RASTER_REVSYNCv1 || r->sync == CUPS_RASTER_REVSYNCv2 || r->sync == CUPS_RASTER_REVSYNCapple) r->swapped = 1; if (r->sync == CUPS_RASTER_SYNCapple || r->sync == CUPS_RASTER_REVSYNCapple) { unsigned char header[8]; /* File header */ if (cups_raster_io(r, (unsigned char *)header, sizeof(header)) != sizeof(header)) { _cupsRasterAddError("Unable to read header from raster stream: %s\n", strerror(errno)); free(r); DEBUG_puts("1cupsRasterOpenIO: Unable to read header, returning NULL."); return (NULL); } } #ifdef DEBUG r->iostart = r->iocount; #endif /* DEBUG */ } else { /* * Open for write - put sync word... */ switch (mode) { default : case CUPS_RASTER_WRITE : r->sync = CUPS_RASTER_SYNC; break; case CUPS_RASTER_WRITE_COMPRESSED : r->compressed = 1; r->sync = CUPS_RASTER_SYNCv2; break; case CUPS_RASTER_WRITE_PWG : r->compressed = 1; r->sync = htonl(CUPS_RASTER_SYNC_PWG); r->swapped = r->sync != CUPS_RASTER_SYNC_PWG; break; case CUPS_RASTER_WRITE_APPLE : r->compressed = 1; r->sync = htonl(CUPS_RASTER_SYNCapple); r->swapped = r->sync != CUPS_RASTER_SYNCapple; r->apple_page_count = 0xffffffffU; break; } if (cups_raster_io(r, (unsigned char *)&(r->sync), sizeof(r->sync)) < (ssize_t)sizeof(r->sync)) { _cupsRasterAddError("Unable to write raster stream header: %s\n", strerror(errno)); free(r); DEBUG_puts("1cupsRasterOpenIO: Unable to write header, returning NULL."); return (NULL); } } DEBUG_printf(("1cupsRasterOpenIO: compressed=%d, swapped=%d, returning %p", r->compressed, r->swapped, (void *)r)); return (r); } /* * 'cupsRasterReadHeader()' - Read a raster page header and store it in a * version 1 page header structure. * * This function is deprecated. Use @link cupsRasterReadHeader2@ instead. * * Version 1 page headers were used in CUPS 1.0 and 1.1 and contain a subset * of the version 2 page header data. This function handles reading version 2 * page headers and copying only the version 1 data into the provided buffer. * * @deprecated@ */ unsigned /* O - 1 on success, 0 on failure/end-of-file */ cupsRasterReadHeader( cups_raster_t *r, /* I - Raster stream */ cups_page_header_t *h) /* I - Pointer to header data */ { DEBUG_printf(("cupsRasterReadHeader(r=%p, h=%p)", (void *)r, (void *)h)); /* * Get the raster header... */ if (!cups_raster_read_header(r)) { memset(h, 0, sizeof(cups_page_header_t)); DEBUG_puts("1cupsRasterReadHeader: Unable to read page header, returning 0."); return (0); } /* * Copy the header to the user-supplied buffer... */ memcpy(h, &(r->header), sizeof(cups_page_header_t)); DEBUG_printf(("1cupsRasterReadHeader: cupsColorSpace=%s", cups_color_spaces[h->cupsColorSpace])); DEBUG_printf(("1cupsRasterReadHeader: cupsBitsPerColor=%u", h->cupsBitsPerColor)); DEBUG_printf(("1cupsRasterReadHeader: cupsBitsPerPixel=%u", h->cupsBitsPerPixel)); DEBUG_printf(("1cupsRasterReadHeader: cupsBytesPerLine=%u", h->cupsBytesPerLine)); DEBUG_printf(("1cupsRasterReadHeader: cupsWidth=%u", h->cupsWidth)); DEBUG_printf(("1cupsRasterReadHeader: cupsHeight=%u", h->cupsHeight)); DEBUG_puts("1cupsRasterReadHeader: Returning 1."); return (1); } /* * 'cupsRasterReadHeader2()' - Read a raster page header and store it in a * version 2 page header structure. * * @since CUPS 1.2/macOS 10.5@ */ unsigned /* O - 1 on success, 0 on failure/end-of-file */ cupsRasterReadHeader2( cups_raster_t *r, /* I - Raster stream */ cups_page_header2_t *h) /* I - Pointer to header data */ { /* * Get the raster header... */ DEBUG_printf(("cupsRasterReadHeader2(r=%p, h=%p)", (void *)r, (void *)h)); if (!cups_raster_read_header(r)) { memset(h, 0, sizeof(cups_page_header2_t)); DEBUG_puts("1cupsRasterReadHeader2: Unable to read header, returning 0."); return (0); } /* * Copy the header to the user-supplied buffer... */ memcpy(h, &(r->header), sizeof(cups_page_header2_t)); DEBUG_printf(("1cupsRasterReadHeader2: cupsColorSpace=%s", cups_color_spaces[h->cupsColorSpace])); DEBUG_printf(("1cupsRasterReadHeader2: cupsBitsPerColor=%u", h->cupsBitsPerColor)); DEBUG_printf(("1cupsRasterReadHeader2: cupsBitsPerPixel=%u", h->cupsBitsPerPixel)); DEBUG_printf(("1cupsRasterReadHeader2: cupsBytesPerLine=%u", h->cupsBytesPerLine)); DEBUG_printf(("1cupsRasterReadHeader2: cupsWidth=%u", h->cupsWidth)); DEBUG_printf(("1cupsRasterReadHeader2: cupsHeight=%u", h->cupsHeight)); DEBUG_puts("1cupsRasterReadHeader2: Returning 1."); return (1); } /* * 'cupsRasterReadPixels()' - Read raster pixels. * * For best performance, filters should read one or more whole lines. * The "cupsBytesPerLine" value from the page header can be used to allocate * the line buffer and as the number of bytes to read. */ unsigned /* O - Number of bytes read */ cupsRasterReadPixels(cups_raster_t *r, /* I - Raster stream */ unsigned char *p, /* I - Pointer to pixel buffer */ unsigned len) /* I - Number of bytes to read */ { ssize_t bytes; /* Bytes read */ unsigned cupsBytesPerLine; /* cupsBytesPerLine value */ unsigned remaining; /* Bytes remaining */ unsigned char *ptr, /* Pointer to read buffer */ byte, /* Byte from file */ *temp; /* Pointer into buffer */ unsigned count; /* Repetition count */ DEBUG_printf(("cupsRasterReadPixels(r=%p, p=%p, len=%u)", (void *)r, (void *)p, len)); if (r == NULL || r->mode != CUPS_RASTER_READ || r->remaining == 0 || r->header.cupsBytesPerLine == 0) { DEBUG_puts("1cupsRasterReadPixels: Returning 0."); return (0); } DEBUG_printf(("1cupsRasterReadPixels: compressed=%d, remaining=%u", r->compressed, r->remaining)); if (!r->compressed) { /* * Read without compression... */ r->remaining -= len / r->header.cupsBytesPerLine; if (cups_raster_io(r, p, len) < (ssize_t)len) { DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0."); return (0); } /* * Swap bytes as needed... */ if (r->swapped && (r->header.cupsBitsPerColor == 16 || r->header.cupsBitsPerPixel == 12 || r->header.cupsBitsPerPixel == 16)) cups_swap(p, len); /* * Return... */ DEBUG_printf(("1cupsRasterReadPixels: Returning %u", len)); return (len); } /* * Read compressed data... */ remaining = len; cupsBytesPerLine = r->header.cupsBytesPerLine; while (remaining > 0 && r->remaining > 0) { if (r->count == 0) { /* * Need to read a new row... */ if (remaining == cupsBytesPerLine) ptr = p; else ptr = r->pixels; /* * Read using a modified PackBits compression... */ if (!cups_raster_read(r, &byte, 1)) { DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0."); return (0); } r->count = (unsigned)byte + 1; if (r->count > 1) ptr = r->pixels; temp = ptr; bytes = (ssize_t)cupsBytesPerLine; while (bytes > 0) { /* * Get a new repeat count... */ if (!cups_raster_read(r, &byte, 1)) { DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0."); return (0); } if (byte == 128) { /* * Clear to end of line... */ switch (r->header.cupsColorSpace) { case CUPS_CSPACE_W : case CUPS_CSPACE_RGB : case CUPS_CSPACE_SW : case CUPS_CSPACE_SRGB : case CUPS_CSPACE_RGBW : case CUPS_CSPACE_ADOBERGB : memset(temp, 0xff, (size_t)bytes); break; default : memset(temp, 0x00, (size_t)bytes); break; } temp += bytes; bytes = 0; } else if (byte & 128) { /* * Copy N literal pixels... */ count = (unsigned)(257 - byte) * r->bpp; if (count > (unsigned)bytes) count = (unsigned)bytes; if (!cups_raster_read(r, temp, count)) { DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0."); return (0); } temp += count; bytes -= (ssize_t)count; } else { /* * Repeat the next N bytes... */ count = ((unsigned)byte + 1) * r->bpp; if (count > (unsigned)bytes) count = (unsigned)bytes; if (count < r->bpp) break; bytes -= (ssize_t)count; if (!cups_raster_read(r, temp, r->bpp)) { DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0."); return (0); } temp += r->bpp; count -= r->bpp; while (count > 0) { memcpy(temp, temp - r->bpp, r->bpp); temp += r->bpp; count -= r->bpp; } } } /* * Swap bytes as needed... */ if ((r->header.cupsBitsPerColor == 16 || r->header.cupsBitsPerPixel == 12 || r->header.cupsBitsPerPixel == 16) && r->swapped) { DEBUG_puts("1cupsRasterReadPixels: Swapping bytes."); cups_swap(ptr, (size_t)cupsBytesPerLine); } /* * Update pointers... */ if (remaining >= cupsBytesPerLine) { bytes = (ssize_t)cupsBytesPerLine; r->pcurrent = r->pixels; r->count --; r->remaining --; } else { bytes = (ssize_t)remaining; r->pcurrent = r->pixels + bytes; } /* * Copy data as needed... */ if (ptr != p) memcpy(p, ptr, (size_t)bytes); } else { /* * Copy fragment from buffer... */ if ((unsigned)(bytes = (int)(r->pend - r->pcurrent)) > remaining) bytes = (ssize_t)remaining; memcpy(p, r->pcurrent, (size_t)bytes); r->pcurrent += bytes; if (r->pcurrent >= r->pend) { r->pcurrent = r->pixels; r->count --; r->remaining --; } } remaining -= (unsigned)bytes; p += bytes; } DEBUG_printf(("1cupsRasterReadPixels: Returning %u", len)); return (len); } /* * 'cupsRasterWriteHeader()' - Write a raster page header from a version 1 page * header structure. * * This function is deprecated. Use @link cupsRasterWriteHeader2@ instead. * * @deprecated@ */ unsigned /* O - 1 on success, 0 on failure */ cupsRasterWriteHeader( cups_raster_t *r, /* I - Raster stream */ cups_page_header_t *h) /* I - Raster page header */ { DEBUG_printf(("cupsRasterWriteHeader(r=%p, h=%p)", (void *)r, (void *)h)); if (r == NULL || r->mode == CUPS_RASTER_READ) { DEBUG_puts("1cupsRasterWriteHeader: Returning 0."); return (0); } DEBUG_printf(("1cupsRasterWriteHeader: cupsColorSpace=%s", cups_color_spaces[h->cupsColorSpace])); DEBUG_printf(("1cupsRasterWriteHeader: cupsBitsPerColor=%u", h->cupsBitsPerColor)); DEBUG_printf(("1cupsRasterWriteHeader: cupsBitsPerPixel=%u", h->cupsBitsPerPixel)); DEBUG_printf(("1cupsRasterWriteHeader: cupsBytesPerLine=%u", h->cupsBytesPerLine)); DEBUG_printf(("1cupsRasterWriteHeader: cupsWidth=%u", h->cupsWidth)); DEBUG_printf(("1cupsRasterWriteHeader: cupsHeight=%u", h->cupsHeight)); /* * Make a copy of the header, and compute the number of raster * lines in the page image... */ memset(&(r->header), 0, sizeof(r->header)); memcpy(&(r->header), h, sizeof(cups_page_header_t)); if (!cups_raster_update(r)) { DEBUG_puts("1cupsRasterWriteHeader: Unable to update parameters, returning 0."); return (0); } if (r->mode == CUPS_RASTER_WRITE_APPLE) { r->rowheight = h->HWResolution[0] / h->HWResolution[1]; if (h->HWResolution[0] != (r->rowheight * h->HWResolution[1])) return (0); } else r->rowheight = 1; /* * Write the raster header... */ if (r->mode == CUPS_RASTER_WRITE_PWG) { /* * PWG raster data is always network byte order with much of the page header * zeroed. */ cups_page_header2_t fh; /* File page header */ memset(&fh, 0, sizeof(fh)); strlcpy(fh.MediaClass, "PwgRaster", sizeof(fh.MediaClass)); /* PwgRaster */ strlcpy(fh.MediaColor, r->header.MediaColor, sizeof(fh.MediaColor)); strlcpy(fh.MediaType, r->header.MediaType, sizeof(fh.MediaType)); strlcpy(fh.OutputType, r->header.OutputType, sizeof(fh.OutputType)); /* PrintContentType */ fh.CutMedia = htonl(r->header.CutMedia); fh.Duplex = htonl(r->header.Duplex); fh.HWResolution[0] = htonl(r->header.HWResolution[0]); fh.HWResolution[1] = htonl(r->header.HWResolution[1]); fh.ImagingBoundingBox[0] = htonl(r->header.ImagingBoundingBox[0]); fh.ImagingBoundingBox[1] = htonl(r->header.ImagingBoundingBox[1]); fh.ImagingBoundingBox[2] = htonl(r->header.ImagingBoundingBox[2]); fh.ImagingBoundingBox[3] = htonl(r->header.ImagingBoundingBox[3]); fh.InsertSheet = htonl(r->header.InsertSheet); fh.Jog = htonl(r->header.Jog); fh.LeadingEdge = htonl(r->header.LeadingEdge); fh.ManualFeed = htonl(r->header.ManualFeed); fh.MediaPosition = htonl(r->header.MediaPosition); fh.MediaWeight = htonl(r->header.MediaWeight); fh.NumCopies = htonl(r->header.NumCopies); fh.Orientation = htonl(r->header.Orientation); fh.PageSize[0] = htonl(r->header.PageSize[0]); fh.PageSize[1] = htonl(r->header.PageSize[1]); fh.Tumble = htonl(r->header.Tumble); fh.cupsWidth = htonl(r->header.cupsWidth); fh.cupsHeight = htonl(r->header.cupsHeight); fh.cupsBitsPerColor = htonl(r->header.cupsBitsPerColor); fh.cupsBitsPerPixel = htonl(r->header.cupsBitsPerPixel); fh.cupsBytesPerLine = htonl(r->header.cupsBytesPerLine); fh.cupsColorOrder = htonl(r->header.cupsColorOrder); fh.cupsColorSpace = htonl(r->header.cupsColorSpace); fh.cupsNumColors = htonl(r->header.cupsNumColors); fh.cupsInteger[0] = htonl(r->header.cupsInteger[0]); /* TotalPageCount */ fh.cupsInteger[1] = htonl(r->header.cupsInteger[1]); /* CrossFeedTransform */ fh.cupsInteger[2] = htonl(r->header.cupsInteger[2]); /* FeedTransform */ fh.cupsInteger[3] = htonl(r->header.cupsInteger[3]); /* ImageBoxLeft */ fh.cupsInteger[4] = htonl(r->header.cupsInteger[4]); /* ImageBoxTop */ fh.cupsInteger[5] = htonl(r->header.cupsInteger[5]); /* ImageBoxRight */ fh.cupsInteger[6] = htonl(r->header.cupsInteger[6]); /* ImageBoxBottom */ fh.cupsInteger[7] = htonl(r->header.cupsInteger[7]); /* BlackPrimary */ fh.cupsInteger[8] = htonl(r->header.cupsInteger[8]); /* PrintQuality */ fh.cupsInteger[14] = htonl(r->header.cupsInteger[14]); /* VendorIdentifier */ fh.cupsInteger[15] = htonl(r->header.cupsInteger[15]); /* VendorLength */ void *dst = fh.cupsReal; /* Bypass bogus compiler warning */ void *src = r->header.cupsReal; memcpy(dst, src, sizeof(fh.cupsReal) + sizeof(fh.cupsString)); /* VendorData */ strlcpy(fh.cupsRenderingIntent, r->header.cupsRenderingIntent, sizeof(fh.cupsRenderingIntent)); strlcpy(fh.cupsPageSizeName, r->header.cupsPageSizeName, sizeof(fh.cupsPageSizeName)); return (cups_raster_io(r, (unsigned char *)&fh, sizeof(fh)) == sizeof(fh)); } else if (r->mode == CUPS_RASTER_WRITE_APPLE) { /* * Raw raster data is always network byte order with most of the page header * zeroed. */ unsigned char appleheader[32]; /* Raw page header */ if (r->apple_page_count == 0xffffffffU) { /* * Write raw page count from raster page header... */ r->apple_page_count = r->header.cupsInteger[0]; appleheader[0] = 'A'; appleheader[1] = 'S'; appleheader[2] = 'T'; appleheader[3] = 0; appleheader[4] = (unsigned char)(r->apple_page_count >> 24); appleheader[5] = (unsigned char)(r->apple_page_count >> 16); appleheader[6] = (unsigned char)(r->apple_page_count >> 8); appleheader[7] = (unsigned char)(r->apple_page_count); if (cups_raster_io(r, appleheader, 8) != 8) return (0); } memset(appleheader, 0, sizeof(appleheader)); appleheader[0] = (unsigned char)r->header.cupsBitsPerPixel; appleheader[1] = r->header.cupsColorSpace == CUPS_CSPACE_SRGB ? 1 : r->header.cupsColorSpace == CUPS_CSPACE_RGBW ? 2 : r->header.cupsColorSpace == CUPS_CSPACE_ADOBERGB ? 3 : r->header.cupsColorSpace == CUPS_CSPACE_W ? 4 : r->header.cupsColorSpace == CUPS_CSPACE_RGB ? 5 : r->header.cupsColorSpace == CUPS_CSPACE_CMYK ? 6 : 0; appleheader[12] = (unsigned char)(r->header.cupsWidth >> 24); appleheader[13] = (unsigned char)(r->header.cupsWidth >> 16); appleheader[14] = (unsigned char)(r->header.cupsWidth >> 8); appleheader[15] = (unsigned char)(r->header.cupsWidth); appleheader[16] = (unsigned char)(r->header.cupsHeight >> 24); appleheader[17] = (unsigned char)(r->header.cupsHeight >> 16); appleheader[18] = (unsigned char)(r->header.cupsHeight >> 8); appleheader[19] = (unsigned char)(r->header.cupsHeight); appleheader[20] = (unsigned char)(r->header.HWResolution[0] >> 24); appleheader[21] = (unsigned char)(r->header.HWResolution[0] >> 16); appleheader[22] = (unsigned char)(r->header.HWResolution[0] >> 8); appleheader[23] = (unsigned char)(r->header.HWResolution[0]); return (cups_raster_io(r, appleheader, sizeof(appleheader)) == sizeof(appleheader)); } else return (cups_raster_io(r, (unsigned char *)&(r->header), sizeof(r->header)) == sizeof(r->header)); } /* * 'cupsRasterWriteHeader2()' - Write a raster page header from a version 2 * page header structure. * * The page header can be initialized using @link cupsRasterInitPWGHeader@. * * @since CUPS 1.2/macOS 10.5@ */ unsigned /* O - 1 on success, 0 on failure */ cupsRasterWriteHeader2( cups_raster_t *r, /* I - Raster stream */ cups_page_header2_t *h) /* I - Raster page header */ { DEBUG_printf(("cupsRasterWriteHeader(r=%p, h=%p)", (void *)r, (void *)h)); if (r == NULL || r->mode == CUPS_RASTER_READ) { DEBUG_puts("1cupsRasterWriteHeader2: Returning 0."); return (0); } DEBUG_printf(("1cupsRasterWriteHeader2: cupsColorSpace=%s", cups_color_spaces[h->cupsColorSpace])); DEBUG_printf(("1cupsRasterWriteHeader2: cupsBitsPerColor=%u", h->cupsBitsPerColor)); DEBUG_printf(("1cupsRasterWriteHeader2: cupsBitsPerPixel=%u", h->cupsBitsPerPixel)); DEBUG_printf(("1cupsRasterWriteHeader2: cupsBytesPerLine=%u", h->cupsBytesPerLine)); DEBUG_printf(("1cupsRasterWriteHeader2: cupsWidth=%u", h->cupsWidth)); DEBUG_printf(("1cupsRasterWriteHeader2: cupsHeight=%u", h->cupsHeight)); /* * Make a copy of the header, and compute the number of raster * lines in the page image... */ memcpy(&(r->header), h, sizeof(cups_page_header2_t)); if (!cups_raster_update(r)) { DEBUG_puts("1cupsRasterWriteHeader: Unable to update parameters, returning 0."); return (0); } if (r->mode == CUPS_RASTER_WRITE_APPLE) { r->rowheight = h->HWResolution[0] / h->HWResolution[1]; if (h->HWResolution[0] != (r->rowheight * h->HWResolution[1])) return (0); } else r->rowheight = 1; /* * Write the raster header... */ if (r->mode == CUPS_RASTER_WRITE_PWG) { /* * PWG raster data is always network byte order with most of the page header * zeroed. */ cups_page_header2_t fh; /* File page header */ memset(&fh, 0, sizeof(fh)); strlcpy(fh.MediaClass, "PwgRaster", sizeof(fh.MediaClass)); strlcpy(fh.MediaColor, r->header.MediaColor, sizeof(fh.MediaColor)); strlcpy(fh.MediaType, r->header.MediaType, sizeof(fh.MediaType)); strlcpy(fh.OutputType, r->header.OutputType, sizeof(fh.OutputType)); strlcpy(fh.cupsRenderingIntent, r->header.cupsRenderingIntent, sizeof(fh.cupsRenderingIntent)); strlcpy(fh.cupsPageSizeName, r->header.cupsPageSizeName, sizeof(fh.cupsPageSizeName)); fh.CutMedia = htonl(r->header.CutMedia); fh.Duplex = htonl(r->header.Duplex); fh.HWResolution[0] = htonl(r->header.HWResolution[0]); fh.HWResolution[1] = htonl(r->header.HWResolution[1]); fh.ImagingBoundingBox[0] = htonl(r->header.ImagingBoundingBox[0]); fh.ImagingBoundingBox[1] = htonl(r->header.ImagingBoundingBox[1]); fh.ImagingBoundingBox[2] = htonl(r->header.ImagingBoundingBox[2]); fh.ImagingBoundingBox[3] = htonl(r->header.ImagingBoundingBox[3]); fh.InsertSheet = htonl(r->header.InsertSheet); fh.Jog = htonl(r->header.Jog); fh.LeadingEdge = htonl(r->header.LeadingEdge); fh.ManualFeed = htonl(r->header.ManualFeed); fh.MediaPosition = htonl(r->header.MediaPosition); fh.MediaWeight = htonl(r->header.MediaWeight); fh.NumCopies = htonl(r->header.NumCopies); fh.Orientation = htonl(r->header.Orientation); fh.PageSize[0] = htonl(r->header.PageSize[0]); fh.PageSize[1] = htonl(r->header.PageSize[1]); fh.Tumble = htonl(r->header.Tumble); fh.cupsWidth = htonl(r->header.cupsWidth); fh.cupsHeight = htonl(r->header.cupsHeight); fh.cupsBitsPerColor = htonl(r->header.cupsBitsPerColor); fh.cupsBitsPerPixel = htonl(r->header.cupsBitsPerPixel); fh.cupsBytesPerLine = htonl(r->header.cupsBytesPerLine); fh.cupsColorOrder = htonl(r->header.cupsColorOrder); fh.cupsColorSpace = htonl(r->header.cupsColorSpace); fh.cupsNumColors = htonl(r->header.cupsNumColors); fh.cupsInteger[0] = htonl(r->header.cupsInteger[0]); fh.cupsInteger[1] = htonl(r->header.cupsInteger[1]); fh.cupsInteger[2] = htonl(r->header.cupsInteger[2]); fh.cupsInteger[3] = htonl((unsigned)(r->header.cupsImagingBBox[0] * r->header.HWResolution[0] / 72.0)); fh.cupsInteger[4] = htonl((unsigned)(r->header.cupsImagingBBox[1] * r->header.HWResolution[1] / 72.0)); fh.cupsInteger[5] = htonl((unsigned)(r->header.cupsImagingBBox[2] * r->header.HWResolution[0] / 72.0)); fh.cupsInteger[6] = htonl((unsigned)(r->header.cupsImagingBBox[3] * r->header.HWResolution[1] / 72.0)); fh.cupsInteger[7] = htonl(0xffffff); return (cups_raster_io(r, (unsigned char *)&fh, sizeof(fh)) == sizeof(fh)); } else if (r->mode == CUPS_RASTER_WRITE_APPLE) { /* * Raw raster data is always network byte order with most of the page header * zeroed. */ unsigned char appleheader[32]; /* Raw page header */ unsigned height = r->header.cupsHeight * r->rowheight; /* Computed page height */ if (r->apple_page_count == 0xffffffffU) { /* * Write raw page count from raster page header... */ r->apple_page_count = r->header.cupsInteger[0]; appleheader[0] = 'A'; appleheader[1] = 'S'; appleheader[2] = 'T'; appleheader[3] = 0; appleheader[4] = (unsigned char)(r->apple_page_count >> 24); appleheader[5] = (unsigned char)(r->apple_page_count >> 16); appleheader[6] = (unsigned char)(r->apple_page_count >> 8); appleheader[7] = (unsigned char)(r->apple_page_count); if (cups_raster_io(r, appleheader, 8) != 8) return (0); } memset(appleheader, 0, sizeof(appleheader)); appleheader[0] = (unsigned char)r->header.cupsBitsPerPixel; appleheader[1] = r->header.cupsColorSpace == CUPS_CSPACE_SRGB ? 1 : r->header.cupsColorSpace == CUPS_CSPACE_RGBW ? 2 : r->header.cupsColorSpace == CUPS_CSPACE_ADOBERGB ? 3 : r->header.cupsColorSpace == CUPS_CSPACE_W ? 4 : r->header.cupsColorSpace == CUPS_CSPACE_RGB ? 5 : r->header.cupsColorSpace == CUPS_CSPACE_CMYK ? 6 : 0; appleheader[12] = (unsigned char)(r->header.cupsWidth >> 24); appleheader[13] = (unsigned char)(r->header.cupsWidth >> 16); appleheader[14] = (unsigned char)(r->header.cupsWidth >> 8); appleheader[15] = (unsigned char)(r->header.cupsWidth); appleheader[16] = (unsigned char)(height >> 24); appleheader[17] = (unsigned char)(height >> 16); appleheader[18] = (unsigned char)(height >> 8); appleheader[19] = (unsigned char)(height); appleheader[20] = (unsigned char)(r->header.HWResolution[0] >> 24); appleheader[21] = (unsigned char)(r->header.HWResolution[0] >> 16); appleheader[22] = (unsigned char)(r->header.HWResolution[0] >> 8); appleheader[23] = (unsigned char)(r->header.HWResolution[0]); return (cups_raster_io(r, appleheader, sizeof(appleheader)) == sizeof(appleheader)); } else return (cups_raster_io(r, (unsigned char *)&(r->header), sizeof(r->header)) == sizeof(r->header)); } /* * 'cupsRasterWritePixels()' - Write raster pixels. * * For best performance, filters should write one or more whole lines. * The "cupsBytesPerLine" value from the page header can be used to allocate * the line buffer and as the number of bytes to write. */ unsigned /* O - Number of bytes written */ cupsRasterWritePixels(cups_raster_t *r, /* I - Raster stream */ unsigned char *p, /* I - Bytes to write */ unsigned len)/* I - Number of bytes to write */ { ssize_t bytes; /* Bytes read */ unsigned remaining; /* Bytes remaining */ DEBUG_printf(("cupsRasterWritePixels(r=%p, p=%p, len=%u), remaining=%u", (void *)r, (void *)p, len, r->remaining)); if (r == NULL || r->mode == CUPS_RASTER_READ || r->remaining == 0) return (0); if (!r->compressed) { /* * Without compression, just write the raster data raw unless the data needs * to be swapped... */ r->remaining -= len / r->header.cupsBytesPerLine; if (r->swapped && (r->header.cupsBitsPerColor == 16 || r->header.cupsBitsPerPixel == 12 || r->header.cupsBitsPerPixel == 16)) { unsigned char *bufptr; /* Pointer into write buffer */ /* * Allocate a write buffer as needed... */ if ((size_t)len > r->bufsize) { if (r->buffer) bufptr = realloc(r->buffer, len); else bufptr = malloc(len); if (!bufptr) return (0); r->buffer = bufptr; r->bufsize = len; } /* * Byte swap the pixels and write them... */ cups_swap_copy(r->buffer, p, len); bytes = cups_raster_io(r, r->buffer, len); } else bytes = cups_raster_io(r, p, len); if (bytes < len) return (0); else return (len); } /* * Otherwise, compress each line... */ for (remaining = len; remaining > 0; remaining -= (unsigned)bytes, p += bytes) { /* * Figure out the number of remaining bytes on the current line... */ if ((bytes = (ssize_t)remaining) > (ssize_t)(r->pend - r->pcurrent)) bytes = (ssize_t)(r->pend - r->pcurrent); if (r->count > 0) { /* * Check to see if this line is the same as the previous line... */ if (memcmp(p, r->pcurrent, (size_t)bytes)) { if (cups_raster_write(r, r->pixels) <= 0) return (0); r->count = 0; } else { /* * Mark more bytes as the same... */ r->pcurrent += bytes; if (r->pcurrent >= r->pend) { /* * Increase the repeat count... */ r->count += r->rowheight; r->pcurrent = r->pixels; /* * Flush out this line if it is the last one... */ r->remaining --; if (r->remaining == 0) { if (cups_raster_write(r, r->pixels) <= 0) return (0); else return (len); } else if (r->count > (256 - r->rowheight)) { if (cups_raster_write(r, r->pixels) <= 0) return (0); r->count = 0; } } continue; } } if (r->count == 0) { /* * Copy the raster data to the buffer... */ memcpy(r->pcurrent, p, (size_t)bytes); r->pcurrent += bytes; if (r->pcurrent >= r->pend) { /* * Increase the repeat count... */ r->count += r->rowheight; r->pcurrent = r->pixels; /* * Flush out this line if it is the last one... */ r->remaining --; if (r->remaining == 0) { if (cups_raster_write(r, r->pixels) <= 0) return (0); } } } } return (len); } /* * 'cups_raster_read_header()' - Read a raster page header. */ static unsigned /* O - 1 on success, 0 on fail */ cups_raster_read_header( cups_raster_t *r) /* I - Raster stream */ { size_t len; /* Length for read/swap */ DEBUG_printf(("3cups_raster_read_header(r=%p), r->mode=%s", (void *)r, r ? cups_modes[r->mode] : "")); if (r == NULL || r->mode != CUPS_RASTER_READ) return (0); DEBUG_printf(("4cups_raster_read_header: r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount)); memset(&(r->header), 0, sizeof(r->header)); /* * Read the header... */ switch (r->sync) { default : /* * Get the length of the raster header... */ if (r->sync == CUPS_RASTER_SYNCv1 || r->sync == CUPS_RASTER_REVSYNCv1) len = sizeof(cups_page_header_t); else len = sizeof(cups_page_header2_t); DEBUG_printf(("4cups_raster_read_header: len=%d", (int)len)); /* * Read it... */ if (cups_raster_read(r, (unsigned char *)&(r->header), len) < (ssize_t)len) { DEBUG_printf(("4cups_raster_read_header: EOF, r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount)); return (0); } /* * Swap bytes as needed... */ if (r->swapped) { unsigned *s, /* Current word */ temp; /* Temporary copy */ DEBUG_puts("4cups_raster_read_header: Swapping header bytes."); for (len = 81, s = &(r->header.AdvanceDistance); len > 0; len --, s ++) { temp = *s; *s = ((temp & 0xff) << 24) | ((temp & 0xff00) << 8) | ((temp & 0xff0000) >> 8) | ((temp & 0xff000000) >> 24); DEBUG_printf(("4cups_raster_read_header: %08x => %08x", temp, *s)); } } break; case CUPS_RASTER_SYNCapple : case CUPS_RASTER_REVSYNCapple : { unsigned char appleheader[32]; /* Raw header */ static const unsigned rawcspace[] = { CUPS_CSPACE_SW, CUPS_CSPACE_SRGB, CUPS_CSPACE_RGBW, CUPS_CSPACE_ADOBERGB, CUPS_CSPACE_W, CUPS_CSPACE_RGB, CUPS_CSPACE_CMYK }; static const unsigned rawnumcolors[] = { 1, 3, 4, 3, 1, 3, 4 }; if (cups_raster_read(r, appleheader, sizeof(appleheader)) < (ssize_t)sizeof(appleheader)) { DEBUG_printf(("4cups_raster_read_header: EOF, r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount)); return (0); } strlcpy(r->header.MediaClass, "PwgRaster", sizeof(r->header.MediaClass)); /* PwgRaster */ r->header.cupsBitsPerPixel = appleheader[0]; r->header.cupsColorSpace = appleheader[1] >= (sizeof(rawcspace) / sizeof(rawcspace[0])) ? CUPS_CSPACE_DEVICE1 : rawcspace[appleheader[1]]; r->header.cupsNumColors = appleheader[1] >= (sizeof(rawnumcolors) / sizeof(rawnumcolors[0])) ? 1 : rawnumcolors[appleheader[1]]; r->header.cupsBitsPerColor = r->header.cupsBitsPerPixel / r->header.cupsNumColors; r->header.cupsWidth = ((((((unsigned)appleheader[12] << 8) | (unsigned)appleheader[13]) << 8) | (unsigned)appleheader[14]) << 8) | (unsigned)appleheader[15]; r->header.cupsHeight = ((((((unsigned)appleheader[16] << 8) | (unsigned)appleheader[17]) << 8) | (unsigned)appleheader[18]) << 8) | (unsigned)appleheader[19]; r->header.cupsBytesPerLine = r->header.cupsWidth * r->header.cupsBitsPerPixel / 8; r->header.cupsColorOrder = CUPS_ORDER_CHUNKED; r->header.HWResolution[0] = r->header.HWResolution[1] = ((((((unsigned)appleheader[20] << 8) | (unsigned)appleheader[21]) << 8) | (unsigned)appleheader[22]) << 8) | (unsigned)appleheader[23]; if (r->header.HWResolution[0] > 0) { r->header.PageSize[0] = (unsigned)(r->header.cupsWidth * 72 / r->header.HWResolution[0]); r->header.PageSize[1] = (unsigned)(r->header.cupsHeight * 72 / r->header.HWResolution[1]); r->header.cupsPageSize[0] = (float)(r->header.cupsWidth * 72.0 / r->header.HWResolution[0]); r->header.cupsPageSize[1] = (float)(r->header.cupsHeight * 72.0 / r->header.HWResolution[1]); } r->header.cupsInteger[0] = r->apple_page_count; r->header.cupsInteger[7] = 0xffffff; } break; } /* * Update the header and row count... */ if (!cups_raster_update(r)) return (0); DEBUG_printf(("4cups_raster_read_header: cupsBitsPerPixel=%u, cupsBitsPerColor=%u, cupsBytesPerLine=%u, cupsWidth=%u, cupsHeight=%u, r->bpp=%d", r->header.cupsBitsPerPixel, r->header.cupsBitsPerColor, r->header.cupsBytesPerLine, r->header.cupsWidth, r->header.cupsHeight, r->bpp)); return (r->header.cupsBitsPerPixel > 0 && r->header.cupsBitsPerPixel <= 240 && r->header.cupsBitsPerColor > 0 && r->header.cupsBitsPerColor <= 16 && r->header.cupsBytesPerLine > 0 && r->header.cupsBytesPerLine <= 0x7fffffff && r->header.cupsHeight != 0 && (r->header.cupsBytesPerLine % r->bpp) == 0); } /* * 'cups_raster_io()' - Read/write bytes from a context, handling interruptions. */ static ssize_t /* O - Bytes read/write or -1 */ cups_raster_io(cups_raster_t *r, /* I - Raster stream */ unsigned char *buf, /* I - Buffer for read/write */ size_t bytes) /* I - Number of bytes to read/write */ { ssize_t count, /* Number of bytes read/written */ total; /* Total bytes read/written */ DEBUG_printf(("5cups_raster_io(r=%p, buf=%p, bytes=" CUPS_LLFMT ")", (void *)r, (void *)buf, CUPS_LLCAST bytes)); for (total = 0; total < (ssize_t)bytes; total += count, buf += count) { count = (*r->iocb)(r->ctx, buf, bytes - (size_t)total); DEBUG_printf(("6cups_raster_io: count=%d, total=%d", (int)count, (int)total)); if (count == 0) break; else if (count < 0) { DEBUG_puts("6cups_raster_io: Returning -1 on error."); return (-1); } #ifdef DEBUG r->iocount += (size_t)count; #endif /* DEBUG */ } DEBUG_printf(("6cups_raster_io: iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount)); DEBUG_printf(("6cups_raster_io: Returning " CUPS_LLFMT ".", CUPS_LLCAST total)); return (total); } /* * 'cups_raster_read()' - Read through the raster buffer. */ static ssize_t /* O - Number of bytes read */ cups_raster_read(cups_raster_t *r, /* I - Raster stream */ unsigned char *buf, /* I - Buffer */ size_t bytes) /* I - Number of bytes to read */ { ssize_t count, /* Number of bytes read */ remaining, /* Remaining bytes in buffer */ total; /* Total bytes read */ DEBUG_printf(("4cups_raster_read(r=%p, buf=%p, bytes=" CUPS_LLFMT "), offset=" CUPS_LLFMT, (void *)r, (void *)buf, CUPS_LLCAST bytes, CUPS_LLCAST (r->iostart + r->bufptr - r->buffer))); if (!r->compressed) return (cups_raster_io(r, buf, bytes)); /* * Allocate a read buffer as needed... */ count = (ssize_t)(2 * r->header.cupsBytesPerLine); if (count < 65536) count = 65536; if ((size_t)count > r->bufsize) { ssize_t offset = r->bufptr - r->buffer; /* Offset to current start of buffer */ ssize_t end = r->bufend - r->buffer;/* Offset to current end of buffer */ unsigned char *rptr; /* Pointer in read buffer */ if (r->buffer) rptr = realloc(r->buffer, (size_t)count); else rptr = malloc((size_t)count); if (!rptr) return (0); r->buffer = rptr; r->bufptr = rptr + offset; r->bufend = rptr + end; r->bufsize = (size_t)count; } /* * Loop until we have read everything... */ for (total = 0, remaining = (int)(r->bufend - r->bufptr); total < (ssize_t)bytes; total += count, buf += count) { count = (ssize_t)bytes - total; DEBUG_printf(("5cups_raster_read: count=" CUPS_LLFMT ", remaining=" CUPS_LLFMT ", buf=%p, bufptr=%p, bufend=%p", CUPS_LLCAST count, CUPS_LLCAST remaining, (void *)buf, (void *)r->bufptr, (void *)r->bufend)); if (remaining == 0) { if (count < 16) { /* * Read into the raster buffer and then copy... */ #ifdef DEBUG r->iostart += (size_t)(r->bufend - r->buffer); #endif /* DEBUG */ remaining = (*r->iocb)(r->ctx, r->buffer, r->bufsize); if (remaining <= 0) return (0); r->bufptr = r->buffer; r->bufend = r->buffer + remaining; #ifdef DEBUG r->iocount += (size_t)remaining; #endif /* DEBUG */ } else { /* * Read directly into "buf"... */ count = (*r->iocb)(r->ctx, buf, (size_t)count); if (count <= 0) return (0); #ifdef DEBUG r->iostart += (size_t)count; r->iocount += (size_t)count; #endif /* DEBUG */ continue; } } /* * Copy bytes from raster buffer to "buf"... */ if (count > remaining) count = remaining; if (count == 1) { /* * Copy 1 byte... */ *buf = *(r->bufptr)++; remaining --; } else if (count < 128) { /* * Copy up to 127 bytes without using memcpy(); this is * faster because it avoids an extra function call and is * often further optimized by the compiler... */ unsigned char *bufptr; /* Temporary buffer pointer */ remaining -= count; for (bufptr = r->bufptr; count > 0; count --, total ++) *buf++ = *bufptr++; r->bufptr = bufptr; } else { /* * Use memcpy() for a large read... */ memcpy(buf, r->bufptr, (size_t)count); r->bufptr += count; remaining -= count; } } DEBUG_printf(("5cups_raster_read: Returning %ld", (long)total)); return (total); } /* * 'cups_raster_update()' - Update the raster header and row count for the * current page. */ static int /* O - 1 on success, 0 on failure */ cups_raster_update(cups_raster_t *r) /* I - Raster stream */ { if (r->sync == CUPS_RASTER_SYNCv1 || r->sync == CUPS_RASTER_REVSYNCv1 || r->header.cupsNumColors == 0) { /* * Set the "cupsNumColors" field according to the colorspace... */ switch (r->header.cupsColorSpace) { case CUPS_CSPACE_W : case CUPS_CSPACE_K : case CUPS_CSPACE_WHITE : case CUPS_CSPACE_GOLD : case CUPS_CSPACE_SILVER : case CUPS_CSPACE_SW : r->header.cupsNumColors = 1; break; case CUPS_CSPACE_RGB : case CUPS_CSPACE_CMY : case CUPS_CSPACE_YMC : case CUPS_CSPACE_CIEXYZ : case CUPS_CSPACE_CIELab : case CUPS_CSPACE_SRGB : case CUPS_CSPACE_ADOBERGB : case CUPS_CSPACE_ICC1 : case CUPS_CSPACE_ICC2 : case CUPS_CSPACE_ICC3 : case CUPS_CSPACE_ICC4 : case CUPS_CSPACE_ICC5 : case CUPS_CSPACE_ICC6 : case CUPS_CSPACE_ICC7 : case CUPS_CSPACE_ICC8 : case CUPS_CSPACE_ICC9 : case CUPS_CSPACE_ICCA : case CUPS_CSPACE_ICCB : case CUPS_CSPACE_ICCC : case CUPS_CSPACE_ICCD : case CUPS_CSPACE_ICCE : case CUPS_CSPACE_ICCF : r->header.cupsNumColors = 3; break; case CUPS_CSPACE_RGBA : case CUPS_CSPACE_RGBW : case CUPS_CSPACE_CMYK : case CUPS_CSPACE_YMCK : case CUPS_CSPACE_KCMY : case CUPS_CSPACE_GMCK : case CUPS_CSPACE_GMCS : r->header.cupsNumColors = 4; break; case CUPS_CSPACE_KCMYcm : if (r->header.cupsBitsPerPixel < 8) r->header.cupsNumColors = 6; else r->header.cupsNumColors = 4; break; case CUPS_CSPACE_DEVICE1 : case CUPS_CSPACE_DEVICE2 : case CUPS_CSPACE_DEVICE3 : case CUPS_CSPACE_DEVICE4 : case CUPS_CSPACE_DEVICE5 : case CUPS_CSPACE_DEVICE6 : case CUPS_CSPACE_DEVICE7 : case CUPS_CSPACE_DEVICE8 : case CUPS_CSPACE_DEVICE9 : case CUPS_CSPACE_DEVICEA : case CUPS_CSPACE_DEVICEB : case CUPS_CSPACE_DEVICEC : case CUPS_CSPACE_DEVICED : case CUPS_CSPACE_DEVICEE : case CUPS_CSPACE_DEVICEF : r->header.cupsNumColors = r->header.cupsColorSpace - CUPS_CSPACE_DEVICE1 + 1; break; default : /* Unknown color space */ return (0); } } /* * Set the number of bytes per pixel/color... */ if (r->header.cupsColorOrder == CUPS_ORDER_CHUNKED) r->bpp = (r->header.cupsBitsPerPixel + 7) / 8; else r->bpp = (r->header.cupsBitsPerColor + 7) / 8; if (r->bpp == 0) r->bpp = 1; /* * Set the number of remaining rows... */ if (r->header.cupsColorOrder == CUPS_ORDER_PLANAR) r->remaining = r->header.cupsHeight * r->header.cupsNumColors; else r->remaining = r->header.cupsHeight; /* * Allocate the compression buffer... */ if (r->compressed) { if (r->pixels != NULL) free(r->pixels); if ((r->pixels = calloc(r->header.cupsBytesPerLine, 1)) == NULL) { r->pcurrent = NULL; r->pend = NULL; r->count = 0; return (0); } r->pcurrent = r->pixels; r->pend = r->pixels + r->header.cupsBytesPerLine; r->count = 0; } return (1); } /* * 'cups_raster_write()' - Write a row of compressed raster data... */ static ssize_t /* O - Number of bytes written */ cups_raster_write( cups_raster_t *r, /* I - Raster stream */ const unsigned char *pixels) /* I - Pixel data to write */ { const unsigned char *start, /* Start of sequence */ *ptr, /* Current pointer in sequence */ *pend, /* End of raster buffer */ *plast; /* Pointer to last pixel */ unsigned char *wptr; /* Pointer into write buffer */ unsigned bpp, /* Bytes per pixel */ count; /* Count */ _cups_copyfunc_t cf; /* Copy function */ DEBUG_printf(("3cups_raster_write(r=%p, pixels=%p)", (void *)r, (void *)pixels)); /* * Determine whether we need to swap bytes... */ if (r->swapped && (r->header.cupsBitsPerColor == 16 || r->header.cupsBitsPerPixel == 12 || r->header.cupsBitsPerPixel == 16)) { DEBUG_puts("4cups_raster_write: Swapping bytes when writing."); cf = (_cups_copyfunc_t)cups_swap_copy; } else cf = (_cups_copyfunc_t)memcpy; /* * Allocate a write buffer as needed... */ count = r->header.cupsBytesPerLine * 2; if (count < 65536) count = 65536; if ((size_t)count > r->bufsize) { if (r->buffer) wptr = realloc(r->buffer, count); else wptr = malloc(count); if (!wptr) { DEBUG_printf(("4cups_raster_write: Unable to allocate " CUPS_LLFMT " bytes for raster buffer: %s", CUPS_LLCAST count, strerror(errno))); return (-1); } r->buffer = wptr; r->bufsize = count; } /* * Write the row repeat count... */ bpp = r->bpp; pend = pixels + r->header.cupsBytesPerLine; plast = pend - bpp; wptr = r->buffer; *wptr++ = (unsigned char)(r->count - 1); /* * Write using a modified PackBits compression... */ for (ptr = pixels; ptr < pend;) { start = ptr; ptr += bpp; if (ptr == pend) { /* * Encode a single pixel at the end... */ *wptr++ = 0; (*cf)(wptr, start, bpp); wptr += bpp; } else if (!memcmp(start, ptr, bpp)) { /* * Encode a sequence of repeating pixels... */ for (count = 2; count < 128 && ptr < plast; count ++, ptr += bpp) if (memcmp(ptr, ptr + bpp, bpp)) break; *wptr++ = (unsigned char)(count - 1); (*cf)(wptr, ptr, bpp); wptr += bpp; ptr += bpp; } else { /* * Encode a sequence of non-repeating pixels... */ for (count = 1; count < 128 && ptr < plast; count ++, ptr += bpp) if (!memcmp(ptr, ptr + bpp, bpp)) break; if (ptr >= plast && count < 128) { count ++; ptr += bpp; } *wptr++ = (unsigned char)(257 - count); count *= bpp; (*cf)(wptr, start, count); wptr += count; } } DEBUG_printf(("4cups_raster_write: Writing " CUPS_LLFMT " bytes.", CUPS_LLCAST (wptr - r->buffer))); return (cups_raster_io(r, r->buffer, (size_t)(wptr - r->buffer))); } /* * 'cups_read_fd()' - Read bytes from a file. */ static ssize_t /* O - Bytes read or -1 */ cups_read_fd(void *ctx, /* I - File descriptor as pointer */ unsigned char *buf, /* I - Buffer for read */ size_t bytes) /* I - Maximum number of bytes to read */ { int fd = (int)((intptr_t)ctx); /* File descriptor */ ssize_t count; /* Number of bytes read */ #ifdef WIN32 /* Sigh */ while ((count = read(fd, buf, (unsigned)bytes)) < 0) #else while ((count = read(fd, buf, bytes)) < 0) #endif /* WIN32 */ if (errno != EINTR && errno != EAGAIN) { DEBUG_printf(("8cups_read_fd: %s", strerror(errno))); return (-1); } DEBUG_printf(("8cups_read_fd: Returning %d bytes.", (int)count)); return (count); } /* * 'cups_swap()' - Swap bytes in raster data... */ static void cups_swap(unsigned char *buf, /* I - Buffer to swap */ size_t bytes) /* I - Number of bytes to swap */ { unsigned char even, odd; /* Temporary variables */ bytes /= 2; while (bytes > 0) { even = buf[0]; odd = buf[1]; buf[0] = odd; buf[1] = even; buf += 2; bytes --; } } /* * 'cups_swap_copy()' - Copy and swap bytes in raster data... */ static void cups_swap_copy( unsigned char *dst, /* I - Destination */ const unsigned char *src, /* I - Source */ size_t bytes) /* I - Number of bytes to swap */ { bytes /= 2; while (bytes > 0) { dst[0] = src[1]; dst[1] = src[0]; dst += 2; src += 2; bytes --; } } /* * 'cups_write_fd()' - Write bytes to a file. */ static ssize_t /* O - Bytes written or -1 */ cups_write_fd(void *ctx, /* I - File descriptor pointer */ unsigned char *buf, /* I - Bytes to write */ size_t bytes) /* I - Number of bytes to write */ { int fd = (int)((intptr_t)ctx); /* File descriptor */ ssize_t count; /* Number of bytes written */ #ifdef WIN32 /* Sigh */ while ((count = write(fd, buf, (unsigned)bytes)) < 0) #else while ((count = write(fd, buf, bytes)) < 0) #endif /* WIN32 */ if (errno != EINTR && errno != EAGAIN) { DEBUG_printf(("8cups_write_fd: %s", strerror(errno))); return (-1); } return (count); } cups-2.2.7/filter/rasterbench.c000664 000765 000024 00000016002 13255074424 017103 0ustar00msweetstaff000000 000000 /* * Raster benchmark program for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include #include #include #include #include #include #include /* * Constants... */ #define TEST_WIDTH 1024 #define TEST_HEIGHT 1024 #define TEST_PAGES 16 #define TEST_PASSES 20 /* * Local functions... */ static double compute_median(double *secs); static double get_time(void); static void read_test(int fd); static int run_read_test(void); static void write_test(int fd, cups_mode_t mode); /* * 'main()' - Benchmark the raster read/write functions. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ int ras_fd, /* File descriptor for read process */ status; /* Exit status of read process */ double start_secs, /* Start time */ write_secs, /* Write time */ read_secs, /* Read time */ pass_secs[TEST_PASSES]; /* Total test times */ cups_mode_t mode; /* Write mode */ /* * See if we have anything on the command-line... */ if (argc > 2 || (argc == 2 && strcmp(argv[1], "-z"))) { puts("Usage: rasterbench [-z]"); return (1); } mode = argc > 1 ? CUPS_RASTER_WRITE_COMPRESSED : CUPS_RASTER_WRITE; /* * Ignore SIGPIPE... */ signal(SIGPIPE, SIG_IGN); /* * Run the tests several times to get a good average... */ printf("Test read/write speed of %d pages, %dx%d pixels...\n\n", TEST_PAGES, TEST_WIDTH, TEST_HEIGHT); for (i = 0; i < TEST_PASSES; i ++) { printf("PASS %2d: ", i + 1); fflush(stdout); ras_fd = run_read_test(); start_secs = get_time(); write_test(ras_fd, mode); write_secs = get_time(); printf(" %.3f write,", write_secs - start_secs); fflush(stdout); close(ras_fd); wait(&status); read_secs = get_time(); pass_secs[i] = read_secs - start_secs; printf(" %.3f read, %.3f total\n", read_secs - write_secs, pass_secs[i]); } printf("\nMedian Total Time: %.3f seconds per document\n", compute_median(pass_secs)); return (0); } /* * 'compute_median()' - Compute the median time for a test. */ static double /* O - Median time in seconds */ compute_median(double *secs) /* I - Array of time samples */ { int i, j; /* Looping vars */ double temp; /* Swap variable */ /* * Sort the array into ascending order using a quicky bubble sort... */ for (i = 0; i < (TEST_PASSES - 1); i ++) for (j = i + 1; j < TEST_PASSES; j ++) if (secs[i] > secs[j]) { temp = secs[i]; secs[i] = secs[j]; secs[j] = temp; } /* * Return the average of the middle two samples... */ return (0.5 * (secs[TEST_PASSES / 2 - 1] + secs[TEST_PASSES / 2])); } /* * 'get_time()' - Get the current time in seconds. */ static double /* O - Time in seconds */ get_time(void) { struct timeval curtime; /* Current time */ gettimeofday(&curtime, NULL); return (curtime.tv_sec + 0.000001 * curtime.tv_usec); } /* * 'read_test()' - Benchmark the raster read functions. */ static void read_test(int fd) /* I - File descriptor to read from */ { unsigned y; /* Looping var */ cups_raster_t *r; /* Raster stream */ cups_page_header2_t header; /* Page header */ unsigned char buffer[8 * TEST_WIDTH]; /* Read buffer */ /* * Test read speed... */ if ((r = cupsRasterOpen(fd, CUPS_RASTER_READ)) == NULL) { perror("Unable to create raster input stream"); return; } while (cupsRasterReadHeader2(r, &header)) { for (y = 0; y < header.cupsHeight; y ++) cupsRasterReadPixels(r, buffer, header.cupsBytesPerLine); } cupsRasterClose(r); } /* * 'run_read_test()' - Run the read test as a child process via pipes. */ static int /* O - Standard input of child */ run_read_test(void) { int ras_pipes[2]; /* Raster data pipes */ int pid; /* Child process ID */ if (pipe(ras_pipes)) return (-1); if ((pid = fork()) < 0) { /* * Fork error - return -1 on error... */ close(ras_pipes[0]); close(ras_pipes[1]); return (-1); } else if (pid == 0) { /* * Child comes here - read data from the input pipe... */ close(ras_pipes[1]); read_test(ras_pipes[0]); exit(0); } else { /* * Parent comes here - return the output pipe... */ close(ras_pipes[0]); return (ras_pipes[1]); } } /* * 'write_test()' - Benchmark the raster write functions. */ static void write_test(int fd, /* I - File descriptor to write to */ cups_mode_t mode) /* I - Write mode */ { unsigned page, x, y; /* Looping vars */ unsigned count; /* Number of bytes to set */ cups_raster_t *r; /* Raster stream */ cups_page_header2_t header; /* Page header */ unsigned char data[32][8 * TEST_WIDTH]; /* Raster data to write */ /* * Create a combination of random data and repeated data to simulate * text with some whitespace. */ CUPS_SRAND(time(NULL)); memset(data, 0, sizeof(data)); for (y = 0; y < 28; y ++) { for (x = CUPS_RAND() & 127, count = (CUPS_RAND() & 15) + 1; x < sizeof(data[0]); x ++, count --) { if (count <= 0) { x += (CUPS_RAND() & 15) + 1; count = (CUPS_RAND() & 15) + 1; if (x >= sizeof(data[0])) break; } data[y][x] = (unsigned char)CUPS_RAND(); } } /* * Test write speed... */ if ((r = cupsRasterOpen(fd, mode)) == NULL) { perror("Unable to create raster output stream"); return; } for (page = 0; page < TEST_PAGES; page ++) { memset(&header, 0, sizeof(header)); header.cupsWidth = TEST_WIDTH; header.cupsHeight = TEST_HEIGHT; header.cupsBytesPerLine = TEST_WIDTH; if (page & 1) { header.cupsBytesPerLine *= 4; header.cupsColorSpace = CUPS_CSPACE_CMYK; header.cupsColorOrder = CUPS_ORDER_CHUNKED; } else { header.cupsColorSpace = CUPS_CSPACE_K; header.cupsColorOrder = CUPS_ORDER_BANDED; } if (page & 2) { header.cupsBytesPerLine *= 2; header.cupsBitsPerColor = 16; header.cupsBitsPerPixel = (page & 1) ? 64 : 16; } else { header.cupsBitsPerColor = 8; header.cupsBitsPerPixel = (page & 1) ? 32 : 8; } cupsRasterWriteHeader2(r, &header); for (y = 0; y < TEST_HEIGHT; y ++) cupsRasterWritePixels(r, data[y & 31], header.cupsBytesPerLine); } cupsRasterClose(r); } cups-2.2.7/filter/rastertoepson.c000664 000765 000024 00000060423 13255074424 017521 0ustar00msweetstaff000000 000000 /* * EPSON ESC/P and ESC/P2 filter for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1993-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include #include #include #include #include #include #include /* * Model numbers... */ #define EPSON_9PIN 0 #define EPSON_24PIN 1 #define EPSON_COLOR 2 #define EPSON_PHOTO 3 #define EPSON_ICOLOR 4 #define EPSON_IPHOTO 5 /* * Macros... */ #define pwrite(s,n) fwrite((s), 1, (n), stdout) /* * Globals... */ unsigned char *Planes[6], /* Output buffers */ *CompBuffer, /* Compression buffer */ *LineBuffers[2]; /* Line bitmap buffers */ int Model, /* Model number */ EjectPage, /* Eject the page when done? */ Shingling, /* Shingle output? */ Canceled; /* Has the current job been canceled? */ unsigned NumPlanes, /* Number of color planes */ Feed, /* Number of lines to skip */ DotBit, /* Bit in buffers */ DotBytes, /* # bytes in a dot column */ DotColumns, /* # columns in 1/60 inch */ LineCount, /* # of lines processed */ EvenOffset, /* Offset into 'even' buffers */ OddOffset; /* Offset into 'odd' buffers */ /* * Prototypes... */ void Setup(void); void StartPage(const ppd_file_t *ppd, const cups_page_header2_t *header); void EndPage(const cups_page_header2_t *header); void Shutdown(void); void CancelJob(int sig); void CompressData(const unsigned char *line, unsigned length, unsigned plane, unsigned type, unsigned xstep, unsigned ystep); void OutputLine(const cups_page_header2_t *header); void OutputRows(const cups_page_header2_t *header, int row); /* * 'Setup()' - Prepare the printer for printing. */ void Setup(void) { const char *device_uri; /* The device for the printer... */ /* * EPSON USB printers need an additional command issued at the * beginning of each job to exit from "packet" mode... */ if ((device_uri = getenv("DEVICE_URI")) != NULL && strncmp(device_uri, "usb:", 4) == 0 && Model >= EPSON_ICOLOR) pwrite("\000\000\000\033\001@EJL 1284.4\n@EJL \n\033@", 29); } /* * 'StartPage()' - Start a page of graphics. */ void StartPage( const ppd_file_t *ppd, /* I - PPD file */ const cups_page_header2_t *header) /* I - Page header */ { int n, t; /* Numbers */ unsigned plane; /* Looping var */ /* * Show page device dictionary... */ fprintf(stderr, "DEBUG: StartPage...\n"); fprintf(stderr, "DEBUG: Duplex = %d\n", header->Duplex); fprintf(stderr, "DEBUG: HWResolution = [ %d %d ]\n", header->HWResolution[0], header->HWResolution[1]); fprintf(stderr, "DEBUG: ImagingBoundingBox = [ %d %d %d %d ]\n", header->ImagingBoundingBox[0], header->ImagingBoundingBox[1], header->ImagingBoundingBox[2], header->ImagingBoundingBox[3]); fprintf(stderr, "DEBUG: Margins = [ %d %d ]\n", header->Margins[0], header->Margins[1]); fprintf(stderr, "DEBUG: ManualFeed = %d\n", header->ManualFeed); fprintf(stderr, "DEBUG: MediaPosition = %d\n", header->MediaPosition); fprintf(stderr, "DEBUG: NumCopies = %d\n", header->NumCopies); fprintf(stderr, "DEBUG: Orientation = %d\n", header->Orientation); fprintf(stderr, "DEBUG: PageSize = [ %d %d ]\n", header->PageSize[0], header->PageSize[1]); fprintf(stderr, "DEBUG: cupsWidth = %d\n", header->cupsWidth); fprintf(stderr, "DEBUG: cupsHeight = %d\n", header->cupsHeight); fprintf(stderr, "DEBUG: cupsMediaType = %d\n", header->cupsMediaType); fprintf(stderr, "DEBUG: cupsBitsPerColor = %d\n", header->cupsBitsPerColor); fprintf(stderr, "DEBUG: cupsBitsPerPixel = %d\n", header->cupsBitsPerPixel); fprintf(stderr, "DEBUG: cupsBytesPerLine = %d\n", header->cupsBytesPerLine); fprintf(stderr, "DEBUG: cupsColorOrder = %d\n", header->cupsColorOrder); fprintf(stderr, "DEBUG: cupsColorSpace = %d\n", header->cupsColorSpace); fprintf(stderr, "DEBUG: cupsCompression = %d\n", header->cupsCompression); /* * Send a reset sequence. */ if (ppd && ppd->nickname && strstr(ppd->nickname, "OKIDATA") != NULL) printf("\033{A"); /* Set EPSON emulation mode */ printf("\033@"); /* * See which type of printer we are using... */ switch (Model) { case EPSON_9PIN : case EPSON_24PIN : printf("\033P\022"); /* Set 10 CPI */ if (header->HWResolution[0] == 360 || header->HWResolution[0] == 240) { printf("\033x1"); /* LQ printing */ printf("\033U1"); /* Unidirectional */ } else { printf("\033x0"); /* Draft printing */ printf("\033U0"); /* Bidirectional */ } printf("\033l%c\033Q%c", 0, /* Side margins */ (int)(10.0 * header->PageSize[0] / 72.0 + 0.5)); printf("\033\062\033C%c", /* Page length in 1/6th inches */ (int)(header->PageSize[1] / 12.0 + 0.5)); printf("\033N%c", 0); /* Bottom margin */ printf("\033O"); /* No perforation skip */ /* * Setup various buffer limits... */ DotBytes = header->cupsRowCount / 8; DotColumns = header->HWResolution[0] / 60; Shingling = 0; if (Model == EPSON_9PIN) printf("\033\063\030"); /* Set line feed */ else switch (header->HWResolution[0]) { case 60: case 120 : case 240 : printf("\033\063\030"); /* Set line feed */ break; case 180 : case 360 : Shingling = 1; if (header->HWResolution[1] == 180) printf("\033\063\010");/* Set line feed */ else printf("\033+\010"); /* Set line feed */ break; } break; default : /* * Set graphics mode... */ pwrite("\033(G\001\000\001", 6); /* Graphics mode */ /* * Set the media size... */ if (Model < EPSON_ICOLOR) { pwrite("\033(U\001\000", 5); /* Resolution/units */ putchar((int)(3600 / header->HWResolution[1])); } else { pwrite("\033(U\005\000", 5); putchar((int)(1440 / header->HWResolution[1])); putchar((int)(1440 / header->HWResolution[1])); putchar((int)(1440 / header->HWResolution[0])); putchar(0xa0); /* n/1440ths... */ putchar(0x05); } n = (int)(header->PageSize[1] * header->HWResolution[1] / 72.0); pwrite("\033(C\002\000", 5); /* Page length */ putchar(n); putchar(n >> 8); if (ppd) t = (int)((ppd->sizes[1].length - ppd->sizes[1].top) * header->HWResolution[1] / 72.0); else t = 0; pwrite("\033(c\004\000", 5); /* Top & bottom margins */ putchar(t); putchar(t >> 8); putchar(n); putchar(n >> 8); if (header->HWResolution[1] == 720) { pwrite("\033(i\001\000\001", 6); /* Microweave */ pwrite("\033(e\002\000\000\001", 7); /* Small dots */ } pwrite("\033(V\002\000\000\000", 7); /* Set absolute position 0 */ DotBytes = 0; DotColumns = 0; Shingling = 0; break; } /* * Set other stuff... */ if (header->cupsColorSpace == CUPS_CSPACE_CMY) NumPlanes = 3; else if (header->cupsColorSpace == CUPS_CSPACE_KCMY) NumPlanes = 4; else if (header->cupsColorSpace == CUPS_CSPACE_KCMYcm) NumPlanes = 6; else NumPlanes = 1; Feed = 0; /* No blank lines yet */ /* * Allocate memory for a line/row of graphics... */ if ((Planes[0] = malloc(header->cupsBytesPerLine + NumPlanes)) == NULL) { fputs("ERROR: Unable to allocate memory\n", stderr); exit(1); } for (plane = 1; plane < NumPlanes; plane ++) Planes[plane] = Planes[0] + plane * header->cupsBytesPerLine / NumPlanes; if (header->cupsCompression || DotBytes) { if ((CompBuffer = calloc(2, header->cupsWidth + 1)) == NULL) { fputs("ERROR: Unable to allocate memory\n", stderr); exit(1); } } else CompBuffer = NULL; if (DotBytes) { if ((LineBuffers[0] = calloc((size_t)DotBytes, header->cupsWidth * (size_t)(Shingling + 1))) == NULL) { fputs("ERROR: Unable to allocate memory\n", stderr); exit(1); } LineBuffers[1] = LineBuffers[0] + DotBytes * header->cupsWidth; DotBit = 128; LineCount = 0; EvenOffset = 0; OddOffset = 0; } } /* * 'EndPage()' - Finish a page of graphics. */ void EndPage( const cups_page_header2_t *header) /* I - Page header */ { if (DotBytes && header) { /* * Flush remaining graphics as needed... */ if (!Shingling) { if (DotBit < 128 || EvenOffset) OutputRows(header, 0); } else if (OddOffset > EvenOffset) { OutputRows(header, 1); OutputRows(header, 0); } else { OutputRows(header, 0); OutputRows(header, 1); } } /* * Eject the current page... */ putchar(12); /* Form feed */ fflush(stdout); /* * Free memory... */ free(Planes[0]); if (CompBuffer) free(CompBuffer); if (DotBytes) free(LineBuffers[0]); } /* * 'Shutdown()' - Shutdown the printer. */ void Shutdown(void) { /* * Send a reset sequence. */ printf("\033@"); } /* * 'CancelJob()' - Cancel the current job... */ void CancelJob(int sig) /* I - Signal */ { (void)sig; Canceled = 1; } /* * 'CompressData()' - Compress a line of graphics. */ void CompressData(const unsigned char *line, /* I - Data to compress */ unsigned length,/* I - Number of bytes */ unsigned plane, /* I - Color plane */ unsigned type, /* I - Type of compression */ unsigned xstep, /* I - X resolution */ unsigned ystep) /* I - Y resolution */ { const unsigned char *line_ptr, /* Current byte pointer */ *line_end, /* End-of-line byte pointer */ *start; /* Start of compression sequence */ unsigned char *comp_ptr, /* Pointer into compression buffer */ temp; /* Current byte */ int count; /* Count of bytes for output */ static int ctable[6] = { 0, 2, 1, 4, 18, 17 }; /* KCMYcm color values */ /* * Setup pointers... */ line_ptr = line; line_end = line + length; /* * Do depletion for 720 DPI printing... */ if (ystep == 5) { for (comp_ptr = (unsigned char *)line; comp_ptr < line_end;) { /* * Grab the current byte... */ temp = *comp_ptr; /* * Check adjacent bits... */ if ((temp & 0xc0) == 0xc0) temp &= 0xbf; if ((temp & 0x60) == 0x60) temp &= 0xdf; if ((temp & 0x30) == 0x30) temp &= 0xef; if ((temp & 0x18) == 0x18) temp &= 0xf7; if ((temp & 0x0c) == 0x0c) temp &= 0xfb; if ((temp & 0x06) == 0x06) temp &= 0xfd; if ((temp & 0x03) == 0x03) temp &= 0xfe; *comp_ptr++ = temp; /* * Check the last bit in the current byte and the first bit in the * next byte... */ if ((temp & 0x01) && comp_ptr < line_end && *comp_ptr & 0x80) *comp_ptr &= 0x7f; } } switch (type) { case 0 : /* * Do no compression... */ break; case 1 : /* * Do TIFF pack-bits encoding... */ comp_ptr = CompBuffer; while (line_ptr < line_end) { if ((line_ptr + 1) >= line_end) { /* * Single byte on the end... */ *comp_ptr++ = 0x00; *comp_ptr++ = *line_ptr++; } else if (line_ptr[0] == line_ptr[1]) { /* * Repeated sequence... */ line_ptr ++; count = 2; while (line_ptr < (line_end - 1) && line_ptr[0] == line_ptr[1] && count < 127) { line_ptr ++; count ++; } *comp_ptr++ = (unsigned char)(257 - count); *comp_ptr++ = *line_ptr++; } else { /* * Non-repeated sequence... */ start = line_ptr; line_ptr ++; count = 1; while (line_ptr < (line_end - 1) && line_ptr[0] != line_ptr[1] && count < 127) { line_ptr ++; count ++; } *comp_ptr++ = (unsigned char)(count - 1); memcpy(comp_ptr, start, (size_t)count); comp_ptr += count; } } line_ptr = CompBuffer; line_end = comp_ptr; break; } putchar(0x0d); /* Move print head to left margin */ if (Model < EPSON_ICOLOR) { /* * Do graphics the "old" way... */ if (NumPlanes > 1) { /* * Set the color... */ if (plane > 3) printf("\033(r%c%c%c%c", 2, 0, 1, ctable[plane] & 15); /* Set extended color */ else if (NumPlanes == 3) printf("\033r%c", ctable[plane + 1]); /* Set color */ else printf("\033r%c", ctable[plane]); /* Set color */ } /* * Send a raster plane... */ length *= 8; printf("\033."); /* Raster graphics */ putchar((int)type); putchar((int)ystep); putchar((int)xstep); putchar(1); putchar((int)length); putchar((int)(length >> 8)); } else { /* * Do graphics the "new" way... */ printf("\033i"); putchar(ctable[plane]); putchar((int)type); putchar(1); putchar((int)length); putchar((int)(length >> 8)); putchar(1); putchar(0); } pwrite(line_ptr, (size_t)(line_end - line_ptr)); fflush(stdout); } /* * 'OutputLine()' - Output a line of graphics. */ void OutputLine( const cups_page_header2_t *header) /* I - Page header */ { if (header->cupsRowCount) { unsigned width; unsigned char *tempptr, *evenptr, *oddptr; unsigned int x; unsigned char bit; const unsigned char *pixel; unsigned char *temp; /* * Collect bitmap data in the line buffers and write after each buffer. */ for (x = header->cupsWidth, bit = 128, pixel = Planes[0], temp = CompBuffer; x > 0; x --, temp ++) { if (*pixel & bit) *temp |= DotBit; if (bit > 1) bit >>= 1; else { bit = 128; pixel ++; } } if (DotBit > 1) DotBit >>= 1; else { /* * Copy the holding buffer to the output buffer, shingling as necessary... */ if (Shingling && LineCount != 0) { /* * Shingle the output... */ if (LineCount & 1) { evenptr = LineBuffers[1] + OddOffset; oddptr = LineBuffers[0] + EvenOffset + DotBytes; } else { evenptr = LineBuffers[0] + EvenOffset; oddptr = LineBuffers[1] + OddOffset + DotBytes; } for (width = header->cupsWidth, tempptr = CompBuffer; width > 1; width -= 2, tempptr += 2, oddptr += DotBytes * 2, evenptr += DotBytes * 2) { evenptr[0] = tempptr[0]; oddptr[0] = tempptr[1]; } if (width == 1) { evenptr[0] = tempptr[0]; oddptr[0] = tempptr[1]; } } else { /* * Don't shingle the output... */ for (width = header->cupsWidth, tempptr = CompBuffer, evenptr = LineBuffers[0] + EvenOffset; width > 0; width --, tempptr ++, evenptr += DotBytes) *evenptr = tempptr[0]; } if (Shingling && LineCount != 0) { EvenOffset ++; OddOffset ++; if (EvenOffset == DotBytes) { EvenOffset = 0; OutputRows(header, 0); } if (OddOffset == DotBytes) { OddOffset = 0; OutputRows(header, 1); } } else { EvenOffset ++; if (EvenOffset == DotBytes) { EvenOffset = 0; OutputRows(header, 0); } } DotBit = 128; LineCount ++; memset(CompBuffer, 0, header->cupsWidth); } } else { unsigned plane; /* Current plane */ unsigned bytes; /* Bytes per plane */ unsigned xstep, ystep; /* X & Y resolutions */ /* * Write a single line of bitmap data as needed... */ xstep = 3600 / header->HWResolution[0]; ystep = 3600 / header->HWResolution[1]; bytes = header->cupsBytesPerLine / NumPlanes; for (plane = 0; plane < NumPlanes; plane ++) { /* * Skip blank data... */ if (!Planes[plane][0] && memcmp(Planes[plane], Planes[plane] + 1, (size_t)bytes - 1) == 0) continue; /* * Output whitespace as needed... */ if (Feed > 0) { pwrite("\033(v\002\000", 5); /* Relative vertical position */ putchar((int)Feed); putchar((int)(Feed >> 8)); Feed = 0; } CompressData(Planes[plane], bytes, plane, header->cupsCompression, xstep, ystep); } Feed ++; } } /* * 'OutputRows()' - Output 8, 24, or 48 rows. */ void OutputRows( const cups_page_header2_t *header, /* I - Page image header */ int row) /* I - Row number (0 or 1) */ { unsigned i, n, /* Looping vars */ dot_count, /* Number of bytes to print */ dot_min; /* Minimum number of bytes */ unsigned char *dot_ptr, /* Pointer to print data */ *ptr; /* Current data */ dot_min = DotBytes * DotColumns; if (LineBuffers[row][0] != 0 || memcmp(LineBuffers[row], LineBuffers[row] + 1, header->cupsWidth * DotBytes - 1)) { /* * Skip leading space... */ i = 0; dot_count = header->cupsWidth * DotBytes; dot_ptr = LineBuffers[row]; while (dot_count >= dot_min && dot_ptr[0] == 0 && memcmp(dot_ptr, dot_ptr + 1, dot_min - 1) == 0) { i ++; dot_ptr += dot_min; dot_count -= dot_min; } /* * Skip trailing space... */ while (dot_count >= dot_min && dot_ptr[dot_count - dot_min] == 0 && memcmp(dot_ptr + dot_count - dot_min, dot_ptr + dot_count - dot_min + 1, dot_min - 1) == 0) dot_count -= dot_min; /* * Position print head for printing... */ if (i == 0) putchar('\r'); else { putchar(0x1b); putchar('$'); putchar((int)(i & 255)); putchar((int)(i >> 8)); } /* * Start bitmap graphics for this line... */ printf("\033*"); /* Select bit image */ switch (header->HWResolution[0]) { case 60 : /* 60x60/72 DPI gfx */ putchar(0); break; case 120 : /* 120x60/72 DPI gfx */ putchar(1); break; case 180 : /* 180 DPI gfx */ putchar(39); break; case 240 : /* 240x72 DPI gfx */ putchar(3); break; case 360 : /* 360x180/360 DPI gfx */ if (header->HWResolution[1] == 180) { if (Shingling && LineCount != 0) putchar(40); /* 360x180 fast */ else putchar(41); /* 360x180 slow */ } else { if (Shingling && LineCount != 0) putchar(72); /* 360x360 fast */ else putchar(73); /* 360x360 slow */ } break; } n = dot_count / DotBytes; putchar((int)(n & 255)); putchar((int)(n / 256)); /* * Write the graphics data... */ if (header->HWResolution[0] == 120 || header->HWResolution[0] == 240) { /* * Need to interleave the dots to avoid hosing the print head... */ for (n = dot_count / 2, ptr = dot_ptr; n > 0; n --, ptr += 2) { putchar(*ptr); putchar(0); } if (dot_count & 1) putchar(*ptr); /* * Move the head back and print the odd bytes... */ if (i == 0) putchar('\r'); else { putchar(0x1b); putchar('$'); putchar((int)(i & 255)); putchar((int)(i >> 8)); } if (header->HWResolution[0] == 120) printf("\033*\001"); /* Select bit image */ else printf("\033*\003"); /* Select bit image */ n = (unsigned)dot_count / DotBytes; putchar((int)(n & 255)); putchar((int)(n / 256)); for (n = dot_count / 2, ptr = dot_ptr + 1; n > 0; n --, ptr += 2) { putchar(0); putchar(*ptr); } if (dot_count & 1) putchar(0); } else pwrite(dot_ptr, dot_count); } /* * Feed the paper... */ putchar('\n'); if (Shingling && row == 1) { if (header->HWResolution[1] == 360) printf("\n\n\n\n"); else printf("\n"); } fflush(stdout); /* * Clear the buffer... */ memset(LineBuffers[row], 0, header->cupsWidth * DotBytes); } /* * 'main()' - Main entry and processing of driver. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int fd; /* File descriptor */ cups_raster_t *ras; /* Raster stream for printing */ cups_page_header2_t header; /* Page header from file */ ppd_file_t *ppd; /* PPD file */ int page; /* Current page */ unsigned y; /* Current line */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ /* * Make sure status messages are not buffered... */ setbuf(stderr, NULL); /* * Check command-line... */ if (argc < 6 || argc > 7) { /* * We don't have the correct number of arguments; write an error message * and return. */ _cupsLangPrintFilter(stderr, "ERROR", _("%s job-id user title copies options [file]"), "rastertoepson"); return (1); } /* * Open the page stream... */ if (argc == 7) { if ((fd = open(argv[6], O_RDONLY)) == -1) { _cupsLangPrintError("ERROR", _("Unable to open raster file")); sleep(1); return (1); } } else fd = 0; ras = cupsRasterOpen(fd, CUPS_RASTER_READ); /* * Register a signal handler to eject the current page if the * job is cancelled. */ Canceled = 0; #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */ sigset(SIGTERM, CancelJob); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); action.sa_handler = CancelJob; sigaction(SIGTERM, &action, NULL); #else signal(SIGTERM, CancelJob); #endif /* HAVE_SIGSET */ /* * Initialize the print device... */ ppd = ppdOpenFile(getenv("PPD")); if (!ppd) { ppd_status_t status; /* PPD error */ int linenum; /* Line number */ _cupsLangPrintFilter(stderr, "ERROR", _("The PPD file could not be opened.")); status = ppdLastError(&linenum); fprintf(stderr, "DEBUG: %s on line %d.\n", ppdErrorString(status), linenum); return (1); } Model = ppd->model_number; Setup(); /* * Process pages as needed... */ page = 0; while (cupsRasterReadHeader2(ras, &header)) { /* * Write a status message with the page number and number of copies. */ if (Canceled) break; page ++; fprintf(stderr, "PAGE: %d %d\n", page, header.NumCopies); _cupsLangPrintFilter(stderr, "INFO", _("Starting page %d."), page); /* * Start the page... */ StartPage(ppd, &header); /* * Loop for each line on the page... */ for (y = 0; y < header.cupsHeight; y ++) { /* * Let the user know how far we have progressed... */ if (Canceled) break; if ((y & 127) == 0) { _cupsLangPrintFilter(stderr, "INFO", _("Printing page %d, %u%% complete."), page, 100 * y / header.cupsHeight); fprintf(stderr, "ATTR: job-media-progress=%u\n", 100 * y / header.cupsHeight); } /* * Read a line of graphics... */ if (cupsRasterReadPixels(ras, Planes[0], header.cupsBytesPerLine) < 1) break; /* * Write it to the printer... */ OutputLine(&header); } /* * Eject the page... */ _cupsLangPrintFilter(stderr, "INFO", _("Finished page %d."), page); EndPage(&header); if (Canceled) break; } /* * Shutdown the printer... */ Shutdown(); ppdClose(ppd); /* * Close the raster stream... */ cupsRasterClose(ras); if (fd != 0) close(fd); /* * If no pages were printed, send an error message... */ if (page == 0) { _cupsLangPrintFilter(stderr, "ERROR", _("No pages were found.")); return (1); } else return (0); } cups-2.2.7/filter/rastertohp.c000664 000765 000024 00000045545 13255074424 017014 0ustar00msweetstaff000000 000000 /* * Hewlett-Packard Page Control Language filter for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1993-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include #include #include #include #include #include #include /* * Globals... */ unsigned char *Planes[4], /* Output buffers */ *CompBuffer, /* Compression buffer */ *BitBuffer; /* Buffer for output bits */ unsigned NumPlanes, /* Number of color planes */ ColorBits, /* Number of bits per color */ Feed; /* Number of lines to skip */ int Duplex, /* Current duplex mode */ Page, /* Current page number */ Canceled; /* Has the current job been canceled? */ /* * Prototypes... */ void Setup(void); void StartPage(ppd_file_t *ppd, cups_page_header2_t *header); void EndPage(void); void Shutdown(void); void CancelJob(int sig); void CompressData(unsigned char *line, unsigned length, unsigned plane, unsigned type); void OutputLine(cups_page_header2_t *header); /* * 'Setup()' - Prepare the printer for printing. */ void Setup(void) { /* * Send a PCL reset sequence. */ putchar(0x1b); putchar('E'); } /* * 'StartPage()' - Start a page of graphics. */ void StartPage(ppd_file_t *ppd, /* I - PPD file */ cups_page_header2_t *header) /* I - Page header */ { unsigned plane; /* Looping var */ /* * Show page device dictionary... */ fprintf(stderr, "DEBUG: StartPage...\n"); fprintf(stderr, "DEBUG: Duplex = %d\n", header->Duplex); fprintf(stderr, "DEBUG: HWResolution = [ %d %d ]\n", header->HWResolution[0], header->HWResolution[1]); fprintf(stderr, "DEBUG: ImagingBoundingBox = [ %d %d %d %d ]\n", header->ImagingBoundingBox[0], header->ImagingBoundingBox[1], header->ImagingBoundingBox[2], header->ImagingBoundingBox[3]); fprintf(stderr, "DEBUG: Margins = [ %d %d ]\n", header->Margins[0], header->Margins[1]); fprintf(stderr, "DEBUG: ManualFeed = %d\n", header->ManualFeed); fprintf(stderr, "DEBUG: MediaPosition = %d\n", header->MediaPosition); fprintf(stderr, "DEBUG: NumCopies = %d\n", header->NumCopies); fprintf(stderr, "DEBUG: Orientation = %d\n", header->Orientation); fprintf(stderr, "DEBUG: PageSize = [ %d %d ]\n", header->PageSize[0], header->PageSize[1]); fprintf(stderr, "DEBUG: cupsWidth = %d\n", header->cupsWidth); fprintf(stderr, "DEBUG: cupsHeight = %d\n", header->cupsHeight); fprintf(stderr, "DEBUG: cupsMediaType = %d\n", header->cupsMediaType); fprintf(stderr, "DEBUG: cupsBitsPerColor = %d\n", header->cupsBitsPerColor); fprintf(stderr, "DEBUG: cupsBitsPerPixel = %d\n", header->cupsBitsPerPixel); fprintf(stderr, "DEBUG: cupsBytesPerLine = %d\n", header->cupsBytesPerLine); fprintf(stderr, "DEBUG: cupsColorOrder = %d\n", header->cupsColorOrder); fprintf(stderr, "DEBUG: cupsColorSpace = %d\n", header->cupsColorSpace); fprintf(stderr, "DEBUG: cupsCompression = %d\n", header->cupsCompression); /* * Setup printer/job attributes... */ Duplex = header->Duplex; ColorBits = header->cupsBitsPerColor; if ((!Duplex || (Page & 1)) && header->MediaPosition) printf("\033&l%dH", /* Set media position */ header->MediaPosition); if (Duplex && ppd && ppd->model_number == 2) { /* * Handle duplexing on new DeskJet printers... */ printf("\033&l-2H"); /* Load media */ if (Page & 1) printf("\033&l2S"); /* Set duplex mode */ } if (!Duplex || (Page & 1) || (ppd && ppd->model_number == 2)) { /* * Set the media size... */ printf("\033&l6D\033&k12H"); /* Set 6 LPI, 10 CPI */ printf("\033&l0O"); /* Set portrait orientation */ switch (header->PageSize[1]) { case 540 : /* Monarch Envelope */ printf("\033&l80A"); /* Set page size */ break; case 595 : /* A5 */ printf("\033&l25A"); /* Set page size */ break; case 624 : /* DL Envelope */ printf("\033&l90A"); /* Set page size */ break; case 649 : /* C5 Envelope */ printf("\033&l91A"); /* Set page size */ break; case 684 : /* COM-10 Envelope */ printf("\033&l81A"); /* Set page size */ break; case 709 : /* B5 Envelope */ printf("\033&l100A"); /* Set page size */ break; case 756 : /* Executive */ printf("\033&l1A"); /* Set page size */ break; case 792 : /* Letter */ printf("\033&l2A"); /* Set page size */ break; case 842 : /* A4 */ printf("\033&l26A"); /* Set page size */ break; case 1008 : /* Legal */ printf("\033&l3A"); /* Set page size */ break; case 1191 : /* A3 */ printf("\033&l27A"); /* Set page size */ break; case 1224 : /* Tabloid */ printf("\033&l6A"); /* Set page size */ break; } printf("\033&l%dP", /* Set page length */ header->PageSize[1] / 12); printf("\033&l0E"); /* Set top margin to 0 */ } if (!Duplex || (Page & 1)) { /* * Set other job options... */ printf("\033&l%dX", header->NumCopies); /* Set number copies */ if (header->cupsMediaType && (!ppd || ppd->model_number != 2 || header->HWResolution[0] == 600)) printf("\033&l%dM", /* Set media type */ header->cupsMediaType); if (!ppd || ppd->model_number != 2) { int mode = Duplex ? 1 + header->Tumble != 0 : 0; printf("\033&l%dS", mode); /* Set duplex mode */ printf("\033&l0L"); /* Turn off perforation skip */ } } else if (!ppd || ppd->model_number != 2) printf("\033&a2G"); /* Set back side */ /* * Set graphics mode... */ if (ppd && ppd->model_number == 2) { /* * Figure out the number of color planes... */ if (header->cupsColorSpace == CUPS_CSPACE_KCMY) NumPlanes = 4; else NumPlanes = 1; /* * Set the resolution and top-of-form... */ printf("\033&u%dD", header->HWResolution[0]); /* Resolution */ printf("\033&l0e0L"); /* Reset top and don't skip */ printf("\033*p0Y\033*p0X"); /* Set top of form */ /* * Send 26-byte configure image data command with horizontal and * vertical resolutions as well as a color count... */ printf("\033*g26W"); putchar(2); /* Format 2 */ putchar((int)NumPlanes); /* Output planes */ putchar((int)(header->HWResolution[0] >> 8));/* Black resolution */ putchar((int)header->HWResolution[0]); putchar((int)(header->HWResolution[1] >> 8)); putchar((int)header->HWResolution[1]); putchar(0); putchar(1 << ColorBits); /* # of black levels */ putchar((int)(header->HWResolution[0] >> 8));/* Cyan resolution */ putchar((int)header->HWResolution[0]); putchar((int)(header->HWResolution[1] >> 8)); putchar((int)header->HWResolution[1]); putchar(0); putchar(1 << ColorBits); /* # of cyan levels */ putchar((int)(header->HWResolution[0] >> 8));/* Magenta resolution */ putchar((int)header->HWResolution[0]); putchar((int)(header->HWResolution[1] >> 8)); putchar((int)header->HWResolution[1]); putchar(0); putchar(1 << ColorBits); /* # of magenta levels */ putchar((int)(header->HWResolution[0] >> 8));/* Yellow resolution */ putchar((int)header->HWResolution[0]); putchar((int)(header->HWResolution[1] >> 8)); putchar((int)header->HWResolution[1]); putchar(0); putchar(1 << ColorBits); /* # of yellow levels */ printf("\033&l0H"); /* Set media position */ } else { printf("\033*t%uR", header->HWResolution[0]); /* Set resolution */ if (header->cupsColorSpace == CUPS_CSPACE_KCMY) { NumPlanes = 4; printf("\033*r-4U"); /* Set KCMY graphics */ } else if (header->cupsColorSpace == CUPS_CSPACE_CMY) { NumPlanes = 3; printf("\033*r-3U"); /* Set CMY graphics */ } else NumPlanes = 1; /* Black&white graphics */ /* * Set size and position of graphics... */ printf("\033*r%uS", header->cupsWidth); /* Set width */ printf("\033*r%uT", header->cupsHeight); /* Set height */ printf("\033&a0H"); /* Set horizontal position */ if (ppd) printf("\033&a%.0fV", /* Set vertical position */ 10.0 * (ppd->sizes[0].length - ppd->sizes[0].top)); else printf("\033&a0V"); /* Set top-of-page */ } printf("\033*r1A"); /* Start graphics */ if (header->cupsCompression) printf("\033*b%uM", /* Set compression */ header->cupsCompression); Feed = 0; /* No blank lines yet */ /* * Allocate memory for a line of graphics... */ if ((Planes[0] = malloc(header->cupsBytesPerLine + NumPlanes)) == NULL) { fputs("ERROR: Unable to allocate memory\n", stderr); exit(1); } for (plane = 1; plane < NumPlanes; plane ++) Planes[plane] = Planes[0] + plane * header->cupsBytesPerLine / NumPlanes; if (ColorBits > 1) BitBuffer = malloc(ColorBits * ((header->cupsWidth + 7) / 8)); else BitBuffer = NULL; if (header->cupsCompression) CompBuffer = malloc(header->cupsBytesPerLine * 2 + 2); else CompBuffer = NULL; } /* * 'EndPage()' - Finish a page of graphics. */ void EndPage(void) { /* * Eject the current page... */ if (NumPlanes > 1) { printf("\033*rC"); /* End color GFX */ if (!(Duplex && (Page & 1))) printf("\033&l0H"); /* Eject current page */ } else { printf("\033*r0B"); /* End GFX */ if (!(Duplex && (Page & 1))) printf("\014"); /* Eject current page */ } fflush(stdout); /* * Free memory... */ free(Planes[0]); if (BitBuffer) free(BitBuffer); if (CompBuffer) free(CompBuffer); } /* * 'Shutdown()' - Shutdown the printer. */ void Shutdown(void) { /* * Send a PCL reset sequence. */ putchar(0x1b); putchar('E'); } /* * 'CancelJob()' - Cancel the current job... */ void CancelJob(int sig) /* I - Signal */ { (void)sig; Canceled = 1; } /* * 'CompressData()' - Compress a line of graphics. */ void CompressData(unsigned char *line, /* I - Data to compress */ unsigned length, /* I - Number of bytes */ unsigned plane, /* I - Color plane */ unsigned type) /* I - Type of compression */ { unsigned char *line_ptr, /* Current byte pointer */ *line_end, /* End-of-line byte pointer */ *comp_ptr, /* Pointer into compression buffer */ *start; /* Start of compression sequence */ unsigned count; /* Count of bytes for output */ switch (type) { default : /* * Do no compression... */ line_ptr = line; line_end = line + length; break; case 1 : /* * Do run-length encoding... */ line_end = line + length; for (line_ptr = line, comp_ptr = CompBuffer; line_ptr < line_end; comp_ptr += 2, line_ptr += count) { for (count = 1; (line_ptr + count) < line_end && line_ptr[0] == line_ptr[count] && count < 256; count ++); comp_ptr[0] = (unsigned char)(count - 1); comp_ptr[1] = line_ptr[0]; } line_ptr = CompBuffer; line_end = comp_ptr; break; case 2 : /* * Do TIFF pack-bits encoding... */ line_ptr = line; line_end = line + length; comp_ptr = CompBuffer; while (line_ptr < line_end) { if ((line_ptr + 1) >= line_end) { /* * Single byte on the end... */ *comp_ptr++ = 0x00; *comp_ptr++ = *line_ptr++; } else if (line_ptr[0] == line_ptr[1]) { /* * Repeated sequence... */ line_ptr ++; count = 2; while (line_ptr < (line_end - 1) && line_ptr[0] == line_ptr[1] && count < 127) { line_ptr ++; count ++; } *comp_ptr++ = (unsigned char)(257 - count); *comp_ptr++ = *line_ptr++; } else { /* * Non-repeated sequence... */ start = line_ptr; line_ptr ++; count = 1; while (line_ptr < (line_end - 1) && line_ptr[0] != line_ptr[1] && count < 127) { line_ptr ++; count ++; } *comp_ptr++ = (unsigned char)(count - 1); memcpy(comp_ptr, start, count); comp_ptr += count; } } line_ptr = CompBuffer; line_end = comp_ptr; break; } /* * Set the length of the data and write a raster plane... */ printf("\033*b%d%c", (int)(line_end - line_ptr), plane); fwrite(line_ptr, (size_t)(line_end - line_ptr), 1, stdout); } /* * 'OutputLine()' - Output a line of graphics. */ void OutputLine(cups_page_header2_t *header) /* I - Page header */ { unsigned plane, /* Current plane */ bytes, /* Bytes to write */ count; /* Bytes to convert */ unsigned char bit, /* Current plane data */ bit0, /* Current low bit data */ bit1, /* Current high bit data */ *plane_ptr, /* Pointer into Planes */ *bit_ptr; /* Pointer into BitBuffer */ /* * Output whitespace as needed... */ if (Feed > 0) { printf("\033*b%dY", Feed); Feed = 0; } /* * Write bitmap data as needed... */ bytes = (header->cupsWidth + 7) / 8; for (plane = 0; plane < NumPlanes; plane ++) if (ColorBits == 1) { /* * Send bits as-is... */ CompressData(Planes[plane], bytes, plane < (NumPlanes - 1) ? 'V' : 'W', header->cupsCompression); } else { /* * Separate low and high bit data into separate buffers. */ for (count = header->cupsBytesPerLine / NumPlanes, plane_ptr = Planes[plane], bit_ptr = BitBuffer; count > 0; count -= 2, plane_ptr += 2, bit_ptr ++) { bit = plane_ptr[0]; bit0 = (unsigned char)(((bit & 64) << 1) | ((bit & 16) << 2) | ((bit & 4) << 3) | ((bit & 1) << 4)); bit1 = (unsigned char)((bit & 128) | ((bit & 32) << 1) | ((bit & 8) << 2) | ((bit & 2) << 3)); if (count > 1) { bit = plane_ptr[1]; bit0 |= (unsigned char)((bit & 1) | ((bit & 4) >> 1) | ((bit & 16) >> 2) | ((bit & 64) >> 3)); bit1 |= (unsigned char)(((bit & 2) >> 1) | ((bit & 8) >> 2) | ((bit & 32) >> 3) | ((bit & 128) >> 4)); } bit_ptr[0] = bit0; bit_ptr[bytes] = bit1; } /* * Send low and high bits... */ CompressData(BitBuffer, bytes, 'V', header->cupsCompression); CompressData(BitBuffer + bytes, bytes, plane < (NumPlanes - 1) ? 'V' : 'W', header->cupsCompression); } fflush(stdout); } /* * 'main()' - Main entry and processing of driver. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int fd; /* File descriptor */ cups_raster_t *ras; /* Raster stream for printing */ cups_page_header2_t header; /* Page header from file */ unsigned y; /* Current line */ ppd_file_t *ppd; /* PPD file */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ /* * Make sure status messages are not buffered... */ setbuf(stderr, NULL); /* * Check command-line... */ if (argc < 6 || argc > 7) { /* * We don't have the correct number of arguments; write an error message * and return. */ _cupsLangPrintFilter(stderr, "ERROR", _("%s job-id user title copies options [file]"), "rastertohp"); return (1); } /* * Open the page stream... */ if (argc == 7) { if ((fd = open(argv[6], O_RDONLY)) == -1) { _cupsLangPrintError("ERROR", _("Unable to open raster file")); sleep(1); return (1); } } else fd = 0; ras = cupsRasterOpen(fd, CUPS_RASTER_READ); /* * Register a signal handler to eject the current page if the * job is cancelled. */ Canceled = 0; #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */ sigset(SIGTERM, CancelJob); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); action.sa_handler = CancelJob; sigaction(SIGTERM, &action, NULL); #else signal(SIGTERM, CancelJob); #endif /* HAVE_SIGSET */ /* * Initialize the print device... */ ppd = ppdOpenFile(getenv("PPD")); if (!ppd) { ppd_status_t status; /* PPD error */ int linenum; /* Line number */ _cupsLangPrintFilter(stderr, "ERROR", _("The PPD file could not be opened.")); status = ppdLastError(&linenum); fprintf(stderr, "DEBUG: %s on line %d.\n", ppdErrorString(status), linenum); return (1); } Setup(); /* * Process pages as needed... */ Page = 0; while (cupsRasterReadHeader2(ras, &header)) { /* * Write a status message with the page number and number of copies. */ if (Canceled) break; Page ++; fprintf(stderr, "PAGE: %d %d\n", Page, header.NumCopies); _cupsLangPrintFilter(stderr, "INFO", _("Starting page %d."), Page); /* * Start the page... */ StartPage(ppd, &header); /* * Loop for each line on the page... */ for (y = 0; y < header.cupsHeight; y ++) { /* * Let the user know how far we have progressed... */ if (Canceled) break; if ((y & 127) == 0) { _cupsLangPrintFilter(stderr, "INFO", _("Printing page %d, %u%% complete."), Page, 100 * y / header.cupsHeight); fprintf(stderr, "ATTR: job-media-progress=%u\n", 100 * y / header.cupsHeight); } /* * Read a line of graphics... */ if (cupsRasterReadPixels(ras, Planes[0], header.cupsBytesPerLine) < 1) break; /* * See if the line is blank; if not, write it to the printer... */ if (Planes[0][0] || memcmp(Planes[0], Planes[0] + 1, header.cupsBytesPerLine - 1)) OutputLine(&header); else Feed ++; } /* * Eject the page... */ _cupsLangPrintFilter(stderr, "INFO", _("Finished page %d."), Page); EndPage(); if (Canceled) break; } /* * Shutdown the printer... */ Shutdown(); if (ppd) ppdClose(ppd); /* * Close the raster stream... */ cupsRasterClose(ras); if (fd != 0) close(fd); /* * If no pages were printed, send an error message... */ if (Page == 0) { _cupsLangPrintFilter(stderr, "ERROR", _("No pages were found.")); return (1); } else return (0); } cups-2.2.7/filter/rastertolabel.c000664 000765 000024 00000065272 13255074424 017463 0ustar00msweetstaff000000 000000 /* * Label printer filter for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 2001-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include #include #include #include #include #include #include /* * This driver filter currently supports Dymo, Intellitech, and Zebra * label printers. * * The Dymo portion of the driver has been tested with the 300, 330, * and 330 Turbo label printers; it may also work with other models. * The Dymo printers support printing at 136, 203, and 300 DPI. * * The Intellitech portion of the driver has been tested with the * Intellibar 408, 412, and 808 and supports their PCL variant. * * The Zebra portion of the driver has been tested with the LP-2844, * LP-2844Z, QL-320, and QL-420 label printers; it may also work with * other models. The driver supports EPL line mode, EPL page mode, * ZPL, and CPCL as defined in Zebra's online developer documentation. */ /* * Model number constants... */ #define DYMO_3x0 0 /* Dymo Labelwriter 300/330/330 Turbo */ #define ZEBRA_EPL_LINE 0x10 /* Zebra EPL line mode printers */ #define ZEBRA_EPL_PAGE 0x11 /* Zebra EPL page mode printers */ #define ZEBRA_ZPL 0x12 /* Zebra ZPL-based printers */ #define ZEBRA_CPCL 0x13 /* Zebra CPCL-based printers */ #define INTELLITECH_PCL 0x20 /* Intellitech PCL-based printers */ /* * Globals... */ unsigned char *Buffer; /* Output buffer */ unsigned char *CompBuffer; /* Compression buffer */ unsigned char *LastBuffer; /* Last buffer */ unsigned Feed; /* Number of lines to skip */ int LastSet; /* Number of repeat characters */ int ModelNumber, /* cupsModelNumber attribute */ Page, /* Current page */ Canceled; /* Non-zero if job is canceled */ /* * Prototypes... */ void Setup(ppd_file_t *ppd); void StartPage(ppd_file_t *ppd, cups_page_header2_t *header); void EndPage(ppd_file_t *ppd, cups_page_header2_t *header); void CancelJob(int sig); void OutputLine(ppd_file_t *ppd, cups_page_header2_t *header, unsigned y); void PCLCompress(unsigned char *line, unsigned length); void ZPLCompress(unsigned char repeat_char, unsigned repeat_count); /* * 'Setup()' - Prepare the printer for printing. */ void Setup(ppd_file_t *ppd) /* I - PPD file */ { int i; /* Looping var */ /* * Get the model number from the PPD file... */ if (ppd) ModelNumber = ppd->model_number; /* * Initialize based on the model number... */ switch (ModelNumber) { case DYMO_3x0 : /* * Clear any remaining data... */ for (i = 0; i < 100; i ++) putchar(0x1b); /* * Reset the printer... */ fputs("\033@", stdout); break; case ZEBRA_EPL_LINE : break; case ZEBRA_EPL_PAGE : break; case ZEBRA_ZPL : break; case ZEBRA_CPCL : break; case INTELLITECH_PCL : /* * Send a PCL reset sequence. */ putchar(0x1b); putchar('E'); break; } } /* * 'StartPage()' - Start a page of graphics. */ void StartPage(ppd_file_t *ppd, /* I - PPD file */ cups_page_header2_t *header) /* I - Page header */ { ppd_choice_t *choice; /* Marked choice */ unsigned length; /* Actual label length */ /* * Show page device dictionary... */ fprintf(stderr, "DEBUG: StartPage...\n"); fprintf(stderr, "DEBUG: Duplex = %d\n", header->Duplex); fprintf(stderr, "DEBUG: HWResolution = [ %d %d ]\n", header->HWResolution[0], header->HWResolution[1]); fprintf(stderr, "DEBUG: ImagingBoundingBox = [ %d %d %d %d ]\n", header->ImagingBoundingBox[0], header->ImagingBoundingBox[1], header->ImagingBoundingBox[2], header->ImagingBoundingBox[3]); fprintf(stderr, "DEBUG: Margins = [ %d %d ]\n", header->Margins[0], header->Margins[1]); fprintf(stderr, "DEBUG: ManualFeed = %d\n", header->ManualFeed); fprintf(stderr, "DEBUG: MediaPosition = %d\n", header->MediaPosition); fprintf(stderr, "DEBUG: NumCopies = %d\n", header->NumCopies); fprintf(stderr, "DEBUG: Orientation = %d\n", header->Orientation); fprintf(stderr, "DEBUG: PageSize = [ %d %d ]\n", header->PageSize[0], header->PageSize[1]); fprintf(stderr, "DEBUG: cupsWidth = %d\n", header->cupsWidth); fprintf(stderr, "DEBUG: cupsHeight = %d\n", header->cupsHeight); fprintf(stderr, "DEBUG: cupsMediaType = %d\n", header->cupsMediaType); fprintf(stderr, "DEBUG: cupsBitsPerColor = %d\n", header->cupsBitsPerColor); fprintf(stderr, "DEBUG: cupsBitsPerPixel = %d\n", header->cupsBitsPerPixel); fprintf(stderr, "DEBUG: cupsBytesPerLine = %d\n", header->cupsBytesPerLine); fprintf(stderr, "DEBUG: cupsColorOrder = %d\n", header->cupsColorOrder); fprintf(stderr, "DEBUG: cupsColorSpace = %d\n", header->cupsColorSpace); fprintf(stderr, "DEBUG: cupsCompression = %d\n", header->cupsCompression); switch (ModelNumber) { case DYMO_3x0 : /* * Setup printer/job attributes... */ length = header->PageSize[1] * header->HWResolution[1] / 72; printf("\033L%c%c", length >> 8, length); printf("\033D%c", header->cupsBytesPerLine); printf("\033%c", header->cupsCompression + 'c'); /* Darkness */ break; case ZEBRA_EPL_LINE : /* * Set print rate... */ if ((choice = ppdFindMarkedChoice(ppd, "zePrintRate")) != NULL && strcmp(choice->choice, "Default")) printf("\033S%.0f", atof(choice->choice) * 2.0 - 2.0); /* * Set darkness... */ if (header->cupsCompression > 0 && header->cupsCompression <= 100) printf("\033D%d", 7 * header->cupsCompression / 100); /* * Set left margin to 0... */ fputs("\033M01", stdout); /* * Start buffered output... */ fputs("\033B", stdout); break; case ZEBRA_EPL_PAGE : /* * Start a new label... */ puts(""); puts("N"); /* * Set hardware options... */ if (!strcmp(header->MediaType, "Direct")) puts("OD"); /* * Set print rate... */ if ((choice = ppdFindMarkedChoice(ppd, "zePrintRate")) != NULL && strcmp(choice->choice, "Default")) { double val = atof(choice->choice); if (val >= 3.0) printf("S%.0f\n", val); else printf("S%.0f\n", val * 2.0 - 2.0); } /* * Set darkness... */ if (header->cupsCompression > 0 && header->cupsCompression <= 100) printf("D%u\n", 15 * header->cupsCompression / 100); /* * Set label size... */ printf("q%u\n", (header->cupsWidth + 7) & ~7U); break; case ZEBRA_ZPL : /* * Set darkness... */ if (header->cupsCompression > 0 && header->cupsCompression <= 100) printf("~SD%02u\n", 30 * header->cupsCompression / 100); /* * Start bitmap graphics... */ printf("~DGR:CUPS.GRF,%u,%u,\n", header->cupsHeight * header->cupsBytesPerLine, header->cupsBytesPerLine); /* * Allocate compression buffers... */ CompBuffer = malloc(2 * header->cupsBytesPerLine + 1); LastBuffer = malloc(header->cupsBytesPerLine); LastSet = 0; break; case ZEBRA_CPCL : /* * Start label... */ printf("! 0 %u %u %u %u\r\n", header->HWResolution[0], header->HWResolution[1], header->cupsHeight, header->NumCopies); printf("PAGE-WIDTH %u\r\n", header->cupsWidth); printf("PAGE-HEIGHT %u\r\n", header->cupsWidth); break; case INTELLITECH_PCL : /* * Set the media size... */ printf("\033&l6D\033&k12H"); /* Set 6 LPI, 10 CPI */ printf("\033&l0O"); /* Set portrait orientation */ switch (header->PageSize[1]) { case 540 : /* Monarch Envelope */ printf("\033&l80A"); /* Set page size */ break; case 624 : /* DL Envelope */ printf("\033&l90A"); /* Set page size */ break; case 649 : /* C5 Envelope */ printf("\033&l91A"); /* Set page size */ break; case 684 : /* COM-10 Envelope */ printf("\033&l81A"); /* Set page size */ break; case 756 : /* Executive */ printf("\033&l1A"); /* Set page size */ break; case 792 : /* Letter */ printf("\033&l2A"); /* Set page size */ break; case 842 : /* A4 */ printf("\033&l26A"); /* Set page size */ break; case 1008 : /* Legal */ printf("\033&l3A"); /* Set page size */ break; default : /* Custom size */ printf("\033!f%uZ", header->PageSize[1] * 300 / 72); break; } printf("\033&l%uP", /* Set page length */ header->PageSize[1] / 12); printf("\033&l0E"); /* Set top margin to 0 */ if (header->NumCopies) printf("\033&l%uX", header->NumCopies); /* Set number copies */ printf("\033&l0L"); /* Turn off perforation skip */ /* * Print settings... */ if (Page == 1) { if (header->cupsRowFeed) /* inPrintRate */ printf("\033!p%uS", header->cupsRowFeed); if (header->cupsCompression != ~0U) /* inPrintDensity */ printf("\033&d%uA", 30 * header->cupsCompression / 100 - 15); if ((choice = ppdFindMarkedChoice(ppd, "inPrintMode")) != NULL) { if (!strcmp(choice->choice, "Standard")) fputs("\033!p0M", stdout); else if (!strcmp(choice->choice, "Tear")) { fputs("\033!p1M", stdout); if (header->cupsRowCount) /* inTearInterval */ printf("\033!n%uT", header->cupsRowCount); } else { fputs("\033!p2M", stdout); if (header->cupsRowStep) /* inCutInterval */ printf("\033!n%uC", header->cupsRowStep); } } } /* * Setup graphics... */ printf("\033*t%uR", header->HWResolution[0]); /* Set resolution */ printf("\033*r%uS", header->cupsWidth); /* Set width */ printf("\033*r%uT", header->cupsHeight); /* Set height */ printf("\033&a0H"); /* Set horizontal position */ printf("\033&a0V"); /* Set vertical position */ printf("\033*r1A"); /* Start graphics */ printf("\033*b3M"); /* Set compression */ /* * Allocate compression buffers... */ CompBuffer = malloc(2 * header->cupsBytesPerLine + 1); LastBuffer = malloc(header->cupsBytesPerLine); LastSet = 0; break; } /* * Allocate memory for a line of graphics... */ Buffer = malloc(header->cupsBytesPerLine); Feed = 0; } /* * 'EndPage()' - Finish a page of graphics. */ void EndPage(ppd_file_t *ppd, /* I - PPD file */ cups_page_header2_t *header) /* I - Page header */ { int val; /* Option value */ ppd_choice_t *choice; /* Marked choice */ switch (ModelNumber) { case DYMO_3x0 : /* * Eject the current page... */ fputs("\033E", stdout); break; case ZEBRA_EPL_LINE : /* * End buffered output, eject the label... */ fputs("\033E\014", stdout); break; case ZEBRA_EPL_PAGE : /* * Print the label... */ puts("P1"); /* * Cut the label as needed... */ if (header->CutMedia) puts("C"); break; case ZEBRA_ZPL : if (Canceled) { /* * Cancel bitmap download... */ puts("~DN"); break; } /* * Start label... */ puts("^XA"); /* * Rotate 180 degrees so that the top of the label/page is at the * leading edge... */ puts("^POI"); /* * Set print width... */ printf("^PW%u\n", header->cupsWidth); /* * Set print rate... */ if ((choice = ppdFindMarkedChoice(ppd, "zePrintRate")) != NULL && strcmp(choice->choice, "Default")) { val = atoi(choice->choice); printf("^PR%d,%d,%d\n", val, val, val); } /* * Put label home in default position (0,0)... */ printf("^LH0,0\n"); /* * Set media tracking... */ if (ppdIsMarked(ppd, "zeMediaTracking", "Continuous")) { /* * Add label length command for continuous... */ printf("^LL%d\n", header->cupsHeight); printf("^MNN\n"); } else if (ppdIsMarked(ppd, "zeMediaTracking", "Web")) printf("^MNY\n"); else if (ppdIsMarked(ppd, "zeMediaTracking", "Mark")) printf("^MNM\n"); /* * Set label top */ if (header->cupsRowStep != 200) printf("^LT%d\n", header->cupsRowStep); /* * Set media type... */ if (!strcmp(header->MediaType, "Thermal")) printf("^MTT\n"); else if (!strcmp(header->MediaType, "Direct")) printf("^MTD\n"); /* * Set print mode... */ if ((choice = ppdFindMarkedChoice(ppd, "zePrintMode")) != NULL && strcmp(choice->choice, "Saved")) { printf("^MM"); if (!strcmp(choice->choice, "Tear")) printf("T,Y\n"); else if (!strcmp(choice->choice, "Peel")) printf("P,Y\n"); else if (!strcmp(choice->choice, "Rewind")) printf("R,Y\n"); else if (!strcmp(choice->choice, "Applicator")) printf("A,Y\n"); else printf("C,Y\n"); } /* * Set tear-off adjust position... */ if (header->AdvanceDistance != 1000) { if ((int)header->AdvanceDistance < 0) printf("~TA%04d\n", (int)header->AdvanceDistance); else printf("~TA%03d\n", (int)header->AdvanceDistance); } /* * Allow for reprinting after an error... */ if (ppdIsMarked(ppd, "zeErrorReprint", "Always")) printf("^JZY\n"); else if (ppdIsMarked(ppd, "zeErrorReprint", "Never")) printf("^JZN\n"); /* * Print multiple copies */ if (header->NumCopies > 1) printf("^PQ%d, 0, 0, N\n", header->NumCopies); /* * Display the label image... */ puts("^FO0,0^XGR:CUPS.GRF,1,1^FS"); /* * End the label and eject... */ puts("^XZ"); puts("^IDR:CUPS.GRF^FS"); /* * Cut the label as needed... */ if (header->CutMedia) puts("^CN1"); break; case ZEBRA_CPCL : /* * Set tear-off adjust position... */ if (header->AdvanceDistance != 1000) printf("PRESENT-AT %d 1\r\n", (int)header->AdvanceDistance); /* * Allow for reprinting after an error... */ if (ppdIsMarked(ppd, "zeErrorReprint", "Always")) puts("ON-OUT-OF-PAPER WAIT\r"); else if (ppdIsMarked(ppd, "zeErrorReprint", "Never")) puts("ON-OUT-OF-PAPER PURGE\r"); /* * Cut label? */ if (header->CutMedia) puts("CUT\r"); /* * Set darkness... */ if (header->cupsCompression > 0) printf("TONE %u\r\n", 2 * header->cupsCompression); /* * Set print rate... */ if ((choice = ppdFindMarkedChoice(ppd, "zePrintRate")) != NULL && strcmp(choice->choice, "Default")) { val = atoi(choice->choice); printf("SPEED %d\r\n", val); } /* * Print the label... */ if ((choice = ppdFindMarkedChoice(ppd, "zeMediaTracking")) == NULL || strcmp(choice->choice, "Continuous")) puts("FORM\r"); puts("PRINT\r"); break; case INTELLITECH_PCL : printf("\033*rB"); /* End GFX */ printf("\014"); /* Eject current page */ break; } fflush(stdout); /* * Free memory... */ free(Buffer); if (CompBuffer) { free(CompBuffer); CompBuffer = NULL; } if (LastBuffer) { free(LastBuffer); LastBuffer = NULL; } } /* * 'CancelJob()' - Cancel the current job... */ void CancelJob(int sig) /* I - Signal */ { /* * Tell the main loop to stop... */ (void)sig; Canceled = 1; } /* * 'OutputLine()' - Output a line of graphics... */ void OutputLine(ppd_file_t *ppd, /* I - PPD file */ cups_page_header2_t *header, /* I - Page header */ unsigned y) /* I - Line number */ { unsigned i; /* Looping var */ unsigned char *ptr; /* Pointer into buffer */ unsigned char *compptr; /* Pointer into compression buffer */ unsigned char repeat_char; /* Repeated character */ unsigned repeat_count; /* Number of repeated characters */ static const unsigned char *hex = (const unsigned char *)"0123456789ABCDEF"; /* Hex digits */ (void)ppd; switch (ModelNumber) { case DYMO_3x0 : /* * See if the line is blank; if not, write it to the printer... */ if (Buffer[0] || memcmp(Buffer, Buffer + 1, header->cupsBytesPerLine - 1)) { if (Feed) { while (Feed > 255) { printf("\033f\001%c", 255); Feed -= 255; } printf("\033f\001%c", Feed); Feed = 0; } putchar(0x16); fwrite(Buffer, header->cupsBytesPerLine, 1, stdout); fflush(stdout); } else Feed ++; break; case ZEBRA_EPL_LINE : printf("\033g%03d", header->cupsBytesPerLine); fwrite(Buffer, 1, header->cupsBytesPerLine, stdout); fflush(stdout); break; case ZEBRA_EPL_PAGE : if (Buffer[0] || memcmp(Buffer, Buffer + 1, header->cupsBytesPerLine)) { printf("GW0,%d,%d,1\n", y, header->cupsBytesPerLine); for (i = header->cupsBytesPerLine, ptr = Buffer; i > 0; i --, ptr ++) putchar(~*ptr); putchar('\n'); fflush(stdout); } break; case ZEBRA_ZPL : /* * Determine if this row is the same as the previous line. * If so, output a ':' and return... */ if (LastSet) { if (!memcmp(Buffer, LastBuffer, header->cupsBytesPerLine)) { putchar(':'); return; } } /* * Convert the line to hex digits... */ for (ptr = Buffer, compptr = CompBuffer, i = header->cupsBytesPerLine; i > 0; i --, ptr ++) { *compptr++ = hex[*ptr >> 4]; *compptr++ = hex[*ptr & 15]; } *compptr = '\0'; /* * Run-length compress the graphics... */ for (compptr = CompBuffer + 1, repeat_char = CompBuffer[0], repeat_count = 1; *compptr; compptr ++) if (*compptr == repeat_char) repeat_count ++; else { ZPLCompress(repeat_char, repeat_count); repeat_char = *compptr; repeat_count = 1; } if (repeat_char == '0') { /* * Handle 0's on the end of the line... */ if (repeat_count & 1) { repeat_count --; putchar('0'); } if (repeat_count > 0) putchar(','); } else ZPLCompress(repeat_char, repeat_count); fflush(stdout); /* * Save this line for the next round... */ memcpy(LastBuffer, Buffer, header->cupsBytesPerLine); LastSet = 1; break; case ZEBRA_CPCL : if (Buffer[0] || memcmp(Buffer, Buffer + 1, header->cupsBytesPerLine)) { printf("CG %u 1 0 %d ", header->cupsBytesPerLine, y); fwrite(Buffer, 1, header->cupsBytesPerLine, stdout); puts("\r"); fflush(stdout); } break; case INTELLITECH_PCL : if (Buffer[0] || memcmp(Buffer, Buffer + 1, header->cupsBytesPerLine - 1)) { if (Feed) { printf("\033*b%dY", Feed); Feed = 0; LastSet = 0; } PCLCompress(Buffer, header->cupsBytesPerLine); } else Feed ++; break; } } /* * 'PCLCompress()' - Output a PCL (mode 3) compressed line. */ void PCLCompress(unsigned char *line, /* I - Line to compress */ unsigned length) /* I - Length of line */ { unsigned char *line_ptr, /* Current byte pointer */ *line_end, /* End-of-line byte pointer */ *comp_ptr, /* Pointer into compression buffer */ *start, /* Start of compression sequence */ *seed; /* Seed buffer pointer */ unsigned count, /* Count of bytes for output */ offset; /* Offset of bytes for output */ /* * Do delta-row compression... */ line_ptr = line; line_end = line + length; comp_ptr = CompBuffer; seed = LastBuffer; while (line_ptr < line_end) { /* * Find the next non-matching sequence... */ start = line_ptr; if (!LastSet) { /* * The seed buffer is invalid, so do the next 8 bytes, max... */ offset = 0; if ((count = (unsigned)(line_end - line_ptr)) > 8) count = 8; line_ptr += count; } else { /* * The seed buffer is valid, so compare against it... */ while (*line_ptr == *seed && line_ptr < line_end) { line_ptr ++; seed ++; } if (line_ptr == line_end) break; offset = (unsigned)(line_ptr - start); /* * Find up to 8 non-matching bytes... */ start = line_ptr; count = 0; while (*line_ptr != *seed && line_ptr < line_end && count < 8) { line_ptr ++; seed ++; count ++; } } /* * Place mode 3 compression data in the buffer; see HP manuals * for details... */ if (offset >= 31) { /* * Output multi-byte offset... */ *comp_ptr++ = (unsigned char)(((count - 1) << 5) | 31); offset -= 31; while (offset >= 255) { *comp_ptr++ = 255; offset -= 255; } *comp_ptr++ = (unsigned char)offset; } else { /* * Output single-byte offset... */ *comp_ptr++ = (unsigned char)(((count - 1) << 5) | offset); } memcpy(comp_ptr, start, count); comp_ptr += count; } /* * Set the length of the data and write it... */ printf("\033*b%dW", (int)(comp_ptr - CompBuffer)); fwrite(CompBuffer, (size_t)(comp_ptr - CompBuffer), 1, stdout); /* * Save this line as a "seed" buffer for the next... */ memcpy(LastBuffer, line, length); LastSet = 1; } /* * 'ZPLCompress()' - Output a run-length compression sequence. */ void ZPLCompress(unsigned char repeat_char, /* I - Character to repeat */ unsigned repeat_count) /* I - Number of repeated characters */ { if (repeat_count > 1) { /* * Print as many z's as possible - they are the largest denomination * representing 400 characters (zC stands for 400 adjacent C's) */ while (repeat_count >= 400) { putchar('z'); repeat_count -= 400; } /* * Then print 'g' through 'y' as multiples of 20 characters... */ if (repeat_count >= 20) { putchar((int)('f' + repeat_count / 20)); repeat_count %= 20; } /* * Finally, print 'G' through 'Y' as 1 through 19 characters... */ if (repeat_count > 0) putchar((int)('F' + repeat_count)); } /* * Then the character to be repeated... */ putchar((int)repeat_char); } /* * 'main()' - Main entry and processing of driver. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int fd; /* File descriptor */ cups_raster_t *ras; /* Raster stream for printing */ cups_page_header2_t header; /* Page header from file */ unsigned y; /* Current line */ ppd_file_t *ppd; /* PPD file */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ /* * Make sure status messages are not buffered... */ setbuf(stderr, NULL); /* * Check command-line... */ if (argc < 6 || argc > 7) { /* * We don't have the correct number of arguments; write an error message * and return. */ _cupsLangPrintFilter(stderr, "ERROR", _("%s job-id user title copies options [file]"), "rastertolabel"); return (1); } /* * Open the page stream... */ if (argc == 7) { if ((fd = open(argv[6], O_RDONLY)) == -1) { _cupsLangPrintError("ERROR", _("Unable to open raster file")); sleep(1); return (1); } } else fd = 0; ras = cupsRasterOpen(fd, CUPS_RASTER_READ); /* * Register a signal handler to eject the current page if the * job is cancelled. */ Canceled = 0; #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */ sigset(SIGTERM, CancelJob); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); action.sa_handler = CancelJob; sigaction(SIGTERM, &action, NULL); #else signal(SIGTERM, CancelJob); #endif /* HAVE_SIGSET */ /* * Open the PPD file and apply options... */ num_options = cupsParseOptions(argv[5], 0, &options); ppd = ppdOpenFile(getenv("PPD")); if (!ppd) { ppd_status_t status; /* PPD error */ int linenum; /* Line number */ _cupsLangPrintFilter(stderr, "ERROR", _("The PPD file could not be opened.")); status = ppdLastError(&linenum); fprintf(stderr, "DEBUG: %s on line %d.\n", ppdErrorString(status), linenum); return (1); } ppdMarkDefaults(ppd); cupsMarkOptions(ppd, num_options, options); /* * Initialize the print device... */ Setup(ppd); /* * Process pages as needed... */ Page = 0; while (cupsRasterReadHeader2(ras, &header)) { /* * Write a status message with the page number and number of copies. */ if (Canceled) break; Page ++; fprintf(stderr, "PAGE: %d 1\n", Page); _cupsLangPrintFilter(stderr, "INFO", _("Starting page %d."), Page); /* * Start the page... */ StartPage(ppd, &header); /* * Loop for each line on the page... */ for (y = 0; y < header.cupsHeight && !Canceled; y ++) { /* * Let the user know how far we have progressed... */ if (Canceled) break; if ((y & 15) == 0) { _cupsLangPrintFilter(stderr, "INFO", _("Printing page %d, %u%% complete."), Page, 100 * y / header.cupsHeight); fprintf(stderr, "ATTR: job-media-progress=%u\n", 100 * y / header.cupsHeight); } /* * Read a line of graphics... */ if (cupsRasterReadPixels(ras, Buffer, header.cupsBytesPerLine) < 1) break; /* * Write it to the printer... */ OutputLine(ppd, &header, y); } /* * Eject the page... */ _cupsLangPrintFilter(stderr, "INFO", _("Finished page %d."), Page); EndPage(ppd, &header); if (Canceled) break; } /* * Close the raster stream... */ cupsRasterClose(ras); if (fd != 0) close(fd); /* * Close the PPD file and free the options... */ ppdClose(ppd); cupsFreeOptions(num_options, options); /* * If no pages were printed, send an error message... */ if (Page == 0) { _cupsLangPrintFilter(stderr, "ERROR", _("No pages were found.")); return (1); } else return (0); } cups-2.2.7/filter/rastertopwg.c000664 000765 000024 00000041256 13255074424 017175 0ustar00msweetstaff000000 000000 /* * CUPS raster to PWG raster format filter for CUPS. * * Copyright 2011, 2014-2017 Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include #include #include #include /* * 'main()' - Main entry for filter. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { const char *final_content_type; /* FINAL_CONTENT_TYPE env var */ int fd; /* Raster file */ cups_raster_t *inras, /* Input raster stream */ *outras; /* Output raster stream */ cups_page_header2_t inheader, /* Input raster page header */ outheader; /* Output raster page header */ unsigned y; /* Current line */ unsigned char *line; /* Line buffer */ unsigned page = 0, /* Current page */ page_width, /* Actual page width */ page_height, /* Actual page height */ page_top, /* Top margin */ page_bottom, /* Bottom margin */ page_left, /* Left margin */ linesize, /* Bytes per line */ lineoffset; /* Offset into line */ unsigned char white; /* White pixel */ ppd_file_t *ppd; /* PPD file */ ppd_attr_t *back; /* cupsBackSide attribute */ _ppd_cache_t *cache; /* PPD cache */ pwg_size_t *pwg_size; /* PWG media size */ pwg_media_t *pwg_media; /* PWG media name */ int num_options; /* Number of options */ cups_option_t *options = NULL;/* Options */ const char *val; /* Option value */ if (argc < 6 || argc > 7) { puts("Usage: rastertopwg job user title copies options [filename]"); return (1); } else if (argc == 7) { if ((fd = open(argv[6], O_RDONLY)) < 0) { perror("ERROR: Unable to open print file"); return (1); } } else fd = 0; if ((final_content_type = getenv("FINAL_CONTENT_TYPE")) == NULL) final_content_type = "image/pwg-raster"; inras = cupsRasterOpen(fd, CUPS_RASTER_READ); outras = cupsRasterOpen(1, !strcmp(final_content_type, "image/pwg-raster") ? CUPS_RASTER_WRITE_PWG : CUPS_RASTER_WRITE_APPLE); ppd = ppdOpenFile(getenv("PPD")); back = ppdFindAttr(ppd, "cupsBackSide", NULL); num_options = cupsParseOptions(argv[5], 0, &options); ppdMarkDefaults(ppd); cupsMarkOptions(ppd, num_options, options); cache = ppd ? ppd->cache : NULL; while (cupsRasterReadHeader2(inras, &inheader)) { /* * Show page device dictionary... */ fprintf(stderr, "DEBUG: Duplex = %d\n", inheader.Duplex); fprintf(stderr, "DEBUG: HWResolution = [ %d %d ]\n", inheader.HWResolution[0], inheader.HWResolution[1]); fprintf(stderr, "DEBUG: ImagingBoundingBox = [ %d %d %d %d ]\n", inheader.ImagingBoundingBox[0], inheader.ImagingBoundingBox[1], inheader.ImagingBoundingBox[2], inheader.ImagingBoundingBox[3]); fprintf(stderr, "DEBUG: Margins = [ %d %d ]\n", inheader.Margins[0], inheader.Margins[1]); fprintf(stderr, "DEBUG: ManualFeed = %d\n", inheader.ManualFeed); fprintf(stderr, "DEBUG: MediaPosition = %d\n", inheader.MediaPosition); fprintf(stderr, "DEBUG: NumCopies = %d\n", inheader.NumCopies); fprintf(stderr, "DEBUG: Orientation = %d\n", inheader.Orientation); fprintf(stderr, "DEBUG: PageSize = [ %d %d ]\n", inheader.PageSize[0], inheader.PageSize[1]); fprintf(stderr, "DEBUG: cupsWidth = %d\n", inheader.cupsWidth); fprintf(stderr, "DEBUG: cupsHeight = %d\n", inheader.cupsHeight); fprintf(stderr, "DEBUG: cupsMediaType = %d\n", inheader.cupsMediaType); fprintf(stderr, "DEBUG: cupsBitsPerColor = %d\n", inheader.cupsBitsPerColor); fprintf(stderr, "DEBUG: cupsBitsPerPixel = %d\n", inheader.cupsBitsPerPixel); fprintf(stderr, "DEBUG: cupsBytesPerLine = %d\n", inheader.cupsBytesPerLine); fprintf(stderr, "DEBUG: cupsColorOrder = %d\n", inheader.cupsColorOrder); fprintf(stderr, "DEBUG: cupsColorSpace = %d\n", inheader.cupsColorSpace); fprintf(stderr, "DEBUG: cupsCompression = %d\n", inheader.cupsCompression); /* * Compute the real raster size... */ page ++; fprintf(stderr, "PAGE: %d %d\n", page, inheader.NumCopies); page_width = (unsigned)(inheader.cupsPageSize[0] * inheader.HWResolution[0] / 72.0); page_height = (unsigned)(inheader.cupsPageSize[1] * inheader.HWResolution[1] / 72.0); page_left = (unsigned)(inheader.cupsImagingBBox[0] * inheader.HWResolution[0] / 72.0); page_bottom = (unsigned)(inheader.cupsImagingBBox[1] * inheader.HWResolution[1] / 72.0); page_top = page_height - page_bottom - inheader.cupsHeight; linesize = (page_width * inheader.cupsBitsPerPixel + 7) / 8; lineoffset = page_left * inheader.cupsBitsPerPixel / 8; /* Round down */ if (page_left > page_width || page_top > page_height || page_bottom > page_height) { _cupsLangPrintFilter(stderr, "ERROR", _("Unsupported raster data.")); fprintf(stderr, "DEBUG: Bad bottom/left/top margin on page %d.\n", page); return (1); } switch (inheader.cupsColorSpace) { case CUPS_CSPACE_W : case CUPS_CSPACE_RGB : case CUPS_CSPACE_SW : case CUPS_CSPACE_SRGB : case CUPS_CSPACE_ADOBERGB : white = 255; break; case CUPS_CSPACE_K : case CUPS_CSPACE_CMYK : case CUPS_CSPACE_DEVICE1 : case CUPS_CSPACE_DEVICE2 : case CUPS_CSPACE_DEVICE3 : case CUPS_CSPACE_DEVICE4 : case CUPS_CSPACE_DEVICE5 : case CUPS_CSPACE_DEVICE6 : case CUPS_CSPACE_DEVICE7 : case CUPS_CSPACE_DEVICE8 : case CUPS_CSPACE_DEVICE9 : case CUPS_CSPACE_DEVICEA : case CUPS_CSPACE_DEVICEB : case CUPS_CSPACE_DEVICEC : case CUPS_CSPACE_DEVICED : case CUPS_CSPACE_DEVICEE : case CUPS_CSPACE_DEVICEF : white = 0; break; default : _cupsLangPrintFilter(stderr, "ERROR", _("Unsupported raster data.")); fprintf(stderr, "DEBUG: Unsupported cupsColorSpace %d on page %d.\n", inheader.cupsColorSpace, page); return (1); } if (inheader.cupsColorOrder != CUPS_ORDER_CHUNKED) { _cupsLangPrintFilter(stderr, "ERROR", _("Unsupported raster data.")); fprintf(stderr, "DEBUG: Unsupported cupsColorOrder %d on page %d.\n", inheader.cupsColorOrder, page); return (1); } if (inheader.cupsBitsPerPixel != 1 && inheader.cupsBitsPerColor != 8 && inheader.cupsBitsPerColor != 16) { _cupsLangPrintFilter(stderr, "ERROR", _("Unsupported raster data.")); fprintf(stderr, "DEBUG: Unsupported cupsBitsPerColor %d on page %d.\n", inheader.cupsBitsPerColor, page); return (1); } memcpy(&outheader, &inheader, sizeof(outheader)); outheader.cupsWidth = page_width; outheader.cupsHeight = page_height; outheader.cupsBytesPerLine = linesize; outheader.cupsInteger[14] = 0; /* VendorIdentifier */ outheader.cupsInteger[15] = 0; /* VendorLength */ if ((val = cupsGetOption("print-content-optimize", num_options, options)) != NULL) { if (!strcmp(val, "automatic")) strlcpy(outheader.OutputType, "Automatic", sizeof(outheader.OutputType)); else if (!strcmp(val, "graphics")) strlcpy(outheader.OutputType, "Graphics", sizeof(outheader.OutputType)); else if (!strcmp(val, "photo")) strlcpy(outheader.OutputType, "Photo", sizeof(outheader.OutputType)); else if (!strcmp(val, "text")) strlcpy(outheader.OutputType, "Text", sizeof(outheader.OutputType)); else if (!strcmp(val, "text-and-graphics")) strlcpy(outheader.OutputType, "TextAndGraphics", sizeof(outheader.OutputType)); else { fputs("DEBUG: Unsupported print-content-optimize value.\n", stderr); outheader.OutputType[0] = '\0'; } } if ((val = cupsGetOption("print-quality", num_options, options)) != NULL) { unsigned quality = (unsigned)atoi(val); /* print-quality value */ if (quality >= IPP_QUALITY_DRAFT && quality <= IPP_QUALITY_HIGH) outheader.cupsInteger[8] = quality; else { fprintf(stderr, "DEBUG: Unsupported print-quality %d.\n", quality); outheader.cupsInteger[8] = 0; } } if ((val = cupsGetOption("print-rendering-intent", num_options, options)) != NULL) { if (!strcmp(val, "absolute")) strlcpy(outheader.cupsRenderingIntent, "Absolute", sizeof(outheader.cupsRenderingIntent)); else if (!strcmp(val, "automatic")) strlcpy(outheader.cupsRenderingIntent, "Automatic", sizeof(outheader.cupsRenderingIntent)); else if (!strcmp(val, "perceptual")) strlcpy(outheader.cupsRenderingIntent, "Perceptual", sizeof(outheader.cupsRenderingIntent)); else if (!strcmp(val, "relative")) strlcpy(outheader.cupsRenderingIntent, "Relative", sizeof(outheader.cupsRenderingIntent)); else if (!strcmp(val, "relative-bpc")) strlcpy(outheader.cupsRenderingIntent, "RelativeBpc", sizeof(outheader.cupsRenderingIntent)); else if (!strcmp(val, "saturation")) strlcpy(outheader.cupsRenderingIntent, "Saturation", sizeof(outheader.cupsRenderingIntent)); else { fputs("DEBUG: Unsupported print-rendering-intent value.\n", stderr); outheader.cupsRenderingIntent[0] = '\0'; } } if (inheader.cupsPageSizeName[0] && (pwg_size = _ppdCacheGetSize(cache, inheader.cupsPageSizeName)) != NULL) { strlcpy(outheader.cupsPageSizeName, pwg_size->map.pwg, sizeof(outheader.cupsPageSizeName)); } else { pwg_media = pwgMediaForSize((int)(2540.0 * inheader.cupsPageSize[0] / 72.0), (int)(2540.0 * inheader.cupsPageSize[1] / 72.0)); if (pwg_media) strlcpy(outheader.cupsPageSizeName, pwg_media->pwg, sizeof(outheader.cupsPageSizeName)); else { fprintf(stderr, "DEBUG: Unsupported PageSize %.2fx%.2f.\n", inheader.cupsPageSize[0], inheader.cupsPageSize[1]); outheader.cupsPageSizeName[0] = '\0'; } } if (inheader.Duplex && !(page & 1) && back && _cups_strcasecmp(back->value, "Normal")) { if (_cups_strcasecmp(back->value, "Flipped")) { if (inheader.Tumble) { outheader.cupsInteger[1] = ~0U;/* CrossFeedTransform */ outheader.cupsInteger[2] = 1; /* FeedTransform */ outheader.cupsInteger[3] = page_width - page_left - inheader.cupsWidth; /* ImageBoxLeft */ outheader.cupsInteger[4] = page_top; /* ImageBoxTop */ outheader.cupsInteger[5] = page_width - page_left; /* ImageBoxRight */ outheader.cupsInteger[6] = page_height - page_bottom; /* ImageBoxBottom */ } else { outheader.cupsInteger[1] = 1; /* CrossFeedTransform */ outheader.cupsInteger[2] = ~0U;/* FeedTransform */ outheader.cupsInteger[3] = page_left; /* ImageBoxLeft */ outheader.cupsInteger[4] = page_bottom; /* ImageBoxTop */ outheader.cupsInteger[5] = page_left + inheader.cupsWidth; /* ImageBoxRight */ outheader.cupsInteger[6] = page_height - page_top; /* ImageBoxBottom */ } } else if (_cups_strcasecmp(back->value, "ManualTumble")) { if (inheader.Tumble) { outheader.cupsInteger[1] = ~0U;/* CrossFeedTransform */ outheader.cupsInteger[2] = ~0U;/* FeedTransform */ outheader.cupsInteger[3] = page_width - page_left - inheader.cupsWidth; /* ImageBoxLeft */ outheader.cupsInteger[4] = page_bottom; /* ImageBoxTop */ outheader.cupsInteger[5] = page_width - page_left; /* ImageBoxRight */ outheader.cupsInteger[6] = page_height - page_top; /* ImageBoxBottom */ } else { outheader.cupsInteger[1] = 1; /* CrossFeedTransform */ outheader.cupsInteger[2] = 1; /* FeedTransform */ outheader.cupsInteger[3] = page_left; /* ImageBoxLeft */ outheader.cupsInteger[4] = page_top; /* ImageBoxTop */ outheader.cupsInteger[5] = page_left + inheader.cupsWidth; /* ImageBoxRight */ outheader.cupsInteger[6] = page_height - page_bottom; /* ImageBoxBottom */ } } else if (_cups_strcasecmp(back->value, "Rotated")) { if (inheader.Tumble) { outheader.cupsInteger[1] = ~0U;/* CrossFeedTransform */ outheader.cupsInteger[2] = ~0U;/* FeedTransform */ outheader.cupsInteger[3] = page_width - page_left - inheader.cupsWidth; /* ImageBoxLeft */ outheader.cupsInteger[4] = page_bottom; /* ImageBoxTop */ outheader.cupsInteger[5] = page_width - page_left; /* ImageBoxRight */ outheader.cupsInteger[6] = page_height - page_top; /* ImageBoxBottom */ } else { outheader.cupsInteger[1] = 1; /* CrossFeedTransform */ outheader.cupsInteger[2] = 1; /* FeedTransform */ outheader.cupsInteger[3] = page_left; /* ImageBoxLeft */ outheader.cupsInteger[4] = page_top; /* ImageBoxTop */ outheader.cupsInteger[5] = page_left + inheader.cupsWidth; /* ImageBoxRight */ outheader.cupsInteger[6] = page_height - page_bottom; /* ImageBoxBottom */ } } else { /* * Unsupported value... */ fputs("DEBUG: Unsupported cupsBackSide value.\n", stderr); outheader.cupsInteger[1] = 1; /* CrossFeedTransform */ outheader.cupsInteger[2] = 1; /* FeedTransform */ outheader.cupsInteger[3] = page_left; /* ImageBoxLeft */ outheader.cupsInteger[4] = page_top; /* ImageBoxTop */ outheader.cupsInteger[5] = page_left + inheader.cupsWidth; /* ImageBoxRight */ outheader.cupsInteger[6] = page_height - page_bottom; /* ImageBoxBottom */ } } else { outheader.cupsInteger[1] = 1; /* CrossFeedTransform */ outheader.cupsInteger[2] = 1; /* FeedTransform */ outheader.cupsInteger[3] = page_left; /* ImageBoxLeft */ outheader.cupsInteger[4] = page_top; /* ImageBoxTop */ outheader.cupsInteger[5] = page_left + inheader.cupsWidth; /* ImageBoxRight */ outheader.cupsInteger[6] = page_height - page_bottom; /* ImageBoxBottom */ } if (!cupsRasterWriteHeader2(outras, &outheader)) { _cupsLangPrintFilter(stderr, "ERROR", _("Error sending raster data.")); fprintf(stderr, "DEBUG: Unable to write header for page %d.\n", page); return (1); } /* * Copy raster data... */ if (linesize < inheader.cupsBytesPerLine) linesize = inheader.cupsBytesPerLine; if ((lineoffset + inheader.cupsBytesPerLine) > linesize) lineoffset = linesize - inheader.cupsBytesPerLine; line = malloc(linesize); memset(line, white, linesize); for (y = page_top; y > 0; y --) if (!cupsRasterWritePixels(outras, line, outheader.cupsBytesPerLine)) { _cupsLangPrintFilter(stderr, "ERROR", _("Error sending raster data.")); fprintf(stderr, "DEBUG: Unable to write line %d for page %d.\n", page_top - y + 1, page); return (1); } for (y = inheader.cupsHeight; y > 0; y --) { if (cupsRasterReadPixels(inras, line + lineoffset, inheader.cupsBytesPerLine) != inheader.cupsBytesPerLine) { _cupsLangPrintFilter(stderr, "ERROR", _("Error reading raster data.")); fprintf(stderr, "DEBUG: Unable to read line %d for page %d.\n", inheader.cupsHeight - y + page_top + 1, page); return (1); } if (!cupsRasterWritePixels(outras, line, outheader.cupsBytesPerLine)) { _cupsLangPrintFilter(stderr, "ERROR", _("Error sending raster data.")); fprintf(stderr, "DEBUG: Unable to write line %d for page %d.\n", inheader.cupsHeight - y + page_top + 1, page); return (1); } } memset(line, white, linesize); for (y = page_bottom; y > 0; y --) if (!cupsRasterWritePixels(outras, line, outheader.cupsBytesPerLine)) { _cupsLangPrintFilter(stderr, "ERROR", _("Error sending raster data.")); fprintf(stderr, "DEBUG: Unable to write line %d for page %d.\n", page_bottom - y + page_top + inheader.cupsHeight + 1, page); return (1); } free(line); } cupsRasterClose(inras); if (fd) close(fd); cupsRasterClose(outras); return (0); } cups-2.2.7/filter/spec-ppd.header000664 000765 000024 00000003102 13255074424 017321 0ustar00msweetstaff000000 000000

    CUPS PPD Extensions

    This specification describes the attributes and extensions that CUPS adds to Adobe TechNote #5003: PostScript Printer Description File Format Specification Version 4.3. PostScript Printer Description ("PPD") files describe the capabilities of each printer and are used by CUPS to support printer-specific features and intelligent filtering.

    cups-2.2.7/filter/spec-ppd.shtml000664 000765 000024 00000224762 13255074424 017241 0ustar00msweetstaff000000 000000

    PPD File Syntax

    The PPD format is text-based and uses lines of up to 255 characters terminated by a carriage return, linefeed, or combination of carriage return and line feed. The following ABNF definition [RFC5234] defines the general format of lines in a PPD file:

    PPD-FILE = HEADER +(DATA / COMMENT / LINE-END)
    
    HEADER   = "*PPD-Adobe:" *WSP DQUOTE VERSION DQUOTE LINE-END
    
    VERSION  = "4.0" / "4.1" / "4.2" / "4.3"
    
    COMMENT  = "*%" *TCHAR LINE-END
    
    DATA     = "*" 1*KCHAR [ WSP 1*KCHAR [ "/" 1*TCHAR ] ] ":"
               1*(*WSP VALUE) LINE-END
    
    VALUE    = 1*TCHAR / DQUOTE 1*SCHAR DQUOTE
    
    KCHAR    = ALPHA / DIGIT / "_" / "." / "-"
    
    SCHAR    = LINE-END / WSP / %x21.23-7E.A0-FF
    
    TCHAR    = %x20-7E.A0-FF
    
    LINE-END = CR / LF / CR LF
    

    Auto-Configuration

    CUPS supports several methods of auto-configuration via PPD keywords.

    macOS 10.5APAutoSetupTool

    *APAutoSetupTool: "/LibraryPrinters/vendor/filename"

    This macOS keyword defines a program that sets the default option choices. It is run when a printer is added from the Add Printer window or the Nearby Printers list in the Print dialog.

    The program is provided with two arguments: the printer's device URI and the PPD file to be used for the printer. The program must write an updated PPD file to stdout.

    Examples:

    *% Use our setup tool when adding a printer
    *APAutoSetupTool: "/Library/Printers/vendor/Tools/autosetuptool"
    

    macOS 10.2/CUPS 1.4?MainKeyword

    *?MainKeyword: "
    PostScript query code that writes a message using the = operator...
    "
    *End

    The ?MainKeyword keyword defines PostScript code that determines the currently selected/enabled option keyword (choice) for the main keyword (option). It is typically used when communicating with USB, serial, Appletalk, and AppSocket (port 9100) printers.

    The PostScript code typically sends its response back using the = operator.

    Example:

    *OpenUI OptionDuplex/Duplexer Installed: Boolean
    *DuplexOptionDuplex: False
    *OptionDuplex False/Not Installed: ""
    *OptionDuplex True/Installed: ""
    
    *% Query the printer for the presence of the duplexer option...
    *?OptionDuplex: "
      currentpagedevice /Duplex known
      {(True)} {(False)} ifelse
      = flush
    "
    *End
    *CloseUI: OptionDuplex
    

    macOS 10.4/CUPS 1.5OIDMainKeyword

    *?OIDMainKeyword: ".n.n.n..."
    *OIDMainKeyword OptionKeyword1: "value"
    ...
    *OIDMainKeyword OptionKeywordN: "value"

    The OIDMainKeyword keyword is used to define SNMP OIDs that map to installable options. The first (query) line defines the OID to lookup on the network device. The second and subsequent keywords define a mapping from OID value to option keyword. Since SNMP is an IP-based network protocol, this method is typically only used to configure AppSocket, IPP, and LPD network printers.

    Examples:

    *% Get the installed memory on the printer...
    *?OIDInstalledMemory: ".1.3.6.1.2.1.25.2.2.0"
    *OIDInstalledMemory 16MB: "16384 KBytes"
    *OIDInstalledMemory 32MB: "32768 KBytes"
    *OIDInstalledMemory 48MB: "49152 KBytes"
    *OIDInstalledMemory 72MB: "73728 KBytes"
    

    Color Profiles

    CUPS supports three types of color profiles. The first type is based on sRGB and is used by the standard CUPS raster filters and GPL Ghostscript. The second type is based on ICC profiles and is used by the Quartz-based filters on macOS. The final type is based on well-known colorspaces such as sRGB and Adobe RGB.

    Note:

    At this time, none of the CUPS raster filters support ICC profiles. This will be addressed as time and resources permit.

    DeprecatedcupsColorProfile

    *cupsColorProfile Resolution/MediaType: "density gamma m00 m01 m02 m10 m11 m12 m20 m21 m22"

    This string keyword specifies an sRGB-based color profile consisting of gamma and density controls and a 3x3 CMY color transform matrix. This keyword is not supported on macOS.

    The Resolution and MediaType values may be "-" to act as a wildcard. Otherwise they must match one of the Resolution or MediaType option keywords defined in the PPD file.

    The density and gamma values define gamma and density adjustment function such that:

    f(x) = density * x gamma
    

    The m00 through m22 values define a 3x3 transformation matrix for the CMY color values. The density function is applied after the CMY transformation:

    | m00 m01 m02 |
    | m10 m11 m12 |
    | m20 m21 m22 |
    

    Examples:

    *% Specify a profile for printing at 360dpi on all media types
    *cupsColorProfile 360dpi/-: "1.0 1.5 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
    
    *% Specify a profile for printing at 720dpi on Glossy media
    *cupsColorProfile 720dpi/Glossy: "1.0 2.5 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
    
    *% Specify a default profile for printing at all other resolutions and media types
    *cupsColorProfile -/-: "0.9 2.0 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
    

    macOS 10.3/CUPS 1.2cupsICCProfile

    *cupsICCProfile ColorModel.MediaType.Resolution/Description: "filename"

    This keyword specifies an ICC color profile that is used to convert the document colors to the device colorspace. The ColorModel, MediaType, and Resolution option keywords specify a selector for color profiles. If omitted, the color profile will match any option keyword for the corresponding main keyword.

    The Description specifies human-readable text that is associated with the color profile. The filename portion specifies the ICC color profile to use; if the filename is not absolute, it is loaded relative to the /usr/share/cups/profiles directory.

    Examples:

    *% Specify a profile for CMYK printing at 360dpi on all media types
    *cupsICCProfile CMYK..360dpi/360dpi CMYK: "/Library/Printers/vendor/Profiles/foo-360-cmyk.icc"
    
    *% Specify a profile for RGB printing at 720dpi on Glossy media
    *cupsColorProfile RGB.Glossy.720dpi/720dpi Glossy: "/Library/Printers/vendor/Profiles/foo-720-glossy-rgb.icc"
    
    *% Specify a default profile for printing at all other resolutions and media types
    *cupsICCProfile ../Default: "/Library/Printers/vendor/Profiles/foo-default.icc"
    

    Customizing the Profile Selection Keywords

    The ColorModel, MediaType, and Resolution main keywords can be reassigned to different main keywords, allowing drivers to do color profile selection based on different parameters. The cupsICCQualifier1, cupsICCQualifier2, and cupsICCQualifier3 keywords define the mapping from selector to main keyword:

    *cupsICCQualifier1: MainKeyword1
    *cupsICCQualifier2: MainKeyword2
    *cupsICCQualifier3: MainKeyword3
    

    The default mapping is as follows:

    *cupsICCQualifier1: ColorModel
    *cupsICCQualifier2: MediaType
    *cupsICCQualifier3: Resolution
    

    macOS 10.4Custom Color Matching Support

    *APSupportsCustomColorMatching: true
    *APCustomColorMatchingName name/text: ""
    *APCustomColorMatchingProfile: profile
    *APDefaultCustomColorMatchingProfile: profile

    These keywords tell the macOS raster filters that the printer driver provides its own custom color matching and that generic color profiles should be used when generating 1-, 3-, and 4-component raster data as requested by the driver. The APCustomColorMatchingProfile and APDefaultColorMatchingProfile keywords specify alternate color profiles (sRGB or AdobeRGB) to use for 3-color (RGB) raster data.

    Note:

    Prior to macOS 10.6, the default RGB color space was Apple's "GenericRGB". The new default in macOS 10.6 and later is "sRGB". For more information, see "macOS v10.6: About gamma 2.2" on Apple's support site.

    macOS 10.5APCustomColorMatchingName

    *APCustomColorMatchingName name/text: ""

    This keyword defines an alternate name for the color matching provided by a driver in the Color Matching print panel. The default is to use the name "Vendor Matching" or its localized equivalent.

    Examples:

    *% Define the names for our color matching...
    *APCustomColorMatchingName name/AcmeColor(tm): ""
    *fr.APCustomColorMatchingName name/La AcmeColor(tm): ""
    

    macOS 10.5APCustomColorMatchingProfile

    *APCustomColorMatchingProfile: name

    This keyword defines a supported RGB color profile that can be used when doing custom color matching. Currently only sRGB, AdobeRGB, and GenericRGB are supported. If not specified, RGB data will use the GenericRGB colorspace.

    Note:

    If you provide multiple APCustomColorMatchingProfile keywords, you are responsible for providing the necessary user interface controls to select the profile in a print dialog pane. Add the named profile to the print settings using the key kPMCustomColorMatchingProfileKey.

    Examples:

    *% Use sRGB for RGB color by default, but support both sRGB and AdobeRGB
    *APSupportsCustomColorMatching: true
    *APDefaultCustomColorMatchingProfile: sRGB
    *APCustomColorMatchingProfile: sRGB
    *APCustomColorMatchingProfile: AdobeRGB
    

    macOS 10.5APDefaultCustomColorMatchingProfile

    *APDefaultCustomColorMatchingProfile: name

    This keyword defines the default RGB color profile that will be used when doing custom color matching. Currently only sRGB, AdobeRGB, and GenericRGB are supported.

    Examples:

    *% Use sRGB for RGB color by default
    *APSupportsCustomColorMatching: true
    *APDefaultCustomColorMatchingProfile: sRGB
    

    macOS 10.4APSupportsCustomColorMatching

    *APSupportsCustomColorMatching: boolean

    This keyword specifies that the driver provides its own custom color matching. When true, the default hand-off colorspace will be GenericGray, GenericRGB, or GenericCMYK depending on the number of components the driver requests. The APDefaultCustomColorMatchingProfile keyword can be used to override the default 3-component (RGB) colorspace.

    The default for APSupportsCustomColorMatching is false.

    Examples:

    *APSupportsCustomColorMatching: true
    *APDefaultCustomColorMatchingProfile: sRGB
    

    Constraints

    Constraints are option choices that are not allowed by the driver or device, for example printing 2-sided transparencies. All versions of CUPS support constraints defined by the legacy Adobe UIConstraints and NonUIConstraints keywords which support conflicts between any two option choices, for example:

    *% Do not allow 2-sided printing on transparency media
    *UIConstraints: "*Duplex *MediaType Transparency"
    *UIConstraints: "*MediaType Transparency *Duplex"
    

    While nearly all constraints can be expressed using these keywords, there are valid scenarios requiring constraints between more than two option choices. In addition, resolution of constraints is problematic since users and software have to guess how a particular constraint is best resolved.

    CUPS 1.4 and higher define two new keywords for constraints, cupsUIConstraints and cupsUIResolver. Each cupsUIConstraints keyword points to a cupsUIResolver keyword which specifies alternate options that resolve the conflict condition. The same cupsUIResolver can be used by multiple cupsUIConstraints.

    Note:

    When developing PPD files that contain constraints, it is very important to use the cupstestppd(1) program to verify that your constraints are accurate and cannot result in unresolvable option selections.

    CUPS 1.4/macOS 10.6cupsUIConstraints

    *cupsUIConstraints resolver: "*Keyword1 *Keyword2 ..."
    *cupsUIConstraints resolver: "*Keyword1 OptionKeyword1 *Keyword2 ..."
    *cupsUIConstraints resolver: "*Keyword1 *Keyword2 OptionKeyword2 ..."
    *cupsUIConstraints resolver: "*Keyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."
    *cupsUIConstraints: "*InstallableKeyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."

    Lists two or more options which conflict. The "resolver" string is a (possibly unique) keyword which specifies which options to change when the constraint exists. When no resolver is provided, CUPS first tries the default choice followed by testing each option choice to resolve the conflict.

    Examples:

    *% Specify that 2-sided printing cannot happen on transparencies
    *cupsUIConstraints transparency: "*Duplex *MediaType Transparency"
    
    *% Specify that envelope printing cannot happen from the paper trays
    *cupsUIConstraints envelope: "*PageSize Env10 *InputSlot Tray1"
    *cupsUIConstraints envelope: "*PageSize Env10 *InputSlot Tray1"
    *cupsUIConstraints envelope: "*PageSize EnvDL *InputSlot Tray2"
    *cupsUIConstraints envelope: "*PageSize EnvDL *InputSlot Tray2"
    
    *% Specify an installable option constraint for the envelope feeder
    *cupsUIConstraints: "*InputSlot EnvFeeder *InstalledEnvFeeder"
    
    *% Specify that photo printing cannot happen on plain paper or transparencies at 1200dpi
    *cupsUIConstraints photo: "*OutputMode Photo *MediaType Plain *Resolution 1200dpi"
    *cupsUIConstraints photo: "*OutputMode Photo *MediaType Transparency *Resolution 1200dpi"
    

    CUPS 1.4/macOS 10.6cupsUIResolver

    *cupsUIResolver resolver: "*Keyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."

    Specifies two or more options to mark/select to resolve a constraint. The "resolver" string identifies a particular action to take for one or more cupsUIConstraints. The same action can be used for multiple constraints. The option keyword pairs are treated as an ordered list of option selections to try - only the first N selections will be used, where N is the minimum number of selections required. Because cupsResolveConflicts() will not change the most recent option selection passed to it, at least two options from the constraints must be listed to avoid situations where conflicts cannot be resolved.

    Examples:

    *% Specify the options to change for the 2-sided transparency constraint
    *cupsUIResolver transparency: "*Duplex None *MediaType Plain"
    
    *% Specify the options to change for the envelope printing constraints.  Notice
    *% that we try to change the InputSlot to either the envelope feeder or the
    *% manual feed first, then we change the page size...
    *cupsUIResolver envelope: "*InputSlot EnvFeeder *InputSlot ManualFeed *PageSize Letter"
    
    *% Specify the options to change for the photo printing constraints
    *cupsUIResolver photo: "*OutputMode Best *Resolution 600dpi"
    

    Globalized PPD Support

    CUPS 1.2 and higher adds support for PPD files containing multiple languages by following the following additional rules:

    1. The LanguageVersion MUST be English
    2. The LanguageEncoding MUST be ISOLatin1
    3. The cupsLanguages keyword MUST be provided and list each of the supported locales in the PPD file
    4. Main and option keywords MUST NOT exceed 34 (instead of 40) characters to allow room for the locale prefixes in translation keywords
    5. The main keyword "Translation" MUST NOT be used
    6. Translation strings included with the main and option keywords MUST NOT contain characters outside the ASCII subset of ISOLatin1 and UTF-8; developers wishing to use characters outside ASCII MUST provide a separate set of English localization keywords for the affected keywords.
    7. Localizations are specified using a locale prefix of the form "ll" or "ll_CC." where "ll" is the 2-letter ISO language code and "CC" is the 2-letter ISO country code
      • A generic language translation ("ll") SHOULD be provided with country-specific differences ("ll_CC") provided only as needed
      • For historical reasons, the "zh" and "zh_CN" locales map to Simplified Chinese while the "zh_TW" locale maps to Traditional Chinese
    8. Locale-specific translation strings MUST be encoded using UTF-8.
    9. Main keywords MUST be localized using one of the following forms:

      *ll.Translation MainKeyword/translation text: ""
      *ll_CC.Translation MainKeyword/translation text: ""

    10. Option keywords MUST be localized using one of the following forms:

      *ll.MainKeyword OptionKeyword/translation text: ""
      *ll_CC.MainKeyword OptionKeyword/translation text: ""

    11. Localization keywords MAY appear anywhere after the first line of the PPD file
    Note:

    We use a LanguageEncoding value of ISOLatin1 and limit the allowed base translation strings to ASCII to avoid character coding issues that would otherwise occur. In addition, requiring the base translation strings to be in English allows for easier fallback translation when no localization is provided in the PPD file for a given locale.

    Examples:

    *LanguageVersion: English
    *LanguageEncoding: ISOLatin1
    *cupsLanguages: "de fr_CA"
    *ModelName: "Foobar Laser 9999"
    
    *% Localize ModelName for French and German
    *fr_CA.Translation ModelName/La Foobar Laser 9999: ""
    *de.Translation ModelName/Foobar LaserDrucken 9999: ""
    
    *cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html"
    *% Localize printer-state-reason for French and German
    *fr_CA.cupsIPPReason com.vendor-error/Une erreur sèrieuse s'est produite: "/help/com.vendor/error.html"
    *de.cupsIPPReason com.vendor-error/Eine ernste Störung trat: "/help/com.vendor/error.html"
    
    ...
    
    *OpenUI *InputSlot/Paper Source: PickOne
    *OrderDependency: 10 AnySetup *InputSlot
    *DefaultInputSlot: Auto
    *% Localize InputSlot for French and German
    *fr_CA.Translation InputSlot/Papier source: ""
    *de.Translation InputSlot/Papiereinzug: ""
    *InputSlot Auto/Default: "<</ManualFeed false>>setpagedevice"
    *% Localize InputSlot=Auto for French and German
    *fr_CA.InputSlot Auto/Par Defaut: ""
    *de.InputSlot Auto/Standard: ""
    *InputSlot Manual/Manual Feed: "<</ManualFeed true>>setpagedevice"
    *% Localize InputSlot=Manual for French and German
    *fr_CA.InputSlot Manual/Manuel mecanisme de alimentation: ""
    *de.InputSlot Manual/Manueller Einzug: ""
    *CloseUI: *InputSlot
    

    CUPS 1.3/macOS 10.6Custom Options

    CUPS supports custom options using an extension of the CustomPageSize and ParamCustomPageSize syntax:

    *CustomFoo True: "command"
    *ParamCustomFoo Name1/Text 1: order type minimum maximum
    *ParamCustomFoo Name2/Text 2: order type minimum maximum
    ...
    *ParamCustomFoo NameN/Text N: order type minimum maximum
    

    When the base option is part of the JCLSetup section, the "command" string contains JCL commands with "\order" placeholders for each numbered parameter. The CUPS API handles any necessary value quoting for HP-PJL commands. For example, if the JCL command string is "@PJL SET PASSCODE=\1" and the first option value is "1234" then CUPS will output the string "@PJL SET PASSCODE=1234".

    For non-JCLSetup options, the "order" value is a number from 1 to N and specifies the order of values as they are placed on the stack before the command. For example, if the PostScript command string is "<</cupsReal1 2 1 roll>>setpagedevice" and the option value is "2.0" then CUPS will output the string "2.0 <</cupsReal1 2 1 roll>>setpagedevice".

    The "type" is one of the following keywords:

    • curve - a real value from "minimum" to "maximum" representing a gamma correction curve using the function: f(x) = x value
    • int - an integer value from "minimum" to "maximum"
    • invcurve - a real value from "minimum" to "maximum" representing a gamma correction curve using the function: f(x) = x 1 / value
    • passcode - a string of numbers value with a minimum of "minimum" numbers and a maximum of "maximum" numbers ("minimum" and "maximum" are numbers and passcode strings are not displayed in the user interface)
    • password - a string value with a minimum of "minimum" characters and a maximum of "maximum" characters ("minimum" and "maximum" are numbers and password strings are not displayed in the user interface)
    • points - a measurement value in points from "minimum" to "maximum"
    • real - a real value from "minimum" to "maximum"
    • string - a string value with a minimum of "minimum" characters and a maximum of "maximum" characters ("minimum" and "maximum" are numbers)

    Examples:

    *% Base JCL key code option
    *JCLOpenUI JCLPasscode/Key Code: PickOne
    *OrderDependency: 10 JCLSetup *JCLPasscode
    *DefaultJCLPasscode: None
    *JCLPasscode None/No Code: ""
    *JCLPasscode 1111: "@PJL SET PASSCODE = 1111<0A>"
    *JCLPasscode 2222: "@PJL SET PASSCODE = 2222<0A>"
    *JCLPasscode 3333: "@PJL SET PASSCODE = 3333<0A>"
    *JCLCloseUI: *JCLPasscode
    
    *% Custom JCL key code option
    *CustomJCLPasscode True: "@PJL SET PASSCODE = \1<0A>"
    *ParamCustomJCLPasscode Code/Key Code: 1 passcode 4 4
    
    
    *% Base PostScript watermark option
    *OpenUI WatermarkText/Watermark Text: PickOne
    *OrderDependency: 10 AnySetup *WatermarkText
    *DefaultWatermarkText: None
    *WatermarkText None: ""
    *WatermarkText Draft: "<</cupsString1(Draft)>>setpagedevice"
    *CloseUI: *WatermarkText
    
    *% Custom PostScript watermark option
    *CustomWatermarkText True: "<</cupsString1 3 -1 roll>>setpagedevice"
    *ParamCustomWatermarkText Text: 1 string 0 32
    
    
    *% Base PostScript gamma/density option
    *OpenUI GammaDensity/Gamma and Density: PickOne
    *OrderDependency: 10 AnySetup *GammaDensity
    *DefaultGammaDensity: Normal
    *GammaDensity Normal/Normal: "<</cupsReal1 1.0/cupsReal2 1.0>>setpagedevice"
    *GammaDensity Light/Lighter: "<</cupsReal1 0.9/cupsReal2 0.67>>setpagedevice"
    *GammaDensity Dark/Darker: "<</cupsReal1 1.1/cupsReal2 1.5>>setpagedevice"
    *CloseUI: *GammaDensity
    
    *% Custom PostScript gamma/density option
    *CustomGammaDensity True: "<</cupsReal1 3 -1 roll/cupsReal2 5 -1>>setpagedevice"
    *ParamCustomGammaDensity Gamma: 1 curve 0.1 10
    *ParamCustomGammaDensity Density: 2 real 0 2
    

    Writing PostScript Option Commands for Raster Drivers

    PPD files are used for both PostScript and non-PostScript printers. For CUPS raster drivers, you use a subset of the PostScript language to set page device keywords such as page size, resolution, and so forth. For example, the following code sets the page size to A4 size:

    *PageSize A4: "<</PageSize[595 842]>>setpagedevice"
    

    Custom options typically use other operators to organize the values into a key/value dictionary for setpagedevice. For example, our previous CustomWatermarkText option code uses the roll operator to move the custom string value into the dictionary for setpagedevice:

    *CustomWatermarkText True: "<</cupsString1 3 -1 roll>>setpagedevice"
    

    For a custom string value of "My Watermark", CUPS will produce the following PostScript code for the option:

    (My Watermark)
    <</cupsString1 3 -1 roll>>setpagedevice
    

    The code moves the string value ("My Watermark") from the bottom of the stack to the top, creating a dictionary that looks like:

    <</cupsString1(My Watermark)>>setpagedevice
    

    The resulting dictionary sets the page device attributes that are sent to your raster driver in the page header.

    Custom Page Size Code

    There are many possible implementations of the CustomPageSize code. For CUPS raster drivers, the following code is recommended:

    *ParamCustomPageSize Width:        1 points min-width max-width
    *ParamCustomPageSize Height:       2 points min-height max-height
    *ParamCustomPageSize WidthOffset:  3 points 0 0
    *ParamCustomPageSize HeightOffset: 4 points 0 0
    *ParamCustomPageSize Orientation:  5 int 0 0
    *CustomPageSize True: "pop pop pop <</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice"
    

    Supported PostScript Operators

    CUPS supports the following PostScript operators in addition to the usual PostScript number, string (literal and hex-encoded), boolean, null, and name values:

    • << - Start a dictionary.
    • >> - End a dictionary.
    • [ - Start an array.
    • ] - End an array.
    • copy - Copy the top N objects on the stack.
    • dup - Copy the top object on the stack.
    • index - Copy the Nth from the top object on the stack.
    • pop - Pop the top object on the stack.
    • roll - Shift the top N objects on the stack.
    • setpagedevice - Set the page header values according to the key/value dictionary on the stack.
    Note:

    Never use the unsupported dict or put operators in your option code. These operators are typically used in option code dating back to Level 1 PostScript printers, which did not support the simpler << or >> operators. If you have old option code using dict or put, you can rewrite it very easily to use the newer << and >> operators instead. For example, the following code to set the page size:

    1 dict dup /PageSize [612 792] put setpagedevice
    

    can be rewritten as:

    << /PageSize [612 792] >> setpagedevice
    

    Supported Page Device Attributes

    Table 2 shows the supported page device attributes along with PostScript code examples.

    Table 2: Supported Page Device Attributes
    Name(s) Type Description Example(s)
    AdvanceDistance Integer Specifies the number of points to advance roll media after printing. <</AdvanceDistance 18>>setpagedevice
    AdvanceMedia Integer Specifies when to advance the media: 0 = never, 1 = after the file, 2 = after the job, 3 = after the set, and 4 = after the page. <</AdvanceMedia 4>>setpagedevice
    Collate Boolean Specifies whether collated copies are required. <</Collate true>>setpagedevice
    CutMedia Integer Specifies when to cut the media: 0 = never, 1 = after the file, 2 = after the job, 3 = after the set, and 4 = after the page. <</CutMedia 1>>setpagedevice
    Duplex Boolean Specifies whether 2-sided printing is required. <</Duplex true>>setpagedevice
    HWResolution Integer Array Specifies the resolution of the page image in pixels per inch. <</HWResolution[1200 1200]>>setpagedevice
    InsertSheet Boolean Specifies whether to insert a blank sheet before the job. <</InsertSheet true>>setpagedevice
    Jog Integer Specifies when to shift the media in the output bin: 0 = never, 1 = after the file, 2 = after the job, 3 = after the set, and 4 = after the page. <</Jog 2>>setpagedevice
    LeadingEdge Integer Specifies the leading edge of the media: 0 = top, 1 = right, 2 = bottom, 3 = left. <</LeadingEdge 0>>setpagedevice
    ManualFeed Boolean Specifies whether media should be drawn from the manual feed tray. Note: The MediaPosition attribute is preferred over the ManualFeed attribute. <</ManualFeed true>>setpagedevice
    MediaClass String Specifies a named media. <</MediaClass (Invoices)>>setpagedevice
    MediaColor String Specifies the color of the media. <</MediaColor >>setpagedevice
    MediaPosition Integer Specifies the tray or source of the media. <</MediaPosition 12>>setpagedevice
    MediaType String Specifies the general media type. <</MediaType (Glossy)>>setpagedevice
    MediaWeight Integer Specifies the media weight in grams per meter2. <</MediaWeight 100>>setpagedevice
    MirrorPrint Boolean Specifies whether to flip the output image horizontally. <</MirrorPrint true>>setpagedevice
    NegativePrint Boolean Specifies whether to invert the output image. <</NegativePrint true>>setpagedevice
    NumCopies Integer Specifies the number of copies to produce of each page. <</NumCopies 100>>setpagedevice
    Orientation Integer Specifies the orientation of the output: 0 = portrait, 1 = landscape rotated counter-clockwise, 2 = upside-down, 3 = landscape rotated clockwise. <</Orientation 3>>setpagedevice
    OutputFaceUp Boolean Specifies whether to place the media face-up in the output bin/tray. <</OutputFaceUp true>>setpagedevice
    OutputType String Specifies the output type name. <</OutputType (Photo)>>setpagedevice
    PageSize Integer/Real Array Specifies the width and length/height of the page in points. <</PageSize[595 842]>>setpagedevice
    Separations Boolean Specifies whether to produce color separations. <</Separations true>>setpagedevice
    TraySwitch Boolean Specifies whether to switch trays automatically. <</TraySwitch true>>setpagedevice
    Tumble Boolean Specifies whether the back sides of pages are rotated 180 degrees. <</Tumble true>>setpagedevice
    cupsBorderlessScalingFactor Real Specifies the amount to scale the page image dimensions. <</cupsBorderlessScalingFactor 1.01>>setpagedevice
    cupsColorOrder Integer Specifies the order of colors: 0 = chunked, 1 = banded, 2 = planar. <</cupsColorOrder 0>>setpagedevice
    cupsColorSpace Integer Specifies the page image colorspace: 0 = W, 1 = RGB, 2 = RGBA, 3 = K, 4 = CMY, 5 = YMC, 6 = CMYK, 7 = YMCK, 8 = KCMY, 9 = KCMYcm, 10 = GMCK, 11 = GMCS, 12 = White, 13 = Gold, 14 = Silver, 15 = CIE XYZ, 16 = CIE Lab, 17 = RGBW, 32 to 46 = CIE Lab (1 to 15 inks) <</cupsColorSpace 1 >>setpagedevice
    cupsCompression Integer Specifies a driver compression type/mode. <</cupsCompression 2>>setpagedevice
    cupsInteger0
    ...
    cupsInteger15
    Integer Specifies driver integer values. <</cupsInteger11 1234>>setpagedevice
    cupsMarkerType String Specifies the type of ink/toner to use. <</cupsMarkerType (Black+Color)>>setpagedevice
    cupsMediaType Integer Specifies a numeric media type. <</cupsMediaType 999>>setpagedevice
    cupsPageSizeName String Specifies the name of the page size. <</cupsPageSizeName (A4.Full)>>setpagedevice
    cupsPreferredBitsPerColor Integer Specifies the preferred number of bits per color, typically 8 or 16. <</cupsPreferredBitsPerColor 16>>setpagedevice
    cupsReal0
    ...
    cupsReal15
    Real Specifies driver real number values. <</cupsReal15 1.234>>setpagedevice
    cupsRenderingIntent String Specifies the color rendering intent. <</cupsRenderingIntent (AbsoluteColorimetric)>>setpagedevice
    cupsRowCount Integer Specifies the number of rows of raster data to print on each line for some drivers. <</cupsRowCount 24>>setpagedevice
    cupsRowFeed Integer Specifies the number of rows to feed between passes for some drivers. <</cupsRowFeed 17>>setpagedevice
    cupsRowStep Integer Specifies the number of lines between columns/rows on the print head for some drivers. <</cupsRowStep 2>>setpagedevice
    cupsString0
    ...
    cupsString15
    String Specifies driver string values. <</cupsString0(String Value)>>setpagedevice

    Media Keywords

    The CUPS media keywords allow drivers to specify alternate custom page size limits based on up to two options.

    CUPS 1.4/macOS 10.6cupsMediaQualifier2

    *cupsMediaQualifier2: MainKeyword

    This keyword specifies the second option to use for overriding the custom page size limits.

    Example:

    *% Specify alternate custom page size limits based on InputSlot and Quality
    *cupsMediaQualifier2: InputSlot
    *cupsMediaQualifier3: Quality
    *cupsMaxSize .Manual.: "1000 1000"
    *cupsMinSize .Manual.: "100 100"
    *cupsMinSize .Manual.Photo: "200 200"
    *cupsMinSize ..Photo: "300 300"
    

    CUPS 1.4/macOS 10.6cupsMediaQualifier3

    *cupsMediaQualifier3: MainKeyword

    This keyword specifies the third option to use for overriding the custom page size limits.

    Example:

    *% Specify alternate custom page size limits based on InputSlot and Quality
    *cupsMediaQualifier2: InputSlot
    *cupsMediaQualifier3: Quality
    *cupsMaxSize .Manual.: "1000 1000"
    *cupsMinSize .Manual.: "100 100"
    *cupsMinSize .Manual.Photo: "200 200"
    *cupsMinSize ..Photo: "300 300"
    

    CUPS 1.4/macOS 10.6cupsMinSize

    *cupsMinSize .Qualifier2.Qualifier3: "width length"
    *cupsMinSize .Qualifier2.: "width length"
    *cupsMinSize ..Qualifier3: "width length"

    This keyword specifies alternate minimum custom page sizes in points. The cupsMediaQualifier2 and cupsMediaQualifier3 keywords are used to identify options to use for matching.

    Example:

    *% Specify alternate custom page size limits based on InputSlot and Quality
    *cupsMediaQualifier2: InputSlot
    *cupsMediaQualifier3: Quality
    *cupsMaxSize .Manual.: "1000 1000"
    *cupsMinSize .Manual.: "100 100"
    *cupsMinSize .Manual.Photo: "200 200"
    *cupsMinSize ..Photo: "300 300"
    

    CUPS 1.4/macOS 10.6cupsMaxSize

    *cupsMaxSize .Qualifier2.Qualifier3: "width length"
    *cupsMaxSize .Qualifier2.: "width length"
    *cupsMaxSize ..Qualifier3: "width length"

    This keyword specifies alternate maximum custom page sizes in points. The cupsMediaQualifier2 and cupsMediaQualifier3 keywords are used to identify options to use for matching.

    Example:

    *% Specify alternate custom page size limits based on InputSlot and Quality
    *cupsMediaQualifier2: InputSlot
    *cupsMediaQualifier3: Quality
    *cupsMaxSize .Manual.: "1000 1000"
    *cupsMinSize .Manual.: "100 100"
    *cupsMinSize .Manual.Photo: "200 200"
    *cupsMinSize ..Photo: "300 300"
    

    CUPS 1.4/macOS 10.6cupsPageSizeCategory

    *cupsPageSizeCategory name/text: "name name2 ... nameN"

    This keyword lists related paper size names that should be grouped together in the Print or Page Setup dialogs. The "name" portion of the keyword specifies the root/default size for the grouping. On macOS the grouped paper sizes are shown in a submenu of the main paper size. When omitted, sizes with the same dimensions are automatically grouped together, for example "Letter" and "Letter.Borderless".

    Example:

    *% Specify grouping of borderless/non-borderless sizes
    *cupsPageSizeCategory Letter/US Letter: "Letter Letter.Borderless"
    *cupsPageSizeCategory A4/A4: "A4 A4.Borderless"
    

    General Attributes

    CUPS 1.3/macOS 10.5cupsBackSide

    *cupsBackSide: keyword

    This keyword requests special handling of the back side of pages when doing duplexed (2-sided) output. Table 1 shows the supported keyword values for this keyword and their effect on the raster data sent to your driver. For example, when cupsBackSide is Rotated and Tumble is false, your driver will receive print data starting at the bottom right corner of the page, with each line going right-to-left instead of left-to-right. The default value is Normal.

    Note:

    cupsBackSide replaces the older cupsFlipDuplex keyword - if cupsBackSide is specified, cupsFlipDuplex will be ignored.

    Table 1: Back Side Raster Coordinate System
    cupsBackSide Tumble Value Image Presentation
    Normal false Left-to-right, top-to-bottom
    Normal true Left-to-right, top-to-bottom
    ManualTumble false Left-to-right, top-to-bottom
    ManualTumble true Right-to-left, bottom-to-top
    Rotated false Right-to-left, bottom-to-top
    Rotated true Right-to-left, top-to-bottom
    Flipped * false Left-to-right, bottom-to-top
    Flipped * true Right-to-left, top-to-bottom

    * - Not supported in macOS 10.5.x and earlier

    Figure 1: Back side images
    Back side images

    Examples:

    *% Flip the page image for the back side of duplexed output
    *cupsBackSide: Flipped
    
    *% Rotate the page image for the back side of duplexed output
    *cupsBackSide: Rotated
    

    Also see the related APDuplexRequiresFlippedMargin keyword.

    CUPS 1.4/macOS 10.6cupsCommands

    *cupsCommands: "name name2 ... nameN"

    This string keyword specifies the commands that are supported by the CUPS command file filter for this device. The command names are separated by whitespace.

    Example:

    *% Specify the list of commands we support
    *cupsCommands: "AutoConfigure Clean PrintSelfTestPage ReportLevels com.vendor.foo"
    

    CUPS 1.3/macOS 10.5cupsEvenDuplex

    *cupsEvenDuplex: boolean

    This boolean keyword notifies the RIP filters that the destination printer requires an even number of pages when 2-sided printing is selected. The default value is false.

    Example:

    *% Always send an even number of pages when duplexing
    *cupsEvenDuplex: true
    

    cupsFax

    *cupsFax: boolean

    This boolean keyword specifies whether the PPD defines a facsimile device. The default is false.

    Examples:

    *cupsFax: true
    

    cupsFilter

    *cupsFilter: "source/type cost program"

    This string keyword provides a conversion rule from the given source type to the printer's native format using the filter "program". If a printer supports the source type directly, the special filter program "-" may be specified.

    Examples:

    *% Standard raster printer driver filter
    *cupsFilter: "application/vnd.cups-raster 100 rastertofoo"
    
    *% Plain text filter
    *cupsFilter: "text/plain 10 texttofoo"
    
    *% Pass-through filter for PostScript printers
    *cupsFilter: "application/vnd.cups-postscript 0 -"
    

    CUPS 1.5cupsFilter2

    *cupsFilter2: "source/type destination/type cost program"

    This string keyword provides a conversion rule from the given source type to the printer's native format using the filter "program". If a printer supports the source type directly, the special filter program "-" may be specified. The destination type is automatically created as needed and is passed to the filters and backend as the FINAL_CONTENT_TYPE value.

    Note:

    The presence of a single cupsFilter2 keyword in the PPD file will hide any cupsFilter keywords from the CUPS scheduler. When using cupsFilter2 to provide filters specific for CUPS 1.5 and later, provide a cupsFilter2 line for every filter and a cupsFilter line for each filter that is compatible with older versions of CUPS.

    Examples:

    *% Standard raster printer driver filter
    *cupsFilter2: "application/vnd.cups-raster application/vnd.foo 100 rastertofoo"
    
    *% Plain text filter
    *cupsFilter2: "text/plain application/vnd.foo 10 texttofoo"
    
    *% Pass-through filter for PostScript printers
    *cupsFilter2: "application/vnd.cups-postscript application/postscript 0 -"
    

    DeprecatedcupsFlipDuplex

    *cupsFlipDuplex: boolean

    Due to implementation differences between macOS and Ghostscript, the cupsFlipDuplex keyword is deprecated. Instead, use the cupsBackSide keyword to specify the coordinate system (pixel layout) of the page data on the back side of duplex pages.

    The value true maps to a cupsBackSide value of Rotated on macOS and Flipped with Ghostscript.

    The default value is false.

    Note:

    macOS drivers that previously used cupsFlipDuplex may wish to provide both the old and new keywords for maximum compatibility, for example:

    *cupsBackSide: Rotated
    *cupsFlipDuplex: true
    

    Similarly, drivers written for other operating systems using Ghostscript can use:

    *cupsBackSide: Flipped
    *cupsFlipDuplex: true
    

    CUPS 1.3/macOS 10.5cupsIPPFinishings

    *cupsIPPFinishings number/text: "*Option Choice ..."

    This keyword defines a mapping from IPP finishings values to PPD options and choices.

    Examples:

    *cupsIPPFinishings 4/staple: "*StapleLocation SinglePortrait"
    *cupsIPPFinishings 5/punch: "*PunchMedia Yes *PunchLocation LeftSide"
    *cupsIPPFinishings 20/staple-top-left: "*StapleLocation SinglePortrait"
    *cupsIPPFinishings 21/staple-bottom-left: "*StapleLocation SingleLandscape"
    

    CUPS 1.3/macOS 10.5cupsIPPReason

    *cupsIPPReason reason/Reason Text: "optional URIs"

    This optional keyword maps custom printer-state-reasons keywords that are generated by the driver to human readable text. The optional URIs string contains zero or more URIs separated by a newline. Each URI can be a CUPS server absolute path to a help file under the scheduler's DocumentRoot directory, a full HTTP URL ("http://www.domain.com/path/to/help/page.html"), or any other valid URI which directs the user at additional information concerning the condition that is being reported.

    Since the reason text is limited to 80 characters by the PPD specification, longer text strings can be included by URI-encoding the text with the "text" scheme, for example "text:some%20text". Multiple text URIs are combined by the ppdLocalizeIPPReason into a single string that can be displayed to the user.

    Examples:

    *% Map com.vendor-error to text but no page
    *cupsIPPReason com.vendor-error/A serious error occurred: ""
    
    *% Map com.vendor-error to more than 80 characters of text but no page
    *cupsIPPReason com.vendor-error/A serious error occurred: "text:Now%20is%20the%20time
    text:for%20all%20good%20men%20to%20come%20to%20the%20aid%20of%20their%20country."
    
    *% Map com.vendor-error to text and a local page
    *cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html"
    
    *% Map com.vendor-error to text and a remote page
    *cupsIPPReason com.vendor-error/A serious error occurred: "http://www.vendor.com/help"
    
    *% Map com.vendor-error to text and a local, Apple help book, and remote page
    *APHelpBook: "file:///Library/Printers/vendor/Help.bundle"
    *cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html
    help:anchor='com.vendor-error'%20bookID=Vendor%20Help
    http://www.vendor.com/help"
    *End
    

    CUPS 1.5cupsIPPSupplies

    *cupsIPPSupplies: boolean

    This keyword tells the IPP backend whether it should report the current marker-xxx supply attribute values. The default value is True.

    Example:

    *% Do not use IPP marker-xxx attributes to report supply levels
    *cupsIPPSupplies: False
    

    CUPS 1.7/macOS 10.9cupsJobAccountId

    *cupsJobAccountId: boolean

    This keyword defines whether the printer accepts the job-account-id IPP attribute.

    Example:

    *% Specify the printer accepts the job-account-id IPP attribute.
    *cupsJobAccountId: True
    

    CUPS 1.7/macOS 10.9cupsJobAccountingUserId

    *cupsJobAccountingUserId: boolean

    This keyword defines whether the printer accepts the job-accounting-user-id IPP attribute.

    Example:

    *% Specify the printer accepts the job-accounting-user-id IPP attribute.
    *cupsJobAccountingUserId: True
    

    CUPS 1.7/macOS 10.9cupsJobPassword

    *cupsJobPassword: "format"

    This keyword defines the format of the job-password IPP attribute, if supported by the printer. Currently the only supported format is "1111" indicating a 4-digit PIN code.

    Example:

    *% Specify the printer supports 4-digit PIN codes.
    *cupsJobPassword: "1111"
    

    CUPS 1.2/macOS 10.5cupsLanguages

    *cupsLanguages: "locale list"

    This keyword describes which language localizations are included in the PPD. The "locale list" string is a space-delimited list of locale names ("en", "en_US", "fr_CA", etc.)

    Example:

    *% Specify Canadian, UK, and US English, and Canadian and French French
    *cupsLanguages: "en_CA en_UK en_US fr_CA fr_FR"
    

    CUPS 1.7/macOS 10.9cupsMandatory

    *cupsMandatory: "attribute1 attribute2 ... attributeN"

    This keyword defines a list of IPP attributes that must be provided when submitting a print job creation request.

    Example:

    *% Specify that the user must supply a job-password
    *cupsMandatory: "job-password job-password-encryption"
    

    cupsManualCopies

    *cupsManualCopies: boolean

    This boolean keyword notifies the RIP filters that the destination printer does not support copy generation in hardware. The default value is false.

    Example:

    *% Tell the RIP filters to generate the copies for us
    *cupsManualCopies: true
    

    CUPS 1.4/macOS 10.6cupsMarkerName

    *cupsMarkerName/Name Text: ""

    This optional keyword maps marker-names strings that are generated by the driver to human readable text.

    Examples:

    *% Map cyanToner to "Cyan Toner"
    *cupsMarkerName cyanToner/Cyan Toner: ""
    

    CUPS 1.4/macOS 10.6cupsMarkerNotice

    *cupsMarkerNotice: "disclaimer text"

    This optional keyword provides disclaimer text for the supply level information provided by the driver, typically something like "supply levels are approximate".

    Examples:

    *cupsMarkerNotice: "Supply levels are approximate."
    

    CUPS 1.6/macOS 10.8cupsMaxCopies

    *cupsMaxCopies: integer

    This integer keyword notifies the filters that the destination printer supports up to N copies in hardware. The default value is 9999.

    Example:

    *% Tell the RIP filters we can do up to 99 copies
    *cupsMaxCopies: 99
    

    cupsModelNumber

    *cupsModelNumber: number

    This integer keyword specifies a printer-specific model number. This number can be used by a filter program to adjust the output for a specific model of printer.

    Example:

    *% Specify an integer for a driver-specific model number
    *cupsModelNumber: 1234
    

    CUPS 1.3/macOS 10.5cupsPJLCharset

    *cupsPJLCharset: "ISO character set name"

    This string keyword specifies the character set that is used for strings in PJL commands. If not specified, US-ASCII is assumed.

    Example:

    *% Specify UTF-8 is used in PJL strings
    *cupsPJLCharset: "UTF-8"
    

    CUPS 1.4/macOS 10.6cupsPJLDisplay

    *cupsPJLDisplay: "what"

    This optional keyword specifies which command is used to display the job ID, name, and user on the printer's control panel. "What" is either "none" to disable this functionality, "job" to use "@PJL JOB DISPLAY", or "rdymsg" to use "@PJL RDYMSG DISPLAY". The default is "job".

    Examples:

    *% Display job information using @PJL SET RDYMSG DISPLAY="foo"
    *cupsPJLDisplay: "rdymsg"
    
    *% Display job information display
    *cupsPJLDisplay: "none"
    

    CUPS 1.2/macOS 10.5cupsPortMonitor

    *cupsPortMonitor urischeme/Descriptive Text: "port monitor"

    This string keyword specifies printer-specific "port monitor" filters that may be used with the printer. The CUPS scheduler also looks for the Protocols keyword to see if the BCP or TBCP protocols are supported. If so, the corresponding port monitor ("bcp" and "tbcp", respectively) is listed in the printer's port-monitor-supported keyword.

    The "urischeme" portion of the keyword specifies the URI scheme that this port monitor should be used for. Typically this is used to pre-select a particular port monitor for each type of connection that is supported by the printer. The "port monitor" string can be "none" to disable the port monitor for the given URI scheme.

    Examples:

    *% Specify a PostScript printer that supports the TBCP protocol
    *Protocols: TBCP PJL
    
    *% Specify that TBCP should be used for socket connections but not USB
    *cupsPortMonitor socket/AppSocket Printing: "tbcp"
    *cupsPortMonitor usb/USB Printing: "none"
    
    *% Specify a printer-specific port monitor for an Epson USB printer
    *cupsPortMonitor usb/USB Status Monitor: "epson-usb"
    

    CUPS 1.3/macOS 10.5cupsPreFilter

    *cupsPreFilter: "source/type cost program"

    This string keyword provides a pre-filter rule. The pre-filter program will be inserted in the conversion chain immediately before the filter that accepts the given MIME type.

    Examples:

    *% PDF pre-filter
    *cupsPreFilter: "application/pdf 100 mypdfprefilter"
    
    *% PNG pre-filter
    *cupsPreFilter: "image/png 0 mypngprefilter"
    

    CUPS 1.5cupsPrintQuality

    *cupsPrintQuality keyword/text: "code"

    This UI keyword defines standard print qualities that directly map from the IPP "print-quality" job template keyword. Standard keyword values are "Draft", "Normal", and "High" which are mapped from the IPP "print-quality" values 3, 4, and 5 respectively. Each cupsPrintQuality option typically sets output mode and resolution parameters in the page device dictionary, eliminating the need for separate (and sometimes confusing) output mode and resolution options.

    Note:

    Unlike all of the other keywords defined in this document, cupsPrintQuality is a UI keyword that MUST be enclosed inside the PPD OpenUI and CloseUI keywords.

    Examples:

    *OpenUI *cupsPrintQuality/Print Quality: PickOne
    *OrderDependency: 10 AnySetup *cupsPrintQuality
    *DefaultcupsPrintQuality: Normal
    *cupsPrintQuality Draft/Draft: "code"
    *cupsPrintQuality Normal/Normal: "code"
    *cupsPrintQuality High/Photo: "code"
    *CloseUI: *cupsPrintQuality
    

    CUPS 1.5cupsSingleFile

    *cupsSingleFile: Boolean

    This boolean keyword tells the scheduler whether to print multiple files in a job together or singly. The default is "False" which uses a single instance of the backend for all files in the print job. Setting this keyword to "True" will result in separate instances of the backend for each file in the print job.

    Examples:

    *% Send all print data to a single backend
    *cupsSingleFile: False
    
    *% Send each file using a separate backend
    *cupsSingleFile: True
    

    CUPS 1.4/macOS 10.6cupsSNMPSupplies

    *cupsSNMPSupplies: boolean

    This keyword tells the standard network backends whether they should query the standard SNMP Printer MIB OIDs for supply levels. The default value is True.

    Example:

    *% Do not use SNMP queries to report supply levels
    *cupsSNMPSupplies: False
    

    cupsVersion

    *cupsVersion: major.minor

    This required keyword describes which version of the CUPS PPD file extensions was used. Currently it must be the string "1.0", "1.1", "1.2", "1.3", "1.4", "1.5", or "1.6".

    Example:

    *% Specify a CUPS 1.2 driver
    *cupsVersion: "1.2"
    

    CUPS 1.6/macOS 10.8JCLToPDFInterpreter

    *JCLToPDFInterpreter: "JCL"

    This keyword provides the JCL command to insert a PDF job file into a printer-ready data stream. The JCL command is added after the JCLBegin value and any commands for JCL options in the PPD file.

    Example:

    *% PJL command to start the PDF interpreter
    *JCLToPDFInterpreter: "@PJL ENTER LANGUAGE = PDF<0A>"
    

    macOS Attributes

    macOS 10.3APDialogExtension

    *APDialogExtension: "/Library/Printers/vendor/filename.plugin"

    This keyword defines additional option panes that are displayed in the print dialog. Each keyword adds one or more option panes. See the "OutputBinsPDE" example and Apple Technical Q&A QA1352 for information on writing your own print dialog plug-ins.

    Note:

    Starting with macOS 10.5, each plug-in must be compiled "4-way fat" (32-bit and 64-bit for both PowerPC and Intel) with garbage collection enabled in order to be usable with all applications.

    Examples:

    *% Add two panes for finishing and driver options
    *APDialogExtension: "/Library/Printers/vendor/finishing.plugin"
    *APDialogExtension: "/Library/Printers/vendor/options.plugin"
    

    macOS 10.4APDuplexRequiresFlippedMargin

    *APDuplexRequiresFlippedMargin: boolean

    This boolean keyword notifies the RIP filters that the destination printer requires the top and bottom margins of the ImageableArea to be swapped for the back page. The default is true when cupsBackSide is Flipped and false otherwise. Table 2 shows how APDuplexRequiresFlippedMargin interacts with cupsBackSide and the Tumble page attribute.

    Table 2: Margin Flipping Modes
    APDuplexRequiresFlippedMargin cupsBackSide Tumble Value Margins
    false any any Normal
    any Normal any Normal
    true ManualDuplex false Normal
    true ManualDuplex true Flipped
    true Rotated false Flipped
    true Rotated true Normal
    true or unspecified Flipped any Flipped

    Example:

    *% Rotate the back side images
    *cupsBackSide: Rotated
    
    *% Don't swap the top and bottom margins for the back side
    *APDuplexRequiresFlippedMargin: false
    

    Also see the related cupsBackSide keyword.

    APHelpBook

    *APHelpBook: "bundle URL"

    This string keyword specifies the Apple help book bundle to use when looking up IPP reason codes for this printer driver. The cupsIPPReason keyword maps "help" URIs to this file.

    Example:

    *APHelpBook: "file:///Library/Printers/vendor/Help.bundle"
    

    macOS 10.6APICADriver

    *APICADriver: boolean

    This keyword specifies whether the device has a matching Image Capture Architecture (ICA) driver for scanning. The default is False.

    Examples:

    *APICADriver: True
    *APScanAppBundleID: "com.apple.ImageCaptureApp"
    

    macOS 10.3APPrinterIconPath

    *APPrinterIconPath: "/Library/Printers/vendor/filename.icns"

    This keyword defines the location of a printer icon file to use when displaying the printer. The file must be in the Apple icon format.

    Examples:

    *% Apple icon file
    *APPrinterIconPath: "/Library/Printers/vendor/Icons/filename.icns"
    

    macOS 10.4APPrinterLowInkTool

    *APPrinterLowInkTool: "/Library/Printers/vendor/program"

    This keyword defines an program that checks the ink/toner/marker levels on a printer, returning an XML document with those levels. See the "InkTool" example and Apple Technical Note TN2144 for more information.

    Examples:

    *% Use a vendor monitoring program
    *APPrinterLowInkTool: "/Library/Printers/vendor/Tools/lowinktool"
    

    macOS 10.5APPrinterPreset

    *APPrinterPreset name/text: "*Option Choice ..."

    This keyword defines presets for multiple options that show up in the print dialog of applications (such as iPhoto) that set the job style hint to NSPrintPhotoJobStyleHint. Each preset maps to one or more pairs of PPD options and choices as well as providing key/value data for the application. The following standard preset names are currently defined:

    • General_with_Paper_Auto-Detect; Normal quality general printing with auto-detected media.
    • General_with_Paper_Auto-Detect_-_Draft; Draft quality general printing with auto-detected media.
    • General_on_Plain_Paper; Normal quality general printing on plain paper.
    • General_on_Plain_Paper_-_Draft; Draft quality general printing on plain paper.
    • Photo_with_Paper_Auto-Detect; Normal quality photo printing with auto-detected media.
    • Photo_with_Paper_Auto-Detect_-_Fine; High quality photo printing with auto-detected media.
    • Photo_on_Plain_Paper; Normal quality photo printing on plain paper.
    • Photo_on_Plain_Paper_-_Fine; High quality photo printing on plain paper.
    • Photo_on_Photo_Paper; Normal quality photo printing on glossy photo paper.
    • Photo_on_Photo_Paper_-_Fine; High quality photo printing on glossy photo paper.
    • Photo_on_Matte_Paper; Normal quality photo printing on matte paper.
    • Photo_on_Matte_Paper_-_Fine; High quality photo printing on matte paper.

    The value string consists of pairs of keywords, either an option name and choice (*MainKeyword OptionKeyword) or a preset identifier and value (com.apple.print.preset.foo value). The following preset identifiers are currently used:

    • com.apple.print.preset.graphicsType; specifies the type of printing used for this printing - "General" for general purpose printing and "Photo" for photo printing.
    • com.apple.print.preset.media-front-coating; specifies the media type selected by this preset - "none" (plain paper), "glossy", "high-gloss", "semi-gloss", "satin", "matte", and "autodetect".
    • com.apple.print.preset.output-mode; specifies the output mode for this preset - "color" (default for color printers) or "monochrome" (grayscale, default for B&W printers).
    • com.apple.print.preset.quality; specifies the overall print quality selected by this preset - "low" (draft), "mid" (normal), or "high".

    Presets, like options, can also be localized in multiple languages.

    Examples:

    *APPrinterPreset Photo_on_Photo_Paper/Photo on Photo Paper: "
      *MediaType Glossy
      *ColorModel RGB
      *Resolution 300dpi
      com.apple.print.preset.graphicsType Photo
      com.apple.print.preset.quality mid
      com.apple.print.preset.media-front-coating glossy"
    *End
    *fr.APPrinterPreset Photo_on_Photo_Paper/Photo sur papier photographique: ""
    

    macOS 10.3APPrinterUtilityPath

    *APPrinterPrinterUtilityPath: "/Library/Printers/vendor/filename.app"

    This keyword defines a GUI application that can be used to do printer maintenance functions such as cleaning the print head(s). See ... for more information.

    Examples:

    *% Define the printer utility application
    *APPrinterPrinterUtilityPath: "/Library/Printers/vendor/Tools/utility.app"
    

    macOS 10.6APScannerOnly

    *APScannerOnly: boolean

    This keyword specifies whether the device has scanning but no printing capabilities. The default is False.

    Examples:

    *APICADriver: True
    *APScannerOnly: True
    

    macOS 10.3APScanAppBundleID

    *APScanAppBundleID: "bundle ID"

    This keyword defines the application to use when scanning pages from the device.

    Examples:

    *APICADriver: True
    *APScanAppBundleID: "com.apple.ImageCaptureApp"
    

    Change History

    Changes in CUPS 1.7

    Changes in CUPS 1.6

    Changes in CUPS 1.5

    • Changes all instances of PPD attributes to PPD keywords, to be consistent with the parent specification from Adobe.

    Changes in CUPS 1.4.5

    Changes in CUPS 1.4

    Changes in CUPS 1.3.1

    • Added missing macOS AP keywords.
    • Added section on auto-configuration including the OIDMainKeyword and ?MainKeyword keywords.
    • Minor reorganization.

    Changes in CUPS 1.3

    Changes in CUPS 1.2.8

    • Added section on supported PostScript commands for raster drivers

    Changes in CUPS 1.2

    Changes in CUPS 1.1

    cups-2.2.7/filter/testclient.c000664 000765 000024 00000067111 13255074424 016770 0ustar00msweetstaff000000 000000 /* * Simulated client test program for CUPS. * * Copyright 2017 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include #include #include #include #include /* * Local types... */ typedef struct _client_monitor_s { const char *uri, /* Printer URI */ *hostname, /* Hostname */ *user, /* Username */ *resource; /* Resource path */ int port; /* Port number */ http_encryption_t encryption; /* Use encryption? */ ipp_pstate_t printer_state; /* Current printer state */ char printer_state_reasons[1024]; /* Current printer-state-reasons */ int job_id; /* Job ID for submitted job */ ipp_jstate_t job_state; /* Current job state */ char job_state_reasons[1024]; /* Current job-state-reasons */ } _client_monitor_t; /* * Local functions... */ static const char *make_raster_file(ipp_t *response, int grayscale, char *tempname, size_t tempsize, const char **format); static void *monitor_printer(_client_monitor_t *monitor); static void show_attributes(const char *title, int request, ipp_t *ipp); static void show_capabilities(ipp_t *response); static void usage(void); /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ const char *opt, /* Current option */ *uri = NULL, /* Printer URI */ *printfile = NULL, /* Print file */ *printformat = NULL; /* Print format */ int keepfile = 0, /* Keep temp file? */ grayscale = 0, /* Force grayscale? */ verbosity = 0; /* Verbosity */ char tempfile[1024] = "", /* Temporary file (if any) */ scheme[32], /* URI scheme */ userpass[256], /* Username:password */ hostname[256], /* Hostname */ resource[256]; /* Resource path */ int port; /* Port number */ http_encryption_t encryption; /* Encryption mode */ _client_monitor_t monitor; /* Monitoring data */ http_t *http; /* HTTP connection */ ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* IPP attribute */ static const char * const pattrs[] = /* Printer attributes we are interested in */ { "job-template", "printer-defaults", "printer-description", "media-col-database", "media-col-ready" }; /* * Parse command-line options... */ for (i = 1; i < argc; i ++) { if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'd' : /* -d document-format */ if (printformat) { puts("Document format can only be specified once."); usage(); return (1); } i ++; if (i >= argc) { puts("Expected document format after '-d'."); usage(); return (1); } printformat = argv[i]; break; case 'f' : /* -f print-file */ if (printfile) { puts("Print file can only be specified once."); usage(); return (1); } i ++; if (i >= argc) { puts("Expected print file after '-f'."); usage(); return (1); } printfile = argv[i]; break; case 'g' : grayscale = 1; break; case 'k' : keepfile = 1; break; case 'v' : verbosity ++; break; default : printf("Unknown option '-%c'.\n", *opt); usage(); return (1); } } } else if (uri || (strncmp(argv[i], "ipp://", 6) && strncmp(argv[i], "ipps://", 7))) { printf("Unknown command-line argument '%s'.\n", argv[i]); usage(); return (1); } else uri = argv[i]; } /* * Make sure we have everything we need. */ if (!uri) { puts("Expected printer URI."); usage(); return (1); } /* * Connect to the printer... */ if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) { printf("Bad printer URI '%s'.\n", uri); return (1); } if (!port) port = IPP_PORT; if (!strcmp(scheme, "https") || !strcmp(scheme, "ipps")) encryption = HTTP_ENCRYPTION_ALWAYS; else encryption = HTTP_ENCRYPTION_IF_REQUESTED; if ((http = httpConnect2(hostname, port, NULL, AF_UNSPEC, encryption, 1, 0, NULL)) == NULL) { printf("Unable to connect to '%s' on port %d: %s\n", hostname, port, cupsLastErrorString()); return (1); } /* * Query printer status and capabilities... */ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs); response = cupsDoRequest(http, request, resource); if (verbosity) show_capabilities(response); /* * Now figure out what we will be printing... */ if (printfile) { /* * User specified a print file, figure out the format... */ if ((opt = strrchr(printfile, '.')) != NULL) { /* * Guess the format from the extension... */ if (!strcmp(opt, ".jpg")) printformat = "image/jpeg"; else if (!strcmp(opt, ".pdf")) printformat = "application/pdf"; else if (!strcmp(opt, ".ps")) printformat = "application/postscript"; else if (!strcmp(opt, ".pwg")) printformat = "image/pwg-raster"; else if (!strcmp(opt, ".urf")) printformat = "image/urf"; else printformat = "application/octet-stream"; } else { /* * Tell the printer to auto-detect... */ printformat = "application/octet-stream"; } } else { /* * No file specified, make something to test with... */ if ((printfile = make_raster_file(response, grayscale, tempfile, sizeof(tempfile), &printformat)) == NULL) return (1); } ippDelete(response); /* * Start monitoring the printer in the background... */ memset(&monitor, 0, sizeof(monitor)); monitor.uri = uri; monitor.hostname = hostname; monitor.resource = resource; monitor.port = port; monitor.encryption = encryption; _cupsThreadCreate((_cups_thread_func_t)monitor_printer, &monitor); /* * Create the job and wait for completion... */ request = ippNewRequest(IPP_OP_CREATE_JOB); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); if ((opt = strrchr(printfile, '/')) != NULL) opt ++; else opt = printfile; ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, opt); if (verbosity) show_attributes("Create-Job request", 1, request); response = cupsDoRequest(http, request, resource); if (verbosity) show_attributes("Create-Job response", 0, response); if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE) { printf("Unable to create print job: %s\n", cupsLastErrorString()); monitor.job_state = IPP_JSTATE_ABORTED; goto cleanup; } if ((attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) == NULL) { puts("No job-id returned in Create-Job request."); monitor.job_state = IPP_JSTATE_ABORTED; goto cleanup; } monitor.job_id = ippGetInteger(attr, 0); printf("CREATED JOB %d, sending %s of type %s\n", monitor.job_id, printfile, printformat); ippDelete(response); request = ippNewRequest(IPP_OP_SEND_DOCUMENT); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", monitor.job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, printformat); ippAddBoolean(request, IPP_TAG_OPERATION, "last-document", 1); if (verbosity) show_attributes("Send-Document request", 1, request); response = cupsDoFileRequest(http, request, resource, printfile); if (verbosity) show_attributes("Send-Document response", 0, response); if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE) { printf("Unable to print file: %s\n", cupsLastErrorString()); monitor.job_state = IPP_JSTATE_ABORTED; goto cleanup; } puts("WAITING FOR JOB TO COMPLETE"); while (monitor.job_state < IPP_JSTATE_CANCELED) sleep(1); /* * Cleanup after ourselves... */ cleanup: httpClose(http); if (tempfile[0] && !keepfile) unlink(tempfile); return (monitor.job_state == IPP_JSTATE_COMPLETED); } /* * 'make_raster_file()' - Create a temporary raster file. */ static const char * /* O - Print filename */ make_raster_file(ipp_t *response, /* I - Printer attributes */ int grayscale, /* I - Force grayscale? */ char *tempname, /* I - Temporary filename buffer */ size_t tempsize, /* I - Size of temp file buffer */ const char **format) /* O - Print format */ { int i, /* Looping var */ count; /* Number of values */ ipp_attribute_t *attr; /* Printer attribute */ const char *type = NULL; /* Raster type (colorspace + bits) */ pwg_media_t *media = NULL; /* Media size */ int xdpi = 0, /* Horizontal resolution */ ydpi = 0; /* Vertical resolution */ int fd; /* Temporary file */ cups_mode_t mode; /* Raster mode */ cups_raster_t *ras; /* Raster stream */ cups_page_header2_t header; /* Page header */ unsigned char *line, /* Line of raster data */ *lineptr; /* Pointer into line */ unsigned y, /* Current position on page */ xcount, ycount, /* Current count for X and Y */ xrep, yrep, /* Repeat count for X and Y */ xoff, yoff, /* Offsets for X and Y */ yend; /* End Y value */ int temprow, /* Row in template */ tempcolor; /* Template color */ const char *template; /* Pointer into template */ const unsigned char *color; /* Current color */ static const unsigned char colors[][3] = { /* Colors for test */ { 191, 191, 191 }, { 127, 127, 127 }, { 63, 63, 63 }, { 0, 0, 0 }, { 255, 0, 0 }, { 255, 127, 0 }, { 255, 255, 0 }, { 127, 255, 0 }, { 0, 255, 0 }, { 0, 255, 127 }, { 0, 255, 255 }, { 0, 127, 255 }, { 0, 0, 255 }, { 127, 0, 255 }, { 255, 0, 255 } }; static const char * const templates[] = { /* Raster template */ " CCC U U PPPP SSS TTTTT EEEEE SSS TTTTT 000 1 222 333 4 55555 66 77777 888 999 ", "C C U U P P S S T E S S T 0 0 11 2 2 3 3 4 4 5 6 7 8 8 9 9 ", "C U U P P S T E S T 0 0 1 2 3 4 4 5 6 7 8 8 9 9 ", "C U U PPPP SSS ----- T EEEE SSS T 0 0 0 1 22 333 44444 555 6666 7 888 9999 ", "C U U P S T E S T 0 0 1 2 3 4 5 6 6 7 8 8 9 ", "C C U U P S S T E S S T 0 0 1 2 3 3 4 5 5 6 6 7 8 8 9 ", " CCC UUU P SSS T EEEEE SSS T 000 111 22222 333 4 555 666 7 888 99 ", " " }; /* * Figure out the output format... */ if ((attr = ippFindAttribute(response, "document-format-supported", IPP_TAG_MIMETYPE)) == NULL) { puts("No supported document formats, aborting."); return (NULL); } if (*format) { if (!ippContainsString(attr, *format)) { printf("Printer does not support document-format '%s'.\n", *format); return (NULL); } if (!strcmp(*format, "image/urf")) mode = CUPS_RASTER_WRITE_APPLE; else if (!strcmp(*format, "image/pwg-raster")) mode = CUPS_RASTER_WRITE_PWG; else { printf("Unable to generate document-format '%s'.\n", *format); return (NULL); } } else if (ippContainsString(attr, "image/urf")) { /* * Apple Raster format... */ *format = "image/urf"; mode = CUPS_RASTER_WRITE_APPLE; } else if (ippContainsString(attr, "image/pwg-raster")) { /* * PWG Raster format... */ *format = "image/pwg-raster"; mode = CUPS_RASTER_WRITE_PWG; } else { /* * No supported raster format... */ puts("Printer does not support Apple or PWG raster files, aborting."); return (NULL); } /* * Figure out the the media, resolution, and color mode... */ if ((attr = ippFindAttribute(response, "media-default", IPP_TAG_KEYWORD)) != NULL) { /* * Use default media... */ media = pwgMediaForPWG(ippGetString(attr, 0, NULL)); } else if ((attr = ippFindAttribute(response, "media-ready", IPP_TAG_KEYWORD)) != NULL) { /* * Use ready media... */ if (ippContainsString(attr, "na_letter_8.5x11in")) media = pwgMediaForPWG("na_letter_8.5x11in"); else if (ippContainsString(attr, "iso_a4_210x297mm")) media = pwgMediaForPWG("iso_a4_210x297mm"); else media = pwgMediaForPWG(ippGetString(attr, 0, NULL)); } else { puts("No default or ready media reported by printer, aborting."); return (NULL); } if (mode == CUPS_RASTER_WRITE_APPLE && (attr = ippFindAttribute(response, "urf-supported", IPP_TAG_KEYWORD)) != NULL) { for (i = 0, count = ippGetCount(attr); i < count; i ++) { const char *val = ippGetString(attr, i, NULL); if (!strncmp(val, "RS", 2)) xdpi = ydpi = atoi(val + 2); else if (!strncmp(val, "W8", 2) && !type) type = "sgray_8"; else if (!strncmp(val, "SRGB24", 6) && !grayscale) type = "srgb_8"; } } else if (mode == CUPS_RASTER_WRITE_PWG && (attr = ippFindAttribute(response, "pwg-raster-document-resolution-supported", IPP_TAG_RESOLUTION)) != NULL) { for (i = 0, count = ippGetCount(attr); i < count; i ++) { int tempxdpi, tempydpi; ipp_res_t tempunits; tempxdpi = ippGetResolution(attr, 0, &tempydpi, &tempunits); if (i == 0 || tempxdpi < xdpi || tempydpi < ydpi) { xdpi = tempxdpi; ydpi = tempydpi; } } if ((attr = ippFindAttribute(response, "pwg-raster-document-type-supported", IPP_TAG_KEYWORD)) != NULL) { if (!grayscale && ippContainsString(attr, "srgb_8")) type = "srgb_8"; else if (ippContainsString(attr, "sgray_8")) type = "sgray_8"; } } if (xdpi < 72 || ydpi < 72) { puts("No supported raster resolutions, aborting."); return (NULL); } if (!type) { puts("No supported color spaces or bit depths, aborting."); return (NULL); } /* * Make the raster context and details... */ if (!cupsRasterInitPWGHeader(&header, media, type, xdpi, ydpi, "one-sided", NULL)) { printf("Unable to initialize raster context: %s\n", cupsRasterErrorString()); return (NULL); } header.cupsInteger[CUPS_RASTER_PWG_TotalPageCount] = 1; if (header.cupsWidth > (4 * header.HWResolution[0])) { xoff = header.HWResolution[0] / 2; yoff = header.HWResolution[1] / 2; } else { xoff = 0; yoff = 0; } xrep = (header.cupsWidth - 2 * xoff) / 140; yrep = xrep * header.HWResolution[1] / header.HWResolution[0]; yend = header.cupsHeight - yoff; /* * Prepare the raster file... */ if ((line = malloc(header.cupsBytesPerLine)) == NULL) { printf("Unable to allocate %u bytes for raster output: %s\n", header.cupsBytesPerLine, strerror(errno)); return (NULL); } if ((fd = cupsTempFd(tempname, (int)tempsize)) < 0) { printf("Unable to create temporary print file: %s\n", strerror(errno)); return (NULL); } if ((ras = cupsRasterOpen(fd, mode)) == NULL) { printf("Unable to open raster stream: %s\n", cupsRasterErrorString()); close(fd); return (NULL); } /* * Write a single page consisting of the template dots repeated over the page. */ cupsRasterWriteHeader2(ras, &header); memset(line, 0xff, header.cupsBytesPerLine); for (y = 0; y < yoff; y ++) cupsRasterWritePixels(ras, line, header.cupsBytesPerLine); for (temprow = 0, tempcolor = 0; y < yend;) { template = templates[temprow]; color = colors[tempcolor]; temprow ++; if (temprow >= (int)(sizeof(templates) / sizeof(templates[0]))) { temprow = 0; tempcolor ++; if (tempcolor >= (int)(sizeof(colors) / sizeof(colors[0]))) tempcolor = 0; else if (tempcolor > 3 && header.cupsColorSpace == CUPS_CSPACE_SW) tempcolor = 0; } memset(line, 0xff, header.cupsBytesPerLine); if (header.cupsColorSpace == CUPS_CSPACE_SW) { /* * Do grayscale output... */ for (lineptr = line + xoff; *template; template ++) { if (*template != ' ') { for (xcount = xrep; xcount > 0; xcount --) *lineptr++ = *color; } else { lineptr += xrep; } } } else { /* * Do color output... */ for (lineptr = line + 3 * xoff; *template; template ++) { if (*template != ' ') { for (xcount = xrep; xcount > 0; xcount --, lineptr += 3) memcpy(lineptr, color, 3); } else { lineptr += 3 * xrep; } } } for (ycount = yrep; ycount > 0 && y < yend; ycount --, y ++) cupsRasterWritePixels(ras, line, header.cupsBytesPerLine); } memset(line, 0xff, header.cupsBytesPerLine); for (y = 0; y < header.cupsHeight; y ++) cupsRasterWritePixels(ras, line, header.cupsBytesPerLine); cupsRasterClose(ras); close(fd); printf("PRINT FILE: %s\n", tempname); return (tempname); } /* * 'monitor_printer()' - Monitor the job and printer states. */ static void * /* O - Thread exit code */ monitor_printer( _client_monitor_t *monitor) /* I - Monitoring data */ { http_t *http; /* Connection to printer */ ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* Attribute in response */ ipp_pstate_t printer_state; /* Printer state */ char printer_state_reasons[1024]; /* Printer state reasons */ ipp_jstate_t job_state; /* Job state */ char job_state_reasons[1024];/* Printer state reasons */ static const char * const jattrs[] = /* Job attributes we want */ { "job-state", "job-state-reasons" }; static const char * const pattrs[] = /* Printer attributes we want */ { "printer-state", "printer-state-reasons" }; /* * Open a connection to the printer... */ http = httpConnect2(monitor->hostname, monitor->port, NULL, AF_UNSPEC, monitor->encryption, 1, 0, NULL); /* * Loop until the job is canceled, aborted, or completed. */ printer_state = (ipp_pstate_t)0; printer_state_reasons[0] = '\0'; job_state = (ipp_jstate_t)0; job_state_reasons[0] = '\0'; while (monitor->job_state < IPP_JSTATE_CANCELED) { /* * Reconnect to the printer as needed... */ if (httpGetFd(http) < 0) httpReconnect2(http, 30000, NULL); if (httpGetFd(http) >= 0) { /* * Connected, so check on the printer state... */ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, monitor->uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs); response = cupsDoRequest(http, request, monitor->resource); if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL) printer_state = (ipp_pstate_t)ippGetInteger(attr, 0); if ((attr = ippFindAttribute(response, "printer-state-reasons", IPP_TAG_KEYWORD)) != NULL) ippAttributeString(attr, printer_state_reasons, sizeof(printer_state_reasons)); if (printer_state != monitor->printer_state || strcmp(printer_state_reasons, monitor->printer_state_reasons)) { printf("PRINTER: %s (%s)\n", ippEnumString("printer-state", printer_state), printer_state_reasons); monitor->printer_state = printer_state; strlcpy(monitor->printer_state_reasons, printer_state_reasons, sizeof(monitor->printer_state_reasons)); } ippDelete(response); if (monitor->job_id > 0) { /* * Check the status of the job itself... */ request = ippNewRequest(IPP_OP_GET_JOB_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, monitor->uri); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", monitor->job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(jattrs) / sizeof(jattrs[0])), NULL, jattrs); response = cupsDoRequest(http, request, monitor->resource); if ((attr = ippFindAttribute(response, "job-state", IPP_TAG_ENUM)) != NULL) job_state = (ipp_jstate_t)ippGetInteger(attr, 0); if ((attr = ippFindAttribute(response, "job-state-reasons", IPP_TAG_KEYWORD)) != NULL) ippAttributeString(attr, job_state_reasons, sizeof(job_state_reasons)); if (job_state != monitor->job_state || strcmp(job_state_reasons, monitor->job_state_reasons)) { printf("JOB %d: %s (%s)\n", monitor->job_id, ippEnumString("job-state", job_state), job_state_reasons); monitor->job_state = job_state; strlcpy(monitor->job_state_reasons, job_state_reasons, sizeof(monitor->job_state_reasons)); } ippDelete(response); } } if (monitor->job_state < IPP_JSTATE_CANCELED) { /* * Sleep for 5 seconds... */ sleep(5); } } /* * Cleanup and return... */ httpClose(http); return (NULL); } /* * 'show_attributes()' - Show attributes in a request or response. */ static void show_attributes(const char *title, /* I - Title */ int request, /* I - 1 for request, 0 for response */ ipp_t *ipp) /* I - IPP request/response */ { int minor, major = ippGetVersion(ipp, &minor); /* IPP version number */ ipp_tag_t group = IPP_TAG_ZERO; /* Current group tag */ ipp_attribute_t *attr; /* Current attribute */ const char *name; /* Attribute name */ char buffer[1024]; /* Value */ printf("%s:\n", title); printf(" version=%d.%d\n", major, minor); printf(" request-id=%d\n", ippGetRequestId(ipp)); if (!request) printf(" status-code=%s\n", ippErrorString(ippGetStatusCode(ipp))); for (attr = ippFirstAttribute(ipp); attr; attr = ippNextAttribute(ipp)) { if (group != ippGetGroupTag(attr)) { group = ippGetGroupTag(attr); if (group) printf(" %s:\n", ippTagString(group)); } if ((name = ippGetName(attr)) != NULL) { ippAttributeString(attr, buffer, sizeof(buffer)); printf(" %s(%s%s)=%s\n", name, ippGetCount(attr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attr)), buffer); } } } /* * 'show_capabilities()' - Show printer capabilities. */ static void show_capabilities(ipp_t *response) /* I - Printer attributes */ { int i; /* Looping var */ ipp_attribute_t *attr; /* Attribute */ char buffer[1024]; /* Attribute value buffer */ static const char * const pattrs[] = /* Attributes we want to show */ { "copies-default", "copies-supported", "finishings-default", "finishings-ready", "finishings-supported", "media-default", "media-ready", "media-supported", "output-bin-default", "output-bin-supported", "print-color-mode-default", "print-color-mode-supported", "sides-default", "sides-supported", "document-format-default", "document-format-supported", "pwg-raster-document-resolution-supported", "pwg-raster-document-type-supported", "urf-supported" }; puts("CAPABILITIES:"); for (i = 0; i < (int)(sizeof(pattrs) / sizeof(pattrs[0])); i ++) { if ((attr = ippFindAttribute(response, pattrs[i], IPP_TAG_ZERO)) != NULL) { ippAttributeString(attr, buffer, sizeof(buffer)); printf(" %s=%s\n", pattrs[i], buffer); } } } /* * 'usage()' - Show program usage... */ static void usage(void) { puts("Usage: ./testclient printer-uri [options]"); puts("Options:"); puts(" -d document-format Generate the specified format"); puts(" -f print-file Print the named file"); puts(" -g Force grayscale printing"); puts(" -k Keep temporary files"); puts(" -v Be more verbose"); } cups-2.2.7/filter/testraster.c000664 000765 000024 00000071264 13255074424 017016 0ustar00msweetstaff000000 000000 /* * Raster test program routines for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include #include /* * Test PS commands and header... */ static const char *dsc_code = "[{\n" "%%BeginFeature: *PageSize Tabloid\n" "<>setpagedevice\n" "%%EndFeature\n" "} stopped cleartomark\n"; static const char *setpagedevice_code = "<<" "/MediaClass(Media Class)" "/MediaColor((Media Color))" "/MediaType(Media\\\\Type)" "/OutputType<416263>" "/AdvanceDistance 1000" "/AdvanceMedia 1" "/Collate false" "/CutMedia 2" "/Duplex true" "/HWResolution[100 200]" "/InsertSheet true" "/Jog 3" "/LeadingEdge 1" "/ManualFeed true" "/MediaPosition 8#777" "/MediaWeight 16#fe01" "/MirrorPrint true" "/NegativePrint true" "/NumCopies 1" "/Orientation 1" "/OutputFaceUp true" "/PageSize[612 792.1]" "/Separations true" "/TraySwitch true" "/Tumble true" "/cupsMediaType 2" "/cupsColorOrder 1" "/cupsColorSpace 1" "/cupsCompression 1" "/cupsRowCount 1" "/cupsRowFeed 1" "/cupsRowStep 1" "/cupsBorderlessScalingFactor 1.001" "/cupsInteger0 1" "/cupsInteger1 2" "/cupsInteger2 3" "/cupsInteger3 4" "/cupsInteger4 5" "/cupsInteger5 6" "/cupsInteger6 7" "/cupsInteger7 8" "/cupsInteger8 9" "/cupsInteger9 10" "/cupsInteger10 11" "/cupsInteger11 12" "/cupsInteger12 13" "/cupsInteger13 14" "/cupsInteger14 15" "/cupsInteger15 16" "/cupsReal0 1.1" "/cupsReal1 2.1" "/cupsReal2 3.1" "/cupsReal3 4.1" "/cupsReal4 5.1" "/cupsReal5 6.1" "/cupsReal6 7.1" "/cupsReal7 8.1" "/cupsReal8 9.1" "/cupsReal9 10.1" "/cupsReal10 11.1" "/cupsReal11 12.1" "/cupsReal12 13.1" "/cupsReal13 14.1" "/cupsReal14 15.1" "/cupsReal15 16.1" "/cupsString0(1)" "/cupsString1(2)" "/cupsString2(3)" "/cupsString3(4)" "/cupsString4(5)" "/cupsString5(6)" "/cupsString6(7)" "/cupsString7(8)" "/cupsString8(9)" "/cupsString9(10)" "/cupsString10(11)" "/cupsString11(12)" "/cupsString12(13)" "/cupsString13(14)" "/cupsString14(15)" "/cupsString15(16)" "/cupsMarkerType(Marker Type)" "/cupsRenderingIntent(Rendering Intent)" "/cupsPageSizeName(Letter)" "/cupsPreferredBitsPerColor 17" ">> setpagedevice"; static cups_page_header2_t setpagedevice_header = { "Media Class", /* MediaClass */ "(Media Color)", /* MediaColor */ "Media\\Type", /* MediaType */ "Abc", /* OutputType */ 1000, /* AdvanceDistance */ CUPS_ADVANCE_FILE, /* AdvanceMedia */ CUPS_FALSE, /* Collate */ CUPS_CUT_JOB, /* CutMedia */ CUPS_TRUE, /* Duplex */ { 100, 200 }, /* HWResolution */ { 0, 0, 0, 0 }, /* ImagingBoundingBox */ CUPS_TRUE, /* InsertSheet */ CUPS_JOG_SET, /* Jog */ CUPS_EDGE_RIGHT, /* LeadingEdge */ { 0, 0 }, /* Margins */ CUPS_TRUE, /* ManualFeed */ 0777, /* MediaPosition */ 0xfe01, /* MediaWeight */ CUPS_TRUE, /* MirrorPrint */ CUPS_TRUE, /* NegativePrint */ 1, /* NumCopies */ CUPS_ORIENT_90, /* Orientation */ CUPS_TRUE, /* OutputFaceUp */ { 612, 792 }, /* PageSize */ CUPS_TRUE, /* Separations */ CUPS_TRUE, /* TraySwitch */ CUPS_TRUE, /* Tumble */ 0, /* cupsWidth */ 0, /* cupsHeight */ 2, /* cupsMediaType */ 0, /* cupsBitsPerColor */ 0, /* cupsBitsPerPixel */ 0, /* cupsBytesPerLine */ CUPS_ORDER_BANDED, /* cupsColorOrder */ CUPS_CSPACE_RGB, /* cupsColorSpace */ 1, /* cupsCompression */ 1, /* cupsRowCount */ 1, /* cupsRowFeed */ 1, /* cupsRowStep */ 0, /* cupsNumColors */ 1.001f, /* cupsBorderlessScalingFactor */ { 612.0f, 792.1f }, /* cupsPageSize */ { 0.0f, 0.0f, 0.0f, 0.0f }, /* cupsImagingBBox */ { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }, /* cupsInteger[16] */ { 1.1f, 2.1f, 3.1f, 4.1f, 5.1f, 6.1f, 7.1f, 8.1f, 9.1f, 10.1f, 11.1f, 12.1f, 13.1f, 14.1f, 15.1f, 16.1f }, /* cupsReal[16] */ { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16" }, /* cupsString[16] */ "Marker Type", /* cupsMarkerType */ "Rendering Intent", /* cupsRenderingIntent */ "Letter" /* cupsPageSizeName */ }; /* * Local functions... */ static int do_ppd_tests(const char *filename, int num_options, cups_option_t *options); static int do_ps_tests(void); static int do_ras_file(const char *filename); static int do_raster_tests(cups_mode_t mode); static void print_changes(cups_page_header2_t *header, cups_page_header2_t *expected); /* * 'main()' - Test the raster functions. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int errors; /* Number of errors */ const char *ext; /* Filename extension */ if (argc == 1) { errors = do_ps_tests(); errors += do_raster_tests(CUPS_RASTER_WRITE); errors += do_raster_tests(CUPS_RASTER_WRITE_COMPRESSED); errors += do_raster_tests(CUPS_RASTER_WRITE_PWG); errors += do_raster_tests(CUPS_RASTER_WRITE_APPLE); } else { int i; /* Looping var */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ for (errors = 0, num_options = 0, options = NULL, i = 1; i < argc; i ++) { if (argv[i][0] == '-') { if (argv[i][1] == 'o') { if (argv[i][2]) num_options = cupsParseOptions(argv[i] + 2, num_options, &options); else { i ++; if (i < argc) num_options = cupsParseOptions(argv[i], num_options, &options); else { puts("Usage: testraster [-o name=value ...] [filename.ppd ...]"); puts(" testraster [filename.ras ...]"); return (1); } } } else { puts("Usage: testraster [-o name=value ...] [filename.ppd ...]"); puts(" testraster [filename.ras ...]"); return (1); } } else if ((ext = strrchr(argv[i], '.')) != NULL) { if (!strcmp(ext, ".ppd")) errors += do_ppd_tests(argv[i], num_options, options); else errors += do_ras_file(argv[i]); } else { puts("Usage: testraster [-o name=value ...] [filename.ppd ...]"); puts(" testraster [filename.ras ...]"); return (1); } } cupsFreeOptions(num_options, options); } return (errors); } /* * 'do_ppd_tests()' - Test the default option commands in a PPD file. */ static int /* O - Number of errors */ do_ppd_tests(const char *filename, /* I - PPD file */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { ppd_file_t *ppd; /* PPD file data */ cups_page_header2_t header; /* Page header */ printf("\"%s\": ", filename); fflush(stdout); if ((ppd = ppdOpenFile(filename)) == NULL) { ppd_status_t status; /* Status from PPD loader */ int line; /* Line number containing error */ status = ppdLastError(&line); puts("FAIL (bad PPD file)"); printf(" %s on line %d\n", ppdErrorString(status), line); return (1); } ppdMarkDefaults(ppd); cupsMarkOptions(ppd, num_options, options); if (cupsRasterInterpretPPD(&header, ppd, 0, NULL, NULL)) { puts("FAIL (error from function)"); puts(cupsRasterErrorString()); return (1); } else { puts("PASS"); return (0); } } /* * 'do_ps_tests()' - Test standard PostScript commands. */ static int do_ps_tests(void) { cups_page_header2_t header; /* Page header */ int preferred_bits; /* Preferred bits */ int errors = 0; /* Number of errors */ /* * Test PS exec code... */ fputs("_cupsRasterExecPS(\"setpagedevice\"): ", stdout); fflush(stdout); memset(&header, 0, sizeof(header)); header.Collate = CUPS_TRUE; preferred_bits = 0; if (_cupsRasterExecPS(&header, &preferred_bits, setpagedevice_code)) { puts("FAIL (error from function)"); puts(cupsRasterErrorString()); errors ++; } else if (preferred_bits != 17 || memcmp(&header, &setpagedevice_header, sizeof(header))) { puts("FAIL (bad header)"); if (preferred_bits != 17) printf(" cupsPreferredBitsPerColor %d, expected 17\n", preferred_bits); print_changes(&setpagedevice_header, &header); errors ++; } else puts("PASS"); fputs("_cupsRasterExecPS(\"roll\"): ", stdout); fflush(stdout); if (_cupsRasterExecPS(&header, &preferred_bits, "792 612 0 0 0\n" "pop pop pop\n" "<>" "setpagedevice\n")) { puts("FAIL (error from function)"); puts(cupsRasterErrorString()); errors ++; } else if (header.PageSize[0] != 792 || header.PageSize[1] != 612) { printf("FAIL (PageSize [%d %d], expected [792 612])\n", header.PageSize[0], header.PageSize[1]); errors ++; } else puts("PASS"); fputs("_cupsRasterExecPS(\"dup index\"): ", stdout); fflush(stdout); if (_cupsRasterExecPS(&header, &preferred_bits, "true false dup\n" "<>setpagedevice\n" "pop pop pop")) { puts("FAIL (error from function)"); puts(cupsRasterErrorString()); errors ++; } else { if (!header.Collate) { printf("FAIL (Collate false, expected true)\n"); errors ++; } if (header.Duplex) { printf("FAIL (Duplex true, expected false)\n"); errors ++; } if (header.Tumble) { printf("FAIL (Tumble true, expected false)\n"); errors ++; } if(header.Collate && !header.Duplex && !header.Tumble) puts("PASS"); } fputs("_cupsRasterExecPS(\"%%Begin/EndFeature code\"): ", stdout); fflush(stdout); if (_cupsRasterExecPS(&header, &preferred_bits, dsc_code)) { puts("FAIL (error from function)"); puts(cupsRasterErrorString()); errors ++; } else if (header.PageSize[0] != 792 || header.PageSize[1] != 1224) { printf("FAIL (bad PageSize [%d %d], expected [792 1224])\n", header.PageSize[0], header.PageSize[1]); errors ++; } else puts("PASS"); return (errors); } /* * 'do_ras_file()' - Test reading of a raster file. */ static int /* O - Number of errors */ do_ras_file(const char *filename) /* I - Filename */ { unsigned y; /* Looping vars */ int fd; /* File descriptor */ cups_raster_t *ras; /* Raster stream */ cups_page_header2_t header; /* Page header */ unsigned char *data; /* Raster data */ int errors = 0; /* Number of errors */ unsigned pages = 0; /* Number of pages */ if ((fd = open(filename, O_RDONLY)) < 0) { printf("%s: %s\n", filename, strerror(errno)); return (1); } if ((ras = cupsRasterOpen(fd, CUPS_RASTER_READ)) == NULL) { printf("%s: cupsRasterOpen failed.\n", filename); close(fd); return (1); } printf("%s:\n", filename); while (cupsRasterReadHeader2(ras, &header)) { pages ++; data = malloc(header.cupsBytesPerLine); printf(" Page %u: %ux%ux%u@%ux%udpi", pages, header.cupsWidth, header.cupsHeight, header.cupsBitsPerPixel, header.HWResolution[0], header.HWResolution[1]); fflush(stdout); for (y = 0; y < header.cupsHeight; y ++) if (cupsRasterReadPixels(ras, data, header.cupsBytesPerLine) < header.cupsBytesPerLine) break; if (y < header.cupsHeight) printf(" ERROR AT LINE %d\n", y); else putchar('\n'); free(data); } printf("EOF at %ld\n", (long)lseek(fd, SEEK_CUR, 0)); cupsRasterClose(ras); close(fd); return (errors); } /* * 'do_raster_tests()' - Test reading and writing of raster data. */ static int /* O - Number of errors */ do_raster_tests(cups_mode_t mode) /* O - Write mode */ { unsigned page, x, y; /* Looping vars */ FILE *fp; /* Raster file */ cups_raster_t *r; /* Raster stream */ cups_page_header2_t header, /* Page header */ expected; /* Expected page header */ unsigned char data[2048]; /* Raster data */ int errors = 0; /* Number of errors */ /* * Test writing... */ printf("cupsRasterOpen(%s): ", mode == CUPS_RASTER_WRITE ? "CUPS_RASTER_WRITE" : mode == CUPS_RASTER_WRITE_COMPRESSED ? "CUPS_RASTER_WRITE_COMPRESSED" : mode == CUPS_RASTER_WRITE_PWG ? "CUPS_RASTER_WRITE_PWG" : "CUPS_RASTER_WRITE_APPLE"); fflush(stdout); if ((fp = fopen("test.raster", "wb")) == NULL) { printf("FAIL (%s)\n", strerror(errno)); return (1); } if ((r = cupsRasterOpen(fileno(fp), mode)) == NULL) { printf("FAIL (%s)\n", strerror(errno)); fclose(fp); return (1); } puts("PASS"); for (page = 0; page < 4; page ++) { memset(&header, 0, sizeof(header)); header.cupsWidth = 256; header.cupsHeight = 256; header.cupsBytesPerLine = 256; header.HWResolution[0] = 64; header.HWResolution[1] = 64; header.PageSize[0] = 288; header.PageSize[1] = 288; header.cupsPageSize[0] = 288.0f; header.cupsPageSize[1] = 288.0f; if (page & 1) { header.cupsBytesPerLine *= 4; header.cupsColorSpace = CUPS_CSPACE_CMYK; header.cupsColorOrder = CUPS_ORDER_CHUNKED; header.cupsNumColors = 4; } else { header.cupsColorSpace = CUPS_CSPACE_W; header.cupsColorOrder = CUPS_ORDER_CHUNKED; header.cupsNumColors = 1; } if (page & 2) { header.cupsBytesPerLine *= 2; header.cupsBitsPerColor = 16; header.cupsBitsPerPixel = (page & 1) ? 64 : 16; } else { header.cupsBitsPerColor = 8; header.cupsBitsPerPixel = (page & 1) ? 32 : 8; } if (cupsRasterWriteHeader2(r, &header)) puts("cupsRasterWriteHeader2: PASS"); else { puts("cupsRasterWriteHeader2: FAIL"); errors ++; } fputs("cupsRasterWritePixels: ", stdout); fflush(stdout); memset(data, 0, header.cupsBytesPerLine); for (y = 0; y < 64; y ++) if (!cupsRasterWritePixels(r, data, header.cupsBytesPerLine)) break; if (y < 64) { puts("FAIL"); errors ++; } else { for (x = 0; x < header.cupsBytesPerLine; x ++) data[x] = (unsigned char)x; for (y = 0; y < 64; y ++) if (!cupsRasterWritePixels(r, data, header.cupsBytesPerLine)) break; if (y < 64) { puts("FAIL"); errors ++; } else { memset(data, 255, header.cupsBytesPerLine); for (y = 0; y < 64; y ++) if (!cupsRasterWritePixels(r, data, header.cupsBytesPerLine)) break; if (y < 64) { puts("FAIL"); errors ++; } else { for (x = 0; x < header.cupsBytesPerLine; x ++) data[x] = (unsigned char)(x / 4); for (y = 0; y < 64; y ++) if (!cupsRasterWritePixels(r, data, header.cupsBytesPerLine)) break; if (y < 64) { puts("FAIL"); errors ++; } else puts("PASS"); } } } } cupsRasterClose(r); fclose(fp); /* * Test reading... */ fputs("cupsRasterOpen(CUPS_RASTER_READ): ", stdout); fflush(stdout); if ((fp = fopen("test.raster", "rb")) == NULL) { printf("FAIL (%s)\n", strerror(errno)); return (1); } if ((r = cupsRasterOpen(fileno(fp), CUPS_RASTER_READ)) == NULL) { printf("FAIL (%s)\n", strerror(errno)); fclose(fp); return (1); } puts("PASS"); for (page = 0; page < 4; page ++) { memset(&expected, 0, sizeof(expected)); expected.cupsWidth = 256; expected.cupsHeight = 256; expected.cupsBytesPerLine = 256; expected.HWResolution[0] = 64; expected.HWResolution[1] = 64; expected.PageSize[0] = 288; expected.PageSize[1] = 288; if (mode != CUPS_RASTER_WRITE_PWG) { expected.cupsPageSize[0] = 288.0f; expected.cupsPageSize[1] = 288.0f; } if (mode >= CUPS_RASTER_WRITE_PWG) { strlcpy(expected.MediaClass, "PwgRaster", sizeof(expected.MediaClass)); expected.cupsInteger[7] = 0xffffff; } if (page & 1) { expected.cupsBytesPerLine *= 4; expected.cupsColorSpace = CUPS_CSPACE_CMYK; expected.cupsColorOrder = CUPS_ORDER_CHUNKED; expected.cupsNumColors = 4; } else { expected.cupsColorSpace = CUPS_CSPACE_W; expected.cupsColorOrder = CUPS_ORDER_CHUNKED; expected.cupsNumColors = 1; } if (page & 2) { expected.cupsBytesPerLine *= 2; expected.cupsBitsPerColor = 16; expected.cupsBitsPerPixel = (page & 1) ? 64 : 16; } else { expected.cupsBitsPerColor = 8; expected.cupsBitsPerPixel = (page & 1) ? 32 : 8; } fputs("cupsRasterReadHeader2: ", stdout); fflush(stdout); if (!cupsRasterReadHeader2(r, &header)) { puts("FAIL (read error)"); errors ++; break; } if (memcmp(&header, &expected, sizeof(header))) { puts("FAIL (bad page header)"); errors ++; print_changes(&header, &expected); } fputs("cupsRasterReadPixels: ", stdout); fflush(stdout); for (y = 0; y < 64; y ++) { if (!cupsRasterReadPixels(r, data, header.cupsBytesPerLine)) { puts("FAIL (read error)"); errors ++; break; } if (data[0] != 0 || memcmp(data, data + 1, header.cupsBytesPerLine - 1)) { printf("FAIL (raster line %d corrupt)\n", y); errors ++; break; } } if (y == 64) { for (y = 0; y < 64; y ++) { if (!cupsRasterReadPixels(r, data, header.cupsBytesPerLine)) { puts("FAIL (read error)"); errors ++; break; } for (x = 0; x < header.cupsBytesPerLine; x ++) if (data[x] != (x & 255)) break; if (x < header.cupsBytesPerLine) { printf("FAIL (raster line %d corrupt)\n", y + 64); errors ++; break; } } if (y == 64) { for (y = 0; y < 64; y ++) { if (!cupsRasterReadPixels(r, data, header.cupsBytesPerLine)) { puts("FAIL (read error)"); errors ++; break; } if (data[0] != 255 || memcmp(data, data + 1, header.cupsBytesPerLine - 1)) { printf("fail (raster line %d corrupt)\n", y + 128); errors ++; break; } } if (y == 64) { for (y = 0; y < 64; y ++) { if (!cupsRasterReadPixels(r, data, header.cupsBytesPerLine)) { puts("FAIL (read error)"); errors ++; break; } for (x = 0; x < header.cupsBytesPerLine; x ++) if (data[x] != ((x / 4) & 255)) break; if (x < header.cupsBytesPerLine) { printf("FAIL (raster line %d corrupt)\n", y + 192); errors ++; break; } } if (y == 64) puts("PASS"); } } } } cupsRasterClose(r); fclose(fp); return (errors); } /* * 'print_changes()' - Print differences in the page header. */ static void print_changes( cups_page_header2_t *header, /* I - Actual page header */ cups_page_header2_t *expected) /* I - Expected page header */ { int i; /* Looping var */ if (strcmp(header->MediaClass, expected->MediaClass)) printf(" MediaClass (%s), expected (%s)\n", header->MediaClass, expected->MediaClass); if (strcmp(header->MediaColor, expected->MediaColor)) printf(" MediaColor (%s), expected (%s)\n", header->MediaColor, expected->MediaColor); if (strcmp(header->MediaType, expected->MediaType)) printf(" MediaType (%s), expected (%s)\n", header->MediaType, expected->MediaType); if (strcmp(header->OutputType, expected->OutputType)) printf(" OutputType (%s), expected (%s)\n", header->OutputType, expected->OutputType); if (header->AdvanceDistance != expected->AdvanceDistance) printf(" AdvanceDistance %d, expected %d\n", header->AdvanceDistance, expected->AdvanceDistance); if (header->AdvanceMedia != expected->AdvanceMedia) printf(" AdvanceMedia %d, expected %d\n", header->AdvanceMedia, expected->AdvanceMedia); if (header->Collate != expected->Collate) printf(" Collate %d, expected %d\n", header->Collate, expected->Collate); if (header->CutMedia != expected->CutMedia) printf(" CutMedia %d, expected %d\n", header->CutMedia, expected->CutMedia); if (header->Duplex != expected->Duplex) printf(" Duplex %d, expected %d\n", header->Duplex, expected->Duplex); if (header->HWResolution[0] != expected->HWResolution[0] || header->HWResolution[1] != expected->HWResolution[1]) printf(" HWResolution [%d %d], expected [%d %d]\n", header->HWResolution[0], header->HWResolution[1], expected->HWResolution[0], expected->HWResolution[1]); if (memcmp(header->ImagingBoundingBox, expected->ImagingBoundingBox, sizeof(header->ImagingBoundingBox))) printf(" ImagingBoundingBox [%d %d %d %d], expected [%d %d %d %d]\n", header->ImagingBoundingBox[0], header->ImagingBoundingBox[1], header->ImagingBoundingBox[2], header->ImagingBoundingBox[3], expected->ImagingBoundingBox[0], expected->ImagingBoundingBox[1], expected->ImagingBoundingBox[2], expected->ImagingBoundingBox[3]); if (header->InsertSheet != expected->InsertSheet) printf(" InsertSheet %d, expected %d\n", header->InsertSheet, expected->InsertSheet); if (header->Jog != expected->Jog) printf(" Jog %d, expected %d\n", header->Jog, expected->Jog); if (header->LeadingEdge != expected->LeadingEdge) printf(" LeadingEdge %d, expected %d\n", header->LeadingEdge, expected->LeadingEdge); if (header->Margins[0] != expected->Margins[0] || header->Margins[1] != expected->Margins[1]) printf(" Margins [%d %d], expected [%d %d]\n", header->Margins[0], header->Margins[1], expected->Margins[0], expected->Margins[1]); if (header->ManualFeed != expected->ManualFeed) printf(" ManualFeed %d, expected %d\n", header->ManualFeed, expected->ManualFeed); if (header->MediaPosition != expected->MediaPosition) printf(" MediaPosition %d, expected %d\n", header->MediaPosition, expected->MediaPosition); if (header->MediaWeight != expected->MediaWeight) printf(" MediaWeight %d, expected %d\n", header->MediaWeight, expected->MediaWeight); if (header->MirrorPrint != expected->MirrorPrint) printf(" MirrorPrint %d, expected %d\n", header->MirrorPrint, expected->MirrorPrint); if (header->NegativePrint != expected->NegativePrint) printf(" NegativePrint %d, expected %d\n", header->NegativePrint, expected->NegativePrint); if (header->NumCopies != expected->NumCopies) printf(" NumCopies %d, expected %d\n", header->NumCopies, expected->NumCopies); if (header->Orientation != expected->Orientation) printf(" Orientation %d, expected %d\n", header->Orientation, expected->Orientation); if (header->OutputFaceUp != expected->OutputFaceUp) printf(" OutputFaceUp %d, expected %d\n", header->OutputFaceUp, expected->OutputFaceUp); if (header->PageSize[0] != expected->PageSize[0] || header->PageSize[1] != expected->PageSize[1]) printf(" PageSize [%d %d], expected [%d %d]\n", header->PageSize[0], header->PageSize[1], expected->PageSize[0], expected->PageSize[1]); if (header->Separations != expected->Separations) printf(" Separations %d, expected %d\n", header->Separations, expected->Separations); if (header->TraySwitch != expected->TraySwitch) printf(" TraySwitch %d, expected %d\n", header->TraySwitch, expected->TraySwitch); if (header->Tumble != expected->Tumble) printf(" Tumble %d, expected %d\n", header->Tumble, expected->Tumble); if (header->cupsWidth != expected->cupsWidth) printf(" cupsWidth %d, expected %d\n", header->cupsWidth, expected->cupsWidth); if (header->cupsHeight != expected->cupsHeight) printf(" cupsHeight %d, expected %d\n", header->cupsHeight, expected->cupsHeight); if (header->cupsMediaType != expected->cupsMediaType) printf(" cupsMediaType %d, expected %d\n", header->cupsMediaType, expected->cupsMediaType); if (header->cupsBitsPerColor != expected->cupsBitsPerColor) printf(" cupsBitsPerColor %d, expected %d\n", header->cupsBitsPerColor, expected->cupsBitsPerColor); if (header->cupsBitsPerPixel != expected->cupsBitsPerPixel) printf(" cupsBitsPerPixel %d, expected %d\n", header->cupsBitsPerPixel, expected->cupsBitsPerPixel); if (header->cupsBytesPerLine != expected->cupsBytesPerLine) printf(" cupsBytesPerLine %d, expected %d\n", header->cupsBytesPerLine, expected->cupsBytesPerLine); if (header->cupsColorOrder != expected->cupsColorOrder) printf(" cupsColorOrder %d, expected %d\n", header->cupsColorOrder, expected->cupsColorOrder); if (header->cupsColorSpace != expected->cupsColorSpace) printf(" cupsColorSpace %d, expected %d\n", header->cupsColorSpace, expected->cupsColorSpace); if (header->cupsCompression != expected->cupsCompression) printf(" cupsCompression %d, expected %d\n", header->cupsCompression, expected->cupsCompression); if (header->cupsRowCount != expected->cupsRowCount) printf(" cupsRowCount %d, expected %d\n", header->cupsRowCount, expected->cupsRowCount); if (header->cupsRowFeed != expected->cupsRowFeed) printf(" cupsRowFeed %d, expected %d\n", header->cupsRowFeed, expected->cupsRowFeed); if (header->cupsRowStep != expected->cupsRowStep) printf(" cupsRowStep %d, expected %d\n", header->cupsRowStep, expected->cupsRowStep); if (header->cupsNumColors != expected->cupsNumColors) printf(" cupsNumColors %d, expected %d\n", header->cupsNumColors, expected->cupsNumColors); if (fabs(header->cupsBorderlessScalingFactor - expected->cupsBorderlessScalingFactor) > 0.001) printf(" cupsBorderlessScalingFactor %g, expected %g\n", header->cupsBorderlessScalingFactor, expected->cupsBorderlessScalingFactor); if (fabs(header->cupsPageSize[0] - expected->cupsPageSize[0]) > 0.001 || fabs(header->cupsPageSize[1] - expected->cupsPageSize[1]) > 0.001) printf(" cupsPageSize [%g %g], expected [%g %g]\n", header->cupsPageSize[0], header->cupsPageSize[1], expected->cupsPageSize[0], expected->cupsPageSize[1]); if (fabs(header->cupsImagingBBox[0] - expected->cupsImagingBBox[0]) > 0.001 || fabs(header->cupsImagingBBox[1] - expected->cupsImagingBBox[1]) > 0.001 || fabs(header->cupsImagingBBox[2] - expected->cupsImagingBBox[2]) > 0.001 || fabs(header->cupsImagingBBox[3] - expected->cupsImagingBBox[3]) > 0.001) printf(" cupsImagingBBox [%g %g %g %g], expected [%g %g %g %g]\n", header->cupsImagingBBox[0], header->cupsImagingBBox[1], header->cupsImagingBBox[2], header->cupsImagingBBox[3], expected->cupsImagingBBox[0], expected->cupsImagingBBox[1], expected->cupsImagingBBox[2], expected->cupsImagingBBox[3]); for (i = 0; i < 16; i ++) if (header->cupsInteger[i] != expected->cupsInteger[i]) printf(" cupsInteger%d %d, expected %d\n", i, header->cupsInteger[i], expected->cupsInteger[i]); for (i = 0; i < 16; i ++) if (fabs(header->cupsReal[i] - expected->cupsReal[i]) > 0.001) printf(" cupsReal%d %g, expected %g\n", i, header->cupsReal[i], expected->cupsReal[i]); for (i = 0; i < 16; i ++) if (strcmp(header->cupsString[i], expected->cupsString[i])) printf(" cupsString%d (%s), expected (%s)\n", i, header->cupsString[i], expected->cupsString[i]); if (strcmp(header->cupsMarkerType, expected->cupsMarkerType)) printf(" cupsMarkerType (%s), expected (%s)\n", header->cupsMarkerType, expected->cupsMarkerType); if (strcmp(header->cupsRenderingIntent, expected->cupsRenderingIntent)) printf(" cupsRenderingIntent (%s), expected (%s)\n", header->cupsRenderingIntent, expected->cupsRenderingIntent); if (strcmp(header->cupsPageSizeName, expected->cupsPageSizeName)) printf(" cupsPageSizeName (%s), expected (%s)\n", header->cupsPageSizeName, expected->cupsPageSizeName); } cups-2.2.7/examples/color.drv000664 000765 000024 00000001631 13255074424 016625 0ustar00msweetstaff000000 000000 // Include standard font and media definitions #include #include // List the fonts that are supported, in this case all standard // fonts... Font * // Manufacturer and version Manufacturer "Foo" Version 1.0 // Each filter provided by the driver... Filter application/vnd.cups-raster 100 rastertofoo // Supported page sizes *MediaSize Letter MediaSize A4 { // Supported resolutions *Resolution k 8 0 0 0 "600dpi/600 DPI" // Specify the model name and filename... ModelName "FooJet 2000" PCFileName "foojet2k.ppd" } { // Supports color printing ColorDevice true // Supported colorspaces ColorModel Gray/Grayscale w chunky 0 *ColorModel RGB/Color rgb chunky 0 // Supported resolutions *Resolution - 8 0 0 0 "300dpi/300 DPI" Resolution - 8 0 0 0 "600dpi/600 DPI" // Specify the model name and filename... ModelName "FooJet Color" PCFileName "foojetco.ppd" } cups-2.2.7/examples/constraint.drv000664 000765 000024 00000002357 13255074424 017701 0ustar00msweetstaff000000 000000 // Include standard font and media definitions #include #include // List the fonts that are supported, in this case all standard // fonts... Font * // Manufacturer, model name, and version Manufacturer "Foo" ModelName "FooJet 2000" Version 1.0 // Each filter provided by the driver... Filter application/vnd.cups-raster 100 rastertofoo // Supported page sizes *MediaSize Letter MediaSize A4 // Supported resolutions *Resolution k 8 0 0 0 "600dpi/600 DPI" // Installable Option Group Group "InstallableOptions/Options Installed" // Duplexing unit option Option "Option1/Duplexing Unit" Boolean AnySetup 10 Choice True/Installed "" *Choice "False/Not Installed" "" // General Option Group Group General // Duplexing option Option "Duplex/Two-Sided Printing" PickOne AnySetup 10 *Choice "None/No" "<>setpagedevice" Choice "DuplexNoTumble/Long Edge Binding" "<>setpagedevice" Choice "DuplexTumble/Short Edge Binding" "<>setpagedevice" // Only allow duplexing if the duplexer is installed UIConstraints "*Duplex *Option1 False" // Specify the name of the PPD file we want to generate... PCFileName "foojet2k.ppd" cups-2.2.7/examples/custom.drv000664 000765 000024 00000002262 13255074424 017022 0ustar00msweetstaff000000 000000 // Include standard font and media definitions #include #include // List the fonts that are supported, in this case all standard // fonts... Font * // Manufacturer, model name, and version Manufacturer "Foo" ModelName "FooJet 2000" Version 1.0 // Each filter provided by the driver... Filter application/vnd.cups-raster 100 rastertofoo // Supported page sizes *MediaSize Letter MediaSize A4 // Supported resolutions *Resolution k 8 0 0 0 "600dpi/600 DPI" // Option Group Group "Footasm" // Boolean option Option "fooEnhance/Resolution Enhancement" Boolean AnySetup 10 *Choice True/Yes "<>setpagedevice" Choice False/No "<>setpagedevice" // Multiple choice option Option "fooOutputType/Output Quality" PickOne AnySetup 10 *Choice "Auto/Automatic Selection" "<>setpagedevice" Choice "Text/Optimize for Text" "<>setpagedevice" Choice "Graph/Optimize for Graphics" "<>setpagedevice" Choice "Photo/Optimize for Photos" "<>setpagedevice" // Specify the name of the PPD file we want to generate... PCFileName "foojet2k.ppd" cups-2.2.7/examples/grouping.drv000664 000765 000024 00000001331 13255074424 017336 0ustar00msweetstaff000000 000000 // Include standard font and media definitions #include #include // List the fonts that are supported, in this case all standard // fonts... Font * // Manufacturer and version Manufacturer "Foo" Version 1.0 // Each filter provided by the driver... Filter application/vnd.cups-raster 100 rastertofoo // Supported page sizes *MediaSize Letter MediaSize A4 { // Supported resolutions *Resolution k 8 0 0 0 "600dpi/600 DPI" // Specify the model name and filename... ModelName "FooJet 2000" PCFileName "foojet2k.ppd" } { // Supported resolutions *Resolution k 8 0 0 0 "1200dpi/1200 DPI" // Specify the model name and filename... ModelName "FooJet 2001" PCFileName "foojt2k1.ppd" } cups-2.2.7/examples/laserjet-basic.drv000664 000765 000024 00000003624 13255074424 020403 0ustar00msweetstaff000000 000000 // Include standard font and media definitions #include #include // Include HP-PCL driver definitions #include // Specify that this driver uses the HP-PCL driver... DriverType pcl // Specify the driver options via the model number... ModelNumber ($PCL_PAPER_SIZE $PCL_PJL $PCL_PJL_RESOLUTION) // List the fonts that are supported, in this case all standard // fonts... Font * // Manufacturer and driver version Manufacturer "HP" Version 1.0 // Supported page sizes and their margins HWMargins 18 12 18 12 *MediaSize Letter MediaSize Legal MediaSize Executive MediaSize Monarch MediaSize Statement MediaSize FanFoldGermanLegal HWMargins 18 12.72 18 12.72 MediaSize Env10 HWMargins 9.72 12 9.72 12 MediaSize A4 MediaSize A5 MediaSize B5 MediaSize EnvC5 MediaSize EnvDL MediaSize EnvISOB5 MediaSize Postcard MediaSize DoublePostcard // Only black-and-white output with mode 3 compression... ColorModel Gray k chunky 3 // Supported resolutions Resolution - 1 0 0 0 "300dpi/300 DPI" *Resolution - 8 0 0 0 "600dpi/600 DPI" // Supported input slots *InputSlot 7 "Auto/Automatic Selection" InputSlot 2 "Manual/Tray 1 - Manual Feed" InputSlot 4 "Upper/Tray 1" InputSlot 1 "Lower/Tray 2" InputSlot 5 "LargeCapacity/Tray 3" // Tray 3 is an option... Installable "OptionLargeCapacity/Tray 3 Installed" UIConstraints "*OptionLargeCapacity False *InputSlot LargeCapacity" { // HP LaserJet 2100 Series Throughput 10 ModelName "LaserJet 2100 Series" PCFileName "hpljt211.ppd" } { // LaserJet 2200 and 2300 series have duplexer option... Duplex normal Installable "OptionDuplex/Duplexer Installed" UIConstraints "*OptionDuplex False *Duplex" { // HP LaserJet 2200 Series Throughput 19 ModelName "LaserJet 2200 Series" PCFileName "hpljt221.ppd" } { // HP LaserJet 2300 Series Throughput 25 ModelName "LaserJet 2300 Series" PCFileName "hpljt231.ppd" } } cups-2.2.7/examples/laserjet-pjl.drv000664 000765 000024 00000004426 13255074424 020110 0ustar00msweetstaff000000 000000 // Include standard font and media definitions #include #include // Include HP-PCL driver definitions #include // Specify that this driver uses the HP-PCL driver... DriverType pcl // Specify the driver options via the model number... ModelNumber ($PCL_PAPER_SIZE $PCL_PJL $PCL_PJL_RESOLUTION) // List the fonts that are supported, in this case all standard // fonts... Font * // Manufacturer and driver version Manufacturer "HP" Version 2.0 // Supported page sizes and their margins HWMargins 18 12 18 12 *MediaSize Letter MediaSize Legal MediaSize Executive MediaSize Monarch MediaSize Statement MediaSize FanFoldGermanLegal HWMargins 18 12.72 18 12.72 MediaSize Env10 HWMargins 9.72 12 9.72 12 MediaSize A4 MediaSize A5 MediaSize B5 MediaSize EnvC5 MediaSize EnvDL MediaSize EnvISOB5 MediaSize Postcard MediaSize DoublePostcard // Only black-and-white output with mode 3 compression... ColorModel Gray k chunky 3 // Supported resolutions Resolution - 1 0 0 0 "300dpi/300 DPI" *Resolution - 8 0 0 0 "600dpi/600 DPI" // Supported input slots *InputSlot 7 "Auto/Automatic Selection" InputSlot 2 "Manual/Tray 1 - Manual Feed" InputSlot 4 "Upper/Tray 1" InputSlot 1 "Lower/Tray 2" InputSlot 5 "LargeCapacity/Tray 3" // Tray 3 is an option... Installable "OptionLargeCapacity/Tray 3 Installed" UIConstraints "*OptionLargeCapacity False *InputSlot LargeCapacity" // PJL options Attribute cupsPJL cupsRET "@PJL SET SMOOTHING=%?False:OFF;%?True:ON;%n" Option "cupsRET/Smoothing" Boolean DocumentSetup 10 Choice "False/Off" "" *Choice "True/On" "" Attribute cupsPJL cupsTonerSave "@PJL SET ECONOMODE=%?False:OFF;%?True:ON;%n" Option "cupsTonerSave/Save Toner" Boolean DocumentSetup 10 *Choice "False/No" "" Choice "True/Yes" "" { // HP LaserJet 2100 Series Throughput 10 ModelName "LaserJet 2100 Series PJL" PCFileName "hpljt212.ppd" } { // LaserJet 2200 and 2300 series have duplexer option... Duplex normal Installable "OptionDuplex/Duplexer Installed" UIConstraints "*OptionDuplex False *Duplex" { // HP LaserJet 2200 Series Throughput 19 ModelName "LaserJet 2200 Series PJL" PCFileName "hpljt222.ppd" } { // HP LaserJet 2300 Series Throughput 25 ModelName "LaserJet 2300 Series PJL" PCFileName "hpljt232.ppd" } } cups-2.2.7/examples/Makefile000664 000765 000024 00000002730 13255074424 016433 0ustar00msweetstaff000000 000000 # # PPD compiler example makefile for CUPS. # # Copyright 2007-2011 by Apple Inc. # Copyright 2002-2005 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # # # Include standard definitions... # include ../Makedefs # # Examples... # EXAMPLES = \ color.drv \ constraint.drv \ custom.drv \ grouping.drv \ laserjet-basic.drv \ laserjet-pjl.drv \ minimum.drv \ postscript.drv \ r300-basic.drv \ r300-colorman.drv \ r300-remote.drv # # Make everything... # all: # # Make library targets... # libs: # # Make unit tests... # unittests: # # Clean everything... # clean: # # Dummy depend... # depend: # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: $(INSTALL_DIR) $(DATADIR)/examples for file in $(EXAMPLES); do \ $(INSTALL_DATA) $$file $(DATADIR)/examples; \ done # # Install programs... # install-exec: # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Uninstall files... # uninstall: for file in $(EXAMPLES); do \ $(RM) $(DATADIR)/examples/$$file; \ done -$(RMDIR) $(DATADIR)/examples cups-2.2.7/examples/minimum.drv000664 000765 000024 00000001074 13255074424 017163 0ustar00msweetstaff000000 000000 // Include standard font and media definitions #include #include // List the fonts that are supported, in this case all standard // fonts... Font * // Manufacturer, model name, and version Manufacturer "Foo" ModelName "FooJet 2000" Version 1.0 // Each filter provided by the driver... Filter application/vnd.cups-raster 100 rastertofoo // Supported page sizes *MediaSize Letter MediaSize A4 // Supported resolutions *Resolution k 8 0 0 0 "600dpi/600 DPI" // Specify the name of the PPD file we want to generate... PCFileName "foojet2k.ppd" cups-2.2.7/examples/postscript.drv000664 000765 000024 00000002314 13255074424 017720 0ustar00msweetstaff000000 000000 // Include standard font and media definitions #include #include // Specify this is a PostScript printer driver DriverType ps // List the fonts that are supported, in this case all standard fonts Font * // Manufacturer, model name, and version Manufacturer "Foo" ModelName "Foo LaserProofer 2000" Version 1.0 // PostScript printer attributes Attribute DefaultColorSpace "" Gray Attribute LandscapeOrientation "" Minus90 Attribute LanguageLevel "" "3" Attribute Product "" "(Foo LaserProofer 2000)" Attribute PSVersion "" "(3010) 0" Attribute TTRasterizer "" Type42 // Supported page sizes *MediaSize Letter MediaSize Legal MediaSize A4 // Query command for page size Attribute "?PageSize" "" " save currentpagedevice /PageSize get aload pop 2 copy gt {exch} if (Unknown) 23 dict dup [612 792] (Letter) put dup [612 1008] (Legal) put dup [595 842] (A4) put {exch aload pop 4 index sub abs 5 le exch 5 index sub abs 5 le and {exch pop exit} {pop} ifelse } bind forall = flush pop pop restore" // Specify the name of the PPD file we want to generate PCFileName "fooproof.ppd" cups-2.2.7/examples/ppdx.c000664 000765 000024 00000016363 13255074424 016121 0ustar00msweetstaff000000 000000 /* * Example code for encoding and decoding large amounts of data in a PPD file. * This would typically be used in a driver to save configuration/state * information that could be used by an application. * * Copyright 2012 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "ppdx.h" #include #include #include #include /* For compression of the data */ /* * Constants... */ #define PPDX_MAX_VALUE (PPD_MAX_LINE - PPD_MAX_NAME - 4) /* Max value length with delimiters + nul */ #define PPDX_MAX_CHUNK (PPDX_MAX_VALUE * 3 / 4) /* Max length of each chunk when Base64-encoded */ /* * 'ppdxReadData()' - Read encoded data from a ppd_file_t *. * * Reads chunked data in the PPD file "ppd" using the prefix "name". Returns * an allocated pointer to the data (which is nul-terminated for convenience) * along with the length of the data in the variable pointed to by "datasize", * which can be NULL to indicate the caller doesn't need the length. * * Returns NULL if no data is present in the PPD with the prefix. */ void * /* O - Data or NULL */ ppdxReadData(ppd_file_t *ppd, /* I - PPD file */ const char *name, /* I - Keyword prefix */ size_t *datasize) /* O - Size of data or NULL for don't care */ { char keyword[PPD_MAX_NAME], /* Keyword name */ decoded[PPDX_MAX_CHUNK + 1]; /* Decoded string */ unsigned chunk = 0; /* Current chunk number */ int len; /* Length of current chunk */ ppd_attr_t *attr; /* Keyword/value from PPD file */ Bytef *data; /* Pointer to data */ size_t alloc_size; /* Allocated size of data buffer */ z_stream decomp; /* Decompressor stream */ int error; /* Error/status from inflate() */ /* * Range check input... */ if (datasize) *datasize = 0; if (!ppd || !name) return (NULL); /* * First see if there are any instances of the named keyword in the PPD... */ snprintf(keyword, sizeof(keyword), "%s%04x", name, chunk); if ((attr = ppdFindAttr(ppd, keyword, NULL)) == NULL) return (NULL); /* * Allocate some memory and start decoding... */ data = malloc(257); alloc_size = 256; memset(&decomp, 0, sizeof(decomp)); decomp.next_out = data; decomp.avail_out = 256; inflateInit(&decomp); do { /* * Grab the data from the current attribute and decode it... */ len = sizeof(decoded); if (!httpDecode64_2(decoded, &len, attr->value) || len == 0) break; // printf("chunk %04x has length %d\n", chunk, len); /* * Decompress this chunk... */ decomp.next_in = decoded; decomp.avail_in = len; do { Bytef *temp; /* Temporary pointer */ size_t temp_size; /* Temporary allocation size */ // printf("Before inflate: avail_in=%d, avail_out=%d\n", decomp.avail_in, // decomp.avail_out); if ((error = inflate(&decomp, Z_NO_FLUSH)) < Z_OK) { fprintf(stderr, "ERROR: inflate returned %d (%s)\n", error, decomp.msg); break; } // printf("After inflate: avail_in=%d, avail_out=%d, error=%d\n", // decomp.avail_in, decomp.avail_out, error); if (decomp.avail_out == 0) { if (alloc_size < 2048) temp_size = alloc_size * 2; else if (alloc_size < PPDX_MAX_DATA) temp_size = alloc_size + 2048; else break; if ((temp = realloc(data, temp_size + 1)) == NULL) { free(data); return (NULL); } decomp.next_out = temp + (decomp.next_out - data); decomp.avail_out = temp_size - alloc_size; data = temp; alloc_size = temp_size; } } while (decomp.avail_in > 0); chunk ++; snprintf(keyword, sizeof(keyword), "%s%04x", name, chunk); } while ((attr = ppdFindAttr(ppd, keyword, NULL)) != NULL); inflateEnd(&decomp); /* * Nul-terminate the data (usually a string)... */ *(decomp.next_out) = '\0'; if (datasize) *datasize = decomp.next_out - data; return (data); } /* * 'ppdxWriteData()' - Writes encoded data to stderr using PPD: messages. * * Writes chunked data to the PPD file using PPD: messages sent to stderr for * cupsd. "name" must be a valid PPD keyword string whose length is less than * 37 characters to allow for chunk numbering. "data" provides a pointer to the * data to be written, and "datasize" provides the length. */ extern void ppdxWriteData(const char *name, /* I - Base name of keyword */ const void *data, /* I - Data to write */ size_t datasize) /* I - Number of bytes in data */ { char buffer[PPDX_MAX_CHUNK], /* Chunk buffer */ encoded[PPDX_MAX_VALUE + 1], /* Encoded data */ pair[PPD_MAX_LINE], /* name=value pair */ line[PPDX_MAX_STATUS], /* Line buffer */ *lineptr, /* Current position in line buffer */ *lineend; /* End of line buffer */ unsigned chunk = 0; /* Current chunk number */ int len; /* Length of current chunk */ z_stream comp; /* Compressor stream */ int error; /* Error/status from deflate() */ /* * Range check input... */ if (!name || (!data && datasize > 0) || datasize > PPDX_MAX_DATA) return; strlcpy(line, "PPD:", sizeof(line)); lineptr = line + 4; lineend = line + sizeof(line) - 2; if (datasize > 0) { /* * Compress and encode output... */ memset(&comp, 0, sizeof(comp)); comp.next_in = (Bytef *)data; comp.avail_in = datasize; deflateInit(&comp, 9); do { /* * Compress a chunk... */ comp.next_out = buffer; comp.avail_out = sizeof(buffer); if ((error = deflate(&comp, Z_FINISH)) < Z_OK) { fprintf(stderr, "ERROR: deflate returned %d (%s)\n", error, comp.msg); break; } /* * Write a chunk... */ len = sizeof(buffer) - comp.avail_out; httpEncode64_2(encoded, sizeof(encoded), buffer, len); len = (int)snprintf(pair, sizeof(pair), " %s%04x=%s", name, chunk, encoded); #ifdef DEBUG fprintf(stderr, "DEBUG: *%s%04x: \"%s\"\n", name, chunk, encoded); #endif /* DEBUG */ if ((lineptr + len) >= lineend) { *lineptr++ = '\n'; *lineptr = '\0'; fputs(line, stderr); lineptr = line + 4; } strlcpy(lineptr, pair, lineend - lineptr); lineptr += len; /* * Setup for the next one... */ chunk ++; } while (comp.avail_out == 0); } deflateEnd(&comp); /* * Write a trailing empty chunk to signal EOD... */ len = (int)snprintf(pair, sizeof(pair), " %s%04x=\"\"", name, chunk); #ifdef DEBUG fprintf(stderr, "DEBUG: *%s%04x: \"\"\n", name, chunk); #endif /* DEBUG */ if ((lineptr + len) >= lineend) { *lineptr++ = '\n'; *lineptr = '\0'; fputs(line, stderr); lineptr = line + 4; } strlcpy(lineptr, pair, lineend - lineptr); lineptr += len; *lineptr++ = '\n'; *lineptr = '\0'; fputs(line, stderr); } cups-2.2.7/examples/ppdx.h000664 000765 000024 00000003647 13255074424 016127 0ustar00msweetstaff000000 000000 /* * Header for PPD data encoding example code. * * Copyright 2012 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _PPDX_H_ # define _PPDX_H_ /* * Include necessary headers... */ # include /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Maximum amount of data to encode/decode... */ # define PPDX_MAX_STATUS 1024 /* Limit on log messages in 10.6 */ # define PPDX_MAX_DATA 16777216/* 16MiB */ /* * 'ppdxReadData()' - Read encoded data from a ppd_file_t *. * * Reads chunked data in the PPD file "ppd" using the prefix "name". Returns * an allocated pointer to the data (which is nul-terminated for convenience) * along with the length of the data in the variable pointed to by "datasize", * which can be NULL to indicate the caller doesn't need the length. * * Returns NULL if no data is present in the PPD with the prefix. */ extern void *ppdxReadData(ppd_file_t *ppd, const char *name, size_t *datasize); /* * 'ppdxWriteData()' - Writes encoded data to stderr using PPD: messages. * * Writes chunked data to the PPD file using PPD: messages sent to stderr for * cupsd. "name" must be a valid PPD keyword string whose length is less than * 37 characters to allow for chunk numbering. "data" provides a pointer to the * data to be written, and "datasize" provides the length. */ extern void ppdxWriteData(const char *name, const void *data, size_t datasize); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_PPDX_H */ cups-2.2.7/examples/r300-basic.drv000664 000765 000024 00000003327 13255074424 017256 0ustar00msweetstaff000000 000000 // Include standard font and media definitions #include #include // Include ESC/P driver definitions #include // Specify that this driver uses the ESC/P driver... DriverType escp // Specify the driver options via the model number... ModelNumber ($ESCP_ESCK $ESCP_EXT_UNITS $ESCP_EXT_MARGINS $ESCP_USB $ESCP_PAGE_SIZE $ESCP_RASTER_ESCI) // List the fonts that are supported, in this case all standard // fonts... Font * // Manufacturer and driver version Manufacturer "Epson" Version 1.0 // Supported page sizes and their margins HWMargins 8.4 0 8.4 0 *MediaSize Letter MediaSize Legal MediaSize Executive MediaSize Statement MediaSize A4 MediaSize A5 MediaSize A6 MediaSize B5 MediaSize Env10 MediaSize EnvC5 MediaSize EnvDL MediaSize EnvISOB5 MediaSize Postcard MediaSize DoublePostcard VariablePaperSize Yes MinSize 1in 4in MaxSize 8.5in 44in // Four color modes are supported... ColorModel Gray/Grayscale w chunky 1 ColorModel Black k chunky 1 *ColorModel RGB/Color rgb chunky 1 ColorModel CMYK cmyk chunky 1 // Supported resolutions Resolution - 8 90 0 103 "360dpi/360 DPI" *Resolution - 8 90 0 206 "720dpi/720 DPI" Resolution - 8 90 0 412 "1440dpi/1440 DPI" // Very basic dithering settings Attribute cupsInkChannels "" 6 Attribute cupsInkLimit "" 2.0 Attribute cupsCyanLtDk "" "0.5 1.0" Attribute cupsMagentaLtDk "" "0.5 1.0" Attribute cupsAllDither 360dpi "0.5 0.75 1.0" Attribute cupsAllDither 720dpi "0.6 0.9 1.2" Attribute cupsAllDither 1440dpi "0.9 1.35" Attribute cupsESCPDotSize 360dpi 16 Attribute cupsESCPDotSize 720dpi 17 Attribute cupsESCPDotSize 1440dpi 18 { // EPSON Stylus Photo R300 Series Throughput 1 ModelName "Stylus Photo R300" PCFileName "epspr301.ppd" } cups-2.2.7/examples/r300-colorman.drv000664 000765 000024 00000003663 13255074424 020012 0ustar00msweetstaff000000 000000 // Include standard font and media definitions #include #include // Include ESC/P driver definitions #include // Specify that this driver uses the ESC/P driver... DriverType escp // Specify the driver options via the model number... ModelNumber ($ESCP_ESCK $ESCP_EXT_UNITS $ESCP_EXT_MARGINS $ESCP_USB $ESCP_PAGE_SIZE $ESCP_RASTER_ESCI $ESCP_REMOTE) // List the fonts that are supported, in this case all standard // fonts... Font * // Manufacturer and driver version Manufacturer "Epson" Version 3.0 // Supported page sizes and their margins HWMargins 0 0 0 0 *MediaSize Letter MediaSize Legal MediaSize Executive MediaSize Statement MediaSize A4 MediaSize A5 MediaSize A6 MediaSize B5 MediaSize Env10 MediaSize EnvC5 MediaSize EnvDL MediaSize EnvISOB5 MediaSize Postcard MediaSize DoublePostcard VariablePaperSize Yes MinSize 1in 4in MaxSize 8.5in 44in // Borderless printing offset... Attribute cupsESCPFP "" 0 // Four color modes are supported... ColorModel Gray/Grayscale w chunky 1 ColorModel Black k chunky 1 *ColorModel RGB/Color rgb chunky 1 ColorModel CMYK cmyk chunky 1 // Supported resolutions Resolution - 8 90 0 103 "360dpi/360 DPI" *Resolution - 8 90 0 206 "720dpi/720 DPI" Resolution - 8 90 0 412 "1440dpi/1440 DPI" // Paper trays... *InputSlot 0 "Auto/Auto Select" InputSlot 1 "Manual/Manual Feed" Attribute cupsESCPPP 0 "1 255" Attribute cupsESCPPP 1 "2 1" // Very basic dithering settings Attribute cupsInkChannels "" 6 Attribute cupsInkLimit "" 3.0 Attribute cupsCyanLtDk "" "0.5 1.0" Attribute cupsMagentaLtDk "" "0.5 1.0" Attribute cupsAllDither 360dpi "0.5 0.75 1.0" Attribute cupsAllDither 720dpi "0.6 0.9 1.2" Attribute cupsAllDither 1440dpi "0.9 1.35" Attribute cupsESCPDotSize 360dpi 16 Attribute cupsESCPDotSize 720dpi 17 Attribute cupsESCPDotSize 1440dpi 18 { // EPSON Stylus Photo R300 Series Throughput 1 ModelName "Epson Stylus Photo R300" PCFileName "epspr303.ppd" } cups-2.2.7/examples/r300-remote.drv000664 000765 000024 00000003665 13255074424 017475 0ustar00msweetstaff000000 000000 // Include standard font and media definitions #include #include // Include ESC/P driver definitions #include // Specify that this driver uses the ESC/P driver... DriverType escp // Specify the driver options via the model number... ModelNumber ($ESCP_ESCK $ESCP_EXT_UNITS $ESCP_EXT_MARGINS $ESCP_USB $ESCP_PAGE_SIZE $ESCP_RASTER_ESCI $ESCP_REMOTE) // List the fonts that are supported, in this case all standard // fonts... Font * // Manufacturer and driver version Manufacturer "Epson" Version 2.0 // Supported page sizes and their margins HWMargins 0 0 0 0 *MediaSize Letter MediaSize Legal MediaSize Executive MediaSize Statement MediaSize A4 MediaSize A5 MediaSize A6 MediaSize B5 MediaSize Env10 MediaSize EnvC5 MediaSize EnvDL MediaSize EnvISOB5 MediaSize Postcard MediaSize DoublePostcard VariablePaperSize Yes MinSize 1in 4in MaxSize 8.5in 44in // Borderless printing offset... Attribute cupsESCPFP "" -80 // Four color modes are supported... ColorModel Gray/Grayscale w chunky 1 ColorModel Black k chunky 1 *ColorModel RGB/Color rgb chunky 1 ColorModel CMYK cmyk chunky 1 // Supported resolutions Resolution - 8 90 0 103 "360dpi/360 DPI" *Resolution - 8 90 0 206 "720dpi/720 DPI" Resolution - 8 90 0 412 "1440dpi/1440 DPI" // Paper trays... *InputSlot 0 "Auto/Auto Select" InputSlot 1 "Manual/Manual Feed" Attribute cupsESCPPP 0 "1 255" Attribute cupsESCPPP 1 "2 1" // Very basic dithering settings Attribute cupsInkChannels "" 6 Attribute cupsInkLimit "" 2.0 Attribute cupsCyanLtDk "" "0.5 1.0" Attribute cupsMagentaLtDk "" "0.5 1.0" Attribute cupsAllDither 360dpi "0.5 0.75 1.0" Attribute cupsAllDither 720dpi "0.6 0.9 1.2" Attribute cupsAllDither 1440dpi "0.9 1.35" Attribute cupsESCPDotSize 360dpi 16 Attribute cupsESCPDotSize 720dpi 17 Attribute cupsESCPDotSize 1440dpi 18 { // EPSON Stylus Photo R300 Series Throughput 1 ModelName "Epson Stylus Photo R300" PCFileName "epspr302.ppd" } cups-2.2.7/examples/testppdx.c000664 000765 000024 00000004404 13255074424 017012 0ustar00msweetstaff000000 000000 /* * Test program for PPD data encoding example code. * * Compile with: * * gcc -o testppdx -D_PPD_DEPRECATED="" -g testppdx.c ppdx.c -lcups -lz * * Copyright 2012 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include #include "ppdx.h" /* * 'main()' - Read data from a test PPD file and write out new chunks. */ int /* O - Exit status */ main(void) { int status = 0; /* Exit status */ FILE *fp; /* File to read */ char contents[8193], /* Contents of file */ *data; /* Data from PPD */ size_t contsize, /* File size */ datasize; /* Data size */ ppd_file_t *ppd; /* Test PPD */ /* * Open the PPD and get the data from it... */ ppd = ppdOpenFile("testppdx.ppd"); data = ppdxReadData(ppd, "EXData", &datasize); /* * Open this source file and read it... */ fp = fopen("testppdx.c", "r"); if (fp) { contsize = fread(contents, 1, sizeof(contents) - 1, fp); fclose(fp); contents[contsize] = '\0'; } else { contents[0] = '\0'; contsize = 0; } /* * Compare data... */ if (data) { if (contsize != datasize) { fprintf(stderr, "ERROR: PPD has %ld bytes, test file is %ld bytes.\n", (long)datasize, (long)contsize); status = 1; } else if (strcmp(contents, data)) { fputs("ERROR: PPD and test file are not the same.\n", stderr); status = 1; } if (status) { if ((fp = fopen("testppdx.dat", "wb")) != NULL) { fwrite(data, 1, datasize, fp); fclose(fp); fputs("ERROR: See testppdx.dat for data from PPD.\n", stderr); } else perror("Unable to open 'testppdx.dat'"); } free(data); } printf("Encoding %ld bytes for PPD...\n", (long)contsize); ppdxWriteData("EXData", contents, contsize); return (1); } cups-2.2.7/examples/testppdx.ppd000664 000765 000024 00000014112 13255074424 017350 0ustar00msweetstaff000000 000000 *PPD-Adobe: "4.3" *% *% "$Id$" *% *% Test PPD file for data encoding example. *% *% This file cannot be used with any known printers. *% *% Copyright 2007-2012 by Apple Inc. *% Copyright 2002-2006 by Easy Software Products. *% *% These coded instructions, statements, and computer programs are the *% property of Apple Inc. 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 file is *% file is missing or damaged, see the license at "http://www.cups.org/". *FormatVersion: "4.3" *FileVersion: "1.3" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "TESTPPDX.PPD" *Manufacturer: "Apple" *Product: "(Test PPDX)" *cupsVersion: 1.6 *ModelName: "Test PPDX" *ShortNickName: "Test PPDX" *NickName: "Test PPDX for CUPS" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True *DefaultColorSpace: RGB *FileSystem: False *Throughput: "1" *LandscapeOrientation: Plus90 *TTRasterizer: Type42 *cupsFilter: "application/vnd.cups-raster 0 -" *RequiresPageRegion All: True *% For PageSize, we have put all of the translations in-line... *OpenUI *PageSize/Page Size: PickOne *OrderDependency: 10 AnySetup *PageSize *DefaultPageSize: Letter *PageSize Letter/US Letter: "PageSize=Letter" *PageSize Letter.Banner/US Letter Banner: "PageSize=Letter.Banner" *PageSize Letter.Fullbleed/US Letter Borderless: "PageSize=Letter.Fullbleed" *PageSize A4/A4: "PageSize=A4" *PageSize Env10/#10 Envelope: "PageSize=Env10" *CloseUI: *PageSize *% For PageRegion, we have separated the translations... *OpenUI *PageRegion/Page Region: PickOne *OrderDependency: 10 AnySetup *PageRegion *DefaultPageRegion: Letter *PageRegion Letter/US Letter: "PageRegion=Letter" *PageRegion Letter.Banner/US Letter Banner: "PageRegion=Letter.Fullbleed" *PageRegion Letter.Fullbleed/US Letter Borderless: "PageRegion=Letter.Fullbleed" *PageRegion A4/A4: "PageRegion=A4" *PageRegion Env10/#10 Envelope: "PageRegion=Env10" *CloseUI: *PageRegion *DefaultImageableArea: Letter *ImageableArea Letter: "18 36 594 756" *ImageableArea Letter.Banner: "18 0 594 792" *ImageableArea Letter.Fullbleed: "0 0 612 792" *ImageableArea A4: "18 36 577 806" *ImageableArea Env10: "18 36 279 648" *DefaultPaperDimension: Letter *PaperDimension Letter: "612 792" *PaperDimension Letter.Banner: "612 792" *PaperDimension Letter.Fullbleed: "612 792" *PaperDimension A4: "595 842" *PaperDimension Env10: "297 684" *DefaultFont: Courier *Font AvantGarde-Book: Standard "(001.006S)" Standard ROM *Font AvantGarde-BookOblique: Standard "(001.006S)" Standard ROM *Font AvantGarde-Demi: Standard "(001.007S)" Standard ROM *Font AvantGarde-DemiOblique: Standard "(001.007S)" Standard ROM *Font Bookman-Demi: Standard "(001.004S)" Standard ROM *Font Bookman-DemiItalic: Standard "(001.004S)" Standard ROM *Font Bookman-Light: Standard "(001.004S)" Standard ROM *Font Bookman-LightItalic: Standard "(001.004S)" Standard ROM *Font Courier: Standard "(002.004S)" Standard ROM *Font Courier-Bold: Standard "(002.004S)" Standard ROM *Font Courier-BoldOblique: Standard "(002.004S)" Standard ROM *Font Courier-Oblique: Standard "(002.004S)" Standard ROM *Font Helvetica: Standard "(001.006S)" Standard ROM *Font Helvetica-Bold: Standard "(001.007S)" Standard ROM *Font Helvetica-BoldOblique: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow: Standard "(001.006S)" Standard ROM *Font Helvetica-Narrow-Bold: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow-BoldOblique: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow-Oblique: Standard "(001.006S)" Standard ROM *Font Helvetica-Oblique: Standard "(001.006S)" Standard ROM *Font NewCenturySchlbk-Bold: Standard "(001.009S)" Standard ROM *Font NewCenturySchlbk-BoldItalic: Standard "(001.007S)" Standard ROM *Font NewCenturySchlbk-Italic: Standard "(001.006S)" Standard ROM *Font NewCenturySchlbk-Roman: Standard "(001.007S)" Standard ROM *Font Palatino-Bold: Standard "(001.005S)" Standard ROM *Font Palatino-BoldItalic: Standard "(001.005S)" Standard ROM *Font Palatino-Italic: Standard "(001.005S)" Standard ROM *Font Palatino-Roman: Standard "(001.005S)" Standard ROM *Font Symbol: Special "(001.007S)" Special ROM *Font Times-Bold: Standard "(001.007S)" Standard ROM *Font Times-BoldItalic: Standard "(001.009S)" Standard ROM *Font Times-Italic: Standard "(001.007S)" Standard ROM *Font Times-Roman: Standard "(001.007S)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(001.007S)" Standard ROM *Font ZapfDingbats: Special "(001.004S)" Standard ROM *% *% End of "$Id$". *% *EXData0000: "eNqlVm1v2zYQ/hz/ipvWznLgl6T7siXrgCJ2AANBEyQpNmAtAlqiLG4SKZBU7LTIf9/dUW9Og32ZAFsieffcc88dKS2OR3AM0Zt1+ibCJxoA3EvnobJma0UJmbFwc7OEVHgBUicmVXoLci/KqpCAQznvHC9MWSmc3Smfn3WzdG2TBGYGPCJXVbqH2fIBQR+Wq5vb1cWH+9XyfRTBbNs" *EXData0001: "GcwTaG6zIqkrh7evgzDVk1Xb3MO7k9N3sHmCDxWRWeuk53KfSxf4paC087ZOvDLaTcF54WUptcdnoVO0KavaS9um7EBYCT6XAQhnK2n9E5hsEIc9yQ6XvUw8RkEelzKVVhQI2TAMEIXYzQGWClmoTU002L1GgmwVIpraF0ozXYoOGUkZXa0vVh/vVnO/91FA2+UqycHlpi5SyMWjhI0" *EXData0002: "lBq9kqKmbEl9BFCOETDwOuuHoFxAaQZQKueooljmVJRiK1NUSHL+UKhEaiQpPES599XZYrHb7eZUkLmx20U0lLsPAK7e/I2agDcME1S7vpst5aMsUM0U7kzmd5S03CeyIkVaqAujPdWm759SKB1PYAa3UqShDzNrShDcLdycHJgk3VnlWUnQcgdJXut/HCEvRqMFw62DSricSOeEfYI" *EXData0003: "HFGldfN5Y/djIyT85nyqzDz//WDKolgHcxE3ah6N2hDjQHj8vxkr7Y/oWhzDNYKt9spz89aOljnKo1HpZPRtBMDGzep7ODlntxcuAJfrq9XR0XFWnQfcS6KBZbJElC2SXNijo6Spwl+/nP7685cp27aVoY3A9NEesSi9Bm3ZZUopMpxTX+WDZzx6nPZRaRggCIFG5z1Iuwh0DDxQNAQ" *EXData0004: "OcbnJtJ9qyPpNAISHpW/rmTYOrRC4m6l53FfAuW50OzH4IBq4Y1ciVYcdUcQ/kWTc7Rib7baU0GJYIyDKUSrP2kQTeGnNgd0eEmHNoSpbSL7orPch1SyCkNkuDn0gEKC0JENLFQGcVZN8InKjYVqJCU3wovbmk3hdMoCmqybo+2Ds+h/zs5ZUhgn427c1btF/YKw488nY1p+xp8snDw" *EXData0005: "CM3WJ0OzASUA7kH27eSgtwNteZJqmDklRnN9ajTTYf3wHjpxeTXYkGK4F30W4zaV1lI1bm+vb8+4+Llw8LagMxm1nIZt155O3fz8s46mDVh7xYXR20kbcNqMWzKNWgDdRjsNM8/8TyIxeTwmkrIaVITze0m/9i4ekqbO6JmSVNqE/nWilMwWQrL/waMTMCwdxqT5+NVOQ4LUa7tNNJk" *EXData0006: "kOQfP11dTRqvb51GGZ9WXC3usl6nrpNe667v072jN8wgNn9mpMPj49V0n5t7043hwrezNTaOPmmxCacZ5QbjIf44mhwIhDsmpDFpmxSabopW7TdO1yftNxA2LZP6rifCSbL/g8Th06E/GPoWOLS30tdWQ3yKw+fu1bHCDsDTNXyPhbfAvwxF0gE=" *EXData0007: "" cups-2.2.7/doc/apple-touch-icon.opacity000664 000765 000024 00000033132 13255074424 020463 0ustar00msweetstaff000000 000000 –bplist00ÔMNX$versionX$objectsY$archiverT$top† ¯÷eqrstuyz€…‰•™£­±¶ËÑרÜâåìíóôøü"#/01238=BEMNQRTX[cntz{€†‡‹¦¬­®¯ÚÞáæïõûþÿ ,/27=CHIJQZ^eiƒ„…¬¼½¾¿ÀÁÂÆÊÎÔÕÖרÙÝàáâãäåêðóôõøù  !"#'+/5678<?@AWXYZ[\]^_Nabcgk€‚ƒ„…†@ˆ‰:CŠ‹Œ¨©ª«¬­®¯°±²¸¹ÃÄÅÆÐÑÒרÙßçèéêëñýþÿ9 !"#$%&'()*+,-./04:>BFU$nullß0  !"#$%&'()*+,-./0123456789:;9<=>>@ABCCDEFGHICJKLMNO>QRSTU@WXYZ[B]^_`>BcN9WpolySidWpixDTypSbmPUresUnTsecCUcolSpUoBgImSparVnPaStrWactLaysUsnShsWpenTTypSmodTzoomTallRVsavStDTmetaVspiDecVgenNamUorTypVpixRadTfrasUimSizUbgColVnPaFilV$classVactTraVsavPrDTtarsVcurFraSenVVlineThVautoBTUshLayXrectCRadUresiMTcurRWspiSegsTtrasWfilSensUmainCVtraTrgVcurObjVguiLinTvarsVlasModWpolyStaUbgTyp€ˆ€,€ò€€ €c€#@€ €›€#@T€‡#?ð€€…€†€ö€€»€e€š#?𠀃#@ -€  €#@I€Y€„€ñ€€Ófg"hlpWNS.keysZNS.objects£ijk€€€£mno€€€ € \kMDItemTitle^kMDItemAuthors_kMDItemCopyright_CUPS Web Site IconÒg"vx¡w€€ ]Michael SweetÒ{|}~Z$classnameX$classesWNSArray¢}XNSObject_Copyright 2013 Apple Inc.Ò{|‚ƒ_NSMutableDictionary£‚„\NSDictionaryÒg"†x¡Z€ € ÔŠ‹"ŒŒSresSdel€#?ð€€Ò{|‘’\PCResolution£“”\PCResolutionXPCObjectÒg"–x¡S€€ Öš›œ"ŒŸ A¢TlaysUanimTUlAcLs€€€#?¹™™™™™š€c€dÓfg"¤¨p£ijk€€€£mªo€€€ € Òg"®x¡w€€ Òg"²x¢³´€€6€ Ü·¸¹º»¼½"¾¿ÀCCNÂÃ@ÅÆÇNÉSUblendWmaskTypUedMskSnamWmaskLaySvisUalConTobjsTisShTopac€€ €€€ #@Y€Õ»½¾">³ÎBÆ€€€€€Ófg"ÒÔp¡Ó€¡Õ€€ #?ðÓŠ"ÃÚÛ€#?ð€Ò{|ÝÞ_PCBitmapContext¤ßàá_PCBitmapContextZPCDrawableXPCObjectÒg"ãx € Ò{|æç]PCNormalLayer¥èéêë]PCNormalLayerWPCLayerZPCDrawableXPCObjectTCUPSÓfg"îðp¡ï€¡ñ€€ #?ðÓŠ"³öÛ€#?ð€Òg"ùx¡ú€!€ ßýþÿ¼"    NN@@N³@NTrectTstrYSisIXstrTBndsTstrXSshXTantiSflVVattStrSshYUalPixSangSflH€"#@Y #@Y# €5€##€ €4#_{{10, 40}, {130, 65}}Ó" !XNSString\NSAttributes€$€3€%TCUPSÓfg"$).¤%&'(€&€'€(€)¤*<,-€*€,€.€1€2_NSParagraphStyleWNSColorVNSFontVNSKernÓ4"5>7:ZNSTabStops[NSAlignment€€+Ò{|9:_NSMutableParagraphStyle£;<_NSMutableParagraphStyle_NSParagraphStyleÓ>?"@9AWNSWhite\NSColorSpaceB1€-Ò{|CDWNSColor¢CÔFGH"IJKLVNSSizeXNSfFlagsVNSName#@F€€/€0_HelveticaNeue-BoldÒ{|OPVNSFont¢O#Ò{|„S¢„Ò{|UV_NSAttributedString¢W_NSAttributedStringÓ>?"Y9AD1 0€-Ò{|\]\PCTextVector¦^_`ab\PCTextVector_PCRectBasedVectorXPCVectorZPCDrawableXPCObjectÜ·¸¹º»¼½"¾¿ÀCCNef@hÆjNlS€;€7 €<€€?#@Y€Õ»½¾">´qBÆ€€6€8€€Ófg"uwp¡v€9¡x€:€ #?ðÓŠ"f}Û€7#?ð€ZBackgroundÓfg"ƒp¡‚€=¡„€>€ #?ðÓŠ"´‰Û€6#?ð€Òg"Œx¡€@€ ßýÿ¼‘’“"” •–N@™š@NžŸ ¡´@¤NUdimLKWfilPropVcornRXVcornRYUstros€A€D €E# ##€b€W#€6 #Ófg"§©p¡¨€B¡ª€C€ ]cornerRadiusX]cornerRadiusY_{{0, 0}, {150, 150}}ß°±²³´µ"¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆNÈÉÊÉÌCÍCÎÏÐ>ÒÔÕCÖ×ÊØ@VrelLP2SblHWgradAngUradGCTfilTWrelRadCVfilPosSaEqStypXrelLinP1VfilColVrelLP1UfilImVothColXrelLinP2SgEqUfilGrSrEqXgradStopUpgNumSbEqSfil€P#@V€€M€M€V€U€O€F€N€€G€@€Q€S€R€H€T ÓÛ?"ÜÊAUNSRGBL0.2 0.2 0.2€-ÓÛ?"ßÊAL0.6 0.6 0.6€-Òg"âå¢ãä€I€K€LÕçèé">™ìÏîValtColSlocScol€€E#@Nx-à͈¸€F€JÒ{|ðñ^PCGradientStop¤òóô^PCGradientStopZPCDrawableXPCObjectÕçèé">™øÒE#@Y€G€JÒ{|üý^NSMutableArray£ü}V{0, 0}X{0, -75}X{0, -50}_{1.4210854715202004e-14, 75}_{9.473903143468002e-15, 50}Q0QtW100 - tS100Ò{| _PCDrawVectorProperties¤   _PCDrawVectorPropertiesZPCDrawableXPCObjectÒg"å¡€X€Lß°±³²´µ"¶·¸¹¼»½¾¿ÀéÁÂÃÄ:ÉNÉCÉCÍ:É>É!C@ÉÕ&C^Ö)ÊØ+TcapSSposUinvisSwidUdashS€M€M#@V€€M€a€U€M€€M€Z€@ €M€S#?ð€Y€R€[€T€^Ó>?"-9AB0€-ÓÛ?"0ÊAL0.4 0.4 0.4€-Òg"3å¢45€\€]€LÕçèé">:^X#€Y€JÕçèé">@!X#@Y€Z€JÒg"Dx¢EF€_€`€ #@ #Ò{|KL_PCStrokeVectorProperties¥MNOP_PCStrokeVectorProperties_PCDrawVectorPropertiesZPCDrawableXPCObjectÒ{|RS\PCRectVector§TUVWXY\PCRectVector\PCPathVector_PCRectBasedVectorXPCVectorZPCDrawableXPCObjectÒg"[x¡´€6€ Ò{|_`WPCFrame¥abcdWPCFrame_PCMetadataObjectZPCDrawableXPCObjectÒg"fx¡g€f€ ßjklm"n¸opqrs tNN>xy>C{>@ŒNNBYauSizCropVnewFacUapIn1TpathTapIDUcropRUapIn2UisRelUisColTcropVvarVal€€h€‚€€g€ €€i€_{{0, 0}, {0, 0}}_apple-touch-icon.png߆‡"ˆ‰Š¸‹ŒŽŠ‘’“”•–—˜@š›SNžŸ@¡NgZ>¦§:¨©cª«VanLooCVprShTiVprLinCSfraUcompSUgrTypUgenCHUcodeSVdisGamTsnShVexPropUcodeLUpPNGOTpropVcodePlUprColUcodeFVcodeFrÿÿÿÿÿÿÿÿ €€{€€x€y €€€f€ €€z€~€j€|€€}Ófg"­´p¦®¯°±²³€k€l€m€n€o€p¦µ¶<¸¹º€q€r€,€s€t€w€ V{JFIF}U{GIF}_"kCGImageDestinationBackgroundColorU{PNG}V{TIFF}_*kCGImageDestinationLossyCompressionQualityÓfg"ÃÄp  € Ófg"ÇÈp  € Ófg"ËÌp  € Ófg"ÏÑp¡Ѐu¡Ò€v€ [Compression#?ìÌÌÌÌÌÍZpublic.png]public.folderÓfg"ÚÛp  € ÓÛ?"ÞÊAL0.5 0 0 0.5€-SiosUcocoaUtouchVMyViewVUIViewÒ{|æç_PCBitmapProperties£èé_PCBitmapPropertiesXPCObjectÒ{|ëìYPCFactory¤íîïYPCFactoryZPCDrawableXPCObjectÒg"ñå €LYselectionZ{150, 150}Ó>?"ö9AE0.75€-_CICheckerboardGenerator߆‡"ˆ‰Š¸‹ŒŽŠ‘’“”•–—˜@šüSNÿŸ@NŒZ>§: ©c « €€˜€€–€y €š€€ €€—€~€‰€|€™€}Ófg"p¦€Š€‹€Œ€€Ž€¦<€€‘€,€’€“€•€ V{JFIF}U{GIF}_"kCGImageDestinationBackgroundColorU{PNG}V{TIFF}_*kCGImageDestinationLossyCompressionQualityÓfg"$%p  € Ófg"()p  € Ófg",-p  € Ófg"02p¡1€”¡Ò€v€ [Compression#?ìÌÌÌÌÌÍ_com.likethought.opacity.opacityÓfg"9:p  € ÓÛ?"=ÊAL0.5 0 0 0.5€-VMyViewVUIViewÓfg"BLp©CDEFGHIJK€œ€€ž€Ÿ€ €¡€¢€£€¤©MMOPMRSMM€¥€¥€¦€§€¥€¨€©€¥€¥€ _framePickerVisibleZhideRulers[windowFrame_layerViewDimension]hideVariablesZexpansionsYprintInfo]toolbarHidden_editFrameMetadata_{{91, 397}, {626, 523}}#@c€Ófg"dep  € Ò"hij\NSAttributes€º€ªÓfg"lup¨mnopqrst€«€¬€­€®€¯€°€±€²¨vwxyzv|}€³€´€µ€¶€·€³€¸€¹€ _NSHorizontallyCentered]NSRightMargin\NSLeftMargin_NSHorizonalPagination_NSVerticalPagination_NSVerticallyCentered[NSTopMargin^NSBottomMargin "B"B"B´"B´Ò{|Ž[NSPrintInfo¢[NSPrintInfoÓfg"‘œpª’“”•–—˜™š›€¼€½€¾€¿€À€Á€Â€Ã€Ä€ÅªžŸ g¢£¤¥”€Æ€È€Ì€Ò€f€Ó€Ø€Ù€ß€¾€ _.com.likethought.opacity.preview.iPhoneSettings_(com.likethought.opacity.preview.elements_"com.likethought.opacity.preview.ui_(com.likethought.opacity.preview.appStoreWfactory_#com.likethought.opacity.preview.web_*com.likethought.opacity.preview.iphoneIcon_&com.likethought.opacity.preview.cursor_&com.likethought.opacity.preview.iphoneTtypeÓfg"³µp¡´€Ç¡M€¥€ [prerenderedÓfg"º¾p£»¼½€É€Ê€Ë£MMM€¥€¥€¥€ VstatusWtoolbarTdockÓfg"ÇËp£È›ʀ̀ŀΣ<z΀,€·€Ï€ Ucolor[resolutionsÒg"Óå¢ÔՀЀрL#?ð#@Ófg"ÚÜp¡´€Ç¡M€¥€ Ófg"àãp¢áâ€Ô€Õ¢äå€Ö€×€ WaddressUimage_#http://likethought.com/opacity/web/_,http://likethought.com/opacity/web/image.pngÓfg"ìîp¡´€Ç¡M€¥€ Ófg"ò÷p¤ó›õȀڀŀۀͤøùú<€Ü€Ý€Þ€,€ XhotspotXXhotspotY##Ófg"p­›È     €à€á€â€Å€Í€ã€ä€å€æ€ç€è€é€ê­<zzzzzz€ë€ì€í€î€,€·€ï€·€·€·€ð€·€·€ UrectYTleftUrectW[navBarStyleUrectX_statusMenuStyle\toolbarStyleZiPhoneTypeUrectHYitemStyleStop#@4#@i#@4#@FÒg"1x¡€@€ Ó56"789TNSIDUNSICC€ó€õÒ;"<=WNS.dataO H HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ€ôÒ{|?@]NSMutableData£?AVNSDataÒ{|CD\NSColorSpace¢E\NSColorSpaceÒ{|GHWPCImage¥IJKLWPCImage_PCMetadataObjectZPCDrawableXPCObject_NSKeyedArchiverÑOŒTroot€"+5:?06ù  $(/7=EINSZ_fmsz…‹’™ §¬³·¾ÅËÔÚßçìôú#)+-/13578:<>GIKMVXaceghjlnprt}~€‰‹‘šœž ¢¤¦§´¼ÇÎÐÒÔÛÝßáãðÿ'0357ENYbjox”³ºÇÐÓÕ×èìðòûýÿ)2;>@B[`flnpr{}Œ“•—™ ¢¤¦¨±´¶¸ÁÆÈÊÌý !',1679;<>@BCLNcegikmz}‚„†œž§©²ÄÍßêóüýÿ!/7BKP]`begirŠŒ•˜šœãèíñúÿ      ! % ' 0 1 2 3 < E F G I K T V W Y b c { ˆ ‘ ž   ¢ ¤ © ¶ ¿ Á Ã Å Ç Ð Ò Ô Ö Ø Ú í õ ü    ' ) + 4 N U o ‚ — ¤ § © ² º ¿ Ð × à ç ð ò ô ö   ) 2 7 @ U Z o | ƒ Œ ™ ¦ ³ Ç Ð Û ä        ! " + - B D F H J L Y \ ^ a c e n { } † ˆ “   £ ¥ ¨ ª ¬ µ Â Ä Í Ï Ø Û Ý ß & , 4 ; B H J L M N P Y Z [ d m o q z | } † ‡ ” — ™ œ ž   ® ¼ Ó6=AIOT\cgkt{‚ˆ˜œ¢¦¯µ¹½¿ÀÉËÍÏÑÓÕ×ÙÛÝßáãåçéê÷ý  &(168:<QX\`bdmoqz‰’¡¬µÊÌÎ×ÙÛäóú 2PRT\`i‚‹¤¯¸ÁÄÆÈ;@DJNTVWYbdfhjlnprsuw€‚„†ˆŠ—šœ©¶¸ÁÆÈÊÌáãåîðò  !&(*,5>Gbmˆ¡¬µ¾ËÚçô%.135>FQYlw€‰ŒŽÏÙàæëðöü  "#%&')+>U°·¾ÅÉÏÕÛáèíôú ()+-/024578:<>@BDFHJWdfhjlnp}ƒ…‡‰‹’˜½ÃÊ÷&'(*7:<?ACOQZes€‚„‘ž ¤ª°·¾ÇÜãø '2;DEGQ\ioq‹æçéëíîðòóõöøúüþ"$&(*,.;=?ACEGIPV{ˆµÂÃÄÆÓÔÕ×äåæèõøúýÿ 8EFGIVcels€“•—™›Ÿ¡£¥¸º¼¾ÀÂÄÆÈÊÌáìø &0>RSmvƒ„…‡Ÿ¡®¿ÁÃÅÇÉËÍÏàâäæèêìîðò &>Ulx‡ˆ’—œ¥±¶ÂÏäæèêìîðòôöø !#T¤Ï×ý*S|Ž‘“–˜š¦³º¼¾ÀÇÉËÍÏÖÞãð÷ùûý  ',.02;DQTVY[]joqsxz|~†Œ²áîñóöøú!#%')+4=FO\wy{}ƒ…‡‰‹‘¬®°²´¶¸º¼¾ÀÂÄÆÈÎÓÙåëý   % ) 2 4 = ? H Q Z ] _ a n s y { }  ˆ ,Ü,Þ,ç,õ,ü-- ---+-4-<-G-O-b-m-v-ˆ--’Q-”cups-2.2.7/doc/apple-touch-icon.png000664 000765 000024 00000013773 13255074424 017610 0ustar00msweetstaff000000 000000 ‰PNG  IHDR–– ßÐ AiCCPICC ProfileH –wTSهϽ7½Ð" %ôz Ò;HQ‰I€P†„&vDF)VdTÀG‡"cE ƒ‚b× òPÆÁQDEåÝŒk ï­5óÞšýÇYßÙç·×Ùgï}׺Pü‚ÂtX€4¡XîëÁ\ËÄ÷XÀáffGøDÔü½=™™¨HƳöî.€d»Û,¿P&sÖÿ‘"7C$ EÕ6<~&å”S³Å2ÿÊô•)2†12¡ ¢¬"ãįlö§æ+»É˜—&ä¡Yμ4žŒ»PÞš%ᣌ¡\˜%àg£|e½TIšå÷(ÓÓøœL0™_Ìç&¡l‰2Eî‰ò”Ä9¼r‹ù9hžx¦g䊉Ib¦טiåèÈfúñ³Sùb1+”ÃMáˆxLÏô´ Ž0€¯o–E%Ym™h‘í­ííYÖæhù¿Ùß~Sý=ÈzûUñ&ìÏžAŒžYßlì¬/½ö$Z›³¾•U´m@åá¬Oï ò´Þœó†l^’Äâ ' ‹ììlsŸk.+è7ûŸ‚oÊ¿†9÷™ËîûV;¦?#I3eE妧¦KDÌÌ —Ïdý÷ÿãÀ9iÍÉÃ,œŸÀñ…èUQè” „‰h»…Ø A1ØvƒjpÔzÐN‚6p\WÀ p €G@ †ÁK0Þi‚ð¢Aª¤™BÖZyCAP8ÅC‰’@ùÐ&¨*ƒª¡CP=ô#tº]ƒú Ð 4ý}„˜Óa ض€Ù°;GÂËàDxœÀÛáJ¸>·Âáð,…_“@ÈÑFXñDBX$!k‘"¤©Eš¤¹H‘q䇡a˜Æã‡YŒábVaÖbJ0Õ˜c˜VLæ6f3ù‚¥bÕ±¦X'¬?v 6›-ÄV``[°—±Øaì;ÇÀâp~¸\2n5®·׌»€ëà á&ñx¼*Þï‚Ásðb|!¾ ߯¿' Zk‚!– $l$Tçý„Â4Q¨Ot"†yÄ\b)±ŽØA¼I&N“I†$R$)™´TIj"]&=&½!“É:dGrY@^O®$Ÿ _%’?P”(&OJEBÙN9J¹@y@yC¥R ¨nÔXª˜ºZO½D}J}/G“3—ó—ãÉ­“«‘k•ë—{%O”×—w—_.Ÿ'_!Jþ¦ü¸QÁ@ÁS£°V¡Fá´Â=…IEš¢•bˆbšb‰bƒâ5ÅQ%¼’’·O©@é°Ò%¥!BÓ¥yÒ¸´M´:ÚeÚ0G7¤ûÓ“éÅôè½ô e%e[å(ååå³ÊRÂ0`ø3R¥Œ“Œ»Œó4æ¹ÏãÏÛ6¯i^ÿ¼)•ù*n*|•"•f••ªLUoÕÕªmªOÔ0j&jajÙjûÕ.«Ï§ÏwžÏ_4ÿäü‡ê°º‰z¸újõÃê=ꓚ¾U—4Æ5šnšÉšåšç4Ç´hZ µZåZçµ^0•™îÌTf%³‹9¡­®í§-Ñ>¤Ý«=­c¨³Xg£N³Î]’.[7A·\·SwBOK/X/_¯Qï¡>QŸ­Ÿ¤¿G¿[ÊÀÐ Ú`‹A›Á¨¡Š¡¿aža£ác#ª‘«Ñ*£Z£;Æ8c¶qŠñ>ã[&°‰I’IÉMSØÔÞT`ºÏ´Ï kæh&4«5»Ç¢°ÜYY¬FÖ 9Ã<È|£y›ù+ =‹X‹Ý_,í,S-ë,Y)YXm´ê°úÃÚÄšk]c}džjãc³Î¦Ýæµ­©-ßv¿í};š]°Ý»N»Ïöö"û&û1=‡x‡½÷Øtv(»„}Õëèá¸ÎñŒã'{'±ÓI§ßYÎ)ΠΣ ðÔ-rÑqá¸r‘.d.Œ_xp¡ÔUÛ•ãZëúÌM×çvÄmÄÝØ=Ùý¸û+K‘G‹Ç”§“çÏ ^ˆ—¯W‘W¯·’÷bïjï§>:>‰>>¾v¾«}/øaýývúÝó×ðçú×ûO8¬ è ¤FV> 2 uÃÁÁ»‚/Ò_$\ÔBüCv…< 5 ]ús.,4¬&ìy¸Ux~xw-bEDCÄ»HÈÒÈG‹KwFÉGÅEÕGME{E—EK—X,Y³äFŒZŒ ¦={$vr©÷ÒÝK‡ãìâ ãî.3\–³ìÚrµå©ËÏ®_ÁYq*ßÿ‰©åL®ô_¹wåד»‡û’çÆ+çñ]øeü‘—„²„ÑD—Ä]‰cI®IIãOAµàu²_òä©””£)3©Ñ©Íi„´ø´ÓB%aа+]3='½/Ã4£0CºÊiÕîU¢@Ñ‘L(sYf»˜ŽþLõHŒ$›%ƒY ³j²ÞgGeŸÊQÌæôäšänËÉóÉû~5f5wug¾vþ†üÁ5îk­…Ö®\Û¹Nw]Áºáõ¾ëm mHÙðËFËeßnŠÞÔQ Q°¾`h³ïæÆB¹BQá½-Î[lÅllíÝf³­jÛ—"^ÑõbËâŠâO%Ü’ëßY}WùÝÌö„í½¥ö¥ûwàvwÜÝéºóX™bY^ÙЮà]­åÌò¢ò·»Wì¾Va[q`id´2¨²½J¯jGÕ§ê¤êšæ½ê{·íÚÇÛ׿ßmÓÅ>¼È÷Pk­AmÅaÜá¬ÃÏë¢êº¿g_DíHñ‘ÏG…G¥ÇÂuÕ;Ô×7¨7”6’ƱãqÇoýàõC{«éP3£¹ø8!9ñâÇøïž <ÙyŠ}ªé'ýŸö¶ÐZŠZ¡ÖÜÖ‰¶¤6i{L{ßé€ÓÎ-?›ÿ|ôŒö™š³ÊgKϑΜ›9Ÿw~òBÆ…ñ‹‰‡:Wt>º´äÒ®°®ÞË—¯^ñ¹r©Û½ûüU—«g®9];}}½í†ýÖ»ž–_ì~iéµïm½ép³ý–ã­Ž¾}çú]û/Þöº}åŽÿ‹úî.¾{ÿ^Ü=é}ÞýÑ©^?Ìz8ýhýcìã¢' O*žª?­ýÕø×f©½ôì ×`ϳˆg†¸C/ÿ•ù¯OÃÏ©Ï+F´FêG­GÏŒùŒÝz±ôÅðËŒ—Óã…¿)þ¶÷•Ñ«Ÿ~wû½gbÉÄðkÑë™?JÞ¨¾9úÖömçdèäÓwi獵ŠÞ«¾?öý¡ûcôÇ‘éìOøO•Ÿ?w| üòx&mfæß÷„óû2:Y~ßiTXtXML:com.adobe.xmp Michael Sweet Copyright 2013 Apple Inc. CUPS Web Site Icon ðöOx(PLTEBBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttttuuuuuvvvwwwxxxyyyzzz{{{|||}}}~~~€€€‚‚‚ƒƒƒ„„„………†††‡‡‡ˆˆˆ‰‰‰ŠŠŠ‹‹‹ŒŒŒŽŽŽ‘‘‘’’’“““”””•••–––———˜˜˜™™™ššš›››œœœžžžŸŸŸŸ Ÿ   ¡¡¡¢¢¢£££¤¤¤¥¥¥¦¦¦§§§¨¨¨©©©ªªª«««¬¬¬­­­®®®²²²³³³´´´¶¶¶···¸¸¸¹¹¹ººº»»»½½½¾¾¾¿¿¿ÀÀÀÁÁÁÂÂÂÃÃÃÄÄÄÅÅÅÆÆÆÇÇÇÈÈÈÉÉÉÊÊÊËËËÌÌÌÎÎÎÏÏÏÐÐÐÑÑÑÒÒÒÓÓÓÔÔÔÕÕÕ×××ØØØÙÙÙÚÚÚÜÜÜÝÝÝÞÞÞßßßàààáááâââãããäääåååæææçççèèèéééêêêëëëìììíííîîîïïïðððñññòòòóóóôôôõõõööö÷÷÷øøøùùùúúúûûûüüüýýýþþþÿÿÿDšVIDATxÚíXù[T7>™‘‘aAÙ…²ŒÔ‘Vi-n(BG "{©v,*X‹µV«ìbµ_ëg?ùº×î­KK¥.ü{½IN¶™;ÓíyzóÃ=779oι'™$7yçÂÑ£ÓG¹L£j†©©©é)&XXáð‘#‡ÛÉy²áC‡irØ “ÏMÒÄîIÞc8øÜAšØ}÷‰Ä4K$žå… ör`¿&žqd‚%¦Øal|ll||lœ•\³Ã¨•#Ãô湓ÙaÈJ}ƒÎEepW­À00°wÀ0<åÈ^‘1Å ýý}ý\úPµCooo_/,¬ÀßÇ÷8çÉ OZ)ÐÝÝÝÃSÍ»íÀ°{wM]Xî¶C×®®]BºØm†ÎÎ;wvò‹jV`Øa¥À6G¶o§™H6`ØjÊ;0ttlé Âs¥y‹áq+ÚÛÛko¹Ê¼Å°qÓÆ›¨8 `xTJͱCÛGÚ6`±¡Í ±õ±Xlýzšb,·ÃÃŽ´>lŠ÷Ö­k]§I«¢--Ñ–h”ÝŽÞb†ææ&šš°l¶C£&M¦x‡¡ÊCì~ˆ+6`¨§²–¥z‘{¡ÎJšÚ!µ"y¡ºŠ^U˜WUÛ¡²²¢’JEÕ¨n†ò5Ž”¯)g¹Ê<ÆP¦Iy™)Þa()Yå\%¼Š×Š‹WsY‰ª Š˜:—.^c(Ð¥° À ùù‘|M"v`X±bEKÎMs;0ääæäæÒ,'GªÞc‡ÃÙÙaz…±°C(´<´|yˆ_T³C•e,e‰Ü{ `ÐI, ðŒã’½/¿uíúåï2ìåüØ2üWò³,‡Õòl£']Yž[üª¾é¹k_\:=ٻƽ} ¦pè¹ú`IȽ“¥Êž…•!Ýÿu^×ÃðwK¦ÜýòÄf3~ók÷Uð¹u.í;»s`5­ÿ3#/‹{«²tÑ-†“»EåÝ¿ôr’ñj]rûx—hÿ°ÆQ†¤Ä½U…vѭ毺EÒtkéç¸ð/ø,Åø}©Ù>˰› T2í÷Ë|n“˜¥üAM"Å®ÝZZà®ÙºØ>ÍÓÛÇacš˜Ncîa?`ÓFähI¢F‹á4ݺ•ÏüßëâÒ+ç.ÿ(ƒ‰û%ºGï†ßÐõæñ¶ŠHS\®„ÓÌnŒ–xP›D9Zã]ŽìH¼}Ÿ8A]kÍ£¾Íóˆ7‚Oͨ˜× ˜ú#|ŠÉâçWS¬ÖA»1‰jmU {Á%^q¿ØÁS\ŸíE°¹3D'{&g³›½˜£I ö¶ü¹úhI»ê¢[Òžý^Ó®<ëe{ñŠÏ@Gääáâ'¸5\É"ª¶ƒ×Ý Xí[Ê®M¢Zò5Ê>Ák†Œá#²½0Ÿã_ˆO΢x ¢ØêfQÉ&[*Õ—¼fw]òÕÊþ(¯yÉÁW¸ºU¾t$>::2:2Ðãi³Çá~þØõ(3ÞÙ¹ÙÙ¹¹kK^Ùµµª[ÒÞÈkÎ9x–« ÝF|mx@[øj§Ç÷n„¨¹5ìDÛå•Ým´j”½Ÿ×$µOšnñõ¥/·ŒÀ"h­r6ìj; év};%Æh1û«¼f‡ƒònªìö냵)ñµg(Ä'òåöaÚÍ]^ÚÕ™H´Iöa|¤–âØ]c“ýéÕÞ#¾šV<¨Ž»Ý‚Àªûëg¢´ëg¢èV- ̯ìz[œÈÜOòöçx)¤´§V-[ñŒRÇ81ìæv*íúvšîðyÐ,vƯ’Mw'RÛÓÎGBbÜï#­7†]›DÝþgŽêSÒ?käF²ñéäöL¾U˽~Iå?ÿŒo9Œ+¢ùc3_›æÑŒ|«½ò’ùÄo-ô§Ä«|êü-Ícm&¾@úPgòŸÂ&-æ¡ìoðºî4“xëìêT>åä 3?Ÿ—3ò­÷¸Ó1øÏ ¯}†b|Á uûûx¤èÛéÌ—þmMƒÏíåÌ ïù.#ßJp§oÿÁÑØBñb<5;.”õ:ߪ6ù×_œ¥r6 ñ»mH{‚™øV Žéý#³YMñ'\ߦكø‹ë\ù–^ž*þç¼®(#ßBæ1Ÿ«ñŸãH 8ÇÁ;š‰Ï,w¾¥Å¿ÈmOê'ô5¾­-ËÈ·¶ãpÍÉÚè}Å—äaû Q=u ™#I÷”†ät>,Ûƒbþ7ëûŒ|‹‘J.]¯D¿}¿òНr.Ãk hœÁ'†! ßRñëÐõB@T†ðé“ù@õñ÷žM“ÿ0Šî³â¾ÐÛÖо÷˜Ø²o„! ßÒâÿ¿Ê¥8»ã*VÄ2ò-¢Q"SÂ^sÏÝa ßÒâ^WäáêûŸ, ðfF¾Å —?ÕÎ?¹€´Ç]{uVØSù–¿ê¶ÛÃß–dä[ïXLyîJ‘fYtéÕ2aOá[fü6—ÁþvMf¾…Ý-›5ûíHа¯z%i@?ˆ*»¹A”øÕ§î&õêdîð-¹ÅFO+òqóXqнþ¢ú´ôñÝn¼‰)|–ÅÏ/hæñ—ö“ù”ÄÁÖ¡éSoœya¸¸ÚCíûfο4¶µ>ìjψ—×mßòù–Ï·|¾åó-Ÿoù|Ëç[>ßòù–Ï·|¾åó-Ÿoù|Ëç[>ßòùÖ_À¿ðÖÑ⫱ƒ=IEND®B`‚cups-2.2.7/doc/cups-printable.css000664 000765 000024 00000012106 13255074424 017362 0ustar00msweetstaff000000 000000 BODY { font-family: lucida grande, geneva, helvetica, arial, sans-serif; } H1, H2, H3, H4, H5, H6, P, TD, TH { font-family: lucida grande, geneva, helvetica, arial, sans-serif; } KBD { font-family: monaco, courier, monospace; font-weight: bold; } PRE { font-family: monaco, courier, monospace; } PRE.command { border: dotted thin #7f7f7f; margin-left: 36pt; padding: 10px; } P.compact { margin: 0; } P.example { font-style: italic; margin-left: 36pt; } DL.man DD { margin-left: 5em; } DL.man DT { margin-left: 0; } PRE.man { margin: 0; } PRE.example { background: #eeeeee; border: dotted thin #999999; margin-left: 36pt; padding: 10pt; } PRE.command EM, PRE.example EM { font-family: lucida grande, geneva, helvetica, arial, sans-serif; } P.command { font-family: monaco, courier, monospace; margin-left: 36pt; } P.formula { font-style: italic; margin-left: 36pt; } BLOCKQUOTE { background: #eeeeee; border: solid thin #999999; padding: 10pt; } A IMG { border: none; } A:link:hover IMG { background: #f0f0f0; border-radius: 10px; -moz-border-radius: 10px; } A:link, A:visited { font-weight: inherit; text-decoration: none; } A:link:hover, A:visited:hover, A:active { text-decoration: underline; } SUB, SUP { font-size: 50%; } TR.data, TD.data, TR.data TD { margin-top: 10pt; padding: 5pt; border-bottom: solid 1pt #999999; } TR.data TH { border-bottom: solid 1pt #999999; padding-top: 10pt; padding-left: 5pt; text-align: left; } DIV.table TABLE { border: solid thin #999999; border-collapse: collapse; border-spacing: 0; margin-left: auto; margin-right: auto; } DIV.table CAPTION { caption-side: top; font-size: 120%; font-style: italic; font-weight: bold; margin-left: auto; margin-right: auto; } DIV.table TABLE TD { border: solid thin #cccccc; padding-top: 5pt; } DIV.table TABLE TH { background: #cccccc; border: none; border-bottom: solid thin #999999; } DIV.figure TABLE { margin-left: auto; margin-right: auto; } DIV.figure CAPTION { caption-side: bottom; font-size: 120%; font-style: italic; font-weight: bold; margin-left: auto; margin-right: auto; } TH.label { text-align: right; vertical-align: top; } TH.sublabel { text-align: right; font-weight: normal; } HR { border: solid thin; } SPAN.info { background: black; border: thin solid black; color: white; font-size: 80%; font-style: italic; font-weight: bold; white-space: nowrap; } H2 SPAN.info, H3 SPAN.info, H4 SPAN.info { float: right; font-size: 100%; } H1.title { } H2.title, H3.title { border-bottom: solid 2pt #000000; } DIV.indent, TABLE.indent { margin-top: 2em; margin-left: auto; margin-right: auto; width: 90%; } TABLE.indent { border-collapse: collapse; } TABLE.indent TD, TABLE.indent TH { padding: 0; } TABLE.list { border-collapse: collapse; margin-left: auto; margin-right: auto; width: 90%; } TABLE.list TH { background: white; border-bottom: solid thin #cccccc; color: #444444; padding-top: 10pt; padding-left: 5pt; text-align: left; vertical-align: bottom; white-space: nowrap; } TABLE.list TH A { color: #4444cc; } TABLE.list TD { border-bottom: solid thin #eeeeee; padding-top: 5pt; padding-left: 5pt; } TABLE.list TR:nth-child(even) { background: #f8f8f8; } TABLE.list TR:nth-child(odd) { background: #f4f4f4; } DT { margin-left: 36pt; margin-top: 12pt; } DD { margin-left: 54pt; } DL.category DT { font-weight: bold; } P.summary { margin-left: 36pt; font-family: monaco, courier, monospace; } DIV.summary TABLE { border: solid thin #999999; border-collapse: collapse; border-spacing: 0; margin: 10px; } DIV.summary TABLE TD, DIV.summary TABLE TH { border: solid thin #999999; padding: 5px; text-align: left; vertical-align: top; } DIV.summary TABLE THEAD TH { background: #eeeeee; } /* API documentation styles... */ div.body h1 { margin: 0; } div.body h2 { margin-top: 1.5em; } div.body h3, div.body h4, div.body h5 { margin-bottom: 0.5em; margin-top: 1.5em; } .class, .enumeration, .function, .struct, .typedef, .union { border-bottom: solid thin #999999; margin-bottom: 0; margin-top: 2em; } .description { margin-top: 0.5em; } code, p.code, pre, ul.code li { font-family: monaco, courier, monospace; font-size: 90%; } ul.code, ul.contents, ul.subcontents { list-style-type: none; margin: 0; padding-left: 0; } ul.code li { margin: 0; } ul.contents > li { margin-top: 1em; } ul.contents li ul.code, ul.contents li ul.subcontents { padding-left: 2em; } div.body dl { margin-left: 0; margin-top: 0; } div.body dt { font-style: italic; margin-left: 0; margin-top: 0; } div.body dd { margin-bottom: 0.5em; } /* This is just for the HTML files generated with the framedhelp target */ div.contents { background: #e8e8e8; border: solid thin black; padding: 10px; } div.contents h1 { font-size: 110%; } div.contents h2 { font-size: 100%; } div.contents ul.contents { font-size: 80%; } div.contents ul.subcontents li { margin-left: 1em; text-indent: -1em; } cups-2.2.7/doc/cups.css000664 000765 000024 00000023351 13255074424 015410 0ustar00msweetstaff000000 000000 /* Layout CSS */ .header { background: rgba(46,46,46,.9); box-shadow: 0px 2px 5px rgba(0,0,0,0.25); color: white; left: 0; margin-bottom: 20px; padding: 0px; position: fixed; right: 0; top: 0; width: 100%; } .header ul { list-style: none; margin: 0px; -webkit-margin-before: 0; -webkit-margin-after: 0; -webkit-margin-start: 0; -webkit-margin-end: 5px; -webkit-padding-start: 0; } .header ul li { float: left; } .header a { display: block; padding: 5px 10px !important; } .header a:link, .header a:visited { color: white !important; text-decoration: none !important; } .header a:hover { background: #cccccc !important; color: #333333 !important; text-decoration: none !important; } .header a.active { background: white !important; box-shadow: rgba(0,0,0,0.1) 0px 0px 10px 0px inset; color: black !important; text-decoration: none !important; } .body { padding: 40px 20px; } .footer { background: rgba(46,46,46,.9); bottom: 0; box-shadow: 0px -2px 5px rgba(0,0,0,0.25); color: #cccccc; font-size: 10px; height: 20px; left: 0; padding: 10px 10px 3px; position: fixed; width: 100%; } .footer a:link, footer a:hover, .footer a:visited { color: white !important; text-decoration: none !important; } .row { width: 100%; *zoom: 1; } .row:after { clear: both; } .row .thirds { float: left; margin-left: 0.5%; margin-right: 0; width: 33%; } .row .thirds:first-child { margin-left: 0; } .row .halves { float: left; margin-left: 0.5%; margin-right: 0; width: 49.75%; } .row .halves:first-child { margin-left: 0; } .mobile { display: none; } .no-mobile { display: inherit; } /* Appearance CSS */ BODY { background: white; color: black; font-family: lucida grande, geneva, helvetica, arial, sans-serif; margin: 0; } H1, H2, H3, H4, H5, H6, P, TD, TH { font-family: lucida grande, geneva, helvetica, arial, sans-serif; } KBD { color: #006600; font-family: monaco, courier, monospace; font-weight: bold; } PRE { font-family: monaco, courier, monospace; } PRE.command { background: #f0f0f0; border: dotted thin #7f7f7f; color: #7f0000; margin-left: 36pt; padding: 10px; } P.example { font-style: italic; margin-left: 36pt; } DL.man DD { margin-left: 5em; } DL.man DT { margin-left: 0; } PRE.man { margin: 0; } PRE.example { background: white; border: dotted thin #999999; margin-left: 36pt; padding: 10px; } PRE.command EM, PRE.example EM { color: #3f0000; font-family: lucida grande, geneva, helvetica, arial, sans-serif; } P.command { color: #7f0000; font-family: monaco, courier, monospace; margin-left: 36pt; } P.formula { font-style: italic; margin-left: 36pt; } BLOCKQUOTE { background: #f0f0f0; border: inset 1px #eeeeee; padding: 10px; /* These are not implemented by all browsers, but that's OK */ border-radius: 5px; -moz-border-radius: 5px; } A IMG { border: none; } A:link:hover IMG { background: #f0f0f0; border-radius: 10px; -moz-border-radius: 10px; } A:link, A:visited { font-weight: inherit; text-decoration: none; color: #000099; } A:link:hover, A:visited:hover, A:active { text-decoration: underline; color: #990099; } TABLE.page { border: none; border-collapse: collapse; height: 100%; margin: 0; padding: 0; width: 100%; } TD.body { height: 100%; vertical-align: top; } TD.sel, TD.unsel { border-left: thin solid #cccccc; padding: 0px 5px; text-align: center; vertical-align: middle; width: 14%; } TD.sel { background: url(images/sel.gif); } TD.unsel { background: url(images/unsel.gif); } TD.sel A, TD.sel A:hover, TD.unsel A:link:hover, TD.unsel A:visited:hover, TD.unsel A:active, TD.unsel A, TD.unsel A:visited { color: #666666; display: block; font-weight: normal; padding: 8px; text-decoration: none; } TD.trailer { background: #f0f0f0; border: solid thin #e0e0e0; color: #666666; font-size: 80%; padding: 5px; } TD.trailer A { color: #666699; } FORM { display: inline; } INPUT[TYPE="TEXT"], TEXTAREA { font-family: monaco, courier, monospace; } INPUT[TYPE="IMAGE"] { border: none; padding: 2pt; vertical-align: bottom; } SUB, SUP { font-size: 50%; } TR.data, TD.data, TR.data TD { margin-top: 10pt; padding: 5pt; border-bottom: solid 1pt #999999; } TR.data TH { border-bottom: solid 1pt #999999; padding-top: 10pt; padding-left: 5pt; text-align: left; } DIV.table TABLE { border: solid thin #999999; border-collapse: collapse; border-spacing: 0; margin-left: auto; margin-right: auto; } DIV.table CAPTION { caption-side: top; font-size: 120%; font-style: italic; font-weight: bold; margin-left: auto; margin-right: auto; } DIV.table TABLE TD { background: white; border: solid thin #bbbbbb; padding-top: 5pt; } DIV.table TABLE TH { background: #f0f0f0; border: none; border-bottom: solid thin #999999; } DIV.figure TABLE { margin-left: auto; margin-right: auto; } DIV.figure CAPTION { caption-side: bottom; font-size: 120%; font-style: italic; font-weight: bold; margin-left: auto; margin-right: auto; } TH.label { text-align: right; vertical-align: top; } TH.sublabel { text-align: right; font-weight: normal; } HR { border: solid thin; } SPAN.info { background: black; border: thin solid black; color: white; font-size: 80%; font-style: italic; font-weight: bold; white-space: nowrap; } H2 SPAN.info, H3 SPAN.info, H4 SPAN.info { float: right; font-size: 100%; } .conflict { background: red; color: white; } TH.conflict { text-align: right; } H1.title { display: none; } H2.title, H3.title { border-bottom: solid 1pt #999999; } TABLE.indent { margin-top: 2em; margin-left: auto; margin-right: auto; width: 90%; } TABLE.indent { border-collapse: collapse; } TABLE.indent TD, TABLE.indent TH { padding: 0; } TABLE.list { border-collapse: collapse; margin-left: auto; margin-right: auto; width: 90%; } TABLE.list TH { background: white; border-bottom: solid thin #cccccc; color: #444444; padding-top: 10pt; padding-left: 5pt; text-align: left; vertical-align: bottom; white-space: nowrap; } TABLE.list TH A { color: #4444cc; } TABLE.list TD { border-bottom: solid thin #eeeeee; padding-top: 5pt; padding-left: 5pt; } TABLE.list TR:nth-child(even) { background: #f8f8f8; } TABLE.list TR:nth-child(odd) { background: #f4f4f4; } DIV.sidebar { float: right; min-width: 25%; margin-left: 10px; max-width: 33%; } DIV.sidebar P.l0 { margin-bottom: 0; margin-left: 0; margin-right: 0; margin-top: 12pt; } DIV.sidebar P.l1 { margin-bottom: 0; margin-left: 36pt; margin-right: 0; margin-top: 0; text-indent: -18pt; } DIV.sidebar P.l2 { font-style: italic; margin-bottom: 0; margin-left: 54pt; margin-right: 0; margin-top: 0; text-indent: -18pt; } TABLE.inset { background: #f0f0f0; border: thin solid #e0e0e0; margin-top: 1em; padding: 0; width: 100%; /* These are not implemented by all browsers, but that's OK */ border-radius: 5px; -moz-border-radius: 5px; } TABLE.inset CAPTION { caption-side: top; color: #666666; font-size: 80%; margin-left: 10px; margin-bottom: 2px; text-align: left; } TABLE.inset TD { padding: 2px; } DT { margin-left: 36pt; margin-top: 12pt; } DD { margin-left: 54pt; } DL.category DT { font-weight: bold; } P.summary { margin-left: 36pt; font-family: monaco, courier, monospace; } DIV.summary TABLE { border: solid thin #999999; border-collapse: collapse; border-spacing: 0; margin: 10px; } DIV.summary TABLE TD, DIV.summary TABLE TH { background: white; border: solid thin #999999; border-spacing: 0; padding: 5px; text-align: left; vertical-align: top; } DIV.summary TABLE THEAD TH { background: #f0f0f0; } DIV.tabs { height: 480px; overflow: hidden; } DIV.tab { float: left; height: 100%; overflow-y: auto; width: 100%; } /* API documentation styles... */ div.body h1 { margin: 0; } div.body h2 { margin-top: 1.5em; } div.body h3, div.body h4, div.body h5 { margin-bottom: 0.5em; margin-top: 1.5em; } .class, .enumeration, .function, .struct, .typedef, .union { border-bottom: solid thin #999999; margin-bottom: 0; margin-top: 2em; } .description { margin-top: 0.5em; } code, p.code, pre, ul.code li { font-family: monaco, courier, monospace; font-size: 90%; } ul.code, ul.contents, ul.subcontents { list-style-type: none; margin: 0; padding-left: 0; } ul.code li { margin: 0; } ul.contents > li { margin-top: 1em; } ul.contents li ul.code, ul.contents li ul.subcontents { padding-left: 2em; } div.body dl { margin-left: 0; margin-top: 0; } div.body dt { font-style: italic; margin-left: 0; margin-top: 0; } div.body dd { margin-bottom: 0.5em; } /* iPhone/iPod touch overrides */ @media only screen and (min-device-width: 320px) and (max-device-width: 480px), only screen and (min-device-width: 320px) and (max-device-width: 568px) { .mobile { display: inherit; } .no-mobile { display: none; } .header { margin: 0; position: relative; } .header ul li { float: none; } .body { paddng: 0px; } .footer { font-size: 10px; height: auto; position: relative; } .row .thirds, .row .halves { float: none; margin: 0; width: 100%; } DIV.sidebar { float: none; margin-left: 0; max-width: 100%; min-width: 100%; width: 100%; } BLOCKQUOTE { margin: 0; } P.example { margin-left: 0; } PRE.command, PRE.example, PRE.man { margin-left: 0; white-space: pre-wrap; } } /* iPad overrides */ @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { .mobile { display: inherit; } .no-mobile { display: none; } } cups-2.2.7/doc/de/000775 000765 000024 00000000000 13255074424 014310 5ustar00msweetstaff000000 000000 cups-2.2.7/doc/es/000775 000765 000024 00000000000 13255074424 014327 5ustar00msweetstaff000000 000000 cups-2.2.7/doc/help/000775 000765 000024 00000000000 13255074424 014650 5ustar00msweetstaff000000 000000 cups-2.2.7/doc/images/000775 000765 000024 00000000000 13255074424 015165 5ustar00msweetstaff000000 000000 cups-2.2.7/doc/index.html.in000664 000765 000024 00000004533 13255074424 016327 0ustar00msweetstaff000000 000000 Home - CUPS @CUPS_VERSION@@CUPS_REVISION@

    CUPS @CUPS_VERSION@

    CUPS is the standards-based, open source printing system developed by Apple Inc. for macOS® and other UNIX®-like operating systems.

    cups-2.2.7/doc/ja/000775 000765 000024 00000000000 13255074424 014312 5ustar00msweetstaff000000 000000 cups-2.2.7/doc/Makefile000664 000765 000024 00000011646 13255074424 015370 0ustar00msweetstaff000000 000000 # # Documentation makefile for CUPS. # # Copyright 2007-2016 by Apple Inc. # Copyright 1997-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include ../Makedefs # # Document files... # WEBPAGES = \ apple-touch-icon.png \ cups.css \ cups-printable.css \ index.html \ robots.txt WEBIMAGES = \ images/color-wheel.png \ images/cups.png \ images/cups-icon.png \ images/generic.png \ images/left.gif \ images/right.gif \ images/sel.gif \ images/unsel.gif \ images/wait.gif HELPIMAGES = \ images/cups-block-diagram.png \ images/cups-command-chain.png \ images/cups-postscript-chain.png \ images/cups-raster-chain.png \ images/raster.png \ images/raster-organization.png \ images/sample-image.png \ images/smiley.jpg HELPFILES = \ help/accounting.html \ help/api-admin.html \ help/api-filter.html \ help/api-ppd.html \ help/api-raster.html \ help/cgi.html \ help/cupspm.html \ help/encryption.html \ help/glossary.html \ help/kerberos.html \ help/license.html \ help/man-backend.html \ help/man-cancel.html \ help/man-classes.conf.html \ help/man-client.conf.html \ help/man-cups.html \ help/man-cups-config.html \ help/man-cups-files.conf.html \ help/man-cups-lpd.html \ help/man-cups-snmp.html \ help/man-cupsaccept.html \ help/man-cupsaddsmb.html \ help/man-cupsd.conf.html \ help/man-cupsd.html \ help/man-cupsd-helper.html \ help/man-cupsd-logs.html \ help/man-cupsenable.html \ help/man-cupstestdsc.html \ help/man-cupstestppd.html \ help/man-filter.html \ help/man-ipptool.html \ help/man-ipptoolfile.html \ help/man-lp.html \ help/man-lpadmin.html \ help/man-lpc.html \ help/man-lpinfo.html \ help/man-lpmove.html \ help/man-lpoptions.html \ help/man-lpq.html \ help/man-lpr.html \ help/man-lprm.html \ help/man-lpstat.html \ help/man-mime.convs.html \ help/man-mime.types.html \ help/man-notifier.html \ help/man-ppdc.html \ help/man-ppdhtml.html \ help/man-ppdi.html \ help/man-ppdmerge.html \ help/man-ppdpo.html \ help/man-printers.conf.html \ help/man-subscriptions.conf.html \ help/network.html \ help/options.html \ help/overview.html \ help/policies.html \ help/postscript-driver.html \ help/ppd-compiler.html \ help/raster-driver.html \ help/ref-ppdcfile.html \ help/security.html \ help/sharing.html \ help/spec-banner.html \ help/spec-command.html \ help/spec-design.html \ help/spec-ipp.html \ help/spec-pdf.html \ help/spec-postscript.html \ help/spec-ppd.html \ help/spec-raster.html \ help/spec-stp.html \ help/translation.html # # Make all documents... # all: # # Make library targets... # libs: # # Make unit tests... # unittests: # # Remove all generated files... # clean: # # Dummy depend target... # depend: # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: $(INSTALL_LANGUAGES) $(INSTALL_DIR) -m 755 $(DOCDIR) for file in $(WEBPAGES); do \ $(INSTALL_MAN) $$file $(DOCDIR); \ done $(INSTALL_DIR) -m 755 $(DOCDIR)/help for file in $(HELPFILES); do \ $(INSTALL_MAN) $$file $(DOCDIR)/help; \ done $(INSTALL_DIR) -m 755 $(DOCDIR)/images for file in $(WEBIMAGES) $(HELPIMAGES); do \ $(INSTALL_MAN) $$file $(DOCDIR)/images; \ done install-languages: for lang in $(LANGUAGES); do \ if test -d $$lang; then \ $(INSTALL_DIR) -m 755 $(DOCDIR)/$$lang; \ $(INSTALL_DATA) $$lang/index.html $(DOCDIR)/$$lang; \ $(INSTALL_DATA) $$lang/cups.css $(DOCDIR)/$$lang >/dev/null 2>&1 || true; \ fi; \ done install-langbundle: # # Install programs... # install-exec: # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Uninstall all documentation files... # uninstall: $(UNINSTALL_LANGUAGES) for file in $(WEBPAGES); do \ $(RM) $(DOCDIR)/$$file; \ done for file in $(HELPFILES); do \ $(RM) $(DOCDIR)/$$file; \ done for file in $(WEBIMAGES); do \ $(RM) $(DOCDIR)/$$file; \ done -$(RMDIR) $(DOCDIR)/images -$(RMDIR) $(DOCDIR)/help -$(RMDIR) $(DOCDIR) uninstall-languages: -for lang in $(LANGUAGES); do \ $(RM) $(DOCDIR)/$$lang/index.html; \ $(RM) $(DOCDIR)/$$lang/cups.css; \ $(RMDIR) $(DOCDIR)/$$lang; \ done install-langbundle: # # Install the docset bits locally... # docset: cp $(HELPFILES) ../org.cups.docset/Contents/Resources/Documentation/help cp cups-printable.css ../org.cups.docset/Contents/Resources/Documentation cp $(HELPIMAGES) ../org.cups.docset/Contents/Resources/Documentation/images cups-2.2.7/doc/pt_BR/000775 000765 000024 00000000000 13255074424 014726 5ustar00msweetstaff000000 000000 cups-2.2.7/doc/robots.txt000664 000765 000024 00000000137 13255074424 015772 0ustar00msweetstaff000000 000000 # # This file tells search engines not to index your CUPS server. # User-agent: * Disallow: / cups-2.2.7/doc/ru/000775 000765 000024 00000000000 13255074424 014346 5ustar00msweetstaff000000 000000 cups-2.2.7/doc/ru/index.html.in000664 000765 000024 00000006034 13255074424 016753 0ustar00msweetstaff000000 000000 Home - CUPS @CUPS_VERSION@@CUPS_REVISION@

    CUPS @CUPS_VERSION@

    CUPS — Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÑŽÑ‰Ð°Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтво Ñтандартов, ÑÐ²Ð¾Ð±Ð¾Ð´Ð½Ð°Ñ Ð¿Ð¾Ð´ÑиÑтема печати, Ñ€Ð°Ð·Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°ÐµÐ¼Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸ÐµÐ¹ Apple Inc. Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¾Ð¹ ÑиÑтемы macOS® и других UNIX®-подобных операционных ÑиÑтем.

    cups-2.2.7/doc/pt_BR/index.html.in000664 000765 000024 00000005221 13255074424 017330 0ustar00msweetstaff000000 000000 Início - CUPS @CUPS_VERSION@@CUPS_REVISION@

    CUPS @CUPS_VERSION@

    CUPS é o sistema de impressão baseado em padrões e de código aberto desenvolvido pela Apple Inc. para macOS® e outros sistemas operacionais similares ao UNIX®.

    cups-2.2.7/doc/ja/index.html.in000664 000765 000024 00000005050 13255074424 016714 0ustar00msweetstaff000000 000000 ホーム - CUPS @CUPS_VERSION@@CUPS_REVISION@ cups-2.2.7/doc/images/color-wheel.png000664 000765 000024 00000040000 13255074424 020105 0ustar00msweetstaff000000 000000 ‰PNG  IHDRÀ€¥áÁªsRGB®Îé pHYs  šœtIMEØ 7F IDATxÚí½{”]W}çùÙçœûª*©T¥‡%?%ì¶“•°’ð²c Ád’îé`{‡À˜Fn é¬Ž!¡Ó Ý‹LHOz½:Œ¶Ó! ô`;À"+رÁ v›·K²,ëa=ë}çž³çsö>¿}ö¾U%Y“廮˷J·nû»¿ý{~ߟÒZs:nIíû9|ß… É·²[±ý‹õßéŒ)ÐZ+”F£”ª½â&¸.‚Z1€EÔͰýÑêiÓë¦4(€–/¤¸ Î Ø=€ÌÁq8‚z-úËå3§¦×iTù åKšR¬ƒ´`=,‚fAqÀ³pµ=055–Ñ#<¸ŽÙ À:x)ZqöÂ.Ø ‡X—™+ššªÞºz¡›¸âB˜#;¾Yæ@ÁV2Íß„ï05ÏzX W*ÐLOMéê”RMlƒz°ǘÝÅÎ"z¿Áݬ˜m0ЂFqÁSÓJ¡ÑJ—’F‘•²/¯UA—~vó·îýô´ýÛöS›ž­5J¡QJëò­]-h쇗jÚŸ‡Þk_Ïçg¹b‡EèÁÀ‘‘.e¤Uùñ_ã0 `ü|þ¾øð?7Iþ3üÔ,“GaÅ ™—)ßM¼½€šèÃØß=@»àÛ '¹h-›çˆ'uíSóŽÈÄq8 ûa7<'Š: {aPô&ÙkG¼2š=­ù¦âY8ÇÌ{`ŽÂAh苬°¤«w(ÎÚ/hnVƒÙB15taŽÁúÍö‰ë¦¦Ñ…&•ÇP3ò:ÅnØÃE° ý…Ú¿÷}¥ •VZQ>]B6CE£Ÿ»`­96+i€é©)í˜#c!·Á8ÁÌAfsz°^Ísð]ø&Én΂)2ª^Ŧä.~÷"À\„>È~Àø¾ò îä’.gÁè@Kš‘B´ÖÆ%ñG»Æ(bfœw§|Wrc/ämݺ)£…Õ¿%×ó_ÿ'7¶` &á8ï üðø·»Xsæ`ÉØóRFª´‘Ö$&/aÇ 7®)Ø4„'áËðàkð·qÅV.<„š{EÓÓJ «ª©„=ÑQØÁ£…9 ߃ñ˜Þ9œ·µ3âŠÂÿz4û‡`/ìC…\‚°¶Ø|–Þl䔕’9"à €Ã0[ç¾ÑÈ ˆ¹s«PÈi´uÚZ9/ôJÍ·ó™ECX„ã0‰~—|SSSJkTyÒ(쇮Ý>øý2ô$ššWèÛ¾¤½[¯ßï÷z½^¯ß/î}­5zÕ·§Oœ£gU–ÿ䬾mNŸÔ ¥ª€Pæ›òƒ7?/|”|šÛø3˜„u0Ó0ëÑÓƒãp NÀ œ€Yôï.g>×OO»U?&Õ¹×?~<ñYñ+°ÖÂ$hˆ ‡œ†Ðƒ%˜‡Ùò²Ô¿„9˜Gÿ]à‚ÖMMY}3^L•–Qæ… σq˜€X‚¤æšŠ#MªX‚98G(6 ³°€º„Û>ÈŽëÝèejŠ2lEAiz ,Ý£ªlð¢JÓ1X 30‹Ð7¦|Ö£K0 Gà2×4 s°‹üË·ð¿FW;B)´VJi Ðª*&B™ƒV^ÐO¡¶BÝe©ÇÒ"GSÚ0 Óp æa-ØD³Æ%ìp¤”PcÀ¸±Ç-xçÕüÙ=∣ •./C› cÕ¤„¶ÁRHa}èÒ[ 7Ëssü@³ÀL3¼ŒÝЇÊH,:̺œ5T—Ò„ÄpàÞZÀYþMí¤ 6&*Â~à÷9÷Bã)2ÐAC@á"ûޱo_>Áw9r5bË£œS0f.""qW¬à•G†3/eê8û£Ò™•¯›@ÄËk`#lä­»ïáú à¿ÏðʧQÇD¸œš·‘›»v.hZ £ÊoÌg¦Êx¦¼ _㻊¡ hB:0ë ³ûa|îŽÁG×qåËøiئ9k–¤Pþ.ôÍÅ¥…¹¯NÙ:£$JI‡Ayø•̉€­Ð„&t cµ3pÜF{à Ø_ø”=0óð¬âœul\Ç4Lhu¡ =èÃÆÛÄ)›ž¦rìÚØåâµQ"qÊ.EQÉ–`Œ™9‡á < ÏÑ»†Y8 ¤0Ç`Ö5™l21ɘ¦^©š;dî»N+%]`™P—ŠfC"a‡4³ïæ¹[Y0&¸ÐQciæ ÷Cfá(ÄÆlï`-LÀ„Ò7]Ušž6'Ê„?º¼Â6*ŒÑ×ßÂú[ø\Ì\Î<̘k:ó”ñ)RJSÝ„rc+–¸s;×löÏÎÔÔ”sÒEì§äÑ÷“€f2ñ÷«Ê\wa`uXþyæËW¸òîÇ2‡yõÇþ´¥C§ëö‚» h•Ï»Ÿ¥×q¢E²Ë¯Ÿàhv2#Š"¥”Š"E‘RQ©¨øN)UüEJEje µøä€µ&F›‚)–Úœ ¼ÏðŽ Üþê.hl¬c£Ÿòà—9«ÉÈŒÇ]ZZyAŠß‡I˜¬.…õ°žÅv¯ÂÅ·\À'®yAÓë×#ÿŠ(4Y#Tü 1Šk±žÊ8¨ÜÄý20¸ã!îø"ú–ðuZí"•W"€æHØKÿØœ{ßέ°ãKzæÄg ÉH ôK°„úUô߆.h¬]Ö_´ý€ª0QWRó.è~y;„5 ?;}HK i!žâ‚·Y@]Ž~°~AívlHæÞÊË©l¦sA¯á:˜0f³ˆíÛFÅGäwa©¼æÍ}u!zwý‚TÔ[AUÕV ·¸;£+Å-6×4=–Y‡-sί7[¦Ìí)ú'ÄGÖiŸt½éN>•°8,Å`Ô¥ ÔŠ Z‚h2ã6 :k\Þœq2KäCW‡Úmja‡²¥àU"à7¹~ú¤]f³êX×Ô‚qX€ä ¡Kéz‹tñÌ”9PÜ£m8G±ß¨v§Sª­òÒD'ÀJ½Îá6té.V¡ŸMʦʬ e‘žÃð…Ô"c9cÐ6Q¶øÈ:â°ƒ-畺cb"›uü2“ëÌß/>qòyf»ePšAká\Òƒãpž5QÛ ÆR&p®¦!•ºÓ./qغ0Ö6œ-.¨ÁÜ”HƒŠã< s NppPÆA-Ø=æáYØ »ac‹LR^MËTìÀ[¹íi«CVyLÒœóZ””Sæ,çæš¬¨6 fžc~HÖÁÏs¾ ÐÞÏ&]^MÇ\J‘«©Ë`¯°C¶Ò Œ+m’U§ŽV]LaЇ¦n8Gv€'wq,çÕ|ée­Ïò’>MÝÐf†±IÇìW«C'wì×¹q¤ÿØXÉcçñÿÈÛf8‹[.Ý¥g„ËLUçÈv‘•Åóª7í¾­ØÄ‘ó`óxð¡œßØÃä!cw¤í²X‹+nuìå”Q‡IÎD`­’×Ñ0æy &`6ôà Ø OFl»ˆW_ÀÖÃD'Låfº2+!£3&+ °Ö@–ˆq“F šæRŠ«Y“9qÑ‹y‡9(«Ø„ÞÙœ»žµ3¥Ã(ÞÀØMoò”Z‰Ã/ â3L€—ð¦Yî.2×eh $ p Â^Ø ‡‹2ó"„§M}ö¬³˜^KÓV¸ú&6xù]žR{Å—*N’JýO¸ëITSȦ90™ëQQç)ü}Ï©ó’Á Ãd›5KDE`Ð+Çu`ºˆ˜ ¶¨£•aš–ºøÔ Ù´rãÆ‹âáa“¶Î@2Lú\TóZ&QLƒqÖthuQ]ચs=IoV‘ÏöŒŸ7ñò ;ßj¢¡â’Ç!,WÄø8cM’Æ}î©Ò3Pv80A#¶± k5F5gÂ?™ÛϘÊa‘¹æ˜ÄÙÖ`››×(ÝOãÓò•+oOi§­‰ªbØ@*=©9¬ªP1˘±è—d¯½c hÊ Œ›Öãz{Çg‰~KU¡)$Wò_ªy@•´`‚å%#žÌ^ ñ‹¸0¢‘©©þ„S—‚PULfMdÕ- ®Ô|Z•—RÈÆ–†öìM¹£¸¦–ùàúõ¬£Ý®¹vÇ×#TÁêÇuš?UåÇÔ68·AUæ^Sš4›ôß<8í±vôЕxŠbU¼j­”½ªp¢È¿ÖA9ê“ÜMvغ¥ìöŸ@½"s j·ËXXÔ¾Êò®‰.tYl- Q‰î,zôÊVìm«|%).5icRóÕj‚Lš•Ñ£Ð4ÿj~fB•AewÊ(tÉär=Ç*•ØõS\ùSÜÿ‰•4¨:bA8G­ò`ƒ{°(ËÀ×°¼]Í5÷ò#Ù6WMGÄköZbÑÆ6ÿj¹A…(;¨6X_r•¨gži¢Ôv¢6¡¯Î™Jx¡3e*• Ó2(±ÊFà@ôF (FåÕ[µÔ„ž1ÏÅûè¸UQ@¢eÒ“­ÊŠÜ@”ÙMÅ¿,™, ×÷T”R¨_øj¹ˆÍ7ªªXikþó¦Îeõ¨ç h`4$ÎË”ï#}'ÿôšå½˜©Yº%9·É\oD3⇎€~‚Ö¤ëp†ä)ƒ”A ºT–ñeEùhɼ­ÔHDöE2´*[×…Ö–“ /èH¯’N4,u¸aŒ¡Õ¿y-¯_ 3è4©*øÑFGŒW/̯mîhÓN0ÐSÍÓÌ«& Ïqû8ƒŽèȨe)iŸ4e!#Ñ¥ŒÆ`Ü´?–L"YȨ€Ò Ñ00í™cpÔàÂf\õ ‹ê“䥮&žhbsÍi_ƒÎ°›ÿ¸qÊØÓLøåÜ _†ÐgØgØgqÀ‰¼¬H¾â÷!‡F œË5]Å åÄ!##«AKDÚÚéFHÑĦž‹ˆëÓÌu¿]óbm‹gÁ"~d~…¼è¢êªë…3](”òô÷¯ñ_îv2#¦¬èå=––XZâhJ ÖÁ4‡È  ›*ŽÃ>x öÜÜ Ô<­”qÑ3²Š#•%_eAÿ®÷×Ôétj…÷ªò„Û_ö› Ê‹ ”‹©úœ‘Ÿmh[aÙ»Èt—Þ"‡f8´ÀS[`?ô`½‹ù>| ¾{iΰ.cG4‰+—ȃÓ)ñ@‰¶‹_™³¶X›z3XØ1HR B›6”ÁW¹6è_r­¹v[8ò'RvÚ„Ìöö,°÷{w³óOð×Äÿž ²&M^›ˆSS{ó‘ˆÍ%ø½æ`|ÔÌX§m"›º:(eg´JW_ñ ‡§¥.YC%  ´ ð.Ë ßI-KŒo[ ›áÜ™,ù‹¿å½¯„[N𲽦U´ ÎÑ6±òÐç¤ÅñðK­vG9x‰šHËy1]õSt µâ9z‹Åý§»¸Ãz‰ÝŠ–ÀƒLÀÚœVÑþ<_vÞâŠ)~¶flœ§1o$eK¨áìY¶W‚A «-Õ¤Y©Sð¢l6f{½ïatªnƒ.ç£Ç¸#rÅ‹üJª‰L=Ê P†²È†C¦kþ)†vAæ`Ì–ªY“ÒZBuÝÀpè&ÄÖŸj¡naLcù¤Ý|‹ S&%„‰½ÆkÃÔš851Þ¼™ˆ´¸Ô}p– øó €ú0 ÇaJ±®ÉÚ&ëËi ˆz"*÷sâÌu©/ÿj ՍЉNoÀÔÑ´cƒÌÌ`¥7•~™§:qÐv~—-±•5\é4!ÉQÕUµ®Š‰¸#?oq²]˜6D*q²ããm:mÚÐ PéJ µîrDÖaù⨅–¹}9Ñ©"‚@ã§ÁæóyÇ"n=nCœ©H"ðzhf4gÒÙýÌ »7¸]eRûBÀrÌ–hš -hjÇKI]¤ƒ°¿NÙJ**¶T4–´A”˜‚µrʰbò¯H6‚@å ÜÞæ;ðp #ÉQCêØ»­Ú,¹`¼9;+²óÔ ÈâåŒg—ý¾®…µ ©hµh¶hh’Ü|@CX§GÕƒÚ„$CE§$Ф¦|_™oÜ©€@6?ÁCä¿Nz‡2KéôE%pѼkÛ#–ÍØ"Ã/Ík ])‘̯8fÊ)m‘7 ©hÄ4b-èh™‚Y5nWÁG´„”Õ¹‹é0}-ïpÁ,úÉïqì²J@©q3}·ZÚ¹¸L;%œ¯êÅ¥Ö†Á`&X†&Uœa+ fU“j6èo\¶`Ö.êôb¨´.ec—²Ìª¶w)gèŠöñ¥œ­ùþ¹,í¯Ô§ï1[âZUÁžyš,7VJ40X<ûõê´˜š¥í¹„­•jÒ3›Ín—< ð%U™gi¤ûF_j¢ÔšçÖ eF­#¨™[_iC -nÛÊŽUõ€ÚŽæI«*ÝeÖÊŠW-1“y™Á”…VÛöù ðÅí |ÐzN½ò7•€r· 701¹œì’ñ2öü"[ÇO¢/Öîø8:{”dº5"°Yˆ;ʼڿÿúûËÒ¢;¨7!^Ü’IõÑî9*:±ÈUÅÓ>|%7ýì)œ…N»% ¢¢ÌZ–®7Y‹±Håäþh}RCçö[fæû[wñ_®­'uu'XE§pb+%I…G½êbî»éy‹N§#1ÆvNUW“ª¦ÑãæîÕíåò§Ýñ‰?掱{¯Û)ëÍû7ýï{+—ÿä鵦yžÕê"n'^~' Er|MWÂEEQô"üåE|Ðó¾E/Šà‡ ²·£dŸañËdßF=CsŽV37ö¸8ãUðÆÛ;gæ DQ9¥¯j†W©ª$­$xSëí¯Ù±²ù¬4¹ÎOÏ;Dÿ=|ÿnf=xYÚ âzÄÔcmÊÍ[Ùqî郗5n‡§<$ fZ†IØÛ‹<„YqÛÁƒÎ>!—¬ q%šn]RÍ;¯âòMÏW@c1ÛSÖrú[W”j® ³þ½„ÚJfˆ¥îÒ©±Wð73kzЙÛIÓº‰Ò åŠÏAŸO¾ž7_rꊓ¤ qTlgÒQƒ« ‘â™âÇ'- _çÎ;xÂ%·"ê31h'TÔ"ëÊ2êõŸåú>{þ5[§Níˆ%Œê†ó §7$@ÿõžÑIèq]Æÿm C3>’y2’ÂPõFš+ “`ȶÿĶrÏ»NÞ×4’éN)''ÅÔ8ÌÙ3ÃÉ^õªuežNVƒÞÍ_ÞʃäCjˆ†®Œ¤<ÄGâ÷³keT“Æßû=ÔèÛNRƒâD–v¼‹)¶–nËZ,# ²A¦qpÄ«й¼s? ¦¢lÛ…6ó öŒ˜´7DècGÒ Tt[ eÉk[»¤†$ºÔO{UÿóA~îò^ÌGóâôÃAµÖH5âˆuYl»Þ&)m¯0ÈY{.Ž›=eóþ²J@¹qtÅ<‹ü*”¢Râ¬â•‘8á·]Åcý@¹Ckj©D…R¦ÈSµ–q¸¨°  í (HÝÄ›Zæ½4DÐhS6 —; xî´Xà9ÅxKî"\~¯r„a©öe@"DÓðF¢A¸`&Y˱™yÅ5gçç¿RaÊŦÂJÌÓ oroG(IÃK˜è逡4˜•à@üº˜õ„Ë7V Ôõ‰RšºQK¼„Âq~övþ×õdõŒ»ù¶[ȼ¼rP @÷èb²ƒPã‚ÿL€§XoÎðŸ-”ê hä%Ú%ñà÷‰;“pëû|5¤«Ü^U[ ®¬"xq“ @st'ÜqÓÉÜEOM¤<(ýyÖcIð±åFCUÛ-OYff¡,iJAá0W"ÒT—FFÛù†)Ê5¼!‹RÎçü8(F‹6|eƒ”E)bÿ/ &õ°è*$ƒa% {ùX{DÅÆŸæ” 'Ý#í2Ÿ9bŠ iˆ³{ IaQ€„Æ9X 9(›!Vw¬õ ÎùødÈÖ‹iiA‚õwÜb’ Šv9Ž*-°·í†Ì™wâüL³mò.Ý.i^ñÕ%0Óå‡ÌÝÃp¸PÒeL—½¡–Å»thqH4Å×ÇïçÒíµ‚Y3B¬Úµ*~°¢˜Ym Ä*±ç¡Ù1Ö,2\d¦G//‰†Ã7–Ñ5dVÞaâYƳ’µ»íΈÅB:‘;íRxùÞ©†¶,‚%UNø*#6-Ñfþ§ÂPùÅ–×›‘$ṫVC7s˜ÈfžÞ,‡º, ݹ0à<OÁSD™è•èñ޲Z­I„\"odñàÙ¯y¢ÃÕVO3¨?‘ŒHHŒÃ˜.Ôq'jðÒŠÜ·³Ì¢`»0O~œ™£,õéÃzx=ûà›¨o2y”õšI7ýF駬²È)¼)ûuæÉSH5ž‡›o»¹Š¦^qמìä°X&š]˜ep€'vq"ã—ù̶©{¹hÈz#š¦ðMV"Êc'ÄŠvdžGB] QX®Œ‘-á0^ÖØ@mѺ jT+úv«VÏÅ{MSxŸqž»è[ÿìðÝÃUÔX—r-9Ô«Ë25¨´~Ä”®Rs§n†¥8q|X…q5å{³¥K`ö¤ ª ù1b .1Pg¤ †ªósÖ}Þ݃ÿ<ä†g˜|f7¿5ùzt­ V©“šk‘t­^?"sÇû¸ÝYNÿˆu<%Î*q.$—IƒjIÇzÍÄ,Ñãp/Rð•„-òÊs8çÉŒ¡Õëy…þÌ«ÎÕFéäôáôùž R¡Sà³lûˆáh3~WÏÅ:!‘í‹ÈM—º³cFÃ'D‡áiø<] à{ÐnÑÝÂÙS¬™CInJ9fƒ‰Ì3sÚ%å9û§ƒ] K‰*JbÞG ockäâˆ*ŒÖõ#y­/ù ñ†ë,UÅXqÏHÌ—§á8©‚yØ Q :lj3½†æ¢YSÛ†‘‰j[æF2þ8ïµ!t‡ìo™LÌAá϶Ȏ|Ü9bµyL%“øó˜vEHG“ôLžuXl¹™+Æ¡ºpÁXQ ÆX×b|ŒXò‰Fº,T?ÿŸÿp‹ö[yÓa–k#™VwìI[Ó¢l"Zð_[b….ä–˜¢ cm«2ŒŒ3ѦÕCIX|.wóžB@­ už–볡âé0AÏ9y‡Ã¾P è%¼o–»£ÐÌj"t§IEpÒȨøVç°P|)†IDATLš~¬ÜRPRTh…ÃfÞ1Ñr¹E f|ŒN“†GøâSüih¿&m,–3©"÷pŒ2&©ª½*‰)¨ÈÒ/ï¸T‰'êpåD©(*ÏIRy»ÿÊ©wŒ›¤Ý«‡Š´A'¡Ý$**kMÑ[Ì<RSoZ®hïVßYÞÑ{]ùe f5?U;Y%ãw*8ÙäÈó\U⩈`Ê%¹_Û&ñR­¨6i7HD’ Zí¬IzéÇB}1jÇ×Àu*4§Š„à…mÜö7ú#ÏM[ýÌܦ͒ЂàÇíŠ5¹6Œð¶æÚɆàìeCE»E3!n $ú£vÖ›3ínÍ@àÓNÚ¬‘µõ3‘ãã”kšbÇ,7ÖLrY»ÊÍ vm¨w)T{—«Z¹]1ËÑÕ0“«VË*Ê”˜vD#!JL×@Úì‰w‹ö …<•C‡ªjЛ҆’›>´Ñôûbk¹*cg"LO¢ÍàsߡۭObÊ΄\ë"lè4w]’eåF‚ʼnk%4c’ •ÀLo_ ÊõÌôæ§¹oems$ ˆµYî;³Úu‡ë*ÙL+uçîBFÈ¡*ü* ˜8A¨?^>¼ F—2³Wb+n5Vãüwy`ƒ½ù6WÆ<IÚÃÀ©ÆÙõPr«JyË\`GÏpêÕ3uhô.S44"¢ZPU¤ôÚ’,F³ªzoW/JB3ehÝYP@ î'U•mxÒÔÇ FNeæ>U«Aö½=µ<»VÅÌbñ[’Q>Û9bõº½[1!ø“p}€êÃôßë+¥ê»ré X˜lÊç>e¸/£†3˜éŒ–Zé4+1}¢±¯ÞüÒ+€ê%(GPã&¿Ã`@ÉõB8°A¨X ²ÝÊr«ªï*–ã ­]‚§,Åy…lA×Céù«Ž˜­AÖž2Ĺ©Ï.å Á#¤žéq0 J8² Œ°Ë÷kšwqi¼<ˆS©zwË`|-Ù‰C‡çƒð¤‹«ÀIŸ¿‡Ç·9êÓ÷@–©H1ý©gíׯeßhPáGè{­Q><'æ–é“fù! í[9ïN¿6ŒE­Ñ¤#ÒºfteÇHJ*v·)'‡zö§W9Ì¢+âÖŠE[`„lÚê¢î<ê@¥V9«1u Ûnã»7Vj2€ãFÖM}5 Ê\é9ñŠ_½bu£q>@Ë}ö›j[…YÇ&ø>£V?«±eLñ?® °gù•D^e‡µ¦ÿÐ…èaàÀP‘]½êºF E_§¾©ÑÞiA´ BoGwË5\½‡»¶9Ž_bGaÏ*W»™DC1cz%Wnâþ_8‰q(´Ãæk¾Þ õI¹Wà“ÜÆ·ò6ÍŸµÑøÅˆºõñc?Y˜OÍDLbdAÌm¯dÇÉÍgà…ꀸ‰9µMºJ8¤bY±ÜAt2Æÿ}ù_xo½Ø—y8‡Jƒt¨‰»ÕÔ¡™_Li6èÿ«Sñ5†{œt c'¥·ËsDh€eg‚Sœzþ³í|ÿ0š·ç’ uyËnÝ6€Ž1g3‰]Bñ…\ý’SsƳ³³§ÝÁONNrŠSÏï¼à#¯ã[;ÃÖÇÑ Üd]€GwÞÀ5/{^ÑJÒQ/T®ñ r¶êà?< ’·/ÝÎGo¬6>Ôçã ’“ôb¼þ ¯äî÷3~Ö× ú]qÑW˧J¦‰ý­/Uu¢73n×l69ä&ß}¿¾™¿»Û9w=EÞ¢épÁVÞó~û-§÷8äy(Ñ»#t£úôÚN¸Ïx‘gU·Ù_V¸½¨A/Þ^ÀAw‚Ðöw2ó52_sóCv>]ªÝ•[ø½WqõE?ŠâŒQ,c pÿïpÏ üC±¡JÁ%n°ÞY‰1ɼ…ж‚ü O{òÐdRp4°ÆžÁöðƧ`HSóGWsÓ•?leªš«¦Þ‘S9Ê]ƒQ­¿øªù7g©as‘í ‹Ä+Ÿbæå}‡uF\Øí|å=ü÷A© ±ku‘žˆqZˆÓp±µro]³üšÇ…•Ï÷5tÈ6•|yˆZÑ”hÂÇ®cÇÏŸqÚ²e‹–œ!8ú`Ü1¼Z9TÙv´RW$cn®”ÓÈ0(D¥%/ ³W1þìàÁCgDžæÈÛ¸å~ €µå —¯* =hxªÓt7ÄFÓyDª‚Aÿ«¯L©×®iÒ0 F ¹ò%üջغñL)Ðyçëo2¡‰ö‹ÂîŠÂ}e$ÕD¹Vc–O.}¬Jöûöí;Í.ì.¾ú¿ñÇy@/Cì º2b'#Ö½Y—»> ‰!¹•1$²Ð,‘/ÚSƒøyà{l{7QÎÿû[\sù™sa2¡ÆëY1"QW–=.«¶ŽØÑ3ÿãpþöÈgº¿»‘{C/µ$ …/õò„«F™§Fñ&5#0‚Fd^Ü“{Yê‚Ý2O¼¯yε·ývüòéU §çm¬XlªƒH2M³¨bøìãv‘µ-U¶HWÄœnyÉ"©8Ÿ¿ »‹û®åwCc/òqâú,ßyIoÕtg­j Ê›bBMü0‹IUì&1Ýï5 á½üÀh蹳̛6 ¨;ÿk®:= tée—¡ÅÊwí²@й©Š„ÞƒkÈÍ…Õ`7Bµ?«bNvàn&êÄ®?öØó²@O³ÿçyë~Žz³ˆ¹/Ë)Ê…ñh¸ž†e,v*“ÒÇÂŒÄËíÆÔ×¹ÏWŽŽ²‡¡2RÐy tí{9g=_ùK¶žó|è̱C½PÒøwó[ù¤Ñ˜ÌU ÌPn[âmûm îÒQ/HžŽHÁÛǹ{ Ág#Xª—afÂ-}_–˜z²ÿY¶½–w½™[þàùº°:PP2jÔ©4ÄŒNæõ×1#_rrT!³CÅe×cº»1CëNŠæÿÉ—ñºÚe­‰=ŠC:TûTµÇ?Œ„"aŠ2/ŽvçQsªfH.Uõ`´)Z&ªÕ†ŽÊÞúqþÛ_ñ­/réKOÕ5&À±h]-ZTUé¹ê|içÓ‚JYwW-SÂêŠYnw4NËÿJþ“SP ð§ïå÷\½ êÐÐ:™qg ómîmÑ^eY»EE9´Ÿ…~×ý="í«iÆ ôuèoùÄCWijàe¡»ƒŒË^Á‡?ÄMï9õ Ú1®ø,£wš¯@¼*)ë©ïWU£°c#ÿðjè×yÛ•ÛŠñ—ÏG¬RAúx ï0ÒÖ¤¼„WW+íAXkÃt§æÂ~íð@š ”©=Öü Ýü+6:TÌÜÍJ‰Fh;I­Vè]ú’ŒœÑžó n^No ÝYŠZ>Ÿz&ÍWשr>õWØÃ}÷Ÿ´ «fªm JP‚‹­^”Ã.³;ÒL±Ë™…³LþX¾Um —»Ò§‰Kˆ³‚½ŽW<ÂíR>Z£sò¬\ùí«Qâ…D¶mùî‡ì+„(Ö½X"8‡s'úɽ®VêÚžþˆ ÀAhg*I×¢o`Gååñ²÷‡àªW°ó¡“±@q‚G“®êHÚÒ¯J[¤ r§Š•”Øšâï“#aeP.W着/Wo®ãuñpÛ\2Ðè r†…Ü´£F‰«L‰ÞI¼Æ–üZ^Š.ÕHöÔ†‚ ŽÊ…Ió3i\ÐãƒUäb™ú“åeYíñ£ó¦×q÷}«V Æ?–4þß±ãv¶G0“Š:‹ÎÉ2²œ¡Fé*Nн.X,¶"5Äã‚v98‚‡k‡ãóŠÆAN˜ûV§ç‘ôÄ¿¦#FI‡¡ÆjV×›(ÄJ»¬f<²“ßÙÁÝ~21’ž£¶LGÉZ°ªXÓm³B9„´Î’K‰F¬ÍñT~OsJöí`Ñn„ÝÅíŸåÏ[Ó\"¶š”¡3òœ4'ÒKžŽIhXÓ¨QÓl†Ö,(±ŠÂš.±` ÷x.|¾•1Dß©SÌ7?…±Ñ,Ô×›ZKï³ÎϽŠkw¬27áŽrŠ9†C]ì)½Ž–ä=’§ßB¤ôJ(õPg1 FI`2RŽqè?rc{ݯöX 3l““g‘e(Òê³ÄëTÔ6°û[_"úH ” Ï%—t,¹O½Ð¢ Ôý³^HeDº^«Pí·OKªÉOx#Wý ë7¯¹ ™&TðA1AZeøºFǢݶD07·³ò¸,’ÎïzüRË+ЇyOÇM”óe5ɧ¼_õ1(¬¾®S&.yçÀ3 ñ¥„[lÕɈ´°"R{B:d][êeòFTVêM‚ã’ãÏòu( ±»*¸ù=üÇ»N%2eç:-ˈ›ç¡¼„~Ä?9D9Bç´_O©@òà×¹»å"#XÖi·˜S[0!BÛ<#’feüxÓ–»)I–öäi„rr]‚êûbùÍ‚¡m\4ô„rR½ÒèªÊˆr]ï G!Õ‰=‰<†äÚýëwóèƒüÄå+Å@ƒfIU¤”œZU»tmaYUi™]q©ìtET¯EDr`ÝU ĨjÝøº}Ž›;^‘8÷x‰ýY8Ä®×l MJɇ 3úæœ7…j™Aß‚M8uíM¡ym°€V¥óê Õ™p¤õ]~¬•¢r’¼ŠÑ"o©I쮈GÄ:A«¹”쟹yªè|,¨]Ë5Ø.9[áˆ|þ·§¥­>ZĽò,obaºÝŽ©[rPæ9ú în{Я|„2i/ÊÖËÂØ½Å@:%’¥ 2TN¢ ™°Q ,Á„q6¹ù,Zf]YF®¨R{æ ³îŒG*b 5€”$'Ѳ$v1$’¬Új†(ÄBNˆ²ÝJýw3”5þ‘‚êá3íÐtËÚÆ)˜ùûè.1]£StÊ`À eqH¢K53 ¥š8m˜„œ\у˜cpŽÃqc„¬ê¡úÄÃrCYÓÛÁ•Œ69~˜¬F8©Ú’çðÈgx펕b ]ë¡;xCd0TÖû™¼³C„9¶ÑQ¢ÏJŒ‘ûd ‰±EÛ ×õ}uÚÅ—Û”„v^ä!%ËCt7yhÆ&ó°:&×)itÀbḚ̂T£ ˜„iCG­¡“0d¨YT‡ç`?<G…-÷i iæ,­¶djT6{Ψ¦+‘×½SÞb Üé“§¾¼œ•x ë+´ e®ò{]#ô±˜Ž»ªbaU¹#9¬!vV±•]'¢Ü&¿³VÄW Ã|»S‡‹®ü5éY>Â8ÇlòлºÏ°Ç =Ž éd¬ pAÜCOQì¢x öÂ!8J4G£K+££K¢¦À;Æ¡' ­™R£ïŒÐ¼Õ:µ‡¿½|ßp8Wl\ãâãæ¼ÍÌVçZuY"Åx‡óîÎG˽r+£Ë3mWuð¨‡Á/p»¹$´xÆ÷zA³ÔƒÙ ,Ìqhž§†lƒÁù?›ï(„Lj1±ÄZ].àjãlŒŒ` r:¾ õ\Ô» A¾î3«NãÞ»GÕ,ÿFT‹4vƨ,»0)œµòøÄ“ηW š|( Sƒ° ê:ÑhŠgºD÷U÷é.²û{žáqœÿɦ[¹`õ0a,M* ­Å2¶Q`õs–[° d2¿¤µr_¡œƒG4)½21»Ù³ñ܈f Þvá‘£f¶t]þU9¼V!r¨C#g0êͯF”¬âã e5b®'ùQWOÀlè©ï/Fÿéfî8œóþc\rˆÆqlË*¤ÏM¨=`vÐ5ú‰q¨ü36jj&n¬`Œ×rö•–¯B-§¥Î×N’¯œê56é¯f¿ÖLn8Ò–´U"Π4ÍÆö«eµÑkØp—è÷‘EÞ.zÜ($qg[&eƒñŒ‰!É1x‡‡à!_¸u#/ßÈ¥p~Êô<ÉÑ‚¨øÔÐ…Ë #ýeÁ|Ë­=HeÐÊWž ûqMãÏââ¡P Qn>",SÿˆBýÅÈíÔÚ­ Qjg$=¢E³?ê ìƒ]ð˜Ó0OB3°¿Áæi6L3•3> Ù#îy{Üjì»™ÇÞàÓaKbz¥t5/žuñ Hi{àÇd^GT‡ bÌ>OÎÀë €Ñòý˜J5býU™ÕY’3F. +Ð9¼ê;Õè Áò†Mhýx £ØÓ›ØëÎ7¡©idD}Ô’[!< ÏÁAØÇa  Ç`?DЇY8S“mÖ¶׌e4Sb3ƒó;Ä:¤Lyh:I/›œZ5:÷UËÆ@qCS 2ËO²J°Š±#­Ô ›æk»±@U!áê­E´Ò«™‡-þ”±‘­T óxãø¿]ÃKXüeÂAKSƒ-ú®ª,ÏäÄCT*¸‚ewâ„Ypwf`Òâ³^‚³Ú®ØjVüÎZ˜PŒ'tÆ:´ršQJ4+ä£×æ¡U¦~W×  Òùo\1 [v±é¨Œ¦–˜#Æ)jObDK¾¢öXaf~¤mbû4tÙˈª|0Ô .ž\ØC yïIibJQ©»JvFçÍþÈÂÍÉí9ôÍÖ¶ÄŒEÊå¬qËRÑŽh7hŽÑÈhx YÆ ŽZÔ,SP“ò}žšl_À¦í+ÊÄš%öò*wìK9~Æ1xÞYÞ: 3±gIfµl/ x)ïy’÷×<”½}ÖÇ3ÈÍ¢µ’Órʉ% £o>ôš-²:4ov¯¦Ån;m~I¬FÌM=²èѹTÕ-hÆ4cš-š8#¢2AŸ{Aw •‡ìPÍ8IwÉJ³>F"R.A± Ar8K»s€UÞìÕ­VÄ#9~ˆˆ*¬š”D¥b*©@Ûøíý|(gN…BBÀ—QV'04¯‰5dæÔÜG„º$ö#.5Z2dø Ê…ÉY2Rê\ÈÔ¢*M·ŠˆKÑLH’r al¯Ît@n¾YZFŸŠ{¼– {Šã†RŠLö×ÌsB *p*rZ¬*é½–+Špšö&¤–j©lª¿¢.ææ§¹1hr–ϧj«{«Çš(Mû‹Ûúîú«@Kžö8Ûÿ2±Ó®!Ú >ÖµcÔ¨eHr94"’ˆ¤A’i¢ )’£µ5¿Ìàì·ݼHë?¨~;øô"÷ƒbã†U5 "=®Î¥²¼ɵš=±˜ÕV «°u(|Vâ®Õâo§Ð:Ô”Ú#ÚIDqLÜ$)&vj‹’ócîµ­M¼M«ÁD'‰»OZ¶áÝRžÌ§=v^, «»»QÏÆå~AðÈ8Å2Q­b´y+wïfÑJÚS3<ZÕ¦¨†!žÔÔµPå®»£µë­fJܽ¿:2«Yq›lÅÓZæÉ5j†x†“ˆ8"Nˆ›DÅØ`æÅ×Ë«‘n²íîUè¸ÑPŽÿ2äª2Y¹Ôv’ÍÎ.r:ò†¡wŽBK®`QpÆ;ìÖâULeDŒŸÇÎ#\¡–‘+ÐLŽÒ^y. Á5äÖÑÔÛÌ:p¡ï=oiíÐ-';4®Ö%#Ö²ÖÆž[æÏÛV}bn¬¢8EÅÄ QN¤Cj¤]‘âÊ6ï$_Ýdª³nù±ôZîîån¬ˆ ³¤‰t5_Þ[Ÿ¤qÍIĤFRÑ­T…åŽôT› tU‹–Oé¶C˦†¨qKªÀibhÙ=™Ùø„7ÇLÁU>r,°¨1÷(NÓ¹SÍ‹¥¢ù9Š:#óW׎òP54s­íëkRÃün"¬‘gº;Lë 4E¤ˆ£rŒLå¨è ¨«O2©1È¥`qýƒsfZÉ8Èãku†ì«ÄßéßÛxGkÛQ±Ã©JŸœŠ«Ñ{è_‚”š¡½>¤;¿S'‡.K2çó>ùûk‡ÞÉÒÕ6†g‚ÄÃlŠ Cù*¼¦Ð§aȋՆÿýþ^¤ˆhFñ÷[l=ù¬ø'ÅÚJ§ÏÂÕôî­›ŸaˆþÝç–«¹°QŽÌß{,3 ÂÐA $U!öPÎJÀMí¯4½Ø¨!,$:ÊyåÞ‹`ü7´¸§sjŸGáÂêq‡å`HeÑ2-¡Ò‚Œ5M4="xª|VÅß*I†çé ù¸u;Ço tƒ™W¶R(u™4Òœs™·Ø·á1üJµw½€×*;’'4¶MÍÄÉÕÛ¦ÙÑ9å' ¹çÀdÑ«¼õ>V‰0‘‰ª·×Um¬ZÝmEç´éË‚€€qTø·Ûvj Œï`|û¶Ó} þ1Ò¡Ôk3¯=ô ½Aî Q‹£µ7î‡êçµÄD H\šóL\Å®öÕ¹r‚ûŸ/MkÃò9鶉\¼H«:4°âg8r}êÅrzbF ¡Œj1O•k¹D,ˆÕ=†ÄN†F¨jº-£jÀÅj$QLjÍ.zãÆMgÀÕnS—ò«÷Ì>Í}à[w,Wòù—óPø¬CÓá™<P×"¡à;Ž›|ËOò¡×²uò‡ê‰ÓÐ{Š-í”rÅkX[º³\ú-2x7` óë-7DúCÝÚü­Oq߇Ùýp@™ÒÑiÚ0´± ªPäQh­s#´q™mâÆÞ¼|ï}-o~Ù*¤˜ŸŸ§^)f$Áœwѹ³Ñ ãêÕjA-%Yþ%µfÍÄHäí©ù‡ÿÆ?ü5½A ê语Ž(åñèí™AWÕpCšÞz%ÿâ5\~/€[·Û…¥D'³R ,e i*†ez©Zãýº)^k­=*!U­:”E%[Pè´Û/ªÇL‡øúçùÚßóð™™²ù<ÎypáüuY;Éë_Î/½’_y›§xá݆Ã!u¦Ug© ¡Z‘övúÝв¨\‚ƒcÒ–!£‡rs&²÷ᦊ/©XGyê1v?ÉÓ»yööà¹#;ÁÌ< =–ÐèÐgÍ:¦6°ñ,Î>›óÏå­\|!—]Ć)~Œn•TugÛ£r8D?¬‚©CÈ)aa–™¡b‹6AF ijB<pk}^ãÇE^¼½°oÑ‹"xñö|nÿ?idÙ'„$:IEND®B`‚cups-2.2.7/doc/images/cups-block-diagram.png000664 000765 000024 00000225142 13255074424 021345 0ustar00msweetstaff000000 000000 ‰PNG  IHDR“ŽsBIT|dˆ pHYs¯¯cæŽÃtEXtSoftwarewww.inkscape.org›î< IDATxœìÝy\TåâðçÌ0,²   ›‚ ₸oY–fî eæZ™­š¦e¥×r骙šuUÊ–Ÿškfšš[n©]ÅÄ]PTÙaæýýAœË0 ˆÈæù~>|”3ï9çáÌÌyλI"""""2*¥+@DDDDD•‡€ˆˆˆˆÈŒ0™"""""3Â@DDDDdFˆˆˆˆˆÌ‘a """"2# DDDDDf„€ˆˆˆˆÈŒ0™"""""3Â@DDDDdFˆˆˆˆˆÌ‘a """"2# DDDDDf„€ˆˆˆˆÈŒ0™"""""3Â@DDDDdFˆˆˆˆˆÌ‘a """"2# DDDDDf„€ˆˆˆˆÈŒ0™"""""3Â@DDDDdFˆˆˆˆˆÌ‘a """"2# DDDDDf„€ˆˆˆˆÈŒ0™"""""3Â@DDDDdFˆˆˆˆˆÌ‘a """"2# DDDDDf„€ˆˆˆˆÈŒ0™"""""3Â@DDDDdFˆˆˆˆˆÌ‘a """"2# DDDDDf„€ˆˆˆˆÈŒ0™"""""3Â@DDDDdFˆˆˆˆˆÌ‘a """"2# DDDDDf„€ˆˆˆˆÈŒ0™"""""3Â@DDDDdFˆˆˆˆˆÌˆ…Ò åH’dÀKéz¢â„ùJWB <þ <þyü›7³=þ‰ÀÜymݺõš‡‡‡Òõ ÄÇÇcàÀ Ä(]…ðø7c<þyü›3ÿÄ`æ<<ùÄäñ¿ÿþQQQx÷Ýw¡Rñú,=^ ¤(µZ—^z «V­Â­[·L?wîÖ¯_K—.A«Õ¢sçÎxíµ×ŒN8Ö¬Yƒøøx¼óÎ;X±bNž< OOO,X° Ä}æååáË/¿„N§ÃäÉ“å® »víÂîÝ»qõêUxyy¡_¿~èÝ»w™žÇéÓ§±aÃDDDÀÉÉ ]ºtÁ+¯¼"ˆ¯_¿çϟǬY³L>Øÿúë/lÙ²&L€——W™öG5ŸN§Ã¼yóP¿~},^¼Æèq•J… ߯»»;^~ùeLŸ>§NBÇŽqéÒ%H’„—^zɤ|:u*¼Tý¥¦¦"11}ûö59ù`Ô=gÅŠHMM-ñªýï¿ÿŽƒbúôé°··Gjj*~øáœ8q)))prrB`` ÆŒƒºuëbÖ¬Y¸qã,,,ðþûïìíí1cÆ y›/^ÄÚµkqéÒ%ØÛÛ£S§N3f ,,þwJ´nÝ:\»v “'OÆòåËqâÄ ¸ººbÈ!xâ‰'““ƒU«VáðáÀ¡C‡¢oß¾÷}MZ·nFaóæÍ˜>}ºÑþ`Æ $ C‡-Ã+Lôh1Iq…Ý‚žzê)£åkÖ¬AŸ>}ðóÏ?ÃËË wîÜÁôéÓñ / ??_.wðàA¬[·/¿ü2~ÿýwxxx])-*==#GŽÄ7ß|ƒ>}úÈ'ÿï½÷F…?ÿü8yò$^{í5|ú駬ÿ÷ß~ýúaË–-ðööF||<¦M›†!C†À`0°råJüñÇ&ë/^¼üñ<<<Êö‚‘Y8zô(t:ÆŽkròÿ¸îO¯×ÜÜÜ „À–-[*µT}ÙÛÛÃÆÆGŽABBÂ}Ëj4,^¼.\0ylîܹ8þ<ìíí‘——‡—^z Ë–-ƒºví OOOlÛ¶­ÄuK²aÃôìÙ7n„§§'îÞ½‹™3gbàÀÈËË“Ë>|ëׯÇk¯½†~øÎÎÎØ±c†ŠsçÎá7ÞÀ’%K ÕjqâÄ Œ;û÷ïàþ‡Š;wÍÉÉÁ¯¿þŠ:ÀÇǧLÏ…èQ°€*Uvv¶|%&++ aaaHHHÀ‡~ˆ¶mÛÊånÞ¼‰éÓ§£GX¾|¹<@xûöí;v,Ö¬YƒQ£FÉåЯ_¿ûö+½uëFŒäädlÛ¶ 7Pp…é§Ÿ~ÂôéÓñÖ[oA’$!ðÉ'Ÿ 44ƒ B```‰Û¼víš<ðréÒ¥ò‰Ó¦M›ðÎ;ï`ãÆ:t(zöì www¬Zµ Ï=÷œ¼þõë×ñçŸbêÔ©lò%#…³M§•%55kÖ¬´hÑ0nÜ8lܸÓ¦MÊ+ЧO´iÓÏ<ó lmm+µ~T=¨T*¼ýöÛøüóÏѦMtéÒO=õžxâ ´lÙ’$ÉeŒ¹sçbõêÕFd?ލ¨(|ùå—€ˆˆœ9s .ÄÈ‘#ö—›› ø×¿þ…ÿþ÷¿°¶¶6i.ü®éÚµ+V®\)¯ìÞ½¯¾ú*~üñG£.n·oßFïÞ½±jÕ*h4èt:4oÞýû÷Gpp0NŸ> Fƒ{÷î!((+V¬@·nÝîûº <Ÿ}ö6lØ€=zÈËwî܉´´4 >üa^f¢rãU*½^cÇŽáØ±c CTT¬­­áîînt¼nÝ:dggã­·Þ2š¨OŸ>pssÞ={Œ¶«R©äæÞ’\¹r}úô^¯ÇÎ;Nª¾ÿþ{888`ôèÑò—’$I5j C‰Wí ­Y³yyyxûí·®ÒÃÙÙ{÷îPÐÕiäȑؿ?âããÖW«ÕüÐ'7oÞxzz>ö}Í›7&LÀˆ#ˆsçÎ!88]ºt4lØû÷ïÇ Aƒäـƌƒ&Mš`þüùF-rD…Þ{ï=¬X±íڵÑ#G0{ölôîÝ:tÀ±cÇärxá…°yóf£É V¯^  8@A÷4 DFFÊ'ü…Ê2‹Ü† ™™iò½Ò£Gxzzš|¯ÀÈ‘#åÏvGGG´hÑÙÙÙFËíííѺuëRàåââ‚îÝ»cÏž=¸{÷®QÝìììЯ_¿nƒ¨"°€*•­­­Ñ ujj*Ö®]‹ &àúõëòÌ#‘‘‘P«Õ%^ÑÏÍÍŵk׌–¹¸¸ÀÞÞ¾Ä}êt:ôïß>>>Ø´iŒŠŠ‚J¥Âˆ#LÖÕh4¸zõj©Ï'** Ó§O7yÌ`0Ý3`äÈ‘X¼x1Ö®]‹)S¦ ??6lÀsÏ=77·R÷Aæ©ð˜HLL|ìÓ&&&"-- 6661bžyæôêÕ˨Lƒ ðŸÿüƒW¯^ÅÖ­[±zõj,^¼–––˜4iÒc­#UOÁÁÁFFFNŸ>Õ«WcÇŽ>|88 ÏvóꫯbÍš5زe FŒÔÔTüöÛo1b¬­­Œ76lBCC±víZtëÖ C† A×®]ZJ •JUâ4œÙÙÙ&Ÿõµk×FóæÍ–5lØ—/_F›6mŒ–ûûûãĉezM† †]»vá—_~Áرc‘€Ã‡cذa¥v_%ªh ¤(­V‹ñãÇ#44¿þú«233akk[â ÜÞ½{›t;°±±)u666hÖ¬Nž<‰ððp“ùÍ333Q¯^½R÷Õ°aÃR·™™ {{ûR×ÕjµòïuëÖE¯^½ðÓO?aÒ¤Iؽ{7n߾͙¨D…Ç]dd$:wîüÀò…Á¶pJÏât:””—,Y"Ïô *• 6Ä{g¡C‡¢]»vò1MT[[[tîÜ;wÆâÅ‹1þ|lÞ¼S¦L4oÞ­[·ÆªU«0bÄlÚ´ 999&ŸŸþ9ƇU«Vá÷ßÇÖ­[áçç‡õë×£^½z÷­CFFlllJý¼.þ=R<г²²*Sà(ͳÏ> lذcǎŦM›`08ø—*)N­VÃÞÞ‘‘‘ÈÊÊ‚ °oß> <NNN´}+++¬Y³£GÆË/¿Œï¾ûΨ~@@RRR0~üø‡Þv@@Ž;†áÇÃÎÎîåG…íÛ·cß¾}X³f ¼¼¼ðÌ3Ï<ô~©æëСlmmñý÷ßÍ(U///h4ÄÆÆ–øxLL  ~ýúVGOOOøøø1š¡¤ÐúõëñÛo¿(Ò]ºtÁLæXOMMÅÏ?ÿŒ ”+9r©©©&Ë;†«W¯¢Q£F½MªÙrss±ÿ~!L+d^ü¸8p œœœ0eÊ\¾|¯¼òŠÑãYYYF¿K’„Î;C«ÕâüùóòòÚµk—Ø¿OŸ>P«Õö½ò(† ˜6m¢££å߉* [¨Reggc„ ÿý÷߈‰‰¥¥¥ÑŒ -Z´À;#/¿ü×®]C=`gg‡ØØXìÛ·O>ù¤|µ§¬4 BCC1a„„„àË/¿Ä‹/¾ˆ×^{ ;wîÄ›o¾‰#GŽ mÛ¶Ðëõ¸ví¶nÝŠÿûߥÎìо}{Œ?ÿùÏgŸ}666ˆÅîݻѳgO“®¯¾ú*f̘ þ¥û Add$¾ùæù$êÕ«‡ëׯãï¿ÿƹsç°|ùr¹ü¬Y³Ð«W/ôéÓ#FŒ€±qãFÜ»w_ýµÉÜãeñÃ?ààÁƒèÙ³'üýýammãÇãØ±c°°°0šc(˜ÖrøðáðóóÃÓO? ___$&&âèÑ£8sæ š4i‚!C†­cee…aÆaÙ²eÐjµ0`€Ñã{öìÁÂ… ñüóÏÃÏÏ©©©Ø½{7t:žþy¹Ü“O>‰={ö`РAhÑ¢´Z-&NœˆÀÀ@Lš4 .Ä7ЫW/ØÙÙ!..üñÚ¶m‹ýë_•òúøûû£M›6 “[ˆ*Uš¦M›"++Kî¢ I‚‚‚ðüóÏã•W^»»»Qù?üíÛ·Ç7ß|ƒE‹áÞ½{pwwG§NŒfJhܸq©3@øûû]ÁW«Õøê«¯àââ‚õë×£Q£F ¦M›ðý÷ßcÛ¶mغu+€‚® 0Ö¦M“9š?ýôStêÔ ßÿ=>ÿüsdddÀÝÝ;w.±¯ipp0f̘çž{uëÖ}¸‘ÌŠF£Á—_~‰`ýúõøóÏ?OOObþüùhݺµ\ÞÏÏþù'æÍ›‡ýû÷ãÆpssCË–-ñþûï›L)êåå…N:=pàá»ï¾‹ àèÑ£8|ø0ÒÓÓáéé‰îÝ»ã7Þ0(Idkk‹åË—cß¾}òœúVVVðòò”)S0f̘»àà`,[¶ /¾ø¢IüÀÀ@´nÝ›7oF||<,--áïï•+W}'Œ=–––8vìΜ9GGGù±)S¦ mÛ¶ ÅâÅ‹‘––wwwtìØÑ(D4jÔH¾FQþþþ%¶†ùúú¢S§Nõ½þúëøþûïѼysE»$‘y’Jjž#ó I’OXXص œ¢ŠµaÃLœ86l0\™bccÑ®]»BˆÅ*¡ ÿæÇÕ<þ-Z„… âàÁƒìZö™ûñO@T©bbb0oÞ|ˆ…»»;š4i‚Þ½{C£Ñ(]½j¡iÓ¦4hfÏž]™» ©2wXĽŠü>€¡÷_À纑3gÎ <<P©TðööF÷îÝáççWU¬ù–/_Žÿûß8wî´Zmeï^Éã_irü ùsçKKKøøø wïÞðôô¬¨]ÔhsçÎÅwß}‡«W¯*]2 ôÈ8€É“'#!!îîî¨_¿><ˆÄÄDxzz"44mÛ¶UºšU^NNòóó+{·?+u#I’‚`~•xgBI’|ð'@iii˜>}:6nÜkkkøûûÖ¬YƒO?ýÇÇÂ… +¦²5˜^¯Gnn®R»WìøWÚ£ÿ…’’’ðÁ`ÇŽ°µµ…¿¿?rrrðÿ÷øôÓO‚éÓ§?r}k:½^œœ¥«Af„€ÉŸþ‰aÆ! k×®E“&MäÇnÞ¼‰?þ—.]b ’ÍõW™'ÿJáÇ#<<ï¿ÿ>&NœµZ ÈÏÏÇæÍ›ñÍ7ß(\K¢Ç+//Ï?ÿ<®_¿ŽÙ³gcìØ±òžyyyXµj¶mÛ¦p-‰¨$ Tnùùùøè£`gg‡-[¶ÀÙÙÙèqOOOüøãHKK3Zž””„ƒ"::ÞÞÞxê©§Lš‰Oœ8´´4tïÞÇÇñãÇáîîŽ=zÈÝΟ?ÇC¥R¡oß¾(zKû¼¼<ìØ±pqqÁ¡C‡‰'Ÿ|íÚµƒJ¥Bff&Ž=ŠÓ§OÃ××ÁÁÁòI\¡¨¨(9rñññpttD`` ºtébòZüöÛoðññAÆ qèÐ!œ={îîî0`@‰Ý"##qàÀäçç£C‡hÓ¦M‰¯qrr2¶oߎ¸¸8XYY¡^½zèÒ¥ ÜÝÝïó—©6ŠŽAª6'ÿ°iÓ&œtèNŸ>{÷îÁÙÙ­ZµBûöíMÞ£¤œ•+W"22sæÌÁرcÓh43f l´\ÇãÌ™3°°°@«V­Ð©S'£2wîÜÁÑ£GѹsgäååáСCHJJ³Ï>‹¦M›(øl<|ø0¢££Ñºuk“i–àÓéðÜsÏ}‡<÷Üspt,˜ùõ~ß!@A×ÖÂïŽÜÜ\øúú­_èܹsˆ‰‰AÿþýqîÜ99rùùùèÒ¥‹ü¾-*33»wïFTTš4iRêûÀ`0à?þÀùóç‘™™‰Úµk£mÛ¶hÓ¦ ï•@NÁ3ýà&Ëõ³nÝ:@L˜0¡Ìë¬Y³F899‰Zµj‰æÍ› [[[Q«V-±téR£rýúõ>>>âwÞ„»»»üïåË—Åûï¿o´ÜÑÑQ=zT^?""Bo¼ñ†hذ¡°³³ööö€ —/_7666B«Õ ¢oß¾FuX½zµ¼–-[ŠZµj ¢k×®"66Ö¨¬¥¥¥>|¸èСƒ°°°uëÖD½zõÄÅ‹Ê~õÕWB£ÑGGGѶm[akk+>þøcakk+^{í5¹ÜÖ­[…°´´AAA"((HØÙÙ‰=z”ûoVô',,LðQðøû 'þ@~u:þ[´h!lmmEddd™ÊGEE‰Þ½{ ¢Aƒ¢Aƒ€èÒ¥‹¸té’\nß¾}€xÿý÷Eݺu…“““°²²ĬY³Ä©S§„»»»Ðjµòñ8~üx£}5JØÛÛ‹O>ùÄè=¢ÕjExx¸X°`Ñr[[[±k×.£m4mÚTX[[‹€€áçç'ñÓO?•ûàƒ±hÑ"¡V«…›››P«ÕB’$1kÖ,£²/^mÚ´*•J4kÖLøúú ___1vìX@\¾|Y$&&Š›7oŠçž{N®cÇŽ…··· 8P!Ç~U8þ•þyÔÏÿÄÄDQ¯^=áêêjòyXÚÏÅ‹ÅSO=%$I 6õêÕDŸ>}Dtt´\nÓ¦M€ø×¿þ%´Z­¨S§ŽÐh4€øúë¯Å‘#G„“““pvv–ßÓ¦M3ÚWÿþý…···˜0aB‰ß!Ó¦M»ïwHbb¢pss¶¶¶¢I“&¢~ýú€¨]»¶Øºu«Q¹qãÆ +++1oÞ|¸P«Õr¹7nˆ:ÂËËKtèÐAxzz âÌ™3<þùóÈ?œˆÊ-** Êܽ'%%o¾ù&¼¼¼pòäIìÝ»gΜAëÖ­ñÞ{ïáÚµkFå¯_¿Ž³gÏâСCÇÚµk‘€âÈ‘#øã?ŽÍ›7#55_~ù¥É>W¬X‘#GâôéÓÇK/½„o¾ù À Aƒäœ#FŒÀŽ;&¯ëïïýû÷#<<»víBDD¾øâ 8p?þø£É¾Ö­[‡Ö­[ãÔ©S8uê-Z„ØØX„††Êenß¾©S§¢sçÎ8}ú4¶oߎ'N`ëÖ­ÈÈÈ0ÚÞÂ… ¡Õj={ö`Ïž=¸xñ"¦NZ¦×»(z «ZµDEE¡Q£F°··/Sù%K–à÷ßÇÒ¥Kñ×_᯿þÂwß}‡£Gbîܹ&å/^Œ?þX>>»víŠ9sæ`ðàÁ˜:uª¼¼Gøî»ïg´~zz:~ûí7ìÙ³áááØ¾};2331dȬ[·;vì@xx8vïÞ ƒÁ€Ï?7î >cÆ DDDàСC8zô(Nœ8oooL™2¥Ä~ÊÿùϰvíZ„‡‡ãøñã ‚ pïÞ=¹ÌÂ… qöìY¬_¿üñŽ;†ñãÇã»ï¾3ÚÖñãDZwï^|öÙgǯ¿þŠãÇãèÑ£ðð¨2÷®2{ÙÙÙˆ‹‹CóæÍË<ÑÜ9spìØ1ü4¸tp IDATøã8rä°hÑ"ìܹ³ÄÏï%K–`áÂ…8}ú4ÂÂÂжm[|øá‡5j>ûì3œ9s'OžD§N°dÉèt:£õoܸӧOËß!ëÖ­“¿C>Œ}ûö!<<¿üò ÒÒÒLêðÅ_ ""À‰'pôèQØÛÛcêÔ©0Œç+ÈÉÉÁO?ý„_ýááá8rä|||0{öl£±]Ÿ~ú)nܸmÛ¶aïÞ½ Cß¾}±nÝ:£ííÙ³ÇÇŠ+pòäIlݺÿý7öï߇2½ÞD÷Ã@åV8[O™Ê¯]»iii˜5k–Ü]ÈÎÎ .„Á`À÷ßoT^wß} î¤ëë니ˆ¼óÎ;hÖ¬ sçÎhܸ1N:e²O___¼þúë°³³ƒ† !222ðÎ;ïÀÁÁµjÕ°aÃáááòº>>>rs3XZZbøðáðóóÃLöeoo>ú®®®P«Õ:t(œœœpúôi£× ;;sçÎ…µµ5 víÚøðÃM¶g0àææ†ZµjÕ¡yóæx¥«¢Ÿ?•9ûÏ#¹}û6222Ê|Üëõz¬\¹]ºtÁK/½$/ïÛ·/‚ƒƒ±nÝ:“nr:uÂK/½KKK8;;ãùçŸGnn.êÔ©ƒáÇÃÚÚZ­ƒ ‚^¯Ç™3gŒÖBàõ×_GPP€‚Þ²eK\¹r£G–»œµhÑmÚ´1yïtíÚU>> ~ýú7npåÊ“ç8räH<ýôÓ$ ^^^Fzzº|‘ 77kÖ¬App°QºQ£F!00Ðh[…'V¾¾¾FËýüü”˜%ˆJ!D™ß©©©X¿~=ú÷ïž={ÊˇŽ®]»âÛo¿59©îÖ­ú÷ï ¸¹¹¡oß¾¸wïüýýñüóÏC£ÑÀÅÅ @vv6.]ºd´¾'N”¿Cºví ???DDDàí·ß–½'žx7Æßÿm´þ³Ï>knüüü0jÔ(\¹r &Ïqܸqr×7???ôéÓwîÜÁÍ›7t[Ú¶mFމ֭[ËëMœ8^^^FÛ*|-ŠÏ&Ö´iSØØØ”ö2••[áUˆ¢Wùî'** jµíÚµ3Zîãã777DGG-×jµhß¾½Ñ²æÍ›ÃÖÖO>ù¤Éò[·n™ì³èMa¹’–ž(%&&-ß³gF®]»"((AAAˆ‹‹Ã7LöÕ½{w£/ •J…V­Z}QDFFÂÙÙÙäC½øó€ÁƒãôéÓèØ±#æÎk$jˆ¢-Õ&ØÙÙA’¤2÷7oÞDvv¶I?g àD_¯×#&&ÆhyYÛÂåÅ[FcÒ'ºyóæP©TèÑ£‡Ñò   ¤¤¤ÍÄ“˜˜ˆÏ>û D›6mмysÌœ9@AË\q}ûö5ú½°U°°^ׯ_Gnn®É{0=öŸxâ ¸»»ã•W^Á¨Q£°aÓÖ1RÞÃ~þ_»v ƒ¡Ô÷AVVâãã–?Þ ûÓ—õó[«Õ¢cÇŽFËš7oŽZµjá©§ž2Y^|ýØØXÌœ9ýúõCë֭Ѽys,^¼L¾T*•I½Š¿¢¢¢`0LÞ*•ʤ%½GpppÀ€0~üxüòË/œ%ˆ*•[áIlYç-NII,,LÇžkµZ$''-srr2ð§Ñhààà`Òä¬Ñh ×ëM¶[8è±h9 àª{Q…u*zjåÊ•xå•W™™‰=z`ÆŒøüóÏTâqñ}Wì‹n399¹Äæ[;;;“ç4tèPlÛ¶ X¹r%zõê…¾}ûâØ±c&ëWSÕrp­ZµàææfÒe­4wïÞPp<Wx,?ö‹Ÿ¥·…Ë‹ûÖÖÖ°µµ5)«V«M®¢?öu:úõë‡ 6 !!!˜?>&Mše:ö---êUø”t¿øë¢R©pðàAL›6 ‘‘‘˜8q"Zµj…™3g"//Ïd}R†»»;lllú}P|²àïƒÂ2…Jûœ.ëûÀÑÑñ¡¾CŠ~V'$$ W¯^عs'ñÖ[oaÁ‚?~<€‚.PÅ×/~|î£p»…ïó’ÞÅ[[[㯿þÂÛo¿ððp¼ùæ›hÕªæÏŸo².Qyp *·–-[B’$lÙ²Åd¦‡’xyy!55™™™FÝZàÖ­[%^RÒÊ•+áë닟~úÉèKä믿.÷6ëÕ«g4ΠÐíÛ·K<¹iß¾=Ú·o¬¬,ìÞ½sæÌÁ´iÓpøðárס ©–-ЦMìØ±gÏž•¯>–¦pf‘ÂnE¶ZŸ}DI»wïF\\–/_ŽçŸ^^þÇ”{›…ϯ¤Vº’^­V‹7ß|o¾ù&"""ðí·ß"44:t0™õˆ”!IZ¶l‰“'O"&&æ] âãU€‚Ï?&Ý`”´eË$''cÙ²eF³ô”µÅ£$÷{oý ‚Î{g÷Þ{gϞŲe˰xñb<óÌ3%βEô0Ø@åÖ¨Q# :û÷ïÇöíÛK,…ãÇ€ÜçqË–-Fe<ˆääd£>‘UARRš6mjtòõêU“þÖ£M›6ÈÈÈÀþýû–ïܹó¾ëÙØØ 88/¾ø"®\¹Râ—h5T-[àÃ?„……f̘Qb÷½^õë×(ø¯_¿>~ûí7“+”›7oFíÚµáíí])õ.‹;wî€ÉX“_~ù¥ÜÛtww‡»»;~ûí7£å¹¹¹Ø»wï}×mܸ1fÍšµZýH!„*ÞŒ3ŸŸ3f”Ø2”››‹M›6(èêéììlòù¯×ë±eËùñª")) *•JkV¨xýFÆ ¡ÕjMÞiiiøóÏ?ï»nPPÜ oß¾}å®Q!z$ü1üýý1vìX¼÷Þ{ؾ};Ξ=‹ß~û 3gÎD·nÝäAƒÁÁÁhܸ1fΜ‰7âæÍ›Ø¹s'Þ~ûmÔ­[¯½öšÂÏÆX»ví°{÷n¬[·‰‰‰8|ø0^yå•GšaРAðòòÂäÉ“qàÀ$%%aË–-øúë¯MºF½úê«øå—_põêU$%%aÿþýظq#ÜÜÜjâ}ªU €ŸŸ>úè#„……¡[·nøñÇqüøqü÷¿ÿÅwß}‡Þ½{cÁ‚rùiÓ¦!&&ãÆÃ… pùòeL˜0§OŸÆäÉ“Ë<‹Je(ìŸüÉ'ŸàÌ™3òMž¥ÕI’$Lœ8aaaøøã‹+W®`ܸq&?7lØ€Y³fáÔ©S¸{÷..]º„yóæA¯×W¹‹æ®uëÖxçw°wï^ôèÑkÖ¬AXXŽ9‚ÐÐPtïÞ]¾!žF£ÁäÉ“qöìYL˜0W®\Á… 0vìX\»v |ðÂÏÆXÛ¶ma00}út\¼xÑÑÑøàƒpîܹroÓÆÆãÇÇîÝ»1þ|ÄÇÇãÂ… 5j”Ñ {øöÛo1þ|œ={)))8wîœÜý‡ïªìD¤N:Ø·oæÏŸ 6à§Ÿ~’suuÅûï¿/w#P©TØ´i&OžŒ‰'Bˆ‚‹¾:tÀÒ¥K«ÜÌÿþ÷¿1f̹ï³fΜ‰#GŽ”8ãPYh4lÚ´ £G–gruuÅ?ü`4C PpõlâĉF]ƒZ¶l‰E‹Õ”›!UÛ.@ðÆo mÛ¶˜>}:¦OŸ.Oõ§V«Ñ­[7Ì›7O.û /ÈWJ [{ìììðÙgŸaôèÑŠÔ¿4:tÀÔ©S±dÉìÛ·’$¡}ûö Å /¼Pîí¾úê«HNNÆ’%KðÝwßÁƒÆë¯¿ŽÏ>ûL.gooÍ›7cÙ²eò2[[[L™2#FŒx¤çFï£>ÂO}úàÝwߕˎ3@ÁgëÆô}_ºt©Qw³ª OŸ>?~DDDÕ)¥Æ &""ªNˆH)ìDDD¤"R )€€ˆ”Â"""0‘RØ@DD¤"R [ˆˆˆÀ@DJa ""R)…]€ˆˆˆÀ@DJa ‘ˆH)l ""R€…Ò eÅÇÇ+]RHøÛ+ÞP^Rÿö| Ìÿö$ Á oæJ’$ ^J׃'„ÈWbÇ’$íÐýŸ_Ï !‚*yÿ<þI±ã_i<þ f|ü[ÌÚ?oü¥ëAf«h @¥_‰àñOæŒÇ?‘yã"RŠâ]€ˆˆˆÌ)…ƒ€‰ˆˆÀ@DJa ‘ˆH)E[ˆˆˆ* )EÑAÀDDD技ˆ”Â"""0‘RØ@DD¤"R [ˆˆˆÀ@DJá,@DDD ` "¥° ‘ˆH)ìDDD¤"R [ˆˆˆÀ@DJa ‘ˆH)LDD¤"RJÑv"""ª$ D¤¶)€€ˆ”ÂAÀDDD ` "¥p0‘ˆH)ìDDD¤"R )€€ˆ”Â"""0‘RØ@DD¤"R [ˆˆˆÀ@DJa ""R)…]€ˆˆˆÀ@DJa ‘ˆH)l ""R)…-DDD ` "¥m` ""ª$ D¤”¢Ÿ?ìDDDTIˆH)ìDDD¤"R )€€ˆ”Â"""0‘R8˜ˆˆH D¤&""R)…-DDD °PºDd¶Ø@DT!!!6ê¨_äÇ ÀU.ˆ åg+•H‚ÇU>I’²Xýóë„o+Y"¢ª $$Dàã“ûÂoI’¼…ÎÚŽ$IY"„—ð¿P 2444çqÕŸª"R„$I¹4ÿüú•b‚’õ!"ª !!!(¸zï À§È·$IÞ¼„šâëÙØØ%­V+9::B«Õ¢ð_­V‹S§N!-- *• ùùùÈÌÌDJJŠHJJB~~¾Q—KI’b„ñ¿Pp @DhhhÊc}òTe0‘"$IÊ þç×¥Bˆ‰JÖ‡ˆ¨"„„„hðÏÕz˜žàû !ù$zôè  ËÍõë׃ëׯãÖ­[(<ßÒh4pqqA@@áââ¢`íË&77·o߯­[·™™)?•JµZ-—ÉÍÍEVV233‘™™ NgHKK“ CÑîD9. …?WBCC³*ýÉ™)"ªt’$©äY´@ñRõ!"*¯æäÏìܹ3zöìYb™ììl\¿~]ñññ0 îhaaWWW4mÚþþþpss«rÝ…J"„@JJ nݺ%wBÀÆÆÎÎÎÐh4¸wït:rss‘ŒŒ dff"--M¤¤¤”Ô(¶„`p)44ôŽ"O²c ¢J'I’@n‘Eó„*U"¢ò ±ýÄO W¯^eZ'//±±±r All,òó ®‰h4xzzÂßßÞÞÞðôô”¯²WÙÙÙò`ãÜÜ‚y•J…ÚµkÃÍÍ ÉÉÉHJJ½{÷““ƒììl¤§§#==ÉÉɆ¬¬¬â݉t¥t'ºª/^z0"ªt’$YÈ.²èßBˆ”ªQyý3ígn§NлwïrmC¯×ãæÍ›F݆ Ož-,,àåå… ÀÛÛõêÕ+Ó” U‰Á`@rr2‘’’"·pØÚÚÂÍÍ ®®®P«ÕÐétr8(cP t:Ðét(6;Q.€è"S—F¸‰‚p'44Ô ÀÓ­ˆ¨ÒI’d  h_ϹBˆéJÕ‡ˆ¨¼BBBÔò;vìˆ>}úTÈ6…HLL”Ã@LL 233\M÷ôô„··7|||P¿~}X[[WÈ~+[ff¦<=©^¯‡jµ...pssƒ½½=€‚“»wïÊ3egg#++«0 ))IèõzI’$y|‚$IBà*€0‡üš_Z}Ì U:I’jÈ(²h¶â_JÕ‡ˆ¨¼BBB$†: oß¾m?wîÜ1 iii ¦­[·.|||àããoooØÚÚ>¶z>>hÒ¤ T*nß¾øøxqûömy¬$IBˆ7CCCW)÷ «"ªt’$ÙH/²h–b¦Rõ!"z!!!¢}ûöèׯ_¥íS§Ó!&&FE§­S§ŽÜBàãã­V[iõªHyyy¸}û6¢££qþüyܽ{yyyB@¥RÁ××ððð€½½=´Z­Ñj½^/3¸uëvìØaÈÊÊÚZ¾¾Z5ˆ…Ò "³¤*ö;ûiQufBÿ\{¬ѲeK´lÙ€ñÔ£1118uêþþûo¹la ðööF:u*³ªTtF¡ÄÄD\»v ‰‰‰ÈÎþßP±Zµj! ¾¾¾pssƒ³³3lllî»]µZ {{{èõzx{{Ã××WuñâÅ®!!!µBCC3÷óªÊˆH Åç¸cS$Ug¢pZO¥ØÙÙ¡Y³fhÖ¬ ++ 7nÜCÁ¹sçpæÌ¹¬··· êÖ­[)SæççC§Ó!%%ÉÉɸuëpûömy$°´´„ŸŸ|||àêê ­V ggg¨TeÏXéééÐëõ$I¾ùZãÆqáÂ+Ýl¯à§W­0‘Ø@D5†$I!D•š«ÓÆÆPp£®¸¸8¹ËЕ+Wpဵµµ¼½½áááQî©GÓÓÓ‘’’‚””ܽ{×èÿ÷îÝCÑ®ç…'ç-[¶„‡‡œaooØÙÙ=Ô~ oBVÈÞÞÞ$0iù¨[®'Wƒ0‘ˆ¨&1Tõ1•–––ðõõ…¯¯/Ó©Gcbbpùòe÷"¨W¯|||àéé gggäçç#++«ÄŸ{÷îáîÝ»òM¿ŠR©TÐjµpuuEPP\\\ ÕjaggF#ÿû°„HMMEáÌ?ÖÖÖëP¤•!û~åÌ)]€ˆ¨&©ò 8µZúõë£~ýúxê©§`0pëÖ-¹…àúõë¸zõê·#Iàââ‚ ÀÉÉ °µµ…­­-,--Ìâó0]xJ’žžŽ¼¼<ÿ Óu)::ºð¿W©"5)-DT“ˆêŠS©Tpww‡»»;:uêøâ‹/ V«ÑºukX[[£N:°´´„……,,, V«¡ÑhP«V­G>¹/.//ééÿ›,N’$ØÚÚ>t×  à~ÇŽÃÑ£G!IÒù+V„Ud]«#"RBñK6 DTU»€²BÀÕÕ]ºtN§ƒ££ãcÛOjjªÑøF''§ro333—.]ÂùóçqíÚ5ü3H;ÀˆG®p À@DJ(~©¨æ}s‘9©‘ ??_ lmm¬¬¬N½ù ƒéééÈÏÏ7ê¾£Õj©A¯×#66ÑÑÑˆŽŽÆÍ›7!„€F£¿¿?’““‘œœœ°bÅŠ³ôj"R[ˆ¨&©‘@¯×€ôôtèt:XYYÝ7!ŒNò…ò¿*•ªÄz–·nÝBtt4®^½Š˜˜“ñ]ºt¥¥%\]]±uëV€›d D¤¶QMR#@Ñrÿûììl¤¤¤Ü%IìììÊ=•hit:|…ÿÚµkÈÈÈ`|“0___|óÍ7ðôô„ŸŸâãã‹nB_¡ªÆˆH LD5I ƒ¡Ä+õÖÖÖ°¶¶~¬ûÎÉÉÁÍ›7'ÿ ¶´´,¼³/üüüJ½‘YÑ¿É?ÿ¯y¤rb "%° Â$I²à¥t=HQqBˆü£2¨‘ÀÚÚ™™™}?ƒ·oß–Oôccc‘””$ŸÀk4xxx mÛ¶ðóóƒ——×}[жJ 5ïTN D¤vRž×Ö­[¯yxx(]R@||<Ø@ŒÒu©!jd°··GBBB‰Ý|EZZšÑ•ýøøxùb’$ÁÅÅ­Zµ‚——¼¼¼àêêjÔ‘šš*“f÷§§§É~ØP:"R[ªÔ«WOéjÕ52´lÙ{öìÁеk×r…€ÜÜ\ÄÇÇ#66V>á¿wïžü¸ƒƒ6lOOOxyyÁÓÓS¾yXqqqq°°°€V«•ïú›——‡»wïâÆ¨_¿>¶”)-DT“ÔÈЮ];„……áàÁƒ8{ö,üüüàææFµZ µZ-߬ð_¸}û¶|ÂçÎù*½••<<<вeKùdßÁÁ¡ÌõÑh4¨[·. !!`aa•Je ÿ%üMjÞ©œˆH l ¢šD_€••:tè€]»vA­VãäÉ“%T—H¥RÁÕÕ­[·–»ò¸¸¸TXW"I’àææ¸sçN‰þ+„(üáwÍ?ˆH œˆˆj’ÙüïDzðàÁpttDJJ òóó¡×둟Ÿ‹/âäÉ“èÙ³'jÕªƒÁ€:uêÀÃæRêXüµ¿O ¿kþÁ@DJ` "ªIô…Ý\j2kkk¸»»-KJJ N:uÿ¥µ”¾Šà `cv6"¢òa "ªIJlÐëkþ}§ªBËGI-…]Š­´JUq D¤¶QMRbˆU *ʨÈiBË¢èë-IR©a‹-%c "%°€ˆj !D‰ *\œîܹSâÜÊæêê ƒÁ€””l( "RQMRâ,@öööHMMU :•#//Ožâ³2ZŠîÃÙÙÉÉÉòrFƒœœœR×ùçïÃïš0‘ŠSðª Ug%¶¨Õê= ??¿Ò»þ²²²2:á×jµÈÏÏGnnni-ü®‘q "R[ˆ¨&)uP¥N+C~~¾|’]Y-°µµPp"¦&d IDATU?99999$ *•JîTt²`1‘Ø@D5‰AœašœkµZèt:8::*P­Ç+??_þe€:uêàîÝ»Ðét°²²‚‹‹ RRR`aa!œ¡Ñh8  ˆH l ¢š¤Ô•JUc •ÅÙÙYÞwJJ j×® ãÓÙâ3}¨ªX-0‘ˆ¨&1˜ÃÀŠËËË«Ô.@EYXXÀÅÅ¥ÔÇ‹·° 1&"%° Õ$…]€ÌJÑ1UIÑ.@œ¨dl "%° ÊÍÍÅ•+Wàêê WW×RËÅÅÅA§ÓÉ¿ÛÚÚÂÓÓ–––FåRSSn”dggOOOh4šrÕOððpÄÆÆ"77... ’» =F¥vFƒ¼¼¼rÛUUÑY€ªÉ`窗VÂ@DJ` @5‡îÝ»còäÉxÿý÷K-÷ÙgŸá—_~1Z&Iz÷îÙ³gÃÓÓ°ÿ~¼ñÆ&å\]]Ѿ}{L™2eªÛÅ‹ñÖ[oáÒ¥KþwÂ%IÆŒƒ9sæ<ÌS­òrssñꫯbðàÁxá…”®= ØÙÙÕÈÀU± h—¤ZªVeÄ@DJ` €Ø»w/$IÂ7ð믿bÛ¶m¸yó&vìØa4hoÖ¬Yxâ‰'——‡›7oâòåËX¹r%vìØiÓ¦a„ ÷ÝOvv6^}õUܺu K—.EçÎáîîŽ7n`ÿþýHOOÜOµÒéõz8píÚµSº*Tྠ¦ªìY€ŠKNNFbb"rrràææ­b~¤R0‘ŠS0Ô@Íš5ƒJ¥B`` úôéƒ7nàôéÓ¸páZ´h!—óööF``  U«VèׯÆŽ‹¡C‡bþüùxæ™gTê~Ο?ØØXŒ5 /½ô’¼ÜÇÇ£G6*«×둜œ ­V +++£Ç’““aaa­V  àäæîÝ»ptt„¥¥%bcc‡ÀÀ@ØÛÛ­›““ƒÔÔTÔ®]*• ‘‘‘HMMEPPÐÿ³wçqQÕûãÇ_‡ds”UDÍ%wGÍÊ-³=µ´k:ݺv«ë½õ­û+4[®m¶iSšÖͲÌÊìvÍ®Š+–û ˆ ²‚ì0ÃÌùý31ŠÌûùxðÈ9sæœ÷hæý>Ÿ­ÖyÌ ñññ”––§§§Õó&“‰ÜÜ\¼¼¼pww'77—ãÇNyy9%%%œ;w777¼½½ë}ŸÄ e2™Lv—\6f @YYéééœ={½^ƒƒíÚµ£cÇŽœ:uŠßÿÉ“'[uIªÙPÍî~Gõ‘AÀB[¸ø³G>”íÀ¸qãHMM½ì¾>>>,^¼“ÉÄâÅ‹/¹¯ù¿‡‡Çe›œœLTT?þøcñ=óÌ3–ÇÇ'**ŠuëÖ1qâDÈÔ©SéÙ³'ü±Õkׯ_OTT111 4ˆQ£F1yòd"""ظqc­s­Y³†ððpÆÇ”)S cáÂ… Ë>ÙÙÙDEEñÙgŸñÈ#Éý÷ßÏ·ß~Ë AƒøðÃ‰ŠŠ"**Šçž{î²×/ni¸Î-ªªröìY¶oßΦM›Ø·oŽŽŽ :”[o½•[n¹….]ºpäÈ|||¸óÎ;qtt¼\<ö÷Kª‡´!lAºÙ¡mÛ¶еk×íß»wo:uêDbbâ%÷ëÓ§^^^üûßÿÆÍͻロàààkŽ×ìÅ_dÖ¬Y¬^½šòòr.\È‹/¾H@@·ß~»Õ¾óæÍãÙgŸåÞ{ï%++‹§žzŠÙ³g³}ûvKLÿýïyê©§˜4iÑÑѸºº²råJÞ~ûmTU套^²:æ;ï¼Ãí·ßÎÖ­[ñõõEUU&MšÄ Aƒxâ‰'Ðjµ@U €°™Ë-±@¸Þ-ååå$&&’••@—.]¸ùæ›­ZÑŠŠŠØ¿?………´oßž‘#Gâîînyþâ©?Í-2 5)„¶ ƒ€í@zzºÕ€ßÿ=zлwï# €}ûö]r•Ö­[³lÙ2ž|òIÞ~ûmÞ~ûmÚ¶m‹F£á`Ĉ×t‘‘‘¼ð –Çï¾û.±±±¼ÿþûµ €;™3g„N§cРA|øá‡¼ýöÛ,^¼˜Ž;²téRËÌHÿøÇ?ˆgÅŠÌ›7Ïj梀€–,YbuG³¬¬ ¨šaéR32‰FsÙ ™Ì’sÅ®u€ÌÌL’’’(//ÇÍÍZŸùùù–nu^^^uvû˜´\šB[;`î¦b¦ÑhxõÕW¯h*Dó*ª—K®n¹å~ÿýw¶mÛÆÎ;Ù½{7ëÖ­cݺuÌŸ?Ÿùóç_Õ5Œ?Þê±³³3ãÆã«¯¾Âd2áàðÇŸóÅŸŸ7Ýt‡ªúý'$$0}úôZÓ¢N™2…Ÿþ™„„† bÙ>vìØ›<¶ vÙ (ÊÿmF’’’8sæ ªªÒ©S' `ußh4’ššÊéÓ§1 ´nÝš°°0|}})(( 55•sçÎYîðáêêÊí·ß^g €ùßH`!€Âd°X·nŠ¢àååE@@€epí•HMM­s ºxzz2qâD&Nœ@ll,Z­–·ß~›©S§^u· víÚÕÚÖ©S' 999tìØÑ²½®•IýüüˆªîvšL&:uêTïyΞ={Ùó‹&GZ.q}ªª’ššJbb"ªªZ«°-,,ääÉ“äççãàà@÷îÝ5jEEE$&&²wï^ j|P@@½zõÂÁÁãÇc45jTCâ‘ šB[AÀv`È!VwǯT\\YYY–/ö«9ÿ´iÓX²d GŽ!88Ø2HÐ<‹Ž™^¯·Z¼¬¦‚‚‚ZÛòòòptt¬µÈX]ûž?ÞR˜ÿ›——Wk?óù/."®å=Æ.×L²ëJ¸ËËˉ¥¢¢‚îÝ»3fÌËÿƒ&“‰3gÎpêÔ)ôz=>>>„††âããc¹ûŸ””DëÖ­ ¥uëÖ–ãKQQ!!!– .¦ªêÅÿÿØß/©R!lAZÄ%[{ê©§®ú8ÙÙÙ–Ö???öîÝËC=dÙoË–-”––ÖyŒ]»vñÈ#X«ªÊŽ; ªÕi÷îÝ :Ôò¸¨¨ˆC‡YŠwwwüýýÙ±cG­) wìØ¢(„……]öºœqpp¨·hî²€ÉÔ2?æê»îÓ§OsüøqF…§§'åååœ>}šôôtË"}]»veøðᓘ˜È¾}ûprr¢[·nŒ9Òj½²²2Ž?Nnn.¾¾¾ôéÓ§ÖÔ¹5㹸 Q«ž šB[€f,//¤¤¤ZÛ}}}¯ª»JNNgΜA¯×“ššJ\\:ŽsçÎ1oÞ‹ƒƒÿùÏX½z5wÝu—¥H¹''':wîÌÎ;‰'00‡+_!®«K%%%u&«Í]}-ùùùlÚ´‰ÀÀ@öìÙƒ¢(¸ººÒµkW† ‚££#§OŸæôéÓ¤¤¤Ð¦M›Zwù¡ª€OJJ¢¸¸www"""0`P5QZZ¥¥¥8::RWÒñ¶–Y…])„¶ ƒ€›±U«V±jÕªZÛgÏžÍ+¯¼rÅÇ»x€®»»;ƒfÕªUÜtÓM—}½¯¯/û÷ï·Ì·ß¦MK›€€Þÿ}«Ä"::š™3g2uêT¼½½),,dÑ¢EäääÔyügŸ}–—^z‰… RQQAnn.÷Ýw>ø`­}Ÿþyî»ï>:uêDNNÅÅÅ<ûì³VEÌŒ3HJJâ½÷ÞãÓO?ÅÝÝsçÎ1jÔ(,Xpù7¬ÚsÏ=Çßÿþw4 wÝuK—.mðëÅuuÉ@¯×ÓªU«F §ñÔuÝ­[·fîܹµöKMMµLȨQ£¬îòWTTœœLzzºe€pß¾}iÕªçÏŸ'==Ý2 ÞÙÙ™N:áääDll,téÒåR- 7›,¤BØ‚tj†:wîÌwß}Wïóæ;×O?ý43f̸lßõ#FXÏÓÓ“®]»ÖêW9}úôáÈ‘#=z”øøxÎ;‡¯¯/ݺucèСµîì>œmÛ¶±}ûv C† !,,Œ~ýúÕy—¶{÷îÄÄÄKzz:}ûöeàÀuÆ2dÈvíÚEll,……… <˜ž={ZíãääÄ¢E‹˜9s&û÷ï§´´”Þ½{3`À«¤¥]»v|÷ÝwÖy®{Ûn»ÔÔTŠŠŠ®¦õe²¢(uW=âJÎ;÷’@K|¹1Puÿĉ ¬Æœ;wŽÄÄDJJJpuu%88˜qãÆ¡×ëIJJb÷îÝ´mÛ¢¢¢P£ÑH||~~~Üu×]—Ýïr³óeßoóœèW齫}¡°’RUµÞ,ß—••±}ûvÚ·oÏСC-‹y]¸pôôt233kÝåÏÊÊ"))‰'NXŠ^½zYMå™’’BJJ ôìÙ“ˆˆ«óJ @ÃH „°iB´$v; P] wjj*±±± >£ÑȾ}û(//GUU|}}éÚµ+–»ü»víª¦×½é¦›ððð°Ë<[PRRF£‘ÀÀ@F]o cÍÁÖ5W6oº¾ï@ó%€Â¤@4yæA‡ Y¿À××—ˆˆË]Îfâ' ÄÖA´gŽõùùùWµFsæççGÏž=ÉÍÍÅÓÓ“þýûãææTÍ÷üøqŽ9‚‹‹K­»ü€eîÿÜÜ\ð÷÷gĈõr/))!11‘“'OZ&(¨¬¬ R!lAZD“ÆæÍ›´ï­·ÞÊ­·Þzƒ#ºî橪zÚÖA´Z­öóú £ÑØb×r¨¯ÀÅÅ…¾}ûZ———³ÿ~Ο?¯¯/½{÷¶oc2™HKK#%%…ŠŠ ¼½½ ­wUUÉÌÌ$!!“'O’‘‘ªªtìØ‘¾}û²gÏœk­ Œ|×XH „°™HÑ’˜ê——Wï n{œœLRRDDDX³1ßå?þ<Š¢àïïÏСCë]õ»¼¼œS§N‘@bb"ÅÅÅ8;;ĤI“èÑ£ÞÞÞ”––Z¦…Zc¤ šB[.@Bˆ–¤Î1Ý»wo±wÿF#ŽŽŽu¶èõz¶oߎŸŸ·ÝvPU >|˜œœL&žžž„……]rªßœœË]þ´´4L&­[·&""‚°°0­¦ëAÀu´ÈwM5)„¶ ]€„-I@}‹Ëµ•••8;;×9ÛÎúõëqww';;›¬¬, jm€šÓxÖwÌ””KÒáÂéÖ­·Þz+=zô mÛ¶Wgs)H`!€Â¤À¨ªÊgŸ}ưaÃ4-hSvèÐ!vìØÁ¬Y³ðòòºnÇýñÇ)--å   €¯¿þš{ï½·Öª¨¢I3^jЖ¨²²''§Z-Š¢pÏ=÷`4kݯ˅ 8yò$ ¤¤¤PYY‰«««å.pp𠮯¯ÀütƒÔÂI „°i°ëÖ­ãÕW_eïÞ½¶åšýöÛo¼òÊ+Üu×]×µøê«¯ÈÉɱ>>>üð䤤ðÚk¯]·óˆÎî>ÃÌ-f/ V_òo49sæŒ%éÏÉÉAQºvíÊÈ‘#)))áðáÃÜyç×%Κk €…B[AÀ-œÁ`àÕW_eöìÙv7âµzæ™g˜5ksçεë¤ÍŒ ê\y¶Å2 Yÿ ¸¸˜ÄÄDHNN¦¢¢777BCC9r$¡¡¡–¹ÿwìØqMq]¦@¾kªI „°…‹¿!å®L óßÿþ—ŒŒ Ëíúèõúzgý¸ZæÁ‰—R^^n™—üz1w‰¸ÖýFMÛ¶mYµj ,¸ž!ŠÇ. €šÇ5¯[UU222,wùÍ«þvìØ‘Aƒ†¿¿£ –€ºµÌ¡éBˆ¦NZZ¸¯¾úЍ¨(ºuëV빬¬,þò—¿Ð¯_? ᡇ"77€­[·2lØ0¬^WVVưaÃX¾|¹eÛÿû_˾O>ù$sß}÷‘––fõúÌÌL´Z-¡¡¡tïÞFÍ–-[®êÿú׿2gÎ>ÌäÉ“ ¢OŸ>,\¸Ð²‘™ªª¼õÖ[ôë×ÀÀ@&L˜ÀîÝ»ë<®££#&Là›o¾±ZÕT4i–À^ «€òòrŽ;Æwß}ÇâÅ‹ÑétìÚµ ooo&MšÄüùóyâ‰'7nݺu»aÉ]³Õ|ú†œ´’!„-H @ f0سgÓ¦M«õ\ZZãÆÃÙÙ™'Ÿ|’àà`Î;Ç/¿üB^^íÚµ£¤¤ÄÒM &“ÉDrr2çÏŸ·l+**"99™¹sçÒ³gOÞ{ï=233yýõ×?~<»víÂ××€?ýéO¤¥¥ñ·¿ý^½zQXXÈþýûÉÉɹªë<{ö,‰‰‰Ìš5‹9sæðÌ3ϰeË–.]Êùóçy÷Ýw-û.\¸eË–1kÖ,n½õVN:Åã?޳³s]¤ÈÊ•+9vìQQQWŸhTvW\Üð¯ý “ÉD›6mèÝ»7¡¡¡Ùt&¤š-2Ò`M !„-H @ –@YY={ö¬õÜ‹/¾ˆ^¯gË–-téÒŲýÁ¼¦svéÒNgyÁøñãÑét<ûì³”••qðàAæÏŸÏc=fÙoÒ¤I×tÞììl–-[ÆÔ©Sªî;F£‘U«VY œ¬¬,V¬XÁ<À믿À˜1c bÚ´iu=zôààÁƒR4vYÔœçj§é¼Þ¤ a¤ ¤hÁÌwÔÍwÞÍŒF#›7ofêÔ©VÉÿõ0cÆ «Çýúõ#22’mÛ¶àîîNïÞ½Ù°a[¶l©ÕEçjy{{sÇwXm{衇0™L–ÁŒ¿ýöz½¾VŒcÆŒ¡cÇŽu×<èÕ¶NˆFg—€y EQ:t¨Í“ Öâ_²pݤBØ‚tjÁ @­®iii †2³¿¿­mÝ»wçôéÓ–Ç/¼ðªª2mÚ4ÂÃÃyæ™gˆ‹‹³<¿iÓ&† fõs¹ÜÏϯVóõ™Ïmþo}1ÖÅüÞ™ßKÑäÙmÐT¯¹®Ê›MÒHa ÒЂ™ïXmoÕªP5X°!.[RRRï¾0ŸÇ<µ €F£aûöíìÚµ‹ÿüç?üøã|ùå—¼óÎ;<øàƒøûû[ºò˜]n¦ úÎ XÎíîî^ï¾¥¥¥u×üÞ5…;ª¢Aì²0ªMiæ#Y¬a¤BØ‚´´`!!!888Ôš…§C‡x{{sðàÁK¾¾]»v=z”¾}ûZ¶ÿúë¯õ¾æøñã 0ÀòØh4rüøñ:W 6ßÝ_¸p!#FŒà³Ï>ãÁ$<<œððð]£ÙÙ³g)((°êÇäÈà–€   Nœ8A@@€e¿²²2N:Ug‹ˆù½3MžÝÏÔTÉ àºI !„-H @ æããCDD¨õÜܹsÙ²e ?üðƒÕö’’ÊÊÊ ÅÉɉ7ZºÀdggóå—_Ö{NNG^^žåñªU«ÈÌÌä¾ûîªî¨Ÿ#$$„üü|vìØÁ?ü@xx8mÛ¶eÆŒ¬ZµŠþýûÉöíÛùÓŸþÄþýûë<ß°aÃ;v,cÇŽ%33“Í›73zôhK—žììlFŽÉM7ÝD=PU•½{÷’ššÊÒ¥K¯ú:ÃÂÂ,ëôêÕ‹]»v‘’’Â[o½…··7...,Z´ˆÇ{Œ[n¹…áÇ“œœÌ… èׯ_ýüýõWÆgÕ…I4iv×`2™,ã_šRp1s! -Ö¤BØÂÅ-ò¡ÜÂ<øàƒ,^¼˜Ÿ~úÉjŠOWWWV¯^͆ صkiii´k׎ XºÊ¼öÚkôìÙ“;wâééɇ~È„ ðööfÈ!µÎ§Õj-‹zyxxðÚk¯ñðÃ[”îÝ»³|ùröìÙÙ3g0™Lh4>ùäzõêuÙë0`óçÏ·*f ªŸÿ—_~ÉçŸÎþýû>|8o¾ù&ƒ¶Úoâĉlذo¾ù†¬¬,4 Ó§OgË–-µÆ$$$päÈ^xá…˿Ѣ©°»šfâ/- #€Â¤ P ×¶m[}ôQ–-[Æý÷ß_kÕÏÉ“'3yòäz_¯( ³fÍbÖ¬YVÛçÏŸ_ïk&L˜À„ ê|ÎÅÅ…I“&]õ¼ÿýû÷§ÿþu>çééÉã?~ÙcôíÛ×jLÀ=÷ÜSk¿?üÁƒ3jÔ¨«ŠUØ„]PçT›MÊE±ÉwM5 „°lž~úi:wîÌ¡C‡lJ³QPP@ff&/¿ü²­CWÆ. €¦˜ø_¢@A¾k,¤@a Ò`¼¼¼X³f­ÃhV|||X»v­­ÃWΠ×ëmG£k.-2Àš´!lA‹ëâ¾ûî#++‹F?÷·ß~ËÆý¼¢I:°|ùrÓþýûí¦% )&þ2 a¤BØ‚ B´:np[yyyòúõëùøãÕôôt[‡ÕhšR!pqÒQlò]SM !„-H €¢EÑét›TUžËÈÈ(ÿøãY¿~}½«=‹KZ.M !„-H €¢ÅÑétzN÷/UUÀoöïßÏ’%KL¿ÿþ»Ýt ²5ih)„¶ ƒ€…-–N§K×ét÷c+**NþôÓO,[¶L=s挭C»!šR ³zZ仦šB[.@BˆO§ÓmQU5 ˜Ÿ]úÉ'Ÿðý÷ßSRRbëЮYSmѨ9¸æÍO7~DM“B[.@B» Óé :î-UUC/<È’%KL{öìÁd’{7’Œ¨ŸB[Ûëjë„°':.S§ÓMFéõúøŸþ™eË–©©©©¶íš5¥.@ÒÐ0R!lAÆØ¢(ÝY¡KÐétÛUUíùþûï; >\5jTƒº ’’’jm¿x%`½^Ï›o¾IQQP5sÏÍ7ßLhh(~~~xyy58fƒÁ@qq1ŽŽŽW<ŽAUUNž<ÉŽ;Ô´´4EQ” `%ð¦N§K¾¢ƒµ`R!lAZ®’$ÿBˆ+¡Óé g´Zí “ÉôáöíÛG:tÈ4~üx‡ˆˆˆz_wôèQ6mÚDAAA­çj.Uwê===éÛ·/¡¡¡téÒåŠÆ”••™gçÁÅÅåª/pèÐ! (Ê;ªªv R'Mš¤´kgý¼eËbbbðññaèСxzzŠ››»wïÆßߟ””rss8p þþþWGaa!F£777ÜÝݯøZ qqqÖétEW|P;!€¢Ñ)в˜Uý0GUU»_–ýr$ùB\/Z­ÖxQQ”§Eq:t¨¢Ñhpqqà‹/¾àÌ™3ÌŸ?¿Î;ù)))äççÓ§OtNó]~s~ooï¿öbiiiúh½¯ÍÏϯµÊnM5ûò«ªŠ‡‡‡¥áj\ÜŇªñcÿVßëtº²«>¸’@ÑèEùx¨úa–ªª~¶Œ§)“ä_q£iµÚ{«»uéÖ­›š––¦ôë×;ï¼ó’¯+,,Äd²ÆeÎ+ñôô¼¦¸ 'Nœ0wñ@Q”Sªª~ |®ÓéÎ\Ó ì˜BˆF§(Ê¿Õ3TUíbËxš*Iþ…E«Õ¶^På着:7Ž#F4zF£‘””Ž;ƱcÇÌ]|JTU]CUŸT $³ !lA¦½ Iþ…I§Ó•ÏkµÚ_-yîÒÒRNž>ž„„Μ9ƒªª(ŠR®ªê&`ð³N§Ë¸!'ÒHÑøEYÜ_ý0UUÕî6 §I‘ä_akZ­öàùvíکÆ S¢¢¢®©0 dddpæÌÒÓÓIKK3;(Š’¡ªêT%ý[t:]ùõ¹ q)R!¢(ß÷V?<­ªj -ãi*$ùB4Z­ö EQþ©ªj'wwwS¿~ý"##éÒ¥‹e*Ï‹FJJJ())áܹsæd_ÍÎÎÆd2)Š¢”©ªºØ ü¨Óé5âe‰jR!¢(k{ªžRU5Ø–ñ4’ü !š­Vë ܧ(Ê_UU¬Ôëãッƒƒ9á7•””PQQápÑ!TEQ’TUÝ ì©þ9ªÓéŒ|)â"R!¢(뀻ª&«ªbËxlM’!DS§Õjƒ€»¡@˜ƒƒCÀAUÕlUUϹ@NŸSÀï:.ßV1‹úI „htŠ¢|L­~˜¨ªj˜-ã±%Iþ…B4¶‹›j„¢1Ôüì±ÛY€$ùBa R!l¡æ2»l†”ä_!„­H „°»nä_!„-I „°»] X’!„¶&€Âìr%`Iþ…B4R!lÁîºIò/„¢©@a v5X’!„M‰B[°›Iþ…B45R!lÁ.Z$ùBÑI „°…ß É¿Bˆ¦J !„-´è@’!„M™B[h±]€$ùBÑÔI „°…Ù É¿Bˆæ@ !„-´¸Iþ…B4R!l¡EµHò/„¢9q²uB»T³ Y’ü Ѽ)Š¢\~/aTUm-Ò !€Âj¶4Û\Iþ…h~ª~óe³ÂMˆ¢(æï#µú§ÅR!l¡Ùw’ä_ˆæ§FòïXýã@íb@Ø/Sõ “¢(-²@a Íz°$ÿB4?ÕÉ¿U‰¿Ó»ï¾ûÝm·Ýv›ÃMÐ}÷Ý7þÈ‘#Û€Jª f÷=u9R!l¡Ù¶Hò/D³e.œ·!C†Üvî«5ôJKãÀˆ´q9C`‡|ŽDrÒ3µ]6^Y}ênã°¯ý«ß&®çtÊn`ÊØ¾´ó @që@Ìæô¾¹¿µ†u;6ÐŽ-ã“ IôïRH·¨›hkGãÍ7ß<öÈ‘#{¨JüMŠ¢(-­ÀŽ~Bˆ&¤Y–ä_ˆæé¢®?΀‡^¯Ç©O†Q#ñprÂhôBèbò¡cÛž”T´A¯×Û6øë¤ëMÃ(wuä¨K¼Ú¶§D.U×ì錢8â1‚9QQxº”£×ë‰êîFd¯@ Ñë6¾‚Æc4]7ª»QcL@K!€ÂšÝ `Iþ…höj¶¸VTTàÚ¡e;Ó€®”»Tý;99=&“‰ààà:˜‘‘AAAáá´äççsáÂ:uê„»»;™™™”——c0 ³ì[XXxC.´.ž}FàŒî9¥ös#FÐIãkµ}DÏÆíº((( ²²’¢¢"|}}ñõõ½ü‹j0™LÄÇÇÓ±cGŒF£3à ”ÓBLJH „°…fÕ É¿-†y €KEEíÛ·Ç××—sçÎÑ¡CUw˜¼¼<Ú´iCÿþýÙ³gƒ 99ÙR¨ªŠ¢(Ã!CX½z5¹¹¹Ü}÷ÝTTT““Ãøñã>>øøøàäôǽך¯3«¬(Ãɵî˜DýÒÒÒ8sæ :t ((¨ÎßYqQž^^u¾^UUŽ=JQQß~û튵k×¾äÅ€^UÕ5BZ„¶Ðäg’ä_ˆ–­W¯^—ß©‚‚‚.ù¼§§'C† ©ó¹üüüº_TZ~­aÙ///ËïôRc+ê}Ï ª% ¥“@a Mº $ÿB´|‘‘‘F*++/¹_YY™¥{ÐÕjݺõ5½¾%*--ÅÃÃÃæÇ¸˜‹‹‹Bqƒ4ÙAÀ’ü a?ŒF#Fã=;233)**²š©§  7·kX[ó¢Jaa!®®®6?†½’@a M²@’!싪ª–ä\¯×“““ƒ››z½ÞÒ‡\UÕ:“̼3Éäë]öÿãxÔ=ZÔ|ޤ¤$BBBêççMXLÖ/³@ŸW%8\ùð¼´$òôB©<ª»Í›L*Ò“ÉÓ»@^ZmüƒAiøXØÔ¤$º]âZM&S­Â(þh={›§T½ü{`2™ÈÎÎ&55•ððpÚ¶mKNNŽÕüœ @Ûöík=gVZZJYYY½ãAZ")„¶ÐäZ$ùÂþM&ÊÊÊÈÉÉÁßߟ²²2’““-ýÁ ƒeöŸšîØÂÿ’T^˜Ó—,þ¬}õyþïµqq«Ýݧ¤¤€6®&^Yô.ÓîÇñÔ"*scÑŒËÖãP^š‡§c1z.œMæ\©3ÆÒ w ‰g+Þ£M×6÷öΘpçd‰+N*œ=›EΉß:|õ^ú¹LÊ‹‹Ø’@cX·eý¼ ¨=†£$%s" Ogúx³-!ŸÛ‡G6ä]åãïvPr¯6áâîM]C¨+++-ï½Ùÿv##íg Žôó6XìIéÉDLÕÒ¹öq*++ñóó£°° 60jÔ(Œú ŒÆNH"$2ЏØ]tí޳“‘ÄqÄ•U0zâD«ãxyyQTTÔb}k™HÑèEIºW?üZUÕlŽ$ÿB´puͤªê¡’’Krpüøq¼¼¼,SsBU K%Ñ q©§ÍƒêLãkKIIiÐûUPP€Ï5EUPP€««+mÚÔ]]‰ÒÒR jpttôŠ È,@BqÕl°é]Iþ…°cJU73óо5·©ªZï4  UóxÍ“BCk»uëÖ ëUUõšßUUqqq¡¸¸øšŽcq]œš;)„¶Ð$¦•ä_ûÖÊ£­X’!„öJ !„-Øt°$ÿB!ì™]wRÅ èjë8„°CÎ5þíQ7–®À Kmv—üËçŸÒUU½ô*XBˆÉ®  ëúõëS:wîlë8„°gwWÿ4ªŒŒ ¦L™v˜üW“Ï?;Vý÷œ¶u,B\/ùùù>|˜àà`Ë4®¢nö^йsgù#Â~Å>“@>ÿ„Í_VVsæÌá§Ÿ~ªõ\Ÿ>}X²d ¦ñkâì¾Bصì5ùBˆæ.&&†Ñ£GàááÁüùóQª§òüÏþþ}û=z4³gÏfùòå¶ µÉ‘AÀB{–në„M׿—/ãÝ–qüÀœˆãġݬ߰P‰ŽŽæÐ±$ËþGNŸ±zý±¸¸Æ ×®ìܹӒüÏž=›’’,X@tt4ÑÑÑìÝ»—­[·°bÅ >ÿüs[†ÛäH „Bq‘èè—ð ç¯?Êê勸ø‹¯ùâã׸°EéEçÞCéÓ+€¼Âbž{ýCËëŸ_ôß~ýµMb·‹WýNþþ÷¿³|ùr*++ÉÊÊÂh4rêÔ)JKKÑh4¼üò˼ñƶ ·É‘@!„¢–r†j4àðǤeæ…bSŠAUãÈüá=,\@oOË~ —»yÛ¶mkÌ€íʆ €? sçÎñþûïSVVÆßÿþw<<<øç?ÿ À±cÇ(,,´M°MŒB!„¸Èÿýõ žyüÏ8»·bÊ}cúôéÌ™3cIc'Ncóÿ6‘æÞƒ‡ª˜îÝ»—AÜXý&ášlݺ•˜˜›^CKõÞ{ïðÿþßÿ ²²’:°`Á¾ùæôz=&“ ggg Š¢àèèh³˜›)„B!.âÚ:€–.³<¾x&™±·ÜÊØ[nµ<8p ´ÚGfŸ¹1òòòpp¨êÈrúôiæÍ›G¯^½ðóóãÈ‘#UuÍJOOç³Ï>ã믿殻î²YÌMB!„¢Ù(++³zÂW_}€¢(¨ªjyÎÕÕ•7ß|“©ÑoÒ¤B!„͆yªO³ .°lÙ2úõëÇÞ½{©¨¨ÀÉɉgžy†gžy†x€Q£FÙ(Ú¦I !„Bˆ‹ÄÄÄÜ’sàpÌ>Bú2qÊÝTR•<f§àÑ1°F"e„ƒev•˜˜˜?º™ŠÀÁ«ú™J*qª•€™{­ ³ÓPÚàUGw÷SIé…tµÚv,&†È]•ŠŒÔzmeq;“@Ó÷•ÃsÊUÚ»™qà@Ʊ :GZ¯.^d¯ê7¥‚Jk\{eq[b“(½Š·.DâøîhÆD\òÝÜܬ'''3sæL.\¸€§§'mÛ¶EUU>ÌØ±c>|ø%g¤B!„¸HXxg:¸«¬X»}ÛŽÑ{h0[â²ډ䭟°ÞwÇÿõ'ÖnÞ@¥ƒ ÓÊ9þ¤³~PYöÃVN¯YÀ¬¶òÆsáïÿZ†AñÀ#Oÿß:<]U\Éõ ·´÷¤ÿã/¢äçåÿ¸-ô<Îñ»h{ÇÓl?YJȉÕüšZÌðÙÿ`Ëk/á2ôn¢g &æPš¾mi3è5ò~fÜ?ÿËâÈßHêý_ÞÓïãTbâ²X³d^Žì;ô3[·neel:I?~Æ+¯½À¡˜¾ÝúÝg&Nˆ1ü.NÄâtübücý›‹ùañdb¶™pßóW :}ºÕqÖ®]ËöíÛIMM%00{ï½·Þ9=ÊêÕ«‰§GÌ™3‡«ŠåÊ•äççóØc±lÙ2~ÿýwÜÜܘ4i÷Þ{¯e¿çŸžœœ***øÇ?þ@‡˜?¾eŸƒòÍ7ßO›6m1b?ü0µÎ7wî\>úè#8@PP­[·fçÎ|ôÑGøúúÒ«W/fÍšEff&ßÿ=¿ÿþ;999tìØ‘ðè£Z9ª)..ޝ¾úЏ¸8ŒF#aaaLŸ>Þ½{[ö)..æ“O>áÈ‘#Éc=ÖâÇW!®œ´!„°bNÒwïÞmÙ¶k×.Ú·oÏàÁƒ ±zÎÜZ0tèPŒF#?ü0óæÍãÀôìÙ“mÛ¶qï½÷ZÍÌavìØ1¦OŸn »iÓ&ÆÏÁƒ¯*þÿýï|óÍ7L›6•+WÒ¡CöîÝ˼yóøì³Ï|œ+V0yòd¾ÿþ{ºuëÆÙ³gyî¹ç¸ÿþû1™LµÎ7}út6oÞL—.]pss»ä±×¬YÃ矎ƒ "++‹E‹1iÒ¤ZÝ™V®\É­·ÞÊ–-[ !<<œcÇŽYHIIa̘1¼ñÆáççÇgŸ}†F£áðáà ¾f!„}!„V „££#±±±Ìš5 ¨*n¾ùf† rÉàóÏ?gÓ¦M¼÷Þ{Üwß}¼úê«Ì›7×_)S¦XuÚ²e ß}÷åõO<ñcÇŽ%::šõë×_Õ5œ>}šqãÆ±víZœ©¨¨`ذa,]º”™3gZbÚ¾};!!!,^¼Øêõæ„wÜqï¾û®eÖžo¾ù†'Ÿ|’µk×rÿý÷[oòäɼð VÇéÔ©±±±üío£G–í³fÍâ©§ž²ê´~ýz´Z-ß~û­åØ)))¼ôÒKŒ;–?þتu ¨¨Èòï矞óçϳwï^ºtéÀ+¯¼ÂèÑ£yá…øé§Ÿ®ê}´g…YI¼ýÑÜ4BÃc‡“š™ÎJÝ*Fi4l‹‰!::š˜˜¢"ÂhÓÞº•%&&†ÁýCpóêz"3½hMtôlþékvìK¤u`ù)G,qôŒ$¨S»pþK‹‰©ZÄìÎGŸâBÒ!Ë6ó4œ†˜˜-ô0’Nž¤¡•Eé,zk9š‰¢Ø£ŽãnF£Û(×`¤BaÅÓÓ“¨¨(Kboîÿÿì³Ï0xð`Ö¬YCYYîîîìÞ½›   KR¿bÅ ¸çž{,ÇtrrbæÌ™|ÿý÷lß¾Ý*y2dˆ%ùèØ±#3fÌ`É’%dff^õ¸‚GyÄ’¸»ºº¢± `v IDATÑhX½z5z½¾În65}ñÅ þò—¿XMÙ9uêT^zé%6mÚdu ...<óÌ3 Ž­uëÖ@ÕLH999Ñ£G¼¼¼8|ø°åØkÖ¬A¯×³hÑ¢Z1{yyUÅÇÖ­[yä‘G,É?€¯¯/S§NeéÒ¥äçç[Î)æ·Þàå7tU…àØ!¤f§S¤/âÈÙ|Ë>¿¬û7‡÷÷$)3Ÿ.þytê8Úô &&†þážÌ™÷"CGOäó¯¾dÂøÑüeÎ<5g+WuÕ]0¢£Mtt4`dóÏkˆ=¦§Ïp¾.U«111´‹‹#ûÔ â“Ê™ûÖ¿Ôæšß“†ˆÝµ‘èè×YóÛiâcbض-žv!Dv«*ˆVÿûúmÝÆ9E¡Å ÔLbH¸'ãµÏòÖòs Ý»ÓÍ/‚tƒÃûwÓÞÛ‘[·sNQP zÚ†„s&þ‘ƒFòãšUDD„0|ämÜ2FÓ(×ÙÜI „¢–aÆñÁœœLII ……… <¨JØ {÷î¥W¯^$&&2cÆ *++IMM¥uëÖÜ}÷ÝVÇ4/MQQ‘Õ ¶†2ÇêïïO‡n@tu3 $$$Š««k£÷FHNN¦¢¢‚^½zP^^NRR=zôE‹ìÐСCùàƒؽ{7ÅÅÅøøø@çÎñ÷÷g÷îÝXö‡ªÿ+++ füøñµŽ;a¢¢¢¬¶99Õþ*2o«¨¨¸ªø¯$¯KII ^^^u^ÃøñãñõõµÚæááqEÇŸ;w.‡báÂ…ôèу   ÜÜÜ7nœÕ€ŠŠŠË¶V”––U-3õÍy.¯œFs+Í­L¼eŒe»ŸFcéÎRuÆÞ>ÅêµÑ¯¼Àø)Õ:îÖ­[¯1.M­UmÇÝûÇs5㺒Õo¯—Çþïõ:·kÆLDSýï»õ†AÖã\:ÜÄ'oÞT½CÕûžr²j]f´Õ¾›6þÄ­·OúãØÕ×9ñÎk‹ÝžHÐÂäææòÁ°wï^²³³ñôôÄßߟ!C†0cÆ ¼½½|¬¬¬,&NœÈo¼ÁCÕþ»ÞÞxã vïÞ}Uÿ̱.Z´ˆG}ôDW·¥K—²fÍvìØÑhç¼Q^|ñE222,_NŽŽŽÌš5‹Ù³góç?ÿÙÆÑ‰ÆvóÍ7ãääDll,EEEÜ|óÍV3ߘÇ\\xxxàïï““sçÎmйRSSkm3ßa ¼ÖK¹$EQ¬ôšõìÙ“ØØX¦OŸN«V­®ë9óóóùí·ßøÓŸþdU7233-3/„„„ð믿RPP€OÇ3· 3gΜë«hš”N·pöÿdú¼Ü>÷YÊÎî!Ô3ª’ác11äRõïJ`gu|cñYvìKD£ÑàÕÉŸ kþF£álq%‰ûvZ ‡¦®fò/®ŽÌÔ‚dgg3zôh>ýôS\\\¸÷Þ{Ñh4”––²hÑ"NŸ>më[”ÜÜ\Þÿ}ž~úé:ï`6wÎÎÎ<õÔS,Y²„ .Ø:ÑÈZµjEŸ>}ؽ{7¿ýö›¥ûÙàÁƒ9xð 111[u©¹ãŽ;عs'¿ýö[­ãVVVÖZµwëÖ­VŸOz½ž/¾ø‚®ï…]¤mÛ¶œ zªúÿŸ…ÿÏÞ‡EU¶ÿöMDöMQÐÜÂÜ—¬ÔÔËÊ,3ú¶h™Õ«½e‹½•¥oe›¹—ki™û¸§¸€Zà ² ( Ûç÷Ç:‚;0ÀÜŸëâ’9ç9sîÁaxîsžç¹)»w–£ØÑ÷é§Ðh4ØÛy’~%Fúå‹ìÈ/›5<ñ@<š‘]d¸×%jVýëµ±9sæ––Æœ9sô&§î ùÞ¢7·páBLMMyøáú{ÏqذaüûßÿfÉ’%¼ôÒK†GÔ°.]ºðå—_º+þ×*›[áák¯½Æ¶mÛ9r$O?ý4mÚ´)R¶víZ–.]Z>Ô tcó‡΄ hР‹-"..Žï¾ûNï®CuèÖ­Ÿ|ò =öAAA¸¸¸0~üx:wî̸qã˜;w.§OŸ¦wïÞX[[sþüy6mÚÄ€ø×¿þuWçtvv¦cÇŽüüóϘ™™Ñ±cGöíÛ‡F£ÁÕÕU¯m‡7nóçÏ'>>ž>}ú`nnÎñãÇ133ãwÞÁÔÔ”ÿþ÷¿Œ1‚ž={òÌ3ÏàååEZZQQQ9r„={öTÅ˨hósÈ/.&&A!+)ÅV‹$¥ãÐÂí«c9:€mΕ]ÈàA^ì¶ä)&˜ÛZÐ̯ææ=ÔE’Ô#ÑÑÑXXXT˜ÜpÂÛêÕ«Ù±cGùD³Î;3f̘ ·š<ÈÏ?ÿÌÉ“'iÚ´)/¿ür¥WævìØÁúõë9yò$nnnôïߟaÆUhwøða.\ȹsç )_jðZ—.]bÖ¬Y 6¬ÂÕÇO>ùGGGÆŽ{³  [ZoëÖ­ÄÅÅáççÇÃ?L¯^½ôÚLŸ>Î;Ó²eK/^Ldd$O<ñ„^Ñ k©ªÊâÅ‹4hP¥ãs³²²øþûï9vì©©©xzz2pàÀòdaÍš59r„wß}Wï¸þù‡ ð /àïïè–ù$ÞÞÞåmCCCyä‘G°··gþüùÄÄÄТE ~úé'úöí{Ë›5kFhh(¦¦¦åÛZ¶lIãÆ+´uww'44TïwvÒ¤IØÛÛsàÀ¢¢¢ôÆÊ¿ûî»téÒ…~ø?þ˜ÜÜ\<<<èÒ¥  ¸åù@·¢Qhhh… 0ß~û-ÿþ÷¿Y½z56l C‡¬]»–?ü°Bðî»ïrß}÷±`ÁÞ}÷]E¡E‹L˜0¡¼M»víØµk}ô?ÿü3çÏŸÇÉɉ   &Ož|ËŸ£¨èÄÖx¢œp+*¢Ïsøå—Þ˜œOãôÞþZÏÈþ.h¶%Pdm‡{[gvî8î}™$ç–_̹½1Õ’„uÔÈë3x}Wþ7êf&_3Ì'¬íÕ÷FU ÿ9øÓž^õ<_ˆ`ö×]Xµì(½Ã‚˜5ö/ÞžÛšVƒš3áßGy«àv!­q‹ãïÔb¶GX±kw*Înf\È)¦D…ÕïaÍÒ0.žÎJ¸SBÚî$‚Z¹²àÇSü´7õÔìIViÎ_x·̃S#XüÎÝ4&JÙª ÆHQ¿ˆˆˆØkÿÕe&L`õêÕÌ›7¯BÇðzZ­–Ñ£G³cÇzõêE`` éééìܹ“¹sçÒµkWΟ?O§Nxøá‡Ù¸q#ÁÁÁØÙÙ±mÛ6Ù·oŸ^§ò?ÿùóæÍÃÕÕ•~ýúñ×_qêÔ)FÅœ9sÊÛmÚ´‰±cÇâççG¿~ý¸páÄÓÓ“óçϗϸpáíÛ·çÃ?¬ tïÞOOO–/_PëµsTUå…^à·ß~ÃÏÏ=z°eË™:uªÞ’}~~~téÒ…èèhZ¶l‰§§':t(_Ãüz11º• ®]ç¼ÌñãÇ=z4¹¹¹ 0gggbcc‰ŒŒ,mo¼ñ«V­âÔ©SzÇnܸ‘1cưjÕ*ºví è:(›7o¦M›6Ò©S'<ÈÞ½{™8q"o½õ ›´Ø¯_?233 £I“&$%%¡ÑhøñÇ `ÕªULš4‰ÀÀ@ÂÃÉ%::;;;´Zm… j‹/æµ×^cÏž=åII}OÇŽ›¨ªgèX ¡¾}þ‰;clïEWpÁ °ìgUU# •¸ûö%zã•ÁNG§PlmM€ßíÏy¼ÞŒ3¾Ÿ9sæl È UU-¾ÅauŠÜ¨GÆϺuëx饗øì³Ï4híÛ·§GVÄøúë¯Ù±csçÎÕ[«»¸¸¸ÂÔõë׳iÓ¦ò[öëׯç¹çžcùòå¼ð üõ×_Ì›7—^z‰éÓ§—ß¶ÿì³Ïøè£9r$]»v¥¨¨ˆwÞy‡æÍ›³~ýúò«beÅuîv½ïʬX±‚ß~ûM/(..fêÔ©|öÙg :To‚á¶mÛX¶lááá7xÆ«ÊÆ6_¿šIII ¯¾ú*%%%lݺUïJçµE{îTff&îîî|þùçå…ƒ&MšÄW_}Åc=†¿¿?œ9s†~øAƒéÅT6Ö8??Ÿ™3gÒ¾}{V®\Y~%tþüù¼óÎ;嫼\«ì5FDDÔ« ÔQEQ*Î52Lãû_¹æ«ÎÒ–þ›ŸD/W®ýu^´â,OŽhJv140­ôðrÍ%¼æ’žOXïÊWªmnÖùhäzÓýBGþÔ#ÁÁÁlÙ²…|ÔÔT¾øâ ÆŒCPP_~ù%×ÞíY¸p!:uÒëüƒnå—ë“…nݺé× ÇÜÜ\ïêuÙÄã_|QoÌîSO=…™™›7oàÈ‘#ÄÅÅ1~üx½[â<òH•/S÷ý÷ßãêêÊO<¡÷úž~úi´Z-šÒ%eî¿ÿþÛêüƒnN€““þãGÅÿýßÿqý•Õ²¢=wëÕW_Õ«úÊ+¯P\\\^)µì|111hµÚòv&&&åËxîÞ½›ÔÔT&Nœ¨7 â™gž¹á #5 ))éžâ¯¥FúuooHQãûß¾ôuÛÝê‡s:2&ñ¦mÊökŽg¡Ñ¤èí[¿ühi›½+“pûŸ¯k<Ìûoï!ãÒzfPÈŧx÷±•üðGß½ÁÒM‰ŒšÏ’ ±ØÂ¢Ñ<à4Ÿ¸óql?ž„&. o·"Âz:ñÏ‘£ìØu–»ÎòÓïçøzq òîïzEEExØ®îr'…ƒÊŠeggcgwõBRÙë»ÛÂY7z]7ZfÔÌÌLoÈVÙÄãÅ‹³aÃV¬XA«V­X¹r%ŽŽŽ7ÏÜܼÒ ¬ãïèèxǯ§X kfÓxÜÐAƒ2¶÷¿ ºEr,ÐÍxäf-ݼ1Uz»•0pûÂèRÞæÀ¶~(f¦|𬠻HÓ¤¨ÅÌ‚ú ªOðÍ\ÌÍuêŒ0wÂfè*3‡õ¹»ca¡ß97whXi;3S]»²s— þ03/û»¢`VzsÙÄüš1CwÑùxcZV–fäñX´Á¶˜[˜ñrkxy„ï]=§¨z’æÍ›Ó¸qcÒÓÓÝP—ò«òU! €Ã‡3nÜ8½a*×+sîÜ9½aE@…xÊ:ÖçÏŸ×Ûž””DllìM×733ÃßßUUo»ÑðõÕ}ˆ¥¤¤èÍ[(»‹pæÌÚ·oÃã4h@NNéééåCl@·:OerrrÈÌÌÔë„§§§sùòeüüüôÚ¶iÓ†>úˆY³f±víZ^zé%V¬XÁóÏ?_ÞöܹszC®TU%66V/–2eÃÊ^s=3ÝX&A^OQ?$0vFóþ¯l0·H¶®!ÃÔž¿ÿ¾H#‹bÚ{P|%‡æ!ŽXÛZÓØÑF×Ñ¿þ\•lƒk;àV+3[Yšéýkn!]ÍÚHæÔ#;vìàÊ•+¶oܸ‘´´4½ê’<ðÛ¶m»«ª»•y衇HKKã§Ÿ~ªtÙ•åvíÚáääÄ‚ ôæ$üõ×_åÃgÊ888àèèÈÎ;õ¶¯]»–ÛY½ê¡‡âСC•–]/))¡   ’£nOÙ²¤‘‘ú‹H„„„àííͼyó*½š^¦I“&¨ªÊîݻ˷iµZ~ÿý÷óý÷ßë=þá‡èÝ»7@…󙚚ê­”/GXvl™7’ššZéy£¢¢]eX!„0÷õkÆCaö<ÒÁ™°`7Z‡ºZ<¼1³¶4X\s—œ`õÒH–Î9D\B2g.æ2cþ)¢·D£Ñ$3wF$Éé|·âËןcõ'‡¸x)—U›.p:‘Ä él™µŽ³‘‰Ì˜q(â«u±,]užé~ãÜéx SÎq13‹S)û¢~´¬™;w.QQQ 0ÌÍÍÙ»w/ûöíÂiÓ¦•·}ã7Ðh4 6Œçž{Ž   ²²²Øºu+&L¨PôçV† Æï¿ÿδiÓ8|øpùºÜqqq¬[·ŽÉ“'óÈ#`cc믾ÊôéÓyúé§yøá‡¹páß~û-deeé=ï“O>É_|ÁC=ÄÀÙ¼y3‰‰‰¸¸¸Ü2¦‰'²qãFžzê)žzê)BBBÐjµœ9s†_ý•¯¿þšŽ;ÞÑë,ãííMPP»wïÖ[¢ÔÊÊŠ?þ˜1cÆÐ¯_?F‹‹ ñññlݺµ|Âî<ÀÌ™3yíµ×ˆˆˆÀÚÚšeË–áïï_éd[{{{Ö®]Kff&;w&""‚ï¾ûŽ”¿†åË—³téR|ðAüüüHKKcýúõ—×prr⥗^böìÙŒ?žpöìY.\HÓ¦•¯±k×.BBB*¬M.„õ™£…9`Në°«óå{Ö u´2PP@·ž¾\ØMbf ~ ‰»lŠUCKÜ}µ5wC£¹€“«ÍQØÀŒ´ýñØÛZÒ¯—'Öy)[9rÑÞƒîÁ »`‹Cš°eK<®ƒP.©[ZÙŸxã Y7òûg[éÙÇ‚Kv¬ûé<ƒžòÀ¼¼¼ô¶}÷Ýw,[¶Œ_~ù…M›6QRR‚——½{÷Ö+ä5vìXlmmùþûïyýõ× ./põ÷ßë=çk¯½†V«å·ß~ãË/¿äþûïgîܹ|ðÁ8;;—·³´´$44To8޹¹9ëׯç›o¾á?þà—_~ÁÌÌ FEóæÍËÛ†††ê- z;ÆŒÃ;ï¼ÃåË—õVÐ gË–-|øá‡ÌŸ?ŸŒŒ ¼¼¼xàô~þ+V¬àí·ßfùòåøùù1iÒ$ÚµkǬY³°·×_¿ØÚÚš+VðÖ[o1}útlmmyñÅõ’º:Á’%KHNNÆÚÚšÀÀ@–,Y¢·ºÑ«¯¾Š££#‹-bûöí´k׎~ø?þø£|˜X™ôôt4 }ôÑýl„¨N»wïfùòå|þùç•ÎÉÎ뾀䀮ÆâììLóæÍ+|^]+33“S§N‡££#ÞÞÞ´hÑ¢Bâ .™™I«V­Ê‡:Ξ=ÆŒSµ/RˆhëeEÛÇÛ•?ös„7F^;£lnAXéßîöÝÝĸb<:±¬ÍÕÎrŸ>k‚´ó±½ãøÚ÷ ¢q®ÐS‹§‹ »Ï_!,¸!%îvä¤úðT¸W2 Ém`†i <­‹ÈhæÄÁï’ÈŸ‹Z•ûZ:¡9”Opƒ44y h`†‹Ýà ð-LáÁ~ÍH8[Œ§§#ª]VüpR€Û$…À¤ޏKyyytéÒ…çž{®Z«äNš4‰;v”Å©IŸ~ú)K—.eÏž=XZî–wu0¶BH׫«ŸEEE„‡‡3pà@Þ|óM½}YYY¼ýöÛüüóÏ€nµ¯²¿q½{÷æ­·ÞÒ›üŸ––Æ´iÓX¿~}…öMš4aüøñzûI“&ñË/¿_>‘~ãÆŒ?ž½{÷Vi“êflïÿ»)–™H¶©Jžc#ÚzY‘S_"¬mCŽ'rú¢ aan¥­K(Â3àtr.6ž¦Ç°V|÷ß(|ᙉ÷¡Ñ$æAâñD!!îÝ»³yóf¦OŸÎÎ;9þ<‘‘‘,]º”€€þóŸÿÜ2žþýûãééÉçŸ^å¯UVô¥Þþ Ž?×$Rs˜ôb¸”‹&òšÿ"|È~VÍÙÆ«ÏlJ8©eùŒCøÙ^!#VKF¡ÊŽ©4o¦ûü ënKƹ$ÜZ:ßô¼·¢Ñ¤èÕ'ÈJÉ,ÿ>79•´üÊ/ìž¿Xè¯ë¿dùÕz>Ñ·¨y ê$Ä=9rd¥uê{{{Nœ8aè0„Ðóã?Ò»wï Eø>øàùé§Ÿèß¿ùvooo¼½½éׯŸ^ñ²á{ëÖ­£C‡åÛÝÜÜpss£W¯^ìÚµë¶b9r$sæÌ᭷޺炢öèÖ„Þa× u-½rÿãFÿ¨ûvxé®@G,~3qFéšüÛ\=ÖÔ'ßÊ .Þ Íél’—œ!,̃¾oýÍÇ­³qÚ™ï¿>A·îDLþ™qÓÚàèÝÿl(aëË[Ù•6š~NaÃK.Ìø3›„yùnÝhEgqæÕ<˜õ7A=F‘—SÓ»¿›•x<‘Ç¯ÐØËœh9´%‹g诊Wü²8K­ v'-_eëÞx÷ô¹ecqï$¢–7n\ù$^!ŒYll,‘‘‘|öÙgzÛ“’’X¼x1]»vÕëü_Ë‚V­ZÍüÁ!Cô:ÿ×ëÞ½ûmÅÕ¿fÍšÅÆ+TW¢ªÍx®<× €Íﵺº}²nž_ŸŸ½ºm4Ìý4^Ò͘1Àйé†Â}:óÚŽ¹îû{éüü2÷—ÜühÒÓ—“d~x;‘¢lÌ4Ä©Ýoü6Ö•Ž;³bI “_ IJÀŠKÎÇ G IDAT`çXB3_ÖoM¦M놴ö0àLk# €µ\UW¢®Ú³g@…ÑÑÑ””””/‰{+eǯ¯r~·š7oNƒ Ø»w¯$¢N˜8ãÆujîÕ¿¾rÍ#¾Þ~u‚rƑ˿_³ahù÷×,È×ájN#ª‘ÌBQ'ÄÄÄT(~WVDðFKÙ^ïFíóóóÙ»w¯Þ×åË—où|&&&øøø”Ç'ꇊØ?w+¹)©¨%ùlÓœ'W-aù\] 3"Q‹µ$d׫ù¡ÂÈ!„uBzz:–––XXXèm/.Öu¾LMooàpI‰n"äõUË6l˜Þ¶•+WÒ­[·[>§½½=‰‰2‰²>9CNS/ÎÏ¡I׆XYA0/bâ®PâjCæ¥+€)Š©)Ps+*nûý&.¶h~?ÃŒí‰N*àç_b™19m¿_`gôežïÓ{…,{W<¬Ó9žÒNfÐZ–È¥ä€Bˆ:ÁÌ̬¼ó~­fÍtã¡Ïž={[ÏSvå?..No»DDD0}úô;Š­¤¤¤Òš¢îêÔÞƒêÝ++]Òi† ­ýðøˆÚ2cFÀ¯œµÚ¶»3š#i´ ´C£IĤXK`€nrñ%W+Úx)X;sô@Nv&€%ñ+£ðïY3ÿÙ.侸]Brt"?-?Å›“åBB:I…5‚¸ òi%„¢Nhܸ1Z­–+W®`k{µ@Q‹-]°^xá–Ïèæ\»Š—™™euï(¶K—.é'¢º8Ù[2ãùæzÛ¼ìÖ¡th@ßÒ¦ö œÔ¹Æâ{â­>x´t"óR>Q)0æÑæäôh€G#d¤Tí!w„BÔ ÁÁÁœr“)ª®ޏmŠªÖÜÌõÚFQ¿ˆˆˆØ²1ŸBãOÇŽ›¨ªgèX ¡®~þmݺ•Ñ£G³wï^š4iRi›³gÏC\\®®®–»Qû'NK£Fðõõ%88½v§OŸ&55•ÐÐÐò„´Z-;vä‰'ž`Ê”)U÷B«™±½ÿݘ`ØΪªF6ªªqþtYŦ´pºuãðùøMüegÙ—õBKRvždö78‘Èú#iÙgþhí¾[6cÆŒïgΜ9Èr€BUUëÕ ™,„¢ÎèÝ»7¡¡¡Ì™3‡Ï?ÿ¼Ò6M›6½íšwÒ¾Y³få+•Y¶lEEE¼øâ‹·}>!ª’O³Û¿:_þõu?ý Oè~·|:z0¡£,CZ[È !„uÊG}„ŸŸEE†H`jjʼyó°³³3t(ÂHh¢³€(-NV¾]“Bö ~%²ŠÊÚ$PçܺÀ¨ßä€Bˆ:¥yóæüë_ÿ2t<ñĆAÍK„YóÉ¿÷ñì ­yñÓh^{¡ Q®`ùO"‘‡S1;›B£!-9±ãűÝçɨ^„…¹±EKhãdþJó&!*»Ö 1OɶS z7³¹u·°~ùQì\ìÀÄ /?;¸”CÂ%ÊW*³tq ,}T¢_byr¤?šãY„µ¶/oWD f˜plÛ1ÚôjSñçq]{&öݼP°—U‡nH!„Bˆ:bRok4š4:„ûâäÕ˜1Ý.âébMÏžÖø»Y‘y*“^Óº²ø£S„†¹’ëcK÷aMI9’˜Ð'¬ )¦ôlåÁnL€ðp¡­·u•Ä祽LÛ>$ä6ÀË&Ÿ"?ÜS˜³ä,_¯‰ç«‰Í9šœÃ‘_O°o"ÿ~§ ÎÕÝ‚£+ðÃA-Qn–x;ÑÈÔŠÐ0æÿ÷™Z6n;Äžs´ïh…ª9Ióþü‘`ƒæOx~”/›ÿÊaÌݼ¦–Ÿ¢W7ü<TÉëªo$B!„¨#œ¼æuõñ aAx”Ö®4\7áý¹íôŽkpÍø{KW âUùªàÖÎL¬8}8…¢À†äÅ'’rB<­æJX˜ÖÇSp1 À­±- ë —ýQÂÐ<¤ÖÚ&°0Š(¡G{OœaÏùb:ô± ˜b¼Z™PÒ¼)1¿%ÖÒïÆøžÑR6º½Ic[âNfKp’!„Bˆ*±`Ö&žûßHvÄdãêT@½=éQq´ìÕßKÅ,ùå$ž.v<:"Pï¸êJ‡µÖ=+ÍrÌ0¡ui¢2¼õµGè¶Í˜xuøÏµ Mxo™p|3’!„BÔM"ŠÍ°ØOèóþ\Ì7áå±{ؾ½?šèLŠŠMÉúó î¡vX'^áRcÒÍ-Éúã$C¦´cÇÊhzòá@²BfT2§ÒUf¼VqlýÝòëÒ†’|-ÃöÃ"1 àFœ8šNPÓ†¤™ZãmUŒ­‰ñ.A_[H „BQG¸9Câ¶ìHdÈô¶˜^¸È+ÓZS”“C7vÔÒ4Ȇ¶]H>žH gsNæZp¥•%ùZ,›¸Sdb†‡‹5]ŸlÅÉ)UߣuÅó\Üü5¢=|«fž¸w’!„BÔ®¸Z¶}î~® ñ»º¿Wo]m·Öºa0mš†ð€›ƒn_iûŽ­ÜÆGê!Œ™×­›!„¸]»WG¢9‘}Í–*+O Ñ¤’˜˜]ÉQ䀘-W¥›ªªq†D!nGYÇùñÇuÃk"òq.¼DaCg|-®`jçÀÙ„\šzéÖôONÌ æd>¸Úd³§®v…Å \Í´7›ÑÀ<—‡&·gÏ•e¯aÖÎGXÿ·–”= (MœÐ¼H;×+Dn»Ì££yuE.ܬ˜1ã¾jÓØ}˜˜hè„Pú»ï hE 3Æ$@>ÿŒ—üß×]šsy›CÇÆß±áP?b’ìy´³3sKfL“Xþ*bÙ'»ùôˊʧw˜ 'ñ¯ÅöDÙeÓ¬ €€§ÛòÑ7øöƒ¶U_ÛGÛsáÑö•`ffBQQ ƒ[‚ïwƒðhÜ€ }M¡oc½czR÷ïúÞUޏEUw&¶¢(fÔü€ÆÀ›ì j(côðÌ öý¼[ƒ±»‡L`G Ÿ× XŽ®ó_æ`TI€>ÿDí’ ªje£3êEQt=­{ÀYUÕHÃF%j«3f|?sæÌÙ@ªªZlà°ª”Qß(ýà‹«És*Š’‹&çTU½Uq—EɺÉî,cê’¢(¶Àà°¤†;!qŠ¢t4€oé6_ŒìN€!>ÿ„BÔ2 Xao «âÒ_Ó'/í䇡»ò_¦, ð«éx„Bˆš$ €¢F)Šâ‹îê¿Zúõ®¢(N5‡$B!Œ•$Bˆš6°”Ò/G 4÷B’!„ÆH!DQ¥0âºÍ*0^Q”ÖI’!„FG!DPŘSÙ.Àø¼f#ºJ’!„ÆD!DMKiEúè­(ÊК æz’!„0’!ª¢(öÀûè†û܈ üWQËš‰ª’$ Ba$BÔ„wÐÁSnÒFš¯ÔHD7 I€BˆúN!DµR¥90™›_ý/£ÓEq¯Þ¨n„$B!ê1I„ÕíStUÇovõ¿ŒØVkD·A’!„õ•$Bˆj£(J?à»8ôIEQ:Wu‡……) ±ñXÀïÛ¶ X4ÄÍ¿ ‹ÏÖÁ™ô“'9œê‰¯—5—Omç’U8…Sˆùu+ÉWlˆ¿’ÎûÓ'óû¶]ìÿë›—ÐÄJáïKd¸ÓñÁ>u20бd:µ…¢(n@ÒMšX«ªš_SñEQ>G·"Me横ú¯šŒÇØÜ"ø¨6'eJÇþk¸š€nŽ€$BÔRŠ¢(è.zZö@#UU£rrr¸råŠaƒµJII ß|óÍ÷3gΜ d »3]¨ªj±C«R’š !Ä;BÔiê5_ØÙÙaggg؈D­‘››Knn.èÞ%ÜÞòÕu’$Bq‡$ ¢N*ëøZEQº€ `Áí-U,ê¯b ÝÿK¥Ë’€z—H „wA’!Ꜳ«ºE@º…LJ›# €±+ ѽ/òK¿/¦vþA!„¸k’Q7¨ªª*ŠR–h¹z¥·ÈL‘ÀØ•½7Ê’ÃtïCU]$Bˆ{ I€uFùðt¼t3tw$0n×¾? ÑOêÝ]I„âI DQ6¨¬³gŠtþÅU%\}—~©†.HY$Bˆ* I€µ[é0 ¸:¹³]Ç_:ÿâZe“~ëí`@!ªŒ$BÔn×$e<@è+ïð×Ç+ÿe$Bˆ*$I€µ[%ºzÛÉâFL €BÔ7¥ü0t‚Ë”%~5‘Bq•$BQ $ BQ[I „ÕD’!„µ‘$BQ$ BQÛH „ÕL’!„µ‰$BQ$ BQ[H „5D’!„µ$BQƒ$ Bah’!D “$@!„!I „ I€BC‘@! D’!„† €B$B!jš$Ba`’!„¨I’!D- I€Bˆš" €BÔ’!„¨ ’!D-"I€Bˆê& €BÔ2’!„¨N’!D-$I€Bˆê" @5RÅRQ”hEQòE)P¥ý?敹\Ö¶ô¸ƒŠ¢˜ÖD¼õ¢(O\û³/ýùO¼É!¯m[zì5¯ד$@!Du ©ªZ¼ X×|Ý̵í,)ªªWgœõØRàú?Ó›%S¦×µ=RúBŒ$B!ªš$ÕLUÕ5ÀÖ»<|µªªÛ«2c¢ªª LÔ»9˜\úB”$B!ª’$5ã_@1·ßUBàµj‹ÈH¨ªzXt‡.*=VˆZA’!„UE€ ªêqàk@¹ÍC࿪ªÆV_TFeËí%`jiÛiÕ‘wA’!„UA€šóÉ­;¡* ̪öˆŒ„ªª‰ÀûÜ^¦ï—#D­#I€Bˆ{% @ QU5]p«N¨¼¡ªjNõGeT>E×aºY¦–¶ù´F"â.I „â^HP³¾þ¾E›`a ÄbTTUÍ^åæ ˜¼VÚVˆZM’!„wK€Tºœçä›5AVž©6ªª®vܤÉUUWÖT¼mÙ²eKëÃÄb___—!C†¼Ü²e˰Î;ßçååU³™ÖÊÍÍe×®]§Ïž=»{ÇŽ?nß¾}§¡cºŠ¢˜Ž5ꉎ;öõóóëѹsgŸª¾º_U Ù·oß™ØØØýõׯµk×®ªÚWI „¢Œ$7Ú¼ÿþ¯vèÐahûöí]LLêÆ¢IÅÅÅ8p !""bÕ¦M›>‰ˆˆ¨sõBBB<ûõë÷z·n݆Ýÿýž†Žçn\¸p!oóæÍ›vïÞý¿uëÖm2tûìë={öݧOŸ–¦¦¦†éžhµZ6oÞ|d÷îÝ ¾ÿþû/ Ompmð믿âááaÐx„a$&&òÐC5‘»?5GQË   6ŽŽŽ®†ŽEÜZaaaþÁƒ¨ªšmèXªƒ$×PEyæ™g¦=ýôÓ¯42tlee¥:žê““Süí·ß®X°`ÁÄääätCÇs­çž{î™áÇpß}÷Õë+#EóçÏ_öù矩MãÓG=läÈ‘vîܹ¹¡c©N»víú{åÊ•¯,_¾¼N ɪŠ¢t‹ˆˆØ% €q’ z(Šb1f̘ñ:tÖ¥qãÆõëjŠ»xñbþܹs?ùꫯÞ6t,U¡vÍd5¦M›:O:õסC‡¶7t,ÕÉÎÎÎôå—_~ÔÃÃÃÛÕÕµ_JJJ­XBtèСÝ'MšôqË–-ï~ÍÔ:ÂÉÉÉìå—_~²   xÝÐñ 2$lÊ”)_46t,Õ­{÷î­8pà6lˆ4t<&cþ…¨"Š¢˜Nš4éÝ¥K—ŽêÑ£‡m[(DÜ;ggg«©S§¾ùÒK/™Ì›7oº¡ã¹WõoœÅRE3fÌüúÞù¿Ö¨Q£º>ÿüó_:€   —¡C‡Î3†ÎKKKÆ7qôèÑ£ K»ví\Ÿxâ‰/Œ¡ó_¦uëÖž£FúÆßß¿¡cBÔ}ýû÷úôÓO7O™2åÍ^½zI翳±±1iÓ¦MGCÇQŒ>˜8qâÔgŸ}v¨¡ã¨iÏ<óÌè^xáECÇѧOŸ‰ýû÷ocè8jš‡‡‡M¯^½Æ:އ~øßáááF÷ó8p`§#FÔ‹Û¸BÃ7nÜ‹¯¼òÊ–Ç<¼¾Í•kРACÇPŒ>hݺuïš.âUØÚÚš´iÓ¦¯¡ãhÖ¬Y+CÇ`(ÁŠ¢t6˜ÑÜùº^Ó¦Möµ !îÝË/¿<Ê”)_¶mÛV–Ò2"vvvöŠ¢Ø:Ž{eÔ €¢(vÞÞÞ!†ŽÃP\]]Û*ŠbÐ{• 6lmÈóR›6mœzöìù€¡Îïêêê`tWÿËøøø„(Š"À„wìùçŸÿÏÿýßÿupp¨Ûk%‹;³[UÕ+†Žã^u`ooï× A'CÇa(ÖÖÖ!cÈÈȨ“E¾ªB\\œª(J ¡ÎŸššjžžn´÷¬333Fûû/„¸;O=õÔ3&LxÅÖÖÖ¨ûPÆ(??Ÿ}ûö­7tUÁ¨ß¼YYY9 F;['++Ë 0èÕ‹¼¼¼CžßRSSggçK ¡0;;ÛhßÿÅÅÅ@½\òWQ=†>vìØÝÝÝm ‹¨y[·n=ù믿֋ZFäæÖŠ•0 âÊÃßÁ233Ë>v옡èq¹¹¹>÷ÉÍÍ¥°°ÐÐaÔ¸+W® Õj †¢Qźÿþ³ëE•zqg Ù¿ÿªª:–ª`ô €ŸŸû÷ï7t5n÷îÝ: œœœòsssIMM5t(5jÛ¶m„‡‡: ‚ƒƒÙºu«¡Ã¨q»wï¦M£þ „¸ ãÆ›ùÐCÉâFjõêÕ;çÏŸ?ÛÐqT£OpppàÌ™3†¥Æœ8qooolljÇÌÎ;sìØ1222 JµSU•?ÿü“ž={:LLL eûö톥Ælݺ•=z: !DÒµk×ö=öØÓ&&ÆÝm:|ø0 WkfggsèÐ!._¾lÀ¨ªßÙ³g³·oßþ¶ªª%†Ž¥ªíøßkräÈŽ9B»ví NXÛ% IDATµ:pà666oèpÊõîÝ›C‡‘˜˜HëÖõsa ‹/I¯^½¨MKÏ6lØ6mÚ°aÃÂÃñ²²2tHÕ"''‡;wÒµkW¬­­ Ž¢4hл-[¶¬±‚‰ï¿ÿ>§Nºáþ¹sçbgWó«H<˜±cÇòÞ{ïɈ#X´h}û|eñj³zõê%k×®Ýiè8ª’q§²×h×®îîîlÚ´©^Ž ÎÏÏçÏ?ÿÄßß¿Öv°Û·oO£Fؼys½ºšPRRž={8þ<}úô©Uÿ2ÎÎÎ 0€}ûöqúôiC‡S墣£9räƒ ÂÁÁÁÐá!ê‘#GNxì±ÇÔä9÷ïßÏöíÛ)((¨ôËPÂÃÃiÞ¼¹ÁÎo[¶l‰Y¹rå놎£ªÉ€k¸¹¹áââÂÎ;177çþûïÇÔ´n/ñ«ÕjÙ¿?Š¢Ð¿¥v/zâî»;û÷ïçòåËåIA]T\\Ìž={((( K—.ØÚÖîº!Š¢N\\[¶lÁËË‹À@ƒ­RZ%Ž?Njj*:!DãëëëòñÇO6Ä’ŸNNN,[¶¬¦O{SK—.5t5êÒ¥KÅþùçDZ±±Y†Ž¥ªIpÂÂÂ(,,dïÞ½˜˜˜Ð©S'êZ‰ï‚‚"""055åþûïÇ̬nýWwîÜ€#GŽ…³³3mÚ´©õ @bb"'Ož¤¤¤„®]»biiièŸ~~~$$$°eËi×®ueìkqq1‡";;›Ö­[×Ú;^BˆÚï‘G™ÖÂÐqÜHff&|ðÇ`ÅŠÄÅÅÑ£GÆŒƒƒƒQQQ¬\¹’cÇŽÈë¯¿Ž££cùsddd°víZöîÝKRRNNN„„„0~üø ÃŒ^ýuºvíʃ>X£¯ÓPV®\ùû¢E‹~4tÕ¡nõ k……Ý»w§¸¸˜ýû÷£Õj±µµ¥]»vµö®€V«åÈ‘#äååaeeE×®]ëD‡ùfÊæd\¾|™]»v¡ª* 6$88¸V½¶øøxNŸ>¢(xyyfèî™——^^^dee±gÏEÁÎÎŽàààZ— Inn.&&&´mÛ¶ÖßqBÔn èÿþûï2t7“““ÃÂ… ¹té›7o¦sçÎ2kÖ,¢¢¢˜8q"ǧmÛ¶˜˜˜°`Á:ĦM›Êÿ†nÙ²…/¾ø‚îݻӹsg"##™3gË—/G£Ñè% .ÄÜÜÜ(€£G¦nÛ¶íéÓ§:”j! À-˜ššÒ¥K@7ŽþàÁƒ¨ªJQQ>>>øøø4¾ØØX.\¸€™™Yyǧ6Ž1¿Wå+·\¾|™={ö ª*Š¢`nnNË–-iРAÄRTTDLL —.éjx©ªŠ‡‡G­XÖ³:ØÛÛÓ½{w@W7ààÁƒåcP ªñ;düóÏ?dgg`mmMppp»Û"„¨E1Ÿ3gÎÛ^^^5?Ó¶ÔåË—™:uj…ínnn¼òÊ+zÛ6lØÀöíÛiÖ¬³fÍâ‹/¾`ÇŽ¬_¿ž–-[ðßÿþ—Ù³g³oß¾ò¾Mÿþý>|¸ÞÅ̓òÀ0þü ç2EEE¬Y³æÛ­[·F:–ê" À°²²*špîÜ9víÚUþØÜÜ<<<ª|ÈV«åÂ… $%%QT¤«A¡( Mš4¡[·nUz®ÚÎÁÁAï5kµZ¢££Ë;ƒeEÁÆÆOOOn;1*..&''‡””ÒÓÓQUUUË÷›™™`”CKlllèÔ©Sù㬬,>Laa!Š¢”_Q²··ÇÇÇçž'Üfff’@V–nøeÙÿ…¥¥%-[¶4È*BˆúïÙgŸ}søðá] ƒV«åСC¶7iҤ¶îÝ»—wþÂÂÂøâ‹/ )ïü—mŸ={6'Ož,O®ýœÎÈÈ 33“† âëëKTTTU¾¤:ã·ß~;ðÕW_ÍøßÿþgèPª$÷À××__ßòÇEEE$%%qèСòN:p×CU®ítš››ãééI§Njí$C177'88¸Ò}¹¹¹$&&rþüùÛ^9ÁÔÔ[[[ÜÝÝiÑ¢Öý¬ìííõ’â2—/_&>>ž¿ÿþûžž¿aÆøùùÕØÝ!„èÔ©SÀ»ï¾û¼¡çÎ9;;ßv¡Æë‡úûûWº½,I¸xñbù¶ììl>øàV¬XQáBš½½ýF]÷%&&æmÞ¼yf}©ø{#’T!333¼½½ñöö6t(¢”ÞUQ3Ê ì !D]3hР÷Ûµkçaè8îÄõõ[Ê.<ÞN]—©S§²víZÞ~ûm‚ƒƒñ÷÷ÇÖÖ–§žzªüî«1Y±bÅŠÕ«Wÿaè8ª[íšÉ'„Ba <òÈèG}´þÏp-¥ª*7n¤ÿþL˜0nݺáî½½^Å_c±k×®Ø 6TœxQI „B£çääÔ`È!SëÖºß÷@UUJJJô†-¬[·Îè€ÜÜ\uýúõŸ9r$ÅбÔT‹hµZŽ=Š··7...†G"""8vì111XXXàççÇÀñôô¬ösŸ}ŠîÝ»çÙMZ–¤¦¦âéÓ§hРA+& .Ä… °mÛ6œ?W®\Á²eËpìØ1äÕ¢²téRüüóÏ App0ú÷ï___\½šÝûêææ†]»vÉÿ?((ÇÏ÷ñýõWܹsû÷ïlj'páÂL˜0[·n-Äo€”¥bÅŠ?~<Ž=Šëׯ´|rr2ÜÝÝѬY3ÔªU mÚ´ÁÒ¥KV/qvvFHHBCCakk [[[888È~_ÛÚÚÂÓÓ°iÓ&tëÖ àéé)/Ÿ™™‰‹/ÂÖÖVþ7™#&&cÇŽE£F`jj [[[lÙ²EaÓÆ˜˜ØÚÚÂÏÏëׯG»ví`jjŠcDz—÷òòB›6m`jjŠš5k¢~ýú2*¡ž={þÚªU+3©ã iøøøܳgÏ©ã›Å”`éÒ¥ˆŒŒÄÁƒѺukÀÔ©Sѽ{w¸»»ãĉPSûÿ\ìĉ@½zõ...èÔ©~ÿýwlܸQ’çPÚݸqŽŽŽ011Á¢E‹ ­­ /// 2«W¯Æ€d·ú0aaapssCÆ qéÒ% 0OŸ>ÍwÇá²âÁƒE±ÀC°gÏôêÕ ]»v•:t(Ž9‚M›6ÁÝÝ]áï»cÇŽòqüÚÚÚ>|8öîÝ‹àààOžè›’’‚½{÷bèС Cކ oooÒýH¹ÆOOO,Z´ûöíË·\FFzöì)Ÿbee…óçÏcÙ²e ÅöíÛãÆÃÂ… !Š¢|þ@NË{VV"##hÛ¶-tuuáææ†¶mÛ¢G²WEINNFdd$RRRä1‚‚‚Šþ—[0=Ax)ÕƒK­Q£FÍ·mÛ6Hê8HW®\yèîáá!u(’` û÷òÆÆÆpuuÅ‚ ®°¤a=ä•°°°€³³3vïÞ]¨®o,Xuuuøúú¢J•*²ÏݺuâE‹àäämmmøûûãßÿUH :tè]]ÝOÊ*Ír†ö¼¿|~îß¿¬¬,|õÕW¹ÎµnݧOŸFLLŒÂ²¡9-²9š5k555ÄÄÄ|r¼÷ïßGFFš5k–ë\óæÍ™”púúú˜v½zõ`dd777Ô¯_ÿ£åçÏŸ””üïÿ“¯¸âììŒI“&aÆ pqq‘‘‘¼|\\‚‚‚ ««+?æååCCC¬X±Bþ9ngg‡Ñ£Gü—U|˜tâĉy¢(fI‹”8¨˜AGG÷îÝËu.§‚òþxë¼¾Ìr&çU‰¥Ëi…ËkYÁœ/Þœ2*T·*¿+55Ue¾¤úé'888`îܹشiÞ_#==~~~èß¿?ÌÌÌP±bETöƒJiذacGŒÑVê8>ÇâÅ‹+_b9çï½nݺðòòBíÚµÊÏ™3›7o†ššlll ££___,^¼‹/ƈÙ geea̘1ð÷÷‡¦¦&7nŒŒŒ øøø 99>>>hß¾ÔæM€ÀÀÀ;>>>3–-[&u(’cÿWËk ëÌ™3¡££ƒ^½zaݺuؾ};z÷üôÓO¹†–Ô®]={öÄöíÛ±sçNôîÝoÞ¼ÁÌ™3•õ4Êœ!C†àÌ™38}úÿ“þû÷ïcóæÍhÕª•üsðàÁÐÓÓƒ»»»¼…%..‹-R©îâY³fa÷îÝ3fÌ@Ïž=ѯ_?,\¸õêÕSXÞÓÅÅ?ÿü3Ž9‚öíÛ£sç뿍١zõêN¬, ]»vÅöíÛ‘’’wwwìÙ³“&MBûöí¡­­Í¤¹”ppp@ãÆ±nݺ\ç† ™L†_~ùEþ›žžhii)Ì 022Â;wðömÑ.ëíêêŠÀÀ@:t(×¹ààà\C9ó’W¹¬¬ìQ9Ÿ7T|,--+öêÕËM__¿Ô˜·hшˆˆÀ•+WðÃ?àîÝ»˜6mšB¹S§NaóæÍèØ±#ÂÃÈÇ#<<>>> +ÛmÛ¶ þþþ2d"""päÈøûûãöíÛØºuk±çT†„„„Ì£G.}üøq¼Ô±”ì(b9ã@ßÝ(©víÚ8}ú4.\ˆ-[¶È7;pà€ÂÊ@ÚÚÚhÓ¦ \\\ðúõkx{{#22666Ø·oŸ­C¥J^+ÁÙÝ™S§NÅÅ‹1|øptìØzzz8uêÊ•+§°ºO¥J•°jÕ*|ÿý÷hРjÕª…‡â§Ÿ~Âýû÷Ub@Ž: C‡HKKÃÝ»w¡«« SSÓ\]À‚ ÀÅÅcÆŒAdd$ÔÕÕann.ßÙ7Gûöíóøøþ‚ÚµkçYvÀ€òÕ™ÞÕ¥KtéÒEáØàÁƒabb’+*™AÀ¬Y³òbÓ²eKŒ76l@pp0lllpåÊDEEÁÃÃC¡bÒ¯_?øúúÂÚÚVVV¨X±"vïÞýÙñMž<7oÞ„««+¶lÙ‚ºuë"11·oßFDDîܹ£°;u^/^Œ7n U«VòDåÊ•+hÕªÚ¶-ÕÒ¥‚³³ó/vvv–RÇQÔjÖ¬)ß?åêÕ« Ï]ºt 0eÊ…¿O55µ\­ù—.]‚ øñÇ&°kjjÂÞÞ^ Ϥxùøøü½k×®ÍRÇQR0(bÁÁÁAa98 {"ä† >xm… pðàAùÏÆ +–Ë{{{ÔªU+ßó:::(W®Ž;†;vàÚµkxûö-¾ÿþ{Œ1åË—W(ïèèˆF!((hÕªªU«†Ù³g«änÌÚÚÚö ¦¦†ºuë*!"E ˆ‰‰‘¯ªûöíÃéÓ§åk³SÉ2vìX…F’vvvX°`ѲeK…sèÔ©ðèÑ#tëÖ ½zõB“&MÊuêÔI>†966V>~_GGnnn KÖæìðî@öÒËnnnò!›@v%ÈËË 'NœÀ¹sçpïÞ=èëëÃÑÑ]»v•W® àææ–+.˜;w.Nœ8ððpDFFÂØØ¿üò  Àå‹™““Sǹsç–Ù/U555!662™LžäŒïŒŒüh#¢¶¶6DQÄýû÷ËÜò¨¡¡¡/ÜçÌ™#u(%€"râÄ øúú"$$ݺuã„Jdoo_ Ö MMMŒ5 £FúhÙZµj)$9 •õÀJ£gÏž¡C‡055EµjÕƒ¨¨(tëÖ ®®®R‡GyÈY¾3/zÍìììòÝ+à]uëÖÍ•ŒjiiÁÍÍMáXN𾜠/yõ6½ËÐÐ0ßkëÕ«—kÎ?AÔÿøãš5kêIKq¹~ý:‚ƒƒÑ¶m[ùÜ {hÝŠ+àîîŽÓ§OÃÉÉ Í›7ϳ‚ß»woìÙ³#GŽ„££#zöì‰&Mš R¥JÊ|*E.33ûöíÛ|öìÙ0©c)I˜Q1lØ0¨©©ÁÎοþú«Ô!ÑgX²d A@ãÆ¡®®ŽË—/cýúõhß¾=»éK :uêÀÏÏ×®]C\\ªV­ŠF) ¯#"Õ5nܸNNNí¤Ž£(ݽ{ãÆ„‡‡#""Mš4ÉUÿ°²²Â®]»0sæL>|‡½·Ð·ß~«0¦cÇŽøóÏ?±`ÁìÞ½»wšš5k777tèÐAiϯ(ùúú^Ù¸qãüÂP5LŠ€ ¸páLLLTjŒxYellŒuëÖaÅŠEµjÕÂ7ß|ƒéÓ§KåA]]­Zµâ"Ê¥uëÖß–µ!V2™ /^¼@FF†|…Õër´mÛçÎÃýû÷qåÊ?~ÇÇwß}‡çÏŸãÛo¿•—íÝ»7z÷î°°0\»v ‡Âùóç1xð`lÚ´ ŽŽŽJ{ŽE!&&&5 `¡(Šª±Ž÷'`PD,,,¤ŠÈðáÃ1|øp©Ã "¢ÏÔ³gÏ_›4iRCê8ŠZýúõåse2æÍ›‡E‹¡råÊ<<<ÿñU.-,,Ю];¤¤¤ÈwmÏ­­-j×®UÈJqþüù‡‡ž!u%•Ê'ïJJÂs×ÑÑa/”„Ty|U~îDe‘‘Q¹=z̪X±bÙû“---üôÓOˆWØK#666ÏòIII¸ví´´´P¥JÀË—/ó,…‡¢fÍšEx1yûö­èëë»:,,Låvº.(•OÔÕÕ¥A2ªüÜ©xÝ»wkÖ¬ALLŒüØ©S§°~ýz £""U1bĈŸ»víªR˶uèÐ_~ù%¶lÙ‚¸¸8ÀŸþ‰:`óæÍ ­⅖ IDAT[·°}ûvŒ3 2dˆ|o—™3g¢gÏžðööÆ¥K—pãÆ lÚ´ ®®®ÈÌÌ,UCcwïÞ}ÒÛÛ{¥Ôq”dl}ý aaayîü dϼ?xð <ˆmÛ¶É'Ï™3êêêðððPf¨*'** ñññhܸ±üØ7 §§ÇùEÀÉÉ áááyž[·nRRR°hÑ"´iÓF¾Üܱcǰÿ~L˜0A™¡‘Šqttl1kÖ¬ÑRÇ!777 4ë֭Ü9sжm[ÃÃÃCajCCCL:?üðƒü˜½½=<==1}útùÕ@ö ,(5Ë*ß¹sçõÉ“'çˆùUЀÏÒ¥K—|€Ë—/#22§OŸFff¦üøµkרòþ™0yòä|Ïo޼˗/Çßÿˆˆùñ#F y󿨼™~®äädhhhäY™·°°@VVfÏž5ÊÜÜ;"*ÁAV¬X±¨víÚå?^ºt É÷\‡vQwG÷§OŸâõëרV­ŒŒŒrÕEúö틾}û"%%OŸ>ERRªW¯ŽªU«–šÕEQ„Ï_—¤Ž¥¤cð™Úµkww÷\Ç1räHtíÚµDŒµ/KRSSáïï“S… мyó<ÏBCC#×òZùIHHÀíÛ·Q®\9XYYå¹§@ZZîܹƒØØX nݺò-èUƒƒC¾C©Æ¯ähè]§NÂܹs±aÃ4hÐàƒeÏ;‡Å‹#,, ™™™hÔ¨æÍ›‡/¿üR^&!! ,ÀÑ£Guuu˜™™aêÔ©èׯ_q?"*5jd¼hÑ¢©:::R‡Bxõê•ìØ±c¿‰¢˜"u,¥€b´zõj¬Zµ <€®®n¾å1kÖ,ìÛ·O~¬|ùòX²d zöì)?€~ø±±±¢(B]]6l(ukó7„……h®Åµk×°oß>ܾ}+VDûöí1|øp…Ä-!!žžž¸rå ^¿~ * AƒpqqAÕªU‹ó©”JIIIˆŒŒDjjêËíÙ³S¦LA£F0}úthhhÀËË NNN8xð Z¶l ˜:u*N:…iÓ¦¡AƒHMMEHHH¾«V‘êéÛ·ï¯-[¶4—:’Æ®]»üöïß¿Sê8J &Ÿ)-- /^¼P8¦««‹/¾ø¢À÷øæ›opãÆ ¸»»£wïÞxúô)Ö®]‹qãÆÁÌÌ 6„L&ÃøñãÑ AøøøÀÒÒñññøçŸ`ll\ÔO«Ô ÂßÿýÑ`ãÆððð€ºw°0̘1þþþعs'A€L&Cÿþý;;;4iÒ/_¾Ä¡C‡ðÕW_©lðèÑ#ØÚÚ*³±±ÁÆ t}BBæÏŸæÍ›ãÈ‘#òã#GŽDãÆ±hÑ"øùù€|#šw‡ÙÛÛÁ³ ¢²`ðàÁ=fΜ9Hê8HW®\yêïï?sáÂ…R‡Rj0øL9[j¿køðáX²dI®?qâÎ;wwwL™2`ff†  aÆX³f 6nÜˆØØX¤¤¤ OŸ>¨_¿> råÊ*ÝòöìYLŸ>]áX×®]Ñ¥K—]‰… ÂÙÙË—/GÎVñ»wïÆ”)S°ÿ~ôë×ááá ÅòåË1dÈ…{¤§«îîâåÊ•C§NŽ}Ê:Ñ/^Äëׯáââ¢p\SSNNNðööFff&ÔÕÕѲeKœ:u ÇŽCçÎ9¯†ˆäAÐܲeË<###ŽýQA2™ ûöíÛpåÊ•{RÇRš0øL-[¶ÌµJ­Zµ |ý¥KÙÕk×® .(œ«_¿>nݺ¨V­7nŒ+V 66ööö[]Ö½xñ×®]S8ö)¿“íÛ·C&“aâĉòÊ?½¼yó€~ýúÁØØêêꈈˆ@zzºÂÜŒ¼æi¨ŠÊ•+ãsZ[îß¿ {¾F~s6ž?ŽêÕ«ã‡~ÀÌ™31fÌèêê¢[·npqqQ˜'@DªiòäÉsííí[JIcïÞ½ç·mÛö‹———Ô¡”*L>“±±ñg Exøð!AÀ´iÓò<¯¯¯/ÿÿµk×â?þÀš5k°lÙ2Ô«W...èß¿¿JVDûõë÷Yû)Ü»wššš˜1#ïÂs¶=¯Zµ* „?ÿü;vì@§N0hÐ tèÐ+Ñ|†œVü­[·æÛs³CeÓ¦Máïïk×®áèÑ£ðõõ…¯¯/f̘©S§*-f"*YAÐÙ±cǰ‚.¶AeËõë×NE1óã¥é]L$fdd ܸqã£ÃêÔ©ƒ•+WÂÃÃ'OžÄÞ½{1mÚ4¤¥¥a̘1JЏìHNN†¡¡až œ½½=Ê—ÿÿe¤—-[WWWüõ×_8vìüüüP»vmìÙ³&&&…zü´´´BÇ^Ô«WWà$ºyóæhÞ¼9æÎ‹Þ½{㯿þÂäÉ“ ¼Ò•-ݾ}{NüUA>Œß¾}ûÄcÇŽý+u,¥‘Êk&&&Júø5‚L&ÃÉ“' |¡¡!œ±k×.XXX`ÿþý…zìøøøB]W”^½z%Ù˜Mkkk$$$`øðápuuÍõoÀ€ å­¬¬ðóÏ?ãÚµkðööÆýû÷±cÇŽB?þû“Ç¥ðî†1ÊÖªU+4nÜK–,Á£GÎÉd2üûï¿òÿãA™™‰äääB÷ÂDGG.p"*1Z´hÑãÝ!œ¤âââÒ===Ú¹sç!©c)­˜Hœ8;;ÃÆÆ³gϖϲ7E ’¯Ž‰={ö(,«xçÎM›6Å‚ dÿþ»uë†Î;cÒ¤IpssCÇŽqõêUL:µÐ @FFFQ>"R2AÊYZZ¶–:R®˜˜˜·7n\²aÆ5RÇRš©ü iðôôÄ”)Sàää„Ê•+ÃÀÀOž}`aaøøx?~ èÓ§O¡¿|ùòHLL¬Q„Oé“öïĈ¬@[YYÁÍÍ 5jüÿÓëÚµk®±þVVV8sæ víÚ…ÐÐP:th])gÏÿöÛo›Fíòñ’eÏ¥K—bœœÌDQL–*//¯Kªº|ž¿¿ðÈ‘#›J‡TA0»råʃOٻʎÇ£E‹æ¢(>”:–Ï1a„¾ûî»_ªT©ÂÍAÊ 7oÞd:uêòÅ‹ÿÚºuë:©ã)K¤„,!QÅ/^„J‡T^¾|*õÒY7oÞ¼!åãKéÉ“'aRVþàåË—!/U6ÅÅÅ©ìs'*+Ö¯_¿|åÊ•Ó?~,ýªTdîÞ½›¸}ûöýS§NíïêêÚ†•ÿ¢§êC€ðï¿ÿ^tvv£ZÊd2ܸq#Hê8N:µéÈ‘#ƒÛH‹2=þ<õÊ•+륎#((h‡ÖªUË@êX”):::éòåË>RÇADŸoóæÍk Y¯^=Ç*UªÔ-_¾| SMMMñ+’Ÿ>}ú$99ùQ||üãèèèG.\ØsõêÕÛ?þø£Ôá•Y*=AP›3gΡï¿ÿÞAêX”ióæÍÇæÌ™ÓSEé–ù££cS77·£õêÕ«&u,Ê™™‰Å‹¯Y¹rå$©c€qãÆý6wîÜ%aR¸2dddà×_]üÇ作ŠÁÌÏÏïAõêÕ¥…$ ''§R?(/BöÒ`5ÀFÎÒâ(Н>^ŒŠ’Ê'дiÓ?þøãéÎ;ו:eøßÿþw÷×_írýúõG/­®®®#F½Ü¢pkš–2™ 7n<¼pá¾¢(ʤŽÈN‚gÍšuì»ï¾ë¦®^¶̲²²°~ýúã .tzø›ÔAÐP¸]쨬x"Š"×Ã%RALþÓ«W¯–öööë›IKqòóó»îçç÷íÑ£Gÿ‘:–÷õëׯCß¾}×têÔ©Ô±‡˜˜˜·[·n]»zõê%¡çå]‚ hNš4i­««ë¨Ê•+—É®€W¯^É6mÚ´måʕߋ¢¨ÚÛ0‘JcðŽÚµkÑ¿ÿ cÇŽ¨¯¯_¦&H'%%‰[¶lÙ·cÇŽ±QQQÒï–¦M›9;;oìÛ·¯C¥J•ÊDs´(Š8sæÌÿY^^^»¥ŽçC†î2lذùMš4‘t‚¢òl×®]ó¶nݺQêXˆˆˆ¤Æ £Fú®S§N®]ºtiTÚ‡DdffÂßß?ìܹs›¶nÝš÷–·%³³³sÛ¶m¿íÑ£G‡ *”ÚáüùóQçÏŸßyôèÑ_"""’¤Ž§ Z´hQ§{÷î?víÚµ¯¥¥e©’wüøq¿ÀÀÀÅW¯^½-u½ëæÍ›’CDDTŠ0(¤/¾ø¢¢C£FW¯^ݦJ•*6M›6­YÜ•¡7oÞàúõëO^¼xræÌ™#oÞ¼‰+Ö.Á¬­­µnݺ“••UýòåË×,W®\uc33³ÊÕªUSË^ºp’’’ðàÁƒägϞŤ¦¦>KJJŠ~òäÉàààOž< ŠbJ>•REV­ZÙ}ùå—_™™™ÙT®\¹^ÅŠk˜››WªZµj‘>ÖË—/ñàÁƒ¸W¯^E¿zõêVTTÔÍ«W¯^¼xñâÿJÊrªDDD¥€""‚æ—_~ikiiY¿FÕ*V¬hlhhX­\¹rÕtttŒôôôÊéééiëééiëêêªëêêBW7{HûÛ·osþe%''§&''§%''¿}ûöíó”””˜ÄÄʸ¸¸˜èèègáW®\9ÇJχ ‚ ebbRÇÆÆ¦©¹¹y5mmm---MMM]MMM 555ŒŒŒT™LöV&“¥¦§§§¦¥¥½MMM}ý2222âÚµk!¢(ªl‚õ)AЭS§Žµ••U#ssójU«V­f```¤©©©§®®®­®®®“ó_555mÈÊÊJËÌÌLÍÌÌ”ÿW&“¥$$$<ùò峇>½{÷nè;wn‹¢øVêçHDDTÚ1PAt”0C„žjjjj‚ ¨EQÌÈÊÊÊEq7€?¤HùâQã6ÙJò_Ëå[A DQ´ÎÌÌsR}n‡MDDDDÅ©t­mY6|h@:[ü‰ˆˆˆ¨X1 """"R!L”=DDDD$&ÊÇ€ˆˆˆˆ$ÀˆˆˆˆH…0P>ö‘d˜©&ÊÇ""""’ åc@DDDD’a@DDDD¤B˜({ˆˆˆˆH2LˆˆˆˆˆTåcI† ‘ a |ì """"É0P>&DDDD$&DDDDD*„ €ò±€ˆˆˆˆ$ÀˆˆˆˆH…0P>ö‘d˜(""""’ """""Â@ùØ@DDDD’a@DDDD¤B˜({ˆˆˆˆH2L” I† ‘ a |ì """"É0 """"R!L”=DDDD$&DDDDD*„ €ò±€ˆˆˆˆ$Ã@ù˜‘d˜©&ÊÇ""""’ """""Â@ùØ@DDDD’a |LˆˆˆˆH2LˆˆˆˆˆTåcI† ‘ a |ì """"É0 """"R!L”=DDDD$&ÊÇ€ˆˆˆˆ$ÀˆˆˆˆH…0P>ö‘d˜©&ÊÇ""""’ åc@DDDD’a@DDDD¤B˜({ˆˆˆˆH2LˆˆˆˆˆTåcI† €ò1 """"É0 """"R!L”=DDDD$&DDDDD*„ €ò±€ˆˆˆˆ$ÀˆˆˆˆH…0P>ö‘d˜(""""’ """""Â@ùØ@DDDD’a@DDDD¤B˜({ˆˆˆˆH2L” I† ‘ a |ì """"É0 """"R!L”=DDDD$&ÊÇ€ˆˆˆˆ$ÀˆˆˆˆH…0P>ö‘d˜©&ÊÇ""""’ """""Â@ùØ@DDDD’a |LˆˆˆˆH2LˆˆˆˆˆTåcI† ‘ a |ì """"É0P>&DDDD$&DDDDD*„ €ò±€ˆˆˆˆ$ÀˆˆˆˆH…hH€ b}6AjøBê8ˆHr¢(Þ“:"*]˜•N8HIî9c©ƒ ¢Ò…C€”=T´¥€ˆˆˆJ'&ÊÇ€Š"""*&D¥“–ÔQéÄ@ùØ@E  ¢Ò‰  WR>öPQÐüÀ9€,eBJ“ß¼@º2!¥À¤ŸˆŠåc@EáC•¢(žPZ$¤‚ Ä0ÌãÔ#QÍ”)‘ ­\”:"*;8ˆ¨túXQž˜({¨(|¨€ÃAˆˆˆ(_LˆJ§õ0 ""¢|1P>öPQ` '+* ì "¢"%‚€ZRÇ!±QÓ¤¢¸1 *8 ˜ˆˆŠÔ˜1c~puu]¢®®.u(’ ›5kÖ—RÇ¡ LŠ‘ Zþ÷cNë¾é.™+‚ë;eE“EQ|TL!R '‚à0€ȮاããüÙ‚ ¼þ¯l:€4ËU¡Eƒˆˆ ÇÚÚº‚‡‡Ç333©C‘DrrrfHHÈï¢(¦J‹20(^Çüô å[½÷³/+ÿªMEQo»>á²1ïý¼…•ÿÒE„–*¾w8¿Ïk]Aº¿wì…(Šÿ}dTÜA¨à:€/Þ9ü¡æØª‚ $¼ó³à”(ŠÎÅ•]ŽŽŽ?wèÐÁBê8¤rðàÁ¿wïÞý—Ôq( '#Q/àÓ*nòK‘Ýr;­h#¢Rj€+…¼ö5÷"Œ…”£€¿ßû§—OÙªy”5+þ©8ˆ¢øÀ:ïüËﵲ畽[VÀ¼b“ʘnݺ5íÙ³ç©ãJTTT‚¿¿ÿÏRÇ¡LLŠß ©ø´ ¾€e¢(Þ/ž¨4EQ0½—»‹¢[”ñRlPØüS¢((Ê`Hé–xXÈk7Š¢x£c!о}ûùÖÖÖ奎C*~~~»/I‡21(f¢(>ð>¼úÂ%büRlAQ©#ŠâG?ñ²Ë6}4TÜþKú&âÒ,SŠ8R²ÿ†ì}j° ÀÜ¢ˆÊ²ìÓ§O©ãÊåË—øøøÌ—:ec ‹}áŸlý-þëÅ9ý —扢øª˜B¢2HŽ;þX©R%•œš‘‘??¿MwïÞ}&u,ÊÆ@ DQ| àG¬àÞÅ•F¢(†!{hÈÇÖsh™0À[|¼ñ@Dö|¶þ–-“d¢`GáÈž;@T`cÇŽåèèØ\ê8¤rôèѶlÙ²Tê8¤À@IDQÜ ècÅLú¯ûŸ(/?áÃBÀKs”›ÿ†þŽ7~E1®ø£"eù¯7g# Öx4EÅŒb‰Ê T³··ÿFSóCÛÊ”]¯_¿–?~|¹(Š*¹w嚌·älE±°«½ E1Àrä_!¸‰¢¯¼¨¨˜}l¡à€õJ‹ˆ”i.²Çöè»ã°(ŠJЇÊGGÇŸ¿úê+•Ýõ÷À‡÷ïß¿Wê8¤Â@‰DQ¼À+¯S’ÌTj@TZ-‹¼+çDQÜ®äx¨`¡€ì 3•)Ëcúç#ï×_DöÆ€\2š>‰ƒƒƒmïÞ½H‡T"""^ýý÷ß ¤ŽCJL”o²+ûïVÞ EQT¹I(ôéDQL°ŠÙc…¿•$(*Vÿ !<ŸÏi_QO(3RºµÈãÿ>À*Qï*9*åììì~277×—:©8p`ç¹sçB¤ŽCJL”ì¿JþÏP¬¼EX)MDTJý‰ì¿›€•¢(Þ”(*~S ¸ 7 TÿíŸúþa/,T~DTš }ºH‡TΜ9s×ÇÇGå7Ëc •ÞÝäkª(ŠéRC¥Ï“–Þ2ìaTFå1„ªQ8òÎ!À¬ÿz‰ D¯¿þzŠJÖÿÒÓÓqäÈ‘õOŸ>}-u,RSÉ?©½·ÉËqQK•N¢(î³sáî¡r†À3pÃ@Uó²ÇüÙ;EdY`"¹ &̳··o(uR9xðà9ooïURÇQ¨äÆ%(о‚ ø#w·.ѧp0ç¿d€> L¤Ž£þà` €Ê‚ T–8žIEñ…ÔA”¢(Þa²ß÷“¹ÑåA@¦(Š©ù•iݺµÅ¼yóFª©©fÛïóçÏSó}“MPå%çA0óóó{P½zu©C)ÓŽ?~|öìÙÝ¥Žã}|ý•ƒ¯¿j;}ú´ï?þØGê8Þ7~üøI...l ,f%õý_ôèÑ£]çÎ]*Uªdmll\·råÊ¤Ž©´ËÊÊÊzøðá£øøøˆÛ·o‡lß¾}Alll™ì]Wù€êÕ«£fÍšR‡Q¦U¨P¡ÄÎoàë_üøú«¶ *¤IC^´´´2øÚ¿’üþ/­AÐpuu]0{öìñuêÔa¥¿h©™ššš0srrêÚ AƒÎ½{÷žéëë[æöÙPù€ˆˆˆ¨%tÆ IDAT´˜8qâª3f|«¡Á*\qspphfii¹£W¯^‡º,u>åË—ìÝ»§OŸÆÓ§OammþýûãË/¿T¸~ñâŨV­ºté‚-[¶ 88_ý5ž?Ž'Ož@KK Ó§OböìÙJŽDDTrpQ ¡©© ÈÊÊ‚(Š3f &Nœˆ¤¤$4nÜ—.]‚““<==®;pàöîÝ‹¾}û"$$àpa""Ê{ˆˆJ€   „††ÂÄÄ+V„¯¯/Ž;wwwL™2 “É0tèP,X°ööö¨V­šüúË—/cåÊ•4hP®û`ñâÅJ}>DDTr1 "’@TT&Mš ÅíÛ·¡©©‰ßÿ°ÿ~b„ òk455áîîŽ=zàØ±cøæ›oäçÌÍÍsUþ‰Hµ$%%ááÇ¹Ž—+W&&&ÐÒÒ*ô½Çk×®A&“áäÉ“¨T©ÒgDJRc@D$ôôt<~ü‚  N:èÖ­†ŠZµj>|ˆ:uê@[[[áºzõêÉÏ¿ËÜÜ\)qQÉuõêUŒ;êêê Ç555¡®® :ßÿ½|ÈaA={ö ?†±±1²²²Š$ÞiÓ¦!..¦¦¦˜?~‘Ü“ † ‘êÖ­‹ƒæ{^&“AC#÷GtÎ1™L¦p¼\¹rE •J2™ oÞ¼É÷üÊ•+áëë‹ÀÀÀBõ¤¦¦~Nx NŸ>èèh˜™™1P2N–XTT‚ƒƒŽÝ¸q‘‘‘ETº‚`*Â!AêHKIpïÞ=¬Y³111òc§NÂúõë%Œªx ‚p^„æRÇQÔÌÌÌðàÁƒ\-mQQQSSÓÝGdffy|%… KAp¡L}ŸÝ¾}kÖ¬Áëׯ¥EîÔ©Sؼys±?Ž Æ‚ l¡U±?˜A8(B÷â~œZµjaÕªUXµj,X€: bÅŠHKKÃ>y5°É“'ÃÃÃÓ¦MÃ_|Q$1ª©©)ü—”‡=ÅèÍ›7˜8qb¾ç7n܈U«VÁÏÏO¡Â?zôh4lØ[·n¤¥¥áæÍ›033㘻Ü=ta€ŸEQÌ¿é£lllä­«‚  R¥J077Çwß}‡¯¾úJ^nâĉ8~ü¸üg===˜˜˜ oß¾6l˜¼¥öÀpww——Ó×ׇ‰‰ LLLкuk <¸À]±NNNÏóܺuë’’‚E‹¡M›6ò ¢ÇŽÃþýûÆ’oÛ¶ FFFè޽ؿƒ”ÁÀeA¶˜-Šâs©* ]ºtÁ™3gàçç‡>}úȯ]»jjjèÔ©SîS©R%„††W˜%An&‚0YÅóEuã÷ßoêêê022BË–-1iÒ$˜˜˜ÕCåŠE‹¡{÷î¨P¡B±=Χ8|ø0àââR,÷AÀsèXW,$½zþá€DQ¼[R±bE 8Pþ³««+Ö¯_¥K—"99çνIbb"@KK ººº€ <<UªTA‹-кuk4kÖ †&Êd2¤¤¤Èî‰ÔÔÔDzz:®_¿Ž´´4ØØØäª»¼{MN e s=§ŒŒ |ø‡†»»;BCC±|ùrÙt‰‰‰1bêÔ©ƒôôt‡……²²²0{ölÔ¨Qãƒ÷Y»v-š4iRV »7óAX`µ(ŠéÇôYFŽ oooLš4 aaa°´´Ä‰'pèÐ!Œ3VVVºOÛ¶mqòäIôë×5Bùòåå“˘fÎ ‚°ÀtQî “““¡¥¥%ÿ}%%%áŸþÁ®]»äŸ %¥r^Ú ‚à`9 ©cQ"GÝAX `áç6^Ĉ#ðçŸ"99iiiHIIÁ›7oо}{èêêÂÚÚ­Zµ‚··7ÒÓÓªU«âÚµk=z4ÂÃÑššŠóçÏ£J•*///,_¾¢(bÁ‚ðóóCxx8’““‘™™ ===Ô¯_›6m‚¾¾>`Ó¦MX³f¼‡óõë×èСƒ<Δ”„„„@GGðöí[ù&‰HHH€¾¾>´µµÑ®];,]ºT!ˆG«V­ §§ssstîÜ[·nEzz:^¿~Ê•+ãúõëÅýë.ј(A÷îݱhÑ¢<ϹººÂÕÕUÉ•iUlð­ “DQü§07133“¿.ãÆÃµk×ààà€ßÿ]žÙ-‚ï¾~øòË/±sçNL:5kÖ”Ÿ³··GÇŽ'((ãÆÃ„ pöìYT¬Xñ£±U¨Páƒ=K:÷©d2Y{'233!ŠbžãÖ•HÀãA˜*Šâ)ƒÉOóæÍa``ðÁ2ššš8vì/^Œ€€xyyÁÊÊ K–,ÁðáÃÊ6kÖ y×›\\\ ««‹ . $$D*¬ƒ8 ‚ð;€Å¢(¾ýœ›æúŒþé§Ÿ°qãFœ>}ÎÎι®ùÔ÷Bzzúg­Î’###£À™™™ 55µîñ)÷, Al¬Ð@¡mJ)Ù=Ø~Äÿ7^y¶ñª ´´´^óœñüÚÚÚxöìÞ¼yƒëׯ#!!_|ñ´µµå•ôÔÔT<þÆÆÆ ÷ÌÊÊ’7dzxxÈ[Þ¿øâ ù5±±±èß¿?þþûoùuoß¾•OLIIQ˜×ôî÷Ntt4úõë‡ÇC&“AOOxûö-âââàëë‹(ôLèèè &&‰‰‰¸uëâããåICQMb.Í8èJbûöíÃܹsó=ïÞ=ù²€{÷îÅôéÓ1}út=zT¡ÜÞ½{1qâDôêÕ “'OÆùóнà¢(búôéð÷÷Gxx8æÎ '''9R"ëGŸ#ç“­€ ‚ ü%BõϽióæÍQ»vmÜ»wù–ÓÔÔ”׸}ûöGïkkk‹ùóç#66Vþ:ŽS§NÁÖÖ7oÞÌ·L»ví#/kkk‹Q£FÉÏgeeaíÚµhß¾=ÌÍÍQ¯^=L˜0±±± ÷™2e \\\pëÖ-ôéÓuëÖÅÈ‘#?û9|¦œ×¿6€Ã‚ ü-‚µ”åeýúõz½Ë•+‡ùóçãìÙ³¸wïŽ=š«òdÿrssËóššš5j6n܈ýû÷+e w  `>€;‚ (ê›çìÄün=--- îîîhÙ²%jÖ¬ sss´oß»wïÎówîÜÁðáÃaccƒZµj¡^½zøöÛoñ¡ºŸL&Ã?ü€Î;+´^z{{£sçÎ077‡¥¥%FŒÇ;@.\ˆÞ½{#::ƒ†¥¥%êÔ©ƒñãÇçz[·nE«V­`jjН¿þ:×wÎç¡‚ «„ »òüÿûW•ä<ç*<‘=œ±Mq=عsçä•~MMÍ\N©©©ÐÐÐÀ¨Q£àé鉭[·* Aü˜ÄÄDÔ¨Q+V¬À°råJ!33>Ä… }úôÁÎ;QµjU€±±1þúë/ù?OOOyRúôéƒ_~ùÏž=ÃܹsåïýÏ!‚:€q¨ˆ·úŸ¡,6Õj!÷wWÎÏ_awQŸöAr–²ÿ>ÏŸ?Õ«W#>>ûc0gÉáwéêêÂÝÝ]¡¡¡ ÃSsT©RÇ—§X[[#11óçÏÇëׯqèÐ!|õÕW¨V­ªU«&ïÐÐÐP˜c—#((HÞ U§N;vL>aØÌÌ þþþ°µµÅ£G°ÿ~LŸ>]>l(‡¶¶6~øá…}SÚ¶m[àçTV1P‚   LŸ>]áX—.]еk×^[§N̘1¾¾¾èß¿®9Û·oG@@V¯^²º~ùåLœ8¿ýöœœœv =qâ<ˆV­”·¸Bff¦@û£‹.€E\A˜öíÝ{T”ÕÞðïC Ê@å¤@€ÂòºTò¸/Ë+ç – v^×*²¼'G[juŒ7MßehšKX'QN©GANÇ)O€šT¢€‚B¢\e¿L31ÌÃu„çûù‡gf63ÌÌþîgïßB´]{Q‹ââbìß¿<ÀâÅ‹Û<ïÁƒ8{ö,þóŸÿÀÆÆ:?†““nÞ¼©Ó¹·o߆Ú1OOO:tH§Û`ÇŽ1bþô§?©ý.%% ؼy³jÞsPPæÍ›‡€€|üñÇxå•WTç—””àã?ÆüùóÛ|¼ææf}¿þP,, •$i €„±SñXÒóë¯ìTÍ)IÒa(ŠßÕõîܹŠ€]XX///$''«žZ[[k\Q ‡¯¯/¢££UàÑ£GˆŒŒÄ°aÃðå—_ª•omy%®¥’’¼ð ¨ªªÂ™3gTkʲ³³ñÉ'Ÿ <<ï¼óŽêüàà`L›6 ï¿ÿ>Þzë-Õñêêj¬ZµJõÞ^ºt)‚ƒƒñùçŸc÷îÝ044ÄDZwï^øúúªU?~<üüüºUˆB’$?{ŒÅïÿöq:W¨~àè‘Á«ââb,\¸€âÿ®ªªJ5ÍÆÁÁ| ¹ÆÚÚÚZ-¬vÖŒ34ïΜ9æææ¨­­Õù{Né³Ï>Cee%LLL°~ýzjAFFF˜={6>ŒÆÆFäçç«® (Y[[·ùÞ’3€>PVV†¬¬,µcé¶çðáÃ9r$UÇ ±|ùrœ­µšOë÷§.ÇöÚו`Ÿyæ™Ò¸¸¸((J|:ã÷ÏaÒ]#€ÿóññ¹c``0Y×ÙÛÛcݺuz ŽªBõ5åwŽÂÃõ^µhiÚ4ÍõÓÛßô¸è—ßÞr£üçm]¶ÊÄÄŽŽŽ022b)QÝ4Bñ%´CQ#I’³~›£°}ûv.¯?õ e§ó2‹Ó^{íµˆ®ÞYMM ªªªÔ>“333áàà€+V¨u´³³³Õn;fŒbÓò+W®h¬ÁÑÆßßãÆChh(–.]Šüãª+Œîî;¶«Ž啉k×®©MmnnÆ?þØ¥ûBœ”$é,€u¶èÜ%Ry; `½"/00°wv`Ó#eÿ¦­+...øþûïQ]] WWWÕšê>–í”—q•sáZ @ZZþûßÿjü®©©I­®®Ìà.„ø«¢ýëˆ} ¶¶YYY Á‰'0kÖ,õÙãÛÙÙáêÕ«U –/_ŽAƒaÓ¦M£}ÈËËë³6öå·J:€ÉBˆ…¥úlõ)åë_ÅüÿIBˆ´îÜaAAÞ}÷]Ô×׫UG±²²R]ÍSJOO×XMg˯ôæææðòò±cÇp÷î]Œ1Ó§O‡ŸŸÖ¯_””#<<ãÆC]]òòòpêÔ)=z´ÇwÕÂ… ó/^¼¸¨—î~€¯´WŽøý`"¥—_g¯½öŒÑÐЀ²²2Šp·}ûö>¯P‚5kÖÀÕÕ...3f öíÛ§Z‰éÓ§cêÔ©066ÆíÛ·‘‘‘ÈÈHÕ¦®f̘ñsbbâ’ŽÏì²kZŽ)_ÿb…Ú‹±wQnn.Î;@±ÆG¹#fKß|óª|]o_¡Û»w/vïÞììl­spõÉ××÷vBB‚ææ=' @[CéMPTy[QÝ•;/,,T-ôollÄ/¿ü@±@TT”ê¼ððpœCpp0qüøqØØØ ::«V­‚¦OŸ ܹs SíT®+I’°cÇ,[¶ ~~~ð÷÷Gii)nܸ™3g¶»Çˆ.„%Â%IÚÅk3 mO bŸ€æ,Ó¡ZþÍÊç ÀV…mo:3@(§Ê=xðË–-óÏ>«Ú¬pîܹX¼x18€Ë—/£¨¨þþþؾ};¼½½1hРܺu ˆÅ½{÷põêU}þ9ý @/244Ä´iÓÚÜ¡P\n]•gâĉ·‰‰‰Á¡C‡——‡¬¬,Õ"ž!C†à‹/¾Àþýûñå—_âÓO?Å AƒàììŒÐÐPÕy’$aÚ´iZëþö6kkë!DÇ»bu$I­‡ ”¢÷ðû‡h§6;X»v­N‹¥4ª hãéé©¶NÀÌÌ ŽŽŽptt„››[§Öe„……µ»™››6lØ€#F¨ŽÍ™3GcÑWHH<<<••…_ýU­ŒéÓ§#>>999¨©©‹‹ V¬X¡V}((( ¶ÙÜܼ±·^ Íùuzd'Xm._¾Œ­[·PÔ×^³fÆ97nT-ø\¹reŸÏC Bss3>ÿüó>}ÜÖ,,,zûõ×ÜÅJá €uÝ= S…õß vvvpssÔ)SÔÎ4iþýï#&&wïÞÅØ±cñÆo ¦¦£FR[\ioo¤¤$ÄÅÅáÒ¥K(**ÂðáÃñÁ¨:ÿÊÏ– y½¼¼pêÔ)$$$ == .ĬY³páÂÄÅÅ!''%%%9r$‚‚‚0{ölÕmçÍ›§õóÊÝÝ6lPû ˜:u*’’’ðé§Ÿ¢  ãÇǻヒ~øA£°DW !2L—$éy;¡Ìi {óG_$IÒöÁÙ E•²­BˆŠ>n’Þlܸ/½ôª««qáÂ|óÍ7000€©©)¾ÿþ{ <‡BPPŠŠŠpãÆ ¬\¹fff000@CCª««ÑØØØcÕðä‚ YZZâäÉöKÎGDD "B}*ê‡~¨qžƒƒ¶mÛ¦õ> „µk×bíÚµm>Ž$I¶e€hð€mBˆ{¬®‹¦ÚÛ ¥±cÇöØüܰ°°vïææ777µcsæÌѺ焗——Æ"q%GGÇŸ‡¾\³ÐIq6 !îtxf7¹ºº">>^#ddd ??®®®Z§îõ´Õ«WcõêÕjÇ:]q£ŸSv‚âª_rwï°£÷[kãÆÃ{ï½§q\¹iWK††† Õº³3ðûTœÖž~úi<ý´úæÖ¶¶¶xõÕWÛm[[åzÝÝÝáîî®qÜÅÅEãêAË…ž"„8*IÒ)›¼Å.ÎrÐ2è¤@ñ?Û½Ë+¿166†¥¥¥jz.êëëaooßîmŒagg§1UÇÀÀVVVí~ÞÔÖÖj½???lß¾û÷ïGmm­ª¬gËÇprr¹sç‰ÔÔT466¢¢¢MMM033ƒ LMM1wî\­“.Õõ䈀’d(>D;?ñ•‚L(x~ÓW‚·Þz ˜<ù÷âqqqðôôl3455áܹsÈÎΆ™™&Mš„ &¨STT„ÌÌLøùùáÞ½{HMMEYY&L˜ ±Äõë×qíÚ5,X°FFFøâ‹/ð믿BS§NP ´ì–——#55yyy5jf̘¡ÑÁËÈÈ@ee%fÏžï¾û™™™055ÅòåË»ýÜõYMH„lûm£¶zsÊàãä& |OõÔúøø -M±ÌÅØX·Ê«C‡Uݦõ.º-}ôÑGªŽyË+S¡'\O• sIDAT¡¡ ½ ¨±±1.\¸Ðf›žþy<ÿüóB ²²R5Ï¿e[† ‚½{÷âáÇÈÍÍENNššš0|øp¸¸¸ÀÑÑQí>­¬¬:ý<È  ùP\ê?­ï†^”Ø àˆèã!ooooU%e¨­­ÅéÓ§ñúë¯ãòåË·)..Æ_þòdggÃÅÅ•••(--ÅÒ¥K±sçNÕhÕÅ‹±jÕ*DEEáí·ß†‰‰ ª««ÑÐЀ•+WªÕ¦OHHÀ®]»pýúuXZZâÃ?DQQ`×®]_ˆÊ’’‚W_}uuu=z4nÞ¼‰ææfDEE©öµ€¿ÿýï¸té²²²°oß>Œ5 ööö[h‚bOYMˆ„·„H’´@´¾ÛÓ‹îø+€ÿëÊ¿í122ê°Tfk:ÝÆÂÂBcã;@ÑQo/8Ðéþ%IRÍÿo‹‰‰ ¼½½áííÝá}uöyV¢þîgìüËš«⓾îü+-Y²ÿú׿TeUÏœ9ƒºº:Íù”6mÚ„ëׯãĉøúë¯qåÊDFF"..111çïÙ³ÑÑѸrå ._¾ŒY³fáðáøuëV›m:qâ¼½½áåå…ôôt¤§§#11PYY‰ˆˆ888 ##ÉÉɸzõ*&OžŒ 6hÌñ.**BFF²³³‘žž®± õ1°V±ŠÿCqÀ$uE§Ÿâ{ºóOÔ Ô¯ !„¯D¥Kq_Ÿˆ‡")) pìØ1øûûkì (vnýꫯª¶øÍš5;v,<¨q›E‹aÁ‚044„ –.]Šæææ.W»ˆ‹‹CUUÞ|óMUMMM±{÷n!pøðaµó…xï½÷T#sÚ*Ô蓾_êBˆG¿M pø?K"¢n°µµ…¿¿?âããQXXˆo¿ýK–hŸÂ¬]×¶ëóÔ©SQ\\¬±AÛ‚ Ô~V–¤lYo¾3òóóa`` Q}ÌÉÉ #FŒÐ¸`ii©ÚŠˆˆ"¢n Ajj*öîÝ +++µò‹-UT(f©h›çjaa!„ê%[[[µŸ•kZï ®«ŠŠ ˜™™i­Œaaa¡ñøÚæüQÿÆ@DÔM³fÍ‚••Ž=ŠgŸ}¶Í²sÊJʺ-ýòË/022‚½½}µKÛ²'''TWWãþ}ÍYeeeÕ4ˆˆhàa "ê&###lݺaaaíîêìááÁƒkìÉ¡\C0~üxôÌDz………Ö ¡,7Úº iii(++Ãĉ{äñ‰ˆèñÅ@DÔ–,Y‚;wÂÅÅ¥Ísž|òI¬\¹_}õ¶mÛ†üü|\¹r/¼ð***°iÓ¦k‡‡JJJ°k×.$''«êp/Z´xóÍ7ââb$%%!""C‡ÅŠ+z¬ DÔsôUéŒTÔóÏ}ˆˆúPdd$Œ­ÚõÛÞÞ111ðññé±Çyùå—QXXˆØØXìÙ³VVV¸ví uëÖaõêÕªiBS¦LÁûï¿SSÓkõœ‚‚‚üªª*­›mQï{øðá/únCOb "ê¤àà`wxÞpàÀµcO<ñ6lØ€5kÖ 77fffprrÒ¸m`` 5Ž?ùä“€Ö¯_õë׫³²²ÒZVP,,ŽEMM nÞ¼‰‘#GÂÊÊJãý×Ó§O§ï¶ô4"""¢~â·‘èÍóçÏOò÷÷ÿ›§‡ æbkkË0ÐMÍÍÍÍ·+++oäää|ûVyyy¾ÛÕˆˆˆˆú™³gϦHI’ÌØè·EÂ#ÅBˆfسgž›Ó{ˆˆˆˆú1!Ä}÷õÝê?¸˜ˆˆˆˆHF$9ï,-I’É‹/¾¸ÌÐаYßmÈ*++‹?ž¤ïv´Æ×¿oðõ—·ªªªÂcÇŽ%ë»­-Z´Èmøðá3ôÝŽîq}ÿɬ‘Üp ‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œ0É‘Œü?Ý,öw½©’8IEND®B`‚cups-2.2.7/doc/images/cups-block-diagram.svg000664 000765 000024 00000134254 13255074424 021363 0ustar00msweetstaff000000 000000 image/svg+xml Scheduler (cupsd) Filter PPD Filter Backend PortMonitor JobFiles Web Interface(CGI) BerkeleyCommands CUPSCommands System VCommands ConfigFiles LogFiles Notifiers EmailRSS LPD Support(cups-lpd) Printer cups-2.2.7/doc/images/cups-command-chain.png000664 000765 000024 00000035066 13255074424 021353 0ustar00msweetstaff000000 000000 ‰PNG  IHDR?–1 é8sBIT|dˆ pHYsaa¨?§itEXtSoftwarewww.inkscape.org›î< IDATxœíÝ{|ÎõûÀñ×{çófcsf†1Ìi CÎs>¶BˆR4ñU)©(© ?¡|¾’så°(1r6”ÃÌa³{ìüùýqo·Ý ;ÜÛ½u_ÏÇcÇîÃçó¹î{×ý~_ïë­4MC!„ÂRX™;!„Bˆâ$ÉB!,Š$?B!„°(’ü!„¢Hò#„B‹"ÉB!,Š$?B!„°(’ü!„¢Hò#„B‹"ÉB!,Š$?B!„°(6æ@”>J)GÀ5Ç—[Ù²e}\\\|œœœ¼”R^J)WMÓÓÓÓo¤¤¤\ÓétqW¯^s|ÝÒ4íŽù^‰BK¤dcSñ J©ŠÞÞÞ Ë—/V¦L™ª^^^eÝÜÜ|<<<=<>>->>>9!!!îúõëWãããÏ]ºti×õë××4íos¿~!„ÿN’üggç   ±*T¨âááQ¶fÍš^õë×÷®Y³¦•‹‹K‘__§ÓqòäÉÌÇ_;qâÄ„„„«çÏŸÿûرc'%%í/ò„BXI~,œRÊ·^½zãªT©ÒºsçÎ5»uëVÆÖÖÖÜa¤¦¦²~ýú„7ž¼páÂÎ#GŽ| iZ¬¹ãBQzIòc¡”Re{ì±oüñzO?ý´Ÿ¯¯¯¹Cz¤ØØX¾ýöÛËûöí;ü믿–$H!DAHòc«¶oß~ãÇ\ÛÉÉÉÜáä[rr2ãÆ;þ믿v¿zõê)sÇ#„¢t‘äÇU©RåàÎ;8::š;”KMM¥ÿþ›öîÝÛÅܱ!„(]¤Ï²µµ­`îLáÚµkM̃BˆÒG’ äééùÏÌ™3¹}û¶¹C)äädfΜ‰§§çEsÇ"„¢ô‘&‡ÈÉÉ)eìØ±Ìž=___zöìIi)x^³f qqqŒ=š_|1ÙÜ1 !„(}$ù±PÞÞÞ¼ñÆÄÅűvíZ®^½Jpp0;v¤¤-uÿñÇ9tè¾¾¾ôéÓs‡%„¢“äÇÂùøø0|øpŽ9Â'Ÿ|Bv¼ŸŸP\MO:ʼn'¸té™™™tèÐîÝ»ùõ…BXI~„Aݺu©[·®áö¥K—8~ü8K—.E§Óîwtt4lc‘ýåêêÊ£¶·ÈÚâÂð}RR’QÝ‘‹‹ ´jÕ ??¿b}íB!,‡$?âüüüðóó£mÛ¶F÷'''˜ì¯¸¸8bbb ·ïܹƒƒƒƒQbäââ‚¿¿¿QÂäàà`¦W'„ÂRIò#òÍÁÁ¼½½ÍŠB‘o²Ô]!„E’!„BXI~„BaQ$ùB!„E‘äG!„E’!„BXI~„BaQ$ùB!„E‘äG!„E’!„BXÙÞBäK||<©©©ØØØàééi¸_Ó4âââprr2Ú>%%…„„”Rxxx`kk[ìq !„Ù$ùù2xð`.]º„³³3ôêÕ‹ñãÇ“˜˜Hpp0uêÔáÎ;”-[–^xöíÛ³qãF&L˜@•*UHJJ"==ððpÆŽ‹———¹_’B #Ó^"ߦNÊÎ;ùᇘ?>111†Ç6mÚÄÞ½{6lo¾ù¦áþ† ²mÛ6öíÛǶmÛ¸~ý:C‡EÓ43¼!„–L’Q`>>>T­Z•C‡Ý÷X³fÍ8wî ÷=æîîÎìÙ³9uêû÷ï/ŽP…B™öùvåÊNœ8ÁÎ;9{ö,íÛ·'##€Ó§O“’’¢E‹hݺ5îîÃÁÁš5krúôiš6mZœá !„°p’üˆ|ûæ›oؼy3Mš4aíÚµ8;;sëÖ-&OžŒ»»;mÚ´!<<ü¡çÉÈÈÀÆFþ !„(^ò—GäÛ«¯¾J×®]s}låÊ•ØÛÛ?ò‰‰‰œ}:#!!!îÖ­[±:½ýþ;wîü´qãÆ(MÓ2Šá% !„° ’üˆ<«[·n¹€€€v•4MóJKKóLKKóÐ4ÍÕÖÖÖÁÆÆÆÞÚÚÚUÓ4ok++«›º´´´”ôôô”ŒŒŒÛvvv ¶¶¶ñVVV7lll®;88œprrúiΜ92ª#„¢XHò#LJ)ÕØ‘u³¦i;ÍBq?Yê.„B‹"ÉB!,Š$?B!„°(’ü!„¢Hò#„B‹"ÉB!,Š$?B!„°(’ü!„¢Hò#„B‹"ÉB!,Š$?B!„°(’ü!„¢Hò#„B‹"ÉB!,Š$?B!„°(’ü!„¢Hò#„B‹"ÉB!,Š$?B!„°(’ü!„¢Hò#„B‹"ÉB!,Š$?B!„°(JÓ´â¹R ¨äàààíííëìììmccãmccSÆÊÊÊÍÞÞÞÎÞÞÞÞÎÎÎÞÎÎÎ U/%%%%5%%%%33óVzzúÍôôôkIII×®]»›œœ|8¯× )a†þr­Zµ˜;Žl·oßv¹zõj €²eËžvrrÒ™;¦lŽŽŽ?Ž3f…¹ã(¬’ö;/ÉŽ?þçÂ… ?2w…åS[-°uÆÁÜq”iI¬Ž;¦m0w%É´iÓ\BCCÿcoo_ªÿN&''[ÿñÇMž<9¶°ç²1E@÷RJU(S¦LÊ+†yxxTõòò*;dÈŸZµjyÕªUËËÅÅE¹¸¸àêꊋ‹ öööy:oJJ :ŽÄÄDt::N;qâÄõcÇŽÝìÝ»÷Õëׯ_½yóæ¹Ë—/ï¼víÚš¦ýS¯¯$©U«Vƒgžyf°¹ãx€úæ §o¿ý Ô'?%üw^¢dýÎK½jíéÔy.•ÍGiðEc$ùÉ¡iÓ¦¯7hÐ`¢¹ã(¬'N¬3Eâ&J~”RÊÇǧc5ž«Y³f­™3gzÕ¯_ß§fÍšV...¦¸öööØÛÛãååe¸thh¨7à èt:Nž<ùÒ¡C‡® 4èú©S§NŸ;wnÁ•+W6YêèBË´xñâÀÇü9sÇQX:îVLLÌôV­Z™ä|…J~‚‚‚&ôéÓ§i¿~ýZµjådeeÞ2"BBB¬BBBÊe333kïܹ³Ý÷ß*$$ä·¿þúëýäääSf R!„(ÕªU{ÓÃÃÃÓÜqÖÙ³g¿ûì3*T¨lîx„BSªR¥Ê__ߪ掣°bbbÖ<ýôÓëŠâÜ©ù±jÚ´)>>>¼ûî»8;;Ó­[7ªU«fòàLéìÙ³¬]»–Û·oÓ·o_.\¸Pú²7!„â-ZÔ°U«VCÌGa%$$Ü8yòäô°°°"9A’¥”"00É“'£ÓéX¿~=+V¬ jÕªtéÒwww“Z ¬_¿žsçÎQ­Z5ž{î9²û?@úþQ)))\¼x±È>üܼy“””Ê•+W$çâß& `ª››››¹ã(¬3gÎ,~î¹çŽÕù 4ò“³—‹‹ \¸p•+W’˜˜Hv?A À” sÒétœ:uŠ'NpñâE”R¸ººÒ¾}{ž~úéûŽÉš²³ø‘NÇçŸNtt4têÔ‰N:å騍¨(jÖ¬I™2eX¿~=ûöíãí·ß.’X§NJƒ èÕ«W‘œßR\¹r…×_ßÿ¥Íš5cÆŒ9›‡>ÐÆñöö¦Y³f€~DuܸqüøãEëÚµk9wîo¾ùf‘œ_ˆ“ï¾û®ßã?ÞÍÜqÖåË—O>|xFç΋ìùÉM¥J•xî9ãF’/^äĉ,]ºNgHŠ”Rhš†R \\\ȹå½……aK‹ôôtÃ1š¦¾ÜÜÜ eË–øûûçéEdÅaÑ#? téÒ…°°0^xá®_¿Î;ï¼Ctt4&Lxäñï¾û.¯¾ú*Í›7 qãÆT­ZtÓÌwîÜ!--­ÈÎo t:;wfĈÌŸ?MÓøä“OèÚµ+;wî|äV3{öì¡Zµj†ä'00ï¿ÿ¾8BB<ÄÈ‘#m‡:ÉÖÖ¶ToXž™™ÉéÓ§?ž8qbBQ^ǤÉOnüýýñ÷÷§mÛ¶|Nzz:III9÷ìÀ×××9;;ckkºv2òsæÌ¡víÚ¼óÎ;†ûêׯOóæÍéÙ³'Ù…í-Z´`åÊ•8;;3jÔ(¼½½ùå—_8wî‹-âÿû$55•³gÏR·n]8ÀòåËIKK£gÏž<ñÄlÞ¼GGGŽ9ÂñãÇéÝ»7­[·ôÓ‘‹/æï¿ÿ&44”=zàëë[ì?›«… ÀóÏ?o¸ï•W^aëÖ­,]º”aÆ1cÆ Ê–-˺uë¸}û6Ï=÷ýû÷çСCüïÿÃÁÁ 6AãÆùàƒøôÓOýèß|€N§#44”·ß~www¶lÙÂÞ½{‰ç×_%,,ŒI“&áååÅåË—5j×®]£\¹r 0€þýû›ëG$D‰³f͚ʗ/ÿ„½½}m+++ïÜžóüóÏ;Z[[;]½jÒv8Å.333- `ú¡C‡¦çöxzzú?)))Ç.^¼¸¬_¿~Þí@Ó^¦^>gccƒ»»{±Ö ™säG)U8®iZº9®Ÿí—_~aܸqF÷•+WŽöìÙC@@«V­bݺu¼üòË\¾|™¶mÛ²oß>j×®mÛ¶%88~úé'vïÞMÏž=‰ŽŽfðàÁLš4 777&L˜ÀÌ™3騱#QQQ¬]»–矞îÝ»ÉÒ¥K©U« <þøãTªT‰½{÷2`ÀvîÜižпБ#GxüñÇE‹DGGðÏ?ÿ°qãF¾þúkœ>|8~~~„……Ñ¥KªU«Æ°aÃ8vìgΜàôéÓDFFòÍ7ßP«V-&NœÈ”)S˜;w.ñññ|ùå—,_¾œ™3g2nÜ8Ö®]ËСCqrrbÁ‚”/_žØØXz÷îMXX˜$½ÂâÍž=Û«qãÆ_5kÖ¬›µµµ¹Ã).¶ÀÃæà½€ú*Tèµyóæ…[·n}qÖ¬Yùþ[^á±|ü”TYɹF~†ÑJ©¼×‘+W®P¶lÙûî÷õõ%6öîÆ¹O>ù$ááá >œ¦M›²k×.¼½½qvv¦jÕªÔ­[—{·8ù¿ÿû?ºuëÆ3Ï}ú°eË–Gž{ÇŽ„††Ò¬Y3ÜÝÝ:t(?ýô“áñ¦M›Ò²eKìííéÒ¥ »wïÀÝÝ›7oòÅ_0gÎìííŽ3'¥T’tQ´”^S«¾RªP=ñ‚ƒƒß¯]»¶%%>yfooo<¦eË–ã r|A’+so^j % æ§°I)µA)`Žüýý¹téÒ}÷_¼x???Ãízõ꾯]»6üñÇ#ÏKýúõÎqåÊÃí   Ã÷9“­]»vÑ¡CÖ­[Ç•+W°µµåĉù{aE@)UF)5Ñ穨”©”2Ë»YÕªUsýyž|8qqqùzM¦¦”²VJNÏ?êùyà ,*¥\WD"""X³fQ2sæÌ~üñG `¸ï—_~1|¿gÏCÍž§§'ñññ¹ž»V­ZFÇýüóÏò¨÷‹ 6пz÷îMƒ 8|øp^›)(¥¬”RÀSÀ+€‰Nm—u¾SJ©aJ©Òÿ ò_"ëÉràW ±‰O_øN)õ³Rªa~,W®\s{{{Sýûû×òôôô©\¹r›üWè¥î¥U +x¶"g”R¯_išVä±;–=z Zãââ˜3g'N¤R¥J†ç­^½www.]ºÄáÇiѢ͛7gÑ¢EܼyÓ°â+ÛÀéÝ»7UªTÁÕÕ•o¾ù†¹sç>2¦:uê°råJ¬¬¬X³fI‹ÜóK)ÕøÈ¦J4áéëÛ”Rk€HMÓΚðÜT¿~}^}õUÂÃÃéܹ3™™™lÚ´‰·Þz‹š5kžwíÚ5"""pssãÌ™3†Ú°víÚ1|øp.\¸@÷îÝFs:vìÈÂ… éС 4`ýúõ,X°à‘1uîܙѣGsãÆ ~ûí7Cë„â–õÉ.R„—) ,F+¥Æj𶻝%B)弚õåTÄ—k PJ-^Ó4í‘UÉÎÎÎEÓ¿†¯¯oÍG?ËX‘¯ö*©JÐÈON¾èߟWJ½TÔoŒNNNüïÿcÅŠlÙ²æÏŸOÓ¦ÆSÞÓ¦Mã—_~ÁÙÙ™Ÿþý4öˆ# âÏ?ÿ¤~ýúÔ©SÇЦ 00Õ«W³råJ.]ºÄ_|a1 ÃÉéî{M“&M S cÇŽå‡~à§Ÿ~¢W¯^´k×ÎðG¹}ûöFl‹ŠRª:ðУÈ/½€.J©·5MÓ=ê€Â>|8áááû\N÷¶+oÜøîH³‹‹ ƒ Ê5ŽöíÛ?4ÎÂRJ¹¯/cºé޼°&ƒ•R“¯µìB™"R¾|y£úœÜ4jÔ(×ûíììŒËYfeeEË–-ï;ÆÇÇÃí{Ww–+WŽ=îÏ5‹²³sV1êô?û¢þäÿ @¥Ô»À,MÓd¿Á"¤”j„~4·…Ãpf#•Rã5M+ðrmQpù¹÷Ž£GòÏ?ÿP£F ªW¯n‚°L/>>ž_~ù…nÝôÍ/³þ¶(á£Xfc xdã»Ò.«þbðúÑ7s)|…~Jä%MÓöš#ˆ¶mÛ–ØÿǦ¢”ê‹þPå<<÷£"Ç }‘í0¥T¤¦i«‹øzG)å‹þÿ÷]ëZO)µÄ—ÍýÓÃ]Àz¥Ôf`œ¦iÇLpM‘G…ùIOOgøðá\¿~ððp¶nÝJppð#GÌáæÍ›¬]»öÞä§4ÈùÆ8AÓ´U:àaöïßoèçÒ¸qc‚ƒƒúüE‹ærEnåÊ•¸ººRÐ6èYuóè7*€JJ©Â& yɶ›{²Š0'÷”Ƚ ?øàbcc±µµ%44”6mÚä{«š„„þúë¯ûjÊ›R*ýï»u>{©h¢¹Oe`•Rj'ð’¦i&©ü¾õü}úàääÄÇLõêÕÙ¸q#:u¢bÅŠ,Y²„-ZпâããY±b:Ž .0nÜ8vîÜItt4Æ #((ˆ¿þú‹ `kkK×®]iÓF_ä=kÖ,<==‰ŽŽæ™gž¡Q£Fdff²aönÝJhh¨Ñ‹(EÉO¶ÊÀJ¥Ô.ôoŒ‡òspZZ£Fâüù󆽻&MšDÏž=1bD„[<Ž?Ž·w¾W9¢”ªˆ~ÎÿÉü†~Šª¸<ôTJ½‡~äïN1^Û`ݺutïÞš5k²}ûv¦OŸÎo¿ýöÈU\9eïϵyóæ"ŒôÁ”R^À[À ¤7Mi ü¡”ú˜¢iÚõœìÎu8úôø 2RáÌO°ïCñ{ÁÏ™š™E¸ÓLJ"h…;‡Rª;úÚ½ÒÐcÉ TJ½|¾oß>3‡ôïV¨>?QQQ†- ²ÙÚÚËŒ3ˆŒŒD§Ó1oÞ<¶oßNLL o½õü1ëÖ­ãÍ7ßdåÊ•\¾|™¤¤$fÍšEçÎéׯáááT¬X‘1cÆðÆoP¦Lf̘ÁÔ©SùòË/IHÐoÿñÑGQ£F &L˜ÀôéÓ ×Û¶mÓ§OçÏ?ÿ4Š3«æ§4 CÿƸ@)åóÈgg™?>×®]cÓ¦MDFFÉÆéСƒá9QQQ|õÕWFË•ÓÒÒØ¾};7nÜà»ï¾cûöídffÇÊ•+9~ü¸á¹×¯_gÿþýœ?žo¿ý–ƒúÍ/—/_ÎåË— ÏMNNfË–-,\¸Ð0•-::š‹/ŪU«HJJ2züöíÛ|÷Ýwüþ{þß½•RNJ©7ä/ñ1'`…èb M›6¥[·nÌ™3‡ôôtöìÙèGÞFŤI“ŒšQΟ?Ÿ#GŽ0}útfΜÉ×_Í¥K—˜2e }TÔ³Hwiš¦”RcÑ/]ž’Ÿød³F𤋮ø w2{¨Õ‚úC×Ï îÄÇè»´6Œ‚UýáÏ%rëîqZX«Ÿ„ž†s;î?wJl› 7³Ö+F/×?÷×™”£]Ó®i{6…-àfŽÞ¥Z¦>Aûái8öCá^kfîJ©Ÿ€µ”ŽÄ''/àSàÏØØØBŒÍå͆ øä“OŠú2%R¡úüdffbcsÿàÑO?ýD÷îÝñññáÙgŸeûöí†Ç"""ðöö¦^½ztïÞOOOBCC (5jDPP-Z´ÀÛÛ›víÚQ½zuCo‘ÌÌLÞÿ}&NœÈ7ÈÎŽ«T©BXXþþþØÙÙ‘””ÄŽ;8p ôë×Ï(ÆR8ò““0ø=999O…š«W¯fäÈ‘FKÇ•RT©R€wÞy‡±cÇrýúu&MšÄþó@¿æðáÃyá…ˆ‰‰aúôé¼õÖ[Œ;–˜˜† Æš5k}íט1`J£B§IDATcxõÕW¹téÏ>û,óæÍcòäɆ§cÇôÓÚQQQüüóÏX[[3þ|ž|òn²páBFŽÉ’%K8|ø0¡¡¡†èÀ´iÓ†“'OòÞ{ïå©óp¶ØØØ*Àq`*PÚVRT"«_È­[·Ì³ý¿‡øøx*T¨ÀüùóùüóÏéׯ~~~tëÖÍЗéûï¿'22’zõêѳgOÂÂÂ(S¦  <<¼Øâ=qâDúi.³ýÌ © ðqúòüA'7©pn'œÙ ›Çƒ_#ðÈÚƒøÎ }RÔr2\;ësìM½~„>)i0šŽŒ{F{ÎÃ’ÖàSÊTƒ_Þ?¾„CÀ¥<|ÑÒ³&Š.†Ÿ^jíÀÕ–çØ{|ãópt„ ‡cßÃõBô5M¹E7 hWG½ºGmõ 7lØ@¥J• _U«Vå±Çcذa÷}˜|˜uëÖ' âÀÌ›7Ϩ;|iQ¨i¯fÍš±mÛ6zõêex0==???Cƒ»›7oMK8:êÿæØØØ–;ÛØØFb²WJåZW0oÞ<úöíKãÆ‰ŒŒ4,ƒÍ>.û|”-[Öðf|ýºñÈq)ùý*µ/)³òrÀ…  ‰Î½øì³ÏØ»w/*T`èСԫWÑ£GãââÂíÛ·ùÏþC½zõhÚ´)O=õQQQT®\™š5k²uëVÿ¸¸8vî܉““ÌŸ?ŸèèhlllHKKcçÎÔ®]›°°0ÂÂÂHKK#<<œpùòeà ¤J•*1þ|Cì»wï¦C‡¬^½š_|‘§ŸÖ7>ÍmŸªÑét¾è‹ŠK³Ú:îdq_ôÃ?dÉ’%„þßCÙ (WÎnÓ?êGš¾Ýõßï·þ· pb< NÞP>Ž|WÐW ön¬GßL´4'@G‚‚‚n¹&@¤¦¦Ò¹sgBBBHIIaÇŽlܸ‘M›6±fÍCk‘‡éÞ½û#ë>f÷îÝÌœ9“>}úä»ÐÜ UðûÌp®† ’ÚjÕªj¬V­ša„ïܹsL™2…k×®áããC||<û÷ï§{wý;cΤ& €“'OÒ¡CvíÚeØT¸¯'ÑÃT¯^= è |ˆ¾È°4I>¦ûùù}önàQ¥à¯ÕÊ–MÓz•²šŸl×7€Ï}}}W<êÉ­[·fð`}mvdd$+V¬àå—_fúôélܸñ‘ëÚµkaã-µ 5íekk˲e˘ûŒöíÛ³iÓ&¾ùæ\]]IOOày²“ÕªU«ò÷ßËù}^hšvLÓ´N@7 ØGP hPOÓ´ñš¦å¾·D ¢I“&FmrŽðÂý[˜äìæàà@jêû¹9MÓ®kš6}sÁf $ov!š¦.l±óƒ8ûêWìžý¾ƒö³ voHÎúæVnÇÁS¹Ÿ#|¾>ÙÙô" £>i:žüïݯúX7•\e×%ß¼[Tš¦­Cß}"¦íÎ^ÒÑwÐ4m¾¦¬Ü»G8;;sìØ14M#99™ˆˆ–/_Îï¿ÿÎðáÃiذ¡¡oÛܹs>|¸Ñ9^{í5&OžÌ7?~<Í›7§Y³fLš4ɨþòã?æ»ïôCtcÆŒ!""‚ˆˆ£2—´´4æÎK=¨S§:uâÃ?4,ŒÊöÙgŸ1xð`RRR˜6míÛ·'00°H§Ó 4ò“ó˜RŠBBŒ;Â+¥xì1ã§9‡¼söÉù†Y«V-Ã÷9›§eo’ieeußÊ-Àèh:u ß»ººÒ®];£&k¥häç6Pè>?¯¿þ:áááT¨PÁ°ÜëÖ­$$$0räHjÔ¨ÁG}ĨQ£øúë¯ñôô$((¨HÿñÅÆÆrçÎþûßÿrölÞvwèС‹-¢víÚDGGóÇ5YÌ+MÓ6dõ× LÜqˆ9œ@ßÿc“¹ÉÍСC™9s&©©©=z”˜˜úôé“ëskÖ¬É7øòË/©ZµªáÿdqËZ>Þ&?}~Ð× V^–ËŸG¿Õ‰Éûü¤ßÑÔhúéªØÃ±VÿX¹úðÛ'P¹ü±ì²„Û»AÓàûÐ|8xèG…³zQÚØë§¸~xÖƒî ¡õ4øq„¾ ÞµôÅÔ•[ß#ƒúÁšÁÐx”~ÚÍ.¯‹Ò!«ƒòûJ©¯É{ŸŸK@Þ‹ ¬—y^“õù¹sç©©©899¡”"##ƒ;v’’ÂñãÇi×®4”¢9rÄh èëxâããÙ»w/ôéÓ‡ 6°dÉ®^½ÊâÅ‹¨X±"eË–åìÙ³¦½²?4ß¾}›=zpüøqúöíKûöíùñÇyï½÷øå—_øþûï ˆ;ÆöíÛ2d·nÝ¢M›6$&&R” •ͺ½ÅÂ… ¹sG¿z××Wß[®FÔ«WÏPX[T²’ŸMÓNÙE «iZ^Þ MÖá¹ZµjlÞ¼™Y³fñõ×_ú>?/½ôJ)–,Y´iÓèÒ¥ ÕªUcÙ²eØÚÚbccc4µäàà`”è:;;S£ÝÚ½¼¼Œ’Y___CÒ;fÌÞ{ï=:wîL›6mxùå— Éi@@€Q¢Z¹reÃTÚÀ±²²bРAÔ¨QƒÈÈÈoy¡iZðRê[`0Œ‡¿1^ºèbwUÖ<â9ñèWx}š£Y=ûì³F;¾g2dåË—gûöíxxxðã?âááÀ AƒŒ¶ÌPJ±~ýzvìØÁùóç‹-öÑ4mµRjyèð¬iÚË…½žRêaÿßMòçA\ÊAè8Ð]+k¨]€MV@×ÏáÐ׳ZMjíÁÉKÿX§õ«·ÎíÔ÷ ÎÚc¼þ3P¦º¾f¨Ï2}òtùwh2|jëkx.í×O­•Éúœ:r|Äyܲ>÷vüP_Œ}b½>á 袟3MÓbÑ÷J›Ï£;üé§ŸrôèQV­Ze(cxá…X¼x1“'OfÕªUF=ÅÒÒÒððð`ùòåùj£QPfÝÞâÓO?åÓO?ô#4eÊ”ÁÅÅMÓ8räˆI®ñ %to¯l¿£¯ë1éÞ^•*Uz`eÅŠY¸pá}÷»ºº’%Ðo7]ˆ ú¼ì½‚ƒƒFàš7onÔÔ®]»v†Oü•*U2üîïõ /ÝÎ.nýTë Aƒ¸FAdm28"ëñcPd¤jšöçË“G4IÌ@¿·Û뚦]+ÌuLiÈ!|¬cÇŽtìxùTvBN•*UÊõ~sÉJ4ÞRJ}Eñïí•­È·°qö…Öo>øq—rðøÄ»·ýîÙ×¼ÞSú¯œ‚sô±UÖú†‡Ùª´¹[”Sè=)dˆñl Õ;꿊’¦i¿-Í´·W¶[è×>to¯¼X¾|9{öì!--Ý»w“€««+3fÌ0z^hhhžÐo34tèP£ûZ·nmhWó¨­q¾ýö[Z´hqߢ”¾}û2mÚ4¶nÝz_CÕ_|±X0óȵµµÑÔØÂ… ©S§ŽÑ^O—/_fÁ‚\¹r???þóŸÿ`gWøm—Jhò Û®îÂXVb¦”êÌ¢«k `𲩺úмËJ<žRJ}JÑïêží@vu7MÓV(¥ÖR|»ºƒ~•nžwuÏ‹›7obmmµµ5­Zµ¢V­Z<ûì³xzz=/00ÄWªTé¾)§ìQü7n<òø„„®^½Š]® žìì숉1.ì²²²" _q†YG~’““ Kaû÷ïOBBÂ};8/\¸=zÂüùóÙ±cG®Ÿ4ó«„mlšŠþM÷-MÓn=êÉÅmÏž=\½z÷ÿªõêÕcÉ’%L™2…øøxÞyçÞÿ}nݺ…›››¹Â-4MÓV)¥Ö‘è§Dœ‹ðr1èë< ÙÚ-ÿ¦OŸŽ››/¿|÷#ù™3gøüóÏéÔ©Sj©²Íž=›²eË2hРΜ9Cfff±¾±„¦i»•RM€gÑׇE“¹«ÀdäŽÙeuLŸ¦”Z ¼GÑŽüý‚~4ÿ )O:f̘<¦:;çï-,·E-ùôÈîËçããcT ‘-((è¾Îü¶¶¶F}芚YG~ ò@¿‡Ð½~þùgâââX²d‰¡Wˆ)” ‘Ÿè‹Ý°¦Âü>úè#¬­­©QC¿bÔÉɉCVrr2»víôMðBBB8}ºØK©L*kJdF֔ȻÀ@_B‡þìMÓRL|îù¤¡v`ÕªUT©R…]»vqéÒ%""" ½}Î;‡››¶¶¶lÛ¶ŒŒ t:Íš5£k×®œ;wŽ/¾ø‚ëׯFDDJ):dHœ7oÞÌk¯½–k±uQËJP"•R LtÊ s,®y—5ò×ýÆÂ¦ðè7*5y{Iá`‰‰¹¯ÍEXXÛ·oçôéÓ†Î%Iúü˜<Їxî¹çX°`cÇŽeĈùÚÎàaÌ<ò³}ß–R‘ø€¾swJJ )))¤§§sáÂÃj9ÅÅÅ‘™™ÉßÿmèÁ³qãFÈ¥K—X¼x±QGð—^z‰¡C‡²wïÞû¦>žððp¼½½yòÉ'ùꫯ û}:uŠ×^{C‡1räHòYs1UÂ"‰Oé éýf¢sú7'>p·Íûï¿ÏW_}ÅÚµk «9ßyçìììèÓ§Ë–-ãäÉ“œ>}šmÛ¶1~üx-ZdÎÐÍ;òsàÀ£Û¯¼r÷ƒuör5øôÓOIHHÀÁÁÁ¨ÉZad%?fùÑ4­h—²éÓ§ºI÷ïßÿû3uéÒ…É“'í?uêTæÎk(nê©§8tèá?N÷îÝMºzKä§§'DEE±bÅ žþyÖ¯_ox|ùòå 2İFGG³téR4зêíСO=¥_ ´nÝ:~þùgzôèa8ÞÁÁ___RSS }¾–-[F5?^ß´8##ƒ &0nÜ8@¿Ò$·ÄZQ²4hЀéÓ§³xñb¦NJjj*³gϦråÊT¨P­[·2yòd&L˜`ÔX¸^½zFïæ`ÖšŸüÈ^3•TóS*LŸ>ÝhÚëèÑ£y:N§ÓqñâEÞÿ}4M#33“k×®±{÷nCòÓªÕ÷ïÅ`À€Ì›7˜˜BCC’Ÿ+W®M9µÍÏÙ¸´\¹rFÛ[<Ƚç¬W¯±±±†º’°-†%Y=ò”<8;;?ôÿä_|qß}›7oÎõ¹-[¶Ìõ\#FŒ0ú°›S•*UX¾|9)))†élC?°lsçÎeîܹŒ³(”øšŸ¢Rj~þ•¬¬¬ŒŠß±±±áƒ>0êêS~W"Ózâ‰'xã78pà}+:²·°hÓF߸åàÁƒ†âè¼rpp 1ñîîþþþlÛ¶ÍpûàÁƒ”/_Þpí{·SB”nööö¹®ú2§R3òcj2òS4œœœ(W®;wî¤N:”-[–Þ½{óÎ;ïðúë¯S©R%¢££ñööÎ÷QQ4lllˆŠŠÊõ±!C†0f̼¼¼¸}û67ndõêüí¾ðØc1zôh¨[·.ááá¼ûùæ›4lØÙ³g?ð“£B…BmlZšÉÈOÞm7úÑšìÕ^vvv4jÔÈðØ{ï½Çÿû_Fމ¦i¼÷Þ{0|øpZ·nͼyóÈÈÐïÛפI“4­ù÷ /äZPÜ®];Cgî-Z°páBNŸ>ÍÕ«WYµj•aï¼ððpj×®m8®uëÖ†¥aaa†U}õë×ç“O>áæÍ›ÄÅÅáêêÊæÍ›qttd÷îÝLœ8‘‘#Gú}ùºt)ì"Bñp;í%#?y7uêÔûî«R¥ ï¾û. /šÍ¹åE‹-hÑâîÖ9Lš4ɰ“pNÙ›ä‰â7zôè\ï¿·¿O“&Mr­ÃéÚµ«Ñíì©1¸¿Ž«aÆFû ùúúæÚ÷§N:F !DQ(HòcÕš»T'wîÜqFF~„B‹Sä矨¨¨³:u 5y4ÅhïÞ½×€tsÇ!„BˆâUù«¯&NœxöôéÓE¶ qQ[°`ÁMWWשš¦%>úÙB!DñJKK»nîJ‹äää|ÿ¬ò=ò£iZ†Rjp¯^½¦µiÓ¦ýÈ‘#k¹ä÷<ÅíöíÛ¬[·.yË–-''íÚµ«ÔtWBaYnݺõ—¹c( 233¹xñbt~+È´š¦¥¯)¥flÙ²åÉ   ¾aaaAÏ<óLå{›™“¦iDEE±nݺ+çÏŸÿ-66vFttô~sÇ%„B<ÌÅ‹7W¯^=ÖÃÃÃ×ܱ”dÿüóÏ¡'Nüœßã ”üdÓ4íðð•RÊýúõãjÖ¬êáááW©R%Ÿ   —ÀÀÀû¶®/ iiiœ9s†“'OrêÔ©; Wbcc¯fdd¬Ø°aÃùdv;7Yòs/MÓnk²¾ ”RvíÛ·÷ñññ)occã«iZÙÌÌ̲™™™^eÒÒÒ<222Ümll2lmmlllnf}ÅYYY]³¶¶ŽÕ4-611ñòòåËã´œ{)dùî»ïŠêe•8ŽŽŽ?~ûí·æ£TpttüWÔy?~üOùçÍñãÇÿ4w ¦pv 6›ÆrÞÜq”iIükvRŸ5k–ÌùòË/7úûûwtss«ckkëeî¸ÌEÓ4RRR.ÆÇÇÿuêÔ©ï### \®rÉ„B!þµd"Q!„E’!„BXI~„BaQ$ùB!„E‘äG!„E’!„BXI~„BaQ$ùB!„E‘äG!„E’!„BXI~„BaQþÈO犈0IEND®B`‚cups-2.2.7/doc/images/cups-command-chain.svg000664 000765 000024 00000044456 13255074424 021371 0ustar00msweetstaff000000 000000 image/svg+xml PPD OptionalCommandFilter CommandFile Printer OptionalPortMonitor Backend cups-2.2.7/doc/images/cups-icon.png000664 000765 000024 00000011430 13255074424 017572 0ustar00msweetstaff000000 000000 ‰PNG  IHDR€€Ã>aËsBIT|dˆ pHYs··šcS+tEXtSoftwarewww.inkscape.org›î<•IDATxœíy¼Tŕǿ‡EE4¸#~EŒ£Q³ FâJ4“E͸ÇOÔù`2qFÀQM$“1¸ebĉΠq4jŒ‘Œ{’qa ð¹„EQDàùãÔµï»t¿î®ªîÛý^ÿ>Ÿû¹}«k9uëÜSÛ9§DUi¡û¢GÞ´/Z ÐÍÑb€nŽts´ ›£WÞÔ ""À®ÀžÀÀÖ@?wO~oÞ.q­V©êƺ_CHWœŠH`$p°ÖèC­³þ˜ <“\ªÚ˜g®è "}€C€Ñî:èY§â—S`ˆÇTõÿêTn45ˆÈ§³“01Þ˜Ü Ü®ª+ó&¦šŽDd[à›XÃïŸ39a=pÆ jƒ¾è¦a×ðÿHã|í•âeàFàZU]—71i4<ˆÈVÀ8`<0 grBñ20NUÌ› Í"r:0Ø9gRbã~à|U}5oB’DäãÀMÀ±yÓRC¬¾LQÕ yÑp "§×ýó¦¥N˜œ¤ªÊ£ð†aÙ¸ 8!oZrÀ;À—Tõ÷õ.¸!@D¿öË›–±ø†ª>PÏBsg9øù ôÖc«y˱ÕÃþÀ¶î޻δlÎRÕÛêU`® "c@ß³x›‚-–¥®¥ªºªúú;bKËŸq×ÔvB Tõê–‘*M5— 8Û\Ñ\óaB½#ÓÝ[ü1°¢Fô+pI]Ú!§Æ‰õy1_X;ð0ºŽõè Z‰ïØõ9¶Ë1ðYL,Ç|YwCó`æT½†F®×ÀÎ]†ÜKZñ½ |5φ/RÇ1Àˆu|èÑô l ̉øbîvÌ»ÁKÔu `"°!R]/ê p]¤—±8=ïF®°ÎGc‹<¡uÞŒhZŽÔø»æÝ°UÖý“@[„º·ÛĦ¯æZÁ"² 0-BVOǨêkòªTõÏØÀ7TUl7à¼pŠ:¢æ A"2SÙ Á\`¤ª¾¤\ "€ÙÀà€l–ƒUu}¢¨±]€ˆAxã¿„}ùMÛøj+Ž_Å–ž}±pJŠ 5“"ÒxÍRàmrÕë4DälL=Ì/{k¤†«¥øaÿ6ptWj|U½ ¸5 ‹½€±‘È©pzú¯Û{f¡XŸÿ»xT5œáJ¶ë胧Uõà´ÔJ|ÿƘÖU@UW×d1BDAK­$À,àÓžÉW{ªê›Eòì ¼ )ÍZ§2~®{¼QUW‰È¹ØöTš™DdwŒAWªêM"28ÓýýàPàSØæÎµêôõDd;àÛ.Þ=ªú’gý:B¥Àuªú€ø AXÇ,xœßIÞÓ]œé™ðÁ©ôÃ\X›{^l—Š{Œ _àž÷O¥Ý ØxÏ=OL¥›æÂf½"½«Iïiv£.ýC@Ú?×Ç"Äa ¦PTu1fƒp‰ˆì."£€30ý…Ó4ž…ð5ØÎ¨ö‘¿ % *ˆÈö˜xõŸˆ/7o‰È!UÄ¿x ³&¾˜êÂ/s+{QàÆ¿õLÞJCl pÐÇ3í]ªúDDZÜ 0Õ­M”…›cŸ‰}GC°¥ÜŠ%IøM@Úà`4‘b>¸,-܆í#ìüs¥‰Tõà© ©ê¦¸¤ðÖ§û qÓñì™vŽªþ¥‚x•¼¨bqÎÅúA^YˆÈ>À©© I"²E%i«ª.Çö:|ðÙJ¥Z)Äd€Á_¥jÐÉÔ0;øšúýF6‘ª.ÀÄ÷VÀåå ‘žØŒc àaà]l[wR…tV ßn /6eõFAN}ú žÉ7wVwž»%"ÃUõ/"²pš _ªªo—H;Û˜RA9bîeVcRà+ÀO Eä>UU!½•b pgÚ¶ ’#ÍgGá?Ÿ}°Šr¶ÄT¾Ø,¡£ÚÕ驸m–”“°#SqK­ >pÏßrqzO»°ù@ŸØë'y]±º€ÁÈí•FTÛ…MË–acޱú×Tuz*úblçlm*ýÃÀÏ\øü{~“Fã1湸ťkÇ<’,ÀfgUSÁFF”¥`ùìëªk0ÅN/¯"²…ª~è“¶C°p&߉{} ÕøáˆÑì¿­\ÝÍ¡[舳€þv5‘¿ -3Ák² 4nwP2ñ6¨êû%òÛ ªï»9u? ]3*hÎA/lL!”q:©ª«SiÖ©êúly%h~×9²eï‹u™ £J¾3€ÿÆoô¿ž* 7±uùl>k1Irh*Þ%Ê\‚mæ$ñ®qá÷¹çSqGeÊ~Â…ŸL(W?—æ÷¨Jüg𴪣ªGb:[µûf&ÞÅ.ÞÑŽÎ×0fSAC‹Šý¡ª7©ê0U†™€¼•„¹ðrøºˆtæk Öø³0™±ªº7æ?‰R´U‹ÐA`5[¬Y„0ÀGPÛ>žïwè$Þ& ËÄKËdûf¾>AD*iÌj‘HëÝ*j¸}þ¯¸Çñ™ñȥ؊æ$7 Bhð‰€´! °ˆ|ûš÷¢àXêéL¼ãœ( Þ=Ú0—4a)¦ðClÜ12€Öb˜‰-*þ•‚J‚„éÚ§à#5ûDr}àîÛa]œ7BÀWñs¦ýã‹Ãؼ±gweÂÆI;I+sÐ8ø{àp9£zËb¶ò=ùÏÌýÜ}#ö®’°{3ñŽÀ§Þí|àÍÀ©Ì¬/¼¸û2ŽËNŸ0¿Â#°/ø*6MDÊÚ+¸ê9ØÈûJ´œ‹åÿöõ÷ EÒÓÖ¤KÛ‚‚4X‹©¥íNFA¨ðõÝ»:°ÜTõ»Ä[ ªÏ¸ßOŠÈqØ  ”Õ?PÕ?ˆÈ4lí?*8\‹™z}.Sî ™‹mõN‘Ý3]D¾l‹€¼$@(ø"Q¼Ø±Š4ØÏ–‚À~ë볇IŸ¯ˆÈE"ò_øoE(ä%|±ØÝw«4šQç?Õ†PÕg)b+èÖ)ŽÁ¤£€+€“1;e•Z*EÐn ˆ¬Ä f¨jvÎ^Iy{»`sî’ƒH9 cîç5åPDvÆf kUu–[Ç”äçŒD†c˱sJä¹@M+ ß ëV>TÕ§2iÀÄõU}5UÞ몺(okL`–ª®Mý×Ûoù[Ì<¯. … B dTÜb€AÈ40äøo%Ùø.Ïâó›Uõ1×ÇOÆæÔ7«êRévÅhë‚f‰ÈÀù.¯vlunªª>éúÞrfj?w÷Ó:‰sË7ך2.ucƒ‹SÿŸ—ÔÛÀ£ñWèYæá¶MWb’¤ƒB(¶˜(oöN¥½Ó…ÏÃ\¼IÁWñ[ttçvÖÅ•«Ç9‹J]ÇÉëû™z]šù¿¬íÞ²ï4€ `€ó,sf’ûÊ{`_µ¯¸8ƒ(X÷^èÂK•}„ {Ô=OvÏ=€¸°˜t<&u%ÌrY*l׬ÈÄO®Eà¥L½žÏ‹Bº€Rú÷•À×&~»oÂf0í"r& TDz©êë"r9fr‰ˆüÃwªêãîwr>A»ˆôpy]IÅ´‚f&‹H²X37žü\—OÃùH° ""©êÝÔv_l§r`•ï#`þ`†g™?Hå±³(:‰×[êUàUwØ%çßSy-Å,NÉæ•ŠŸt=Çg ð&™Ò×x'-­¦»ÿ&ºçŸƒa€tTUªæªØ$Sf/LägN¿3âHÅÍ«\P$¯+0I–ÍëL(vµa€¤;J”Sf»çƒ›Š\ÅVwRùήß–Û S»ÛTÇŒC2ñîwÿ-¤„W—×ç]^m.þ&2.i+`€eئNúúTè D›=(ð§lœfa€%ø1Àóe Æö¾¥ãè¾ð×ä…fÒ$J˜3+Ì«Ö+v€S5 ÐÖ íYø÷;‘>òb€ÐÍ ß Ï ð¯˜VÏ(LU+À~‚‚Å’b Ëä5>•×®\¼^%}}Ddd‘kP‘¸w¸{28¬Ô86>%À#øI€÷<Ë;3•ÇLd'ã_áö6ÊI€"y½›Éë—Eòò(¶hµÙ×MÁØô©bR¢^ T!ÄWô‘ÝUõåj©ê4™í¡Çìã‹©JݪîM¦0óòñ\…yÍîn+’×]˜†NV2,¢£'‘,^ÄÖ’8‰&Ô•Ø^ÿ]©ðlœš#t;øFÌjÖ'¨ê}Þ…·yÀö¸[È¡ °¸|”’h1@ t â*¥Å)ˆÈǰ 6ÌQÕ…> CàL]Ùçè×ÝD¤¿ª4u!Œ¢0=¬‡-vU .@ÍÜjNÙˆ¥ÑO Ï¢çU¥ð‚oÂ"ž HÛê Z>JQ¬#`,ƒBÆŸP~W/ÌÓÍ-¢*FÞ`ŒˆD³rirøvÞâ"0€šOÝͼsVˆ>,{»-ÜGà« ’/8„H“#ÑÐÌ8 mûúX 2í,rº3¾¶é%@OlS¤;ãËžéÞÒ”™šb1À“4êgi{WÇ"¤Ip1Vot¦…T1¢žê|,Æÿì €/«êq(j\ˆÈLЪÅzÌÍþ;¡tD•nMzjÙˆcJèAHM‚KðߎŸ£ñ¡6‡GßB˜RãPŠû÷ë2‘¡˜B_DS#Îj‡>ߘͥ]|upþ}ÿZ ZY«ããÿ#0ý¶À1ÎÆm4ˆÈÉ„-|ý\3g ÑsØ!c‘_¾Ó÷p¬ª~P.b3@DöÃ|ÿú¨Ð° qR6 j%¾GÁ©±/Fww…A¡ˆ À X|Ì™E´Æ‡2€[º2BVc€Ûݳ)áhŸmà‹W(œµ´;ø=qÐzÝ\/{¹Èï@0%¡õ?©&ôÕá…¿#‰Í˜è—w£VQ÷¾Ø†Mh½Ÿ!c¬Ú4 à^ÄäH  ˜1æáy7nuÞøc¤:\3:ëô2zb'{Åb‚v'VR`nÞ_T×;jJk_Ê ¸º¤4ÀΜHÁM]è5غK0€{A#)}¦_¨4Ø>džï‰9œˆõÕ«Ëëã5§=‡—u¦Ì“ ["½ødëóEL37f]Öû׃þš­v9›"‡$DÄ㘶ÌCªb¾ÜQmcë_b+±l¶Ä9ߢȅDdv,[­±sý²s¹,¹´‚%f·1B£MÁ¹S-pžª†(ÖT…Ü>’×çk¼MŠ!\ØÇ2WŸâIk‚«Tµ®º‘¹2€ˆ‰mwgÁMØr“µÎ ’;8eЩâ0§.„Ø2ïãyÞ,ª:;)Š¢cáIl´ŸKãCƒ0€ª®TÕ±#ÕƒÕŠ €Gk iW(¢ ÈBDvÄ”KÇæMK ° 8¥^Ó¼rh †ª®PÕã1¯Y!–Ç„ä<áÒøÐ  9óí¿wÞ´x`æ³øUvès,4ÀG+p_ÃÖÜGÓ Ò+……˜FÔíªº>obJ¡i ç‚ýàt`Ï|©é€õ˜ÒçO{5ÀyS½Ð” †;Ÿw4æhñP`ë:ÿÖà¿s׬FþÚ‹¡é wðÃg°mç}€=0ç !§œ&X‡MOçPhð¹jGÀ7-º”‚;¶mf´º ¦«×;i¤/¦Èñ>6E[éî~«ª÷i§ŒnÁ-”F£¤[¨1Z ÐÍÑb€nŽts´ ›ãÿÙ2¶{LåIEND®B`‚cups-2.2.7/doc/images/cups-postscript-chain.png000664 000765 000024 00000042132 13255074424 022137 0ustar00msweetstaff000000 000000 ‰PNG  IHDR¼–<[:sBIT|dˆ pHYsaa¨?§itEXtSoftwarewww.inkscape.org›î< IDATxœíÝw\•åûÀñÏÍV¦€‚Eœ8Jj®LsæHs´ôkšýÒ2Ë2S3ÍÒÒ†£ÔÊQ–öͯ¥ˆš[ÌŠ ¹7ÈPd<¿?8€¢ÀaÆõ~½ÎK<ç÷aœsû¹îëRš¦!„B!DYefê!„BQ”$àB!„eš¼B!„¢L“€W!„B”ið !„Bˆ2M^!„BQ¦IÀ+„B!Ê4 x…B!D™&¯B!„(Ó$àB!„eš¼B!„¢L³0õ„%ŸRʰÏz³µµurrrzÄÞÞ¾²………‹™™™3@ZZÚ”””뉉‰×bbb®Þºuë—õ¦iZª©ž‹BˆòGišfê1!J¥TÀ×ÛÛ»½““SSWWW·J•*=âàààäèèhåäädéäädíèèhcoooegg‡öööØÙÙo¸ÅÅÅw766öNLLLRLLLrLLLrlllLLLÌ•ëׯ_މ‰9¹×4-Ѥß!„e’¼B”cJ);ooï‘^^^]]]ÝÜÜÜ\üýý+ûúúÚV«V ¥T‘ž_Ó4Ο?OxxxbXXØÕË—/_»zõêÕ3gÎüµXÓ´¸"€BˆrA^!Ê¥”rwwïV»ví1 6ô6lX-//¯•Ï•¶|ùòŽ=ú÷¹sç_¼xñWMÓÒL=.!„¥“¼B”# 4ïããó\¿~ý¼mÌÌJTœ{Ÿ´´4BBBî¬[·.òĉ_;vl¾©Ç$„¢ô‘€Wˆr¢iÓ¦ &L˜0¬sçΦ‹1¶oß7{öìo8ð¢©Ç"„¢t)ÙÓ;BˆB¡”êäçç÷Li v탂‚ú*¥j›z,B!J x…(\gS¢ ®\¹òÐÒÔãBQºHÀ+DùoffÆÖ­[M=£íܹ“»wï\3õX„B”.ð Q>¨^½zqóæMf̘ÁöíÛIK+ùEÒ­1cÆ ._¾L=dáBˆ|‘NkB”ffffôíÛMÓØµk³gϦbÅŠôìÙ“Zµj™z|ÙDEEñóÏ?“˜˜Hûöí™ø+++zö쉦iX[[‹§§'ãÆ£sçÎF? ™áBa Ii¢|(PoÍš5ùã?Ø»w/uëÖeáÂ…†Çž~úiþøãBCC9vì¿þú«á±ùóçBXX“&MbìØ±„„„=™áBa x…( %‡W)EË–- »ï17nÌáÇsÜ·}ûöŒ7ŽE‹}~™áBa x…( T‡799™ÈÈHvìØÁÂ… éÓ§á±›7oɺuëØ´i½{÷~àq7nÌ©S§Œ‡Ìð !„0†äð Q>h†÷Ò¥KLš4 777† F×®] mÛ¶3gÎàëëËçŸN“&Mxœ””,, ü²#3¼B!òE^!ʇ¼Õ«WçÇÌñ±§žzŠ7ß|3OÇ9pà>>>FCfx…BC^!Ê“6žHJJâ—_~añâŬ]»ÖèãH¯BcHÀ+Dù`’ÆÆ ÃÆÆ† *àççÇš5khÔ¨‘ÑÇ“^!„Æ€WˆòÁèÞvíÚ±}ûö›>}ú÷ûóÏ?:ßÃÈ ¯BcH•!Êi-,„¢Ü’€Wˆò¡@eÉJ IiBa x…(d†W!D¹%¯åƒI«4–ô€Wfx…BäKéBä…Ìð !„(·$à¢|(3¼’Ã+„Â¥ÿP‘2Ã+„¢Ü’€WˆòAfx…B”[¥ÿP‘2Ã+„¢Ü’€Wˆò!ñÂ… ‘¦DAíÙ³'™áB‘Oð Q>,~ùå—#îÞ½{×Ô1ÖþýûS,,,Ö±¦‹BˆÒE¥_"B”qJ)ÏÚµküÚk¯µèÑ£G5 S)O.\¸À7ß|sõСCß„††N4õx„B”>ð QŽ(¥|‘5jÔè×°aC &¤úùùY™z\÷JLLä—_~I ˆŽŽÞ¼k×®÷4M»aêq !„($ࢠSJÕ‚€Žéÿºg}ÜÉÉéÛæÍ›»×«WÏ·Q£FÔ«WϲvíÚXZZë8¯]»ÆÉ“'9yòdjTTÔÕK—.ILL|wÛ¶m;‹u B!Ê$ x…(C”Rd·A@lz–hšö»RÊÜÙÙ¹žŸŸ_gKKËÖNNNNNNî•*Uróññ±¯R¥ vvvØÛÛcgg‡­­mž‚bMÓ¸}û6qqqÄÇÇ“@LL ‘‘‘üûï¿ññññ—oݺššaaa±ýÂ… ¿íÙ³çr!};„B@^!J5¥”+™nG Þ6¶[ÓoÇ´<üñ+¥,Û·oߢJ•*-€Ê)))Îiii•RRRŠVVVÖ–––Öš¦¹™››W033KVJ]KNNNʸ™››ÇYZZƘ››ß477¿Q¡B…hKKËí . /”o‚B‘ x…(E”RŽ@{2gp9ØMv¢·Û€Cš¦¥á¸B€@`»¦iŠê}Ú¦mÛ¶¦†B« ¼UÚƒ]€¨¨¨ #Ø…¼J)åîîÞ­víÚcžþy¿aÆÕòòò2+Œ1ªW¯NõêÕ+>þøã5H„£¢¢º,_¾ü…€€€¿Ï;·øâÅ‹¿jš–fŠ1 !ŠW­Zµî˜z BQœ–-[öhûö퇘zs%<<|zÇŽ åxF¼ 4ß·oßçúõëçhcff’87Wµk×6›>}z­´´´Z!!!Ö­[Ù Aƒ¯Ž;6ßÔcÂaaaîýúIjŸBˆûy{{¿ekkkkêqTTTÔ’_|1²°ŽgTÀÛ´iÓ¯¿þú°Î;?¨ÌT‰cffFPPMPPPƒíÛ·OoÞ¼yݼhêq ‘_’Òw’Ò „(OÖ¬Y3$  d-d7Â… Žïß¿f÷îÝ í˜ùž–UJuòóó{¦4»÷ ´ ê«”ªmê±!ŠŽ¤4!Ê‹wÞyǦV­Z“,,,ò¿hªIMMÕΜ93wÚ´i…Z|À˜<À¹0a W®\yhiêq‘_aaaBˆ’¥yóæS<==šzõ¿~ýú--ìãðÆ›™™±mÛ¶ÂK±Ù¹s'wïÞ¸f걑_’Òw§OŸ¶1õ„¢¨}ùå—^^^^cL=Ž‚JLLL<}úô»Eqlc^Õ«W/nܸÁŒ3ؾ};ii%¿èAZZ!!!̘1ƒË—/Ó£G€âíº!„(V’Ò „(j×®=ÍÅÅåS£ ¢¢¢V6lWQÛ˜€×ÌÌÌŒ¾}û2eÊÌÍÍ™={6 ,àÌ™3…>À‚ŠŠŠbÞ¼yÌœ9sss&OžLß¾}3‚ô’© q’”Ò––Ɖ'Šìøñññœ;w®ÈŽ/Œsþüyâãã‹ìø'Ož,)B”ß|óMPÍš5Ÿ6õ8 êúõëÃÃçÕñ©Ò 2šH(¥hÛ¶-mÛ¶%!!M›6±nÝ:”RT¬X‘:uêP·n]Œm<‘é'ˆˆˆ ""‚Û·o“––†‡‡£F2to˺=2Ã+J¡‚¦4ÄÅÅ1mÚ4BCCIII¡~ýú̘1ƒš5kæºïž={¸qã+g“’’èÝ»w‘½û÷ïgùòå,[¶Ì¨ý¥JC¦•+Wòå—_rõêUÜÝÝyñÅyê©§rÝïöíÛÌŸ?ŸÉ“'î{ûí·4h=öX‘Œõ©§žbïÞ½÷½n !²SJ©;wN­X±¢µ©ÇRP§NúlìØ±ŠêøÆ¼f9ÕܵµµeÀ€†ÿß¹s‡S§N±gÏÖ®]kø´nnnŽ­­­¡pÆ×yi-OBB‚áëøøxRRRPJaffFµjÕðññ¡M›6T¨Pá¡OBfxEy”––F¿~ýhÑ¢¡¡¡XYYñÃ?УGBBB¨\¹òC÷?zô(çÎ3¼*T`ÿþýÅ1t£HJƒnÉ’%¬^½š/¿ü’ÚµkÎÈ‘#¹sçƒ zè¾III,_¾<[Àûé§ŸbiiYÔÃBäbíÚµcjÕªÕÁÔã(¨sçÎ:|øðœ'Ÿ|²ÈÎQ Þ‡±±±¡aÆ4l˜}Á`jjª!pÍÐ^½z5Û}€!¶µµÅÞÞ'''<== ÷ÙÙÙannnÄS^Qz¤ñÄÏ?ÿÌ­[·˜>}:\ ÄŽ;X°`ï¾û._ý5·nÝb÷îÝ\¼x‘gžy†áÇsãÆ ¾þúkîܹñcÇ bôèÑ :”ü€Ý»w3}út¢££iР|ð?~œÅ‹ãîîΆ ð÷÷çõ×_§f͚ܽ{—¡C‡rþüyéÕ«cÆŒ)ò«BåERR³gÏfÕªUÔ®­WbôõõåÝwßåå—_æé§ŸæâÅ‹L:6lØ@‹-xå•WðòòbúôéÄÇÇÓ§OÌÌÌX·n³fÍ¢[·n´jÕŠ›7oòÆo°oß>ìíí™4i’áÑàÁƒéÕ«_~ù%ãÆ£gÏž,Z´ˆÕ«WЮ];žþyªW¯n‚ï%Ï_|Q¯N:lmmë[YYÕîû„©”RÞÞÞN×®•þõ÷–––u{÷îýï_ýußcš¦Ý¾{÷î‰ØØØC‡~Ò¤I±ÆœÃ¨Þ‚¼™››ãè舣££ÑÇ( ¦œáUJ5Nhš–bŠóç×Ý88ý;܈[7¨Û*¸@|4\þ j?ž¹íø'|zû^¿ßÊj‚•}æ¶)·áôpõ88TƒZÀ¶Ô§ÜçL)UðÔ4-¢ Ç*HJÃÑ£GyôÑG¹÷*MÛ¶mY³f —/_fÙ²e¬\¹’Úµk3~üx*V¬È°aÃ1bçÎãÝwõE´·oß&<<€ØØXž}öY>úè#{ì1f͚ŋ/¾È† HHH`íڵ̛7;vðᇲtéRÞyçÌÌÌxï½÷ðöö&66–áÇӬY3Z´haìÓ4”8sæ wïÞ½ïûÀÍ›7¹téwïÞeóæÍÔ¯_ŸÖ¬Yøqãøå—_xë­·øõ×_ j {ïo¼……[·n娱c :jժũS§Ø²e ß}÷ÑÑÑÓ£G”RtîÜ™1côEå_}õ .dÖ¬YÅ÷¢„úé§Ÿ†µiÓæ}—ª¦K1²K¿=ˆ'ЩråÊÝ×®]ûb¿~ývä÷FUi(C3/¦šá UJ•øn(—Âgàïµ€‚Àâ¦wQv·ü_öícÏÂÆçõ¯µ4X7P€OüŸ5†moéÅý ókÂÉŸÁÌÎn‡C_ã+~À1¥Ô\¥”É>íÅÇÇcooßývvvÙ!µmÛ–æÍ›S©R%† –-[r=ö¾}ûpww§GØØØð /°wï^bcõãU«V%88+++zõêÅÎ;°°°ÀÜÜœ+V0sæLRSSùí·ß åùJJƒž³mkk{ߌ¹µµ5–––ÄÅÅúdÄóÏ?µµ5Ï<ó §OŸæÆ¹ÿ?þ`Ô¨Q888@Ó¦M³•­|î¹çpvvÆÏÏC¾·››[¶lá½÷Þ#<<¼Ð~楔2WJyÂq¼”RÆ]‚ÅJ)UC)UàÅÀé¿;Í rŒ¥K—úûúúÎ-gÁnžU©R¥··÷¢9sæäû}´Ü¼% ‡×ø¯Rj£RªŽ Çñ@iɰ~´}žZ ¯B·0j_ö™Úܽ½¾„g~…½Cr"ìûüúÃK õè¹ÚM)ºçRBX€SJ©QJ)cþþ T¥¡fÍšDDÜ?É‘mÑZ•*U _»¹¹ñï¿ÿæz츸¸lûUªT kkkC õ±¬ö¥K—èׯÖÖÖôïߟfÍšqåÊ•|?·¢ ”ꪔêPÇyN)å]CÊ7///nÞ¼ÉÕ«W³ÝÿÏ?ÿœœL5€Ì2Ð$»¸¸péÒ¥‡;--ÄÄÄl?Û*Uª‚èŒÿg°··7üÜGÍ¡C‡èСÁÁÁ\¾|¹`O´(¥‚€0`X!n–~LQ)¥l•Rï'€š…pHK`ŸRj©RªJ®[ç nݺo999¹ÂXʬ*Uª4hÒ¤I¾#£Ë’•v%(‡·úÌߥT‰j×|éž¶ÐtTöûmÝÀÚˆ‘ZÙBj2¤&ƒ'\Ø­Ï —C•%ÀA¥Tûüî\”†Þ½{sàÀ>l¸ïúõë¬\¹2Ûâ¥;2¯ýùçŸtìØgggÃŒí½|||Ø·o_FSöïßM¶€''›7o¦S§NÓ¬Y3Nž}úøÆÄÄpìØ1@ÿˆ‹‹ÃÏÏ[[[4M#99ù¾c›™™Q§NÃiìØ±Ÿ‡ŽéÖ­[:tˆ×_ÀÀ@¢£MÛK%}6vðP˜ª(¥ÖƬ±(J7ˆÞ ³Až"”R¯+¥ò\=aÒ¤IfvvvÍ q,e–££cÓüîSd‹ÖJº0Û•ð*0D)õ°TÓ4“íæi¨äÆÍCf:¼ =Ÿ÷;ðë6• É0=-â›ÇÁ²4š¿J}Óê|ilWJ­&išv¶¨OX¥JæÏŸÏСCéÔ©¶¶¶lÚ´‰Áƒ”9eccCÏž=©W¯{öì1,:jß¾=3fÌॗ^"00'žx°ŸŸO<ñ:t ((ˆõë×óöÛoß—/|¯Î;3wî\*V¬Èñãǹ{÷.ÎÎ…ó‹ß”†ôt“iÀËä°H¤€2þ·¦ÿ]\ç³fÍbĈôíÛ—¦M›²oß>ÃÏ råʼúê«´lÙ’­[·òüóÏ£”ÂÒÒ’ÀÀ@ DíÚµùàƒ²{Ê”)Œ;–½{÷ràÀêÖ­K—.]:üýý5j®®®yº‚P”R¶Àd`"…ôÜë) »Rj.0SÓ´„"<—x¥T+àc UŸÊ˜ ŒRJ½ªiÚ¹íàááÑÈÅÅ¥Z«L°²²zø§êZY²Ò¦Íðfå| ¼ ”ú¦iEÒm$¯*¸Àí›~\™é³µY¥Þ…{?%\Ñ£=¹Üé÷YÚBÐ èð6œß !ÓàÊ1軺PŸBiÑè©”úø@Ӵćm\* ={ö$ €C‡qûömFMµjÙ_c»uëÆã?ÎÙ³g™5kúKEåʕٿ?ǧbÅŠX[[³bÅ Ã~ü1àìÙ³ ><[U€÷ßß°]•*Uøì³Ïððð`ç΄††Ò·o_ÜÜÜ ³ÈM›6Íu†¸0¤§—ŒÞCŸ/J_/¦ÿç{ñE~U­Z•7ÆÙ³géÖ­Mš4ÉöaÄÁÁÕ«WóçŸòòË/ãææfxlÉ’%\¸póçÏðÚk¯ïÔ©¿ÿþ;û÷ï7üne÷³Ï>ÃÝ=3çý÷ß7¤Î¬^½š;w’ššjø}̰lÙ²\KKDú¬Í `àQd'ÊÎ}6ñY¥ÔëÀJ-ýH=¥TUà`0ú,lq©¬WJmÆkšvôAZYY¹H¹¿¼QJåû¢Xfxyûí·=‡«cÇŽ<ú裆7ѬRRRhÑ¢aaa¹wëÖ­´k×Ψz%l†÷^Í€J©ÕÀkš¦Y!æ‡qo —õ* •ëßÿ¸}U¸I±`ž>~qŸ~Vm^ƒŠ®9ŸÃÌj´×ó|W=‘ó6åD`*0\)õš¦­zІm<zjB§Nº¯¯/¾¾¾÷ÝonnN£F ÿoÙ²e¶Ç›7oNóæÙ×mØÛÛg+QhmmMÓ¦™W¤³ÍgÔ.hE—¼TiHÏÑ46úDÆñB•R? ÿé ¿……-Z´xhõ gggCÙ°{yzzâéé @½zõ²=æáá‡ÇýqcÖŸ1íwÀÌÌŒöí33zZ·nmøº0*t¹o[sssæÌ™“§ãŽ;–ÐÐP\\òŸßþÁú@ OÏ<©”ú˜£iZ±®8·uƒvoÀšÐósp÷‡Øs°û#h7\ê«/l›m&AÌ?ö5øöÍý؇¾§šàÙîÜ„ƒKôt‡¢tþOœ”R%}FÅX©”z ø)Þ [¶l™ã‡ÑÒèa) J©šÀ‡@~c‹Ô —Rjy˜á/ ŽŽŽ÷i‹•RÊ ýó³ä>Ã×U)åTÀS>šËã­Ñ8-&kšfúU{eŒRª/úßxÍU)u5÷Í*·ªæÀ ÀÓJ©w€…¥¥-Z”¯cg­ÒpÏÊì)ä}‘’`]À[^_4=€o]J©¢»®Ÿ‹³gϲ{÷n:v숽½=Çç»ïò‰Ì›7œ:'¥TOà0›¼»¦`>Æcéc.°¨Íúz ï®`㤗˜ŒØhüñÒRõ&DE%5’ ¸”O)åšþáôù vMÅø-½û, çðÞküøñ4hЀ€€5jÄÝ»wñððÀŸ‚¤4”FÀ!¥ÔÀÔ*RÀ¤<°G_\3J)5ñÓO?Í×ÎnnntëÖ ÐÓ‹¾ÿþ{‚‚‚ˆŒŒäË/¿$&&†Ç{Œþýûz=Ýï¿ÿž={ö`eeŰaÃprrbß¾}œ:uЍ¨(:wîLdd$-[¶ä™gž¸¯ø•+WX¼x1§OŸÆÃÃÃбmÁ‚tíÚ•o¾ù†ÀÀ@*W®L||µ;JŸ¾yF_Ü|úw¨ÛSŸì0K0ز]ö®_¿~žJ>Hýúõ¯Ð-=¤ªt‰uè‚^#¸X¹¹¹1lØ0-ZDhh(7Îñ÷æÖ­[$&ê…%š5k–k£‘b©iZWôÀ÷”©“§€'4MëjfIÎ- ó¡ñ0è½L_ƒÑê?ðSzPÊmXÔv¼¯Ï¾j©zt€¸Áóõ%nžãk ãt=Ø}¦öF¤äþ<BÞÑ×vdÔhÏšª`_U?>èénY2\Ü ¸2EÓ´ùè)!‹)¹%GdÐ`РA¹.Ž­X±"cÇŽeìØ±|ôÑG;v ///¶oßNHHH®'rvv.pÀ[ZóÊ”ïÞ *ðꫯæøBØ«W¯l5ÍÌÌøÏþcøÿ«¯¾šmû^x[[½”ÞŒ3èØ±#‘‘‘9¶½|˜R8Ã{ iZMÓŠ|ȾO`ãó™·ÿMÔ/O­H_ÀŸp>OÒR ¶B<,êhš6;cõvXX˜ûÃwËÎÅÅ…€€ªVÍ,ìáá‘-aaa899Q±¢žYuï϶ Wá ƒ¦iÀkèKª8ô16Hs¡³s×snµ48ö=x´€ÞË¡íëúìo§pî­P\êÀ€5°²Gf€ìX]¯ºóôO™·à3â©ÞVo_Ÿ¡0ÚÌkšvMÓ´ç¦@HÁX䮚¦õÔ4-˜XZZ’Qµ'crâÛo¿eàÀ$&&2kÖ,ºuëF½zõ¸xñ"ÿþû/ä·ß2Ëm„……1pà@:Ä?þHÿþý©_¿>½zõbûöí†í.^¼ÈÀIII!$$„2pà@^|ñÅlc:zô(£G& †ÎÑ£Ùûm\½z•òË/¿°cÇž}öY5jÄìÙ³ù6äI±Ôáµ±±¹/pÍpo‘s33³låqr x3888гgÏJ˜R4ÛˆÞ¦XëðFlÔ+ÔÔ÷cn¥çh¾¥ÿ_Kƒ¤[ú×)w`íÓ0%¾¸FW.üÉêðFã‰>}ú0þ|f̘sçÎ套^ôni~~~888pâÄ üýý½2Êܹs©T©þþþüþûï\¸p6mÚ––ƪU«èÕ«NNNôéÓ‡ 0aÂúôéÃÅ‹yôÑGóTM%..Ž×_6mÚ0þ|ÆŒ@«V­˜0aË—/§nݺÙÉQ¯—þxFÚ€×cÐg9¬î¥¿‡ê¹¹¿¾¤ç'Ý‚«ázIˇ©ÓCŸ v©£/Z;õ+¸R‚ôI¡Žù¬Ãû+Puxça»›@¡Õá½uK3¶²² **ŠmÛ¶ñ /pñâEiÑ¢æææÄÅűmÛ¶lå'¯_¿Î¶mÛ°²²"<<œ^½záééÉ?þÈÓO?Í–-[hРÖÖÖÔ¯_ŸíÛ·S©R%ê××;Re}]ÿᇘ8q"µk׿©§žâƬ]»–ßÿ+V*ݹs‡mÛ¶¡iGŽ¡k×® :4[ÙËÂV¬9¼%P]MÓŠýr—Rj>ú%Öܘ´ÓZ•f™+|AÏ»tH¯­›ÕÏõ–¿éiE<þ‘þ¢zä[ˆü¯~ÙªÉp½½0èm„}ûêM*ì«ê/Â-‡3ÛôÇ› ïn…ÿ|ªóïÍ$ù]J)wàR6½<´ÓZ~øûûçXÕÙÙ™ß~û+V°oß>Þyçºté@ݺu !%%…N:ñøãzd§Nprrbï޽ܸqƒ'Ÿ|’M›6‚­­-#FŒ [[[¶lÙÂÒ¥KY»v-žžžtíÚkkkCÞp†fÍš.‰ƒ~ÕÇßߟ={ö0þ|Ã%tGGGÖ¯_ÏöíÛ¹xñbžžN'4M;tRJõ梷þ|˜i@¾SIîñ¹ç“n^Ñ4íx.Û¹ºuë2pàÀûî·±±aóæÍ,]º”ÐÐPÆŽKŸ>}¨S§½{gO92dµk×æÐ¡CFÕñ-Léå¥Ô"rï´ö›¦ioä|J©·yxÀ»(²Nk žÖÏøh°sÓk¦WJ/ÁíîÝ?…ˆ_ô:ëý¾ÓS@Ϲµ~‡—éÖàX üŸÓ·©Ö¬…³Ûõ”…1app1Y ]ô`6ã<œ3Çä\¥/¹µ¯ ÏÖ¯&*sè»J_dW˜4M[§”ÚDÞ:­½«iZ>ä¤wu{XÀ› j§µ‹/òã?&'2$''óÛo¿e['÷à ÿý7[·n5°C‡¥[·n,[¶Œ?üWWWÞ|óM/^LãÆ ¹ûbbb˜:u*¬\¹ÒpÞ©S§Ò¶m[¦L™ÂŽ;²gçÎlÙ²%Ç®ž…­Ü¼%¼µðAôÙ½]¦Äå#™~Õñºžºpt5<úJöíju³©ú*\ЃÝíÓõÃvS æ,|ÑB¯¹kn¥¿þ³®õàðR8»CïÞ–z’‹½ÏT‰p}&"×N[ùi<áïïß‹`&O¾¿âU·nÝ å¨²277§U«V´j•ù>jÔ¨žÛÑÑѰ¸"«{/5kvm½0`À€ûî¯[·.uëÎ4¦i?)¥þ ŒÞàÁuZÏišv¸ çRJ=¬´L$0јüì¢ò°ïsÆ¢—{y{{ß—›miiI`` ÷mo*š¦PJµ¡—û+î àוEÙ\¤~.ó¼»ê· îY^&kèíÞ³r¨þ#2ÿ_¥©~°v€€IÜ'£Cgoý–¡¢kæ‚6Èœe.LéWFßOoâóz@jŠ f+0^Ó´£¹nù·nÝ2\õ:{ö,‡ë/Mƒ¾oÝÄK/½”¯¢Ã‡Ï6[Û¸qc‰ŠŠÊÓþ?ÿü3±±±Lœ81Ûy+T¨ÀSO=Å'Ÿ|™3g¨S§Žá±.]ºK° F¦4”E ’þ:SÒy/£¿ñ.Õ4ÍäÁøÅ½xMÿÚ+ªä7á\;ý2Y–¶=ó`Ð&= uk¤A?½%ó“‹3g}fæPÁEO›(‡Ö“4M;›— #¥¡¤Ê¨QX²¦4äDÓ´$`Vzé²÷ÉÛåîÂr xBì®%ò&=Ð\©”ú ½ÎñDòÞˆÄXwЯ(ÌÔ4­€-D~išö/0T)µâ­É}xUÓ´ ã`iiiœ?Ð'† B·nÝr¬˜ßɬùú §˜Ö«W7ò–]uê”~Á|Μ9÷Ú×®éÁĽoaM`äE‰šá 7Dú'Nœ ^½z¹–Ø0V ›á½‹~‰í]MÓn™z0šŽÒó³2\ÉãçÒ»qp'vÍ"[èp;ËùjY.&>:þü¾n •jÁc3À3÷ô̲à0úL~¨©r¯Ý»w.“exá…9r$ß}÷•+W6ÔÉ­W¯ûöíÃÛÛggç1ož|òÉí¯œRr¢iZ4™—»?Foí\TÒÐ#¾Qy›“ñs6l˜!ÿàóÏ?çŸþ1,P4FRRmÛ¶eÿþýlÞ¼™.]ºÙkxaH<ßTJ}…~…å©":Õzô çL_䑦i{•R­Ñgz? ïvvñÀ `^úëBáääį¿þš§m3øç•¥åýÐóó÷›Ñ#¡~ýú9Î,Þ—Çogg—¯1„Ifx,XÀ÷ßŸí¾Ÿ~ú‰=zpú´žHôä“OräȬ­sYêi¤4û =o¯4•ÎÉ&£•°–¦ÏôZÙëEÍ[ýGŸÎqŸ,¿y6• h†~ íðr=xäÞ¢· ]EŸÉÿʘ™üü¤4ëäÉ“?~<[¾­““o½õŽŽz¯èøøxRSõ‚³gÏfüøñÃÿRj=™3ü…vx`90EÓ´¼¬Û(•rÊÆÉHiêׯŸ)joçªXÊ’ÝëÚµk<öØcüú믆›«««!¥8”€€÷Ð-½I© vAÏË­â[ßÔÓÐô=ÿ‡¾€³¡ú Åï™'~‚óBôaðhYœ£/VÉÀGèeƾ06m¥¸RÜÝÝ ù¼Ýºu£R¥Jyè ÿÂpúôi£.Skš¶ðAO9(Œê(€š¦µ3U°›¡}ûöìÞ½›Û·õεëÖ­»¯ÒÍ­[·˜5k#GŽdþüùܹ£ ®_¿ÎÇÌž={7nK–,1¬OMMeï^ý“ê·ß~KZZÓ¦McêÔ©$&&¢i+W®d̘1L™2…sçÎÎ7oÞ<Ž?δiÓøè£ŠãÛ£ôÀÔ=`)¨å€¿»%—¦i 𦽉þ·þO!2h©iÚð²ì:99qæÌý+:t耙™™¡kgIcTã‰Â¸Deee…£££á––––­ÝpVÿüóƒ¦U«V¼üòË÷Õs3†‰S¾jšö[®[šH£!z隬lÝ Yú%+;=!ÀuPÙWiúìn×ùpå8ùFŠ+¥¯…˜¨Ïgx¤¾¾Àíðr½Ÿûcïís3‘[è56'jšVà‚òÅáêÕ«lݺ•­[·òçŸðÝwße«¨àãホ›:t 88OOOþúë/†N‹-èÚµ+¯¼ò ;vè5’vìØÁرc±²²âùç‹¶cn^Sr¢iZ¢¦iS5Mû® ãÐ4íÕÂ8Na°´´äñÇgãF½Üë÷ßOppæ 'MÓæßÿå¹çžã¯¿þ2|0‰‰‰áã?fÕªU 0€#GŽêf¦¦¦²|¹'¶oߥÁÁÁcmmÍܹsùæ›oxúé§qvv¦{÷îÄÆÆÆðúë¯Ó¢E zôèQœßŽûhš–Z©š¦Ñ4­4Ô|.÷4M;›žÖTÐã¤UÕ’¤Q£F>|˜éÓ§³~ýz6oÞ è‹ÜFŒÁ?üÀ /¼Àž={8þ<déÒ¥tïÞݤã6YïîÝ»yï=}h54hPŽRRR:t(£GfÙ²e}:ÞÞÞÌž=;Û:Ã6¦b²* NNN†•z9Õ ÍAtt4•*Uâ·ß~#--äääl ÜŒ‘ð–”EkBäYq¥44iÒ„ µï… ˆŒŒÌö!ÖÃ#³úSF÷´¢–[•†òÊÏÏ[·n1gΞ~úélEGGãããcXÀâêꊻ»;ÑÑÑØÛÛS½zu½+_FKê‡Ñ4Ë—/gkݨQ#.]ʼêû VÔBÝÎ;ó´Ý´iÓ˜6mZŽÕ©SÇðá5C§Nî»/Æ fÍš¬Z•s©x333ž}öYž}öY.]ºÄ¥K—pqq¡jÕªÙÅU«Víç,*&›áõõõÍv-cñ˽bcc±´´ÌVh~øðá^ÌVrx…(3îm!ëé鉃ƒƒá*Î½Š«´aARʺAƒ1oÞ<>ÿüól?;Ž?ÎÝ»w±²²"::šèèhªV­úТõ÷Êø¨X±"J)ªT©ÂÁƒ å“ÂÂÂ9r¤aûÒ°¸M‘wUªT¡J•*¦†A‰¯Ã[§Nâââ º¯¨yA”°²dBäYq¥4äG@@_}õ±±±´nÝš—^z‰þýûãääD»ví8wîiiiÙ>ä Óʘ…²¼õêÕ£iÓ¦¼ð ôïߟ¯¾úŠ'Ÿ|’Gy$_oëÖ­™9s&Íš5£GŒ1‚éÓ§ÇÁƒ¹~ýº¤0!ŠM‰ªÃ›WWW¦OŸNÿþýéÖ­öööìÚµ‹+V¨æ§ÌðŠÒª8Rš4i’ãßרQ£ ulHGzî¹çðññ᯿þ¢aÆԫWM›6±zõjV­Z…§§§¡ÆnçÎyä‘GŠú)’Òp/ÿ¿÷*T`„ †ÿ¯ZµŠ¥K—²e˺wïÎ!z‚¾³³3Ï=÷œa;kkkÆ€……cÇŽ5<öÉ'ŸBdd$©©©¼ôÒKÔ¨QƒÐÐP\\\ؼy³áwiäÈ‘TªT©Hž³B¨üv6TJM=qâÄt'''£OúÏ?ÿ ”¢FÙîß»w¯¡mé¾}ûhÞ¼¹áÒgÆJ?sssüýýï+^œ_óæÍcÖ¬Y®…ÕÏÚTª6WËF`˜©ÇQüwg÷.Ðjšzµpá§ûõë·ÚÔã( N:µ·mÛ¶šz¥”ª¹ÿþ3ÕªvYà²çüùó´hÑÂKÓ´L=–‚×ö¼++¯í‹-z¬oß¾¿›z¥AttôõÆ»Æ}Ê¿IDAT»æg“ÌðÞÛ¾.CF° ú*U«Fa¾ØË ¯(­JbJƒBQ’“Œ›xîܹÈBI1Û³gO<’Ã+J¡âªÒPÛxB!DÙbLÀ»xܸqIIIw }4Ådÿþý)–––k€RÑ@a©Ò „(-âããO%$$$›z¥AZZÚµüî“ï€WÓ´¸ððð1AAA7lØp>%%%¿‡0™ .0sæÌ«sæÌYðûï¿Ðò›À,D ænê1!„(\¯½öÚ¹˜˜˜R½8$%%…çwcrxÑ4íÐW)ÕÆÏÏot³fÍ1ÂÇ××·`Åq‹@bb"¿üòKJhhhDttôæ]»v½§iÚ SKcIJCÞI•!DiríÚµmÆwÕ*RSS¹téÒùÝϨ€7ƒ¦i»€]J© üñÇ`??¿>>>¾ 4xÄÇÇDzvíÚÙ:k‡k×®qòäINœ8‘zæÌ™«ÿþûï‘ÄÄÄw·mÛ–·%Bˆ2CR„¥Éþýû'»¸¸´õôôl”ûÖåSDDÄ/}úôù4¿û(àÍ iÚmà à ¥”¹««k=__ßέœœ<ÝÝ|||ì«T©‚öööØÙÙakk›§ XÓ4nß¾M\\ñññ$$$Cdd$—.]Š‹‹»|ëÖ­è´´´ssóígÏžýmÿþý¹÷¼¢”‘* BQ6½ñÆ·¾øâ‹à„„„yuêÔéZœ¾Jº¤¤¤»'NœøöÈ‘#¯uèÐ!ßûJÀ›•¦i©Àßé·3îWJY¶pwwo¡iZå´´4ç”””J©©©Ž@E+++kKKKkKKKk k€”””¤äädÃÍÂÂ"ÎÂÂ"ÆÜÜü¦¹¹ù kkëè *lÿä“OòËQV$'°v‰´ Ï“äÊÄlŸ——WÄ©S§öž>}Ú&cS¾ÎùëØØØ e%¥á믿ÞP«V­S£¤óõõ)í5xA½úï8Κz¥Áé-…˘ҨQ£NLš4©{Ó¦Mû»¹¹5¬X±¢·RªL=ÇüHMM½p2::z÷!C¶véÒŨãä»ñ„B!„¥‰Ì• !„Bˆ2M^!„BQ¦IÀ+„B!Ê4 x…B!D™&¯B!„(Ó$àB!„eš¼B!„¢L“€W!„B”ið !„Bˆ2M^!„BQ¦IÀ+„B!Ê´ÿ3 žuÇõÍ¡IEND®B`‚cups-2.2.7/doc/images/cups-postscript-chain.svg000664 000765 000024 00000055055 13255074424 022162 0ustar00msweetstaff000000 000000 image/svg+xml PPD Printer OptionalPortMonitor Backend OptionalPostScriptFilter OptionalPostScriptFilter PrintFile CUPSFilters CUPSFilters cups-2.2.7/doc/images/cups-raster-chain.png000664 000765 000024 00000041024 13255074424 021224 0ustar00msweetstaff000000 000000 ‰PNG  IHDR¼–<[:sBIT|dˆ pHYsaa¨?§itEXtSoftwarewww.inkscape.org›î< IDATxœíÝyXTeûÀñï3Ã*«€‚ n ,â¾%©¸ane©å’{ZZêk¥½¥oõf™[¥ÙÏJÍWÍÒJmÕÊÌ]SsO EÔRQ\Ee;¿?  ¨,Ãr®k.aæÌ9Ï ÎÌ=÷yžûVš¦!„B!Dye°ô„B!„(Nð !„BˆrM^!„BQ®IÀ+„B!Ê5 x…B!D¹&¯B!„(×$àB!„åš¼B!„¢\“€W!„B”kð !„BˆrM^!„BQ®YYzBˆÒO)eœr^\]]]«:99U±²²r7 n×ÒÒÒb’““¯ÆÅÅ]¹~ýú5 !çEÓ´tK=!„Ò4ÍÒcB”J){ ÐÏϯ½««k3ÏÊ•+Wuvvvuqq±quuµvuuµuqq±srr²qttÄÑÑ'''HLL4]HHHH‰¿w+...5...5>>>...îrLLÌ¥¸¸¸‘‘‘;€pMÓ’-ú!„(—$à¢SJ9úùùªS§N˜‡‡‡§§§§{Ó¦M«:øøø ”*ÖãkšÆ¹sçO>tèЕK—.]½råÊ•3gÎl:uêÔBMÓŠuB!* x…¨`”RÊËË«»¯¯ï3 6 6lXÝ:uꔪùü§NÊX¾|ùßGýëìÙ³ £¢¢~Ô4-ÃÒãBQ6IÀ+D<1 à©~ýúù…††Ú ¥*νCFF[·n½¹víÚÈãÇ/9vìØ ,0Ý6`À6mÚÄöíÛ9vì?þø£é¶yóæ±uëV:ÄäÉ“?~<[·n-ô8$Ã+„¢0$à¢b0Ë^¥­ZµâСCwÜfggGãÆ9|øpž÷mß¾=&LàÃ?,ôñ%Ã+„¢0$à¢b(RÞÔÔT"##Ù±c ,à±Ç3ÝKdd$k×®eýúõ<úè£wÝOãÆ9yòd¡Ç!^!„…!sx…¨Š”á½xñ"“'OÆÓÓ“aÆѭ[7Óm[¶láÌ™3òñÇÓ¤I“»î'-- +«"¿íH†W!DHÀ+DÅP¤€·fÍš|óÍ7yÞÖ§OþóŸÿäk?û÷ï'  Ðã ¯BˆÂ€WˆŠÁ¢'nݺÅ?üÀÂ… Y³fM¡÷#sx…B†¼BT i<1lØ0ììì°··'((ˆÕ«WÓ¨Q£BïO2¼B! C^!*†BgxÛµkǶmÛò¼mÚ´iw½ßo¿ýV¨ãÝ‹dx…B†Ti¢bÖÂB!*, x…¨ŠT–¬´) B! C^!*Éð !„¨°$à¢b°h•sÉ x%Ã+„¢@Êþ' "?$Ã+„¢Â’€WˆŠ¡\dxe¯BˆÂ(ûŸ€Bˆü ¯Bˆ K^!*Éð !„¨°Êþ' "?$Ã+„¢Â’€WˆŠ!ùüùó‘–DQíÙ³'Éð !„( x…¨Ž7."%%%ÅÒ)¬}ûö¥YYY­â-=!„e‹ÊÚÚÚzÛ‚ ÂÍò$!„÷!¯eˆRÊhOv·!WÝ$`'zp»8¨iZz1Žk+ lÓ4­CqG!„(Œ²±L[ˆ J)U hKv€Û 0æ±é-`Ùܽ𦥖Ô8…BˆÒL^!J¥” Іìi ­¼ª(¤ûÉpÓ4íFIS!„(K$à‚”RF ÙÜû<6Õ€ÃèÓ6Û5MK(©q !„e™¼B” ¥”“à¶œï²y8ÙÜ­R‡V!„( x…(f™Í²¦(tÜï²éi²™mÖ4-ºD(„B”sð afJ©:dgp;Õî²iÙS6kšöOÉŒP!„¨X$࢈”RÕÉÝͬö]6½Jî7¢D(„BTpð Q@™Í:Ž_³‡¬ ÷h~š=!„¼$àâ> Ðì!™ìf›)æfB!„È x…¸Mf³‡Ép›“w³‡`7Ù Íöjš–RRãB!DþHÀ+*¼ÌfàÞ«Ùò3¸»¤ÙƒBQúIÀ+*œÛš=tDoÝ{·fGÈp¥ÙƒBQIÀ+ʽÌfÈÎà¶çÞͲ™mÕ4-¦D)„Bˆb#¯(—”Rd¸¸{³‡3dgp·hšv±D(„Bˆ#¯(2›=dÕÁíÄÝ›=\ w€ûw‰ P!„#¯(“2›=ä pkßeÓ«ÀV²›=œ(‰ñ !„¢ô€W” J)w²ÜŽ@À]6¶“Å•fB!D'¯(•”RÎänöЈ{7{ÈZhv@š=!„"' xE©PÀf{ÈÎàJ³!„BÜ“¼Â"r4{Èš¦ðy7{Hö#Í„BQHðŠ‘Ùì¡9ÙÜJylšÕì!kŠÂvMÓ®—Ô8…BQþHÀ+ŠE›=';ƒ+Í„BaVð ³SJ5@/æq—M²š=lA/&Í„BQlTIWlÊ<µí”óâàààêêêZÕÉɩЕ••»Á`pÈÈȸ–––“œœ|5..îÊõëׯ 9/}E~•@õqÝ0ºYz¹h¨”D|Ȫª H7¹i0rSYqSH³Ä°NoÄêJ¸æm‰c›Sýúõ{ÙÛÛ÷³ô8rºyó¦_FF†£Á`H´³³‹´ôx²Ü¸qãfDDÄKÃÞyçe–CYpíÚ5»3fŒÑ4-ÎÒc)Š*ª—µ¥êu^Z¥&qóJ¸V.^çæôõ×_÷ssskbéqÕÅ‹O8pyQ÷Sl^¥”=èçç×ÞÕÕµ™‡‡‡gåÊ•«>óÌ3®...6®®®Ö®®®¶...vNNN6ŽŽŽ8::âää„££#‰‰‰¦KBB )ñññ7ãâânÅÅÅ¥ÆÅÅ¥0 ...îrLLÌ¥¸¸¸‘‘‘;€pMÓ’‹ë±•&ÖØuŸO-Kã>Œ€CæÅb~šÀ?–<¾¹ØÛÛ÷ûå—_†Yz÷ð ¥eêÔ©åâo®”ª½oß¾a>>>–J©wîÜ9f̘ñ2P¦^kú=½ŸÒü:/5ÊË{»9Í›7¯ZXXØ\2ä¹uëÖ­óçÏ?lŽ}™-àUJ9úùùªS§N˜‡‡‡çĉÝ›6mZ%00ÐÁÇÇ}JgÁT®\™Ê•+ç¼Ê†;Wò×Ð4sçÎ O>tèЕAƒ]½råÊ•3gÎl:uêÔBMÓ ýà„B!ʈààà×Êz° pêÔ©¯¼Ñû*RÀ«”R^^^Ý}}}Ÿ3fLаaÃêÖ©SÇ`Žb,Ô¬Y“š5kVz衇j‘Ÿ:uªëòåËdž„„üuöìÙ…QQQ?jš–a‰1 !„B§eË–=о}û!–GQÅÅÅ]ŸÖ±cG³ì¯Ðoppðľ}û>Õ¯_?¿ÐÐP;ƒÁ"qî}ùúú¦M›V7##£îÖ­[»¬]»6288xɱcÇæYzlB!„æäçç÷šƒƒƒE§šÃ©S§=ûì³f[R¨€·Y³fó_~ùåaaaaw+3Uê :uêdשS§àmÛ¶MkÑ¢Eýýû÷?kéq !„B˜ÃêÕ«‡„„„”®…ì…pþüù?÷íÛ7£GfÛgÓ²J©.AAAO–¥`÷v¡¡¡N:uê«”òµôX„B!Šê7Þ°«[·îd++«‚/š*EÒÓÓµ3gμûú믛µø@aæ!¸næ„%\¾|¹*ÐÊÒãB!„(ª-ZLñöönhéqÕ©S§~éׯßRsï·0o¢Á``Ë–-æK‰Ù¹s')))W-=!„Bˆ¢øä“OêÔ©SçK£¨’“““OŸ>ýfqì»0¯zä‘G¸víÓ§OgÛ¶mdd”þ¢lݺ•éÓ§séÒ%zöì P²]7„B!ÌÌ××÷uww÷ª–GQ:uêóaÆí*Ž}&à5 úöíË”)S0Ìž=›ùóçsæÌ³°¨N:Åܹs™1cF£‘W^y…¾}ûfé¥?R¢ŒJLLäìÙ³EÞOzz:Ç7È„¹œ;wŽÄÄÄbÛÿ‰'ÊD"EˆÒ`ÅŠj×®=ÀÒã(ª˜˜˜¨ðððiŵÿÂTiPYM$”R´mÛ–¶mÛ’””ÄúõëY»v-J)*UªD½zõ¨_¿>…máÊ•+xyyñì³ÏÒ§OŸûÞïÆÌ›7W^yÅtÝÿû_ Dç΋e¬}úôaïÞ½w¼o !rSJ©;w¾Z©R%[K¥¨Nž<ùÑøñãÏ×þ ðòª¹ëààÀOÉðŠŠæúõëøøø°páBΟ?Ï”)SPJ1vìØb9Þƒ>HË–-‹eߢ`-ZĪU«øä“Oðõõ%<<œQ£FqóæM tÏûÞºu‹åË—ç xÿïÿþkkëâ¶â>Ö¬YóLݺu;XzEuöìÙƒ‡žÓ»wïb;F‘2¼÷bggGÆ iØ0÷‚ÁôôtSàš3 ½råJ®ëSìàà€““®®®x{{›®sttÄh4â!H†WTLF£\\\xôÑGùþûïMïºuë˜;w.iii<üðÃŒ5 WWWÒÒÒXµjK–,ÁÅÅ…®]»’ššÊĉY½z5111Œ3€Í›7³gϦL™Â‘#Gøæ›oxë­·8räË–-ÃÍÍŸ~ú‰7ß|???¦NÊÉ“'iÙ²%O?ý45`ÿþý¼óÎ;\¼x‘¡C‡Zìù*nݺÅìÙ³Y¹r%¾¾z%ÆÀÀ@Þ|óMÆÇ€ˆŠŠâÕW_% €ï¾ûŽ–-[òüóÏS§N¦M›Fbb"=öƒµk×2kÖ,ºwïNëÖ­‰eêÔ©üþûï8991yòd²jg<˜Gy„O>ù€ &ЫW/>üðCV­Z@»ví3f 5kÖ´À3$Dé³xñbÿzõê½àààÐÀÆÆÆ¸ã¦RJùùù¹^½Zö×ß[[[×ôÑG/9räŽÛ4M»‘’’r<>>þàáÇߞoJ©J€·¦i–Gzz:ñññœ={–5kÖЮ];Ž=ÊÔ©Sùꫯ¨S§3gÎdñâÅLž<™Í›7³fÍV­ZE\\ƒ¦K—.\½z•K—.™öËùóú©œsx“’’øòË/™1cÛ·oGÓ4ºté¨Q£X¶l`ܸqlß¾ÔÔTFŒÁ¢E‹ âßÿþw ?KåË™3gHII¹#ÛBll,/^$%%… 6РA¶nÝÊêÕ«™0a?üð¯½ö?þø#ß|óé¾9çðN:+++6oÞ̱cÇ:t(Ô­[—“'O²qãF¾øâ ¢££éß¿?={öD)EXXÏ<£/*_²d ,`Ö¬Y%÷ÄQJ}ûí·Ã|ðÁ·ÝÝÝ«[z,%È1ór7Þ@—*UªôX³fͳýúõÛQЪJCqÏÇ-A–ÊðŽŽ*¥J}7”‹à£Fð×@Á…ý°°$DéÁîÆÛb‘ø`žìCË€µõøø·ðQcØòš~[˜WN|køgü¤XÉsŽ)¥ÞUJYìÛÞèÓ§½{÷&##ƒI“&zv788˜ÈÈH~ùå|||øþûïظq#ýúõ£Zµjš‚Ý‚rwwgèСXYYÉÅ‹qssãçŸæÒ¥K¤¦¦ò×_±wï^üýýiÓ¦ ... 6Ìl¿"JHHÀÁÁáŽu¶¶¶X[[“èɈ1cÆ`kkË“O>ÉéÓ§¹víÚ}÷¿iÓ&F³³3!!!4kÖ,WÙʧžz 777‚‚‚pww7-@ôôôdãÆ¼õÖ[„‡‡óóÏ?›ñQžRʨ”ªc†ýÔQJî¤(QJ©ZJ)/3ìǨ”jQ”},]º´i``à»,ØÍ·jÕªûùù}8gΜŽVØ€·Ìá ~RJ­SJÕ³à8î*#¾m_†>ŸCÈ$è>Fÿž;S{?Þ‚G>'„½ïCj2üþô8<¼Ú¼½B»)Å÷XJ kàà¤Rj´Rª0¯¿"iÕª›6mâĉXYYñÑGOzz:QQQ\¸pÔÔTÓT‚¨¨(¼¼²? ªVÍNÃ+¥²¦ššz×c׫WÏtÅÇÇceee:^tt4#FŒÀÎÎŽ .àéé™çñJšRª›Rªƒöó”RÊÏ C*°:uêË•+Wr]ÿ÷ß“ššJ­Zµ€ì)d ÿ]ÝÝݹxñâ=÷‘‘Arr2ÕªU3]W­Z5Sõ{'''Sføé§ŸæàÁƒtèÐþýûç:S`)J©NÀ!Àß²†‡2÷)J!¥”ƒRê-à8PÛ »´~WJ-UJU»ïÖy¨_¿þk®®®îfK¹U­Zµà&Mš8b(tY²²®Íá퉞ù›£”*Uíš/Ô§-4ûzO°-ÄHm =Òo³7œß­g+ *À"à€Rª½%`mmͼyó˜?>1114hЀ˗/óôÓO›.£GëøŽ;²{÷nÓ}÷ìÙcú¹aÆ„‡‡›~ß¾}{¾ŽïççGbb";vÌu̺uëÒ¡C‡\ÇÈyì’¢”òWJ­~Â<„aÀŸ–x{xxÆüùóM×išÆüùóyì±ÇL |ãââ8vì111$$$„ƒƒš¦åùeÆ`0P¯^=vìØaÚïŽ;¸ç˜®_¿ÎÁƒyùå— %::Ú\·P2³±kM€9;U56)¥Öš#k,ÌCé†ÀTÀΜ»†J©—•Rù®ž0yòdƒ££cs3Ž¥ÜrqqiVÐûÛ¢µÒ®dxs²&C”RS¥š¦Y|l±§¡r(jòð2ôù¼_@P?°« M†éÓ"V<ÖöÐb ´ öe¾iu4¶)¥V“5Mû§$îëëËC=Ä‚ ˜2e ?ýôaaatíÚ•k×®‘˜˜È|@Ïž=ÖÐi:tø/œÛ [_‡ËÇ ï*³>„²âq —Rê`¦¦iÉÅq.]ºÐ´iÓ\×M›6¿ÿþ+++V®\Éþýû9}ú4Í›7§ukýó zõêlÚ´‰-[¶àææÆ‘#Gøë¯¿=S¼cǶlÙB•*Uðöö&6VÿOÓ¤I¦LÑÏ:5hЀ7ßÌÝ-røðátîÜ™`42dîîú™¼÷Þ{'NpöìY^{í5ÓñŠKæô’QÀ[èøâTX <›ù:/ðâ‹‚ª^½:ëÖ­ãСCüóÏ?tïÞ&Mšó½ÜÙÙ™U«VñÛo¿1nܸ\ÓJ-ZÄùóç9wî/½ô’éö.]ºð믿²oß>zõêEHHˆi¿}ôQ®é0o¿ý6µk×`ÕªUìܹ“ôôtBBB8xð i»eË–Ý·´dQdfm³€Åv Üìг‰Ã•R/Ÿk9ç‰b¥”ªÌ£gaKJ]àk¥Ôf`¢¦iGï¶¡»”ûË¥Tß J$ÛœœÌÿû_@ŸÃÕ±cGxବî<|ZZ-[¶äСC÷ÝïæÍ›i×®]¡êA–² ïíš;•R«€—4M+¶BÌ÷âÕ’.éUª4¸óv§ê·âÁ6súxÔïúõ9=øTòÈûk¨Õ^Ÿç»òa󎿌±^F(¥þ­iÚJs jÕªẇussÃÍ-;­Þ¢E Z´¸sÍ…RŠNô©ˆ·—±²²",,Ìô»‡‡þÇÎYån•Y|||ðñÉ;¡áïï¿¿? g’‹KæÝy@ãb;HÞšÛ•R_¡¿Î‹5ÃoeeEË–-ïYÙÍÍÍT6ìvÞÞÞx{{˜þ.YjÔ¨AwÆÍšå>똳L¥Á` }ûì=mÚ´1ý\œõ›3ÍÚÜoÛbRXþ…g‚¦iû-4Ž A)e‡¾vb à`Á¡tBŸÓ½xUÓ´ Ž¥B*‘²d·nÝâÓO?eÉ’%$%%ñÞ{ïQ£F >øàƒƒ™’° IDAT;¶5Ì™3'_û?~<Û·o7e… "ó‹õþR>=c Ð[)5˜£iÚÍ’<¸ƒ'´› «Ÿ€^ƒWSˆ? »ßƒv¯€»?x–×áÁÉ÷7úö½ÿ¾.×ÚàÝnÆÂEút‡âtî7\•R¥=£â |®”zøWiü0 Ê$—UJ©ÚÀ;@>þÇ«'€G”Rs(Æ ÿ½¸¸¸Ð¿ÿ’>l‰RJy¢ŸbÎý3|Ý”R®E<ä÷¹½ ú§eÀ+š¦Y~Õ^9£”ê‹þ¯Í_UJ]¹ÿf÷t¿ªF`,0@)õ° ¬”'-JtïC=„••­Zµ¢C‡Ìš5‹uëÖQ·n]¶nÝÊùóçyï½÷سg©ôÑk¯½Æ“O>É'Ÿ|‚§§'C† ÁÓÓ“µk×’””ÄÌ™3±³³câĉ |ËЙ¤JÀ4à)¥ÔdMÓV—äÁÛM7?ØþVvÞàþàR V0hl| –uÔ¥<¦¿(¨ Æ<ðönðÛ»{ ½ N'hþtI>²R/„ü0\»v-{÷îE)E@@¡¡¡Ô­[7Ïmó“};~ü8vvv¦Ó×¥Iæ¼Í)èYŸüÌÛ\¬”ú¸ˆ‡½ßi(;ô ÿH¥Ô¿•%yºÛÃà &˜~?zô(+V¬ôé]»v%((¨Àû=pà5kÖ¤J•âž%rwJ)à_èÏo~ëË´¦øçx‚xú)¥ÞÞ×4-Å;Þÿ1DÖvö†:Á'„BŸÌÚ«'7Sõ¸SàÐRè÷EÑ÷¥”jŒ~Ö¦CîÖ£èGηÊèã{F)õ¼¦iJðØ–Eª4œ={–*Uª`ooϯ¿þÊ„ ððð`Ĉddd°téRÓ¶‹-bΜ9ôèу›7o2qâDxàlmmyôÑGéß¿?NN¨“E™ x³Ô¾RJmÍ|1—˜OÀà 0á<õ´þ—>ô,íã_Áøx愾–}›2Àð­ÙÓr ì«¿qŽ? #v@‡7À©¤fÒ•Y†'•R/e~p‹Ý»w“@‡ˆ‰‰¡K—.üý÷ß…Þß—_~ÉO?ýd¾šÁm+³§ÿEJV€m/ù}Ó¬|ìRJY¬/ó?ÿüÃîÝ»éØ±#NNNŒ1‚/¾(x$2wîÜ;¦À”$¥T/à0›ü»–à„>Æc™c.²Sôõ~ÝÀÎU/1±®ðûËH×›—ôTH-âR>¥”Gæ—Óƒ,ص”@àçÌò¤õ-=˜ò®D3¼Ï>û, DDDðâ‹/šjr†††2|øp@ŸÃ{»‰'LHH5"%%…5j`eeE@@@Q¦4”E¡ÀA¥ÔbàÕjRÀ¤"pB_\3Z)õbVû]s«W¯Ý»w§{÷îDFF²fÍ&MšDJJ ,àÏ?ÿ¤V­ZôéÓ‡ ôIÝIII|õÕWüöÛoXYY1xð`¼¼¼Ø¹s'•*UâÂ… tìØ‘N:qáÂ.\Hll,?þ8mÛ¶E)ž}ûˆŽŽ&))‰M›61mÚ´\µ[Í¡Wf›K`¯RêSô*%ÎÍÍîÝ»z«ø/¾øÂÔ†øã?æÒ¥K„„„0tèP ááá>|'''Ö­[G§N8qâŸ}öÛ¶mãñǧ¸þïæÁ/3ðyè¾[–.õ€”R<q£¨;ólœÙõ½ æ_k þà¥Ã®9zYH—š<ªç˜ºõ8ìû®Ÿ}qñíN| õ ; Q°{.$_†O‚o ô¬pì}qóé_¡~/=ÙaÈŒ<âÏÂîwAÁ«IÑ«Rj"z…•¢NE±„ž@ו+W~×·oñΰºvíÿûßÿèÔ©ÓsìË»Íð2„)S¦°ÿ~ dºþ~§Hƒƒƒ½3­­-qqq…:~N™‹ÖÊ*ð p@K§’¥#JŒð]TT”9ë„Þ!99™¿þúË´À-%%…ªU«2iÒ$Z´hÁðáÃMe¤–.]ʱcÇxá…=z4ÖÖÖxyy@Ó¦Méß¿?ÁÁÁÄÆÆÒ½{w|||úõé`碟‘«Ý¾~®f–ÓŽ9KÛƒC=Э·å¡vÍÖ§¤5xB¤·Ò§M4FŸJ±3³rÝ•¿àÇçô—M†ëë?¿Öo‹? KÚè®W}Ú\a¥Ý  0—²ìf±Ž‰‰¹çJ–Î;S³fMÓ¥AƒtïÞ pëÖ­{ÝÕ$&&†wÞy'WU”‚úðÃÙ¼ys¡ïo)%šámÓ¦Mž•òº.?ìììòýG¾]Îð‚^]b1ðª2’¿~¢<ˆ^¬Q£FÀì_Í—-[Æúõ뉌Œ¤wïÞ 8ÀÜDDDššJãÆùñÇ5j—/_Æ`0àææ–«Œ•‡‡U«V5}Y]¸p!Íš5£_¿~dddðüóÏóÊ+¯ðì³Ïz‰ÿüç?æ~HdddX-)Ù2Dææ©]iaœ‚z= ý«ú¶ž9&Ðe¤Áºgô wèF0Ú¾zÀÚx¨ÞN>ôUøn$´Í'¶¬fxRÝÝÝ¿îôÞºu kkkÓÔÎ3gΰ~ýzÞ|óM¶oßÎ_|qG ñÛ¹»»3iÒ¤"ewg̘A¿~ýL•{ÊŠ2]‡7$$„wß}—víÚ†ƒCþ+Ž”á ï6ôÕûGª·(ËŸã"ŸÐëÃÎÓ4-¥qãÆ}Šã d̘1ìܹ“É“'sáÂjÕªÅõë×éÑ£-Z´ÀÏÏŒŒ S3ˆ &°`ÁºuëF@@S¦LÉUz*KTT'Ož4½QƒÞr6k Sq•¡27FÀ³ÀÑ‹”%Ï'3%y`OOO† FõêÕM‹wïÞëïÛ°aC®_¿Nr²^X¢yóæ”’Ï‡HMÓºe·}}ª@YpxAÓ´uÕ[¨eEÝYãaú”€?¿‚o‡ék-ÒnÀ¢–P½¹^iGK×ë $\Ðç%ö Äœ„Q»õ`ôLíµH=ÈÍâZ;»F{Ω NÕõýƒ>Ý¡f»ìÛ<>àÐ4mžRê3ô÷ÊÑî ¶¥¬^4h÷x*UªÄøñãM¿Ïš5‹öíÛ³mÛ6¶nÝJÇŽïy 777&MšdŽ1—9…ùQà ¯½½=“&MÊóð‘GÉUÓÑ`0ð¯ýËôû혱cÇšÛéÓ§Ó±cG"##ól{y/e0Ãûð„¦i²‚Ýâôû°nLöå—õÓSŸvÖoOº g~ó×Ò‹¶BÜ•,êiš6Û\«·ïÆÖÖ–Ê•+óðÃ3jÔ(^ýuÖ¬YCûöí™7oãÆËuFÆÃÃ×_ƒÒ¥KSs ;;;RR²‡[£F <<ûì3Hrr2³fÍ¢{÷îøûûÅ… 8p ?ÿœ]nãСC 8ƒòÍ7ßðøãÓ Ayä¶mÛfÚ.**Š’––ÆÖ­[8p 4©ËrôèQž~úiBBBhÚ´)#FŒàèÑÜý6®\¹ÂÀùá‡رcǧQ£FÌž=»0OC¾”H^;;»»~£¸½È¹Á`ÈU'¯€7‹³³3½zõºk¡ô{)CÞdôî0%Z‡7b¾X¡væ—E£>G+ô5ýw-nev˜M» kÀ”Ä’]…ð¬Ã;fÌZ¶lÉ‘#G béÒ¥lÚ´‰C‡qäÈSÀ P¯^=\\\7ur{àxã7¨V­ 6dàÀ|òÉ'L:•îÝ»ÏéÓ§se*Š[f¡÷ç”R¡Ÿþì\bÏ¿4àcàuMÓ®Yz0· ã7Þ`Ê”)´iÓ†¹sçòôÓw¯'Âòå˹yó&­[·65®(I™_çd.ÌoÞ½Àž"úî?o\–QL¥³פKzk÷Öôê9^õ9³ëàÒpv'd-€n5·Ö“þè·gM;¨Ó[«ÑƒßÆCõ¹¹?>§Ï¾u®„ë%-ï¥^OØú†D+#œüÜÍT§ 3)Ô±€uxÌQ‡wp>¶‹ÌV‡7«Ý»^ÈçÔ©SlÙ²…±cÇEhh(-[¶Äh4’À–-[èÜ9ûí/&&†-[¶`ccCxx8<òÞÞÞ|óÍ7 0€7Œ­­- 4`Û¶mT®\Ù´x9g•¬¯¾úŠ_|___úôéõk×X³f ¿þú+Ÿ~ú©)}óæM¶lÙ‚¦iüñÇtëÖ¡C‡R³fÍ¢>wU¢sxK¡úš¦,éƒ*¥æ¡×…¼‹vZ«Ö<{…/èóÀ.Ôkëæ´ÿc½¥ðÏ™g«zOSýã3ˆüIo'Üd„Þ^ô6Â}õ&NÕõ7á#ËáÌýö&ÃÀ¯»ùOqök™ß¥”ò.æcÓó@±tZ»—®]»æZ,æèèÈûï¿ÏÕ«Wéܹ3¯¾ú*7n¤~ýú,\¸+Wô϶nÝJJJ m۶塇ô)“íÚµcæÌ™üþûï\»vÀÀ@~ýõWV¬XÁš5kpss3mÛ¤I³We¸MÓŽ]”Rþ¼—×ï‹xØ™Ü>éFàyMÓþ,ⱊ¬~ýú¦9Ü9ÙÙÙ±aÖ.]ÊöíÛ?~<=ö WùxôÑÜSN‡ ‚¯¯/,T_sÊ (G*¥>äþÖ~Ö4í¿E9žRê¿Ü;àÝ [§µàzà™ ŽžzÍôʾúm^M¡ÇÿAÄzõ~_è Ë@Ÿs;z/X ‡—é‰+[pñ¦OéÛø<O¬¶éSž9ŸC%w=˜Í:Ž}Ž5nõ Ñ“úÏNÕaÌaýl¢2Bß•ú";sÒ4m­Rj=ùë´ö¦¦iEú’“ÙÕí^o:`ÖNkQQQ|óÍ7w´ŽOMMåçŸÎuV.!áî':þúë/6oÞl `‡J÷îÝY¶lï¼óüç?ÿaáÂ…4nÜøŽuqqq¼úê«„„„ðù矛ŽûꫯҶm[¦L™ÂŽ;rgçÎlܸ‘ÀÀÀ¢=ùPaÞRÞZøzvo—%qéˆÌ<ëáRSŸºpt<ð|îíê†áU}.èÁî¶iú›a»)÷,n©×Ü5Úèo¤oƒ&‚‡?^ ÿìл·¥§@j‰÷™*n g",Òi«k×®÷¼®k×®ynÓ¥KS“˜œ ­ZµÊÕØÅÅ…qãÆÝ±m –ªÊEÓ´o•R?©Ü½NëYMÓåXJ©{•–‰^Ô4­¨AµÙÔ¯_ŸúõóN·e-z¹ŸŸ~~~¹®³¶¶&44”ÐÐÐ;¶·MÓö+¥¡—û+é àQÀËÀçÅÙ\¤Á}çùuÓ/Y¼rÄJ.µôvï99û@Óót«5Ó/¶Î2™;dU`Èâæ§_²TòÈ^ÐÙYfsÊ<3úvfŸ™è©%‚˜ÍÀDMÓŽÞwË{¸~ý:Ï<ó  ×Ë>|XkøàΜ9C½zÙSê»víZ"Á.”ñEkE‘ù>SÚ&ò^Bÿà]ªišÅƒñ¨½|Uÿ¹N'¨Ö4ïíÜ|3O“åxcÛ3­×ZÏFzôÓ³¿ù·|6;{|ì 0ÁÞ]Ÿ6Q­&kšö¥RÑhšv ˜•YºìmòwºÛ\®£/°1[w-‘?™æçJ©oÑë¿Hþ‘ÖMô3 34M+b‹QPš¦]†*¥P²5¹O“4MûÆ;ËÈÈàܹs€žD2dÝ»wϳbÂݾ´ÞÍí1 þþþ\»–¿ÙU'Oê'ÌçÌ™sG }õªLÜðtŒEQª2¼ááá¦Hÿøñãøûûß·ÄFa•² o ú)¶75M»néÁdi6ZŸŸ•år>¿—¦$ÀÍxØ5‹\¡ÃØìŸ}rœL|`"üöü¯-T® §ƒ÷½N6–‡Ñ3ùÛ-=ÛíÞ½Ûtš,ËØ±c5j_|ñUªT¡_¿~LŸ>~ÿýwüüüpss»ËK7MÓ¢É>Ýý>zkçâ’¾qjq·Œ¾]Ößuذa¦ùwü1ÿý73gÎ,ô¾oݺEÛ¶mÙ·o6l k×®Åön™ç”RKÐϰKàkô §D+mˆ;iš¶W)Õ=Ó;¨^L‡J¦s3¿X›…««+?þøc¾¶-Hå*ÐÏÈÜ® ¯ß¬ 4È3³zÇ<~GGDZ(,’á?>_~ùe®ë¾ýö[zöìÉéÓúD¢Þ½{óÇ`k{Ÿ¥ž…TŠ2¼ëÑçí•ø\bsÉj%¬eè™^'½¨yëݽ¼!Çÿ<»ÊÐiº~ íðr}.ð¨½Å?n º‚žÉ_R2ùy9qâþùg®)®®®¼öÚk¸¸è½¢IO× Ìž=›‰'Ò¶m[‹Œ×\2çS>¨”ˆ~ºÛÇ̇؉þ%§ðUß‹àøñã|ÿý÷¤¦¦2wî\@ï¼ôá‡S¤€×ÚÚ:×ýGŽÉÙ³g‹µ‡¹d¢}•RÐ4šËQôÓØe¯J9–™á_¡”úšì ¿Ùv,¦hš–ŸueR^³q²¦4õë×ϵ·ïË"Þ¬…0/¾˜ýÌÙÙÙ4¥$”‚€÷8z ûó}·,åŒ6út‡Íÿѧ/÷×;ôü4ø¸ûCÔï™Ó"ò¨u½gž^·Ñ¡ D†­îܦœH>¦išoéÁÜ———©µl–ЬY3Ój`€]»vqúôi–.]ʆ 8p AAAüñÇ|öÙgFž|òIÓà?ü€‡‡û÷ïçèÑ£,Z´¨DW~hš¶J)õú‡¡9ª£œjšö…öU$íÛ·g÷îÝܸq{{{Ö®]K¯^½X¾|¹i›ëׯóÑGqòäI‚ƒƒ3f vvvÄÄÄðÙgŸÑºukV®\Ipp0 ÀÙÙ™ôôtöîÝKçÎùì³ÏÈÈÈàõ×_G)Å+¯¼‚½½=+W®dûöí¸»»3fÌÓŠì¹sçÒµkW¾úê+\\\xá…,òÜhš¶Y)Õ0ÇRñåègíÊB¼ )G†1`Ž,l*ÐÊRÕuJŠ««+gÎÜy²¢C‡Ìš5‹E‹1þ| ŒìÞ ÕZا¨lllpqq1]222rµÎéï¿ÿfðàÁ´nÝšqãÆÝQÏ­0,<¥á aiv ÑK×ääà ÍGë?Û8êS²<±ªê…Ã5MÏîv›—ÿ„?VèAqå̵ð!/êYà,Uè Ü/×û¹w~»x›…\G¯±ùbYvA¯“¸yóf6oÞÌo¿ýÀ_|aj2% OOO:tè@ÿþýñööæÈ‘#Œ1‚–-[Ò­[7žþyvìÐk$íØ±ƒñãÇcccØ1í˜{Oš¦%kšöª9‚TMÓ&•†`ôLìC=ĺuz¹×/¿ü’þý³W8išFÿþý¹páO=õGŽ1•‹‹‹ãý÷ßgåÊ•<ñÄüñǦº™éé馠¹}ûö(¥èß¿?ýû÷ÇÖÖ–wß}—+V0`ÀÜÜÜèÑ£ñññ¦1¼üòË´lÙ’ž={–äÓqMÓÒÍ1õ@Ó´3ì– š¦ý“9­©¨ûI/ïÁ.è >Ì´iÓøúë¯Ù°a /r9r$_}õcÇŽeÏž=œ;wްtéRzôèaÑq[lïîÝ»yë-}h­Zµ4h©hrNiii :”§Ÿ~šeË–qàÀž{î9¶o/Ú´GKfx3Ë"•jò(¬âPUŸ× zÀÛú_¹ok4$÷öu»è—Ûµ¹íäQÝ0ýRžeV^0sÑâÅ·ß~ èßèCBòžÖêîƒuêÔ1eq—,YBÿþý ###ƒ‘#GòÝwßÑ®ÞZ©U«V¦•Æ¢äõïߟ×^{€€œsÕ¾ '""‚ï¿ÿkkkêÕ«GÆ ‰ŽÖãÔÔTÞzë-œñòòbøðáwì¿fÍš(¥ 2MiøüóÏ™?>íÚµ£cÇŽlܸ‘uëÖñä“zªÁƒª¦º¢dMŸ>)S¦°jÕ*bccñòò2•™œ6m~~~Ìž=;×:gggÓ6–b±* ®®®¦•zUªT¹ëvDGGS¹re~þùg222HMM͵À­02ÞR9RˆÒ I“&…>-uþüy"##s}‰­Q#»úSqµùÄõë×™3g Èu[tt4¦,xyy““5kÖ4ÕlöôôäÒ¥û¯»Ó4K—.å*AרQ#.^Ìžâx{I%!Dn;wîÌ×v¯¿þº©SæíêÕ«gúòš¥K—.w\—å»ï¾»ãºÚµk³reÞ¥â Çgøðá\¼x‘‹/âîîNõêÕs-Šóññ¹ë1‹‹Å2¼¹N£e-~¹]||<ÖÖÖDEE™®1bD‘³•‚9¼B”··õööÆÙÙÙtçvå¡´aY7hÐ æÎËÇœëoW£F þüóORRR°±±!::šèèhªW¯~Ï¢õ·Ëú?Q©R%”RT«V˜Ê':tˆQ£F™¶/ ‹Û„ùW­Zµm*t?¥¾o½zõHHH S§Nw5/ŠRV–Lˆ2-$$„%K–O›6mxî¹çxüñÇquu¥]»vœ={–ŒŒŒ\_r…eeea€\¯¿¿?Íš5cìØ±<þøã,Y²„Þ½{SµjÕ¼mÚ´aÆŒ4oÞœž={2räH¦M›FBB &&F¦0!JL©ªÃ›¦M›Æã?N÷îÝqrrb×®]|úé§Eªù)^!î®I“&y¾¾Fmª›8xð`Ót¤§žzŠ€€Ž9BÆ ñ÷÷gýúõ¬ZµŠ•+WâííMïÞ½ £jÕª%÷`„IÓ¦Mó|îííísUFX¹r%K—.eãÆôèу!Cô únnn<õÔS¦ílmm™0aVVVŒ?ÞtÛ|ÀÖ­[‰ŒŒ$==çž{ŽZµj™ª4lذÁôiÔ¨QT®\¹X³B€…2¼#G޼£˜±ÑhdÕªU¦ßW¬Xašï1|øp:wîÌ0 2¤Èî%Ã+ÄÝ5iÒ„&MšÜqýèÑ£M?œ½²ÑÖÖ–N:åêöãããÃK/½tÇ>ÂÂÊù ÅRìnW;;»\e"íìì;vìÛU®\™‘#³ûËÚØØ˜‚\++«\u›+W®Ìc=–ëþ½zõÊ3«›sjƒB‹dxoo_—¥uëìN­Zå.ÆêããƒùjÀK†W!„¢b(Lª6ùìÙ³‘fI Û³gO"’áB!„(÷ ð.œ0aBÄ­[·RÌ>š²oß¾4kkëÕ@™h „Bˆò-11ñdRRRª¥ÇQddd\-è} ðjš–þL§NÖ}÷ÝwçÒÒÒ º ‹9þ<3f̸2gΜù¿þúëH-¯fÐB!„%쥗^:WæÏ —„[·n…ô>…™Ã‹¦iç¾J©ƒ‚‚žnÞ¼yã‘#G­8n1HNNæ‡~HÛ¾}{Dttô†]»v½¥iÚ5KK!„"§«W¯n©Q£Fá»jUééé\¼xqSAïW¨€7‹¦i»€]J)ûM›6  z" 088¸j@@€µ¯¯o®Î%áêÕ«œ8q‚ãǧŸ9sæÊ… þHNN~sË–-ùkQ"„Baûöí{ÅÝݽ­··w£ûo]1EDDüðØcý_AïW¤€7‹¦i7€ÅÀb¥”ÑÃÃÃ?000ÌÊʪ««k /777Ï€€§jÕªáè舓“ŽŽŽ888ä+(Ö47n@bb"IIIÄÅÅÉÅ‹.]¿~=:###Âh4nûçŸ~Þ·oßý{^ !„B”S§N½¾xñâþIIIsëÕ«×MºRf»\©¯yIDATuëVÊñãÇ?ûã?^êСCïo–€7'MÓÒ¿2/ïg]¯”² méååÕRÓ´*niii•ÓÓÓ]€J666¶ÖÖÖ¶ÖÖÖ¶VVV¶iii·RSSM++«++«8£Ñk4¯ÙÚÚFÛÛÛoûàƒ <—£¼HMbÍ"iAŸ/©IÜ´ôÌáÆ7§Nú¥ÇQlÛ¶Íìïq–ò¿ÿýﻺuëÆYz¥]```œ¦i[zE•šÄÍŸ& ¯ó|8½Ñü±Œ%=úøäÉ“{4kÖìqOOφ•*UòSJ•«ÇXééé7’’’NDGGï2dÈæ®]»j?JÖm !„BˆòLråB!„¢\“€W!„B”kð !„BˆrM^!„BQ®IÀ+„B!Ê5 x…B!D¹&¯B!„(×$àB!„åš¼B!„¢\“€W!„B”kð !„Bˆríÿ‰;æ–Ø9IEND®B`‚cups-2.2.7/doc/images/cups-raster-chain.svg000664 000765 000024 00000055171 13255074424 021247 0ustar00msweetstaff000000 000000 image/svg+xml PPD Printer OptionalPortMonitor Backend OptionalPostScriptFilter RequiredRasterFilter PrintFile CUPSFilters CUPSFilters cups-2.2.7/doc/images/cups.png000664 000765 000024 00000011430 13255074424 016644 0ustar00msweetstaff000000 000000 ‰PNG  IHDR€€Ã>aËsBIT|dˆ pHYs··šcS+tEXtSoftwarewww.inkscape.org›î<•IDATxœíy¼Tŕǿ‡EE4¸#~EŒ£Q³ FâJ4“E͸ÇOÔù`2qFÀQM$“1¸ebĉΠq4jŒ‘Œ{’qa ð¹„EQDàùãÔµï»t¿î®ªîÛý^ÿ>Ÿû¹}«k9uëÜSÛ9§DUi¡û¢GÞ´/Z ÐÍÑb€nŽts´ ›£WÞÔ ""À®ÀžÀÀÖ@?wO~oÞ.q­V©êƺ_CHWœŠH`$p°ÖèC­³þ˜ <“\ªÚ˜g®è "}€C€Ñî:èY§â—S`ˆÇTõÿêTn45ˆÈ§³“01Þ˜Ü Ü®ª+ó&¦šŽDd[à›XÃïŸ39a=pÆ jƒ¾è¦a×ðÿHã|í•âeàFàZU]—71i4<ˆÈVÀ8`<0 grBñ20NUÌ› Í"r:0Ø9gRbã~à|U}5oB’DäãÀMÀ±yÓRC¬¾LQÕ yÑp "§×ýó¦¥N˜œ¤ªÊ£ð†aÙ¸ 8!oZrÀ;À—Tõ÷õ.¸!@D¿öË›–±ø†ª>PÏBsg9øù ôÖc«y˱ÕÃþÀ¶î޻δlÎRÕÛêU`® "c@ß³x›‚-–¥®¥ªºªúú;bKËŸq×ÔvB Tõê–‘*M5— 8Û\Ñ\óaB½#ÓÝ[ü1°¢Fô+pI]Ú!§Æ‰õy1_X;ð0ºŽõè Z‰ïØõ9¶Ë1ðYL,Ç|YwCó`æT½†F®×ÀÎ]†ÜKZñ½ |5φ/RÇ1Àˆu|èÑô l ̉øbîvÌ»ÁKÔu `"°!R]/ê p]¤—±8=ïF®°ÎGc‹<¡uÞŒhZŽÔø»æÝ°UÖý“@[„º·ÛĦ¯æZÁ"² 0-BVOǨêkòªTõÏØÀ7TUl7à¼pŠ:¢æ A"2SÙ Á\`¤ª¾¤\ "€ÙÀà€l–ƒUu}¢¨±]€ˆAxã¿„}ùMÛøj+Ž_Å–ž}±pJŠ 5“"ÒxÍRàmrÕë4DälL=Ì/{k¤†«¥øaÿ6ptWj|U½ ¸5 ‹½€±‘È©pzú¯Û{f¡XŸÿ»xT5œáJ¶ë胧Uõà´ÔJ|ÿƘÖU@UW×d1BDAK­$À,àÓžÉW{ªê›Eòì ¼ )ÍZ§2~®{¼QUW‰È¹ØöTš™DdwŒAWªêM"28ÓýýàPàSØæÎµêôõDd;àÛ.Þ=ªú’gý:B¥Àuªú€ø AXÇ,xœßIÞÓ]œé™ðÁ©ôÃ\X›{^l—Š{Œ _àž÷O¥Ý ØxÏ=OL¥›æÂf½"½«Iïiv£.ýC@Ú?×Ç"Äa ¦PTu1fƒp‰ˆì."£€30ý…Ó4ž…ð5ØÎ¨ö‘¿ % *ˆÈö˜xõŸˆ/7o‰È!UÄ¿x ³&¾˜êÂ/s+{QàÆ¿õLÞJCl pÐÇ3í]ªúDDZÜ 0Õ­M”…›cŸ‰}GC°¥ÜŠ%IøM@Úà`4‘b>¸,-܆í#ìüs¥‰Tõà© ©ê¦¸¤ðÖ§û qÓñì™vŽªþ¥‚x•¼¨bqÎÅúA^YˆÈ>À©© I"²E%i«ª.Çö:|ðÙJ¥Z)Äd€Á_¥jÐÉÔ0;øšúýF6‘ª.ÀÄ÷VÀåå ‘žØŒc àaà]l[wR…tV ßn /6eõFAN}ú žÉ7wVwž»%"ÃUõ/"²pš _ªªo—H;Û˜RA9bîeVcRà+ÀO Eä>UU!½•b pgÚ¶ ’#ÍgGá?Ÿ}°Šr¶ÄT¾Ø,¡£ÚÕ驸m–”“°#SqK­ >pÏßrqzO»°ù@ŸØë'y]±º€ÁÈí•FTÛ…MË–acޱú×Tuz*úblçlm*ýÃÀÏ\øü{~“Fã1湸ťkÇ<’,ÀfgUSÁFF”¥`ùìëªk0ÅN/¯"²…ª~è“¶C°p&߉{} ÕøáˆÑì¿­\ÝÍ¡[舳€þv5‘¿ -3Ák² 4nwP2ñ6¨êû%òÛ ªï»9u? ]3*hÎA/lL!”q:©ª«SiÖ©êúly%h~×9²eï‹u™ £J¾3€ÿÆoô¿ž* 7±uùl>k1Irh*Þ%Ê\‚mæ$ñ®qá÷¹çSqGeÊ~Â…ŸL(W?—æ÷¨Jüg𴪣ªGb:[µûf&ÞÅ.ÞÑŽÎ×0fSAC‹Šý¡ª7©ê0U†™€¼•„¹ðrøºˆtæk Öø³0™±ªº7æ?‰R´U‹ÐA`5[¬Y„0ÀGPÛ>žïwè$Þ& ËÄKËdûf¾>AD*iÌj‘HëÝ*j¸}þ¯¸Çñ™ñȥ؊æ$7 Bhð‰€´! °ˆ|ûš÷¢àXêéL¼ãœ( Þ=Ú0—4a)¦ðClÜ12€Öb˜‰-*þ•‚J‚„éÚ§à#5ûDr}àîÛa]œ7BÀWñs¦ýã‹Ãؼ±gweÂÆI;I+sÐ8ø{àp9£zËb¶ò=ùÏÌýÜ}#ö®’°{3ñŽÀ§Þí|àÍÀ©Ì¬/¼¸û2ŽËNŸ0¿Â#°/ø*6MDÊÚ+¸ê9ØÈûJ´œ‹åÿöõ÷ EÒÓÖ¤KÛ‚‚4X‹©¥íNFA¨ðõÝ»:°ÜTõ»Ä[ ªÏ¸ßOŠÈqØ  ”Õ?PÕ?ˆÈ4lí?*8\‹™z}.Sî ™‹mõN‘Ý3]D¾l‹€¼$@(ø"Q¼Ø±Š4ØÏ–‚À~ë볇IŸ¯ˆÈE"ò_øoE(ä%|±ØÝw«4šQç?Õ†PÕg)b+èÖ)ŽÁ¤£€+€“1;e•Z*EÐn ˆ¬Ä f¨jvÎ^Iy{»`sî’ƒH9 cîç5åPDvÆf kUu–[Ç”äçŒD†c˱sJä¹@M+ ß ëV>TÕ§2iÀÄõU}5UÞ몺(okL`–ª®Mý×Ûoù[Ì<¯. … B dTÜb€AÈ40äøo%Ùø.Ïâó›Uõ1×ÇOÆæÔ7«êRévÅhë‚f‰ÈÀù.¯vlunªª>éúÞrfj?w÷Ó:‰sË7ך2.ucƒ‹SÿŸ—ÔÛÀ£ñWèYæá¶MWb’¤ƒB(¶˜(oöN¥½Ó…ÏÃ\¼IÁWñ[ttçvÖÅ•«Ç9‹J]ÇÉëû™z]šù¿¬íÞ²ï4€ `€ó,sf’ûÊ{`_µ¯¸8ƒ(X÷^èÂK•}„ {Ô=OvÏ=€¸°˜t<&u%ÌrY*l׬ÈÄO®Eà¥L½žÏ‹Bº€Rú÷•À×&~»oÂf0í"r& TDz©êë"r9fr‰ˆüÃwªêãîwr>A»ˆôpy]IÅ´‚f&‹H²X37žü\—OÃùH° ""©êÝÔv_l§r`•ï#`þ`†g™?Hå±³(:‰×[êUàUwØ%çßSy-Å,NÉæ•ŠŸt=Çg ð&™Ò×x'-­¦»ÿ&ºçŸƒa€tTUªæªØ$Sf/LägN¿3âHÅÍ«\P$¯+0I–ÍëL(vµa€¤;J”Sf»çƒ›Š\ÅVwRùήß–Û S»ÛTÇŒC2ñîwÿ-¤„W—×ç]^m.þ&2.i+`€eئNúúTè D›=(ð§lœfa€%ø1Àóe Æö¾¥ãè¾ð×ä…fÒ$J˜3+Ì«Ö+v€S5 ÐÖ íYø÷;‘>òb€ÐÍ ß Ï ð¯˜VÏ(LU+À~‚‚Å’b Ëä5>•×®\¼^%}}Ddd‘kP‘¸w¸{28¬Ô86>%À#øI€÷<Ë;3•ÇLd'ã_áö6ÊI€"y½›Éë—Eòò(¶hµÙ×MÁØô©bR¢^ T!ÄWô‘ÝUõåj©ê4™í¡Çìã‹©JݪîM¦0óòñ\…yÍîn+’×]˜†NV2,¢£'‘,^ÄÖ’8‰&Ô•Ø^ÿ]©ðlœš#t;øFÌjÖ'¨ê}Þ…·yÀö¸[È¡ °¸|”’h1@ t â*¥Å)ˆÈǰ 6ÌQÕ…> CàL]Ùçè×ÝD¤¿ª4u!Œ¢0=¬‡-vU .@ÍÜjNÙˆ¥ÑO Ï¢çU¥ð‚oÂ"ž HÛê Z>JQ¬#`,ƒBÆŸP~W/ÌÓÍ-¢*FÞ`ŒˆD³rirøvÞâ"0€šOÝͼsVˆ>,{»-ÜGà« ’/8„H“#ÑÐÌ8 mûúX 2í,rº3¾¶é%@OlS¤;ãËžéÞÒ”™šb1À“4êgi{WÇ"¤Ip1Vot¦…T1¢žê|,Æÿì €/«êq(j\ˆÈLЪÅzÌÍþ;¡tD•nMzjÙˆcJèAHM‚KðߎŸ£ñ¡6‡GßB˜RãPŠû÷ë2‘¡˜B_DS#Îj‡>ߘͥ]|upþ}ÿZ ZY«ããÿ#0ý¶À1ÎÆm4ˆÈÉ„-|ý\3g ÑsØ!c‘_¾Ó÷p¬ª~P.b3@DöÃ|ÿú¨Ð° qR6 j%¾GÁ©±/Fww…A¡ˆ À X|Ì™E´Æ‡2€[º2BVc€Ûݳ)áhŸmà‹W(œµ´;ø=qÐzÝ\/{¹Èï@0%¡õ?©&ôÕá…¿#‰Í˜è—w£VQ÷¾Ø†Mh½Ÿ!c¬Ú4 à^ÄäH  ˜1æáy7nuÞøc¤:\3:ëô2zb'{Åb‚v'VR`nÞ_T×;jJk_Ê ¸º¤4ÀΜHÁM]è5غK0€{A#)}¦_¨4Ø>džï‰9œˆõÕ«Ëëã5§=‡—u¦Ì“ ["½ødëóEL37f]Öû׃þš­v9›"‡$DÄ㘶ÌCªb¾ÜQmcë_b+±l¶Ä9ߢȅDdv,[­±sý²s¹,¹´‚%f·1B£MÁ¹S-pžª†(ÖT…Ü>’×çk¼MŠ!\ØÇ2WŸâIk‚«Tµ®º‘¹2€ˆ‰mwgÁMØr“µÎ ’;8eЩâ0§.„Ø2ïãyÞ,ª:;)Š¢cáIl´ŸKãCƒ0€ª®TÕ±#ÕƒÕŠ €Gk iW(¢ ÈBDvÄ”KÇæMK ° 8¥^Ó¼rh †ª®PÕã1¯Y!–Ç„ä<áÒøÐ  9óí¿wÞ´x`æ³øUvès,4ÀG+p_ÃÖÜGÓ Ò+……˜FÔíªº>obJ¡i ç‚ýàt`Ï|©é€õ˜ÒçO{5ÀyS½Ð” †;Ÿw4æhñP`ë:ÿÖà¿s׬FþÚ‹¡é wðÃg°mç}€=0ç !§œ&X‡MOçPhð¹jGÀ7-º”‚;¶mf´º ¦«×;i¤/¦Èñ>6E[éî~«ª÷i§ŒnÁ-”F£¤[¨1Z ÐÍÑb€nŽts´ ›ãÿÙ2¶{LåIEND®B`‚cups-2.2.7/doc/images/cups.svg000664 000765 000024 00000077754 13255074424 016704 0ustar00msweetstaff000000 000000 image/svg+xml CUPS Icon Michael Sweet Apple Inc. cups-2.2.7/doc/images/generic.png000664 000765 000024 00000015130 13255074424 017307 0ustar00msweetstaff000000 000000 ‰PNG  IHDR€€Ã>aË$iCCPICC Profile8…UßoÛT>‰oR¤? XG‡ŠÅ¯US[¹­ÆI“¥íJ¥éØ*$ä:7‰©Û鶪O{7ü@ÙH§kk?ì<Ê»øÎí¾kktüqóÝ‹mÇ6°nÆ¶ÂøØ¯±-ümR;`zŠ–¡Êðv x#=\Ó% ëoàYÐÚRÚ±£¥êùÐ#&Á?È>ÌÒ¹áЪþ¢þ©n¨_¨Ôß;j„;¦$}*}+ý(}'}/ýLŠtYº"ý$]•¾‘.9»ï½Ÿ%Ø{¯_aÝŠ]hÕkŸ5'SNÊ{äå”ü¼ü²<°¹_“§ä½ðì öÍ ý½t ³jMµ{-ñ4%ׯTÅ„«tYÛŸ“¦R6ÈÆØô#§v\œå–Šx:žŠ'H‰ï‹OÄÇâ3·ž¼ø^ø&°¦õþ“0::àm,L%È3â:qVEô t›ÐÍ]~ߢI«vÖ6ÊWÙ¯ª¯) |ʸ2]ÕG‡Í4Ïå(6w¸½Â‹£$¾ƒ"ŽèAÞû¾EvÝ mî[D‡ÿÂ;ëVh[¨}íõ¿Ú†ðN|æ3¢‹õº½âç£Hä‘S:°ßûéKâÝt·Ñx€÷UÏ'D;7ÿ®7;_"ÿÑeó?Yqxl+ÖiTXtXML:com.adobe.xmp Michael Sweet Copyright 2010 Apple Inc. New Image ï¾€– IDATxÚíwŒÕÇï.+*Š "K·¡Ñ( ˆÄ‚åGPboÄšX–ÄB¢‰‰%¨?kÄË‚5ú³¢‚‘b,‘¢€€€ÀüÎçºg2oÞ̼7oß{»ïí=ÉÝ™½÷Ny÷|ïisKI ÏózÈaœ¤á’Hê,©­qÔ’i“¤å’fKjôlMM͸Ê51Œ¯—ÃdIã%µqmZÑ´EÒÓ’& ç€0¨‘ÔÁµ]UÑj¤¹€`z0³6Äü‹ä0Í1¿* žNkäq¶hìùÓœÈo*aŒJ‚š€ÎŸãz~«Rý± TLvÌouê`²•®ÞONô·JUЧ¶ÑÏwÌo}ÏÇ€á®-Z- G,’“z×­’€Æ…w[+mžk‡ÖKui/Xµj•™>ýßhâ‰'žhÚµkçZ±‚)µ˜5k–9ðÀíù¯¿þjzôèáZ±5I‰™í·ßÞ?wÔÊ$€£ê¢ZשèÇ4#FŒ°iùòåe7ß|³Í¿ë®»ìÿ¯¼òŠ™0a‚Ù}÷ÝM¯^½Ìi§ffÏž×}ÿýwsÓM7™¡C‡švÚÉvØafòäÉfëÖ­‘×Ϙ1ÃŒ9ÒtëÖÍl»í¶¦wïÞæˆ#Ž0¯¿þzdýŸþÙœ{î¹f¿ýö³†ì¡‡jn½õÖØû‡ÛSO=eN>ùdûn÷ÝwŸ-ãù+V¬ˆm»xÀÖ»÷Þ{³Ê|ðAsÜqÇ™Ž;šîÝ»Û{ûí·yµÕ/¿üb®½öZÓ¿3hРt õRÒ×_ʰIŒÀŒ²“N:ÉæŸwÞyÞ“O>é‰à×Õ´ãŽ;zo¾ùfâ}çÌ™ãtÐAY×’Ž?þxoÓ¦M×>÷Üs~¹4 7dÈoçw¶ÿ òžõöÛo{:u²å{íµ—'àòöÿQ£Fy›7oκ&øÛ„‘ïôÌ3Ïx8{.Ìl·-[¶xÂX[ç½÷Þóóׯ_ïqÆ6¿}ûöÞá‡îõíÛ×þ¿Ã;xo½õVb[}óÍ7^¿~ýüÿ9OC%€ ÑkÛ¶­wÉ%—x3gÎôþøãËt‘¶\¤Aƒ÷/ÃÛc=¼‡~Øt{ ,ð.½ôR¿\zKƵ}úô±ùW_}µ'=ØÏ—^žõŽ+W®ôÁH•¨Ç3É—Þ ‘^]]BCCƒýmâ{7Þx£-ÿüs[¶Í6Ûdõ:ýmbWd•)QF믿>#_ì{OçJ=ô­¿Ûn»EÞï„N°å·ÜrKl[E©ˆ4TW˲6Þ¶qeHai¯aÄuîÜÙž_~ùåæÃ?4Ÿ}ö™8p ?~¼5ŠDf\¿nÝ:#½Î7º^xá…Œò¿ÿþÛÿùç³téRkP†IDxìû}öÙæ£>2¢ZÌí·ßî×{â‰'ì=1‚»téâן7ožÿÜc=6ë~"Iü€[í»ï¾å 5•°r¡5kÖ|møúSN9Å|òÉ'–ßÿ½yôÑGÍã?n­|,n \‰ŽÌˆh&Öu’HŒ9sÅWX‰}`­zH$—=^xá…õ•±üê'½KÕÄÄh²GÜÂB¯º^Œ/óÕW_«¶—âÎÑðgu–_GÄ¿.¢Ó4ªÀÈ$ÆUê÷Ã%ŒÚë¡?þØüðÃÖ-U@(áîA¸¸IïòÒK/UT£ ½Ñ üÿ .¸ÀúÏ—]v™ÍÊ÷ÍÅÍò¿] ªKAH!èÅ_4ýõ—OÆþþùçg…ΉA@_~ù¥Ù°aCõDã¢Ëß}÷‹Õž4I{= sÌ1F ªØëA#q׌XÓF¼¿Lâöˆš(D å"t9’Fü{#žŽyþùçM›6mŒ¸YuÅxµï*.±™2eJó„KáˆÎõî¹çž Ÿ\ d¡|øðá‰÷Åš–hWF9.V4åbðùùøÎqÌ Þ¼üòËþýD"øù¸—¸N䋸öþüóϬwY²d‰'=26”‹ð´8Êgóغaôƒ>µÌ*'^öí“xÐ"Ü@"^‚zºòÊ+½k®¹ÆžS&V°^%Ý?Ÿ‘p¨m qãÆÙÀe—‚4wî\›{'úÞÖ?õÔS}ÿškÃôÚk¯y¢¯}ìÌ3Ïôn¸á‘S75ì[§€¢‘BžGmôèÑ~]bÄ*ˆ5Ün»íìïª(ÐH}4°"?ŽñaÿÜ“TžXë6¤ÛÜ„J{ÿý÷=‰ÄœŠI%`ݯ4„$= Uœ`ذaé!b(ò­¥Ø'FBán<€#Ge ¢ªüZùÔjÄØK}­|Ÿ÷ƒ(â8Δ‰Ü˜@§98rpäàÈÀ‘€#GŽ98rpäਊ©,C£ÏèØiÓ¦™œ™‘O’‘/ö6ͰoƒÈx8;u›/Œ ö`°ƒKdØ–Vœ(â¨0*Ù×@nËt-l™®³sȇÑqÕ2CT}†swß}×–¹¥jZ€Q2þÏ\|ñÅ–ñôâà÷ý\ —‰Ê,81žžùH ‚z&3q˜t ‹5°ƒ)a2 ÜŠ˜­`a²§,8aAàÐŒ`ò¢Œ}·"™)NI³ƒÓSºÖ®]kçÐEÍ¢ UÀÀNGe†3r1ì~úé'ßcTœÏGäsŽêTÌãÛe—]2ê3̓AÈ´j¦~¹AMe -ã÷¬þaççÓû”‰Ú ›bä1ŸŽ9óôxføËÐý¨`€!nQ'GE¢U´âVÝ*éŒY FÔÓëa8Ì'§O;*!h` 0>%TJþBA†"âeò¦µöa:â@plnâ}PSSrªNÀ ~èÝwß]æë3a8 ðx>G Á|µ7JA¸š,£é·ß~32[Ø®Å'ÓÜìú…x%¼k\wÝu‰6OE€F—E—Œ¬ÃW¶¢1eb¦ßÓa6¢_ÏU ¤Ñý¨¯ Cõ¦²l yx0† •Ú4ú|;ð~Ìõ‡ñÄ#0zy—JEÔ%1ŸÆfy’rëYùÁO^PðN0 Iah`* eíz-yôVHHYfûqîÇ9 $áfvíÚ5‹‰<¡ŽXõT¦§ÛÅ©¸yº¸¦X®o‹¢÷‹/¾(ûK©èöx O£Ë‹våÎažª+uEIôb˜Êy¾¤^÷"ЄÊâO¬ðÅ7 õFrÁtÞ§êŒ@m®ëò”S%€‚@cþôz>ɯ–ÁiBÉú»¸Ÿ&¤¡¾Jz<ù§Ÿ~º]؉h#e¸©ÝT€Uz:Ú0£œ¤’G™´½,·ú®A[!l3ð¿æÁ4â*I`.ÿG%ÔKx-Á|âùÔÏ k !µø½²VBNp&F4:û€‰£èp~–xSa¨&˜§:_™­)ŸÞª®oS\L†æ m/‚d€›ÿi›$  Öo¹ˆ—g%1T½†!îù”ÁLýøCGý”‹¹G¡!êb×/&€ÔHFB÷pBeñ’šªKêå ³ò,ž‰ngÅÕÉ‚ 8+»Ðw,5ÃËe/ÑYX~6ø±LßU@~’H@9Ý?õ¿éå<—EÉC”åÓCÒ2¤Ô -v×ÇÑ‘RQ×é·ÇLâc‹úŽª¢Ô†¦4`SËÓêäbK”¸÷¡cÐ>²¼]dø<ø~jK5é[@9 ƒNE¾£h"®‘$u‚`ÊGŠ»QÁLA7Èè4êÛ Bd~ š ÎE¸a:tpÜ(a,„@T\¯ùi™_0x ÌÓK2dpWH¹^ã¯R÷#.f0(ŠùÁ{†ŸW^À ܳ¨õrË–¯5m¶éivìÐÓhUªqîW—óÍ[6˜eKÿgê»ý㻕¬ ÿþð1å‚ëÿ¨w+Ø#ßÏŸËW¬1Ýz0ݺï/<–4?¾æ_¦›P[lÚ¸Dþ®l–Ï«¥çæK¹ö1ˆzŸ(ÕP„'z$¡d¯M'³÷€¡¦&†nÚ¸ÞlÙºÊ,1ÖRVLÀáçó:n¨{\/þö4j 5ˆ,iX1—ˆýsÕj3`ðL—]óº÷ü9›öí¶ø÷ÏGd'Šä¹¥Öã~:*­(ÔH zÜv-á¸ÙÛÎôî7È´ï¸Sü3Œ€õkW™ŸçÎ0]:ïš7ÀJá^5gxÑOïORIz¾5:"/ÚºÁÌŸý¾©ï; »q&Àº5+ÌÜYïšÛ3ׯ]ÙD~¹UHÒóèõº—¢~‹N¨ í©BQùPúÝ̲3ÍÒy ±=Dc ]ä£Fmmû¢ö¨|zlP…èy© иçé„›àç÷¤QMÅ výB05K‡RÅ=8øQ§:¶©n[©>Øäê­J :a +û †?ÙêHã\º>JDåÕ üôÓOý—d0B¡=²ÜFV¹ëçóûa<^Oø{}œ!õ‚ïôJ‚@:`4ÛW^ ƒ.xÏB‚#…ZàiÊa8.µ+/F»”ÅäÅ@,I¨ãçâFðD©p'L#•šlíè¨D™[¤¡é¤ë#å£ÿ£òKˆ“ •>A¢)ÎM#Ýx€ e|’;˜Jâ¸æ¬<æ'!í`^€ @Ô`B¤€@!xžÖåu¨p5ÐýïPÁÌGü µÜ{U"âl€*õý£˜\ˆ1èT@…QÜÇžBm'ªÈt V„80¸@P+b¼ŽqF`+T %Жeu”íD…ŒÈ ·åÄœèDjCР A7 ‹÷-ÀYaxF€V›>w¨bæë„íõÁ9†NT1)³ƒŒî ¢û)9P¥¤Œ3= €Ñ£G;T#id6ØÓu?k6,¯½ r€¹€¬9ë¨åˆíñ € :`iý±cÇÚÙEÌÎÖÜÇ‚kÒ:jþÞÜñD7ÓÐü=÷ÜÓŒ?Þ®ß@Òͯ’+tªñÀíÖ°ŽšŸùÚÓƒ=^%:ŸÝVYAœ #XE\—ó)ˆvòd·ÐRîÕç(7óY;0lô1C{èСv«]6Ò€éì€Ôæ KÔ%1ñÁFUò-cE Fê&ZÊÈ8ÀJfì3z8GVneÇÀê-¨Ý&/—È’”m£€!Šúõëg—/+×þ%z½îÛD¯2dˆ=ê>‡LˇùHŒ?ÏæÃ»\½Þ€å’êà÷Ã|nÆ>ø`+ œ:(óIv¸tjÕÓ«u=et<ü¡÷“àyÔɃùÐò1&¦ËÉÈ(½ƒû·råJ»w ;q²½*yH¶ygódç"—Ðå0CnРAþŽhôvòa0u‚‰<Êt¡Ž{¾…hˆ€ª†hÑ;zPFž#Ô'uT8W7…Êxe:|€Ùù  {,QOŸr‰»$@9ÁÏkxÀaýZöàEpä‰b]»´%ƒ È|ííˆö ã•éè)p÷RôxŸ:¹p¡0ðiùgBV”¨qo\®k×ðB µN˽ÃXµ2_ ž ÈxÝN™Þ„u™ž†÷5â#pޤ¬-@4ð ;‰ÂxµN(PõKÁ°n‘ö*f7ŠþrŸÅ5F’ô(U @oéîl€ÒÙ‡ÑЛØÛâŒÜkº}^ˆÉÉaJ”ÑùnIæ¨iê ˆL2¢Üó¿þ³"Œ$x6J8ªhBìÓžïÛyè£BIS㨲iK#/û‡™)BÒqœ¤á’HêlBacG-ŽíÝÝãyk?®òÿqŠeW•³çIEND®B`‚cups-2.2.7/doc/images/left.gif000664 000765 000024 00000002724 13255074424 016613 0ustar00msweetstaff000000 000000 GIF89a@$ç¼aaabbbccceeeggghhhiiijjjkkkmmmoooqqqrrrssstttvvvwwwyyy{{{|||}}}~~~€€€‚‚‚„„„………†††‰‰‰ŠŠŠ‹‹‹ŒŒŒ‘‘‘’’’”””–––———˜˜˜ššš›››žžž   ¡¡¡¢¢¢¤¤¤¥¥¥§§§¨¨¨©©©ªªª«««¬¬¬­­­®®®¯¯¯°°°±±±²²²³³³´´´µµµ¶¶¶···¸¸¸¹¹¹ººº»»»¼¼¼½½½¾¾¾¿¿¿ÀÀÀÁÁÁÂÂÂÃÃÃÄÄÄÅÅÅÆÆÆÈÈÈÉÉÉÊÊÊËËËÌÌÌÍÍÍÎÎÎÏÏÏÐÐÐÑÑÑÓÓÓÔÔÔÔÕÔÕÕÕÖÖÖ×××ØØØØÙØÙÙÙÚÚÚÚÛÚÛÛÛÝÞÝÞÞÞßßßßàßàààáááâââãããäääååååæååæææææææççæææçæççæçççççèèçèçèççèèèèèèèééèèèéèèéééééêéééêêêêêëêêëêëêëêêëëëëëëìëëìììììíìììíììíííííííîîíîíîííîîîîíîîîîîïïîïîïïïïîïïïðïðïðïðððððññðððñññññññòòñññòññòòòòòòòóòóòòóóóóóôóóôóôóôôôôóôôôõôôôõôõõôõõõõöõööö÷÷øøøøøùøùùøffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!ù ÿ,@$@þmÍRe •Áƒ*\Ȱ¡Ã„x^µ‚õð! 2jÔ¨¢QÅx6qÊô1a‘ŒLP­™2%Ê‘1ÂT¡R㆑!¨F•\ˆQ!C‚‚ J”hD Ši†¥P£¦C§NÔ«X³j%:çÖ­Z;Ê­ˆ§T)RcQÉXcT"Kˆ)RÈ ”Œ)P}Jk$G޶‚ô„ >Wi`@ÁFðR<€ú v% e€$âáG t¸† L8á'±îˆxð!™Ž /ÕÆxàòÉ‚ÄQ†o Œò*š$‚‡4×lóÍ8ç¬óÎ<ß;cups-2.2.7/doc/images/left.xcf.gz000664 000765 000024 00000002252 13255074424 017241 0ustar00msweetstaff000000 000000 ‹µTmh[U>76ökÅêº!VgÚnÒNû±®IœÔÍõ•9Åüiš¤™mRÓ”µ¢´*ó×-…uSéQû#‚"â?]unèæ°÷Ü››äæÃ¤7Íë{νio»øÓož÷ëœ{Þç<­×76n›rylߨ›àêEÛIôu+š àÏV´ªï WZÚ´í†Ïú¶!F¬óâ±í®ÀؘÛ"Fñ¶ƒA·3ä¶÷…Flýƒ?Á*õ¼Õ7æôºÛ½Aß°Ñ-TµN„¦GÝ6Ÿ?äN¸]!_À?ÑVÓêñº£ ­•C{Ð;ä´uutñUÆÙc8m¸u¨ÌÖ=›otØÖ©‰q§Ëç÷Úöv—²5­Óå’F®}Òï áå]#nvë©€Ç3á­Ý‹í¾1¥g6n%ëK8L»L‰Û cìÖv÷Lu÷ØFÞ+YŒ–›×™g/hz©jÃg«Æäךü-&¿ÎäßbœÕ`œ_iª•”qçú--¾Mןå9Ë»,˜±ô®Y5Ѭ¶æm¤žd_:·$Ê×~œëÀÛ­öý•°z¦oPô鯿ðäÐ)àû<9g!}ùçÑ]Ùu`‘XÉÊ–Ë  âØK5ÊYø ë‘c³–ÇÜÏyŽºp¼Ã‘›°+lý hcí{ûdfg«™ÿ|Ó‰¶eáKRÝ»·éÞ}Í»[¶7;êqGx`š´|vjñÅç†Þ;÷Öð3¼?ìx–Ü=0ðèËþw:éŸ}ÝéŇÁƒ&I]Ï®Žvïs<ÜuO[¥€)¯!¶Ó³'ƒ¯Yœ9;‡—ðZWWóýOwÞ8Ò×ÍÐBò, VmòÛù:ô´–(ü„¼å·^K¼G; Ú!ìÈ÷œÁXHî)€ï*б,Êà ;aŸÖ¾øSó\@n°¸3‰”dsä›>PïÃw^íü)ÏÊ?œÿyà/~­PB„ X‰-4bk%I¢òùO¼9ÞßÄdØÈ¶—èÿT¸P8]¯xƒIÿ°Y ð?´´Ê Ô²^¶–þÈJ×ĺuÇÆœµƒZ&­&U‡ZˆIT¶ËZ„&ó9{NÕÜ?³ÙŒjW5šÍè˜N3,Ò´v`˜J§y˜Ru?æT<Ѿ†Eš¬5‘ÐÓ‰xœ§ãBœmQÅ!kT‰)ìû4¦Ä8Fc:F¢QÄ"ÖŽ„y:Žè(³¸€±ì@$„"•É! ”ýj¢DÙdÅëT ^]ù Ë—¯þÍ0ºüÇ¥‹ö‹šª„é²}¹Í¤-¥è|D >¨š/ÏG†€¼¤ÌhÂ8Hñ‰)Ò¤d¹d"aæ%ÎCĸÂÓ!1EáƒÇ„ ¢BÔÁiÑç„Khâ¡Håý˜“d‰×dIâ[%*mâCd]â•kœ˜øçïKö%-PÑ.nÒGõ‘säVQn #½.Š5m¤S)³6Ö%R Iv&2‘ÔGO”KÅ` RÂ'P Qèœü†FŠ4,„›¨ekLH”t]ä A*¨XN3ÕþYÑíï]cups-2.2.7/doc/images/raster-organization.png000664 000765 000024 00000050756 13255074424 021712 0ustar00msweetstaff000000 000000 ‰PNG  IHDR¾ ™Ù9}sBIT|dˆ pHYscc×ÁdàtEXtSoftwarewww.inkscape.org›î< IDATxœìÝy¼U÷ñï—$, AAÂHXd5 ˆ€²éƒ¢ Žã2‚û(ãˆ+(:Œˆë #¨Ì38*à†êÈYâBd'$˜°o!ìä÷üqN“N¥ºï½¡ëÞ¾÷|Þ¯W¿:]U§êtÝ›þö9uê\G„š`{ޤ]Ù9`,Û1"®mjçã›Úqö6I¿jø€±ãOM éà{0"îlø€1ÂöÒ¦±JÓ Ÿ|€¢|€¢|€¢|€¢|€¢|€¢|€¢4};°Û«HÚRÒ3qÓH×ç¹°½ž¤u$Ý÷t}ªlO–ôBIGÄ‘®ÏXg{ª¤ $=wt}Ð-¾QÀö–¶µý_¶eûLÛ_²}„ítý†h-I•tÅHW¤>¤ô^ŽéŠtp°Rý¾4Ò©cûõ¶?j{·.Û¼=oó¦.Ûì·ym35´7*ïOp=0Z|},·ŽN‘t”¤q]¶Û%"®¶ŠaÄÙ^_Ò•’Ñ:üŽ’>.é’.¯®´½º¤¯KZMÒƒ¶ÏŠˆºé¬>&é•Jó“æª‹±‚_û´¤wKZ"é’¶“ô•[{Gç—o‹ˆsÚV? éVIÿkûui ¢9¹•Ý·-툸MÒm#]..•ô´¤çÛž­¬ß;?[©;yoI¨l³‹¤I’ÓØè>Ç0 øú×tIkJ IçuÚ("žlmûp¥oÇçFÄuelo"é@I÷EÄó²­%í)麈øí$í#iIó%ý*".éVaÛ/“ôI3•¾©ß!éIEÄÓʬ/iI{(}³¿ZÒw"♚mß¡ô;û­ü_¡ô7_ éýqoÞn‚¤×Hz±¤M•¾$üQÒO;ì÷IÓ”Îó’ö•ô2¥ÖÔ\IgFÄ‚šr»*u×Íiýí0ÛJ:¤ÛyÊ~Þ>àÄöŒ|6—´ž¤¿Iº^Ò"âáÊq_ªt¾$i¢íwUöý͈Xj{sIûIº9"~[SÿqJçi{I›Iš§ô'a~OÕl¿¯¤-$ý¯R î£ô;³I®ëÙ9l%"–Øþ½RËn/¥ëcíö’ôŒ¤%½#¿þJÍ6’tyD×e»¿IÚ¿rÜ`ß«æíϯÏêðûuI‡òWJÚ¢¦Ì÷óú#$}·¦ÜCÂïj彟]Y¾šR+î÷ùõuùç°Je»órùcÛ–­¢tiਗ਼:.‘tdM=^–×Ï–ô*IO´•¹±m»%=ض®õÿä;’Þ—ÿýõ‘þüÍIwJÚ¡Ñc4Xy‚ï¹?ç½Pj­¼AÒƒ(7#—¹§õXY?1ÿÇ]*izÛòVð-È`ïTjm$é#JߘŸ–4£¦žWä²7Kz­R lŠRkñ_%½·mûVð=.énI§çíÖ•t€Rë2T²Z| ”Z’û*µèöÊÇ[MËñb¥ÖàI») ž¥–ÉøÊ~[Á7_©…w€¤õ%m­eAx½¤q•ruÁ7)¿ŸºÇGòöª-X$¯ôedO¥ÛV—´•¤/æŸÓ=’¦¶m¿¾–}PßæíçíjƒO©Õ|}^w¹¤ÝóyÚ5Ÿ·ÈçqµJ¹VðÍ—t£Ò¨Ñççc~¯­Ü„!üžïŸË-ª,ß+/ÿR~}j~½}å}<œ—¿¬mùÑZrGIÚPÒÆZö{’­¯ý|>®Ô²ü;¥ÿûäm¶l+bÞçd¥Vó½’‰àëÅgÁWòC©ë¥õ­õúç’Žíö‹¡ !éðšuoÏëί,wÛqö«)÷í¼îß*ËßÑöa¸B+­f?k·çôšõæu·Ô¬kßUB(¯ÿg-û¢0¡²n5I7äõﮬkßÝj ˜¼nU-û²GeÝ Á×å}o›~ÏT?t(×jÝ}¬²|ü|a—²‚ï]yù Z1Ü&äó’>TY× ¾$­WY7N©K¹ö÷§K×Ô²–ÙVmËËËɯߘ_ m›YZöE¢Õʪ4à+$½ªæxïm{ïãÛ–·‚/$ýk‡º¶Z¹ÿ^³î%må ¾çðÐ0£ûXDüLé?Ôo•pŠÒµ…ÏHúƒí¹¶ÿ®¦hkßQ5ëZ˾Ñá°¿ˆÿ­Yþ›ü¼qeù;òóg"bq‡}vò¹še¿UúðØ(ð©sbÔ\«Sú —R7ïrר"]ÿùJe»ªS#âÁJ¹'%]˜_Vßû ØÞ@iäçIÇÄò•òóüÿ9"έ«»RëlKI;Õ¬RÒª óõÐ7ä:}±æ}\¥e¿'ès_Ÿ‹ˆ?DÄ~J^§·åÕ3%]b{J±Ÿ*}kÚÛöôÖBÛÛ+ugÝ­Î÷;ÝÐayk&Š *Ë·ÊÏ]¾ÔxR5#óïýJ-çu(ûçË·ÈÏ¿ï°þÊü¼y‡õÞûÝù¹úÞd{¢R‹rcI§EDíÍä¶·²}ŠíÙ¶çÙ~ÀöƒJ?K)uéöJë<]Õa}kùPÏS§ß‘\”Ÿ÷–$Û«*u3þ%òŒ8ñ7¥åž¶·ß«R¾½Îµ¿9èÿ”_nQ³É‚ˆx¨fùÆJ¿“wGÍ@§¬oGøbyß(FÄ9ñq¥ÿ°¯Rê‚'éäʶO)}³µ–ŸUäùù¿ª-¢6wXÞja=û;c{¥®%)uuÅ’¨¿¹öXwVØž¢Ô*¥3uZË_?\«ýÞ#·X¿«4äþWJƒê¶ûG¥ï•ô"¥`9O)ôZ­ˆ‰C9v—:MPº+¥kRuZçií|^«zzž´âý|»JZ£myËl¥)â¶Ë-°Ö¾‹Ú¶i}Aè6E[kÝ´šu+üne­Öþ`ö‹>GðB±4"~©4S’v°½fe³o*}½Õöª¶'Iz“RWÍ7{T•‡”®ÏH[gM¨ ÌG”FâIiZ´:­^•Û@r’Ò`Ÿ?IzC]÷lFÿJ#_›EÄþqDD¼U+ßNòžV—t§óÔZþ¤ÒymÚ%J¿«/È=­¬ >åõ;*uWïß»7?OUg­÷w_ͺN_ÆZs±v:g­C!øF·_äg«<¹;æ—J]¤¯Qº^3EÒo#âÖ^<Ò½y7ç—[öbŸÏ¡.Kµ¬ë´® KZÖ vs‡õ=cûJsy.”tp—럳”Þü2".¨Y?½f™”¾ÀH+÷¸õþ;ue¶–ßÚ¥UÞ3ùÜ\“_î­e×îfW6]³Íe•/1½·öuCù=hýn½°Co”î…Ä(@ðõ)Û«uùÖò’üü`DÔu5¶¹©eÝœµ¬¬Ö‡õ¿ôx¿+ã²üüŽëßQÙ®¶÷Wº=a‰ÒÈÂÚ‰²õòó ]ŠùZVÝ%)µV–JZ?ÿU€¡è‹óTqQ~ÞOéö“ë#âîö "Ýx¾Pé¶—WʵÌQúR°ož¨a9yBì­•F‚^;ØÊåA8Rú’²Â„Ù¶×VjÝc øú׿’æÛ>Þöró1:9DÒ—ó¢N£­4 `_¥¼SÒÏz\ÏO)}hû¤jXÛžžgŸUêž{Cžå¥½Pº=äQÕ&í ÛÛ*Mº¼ŠÒí$Õ)¶ªææçWÚ~v”a¾÷ÕWåçC•®gV[{-³•îùÜ¿RN’iÚ³ï)Ýã÷]ÛÏö„ØÞTÒæ—_ˆº®În>“ŸOÈ3µö;QÒ)ÝšQ€àëoÏWºŸi~åw…íË•ì§J×®–ôþºÂ‘nŠi¿ž÷ÿ¢ÃÔa++x¼YéÚʇ%ýÍöolŸcûZ¥¯ìå1»ÔežÒÍËK%}+ßîñcÛ7(Íhó¤ÒÔfMB8T©õö¤¤/Ú¾¾Ãc×\çË$ýR€]mûÛ?RúÂòv-›¯µNëúßW%ÝoûÎü˜Ð­‚±HéwæII_Ëõù±í¿J:MéüÏçpi]çkÍ;[½¾×Ò ÄqJ×÷®¬ÙæcJ#÷t«ÓŸòº@Ò_”FBÿNÒçW¢ŽçH:SéÊËm_`û‡J]¦;«OÿüVÄ\ýëz¥5RêþÙT©Õ¶T©»çB¥9+Ðáž¶–(Ýh½4oßÉß”>l:ýqØòú?VWDÄy¹¥ó-›wqœR@[Ë·HŸÎûé42PJ]lk+}0·›­4«IÇëNñuÛW*͆òb¥ Z é\¥i­êº·þ¬4G§À-¹ÎÕaì·æåíÝÌ·«ó‡v»öûçSúKoT´±¶Ò9ø¢Ò,;¯Uš)e9q²í¹yýFZÖ]Úºþww®ËÜš²ÿÏöÕJ3ël¯tžþ¦4šôSù¾´ª¹yw׬“Ò\Ÿçç!‰ˆ‡mÿ·–]'»¨Ã¦çkÙùýsÝ ¥ˆ¸Ãö,¥sº¿ÒõÀg”¦=;Giª¾êÿ™‡Ôá÷»m¿!éMy~Ñ¿Wºéý¥ÿ‹Ç)MR°‹j~Vè/­©z¿c{ŽÒÆ?pc Jþ&¿t€ «–y—Òµ¾ó"â Æ*·ü1Ç+}N ºž ÖeB—[7úÎHÕw´§¡È·>D¯êØßëH¶ïTšóuÐ×`‡Šß(2Ô&ÛkHúd~ÙÓañÝôÓ‡Áhû0©ú޶ó4M}ë§ßs Á7Ù~…R××áJ“_Õa2(Á76¢4c¾”f9bë}…à›>¦4XcNDt¬E"øÆ @gÜÇ( Á( Á( Á( Á( Á( Á( Á(JÓ7°Èöá 0v¬Õô >Û;*ýÒþú4íJ:@Ò¨ü³Dˆˆ¯6¸À“ÿˆð¬FÑÔ¢ 52¸Åö:¶·ib߀±Ëöz¶·nòMêÜCÒI í0ví#é_›<]€¢p (M]ã{µíŸ4±oÀØeûõ¶ÏnôMtuÚ^GÒq]Ïw³l¯'i½ˆ˜ÛØ1¸Æ(IS];Úþ`ûŒ]¶gÙ~_“Ç`p  (tuŠÂÌ-€¾ÁÌ-€Ò0s ½Äà@Q˜¹Ð7˜¹Pfn Ç˜¹Ð7˜¹€£«Pfnô fn”†™[è%·ŠÂÌ-€¾ÁÌ-€¢0s =ÖTWç‹m¿§‰}Æ.Û;Û>ªÉc45¸eœ¤UÚ7`ìjÓöã•Çý¶¯±}–í—Œt{Íöìü>ÿq€í¾•·;i¸ê¶’^-é0I“Fº"’d{šíwØ>ÍöU¶Éçñ„‘®ÆŽñ#]Œj«JZMÒ}’îÍËÖ´½¤%fûøˆ8~„êׄÖ{èÿ΄¼Ý„Æk4¶)éã5Ë9èZ|è…S#bF~l"iª¤Ó$YÒq¶wÙêa™'étIï–4KÒ÷F´6“>ô\D,–ô^IQú{MuÛkØÞÂöCÙ·íÕmO[™zÙ^-sÕ•)ßÛ/²½þ¶Ÿl{KÛë ñ8“l¿hè5”l¯i{sÛãV¢ì¶7̶ñ­ˆ82"N‹ˆ«$=1äÊ øÐˆˆX*iv~¹µ$Ù^ßö—mß(éQI7IZdûá|Mðög{ºíK$=,é6Û÷æASòó¶÷êPö(Ûs%-ÉÇ\’¯C¾´wïxhlofû\ÛHZ é.ÛwÛþ|]0ç û†íJçàI÷Ú¾/P™ÒåX;Ù¾JÒC’ؾÃö)¶»v×Úoû8Û·äcÞ¬tî.²=£fûéùç0;—=Åöí’Iºzðgh×øÐ¤‰ùùÑü¼…¤£%Í•t–ÒþÚ’^.épIûÛžwµïÄöΒΗ´–¤k%] iФƒ$ýZ©KõùJ×ßÚË“ôcI‡Hº_ÒÙ’Jš!é`IÛ~{DüwïÞòÀl¿Z© o²¤‹•ÞÓDIûK:FÒÞ¶÷ˆˆ§ÚŠí&é(IW)½ÿEJïùIïW:w/ŽˆåZH¶÷•ô³¼ÿË$]"é…’Þ,iuø °=UÒ¯$íªôsú¶ÒµÜ”~^ר>(".j+6.×i±Ò¹>0óBI åM"øÐÛ“%í—_þ5?Ï“´kD\YÙv¼¤¯Iz—¤$½£²»/(…Þ©’Þ—[“Ê]}çIê4zô=J¡w¹¤C"âž¶cî-é7’¾dûçñàßâö¶WèÂm³qÝBÛk)]Ú$éuqNÛº5•‚ú•¹îÿÞVô I3#âúÊþ&Jú‘RÈ|PÒçÛÖ­"éd¥Ð;>">ݶn¦Ò—‰ ;Ôÿ3J¡÷#Ioˆ%meß"é I_³½CD$í×¶|²¤$=#iÓÇ<9—ûÀÞóœ¶ã æñ•Jùóò“;ì𤥒 ¡N3ó>/©,]^~£¤Ujʽ·­žÓÚ–O—ôt>çS:ó¼\î ¶e3Úö÷úýŽýgÞßI#ýûΣù‡R/CHÚ¡ÉãÐâC/üK~TÝ'騈˜×¾Ðöê’vPjm eךKZßöĈhunŸŸÏk[ö¬ˆ¸Ôöy?í¶U âk"â¶õ¾P©›p›.ï­“_+uQvrp®CÕËòóOê EÄ<Û·IÚÌö”ˆx¸}}¾–÷b¥s·žR7okÀɦ•Ý휟ώÜJ®8SÒ)5ËwËû<¿zü6*u³n#é*ëž‘ôÓå€Gð¡nWêÆ”Òõ¼yJƒ/Έˆ‡Ú7´ýQIÿ¬ô¡ÝɆ’nÉÿn\ÐeûùZ1ø¶ÊÏÛä`¬Óº7lz—}wò“ˆøF§•y´j]ðµêõ}Ûua$IÏk«×Õy«*µ”´f‡rÕnËÖ¹›_·qD<`{±Rë¸®Ž¯êrîVo«cÕˆxºC9`Ä|è…ïDımdûhIŸ“t‡¤)uÞ§ÔÒ“Ò(дühãVk¦SHH©k¤ª‹”®usÓë{"¶Y+¿¼TÕ¤íß_Uº·í:IßPjmÞ§ôEc¥/ ®”oÍÆ²BK¹ÍcZ1øZçîV¥HÝü±fÙ’še@ß ø0œþ)?×µ¯È1ž_S¦Õòë6*°n]kPň8|HµlHDÝa7g)÷WÙÞ©Rnœ¤Ov(w‘¤k”¾¨×¥Ž“꾌ýŽàðȣ ÏË/¿fû=¶g䛹g+ ’¨kÍHÒ‡”ºùŽ–t‘ícmAiàÇšZ6+HõZß$=(éIWØ~“íóL&‡æ}Ü¡tCö°ÈÝ›§*}¸Æöñ¶÷µ=Óö+l¿ÛöÅZ~Ôç|-›þíLÛÿÏÝa’~¯×ð"Ý·øU¥VݶÌÇÙWÒ¹J#2W¸1Ò}yG)Ý^òIÛçÙ~½íílϲ}˜íÓ”&ÔTdƒe{§¿ÌpZ>FkvW¶/¯|1†¦Áû1¸oŒ?´ì>¾Ïrû •º.«÷ºÝ¦ôzc~=½¦ìÖJ·4oó˜Ò=?ë¶ý®mWSncI¿¨9fë1OÒ¬!¼çÖ±Þ9Àvg¨æ>¾¼n¥ÔêP§ÇU¹ÏOé¶Žù5Û^¥4%ÒçÚc}®¦Ü"¥ûînëôÿT鶉n÷-^'éEmÛ·îãûësøzI—ãµ?6éß½h˜îãs>XÏÙž£4óæQ¹ cƒím”GÌìÏ8wk¾F)È‘t¥¤«#â1Û³”ZBWDÄcÊOUê‚›Oæe÷JZGÒäˆx¤C¹”Z8[IzR©¥÷‡ˆ¨•Ø­þ;)M—vCD,ê²Ý ¥[,DÄ-¶YWéƒ~†RWîB¥ º¨î}Øž$éP¥ÖñJçîñ”Ó<¥Žå§k/»­Rëi=¥0›äk¤kä××”[Ei™J3²,V:ws"âæÊ¶ó¶K"M0=d¹ëvç7ìP_Œn¶¥4uߎÑí>Ùçv‚£™íC”n–¾)"¶éúXyÃ|\ãCß³ý|Û®ŽÎÌ¡wZ~ùéa¯€Q‰ûø0L’t’¤m/T帩–ÝxýM¥Œ0 ‚£ÁB¥©ºöUº¾·¶Òpû$ý "ιªm>ô½<ˆáôü€ç„k|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢|€¢Œ†cœ`{ñ00ºm=Žà;bŽÀ 4|·JrƒûŒMK›Üy“Á·™¤Y î065:þ„Á-€¢ Ç5¾»"bƒa8`”²}¢¤ DZhñŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðÃÄöûlŸmû¥#] dVší3m?^yÜoûÛgÙ~ÉH×±×lÏ®yÏÙ¾ÝöŶ±=¥CñÝ$&i“Ê>w´ýVÛ/nü ô1ÛûÙþ„íslÏo;¿/éºal?ÒÀ¨¶ª¤Õ$Ý'éÞ¼l ¶Hä IDATIÛKÚQÒa¶ˆãG¨~Mh½ç»$=˜—“´™¤%í)郶w‰ˆ…•²÷Hº]Ò’ÊòC%}RÒ±’þÔP½GƒŸHšT³ÜÃ]Œm´øÐ §FÄŒüØDÒTI§)}`g{·‘­^#>Õöž§KZGÒ!Já¶¡¤¯U DÄ#bZDül˜ë:Zü¯¤“ô:IÛŽp]0†|蹈X,é½’þ¢ô;öšê6¶×°½…í †²oÛ«Ûž¶2õ²½Z>æª+S¾›ˆx0"~.é[yÑËz}Œ*ÛkÙ^§Ëúul¯7È}·½‘íMm[‰º¬j{ší•nEÄk#âqŽRËhÁ‡FDÄRI³óË­%Éöú¶¿lûFIJºIÒ"Ûçk‚¯åØžnûIKºÍö½y È”ü|§í½:”=Êö\¥.Æ›$-É×!›dòûü<©¶ÿ#×óжewH::¿üH^ßz|©m» ò²™¶ßhû’î—t·íËlÔ¶í‡óú{òúlï\WYÛ·}¹¤Ç%Í—t«¤Gm_b{V‡2Çæº¼ÇöN¶§üs‘t¯íSšørô ×øÐ¤‰ùùÑü¼…Ò‡ü\IgIZ imI/—t¸¤ýmÏŒˆ»Úw’?´Ï—´–¤k%] iФƒ$ýZ©KõùJ×ßÚË“ôc¥.Èû%-i¡¤’–t±í·GÄ÷î-ëùù÷•uSs=Wo[v±¤”¾ܦtnZnhû÷º¹ìÛ$}Pé|ü.—}©¤3mo§4xæ3Jçåw’öPºæz±íM#âžJ>­t}ögJ­¬ñ’vÎû¼ÜöAñëJ™É¹.»Kú¬R`ž’ßßÁJ­ýímïOÕž%`$ED#Is$…¤;›:‘}HúQþ¶fÝdIwäõŸÎË^ iVͶã%š·=½fýyÝ×%­Ò¶|IWæu!i¿J¹÷çå—IZ¯²noIO*µŠ¦á=·~¯O–t@~,é¸\Ï¥Jƒ^v«)û½\öˆÊòÏæåŸìrÜ?åmžôŠÊºÿÈën”t§¤íÚÖ“t^—ŸÓ«%¯Yþ÷¹ÌõÕõ’Nj;çgH×¶nC¥ðIï|¿[k¶ã…#ý»Î£ù‡¤Û~æ;4y,º:Ñ «ÛžšÚÞGÒ¯$½PÒb¥GEĈ¸²Z8"ž–ôÏ’žVú ~Vîn{¹R«ä_"u¡¶ÊݧeÝ„ª”›¬ÔòY*éMQiéDÄEJpÖ•ô–•xÏïW ”ó$+éø\Ï?)…Þå+±ÏÁ85"ί,k ¤™.éß"âÏ­ñLÛú¿«î,"~‘Ïuùw%]*i«¼ß:‹%} £Un‘¤æ—øíîNô¿äGÕ}’ŽŠˆyí m¯®ÔE·±¤ ´ìZóbIëÛž­îÑíóóymËž—Ú¾3ï§Ý¶J]o×DÄmê}¡R€mÓå½ur®¤«Û^?OÒ‹%í%iŽí#"â—+±ßü¶fYûû» fý-ùyãºæk‘ÛIš&éEZÖeÜzÞTÒ_kŠþOD¬7ËÏ ºl?_+ßVùy›Œu&äçN-šnΈoTÚ~½¤Jú±í­"¢×£W8ñ„í§”ÞOÝyZœŸ×¬®°ý”n!èþvX^ûÞ""l/Pºn¹™–Ýã ô‚½ðˆ8v l-ésJ×þ>¦t½ì>-û`ž-i#-?Ú¸5´~©:«"‘R L’Iºb€ªÝ4ÀúA‹ˆÙ¾TipÈÛ”ôR·ó0˜õϲ½«RH‡¤/) ˜¹Sée(]Ëû¿ê<ú{…xͺÂi†Ó?åç"âºö¶WQ)XÕjùmÔe¿uë®ÏÏ #âð!Õò¹»M)ø6æãÕ»”º3ß§TWÚ^{€ò/ĺNÝÌÀˆap †El2M©%0·f“]T¹!k Ô8Ðö5ûÝUi´hÕ_òóŽÝnònH«ëtÑ ·".b½†â—’ö“ô^ÛÏ(ƒ©JçäMJÝÅ3º”¿AÒwmo¬tÃüTIGæòJ:a(•±ý6-;ÚVh»5±÷Ÿ"âëCÙ/°‚oFäö1þP—Ø;l¿¡R×eT·)þ»1¿ž^Svk¥€[š·yLé^ÁuÛ~×¶«)·±Òðúê1[yª¹©¾Ë{˜Óe_!éoJ·H¬ZS¶öö¼îJ£Û÷uzÛúÖ ì+¼Ç¼þɼ~rͺ´êVY¾Š¤Ô¼‡Ç”fÅùf~}d¥\ëöKúTMù;$í¼¿Oßà܆¤_Œôï=fÆØØs¶ç(}{»+"†41FÛÛ(Ý–0/*÷êu)3^©¥¶µ¤G”®/]å›Õ'Jº""ëP~ªRkmnD<™—Ý«ÔRœt(·ƒÒý­”BâIˆˆ?îÝ>»Ÿ”Z›UIšé¦úNeg*]ûšw׬Ÿ 4(äJ-žEqC^·‹ÒÉ«"¢úgd{O¥ û]Tºó¼™»Kz"jn¬ÏsœÎRê¾JÒ•qŸí-s]nˆtczkû“”Bø‚íÍ•ól&éI³#âÁêqÒv~º¹7"þ2À6…lŸ(é#ùåŽqmcÇ"ø0šÙ>D©‹î¦ˆØr¤ëS‚jðt}06 gð1¸}Ïöóó_X§²ü¥iǤÞß/`Œbp FƒIJוN´½Pi4â¦JaKéZÔY#T7£ Á‡Ñ`¡ÒhÁ}•®ï­­t-éI?ˆ'mF³îWš®ìá‘®°2>ô½ˆx\Òéù'*ÀF%®ñŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠBðŠ2~ޱ–í3†á8€Ñkçá:Ðpßê’Þ2 Ç`@tuŠÒH‹Ïö!’–´aûŒY‡Hú”¤×6uGDïwjO•´^DÜÔóÆ,ÛÏ“ô¼ˆ¸¹±c4|ô«F®ñÙÞÅö1Mì0vÙÞÍö?7yŒ¦·<)鑆ö »Ïº:Eiª«s}Û;5±oÀØe{Û;4yŒ¦º:w•tlCûŒ]{Húh“ «Pfn¥©k|‡ØþeûŒ]¶³}N£Ç`æ@¿`æzŒ™[}ƒ™[¥aæz‰™[}ƒ™[¥aæz‰™[Eaæ@ß`æ@Q˜¹€cæ@ß`æ@i˜¹€^bæ@ß`æ@i˜¹€^bæ@Q˜¹Ð7˜¹Pfn Ç˜¹Ð7˜¹Pfn —˜¹Ð7˜¹Pfn —˜¹Pfnô fn…™[è1fnô fn”†™[è%fnô fn”†™[è%fn…™[}ƒ™[Eaæz¬©®Îm°‰}Æ.Û³l¿¯Éc45¸å¥»ïŠÆóƒ®N@Q˜¹Ð7˜¹Pfn —˜¹Pfnô fn…™[è1fnô fn”†™[襦º:±ýÒ&ö »lÂöß5yŒžŸí©¶Çç—!i|·í$ÛkÛnÏ£q¯W]¶/éÓqnOv(‚í?K::"~;,Ç{.ÁgûI¿ˆˆ¿Ú^7"îí]Õc•íOJú^DÜ6Üù1ä®NÛ“mOÈ/Ÿ´š$z€n*—ÄÓåÇ[|¶/ôõˆøQ3UŒEýrIlPÁgûC’Έkm¯÷5_5Àhgû£J—Ä®ë—Kb»:mO±=1¿|¸µœÐt“Gi®–_>$ÉRÿ\ëØâ³}®¤ïGÄw†·J€ÑÌö…’¾þ•…•µ\ðåù5¯ˆˆËmO‰ˆ‡; É£üψ«m¯t:YÅöš¶'ç×IzJ’=@7•Kb(ͳ©~=)õ»þPÒe’ΈˆF¸>€QÂö/$ý\Òú=ìÚ­"é­’®U ?I’íWÚ^u¤*—t‡¤‹Z lïßv¯w_zöŸí5"â1ÛkJº\Òî±Øö[$]Æ_SÔiËçIºXÒK"âqÛÿ(鈸u„«¸œgogˆˆÇòó#±]D,Ϋ¶”4I’l¿Õö›†¿š€~Õ–÷çüx<¯š!iuI²}¤íÿ;Rul7à”eñ‰ˆ¸6¿¼UÒI²} í·¶³=¥™*F£ˆøpDÌÍ/o‘ô7I²ýZÛg¶¶îüXéIªmO•´yºº¤Û%MÍÍÝ%Ýô°®€1 w‰n°=MÒuJùñ”í—HšK;~ÿ,Ñó"âþüïÙ’Ž‰ˆ9¶÷‘ôPD\ݓƔJ~\)é¨LÒÆñ…çä4—¤ ’ž–tãV 0 DÄ÷ÛòcœÒ$Ú7ކß$I·IÚ%"æt}£ƒíµ$ݤÔkøìQo|Tçʰ=Éöé¶×Ì71nJè’ÿTÒéyþЇ$Mk=©Ï‚Ïö&’”ÃîfI«µ½ V+?”n›»UËòãѶ헮NÛ«Iš'iOþ`°ò%±yJ—ÄnhûmñÙž`û›¶§FÄ’¶ ô±=±rIlÚ`BO¡àËÃJO)MN:!¿¦KБíM¥g»0ÿ*iÕüzÐù1ì]¶Ç+]¿;8"®ÖƒF­|IìI{GÄÍ+»ŸaiñÙ^ÅöÙÞ "ž–´¡H¾$ößù/8<¡ôçðV:ô¤†ƒ/O$êˆX*é IK%)W€ZyÎÍÖ%±+%9¿~ÎùÑXWgž8ôFI‡ñ·øƒe{‚Ò篊ˆ¿ô|ÿM^ã³½­;ÀP5™tuÚÞËöW=ÀPØÞÏöIMæGS×øîÄŸ Õ|I—4y€¾™¹€áÐTW禶nb߀±+ß p@“Çhª«scIû6´oÀص©¤}š<]€¢4ÕÕ¹ŠíU›Ø7`ì²=®éühª«ó bT'`èÞ,é7M ‘®Î|×ýjñHÏw³rkoÕ&óƒk|€¢4:sKûŒ]­™[š<3·ú 3·ÐKÌÜè£yæ–M%|€¡ÚBR£ÁGW' (ÌÜèÌÜ( 3·ÊÁÌ-ô3·ú3·JÃÌ-ô3·ú3·JÃÌ-ô3·ú3·JÃÌ-€r0s =ÆÌ-€¾ÁÌ-€Ò0s ½ÄÌ-€¾ÁÌ-€Ò0s ½ÄÌ-€¾ÁÌ-€Ò0s  ÌÜ@1s  o0s  4ÌÜ@/1s  o0s  4ÌÜ@/1s  o0s  4ÌÜ(3·ÐcÌÜèÌÜ( 3·ÐKÌÜèÌÜ( 3·ÐKÌÜèÌÜ( 3·ÊÁÌ-ôXS×øö°ýù&ö »lïcû_›ÆöÚC=&Ð Á‡FDÄRI³óË­%Éöú¶¿lûFIJºIÒ"Ûçk‚/è´?ÛÓm_"éaI·Ù¾7ʘ’Ÿï´½W‡²GÙž+iI>æ’|ò¥½{ÇCc{3ÛçÚ~@ÒIwÙ¾Ûöçë‚9Ý7l/P:7Hº×ö}y€Ê”.ÇÚÉöU’’´Àö¶O±Ýµ›ÐöxÛÇÙ¾%óf¥sw‘í5ÛOÏ?‡Ù¹ì)¶o—´HÒÕƒ?;’¤9’~ªÔ{ð‘!–º¢Mj]Ÿy4?o!éhIs%¥ô¿¶¤—+]Üßö̈¸«}'¶w–t¾¤µ$]+éIS$$é×J]ªÏWº>Ô^nœ¤K:DÒý’Ζ´PÒ IKºØöÛ#â¿{÷–fûÕ’¾'i²¤‹•ÞÓDIûK:FÒÞ¶÷ˆˆ§ÚŠí&é(IW)½ÿEJïùIïW:w/Žˆ'*ÇÚWÒÏòþ/“t‰¤Jz³RWbíg€í©’~%iW¥ŸÓ·%Ý'i'¥Ÿ×5¶Šˆ‹ÚŠËuZ¬t®ÌǼPÒFC9GÙ'$ýIÿdûäˆX¸ûV@ð¡¶'KÚ/¿ük~ž'i׈¸²²íxI_“ô.I'HzGew_P ½S%½/·&•»úΓÔiôè{”BïrI‡DÄ=mÇÜ[Òo$}ÉöÏ#âÁ!¾Åím¯Ð…Ûf㺅¶×’tºÒ(Ê×EÄ9mëÖT êWæºÿ{[Ñ+$ÍŒˆë+û›(éGJ!óAIŸo[·Š¤“•BïøˆøtÛº™J_&6ìPÿÏ(…Þ$½5"–´•}‹¤3$}ÍöñL¥ìJ!¸sµ¾CsmGÒ[$+éÝ+»/`9ÑÈC©«"$MkêYÒ’ž‘´i‡cžœË}`ïyNÛñóøJ¥ü‰yùÉö?MÒRI †P§™yŸ—T–¿./¿QÒ*5åÞÛVÏim˧Kz:Ÿó)Žy^.wPÛ²mû{ýJþNµ~oŽÈ¯7‘ôDþÝØ¢m»ïåí>>Òÿxôî¡ÔË’vhò8´øÐ ÿ’U÷I:*"æµ/´½º¤”ZEhÙµæÅ’Ö·=1"ZÝ£ÛççóÚ–=+".µ}gÞO»m•‚øšˆ¸­C½/Tê&ܦË{ëä×J]”œëPõ²üü“ºB1Ïöm’6³=%"n_Ÿ¯å½XéÜ­§ÔÍÛp²iew;çç³#·’+ΔtJÍòÝò>ϯ¿Í…JݬÛHúŸÊºg”®Ï=gq»íÓ$ý“¤ÏJzc/ö‹²|è…Û•º1¥t=ožÒà‹3"â¡ö mTÒ?+}hw²¡¤[ò¿[£tÙ~¾V ¾­òó69ë´î±›Þeßü$"¾Ñie­Z|­z}ßv]IÒóÚêuuÞߪJ­Å#%­Ù¡\µÛ²uîæ×mØ^¬Ô:®«ã«ºœ»ÕÛêXµ0"žîPneœ éí’³ýùˆèö…Á‡^øND;ÐF¶–ô9IwHú˜R·á}J-=)ÝHË6nµf:…„”ºFªZá±HéúX77 °¾'ò`›µòËK•ºðºy¤íß_UºÆuÒPÿk•ÎÝ£Jçë¥Ö_»Öl,+´”Û<¦ƒ¯uînUˆÔÍk–-©Y¶Ò"ânÛ_–tœ¤SÔ¬4‚ÃéŸòóq]ûŠ<ãù5eZ-¿n£ëÖµU,ŒˆÃ‡TˆDÄ3¶oRº&wRD\>˜r¹kø(¥ Ü+"¯vq¶´ºxkïÝ˭Ⱥ–wëÜ]oL‡Á—”üh{Ï‘® F7îãðȣ<§)µ>êZ»¨r;Böçü| í5jö»«¤ºûÿþ’ŸwêÞ kÕkß!”™©Ôò½µzÙîÊÝœŸ÷è°~w­ØJ”–Õq/Û}1åZ¾Öø¹üòsª¯70(†Ë¥®½‰J£>Ÿ•ogø|]¡ˆ¸L©[p}I'Øv[¹)’¾Ü¡Ü|¥Q§kH:9·(W`{B¾Å`¸|E©kö£¶·ê´‘íuÛ^ÞŸŸ·­ÎZ“¿P|ºÃnÎR:ﯲ½S¥Ü8IŸìPî"I×(}Q9®K'Õ}iÐו®õî®Êï0†EUx^~ù5Ûï±=#ßÌ=[iD]kF’>¤ÔÍw´¤‹lkû J?ÖÔ²YAª×ú> éAIG(M˜ý&Û;æ™LÍû¸Cé†ìa‘»7OUúpíãmïk{¦íWØ~·í‹µü¨ÏùZ6ýÛ™¶ÿ!Ÿ»Ã$ý^®áEºoñ«J­£ l™³¯¤s•Fd®pÿb¤ûòŽRº…à“¶Ï³ýzÛÛÙžeû°<Òr¡–  i\D<.éøü²®[®ña8½Géææm%ýGÛòy’öTº‡g…nɈ¸"wi~Gév€=%=®4ëÉß+}ˆKÒ]•r moŸõ*Iß­©ÓíJàÃéýJƒT>§úÕ’¾Ùzaûï%ýBéVƒöI¿¯4ãK§/ Ç)u“~´}Ÿ’îT üó”nûXND\m{—\æ€ü¨š«4 Úp:CéÖ™¦LËù¦ÁÞïØž£4óæÕû¸06ØÞFipļÁþŒs·æk”æï|DÒ•’®ŽˆÇlÏRj ]u(?U© nnD<™—Ý«˜“#â‘åvPjál¥4óÿ’þu£»Õ'¥éÒnˆˆE]¶›¡t‹Å‚ˆ¸¥Ã6ë*Í:3C©+w¡Ò€”‹êÞ‡íI’Ujß©tîþO9ÍSêX~ ±ö²Û*Ý쿞ÒhÚ9ñHþB±ª G[SIDATF~ýxM¹U”&˜©ô¥e±Ò¹›7W¶˜·]ñÿÛ»÷`Ï뺎㯗@EÁ *ŠPb5–y!ÍKŠŽšfcšSãÝòžâ˜¦"–6C”¢MvÑRËK% RšŒ¯Œ7PS¹… „„¨(|úãó=ìá·¿ßÙݳ{ÎröýxÌüæ·¿ß÷ºçìþžç{=ýœE_›•´ÖŽÎ8óõ‹½÷ËŒshÆ…íÉ8î9÷r 6žÖÚ©?Ƚ–—­Zkí1K¥÷~Ͻ>Àê­Wøããf¯µvûÖÚKfÏΜ¢÷¶éåkÖ}Å€ É1>6‚}’œ˜ä„ÖÚ%g9šM^Ÿ’q#À Á%·êzhÆñ½ý3N·?/Éûzï§ï¼U6áãfo:éâÓ`»8Æ@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)Â@)»¯Ã2Ni­]»Ë`c;z=²á;v–[e-Ãwq’/¬áüØ5ݰ–3_ËðœäÈ5œ?»¦5=ÿd=vuÞäòuX×¾IöY­Gø.ï½´Ë`ƒj­äeë±,—3PŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPŠðPÊî;{ظZk‡%¹íÌÛ×&ùFïýê°Jk®µvd’[μݓ\–äÂÞûV˜öä$OòìÞûÖn-7žÖÚ>I~rzyMïýó ÆÛ=Éý¦—g÷ÞoXõc×"|l7f|o¦µvi’?JrRïýëºVkëÏ“üì‚a×·ÖNKò½÷O̾_’Û'Ùkù›­µÇ%ù•$ÿÐ{ÿ§¹²Ƚ“ü×ôç¶Öï½ÿ÷œñö[6Þ¾I¾»+Ç®EøØ>äœéÏ{g|ˆýt’7'yP’Gî¤õZKg&ùÒôçÝ’“ä¨$¿œä¡­µõÞÿsÎ4?L2û~t’§%ùj’ªá[îÇ’¼6ÉSwöаk>v„ôÞ_þFkí)IÞä­µ'õÞß»sVmͼ§÷þöåo´ÖöKò‰ŒðŸä–ŸÆ¿É4læ{InHòäÖÚ‰½÷swö ±ë>ÖDïý=­µg$yHFn _kíŽIî“ä$×$9?ɶ´K´µvëŒ-«;'ùÔ4Í ­µ;%Ù'ɽ÷kL{»ŒcH‡flqÛ{ÿööý-oª÷~UkíO’œœäèÖZë½÷eëp‡$·NrÉÒ1ÐÖÚ½’0r@kíðe³¼ª÷~é4Þ]3v‘~½÷þƒÖÚm’ü|ÆÖæ¿õÞ¯™ùûÞ6ɧág÷Þ¿¹h½[k·Ì8nvHÆgÂW’|¾÷~Õ‚ñÌ8¶{YïýÊÖÚÞ[øwËØúÿBïýú•¿Z }7㇃W&yC’G­r>°Xï}MIÎÊ8èéZ-Ãcç>’üýô=~Ý‚áo†Ÿ:½¾GÆcŸóøz’G®°¬'fDrù4—$92ÉiÓëcçL·_’÷ÌYÞuI^žäÛøw^úwýÛ †ÿæ4üŠ9ÃÞ= {ʲ÷~¸àëÑ“¼sÙxçNïÝ'ÉŸfl-÷ƒ$ÇOãí™äÃ3ïKò¬ë{ê4ý첯Iò¢$»Í™æÄiœ—$yú4ÿåÓ~.É]¶ñëz¿iÚË3~8¸bzý€™ñX¶œ}vöÿ÷ÈØK²ô½ý©µ\–->ÖÒ§çÿ™žo—ä®ÜŸKra’ý“›äד|¨µvLïý³ËgÒZ{bÆã INJò¯In•ä×’œ‘dÑ–É~I>›ä.Ç×þ:#–‡'yqÆÉ9f|Ào·ÖÚžIž7½3¬%ù›lú)ñØ™á'Mï¿#I›v»Œ­‹ë’¶ ç¥×§fü„zBÆôǧz’³“g¾,XÞ‘Ó÷ïÊ9ó[ÚâëIž7çûõáiØ Ûðu½q‹oz½WF¸{–í ˆ-¾]ö‘uÜâs;;½ZkOn­½6ãÃ’S’¤÷~Mïýû æñ®ŒÚÙK’Ñ/Oãܨÿ-¯J²Ùñ¤ÖÚAIž•£Nã.Ÿö²$oÉ8ƒðI[ý7ÝäaI^6=^œqöê^[²/ë½_¼ŠynûtÜo™œž÷Ìø!döÿ÷MÏGÌά/8ÎÙÇ–áÇ3¶Èïµ`]¾™±µ·|ºe|O’ä9­µU}ÆLÿN~zùúÖZ[Í|`»:Ùž0=fžä¹³Ä­µû&ù¥Œ“Tʦ;õ$·j­Ý¦÷~åôÞ=§çÿ˜W’ôÞ¿ÑZ»0cêrGfœØñÅ$wZð¹¹´îðy·à-¹é¥·É8þö¼$g´ÖÞÐ{å*æ»%ŸžóÞ¥»o±`øEÓó!ófØZ;8ãzÌ»Nãì1 º÷ô|×ó=£Ï¹`¿÷þ™ÖÚå»‘ÎØ¥½‘ñCÅQIžœq¬¶›ð±#œ™äß§?_›äIÎë½nùH­µOòŒ­¥d|X_•äÿ¦×{NÏ·ÍØÅ–Œ³0“d¥-¨‹²yø–¶RŽÉüce˺…áóœß{ÿØÌ{h­ýmF$~¯µöá>ÿBöíqÙì½÷ë[k×g„o³á'¯$›‚v£éXÚ‹2¶|“äêŒïIϦ»òÌÞgÉE Þ_v`Æ×vUáë½ÿ¨µv|ÆñÝ×¶ÖÞ¿šùÀ,ácG8³÷þš­ï3¢wzÆî°sú²ÓÞ[k$¹ÓÌ4KQÜg…ùî;ç½¥M¼OfÜme%ßÚÂð­Ö{?o:ÉäáIŽË¸®ïfiºÖòåazv’Ó{ïß[6ü¯2N:Zd·†-}¶,¼…ÛVzÆîäû&yæô¶‹ð±žŽËØ’xâ²]™In<#òà9Ó|mz¾Û¼NÇî2gÐÒÙ‹{öÞß¶ºÕ]µÿžï°ÎËÝVÇMÏ/è½ÿóœás¿æËÌþ²ÜÒnÕy·Ûj½÷ÞZ{EÆY£¯Î8q¶‹“[XÓÅçdœy8ï"óGgþ¿Ç³2v‰>jº|Öã3NÀ˜unÆ›G´Ö~bU+½ ­µÝ²é&Ê_ÙÊɾ3=Ï ÿZºÇô¼Ù%­µC2v¯äáÓÅë³Ó>0ã{òí9'âl³ÞûiI>–q<øÛ;?>ÖEïý;ð{gæD˜ÖÚ“¼iÁtçgœÔ°g’wO׿-MwT6]$?;Ý•§Ýï–ä]ÓÝb6ÓZ»Okíî«ù;Í™×­3Îr<,ãLÓ®<Å–ŽÝµgA®ÒÒÝ\ž¶üÍ)f'gæfÚs˜±¶|Ú}3®½KÆMÊw”WLÏÏÞó¤(»:YOoOòÒ$ok­=:ãÚ·Ã2>xÏÍ8ùbÞ™‡/Ï8³ïAI.h­“qûQIþ.cKéÁÙüxÒë3Îý™$_n­½7ã,Ï–q2Ìý3¶ÎŽË¦]ª[ëU­µg-{}ëŒ ö÷ÈtW“ÞûÙ[9¯fœÌsT’ËZkŸÈØ*>£÷~Ê6®×¶8%Éc’üÆÿf\„þ„Œ¯ï_×E>’ä…ÓõÒ쿚qFíùY|áû6뽟ÕZû`ÆÅþ°]„õôêŒÔßʦK ¾Ÿqç¥øm¦÷~qkíþwìpÆ.¸OMó;1Ég¦Q/œ™îû­µŸKòÂŒ“iž93ë+’üå¢ånÁ!¹i¤¯Îø°?7É›ú6Ü\¹÷~ukíáIŽÏ¦ßð°{ÆmÃÖ,|½÷´Öž“qáð§Ç g¥>*c+k¥ð},#nïȦ{jöŒãpOs=áözeƯo²§ŠíÒæ\µcfÜÚY#«÷~К,„ iºaôáìçλlæµGÆÖÒÞIöî½_·Â¸g\æp]ÆéööÕßLy—1íž¼wÆ×ðÓ}æ†×sÆ?1ã>/í½¿yzïÎ'Ã|¶/¸¹5¬¤µvBƼIrtŸ¹uáŽd‹u7Ý5eÞõf«ñüŒK>¾Rô¦å^œ•¯,i Ý9[qåy\䂳F°¶„›½éWòœœä»¯Ìغxj6Ýúå;cÝ€GøØZ’GLYW$y~ïý¬õ]%`£>nözï_o­–ä¡gcîŸñ«ŽÎËø%¬—ïÄÕ«è“'}~g¯¬†ð±!ôÞ¿šä«;{=HzïïË¦ßøŽÓ‚(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(Eø(e÷uXÆþ­µS×a9l\÷\¯­GøöHò°uXl‘]”òÿ;?ÎøÚ"°†IEND®B`‚cups-2.2.7/doc/images/raster-organization.svg000664 000765 000024 00000020242 13255074424 021710 0ustar00msweetstaff000000 000000 image/svg+xml Synchronization Word Page Header 1 Page Bitmap 1 Page Header N Page Bitmap N cups-2.2.7/doc/images/raster.png000664 000765 000024 00000111430 13255074424 017173 0ustar00msweetstaff000000 000000 ‰PNG  IHDRpÀ"1UKsBIT|dˆ pHYs¯¯cæŽÃtEXtSoftwarewww.inkscape.org›î< IDATxœìÝw˜EþÇñwí’3( Y@(A$ˆ H:TïPQ ‡' *(A(ŠéL€ x€" (QA‰GÞC2HN.yaÙ­ßÝ3ÎÎÎl^g>¯çéggº««kzjk¾Ý]]m¬µˆˆˆˆHøˆuDDDD$uÀ‰ˆˆˆ„p""""aFœˆˆˆH˜Q'"""fÀ‰ˆˆˆ„p""""aFœˆˆˆH˜Q'"""fÀ‰ˆˆˆ„p""""a&[¨ "®Œ1×ÍB]á;kí¹PB䯔îÎ3!Ê!é3ÙZ;?Ô…Õ¿,᪭@mà«PB(\uœÚ¿,!dí_Fœ{¤L™2ñÅ‹·—¤Òš5k" ÀÕúªúBªŽ7R¶lÙP㪳hÑ":wîêb„’Ú¿ uû—!—PûõëѧOŸŒÈJRÉê"„œê_è¨þ9 (@¡B…B]Œ«NÞ¼yC]„Sû:¡nÿtƒˆˆˆH˜Q'"""fÀ‰ˆˆˆ„p""""aFœˆˆˆH˜Q'"""fÀ‰ˆˆˆ„p""""aFœˆˆˆH˜Q'"""fÀ‰ˆˆˆ„p""""aFœˆˆˆH˜Q'"""fÀ‰ˆˆˆ„p""""aFœˆˆˆH˜Q'"""fÀ‰ˆˆˆ„p""""aFœˆˆˆH˜Q'"""fÀ‰ˆˆˆ„p""""aFœˆˆˆH˜Q'"""fÀ‰ˆˆˆ„p""""aFœˆˆˆH˜ÉꈈHx:qâ“&MàÁ¤X±b!.‘ÈÕC\:õìÙ“ãÇóÐCqß}÷…º8r•Qý ›7ofذa‰æçΛ²eËR¾|y:tè@¡B…BPº¤:tˆ¾}ûдiSp"¡,À•/_ž .$˜I©R¥¸þúëiÙ²%<ò9räQ ƒ›7o ^½z¡.Ф‘Ꞔұcǘ2eJ’iž{î9 À‹/¾ø•JD²º,À=z4Ñ(8Gw«W¯fÚ´i 6Œ¹sçR½zõ”P®dª’UôêÕ‹ZµjpñâE:ÄôéÓÙ¹s'C† ¡`Á‚<óÌ3!.¥ˆdY"€ó¸ÿþû:t(ñññ;vŒ_~ù…7ß|“бcGÖ­[G¾|ùB\R¹©þI¨µnÝš{î¹'Á¼áÇsûí·³|ùrLïÞ½1Æ„¨„"’Ud©®P¡BT©RÅû¾Zµj4kÖŒJ•*ѵkWvìØÁÏ?ÿLÛ¶mCXJ¹R©þIV”-[6ºwïÎòåË9sæ »víâ†n˜vïÞ½ìß¿Ÿ“'OR©R%*W®Ldddª·¹ÿ~~ýõWrçÎMåÊ•)Q¢Dz?†ˆd°,ÀÓ¢E ï먨¨€? ÑÑÑüøãìÞ½›C‡Q¼xqnºé&j×®ªÆg÷îÝDEE±iÓ&Μ9à 7ÜÀwÜ´ÁLÎŽ;8xð õêÕÓÙ›0¤ú'¡–3gNïësçÎ%XvôèQ†Êœ9sØ·o_¢õš5kƸqã(Y²d’Û¸pრbüøñœ:u*Á²Æ3pà@Úµk—ªrÏ™3‡Î;ÃàÁƒyíµ×Rµ¾ˆÜùó罯såÊ•hy›6mX¸p!—/_N´,""‚¡C‡2xðà$/;œ:uŠ~ýú1nܸDËŒ1Üu×]Ì™3'UG³ , C‡œ?žþóŸ4kÖ,ÅëJÖ¡ú'¡¶bÅ À È*Uª”`Ù®]»øðÃ(]º4*T dÉ’=z”Õ«W3oÞ<êԩ÷ß~Ë­·Þ0ÿ-[¶Ð¡C¶oß@… ¨Y³&gÏžeóæÍ,[¶Œ1cƤ*€ûæ›oèÚµ+±±± >œAƒ¥å£‹HaÀMŸ>ÝûºQ£F‰–¯X±c íÛ·çÆo¤|ùòœ;w޵k×2mÚ4† BTTS§N ˜ÿáÇiРû÷ï'""‚:P§NòåËÇæÍ›™?>óæÍ#...Å? ³fÍâþûïçâÅ‹¼ôÒKÞ¾U~Tÿ$âãã9zô(ãÇçÓO?à©§ž"Ož< ÒåÌ™“Gy„gžy†›o¾9Á²ßÿ:°|ùrž{î9V¯^p[={ödûöí-Z”‰'ÒºuëËÿóŸÿ0sæÌ—ý‹/¾ GÄÅÅ1fÌúôé“âuE$…¬µéš;fÌ›¹sç¶€íСƒ]±b…]±b…]¶l™ýöÛomïÞ½mŽ9,`»vípý7ÞxÃ>|8à²éÓ§[ÀvýúõÓtïÞÝöÚk¯µ?ýôS¢åçγÏ=÷œ½téR¢e¥K—¶€}õÕW½ó¦L™b³eËf;jÔ¨ì´s?[›Îï1\'Õ?Õ¿PN@kÀþöÛoiÞ‡?ýô“·ŽdÏžÝæÌ™ÓæÌ™ÓFFFzçW­ZÕŽ=ÚÆÅÅ¥:ÿÕ«W{óÙ³gO¢å_~ù¥wù¢E‹‚æ›h^TT”wݵk×Zk­ýè£lDD„5ÆØÿûß©.ojüðÞí_o³@}ø«§Œhÿ$íBÝþe‰ äù 6Õ¨QÃNž<ÙÆÇǧ)ÿÊ•+[À¾õÖ[‰–­]»Öc,`ß}÷ÝTçíÿ:aÂi1vìØ±i*oj„º…zRýSý å”Ñ\°©zõêvÔ¨Qi à.\¸à­c+W®L´üî»ï¶€mܸqªóöàÆŒci?ÿüóTç—Z àÀ…R¨Û¿,u µP¡B/^p.:tˆsçαiÓ&^yåÊ”)Ãm·Ý–l>±±±œL|||¢üOœ8‘hÞ¶mÛ¨X±b‚;½RkòäÉlÙ²€ìÙ³S·nÝ4ç%¡¡ú'¡V¨P!®»î:ïûråÊѤIî¼óNî¸ã¦OŸÎôéÓ¹÷Þ{½ibccéÒ¥K‚¾š@Àúä{CŽgÝÝ»wpýõ×§«ìS¦L!Ož<œ?žeË–1vìXž}öÙtå)"Áe©.Š+òÅ_°{÷nV­ZÅÀY¸p¡w¹µ–N:ñí·ßP¤HêÖ­K‘"E¼wý­_¿žcÇŽqéÒ¥DùïØ±€²e˦«œ[¶l!Ož<”)S†mÛ¶Ñ¥K úzPý“¬àöÛo§N:¬[·Ž‰'&àžþy¦OŸNŽ9°/^L´nË–--`{ôè‘hY§N,`ï¼óÎ4•ÝÓ©páÂvÙ²evûöí6_¾|°ÝºuKSž©ú ©þ©þ…²þeh¸3fM×¹sg Ø*Uªxç]¾|Ù[ß{ï½€ëíÛ·Ï›ÿÔ©S-÷ôÑ0`@ªËîÛnþüùÖZkcbbìM7Ýd[¹re{öìÙTç›Rê—9}àNžýôÓA¿ÛqãÆyÛ¥M›6Ùk¯½6Qݺu Ø^öìÙ3Ù>¡ž©zõê·¿xñb{Ë-·$¹îÍ7ßlçÍ›—®ýêö/ËŸóð\VˆgïÞ½T®\À{k{¯^½xòÉ'®ë¹Dˆ'Ÿ½{÷¦«|}úôñޱ4vìX{ì1&MšDË–-éÖ­[ºò–ÐSý“Pó È\ @ï¼-[¶xŸãlŒ¶ÿýïIæ{ã7²}ûvV­Z•®ò]sÍ5€séö«¯¾¢^½zlß¾§Ÿ~š &¤+oùk:uŠ ={vÚµkGÍš5¹á†8~ü87ndêÔ©¼ÿþûÌŸ?Ÿ5kÖ$¨“¾.\¸@óæÍÉ–-  B… ,[¶Œ/¿ü’I“&qöìÙD—þÛ´iã­Kà\æë­·xà\ê÷ínà±iÓ&Ú´iÃ… ˆŒŒ¤]»vT¯^œ9s²yóf¢¢¢Øºu+k×®eÍš5Üu×]°ÇB#l8Ï“”.]Ú;?** €5j\ïàÁƒIþ8V­Z€ß~ûÍ›7S­Zµ4•/""ÂûúÑGeîܹL:•§žzІ &|S‹ꟄÒÖ­[Y·n7Ýt“w¾ï¸€k×® ØmäÈ‘IæÝ¹sg¾ûî;~þùg~úé'î¸ãހ鬵)~kµjÕxóÍ7yê©§øüóÏiÙ²%=ôPŠÖ•ÐË;7Æ ã‰'ž$õïߟ»ï¾›;vðòË/3f̘€ùÄÄÄP @–.]ê}šL¯^½hÚ´)ÿûßùöÛoÙ°aC‚Ëì÷Þ{o‚.çÎóp={öLðdœ@}ôQ.\¸@Ñ¢EY²d‰·õµlÙ2†žüŽÈâ"’OzGõdY¹råY+V €ï¾û.àº/½ôRÀò=î½÷^J•*E||<ôœ–Näøñã;¦óÑGQ¶lYΞ=K—.]ö’ð ú'•sçÎMtt4ÇŽ#**Š>úˆV­ZqñâEräÈÁßÿþwoúJ•*‘7o^>øàƒwžÆÆÆòÜsϱtéÒ$·Ù­[7êׯ@—.]ôñô˜7o?þxª>Ë“O>É=÷Üã}½sçÎT­/¡S¼xq† 0x¸ùæ›=z4ï½÷ž·/o O>ùd¢G>ñÄÞ>to¾ùf•ï꯿þzÀà œGÃ}ÿý÷ôíÛ7ö Y*€Û³g3fÌ`ÆŒLŸ>>úˆ~ýúQ¥JŽ?Ž1Ɖ{4iÒ€ùóç3a¢££8}ú4O=õãÆK²#wÞ¼yyýõ×gôú¶mÛ²cÇïitt4_~ù%ÕªUKò‡Ø_¡B…øòË/‰ŒŒdݺuüë_ÿJÕ¾¿žêŸ„ÚC=DáÂ…)\¸0Å‹§V­ZôêÕ‹}ûö‘3gN>øàƒ¶³eËÆˆ#øñÇ)Z´(íÛ·ç¾ûî£R¥JŒ;–Ñ£G“={ö Û4Æðé§Ÿrýõ×sìØ1ZµjEõêÕéÒ¥ íÛ·ç†n uëÖ‰ž³šŸ}ö%K–äÌ™3ÞÇjÉ•¡k×®,XË—/³lÙ² éî¿ÿþ€ó;tèÀš5k2¬L[¶lñ¶)¹?wîܶíHo':þ‚T[¬X1ûÑG%Z÷ĉ¶T©RÞtÙ³g·åÊ•ó\ùꫯÚ{î¹'h'r#FxGÜl¾|ùlñâÅ”!P‡Ë@#áûz饗¼ëÏž=;í;)Ô‰\õOõ/”õ/ÓòÍ™3§-_¾¼mÒ¤‰4hPЧ}ÄÇÇÛ·ÞzËæÏŸ?Áú×^{­w0gOgô@71xœ9sÆöêÕ+àÿC:uì7ß|“h@Obð·páBïÿCÿþýÓ°‡‚ÓM ¡È·Aƒ°/¼ðB‚ùž›€ 7:¼ýöÛ°yòäIrgÏžõæµ`Á‚$ÓúÖǤž*’QBÝþe‰>pMš4áâÅ‹ æEFFR¼xqJ—.MµjÕèÒ¥KÀ‰)R„uëÖ1pà@fΜɉ'øã?¸óÎ;yàxâ‰'xñÅ‰ŽŽ¦J•*AË0pà@Ú·oÏ«¯¾ÊÆÙ¹s'gÏž¥páÂÜqÇôîÝÛ{[¾¯FqìØ1Ê•+0ß—^z‰]»vqàÀ&L˜@‹-Ò5Þ—d<Õ? ¥fÍšy~ŒÓÄCß¾}éÙ³'›6mâСCÔªU+Áe«”\BÏ—/~ø!ï¿ÿ>»víâ×_%wîÜTªT‰ *\§f͚ɖ½yóæ©ºü/¡÷ /0wîÜdÓýöÛoA/çÉ“Ç{‰ßŸ§ûÉùóç9qâD‚ÒªB… c°Ö2vìXš5k– ð'½ !>¸Ú¡3 ª!¤ú—þ3p’v:—9í_=R<”$‚És.""Â^¾|9à6>ýôS‹;$É… ‚–%5gଵö‘Gñ¦oÔ¨‘6mZ¦ eêöï MEDD$µ<7Üu×]I%J”zu!>>>à#Áìœ3q®n¤Õ¨Q£¼£¬X±‚ûî»Â… së­·2|øpïk® àDDDÄË3ìgø¤@¶mÛÆáǨ^½zÐt+V¬8õêÕ”/_>­Å èºë®cõêÕ 8Ð`ÆÆÆ²bÅ ^|ñEªU«Æ<ÀÉ“'3t»¡ NDDD¼š5kFÞ¼yÙ³g³fÍ ˜¦_¿~Ô®];ɱÙþýï'šwäȾÿþ{|ðÁ (qB¹råbĈ8p€Ÿ~ú‰Aƒ%csêÔ©´lÙ2Ó/—ÙÀ‰ˆˆˆWñâŽc¤=öØcÌœ9Ó;ŒÑ¸ÿþû½ØÛo¿äóçϧwïÞœ8qpžÿܪU+bcc)V¬={öLq¹.]ºDLL 111)º1'""‚fÍš1|øp~ýõW.\è¨Úó\áp¦NDDDxþùçiݺ5'Nœ C‡äÍ›—"EŠP¦L¦M›FÞ¼y7n·ß~{Ð< .LŸ>}xÿý÷)Z´(… ¦råÊDEEQ°`A&Ožœª±ØÚµkGîܹÉ;wšžZÓ¼ys&Mšä}¢HFŽA YbÉ:òçÏÏ÷ßÏÛo¿ÍÔ©S‰ŠŠâôéÓT­Z•ºuëòòË/§è}cÆŒ¡X±b|ýõ×lذâŋӨQ#†ž¢ ,222`XªT©4}®R¥JQ¯^=V¯^Í©S§Ò”GV¡NDDDñŒ1Ø·o_âââˆMÓ£dàÀ\¸p!ÕO?È•+‹/Nõ6“â¹6©›/Â.¡ŠˆˆH’"##Ó=ÜÇ_ñèªíÛ·óÖ[oqîܹ€ËGÍþýû’¼ütNDDD²¤˜˜ïsSGŽI:u’LêÔ)ú÷ïÏðáÃiß¾=ÕªU£lÙ²=z”ï¾ûŽE‹лwon½õÖL/fR'"""YR\\óæÍàŸÿüg²é=ï:yò$Ÿþy¢åÙ³gçé§ŸfäÈ‘^Ö¿š8‘+È©S§?~<ݺuK÷3&¿úê+Ž=Jƒ hÔ¨QFQ$ÓT¯^'NðóÏ?óóÏ?³oß>Ž;F©R¥¨\¹2:t råÊ¡.f†È’ÜÙ³gÙ±cÙ²e£téÒ.\8Uë÷îÝ›н{wî½÷Þt•嫯¾bÊ”)T¬X‘7ß|3]yIxPý“P™5kãÆcÛ¶mìÙ³Ç;lC£FhÛ¶-M›6%gΜIæqâÄ ï^Í›7Ow÷Ö[o±fͬNRäž{îaýúõdË–þ#wîܬ_¿€n¸!EëäÌ™“–-[Ò²eËto?+Ë2\||<ãÇçµ×^cÏž= –•*UŠ6mÚУG7nœl^ .dÛ¶mÒØlݺ•™3g&{Ý]›ꟄÒÙ³g¹÷Þ{Y°`A‚ù‡âСC¬ZµŠ·ß~›ÿüç?<ðÀ!*¥HÊ)R„"EŠdH^Ô®];CòºÒd‰îòåË´lÙÒ{«pöìÙ)]º4/^äСCk-¥K—¦N:\ºt‰5kÖ°téRêԩüyóhРAª?—ˆòVÝ÷ Á¸qã¸÷Þ{S}zË-·$ø¡üä“O8yòdŠÖýé§Ÿhݺ5—/_¦FtêÔ‰œ9s2gΆJ… ’\Ô¨Q 8€† Ò¦M *ÄÆ™8q"o¼ñû÷ïgòäÉ©úLò×Pý“PkÖ¬Ù²eãòåËôèуŋÓ»wïTUõÎ;ïx_ïÞ½›Š+¦h½˜˜úôéCll,Í›7gÖ¬YäÉ“€_~ù…víÚqæÌ™ ëÿôÓO¼öÚk€ÓaذaÞƒ…èèhºvíÊܹséÓ§+V¬Hñç‘°Ö¦kì˜1clz´nÝÚ°E‹µƒ¶»wïNs~7Þx£ì¨Q£’MÛ¸qc ØúõëÛÓ§O{çÇÅÅÙ®]»zËU§NDëîÜ¹ÓæÈ‘ÃvÀ€6...ÁòŸ~úÉFDDXÀþ÷¿ÿMóçIŠ[¾>6ßc¸Nªª¡œ€Ö€ýí·ßÒµ‡ æý®kŒ±uëÖµ Hõw·k×.o>QQQI¦ýàƒ,`#""ìþýû->|¸7¯Áƒ'Xgoºé& Ø{ï½7`þGµùóç·€3gNª>GJüðÞò]o³@}ø«§Œhÿ$íBÝþe‰ ´wï^[­Zµ `Ë•+gûöíkW­Z•ªüRúº|ùrï¶fÏžhùÁƒmdddÐÐÎ;[ÀÖ«WÏ^¾|9à6zôèa{ß}÷¥ê3¤T¨+P¨'Õ?Õ¿PNÀYkíôéÓm… ÕCÀV©RÅ®X±"Eù¤&€ëر£l³fÍ.?xð`ÐnݺuÞeIý´oßÞvÈ!)*j(€SJ¡nÿ"Rtš.“•-[–µk×òÊ+¯$¸l°wï^ÆŒCƒ xàõJ¯µk×γÓZµj•hyÉ’%iÒ¤IÐõçÏŸÀC=DdddÀ4Íš5`Ó¦Mé,­dÕ?É :vìÈ®]»X¿~=C‡¥yóæäÈ‘ptnÒ¤ ß}÷]†nsïÞ½T©R%àò’%KR°`Á€Ë¶nÝ @dd$§OŸfñâÅ'Ï%Õ;vdhÙE®v!ïç‘+W.^~ùe^~ùe¶lÙÂâÅ‹™;w.óçÏ'&&†©S§räÈ–,Y’aÛô4^%K– ÚÉ»\¹rç>|ØÛixýúõ¼òÊ+ÓíÞ½Ûû7>>žˆˆ,3‹Õ?É*j×®íyþÔ©S|üñǼüòË\¸pgŸ}–»îº+MwªâyêHñâѦ¹îºë8uêT¢ùž....E,òÔwÉY&€óUµjUªV­Ê“O>ɱcÇxì±Ç˜3g?ÿü3³fÍâî»ïÎíìß¿ ÉñŽ‚5l¾·ËOœ81Ùm]¼x‘?þø#ÝÏ%”̧ú'YEÁ‚0` äÿø{öì!***MwKâ è1AÓ[æ\A‚Â… Ó½{÷d·ì`D²–M›6qüøq5jð`áòåË,]º€š5klWΜ9ìY³Øºu+ÑÑÑT©R…5jpË-·xo” äìÙ³¬Y³&ÁöwîÜÉÊ•+Y³f EŠ¡nݺ´k×.Éz Î#9ÂÁƒ½ÃEùªR¥JX?­$Kp¾Š+ÆW_}EÙ²e‰ŽŽfùòåöê¹4pþüù i‚-ó}Àù{ï½G©R¥’Ý^þüùSYB 5Õ?É :tèÀ?þñÀ7.£¸råÊqüøqŽ94M°ežq /]ºÄÛo¿!å‘Ð;yò$-Z´ ..Žz¹# IDATgŸ}6ÁÎgÏžåŽ;î`ÆŒ‰ÆÐüä“Oèß¿À;˜Ë•+ÇgŸ}FóæÍnÛ¶mÞ¼÷ïßϘ1cxë­·¥»õÖ[™:ujÀ¶oñâżþúë,\¸0Éap>ûì3{챠˳º,ÀóÃS½zu–-[ƾ}û2,_ÏaZ¯J•*aŒÁZKÅŠiݺu†•K²Õ? 5ß3 ùòå˰|Ë•+ÇÚµkƒöO;räHоŸžîܹsìÞ½;Ù!o$<4mÚ”_|‘¡C‡2vìXZµjEÛ¶mS•Çš5kˆåᇦzõê\sÍ5lÞ¼™Y³f±{÷nZ¶lÉ[o½EŸ>}’̧_¿~L›6¶mÛÒ¢E räÈÁŒ3X¼x1Ë—/§GÌŸ??ÁÿÇÈ‘#4h÷}þüù)Q¢„÷ñˆ111lÛ¶-UŸ'« ›1žqµRr¦!¥®¿þzŽ=Ê-gõêÕ×Í;·÷xÙ²eV&ÉšTÿ$³ìÝ»—'N$™fÞ¼yÞ×5jÔȰmßu×]€sÆâðáÉ–þùçA×­U«–÷¦ŸaÆeX™$ô† â½êÑGåèÑ£©Z¿~ýúlܸ‘I“&ñ /ðÄO0fÌ6lØ@‡°Ö2xðà€íž¯iÓ¦ñæ›o2gÎúöíËÓO?Í‚ :t( .dË–-Þô+W®dÈ!Ô­[—U«Vqúôi¶mÛÆ† ذaÓ¦MKÕgÉÊBÀ]¸p÷ߟ˜˜˜ i–-[æ˜3²ñúÛßþFÁ‚±Öl¨æÍ›—dÇ[ÏÑØ1c’­ˆÉ5Ъj+V¬ \¹r 0À{S‡µ–éÓ§Ó»woêÕ«—¡}ÉyäŠ/N\\=zôHpÉ~ÕªUŒ5*èºÙ³ggìØ±€ÓsРA\¼x1Qù,X@ÇŽùùçŸ3¬Ü’¹"##™)ñøãˆ:þüL˜0Â… sþüy^|ñÅ$ó¹í¶Ûèׯ_¢ùÝ»w÷ößܼy³wþìÙ³‰‹‹#""‚©S§R¿~ý—9…<€‹¥wïÞ”/_žQ£F±lÙ2¢££±ÖrøðaÞ}÷]:tè@||<*T cÇŽ Ö‹‹#&&&Áä©h—/_N´ÌWèÕ«C‡eâĉįÆb­eÉ’%tëÖ-ɲ?ýôÓÔ¨QƒsçÎQ¿~}¾ùæoh­eÿþý|üñÇÔ®]›‘#GfÔ.“ ¤ú'YÁ¹sç=z4åË—§páÂÜvÛmÜ~ûí”*UŠN:qêÔ)òçÏÏþóŸD· @Æ ½S§N¼Ë~øáË< G®\¹=z4‘‘‘ÌŸ?Ÿ *йsgš6mJÓ¦M¹öÚk“|Ži«V­¼O!9r$eÊ”¡E‹tïÞ¦M›R¼xqîºë.f̘‘ì#¹$k)]º4ãÆœƒÉŒêçX°`Ažxâ €dƒzOûè¯H‘"Þÿß(¢¢¢çêFJŸFÖÒ;éHðÔ©S®ôŒ0ï™ .p°È?ü0àúÁ¦˜˜˜ëÿñÇööÛo÷.Ï;·-T¨w ×îÝ»HÕZk·oßn4h`õÒ¥KÛܹs'ØnÿþýÓ¼’‚RUýSý eýK÷@¾´C† ±µjÕ Xg²eËfüq»gÏž€ë{ÊMÉtçwÌãûï¿·×^{m‚´µjÕ²û÷ï·õêÕ 8¯¯%K– °U«Vµƒ ²ÇŽKó> Fùfþ@¾O?ý´·M\¿~½µÖÚyóæy¿ß3f¤:ÏñãÇ[pžráÂ…ËÖ¬YãÍ{åÊ•×=z´wý?þøÃ;¿S§N°5kÖ ºí¨¨(oþŸ}öYªËî+Ôí_Èob(P ›6mbÖ¬YÌ™3‡mÛ¶qüøq.]ºDÞ¼y©P¡:t ÿþ”,Y²$·ß~{Š·ç?V¡B…˜?>ƒ böìÙl߾ܹsÓ±cGFÍ’%KØ»woÐçVªT‰eË–ñÎ;ï0sæL6mÚÄ0ÆP¢D 6lHÇŽiß¾}êvŒü%Tÿ$ÔJ–,ɰaÃ6l'Nœ`Ïž=ìÛ·lÙ²Q¡B*T¨àí€ȬY³Ò]†6mÚpìØ1¶mÛÆÖ­[¹ùæ›)S¦ @Ð~˜¾š6mʯ¿þÊ©S§øõ×_9pà%K–¤|ùòÚoTþzo¾ù&K—.eãÆtíÚ•—^z)ÝwnzêV||<¿ýöU«V ˜îÈ‘#¬\¹pîÈ?rä_ý53gÎàÅ_¤P¡BÞô5kÖä›o¾aÇŽ\¼x1ÃÆK̲Ò¢Gy„:¢úBª÷(-I=ûkÚ¿-[¶ØTþ7Þ ^½z©ZĈT¬X‘/¿ü’mÛ¶qòäIJ—.M5èܹ3?þx’ëçÏŸŸ)S¦Ð¢E f̘ATT 22’Ò¥KÓ AÚµkÇßþö·ë³>³Öþ/Tå ÄSèL²ÖL"]MàqŸYk­µ“2»|’vƘ¥}f°Ö Uy1Æ4šo[kc’H×ø›Ï¬ï­µó3»|þ²ä8cÌ5Ƙhwjè·l¦1fS¨Ê–F€ë€ ÀsÀM¡-Ž$EõOŒ1cÝ:°Øo~ŸúQ;DÅK‹B8õ N=¸Á?1¦½ÏgKjª˜Ie¬ ŒÊ%“.Îg¹xh“Iå cÌ\w_ä7¿‹Ï÷'TåKƒkq¾¯†8õ¯ˆcLÿÔ½ã™XÆæ8õ/w2éòá|–R8Ÿ¥A&–)¨¬z.(è¾~ Xé³,ÎRذÖN&cÊíC]I–ꟀӈçcÊ[ksçw²»Ë²jšˆµö]à]cL} edÛ€Q>ï÷ã€>óOfJ!SÈZ»ç{À³7”eÉDùqêÙƘg­µÝùògý ÖÚŒ1<àYNÂúw7ÐÈwÊŸYeL)kí `†@wU9²z㳸ßÓ×Z{"%+c²Yk/§tƘkm¢JaŒ‰´ÖÆyÒJã“6§Ï?˜\Tÿä°x€?Xîæ÷ZÁ“ˆµÖÚ”l µu&™¼ÒU¬µÛñù5Æ<…ÀýÇZ» Êç­Óîûäêu†í7?Dø–!‹Û \´fc º¯g¼þ¥¸$Õþ¤EÔ¿À ŸüJápï[kd@ù|ÛTãn3èÿi&Ô¿l@\JÛ†ädÉK¨>fg€Ç’JdŒ)kŒ™cŒ‰Îc6cZIûŽ1fž1¦„1f*p8gŒ™à.ïoŒYlŒù ¸`Œ™jŒ¹øÝ³ÔS×'¯›Œ1Ó1'€cÌIcÌ"cL ùôjª0'€ÃÓçÒÏ<ßƘë1_cŽSƘeƘÛüÒÝ`ŒÙjŒé`ŒcŒ9 œ1ÆL3ÆòK»À3Ìo^3·~Ýä3ïVŸúcŒùÝ3ÛS>÷A@ƘoŒ1oûÍ«ë–ñ6÷}S÷3NcþgŒihŒÙ ì6Æ DJcg1ûŒ1ÓYÎƘ%Ài· ‹Œ1•Ò“ç_ÄSqëÐØB³¡cn1ÆÌ2ÆüSŽçl%¿t­Üï¢¾ÛÆœ¢1ïc²û¤Ëï~‡ú­ÿ¨;?ŸÏ¼{1KŒ1çÜmï7ÆL2ÆÎÀý1f½1æ9¿yÜ2–ô)ózcÌ8íó|cLKà°ÖÓ$@ÖµŒ1«ÝϳÍóP:ËÙÁ³8 œtÛõkÓ“'dý.çÔý?Œq¢eƘ¼Àq:çþçôòIà{ãt4ôW ¨|Dƒ—qúnvŸàå¼ô »¯=nÁiÌ_Á¹45Â}¿ÊscZ>°d)ªÎÙŽªÆ˜Ê8?¤ßáÔ _7ºÓÿᜱ„s©ç'cLSŸt9Ýtoà\FzÉͯ3ð¢_ž5€²~ó µHxùìvÀq:V¿Ó¿m­1¦x*?kjUüÅ|nó»ïóâ|æJÀwŸ€±ÀzàscL.¿<Æ›øólçcÌ ´ÐÓXŠó¿1†ÓÇn¥1&Q?¬,h p·1&7Ný› Í­8ý_Ä©£qnXcŒñ­Cùq¾‹IîëÀZ 7ÐÍ']$ÎwXÌo;ÅÝù‘>óÚ€gq.yNZ+ŒsÆ)3ÕJøÍ»Ö-c÷}7]ÎÿgKà œÿ—Xàßòýøçÿr ð…{ jƘgݼÎOºÛkŠÓ6D&µn²¬µYnÂù³8\œ†°•»l°Ï'ísnÚ>órG¥òþÚM?Ôo~„ûw”»<PÑ}ý‰»lpÒglò¯(wY9wY¯PïcMªš’­ŸgÝ×3q‚­ý8?R¹û²^ßÅuÀeœ»==óª»ë­óK» Øâ7ï00ÁoÞ=îú “©­ÝtOXVß]Ö1ûà)7mË Ë73ýæ5u×iã¾oãû?‚óc¿Ý}ÝÊ]VÓ}Ÿû~ª_ž?àœ-Ê  {ÉAÊ—çlÕAßý„tZ`x¨ëYû~ð_÷õvà8—ô+ÃÝòçI¢x¾‡úÌëìÎûÂg^^œ@æŸy…ÜtÿòËów~Ádê__7Ý–=â.«’‚}ð®›¶tåå7ïîüëÝ÷ýÝ÷¥p‚V멳>åÌæ¾ ¿ö'XÝs§³ÿöó¸é‡)_qœ³¾Küæ·u×{8=u$«÷ÃZ»Û3§!™ ICœµ…>ë\4ÆÌº™À},,Ίïv|Óüa­½dŒ9ä¾÷ü= 4Æë¸ìž™¹燾0Αðy¹HRý×Tà÷õ<ü:.[·ŸŒq†·¨ŒsÀà\¦ tl‘ßûå8g2RÍ­‘8gdË㜥ˆSÏ2û \juÿÎùÍ+è—ö[¿÷ßá¥UpÎÚ¥Ô8g#‡ZŸ¾LÖÚߌs7y£TäJSq(7[kwø_pë@P§-(„Sÿ.¸üè³î9cÌFœŽTs· çŒr9œ Æsf3«´C8f­u/õz†¨ñ­¾ýœ§{W´6ÎmÏ{crÙ$†  )NÐø¾ßüqþᜠL“,À¹þ |mŒ)`YYþü|Àù|%øóËò8b­=“ÄöNXk/c.òçW§p.;ç.ºý ¾Å9ª>‹s ÎQ_>äJ¡ú'³€OqÎR\ôÿ5ÆÃ9K×çòêœ3·… ü]ø¿ÍŸ—|RÅs3Îe¶Š8udgÎÙ•¬Âsa4N}çì$¾£ÒÿÊÓ½,© à<ülŒy9Àò=©È+”¦àt·tùÔsàð5ÎÁÃiÀsÇtë@”ßûhÑ)bŒ¹ø'X;ŠsÐâ©ËY¥º`­u_ÿáNðgô6Ä¿þyÚð²8gCSÊSÿ¦c¦Xž®~ªáÀ}‡s9áï–] ðFN÷o hù\€yi1ç h¬±ÞÝAùKÖ úw•³Öžqƒ´KA’ŒÅ9ÑøÑZ{ À30­wýŸê?8Gùµ€MÖÚx÷ŒÈyœ ÜZ6Èk_ÙýÞ{úÈOeY<âÓ8g9ýû>³kíÿŒs“K°¶ã œª.°Ñ­8íO :l¿''Áwë–éK`+p«µv—;¿6© ´3R úçÿy“ûüþSžö<µm·§þµÁ lý0/ÅÂ"€sOa~‚Óp‡ßâ}À­Æ˜<ÖZßîs6…Ã?¤–1&'Nƒý¹µv•Ïü2?’ñ|™Y鲆$CõOÀ â’XÜX`­ë™aœ1¢*àÜiœÑ$>B¿Õ÷1¦Î%‘ÖZß³*Õ ¼y>GFÔƒd˘Fþ{î¦Ü í‚_þÛâþÍi­Ýå kí©@óÝ ê&àk­oÐT…ÄpJÅéô½ßüÆ~ïoÆ9Ã÷¶'xsÕL&opêßÖ4–Ï#šä˘qÚvJ8Áþa¿t18ýƒÕ?ïçËŒú—ÕïBõõ)N¿’†~ó¿Á‰¸ŸöÌ0ÎãXÚÓ2±<—pŽkùl7ç§€Üó£@cLþ`é$KRý“¤DÕýî*Lòg£’²¨oœ±¿pï(õâÀiœ³ ¾ÃŠdǹ³9˜=8uçîw¦¥Œ5|†l¸†Œ,úïî]—¸CVtǹñÃÿ àW ßÝ–Xká\Ú`Œ©à»Ì8CùÜì¿N:‡DøÖHœ»ÓÓÄí/¸hfœq q»løçž³ý¾íPAœ»[ƒùÕýÛ)Ýwa:õ¯‰O])Ü‘Î<žñŒ<`Œ)sãÒ4ÿþÌîû­@ó w4/ƹÑç5÷ÃËSÙ½³=ÍÂ&€sÿgáwDa­ƒs›ùëÆûè œSåÇ€¡™X ¼Ô3θF«q]Lêùnƒp:0ÎX5þ% Rý“dŒÁ¹Ëm»1æßƘ_p~H~Mzµ$ǹt¸ß3çÇ*Áe@kí9œþGíŒ1kŒ1ÿ6àtÈ8©µöN ß8èÖƒWÓXÆ 8gúv¸eÜlLc^¾.ëŒ1ã€u@œaz‰óYwc6cVú-ïƒÓçéÆyÞ'Ƙqî^íe )·o×{ÀÆïìCœË—ñüy¶+-&àœÅÛkŒ™‡Ó¾|ï—f=NÒ×ó£{¥âÀ*‚°Ön>žö™ãÍ¥Âx $ÎÿÈ÷8ÿoñLÒ8àLÀùÜç Þž¿„s¦}¿ûY&{¸ðãn·gü·ñƘ8_º ²ê%Ôs8;k™ßüa8•ÃÿTòÝ8;é6œ¾ cwƒ\¾šŠ3²z0 Ixšô5þ|”Ò·\—¬µ/c¶áq>ÃzàþìDš€µvœ1fÎØMqÆû’¬EõOÀ ØîGœNàCqï¶Ö~bœAyÀ ¢¿Å ¬À¹åá ìý;‘ßåkíׯäö>œ3wãtæÿ?;õƒs‡ô:œñ­roâü°í&È©µöu7ȼ§£y°Ë;«Ýòî ´ÐZ»ÐÓxçrÒý8ã·íåÏî;Ü<<ÿ7“pÎXùæÿ«û~´Ö|d›µv†Ûç¯ÎÝ·‡ü–¯4ÆTzºŸ÷Zœÿ«á@ºžnbÜ1IDDDD$L„Í%Tq(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3Yu¸¿„; ´ïˆô±îÀ˜""W<÷I ¾Oc¸`­½ªòˆHÊ…í8cLcÌtcÌcLŒ1æ‡4dÓg IÏ4+C )"’IŒ1Í1+1Ñnø\²y‘„m`ï -¤ˆdš° à€÷qFétÁ±>µÖUÝéɤ ÊÓÍý­”|j‘ôqŸe; gûâ´³ÓÕÛ8í_F<€^®bƘµÆ˜é¡.ÇÕ$œ/¡6æXk_Okî3·cb2ª`rUŠÄù1 çƒ" U€ÂÀ3ÖÚ/Óš‰µö8pÜsm†•L®V9ñ{V´d®° àŒ1Õ€›Ü·…BƘ.îû#ÖÚÅ>i‹­€Š8Ï"ÜÌOO7·ÏÜ=@MœìnžG¤­ˆs†°Îóýfº£\AŒ1íqžØÀÕÖSÇ}½ÛZû_¿ôBÖÚ9n}n䯩¿ºiîb¬µ+|Ö+ŒóüÒ•þõÍsÎsX‹á<Óò;k­ïó7å aŒiÅiƒªø´ë­µÛ|ÒVÃiƒJ¿»Ë§sû…qžÍz=΃ң€EÚ6·®7À©ß+­µ‹Ò³mÉzŒ1¥qÚpž­\ʧ>ü`­=å“>Î3}Wã<û·Î3TwS¬µŒ1EÆÀ2kíï>ëÞ´Ö.ô+C. 5ÎsFO ¬µ[3ôƒfUÖÚ°™€àœ1Û Xœ/Ëó~¼Oºü8AÛœài—›~3P9HÞÿÅiˆ‚m;°ÂÍg΃ÎO«¤}ça¿—p‚<‹ÓЕ õ>Ô”áur‘[ÿ»ßónŸ:9"@ú¯Ýúó¸›þ(Îáï>i6à4|¾ë5tÓßã3ÏoñÀ9`Ÿ›æ' _¨÷¦L©o“ݺåù®÷ùÔ·G}ÒÝçÓF®qÿZ` ;@¾×ºËû'±íên>—Ü<×»íÜË~éò¸å´8C?澞ˆûümMWÆÜåSÿ.ºmÙVŸ©’_úrn]èƒó ûXà€Û†ýËMÓÜMÓÂoÝiÀN¿yUpNÎX÷wþ¢;=ê}ó—ìÿP 'dYn §oC…ÓÏ#˜dä¸ÝJò Ï¼ì@3¿tMÜtã€â8GÀ“B½ß4eÎôp¿÷“I÷5p ç´¦;Ïwû¤Ii×Ý÷PÀͧpê}¢)Së[ ÷»odym7qßGOºëô >%Ü8 %}æêø¥áæÕç²Zœƒo t õ¾Ó”9“H}—LOwØ­'¹Üù%€îëp8ÝUÖ〷¹ó®uëéY D¨÷IfOWdkíkí§Öç´¾µv 0¨›Æl=·ÚïòÉ3Ö&¾$1çõkíQ7ÝJœÆº§{åêVxÖZû?ëHËÐCpÎà µÖžvó™‡svø±Œ+®„kíkíBëþªY²,® IDATç’úxà ékOãŒz¶ó»µv½ç½{‰¬°Âmƒ/Zk/GP½ÇoÖÚAÖÚkíakíªTæñ7œ•­µKÝ|Žãܘ“x # œ…U¸Ô0ÆÔúâ\/sš?É•’ö-ίs1³€ÙÖÚÓ~éªã]‹~n׸JWÏ­ò1ï! ®;lǾ Üå¥@{÷ÇTã\O/ Dùo-pÚ«D¬µ'qîÚOQÿ8kí%kí4œ3| }íǹòÑ9m¥—0MƵõ=3Œ1EH|FwÎYåN°Í°t¥pËqúy¼jŒ¹ÞSHn„è™8ãØ|iŒédŒé`Œñcž5Æ 5ÆÔ1Æ\ëŽÇÔç¶zß§8 Åéo·ÀÓÊSÊSÛ]NF~HÉR6â\&hŒ¹ßÓÐS!y-ùõ–1¦ž1fÎYþžÊßcšcJcn1Æ 6ÆŒOã¶%̹AÛ àncLcÌuƘ¶À¿Iú’ú, 1æU·ýkâ»Ð3Þó¸1¦²[×Ä9ó¶ÄoÛÿZc&¹õ·¤1¦±1f´1fXF^É2Ö•1ÃŒ1·»m ÿY´”ø çk7·þ¶Æ¹{ÿßDÖÚ(àsœ«`Œ17cÊcþfŒùÚ=`¹²…ú6Ø´N$=ŒHvà?8ѹÅéw1ç±[ƒ¬¼‚séY/¿ÏòGqúYŸiÐ4@^UpÎÄù¦Þ õ~Ó”yÐ '˜?ï~çã¤ùØ‘L>…pήyêÎ:œËU †qÓ6r·é[׎C½?4eÞDòÈ܀sƒ‹§NœÀ ¶¶ßY§(0Õm«,ð‹ßòñn[ê[׿ÅäÕѯ-õŒ‘øp¨÷¦Ì™pnÔ›„s5+ÞýΫû¥ñ #’h(¿tp6,ΙáA.ðªO›kÝm¯ª†zŸdöä#HDDDDÂÄ•z UDDD䊥NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3 àDDDDÂŒ8‘0£NDDD$Ì(€ 3ÙB]‘ÿgïÎãc>þŽ¿&DqßqÖ}ߊ¢¨ÒÃÙ¢êh©–V¿ŠJ­£—(U­_©£(JÑ:K]UG£Ž"q…„:‚DŽùýñÙýt“ÝÍÍfåý|<ö!ûùÌÌg6³ó™ÏîJ)U håê|~ÑZßvu&„xÒÝ€SJÍË€|ˆôY¬µÞäêL¸‚”¿L!Ë–? °ÄÕ™”²\Nê¿LÁeõ_FôÀõ+]ºt|Ñ¢Eu¤%R) À8dÕ/P).$åÏpèÐ!üüü\,gË–-tïÞÝÕÙp%©ÿ\ÈÕõ_†|¸Ç°aÃ2")‘JJ)WgÁå¤ü¹Ž”?CÞ¼yñõõuu6²WgÁå¤þsW×2‰A!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN!„ÂÍHN76pà@:wîÌòåË]!Dqûöm:wîLçÎÙ·oŸ«³“eesu„pµråÊq÷îÝÇ<==)Y²$eË–¥]»vôë×ìÙ³»(‡Îmܸ‘4hàê¬!²ˆ˜˜V¯^ ÀK/½äâÜ8ö÷ß3{öl‚‚‚8wî‘‘‘vaüýýéÕ«— r—1¤'²¼Ë—/Û5à.]ºÄ_ýÅòåË™0a6l zõê.È¡Bˆ”ÐZÓ¯_?.\˜lXGõ¾;‘G¨BX<ÿüóÈÑ£GÙºu+&L _¾|„„„Ð¥K‡wqB!2‡I“&™·§Ÿ~šŸþ™ýû÷›u»µçða =pBXøúúR¥Jó}µjÕhÕª<ò½zõ"((ˆ;vбcGæR!„3sæÌ yóæ¬Y³¥T‚ó111®ÈÖ}! 8!’Ѷm[óçÇ;lÀ…‡‡óûï¿Ì¥K—(Z´(µjÕ¢N:/^<Å× æðáÃ9r„[·nQ±bEZ·nMÅŠÓ”÷   .^¼@ƒ È;wšÒBd ""š7oއGêÖEEE±~ýz¹qãUªT¡FÔ©S‡9r¤8þù‡Ã‡Hžœ¹sçÚSJñÄO°víZ<==Sœïß~ûÎ;sçÎFŽI«V­RW‘uÅÇÇÓ½{w®]»FïÞ½™?~ªêžyóæ1bÄ®_¿nw®bÅŠ|ÿý÷4oÞ<É48@÷îÝ vx¾L™2,X°€Ç{Ì<–#G”Rh­ÔÛ+iÀ ‘Œ•+Wš?7mÚÔîüîÝ»QJñÌ3ÏP¹reÊ•+ÇíÛ·Ù¿?Ë—/çƒ>àðáÃ,[¶Ìaú¡¡¡4nܘ .àááAçΩ[·.¹sçæØ±clÚ´‰7—âJtÍš5<ÿüóDGG3vìXÆŸ¶/„ÈrêׯÏÖ­[i×®‹-"**Š%K–àåå•¢ø»wï&""‚.]ºP³fM *ıcÇX·n§N¢e˖̘1ƒ!C†8Œ¿iÓ&:uêDTTUªTá¹çž£D‰\½z•àà`¶lÙ¹sç8þ|‚xÙ³g§^½z°víZ>úè£÷ö¹#iÀ aqåÊöìÙw W®\aË–-Ìž=€^½zѸqc»x£G¦OŸ>+VÌî\=èÚµ+Ë—/çàÁƒÔ©SÇ.Ì{ï½Ç… (T¨Ë—/·ë)»sçï¿ÿ~Š,[¶ŒÞ½{Ë”)Sx÷ÝwSO!¬jÖ¬ÉöíÛiÓ¦ +V¬ sçάX±ÂáSˆÄjÔ¨ÁÞ½{©_¿~‚ãôë×Õ«Wóî»ïÒ¥K‡CL&L˜@TTíÚµcýúõv7®qqq¬Y³ÆaÜ)S¦ðÌ3ÏpìØ1Z´hÁ!Cðóó#W®\œ>}:5¿†ÌMk® ýýýµp @Ãt:ÿŽîúʈòçíímý=:|Õ¨QC/^¼XÇÇǧ)ýJ•*i@O:ÕîÜþýûµRJzÆŒ©N»T©RÐ}ô‘ÖZëyóæiOOO­”ÒÓ§OOS~SCÊOúÌ™3ðÛ©µ~ýzk,«3AyxЯñý¬Ë•+§ýøãëÈÈH}ãÆ ³~\µjUªÒ»qã†öõõÕ€0`€Ýùèèh3íM›6¥)ÏzàÀÚÃÃ#ɺ}Μ9iJßÊÕõŸ,#"„…¯¯/•+W¦råÊ<òÈ#øøøpäÈÆÇ®]»R”NLL —/_&,,Œ°°0J•*À¿ÿþkvûöíh­É—/¯¼òJºò?kÖ,^zé%´ÖÌž=›¡C‡¦+=!„(W®;vì R¥Jüþûï´oßžˆˆˆ4§çëëËÀغu«Ýù«W¯š?ç͛׬GoÞ¼™¢ôïܹÃÇÌ‚ ˆÇÓÓ“R¥J™u{Ù²eÓœ÷ÌF¡ añüóÏóí·ß&8vúôi>øà–,YBÛ¶mÙ¹s' 6LFkÍÚµk™>}:ÇŽ#44”øøx»ô¯]»fwìĉT¨P!]c5/^L`` ^^^Ô«W/Íi ×¹vígÏžåüùódË–òåËS¾|y¼½½ïûµµÖœ8q‚ãÇS¿~}J—.ê4"""8zô(!!!”(Q‚råÊQ²dÉû[ñ •(Q‚R¥JqòäIvíڕªU«ÀÙ³g‰ŽŽNP÷ÙÖ“Mš4I/oÞ¼øùùѽ{w†JìÒîØ±#Û·o§L™2øûûóÌ3Ï-ÛMþù‡Zµj¥+ÿ™E¦oÀݸqƒÍ›7súôi.\¸@áÂ…©Q£uëÖ¥B… Nã………qüøq¼¼¼hÖ¬ׯ_ç÷ßçÏ?ÿÄÏϦM›:ÏpòäI.]º”¢üùøøØ}¡Ûúã?8vìÁÁÁܺu ???Ê”)C‹-¤bs*Tà‡~ 88˜½{÷2jÔ(6oÞlž×ZÓ­[7~þùg (@½zõ(P €9fíÀ\¹r…{÷îÙ¥€ŸŸ_ºòH®\¹(]º4'Nœ gÏžüý÷ß²lˆ¸téß|ó kÖ¬áСCvç³eËF¿~ýøàƒ(S¦ŒÝùgŸ}–_~ù%E×züñÇÙ²e‹Ýñõë×Ó·oß½µk׿×_¥K—.0zôh>þøc‡éîØ±ƒÁƒsìØ1»sU«V¥K—. 6ŒÂ… §(Ÿ"s™Ý<þõ×_;,OíÚµÓ€îß¿¿Ý¹nݺ™cKÒÂ:.þüz×®]úäÉ“:wîÜfù¾ß¤ü¥ Ü’%KÔ ¾¾¾ºY³fú±ÇÓÅ‹7çÉ“GŸ:uÊ.þÈ‘#uãÆÍW:uÌ8µjÕJpîõ×_·‹¿páBíéé©]´hQÝ­[7Ý¢E ={v]±bEsüÓèÑ£æÿÝwß5Çq.\X·iÓF÷éÓG·hÑB.\ØÌË–-[Òü;rFÆÀÝÿ1p»víÒÙ²eÓ€~ÿý÷õ;wôÓO?æ1pZk½råJ3~hhh‚sæ¹'NØÅ=xð ®U«–t•*Ut\\œyîÕW_Õ€.Q¢„Ók>|ø¡—i{à"""øí·ßðòòâ©§ž¢fÍšT¬X‘«W¯rèÐ!–-[ÆÌ™3Ù´iäÍ›×a:wïÞ¥M›6dË–·ß~›òå˳k×.-ZÄÂ… ‰ŒŒL°Lëz,XÐ|ÃÔ©ScV¡í3tG39B‡¸{÷.žžž<õÔST¯^9rpìØ1>ÌñãÇÙ¿?<ñÄð÷“õïϹsç¨T©€¹-Ëk¯½ÆàÁƒÆu¶Ž`¦sîܹtåoذa<úè£LŸ>—_~™… Ò®];úôé“®´ÅýçããÃàÁƒyýõ×Ô/Zk~þùg^~ùe"""èÙ³'ûöíK0#ù³Ï>KVpp°ùtâ‡~ fÍšN¯ÅÈ‘#‰‹‹ã‰'žàçŸ6gëíÝ»—'Ÿ|’ððp§ñ7nÜÈ'Ÿ|‚RŠQ£Fñá‡&x¦µfóæÍ|ýõ× c ÷Î /¼@ll,7füøñdË–ùóç'øŽL-k}—7o^‡ß¡VÁÁÁfiU»vm~üñGªU«ÆñãÇ9yò¤¹ƒŽµ®-Z´hšóæVÒÛä>Ý„……é &صέt‰%4 ‡ fwÞÚè"EŠè   çgÏžmž?pà@’y‰ŒŒ4ÃþöÛoÉæ½AƒæÝè±cdžùã?t‡ôĉ“M/)HÈé{ï½÷Ìž¶Û·o›Ç­= _ýµÃx!!!æÝ«£¸ ˜é=z4ÕyO< ÕêùçŸ×€Î;·>yòdªÓM))éï;{ö¬¾zõj’a.\hÖAÉ]ëôéÓfØÃ‡'ö›o¾Ñ€öôôÔ—.]²;?eÊ3­Ä=p÷îÝ3gX÷ë×/ÉëÜ/Òw{à¬OòäÉ£OŸ>mOÏ,T­µnÓ¦tÆ íÎÙöÀ3ÆaüØØX={v è¥K—šÇ `æ×ÙªS\¦…Z´hQ>øà§­óúõëóùçŸðÕW_™c‰bcc“\âáùçŸwx¼sçÎdXžÍ/á”Ì|³ËDÊœ={–U«V±jÕ*V®\É·ß~ËðáéR¥ W¯^E)e>J·jÑ¢`|Λ7Ï|ÜtóæM† Âܹs“œHàããÃ'Ÿ|»'tìØ‘   ³ …‡‡³hÑ"ªU«–dC01___-Z„§§'ÿý·,æëælö‘‘‘–®õQÖ#<âð|±bÅðõõuxÎ:ƒÚÇÇ'U_î"ó;räÇà…^Hõ0Œ>ø€púôióÆ3""‚™3gÒ©S'ÀØÕ¦wïÞI¦£µ¦yóæüõ×_æû]»v1qâDòäÉ“`qô—_~Ù20lØ0:vìÈÔ©SY²d‰Y·ÿþûï©ú,™™ÛJ¨R¥ {÷î5+GÍÜÌiò‰·ãHgÓ¡Eæ·iÓ&³G"±"EŠðÑGÑ¡C‡Ç'NœÈ/¿üÂÅ‹y饗4h%J”àüùóh­ùè£0ÇÊ9Ò»woΟ?ϸqãØ°a•*U"wîÜøøø8¼ûL©æÍ›3zôh&L˜À´iÓhÛ¶-O=õTšÓ®³jÕ*óç¤fß§–µ—Ô8¤bÅŠ9g­s³gÏΰaÃ’½V™2e䉃¸{÷.={öäîÝ»”+WŽY³f¥)¹sç2wî\¼½½ÉŸ?‚•Z¶lÉüùó“Ý]fåÊ•ôë×F‘/_>räÈ‘ wÏßß?Á †··7+W®dàÀlß¾õë׳~ýú4åßdÚÜ{ï½Ç† ’ wæÌN:åð|®\¹ÌY³v½Þ¹s‡k×®¥kP¦UùòåÍÍt§OŸN«V­ððpëŽÎ‡^‹-ˆŽŽNpÌÓÓ“¢E‹RªT)ªU«FÏž=n!S @þþûoFÅêÕ«¹ví7nÜàñǧG¼òÊ+Œ3†ððps ­#£Fâ™gžá£>âСCœ:uŠÈÈHòçÏOëÖ­yã7Èž=»]¼¦M›råʧ7)cÇŽåôéÓ„„„0oÞ<Ú¶mûPï ø°‰ˆˆ`öìÙ|øá‡”-[6C×°²öŽ8{tŸÔ9ë—ï7øòË/“½VÓ¦M¥ç~üñG *DË–-™|8:tȰkˆŒµqãÆtÅ/R¤sæÌaΜ9Ï;[;+±5j°téÒT]{Ù²eIž÷ôôä‡~HUšÂµ<Èš5kرc;wî4ÇúdË–éÓ§gh¼lÙ²\¿~=ÉžÞ°°0‡Ç­7$žžžlذÁé,ÓéÓ§óóÏ?;½É™ËK/½ÄK/½”d˜Ü¹s³mÛ6§ç‹+Ƹqã7n\ª¯_©R¥i.\8MuXãÆúuà2mÎú˜à‰'žHò ¶D‰„††:í݈çßÿuØÒ¶VLEŠIѽ)5eÊöïßÏ‘#Gؽ{7Ï=÷^^^4hЀ§žzŠ®]»:Ü „Èš~þùgFŽépÙ™*Uªðý÷ßÛ­LŸ^eÊ”áï¿ÿæøñãÏ_ºtÉé¶IÖ:7..޼yóÒ¨Q#‡á¬ãF³B¤M¦}¶gýÏnåäȉ'  zõêNÃíÞ½ÛáqëÀÈråÊ¥5›+VŒ¿þú‹Q£F™3»bbbؽ{7cÆŒ¡Zµjôèуëׯgèu…îé£>¢k×®fãM)E½zõxûí·Ù·oÞxh×®`ì¤bw~Þ¼yNãÖ®]Û|œkˆ“Ø•+WÌÞ”û‘!²²LÛ€kÕª>>>œ={–5kÖ8 c%S§NÚ¶më4­o¾ùÆîXXXëÖ­ŒY6-gΜLš4‰¶nÝÊû￟`ËeË–Ñ®];âââ2üÚB÷qüøq&L˜ã†j.ôýé§Ÿ&¹U_z½ôÒK+VŒøøxú÷ïo+عs'S¦Lq×ÃÃiÓ¦Æ`ó÷ß?ÁLéððpúõëÇ­[·hÒ¤Iº÷ÏB$”ipE‹5¼¾üòˬ^½Ú¬BBBxþùçÍØ´iÓ’œ(°iÓ&Þxã sVhPPíÛ·'&&†"EŠ0pàÀçëÞ½{DEE•¢µµ<<Ÿœÿýï4iÒ„&MšÐ­[·ÇË™3'Ó¦MÃËË‹-[¶P®\9ž}öY5jÄã?N‰%’œõÚºukÆŒƒRŠÉ“'›ñŸ|òI*V¬È† È—/ŸÙÐBdœL;àwÞ! € 6йsg²gÏŽ7nÜŒ 3fÌ0g¬8’?~úõëÇ´iÓøúë¯É—/Ÿ9%>_¾|,^¼8Uk±Ù.ÃP¡B§³_iÓ¦ UªT¡téÒh­ HvÀ¨âáuáÂÀè}Kë2/ìÝ»7Mq{ôèA¡B…èÛ·/—.]2¥®_¿>«W¯6×Ëtæ£>¢U«V 2„“'Ošb•R4oÞœ dø0!D&oÀåÉ“‡uëÖ1mÚ4–-[Æáǹyó&U«V¥^½z|øá‡)ëïïO‘"Eøé§Ÿ8xð E‹¥iÓ¦Lœ81ÁcMg<==6K–,™¦ÏU²dI4hÀ_ýåt€°"k°öpÅÇÇãå啦4œ­_˜RmÚ´áâÅ‹œ={–ãÇS¯^½+ܧ$þ‰'7z‹N IDATW¨[·®Ó=ª…é—©p`ÜŽõÖ[¼õÖ[ÄÅÅ“¦££FbÔ¨Qܽ{7Õ»äÌ™3É)Óia›Ôä !ÄÃϺcËíÛ·ùþûï0`€ÃpAAAÄÇÇS¹råû–—²eËR¶lÙ4Ç÷õõMò‰ˆ"ãdÚ1pŽxzz¦{¹±uÕÉ“'™:uªÃ…>ÿüsó±‰TvBdmuêÔ¡ÿþ 2„#F@hh(`ñâÅôèу*UªpðàÁdÓ gÊ”)L™2…ÿý÷>ç^á*™¾.3ˆŠŠ2ÇLž<ÙÜ0×™ˆˆFŒÁĉyæ™g¨V­~~~\¾|™_~ùÅÜÈ÷7ÞàÑG½ïùBdn3fÌàâÅ‹üöÛoL:ÕnÏÝÔ¸~ý:£FŒ1»… Ψl !2iÀ¥@\\œ¹˜ðÈ‘#“ oݾëúõëÌŸ?ßî¼——¯¿þ:“'OÎð¼ !ÜOîܹٴikÖ¬aîܹœ8q‚³gÏR @J—.MÓ¦M騱#=ö˜«³*„È$¤wT¯^k×®±cÇvìØÁùóç¹rå %K–¤R¥JtîÜ9ÕË!~Ï>û,Ï>ûlºÒ(X° þþþ€±SMz >œË—/?ôÛ ánÚ\§N8pà€ÓýùRÃÛÛ›ÆF¹)‘#GÚµkg®t.ÜGdd$AAAdË–R¥J‘?þTÅã7 ¡oß¾tíÚ5]yY²d K—.¥B… |ñÅéJKd ùòåcذa–^¯^½2,-‘5lÙ²…3f'O.\˜®´¢££éÑ£ãǧvíÚ©Š{éÒ%³¥dÉ’(¥Ò•ŸÌä¡mÀ(PÀé÷©åááA:u2$-‘9ÅÇÇóý÷ßóñÇsöìÙçJ–,I‡èß¿?Íš5K6­Í›7sâÄ š6mšî|?~œÕ«W';îR!2‹óçϳzõêTßü:ËêÕ«ãæ89ááá|õÕW¬_¿ž½{÷&ØíÈÇLJnݺ1yòä évµ‡¶'DJÅÆÆÒ®];s©///J•*eÞ½]¼x‘ï¾ûŽ{÷'„Â5‚‚‚øàƒÌ÷¹rå¢téÒ\¾|™ððp,XÀŠ+ظq£Û×çnµŒˆ÷ÃøñãÙ¶m|òÉ'DDDÌÅ‹‰ˆˆ`íÚµ´jÕ*Åé-]º”Ý»wÓ§OŸû—i!„ȼ½½Ù½{7»wï¦Q£F)ŠS¤H&MšÄ™3gˆŒŒäøñãܸqƒ;wR½zunß¾MïÞ½Ý~!}éYšÖÚð=jÔ(ÞyççóæÍKÇŽ騱cŠ×ÔJÍ !„ÎyxxФI“‡¯Zµ*gÏžu¸ækóæÍùõ×_©R¥ çÎcåÊ•n½•¥4àD–vúôisÁåN:%ÖÙzZ!!!÷Ä­P¡¥K—NQ>®^½ÊüÁ_ýEéÒ¥iݺuªVÜ¿yó&:tˆ°°0jÖ¬IãÆS´ÕœB8sëÖ-þüóO8À­[·¨]»6õêÕKñ„>0ÖFݱc»wïÆÏϦM›¦øF7>>ž;vØ÷ööv83:wîÜI¦W¶lYj׮;}ûÌmßÜ•4àD–våÊóçS§NѰaÃT§ñÓO?ñÖ[oÙŸ2e ï¾ûn²ñ·lÙB÷îÝ OpüÃ?LÑõýõW^~ùe»B¥o¿ý6'NÌÙØBˆ¬å?þ W¯^„„„Ø4hþþþäÊ•+É4iÙ²¥]ý4pà@fÍš•lÝt÷î]Z·nmw¼B… oœ“gNT³­ÿÝ‘Ôê"K³í¡š;w.]»v%GŽ©J£aÆ jÿ÷ÿÇõë×SwëÖ­<ùä“ÄÆÆR£F ºuëFŽ9X»v-ãǧ|ùòIÆŸ2eйê~“&MèС¾¾¾:tˆ ðé§ŸráÂ/^œªÏ$„ÈÚvîÜIëÖ­‰‹‹£aÆ<ýôÓøúúrøða,XÀìٳٹs'{÷î%Ož<Ó¸{÷.mÚ´AkÍСC©P¡ûöícÉ’%|÷Ýwܺu‹ü1ÅyêÑ£‡¹WoÁ‚Óô¹V¬Xa6ÜÜþ …Ö:]/@ûûûkဆétþÝõ•åïÉ'Ÿ´þuáÂ…õèÑ£upppšÓ«\¹²ô”)S’ Û¬Y3 èFé›7ošÇãâât¯^½Ì|Õ­[×.î©S§töìÙ5 ß~ûm—àüÖ­[µ‡‡‡ô¾}ûÒüy’"å'}æÌ™ ømŠÔZ¿~½µ –Õ™ <<è×ýüþmÒ¤‰ô /¼ cbbœûû￵¯¯¯ô»ï¾kwîܹfÝU¨P!}ìØ±çgΜiž?pà@’ùˆŒŒ4ÃþöÛoiú,·oßÖK—.ÕÍ›77ÓÊž=»]¾RËÕõŸÌBYÞ·ß~KµjÕø÷ß™8q"åË—§lÙ² >œ}ûöÝ—ëîÞ½›]»v0vìØw±|þùçxzz:ÿÞ{ïqïÞ=4hÀäÉ“ñðHøß¹U«VôíÛ€Ï>ûì>|!ÄÃhçÎìÙ³‡\¹r1mÚ4»ÇœuëÖ5Ÿ6mçÏŸwšÖk¯½FÕªU ”á×}Ðd œ@Μ9ùðÃùðà dÛ¶mlذM›6ŲeË K²¢J­sçÎFCÍÙ@Þ2eÊ8<ÊÍ›78pàãÆs.88Øü7>>Þ®—N<}š£GâííÍ#<’ìXLñp Œ2å¬ncÛ¶«W¯rüøq§aœÕa~~~IöÞ¥ÅòåËyñÅÍ÷Õ«W§S§N´lÙ’Ç{Œœ9sfèõ\)S6àŽ9ÂÕ«WhÚ´©ÃAå±±±fwhÍš5h¼uëkÖ¬áøñㄇ‡S¥JjÔ¨AÆ “œ9I@@@‚ëŸ:uŠ={ö@¨W¯O=õT²ûªÅÇÇÆÅ‹Íå*lU©R…bÅŠ%™†x°ªV­JÕªU²•+W.§ËzXë½»wïrõêU *”ÆÜþGkÍÈ‘#c;Í~ø:¤;ÝÌ*S6à®_¿NÛ¶m‰‹‹ãÍ7ßäË/¿´ iVz«V­²[Ãëÿþïÿ1bD‚ ͪL™2Ì™3‡6mÚ8¼þ‰'Ì´/\¸€¿¿?S§Nµ ÷裲lÙ2J–,iwnÛ¶m|òÉ'lÞ¼™ØØX§ŸuΜ9¼üòËNÏ ×*R¤K–,ÁÏÏððpþüóÏ kÀåË—€;wî8 ãìœíƒ_}õ•Ã2˜˜³™b"sŠŽŽæÌ™3œ9s†;wòÅ_0sæL  ÜŒ3>|8`4úÚµkGΜ9ù믿xóÍ7¹wï^²×úçŸxöÙg9{ö,T«Vš5krûöm9pà_ýµ].9×®]£oß¾h­Í±š"ó1b„¹|RÆÇ¡C‡œîyí´çßZ·)¥2¬nºxñ¢Ù£÷ñÇ?Ô7Ȥ ¸Ç{Œ1cÆ0~üx¦OŸNûöí騱cªÒ &&†_|‘êÕ«S°`AŽ;Æš5k¦]»vL:•aÆ%™ÎðáÃY¾|9;v¤mÛ¶dÏžU«V±mÛ6þüóOú÷ïϦM›ôÄMž<™÷ßß|Ÿ'OŠ/n® ʼn'Rõy„ëäÉ“‡êÕ«³k×® íî·>Z sÆÙ¹Gy¥Zk*T¨À“O>™aù®³hÑ"³®»wïaaaìÞ½›I“&qþüy† B­ZµÌõ cccͺæñÇgÕªUæ—aLL #GŽ4{$œÑZ3pà@Ξ=K‘"EX´hmÛ¶MfãÆ,]º4ÕŸgÀ€\ºt‰øÀÀýÒK/qùòåTÅoÔ¨‡báÂ…¼÷Þ{¼òÊ+øûûsðàA:wîŒÖšÑ£G;\ ÐÖòåËùâ‹/X»v-o½õ¯¿þ:¿ýö›Ù­¼yófÍð{öì17Ò­W¯{÷îåæÍ›œ8q‚ƒrðàA–/_žªÏ"\Ϻ®[JzºRʺžÑåË—–Ãøøxþúë/‡q½½½Í u&«p>>>øúúâëëK‘"E¨U«¯¾ú*7n$GŽÜ»wÙ³g›áƒ‚‚Ì¡C† IГáååÅ—_~IóæÍ“¼æÂ… Í™Ö?þø£]ã  }ûöÌ™3'UŸeÖ¬Y¬^½Úü9­còDætéÒ%sAÜ*Uª8 ·wï^‡Ç­“¬õ`F°­ŸSº§;Ë´ 8OOO/^L¸rå ýúõ³®{“" H0£Ð*Ož<Ì›7üùósçÎÆŒ“d:Í›77OØêÛ·¯Ù-|ìØ1óø¯¿þJ\\,[¶,Å›ï ׸{÷.3gÎ$**Êi˜]»v™=¦5jÔȰk?ýôÓäË—­5óçÏ·;¿qãFs¢ƒ#ÖÞcÿdoD®]»–¾Ì —ªR¥Š9¾ìðáÃæñ¸¸8óçúõë;Œk]èÙ™Ÿ~ú 0ž|8‹g•Üx_[ÇŽcĈôë×Þ½{§8®p½èèh"##“ óÎ;ïGÕªUyâ‰'œ†ûöÛoíŽýû↓]» CˆŸŸŸy3wîÜ$ÃîݻלÉï®2m T©RæaãÆL›6-CÒÍ—/¯¼ò €Ã=Öl½öÚk(PÀ¬Ðl†[+ײeËR¡B…ŒÈ®¸bbbxã7(W®S¦La×®]„‡‡£µ&44”3fйsgâãã)_¾¼9õÝ*..ލ¨¨/ëFll¬Ý9[yóæ5Ë×øñãY°`111h­Ù¾};}úôI2ﯿþ:5jÔàöíÛ4jÔˆ+V˜ãJ´Ö\¸pÙ³gS§N{ô°ö.Xgƒ1áÆ:4Ãú…˜XÍš5“L×zsâh_ÉÔ°Þ$DGGÓ«W/îÞ½K¥J•˜9sfºÒ^hh(%K–dèС˜“Z´Öœ¿þú+'OžÄÛÛ›.]ºðù石}ûvÎ;çp8“víÚÅ—_~ÉêÕ«9rä!!!(¥(^¼8Mš4¡K—.<óÌ3©ûňLeûöí8pÀÜ]ÃêÓO?åüùó¬\¹Ò\ËHP÷Ø>j½_®_¿NëÖ­Í^àO?ý”:uêÜ÷늌W¦LvíÚÅÊ•+Y¿~=ÁÁÁ„„„àååEõêÕ©_¿>ãÇw:~­X±b´lÙ’¼yó2}útŠ)ÂÒ¥K9zô(ùóç§qãÆL™2…ÚµkÛÅ­\¹rŠëTën¶<==Y·nk×®ÅßߟcÇŽJLL 9sæ¤L™2´hÑ‚N:9]‰Âm¤·ÈÚ 5000Aëßö•–¸•+WšñCCCœÛ¿²-ÿ|ùòéÑ£GÛí?yéÒ%3Ÿÿûßÿt||¼Ýµ¥.óߊ”‘ò—±=póæÍÓ¡¡¡:44TŸ={VïØ±C;VçË—Oºk×®NÓ9xð >|¸îÚµ«nР®\¹²ù²¦ÿ믿ÚÅ«T©’ôÈ‘#SwÛº¬GæÏÍš5KuZi!=pRÿ¹’«ë?·èco·nÝX¸p!žžžøûûóæ›o¦9=ë왼yóÚ-Ž™7o^óç_|ÀX”°téÒøùùÑ®]»ᬊ/μyóèÓ§_~ù%Û¶m£S§Nøùù™éXpB[ýû÷wx¼zõêŒ5Š·ß~ÛiÜÚµk›ûSÚŠŠŠ"W®\h­.–Z¥JNž<ÉîݻӜo0µ7iÒ„·Þz‹={ö°`Á»ÞB!DÆq›ÜĉY¸p!^^^,^¼˜¶mÛ¦«·f͇Nm÷~>|8uëÖMUÚÏ=÷U«VeÆŒ|÷Ýw:t(ÍùBd^^^æcöØØXóÑg||¼ÓíÖ’säÈkoÃzôèÁš5kصk¿ÿþ;?þ¸Ãtbcc“ÍðaÃÈ•+ƒ¦ÿþܽ{—W_}5MùB$-SÏBµ=z4cÆŒ!gΜüüóÏtïÞ=Ù8Ö6G6lØÀ¶mÛxë­·ìÎçË—Ï×–Ü,UG+åß¾}›/¾ø‚¹sço>soß¾=íÛ·§Y³fÉæ_‘õ,_¾<Á »K—.1qâDNœ8átQÞýû÷Ó¿‡›‚ÿûï¿üïÿŒÅYíKù /ðè£ÆÆã6l° óã?&;+ÚjРAÌŸ?^{íµ [=@‘HzŸÁrŸŸÁ[gXùøøèÍ›7›Çoܸ‘ä¸AƒéÎ;ëC‡™3²ÂÂÂôÔ©SuŽ94 [´háôºÃ‡׀Γ'^´h‘¾wïžÖÚ˜ÑuîÜ9ýÿ÷ºV­ZzáÂ…vq­³°²e˦W®\iw^ÆÀɇ…”¿3 uРAæÌÎÛ·o'8·k×.3~©R¥ôc=¦{öì©[·n­sçέ]¤H½k×.§y8vì˜9ÐåË—×:uÒmÚ´Ñŋ׀nÓ¦]<Ûºlÿþý ÎýôÓOæÌ¿ôÎösFÆÀIýçJ®®ÿ2í#T­5¯½ö³gÏ&oÞ¼¬[·.Õ=W«V­bÕªUdË–¼yó&X™ù‰'žHr¡¿qãÆ²eËèÝ»7}úô¡páÂ\¿~˜˜˜$¯k]”µgÏžvë† !Dj5mÚ”Ù³gMPPP‚Ù{*T`ðàÁ¬]»–óçÏ'XÔ9GŽ´oßž¹sçR¢D §éW­Z•ƒòþûïóý÷ßLpp°y¾Y³fŸV$¥[·næ“Ñ£GsçÎ>þøãT¥!„p.Ó6àæÎkn*ÿé§Ÿ¦h_6[“&M¢B… ,Z´ˆ'NpýúuJ•*E5èÞ½»Ý†Ð‰åÉ“‡¥K—Ò¶m[V­ZÅáÇ ÁÓÓ“R¥JѸqcžzê)ž~úéñ®_¿NDD€Ó¥„"5¢££ÍŸ­“¡¬Š-Ê×_ À¹sç¸páׯ_ç‘G¡R¥Jxzz¦èÞÞÞøûûãïïÏ… 8zô(ÞÞÞTªT‰âÅ‹§)ßO=õ”¹¬"ceÚÜ€’md%¥`Á‚¼óÎ;¼óÎ;ÄÇÇsçÎrçÎêt^yås׆[·n‘+W®$+D___|||¸}ûvª÷oBˆÄbccY°``ÜX&µÃK™2eŽsK­Ò¥K›ke !2§LÛ€ËHij¼%f»QtR×jÔ¨[·neþüùôë׆ ¦ûÚBˆ‡ß†  Œ^·K—.±råJN:³ñS³'©âá•%pÚ¬Y³hÔ¨7oÞ¤Q£FÔ®]???råÊ`>bB[ß|óÃãyóæåí·ßfèС8GBˆÌJp÷Aåʕپ};cÇŽå×_åСC²œ¡"EŠÐ£G»ãÞÞÞøùùQ®\9:wîœ`Ë>!„Ü}R§NÖ¬YChh(§NâܹsDFFÚ…³®¿$„ÈšªU«Æ?þèêl¤I‰%ð÷÷ T©R.ÎY‹Û6àòäÉcnî\¾|yçÆ¹âÅ‹S¼xqZ´háê¬!D†*X° Æ su6„ȒܶçééI:u\ !„BˆÎ-¶ÒB!„ÿ‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›‘œB!„›Éæê !„»ûå—_(\¸°«³‘å:tÈÕYÂe2¤·xñb<˜I ‘jRþ„«½ù曮΂Ȣ¤þ˺”Ö:] xxxìõôô”G±.¢µÖqqq_h­—º:/® åϵ²zùSJer»:‚›ZëxWgâA“úϵ\]ÿ¥»'„B!,i¹ !„B¸iÀ !„B¸iÀ !„B¸iÀ !„B¸iÀ !„B¸iÀ !„B¸iÀ !„B¸iÀ !„B¸iÀ !„B¸iÀ !„B¸iÀ !„B¸iÀ !„B¸iÀ !„B¸™l®Î@V¦”z ˆÔZ/wu^DÖ£”Ê ¼ü¦µÞïêüˆÿ(¥*büm¬µÖߦ ^? Zkýã}Ë\‘ò—yIùs´N)õ¢R*ÜæuA)µS)õšRÊ+i7TJ½§”Ê•ùª”ê˜Qé9ð?àåû˜¾HD)5ߦüÝPJTJý¢”z<Òîi©À2„Rª˜¥LWΨ4É L½Oé ”R§Õƒ¶¯–`Ùb–W? s “˜l¨ÌAÊŸ Hù3¹}ù{Ð=pÙ|ÀwÀQ Ð˜4¤#íæŒ¹ÀôeÓ4X ¬Ë ô„ëù`”Áá–÷€§•RݵÖ+Ò‘ö ?0?}Y4•Ä(Ó§€”¦p½|À ÀQÆßZëc@O¥ÔÁT¤ýÞ Š‡š”¿‡„«¡®ÑZÿ ”z 8¼¬”¯µ>Ÿ8°R*›Ö:6£.®”ò<µÖ1•¦%Ýdó™ÑŸE¤Ùt­u௔jüŒ6à”R^Y^”RÙ­µÎÀ4=øäÒ”2˜)„h­§dt¢Zëß<¤´(¥<-ÿW’ ‡”?w!åï!àòI –_äRËÛ*¶ç”RÏ(¥w,»Ö(¥J&  ”:¼g9´K)uÜòz7QØ/”R'€{Àm¥Ô¥Ô›‰Âô´Æ ]mÒ;®”*˜(|Ë#¸k–|þ¥”²ë’UJÕQJí¶„ RJ½˜Ê_•¸O´Ö=\•,{À¨”Rã•Rgh¥Ôy¥Ôg¶û•RõlÊË£@õD奩MزJ©EJ©0Œ»Ô¥Ô.¥TsÛü(¥fYÒ³6&¿´Iï§ÄùWJ=¥”ÚDáJ©•J©¢½¬” î*¥öÕÒú;™‡R*q™›ë$Ü@ËùG•R{1ÊÁ ¥Ô NÒën)oJ©0KÙ÷t®”¿,LÊŸëd–I uFdÚeIDATŒ^”R€5À`Fcêc`¯Rê­õ]KÐÉ€Ðè|Ü´œ;žè:Ï C×ö_Ž…µÖXÂã,? ¾±I#Ò&Õ€½À5`ð/ð °])UOký%\)à Ø’Ç<À§ÏàCSø;÷‰RÊ( ìÑZÇÛœò†bümš`Ü(¬ ðóüW^F¹lÞƒñ7·ªly}~@`«RªÖz‡%Üb`;P˜,Ã(g×åýUŒòù'Æø“rã*w(¥jX{ •R½9ÀÀH  “g—ø¯ÌMÄ(WŽÄ(«1Êö$ŒñM‹”Rw´Ö«,árZÂ}g ûÐxðÆfp»”?”?×ÑZ?°Æ/Vƒ1zÛÚSx`^¢°`4nrØ{ÂÿMi¿e9W$‰ëgspì/ ÔIøËÀÜ$ÒۀћWÌæXvŒä ›cŸq@Y›cOZò»þAþ ²ú øÉò{¯f)ƒ=1Æ9ƽm¢€E‰âO³ü-+;Hû7 •å¯ Ìqp®¾%¯Ý¤Wc,ËžDÇÛXâ °9v øP6Ǧ[ uõß%+½€«ãt'zmuþ`Jë K}¶Ùɹw-ï 6Ç<1n2ö:(w&Š?Çò¢ˆ”?÷}%Qþ¶Iùs¯—«¡~ ›!@W­uëIËc¬FÀj­µí€Èß0Giš5¢µŽUJ•TJu´t羆Ñ{VX)¥R“–R*ÐX©µ³¹Æ=`#ÐÔ&x3à Öú¬Í±MÀí´|‘!Žb”Á%@% ŠÖz‘Íùº@þ{¼oµ£÷¶qj/¨-ã.”R5•RÝ,w0À®Ë?š¾ÿŸlí"°”A¥T~ *°J[j.‹•i¸¦È70nm_Ûе±þ ±Eë€Ê~%€_¼Ïñ¤ü¹3)AùsÕ#ÔÑ]žU1zÎf*¥þÔZ_±œ/†ñXô²m$­µVJ]Ây­S–ÚLŒGœž°îb|qzbtͦföjYŒ/òJ©N®™ÃÒõÃxlkÒZÇ[>‹p6¿fÀ(Œ.ýgmΗ¶ü{9Q¼Ë¿i)ƒE0 4Á¸“ Âè}ÎäNmz³¸æ+¥ .gùךWgŸEn'Ÿi­o(¥>ÞNCzÖ±pŸaŒYrÄ:kñŽ?KŽ4\WdŒí–»¿ÍJ©;À§J©µÖ?XÎ;+ƒÖ¿YZÊàtŒž»Àï–ÞZ”RGÒüW;aŒÅsvÞzcâ쳈¬%g¢÷ÖrpÏÉñÄñ¬OE¤ü‰´ò—A\>‰Ak}P)5 x[)5Ck½[k}])É-lÀ\9¹°ÕARÖiÁÎò} ãKy¢ÖÚöÑe$²‹±n˜£|_TJÝòi­“['ç,öŸ%Æ`øcÉÄ÷ß“>UJý¤µŽÂXÚŒ¿ÛN›°ÖEuU±8/`”Áß´Ö¬”±ðtyŒq)‰Yo–Aþ›¤£’)ƒç1ÆzTHtü~-,2Ö-ŒÞ‰Œòp&Ñû{Àá½·ö\HùˤüeR._FÄâsŒ±6ÇVϪ„«ÐÁhE;š=b}ÙÆÉ5Â1Z𕬔R-0&8sh®Œ5»ùè§”jb{P)•×’¶ÕO@9¥Ô36Ç^ÇxL,\L3O'a4¨_±Þ‹ñ÷ª”Ê ÆúA³RÃ1Æ0&v ¨¢”*áäRáËŒØN…ñøÞë eg»DìÂ` —eü–ñI1ÊäËy)Yƒ”¿ÌêAΘà¿Y¨Ï88÷•å\#ËûŠ_ˆW1–þXg9¿ÒIÚ¹0f³hà0Æ ÌA6ç+at©Þ°¤·£0¬´ÄÉå Í—0Æ(ÝÂXÎdàks>7ÆÀÏXŒ‰ ³õ–ë,³ —cvÎŒAó¿bÜ„ ³Pt´ÎBõLtÜcLÚE,3Ÿ^w†Ç0f@˜úª“´›btïGcôÚmêØœÅríÓSßwbŒ=‚ó`Ë,q.XÒ›‘è|}K9ºf)Ós-iÆýmÂÕ¶„9|À¨Ýz–;¾,uÚÎT„¯ˆ±DQœ¥n;d·9? XeyÝÀèɰ¾ŸdÎ: p7Æ—à÷–ò~¨š¨LYñ”©–z®w¢¼Iùs³—”¿‡§ü=èG¨0V»w´-ÐŒ‚U@k}J)U£•\ ã<ã—oGk}G)U£5_£ÑtÎæüI¥T=ŒýGKc|€±\Äaþ{\e›æ÷J©ŒîEeNk©”jñEßcbC(Æ6M«mÂE)¥ÞÄÀ~ cÍš'1‡âÁY†Ñ`²]ï mL*´Äô¤µ^¢”:16³"ÆÚlCõ뵑(ÝJ©G€¶m=ùoMB´Öÿ§” ÅXû­ ð3F£¿FåèHŒÆcuŒuL|ÑZïWJUǸ;­öcüÚdîRª1ðªå³,Æø¿ôÿ­1'ŒO1¾SÄRZë¶’õmy9Æ´?Jrô¨¿;Ðcû€¯µÖç„ûãñ}GŒ2ò¿Äe_ÊŸ[’ò÷”?ei !„xˆ)cgš)@~­uxáêc,hþœÖÚnç!ÒBÊ_ÆË,cà„B!D IN!„ÂÍÈ#T!„B7#=pB!„nFpB!„nFpB!„nÆå[i¥”RÊc+Œ\À%­µ£õe’Š_c=9« ­õÑ Ì¢BdZ–:Ôv÷—H­u¬³ðBˆÌÍ-zà”R0<„±:sZ¶Àh±úý7 ¨ö˰ Š,G)UDzh¯÷Rj RêˆR*R)•h«¾”ú c¥|ë«y†fRñ@eúœeÊ/1¶Ç¨ä>Lm:Zë9ZëbZëb$Z…_ˆ4X |ìêLˆ‡ŸeGšÙ«Úzb¬~ŸZ¯Uùo¿_!ÒD)¨”úÁÕùÈêÜájiŒí4–j­]!„xÀš`l_ô–ÖÚÑ6„)¢µPJ•ɨŒ‰,+ Ç È´ 8¥Ô«@] €åP˵Ö?[Â寨/²-Æ–á{›úk­¯¤ãú 1öI«ÜŸ㯵ޟ(\v`(Æ~©¾XöaÓZ_KëµEædÙKï%ËÛB@¥Ô76AÆh­¯Ú„/ŒÃØsïð"Ð8‰±ÉóiË>~¯Ó´Ögmâ|µÖŸ&ÊCuŒýüja +X­µ–;á‡Rê9Œýt³j¦”ªkùy‹Öú_K8ŒF^Œ½ Ï»µÖ‡ÒyýrÀ³@qŒ}ª÷j­ã…ËݹnIk½QÛ<.ÕZG³,oë¥1Yoà‚Ö:Æ&Ý ­õë{¥T#ŒG§ ´Ö¿iCðF™”™þà¨Öú#­u4c1µÖÿßÞ½‡XUEqÿ.G‡ŠR¢AQðÓ½Œ (*BèÒþpИ„¢Ų§$‘½$葤`F4Q¡ŒVP9–¤DŽˆ=03)˜éiõÇÚGg×ïp=÷þ>p¸z{æ^öì³ÏÞk¯Û5Ì2æ/¹û©œÃÄÃÂà¶jþÂeQú)T3k"†qï!F)ò†{“̼,ºÌlñ”¹ÖO žJLoL3³ÎÂõ­Àd3ëʳ$Px  Óë3»·p̉Ñi@)·¸ÉÍÎ#Fà ¦ªFb=ðˆ™uï»ûŽÂ9—¤×ñföDáØŸÄT—È–*”‘յ酺ÖD´ Y×Jß'bEž>vq"Ÿ0Â4)î¾/lÎ#b>KÍìaw_NËVàtŸŽô——†0’-M…ÿ#ªMôOƒó#K+!õáu¢­z—h"ž¿ÍÈW .'‚ÏOšÙ6àwÿ1Ó’^'ã ×o%b>EU¡Œ¢ý›1À±NŽnõЛKÌ•/Ëï4³iÄ4ê@zs‡*ÔÝ{‰€ñ7Íì XlfÏzLÀHåìs÷5§õ¤Œþ£:?Ùthqôø b*?³—UÙ˜¦éEHmÓ|`ƒ»ÏËí¿xˆË²€Aëojã:€3›@äŸ{†X1½"–µ¯Ë½°:_êžsb”·’¡ò®f3Tgö·÷×ÌþôóÚó¡L®ô1p@3…Ñ 3»˜8Ä5€ë;˜–*ç‘dO*s\Ú×G<í¶›Ùù”Q¼!K}9\Yñ¬Ê~N¯×g;Ìl&1ª‘·8ÜW,ÀÌšS:i1XaÿZVˆ»4³€efö± æ/¢ n#âæ6Tï­Êd'°ÐÌãDû÷M¶Pa¾'î± Í¬›hÿþÈŸäî_šÙFàùÔNæÛ¿;Õîþù鼡Rªõ2ØJ‘'«˜5Èñfài"îã‘£h&ñõ[¦I×- :ÀºÂ±ùDþ·_‰œ[û§€s(g"ñ57ßG‰eÎëkýÙi½‰½›Ès´5գɅs¦§ý7U(ërâ ³‡ø½!Õé78÷f"¾ó0±|¾‹øJ¯–Z&ÚF­®UJ#2‹x`ô´í®Jÿ^1È5—7Þ£é¼sÇÆ¦}¹2ÿÖc åŒîOu×sÛ×Àµµþì´Zœ”Ú¾CÄ©Ó?ÅL–FdA…²ÚˆPOõq)…4"é¼³ˆ\„çêY_j;[ký™Ôb³ôÁˆˆˆˆHIÔC œˆˆˆHCQNDDD¤dÔ)uàDDDDJF8‘’QNDDD¤dÔ)uàDDDDJF8‘’QNDDD¤dÔ)uàDDDDJF8‘’QNDDD¤dÔ)™ÿ™Ž>/•IEND®B`‚cups-2.2.7/doc/images/raster.svg000664 000765 000024 00000042564 13255074424 017221 0ustar00msweetstaff000000 000000 image/svg+xml BackSide BackSide BackSide BackSide BackSide BackSide BackSide BackSide Normalfalse Normaltrue ManualTumblefalse ManualTumbletrue Rotatedfalse Rotatedtrue Flippedfalse Flippedtrue cups-2.2.7/doc/images/right.gif000664 000765 000024 00000000525 13255074424 016773 0ustar00msweetstaff000000 000000 GIF87a$¥;èèéóóòôôôïïïæçæõôõñññóóóóôôçèçîïîæææõõôððïóóôìíìçççùúùçèèÞßÞéêéíîîÙÚÙãããùùøñðñö÷öùùùíîíññòðïïëììêêéòòñïððàáàöö÷òññîïïåååÛÜÛôóóííîéèéàààòòòõöõòóòóôó÷÷÷îîîíííëëëéééðððêêêìììõõõèèèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,$@zÀÌ¥É1 :›RGkêt‰‹‹é^¯–n¦ªè(µš.¢}äκ¦ë :Ó@¦ÃÙu·¼ÐA,:5 0 ..V99:::-!%I6: :2¦[33uw474: 7b5+OO'#(:"A;cups-2.2.7/doc/images/sample-image.png000664 000765 000024 00000006725 13255074424 020246 0ustar00msweetstaff000000 000000 ‰PNG  IHDRxìý/iCCPICC Profilexc``2ptqre``ÈÍ+) rwRˆˆŒR`¿ÀÀÁÀÍ Ì`Ì`˜\\ààÃyùy© |»ÆÀ¹¬ 2 UŽ +¹ ¨¨ê¥¤'300ÙÙå%@qÆ9@¶HR6˜½Ä. rвùÒ!ì+ v„ýÄ.z¨æ H}:˜ÍÄb'AØ2 vIjÈ^çü‚Ê¢ÌôŒ#Ç”ü¤T…àÊâ’ÔÜbϼäü¢‚ü¢Ä’Ô Zˆû@º! A!¦ahii¡ ¥"ŠˆqŸÁáË(v!†°(¹´¨ Êcd2f` ÄG˜1G‚Á)Ë„˜I/Ãþ©15C}†}sïPoæ³åé pHYs¯¯cæŽÃ LIDATxíÝÏjœçðW¥”T % %K0„Ì"—U!D³ç† ½®ÇYL*S Ó,Jöé¨Sšñ¢›FM%'Åùã8&ê÷½Jè<ßù $k÷œùoÚœ£ÖÚõðí‹øùøºONNÚ|>¬×ë¶Z­Úí·_nóÓWâù~ÙVï_|þÔû—?Íûo·Ûµ»wï¶^³Ù¬-‹ø›ðâ⢗ÀlvÜw^ ÿû^ò§Þ¿ü)ޛͦ—ÀÏâï<”P¥Öay%7—H ”€(µÃÈ (¼¹D¥”@©u†@^@ äÍ%(% J­Ã0òJ o.‘@)%Pj†!Pys‰J (Rë0 ¼€È›K$PJ@ ”Z‡aä”@Þ\"RJ Ô: C / òæ ”P¥Öay%7—H ”€(µÃÈ (¼¹D¥”@©u†@^@ äÍ%(% J­Ã0òJ o.‘@)%Pj†!Pys‰J (Rë0 ¼@?HzvvÖöû}<}»ÝöÌå½Ë!ÿi<ÿüükùƒÀr¹œvÿò'ñ_GÃ÷uÿÍR ¸ýöËm~úJàÁÃ/ûið_¾ôvûÕ+§ñüo¾xؾùâý6õë?9™æ>ýz½î§á=ÿÖðü¿þNþùÿxxþÿö‡«6•ÿn·ë§É{ ÌfÇmqçÕø›ðââû^¿8žµs'žÿüÙE/©_ÿl6kSܧ?®V«vèù¯½qÜÞ|7ÿü?žÿ±¦òßl6½üa0^= ÔPµöaq%'H –€¨µÓˆ (8¹@µ”@­}˜†@\@ Äɨ% jíÃ4âJ N.@-%Pk¦!Pqrj (Zû0 ¸€ˆ“ $PK@ ÔÚ‡iÄ”@œ\ ZJ Ö>LC . âä ÔPµöaq%'H –€¨µÓˆ (8¹@µ”@­}˜†@\@ Äɨ% jíÃ4âJ N.@-%Pk¦!Pqrj (Zû0 ¸@?Hzÿþãá>úÓxøùù×=óëË{íû§ûxþ³oÎ{æòÞ夯¹\NrŸ~»ÝÞ¼þÏÿè½Ëvõ(ÿüöãó?Õþǃ´ã×Ñð}ÝóƒƒèŸn÷Ùç§ùûì†ûì«÷¯ÚÔùS݇_¯×ý4ø¡çßž¿×ßÉ?ÏßxüPóÿý÷oÛ_~÷¯ÖK`6;n‹;ùûìÃ}ö±¦ÏŸµÅbÿ_`ü8¶Z­&»O_%ÿµ7ŽÛ›ï柿'Ãó7–À¡æúç/{ øÃ`ü­/@-%Pk¦!Pqrj (Zû0 ¸€ˆ“ $PK@ ÔÚ‡iÄ”@œ\ ZJ Ö>LC . âä ÔPµöaq%'H –€¨µÓˆ (8¹@µ”@­}˜†@\@ Äɨ% jíÃ4âJ N.@-%Pk¦!Pqrj (Zû0 ¸€ˆ“ $PK@ ÔÚ‡iÄ”@œ\ ZJ Ö>LC . âä ÔPµöaq%'H –€¨µÓˆ ôƒ¤÷ï?nû}þ>ûùO÷Ùï]N›¿\ùû8þv»í™Sݧ¯’ÿÑ{—íêQþùûìÇçïPóǃ¬ã×Ñð}ÝóƒƒèŸn÷áç§ùûð†ûðãiòCÏ?99ióù<þ®×ë~ýÐóo ÏÿëïäŸÿ‡ç<>•ÿn·kwïÞm½f³ã¶¸“¿1|K@þ¬-‹x \\\ô˜Í;ÿµ7ŽÛ›ïæŸÿñãøXSùo6›^þ0ë $PK@ ÔÚ‡iÄ”@œ\ ZJ Ö>LC . âä ÔPµöaq%'H –€¨µÓˆ (8¹@µ”@­}˜†@\@ Äɨ% jíÃ4âJ N.@-%Pk¦!Pqrj (Zû0 ¸€ˆ“ $PK@ ÔÚ‡iÄ”@œ\ ZJ Ö>LC . âä ÔPµöaq%'H –€¨µÓˆ (8¹@µ”@­}˜†@\@ Äɨ% jíÃ4âý éýûÛ~Ÿ¿þã}øå½ËÃÎ_.‡×¿/»ÝöÌåçôÞe»z”þ?ûéùŸÈüXògm±XÄÂÿï_þþ›Í¦—€? Æ}j (Zû0 ¸€ˆ“ $PK@ ÔÚ‡iÄ”@œ\ ZJ Ö>LC . âä ÔPµöaq%'H –€¨µÓˆ (8¹@µ”@­}˜†@\@ Äɨ% jíÃ4âJ N.@-%Pk¦!Pqrj (Zû0 ¸€ˆ“ $PK@ ÔÚ‡iÄ”@œ\ ZJ Ö>LC . âä ÔPµöaq%'H –€¨µÓˆ (8¹@µ”@­}˜†@\ $=;;kûý>¾Ýn{æòÞ埿þÓ}øCÏ_.§Ý¿üIüǃ°ã×Ñð}ÝóƒƒèŸ܇Ÿæ>üz½î§ÙùóŸÏçñÚívý4y/ÙÌ}ø)îÃÇV«Uãïù›âùÛl6½üa0Þ¿ ÔPµöaq%'H –€¨µÓˆ (8¹@µ”@­}˜†@\@ Äɨ% jíÃ4âJ N.@-%Pk¦!Pqrj (Zû0 ¸€ˆ“ $PK@ ÔÚ‡iÄ”@œ\ ZJ Ö>LC . âä ÔPµöaq%'H –€¨µÓˆ (8¹@µ”@­}˜†@\@ Äɨ% jíÃ4âJ N.@-%Pk¦!Pqrj (Zû0 ¸@?Hzvv6É}ôívÛ_ðÒ}zþû}üá?ôço<ˆ;~ ß×ý7?8HþIà­Úoý<¹nŸ´&Ÿ¿ç/ÿþûä»Ö~uÝz Üzᨾ”âóç7% Ÿ¿ç/ÿþûð«›ð‡Á¼½D¥”@©u†@^@ äÍ%(% J­Ã0òJ o.‘@)%Pj†!Pys‰J (Rë0 ¼€È›K$PJ@ ”Z‡aä”@Þ\"RJ Ô: C / òæ ”P¥Öay%7—H ”€(µÃÈ (¼¹D¥”@©u†@^@ äÍ%(% J­Ã0òJ o.‘@)%Pj†!Pys‰J (Rë0 ¼€È›K$PJ@ ”Z‡aä”@Þ\"RJ Ô: C /Ð’þi¸ üÏg?ÄÓÿñtì Úÿ+Ÿ¿ç/ýüÏó›Ä£áŸët¸<êôOo½xÔ܇Ï/åƒ'7§Ùù{þ¦xÿ}òÝÍiò^·^8jîÃçKàóç7%Àßó7ÅûïïnJÀóï}‰J (Rë0 ¼€È›K$PJ@ ”Z‡aä”@Þ\"RJ Ô: C / òæ ”P¥Öay%7—H ”€(µÃÈ (¼¹D¥”@©u†@^@ äÍ%(% J­Ã0òJ o.‘@)%Pj†!Pys‰J (Rë0 ¼€È›K$PJ@ ”Z‡aä”@Þ\"RJ Ô: C / òæ ”P¥Öay%7—H ”€(µÃÈ (¼¹D¥”@©u†@^ $Ý=mmù8¡ü¯ßÞ\F—Ïßó—ÿ=z6¾ÿZ»yæËG"Eþ¢]ÆVTFIEND®B`‚cups-2.2.7/doc/images/sel.gif000664 000765 000024 00000000552 13255074424 016441 0ustar00msweetstaff000000 000000 GIF87a $„ÒÒÒÙÙÙàààæææéééêêêëëëìììíííîîîïïïðððñññòòòóóóôôôõõõööö÷÷÷øøøùùùúúúûûûüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ, $@ï Ždižä¡®l뾬#Ïtmßt¥ï|ïÿ \æÞ«~úå5víÍs¤'3£Ä :VÉâ£JÁùŠÈ± ÍE£c4äk•n½n*‘¬ÞÁPëZdžÂn?Óú3‘ ò•¹Ð¹(`xMÇúBfr!žR·:% 9R‡¸£+µ™ÛæN(ÊífvùŒ_\ô*}€äQ©XÃ^ç æšY#R±†½ÏAÍ4²fö ‡XÌzÔ²F³{C¬f=j{ ¸ÿOèLÎD3ÊVçBä¡á7éý ™È†yJÜè\”(äqJ⌮Ögo™8£+µ™Ûæ1}sЩö‘F¥c {žƒšidJÆ÷=4ÒÈ5›Ø*c1ëRÉÍ챘õ¨@iì&ãý?¡39Ï)[ ’†„ܧô&g"å+s¡rP£‘Å({Š2»Y¾d⌮Ögo˜ÅõÏB§Ø^E•Œ5îzi¥’5+kÜôÓK Öo`¨uŒÇ­K$k7°T:ÆcÖ Y§°›ôþ„ÌäC<¥nt.JqþŸÐ™œˆg”­Î…ÉBŽG¡î(Êífvù“Š2»Y¾c×= Ÿ`yjV0×¹è9¦–HÔ¬a¯sÐsM,€#Y½‚¡Ö3µ,‘¬ÞÁPëZdžÂn?Óú3‘ ò•¹Ð¹(`xMÇúBfr!žR·:% 9R‡¸£+µ™ÛæN(ÊífvùŒ_\ô*}€äQ©XÃ^ç æšY#R±†½ÏAÍ4²fö ‡XÌzÔ²F³{C¬f=j{ ¸ÿOèLÎD3ÊVçBä¡á7éý ™È†yJÜè\”(äqJ⌮Ögo™8£+µ™Ûæ1}sЩö‘F¥c {žƒšidJÆ÷=4ÒÈ5›Ø*c1ëRÉÍ챘õ¨@iì&ãý?¡39Ï)[ ’†„ܧô&g"å+s¡rP£‘Å({Š2»Y¾d⌮Ögo˜ÅõÏB§Ø^E•Œ5îzi¥’5+kÜôÓK Öo`¨uŒÇ­K$k7°T:ÆcÖ Y§°›ôþ„ÌäC<¥nt.JqþŸÐ™œˆg”­Î…ÉBŽG¡î(Êífvù“Š2»Y¾c×= Ÿ`yjV0×¹è9¦–HÔ¬a¯sÐsM,€#Y½‚¡Ö3µ,‘¬ÞÁPëZdžÂn?Óú3‘ ò•¹Ð¹(`xMÇúBfr!žR·:% 9R‡¸£+µ™ÛæN(ÊífvùŒ_\ô*}€äQ©XÃ^ç æšY#R±†½ÏAÍ4²rØYë8‹þ+V–—z%þËE¢ˆ¿Ø—»À»UÝ«»n&g”oq3Åpv±ÿP¸ æQé3Jš‰aé ¿TD½W¶ã ¨aÎ×M«’WHȵu½” §kÕSÀÞXìÎѽÍ1L}gøgôc›ÔC¥É8L¶sNWD´3UÕþ¤4îj!á[kj•U}æ¬êÿùÑ#aOc²tù®Sú¡æ#“±Aǰ­Õ¬‚ª­´µeUùçï5*ÉájÛÉ*hkoŠÝöÇ„ÇßÚ­¿Äâ¾ÇåD|—)ŸÌFE¶zkÚÎ]{$à\è‹’ôþ”ã^ËÍio°Ùî‹L²Ð1C ©ªî(hºÉþåì»\Ò±£E˜ŒøÑ¢>$Wª¹ï{•\å]uU]u;†Êìµw¢.åü´ò÷ž¼¿~Šõ߈ÝKaZŒ2ZJú¾ ”Oð©'j{9wSŽ&¿uƼ{Ýî{Ü®{–õs–õU? ïØv1hîX¢)§óÍZª¦® ²ˆßI­ÔèSi5Kž)?ªÕ/âTÖTâSoÙ<<ÄjÕµ¨öëiÙfÜ©Ææoý[wÐÒ ×æì¼\Út½F³Ïßóÿa:kªžÖ¦Ud+R,¦ÍÁš–~´HN½>‹‘x—Tömg-UbÊO¤å&mÐ\·{Hk«"dswüÓyPé „Ú]´„’ÏÐÉÕZÛß*çj?*±wÓ‹]yá¿çöê©v€;j¸} G‹-‘àE|(°ÜŽcØåG5S}5˜8˜×tŽÁ†Yh› ‹\ˆÖUÑ.…äFÌ¢x#øµ—{!µN‡ð¢2$7¹‘¨æ¹«rµSYQr/‚œ"¥«§ÿ…Ôâ"Ve™ªåÔÓ OêO÷&úvïêyÿhv X×+>_xåõ§íÓ…»7uùe²@OXÖo`¨uŒÇ­K$k7°T:ÆcÖ Y§°›ôþ„ÌäC<¥nt.JqþŸÐ™œˆg”­Î…ÉBŽG¡î(Êífvù“Š2»Y¾c×= Ÿ`yjV0×¹è9¦–HÔ¬a¯sÐsM,€4¶mÛ¥¡-•¦Æº,V£§žÕÕkWU!öë¯ɾ¦ÍµöŽ”³•x×9Йt(kþ¤EÔk{õø‘N@œ˜¨ÏG›Š±f#ÄX‘íw9VõS¶v_eÆEÙʹ->³ÿ¾ŒëÒ;°øES2;3aë–©Ú)ddª-ΚŒºiô]u^$¼«›ƒfoåWQó:Gýú%M3TéL1ÀnÙ ÓÙ «Q«ÍE~úK±°Ñ;]¢=8¡ºÒµ:Œ7劬zw#[ætŠþ'ör›È»TÇ>åZ~Úþ‹>Jöœ(Õ¥ÁMzƒ ó2èÚŒ£5Uðº6¦Uf¿uæ w ™µ°v¥Ÿ ìWOÓÛ¬q‰úLB½vê¢tª4Ūu6v­:É:|´I™‡ÿ,8m½~«‘8ÔÙô\MƆصš“%•u}Œ»tnO«—QèŠh¶ÏivVƈœëÑLÏãTý£YÓëÁ–Ýšîza©¾~YÝÚ~©£»_ÚCºÿ¦ƒ÷1úÖ&àÃtZ5I“*š¾Æaº/Ñɨ«õD:þ'Ä®Îd\‹~4ѯ½TÌGç„}ôe«ôFº50=Ulí&uòu h’Ó þhqrýS*q¡å;Õ»”]¢+·11;âc|L}%ZcMÒº]NnS–¨ÈÆXSRïGÃzo.EÊ‹¬©¾Šy*©Š¢iª5‰‡cmLµ¯³rõI{›DxH»D×oîœJ…ó—pGlÌZÆJÌDºQVÁ~³èb­ËÄ«ê#ÉöÞÍòSE>‰ß9}—­Wߤv@fö ‡XÌzÔ²F³{C¬f=j{ ¸ÿOèLÎD3ÊVçBä¡á7éý ™È†yJÜè\”(äqJ⌮Ögo™8£+µ™Ûæ1}sЩö‘F¥c {žƒšidJÆ÷=4ÒÈ5Bz 2›5?0·A–„èÑý­EUò9¦™ªtŽ#@áÚÓ¬ý~Ÿ€ÿòò í#".£¢¹5;š¿û)©UN¡«Tš¨L»Ef+¢½oßrÞyOcÙø”áãQb=£_Õ®®®õZ€ê,ßmmMñæÑͥʪ{UE¹b;yˆ¾yê‡DËËÁ”—‡//  Ãj5Ø—#S"! ÃQYA±ÔéDj$WBHѲ«Ü—­ÿKîì2#åÜv–öÛÚuÄUýs1D{i»ÝjãÓHöoq¬Åº#œ€¥¬†žÂ®à²^-£¤ÁF+Tä&¢§þDMî>ü¦á?¡C˜ƒ V#áÄj±í]g"¥Ê†÷³»'açQ—;¿º=ª§Þ'øå;دZ¦í=Ùqè)ZZÑ-Bšªª’ñÜÆªï¶ÿÒ½©q4ûÅú/Ú¦õ¹Öš¢&:Lk¿11:Hz©´éšµJ^Ÿ'ÚLL=Æñ®úäD×U<¦ÙÀ…‘ª ÌV¢¬»R]ç;UËõ¹?¹M?ivÌlm—{:cY¦7G:§t}µÿFK6üJâ–ʲBBÈÒ›/.Ô‰4ôE˜˜TýQû57“÷2 ósoç_«'&©ªº§Y™ÿ¿ˆöoé¦)#€*¤Çm}µÔ§KÌ5!Í1eæ?T7~í]ôýÎf©S¦i5)Š|ä?g1.õcÛÆ›é•]ë³IᾊÈ5 }fQa«2¦û›ªÕúܪŸÚ‡¯ü+í-ë¿ø‹Õknæ³N¿ÛTF»¾“îç§9kó¬ÄÓâGj`ô#Raƒ N¶¦ÄÊLF~Šr[ü´Êªê«š‰s»QQ~·œžmlWVFÖLR">èU*¬j¯úŒÕOýt}ÈuîÒáFF ×óQ¾:{þ›þÌÖjÒ®®Œ^º¬ÞÁPëZ–HÖo`¨uŒÇ­@²Oa7éý ™È†yJÜè\”0<&ãý?¡39Ï)[ ’…Ž)CÜQ•ÚÌíó'ev³;|Æ/®z>Àò(Ô¬a¯sÐsM,‘©XÃ^ç æšYkÌ4Õ–™ƒ¹ˆ,r6$ôfK&[¿™Þ Tí6¢ÿêyV5žšÈرÝÇ~…©äão°¬Eí£j™á¯ãðÇvt¢ZDzÒ€°Ù¡Ð7Av‚äÐèu®â?F;a«L¯XêtÚ9+a$ÙQíK–ÿ­×ö™ñ6v%Ì<›˜×c梩‰ë£²STULLª@â4XrðbFŠôd8mW½Ë¬ÔD½Tæ"ft͸RÐüG«è.ºøZÙ}“/ñ0ò•¡ª-nÑT*JЉ1Ïj.óoý)Ø—O³ö.5x›3窊(¦zÅ1ë—*Š«™Ža¾p!¡÷>vë´z}×å»Ùû÷41¶p!Zd…BÈ‹0Ô}ÍÔr}nT_íSªüJĹ‘ÙËÞkÝšjž‘;ÿ¿ìχTEèÕ»Ë-àk<7è}Ï’¾íŸmÙnöq/ý˜i<7Ö™¡O£Br*˵cÆDÞsµŸ[‘Wûî¿q.dö¹™š§éüéulº¢,έL>®h‚ª:‰héÕ6­ÚVa‘¨º©Ú—¡0®ˆ®™¢®¹Ìnw \Žj9ªŠÕKÑSYOéÃÏ-JÃQ&—ùŸ' Ææ·B¾(¥óÅ/[›W*·>Ó1ølbu@ÈF³{C¬f=jY#Y½‚¡Ö3µÈ =„ܧô&g"å+s¡rPÀð›ôþ„ÌäC<¥nt.Jr8¥qFWk3·ÌœQ•ÚÌíó¾¹èTû È£R±†½ÏAÍ4²F¥c {žƒšidÍØy˜X¶ö^úd!¶ä]eW½{5Ðé˜ðÝÿr#ôh^Gfì1;C^TÏðÃÐ× ÒÔ€¾-ÂÙ*›àM«KšTö¨‰zÃvóÑ<ò§Ñ‰—˜ƒ7/b^+"ÁˆÔs"1oG&TSÌŽÌÛŠå•v†Fe*«{¥c&Šý].<»·cm\œì Šo{Äð«Nýªöå;µÓŠö6_‡Ú¸:ˆžCT÷ÃjTiPŸ¾²ïlD^ÇhODÎ(m‡|­2£ù"£èçy;_`{GMÏqj×­:~uÓõl<Õ5ï6§°«„/—‹g)1‘êïÓ9‹¨‰ÿ»)ŠÚ\+W«ÐŸ-.­§J?QYË£rdWë÷\`§¦ö3áxYçím&ªwÓDoˆŸiªxLÇ´F±®ý}”²3"¨îÛ³5Áê¦Ôfi5)z„œOg1.ô{ƛ˕YPò‚-Ñv‰·\kLO ‰ãbtߣ²¾B×R›1.ä‡4ÄD˜—UýPÝûµw—÷2#‘)Õ)ÚLë')ó1%¦ü±!ºåú.TâSgÑpß7aVi¬™TÔöÒîÐ9~­]E_¢¡ó÷i~æØ½Uí‘ýKs¿»3U?Mû¦9o×é<[[9ÔÌist·`5ŸÆû; ¿HU4wk{8w_õÑþÆ?ZÃ|Ühn…F¦²YWSÛL;Fäú55~ª§UÄø{Ú<›‘G—š~µLDGë¯â%ž¬»1êÙV¾×ÈYS¦&‘&žŠ’ò迪#¿f¦úþç3Tª35j”ÅBr'´˜˜z½îã]äȉ¬ˆ*5)Ú´ëç*1&füÑ":õú&DâCÊ{Ïc{c³–&f{÷«õUÿ柧ë3¾}¢5yz~€îªÀ¦ÀÜÂÇÁ1ª·¬'Ɔº·ÿ¨åOC<5ÆÿíÄ.•Í ŽxöÖ¦)Ͻþ©ýÛ ~˜½0fö ‡XÌzÔ²F³{C¬f=j{ ¸ÿOèLÎD3ÊVçBä¡á7éý ™È†yJÜè\”(äqJ⌮Ögo™8£+µ™Ûæ1}sЩö‘F¥c {žƒšidJÆ÷=4ÒÈšpëØá ¯¹% ú¿W7þ'K þ¡$••Š,ö‡ôÅ—‰EÈr-ßû‹²×;»F˜çÏðÃ~>Fšž¤U§Yšå^_ÛÓéSs0tZi«oÉ~±†þEœz;÷«Šiç3™s3ºô4¬ÄIyˆo…•¯cÒåj¦º*3-5EQ¬H\)”*­i"­6Ÿ16®Ñû&+´7ë¯_µb‰¹v¨¦˜÷™Ò?2æ"ft„ðzg©ó”ɧJÏKE–ŽÔEXqX­r"ëj)æ%EÊnSÑ:Äð˜á$Æœ@7¡À¬cƒ9'Ü¿Æú¼µoüM‚bø9’Y Р9ºYVÅTåÞÿùAã{J牙v¸÷ªvƈҘ$€5›Ø*c1ëRÉÍ챘õ¨@iì&ãý?¡39Ï)[ ’†„ܧô&g"å+s¡rP£‘Å({Š2»Y¾d⌮Ögo˜ÅõÏB§Ø^E•Œ5îzi¥’5+kÜôÓK ]‡zVœ°ðgÚÕWÈÍ5Î\Œé_ý•†Ñ%ÚJC+ön£J}ɦ :U¥×~•ì[”»³²|¶]»ÓÂ&5éïú#\w©˜qˆ?qa> WŠÕdF9Z殺*k¡ø=“‹\{!-+'!^F!JÃb$&1.DnñÈGEà¦ÑŽYrÑ_¢š§ª@}몬þ…îÔþÕ<‡âþûÛ>Æ]ò[ªb¨ÿÛM&zLiþæÃg×\Ó>èxe²ð£Ó!Ú X IˆFM+[ªö-ÈŽ_¢ÜŸEâ4׳ò0*Tù‰–#àLCt7·‰Rã–-%jÌ×f)“Z®†·±÷\‘ºÎO¯èKáGhc+ ­—z¯žÖúu÷¢}¿Û?¤Ç#:×v®üp”ëxï%'¡=NYŠøñâ6›ê«rUgèR–v‹/M“†Ö¶SFôK–#îÕrñ©©p9dß3<ëI4Ïà@¾ª9?úÊï¢%éõ^#w<|Ví eæÓ³,UòZßVœ&¹öÿl~³1ìÛàÙîÓߟv­Ã„´ªÙÚ|ÚÂfœI´†Ø—~¯f¬zª}/Fš0Ø8]´_âö«ü> ï–§"ÂÔ]EŠ¿Î½šìS_§ðûþgìQ~wÕ­ZrЧXÆþ²£—\UvfÑO“‰Q©JÈÁKâÌÆdj_úœ¨‰æy͇zÕ­ü —¶øøn™vMòµ;Öÿí;VnDcc×z¶&Ã1¬Ä:jV^œ¤h)t(,l6&DD¹¨ŒÌÌβ؀€#Y½‚¡Ö3µ,‘¬ÞÁPëZdžÂn?Óú3‘ ò•¹Ð¹(`xMÇúBfr!žR·:% 9R‡¸£+µ™ÛæN(ÊífvùŒ_\ô*}€äQ©XÃ^ç æšY#R±†½ÏAÍ4²/á’Í-ÛÆ›„Í ¥Mb¦²?ýDïÕþä5éÕØO²Kkl|x0!è§åÌJÜš®r&«?¹/O­Ç(ª**¢¥Ê›Ç©öw>2ðâš§æ£tÿøýbToQݨ2{jßdí9§Þ²q“ÙM1ÿЫüÉÆ‹«Þ›æ0 ž~ Œüjñ2#Z+&?ï¼qŽR…5MEPì(1¡ÌA‡ ÚøQcÚ·£‘RôT0ì"Ø–ÚêKbK+YR•EX ºÑ}м{˼¿U0Ì[æK¶›ªÄ¹Šë¤ã9uWý5íÖîÈnså]¡ƒ´»¶¢h*¢u¢¯j©ÿ˜ÝT{o†òŠ¨È¶ãèð#JÌD—˜†øQ¡¹Zö=.Vªk¢¡ó:ß`Ú^Ô#ªõd½U­ÕUÔd{µ‘Ù"÷ñhé ªdìY9Ø1 t/†ô¹QO¢û-ÚÌ.ÐãEv§»v#æ£Þ>±ÎžSùÒZ‹ö*µ:Oœv¦Èìmœµõt–ƒ|9Xw:bbëÒrq¹w“ÿ‡ÒÇXz•¯œº, (kti§·ô·‰2»‹¼è«?géöj•ŸN… †ÝW=u]Ûîrï©æý¹íÝ‹j¬L:¢¬™ûÅYúò¼îãsnOz®]>B^—O—‘”†åà1!ÃnDOÜo-d;%gŸ2ÕjÏF¾¬5Õ½ß2¦D×îMòåV©'E¦Ç¨OÆHRÐ[¢s—Á7ÕNf¶6ªfÖ×bOEE‡© —ƒ}þÍŸý]uÿøy/a{+w´CÌåDÍš'Zæºx÷u÷×_O¬ÂþUøµF”ñA‰ñ¢¾,G+Þ÷+œå[ÕUuÔü€}CCH/;4´kþ#šš£’7BMF'mêïîCFXK-×Ú¹Jj#´º/µšzL&ÿ6®ò®¢'¡×p¡2 &B„Äd65Öµ.DDÔDC¦ö·>)·N%¾wÏOoÌïû,ãÑ¿¼ý€‚´¬ÞÁPëZ–HÖo`¨uŒÇ­@²Oa7éý ™È†yJÜè\”0<&ãý?¡39Ï)[ ’…Ž)CÜQ•ÚÌíó'ev³;|Æ/®z>Àò(Ô¬a¯sÐsM,‘©XÃ^ç æšYs†¬2ЫK]‘„©NŸz¬TjjBŒºªŸGk§éèóÅW¥I×)S4Ê„‹+0ÅcÚ¾ ™åEÞT6›'iU³òbìo¦wLsóÈ\£¿8¨%¶±ó¶.½Beð{å¦.ÔŠÏþ¦²¦^+Œlõ‹7¨½n.[bx(LLN’k«˜Q… 5 ‹ ŽÔFAœzê=7‘ë¼¼{ûúºúT^Ñvs obyl¸ßéª8Ó<ãùŽød³z«UkK±uÈ–ŽÉQíL¯²©K#¢"];?LHG~ËzbÆaR~ÏC‡!Rc§©ÍÔjßüXI‘ªºéĽènê¡¥Z94š¥Í²;?©©¨ö.G5uPù»mvcmvW&/ƱLOËrtûé韤ñöÖ‹w­ß§OѤmk´¨‘"Ó*R‰ªßg©»ý—ý×ñ Å—Œè1á>V-ÎcÚ­r/)ØG‚£E¥ÕÛ¡¨Ó¥fµ.E ©ôUÕC·ìo‹¹–)‹{JÔ\õSòÕ÷Žöî°\À¦wÑ:9$=‚;%8õ|9Y‰U]tnîu÷¢`>„«ü*•E©þåc¿â‡w±ñ[³÷#Zæº:Óþ&U§ìpho¸8³Œ¹bÎT¢®OhÄOEþ%úv ¬6å‡H…éýS*±oìv§‡+âÎõOôi®¹úDD~fcö)À»ÙÛ;fãQ‰‰GvŠxGó<æ}娮º««½Wþµ®{‘­j¹Î[‘/USøn¼ `åcDƒjªð†ÅÑHAz2ÿåTÈŸÓÇ«’öÐϵƒbo\ûG9äQLÕ:C;Á]ˆK!fÒ$Ô;ª“¨‘&/MXiý0û/ÕãUȆxäyY72oUzäï•úb) €k7°T:ÆcÖ¥’5›Ø*c1ëP,€ÓØMÇúBfr!žR·:%  ¸ÿOèLÎD3ÊVçBä¡G#ŠP÷ev³;|ÉÅ]¬Îß1‹ëž…O°¼Š5+kÜôÓK$jV0×¹è9¦–@‡jì­:×Ñ"Ój ×ýPc"~¨/Þsù¾‡+ZË'S±õ‡Sê0õõAŽÔý›•Í7ŽÅ%Z9Lµ§Óª²é µZ©¨ènÞsWyMþÅÛ—6}]Ê÷Ûž1ËëáŠå¨¯»Œ›Û¬U¬dgÇкn”®¹“loòäG§ô¯²øAéxù6²mÅÛ5kL©LLN’‰)éºtËfd¦bËÇn´HOV¹;Póƒ-tS]3Eq¬O“].ƒ†j̆‚^:ŒÔX‰ü8·}SQ{»Lú›…ë)?scG˜‘zïLB[¯ú¶ôï¸ç`tM©ðÛ`m ¦¸·6ªŸz'HÿæbiüD,Ñ™vÚëÕÖ2¶’‡:Ä|µbB**_úfuú…Q¡FKáEdDÊÇ"œz£wàÕ‰ŸéfLu¢'öª#hϽ.½‹?'U#MÀ†©©sâ"y‘çíئ¶ùšÜ÷_¡…Ú»¹·©Ë@Ëðoš£Çʪ¨úSþóWìâv…^Ô·µW ”iv=´É)©¸·~—DD†ÏÝ|Öõì$ÚZþŠIÕ”–v§°•½ˆ©Æ¿Ì½«qˆƒ»ìŽÂì-•1]›1UqýÕüÓö×t}¢®e]¯tÈ;z¸Ü(Q#Æd0ß+Üc—«•u‘5ÔÞ8<ÀDzt*µª„Šä¹Ð©ëª‰Ç/'¿!Chm+üKÓÒ=ç¢tQ5N‡‚ÜįD]®BÐRšº(2ïMY•Me\ŒóúÆ6Æ5Ö¥ÈÔK‘ DF¢"""&¢"oÓËöžÓ½´/x—7Dphÿ¾ò»EDiÖ¦¬ÞÁPëZ–HÖo`¨uŒÇ­@²Oa7éý ™È†yJÜè\”0<&ãý?¡39Ï)[ ’…Ž)CÜQ•ÚÌíó'ev³;|Æ/®z>Àò(Ô¬a¯sÐsM,‘©XÃ^ç æšYó"Ãt8ŒkØä¹Ír^Š™ El°#PX“¶j+d¦V÷,¤M…ËþÕ×gŠ} ¾ ˜YùU÷ìU§í=a¨Š£IqrÎÕìÜæ•«ÈF•‰ý*ôý/ãk“QÉôRYÛS²2•)WÊÏKA™—~£¡Fb9«Ø¦µ¯à.ÎÔœø´¨ñéq—ú[üXWòUoNÇv× µÖ+ˆ§*žìóñþcõV«cÒæðlzÆ­u5\éHRõI¬²ñQ®»®»Âó ¨YÊÝ%\• Dô²7]Ñ`9©õ¾ëŽËc?"?¥r'ï¿ñņhª8Â`¶ˆú‡$h‰÷»Y­KÕ{üƒ$¦`þÖUÕ4¥uZºÏ‹Ù5¹÷!žQ0V˜VÄ­Tåäáë¬9tX¯ú*ê"xšì­…Ô¹8Ïâ7§êžÓækdð[híRÃŒÉu’v®š™Ej*µºîìÔã7ÝœÁ}•³NdXjiº©16©ȹQ.Чb^fGWÏívé§Ÿ¼ÿþ ôãÿ©ˆØìЬd4‰+ f'Õ.|ätE55šŸNÕS.é·ò.äW7.Õ33Íb""4€ar¬ÞÁPëZ–HÖo`¨uŒÇ­@²Oa7éý ™È†yJÜè\”0<&ãý?¡39Ï)[ ’…Ž)CÜQ•ÚÌíó'ev³;|Æ/®z>Àò(Ô¬a¯sÐsM,‘©XÃ^ç æšYÅ3F¥Î9]5M“ŽåÕU‹®UïCÀ¶2Ë*ª­š£*®þ…ø—–›÷i)ªcï.4„hVFÍ@UXVz“ W}’PÓþ%9yIiF+%¥áAjë¤6#SÀûŠîܯÕTÏÜÒÈF³{C¬f=jY#Y½‚¡Ö3µÈ =„ܧô&g"å+s¡rPÀð›ôþ„ÌäC<¥nt.Jr8¥qFWk3·ÌœQ•ÚÌíó¾¹èTû È£R±†½ÏAÍ4²F¥c {žƒšidÍ챘õ©dfö ‡XÌzÔ 4öqþŸÐ™œˆg”­Î…ÉCÂn?Óú3‘ ò•¹Ð¹(QÈâ”=Å]¬Îß2qFWk3·Ìbúç¡Sì/"JÆ÷=4ÒÉ•Œ5îzi¥k7°T:ÆcÖ¥’5›Ø*c1ëP,€ÓØMÇúBfr!žR·:%  ¸ÿOèLÎD3ÊVçBä¡G#ŠP÷ev³;|ÉÅ]¬Îß1‹ëž…O°¼Š5+kÜôÓK$jV0×¹è9¦–@¬ÞÁPëZ–HÖo`¨uŒÇ­@²Oa7éý ™È†yJÜè\”0<&ãý?¡39Ï)[ ’…Ž)CÜQ•ÚÌíó'ev³;|Æ/®z>Àò(Ô¬a¯sÐsM,‘©XÃ^ç æšYF³{C¬f=jY#Y½‚¡Ö3µÈ =„ܧô&g"å+s¡rPÀð›ôþ„ÌäC<¥nt.Jr8¥qFWk3·ÌœQ•ÚÌíó¾¹èTû È£R±†½ÏAÍ4²F¥c {žƒšidÍ챘õ©dfö ‡XÌzÔ 4öqþŸÐ™œˆg”­Î…ÉCÂn?Óú3‘ ò•¹Ð¹(QÈâ”=Å]¬Îß2qFWk3·Ìbúç¡Sì/"JÆ÷=4ÒÉ•Œ5îzi¥k7°T:ÆcÖ¥’5›Ø*c1ëP,€ÓØMÇúBfr!žR·:%  ¸ÿOèLÎD3ÊVçBä¡G#ŠP÷ev³;|ÉÅ]¬Îß1‹ëž…O°¼Š5+kÜôÓK$jV0×¹è9¦–@¬ÞÁPëZ–HÖo`¨uŒÇ­@²Oa7éý ™È†yJÜè\”0<&ãý?¡39Ï)[ ’…Ž)CÜQ•ÚÌíó'ev³;|Æ/®z>Àò(Ô¬a¯sÐsM,‘©XÃ^ç æšYF³{C¬f=jY#Y½‚¡Ö3µÈ =„ܧô&g"å+s¡rPÀð›ôþ„ÌäC<¥nt.Jr8¥qFWk3·ÌœQ•ÚÌíó¾¹èTû ȱˆUŠ}*ÑÖ™?4ÉwD‰ÌÑÞš$öMKÓµw½´—ïRÈ7½´—ïQïm…%ûÔ²ïm…%ûÔ{Û@áI~õ,€#{Û@áI~õöÐ8R_½K ÞöÐ8R_½G½´—ïRÈ7½´—ïQïm…%ûÔ²ïm…%ûÔ{Û@áI~õ,€#{Û@áI~õöÐ8R_½K ÞöÐ8R_½G½´—ïRÈ7½´—ïQïm…%ûÔ²ïm…%ûÔ{Û@áI~õ,€#{Û@áI~õöÐ8R_½K ÞöÐ8R_½G½´—ïRÈ7½´—ïQïm…%ûÔ²ïm…%ûÔ{Û@áI~õ,€#{Û@áI~õöÐ8R_½K ÞöÐ8R_½G½´—ïRÈ7½´—ïQïm…%ûÔ²ïm…%ûÔ{Û@áI~õ,€#{Û@áI~õöÐ8R_½K ÞöÐ8R_½G½´—ïRÈ7½´—ïQïm…%ûÔ²ïm…%ûÔ{Û@áI~õ,€#{Û@áI~õ?Z+#ÈNG„í(³óc“YÍW­Ê…ÀžÂn?Óú3‘ ò•¹Ð¹(`xMÇúBfr!žR·:% 9R‡¸£+µ™ÛæN(ÊífvùŒ_\ô*}€ä@{ ¸ÿOèLÎD3ÊVçBä¡á7éý ™È†yJÜè\”(äqJâ}^QÓ’ ·]Éq@¡&£ƒé·Ås‘uÔü|;›6ò¢d&C/‹S‡áÜØøw6më“ ¹2£F¡øw6>Í›zäÈ.LƒÅ¨Ñ¨~͇sfÞ¹2 “ ñj4j‡scáÜÙ·®L‚äÈÍ›zäÈ.LƒÅ¨Ñ¨~͇sfÞ¹2 “ ñj4j‡scáÜÙ·®L‚äÈÍ›zäÈ.LƒÅ¨Ñ¨~͇sfÞ¹2 “ ñj4j‡scáÜÙ·®L‚äÈÍ›zäÈ.LƒÅ¨Ñ¨~͇sfÞ¹2 “ ñj4j‡scáÜÙ·®L‚äÈÍ›zäÈ.LƒÅ¨Ñ¨~͇sfÞ¹2 “ ñj4j‡scáÜÙ·®L‚äÈÍ›zäÈ.LƒÅ¨Ñ¨~͇sfÞ¹2 “ ñj4j‡scáÜÙ·®L‚äÈ_\'Gm7Œ$+!!ù,w Ie9Ž*,‹ (Ä*¾(üB5[1² ¥Z²ÓIah!G—ªexz²ìJ0ˆe¿6ÀÂ@V|U«ñ4º¶Dm²…%$Í›ëp \Gx }@+| =+ 1“- Ea5l)+!!ù,y )œä¨ž'AœK©’¯àÚ,¢¶ý“‰E\(lƒœ©&;5 à5D‰Ä€0è³3‚a¬0-‹µ-Ñ¡À”ŽÃƒpH4V % i p[R"| Œ‘# ™ 6iZwcw*!!ù,y )œä¨ž,K”*ù¶Ä‹¨0Ÿ aš;׋аY8b`4én¤ ¨Bb‚b»x¾,±ÁÔ¾‘ ±Ë¾ÍäÑ( Ƚ°  % >  2*Ši* /:™+$v*!!ù,u )œä¨žl[ª$á ²Jq[£Âq 3™`Q[ø5ø:Š•ðIX!0ÀrAD8 Cv«ÉÜHPfi¾äiQ”ƒAP@pC %D PQ46 Š iciNj0w „)#!!ù,y )œä¨. q¾¨ ,G ®Jr(¯J8 ‡Cðä*Ї†B´,™Ž…ê&< …Œ´Ûh± W~-¼‘`Ñ, ‡–õ¤,ì>; 8RN<, …<1T] ˜c‘—' qk$ @)#!;cups-2.2.7/doc/images/webinterface.png000664 000765 000024 00000444763 13255074424 020353 0ustar00msweetstaff000000 000000 ‰PNG  IHDR®: ÂiCCPICC Profilexí™gTÙÖ†wUuî&597ÐHÎ(AAr’$‘¦i’дMQD% #&Ç£˜DA0 8 Š˜bÄ4Lˆp«aá|ߺk~ÝûïöY«ªžóž}B_{í@-ƒ#¤ ÊÏzº°ÂÂ#XäÛ@  hnºÀyî\?<äÚ瀈†úLDkýCÐ?É2B|Cd. —0Éq"Žäl/Îdà1kDÌMäàãH5ÎÆÂà@Wœ¯P L½%âØ –y"bG˜ ügq8 8«HOr¬ˆÍEœÅMÀ×WÁœ—ÄÇy9ζq¼t.Î8'Å¥sSTÙø~„ÔÔ4ü jú¸®Ïñ¹j¢¹lÑÝá_¼ei8  kþÖ"„˨kÓÜð_*hÞò·öQaâ>…®ôx+ˉå>—øu|ü£:¹à‡p|üûŽññ{°Ûm‹¸™Â¬‰X ˆ>D È2h€èƒ X‚ Ì'p€`‡hàB"¤‚CÀj(ƒrØU° öÀ8Gá´À9¸ÝÐ ýpà)¼„wð ¾#BFQB4]ı@lGÄñE‘p$‰GR‘L$)DJ‘ d+RƒìG#HÒ‰ô"·dyŒ (JGåP5T5EmP'Ô B£ÐxT€æ …èZt ZƒÖ£'ÐV´ ½Ž>D_¢Ãè8FÃä1f„Ù`.Ø,ãa,+Æ6bÕØïXv»†=À^a_ ‚ Aƒ`L°#x‚ B!PJø•°—pœÐN¸JxHxK%Ò‰*D}¢ Ñ“Jä3ˆ+‰•ÄZâ1b±ø˜ø‘„‘äHlÒt’;)””@Ê&•ªHõ¤3¤Òé#Ë“õÈvd?r4Y@.$o&ï'Ÿ&÷‘‡)Š*ÅŒâB ¥$Sò)”½”fJå1å •AբΠúRc¨™ÔRj5õµ›:@ýLcдiv´–G«  µÑnÒÞÒ‰tuº5Ý—Î¥/¡WÒëéô»ô ƒÍp`„2øŒ"F £™ÑÇx#A’`IØKKð%Š%vK´HÜ”x/ÉÔ“t‘œ/™-Y)Ù Ù%ùL •Ò²— •J­“ª—ê”z"HkHÏ”“Î’®”>"Ý#ýZ†&£/ã!'S(S#Ó&óPfŒ©ÎœÅŒdæ2«˜MÌÛÌo²Ê²v²á²¹²U²§eïÊŽÊ©Ë9Ê-+Û-w^î©U¾\þ¨|¿ü……B…} ] o™ŠÓ×*îV¼¨øRIJÉZ)\i©R­R§ÒeYe[åhå•ÊuʽʟUÔU\U’UÊUN©›Á¶g'±·°/²?é²uƒu uéNcNs™&œV;­OÓ³ÖãémÖ»¤÷UßP?R­þYýwÚ!EM¯ 5  W6¾2Ò0 4ZmÔlôÖXÛ8Ô¸Ô¸ÕxØÄÀ$Ú¤Ò¤Ó䇩•i’éNÓëft3g³Åf‡Ìž˜«šš—˜Ÿ3ÿjan‘`±Ë⦥”¥—årËFË÷V†V\«íVýÖRÖ^Ö+¬[¬?O7Ÿž<ý·ég¨Ì™Q>£Û†dãb“oÓdóÉÖÂ6Õ¶Îö™Ž]ŒÝ»;öŠöÁööΔ˜é;³dæ¥Y¤Yn³ gµ; NËZÆóÏ:ŽÍž={Ùì6'prvZátÞ™èìé\ìÜåÂpñwÙàÒçªàæºÍõ›–Ïm¿Ûkws÷ ÷F÷Q'U]ž’žAž[=xéx%y5x}òžé]à}ÉGÒ'Äg›Ï ¯¡ï"ßF?ðóò+÷»5‡5'qΑ9#þ.þküû4Ž|Ÿë>wýÜÛ¿°áÿÒH ¬ |d”Ô,|0ø[ˆGHEÈÃPãÐÜÐKóäæÅÎ;±…µ¥lË—_cíÙj¿uo³*¿êÕ¶yÛÎo·Ø¾kcGÎŽç;Cvvì²ØU]-U½´úuMdM÷nûÝuµ*µ¥µ#{’÷ÜýÍï·–½¦{wí“Þ·bßð~Þþ[|´Ô™Õí®—¯/®ÿþ{Úï†ì>4ûбý†‡e=²èÈó£óöó>Öz|Æñƒ'Ø'¶dž,9…œÊ9õ¾1©ñQSDÓµfßæó§OŸj1o©;Ã>³ó¬òÙÊVÉÖ’6BÛ²¶‘sYçÞ·§¶uÄw ž_pþÞ…ð 7.]¼zÉÿÒ•NŸÎË—=/_ìrï:ßíÚÝ~Ååʹ?œÿ8×ãÒÓþ§ëŸ½n½¯z^í¼æsíJŸ_ïõ ë7úÃúïÞˆ¾1x“wsèVê­÷·3oÜYv»[|Oò^å}åû;°Ô=´xxjÀqàÂ#¿G}ƒƒƒ“x’û}ZöLöÙöçºÏ^ؾhòºñ2æåËW™¯Æ_—¾QxSóÖømã_nõ¾‹z7ô>óúaýGµuÃ6Ã>}zô9íóØ—5_U¿Ö}³ûvy$|äÅ÷ìQÊèÖ?šÇ|ÇîóŹ€8çâ\@œ ˆsq. ÎÄuq]@\×Äuq]@\øß­ 8BÎD.€áo4>àÃ>‰pÙ^:öŸŽOú(; “žÎ"ohÂúwžôZ&âq¦¶ `Þñ]°Ý `ÞaÞY+ÁN€ZYM=“¾ .H¹&ñy©–[Rº …“3¡ýW_©)™¸4јø›ÁOñyajøó"Žãæ;Å‚” lBçñC‚¦t~¬ÀÇ =§Xáòxn𔞛èê?żt÷Ÿë$s|D1±¾030dŠÓ³‚ܧ871Xt“gã¹ýÔã“<¼§ô¤ ïŸ{-Lóýyp…$à÷ƒ8À7¼—HÁ{9“~¾¤*ÔÑ1Lñ¬¢—Hø-ƒ—{a®i‚aRBbËwyÆ,o>×Ô˜einnÿ\YÔ÷€+ pHYs  šœ IDATxì`EÚÇÿé…½ ‘"”@äl '6N,gý;Û‰g»³Þé)l¨¨bC"ÒQ@A¤(]@ÒË÷ü÷Í$›å­i„ø lfvúüf÷Ý}ž) ¨QJ@ (% ”€PJ@ (% ”€PJ@ (% ”€PJ@ (% ”€PJ@ (% ”€PJ@ (% ”€PJ@ (% ”€PJ@ (% ”€PJ@ (% ”€PJ@ (% ”€PJ@ (% ”€PJ@ (% ”€PJ@ (% ”€PJ@ (% ê :ÖgsêzûœíÕs% ”€PJ@ (% ”€¨ÅÕ“í‰ÏõdœOÆ:ŸøžÖ(% ”€PJ@ (% ”@M8©”µYÈ®Íu«©‹IËQJ@ (% ”€PJ@ (ºC V* j›ð]™úT&mݹ̴%J@ (% ”€PJ@ (%PS*#èW&m•¶¯6ÓÔ!¸NP•IëÌKÏ•€PJ@ (% ”€PJ î¨ŒðHÚ@âV9õ%,û[®?ñü‰Såà4C% ”€PJ@ (% ”€P%üìý‰ÃìüWeðkZ¨ö§Ùîì€2pDö”ŸÓßÛ¹ 3¶)ÂÛ¹3ÌS_þ&\m% ”€PJ@ (% ”€ømð$tûãïŒãéÜîow“¸¯sÓ+ÎxÆ?`Û“@pF’ÀS^v»›eØÏÛØžÂþ¾Îíù1®7H\oùh˜PJ@ (% ”€PJ@ ÔnÖö¸v7[èíÜæÎíÎÏPóæ.Žñ Ø®*AØS>v»›µŸÓí<71þÆv—ÖéçLkÎ=ų‡«[ (% ”€PJ@ (% ~ÛìB¹!áÍÏæÎíÎùÒßS˜ §McçòqýõäoãÕm¶½Fôè)»¿ÝͬÌ9mã¶ûÛÝ&ܓ͸4Îp—¯ë¯ 3~Îs㯶PJ@ (% ”€PJ@ ü¶ 8mç9é?cbæÜ—mÏøiœyšxÆßn›´v?¿Ý•Ý¥wúÙÏnç9+N¿@ýí v¦7yÚã8Ýöòœaz®”€PJ@ (% ”€Pu—€/¡ÚÎsw~$d÷·Ç Ôß]^ô3ÆžŸ7?æÕõZù@»Àít›so6ÃÂä¨'GL‰[¬RåIK?snlO~Vd[|s®¶PJ@ (% ”€PJ@ ü6 x¶íaÆmlC‹çæ _žYr•#_f—WÅÛ2 3þtÓðÜÛ ¬Ê?¦àŠäé.­ÝÏÛø¹³í~Æ.‹›:ujÒàÁƒÏkÑ¢ÅÐðððö©¬¦QJ@ (% ”€PJ@ (%Prssw¤¤¤|%æ‹{ï½÷;)óTÐ;·ñsgÛýœnžÓE‚ëÌÏ¿F÷3z¹hδösOî`[&m§Ûœ7|øá‡Ï5jÔä°°°3óóóQTTdËBJ@ (% ”€PJ@ (% jàà`ˆ ‹‚‚‚ÕsæÌyB”+¤†GJjiFˆ7ç 6~tÛ…_»¿'·3=Ïý2]J`ww…ØÃ|¹næeÆ/¶ÿþç‰ÿ™999 W£”€PJ@ (% ”€PJ V(,,3ûõë7B*»AŽ 9ŒPO™×.øË©F{_n¦³{z»¿WwEÎLY¸7ÃpÇn»Í|ÌyxÆ ‡Š–Å[Þ¦”€PJ@ (% ”€PJ Ö ,—,{N# ›zr`ÜþÆçŒglú;ãÐÏלWÈ® Å€½qîÜô3þvÛø;m6„€èÔ®¸Ø3†¶¬á@zj*~š?û7nDAÉ ƒÐÈH´èÖ ‡Eƒ&MÐÐPH¾,Ç­±ç™•š‚ƒ’ç±-›”Å}#¤W¢£Q¯KW4•<£›4 8ÏCé)X±e¶í߄܂,!",›Ÿ†³’Ѹyº­¼z*% ”€PJ@ (% ”@­!@™V*C×(œ3œu5Jc3ܸiÓP uç¶ýãY:öœ“3ýܸí¶ÝÍ\yîï¿fÍšÕž«"[;ʾÙÙÙØ¶|¾÷]Ô«&ÍZ aë–¦#{÷â`J ²²Ž¡çï¯D‡~g#**ÊZïá)_“gꪥHýp¢Ä¢aËVˆnuŠ¥P8¶o7ÒýÇŽ¤£ÉeãФϿó\»u9>]+yÆF¡i‹fh× …E…H=|©"ûX.L‡¤Žý|æé©þꯔ€PJ@ (% ”€Pµ‡@¯^½Î”ÚìƒÂ¼¿`„“ÆéÇsÏuvü¹ñwkWvÆ€ú™¹qÛm»ÛÄ¡Ÿ¯£tÆ€·ÙÌ3¶¯\‰u¯¿Ž6õbÐ¥Yst9o8N¹àw(–5»?ù[þ7?í˳â¡c¿~Ö¬¦wg˜gê7ËpäƒWÑ¢E=´éÖÍ΀ÆýF‰b ‡V~Š”e_â—G‘*qÄÍúžã3Ïï~^ŽÙ+_C£6±8%¾%úu†~ Ñ›…E?ÆÚK°ï—ƒ˜µâ5I·öê2Àkžîê®~J@ (%P]²°øùGñCÂõ¸%¹}Y!¹;ñÊÃÿBøÈÿÃ5g‹Rú¤3…غbÞxîÌý¹¤òÎÄù½‡ãæÛ/Aá²Wðôñ˜zK2¢MÛr÷à•¿¼„ø;§ ¹M4 ӾËOÍEzTI„ÈH:ç< îÝò•¦oß{7ýó“9n{ê¸æÜ6&·rvnÆ¯Øøã:ü°bæ¦ Â«S/,+·\ÌãOÒ¾›…‡ß>Œ?>rÚG®>J@ (% N @f ˜jRاìllú·Ý¦¿‰GwÀ&PÅ sg<ùÛã2Ž?‡Q 0n°/Å@æ¡CØøÎ{èŽîÁ!hžƒ˜íÛ‘÷Í·²•CbvlG§œ\Ô—]!#%ã6ïÒѲÀ“É:”ŠÌO_GËSBÑ®S(¢š#´ðò÷o”#¤`?âšËô„Ë̃\¤HܘN]½æy8#Ÿ­š¸VÑh_õê‡"³(ÛýˆÜüldFlô‹‘FÊß2Ákžžê¯þJ@ (%P‚¾|.–·¼7Û—¸‰zëܯ‘yÆ$\m÷¯Ž*Tyž…Xñü­¸íu™œwöÍx㉑ˆÎøk¿ž…G_û/ÆLºõS¿Ç×Ë¡ðæâ²¡ˆÂ|ÿõ\ÄÜ4Y–Ã#÷à6LŸ; £ÇcD«Ãxæ?Ó1ëé¸ä±Ù¸o‰R`.šòŒK Ê7`ÙÞ£Yí˜{nüG‰†¢ïJþ|óñi26àï7>‚¯17J¿ùÌU#(% ”€¨*FÎe~tûZN`ÊõõD£Üì.Ž'“o9;PÅ@¹ÄnNX8 m§Ûø¹³ †ÆÀ2vˆËÛóß‹— ¡LÅ?#,Íe­~½ŒtDü¸AG¢Xü£vïFðÑ „ ª0‰“™Ÿ¦i>îJ™¦¯üê5(FÇžqˆ)ÿa±A-Ú¢ƒ¢lf…îEDý Ù!ë…àØ·i`š&moð˜ç7›¾FHDÚwoŠèQ)ÈHÆìÅÖŒ|YJ {$„FtÃ0„F7D´,uØrø ˜¦M‹«=æ©J@ (%P³‚ÌË-OR>ØøY¢ÀM¡Ì|ƒìUSö¸+ÙÁ8ð¬*¢pÿ×%J)XöÎw,EÁpº|èú»³p,'[#¥uA‘³çdµ9²d¿ž H—²ýê‰ÿ‡±"qÇ —ã÷½®ÄÆí;±nÛ,Q:üŒ„¢¼bô|r'nÊ=Š#Dzí9–º»_ù.ÖÝп~x3F¼%ÏîÒoŽ,|òäx,²¢!œ¢F (% ”@í"À‡=_(ÄS)@7m>µüQ0yÂ7í*1y‹1›JÛîoüœ6ãÐÏÝÁºÐŸ¶9Lzñro‚¶üŒ®T „£aXbå%%Zá[F„̈–½b­°P4—M7è'3WÒ}žQ‡7à”NõÝ´¢š7DT“¢ƒSä8€ÈØbñ«o…1ãFþÑ}f%¾²v¢m‚ì)Ð<q¢AƒDÔ+B^È!ä‡ATLˆøÅ¢Q\Ù#!ΊË4j”€PJ –wˆª!ŽsäâûOžGïÞ½KŽû±`sZi#ö,x7=õ6;KÂûbÀ€¾xô‹­ÈØ¿ÿ'iúöí‹ß?: û K“àà†Op“Éï¦ç±9ÃX-`×εK­4ÏN½õRà˜ÌºË>véi‡pDfÛåó5ÅzåpŒÚ;_CJ†ç³2àÈ‘Ã8ÜgHÒÍÛ3ÝL+Öã›é²'Ð1Åwz–{¥+SP‚ÂL©K¿èä~Ä °ýÙùųxèsàÙÙoà"d"ߦN% ”€Pµ„€;Y×ÈÀîäcSm#ÛmãöÇøûm2cÀY¸³nlnÎi³á4t»;ì ºC|-%ˆ:tÍä%­¾|m :<a¡a“f…ˆBF¦ý£°@Fø ,›忣YN2R[SYw¦^Xê·e@ãúo°èH„ðEP  -Ea^>‚£DÉ Ê†úÇ ql{º×<óóЦµ(b%O©_¨ä*õ£Í6ñ(²Žˆˆ|4m ìÍôž§»º«ŸPJ@ T‘†åÿŠWay“ýÜýV ’gCö.ü"®¶ –ßóÍ3ÿŠŸüw¾ü .ï…•o>Ž;®Ž©ï/Âyí£Q½«ß}W¿Ûÿ˜1õ~x7ß÷{ȸ:nzfn _±7?ŠÅ•]b‘»óKŒÿþðÌl¼Ø7Þq>®¾§%½p±ßkïÝÉÅŽ5Ÿ w¢gÓ\äå–—ö¹OQ °mötÓÇò/ ´Î~·/Hø°á½1èÔ¿ïþ× Ÿ‰‰÷OÃØó{ŠÂž9»7Å…ò¼– S–³\gªÂýK0æ>YªðÌ" wu58è¹PJ@ (CÀÌàc޲.™)@ÙØnøcóHd¸ýÉfÎmOkwû /ˆb 4‘8X±]gåÿ2Ìy0†IcÂØ`ºiÛÝ–_¼™°ˆpDHÌhŒa=AQ2¥Q¦ã[R¼ÌÑägƒäËÑò ÈôLYVàz‘ñ”oäZ?á %Ïúõ.ŠA%JšbQ6åÉ&/„îHÙÖ˧<£äs„ÑR¿z2Ý2<4ᢸˆ›yÊúLÉ3GŽ|Yþ.£O™‘ˆ”ý |µßSyꯔ€PUM@ž±’çÌ0ã`à¨É?›ÅÙ–BrÎϘ)J³ÿ<“ú‚c"l¿c ®|a>Yý †·ë,&>Þ.ÂìïŸDBÈ1ä7:xì#üý“ï1¦Cˆ|ƶ>†áiÔ ²ž;W‹ð.>ƒ¢±?½=.‘¥p“bDZ‹Ðí¸ír²°së>˜ªYvBœ‚öM‘‹P”%Ú6CHNa¹·rɭǰë¹YúD6Ïæ’ç©„ZI˜rÞúi5¶òì¢pßÈ–.ºµÇSSÆá¥‡&È1ÿœù Î%‰Wã®\g‚Âýx}ÔÝÀ^Æcà ýHª#4œõuFÖs% ”€P'”€]Öu*f”|‚ñeÁØÎJ{zÂÙÓxŠãÌ«ô¼¢ŠÒ J¬Óvùºþ2Ìv(ô3çv7ý|n>ßyòéÀІqމAP¬¼µÕEP ßÞ„&•™™–#TöÈÏÍ“%-¼ ÜE Z €Œ(¢£D1&‚¿(¨å"($Oj‚PA^¦ñ&Ä7‹k‰Âœcˆ ?‘"üG‡FˆnõxNA.ÂäÈ‘‘’\y¥“}ЬQ+¯yZ Ô?J@ (%PCä?èûðÓ˜qE—²'^ÁLê2™’‹‚å7\f¤¥"-³¥U¯¼ÃQH¼³f;Ž]ÒI~ó™É9h‘/Sêå·>;“Òù0$4ËÇá ñÈ;ÊÖïqñ1lßô•Ï5#æY6 e# Qòùšã„ßÜ_ðƸkðyILc úË›xlTgsZb‡£a[qNÿûŒS<Œâ»Þ,òPÀö™Še鞸­Ñ|ú—\tñ8\Öã4nÝ]ÚÄ íp:ò‹sU?~{;®^ý¦\~/þïòçðÞ²{ÐÞC™,Æ”e•aÊuØY?/ÀKô{íeL\÷¢èj‚±ßâò¾ãpïŒi¸ ƒåƒ#?=UJ@ (%P,ùVò7JÚFþµû1žQ°:æ‘H7 ÓÐÏi3¬ÂÆ_Å õÇØãÑm?˜Þ~îÎmšOÅ@t÷Óp(e? 4DPCÁiÐ@lq׫'¥I¢(Ž”Y²Ô HûC)uÚiÖËŒ§·ê)›"}‡vòƒ`™-`)8;€Kh‚D1 ÿda¥$H?Z€àVI^ól߸+6\&“N©e¢ ˆ–)—¢  ED±…'2;5ã`6NkÖËkžVBý£”€P5D D0Î:‚”ƒ)eef)}b‡Bž>è+ûД)‹S°Qdú„ÉQO$èT>Ê"§ ‘¥¹d"/«@žW¥–£¸¸:wí |…ÛF»ÒàBd¦B¶ýµa‘‰xvÛ6ü«4žËQ”›‰Ôtçºþ t:c¼(¦cÎ×cpë`÷ŸÌÏ‹‘ÍVaoÎ…è$çZæØaPMÑ[£ R¿HŒ—åvù¹8 {S(› J9Šú —à‘'¾ÅÉûdÓEái>oh"Úl—²J‡î¶0ãŒ<å<©þòl•™w²”0{ÃX³&÷?}z·t-k0qÕVJ@ (%p‚ —Õ0Š#ôS6¦qÚFà uýµ§1n{¸ÓÍ<}ÆóW1àÌÜ~9wÆ1þv›ns¥ÏÛ§b îÌ^HÙ²Û%U·¸8„ˆRœ5`>G(}ì](ÇŽôt MÄé]ˆî:Ù«Öã×ýÙh×Hò’— Î`>R¡f½°È¾¿þzX–„‚iÊ^íMw¹;5;»ÒW#eW:ui‰0YF,Käà+O˜|Q!<¸H6L*¢¼B§æÞëy|)꣔€PÕG ì™Zî÷¾tÔ[~ÍÃ;à’;píßïÅ—ÇÀ¶ØüÕL¼)•º/©µõé=S?#ðš\­sž¸$bË...Ä©ÇOÜ…‰9\3q¡Yøeû4Åx\iÙ%¹fáàÎ@ðǣѹWâ&LÇþ2“ÿ…qÉòé]™óppßÌ}ï{ þÓ$œš$Š <Œ½3÷í'3Ò°|ö+â7 I§ÄHuË–!d=„£G©1& +ߟ‚Óà´Sš"âðV|üÅ ¼Bö¢Ðoâ•Ù¹iû‘&Ûì=D¿CØ-³ceàqýÏÂWÏNÆôÜQxqòpÔ«×½zq‡¼LHfEÎÿICz¡Uî1Y–á¦f«F (% ”@Í(•q¥h󀢕”ih[5›MŸnwñœq\1ýü[Å€½ÒžŠaûÁxös»ÛˆþösŸŠ"üMFÊ·ßÊzÌ0œ"SÿCE)P,3¬ÁA²ÿ`vËÌð„B‰'³NnMaP(B:Ư{æ""®ZÆËŒ«ú®èÙ/’cÿþcØ¿G–)t-KB½æ,ÓKÏl; ë÷ŒÔ˜£ˆjŽ"™Zh]r5ÈKP¡¼À¤îÉ@zê1ôi7ZÖeÊ,‚`Ïõt[yõTJ@ (ê% ÏrŠ9§ÈZ¯^¨ìA“Ó'¾§roÇ]ã/)­Ç=/}‰+º„ãH–Ñá2/:lJÅÖ/¼õGlþ£[þH « –SÔ|–ø8îºìŒ™ù÷’C,Ë/JL^65%18v09^f#˜øj+% ”€¨A|jó0³ŒÍ§¨ñ7r2«E7 ÃÛò(ñ3n»Íx&~ÉÓÙìÙí,ÀSL{<ãvÚæõ„þöƒþæÜ¸Í'8Ãì¶=¬Ó²eË>“p¦@„þHY*·kr6üˆæññhÔ@>(~Ì:;7iHÙ¹ á]Þ®rdÂPîàÁ”æyà'X€fíë£q‹XDÇÈ´Yž},‡~Í”Ñÿt5MFxóÎ~ç™’õ‹,)øMeä£Q#ù$¢|ñ€/DzsqèP:ÎB÷æ#Ð,º­Ï<=T_½•€PJ Z„ a³&Ï“gÊÛ´üà(4i*ß´ÍI—éúRåk5!8/K– È3ªž,qË;"{p÷™íß )È×gRSŽˆrX€‘ ѤA˜|1ç KÈ–üšJ~ù©8bIݲ’-ºâbC‘‘~Lž_‘–"ã`êñK ¬ü#ûä4ˆ« Ü4¤ËWvøH®'Ëòê…"íÐä!ª~ê‹‚=ÝÕ†zdÃÂìÃòÙAYûÆV"›.u– ËLê7i‚`asôX. e)]£Æ1È=’†£¹öxe)"4AÃH¾ØM.R—|Ú·iDÉy ?{¬àˆhÚ0¼Œ¥=PÝJ@ (% N þýûÿNŠÿY>)´S1`ÜN›a&m§ÛøIPÉH³+ÏFcl§Û tþ¡Pî±Ç3B¾IgÎM#Ø3ܸÝÙô3þNÅ€ ë¼téÒOLAîlk4E>ó%_!ˆ¡ýКµ’M£KöÈÊ:Æa4JJ’‘‰bù†r6‚eI€kWhw9 AŽÐ˜<¥f©[¾FHînɆû<!+;a§ I—sel`ž!áÁØ´ï¤ålGH˜lb(]V/›@EžŠÓZŸ%ŸB,ò+O÷µW_% ”€¨ ‚åë3|0Ë”0YyV&H¾ÄËÇ£Ì6+äûBÕš`ùJNˆÌ²cþEò©ÂBg¥eÃÝ0«|y‘Íp hYXÏ^Y6WPP¶ô j[ ¹)% ”€¨½ p¡Ôî'9ø7‡;…€ ã“–n§-^¥~ÆÍ8ö'³»sÆõh<›—%1™O™Ëf?§ÛLaÂŒŸ±rÀØô/u—Ÿ’ÈlÜÎÈ¿áY½!ËBä%„&F^nrå“…™²”€Â¾1þäkòŒKH.—gt%ó Î F·}%Ï¥õ,,É3ëhàõ4mR[ (% j.c«ZS,BuÙs¬jóær6ö½e*ŸÔÍóÁsb²¨`RÏ™jˆPJ@ (“‹€]þ¥ànä^>Ü)ÿÒ6qh›8Æ/+œç4&Žëìøsãï.®=Ìrû£°'báNc*ïô·Ÿ›8þØF)@;Ø.ÌÛ3tºG†,pΰ+V×òt²Ðs% ”€PJ@ (% ”€¨U,ùVjdFà÷&#³ 7Êž; Ãiœq|¥s¥*ù¨b \b'ö†1Š©¨Óm?7iŒR ôÜ.Ô3?Æ[oaÞòö–Î[XMçé­< SJ@ (% ”€PJ@ (Bà8YWja”¬]n6çFØg˜=.ÃMÝ•6U©p×ãg·éöç°ÀUTè®4Í@ (% ”€PJ@ (% ”@Õ  L×øN™˜¥ØýxNC?“†çv…€ £¥ +VYÃÊcw?c›0Úæ`˜SsÂ0ãWõcj”€PJ@ (% ”€PJ@ œ(v×ÈÃÆ6r¯9§Mcl×Yù¿ö0»»|ô’Æ IDAT,?ϪrÆ€)’•23nc3ާ0‡6ÁXàtÆ‘©QJ@ (% ”€PJ@ (“˜€‘sÙçFƒvY˜á<§qú{š9àŠ]‰¿•Q ˜Jú*Þ4ŠñŒÛ¤uwnÂ?ØÅÀ¶mÛ°zõj¤¥¥1ÍIiâââpæ™g¢C‡~Õ_Û즀"Õ¶>¤>¼O8€%K–`ÿþýÖ'7j¼FVJ@ (% ”€¨4zò™ôV­ZA>M‡ØØØJåwèÐ!üòË/øõ×_‘ššŠÌÌLù:MUñ¦RU¬ó‰CCC­~lÒ¤ Z¶l‰¶mÛ¢qãÆm·»YvÙ׸i€Y6`ü¼•Í84&ëÌÏ¿(LAÆvW„ £mÜŒgÎí¶'{œ _Š È›6mÂ]wÝ…Ž;ZßIfÆUm±~ýúªÎÖÊ_Iغu+^|ñEK ó¥Ð6W}?×¶>´>|`,Z´üãqÚi§•~³:.Ø~ýúáý÷ß/—µ¯û´\d=QJ@ (% ”@%’’‚¥K—âÝwßÅ¥—^ŠFÜR~eòÍO?ý„øøxœ~úéh×®š7oލ¨¨€óÓ'm ¾íÚµ ”Á>ûì3tîÜ]»vEýúõÍØÈ¹LgÜNÛS˜öŸÆ©8pù–ýe<_qÊb‹+Å@¹„ŽSA‡w9å€3Œç&msMе”À×§¿ýö[Ü}÷Ý–R€úŠÏ81|æ°"ùS©1qâD<ùä“Ö€·<´ÍÕÓϵ­©@·Ür‹¥àµSXX}_ ¶´¥Þ®Q SJ@ (% ”ÀoJ8[ K—.hذ!¾ùæ >< {÷îµ#™ÏÍ7ßlÉ8‘‘‘ ³~ø¦¦æP¶¤r¦W¯^ÈÉɱs/^lÍÒåÀqëÖ­© å]v _ÔiÁÝ.‹·GÃxFA`äÉßǧ»ª,ÈSƒèo3çN?g ÷¹”àÈ‘#hß¾}µ BVÅ‚‚ª½ ¶ƒíñ5úªmfT©m}ào}8c€¡êTâT’©QJ@ (% ”€(O€ïHfêù\€/¿üÒç{½=*Ö¬YƒsÎ9C‡µF¤™Ÿ¾{Ù)Õ¬›ŠTÌp¶Ægœa-ýž?¾¥ Ü€rÀø–˜—i»M·]QÀswá€=¾;e‰ç·]•Šg¡öÆ0Ì4̸M¸ñ·Ÿ—º} ÉÔâ0Nu D¼ ª» ‚1í¡Û“1qª»>'{›Çgý^{íµ=z´…“Ó²8Ë›1|ý‰ã­¢££½eQ–••Uêvçð§>¼xÔĺ3_'>ÐÞyçpf˱cǬõXÉÉɸòÊ+­)pîÚ¨~J@ (% ”€¨K¸WßË|É2¦Í\>ðã?bРA8ï¼óÀ½ ø.®¦öà;0ìÛ‘#GZ38V®\‰˜˜—”ʸÒ*»Û“B€g<#ø›4æœáUf*ª`¥hŒí:óý×4ÆÓø»³q;÷&œ¹‚5%$û[½ÚØæO>ùýë_­&P(¿çž{ümŽ_ñióøñã­5@̘k€¸&ž~U¦àñU*¸iŒ7ÃÍK|åã-½ «)¥Ëóô¢㡇ÂÔ©SÁ)oœrE êŽ;¬=@žyæ¼õÖ[8÷ÜsMµÕVJ@ (% ”ÀIC€ï2W]u¸/âñÉ]Z®_?õÔSÝ*öá‡ZŠ*¸Ÿg$pï55O€ïÂTÜPÃ=%Ø?œIà‡q'ë?grOþÎxös¦1J†€•U Ø+àt»k„7?†ÑÛ¸­4þhÙjb””@M”ÃÆWG›¹Jnn.~ÿûß[Â1Ëñemó|`mÎÁ|çÌ™cíýà« ^•m¾í¶Û°páBk7XöÙþó<ðÀ˜1cÂÃÃýêǪ¨7$áZ$o†qü¹®ü©O~~¾·¢Ž kÚ´©åwðàÁã¼yxš1Àý1þö·¿Yí<÷ÜsÖ;“Ï矎k®¹Æºþ¸Þîø)W9Xõá{ÈëwÎii’Õ*{ßÊñ¿#Ýq݈„*¯WAÊZ¼=k†ß0 ­äWyß*)+­zÊòYùœ4ì;\ Óå"E#^~7åLùòKŽÜS¡±qˆ‹ôðø(ÈA"á)ØgùA (% ”@-%Àw˜ï¾û]t.¼ðBkÙ€·ªò]ÚŸw8~Y)wÞyçq3>ýôS¼÷Þ{åöQãÌÜ¿àºë®óVŸa…y™ÈÌâ’÷DÈ VTxˆÏ4•‰Pxd+­LEÏa}Ѹz‹ªL5}¦5Ê!C†àé§Ÿ¶f$s&cdb§ÜËdîÂìþö¬íéíþ•r{x³+ÍÓŸB}Åq†›s»ítóÜ:ü¹™ü¬J[äpðÓnË—/Ç%—\â)JaÈW9³fÍwloÑ¢EùÄžUu›9¥ÛŒÞsª Ìü1þ´ÙäCm,)”sT˜Â&7ÄëÛ·¯‰âÕ®ª6³óæÍ³F«©`&L˜€G}ÔšÍпŸýÈŠVE}^yåŸeùÇŸú°¾*x-КÎb`÷îÝÖL³Î: O<ñvî܉ 6Xšr.Ýàt+*øðz饗¬™Vá¥ò±jÌx¤¯]ãŠÌžCý«€ÃënC¹Ÿó‚m˜v ~·w F‰´¾ÕCÇU]œP>^i*îÈÙ³ãoz+®Å€tËþUS1þöqÕR–·Znûâ t<ß6Ógð‹ÈX8±ÈÄKCêcÒWe©¯z|¦ORºƒí¾Uïào¾‚is¾Âè×㣉=Ê"Û\K¦žŽš½…ÂmQÕ©”€PJà„ظq#8ÀAÁ†ïM ãtôð6RÌw&Þ)ùݽ{wkí:Nc¸–Ë3iø.Å¥™œÊÎwnΆýßÿþ‡6mÚXû˜4þÛ™XóÑûøtÝžòIâ`òmɨ®oä¥nÆÒU? õ@Q TW!å[Tmgì+~MŽ}Ç>䆓>L©Œ+ñŒ›IœnãGÛÆñ6 ÀW8óñÇ—bÀTÄÛÞ Ÿ~vcÎÍ0ã¦mŽRNOöfx³ùØÝ¥?|ø0¸&„ùù#³ã}•ÃõÔ¼AyQP ®ÈçIØžªn3Ìî¿ÿ~L›6 _}õ•5õȧŸ?m6i¨a»oºé&KÑÂÍðÈâÌ3Ï4Q<ÚUÕæ|Ü„;„þë_ÿ²Öû°Ð^xÁúŒß?þñKXeIù¼½œmüèU$Ž›vœ°Ÿ³u>¦áwx€CøbÂ"䛵=ê#ÌK^ ‹¤^’UVbƒ*}(;:ëš¹ö9K)ðø‚­˜<¤rÒöaïá0Q ÐDaÄ ›Òº#šŠÇþ ‰cžÃ7 ARɤ‚ü<`à¤;ÐxÇWX™ëiöÊ.̺=®ÙÚÉY¼ž+% ”€¨u8væÌ™nëÅ÷u_ïì|gò‡™sé)—Zr£A»ál*¸„ÁžsÉ*ßí?þøã (²ñõ«OaÑžp ¸ôFœÓµ9—…´Ô½Ø™Qú>bÊ«R;„m +X¨Ò¼O@fì3.[¦¢ÈŸ¾–*z•}KšÀ8T˜¸%ÞϽ) LZŸvù«ÏgôJE0 3633nÚÆ]ΟB‘7Ãp_»=ýÑ£G­MѨաBÀ9¾òà:!_q˜*æÎ‹fÍš¡wïÞ¥ª½žÜlOU¶™ËV¬XaäSÓÉoݧ¦¦ú£Ñ²6ÔðÕfÓæËe ä4fÌkT˜åòÛŸÔlz3UÑæÇÌš)À5W™æh¸”é~öÙg­uîœM*ÂçŸïù³Ç*U¦>ä•`q$›ÇüðàíÍpŸÖ×oëcÚë­,{÷  4¹gìy-Y²ÄZ¦Áüænff¦¥àõ÷óÏ?[ŸvIOOGƒ <^{sŽlÄë'`ü´õ<áELv"ýü::ŠàÓ£‚Nj߾†µ½ÇYÅ_Õëm ï ,}éJì}çNÜümnˆ_‹q·KüÄ«ðÁÛÏá²2 çLŒ‡›–ãÊ×L Wý÷aŽª7¯ïæ:µýÝøñ ÀCÿF+›ŸÝ¹máK¸1y¾¢çà;°`úCÒÎ%%ì[…Gûß¶BqÕôõxëºØ·ä%\unIŒÆô•/ãº>®%ö¼ù.nãüï¿`ô¸G%HÚ²IÚ’àšÓà¹ì¬ýðQŒs?Ö3ë¦#ã­ëD’w0\¿;í´1 Å—OßL˜k)äBDd\+t(BŠvr]Ó¦9¿É¼Cîmã´;çJ´“E¯?¬,ó.ç*ض ÏàììàºöÊê‰PJ@ (ZD€38*Ïw[Î,8p n½õVë½–ËFe½ûx«2ß™|½×3=e‡øøxKްçg›8SÀi €×^{Íz¯gú]»vƒ`vá”åÿéO:n/‚¼}߈RètÁ$ww½‡"*ÍÛ&ÈQVÒ¾ï¿À»sVá(½bâ1úª1èÙÜ5Ì_xh3f͘i22€ôº`,.èU’¸ð¾ž9‹~N›#¾Y†õÂÍ×ô/˼ÔuËÞyóW†i†^3ýãKFJãÔ^e?ö4~ôµ‘w͆Ùå`§¿ ¯Õ©0 3¶½A€¯° ?û%Øpô’k‚øjv¸ÖÜn| Gìt_qøÃAcl àÜë©9ÍÈbörݹ«ªÍÌ›#ÐÔ@R8} Ù·cL÷X¬™ño,Ú!Bþ¸_ð3Þ¹Gc2Q ù—+Ä÷ï<+JNwë8]1sÞ|ñ÷^V'Ñþì;ö¡ïë|å³6â–ÓVìdýŒí®üiù¾ñ+âqÆsžÛó`˜»ÃŠã 0ÃÍMcÏÔîæ, ¨4ž„s_yPØ÷Ç^&ݼYyP@ýâ‹/0HFŽÍºng\sÎöTE›M~_ýµ5õˆ'TNíæž _|±‰âÑö·Íœ¾ßªU+ë³tæxÛ¶m­µ6Iæ·X½™Ê¶™ýÂiøþóŸ­Í?(üSkzÕÕ®)WÏ=ûœ¥¬àü_þò<öØccOýY™ú˜nó#lloí·‡¹«“¿õñ¤T0ùÇÇÇg9Ûéï+wŠSG*“8€uëÖ!66¶t9ÁæÍ›-å®|¨º3¹2ðþøb,œÌë%/&ÞŽ™«v`rŸ$ôM’º'&`¸)‹6˜$Fb¿>H*NE²M|‡?šl- 8÷Ùpÿœ1øjãsè‘Ô“_zú¸b·~õ¶Œ’OBç/Ᾰ_Fé7us* ˜EV½%J¥ÄñèuçXõ¹îÙ5xsZ/Ìߘ†Naÿ¥0}Ó³‘ÀÊu.ÓaÔm–;''Ýz ­EI€ÓÊ¥”~6å?©[ûkFãþ§÷ ïe'žÁˆŒ_¶#«ÑE"Ô—4,²Ýq “‚X7‡•x ‹·âðÌ|¼|#•±³ø— _ ÚÿÙ3°üga&æ×Ýûe~@;«ý–‡Ï?i˜+›<´ò¿>cj% ”€P'š÷O¢±pMž<9 jù«àû“X´Àw4ÎX½z5FŒa*]¶É¬ÍòeÎbàùÜ_Œ³–yîΤîdÛlÓþJ"fg" ˆ ÁOË×Èh\‘ÜÝZZ|õ8|ÿè lØ•‰Ö¡ë°G|/¿ñÄs¬¡ÿ%´f#-\ƒìÎí°lÐfèeèß±•¶ÂØ>ëðÚwN¥€åíÀâŸež@ŸDĉ" ö´^_3ëwg£••qIÅj¹Å¾cò}ØOãNö¥Ÿ'Ã0{æÎsÓyŠgù;_‡½FvÚ+ow;¢•ž2މgìÒ@7+¾?€} 2¡ä Þà\ûìNøò•‡¿£çÎvP1@áð”SN±„$_å0}U´™ùpûöí¸ï¾û,å•"¬\V`FŒ×ñ§Í¥þþûï­:SñÁYü¤ N!™›¦p? ‰ÞLeÚ|÷Ýw[l|ðA«2f[»&tµÎùƒI¿_~ùÅR pVÃ9šíÉT´>F1À¯@pcŽœ{3&—aÐxº>ü©¯Ÿ}öY¹ª˜M(?úè£rþœéâÍðºpjJ9#‡Kt8;†K:¨„¢ö”kà¨0b¾üòKpÿ S¶=ŸÜCÀEçÛ”6%¶KÜ>’€¢¶t§ËëŒ"±ÌJ( mÝE&ë{3™øúé9˜òï—‹´mù2 4:–*ìQ2±k¡è.ëT&K=dò?¾EÆMƒ¹(b4zµ?>ñ.Y~0>Ùµ”@&3ÈÛÆåüëÆH[DÒº¤1ùԚȃ:TTÞʦå…9¡ëè1h¿4áÙxù¶!.f–Ê Œa¹BC[#a°øô]Œ‰ç¸Ô·M}÷ÌùûEGa­ˆLåÊ[é-YñZŸÛ§÷ÍÆu–ò£\nîO~‡{„ËšÓK×'¸§¾J@ (% j9ŒŒ Lš4Éz×™>}ºÇÚú«à¬J¾/;¿ÚÄï©à,¾KsÉ& ߯¹™3ó3Ð'N´fÐödš'œ ¬Ù"2Qù;ü3ÖôÀäâà^Ñ tlQ¶ß@¡K•°mëà4¾ „—¾sñ‹§vŽÃ¢ï²­Y|=kݪìyï(¦\¡œÃ}`ÕñïU6o)ëd2ì;ö¡ïë–|ëGÛÌËv ñâ€iŒÛ¢Ê¢˜wè2ŸšuÙmJ6L˜ñ÷h{¦ì (4µlÙÒÙ¦PÌuÏöÎó•olâ˜2)—arË©à¬Ûõë×cÙ²exþùçñꫯZï·œ m ¿ÆY ”sh8 Ã÷_o&:šBûQ,úf’ãK£†„ÊÆÔáeÖ€DÉÛ}\¨j-À.ùŒá)í›@Ö¸Ò¸^{Å]ˆÝ{Ó¬´LÍ·¢”}ò®múŠ\À0W’rEpL<Ú „ëû7/t2°ï؇~ʸæ0IxNcl×Y ÿ=þ ß}©d qí¥13­µÇjo=_…& ƒÜ7:7ñˆ/-ßWz n¾â˜Ì˜/óg9,å²|_éî­ö0_y±¼µk×Z#·RÍÁ‘]®ƒç讯:ùÓfŽxó\kÅøæà97á  ·Ö¬{«¯½]ÞÜÞò â‡kôùÌxT°.S¦L±´¦ô£²†3×[^Þê`s—‡Y>ÂY dÀ8œVïî`ã0®Iç.O{™ÞÜìÏ@Sf i×ÝCŽ3r¨hàw\¹á ;ÃY¬?—økdËPj]¿?t­O‹mÑYüç`þòmÈŽ.Ã831kÕ.ñ;ˆß|F¼ïÀïe¶JÁ>|ñ·؜fâûVÍÂúÁ×àtçd–Ìxú«D\Ò‡ÓßÜ™Hô?Eö÷¤¬‚‚4,yõ ©M"ú'4El·Á²sûSX»/ iû6cÕû¬Œ,Ù[æ=düï¼IµEºÌÄx/9»dÙÒZ,ˆE÷^½Ëgì`XžI,†Ëðèøp³<¼¥VË>›!ö`œjñÉÁ¶µ?`_&ù‰âä—¬M›EG•–‘“Æß™½Ò"A³c;öÉeª…,{Mv]øC?Õ¥ÙªC (% ”À !Àý¸øîøá‡‚³.9¸ÄƒnnJÈ0_{vñÉÛ»› £PÉ%îÌ-·Ü‚n¸ÁàâžiT Pøç@ ^X§©S§Z32Ý¥wçÒª7†¶‘‘ú¥oâ¯7#3¯PÞ³‘žI1]ä*‘âúvÝÁR,Ù|@Â2±aÞ—HÿNm"ªyGÙ¡à(æ|¾™òÎ}hëR,Þ#~ßDD…Ÿ‚^’÷Žù¯á#Q |ôêÃøôgÉÖ5†R¾:Qñ âØžù3±jÇyGÏÆ[å}C4'‘aß±Mz²¥IÇɺnüüm¹3/oéüŠK¥Nu{ìn–ç<÷X‚õe(Lb(Rh¤Oá}ëÖ­–ç-Þü¾Ê¡–¯cÇŽVÞTP8­ˆ©ª6sS>Öƒí5†uzæ™g,a™ŸFñf|µ™³¸™ãùçŸo}†Î™×ÙgŸ;wZJ‰}ûöY›:ã˜óªh3|¹áÝË/¿lµ‚*—Kp—Pö78éç«Y§ŠÖÇLëâ2jkY–§5õÜw‚õº÷Þ{K7äãT|wÆŸúPhÄP1@h:wŠ.àƒ‹×¿éûÏþÓÚg‚ùsC~Î’³J¨Dò4S…ðËI¦Es„ë)Òuøm2 =½š=ƒÇW–}záÅ«€IÉqOâ³ÈXw›Ä¦;ãú¶›f°ìäÿkÿ€£û1yÜ\¿& qü*A–ÏxWݰõ8Aõà÷s°>ñfô¤2½œ±¾dyC«!÷cñ‹òi!)k¼'/.ž‹!ÖäƒxaÓdv•åsî±BË {Äãª;c̸Dk‚;š‚ÄûïAë!ͰïYFs© ¬ÖW \.ë/…úÆ$$+õ¼•“ç÷ÂùVL!0åŒ.™êÃÓÊ3i5â!Ì}hÎïÚ¨$õUX°óO°š$ÊŒÏÆ'âöõ%AbM™±¦Ü2‚o]Ž^·åŠðÕ´~F6;ÍXˆ>ì–œxEô ÷¾Ü®,u)% ”€¨Å¸7ßYø¹Â3fX‡½ºœ!ÉA0oÆ(¼Åa÷à`ß¹i¶ÓpIÎòäû?wMÙœ¡k”\>lf8ó(Žþ×ß|ðæ/š‰§•…†ÇÇY3&c{^†K÷¿…ÿÎ|K­àpô¹tz6äI®7¯ÎøO­ûÔ m~ú¸²¿kP¥ÿu·¢`æX¾hâNŠ š¯Á§?Pá`ö·Òp BŸq·âèŒ×ñÅ›Ïâ‹ß>×LF«Ø²Á‡ïZi±Ï¸;—ûó¾îg#œ²²ýœnß²ŸÙ£U§b€åØa/ׄy ·âûØAÏY8Ópd“7WçÎ-ÒÇ~îKHf\æCA¼"õ±—UUmæ&pSÇ}µ™;Ñ:ÔR°¸ksûöíѯ_?« ¼iÌÆ(îêTm¦ÐÏ>å>ìW®õ¡¡Â/µªfß]ì~­ ưä `ÜöãP™ÁÛñU†*àÿç?ÿ±Šd?bx]¸3|0Q‹ýÊ+¯€_¾àòö÷¹à48>`9kÀ,/(ŸG,'®EM IDAT&®³ÿÆÉùÂbL,‰Új>ÊÏF¦Ì\ŠuÍEŸøV1®}AT Q‘%Âý^yBÊçù^Š0™i~áb’°Þ®dÌÙY-€;w ªX1íQŒ¾s“¥f°×±Ç¤9(žd|"qÎÄ—í?‘-ú˜0ùÄOiY%6a>*–™Rá°°(™©âªÈeO/DöCÒ×Q®ºåÜ!3JÒ—eŽ?B±i¼ä×ã:9¿Î²#{à-)÷e)7_¾:kȃø8†qå™H‹GÜ·“"SÚÔ¨US›Ò$·­ÉÆÕòûÆ­9¢5Eœ«L¥tÛBS?ãÆ¤}û™Ì0xÿu½Ç¸‰¡^J@ (% j.!àÒ`¾×˜ý:`äÈ‘Ö{¯óÉ×;óà;,,W­Z~ Ñ“q ýíÚµ³fÇåÀ›o¾i}ËSúòþ ÑÌ$ôÍÎÄ‘,š†#Bf"D•,àÜÿî#®G×!Ù  BidÔ°ã@ÜýÀÙò^`ÚÒÉ„¼h ¼rZfâ‹çæËgÂâ-ç!ñ#ðÀ#ʪÒÉ×ÜsäƒCªá²7\é …²XµÖÅ>cß±}wÓ(¾dó°¿Û£y ³Ç«»ì­±BÉNäN¢0˜™3Üçç y³¹Jý­ÓrZŽ/CŸ¯r8]¿²†íñõRÙ6û[G_mNLL´¦2QKiÿfªÉŸ£áf7TnBç‰sUµùÆo´nJS¾;›3&<Ê›øUU¶ßÓZzS7‘ñu]ùSæç+S¦±9›£"†×…;Ãeœ­Aí:¿Aí)eü±œ0a‚µßE\ÜqÃðî²rï)‚nù È%}óÓ¿’9ì#,m´¯r ìÅéwÌÀ9­œ?òðk;· ïX¾ g¡‘±°UÁ+Ôí¦›‘\´Wb" 2~ØžËóuÈí®Ý0t+£Ì¥iãDP‘.¤ŽrÊ£¬¯E8ËÓs% ”€Pµ™6xTÄð‰ïq¾ g÷Rè߸q£µšóÓÞÒåÀÛo¿›nºÉ[T·a!2@ÑØËà<žƒÃeÖëñÙîþòÌX—‡8YÂ|L^òdáÁ—÷ö*ðS!p²™5kÖX}Öµk×r3´½´ã8Y·$®‘‡‹3¾—¬+ä|+®lŽî*ïôsž›2?mãöëf¢vÆ“°b2¯¬M_E—ø[¶®ýù© m>vì˜Û%¦½äåKYR•mö4CÂÔÇ»*ëÃÏ"úcì³ œñ©*Õ}°~žf ˜º6 (ÕJÔ¤J@ (%pÒà,VŽ"ûó^ÏÆñ½™K’çÎk½k%%%ùÝf*¸d³¶˜øónÂ5 {~,… СsG44«jK%+Yî対¢R€}ço?—k—wKå^G•èoW8ÏÝŸ#ÿO«Z1àÉU“;ÍS°rN­©¢ìK³© ŧø³=¾Œ¶Ù¡Š‡Wep‡ÒÊëÓªU+pI€s7ÛÊ–ï.½/Å€»45áÛªƒ¬xS£”€PJ@ (O`åÊ•Öè¿¿5¡pÉÙ—œ°`ÁpÀ‹Ë2ØíÞߢª=^HTCÄ'ø–iª½"ÕP?ëÍeÂ6l°úŠ›Ÿ{š] ÅWk–µ^1àKûÒ·o_ë³|܃;îW׈)ó5£·UÝ#Ì—7ÿÂ… Áöh›'\Ýý\Ûú ÐúpH®ßç·l¹BuÝì™Úª8þªQ% ”€PJ@ Ô,.£¤R`Þ¼yÖ{7¤ö×0.•ÜÔ™ƒCÜÔ™3âeY&A¹_Q55G€3r¹á:ûƒŸ¼çL~¦’}DeN ý[sµ®XIž¦.˜ÜL¸;›~΃‹yÐ߸í6÷’๱©˜à9mú™Ãøw•@_†›·±³ø}OjpNVCm 7êkܸ±ÏµâÚæêéçÚÖÔ‡³H¸´ƒ›ãìÞ½Û§r©2÷I=*“\Ó*% ”€PJ Îˆˆˆ°¾À¯Rq®ŠlHÇwý˜˜kP’ò ôôtk“çꨬ³RɆq°}Á µùn΃~Üp;Ðý½äK7Ju6ÉQ$?ÒÀýÍÁsãO›þv›nûÁeæœnw‡x—.G0ˌͰrÆüåñ½]Ûú€3gx¨QJ@ (% ”€8ù På‘‘‘qò7F[Pë p4_PJ@ (% ”€PJ@ (%ð%Pëg øÚˆï7ÚoÚl% ”€PJ@ (% ”€PUB@g T FÍD (% ”€PJ@ (% ”ÀÉIÀl*è©ö&ÜM?ça6¤¿qÛm³é ±}n>(3|n>è©òꯔ€PJ@ (% ”€PJàD#kõæƒ:càD_!Z¾PJ@ (% ”€PJ@ (H@'¾­”€PJ@ (% ”€PJàDPÅÀ‰î-_ (% ”€PJ@ (% ”À $ Š_‹VJ@ (% ”€PJ@ (%p¢ ¨bàD÷€–¯”€PJ@ (% ”€PJàPÅÀ „¯E+% ”€PJ@ (% ”€8ÑT1p¢{@ËWJ@ (% ”€PJ@ (%p ¨bàÂ×¢•€PJ@ (% ”€PJ@ œh¡'ºUQ~VvŠ‹‹QTTdÙAªŠlOš<~úé'„‡‡Ÿ4õÕŠz&——‡.]ºxŽ !¿ [¶lÑë ö´ökìTMÒ>÷è$ Ö~òóò-Å;è·f"""~kM®“í¥b ;;»N¶M½ãu²ÄÖ~=Yzªêê©}^u,OdNÚ'’~õ–­}[½|ëjî¦b ,< aaau¢™uB1››‹‚üDGG#22B”u¢oünÄ/¿üU ø«VGÌÌÌDƒ juµr5C@¯ƒšá\Ó¥h¿Ö4ñ_žöù‰ïƒª¨öcUP¬yhßÖÎ~©õµ’ ê¹9¹ÈÊʲf­ÇÔ‹©õUöUÁ:¡àlvFxD¸t D{ã«Ùu/\—Ô½>Õ)% ”€PJ@ (%P ÈH4f9kàè±£µ°‚W©N(d‰BCCQTèÚc€K ~k&$$ä·Öä:Û^.'P£ô:¨›×€ökÝìWo­Ò>÷Fçä Ó~}ú U«VuäÑf(% ”€PJ@ (% ”@9TÔ€ìY®Ìj<©3ŠW¿”¨nª ¿uúÑG!%%Åm iiià–.]о}ûbôèѨ©MuÆ€Û.QO% ”€PJ@ (%Pe>Œï¿ÿ»víÂÑ£G­O¦›oÙWY!šQµàÒsç nÏž=ѨQ£ÀË”=jdT:ðšU(EQ p‘‡¥¨&ÝÀòåËñßÿþ·r§NйsgëÓrœ-Ào R)ðÝwß!''+W®Äþýû1qâÄQ¨b ´kÔ¡”€PJ@ (% ª”¿‚¶`Áë}¿M›68ãŒ3k½ç«b JQWkfF1ÀM'ù™ð_ýÕ’ñÚ¶m‹äädk¸?`>ÜÞŽÖSgìËTátv8nÎ0JîþÅW ))é¸k€K „>ø[·nÅÎ;1kÖ,+þq‘«ØCU T³SJ@ (% ”€PB€ä'Ÿ|‚&Mš`øðá–]¯^=Kˆ¤R@ÍÉG€³¨ìá`ojjª%ïQ†»ð -…Ϲ´20m„PŸ)j}„:£0_#°ú¨Š°SØÎÍ͵„{fÉÿøJK ò   ÀúT=ùƒ1iÒ$<ùä“–êÛo¿Å¹çž[í{¨b ´KÔQ©`ɯM129H¯I~²2ÓU Ÿè‘ÏÃF„G#:¢ä3©…ûñõœ¯QÐa ’OoñÛ€QË[™)KÛ¤«ä[¾ˆ‹¸¶y©ëðé‚Tô»8-ÂN~‚b˲ϱ± F즿iÕÙ¼÷?^,÷þ¹HNÔ{¿:QkÞ'Ž…Ç/¿ü;vD×®]ѰaÃÒY¬•¾ƒŸ¸¾©LÉ”á¸ä;** õë×·–lÚ´Éêk.çŒpoÆRpóû:dêŽb€ËÈ”*œ5À©E¢:t(ºté‚7"##üœE@­Óé§ŸŽÈÈHëbĈ˜>}º•nÉ’%¸üòË­8Õ¥U¬?JYøò™± /N>öWÓí_>ƒ7Ÿ¹øiþ",Í-ÀPU Ø.ßÎ] þç>ßa7Oň>A¹éX´t•Üû§«bÀ7ÞJÆàýñ0æí-»¹#ê·FÏA#0ÚËu^3÷n%›VË“¯X±\:УGK)*Êqî+¶jÕ*üðÃÖ^Ü|œágu7n\Ë[¤Õ##;QŽ£üÆÁ]ö!e:ö9v½™Ò™Fõù$ «3s_¨¯)’Ž)®BÍ ?Gøã?Z]É5D\*@­!— pÿ€¬¬,lÛ¶ Ü„„û ð‡Âî?пKYЬY3ËÛ\€&ÎoÁ.È“VæYãVå›ë (ï§gUF`תE°d¸ƒ‹°v¡Ï|CeT¡(ÿõ¿Ê"p$ÒÏÑÈÜÔõ˜>m6¶eU¶ô\l\ð>¦Ï^‹²×«ÊæYwÓgmù>çR t6wMùn¾~%Å‹Pð+ryyÉO»1»r½îBª%-ËÚö…ô•K)Ðç’ ˜rïŸpí°îÀÁ xãêTß¿¥M agF ¦»4ŸÏŒÜüÒj”:¬úg¨9¿iþU¯ÖÆ*Èr1Î.ðóZ‘‡†…º¦/”ZK°z+–ŸÇ§VS 6 º·FnÆ^¬úøU¼³Ê5€U5¥ë3ÒÎ1==ÇŽ³f 4hÐÀz×çWɸùìÙ³-™ÀÈ<§¿P´çã¯;W63]„½?®ÇÎ47¿·þVÖW¼¢ lþþGTg¾ªào8e4ÊqìcÎ aŸ³ï½*80]:8í5öIX&ÉžÕõRI«S‚ªr²€ucoß¾Ý*´}ûö––7·n25Qf DGG£C‡àæ\gÄ ^Tœ– ì’K.±.*óe‚êT TgÞ^¨û BXÉì ÖÏ>‘ÜYþö9–‹Ò&OÄØðRIVÎå}&¼Ì£4*…®Àš|ËÕ¢¦NR±tñÞÒÂ-Þ‚c»•ž—9 !­/21¼ÌÛ«PfÆÈE_ÆOÊ\˜™äLÝáBYBs¡›Ôž¼¢‘|ë“HöìðMß… [–¢á/#Ñ¡‹÷ú:’wºMF¸6 ¸¸l¯Àë\¶uÐCfuÌ^dµ«û%Âøþ%S…›´@‡nI¸ð ¹.xú/¯U£ã®É*ËùdÍ( ‹?!u1}ÆMÁؤ&–»Éˆñ¸+jžúx ÞŸµgNèSv[1üûS¹ûC~/¬ŸÒl…,_ºù-ò˜¹ °ÒÈOšŒ©©"%#z_VOÙX÷Gýž)³R#0ƒÖÎÀÃ3Öb÷¾C’ÂuÏ;“VäÞu÷Œ,Ë×ÿû¹,ÍÉëâ` ßõãââJ§–s¦7G¯^½¬pr–1ÃZ´hßýîw5:ÿV|)–~D ¿Lgo]¹×/uÈÇî7£°~'´óñË›¿ŸÎ^†–çŽF/3óLüæÌ^$©c[OuÌ?‚õ?ýˆ¾]OCœ—šÔ– Ê$\>À¾fŸ³ïÙ¿žLÒ”6±)DaTdmÿPUzN¢"€†;UÒp ¿P@¥÷à†¼p(ü·jÕÊš=ÀÙܰ°uëÖ–2ÓSø ³™¡•Qÿ©­ŠW3E àP -A™b ßÌ~ï/ÛáJÑç»ÉÝJt¹»ðúãÓ€³F£sÆ2ÌúÆ%øð×ûÏ<= %eDÓ³0ácÑ®d$G™ßxáMüd ŸG`Ð5Äu|dî¶ÕX+/áñ2Ã%OP{W-ÅÞK»¡µíÆØµì}¼4K¦’Y|ô@¶öÜ] ðØë»1æº>XõÒ«Ø`E쎻¦^ƒœEoâ…Ï7Xý?èZÜx¡k_‚`o›ƒy[rÑgƒ¸´Ù/xó¥°á`IF2•zÂÄkÐ%.»¼ŒE–÷ <ö·@Ëd)?¡Žú³°ýë¿Àëo̳®-žw4W]˜T²ìÁUÿ%ágcLl¼-ñ˜mý.#qËõÉhbãÍ´'£)Üÿ-±ßdIÊåF)`oHˆí¢±û¦áë÷fà˵;¬kL¨`еq¡¹÷r÷â‹7Þ’þbæbÌ’fç-ŒÁ¼§Ÿ£dYƒÜÓ×Þæ_¾,§›Âýßa±ÕWÃpA‰RÀ4·õÀ1Húòa¬Ý² ;sû \÷M½¡cÐ.e!Þ_êúÝMu3Æ ì`’•³¿¿]É÷®šçß_êºêË}x—܇±UqsÈ56ã%|lý°­ûŒÅ¤±}<,I*»WG¶?€7ä·¦~ü L¼éB´¨Šê¸š['ÿzÿt59"{LŸopýæv9ã“»”ðàô‡xûs3K+#o»ÉæA]'©Ug£òaæsÄÅw•_×µ®Ç·¼'¹{^ùM@ÏfOÏH>µ=ßÏæëámöcÆÇkQ¿Ï<0¶ýIß÷üê…Dò•Ó̹|€¦wïÞÖÒÊM›6µZvîÜi…ŸþùÖÞdVD?þdìÞ J&H¾x‡ä"å×4Äú×ýÈÖkK7ìŸ(Èk®°0Ài Á2€d¹ôZ›ÚÈ>f_s¶·§ÏÓ›ššYêf°ÓøŸÌ¶WÃIÐBù"%5rHe«h„} ‰Y/Ä †ë‡høãÀ©&TPa@åµLTПû ðàJuÖ«ö™’[%7ûAó(“—°C–¤É>ò_(Óþ†Y[ør7 #B±jö,Ì}í1d^ÿ .î+ñr‘&iöÎ_Fz9nv,^Šù’n¾4¼~—>Po–®ý³VöÅ]É퀬-xá±7±W„ŽK®=SÒ~ˆEoþ¦<þuAjóÐá?.^L"2úRûolØ‚o¶dº8JHÚú÷ñ_Œ[÷Á¸¡í°uñ,Z°–šÂ‚,¹¦7àÕç6 ¢uµIâUðÔäÉVœî!Ë"lYô~”ˆ$颂‚tdäîGNI.&iO‰AùÂðíÒ xæ ô¼+Y…8¼û Ó%WFæ¾*JtÁ¨qg"4eRb#]¹E4E×.M±JÉÖÝ S“F¨g½ÌçÈu‘½Ÿ¿O ‡,÷i„ÆáÈMÙ‚Ÿs[bäØ “¶ïÏÛ€i3Vâ‰[û£^ËŽR¶¬M˜Ô ¡õ[Z#¨Îú“Ó?ÞN¢T;ªŽ~÷>_$£32csêø$I#õ?p~ŒÖ N©W×ü-RÇÏñɺ$ŒO:ôã¥]îÖ‘›îzÉïèAàr›L.†¬Y{=G^‚Žq9XþÉçXôÆ;èöÈ]è Âÿ®¯\J¤‘cÑ5æ(¶î E#ñ§ñÆ{úùGß(O¿ñÒ{ÚkZWöuöonúaKøîrv7}‡3Ïnе‹öbOj.:4qÝ7f½ŠUò[‘4h¬Xе€3ûþ]JúÂËyø¾¿å·FF3Ÿz­ÜB#1òô||>c¦=ú1|äbïûžÈ3ã×Ô´rÏŒTó̰*ÅgÆÃIè3jZg¬Ã¬EïãÅú-p×ùí?ΔݫoȽڥÏ4LYU;á¯6ÂúWhÅqÅÔAß¿ƒ®eD{W}ŒÏÑäy°C®¥ ŸOÃŒ¦÷b\b ÷¯Æ«¢¨ß}.뇔Í[ªÚ˜Š_.a¥×뮵«-…tSkƆûçaL‡äÙìééý~6÷Øç è’Ô§t”·¾:Ð÷Aމ‰±”ì3¾ãsù0 ÷ã@!g óHLLÄÌ™3­pÊì+–ŸÃ©wÈÊ.Bãú"˜¶6›yæcçšEøf[š„‡ óÙç¡gÛBÒd†ÁBü’éRÅu8 ɽÚ#8? ?_‡æÂÿÇw¢mÿ qvË|¬_²›¸¦#Dwè z5±®£¼ÌXñéwÖL…èVg`Ø€NEù›ØVþÎØ¹ó¾Ùf½ÏÅu>ÃzºTÉÉerñã¼y8Ö6Ge™6W¶E7? ƒÎ9 1U$·™’*kS¦bŸûÚ|ДSº×€ñ8‰m[ŸÄ­ªS)`™â*Ä9c€³Œ¡€Ï‹ÅlRÁÙ¼é©Uâ&„T$p_înÉõ)üñhÔ¨‘¿º•µ[1°/<*OŠãLS‹gѾU–R ¢Ç8Ü}¹kÊÎi -ñ¯)ÏcéÇË1â4Ù˜N¸[³•›öÁÝw]nM­ÚU°Ï~µ]FÞ‚‰C;ˆ*s¶¬}™òI»V|Î+¸|òDô¡Œ–ƒíS^Â’•Û0àÂ.ÇÕ¦¶xTêZÉÛŠ…Þï8 ñEyÈë6°A6áš¿ÃâûÊC K?a7"wÊH·ÇéÚ)mߟŠw ‡×¸øåȦ]4-û\Iv—t™Èüþq¬ÉmŒ‹þx Îl޼ŽÙxèõUغ3];ÆJ¦]N6²%“Gl׸mÜ™¸Ÿ‡ÐMd´>éRޤ€µ€Yö È—óì¼_±›y´l‰rÿDÉAcñ¨‘ƒN¡{‘Ì„‚¡ñ²¢½ˆiò\ŠˆØDÜücÑÊzN‰’°ÞÜçÒaH‘²VÊMÝ‹C,7þlœÓxæçuÂÙP”kã‹Ä¿|ý³±ˆœÐo½m™oüg<‚O7|Œµ)]Ñ=Vê_¢<ïuÙqqÏær vÁÖ^Å®­{ݵD©!I+b*uT¤@7ir ]×A³f±ÞWeÝk±¤/.È-‰w nz¸´Ð`ïwxaQ2ŽIŸ ³Œ ‚‹Å©Ýѵ¡\ƒ‰rÊk@,oa¿|ý‰uO_ôÇ«‘$é’Úý[z_/Ùˆ¤½¦•¬k…©®~5}Õ°Q˜Û¾*,p=îNGvLÉ}ÑWÝqD±w¤Iþùázü´ë0Ni%÷gË#·ô~&¾@îo¹‡dÔ}ð‡+úYŠ€k/Úƒ~´ßï†3—©tuNŽk]m®§gFcäI}ަ,µž-É,”³øòÙ‡{|åZ¤ lfý¶Xës‹Íoš¹W[â²?Þˆžòû DìóÿÏÞ™ÀWUœÿ‡dEƒ,²Š •(!²X@I@‚7„ ¶j[–¶JÃ_±‚CUˆmm"b¨PC[¢Ò`K ÃD/D$²$$Ü÷yæÜsï¹ûÍM7É3ùœœsfŸïÌ™{æ93Ïüë¾þ ûÎôE÷P- ñ¿¡ê¼!òz¡ZëÔª.ÒóXQå¹ 6·¥ˆ¡øÝäá Ç’¤5?BròûØñÉŒºi8é¸Ðfø™ÚÜ@¿7ÝÔowž‰ ëÊçW>öcýæ`”îÝŠ¼¢Ó”³Œ¾+•EN+Npîkñì:ý<ãáy¦74Õt‚1üg¿ÃÐnÚõ}Qã¨{wuËï“úa&É~VDxèÐ!5;xðàÁl­<[˜ »ó ??ï¾û®²3þûÙÏ~¦”ÜíÚßÜáE9غv #c0àŽhMæ²›I(„acÅ5'v" ðÅ IDAT!kÓf„w…Žôfv}ô ôìŒKG¾ÀÇ[÷⻘Ht¹T…óJñUaÝ3×]Œ?Fá©ëÐÿžaèÒªUÚTžôW’¿‘±Ã0òjšÉ·)'.Üäti÷ؿ܈s4㋆:dΓ0ÚÜ—b- bîy=Z@vÖçØÕµ3nom,!¿žÇáüC¸mÐ=èx 9wbsAgŒºßFýÇëÜ]Û"¡¿ûPi2¦Éè TZ¨*ªŸú1Jút+üâ‹/Ô¶, àí-ØíY›å7ß|£f ”””¨e£G®ŸÌxˆÅ_*Û!}1ã¹pµÖ“ %-Lß¿:ïÓ;#çûâmFEÿA·¨{-L8n¢/؇ÊOÑ ³®6?uzöÃB´'µ ðgî{îê®=”æø9N>jxtJæÒbýºÒþ][QcMÇ`ß.Oççâ;*HÄÚà,鼨iyüŸ.ÞŠÑ£å1|Íï×ó˳Õ\Ûš¤ÏJòbµãÛˆ,`€0ò‚ ^ˆQ/Õ4VÊÉ”£›aHø ب_uå´ã º¢ƒ±º`#þøüVD…ûï¹mÌ¿;ÍBºª–ð‹½Õ´ïÝÏ,ÐíjPR¸¹y{pøÄœã2Óœ<-Ým7úoÍ‘Î|¾x&8ævM( ¬[â¶;zâ“¢<:^N‚s)Âc$ ؘ۠mî4§Æü¿BIMj7rª8^„Ü/rñÕ7ßÒÖ­åTüëÍüi%l·î …˜XõÚóØÐ=£FÝævåέšÆwlVS¸ÕÚ¥úV¡ 0Ü…5xoÒ—Y¶m9þñrá]»v©{.÷7Þ¨Âð ,Y²„­•ámÏYó½ƒ lÁ´^ÿèW;ð9)\{ø=8å‡iš"ÕõÞÍŸQó5éxà®.¸5nèT…ý»òPVqNEG2 5kšßmbGÜ.üÞvé4ŽP°¶·õ!]Úï¸RÎJÃz~º®ÏHô¢þ¿ªRͦT¹øÖ±+n좚ZKÒ‰pêÔ·Êçé#%ê|$ÿ8N®Üõ‡ñÞÆÚÏŠ56J/üÎ{p›RœÐ=¯Û‰]e<‹Á¿œa5Ž0ÿY `{Ÿy¤q‰µß7ãäU¡q–Œ§q´ Yô¿Þ ÀÓƒtÃKØðÔ^2Àúx Ξ=«„7Æ'È.°Û[—O„!ÍJ9ª't‰UZ']y•«˜ƒZã:úÕ^a5Oí[ëO¡UÄ=Ãn¹†~wÍ…tr9VóaÛéÁô³«ì4[ûZôƒÆ¶dåeÔuÃäÿû5Í\ËÆ†Ü"l\õö›ˆ™4ËGŒH=kÖHá¾1çuaô¡]»|v½Z:—ϳþÀÛnuÏ Y8 ¾ïÓ§Ž?Ž;v¨ÝÉt7ýÌ:xÛrÖpÏBðÌ>³°Àµ F—ÛîÄ£7þÙoÅ×ßž…úìÐêGèÝ…ïÝq }”a]ŽåÑ샿­?nîBËŠ Ñ#H›@v¤hšþ;ÓµÊö¡­´÷qC`§—ì÷ú¢Ðµ³9âK!ؽó[³_v C$méÎÝîÝ["ì:ÇxÙWP uݬýÕpó q·†?J»õÐøkÕ/øsñTÅÔãV…\V^ ›£GªK^oÂÊFtútÅ„lÇ[êæ³Ï>Ã'Ÿ|¢´“Ž1Bí‘©»ÉÙ@ÀüÜ}ÍŠÈnÑÅ‹e(9A~®í€ÖìîË››¹ïê|Óéáá6d§±^ÖœÞ-§IîJÓÿNºjÔ>rTîò¯–ö Š>ûåýb•fØÓ4H`-h1¾>H­ïÝÊöÊü B÷#ÕñeÆ<ÜE)';F<÷Í©øÈ!¡@XìxÌ|¨ù¬Á©l XÇ¥ææd~iuWèuèNÉœ>VJ2u+šƒ{öÑ]0®oËb.C„Îâhv¡7ÄÐbŠ-¤`5ÐZ@šbnkøgÞþÙºˆ¼œ\²Æ¯g=©^jŽ£¥Ðà5¬ëíxtòíU´ÉK·`{þ7$Ð .ÝÌ¿X£úáµ¾ƒ#µ5.ÃÚzkrw¡Ýú!†ê*?ÿ¿ØuoOÜ®ætkŬ)ÙŠÿò;cûÞèÂýåhº¡Mim)DôwÔë÷ –´ ¡2ô²|M·õÕhÂ’ëmvWñ5®&Ϋ~P/¹áá¾x\›-ÑÖ*¨¡ö0øÁ‰|ß,}1 E» PN‚í7HCÎÞhè—wí•Ëðéñy®põF^÷üÑ?òÇBþ Å‚ëiÉã=´e$+äåä:t$ýlÔ :$]#¯ÃW;¿CUH ";âͲe·ÓǾ£ÿsé8’§ì8œƒ¹ê:PØI³ŽEüƒ/?ÒóDQÍx?<¯QË Í/×aI{VÐNñ—V¶ÂM‘ôé‚¶•±ž„ùÌ* ¾-:ˆŠÎ=J:©x2DÛ>×Úùºò·ü1—뜕ǻ3ìOûªéÎWãr³ŠmW¾rË•ÃÕSŸ’^& ÏÐúWj‡ ØYð ^rÀSx×n\Z²óXO·œ/<ôŸû¼éÅfûnƒOý‰õ‹ñ܃8{ªÙ©ÃòÔãÞjûÓŒµœÆ8Tü4³Àè§ûÐûh °fÑ\dç$éîQìË]G×Gý’•µŒzÉjw>ô¿­ C†ôDXh˜š¹Ò¦ »öÅ r*ÏÅîSpG ýèÐõ;nÄÞ½[°tÞkØÈ¿/^ |‘Ñè%±ksñ2g`[á!ª«C8už‡ä¼ˆÁÖÜ»GJŽƒV„87$8àß»òýyØEÏÞ¶S±‘ä¸xGÏòˆ(”¤Ùô:J Ö}IiVóíâjƒØ8‚v9mÁñò³(Úò!ÞÏ#¿×ÁmæõÑ6ù·‹¡Iܶ ǃcùëÆ¬Kû#2ÖíB }%)9Tˆ-k3ðüó¯¡Ðá}°%µ=jcøøß¶BíZ‹4–X” î?Nç ¬[üW|¼m¯Š«ø[v£—j«îÝ€nƒ†©溴װn·“~¹‘®K<†å4š¶iQãPOÓ…ØRx„f³Æ!âÿÚ[k•€køXZW߀lŸ‡0ôÁm§ ’ÒØ#Çq¼ä¶­[‹]Ç]K&lãpžÙ ðƒu –ç-Çâ·©vt¤hÖQûÔ›£ÓxÊ· 5c#Ž?Bzž?)¢3æn°Ê1¶ÂhF$hq€7ý ã+Ï]ŽÑó~úô¬[ñj…Ààá±êg¥âÈF,¥ß›"j%‡ŽBÍ¿ uèÛms wÎ8m×Î<ÖÒÎ6^g¿‘žŸgÛ8´ 4…ºç?Œ³Xçë6l˜Z*0{ölu>|¸ðv…ß}÷õ} •þ1¦á~¦ýBÙ‰k³ðá‡âCš-PCŠùbIÉ`뛆 d0¾Xû/å¶*+'èåºcÄ-ôÆwkÉÿ§{¿Gíd°uí.Õ×Ät”òU¸iÈ0DǦ)ŽUYذFädŒº•…›gË–.†­{àžØHþb­–Jc7g’èÿætS}¶s³6á|§ º‰ ~f¸®uaç¬ÑÈS <ûl >ìß¹Cžç‘œˆ'ßFnþ:¼Okvƒ£‡ãÖ;ñ  ·1ªöllH•´áeNë>m~YìÃØÞ‡ð­aL œõn(UÅø„Í#vÌc¥`¡7ÐÚÅëIo@î'HË Æøÿ{t&hòŒ PÃOM]1´;–n,Àª¥WX4†¾·`ékk0ëå‡Ð%ön´§xrW³VöXe§åšßðÁOa|å ,߸¦m Ù„E ÆÄ§†Z¦8ÛæŸ}´ÔÚ¼¶^vi¬¦ýíâwׄ#cåZl¤™­%iß}(:02³¦m&Zâ–»îAXÁ'Èûd9òèÕeÀð¡øf)Á|ÿmDþß,\xŽ”š½Oì5ÓžT><°Ý\tãFΡ=ðË_?ŽKß§éÈK°Q Žë‡F`8¥ë:^³Ç&~ ëñ ~÷³¶ÈX²k—§AkµThZÒ1vÂc¸=Ü:ãƒ«Íæ¹1³ ­Åól/M´¾¹íL© ÄÒOòð~šYA¥3ô–»Í©9žÔsÈ™³7êaÓ; žü; #ké9~KoH×Å áZ@Çg“í©}~»i^§<wŠ_?ÚS ÿ͘q:_§U‚7ý  ѽ+ö«ç]‹&fäŒ4¯5çÞ¹ˆ~oøP&¸;ÿiœ¥Õ,å¿7\>æÀ®žkûgÕþÞþÙuöééyvöÌ5…ºç„ÇŽCyy¹úàÂ3ø“…<‹X}˜4¼ß_}õÕ˜8q"ÒÓÓQYY©^RàÉtŽ}ccèK;+ %¡Áæ/ó¤¥9²ÿ=¸¡Ï¥œ5„vjx|ÆF*}ÁìW}¥D0MÕàÑ.¶É‘þ‚þ<Š>¤íÒUšö›ð¨Õ_`$؇Ó]ÉíG ~ÙÞÎ?ïŠðh·>”Úò¯­àpÖ¼°Nƒ®¬x¾ÚUT]e(£žÐ•?³rI®ë‹¤ÜZÿ8ì*W ùÁ×Uš mïit¤»;;³ýÁm•¶×¯gî#ø^?sÇ÷|f;ýÐí£ úb²wkømIÛ„´`¡ ¥lRÚ7ÜñÚqïÞ½X¾|¹ò)S¦¨iDÎùF;ÃaÙL:‘‘‘ªóhˆEKPX8Ô­x ¸“ú±ÄWsQqkÙ2HÕ#×Gy5µ·0s½‘{9Ï hE\í"rçfN@µ~¦[…Ú¶/ÂZòx™/._½ÖòѳfyMÚ»Sôw9p[¸¨I‚hZ®]m×)ÚsNÍ(¸•›ç˜f©,ü#6b(æÌŽîC¨íè}C2à!ðå«sqã|±d2·œE—veÈݘòàXÌ|á!ÛånúÁznÉÂ~~öÊ©‡hE}ƒC÷LšÐÉírqwS\ŸœC=úT0·\üFÖúyöïº÷¦nù òþýûkYRà X À38X€Ðïÿ®òàŸöðŇY¸xçƒì°,Ñ?rÌuÇKxüÆõæIÇ ‰tÃ:æ:uâî µƒÉ䃿€ñžhÃ?ŽúÁ÷º=ŸÙÞxækãA#_Ë=_;;ÈÚ2¡žÝÙègíÎðŸàMÄhK ”p KÔ³gODEE)å"ÅÅÅjŠÌã?îô×zÖRª 8, Øèîꦞÿ5dÜõœU·Ñ…¤µ!ÌÕ^Hk"]Ž34ÌV¹—¿ä•îLh˜šâ΋rkIË)Œ>Ãh kk‚h``kãôަ¼ºÏ‘ÓPMÐ’#í;Ù0u[HÇû\65@îaºÀ>"wnf¿.Ûaí“kz÷´œƒf¼ùá¶Ð@‘ýsîªÌÕüY›·¼@)Ì«ßULMϾæÂ9ä“ÂW*Zðõ±˜øäh[¡ÙM?¨„쇟½6v!Ó.ŸY̓ü÷;.~#ký<7þºç"ë(,,T3‡Y¹qPh¬:~g½ì_Œ‘@0úÛÏ:0:_ákž)pîÜ9µ»×'¡g— MÍ4ÁÕªžz¬$}ÀC=„¿üå/JÈÛ‘ð2V:ƒ~ã€üÌ™3ذa¶oß®Ú ëxðÁ›Z›‘ò! „€hDZâG½£Ñ½ª+/&cG ´Ûp¼üòp;[¹BÀH€w"c}‡VÂEþ:Ìv<0ŽŒaäÚ¿ ð8Þ~žw™à%7ß|³WB½dúXQ¿oìç&$Ð6*¬OÙþ _wÝuj ÁÊ•+•¦Qž9ðÎ;鶴 yçî¸1q£â†·,䙬€är=¯—#-IC! „@ã!„ž#Ÿ„hh<5&9þH€¿"óŽE›‚i3‚‚ƒðÃùpáb%j.ÑÌ1B@! „€B@! € xëJƒòX´)˜&1c€· aSYY‰s?œS{R6…Ê‘24O'Olž—RÛv`ƒ£ÉÜH½6™ªôº Rç^£òkR~]=uÊœÔmð5ÛÀ o{¨E;Œ&! ¦-[R塆Öx\2jƒhì5äEþ¿«(ñ—xi,Ú¶Õ¶»l,ù•|Ö?ŠóG!í þ¹^é¥^¯t \þô¥Î/?ó†HQê±!¨úGœR·þQ1WÑö–$`MÁxÒ߯»;;³ýÁKø`{ýÚxni¶×ÏL‘ÝùÌvú¡ÛG“–ÇÅd/F! „€B@! „@£$@:á&SÆ èàµï¬±•èßëö|f{㙯+ÖÓï5Mˆš*~ã5y±(àÓñégv³1<(#„€B@! „€B@4S"h¦/ÅB@! „€B@!ÀD0 í@! „€B@! „@3& ‚f\ùRt! „€B@! „€"6 „€B@! „€B Á@3®|)ºB@! „€B@ HB@! „€B@!ÐŒ ˆ` W¾]! „€B@! „€¤ ! „€B@! „€hÆD0ÐŒ+_Š.„€B@! „€B@Ò„€B@! „€B@4c"hÆ•/EB@! „€B@! ‚iB@! „€B@! š1 4ãÊ—¢ ! „€B@! „€Á€´! „€B@! „€͘€šqåKÑ…€B@! „€B@ˆ`@Ú€B@! „€B@fL@͸ò¥èB@! „€B@! D0 m@! „€B@! „@3& ‚f\ùRt! „€B@! „€"6 „€B@! „€B Á@3®|)ºB@! „€B@ HB@! „€B@!ÐŒ ˆ` W¾]! „€B@! „€¤ ! „€B@! „€hÆD0ÐŒ+_Š.„€B@! „€B@Ò„€B@! „€B@4c"hÆ•/EB@! „€B@! ‚iB@! „€B@! š1 4ãÊ—¢ ! „€B@! „€Á€´! „€B@! „€͘€šqåKÑ…€B@! „€B@ˆ`@Ú€B@! „€B@fL  —]Š.„€B@! „€¸¬L&Ž9‚ýû÷ãÔ©S8wî~øáuÖ¯жm[§G»víÀû#ê‹€´¦ú")ñ! „€B@!  Ξ=‹7âË/¿Ä×_­„@EE…ÁWí/ƒ‚‚ЧO 8ÐrDFFÖ>" !ÌZx ¡»;;³ýÁKø`{ýÚxni¶×Ï,˜`w>³~èöÑ$Q[Löb„€B@! „€~M ²²Ÿþ9rrrÔ‘——‡šššË’çÎ;[„ñññèׯßeIWñŽ@‹-&“Ï:.ÑQM7 ýà{ÝžÏlo<óµñ0îùÚÙAÖÊÞÙ™ílŒ>à·±4ÜèîÎÎlgèB¶×¯g]  Ÿu€ ÐåR! „€B@ÆC`ûöíX¼x1V®\©–øCÎo»í6üüç?Ç„ о}{ÈR³Îƒlº@@?‹` Y?Rx! „€B@!Ð8 |ÿý÷ÈÈÈP]»vùm!‚ƒƒ1fÌ%$6lh€ê·ymÊÁ€šrû–² ! „€B@fE€¯¿þ:.\è7³¼­€nݺ!11Ó§OGhh¨·ÁÄ_=ðwÁOó#„€B@! „€n°ÂÀ àÆoļyóP€‹vèÐ!$%%—¬Y³ÆMiÅ©¹Á@s«q)¯B@! „€µ"°téRDEEaÖ¬Y8sæL­Âú£g<ðÀj‰Á7ß|ãY”<]f"¸ÌÀ%9! „€B@! £Gâ¾ûîäI“ðÝwß5ŽL×"—YYYˆŽŽÆ«¯¾ŠªªªZ„¯M€šZJy„€B@! „€¨3÷Þ{={öDvvvãòçΟ?¯–ôîÝ»wïöç¬JÞ€®D-„€B@! „@ã"pîÜ9üä'?ÁSO=…³gÏ6®Ì×!·¸ûî»±yóæ:Ä"A+ 4Öš“| ! „€B@!P¯¾ýö[ <ÿú׿ê5ÞÆï¸0bÄ|üñÇ%Ë’Ïz" ‚z^“rÇ IDAT)Ñ! „€B@!Ðx |ùå—èß¿ÿ›NŒˆˆ 0wÜqºwïŽ: 00ð²BåÝxÆ/¥Ó|4Ÿ¢JI…€B@! „€ŽX ߸qãÀëíÊ„……aèСèÖ­ÂÃÃqýõ×[¾o׮ˤ9_ÇG^^¾øâ uð5/{hS]]‰'âôéÓ˜9sfC$!qúò£»;;³ýÁ3ø`{ýÚxni¶×Ï,˜`w>³~èöÑ&“i1Ù‹B@! „€B@Ô;ÿûßjÛ¾†ÐÊߣGŒ=£F Aƒêõëÿ¥K—ŸŸåË—cÙ²e8qâD½³áç΋^x¡AânN‘¶hÑb2•·€ŽKtTÓQc8ø^·ç3»Ï|mø êS(ðøãã믿VÊû.—P€+õ<ôÐCJ8À» Üwß}õV—4ƒ[íÐðÝwßÕ[œ‘ÿÁ€ÿÕ‰äH! „€B@$pàÀõ¼¾Öè_wÝuÈÌÌÄÊ•+qÓM75`Î=GÍéó~žAP_y9yò$&L˜^¾ ¦iÁ@Ó¬W)•B@! „€N\¸p=öJKK¸ÖÞŠuìÝ»cÇŽ­}à ÁË8_¯¼ò xåvÝLNN^}õÕºE"¡ý–€ü¶j$cB@! „€B@Ô7gŸ};wî¬s´×^{-ÒÓÓÁ;têÔ©Îñ5DAAAHJJR³Z·n]ç$^|ñElݺµÎñHþG@W*è*gº»³3ÛÙ,hàƒíõkãYW:¨ŸEù roªQNÒÌ3gÊPAJE”¡5D¡¡¡hM[žð¶'u—ÿ¹ÏAC¹–ž,Æñce¨¢òð_hk.S;*SH—©%ÅgÖ%a^CUŠÄ+„€B@&L`õêÕj-~]‹ÈÛ¾÷Þ{èÚµk]£ºláyöÀ<€âââ:¥¡vC¨AC2ÒÈû»òAùeƒªÆÁÜuøÇûÈX´ùò—0qcñìÄ!!¿•?ÂäÉï]ÂTÈòràé×ct»:1•…˜7ù÷سôÂëéÏ!ÊÐ:ªKÖã—ϼ‰ó$ˆpnÊQ^†NÝnÆqC7äND´5D` T=k—`Á¬©Xî²`1ˆKˆÇs)ó12ÂEž-ñysQ‰“ұg÷6|¾!«ÌL“óÎ๾m½‰ –~J6e²i\E‹*àæ§_Ç ££jxB@! „€¨/%%%xúé§ë Xóppp㺜ôìÙºÂÅíÛ·ûœ4 Þzë-üþ÷¿÷9 èøË¾;£»;;³ý¡Ï`{ýÚxÖg èg9²;ŸÙN?tûhÒ‚¹˜ì›©>¹s‹Åü µ,r\ άŸæ–ïIC똩6¤Ð xš«ApùŒi‹,Kˆl+[@ùŽ7Ñ:vºÅ‡7㓳ñÖs#Íâ Q]‚7ÇvÁtkBn£q›g·!ɱ¼ë?Ý€Ï?· ìƒÔ)~ûÈ,÷ÕX;;£æÛJ=âRò°~Z_‹/¹B@! „€¸¼Æ§”Ö%Õ>}ú€·8lÌ_ËÏœ9ƒØØX>|Øg;wVá›pÄç×C@Ÿ1Àƒr1~B ¼pb;ú àü·ö}ú} ù˶YÙšÀÚKD—Ï…ß­(4ÇSõsFy-°M¼öwå²0ì‘I˜ãÅŒ‹ÚÇî:ÄÁžu °ïº¯èr¦¸! „€B@¸'°aÆ: XÃ?ÏhÌB¦Ô®];¬ZµªN3Ž;†eË–¹‡.®Š€ü¥ºJs1!ú§ËâS°­è(é0ÁDzÊÊÎàhQ6eg yÆxÄp]@õe.KBRªÚ–%#=3T.rðö“ QÈ;¹ 3í¾¢ƒrž’3U¨ª(É£EØ–“©Ê¤Eäl)‚C~cQY¸ÝùM~$#B@! „€@½?ÿêW¿ªŠððpüç?ÿAÇŽë¿æþóŸë”×^{ 4»»NqH`ÿ! ‚¿¨ š~þ§DÃT~k¦Rrа>mD…#„ÇÉ´ÕHXX[„GõÀ‘ãðÜÂeØ]A‚‚ìIj5dÃ_zâ)µ-˸‰Ó°põnÎIq’èq|_A3ûìuz$fecÚÈ^hK  C‡ð( ˆ«ÊTUQgúÖ28‰ÙUh×H™›Šìmù8QaBY~ª;ïuw£åÓ£Ÿ¬{<ƒB@! „@½HIIÁ¾}û|޳mÛ¶øôÓOésþpòäɘ4i’ÏYûúë¯ÕŽ >G ýŠ€ü¡:èkú,‡¯éÀÜœ£˜å9‡!$(÷}í9ç>.Tшß`"âŸAf¢ÁÂ|©–%8YŠÐ*ÈѯnR· : À´¦`ä€^èPú õŒ9=—"mB,Þ6¸OL0ÜÉ¥B@! „À• PYY‰W_}Õç¤i]8x'VÜ×Ío¼ÞvÑW³`Á_ƒJ8?# ‚?¨ƒÿýÀák:âRñ«øp?È]m²€os1 ®ºàÑ¢Qã±jO©ƒ}c³Ø¼`¦*&¢Á·ž{´±Cò+„€B@&Gàƒ>ÀéÓ§}.ïbp×]wùÞß¶iÓ3fÌð9›[·nÅ–-[|/ý‡€®x]TbçgÆoÍZ†’H›Û+ž·Úf k–FÈæàUtë|³¦ Á&Ê x$¦¦¼ùJ*mÍMÉúy¸k–¡Ì ©H§ÝÏÓ‘b„€B@! ®(¿þõ¯>§Ïƒæùóç; ¿fÍ5ÏFóý÷ß+{ž¥ÀÚÿÙüíoSv›6m2zÅ¡C‡”ýâÅÚ&l'Nœ°„ýá‡Ôòއ×ò³žÝ”––Zü8p@·öùÌ‚ºÌÈÌÌô9m è?D0pÅë¢ çŽÛg"Ãc#ì-ýî>8Ш°ë<ƒ9¶»ô‘~ÁãF^å> çºPP8=]B{cÁª\4¦átuñG5lŽ¡^‘ÿþ%бvÝg¹B@! „€¸l¶oß>|5/½ô:tèà48†“’’”"n£´³=<Ðg“œœ¬îyä°»nx>û{ýõוUII‰%lyy9ºw_~Ï>û¬èá~ûÛß*œ‡nݺéÖ>Ÿë:k@f øŒÞ¯Š`àŠWÇ9dŸ‰ÖhÓàëâíÓ¬ý}ñ×PR\ˆÍ¥aBïP 3~97G—4ï1èÝiü ë:ÞU:ù˜õÈ@´n1k ­¦+ßWܾú žL°Y’Q‚^ Þ®8;É€B@! .ºÌ`Ï<óL½æ’³fÍò:Ψ¨(%TàóæÍS3 Ö¯_ôôtáïÿ;é%7~¨ó:j>E—››k³s‚O‘H +J@W?'†¾Ã5ò-záÔçÇòg]+)?v¶«ÂÐ*Ð3˜«Y€:ܰcÇŽQõèÑC-`sæw·rðª,xýþĉ• àž{îAëÖ­±wï^°p !Œ¯Ë Ο?;w6D–$ÎËD £¹Ë”ÃfL÷¸G¨”ËmKš? ¯¬z ÇFÙÚ{qè0«Öåã…øp§¡ËÛÚÇ F¤Wýës¹Cî}š4¿.šj›¿» D¿gÒ‘úØ;Ï]ÐlMžŠ·Óbf ufàš~uJl…€B@! êH€¨ëÖ­ó)V6øøã{ö¶ÛnSþxÝÿ¾}ûÔ,ƒS§N©Ø!<<mÛ¶u×ìÙ³±råJ¥/À©ƒå‚ ðå—_‚•ò¬þóŸøå/ ¶3f ú÷ïoð]÷KÞ ñá‡ö)¢ÈÈHŸÂI ÿ ‚?¨‡€ˆ{‘™NoK¡K¼˜0`Æã]%Ê+æffÁ{ÅY—ó³äÊCu!fÆFc‘Øó,º Ê–±2Åô;}]…5Û¼¸oO²Ö@Â3OcÊÄ^B‰³B@! „@]lÛ¶ Õ¼ë—æÞ{ïE§N¼ É„W_}………èÕ«XÀ‘#G,iÿñt϶}ë­·Àé¹3,px饗”ÖIÀSýyg‚eË–ËùÔSO©¯ô_}@Ü~ûíõÄÓˆÈR¿¨¬Œy1Ë©¾EOÆ"pÌl¬ÝQ ‹>BêìÊKOâàŽÍXº`&z¶CÌÀñا¯‰Æ“Óò³pW»)X°ÔZâòb,ù0¦fY­øjÆ#ƒhø[¿¦|ÏÛhˆ ³ßÄÚÜBœ,­4L©¯Dáú4Œe'  ,ÄõéZ?©ÍŠ„Šó8¤„œ´ùâhí–ØmJøá’ˆú+±! „€BÀÔE Þ„ ¼.Ï]¿~½Úaàúë¯W: Xwï™™©¦ÿë‘EEEá–[nA«V­t+ð²€_üâÊþÆoTö<Àg|ðì…äädðWxþ‚ÿ³ŸýLù¹êª«°xñbð’Þá€w_#êƒ@ ‘èîÎÎlg° ¶×¯gVŸÉ÷ú™g,ð=ŸÙN?tûhjð‹É¾Y˜’õ ÐeØ,÷e5Àvô”€¼²Õ諯"(ÝŒøvwÙéÐBÅÄ% ¦ Í(Xn'PÎsqÔôì”ïICëÛiþ)yg0­¯ÃǬ‘³ð QH\B{œÎÚ ¿mÃÆ¥àÄúiè`këÕ]eá ˆ~’’Ðôäç[Fú6ác,î@zþLìE+w`Bh¬ÍŒ Ä¥¢lý'Û/ÚDg¹Ù“61S 3Rò°zš§y–àr!„€B@!àþ ÿßÿþ·Ö!ÃÂÂpüøq„†ú¶è“•²`@ŒpE€”QN&·:.ÑÁÓZj ßëö|f7㙯‡ÉpÏ×βVöÎÎlgcx.ÆO„Ç?‡²¢;𻟠³]ŸnÌŸóñ-ù(C•Ñ_Û!øG^:†ÆNrtçoÈr°Ó‚& ûp’ƒPÀ­Ï×6™ÓcÉeÅ…IĶø&à«Î—ket!Ð5 ʪÌÓÎ(¯úä Ý_íÏu¡öiJ! „€B@4_¬¨oëÖ­>x衇| p‚"ð »ò#üµ^Œ‹ŠGÚî2äe¥ Á‰’~gYMHœ‹ÌMo¡·>[Àì©m߉´àad¥ÌpºLÁ׌”,­X‘ÎeE­ì"§ÀÁÎýãÕ¯¯mï1šß$gnC™) ¼›Œ 'aslåB1 /ÛKy[¡›­кvñ†ÙÆÖºþµ6ØgQî…€B@!М ìÚµ çÎó Á!C| '„@S!ÀSþÝÝÝÙ™íì}ÙÛëׯ³¾„@?óÈ’Ýù¬/#à³n߬–P¹íL5N¡°`?ŽŸ¡Nîšk &(Ñ4¥¶m;"¼sWtéÒnôùYã«.GqÑ<ü-8ª  ‹¸ˆkеÛM¸5: aÞñ­qÖúŠu#œÀ‰ã§qêäY”þPJ[¯@m¿tM't»©¢£:¸W´Xë4%€B@! „@s ’’‚3føTÔ;v OŸ>^‡åí/\¸`㟗#´lÉC«ùþûï•.« ˆ«¯¾Úh=>Ý­ªª ?üðX§oQh4,ü`‹¬³€õ pXw† êax©ëG°OÏ^Ï3§Ëé dzgÏpYo¾ùf™)a„ãáÚß—è~WÅÐÝÙÎþÐ…l¯_Ϻ@@?ë ¸ª±B@! „€BÀ#Gy«V­òèÏÞ/à/ʽ5¼;@ZZšwtÇÆÆbþüùôëÛÜrË-*ÊgžyçÏŸwˆ¾¼¼ÿüç?•}rr²¾ƒ¹sçbåÊ•øÃþž1!¦q¥»þ$÷B@! „€B Ùøæ›o|fPÁ@ii)¶mÛ¦¾þýõ×ø×¿þ¥òÁ3 Œæßÿþ7xJ>¯Ïÿâ‹/——‡ÈÈHŒ=ÚèÍášæÍ›§¾¤óìûmþ.\ˆ­[·ª/þ¿ùÍoTöŸ~úiì۷Ͼ(÷< OMMiµÇ³Ï>ë³Ä!b³/WàÙ¼bbb¢šÕ ûÕ—F°Þ}öo“È;"ða¿•¢N΀Ìh|u&9B@! „€BÀ@àÌ™3†;ï/Û´iã½g'>{õê…E‹9q±µâmÿxË@6wß}7XxÀm^pë­·ÚzvrÇÛ² aÉ’%õ.àäX°±lÙ2µ,˜|§NÔŽ;wîT3xEÞÞ‘w#àYeeeFïr݈ ÈŒF\y’u! „€B@! |_JPWÁ€¯ìûô飂?~Üë(,XÐ`ëøy©@ZZšÃLÎ/5àÙ ¼{ÁðáÃÕ O>ù$~øa¯ó.ýŸ€ü¿Ž$‡B@! „€B@¸!p¥f ¸É’[§¨¨(å^\\ì֟ѱ]»vxíµ×ŒVõz=`Àµ”À>ÒAƒ©­Yâúõëñÿ÷X±b8?sæÌ±÷.÷”@ ùÖÝÙÎþ`Al¯_Ï-Íöú™—2°;ŸÙN?tûhÒܹ˜ìÅ! „€B@! œhß¾=|Œ7Nãtg¹ÿ~”””¨/øî”²rÂK—.!&&F ¤õ8¿ûî;ð.¼^¿ÿþ(**·ß~k‰ïĉJÿ¯áïÛ·¯Lõ8yyBçÎ-nÇŽSËxª¿¾ƒ€î¸cÇ5íŸu"°ÂC=½ýèGèÞ½»î çÎ×_~©î9_œ?Ýðv†»víB~~¾J7..NÍ0àn¿ýv\©ÙzþüýL³.&S è¸DG5¼Ç£~ð½nÏg¶7žùÚx˜ ÷|íì keïìÌv6FðÛXntwgg¶³?t!Ûëׯ³.ÐϺ@èr)„€B@! „€wxàÍ úø\[Ã[þõ¯­m0ñ/jMÀß‹>ø·Þz+xÛÂÿþ÷¿¸ÿþûQUUV¢Èç;w‚ãbíÿ£F‚»?Ç9pà@>¹õ7f̰òAc\]»vżyóTXþÇéÝYðaT@hñ(MŽ€,%hrU*B@! „€͇Àµ×^ësa¿ÿþ{ŸÂΟ?_ fÍš…S§N©žþy׋/¾¨Îo¼ñ®¾újµSÀÂ… •ï(ÀB6ùË_”ÒÄW_}U ’’’T\¥¥¥jK@öóÒK/ášk®Avv¶åÐ ¼U nÏ‚ÝtìØÑb¯»óÙ~§öÿþûïëÁÔyÕªU6÷rÓ|ÈŒæS×RR! „€B@!Ðä´mÛÖç2ù*à­Ù´lÙR-àéÿ¿ùÍoÔÒ>êêjðV€.^nÀqñ2…:(ÿûßÿtï^ƒƒƒÕ.¼S~°>gFŸ50cÆ å,³œQjv"hõ,¥B@! „€M–€¯z| téÒ_|ñÖ¯_ÞQ€ ²ùæ›oÔ…|ÍoŒ1.žþ¯ÇÅË*++U¬Ä°6†ÃmܸÑáÐ&ãÒºRBVŠ(¦yÁ@ó¬w)µB@! „€h2| œ>}ºÖ Œzx×N;22=zô |ðA5‹À›ˆqñžùÀqÝzë­(//ÇC=ät›Awq³ÎÞñÀþÐuòƒg°¹óÎ;UÚFw¹n>¬óXšO™¥¤B@! „€B@4!¾ ~øá:túTo‘<ýôÓˆŽŽVZýy ë1b„ÈOš4ÉAbß¾}Õv…·ß~»CÎââíÇŽ«”Ú+Vä].^¼¨¶C4FÖ½{w•†ÑÎx}Ë-· ((È⇯Ù<ûì³øðÃÁñ²qæG9È¿&MÀ“úNÝÝÙ™íìžÀÛëׯsK³½~fÁ»ó™íôC·¦5:‹É¾Ù˜òÒ“(§ÙH´ö($4 a! »©.ÇÉRššDi„…µEC$áºÂª±ã£%Ørñv$Ž€×KuI.–,ÏÅ­%bHD=–¬ú$>Z²o‹±¬lëÈÿê¡$wVìŠÄqCšT»¨[=Ih!P¤qž¯Ê’ÍH[~M‡ê±tžšk[Ïý±ÿõ®KãÌ¥†~K·Òoi8ý–ÞØèúÌâÜUXônN¡?6Sâ#œ²QÛ•’95¹< Ú†9-Key)Ê+«¢¶¯³yã«<ˆ´¹ °£¢=Z:‚Ða¿Âœ‰Më½É)”:X²Â¿Å‹}6°b>Þ~PŒhH$à™LñÐq‰î"j ßëö|f7㙯‡ÉpÏ×βVöÎÎlgcxP.Æ”®ÅÌøhÝ®#ºt숎4¨uh Zôž‰=4†¯,\¡$i;Êmr«Û/Ý£Ù®˜¢ü±dQ½ã1eÞR4;øÑ´lŽæ4B[@k±º)ÇŠ Ϙ¥°MÕѧ÷6ؾh*¦ÏËE…÷…ÏŠc¹˜:k:¶ž®ç’UÁ¢©Ó1ï³#õÈÁÿêáXn2¦?¹³Éµ‹z¬´FÕ¹=©Ôÿ$`ǹºe¹¾â©[.š@èéCœs©>¶3f½Š5"rîçrØz—Ÿ% vŸzf¯·Ä`½¨ÄG3{«w¾7sm[[ÉúyÊÞõ{ž5–¦påëŒ.û®]»š)ƒ¨ Ô _ý.ß‘†vÑ£°h0#=EG#[Rç&ù»q¾ ¨ªÒ†æ4ù³%aݾ¬J{ «*?Nn1HJIGzÊ\ÄåoÀÛs&¡ûïV¡²ä#tO˜EÎ3“_„üMYHJˆÖ©ñ¢Ý8t}¹¸®Dýæzƒy7™öÁjšˆ‹€õhí<õ˜€5ªÀ`u]ïÉ…,„.êÑ\ÞzðœñÀàöÔ6/W»ðœñq9 \Æçô2‹¿œÏžù&Ì2ÛË”ª‹d¨qššêÛC›œêÔÇå±ô¢?nÈ>°pÍÐO:µ9Åüѧþ–ÿ–uú-½À¯e—WŠS´9›M@úâ0í¹…xe\¯z…£ÊD1.k JìbÞžùŽfSvÁÎ¥~nË÷,¥÷¹¼$gåáè‰ÃØ”žDí`>µf‰ÙÁUÏãÉùYH˜›‚¢äd¦ ÇÕûç¤pé+h³íßx4p~³ücÌ@Ç¥á/HǪbûú Á}3æ©LøëE©ÜƒYÃæãÓñp/Ÿ_äôØÅ9**Êç|Š`Àgt° °™µÔ„ÊÕˆŠB_åçNUùMÊ:ŒWFGhy@¯ôµ?‰§ü£–Òünx♉èEá&NºZÇbùÓ8yL‹:eù|Ä÷âákz ÑöTÕ\ìÿ‡Ñï ãì­kq¿ëY˜TÌ™ï"T5i_åU Λb5kc¥)vÎ]]Digí9vjyËÚc9ÿ¡æÑZwíâ­¦xZ)ÙL}~S1&ªÄ ” oB\ÔƒÑm¯Ýסµþ•ø£¶±×Æ?•Q5'W­É“{mÒòc¿ª®i©’+ ®²^‹6rM¯©´}“Ö¯¹ŠÎÞÞÙsêK<öñ^©û€Óû0Ñttžˆ^}¹¿µ5îŸ Í¯ƒŸÚÖù÷Ô‡8¤a›M·wu ë2bOíÌ_úãúïÏ"s¡õËí[cìs7º(r¹_â•”®Œ7~ a«É?­Ìôæ×ÄÙ†°—á2ðþâPóí³l)Sþl,|ãz˜Ÿ¿êƒøç%®Ñ¤íöë|_޼0IÅ’œsÏÅkKÿÂ'¾‚¢k*Ðý‘Eõ§u¨Z8§þßò7ó’Æ¡õÅ=¢z ÞôŒåÓÏ÷'ÚãÎÇCP½¼}WŒS1ýЙ.#úáo©mEtPéèÿ"FcSrîš5¯¬‡´qQØüæt,§EÙÉã}ÿ¾£'ÐHÎýû÷÷9§"°Ew’–ÂäääØZzyǺn¾ùf/}‹7" 3®pmTŠ©Y”‰„T$éBcžhmš/¦JŸÍv+F%h1@“µ‡¼14=¦ºÅÏ\eù /ÝCSähɃ¾TaÊÒ=.#*\1Sù7xÃ[¸/¾7ųÂä.¥©–`m¬ìfœzÊ_ÛxiE`h(M¯ë´Í¸Óô\åËUªOæbö˜xK9xšßŽ“º^+÷˜y«°g3çQ+¯C‹Íy¤ü·h1odÚv îÓЖ‡ÄÇÓôÂk1Óèý¦yÊ©6ŰÅHö3ç,¤wã{ ]‡Þúrâ³¢ÐÇ—¬Ö°]-/ $ÁÕÔ4X>FкäUó¦Ò‰·­Zÿ¸tæ+C󲽂<Õa!¥ÛÛ\ÿ½§,À ÑL=´·çR¬}Ó°|¦÷¬Èµ~#âi£Ì8wÏzL¡´BÕòœ øÈŽ×Áµoª¼(wò¿£´vmÁ>·®Ú£æÏ}žiÝfÒ c¯¥úf¾æjÖËåØvJ±>m¦¡Î¨ý¬(4gë“ê‹ê™—MX°Öú<Ú@Ý[ŸƒÍ®Úåuv|<æ­XKmA›Êº`G©ZúCù5/%Ðó»ãàÌcî?zOÁZó'WÏ)‡«MüÏn‹—òü5XDw qôÏ"i§gkÕ›T×Ö÷š >²áV}r•×ð¾àâ7·ºxª÷¹tüÂ,Ð;s9K‹h†¡ ¼–^‚¯m–Ї=N£ÔÜßwí}3Z=†óävæ ýN^mõeñNC¦½¦ÚÛÛO.ÀzÒÙó«Y@³GG†;÷o ÛT®{õê…V­XðT{S\\ }»¾Ú‡nz!xFÞÆÐ—cïÞ½Mˆ”HhAÿù`,Òæƒ{²ÑÁÂY½†Òq5<_‰{¼6t´£ã:::ÒÑ™Ž.tt¥#’Ÿ³8©=éèMG_:úÑq'ƒèø9)lÒ¦,/ÕDå4%f¸-gY¾æ/%ïŒ?{ûüÔŠ/Á”_eöv4ÇDrâRMeeÛ´kº›‘n*:£{²‰ÒpSfJÓÂj©ž0%ÇÐ}Ì SfNŽ)+=Å”’Udðo{yt[º‰~ÉÿxSJjª)5s›©ÂTfJO ;¶§c|RŠ)y禤œZey&z™RédmÊ1%QîYG]å×u¾œçÁd*ËK1ÅÄÍ0ed瘲ӓ´ü$f™´¨ÜžòX‘¯å‘X§S™©3´8(ßz¹Oƒò`®S.{\b’)%cñ©2eÍÐØÌHÍ2åd§[ê,!%Oñ©:œ¥ÒŠKJ7ålÊ6¥'Ï5eUØÂ÷xg[3’©ã´2Ì0s¨àzˆ3%gP>r2L‰Ü0Þ”oNª ]«·¹Ù”Ï Srr¦É\ƒ ØmžØ”¬¥5>Y•!9Q«cQ ñÖTXX§´·mÊ2%©j‰óÄ&íI/ è¡ åùSuŸg®{‹êKR³6™6eR߫ʣ1¤mž1§íÌðÜ8m¿^ôÇ–ÂX.<ôU¦DÎ'õ–~MO')Ç‹³‹œ¤%Äà=Ó¶ŠjÓ&uF}Ò9‹×²üÍäNÓñèˆIü”ú%îÓùþCK¿äÙOý–R˜¸Íæ>ó"õ-ZœÉ™ôŒ¯QqŽO/±¤ëxaGÕ…çg|ÒFjÇ+TÝáGŒM…)ƒ˜ãÒÕË¿æn}KÎÑ~®MUùjðgødÐ6å/[£ 7Rµ±C:nóå,ö1TiŠ8ë`P^¸ÊcQ¦öžΣ³9cìê‚Ý^;Û§AtÍ‚ñ)›,^ùe€_šã’·YìLfŽ>°aó‰KuWwÖàίôzoÊQ#öUfÊÏ?¦ –—ScØ¢t®—“>8ÍKaÁ@œI—çýº¯CsÚ1sMÖ¡‡É¤az[3Fæâºª(Sqˆ1¾¤S[Pí;Ak£:ã$zQÖÍQ³ @{&´—B~ùן¬ÙI*Þl%ˆÒ9Ñ3䢽êñZÎnÚ£7yv&Ð~–wU'm§¢(CåqÉ6\9_U‡5VVA€ÞS-å¶äßr¡—ÝM1?›ˆ›kój?8Ôë!.)ÓÜwð€„û=}çÏimãÑùÆÍµ>SöÏ¥xú…›úÒ™Zúó³—¢=Ÿîžª‚tU©º$Òsÿ\Øö ÚûüMKÏ]¶ù9­0?ÿÎûªk/ú÷ù8l¢Ñ&˜Ÿ!îT]™Ÿ÷aM$² èþSõÆKô¾r¼ˆ{ngžÚoíûc®|Ïéjõ S†YðzÔÜ7è÷‹ƒ©0œgìVN[©Ð@:q·YðÌõ¬ ’2­ƒö£9Ÿ*É›´¸g?¶ƒúªÃy*¼UPmè}›C^é—ÙV¸`¾§ü&çœÒ¼W¡ßß4S\Šö{]þ¡J'!Õüûí©G›óo‰þCnÝõåÜ/j9lûÇÄÌ‚ô|S~†þ;MO½g°`!‘>fdÐo—E0`CÅ6õ¬?_Z^ݼ‚ëýœÖà¤.óY AyÐÝ ²Ìr~ÞHèž]d+8“ŸiŸ@Wú°’’œdŸ˜bbÙœ{sØ4CÅGïéÎîÃ7~×ßþö·Š3³®í±hѢƠžJðÔSOÕšó 5ÕÔÔÔS.š^4Äȯ<àã¾ÿÁ»ixž³Ê£|L$ONŸn‰s‘SpÏ ÑÖ£…„ÓtpS¶eÌUQÍ$Î4÷:M'$O&Ѱuù$´¦©t³ÓÖÂ2ûÞi€*\TöPeï—JSí"4ÛjÍ•E_lÌz1ª£yj_h,M:¤™ß;Ä¢üÃm¾\å¡s?‚ÙSh{š{µé$hc‰—ŸÉãùÓ¬ä11‘, ÓL@›kõKóÙ‹4HÝÐÌÄ!–pÇŠ©ö€‘wßh±£µêºÌlvkhð‹ ScÐ"~–®?hõËW•;0ƲÌÀ:=’§ð¦ésÑõqÃðcËÖŠaè;Œ^ ¦¼xV¼9hJu÷IËÉ%L‰!ÙK×>ñô†Q=™¹¹†)‘në°ò0r¸Bc¢”Ø“ãbÓ¡c7ÐìI¯MÅymžúÏÆö±† ‰ÄôöˆCG SAðÄ,„ÕL»pÀÿÛy„X@öºÉŸŽvffGÍWîùGÌó8ùÎM[PžÿÜ´GïólŒÐÕµmÛA•ö´ÿéhh+[­áªË4VË'E›§Øb×Áimy‘Õ§“+m„C$<6Q6“x¨­ÏOk^ëj}–µ`®žÓÚÅSmn#ïµÖ·ýó㣛ú ‰º´lYSW©©ãÅ¿«ú¢ccU4*í˺.oû6­^5.àÇqc0ÔüœVyÐeâMâöùDž )SÈZˆÏORÚ'?WmeƼ´¥[÷a›Uåü% ß­üÛ¤™¶ý†“ pôOŽ67íÌSûõ®?Ö²;»I7&áiåùì¦s9>^@}C\ FEYû}»ØP²ñ+µô+±÷58YrgÛ¨²âí¯gèR¸/}âë-ÁÛ…k¿€ÿÛYj±óÎæ½ºL{þ—OúØ<ʼnù¯1ÄçåeÜ­ôûÜÞ±Þòû|¡šìCñÛGÍ¿ß^FiôVeÖ¨?µé½ëkè}áB zÝóJvõg(Íß ÖÛ‹rToPY‚Í«Ò0sÂŒ¹/IýëùÕòGååzÞ™Jk÷f€¿åLÑÏ¡êLh–Ù.Ǩî­iË^ë»`Û^c±lõ_1ù'?Á““°,mzX#CLÖËò=Ôr ¶Ù°–hZšÍU]ô lÞ¼¹ÙpòTÐxòâÔý¶ÛnÃUW]åÔM,ýŸ€ÇW9ÿ/BÓÈáªæá…!#]&°•ök°~û!Lë˯gšÑ†Œtmù!Ò^¶•­Æ—? a0îT „±‘ÃHsï:¼1¥/lUÙè)ÏùJ.òþ _˜ŠùSGaþ[sq8ïDÔCKÒ¾zŠs3²Ð qM7Ã`Y÷¤ÎµÍW%Ö΀Qó󑔊iIa]Ù›—›è 7öyTÜÍïˆjî¹ipÝéï™æ ½¶•nÁñYjY‹<¤ÒÊãžôE˜7}&mXŽÕ©yXMu¨L@Wü6;Sµ;Ãÿ DGÚ7 Mh£§¦7#>—澉v§Ó‹ð d>ÿFÑxúÉùÖ7ÛC¦áLAOüeá˘³h²è )’kxivZ‡UÚ =¦k;AŒ]) ùv~éÖ~ÌuPà2ÚÕƒNz!ÍÑ…S Ê,h§ŽÌ亨½\s£ëv#ÏÌÒ‰˜NmÁâæº=v²øqra“gv·>TÁ\oVö–ІréEiäHF/-?Áswµƒ^Lz¨Ôü3K|N/\·Ý{Ù=ÝÆùÙ1gÎýy²už‹@+;h¾õcÜ®ë+" ~ffm˜ÿä>²wÞ¦1n:âÌkv½yÓœ>F†zÕ¬mëÀèÕáÚ Çmbä*ÑÒ€xjþõÙt¹˜A¾0!Îv è*¬C~t ›2*‘í3d[F½.ù¬_{l¿†4lûc=ÎÎ®Ó ˆˆËH¦ÎÊÂŽQG”ΜYš€ÄYL$iÄÇ©ß*§·'­µƒ)ÇûNcÀhó€›ÔÌ9ï—xb¦n¼ñ£ùµ2Š¡g¼•áoçÅ3®§çúl[W2Œfþ-W1 mÏogZbŘ3‰’HBÊ@ÚÊrþÌJƒeSzÙå¥iß0Àç®Y³eeehMÛG6wSTTäÖó ¦ñ0ö|·8çaÑÃAÓ¾°ˆU+¦ "í¹<0–Γñ.=ÔW‡¬ÂFG”ŸäûÜÜÕ6œÛZs wa ½ôdeU»uðª5„ ïè)XFÇ“³{Óà:ÇHÑa„mò–<š¿™Y0KÕ£úÞ‡‘¬®×+ã:_y(ß$ éúXýÿ€Tãþ °}óq›ªö1ðNðXÍ\öÃ_óW%³©c[þwSÌkõñC*k6?Saôò°cŸ™‚™ÑXôí•M‚õºAƒ™!#Gê9©ÕY{qV•Èþ „Ãë_¡oˆ´}Òs «mx¼_‘ÒÂv±S±|½ÔDÑK»:¬.C7Š/kÛ~êŽÔòŒ“ض%‹”Ž²æ·º•ÔüChW §ÆœõÛ¿5ËÎ`?EÄ´34ý¥™ã©ú^«è~ý"©îª1Š^³6„âÇÄ,œ=ØcH7ÎÛc'oòLefÒÇÎò—#n\%ø,g9éauc[)×·?\‡×H#µñ‘ÔÝÐ&#GúþÒÄ XÛˆ›ÌøàäðœúG` Æ`ɪ\<Ów¤zµß³z¥úÊïžžóúâ~-jÄãDžpcTŽænºß†­ËgÀœÿà@0é7Ú¹v}›¸vg·}ˆ»ç“’ ¢ ˆiFnc’²ÑWoPÂ:Ïå!|K}¥Gåá<õU=…s.Œ±yj¿ûci8³6¦ËÏ߃S“HAð|Īê ÷Ú HŒqT—ìWÊ„h4š>)Õ•üµú§â±èmô;¿sFßmr{—ªïµ' _?^Bj5Þøaß­Ì…6éw%D·ÆëëU`0w¬¥x÷ãô—¼ÚšJõ¹ü*ê·[?w^ö‹á är׃–Ø¢Úxò¶-4˜çF¾Gý>i³8i†œÊ.§ò¤òFéÁœžÃz=ˆ¹$’Ÿ3çu¬Ÿ:ñ†ñ|õÁÕøÿì½\\Õ™ÿÿae DÁ’˜¨‰.‰h6iͰ k׬6ѯjcm“IÆ*d­¯ý“”lͯ…®Ùa¿»fR·/ˆUòkjak†ÖmK¬¯ëé IDATR k¡u¨Âjh`5TÁÑ0ÊØû{Îý3sï0ÿ€x¯Ã½÷Üó÷}Î=sÎsÏ}ÎCû)˜õn¬¨Q¬¾óË$2ÆoÚÊ·Ó.P@õc¥Ø’u¯ÐvˆwØp׆vlŠÇÛ›ñgmJCfffbñâÅ0Ž—cÉ„—¶.zæ™g@Ëècñ>kýáÈxø ,˜ÙÍ‚×zLwý%gáÛ¥” ¶®JÇžCMè!ͨ=m¨«$-ÔI·¢ML>S–+» ì߈bòÓ?4„¾Ž:Ü/ö¨Åf˜cÐ:+ö×ÍÛVŽcmèïï'Íöû”¥†ùë¾ñW†**$ÚwOÁÔSø¾>²gè—–Lø¡]®Í¥YWs!ªŽ‘ÿþ!Ù¿!NÙÅøoõ”§@[WÝJËäEZ=h;V3zɼ,b¾BäÁ4_ÖäÑ|̉¦ŽÔØ®.¹ìÃëƒÊ2¾hy¼ú³bëÂÆÅ¨§¥g‡HÛû*ÚŠÈobHÃïWw’¶êFù3#ôc^^ׄ¦šr˜–YiÁ>u@î!MíÅe5èè¦vâz ïˆ{$ÝÖ̓…Kl¦y¶í©Awµ‡º2X©æRÚ^ö¹ºô 1~O×·¡£©«äí3NᥗúÈ݃CÛp þ¸Ü^ÿDyfùeÊÛ°ˆuHmþN¡ž™ÚÅv*Çñãu¤…1ä/Òåh蟕›SI[÷mJûלuÇ”•VrLZæmÃj_ƒýݤ_mÐMÞš±î³Å8ÖÙƒ>ÚUã± ‚Äq·›Å 0w|W<û°4¯ Ç©}=¨?T‰&õÓˆhmA—%å4B{Œ)ÏêL`ß 4?F»g,Å!ЕhTšä’u'HñžëžCÔ>ºÑV•õÝþ{ͻסà@½\gÝM8D}‰è^"š°m$b¨¨7\C<§QcP<èãIYyªlôdîÛˆœ¼Ú æ»ÄP™Œúü(ºÿêKö•–ƒ{‹äY!]aËuÚh?ò3 ¥p¢ùyt÷ôÁCŸˆÏ… Ì‘‚ÇdbéC¢ç#î-ñ§WüÕëýçÑÃú½Ê'«ïÜI¢kZe£Xzúé<†ÂUÛéžXž½:à9B;ÓÚv¸öµ?¤2ú,BºÂó’›¾"kzçæÒí±ó¤¸%WÝ+tLÆŽ¯\Œ´ °hQ:Y:®\…ijÙü?hìS–æÃÔ/ÕS¿4@L\Ô/ýy¸”ú%½ 4²CÛÏú{ùùoÞýkzÆ]ôŒŸAwõ‰‡º#>ãú8D!‚¯…›Þ¬´æÈ¿Ï·EYÝëè¦>³î@£²£‚·_N­Bêm$¨ÖŠrS¿%Žp·³ÔÏ „`õö-úÕ½øüsè >±,Ï, ë~ö™ÛJ«29¸õ**ïq*o•·|ÔÎ6JbM3‘ýMdÕ@MMM"mJòÖAcãñšk®:ôØÌVIT0a…AX!Vô:b>(^Ïˆá–ø%¯ExW‚qêÉšzmBã²+íàWÆÖ%•ÊZvuþH¸^a¦ÔG§çÉŸ£aU–> K>i½ èÏóûUNH9“PF§)¡îò+µQâ0Kö†ÈÊmÜ'ŠÂ ¹\vRt§HHUþeÕ)Óîm‘è³;) i¢äktHË{•Ns¯¥Dªòï*kG¤V}¤¥¼ºZÑ2\­jŠœ†¦hl´¢?wW­Ži,&ÅC4×ñ+_îR•Ìim…v‰hñ7’„B8jŠ·¬’MÇÙLíMÓùèîrÊÚñµºvTWÉù á1) Z¤Õ] Ô|XI±œ^ÉUÄ:é•ên"~3íàÊ ýÊ#+Bôhø¤!WIu»NÉ—ºëG‘¢ôI)‹^™ž“PES?C{“5°ÇØ^ýù'QÚ£%ÏÔh×å—NUË×¶¢(¹ \ûÓ9-UÕKà¹jK„ÂH]9mUTÂpFk#f‰¶÷ò‡Ó·¡L´Í@J\ŠºM’¦™~t~Õúõ×7=£ú M‘ÝØâ!í{R­½ˆ4z[$‹µTjíj‘RjÊMG•6Z}Qw«¢ðSSªÄå |Ú¸xfÔPú¶PœªDŸo Ô“Û¥)5ŒPsQú‘“ˆÏ§ð ic'e–ZŸ œ…‰6¸î…¡DVløÛØ©ÆÙ¥õ1´3 å"|ûÞËQþié†ï5ï´?¼œ÷ˆJ¥!R)” þ·NÙ®1h}â Mÿoø•æ)Šüdå„´#Aco@³¿¦|0¼Rh£ô¬¿Ó=Ãï£9%NºoÓßäG9S• Zµ BÄ9ü=ã•ôûó†?°û䟤|QVr×l•P²©)^ôÇçb8q©Ê ã”hýb˜¾Æ±|AõJýUày‘Nw‘"“V,+sÕúù·(Ð6mö*É¡î’cV"»iG€ü ñY•+üó7 ”êÛ»8§ÝXýÊ©ÿSwOÑ÷Ç%U­þß®ÑåŠä2 Ñ"R¨hWw`ÐüŠ>JÙY¥´Q¯êW»?{eeeÔ6õ:–óóÎ;Ozûí·g/œJöo|cÜüþò—¿ÄÂÜõBmñ>²BÚ~ÙkÉ®!›M6!v%“þHF»ê(Ü‚­&@îÚ¹þ(„ š€A…€A;jBMð ÜWQÓyŒŽsÄø0Ôš–Óþõô—¶xÒ¡ 3Ôß·x«(ÞJ/Y4¶7Å´<{ˆ6ÇõÑÇ#© °$Cÿv"(¡0—^R&5Bûj›Ò2@/–c0"Í$§¦"-¶þ8=´2ÂG%LMK‹šVä|΃Ï3Doñèû½ eìÐà ’©LcÉ£ˆcˆÖ»§d„®«q§!êI(íJΠ7O¡ ûàõHl´üû¡ÅzBiø’S(†q‘ñ¦ÓDþDÕÉåõ¥b‘Önä|Ò·$ÉiaòIïþ#Ô¡gh>H¡·jJ²>tI D«ûåú2”rÝS9`õˆÅÓY‰ts\#G±zxbAHÚ"j·/3QÖañ`‘”“Ú[(êÏÑÏ"·GúY'–V´~qb±‡-Ú2u˜jŸ¨´ÕÔ ýoÏè7ÉÉTÞX~|´Šm@Õ‘Š%KF? úiµ×¥.Xíg5|.ùN¬~õ«_áÖ[oÕû(?üáñàƒŽrŸ+W_}5Æ£càâ‹/¦U2Bk-›pHøýt¯‹ì_ÉŠ‹XF¦Yq­¹‹£p×Å¹Þ ŽvN˜C^d!Y¨£p3˜xõå†Hùb¼h’·$3êÀ#?as@¼ŒEÆjX¿an¤ˆIz˜{¡)Íqþâ¥Ñs¬&r¾FçAô±Ç®à'#G¨9­æcÜiˆzŠÈŒ'c`£åÇp”…Â%B\äG/—Ë«$j>i"!ŸiB ¢ÏîEÍöõ´r»:eæþ»Á'áë^,ŒuãÉ.(#ë ¢¬A“·àtÆr>OJ,½)/)B ÆCp› ãMvþÐM‡3nZô,ú§%R¨‰Ü‹Öî£ÇÝ´77¿š‹Š¼k1oà%lß->ñÉǃÿ'¼P@Ķ>¼Ýx„„Béà­ÁB0Ê3®ý‡sQÆÅDÉ—–ÆDò1¶°áëv,í,Rû•û§ÐŠV\ã‘)ƒ ð}àPÛᔣ~%Æz>µ_¢O Bæ9?¡SJ¦Ï&ÿi=ú±H4¾&ìsßdFÅflˡڪÂ…j2- ÿé‚È€ÜO‡¬ûQÙc‡1¸ñÆé…âqORÅçsU0ÐMŸ!ŽG( ª(''gŒ5ÅÞ ­F8?L€ Üy˜vˆéÍLx`¦ù+P”Ÿ‡‹Ã+ÂxÎß1á“w— èÃkâ¢Õ|ªpf~®EoÅÓ¤éû "¿´»ÜÝfcÊŠ÷í~,̧]+ ¬a…-cŠ=Hìvvöm+9PAé`P¢^šæ_Lý"öK±ø‰š{`s”Àù矯}íkø×ý×qøÝï~‡S§Naùòåã ?“Õ××;û_üâÇ–&±ä?’Ñî‡: ·`+–ÿ +ܵsýQ¬i×ÚQ&ĵ8 7ÍjîsìS"À† 0&À˜`L€ 0qèííEVVþúW±Òzìæë_ÿ:}ôѱœá!n¸áœ8qbÌ¥H¦ÏlÞzë-,\¸pÌaçR€Dÿ”@LÊÙ0&À˜`L€ 0&ÀfeË–ÑÎQb©ñ™ŠŠ ¼òŠØidî±JB¬–¹å–[X(0p † V!ñÊN[ Ô§Mqâl|ý´UÏÔwÌ!å"ÞTî)@AñoÛF[J¶‘«õ•8@{«‡®h÷ã\‡`L€ 0&Àf9ú§w ?þøc;üL øƒü¢Üã1wß}÷x‚q˜#À‚«xeç­6; ·þAV¯8åx†ß ñЯÿ×hCGFÚª·%!iÛ¡ }˜…ë$äVªû¬z;°-‰üÔù:+ó”[©º«ñ剸¼¨/Î-éÁ6ãŽËýMe²û¡NÒ@Œ>ìI½i›wáß~{{ _9ÿ ¬ÝÓ:Ë!]‡ñÒþ(,kSëÃQ.9"@ðý‘ÌnGµ­Žñï;»qé˜`L€ 0±+ÄÊñ±»ÁÏþóñŸQázzzð“Ÿüd\yž7oòòòÆ–% $V}Ä-7¦yôyžªqy|ÑzûcOñÈóc- Râ–Nç S¦F›Û‡bn~úCy?- â(k± çU#¼áàVìoêלÔ#©U?p’ãs‹€)¸­¨L¾Q¸îQšþ«ÆÛ‰Ý7ïíŽ/®NC÷¡‡ñ‰Ö_âK¦_ãG~ŽÒµ´ËÈ–J+3'ûœS&À˜`³ŽÀßüÍß   `Båúæ7¿)o)9¡Hf@ಲ2øh+òñ˜ 6ࢋ.OP“`X0`2±ìøüµIž¾O,¶ä3¯bßþB4¿j¼* N$|7⃗ö舙§Ú(#m޽÷æï£3TvÕÀZ|â29sZì:Û‹‡kzdÇâÌh°Ûäyû{ q]v |b{û¿ôá󵸔NÿÞz-þÜc\i GÓ¿4’-Hߣ— Ä’*D&huí~˜hC:»ñã½ûq¬W@UMÊj–$<¼éo5—uŒü¬ÐÆd^Ú/=J‰Fù™´ºŽ’¾Í˜`L`–»ˆ] Æk^ýuüð‡?oðN”ñÈ‘#ãÎë—¿üåq‡å€‰E€Ó^>tÖ@^6--ËáÉn+¯,‰§=´÷äæÒÛÕ6;Pà÷SV×iÈyw}9²“L0™LÈ.(Çóݧ赾ÁKˆ‹!CœIÙÛPÓ¦¼q÷öÔáVó9LaN*²s‹ +ÒqÇ*)?”ž‰òœŸžcäü¤¦šh)ÿt iÓ"Z¿'ye5hªS–ìç–ÇsùøAØþ-öeþ7ìü¿°Q)n-Géexpw3¬Ž*lðïW~CòràŠì˜ú-œ#ÿg{ˆïÑÄ!ËN ƒÜâº@=«^5J5{ˆ_.êº5)Ç êÊè³âjm䨍°£S _¿Â¯·»¹T7mM( ¶#×µúnµÀj„c®KŸÈkå_kÓ¹¨<®®É Õå›mh¦¸›/Dnv6ÊŽÑ=ÑÎ-fרízLí^IG´ûCåÅU-Š|ê¬GA®–·$iö£r[.…5~Žâí®C.ÕC`Bº&Shåʦg‚ª'Ò³"VSZ¦ÔTzN²(E?ÿî6ì¡ç_ö“½=$è¤ú×꺠R¯+Ä‹¶š2Ûl%oúò9`L€ 0& X´h6oÞÜ.ÑÄUv,Ri…C²™ÅµUjV¼ ´Ø•û6»ÔØÒ ÙóÍʵµBRc AqXr)ñÚìµRk‹S*¡|Èi·ž•†O·Jö"«|m+qHµR¯H/–ü4–Êá¬%ÕRKc•dù7;¤³r.¨¼V%‘VQ©]ªjì ‘?áä–ª„_Kp9fG»Žò$Ò¨hlŠTVÕ] Wñ4káCÇw²¶Há%‡-‘N޲3rºA²Ç“]­Rû€$œl*ª*¤|›C¢ËMpºJþE¹4&Z9E®{~{‹¤d%PWöÚFÉYQ¢ÔKUW„ôaBÕ¯èvUøËmÎ/•*›¤5¿ñÔ¥ÜF,’½Ú)56VKùr»²I.Q¸‘ÓRu©MIלOíªBªn¡ú§0›ˆÿMûu­ÝŸVók©üì8ŠÔvïç Ï€dϹHªm$–UÉá<){l,UÂ;Ok `Dj(m5_Í©«JyJ«¤Æ†jÉNÏhaŸ·úìRZNz¶í6cüþ6âoÏ÷ׇx6JR‘ü¬˜¥F¥¡H#½NÙ¥¤J~Ö«ìTö“,&À˜`L _|Ñðû*~cÇj?ó™ÏHnwøQu¨tg‚[uuõ˜YèÙ‘‚Ç™PÌ„É#±»¬˜ãй®˜óй¯˜‹¹°˜‹¹±˜#/#+æÌbî,æÐb.-æÔbn-æØb®-æÜbî-æàb..æäbn.æèâí¥6o׿ñÚ¼žnÏhhj ˆÄX00Íl¸U2S‡åhWgê¤WLdh¾.m²VÕ%:(uÒi.•Nëò#OrFM¨FNÖʹ¤1à8ì’òEgi­’ #]U²Ÿ yF§z‹!?BÐHÒ@ƒ2‘m'\j~a–ª]Ñ:Øà µ–ÕÑ‚ 廂fonMHb±Ë“î®4÷ ,UÊ$QKIϺj%›5_²Ó$Öa/‘lùIF¯÷ñ<¸a®mÕR¯Kí ókýB‘^¥®l~AÀˆ_`¢6‰Q©ÇR¿ÚÄ´¤6 `Ð&Ûö1åU~¡Îøêòd•X¥VuwÉÂ.k…+ï‚E ®ÝŸ•j@ Õ^ÀDk÷µqYà`SÚx $MðO*ì­ªpÂÝ* œ,ŽVÙ[»C,Rc‰P¨g¥«Z€4hþÕgG‹_ãosh ³ŠÐ‚X5ÈR8!/qÈÏ Ö¸Õk‹ž¾|Θ`L€ Œ"ð…/|Aþ=¥ù˸7Ýt“4<<{„ñüã%zã?néé魤Ś ö—Ђ1ág3ݼý8^WI[áÑûÛJà ‘ë÷bm†r#m‘îs´ðÜÛ‹F']˜³d’|ƒþ-Z¼Ü tOs׎ÃçÞ—O¿¶ùӚɚ–á:šáÔò2õáE»ß‡#Ã?êYøü¼Ž†fòä*ÄuÉõâûäP®7tKÔ-àRîOóṤݰµ$Ý@ón”#½iB Ùx:›±_õÒüH -*7šŒÕ›qøèâþ;ïÄWî/ÁáÊX©e´éçiKËƒŽ•­Æ8C^ÙŠeæ­t‹–¬Unöë𹕺:²}•ºŒÝ„í¢ÎÏ(õ*®XêW gÅWþP*fÁ!œ^üÃÔ¶Æ_—ž¾Ô؃m´<ÿªíG(Æ4Y’(Gî='·/÷‡#òe¤aÛ™ç”ÒÎò¯Á%º¢µ{¤¬ÂÖ½ÙŽtZÚ¿§òé1&%ë•Îurèûù˜‹6çÈ÷¯øt.›qóâ$ä—£­Oû̃ö•ñ¬Œ¨Í}#ù—??HÍ‘ãs¿§/·Åù7¨JB“![XòpS¦ü#&½V ¢øI äæ½ÃLŸèlá&jãl˜`L€ 0ˆþã?þ))ÊokDn¾ð òg ##úßñøÖÙ³gAœ;'>ŸÙ³għlfñæŸÍtðt  =Iá]i•_þÛ·pªY̬U£ŸDº#êœÄüÃ|ÅCU5`Ø’E¼ïƈ:Y Aøü¨!ÌE¨µçô‘â@‡åWŠ•.†Ü‡‹>Š;eîL(/"ÓiØü¯­°\‡ý¿‰ÔüSQt-ôaŸy;MÆJàX÷* ÷íÅnÚâðpÁê ’‘ªóK¾ßlhÀŽ ßb%Ϫešô`ÔÍ(íh§Içmr¨ú¦åãØµ~4¤¸p¹¼v(Td±×¯›´íR A¿•ió(í‡oŒu9Ôv ÖSjßý>6’¬aë>P(T†Ã¸…mg~ÿçûÏĉ nÃõè‹dlx¸ íëþ?<òÐìÛ±û~TŠÞö‡™¼_| »›÷áù¶¯ÀýヴС UßÄ":íº>òìÝ¿N²µ'‡±9+^P¢¥ÕN\{! < Qµ]iô1Šÿ‡òS2VRÒXéîÅ-UûQV¸Û›àhE;Žˆ•hl˜`L€ 0P–-[†oûÛÚ÷'bž}öYzéA:¹jj v=˜‰æ¯ý+¶lÙ‚S§hŒo#c˜X¦^$ûw¶¾F‚ È PÀ ZOл΅å«ÿÔ™cÓKobç%©ÔÃkâ©% t-cžILèc4i˱ÑBo]›Sñ´}É’QÁÆ&߉7w —æü«µwÒJ…}®XÆ´•o‡XÏPýX)¶dÄ+ûœ8¸Ã†»6´cS¦–`˜À™&“7P9ãblÕ8ýƒظl#Ù/£eà(n A¬i¾:ùýÄ*lذ6¶¤ÆP¿úyO™X_{í2j~¾qÔ¥ ŠŠô6=ŒL:ë~]]µ¡I+ÔÓ…ða¼&í äÒ‹çAjŽÍXI³hoÏ1ü˪YîŽk Öl*Àa²[÷dcã¾v¼E‹b2éqËúü—©¹Ð„{EN¦´åvÃS˜±2UæâÁ‚J,ÈÙ#¿~•I¹áYQ_ög­¹ VÆÐ–¢äÚ;-›w>‚Í Ø´ ûŸ>! ˆ§ØK»¡bJJÓó'Ì'L€ 0&Àf.ï|ç;8tèÞxƒVENÀ<ýôÓ¸ð ñãÿx±LOPZ䎢¢"<÷ÜsÊÀ¾}û&¼cBàÀ“B`fŠº&ÅôFúâóÏ¡££ eyfy¹qÝÏ~#¯ˆš«ä,ÜYJ“˜æBl'MÿÇס8{1äÕÛê|,T)+­ ]´lÚ†Ç:1ØßMוIrQÑÃdèDóóèîéƒG¼j2pÇwKÉ×>,Í+Ãñî>ôõt¢þP%šÔ¥×áÀGž†ÏÙÄÂiÚi`ûtô R>;qà[ù²Vûûnÿdpÿuæ†TÙÔKe®+_èÓövÂ:y‚V ˆ‰ÔJü ÅNG¬…cH ƒ>]_ÈëÓ¤enÀ‰ö*òáÄúÅòN)YwÊŸG4ï^‡‚õèéëC7µ•C‡šÂ¶‘Øë·ë>[Œc=è#mýˆ7ý(Âíf!”O]&ãÒ+ĤúYyüñÇqß}÷áƒ>˜hTS^|6 vh˜èö‹k×®oQ8eÕ–P ‰'GX!@–•†×'1¾;#½’ÃP„b³WIuW³ÐºO Ëh~+ÙªŠÚ4¥eUšò>9U#;ù5ÓnN¡(-‚òA9³Ã')í@8ª_©¤º]Õ„O>Hƒ|à¾YQK~(h—Ó.ÑôJqjÖ¯,Q”WUpš[jpµµ‹øJk<#ZØÉA‹t Ev¤¥*ý“wk²’D»Ay§ÝgÏè± IDAT&¥zuŽZ¤ã9Rº†2G»–¤Ó-ŠÒ9X´Ý¤ÚE+¾Æ¶Ñ ô ¹‹R¿Z;Ê/Rw ëÊ&5ªŠï´¸ÆZ—î.§dñ×»YrTW) ÿHᤦ€°½ZÛêRhÕ¤:ÜDaò«UEˆ±¶³† R i•,+íJÑ.ÕŠ6"íJ0ÜåW4©p4Kö£ÂIw«ÂÞªíz!ƒíBÙ1Dão-©Uw• ¡žrîm‘ŠÔÝ>´pÚ³¬ð§ÝEüJÕöi Ô«Û¥)U< wi&¥¤-Ú. *3DÜD. ÿcL€ 0&0g ””(J±µß剳²²$Ò=ð,OŸ>-åääøÇä)óoûÛ„/o¢f¸ßGöz²×‘½–¬XvšM6!v%ˆ&2Óî‡: ·`« „»v®? Á‚&`GñšV;jBqÔÜWQÅ>F׳Þx†èýtjÒä%À^ #5##øÓïˆÖYq­¹‹£¸§?Šs½‚í:œÐ‡¼È/iC…›Áh~ƒ£îB»ê(Ü‚­˜ä +ܵsý‘† HžÎ$8ŠVwdõ‰©1äÁÓQŽôœc(u|Yénüt{¡ü޽u€ôuhŸŒ!BáÕÛ‚ÔU8HJ‡ÞQ¸0ƘÙ;`L€ 0& Þ|óMüýßÿ=Μ9·ÑêˆO n¼ñƸÅ9‘ˆhkEìß¿ÿò/ÿ—O¯ãÇËú&’¯¹6ÑbÒΆ 09HÀ4Šòóp±ÿû™!õŠa/ºíGû#ù¥hpM@(@Å÷¾Ý…ù´›Â^+ fVsàÜ2&À˜ˆ™Àå—_Žºº:Ì›gÜ8æBxìééÅbÁÎ;ã*p‘TD'±"â‰'žÀÕW_ ±¥`<ô ,]º¿øÅ/X(‘üÌ¿©­Wí~¨£p ¶Úêá®ë¼b ivgL€ 0&À˜`L`Ê<óÌ3¸ë®» &Óñ4©¤ Øf³ÉB‚k®ŸO“w±ûÂ+¯¼·Å b¥€X1Àfb}Å€6áWJí~¨£p ¶š@¸kçú# ‘fw&À˜`L€ 0&À¦”Àc=†ü|± Ö䱊àÎ;ïÄÆ!>7ˆ§_|Ï>û¬üF?ž‘ÏóÎ;õõõ¸í¶Ûâ™í9W¢ FkÏš³UÅgL€ 0&À˜`L`.¸ÿþûå¥ÿ´[Á¤»¹¹ sÕUWaÆ X±b–,Y‚Ë.»ÌoSR¢kÖöÂð¿0à¹çžÃ»ï¾;)ù‘Š­ Y(0ix.bm%@¸Œi÷C…[°ÕVwí\äáH³;`L€ 0&À˜`ÓB@¬xàà»MƒÉ ÝÈô‚‘…ÁÁAƒõzi ©)2ßøÆ7ðïÿþïS”ÚÜH&ÑW hþpµ¡ÝunÁVwí\dÁ@8ÒìΘ`L€ 0&À˜À´øÕ¯~…Í›7ÃívO[¦;añùÀ÷¿ÿ}Yq!Md§;;³*ýD ˆI;&À˜`L€ 0&À˜Àœ&pË-·ÈËô333ç$‡K.¹B8òÏÿüÏ`¡ÀÜk,˜{uÎ%fL€ 0&À˜`L O}êShooÇÝwßâîìuºñÆñÇ?þQÞrqö–’K‰ "Ñá{L€ 0&À˜`L€ Ì) .ÄSO=…§Ÿ~â|6±2@(^lllÄ¥—^:›‹Êe‹B€Qñm&À˜`L€ 0&Àæ/}éK[Z­ÖYYø ÈÛ>üðÃòÖ„³²\¨˜ °` fTì‘ 0&À˜`L€ 0¹D@|wôèQùúg>ó™YQô‹.ºßùÎwðꫯòv„³¢FãS ć#ǘ`L€ 0&À˜À,%››‹¶¶6üìg?êU«fd)Åvˆv»ÿû¿ÿ‹}ûöA=Ø0 4|dL€ 0&À˜`L€ D ð…/|xòÉ'!v1ø›¿IüéÔŠ+ðØcáÔ©SصkÒÓÓ#”oÍUÑ6§Ôî‡: ·`+ž a…»v®?ž§ºkÇdõZ…›f5÷U’$=Fîl˜`L€ 0&À˜` EàÍ7ßÄáÇqèÐ!¼öÚk “·yóæáÿññõ¯B˜1 o’2BŠ裡»Èþ•¬ìÇ:+®5wq÷ôGq®·’îZœ‡²ä,»‡: 7ƒÑ&üGÝ…v?ÔQ¸[M ܵsýQhGMÀ‚t>eL€ 0&À˜`L`fèèèu455áĉxÿý÷§¬^x¡,X¿~=„ú„p€Mâ`Á€Q@  ´# §­rN˜`L€ 0&À˜ˆŸÏ‡ÿþïÿÆ /¼ ïlÐÓÓƒ“'OâÌ™3Ž=55UÞFqÍš5²@>ýéO#9YL­Ø$*D pëIÔ–ÃùbL€ 0&À˜`L`F“t±”_X½y÷ÝweAoo/Ün7Î;'Û>ø@>ã‚ .€ØJpáÂ…ò1ø\Ø0x`Á@¼‰r|L€ 0&À˜`L€ 0>ñ‰Oàþádâ6;1i# ¾ÿgØ`L€ 0&À˜`L€ ÌQ,˜£ÏÅfL€ 0&À˜`L€ 0& °`€Û`L€ 0&À˜`L€ 09L€s¸ò¹èL€ 0&À˜`L€ 0&ÀX0Àm€ 0&À˜`L€ 0&À˜À&À‚9\ù\t&À˜`L€ 0&À˜`,à6À˜`L€ 0&À˜`L``ÁÀ®|.:`L€ 0&À˜`L€ 0 p`L€ 0&À˜`L€ 0&0‡ °``W> 0&À˜`L€ 0&À˜ ¸ 0&À˜`L€ 0&À˜˜ÃX00‡+Ÿ‹Î˜`L€ 0&À˜`L€Ü˜`L€ 0&À˜`L€ Ìa,˜Ã•ÏEgL€ 0&À˜`L€ 0&À‚nL€ 0&À˜`L€ 0&Àæ0 ÌáÊç¢3&À˜`L€ 0&À˜`Á·&À˜`L€ 0&À˜`s˜ æpåsÑ™`L€ 0&À˜`L€ °`€Û`L€ 0&À˜`L€ 09L€s¸ò¹èL€ 0&À˜`L€ 0&ÀX0Àm€ 0&À˜`L€ 0&À˜À&À‚9\ù\t&À˜`L€ 0&À˜`,à6À˜`L€ 0&À˜`L``ÁÀ®|.:`L€ 0&À˜`L€ 0 p`L€ 0&À˜`L€ 0&0‡ °``W> 0&À˜`L€ 0&À˜ ¸ 0&À˜`L€ 0&À˜˜ÃX00‡+Ÿ‹Î˜`L€ 0&À˜`L€Ü˜`L€ 0&À˜`L€ Ìa,˜Ã•ÏEgL€ 0&À˜`L€ 0&À‚nL€ 0&À˜`L€ 0&Àæ0 ÌáÊç¢3&À˜`L€ 0&À˜`Á·&À˜`L€ 0&À˜`s˜ æpåsÑ™˜<ííí“9Ç̘Àœ%À}Ëœ­z.8`L`R °``RñräL€ ÌU999sµè\n&À&‘÷-“—£fL€ Ìa,˜Ã•ÏEgL`òð[½ÉcË13¹L€û–¹\û\v&À˜Àä`ÁÀä±`Ì>x††0DÖãñÀãõÂç›`”ñîóúóçõN,sžž&ìÙ–‹¤¤$Õf#;wê{¼ñÎ5ÇǦ„ÀÔ¾Õãþ‚û‹)iÖœHà¾%¨x,d&\zÑT^Œm(ض eõ=3!ÓœG&0ë $Ïúΰú»ñÓªJØwï‡+DÞÍ+Ö­Ûˆ=¥ÈLöâXy!ª{æc>ÞAÖíßîMYA¡|8~àÛ8øÊ9Ì?Üþ=6e¥È~|}MøöwŸÆ¹‹Eø€9wŽ<’KÖšëñ¹ 7cMfFà&yû;pðßJQ¸ßip̰X×a—à ™JAB^z»k¾jkÐ=\Í.ô¾w€Üc+(’ ]z{êQø½g1ÿbàsYøgÇ.¬ ÊŠ¯Ÿî&†nÖV8vm˜¦ÜN¨¨xˆ·z“=€çþB«¸éï/´œð‘ L6î[Âse,n¬&S ñš±-¼üSXëí¸imÖ ƒŒàõcûq¤Y©K˵ÅxH9åÿL€ $0$Ê›°be°ç©VLdÏ';¬˜.¥’½€lÙt²Ÿ »€,M«°˜ì¥d—’½‚ì2²W’]Av%ÙkÈf“]CöZ²×‘½žì}Òœ1ÃRkU‘DeŽÁZ¤V·ã–*,ÿG{ZF?Žö³~?îvG iA²”6H#j(·«*j}þÄž Kµù2ˆò—T9¥†Ú )ßb‘ª\rAÆžÌnW…®¬V•¹1ECK… kôÇWL ¾¸¿ÐúÊDé/â[¿˜.Ü·$ZßbgD#šó%g×L‰¸¥*k`ìg 9~®g€Óe“G€ú—ûÈŠ9®˜ëŠ9¯˜ûŠ9°˜ ‹9±˜‹9ò2²bÎ,æÎb-æÒbN-æÖbŽ-æÚbÎ-æÞb.æâbN.ææbŽ.æêÚ¼]›ÇkózºÚðŠÐ\¦ØÕ‡¦²ÛpóÞfcº–|TÜw .;ÿ#ôþ¹¯¼ØŒƒN£Ÿy¢Y¨Fwª9ÉG½à “h?c¶X°gÐLoêõ¦yïFütË0¶džÆ>óvý-X‹ìøÒõ—ã®?¡©nœÔ;bðåƒ?¿ðb±·âá{ÖÊ6n$À™xÊF™ †ü@"4g&ï­÷Z£JäþBË#™@¼ pß2ÇÆ"Aã yu¦e!5«Ñã5¸ºê JOã¡Ü%ñnz`³œÏc ‚½ÝGF Jk](Ù¼Z÷²øþÓ;ˆ®—ßÀåB6WcEÕ/b É›|žùÖØ~0 øM[/¶,>‡Wuišíí8ºkßeçCc°¾»ÄøéßCÈ£!ý"ýG ¡зÔRi–>LtÒRÆØ„é[D¡!9%%ˆm¨´âåæƒ¦ƒ!99ÂF3^éV 2ŽŒ£Œ^ÒGA‰ eT:cÏG´|òýð&ë3î/Ìgg(Ÿ1P¸o™ÛcGû ì\#^’¡1Í`ßK¨¸=ôï–öÞ¼yDZZ¼C 6††Q0Ð#-mRÆBÃg— 9¡qŸ<&¢Hc÷M„M„ñ¥Oè “ Fc@·FަÀ.L`*ˆ¥l¦•€¿xÄø¾¨ö$%P2™œ²«×®AÆ$ô*ô!›ä´,Üó¢ãòú;ôMTÕŸ"ùÎr| ó¡œ.ÊÌ¢P?D£|}õåÈMZŠÝºEÎfä‘"šÜÜ<Ôé’°¢¦¼ÙI&¤§§Â”šŠt’d磾£TìB?@^n.òòò›W†nÏ ê)|’)©öGC£ÂÄÝÁÓ‡:R®#ò,ÒÖd2!);ÛÊêAÓ÷ ãCgýäe'!•Ê(ü‹2攣s(X¹£õeĉÊ'Ê)÷ u×c[.…iÝú8ü%s>‚²Å—ã" ÞêÅßp1kû‹ø7Žq–à¾e®Etãä,ʺ=%f}ƒ?‚GA/jtÆ7؉Åyò8(]ŒÒÓaJÊEy}§ß—¯ï#”±“[8>è¿ç?ñõ¡œ”Eçåå¢à@›ßYLàcÃè‚…;Ó¸/ô˜¨@‰ñWR6ÊëeÕ' ÍÿXÆ—}mu(Î˖ǬÊ8ÐDùHBv6+×ÖxòqfоEоMоUÓR±²Z|ÇÀ:&ò)Š»]²¾+’NjôG7–o´Œ~ôßÿCß®ÿœ¿×)ÑoŒÿûüê.IÎ+é(©–z‡£f4¤‡v‡Å?µ£QçöVå;9wW­DBŠQ÷õa¬öFIŸ w»^?…5Ãë9„Ì9Fä£2ø!~„Ã]RQ¤<[Aú¤ª|s„2Z¥Æ}à ݺïóô,äs«š—1ç# vOÜ_„}F¦»¿HˆöÁ™`ã%À}KÂö-†q+Â_ζÚe°VùÇ$gÛ#뇲Ø[]RÃ.ɦ»èâКÖÙÖ€~ªüÚ“ªóØÇ0‘t Œ}ÜeL¤+“µ¢U+Š|Œ™*ÖñeWm¾±>tyã´põhÈ_Ì:T÷÷‘½žlBêàT3Ój‚ÞÂ[ì_FÖ$¬ˆ^Æ4’hª¾HJ[^h5ìŠð©•KI­…;Š "i4ïÛŠe©Ù(«9xC=1ÙÇŸ-‚½„Ä"c…£Â»Ý¯ õ ¾n|kÕ]hÖù)ªh@{«ùº¬8wߌÒcº•Bl¥7¯"ô®“vÞ÷‹Jì×Å^TáDkk+Õ(Í·À|õņ¥d‡¾aøtÃf¯EkK5tœ¸ùá_ëbT$rýÅ©嫱æCŸOŒÀ¤¼Õãþ"¨RfGT(¾d pßÂc‘P $#{#hR0î•åëÞNìÌѯLµ¡¶¥ÕºñWóîñË~Z‰²ù¥ºõ¢ÎGÐÜGî~ãEã…ê•÷~^Ù kcã À+&YV5|²ÖðfÞ\j”dFNÞ¸ ´VW£½„Ò(…6K%Ž ÉQBÂi.•Nké•aßTÛ¤†“ú÷öZ HÇ.ƒtÚZA+tædÄU^¹ Ý?Û´Ú¢DêU_ª˦¬(uºäUÃn·au]ðчU2¬¨P=üèV ´;¬:I±Ej‰¤$xä¤au¹¤ÑŸ•aÃÎùR—¯±^éÙ–`µK®ò02,u+Ç”ª|’¨¸¿HÜþ"QÛ ç‹ ÄB€û–Äí[ ㌈ošƒÆê˜Ä8޲H Z‹0¾eׯWÃ]Õºñ $ÃØòl‹§¹Hݱ*c}ÆüBÒò%ç:ì¸/¨ìÄÉjoPWL¸¥Ú"ã U[…KŽÎ˜Vt6"Pp}ˆñרñ%­°%!Ÿ£Õ>–±½œ5þ7K P{áãHÌ™ #çÞ7¼™_xQ°(rªP¸°¯p ÷é$œrÒ646”À¯Û69;ž…ÓnK«™<‚W¥âÐX¾ß÷’î½ùPíÅ+¿mÕÝÍǃw® \g¬Å7í:É6©F<3¸­?+mèÅC›VË{y¤²Õ è£ÓùŸÔùoÆúI(.¯AGßÎ]9õöµV,§MHzzºÑÝ݃Wß|Oçÿm¼gÔÕ¸g±£÷è.¬ è›ÃŒ4¥„cÉG 2>‹Éx«Çý…¾ Zš%ýE<ÚÇ1wpßBuÍc‘¼ø•~\—N›ôÐø¢›Æ¯càT š·….)2)+o]÷–ÝYx=ê¢î†#þœÜ{½¼ò1.c6â3î3ç×â©]T½Xiؼç»ôŽ>`<ŠÁÔØÙbœ…_¦,”÷™Ó|9w¯CéĪiêÀÐhSš7>2i'ÀŸLs¤-3ë–‹Sfƶן1÷¡×QýÄxe¶Øà¨mÁÙ‘ÃÈ]¼Ü)›v†»·v›¾«U"ßžótÆ¥ãÁûïè¿ÈÂåA3ú%WfëJt •° ·ß”©ó7ù§™7}¤cÀ`öïÞŠœe ½­ ƒº¥yôû¤§(>‹¸êªUXµê*äX÷êâp¢íõÑ‚áÁz÷F„*á˜ò¡K‰O'N`24‡s©^fn©T| à¾E#Âc„|ôÆïœzñ)Á>Ò;Á‰4¶Xµj3r°W7Är6½ìw¾¸;_j?þ«]Œ=Qkׄ ¥¸cµªŽ:c˜@bñéÇ—¯ù;ã  ´E†q–’ÞxØrªœ…_fâkµA£@ç~l½9 Äç·uê.Áññ5˜^,˜^þ£RoÞýŒzdGy ëà½K@XÏ£nXÑzvmM0Löå¦Ãعù†ˆ»¤e®Å®Ã/ãd£#¨Ã=ˆæWCO`G%;ËE†ïòEÐÔ èbpá£oÔé§.¤».hÔS7Þ %s.e%qwÁAú‚ëÈ^ä,¾ÇÄ÷|dFF<†U#ÂÍl6û­,6%,[¨)‚¾tF–~뮵Ó1äC ÂÇø˜Œ·zÁ9ãþ"˜ˆîzZû ]>ø” Ä™÷-F sk,b,»þÊ{²Ú´]¸›³WÈoÌ? Zh%Æ£ÆÂÿ'/ƒ6ÂÈÚh3ìLµû©6 õüÆ/H°UåùW’Æe £/ˆþ|¼ýø¨1QèAàxØè³!J 5²6?‚“ ÁãcÚ…½wå §ì Œ0ù*°``º+!í äæŽûñh]ì¢EÅœRˆææ?„Pè5,‹T\“Ø÷žlŠ8ŽÁdåîD}°dt áÃ{¥Ï*æëî6wc@÷¢]Üyë5ý–pV¬\´¤@|b§ÍøýŸG ;¼ïê—ú‹Ízt&m%vV6Á}Ú…ZGä˜ã•×)¢úÔù uèí¿£/¿ü²ßJÒË^– IMØ”9ŽòŘC&øbÂ&ã­¸¿ˆP/‰Ô_DÈ&ßb$À}Kh€sc,ºìb‚ú³Ùj¸yûçÍô2Å„ë×$ZÑ>_ˆ±†<Æ$¼üð¦ÀË—Œkñ€aÑÀFÜtç]jül¿}µ?­øŽaâÔÏ ú,×ó.Nûs ¸åóq²ÑÅí4kÃN¼<↫¥EV£o×Þ ´+K4Œ7øŠ L# L#|%éEøÊ÷í†\ì¿ë*Ú—¾Ûà¸ð¡¯£ =15>—˜æB4t_k{:ŸÅnÝR±tÓØ&ýÈÅ™ƒƒ£'ÇâÎðûA"é0Tá7v“‚5×ÙtÞ÷£¦E·óúñìãúus—`~Ðo.ð˜OM&ã·»Ÿh$zãÁ³w–Î ü¨ú|~!AÚ’ÕØ¼óH |º29óèÅ÷|ñú±C>á³x˜œ·zÜ_„¯›éí/Âç‹ï0øà¾enE‚[Ï<ÿRÊßP7* >‹­Gô>KP°a 9¤`ŵët7œ8ü³NÝu¸ÓÜ|¯ÃpÓ¥%m÷ánÅw Ÿ~üT÷ÿÆk?«òëF9_·B¼/›@Ù#ÑðK1ÉiX}Ãf-µÕ‡EWVW•ÍPQ¥"¬¨û†Z©¢´Hf\ár«y3jàÕkôÕe¬ùЇåóD%Àý…ÖŒj÷ÓÚ_$j{á|1X pß’ˆ}‹q2É$À}ËÜ‹Ç3¡[–Åš g+ÜÒalZi\È2Ö܃Ë8ÂŽeÌÈ߰¯|PKżù^ÃXÆê¸+Å«ÁQ&¾c˜ñŒûôY2çÛá(¡wöcAUëi<”+>±˜±²1ÖGZèÏR"×f $b8³Âát¡®`­Á•/˜@"+"í~¨£p ¶ÚÊá®ëbŸ֎¢{×⨭FGÍ} £ë9f|êïé7Þ!e§&šäÒò š@§_z –.Ê|Ç>ŠŠƒ}}xãÌ{ê^± ™‹b˜ôŠ+œƒž¡!œ={îsçH£¾ð'Ò¹œÒýc.–ñº{‡úñ¶ÛDºÎái&¼dÉ"y¹ÊxãK8Ÿg}½oà*³4˜Hiಫ2‘òGR‰ÙëñÀCv„@‰ºL_°‘ÈÁ¨þˆ/… Ê7Ñ÷„i¤r,¹5ú_>ŒqðÕØˆï€'uïÏ÷~A'ÓÙ_e…/™@Üpß"PÎݱÈD’Ï3„³nY™¾[¦Ò[†Œ4±ð7^&¾c˜Øúqå¥c»S)ƒµÂ…£«á¤1£ÐEŠ3—ÈKš#•2îl|^y è¦1 M¦t,^i)w|o6HJJºŸÊÑEö¯d…&ŠuV\kîâ(îéâ\oÅJ í:ܪ ò"¯4 un£Mø Žº í~¨£p ¶š@¸kçú£&ÐŽš@Y0 ϧL€ 0&À˜`L€ D#$ ÝŽî_'³a‰E ÑbÒΆ 0&ÀâL`r4‡Ç9“`3Ž÷-3®Ê8ÃS@@¿}÷$ÇI0YI€³²Z¹PL€ L7©ùŒ`ºKÉé3&0Õ¸o™jâœÞL FÕÒLÈ:ç‘ $  $LUpF˜˜Mø­ÞlªM. HÜ·$N]pN…@î9*ô’É–?#H”zá|Ì4,˜i5ÆùeL`Fà·z3¢š8“L`Æà¾eÆUg˜ 0&0#°``FTg’ 0™F€ßêÍ´ãü2™A€û–™QOœK&À˜ÀL#0 ÐfZQ9¿L€ 0©#0ÓÞêùú›ðíÝU87>Λí?؇ÜÌxnaedïìÇYÚ’SSú%X’1Á´|ôŸ>+oÁ%¶¦º„¶¦š`ŒÆ óH3­oIlœ &À˜ˆB€Qñm&À˜Àxˆ·zS2€jÞâÌÅçÞÁÂwáá-«Çœåá·þ„ýGŽøÃ][¼wÔ|n)v¸”äÌöV¼¼k­?íñœx\UXšS¨µ ÕÝ„µi㉉Ã0Ä&0e}KbcàÜ1&À˜@œ °` Î@9:&À˜€ 0%BJ§Óù(öé&ô88_ýR%V޵w7M±Nçå”yU0°<Å$MÐèóŸ>Á¸88H\SÕ·$.Î`L€ LÖ10T9N&Àæ<©ù¸On¼åW Dí —åØ`±ZaµXðÉ‹çO8¿¦‹.“ã²RœË'1"²o7Êòr‘›„¤¤$Tvz&œ¿˜"˜®tcÊ{JSÓ·$Ji9L€ 0&0UÆúNiªòÅé0&Àf4©x«çé8†}!(í=ø+|û†-‘¿±÷y᦯ñMÉHIIFê8V ø¼ Ó÷ü¦äPFCñ{}äêålÓC‡±É"ê•×Ct“‰¢LApr)Y›p´)–}ðÊ£¬%'ËvTÂÉ#hw6£Y½ñ!•1VãõzEÄÄ#(‡>JWðý É„n9]<Õ¨’‘6ª¢äZ­£P<}T9»o2ÅTš(óíÉ$0}ËdæŸãfL€ 0Ä$À+³^8WL€ Ìp“ÿVχæÃ? Méˆ/ô‡¾ áØb$™R‘žžŠTšUfo+ÇO[_Þžzäåæ"//¹yåèó¡¾lL©éHO¥8LIÈ+>Dî" ºW¾MŽ?U½·­üŒïܽrø\ŠOÄ»§¦[—vнú>ÀÓAo𳑚žNùM…))šzta`ÌcîtÊyÑyñô¡®¼ÙI&992$egc[Y=4ïÞî:äÑj§.h¡ù6*{.Šk:UWcËê{0Ô]m¹IJÜ·>NÈxzPs`¹g‘®š6ñÚ¶§ƒÊÔ[x-]ᓌˆ·¼@.‹¨C1Iõ˜WŒúŽÑo¬¿2t{©Ž üuô£9·rÔ}mu(&Ö"N¹þ(^­šÈÎÞ†ú’ì•ÿMÉï[¦©`œ,`L€ $4$ʰB€ ìyª/Ä+”óÉŠ;…òçT²êžÄžŸ »€,iÄÂb²—’]Jö ²ËÈ^IvÙ•d¯!›Mv ÙkÉ^Göz²÷Il˜`L`4w«d$ê'%ت¥Þ®jå\u³V¸F‡‘¤ «F æèh?ëïn¯0Ä sè8ÌEÉ‘ú^~íI|’ä6äÃêh{Öü@9ƒòZårûÃóh•Z·$i¸K* +sÓÜ,I+­»Ýa,«æ‡Ž{«šž1ÿ†¸„k•J!.%ŒMjWóÉo ]г«V²èò4*mºgµ7JÃ~2"‘ëO«ë®Úü°eéhþtQó)`L€ 0&#ú-½¬˜ãй®˜óй¯˜‹¹°˜‹¹±˜#/#+æÌbî,æÐb.-æÔbn-æØb®-æÜbî-æàb..æäbn.æèb®®ÍÛµy¼˜Ó Öl˜`L Î&û­^ÏsOùßj—l½ ™+oB©9PçŽ'Ѹ”Ïzj¾‹úWá°¡º¡%$bˆd‚WÒ»B{ví/DáAåž.+²ÃÁ#¿6¬Ы ŽÍpÏyÐ_Î`?i~=à”Gýeß/*±?àEN´¶¶¢ÑYÒ| ÌW_ì_*oºôÓp”äë|f[ ;¾úâ·Y1†P ÐL·™ì¾eºËÇé3&À˜@bÐ$ š¤A“<ðŠ%Cì 0&’ÝÿÖÞ&¹Ô×Ã]U6Ã_ãÞ^©ÄF¼Õ·J-ÚkrÊàIgIذnWÐg ëìG¤†‹!/µœrKÕùæÀ=‹ò]aá–ªt+‚W èïÑO#­ˆpH'E”#½ ?qZ«ä7ó"Nc­þ7ñâ^»Ã‹¡ÜâþhÓ%Ñôݦ¢Kÿþ]ø6æ_ΣÕ.¹ÈßȰtÖ­ú>+>vXrXq[ «%"§{2è~~uW ëgu+Hä¼—H½#Êm#%íR§K^U0ìv+« †Û e¶úWG’à3&À˜`L`üh¼À+SæÁ¹bL€ LÉ|«çíþv«o}­Ž±Z, #³òËқ݀)¬<®*#7J{Sl.ý&nÈø]º\¬^‹ÍT¹HqàJ8«Ö¯Ó²¢áôâ†%"CiXsî5¶ÎטNÍ¥è=¼Y"Êä¸b¹.´ûÃ@ùtÎÁ§ W|RçÔŒõ ’P\^ƒŽ¾!»îÔ{Nw|xŽ´4F2;zîÂêE”IR,˜‘¦VHJ–dÐ9édèéì@Ó±&oú^jD–8%‘Òõâ•ß¶ê|çãÁ;W®3Öâ›vKà¯âL˜l—6ôâ¡M«åu‡)iiò) å5‹ZÎÝëD: jš:0äÕ\ù˜&³oI„òq˜`L`zð§ÓÃSeL`–˜LÍá/ÖþØOÏùøS¨i úõ†oýƒâ}xÐý—¦ u¼m¸wËZy_!à,^Óï 1/xË€@lÆtSHgƒ-p“öY¨iÑí<€~<û¸>âK0?|Ôºx§„I1ÉiX}Ãf7ê+ƒº¶w#û›ÃwyŒ3‡+Ÿ‹Î&@R”8µû¡ŽÂ-Ø Aƒ°Â];×ÏSݵ£yŠûâ(Ü4«¹¯’$é1rŸõf¨Û…ïÜÝ ýKX/G‹ãÜ©âN! o¶¥>÷þÏÃY˜9… ‡Kê ö$ý-ÃMƒ½b1z>ăOÝæßÃ]j¨û”>ðÛÑoçÌ—ÂÕ¶ W÷¾„ÔU@EûWQ°&°ÞÖÛ­¸W¹¾Š{hsøîšg°j«ºÌW$`NEþ櫱«h²hbÓS߈«¬=ú¤¡…58òÅœ# Þê%îÞ‹þ¾·å7ÇóÓ/Á¢ŒÀ30›+ÊëñÀCvdd„ÊnB:é]ÈH @B•Ý;4ˆ·Ýçhr=i‹!Š÷Qh¬ƒÒóyÐú,F(Þ 2–bÌG,éz‡ú)o&Ò%pçH3á%KaÂ5I‚NÁÈ3LŒˆ“É”ŽÅK2 B…d§)$09}‹‡¶ýÛ=f¸®SõaLa¡B%åéCnús8cÿ^Þue(qpó¢†Ê½5‘ÊC©sŒ#ÚP ¶ ¼!1[2°õìÜ|åÄû¦¸$ª—÷;O Íü¿¤¼u Ö\˜¨¹ä|M¤¤¤û).²%+ñÖR³âZsGá®?Šs½•t×â<”%gÙ=ÔQ¸Œq$b¸ÅSEÀÓÙŠfe¹¦ÝùyØ®»=϶aýö7±Þy §ÿlX"d&Sm”4?µôˆö“GÕràµ7P¸o®æ_ã݆/áá Ÿàà3&À’ ¦½Z¼ø¯‡T¡@ã—°+Wé8—ÜsN^X«îz ÿ­#|*ö76¾á¥ÅA/ Æ^Ò”ËqXÊÎç¥ÙuŠ)ö<…ŒeŒŽ©Êàà³k.ޤÿ¥ŠP ÄùE<¼i¡âwÉB¬^»%”ojõzÅb"So¥â+¬Ãj wÏvZEAo0޼~ƒo)·G6"wµXÕ±˜4y‡ZÞ=ö1ûLÎ[½ÙljKĘÀØLVßôEO ™Æ÷Ò¡ãcìŠÁwÌ^h ãK>ÉÉçË+Ü1Œæ1T~S°¥2[¢Ãý?þ¸‡V<Î#ÁÀD"Kì1ŽÜ†,Ë‘Ï:~¬ÃW>÷<ßÜ‹Ö×Þ^0@cgz”¢DEëÆæÂÕŸ…$Þå²a N@,ãg3|}¯á'e€¾ý'U( e'kóM(óÌý¯â¯º—t•mƟȶµÈ.xIèºQWö$’L#ÕtÛÊ_ L€½ÁžÜÃ(«y‡ŠŸ@RÒA|ëágûKtŠ—âšñ  ,ï ×¼ ˆ0õ\½ïí´j„)µŠ´|?Êãgä;Z‚ŸKù«£mÑ3‚ú2Ê[Þóð;Éy 0AePÐá;ðŒœ7‘¿¤ìZÔ¨ßzI;vžé—¨~t÷SÈÍ>ŒÄ|}¯*ZÛ­ŸD‰&Ü&¡Àø>ËV#I[‚êNpÉêjƒW:ßÖ§ÀçL@&0Yoõ/`s›ÀÔô-ô¾çIä•u óx+ý¾Óo2ÙÜâ—Ð/^ ÓÛ÷òÍÏ£™N›o¦ßä'PvŒÆ!ÆåÈ&t•mSÆr\蔵njõéF ¥)Æ0&J«xo+ŽÐ-yÕ€ìÅ‹ºâÃÈÛ㢗ªQÇeõš |ƒo¢¼àp`,Ac•šWúCç—>*åÌ-"ŒE”l(ã©òú?Æ,eu4n cºk~2¬×p[î2GåEøqO¨¨fÆÇçWpºhõßÊúTä:ŒÐ6ú¨å©mL´âÊn]}¢mÔúë´¸ìyl£1ힺ¿(˜ÂÄíü3öäéÚBÞ/Ñ1¨¬jXµ6ÞÑtÙI4vN}yå¯ÓúîwQImUëÒx³C{' =4F¶˜ëÑù¾š]1f¦ñwG=yʳ•”ý Žõø[vô2+Qñ&W,ˆ+αG6|Æ-kÆ.²]⛾tÜþ€Xj:„Þó2p †±ãÑÿÑý öa_áf-¤°ÔY?…»özHùÔz8+.ǑݿŇÔNáæaìÝú[loÊ€Ýþw¸%g!-ñzO¾Pì3ø»?b¯Ó‡lù­üGxåþ¨u¢ô½ßýKI‹ù™KálY» رþ¿Pßÿ1Ò.+†qä7ê$ÙÓ'öÒ2'IŠ{•ŽÎóêkØ×ìÃe—^”È56Âfÿ´¶¬CÉÂ!l]÷ShûÉé ‘g¿TV ¶üö¿ÅÝ_»Yé£'ùÃgÎÉqç)+ÏÉÆèdÒ4œõ÷à§B:AæÂ«¯‹ÜúKú‘oEÏöc£Üçÿs›€x«Ç† 0&oSÓ·|Œ¿¼êsïïa^ïÂÒ’¿ƒ½( Íûÿ€G[Ä$é<\ž#Æ'Â\ˆ»X,ù§}ôXãºKϧez}ؾø9ì=bB…Ó‚–ڿÙƒ=0/xF}yð±<†ÙºÏƒ¢Šuhl0ãÔ>~%!œyyÎÖ!mhæ#¼JãŠæ^ÕENç—Ø}pùŽO£±q%—b½_*g«Í/ŸS·"<QRUʸÛúk³¼ÒŠ¿ƒ^âì½ë8:ôó:-‹tLϺLQ€jNCÞÝ+p÷õ IËI,ié"¡Ó™1ÆIö+íþÕk²ðóÄŠÏÐmcðx#–Qs’^­†ÖÏ¡º4ûw´à³{ºýuRWð¶Òg b|ØÒøi¼³·GhLûjÿG* Ðq¿ñžu_„ê†õh¨ºœö‡}9ß}E7ÐÆsn~¹öO¢4?ÎÝÍ$˜ú)v¸2à¨XFõ6Œ­ßr©‚Šñ„!9ÚÈx¡ó]9)F|¶ÚLãè™p_ ‡ãr˜]ƒØø½NuŒ?BÊ^£•YŒL Ž’ãG5êÜvù•¡&ˤMZ]¬ßÿÁÜkOÅÁÝÝxñ?®E.©œî{þeù ºÓ– _ß˰î§ïï«îÀ®Íâ[¿«QÕð8¶ÿ¤î¹ ä"K§-Ëpòù[‘%×ü” û*ºQ²A(òâÙÿÿÙ{¨¨®,møñ"Ä4Њ¦Å L[vüY’¨¤Á#ÉDèDÓÝ‚=’™Ç•uzF¾ßwp&Î;qõ—è‰ØH:ÐÆ20Ž€A“`«d,¢–ˆ€‰DÑB¥”rêÛçþTÝ*ªŠâ§dŸµnÝ{ÏÏ>û<çÖ½çì³ÏÞ d`ïQ$ Ø.8Óû‘¤÷å—b Õ¿tn0>)ü;ßoÂÒŒ‡ñKZIOûcÚ2hïòé‰7ª5ßaUôD+=+Ñ^8©ë~Ak}Ä¿>3»7D‹b˜W6—ƒËhZÒÈÒª ÷aïÆ÷‘ø‹'‘!©îKÙœ<‹-î¯Ðª½FÔµ4!{m“$ÈÉþg=YNÁ;ÍqX;¡ùä~ ™%Ïàµeôñá0ì¸;«zÃf€vÜ­w‹ºµ »âÚæHÛò¬Mød{j>§eþ„IXñê”o~íkæ"#CùîY®»k€ ùÊã‡Ü˃¿Sq¨ÚŠ1qõø×=Qðã+x•Æ0ñdhñÐö IDATðõ ÙÐ`‚9É!úw”Xz6Ó6§XÇéOr=I¹O#OŒE($$Ь]wüÒ@G¦)[Áöe,"Ä!ÒxŠì ÕZ*y4iz …‹`l°`–?¹„ˆy³±1ɈóÃHÏjö'iBŠq›·q*z±“ cœË±g¿MžÂÆí©0lùñ|4ºy6,È[SOiãp¦ôD‹Ž7 \ù’¶çÿ'®Ôay>=Yñ4>œJ€…æ±hwy6ºŽq)cÄS8Y)¡ï¥qñù6‰1J”Ÿñ`x+f†Õ€Íd\Ÿ:w/¼»L3å#ñ¤J£weä§ ™SˆÏœÃk³¤Å½Ê¤5ß’„^4&ö¥ÍNÄø†èXc @ìb˾۠~™)qö Ñoþø_BeÎÃöo¤-ñd˜Ðj–¥¦…iï+ªVôò3P¶ËΫØI?›®( cñ‹\úìNãc!˜o­—ʬÛòCI rhC§ôÖõ'òX ª0_uÐn²é5[õ5εßÁç¤OGî: ð­&âö2ÞßJì®rK»ã¦Ìÿß.{ØQeÐCxB¨íe–?&–Û¤LFþÏ;U ±#«ëÕµÝçq-ãþ^|¥¬X»¼)$˜œ‰Š3)ذPŒN¨ÕÑȳý5E‘ÒýÖåeX™×(]óÏðFàî¬ê oŒ¹õŒÀpDா[â§Ó6DZ2Ì´÷_ùëGôMÃó-çq†Èã<Ö†|­«ÃÜéŽIsèÜ)’Ö]ów·Ññ iRŽ%OilÊ‹ª· Û]è¼%ê Æ¯_”…Nù½ð«æói,¢dNZ3ËîæT&[04ß슅œý­—‹àP³ïI]2 Çï ãÐÊwJb :°ŽVø¿0ÿÔÉ{”Ó³aùå4ÔgM“…RGbáó¢ÿ:ðÙW7`UƇK߀‡gɶ”ûê±Ü\''Ë[wIÛEŒììl"ø5!Gc±qATo–6(¶€:ÚÞ)†‡^Cûl#¡€Øž²÷µH Å·iêƒâµàÀ'öºÍÏ:s0Ä`ÁÀ€wàƒx¹æQ⢋ÂßFéÑ‹hm½Š:²ºxÊqI²Yôosì’רE1’…WÁv|öL»êUPÔPBž«6DÆ#ê/ÃTk®]®–]]<K^šh\ÿK±êï>Ìxa¶4™N‰)Æ®Ê&46^ÂÑýÇèZýÅO²+}$Ìø‘fDLÀ³ ¹ÔŸ=êq=(zrãI£`õìØß„Ö–‹ä=¡Œ Àºu1Šª•{¾œbÂñO‘eEJÌ[ØDíXÔ×}‰Ò¼2ÚfQŒ£b`BÛ$ïÛ?ÆzÊÓÒvµµøÕ¢J$#0´=£»Ð^GVtWV`ÿÑ&´´\%Åòöô‰˜äóW±»Z8}¨"0ЫzC7æ›`¼#à¯w‹ÆÑb©¶Üû™¼^%ýJãY¤‘ŒÆ63jK n#‰ Rg`>ÅN©”eëǘüy#ȇ~y“LVY°r[Gà}˜@ Uûéyªmľ{”-¶fœo•¥D=ç—´ ÜVÖ÷H-Ý^·¹ïl0…aŽO_Á:ï)\2êðúãXû¾ƒ£øq¨øýb$DiV¯C#i¢@–iÂü3íº@,Ëû9JÆ~€åkk¿V!C¦r_X%_‹ï©.¤ë„wRücHIîiEÿY7Fs¦…)ª}ºGðNC<2Óª¶¨L©@<¥ <¾ødš÷,^Æ"‘„[7wbù’ñö2]/F#£,·~õg¬M$ƒƒJ†Ì¢§‘¥q;è‹°7"a1.¨Å?¤ÇÖ´jI¸ Ö—´N‡%ÙÕWð .¥•a3å!8å Cùž8D(·òêƒ{5²@ZY0ÖK‡Z<žì*ü>Gï¼MMäó°B@¬êùk?¬€äÆ2Œ€þz·Hs,ÍGv”¤=¨&ʪÿ²…yb‰&©+‹Æa{JâbšU“‚WgŠ ‰nÆaÑ8d¼‰4çÄMyWn>”„ Ï`¡¤9ÿ÷Ì|s—WKéY¹ÓqnõiÙÆˆ¿Z¯‡¾ÐHc!2С„<âHƒRÛ„>‚Ý_ÌÇ?>ÿ1y ¨Âf¹&ç»çwÞH8·Ó·±ˆÛ6R]!Zuw¥nõ4õÙ™H¢ñ™<ƉÂÛ"ŸÆ=jyõ<˜Ç8®Ïʳzv‡[Ô²¿FMA9biÌ&¼`ˆ ÆR9s•E¡ ¬*xÌ ­šŸ\CsH$jÎLÆÎ˜*œ×̦»ÐšˆõãP˜Ö„E³I?¹£¶š¼„Wþó]úž¶“º“4Ð@³ÃÖùyñ­ŒÜ~íIÄ8ßKB/û>ßÚ,Óå_F ÿÑ )5ÝÝYĹBA"^½ÖžÅ¬TÜ«gñ¯÷â,âÔC±Ùl¿§øaîÐJy»²å*£{Õnkû ;?ÁAÐ Hû?´Ó »•º+X„ çw[Ÿ+³´[R· Mü÷…Ü´ÑJ¾™ø ¤ÇL^ÛZ.Ã,„Ç4ÓŸâòªî¦~k'ÚÚ:ÈÍÿ 3x4"B}ÙtÐ MNfF€`†ò˜ƒ„¡A>|?Å7ó¶4~u—_|SÛiµ8`4BuÆ/V å¹CãÑ^Æôý* ´]G í§ßW~ûo,¢íHÑþ;4> tŸõ®®{lŒc± ÆbblªsK‰õM'¶ýcbiª$y˵w¹Vû[Ô I‘å:þßuõø·O‡1˜žát)~· º3CŒ#À0w Ü ”¹F€vø{UÏôAªª†Ó¨hÔ¬þz@:pT  ‰é"ºKžû)Rç¥@?%Ýj·Jåè‘“ cU6.?ˆ¬ýWû©A¦G‹+°i‡É«À¡+ô;©.ý妯öÚ#ó1¶Óò® _4¿cMr³Âã5Üì¤BôP„Ðiì(78jÐ!àïwË k03Ä0Œ#pW`ÁÀ]™+aᆀWõ®¢äu‡žÀlôïX­²Ð УHÀSž ¬ÈK‡mw¬ßeÒ|4~2ÒWÅâ•×–ãRE¤Ôžšs×<´ x`ÆØl+0ëYº$ü÷ÖcëÞïºÄËw`Ѫ×{È5ðÑžúËg¤õ‘uZJÈ4¼€×WE#*b,fÌ‹FÆ«?…­óç˜w?î8³Z:!ÄAzŽ€ß-=ç‡K0Œ#Àܰ`àÞèGn#À 2ü¹ªg©3a³HÏŽB*µ»jãç¨w™e™öU`æˆ7ø&ffTà€‰6ŒuÉ{žNìÛô6Ö×*[ äûä-µ¨;\#oc Õÿ„õÇÐâT·Å›JìÛÖo9€• »±©ô¢så]¦/‡°?@<]ŠUlX.b•ßR| »ÖË[¶ÕÞ€Åt ñzR…W´ßÅ}BBjë±%YÙ–0ó=쯗­*˜ŠÿŒÕBÅ¢êžIØ)ñ­n‘¨ßÿ‘„U°P¯4ÚT µÍÇPYz@jSÂ6!„Ú¨Œºýa'ŠMÞ¬7ÜA]éGHž©æÏÇÊmFÇ ¥Ûö}‰ý;Þ³c·¥´I `ÞûËžÍ~am<ÕºMšŽÌ¥./r‰»`5£tË{šöíFžÖþ€åõÅÛv>í[-oi"¹å¼´­!0¸#vúNןÃ4Οï–a )7›`F€`Á?Œ#Àø®ê}ò¶XÆK¯üé™bsÀ7øàÄ {+ZW &©ÆÔ(TTÏG ±v;ÍÞ¥™¶œ­ûX;oàPÝU¨­îì¼…ªª&Ìžò!6›Ç!'g"ôÆV$þŸ:ië@HÔxèEÅz’6 ?›?Vª¯µò¦$žÅäÌlj_=’«vÔ6†E˰.+ ¿œó¬g›Ò€±™z ß‚ì‰(xõ:ñÉg¡[6åդƿ.…kPP« ä6nL:ˆÄµ×‘•û(R‰ÙÍËCÍÒ}u­»ãòM)2ýŨži}XÛ¨Ÿ¯#¥(Ô‡éñXW)Û# Цw*¶½YEóQQþ8²S&b\\¿·4´7âWª°ýò8‡ìTÝ?a_‹,ˆñZ¶kó†mŒ?ß-ÃTn8#À0Œ€GÝR††`F ømUÏÒˆ‚­4É_7ó‚FÂòËéÀV#Öî¬Çšyzz©[ðÁÔÓ8Í»!‚Ú°ð1Ì™¸‹$£¢Q¾äF AÍùU»êô슰!V ­Mød{j>§m !°Ö×ay>ŸÝ¦ŠŠ°Ð<í!¥k¯?—/bÏ~#š><…4é°åo&Ò¹Q^YÄ#Jaæúeùâ>¢ñ™s`xmM„;RY€´æ[’Áňy³±1ɈóÃHψ…<µàÿÒ@X=Ђ׿"”hE—_G[` '·9EÆX1C.Õ^û¹\뤉„-ñHøzAȨLG†šiî}xc»ÀDÕL€ÜFý8ÔZŠyÄHëÔ[(\Ôcƒ³¢áCŸªÄ5gEÒòX´hYBÐ$ì¶­´˜ôuò«¬²=‚à¦$ Æü¿z dª a‰=«×4ÓûA!e-?¸K¨ÜÒ¹Áø¤ðCì|¿ K3&y-먯üönahF€`†5¬10Ⱥߣ;©AÆg³cmùyÛ>ÂáFU™¸¿k`zƒ žºYL¼ûÊ‹¿VõZ’&Wé3@kËU\ |I‚©üS8!æÓ–ïP!ÔÇõ¡#â• ¨Þè|É£t=ÇOÇß ¡€ŠýUÁzSÖ X²øûrºøUVÒ¥¹¤#¶ë­î§$ÖP ëHÛà óO¡ÌÃ¥¼I?›n t-¬Æck¦ ˆà˜tË"„;¤{ ‚cË,ߢ\KŒg1FÙžØ$å2^PWóé6~žÓ0£›…tŠ®Z]F[J°«ò’TÆëå*—Áú•o#ù™at“9iÍ,I( ’taÂò#ÉenR;úÒ_DãÚ ¹åAÚQ¼£ +WîÆ”4aÏ¡Ññðã$1!qË¢ð|$¯¯ÀQÍ{Û[Z§x>)$R9ÉEð‡ªùšÜWÞÊJùGBÀ_ï-¼we,bµ UqŸi±jkçkF€`@€º›:»u'å¦Ì½ÕñͬÞxŸ^îÉV¸9£¦wjþwg6°nÖüß>ÿ=a¾ºYóþ§ìŸU= ÞÏ•'®ùi>á]L˜R-M®Äšó;U4óï¼#­>ë¾ß¾Ò/Z«ªéK-÷%O R'ýªX/H«V «Ø«ÂdIàpÅFÆm/áõ ³åbÏ|Ë1Ñ÷HƒœÚé-£HS¦•ú’òù0bå£$‰¸ê"hˆMDžù”䌃ž<(¤-Ú‹ä…+gâ• ÃözÄF ´^æØ[šZsmQ(W±6ÌÁo’’|)«ÒÎgÿ¼[dD»‹[B¨“§îqQ:Bß%ù¿¤í&Å[’hændl©A½"ª'(#ßB¸â>380jY¯}ëÅMkwušŠ÷ï%ÃÚÅ©Wl9‘`†=,€O~eA™HÈŠº¾×tK 2Ì·ÔÀnÖ|ï+mN_ܬióÅk¬êY[ÎIÆä’râqÅœ‚K—~NÏÄJÆú¶oÿmÁÁ˜L€k¾“ÕÓ%ð̨9B–± ’¾äéèÊÿøÍÒû4²n¯Q\tOP^Ùï>_osÜ’ j º‡(¬ðä’ǰt©^>–é1#¬ƒn,–½²';ŸÃ:"aøcĺº»Ð~žTñ)!»f^]õæ%L”úÈç•ü^ö—.fšÄ›qûQÆ5XØïDùïÎÒÝD4T.Ų„©˜5Ié $¡ÑÑx5o%®œ ­, ¶Hgñã1MÙ‹5ë1,Q±^: 3b#eíÔùÂïª/caËC„[q¯Æ›Iˆ%Ý· ›dæèQ‰xcòÉbꔬ%”t&( \…1ÆêXd&@-+ððãÍMk§—:Å(¡Ó,xr¹y¨…£F€ž°``ÀûÝ_ºÞòÅ=T—<¤*ìO?Õ•Zp`ï¦êžgwÝØwfv:>¶[ª€Ü¬õ©}ö†ÞÍ‹ž¸Y»›|ù§.¬êKO³Xý‹©ÕFXXtŽŽÁI·ý,*šÇâù,ú?UEÚ–c8|¸ëg¾ƒ´B*ªÎ¿»ÏCÙå)€×{GŠ|=©4ÏÞú1f'¿GÞò¡_Þ$'zù³vG×µ_ïéan­|.û›ÐØ"ÌŽÆs¿‰¤s&$ÀaÓe4Ö7aß®#¨TÔãiÈ5·Óªéz¶–ò×ÓÉbÈ(' 9§óï'N£¶ÖD^Ê$aIéž/4Âç¼Nw>ö—SqCåþ©"’.¬H‰y ›v™PßH<×}‰Ò<Ú1¢G•\‘]ÿÆ=,ÞÇßàä%¡¶òbV‹L8vLìE!M©ŒìØw^¢õ¹IÖ™<^øô–Ìxa¶´í%%¦˜¶_P4^ÂÑýÇ”­ÞËq þx·ˆ¾ë×–ÁøÅšX¬ze1*ÍOKTpþ&Z¿‘Ÿ™œÂD …cÆB=^Ûû^™5º›>öÅM«û:»<æÝÔÄÉŒ#À GX00À½ÞwRÖVrõRv×%TóÈY}‰Ju«U+ ä„›2áz+yÛy^E•“ÝCíFq­ªøKCÅÅ×QÓ—ØD®´¤<3ËÈõ¹×*¦#¹:*~yçiØ k+åMÞ-ïûri[Ûª®<9øðæÒÌÒ¨¸¬"úBµï·%=Suõ¥ÛDÛzâÎL¦)Üt‘.¥Ý+·òaàîØ³|7ݬõ¶}=s%70nÖ|éßÁž§ÿWõ®âà›4¼MŸ“á6çˆE/=*Eö_ÄÂÌ$ä¤eùÏw•Ï>Céæ;þú>å%ÔùCÄ$Q®÷ Ux)‹ä=@ä ª‚Q’=ŽVį£9$5gâ¥ýøfw3l•®8«B %N{uLqV»—Ó¼¹»×‰‚š0õÙ™ÒÄtmb"'ÔH+ü ‹qƽ¡q1Bä”2RŸ?¯;äwZ×6ËÛ¶¶³)ÿ”Ù5(¤•Ïê7æz´ü¯Óÿúƒ´ È£ÃìÙÕ8÷¤9é0n?Ž;ä-žÚ¢haøÒ§š¦Ú/Eû.˜#y9ØšV)‘ijþ –¯nBÒº©xXìP´0±}b$æþri XÉXãAÌ^t9EzšÔYɃ€ #1æ~ Ö&UI´âRˆ|Ü,¹Cô–F¤uà†x¬#/i‹¨"÷"6ñ3T|-¶uSVá‘O@ÿ¿[HtÔ[×–ÝtH'yI•‚.‰Iòe€¢mpªî[%Ñ·“/nZ%÷uúVçbF€ðŒÀJ‡ ˆCŒÌÄ!FcB©PŒ"Ä:Ðà !î•Æ‰t~Ž1tˆÍƒátŒ£cÓIÇ#tL£#šŽÒ1“ŽYtÌ¥ã :æÓñw¶{<˜O¶y¶ô¢ï-57ØR)ð–-×pÎV]rȦ—î÷ØÎtˆ¢¶Ü$‘.ë²Û²Òß²ßC¿Ç–“û¡\&þ°Í¬Ôf6Êõ‹rúÔm¹Ù{e(.3ç°mD÷M[ŹùÕo°•Ÿ±•| çO?ië”’ùHÍ#š„vö![uóm[Oùj®ùTæSÿ.õáa[nI½T_Oéˆö•¤ËíKÍ>a«®ø‹Òy¶¤œ¤.¿ÔŸñy¶Ô¬Ã¶òê3¶Üuò3•sBFÌ©ôlfå²¥êE,ÊC| IDATÅ65Ë¥êƒrÿ¦´UTnËNS¾Or<‡]ªåˆ~AÀ|åšíÒ%¥¯ûÕf¾r]¢eêæBäwÔ+ø¸nwtSÔžÜûþ²Ú®4gkhn³57_³™»k¤À£ã¶­CÉ×i¾n»tå¶¥ þ¯˜]p9¼¥)TìTúvÂ>”µçå‹~CÀ×±ˆúuýV»ÆsÅw¿ØfTŸ³æ3¶$1>ßks½|M÷ñë>µ}qÅÍ3ä¦e™âÛñ–­†þ»ÕÒuž-§Æ1fðZ'Ñ3þET¾ÈvB¸©‚£F€ð+bn«ÌqÅ\WÌyÅÜWÌÅ\X̉ÅÜXÌ‘#ésf1wsh1—sj1·sl±œ"æÜbî-æàb..æäbn.æèb®®ÎÛÕy¼:¯§$÷Áu¹Å}.ŽõÊžÍîÜI©nžrO,GÆ,Ñ÷Sq¨ÚŠ1qõø×=±{E¨âV+E'žÇ Rɳš°9ß}êtܽ€œÑÓfÊGâÉ®ÍI¥=˯L¥§è®a£Q‡ò†eX2)–w°ÝpŸu ¡£¡›õNVª4¦¢`ï›H;ß&­¬ §XªÆ°'—fõ>&YU/8³ «¢Ѹ2½Bj‹JµÎòã-þ!ÚàÉY@c’¶©ÏaòñT„ÚVNm{«;V—\™i騝ÄÍh=¶‡íë•+¹r³fwè^ˆU=ÿ¨üúމ.4Äã*¶JÅ—ŽEzxªÈÆH]K²×6Iž8²ÿYOÿ³¼Ó‡µª‘¿ì БYò ^[6Ñ3ùnÝ´ªE=Ô©&ó™`FÀ#šÏ¾Ç<œpP‰ ¿ûÐÙn¥æNwä ;…ÔbëÑüÆ’?íw^Ù§×Ñ)Êk6̱è&D“pÉ>©—’é'ëÓ…P@„‘ŸL§±“ñc ˆÐ©µ0.ÅÜAýÑSø“¡Ÿœ¾Ž¯„¿©ø‘Jy)Ý{viv󲨔 #7ëŽAxÀƒª8A)Oƒ€dÅ••c?å‰ ë0{‚OžÝ™YÍ2Ž…iï£0MCL¯n“ÐÄi/%7k­ ¹Y{ùïÉ¢ºè&eïE»Ys<Z&Ôk/íë­+9áfíÏŸcá¾j¶öÐÍZ›ì:/Õ‹ë<•õ{ì<ÐB‚sÒO¦cÝ…¯ðÇ×ëp™„ÖéYcÃËsåÿÄ@1Åõ2÷þ|·t7ñF1¢°bíò©HRz$^_? Ѳ0-("šô"ñRq5bS°uy.ä>Ý“ÜVáꦵSqÓjnZÿ¯óĺ™4 ñ\§[ÂÉ0Œ#`G€v(öB¸“zuácÝ3! êÚg†òþ^³K)§,”vK±,g“….EdC½vº"UÞ7ï%êÄþM»‘¸•ÜXeNÇ+™18h®v;Yt­Ã•OÉ8°RA ³X¾ï¡ø5¹[íJ„1‘]¹ê’ÍK„CáœIà&B|¦âîÇmUÞòÀIGGNuó+ܬU.ð¸§uA榴=Ê_ö >^x¢£¶¯G®ä„›µÉ¢z² æáç?hÇWUFâÄy¿·¶j=»}t³æc“e6¿¬ê Ê–:3•‹×éàÀ0þAÀŸï–îÆ"÷ËBüÊcß9 ´wìy1£Æü eÒî‹ Ì[±óMXYÂ7¾ÀoI0ङ"svÓšïDJvÓ:O²qáKN…ù†`F@ƒ 4` Ä¥ìNê4¶ wRQXí:é«Õê$¬Md{l–$§é†&I%?Énøë.´ ý¶‘P >û'Ø»Al¹ƒ¯CªŒšuÇ…ìí¨—„™`¥- g/9 ÁBræ[6Óø–×s®Àûœ Ç’%¢m¾ÿ‘d»mÝh.tî֕Ür&xV]É)6¡ºPкYÛ0O<›MdTΟW•7kÅužØj"'×yRܽ÷ãÏU½{-n#ÀøŠ€?Þ-¾ŽE‚&„K< ¦ëNì¶·Þ¤ûL{Øy c8åv¾ ˜4ÉIÕ0nIÞ‡Ã\>¨Z7­i°Z”qÑåzü,¦†ÆOŸ“ñ˧ìD}©Óž™/F€`ìcÝIÍxþqèi?)µ ‡ë¯¢±îÖÆˆ•Û`üúʼnR äÉcÿ5Æ­nAà}’Œªý&TÖ6bߎ=H[ .›q¾U^*莩 ¦V$&îþÃ籋¼Ä,ÿ¦WŒKuÑÿ??û÷Ÿ’Ž}ûhO£ÂKwDµ¼Eý%éäÍlãAdì0J®¸LäZl¹øòäêH[¾»ºz’îL×›5ߨiéôÖ•œ¨é®»Yó­yƒ:—XÕãÀ0Œ@#à—w‹c=${Øþ1ÖÓ·±¥íkkñ«E ỔÐG¨ ž[Ý^Wƒä•Ø´ --Wq´¸BG¤OÄ$¡€ â“›Öƾ Î=sË)Œ#À ܼ‚‡OãKKewRµø‡´ãjKZ§—ÝIé¢qÈxiú㈛ò®œC ßÁBy’[-J~` Ë¾}©uùXMjœkÔ„ %ù1%l MÄú‚q´¿ ‹f7‘ÞýDäŽB¹¾š^+¶ù]ø’b€¢Ù ›õj ® 6í$Å @ŠŠÆ"%¥©«ö®üx¸—ÚL{ü—'Š=þŽ}" k¤e×GÜù^rgfßãˆey?GÉØ°|m ò×*ôRõxa•ƒ¶öJB¸7kºÞºY³óEf…›5âI¸Y[‹(Ây‘¢%áÜy¥ƒCçöÉ®ä˜A*›Ÿ\S\ÉMÆÎ˜*œ×JÅ!»Y;‹µäfͰ™ 3f“›µïŸÆZáfmòXœ$AŠè[wmtr³vÎ@4>“|·ë3ÉuÞß~¤½šŠîÁK¬ê݃0q“F ‡øëÝâÓX„ `g<ƒKieØLã²×+}Ê÷Ä!B¹ %¾Mn—HßfCa½t(ÙŸ>¿ÏÑkÆjŠê¦õqÏnZóÏB¸iý_^êԃĠÀ¾×A­€ÏŒ#À0 Âm· ¦»;‹8×Ch ˆCÄ«×Ú³%‹{õ,¾â^œEœz¨ñ1ä3â÷?L´‘ôÜL0,ºp²(.p hk»MŸ[²0äæ#ê”Ùo7Ööh·Ê<ˆJÚZÍV«uA¢ } ‚F© Ëé]Úé å’ÛGfpPÚä/~dº¢ïïOd-¼8;ñ$Æi¬ÛŽ~„1±g‘^’Œ¼ež­Æ·ÓªìXÈÏ`0YdwVuª©ËM{›ë} ëI©.d†L„?÷˜QF€èwüÿnñe,Bßý–Ë0‹y6Íô'D„h?-Ý·Ù*¾#°vþ:ƒG#§î©pF€`†#FŒø1|†Žÿ¡CŒÊ…º“zˆ{5^œE¼ö,®µ¹`µß‹kwEKñîÎ"Î)¨~§HÍšîî,â\U âÕkíY¨gU ΪP@œÕøa& –s`üˆ@å&÷®äŒ?E¯=ø‘_&Í0Œ#À0Œ#ÀÜ  vÁ€˜´s`a‚€äJNwCr%÷zÑ5É•ÜWX(àî÷Ë>`0Ê4F`H!Àï–!Õ]Ì,#À0CUÀÃjº»³ˆs=Tí¯^kϪ¦€zV5XcÀSp<#À0Œ#À0Œ#À0ŒÀF€5†t÷1óŒ#Àô^Õën\Š`¼#Àïïøp*#À0Œ@ï+õˆŸdÇ7€Œ´‘qAŒ#04ð—åð¡‰sÍ0ý…¿[ú I¦Ã0Œ# E€m hÑÀë6“3ó1&ü„‹cÌ[‘\†ÃýàZÇÒˆ•#ò‘”Ó8€-äªá…¯ê ¯þæÖ2w ~·Ü-¤¹F€`†,ýÝ^Wƒ115È7Ù†§Ñ|éTL$G¿Mˆ‹Üý-Â[…ÁzÅ[öaÛ¾‹š¤ðØä4q|É0þD€Wõü‰.Óf†/ün¾}Ï-gFÀŸ°`ÀŸèúDÛ‚?½J Ù/bÃÒIˆ‹…«žÁ%ã(ÖŠÄ7ÉÛ ¤\Ž«¥ÓM|þsó7Øß &MÄn[:^[:ÖQ˜¯FÀ¯ðªž_áeâŒÀ°E€ß-öë¹áŒ#Àø øÞî‰[ÏáuåKÒãït*µìÇÈÒSÔöÓ8c¡³å"6%ìÆ–RŠ7íF`pi‹À¦be‹i l[vU”µêÍ*$Ì܉-û/Ëåâwb}q“¾µµ[VîÄ*/Ž„Œ ÔµÙ“a1CBBjë)_²œgÄÌ÷°¿^0"‡¶:Úþ ¤Œ]új>3Ã^Õ®=Ïífü‹¿[ü‹/SgF`¸"À‚îùŽËf}u©@×…—<»FĶál³°5pª:°yy5R>BNî£H%ÁÁÖ”±å°™ÒGbâl•ÊøÙšiˆ-ˆÞÆ©CVüw«¢EÐÞˆ´ð±¹0¹†xT—<ŠËùõÐy&eÞßÙy UUM˜=…ò™Ç!'g"ôÆV$þŸ:ÈYÌø}*m¸<%q0<ŠÇÆÜ'*ãÀ0„¯êñcÀ0þ@€ß-þ@•i2Œ#À°W‚~e&?"Íà»p¹‹Z®Ý&í"Gº—òb&®_Œ@ó˜*lþÓX·7+^]€òÍï£}Í\dd,×å³òkzÿ/(¤ëÜË‘1Kx>˜ŠCÕVŒ‰«Ç¿î¹ˆÝ+ÆÛóÇgÎáµY$´èDHeÒšo¡ƒRƒ,fÂާ¢)=Ú^†/FàU=~ FÀð»Å¨2MF€`Ö$Ï™ pFuNš5Q ˆ¤Ðü,žÎf«loÀr[˜oil ¸èlu˜;Ýá1tî$Qlów$€°‡`lÍBô$QEÐx¤dÒU¡!#vbSÞ)´J~í…ù‚ÖðªÞÀv¿pýÚ*Ž6Çö§åhè×ni9œmÇð5C: Éï–…Ÿ+gFàžE€ƒ¤k‹´¸áä¾:)6þcÞd‡FûI¿câî†û('aÄHEàœUQhpŽ”îFbÉk+qÂ0¶3X±uõÇŸ},pƒG Gü³ªgÁ®•²]•y]Ý Û ’ÝäY»h0—Ý¥úÕõ«_ð´ Xô©ßûL<;»2â9™™P‚m¥_*Ûúoœõ›f¬ÛX‡å=½î=oŨuVJsK¨'yÝàH;þy·ØÉó#À0ŒÀ0E€Üñº?Dñ`Ü|•­ÎÌXëOâÕí—4ÓBµi²ûA)ÆòÊ…µÁ©:PP&û!£4y¤Œ®?h’ö%Èñ–†&i{A÷å´t1kéì>™Žr¡=`¼ŒoÄ>Œ#à7·”ÿmágá*Níà“V‚´EhUkw:V¨Qd|ðu¢¹µÝ‚NëêF#HK@ÍÇgF`˜"à¯U½[ä™4)gž¬ü ×šÐøÊ#˜DÒKÏR£Xx †7TÐ;ñ m9Ð-›Žòß=„Æ=ǰzc æþd^‘<’È.P·V¤ÁÈ"¨ç(ÿæå‡ñlÇ/ ²t\¸€ÌßCQù\ŒùæK$¦‘ÓïŸBgžžÞ(Íx)ùä ${ÒçÜAþ¢Ï¤mIIɪ!SÙ]ª9Yôu_'Ú¿ÄÏ#…6T0¹T‹IWäzE«’…‡tÕMòÅõëæÕ²ë×d «ªŠæäþǨÝÂõkðÃ?Ç« iªLn]5¡ …úq0TOƒ)ÿ¬ŽûÆ7ÿ-–FŒ„êÒµjvâÓ'"ç©âÖ ÞzŬAØîdÃ@¯M wp±¦U¸)%ûÖ!‰¤<Ó—Ÿ€á× %ö]|W“‚Wæ‰B>`(H» vôLÿuŽê¥ÇFl=SÜØJ˜/ÄôÛ-xyùYèóÍ8ÓñSt‘OS9kç ª»Jb 9´V@䢺ÑQ¿é1évŽ})븸Ë;%±I™ãw?¹ƒÿXdÄìÁ•“OIr¦w*HðÝŽ¬¢ù˜?æ&ŽGbœ«Œ\©w¸üõnn8r{F€`œੜ3|7azæAY(3›…º°˜ôw¨…hÄé´ø¯&8I Ðu€í”¥›› ]¼…¡›|œÌ 7Īžßð!ã‘øb6šPeºƒUS.¢h+y25Ä òºÖò@2*Ó‘¡‚?÷>¼±]ÔIºâ•&¿5‡–b½4Z§ÞB!MîŒ Ì¢Ù nÖS8Y©˜Š‚½o"í|›´ ¬«¯Ãr ÄgÅc÷†©R¦…æ±hux’™/ušþtBÞ"e$—ª’6T4®ÄT`Ll½g¢Ê«¬_\¿.ŒE³âÖµüàR,!ß°Kç㓱óý&,͘dç#5‡ÚþŠÜvéï€Ý»“%ӣĒ= |ÄÙJ˜ ¡€>3Ž0$1¯l .—aíÖ:¤‘[Z¡˜Õ†RAw?—/bÏ~#š><…4ñù¸Ùò7aÚSâ³[Yy!ë¢Y°ç_()%_¼ˆeQ²Àz‰’ùº"zvÊ«¯Í•¾UÑåW`H<‹£- °„/7 !¬šÿW!ðOP )ô†óɯï–á ,·`aŽ †ÒŒ„uaõø÷†×Ì+#0,ð›P€Ð4߉ÏN£«Vìýè"’nÖÓ¤.Õñá@± Ü–«8üçϱÇp_5[%»%.9´f–$ñº0a 긩 î þè)üÉPON_ÇWJŒ)OboÊZK_*#ýÊBi^çˆírå­ÎÎ[VÊO.U§:–ˆî—Wž»r‰è«ë×*Åõk§4óÃIò¡ ñ×T\Dd0Ö§;„R6oxûàN¶CÁôo—=ì¨5è!xW‹…ã•׊Œ…cïjµ\#Àô¿î¾Eò°(Ðb5møYYbÁt…+gâ• ÃözÄFÐ$N-Ø3÷vºÞ-]ÝYJ®OG¼Z’¹º›tu]9ÿæhÖ¦´À³3¥®˜$¬,Ã~“ºy¦­î¸†7֞ū¿ë‘žíM›{êÖ´ç\ ®ÿ¡Á5sÉô Öè^œ›`Ÿðÿª^žý»0ضb»ȪˆV”µ쵟o€XïήY óIJ^y-1âÚ ,ø²FÖ~Û¶ZŸýìÝ𕹃¯Ch_¾¢¨Þ,mÀšYIõ×í5JÛh»÷a”ø4Ñþô“fÌšG3MZ]{çõÓ^éÉ®_Oc³pýºzª¤~®èâúÕnÄN# Q]¿¦+®_…(j×’hM>•¨›s·x+óZ¯naÉ@å±6²¡n»s’¦FÆh4Â7ltåùÃ/»±UȪnl%ÝQÕ=„D!¨2|…c­ œðïRTÍ[€'—<¡à.„FGãÕ¼h¼œqcfŸFáÁÚ¢àØÆá®Ìpˆó×»EvgI67 FˆpC4ÊŠ[·îÇ8ɲ ²’ ÎáºRhdý{ ~‘õfø,Mr¡y—oGÑŸlxþ?LÆã«½ç°½¶o–ÁرªÍç^±MUK24Q½¢ÕƒB¾·YGÏÁdàÜÚÂÔF®Mâjù‹xm‰—í®=àƒ³2ŒÀàD€5g¿0WŒ#0ÄðϪž3(Q%¶ˆ Ã³Oz°}rà4jkMØ’\&MÚK÷|!ïQ— {þ ¼(µj¿ •µØ·cÒÄõ²ç[;=©€qëǘüy#ȇ~y“LÏ7Í·uÏxöG’µüÕ±ï`eÆ{˜ø.Òò•Ù°ÇEãþuý:ã…Ù”˜bìªnY/áèþct}É-ÏÚHx{p'+æ`j˜æŠ öêر¿ ­Â-íú2l¥ ëÖÅø¾‚¯Ôœµõh¢¥ËÞº±uÐç6L¤Û,úÉ{ØW{&zævl9‚z» FÍMyI7M˜|@r­ÛXß„}»Ž ²Qt0­Ôf'Š}çQßxŸ›dIÔäñ>øET«¸‡Ïþz·HÙø‡%w–«2b±jÕddÌBÍœ=»›”¸ü-¶n?‹ªóîÿ ýçò³¯{V2˜,B W‘€\“x}ïJ”¤‹x+nºo¦\¨¿‰_KŸ„½isÿ¹5ío8¼Óëêþ´ûgÏ·2Ýý¼óÅ©ŒÀÐ@€C£Ÿ˜KF€bøkUÏi¾M®G›Ï<ãÏJdˆh¯ì6Ò鈚¸h}öìjœ{Rœô·Ç‚Rv±¸7!¤ëŠxˆÐšˆõã$÷§‹fˆ¤½£QK÷FòL^MkúAXUð"J²Ç‘&Âu4‡D¢æL<ÄØÙì2 µ»K¥4¯u ®Â¦¢¬!žÔÈCÑ~þ:ôÙ±8S30íaÏšûÕõ«î¼C<¬‹ï@Ú"á–u/b?CÅ×BÛB ÎkÝâíÁì(HˆJk42Ê’¥~[›X†pÅ-mfÑÓø÷¥ŽmdÝb¨²¨9KÏŽ'Uÿ^º±•M&Ê•D,¡g±$’žV$Í~1ôÌ­ÝÜJþÔ ¶ˆHXŒ3†(è ’kÝÈ)eHJ;¯;Ĥm$ÆÜoÁÚ¤*L‰üâRÈ5nælÖ´_¥8Ïþz·ÈX:ÜYj±uçnRM·Ô×b±^ÖèYÌ—_] IDAT;»3ȵ$m?¡ç.?årο^Ü€J•KTr‘êÍíªÈfÚW!¹Ç |33*pÀD›)ç*îTLñÈcB}B¥w×ÈÙÚ„mw¯#v¢ØÔERF9¯"òÍL®@£JžT³J·ËNâ780+·rt}tYÚ÷6ÓëXëÖT©wKñ)Xî”܉n«•·V4®A²pݪëóL~%<}pmKýèJÛ»Ë\ÙÝkò–ZÔV±»?MÞvžz‰0]¹Sq7»ŵªå›Þ”éêžUuY[[ßHBw¥Ý3ßÃ~'Ih7m–páF`è 0‚X‡ ˆCŒÅ!¾îBáQlc 1RoK¡÷( qè,–¯ÆÐ!6d†ÓA£IiñIXTФã:ÄrW4?¤c&³è˜KÇţãïlF€‚?~|Ðpm¾rÝfî°*üܶ]¡ûŽp×i¾Ne%®\ºæ ×éLèJÍ!gK/ùÖ9¡w†uyD·ØvÂÁ†ŠVÛ¥æ6[³t\£Á–D<&´PšÕæŒO×ì"]´¿Ã¥­]sÊ1Îôºâ­âÙ¹s‡ÍLØÓé.™ßKÔÞîøóÈTG‡ôŒ™Í·=f±'tÞ¦6Švº©ÒijzŬ>»öRÃúÂ?ï–[AýÇâÙ.ºVùPn7VÑÿï¶OÛåˆvãaéþÝw4×Û²×KÿûÔÌC¶ÜܶñÌšl©ô?#éÍP}Æ–ú¦”ÇÐ,÷§Y¢!þ×y¶øôl9Eç<¼—:l¹ñy¶Ô¬Ã¶r¢“»î-©LŽú2 ÿ³T¨ oÙ²rÙRõâÚñ¾¸T}P*ƒÔƒ¶ŠêÏmÙé2/H:l3+mìzÒ`Bx4ÔœëI=l»"eî†/µýÄWzÎ_l'm9™ØÊ¿ ÿ…òŠÏ¹@”nÛŠÒe N¨ï«Û6ù—gË.9c3ä~ ñŸ*½³¨ˆßÛü©½/Τº“r‰Wm½ú=¶ììC¶êæÛ6;¾IÔ¾šz[QÖ»R}æå=rÛV¢´15û„­ºâ/ö>KÊi¡÷@Û|âMo°•Ÿ±•È8 ý¤B—ú@<·RßçÙÖe¶e¥ËχG<æä~hÓ‹ôxµ¯{SÆfsýhŸ_99Èõ¤þEÁ·6Ë-çßa„€˜Û*s\1×s^1÷s`1sb17säH:Äœyb-æÒbN-æÖbŽ-ÄübÎ-æÞb.æâbN.ææbŽ.æêê¼]Ç«ózJrâ{÷éË0Œ#Ð ü»ª×3†œ]›öÜM©«ûÓÐ0DzsåæXtú!ä&ǨK‘¶ñb. /ÿµø†õ2X‘ü!t™QXôÃ\ø¨›…±„L=ôâÓ×mè?ׯ¢*güº­Ü%W¼]ñôDq`ÜÁvå×ヂêS?…€@ètb ã&PZ_]꺡:ä£üún©:‹p§ˆìš²O"ÆòpQŒ8]CPÄ#ø‡ŒKäþÒˆ¿x’\ŒÊýiÚóò–ôÔå§+}1ÞõèTÉ,)(xt |ðõdO Í»I6->†9éÝUÕµ¶.1“À³JtNü~âÚ;_¦?ÉíOÊ}š´&Iåô2Ei`BÈmÎÛ‹z¿e•¿€UŠ]k£ì¶4µà9lX6žÊ«ØrrûV=v¬/Õï×6{pk 4ÊZñ‘øâÀbDI…yk_š»œ)}Ñ"nÞ$u:î^@_#ši™ò‘x’.” kÞõ¬Œ§ÿ@ÈÅ¿¾[hr]Q0£;ï´kæ¡i¾Ix:w·:ÅVY0Ðk—ŸîÀõæTÉïÑ}§¥ Â6Jj¨´Ô¦’ §E¶Ëê—s|Îþ-‡N`}Jf¿‡š+?•]¼záKv»Œ_¿( \kK}…i%ቼºÄ±¯Áj8Šô÷é.å=õ‹&ø­ÍÜš’ù)$ýlº" [á~”ðÕgM“…RŽ‘Xø<µ›<Š|öÕ Ì ”Ûã‹k['Ú-Ï.s¥dñ?Ï+BõY\³aŽ$É¢ íJq¥ ½)£)._ck¦ ˆàè1¹²öÁ¯DŽ@€:WÉ0÷>ÃA( z1*!¯ÓÑ¿!K_y†Žþ¥j§¦¸~µßó#0„ðë»eì<9k’¤“Ú_—ŸsÉn¤<5´âÉn\~z“?7 !’‡•dÌÃÏÐŽ¯ªŒÄžÐ’uî;IÈ!V¢õßï$Xô §â h¿… c½b1Ž;€ðE ø]ùEÌ{î¶|‘çFÚ†#ÐJZbu[Õ¶a\‹õ3ßAZ!er˜KÑ–p¾¦ýö®4¡tW~>û´”«ÿž='¾¢“d—§ù){±¥ôW‚æï§eKQMÊèùŸaÁ&£¼êõ#É5bÕÆƒÈØa”Üv ÷Ÿ»v¹Zú·³á|ч6÷ü9Á³¯’®ƒQà[‹Æ63jK n#y}Hù#{ïÚ¶—¹¢Ñ=ç·weœv§åÅ_î|Ý×̱Œ@ÿ À‚þÁ‘©0Œ#à„€XÕãÀ0Œ@#à¯w‹´Àïu¢ìªdê¸×Åר(\[ƒ˜)œ¦9!záòÓVݺUÑáÑí*¥-ÌL’ø3lþ qqÇQùìã0äP)³»5q‚0í·_¾¨ËÓêaÐë]ò4²È@·|…>‚Ý_ÌG:­¦o^^…˜˜±|m=®(:æZžnXCf0Œ[k°¶ø"Uˆey?GI¦ù„©pÛ)ܦU\µ3§-o¤ ÉÕ,{ÛæîžwõF-ûkÔk[á7rÌ;˜½¼ñéÓÑð{YB(ùûâÚ¶ ín]æ’ñAQÈîî• TTU´ ˆM$íÞ”‘É9žyw÷:Á‹=øÖf{v¾`Âm· ¦»;‹8×CÄ!âÕkíYè‰{õ,þaâ^œEœz¨ñ1äÁâ÷Ï`F€`F`#ÐÞvÖ€ûêâiBЧ!^°.A®s+Û#h 8º 1TìD[Ûm‡ŽvÚWÞ©vZͶXïCX˜ªðÞ]‰îÓ»çëñJVûF’Ž ';ÝS'#ví7$ Œ{Û})åÈã6;¨»\Y,h'Á‡•úÚõ H§ý mG?˜سH/IFÞ²®[-´”e ˆ¦âî¤­Õ áÝE~´9ÙuÚ<ÈZÂìô#FŒø‘:CÇÿÐ!ža C=Ľ/Î"^{×Úæ¹×âÝEœSP'üN‘š5ÝÝYĹª@Ä«×Ú³*PϪ€Ðù’`†>þÞ<ôâ0Œ@oàwKoPã2@å&÷®m?ÅŒþ“Ó t3êŽmv€oº À‚g*PÏ,èòÈp#À0Œ#À0Œ#pï P_Yƒß|…“Æɵmì²hÙµ­l òÞi¨¦%ñ͚æó¥X0À‚7G1ŒÀ½Ž¯êÝë=Ìíc~· î\+#À0}E`° „š?F€`~FÀ_–Ãû™M&Ç0C ~· ±cvF€"°``ˆt”MëUrwóöÕvgJ×^‡ 3öïúyÅ_Jnr|(pÏgÆzZȸM+;j·Û~V Z•:,Â܈¯ÁÚé?ž|åóu‹€XÕãÀ0Œ@#Àï–þF”é1Œ#ÀX00Ï¥+Gä#yÇ—.n`×Ê|ŒQ†zÍd±eއº«×ðÆÚ³xõ 9¿í¯`1£(í,Vg_€ð0Ô³`Qø}‡[K¶×ÕÏo£¶Ý9¾ÿï,(˜%× ¯Uµ™Na}B>BÈÝ΄ðw>¦!ÁobÄÌ}¨#£ÂÓ1jS>òjéFÔø]"Sñ{R>‘W:fîFÆ–Ô+ Öï«ÀˆÀ·®Ô˜µ¬†¬æò—Á¦õ%˜X€¤Mš4.[LHÏZ^£™9K À«zý"Ó`WøÝâŠß3Œ#Àô,è{K#è!,ˆ o~ûœºý;ì-¿Á©KêJõ&‚Iãù¹k¥Ô±’»žÞUli9OÌP§Î¢‰EI‚hïèÝ’è´#î7µ.B²¡‘nô޼o¥î§lNþc}+¦ÍÕ^{cb>Æö*`]A¾h~Æš8äf…‘ãk¸I.x:;oIEnID¥Õxs§ÜgíB@€Ì= r"OÆvò71å £:'Õúq¨0&ÃX‹Ì¤¨eT5Wíß"nùilÝÞ#E‡|O“Öíå ä­©†Aä“Ùï¶gè;¼ª×w ™#ÀtE€ß-]1áF€`¾# ¼p0Fcn2Íf×¶ÀÔ„‘eVKÃEyGꓦv,xæÖ—ñA>Z0‰æ¾·n…c Ö;ä3xdüâ\þ–&˜g1n哘1+P"s‹v&è—D 7ÆaGIè'ÿ8v¼4æ Ñ…·päêA}n8Sмt¬pŽìáid–Êd^ÀkK)IÄX̘ŒL’ пE•¥øF<¿X‹TnUi‡„|ˆÂó7Ñú\:§0 3þᘱPï¤n.]ú%Âtßaepš{0Á7ÀjI*@UØ;Ë{uœÚwxU¯ï2F€芿[ºbÂ1Œ#À0}G€5úŽaŸ(L]Aå;ðéç²Í€†º‹vzUÇe=Kc#H.€Ä…ÙÓBp ûóH]=ðM’Šø–RÒ(P‚µõKlJÞíPeO.Cm«¼’m©¯Åb½<^;»3HEžf»º Àäï+:q”&“3U5ø;QlrVWër=oŒ=ä´Â5½~ÿGD÷M õüâ«ø"ÁǶäÈØåPso=| #v£¸î†Äá%HØdtÑJÉØ·ém$¬¯U&îò}ò–ZÔ®!:²:Âúchñ À`m<-Ož“¦#S Øk¦‹Y€¢òåºSÝ›¡‹@¢ÐÊ  hœªûVŽðéw$„£ß;=NXˆIiERöãÈIÌ=(øÄgòˆ¯êy„†F ð»¥àqQF€`°`À#4w'A7õaˆùâþO…Í€;ø¼œ„é‘XG‘Uû[¤I`óÑJ üIòäThÌÖ~ŒÄÕב•û(Ri±yóòÃP·½w\¸€ÌßCQyÊ &Ræ&ÌþÍ)Y©?øA,Y'ëܧf>Š5?›ˆ@Zqߎ½”—‚µñ bS06SŠêù(Èžˆ1І‚”ÃùGh$Ä£!Àï–>ÁÇ…F€`< À‚ÀܵhÝ÷‘@vd!ÀU|\HûÛ:Ï?I3ʪKh& ôŸ½Kû Ò£0‰TÒEÔÙizÍ••x5ã)üöõH)ÖØ ¯êëf=…“•K±bI4–¬zBòp¾M*ñþ!c2E ~ñ$22fa’ËL»ã2Õ'¤‰HXøVmXŒ%QÞWÌÍæ`,ÉŒ-J“ÐâöÑ ?Ø©ˆ{þ¥ö+<Ђ׿baB,~_N‚ãYm ļ¤qT²F! !À  Uûeû íÆs’ÖÄK‹Ãå—ßQ!r„‘]c>»âì~í)lø÷…’¦æs¥m.å¡ðúXto6S¸Sï;Pµ×ˆâe˜9AÞãŸýÏzètàæ8¤S¶ªído`Ì›Ø¤ÑøPK÷õ\›÷!6PòÅÓz)rð,àQsð¹àU½þÁ‘©0Œ€3ünqƃïF€`ú ôŽ} 2 „ª‹8VÛŒJ¢4_?Ñz±Ç½ µ'êñ_´Ò¼îÙ Nv’ÖÌÂCå_KÚçž› =M®?ýø ‘b.=a<ÖÑÉh¤Õ}ýDè}])o¿€m[­ˆÏþ ö¾¶ ó¦bš‡eòQ4!÷tc±ì•¥8ÙùœÄ‡á >ܱâß⥉®¡PXÞSº‡(¤Úþä’ǰt©^>–é1#LL«ÄâlÒœ ‰kâÆ¬{‰<0Á¾*³1±[‰ÎKñã=qÛçx]Ì4ïíG=Z”1AÂå¶™œgXí­ÂFA¦=ì¼/Ã.0ðÂaÀ¤©HN¢ Æ[0ËÊžs“ a!"dTWÍ ‹¥“¼=È|êôOÂlþ¥ýèèxä9úì8r‹ø7˜'›™ð\§ô­êÝj‰9zäd†ÂH»Ë"kÿÕ>óì V`Ó“Wƒ#ï®LÔ‘- †Ó¨ht;{Gí.—"£©Å[öaÛ¾‹Î÷ƒëTg‚îïäç ”žƒéd“&U…MHŒ)CovbÝ•båwËc“É7.‡A‰€¿Þ-ƒ²±Ì#À0ŒÀ]C€w j/…ÊvDŽÔ'ÆËÆõÂÜT¹Œ~ÙdÍq/tDMö'Щj¿ •µØ·cÒÄV‚Ëfœoµ/g‹œ8Ru¦zR+w™Œ¶›Žaý–c¨%•ózc+¤µñQê_*ëõ't*r •,*ñÑxî7‘ׄ Ép˜h7Ö7aß®#¨l”ùšþu'|0ž{Bl§Ä6 ô“ðĤ®“a9p5¶ïz¯æóxÇ?UDR²)1oaÓ.ê©ýu_¢4¶TÐjëQ±ÊD1‰ßþ1ÖSž–¶h¬­Å¯5P¤oœöº$¯¬Àþ£Mhi¹*MÀ¤>JŸh·#AÄ\‚uG¿Äáƒõ(¤”¯L 8zôPQ]Yþï—¢Emh£Ø ¨AŠÆé HòBÑì$iIÏ€ãË}3?]¸&üf´GØ¿~‚+¿,¥;b·ˆI° 'hl¡ü— ŽÑ´ETÔ@‚hKQJ)Û·ÏýSÿ¨* å*È>®ª{ï¹çž³Ïç^®uöÙgoÛ'0p4FÒqAБr“ö´šÕ“lV’&#wA¯ž‡‹Òs ÔùÎc§ÆÄÌ!Ë•ùˆëÇXï/¿oÄšΖ1öDÈÑÛÈ_Få:»À[ïµjrŽZx»›9È¡SonIP'¦vîö=ù9˜DÏÁ¬Û‘Ja©Eﯫίyû¾î‘ÅØ²r²…lõõ:.wÇhõn¹cà†˜`L`P`ÅÀ ¸-ŠŸ’%%Aq@ÞðâRB%é2Ÿù‘“”b¨<1¸÷à.XD uKËhyüO™õ ;F£l›)@ØiÖ_7ãa ]çO^þë0c*™•«!õ”VÄ,wqág˜5ãO˜:«ådþà­ÙèÊÆõN"""-eYÎy’ŸÁ)côÆ&$RÝ‘S«aÈ9‰¯»åÖ·t z‘»Ž™s&I•d-}FxN£¤itÅ:йžgÚÕZ…|>*EyX“sS#©ÿú½˜·°†%Ó0IŠ00yeÏa%)Š©Ìı[9ëSõ¡ØõE¢M0Ê.‹Z¿º ÀÆòF¤&TcâÄ÷¤I¹3ñMé{¼Š|4¼‘°‰ÕA$sñI$$˜ó§¿ªÕÊ÷‡ž Ou¸»O¶‹ygÀ h;«gµ-! ù1„1Ždd9É[°ªâ6/•—¬=vRö%é)4©bè"Ž“E¸ÐÆf¬J—ÃyúÅ~€ÝòtsCÅb¡˜Ê7ÁsÉ›(zÆ›_ ·!G%zj˜Ð#¨Ý¾GZî¼Öó`ßR߀B3IÉ÷¦åŸ÷ uÚ|ð²cù„o’<»Ö¶¬ÍsËêVõ v¯§p®Š?¿ØJT¶[T4VQ8Vê¿= «òtÅ1ÅBB틇§"ÄjÆÉÚÁô¶ ɱ›°jw;QPêégèTKs–&«ý¬ÄzrXš» U}òÕç S/(«t'D„›úíû‘îÀ.{­Ùv…œCÒŠg(i–V´(uQ­^XwÔ›‘g“½”ÂÎÚ¯³UÀ;J@ÛwË€ŠÊ•1&À˜À"ài 1„ºpoˆ·øÜ\ìÜ—è?ÇÍÎyŒfssuÒlà[VÜ‚4ô¼x…,F $D6m7ü}'üu£åÁ£ÿýX¼å5䬿«ÿH„(“òjѳiv1]ú™i¯C=ï¼ Ä‚Ú\,pΤ#ʧˆ ¶8ŸˆNK¡å ‰èR”A4«m{•™*ÇKtqb¦ÓÞ7çÚÔ#¥-õPmÛvL;JÝŽYîöCãâ°åx,ÖÓL~'õ=]X0Ͳ;” Ç;rñzk;™åS>ô'N¶÷ƒ²¢Ìë}ï”*£p³g::ºaíùz‚FcBH‹è¾ï Y}¿M!'—rôÒñ'Éÿ‡&Ôø„‘Ò’•Qˆ}Ô³‰Â'ÛNR© ¼¶ø)\¿ÜŒò5ðáÑ+X/ûâmE¦4Q6õˆ¸Þ#_*ê­®fä„}$YÏä–<‚—…Ï÷¶(aUip¾t+ äT#«èQ¼þ˜?Œÿ“œ€&¼‡oë2¥ú¯žo§%ÀwâïWzE*!Oq•‚¤Š,µ/¤ô£cÚµ¨»ËEÈÓÄêÄŸE/N£°xƒ—…‚^¯”ìõÈCô>êI&uN×—x9RD- ¢~ÎFÄ¥/‘KÏ… IDATšC÷…Rúwª·wYncÕKGc]>Iž5Ó¥÷y>yë4t3±ëÍ¢ùý#X¸¼³ŸžŽÅq¶´I"$mª_ÿ×9‡´×qbŸéŠ%„WÖø]VùÁ!ß15Ó1òë¿¢i¬—%jR¯øëv hûn¹]éøz&À˜ª‡;Cµ,·B  ÚˆÓ!¡Ò|¢SI]ˆ«3<ÇÓ4Ãîõ¼cÙ~îKfîÞ~ìö³¾/NÊ ãœø¹k—2òˆAˆä[Ác >1Ä h§ 0íçñþn3Z>:AƒU±Æ%«~NÛfyV8)_ìyQÊþûvyÇuÈ–Tð(Œ«ãhè݃àÚ2䜻& Œ'ÄÏÂrƒ™dªž— i.ý¿n"…ƒrT¼_¢w]‚‘¬X·ÎÁ\Z $Ûý±Õ<ócœýmPq{¢¥/eä KE|àX^IþEÌÈßÔˆEñÂrF oJ{•_üQ#¤kç*54üé¿%¥€aóؘ!å&'륭µñ˜¤Ð$b˲h)/¾z,Úƒª‘¿¦9;”Zœ‡ÜRÈSòNªþ§¨Z؈§ËDtk >)®†ò49óߘƒ]…;ѵh6…}ìE² õ£áOG%åÃó<äIÌ¢qiF Æ&4ÊUzû6FX€lE$$?ú»9Ê{+y¤°ÍS¯=oï¥#y°osN*…¤%Ù),­§ä5È’‰ H!†g“£é9’y{ª‹ó†€¦ï–‘kaL€ 0!H€— Á›Æ"3&0ø hº˜|d¦Ö‘R€uÒ¬ø?‡ã8ÜðÒL›RÀ3© ¬)J‘”ÙaÚ“Æ7 檅iºÍ˜½£Rqñ•4/8 c;aßiÝwBžíƒ6²Î¹p¿äÔ¥'pTè9Ô¶¨®g¥€ýj2„¿FJšaÿç_ÈJÇsÝWeÉ•1ÉžM¾A¾A¾êt0§·Ÿö¸ç-ä©åºT—c„˜[©G§Ù)þJôõ©'’¢pêÜ‹¨Ù)Ep™ô«n,—qpû!,ÍÞ†ôç>¦ˆ7öÔŸ´ÞX#ðdÐSnF0-åX±ñÚÄ­á¤)Mß-šJ>ø*o=|ë+Î’J`L€ ¨“#L‚ 0&À€¦³z4`½T«Î÷Ú§Á*]Ö/»UC BŽEaäuE™@ãðÉ"䨃r¡·DŽ9ìÜÐ"e”æì%3tÇÔ…wLíˆNDêmè$çKßþéæ0¯}¢(/=n®²E‚Cåwɨ`@’·zÜtÌm«£hÓ8DSØÓ½ã÷ ,¥ oî:ø®#/ø#)Ôíʲx¼üã.|eª¥Ÿ´´J„¤ýYÙÇX•9¦ØAÖ;ë‹ÞM¹g-ê›»:GcÝ'±fáÇXóÖ94}Æ‹#ÕÞµsNÿhón!0ÿˆœ.=:ɪÆq…aýæJès€£ú°jI©§J¬×ûËѓԌ''á¥ýßà]õ˜¶½ÊÐû«³zÉËÔ¢†¬p¼¶lÒb¼þá«Åd{áp=òó£=šbåZ­+q\œrû‹DŸ‚ÌE³°8c E¸Ï[í—ßJ¾ Lz¿ïp~¿7T|€™mváôAÈ͘†eKE7«¡â}:ƒ«óúådÖ^!ï1&ÀÔÉ!&Á˜`J@ëuÀ¾oµSrd»%”£F“rtB¯ŠÊö:gϰ¶žÁBZ¸o(IBYÎX¥è4`moÄK3êP\ü9 Ó•›_áH…]uñ<*;÷ìÀ¦??Ì^¹ØS4µG:h=½º\ê ÎgIÁKàÚ•°%¨HÖæ3Ø!—}úV%îB‡út½ZHrTJþŽw".žDÖËxgð¿àK²ûšÐÝ/â$çZºÑuöIáRT7Ëâ…%B &“ÍÀwW„5…b™ „¤ÍXtKv¢ø] IKбDÄ1ye-$G¹is°…>™+6!uM;.»ƒÇ‘¥c…¼Û´z·\Ö:îbæJ:t.0™sýýŒ¢ç¶óÌ7´<§IK¢ðjìh\åt÷ã:$y-3Aý3•|œ”ýÃXï Š)䦱ü#˜»ç9Y@Ý60/Œ¢—€Þ³Ó^q©+{ÈØÉ€ÂÀlÚ‹Ë»~ÕO)‘ï–þöË9|ëcÈpˆÄÔÓ%lüQPB~DÈÒó›Pj6£´e$z6Æ¡§“mò¼aLà6hýÛò6DãK™`C—€6³z½Cs!e¬¬TˆÙÉäå>ÿ4ÊvGÁ AÄ9äèBS“rôÀÿš…tãøÁ&ŒIŠ-»ï6Ôlæí'(Û _™&;>U¡3°(·¦ÒÓ¨ižƒ–…SdŠ®òô0–%Ðáï°çÃoñüÿ˜ƒhÃ,Zz@Ö™;>2 ó‰Ï÷|‘Ï<Ž´èlH2cáÂ=Xñ ^¡ýþf/ÖP«K–ÌfB'=L>@³ë¥fdEvàuÃiÙÔ^ŒË¡y(™Ž›  lSt’wÍ8ødŽ$¿$4æv½Îõر ±óüO(ª„ ÞÁ¡ÜP˜KÉé£ZHµÒP]·äkâ?k€¯Ï¡<§Q:› ÿm¿‘ö?ÙsÇîÇ+…sCZIñþXòDM/Aa%=o ~pÕ{HZ¯¬#¿ÅŠ|3^Ó#vVZ÷ŸŸZȉuR¨Ó¾BŽöêÊè2ö¾M?›sc𔋀˜êOyíAéãîó˜0÷9˜+#)6g ³vbƬÈ/l£¸”B¦`Ë#WÎ3aÆŒ0/¿—¤4…­N§¬4h!ÙÃ&îDùb(Øú,~“&äªqv VÒr…R ÙšHJdR<ˆò‚‘J¥w_\Bžú‡!{+†Iy!¯¾y\Žùàzëq¯Ð©¡ÓPÝ”„•¹!4Óÿ=ôE 8UGÎI’铼 ŽÄý"6óR`)ŒA¢¨òY¬œ;:½IKA ?¥Èpæ§z”ä’Éwñ§˜³¾Yš­í+$íôPÅU¥WÖ#Ð]Já\)ôjdd5–ú£hW â\ž%A–ÓÀÐêÝÒ_ »•u9×z„%ŠûÔWû²§˜+?8×zÜYõ‚S Õº¶êK§P¥«¶·8 ÖPUƒX¿·)˜ÐۈͫÁž2o‘_ Nåú>°û_q «\è{¿ä | ß*Jöˆ°)"é& UøM¡¤¾³ä#åÛr‘BÖnsÙJáj-N%ø€ 0&Ћ€_¯ç õ¼»­ÈsýEƒøˆ|ußq+8Šcu+ÞgâXlEžúQógܼyów”ω 0&Àî8 «yþAÐQô[²ö¸9j+0€; :(¼©?…VÕé\g%o|ôk—fþt:‡Ð§Jó2¿í¾(Tk¯1¶¸–óþÁEçз~Šní’CÃêÈ\Àíô~Ö'ŠW--¥™SŽv¿‚Û™8íý T×DÑfd7| I«vÀ3k‰3…M  h8Am–·wˆ­O'_E¼+ÆÊ“Û¥?9ó†H-¤¨ô<:(}ºê!X%G) ¨mÙŽ³¸ËÅ@:­ÅdžçÈ·E8]t³·ba¹?j.¾Ökùˆø±1ù8Dþ 2ŸRBp’¯äè«RN8­íÂÊ ?Æ ÙYn¶ÿµ¬AX"YÖdE¡&w<>-?Œå¥VšÞ'Ÿ´¦ß¡kP¸tRòë¢#9$Nzt×Ê[*ªh}ÿD_~y£Ÿý’›ª¥e8)kP×=×Wþ‰µ¥D ¯*JÔoÜýBº=¯Hhm@úD²þH®¦ Ðÿùèš/ùhؼ 3rº°rëãx|ìU|jœeq¿†`w“€ŸŸß?Rû§è#^²ô’4 m¨øˆc5_lEžãVì;~n:‹}wÊ–òÝmEžSâÿÂpð`L``hµx`¤óµ «â:§kïdÈÑÀ@ÉDß½ÄZÔKXÕ@ÒôÒØ*×z1½°•ó¾ãÖ{i7g•’® )ã›ýõ( ôÐ{ÞME½³œCκÞËþ†¤õÌÚ;çÞrqÎíÐôÝbn‚~b“Ý›ÝìW–ñÐiT=Ђß õò´†F_D·£Wï!8E£Â„äµn_âÉYFÛ´k(Oi‚¹É‚¸hàÃß’R@‰s[R |¤$S˜ÎGÃi@nö3y +jò½_T˜ÞÞ÷ª²uôÌúÖå·HKŽŠþ]ïV¡qµS\„Çö¤dIž«ÖÁ[&À˜€g¬ð̆Ï0&Àn™€Vë€oY ¾pp Ák%ᨬmź›É¬Y‡’ÊYäq|Ê€Y ÎŽ³T·J@Ów œOíM@p˜”"c› ¿ÃÑ7d1p«Òz¾NR5”7ÂPNeȳÿãÿ…_¦Ex~îEÎÿüï¿ÁWç¬v_MÅIJ‘¥ •rv^¥I7Kj„£¬Œu(F¾TÚ2|Ý•BÆŠ(þRÈØ×ÿ)QB‘GLýí—køÖ%|«Q„oýßzÄKŠŸëVäÏ«“$4äFbÝÒÇ‘­:X•²m_“ªÓH #ë#rY°$ñn”¼¶+x‡ 0& Þhœ˜`L`À h:«7àÒr…w@0Ò?GŸ»'·<´húnw&†;ÍBO Óæ§¢˜áO*yµ‹§ô}ºš½‡àTj°¯í§õøŽµ’ßÑž~Ò}N?|oy¨ì%dl¿úEš„>÷J¾Q„…±u´œCV8v®÷~èOâÒ©áÍuäh´˜|Чò‹dDÝr{7Â9L€ ÜsÄú~NL€ 0&0À4Õ`Y¹:&À†{éÝ,¹–ê›}×Y ÏGÅDÎ7<„øäp)*ˆ‚³ïë¡D1×}ëàÅ¿u‡h?·ëÝñ¦.ñµ_Žá[/ufââÅ—éCÛS ­„¢žPøÖ‡¶û3¬‰ŽÆ³qé¨pf ”ïmu¨‰w™`½ °b 7ÎaL€ Ü61«Ç‰ 0&0дz·ôZs û!ê“–Â÷£b)籬J¯–Bpn§œb†¾ÏDQDþ~% åM§‘³ê<†¥±ï §œ®ìÃÕˆ+×cwmûÚ/çð­£JÖ¡¡´á[©f’·¦YøëO"‰y•X_uÍíø¼A–fòcúS —eL``ÅÀ0¼éÜe&À´'p/ÍêiO‹[`LÀWZ½[<†BåmnÐwTOe‚Gõ}­àÒWN© }¹ Õ¬È÷DÂxúSÏϘø)jŸÆZÀßÇ(Þ•‹ë±hÛ5ùÖ/ß÷ôqm F`ì}äL˜ù'$fRHÑ‚GQ¨„ku••™`*VÐ[Rϻۊ<×P4ˆÈW÷·âq¬nÅÿ6âXlEžúQó9\!AáĘÀÐ# é:ࡇƒ%fL`€ çw‹÷œ¾îêè„Å:’fæ…·À{8QXÙŽ®ëô ›"»ÜFHÖ{˜w Üqƒ=\¡:à÷F=ïn+ò\?ª@ä«ûŽ[U! nU+<ÝÎgL€ 0&À˜`L€ 0!M`°+Ä `L€ 0­Ö°˜\`CŒ¿[†Ø cq™`C„+†Èb1™Z´Z<´(°´L€ 4~· 4Q® 0&ÀV ðsÀ˜ЀÏêi•«dLünᇀ 0&À´ ÀŠ-¨rL€ {<«7ìÀ4!ÀïM°r¥L€ 0aO€wý x³Ù¥ðË®s‰ÅKùé¥HÞØ|%²l‚ŸÉãôÙ†c> ¾ƒ¢rSL`àY½A~ƒX<&0D ð»eˆÞ8› 0&0È ˆhœî2kbÐÝi…ÕEŽk"¶î5—L¯u )BPR6 Á¢íQV\»vÆiÜ0WÏî1<«wÝPî$øÝ2Hn‹Á˜¸Ç°b`ÜÐQŠ q3¬– 0·Z—$KÒ$ä.HÀÝŒðÛ«Ö°`oµcƒà>³Ë€˜ÕãðÃëžso™À Àï–;A™Û`L€ ?¼”`ÈÜó®ØƒX›‰ÿ&T4XlÒ[ZÏbir)‚Êà· ¶ÛÏ5Arr5;lq}ì~tØÎºÛ±‚Ô nSóÁ:¤Ûd(ÅÒ K zPµbÒWAíö=Òr„äµ´ÂrKc·8ÉÛ¼›ú[…ze‰‚E‘ñp×X«ô#¶¤¨¯¨†_ÀÛ (EÞÆ³¤ àÄ?V þ{Ä2¡H€ß-Cñ®±ÌL€ 0ÁO€ƒÿIZ›O!!³ ã ô¨9ð8ÊŠÂ16`„,}W3þq¢ Åíãa<ˆ¢,`aâŸPÕzC:ßÓs &S g}Œs¹á(Y>ÞWˆÙyÀJƒré#·‚¶ƒ5ˆL4ÃhÇ®º§±ueŠÀœ Ê2ˆ8² ÆÂÏ2¯ KVFáÕGÇÐÕ×qÜÜo¯ÊòˆêÚ›Ûa6_ÁU¥nUÆ„{ñ¡>ŠBs ¦’B@ŸÙ‚‚’™XbJÄ'ÞµJ¼aw—¯¾»ü¹u&p¯àw˽zg¹_L€ 0»K€ ³ï.Ÿ[ïnWFÃáH~"xâ!Ûµ ;ÿåt´koæÒx:mv>)ÿ›v¶ -/ÂV.«$ [O³{Ü1F˜ßiÛ颺L,‹÷ÛHyãqjûsˆON|Æ\ú kŽà¿þG4ž!—ÒUþØjžù1ÊbË÷¶ºÔeGݪùBÆ2’ÑWðÝÖ­XnÖaWSæFÀ2çЧñùWW2Z½„·L`PàY½Ay[X(&0ä ð»eÈßBî`L`P`‹Ay[z ¥›…\Ê6-$³úäJl®½h+Ô£˜ã§†)Ñ‚>‚‘Îv~gŸ¡Ù,ÍõA) jÕGÍÑgQGVužÆ‹Ói€où+vQ¥ú•Óe¥€Ôú<ñ÷BñÐÏh°nKIÓñ‚ª°eú²#Ë(k«F l2]“4O‘R@¤ÕBB:â/&0¸ h:«gµ ­­mW`þB‡Jªr¾,ç°  é»eXäN2&À˜€;l1àŽÊ È£A½ÝM9 ÇÆÎñ³²±*ÿrL;°cóØá`°rkf“åþuI~+ÆLþ¡sO„ã_< Ž‹ŸÆE8U”æ–«Ò2µÿÑýy„”¥$FÀ(q›M/ej{Îâ#&0x h5«×XUƒ©a½cOeæW±à–”qö:´Þtr[š‘MJÔÎâgaÌ·[ViÍëg·K@«wËíÊÅ×3&À˜ÀÐ&ÀƒàþI Mmhr'wýïš]„ÓCÆâ4ïyKè”ñÝ&Ù‰ Ö *î!ÌMÓ#MúÄ!9&Ø¥ß{9Ô… YO××u‘}€=ýeï×tàéã½Ý…$.Ë* à2ö×°£;EÞ» h1«gm5ËJaÕcN‡ù@ þèìq´|4§Ü²¢ò¡É %k;*VUamÕyù˜¿™À % Å»ev•ÅbL€ 0;H ?Ó½wP¬áÔT žÎ"ÇÆ6dåìGÙ¯Á¤€Nlû÷}0†­ÏO`t‘×þÂJ {Þüàj¾¹Á£¤°„1/΂!g/2gTàzM’¢Fâ©fœÉaÒõ¾~IJ ·…ƒñü¡ÈŸw9«t(y}*Úk긜ÔYàñ âGvÜ^¯hÖ¬¯ÃÓ±÷·cXë Iï¶1§LG}‰Ó >`ƒ˜€³zÝ:¥—”§’âO,± CÌBcçšÈ(y ´[鸖è÷ñm„ ½«r{ê(Yam¹)h©©¿/¼”ÜÀ25‹·L`ÐâÝ2»É"1&À˜À&Àw¸»æ¢2R±«$æòÓ˜ùÂ&V#¿ÔŠ••Ïa~”¼¾^|“·ÿY3þ„©³êPN3†Þš ¨P7ï4%aIR7rRª¹ ©Ÿ¡æku†^òM$x04ˆÊø¿QWF‘ ?EäØw0‹"$åÎDÓï9¨•QB `—¶t°¸ˆ<›’HJ=ˆ­â¸×R—ë¨&ú;H.ŸžNƒœ€6³z²eÀ‰ú¿zì}ãîýÖ”Â{½MþHªq¬ÃnM †µ‡.ý3ÖeoAöZ5²ˆ\mW}’ý*±»Y\Û‰í«¶ÙB†f¯=ÑwˆÒ^ÒݞܢºæƒGM¡LýÔp©yG$9«(ô)õÓ½U›š¼â˜ÚÔsÕI›°´¢E²X›±GRÆšÞ6!9vVíþ ‰MòR¹µK–†cÄÆ9üªzŽ·LàNÐæÝr'$ç6˜`L`0ðëC8õ¼»­ÈsýEƒøˆ|ußq+¦¯Ä±º#=q,¶"Oý¨ù3nÞ¼ù;ÊÉÚÕ‰s—äéõàCH/ëüèê°ÐpzBzŸ”u‘32q>Hˆ@AQ‹DS‘]$¦$‡NV\øÒŒ¥Ë‚nšþ÷$»/up&0¬ t}‰ôདྷsѤ%zü®p6¢BÄkSNmµ{–ÒCÁ#øç§oà·)^Tÿ .B×UÁú“Rá$ ]šþä4Lo<ˆÔÂÔuf#^Ò4Þ@UÞÛ0”†£éæÏp|i Å@Qe"¢Û¿„aa ²Ê^À–P=lLÿ#J@B”Æ>þ²T' ¤~ߦÜj¿H Š F="®wàÈ—ÁX²L¦Û _H«œ:_Qä'™’I&ÌÄ¥Ú9Ôo2þô{¦ÿç¨XógdÒ'}(6, …næ ŒßgDJ¡Æs¿Bšdu»W¼Ô5¡8ÕýsD÷zG«æ-`L€ 0&Àœ øùùý#圢Ïßè#Œ¢Å̉úÇj¾ØŠ|Ç­ØwüÜt8ûî>”-å»ÛŠ<§¤ÕÐÑ©>ð€¿.ÒsOåG@×G˜¾¾Î{ª¹_ù ½C¿S PVôû*¾€ MbVoÀM~…uйDäO<€Òbò7@Ÿ²,ZN,xÿ×M4°}e«gKŠ€è]—`L=ís0WØÊ,C—Z.dôŽ©ñi4 ïøÅ¥´B¨ìLl®G$)„"`Y†PLCÙ®·‘óÇF¬'Å€P6È.N\B”ÊÍØ¿oKî¹_¤?®üâȈ’!síµK{Ž*ÊQÂê‰V]¨ÿÁ¹•Ñ1Œªÿý˜ÿÆì*܉®E³‘—'xÑ 1[è×®flXCÁRJbY) ⯻A@“wËÝè·É˜`ƒŠ€˜­çĘ`L`À•Š|¢±ñ櫨Û)嬙WìÍrHQá˜Ä|csû°Ô©Œùr8`KΡK£§¡ˆÜŸ’Mów}N&õþÈyþX;ååHå9;~R ë€vyi€­JB”Þ²Ü"Tªèµñ¬¢°µÛŸ¾d´\—úßyÍÞ·À¨Q”D« ž@+µÕ¼ó¸d­±$#¢?-sY&0 ´z· ¨\`L€ 9ê„ÊœfL€ fÚÎê"~þ3èy¼‘PþÖøÿæO•qÿ‘Ê¢(Œ¼® pil?yÊHgTbÅ’Í|ç~¤- Áòœ3ø¸y:ε¹"‘|¢v_/K*ÐcYâ}¸®º-3AÎ5úxt rË««Èw‰MH+Ò|-ÛW¹`¼¸h<–›Z°çp :Ol z$9X_ôUŸgM@›w‹›³+S.,Yå¤O Aæ¢YXœ1JxÏrõ$m YáxmÙ¤Q¤†Š0#“þ>’>I‡ä¤ÉxíõÙˆqXòäPÄy·­Éa`2Ð2 b=õª_„ÜŒiX¶$QdiÙPñ>µG»æ!N 4b¿š÷˜`LÀ¬ð…—aL€ ô“À˜Õó˜†tÃ×ÐôC¤ŠÙm“?~:÷!L臼ÑÏÇ@H%Ç¥"•”>(™áܧø/¸? sçNéGÞ‹öOn¥_Ưp¤m’Iaá˜z”P(ÊZkóìV Ä¢_IQ@²ûl×G=û0 ¸€œ„j©º•fÊN_ûU9fG@«w˵.¡ ¨Ce“3ß M̦½¸¼ëXý”"Òx”ýÃXï ŠË[`,ÿæîyäÀDX%ù£ d&¦[qñ›KØMQ>ŠMfrœü ê.ÍC± l= IDAT¼ãH_©ÎqÓða½äÆ“¨i~ ö¿ÅÇúiÐó›Pj6£´e$z6Æ¡§ÓÑ*ʱVÞgL€ 0_ ðR_Iq9&À˜@?ˆY½N"Z@zv vÓìukëe®¨‘MûÉ‘`„ÿh¼ð¯‘Ôd &¦ïÁÁ†v47¶ jó!Ô6«Óî$ Äò,õ\8 ñ£¥ƒÀ¨Ÿ ’"ú™–ïEÞz3›ÛÑp¬›77Hf÷¢Û¥jUÊööä¦~-kþ»‘òô¨:v^’aýªCh¤±À¤‡…£Ã.¼YjÆÁªýÙåcÉÜ_X¨sŸ¾ÈHa@Ã!ߥzˆùy•“.¯-Quèã1ÿ1ŸM” xÖ€ï!¡ä‹ƒføs$`ñêy¸X) ^wæ;iÛE߆—â°`þ¬ÛñK¥¿‹|rRýc Â+‹°`Á,{# µ7_F™ô^é@îo¤:<]Få:rþ©¤·ÞmVw¶Jý‹ŸAm糪>{Õö.r(È»L€ 0&p X1p Ðø&À˜@_´˜Õ³âÆòF¤Òìõĉï!!SúE‰^šáŸü N£ §Ð ‰Ú4rj5 9'ñu·}ݼÝ%Ÿcñ³œ()#«Œ¼þÛN cã˨,С4¿S#ÿ„³ §†*ÉmˆRõ¤²½]¹'Ì}æÊHòŸÐì’ ù…m¸Jõ‡ÎŽÁJ²ò%N#¹,%ÒˆÁêÔ›ŒÓC•eþaÈÞ:ž´ -»7_Q¤¤—e6r:¥ê”³¼awš€ï{¬PÕˆ¡1?– oUav#0=Vö–|­Çþ~éé¶×$Öÿ,xëY²¸¡?Ý5§P¯ê‹(û–úši-ƒ¾¦åŸ£ÑÚ» ­~ ƒœ**¦Ä’2þfL€ Ü.~ŸÞ.A¾ž 0&à†€ë€£p³g::ºaíùz‚FcBˆ£?~ :-Ç{Ñ¥(DèRõE¯‹™ƒ›7ÝKY¡É)t.ÅÍÉ`d¬~=W ,ýƒDTÕÄ7 ¶äb›«³nWnQWLÆ3¸ÙmAõËß$tj¨ÔÀðFí¯ð:…jYM„èH¶z,¶ àAÆÀo’9„CŠ›Ÿ†žD?E›œk¼$•zMŠþàpï2»@@‹w‹½þPß( >#™ö¤å5òàß¾Ôæ ö׈~<<…,Œþb¯Ái,n Š‚`\þ=® ¥ýÏÊ©Ø'ÛDÕ ¼¶ø)\¿ÜŒò5ðáÑ+X¬X/©…Tç&­xïV– ©ñ– 0&ÀzP/ö:ÁL€ 0&pë4›Õó@H¨úÓ݃|TÆ6pöP¤¿Ùþ:t÷÷"Çò!7…Ju¯;Ô>!!Žóš§ú¹Û«Ÿ–óX'œª‘ÓÁgØé`?irq-hön¶ŸÇû»Íhùè–‹Å¡XõËpÚʦýÆC§Qõ@ >|ƒÖ÷Ó ¿¾ ^rT*‚r{J÷ý@h:pø«+äg@^¦äT––­!­ã’GOJGË«35fäojÄ¢xÙJ.ß Ó3ê[[P”ßjEÿ®gŸN0ù€ 0&pëx)Á­³ã+™` hµØcƒ|B–¿~‡q¹é¡0ÆÓd§&ír¥LÀMß-´\'3µŽ”ÝXRô(¾èü9b”Y~iá-e2H)0.ŒÏâðê‡lIžä•½}è?ÙR€.jÝwå´Íƒ6òr)à~iùJOP”µV1eEþ¼:d’R`rn$jNebÙ£T[á-`L`8`‹á|÷¹ïL€ hF@ÓY=ͤæŠ] FDcõÆh×l>fw€¦ï–$ Xë*Pí¨£'•<ÚÅý‰Pr¦wÅ•:¸ýÅiÁÎ -R¥9{Qª6&m»ðŽ©ñiãèH8С®óÄË® œJò`L€ Ü>¶¸}†\`L MgõzµÆL€ Z¿[܎߸ÁPý‹¸§mó œnؾù&±äàĹÐ[[Ï`!ù 0”$áRg&.^|™>´=• 9>,.þœ!ØS‹¨ìy 0&ÀúMÀÛû¿ß•ñL€ 0& ÐtV!3&0l hõnñ%¬g§WêÂÀ ´ʃ«øxë_PXN3ýúp¼[èÞêÆ¼ý•õÇÂW¦‘ãPÚU•¡3°(·¦ÒÓ¨ižƒ½¶Ë'™`L` °ÅÀ@Pä:˜`.´žÕsiŽ™&´z·ŒüúX²oJà ;`”pD ||Œ”Ôôù”ÂaeYÑŠŸç«.cïÛ´Ì 7O…:ŸÅFHyMVwŸGÀ(ïóXlKàJ™`ý%à×Çêyw[‘çúŠñùê¾ãV¨‘űºozq,¶"Oý¨ù3nÞ¼ù;ÊçĘ`L€ 0&À˜`L`HðóóûG\rù}„ó Výˆc5_lE¾ãVì;~DjõXì»ûP¶”ïn+òœ’”sbL€ 0& Õ¬Þ‹ÉÕ1&0Äð»eˆÝ0— 0&0D°b`ˆÜ(“ 0¡E@«uÀC‹K˘À@àwË@åú˜`L@`Å?L€ 0 ð¬žP¹J&ÀÀï~˜`L@ ¬Ђ*×ɘÀ°'À³zÃþ`L@ünÑ+WʘöX10ìÀ˜€xVO ª\'`ünág€ 0&À´ ÀŠ-¨rL€ {<«7ìÀ4!ÀïM°r¥L€ 0aO€Ãþ`L€ hA€gõ´ Êu2&Àï~˜`L@ ¬Ђ*×ɘÀ°'À³zÃþ`L@ünÑ+WʘöX10ìÀ˜€xVO ª\'`ünág€ 0&À´ ÀŠ-¨rL€ {<«7ìÀ4!ÀïM°r¥L€ 0aO€Ãþ`L€ hA€gõ´ Êu2&Àï~˜`L@ ¬Ђ*×ɘÀ°'À³z>Övl__ƒŠƒí62ø«¶´žÅúµGÐlü²²„G€ß-Ç’kbL€ 0;V ØYð`L`Àh3«gÁæìRøeסËIRÊO/EòÆf§\·–fdû•ÂPâCY·øšéNÖT­Ø?¿MØÝzÃ׊z—ëþoå7¢è¿¾ï}n°æ´5 ™¸û¥BÇÉØs¡ùËëq¡g€*ôµÍŸ! *Äsžîúœû*à½]N›w˽͌{ǘ`}`Å@ߌ¸`L ß´šÕ»&4笰ºHt­“2®¹dº=!å>4yŒÛ³™é*kcÕ.Öt#wk*æN帥ö€`ºp\à-]}W.jø°&Ѳñ$jšû¯Ö+–îG½£F(@0  &²Î¨XU…µUçÀgÈmýÔÔ}ôÑ94É»6Z½[l ð`L€ K¬–·;͘€Ö´šÕ¥î« Ç–›¹X6îVkðù:GY­Ç0ÕpÈ}%óè]‡õ,®ÚŽÞ¥œsFÉT«¥§—¢Ä^êµô n¿~ ö.£rÝNà­wûo­áßþW¬)> ÓY7æŠfÀJ =¦[á+UÖß^Àî&‡ºôrS?1c.nnI`Ý€›ªÕ»ÅMSœÅ˜`È+†ÑÍæ®2&pçÜÝY½®ØƒXaº.}6¡¢AYˆn9I›°´¢E†!Ž“·ÐŒð—ؽþ¥|)VmWÎ+ȪjlõÅæÕ`óÚ¼ô˜Ë’7|ƒýiF»…S?¥“¡8U2›†}Ž©ÛWmƒ_ÀÛ (EöÚö:ÙVUœÀ楛$ÙÖ»b»8ø»‹¨ ¥ Ae ~®¨pp7îÞO2S½AoÃ/¹Ç:ÔÁ­XÒ° 髎 vû©ÞäµêµWœ8øÅV¢âðe[›°\$YH^•mlêûXão©o@¡™t"EQÈ¢šLË?G£ƒ¤±ŠîɧÞ"@–/yÅ1ˆª-¤TyFR’!V•¥6m–¸r®«h)I1ô‹ý»òÂWi'}Õ1Ô¬“—:P¿’—A«fó×fì‘,Lo›» «v“_×gH’ì j7VÙžÁgi…°2¸úíû‘«>‹â›å{ì©~µÿNÏW_÷Å·çXuˆÝÝwˇÇâ3&À˜€G¬ðˆ†O0&ÀnÀݜճ6ŸBBfÆèQsàq”…c¬dv.ús'öYñ—6u|ߘº±Ü°©ùßc冑¥ çÄ1e|ÙZ»3 0"±ë@"~u_3r–·Átüª—™z•]'JWTc n=•Šh'­ €—¾ƒy…](ªL„qC8Ê—ŒE›Å€R$Y¶ÂÌ‘S‚¢¢ñØø‘Òaen\þ)2×¢D‘yMæGXuP¬©ÚHæ©©§1¹à¨ÑÃ`jÁ¬§Ôõý7pþdŒ…Ÿ!e^–¬ŒÂ«Š¥Bž­Ä¡ YE¢î@ Æu 3á=¬?,+$Þ©ANqVn}5»AQf8Æ;õIjÞéë“mbP„×?…Üaëqµ+8®žo‡Ùô¾³|u]0Õ]E·¨)è~Ì]"ÛÕg<ˆE/…#ض~ ‰S?Baçx””„ConCê¿ÕK ¹?Þøª>…>ÑŒ‰Twµc*þ oG |–jÏ?/-šŽ¨ÑB ×gHæ–²ðÌY‘0Ö<Ž­%‘˜0&À˜€{·lê¾:ÎeL€ 0AànÎêu·+fëáH~"xâ!¯7Eš|ÖGݾ4ćРzÚ5”§4ÁÜdA\ô ìüu]ަÏ ‚öæ>‡ÇnB -š÷úŸˆS–7!ßHÛÜÌwÖ ÀÚ\C1Uö–eˆåÓP¶ëmäü±ë<EžYNŠÄ{žA”Ú),$™sõ¸¸1ì(ýbÎ5¡ð·'±ä‰Ÿà}!³þA”­ž-ս댤(8Ü:‡üò2l5ÏÇüyd/–;yô‰Ø²,ZÔŠøê±hªFþšzäìHÀUIï„Çö’©áä¹R1Ï_䨯l M¿/yñ#`yu&°ÆŒüMX¯wâgëSm£„jKt9pÂü¿y±¼ØŒ9¯üy1rIÕh ©àQWÇ‘Ù}‚kËsPð÷¯Ì(ªyË’Ç‘•@ >)®FÝçô %G`þs°«p'ºÍF^=K"Yœ>Zÿ"qCRÎmIá¥kíÏ\^m.òDžH³Gâ­â½´CŠ)ÿûÝ×Oj Çþ[åçÄÛ}š÷ç¸ímˆ¤»ùn"ˆXL&À˜¸l1p Ðø&À˜@_îæ¬žnfrI@ÓÂj2¡¯ÄæÚ‹}‰ â8I) êB…ç7—^¥Á[×·Ø%¼æå†âGR®üZ!à=I#5²’¨XiÖÖ:˜äS–µóºt}yÎNÅ4Ÿ”B‰Ð®Z3H§axi¦]) gI߆¸pY) ŽB&à%ÑN'9f´üU–Ù|c“ÿ°Ôéó7föIÓñ‚¢'»¯Êòü*c’TVú ü!3ÐÞWÒÀsÒ#bØÛ”°R¤/­ÁáfÛ4¿ý‡½Ö}'PNǹ±cÐÖz—¥'pTÙ;”÷´ÛÝCÊJ×zdíå‚°¦@(D²s _ù"i&þI(DRü½„”,×¥~w^³×­ž²m{äsY¤ôtz%ËeÜ~K³iùÆsÃìXÀ‡ú}¹/j•ŸcµÀ=°½›ï–{w 0&À<¿81&À˜À¸³³z40s¤“s¸/âgecUþä˜v`džg±#OÌ÷»OŽ?÷C]anO>,"J¦â­wÀ}4ë¾<å=„™3± F²G§ùm9%Ñ’‡e‰÷áº:æ3– ïíÉQ6{.éÜV‰…Z1YATÒºþ‘וA-Õ?yŠXŠ ;VFûŽ3ö.§³bl>á‰'qéÔðæº#(,n„‘>•_ä #ÊÝÕìÜ +$Jsö¢Ô©Ò.¼cjG¼['ά.ssà®eQLÅÐ_7U cŸSÒÐ}#ÝÈÝÕŒ¼à¨ïþXY—Ü…¯LB5ব‡=õO*®ÜõRÇgBí¿zî^ÙjónáE+S.+ +}’¿ZöÏuã,t°ÂaAÃÀd˜‰K;æHÖBª¨ `Ff›zH BnÆ4,[’€(Ò¬5T¼OçoÂnâ´Úb—ƒ÷˜`ƒ„[ ’Áb0&poÐjVOŠHhjC“ý÷;Íêÿï:MÃKÝ8d,NÃñž°„ï6AY`Ð?к$ëé’Ò  •R²4žÀ,¤ÕïÊ$³× ;IbRTüŸ¦ˆjrôïcw«<0¸OÞ†¹sõHKS>Éá. =µà0¸´(– ÓtÒý©ÂzÀìŸÎ}È^o†1¡^†™Ê©Ú#ޤ®àŒ°bH ÆXE•76fãÒQZ@©|o«´uý²¶žÁBºÖP’„K™¸xñeúÐöT„xÅÅŸK÷¤Gº©¤˜PÚ·6ŸÁѦ›4*@ö±àæT¯¬ÛçKU*£ë`%D¯F(Cm§ô½3²9¿C¡®³M’B¤¨n>ÞXðâéÞN¦óß]Q´@>Ô¯jlúº/ÍÞÓ»š½[ºÄKE‡’2½äkÂlêB~êNT4€ŠÅSXʾSÞ‚öt‰˜? Jô(+‰D’¹¥ätê¿“Ôœ=âüôu€ûÄÕ1&ÀîV Ü)ÒÜ`Ê€6³zx:K¬¨'çx9ûq¬¹“ÌÓ[°þ_öIžãÿáù 㮆#XJ÷5´£‘œÑ}+rƒG9­g— úô êñT²3‚¶Ð:ómšú±d›½¹ûŠ”ñ®ô£Û?B}Ò@º©«pŒÌè£~‚JZó`Z¾yëÍhlnGñlÞÜÐk€éÚ‚07åï‘¢)´¶žÇæ‚cé ¯Ï$¥Âh¼ð¯‘tÔ‚‰é{p847¶ jó!Ô*¦ÿªlTÈ–£c°FìÆ…{°~w ±¥z—ÊŽ—,™AC&šUÍ«Äúª³’¬Ÿ7Èóê“p?½hÞ~‚êöÇÂW¦!D7¡¡Áô¡mô ,¢~Ãt5Í70éa¡a雥f¬ÚY‘K}|õ?BÐC¦Shhl‡4†.ɱ_¾ðu,ïR•|$ ä¤y;åcYµO°¢Žž»ó8\U‡UªIà“='qŒîíªôj©oÛßÿB¾Çêw”«ïûâ(ͽ¿¯Í»Eñ»‘4¹ °lÝ+h2†K0w”Þ · Ö]XJ{•ÞCŽÚËyßó%,h^Y”€‹ŸAmç³R”œ½ÚçûÆ{»|– 0&po`ÅÀ½q¹L€ 2ZÍêEe¤bWI(Ìå§iùÂ&’c¼R+VV>‡ùŠ9»˜x.&û³fü SgÕ¡œLê¼5[Y‡.ƒšjŸyƒì‰Á³ï Ë`%’ADZN횉,ƒ?Ξ¥Áwͳ¨f4.v¸*—Jɱ…+T׬…ÄÍÁÆH:׆Y†ýô€Œ/£²@‡Òü:LüfÌ:€œšË¶j<ÉFz$-ù!vS4…‰wR¤€nbð9æ“ÌMH~§ŒQЛH"§VÃs_wËÖ £DÅ$›s¼êt”dfJ«‰­\oÁÖgñÉäÆÞgA¾Á$Éš˜Ù9þ+t»à2ö¾MRæÆà)É;¢cKHyíA)øûv“¶(ˆ,$ ¹a»·âž]GP•Qò½~/÷ÅUh>Iÿ#r:õè®M ûbAÕŠJÖtcƒùUYáF6²ƒ fk, ïþú3”šB`îž¡kؼ 3räPž½ŠOÍ#³,¡Ö˨XógdÒ}(6, …næ ÌÿÉ÷È&ÿBqi|s:J?Áròq`<÷+¤M ¿+©=:/zA×eŽÅcY?ÅÜ?ûµ+(RÊšÔuÏÇõ•@"E)©ËÄâxÙ§IýÆmÐ/¤F=¯ F<›­ HŸH–Fä|³³vš6T@ÿO óÙÇ@?ž.ʘ€ïüüüþ‘JŸ¢Ïßè#æVÄl…úÇj¾ØŠ|Ç­ØwüÜt8ûî>”-å»ÛŠ<§äðß¶S>0&À˜Àm³zZ™ü ±Ä@8ÂivØUX1ˆ“»žéïq—y‚gµbeÉ4D_Ã{9§%sð¢×´ ìú[§kyH†¸fz9–”â¼B¼ù  óº~¢Eµ¤DP­âØ)‰6CÜNœÊõë@(púX›AõÝê=í/_WÑ}½>P(\/î%wo~¾×ï徸i÷^ÌÒôÝb:‰ü¼ó8[Ú&-OÊ"ÿ¿£~‘#°åf¶¼Oß_“ÿ“W…~’Šx åé!,eCE­4èßµ7 sɪ&mv>)ÿ›v¶ Mq”*,ƒä®Tä¹&ŸÃ‚vôÌzZ‚U”ß"EÈ(úw½“5•kÕ|̘.X10\î4÷“ 0;J@K¥Àí54i29#ëÄ';Îb{{&çFb×ë ˜Ó÷@öNËÊí1{€¶ï–ÜGÑJMÄp-žæd!ÒÕÜŒÆØu¤ååÂ&?Dõ 9”çi)”§aI –$">BQ ¹ KÙ#úT ý阒¾“döä)\©½Mþ»„íQ‚EXÐÿ­G¼¤D?y­ÈŸW']j ÷غ¥#9z`¨Žòð>`L`(`ÅÀP¼k,3`ƒž€¦³zw¸÷þ¡SÈÙ”;Ü*7ǘ€;š¾[’¦á7ëK¡ýrZµö,j—M“Äè8¼cNÓ >…ýפNªC&™ë«)´_¡<Õ«€•[0›üwÊq*¬3ù‡ö“´ç‚Òé„íÀ×° BVê:_Q¶ x‡ 0&Àˆ€Xßω 0&À˜€¶³z,,WǘÀ! í»Å*yè^ð hE 1aýaáp²»Þ$¥ÂÑT›†Œäiˆ‹Pæ–VÕx å)»C¡à(>9FÉÈ£âÂ\5TiZ’ûi‰äkXPõ;ˆ«fñ– 0&Àˆ+ø1`L€ h@@ÌêqbL€ 4­Þ-jˆHy¸?‹Ë‡ž„ÏO¨¦ð¢‡ñ“Ä™ x·êK«=„ ÅZ€n¡eä)Ð{(O7a)c^œ sF6×¶ ¹ù"ï>Bû)×÷äkXPßkä’L€ 0áI€Ãó¾s¯™И€¶³z ÏÕ3&0h hõn‘&ð݆LxïWR¨Jt`Vá Ì~õQ$Ñýå"tVÊ”lÕ#‹Ž&q¸«PžîÂRê¦à¦$,IêFNJ5"#w !õ3Ô|-/*7@¸pJUœ““ïaAFy_= ¢œpbL€ c"¬ ·¤žw·y®¡h‘¯î;n… ™8V·â--ŽÅVä©5ŸÃNL€ =š®z8Xb&ÀˆÀ]}·ˆðŸ´T?€"sˆp”"Ìd‡u$BÕ(}„òô–R ÃI?EHQÇ0—„Œ«aL€ ƒ=\¡:à÷K=ïn+ò\?ª@ä«ûŽ[U! nU+<ÝÎgL€ 0&À˜`L€ 0!M`°+Ä `L€ 0­Ö°˜\`CŒ¿[†Ø cq™`C„+†Èb1™Z´Z<´(°´L€ 4~· 4Q®{.­ IDAT 0&ÀV ðsÀ˜ЀÏêi•«dLünᇀ 0&À´ ÀŠ-¨rL€ {<«7ìÀ4!ÀïM°r¥L€ 0aO€Ãþ`L€ hA€gõ´ Êu2&Àï~˜`L@ ¬Ђ*×ɘÀ°'À³zÃþ`L@ünÑ+WʘöX10ìÀ˜€xVO ª\'`ünág€ 0&À´ ÀŠ-¨rL€ {<«7ìÀ4!ÀïM°r¥L€ 0aO€Ãþ`L€ hA€gõ´ Êu2&Àï~˜`L@ ¬Ђ*×ɘÀ°'À³zÃþ`L@ünÑ+WʘöX10ìÀ˜€xVO ªw¶NKëY¬_{Í–;Û.·Æ¼àw‹7:|Ž 0&Àn•+n•_ǘðB@›Y= 6g—Â/»]NmS~z)’76;åº=°4#Û¯†ʺ­À×LEV¿m8Øæ|MW}ü(ÿ˜s'œ ‚£ž ­È_^ =¾ #ú¼‰úF÷HùÄ&Wbíö/áM·ð}ý!*_cßûڗδy· g¢Üw&À˜X1ÀÏ`L@ZÍê]ƒésVX]d¾ÖI×\2ÝŽrš<ÆíÙÌ”d%Fâ¿s é]{à©å®¨ÁŠõ .ux*?€ù‚Uýó=]ëýÒ¡¤L’‚˜MX>o/Vî¾ì{%}–¼‹Lú” hM@«w‹ÖrsýL€ 0&0¸ °b`pß–Ž 0!J@«Y½Q ÿ[åŽ-7s±:mÜ­Öàóuª¬(ýë ÍE_é,–½ ýå÷X³ãÛ^ùƒ1CêsÒdä.HÀâÕóp±&R³îÌwÅ37oÎG\?t5Þ™¸çèQ>1¤hõnRXX&À˜p¬p¤\!`L¸»³zbFybm&í›PÑ ³[ÎcEÒ&,­h‘o“8NÞ‚µU_b÷úl&ð«¶+ç•›ÙPUc«/6¯›×~€ä¥Ç\–4x¾óËö¡Ñ‹‘@ãîýTÿÛ z~ÉÕ8Ö!+*þ MT¯é žKÞDmÁÑŠ*ĦïG«Ú\W3–Ò¹¼õgÕˆå ±±U¨—–+\qê›_l%*;Ìà+ VUœÀæ¥òR€µÇ®ØêRw,fdÇR;}.Ù°B]}óc$QÁ¢íXŽ IO²*K Äq²`ÐØŒU´DDZ–ûv7Ê÷ÐuU†'Ž ‰ªVlCúª#¨Ý¾Gª3y­XNâåY2stîî»eÐá`˜`L`€°b`€@r5L€ 0GwsVÏÚ| ™MW GÍÇQVޱ’Y¼ð:Nì³â/mêÌüu|cêÆrÃ^¤æ•D–(œwÇ]BkíÌ04ÂlˆÄ®‰øÕ}ÍÈYÞÓñ«^ˆå †²$ìZDí^À?¿õ¥#"Û~Õ?5õ4&<‚5zL-˜õÔ!tP‰à¨@âzÒ_šŽ—ݘ§ñI£<ün;rÅ&+JóÏBõœpd›fŒÆx ˆ—n¥¾µ!«èQÔH@Á¸d&¼GV êà_fP˜ù1rjCPTô ?Ò&Ÿ´– ãK¼<µåæñXöËû9·{þ¶å >¡×À(±,Á};Öž+ØWª4==×` ¦~„ÂÎñ() ‡Þ܆Ô«—–S¸c"–;xãÜÀù“]0~†”yMX²2 ¯>:ÞŸ!8§ÁFàn¾[ –‡ 0&ÀŽÀ-[£œ\`LàÞ# fõîÖøîv1¤¦Žä'Â'’=|K³Íúñ¨Û—†ø`N»†ò”&˜›,ˆ‹¾¿n¢+ÃÑ´ãˆ!ñÜ'¢ñðØMH¡o_ÿ‰tvanA² «Qž¿USðœÓ¢} ÞõëDÙêÙ æ½ëŒ¤(8Ü:sãg‘ÒÂŒÌÎIÈÍK@ GÛuR´Àxð[dâàè^պ᎓f "â"Þ]d•ÍDHc= ÅT}A"¶,‹W#¾z,Úƒª‘¿¦9;È#dˇ¤H|±çD)êj¥Ðu«žÞ #IWwé9DIBˆsRûy¼¿ÛŒ–N`y± ŠU¿¤û@j ‰u’s;ß·Ë :¨"¤Š“ …quÉ׃àÚ2䜻†n:3ÁRüÁÇ ¤›jõÇVó|Ì‘;Ñuìs)××gE.Ìßw“ÀÝ|·ÜÍ~sÛL€ 0& -¶Ж/×ΘÀ0%p·”·nfrikZXMfù•Ø\{±Ï»`X')¤ëCï“Êw^%«‚®o±KLyç†âGµ„†‘€4pvÈt»Kuø‡£¨&’ÎZaX~çÕ –¿Êõ›Oc¬²ô!,U蛿& 7hž]$»y>B'áWdŸ_¾£…†ÃñÁ+ ÈÙ_•ùðøeXΠ”®˜—†î«òտʘ$Õ"}þhï«N§¥†—fÚ”öÂЇí@¡ÙƦ¿·1²Ÿw³G³û™©u¤èƲRø¢óçPÆáRa÷í¸Ö„5B) ’jÝ¡*bÜ0é“£RÒt¼à Ì­<+JM¼¹Kîæ»Eë.wut¢µ­mWÐåÆßˆÖí÷]ÿ «:„õ}D點á^â j7ïA^v%ò–îÁÁfuñÕpçÒ¿þ‹º%R÷kź¯Wsi&Л+z3á&À˜Àm¸³ë€iàè8H'ƒ;_DeÉxèÉ+~Nʤ÷±.¾óš}ðéþ'š0…·§„÷'MHNÂV¡­(ÿ ùÿq–v”iyµ1²X¨Üõ8ŒÆùS™€Ô)®sèj‹£1ç%2[°¯V(‚ñâOJƒýRÓYìÛó™D᱈6“~õJ§­™” ÝpdàXN/­e°ÂôñyÇlÏûI3q‰<Þ¼ùÖ-‹C”<º·•÷ÔŽ­€²ãdXázÒõø–8R%·ð¬¸6ÍÇw–€6ï–>Bm*aNÕ0œb›ž]ªzÙ©hC…Ý?‰Z&6y–®ªC½â/ĥކä'¤ÁcßÁİw6v+‚…¿á'ä®z,¨!bÓÕ±=8R|ù«¾‘¬w¼õ©çzó÷ó#Ÿ*é`mÅY'¦ûz]åt_jàs•°´6>¾µpxýûHÉiÂ}1a¿ú¾é´ÿÿã[ wºÔâëî9~fä𾮡m­Îa …ÔmuøìN“áöî-Ê/³{«SÜ&À˜ÀÝ& Õ¬ž‘ÐÔ†&ú!£¾Á»þŠwÍ.=ÖCÆâ4d,:¥;Qün:ò"$S}—’Þu!H¦±±ôšJÈÌŸ,Ð-'ð ɨfí}O˜ÿ¿’ð^© Æra/ PÒý©TÑäŸÎ}dñî’n(Q8Î|r2•3#5¥è1SˆûÒCœÏJg²Ê$~’U]×éÀâ¸ÑJÝWpÆH»IÁ+zýQ‚òC?Ã'Ùïaaf5‚ƤSD‡0¥ÏõÖx.q{gäÈ”L|àè±ÅzV<6À'’€fï[¨MúÛ:ó -µé p›{qy×/°ú)¥IãQöcqü½3(.§å<åÁÜ=,‹ÄèÝ%31=ØŠ‹ß\Âî äûÃŒâÂoh Î<Ö6]Ça쬓RKÊñú3¡¸úM>Ùs ¿ÃU¡ôêkùŽ"ž&Ù€ÊVõ¨`±;BUmÚòowGuB¡N'!øÚ5œ9ÖŠ5¥äËÅhÂòý]èÞ烋œ·+¯×Kai;½¾D]ª²àT­øÿc&Ö,›ã½O.WÞ™CáõŒßNDáâh»|wˆ¯ós@=eŵk÷a¼pÕãšÄÿ4þð¤Bw-ÎÇL /l1Ð!>Ϙ¸ÚÌêâé,1Ü%Gz9ûq¬™Ln[[°þ_öIîþáyyXÝE^í—’÷ùc íh$³v)Ð_ð¨[ü! êñÔf fmA^Þ6Mý傉ôYìø˜B¦¡Ä®VHŽÆ ÿIy-˜˜N&¥$ssc ª6B­d^ˆÙÉô‹Ète»[ÐÜzEº>pj„´\BäfM‘~¼E&¨u“® é¹\t 6ÅÃÂ=XO×·µž§ÈÕ X²d†bª/õðeAOÀýÈÛžòåˆ5†XÐ!¢ËUò€Ý%sëuǤ/ŽP,Πì³â\7iC@›w‹âƒÂK¨MáÃðRÌŸƒu;~ ã1(éÀ''Õ)ý ¼²( ÌÁ²7ÒP{óe”e ÈýMƒØq“h&v¥¬(0¾ˆu ¢5ab⣑÷ÆÏq³çeÄ»Xܸ©ÄMVïVKw -Ùé.5ó7’õÏÙ‰›†ìYVº^}­Ùs}Þ“|€$‘/ uº ïI¬Þø º›‡Xõ$B¾–ªÞ`ÝÖØ9®w×g§}ȾKú,æP c×¥9œ¹ýÝÞýéû¾÷nµw8Ø[åÛ»î¾rœŸùï)//èÏÍ÷ж½9ôÕ.Ÿg‚+ø9`L€ h@@«Y½¨ŒTì* …¹ü4fE’ÉíDr¢WjÅÊÊç0?JžßÅä}~ÖŒ?aê,ò¤OfúÞší4žjŸc¿»';/H‚•Hii8µk&² þ8K«6Ô<‹Ê%T€¬ˆ½ýv÷ƒ1"-Y,ˆä4!ùœ2FAolB"É9µ†œ“øº[žŸö|¬ôã8?µ‘ë¤hðÃÏ ÄÀ$?ÿé8©"¡,b!) OÒ29F^u:Jh€"®›¸9´ö¿`ë³øMš|(牴äAÌXR{«=‹%¤ÈO|UÖÄJ}ö¢0ñÚŽ,°ò-úfO:—Á‘;&}q%êv®×—gÅ.ï Z½[ä¾Ù}y8…ÚT:n_3Ócå‡òZÝr¥GÙR0¼õ¬ô·k^sÊí’kóI,Ö;†™(pø{´UᯘüP†µÂwfËáDÅr…d ›Z¯øYµ‡ã<†cµ‡l¡OÓמ¥wÔel¤ë‚Êà·Çäå¢ 54èáúä©áR)œi•ÞU óé=4k'¶¯Ú¿ ·PŠìµ'Lÿ=… µõÐeÇÎ_œŒx¿«‰”Êäo<)E%Qe>xì²…_–ØýôN”Û‘åì¤þn!9œÞÏ"„k²_%v7Ë÷«ÿ¡M%1úøRû{ õE{ žî…™•ÍÝI´´ó„ÓIÄSø×¥›[¤:½ß_û½r×ïôUý¹ï7P¿}?ÒceÙ„|ÙkͶ{æ>¬#_oapû ¬Öæ¼u~Ôs®¡mÕ|Ç­çûêXŠ÷™€{οÜ—á\&À˜è'1«§Íø@Ì]üsôätâÜ%yayðÆ!ÄÁÔ60z6­oCW‡…~Ž@ˆÓÉiý»-F`‹ã1ÐÅÌ¡ëçØŠ€f¢çÎÁ–¹J–µy)´Ÿ5ІåžR ÔæbA¯Ó”¿…ò·8ŸˆNKÁñžDt)Ê€ Z þ¥‹ÒcÇÍè µÊþAŠ‚cæ®~ 7W;ÔCƒ÷uÔ—uYÒn`oy ¹oÑì¿pä0T½=¹a NÊìÅ ‹Àºãnê·¡¾íp×g¥€‡väY [%½Û%{ˆùÄl¾½Ü3¡¥^8JÜê»^Ÿ—²|88h÷nýëjÓ …Ú”“ÁÒ¾(wûkĨÜO¡%:ynýÍÁ¸ü{\JÇ¿;:ìn¿*]”û‹('Åe¯šº(DjØGd©„ Æ'0óz+^ŸwúÒNœêþ9-qRÂq?¥è!d T4_¡p¹ Ë)CŠ’ £ñöÂ&dþ‹/ÔΑÚSCƒ&è[ ÏƇ,X˜†;q´sâtTo]Ydy ÍJÆ¥ï`^1PT™ˆèö/aXø1ÈI¶,VKª\ŸÉrQ˜ÐX ÚŸš8“¬£šPzöªä×À_ gjšÕ‚¤Üp”<9¨8ÊŒiÓ{°½¾þOÑŠÅÅ ˜Þ4S?ÂQFJS9´i "öͧoà·)f)Dì¥ãOÒ"¯Û‘Y½V¾Y¢¨»•±~†7_x«Éú+êñÃP{Fs2MÆ”(ú_¤ÏûKªOýaXûuß{ðÉ[§¡Ë˜‰]oþÍï!Vu˜ýôtZn¨„ÈmƒY ‘ûFG¾jùŠ»'îûV)âƒûúcäœöÖIap¿­ËÄâx±lMO»†–ã¶|†Ú¡€Ÿï~Ô”—D3þâ*ú¿WJþòÒ×ж®x¿¯®¥ù˜ ô& þîê}†s˜`Là– h£°‹ã¯ F„Ë,²ý¬Ø]ˆº¦ÞùLºÌû<«+K¦!*øÞË¡uTIÑëºþÎïoÕÎåivP§³Ï:Ÿ ‡§sÎ%=’6Àëo1OÚ|L¼rt×™{VÜÕÎyK@Ów‹—P›¢ÆC§Qõ@ >|ÃŒRòk¢/ˆG"­n:奋÷ý@üÕuàðWWÈÏ€Ë;Iù“~(:ÄK @ÃÎÿ––/m8:yÒˆjö°blb#þãýóØ2?D Ç„­GÿóÉŸˆµÁ…$¤>k&ön™#ù™ÞPŠÔã½›*¨|«3äåG/<¼Sš°÷/ˆ{b$$Ÿddàî³µY‡šUö–I×OCÙ®·‘óÇF¬'Å€è•l9å&´·^rü$EQ!ˆ“ Y%Iزxšr¡ÅIΟ΋ÈjìS;â…%FÇ—(¦Yú¬²G(ä¬ÝD7ÏCˆXZ‘v;2Ë×þÿì½ tUÕÙïý§¹M ‘•¹Ôˆ(B¡ U¡*ðV¨±’¯¨Ç!p'êdž8ÇWðõs¥B ¢-ÔDD*¤ åEQÄ(ˆQPäj"!×ò=ÏZ{î½öÞkïì\6$¬ÿÌX™÷Ûo®¹öšÏœkNù}Øt ò$o$o›¿Û?AR^úˆ‘²âmÍå×àß´{Wn®£}í¶ÑʆÕÛ"PŸvOÅDZO´âÉ¿¾Éx~¾ÞíAx¤ã`÷AM}ŽÁxp”_#ùt®]«OM 1W„ –°Á¾ ëýüAÄPÇÑ¿œi&WnÏ9×€t$ ˆ@|gõb/GS„lýã.˜;¥Û ?ÃêÕè2! ¯?ÜC¯‹²f¾)2f$@aâúl±ŽÚ<&y&ZGm>ü{9UCÇ/2}iÉ!WìÈbÏm+3÷7ãძa…µjä:úu  8w¦Jl‘JÕ¾ûö „iÛ÷jùLa׸>%{$üÒ·ÉèYß‘#Üd 4DÇîR‹Í&°ÑÓ1æ®ÀÀó²ösmÛ2½õJÈU¯)µó^‘ÿ*Vä;‚äøfzSnð1¡Æ96ý ¾’ƒV clÑì÷Ö˜:ÁÂSIí~ ææ| 3õŸàÉáñíëËjDlºSê)'LXGÐBˆ >5="v¨@6¦Ì²±àïU( Ê7ëøµ°WºimÔ¤-sûÊÌ»k½ëÛî§ñÖºñÊš¯ðåáÙÆÖ©‚ƒ Üq0ÑŽÁ]ì;×Èí#H.Ü$„MK¯Ç%ú™ŽÜb™Ùn¥‰fŽ¬Ø®‘û_HJ´z˜n|VH ~â:«¿b»¦œxEW<ÓÕÕŽ$@ç—@\Ÿ-zÔ¦,³w›¿/“jæ.ø96?RŸgÁýEc¦#)ÊçêW¾Âã·öª¤IZ!e¥‹è2‘¤‚‚ˆs{h\,2@ $®éþÏ&BÃìMU®ìLZ0( UFFqée2„m"uà žÐ‘ë¸4+M“§TíšM ŸÚæ—à_²Q2W„=n²Vwø?¦×#bçvCr•Oˆ!eïb"ÔpM¿þŽ¡íäšBP;¸·o¤zE•Ä#¶»|¶01ã 9æ6O.í‡__U†/åô ]e«Šºv-Ê1¸þ¶«+£Ë/À>£ˆÊ\0‰GlW—8t"QÓ!!i% ˆ™@\gõb.’ \lâýl‰öb˜QÇà))d4¼W6y›\¤ŸÜ ß뇷DzlÙ0tæÏ+'vÃX=5Hé Õ ØÎâÈL:ûYËÏí=‚"ÕÛbÆT±ú»J+~ß¾™u¦“”æ+[›v:´>“HIöx°C”bÙcÛ-ã©=íÙõHQCÜ»ßyr°ò -Ÿ‹¯µW4æhÓ<šÖ¿öu–³ì3Ù¯Aæn+Ëóõ~;„.²fÀ¹jž¢H|’†ƒë,‘»9TÐáÊáZg»:ÂÒHðT‚`èL$@!×Y½ÆŒqI€Z4x=[ìÁPt4Ñg}Ï¢¨p76oØ+×N룉T þòDw÷„eÃÐÿµ)Küjp_?cƲ½Øw@ŽYýè ¬^´^v´_‰wDpÝ/oAn FŒ[·öÆvcråmi¿êd¥Kù­€aÿ΢ÿÀµØðÑ·’n1êÿ©„h;sl!EhºN{j·ÞX%{¹=ú&&>[l•}ïνX&õÐuªœám÷ÿV8ÙãaðÛ°Y®Õocd«—‘¿Bm˜;¿¾[]x>WdáÑq&¯Na}£®ö†mjR ÕCëj ï´×ø,±´¯3žÓ\Ÿüœñ¶m܃ÒV³F®·öÌYýÊç¾6s;6¸S} ®³$Áæ†Ö'–v Ή6'M0š.$@$@1ˆ÷¬^L…`  ‹Ž@¼ž-Ö¦qÁ]¹N%öNJÑAt&þWÀCvur©ìØ>þ×OL@=fóÛ÷wâ濇9ù[1Çxˆ>BÎý±®BH#?ç= ºú¯vˆœ¶Xó—_àVßwÖqœ¾/ð5@R’U#;¬ÿ¿¼ö^î·ø ò*1,ÇžY‡”vÓþaèæ{CM7Øž„Q‹~U—¿†Ñ“·cñd_’ãrpÏxÛÞŸe˜Á '{<Œ&Ëþ}*g„,÷Ÿ~ Fõ -tøë{x>©¸-¿ ûBŒ[š#›”}´é&Ü;bÉ1±F-ýä&Ëž– ®‡Þ7áqíOúi†ê¯Åu·¯³?†¿ ¡ùÕÕîé9?‘ãk?Åä'ää„'ä ¹9XpåLžÿv¹>ÒÖq°ÒžzÄídtÃÉs· 8ûÜÊ߭󅱋£Çà>é8vSɤG9 Ø_ ‡!”§ÃËg e°Goר@„gCOhUG­¿›®n¡—®@ÐKÝÙ©ëš+µ]ïfµ«®næ2î=Î;÷q§"   ¸h ÔâÔ‘Ó²g@‚÷¤·Ë@z`Ìã«uµ[Z%kìcXüëɦ죷‘‘óŠ«ÇຳgpL7Y¼â’ú}Ûí˳¦ì tÄÄÖ©rª¾Î¶USízDì…+yÓ¶o´z”:# NL[Ùù¶–S3ìu"SÝ|GäFiÏŠ²ÇàFË<Þ~Í®]ã]á–“~«V­~'¥Õƒ\þ-—.šÑoVÌ¥v㮺º;u5;¯s»šÝ.q¶ÜÝtu R}¦%F €M ^³zäK$àmï³Eû.ºº@Ö4úØÒà»Gß»kP~V´ôKp…Ë>Áá#Û%¾Û¦‘c4Ÿzmï27uûF.oðq¾nùº¹…§×,ÁmvíÎ.Í“ͳ]X* N ^ß·p,,> @# ðÙÒH€ŽèIi™˜"{dr•µƒ $@^% Ëø©H€H€š˜€ÎêQ‘ @S೥鈦vë…g F·Àúñ¦Kœ)‘ @ #@Á@ k0—H eà¬^Ëh'–’Z>[ZZ‹±¼$@$Ð2P0Ð2Ú‰¥$ha8«×ÂŒÅ%B 9?[jŽÀ³3þŽûïÿ;¦ÎÚæ<º–Å$ / `À˭Ϻ“ Ägõ↖ “€§ ÄçÙRe÷¿€V­û¯ëó^³¾®ëx¢Ý˜<§× Ì@ùûÇPJÁ@=ø1( \X \XþÌHà"%Мgõ.Rä¬ x‚@¼ž-•zÖÒ±@μŸ;%ÅEerFû«X¹¯:6®eßc„÷âÏP0qþ×ñÛýØØ1 4 4ƒF`H€.>ñ™Õ»ø8±F$@õ#¯gKŠ#· &Œï‚gÆ`ÿšNVÁ^ëxXk*ª­¸ƒê¯SE*³F<ƒ Ïþ=p¤Øõ«°òÓ}ež·ö‹ p³V²ÂD;&-ˆÓÄãØœ4hnyâõl±gæ#}ÅÒ¡^YÕ^ §pãÅ@zW¼¼?SrÏ"Èzde¢ÿ°°é YëøÆßO5†8ðïb`b%aÔ¢_cÕôt,ž¼Wgý =nÜŠüMçBJº„Íp %äC"qJñ­6hÛË?¿D²ñÄè"ôèñFOÞ‡“úBLe2e¡N$@Þ!à|ªz§Ö¬) Ä™@|¾Öc¼^´vìÆ¸,¬Éïˆï?>Œã—Ú/Ã'><+Çw²Î!·—öWaOQ JGžÅãV}«ðUÑY¬(Ú ä´Å‚…WaÇóŸbÎ}o õÇoÍ@ÍOÐÿ¾ýÐï{7 KÇÁÿ>lñ¥ñ+áwYr\™¼‚/}ý\z £'}SÉheø›{þi"Öü¿Ûq_ÿ¿âøöûìåËò%³–yNÑ›’Ok<¹ðZ”H™Ÿýî<;9‘ŽI‹X*Ç =Zø<[R1¾pƇè6j8Î 8¦v¾Ïl¾Ož:ƒ$ uz*RÍ›djgž“©þ-NúuƒÒDÍÀ¨§Æ zú”ɶ ‰­S‘žêôˇKã—‡”5µ–‡äÞ­}Øÿû”ˆJEp e 5J=… ‰H€ûX²œéƒ°¼ »½ßúËp¢õzLžóò û[³€V™åìôíÿŽ~rVÙ±k*±bÈ~ï¯@ŸîîǤ¹•ÅrãqlÑУeˆÇ³¥¾5Oo+{ÔS5$Nbú%Öñ„õÌÊ<m£”µ!er$N# \Tø)ÁEÕœ¬ @s!—í#¹Æý¦§-h`eGôéd 4~Û¸7WôÒ™”U¶=»AçüŠ&­G«¼UAß—ŸÐÒ‘“ب/±o'/ñqUQÊ|¶Ü^‚üÛQ?DMÍÄOõCæ/Ký߫爇úXB5§_!穉*-·y è˜4Ë+ʿ؎cÓO4Zµ~CV`H>®Ç±ÙY8csc‹|›§•œÑ®ðÕÇNh‚ãØ"—ÉdB½¥ˆË³¥¥A`yI€H€šœW 49R&H$@@ƒ=ÏÍÀeú 刭 ckˆLâˆÇ³åV‡Y“ 4ü” ™4‹A$pqˆÇ¬ž9Æ kö`ÄŒíØ¹÷k¼³v;­ÕS ts-ÑŠ¾ÄË›?Ãêy«s_øÆ€VÉ¡»ü9ò5–Mßj >ÜS¶ôÊöîÀÔY;$íØW| ǵY2R¬u× ü±Xj0lØZ¬}ë3,›õzŒÎãûo¡u른m}ÒA´2§v¿ å3†5“6âÙ ‡pLË3u=æH.S¦ô0²-A“(sÄ™-çqlM•‰œwñx¶œ÷J0C  fG€‚f×$, ÀÅ@ >ßË1^ÿ߯°tJkÍ)Æ=^EÿÅxû¤~„Û¦æÈ¹ãer”XF?ZƒU[ûcœø¤g8VXpkðâˆ7ѱã«ÈŸO®º¯S±€¦ÌâIûo¸úÆíX!›þm}¾¯5HOïóSl_*Ç—ƒƒŠÿD*^|1K£!3Í—G’=ìîdŽ “#—ùL\? ¤“‡­G;_y¦¿xþÏðË­tõŸ 3:†ÕAäIz9OYóG 1ð8¶À±r!hhmAâóliAXT  ¸hUGªÆßMW·ÐK z©»1;u}‹S»Ñõ Ríª«›¹Œ{sçÎýAÜ©H€H€*ÊÎà¬,³o-»vû Sÿš œ*« wW¿Š)êaéÝ(ßezŒWÐ1`HU­å§Ç‘µmk lwûä}ª¢©m3nËœÞÍË,1*Ê*P-ù"é9–,bçÍ£Ìí8¶:roHe~[y×â”Ëql&HCÊdâR'  h:­Zµú¤ö‰\ÿ–K?–Ô™s©Ý¸«®îN]ÍÎK“5v5»]âl¹»éê¤êñJ  (âýpª ÜòOL•Á¼›‡¸ùví+-=+ùô â1^ÑüD’+y_áÛc BN®ÎË,¡Sõ[_-¦@$@$p è2~*  &&Ð,¿Nm‡GžùL¼5ðý~W›É‘ Ä™@³|¶Ä¹ÎLžH€H þ(ˆ?cæ@$àAœÕó`£³Ê$pðÙr 3  ð  <Øè¬2 @ü pV/þŒ™ x‘Ÿ-^luÖ™H€âO€‚ø3f$@$ÀY=6:«LçŸ-ç2³   `ÀƒÎ*“ ÄŸgõâϘ9€ ðÙâÅVgI€H þ(ˆ?cæ@$àAœÕó`£³Ê$pðÙr 3  ð  <Øè¬2 @ü pV/þŒ™ x‘Ÿ-^luÖ™H€âO€‚ø3f$@$ÀY=6:«LçŸ-ç2³   `ÀƒÎ*“ ÄŸgõâϘ9€ ðÙâÅVgI€H þ(ˆ?cæ@$àAœÕó`£³Ê$p\¼Ï–Zì\û6ž]ý*ÎGfA$@$L€‚`´‘ @“à¬^“`d"$@!âól©À²û_@«V‹× ÈùwÌ[ùÊBÊk5vÌ߃ɳ¾ÂÙødÐÈTÝ)¯—°óüjdùH€¢HŒîM_  †¸xgõBƒqH€šŠ@¼ž-•e5RĶX°ôÇȨ¬DÉÎ#˜³øŠÖáÑ-e8»¨R›ªÒIÉP4×—Ó`FRÔ”TV¦¡}ë¢3 ´ ÍõÙÛ‚²¨$@$N@gõâõž]H€¼B ^Ï–˜ûcLßß/xbÆnü:ë_X³ø=,žØôqŠjQ!kþSS€¾1q#gWSQ-JŠ(X¨Ë?rʶ£ºâÄÃ?¬5ÂS*©|«n¦Iž!ÀO <ÓÔ¬( Àù$@¡Àù¤Í¼HÀ;âûl© ­ý*µs/üaS–eŸ¼hÿÛÿ}¶àúVDëÖD«¼õØyªV”bÑýËqÿ¼½ÐµF•}´y­Vaà ¸Ç5¡ÃõomÇHÇ'Sí |ÚPñ5fä-ǬÕ{±rÆr$µ^Š$ ;cå „*Ž|†©y‹}þ/`Ñ['üþ{w OêðÖÎݸ_ó¹~ Nù}Ý ÁŒœ!¢–UÈ®ñFÎÚÍ«7ZŸläÍ“rJ¦^¿+÷vV8°a#®¿~->ò}¢`ÊøÎÞ/0ãz_=®_}"øhåz´J’¶HZŒ‰‹>ó·‘³\4“ @,(ˆ…à @= Äç;àz‚ÁI€.:çûÙrÅ ž˜ ?+·¾ý?¶y#®ö)ºL¿[7å`DÑ!Üø³·e0k²«±âÑxßÿÍ}-Šž+F.AÎ ˆ×½™Ž½µ YƒŠ±fD'¼¾ýçxñɶ˜?i+Î0‡*|UtOŒÞŠû^KÅ‚…×b\0ç¾70ë­R;Ѳø]Ç"Ì?Ñk¶ÂÜqÀ¤AÃÚ#¶ ¢ººER‡A7þ ‡'t‚G; ú—:;ÔȠܺ|E¯»¬µøzOÖ<ñ†ŒÞ)OvÃonºTbWáÃâ³8^n—G“;qàŠ‹Ï Ü—¶)cÿoⵜ,,œ{P|W‹@ ç¾C˜¾ '¦ŒOz Û¢K5|)R# p\t΄.$@$ÐhñÕktñ˜ @ %pÞŸ-‰Wâ§:è”qv¢ ‰ÿ:{?s-–>ÕWv$º¿~kDPðΑøÙèëø¾\tý†_œúóã–Þ€ÎwQ”¸C;„6H^yzŸ8¶Ç'«îúÆÚ¯3.=ù'Œ˜³ÿý¿ºãVÁ[2ˆ 9øvQÈpøU¾¬O<½Sníヒâüú›Ã1T ïÛÛV¼^=„á;k K[‹å\c¬‘õ¢OѮէ~ÿ¹ÛïCA¿„ºË*°¬O„â‹Åc1ö:ßgßûÓ2†$ŸÁèÆ]˸Tʘˆ3øîÅñhq:^ß? C;'¡b`-æ¯ùyym/1Q¨“ @̸b fT H$@±8ß³z±—¬Ž5¥X»h V¿sºŽ€ô&¸Îÿ³å ¾úÒ®iMÅQ¼^$æâOq™oy»a‡,Ïâ¯*ÚýÌ•ûùó?±ìû^ÿXV $"ÿÎÉ’ùèqÃXjø5"ƒx2Û Xpë/u0ÈØ¨}:ÙBuhÛ÷æŠ^Zc}ÒPí[½0¬ïÄ…Öo@’EéwzÈ©b hú9í±éý;°]V0lßúsÜ“-üz”¹Ù¸Û4½˜•]F{F/íºHÄÜ.ø™TU'5d¯+*ÿ‘ €EÀ~¾ @“ˆÏ¬ž—µù+œ_ðj±Óñ~édïé9eïXôѪ QgOÉRÝOqbî1ª_›)„—#'·-î{èF<2ª«ã²ÐÈßÔå M´Áöð:è|hú«Ÿà÷c¯ªÑTVÞÿgÜW–ƒÒÂþu„–ýH ~âól‰R†ñD±øKCk³ ŽWÍí†ä*ßຠèÒ5Y]‚áSÛâÑüüë@6Jæ&Ü„A:•o>/ˆ×9P—𾼊•[K÷Ͷ‡‰—„¿º–V†Ä•è@°Û“/öG_y.JQEÕàÒ.™–ÉÿOó3™ø] —_†}:õÕ-–²º¤ès ì“R´Ž¡Ïyq +£½ßA,ÅŽœ/}H€HÀ&þt%  FÐY½x¼ÀÇý¸,™|²N «c§q»ér´™L[•|…ÉsN¡¸èMœ~ýWxjh$B}±Vã•[±æxG<ñH÷àñú&å>˜eŽgKsI”N$gñz¶ØÅNDðòõR,{l»åµpjO¤¦×b˜ÌƯ)JÄ€¡½¶ú_Bv¿ó:ä`+†eZñ,¾VDn¢Ò3ëˆMÞˆyk¿À‘#_cÙt&ŠÛ‡E!úu÷Ühõéûz¬Ä²Í‡pàÀ·xgÃ1+¾õSÁåsÆ­¬®ñ}Øæ<»›ßÚ#ÿŠIÂ\…±(—u±Dc #@Á@: @ã Ä÷;`÷ã²ôH«Ü9âÊ·—•9âj羘5Ò÷}íõdž}Îo©óõ’uÜ•ó5õ‰íÖF]Öª:1ÊqÅuWA?ëµâ™#ÄVîÆ²©/XÇrÍÛyõ-ßÞ•ë0I¿g.*Á/ò^@ÞÔþÕÈ‘<‹p$Xĺê AÜŽg3ƒ3³óÉ›ºSÊÔØcÚ"—ùÔGŘ(Ǭµò}Ï=qÙ¡ˆ5¡‡7ÄëÙ’¢#ìâc=Lfû‡È5z¾!Ÿ l¿…ÝýÃÔy·ã“5ݳf?õø²®^ù{pð¬Ò¥â¶ünVcŒ[š#›T]q­2dÄÝFÝ…íKå4'ÞCÖe/ãFÙÍ?wBOìÿCßf ^ñ&:v|ùóÏâÉUwc¢ùŽ?½+^ÞŸ‹)¹g‘?d=²d%Cÿa`ÓAû£»t<¥ 7YÂÄÇXÊZ?+‡ôxdn[Y±Cý s®¼/ª=ìS—2vLô·‹$¤p¯ð†£ @L\ž21Åc   (â5«ggi—ÕZfù-•˜`½ÖTŸÁ??:-ûUÛÊquãÕ‡d“ªöX° œ|Ãf~„³ËûÊlZ-ÖN}÷ͦ,ì»;—ãÙaú1q¬*°ìxï?Jd“1™YLÑY<û±Eÿ’º®Àܹ—á§í“Qs¢~åËèö#Y’| Å9éyïrùåÖ2gûȳý!Ç¥=÷óZ<=¤Ø:.í䇃e—tß‘`k>°f õH°ë­#Áb­`϶‹}dz%úŽ3+ºñ Jä8³Ázœ™ä#Kœ‹ä@±ß1m“䘶‡ßý¬À昶NXê?¦­¾e.ÅÆmÇbÙ•}Õ¦l$<Šý—éwÜT^&ŸgK*Æ/Ÿ Wld»‚«¡Ì' hžê JÊ"«—†¸&-®U† XIè7~8Îýºe2³^#Ÿ ´MþØA?ï±ônŽo‡²S"ôlŠôO¡R;_ƒg6_ƒ'O±ÒÐò¦úÞ€Ó­•VA™F°£BaÁòtŠ^Vã°øIÈ+³¿¯ÀY™þoÛÖþDblA `xÃË’~]aÞ?‰& ¨' ê ŒÁI€H qýØõ¸,]®k?ÒC‡Ž¹Óoš§úÈ [526/EþáJë›ÝÄ#{ñ¸rçþÏLìjU+¯´Ff¼K­eǯl(Æ¡7vãÑùúz~f=ÐIôöÌ~n>ßx;ºù~i¾?Q¿òuèw#QŒûJŒ òÙ„ýº\?ÍÞñ¸4=òÌšÕAG‚I©bVAdzbgV9´Žp4ò˜6×2W‚,eÓípG^wi¿îÂÐäYq}¶Ô‡jbÒCé1G¯oÜT커î[†_Zª»$ȶæ³—°âT—¿{¬zºF*kɤª°¢Ž0ô& x ` žt™6 €g ÄgVχSËZz=.©–²6SËŠ¨ZcÎt ¨2K}mÂÙodÃ@q;ر;·oªŒwëV²ìø¾a²ë¸ §̽IfËû ›Å÷¥Âˆ{{ú…‘‹\>-¯½Ø×±ó¶9ò z\Ú§AÉêqiC}ß7üH0MÒw<Ûåöb^û‡2úqfö1mˆ€ä<9| ¾õÓ¶É:¦í€½Z}Ëœú#Ü7=+æ#cÅL_ØSÛ Wð—;¨Ý½f‰ë³¥¥ÁLj¼)W 冶´’³¼$@$Ðìðõ¢Ù5 D$p1ˆë¬žÛqYQ /¼uôyü0Í¹Æ Á cnOœÜ=ñ9 LÃÍMIùNÕ"±µì‚žê(Ÿ”;ÒqiÍ榀 IDAT­þò4 Ìe¨–£)“Ò/ñ±æOÏhQÏϵ+L$@‘ ´jÕêwâû‰\ÿ–K—ê·’æR»qW]ݺš×9‡]Ín—8[înºº)3àrtXŒ¿›®n¡—¨»1;u}£S»Ñ€‚BE$@$@$@$@$@$pñhS‘ 41~ÜÄ@™ €E€ÏÞ$@$@ñ @Á@<¨2M ÏàwÀž¿€âB€Ï–¸`e¢$@$ày xþ       / `À˭Ϻ“ xžž¿€H€H€H€H€H€HÀË(ðrë³î$@$@$@$@$@$@ž'@Á€ço      ð2 ¼Üú¬; €ç P0àù[€H€H€H€H€H€H€¼L€‚/·>ëN$@$@$@$@$@$ày xþ       / `À˭Ϻ“ xžž¿€H€H€H€H€H€HÀË(ðrë³î$@$@$@$@$@$@ž'@Á€ço      ð2 ¼Üú¬; €ç P0àù[€H€H€H€H€H€H€¼L€‚/·>ëN$@$@$@$@$@$ày xþ       / `À˭Ϻ“ xžž¿€H€H€H€H€H€HÀË(ðrë³î$@$@$@$@$@$@ž'@Á€ço      ð2 ¼Üú¬; €ç P0àù[€H€H€H€H€H€H€¼L€‚/·>ëN$@$@$@$@$@$ày xþ       / `À˭Ϻ“ xžž¿€H€H€H€H€H€HÀË(ðrë³î$@$@$@$@$@$@ž'@Á€ço      ð2 ¼Üú¬; €ç P0àù[€H€H€H€H€H€H€¼L€‚/·>ëN$@$@$@$@$@$ày xþ       / `À˭Ϻ“ xžž¿€H€H€H€H€H€HÀË(ðrë³î$@$@$@$@$@$@ž'@Á€ço      ð2 ¼Üú¬; €ç P0àù[€H€H€H€H€H€H€¼L€‚/·>ëN$@$@$@$@$@$ày xþ       / `À˭Ϻ“ xžž¿€H€H€H€H€H€HÀË(ðrë³î$@$@$@$@$@$@ž'@Á€ço      ð2 ¼Üú¬; €ç P0àù[€H€H€H€H€H€H€¼L€‚/·>ëN$@$@$@$@$@$ày xþ       / `À˭Ϻ“ xžž¿€H€H€H€H€H€HÀË(ðrë³î$@$@$@$@$@$@ž'@Á€ço      ð2 ¼Üú¬; €ç P0àù[€H€H€H€H€H€H€¼L€‚/·>ëN$@$@$@$@$@$ày xþ       / `À˭Ϻ“ xžž¿€H€H€H€H€H€HÀË(ðrë³î$@$@$@$@$@$@ž'@Á€ço      ð2 ¼Üú¬; €ç P0àù[€H€H€H€H€H€H€¼L€‚/·>ëN$@$@$@$@$@$ày xþ       / `À˭Ϻ“ xžž¿€H€H€H€H€H€HÀË(ðrë³î$@$@$@$@$@$@ž'@Á€ço      ð2 ¼Üú¬; €ç P0àù[€H€H€H€H€H€H€¼L€‚/·>ëN$@$@$@$@$@$ày xþ       / `À˭Ϻ“ xžž¿€H€H€H€H€H€HÀË(ðrë³î$@$@$@$@$@$@ž'@Á€ço      ð2 ¼Üú¬; €ç P0àù[€H€H€H€H€H€H€¼L€‚/·>ëN$@$@$@$@$@$ày xþ       / `À˭Ϻ“ xžž¿€H€H€H€H€H€HÀË(ðrë³î$@$@$@$@$@$@ž'@Á€ço      ð2 ¼Üú¬; €ç P0àù[€H€H€H€H€H€H€¼L€‚/·>ëN$@$@$@$@$@$ày xþ       /Hlé•?pà@K¯ËO$@$@$@$@$@$РtîܹÅÖ Å ”|›6mZl°à$@$@$@$@$@$@-›ÀéÓ§[tø)A‹n>žH€H€H€H€H€H€G€‚Æñcl      hÑ(hÑÍÇ“ @ãP0Ð8~ŒM$@$@$@$@$@$@-š-ºùXx      h DZI€H€H€H€H€H€H Eð„` ªì4ŽËñeåU¨m‚æÒôNŸ.CyUS¤æ^ Ó%Û°µø¨»§Óµö8¶½±G«œŽ 7ŸwVZþMWþ†×üBƬEÉÖÍ(nªF¬GUb¾Ïꑦ Zv¸«þô<žÿÓk8¿®âËîß°XV›ì›~ÞûT³©yÓ¤±÷h¹õ¼> ·Gdm¹ü6/sý]ˆæ×Кţ,v9O»Ö¡¡å¬;Þ…{fÕ]¶ð§¿§µ§J°qó×û!ø?¬ç\¬ì.D¸N¹ÿ“j/«;ëˆ÷hÞ˜÷vôš„Çîìê’Nn7 csº" excþ,¾þ1™)•¸´o>ºCÛ  {Þx Ë6íÖ$‘=¿ûÍá+(¢¶Ë:dê€uë¶¡ïƒct7YA"¬·ì—6LÉÆøiùòòí|•tk‹«±r^p:ƒNoÀs«wÀºR²0nòD©¤#e1é§ddBšþævø9ó>¸y Ö•öD÷ï6cÃn¹?²‡âwy©øóÂB‹WßQr/Ý,÷R=êy½EÌþWVòæ-ù¿œ1 7´©”Õ1‹EvÄò,¨;]fùÜÛ«oÈý¯÷÷²Ç Ðað$L ¸ÅÛ¯Efo)ï®ÃØúÞ)dhkåupó&©g{t;¾›JjdB¶#œ0@úñÙÏ®ƒÿí)á»YÚOâ§ÈŒî´\i¿ø½Ã ²zaɼ¤o^!}ó_ßü¹ôÍË%h5öl~Ë6¶£efcfÁ 2ØŒ¬.hŸª:†þe#n}ôwHO(±7ã…eö3 è€gNAvÊql^ñ‚ÜkÚ’@öqøÍ92ËZŽ­Ï?‡“½ûãøëëP"7wf¯»0aÜ yu^)¿ ÓÇÞ`-©:¸³þ|“ ú¡0¤o øf#6T ÁC·‹`°Júû¿iH)­BßIÿwÈ=gýHUƒ­+eÕ.)‹¬¬yøáÑHxo 6iѶ,DÁ–,LšýTVêW ™ÈÉÉôYÓÑãš lúà˜”^ž3ïüCî‹Áè»§s=›žÛŒƒ2`F¿«’Óб«yîƺÇEÐð{tt>üpâP–”û$ƒ.ø±õHOGîp©ÃÂ⋪›ƒ9XÅ(“þ¶[ú[oéo»¤¿•þfÿžÙÏ•léoÿþ¦Ù[úÛ½Òߤ¿é3ÇÍÏQ75Fxf…„ Xëø-ܳyµô·]vøÌ!ÒßîˆÚß쀑ëÈ8ŠÉ*Sðó;÷hâ{«ð‡Bû7!sðƒ(¸3;¼P.e‰ô›T~pÿ¡Ö놃Õñâ×°`Åë·'kÈxù­ì)ùØ}÷èOúãØºuøúúŸ#ýÃ=úøäXòy0Í›‡š‘¸3Òo £­Ã~»ÂkB  D Ê›r ª…KQ¿ùL‰Ðüº„‰æ¤ï—åßË>G‹±zu‰Œî{㪬›0ªw¶,›‡ÇŸ/DÉi¸©\›—™òûøøØ¿eöiК œ,-‘|1n›<“îÊÂŽÂm2—%/ª¼$Bï1¦`&fŒÅµ2ƒ®’ÑÿžQ2ÄzzãZ/K—ʰp[šïþYÒ¼“çÌÃÌI±iÙ2t™½°¬µ<.³]"¸VVjÌ™7ã~r+æýYfž…U—“3m&æüF^‡+qò¬ ú|~Ë6}eûÍž†Ÿ|³ O/Ùæ[ûañý‹Ö.û±îßáÁiòB”%ŸŒ,}[’‡I9æaÒÀ“X¶x‹ˆœÊ¥-¬öu¦“Ž„Ìk‘/m:oÞ HÙµï°ù`…¤òFL›=Ó~3PÖ|U1ïš³'±[!¾øñ¯0c²Ü%"tXø.î”{éÁ!°Cz/éšýÈ÷_pù4tJZ*joì%›3n‚d”s|—%U0óf?Ž[Ú»L‰Fl¯4Ü:FïÓÌÍÀosmá•æeTÕÁ½ØV)þ÷ÄÐÞ‰(yý3_Ù¥›œ-—z~ŒÙý1cF.úÊ’ÿ%Ë>±Ú3šŸIø·0Ü(í×KÚï^i¿ri¿CÚ/Ú2ÕTKß<.}ó°ôÍ;¥o¶•¾Yb÷Íw·ZB!ãoÇìÙ#QðÀ5V I!ÈzaûT%–}ƒ í1µã6éwpéñx|ölÌ(‡N)zÎÆ¯º`òÌ9˜9m NnZ%Ûì}Oʾ—½A ·#ûþi˜ñð(Tí^‡eÿ:Œ¬ž½Pºëì¶nÄZ¼÷Š¬Ù¾¶2]úÆ™“ñõwZHÉëÏÚr¬þPÿ3q+ÅY³’#éRTîZ‡i·Éý0 ÙÇwàíýeèxË=è-·eJ¯Q˜1s<:;…’B:þþ°¥½nïg=3kÎJo¾<°R©¦¢Z‚ï¥8Ñüœi¯\€ýY#qwv §Ds•%­JÊ-A‡æuê•’TÙí®U%ƒÇm•Ò߯JK‘þöߎþ¦Ï•uÒßî¾KÛ%ýí_¾þÙ/|ägV Lˆ)Úo¡<ëU( ‚ìÙ³gJëWgÓÔ£ÕQýëTçå=Š"øÑÈiò›0n 6Zå +K¤ß¤Z|¼Q„GY¿U‹ÕzRËó|ž†M›y3DÕ¦exã°ý ¦}wǺ ûƒ“Qð7¢WÊlØvÐʶöð¶‰-Êo`äß®: 3 @3'pÑ®€¾oºŒe¢µ‡.0Ô×CUú޹Ko:g‘Õ÷.ür€5vóØÇÐõ¦­X±d–<µ C|w„¾ÊìP¯.•xç×ð­ 6TÕhy„¶þ4,˜‚D`QUÙA½$ÝZ|ñþn¤ô/î:ÙýnÈ@±Nm…¨ä¶m¬…÷?l“‰ô4)¥$ø½„ O³ %OÞ\ñ'àÌçb®Ä÷:u:Õy!YIqŒ:Zòžûbè -Ö9¿‰ŒmK°ûð÷HÜVbó¹R •ƒl~$õ´ØY~iøÅØØ&æÃU‚¿·­£]ÆLó­.©=Œb Ý.¬øÓg¨>*mxü„5óâ{¸µ…4‡(«TÒºöBåžwðÚÛßZ³Ð¨VØG!;ã‡Èª„_unH)´_ðk¿‰˜7ª%õ^ãð`^¶¤QŽŸ¤¬–=1d /«Wª*³€M¾Ïøc­§¤’˜”ŒRÔÍÙ²_„Mí[QƒŒN±zÁáÔÝÑ{sW±«ÈíU…¼+ÚH÷KÁ¥¢§;¡ù’Ø]$€e?€ŒÚj¤ôè íKì8xò®’^X]+í9cÉjQ·Ýž)B36Ÿh~¾´!«ìö;(í÷´Ÿt¤ãgÂÚÏ·tßæë›:èRžÕrIûgý?ïÙÖº/3¯ŒáÁÒLúT,íxxõ”ÙQ´†¸™òp’> ¾ã‡Êâ(¹GÓnÀȯaÉÛ»Q5 ?tTÙ{üÃÖ¾+À•¸3{5^9úÒõColÁæG‘Óÿ( Ȫ­ñ2S™Xb=ûœ}Ã~Ê dG^VèØ[úÃjÿ€Õò„Ë…)#oÀUø‘à·¾²JHÇåbNùa´I }¨iëÙªüàVÌ|n²†NÂ7KÝŒJN´ÚÓXƒôh~°êàX±+ã·4nÕámXòâ»À¥¾¾ê{´éók¹¯ò'Ý”eI¿z0zg,ÀÓ³‘••Œýûõ·ÆQ?®Àî"y8d–þV%ý-GúÛ6éo¿þ&e•çŠ>?ÇʶbÜv{¶ô·“¾þÅϤå™å#aBt ý-ôýneÝ%ýíJ_‹Ü¶먣3`$³¯Lñ½G‘¬+|+Ë~‰_ü\ïiZ–ˆ¿I hß5 ذÿµò†ÿ"WÞ€Ã{öX‰îÚð>Ãk¿¤vßÉ¿.m‘¾ÛkÌ4äù–Rö»»¶¬.Âé;ÀAÝ|Aö èšð 6KÿGFèo`”ß.+Gþ# hÉäççâTW\#/9[ÞÇç§GÊ ¨{+?ýR^3³-!€&Èïfß«b•Dé;^–”÷ Ÿ ÊÌ„)órðÚ¼§°ië'"¸9(ƒò/^ÃÌ…[Ðû®qØ%ïïØêðÏ€5ö;تòî›’™j"ëIˬÜÒô¥Ÿy~šÛ¨ø)nML…ÛÄï…då¬GM…Ö,)ìe½º6—^ª!·kMµJ8T ;+ZÀOÓPJ¾V@ù¼$z»¤øßbk-Æ™?¹ ¹2P®¨ù)òR/ “§hnmHG—eÎ’ñzoŒûõ@´ýî}|£’§ÚJ+^Rª¼¤…©Èyk}tvß([e/qÖ5özš”’¡x¿úü TÉÀÉÂ|š]€w‹6âÕÕ ±é™‘zàæ ¶‰Ü^&]ѵ`~®>÷ò¯ðë«ý²ÙçHII´dxEE‘÷@7»Ý’´v¶rÖÍ2Gð3áõžÐvÉüIi¿4i¿k¤ýÒÃÛ/ÁgJq雦Ÿ&Õ=,jˆCséSˆ¡í¢';z—ºØ “÷¨Ýê­öÑÛ8-5ÐçŒ@U¦ƒ‡vÀ‚¢ Ø|BVdEo}þZEö³½4+ùVÿÕýyÕø´ê¬m®ƒ[…ûù<\µrù”aæs0d’p»žå‰­¥ _Ÿ’ZÚ´ÄT½ß’¡UŠæggrkžÛ„ ùDÆ^~m»&·ÍÆÐ‘í©$ÊgF5yY’;bìcs0D÷ºI¹)G^ÁÓ/íBÇѲa¢Ýß¶KÛ"ýMEv@QÑnéo7øú[à¹ÞßÜýL½Ì½Rçó2ÁgŠò»%wcàÎ ‹îPGÃ#Dr‰÷=šŒAÍF§w‹°öÕ—ðÔ¦bL›ó€ÓËàR9Ëbžiá¿Iéy¡ ë]l\û*>µ #§ÍAg«ÃuÀM·ÞŠ62+ñÓŸ&â²NzcTZ}+í’@GÌì}+2åÿÏw·¡DžË#§õ’p‡}ÏÐüdïëçÖõ·+¸ô´‘ ´<?hyEŽ­ÄéÝúÊ¿/=ý'”·‡oµUe(y÷]ëh¿¶“¸ÒO°×çWvøSì—ÙõžYö[•õãxïµ2­=}{·^&ý¥p ÔŒ›½Œ¸n”ƒŒš2k¦Òø©î|ñ²Ý“ÑI¾-ݶ_”U¡üðxY–½¦ÆFè)—@·ë*¯YP‡rK³§ì€ã»Q‘Ö ÙÙÙèܾmÈË¿À…då¨Ú÷ê#ÖmØþ…½ þàö7eAqôèØZ¾ëí€ÊËñ†Lo]‰…Û*e¬±“Ñ«O*·½‰/,$娾a‹Hxú‡--®«]üeIè ]É1¤uζصoú¶-¡#´…?ùÖûC™ÄËþÙíȹ* §ŽVʽ -%3úÝäÛm¶ãtm-°[DÎa5w¬yK&Á˜?GËs=%tÎfߎ)“YÄÕ˜µò]ëþ®-;Šƒ§dô;Æ"° nv Ìàú²‹Ü^—Îà’Ù¶ÃÛ?–Õ]ðø¼{d9í½˜5ëLu%*wïA‰´abR*ßÿ\–Ãÿ["œEñ6…ØÖšÍŽæçÏKøÚíW*í×QÚ¯#ÚǸIhx?JBÏ›¤þûwcë"½“ÏNÿÞbtªäÊIÇmÙŒ?{54—>K;vìÙ[J\‚ [¿°êU~ú¸´uGÜÜAîÑõÛí%çå_`ó6é7ýİèFoéÏ IDATÏï§« :wng1èØÿvdVîÆ9½eÀȾar!+Pп¶è"yíX¾ |Q"{ ü§,{×…Mu eãR‘h•–W¥æ·È,ëJ  ×H è” GÌÊ1³ò|UuÕ?“1Ò¼g-¯.ÇÛëä™Ñë6ëÛüh~÷ôž`‡ ­ï¼%dMZ&ºfwEWÙƒÀ¾²q•‘Ç¥,µ(—þr¥ìusUú)lxi7: Í [3pxûFéo¤¿Í’þ6OúÛ,éo²’i÷?|ý-YúÛvéoz#—I“ÆÌîàëo‘ý”…¥êñÌ2QŒÞß’¥¿ÉïÖþ×¥¿–`µÒßì£õÈÁBÙÆ­¿ÕUG“Ÿ¥‡gäíni¢{´¶ –¢ëÍwà¡üÁ’Õç8adÜîÛ®×âèÁƒHéz3Æ>”oµýáÒ{­>}G¾Ï°~¿²»µGZÐûŒã¡•ÜU>/ÉÀ¶Õ…8Þa(nÒ£9"åí·KJ­¢U~$@$@̓@ÐOEó(R•B~Øòg<ˆ¿,^"›Š=HTN)x¸÷͸jÀ½ºg|Ãðëu×ÃöNÍòî¨Cçl™&Pyò#,“•~•Ñ“î–e™!ªsïŸ!cÓjÌ+(@J‡ltH)Ųÿ|C6Pêþ’¬S7¢ºæŽEïbá,-O:ÈÀÑ~…µ¼ÿÚc`ßL¬X1»t£¡)‘Ó̼ù7wD64ô×Ñ>ª1;tŒ{YiÅ|på <|×!ùn~äu^Tîš4Wéø oÆœ]‰WV,‘ì` é•‚– @^ŒÝ‘_.ÀB92ÌR½0iò °aEìí’€›3 ÇžZN€ðµwÆ`Ì|ìNkPdg"ÿëj‹äNøYïLÙ£b V§È š 7–áµåT‹±waÇÂuxjºÔ4£ƒÔÔ¨Èy[›i;¤¶ÜÈ1xòŒ½ž:—|u`•žƒ‚i£0ïéÕxú‡—bÊu_á9™5jÀ˜ÿÇ^fnDÚ^Ž÷NG1~/‘RY~KPz™½{"K–³¾ùÞ µ"œÂf­²…j)ñðC×8’qó«D¢tZϤýn—öÛ(í÷¹/ãji¿ƒÛO|Y¢o¦:Lœáã™yó Œ9ð&^ZøÖij¾´N•|Žm²¨g^ÿJõ¶T3éSµ§vÕÙŽÈ€ic¾•Ùæ…˜nUP6k”¾4`Â$ìÿÏ…˜Uàë²Áà伎R=éx«òÐÛâWhU7CßÿÓ,ÓOë‰Ûä;ö—võÀ@ÇgV¡|­“T¬“YÔ “Q¶òEa¼Ùƒe•AÊÉž‰Üî{»e9¸¯ì¯²»|&:Ÿm•gìÓgvbÖcv9ešßîÇ™7còÈO°`Ác°|äY>ùAß²îh~RÛoK>•çF\ÝÆªzlÿâQ–ª}øÏ™K¬Gµ™}Ç`J^à³»`§¥¿‘þ6.¤¿åJ{NúÛa_;$ýmº¯¿õ–þv³£^n~åŽþù™ålM0¶þöéoÏ˽𔯿Ùmvªäm_Òßb¨£¾éØ7½¢Ã×·•´Œq¿Gg Çúçâˆ/ãÆáÚPH>¿à²Dbœ‹]/?go©ñ: À×Êʘ_Ÿ–÷„m¾ô<¨G+Ë{ÔÝ ðy¡×àA"^‡¾·÷ñ½£DÊïN ˆøÛ¥‚Hmdr¢N$@$М ´ª£pÆßMW·ÐKW è¥îÆìÔu£v£ëϵÚUW7s÷çÎûƒ¸GT@k¦ˆAP^vUòŽ™œf—ïZ%~¥"±OÉpÿÚÔ6Ê7še2MS+?ŸmÒ#ü¢kH W.é¦é>²ü®¼6iú=yT%3@eò•–Žº‚VU‰Ø !¹Îpš]mU9*k¤Žòn]%¸ ¬B™XìjBÊ+<«’…¡.Ãk³gჂ)³ë™h3MÓØëÙ.UÒÖ² 8jšuµ…¦! X/\åbö·ƒu/Õ Mî#·v‰%oS­0½žõ ‹o9茤 ¸eiFÔûѵ½ÜSŒÅµ¤°ËѳF¶CYYµðIñó‰æç–v•”¿F1ii¶Å-L¬nµU²â£¦þi]ø>Õ¸v´ïCy~é^–*Gáã3|ht–ÞX)3÷vÇôùÛýs÷Ù 5l ê ªÉ3ªJžÏv÷ÞƒÙ³–á†Iî'a„F…< «äIŽz“†Å²jËË ‹ÒÛÈF¡!A¢ù…mk´ü"ùé3Oœ!û,Xôê]–’ÂÙÒ߯Jë,ý­2èyÍÏ-£F=³BŒéy'®Ö&¼G-N‰±¼„×ÈqDV¾gsÏððlü.nùéûMYyäß.dH€HÀctubçÎòrAµjÕêwâõ‰\º,VFgÖ,ˆÎ„è¥v㮺º9u5;¯s»šÝ.q¶ÜÝtu R:¿èUZz›°™BSédñË |zjœ#ë2OwÛM-4†„óÿ;uh¸ {‚¼”ÅV˜ääØ_U ë;ãaÄ@,»àúÕÝŽ™OËt¦|‹J•äÈÊÜ®A1cªg=Û%Ù7 Ê(ÄRW[hF¥9ÌZÏh÷R,y›tÃôzÖ3,¾å ÷£³¼î\Û+RИÜeƒÁÊjÓúð ™Ú‹æç’xrZŠ=Øtñ«¯SB²¾È×7–È„.Äó'¨˜kG×ûPº`y…J[ÓE(”™lÌ·[JS0¾ÿUÁQl‡·/Âuû¥_K «{D®Ëñ˜®Iȳ°Íb%• BX9‘ÖUEósÐHÇhùEòÓg^¹¥d¿–ÊjY5$¢‘ôÐÆŒæç’©ë½â.§˜žç±$ÔDašòm '·¸Y¹ü–Ö‡[~uývÕ7†' hÌJ€H¥1þnºº…^fu€º³S×Iµݬ ˆëŠÉê" P%³{¥2\+3ø™™mÂfø.‚*² J@N*(— 'Ó’õQ¢¢ù…¥5~t†²Vž®“ôÖ,¥ #BçࣕGV5œ–ãaõø–Ä4dF­GK‚~ # íeõ7—öŠæ×°ÜZp,Þ£-¸ñXt 8/¸bà¼`f&$ «eev/S.ª‹œ@BRä6Ñü.r,Í©z:Cé2Œ´‹è\­s¡E Ÿ„5rî;æÜÐA@Û+RcFós$á #ïQo´3kI$@Þ%à2%ç]¬9 4}ûö5URqM§9 ÌÆ q­8'      xP¡@¡l¬¢šåx·©7ÔJ†ªP·P» ï(RX‡: 4+Ÿþ9Ö¬YƒñãÇ›r…ŽmÝÆ¿ÑÂ?£‡¦gܤ7µ` ®BháÍF†„ÑëŠÑ_7z "      MÀ)¸üòËë*ŽÝ„WûySñ heTZ)ãÞèŠF;+²Ñ‰3      ˆ‘@II ^}õUk¥€ ôs‚nݺÅÛ æ6vVP÷ú¤YgØxì1` lô: á  áqBí±¦Ãp$@$@$@$@$@$@$p^ ìÝ»k×®  8ö߆Úc)«/=–81…‰÷Šº a*dt ¯f§½®4èO$@$@$@$@$@$@Œ€ Ö­[‡üü|èJÏ>ûÌ/$)Tèx׌}üüXc]1ÐT…4é=Z-5L,ᢥA?      ˆ7¡€ÙxбÇ@¬ã[36zcËS:± Ü ãÌÀiŽ6Ruw»ÜÒ¡ 4 {öì [) BçÊ‚º}ë+‡$duÆušƒÕeiŒ` ZÚÎ9ÍÎ8êîægÜîŒC3 \pú¹Àúõ냄¡Bµû”ßݸ=’»ú«ŸQN³qk´^_Á@} ÖØUwšµN7cwêj¦"      N@…nBçJãï+lèXã`§¿Ó쬫qwºE2×'¬u”`¤„Ô]4ʘU7f,³êj7njOðùwÕ›n|hìê¦f㦺º]{îܹ?‰NE$@$@$@$@$@$@-’@«V­‚*W­\5rýÛ¡«›^ÆMõÆ®nz7Õõrº‹ÕïfÌƘ}F+Œ1éM}*ÉÜdjWwuS¡ñS=ÔlÜÎ À|ñW!!ƒÓMÓ3îFW7½4œ*c7ºqsêj¦"     ðçxTkíúÌê¦uãnåFWw5;øÆÏ¸™¸N]¢øÓ4f§®fU&Žm³ÿ«[“©¦ ht°M¹:´rÎ0Æï3IÔ ônF×¼ŸêjW?S&ã¦vç%V¿2aý4 x‚€s,ª6ãQ§®}Uêf„f𯺺«®~N=4Œ†3*Ôì´»…1n¡º[¼Ð0QíM!ÍÀ*t°­îærÆ1nnºBÔtÔO•3Œú©Ò¿qW7µ›x×iV»¹Ä訙ŠH€H€H€H€H€HÀ{œãM­½_FÓuœéôW{¨›3­P?g\5;•ÓÏé®fãêÞ({]‚ÍTҡʸ=Ô_í¦À&¾Ú2~FWwcvÓÕ_A!€š5]VíªŒ¿q×0êIi8U¦Œ¶ÿI€H€H€H€H€H€¼BÀŒ M}ÍxÒ©›½†1îêfÜnN³3¼qwênþê¦JÃeâ{¨nÂ=’¨»e¯K0à©žŽ¦μ&a êoü°‰£f3è7fÕR?§]ÝÍ`_ÝÕl.§Ÿ ctõ£"     ðçØTkí´›ñªS×1¦¹ÔݘU7vÞ¸9Ý%XXÑÜ4n\US LAu€­f3Ðvš1îN]Íz)8#0v“žú©Ùè¡qÔÝ( §—IËØU7Jã«rºÙ.üO$@$@$@$@$@$àf\hêjÆ™FWwk»šÝèN?5«»*c6þêÇ„sêjv*o”1;Ó4~ Ò›J0`2ׂ™Av¨ÙYh5«2n¡º‚2«4=õwº?q¶”ÉÓé®n&®1;u_Ô øN7šI€H€H€H€H€H€.~f|jj:> µ›½ê‘Ìš–ñ3ãY§š¦ÚU9uÆö ø9ÿFé  hát€M9ÄšÕ®JõP³q uW š§êÎÁ¿X-å,1«®—†×ôŒÝèâäWêFE$@$@$@$@$@$à=füijî—¿Hƒ|㮺¹4ŽÓݤ§é³SænüTW¥ñêR±„ J£>‚MÜ9€6™9Ý4ñHጻSW³Ó4Ôì¼ÔÝÔߨ5Œ*WÍ&œšMyT7é³Ó/4¬Ú©H€H€H€H€H€H€¼EÀ9ÆÔš;íj½Býj7nΰÆ-Tw†Q³ñW³ªHºíð7vÇÄ3î¡vã¦×G09ŠƒÀ9(7v¢fs…Ú»‚1ñÕMíNef ¯aÔM•q3fu7nª›Ëø«NE$@$@$@$@$@$àm:®TeÆ¥N»¼«¿1«î4›xÆÝèÆ]uÞé¦fUN7ÛÅv3~NÝø7‰Þ‚-¼¶MeÌ Ü¸›‚šJªÝ˜McWH&­P³IÇèF áŒ @ýL|ÕCÍÆMéR»*£Û6þ'     ð ç¸ÔÔÙŒQ£éfot «æÐˤθGÓMyT×pF™8jwºÿzéM!pËP fåêï´;áNw5륰L\5«rümû¿†S¿ZŸ®ñÕ®î&ŸP»ÓÏ„‘àT$@$@$@$@$@$@& ãIUflê4›±©ñ3ƒ|ãî´«Ù\Þi6v“ŽêªŒnÛöºÂ™ðÒ›J0 …5ƒlc6ºÐTÆi6n‘t…çTnÂÍSã?§]ãš2³ÚCÝÔŠH€H€H€H€H€HÀÛtli”sœªn:>5þÆlÂ8íj6—ú³ÑMœúè’Œ¥4Ž*£‡š-φük Á€Ê9Ø-‡ñ7ºú«Ù\ Hã‡êf°/^~eÜ4®*ç@ߘU7y9Í¡áÝ©«™ŠH€H€H€H€H€HÀ;ÌøÒèZs5»1GÒu,küt5»1a€ÑÕ=ÔlÜLÕ2f£÷P½.ÿÐðaöú 4Clåf7~ªSPÕ„à›´œþOè2ál›ý_ÝLxo쪫Ýé&V¿›ÉËèÆÏ©«™ŠH€H€H€H€H€HÀ;ÌøÒèZscVÝ\†ˆŽW›1;u §vç¥áÝÄ Õi8ý4=§Ý˜ÕÝ(usªP»Ó/Ì‹`@t¦5‘P·P»ÉÈ&R|O!€è«›*ã®fgzê¯éª›‰£vcc˜PÀé¦f£BËgÜ©“ \ÜÌ8ÓÔRíN7c7nª›A|¨Ù„5+L8ÕÙGÝT©›*£Û6û¿IÓéfÌ¡áCíÎÍÍÄ·ôXA¢X4³HlS­´ÜU©›^ÆÍi7éHF8`ÜUW7ÕõÒ¸¡fq²ÜL~Æn©ŠH€H€H€H€H€H€œÌØTu£tlj쪻3¬ÓÝ靿P»3žÓϸ;ÝLBu Û$ª!‚ÍÜ9w+Hh5¼QÎø&œêZqUF`ôNwõW»Éß)0~“¾Éӄ׸&ŒñS7*      0tLi.us37§®cO§]Íêæt7æPwO‚ûjVeüŒn»†ÿWUF·m1üoˆ` 4YÍTÚÎÌÝèN?oìnºR¥~:ð7‚µkzNa€q3îâmù«®nªTw3[ž¾ÆßéF3 ÀÅOÀŒK5U7ãjÖpfÜjú&ŒÑCÝÕnÜŒnÂÆ¢kžN•3¼±[ ýׂSçàZ ªv§î,£‚0~§n*êô×xš–¹LšF@ þ& gžênâ¨Y•ÚÊØîô£™H€H€H€H€H€Hàâ'`Æ¡F75vÚÕüÿ·sG[mä@Eæÿÿyr!'ÜT¤v· ࣵ J¥’º½y’Wf˜'r¹OoòŒ®ÓO¤Ÿ¸«ÏõôeÌøZ}«3¿+žýb /qæò<ûxy^®Ï`-œ‹}úÒÃ<1ÿÓ†ÄÔû‡g¥Fþ#ý–zFöf0ï¼k/MþR@P@P@xJî¨Ä çÞš±š§vôÃ^.ý»ÈÙ/ZœI=qööZç§úÎ~1Ð'Ïá« y×èaoæà¢N=‘z"—uÎJê©õ—ÔRçg>·Ï¤?1#{ ( € ( € ( € ä.ɘùjžZÿd/óÜCÙ“Èü(go÷äLFê3îj/Íg~ÝûÅÀÑÙ¼d.ÝäéçÞµ>'P|iÀe>óü‹ìe­ç<ƒ³ùù‘þ–3Oœƒý³î\P@P@Pà{ ìî¨]OΜ¼çÊœ/VsÖØ?çÔ9—3¨÷<ù»+_ äeúÍœ˜—ê¼_2õ3£¿`ÏÌZF¾ ÈZ¯óe1}ìÝÅ×®·>æFP@P@P@çànɧe¾‹éËÚü¡žÈýµ{¨%výVžóæÈ9qÖ™oã•/¶‡üXÈ pùN/”kÔ²~k*{‰Éùá_ 0ÏYœM-1cÆ×êÛoÖß*f ( € ( € ( €Ï(À½r~vê“3O?sâªÆÚ•È9Äìí1ç½v:¿úÅ@zë2M/˜þYÛ½`úøOØ“ýý“½Ìò¬et/ó—…ŸkäFP@P@P@çà™÷œuj‰G9ëÝÿèµ™óbïOíhÐ{Ôók-—æ«cîéù*OzGêļyÇYïù*§–˜ÁY¯³õïô8P@P@P@žOàÖ%š ;2ôw<ÊçZæüäLòŽÔ‰Y#ÿ™þú2bÖWsö,ã½âÞ×yÒsòÄÎé£Nìzç½·óî!ï8óÕ|WKÝ¡€ ( € ( € (ð½¸t÷§œµž“wì<çdÞµÕ¼ûXï=½Nž˜Aßëì÷ù\£g¯þ§«ƒx(ö]ëéOξôS£'5Æ\c_z9§÷Qgâ\ï5sP@P@P@Z€{gj3ïy"y÷QëHבּ/1ƒõ×ÙŸ¿o­ÿ¹cQy/æ±y1.â·r>DúÉçyÌ9‹³Sg5ÎaÎÞÄ®uÞ=æ ( € ( € ( €Ï-À=3 £BmÆîÏÚ\ïù\ïµùœ>wæô>¹ ¯övm•S;ÓC_>$ù­Èì£ÞguÍ\P@P@P@.é-AÈó[1ýéá‡ù•ؽ3Ï<ƒ÷xüÍåùdûm«ý];ÊWk©Q¿ó2ôtÞµ®'ß¹g×g]P@P@Pà{ œ¹LÏæÄˆ¬rj«8kœAybÆ®þºúû:µSñÑ ñjÿ¬õ|æsž—¦F\ÕVkÝ—œÑ½©Í9}FP@P@P@"ЗðÕ|ÖºŸ|ÆÞ³[£Þ½3_ÍwµÔoŽ÷¸$¯Î˜µÝœ:1/LNìZç»õîIÎè~jFP@P@P@v}Q§gÖzNNÌžU~Tëµ¹5ßÕR?5Þã²¼;cÖæY»µÎº·ý«8Ï\õXS@P@P@ø~ó"~ô »w—gÿn­ëôu­sÖsýVõÃøžâÕY³vf~¦§?ÔìÏڪƞ£5zŒ ( € ( € ( €Ï+°»€Gdµ6kgægzú/0ûwïÒ{NåïyI>:k®™Ï>Ъ>ksÎ^£ ( € ( € ( €Ì úœçìUú\»:ïwŸ{{ítþèÝ™«ú¬ÍçrW?»NŸQP@P@P@•À­ øn½ëç·æ«Þmî¥~Wüï®]Ç›®^Ôwý³>?ø\?~+WP@P@P@¸O`ÞGw§t_çô¯jY›õ9gÿ‡Ä¼\½Z[ÕøÐWÖŽz9Ϩ€ ( € ( € ( À½óâ>ç}îÕµ«ýý¬»ò¾Dß:·¾«÷‡<Ó“þ³}}¶¹ ( € ( € ( €]ÖéI<Ó·ëÙÕ9ÿÖ:}—ãߺ4ŸyÎQÏÑÚêC_í_aMP@P@P@)põ‚~Ô´ÆsÏôÐ{WüÛè³Ï;Ów¦ç.7) € ( € ( € (p‡À™Kü™ž<úl߯ùû–Ϻ\_}îÕþþ”ìísÌP@P@P@žSà‘KúÕ½Wûþ‹|…Kó£ïðèþ‡=@P@P@P੽Ì?ºÿ!ü¯x©þŠïô²›P@P@P@(Oý" Þã%ýW.áÿÊ{N_ç ( € ( € ( €Ï-ð¥¾Xý)¾Û…û»}žÕßÌš ( € ( € ( Àç |ù ÿçù ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ðIÿÄ´T1Ó;ÅIEND®B`‚cups-2.2.7/doc/help/accounting.html000664 000765 000024 00000005204 13255074424 017671 0ustar00msweetstaff000000 000000 Printer Accounting Basics

    Printer Accounting Basics

    CUPS supports a variety of printer accounting schemes. Aside from the built-in quota and page logging support, there are several third-party solutions that can be found online.

    Quota Support

    CUPS supports page and size-based quotas for each printer. The quotas are tracked individually for each user, but a single set of limits applies to all users for a particular printer. For example, you can limit every user to 5 pages per day on an expensive printer, but you cannot limit every user except Johnny.

    The job-k-limit, job-page-limit, and job-quota-period options determine whether and how quotas are enforced for a printer. The job-quota-period option determines the time interval for quota tracking. The interval is expressed in seconds, so a day is 86,400, a week is 604,800, and a month is 2,592,000 seconds. The job-k-limit option specifies the job size limit in kilobytes. The job-page-limit option specifies the number of pages limit.

    For quotas to be enforced, the period and at least one of the limits must be set to a non-zero value. The following options will enable weekly quotas with the given size and page count limits:

    /usr/sbin/lpadmin -p printer -o job-quota-period=604800 \
        -o job-k-limit=1024 ENTER
    /usr/sbin/lpadmin -p printer -o job-quota-period=604800 \
        -o job-page-limit=100 ENTER
    

    Or, you can combine all three options on the same line.

    While there is no way to query the current quota state for a particular user, any application can request a list of jobs for a user and printer that can be used to easily determine that information.

    Page Logging

    CUPS can log every page that is printed on a system to the page_log file. Page logging must be enabled by setting the PageLogFormat directive in the cupsd.conf file and is only available for drivers that provide page accounting information, typically all PostScript and CUPS raster devices. Raw queues and queues using third-party solutions such as Foomatic generally do not have useful page accounting information available.

    cups-2.2.7/doc/help/api-admin.html000664 000765 000024 00000045453 13255074424 017410 0ustar00msweetstaff000000 000000 Administration APIs

    Administrative APIs

    Header cups/adminutil.h
    Library -lcups
    See Also Programming: Introduction to CUPS Programming
    Programming: CUPS API
    Programming: HTTP and IPP APIs

    Overview

    The administrative APIs provide convenience functions to perform certain administrative functions with the CUPS scheduler.

    Note:

    Administrative functions normally require administrative privileges to execute and must not be used in ordinary user applications!

    Scheduler Settings

    The cupsAdminGetServerSettings and cupsAdminSetServerSettings functions allow you to get and set simple directives and their values, respectively, in the cupsd.conf file for the CUPS scheduler. Settings are stored in CUPS option arrays which provide a simple list of string name/value pairs. While any simple cupsd.conf directive name can be specified, the following convenience names are also defined to control common complex directives:

    • CUPS_SERVER_DEBUG_LOGGING
    • : For cupsAdminGetServerSettings, a value of "1" means that the LogLevel directive is set to debug or debug2 while a value of "0" means it is set to any other value. For cupsAdminSetServerSettings a value of "1" sets the LogLeveL to debug while a value of "0" sets it to warn.
    • CUPS_SERVER_REMOTE_ADMIN
    • : A value of "1" specifies that administrative requests are accepted from remote addresses while "0" specifies that requests are only accepted from local addresses (loopback interface and domain sockets).
    • CUPS_SERVER_REMOTE_ANY
    • : A value of "1" specifies that requests are accepts from any address while "0" specifies that requests are only accepted from the local subnet (when sharing is enabled) or local addresses (loopback interface and domain sockets).
    • CUPS_SERVER_SHARE_PRINTERS
    • : A value of "1" specifies that printer sharing is enabled for selected printers and remote requests are accepted while a value of "0" specifies that printer sharing is disables and remote requests are not accepted.
    • CUPS_SERVER_USER_CANCEL_ANY
    • : A value of "1" specifies that the default security policy allows any user to cancel any print job, regardless of the owner. A value of "0" specifies that only administrative users can cancel other user's jobs.
    Note:

    Changing settings will restart the CUPS scheduler.

    When printer sharing or the web interface are enabled, the scheduler's launch-on-demand functionality is effectively disabled. This can affect power usage, system performance, and the security profile of a system.

    The recommended way to make changes to the cupsd.conf is to first call cupsAdminGetServerSettings, make any changes to the returned option array, and then call cupsAdminSetServerSettings to save those settings. For example, to enable the web interface:

    #include <cups/cups.h>
    #include <cups/adminutil.h>
    
    void
    enable_web_interface(void)
    {
      int num_settings = 0;           /* Number of settings */
      cups_option_t *settings = NULL; /* Settings */
    
    
      if (!cupsAdminGetServerSettings(CUPS_HTTP_DEFAULT, &num_settings, &settings))
      {
        fprintf(stderr, "ERROR: Unable to get server settings: %s\n", cupsLastErrorString());
        return;
      }
    
      num_settings = cupsAddOption("WebInterface", "Yes", num_settings, &settings);
    
      if (!cupsAdminSetServerSettings(CUPS_HTTP_DEFAULT, num_settings, settings))
      {
        fprintf(stderr, "ERROR: Unable to set server settings: %s\n", cupsLastErrorString());
      }
    
      cupsFreeOptions(num_settings, settings);
    }
    

    Devices

    Printers can be discovered through the CUPS scheduler using the cupsGetDevices API. Typically this API is used to locate printers to add the the system. Each device that is found will cause a supplied callback function to be executed. For example, to list the available printer devices that can be found within 30 seconds:

    #include <cups/cups.h>
    #include <cups/adminutil.h>
    
    
    void
    get_devices_cb(
        const char *device_class,           /* I - Class */
        const char *device_id,              /* I - 1284 device ID */
        const char *device_info,            /* I - Description */
        const char *device_make_and_model,  /* I - Make and model */
        const char *device_uri,             /* I - Device URI */
        const char *device_location,        /* I - Location */
        void       *user_data)              /* I - User data */
    {
      puts(device_uri);
    }
    
    
    void
    show_devices(void)
    {
      cupsGetDevices(CUPS_HTTP_DEFAULT, 30, NULL, NULL, get_devices_cb, NULL);
    }
    

    Functions

     DEPRECATED cupsAdminCreateWindowsPPD

    Create the Windows PPD file for a printer.

    char *cupsAdminCreateWindowsPPD(http_t *http, const char *dest, char *buffer, int bufsize);

    Parameters

    http Connection to server or CUPS_HTTP_DEFAULT
    dest Printer or class
    buffer Filename buffer
    bufsize Size of filename buffer

    Return Value

    PPD file or NULL

     DEPRECATED cupsAdminExportSamba

    Export a printer to Samba.

    int cupsAdminExportSamba(const char *dest, const char *ppd, const char *samba_server, const char *samba_user, const char *samba_password, FILE *logfile);

    Parameters

    dest Destination to export
    ppd PPD file
    samba_server Samba server
    samba_user Samba username
    samba_password Samba password
    logfile Log file, if any

    Return Value

    1 on success, 0 on failure

     CUPS 1.3/macOS 10.5 cupsAdminGetServerSettings

    Get settings from the server.

    int cupsAdminGetServerSettings(http_t *http, int *num_settings, cups_option_t **settings);

    Parameters

    http Connection to server or CUPS_HTTP_DEFAULT
    num_settings Number of settings
    settings Settings

    Return Value

    1 on success, 0 on failure

    Discussion

    The returned settings should be freed with cupsFreeOptions() when you are done with them.

     CUPS 1.3/macOS 10.5 cupsAdminSetServerSettings

    Set settings on the server.

    int cupsAdminSetServerSettings(http_t *http, int num_settings, cups_option_t *settings);

    Parameters

    http Connection to server or CUPS_HTTP_DEFAULT
    num_settings Number of settings
    settings Settings

    Return Value

    1 on success, 0 on failure

     CUPS 1.4/macOS 10.6 cupsGetDevices

    Get available printer devices.

    ipp_status_t cupsGetDevices(http_t *http, int timeout, const char *include_schemes, const char *exclude_schemes, cups_device_cb_t callback, void *user_data);

    Parameters

    http Connection to server or CUPS_HTTP_DEFAULT
    timeout Timeout in seconds or CUPS_TIMEOUT_DEFAULT
    include_schemes Comma-separated URI schemes to include or CUPS_INCLUDE_ALL
    exclude_schemes Comma-separated URI schemes to exclude or CUPS_EXCLUDE_NONE
    callback Callback function
    user_data User data pointer

    Return Value

    Request status - IPP_OK on success.

    Discussion

    This function sends a CUPS-Get-Devices request and streams the discovered devices to the specified callback function. The "timeout" parameter controls how long the request lasts, while the "include_schemes" and "exclude_schemes" parameters provide comma-delimited lists of backends to include or omit from the request respectively.

    Data Types

     CUPS 1.4/macOS 10.6 cups_device_cb_t

    Device callback

    typedef void (*cups_device_cb_t)(const char *device_class, const char *device_id, const char *device_info, const char *device_make_and_model, const char *device_uri, const char *device_location, void *user_data);

    cups-2.2.7/doc/help/api-filter.html000664 000765 000024 00000171202 13255074424 017575 0ustar00msweetstaff000000 000000 Filter and Backend Programming

    Filter and Backend Programming

    Headers cups/backend.h
    cups/ppd.h
    cups/sidechannel.h
    Library -lcups
    See Also Programming: Introduction to CUPS Programming
    Programming: CUPS API
    Programming: PPD API
    Programming: Raster API
    Programming: Developing PostScript Printer Drivers
    Programming: Developing Raster Printer Drivers
    Specifications: CUPS Design Description

    Overview

    Filters (which include printer drivers and port monitors) and backends are used to convert job files to a printable format and send that data to the printer itself. All of these programs use a common interface for processing print jobs and communicating status information to the scheduler. Each is run with a standard set of command-line arguments:

    argv[1]
    The job ID
    argv[2]
    The user printing the job
    argv[3]
    The job name/title
    argv[4]
    The number of copies to print
    argv[5]
    The options that were provided when the job was submitted
    argv[6]
    The file to print (first program only)

    The scheduler runs one or more of these programs to print any given job. The first filter reads from the print file and writes to the standard output, while the remaining filters read from the standard input and write to the standard output. The backend is the last filter in the chain and writes to the device.

    Filters are always run as a non-privileged user, typically "lp", with no connection to the user's desktop. Backends are run either as a non-privileged user or as root if the file permissions do not allow user or group execution. The file permissions section talks about this in more detail.

    Security Considerations

    It is always important to use security programming practices. Filters and most backends are run as a non-privileged user, so the major security consideration is resource utilization - filters should not depend on unlimited amounts of CPU, memory, or disk space, and should protect against conditions that could lead to excess usage of any resource like infinite loops and unbounded recursion. In addition, filters must never allow the user to specify an arbitrary file path to a separator page, template, or other file used by the filter since that can lead to an unauthorized disclosure of information. Always treat input as suspect and validate it!

    If you are developing a backend that runs as root, make sure to check for potential buffer overflows, integer under/overflow conditions, and file accesses since these can lead to privilege escalations. When writing files, always validate the file path and never allow a user to determine where to store a file.

    Note:

    Never write files to a user's home directory. Aside from the security implications, CUPS is a network print service and as such the network user may not be the same as the local user and/or there may not be a local home directory to write to.

    In addition, some operating systems provide additional security mechanisms that further limit file system access, even for backends running as root. On macOS, for example, no backend may write to a user's home directory. See the Sandboxing on macOS section for more information.

    Canceled Jobs and Signal Handling

    The scheduler sends SIGTERM when a printing job is canceled or held. Filters, backends, and port monitors must catch SIGTERM and perform any cleanup necessary to produce a valid output file or return the printer to a known good state. The recommended behavior is to end the output on the current page, preferably on the current line or object being printed.

    Filters and backends may also receive SIGPIPE when an upstream or downstream filter/backend exits with a non-zero status. Developers should generally ignore SIGPIPE at the beginning of main() with the following function call:

    #include <signal.h>
    
    ...
    
    int
    main(int argc, char *argv[])
    {
      signal(SIGPIPE, SIG_IGN);
    
      ...
    }
    

    File Permissions

    For security reasons, CUPS will only run filters and backends that are owned by root and do not have world or group write permissions. The recommended permissions for filters and backends are 0555 - read and execute but no write. Backends that must run as root should use permissions of 0500 - read and execute by root, no access for other users. Write permissions can be enabled for the root user only.

    To avoid a warning message, the directory containing your filter(s) must also be owned by root and have world and group write disabled - permissions of 0755 or 0555 are strongly encouraged.

    Temporary Files

    Temporary files should be created in the directory specified by the "TMPDIR" environment variable. The cupsTempFile2 function can be used to safely create temporary files in this directory.

    Copy Generation

    The argv[4] argument specifies the number of copies to produce of the input file. In general, you should only generate copies if the filename argument is supplied. The only exception to this are filters that produce device-independent PostScript output, since the PostScript filter pstops is responsible for generating copies of PostScript files.

    Exit Codes

    Filters must exit with status 0 when they successfully generate print data or 1 when they encounter an error. Backends can return any of the cups_backend_t constants.

    Environment Variables

    The following environment variables are defined by the printing system when running print filters and backends:

    APPLE_LANGUAGE
    The Apple language identifier associated with the job (macOS only).
    CHARSET
    The job character set, typically "utf-8".
    CLASS
    When a job is submitted to a printer class, contains the name of the destination printer class. Otherwise this environment variable will not be set.
    CONTENT_TYPE
    The MIME type associated with the file (e.g. application/postscript).
    CUPS_CACHEDIR
    The directory where cache files can be stored. Cache files can be used to retain information between jobs or files in a job.
    CUPS_DATADIR
    The directory where (read-only) CUPS data files can be found.
    CUPS_FILETYPE
    The type of file being printed: "job-sheet" for a banner page and "document" for a regular print file.
    CUPS_SERVERROOT
    The root directory of the server.
    DEVICE_URI
    The device-uri associated with the printer.
    FINAL_CONTENT_TYPE
    The MIME type associated with the printer (e.g. application/vnd.cups-postscript).
    LANG
    The language locale associated with the job.
    PPD
    The full pathname of the PostScript Printer Description (PPD) file for this printer.
    PRINTER
    The queue name of the class or printer.
    RIP_CACHE
    The recommended amount of memory to use for Raster Image Processors (RIPs).
    TMPDIR
    The directory where temporary files should be created.

    Communicating with the Scheduler

    Filters and backends communicate with the scheduler by writing messages to the standard error file. The scheduler reads messages from all filters in a job and processes the message based on its prefix. For example, the following code sets the current printer state message to "Printing page 5":

    int page = 5;
    
    fprintf(stderr, "INFO: Printing page %d\n", page);
    

    Each message is a single line of text starting with one of the following prefix strings:

    ALERT: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "alert" log level.
    ATTR: attribute=value [attribute=value]
    Sets the named printer or job attribute(s). Typically this is used to set the marker-colors, marker-high-levels, marker-levels, marker-low-levels, marker-message, marker-names, marker-types, printer-alert, and printer-alert-description printer attributes. Standard marker-types values are listed in Table 1. String values need special handling - see Reporting Attribute String Values below.
    CRIT: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "critical" log level.
    DEBUG: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "debug" log level.
    DEBUG2: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "debug2" log level.
    EMERG: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "emergency" log level.
    ERROR: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "error" log level. Use "ERROR:" messages for non-persistent processing errors.
    INFO: message
    Sets the printer-state-message attribute. If the current log level is set to "debug2", also adds the specified message to the current error log file using the "info" log level.
    NOTICE: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "notice" log level.
    PAGE: page-number #-copies
    PAGE: total #-pages
    Adds an entry to the current page log file. The first form adds #-copies to the job-media-sheets-completed attribute. The second form sets the job-media-sheets-completed attribute to #-pages.
    PPD: keyword=value [keyword=value ...]
    Changes or adds keywords to the printer's PPD file. Typically this is used to update installable options or default media settings based on the printer configuration.
    STATE: + printer-state-reason [printer-state-reason ...]
    STATE: - printer-state-reason [printer-state-reason ...]
    Sets or clears printer-state-reason keywords for the current queue. Typically this is used to indicate persistent media, ink, toner, and configuration conditions or errors on a printer. Table 2 lists some of the standard "printer-state-reasons" keywords from the IANA IPP Registry - use vendor-prefixed ("com.example.foo") keywords for custom states. See Managing Printer State in a Filter for more information.
    WARNING: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "warning" log level.

    Messages without one of these prefixes are treated as if they began with the "DEBUG:" prefix string.

    Table 1: Standard marker-types Values
    marker-type Description
    developer Developer unit
    fuser Fuser unit
    fuser-cleaning-pad Fuser cleaning pad
    fuser-oil Fuser oil
    ink Ink supply
    opc Photo conductor
    solid-wax Wax supply
    staples Staple supply
    toner Toner supply
    transfer-unit Transfer unit
    waste-ink Waste ink tank
    waste-toner Waste toner tank
    waste-wax Waste wax tank

    Table 2: Standard State Keywords
    Keyword Description
    connecting-to-device Connecting to printer but not printing yet.
    cover-open The printer's cover is open.
    input-tray-missing The paper tray is missing.
    marker-supply-empty The printer is out of ink.
    marker-supply-low The printer is almost out of ink.
    marker-waste-almost-full The printer's waste bin is almost full.
    marker-waste-full The printer's waste bin is full.
    media-empty The paper tray (any paper tray) is empty.
    media-jam There is a paper jam.
    media-low The paper tray (any paper tray) is almost empty.
    media-needed The paper tray needs to be filled (for a job that is printing).
    paused Stop the printer.
    timed-out Unable to connect to printer.
    toner-empty The printer is out of toner.
    toner-low The printer is low on toner.

    Reporting Attribute String Values

    When reporting string values using "ATTR:" messages, a filter or backend must take special care to appropriately quote those values. The scheduler uses the CUPS option parsing code for attributes, so the general syntax is:

    name=simple
    name=simple,simple,...
    name='complex value'
    name="complex value"
    name='"complex value"','"complex value"',...
    

    Simple values are strings that do not contain spaces, quotes, backslashes, or the comma and can be placed verbatim in the "ATTR:" message, for example:

    int levels[4] = { 40, 50, 60, 70 }; /* CMYK */
    
    fputs("ATTR: marker-colors=#00FFFF,#FF00FF,#FFFF00,#000000\n", stderr);
    fputs("ATTR: marker-high-levels=100,100,100,100\n", stderr);
    fprintf(stderr, "ATTR: marker-levels=%d,%d,%d,%d\n", levels[0], levels[1],
            levels[2], levels[3], levels[4]);
    fputs("ATTR: marker-low-levels=5,5,5,5\n", stderr);
    fputs("ATTR: marker-types=toner,toner,toner,toner\n", stderr);
    

    Complex values that contains spaces, quotes, backslashes, or the comma must be quoted. For a single value a single set of quotes is sufficient:

    fputs("ATTR: marker-message='Levels shown are approximate.'\n", stderr);
    

    When multiple values are reported, each value must be enclosed by a set of single and double quotes:

    fputs("ATTR: marker-names='\"Cyan Toner\"','\"Magenta Toner\"',"
          "'\"Yellow Toner\"','\"Black Toner\"'\n", stderr);
    

    The IPP backend includes a quote_string function that may be used to properly quote a complex value in an "ATTR:" message:

    static const char *                     /* O - Quoted string */
    quote_string(const char *s,             /* I - String */
                 char       *q,             /* I - Quoted string buffer */
                 size_t     qsize)          /* I - Size of quoted string buffer */
    {
      char  *qptr,                          /* Pointer into string buffer */
            *qend;                          /* End of string buffer */
    
    
      qptr = q;
      qend = q + qsize - 5;
    
      if (qend < q)
      {
        *q = '\0';
        return (q);
      }
    
      *qptr++ = '\'';
      *qptr++ = '\"';
    
      while (*s && qptr < qend)
      {
        if (*s == '\\' || *s == '\"' || *s == '\'')
        {
          if (qptr < (qend - 4))
          {
            *qptr++ = '\\';
            *qptr++ = '\\';
            *qptr++ = '\\';
          }
          else
            break;
        }
    
        *qptr++ = *s++;
      }
    
      *qptr++ = '\"';
      *qptr++ = '\'';
      *qptr   = '\0';
    
      return (q);
    }
    

    Managing Printer State in a Filter

    Filters are responsible for managing the state keywords they set using "STATE:" messages. Typically you will update all of the keywords that are used by the filter at startup, for example:

    if (foo_condition != 0)
      fputs("STATE: +com.example.foo\n", stderr);
    else
      fputs("STATE: -com.example.foo\n", stderr);
    
    if (bar_condition != 0)
      fputs("STATE: +com.example.bar\n", stderr);
    else
      fputs("STATE: -com.example.bar\n", stderr);
    

    Then as conditions change, your filter sends "STATE: +keyword" or "STATE: -keyword" messages as necessary to set or clear the corresponding keyword, respectively.

    State keywords are often used to notify the user of issues that span across jobs, for example "media-empty-warning" that indicates one or more paper trays are empty. These keywords should not be cleared unless the corresponding issue no longer exists.

    Filters should clear job-related keywords on startup and exit so that they do not remain set between jobs. For example, "connecting-to-device" is a job sub-state and not an issue that applies when a job is not printing.

    Note:

    "STATE:" messages often provide visible alerts to the user. For example, on macOS setting a printer-state-reason value with an "-error" or "-warning" suffix will cause the printer's dock item to bounce if the corresponding reason is localized with a cupsIPPReason keyword in the printer's PPD file.

    When providing a vendor-prefixed keyword, always provide the corresponding standard keyword (if any) to allow clients to respond to the condition correctly. For example, if you provide a vendor-prefixed keyword for a low cyan ink condition ("com.example.cyan-ink-low") you must also set the "marker-supply-low-warning" keyword. In such cases you should also refrain from localizing the vendor-prefixed keyword in the PPD file - otherwise both the generic and vendor-specific keyword will be shown in the user interface.

    Reporting Supply Levels

    CUPS tracks several "marker-*" attributes for ink/toner supply level reporting. These attributes allow applications to display the current supply levels for a printer without printer-specific software. Table 3 lists the marker attributes and what they represent.

    Filters set marker attributes by sending "ATTR:" messages to stderr. For example, a filter supporting an inkjet printer with black and tri-color ink cartridges would use the following to initialize the supply attributes:

    fputs("ATTR: marker-colors=#000000,#00FFFF#FF00FF#FFFF00\n", stderr);
    fputs("ATTR: marker-low-levels=5,10\n", stderr);
    fputs("ATTR: marker-names=Black,Tri-Color\n", stderr);
    fputs("ATTR: marker-types=ink,ink\n", stderr);
    

    Then periodically the filter queries the printer for its current supply levels and updates them with a separate "ATTR:" message:

    int black_level, tri_level;
    ...
    fprintf(stderr, "ATTR: marker-levels=%d,%d\n", black_level, tri_level);
    
    Table 3: Supply Level Attributes
    Attribute Description
    marker-colors A list of comma-separated colors; each color is either "none" or one or more hex-encoded sRGB colors of the form "#RRGGBB".
    marker-high-levels A list of comma-separated "almost full" level values from 0 to 100; a value of 100 should be used for supplies that are consumed/emptied like ink cartridges.
    marker-levels A list of comma-separated level values for each supply. A value of -1 indicates the level is unavailable, -2 indicates unknown, and -3 indicates the level is unknown but has not yet reached capacity. Values from 0 to 100 indicate the corresponding percentage.
    marker-low-levels A list of comma-separated "almost empty" level values from 0 to 100; a value of 0 should be used for supplies that are filled like waste ink tanks.
    marker-message A human-readable supply status message for the user like "12 pages of ink remaining."
    marker-names A list of comma-separated supply names like "Cyan Ink", "Fuser", etc.
    marker-types A list of comma-separated supply types; the types are listed in Table 1.

    Communicating with the Backend

    Filters can communicate with the backend via the cupsBackChannelRead and cupsSideChannelDoRequest functions. The cupsBackChannelRead function reads data that has been sent back from the device and is typically used to obtain status and configuration information. For example, the following code polls the backend for back-channel data:

    #include <cups/cups.h>
    
    char buffer[8192];
    ssize_t bytes;
    
    /* Use a timeout of 0.0 seconds to poll for back-channel data */
    bytes = cupsBackChannelRead(buffer, sizeof(buffer), 0.0);
    

    Filters can also use select() or poll() on the back-channel file descriptor (3 or CUPS_BC_FD) to read data only when it is available.

    The cupsSideChannelDoRequest function allows you to get out-of-band status information and do synchronization with the device. For example, the following code gets the current IEEE-1284 device ID string from the backend:

    #include <cups/sidechannel.h>
    
    char data[2049];
    int datalen;
    cups_sc_status_t status;
    
    /* Tell cupsSideChannelDoRequest() how big our buffer is, less 1 byte for
       nul-termination... */
    datalen = sizeof(data) - 1;
    
    /* Get the IEEE-1284 device ID, waiting for up to 1 second */
    status = cupsSideChannelDoRequest(CUPS_SC_CMD_GET_DEVICE_ID, data, &datalen, 1.0);
    
    /* Use the returned value if OK was returned and the length is non-zero */
    if (status == CUPS_SC_STATUS_OK && datalen > 0)
      data[datalen] = '\0';
    else
      data[0] = '\0';
    

    Forcing All Output to a Printer

    The cupsSideChannelDoRequest function allows you to tell the backend to send all pending data to the printer. This is most often needed when sending query commands to the printer. For example:

    #include <cups/cups.h>
    #include <cups/sidechannel.h>
    
    char data[1024];
    int datalen = sizeof(data);
    cups_sc_status_t status;
    
    /* Flush pending output to stdout */
    fflush(stdout);
    
    /* Drain output to backend, waiting for up to 30 seconds */
    status = cupsSideChannelDoRequest(CUPS_SC_CMD_DRAIN_OUTPUT, data, &datalen, 30.0);
    
    /* Read the response if the output was sent */
    if (status == CUPS_SC_STATUS_OK)
    {
      ssize_t bytes;
    
      /* Wait up to 10.0 seconds for back-channel data */
      bytes = cupsBackChannelRead(data, sizeof(data), 10.0);
      /* do something with the data from the printer */
    }
    

    Communicating with Filters

    Backends communicate with filters using the reciprocal functions cupsBackChannelWrite, cupsSideChannelRead, and cupsSideChannelWrite. We recommend writing back-channel data using a timeout of 1.0 seconds:

    #include <cups/cups.h>
    
    char buffer[8192];
    ssize_t bytes;
    
    /* Obtain data from printer/device */
    ...
    
    /* Use a timeout of 1.0 seconds to give filters a chance to read */
    cupsBackChannelWrite(buffer, bytes, 1.0);
    

    The cupsSideChannelRead function reads a side-channel command from a filter, driver, or port monitor. Backends can either poll for commands using a timeout of 0.0, wait indefinitely for commands using a timeout of -1.0 (probably in a separate thread for that purpose), or use select or poll on the CUPS_SC_FD file descriptor (4) to handle input and output on several file descriptors at the same time.

    Once a command is processed, the backend uses the cupsSideChannelWrite function to send its response. For example, the following code shows how to poll for a side-channel command and respond to it:

    #include <cups/sidechannel.h>
    
    cups_sc_command_t command;
    cups_sc_status_t status;
    char data[2048];
    int datalen = sizeof(data);
    
    /* Poll for a command... */
    if (!cupsSideChannelRead(&command, &status, data, &datalen, 0.0))
    {
      switch (command)
      {
        /* handle supported commands, fill data/datalen/status with values as needed */
    
        default :
            status  = CUPS_SC_STATUS_NOT_IMPLEMENTED;
    	datalen = 0;
    	break;
      }
    
      /* Send a response... */
      cupsSideChannelWrite(command, status, data, datalen, 1.0);
    }
    

    Doing SNMP Queries with Network Printers

    The Simple Network Management Protocol (SNMP) allows you to get the current status, page counter, and supply levels from most network printers. Every piece of information is associated with an Object Identifier (OID), and every printer has a community name associated with it. OIDs can be queried directly or by "walking" over a range of OIDs with a common prefix.

    The two CUPS SNMP functions provide a simple API for querying network printers through the side-channel interface. Each accepts a string containing an OID like ".1.3.6.1.2.1.43.10.2.1.4.1.1" (the standard page counter OID) along with a timeout for the query.

    The cupsSideChannelSNMPGet function queries a single OID and returns the value as a string in a buffer you supply:

    #include <cups/sidechannel.h>
    
    char data[512];
    int datalen = sizeof(data);
    
    if (cupsSideChannelSNMPGet(".1.3.6.1.2.1.43.10.2.1.4.1.1", data, &datalen, 5.0)
            == CUPS_SC_STATUS_OK)
    {
      /* Do something with the value */
      printf("Page counter is: %s\n", data);
    }
    

    The cupsSideChannelSNMPWalk function allows you to query a whole group of OIDs, calling a function of your choice for each OID that is found:

    #include <cups/sidechannel.h>
    
    void
    my_callback(const char *oid, const char *data, int datalen, void *context)
    {
      /* Do something with the value */
      printf("%s=%s\n", oid, data);
    }
    
    ...
    
    void *my_data;
    
    cupsSNMPSideChannelWalk(".1.3.6.1.2.1.43", 5.0, my_callback, my_data);
    

    Sandboxing on macOS

    Starting with macOS 10.6, filters and backends are run inside a security "sandbox" which further limits (beyond the normal UNIX user/group permissions) what a filter or backend can do. This helps to both secure the printing system from malicious software and enforce the functional separation of components in the CUPS filter chain. What follows is a list of actions that are explicitly allowed for all filters and backends:

    1. Reading of files: pursuant to normal UNIX file permissions, filters and backends can read files for the current job from the /private/var/spool/cups directory and other files on mounted filesystems except for user home directories under /Users.
    2. Writing of files: pursuant to normal UNIX file permissions, filters and backends can read/write files to the cache directory specified by the CUPS_CACHEDIR environment variable, to the state directory specified by the CUPS_STATEDIR environment variable, to the temporary directory specified by the TMPDIR environment variable, and under the /private/var/db, /private/var/folders, /private/var/lib, /private/var/mysql, /private/var/run, /private/var/spool (except /private/var/spool/cups), /Library/Application Support, /Library/Caches, /Library/Logs, /Library/Preferences, /Library/WebServer, and /Users/Shared directories.
    3. Execution of programs: pursuant to normal UNIX file permissions, filters and backends can execute any program not located under the /Users directory. Child processes inherit the sandbox and are subject to the same restrictions as the parent.
    4. Bluetooth and USB: backends can access Bluetooth and USB printers through IOKit. Filters cannot access Bluetooth and USB printers directly.
    5. Network: filters and backends can access UNIX domain sockets under the /private/tmp, /private/var/run, and /private/var/tmp directories. Backends can also create IPv4 and IPv6 TCP (outgoing) and UDP (incoming and outgoing) socket, and bind to local source ports. Filters cannot directly create IPv4 and IPv6 TCP or UDP sockets.
    6. Notifications: filters and backends can send notifications via the Darwin notify_post() API.
    Note: The sandbox profile used in CUPS 2.0 still allows some actions that are not listed above - these privileges will be removed over time until the profile matches the list above.

    Functions

     CUPS 1.2/macOS 10.5 cupsBackChannelRead

    Read data from the backchannel.

    ssize_t cupsBackChannelRead(char *buffer, size_t bytes, double timeout);

    Parameters

    buffer Buffer to read into
    bytes Bytes to read
    timeout Timeout in seconds, typically 0.0 to poll

    Return Value

    Bytes read or -1 on error

    Discussion

    Reads up to "bytes" bytes from the backchannel/backend. The "timeout" parameter controls how many seconds to wait for the data - use 0.0 to return immediately if there is no data, -1.0 to wait for data indefinitely.

     CUPS 1.2/macOS 10.5 cupsBackChannelWrite

    Write data to the backchannel.

    ssize_t cupsBackChannelWrite(const char *buffer, size_t bytes, double timeout);

    Parameters

    buffer Buffer to write
    bytes Bytes to write
    timeout Timeout in seconds, typically 1.0

    Return Value

    Bytes written or -1 on error

    Discussion

    Writes "bytes" bytes to the backchannel/filter. The "timeout" parameter controls how many seconds to wait for the data to be written - use 0.0 to return immediately if the data cannot be written, -1.0 to wait indefinitely.

     CUPS 1.2/macOS 10.5 cupsBackendDeviceURI

    Get the device URI for a backend.

    const char *cupsBackendDeviceURI(char **argv);

    Parameters

    argv Command-line arguments

    Return Value

    Device URI or NULL

    Discussion

    The "argv" argument is the argv argument passed to main(). This function returns the device URI passed in the DEVICE_URI environment variable or the device URI passed in argv[0], whichever is found first.

     CUPS 1.4/macOS 10.6 cupsBackendReport

    Write a device line from a backend.

    void cupsBackendReport(const char *device_scheme, const char *device_uri, const char *device_make_and_model, const char *device_info, const char *device_id, const char *device_location);

    Parameters

    device_scheme device-scheme string
    device_uri device-uri string
    device_make_and_model device-make-and-model string or NULL
    device_info device-info string or NULL
    device_id device-id string or NULL
    device_location device-location string or NULL

    Discussion

    This function writes a single device line to stdout for a backend. It handles quoting of special characters in the device-make-and-model, device-info, device-id, and device-location strings.

     CUPS 1.3/macOS 10.5 cupsSideChannelDoRequest

    Send a side-channel command to a backend and wait for a response.

    cups_sc_status_t cupsSideChannelDoRequest(cups_sc_command_t command, char *data, int *datalen, double timeout);

    Parameters

    command Command to send
    data Response data buffer pointer
    datalen Size of data buffer on entry, number of bytes in buffer on return
    timeout Timeout in seconds

    Return Value

    Status of command

    Discussion

    This function is normally only called by filters, drivers, or port monitors in order to communicate with the backend used by the current printer. Programs must be prepared to handle timeout or "not implemented" status codes, which indicate that the backend or device do not support the specified side-channel command.

    The "datalen" parameter must be initialized to the size of the buffer pointed to by the "data" parameter. cupsSideChannelDoRequest() will update the value to contain the number of data bytes in the buffer.

     CUPS 1.3/macOS 10.5 cupsSideChannelRead

    Read a side-channel message.

    int cupsSideChannelRead(cups_sc_command_t *command, cups_sc_status_t *status, char *data, int *datalen, double timeout);

    Parameters

    command Command code
    status Status code
    data Data buffer pointer
    datalen Size of data buffer on entry, number of bytes in buffer on return
    timeout Timeout in seconds

    Return Value

    0 on success, -1 on error

    Discussion

    This function is normally only called by backend programs to read commands from a filter, driver, or port monitor program. The caller must be prepared to handle incomplete or invalid messages and return the corresponding status codes.

    The "datalen" parameter must be initialized to the size of the buffer pointed to by the "data" parameter. cupsSideChannelDoRequest() will update the value to contain the number of data bytes in the buffer.

     CUPS 1.4/macOS 10.6 cupsSideChannelSNMPGet

    Query a SNMP OID's value.

    cups_sc_status_t cupsSideChannelSNMPGet(const char *oid, char *data, int *datalen, double timeout);

    Parameters

    oid OID to query
    data Buffer for OID value
    datalen Size of OID buffer on entry, size of value on return
    timeout Timeout in seconds

    Return Value

    Query status

    Discussion

    This function asks the backend to do a SNMP OID query on behalf of the filter, port monitor, or backend using the default community name.

    "oid" contains a numeric OID consisting of integers separated by periods, for example ".1.3.6.1.2.1.43". Symbolic names from SNMP MIBs are not supported and must be converted to their numeric forms.

    On input, "data" and "datalen" provide the location and size of the buffer to hold the OID value as a string. HEX-String (binary) values are converted to hexadecimal strings representing the binary data, while NULL-Value and unknown OID types are returned as the empty string. The returned "datalen" does not include the trailing nul. CUPS_SC_STATUS_NOT_IMPLEMENTED is returned by backends that do not support SNMP queries. CUPS_SC_STATUS_NO_RESPONSE is returned when the printer does not respond to the SNMP query.

     CUPS 1.4/macOS 10.6 cupsSideChannelSNMPWalk

    Query multiple SNMP OID values.

    cups_sc_status_t cupsSideChannelSNMPWalk(const char *oid, double timeout, cups_sc_walk_func_t cb, void *context);

    Parameters

    oid First numeric OID to query
    timeout Timeout for each query in seconds
    cb Function to call with each value
    context Application-defined pointer to send to callback

    Return Value

    Status of first query of CUPS_SC_STATUS_OK on success

    Discussion

    This function asks the backend to do multiple SNMP OID queries on behalf of the filter, port monitor, or backend using the default community name. All OIDs under the "parent" OID are queried and the results are sent to the callback function you provide.

    "oid" contains a numeric OID consisting of integers separated by periods, for example ".1.3.6.1.2.1.43". Symbolic names from SNMP MIBs are not supported and must be converted to their numeric forms.

    "timeout" specifies the timeout for each OID query. The total amount of time will depend on the number of OID values found and the time required for each query.

    "cb" provides a function to call for every value that is found. "context" is an application-defined pointer that is sent to the callback function along with the OID and current data. The data passed to the callback is the same as returned by cupsSideChannelSNMPGet. CUPS_SC_STATUS_NOT_IMPLEMENTED is returned by backends that do not support SNMP queries. CUPS_SC_STATUS_NO_RESPONSE is returned when the printer does not respond to the first SNMP query.

     CUPS 1.3/macOS 10.5 cupsSideChannelWrite

    Write a side-channel message.

    int cupsSideChannelWrite(cups_sc_command_t command, cups_sc_status_t status, const char *data, int datalen, double timeout);

    Parameters

    command Command code
    status Status code
    data Data buffer pointer
    datalen Number of bytes of data
    timeout Timeout in seconds

    Return Value

    0 on success, -1 on error

    Discussion

    This function is normally only called by backend programs to send responses to a filter, driver, or port monitor program.

    Data Types

    cups_backend_t

    Backend exit codes

    typedef enum cups_backend_e cups_backend_t;

    cups_sc_bidi_t

    Bidirectional capabilities

    typedef enum cups_sc_bidi_e cups_sc_bidi_t;

    cups_sc_command_t

    Request command codes

    typedef enum cups_sc_command_e cups_sc_command_t;

    cups_sc_connected_t

    Connectivity values

    typedef enum cups_sc_connected_e cups_sc_connected_t;

    cups_sc_state_t

    Printer state bits

    typedef enum cups_sc_state_e cups_sc_state_t;

    cups_sc_status_t

    Response status codes

    typedef enum cups_sc_status_e cups_sc_status_t;

    cups_sc_walk_func_t

    SNMP walk callback

    typedef void (*cups_sc_walk_func_t)(const char *oid, const char *data, int datalen, void *context);

    Constants

    cups_backend_e

    Backend exit codes

    Constants

    CUPS_BACKEND_AUTH_REQUIRED Job failed, authentication required
    CUPS_BACKEND_CANCEL Job failed, cancel job
    CUPS_BACKEND_FAILED Job failed, use error-policy
    CUPS_BACKEND_HOLD Job failed, hold job
    CUPS_BACKEND_OK Job completed successfully
    CUPS_BACKEND_RETRY Job failed, retry this job later
    CUPS_BACKEND_RETRY_CURRENT Job failed, retry this job immediately
    CUPS_BACKEND_STOP Job failed, stop queue

    cups_sc_bidi_e

    Bidirectional capability values

    Constants

    CUPS_SC_BIDI_NOT_SUPPORTED Bidirectional I/O is not supported
    CUPS_SC_BIDI_SUPPORTED Bidirectional I/O is supported

    cups_sc_command_e

    Request command codes

    Constants

    CUPS_SC_CMD_DRAIN_OUTPUT Drain all pending output
    CUPS_SC_CMD_GET_BIDI Return bidirectional capabilities
    CUPS_SC_CMD_GET_CONNECTED  CUPS 1.5/macOS 10.7  Return whether the backend is "connected" to the printer
    CUPS_SC_CMD_GET_DEVICE_ID Return the IEEE-1284 device ID
    CUPS_SC_CMD_GET_STATE Return the device state
    CUPS_SC_CMD_SNMP_GET  CUPS 1.4/macOS 10.6  Query an SNMP OID
    CUPS_SC_CMD_SNMP_GET_NEXT  CUPS 1.4/macOS 10.6  Query the next SNMP OID
    CUPS_SC_CMD_SOFT_RESET Do a soft reset

    cups_sc_connected_e

    Connectivity values

    Constants

    CUPS_SC_CONNECTED Backend is "connected" to printer
    CUPS_SC_NOT_CONNECTED Backend is not "connected" to printer

    cups_sc_state_e

    Printer state bits

    Constants

    CUPS_SC_STATE_BUSY Device is busy
    CUPS_SC_STATE_ERROR Other error condition
    CUPS_SC_STATE_MARKER_EMPTY Toner/ink out condition
    CUPS_SC_STATE_MARKER_LOW Toner/ink low condition
    CUPS_SC_STATE_MEDIA_EMPTY Paper out condition
    CUPS_SC_STATE_MEDIA_LOW Paper low condition
    CUPS_SC_STATE_OFFLINE Device is offline
    CUPS_SC_STATE_ONLINE Device is online

    cups_sc_status_e

    Response status codes

    Constants

    CUPS_SC_STATUS_BAD_MESSAGE The command/response message was invalid
    CUPS_SC_STATUS_IO_ERROR An I/O error occurred
    CUPS_SC_STATUS_NONE No status
    CUPS_SC_STATUS_NOT_IMPLEMENTED Command not implemented
    CUPS_SC_STATUS_NO_RESPONSE The device did not respond
    CUPS_SC_STATUS_OK Operation succeeded
    CUPS_SC_STATUS_TIMEOUT The backend did not respond
    CUPS_SC_STATUS_TOO_BIG Response too big
    cups-2.2.7/doc/help/api-ppd.html000664 000765 000024 00000254302 13255074424 017076 0ustar00msweetstaff000000 000000 PPD API (DEPRECATED)

    PPD API (DEPRECATED)

    The PPD API is deprecated starting in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the CUPS API documentation. These functions will be removed in a future release of CUPS.
    Header cups/ppd.h
    Library -lcups
    See Also Programming: Introduction to CUPS Programming
    Programming: CUPS API
    Specifications: CUPS PPD Extensions

    Overview

    The PPD API is deprecated starting in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the CUPS API documentation. These functions will be removed in a future release of CUPS.

    The CUPS PPD API provides read-only access the data in PostScript Printer Description ("PPD") files which are used for all printers with a driver. With it you can obtain the data necessary to display printer options to users, mark option choices and check for conflicting choices, and output marked choices in PostScript output. The ppd_file_t structure contains all of the information in a PPD file.

    Note:

    The CUPS PPD API uses the terms "option" and "choice" instead of the Adobe terms "MainKeyword" and "OptionKeyword" to refer to specific printer options and features. CUPS also treats option ("MainKeyword") and choice ("OptionKeyword") values as case-insensitive strings, so option "InputSlot" and choice "Upper" are equivalent to "inputslot" and "upper", respectively.

    Loading a PPD File

    The ppdOpenFile function "opens" a PPD file and loads it into memory. For example, the following code opens the current printer's PPD file in a CUPS filter:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd = ppdOpenFile(getenv("PPD"));
    

    The return value is a pointer to a new ppd_file_t structure or NULL if the PPD file does not exist or cannot be loaded. The ppdClose function frees the memory used by the structure:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd;
    
    ppdClose(ppd);
    

    Once closed, pointers to the ppd_file_t structure and any data in it will no longer be valid.

    Options and Groups

    PPD files support multiple options, which are stored in arrays of ppd_option_t and ppd_choice_t structures.

    Each option in turn is associated with a group stored in a ppd_group_t structure. Groups can be specified in the PPD file; if an option is not associated with a group then it is put in an automatically-generated "General" group. Groups can also have sub-groups, however CUPS currently ignores sub-groups because of past abuses of this functionality.

    Option choices are selected by marking them using one of three functions. The first is ppdMarkDefaults which selects all of the default options in the PPD file:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd;
    
    ppdMarkDefaults(ppd);
    

    The second is ppdMarkOption which selects a single option choice in the PPD file. For example, the following code selects the upper paper tray:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd;
    
    ppdMarkOption(ppd, "InputSlot", "Upper");
    

    The last function is cupsMarkOptions which selects multiple option choices in the PPD file from an array of CUPS options, mapping IPP attributes like "media" and "sides" to their corresponding PPD options. You typically use this function in a print filter with cupsParseOptions and ppdMarkDefaults to select all of the option choices needed for the job, for example:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd = ppdOpenFile(getenv("PPD"));
    cups_option_t *options = NULL;
    int num_options = cupsParseOptions(argv[5], 0, &options);
    
    ppdMarkDefaults(ppd);
    cupsMarkOptions(ppd, num_options, options);
    cupsFreeOptions(num_options, options);
    

    Constraints

    PPD files support specification of conflict conditions, called constraints, between different options. Constraints are stored in an array of ppd_const_t structures which specify the options and choices that conflict with each other. The ppdConflicts function tells you how many of the selected options are incompatible. Since constraints are normally specified in pairs, the returned value is typically an even number.

    Page Sizes

    Page sizes are special options which have physical dimensions and margins associated with them. The size information is stored in ppd_size_t structures and is available by looking up the named size with the ppdPageSize function. The page size and margins are returned in units called points; there are 72 points per inch. If you pass NULL for the size, the currently selected size is returned:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd;
    ppd_size_t *size = ppdPageSize(ppd, NULL);
    

    Besides the standard page sizes listed in a PPD file, some printers support variable or custom page sizes. Custom page sizes are supported if the variables_sizes member of the ppd_file_t structure is non-zero. The custom_min, custom_max, and custom_margins members of the ppd_file_t structure define the limits of the printable area. To get the resulting media size, use a page size string of the form "Custom.widthxlength", where "width" and "length" are in points. Custom page size names can also be specified in inches ("Custom.widthxheightin"), centimeters ("Custom.widthxheightcm"), or millimeters ("Custom.widthxheightmm"):

    #include <cups/ppd.h>
    
    ppd_file_t *ppd;
    
    /* Get an 576x720 point custom page size */
    ppd_size_t *size = ppdPageSize(ppd, "Custom.576x720");
    
    /* Get an 8x10 inch custom page size */
    ppd_size_t *size = ppdPageSize(ppd, "Custom.8x10in");
    
    /* Get a 100x200 millimeter custom page size */
    ppd_size_t *size = ppdPageSize(ppd, "Custom.100x200mm");
    
    /* Get a 12.7x34.5 centimeter custom page size */
    ppd_size_t *size = ppdPageSize(ppd, "Custom.12.7x34.5cm");
    

    If the PPD does not support variable page sizes, the ppdPageSize function will return NULL.

    Attributes

    Every PPD file is composed of one or more attributes. Most of these attributes are used to define groups, options, choices, and page sizes, however several informational attributes may be present which you can access in your program or filter. Attributes normally look like one of the following examples in a PPD file:

    *name: "value"
    *name spec: "value"
    *name spec/text: "value"
    

    The ppdFindAttr and ppdFindNextAttr functions find the first and next instances, respectively, of the named attribute with the given "spec" string and return a ppd_attr_t structure. If you provide a NULL specifier string, all attributes with the given name will be returned. For example, the following code lists all of the Product attributes in a PPD file:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd;
    ppd_attr_t *attr;
    
    for (attr = ppdFindAttr(ppd, "Product", NULL);
         attr != NULL;
         attr = ppdFindNextAttr(ppd, "Product", NULL))
      puts(attr->value);
    

    Functions

     CUPS 1.4/macOS 10.6 cupsGetConflicts

    Get a list of conflicting options in a marked PPD.

    int cupsGetConflicts(ppd_file_t *ppd, const char *option, const char *choice, cups_option_t **options);

    Parameters

    ppd PPD file
    option Option to test
    choice Choice to test
    options Conflicting options

    Return Value

    Number of conflicting options

    Discussion

    This function gets a list of options that would conflict if "option" and "choice" were marked in the PPD. You would typically call this function after marking the currently selected options in the PPD in order to determine whether a new option selection would cause a conflict.

    The number of conflicting options are returned with "options" pointing to the conflicting options. The returned option array must be freed using cupsFreeOptions.

    cupsGetPPD

    Get the PPD file for a printer on the default server.

    const char *cupsGetPPD(const char *name);

    Parameters

    name Destination name

    Return Value

    Filename for PPD file

    Discussion

    For classes, cupsGetPPD returns the PPD file for the first printer in the class.

    The returned filename is stored in a static buffer and is overwritten with each call to cupsGetPPD or cupsGetPPD2. The caller "owns" the file that is created and must unlink the returned filename.

     CUPS 1.1.21/macOS 10.4 cupsGetPPD2

    Get the PPD file for a printer from the specified server.

    const char *cupsGetPPD2(http_t *http, const char *name);

    Parameters

    http Connection to server or CUPS_HTTP_DEFAULT
    name Destination name

    Return Value

    Filename for PPD file

    Discussion

    For classes, cupsGetPPD2 returns the PPD file for the first printer in the class.

    The returned filename is stored in a static buffer and is overwritten with each call to cupsGetPPD or cupsGetPPD2. The caller "owns" the file that is created and must unlink the returned filename.

     CUPS 1.4/macOS 10.6 cupsGetPPD3

    Get the PPD file for a printer on the specified server if it has changed.

    http_status_t cupsGetPPD3(http_t *http, const char *name, time_t *modtime, char *buffer, size_t bufsize);

    Parameters

    http HTTP connection or CUPS_HTTP_DEFAULT
    name Destination name
    modtime Modification time
    buffer Filename buffer
    bufsize Size of filename buffer

    Return Value

    HTTP status

    Discussion

    The "modtime" parameter contains the modification time of any locally-cached content and is updated with the time from the PPD file on the server.

    The "buffer" parameter contains the local PPD filename. If it contains the empty string, a new temporary file is created, otherwise the existing file will be overwritten as needed. The caller "owns" the file that is created and must unlink the returned filename.

    On success, HTTP_STATUS_OK is returned for a new PPD file and HTTP_STATUS_NOT_MODIFIED if the existing PPD file is up-to-date. Any other status is an error.

    For classes, cupsGetPPD3 returns the PPD file for the first printer in the class.

     CUPS 1.3/macOS 10.5 cupsGetServerPPD

    Get an available PPD file from the server.

    char *cupsGetServerPPD(http_t *http, const char *name);

    Parameters

    http Connection to server or CUPS_HTTP_DEFAULT
    name Name of PPD file ("ppd-name")

    Return Value

    Name of PPD file or NULL on error

    Discussion

    This function returns the named PPD file from the server. The list of available PPDs is provided by the IPP CUPS_GET_PPDS operation.

    You must remove (unlink) the PPD file when you are finished with it. The PPD filename is stored in a static location that will be overwritten on the next call to cupsGetPPD, cupsGetPPD2, or cupsGetServerPPD.

    cupsMarkOptions

    Mark command-line options in a PPD file.

    int cupsMarkOptions(ppd_file_t *ppd, int num_options, cups_option_t *options);

    Parameters

    ppd PPD file
    num_options Number of options
    options Options

    Return Value

    1 if conflicts exist, 0 otherwise

    Discussion

    This function maps the IPP "finishings", "media", "mirror", "multiple-document-handling", "output-bin", "print-color-mode", "print-quality", "printer-resolution", and "sides" attributes to their corresponding PPD options and choices.

     CUPS 1.4/macOS 10.6 cupsResolveConflicts

    Resolve conflicts in a marked PPD.

    int cupsResolveConflicts(ppd_file_t *ppd, const char *option, const char *choice, int *num_options, cups_option_t **options);

    Parameters

    ppd PPD file
    option Newly selected option or NULL for none
    choice Newly selected choice or NULL for none
    num_options Number of additional selected options
    options Additional selected options

    Return Value

    1 on success, 0 on failure

    Discussion

    This function attempts to resolve any conflicts in a marked PPD, returning a list of option changes that are required to resolve them. On input, "num_options" and "options" contain any pending option changes that have not yet been marked, while "option" and "choice" contain the most recent selection which may or may not be in "num_options" or "options".

    On successful return, "num_options" and "options" are updated to contain "option" and "choice" along with any changes required to resolve conflicts specified in the PPD file and 1 is returned.

    If option conflicts cannot be resolved, "num_options" and "options" are not changed and 0 is returned.

    When resolving conflicts, cupsResolveConflicts does not consider changes to the current page size (media, PageSize, and PageRegion) or to the most recent option specified in "option". Thus, if the only way to resolve a conflict is to change the page size or the option the user most recently changed, cupsResolveConflicts will return 0 to indicate it was unable to resolve the conflicts.

    The cupsResolveConflicts function uses one of two sources of option constraint information. The preferred constraint information is defined by cupsUIConstraints and cupsUIResolver attributes - in this case, the PPD file provides constraint resolution actions.

    The backup constraint information is defined by the UIConstraints and NonUIConstraints attributes. These constraints are resolved algorithmically by first selecting the default choice for the conflicting option, then iterating over all possible choices until a non-conflicting option choice is found.

    ppdCollect

    Collect all marked options that reside in the specified section.

    int ppdCollect(ppd_file_t *ppd, ppd_section_t section, ppd_choice_t ***choices);

    Parameters

    ppd PPD file data
    section Section to collect
    choices Pointers to choices

    Return Value

    Number of options marked

    Discussion

    The choices array should be freed using free when you are finished with it.

     CUPS 1.2/macOS 10.5 ppdCollect2

    Collect all marked options that reside in the specified section and minimum order.

    int ppdCollect2(ppd_file_t *ppd, ppd_section_t section, float min_order, ppd_choice_t ***choices);

    Parameters

    ppd PPD file data
    section Section to collect
    min_order Minimum OrderDependency value
    choices Pointers to choices

    Return Value

    Number of options marked

    Discussion

    The choices array should be freed using free when you are finished with it.

    ppdConflicts

    Check to see if there are any conflicts among the marked option choices.

    int ppdConflicts(ppd_file_t *ppd);

    Parameters

    ppd PPD to check

    Return Value

    Number of conflicts found

    Discussion

    The returned value is the same as returned by ppdMarkOption.

    ppdEmit

    Emit code for marked options to a file.

    int ppdEmit(ppd_file_t *ppd, FILE *fp, ppd_section_t section);

    Parameters

    ppd PPD file record
    fp File to write to
    section Section to write

    Return Value

    0 on success, -1 on failure

     CUPS 1.2/macOS 10.5 ppdEmitAfterOrder

    Emit a subset of the code for marked options to a file.

    int ppdEmitAfterOrder(ppd_file_t *ppd, FILE *fp, ppd_section_t section, int limit, float min_order);

    Parameters

    ppd PPD file record
    fp File to write to
    section Section to write
    limit Non-zero to use min_order
    min_order Lowest OrderDependency

    Return Value

    0 on success, -1 on failure

    Discussion

    When "limit" is non-zero, this function only emits options whose OrderDependency value is greater than or equal to "min_order".

    When "limit" is zero, this function is identical to ppdEmit().

    ppdEmitFd

    Emit code for marked options to a file.

    int ppdEmitFd(ppd_file_t *ppd, int fd, ppd_section_t section);

    Parameters

    ppd PPD file record
    fd File to write to
    section Section to write

    Return Value

    0 on success, -1 on failure

    ppdEmitJCL

    Emit code for JCL options to a file.

    int ppdEmitJCL(ppd_file_t *ppd, FILE *fp, int job_id, const char *user, const char *title);

    Parameters

    ppd PPD file record
    fp File to write to
    job_id Job ID
    user Username
    title Title

    Return Value

    0 on success, -1 on failure

     CUPS 1.2/macOS 10.5 ppdEmitJCLEnd

    Emit JCLEnd code to a file.

    int ppdEmitJCLEnd(ppd_file_t *ppd, FILE *fp);

    Parameters

    ppd PPD file record
    fp File to write to

    Return Value

    0 on success, -1 on failure

     CUPS 1.2/macOS 10.5 ppdEmitString

    Get a string containing the code for marked options.

    char *ppdEmitString(ppd_file_t *ppd, ppd_section_t section, float min_order);

    Parameters

    ppd PPD file record
    section Section to write
    min_order Lowest OrderDependency

    Return Value

    String containing option code or NULL if there is no option code

    Discussion

    When "min_order" is greater than zero, this function only includes options whose OrderDependency value is greater than or equal to "min_order". Otherwise, all options in the specified section are included in the returned string.

    The return string is allocated on the heap and should be freed using free when you are done with it.

     CUPS 1.1.19/macOS 10.3 ppdFindAttr

    Find the first matching attribute.

    ppd_attr_t *ppdFindAttr(ppd_file_t *ppd, const char *name, const char *spec);

    Parameters

    ppd PPD file data
    name Attribute name
    spec Specifier string or NULL

    Return Value

    Attribute or NULL if not found

    ppdFindChoice

    Return a pointer to an option choice.

    ppd_choice_t *ppdFindChoice(ppd_option_t *o, const char *choice);

    Parameters

    o Pointer to option
    choice Name of choice

    Return Value

    Choice pointer or NULL

     CUPS 1.2/macOS 10.5 ppdFindCustomOption

    Find a custom option.

    ppd_coption_t *ppdFindCustomOption(ppd_file_t *ppd, const char *keyword);

    Parameters

    ppd PPD file
    keyword Custom option name

    Return Value

    Custom option or NULL

     CUPS 1.2/macOS 10.5 ppdFindCustomParam

    Find a parameter for a custom option.

    ppd_cparam_t *ppdFindCustomParam(ppd_coption_t *opt, const char *name);

    Parameters

    opt Custom option
    name Parameter name

    Return Value

    Custom parameter or NULL

    ppdFindMarkedChoice

    Return the marked choice for the specified option.

    ppd_choice_t *ppdFindMarkedChoice(ppd_file_t *ppd, const char *option);

    Parameters

    ppd PPD file
    option Keyword/option name

    Return Value

    Pointer to choice or NULL

     CUPS 1.1.19/macOS 10.3 ppdFindNextAttr

    Find the next matching attribute.

    ppd_attr_t *ppdFindNextAttr(ppd_file_t *ppd, const char *name, const char *spec);

    Parameters

    ppd PPD file data
    name Attribute name
    spec Specifier string or NULL

    Return Value

    Attribute or NULL if not found

    ppdFindOption

    Return a pointer to the specified option.

    ppd_option_t *ppdFindOption(ppd_file_t *ppd, const char *option);

    Parameters

    ppd PPD file data
    option Option/Keyword name

    Return Value

    Pointer to option or NULL

     CUPS 1.2/macOS 10.5 ppdFirstCustomParam

    Return the first parameter for a custom option.

    ppd_cparam_t *ppdFirstCustomParam(ppd_coption_t *opt);

    Parameters

    opt Custom option

    Return Value

    Custom parameter or NULL

     CUPS 1.2/macOS 10.5 ppdFirstOption

    Return the first option in the PPD file.

    ppd_option_t *ppdFirstOption(ppd_file_t *ppd);

    Parameters

    ppd PPD file

    Return Value

    First option or NULL

    Discussion

    Options are returned from all groups in ascending alphanumeric order.

     CUPS 1.4/macOS 10.6 ppdInstallableConflict

    Test whether an option choice conflicts with an installable option.

    int ppdInstallableConflict(ppd_file_t *ppd, const char *option, const char *choice);

    Parameters

    ppd PPD file
    option Option
    choice Choice

    Return Value

    1 if conflicting, 0 if not conflicting

    Discussion

    This function tests whether a particular option choice is available based on constraints against options in the "InstallableOptions" group.

    ppdIsMarked

    Check to see if an option is marked.

    int ppdIsMarked(ppd_file_t *ppd, const char *option, const char *choice);

    Parameters

    ppd PPD file data
    option Option/Keyword name
    choice Choice name

    Return Value

    Non-zero if option is marked

     CUPS 1.2/macOS 10.5 ppdLocalize

    Localize the PPD file to the current locale.

    int ppdLocalize(ppd_file_t *ppd);

    Parameters

    ppd PPD file

    Return Value

    0 on success, -1 on error

    Discussion

    All groups, options, and choices are localized, as are ICC profile descriptions, printer presets, and custom option parameters. Each localized string uses the UTF-8 character encoding.

    ppdLocalizeAttr

    Localize an attribute.

    ppd_attr_t *ppdLocalizeAttr(ppd_file_t *ppd, const char *keyword, const char *spec);

    Parameters

    ppd PPD file
    keyword Main keyword
    spec Option keyword or NULL for none

    Return Value

    Localized attribute or NULL if none exists

    Discussion

    This function uses the current locale to find the localized attribute for the given main and option keywords. If no localized version of the attribute exists for the current locale, the unlocalized version is returned.

     CUPS 1.3/macOS 10.5 ppdLocalizeIPPReason

    Get the localized version of a cupsIPPReason attribute.

    const char *ppdLocalizeIPPReason(ppd_file_t *ppd, const char *reason, const char *scheme, char *buffer, size_t bufsize);

    Parameters

    ppd PPD file
    reason IPP reason keyword to look up
    scheme URI scheme or NULL for text
    buffer Value buffer
    bufsize Size of value buffer

    Return Value

    Value or NULL if not found

    Discussion

    This function uses the current locale to find the corresponding reason text or URI from the attribute value. If "scheme" is NULL or "text", the returned value contains human-readable (UTF-8) text from the translation string or attribute value. Otherwise the corresponding URI is returned.

    If no value of the requested scheme can be found, NULL is returned.

     CUPS 1.4/macOS 10.6 ppdLocalizeMarkerName

    Get the localized version of a marker-names attribute value.

    const char *ppdLocalizeMarkerName(ppd_file_t *ppd, const char *name);

    Parameters

    ppd PPD file
    name Marker name to look up

    Return Value

    Value or NULL if not found

    Discussion

    This function uses the current locale to find the corresponding name text from the attribute value. If no localized text for the requested name can be found, NULL is returned.

    ppdMarkDefaults

    Mark all default options in the PPD file.

    void ppdMarkDefaults(ppd_file_t *ppd);

    Parameters

    ppd PPD file record

    ppdMarkOption

    Mark an option in a PPD file and return the number of conflicts.

    int ppdMarkOption(ppd_file_t *ppd, const char *option, const char *choice);

    Parameters

    ppd PPD file record
    option Keyword
    choice Option name

    Return Value

    Number of conflicts

     CUPS 1.2/macOS 10.5 ppdNextCustomParam

    Return the next parameter for a custom option.

    ppd_cparam_t *ppdNextCustomParam(ppd_coption_t *opt);

    Parameters

    opt Custom option

    Return Value

    Custom parameter or NULL

     CUPS 1.2/macOS 10.5 ppdNextOption

    Return the next option in the PPD file.

    ppd_option_t *ppdNextOption(ppd_file_t *ppd);

    Parameters

    ppd PPD file

    Return Value

    Next option or NULL

    Discussion

    Options are returned from all groups in ascending alphanumeric order.

    ppdPageLength

    Get the page length for the given size.

    float ppdPageLength(ppd_file_t *ppd, const char *name);

    Parameters

    ppd PPD file
    name Size name

    Return Value

    Length of page in points or 0.0

    ppdPageSize

    Get the page size record for the named size.

    ppd_size_t *ppdPageSize(ppd_file_t *ppd, const char *name);

    Parameters

    ppd PPD file record
    name Size name

    Return Value

    Size record for page or NULL

     CUPS 1.4/macOS 10.6 ppdPageSizeLimits

    Return the custom page size limits.

    int ppdPageSizeLimits(ppd_file_t *ppd, ppd_size_t *minimum, ppd_size_t *maximum);

    Parameters

    ppd PPD file record
    minimum Minimum custom size
    maximum Maximum custom size

    Return Value

    1 if custom sizes are supported, 0 otherwise

    Discussion

    This function returns the minimum and maximum custom page sizes and printable areas based on the currently-marked (selected) options.

    If the specified PPD file does not support custom page sizes, both "minimum" and "maximum" are filled with zeroes.

    ppdPageWidth

    Get the page width for the given size.

    float ppdPageWidth(ppd_file_t *ppd, const char *name);

    Parameters

    ppd PPD file record
    name Size name

    Return Value

    Width of page in points or 0.0

    Data Types

     CUPS 1.1.19/macOS 10.3 ppd_attr_t

    PPD Attribute Structure

    typedef struct ppd_attr_s ppd_attr_t;

    ppd_choice_t

    Option choices

    typedef struct ppd_choice_s ppd_choice_t;

     CUPS 1.1.19/macOS 10.3 ppd_conform_t

    Conformance Levels

    typedef enum ppd_conform_e ppd_conform_t;

    ppd_const_t

    Constraints

    typedef struct ppd_const_s ppd_const_t;

     CUPS 1.2/macOS 10.5 ppd_coption_t

    Custom Option

    typedef struct ppd_coption_s ppd_coption_t;

     CUPS 1.2/macOS 10.5 ppd_cparam_t

    Custom Parameter

    typedef struct ppd_cparam_s ppd_cparam_t;

     CUPS 1.2/macOS 10.5 ppd_cplimit_t

    Custom Parameter Limit

    typedef union ppd_cplimit_u ppd_cplimit_t;

     CUPS 1.2/macOS 10.5 ppd_cptype_t

    Custom Parameter Type

    typedef enum ppd_cptype_e ppd_cptype_t;

     CUPS 1.2/macOS 10.5 ppd_cpvalue_t

    Custom Parameter Value

    typedef union ppd_cpvalue_u ppd_cpvalue_t;

    ppd_cs_t

    Colorspaces

    typedef enum ppd_cs_e ppd_cs_t;

    ppd_emul_t

    Emulators

    typedef struct ppd_emul_s ppd_emul_t;

    ppd_file_t

    PPD File

    typedef struct ppd_file_s ppd_file_t;

    ppd_group_t

    Groups

    typedef struct ppd_group_s ppd_group_t;

    ppd_option_t

    Options

    typedef struct ppd_option_s ppd_option_t;

    ppd_profile_t

    sRGB Color Profiles

    typedef struct ppd_profile_s ppd_profile_t;

    ppd_section_t

    Order dependency sections

    typedef enum ppd_section_e ppd_section_t;

    ppd_size_t

    Page Sizes

    typedef struct ppd_size_s ppd_size_t;

     CUPS 1.1.19/macOS 10.3 ppd_status_t

    Status Codes

    typedef enum ppd_status_e ppd_status_t;

    ppd_ui_t

    UI Types

    typedef enum ppd_ui_e ppd_ui_t;

    Structures

     CUPS 1.1.19/macOS 10.3 ppd_attr_s

    PPD Attribute Structure

    struct ppd_attr_s {
        char name[PPD_MAX_NAME];
        char spec[PPD_MAX_NAME];
        char text[PPD_MAX_TEXT];
        char *value;
    };

    Members

    name[PPD_MAX_NAME] Name of attribute (cupsXYZ)
    spec[PPD_MAX_NAME] Specifier string, if any
    text[PPD_MAX_TEXT] Human-readable text, if any
    value Value string

    ppd_choice_s

    Option choices

    struct ppd_choice_s {
        char choice[PPD_MAX_NAME];
        char *code;
        char marked;
        ppd_option_t *option;
        char text[PPD_MAX_TEXT];
    };

    Members

    choice[PPD_MAX_NAME] Computer-readable option name
    code Code to send for this option
    marked 0 if not selected, 1 otherwise
    option Pointer to parent option structure
    text[PPD_MAX_TEXT] Human-readable option name

    ppd_const_s

    Constraints

    struct ppd_const_s {
        char choice1[PPD_MAX_NAME];
        char choice2[PPD_MAX_NAME];
        char option1[PPD_MAX_NAME];
        char option2[PPD_MAX_NAME];
    };

    Members

    choice1[PPD_MAX_NAME] First option/choice (blank for all)
    choice2[PPD_MAX_NAME] Second option/choice (blank for all)
    option1[PPD_MAX_NAME] First keyword
    option2[PPD_MAX_NAME] Second keyword

     CUPS 1.2/macOS 10.5 ppd_coption_s

    Custom Option

    struct ppd_coption_s {
        char keyword[PPD_MAX_NAME];
        int marked;
        ppd_option_t *option;
        cups_array_t *params;
    };

    Members

    keyword[PPD_MAX_NAME] Name of option that is being extended...
    marked Extended option is marked
    option Option that is being extended...
    params Parameters

     CUPS 1.2/macOS 10.5 ppd_cparam_s

    Custom Parameter

    struct ppd_cparam_s {
        ppd_cpvalue_t current;
        ppd_cplimit_t minimum, maximum;
        char name[PPD_MAX_NAME];
        int order;
        char text[PPD_MAX_TEXT];
        ppd_cptype_t type;
    };

    Members

    current Current value
    maximum Maximum value
    name[PPD_MAX_NAME] Parameter name
    order Order (0 to N)
    text[PPD_MAX_TEXT] Human-readable text
    type Parameter type

    ppd_emul_s

    Emulators

    struct ppd_emul_s {
        char name[PPD_MAX_NAME];
        char *start;
        char *stop;
    };

    Members

    name[PPD_MAX_NAME] Emulator name
    start Code to switch to this emulation
    stop Code to stop this emulation

    ppd_file_s

    PPD File

    struct ppd_file_s {
        int accurate_screens;
        int color_device;
        ppd_cs_t colorspace;
        ppd_const_t *consts;
        int contone_only;
        float custom_margins[4];
        float custom_max[2];
        float custom_min[2];
        ppd_emul_t *emulations;
        char **filters;
        int flip_duplex;
        char **fonts;
        ppd_group_t *groups;
        char *jcl_begin;
        char *jcl_end;
        char *jcl_ps;
        int landscape;
        char *lang_encoding;
        char *lang_version;
        int language_level;
        int manual_copies;
        char *manufacturer;
        int model_number;
        char *modelname;
        char *nickname;
        int num_consts;
        int num_emulations;
        int num_filters;
        int num_fonts;
        int num_groups;
        int num_profiles;
        int num_sizes;
        char *patches;
        char *pcfilename;
        char *product;
        ppd_profile_t *profiles;
        char *protocols;
        char *shortnickname;
        ppd_size_t *sizes;
        int throughput;
        char *ttrasterizer;
        int variable_sizes;
    };

    Members

    accurate_screens 1 = supports accurate screens, 0 = not
    color_device 1 = color device, 0 = grayscale
    colorspace Default colorspace
    consts UI/Non-UI constraints
    contone_only 1 = continuous tone only, 0 = not
    custom_margins[4] Margins around page
    custom_max[2] Maximum variable page size
    custom_min[2] Minimum variable page size
    emulations Emulations and the code to invoke them
    filters Filter strings...
    flip_duplex  DEPRECATED  1 = Flip page for back sides
    fonts Pre-loaded fonts
    groups UI groups
    jcl_begin Start JCL commands
    jcl_end End JCL commands
    jcl_ps Enter PostScript interpreter
    landscape -90 or 90
    lang_encoding Language encoding
    lang_version Language version (English, Spanish, etc.)
    language_level Language level of device
    manual_copies 1 = Copies done manually, 0 = hardware
    manufacturer Manufacturer name
    model_number Device-specific model number
    modelname Model name (general)
    nickname Nickname (specific)
    num_consts Number of UI/Non-UI constraints
    num_emulations Number of emulations supported
    num_filters Number of filters
    num_fonts Number of pre-loaded fonts
    num_groups Number of UI groups
    num_profiles  DEPRECATED  Number of sRGB color profiles
    num_sizes Number of page sizes
    patches Patch commands to be sent to printer
    pcfilename  CUPS 1.1.19/macOS 10.3  PCFileName string
    product Product name (from PS RIP/interpreter)
    profiles  DEPRECATED  sRGB color profiles
    protocols  CUPS 1.1.19/macOS 10.3  Protocols (BCP, TBCP) string
    shortnickname Short version of nickname
    sizes Page sizes
    throughput Pages per minute
    ttrasterizer Truetype rasterizer
    variable_sizes 1 = supports variable sizes, 0 = doesn't

    ppd_group_s

    Groups

    struct ppd_group_s {
        char text[PPD_MAX_TEXT - PPD_MAX_NAME];
        char name[PPD_MAX_NAME];
        int num_options;
        int num_subgroups;
        ppd_option_t *options;
        struct ppd_group_s *subgroups;
    };

    Members

    PPD_MAX_NAME] Human-readable group name
    name[PPD_MAX_NAME]  CUPS 1.1.18/macOS 10.3  Group name
    num_options Number of options
    num_subgroups Number of sub-groups
    options Options
    subgroups Sub-groups (max depth = 1)

    ppd_option_s

    Options

    struct ppd_option_s {
        ppd_choice_t *choices;
        char conflicted;
        char defchoice[PPD_MAX_NAME];
        char keyword[PPD_MAX_NAME];
        int num_choices;
        float order;
        ppd_section_t section;
        char text[PPD_MAX_TEXT];
        ppd_ui_t ui;
    };

    Members

    choices Option choices
    conflicted 0 if no conflicts exist, 1 otherwise
    defchoice[PPD_MAX_NAME] Default option choice
    keyword[PPD_MAX_NAME] Option keyword name ("PageSize", etc.)
    num_choices Number of option choices
    order Order number
    section Section for command
    text[PPD_MAX_TEXT] Human-readable text
    ui Type of UI option

    ppd_profile_s

    sRGB Color Profiles

    struct ppd_profile_s {
        float density;
        float gamma;
        float matrix[3][3];
        char media_type[PPD_MAX_NAME];
        char resolution[PPD_MAX_NAME];
    };

    Members

    density Ink density to use
    gamma Gamma correction to use
    matrix[3][3] Transform matrix
    media_type[PPD_MAX_NAME] Media type or "-"
    resolution[PPD_MAX_NAME] Resolution or "-"

    ppd_size_s

    Page Sizes

    struct ppd_size_s {
        float bottom;
        float left;
        float length;
        int marked;
        char name[PPD_MAX_NAME];
        float right;
        float top;
        float width;
    };

    Members

    bottom Bottom printable margin in points
    left Left printable margin in points
    length Length of media in points
    marked Page size selected?
    name[PPD_MAX_NAME] Media size option
    right Right printable margin in points
    top Top printable margin in points
    width Width of media in points

    Unions

     CUPS 1.2/macOS 10.5 ppd_cplimit_u

    Custom Parameter Limit

    union ppd_cplimit_u {
        float custom_curve;
        int custom_int;
        float custom_invcurve;
        int custom_passcode;
        int custom_password;
        float custom_points;
        float custom_real;
        int custom_string;
    };

    Members

    custom_curve Gamma value
    custom_int Integer value
    custom_invcurve Gamma value
    custom_passcode Passcode length
    custom_password Password length
    custom_points Measurement value
    custom_real Real value
    custom_string String length

     CUPS 1.2/macOS 10.5 ppd_cpvalue_u

    Custom Parameter Value

    union ppd_cpvalue_u {
        float custom_curve;
        int custom_int;
        float custom_invcurve;
        char *custom_passcode;
        char *custom_password;
        float custom_points;
        float custom_real;
        char *custom_string;
    };

    Members

    custom_curve Gamma value
    custom_int Integer value
    custom_invcurve Gamma value
    custom_passcode Passcode value
    custom_password Password value
    custom_points Measurement value
    custom_real Real value
    custom_string String value

    Constants

     CUPS 1.1.19/macOS 10.3 ppd_conform_e

    Conformance Levels

    Constants

    PPD_CONFORM_RELAXED Relax whitespace and control char
    PPD_CONFORM_STRICT Require strict conformance

    ppd_cs_e

    Colorspaces

    Constants

    PPD_CS_CMY CMY colorspace
    PPD_CS_CMYK CMYK colorspace
    PPD_CS_GRAY Grayscale colorspace
    PPD_CS_N DeviceN colorspace
    PPD_CS_RGB RGB colorspace
    PPD_CS_RGBK RGBK (K = gray) colorspace

    ppd_section_e

    Order dependency sections

    Constants

    PPD_ORDER_ANY Option code can be anywhere in the file
    PPD_ORDER_DOCUMENT ... must be in the DocumentSetup section
    PPD_ORDER_EXIT ... must be sent prior to the document
    PPD_ORDER_JCL ... must be sent as a JCL command
    PPD_ORDER_PAGE ... must be in the PageSetup section
    PPD_ORDER_PROLOG ... must be in the Prolog section

     CUPS 1.1.19/macOS 10.3 ppd_status_e

    Status Codes

    Constants

    PPD_ALLOC_ERROR Memory allocation error
    PPD_BAD_CUSTOM_PARAM Bad custom parameter
    PPD_BAD_OPEN_GROUP Bad OpenGroup
    PPD_BAD_OPEN_UI Bad OpenUI/JCLOpenUI
    PPD_BAD_ORDER_DEPENDENCY Bad OrderDependency
    PPD_BAD_UI_CONSTRAINTS Bad UIConstraints
    PPD_BAD_VALUE Bad value string
    PPD_FILE_OPEN_ERROR Unable to open PPD file
    PPD_ILLEGAL_CHARACTER Illegal control character
    PPD_ILLEGAL_MAIN_KEYWORD Illegal main keyword string
    PPD_ILLEGAL_OPTION_KEYWORD Illegal option keyword string
    PPD_ILLEGAL_TRANSLATION Illegal translation string
    PPD_ILLEGAL_WHITESPACE Illegal whitespace character
    PPD_INTERNAL_ERROR Internal error
    PPD_LINE_TOO_LONG Line longer than 255 chars
    PPD_MISSING_ASTERISK Missing asterisk in column 0
    PPD_MISSING_CLOSE_GROUP Missing CloseGroup
    PPD_MISSING_OPTION_KEYWORD Missing option keyword
    PPD_MISSING_PPDADOBE4 Missing PPD-Adobe-4.x header
    PPD_MISSING_VALUE Missing value string
    PPD_NESTED_OPEN_GROUP OpenGroup without a CloseGroup first
    PPD_NESTED_OPEN_UI OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first
    PPD_NULL_FILE NULL PPD file pointer
    PPD_OK OK

    ppd_ui_e

    UI Types

    Constants

    PPD_UI_BOOLEAN True or False option
    PPD_UI_PICKMANY Pick zero or more from a list
    PPD_UI_PICKONE Pick one from a list
    cups-2.2.7/doc/help/api-raster.html000664 000765 000024 00000170571 13255074424 017620 0ustar00msweetstaff000000 000000 Raster API

    Raster API

    Header cups/raster.h
    Library -lcupsimage
    See Also Programming: Introduction to CUPS Programming
    Programming: CUPS API
    Programming: PPD API
    References: CUPS PPD Specification

    Overview

    The CUPS raster API provides a standard interface for reading and writing CUPS raster streams which are used for printing to raster printers. Because the raster format is updated from time to time, it is important to use this API to avoid incompatibilities with newer versions of CUPS.

    Two kinds of CUPS filters use the CUPS raster API - raster image processor (RIP) filters such as pstoraster and cgpdftoraster (macOS) that produce CUPS raster files and printer driver filters that convert CUPS raster files into a format usable by the printer. Printer driver filters are by far the most common.

    CUPS raster files (application/vnd.cups-raster) consists of a stream of raster page descriptions produced by one of the RIP filters such as pstoraster, imagetoraster, or cgpdftoraster. CUPS raster files are referred to using the cups_raster_t type and are opened using the cupsRasterOpen function. For example, to read raster data from the standard input, open file descriptor 0:

    #include <cups/raster.h>
    
    cups_raster_t *ras = cupsRasterOpen(0, CUPS_RASTER_READ);
    

    Each page of data begins with a page dictionary structure called cups_page_header2_t. This structure contains the colorspace, bits per color, media size, media type, hardware resolution, and so forth used for the page.

    Note:

    Do not confuse the colorspace in the page header with the PPD ColorModel keyword. ColorModel refers to the general type of color used for a device (Gray, RGB, CMYK, DeviceN) and is often used to select a particular colorspace for the page header along with the associate color profile. The page header colorspace (cupsColorSpace) describes both the type and organization of the color data, for example KCMY (black first) instead of CMYK and RGBA (RGB + alpha) instead of RGB.

    You read the page header using the cupsRasterReadHeader2 function:

    #include <cups/raster.h>
    
    cups_raster_t *ras = cupsRasterOpen(0, CUPS_RASTER_READ);
    cups_page_header2_t header;
    
    while (cupsRasterReadHeader2(ras, &header))
    {
      /* setup this page */
    
      /* read raster data */
    
      /* finish this page */
    }
    

    After the page dictionary comes the page data which is a full-resolution, possibly compressed bitmap representing the page in the printer's output colorspace. You read uncompressed raster data using the cupsRasterReadPixels function. A for loop is normally used to read the page one line at a time:

    #include <cups/raster.h>
    
    cups_raster_t *ras = cupsRasterOpen(0, CUPS_RASTER_READ);
    cups_page_header2_t header;
    int page = 0;
    int y;
    char *buffer;
    
    while (cupsRasterReadHeader2(ras, &header))
    {
      /* setup this page */
      page ++;
      fprintf(stderr, "PAGE: %d %d\n", page, header.NumCopies);
    
      /* allocate memory for 1 line */
      buffer = malloc(header.cupsBytesPerLine);
    
      /* read raster data */
      for (y = 0; y < header.cupsHeight; y ++)
      {
        if (cupsRasterReadPixels(ras, buffer, header.cupsBytesPerLine) == 0)
          break;
    
        /* write raster data to printer on stdout */
      }
    
      /* finish this page */
    }
    

    When you are done reading the raster data, call the cupsRasterClose function to free the memory used to read the raster file:

    cups_raster_t *ras;
    
    cupsRasterClose(ras);
    

    Functions by Task

    Opening and Closing Raster Streams

    Reading Raster Streams

    Writing Raster Streams

    Functions

    cupsRasterClose

    Close a raster stream.

    void cupsRasterClose(cups_raster_t *r);

    Parameters

    r Stream to close

    Discussion

    The file descriptor associated with the raster stream must be closed separately as needed.

     CUPS 2.2/macOS 10.12 cupsRasterInitPWGHeader

    Initialize a page header for PWG Raster output.

    int cupsRasterInitPWGHeader(cups_page_header2_t *h, pwg_media_t *media, const char *type, int xdpi, int ydpi, const char *sides, const char *sheet_back);

    Parameters

    h Page header
    media PWG media information
    type PWG raster type string
    xdpi Cross-feed direction (horizontal) resolution
    ydpi Feed direction (vertical) resolution
    sides IPP "sides" option value
    sheet_back Transform for back side or NULL for none

    Return Value

    1 on success, 0 on failure

    Discussion

    The "media" argument specifies the media to use.

    The "type" argument specifies a "pwg-raster-document-type-supported" value that controls the color space and bit depth of the raster data.

    The "xres" and "yres" arguments specify the raster resolution in dots per inch.

    The "sheet_back" argument specifies a "pwg-raster-document-sheet-back" value to apply for the back side of a page. Pass NULL for the front side.

     CUPS 1.2/macOS 10.5 cupsRasterInterpretPPD

    Interpret PPD commands to create a page header.

    int cupsRasterInterpretPPD(cups_page_header2_t *h, ppd_file_t *ppd, int num_options, cups_option_t *options, cups_interpret_cb_t func);

    Parameters

    h Page header to create
    ppd PPD file
    num_options Number of options
    options Options
    func Optional page header callback (NULL for none)

    Return Value

    0 on success, -1 on failure

    Discussion

    This function is used by raster image processing (RIP) filters like cgpdftoraster and imagetoraster when writing CUPS raster data for a page. It is not used by raster printer driver filters which only read CUPS raster data.

    cupsRasterInterpretPPD does not mark the options in the PPD using the "num_options" and "options" arguments. Instead, mark the options with cupsMarkOptions and ppdMarkOption prior to calling it - this allows for per-page options without manipulating the options array.

    The "func" argument specifies an optional callback function that is called prior to the computation of the final raster data. The function can make changes to the cups_page_header2_t data as needed to use a supported raster format and then returns 0 on success and -1 if the requested attributes cannot be supported.

    cupsRasterInterpretPPD supports a subset of the PostScript language. Currently only the [, ], <<, >>, {, }, cleartomark, copy, dup, index, pop, roll, setpagedevice, and stopped operators are supported.

    cupsRasterOpen

    Open a raster stream using a file descriptor.

    cups_raster_t *cupsRasterOpen(int fd, cups_mode_t mode);

    Parameters

    fd File descriptor
    mode Mode - CUPS_RASTER_READ, CUPS_RASTER_WRITE, CUPS_RASTER_WRITE_COMPRESSED, or CUPS_RASTER_WRITE_PWG

    Return Value

    New stream

    Discussion

    This function associates a raster stream with the given file descriptor. For most printer driver filters, "fd" will be 0 (stdin). For most raster image processor (RIP) filters that generate raster data, "fd" will be 1 (stdout).

    When writing raster data, the CUPS_RASTER_WRITE, CUPS_RASTER_WRITE_COMPRESS, or CUPS_RASTER_WRITE_PWG mode can be used - compressed and PWG output is generally 25-50% smaller but adds a 100-300% execution time overhead.

    cupsRasterOpenIO

    Open a raster stream using a callback function.

    cups_raster_t *cupsRasterOpenIO(cups_raster_iocb_t iocb, void *ctx, cups_mode_t mode);

    Parameters

    iocb Read/write callback
    ctx Context pointer for callback
    mode Mode - CUPS_RASTER_READ, CUPS_RASTER_WRITE, CUPS_RASTER_WRITE_COMPRESSED, or CUPS_RASTER_WRITE_PWG

    Return Value

    New stream

    Discussion

    This function associates a raster stream with the given callback function and context pointer.

    When writing raster data, the CUPS_RASTER_WRITE, CUPS_RASTER_WRITE_COMPRESS, or CUPS_RASTER_WRITE_PWG mode can be used - compressed and PWG output is generally 25-50% smaller but adds a 100-300% execution time overhead.

     DEPRECATED cupsRasterReadHeader

    Read a raster page header and store it in a version 1 page header structure.

    unsigned cupsRasterReadHeader(cups_raster_t *r, cups_page_header_t *h);

    Parameters

    r Raster stream
    h Pointer to header data

    Return Value

    1 on success, 0 on failure/end-of-file

    Discussion

    This function is deprecated. Use cupsRasterReadHeader2 instead.

    Version 1 page headers were used in CUPS 1.0 and 1.1 and contain a subset of the version 2 page header data. This function handles reading version 2 page headers and copying only the version 1 data into the provided buffer.

     CUPS 1.2/macOS 10.5 cupsRasterReadHeader2

    Read a raster page header and store it in a version 2 page header structure.

    unsigned cupsRasterReadHeader2(cups_raster_t *r, cups_page_header2_t *h);

    Parameters

    r Raster stream
    h Pointer to header data

    Return Value

    1 on success, 0 on failure/end-of-file

    cupsRasterReadPixels

    Read raster pixels.

    unsigned cupsRasterReadPixels(cups_raster_t *r, unsigned char *p, unsigned len);

    Parameters

    r Raster stream
    p Pointer to pixel buffer
    len Number of bytes to read

    Return Value

    Number of bytes read

    Discussion

    For best performance, filters should read one or more whole lines. The "cupsBytesPerLine" value from the page header can be used to allocate the line buffer and as the number of bytes to read.

     DEPRECATED cupsRasterWriteHeader

    Write a raster page header from a version 1 page header structure.

    unsigned cupsRasterWriteHeader(cups_raster_t *r, cups_page_header_t *h);

    Parameters

    r Raster stream
    h Raster page header

    Return Value

    1 on success, 0 on failure

    Discussion

    This function is deprecated. Use cupsRasterWriteHeader2 instead.

     CUPS 1.2/macOS 10.5 cupsRasterWriteHeader2

    Write a raster page header from a version 2 page header structure.

    unsigned cupsRasterWriteHeader2(cups_raster_t *r, cups_page_header2_t *h);

    Parameters

    r Raster stream
    h Raster page header

    Return Value

    1 on success, 0 on failure

    Discussion

    The page header can be initialized using cupsRasterInitPWGHeader.

    cupsRasterWritePixels

    Write raster pixels.

    unsigned cupsRasterWritePixels(cups_raster_t *r, unsigned char *p, unsigned len);

    Parameters

    r Raster stream
    p Bytes to write
    len Number of bytes to write

    Return Value

    Number of bytes written

    Discussion

    For best performance, filters should write one or more whole lines. The "cupsBytesPerLine" value from the page header can be used to allocate the line buffer and as the number of bytes to write.

    Data Types

    cups_adv_t

    AdvanceMedia attribute values

    typedef enum cups_adv_e cups_adv_t;

    cups_bool_t

    Boolean type

    typedef enum cups_bool_e cups_bool_t;

    cups_cspace_t

    cupsColorSpace attribute values

    typedef enum cups_cspace_e cups_cspace_t;

    cups_cut_t

    CutMedia attribute values

    typedef enum cups_cut_e cups_cut_t;

    cups_edge_t

    LeadingEdge attribute values

    typedef enum cups_edge_e cups_edge_t;

    cups_interpret_cb_t

    cupsRasterInterpretPPD callback function

    typedef int (*cups_interpret_cb_t)(cups_page_header2_t *header, int preferred_bits);

    cups_jog_t

    Jog attribute values

    typedef enum cups_jog_e cups_jog_t;

    cups_mode_t

    cupsRasterOpen modes

    typedef enum cups_mode_e cups_mode_t;

    cups_order_t

    cupsColorOrder attribute values

    typedef enum cups_order_e cups_order_t;

    cups_orient_t

    Orientation attribute values

    typedef enum cups_orient_e cups_orient_t;

     CUPS 1.2/macOS 10.5 cups_page_header2_t

    Version 2 page header

    typedef struct cups_page_header2_s cups_page_header2_t;

     DEPRECATED cups_page_header_t

    Version 1 page header

    typedef struct cups_page_header_s cups_page_header_t;

    cups_raster_iocb_t

    cupsRasterOpenIO callback function

    typedef ssize_t (*cups_raster_iocb_t)(void *ctx, unsigned char *buffer, size_t length);

    cups_raster_t

    Raster stream data

    typedef struct _cups_raster_s cups_raster_t;

    Structures

     CUPS 1.2/macOS 10.5 cups_page_header2_s

    Version 2 page header

    struct cups_page_header2_s {
        unsigned AdvanceDistance;
        cups_adv_t AdvanceMedia;
        cups_bool_t Collate;
        cups_cut_t CutMedia;
        cups_bool_t Duplex;
        unsigned HWResolution[2];
        unsigned ImagingBoundingBox[4];
        cups_bool_t InsertSheet;
        cups_jog_t Jog;
        cups_edge_t LeadingEdge;
        cups_bool_t ManualFeed;
        unsigned Margins[2];
        char MediaClass[64];
        char MediaColor[64];
        unsigned MediaPosition;
        char MediaType[64];
        unsigned MediaWeight;
        cups_bool_t MirrorPrint;
        cups_bool_t NegativePrint;
        unsigned NumCopies;
        cups_orient_t Orientation;
        cups_bool_t OutputFaceUp;
        char OutputType[64];
        unsigned PageSize[2];
        cups_bool_t Separations;
        cups_bool_t TraySwitch;
        cups_bool_t Tumble;
        unsigned cupsBitsPerColor;
        unsigned cupsBitsPerPixel;
        float cupsBorderlessScalingFactor;
        unsigned cupsBytesPerLine;
        cups_order_t cupsColorOrder;
        cups_cspace_t cupsColorSpace;
        unsigned cupsCompression;
        unsigned cupsHeight;
        float cupsImagingBBox[4];
        unsigned cupsInteger[16];
        char cupsMarkerType[64];
        unsigned cupsMediaType;
        unsigned cupsNumColors;
        char cupsPageSizeName[64];
        float cupsPageSize[2];
        float cupsReal[16];
        char cupsRenderingIntent[64];
        unsigned cupsRowCount;
        unsigned cupsRowFeed;
        unsigned cupsRowStep;
        char cupsString[16][64];
        unsigned cupsWidth;
    };

    Members

    AdvanceDistance AdvanceDistance value in points
    AdvanceMedia AdvanceMedia value (cups_adv_t)
    Collate Collated copies value
    CutMedia CutMedia value (cups_cut_t)
    Duplex Duplexed (double-sided) value
    HWResolution[2] Resolution in dots-per-inch
    ImagingBoundingBox[4] Pixel region that is painted (points, left, bottom, right, top)
    InsertSheet InsertSheet value
    Jog Jog value (cups_jog_t)
    LeadingEdge LeadingEdge value (cups_edge_t)
    ManualFeed ManualFeed value
    Margins[2] Lower-lefthand margins in points
    MediaClass[64] MediaClass string
    MediaColor[64] MediaColor string
    MediaPosition MediaPosition value
    MediaType[64] MediaType string
    MediaWeight MediaWeight value in grams/m^2
    MirrorPrint MirrorPrint value
    NegativePrint NegativePrint value
    NumCopies Number of copies to produce
    Orientation Orientation value (cups_orient_t)
    OutputFaceUp OutputFaceUp value
    OutputType[64] OutputType string
    PageSize[2] Width and length of page in points
    Separations Separations value
    TraySwitch TraySwitch value
    Tumble Tumble value
    cupsBitsPerColor Number of bits for each color
    cupsBitsPerPixel Number of bits for each pixel
    cupsBorderlessScalingFactor  CUPS 1.2/macOS 10.5  Scaling that was applied to page data
    cupsBytesPerLine Number of bytes per line
    cupsColorOrder Order of colors
    cupsColorSpace True colorspace
    cupsCompression Device compression to use
    cupsHeight Height of page image in pixels
    cupsImagingBBox[4]  CUPS 1.2/macOS 10.5  Floating point ImagingBoundingBox (scaling factor not applied, left, bottom, right, top)
    cupsInteger[16]  CUPS 1.2/macOS 10.5  User-defined integer values
    cupsMarkerType[64]  CUPS 1.2/macOS 10.5  Ink/toner type
    cupsMediaType Media type code
    cupsNumColors  CUPS 1.2/macOS 10.5  Number of color compoents
    cupsPageSizeName[64]  CUPS 1.2/macOS 10.5  PageSize name
    cupsPageSize[2]  CUPS 1.2/macOS 10.5  Floating point PageSize (scaling * factor not applied)
    cupsReal[16]  CUPS 1.2/macOS 10.5  User-defined floating-point values
    cupsRenderingIntent[64]  CUPS 1.2/macOS 10.5  Color rendering intent
    cupsRowCount Rows per band
    cupsRowFeed Feed between bands
    cupsRowStep Spacing between lines
    cupsString[16][64]  CUPS 1.2/macOS 10.5  User-defined string values
    cupsWidth Width of page image in pixels

     DEPRECATED cups_page_header_s

    Version 1 page header

    struct cups_page_header_s {
        unsigned AdvanceDistance;
        cups_adv_t AdvanceMedia;
        cups_bool_t Collate;
        cups_cut_t CutMedia;
        cups_bool_t Duplex;
        unsigned HWResolution[2];
        unsigned ImagingBoundingBox[4];
        cups_bool_t InsertSheet;
        cups_jog_t Jog;
        cups_edge_t LeadingEdge;
        cups_bool_t ManualFeed;
        unsigned Margins[2];
        char MediaClass[64];
        char MediaColor[64];
        unsigned MediaPosition;
        char MediaType[64];
        unsigned MediaWeight;
        cups_bool_t MirrorPrint;
        cups_bool_t NegativePrint;
        unsigned NumCopies;
        cups_orient_t Orientation;
        cups_bool_t OutputFaceUp;
        char OutputType[64];
        unsigned PageSize[2];
        cups_bool_t Separations;
        cups_bool_t TraySwitch;
        cups_bool_t Tumble;
        unsigned cupsBitsPerColor;
        unsigned cupsBitsPerPixel;
        unsigned cupsBytesPerLine;
        cups_order_t cupsColorOrder;
        cups_cspace_t cupsColorSpace;
        unsigned cupsCompression;
        unsigned cupsHeight;
        unsigned cupsMediaType;
        unsigned cupsRowCount;
        unsigned cupsRowFeed;
        unsigned cupsRowStep;
        unsigned cupsWidth;
    };

    Members

    AdvanceDistance AdvanceDistance value in points
    AdvanceMedia AdvanceMedia value (cups_adv_t)
    Collate Collated copies value
    CutMedia CutMedia value (cups_cut_t)
    Duplex Duplexed (double-sided) value
    HWResolution[2] Resolution in dots-per-inch
    ImagingBoundingBox[4] Pixel region that is painted (points, left, bottom, right, top)
    InsertSheet InsertSheet value
    Jog Jog value (cups_jog_t)
    LeadingEdge LeadingEdge value (cups_edge_t)
    ManualFeed ManualFeed value
    Margins[2] Lower-lefthand margins in points
    MediaClass[64] MediaClass string
    MediaColor[64] MediaColor string
    MediaPosition MediaPosition value
    MediaType[64] MediaType string
    MediaWeight MediaWeight value in grams/m^2
    MirrorPrint MirrorPrint value
    NegativePrint NegativePrint value
    NumCopies Number of copies to produce
    Orientation Orientation value (cups_orient_t)
    OutputFaceUp OutputFaceUp value
    OutputType[64] OutputType string
    PageSize[2] Width and length of page in points
    Separations Separations value
    TraySwitch TraySwitch value
    Tumble Tumble value
    cupsBitsPerColor Number of bits for each color
    cupsBitsPerPixel Number of bits for each pixel
    cupsBytesPerLine Number of bytes per line
    cupsColorOrder Order of colors
    cupsColorSpace True colorspace
    cupsCompression Device compression to use
    cupsHeight Height of page image in pixels
    cupsMediaType Media type code
    cupsRowCount Rows per band
    cupsRowFeed Feed between bands
    cupsRowStep Spacing between lines
    cupsWidth Width of page image in pixels

    Constants

    cups_adv_e

    AdvanceMedia attribute values

    Constants

    CUPS_ADVANCE_FILE Advance the roll after this file
    CUPS_ADVANCE_JOB Advance the roll after this job
    CUPS_ADVANCE_NONE Never advance the roll
    CUPS_ADVANCE_PAGE Advance the roll after this page
    CUPS_ADVANCE_SET Advance the roll after this set

    cups_bool_e

    Boolean type

    Constants

    CUPS_FALSE Logical false
    CUPS_TRUE Logical true

    cups_cspace_e

    cupsColorSpace attribute values

    Constants

    CUPS_CSPACE_ADOBERGB  CUPS 1.4.5  Red, green, blue (Adobe RGB)
    CUPS_CSPACE_CIELab  CUPS 1.1.19/macOS 10.3  CIE Lab
    CUPS_CSPACE_CIEXYZ  CUPS 1.1.19/macOS 10.3  CIE XYZ
    CUPS_CSPACE_CMY Cyan, magenta, yellow (DeviceCMY)
    CUPS_CSPACE_CMYK Cyan, magenta, yellow, black (DeviceCMYK)
    CUPS_CSPACE_DEVICE1  CUPS 1.4.5  DeviceN, 1 color
    CUPS_CSPACE_DEVICE2  CUPS 1.4.5  DeviceN, 2 colors
    CUPS_CSPACE_DEVICE3  CUPS 1.4.5  DeviceN, 3 colors
    CUPS_CSPACE_DEVICE4  CUPS 1.4.5  DeviceN, 4 colors
    CUPS_CSPACE_DEVICE5  CUPS 1.4.5  DeviceN, 5 colors
    CUPS_CSPACE_DEVICE6  CUPS 1.4.5  DeviceN, 6 colors
    CUPS_CSPACE_DEVICE7  CUPS 1.4.5  DeviceN, 7 colors
    CUPS_CSPACE_DEVICE8  CUPS 1.4.5  DeviceN, 8 colors
    CUPS_CSPACE_DEVICE9  CUPS 1.4.5  DeviceN, 9 colors
    CUPS_CSPACE_DEVICEA  CUPS 1.4.5  DeviceN, 10 colors
    CUPS_CSPACE_DEVICEB  CUPS 1.4.5  DeviceN, 11 colors
    CUPS_CSPACE_DEVICEC  CUPS 1.4.5  DeviceN, 12 colors
    CUPS_CSPACE_DEVICED  CUPS 1.4.5  DeviceN, 13 colors
    CUPS_CSPACE_DEVICEE  CUPS 1.4.5  DeviceN, 14 colors
    CUPS_CSPACE_DEVICEF  CUPS 1.4.5  DeviceN, 15 colors
    CUPS_CSPACE_GMCK  DEPRECATED  Gold, magenta, yellow, black
    CUPS_CSPACE_GMCS  DEPRECATED  Gold, magenta, yellow, silver
    CUPS_CSPACE_GOLD  DEPRECATED  Gold foil
    CUPS_CSPACE_ICC1  CUPS 1.1.19/macOS 10.3  ICC-based, 1 color
    CUPS_CSPACE_ICC2  CUPS 1.1.19/macOS 10.3  ICC-based, 2 colors
    CUPS_CSPACE_ICC3  CUPS 1.1.19/macOS 10.3  ICC-based, 3 colors
    CUPS_CSPACE_ICC4  CUPS 1.1.19/macOS 10.3  ICC-based, 4 colors
    CUPS_CSPACE_ICC5  CUPS 1.1.19/macOS 10.3  ICC-based, 5 colors
    CUPS_CSPACE_ICC6  CUPS 1.1.19/macOS 10.3  ICC-based, 6 colors
    CUPS_CSPACE_ICC7  CUPS 1.1.19/macOS 10.3  ICC-based, 7 colors
    CUPS_CSPACE_ICC8  CUPS 1.1.19/macOS 10.3  ICC-based, 8 colors
    CUPS_CSPACE_ICC9  CUPS 1.1.19/macOS 10.3  ICC-based, 9 colors
    CUPS_CSPACE_ICCA  CUPS 1.1.19/macOS 10.3  ICC-based, 10 colors
    CUPS_CSPACE_ICCB  CUPS 1.1.19/macOS 10.3  ICC-based, 11 colors
    CUPS_CSPACE_ICCC  CUPS 1.1.19/macOS 10.3  ICC-based, 12 colors
    CUPS_CSPACE_ICCD  CUPS 1.1.19/macOS 10.3  ICC-based, 13 colors
    CUPS_CSPACE_ICCE  CUPS 1.1.19/macOS 10.3  ICC-based, 14 colors
    CUPS_CSPACE_ICCF  CUPS 1.1.19/macOS 10.3  ICC-based, 15 colors
    CUPS_CSPACE_K Black (DeviceK)
    CUPS_CSPACE_KCMY  DEPRECATED  Black, cyan, magenta, yellow
    CUPS_CSPACE_KCMYcm  DEPRECATED  Black, cyan, magenta, yellow, light-cyan, light-magenta
    CUPS_CSPACE_RGB Red, green, blue (DeviceRGB, sRGB by default)
    CUPS_CSPACE_RGBA Red, green, blue, alpha (DeviceRGB, sRGB by default)
    CUPS_CSPACE_RGBW  CUPS 1.2/macOS 10.5  Red, green, blue, white (DeviceRGB, sRGB by default)
    CUPS_CSPACE_SILVER  DEPRECATED  Silver foil
    CUPS_CSPACE_SRGB  CUPS 1.4.5  Red, green, blue (sRGB)
    CUPS_CSPACE_SW  CUPS 1.4.5  Luminance (gamma 2.2)
    CUPS_CSPACE_W Luminance (DeviceGray, gamma 2.2 by default)
    CUPS_CSPACE_WHITE  DEPRECATED  White ink (as black)
    CUPS_CSPACE_YMC  DEPRECATED  Yellow, magenta, cyan
    CUPS_CSPACE_YMCK  DEPRECATED  Yellow, magenta, cyan, black

    cups_cut_e

    CutMedia attribute values

    Constants

    CUPS_CUT_FILE Cut the roll after this file
    CUPS_CUT_JOB Cut the roll after this job
    CUPS_CUT_NONE Never cut the roll
    CUPS_CUT_PAGE Cut the roll after this page
    CUPS_CUT_SET Cut the roll after this set

    cups_edge_e

    LeadingEdge attribute values

    Constants

    CUPS_EDGE_BOTTOM Leading edge is the bottom of the page
    CUPS_EDGE_LEFT Leading edge is the left of the page
    CUPS_EDGE_RIGHT Leading edge is the right of the page
    CUPS_EDGE_TOP Leading edge is the top of the page

    cups_jog_e

    Jog attribute values

    Constants

    CUPS_JOG_FILE Move pages after this file
    CUPS_JOG_JOB Move pages after this job
    CUPS_JOG_NONE Never move pages
    CUPS_JOG_SET Move pages after this set

    cups_mode_e

    cupsRasterOpen modes

    Constants

    CUPS_RASTER_READ Open stream for reading
    CUPS_RASTER_WRITE Open stream for writing
    CUPS_RASTER_WRITE_COMPRESSED  CUPS 1.3/macOS 10.5  Open stream for compressed writing
    CUPS_RASTER_WRITE_PWG  CUPS 1.5/macOS 10.7  Open stream for compressed writing in PWG Raster mode

    cups_order_e

    cupsColorOrder attribute values

    Constants

    CUPS_ORDER_BANDED CCC MMM YYY KKK ...
    CUPS_ORDER_CHUNKED CMYK CMYK CMYK ...
    CUPS_ORDER_PLANAR CCC ... MMM ... YYY ... KKK ...

    cups_orient_e

    Orientation attribute values

    Constants

    CUPS_ORIENT_0 Don't rotate the page
    CUPS_ORIENT_180 Turn the page upside down
    CUPS_ORIENT_270 Rotate the page clockwise
    CUPS_ORIENT_90 Rotate the page counter-clockwise
    cups-2.2.7/doc/help/cgi.html000664 000765 000024 00000005120 13255074424 016276 0ustar00msweetstaff000000 000000 Using CGI Programs

    Using CGI Programs

    CUPS provides a dynamic web interface through dedicated CGI programs that are executed when users open special directories on the CUPS server. Each CGI performs administration, class, help, job, and printer functions as directed by the user, but the actual programs that are run and functions that are available are limited to those that were originally designed into the scheduler.

    CUPS also supports CGI programs and specific scripting languages (Java, Perl, PHP, and Python) for pages you want to provide. The interpreters for these languages are currently configured at compile time and are associated with MIME media types. Table 1 shows the MIME media types that are reserved for each type of page and are the same as those used by the Apache web server.

    Table 1: CGI MIME Media Types
    MIME Media Type Description
    application/x-httpd-cgi CGI script/program
    application/x-httpd-java Java program
    application/x-httpd-perl Perl script
    application/x-httpd-php PHP script
    application/x-httpd-python Python script

    Configuring the Server

    In order to enable the corresponding type, you must create a new /etc/cups/cgi.types file which maps the filename extensions to the appropriate MIME types, for example:

    application/x-httpd-cgi cgi
    application/x-httpd-java class
    application/x-httpd-perl pl
    application/x-httpd-php php
    application/x-httpd-python py
    

    CGI scripts/programs (application/x-httpd-cgi) also must be owned by root, have execution permissions, and not have world or group write permissions to be treated as a CGI script or program.

    Limitations

    CUPS implements most of the CGI/1.1 specification, with the following exceptions:

    • No PATH_INFO or PATH_TRANSLATED support
    • Limited HTTP field support; only the Content-Length (CONTENT_LENGTH), Content-Type (CONTENT_TYPE), Cookie (HTTP_COOKIE), Referrer (HTTP_REFERRER), and User-Agent (HTTP_USER_AGENT) fields are placed in environment variables at this time
    cups-2.2.7/doc/help/cupspm.epub000664 000765 000024 00000655073 13255074424 017054 0ustar00msweetstaff000000 000000 PK@NvLoa«,mimetypeapplication/epub+zipPK @NvL META-INF/PK@NvL²ç”w«üMETA-INF/container.xmlUŽA Â0E÷=E˜­´Ñ„¶‚àZÁŒé´әФ¢··)uùùoæýòðê½zÒp»b ŠØJ㸫`Lm¾‡C•V8¡cÔÄsœª`tÑ0öM²Fq#v쉓™1³œÁ¿£Î”*‘Ô:Oñ›VYµ£÷yÀt¯à|:^®: }`G…„TOÃ<½U€!xg1MµÐ-Äü‡n&?èY£WžR/‹êìPK @NvLOEBPS/PK@NvL;#ù’°ÁTOEBPS/body.xhtmlì½k{ÛÖ•(ü¿ãyfJ¥¤d)NÚ:±ÏCK”ÃV–4"•¤ÓÓW’[b`P²:OÏo×e_q!Š”å„='cÀ¾¯½î—ïÿϧéÄ»qDá›û»/_x"Eã ¼yóbž^·ÿøâÿ¼m|ÿoGg‡ƒ¿žw½Ût:ßøMÃäÍ‹Û4½ÞÛ»¿¿ß½ÿz7Šoööÿô§?í}Âo^àG¯'>ö&žþ ûl·½~÷pÐ;;}íÇÑMìO§0®×n¿mxÞ÷·Âãðg¤ñöðò¼ï|øÁçþäû=~ÍŸNEê{¡?o^|÷Qq§k}ÿGþ|w4ñ¹š´Þ žûÁì“÷ø¿Â$õ¹3ø9É(f)€=u`oÙKµe»ã Í“„?‚ß"œOEìëVˇ½ž‡£ªŸç”º˜Šé.(Ïním4æ¿g> )‘êw±HçqxçOæ‚$i<¥gŠ·{,®+~=«ïÁþp“r1ü÷ ü÷-õ4óoD{¸õc;“` 'íßEÁ;N¢ÑÇÌ£TXƒ:@ªöp}j'·þ8ºí} ÓÀÿ¾ÿ⛡ß|Ù¢ÿ·ûÍŽÎͤÏbr,ZÞ$Ìvå¿1ü‚رÀ·ÙûEƒïü¡¥þ{¹»¿cß6ZÂöPŒõJÌ9Â(™ù#ñ{þĨàöav+¾#j‡m?i»àÕÂ5.XRîþg6Äýè€w¿ó_O‚ðcËó_ßI€‹Ä/‘”´Çbñ•zí…Q(ðsXh¸„×Qn#5*Z„¦FÑ$‚W÷·0Òw¨C=AªöÚ RŒJ‰ õÒ¦­Ç ÞÇþ §TCÏ’h]fÎ|+Ÿ´'â:mÇþ8˜'¯5”Yç>¸žD>Ì‚^:°Šðü-ïª<–+éG2:¸s$r¹m¼æj£Jª‡  Kä“9‡ðÚú­û…$=ŒEíïà«¢IËçÙi»:àîRD%»¸"{£áÈ'þ,¥©¿èì‚qzkè‹Õ4_‡ém{tLÆMq'Šwöï¡ÛÏ­=‹˜AŸárùUÖçúÄAôÇ]€Î›Ð‚àÖÒ`äOÔ ØëìâÆîE”=ê!²]ãþ.èùv—xgÆßúÇÜ/¯"^“ZŸÿýïo¿ß#@%æ~Oq÷ß#'ÒÀìí÷ÁôÆKâòÆ0ßÝòètÎ ˜À9#ÓúýÞì-ñ­À‘\+NâE¹pp»/YÝÙÛ _Ž©Wb½MGÀç¨yáº^ÈdžÆéÏ'ÂO„÷½ïÝÆâš¥¨Ĩ› ½áþL÷|uo4Ÿ%{A’Ì0æ×̃x@¥ßÓÇßïùoáD¯Gw€ñ½k!Æîø Ï¨Ï¸›0å‰~¿—›ÎíÁ[˜H0~ó"Ó8ω³yñ¶gýÂQ`7Ì–áŽË1Hxÿ‰}~‡æ¿àòc?~ÀÉ*þHÿÂwãàúZÄ0!ä62ºö¨3?ÃÃŃqEŠ&„§ '›F€¼fïü|† ð“d×,Wñh‰çÇÂóG#‘$@¡àDƒp4™ã¢ }xëíN¸ÚòÝÛÿ¼I¿û~Þx­’ÄàŒas‡>vI[-NœçÓç?vZH€F·ž?™D÷ €M@豉Çw•潃[°0®  Þß#À‹½&Ž™ŒnÅx>qKoKËéh—ßÀd|"¸ÍpR0+À†Sï—hð’pZœÞîzæ0©àúAÎUŽûoîå.œÝ<ÁuûÞ,¢É¨Cfþ?€}eÎu«MG¸¿Jå>óqò Üß«ƒó«£îqçòd ÎBñûÞÈÎ@Àx°ÿ÷À9Ó²áŽJo“uŠ·_+¸¿™ÃJ“ÁKö^ÿ-aþk}è?á0÷q@G›D×é=Vzë§8Å·àµw>‘L‚·GÐljîq’7!*†ÓV 7vìuÎ{Iëû=ø>Û0“?øhexÜÀæŽ (6 ãðÄÕ—^2ŸÍàäߣà:"ññ¤œ ÀÄÔOFÎ#˜ÖÂ5°05©L¬ÏÏ\rûï÷ô6˜Û  æG ì|‚`{ÓCàAŸD3üyGSÚï’Úõʰ)¡N¹ †³›ÈŸà˜0ÝAøÌ³.>Ç-eùò–0ú ñŽýx,{dÈÇÙà\½€XuåeÛhìÎÛÞGmäÎ qt^yS1|yÿR‰ðạ’Hb zwëß e¦ÐKò¤bŠ0þ效­{‰k¡à©Hµ¥pè×ìm?VÆ'›P[ÀrÜi{›º‡¾zOàžòÅc’_ÀNFC8F’ð]:O<ä¨qB8ÚSœq¶e…"Fðƒ×4¸Ó¹5 wd0c@´j 2u"\@@TWˆà‹iÒFtÒFF(g[ÝÇoøÒ»D\“ Y=’/sX¢ã}/¦o ®ý~~#¨ùzSáJ1\ÀfÍåMD5`P2ðÔ‘îþ9ê.ßÇΦ "5ÝDöãÒ#Cõ|›HDÍx Ô…JIªÈ#ÌDMĬY¯ˆ.EóÏçÝ÷páhZÞùÑ1=Ud(™ÄÃâ‰jÐ…Cêòlf¶Hž!Ì&ôä#&JõM†F@³æH2ÓÒ­!ü¿K=}Àßzf·Àçþ‚^'¼+Ü`º|z4ƒá<fe¡ÜÖˆ º@øt)w 8Ô$-2òY0AÙgÆÌjÒÆY!ØÁ€Ân´ýY­úR±µ €Ì`ÐP5  9ð¨—Lxá8¤’§>x‡-ïð÷¿oáîœ »zr^Œ#¥V Ž@OÜóoà&“„$¬!îø YÀU`…’îÓ%5¸ ï ¶œËp(Ù?ð:BTLŸ É»%·€›ñ?æ6fo€ ï«ÙzMü  ­wðŠŠ•Îï.ˆ£n†ƒì2º="ÏÄPäßE!¶ù'‹ží}Ë\Ë¿3c \0“I:"f$΋ —Ùhà}' ¼Âš¨±ñ¾BRr5öS óP’Åë‰ôÛÒ§W©÷þ»Ó@1,¸öšø«½Ò‡#±Cs¤Þ¯%Eúdï?’ÿò–§› ÑÀú©{@RLÁ=ÍÓ¤é4÷ð†•”^Õ_ÿâ%MPh1<=œu7œO3&MbðŽºýÁÕñIç}ÿêôì´ÛB‰þeË;½<9iy/éÿ›}áçîh/i4ɉÄZ¦y•¿rH¥ÛŸðSûzíþŸÊ«ôJH/ä°ã·RD§âÞ b¸›xuvwwù™fKðå1€*?Ø›{MB€½þ½ãÁï?ýþä€1n"&ˆìTS˜Þ”X-5Ð 0¤æ× Š&ü ˜Fd²ñ®ú£³>ɪŠêÏxrdßÙõáùG¹‚OƒãeLåÉdD8ŽÙjÚ¢â“OWƒæ:ˆ“Ôð·åË=óõ<Æð³i?ð]´Ã;Ž´Gسp.m/´_Áé×|ß’I¤ƒ}¾›kÿÎoAPKø7*‚f¼öO3üGµMþhš¼ƒ«?˜ß(öHÔÇ$º²wã÷ô¦EÛ/÷ð¥% ‡IˆMcÒf "ÆÑpN[/Œ1Œìa7Ž•ÔdïÎ1Ìy‚Ü›»ô!^ÇÝ‘’£3KtxѡϬ2ôPºBˆRšÂv»í.}Ïá"(_À™!ד9mŠXv=oF£Üå|x˜»šÇê¢ø¦´Qbk)à‘lÉö°&/?¡å˜ `þçùòkÿ.©Ö<>[ùM ÅWÀ| 1êÀŒ‡´©CKä¤l’¤z1zß‚´ŠÀxíH¤ÿ!ž€e;¯Ý øùvw”}’üOcwß¡F&|<”ÕÖØŠ?j°±ÁìÅÛŸøo¸Åˆ'9-Ö‘£a-\ âŸb”¿”4ǰs˜–%`š¤êõ¡jZ±+ˆä;';¶Ú"f\wÈìx꜂¤çꌢDMŠø> BÕrGñoµ‡-OÑlõVý–_´lÇŠëßKDмYBÚ(àõ$)±ÅÉJŵ?Ÿ¤úxHÐUƒàäéµ™ˆB«J¾ÀßC?¹Îü`ÿ¢Q@*)B‡k®9Ÿ^ÉžÔa‡üÒ}±ãàà ÁÕFDðàà"¦‡®/›Ïà="HSÍñøãiB1º…àúŠ…Ÿ  ¶<¤s’DJ¼ðœ ,ͨÒ~ÈâC…žGó˜Ô¡²ÃBÁá: ¶º­™Ñ Èó{¯£™Õ¸ÿºh®LeÝÆaÔ°4]‹F=H#Ãõe9Ybvò__V'-êÉúÝÒÑ+æfZŸ|,nD—j4„oFÖ—a¬w–aG¡Á ¾!ÙW)Èà.Ún µZ7õö˜ÎÅf†ï-¢äf¸? &Á¼ß§`:ájÍC¢»i |ÀbÌVkù:kÞ€í¦Áȵ´ gÝ&õUì³<èhzdO…˜15d— rßÛŽWb‚Üí½¢‰¼§¬ùÊ<.Y!{n¤Bf]H³ºœ£pq- Ð}…æÏö?EñÌà-¬ ¸Ô ÙkF>%f¨HH"BC0V’hhózZµÌ“C¡CM $,Tv(ÎÌb&óH A4»@¶K ƒÎq2VZÒEZ@î…èÀu¤yÔlPK|¡…!÷6ù3é\¼ïw|´×Ýëìïu^ÖêðÇÎE¯óO´k°p5.3šæ»vì¬Ë5\ÀRúF@ ²ÿÄ6’c‹gÊ¢rMžUEB€ò>Åù6¿ryòœ¦;ËÃgþ—‘–|×’WÎðã"ÉkF¯<#,pB¦ÉÙƒ€xYzÊyú3‰”æÁ×¼’c󒬸M;zïË-µ="Š…ä"H”E“ŽœbžÛðš0“¦²D[—ó–ˆòáì€Lià?¶9ÚL0‚ ®Õ'Ò¼-ê”áP‰1¸Aã¦ï?°ÂMË1Hï”)«LÙèù¬£À båz¥yu/.,Ò4SÄ1Šþ#Òå€(“ p,¹þDòstnÈ5#D¹F'~’vñ{KDØÓ¼‡óE?En0+’'e÷º‚ÑH’[¥G`½}e8¹°Ä™‡µÓ(•òdZ8IZ“à#º µæu:Ÿ¤éOAMô†%¨¿²«…nGa’ùLIFüA ÙMÆÇs–HEj¹À·-kåS ]T¼'ʬˆòámˆö£bÖåDZŸSç,ĬÏc3ªzæSBMÉwDOÿåM®4–¹’VÂ<”è³é¾_d/l,DŠÚtȪ]bæ¼’ëŠÆDüÜÛûŠ:ýÊ» »è\]¶0ãíîîòg{ úWO‘m‡j¼7 {zÜ%ž@s™i²””ŒTú=­ºé¶¢;dýü—±€ºËïŒÇ.ú޳rtCÕënÕ\ÄÒ%i¢¸¹çæ Š6 z¤2ð©ÿöÞxÿëI#¯÷/²æ"ôý[]ó0M¯x+hš^3Ãm˜»³hv0ì9rÐ`ÂÖº$(Ë–¼ñY¨À CR7ªFÞ5G­¶ À}—÷ö;nú•„Ú ùÌ6ŠóÓÌñ’Ò‹,¯aA*ÏHwj¦"Ñ‘;Ó,5Âkõ5©þm•uÛ2¼xûŽ,–ÆÚë™× ”×5ìž ·rø¸…–åQÍv _¹Á¹A É[J`GÇã@ám%Q¦Û"91&ˆ®Í#«1BÔ—Hg.$%dŸÀ†¨ æ‰{¤z’%kù0f•N ÎJ¨)áç̇‘Ás4D§Ê@}êøqi˨5‹×R»ˆÁ(ÊÉ„ÿÅý TŽÊŒÎu_#Ô·J¿‚qeÏâ&JÑn$•–Í¿ˆ7Jv2Lž«æÄÛ ½Oý°ŠieÑбƒùë¬}ϸ‡pjp¼çܹô†X8|Òf?4ä Ÿš ÿ p§Ö\Ùátc/÷Òg[údø@œdÛÍx÷A"–Í…µK5ç0ä+EMYÊ¡ñH\>.3š‡QÔ©âvT3ý«¯%íb‘N‡;IðY®®?<;ïu/À¡Š¤¡9ÎQòå(ŽOÜ„ç£/gõ{Ü;íõè¾wý \^Jéß•ŽY)d‡f]£?Ý-n‡ M²¦ãË$‰ ‰+5¡ºd“¥( 2ˆÒ_Ø6/4; µ¯S¼5CDF3…µðTZÂ¥«Œaåµ—íþê럿ÑN–¹—¯~þ¶üå7?ÿ¡üåÞYþ¶óõ‚w¯¼[0×΂©vO\4x}tRþú¤û¾³ðõ` -×ïÏ8œ]-è yÞ½xgí‰ëÓÁ :ïNÎzGÆånÐ\õÏ./»yع'+˜ §ædò@í· >" Œ[ÒóUçrpVì‚â|ö¡sz©÷nÙ¤1U[1¸+ÍOú‘ÃØóo•|PÑ=9ÓS*ûì¤ó®{Ò_öÁÈÝÎÑ’ Xª|sõþä¬ßÿk¥O?tƒeË8?éôNC ~6¸èœöÏ;ÝÓÿ.=ÖÓËïºW—çË𻊥D@6žŸø#vš£Àb…õÆ üºÎ.zÝÓAóóŠî†*ê:?´Q_„¬î¯ÎÏ.`;zƒâ{`yÒ9=êvλK·ŒÜ'ØÑèêÃÙQñÖïÒ?Õ'¡tDj.èÌq`ÚiQ6˜îŽXÜêÃÙéÙágº¦)J©Œ!6µ®ÙβEÿ`ŠÞà¯Å§FÑÕ¨ùøÇÜŸ©öàxí•õvutÑ9Á¾ûÙéÙÅ ÉxÕéOè½ÿaé9ö{GEl:<°“ ŒË˜èa”Þk ©û«³Ó.ýUˆTø“ÁOgüIZ³kÌ~^²Žº£g›$ˆ;ÍqA’wGÎ ÐË…åàÿLkö´@"½~³Ä™ÒâJ}Ê¢>“¬ —C¶‡Z abLCµåPò•óscþP"§rÀ0+³,/¾wÜ åº_Ã0›]é^IKàNmMâθ¦¼S&Å,Ó~É{ãnMoÎûäøj×èˆÑR\º‘U…,W´P2µ7^NÝ’ÓcTQu)uFÑŽ\"æûöØÈ¾pÃñ1HF!K·‰,tè-4¦ýbpY}>Ù ‘±}JŒ[Äð78¯÷"=Ä_M3%¶S· åÕ³5b¾Ì8ÂÙÍ€,ÐßËï¼€B×yüõûßD–{ÞŒM`9Ï¢ÇB¡5x³C&céRQ<#Ò3k,¡gU*´ó 3¶9{E¶5T¢f¶j5\RÜtó$å”RËÕÉÖ…*í¥ÎÉAþP@µfª°s°ñ @Œæ†Ðµ`謹-û·qãvÍë»ÅáüJÅ&Õ€9¥Ú‘T–«Ñ¤û"fˆHçsuŠ^Û1ÜÛ í@GòÓ“ø!(µ§ÑÎf&V2©ÅJZ÷ž#·GN,§åâGm•I®³§Íd§*ÉÍS܂ɭFn+ÓÚê„vñò™©®¤«?¹¡ÁKÑú’nzÒ]A ®ê»Ò»¥ê£¨Cº­­€.¯˜Ÿ3xȘ¼r„²ªõªÀZ•`@+â¿<9mp"µÖc'+¦ø¹;ÊmñkÏͬ"û0ÔîkµLIª—6ÎÙ]¢«úky/w\’¾_‘¤·ô¥]Ü5@‚Iówÿ7üÝò´, “e§=‰ü±È[H.ð¥×<¡·;‹L#”“-—4ÚÒcÅeKªo,þÒ´„Ñ«4LK[–œËfrwMýv¹ç¸+kO‘»Ìp$­àC’¯‰' ‘ÂJ%Ò‹ã…Qx-ÀåÐ‡ÒØIëp:¢¸9™ÍVÍV·Ûõ¬\oîâÔNÝÎÃq,ÆL!µù •å‰Q"âð4G!x˜Uý«Q¥ÎбÐè¹Í˜Ÿü>Úù#yUö‰ž\-¥t‹Ô“Ahgº« ?•„¶/%cÎ$×BÂh:«°"òµF™Ðd¼â5[µÕRó«œ(”߃•0v ¾Î ê í(7Ûp‘”DßnLBÊÎdœFÆ‹å™-“ îeW&¼¢Ê>ý‚³çN€k{6³“F¼*Iùk²ëâ&·€fýàŽ‡‰¶hsîpþŽôÏ9Û¿e†ÓWÆÛ_ñ±Ò~8ƒý7‡ˆ…L‡¢2<3@™Êð6QÛ?øãß•€MÙ¨[ÞD„7é­zÈI¯[”k»Åɼ[2Á¶ÕoºÔÚLç…,+;°zí!»Ù¶šѤDàé-ãkLó ëJ4÷÷¾yõ2¥³ ì £Û{ÏyY}(®1󈬟™yÃ,š´ 9cº"$Â(c&T$Ø‹°ëÃ…B CðüîáԤDZf—ÿ?j,úˆI®¥Øv6RéŽM‚RóûÄö -ZÓB‹üªž\ãÈYjÕb3mØ÷¾ÂwdSñÞ?Éj¬KŒòÝzÔŠ–\ê)§$unŒ}Ñ[¥7Ý䱯 ;*D.—G‡Ú®f:UºcPp¢r8‘€^ÙÝ„-™šã:½öƳ›Ú$JÐëˆf³-¸îŸKÆxwvqÔ½8éZé.h_Ö Ä38Nµî2¹dW4OJf’b*é[#¡€=D÷çÎafOÏÿ5Â0*”L4dåi_t;GÆ®×»v2>ë¼S!ÊÁ<¬äŽCyÁ×yM$ˆ"£[ó^Íãð†×êiCüi‰–9Ë{é¼pÒ)VW·ØLNfÐ,yÙ—9 ¤²ÔP"q þc5 (À#¶ÛMÕ¯íûÓâˆ9B…R;b8ÔÖ~`Ì®ød6Àæ 3Üñ;YCä?v §L—„™oÏCÞe÷eQ{†À¢2…í‘YÜú‚ ½¶æ!‹÷X §°9Æ_[‹¸úE{FL>%ïWêÞ%6¬ß€†â¥LV%+V‘%y’¯#)Ѷ€¤°*Œ¹t¿Õ ÇâÓr†‹D¯¿Uƒ¢qVfŠEi Ì.o³2‡ÃræŠs-œ©;•5•ÍŠ%¦ œÚ+ŽE2‹8¹ Äq1ÉÜü’»‹wf%»oUki #RZÅd¥¢ãË@ð†\UÅ3[ÖÐF¼2J9›ãûuÿÈTÝ ï'.§Uˆ¶ˆ]u±^®ƒb]K‘.¾\ÒCm´ÿXÄÿhÔÿ(äÑÙÿ*¹´*ƒs9–-3ÐÙ¦9eýY¢)BW2±UDYK/—²Œ2‹‚É‚¢-¡(ØâD¿®e‘­j…ÑýF äˆh*ȉ&dÒN³Š†Áß%:ˆ‘ÚqŽõ| Êk;Œ@IF„Ì~ã[²kø£å[¶ÔÚ×(œÊzèX˜(¤³ '* ’Ÿ%eéäè Ö¸‹Ê±1Uƒ`L\`2N¶ÓùmÂw·þâm_?ž‘›=*JSˆe¹´‚šÓù`c]U‰¢<ð#»« qš‡ôî! æb¿RÓ׺’qJv·Á¾ñ+˜ôU0.lbí:•+lé@ Œâ4¿Ç‘r:égq„…Š L¡yùôªØªó°ZÚbE–ÂùiÈôÉ1I*—?+†Îx\ìðT± V†æ«ëù¤¥âŠ+“D„ùȹÆ]€…»²ÚÐT¦kàC_?¶w~Žé%—ý«³¿è,Â…jˆ:?—)fT™¬5|™è¸9W„Ì,‡vaÞìW*ŒBžÎˆœÊ§¿ŒuðxýÄ<720Í‹¡Ø¤­q8çÚ´âÚtBƒƒ*±ÓöÍbNÙÜž¥+Þª© yÜä2^Áç³Ì}õ©Y/®$ÓP× –!‘–W!]MÏ{óÆsîÏNV㳦šn¯»*O¨t,v«Ëó‡ëR3ÜÜøí4$œÉÇ×Ü)ÃÁDí$~Á{˽™¸I¢gJ´)ÌWFìú©Onj®åxÀŸ°hÉ—;2É(³à1YŠ úZ¢y!òèÏܤÖÉ „R…§¤A>eurÙ—hq9=^ÔéçJ8^¶ü~f0»Ö"†stÀ)OrÇ,jÓ½Î2>yX#{¼œ+‘§U#˜Zm\+“û YEd*Ń +ô’Q>ô>t•o‘Œ‡tt«p/·cÔà Ë"j{ c*’¸÷ËLÈÄ0å‘×ÜÅùÑq¦«&ÃÞl|]±›³þ xÑ;,ê-JRNU­ÓA÷çlwX~|o6ñƒÐî¢$ ñãøÈ™ˆÛ&ê3"/-ÂñÒÁ ¥²È¹· `ÉÄ;‰*“ƒmM(¤ä"±€fÞiònª”¦o2ÿ‚K’D¦÷Nº€ýfÀu\G3j&yq4ð(zµIAb”á0‘ÀÆ! b ô·o¿ùæëoÿnñy¢°²NÔeŠ&ªÒ?.èdŸ8^²‡g§ƒÞée—µ¹©Ù¤µáÞ dÚ”øÕÛg]t-Ÿì´¼ëÙÎŽ‡þÉÞKöèR+ϡ/ÄÛê4•tY+ž¶ü &úQ'Ì,Áêe{¿x„Å .Ç@¥FáÚá$WQ%Ëžg E:ÎËNÃkJÚSÂs•s]ÿj4®É§  'R¬¹ÐÕÁ.CÚBØ–Y“oû²8)ŠYòÜ’%•í}/FTÒ9ïË–X=¨~µ;½ÎÚ£$R>yQѰ›«|† êô€¤xIQxޤ&GV>#“ò†ß-ÀŸ­‚W¹vÙšWËYµÚ™¢ä¶ÃŸ%nyËœ“%EAéóZ9f޲¹´ŽÖ9ÝQÝš=uê%­Žº?öM»å‰õV(Ð…IÆ©(€Ò„¢FÞ·{?05õÜûÌ Œ ¢*†Œ³uºv½¾dƒ|bÍÓiï[‰Ëi€ ¤¼±@¬&õJp¹çîÇ”‡]ùŒTäR±•%%¹¸ž•Yñ‚õظ 9â@•™×W©9”¬NÝš<—iß§Å*Kµx Ç OeT›áµõGäE„J¦†‡yÞFö¢šùIœe^–+c"õ}ùzá%…:ô¤K«O˜»™÷òùú鬔ÁЩàÊ÷HÈU3½R)!ØŸ 6È!¡(*Ü´°æ ³gZ{‹A*Yša瘳O9„t(5î!šðø!:6$"©§XÍИ2²â€|ôõKï/…ÁDe!wH `þíàä¶ma]ÇÎ:Ĥ§»-õøú¥•V½œ$à’Õ÷;ªY¤{¡]‰ãŒÑªÚp#ò…º’I˱î¡×VÅo¦9ÀmÙܪFRûN‘¤$79‚ÃÁà䌾.Ó¯£Ù—®ê^÷¦J¹úD¤Êqp5Õàìüêð¢Ût¯þ|ö.£û“ïßwºLPg0¸è½»tM%ª°D+À;h‰0Ê66¬‹9÷z÷³|–c\°ÖVj„CÞÉécÀAö¿B™½J*¾%” çÙKßÇèÕ«l2aÐ{/Ò¶ä~Û“û½ÂJÕASœ‘µä…Ƕh4ä8¦*žFè&˲…&¸ó0€¯%Õ¬…tA‘\Ωç4A>ÑîÏîÝÐ ¾ÍÌóÃø¹\ÈÖ'€ç±?iOüðf7RÉó||iq(L™ê—Z4&†Ø[g“‘nË…ënPrUÕ:ÆŠôk\³O‰<éž`P{ ö:—ƒ¦žq.—svXE––C0H¹·¬.³6Nó.d,õ‘ ¯`>%‰™7®šÙeõÈ¥¡åˆ‡:ã±Ô+ÈÍh‘âcÐy´{AÉÆÌ£Ë‹^fÄ’cP$ÐÚâk]R`‰|úïÉ@ÌÁPX]FÂØbáM zÜÚµ£ÌËáɨ¥¥¹¿uJ&·ÓâS“¹µ×ZÒ×PorŽ~Ôç[¡áYcr3LîÔÒ Y½Ê¢ó %Â]ˆP,(¨Ò¹Nœë{—ap'âÄŸÃL’×3¼ îH©ÁÏwŠ©],uAžÂ=^³Þ œØòŽ1üûg懽 $P ÙòØ­L* x—])ñX@aAä–K—d× ÄæzsBmÄ8ŸÔ‡¶Þ/ÛuZL¥%{Ód¨#øs9â5*>;Ò†J–Z1ø? FŽ OþÐK1ìbò·¿{oH9]Zý¡Uü²-9ÜÅ9eÿÊ Á¤üK÷¯?]eqï²ãiy_«ì‹¶a9'èÌ»±øVY¢„RÁBé¢ÙbÍô>ˆ…(ºõrÕUn¾rþD0“u%t~qãÕ¤Åa3Gªð³ëu&ÝÇ\@ Ú\ó†Ø1·×^3V=ç4¢kÆ9•J ’?‹¢¢ô®j|ŠYïX¬„›¹‚Nê”–OùxßEÑDø&õ6ª7ä§¶„'ôîìì¤Û95:¼üÙ+ •·fòx2ß/¤ ™ìhÝS]7–ÔŒJ¢Ê|†Üý{Ìø1“J ge¼Öe"“ò1ÎF©ÊÕ&2¯V™ýÙ<=»~°™9D< ¶*c•ÙµÎчÞéQ÷¸wjeHUžì™oݨSún"Õ™¹æœt]¸L›0b?ñì·§g?vN.»ö‡iŽQÏ}<èw«HïZ>†Ñ}X/OÿrzöÓ©“ÿušØØÜçýËstóê]93Â|2íèº=$ñ^-yÁy\`EƒÌYÄøììºWHôŲ^“ÚÝ*ø¤/Á'òM“¹“†_Ž¡_N[¿­ÔwR«s=yÓ~Á(E—Ë“âeö´è\$àPT¤¹ˆ&ÁwÓ`*È9€ê¨Ì×èîbeG`F¢’âŽÎJœq_UoO:§ïí>Hü=É&Ó`pyÑ9Áì·ï/;ï­ÁÑA$ûµåGR08¾uG9³YÆËKhÇÌ/>ìþÐýÐ} nÎðî±êsË o|nëxKhQ™™WÅì–wåº/ àhùuT¬Ê®¤ª2«vÞ§ÄNÒÏ$+‹IÏ}ŸX÷ȗñ(*Ñ$.gÀ±Û¤†F#Wã­5þP‰Xå¿X{ÇßHM†ž{“ýäôµâ{Aô¥°2²‡;ßÖžœ×ŠuÁ\[X´rûv OË´°¦ 6ò”µ–du[¶¬j:å¢S¶ ï0Ù@pU‹×‹¼kN@éàcǖêz*Ü×KJ—~£¯VvfÞ&°#‹)»’]ÚΗÖË|õœjÝùuÉòiD’à!Ao&-mÑMÊ•WÐÐâìJ|“ŠaAú é.šìÔäøüPùó«w£«‹î]vûv™ÚûJO’}w°`lIc'Çñ jÇ™ŽÏd-]¸Îb ÒÓ,0ãÃtá|àfz,wYZh“êxO3$¿x{®_Z¸š_æ5éðõ%@I,tmNj×ÃåàOÄý‘uuÿvƒ¼­kÇÁi gEB¨ÏÚ¶²1­|´Lîœ ÌZZ…¯ÔKÍ\æâYÛ—!“*°LDó1ñôA¬¢:+çv–•MNrŠ–#Ì£‰\Snk±ŠhÁÿlvggAZS§ë7…Nz0=4àKH/ŸQ&ÃNEZ’ÃYÊPÚ¹ð”W“UØ(d<«o”âÍÿUøòâís`kÇV¹5Yª£ì«¸T)RdW»$çw.UbáDÞ<._¢ç Ú‚ œ[®?TKX?ojêH2²¡#jÏJ»Ïê“4“cÏ>ŸmNVX×9T‹bGÕθ¬ÚdÌ%-r–¼¤xg•’öÏBÔ¯%OxÇÃÚßðàÓŒŽá;fw›`i’$/G‹Ù¹9&{Dœª½üµ¾ Ë\NÜbæ/Þvœß9‚JšÎÃI&”Û6cÚÞLEôô6Žæ7·º&g4»ÞûËžëÍ+ùô„J ¨’æÆyª0øK¤çòÃÃw•vý<ù¶ì¡ªF½ ØO´Ž_h~Τaj yµ…ä ® –Êc¡•qõª¢yãÉš“UúúQç”væDu×C̦Y¶ÓZžKÎࢠÇÍáæü:Ö…’íÛð­kÈcTWÀÙè¼$˜ÎéˆGDöRáÖ†,aŽFªW4î6 s¡37yµ+üˆ«[zgsùͶww{w wwU2¾¿û­!â,£á‡c)“CñEqU¾úÜJføÃíÈ×æï½•ÉÆË Ý4×™Õ8/tô8^`¶mW´TŽŠTçZ÷µg­K•kpèÄ[ÛT"¯ÔW úQÙìªô{ïõŽžäjöÙˆWSûj7ýuŠÿBÚ¤Œtl+ªŠ%&ÐÓ³Vÿáì¢÷ߺ@9Feߟ]¼ëuO­aÐb=Åb¿D‘«»ü¢´0yU”MµÂ£Ê±ŸìÚ}²QP¶|17QP)zý%û5§Îz‘)ÐJß—Õt+ÌÝúÛÂN´7õõUV5‘RÖ¤Z¯gëãÀ ^O‚J÷1s¾.-à1"åÏ´>\z¡³ ”¶yL„i‚\ŽÅzRû`#ɯÈ2œqjªÆ±XCVô’ͳø[C!›À Ï”iBã»å}µ¾Û}©²˜ètwlØ‹<“ N'åƒÖÀ.±$Ã,•“\OšÁåœ×/´cK8/o9³Õ0ÌÖæqÉËñ"Ÿ²ª"æ9› ”€ê»¶–³6‹L6qH=TSšÛja.«âÜUE#c+{püMãz,¬y­ ÍÈtW5± j•í³KUélÀ9e²©¢ úTÙžj*dønrcΉ— 1vì*ÃèiN˜¸ ?NÕT¥Ï¾LÓ/í³,U:¯l"¥‚¾,C{•./³÷'¡¥ä·„9]ù8tÓº9m4Àd´}S¢á/ðWù2fãuŽ`}Þvê­‚¢ƒ»ú«$ìÇ”4Ø« ³¢Kƒ ã_+ÙÔÔKa™¾ÉŸfA,¤™QZ¥nµ€‚KCÑûœB~T€›¢« oh6; 噸’g,£Šü¬ð ùR9T€8ÐV2Cz`ÛÉ›M«¨•™ÍUl…ÇÈMÜ[V˜)8‘ø{^…´{ u22ë+âA•B¹¨X Çæl™<Â$ÙüQ[•2^NòhU´(o£±,)àæù‰ÙƒÍLð¯ê2 š¨ý::9B³¾Þôy·¬DÌÎfÏßÙ„- ¿“þGJ樽)r9F}¹äìKR&lå6ÝÀ^v¼6¡Cʹ¨.­“vð+ãL¸[ŽS6N¥ŒË±`§ŒæŽÄ™F8a‚„ ž %5½ž#ô)|\I¼)• ¦VÒßV‡7³“%’äÚ=Ö½Îü ®ˆKôŒžƒzõQ6aÝÈ1?‹û«"E->· Ñ_á¨z›kÚ¢­vº/:$ u¬Õ•j¶U!¯Aô“¹r„_“éüpiwN+NU›®K:«¡úƾÔçE{82H«æ.ʆ”°¶té5»?¬Ô©}Wô—@è—]”ȼÕ;¿_?©ç©ùuV2_*üá úð¶¼ö>RKÁ‘ËëâÊü"L¾F÷¹ÎájG¡PêÌ `"Ë!•͈ ŸP®ÌÕÉ¢/‚–Zdò&+æ…ÜêoeÕŽ†ò8-¶/ÙQ~ÃåÀ=‹*à„ÚØ¶Á_`à4æ!ÈKш­`lUëÏW c4Å,ïck¶X”[~î,TžÓ"ÜõÀ&[ÊVÚ°“T)üüu¶Ø àÕ¼~0 &~Œ5ra­f†ê®ä&˜}Q6?žžŠm’ UôÔèØêdn®(iâù],䄬ìÛ˜(tµuÀ$0’ª6”Ía†TöNȒ¡3U˹[uþd¼kšgŸÔâXé’éÜI¨¹7ògþ‹j` Œr¡ª£6_ÆEf§¼v–ö7ÖmŒ&•roëôª£„³EG|«<Ÿõ<¯’“h¢Á)‰gÑ4vó—Ø6À½(ªÎ[U;eý]Ù%Щ^ù<,ìª p•ò¿« [Ûýç°ÝsE ÃÊæº”å—«öXM÷™’îÑzäÉ?wõåù,TqÆŒ‹Þ^õ/ßéÔ3–Ãf c¯kÏ> ÉÆêj8EV ÛÅáQ8z÷à¥AÓ¯ÊÐôQÔɤ=(zZ=tÊõ&ÙÁŠ7.UfG«„Ÿ«ÆÜ?,òÝçê°L^v¾??eá—áæÕD|.—ç2KÊûîÀ­äh‚Ìõ“Kù`g}¦z4¯> fxéܽ(Ü W“TA¦¸B7½–àW¶âGÉ'œÜøÖõ¦´b/Tv1bf³çÊýÀÔêÝ@FÏ2Œê¬Ý^×µ¡xožAuØu‚r¼ÀC=C»P “NëaŽQãV#í@Ù-@¹oÊ¢¥)j]Ú`›–Ì´tGóÙ#¢¨ -þ¦Œgç_4óµ_]iº³×Wí<Í=¦„^W©’MÿÞ^îú—[v£÷°ZGïñs\¬™ã~Rla¥ˆÈ¬s/½CNÀ­Um§óIÌ&ì‰Å­¨Žµà<ÊÉB RŠ@,üÑP`À \ñy„¤¹Ž¬xi󻶦SY …îBY’j®À¦¡fºíGìhë̱‰È!ÇÌuóó_¯bNU ÈoÈ-*£1éÝÓË¿žc>¢†ï‚8 ÉåL r–Úüÿííâþì&&ÂC-ºÌÛŒ4î:Ј=‘Žö ¿¥ÔŨs§Lá©5]o‹©4³ºê«$¨š±ÌظxÔ`!K}ì>b´±@ŒŠå`ÍÍÁ"!þ¸Ai’gqtXv×û€×¬Í¯ÄX=—EOШcVÛØuø´™'"µo‚“Iʾ¤-¤f+B>Üš­vêÄ:) mo‹T¶š Fkg¢Ù’¦• ù|ŠÌ’°Ò!;ÞM²nhÎ9t‰Ì­gҬ豟!Ý3¬Ô¢)·üEÇ’R"ûÊŸOýäãstõ¯á¢¯Îh£>ú$Ô^Sº#Uªùs¹íãéUBòŸTu¤…;P­·ð%mÁ¬B·ÏÁ_ÿ‰¼+lÍÇK+š{}4ÓNbFVe¡ÐÒ˜I¥S?‹c0,Gtg2û~be ÌeT™UoÛ×S½ãŠY´ •yÌG g6×±.V1^Ò†¸_é<]‘ °Ê$•îï™zØÂBNAl—›L‹|ƒ²)-ù&dëuû˜hÜv‡ÎM øwíÖ’èºç«8wò… ±à¹0C[&“†¼TúÜ"Jn–ÚÊJU“ö¨×?<û±{a² ‰Îý&ç]<5CÇЩJ‡ ³ó ÐÉ@†•E”3³ƒ6¦½õg3K#¨bk$ÙÇ]G艩*æ*dÖêÌŒ¦@C[P]sa-J¬\Úm,ðÜ”„~#žpj¶ÄeTœ ¶e™ Ä\H@çYtþÁÏ9©°Ë"<ÊŒðÃäü©ŒÉÁÔãx‰Ž˜MešyX™áÁvÓKxkýª ºíS ¡–Š5™Lú/ò… ”ÃFfÂÏ3ËÃÖ÷³¤tØsK1>‘‡ ÿzaÔõ ÈÚ_Ä«ÍTú°”°Vâz·.c«á¦ÔŸLÄÈ’âZ¥÷Ý7G¾ÎùîöèfÑwå ºïírwn¯¹’r­òÜü­\ê~:à£C×ì„ÔAHÎvÅøÍWnƒO†°/0ª‹®éÑ—ƒ¬iº[T½EÕ[T½EÕ¿fTÉ—–{üå ìgžGm‹¶·h{‹¶·hûqv@vArKê™ÉJãíÌó:ˆš:º.•%«ª|~ôÏî ¿uR¶}‚„º Ä\h˜?[ŒQGKóÉâ·›9Ø_hýµ#Š’âà©êqD>FÇáÝzPï0Ñ0s ºLÓòóTîÏÓýË+ݱøÔQpÑYÏäÚ>“ùú`Ú÷w±b,x¶f¶é"€Ï®`¹4m gã%ìòz‹nkæŽJ¹Ól6«gYĆv´}­µ“¤êgšÊ[åÆyè‡Eþ<¤¸ÁË:]‡I á8\(µËïnVÏ+gþAŒÿÝC/‹O^³_ÔÂq>3hê1Æ Ì%yƒj•©ß*}[CVQ6æ%þ£Óz6‰ÛòY¨3ýp¶iÙ ÿà^ðï­x)Ï*zth⮫’Í—í¡Œ×Îã²fsÇeθÕóC[|jÌSøuD¹UÒûR9VËñ4E"Ý-1ç NÆ)è·îÈŸÈÍð8Šâ“?a¸ƒªQfy~èõ:2½ï»³‹£îÅI·ßWc’ÜdÊNÓÛÆbý&èÛFûopµ©¥ÃâÆu>.ªÃj{E˜ù”ø¤ˆÙ åÄÂˉƒ˜k!aœÁs³©Ñ"·øø³ãc:‡:(¯$íHm 3Ý""øòq1-e“˜˜#/è¨dFB–0ÎñwþÓ{ g謃ÇV2ôYÝ0q/‰@þQ[߸™c‹šÚé˜NCU™EÓ!*œw^».Í9¬-óTà*Þ`0;Œ0S<Üø…XºÕX@To¾—Aú­Ž.ÏOº?{Ö$LÀ*fxû)&ê ‘Ƶ˜ úêþÜ9xN_¡$l”òæŸlªG‚5ør}\t;GU}pîEŸ"7#‘ç– Š‡‰è­kÐÄýiÞ$©•àžê“Ë3¥¦úba¾£›0¶>ì8Ù¾dÆÞc°«¯ù(źei&U•h’·)ÔK'%zÙË·OL±‚G=î^ùœôgð\d¢û`œÞòŸÞàß[šü™i2IÒG ðNßÎÃq,àšhÈŽc  ÚòÜ@|âuFâ+ µå6Ä0Æþ ! —õ•O+“ZØ`°Ü1Úg¨J«-g#¼-±e#¾6¢®Æ•<ãò\„t˜«kQÒܥąe¿Q½ÌNn*Ï›pÙ†-#°FàñzÍÍ•öqaùóheò£wä{¥"Š#¼Jé=R)“)»9CO’'ENNXmÁ‹ÚJ™^‰lp6¥ÕÒ3 •ÝJ3_<Ûgkœq.¶ÅÀ­Ç8#³(X$k£iaF–€7x—}ïD¤Ò± óªEÙP àtl¯>}ëÍn#€yæLWG¨»Vžãý—K0êOÀÓ_^ôd*ŸÕ4«Û.CÙ¾ý­ÏuHNp‰Ñ<>³ûO+A ޽ŽL½bj‹ž–¦ä@Oî0³YGYå6Ï­s>–ÛKÛšÙÊWPÛ…Õ™ª^McDE¤_9µ'(ud6Îó™|¬«µÃ#¥6(8›Çf0߯ÁÜrʸÕd‹Š\´3 tŽ¡Ôx˜Ç»›ädI}EyUåMkãró¹ë7IÛFe†#¶Ñ'»ô³èˆ*ÕÊô?õ?жŽÛS8ÐIql&¼jsy¬6²Å£ðg€§]”-ÛæÎRoŒT½ÌÕÖ ~Õ°rÇú‰qçÎ))á^q¶Yƒò¦~üºÍO<ó>šDqâ®I¾º nnÛq'&IaÓE¯¢ûE¯JüQ8*Ù± [áþ%å8ЦSxªKµUÝ»ƒÝ™©—˜bR b8«J+¦RW‚5‰òV&7™ƒléÑÊ éŠlªz“¡(¡)4Ìp“î SqQy?NꬩØ_Õ ÊWgJÊòŠ_«¸ ›e¤}@Up~íמsl-Ø3D+£ùÄ×T~œê¶[Üõ× ˆ° >³RgŸÖã°Qâ¤Æê”¹ÀÕRºë YÀ3?ÓàŒÊŒö)1Ö× Ê®~aµG¬Ï,à°ÂEOWz§kgÏe¿ŽyDY7œê¼ƒâS@uï¥aC4fi|$„¤51RÜ®P¨ÙhÉc‡ÊÒ‚¸û‰xj É2,5ýªÍQ#³ñšF]….‰šûŠCìŠQÂôß’»ªS6c÷XíZqx¹ÄµµñS>æç …ÕÙnýî ³Émt/A%ŠóñXEތ՗ôRŽŽ10ì>üD•Y‘?†:ô:ˤcøé‡Þá>{׿êXÒwñ‡ƒÞ]ý{œæ³Ã³ç']“Íý‰ÅÞ…uáÌŽÄczƒuŠiBÙ×Þ’­Ô9Wñ PbqãÇcÔ;¢K -¼´Qa×uwÔ•¶"ÍD8&³ú,ŽˆƒÅ¿á|nÅdlå YrPªó†Ó9ež ,QF9¶ñ/HŒ,N‘>21‰Å©}»³#ÿ0v'õ“Z^•QÄ*ws×£Õ“«]®<ÈòWÖ½‘™¿5®[Ç&`ÑyüSpE XF*©KÙ8À7\aN'7Ç ÇÌÖˆ/WŒ„$,¶‚¨I îC4oˆ©¶÷1”ÉC)Šd…[Xá=æ'á[ ÿÊnd# ¯Pym3Ø­\ÿ.‡Ü´åBTÀeuëñÚM÷â+ØR…Ñ­ëkßZiC^h¥‘(P-èÁ]%þ>×;t\›ª5üÚà—wôÒÒŠ½˜Òg‰ eXUãÁ†¯†©ROÞ,©ß¯Z Œ¹ª„Õtt6…pÆÚ*~›ÊƒükžøXx7ôe " ®æ}ÙqGw|ZÒqæh+ÖM×<Ùèî-¶JT&n¦qûIåëLŒêë}Oz^·'A(týç%·Øݹ¼Ðþ‘ƪÍY«`nÕ¤#7ìȸÒçl¯„1ÇO쨹coÆ{à ÈD DzæDHi0 R‹¶g˜iòýbô¢jHÛøyç¼ç¥â“òò:ïN•'èH:˜²UÒÿµÑ4ò7ÿë¿ÙÝÝõ†ôGøÿ%Mʳ*Va—RS? 8$exšàMÁD,mÔ{F3í^[]G{¸SL;ö¹–HzŽ&$â9¡¿6’Ò7eÜÄ…˜FwÂxj™ß• 7É蕵}0°Ù˜ñ7Ëþù%³ß榲à;qoeÞØLA2;_Yì©5F:d~*èNzâ4þ1sñ©ˆÑÔFˆ™ëé§…Ýïzª²_#gHËùÚ¨g “á÷‹\ÀúK“á' E~\⾑u礤÷QTFq¶êÙ~RÍiwf©ôO?Žý‡JØm3Ž?ÏÁóG*& µ¸žCi“¿d÷×èiVXt~ñÖü]XuÛ(I‰‰òÇã³hH_Jeð_(“URò4šX(g¬Èn+ ;ëÔéŒ%<*u¬ˆ!òŽéw/~ì^x"¼ â($qà΄ò¤lü¿½]܃½Ñ$@© öæÚ»&œnã#)) vº'ÒÑ^á·”F°~#©ë|)³ ÎK’TL£”Þ°2 #¾Ãó4€¸DST2$ò¢ Ô5,òÌdÆSfSôUÔÛÿ˜ûŽšRÀBy@.Šƒ‘×;¿{…CÁ¿ß6$µ Æ&=å^æc"Ob±?‰WäOÒ¨ãOBƒÜ~1T·Ë!fêš­èD⡉rϵ\HV'pß÷‡2ó>$0; êðBÎÃʘ£/- ¸Žp‰+Ÿ®R–:[ó‘{¾Âž¯F&†.û˜v4lyÔïWÈ* ÞÇ_?} +’£¬GTQ–5ÍŠ¹fÈ] >W%’*’¤Õ1"úJh"Xá^£œë %säK®tœT»àUÆô0æf6ßLÓd-î]ÕogVQï>«}7õé˜>¬Ñ’ûý“½ÁI¿aB –%wçÔ¤;I<íU ´ß¼ÙÀý³·¢šÎ¦…|ŒÛò)k#$yM ü”ŠÞõ1-æv4%_®F6pÃÌ’»Fé¥R-Öt§ªh­H줭1š+÷ÙÊwjyl¡Mç¬sµ·êª•j‹®'{BßÍHÖ¯‘¬¯ô2Å)ÉÔ¯—O¡_+#ÙóºŸ#ºö7¨z}éGÛd+òÅ›²,¡2Éš"ˆ_2RºQªRj<~âÅeT{Jðφ «@RF/Im¦s»á(~°´’ΣÚôK覘¡êZW>(˜2{gMúúÚè2nÀÁ¢j¡¸/^óÆ%(›1³f Ø "ýR÷ôðâ¯çƒÞÙic±ŽÉ«¬cj,×1y:¦#)ÂOfVW½ã«‹î]vû&ËÄR‘¯`í›øò¬é2y¯€5Ýl°e6L©(@©æÅöÇwÈ$‹"³`­8¹ ×ÜšAV£ú½ 4Áunu1Ï@CF4;yHhq6©Þ¦uù@]Ùz×;W7Œ“?°(+õÌ)Ά&E6ÀºQx-ÊéˆBK#5б¸0Ä=n`áuû½Í—³BÀâ—¯vrŠkJkZ‚²òmbÌ,ìÒÅiü! ?¶DË=­$r•¼m£ÑÐ}6¼ð Ýú™uL* Û¤âU2©x?Èn:5c›Q¡kd1J|Âu4™D÷²*‡ dC}èÊ( 0©à»á$Áo¾ýz¿å‰Ý›]•ËDÎâõá ?„R5à3²zÅìÅ“z¤;µkè±ÖF Ê,ºš¡Ç:ËXpÏ9COöñ–¹ø¢ =–*ú·bè©Ço®C½gõ¸Œ nÄr­Ü££0üy]qq‡ßVLÅ‘º &¶‚†Ð\J.þÁìTµ0](6Â@"®kíË"q’_Mõ!ƒ]ò0Mv.2g"ï _óD…oÅó0D¾KfÒÜmä²áÉþµ¨Ál#žÖw¬|M) »Ã,¥¢8s#±ñúïÙ<©ÊW_&OÅU×#SÖ¦.¡SúËLã*öR3ŽÃ76Q'Óf-¬c•bÈ:7"Lø¦'+9êÑÑ8nS?RªñÔ$öW>>Þ ðsßÕ¯€³ªÇ¤}D¥ÂDàáyÐà ¦FÚ´Áç!Ýû¢0"©š!˜4f ߯‚ú `ÑL`„|,½å[zéÇ£Û \zwÓaûT³-RGш‚²$¤fWWl‰r·¸‡k9ZíFö„ü;®$Û”ö³äs<>²b˜l>Èd´ƒÅå]88y=ù$¹رôJmäo-ìQÿ|–Õç÷ŽŠȇ_qnòôÊ\8x¶5ûÒÖ9©Àl]>ÿGËûsÀ»*óNy€ÇPþÛЇgõñ”NizËH€ ˆ[oÉ@W·lß/–ÆÃØuD#‡$ÃàM¸Ýõ¤þP‚ªÛ>i¨ Ïr {hÈÞˆY|Ô˜ŒUþH6·‹½]Y¸ë—è¤~zGš‰¶Øã³‹ÁÕ§OŸYúašìØUª,˜Uªô;çy×ܩò 7çÏf“€YA{EJ…ê™Ò!³%ï7Á“ä“ùp¤©Éeñ m±Li›xÏN½ÓË®~*eºª2‘ˆjICVŠÍ‘ÿ.Y$e£MH,ÚD¬‰%Þ¬_–ý|ˆ PÎ;ð):æ:>ÎÇ:Ðȧ•c2BL} æ"Wa¸žS£,Èl PYmnw‘ùêP GÃ\1ƒ›}Zy¯¹¡ä¿i—UT‰aß”}ºa\ ‘9$½°li2n<;ñ&ò°×cæe‡èY?{]‘¡;¡u*S<õ>*Ò,ª×âLœjšÎ4T_¤ÚSe’ž„]a80sZoFôef4‹ñØhÂ%ˆÛªÃ÷#òRi“åÊ”ªÒ†Qe"rô—Çç¦Q‚¡Ä<6˜¡U©åqZ[21MDø ‚4].,¢Hr©l?;ï~h‹·kìý¼ûÍË?•Õ“PñŠðí×¹Þ¾dÿ×K' ËœŠû&Þ¯iŽv,-«´5øÝ;Âê&ó%´ÇðAß@üQùîÞ égŠúáƒâØÙ)bùuÃ1¥ 2CO° MTøSü{ ‹ ×ŠÑO2Ž7á‰ÌAÁuv—3´c3)ïÔ9N¢DP¡ŸÕ¿FṲ̈V©QÕ=tê™I“â–3Ý|s&êÙÖüÔj\2iÒÍ:PÉŒÍõøsB§djt²jQ=UY¦þR^éI÷Ú-¢%Ö028ÓÒ ¼$ì•‚ïA üæju!ë=qϬÆhU¡km[æÙ†Ø7)Í:.olø)QŠ,{;‹ð¸ ÂJ³{ù}«Šk¸s}*Û†ñÒ“* »’õ¬0we4O¥5†½÷dÇj²öŽ:˜XÒµšfÝÔoF1_áYÉ’¶‰ɇ<ãÍ |Sá®Ï¢Tòßzï‹ê DD@+£ž¢¢9°ÕºÈs˜X’Îc\4-ÞÊŠ¬1;”!À1]æÆº*ǘ< Ž”à%Æ6þ'[e¥˜k»Ä³‡‚¤ì“—xö@B›\Æ‚Ìu«_EžSí«˜Ä£ 8]Ç£ª×€ .Ùódi”ìA‹¿2ÂÔ—.zx£Ÿ5Àk:#ãÁ}d°S–FYA\ÙWƒ:6ƒÉ÷«ÁÙqÃ|åæ¹Ùá « š-êk³â’ÀÓB!) p¼¥æuÊÇ>PK,æßµkhvŽš#I4­¬ñ¨Í/L*~’Óí8;»y\ƒµP]‚¦žT lP‘ ‘V1;ÐÊ ãçf;6Í ËЮ=iCÕƒ„«éž£|P³ §JÙ`„ .C¢¢sÖÌ©ÈI:žz&ª‰Tt\ï#té 6R]]íüÐí;¡VÊ…Žƒ;á¹Rp‘’B^÷:`§oìuޝ.OûçÝÃ")„÷ªzÌ[`eM±‚¹ž¦nGúänn²¾Þ\þ½Šíw¢5ÿ6©ÁløVbÅxè/Suü4`Â;¬¶tóbŸÒEeµPUyreÉšŸ½!&¾Wî<ÚL­/—EÑ:@C]¯ ÓÅþŸ‰ÍaÐf`1œdU•…ZÐåæ¼åøLeåmo›Ä\*u«ŸêÑŠ6/Î;‰¢EºUçìõÀ[ÃWEIŽ··l-6¯:`}œÏl˜Áß•†?wÒ@{ðU4 ŒRߢe.OÌñ9SXtZù\çð×FœV‚©‰ÜÛ¼s-f“ù²áüúº0'RSÑag3ÈBw-•޾Ux,¦×›Çy}rt40Ñ—ŽÕíoXIÈVv )N§ÌXìÝé :ù¨N†Í$ÏÉÉ:KE2hE”Ä1h¥ø-YÁùJ¹¶>MY+‚õª­Ô $Oa—= ÕæAu_CÙ y²lŒ Èq „’˜Ýiƒ4iŒ¢é, áyRM4þ&¡Ú~D°™{³  èöÓéB=â„!ÿT7>à;ädTHÀæeƒÚÐç<êÆ¬™’”Üwj›6ªP.¦b)Bùµw=ñoŠôK°CS/zå7²±°C>…ŠÒ·e±eêìªà–tÄRSõ%W*Õì­$¹ô£@­Z_æëÍ#>„ÙÄqg±?¤+ªÕ­ëR¡[‘À„ЊwQž° Þ*â6îk°éuŽ6\?q\²ŒàD¶Y5ÜÙ¸þÂèÆuËÛÝÝÝR-õx"êq]±3 ‹½n'éÃDxq-‘ÝðVÆT7Áìˆ ÅøWB¥Ë'ÊS /$ Ò¨“‰@Cm†$Nú˜¬èàj´¯‘¥}Þ#h_#Kû¼z´¯QDû¼5ѾJÚE.{GÚw‰yêÓ>¼ªí¡I£° XÌ)btPØ€éK€E-ü2îÐðÎô*©=\^c³%ÒWœ¶„ÏøÕÔ\ßDA‚ ³ÔN,`ÊÁø8ŠOáô$P—¾¯’t+dý=‘+‚q‡ýj¯ÿ›àN„‹’¨j.ÜòÄr¹"0Ï+ŸÜ:꺜ʴ¥OI@‡¹¶ÄYõ`ø½H»ŸfAì›ÔžeoW ©º5jÌ´Us¹‡”ù*´Î|ÊAöùBæÆ©›ßhgÎOOƒx®Bš ^¬E)6Ì,©¢<†- ©æ_Ú©`z[<ÈÚ§®ï^tÙ`œè˜°×ÌSA¯f{\r}åg‹ú€„ºfËr0–>…óX¢OêY°f8­cuÇ׊©Ÿ» ~¥è–#¶™½ÇÆ"ìïì›Kðªì ܺo_]Iµ™ù]êßù 4h©¥þ¥N5f¤&?y\ªœà¯œg° §–«pˆ÷qŠb Ϻ¨A›Ù<-ˆyÑefêNóÇÑôIà—q¼7.Û 7}Š$(¼¸k²öm¶T¡Èhü©ÿ)˜Î§ú:qZš`Cb䡸Æ*rØ5þ4™*m¸§‡»žwÊB&EcʲZ‰,gÌÛà&’¨â:gßÄ €¯º…øw —ÌhåuOºƒ®¶7ªUÌÿ<`5M‡íGÏÛÕ£–4âÿBU•Ñ>9[hßü®‹ö9{u´oFÊ¢ýb¬Ïï‚p#Q“Ÿ|Èàª'"º·Ú”*‹ç·9Á6, -‹QhW'4Tk#GÍš–ˆD`ÇlƒG¤’õ†— S3pÍ2ÕÍwÏïVÕ»‰{{ƒAZÆ< ¶r¾È¢ÆÿV6l'áŒÓÆÔÌT@żhôŠ™º°ÍÖW/1h/‰5a_Ãh‡Ý*'¹\ýÈ#»¿WQ\ÑòÉá à£ÌYCÇœŸÞ6ªgè£ïõ1Ë_Z£e¦Û̆ ¬ ª+”$9ªQ<úq @Û´j,>U;õÉ<‘)äèÏê)4ñkvÕ„VùTwC£^~ÓnhÕ"ciŸ~BÎË:+ú½Ê! ‡É§OeÔkÞâß¼D@Ñjw+'U³Ž9ygÃÌÃúIn lÕKï¥;æ³68Õ·Å/>`Oxãß‹´®â}w°’ú†ÚênDúEûP,3·À!w ³» }ЦÔfž§è‹Fâú²ÉX-E斉ٚ¡–(A8!I…ØØà{&»ëÔôJ-+sDzÔ1EαgžÒ©æ§òˆÐäªPË^—hUðÿŠ9ø#§'Öó\å¼ìVM<æNu ÛÕªÓ”Õ]œ“hª–¸°–VQÕ®‚Š]-7[u¢ëœK’ëy5Æäê¸Ní.z²d¼2ÕñÍDÇÊúãÎв­Ì§ ýÈÙ“î­:–Geøº‚L·cžÞÚ–çQíë­J}ûÐEÿd‘¿¢ZÜz{]ó\nÁ¦®—B'†Ô8µ!Q8ŠpBÈm¤©±š}—)²—Aá} Íýë»Àh—Ï£š®N/ïËzy_Ò [੸Œ4´áC 0̇´+™9Ò3§t¼ÄBüÂÊÕq¯{rtÕ¹üpvÑûïΠwvªÁÃÆ3kÁ.¸QõÖƒÚ÷<\OYjDE nÉ<5ëk÷ücíè{*›d‚l2” Î.– T™¶4Ødž×,ÖÂyä<€¤Â$2 ° ÓCËŠô^ˆÐ¢«”çb¡íÄ—Îr `EüîPû©ÉÜKq£¸Þ*ç,I¼§»›Jš2OD’ÏÅìXÒÖ©ßhÓnAÂD×"ä'3 r›®öCŽPBé>÷K3CP>3¥._6$WÇ)Sx*¼ãJ7l(ˆR ˆ6&Ø:LU/‰×Ä]ã.’F«ÄWzôO ÙÁ·Q<æ)ÌGÈŠYH¢›äIøÓGŠŠèö˜| úg½›>¨\ ¤rÖ[®Ö_ç*ÿÚÒ/¬í›ý] »mŽ¥8¢ÏŒÕ†ëYMÒ`r¡ÿé?T¾66.Ñ#f˜*C5Ÿ¦Ô{¥O’<­^×Ró<‡TäÊã%)ëqsÞ”™ƒ¯d4‘‡Œé@!>¨ ‚ÀÈ•e%ݪš‡›4o™îªl~ŸJ‰jCøFu•Y(çÑÊ* ËGgŠî+é*«¸5妼¥{yºW|(›bGc©È£¨¾ (ÖØRNüï\/éª@l[`=vtjprɅÛ¡Ðq±¾78éÃ}¢éz·~Ò‚Èäß ;$·TV»Ÿf°dsËègíæðøÜ‡dê•LXr¹è¨ÌÚž3‰í)Š’„Ñ^ËtÂjk×we\m7)½úƒÎà²uzvÚu5ßœ±/Œ²Ç­ƒ€Ε£€sJ¶Ýbw-/}˜#Ê}™öðìtÐ;½TC?…†íx¬/Ãñ¸öE¸&­Áo¢‚ÚMµ4kÇãí%(pŽs·˜=tX±&ªòšRlÿª+èžÃfJµÁ^}é˜&°Š“u¹;%ýý¼]K®yÛ«%ÃÝ~B÷’cs¼G9*%¿†Çt9èšèçø¿ŽN ؼ#\ï1yHR1­˜j&Õüš6/¯ ~ Òo¯"šsJ§â4ãõeô'Î5„¸[Ãp±>Nâ§[¡â ñÈd´á SHÉÚuÆo„Mè-å?ãTöŒb]“8½õSïÞOP_;VŠXòý‚þ,ç‚æ.Èz yóæN«!oFÖ……-÷†»q#0‰ˆš;»3Åé8Sw® }édjð!0HˆÅÔ›; Ô{Ë'Ã~&QÕ‰Þâ#ÆÑÔÂÍ; ýEˆYgÜܤŸ¬,†cmêÂX3âW%Iü#ôãc7YOl9\OyËMåÆÌÆÆ‰—H4ªfù»¾Ú4š‡”UE†/à…Ðjf2ýHÛ˜ gÆD ~˜¦m ]yhQ6ãèúÚ¥rž[*³Aʰñ§Pà m #œµ]‡ny‰¡C—~áÇ7”ƒ @÷àÿûzßk¤nkžs{ ãòwmWU>®e "˜?Á)Ôд\•m¥b13ÙBqQUg¯ÕoT.„?6Žäôk=`"ÛädŒ,æ Un'•@…æ²”¥€òè* •!ER8 Zä“G@Œ¡›ºÊ &{ì߈î!RNÅ»nç¥aãYð‘oA¨ ÄÖÙôõz€f-‡xdY{…|Xh­0n1ãbË2W@<ô~æV®ƒOb,¹®ªic`0 Çˆ}fFW1¹Â._QM² æPå/[¢ Ùm»x̧‘#8þË—yý`–DG‘é°œ àRhµâl¢(æÉæ¡b>$Í­‘/õ“šúýd>l[:þ*¡z¨ hò‹j2òß4=Ö¹ÒŸÏKﺵ¿L„ðˆ:Œ”¡Ô¡ô&uýUº#Ø/Ïr¤Ž¡ž˜MIO¨ þQ: ×ò9tnÛ\dVß5ù»6&˜Qk}~FvdÄÕj$[¶ÖHÿ¶É¶œßGçaAn¾*(Ríü ùMjb× ò“Huŧ´^Öã&2ûvÇ(Pi‚>Çã,ª\ …ÎnÓ.ÊæÔió°YYK½GŸ7 Ò¦¬ŒŽ~€­äCÆ¿ê¦|ø¡Û9Z)çöOú€:È[Úóç›öÁÀIOç`åS2¿+ÃŒib¨ÕƹÆbå“`ûñƒ xJefÕk‹õÒ§³8úôà5ÙykiñJ3XŸi¸ÙˆšÉÒdô•“‡Q¥cããX¢'Xr«ôÀ[R]S(·Q‡¦›6»`Ôâ?E©¸÷ܹFÓY„£èº¡jA)ËM6Ù°ÙÅqÍÍ9å® ¾–/,RWaZ ¾zè-°ÞÊÏÂîÙšô æ”7 ±'‘?Îå Ë<¬ ¹Ø._0S±ÖÅpAHþ©K€73'èeæ#o]^%ì ‹ŒàTªÁø_Ôâ±IqeCda$^Ga± ×3yêrevRÙVítxgÔ‹où£&{zgç˜n¡¿‹.ÇÜré^¤vÿ‹M _%ªå\ˆ|¶øWePÃQùd"«ª$Ëò‰½Ôp–Í”ºa†éyCÝ en½Â¶>^ËAÙæ3þŸÅê?ŠfvY;ËB½[®™ð{.˜˜9ªi“‚ð¦á+'e˜´b,óP/˜ ( àJšÞñ|dcöRÍhWÑÄÉãEìl>nÖ¬ãL½['}.`žÌý‰*_ ëœÍ&UMÅç‘*Ïv%µs{žŸõWKmIˆ7ãz×_€¢ç|®Àd^J.W’ù6¬7›§_0‡QÅÐ,ñ¡… +ëüñ# pËaüú9Œ˜Tê›d””.Ë`–ê´ïxÍ(à®бØíÊš\ ðä¥aþ~öεm©¡WZÏÿ ¸ÃÍ»¸7nzö–T íb¤“˺¿k€­lbÕO‰Ä(ÀJò¦dÅa±ÙŸ4F~8“%<€™L%0ÅfÓDŒdÑHâyÃ(N·z^$ÜÅ ô¦ råù‘xÝÕz=ÈÚ†'Ç…ÜX*ëÃgPi 3†‚p57ê~!’hr'ÜðáÌÂÚeÂ/-Z*$³bqfF«ó.+ü¹˜µ%åˆü¹Wþ•g;¶#vחîÊ%èûwùj+™‡ÕÅ?hW`E!Qdž’© ekBù•›PV)Ò·Aµ/FR¼¼æA ·;pèXéO<¼øóx$¼íãu brdó‚4i3@ˆIS«1þÀ®jwzI ìGZ°fß,è‚cz.Ô#ê‚êSžâŒþE§®ÝŠ©t$俹”+ì!û]ãkõËúQ ¿Ä¿è±tèR ¾‰å¶ñ+õk#R‰ZmŤ‚BEDOü›äQ‚É")J—A]‘ÂÑ·^“™ü¿€/E:ÚÝ)í¸~ÂL£\¶’'_q7Ì×eÕž¡j¸ÀÑ“µ´5X’NjÏív)Kƒ×¡*Ÿ§JÃý ºSw¨Z— $÷ˆ—¬Ûº•õÖ®>1†Ž…·ŒËÐk¨8ÒÏWé¯Tq¤¿zÅíÙ¯YpÄEý ßÛÏP‹ø¼%Œ:7Ga´&²k”š|"`¥AZ„4¥µj×¤ËæŽ¯Ùè'v*Âýºl¥¿`Æø$b4˜¢åôA'”YX@¢­ ¿v=ï¯Ñœ“ѳ±”L «•ODZ±’È,"ÂvA’Ì9ã½£Z-2ÏR­C§XŠSïÈý˜ýäÍ×ì-_ú¹öÞ1-´Oi#6Ñšl¨µ>Ç n‹¹Û`nÿùòûn¾ü~í|ù›q>wÂçÍd§«œ?+b³Ï‰ªa©‘ܾjÑžUIg½|cŽÿ‹Ž?§DpžÕKK/ÓF匠ÌÓ•|]'‰{‚ò±_¼›@Ãë[¬d¦™‡µVªè„Î~h—h©€Íìá7MÓüD;×OÞ8v¨=æ£ÐÍÞ,ù›ÃÃîùàª{zxvÔ;}/ z+ÿa¿{ñc÷B½§tˆ¹o.ᣫÎûîé@qJ2M °VO Ýwó¤÷kçIW×K%ð–‚Ðd ®pµ*çEgÕˆÉPÁÙ·Ÿ÷=rG+÷&Sw«ÌMÍ¥ùÃw>ã(žycÎg¨‘ÙÜLØ’ÉËâ¿~|3Ÿb%«Š^’}‘! «ÑƒÕéÀ–xg¦Ò\Á%ï9\†ÌâŸÁ]XŒê.gcæšÿ® ü¹s ,ô~MÕéGÑ”à8³Ê¹‹¹ßm¢¢Í$.®èð“ÈÇ¿*Ã~¬ƒ­ˆ~dÔ«—šÄ^j+ýZâ“>XAIH`îiïŸ*–JÇ \ÃUU±Íš´~B=‡ Ÿã¿«Ã©Hhò&v®V 3XÛãeÊ\C?— 'FèÆmÿ,±Ì8r*ÂÍ:DT]ÈÚ«d«G5\;ÞqkYµKVǬöV°ÜnŠÅZ«?j v­ÿĬÚê©Ë‚Ù¬3¿‹¢‰ðá©ó³2$Aš!·òüøÄá+­1°!++ _ j¬*€?š{õŽÔç¯& ·ÕÊúÛh¾5âZK‘vœŽWz5+èt 4.É_o‹» š'“ôá#WIöuNšFÐ)L\ù ó¯Od~©\Ø-t’ Ç'Ù+h¬¨‰ÛZ”|õ¤$“ Ël‡„»ì†$31ÂÐ(NŒ…;bÐ5ñà†¾&Ïzåá] :ï¯þ»{q¦½ªm˜ "»ºƒdMK#rñ2Î/?wªV‹'¦˜ˆ¦3b_ùL›îÐàêôlÐ;îÚnë0N4}’åÙy÷"óí,f›AæËó‹Þé@;‚ÁwÉ|¨6Ûmÿò]ÿð¢wž™EìÍCãP“isyÚ¿av¹-UßRõ-U/¤êæÐ$"Țʓ;àå$¹00À¦‚åôzÜ\^ÿLóÝ:,q(X=Ë$°äi)Ø&cÈ))›õdKàžƒ!q5š™¬hn­ÿ{ßÚܶr,ø]¿•­º‘S¢e;'Ïs÷n`’S$/AÚÇgkKC Ç Á dekÿûN÷<0I±|ù˜•Ä!)`ºg¦ßÓÓ}ÔšG­ùÓI¡Yp¼0¯R¿ØºdúŃDK <÷p¹šÏEƒq¬Å,Ê3¡ÿ¾¦L~zJ—àìô.#¹Ïz.Ú ¤U.»Að§çz"ôyÍ@GåvTnGåöâ”[¶¬Ý,ݵŠr˦Ýöã´ÑÕáÌ ­güpT~/À¹{)ú4Û™B=º‹GzÔ¨/Q£ú 6.OôýCýƒ¥³(v6SoïY›j,7éÒ—§ÌŽâï[DN*åW×I­vâ`v·àk'šz-…öÌKuS«‰7Ì_Ô Òù˜Ëfw/÷†x¬ Ÿ^*‹¬Oq´â7œ\—W{м:Ô[ZÒæ•;ð=#7î {zLÒ°Šúïó§Þ U<§¤MuÀŽÛ½¹—F®Û4š²kFˆÄê¸×íkoø¹oæÒ¨«æÐ¹×•'>Eù½a'+ž4ø£9û S¯Â?Žzhèý4ü‡|â¹Áà9ÌÈL£¥M´KyzðŒ?¾gÓåìÅAÛo^yÅtÖgShq¾.¡‚óWc©=02Uu…0w°:Ó ¡è^º·ÌY=jÇ¢STùÍ×ûë°c8“²i6±´Íø¦\ÈÖ(›üšV™˜ñ™óúõë£möíÚfJÖT¹Q&;¿ZMì< VôÚ¤‘åO1“L¢[K. ÌI‰6*ç€H¶ûÒ;Tæ\ÂdÎŒ1îmÅ£­¸k[ñd“­è,ÛŠ'ulEg£­xRÇVt(¶âÉÑV<ÚŠ{¶O§ÝÙŠ'[qÍ ”ʪâ¿ÈX¦l7H3ƒ­Â•ãtÎ9L•GŽ*ÈÁygL£k e9Ç5HCC€9ÎJí4Iâ8yt¢œë©¡§ø£€á’éqa–òñPŠk­¦²™§Á×hº˜ÊV¡ ñã$]C£î'ò­.àZÙÏúá›° ^‚ ýÜ€ìó£%}´¤waIóú†ôÑ|>šÏGóùh>Íç£ùübÌç åBš‹{UÓp°,çoÞ9óDp³@4P2®–m}²d[;õmëe9+[Èv ©kÿ³ƒ˜É/túœÕ,>Ë þfË Ö?]=ÈÇ\„c.ÂÑ@>æ"ì1RÌP 3W´üÙdl&³–æ(µ´Àù}fÜÔ•3[c-fÑ¿¹Ùá,cpjkGÂgÒt»]L&P0BŽÎ¿Â§ÝÛp“{Æ´ØÒÆ‘µkÅ+ çE­¦L”?)Ü$cðÃXÚJú¹¢¸ÊlïÎ( µ:«@ËïƒÜyLqú˜F܃›a4)ãñx€ûkyD1|ᨽF‡On€ò Çœ'ù°@ôwLpDÊ Œ(å D8zg'¿€4ˆ£/\?¼ÊfÂQÝ÷Ù çÑ<ˆf™Ùâ©ò™ß[À!S(ÛöxÏPpA+ mªŒå°Âs–6ªrÊ©•»Åॠ×ÚÁþ¢fÍ ŽÛ2Â5ÅÃû9íFXä+Ë•8Çð‡«!öÖáaàLƒ||æ¼o³D|Ý=ׂ>þ7K ¶YYÉ´Æ"Aˆ Œ¾È–,IzR¬š…0„ Æ ×½š¹Y­¢0HŒ½I»ÔÕ”õI ü¡˜ÖÐÑåŸö̲¦=BãÌíôöþïaœAÍæß)k<)½%íÌ>Rwtô­äÖ§Dxè!·Ny’2÷\÷»™ÌŸ45H&4~±0“çO%¶Û]ð´„гñÓ0Ë«ô7CÈÒq¡:¹53þ2æwÏaF<Ÿn±,f"0ñ|hT¢nÉó`¿ÁW ¨§Oò­pñD°‹ÍÆ\ªÂËÀ™èQ™Aü­ù ¡œ©C\|˜Šà¨fùEáê}|}ò ä‰ÁXpá3G…Ü9ã+ûÿZ$ùÙ}9OâK±Ú¸ØJ«²)ÊNTd±ÁÿÄGÌîÑHfññ!÷E.µá9$itÁIQ–,Ò1+…,£8>Ÿ¿;Iw" 8šh³Â˜îA…V¶,µ2K±¥ßãÓK¦h+™óÇ .16Ù &¶’ªügíŠDª>¿oÕkê¾=¾=“}w@Oqõò­H3¢Ù±D¢¿‚(“`Æ·´ñ‘ÐÆœoƒñÐók‚pœöVAÛH…+×ýp†Y¶ù~HÃŒ¥)7Ø•(þ,1ˆý')39γ¥ÜEæQ´,ÔÄF“[U¯ÓêPŸ¼v¶Ü'›·c-¸O6 nÇJp¯ ,™‹yBÈWþ¦ˆ²kΜyš‰òŒÅûg!ȳ;ºÐ‡U(¹ «:|™ÏÑÍ]‹uo$ÓLtr=pjO°†ÉsŒüñbžÝ „›\˜ð+V?J°»×[©:¥æ/ì_Šš;³JCD8OÙ¥yËeŒæ !{À¥=ÍðTðÕRÑž/‹ u ¶^A6’ße¸ Î.ãH$!Érù$.q±Õv»nƒ‹Ì;>.K‹¾ ŠƒOx[f9)³q†ñ¸lb3˜¨!_Ö ¸´tR¾öÜZ>V˜†`碘¯P@âŸÚ,9±¼‡™”_€=ͤÀ¿eú!¾=0=£ b|¥S–Aó”vJlÔÚ-:ƒØEª…8gKd½‹hžâ;g'¿Ó¯4à•ß½Rˆ¢ò¢6@݆ÁiUÈ´0X¢Ž9Át£^¼ÛÂf*ÚÜ‘tGLþjqÚ&Ãh*¢ÅWë“<”pƒ‹¦óîOù›Ã8*ȾF³“Œq®‹ÛÃSâd¯@æT„ùÊ¢m‘!%àäéð÷`›91€§W^q@[DκíŸÄ"ËÐ!aû‘vÄÖK2"G‡áqZj:MÄo¡æU …ÿço…‘òÇ5FŠX¢rè°ò›õ9 9â’I<«³q´h!f[Ö æ¿ØTÉšÁÀP2ÔŽéˆÈÛ%’ RÙv䣓—(qh²1áížXŒ3Y²ÓÄ—q²˜å¿%*Z1Šœ0õ¤7d_Á~™Di–¹5‚2Ó7Û ãéÊÐÈ‚ ¥š1K¥ýýÅH&A/Ò½d¥êõÞ ]¹àgpŸ Å‹A~òæµÓÎWt*'œÈ%Õ¶ííS™].YÞ„­2RLÕOF~éZûܵ›YmÆE¦I(#ô™h§ö1¤û0q›BŸ‰W†GîÇYrSwµø+’9gãZ¼y|yŒãíâ+Y´ ”ý-O«Ë7(¤ÇSd¬ódzç§æ_`vÅUtçÔôÜy·äÒ¬’4 SÚxÞa³Iœº^J#™”ùÍ–`Š,þH2Ž0¨ˆ×‡GvX×ó*Rã°†XÌ_aP1æ7A5úÖ/•l–¯ ï—ntZYã- d?TAôÝ”=Åw{áƒéÕ*t,ȇ+ˆ|‘áU¢Ð)8cI Àýg<'Ø=¹ÈãÒÖ£rFÙÛ!Ïl” Ìëw…yý§5æ5NÌ&úký£÷»B @ë$ˆ¹Ï%N÷ßaÝîvÖAöìnc!)| ¡º²“]ú…¼‘ð–ää°â_ëÀëÎ2vJ(nv«VÜeÔWázè‹õ”v{¦ºƒË‰{£ÞkîßC¢¯ü ´QP½{ýæ¬r²‡z2Ñeú§Ýûˆ¥AÊñ1¦[Ÿ”¢àxAEÜg²p¾pP2ŽÈ=DÉA¢±¯Át³qN1…,½Æ8‰ÏÅ'¸k þòšÊ¶].å—Y·ô«û¢Ãªãp\\ÂöÈÉGNþ^8yûØæDVªüoþTǧášçc)³],(czlþaâò¬;§‰\{$¯K–¿O’˜¢ÿhñ•LVüÎv·â-ug$I-¢çÐ-n+É@å¯y¢t}ÛX6Ò’ Œ®Œ\ï8ß—ö’oå>ñ¬BÌ\œßáe¸6ˆÇï u²>ÅÓ55^ƒ3ž‰p³±îã[úÅ’•ÆúE;nÚ ]K(í%0Z³ºÓ+ÕÀ‘÷6ò•Ž‚,8nå”Õñ¯žüËHØ#à"»\èUêeo”VŠPZ…í,$3¤7 u¾U.ÛårÈeôKÑ•=_%¡‚y »]BA¦ap§XN}·Ï¢²ÓÒ$A@ë¸Qƒ£¤Þ¼öªšVAó+*iLt›E9Н֔-ƒ°wV·/­q”Ï;#ÓG'•ÌCtV $N+-¹§y¥ØKXG‰»¹¬l9®½öv§îÚœíõþ߸Þ8g¹‘þQþÉÎzž9Iñª½À23{“ü7‘—Ø^ ‹/p‰"ˆÙì;’ÉÅ=˜8±º«®Älî& qéË:b\¾.Ã?JýÕL¬JjV?XËÿ¢¬»E¾T\˜Ìµ ®¡¿ðã Ê½ƒwÏ\߃FFPÍK~±Œ¬*¦å;ݶFÐ;“é‹9_Ð_½LÖ¯#Ö‹¹ÓÁó*Ê!k „è;Éã`$þ£D_ǬB4µCͰêk‰®¤—7¦1¶A¢ìªÏö< ½¤‡á,Kâ…©è‹_l…¹~±nŒ¤½3aþ”BfNy4þ“?г(Ͼ?‰ D’¥9$HO šKjɲµ$jxIeõˆ{㸫$þ `ñù8M2ŽCyZGmòœÜðsãT ¿Xk³Zd¦ÓRðIžò 2°ÊQ¯¬‚'ycÙƒ‘Ç"kâV±&”ÒýÃÞHeàTÑXc³Oi^ )aõâË5s=ùÆD•Zz›Ò/«á@ËH 5b¼»Øž9¶n`õýÙûèá”Ì~ÏW6HÙaNz ‚1?ÈäNæ¢1],Š·Å%´W۬ߕjÇÅ5àÕwk¹-'Ü‘=ÊÁ»‚|<"žh¾˜ƒwî+d†O)¿ZSÐ4ø)'t¦ÑŒzã(ÙU'ø Q!ôB÷Á¾Ø›Cˆm ëUë·ö°°ÒºôËJäHaMvâ” 7R|´¨Î6c="Pú¬ŠDXE‹%óèz,5>²´±õ j:Hí­ÇÉXT±Gë>ªK»ÄaŸÂÑñònm_*ž¶Û_À7û2V:2Ö_ÕÊùVíÕ•¨œêc¾dœ‘£8@7ãä–/î2ÔV-A†z•†9g†º£³,›ZTmÈn"²j*ôâ[zD¶i(ëY=kê C¨ Ê‘!¿- FŽfÈÒèÁ¬ª=^¤)8½@ñÞÛ•º’Vû‘nÃ<҇ߞ{Ä@ßVãƒÇ½ªë½+CXËbäf *—fNC˜9â·³“RéâFÊß7ð¦hÞIfÎL6pÇ éá’0wœö„"’´–†Àöâœö (³°@¤Á‹Ù!fÞª˜°y@)âyÎÕp؇#˜™¸æ¼õ±0À4ôÜ}ž£¢ÿ/4|~¾)Ö^t!€¥1CeMV­ôêÁr¯›ÒdËDŠÀ|¯uáa£/¢˜i²„/;%Í p'ô˜GOÂ_î&¡ÕUiå{ 7‚ê†]l÷4©µ{;!´W»w*.¾`'¿ò»QR4îŸuÛ> Ç[î[}áßóDÉéÏÉN¸ä>}-X^ÑCk‹Îy¸Sºsž"Ÿªe#æ¼eL/´Óîý¯Š¦ ×Çgµ/­}fOßË|v¿\·Ê·¯[寨[eUõÃ_W¶j-Ý=Ýg8xÛ‡_'F¯ mÜR-¬ß`ÜõjŠ v˜ÌDÃÚ’é4OÙC”,²øI·˜Ä6]Ø­¬Dãxô§Aà îÎp¶ô¨>Ý2ß”z©‰¹’]ñ²Šï—ßVQ~ýº–úÙaûCl“T”Y$í;Nê/•9ók•9óW—9³¾k«™íIþ>d|Ëۉ展T®N; æ£`þ¾³®læ[V6óWU6³Å­`MòÖ§sÛ4Æ<Êå-‹C0 Á\¦££X>Šåï[,—*àù5*àù¥ x˜>±“ÍkJÞíP>ëTD>ÿÆ›RêyÒ†Ò•ôŽòð(·’‡Hx›zq– …BpüÓ]NN×Þ(]/dsŒ"ÛëÕ™&ãÈa§òr«×]{Ý¡àÕÙ‰¸Ï8KrŽÎXÀWÞñ>ònº½aû¢Ýt‡í^W¿]$?T±ìõ½AåÙy**AUžìÚÝ¡7(žƒ¬2ÅÕaýÑ{¿9h÷+X¤Îb–-æpŒÏ7«òΨëúýÞ`èµn.½Q_½xmbÖÀôík`ú¢ ›,‰×O‹*˜¶&ÿê"˜{ }óÿMùmLyµ€Ô^ÊÕB©GíuÔ^ß·5¯ë§ú–õS•?S]¿l$íŠê©»³ûÏ|qÒuÝòï(ÿÖÊ¿=_iò—ëòúõêòúëêò¥=ébj}MÞ½†‚Evd¸ˆ?ï­Œï÷𠈹JÏÕâý¦« …ðÑ}±Fh¹œ³_§œ³ÿ|9gÚÍpCòS+:‹XñÞîíª¼óK¿ÊtOOÏ2²ÉúêülÍ…êêÐækChëðÒÁøhNÕÿ_ „E¶ÁCÚ›D,j—û¶µËýõµËm¢«*—ï1CÕlÄT|ßg©óïÄô-–”h¥báò[nˆ«šK%Ó·ªÄþ̸GÍr4|¿?÷\õÞ¯SõÞ_®zOîbRzjÍ{!˜%¬›U·|_ˆ`.P¤Þ¥RËw”J¿u©dÒÆ’lZp"¸…˜9Ô*à«óæ ¢ ÔêÀ¯ÕêÀ_ÝêÀÚî[×éà ×V6@Àšý†mø•ÿÉøú¤¾-ź½uôS¦&2ÕO¡:¤Þ#âuî -Ö´‡°€@éqùGCôû3D‹†¾mà e€ŽÍ‹Ò°|•.µ©9FUY¬-6€Ÿ_¬6·É©•zc¼YµWB4ZsøµZsø+Zs˜g–9JJëÇ!Žt;ñá[hÒaÐç‚Ø#Éh¿qT¤ßÅYÁŽ8ÝÌõ¨“æ¡ÚfÔsrŸ×!RÒ8ÒGOeOE- U:4rOG;ÿ·jçÓ²ì7LÊRwb)v'I:åxó…, `Û$` üðXàæ¼~ýú(„k a±†ÄSu¸×4idùSÌ$ñHÊY10ßb&sF¢U–¤wx™+Ξ1²ð(ê¢þ%‹úu`_U¡.2–)Á IŒA4qÑ6y’IUô?Á«„NÓˆL<fa†ÆÂ:ÎJš$qœ<:—ôÙ‰`&þ(`¸$÷#Nx)©K³¬…hõ5š.¦EÏ"$½q’ G4,4Gþ4g‡S~í÷𫪿‡_Oÿ=7 Ãœ`~Tƒ/M sëŒõ`7ÕàQ Õà÷¢i·RU¿FU©ƒª­î[Ó:u\ÉßH—M:NÏÕFË‹¸µD=-¡’Ë+åD ZÉeQ¯D¼Êå3_ó[XêdšäB<–“Ô«¥Ln÷Ò«Œr&‘Ia·”üå¼rx¸á\´ë^còU‡g>qu¡Ûƒ¯x¾ÃYƃ}Í«ƒ½Ÿ†„ië&ÌU섉íÇâ¸2tÈŠ‘‹Å9Iy#™pÓ•¿¤%uxJ*iˆ_«î}t;#½F¯—LøÀ)([¾_ÙÉcĺ…”Ó_×½a…,ú8Uìg®›ë[çr[JK-*KÆlVj€~¢NqW¶€ÛÔàÃ8í±r`ö }¢åáUw¢6t$êd£#µoß‘Zkär“bûD`«þÓØÿZ~|Ù¨Qb'êUÍžOq€×b’{èt½vü£2þm)c¾]QXÙ}Ñ{RJ>緯ߜAO¡3ç|zŸ@†¿{ýn AÄÇ:Rèí›ub’ŒÌSùâ{­~‘P¦ìæÀ^›¹L´.§¿nò—EÖ–àŒ-o¶UGÀ Uõç54Â}6ƒBô·:ô~ã:¿YPˆÆã´ðûöâñ‘]«apÈ”ƒ¡\ÊÝÊn—¾0´R!›Dð 7,Mç¯oÞ¾EÙ„©žn×E9>`w|ñÒízÜÒh±hO©¾Ô¥Da ¯!Å m*ÁH¼¬F•š8D‰’îwIŠjvN…1ES6LtÉùâ+™ šÉŒ+vûÌ¡`8Ç/cœB´rÕwúËßdüðYÉF-_Âô€‚äÛƒÜ#’ZyÖ¡8¾¬ \V¨Ó~Žë.Šêìñ,ñ#˜q\¹ÃöÒ¯dÒQo ß3™å¶ ª.?µœb\~申euê=:@ÑD˜ãèþ@|ã1Êv*¶¢LûRËrÆë¶ØÁsFpÆ´ÍåÚ‰ŽÞ¼vœ·pÚ 5s$nY]Ù³“â¯õf'Ò¿3ý¢ñbžu‚,÷Ò4I•]'ü›2ÎyPCÞ/¦Á¬Á=µÉA…ö|ž¿DðÙj&Ìì¹BlElÉ6вŒÁ±‹ýËc»Êå$ˆbãš},ߟb×q:Ñ—Jàa…Ðaj`ePbæ;ÙÀ|F<‡hÿ|J#©Æð™iðéµ}‰Å]7ÌFÇŽÙßAÇlÜiÝ2[Û%qî¤e¶ÆìØ3û[î™Û(›fËÏ»!µÝ˜î›fùo«ov˜ÌËòh¬‘˜Ô¾Ùb¯¾•ÆÙÏm}+<+¿§žÏ£äºä¾áç¾ç˾èç¹¶Úßojž‡4©Mô»`-݌㈼³”ÿƒ¬°I ü©) „•ãÑÃ@ø"œ\…üÿ£ Î4¥˜+QrVÈ®§X‰Ã+’Ñ#dDggޤiðt“s±óÜ-¢ìž…7NSO/2–Þu¼ú±„ä†E¡Šmµ×ƒ—"/³! °å‹ªWZw­5¯N+Kr­s¢;p·'qp—Umxñ*_ã‹lÕÈ?×XÐå¡lW„2÷,Oã|å\2L(’!» )ì€>Ä0µ¨c̃Û(Žò' ‹›í'0 „aá ‹åº1ÐÉ7«eù%¹ÕÛŒŸÉ3ûgr[wTf€5ö±°šC‚éi¨¯ä™ôe·«~ÏêÏJBÎʈsS¨YMoÎÿô˜¤! ï(¼öÀjÅhä5ê²GG½j'ÚÌ()âÊ8¼*RAzÚ¼dú­W0æ{ÜÒ»OÂòoPWi‘ŽÙ–Êe¿jò’߬© ^;7DÀ-–ªÚ¼~Zæ›Ð­ðç³~àß™ERÏ"9 ^܉ERÅaK‹ÆÙÖÉ¢³íŒ…¼¤×,ŒÇç/9õåÂTRK|)d–@ˆº¸æA¦”•Xë £Ð‰‹»;p+Ž¿Å}(—ÌÎÄ•“ið…e"w‹{1Fý‹1ßõ™eÍÉ͵Éh~Ó“›[šŒðοÄÂÔìôW»é9ò½í¦§€³2.Å5v63\ÕB€x+ ZÕ¾Ö¬(+à³Allf².+€*^nò]a‰«$XƒMùNÖ²mǹ®c¬ó¼-4²ÐÃUdלJûÃÁ¨9 àhÚÇA©y4mÌRÀXqš·|˜Vë4¯:99'chçÿÊ‹†B)-ÿ[\G9sþÍ ʘý¸á%LjØÐò4§yâ’mz|õAΪ%ç•!ÿßRÊ”ámJÎâ‹lY¹µG×ÐŽ~ Ó´¹{Ôu:«4ôâ‡oC²j”9su‚QôS\•Qb,7@W\:†NÄêèmE£P›{Ëã<Ó+q«¬<™´:}ŽApÄü!¯Ï@¡˜å,D?ÿGâKpQ©•ðŽ`DàZړ⤚ĩ!å)NYÜ&ÊŸˆs›§ \G'•0;€&åÆç¸þEê¡£h«"šö(\ö!0Ê$âX\ŽfæÔè<YAh«RÙLzª @Üž_Õ¹ZYT­q‘Š?/Ý%,UÂ#ÚJÆXfËÑõó–ÄfHµœp¹q›J·“”NŸ«xüômãí›7¯VŽXb†º[#‡Y¹9™8V$Ý2‡G£™ó%ŠôßÖµ!ŽÇ…©ÊÙ[ùŽ<_þì9Lv µg:ä¬JlÃÆ…Äâvaá5¹”[(œg’Fjg¯<§‚ +&ãЮ߇C»†hQ  ¤ì‰u…É›ªd+G£ìñ–åxž;™¯•ðQˆ¡i$1…qÿ÷Ûwý?ü…ùý™¬9xæÜ&yžLáû$?sÒèîÊ%ó}ÐM(qÃÅŠ!¹-÷ÜVÂ'™SEr¤w\*òÿÞ/faÊøZÀ¥¯“iÇ‘JN_OV¼B¯;ºöî°Ýëúxíü¹Œe#AuUŽ+å8±]ä8‰{ä-ÃÏý¡ EùçÒŠÌîç6ºØ±7ÀY7ý”}ܸ£á•×¶›îÐk9õ/eÀ^SM D)XpÅ0ƒðÀ‰±ÇÏâü¾Ým9$ˆM¨¸AË"Ÿ/r2€OôáÃÄyÿÁtþã'á–Ë? ¦Ùq}ß±Z:üyü^§Ã·•>¾-ã/PÆ)‰c0BÆÉí`Žº5¡ŽfÓÚp?x^Ÿ«ŸöG"¸peÎÅ+sP:®?ÔkJŒ[Y®×Ó V»û"š}±ÙJÆÕ‘m×Ô(åµl¼&Ôy4 ÙW if-ÅÞ…7 ºh‘Á«ñ‡ƒÏ7îÅ#OŸî$·ƒã{ôföjŽÉÊ6öØožÏ—ØÒ|ÊàI-ûeÔýÐí}"’ühöe–ìÊs‰€ðÉL°‡QFb G=¼È}²#ƒOî &·§šëNÙ˜Ev[ŠéThOAýuIG»ZÑ‘Õ‚Ž¶\OøwDÍ‘€tR~± âæ9 "·>©>©xt'Ë*íÏ›koxÕkíÙ&Wö«<qT¸Õpìf #.ßÞ>¹mzòÁ'’$ÝYHF=³–‚´€û)áÁìXÁªò<|x\²F0ÅJ¶´œ,bÊ®qˆïÝÖÍ%ß¿OîgÐ÷AèÜq«ñ1x²!Ïé RÕ—’‚„6Õ|”=/ÅYuŒ ŽüVŠÜ›aûÚëQíÐK!vK¥Ë¢)Ãl|*Ü^×slb÷|®w ·ºÀ§Š–É®jO$/í@’ Îä2Ò3ˆ8[ÓCñàœŠÆ5ÚB*Ë3€óp:ÌÞG¯uÓ÷×n×ë;Ÿ-é Özš<@æ2K¹ôÆ~ÈTأΰÝïx7Í«^»IMF¸^Äyù„Ð2òóñ½¥êí"EíÕ^í&J¼è{t4̆Ҡ¢ç>vù¦‹ 0àl m R•zLÖ6J°GÙì÷¹R} ^l€[1(a¦ä2Ê0 0íkN`ל²©ÌtÁ¨‚À"ð+§[´iw-ˆ„Æ‘g‚üQ¿ß§†Ž‚nd á"lS³å±6â §y–p+ä‘àP{¬‚Wç—Þðâgçl9/ùìõL˾;¶ÝŽÝÜ{³ø‰+ÚyBõEV]EXxž‰¦24>_cʆ•vêO(¢-µPàñ‰¶Úôá~нc#q*ð™Òaõ~úlž0YÀL¾>9néò hÀÝdun©Í²h´­RKSœãæSg4ðºÞ§ÚÛtËœÞpÛŸ Ï*E«:¹…8/:çðvÃ¥„úà»(Y¾Gf!+¯È‘¯¦zS¦6ížr™»îµg jEþÄ3 ÁúÛ{MÎ<(@BùÛEŽ ¹:MŸ,àuÉÊV1“bÿƒ™õšr ~ð¹Î‚â¬j¬&7ß{£A³Ö&ª¾buÀ^4ÿü׿ü@Ï\ã/8ø†jT´T¨nHHª¬K®Pm ¹n)uŠóáíz°ö س˜2Na¹—:‚à‡O?‡å®)§30ÙtAöSt³^QÈÁo'Áº–[Ñ lÄšpûäKühŠøBØ­ÀÚñº8ô–¾\¿yåÙ,r6¾gÛ.1¼IxÎ=Êüi`V¢¦¨JíI^·}ß^€_GX*sycƒtÆÿP›íUð+[\:Õ0†ñ…$¹Qlà£7¸À®T0¢º[ žÝ,cS.áOQ†m6å–ˆ* Ëf‰U2Õæ%®§º Lð$šE˜6ºª¾ù Y]è—–¤ßîÃõ‡nÛ‡€po‡ÌµÄ)7é0ó¥VA‹Ù½ž=ýZ1îÍûÞpØ»¦9Û¢ö¤% Žw1´¥-- Ú—W–P°t¦%˜a¯o$Oæ z½oxsí~ Æ§/’ƒ‹ÐŸ“oOò%fsjö\⢹óyü¯¢¦Üo£-¢2æÉ#äÉŒ“`CÖÙpr 7 E%:úè^벆!>M „çd 9ÿËÂkµàY±V ¬à/‡…w5!Óy­n‹ùZ0_ ,ràpÉÜX‚ õgíVø¢×iY°cQ ã7hµÝ.¹üF’†Q0kLP posÌ9+rF³Ï˜sl4_‡lÕWíì@Á©Õ½ïx˜äe#‘î®3œ­K¢þ×"H¡Z/—5ªy­‹0Ã_¦QIÚgðeæàœ°Àe<1fd‰¾×½lw=oÖæÏ–X½˜ù£4ÆôŠŠ^È3&?Ó3 0`*åÌa@rp<éül‰ùWܳ+·sQk)·ÞM€\sle¬ õbi~t²dÊ Ó€3@œ%ŽðþÍi"÷ZbÚwn§ãuvDZȨˆÞ™ó9¼â’F}IiCµWr™øSŸYNøRÈqš`ÐÒzAQ-×!DzüØ5EîH —èÒ¹6‚öŸ½K¸líS¯—ö&“Œ‰SQ(ðê(ûŽ{Ýî’·eÉô>Í’8 _AŠ+K£ ¦¦Ht¹Õ \lúø¥aûXW/–•CÎÇÉb–¿²'­m ÓW€~˹1Ö´nçr–[X¿« [º¡tkäv¬Ü ùBÎêùdÛµVpkøTë…V`ëø\²›Q†jïg˜:ýÝndz{gªrà·Þf„ÍV¯@¡öŽk¬v}õ7_£`A+¨Kÿ=r[5xü‡í7!ÛòøÛî8Bµæñ¶Þf„kÉã?l¹·\]… ëh+YWUÌZzj8¨!Éð·§b Ûv™ÿ¸-K¸ÖkýÇ­)YB¶¤å?Ö¦eßmµ:¶QV¬ù޵ó£Ä"žkS\^)—¢2À+[ˆö楄n–Î8Ig,­ Ú*¼j”T¸µ‰9„ÀÂÏꜙ`é‹]j'M‹\i)M dN­€´:U’íTŽ$$¥lê‘¥Ò1 nE»5ÔÎPͦ_k­³¸ Û+%¸õèØVç,µ¢eºŸi4­œ¢è¦Uc.„'Z™8VàdW®ãdþT v«×´Éo[>”÷±k¡ðÏÞûºÀË ]é ûîå– >îØNU~Ñ Ío6½ÌeIÂÃd¦üS”.rß[\üá¢~p‹—œp—u6Ý;3À¥Tlàaο*’BÔƒ ÛÖ3Ó}¹Û½Ouþ©ªòu, E™s…B&´®…œ¾×¥·• Ty+¾[·ªq%ûƒ^ÓÃô;+ˆãEšbËÙù\3ôkHÆ5Ü…;aæd®>‘™˜ÏÃIærÀ12·˜WÝ4Gƒ\ï&Ëá&²T£)¶ªÁWóïŽø Rä„sƒ-lf` É·•°â;¾q•Náà"O±òÄ+2üëÏö(\?U°ÀìÜßg›šÏ•!û£÷~“›QCJ¹¼í:ÿI¼ýÅ­þÑ@>3~vèwz¾gA!q’1I ðQЃr®Isª`ÈXBÌ4^—°ñ3æf`î¶hG£T ¶´gûî6[`_Ú¸LÏrO’‰3MR†Kjîcæç¥ûø~n²ƒãsóKÅüæºõ®å±\«%ʰ|¶i° ¯6Ü0ížMxæï$%"Vð#œÓoh¹¹êõP‘ë¶ŒŒ\&*:F-wÁUûÝtœ…Q ^pf©6¼Dü%c›ØbA7\›~WqI²Øh¶Ø%V0à;§¹ª5ðJ“,q2¢¦5¶ºŠ8Å7Kª”í)RÂÖ‹¡¡Û‘!ݶjÀ/YÞ]¤ÿîð/hë„å¶ÒV|EÇÖ‘O˃R8P²& „¡êF&æDà áº0Ÿ>àØ`.C›ëZÜûçmæ ƒ j*Ø ŠY Þï·ö¼Ü‚€Õ@Ðß?†ÏQCA.+œû–œ$yx ÉH˜ìz®š3ªd±ªzÐU Ï [E¢gÍ]ºû”Mþçïþ÷åzópõ‡»SpG뿊_þón ?(whaNÂb]'RoÁ'©¯ ˆQDÓNúøµÄŸoŠ?¿®økµ}¨d'û[Q¾m!÷Ø} ¹¡3[f¡¼®=Þ¬Œ‚¨xXຠ#À2³ÐÜ? ëÆí÷£¡gµáæyÝ.r&ÀGF Æà6°(Í­<º½aûBVZÛ·Íøw“<šÈúlrùfÆOPV.jÓWŽK…Tž‡^ÌlýjZQQáM©N\Žê æ+5Ð@é&,”ƒºIÁê¾Ì¡âÐâ…v³óàªè—¶û Y"–RàĤœÍ³º‚”h²æ¹JâP(ø$•ŽEÈYìzŸ,ÄBí²G)ë´°›¶[àZÚzºm,Ûcº¸×pÅÂ¥?uËØü Jåd÷gàü†Q6ð~§,˰,ÿ5IÁ²ݾ+ ‚YàÚ™¡‚|¼‡C—%ˆêèÑ6ö[ÂAô,‚+µtâÀÌ:(Œ8ZàÐtü!FN£²F3\ïºgçë§É4Qáù¥°ÌD¤/K’eWÜv}q dÉ/îþ|7®X‰oäÏ…m’ß¹óÈ0ªÅݽd‘ÅOxŠDÇŽ¼4 '\…Iùå¾³@q°JÈ+xÌ6r=ðü¡;>êÚÆ­0 i«ÕžKê§…´8vÜ·ÙÚŒûÝ |¶çl ÓJìI¸†Üƒ(¾…àƒÚ­QGDÔ-úœúã{.bGQÇËߪì.$]0Ãú­”¼nˤÐ*¨ÎB#‘Ø@DÐ$-¿_Óð«®@&|@XªYèoaAûk,hÀAñ&‘GáöªÏ_ds؃²º?Ús*¬N—>B´BG±Õ7c`)¸:rj ulvP ³±Ã¥>Ú–ßÈÇÛ=|AXª‡¬¢Ò´aƒ;n·å7]jIÛ¿½qBv—2i $¹qœŒ¿‡­›¥¯žÉrwµýOKöÞk¨†l|vПMµäÓ?ÛLFdN×ÐÞ"×Ù^“©s:lì×±˜TÊrCtpÛ…  kktˆÈÚ‘m5{¡ÚÚ]#Öw}ÿSo°2sþàc’†[¬ô4o£õ³",•y[ â{ÍÑ =ü¼ "(¢üi 4F]<þ­éþhL3<ñÅt\kd8Õ¾o·Z^Máz…!›Ù¼$Ÿ–`Ý%3+Ï®}Ùíq‘Õª¹—Ö°£»YÂer#ˆãF)yÒ !8çïRCù%1Éþ´ö» © v¥J€InÄr%°º€¤nÕ‘ˆ%,TY¿‚â!‰«¾`|@qõÁñ±È.+!ÐLyÿ‡¹Œ‚q÷¯ŽlF Œ›{alúꮄ.ÚìÚ‚¾ð†Í«šr OX>¾· ö `î]Ôî„ûÖ3í÷¸Ê«?ÑyÂuå<{\Ó d[ÎÓê3›JpjÃ-G·9ltëá"³šQÆÍÖ 2ÛÒ¼j¶LWK÷˰ZC´]oäIÒØÔv}-kÜ 2 ’é% jw,/mG&Ú—7h½Ë—ÐÄk€Ö7|íõá°}íõFuÂp6œ,¬BªÐ@ûÚí~¶-)Už,ßái0{ÒÊ/«…BM-§¡Û*8 x[ÛKcPÛðÂÞlÍØJ้ß]Ùê‹@HèÚ…4†‹¨5e1µó^Q¬©‘|¡mG.Ù*Ì¡{µt¡ª:ˆKo uîL­œŒž¨ÝÁÕʈ¾µ% ”‹’•:×/ ¸wVc9N5o5J5£¡€Øž:hÖÛ³“d€<¸S™ø‘œ€GâX3ç.Ms‡¿­’Œñ¦«±Q‡È º—7nëºÝmymªCíB…&n=M¢™º½¸a?Ìû^¯ãQ[c½O’˜3òàVçÍû å–$–²œ¢vöìñêÔ‰apWMœP?ÑÓ&¹¹I‹›»ç`…'nu¥]Þd·„-œŸSÇÇJ%šOÈ€<ª¿æÍ¸øœÐE¦|tM] :êEò{qÛ ä3(à_]’owrêNÝ ! N¾‹©ð>ÓãÑØžÉwÜîåȽ$rU'˜Ý-àÆ*uøkîA ?SïÀÓΔ…Q€ÕpÉPè©»ÁÔnXXúÐÇ(¿ç^®å*qš·Kìé <P,¼èn"|fòè:ŒBLSÕES¨l`wÕYf÷Sðm&®Ì€ï.}Y yygD_#œ ÂÈ®DÛʜ©0@é-íª›qÏ•ºCï'jMpö•®zaX:ÃÐ5¹X¶2·ëaN¼(Ðq9èúT0Eý #œº%&T áaB%OpЦ÷¡·Ôª±<Z6•§BøÙôhƒÿÌÒmäd’ˆ Ì›s=OÒîÚž‡Ñ|üÏsáæpw(ŸÆÿuòÿPK@NvLG3 ]z—z—OEBPS/cover.png‰PNG  IHDRxQ"Ug· iCCPICC Profile8U]hU>»sg#$ÎSl4…t¨? % “V4¡´ºÝÝ6n–I6Ú"èdöîΘÉÎ83»ý¡OEP|1ê›Ä¿·€ (õÛ>´/• %ÚÔ (>´øƒP苦ë™;3™iº±Þeî|óïž{î¹gï蹪X–‘š®-2âs‡ˆ=+„‡ ¡WQ+]©L6O wµ[ßCÂ{_ÙÕÝþŸ­·F qb³æ¨ ˆð§UËvzú‘?êZöbè·1@Ä/z¸ác×Ãs>~ifä,âÓˆUSjˆ—ÌÅøF û1°Ö_ Mjëªèå¢b›uÝ ±pïaþŸmÁh…ómçϙŸ>„ïa\û+5%çáQÄKª’ŸFüâkm}¶àÛ–›‘?ÜÞš¯¦ïD\¬Ûª¾Ÿ¤­µŠ!~ç„6ó,â-ˆÏ7çÊSÁØ«ª“ÅœÁvÄ·5Zòò;À‰º[šñÇrûmSžòçåê5šË{yDüú¼yHö}rŸ9íé|èó„–-ü¥—”ƒăˆ¡FAöçâþ±ÜJjåI.’£[/ã]m¦èÏK 7ÔKëúR ÿD³‹r€¯Y«QŒOÚ-¹êëùQÅÎ|Ÿ|…6«¾ ³ (˜0‡½ MXd(@ߨh©ƒ2­Š_¡fçÀ<ò:´™ÍÁ¾Â”þÈÈ_ƒù¸Î´*d‡>‚²üެÓeñ«…\c?~,7?& ÙƒÏ^2Iö‘q2"yŠ@ÿ«g Ÿ|UP`þoØiTXtXML:com.adobe.xmp Michael Sweet Copyright 2017 Michael Sweet New Icon yP~DIDATxÚìÝy˜TÅÕøñ¾Ã:€ ¸ ¢‚¼ ‚à.*JPT\HÔhLРFã/.1úº Qcˆ;q‹¸£"‰Šy5.hÄ5h¢¨D\AQÔ(`gºï½u‹ßÀÐËížè;Sçô·žyf>=<Ï9UuoŸ®ª›Z•JñÅ_|ñÅ_|ñÅ_|ñÅ_|Uä«èlÇãñx<Çãñx<ÁÂãñx<Çãñx<_1Otðx<Çãñx<ÇWÌçP[ÞoÄãñx<Çãñx<·%V4Ø&þx<Çãñx<Çãñ…eÇãñx<ÇãñøŠùFÖEØ‚áñx<Çãñx<Çóo´XUÆ¿„Çãñx<Çãñx<¿nEƒ]÷-ÏæÖ*lÜ?€Çãñx<Çãñx<_è›¶%Ãâñx<Çãñx<ÇùÈ–}¤$Çãñx<Çãñx|ž/µãÂÆ¼ÒÃãñx<Çãñx</æóOŒÌ]ᕨgàñx<Çãñx<ÇçùxQbßÇãñx<Çãñx|1¿§Â|sUÉoâñx<Çãñx<ÇÛTc‡F–sÞÇãñx<Çãñx|þІ†…õ [r‡Çãñx<Çãñx¼Í> ÒÆ¸¼?Äü3x<Çãñx<ÇãñÙ>æ%ö]¬Âãñx<Çãñx</îckžÍýsÞ!x<Çãñx<Çãñ±~ͲwŠCñõx<Çãñx<Çãñ1>ç HÛØ ‹Çãñx<Çãñx<_ÜÇ/x(òK=‹Çãñx<Çãñx<_ÜÇ!lɧVàñx<Çãñx<Çóùå‡ì²D‰§eâñx<Çãñx<ÇúøÇ®ˆ(ñëðx<Çãñx<Çãm*î8[ä;ÅŽÀãñx<Çãñx<_·¢Áæ' Ï´EÎ{Àãñx<Çãñx<Ïö¥J/k¤¤Çãñx<Çãñx<¾Ê}Yë"JÿF<Çãñx<ÇãñxûÔ [rë…Åãñx<Çãñx</þÍüjDl‰¢Ñáñx<Çãñx<ǯJyŠT#Çãñx<ÇãñøêõE]ù5 <Çãñx<Çãñø¦øâ‹/¾øâ‹/¾øâ‹/¾øâ‹/¾ýj´8ÑxaÇãñx<Çãñx<~µ/Wç~áñx<Çãñx<Ç{ë½u‚Háñx<Çãñx<oܯûSTEq¿Çãñx<Çãñx<>*oEƒ5±¤Çãñx<Çãñx<_X¨ðŠ”+Š6ðx<Çãñx<Çã½ì ^™0"<Çãñx<Çãñøâ~Ý£‚‚DT²hÇãñx<Çãñx<Ÿç-Nä½ÞÃãñx<Çãñx</æóKQÁˆ¨xõÇãñx<Çãñx<>ÛǬˆ(gÇãñx<Çãñx|{FCöʇ(®t‘÷M<Çãñx<ÇãñøXŸ³þ¡°D·"Çãñx<Çãñx<>ÞÇì¸(¶ ÃùÇãñx<Çãñxüê¿æ,{ˆ}L…Í:O2Âãñx<Çãñx</îóÏlˆŠì»ˆ N}Àãñx<Çãñx<Ïó©Æ–Cx±ÿÇãñx<Çãñx|¡Ï92û”ÈՎ⟓‰Çãñx<Çãñx<ãK-Š(|e„Çãñx<Çãñx<_ܯ;¶!öèÈܵžÅãñx<Çãñx</îãŸEѰ.¢ÌgWàñx<Çãñx<ÇÛ”—~CÞ*ˆb<àñx<Çãñx<Çúü-%VDd•1ðx<Çãñx<Çãc|üv‹B9 Çãñx<Çãñx<¾áûñ/¶Eððx<Çãñx<Çã‹ùøòC”»¢ôN <Çãñx<Çãñø5+b_Pð¯ô?€Çãñx<Çãñx<¿fEC£%ŠÂáñx<Çãñx<Ç~3þÅ%Eàñx<Çãñx<Çó9å‡F·aäýÇãñx<Çãñx<ÞœÑP Ö0ðx<Çãñx<Çãc}㕉ØÇãñx<Çãñx|¡/¥Ëüðx<Çãñx<ÇãW›¢uˆ¸_áEx<Çãñx<ÇãñÅ}ãË!Ê_8Çãñx<Çãñx<¾Ê}ªXY¢ì_‡Çãñx<Çãñx<ïå¼"¿®ØïÅãñx<Çãñx<Ï÷M¨X”÷ñx<Çãñx<ÇW¯/çÅ^Ùe <Çãñx<ÇãñUí×iSðú†ï˜¸ßŽÇãñx<Çãñx<oвK^ñÅÇãñx<Çãñx|1Ÿ_09% /*ðx<Çãñx<Çã }Ñu¥ÿŠÇãñx<Çãñx<_èój^^YÂäþ.“Âãñx<Çãñx</êã×?4é7âñx<Çãñx<Çç¯hÈ{±)õ2<Çãñx<ÇãñøŸS“(R–𲿃Çãñx<Çãñx<_ÌÇç`âE˜|†Çãñx<Çãñx<Ÿïc7ZÄ?ÓýÇãñx<Çãñx¼×°u¢áq^V}"g-„ÉY/Çãñx<Çãñx<ãSQüžŠ¼²„Wp¶$Çãñx<Çãñx|¾Ï«Iä-LÎk kx<Çãñx<ÇãñëLþc*ò~\°ÃÃãñx<Çãñx</æS&CvÅ¢°>Çãñx<Çãñx<_ÔÇo±(Ü€ÑP®Àãñx<Çãñx</æã·[ÄmÀÈÿíx<Çãñx<Çãñy>ÿÅ%öcä÷€Çãñx<Çãñx<ŸçS…;.òŠy‡Lâñx<Çãñx<Çóñ"kßEüs,ðx<Çãñx<Çã }*¶&a þZð#<Çãñx<Çãñøüon«(zÒÃÚMx<Çãñx<Çãññ>ïä¯ô6 “Âãñx<Çãñx</êóQáé‘k«^aÇãñx<Çãñx<>fECa­Â4rÎ$Çãñx<Çãñx|¾yYá¥ÿ<Çãñx<ÇãñøÕ?©C{qa¹Çãñx<Çãñx<>[–Ú:aŠÿÇãñx<Çãñx<¾ÔÖ‰bë"Jÿcx<Çãñx<Çãñ ßlä5|Ÿïó}¾Ï÷ù>ßçû|Ÿïó}¾Ï÷ù>ßçûå¿ñU&•2ÅNàñx<Çãñx<Çç¬h(xq#U <Çãñx<ÇãñøX_¢&Qêø<Çãñx<ÇãñxSú0ȵ¥ˆ¢Œ"[2ðx<Çãñx<Çã½¼BC£E Ïàñx<Çãñx<Çÿ+!Àãñx<Çãñx<_1_þëË9mÇãñx<Çãñx|Uû5 ù ÀÃãñx<Çãñx</æó^ìŽ2Uä Çãñx<Çãñx<ÞË[ѰN‡ñhÝÑ‘!Çãñx<Çãñx|qßèZˆ¼UÇãñx<Çãñx|1ûšÂ3¼Ø_Çãñx<Çãñx<Ÿí×ü)ÌùÚÿ¼f]¹Çãñx<Çãñx<¾Ð¯«I„E–FlºÀãñx<Çãñx<÷¬‹ ~„Çãñx<Çãñx<_ÌÇÖ$r?˜"«#ðx<Çãñx<Çãó|ª¡&±ÖåT)¾ŸW¨Àãñx<Çãñx</ôñåS°#Œ+càñx<Çãñx<Çç=u"û$ɆRDL•"wcÇãñx<Çãñx|¾=¹Á+¾XÂÃãñx<Çãñx</泫^¸öõ…ÇH†YÇãñx<Çãñx<>ÖÇŠ˜_‘w¶$Çãñx<Çãñx|¡OÅÖ$ò“Ì{1Çãñx<Çãñx|¬/VœÈyˆEîy’x<Çãñx<Çãññ>Ux®Cá2óÄãñx<Çãñx<õù+LÁa’ Ï«Èz/÷onº©éÑ#Üi§pÐ 3l˜ùÁÌñÇG§žt’ùÑ̈fذpŸ}Ì.»˜v·Ù&ÜtSÓ¡CèyÄÇãñx<¾™¼ç…]»šm¶1}ú„†ƒ™¡CÍ¡‡š£6ÇrŠ=:úéOÍ~d~ð3|¸ùÞ÷½÷6»îjúõ {õ ·ÞÚl´ñÄã³}þâ‡Â… <n¾¹<Øœ|r4aBtß}ÑSOÙ—^²o¾i?üÐþç?öÛo­1«6 ÙåËí»ïF3fD“'G—^jF6‡î¸cر#ñÇãñx<o²ßh£p§Ì!‡˜“O6ãÆEøCôÐCöÕWíÂ…Ö÷Wmp³é´]¸Ð¾þzôÄÑÝwGW_mÎ=75Ê Ùdò…¯*Ÿ´CÁ¡‘^á!x|uùÍ6 ÷ÝלtRôÛßF÷ßog϶ß~»ªåš]ºÔþûßÑcE¿û9æ˜pûíÉÇãñx|ŽïÐ!ÜsOsòÉѵ×FOûY¥÷cä*ðx¾M›pß}ÍÅÛ¿ÿÝÖÕ­ª²f-ЦL1'œ`6ßœþ€Çãñx<^Œ÷¼pŸ}¢k®±óæ­ªÖfW¬°=dÆŒ »w§ÿàÝ÷ùå‡FËx¼<_Sc9$úË_ìÊ•«h«VYkíë¯G¿þµéуþÓ<~õÂN¡_ávÛ‘ßD½¹øbÁÝÃýø"7¼J¾n»-ºá†èŠ+¢ñã͹çšÓO7'dŽ;nÝ3žwÞÙôén±ó>ß·ic†n»Í~ù%÷o9÷rsæDW^î¿تýï¦/±Â+]½Àãø>}¢ßý®VÖ­ÅáùçÍÏ~vêDÿIÔGwÜ!·Ÿ„{ìA~õvölÁÝÃùø›ÓNc¶sUª¯·ï¿͘Ý~{4nœ9þøpð`Ó½{XSÃ|R]¾m[sì±ÑŸÿܲÏù’1j–-‹¦M3dzzcýïŽ_ó‚šD±*/ÀwîlÆŒ±ÿø—ŸòOЦN5¼úfŽþVq/½Ð@~õ¢ îÇ?¢Ð à"åûvþüèÙg£[n1£F5œÇ|¢Ð÷ì]u•]²„nßäa²xq4qbدý ïˆ[⛃¼FÀã]ñ55æ ƒ¢©S«ðü…Š]¥>ÿ<ºòÊpÇéo•õ ä79¯`EƒËñgEƒÖ÷Tö‘GÌ…†C†„µµÌ'â}M9âˆèñÇmѽ7ttÌšeF;v¤¿á[Ö§²VA4Z´ðB<ÞMß»w4a‚]¸«KÅ®Rÿø‡9òÈÐóèoñò ä7A/¿Ðàtü)4è¿`}ýõèæ›ÍÈ‘á[0ÿó›on.¼Ð.X@O®ð¸X±"š<9Ügú¾¥|±”zpïÿÞ÷ìÌ™\N’ºJ½óN4jTغ5ým½–­ä7¯æŒ7ãO¡¡º.[ÆDÏœù*¿ñÆÑwÒÇÔݾýÖœ~záÁ ôgüúø`kÿ4ò/áñÉøÖ­Í¸q6fö—q‰J§£Ë/;t ?óò ÌW z['Ü?…ZãW±7Þ0Ì|UAoŽ9Æ~ù%]KÒ(˜5+Üi'ú3¾‚¾XMÂ+^±Àãö{ìaçÌaÆ—w‰Z¸ÐüøÇôçX¯eEóU"^×Ö çâO¡Vîê†\{T$óÕø­¶Š~˜î$òF.¢+®Û·§?ã+â×Õ$‚âÏÆÌþŸ ¯­®½ÖÃ\/øFíÉ'ÃnÝèÏy^ÇŠæ«„¼ô ŽÇŸB­ o´¾ûÎ\tQض-óÕúysê©vÙ2:’ìQ0¾6ŒþŒßpŸŒdÃFJx|…½9ð@ûÑGÌï.Q‹›#èÿÙ@ÝaÌo•ôòW48 ´&_Å>ü0\spóUÙ¾C‡èϦó(Qd.¹$ôèÿø òy¯ J±æû… <¾ržã‚T.m¸å–†Õwô['˜¯ò*V4¸ ´õ¼Š=ôP¸ÝvÌWeùí·gÓ«Â!ðè£A—.ôüzûTñ 1G;x|¥=Çi®ˆ¿óN¸óÎô['˜¯’ó*ƒt7þhë««3§ŸÎ|UÚ›Cµß|CoÑ9æÍË=!’þo‚_w†d[ˆ­R„x|ýV[E=Ä$®ü•ɘsÎÉZ}W¥ý_ÍaÌoIxé['?…Ú†~®{ß}a§NÌW1Þó̸q6Šè$šoä¾ûÎwý¿>U¬Vä/~X÷L <¾~èP»d ÓwµÜ¥Í˜l¹e5÷é…æ·D½¦Ç[: ´ ¼×úàƒpÀæ«¿ÑF|\TE7r×]¶jEÿÇ7ɧ‚ÜÇ]EŽ‘Ì}r&¿AÞœq† CfíêºK[²$ÜwߪíÿŠž:ÁüVy/¿Ðàtü)4Ð*s«¯7§œÂ|µÆ÷ìiß{^Q]µ†™3ƒM7¥ÿãË÷ùg9„¹G8>ß ß¶m4y2“u•Þ¥¥ÓæG?ªÎþ¯è0Hæ·Ê{Ñ…÷ãO¡VÉ÷ZwßÖÖVûüÖ«—]¸ÎP7rÿþw¸Ùf\ßñeúT¬ þš]ŸÀã×ÓwëfgÍbš®êK”µæüó«°ÿ+Ø:Áü–œ×ñÔ gãO¡Vá ÙܹAïÞÕ;¿õîm?ÿœnP͵†`³Í¸¾ãËñkê A‘#%㛉ǯ—ßsO®L´ÕÍÜzëê~ÕÓÿU¬h`~KÊkYÑàhü)4Ð*ÿ^kÑ¢pÀ€jœ¯vØÁþç?tj áf›q}Ç7êóv\äl«ÈÝw‘ cvhàñey3j”M§™ši -z≠çoåãEA¡ù-9¯àŒ—ãO¡–È{­ÿþ7Ø}÷ꚯúõãyä´‚u \ßñE}β‡ §báå–+²_†Ç—í[µ2'2#Ób®Ro¾l½u•Œ‡A2¿%祯hp<þhI]žývõ!ÇU1_í´“]´ˆ¤Óòj \ßñ%|Î’Y…Šü}qk$ðøÆü&›DO?Í\L+z•úì³Õ«OÕ['˜ßòÂW4¸ ´¯b+WšÐ?_ È#Éi±µ††³!¹¾ã }ÌѹË!ržTàñåûÞ½íüùÌ´F®RË–»îª~¼¨9 ’ù- /ÿŒ§ãO¡–ìU¬¾><ì0ÍóÕÖ[s.­Ôº†.]¸¾ãc}þ·‚ÜÿùÏÉôðø²|¯^ýH+÷*µxqØ·¯îñ¢`ëó[r^ÅaîÆŸB-ñ«˜ï‡G¥s¾j×Îþë_¤˜V¢E>x×w|¡Ï¯I”üÕ9›.ðø¢~ûíyÀ2­iwiŸôè¡x¼h9 ’ù-/}ë„ãñ§Ð@kŽ«X:¤o¾Š¦L!¹´F›ùõ¯¹¾ã }ª¡,{CáZ<¾ߣ‡ýäæ\Z“ïÒæÏ·ÜRëxQs$óa^ÍanÆŸB­™®b_~tï®i¾2çžKZieuþ( ;Œë;>ï›ñÏ¢(<@²°’ÇÇøm·µ 0áÒÖóBõöÛá&›¨/ Îh`~KÎË? ÒéøSh 5ßUì7‚tÌWᡇZcÈ)­Üοti¸ýö\ßñÙ>¿üPX±ˆýã»w·}ÄTKÛýóŸA§NúÆ‹šBóa^ÁŠ—ãO¡Ö¬W± =ùóUŸ>vÙ2²IkZ­á­·‚ÚZ®ïø¼ ^áj‡œ¢fc¿¶ÚÊΛÇ$K«À]ÚÌ™aûöÊÆ‹š­̇Ix['œ?…Z37ó›ßÈž¯:w¶ï¿Oiës wï½\ßñ9‡A9I2fÇE€ÇÇú-·´|ÀôJ«Ø…ê±Ç‚V­4-·d>LÄ+8 ÒåøSh 5÷çºÖ†Ç'w¾Š¦N%‰´õ/´y&×wüº Åjq¬ððøüm±…}÷]&VZ…/TW^©i¼¨Ü:Á|X)¯c넳ñ§Ð@kZC}}8`€Äù*1‚ôÑ6¨óAد×w|ÎÖ‰ÂEìËðøœ¿n¾¹;—Y•–È'B?øšñ¢lëóae½ôBƒãñ§Ð@k™«ØìÙAëÖÂæ«Îí矓;Ú¶è…¸¾ã‹žÑõ¯ÄoÄW»¯­}Lsý.méÒ`ûíuŒ['˜òšÎhp0þh-ÕÌÅËš¯¢Ûo'k´ÊÜ9œ|2×w|ªÌÔ3ðøTtï½Ì¤´dk o¼´k§`¼¨)40&á…\?…Z‹]Â|?Üi')óUxÀÖZ²F«Lç_²$Èz`9÷ÕéWÿÅ+"rêYÅ <>eÎ>›i”Ö -úãŒg40&䵬hp4þh-y {íµ U+óU‡<¡œVáÎÇ\ß«Ü}HfA¡"æGøªõáС6 ™CiÍôF÷¤“¤/]+˜+ìœÑàrü)4ÐZ¶™‹.r¾2¿ÿ=™¢U¶YkÃ}÷å~ š}!j¨XíûKñÕç·ÝÖ.^ÌJk¾kU}}0p èñ%¿ÐÀ|˜ W·¢Á­øSh µð%,“ ú÷wy¾  ²QD¦h•ïüsæ¬>•ûêô¥ŸŠYüm|Õúví¢×^cê¤5÷µjÞ¼°sg¹ãKÓã-™+îEÜ?…ZË_Â^}Õåù*š9³Ú”NÛ¹s£^ˆþö·è/‰n¿Ý\w¹äsÎ9æ¿0çŸo~ó3q¢¹í¶hêÔèᇣ§ŸŽfͲsæØ>²ß|C/Ñ̹çr?Pµ>æeqg<”úgðU壻îbÒ¤µH‹¦L‘;¾”m`>¬¬—¿¢ÁéøSh 91‘þð‡nÎ?áàÁUWVøúëè嗣ɓ͹ç†Gl¿}XS³AñÜd“pРpÔ(sùåÑý÷ÛÙ³íòåôù5Ñ^¹2Øl3îªÓÇn´ðb×?kWGà«Ö›_ü‚“Ö’7jÆ _*¶N0&åUlp7þhN¼Ýš;wí»Y·ÆKôä“UcìK/™ÿýß oßfŠ·ná!áØ±Ñ´ivÙ²jîüæÒK¹¨N_ø²ÒÅW¯÷ßß÷ ´–¼Q˜7/h×NâøÒ²¢ù0¯àñ–.ÇŸBÍ•¹ô„\/á{(¿mX±"úë_ÃO 6Ý´%çÿ֭áCÍ5רwÞ©Æ›·Å‹ƒví¸¨B_zß…WzK¾ŠüÖ[Û¯¾â.¡Ü)uÉ;¾}óÍèÅ£'žˆx š<Ù\½¹ürsþùæ¿0¿ü¥¹øbsÅæ†¢?þ1š6-ú׿8b³¬ºøo+q|): ’ù°ò^ÓaÆŸBÍ•{ƒùóKŒ×"ã%š>]m´ß{/üñƒ¶m›ÿ{ô0¿øEôøã¶¾¾ŠªlcÆp?P…>•µæ!öW[5¯&ß¶môê«Ü"Ä_ɬµŸ~=ù¤ùýïÃSO ÷Ý7Øxãõ‡Aÿþáˆ梋¢éÓí—_áü€û~ЯŸ¸ñ¥bEóaR^þЧãO¡æØÛ-gÆËÀÖZ…÷ žtRsì‚“óm­9ë,ûŸÿTÅÍÛ»ï÷Uç Ëåü:|uyó›ßps3]~ñEtÇáI'…{îtì˜lü·Û.<î8sãöã‰üê½øbS.WNŒ/E…æÏÊ{-g48 4‡î.\û{Ë—èþûõÝž™ÓOÚ´‘t½hßÞœ}v5|°q÷ÕæK,ð ´çã«Ð`}Ÿ›kmôÚkæÒKƒÝw<¯eò5p ùõ¯íìÙ*?‚hÚåjôhYãKÁÖ æÃä¼–­ŽÆ_t¡Á\qE¸Ç…_AÜ7K|UÒ~xxÌ1á¨Qæ´ÓÌ/Žg&L0'š[o~ØÎžm—,áÎ!>§gåÄxéÛ×F‘ž›´úzsÞyAûöR¯µµæœstoRŽž}–ûjó©\”óöiíËR~Ü?ƒ¯ _SýóŸU]_øî»húôðÔSƒ-·t(_Ûnk~÷»j~t³ýæ›`óÍ/e‡A2VÖG·N8Ù…†ÓNÜÿkkƒ¾}ÃC O=Õ\~yt÷ÝÑÌ™ö믫ýs‹O? Ö=~¢Åòe&MRÒÝvÓp½¨­5çžk-ÒÚùƒ]wå~ ª|ªH­"¦\Q²¶×éÍ9çTï­À'Ÿ˜³Î :tp7_:˜3ϬÚ-ÑÔ©‚Æ—Ò­ÌŸ•ñºoé\üåtõÏ  0gžýßÿUmÑ!>¼…óåyjÖêGÏ>›õD ׋Ì7ê¼s»÷^îªÊ§ü\äç”(ò¾ãeÿ¯ß÷ìi¿û®ßÁ¾ùf8rdЪ•Œ|ÕÔ„Ç[§uC†H_¢ ÁÚ§N0&ä圎¿èBC¸¦Ð ´ÿWkÑ!š6­eã¬#’fâÄ‚»5%ã%1Bßþ#A·nÜTOÅm®ðŠ&‰¯"=ýtÕ•ž~:<ø`¡ù ÷Û/š>]Ó–ËÆó5s¦”ñ¥èñ–ÌŸ•÷¢ îÇ_ÑŠÕãÅóÂAƒ¢¬†«˜õý`ÓM[0þfâDñ1¬« GŽT~½Øj«hæLmËyFæ~ z|ÞŽ /¯bá箂ðSøjñáÉ'WW‰á¡‡Öîžß>}Ìí·Û0¬’Ä…ûí'"_ ¶N0&çuœÑàlüu¬h¨¢ñÒ§O4y²úS¨ÃsÎiÁøKßtiƒ üÞ÷ªâzѦMôÀÚî·¹¨¿¦ÞàÇ)éù1% |ønݪç A»pa0b„²ü†{îiß}·**DÏ<#"_ò·N0&èU¬hp7þ*V4TßxÙzksÝuvÅ µ÷sç¶XüwÙE|™f̘*º^ÔÔDwÞ©§ç¯X´iÃý@•ø¼%¶a¬;æ¯ÞGÓ¦UE‰Ásýõ~ÇŽ:óÛ®¹öÚjXƒî³ûùÒòÔ æÏD¼Š3Ü(¼ÐPÕãeãÍøñZŸ”ì½w‹Äß\~¹è¸™o¬ºë…ç™›nÒsÛ6l÷UâsNqÈ=È!f£…¯ydUTÞ|3Øcõù ¶óæ)_Ôðä“îçKÁ ÌŸÉyá['\¿¢Ç[VëxéÜÙL™¢ðâ5yr‹ÄÓÎ+8hO?´jU× 5{(ÌĉÜT‰Ï{Fź7ü×/y^›ïÒÅ~ñ…òÃwß…ç´jU-ùíÐÁÜt“µVqNƒ=÷t<_Z¶N0&â…¯hp=þ*V40^¼ð¸ãìÒ¥ªîF–.]ýž¹YãÙ§àˆ}ð¿ñÆÕ{½èÐÁ¾õ–†žÿþûÜT‰=ÚÁ‹{溓ðŠ½¦¥YÅf·`‡ª0¿ÁØO>Q»¨á±Ç¿¾¢ù3Q¯`ë„Ëñ×÷Ô‰ê/Ý»G³fiºx…ƒ7s<ͯ~%÷S¢ê¼Ëñ=zèØIl¿=÷Õàó ÙåŠÂFÞa’xm~»ítŸó=þ¸ß¹sõæ·S'óÇ?ª]Ô°Ûn.Ç_þŠæÏ½ŽÇ[:ùO`¼dù¢'ŸTså2&4s<ÍÔ©RcõÛßÒÿýT*<è kTÃ3Ïä~ |Î’~Ñó$½¬Z^­7“'+®2˜+¯ jjèæÂ uV‘~Øåøky¼%óg"^Áã-]Ž¿šÃ /k¾ß¦Ñ²YÝΞÝÌñ´sæˆ ÔâÅ~§Nôÿ5ÅÓ?ýIü=Û“Or?P ¾¡&‘¿à!v'FV ¯Î÷îmÃPå[P[WþøÇô‡oΚþ_èÃ#d—Ø.¿œûõ>̓Ÿ’d±Mx=>Øe…;ö,¶Ù†ü6êƒC±uujònîºËÍøky¼%óg"^Áa.Ç_A¡ñR‡cÇJ¿r{îÙ<ñŒ\Þí\:í·kGÿñžÍ+·ÛG>Èý€zŸÿâ «D÷È ¯ÏG>ª­ÊðÙg~Ïžä·Lî¿¿]¾\IêW¬ðkkŒ¿Ž3/ y-['¿‚­Œ—RÞ“¿†üôÓ›'žváByoG_þ_ôþíä“ß°ÍËý€zŸŠ-?øñ{0âÿŠíƒAƒ´U¾üÒïÓ‡ü6ÉhÑÑÂNp0þê¶N0¾*éåop:þ¡ð Œ—Æ}ÿþB¦°æ½ôäÉÍÏ.]DÖÚ&O¦ÿõmÚØÏ?—z»žÉøk7 ‘_­>þ……ŠB†×ᣧŸVUeX²$èߟü®‡/½TGˆžzÊÁø++40^*ëu¬hp6þFøŠÆK9ÞL˜ ø²õÖ[ÍO¡,™3Πÿ—šß®½VðÝÅÚÏɯVŸ*õ!gÁ–Œ‚xÙ>2DU•! ƒÁƒÉïzúššèÙg5tc‚-·t-þ ¶N0^’óÊÎhp-þšV40^ŠúŽíÒ¥R/[Aà·k—t<ƒáÃEÎ0kÏx¦ÿÇï™ßw_Á—#d~Óíc¶U”.Qà5ùèùç5Ìÿþ/ùÝ ¿å–vÑ"=!<ï<×âo„¯h`¼$ê¬hp9þúoÉøŠõæê«O³{í•t|‚ýHddvÙ…þ_Ê{žýòK©óÛ…2¿éö¹Ÿo7¶ #ÿóp¼dì¼³¦*Côè£äwÃ}pðÁ6ŠÄ/j˜3ǵøkZÑÀx©¸WpFƒËñW°¢ñR–ïÞÝÔw\§Ÿžt|ÂÑ£EÎ0ÛoOÿ/íÍm·Iíö÷ÜÃü¦Û§Š<µÂ‹Ýháãy3i’š*ƒýä“`“MÈoE¼è®ë>éÙÓ©øG Œ—D½² ®Å_Ç Œ—²®_þ³ÔDßygÒñ1çœ#òjÞµ+ý¿´=Têg„¯¾Êü¦Û¯þ{jy[,ò~^¾ïØQÏ }?4ˆüVÌ·j½ð‚ô^ŽíTüul`¼$äœÑàrüuÑÀx)僽÷–úŽëÍ7“ŽOxÙe"K™mÚÐÿñ:}p˜7ùM·Ï^íPXðŠ=Ù/Ý ]Aÿ9ÀÙg“ß û­·¶K–ÈîS§:…ÆKr^þŠ·¯w¶N0^Êóžg/ùŽkùò¤ãc~ÿ{‘3L×®ôÿF½}ç‘Ýþ«¯˜ßtû¢ÏÃÌ}qÃw<¼ýë_:ª Ñôéä7 q„ìu._|áT[äm¼µ¾ç‘_Å>UìÉÂ_»@/ÑË=Ÿ6ÿìüóÉo‚¾¡»þÖtŸÿÜxªXÑÀxIÊk: ÒÁøëØ:Áx)×o±…µVäLûýï'Ÿè©§DSO¥ÿ7êƒýö“zéÔ‰ü*öÙ{-ò·^–.üœÃð2}ÇŽvÅ ËÞ{ÏoÓ†ü&êÍí·Ëí!fÚ4wâ©bEã%)/EƒÓñ…?u‚ñÒT½õ–ÈwÔ¿øE¢ñ‰fÍ–K/¥ÿ7î;u’ZhØj+ò«ØçŸßW±ˆý^ªnjѱœ!6Œü&î»u³+WJ-E-^ìN</•÷*V4¸E+/åÍ·2÷«›«¯N4>Ñ+¯ˆ ËwÐÿËñvéR‘W5»\ɯN_tßEî_x1>zýuUóÀä·y¼¹ê*ÁïwÚÉ‘xÊ/40^ôjž:áfüå/Móáøñ"olî¿?ÑøDO?-1,ÑãÓÿËÊïܹ"o0vßü*öùkŠmÀ(ò}¼0ì¾»‚*Ãê3 Éo3ùí¶“{RCxÖYŽÄSÑaŒ—Ê{á…×㯥ÐÀx)ׇÇ'òõ¬Y‰Æ'zè!‘·|}Dÿ/+¿2 IÁСäW±/öâbå /Ú‹Þr¿îÆëüóÉosúèᇅv•èᇉ§–­Œ—D¼Ž­ÎÆ_ÑS'/ey¡Ö² $sÏ=R¯AC†ÐÿÏï]w‰LîˆÌoŠ}*“[~ÈÄ' ^¦ïÔIÁ1vÑ"¿¶–ü6§áÙg þœé½÷èÿx¼8ó˜ŠÕ(“_¨ˆ]ヿœaåJ¿kWòÛRÞ~ø¡ÈâÔõ×»O]O`¼TØ«8£ÁÝø Œ—õðÑ‹/Š,Ûm¼qrñ G}y$ý—åsP¦èÁ’ëêx¡Þüþ÷Ò áµ×’ßôáu×Iì6Ñ“OºOg40^’ó Îhp9þZÎh`¼4Á›'Ÿ9š¶Þ:¹ø?ü¡ìO›¾ùÆïÙ“þÇ ò±Ï¨hØ}Q¬\—çí¼y²/0é´ß­ùmAì¿¿Èž³` ñÔòxKÆK"^× ÎÅ_ÅŠÆKÓ|ôàƒ"GSïÞÉÅÇßi'é8Eo¼á·oOÿÇã¥øœU™"‹òNzÀËó;ì ýêbü¶°oÕÊÖÕÉ+4D‘_[Ûâñ”^h ÿ'êlp9þZÎh`¼4Á›»ï9Ùî¼s‚ñiÛÖ†¡øZÃóÏgºt¡ÿãñ"|^}bͲ˹ßñð}xÞyÒ/-ÁÞ{“ß÷Ñ+¯ˆ|#´Ë.-Où‡AÒÿôòƒt:þ¢ ÁÚ­Œ—&y¹…†Dã#ô¬¥üZÃܹþ6ÛÐÿñx÷}áA‘ù´È7ñ’|ô ²÷M¼ÿ>ùuÁ›?üAäG‚?ùI‹ÇSÇ Œ—„¼ô­ŽÇ_ËÖ ÆK¼‘½u"©øD<²JE³Ÿ¾öÙÕô<Þ]ßP“È_ð]¨È;a/Ìo²‰ôÅrá…’_|ø³Ÿ‰ì?—]ÖâñTPh ÿ'ç¥op<þ: Œ—&ùHæa™­¶J4>áÕW¯ÒÒ¬µææ›ýèÿx¼³>ÿÙ˜™˜c'ƒåÃN}-1fí9Ìä·…½?p Ä.dx Åã©âŒÆKR^þaNÇ_Óã-/ez¡·ô»tI4>áÉ'¯ÒÕìÇÆÑÿñx7ýºòCì6ŒÜ=9õ ¼oî»Oöf¼§ž"¿®øÖ­ƒÓN O;­á¿Ù-ü~˜ Z̯{øv‹ÅSþ ôÿ½ô3¿š Œ—ò½Ð1å·i“h|‚AƒVilÑŒÁž{Òÿñx×|γ.3EŸ]‘ÿ{ñb|ëÖvÙ2Ùû&~òò‹—îI~“óšž:á`üÕÉx)ßG| ïÃù0L<>;¯ÒÛ¢‡òû÷§ÿãñîøT‘EìwJ”4ðŽúà€d/Š[¶,Ó®ùÅK÷òÏh ¿ z‡Aºù·d¼4ÙÛ¯¾’wó|y3ÄÇ ,Á4!†Qýíoþðá¾ÇxÁã[Þç¿8ûÐÈ"Ï´ÀKòæòËE_3ÌÿH~ñ ¼–3Èo"^þã-Ž¿‚­Œ—¦ùŽ­µòÞ$õU3ÄÇÜpê*höý÷Ã3ÎÈtêÄxÁã[Ðç/uÈd™½:¢ØÒ¼ãÞÈŒ<¾9}*W“Èä ŠýïºïÑCô…!zþyò‹×ál ¿ÉyMg48ÿ@øŠÆKS}8~¼Ä\›)SšézôÈ#«ªµEÿügø«_ù={2^ðøfðñ»,Šï»ðð‚|𣉾„^H~ñ:¼ô ä7Q/ÿŒ§ã¯æñ–Œ—rçÛ)SD&Lhžøˆ«8¼õVxé¥ÁÀŒ<>9Ÿ*<×!¶hû¼ã>¼æÑ——]È/^‡×±¢ü&ä\Ž¿‚ Œ—&ùè­·Dæz̘fŠç¶ÛRhX·«bþüðÚkƒ¡C3mÚ0¾ðøÊúø%YÈ‹­[àEøhæLÁSÿ—_’_¼/ÿñ–ä7A¯àŒ—ã¯ãŒÆK¹~‹-$>rbÕªUÁðáÍwøöÛ”òo;W¬0Ó§‡?ÿyÃÆ Æ¿>Uú‡ÜWzžú€wÈ{ž]¾\îŒoî¾›üâÕxù['Èo‚^Ó Æ_ÍÖ ÆK9>5JêPêÛ·ÙâŽGe¡TÑáƒÂo ;ÌïÐñ…ǯ·/\‘½àÁ‹=/Âû}ûŠžåƒŸü„üâÕxg4ß伎3œ¿Š­Œ—r½™:UêPª­m¾xvíjëê((4^qðýè…ÂK.ñö[·f|áñMòñ‰Òë%ð"|(¶¨¿æ½Í–[’_¼¯îñ–ä·’^þÖ §ã /40^šà=Ï.^,ò í’%ÍO3iu„&ï­øÛßÂsÎñÌxãoÔ¯þ_N•¢Íú^€o¼Qðlþùçä¯É+Ø:A~“ó ¶N¸['/eú`ï½…&:z饿ŽgŸ>6Š(¬çmê¢EæþûÃ1c2½z1ñøb¾Ø‚‡TÞë[ wÎG³fÉÁÍÓ_¼&¯`EùMÎk: ÒÁø+Ø:Áx)Ó›?ÿYjE醚?žæÑG)T èðÉ'æO ~úÓÌV[1ñøìofïµÈßz‘û» +x‡}ëÖ¶¾^ðg8ãÆ‘_¼&¯àŒò›œ—¿¢Áéø«XÑÀx)Ãwïnƒ@j¢úÓæ§?t(e‚ Þ{ÏüáÁ˜Ùd®wx|*»&‘õ+ŠÕ*<¼ïï¼³è™Ú?ø`ò‹×äUI~“ò*V4¸‡A2^õáÕW žfwܱEâ½ñÕD*Q½ñFxÝuÁGd:ubüâ«ÓÇ,ˆû-ñO³À;ëƒSN<;[›Ùxcò‹×äÕl ¿Ix‡Aºù…ÆK¾cG»t©ÔÛž+255-ÏàØc) $žß0Œ^yÅüîwþAe?[„ñ‹WïóOw(¶#ë5x>œ0AîŒÍ›G~ñʼ– ä7¯â0Hwã¯å©Œ—R^ömÏ‹/¶äüóì³Ôš¯èÉDÏ?^r‰¿ÿþ™6m¿xݾðÅ _9¯Ì>Rï¾7S¦È…Í_þB~ñʼ–3Èo"^ÁÖ —ã¯bë㥔÷û÷·¾/7Ëáõ×·`<ýw”{¶…ì¢C]]ôôÓáE{ïiÕŠë#^ŸÏÖùʼn[/ðŽûè…_qÏ9‡üâ•y·$¿ yá…×ã¯`ë㥔÷¼èå—E¿á\{d‹Å3¼ê*Þö·pÑaÅ óøãáyçù»ïî×Ô0Þñ:|ªÈî‹ÂBE~õï²· ¾¯:äò‹WæUÈoR^ÇaÎÆ_Ë Œ—"ù;Vú›ÌLïÞ-ÏŽígŸñnß•¢ÃÒ¥æ‘G³ÏÌxã/×§ŠÔ$RýÞI_S#z\¦gOò‹WæUœÑ@~“òòW48MO`¼äH6p ]¹Rö»Ê \ˆ'§B:[tˆžz*¼ôRøðÌÆs=ÅËò…u¯ÈwR%ŠwÉwï.xJÍd29kÆÈ/^ƒWt$ù­¼×òÔ G㯨ÐÀxÉýéf›‰^¿¹º™I“‰g4coì¾CŽ¢è­·ÂnŽ:*Óµ+×S¼û>w®C*“J¥ãwUàxð`¹Óhôî»ä¯ÏkYÑ@~ñ* îÆ_z¡ñïÛ´}Õº ö?p%þÛmg¿ù†÷ó2ŠÖFo½^w?|x¦¶–ùï¦ÏùY:¦Já©[àÝõÁÈ‘‚Kû¼à¹ÓexÝuä¯Ïë: ’üVØë:£Á¹øë:£ñâeÚ´1< ã-bôì³®Å?¼újÞº .:|ù¥ùÓŸ‚cÍtîÌõßâ>•Iy « Òñ;.Ö¼ —áÝõfÒ$ŸÞ_¼& /4ßD½‚­.Ç_K¡ñâ¥S©L‡æÉ'Õ¼- Ï;Ϲø·n½ôïØÅW‚À<ÿ|xþù~¿~\ñ-åã é‚gЉwΛ¿ýMð[š$¿x}^Ýã-Éo%½¢3\Œ¿Ž­Œ—L*•éÞ=š5KÓ»ÁÌN;¹ÿîÝí’%¼WWÓ¢¹sÃ_ÿÚïÓ‡ë/¾™}ÞA‘©b´È±“x}ôöÛ‚/ºÝ»“_¼>¯åŒò›ˆW±uÂÝøë[ÑPã%8î8»t©ªÏœ.t6þþðá6Šx‹®­âðÆád=Ežë/>YßP“H¥‹¿2»nwßÛo¿•zÑ5&SSC~ñú¼ŽBùMÈK_Ñàxü5=Þ²JÇKçÎfÊ}ïú«®r9þÁYgñÎ\mÅaÖ¬à„ÒmÚpýÅ'êóŸ~Ùðã2Eàô]º®î/^L~ñ*½ŠÇ[’ߤ¼ü NÇ_×ã-«l¼l¼q8~¼Öeüþ;8ÿð׿æ=¹âf¿ü2¼ôÒÌ[p½Æ'äS¹Û-~źÿ¦ãxÀ;ê3®°ÎK~ñ*½èBCfm¡ü&äÕ¬hp3þ* Õ7^¶Þ:¼î:»b…Ú”_zID¾Âë®ã ¹òrƒï›)S29K¹^ã+ã›ö°Št ïº÷÷ÛOðuwæLò‹Wél ¿Éy‡Aº‡AVÑxñûô1“'[ß×ýî.øÙÏÄ\¿þøGÞWC‹^~9ëDv®×ø øT‘Elq¢DIïŠ÷9DîgüâUz-['Èo"^úÖ Ç㯠ÐPãÅó2ƒ™¬†3íŠéŽÅ䫦ÆÜ?ï뤙gŸõ÷Þ›ë5¾"¾ð1^ƒŽ],wÜG)wv oº‰üâUúPx¡ü&êEÜ¿‚­jû¿çe Î<ÓüßÿÙ¯¿®¢÷r“' ËW›6桇x^E]ôÑGýwæzß@Ÿ}8äºòCÁkò·dàõþÈ‘‚ ãÇ“_¼J/ÿŒò› Wp¤ËñW³uBIÿ÷<¿*‹ 9£fß}åÍW55áĉ¼¯žf­5÷ßï÷éÃõ¿Þ>U r\áa’xÇ}0z´à;ª±cÉ/^¥WñxKò›”—¾¢ÁñøkÚ:!¬ÿ×Öú}ûú‡œzjxùåæî»£™3«¶¸ÐТ÷Þ“;_?ÿ¹ CÞ„WQ¹!«®ÊtèÀõ¿>[“H|³°žwÓgž)øýÌQG‘_¼J¯`ëùMÎk:£ÁÁø‹.4„W\‘Ùc=òþ[ì›%~T1?h?t¨øáÁ±Çú£F§üò—Á¸qá„ áĉæÖ[ÍÃG³gk}&efÔ“O=_ù‡j—/'ÕUnøôÓàÈ#¹^ã›ê‹í²ðrÏ{ÈûÞ]ž¾à«ï_¼J¯`ëùMÎË?£Áéø‹.4д-gøàƒL«VÒç·Ì€öÓOÉfµ5óØcé=¸¾ãË÷ùOl¦ˆýÞY\v™àBÃ>û_¼J¯eEùMÄ+8£ÁåøSh ¹Ó‚‘#•Ìo[niž{Ž„VÝÒ†ººà¢‹ÒmÚp}Ç—ãSy+b«ÙÀ;îÃk®ü~f·ÝÈ/^¥WpFùMÎ+8£ÁåøSh ¹²œáí·Óž§g~«© /¸Àú>™­ºžüÎ;™¸¾ãõ1Ϩˆ=F²ØoÇ»æÃ?üAð'cýû“_¼J¯cëùMÈk:£ÁÁøSh ¹²œáè£õÍo™Ýv‹Þ{äVÝÒ†úúì£j¹¾ãc}Qõg¯°DwÖ‡wÞ)ø†õþ‡üâUúPx¡ü&ê5Ñà`ü)4Мøxölµó[m­™4‰Wa3Ó¦e:wæúŽ/æã ®—À;ëÍ}÷ ¾aÝfò‹Wé5­h ¿÷ .ÇŸBÍ…æ~¸îùÍ1Â~õ‰®º¥ ìïµ×w|ì_ãyXûט_wÜ›Gü~f³ÍÈ/^¥WPh ¿Éy['\Ž?…ZË/gxá…ª˜ßºt oºÉCÆ««Öá¹ç¦=ë;>挆¬¯u]¤ÈN ︞yFð'cmD~ñ*½ŠBùMÊ«8 ÒÝøSh µðÛ°úúLïÞÕ3¿ù;ï½ü2y¯¶fþú×t»v\ßñÙ>[„(8@Ò+]´À»ãEOî™¶mÉ/^¥WðxKò›œWðxK—ãO¡Ö²-øÕ¯ªn~ó<ÿ¤“ì¢Ed¿ºVîÌœ™Þh#®ïø†¿¦ê¹¿Â‹{HfÎOñnúèµ×2VSC~ñ*½üà Éo‚^ÁŠ—ãO¡Ö’o½^y%]SS¥óÛêA@7¨¢?{vfó͹¾ãsV4dý8»8Qø¼ë>zñEÁ7¬íÛ“_¼J¯ãŒò›—_hp:þh-Õl:éÛ·Êç·LÏžáwÚ0¤?TK­aÞ¼LÏž\ßñkƒ,øY*î;1k$ðzóÔS‚oX»t!¿x•^Åã-ÉoR^ÅaîÆŸB­¥ZpÁÌokþÚ«Wx×]”ª¥ÄöŸÿd àúŽ/|±—}¨CÜb ¼ÓÞ<ôàÖnÝÈ/^¥WPh ¿Éy['œ?…ZË|®û¯¥[µb~Ëö™Þ½Í”)<–¢*j K—f¦ÿW¹o¨Fx™ø#c¶dà]öfêTÁ7¬ÛmG~ñ*½š­ä7 /¼Ðàzü)4ÐZà]V]]¦æ·Xï÷éNšdW¬ Ÿ(+VdvÛþ_Í>U(Šÿ /ö7âò²?8Ýaò‹WéI~“ó:oélü)4Кûý•µþ±Ç2¿5â7Ú(8óÌèý÷é0šÇÂW_ezö¤ÿW­O©IäoÃÈlÆÀ»éÃnü~fà@ò‹Wé<Þ’ü&祯hp<þhÍÜÂK/e~+ßûd¦Og?…Ö½ÿ~ºkWúuúT^q"wÙCN¡"¶˜w͇W\!¸Ð°×^ä¯ÒëXÑ@~òjž:áfü)4К³™iÓ˜ßÖÇo·]ø›ßD~HRXk˜5+S[Kÿ¯BŸw\d^Y¢°PwÝãÇ þàtÿýÉ/^¥WñÔ ò›”WqFƒ»ñ§Ð@k¾7T³g§kk™ß6Äû»ï^wýüsº“ªÜôééšúµù<_¥(8Oï®~õ+Á…†C%¿x•^þÖ ò› WqFƒ»ñ§Ð@kžf¿ü2ݽ;ó[e¼çe† o½Õ~ý5]KG 'M¢ÿW›Ï9³!·Ñ¢øoǻ胟ÿ\ðû™O$¿x•^Íaä7 /ÿŒ§ãO¡ÖU†t:3hó[å}ëÖþa‡™)Sìòåt3é-8ï<úUùÒkþ[®À»èýO\ìüßÿ%¿x•^×Ö ò[a¯æŒ7ãO¡–x•Á÷ý£Žb~KÖ·oï{¬ù¿ÿ³é4]NêH ÃÌ>ûП«Ç+H4º^ï¨÷=Vp¡áºëÈ/^¥×µ¢üVØ«(4¸ ´dß;Õ×û‡ÆüÖ|~£ü“N2Où$Ý¥ ý¹J|ªä¢ˆØ_wÚû‡.wö1÷ÞK~ñ*½ŠBùMÊ+x¼¥Ëñ§Ð@K°Ê°r¥ÀÌo-ãkkýÃoº‰gU»ÛÏy2 ýY³_÷TÌú⯬O¥r/Þ]Ÿ:TðÔóôÓä¯Ò+ZÑ@~+說hp<þhIU¾ý6³ï¾Ìo.øÌöÛÿïÿ™Gµ+WÒ3ÝoÁ˜1ôçjð©"E¯>îlÉâE ¼+>³çž‚×SÍ™C~ñ*½Š3ÈoR^ÅaîÆß§Ð@K¢ÊðßÿfvßùÍ9ß¶­àá5×Dÿþ7½ÔÝáSW—é×þ¬Þžß_±¨/ºRï¤ïÞ]ð¼óÕWä¯Ò«;£üVÒ«x¼¥»ñgE­ò·+‹e `~sÝo½u0z´yðA»t)Ö¹ÿýïtûöôgݾpEC©?䮑À;ékj¬ïK½r“öÈ/^¡WPh ¿Éy-+?…Z…ß Í›îÝ›ùM’oÕ*³ï¾Áe—Eÿø‡ Cú°#-üÃ蟺}ÞF‹šÊZ_´À;ë£?|ϺõÖä¯ÏkÙ:A~ñÒ ŽÇŸB­’oî¾;][Ëü&ØwîìuTxË-Ѽyôçþ|ÑÚÌ.»Ð?ûÂÇTxY{0J<²ï®7Ï='wÒñ<üâõy]…ò[a¯hë„‹ñçŒZeÞÕ×§œÂ|¥Ê÷èák|Ð~ó =¼Eš™1ƒþ©ØgÙPœÈùf}|õï®ïºKp¡áç?'¿x}^t¡!½öñ–ä7!¯c넳ñgEmÃ[ôÁ阯Ôúššô^{_lž^îd©wþDÿÔêSõñ›+Š#éáÝ÷Áe— ^”xýõä¯Ïë8 ’ü&äEÜ?…Ú†~èzß}éN˜¯ªÅwìèqD0qb4{¶5†þŸxoöì´GÿÔéãÏh¨Ï)@ÄoÆÀ;ëýŸýLðåü‰'È/^ŸW°u‚ü&ç5Ñà`üÙ:A[ïfëêüÓOg¾ª^ß¹sfĈðÚk£×^£èࢆ‘#éo*}ÞS1ó‹õ1ÍÄ»îý\ל?Ÿüâõy['ÈoR^þЧãÏŠÚz~òñÐCéí¶c¾Â¯ñmä~xxÍ5Ñ?ÿÉ£+*|óÿñÇé6mèoú|*ÕÇl¦HåU,ðŽût¯^‚?=0¦¾m[ò‹WæÕ¬h ¿Ixg4¸V4Кü¶çÃ3Ç3_á‹úNüà ®º*zõUŠiÁYgÑßôù”W‡¨û^€oÛÖF‘àÛÖw$¿xe^Á ä79/ý©ŽÇŸ ´&|ÚñÝwÁE5|àÁ|…oÜwì˜9ì°à÷¿Þ~›´þCoÉ’ú6¢¿)ó1k!òv_V)ðî{ûÅrçÿ¨£È/^™×´u‚üVÜk\ÑàPüYÑ@+³™Lo»-ó~ýý–[ú'žhî½×~õªÉ‹Î8ƒþ¦ÌÕõ©R5¼ã>š5KîD^~9ùÅ+óÒW4ßD½‚3\Ž?…Z£-zã ÿàƒ™¯ðô™ƒsÏ53fغ:†XYÃðå—é?Ê|þ· Ë%ÞYÞwŸàfÌ ¿xe^ÇŠò›Wq¤»ñgë­Ô-ÇsÏùÇ3_áôíÚe† ®¾:zã k-ƒ®X³ÖÖo³ ýG“O•Xû«ñ"|pÕU‚'šo¾©÷<ò‹×äÈor^Áã-]Ž?+h±oiÌô陽÷fþÁ7«ßb‹à¿0ÿø‡Øœ{.ýG“O­-K”zeÖ¹^„÷ÇŽ=ѤwØüâ5y5+Èo^øŠ×ãO¡–SbsÏ=é~ý˜ð-èÓ=z]Äù‘ù»'^{þ£É§b‹kÿ¼ú^좼Ë>³Ç¢'Ô(ò‹×äœÑ@~“ó ƒt9þhkJ Ë—‡7Þ˜Þv[æ¼;>3`@på•Ñ'Ÿ0B×\Szõ¢ÿ¨ñ©ØšDì©’õ¹?Å;íÛ´±™ŒÜY&üÃȯËÞ<ö˜È7̽zµT<¥¯h ÿ'꥟Ñàxü)4T{}¡®ÎL›æÿð‡õíÚ1ÿàõž—<8¼å»dI•Ø`Ü8úƒßà¼8³^/ÅG¯¾*}éùuÖÛÏ>“w¯iL}›6-Og4ÐÿòÒ·N8ƒ¬Òú‚ï›Çó?>ݱ#ó^ŒoÝ:sØaáý÷Û ¨Î‘Í™CPãSEN’ô ¿SòäI¼s>¼ùfÑ÷«?y ¿.úM7Ù©.lÉñ8i’àBÃ>ûÐÿõÑœ9Rçê p?þª«¾`Œyæ™`ôèôÆ3ÿàûm¶ ®¹Æ.[V…£8³ãŽô¾ðÅñû1òΙĻïýQ£dÏ2ûïO~ÝôþA‰¬‘¿ðB Æ3˜8Qî`ô:ˆþŸ¨Þ{O꛺åËÝ?['ô‚ zýõðæ›ý‘#Ó[lÁüƒ×ã;uòÏ>;úøãªÑÁ…ÒtøÂ¥©<—]®ˆ[wÔgvØAô,^qùuÓç'²GÝ}w Æ3œ0ApÕ﨣èÿ‰z¹7‘vÑ"÷ãO¡AgqañbóÈ#Á…f† I×Ö2Ÿà5ûšÿÄ%îZ]϶iÓè:|ª`ýCCÅ"o Dþ7ñ®{Ͻà*zë-òë¦7S§Š,_zi Æ3¸øbÁ+N8þŸ¨·_|!u¢þä÷ãO¡ACYÁ÷£ùóͳφ·Üâ•îÕ‹ù_u¾¶67Î._®~¼G|@ÐáSõñ{*r“ŒÝŒwß›¿ÿ]ôDSß½;ùuÐGsçŠ|·|ÒI-OÿW¿¼ˆqìXú¢^î1ãÑ{ï¹ ’ õõÑûï›3ÂÛoÆó?>3xp}÷îõ55Ì'x|:åÕo¾y8i’ CÍó@Õwè@PàsžŠ™½­¢>k]Dö’xA>¼â ÑM0f ùuηo/ôò–2¤ãéŸ~ºà çœCÿOÔËý„*zã ÷ã/ºÐ½ôRxÇâ¿n»-¼á†àŠ+‚ñãƒsÏõO?Ý?é$ÿ¸ãü#2Æ¥÷Ù'½óΙ>}ê·Ø‚ù/ÇgvÛ-zçŵ†Ì Aô>UŸ‹²ËÙ±¨Ïÿ^€Ïu”èYÆLŸN~]óé=÷ÚÒÛlÓ‚ñôO>YpÉoüxú¢Þ¦ÓRgé—_v?þ¢ þi§1^ðx|Œoß>øýï­µ* þš¥”ôÙ>U°""ï`ÉüÇfâ%ù­¶’½tjåÊú¶mɯSÞ3Fd_òýµ+o[&žþ,w$†W^IÿOÔ˽S4Ï<ã~üE?Þ28í4Æ /æýˆ>ýT_¡!œ4‰ü*ð9+ Ë…U ¼,/÷Œ±5K§>˜ü:åÃI“D.?ž?¿eã™ùÁ_ïoº‰þŸ ßxcÁëÎ}Ôýø«XÑÀxÁãñE|—.æé§•Ì?þA~ø:•û‚üUxÞ<ü°ìŠæ7’_§|4k–äÏ][,ž™ƒ< 3þŸœO÷é#¸o<ð€ûñ×Qh`¼àñø¢¾uëpòdM…»bE½ç‘_é>çôÈ"ÇHfÇÃËòÁEÉžh-J·nM~]ñ55våJ‘o‡î¸£eã™Ùo?Ño&éÿÉyÙ}ãî»Ý ¼ÐÀxÁãñåø`Ü8MG6dzõ"¿Ò}*® ‘}ÀCö¯ðêñÒ|z÷ÝÅO4GM~ñéw”z³þË_¶l?^p¡aÂ÷ãï êã_¦Ïyd4{¶¸/ÿ¸ãÈoe}xç Á_é>ÿü†t\­¢H=/Ãg;Lü\sÑEä·Å}úþGêòo¼ÑòñìÒEô\[ìc¼TÞ‡7Þ(ø§sÎq?þ*Ÿ:ÁøÂzÿ„$¿Ÿ$¿•ómÚ˜_óÿ»ß‘_é¾è¾‹"À ôíÚ =ÀoÝÅyóÈo‹û`Ü8¡ý'¼í6âiW¬¼Ur¿ý/ y3}ºàŽqÌ1îÇ_~¡ñ‚/Ëg~øC‘ï'û[ò[y¿é¦vÑ"Ñ7ÿáÍ7“_é>~»Åê×Åü:/Ñ›¿þUz]3ó½ï‘ß–õÑ[oI½SÿÙÏ\ˆgôßíœx"ã%!/ºc¤÷ÚËýø+(40^ðåx¡+XÃë¯'¿Ixÿ¬³düJ÷Åh^q"w¤$^Œ÷O8ï<é…é=Èoóûtÿþ‚×ü_}µ#ñÌHþ`Á~ñã% ïÿò—‚ËOÏ='"þ:ž:ÁxÁ7êÓ½{‹|?ùÏ’ßïÿÅ>A9úðCò+Ýžë[´Èxq^ôûu‹n¿ü6¿.¿\nŸÉsŒ#ñÌ|°àBƒµõíÛ3^*îÃÛn½óÎr{KôùçųcGÑC/s≌— ûNDÓ›;VDüÑÀøÂ—ôµµR ÙC†ßä|ø—¿ˆ,4„!ù•î‹>µ¢.~ß…‡—ë3ûî« Ð`3™ú­·&¿ÍæÃ?ýI×^›–Œ§]ºTp0︃ñRYŸ6Lvíé°ÃDÄ_ÅŠÆ ¾ ïyRûù˜1ä79ïŸt’ô=5äW¨Ï~WWòI˜uùÿ^žÞyGâ†{î!¿ÍãÓ}ûÊþÄõˆ#œŠgôï ^ò—Êúà׿–½›¦ñ×q$ã_Ž·é´Ä~LœH~“óé½öy×ñÙgäWºÏÞq±îguk!J¼ ïŸyæ*-3dùm>ø àÅ/ß}W×¾½Sñ4?.8žÖÖuíÊx©dxê)Ñóp]§N"â¯ã0HÆ ¾-X ±Ÿ›§ž"¿ÉùtÏž" ï½G~¥ûTaA¢Èù% ¼Hߥ‹­«SPhˆÞy§¾ukò›¨¯ß}wk­à•/Ó§»ÿð¦›dø~ðÆKÅ|M]¶LpáéË/¥Ä_ËÖ Æ¾qofÌúÁ@}Û¶ä7)/óˆ¨è_ÿ"¿Ò}ªtM¢á¿eÖ0ðîûðÎ;u,jÎ?Ÿü&ê…Þ¯¬»A?å×⟑¹OrÝ »ùfÆK¥|fÈÑÁ<òˆ”øë(40¾ðåøðæ›…võô°aä79/ñSF3s&ù•îc7ZÄ? 3öYšxq^îu ëßém·%¿ ùôС²»G­}\–CñO÷ï/;ª‹×·jÅx©ˆo¸AvÕiüx)ñW´¢ñ…oÄËÝ!\s ùMÎGŸ~*±œM~¥ûTlM¢°VQøS¼\½þºŽZCøðÃä7!ofÍ’ýqë+¯¸ÿš»r¥ì݇Æx©ˆ.”݆—5+_øF}úÐC…võhÎò›œ—xu8u*ù•îSuq[,êŠ0òž‰ê3§žºJKËŒA~+îÓßÿ¾ø5]äfüÍK/É®îMÊxÙp¯`eY]×®Râ¯æ0HƾQŸÞ~{¹½½~«­ÈoB^⊆ð¶Ûȯt¿Ý¢.çÅëþP¬¤æ;t°ß~«£Ðýç?u[lA~+é=/š3GzǨïßßÍø×_/{÷ÄwßÕwèÀxÙ@\y¥ì‰÷£Å_A¡ñ…/××ÔØLFjo?ýtò›·Ë—ËûÄèÚkɯt¿ŽÖl®(þÈ ¼xˆ=.(f‘ü³ÏÖ×ÔßJùÌñÇ‹/?}ü±³ñÏœp‚øeD£G3^6È{^ôÑG²¶ÜwŸ ø+Ø:ÁøÂ—ï£wß•zí~çò›ˆoÕJâCÄü3Î ¿Ò}þR‡Õ"ï5%–Fà…úôN;­RÔ‚ Èoe|›6Ñüùâûà 78ÿô;ˆ¯ãÌŸ_ߪãe½}zÄé}ÀÿÕ¯Å_ËÖ Æ¾,oyDp!û ƒÈoåý¦›Šì L~¥ûTÁ¡ù'FÖÅíÊÀ+ðæÅÕ¬µ™Ã'¿ô‡ôàÁîÆßól\Êœx"ãe½½yæñ`ÿýÅ_ÓÖ Æ¾Q\{­àÕR>J~+îÓýú‰¼—Ûv[ò+ݯ®7x{*² ùÛ-ð:¼/…|N­á›oê·ÛŽünˆÏsŒ‚ž½ý¶ãñ7Ï='>È~˜µ¨ñÕ_/ü§«V­²ÆÔuè (þŠž:ÁøÂ7î3cÆž^¢¨¾W/ò[Yï%¯'|÷]G~ÅûTaq"û`ÉìmÅŠx©¾m[»h‘¦ZCô¯Õ·mK~×ϧûô‘xVPÌ}yÁ¦>×â/úã¦uŸiÿô§Œ¯õðáí·+¨åÉŠ¿üBã ߟùÞ÷DÏ0áM7‘ßÊú`Ò$yš7ß$¿ |*eo«¨Ë߆áå|,ƒ—ïý_þr•®NžL~×Çwè ñËñ%ðÎæÇ?ÖP×[° ®cGÆWÓ|·n¶®Nü4{ç²â¯â0Hƾl_[kÓiÁ×ñ H÷íK~+è£7ß”w¡¹ÿ~ò«À§²Qác*âêxE¾]»è³Ï´Õn¸ü6Õ‡÷Ü£©Òäxüë{ôPí¬Ï_åøpòd ‹†N9EVüuœÑÀøÂ—ïÍÓO‹ždÌŒä·b¾cGkŒ¼©ï²ËȯŸ]{ÈûqªX¯É‹ÞËW¬×\C~Ë÷þرjRŸÞcñæÎÕ°~$ŠÒûíÇø*Ó×ﺫ"ñI7¦n³ÍdÅ_Ñ Œ/|YÞ?÷\éSMæè£ÉoE|樣Dv€‘#ɯŸ‡r–CÔålƈý¥xù¾uëhÞ<…µ† Èo9>½ûî6“Ñ‘ôèõ×¥Ä?øÝï”ÄüƒêÚ·g|•ãÍ /(ȸyáqñ×´u‚ñ…/Ç×Ë„y´`A}ûöäwý™1Cb¨ßm7ò«À§ò¶Uä–+bŸœ‰×æ3#G®ÒØ‚K.!¿øM6‰,P“ñÌèÑRâŸÞk/=mâDÆW£^Ç#]V­ZåŸsޏø«Ø:ÁøÂ7ÍGŸ.þârÕUäw}}ïÞÖZyKçêëëÚµ#¿ |ö“0×=¢HÅ"ïÉ™x-Þó¢9sTÖü /$¿E½ç™¿ýMM®í·ßÖwè &þžýç?zJ<'ŸÌø*å·ØÂ~ù¥Ž\§{ô+_øF|xçâ/ëÖ¦=”ünˆ&N¹tî™gȯŸ*¶à!ï9™±5 ¼Ÿþþ÷W)mÁ„ uý!ÆW^©)ÑáÍ7 ‹ÿm·é©òAæ€_ñÞó¤̶n1ó›oJÌ—¢3_ør½Üq.._]ß½;ù]Oßµ«]ºTä¼wÁäW‡_Sr¨)T¤r¿Ÿ½^¯Ð›W^ÑZk0=V×¹3ý!ÛW_­,Ëõ;í$+_éÃ×»tiºo_ÆW¡.¾XϱK/•˜/]·d|áËó›l"ñY1·p/¿\׺5ù]N™"uéÜn»‘_>»ü_±(¬O~¯Æ§ú¨®[7ÆW¶O¢ã^M9oà@‰ùÒQhàú…oª7¯¾ªdiêĉ䷩^î‡öë¯W¯D&¿ |ª°ü÷UŸS®Àköæ™g×ì·ß¦GŒ¨öþàyá­·êKnzð`‰ù ÿúWm½?®ïÝ›ùvÍ7wÞÙ~ýµ¦B’Ð|É/4p‚_ï_v™žåT^H~›à;wŽ>ûLh®ÃiÓȯŸWœˆ-]þx^ÓIøñµ†(òǯó¼*ímÛ†wß­/­æ‰'„æ+3j”ÂQ¶dIz¯½˜o•UV­Z\wÐ|©xê÷3ø&ûôÞ{kš‚ü³Î"¿eù6mÂG‘›èÌØ±äWOž!Y—¨CÞñxÍ>|øáUÚ[øè£u[mUmù­ïÑ#zí5…ok­]û°eùÚd† “òÝwéïæù¶~—]ìÿ«mÝÐ~û Í—Š­ÜŸà×ÇGo¿­érŸ3†ü6âÿ?{÷U•ÿqü3“„Þ;RPPT@DE@AQT,(kï¸v×µwW¬¸ëÚýaÅvÑE„P25“HÈ”;g&É$™¹÷}žóø„ä5Å{î9÷žï=%Ç£ þù§¯sgÊ×6>qË %8Ë9x{z_ÇŽ‘¢"ÛÇ"Û¶gÍŠšfóòõٲŞa£gžÉéò*yã {V±P(xöÙ±£‡œÒÞú ²_”!²~½×íÎÑò²ÁÔ îOðó3l6.5áq7çC”¯U+ô 9]Äá¤|íä•°¨CâˆdãÌñöôÁ3ÏüÓ©äý÷}={Ú¼|Ýîâ+®ˆD"öì͆þîÝsº¼'žhç*öÚk¾víÔ~ºÝÁ‹/¶å(•àÂ…¹[^¶X£û|…|ݺö‹{/YâÍϧ|ãÿT«VÉK/å|á^=õ×N^æ™I~‰·µw¹JÞyÇ!±†HqqñUWyëÔ±eùúz÷.Y¾ÜÆÅzøáœ/¯‚‚ðúõv®b……‰Ð~úvÛͶãS|>oóæ¹[^6Úu‚û|¹}ñÕWÛ0ŠýúëÞfÍ(ß²?Õ®]òòË6(ÙØâ(ßœ÷2'Ê~ï±^ïoOïÛsψÏ÷§cRxõjÿðá¶*߯‹o»ÍNûêY‰|]ºØ ¼‚ Ú¾Š…žxÂÛª•mÛO—+püñ6[ú1æÓÝwçtyÙe× îOðñ¾öím9Ì*¼f¯W/Êwg”aÙ2;ÄÞ{úk3¯dÓ*<Á‰ÄùxÛúà¹çþé°TòÑGqã¼nwn—¯Ë8ùäÈï¿Û¾¼Šï¾Û&õ±E‹ˆßoÿÑCEEÁE‹¼ جýôvX‰—Y-+¸HÄÛ­[N—W Ç ÜŸà+éCO=eÏÖ) ^z©· ÀÉåëm×®äõ×íQ ©S©¿6ó1KG¦ÆÀ;Æ»Ý%|ð§óRxõêàÌ™Q“)r§|óòÇ^±Â Åñû½íÚÙ¦>†î¿ß!õ+²qcpöloA ÚO_ß¾%¯½fÿì²e¹^¿lºF÷3øt½Ð ;ß¶­\é‹ÙSÙ1å›—œ7/²c‡MnvìðÖ¯Oýµ™OJKÑ.m;·§÷õè þtdŠlܼäo³f¹Q^õëçÌ ¯]ëœ*¾é&;ÕG_ïÞÎ ç­Y8åoݺ9Y^µjùÇ/yõU»®±—üG‘ëõË.#¸?ÁWÜ—|ò‰ïÙJJŠoºÉÛ¨‘sÊ×?p`øóÏmu_wï½Ô_ûù˜Qž¤ÚeÉð¶÷N˜=nºty<Åwßí9Ò[»vv–—ocW^i×­+“vSׯ÷6jd³úXòÖ[Ž«_Û·‡î¹Ç?p`®”—¯gÏâ[n±ñZ umÕ*Ô/»¬ÑÀý ¾â>0eŠý¯)[¶/¼0꩸MË·I“â;Ãv j@ýµŸŸqá±øgÜ” ¼“|~~ø³Ïþt|Šx<¡çŸ̘ámÛ6ÊËÛ½{ðÒKÃ+W:³8ü£GÛ¯>ÆŽulý ýuð¼ó¼­[gcyø>¸xñb‡LJŠKiÓlP¿r:Ð( 4p‚¯”¯U+²aƒ#nØ6n žsާt¬ÍÊ×ÒI¶\„+¼jõ×–^Éf\XF/ñ¯xGyo›6áõë¹ù&Õ`*yõUÛ×ÇÀÔ©4)+‚z'Ÿl›úe@÷'øŒøâûîstuóæâ‡L˜°kIé¬*/ßž{ú'O=÷œsæ,‡W¯öæçSíêMËH&F&ÌËNâííýýûGü~î¿I5ssPTäíØÑþõÑyC[IÙÔ[¾Üë²Oý²Ù®ÜŸà+å[¶ŒÒÊEJJÂ_}zä‘à¹çú‡õ6mZ3åÕ°¡ذàÂ…%/½ٴɉA퉩¿6öJ¢0 “À;Ö;a{$R–Þm—.dûúè80‰P⤻ÿ‡}}úØ©~Ù ÐÀý >ƒ>8{6 Å£õuëBK—/»,0zô_«Hfþø7hàëÞÝ?|xà´ÓB÷ÜþòËHI‰£ù—_z]Ô_;{ÓŒ‹d{Zàì‹oº‰«©úŸ¯zŒ{|ج>†|B'ÕT*¾óN›Õ/LàþŸIŸ—þâ Úº!×?þ(yçÐsÏ…x ø–[‚‹çÍ Lê;Ö7t¨¯O_çΞ¦M½ùùe«nuëæëÛ×ÐAþáÃÇ8å”à%—ßsOhÙ²ðÊ•‘­[9ªqÉôÑÔG{{ÅýÙ#y¬^Sú_Þé>/¯äµ×hIÕw±/*òvëæ¨úèmÓÆÞKL“²·ºmÞìmÖÌfõ+§G4¢¦Np‚Ï”÷|0Í©æŸ!QíLœwQößÄ÷Å;×7m^³†&’TM÷ÙãÆ9°>, èI5÷üÜVõËS'¸?Ág؇{ŒTƒÉÈ!ÔGÛ{E½ LÄ-&™°Â$ÞéÞ·Ï>:Ê'θˆß3!bÇ'øüüÐÓOÓ†’*ŸJÞxÓ—GýŠóìCFªªæçgûúÌñ@í!¾|àÌ3iIU{¹¹àê£Ó|ÌvžØõ$=ñ —OæóóY¯TÉ^µÊÓ¼9õËÂׯþúkÎRfSèÙgP¿ì´$í!¾ê|èÉ'iIUõiÙ²]Û'Sã•lÀCìÏJ9@÷äçs•"U<Êðí·ÞÖ­©_ɼ·{÷HQç )ƒ5ÎÓ°¡ê—=¦NÐâ«Ü7lX²bm#)óQ†O?õ4h@}t WÜt Ã|Œ¸M,ðx Ÿ—zâ šTR¹û<«W{Û¶¥~™½ÿÄ9UHI‘¢"_©_öÚÞ’ö_•¾yóðÊ•´¤LÞà­[çmÓ†úåL¯¨˜„¼ QЏm3ÇÇû¼¼ÐãÓ°’ÊqZ»ÖÛ¾=õ+_|ûíœ0¤ÊF"ÿ„ Ω_¹?¢ö_¾uëðwßÑN’2s¹),ôvïNýr¬Wì W⼋¸=-ðøÔ>/µëHéF~þÙÛ©õ+]Ïb(¤JÞö…éSU¿ì²$í!¾š¼·]»ð?ÒZ’*{¹ |C†P¿œìã¶Ä´œ€ýƒ OËçå…}”F–”"ʰ~½w=¨/åólòBªL”áä“V¿lh =ÄW«÷vêþåÚLRÅ/7‘ˆÿÄ©_÷‰+7DO®å’’x|ZÞí^s M-)éEhÃïÞ{S_*âóóCÏ<Ã)D*_+) LžìÀúb‹©´‡øêö¾®]Ã6Ðr’*–‚ P¿ðÑ»N”½ØjI%¬*‰Ç§öþñãY*ŸdÑçÙ´ÉÛ£õ¥âžX©œQÿI'9³¾Øe× ÚC|u{ï>ûDþøƒö“Tî(ÃßþFýÂ{d±–ƒ+Ù, OÂd <>ïÛgŸð?Ðì’v¥ðÚµÞ+ÞS_*áóóCÏ>ËéDJ+ÊpÂ Ž­/¹¿ëí!¾Æ¼¯OŸÈ–-´¢¤t/7‘H`Îê~×®–BqkKZ†+ðøt}“&¡—_¦ý%ýùçŸ%ï½çmÑ‚ú’ŸŸú׿8©H¦Û¾PÈ?a‚“ë‹v =Ä×€÷î¹gø›ohKI©/7Á`iP›ú…wyd-\qs-ÀãËïÝîàâÅ‘H„†ØÉ©ø<µjQ_2é ˆ5LQ†qã^_ì2¢ö_s¾Q£‘Ì—›;ü‡N}Á'ŽhÕ‹ãæZ¸?¿ø–[88zhÝ:_¿~Ô—8ŸÓÌb´oø¬ñuêßu+|;÷r³aƒøpê ÞìS¬è¥×®àDQòWFÿ ¯ß²eèÑGi»í‘Šï¿¿¨Q#Îÿ÷Þž=Ã?üÀ iÿÑCápðŠ+}8ÿñéû]#Td= cçï>¯_¯^ðúëéåäPºG-jÚ”ó9 ½wß}K>ø€SÔnO–¶oÌžíq»9ÿÍÞ.ʟݾNàµ×FJJhœmx¹ …‚·Üâ©_Ÿó_.o^F2i|¯RïÛo¿’O>¡eÏ™+ÐÆþcå|ÎjïrÎ8#²u+§«MâzO=åmÛ–ó?oÇ]'(_|¶Þ¿í¿xåJšh[]n–-óvëÆù¯€/‹F¥=ݯŸ—˜7/²mM|V‡"‘âGõ´hÁùœ¾uëbCÉõÁ«?þè1‚ó9}oƒ@å‹Ï%_P˜;7²q#ÍuÎ_n¾ýÖ䑜ÿø {ƒJ?¼ÇW‰oÒ$¸ha³3•¼öš¯o_Îçœó¾Ãg‘ÈœŒëƒÁ+¯ôÔ©Ãù\.o‹©”/>×|ƒÁ‹/æqQ®^n¶n Ì›ç)(à|ÆWÆ+.D‘,na½Àã«É7n¼ôÒHa!M¶„V¬øk÷JÎÏ\õµk-ŠìØÁÉœ3ƒW_~Ù5x•ó9}ŸÓ#üQS'(_|îù¦Mƒ×^ñziÃs&ÄPRR|çE-Zp>ã+ï-^™Î4 <¾|£FÁ‹/ŽlÙÂe &ÇÑ­Yã?á‹óÓ¾iÓà¢EÔ©¬¾ç‹DBÏ>ëëÓ‡ó¹ÂÞ–k4P¾øòÞ6mŠo¿= Ò¤gõå&ýë_Þ^½8Ÿñ™òJ6³¢Èâ—I#x|õù† ]ùã. Õ}úýwÿ™gþ5ŽŽóÓV¾aÃÀ‚‘ßç$϶ÇJ¡GñtïÎù\IïÏñ ”/ÞÞÛ©SñƒFÂaš÷¬»Üx½Å·ßîÝcÎg|f½Ìó+Ìë=àñ5æ4.XÙ´‰ËCu\vì^v™§AÎO;ûºu³g‡ù…¾æk\0X|~.]8?3âí1¢òÅÛÃ{»v-¾å&ÃfË0Õß^r‰§ysÎO|Uø¡ˆ(a^^Ò…Çg‘¯_?xÞyaV6®º+ÐwßÎ>ÛÓ¸1ç›S|AA`úôðêÕœü5bðùŠ—,ñ´oÏù™Ao‹Å )_¼½|ݺ©SK>üf¿Ænð¾ùÆ?c†§vmÎO|ÕyE{H–(²XÝÏ_»¶„ÐK/EB!®³½t©ïðË\.Î7'ú¼<ÿ‰'–¼ñc\«ïžoÍšà¢EžV­8?3îíµ½%å‹·•÷õéS|g«@µ¥Ð[où>ÚãâüÄW¹WÂXWìì‹«AàñYä[µ Ì›WòÙg\E*ÞÛÙ¸1xÕUž8ßðEry:t^xaøë¯©UÔÛºµøž{|ƒs¾U·ÇˆÊogߨQଳ«VqQ¨ºT²jUpáBOçΜoøjóK;xÆ?D…+\x|ö{o¯^Ánÿöוr\Þß?i’§V-Î|¢÷öí¼åŒÌX|! ½ô’„¢Úµ9ߪÚç~ òÅ;æþmРâ›oÿø#—‰Œ=@Z·.xÍ5»ö’à|ÃW§ÿUâ2’EÖÓ0ðø¬÷yy¾# =ñDÄçãJ“ô ôãÁ›oöõéÃùƒOíóóý£FS§*Ñ[±"pöÙž–-9ߪÍr|× Êï@ïÝgŸàÂ…%}‰D¸pT$œ½iSñwxö¸8ßð5æeHºÀCŸ‹¾qcÿŒ%ï¾Ëå*¦·sÉ%Þ^½8ðñùO9%ôøãaÆ8¤sà –¼õVðâ‹==zpþT¿·Íb”/ÞÞÓ¶màôÓC¯¼ ¸š¤~zôË/Åÿü§oäHO~>ç¾Æ½þúw‘ÅÅ$н&Ÿ“ÞÓª•„àí·—|õ•ƒ‘ââÐk¯ùÏ<ÓÓ¾=ç>3Þåòöê˜7/ôÒK‘;¸É+«n‘HÉ_o¼Ñ?rdQ½zœ?x<_)ß ï¸ãŠï¿?üý÷\bb.77?ùdàôÓ={îÉùƒÏ*/˽(,ŠÑ˃áñ6ð-[úÇ þýïá•+ítˆlÝzòIÿĉžÆ9ðUèóó½ƒ/»¬äw"Á cgÃÿãþO,jÙ’óÇã«Ä·há=:xÍ5%ï¼ãÌ©|‘­[CÏ?8ûloÏžœø¬õ1#’MÃH\é·•oÞÜwì±ÅK–„¿üÒA‡H0XòÉ'ÅwÜá?ùdO·nç¾Ú}ýúþ‘#ƒW^zá…ðÚµ6ŽåEvì(yÿýâ»ïœq†§kWÎ<¯V_Pàëß?0wnñSO…ÿ÷?Û^kJJÂß~zæ™À‚¾ý÷÷¸Ýœøì÷ñÃ!,ÿ=R·¹oÖÌ7vlð†B/¾þ曜˜‰DÂß_üÈ#9s|Õ®Mùâ³Ë7hà=àÿi§ßv[è­·"›7çð­Þwß…ž~:p饾cŽñvî¼k+rÎ<¯qïmßÞ7rdàœsŠï½·äÝw#ü‘£“ïÂk׆^|1xÍ5þI“¼½{ﺵã|ÀçWBˆBE±/‹wáÂãåÝnÏî»û;ÌÆÁn-]Z²jUÍŽÓ‹–|þyèùçƒK–Î=×wÄž¦M)/|nyOÛ¶¾áÃóçÿóŸ¡×_ýu¤°0ëb ë×—|òIè…‚7ß8õTo¿~EuëR¾x<ŸK¾E ïÁN?=xË-¡W_ ¯[ ‡³èZG~ÿ½äóÏC¯¼¼é¦À´iÞŠ4 |ñ6ðe"qÆEb¸Â…ñxçz—ËÓ®oÈÿôéÁk® =õTèµ×J–//ùâ‹ðš5á ";vTæ2).ŽlÛ^¿¾äÃCO=¼þúÀYgùŽ>ÚÛ«—§Q#Ž?Þ¶¾NOçÎÞAƒ|ãÇæÌ ^}uñƒ†þóŸ’•+#ü …2|{„û­dŊЋ/ßsOpÑ¢Ài§ùŽ:Ê×·¯§MÛMyáñx¼ }^ž§Mß~ûùGŽôO¸è¢â%KBO=UòÎ;áï¿lßžák×þñÇ’åËCÏ>[|ûí‹/L›æ5ÊÛ§§mÛ¢¼<Ê oW¯è%¢‚‰ËHÆMÉÀãñ©|ݺE-[z;uòöìé8Ð7l˜oÌÿĉþéÓýS¦øÇóy¤wÈoÿþÞž=½]ºxÚ´)jÔÈ“ŸÏñÄã­}^^Q½zEÍšywÛÍÓ¥‹§G_ß¾ÞAƒ|ÆùFòwœÿ¤“üÓ¦ù§MóŸt’ï¸ã|£Fù† óäëÓÇÓ½»§sgoÛ¶EM›zêÖ-r»9žx<·ðµk5mêmÛÖÓ¹³·{woŸ>Þðz¨oäHߨ±þOôOêŸ>Ý?y²oüxÿèѾ#Žð|°oÀï¾ûz÷ÞÛÓ±£§uë¢&MŠêÔ)rq<ñÎõŠáP³bdüt‹¢„x<Çãñx<ÇãñÑ#,Eü’ ›dâñx<Çãñx<ÇÇ{ʼn„…Ь¦dàñx<Çãñx<Ç'zËɦaįô€Çãñx<Çãñx<ýWÅîQa1"ai<Çãñx<Çãñxk÷ʘE~ˆ_Çãñx<Çãñx<>:+ñ5žØñÆ·Æãñx<Çãñx</óñk9DOÀ0Æ-ðx<Çãñx<Çãã½Å*EÉx(Âãñx<Çãñx<Oîe“Hx¥å “x<Çãñx<ÇãñJ\£!ÅÆŒÇãñx<Çãñx<¯”#”´0~Çãñx<Çãñx§û4îr†1ðx<Çãñx<Ç;Ñ—E#vÄG&vý¦ì‡è·Ããñx<Çãñx<ó*"ƒÇãñx<Çãñx<>C^qш1ÑWbdÇãñx<Çãñx<>™O6ø!EÆãñx<Çãñx<Oô²üÛc|Çãñx<Çãñx<Þòç#ÒyG<Çãñx<Çãñøø iLÃ0 “Àãñx<Çãñx<WTL"1,añ<Çãñx<ÇãñødÞrDƒÅ ˆ¦ˆÇãñx<Çãñx|i aGz{O$2<Çãñx<Çãñø˜ ñ‰xš àñx<Çãñx<ÇïügôŠ1ãâ¨åÏx<Çãñx<ÇãñÑÿTò˜DL@bGÌzx<Çãñx<Çãñ^ Aˆ¤ó1vX-ðx<Çãñx<ÇãU6¢!á-b“ŒÛ6Çãñx<Çãñx<>™×«hD²¢ÆEàñx<Çãñx<ÇÇÿU ! íH´pY…4ðx<Çãñx<Çãwú]4frEÜ¢‘‰ñ <Çãñx<ÇãñøD¯èhÄŽ²„vÄ.ç`½Àãñx<Çãñx<ö²œ\Q”t Çãñx<Çãñx|2o9ã"ÚEƒd34ðx<Çãñx<Çã];µ)ÅŽôBx<Çãñx<Çãñɼv$¬ë|FLÆãñx<Çãñx<óÑÚ•¸MEÂz’x<Çãñx<ÇãñI}܋謸y ƒ%ðx<Çãñx<Çãc²—vˆÛ 3q¥<Çãñx<ÇãñxKo½½¥U¸B†í+ðx<Çãñx<ÇãwH†©®ÉBàñx<Çãñx<Ç[NHð¨e Çãñx<Çãñx<_¶Fƒåkdˆdàñx<Çãñx<Ç'úè "ö‹âñx<Çãñx<ÇÇŒh(Ï <Çãñx<Çãñø¤^ ¡íH´Àãñx<Çãñx<·ðÚa W£x<Çãñx<Çãññ#”vÜÂðO<Çãñx<Çãñøƒ Çãñx<Çãñx<^‰#Êõ<Çãñx<Çãñx¦N¸vȵ=Õ;Æ<Çãñx<ÇãñøíéhP:oÇãñx<Çãñx<牻àñx<Çãñx<ϘWòפûîx<Çãñx<Çãñe†]ÔüšD†Çãñx<Çãñx<o1¢a{l Âê5Éâx<Çãñx<Çãñ;™ÿfùÏÄ_âñx<Çãñx<ÇÇ™ƒÛ†@àñx<Çãñx<Ç'óJ9Ñ"U Çãñx<Çãñx<^»F4ìD Ó*vý^V“.ðx<Çãñx<Çãã#sLb{ò1x<Çãñx<Çãñq^qh»Õ™–¯Çãñx<Çãñx<ó2Ä*,Kàñx<Çãñx<Ç'óŠ]1Òµ]ÚnµŒdÜ” <Çãñx<ÇãñøD¿k1H%›€±Ýú—x<Çãñx<Çãññ^;,–‘,a®Àãñx<Çãñx<·ôJÿ`®HXïÇãñx<Çãñx<>Þ'®$¹++nKÌíI6ÉÄãñx<Çãñx<ß9¢!v„ƒv$,&¹#áex<Çãñx<Çãñ–^‰{T$L±Pâïñx<Çãñx<Çã½bGAÈrðÃŽ˜*ðx<Çãñx<Çã­½’*´#a&†1°Çãñx<Çãñx<¿;…yŒDj€Çãñx<Çãñx<ÞÉ^V,u0Àãñx<Çãñx</:±=~ã ëùÛ­–Äãñx<Çãñx<Y 2~u‡íïký{<Çãñx<Çãñø˜ ;Œ/Û‘<ŒÇãñx<Çãñx< ‡GGlOøÇãñx<Çãñx¼¥O|±)€aù'<Çãñx<Çãñø]#â¢ÚždD’èÇãñx<ÇãñxüN¯íIrHg±<Çãñx<Çãñø¤S'ÒˆO¸ðx<Çãñx<ÇãSÊqÀãñx<Çãñx<Wú#ˆÍàñx<Çãñx</Ÿ Çãñx<Çãñx|¦|y_I&“Éd2™L&“Éd2™lѰ-½@Å.†Çãñx<Çãñx<oé•ê5®r~Çãñx<Çãñxçz¦NÉd2™L&“Éd2™LÎÜÔ‰m Q C#:†Çãñx<Çãñx<ç•ðšÔï‹Çãñx<Çãñx<oé£G4Äü`þ'Çãñx<Çãñx|âå[£a[y0Çãñx<Çãñx§yEÅ$G“íWÇãñx<Çãñx<oé“nS±-á—ÛŒ¡ <Çãñx<ÇãñxÅ­i·HºÇãñx<Çãñx|´×¶$ñ‰d3.ðx<Çãñx<Çã“yYŠm± Ëãñx<Çãñx<ÇÇy‚Û“o›‰Çãñx<Çãñx<o±FC⌋]‹FnK2Çãñx<Çãñx<ÞÒ+v„ƒb£?àñx<Çãñx<Ç'ó)ÂÛ,V•Äãñx<Çãñx<·öJ¦·%YÔÇãñx<Çãñx<>™×¶$qˆíVËKn7þÇãñx<Çãñx¼Ã½¬–y0½5Çãñx<Çãñx|2¯mQ+7$ T$þ Çãñx<Çãñx<>ÑË2±=ùŒ <Çãñx<Çãñød>zDCÌŸ·%;<Çãñx<ÇãñxK/Ë?›ßÇãñx<Çãñx<ÞÒ˸’¤¶ÅÏ»páñx<Çãñx<Ç'ó2Ä*¶÷´Àãñx<Çãñx<û¥¶I–(ÙËðx<Çãñx<Çã“y•ç-¬ÿ‰Çãñx<Çãñx<¿Ír׉dÿL|1Çãñx<Çãñx|Ü/•Î;&NÉÀãñx<Çãñx<7h(×;âñx<Çãñx<Ço³\£!×ÞÇãñx<Çãñx<~[â )óöò`<Çãñx<ÇãñNó2ëíå|w<Çãñx<ÇãñNöåÑ@&“Éd2™L&“Éd2™¼­\#Èd2™L&“Éd2™L&“+hØšmMû—x<Çãñx<ÇãìÑ@&—#)­”VKÿ“þÕ‡L&“Éd2™L&“SOp—ó-ðø,õKË]%R¼ŤÚRKiw©«´¯4@:D.#/"!Í•..—®•n•ënéAéIéyé?ÒÛÒGÒ—Ò÷ÒÏÒ¦øàå‹Çãñx<ÇãsÌ—ï‘ìÖrvÛðøšòÿ•$5•fJï'zP÷o§êHyRSi7©³ÔCê+ ’†IGIÇI“¤éÒYÒ|ééoÒÒíÒýÒ£Ò¿¤W¤7¤åÒgÒ×ÒZé7©PâüÁãñx<ÇãñÕàã×hØjõ2à <>;ý䨮{?i‰´^ªäû7Sn§F¥C0ö’zK¤!ÒééijéŒ ˆ`h׌¤KïH—ÁøEÚ”$~Áù‰Çãñx<Ç;Ö3Éœlü^ªoÕÍ®/M‘þ[‰µê‰d‘ê•ÁèR:c°t˜t”4Nš,M—fKçI—HWJ7•Áx¬tÆ›ÒûÒgÒ7ÒOÒoÒV–À “Éd2™L&“s3Ç?L·H½Àã³Ð/IÕ1î&]-­U¹Ï7A…jLyR#©UÔŒ¥C0ÆJ'J§H3¥y¥C0®“n•î‘’ž’^þS:ã¯%<–þˆ-tê Çãñx<Ÿq/&“àíçû¥×-Ž•ž— Ó{xþ] Áh&µ“ºHûHýJ‡`-“&I3¤9ÒyÒ¥ÒUÒMÒÒ?¥Ç¤ç¤e¥C0>—¾‘ÖJÒ>‹¨¿x<ÇãñxÛ{ë5¶¦®Àã³Ó¿_þngGi¡ôMé³îdïÿ3t’1Õ’K­¥ŽÒÞQC0F–Á˜5ã éZiI錧¥¥×¤w¥O¤•ÒQ»¨Rßñx<Çãñ9äSŒh0ˆÀã³ÐϬh/Ñ- —•6K–ᅳž4©†â¥3¤»¤’ŸŸ´x<Çãñø,ñJŒC–—´Œ[àñÙã7JM+ݯk%Í•>Mèέ¤ËKÊŽ¸ÃétéNi¹´)vÊíÇãñx<¾Æ½¶&ü*ÉëÝqÏBÿXF{tƒ¥{¤ Ò_ïÿ¥´‡ÔNj&Õ—X’”%q‡ý¥ÒíÒÛQS-hðx<Çãñ5å•8"nrÅÖTc'ðø¬òÿ•¦$ÙÞ²b©±4Cz×j©¿uÒwÒÒÒÛÒ«ÒRéIéé.ééi‘´@š+.M‘Ž—ÆHGH‡Hý¥žRW©ƒÔBj åÓo&U.Hý¤éÒߥw¥±K<Ð>àñx<Çã«ÁËj¢…Ûò•[“®ý€Çg_/-‘öÏh®·t³ôsü”ŠÌÿMÒÒ*i…ôr½.½$=+="Ý'ý]ºAZ,]$+Í’N•N’ޕޔ†JJûIÝ¥NR©‰T‡þ·ƒã}¥iÒmQqÚ<Çãñx|•zÓ2û[“¿Ïÿ43 7ìJu¥‰Ò«V{dùñÙ"ý5ãséCémi™ô¼ô¸ô€t§t³tu錳¥Ó¤)Òéhéé`i©—´§Ô¾tF]ùœJùÒ~ÒTéVéméw‰öÇãñx<Ÿq¯mIæT${k<>ýïÒýÒŒöÙºJ‹¥ÕÆ®šCŽÿÿ¤5ÒJi…ôžô_é%éiéaé>é6é:i±´P:G:S:Uš(•Ž”•ö“ºE Á¨MH ZR^iÜáé­Ò¸ç3Çãñx<¾’^[S-¢^ãÞ–*†Çg¹ÿBš/µÍè#â1Ò3R¡ÄñϬß(­“¾•>—>ë-i™ôœô¸ôϨ!—Iç' Á8\:HÚ_ê)í!µ—šKõ‚‘*î°¯tŠt³ô–ô[̺’œŸx<Çãñøt½’!RŠÀãs×o‘žFe´ÛÙ^º@ZûL˜ãŸ…¾PúEZ-­’>.‚ñbéŒ{¥%ÒõÒÒ…Ò9Ò,ij錑¥C0zK{K¥ÖRc›ÁpK=¥)ÒMÒëÒq½Àãñx<ǧåãžÁº¶ÉlUIËßãñ9í¿“I]2×7sIä¥MV«ýsüíí7Èõ“ô­ô™ôô¦ôŠ´TzLº_ºCºIºJºD:_š#Í&K㥣¤Ã¥ÁR¿Ò!íJ‡`¸²,î0YºAú¯´^â|Àãñx<Ç[z6«Øj®Àãmé_’&dô¹tsé,é£ä› rüñéøß¥K×I¥îÙ´ªKÚGš$]_w ¼ðx<Çãñe‹AšW’ÜûK<ÞÆ~tÔ3£ý±ÒÒ¯QÓÝ9þø ûߥÿH×K¥Ywè!M”®•þ-ýÏjå‹Çãñx<ï×ùqoM2c[Âzx¼ý›ÒT©aæºa ¥©Ò›Q½/Ž?¾ò~“ôšt£4Iê)dSÜ¡›t¢tôªôKÔ< ÊÇãñx<Þö^É‚»\ʱx¼]ý¯ÒÒÀŒvÀzJ×I?•ö»8þø úÒÒÒ”,‹;HÚ[:AºZZ&ýÌùÇãñx<ok¯­É×Üšt <ÞYþ#i¶Ô§½¦U˜Þq›Å4 <>ëüŒØ>L-©ƒÔ_:Z:Mz-*ôP±÷_)] µÏ\/+O%=)mIoÍÎ|åýfém¹n•¦JûeYÜaiœô·¨¸å…Çãñx<ŸC^Ñ3.¬¦aÄÿÏ~´±sGl¿¥Âß§PzFÑ•ÿÛJó¥/$Ê_Í~³ôŽ´D:Uê#Õɦ¸Cé8i±ôBÔ%ÊÇãñx<>k½’,ó8ѽ-ù»ãñYåû;-ÏÅvã+ÿ}ÖH‹¥®íY"ýCú½t 9勯f¿YzWºMš&õ“êfSÜ¡“4Vº\zÞ*î@ùâñx<Ç׸WÊÈD²1x|ÖúÆ^Êò„U2õ}–I3Ú%k"ÍŒú”/¾¦üféÿ¤Û¥ÒþR½,‹;#-’–Jk’TÊÇãñx<¾:½õÔ¸Ÿ·¥xw<>‹ü©võû)yW$#ßçéf©wF»Rý¤%Òú4ª=ç¾üéÿ¤;¤Ó¤þRýlŠ;ì.‘.“–ʵ:j? ÊÇãñx<¾Ú¼¶&ì‡iÿ÷Ix|ú¯Œ›BÔ·ÎPUßç]é4©qæzPõ¥É¥‹Yr>à³ÇJË¥;¤Ó¥Ywè -]*=+ý Q^x<ÇãñÕàU®if<¾ýëÆ^Ç^©žpfüûlî–g´ïÔMºZúQÔ_|6úBéé.i¦t€Ô ›âí¥£¤‹¥g¤ÕÖëJR¾x<Çãñ•õ*ÏÛ¹Ëùñx| øGS-²XSßÿSi®Ô*s]¦ZÒ±ÒR©0ˆç¾¦|¡ô¡t·4S:Pj˜Mq‡¶Ò(i¡ô´ôƒDyáñx<ÇgÄ[/™ò3ðø¬õ7ûǧñ ³J¿ÿÒ£r —Ü™ë,u”J_§CáüÁ× ß*×GÒ=Ò,iÔ(›âm¤#¥ ¥'¥ïÄõÇãñx<¾‚^„að6óç;sÒ^ ²ª¿ÿ×ÒBi÷Ìõ‘ÜÒpéQé‰óŸ+¾PúDºO:Kœeq‡VÒHéé éÛ¨õ(_<Çãñx³ÿ«Cb~±;ßàñÙâ§{W§õ‰Õ÷ý åZ*+ÕÊhïh®´Bâ|Àç¢_!ýCš-”ѵT+ŸZJ#¤ ¤Ç¥o¨_x<ÇãñÉ}9Öh “s"aì*ܯ,=ç”®–ºg´_4Xº[Ú ª99‡ó§ÒýÒé`©I6ÅZHGHçKJ_QËÈd2™L&““RŽ‹pãñYî{û¯Äô²ñû¿&MÎè¤Ò»çÞþ3éi®4DjšMq‡æÒáÒyÒ£Ò*‹êFùâñx<wWaÂ@nóûâñYî[;ŸÆ>xÌÚÿßÿIK¤~íõ–n”~Ž:œ?ø\÷_HJó¤C¥fÙwh&&Í—‘V&‰;P¾x<ÇãíêÓíY¾ ðøšò…Ržñî]ZO³èÿw¹43£OnëJ¥e¦‘Þœoø\õ_JIçHC¥Ùwh* “Α’ëËòͳ |ñx<ÇçžOq»cŒgàñYç¿1Þë74gÈæÿßߥH‡d´çÓUZ,­N:Àó ŸóþKéai¾t˜Ô2›âM¤C¥yÒƒÒIâ”/ÇãñøÜõ;Ÿî¦ QÆþ ÏNÿ¦\†›û=Koès÷ÿ÷ i¾Ô6sž|i´ôŒ´Å:âÀù†·_%×£Ò|éð,ïÐX"Í•>—«0iH”òÅãñx<ŸÞba¼Â˜Wº“*ðø¬ó§Ú…Áÿ¿›¥'¤Q©æ‰”+µ—.VJœox‡øo¤G¥ó¥#²l¼C#éélé~i…Th1äòÅãñx<ŸÕ>¦SQ˜jFa¬Áã³Íßl¼}_v¿n“ÿßo¥Ë¤Î™ëḤaÒƒrm’8ßðŽòßJI ¤Rë,‹;$͖;P^x<Çã³Ù+åì‹”ó4ðøìñï×ÏJú¸>çÏKÒ©vF÷ê;Kú(ÕìqÎO¼]ýwÒÒÒH©M6ÅJƒ¥³¤û¤O¤Â¨fòÅãñx<Ÿ%^V¯q[NÆ(LúŸ-þã ú•ƪbƒã³NºN®žíÕ ”î~-ëÌp¾áè¿—ž”.”ëÈŒ.’RùÔ@,)Ý+×G¥‹­P^x<ÇãkÖÿõ¸Ò½ëW… ´Ð"nÇg©a¼#¿·´·lûãó¦4Uj˜Ñ‡¨S¥7ú0œŸxgúÕÒ“ÒEÒ(©]6ÅêKH3¥»¥¥-Q—|ÊÇãñx|µù4w¶s'þÏBßÛx þÒΉN9>¿JwH3Úé)]'ý$q¾áñ»üéiébé(©}6ÅêIHgHwIH›-Öw |ñx<ÇgÞ+1&Qhõß„õðø,ôæ©Ô—Þd;íø|(%5Ï\略4Az±t~8ç'í×HÏJ—HGK²)îPW(.Ý)-—6Sñx<ÇWW’˜„»0ùòx|ÖúãMö/’“Ï&éAi˜äÊ\¿¥³t™ô]ü*›œŸx|™ÿQú—t©4:ûâý¥Ó¤Û¥ÿ“þ°óEùâñx</·WlL"~†!žÇg›ÿÎxK]KâxþõÃJiAFxçI£¤'J;*œŸx¼Á¯•–J‹¤c¤ŽÙw¨#í/M—þ.½'ýaýì‚òÅãñx<ŸÚ«ÐjŠEìî]?D‘Àã³Í¿m¼‡î"q<£ýféi´”Ÿ¹ŽJ[i¾ô…iÝ{Ž?ã×IÏK‹¤±R§lŠ;Ô–úIÓ¤¿KïJ%Ê Çãñx|š^I¦[Ä„.Ì“4ðø,ñOošŒ}ØÎñÜõ×ÕÒb¹ºf´‹rˆôiCÔ¦˜œŸx|:~ô‚\—KÇJ³)îPKê#*-‘Þ–6‰û<ÇãñI}Y×+:ûŽÑ¯tãñYë—8®tŽg2¿Lš(ÕÍ\Ϥ©4SZ5i…ãǗ˯“^’Kã¤=²,î°Ÿ4UºEzKÚ;c“òÅãñx<Þá^… 7ÑA‹äñ <>ëü…ÆÛâY¦çoÏ2ÿ³t£Ô[$‰TÁt&í-ÇãñÎöŠ\a±faì"“x|ÖúS7¾——Ýør<ÓòïJÓ¥Fô™H$R9SÚ[<ÇãíãÖáwÇ-,Æã³Ói¼ñ½§t?dz\þ7éni='‰”vF{‹Çãñx¼³½Ç?$nb±Õ8^ÏßÇxãûBÙ„ÏŠøO¤¹R+ºP$)UšO{‹Çãñx¼³}ô:üDâ(ˆØðøìò»o|?8ž•÷›¤G¤á’›¾‰DJ’ž£½Åãñx<ÞÙ^–C ¢Q²ßàñÙæó7¾ë$ŽgýWÒBiwzT$)!m ½Åãñx<ÞÙ>~pca’e$ ­V}Àã³Ço¼ëÍ—8žUá·HK¥c¥Zt­H$’$©.í-ÇãñŽ÷Ë5E/á=£ÐêÃðø,ñïo|;IÏ*õk¤«¤îô±H$ǧ´·x<Ç;ÞÇmoéN¶Âd’í+ðølñOo|ˆZãY¥~¡\t´H$'§ƒioñx<w¼×Öä»SX¾)Ÿþ6ãï1±†9žUçÒÍ"‘œN§½Åãñx<Þñ^Éêäxâñ¹ë3Vó»hoñx<w¼·¾éü`ž§Çgƒ7÷o/“8žÕã2ÄÇÏußÍXÍ—ÑÞâñx<ïxŸ8¢!EÏN_þ-dz*|cAü+áQ'ÇÏ9ßÐXÍ¿¤½Åãñx<Þñ^É^lˆ^àñYè÷7Þø>—0bŸãYE¾ƒ± –§ ‹r<ñø,÷¿§Z£áWÚ[<Çãï•,&‘êÝñøìòí7¾ï'sŽgf}cA¬IXŽžã‰Çç–ßXÇÛHO<Çãñ²z±;Íx|öxsÿv­uÿ–ã™a¿ÖX yÒ–˜1ÕO<>÷ü3ÆjÞϪ±åxâñx<ï4¯tE¤™ñøšò«Óèßr<«Á›u¶—8žx|®û[Õ|ŒÄñÄãñx</sˆ"É;âñÙåÿÏxãÛAâxV_šÆ£NŽ'ŸÓþ|c5ŸE{‹Çãñx<>aDƒáÝiÿ¯nÿ¬\†ßÒ9žUâï6ö@F•ÇÏU’±š_I{‹Çãñx<^.qDð6ð·o|G›Fìs<3é/7F|¦ÑÁãsß1¶·˜€p<ñx<wŠW2±¥œïˆÇ× ¿Ôxã;CâxVŸe,ˆ‹Òîp<ñø¬õ{«ùhoñx<ÇÇMØb KX¼#Ÿ%þ4ãï¥éÞ8ž•÷Ç âVãÔ Ž'Ÿ¾‰±šE{‹Çãñx<>jDCš Hºñø,ô£7¾·':Áñ̰d,ˆ'%Ž'ŸÓÞ¼…­¤ßioñx<Çÿ5¢a‹i8„;1>Çg›`¼ñ}ÖêA:dz*üÆ‚xË*ÞÉñÄãsÈ¿WŽ-l9žx<Ç;×Ë2±¥ôç-)Âx|VøÆ{ß÷$ŽgõøÆ‚øÚºÂñÄãsÆ?i¬ãw.ÐÀñÄãñx<Þé^åáÂã³Ð×3Þû®–8žÕàK5¦z£ÄñÄãsÚßhÜYæ¸tw–áxâñx<os/㸋?áñÙæ4vnÝÒf‰ãY ~…± Z•–ǯj¿E®ÍÒ&i“´Ù¸ Dyßÿc5Ÿ“h ¼ðx<w¦—Õ W¡ÜIÞ×Çg›_žzÎ0dz:ü+ÆG=K'°TÑ÷Ù"m–ëi“´Qú]Ú ×é7éW¹ÖKÿ“~–~–ÖÉõ“ô“´V®¥5Òjéé{¹¾—¾“¾•ëéki•´JZ)×—Ò—Òr}.}&}*­>‘ëécé#¹>”>–KË¥ÿ“ë=é=é]¹Þ‘Þ–Þ’Þ”Þë éué¿r½&ýGú·ôª´L®W¤W¤—åzIzQzAz^Z*×Ré9é_r=+=#=-=%=)×ÒÒãr=&=*="=,=$×CÒƒÒrýSº_ú‡tŸt¯\÷H÷HwËu—t§t‡t»ôw¹þ.Ý&-‘ëVééfé&éF¹nn®—ë:éZééjé*¹®’®”þ&×bé éri‘t™\—J—J—Èu±´PºHºPº@® ¤ÒùÒyÒ|é\éiž4Wš+-Í‘fKgIgJ³¤YÒLé été4i†4]š&**M•N‘N–¦H“¥IÒ$é$i¢t¢t‚t¼4A/“ÆIÇIÇJc¥c¤1Òhi´t´t”4J:R)†KGHGH‡K‡Iä¡Ò¡Òiˆtˆt°t4X$( ”J¤þÒþR?©¯ÔGê#í'õ–ö•zI=¥}¤Rw©»ÔMÚ[ÚKê*í)í!í!u‘:K¤ŽÒîR©½ÔNj'í&µ•ÚH­¥VRK©¥ÔBj.5“šJM¤ÆR#©¡ÔPj Õ— ªÞe —ÿÊÔ÷ãííµ´·x<Çãå*”ÛbDÖا"[R­ô€Ç׬ÎxãÛOâxVÿ§± —2ø}Î’Ü26H$’$éΨ •¯ïƒŸõí-Çãñø¨ îô&`¸·¤5%¯V—ñÆ÷¨ä[*r<3ë¯6Ĥø*õ}Ž¥ûH"¥—ž“2Xß;?ë Ú[<Çãñ» [b £#âÖ–Äã³Ë_f¼ñVÚ¿åxVµŸg,ˆsã×h¨Ô÷H÷‘DJ/-OxQ™únÞYæ[Ú[<ÇãñÑk4Ć"Ü–ï¸Åjê_ãþ ãïÅIjÇ3ãþDcA\Û©ä÷Ùî#‰”^Z3˜¨Rõý‡TÓ•þ ½Åãñx</wÌ®V3.Ü…±¿Ù½Àã³Ác¼ñ½-vÅuŽgÕù¡)&o»2ø}jÑ}$‘ÒHõ¢FU¾¾¿iü¬ŽQ 4Ðâñx<ïp¯-ek¶ÇÏ»H TD‹Àã³Ä`¼÷}ªt³ŽgUûÆ‚øwY'¤²ßçº$Rz©kÔ"¬•¯ï?kPÔÐ ÚC<Çãî÷‚-¥qˆ-ñ݆_âñ5èÍ‹“½“°ÙdzŠ|3cA|Q:´¤òßç]º$Rzé )ƒõý:ãgM(mliñx<Ç'>ìuYmƒ=XÏ.o^œìûÒ Ï*õ¤Úlr½”©ïó$ÝG)½4>&ÀWÙú~¶ñ³æÅî,Cû‰Çãñx¼“}܌ʘ°Db "a†_Ãþ'ã¯KÚTú@ãY¥~¥± Kü>·Ð}$‘ÒKg–uþ3Pß3~ÖõQA ÚO<Çãîcn â&]Ä®*éŽ{/<>ü‡Æç軕öo9žUíÿkììµ$gå¿ÏstÉåÊw» òò òòjååÕÎϯ“Ÿ_·  ^AAýZµÔªÕ°víFµk7®S§I:MëÖmV·nózõZÔ«×¢^½–õë·ª_¿uƒm4hÛ°án ¶kÔ¨]£Fí7îиñîMštlÒ¤SÓ¦›6íÒ¬Y—fÍöhÖlÏæÍ»6o¾W‹{·hÑ­eËî-[öhÕjŸV­z¶nÝ«uë}Û´éݦÍ~mÛöiÛ¶OÛ¶}wÛ­ßn»íß®]ÿví´o? }û:Сûï>h÷ÝwìxPÇŽwêtH§NC:wÒ¹ó¡;íÒeX—.‡í±Çá{ìqÄž{ßsÏ]»ŽìÚõȽöµ×^Gí½÷Ñ{ï=º[·1ݺéÖí˜îÝÇvï~lÇõèqÜ>ûŒÛgŸñ={NèÙóø^½NèÕëÄ}÷¸ï¾'õî=©wïÉûí7y¿ý¦ì·ßÉ}úœÒ§ÏÔ¾}OíÛwZ¿~Óûõ›±ÿþ§í¿ÿéýûŸÑ¿ÿÌf pæÀg xÖÀ³8`ÎÌ9ðÀ³âˆk†¿ö¯ñÄg&N|vâÄtÒs'´tÒ¤ç'Mzaòä'O~iÊ”—¦LyyÊ”WN>yÙÉ'¿zÊ)ÿ>å”ÿLúÚÔ©ÿ=õÔ×O=õiÓÞœ6í­éÓßš>ýí3Þ™1ã3Þ=í´÷N;íÿN?}ùé§¿ÆœqƇ3g~4sæÇ³f}2kÖŠ3ÏüôÌ3?;ë¬ÏÏ:ë‹Ù³¿˜=ûËÙ³WΙ³jΜ¯Î>ûë³ÏþfîÜoçÎýnÞ¼ïçÍûáœs~8çœÕçž»æÜsœ?íüùkçÏÿé¼óÖwÞÏçŸÿËùçÿoÁ‚õ üzÁSöÛÏP[Lg¨x}7/ˆó8í-ÇãñøR¯Ä=*,—‘LØ<Ï ¿ÔxãÛ'vØ0dzêü£Æ‚8$f\Ie¿Ïãg];|¸ïòËÉd‡äQ{íe¨÷J¬ïŒUïmÚ[<Çãñ»F4$Ó–/0¼;_#þnãï‘¥7ÙϪö7¦Z%.ƒßç0ãg=<~š¯Ÿz*O²sòn ªÃGV·«ï_ë[ÚL{‹Çãñx<¾ô¯*LˆRX…%܉ËHâñÙàgï}/Œ_œŒãYUþdcAü-aoËÊ|Ÿ¦ÆÏúfî\:Ÿdç䂼K¼yô[^Ëñ¬"?ÜX÷YL¯à÷ù5Õ2û[/¹„Î'Ù!yÝyçêB”Áúþ@êuXhñx<Çïü¥¢ö¢°øsBdÂÇg•?ÐxïûDü®ŠϪò½ñ‚Õö–û>Ÿ?¨y½zt>ÉÎÉΜi¨Êö¶Ì@}¿Ê¸ÅÏÄÒ í!Çãñø»NDϵHœzaùŸ%¾‹±ÛùVòuJ8ž™õmña®þ>/?¨WëÖt>ÉÎÉK'M2T‡±k£T²¾›ç©ÍÑ@û‰Çãñx¼£½Ç<$‘ø_㾑yº~òûÏ úÍR¾± Ö™žv–ïûÜg|¬:¢kW:Ÿdç仯Œ1T‡cb;ÿ•¬ïÇëøÍí!Çãñø]ÿ´X#Ú0ãÂrÍI<¾¦üºTÓõ7&ôo9žUá¿3–Bí„ÞNe¾ÏbãgÚ·/O²sò¢aà Õát)ƒõ}cÕ{*fôí'ÇãñN÷²ŠU¸“–pãñÙã?6Þø¶I¸ÉæxV‘ÇXÊÂ=ø>æñÛz(O²sòýûªÃe ÿÊÔ÷ÝŒUïÿ¬6¾¢ýÄãñx<Þ±ÞôÂòex|öøŒ7¾½“¯¸Îñ̬ÚX¥ ~óøí;F¦óIvN>¦{wSuH>¤«õ±ÀXõ~¢½Åãñx<7¢C†ÏQ¯ñÆwx’›lŽgÆýmÆ‚8¦<=”` ñ³–NšDç“ìœ< }{CuxÖjÖRÅêûJc½+H>o‚öÇãñxgz…Û<%¯Yÿ7ã½ï)±ý[ŽgÕùKŒ 4ž¾³ 2ó}: ý£™3é|’“woÒÄ8A™ªï¯ëøÞ ÚO<Çãí•Þ;–½5Ÿ=þLcŸsAª• 9ž™ò3Œq™õ›Wäûl‘Ë<~û Ðù$;'×-0Uˆ5Ö+6U¤¾ÿÃX±$í'ÇãñŽòq7î´ß¯y?Þxï{S9jdzR~´± nOñI÷û|oÞÞ"?Ÿž'Ù9yý‚†êà–þˆ©z•ªïW«Þd‰öÇãñx|´Òœ8(bKÂR“x|–øƒŒ÷¾•=dãxV­`,ˆg^[áïó¶y{‹¦Mé|’“WœiÔÕN™¼¾ŸžÞð1ÚC<ÇãñýFÉÿ–tè2Ÿ%~Oã½ïëñk4p<«Êïn,ˆ÷’D¹¿ÏÆ´ûît>ÉÎÉ/O™b¨ý”ÉëûÑÆª·$ucKû‰Çãñx¼³¼Œz×ÏîôÞ¯VßÐxïû•Å=Žg•øzÆ‚ø!¾ÃSñïs³ñƒÆ÷ìIç“ìœüc5T‡£”Éë{cÕ{6ùð1ÚO<Çãée‡p§/Ç×¼ÿM)Ò†•㙿ÖX ¥Å3ó}Î7~ÖÙHç“ìœ|åᇪÃ4eòúÞÊXõ>(«ã´Ÿx<ÇãÝÑ#ÒaàñYá?1Þø¶4 ååxfÒ¿oÜ÷n7‹‚¨ø÷™l,ôkGŒ óIvNž}À†êp‘2v}ß,å«Þ´·x<Çãã¦Nl.»“H6."æOx|–ø—ýÛ^IçMp<3ìŸ3ö@ú&ôv*ó}†?ë‘ñã}—_îê‰y~HÌx|Žúqûìc¨·*c×÷ÏŒõ®qÙÑâñx<wÇ­ÑÿšÍÖ‘ 7Ÿ%Þ¼¯ûádzzüÝÆ‚)eðût7~ÖÓ¦™Ÿ§Ó¯ÃãsÅîØÑPžL~OPÞúø¢±Þõ( &Òâñx<ßÅÊžx”þ9Nüõƒ{K| ¯aeZûºs<«Ü/6-9%&âSÙïÓÄXèßÎëMþ48ŸC¾K³f†êð–2v}¿+¨.í!Çãñøh/cX">J‘*ŒÇWŸŸc¼÷=/éüdŽg†ý™Æ‚X|͘ò~Ÿÿ¥ZþsÛ%—¤Ó‹KgŒ:Ÿý¾QíÚ†êðµ2v}¿ÔXïN‰Y öÇãñxüÎÅ ÿúóNpoN¥Àã³ÁO0Þû^û ãYu~œ± n.ííTþû¬0~P‹zõ ½iOÇãsÂo¼è"sÜm£2v}Ÿnü …¥’öÇãñxü®?É*8áŽ{GË1x|ÍúCÌëÆn·Æñ¬:± Kh¡*ü}^2ÎÑØ·M›ô{ËùxÏ6ÿåìÙ†êÐÆbOÙŠ×÷‘Æ:~GÌÐ ÚO<Çãñî˜]'þ BlN²Œäf«ÀãkÐïe¼÷}M.Žgõø®Æ‚x=vEúÊ|Ÿ{Í«Nvíšød8îq²çÆx|ÎùOj¨½­†tU¸¾÷2V½çK‡NÐâñx<ßõWmŽ‘j† ÏßÈxï»2­iÃÏ ø†Æ‚X•ôÉj¹¿ÏÆšÖ¯_²'ÃÞrNƒÇã³ß?4Î4iixY !õ½™±ê},Ñâñx<²›þŸÀãkÜÿ–j]À_£vUäxVOY¿K™ú>g?è’C›îîM>Þ›ü—x|NøkGŒ0T‡)±[NT¦¾oLUÇ×I´‡x<Çã〒̸0l›‰Ç×¼ÿÔxãÛ<~Ë ŽgUysA´ˆ]÷¾’ßçãgÝ9f › âãç d¨çGíï[Éúþ±qm”æ1 ÚO<Çãñî² ÑÈ0 c‹ÅŸðøšñ¯ûœ=Jo²9žUí— bŸÒNHF¾OóDñI“,»giNƒÇãsËŸÐË´rÂU¯‚õ}©±Þõ* &Òâñx</óŠö‡pdž+ÜqC&ðøôÿ4>dV6\ŸãYµ>eAdðû´7vx>š5+±c=ìÜ›êq1ŸC~HçÎæmw2Ußo7Öñ‘¥D{ˆÇãñx<~³Õ ec!6Ç'x|û«}ΓJ§Np<«Ú_c,ˆ‰±U+ó}6KùÆÏZ¿`7Õêz^ãdx<>‡üÞ-Z·ÝQ¦êûBc½›õA´‡x<ÇãËF4$.í;"fçLË¥ ðøê÷s÷¾çD­Éñ¬R?/‚ÈÈ÷ùÖøAµóó }6Ãpt<>G}ã:uÌÛîdª¾Ÿb¬z—J´‡x<Çã}ü-ÂæØÿn¶Þ'¯a‚ñÞ÷ÚÒûϪö'¦.ˆÌ|Ÿ·Œã·;7mêµê³þ‰Çç®ß~饿 ~³Ønª‚õýpãÝ¿(í'ÇãñxwÙ®‰ËçüÓ¦¥±íNfê{#cÿ,få]ÚO<Çãñîè]'âgYD$ܱ{W¸ñølðMŒ÷¾_Ä®DÂñ¬:ßÜX+¢æ°TòûÌ7~ÐÜAƒ¼iïèKc;ŸÍþ±ã7T‡¡IÖM¨@}ß i}lPƒöóÿÙ»ïð¨ªôàß; ¡×½†z %ÔHBKè-$ÔÐ)¬]×^YÄŽ]w±,²–EQQÁ^PQ©î® þþþý!sÛ;3·Lf2ßyîãƒðÉÜ3çæ=sϹ缇žžžžžžþÒ®º1 QVII¶IzúZðg|ÝûþP}ŸÍútÕŸ8Í8aò>Ê3_<Ñõ“& ö~—ÁÓÓ‡¿qòd!æïöb%Þÿ-Æ]ÀöžžžžžžÞÐÃp „ú‡U9èékÝ Þû¶4N·ÎútÞ/DSÕcU»å‘“AìËË3ì­ýîÇÿÒӇߜž.MðQåM°ïO‹c‰i^ûû°=¤§§§§§§÷þ_èÓ9hF)~Ö®» §¯eÿ’ØçLÖÝû²>]ò/‹¢à`y䬯.]ú»zÅûïæËÝ×-§§/_п¿×ÖäM°ï·‰q7 `{HOOOOOOoèñ#d>YÂCO_ëþAñÞwŒî&›õé’T|Ú™^³€Åò4/úg6[þnò—ôôaêÇwëæÇn/ÄûV1ÆWéÙ~ÒÓÓÓÓÓÓ_üKƒ¹Ífƒº©ôôµã¯ûœs½²±>]õ7‰b6àTy~ð••ãååÿgôì×ðq±áCczú0ò)­[ ápÀ`é„Åx_ ÆÝ¶‡ôôôôôôô†F? ÏîàO@OT¿QÞ€`}Ço/Äõ&£vÊsXw{q$Þ{ˆ1þ’4¢Áö“žžžžž>¢= X˜AO_ë^~Èv¿Ñ²aÖ§>K¼»M¦U[(ÏnñD““’Ì&™ÿŸyî=zú0õ_n”&u5óiµï-ÄÐ;jž Ší'=====}„{U—Ìç2 Í?ÑÓ׊ï-Þûþµ&ëÓ]Ÿ&^ˆý¾ÆDý/O•x¢¥ʹú ;uôôaêÿµ|¹Ÿ»½ØŒ÷o|åF9i>¨Áö“žžžžž>ÂýÅ»ßקv¸ÌèékÓÇŠ÷¾ï÷oYŸÎûDñBü[µ†ÅVyV‰'ª;öw_©õäIéôôa䟜;W‡Q—f9﯋q—Þ?ÐÓÓÓÓÓÓ›zˆ#¦ôôµåÏ@\¯|¯ËOÆútÉ×/Äqí“Uëå™.žèî3ä›Ü¯£§/ÛÔ©B8äê’ÔXŽ÷'ĸÞ?ÐÓÓÓÓÓÓ›zèÌ(ǃtzú`ú£â8CóšÎ-ëÓ]ÿ¹Ø ‰1ê„X.Ï yFAÿ¶ÿóo*;=}Èú²Œ !JŒ–NX‹wyÿÚlðþžžžžžžÞÔÃhÂc2†á1· §žÿ»8ФÛ@žõé’ÿ—Ø éTs!(O;ñ\‡‹Šþ/ÀçÆôôáë—  „Õê vâ}“_ûײ=¤§§§§§§7ðøY“0|SzúÚô‰÷¾£M– ³>÷O‰bˆùcÕ@Ëó3”hñ\?nÛö{€ÏééÃ×ONJÂá^ƒ²ïsĸ»¼ §§§§§§7õ×]xüÈ0IOTƒxï›/å`}:éï§–L7ñ±XžOÅ+Þ :šÝQúˆòi‰RÖçÔ ìÄû(1ôïèééééééM½÷‚v÷ð˜ TÐÓ׎—gó®­éß²>Ýõåâ…Xf´~ÛZy^OÔµU«ßì³ÕíãÇmÛöåå±êðѦiS!"Þ6˜h`1Þ»Š¡÷Õ²ý¤§§§§§§Wyíã_?ÓKÒÓ×–_ Þû^¥îß²>Ýó+Ä ±pª<ûÄ©é:ñ1øÅãÍ•+¦¥5ˆŽðÑÚµœ&P'ý…ªªhGˆˆoƒËJ¼7cücðþžžžžžžÞÔ.h÷ˆƒôôµéÇ‹÷¾{kžæ±>Ýõ3Ä q»vûëåù£¼X¦oß¾ýŸ;÷Ìœ9 m[ÕÔžáÃùä¿Nß”– áP_·íŽåxÿBŒ;8 Þ?ÐÓÓÓÓÓÓ›úš9–çt£—ÿæœÑièékŧˆ·¿/èÞõé’*^ˆ'tO;-—G^,³aĈˆís]»výˆ-6ÔWKˆ Þ¹“Ýòºw¼µj•]§âý51î:¨FØÒÓÓÓÓÓÓk=ı ïµ?Æ6èé]÷ñâíﻩXŸ®øÎâ…8hœ‘ÞJyæ‰'º!++Òºš¿UV>5wîønÝÄŠÁîìlvËëÞñìüùÂE®îÿÛ‰wyÉÒ0ßsÇØ~ÒÓÓÓÓÓG´¿øô£æÿÏ©†(<êáŠËÿKO_;þ à;Wߪû·¬O÷|cñB|æ%m–gŒx¢ˆJ|øMiiå¸qíš5ƒ¯mÛ²[^÷Ž»fH‹–fª—N؉÷ëÅß®ÙÛCzzzzzzzÁÃhžƒÇ<™¤BO_‹þ˜xïÛü}’ÿV¼à,àTyzŠçzuÙ²Hè^þ}ñâÙ}úÈYõ¯7W®dϼŽcÇ W|•ÑDkñ¾^üÕZçàléééééééõ¾fž¹×PD͈…Ñp=}­ù—Å{ßîàïsü!ñB´,üøþó êp¯òÔöí7O™’K¯…iiaýñÏWV¾PXx¾²’ã —ƒ W¼Òké„Íxϵ®S'ƒ`ûIOOOOOO¯ñŸ~hÀü=ôôµè‘w:Ÿƒä÷‹T“-',”焯¾ô/u²?yhõê¥6ªW6^ ¢£ܶ-|+aA€Ä¦MKÓÓ?()á(Ãï»vMON®ø]€Sñ>\üÕz¤º±e{HOOOOOOo衟!.ÃPèékÑßèDzaÖgünñBLªé„Ø-Ï;â‰7®cÝÈÿ–—ïÍÉÖ¡z…u‹ÜÕ&3ƒÛ·¿}Ú´“Û·Gò@àví„Ëý¬v× ëñÞQü½z`{HOOOOOO/øšÎç´‰¼G)jþ†ž¾ýñÞw øû$…8µd!àTyö‹'ꟘXg:Ÿ¬_¿iäÈØF_hÙ°áÚáÃ?Z»6|+ääöíõ££õ­~ttnJÊþ‚‚È\RѾys)+‡××¼Íxo(/YR¿'ÛOzzzzzzz×ÌpÖ$Š7À §¯-_(Þû^¡±Ãút˯/Äm² ëå¹G<Ñ䤤pï7ž¯¬|fþü¬=Eqdˆa@Û¶»³³Þ¹3ÜkæöiÓäO™K* _.¿¾¬Ù ÂV¼*Ö|Ô¥l¯léééééééM=LZ,É8§þIzúàû‰âíïð÷9H^Nw£v¡¸õòTŠ'Z6hPøö¿Û²åŠñã;¶háÈøBƒèè‚þýßX±¢Îô¨·oïçgœ%'¶nê!8WÝÿ·ï/‹3‰ºx-Ð`{HOOOOOOoè/M5Wÿ›G7ÿáò†‡ž¾}?±¿ñ\õ²>Ýö£|'Šs¦<+ÄUŒŽÝÅ.]:§oßzQQŽ 1t½vâİNú¨?>() ´"aIÅá¢"¡:T÷ÿíÇûCbUT¥Ýe{HOOOOOOoà/Ï~¼¼¾Âpô£۲‚ž¾|kñö÷øû$ßC¼ÿðjƒl–Gž=OvvõÏ”•Ý>mZJëÖŽŒ/xeZròó……ªªê^º4=ÝrÍÔá%ÏJ«Çyími3Þ¯k8¿fîÛCzzzzzzzcsºUÞC—ÿl2†AO<þ>É7/ÄÑš™ÕvË3PžÃRPýÃw׬Y9xp“˜G†Ú4i²}ôè¯6mª«ÏíÏWV&6mj¿¢êÞ’Š=3g Ÿwjuÿß~¼ËIX6z-Ð`{HOOOOOOoèqÎh/ £õÚIôôAöËkÔ 6g}ºâOÂGÚ“څ[ÖËÓV<Ñ»kÖ„r·ð—ŠŠ‡rsGvêäÔ^•£:w~$/ï×ŠŠº‰à…ÂB8÷ªKK*®?^JYR“„Õn¼Ïô‘„Ea{HOOOOOO/{èÆ$´#F‹.èékÁ¿"öo»z 4°>]õGÄNH+ÕÞ–¶ÊsÆ×–ŸB51Áç6l5*¡qcGºÊÍê×_=dÈ‘ââÙXá|eåþ‚‚Ü”y‡…\RQ4t¨ð˧â}°X“ª’°°ý¤§§§§§§7ð8§]b¡MöàýõÞ˜ôôAõŠ÷¾#Tý[Ö§‹þ€x!zU?Vµ_yKÃzõB­x¡ªjAÁ”ž==íU™Ú¦ÍÓ§ŸÛ±#¢vp¼|œÜ¾ýöiÓ†ø½ýD_R‘Ó»·ð¹nUm9a+Þå™D«GuÙÒÓÓÓÓÓÓ›yh2IžóPN(†™'ééƒæog4äítÀútÃ? vBÆN•çŸâ‰ºµjRû^=aB—–-ší?¯_¿W—-‹ÌñÃM(JÓÓIÜÖK*†wì(|¢'L“Ôr6‘¯µIXØ~ÒÓÓÓÓÓÓk}Mî¨sº]1¶¬ðÐÓ×–ß&4©ó“±>Ýó׉9Ú©%ÖËóˆxÅGuî }¿ƒË—ÏOMuj’ç–-¯?þÄÖ­\à’ ý!d4߃* x<*VW=¯‘D¶‡ôôôôôôôfú)Ω' —dÐÓß/owé~¿YŸ.ùâ…Xï5µÄfynG4úö­Å.ß¹;îœ>=µMGúºŠ¢LNJúó‚ur¯J—–T ޼%òÆ%ŸŽÄûßÄZêá• ‚í!======½™×Ü1ÔŒR¨w°¸œìA¡§¯-Ÿ%ÞþÞãµµ;ëÓU?_¼×hçSY/<¢±qäÈZéì).^3th³úõéÜÆ7n¼9=ýó 8|À%òqjûvi¬ 8£MÎd1Þ÷Šõ“Q³n‚í!======½©Ç9Ýh–aèÿLO_+>M¼ýýKõŒ}Ö§Û>S¼{r4X+Ï\ñDÌÊ f7ï׊Š}yy]º8Õ¡Þ±ã³gÿ¯¼œã\Rá稊PÚ6ºÐr¼_!.Yšï• ’í!======½™ÇåU猆(ÎLŠ §¯/ORÿ÷¥ ¬O×}Šx!^4iq,”'CÞc/??8¼¯6mÚ‘‘ÑÆ¡ÇæMbb–t¸¨ˆ\RÐñÒ¢EB!ûNÅû*±6¶¨÷¯e{HOOOOOOoèqN—×ÁpÐÂðŸèéƒæÏA©'Þþ~ãõ@õéª/ÄaÀ©ò$‰'zÍåM.TU½¸páŒ^½¢<Gú«}n:õLYG¸¤ÂÂqÿ¬YBñ&ª·œ´ïÓÄz¸Y7£í'======½ÞÃd× æ-ôCOLÿ©Ü0¹Éf}:îÏr·û;£ ÖÊ#w¿Ø¸Ñ¥ÝÛ¶]?iR÷ØXG:¨õ¢¢òRR^^²„ý.©°s\3q¢Pª…^9mÆ»¼HíI€í!======½Oár œééÝó¯Ê›ê¡³>]òÇäu€Såù^\(®(ʯŽ÷åÞ\¹raZZ‡ú¥š7ß•™ùíæÍìósI…ýcÝðáþ¬h°ïò"µ7Öh°ý¤§§§§§§×üdd˜‚ž>øþ ±Û9Ì¿›lÖ§}ÿOñBt;!•çØÛiݤ‰ƒ]¸ŸwîÜ= m[§öªœØ½ûÓóæ…Ú¶<ÂzIE~ß¾B1n2IÂh<ž¢ÄÏû•îÍÙ~ÒÓÓÓÓÓÓë½Ás`£¾ü7zúZñ·ˆ÷¾Ù—n²YŸ®ûGņº5,–ËóñЧ%&:ÒyûhíڵÇ·lØÐ‘>gl£FGŽüdýzv鹤ÂñctçÎÂÙ÷Õ ¶ÚŠ÷Äo °=¤§§§§§§÷ÇëŸx¼þ«œÓ½)=}­øíâ-þJ€õ“x!fi—NX/ÏÝ≦ôìi¿ç¶//Ï©Næöí÷æäü—{UrI…kK*’ââ„“¾¬°ï/ˆ-Y ’í!======½™‡°îBØ6“ž>È~‰xû[i”õé†ß*^ˆ"ÝÞ–ËS!>Y]>h#Im¦chT¯ÞÒÿ½j;í\Ráö’Šfõë §;æk ¥Ÿñ¸[üP™ÛCzzzzzzzüÅ›Ïåiæë1¼*èéƒí'‹·¿w©~œõé¢_$^ˆ*À©ò,—‡–Æs¤ó¶0-ÍZ729>þÆÉ“O+ ð]RñBa¡ý²ý·¼\>ËOªÁVëñ^)ð-¼4ÐÀöžžžžžžÞ‡×Ìhðè—^˜üž>¨~€x“ýŒ×í/ëÓU/øÜ­šÑ`«ƒãåŸg Ö°X,|¢çxJ|ñðs³‰¶Íš•ûMi)ûá\Ráÿ«4=Ý‘’¼¼DZ=ÖÇ|·—@ãQI¼Ã÷^Vl?ééééééé/í:á1Êñ œ0< =}|Œ×Àú Ž÷5â£8UžDñDï­YãTgrwv¶ÜW×µësæüƽ*¹¤"ð%NmBñˆ˜¸tœn_Ëñžêk$‘í!======½?Þ0s›G=Âc˜^’ž>hþsñÞ·žQºuÖ§KÞï[å9D‰'r0¥ÿÏ;wnoÙ²aõÇ´v-{Ú<¬-©ܾ½S§þcV–p¢ù5kÇìÆ{œø‰™¤›fûIOOOOOO¯ñ0®¦LÐÓÛï};j4°>Ýò_øñq¦<Ç|íõàlríðáÞï? mÛÝÙÙ?ïÜÉ®5;K*nŸ6Í©3–¦§ 'Úhºd)°x<1$ð­vîÛOzzzzzzzcoœBÏägLS>Ðӻ꟔4°>÷¯‹¢kO^OÔ=6ÖÙ~ãGk×h½0-íÍ•+Ù‘æaIEýèhçÝ,H•Ö4\g0Æg%Þ‹q×Òx$‘í'======½‡8h!,É §ž¿]|Ì6]•õé¢Zì‡ ‚cíÉÃâ‰Fwîìx§q_^ÞÛ¶±óÌé%¹))ž"³[7!"жã}¿w)ÓØ~ÒÓÓÓÓÓÓ+f9SáX{r½xÅçöë'÷Ê.Ø‹£§wÄ{/©Ø_Pààû÷IH"â€z×IËñ~—à«g4°=¤§§§§§§÷éa2#B9k¼îB¡§¾—·vßi0£õ銯/ÄR8Öž¬O´iäHöléCÖŸ¯¬|¡°ð¼×6%öß¿•Q¾ÒšMX|,ó7å!ÝŦ3Ø~ÒÓÓÓÓÓÓk½êîä¬j¬B¿ Cû¦ôôÁñÓ|líÖgpüJñB”Á±ödŽx¢'Ofç–>rü¯òN%Ýd³>ôÙâ…¸Õh,ÓZyF‹'z,?߬“v!ÀN=}èûÏ7l¡ù¥µcÄûD1îîö:ÛCzzzzzzzÙÃ{ÄYÓ/FOlßA¼ý}]õ¶¬Oý0ñB<ÇÚ“â‰._î³Ïv!À>=}ÈúƒË— áÐÓ( «µxï#ÆÝ~¯Ÿb{HOOOOOO/{mn§³ÃÞã¡§¾o Þþ~Q3®Æút×w/Ä«º&ÆryšÈW|ãFï¾™Ï>›æïééÃË?>GZK4ºzEƒýxo!ÆÝaU2H¶‡ôôôôôôô’‡É˜šÑ ÃEôôÁð_Š÷¾Ñ5[N°>]÷Åkñ1œiO¾Sß+ŠòkE…?ëÛ/¸žž>4ý­S§ ‘§ÚvÇz¼ÿ¯ï¥E›l?éééééééÕ»Nœ5M#YóvgÅ “ôô®ú7Ä{ßöê›lÖ§{þ[ñB(Ài8ÓžOÔ¦I¹çvÁïµñôôaá·–’–”¨w´ïrÜÅWG7ÛCzzzzzzz<4»_^ž¡ß¾B—s’ž>þiñùö@íl^Ö§[^î‡$h3Ò[/ÏŸÅ+žÖ¶­?ý´ æä£§Y¿xÀ!"®4ÚnÊB¼?#Æ]ªja¶‡ôôôôôôô>|Í3 Í[\^\qÖ`Ñ=}ðübÿv Àú ŽNì‡ôóº6Ës—xŧöìyÁdYû“Uîôôaí'ö²£î©Þ Âf¼ß&ød€í!======½ÿºé†«,È~†xû{›jöëÓE_"^ˆM—«:Pž)â‰þ4s¦áŠ÷ ~¤Ü£§;ÿ[ee”Ç#DÄqƒÉŠVâ}œwÕÎöžžžžžžÞ³ê-+ÎÖܲ¨ÒHj–dÐÓÍoXŸÁñyâ…¸AÕÛ±Už4ñD/zwÆ.õÙôχééÃÔ]Z*„Cc£mw¬Å{O1î^ôz|ÁöžžžžžžÞ§‡¡0¨ð~_zúàùNâí﫪ÍXŸ.úÑâ…xȼŠ´ÝòòÏ—GÊs ðˆ':¹}»¦‡vA÷ øwñ/ééÃÈ?3¾Ãu›AX‹÷oàãõ“ñã ¶ŸôôôôôôôÆú-+t4ù$ééƒç¿z€3êí-YŸîùb?䃚 ¶ÊsL&*Jˆˆ¯ 5X‰÷n~m^ËöžžžžžžÞ_o:áÙëÏ9èéƒã‡‰·¿¬Ïàøùⅸʫ·c³<ÝÅ\¾Üp¹~Fº,üw[¶áPp*Þ›ˆqw´&ÀÙÒÓÓÓÓÓÓûå/Þ¦x¼“Fž5J ©º §’ï"Þþ¾¢›½ÃútÉ/ÄuÓc§<Å}¹i“&i¿¼kà]’zú0òo áÐp$Þ¿3°(ÀI€í!======}@šáõ°„~¬ÂCOL/w;i“A²>Ýò}Å ñÜ¥'«vËó­Øáñ(ʯ••Lºgò³bzúpôû „ˆ¬JÂj=Þ_£»:ºÙÒÓÓÓÓÓÓûãa6B=Vá1J;IOï®?.Þþ*À©KzYŸ®ûñZ¼­[(n­]õg xÄkq\• ÒzyžÏ2 m[³ …§Äôôáëwef ±Lw–ãý1îfê4°ý¤§§§§§§÷éqÖh›Š³ë1ôÿDOï®ß/N¤OU­Of}ºè‰ýÆÕ#>öËs‡x¢iÉÉ>;i>ÓïÑÓ‡‘_=dˆ;¼¦tÙ‰÷õbÜ×,Ð`{HOOOOOOï¯÷^{é1Ï0é1Z‰AO﮿G¼ýèuûËútÕ¿"^ˆ.Æ™2¬”g‡x¢•ƒ_0y2ìgVzúðò3{÷"â6ƒ]'¬Ä{žwW8ÛOzzzzzzzÙ›õ¢ü°„ˆxâRh7ÞGˆq÷ úîí!======½?Þì™°b²$C¡§š/o·˜ìïÊútÜß"®aÉöÊg³<“åM4gÎô³‡P¶zúõ[¶"â5£]',Ä{g1î^Öí)Ãö“žžžžžžÞ§×¬ð¼4ü Ëå Y’AO Ÿ#ÞþÞhðÏútÅo—W4h—p[/OñD/,\È)}DùFõê ñ©n¤µxo(ÆÝ§º·eûIOOOOOOïÓã¬n› “A íèéÝöò„ÞGT»N°>]ôKÄ Qat!¬•§µx¢÷‹‹ýŸ ~!À íôô¡æܶM‡(à´jFƒÅxÿD :õYØÒÓÓÓÓÓÓûë¡KÛའC1É'IO ßÍï ½¬OWýñBÜ©K}o­<§yÍSeeì¦ÒGޝ¸X‡Äš>[ñþ²tjÒ@°=¤§§§§§§ÀCýcfy#=&§¡§wÑ7ï€šŽ«±>öÅ ñ´i3Xy>3A4‰‰¹`wް>^\¸PˆˆþÚ‰ãý!1†3ØÒÓÓÓÓÓÓûëák„ñÎôônûïÄέœ4ßy…õé¬o/^‹× ÞÜJyþ&ž%).Ž=Ouì5Kˆˆ,mŽF‹ñ~8ЫÎ`{HOOOOOO﯇á€Äó%èé]÷o‹·¿ éÖYŸnùúâÀ¦íN`åy@¼âcºtaÏ“GDWO˜ DÄ¢ê›ñ^"F÷z€í!======½¯Ù…[çHèwѤ§wË?'v;STOóXŸ.ú/Ä }©â@y®;<óRSÙóäQÇÚáÃ…ˆØjº¨!°x—7÷¹Þ Õ+ÛOzzzzzzzßþr'A9cžÈÁûŸèéƒã÷ˆýÛñ^7Ù¬OWýëb?¤½z ÁNyÖ‰'*MOgÏ“GDy))BDܤ°ïCĸۧËÁö“žžžžžžÞÍ Dõ¤ÏÓ4ôôÁðWˆ·¿ ÖgpüÓâˆÏã©%VÊ“'^ñ›¦LaÏ“GD£:w–‡‰w9Ë«º› ¶ŸôôôôôôôþxÍŒ~Æõ}=}p|±xû»©úiëÓm—x!&N•']<Ñãsæ°çÉ#¢Žî±±âþ¾Š#ñ#ÆÝç5Îöžžžžžž>_ë.ôïNO Ÿ+ÞþÞ šÀÃútÑWŠ3›¬a±Pžnâÿ׊ìyòˆ¨£ILŒ¸¿/ìÇûQ1ºcŒÓ@°ý¤§§§§§§÷íkV¨G&ôƒ5oJO/?ß~¨fÌŒõé®_%^ˆm59ì–§±x¢¯6mbÏ“Gäçvî'Õ¡d-Þå=e»z%h`{HOOOOOO‡Ù6gŒ‡+<ôôÁñ=Ä;࿬Ïàø™â…¸YÛîX,Ï7âY<Šòke%;Ÿ<"çøhíZ_ûû:ï÷‰3F]: ÛCzzzzzzú€½÷Ùž3Õƒº4’Ú%ôônû¦bÏóCƒ ¬OWüpßIé(Ï›b‡'±iSö®¬OÇ}WñBüS½ŠÛryžÏ2°];öCŒ»«g4°=¤§§§§§§Ô{¯À4®8c¼$ƒžÞ]ÿ¼xûÛ§:AëÓmÿ8â£'µC˜˳C<Ѫ!CØóäQÇÆ‘#…ˆØ¨JRc=ÞÊ{Êš¬ÃdûIOOOOOOïÓCƒ„eFó"èé]ñ{Ån縚XŸîú·Å ‘P³„Ûny–ˆž?df²çÉ#¢Ž¹ýú q¯e“~Æc1îV·´léééééééõªiÏgLKžÑþ=½»þj±;`}Ç?'öCRT™ m•'K<ѽ99ìyòˆ¨clW);Êý€ýx? D‰q÷µvÛ*¶Ÿôôôôôôôþzƒ=5Û`ž1Ø»‚žÞ]_"ÞþnÐæ`}ºåï/D¦*Y†­ò¤Š'zqáBö^ˆˆÕc|vâýˆt k6¶`{HOOOOOO°7Hõ¤ž¡Ê'i˜ ‚žÞqŸ/Þ_Wó4õ鮿J¼ókŠÛ-O‚x¢#%%ìyòˆ¨£eÆRDO_ ,Þ_'Ž%©£›í!======}@^û@R?\!zz—üh±Ûy¿×Ó<Ö§«^žZ²p¤Y¼½t!ì–ç~ñŠíÚ•=Ou<6gŽê>Ëñ>EŒî[½Rá°=¤§§§§§§Ô_|0¢ 㱠不wÉ¿'v;[¬Ï ùVbWä]£í?,”çj9ådj*{ž<"ê¸iŠ4§°ïòV/O©ßí!======}@†ÿ¬ùa“9ôô®ø¿Š ½t[Ö§KþGøx}8R9åäæQ£ØóäQÇ–Q£„ˆ(©lµïñbܽi²Bí'======½?r&É3Úuzz·ý}âíoÀú Ž?"Žø4÷êíØ,O®xÅož2…=Ou¦¥ q•ɂɀâÑçV/ß,¶dûIOOOOOOï¯WuÎÂSM‡+¼ÿ‰žÞ%xû;Wý4õéžÿ›ØIÒMg°\ž‘âbî\ö#]_€í!======½MMI“ŸÔçx §wÅoï€K r4°>]ñ‰ CMŠ\žxñŠPRž'Z?vggÏOM=»cGÎ5 m[?Ò4ÚŠ÷ÛÅ Ë2h`ûIOOOOOOï¯‡É „ÇpR„ù =½3~žx|¥êA:ëÓE‹x!¦û˜Zâoy~‚]FÎ¥kǃ‡p¼»fMÃzõ$ÇÇ¿»fÛ§kÛ¬™oÄTÀñ¾M º¥ÚLléééééééöÐIÈczzWý8ñx”õ”õé¤//Ärƒ¤ôVÊsDqåĸ®]ÍúcçÍÿ†žÞ)¿;;[»¸ŒÂÙòZ½ZˆˆNÕs lÆ{/1ºŸS½ ÛCzzzzzzz+ºm*ÌÖcxtË3èéö?AQ|ïîÎú †$^ˆ'M'WVž«Ä†ýûsê>ZOÍ`ºÉ« Ë(þ²`pÆ!ÚLã½™ÝïlééééééémzœV'o¸8ùÁë//ýY7zAOï¼ÿ@¼ým °>ƒæ;Š×â5õZ.O±x–-£FŸŸ×ý¥þ·ª*Wߟ>½&5ƒÙk~jª³å¹Ç|EuV»ñ~Üׇ:¡úq¶‡ôôôôôôôVßî°>ƒæˆ]‘OÅmuý/Ïlñ,·LZë‹ù¯ÏÊš–œüKE“D”7LÍ _=a¸á¥òTç3 «ÍxClfªÇsÙÒÓÓÓÓÓÓÛñÚï^#Þ? z¾AOï’H¼­OWÍh`}ºè¿»"ÑÀiU‡ÇzyFˆWü‰¹sÍúcçý~^mÇWV÷úòRR~«¬tüýéCÓï§\^7qX½Õ¥#åY5dˆ˜„öãý ñs¥Õ„6ÛCzzzzzzzëþÒ<ÌÓ&×'B¨gDÐÓ»â¯ï€g«§ ³>Ý󯋢­6#õòtOôúÊ•>{hþäÛ³æKÓÓ½ ³0-íòŠZ)}p¼ÏÔ _»³³Ý(Ov¯^rVûñ~³8Œ8`{HOOOOOOoßC‡¼]è³J*ôôîùRñξ`}Ç?#vEÒÔ“«í”§¡xÅ¿)-õÙ‹3[oÇŸ¯ªZmô`yõ!µRú y?S3x§)u¶d´k+ëÓ ?S¼7êæo[+ϭ⌆ì^½Î›äíþצ¿>+ þ½î˜>=塎÷35ÃüÔTWËsxÍiŽœù¾n"~Ƽn#ØÒÓÓÓÓÓÓ[öðNyZ=gRŸ@Ò;Í=½³þ$œÐ+GëÓU/ï:ùˆ®+b­<ÛäÜŸC‡ …Ï›ü“}_U½¥¥üRå¾Y³‚Pú xÿS3¸Zž. 0|_)ÿV?©'=²=¤§§§§§§·æk¦bŽIœÖÞsxèé]òGÅçÛÖgÐ|7±7ò“•Z–g‘x–+Ç?ož3Ïð™°S^³±¥®ò±9s‚PzWýn¿S3¸]ž{sr„2L†ßׯùÚ¹–í!======½#&ƒ -NKƒôôvý?Ä;à®57Ù¬O×½<¹úC£…âÊ3Q<ËÞY³„IæúÛqRz ¾hèPÆêEEí/(Byè]òþ§fBy®œ0ÁŸ$¬vâýQqBIn‚ß×Ä»`{HOOOOOOá…¼U&=½~³x¼ÊëQëÓUÿ¼x!zôv¬”ç_<¹wçÝUóó¡±ÿ¿ŠŠ©={ú3ÖТAƒC«W»]z½Ÿ©«S3¸Zþ‘: …Ùg²<2 xÌ—£½ÛOzzzzzzz ^Ûy3_áÑä{ §wÖŠwÀU^‹‡YŸ®ú{Å 1Vœ\íyÞÏÒ¼Ay@ïÅíÂduûþ?ååãºuóg¬!®Q£÷‹‹Ý.½#þ°©vgg³üÝZµ óOÝ—½…x—ÓœÞ_ÙÒÓÓÓÓÓÓÛô—Nª„÷œ“Ñ zz‡½œðnf}ºè¯—NÌU¯a±\žų$ÇÇûœ‹~^}¸çÏìØ!?j¾üJlÚôèºun—‡Þ¦?`j† •¿ILŒPž£pàûº‹ø‘_º4ŒÈöžžžžžžÞ®‡¡0ßÇÂCOï’—WK?ãuÌútÕ¯/ÄziŸÑʳWh×­Ûy1—žaÒ~÷ü©²²íÚù3ÖбE‹/6nt»<ô–½Ÿ©7.¦ffùO—• åQŒ“°ï ÅO}T=_‰í!======½eÓ&k2½Ó9˜ý=½ƒ¾xü¦:GëÓ=?G¼WŽ”çJñ,ýû_0z,<4vÛÿ°m[ŸÖ­ýkè{|óæP+?ýù]»NïØ‘•”ägj† —ÿõk…"%TÇxÿDüÔQÀI£ ,l?ééééééé-xx-«ðh¦=hòFžÖ®Ð §wÌŸ¢Ä›à¯tÓrXŸ.ù1â…Øk’W6Ðò¬ϲuôhÃGÄÌsìÁß¼¹Gl¬?c }Z·>±uk¨•?Âý×¥¥©‰‰þ\¾{²³ƒ_þ—/ŠÔ×+Iåxÿ§8¨#x?@OOOOOOï˜Çi5º¼ã´Á,MwÒ“0ªî€YŸîú^âµxp¤<9âYn™:Õ°ov^—WOXï†ÿbÓ¦N-ZøÓYÐ¶í©²²P+ÄúwŠŠÚ7oîÏ…›ŸšZ+å`öl¡Tã«s£Ø‰÷‡Ä>¼ §§§§§§wÌC7íA“=Ò£Ï'IOï¸E|ÔÖ¹fÚ0ëÓu/?²GýØÓry†‹gyjÞ¼ó&ùùåN]ü±õë›6õ§Ë:¢cdzÕëüC§üèŸ/,lZ¿¾?—ìbj†Z)ÿµ“& [ ]²d%Þ¯›Ùð~€žžžžžžÞ1¯I ¯–ÐRÐÓ»á÷ù~ÔÆú †ÿÑWOì[¯ÇžvÊÓY<Ë+Wžä°áឯ¸8®qc:®ãºuû¹¼<ÔÊQþ®3¢=.–aj† •ýˆBÙ6Ö$©±ïkÅ_ÞÐÓÓÿï;P~X?ôôôy˜hÕŸõCôôÎú›Ä;àlõœ^Ö§{þˆøÌ³YõÞöËÓ@¼âßlÞ,ì(çØ Žÿ÷êÕ-4ð§û:µgÏÿUT„Zù#ÁŸ¯ªÚ:z4ü~í®NÍP+åŸÓ¯ŸP¶ëM[ŠÇYâÇ¿¼ §§WýùG(w÷é© 7Cù'ð½W¶yÖ'==½¡‡>©ƒQ†IÃí+èéó[Åþí ¯qtÖ§«þ%y?…êǪ6Ëó¹x–hç|U•ÏÇÅÄÎ[ükË—7‰‰ñ§››’ò[ee¨•¿nûÿ”—çõíëÿ(ÚaÃj·ücºtŠ÷ 6ó•x&ÖÀCêlÒléé#Ù T‰â>5)À|àZ(/_{ †²>ééé/þ÷â ɤíOzý%=½“~‘x\®0c}ºååtqéêŒt–Ëóšx–öÍ›Ÿ7ß ÐÿéAð/-^Ü :ÚŸ~ì´´ßt£'µ^þºê¿ßºud§Nþ2\=qb­—?9>^( ²ïÅJx¼ §§÷Vð«;0 ¨ž†ò9Ûzzúê 5½8ÝÏh2LzèéÝðYâ·×Æ‹‡YŸÎûÄ©%³µ Ëó¸x¹‡´oïg÷ìB€Ý97ü_ êEEùs6=9ùøæÍ¡Vþºç®[çç.¤DG?’Ÿ å—WâQÍK´ï§ ÈÓo>Q½9ÛCzúˆóf8ójL¶ôIXÿôôußC·îB9m°…GóÖôôÎú4ñëêiõâÖ§{¾T¼«U¹ ¬—çfq8cfïÞ=¾à3dÇýãsæDù—n0¶Q£ssC­üuÉ¿²lY\#ÅÅ5jôʲe¡PþŸËË增0ÎS@¼ß?8¥zC¶‡ôô‘âOB¹ w_-1À:`ð6pR5K‹×‹ž¾nzm~)£ ³·£§wÌ·¿Ÿþ%Íh`}:é Å Q%fõ¿<[ų v³úï›5KQ?ï·²{õ:î•í’«œòûòóý\É Glì±uëB¤üÇÖ¯ŠÚªf²õxÉ÷Âléé#ˇr еðj V·¯AùA—OŽ×‹ž¾xè–UxŒ`èß—žÞ1 ;_ÿ6³>÷“Ä q·ñ­€Ë#g\9aB8v}ï˜>Ýÿ{¬‹S84à ¿zâDÿÇzFvêôýÖ­¡Sþ——.J›¬ÝÂJ¼ß'WÀöž>rüGÀ: BåUè7@9å¸vt•×—ž>,=NQø9hAOï€ÿXüú©oð¨õé–ï/^‹gT½ëå™ žå¾Y³ÎØ ‘ãú¬¬€n­.OmàaçøqûöÜ”ÿ«=¯oßÿ”—‡ÔGx$?_(p`?Þ¯g4äLš`{HO_ýkPæõÒ/Hr+€?פ–äõ¥§3Ýë“FzŒÞˆžÞ1ÿªxÜÑàQëÓ-Ÿ(~÷¿¡}‹å‘;…/ßNoå¸qÝN™Mmàáçq`ñâöÍ›û_á[Fòsû`7Nž,”yŽv ÁJ¼‰Õ²^5ÐÀöž¾ú' d \_€i@ð”cl¯èéÃÄ_ÌÿTóç j|‚žÞqÿ˜øí2Øë…õéª?Å×8Rž8ñ,®]Ö]ßÒôô@o¡8µÁÂñߊŠMééþ/—ˆòxîš1#4?ËæQ£„’¯«~šg'Þ³Åʹ¡zg ¶‡ôôuÌŸ€r ”dÔ©W ¬î‡òNMóÅßzúÐò0Y\a8BXŒAOoÝß"Îh˜f<£õé¼ÿX¼ TÛb[/Ï øèžÝ¹3ÜûÀEC‡zÛÄ© ï§&&ú_½Më×¾°0d?NAiÑÒU&É ŠÇAbýì3žÉö“ž>ŒýgPÊ Ä;ѱŸÔ£ÇcsæÜ4eÊ¢RýO»œWS`8°¸ÊëP~øû@O ^ÈÑ \|Âi¾ƒžÞ_&~,7ÎÑÀútÞ¿"^¯5,¶Êó®x– Ôžðƒ¹¹±~ï³È© 7OÐmn»fÍÞ)* åO4¾{w¡ü÷¯ ,Þå}^ØÒÓ×Êb ¡í|ýèèżW\¬i²~©¬ü÷êÕwgg¯2dxÇŽÍêשq‡À@`1pð(ß±}£§¯%ËS¦ÕÃú}TÿDOï _"~a쨙Ãút×?îï[åyAœÑÐ+!¡Îô‡oÞ<£W/Nmp¶J'õèP}¦&&~UZâŸ+¥uká#<§= ñ~J”_;û°=¤§o¿ÈÛ}õ¸FÊ22ŽoÙâg#v¤¤äÙ³7Œ9¶k×V †Ô¸CИ \ å9àké!-ßèéôÐýü¥NÝ)Ý–¶Fé%ééðSÄoˆÛT7Ù¬Oý­~¬a±_ž=âåÎìÖ­Žõ˜=›S9žš7/®qã@§ûžÞ±#ô?ZœøòŽÁŒ†ÀâýˆÚ v“a{HONþ'àOPÒœè–'ÅÅÝ6mÚ9{k¿*-}bîܲŒŒ)={¶mÖ,ÔRÙ°!Œ>æÁ+„Ó°ï»Ä†yÛCzú0òÿ€2 °ß;oV¿þú#>߸±Ö÷*~}åÊ;¦O_>hÐàöíÇĄԸC#`(°¸Ê«P~Ðå«âï'=½™‡æ¯N Wh~†žÞIÿi I‹Û.%f}:ï‹•ÿ¸j–õò ÏòÔ¼yu¾ÿl-kC¤ 7|²aÃÈNªŸh§*33ìê特s¥ÉÌ—FlÅû ±ÞJÕ3ØÒÓ‡¦?å`¤çŽ-Z\7iÒɲ²ó»v}´n]~ß¾•ãÆ=6gΑ’’Z_qö[UÕá5köΚU2|ø¨ÎC-µd= X\üÊ7l?ééÍ=ô†?©¢ §wÄ¿x+ßxÌ`cyÖ§]ßQ¬öW½r4Ø)Üw|sÕªÙ=ÁÚÔ†HnøvË–ë³²Ý/­GlìëAœúëàqë4i.Ñ,À~¼O«î¦šIlééCÑüJw'úÉÛµ{(7×{4áá¼´ÿ?†R ÄÚï+Ê´ää¿/Y¢o‚vŒãs²Xr||NïÞeåæ¾STôŸòòÚ©ß²åÙ *ÇËîÕ«sË–¡¶¥E`*°Ê#ÀQõƒ_Æ#}¤yîEa4ba¸—&=½þ-(VÎU?è:À¬ þKq KpÒk ·åò|æënÆ|×uujCÝnø¥²ò¹ÂÂy©©M,­ËkÜ8Ü—Û,(m¼³Ë‰ö-A¬Ã× ²:±ý¤¯Ëþm(¥ÀÅéu÷…êïÿÀ ¾í~oÃzõV üáÚµfMЬ>}}O¢ôˆžœ¼eÔ¨ûfÍzkÕª³ö¶Ã´sœ,+;°hѵ“&Íé×/9>>*ð¡jW_q@&°Ø ¼åÛ[úHò¸<ü`¸ Ãl|‚žÞq¿JKxà¯'¬Okþ q ¡®†­•çUù9@󿑹±‚© á;ÜðúÊ•ÅÆ%ؘ;©G:0&+)IøŒ÷ES@ñþ|$Âù’í'}døÏ[¡hvÊÍ ½ßÿg Œw¢‹›Ð¤IŸqßoÝ*7A½XA (]Z¶œœ”´qäÈ?Íœù¯+N••ÕJ‹úsyù«Ë—ß2uêâÒÚ¶mRãMÀ*àà_P~Ô=ÂaüÒ×%ݲ éÞ?OOï¸ÿXe5‘ò,àCð÷ÙºV쌤Mg°PžÇij íÐ!b7q´9µábr¯)={®>ü–©S_X¸ð“ BsèáèºuåcǺc¥6/ltôÍS§ÖKß?1Qø¤Ïz}[‹÷ÃbÐ5ØÒ×mÿ”}ÀL Æ$·ßgªç̵Yþ½PRœèÍöNH¸';ÛŸ¿TVƸ¶»d‡æÍ'tï¾vøð»fÌxeÙ²·o¯•Is‡V¯Þ““S4thzçÎÍ4©q‡À`!ðG(ƒò­zØ‹ñKî&CÒV™ôô®úƒÀpKíuàJ(?¬O þn±n'TתÍòÜ$ž%§wïˆh¸xìËÏOŽwê&&*ªg\\m>œÝ¹óHIÉó……w͘±=#cAÿþ£»téâÄzÚÔÄÄ÷Š‹ëÌEoÓ´©ðaßðJÂj-ÞŸzÚ~zúõV>ë¤){A*ÿ×PrhöÇuë¶¿ ÀÿöçHII0ûÕ‰M›ŽíÚµhèÐÛ¦Mûû’%>g[¸q|°víC¹¹›ÒÓÇuëgc.¡¯( \ e?ðÛgú0÷ÐCh’:èö´ §†¿ ˆ³ÔL÷ž3Úå˜õ/û*±V ÔUj¹<[Ä>ÏšaÃ"| áü®]¿VV>˜›ëàpƒ~mm“˜˜øÆ;µh‘ŸÖ¶íˆŽ3»u›–œœ×·ï´´•C†l9²,#ãŠñãÿ8yò3fÜ7kÖ£sæü¥ à¥Å‹ÿµbÅá5kŽ­_ÿuiéOÛ·ÿ§¼ü›Í›®XñH~þ5' :=9¹b¢KwoŠ¢l9ò¿µÝÙË-¯(þJ½%„…x—ÇÇÙ~zúPóoePºø¿ƒ.dË :a„õ=£¢ôïÿvQQ MÐcsæÔn×:¾qãQ;¯<ø¦)S,ZüÕp_•–>9oÞŽ1c¦öìÙ¾yóPK-Ù˜ì„ò”cêy»ŒwúÐ÷Ú©æ§Læ™M §wÏ,¬eõ™ \l‘YŸ~ú"±>K½*ÓNy ij\5a‚3ÜޝöÍ›X¼¸Ž]èo6o–²¸ÌÏ 8ÞËÅѽó¥l?éÃËÜ ÅÚŒÈC¨ûá“À.(v²´lØpó¨Q_•–Zk‚*Ç µ¦¾UÆ#:v\:pà YYÏ~¹iS0ÛäÛ¶=_Xxå„ ¹))=bcE ©ÊI&¥ÀÀ»Fë…Ù>Ї”7¾Ã0z °ƒžÞ=ÿO(-5Ç̀로4žÒÃú×úYbe^o4IÄBy2ųÜ?{6‡8Ü`øÊMI©•õ½no­Z%|êΗlÅû±b·Aa{HÖþ”G€l«[e{¦¹üAe£Ì][µºiÊ›;ûæ÷íúí³úõ‡´o¿0-횉ÿ¼`Á§6mƒª3;vücéÒ'O.LKëÛ¦M=×òYXfFk€{ ¼œd{Nb§ŒÆ$N©²Oiþ‰ž>Øþ”V–Zá~ÀÕ ëÓØ§‹Õø WŽ;å‘7Ñz©Î=¯æpƒý×öíÊÍ­«÷Ù ¤ô¨êεxŸ$Vï­ªÐf{HNþ°háD;Ó Á¾~Øê] €a:<:gŽ# wŽ®[÷p^ÞŽ1cfõéÓ;!!&Ä:Òf¯Æ11Ú¶ŸšzÅøñOÍ›wtݺà¤úoEÅ›«VÝ9cÆŠÁƒ‡´oßØÒ®Ì%À-ÀËPNèæÄ±=¡²‡á*‹ËCêuƃôôÁñŸ¾öi3{V§•f}šùò€vZ”ÅòÈ; |´n‡8ÜpñÕ#6vçØ±Gëú¯Ä]3f•0£fÀz¼ËÏ+Ÿ®¾E`{H.þ”m¶“è_/ªï’Ý+ÿ÷P[Ͱ“Ó»÷«Ë—»ºGÃ{ÅÅûòóËÇŽÍMIIiÝ:Ô¶‡4{5ˆŽîצM~ß¾•ãÆ=6gΑ’’_Üzøµ²òý’’fÏ^7bDF—.­6 ©:©ôæ×/B9îõší }p¼ö&Fóùâ;ê÷̤§¯-Hµ:Áìf('u{űþ/šfbí1šfhyNø&:»s'"|¸!¡I“5ÆýkÅŠ¹ åcÇ µ±\7ÛB¼Ë£{oª6”a{Hºþ3(7Ã\èŒe{ïÕƒn.}ÞƒP,ìcÜ8&¦hèÐׯ¯•/Ö­{bîÜ]™™sûõ럘jñÍ^1QQ½fõé³c̘‡óò‚3lýɆ Ι³mô謤$yG¡à¿ 0 ¨žòï‡éÝ÷ši™ÚåFãôôµìOB¹еÔÀ€èòK³þ¿ó5p¢¦Ãc½<‡Å³´lØã;ÜÐ8&f^jêþ‚‚_‚µûf­lçþÝÖ­ïX¼ø¡ÜÜ'OÞ6ztJëÖBµìÔÎà 8Þ¿÷Úß°=¤mÿ=”½P¦Ž?X\ |fp¯ìÖç½ Jƒ Ù¶Y³+'L© 5¿UU}¼~ý3óç_5aBAÿþƒÚµkV¿~èËÌé×/øuu|Ë–¿TefæôîíÈîÎξÚS€mP>T¯eûCïˆÇ)Ý\Ã4’^oJOþc(ùÖ&K/´aÑõùŽXc±€#åyNœ—÷Úòå_—–mg2ÿ70;¶~ý«Ë—?9oÞ3fTef š›’’Ñ¥Kï„„øÆkëÎø WÎpkñ~‡Úl¿?=½Sþcà(ƒ]èGîòQþ ÜŸl<‰uÉðá'2|ºaÃÌÞ½ËÆŒy8/ï½ââp_YöÝÖ­/-^|ËÔ©«† ÉèÒ¥u“&ÁlN?ù›_*+ß)*Ú““³fذôNÜ^ l>Øþл硙äpJõ¿ÚŸ<¥›TCO"þ#(9–šÚ(`5ðÉõyµ¼²ñRåØ-Ïjñ,Û328:„ã?åå?lÛöUiéGëÖ½STtpÅŠ‹ÿyÁ‚}ùù{gͺ}úô²²vefnÏÈX?bÄŠÁƒ ÓÒf§¤LíÙsl×®Ã;v쟘Ø3.®c‹q7‰‰ñ(JLTT×V­Fwé² ÿíwΘñ\aáû%%!²âÇ7o~»¨è…… ïŸ=ûš‰7µhÀ€ÉIIƒÚµëÔ¢E(OýøÔk2‘µxß.öqÛ~zz›þ{(÷S\HÁÐø”Okve³[þï» |¤ÚSòïƒ,s›¦MŸ/,¼Ü|=1w®f.XjbâÜ~ý®?þ™ùó?ݰ!Ôm=~ܾýå¥Kï˜>½xذÌnÝÚ5kæR[vÃ4¿UU}´nÝÃyy¥éé£:wvv•Äí^Col¯èÝóPOxðí©Í0IO²þY ÉR³Ûø“ñÞ°QŸëÄÊY[= c³<ÙòrôiÓ8 À#ÐãTYÙÑuë^Y¶ìñ¹soŸ>}ǘ1«‡’2ªsçäøøZŸ¬këÎX;—ÕJ¼/O±C·‰ß/ôAó'¡¼,ÏËßX ¼¥_°[þ¡” €Æ Ž´ï¿;ð6©GãêÕdU™™>ó8 nß~Ñ€×ge=_XøuiihÒ_[¾üžììõ#FLêÑ£S‹Š¢Øÿ­èÓºu˜VÈ—›6mÏȈsbbÝÅU/¨ÇØ^Ñ»ê¡[w¡èF,<§Œ'EÐÓ‡¢?¥еîE:ðºÁyë~}ΫåJ¯ÅNy†Šgyzþ|v›yxÿ­¨øº´ôÐêÕÏî5ëÚI“6¥§¦¥e%% hÛ¶CóæõÂ6 ¦Ÿ)ëìÇ»ÜM¹ÓèÑ¿_è]õoB)Ú;/͹À³Úù½vËÿ*”@}u>éƒÆy‹.ýï7À‚ÀŸ·_3q¢¾ ÌëÛ7ÐzhÙ°az§N+¾yêÔ¿-YòÝÖ­u Ïî+WÞ›“Sšž>µgÏn­Zyz˜’vü•eËrSR¢H l>ˆÈû[úÚõÐŒI¨G)´yôOOšþ}`ª¥æ¸°øÆ(/N®Ïqbì©ÎÎm³¾Uè%-òk€:+¾µxï%žâYÕ£-~¿Ð»èדz@&°Ê÷NÄËå¿? åa(£LNšYs‡ }ÿ— t ð#ôJH8´zµa#ÙGÜþÖß ›MšŒíÚµxذ»fÌxuùò“eeáþÝñsyù¡Õ«˜={ÛèÑÙ½zõŒ‹óÙß9vl}º=99imÛ: ©ÀmÀ÷Ú§Ðl¯èƒäá5çA?;Âã=#â´vŽ=}¨û'ÿÊ¿øjܯžT·ë³XûgO\9¯Ññ0Ù€€‡Ÿ™ ¾Ü´é­U«öÜ›“sÍĉFŽ\пÿÄ=ÒÚ¶mß¼yt(m뚯É^3´-Ç{sñïhgBòû…Þaÿ-°Jàøì£þÀ•P>­žøãTù¿‚r”N¾Îþ´÷Ï'¡\ ¥^€Ÿ¢0-Í,Í/••.e騢EVRÒÆ‘#ïÍÉykÕªsá¿»ð+*¯Yóp^ÞŽ1cfõéÓ;!ASuäçGÔ*‰(`ð¼ºÈöŠ>ø†Ë-Ni‡..¿¯‡ž>¼ü÷ÀV( ,µÔã€C^I"ëp}Ɖõð¶zëkåùD~*îI­"çø­ªêÇíÛ””ü}É’‡óòn™:uǘ1+žÙ»÷ÈN’ââZFüd;g¾ÀXà&u; ñþ¯l÷ßEFûF|Ê~ Àê†P«°8äN•ÿ”U€Ÿ¼à¤×3½£PÆøAZ4h°Oìý¾W\œfGQ”î±±3zõÚž‘ñp^Þá5k.îyÖÇ/••GJJ›3§rܸü¾}®[9«$Ö˜,§g{EdÝ›®ÇÐç{ §˜`5[)ð­Q¾“:S??ÂÇzÇoÌw÷¿<¯øzÀÂ|ˆçvîübÓ¦7V®üó‚š9óª Ö1/5u|÷‰m›5‹âd«¯@{ ?0˜”îž„ò*”Ä= ñþ†8Ðg”rœßô6ýA`#ÐÖéØiÌþ¬ÊLìXùŸ&¾ åmÕƒB‰ ðgGvêôÙÆrSüp^^mµTÑOï„„Ü””ŠqãŸ;÷£uë~ ó5Cvꟃ«$ú·ßÕéûUú°óš§Ê)í ±Á’ zú0õ@éh5‹õ#OëHý| ~ö&^Sí”çQñ.nX‡¼çÎd„Û¶½_RòÒâÅçåÝ4eJYFÆòAƒ²{õÞ±c÷ØØæ p8ÀòTÕX '0È–Û€?/ByÊ·êœÌAˆ÷'}­Ýå÷½Sþ(p ætXÅ=PNÀùûÕo[}å1^‰Àç@Q€?åQ”íþôÛË22Bh4:ºbâüÔÔ«&Løó‚>GIxø\%±môh÷’x.èß/ôôþx˜ÏÐTxNIó%èéÃÀ lb,µæYÀa îÕÏßÄ!€n€#å¹Q¬Ûœ>}xçáHvîÏ6n|}åÊg,¸';ûŠñã×>·_¿ÌnÝú¶iÓ¦iSNF°üjtÒ€‰À|`p”»§¡¼å˜ô[kñ~‹¯ü¾ ·é¿…²ÊÀñ–% ¸øB{óêLù?JXûyôš7yéR?Ûó™½{‡r“Ø´~ý¡:,8ð†¬¬.<¾y3¿‚ý9þéÊ* ¶Wô!êa2&¡óˆIONþ”qVg>o¾×ÎpïúyXüÈÃuéµ­•§TÎ(6Œ÷òñkeåw[·¾[\|`ñâ‡óònœ9o^Uff^ß¾}Z·Ž ùÝ|c5JïÜyå!·N›ö¥KOlÛÆ/n—ö’¨^%¶Wô!ð˜ Zè=}Øû½PÚYjâ»OŸ",ëçbod¦Aº8+å‘÷¿Úh ñH›ŒðɆ W¬xzþü»³³wef–ß·ïØ®]SZ·nݤ‰…Ãùºøj t“€`p”ÝPžrÊÇ¿Æu¤=œ/VKÀï ú@ýëPÖ‰Ni+ °f‡#çËÿ#”{¡ ­¥&¨Q½z·OŸnó;â‡×¬y07wëèÑÓ““»µjú_ ‰M›fvë¶vøð»³³®XqzÇ®’°9&®ÞK‚í}¨{èþV1šü ß$“ž¾.øo õ,µøÓ÷:P?òcÏU5½[åÉ+óÙ³ëöd„ã[¶^³æ¯‹=˜›ûÇÉ“·Ž½xÀ€©={iß¾KË–êÕãp€µW= è Œf+Pn@9 å{mw:‚Ú·1bÕÝ£}C~_Лú \ ôq!C°Ê í³2ÇÊÿ” (&§ ´sŸš˜x¤¤Ä¥Ä½o¬\¹''gÃÈ‘{ôhß¼yè·Ø[¶œœ”Tšž~߬Y‡V¯þ¹¼œ«$ü\%±øÀ¡û1zú yU7é¤é°„bxzúºá_Ò­=¦*.Ý!…qý,ôñØSq¤<òbÓ¿-Yò[ y CÆŸÙ±ããõë_Y¾üÉyóîœ1£*3sͰa¹))]ºôNHˆoÜXád«¯&@`00(6×{ < å_À'^+ؾéÿ$Öís ¿/èUþ(»LR0 ®½”‚Á­ò¿,jw¯Ý¢¡CÿcÔ—véûèTYÙ+Ë–Ý1}zÑСcºvMhÒ$Ä[x¢$ÅÅÍìÝ»l̘‡óòÞ+.þ¥²2¤¾ß-øŸËËÿäð* å;°¿F–Fs!„uzúºêï†ÒÚÒ×@ð¬6Id8ÕÏ$ñÓÝi:¢XyZ‰g Ù=®©¬<¾yó;EE/,\xÿìÙ×gem5jÑ€““’µkשE‹†œŒ`ãafk ä«r(·BÙåoPÞSå™g{eÅËŒwµÕËú¤¿ô‡Ÿ <e.ÐÈé¨ï”‡Mç~;Pþ“Àã¾æÐa"C|ãÆ)(¨õ¯°Û¶X¼ø¦)S–4¢cÇV †ú÷BTTJëÖy}ûVef>9o^xmoáÎ* ¶Wôaìq ž“ÆZû“'kqzúºé¿‚²°–pi6ð‘×Y¨~ú‹Ÿë)ãÞH`åùÎWíÛ¹ÓÏç ¿øüá7_ÏŽ®[÷ʲeÏ{ûôéãÆ­:tvJÊè.]’ããã5âd˯f@W`(0X”×@Ùå/PÞ>Sÿ ±ýqÜé«×ôCx¶Wô®úƒPJßLÁŸ‰ß‹€ªOäRù¿r=”î.´fÞŒïÞÝ{—¾¿¬ù¯JK÷^;iRaZÚ víšÄÄ„ò÷ÈÌÞ½ƒ\?Öü?—-›íð* ¶ÏôuÁë»—©Çägèé븰–2ª pð£Áú¥þ¼òô¾é>Ž…ò¼#> jÕ°¡÷ÿ«¨øº´ôÐêÕÏÞ7kÖµ“&mJO/LKËJJØ®]‡æÍDGs8Àrf„D /0ÈŠ€ (·ÿ€r¤¦Ëö¤ÖüA1èÚ¬OúËþ(»€^N7õÉÀýP~¸4™Ö­ò¿ ¥p#EA #Íõ¢¢®œ0á·ªªÐéûô¯_ÿÔ¼y?~N¿~}Û´©JߌecƄژ‚÷~./ÿÓÌ™Nï%¡°½¢¯3Þ0­ˆOR¡§+”8K_½kr‡Áç= Ežúÿ¹ñÖ¸•g¿xŠ>­[[˜£øÓöí®]ûòҥ͙sÛ´i;ÇŽ]9dHNŸ>é;'ÇLJþÑP~µºÀiÀb`3”ë ìöCy ÊWª´mlOBÔ?*^âë“þk(wAxwÚçkp”/M9öy_€2Ã…—GTzõˆ}sÕª:½øHIɾüücÆäôîïȃzk¯‡óò"o/ ¶WôuÇC=áÁc´ ¦÷¸…‡ž>rüÀb«w0sc^ÏpBöó~ìëy”#åÙ-žeB÷ ÿ­¨ørÓ¦·V­Ú_P°''皉7Œ¹ ÿ‰=z¤µmÛ¾yóÐßQ˜‘FžÂ0(Ÿ÷÷k˜ 1¾Ÿf Ýbcϯ\i½dµ[Á>øgfÿþú§*]¢D‡:u¦¶k÷ÈÀLzaåÊ{ÙÙ:'¼çdÁ¾`ãÆ¯æÎ}~ĈE }5òJNA›š5ƒ¤¿×׬ç•,‰ÑEYj¾R|$ð¸Ê»pP¼â#”¿ÓÌî3Ï„‹öÑqAÑßçu#†WÚ3J9 ÜÓ­ Í¡'Œ†y°¶ÂäsääÏ ?ŠZ¾—îxÛ¥-òªìVü5äE¤¯·%ºÁ6¸æ$†Ö»ý-€½H/ßOÂFCé,"ëz÷þ[7 Áz?||›6F›T6&¦sݺ3:tx|Р§O¿²zµ;1ÿ†öó}Çç®[wxÖ¬mC‡ÎíÔ©[llÅRF}8LhÛ6úûÚØ±•Œ7^3Kâ´†>¿š¯Î’ùCoê1Sž;EËÅ éoºn›gÅbxØž®ïG( ±ÐÁTH…‡‘íð|‡œ+FP÷£â½Ã7ÑŸ«ñ¾|>²Æû@‚¡ l@~wسòQ¯"C}¿LÑF+VÔ­PáÈœ9÷´v…差酲¡J–LˆÕ±ã–!C>›9óÚš5ŽËã{nË ø™¿²zõGÓ§?6hÐôöí;Ö©S¦„ µÍ줤À¶ÿâªU›zZ/Õ:KBÍWŠ4gw¬$êŠW|Dóùð8b.%±E‚§¿óu[»AëÑh¢=±aíDˆ‚j½` ¤ÀFØ{‘CHܰ1—º¿ï^‘i'?¦ìü×È"¨æí)®:̃£V/—¾îïO°ÊúË l4cTË–·7lp¶U~Ok}ûwV–4Œ+•*Õ½~ýy;?=lØáY³n¬[çN{t¶úýÆßËÎ>›šz`ʔ줤 mÛ¶®YÓÎD¦L Tûïeg¿4jT¹ó™:²$Ô|¥øHæ±ûßwœücê…âáüY˜`6H~\±÷ü¦¿#u›ú´Uê„'í‰ e?BYh`0LƒUðì@>€ïà¼U7Õý¢ø á/êËG‰Ô*{†É€f>X‚·|«Å’¯ûû ñA¹Mg‡QQÉÒ%J<;|¸æòÕÙ>ùýÿþ¾l™ßžYUË”éÕ°á‚®]Ÿ>üÈœ97ׯ×× p§ýþáÿ›™yréÒ7'LØØ·ïèV­.­ZöœMMíݰ¡'Y+Šœ¹j¾R|„óؽ"k)FjÇE(^ñŠÿ–O–feº_²Oj @ûtùvѓғöœ÷ßK£™`„Ð úÀXXéÈ3ð&Fr\5þüü×®ªÉ({†žGz{{VèÏ ×¼1ÿ»Éç"Ï"q~œüK‚Qç65kþfUmñž“ýpÍmó·&N à“®F¹r‰/NHxaäÈ£sçæmØ`´ýÂßÍÊÚ6thiW9úY¹ö5}Ô|¥øÈåï?Eì ;×…Ã~â¯øâ_æÁf(gê±Ô¾³}™ósûõöGÏÛs4poWå t¡0V£°>„ãÈy¸£ Æ¿âCžß«{_teÏÐåów Ùx}—GsHƒÓ6_êóþþ¬„*þ}4Ô£i )]ºü•‘qOk?Üú—ÎþצÄÄ r²×._>©I“eÝ»o5ê›ùó拉é·ßhC‘?¹ti×zõLgI|æ÷%Å+>ÌxœWÅt­÷ xÅ+þÁçdŒÙMõEp]7ÇÉwí×Oä>ëD£ÁP{ÞòMDC4Ô„Öãa¤ÃsÈÛÈ8‰ÜÔ«ú«Æ³âÙB÷¦cÓ«ì*üWȬÉkB |­«ê‹þFÆC´Ø% ÑðÃ2eÞŸ:U__P§lÁý’[·ò$ÁØŠ5k¶¢GcÆOIùǦMžô7´øÿff>™|r ~D>Av#OÁ:¤½î͵”=CˆÏMfŸ,ú càm$ß¿ã!Ù…¤Q}㱇IMš\_»ÖqcüžnÚ¿ãçW®Ü7yrVÿþãÛ´qT= ΣA¥JC›7_ݫ׮ää.üWzºûý5jŸò?,\ØÆxA*ð ’[øÚ¦æ+Å+^›Ç.ÂáA䃦»Â.ÌXñŠW¼# Ò]I¾;;zÃöáI>lÿº.€šxg~X£µ§TÚB"L„Å ÏÃ;ÈärK«|šoŠ@þOÈA#oÂ3,„qm –©yæQu…yéáíÕ£zÁsðgÑû¢ßú{ É€:X3[Œ×¥Ž¶X6'%ÝËÎÖÜ¿çï Óäÿ“™™³dÉÞ ÒúöÓªU³jÕ¢,– ÷;ˆH“*U†ÇÅ­íÝûµqã~Y¼ø¯Œ 7ûkÔ>þáÿÊÈØ”˜mÜòÃá¼íÊJÍWŠW¼&ÕŸiK:êL*^ñŠw‡?‰ 7Ø™Z”IáëöèJÖÈ+öyyv#ÁpÙf‘£Æâ#—ÏCÎ ß û‘íÈfXS` t„úÆÓÈÝ<^³×…Q×+ˆøÛÈ[Èh(éíëÞ2?¬2ÉýÖßãÈ,( r,Ô7ø'«T9–’¢“çïøÃ=]]—üÿefþ¼xñãÆ­ëÓgd\\“*U,"Aîzˆ²XšW«6ªeË}ûî0!gÉ’ÿdfúÈ>^ç¿KI‰«^ÝD™’×Õü©xÅ»ÍcQLÛýåí¨ Å+^ñzü»H#³RU¯gÌúªý¯èF4 @ÍŠW¼I>."ß#‘]ð²™# šnѱš[Ôõ þ2ß µ`|ˆùüòÒÏK1'~ÙŒÖWž'-íE 4·Ðï9Ù9÷œÿ+#ãÇ… _;vM¯^C›7oX¹²½ë!Úb‰«^=¹uëM‰‰oOœxrÙ²ÿfeùÈ>¦ù§§¯êÕË„g<\rØ)Qó›â¯Ããà°vWhz,¯xÅào"ë̾!õ‡_¬b¼Þþͺß> 5?(^ñÚÿ¼ŽüŸÃ^d¬AR ú@+¨Ü‹sˆº¾ÁÃÿ‘ÆÞ¾Êea,ìCòmUýÓß?‘'¡©—ü ã Ÿ)KgƒR¾dÉׯûŸó šé~ãÿ•ž~|Á‚cƬèÑcP³fõ+U ~¡‡˜¨¨Ö5kNhÛ6«ÿ}“'Ÿ_¹2°ö<2gN“*†½yuá]›b=j~Óã/ ót_ Õü9øù¸Šü„|¯#[‘ È< =¡TEt5~‚9PÙÛ´,†c¶•DüÙß[È‹Æk:hgøÃ(8w°CLœ³´57Q¾ü¡Y³œm’?øùI“tNÒ¬Zµ™;î3æLjê=çò„:ç÷kÆ#sæ<;|ø‚®]{7lX­lÙÎ?oOœègûäoÜ8»S'£í˜7´SÓíÇ&”¿¯¡-­þóÛ5d­O0ºÐç¢æÿHç¹c›«éè±pxP¼âï!ÿ#$šzH—†4äfqLšGíi®û]‡lÜ“êú*>À|.üG·á9$Y ÄC/m¥†ý1ζl­o¾æ‚õÐÐÛ×±Œ‡ýHAÑõÏÁ:¤º7ºSRáw¸ƒ%²£îøŠ0Œ®¡GÄÅÝ\¿Þq“ü;ä˺»›æR½lÙ1­Z=1xð±””ÿEI¸<ÿ=ÝM{ïò¹ëÖž5kÛ°aó:wîÑ A•Òþ“¦=¹l™?û{`Ê”ZåËmd3·ßv!õí_œˆ´ùp—V¡å(›z^D.Ũ—ÂÚ!qG;FBñŠW¼Gü«f+Š7¶µj͵G?Ž05?(ÞOü-ä |ï#/ #©0 C'hàƒRu”€ÚÐá%ûˤƧOø °¼})£Š.⟟"S¼”ýѶvÇò,¿ &ŒÖ ŒÖ“.½mèP—Ë×ÿí\·®™½%ú6j”Ö·ïÇ3f¤¥éœßÍå´økkÖ|:sæ–!CfwêÔ-6¶b)ŸäÅDE=(Báëþæ®_?9>ÞÄýµ n¹ñ~uȉÔhûì‰pžF‹Å¨ç…âï<(oi—na뜰þÁ¢xÅ+Þ‹üud D›zf‚SZé¸n¶ç¦«$Ö›¶gV×Kñæø;È%øùvÓÈZdŒ„îЬ(èTúÚB"Œ‡EŽ<‹¼…|¿ÕPãÓüMx%¼}•ÛÀfälQ@r@ú›o =½Ô£$Øg£ä/[ ŒÁ“”¥ÐÀà_µ¬Qã×%Kî9_¦Úmÿ3==ÚâiÈ”E¤]íÚ‹öN˜peõê{ºŠ÷\URð5yõê¦O|ðà:t©W¯\ŒÜJ­kÖôOûßž8ÑD†HkøÊûë7d¬îyvEÀ|›‹¤!%usOÔóBñ… Î|ÎkZ(^ñŠ÷&éaê±]²Ûöê¾nµ'G×ÑP¹Ø­®—âõøëȯpÞBžE6ÁB }¡5Ô2¨Ê¦Ç£*4‡0 æÂzØ‚¼Ž|‚œ@nZm¾©ñ@þsd¶—ª-Xua)×*QéÏþ^ErˆÇìck6œ°}Uý1QÀ²+,5۹ó¿ŠjFh®TyhÖ,¯ß× *Ušÿüˆ9K–ÜÍÎ6ÔýšŽ>â/¬\ùÁ´i 8­}ûuê”)aØ™6¡m[_·ÿÚš5#ââ ‡ZÀ$Ï~çÆþ~¹†¤º^W¿0&"lçÃwÝËSÏ ÅÛ¤NüC[1ÒYJ†â¯x/óÛ—ãzzzP»B„^{>suNu½Ÿ§‘£°y6Ãr˜¡Äú@9?ÒŽòкÀP˜+àxùù¹Z´)¤ÆgÐò'`­—Vàvc¼W(ÁÈþþ„Ì7®} yÄBrÙAŽ~‡«<>Í•á 0[Q¥té}“';[¦:[ÄÞÛ¼9£_?ŸÎ•J•Ò¼ùC|5wî¿32\¶Çhû}ÁßÍÎ>»bÅ)S0`R|||­Z¥¢]ø|²ú÷÷iû_;¶’ñ¤Ž…Zªz÷Kl…jnŸ3Âr>üIvÛêy¡ø;vwìÖÿ´OÆP¼âï]þ*¤¯æõ@ãíŒÆà´=»uwšû8¬pÔõ 3>9ß#a<ެ†™0 )”SnÏŽRPÚA˜K yy9‚œD l#lÕø !þ<ò$ÒÙÛc&úÃËpþèïû0ØKI °É·Ùø²ÜA. #Ÿ­-<U þUŸF®¬^ý?÷V°v¿IjÒÄoóFLTT·úõWöìy`Ê”[ë×ß3Ò`÷—è¾àÿÎÊúcùò}“'gõï?¾M›Ö5kÆDÙ¼Îì›<ÙGí¹¸jÕÀ¦MMLÑH¾Õ¡y¿ì£1åᜑ÷±àŸo#"†2›.;ÜïêùC~†Û¢åj|ž²Š–Ñþæ"»‘¡f…utŽxx9gÿ¥èo.ò´ñ••³¸ƒñðU±Cͦ=o¯XKaŽÑ¿²X2û÷ÿ;+Ks½ú?çùÿ>ëÔ ÔTW½úœNv%'Ÿ]±ÂtûÅÿ7+ëä²eoMœ¸)11¹uëó+Wz½=w³³_9Ò„„D·Âü½ûå8’döÂÍ-)ùùüS¤¥q \²ù.õþ¡<ÿps°uQˆ]Ò…â¯x?ðȳHUszKð©M v{Vèžd©m9hu½‚Š¿‰üŽ| ï / Y°&B´ƒº>¢‹¨Ã¡ $À0˜ «áqdò!r¹æÆý¥Æóäò ²FBÝÂ`Úìoò 2*x{°ÅB*üPœòÈþžBVÐ<ªÃj8ë»{ÿ‡«ÈTãçl ;Œ{@V®üÍüùî( ê¯xo¬[÷ΤIË»wï\·n”%0µtk•/ŸÜºõ–¡C¿_°à¿V~wÚo´¿!ÁŸIMíݰ¡Q3–…G›ˆûûå<2Ûlx)0~Ó=¨Ìçç‘éfpÑ6Ø^=#“G+ãÂY†ÅÉÿR¼âïþÌ2¹:Îk-‡œŠîŸ?ä´©êzù–σsÈwÈûð ò(¬„0º@#ãªìê°;JC,t€0–ÁfxÙENCm¾®Ÿ†øŸ‘—`.´×Úö¹þþ« ž·a˜I0¼¿‡‘q^ Óh ÏYi”:~釈 {·ÇÀhþýø6m‹Jê¯`ÝÙcÿ›6}6sæ¦ÄÄ~{¥ƒ‰£lLL¿Æ7%&~6sæ?6mºg0F Ôù¿³²¶ ZÚ¸ eb‘ ÀÙøÌE2ÓµºÀaÝó‡Ê|^ÏB%†è›nõ|ŒP[H;'кZ¦â¯x?ó_"ÌéKÁ–âÊvöçï¯û·;l^Õõò9|¯Ád=2FAOhU•À³# jBkè cal‚g‘½È!øµ0£AOoòW‘÷` tc3B~@®Û }«ñé#>Ž!O#Ó Î`ÈU÷÷ìB{2íìhÂy›ä‘@ö÷"’^¨ Gã[lð45~òÉð6Ô6øWëÔù#5õžî ÖGŸ³+VìLNžÓ©S\õ€)á4®Rej»v/ŽyréÒ€ÁwŸÿdf><`€Æ¤;Ç`8m?DmÆç!èâÁ-YÅòóÿdx%5èœV®œzžFf¢…V2†c€„â¯x¿òLåµ3móåî`Ñ :aÐéö¿…œE¾A Û‘‡ ¦Â`è  ´òx   †i #/#o3úÕj|ú“?¼…¬„>ž•# Îþ ax}?º>¬(Öœ ŠþGfxi¾j "×5¤mÚsYmÜwS^‡UÆ“Wôèñ™™.·ÇÿçÆ²ÖCþÖ† ¦LYÙ³gBllÉèÀø™«”)3¬E‹GüzÞ¼¿22|Ú__ó'-jW»¶a À‹ºï39ÈXÜß³‹ˆ!?ÿ¿j¶ÈºGƒ¨ç©â¹ã<‹Û‰ÇBñŠW| ùÏ‘6æ^8àÙÂüsÉCô=Ö×ÒÔÃØþp¹_èq7ò$¬EfÃèM¡²rxvÄ@ˆ‡D‹ yÞ†#Èo6 ê~ þ6rCÆBCï„`ëïqdE‘P¥J0 S w ÑKì oBëZŽA[ãç_B'ƒU³\¹OgΠέø¿22¾š;÷¡†4o^¥t`üÒ%££{4h°¦wï¦M»½aC2ü•‘‘–˜m\ƒsDñ¾ºÆø¼Š¤BI³öL‚ãNdBnþÿéåíñvÖùA=ÞGË!aq !ŠW¼âÎç#"æôÏ»À}Å;ý½åp²çuäW8„ìEžFîz }¡5ÔôA˜tDÑPZ@O ó`²y >AN Ú—>R÷{ò¿#¯"‹ «qÕ=ƒ©îïYäo$!Û%`0¼Z,…×÷:òÒÄ,Óà˜V.žc{ò‘,ĨRbEx ^6®Æ7¤yóÜuëBbÙ|7;;gÉ’çGŒ˜ß R¥€ÌÛ"ÒªFy;ï;öBQÕÉàü|;¾‰<”ðºÓ{Dò­H5³ÖkônºPšÿ¯#ks•ªô£Î8·¿zþFÕžž¦OâÁÿrÜT|äò§aFá$¢ì0þ,2ÞÔ³Áƒ]ĆŠ}nÂ)ä+؇¼›‘¥0@{¨ç³õRä 1t¡0V£È+ðr 9gŸs®îßPâÿD>†,µü2œÞßW`€|‹áq¸XX3/X®o²ØK%9kÃFä‚Û÷û/H‚ñoI„0ÙhÀTTÔ“C†„®îÀÕ5köN˜°(!¡]íÚ‘€Ìóu*TצͶaÃN,Zô·máÌ~þ™ž¾²gO6—ÀÙøÜg¼HªuFÏVÈ·¹õBøyñÄšuµ| úîŸ?‚l>T|@xœù$ ´u},ŠWü,“Šö½Ó\-?–²§ßøƒHœ·ß9lR©Öß|äFFxIÑ­¼ŒÜ¶z¡tÙž-ˆÑ*¼eà)8‚42ø‡-ªWÿiÑ¢°;¼“–öñŒúöíÛ¨QÙÎ,_²ä€¦M3úõ;4kÖ?ÓÓeŠ#sæ4©RÅhãë»ÎïÇãH’ËT¸V¸xùçE2Ä”ÊBÜ7Ðt8­Þo«ÑàÌcá,CñÊÁƽ »$¾”=ýÉ߆l(ë½÷ŒQ9ÞoÿUä'ø y¶Âd>Œ^Õ½ô–±G ¨-¡7$C l„m°ù~FnØ\u…-öÃz$Éò“~q4øÏ>Ç`¹—j+X•a|âZ…Ûßãá&¼ˆÄ{)%j4Ò¨s¬×žSH?S®íŸ Ûxüö¬Ž­„ ÒÒîfg‡z……ã <1xð¨–-k”+6Úbé\·îòîÝß4醿2S-J0Ãt¸¦ñ\“;XÎ!³=e ¿ßýnŽ¿Ùˆ9™¡pÊêý°¦.|Ê©Fƒz^G“¢Úž‰§E,A|‚“…#z®ìésþ2ÚKï)Å1‡&Û“‹œDŽ ï Ï#™È˜ý!êz ¿¤Žû‰‘• )$Àp˜«á1Ø…DŽ#\\;u¿„3Ÿß"[a 47.ÚïLj_Ùç ò—ÖÛ6!ú0v#·‚ïþ:‡¬C¼RP± ,‡ß1ü~ø2RɸI3ÓÐר¯§téw&MÒY¬NНY®Ü´öí÷Œ+¤„}þHMÝ1fÌÌŽ›U«¨û·c:¾îæÇ3fÄV4­ØÐiMnK.d—üxpt…Ãaô<ýifÊa¿}̼E?áîw^=¯#Ç*ЊŽ+ÐÒP|dò»œ¿µ L†?ŠÞN”=¿gªV¹Ý‘îcÝž|ä,ò-¼¼‚<+`: ÎÐÈ%â"í(±ÐÂX›á%d…ÓH¾Uô¦ÿŠ¿ƒå,ìER¡—Wƒ›|àhð¡}®#/CCu†'‘K¶9¨A2Ž"“À+Aö-` ÜÐÿ5ÛsiüëÚÂwð6RÕàölÐàÒªUúj‹UËgoXDbc³ú÷ÿ~Á‚Ps¸ÿÉ]¿~ßäÉ+zôèZ¯^‰(ÿÉhÚÔwÊÛ¸qVÇŽ&ÜîóáO[9€ãs§Y  ~a¸n˜êÅþ)Sj•7¼IÑ >×VdCH³Ý¬™…µcÂáy‘l1[§¬üìü}^?+í7èzõ|8[o„8¸¬ì~£øHæÓÜ^cÖƒ]öž-eO¿ò¿!CÕ²Þ¿‡ª@3è#a¬‡§ÝðòrÕæ•HgÅãs`'²:AòQcO _)Þo§Û©^°Ï·°Ôõ2ªÀ,øÌáƒd<\†ÍˆW¼Ke`6œ°m€ûí¹Si8ŒGZÝa®Téè¼yî¬ZÓû¹VŠ‘.õêmJLüvþüੳàyáÌŸ/~føð‰mÛšH@pyš5ËÑ“â ç9EÁ²¢mv»ñ™ƒŒ5ÛÁ(˜ ç5vïCõùò…Ù$²:°Û6$ÁñüuuÏc›„«žï‘ÉS —\¡ñKÅG,ÆxDnWáeO?óï •ÀKG9haLƒTx^FÀ·ÈYû(A5>ï)9ˆd C¡f Çè «àí"Íö»t4xnŸÓÈfhåí–„aðz¡C0އÈῇça&´ñ@#Ý[:­`<Ç‘|7Óö»Ñ`Î>×àE¤¯$ºÂäRqƒnü¼‡ òRÚZì†|› ÍX{nOy¸çør† »(Qâ¥Q£Ü_»ÞÚ°ÁâÁ¢ºC:ëûôùjîÜÿ†K˜ÃýOþƧO_×§O¯† K—(aÂ2ëÖõb{®­Y3".ÎÄ“zrìÆg>²L‹d¶„ýîÍo¡ò|ÙUÍÎßi)Sh¶GßÕøkq³Õó=ryœWÅÔÓ{P|ò§‘If_tJÆÂrzÊžáADª! ªAô‚Ñ06 [×áSä'äšm’§?Š÷'ÞEÖ"ý R o–j06"ï#לôK¿¿f#œž?ö#ã=ÓÑ<šÂzäW'å‚aüÜ@¶!qÞèl L°Ú6Ýþ/zÓá |äj ÔñhW»öïË–ZÁî?Þ+ãb©RÉ­[¿€cÈ9«­5 |ò5²&y£FŒ‡G èóáe› (óýÕÿ:CçÿY 5¼Ýåª0Ôï?§T¨ìþV‡5ÈYû{ V²©{ Y‹ EYÚ­Û_F±ÓÚ·÷úmÒ¶V­Õ½z}1{ö23ÃÌépoóæß—-Û>zôŒšVÕÛW·ž¨›Ÿ‹«V hjxÚ+¶î€ûãó$™½¦¥ ®imƆèóå:²¢›B`*\2>ÿë+Åüìp½Ôû@ò¯à:n‰[ŸŸâ#–ßåÁzµ3F”=Åÿ‰¤B‰q"”†zÐ’`,läEä]øNªÐ©ë«ø`çÿ€7åÐÝÅLø|GÁfä3$W«Ížô×ÍÔ óÿŽdzißn]1öMA;~#cL­4–Çð|‘x¾‡íÿÚoÀ8ä×ÿ¯^¶ìÁéÓÍ©!Ö,WÎw÷Nù’%G¶lùâÈ‘uëk†îçÆºuïLš´¼{÷ÎuëF[lnçëÖy(TùÂÈ‘åb Wbí'ÂŽÎÁl’Ë’ k"„Ïóh¯ñp¡ûG<|aûNî~{èžù'­e§zˆ4Ô>¹BW Bñ‘Ëç"ÓªTà¢ì(þ¤o W;ÑPZA )†lƒ=Ègð rÔõR|ˆò7‘χ`4Ô ‡]7X¯ÁVÍö…}Üq4hžÿ*<}|P@·lC.÷|rÙtö’¸ÆP8è¥þæ#YˆÑÕaEØŽ »Œ×ÕØ´©iQÆ‚´´Iññ&ôÍ$öר‘Ú£Çg3gš»‰Ï?ÓÓÍš•ѯ_R“&ëÔñäT¤¦öjØÐ¨…Ë£Vê0d§2‘òf¯ZW8\8ÎÃäyô³Ù°Ž ð’ç4wÌu{ô¯è.råÔûCDðNKhåc8OÌP|dòx&ܰù³hÆWöô?¿ ©í³—°ÊÐ`8Ì‚5ÈÈ«ÈAä{ä<(û+>ÌøäeHŽhçB˜OÂQ$Ï>&Ö‡öq3uâÁyÈ»ÈXH04ƒ ÈoEM ÚñsÙu¼”G¶~ÕÞn2ÓþŸ Áx3úÁïp™f4‘'*ê±Aƒîfg{^åñXJJz¿~ ±±_ßkecb†µhñìðágW¬Kƒ'Ÿ¿³²ž2Ä„üdbQÙëñ¹ ‰5{™êÃN§çÑM$ )eÊ£áŒÍ´™ö4ráhõþ x4Ë`XyûtÅ+þþGÌjÏu`{¡×SÙ3ü5Sí2P: ˜ Ëa3ò²¾FNCžƒ,­²¿âÿ"›`T´g¡"$Â两U~Ò?öqÑð€ÿøÀnÕ`>±mmpŽŸc0Jyɯô(\/nƒÚÿ”ñ4Ÿ2ð$ÜÁòÒĨc¨jÕ.ôúB÷æúõ¯7¥]»¾L©(îEµjK»uûhúôy»d(~N.]Úµ^=SÙ6‡û÷s0ïS2‘\§çÑ>hlÊMá}«\ Oڣ߀ï\½?D–CÂÎ-¡ñKÅ+ޑ߉Ô7û臬\×ÊžþäÇÙ^‹(¨ m /Œƒ…Ž<o"_ ¿"7lr±”=A|>ry¦CkÔY4!ßfÀ³ð}á‹càíéÒÑpI‡æ>` o…oóxˇ·‘D/u¼¼ ù6POÛ ég¼% Eòoè™Ñ¡Ãÿ۴ɧ‹Þ»ÙÙß/XÙ¿·úõ£,>¿wKEGjÖlëС§—/@Ã230 &ʰŠÂ8Uðh¹ƒ%Æš½ Q0ÎkȆðóè$›$×#7‹Ã:'-jWÛp^fxÉv<_T(iÖìàxx½Ï܆GÍŠ£%ANQø°·ÚãÒÑ ÞO–rƒ£CÂî ¯xþ 2ÙìÛd)Xëð­ìï7þ2rÞ6>JÙGñ‘Æç!_“ÈhhÏB t‚ØäØæI§=ýf™° ù=Dæ«_‘E^rTÕ†4¸`«=á•öŸCFoO[øî`y1š“{aåÊÀ®ŠZ´è¡z5líû0‡˜¨¨þMš<1xðÉ¥KÃÒÅðWFÆÆ¾}MXr$œ³šßò­PÍ´N'°]…Áó뤕)kÄÂû¢Þi¿~ÒcZ Tõ¾i<Zu4U%|ŠW¼éîÁ‹ÔK¶)dÊžŠW¼â}ÇŸF^ƒ%ÐÍK9óž±0†Ïá¦M"@ØÓ1)ð¥ý"xíó óR–MGx¹e«¤ë­öï5®—«à&ä"‹Œ&þˆlèÛ÷¿YYÁ³H.HK{wÒ¤Ù:ÅV¬è‡Û¼~¥Js;wÞ7yò´´ðð2|;~\õê&îè×mÇí>0]ݶ:l…üЙÜáÏ!3LY£,붘^l3Ýoÿ®¸\ˆz߈\Û ‹æ?c$¯x7ùÝ® íêàS[áeOÅ+^ñ^áo Ÿ ›‘‘P7О…²Ð–ÁÈ™b±¥´¿LT’áävˆØ'žGâ½Ñ÷hS$cä£öÏ3%?ùrË`´›õ*VürΜ`^3ç,Yòè A‰›P0¼ŒŠêÓ¨Ñ#þ²xqèÂ\ѳ§‰à¢Õrô8Òß•–p5ÄçO‡ʳPÙ”Azj÷ø°ýÍ]8D½o(M…­sÂR”taqæÒP¼âuø\HGLË='Ão¶¡ ÊþŠW¼âMð¿ Ûa´‡v.4ƒÉ°¾)ªdÒö¿‚lƒîÞ¶’@ox®¨žBHØç ²ÖxæQ–Ã)ûZÞoÿS6n Xž5^™bt«V·6l•%ôÿÛ´éÀ”)ó»tiX¹²¦…:*ÌìØñí‰ó7n ™3§I•*F{ZÞ-Nê¶œCfƒi§ÎXÈ0{~EÌÚ¨/hTþò~û[è6ã«ë«ÞO"–·.+hŸqá ,)Ö©ŠW¼!þ L3>Z V¾h*{*^ñŠw—¿†¼‡lDAÕ@{*CX‹ìC.Yé~‡´ýo!{a”‚mÎŽ8È@~w(!Ìö9ŠL2^pÁ™ÅVä†F0ª¯Ú麗c=ø ËÈh£a)%J¼0rdè¦ü¾lÙ“C† hÚ´Tt´¯§‹(‹¥Gƒ›“’~\¸ðnvvpäNZÚ®]Môn\+Þ‹’ 0­ÉÙŶfYx<¿®ÀbS/̘—ýõ|‰síhPï'‘Îc§!ù@1²Àöo¬½ŠW¼iþ(ô4û8©/§Þ){*^ñŠ·çó‘ï`2 Zâ{ÁWìm`<ühÕ—ð°ÿ!d.Tñ¶Ñj¢¢7ÔP±OòššDŽ) ûl+hø§¿¿#•\µm2\,Ÿ"õŒjFÖª6 ˆÿJOÿpÚ´E M«úÃY³\¹iíÛï?>¨"A>ž1ĘECøÐj@î@bÍš¥ì²ZʆÍóîU¤¦Y —/m£Ÿ|Ýþ–ºí9jUCD½ŸD,o-i—taŸa{"Å+Þ<ÿ44ûhiŸXÅê({*^ñΟƒ7‘•ÐÛƒm1oµ`¤#‘ë6nþ0±ÿ¯Èz/h´>ÊÀ8؇ä۾ǹ}® ›‘ú>~O"?Ø&œûº¿Û»æªÃä–|d=b4Ä}QB¿32²ÎÂÙ+¶ 6¤yó2%|žeIˆÍè×ïXJJÃò6nœÙ±£‰4¨ø³hø2›T€ $×JÜ!<žw?"}M¤<äÛ‹šù¼ýúU0¾ò{{„<þmKˆÝ?mýŠW¼§|.d"¦W£!Ƕd«²¿â!ümä<ã Q = %¡ ,„…j2áiÿKÈVHðú úÀ Å !cŸÈ\(ëûV ÆÂÓÈ/6Ûƒ¾ê¯fyË‘p)@~CºlÕ2eÞŸ:5,] vŸgd|2cÆòîÝ[T¯î‡™§ZÙ²“âã ü^±bÿ”)µÊ~wkŸ àëA˜Øl8W$Ç6óí dÙ¬«qp.@ógk݆}é ¯¦Þg"Ǻ*¦£bdMT’u…LÅ+Þ ü9dº +‹Óü”=¯øpæO"¯ÂbH‚ò“ …ÃÈ-«d®ð³ÿMä d„—t¬Öœ¶Ú±!û\C2‘Dã:ˆ5`¼'‹‚e¼Þßó¶2–a{áúвÛÜ »£_ãÆ×Ö¬‰/ƒÝçÂÊ•Ï1<.®\LŒïÆCÍråü×»nÝĶmM¸–C.rËU$Õ=—$8Žóí[f£¢âàc+ï¶ÿÛßF·yGÔû¹â‹"Ä6"ÂY†ýÙ¯x¯ðß ½=Hè}®P¸AÙSñŠþò1’ áv = 堤«½£ð¶ÿçÈl³eÕtŽÚ°¸¸ìYÈç[ð ²zùÝÿ ÓàeøÝAˆËÃþî-J è¿C–?‘›m±<¦µoï·Ž¼9aBÕ2†kmàË¢Œ›­H5³=m ûmdnÂd¾Í‘fsÍÒ‘[Øö»t4¨÷Åc[£Â¾L…c†âï#þuhlö!©g){*^ñ!ÊŸ€‘ÙÑõ,´€)° ùɳŠÔ ïëõ ²ñzBJY˜û‹Âa8žo "«!ÁïÅS›Álx9Sìtð¨¿óà) ß¿FšÕ³¬Råø‚îbpü\Y½ú¥Q£F·jU±”w¼R{Æ÷C³¯­Y3".ÎhÛb`ÜF °ìƒ8³}¬[ gà°šooA6”6e“!p²(Î(°ýwíhPï?‘ÎS` aã±pâÀP¼â}ÂßD² ‚ÙÒ(øÕö‹”ý¯ø`æ/Ã~d= ðAý£Gë‘ýpÅA„/¼¯×ä)¤‹·Mý`;\0{^Gö#Ë¡ƒßKŸ´†ØœÓÖ 7ÖßG£îSÛµ»ãwá€Ðúü7+ëË9sÖôîÝ®¶ùh-‹ˆŠPìLN®dÜ-Ò±0ÇÁr I2ÛÁR°®Ú슇ÉüpinÊ& á]‡ÞöWßÑpX#àB½ÿDãßXCZ_ xÅû–?‡Ì4+ÜPR ŸLÊžŠW|ÐñùÈ7ÈVd2´tùÉhˆ‡Ùð"rÂF, R®W.ò2Ô m`3rÆI3"jü_B^EfC3ÿov°ÞA.ƒÑöŸCüÆò%K¾6nœò#ú\_»vǘ1ãÚ´©\ÚØövBl¬OvqÕªM›šðd"yp™ QfGo2äØÎÉá1?œE&›}¹]7loä€÷·n›©ù_ñV©6¢ZñâX¾BñŠ÷ÿÒÇŬg ˤ){*^ñæÏÂ$zùE¥_ÿ¨# ùùÓ¡Êwä\¯O™PÉæ]Z´™©Æ¿#ÙÓý^-Å!ÞC®G¡;mÿĨ¢@×zõήX¡¦?ge}=oÞ†¾};Õ­+âڛѯŸZr7;ûù#LÈXvƒÈ ÏjŠuC²ö!??äÁV¨hÊ&‰pÂVí?HúÛ^·ÙŸ;†ôý~igV=÷e ›K;è6þ3‡¢Bjþ@ž½È}…IÅ+ÞüMd3RÑì£kü¬—P¤ì¯xÅ{ÏAvÂBèìAõ2o`<GŠt¹#üz‡Ç‘N>`H‚WŠcCÔýb’?‰lCÆBMÿÞ)%¡7lD>En W[”1,*š5K¹|\p,%%½_¿„ØX‹U˜Cµ²e½^Ñãשּׁ'‡ )]°’i_ÈA>‡ÎfÇaÈ@r$ø„ôý~ ™g*I0 æÃÕà~~uÔí§N+4©ù?‚xl½ÎNçì7ŠW¼ŸxOòýb`\qî“SöW¼âòבƒŽ õûêH#9zÃJx9¯QR+r¯W>2ØEâáä¬ÓIUÙß<ÿ3ò$2Òï·U ãOØáqq7ׯWîÿ|nmذgüøiíÛ×,WnR|¼wOþÛÒ¥]êÕ3:f*Â3H${ଜ ç ,ï÷íf+zvoô¶”ƒ¥¿úÎëOôΠæÿHá)°Í¥¼c¯*)ÎE&¯xóÇ‘¾fŸgÕ`ä²§âoŽÿžGfAT¾¼•sÞ¦ÁÓÈ1ÈwH;W×ëþy^ܬ©pÜ~ãQÝ/¾â¿…G!AP“Å^ó/:ú™áÃÕâ?PaÞ«ëñŸÌÌÍII1Q†gô!ð#¤‚éZI…z.axÿCz˜-~´µ° pôW?†åcõ¾­x­ˆý(^ñçßòL¸áNVeÅ+¾ðs Ù‡¬EúCå@¯mªÂ ؈¼‡\Õ[P×מÏ÷†£¡ vBœÙ‘S¶"·Ãt>ßkVÛµMq†PêoÝN}¤± æóˆãÑuNr7*^ñþæÏ#s<nX—õœÇÊþŠþ ò:² z@™@;êÂ(ÈF>)–ÄW×Ë#Þ„6gx9§ìôümäcdÒÃvO%££û6j”ѯßWsçþå†ÓA}þùvþü¸êÕ^èšð$™N·T¸j“>÷ã/È@³ñb›‘Ûö›ÿ¡aŸ®º];ènø°šÏÙÇ.2¿(ØÒ‰¢xÅéçA0öV$¯èK•= |.|Ž<ŒŒ†Ø@{JC7X¯!§l$ÁÔõòïþú3VÂj> M>ÞGV@ˆ œvC¿Æ³ú÷?:oÞ_™™ú{ïwµþ©xŸòÿLO_Ñ£‡u 7Ñ0ÅiždÈp}žnB̹ùFÁéPžot{÷¡­FƒšÏ#“§@ã/ÝJûT¼âƒŠ1éÝ Þs·IÊþŠIþWä$:nòàhà äKu½¼Ì»|®Ó¬Â\•=ÀÿyY ̦‹{Á‡X¢DR“&›“’¾™?ÿ?™™*‹!àü‘9sšT1¬+Z¦@y³Ã   ß÷«f%ÚÀ ÏKˆÙ§›n?ÐÚ÷Vós¤ñègVäëº+¯ø âo£ˆiɺ!pBÛÿªì¯øÐã¯!À&d0T´g¡"ô…Õð6r¡(lA]/ÿð¥u/Ív¸áb§BÙ3´ùkÈ^d´Á«5HŒebb4múð€ߥ¤ü7+Ëõó]ƒëmÅëÀwÒÒRºt1qáúB=³½>ìÔ™ar‚qfSHÖ"7‡õWwÝž¾oc¯æçˆåÑ"4ò.ìÅ+>hù È<³{8%`1\rÈ+SöW|ðóùÈqäYd:´K@= h 3àYä8äë–YV××§¼¾îÆUûZ6ÞúÀZä=ä:({†:Ù s*õZ6&fp³f x|Á‚ÿfe)€¯ùg̈­h¸VImháAš $×ÅŽh¨Þ_·‘Çr¦,Ó~¶q1„¶}ôKx¾§5Ôüi<Ž*ŽiùºªŠW|òß#¦%‹ªÀ“pÛÉ]¤ì¯øàá/ oÃj$1ŠÞU‡Á ל¨@©ëë^¿0Áepvþs¶ûßÑÐVÂ>䢺¾¡ÏŸGvÀ h¸I£|É’C›7lРï,ø»Èép×íe¶âõù[6ÌèÐÁ„›¸©Ù ³á\øÎŸ!­Íê¿îàÕ uûôÔíò°ë¯âMðÅMùºÛŽŒâüü>¤¹ÙçeìwøFeÅ–¿|‰<Œ‡&ö,Ä@G˜/#¿Ø¯WÕõ ¾œ Gƒ8;ÿkºöm`ìDN#Êþ¡ÎŸ†‘ÉÄÉ{~T(UjX‹O |bÑ¢ûévkì»Z?;[o+~ÿ”)µÊ—7±ÑbZÄ' Ž;ŸOBý~9Ì4['x1\Ç÷É^ºßo»"Uómdòå-í<ù®Ô ¯ø`æoÁc7 ‚4œ²ÊþŠ÷y YÝ t  ±0B>Cr„ˆÕõrŸÏC®#¹ÅUo|Õý¥Æ%çóÛB#rqa[QšŒº¾!ÍÿÏ ã¡VU]J•÷Ô!?/^üwv¶›;ünÖe{>wݺ mÛšd0ý|i û´uéÃá~ÉGžCª˜²L8f›tNöé­Û÷}®Ô.Õ| <Ž£ÿŠW|(ò‘³Â Ѱ.:ä'+û+ÞGü äØŒŒ‚ºö,”° ^GÎ8¬!Õõr‡?¼‰¬GÆCW¨vé %¡´†±q¾`¢=t¯ïE­W‡û?t0·/ C ù¹á¼Ùjü„ÿ3lAFCÀMA•K—Õ²åÖ¡C]²äÓá®{²w¤$„¿w„ªeÊ5rI2æ¶ÚzKÃì~ùébÖ2Ï9ù–°±+Gƒšÿo!_ëÿÙÆ?ØŠW|¨òßÃÓï:ðrKן§ì¯xÓüÏÈv˜ D  Ma< _!·mœ êz¹Ë_GÞ€ÙÐÀÔ%¨sàKûo4Ó}ñŽ N®ïuÄó²ˆ1ÐÓJÖAŸæ¿ƒÇaP9pSSÕ2eÆ´jõô°a¿-]긽¯¿áöüÕ5kFÄÅ5©éB$¥ ®XíÁ„Ùø¿‚,†(ã–˜Y´;ÞóC];¼ãç—âCÇYÆ…¦÷BGBñŠ~?göÉÚ¢ÈG«ì©xù«È{ÈFdT ´g¡ôƒ5È»ˆ³Xzu}Ýás‘ÝÈHï%¹L†?])0é·¿’îùÏkmAä#ïù bÛ"Y‡Sn讫ñÌüQd32*nÖªV¶ìØÖ­Ÿ>üä²eúµÜ©ãêüŽ1c*•*å7ã'CŽîng¨ÿW¡¶)Ë´‡/"f~ë놣AÍŸÎãÜ'aãÈ·Ñ{P¼âC›¿…þTþ³’uÈu®/¥Æ[ó·‘O Ho(¸‰®VùòÛ¶}qäÈ?RSõ…ÜŒ)Zþnvös#F”‹‰ñaëÃN­}˰Ï7µˆ9¹Š±EîàˆšúéÚä-÷b^ÔüÞ í4Œ|§¢âŠW|˜ð?"ƒ<nx n[VÙ3Âù›py ÆA£@{JB'X; Ǫ¡º^Þâ¿…D]ÍÎp³0é×Xûõƒ,Îj‰°ä#í4hïË:¬‚7‘‹¦ú«ø`ào""«!Áƒr‰^œ©PaR|üK£F]±ÂYì€c¼€³‚ âO§¦öjØÐ?f,Ȱ¾ßsÖlm¾7‚î÷þº–Ù j>T|qÌäƒ ¬c$¯øpâ -Í>ƒ›kÞ({F"ÿ;ò*²ºtïþÑ’áäsä¦Ö°T×Ë+üdŽ)0OŽ`¢ýúކ3VáŽvý=‡¼†,€öËôy ëc©Ægñ"û‘åÐÉï·ŒõQ¯bÅ©íÚ½fu½|Ä¿äº £íןÓNíRêÛç ìE–BçÀyÓêÂØŠ|äÙn®ªñ*ü5x YñøXD?  R¥éíÛï3Æ™ÓáÁRßÍ ¿ñ9K—v­WÏ?VJ‚cîÍ!:>o"ÙHSÆ\'É÷»¾£aOÄÛGñ –|+®ÀÁ9á¨î xŇ+YlV¸! 橸+{†ÿ#ò2ÚAt@= Ía2lE¾An«ñæGþ*29 W¿m5ŽÃãçrÒþ«th'ë Æg(ò—‘בùÐ* ÷TÃÊ•gtè°+9ùÒªUwB t’윾æÿ“™™”堖ŶÂv|~l¶YxÓiI¿Èºßõ Æ¿¡¥¨æÃH㱫H‘oµ%kë®°O½P¼âØÿ bö ] [¶_­ìrüeØë‘$ß”0ª’ë`rÉJñ[]/ò_@zøÐÃÈnx9{‘'™ÐÄø ß²Êt§ýÕ]9<´Ï×ÈãÈèÀE÷”„ž°öÁ%›*ßj<‡ vÂ,hЙ¶q•*³:vÜ=vìåÕ«ïêÖ€pLmð)ÿã¢EñµjùÁÕakaé„°oçÌú‹c`yq½auÿº8{Ý&þN͇ÊãP€Í>Å"ß>ÝBñŠþ}ÄôNKÓ¢Ò>Êž¡Âç!ßÀ6d ´hX/ ñ0^D~,*@¨®WùmÕÈ;Ar\».”Íù?ƒ¾FÎÜÞàx¨¡{¶S¶å©<´ç)ä%d´¬ƒÉ:ìBNÛ¼÷¨ñ2üd;2Õ¬8Ÿ·Ž&U«ÎéÔéõqã®­Ys×I¸f¾ƒfJÓü¿32Ö÷émñùýT RáªM C¸·|d+T2eŸ>ðƒóyDÝ¿úŽ†×œÄÕ«ù0¢xòµJbæÛªCY»+¯øˆâo#[ šÙ'w?øN#gIÙ?Xø³ÈX½ \ ÃjÃpÈ„‘ëÅþ`u½Ïgº}[Aò[ÑNŽûíùIrû[¾6rþšº§:i%và]{^†=È’ uØV$ë ÆsÈñ'á9dÔ èäܬZµy;¿1~üõµkãîj)hþl”ÿfþü¸êÕýÐÁdÈ)ºAÂu¼A:˜2N-ØnµC«î߿ׯë¼Û6\NÍo‘ÉS`óŽî )ÐÖ“T¼â#ˆ¿ KÌÖ节9…¢ÍÊžço"‡‘Gä@o—ÝßAê‹`'rÒ¶Ê º^ÁÿèÞÕì4“Œ¶çÄ Fæ“Z. â{æ"!*ëP †@6ò9ܰòTã?ø_‘mHr %x[T¯žÒ¥Ë›&ÜX·NSvASgážs™MþŸéé©=zXÄç¡u]àóp?¹„Ì7cu_xë²zsÂqåhPó›â±SnÈ×pZX{,,ŠW|Äò?!Ã<.{¹©áWö÷9ŸƒìDBg(hçB#"_¨ñ ü‡n¬ü«Ã EWÏÛóšY;ƒìÃôί¿*ËÿÛÿkä± uXû‹¶I§jü‡yáA¼¡wDkÔXصëÛ'æ®_×I‚]ðÂ]-™;þðìÙ«ø\¨>ì°Õu Ëñó2RÔ}:ÁW`Oø¡ºÜeÑ æ·å± {‡t&'Å+>’ù‘6¦s>‹ +{ú”¿Ž|„dÀ0¨hÏByè +a/œ³Yªëì|Žõn“àœ•:£WÚ“êêK›ƒûçwåhÀÚÿò"2=pÂ(÷eæÛÊ:¨ñBü7ÈÃ08pÁ2÷Ö5k.JHxwÒ¤›EN‡{N´uþoAZZJ—.~x*eÀpGzšU_~ òÔóÚ?̵£AÍW‘Î[k4Ø}ìó.¬1Å+>’ùm[Ì‚³Vûa9®#+ÌÖ)ŸTì;V÷— ~¸®%w¨ùSñEŽi»J˜ùö!ŠW¼â-X®À2³¡ø˜e%Ü ìi‚¿ï"k‘þfE¤½xT…°9€\±]¹©ë¢üC6BŸÀ9­î;ÚÕ®½¬{÷S¦Ü޸љÓáÖ† 3:tðuc’àx°Þï^ä÷"õLÙ§|öñ"?Â…£AÔ|¥x~e_ÓÁ¡xÅ+¾˜ÿaö©_²‘\Û46egümä(²™ÍíY(ía.lG~*^ò©ëåþ ²ɆY0Ú@C¨ 5 1´‡d؈| ùZ2×&Ú³ÇÕ:ÿ9«² ¾°ÏU¤¬n®XUÏÕ?¿þ;÷Ï!2ÿEƒ€Ë:¬†}pɶ–ºƒœ¿¯Eºz˜uöÊaéP§NjïOZ–öÀѰoòäZåËûVKöo/‡íxÈqUpÑÙQ²à–½¾º¿\ð#u­úв§âïWpáà±°äÛÖ×U¼âÿsÚš}h {l§ceÏüÈÈrè eí\¨# ùùÓ6 M]/ïòyÈ7ÈH2Ô1rªÃZäœÕn¿‰öœCôæ–{v~7ùѺmȵ‘ŸÔ;¬kGCˆŸ“ð2# ²ñ0v"§­Êv¨û7øù?‘°:Ct@êÖ]Ù³çÿgï¼Û¤(¾¿}Ÿ]’ ‚*&D1+¢b@1gÌ¢˜Q1£~1‹(¦ŸŠbÌ9çf1£ˆ HfwÁç}<À²Ó3ÝÕݳÓa¦?sõå…pOÍ©S§BŸ:uê¤wLô‡6€ÿƒå>Úh¨ömÁnª ]9f5º~âÝŽ†'<™¥Ï‚òø<”{&þ /^|ÓØ$ذÚÕÀþð•w´˜ú\†}ŒMÀŽ‡Í³ö,ô€!0¦bÜ!û¯¿ûnĆC')÷Yµ—R¥<Ç„…×¶ú_+]cýLöþn7ØFÃSØLÿsþå»ûÑOž¢êÏ~æç ­Ãfp<«Ó:¨¿×¿{.…]«ºû0çŸpŪЧoß·`›ªT´%¼^ý$ÇçTïã^'¬ôYL¾2dàyŒ€dâÅ‹ïøÃ"ìŠN$nåÍÒT}ÎÄžÄFÃî™Æµ®09îÆ¦am ûO”Ÿ‡½ˆ]{%Ðôç@kH²"ù¿Û#½|ñ””~fbÃ1pö!¶¬"kcÄò·pVçGW2È:³·•inÈ4oËê´Ÿ®:§þ^üBìl4ìØ^†0³ó×lìäj½0ײ—±úK¼;ìî±øó¯øÆã JáPö÷ÿ+^¼ø@þW8¶ÚõÁZpÖâ]"4˜~Ã;ØM؈©Õgm8ÆÂËØ?%§XeÏ ñ3±Çàl˜|ã²Ê×Cþ›Ž†= îôßß©¢bê§Žì-ó´=`(Œõ¦uÐøþ˜ŠÛÕ¡‹a0|ÒÐ뇕ÿ]ŽÝ Õe¶?«?Ö‚?Á©çGý§Ké³X<0‚¼&^¼øˆü°Kµk…-á9ÏìúÖÏ ì{ì!ìl”ujìgÁ$ì{l…ÓM+{î<¿û »;~Â…š|F:·õ*å–F»îô¿¥³F3Šaÿ`+Ó: ÈAZ‡¿ü£H4žä‘Ÿ‹=‰‚-sïbØžö[64^{}ŠU—k˜¬"Ù\~Dˆ£Á¤OñTø$¬âFéšÄ‹_=}«]7 …/Ë]‰u£ŸyØ+p 6¬ÓGîk’ë0¸ÞÂy¶2dωðK±÷±š$\èü癊¼‰Aò/Áº:7¨×a s4P4ûœ­Lë°GµÇÜj’ÖáTx+ þë—Ÿ…=§Áf9s1¬·¬:]Õàí5ήÊWØ.†E {®!¢Sç“=árÒgAy|~_núÏst\¼xñQùEØUÕ&*k‚³`Nùb4õ]ŽMÇîÁN­³^x­Ìœw!<ýê—¹SöYs~öv ÎA®ÒÏF°¢Ô÷]ç ö ïÉšzi¯( …µç•i®ÇÊ:­Ãø’´OòÏÏÄ&a'ew0gå§Î¹ÑÆ·z×ÿdl½ª´´7|Œ&{î ’SíûÝ€(}Çáø!g0Ä‹ƒŸ‰_ãýŠìëû'<‹]ûÀY¿Oöƒãàvì#XV^Ùg"üoØ£0*•„ ùÜÍnu2®d7¬ŽÚk+g¥¾÷ÏÑPD{^_`wÁq9Hëð¶ >í­€üؽØq°AºÖ2¾+FÿýR•ŠÖƒ‡IJçÎòîLœæh> Ä;ögÜxñâ«á?Äv«vU±Eyxò/Å>ÄÆcÇB¿¬ß{Â>p<»ê6{Ù[Ú|Ê{w½a½ª\ZÛ{b‚ë;ÒYÈ«Q•¯ör‡}ç·;!ûÿ¦ß±G°³rÖa ö‡Æ·:á¿Á&bG% ³}û½Œ ¯ÏEإХªîsÌÓø–$æh0éS<î“þ ñâÅWϯ€ÉXÕ;fûÂtŸíÙåÿ{.€Ý kÖÎ…màT¸¦·_?){ËO´­7…“`"¼‹ý‰-/q,Ä>†›±A‘Kû™ðùnog ³ëÓÞÜ7ÌëÿuÙ¿˜½c2Më°%œ b3ÒÿÅWǯ€éØxìj/GÊ7ôØòÀÓï ¥Ïgª])í Ÿúg?‘}Ö’?ÅÙ “|Ê”> LJF4D)Q¼xñ±ùÅØØj7Œ„¿®³ò/„·°°Ã`ý¬= }à ¸{›ç/{ËŒ¯yso gÁ#Øo®(Ï?]­ä»"ô—-œ%ü¨‡\·×¶ÎJ}òÆ"û/–Á»Ø¸LÓ:¬ãIë€Ú+çürìSìflôìıš+`aÀer ¦ÏŸ°ƒ«ÒÒÚpg¹#Fö™ª³-tX”>‹ÂôåŽ(ñâÅ׌Ÿ‰¨vÙ±&Ü„-õëäqåYßb“°³`‡¬¯Ÿl†A0 Zµw'ûÉ/_“æÞ.‚g±¿œ ¡òœá‡F>ß­ë,áŽvk¬¯öà¬Ôׯ©²ÿp~eZ‡;sÖáluZµWžùVìCl64ÎNØYŸãO\~)6«.nhüÕ~eµì-þ4gs< õ›ø²d+ÂOb˜xñâk΄í^í*sóö{¡ãÊ3^®†`í¬ÃúÂpö¶Øå@•ýä‹ï|Æ»E¿x•ò,Â6 ûÑÝŸïÜ'ƒÀŠ£òyl¯íœ•úªú¿:­ÃäLÓ:4ÁÎ0¦`³||Ðj¯|ñK±·±±0$øXâžðIùËsÃêçµ°ëx¡po‡¿óÈ>kÌŸîl”ûËßH¥Ï"ò„¦sˆPºxñâ;˯ÀíD↽;7ÊÓŠMÃîÆN†-³ö,t‡=`4<…Í ’—ý$ÊÏÂ^À®Á†Ã†~éCËuæ0¸ûkmÿ­Ö÷Á°7» ŸïBoåœP~ »ìÁ}!È—‘~Bý%6ÿ/ö<–mZ‡þpš'­ƒÚ+¿übì5¸v‡æö]„§œéôI?`ÇUeäkÀ %÷ÂÊÞÒäݱ„÷…„ËIŸ…à){Õq†ZÐÄ‹_~1vM'7œ³+Þ$§bc`HµÅÖð³9œw`Ÿ`Ë*^5e)ðež…²Oå»[|÷`ßxS9&QߥÐ;Ì·Z~è%í]a²ßólÛ;kô…7Jý% ~ö6džÖá(Ÿb-a;äjßlù𶬤™¸¾mØíЫ*«> ~‹Ñ){Kˆs4˜ô)¾r[)ÒšC¼xñÉñ3á¤NÜøx5\‡A߬= ½`(\Ïcs‚×L²‡Ôxw{UQ~X©Ö÷ä0ƒl-_’–—¿u4à mõcÏnGÃôŠwNõ—Dùå0›ˆe›Öa?¸ÞÀæ‡ù|Õ¾â“ã? ó„}6ƒÂÆsé?iþLgÝëç’>‹ÆêŸýKñâÅ'Á‚íA} ÀépöåªÌÏjßñQü±ÊX`:õ} ÌñÑð«‹:"²©o±ïKrLäÖvs4¨¿dÈÏÌAZ‡]üÒ:¨½Ä'Êÿ¬Êb»Â°½¿dÏŸål©{4žˆ§‰!oåÿ$^¼ø4ùDZMòí\X†Ãÿ°×±gïÕ¾™ó±üQÊw˜r}?{S[fŸc«êÃñp36>Ã~ÅæA ¶ûû›Ž}Œ}„}Ž}`K°EØO0 ûû¦c3°?±%•ª~9…ÿÜÏÁ¤þ’ ?2Oë°eIZµ—ø$øØXugˆöƒÑ⺥ÿøPGƒô)žÐƒe…Š/>e~1v¬‘ÏBØ ÎÉØÞ—"µWÎùªýAåÇô\$[ß?ÃL7(ÆoõÞËfSÙ'qæní‘A߯Š?¬^?;†8Lý%‡|iZ‡ÞÙẫÒ:اX«Óï ö‘Ÿ^í[ÂcZoäŒål²»Õ^âWG4¬ðÑA¬èøƒçÄ‹Ÿ2ÿvrvo>ÁQp ö.¶¸}Å©öª;>Ô/·ü(/ö©Õwi˜› µ½ŽAå/ÏÁ…,¾YT/†/*ú]Dýìä,ü³ŠHõ—¼ñ+Ó:܉ešÖa,ö¶ÀÛÔ^â£ð ° ©æJä&8þí¥Ï¼ðg;n¢_fé³h|Ä«G|b$Ä‹Ÿ>ÿ)68­eå`¸žÆ~LíU/|µ)jœ£!¡ú.«6GCéóT>‚|?‡Â¯ªP¦Ÿe~Š©¿Ô¿2­Ã™°mÒ:ü)û«.;õîåWwKŸ9âÏ q4˜ô)žÿ¼>‰ísÆa)%Å‹Ÿÿ$¶i2—®ŸwÂgXk¹“Rúo>4!nùB$ҫ Y"–JŽS¢ô„'Jvö¢èÇíhøØëR©/þŸö´»C·¬Ó:üàÝsV{‰_ÍÀö¯öÙ½Q ÒNøs-xgÀ•FÒg¡x‚ÎWxK,gÄ‹Ÿ-¿‡õìÜqMØ®„`Nyp”ô߀|ô['"–ízË”ê;ÝéøØ,²<‹±ùÎÀzE…wÀ¡Ÿ]B ¦þÒüRìl6,Ó´GÂx¬Ì[­ö* ¿»ºZÿשð·ì'÷üyÎF¼£#ÜIú,.7cdù‰‹ ÿD“xñâóÃÿ39¹Á@ ÷c_amÞtÒgÃóÑR*Ä(?zòÅê;Å)ÌÞqä™Sííî©}FEn¯]à ê/ǯÀ¦cw±٧uà l¡W6µWÃó/b›We6ÛØôYüùΦœà‰"”> ʳ¢Â?ñ_°£¢ô0†xñâóÀ÷°ÅtŒÃÞÀæWD@IŸ…⣧TˆX~˜£!Õú^áæÜ˜òÌÏ÷ `Œ'%P?nGÃGÞÅúKCò+Ó:Œ„m3²Õ•i.„©ØŸ©ÅÔ^ÄÏÄŽ¬ÊHzÁmXKû@-}柿ÀÙ ·$×> Åû¦ïàVx2y”ý¯xñâ³çÝÉÞéx¹’>³á[°·±‹`K²oCýqËE‚õÝË)ÌÿU%ÏØû¦a¡úq_&÷ayiõßççaÏÁ%9Hë0 ›Q¾'¦öªc¾» «î*î£àŠŸ–þsλ ãKŽNHŸ…åù¯â ÿùµÈ÷ ^¼øŒy÷m|3*‚¤Ïtø°G±ã½‡¥3—?Ö%QÊ–£!úÎÅÜÒüZq Sôò¿Å®Ãö„æœ9ίj¨”?ÔÑ þ[X¾4­ÃÚÙðzpÜîMë öª;þml@µY¨_õ‰Ç–þë€ílÙÛ´þ_ÑPy¬¢ÒQá›õA¼xñòîPد<°¥ÏÄùïáVlï€7ÒÌåѯüˆ )Ô÷g¼ÆÖ%¡=‘g¼]‡À†ÐúÀư)ôƒ¾ÐÖ€&èëCØv„`l =` Ø v†ÝaØ6‡ê¶7i?ëg ï·7“úoÁù•iîÈ4­Ã°\ÓžÖAíUül8¹ªæîca骆–>ëw;nÕúS“æ£å,ÈLþè~úªo¶•S’ë©sþ¢pGƒôYtžÊ;**ŽX¸J/^|¶|ØÝuHŸiòQ^¼3”?Jކz¬ïdg8ƒÁL¿/æÖÞ^†í"¯×¬¸6¢¬ØÁaŽõ_ñnþoì9,ó´§Ã$ìïŠVí•ÿ)¶KUM¹<í W‘>딿ØÙÐ7ký)~¥£¡4µCÙ?—ez¨L!^¼ølù="lWJŸ©ñQÎ&d(ô„:ªï¿˜ûî•ã îì­;7ršwùî™ï¶¯øÕÅGá—`oå)­C‹ß¥îj¯Dù±sË-ì÷i†‹`aùµ#Ò½ò—8›û&­?Å—°ÞÛ)þóK/Yy}…xñâ³å÷vôoy“ñHŸIó±®{L_þˆâÕW}G„`ב–²ÎìíÂk÷ý:’,ø—?$äbSÿ_¿<iö‡k°7Úß`Õ^‰ò“aýªZj¯ò¤QÒgÝócœ-~£ú£øÕ·NTærðýߊ4âŋϘßß9пê¹fFúLœx­CVòG¾²nê{yØêöÜŽk;ëÏÞ–c;†UpkÏ™Ÿòݾȷ;ö"ÔÅwŠÿ Ë6­C3ì £a ö§÷ µWçùo±}ªj—uáÁòËð¤ÏFà/äh> Íû”z Š/^|Žøƒœý‹å9´¤Ïdù°þŒåâh¨—ú.ÆBSo ¢öŠÇ/Æ.….ñ›ÀàLø[úoPÞíh¸AëOñ¥É ÿ ;tw…xñâ3äsôSË£˜¤ÏdùˆÉ³’?Š_ .êû¶CØ·K{‚º¶·?”ÜÓÓp>åïëüú›ÞFõwñ5ç—@æiÖ÷¤u@íÛ¤*ï—„UKŸÇ»# ¯×úS|YDÃ~WST\’)^¼øñG;ú'K¶©‹£Ÿ¿°Ï°°7àmì{lAÉ)ýD剾߉~"G4ä·¾ °1Ð5Â2÷ŸK¼ëҞݕíîòÝŽ†7<—Øk¼Ÿ,¿›†Ý }sÖa‘ì?˜ÿ†W¥áµà¬­ãØšôÙ˜¼ÛÑ0®ëOñe|y8SÐ1Œþ÷dŠ/>cþç@ÿhÅ*ª!õóövìkÇpv…^0Ž€k°±¶Zë'úµ™è3¢xù¬ïì&lÝh+Ý‘>›–õjÿËsååu~ýõ€m ·âSàÅÆFÂ6Ù§u`¶÷Hy‘Ûk)6ëQ•JO€Ùå1ó²ÿÆä¯q4˜ô)žÿÊ]þÎ]¿Ÿ/^|ö¼û˜úƒíó}ãégv?Œ€M:±ÊìçÀçžßí”ü‘³-f£Ïˆy«ïWØyÁ.¤ÊÏî°´d3­Þí¿ÙYÙ“Wé9°|·£á5o²L·â³âÿ†gÛÓ:tÍÈïОÖJ¦Î¢µ×ØVUioxSãI‘ø+öp]ã®?ÅGçqø*Vø¥”/^|®ø3œý}£@½×w66Û­ÖëË#àÏ]U-è¶ú¬.!«ú~‹Ý!CÙg ÌõzŽêÝþ{:ë;! ¯þó~!ŽÓx+>oübleZ‡a­ìÒ:ÝžÖ¡Õ•­qô? ;¾*]õ€ë±–†[oˆwóW…;¤Ï¢óe[X?DÙß”e•/^|ø³ýÄU/{Pß÷±ã’Üéê Ïzo ¬Bþ8!è3šx™Õw9|݃U¨²Ìñ¹F¡¾íßÀünX}CoÀÕx+>Ï|LÇîÀŽ2r:ô\•Ö7±…‡•Gÿ­Ø„8Qc¥ŸCàWϦì¹(üÕNø¦ÖŸâ«æ©ˆ‚qZˆ/>WüÎ~¼ÿ¡Ó:«ï+Øà´”WyRÆ–?ZÈ@fúŒ€r}[±°[°Ã OçÚîHXpʺ~í¾Ó›Ó­$›]Pù„;4ÞŠ¯þ'x;#i¦byƒÃëTÿaƒªRE?x>üçdÏ ËušÇ؆XŠï$OÀÊO_T\’)^¼ø\ð;ú›ü/¹­›ú~‚íú:òthóL1ä{” e}F/ñú.Â^ÇÆÂ¾Ð£MÖnÖ{O6FŸîlµaÞ«=|Ë?Щº—+¶#4ÞŠ¯~.ö,\ »eÖá!ì‡:æb#«ªuW¸l•—SöY\~¬szëm'}Ž'ŒhŠY¢xñâSåî²:­ï\ì ÂÞŒûŒ€åg×ÝòG»?23ýWÑP«úÎÅžÁ.‚]¡¹¦5¾ > Zïýýg'¸§b˨²üaNí½TžôNã­øºäW¦u¸.Ó´ÀÑ0¡$­Cnõ¹{[§ªjî ßV5?Šo0þçôtuûÑ é³È<Áî (Q¼xñ9âÃBרÇú>ë‘ñç"ÏUþˆ;üYé?‚xµ¬ï¯ØdìLØ6™6Úž)µ6úü{‹ ‡­KîL¿¿œáÜTœ]ÒjAåGp4h¼ßP|6 ›ƒ´×bob‹B¶ÓÖÏØžÕzRñ ÷“}”¿Öéh¸ª>ןâkËãë–þš‰/>WüÿœýåÁ¡kù¬ïìŒÎ-ï 6„í`'Ø®s«Ìתà?úQ‚LôG¼Ô7¹Ï0Ú<"uJ?¥ž… ½¿Õß»-“rÙÌw¥üƒœš|1àè„Æ[ñ Ãÿ„=™§u¸¨#­CfúY€®*¦¬ Î…y~×ÚÉÞ Ë_ç\^YoëOñIð+ËFñâÅgÎßäè/:ªï¯ØÎU-ã6‡‘0û –UüÄ"ìCl60f±;w ˆZßêÞäSÓdñjSß$.œ»>¯u<ý,uþhŸ†K©½np ö‘O±>åì,ä…H"i¼Ÿ%?›…ý-òI¨¦ü¹Ø39HëpL Në>ŸªÖó¾kȨ+{.(ïÞ躢®ÖŸââ‰ó‹ùâÅ‹Oœï\œœá/oõ}bcàEl–ÿùËóJLwÃ3µð/?òÙ„lô_­¤ÊúÖêÓ.„7<÷´×R?s«¥Þa µ×D§TGGn¯áNÝ>øª£ñV|^øM*v×{@oØ6…™‘\>å—¦uX3#§ƒ;­C­ô9;°*ñzÃ=Ør×BBöY\~œÓx.¯Ÿõ§øäx¤#ñâëš¿Óù6rvFïHqùç°îÑÖ=}a |á3Iže0&ò2k¨_VGùU½É§§ÿên¨º¾UzÃ~p9LÅ~O~;'L3ó;aoÕñ;EZþŠüNrˆ³jÏUÜϧñV|Þøõ6<+^\€¿Åûó×;ç©Ëêdý)>Q>bX‹=zrúÜçèÏ úøCX”#£›ÀÝØÒ¨Á]!Ïäh?JIzíHAbÕ‡ ¤ñÔ\¼Z­°{Àp><‚Í踨2¥g^˜£áÍt噌¹šGžCE=›nÕôè©âYÛiÃ'`Ã?ba¦uèâ“Ö¡šç„ª~};xW#ƒž°ççÔy)zÇÔÓÔq…›caWúOâÅ‹Ïÿ s ?¥äšÆ|Ê„+,{ÁlYÉûgMäy0Úí™eç Ý廋Ê\ÿU8:S_wv´íá ¸¦µŸ‰ÈJ?ËüNW/˜j.ÏmafyŽ·S‡–˜³´©%UÓx+>Ÿ|§ /ò+³†ò¬¼š7Û´[—§uˆ*ÿ‘]ê«/˸¹äšìS¼ƒ¿Ñ9[ÉýúS| }ýwÞ«¾•©N€ñØ{Þwƒ<ØçÆa6‚<óáÄ0îK*Šu—xˆ£Á4ÞŠÏ9ïhZ¢mœÖDžE9Hë°¡Z‡@ùGG.ùH˜9 Lö)>ÔÑ }Š\@/÷sW8~@¼xñ™ðOÆÉ—+ùßÄBŽÞ’°üÿBß˯ï‚wÂc… d®ÿˆ~èå‡&Ô8 Æa¯b{<ß¹ë_CÃlàÆ„åÛ<Â¥¾N7wùGD>…¡ñV|ùç×YÉß «Ó:ôÍÈéОÖÁÞļ×ÍÇB³Nl/uLs²Oñ‘x÷­gçxý)>5>Þù™¸çfÅ‹Ÿ4?Õ9Ðîù¿ÃÖ ;¡:9Ú(ÖIy&DØ–¿Ãÿí®¶×:¤¡ÿΈWõÎ_aM?ÑYBÕò|á×»Áûq~buù oÅç“_è¢×ˆpæ+ùjOë°uÖižÁæxÅ{*X‡Ý`,,«¾ìS|%sdGƒôYXžÕΉåÞ#²Îã¬â?ô:³¥ŸzáŸwôUì¢çAþØÖaøWOZž…Ð+lwT𱂲òC_¼³Õô€‹Æ¨otþhKù»ÂŽ-Ä’çì(¢ž?ybU™±ëëv4}žå1cˆo0Þw z,ÌšVTú̘Ï9Ðï‰üaë:×F熤)NDþß°õa¸Ʀòjí?lå—±þ;™R¡îê‹ÿ4Î%+ó\ŽÅ¦`Ó°9Ø’ö ð+Ë_„}ƒ=ý«}U8þ¨HB·¾G;âÉN—/^|¢üwÎŽ¹UXäTžëûc’i*XŒ_ø“•½‰¯‚ïì›älý)>ž bµ+¢Ü]±¼Â]!¾ÞùÇ‚ˆ àÙö.é3ÏüGÎ~—Ž—½\È’sa´´`uÝ^±Î&¤/4¿@ãÔ7.?¢Ó‹ûfè Ý:]κðˆ'ÉEõõ=ÆùC·Kã­ø|ò_8®^‡fýÖ÷/x]»´ó;º¶ìM|"üíξy~ÎÖŸâ3áýÓ­Už»Ð¥ÇÏÂz‡MT§Ã¼|_J'~šs ßÁ›(+[ùßvŠÚ»âê¾zl¯(/ÞÊk¬ê—ŸáŽÉW„¹'ª¨ï±aŽ·âóÌì4à]*ί.ð-lq…y×…~aoa×bDÈUìv4È~Ä'Ç»/í:/OëOñYñ”eq8†áã¥_ïüðhsÕFðJÅY>é3?ü—Î~[ÏãYÊ¿ÛÑii­Še¨ïöŠx CVò‡F44X}«à§‡]¼šèg_˜Vëñö¸°~§ñV|žùwsÜàŠ\0¥£S7Ø ®„W±þ×+ä]?­%i6Œ3˜Ì«ÏúН#>ÔÑ }Š÷ÄÊ.t–~M|#ðÆ9¼òäü|ïzTúÌ ÿ½³)û{ú åØ)ç× Õ]{E?›‰üÑ#£¾ÕñoyÓ³§óÙÞ ž¿;S_·£áQOö_·âsÇ¿îœ;†–'œ tƒ6Ãn0^ÄæÕízæGlvz„´ÿ&3žˆ¿»ÃÙ7ÏÍÍúS|†¼O¬lÅa ×ÝWâë”?;þ:xSx«ÃA.}æ…ÿ9BFîÌåoÁú;oüþ²ü4i½¶Wܳ )Ë!¢¡¡ê[5ÿ:–ÎEtGÀûIÚÿ Nñ»­Sã­øüð/8縃*ÎG¹Í· v‚ álnplpÎõ㎽ú§$Í–ìM|üξyv>ÖŸâ³åijn ‡(=w±¼ââë—ŸŠ­Y|1,ꆗ>³çg†åÆÏƒü“³ÑÈŠƒ|õÛ^Žd)¬Ü PßÎðÓ°~IºÖ…‹à{¿»9j[_·£a²Æsñùæ§8§#JvMËÊÞÂ9ðögòý±†üÚaŽÙøDù‰N <;ëOñÙò,÷?eÑ‘†z¹ó†øºæÿ‚£â¯·„ŽõJÿé󳋰uýÂJÓ—3KÿÏ~·mÕi{EQþngß<+ëOñ™ó,o¿µ~¹ßuE,D“ø†äÇŠ?€ÏÚÏuKŸYñ œý¹ü§:­hZÉe Ð^a;üYÊ¿Èi*kU¬ ê½¾5ç¿ÃîÂN‡½acè Ýð×é0ƒ+áÙŽ­Ñlä?ÉÙF“¼GÜ5ÞŠÏOØÉ» òk‹´ Œ€ûà{ïž^†úéÇÑ {_sÞíh83ëOñ™óø:!VDŠßxü=ñóŸ5Ãÿ°o&3é3M~©s ïâ½c<}ùc=#\Þ0íå(AVòÏtšÊúžÁF¨ojübl&ö5ö-6û'gãáÉ!ŽÓx+>Ï|„+ôüËO.Áʆp,Lľ.ɾ~Öq ùWÇr_ö&>þÞ鷤ς󫷣c!–WdÃßÀü/ØÐø“îŽí·HŸéó-ÎÞ*&¤,ÿ3Nñ&vx@¤½¢\ë•üÓœm1Ð/¢¡®ë+~åNq¶Ñƒí}PúŸOþfçÀu±ß­I;J?ëÀ0›†µzÝvIë'ÔÑ ûŸ(ïv4œ‘õúS|x*¾æó¿¾1â•_ŽÇÖˆ9×vƒ[JB¤Ï4ùfgÓ´øäƒMOþ3‚ëÚ‘­ªqÚ+zrÄôåw;} ¯~ë+~åÜŽ†2Ä‹å¯s\Wx_fJ’”û3Ä‹å¯tðµ%÷³–•O¦Ÿ^pŒƒ÷*®˜©•~Ü7”ÿé V’½‰¯=ÿá‹ é³è<_ö=áóOâžoÃnÀºÇ¿¼íN¬Íyešô_[~­—ig"ÿWÎIh¼ÏàU÷íåÅ;+ùG:e»ÁÛg ¾â£9LúŸg~ŒÓ€o,y.+ŸÜ|ºÃ¾p ö–ß½3Uëg}çÎ* ©½‰O‚¿?Âî…ôYpžå'Ê–—§‘,;€!¾XüרÎñ§Õ!ðS‰£KúL”~P3eù¯q ö}I­†i¯Ð[2”S¶—°«¯ø•üiÎ6ú¿ìÆñâ£ðç; x¼'GC 7hÿþýûôéÓÔ”¶?¢ìWÀ+° }Ô­N?8èUÁJ²7ñIñ8×§´‡ËIŸEæq¤p¨iÈïx³í[>5H{EÌY¾ü úð~ õ[_ñ«ÿòtgÝ—Ýø ^|þ,§ßíÍfº"òè4lذaÆpÀ»í¶Û–[n¹Î:ë477§ìth†Ýàxû7þz)tê—ýˆO”0ÌÑ }ŠÇM,/ÏGmâ ËOǶ?¿ù\:-}Ö’ßÄÙ?g¤ÿYÎèpï὆i¯X·0¤)ÿsÎæØØAPÇõ¿úÏp¶Ñ½ŸÅç›?5N6ÓèñVÃ*>xàî»ï¾ÕV[­·Þz]ºtIÙéÐT±ýªŸ¾Îg–Ÿ–½‰¯1ïv4œì½Fú,&O±ÂY⊊ÅŠ_Š!öÁǵ`rûp#}&ÁoáÔÿŒ’àÌ4åŸìœÆy6[§½¢å,È@~w‚†Óýnˆ¨ëúŠ_ˆ½‚]ë‡9¤Oñyæwð#> \‹2: s~<ðÀ=öØc›m¶Yýõ»v횎¯!®~¢8d?â“ã'9—y'­ZHŸ…æñˆ:†A!¾PüÇØ6ñgÐC`–׿.}ÖŠw7ÇWÞuXjòŸé”jjÅê°1ÚËÝ Tä-KGþE°¶S°§½‰9kU_õß”ùùØËØ¥°DŒ¿;£ñA¼øˆü‘N~* ÍÁòÎ9ÊœƒÞvÛm7Ø`ƒnݺ%êhˆ¥·£á7ofxÙ›øšó9 '˜´ôY(¾Ì¬2æÁׇ!¾àübì|bßRÝžö,j¥ÏÚðjŸVþ™’üÛ9¥šîózÓíåî?fdÿîm‡î0¯#d-ë«þ›?{»vì\(ýÜ•Ñø ^|D~¸Ó€Ÿ÷¿_­–ކ²Ï^{í5`À€¾}ûvïÞ½¶Ž†¸úÙ(‚£Aö#>9þaçÒb„_ž&é³h¼>6‡—B¼øÕÏ{Øñ§Òc`®ßšôY5ï¾äãŠ"ùaîwžù%¯7Ô^nãÿ Ìœ„ü-a!H#‚wÒ:Y_õß„øyØ ØÅ°3½ÄobãƒxñÑùýüJÀrbEbކÒÏ!C¸ÑFõèÑ£¶ Qô³±³´_ -Ù›øÎóî²'x£¥Ïbò¸S8¬ðóOˆ¿¼äð™ñgÓõá™`÷˜ô—ßÝ©í÷Jî¤IMþOÓOO&Ȇj/·{åá’ÀÔä ,öèŠ-ÁèåGX7«ÿÖ†ÿ{] 炟£AúŸS~/§¿í·–ˆo5¬ÖŸ}öÙgûí·ßxã{öìÙiGC$ý¸ó@ÿâ V’½‰¯9ÿˆÓï0i鳸<~ÿ4ÔÁ~ ñ…æ_Ç6‰?§žÿ´¯q¥ÏÎðîuØ[#E¢ò?á|¹íâç®ãöêål‹+J.wHGžYX§HÛB[yœEŒò£_o©þ[ÿ7ö,6vŒT-âçÎ,Æñâ£ó»: øÃФ³5ÏÑPÅgß}÷Ýa‡6ÝtÓ^½zu&Gƒ[?›†]8%ûŸ(ÿ¨s^:®Â¤¥Ïòñ"f#>â ÈÏÃNŽ¿ÆÝ^®0Vé3.¿ŸSɯE;¨R[ùotN?›D‹ÕÏVÿ¿cÏaWÃpØÒÏ3âû¬ël‹á*^Ãú¶bÃÂúàãaæá–§ºÜf꿎g.6»%æ\(ýܑŸ ^|t~§î¸V-;GCégèС;î¸c¿~ýÖ\sÍèžÙ(O?gi?9ßdoâ;Ï?æœ£Ž­¸6[ú, ï©åŸÔaE@¦ñâWÿå a;û~FÁüŠ$yÒgtÞý2ù¢ÿò%YùÏrŠÔ×gúÉ^Ÿ+= c±á°¡WàþA­Aå»·˜z·‡¤SßóºހNË?XýׇŸS±óa{ÒþLÈb|/>:ïN1óuùw-b¼Õ°,>ÏšEÔÏf1rËÞÄמu4HŸâq9Î#^üªí¸cã/v7«ˆð—>£ó‡Æ¹H2ùpŠ´vø^wÚúü×9_î9c·0Sÿ$xñWÛú>a;üÕÀr¢ÊSmDƒúoÓ_ØÓع0,?·g1>ˆßÜiÀ?T$¾É[DCLGC ýDÐŒìG|‚üãÎeÆ1QMZúldž˜¥ëÑéy[?þ’÷|XÛâõ4åÔê“Y¨t'§H]ÈÝÈó]Ì£†AÏ1aF>&•ºÿ„­&É)µ¤Fëæ¢<³±'±s`yùŒ×«'ß;Lrf°7®£!’ f†º¶ž„w6®£µÐßÑ ·ø¨ülìÈø«Þ-á}¹ácòÇ9UúhúÜ"’£!Gú|Ý9_^9 áâyI–F¬ÊúÎ 66„¹Ô`ü¯éº¹1ûï,ì lTÎ…fØ Ü×ßÞ¦ñV|¾ùuœüWpX–»w¬»îº[o½õž{îyàæÒÑ®Ÿ-:åh½‰ï,ÿ¤³—õø¤ôÙÈ|‡´U@«ÿ¦ÍïûâÅGá'a½c.Ž›àrXì-Pútð'9õù ßû^Òò¯óèDæú¼Ó9_NÅ"–„ “JJ«y}çb»† ÐÕãÎë”>+ýÃájxû½ä‹Eë¿¿ÃãØ(Ø&uçBØ.ƒ—±Ørš.pò·f1>ˆw_Ûð/T~Ä.Óµk× 7Üp»í¶Û{ï½3w4ÄÒOtGƒìM|üSÎÏ‘I ¤Ïâò kÑ“øó;vpüåòøTÑžÓš¼/ 5v K™7ŽªQ ê× ý`a2ò#¶u„ÎuOí~=ȳPÌî1ìLØ:uçBWØ.‡W°JÓº0ÄÑ aVO®Ÿ®N^RíÑ ßÏk¬±É&› 4hèСù?:ÑßYÚ÷êÚz’?%í°À#ttBMåÞ¦¶U¾áÒ¿q9*Ä‹È߃­?î÷ZXVá•—>Ë÷KòÄàåääw/ W_o™}î,í:%^ùÐòÛ°µ#Øö¹%›Wµªïcò2£AãU­ø™Ø£ØHØ2#çÂðj‰sÁWþÑÎrnÉb|/>"ßæºu”ßÉ.¶ÖZkm¾ùæ»ì²Ëþû£!®~ÜÃη«fÙ›ø¤ø)Îîy¸×Ñ }“Ç—}Ä‹¯‚ÿ²ß¾ˆé˜/šþÏ‹™ì-ù× »å1Wú\ˆ5w"¡QYù‡G3ìè‘&¡òÿ„EüÑcýB5^ÅâÃ&c§CÿÔ Ý`/¸^Ç¢çÍîhPûŠÏ¿Øù&ÓÍ98תß555­³Î:[mµÕ{ìÑÉ„UD48ô³Uˆ£Ád?âå§:»çaþçò¤Ïbñøþ[[ »¢I¼øÎðmØíØñ—×7a-»vÒg”‰›ýv;“–³°X•\éóUçdywàv±ÿŸŸˆpz°vPg䟉]Ý£õ£áÞ0cWÑù_°‡±Ó`‹Ô Ýa\íu.Ä’ÿ¢üâÅGäç9‡Ó5K¢*ËO$J—.l°Á€† ’¨£!Š~ܧ´¾éôü"^¼›îh> ˇD4´FDˆ_=?‚ß ¾ øÝ‚ëóR§ÞÆU¤LAþa­9/à7}º³åýèãár•¿(,{YéçPø)fù+Ÿ°S [äQrÛ…Æ«(üÏØ$ìØ< çÂ>p5ö¶¸Óý×}ÊMYŒâÅGäg;ßdÖõ{“ JU[û~Ú½ûÆo¼Ã;ì»ï¾5t4D×;×ì×Z/‰O˜ÆÙ=õËo*} ki‹ð ^|Õ|+v#Ö=þú{Öæ]KŸW9•vµ3~2!ù÷kÊϤÊDŸŽø]*fÊ(å_óš€ãàlIŸÊçKìlÛ˜çâà4¯JùŸ°±S _Î…}áìmlqÀFPuõ½Äù»7d1>ˆ‘ÿÕù&³‘s|^#ÅþÛ«W¯~ýúí´ÓNî„nˆ¡·£á+Lö#>QþYg÷<¤"íˆôY@Þuê–hóFMˆßIþlçø3úø±}•>—Óts¬¿¢cŸ$=ùOkħ±œèó}§öÆ¿Ÿ;Êÿ3þù ` Ø FÁuØDì^ì.ìl œ»CŸ*ò™Á”ÿ…ÆŸ•þ{;6IݹÐöƒë°w¼Î…ÚÖwL4GƒìA|ùÎñy p”¿{»v'ùð†ÕgâÌz÷îÝ¿ÿÝvÛ­2¡C¬£¡úÙ6ÌÑ ûŸ(ÿœ³{÷zÌ¥ÏbòŽˆÿÿ/¾¶ü2ì¬k̹¼g{.=és9M7:ÇúKœNå„ä¿8¬¯ ‰hHOŸG:sIüîwÌ5JùW“ýg¯ö‹95þ”a3°û±aãÔe Øþ‡½‹- HÄXÛúºV]ïç´Õü%>'üWÎÙm[o€£ü°©ØÙ°Uн¹¹y½õÖÛf›mýÖ‰èúq;¾ìˆh½‰O„ÞÙ= Ò‘>‹ÀãHíPñ…T|âÅWÍOǶ?‹¿U;/ >ouŽõxƒKÓ‘|XBÄC+v¢2Ñç˜CÐãƒSš‡–¿ Û5;Co¸·âì}ÁÇŸØ}Ø °QêÍÑ€qØûíÎ…4õsYXÍGâsËæœJÞÔà*&ö v"l˜æ•1ݺõíÛ7bDCDý s4È~Ä'Ê» U¤‘> ÈàŸ(¥l ñgˆßY~)v)4Ç ¸dG®˜úœàëÏ®ÈË‚üSà }K\ÝêÓ½ÁôIÅ;X¬òg`}R§í£á/O¼OqÇŸo±{±ã¡oê Ñ „°÷aY{sd¢·£á…?Åç™ÿÀ9•ìæÍ>SEù_bã±á°fbÐâÊ¿³´é›¿Ä‹å_tvÏa΀#é³ ¼ÿù™ ïE[Ày ñâkÅŒmz>fy€ ¥Ï{œcýH¿S¬IËÿe„+¿ðž M_ŸSœBî–/Š<ÓRô5ô‚óáï;mÇ“o±»±cÓÝ®\}ÙÞAp#ö!¶,,aRjú¹"Ú!&ÍGâsȿ奇ÇfÇ•g)öv ¶tÉÈÑWþ ²7ñÉñ/9»çÁ×[JŸÅáióóRTü×Ú*¾/^|BüB¸€ï©ÞOx²$¿`¡ôù€S[§@úò/Ž|ë2²þÂÖsŠ÷QEêä™›%¼<waó‹jÿËiú îÂŽ… R7X †›±±eiÞó ·£áÚ,Æñâ#ò/;­wÿŠÈ¸šÈ3^À.„íRw4Ä’ß}àtš7GƒìM|Íy·£á>ÅÓœ4ÒB¼øDùw°-âÏÓGÜ€$ê ¬Ï‡cý ~‡R?´ùúAk@PCÒú\†íï”í¸'Hç噇Àªt;‹}µ±í¿û »;ÖKݹ°6·`Ÿ`­¹×ÿ•!ŽÓ|$>·|èýyIËó'övj*·ÒÄ•giŸ9¯L’½‰ï<ÿr˜£Aúßq$Ì÷”…ã †xñIó ±³âOÕëÃ3§ŽUŸ;Çúcür4¤ ÿakJEœ:ú<;ìÒÁŸ<¸‘ç lÏN¯D7…“á~ìGOüB!ƇVì ìNì(X7‹üš‡Â­Ø§XKXÎ…\éó*g½®ñ-5‰Ï ÿ¤sv;ÊëFOZžï°‰ØÐ;Ý Aò„:d?âå_qvÏýr4HŸ…âi Náàø¾xñ©ñ¯c›ÆŸ°O¹ÁyPLŸO;ÇúÃ!ùÇF8þ²kpJÈäôùP˜`ü®„¬•<c£ã¦è ÛÃ(˜Œýâ¬!LJ6l:6;Öɹp܆}Þî\¨G}ºoZ[ò6¢ùH|ÞøÉañz™Èߊ}„] …hˆ.Ï  ²7ñÉñ¯Fv4HŸ…åñuQ”ž²p'–/>þ_ìäøsöFðRÅ©õ†ÔÏsq®2NMþç£åÙ˜êÜNZŸßc½œò -9U˜¨<³°g°›° á88¢ý9.…[±)Ø··!¨¿·aŸc·c‡Cú×vôÃa<6 kóÛ¬;}º Wg4>ˆ…ÿ?çÁnŵSw.¬GÁ^çBCêß}ˆéªìÆñâCùÛœÖ{¾7 Wòÿ„݇'[m\yÜŽ†Û•#{ŸÿFØâSúOPR‡€{,šÄ‹ÏœŸv1¡ïçXœ©®õóŽs¬ßÓ/GC:ò¿9’ttEòðÚÊó5Ö/L†»««?Ö_é\¸k¥î\XŽ;½Wu4¼þ¯qvÃ+³Ä‹åopZï¿´öy«o+6 »kÄs4„”¿s„šeoâ“ãßtvϽr4HŸ…âi 8Sáw$£üŋϊÿ;2þkÆ–ð^ÅñûÐχα~ÈPþ="·Î=%îÒÚÊ3 ëöëçUlþ¨?ÖŠoÁ>ÂnƆ5Sw.lÇÂ]ØW÷tDÿ×9LJ+2Ä‹wóQâq꨾‹±·±+awhvæhˆRþ.ΡïC¿HÙ›øònGï[ú,&Ïr¿/8\âÅ燋{œ» .+ mh ý|êë•,_Ò—ÿÍÈA ]Jî%­•6Û?ìøqŸ`Ü‹}ïÝ»S{•þÍ8çøpiÖãƒxñŽ=Ç9L𽋣ŸÝœÊù $rSö&> þhŽé³ÈJ&ré³à|ˆ,ð3âÅç„oÅ&`q·U»Â X‹ßz¥^ôó«s¬ï[2Ög% 6¸ÚËp¼ŠÍÄZÛ›iö6 ›WUìhñË ªþåË/ÆÞÁ®Å†fá\ØN‚°ÂÜ‚j¯Jþ†hŽéS|ù“œ#äŠwéBéÇkùÝ€€MÙ›øZñï:'—=üÎåIŸEãý¯·Œè®/>‡üŒªÞiwƒïü2'Õ…~þpŽõë…]_—Žü?`5¹Î°4u®„^ð”_Rõ¯²ÿ.ÂÞ®Áö–í¢¶ŸÍàdxûÉϹ öŠÎ» —äc|/Þ—?Æ9J<à,.ˆ~öt*çŠL™²7ñµåßwN.»‡ËIŸÅá]G'¢ÄHˆŸC¾»1f^ ;Œ/Ù3¯£úÎuŽõ½+v,³’ÿ¬‰Œ?ûÃOÁ÷hª-ÄÞÄ®Æöι°9œ “°Ÿ+º¡Ú«jÞ}péâÜŒâÅW>‡9GŒ)u8_×u4È~Ä'Ê» »d–> Å—®0¬-ÂݘâÅ× ÿ5¶KüW!í™먾ÿ:Çúžþ‰³‘ÿŽ˜ÉjøY >³Zäþ²{®†!Ð-õvÙNƒ‡±_=Ëbo5ãÝŽ†‹ò4>ˆ_ sŽ/äh(ˆ~ÜÁ›ok¾Ÿ0ÿsrÙ¤Oñ¸¿³<šC¼ø|ò˰k°®1ß|z¶§˜ª—ú.vŽõ]Ãv,S–ÿ,å·Ù^p5Ì«X’¹¿,Ä^î„ÁY8úÃ0û-ž›Ú«“ü-ÎñatÎÆñâKÿ°¯s$y­ä\Uõ³—S9o…ÝB'{ßIþCç䲋3ôY>^Ìd”¨ ñâóÆOÃv¨*Æþ×àøí\Õw™s¬7¿±>[ù?Ä6Jå…¶ŒÙÎë ŠÓ_`¯bWÀžÐ5uçÂV0ñÞ$¢ñ*Þíh¸0ãƒxñ9PýDq4ÈÞÄ'Çäœ\vž\¤Ïâðè‰ø"ðK°Ë 9æ«ÑZðP„# y¨¯;÷Á2ç5W™Èÿ7v^ü‰þÙÀ\RPûŸ½‚]{@—Ô [ÃYð(ö{À’WãU ü­ÎµàÞµ ô)>WüNÎæãb'ÜâTΛÅN`!>þ㘎é³€ ±©Øé°YXCtíáT¸û±ª–ÐóöuN.ƒ4¹è‘£AOaŸبø/WëÃÔ\NÞ8ÅžYo Ž?±·±G±;°›±›±;°ÉØ«Ø lY×OcÏaÁNY8Âyðö—–°r4èÑ“õÔ¶òÓöƒqØØÒ" MCjyU£´ž„ŸÏœ“Ëš\ôÈÑ §àÏkئñ_·N‚¹9›Â7v ü³õüÌÅžÅFÃNñOýtòc°œS°9²¢ú|nwZ͹Z êÉñÓ;þeÆÃá6lÖÚèCÖ~r4èÉôùÜ9¹l¯ÉEÏjGCk×êü_ñâë—Ÿ‡ÿ¬/¼<‹§_ßÍÒ–%G”=䟟‹=ƒ]ƒ²p. ‚ `*¶Ò¡¦öªk~‚Ó‚ÎéS|nù»Þøh˜ˆ}ë|å®_ý¸ ¯ÔZö&¾Vü4çä2¤Oñ}'´hñâ‰Û0þ:f$Ìó{K_þ­r~æ‘=䟃MÁ·²p.ìÂ3Ø\LíÕHüNk:Û¹é$}ŠÏ–¯Õ± áDxû¹Æ7·£áåöšÊÞÄ'ÄOwN.Û…E4HŸEà‰ì·hŽéç/¾Îø9ØñU]yð†Ïk|Úò»ï›ÛO){H‰ÿ {;¦žp¡ v‚‹àYìïÅ·Ú«Žù;kÁQ }ŠÏ'¿0ë0븂·^õ³˜£Aö&>Qþ g°ÊÑ }š'4"¢ëB¼øÆàŸÆÖ‹¿p9Æ m¨¹ü;9Åû$쬦ì!M~6ö$v.l—…sa¸žÇþ‰pöGíÕüDçZð¬Çh¥Oñ™ðó’íçµGrÕ~pVmõéNÙ›ø„ø/=tÛh9¤ÏÆæñûNsĢŋoH~6vdüõJx¯d¥’²ü»9e{¯d¿Zí› ÿöv6l›ºs¡v…1ð6/xé©öjTþ.çZðL>Å瓟›â2ƒáx›ß1cæZ?:kô"&{Ÿ(ÑÑ }™÷7‚Ö0¿…xñ Ï?ŒõŽ¿R‹*¢ÐS°S°7’AÊåÇÇFÁ6©;ºÀî0^r:Ô^EàÝŽ†‘ÁÉ ¥OñÙò³ÓNVÓ1~†«àmlQŽÇÏaÎZ<ï²”½‰¯9ÿ•³‡nãL)}„§- úKñ➟‰ ¿FÙ¶ý¨Bšòïáš+µo üïØcØ™°u‹ã=à2xû7Â=#j¯‚ð÷„9¤OñùäÏÈÑPúéûà ؇Ø2¿ Å õsPGƒìM|rü×κ5HŸâq;'Z+B Ä‹/¶fü`õ«±%® 5–?b¥Ú7 ~&6 [¥¾î {Âåð*M R´7ñuÄ» §ûåë’>ÅçÿÅiº=SOs³ã±/hjÍÁx{°SÚç¼Á•²7ñ5ç¿qöЭ:Âå¤ÏâòDÏñÐ3'„xñ Ãÿ‚ ¿(Ógj(¿;ò♀;Ô¾Uó¿b“±3 êÎ…n0®„W±…Ñö¬Ô^Eæïàh>ÅçÿÁiºý ¦ÙØcØÈÔ‡âuá¸û>BÎÅ„ôãž÷Ÿ ždoâkÂëì¡[ú…ËIŸEãYí“Xí–hõú*Z]ˆ_(¾»[#þ†ó ØÒ’ÌR É„SŒ'½ µouü/ØCØé°EÎ…!pö¶°ävtµ—øPþ>çZð4>Åç“w¿Æô‡2þWlv"l’îø¼1œ“°_JN)¦ ŸƒC M²7ñ‰òß…õPéS<­NŸDð÷Å‹/"?²+|ãSPCùu ðHûêGí—ÿ›„ ›§î\è{ÃÕØ%ε—ø¸üÿ9ׂ§‚ô)>Ÿ|”TsAå‹Ý… ë¥;no gÂج@ÿ~Íô1¢Aö&>!þ{gÝ¢ÄÑ }–§-ÀåÙ–RR¼øbò˰›±îñ_Çc-a§:«–„ó×'U¤°Rû:øŸ°°S _Î…}`,öV{¶sµ—øNònGÃ)~okÒ§ø<ðÓ¦»D,6k§;ž„óáYìŸ §CMôsˆó×§&¶Þ/~åãv4lp¥‘ôY(žJ?D[@‰­%ùÄ‹/8ÿ5¶KüeÇ^ðCEpAMä9Íù»÷­Zp¨}ù°°“`Ó,²šï ×boc‹KŽE¨½Äׄâh>ÅçÿÄiºƒJN€G,ö!6Ûz¤8È7Á®p)¼‚-ðtF?‡†9doâågDs4HŸEæËN´zÏW8üâÅœ_Š]‹u¹àè w­šþk)Ï™Îpt¢àíûv_z5`?¸{§ãžvõ/ñ‰ð8ׂ'>ÅgËà4Ý¡3å/ÆÞÄ®†=¡kŠƒWc±wJ<ËÕéç0ç=ÉÞÄ'ÊGI×*}œ÷_aø†@8cˆ_X~¶Cü¥Æ~ðsE`|gä9Çùsã‡E Õ^ßc÷a#`£,œ ûÃ8ì]l±ß¦–ú—ø$x·£á$W2HéS|–ü»NÓÝ£äÔO'åY€½„] ;ASº“Âp#öqÉÉÊèòæh½‰O”ÿ1²£Aú,,O«ŸO¢Õ¯” /¾àübìrhŽ#÷ª«–çBçoÝܾ³QÌöú»;ú¦î\è ÂõØ{Ø’’ý%õ/ñ©ñ“œkÁAúŸOþ-§éîÕÑP[yþƦ`çÁ¶éNkÃap;öeäù:ô¶)Ù›øDy·£aSo¸œôYLž6?·D£"è_Å‹ÿ1¶MüµÅpø½âB*äãü•q~Ù§»½¾ÁîÁŽƒ Sw.ô‚apö>¶´Ä—¤þ">>ÔÑ }ŠÏ'ÿšÓt÷…¤å™…=Šžú­CëÃqp/öCE˜C©„GƼÖZö&¾¶üÏκ‰7¢Aú,&_š ²¹Ì-QyU¦÷âÅ‹÷<‹°Ñ8Ç]¿OxÌ»×]…Ä–úh[ýE|füCÎÁá>Åç“Éiºû—D4¤ Ï/Øý؈Ô#ã6…S°‡°ß*"Ü OøEFÈÞÄ×w;6®H$}/k)óRå“/^|ÿ.¶EüÅÄÑðgÉÞE\y®q÷Wx“A6’þ¿Ä&bGÃú©;Ö‚ƒáfì£vç‚ì_|ù‡ƒÃñ }ŠÏ'ÿœÓtò¦ISþo°;±#at'­a<‰ÍÆZi:*‚£Aö&>9þWgÝhU•> Ífr¸+Ä‹ïæçc£ªŠ–œµ1TžëÃý%žK†ê[ÿ­Ø—ØØÑ°^êÎ…µá¸û¤$w—ì_|žùÉaŽéS|>ù)NÓ=Ô;¯e5}ŽÝ‚ ‡5ÓŒv€-Àã^÷·ìM|Íùßœ=´oE¸œôY@¿(ˆæVïŸ+C&ċʿ†mõp"Ìñ D’ççp7Ä´îôÙ‚MÃ&`G¤¾ƒô†CáVìSš–•4ì_|]ðnGÃqƒƒô)>'ü“NÓ=r%ÿRìš®Ãö…îdÿy “½‰O”w;6¬È4,}§ô›Ai$+âÅ‹Äÿƒ;i}á…ŠË/ÝòÜîü•³=I³êCŸ-ØçØxìè“ú­·aŸc-^ç‚ì_|}ñ8‡c˯·”>Åç…ÔiºÇ”¤šË›ü ±×±+`Oè’‘£áQ¿k­doâkÈÏtÞ»Ïõ–Ògáx¢E´_\!^¼øPþ¬Š»΀yÞ¬ yîr.ÈFB]è³û½S_–­GÀíØ´Š+ÍeÏâë—,ìmMúŸOþá°<¦uQß±ç±Ñ°cü\Ñt4ÈÞÄ'ÊÏtZôÞˆ鳘|`@u«Ïݘ͎ ñâÅ;ø9Øññ ýàõŠ+ |Ë¿Ï9ÜŸê 1Í•~–aŸ`·`‡fá\XŽ„ Ø4µxstËžÅ7ïv4 Ò§ø|ò÷;M÷$¨»úÎÁžÂΆm’ŸÝ)™Ñdoâ“àwöÐõ;¶¸¤Ïâòûœmþç+âÅ‹Ë?U‘¿ð<˜ïÜšh£i’s¸Q±ó“­~Z°Ûh­ºsa=8 îÀ¾ô:qdŸâ’Â98Ò§ø|ò÷†9Ð뺾3±‡±Ó _23ÝÃ~ËÙ›øò8{èzéZ¥ÏBñå·‡º1Ä‹ßþOìÈø+†þðn@hCij¬™ëg)öv6ÖJݹ°Kœ ²OñáC Ò§ø|ò¦{fÅ`^¿õý»;6¬µ£Aö&>9~–³‡® Rú,_„DD[ ^¼øxüd,î1ƒ‹aQ€71Bvî ê»û»;(õ«¿V:Ž…»±¯"DÊ>Å7*:8HŸâóÉOˆä¸ñô³òþæ#:}–ðáŠ;’doâkËÏvöÐu¼ÙÁ¤Ïbòù$‚¼âÅ‹¯ ?;8þÒa[øØoOþçp0¤Vß%ØØõØ0蕺saC8îÆ¾ v.È>ÅŠâh>Åç¿ÕiºçCcëge£›±ƒ güÙð!g¤ìM|çy·£¡óîdé³ <•Ή6Wú‡fñâÅ×ÿ?,îV3\ ‹½Wd¿èîðË÷VÃú.ÆÞŮǨj=ÔÉÏFp<Ü‹}[~¥ìM¼ø¨ŽéS|Þø¦;Ú'¢¡aõ³”¦w±k±} {´™q’ODƒìM|-ù¿œ=´·']«ôYP§[¢¹Õé·/^|çùŸ±¡ñß®Á´’MûלÃý>Psù—Ðô.v¶?¬‘ºsac÷aßwlÚÈÞÄ‹÷yžr‡G¤Oñ™ðÿsšî˜àטÆÖÏì5š.‡u³äƒž°>Ù›øÚósœ=tíh“‹ôÙØ<¡Q~Ž ñâÅ×’oÁîÀâ¾®w…qØ2¬•¦·œÃýžÁ׀Œö6v-6z¤î\ØN„û±~9®doâÅûòO;‡ÃÂÎUIŸâ³â¯qšîþÙÒÏIÎóÿd²7ñ5ãç†9¤OññV±Îiˆ/>?ÿõ{Wø{Ï9Üïí¤œï³{ »9b³†Ÿ~p2Üýù¶Ù›xñ¥Ïçàphð­Ò§ølù+³ÃX§Ç¹ú9Ù©Ÿû ¯ñIónGÃZÁ Ògqxî«hŽ/!^¼øšð-4ÝŒÅ}Ÿï†³ˆ%ÏBì llœã 5ül§ÀƒØ>ÎÙxññø©Îµà!añçÒ§ø¬øËœ3ÅuXÁõsŠS?ÿWxýˆOšÿÛ9¹¬ Ò§øR#ˆwBC¼xñ ñ_c»ÖôÕ}€_¹¹òØçëØU°wÎ…ÍáT˜„ýuFö#^|¤Ç}%ÍpÿM'éS|öüÅÎYã†;ö©·£á¾ÂëG|Òü?ÎÉ¥W`DƒôY ©I¼øòK±ë°®5zß*`¸_€½†] {A·Ô [Àið0öKøzHö#^|•ü³áwßJŸâóÈ_àœAnœ8Š¢ŸS«t4ÈÞÄ׆Ÿçœ\z®ZyJŸ…æ‰Yœ=zÒ{¦a;Ôè0Âê2çc¯b—Ã`蚺saK8Æ~‹s|T=U?Ï9ׂ¡e€žœ>ç8g“Û ?‰œZ³ˆ=zªyþuN.khrѳÒÑÐârNtü¹¥ââÅ‹Oš_LÓÐܹ×û¾ðv9ì‘…sa+ `3Kê¥ö/>>Š£AúŸCþ,çÌr'VpýœæÔϽ…×ø¤y·£¡G»£Aú,2_ÖÒö&ñâŧÏŒmC=}¶³°G±™˜ÚW¼ø ùçkÁaå›NÒ§ø¼ð§;g™{0éGúŸ!¿€&wžréS|İ8/>c~!vÎ7†¬?ÛÂ(xû#$bSí+^|zü ÎaãÀØÑ­Ò¿ø”ø(·*Y?g8õswáõ#>i~sré®@âi"Ì9QúOÍœâÅ‹OëŸ'çÂ8žÀfErvª}Å‹O›ѹ< $_—ô)>Wü ÎÙg’ß‹t¡ô3Ò©Ÿ» ¯ñIó “K7>Åô–hÎ ñâŧÌÏÇÎÉÔ¹°œOb†åšR{‰Ÿ9ÿ’s-¸pDƒô)>[þXçL4yÕT\ýœéÔÏÄÂëG|Òü"çäÒÕ.'}„¯Œhð?†Qé¨/^|†ükX¿ ÛÃyðM³ýŽ}ª½Ä‹Ï-ÿ²s-¸HŸâóÉ霕ž(§8úž,Sö&>A~±sréiXú,åŽÓæÖ€/‹/>CþoìôÄ< ÛÃù0…¦¿\‘ j/ñâsÍ¿â\ -O .}ŠÏ ˜s’zÚgb*–~Îrví; ¯ñIóKœÉ ›K"¤ÏÂò”ù$Z|ÂÊ[ˆ/>?ü XßÚ9Á0›ãÝ ‘þÅ‹¯SÞíhØ×Ý*}ŠÏ°sÂz¦äEº˜úåÔÏ…×ø¤ù%ÎÉ¥©$\Nú,,¸•ÑâÿýfñâÅ矃P­s¡ v„ álnùºDú/¾îù(ŽéS|ùœ“× %Þðbê'¢£Aö&>!~¦sr1O¸œôYPž2EK×ì½/^|~øžqœ ;ÃEð,ö7&}ŠßÀükεà> }ŠÏ'¿¯s"{Ù“0¨ˆú9Û©ŸÛ ¯ñ‰òŸb›†­6¥Oñ´ø'¼ßi®Œ‹/^|®øõÜ »ÀÅð¼Ç¹ }Šßà|¨£AúŸO~ˆsR{Ãïh@¡ôsNGƒìM|ücXÛZÒ§ø²Fs‹ŸëÂ÷ËâÅ‹Ï?‹¦?±°aíöL<»Á%ðö×¹ }Š_þu§£aHû¦“ô)>oüÎw˜·Ûwì «Ÿsú¹­ðúŸ¿ »2rü¬ô)žÒø‡ÊL’-Þ ñâÅ癟‰½„Í«¸ÝJú/¾h|¨£AúŸO~Wç;Ìû«&¸âê缎ٛøòcÅÉÖâÙâ’>‹ÈSyâÂëŸh®ôXˆ/^¼xñâë‚ÓéhØËÑ }ŠÏ¿£óæ£öw˜ÂêÇíh¸µðú_[þ¬/Þ Ògy´œÁh øñâÅ‹/^|žù×kÁÁ }ŠÏ'?ÐiºŸ^ßXýœæh½‰¯ÿ<¶V/ðx•«Kú,4ïsǩ﹋Õ^ ñâÅ‹/^|½ðw9—ƒëÁdl&&}ŠÏ¿Ót¿(Ù±/¦~ÜŽ†[ ¯ñµâoÁ,²‹¡&`Ò§ø–ÕÉ ·V”Æh ‹‘/^¼xñâÅçŠ?%Úêp'¸ÞÄÜŠ'}ŠO™ßÒi±ß`×Ï…NýÜ\xýˆï<¿;6N Ã:ðZEré³È<-?Ds‹7cd‹ÿ=™âÅ‹/^¼ø:àï³±éS|üfNCý¾ðöév4ܤþ+¾süÏØ 8sÇ@ø¡=8Nú¿úÖ‰À ßk*Ä‹/^¼xñuÁÏÁš¨þ³)œ Ï`{_Z¤ñ)ð›8ó'ïÑ€êgt˜£Aö&¾jþml½8“Å‘0Ï '}ŠoÏÑÐâùàw£¹ /^¼xñâÅç–£ŸfØ®Ç>Å–z÷¬¤ñ ñ8mò·ösà…ÕÏENýÜXxýˆ¯š¿ëg‚¸²äö"éS|é¿â{Åêï{2Ä‹/^¼xñ¹æO£öŸ>0Æ~+9‹+ý‹¯9¿®Óo7¿Âêçb§~®/¼~ÄWÁ/¦éÌ8ÓA/x¦$õ£ô)¾Œ§¥ü.Šæ ¼eþ ñâÅ‹/^|žùMHö3ÆÀë«RHJÿâkÉ¯í´½9ÁyÈ ¢ŸPGƒìM|,þlpœñ ø²ý„Žô)Þ—§2æ¡2"¢,ýƒxñâÅ‹/>çü<ìhlMÒøô€C`<ö]û1]é_|'ù^N“+ÉRPý\â<5®ðú‹ÿ‹å˜>Àëì“>Åûò´ú}9èÄEeŒ„xñâÅ‹/>·üû¤ýÙ΂)Øì’=Uµ—ø¸|w§™ÍïØ.¨~.qêg\áõ#>:ÿÖ=Î ,õf•>ÅûòeG'š+ó=x¿Ù,^¼xñâÅ‹¯þÃ僬âÓCàØÇزòE‰ÚK|ßì´®E%±3ÅÔÏ¥Nýü¯ðú…_†]gTïUä–>Åñøº!âÅ‹/^¼øzá?r:zA·Tœ½áx˜„ýâ}ÿQ{‰âݲ¥žEÔÛÑp]áõ#>”Ÿƒ ‹3ŒozÇIŸâCx|£ ZCJ/^¼xñâÅ×ÿ±ÓÑ0æcS±Q°EZ‘ÛÃ%ð¶ Âé ö¿òKœvÛÒçeÎ^vmId»ìM|%ÿ¶Uœq{wøÝùsÒ¿øJž(.Š–ÀK2Å‹/^¼xñùå?q¾°í¥üØØ¡°v*‡îp0ÜŽ}¼ûªö-&¿Ài·Ý@útG¼_ãwë„ìMüJþ9l­8cõI°p•ëJúƒ'J‰Þ#âÅ‹/^¼øúà?u¾°m_²3\ZÔì ìRØ‘”rÅGç)ýŸÖÈ%Š/^¼xñâóÏGt48ÊŸ=ŒˆõM+…ä`¸ûkOl®ö-?—&‡‘¬Ua·Ô§ÛÑpuù/²7ñMó±câŒÆëÀëN•ô/ÞÍE/Q¼xñâÅ‹ŸOþ3§£a Ä*ÿSìlŸ´RH® ÇÂýØÏÁwõÉ’Ÿå´Û>Á ÅÑç• ²7ñ¥'ãÅL¦ócœ7Lé_¼#¢ÁÅýöî3<ŽêüûøïìÚrÇ 0ƒ1Æ€Á›^ ÆtªC á¡·½ ¦“Ý@À?½8@cš)6ÚUwï½H¶%žöJ[fG;«3£Yíw/..Yúhtæ>çÌÎÜ{ŠÓáðx<LJݿíúÉðÖl9¿T‘'dN—µ„ä6ÒyÒ³2¥ãximÏOpM4¬/ÏK\ûË%NÝ„öV´þE™^^®·GH“³7!â‰ÏÑË=]QÃÀãñx<NÿŽëÛV®l9–çs™Ûdj Éi„t£Ì®R´‡‚ö_¸&È6’ˆç%®]û’ÔÁJ´·böwÊ´ËùkY*â‰o¹Wö Z—h°Sžr™—d.’ÙA®‰ö^I'I(21ýΘöPØþS×v»IJ‚¬Hãy©kˆ.–hoø¸ÌÉ^®¨]¥ÈO¼-¯\FDä8pÇãñx|¨ü{®O#[J>•ç{™Ñ2ÇÉlHÆÁH;K—ɼ&Sî6ÒöS~œk»íŸµÝQ H|ìÙŠå¯yEæbi§ –ÜP%=$óm®·V´· ýX×v»C3 E<¯l&Ñ Ú[±ùïeöór%ÜXzC†xâýóÊ@‘ÌïT:Çãñx|Èý‡®ï›;=´bù'Ê< s‚Ô7¨%$‡J—ȼ*SÖô±í§õý¿]Ÿ¢‡¦î:Qœñ¼Ê5DH´·¢òÈ ðrõÛEšà0–xâmz9%'¢ÙKDñx<ÇŠÿÈõids)´åWæ:™áRÇ –<\æ.™O“2´ŸÖò/º¶Û]1-®x^í¢óf—ÐÞÚ¬B¦«—ËÝ RÜm`<ñÇÛñJKu"ìç;^‘»d—zµ„äpé:™wK²ÓÞ‚ñÿrm·Ã%âyM‰Ú[Ûö“9ÂË­—ô¢Û–ÄoÙ+5÷ÍžŸˆ¦¥+ðx<LJÜìú4²ib|uÁo¹Ì«2—È •¢$6Nù:iù4Ú›Oþ ×v;"}DC1ÆóZ×›2¢öÖý§2ƒ½\ÁKóˆ'>ïp‡‘œ¢Èåˆx<ÇãÃéÝ ý¤6p¾?È<$3Jf“ –ÜIºXzE¦,£Ø´O+þq×v{`ƈ†"ŒçrH4ÐÞÚªA¦——«Ö¯¤É2İO›Áu™†Q•~P<Çãñ¡öŸº>l’:u¢ œïû27Èì+u $éÐU:TºCæ“ìóTiŸyøG\wK9$éãú¢§{¢áœìËXÐÞ Ýß.õ’½ÌaQ≧¬•%-MþÇãñøBñ9$Úf|b2OËœ#³UPKHn!)=©È$Úg ýh×v{xꈆâŒç›K4ÐÞڞɌò¸™Î?’V´%žø€½ÃسäŒE¥SÇãñx|Aøÿ¹~2Ü·iêD[ŽÏ™?Ë!õ $ãÐ^Ú[úƒÌÛ©›VÐ>s÷÷º>E-O÷DÃÙ©#homÀOÙÙË…h€ô×|«zÇ¥b¢N¿™yP<Çãñ¡öŸ¹>lœ‚^$ñ©”yMæ2™ƒZBr}é8éo‰%$iŸ9ú{\Ûí±Y?®/¢x^Ò×y¥½¶Cf#/Wžý¤‰éK?O|Ð^É‹C¦®*ÍøåhÚb’x<ÇãÃìÝ ­ûسãóƒÌ#ŠüFÚ$¨¹;H¿—^R$ž4·‚öìèïtm·'&†ŠswO4œÙ´Œ×Â÷÷É”x¹Ôœ#•'mŽC<ñ­åUå<§"--ÍX[Çãñx|Øý®O#}sÝ‹<žÊüIfDPKHv‘–n“ùÔaínÚs¤J‘Û\ÛíIýý† \ ÝWÈœïåÚÒA²(ñÄ·¦Wæ,‹äEêLŒ¨ã¬ <Çãñáôã]ŸF6LÑ@“,ÒøßÐÌS´hŸî¹˜ß&–±àzX þ=™Í½\@v•¾jÚÆ’xâCáU™>Î!꺪dÇãñx|¡ø/]ŸFÖ—ˆg³¾Ræu™Ëev•Ú’tè-+sŸÌWIŸKUüÿàÚnÏMÑPŒí³¹Dƒ¡ÿ®\¦«—+Æ()Ö”e žø°x9 p˜€ÑÈðx<ÇŠÏ-Ñ@k]”h·ÅÜ>ojn úoÁùI2‡{É2ô–Ƥ~˜L<ñ¡òJûe—ùië=àñx<¹ŸàzÛÚÛi<âéÕÇdž—9_fpPÃ6•N“—ù!éÃ̶ÿ‹]Oÿ’u©–¢nŸ·¸víS%úoaùOñtÙNú,i£\≡W挋´¤E¥ÃP=<Çãñà¿r}é•>u‚x¶ÔOù«ÌÑÒúA-!¹»t•ÌKH¶x^èzÖ—'δ˜Û›{¢á”ŒAôß0ûçezzéø¿’&·¡þŽo«Þù#iÞ…ó>x<ÇãÃï¿v}é)OŸ|…̹Rf7©} I‡^Ò¯eî•ù2cñù‚‹çï\Ïôš¤]9ж½ÝêÚµONì:A ¿¿M&šs77Ò´|x9æ$*3þ™ñ#<Çãña÷ߺ>ôH¬ÞO<}õ?)ò¸Ì©ÒfAÍ­ØV:_z^&–1™¶ ây¶ëÙ]—eDCQµ·Û\»öIN#èaó1™½ôënÒ?eˆ'¾P¼2¦Ud]721éÇãñx|ax÷DC÷¤ãˆg0þc™[dº’qè$ Ý,3.}M¯PÇótדúSÖ!EÔÞnÏ!Ñ@ ³Ÿ 3ÌK_ÞBú iQ≿WêÊ ÑlÓ0*fhàñx<³ÿÎõid½¤=‰gÀ>.ó‚ÌÒvA sè'"=¦È٧݆$>§º¶Û[RG4gûqO4ŒJíÚôǰù±2}¼tÞý¥‰M+¿O|axe[æ¡*}‹hfÇãñx|˜ýD×§‘nKÓÏVñ_ÉÜ+sLPKHF¥]¥+dÞP$m ÉÄg”kùoO*sѶŸ;rH4пÂéÿ*Sâ¥Ãž+•'FñO|y5›™¨t^gÇãñx|Øý÷Џ'ˆgØüÿÉ\-³GPKHö”Ž’þ"3>i˜@«Ççx×2ÿ9cDC¶Ÿ;¼Œh …Ä—Éœç¥{v”F'-Ê@<ñ…åUé:|®1]‘ËÑñx<LJÊïú4Ò5·§âÙ*~’"—ù­´yPs+KçIÏÊüìô$d|Žqm·MŒ!/æös§kˆNL]ç•þ?Q‘}¼ôǾÒÿeÏ©O|ø½2óÙ~93]Çãñx<>Ìþ×§‘.ñ,ÿ‰Ì­2I]É8t”ö—n”ù é‘>Èó=ÒµxË(U¶Ÿ»\»ö ‰Dý+$þ]™þ^úà®ÒW© 5â‰/8ßøQF®9 <Çãñ…ât:ÑÙaDñ µË¼(ó{i{¹>hÚ{õ•N’‘™˜ÓŒvÎ÷p×"=˜åcÞ¢jv­ÿã%úKxüã2žv™ùËØÆ’xâ ÎËõw¢ÍÇãñx|xýO®O#RG4ÏÂòßÈÜ/s¬´aPKHî"].óš"åN :X<߃\KòHú3X1¶‡»]»öq)¹úK«ù ™+½¤Û%­uJ<ñ…îƒLúgÔ1QÇãñx<>ü~²ëˆ†ŽñlþM™keö’JI:ô~%Ý-óź‡"Ëç;Òõ¯?žºSFq¶‡{\_MÏ!Ò_ZÁORäP/ݪ·4&µCO|A{å0 ÂmàÇãñøÐúÉ®O#²/I< ÔO’yBæti@PKHn-#=º„d Ïw_׿ø¤ó¨òâjÍ% ý¥uýÇ2ÛxéGC¤ÿ¥×ñĶ—KZ"{öÇãñx|øŸ]ŸFJ$âÙ†ý§2·Ë"u $ãÐAÚOºAæ}§Oe=•o×?ôt‹ßü_\»ö1í¿ýs2=¼ô£¤ÉYíˆ'¾P½Ëbî;gâñx<»ÿÙuêDIN‹AÏ‚÷e2/É\$íà’£¤‡d&º>kùww=øóÙ (žúý«kMþZ¢ý·–¿Y&šsO1Ò•´g|õrú±K#ŠÇãñx<¾P|n#ˆgùoeFË/õ $㑆I—ʼš²„d3åßÙõ˜cšÿÀ­í×o‰ÚоTæ/½£›ô¤ ñÄ·U¯ŠÔïV¸¥%ÒÇãñøPûR×§‘öIS'ˆgú·eþ ³OPKHv——~R¤ÙòïèzœËP¿÷ºví£R+Ñþƒð_Ê õÒ¶>Ldˆ'¾Mzå6."êqÇãñøÖ÷1×§‘vñÄW*2YæI™3eú?¥"—ò q=ÈëÍŒŒ(Šú½/§Dí? ÿªŒ§!B#¥ï›yNüñ…íÝï0¢®ù <Çãñ¡öq×§‘hb|5ñÄ7~ý?™;d“Öó!Ñ0J&—ò¸/×ÿfƯa}ÝïÚµLMèÐþ}õ÷Èxô;©Üm]âo#>Ç;ŒFÅãñx<_(>ÞÜÚ¿•þ%ós®wÄ¿ˆ|™ÌË2K;ÉuMQ/¯‡š6Œp+Ï ×ƒ¼“uDCÕ×ß\»ö¯œG4Ðþ-û¸Ì9^ÚGéuÓ%ˆ'¾íû´lM¨"ë(<Çãñ…áËsÛd “tˆôg™/3n‚‰'¾RÑïd9QÚ¨e CNLù 7ky¸çƒ$Y´õåžh8B¢=ûí¿“ÙÇ㼡7skÿÄß6üÚËP45-Ñ„’޵îwðx<ÇНð¾›áŽÒe2ÿ—úÉ3ñÄ7úwe®“.uðØ´†%MÕq/Ϧ®Çù(eDC‘Ö×èæ ´g_ý;Šlæ¥ñï&}´ô#ñăWsc!²­3‰Çãñx<¾|ÞŸ?÷‘N–þ!3Éa^=ñÇG~–ù—ÌÙÒ ÜZÔ¥Sœß×õ8Ÿ&},\´ñwO4žX£öì‡T¦³—kéÉRÌyQâ‰oË^N¿“¹1fÔñÐx<ÇãCî[>¯¾D)Ý.óY–[ âÿLæ.™Ã¥îÙÒ«9·Ÿ ]äçMÃmŠ7þ6Ÿh }Ú÷2—{&Ö^º#1xâ‹Í¯XÕø­Š¤ÿgüNSºÇãñx|Ax»»l+]$óšL… ñÇgúr™W¹DfXê’Ý¥r™ßÛµNhšT¼ñwO4*Ñ>­ûdñrµì-½ìð F<ñÅâóÑŠ,C#*Ó']àñx</oäË«·t‚ôˆ"ß§.oFüñ`¢Ìƒ2£¤¾©Ÿ±7{üî®mï[§©Åÿ‡šO4Ð>múe¶ör…Ü^úl]fxâ‹Ô«"cÉä%*† áñx</¿©ü}µ—†K7Ê$/ÑGüñiþ§¦‡®æ}×&÷}Êhš"çC»NÐ>­øgéáåªx´Ìd®‡ø¢÷rÊI¤ ~¨Ì2:Çãñx|Aø·e®”&Ÿ“[IçKcdÊÒ?¡¾ð¼û~“’rEÏG\{óÁíÍ–¿Q&÷5u#ÒÕ´O<^‘JE›vÙM¸”,EEÊ,8‡ïãñx</ÿµÌÝ2‡I]}Î8t—~-= ó]âc=âÏÝ·sm]±ŒOÕŠ0žî#’ho-÷“eŽórÝë&=¹néGâ‰ÇGTá–®ˆ¤®úͲO&ÇãñøBò¥2O+r†´™Ï‡¨´‡tÌMK¯|3Þ}èMYb׉bŽç£®ë¼Ô´$í-O?^‘¼\ëJ¥ìL<ñÅ’äºTDæw2þ Çãñø¶àß—¹VfW)êsÒasél™çdb2ÄŸÍ—¹~Vo$âY©È£®Q:P¢½µÄ¿ÚÜ«i¯R—!žxüÚDCÊ/g,ê6X"ŠÇãñx<¾Múïdî“9RêîsÆ¡›t„ôW™¯âoüæd×GèöM»Wu<wÑp@"J´·<ü=2%^.hÈT¤&O‰'ß8u¢)‘„’ÇB¤ Àãñx<ßf}\æ™s¤-|Î8iéj™·˧üO®ÐŸÕy<wMÇŒlÑ@{óàã2g{Y3·“ô`Ê¡ˆ'Ÿ4¢¡Âá’ç]8.ö€Çãñx<¾(üe®—ÙKjïsÒ¡¯ô[™§d~nšçLü‹ÑOt}Òë–˜:Qäñü»k”öOì:A{ËÝ«È^^.Y›Ho¦,vK<ñøŒ]'2sÿÌÌgàñx</ÿ½Ìƒ2ÇÊôö9ãÐI:DºKf|FÆú*ÿ눆‰e‹<žÿh.Ñ@{óäß’ÙÔËejé«Ä¢ ÄwôÊLNTfl”ºž$Çãñøâõe2¯(r¡Ì6òýµƒt¹Ìšv¬ þmßéú½¾D<+yÂ5J##ho¹ø‡e:{¹."Å“² ÄwôÊ\×Á1i‘¶¼$Çãñxü§27Ëì'•øœqè#$ýCæ§u«9ÿ6ë?s}„î“1¢¡8ãé>¢a¿ô•,hoξ\æR/‹2´—îLI1O<>«WƈtÔ¸_EÚwðx<Çã×þ7IæQ™Q2úœqè í/Ý*óY–R_…î?v}ðë»nDC±ÇóŸ®Lök÷A{ËêTä`/Ÿõ¥WÒ÷ù#žx|V¯Š,KJfËRàñx<Ç»ø×e.–†ø?±b[é"éÕ¦=2‰[ð¹&ú§¬>P¼ñü§k”öMIÇÐÞü8™­¼\m¶—>OÚ‡xâñÍz9‚H_ã!sÈÇãñx¼»ÿR‘;d:ùœqè-/=,ó}êÄiê«ý{®Ð[4mÜXÔñ|Ò5JÃS'˜ÐÞÒ~ô´Lw/W˜_K?g„xâñî^™ßÊöËIË<àñx<Ççê–yBæT™¾>gÚKÃ¥eþ›È8ÿ‚óo¹>Bo•x„.òx>å¥}R£D{KþÑŸd"9_R"ÒµIëÂO<>w/—œ„ãAñx<ÇãóöoÊ\!3T^V`Ëë5H:_#wJ:P_¡õÿqmƒS—9,ÚxþË5J{;-I{ûY‘c½\CÖ“þ•˜™E<ñx¯^Ù.ó‚̹Ò>gŒ´‹tµÌÛNË¿Q_ù<–9,Âx明)æööµÌž^®ý¤·šú>ýo©w¼XGS-š9Çãñx<>`?Næz™½¤ö>'úJ¿•yJf²ÛTUêËÿ×Gèý7y<ŸsѰ{Óˆ†"Ï[ŠôóÒå÷”¾–¡?âñ½¼$-¢“x<Çãñöý÷2Ê+õö9ãÐI:XºKf|â!„øûíw}„)Ï EžwMÇì–}׉bˆÏC2¼tóÓ¤XúXú#ßR/§CD+²"‚Çãñx<_&ó²ÌÒÖòýµƒt©ÌRH¨/ûþ!×GèCRÖh(Þx¾à¥]×h(ºø”Ë\ìeQ†é.‡ý·à•ó/ä²Ú$Çãñx|ëøOen–ÙO*ñ9ãÐG:Iú»ÌOëQˆ¿M?ÚõAñðôIEÏöæ(ºø|/s —޼ôJÓH%ú#oÙgæ;£®GŒâñx<LJÙÿ$ó˜"'Júœqè í/Ý*ó¿ôŒõ•¿¿Ïõú(‰xV(2&§DCÅç#™A(}žõ‰þˆÇ[ðÊ6"¢Ü-QÇãñx<_~¬ÌÅ2CüŸX±­t‘ôªLyú¦Ô—7ë#ô1©Am<Ý ;'F4I|þ%³ž—ÞzŒ4Y†þˆÇûêSòåÎ(šå;x<Çãñ…áÇ+r‡ÌR'Ÿ3½¥ã¥‡e¾O¿9£¾ròwº>B/Ï EƸ.™¹sÓˆ†¶Ÿëd"9wψt­ó2+ôG<Þ²——)‘Ìcáñx<ÇŸ,ó„"§H}}Î8´—ö‘n”ù¯Ãê+«¿Õ5ÑpRÆ®ÅÏ—\£4,ë m*>“ùµ—.Ù]z:½3Òñx¿¼’GA”g]ã!šœŸÀãñx<oþM™+d†ÊË:õy½I¿“#OYÍúrð7¹ÖÆ©2´ç E_vÒÐô%3Û`|þ'³½Ç>ø‘ ý ÌË)±Vdþr4c)<Çãñø‚÷_ÉÜ-s¨ÔÕçŒCwéhé~™ïš¦ˆÿ½ë#ôMÐEÝž_qÒNRÛŽÏË2ë{éwI?d<&q=Äã}õʶŒdyFÆ¢"ëwðx<ÇãÛ‚ÿYæi™3dúûœqˆJ{H”ù cŒC‘××\¡ÏNP´íùß®QÚ1±FC›ŒÏ]2í½ôµ‹šÖõ áñÁyexÈ<\òðx<Çã‹Á¿+s­Ì®RÔç¤ÃæÒYÒ³2¥YæUü¯r}„>ÏaãÆblŸ¯ºFi§tLˆOLæt/óœ:K§–ëœWÚ2’Ùçc4—Àãñx</ÿ"÷É%u÷9ãÐM:Bæ¯2Ê0þ—¹>I^˜º+aѶÏ×\£´½óˆ†ÂŽÏ×2{xéM›Jo5îæú†ÇíÕ˜“hœe‘œ¥hü~Z¢Çãñx<¾Ø|Læy™seúœq0Ò0é*™·ÏÕÅÿ‹]#s± í³Ù ÛKmì|ÿOf/=hO雌Z¹¾áñAz9N¨È²SE4Û'<Çãñø¢òÿUäz™½¤ö>'úJ§IO)29ë0‡6ÿ ]£qyÓö„EÝ>_S¤¹ mç|”éä¥Ëœ.ųN,çú†Çä›Ö¤müÆèˆ¦t`EªÄãñx</r?QæA™c¥^>g:IKwÉŒoÚ¥¯ Æó<× \•8÷"oŸc]G4 IZþ° Ï·\‘‹¼ô‘éωT×+<¾u½œVnˆ: ~H™ƒÇãñx<Oöq™W¹@ÚZ¾¿v.•y=cÇŠ6ϳ\Oüë¦N{{{ÝuDÃv‰ }¾ßËà¥Sl(½²n9U®Wx|ë{%ý8%}˜¶Œdj~Çãñx<ŸÕ"s‹Ì~R‰Ï‡>Òo¤Çe~Jݱ¢pãé¾­Àõ2´· E^wÒ¶R¡Ÿï‡2[zé;JŸ'åݸ^áñ­î•1""mÅÈ´Å$#x<Çãñøý2ÉŒ’6ô9ãÐAÚ_ºUæÓ¤‰…ÏS\Oó¦”5Š·½½ášh¼nDC¡žïS2ëyiüÇI“S¸þàñ­ï嘓H[L²Ü)ŸÇãñx<ÏÝ•¹Xf{ÿ'V –.’þøð¿°âù×GèÛ’Öh(æöö®QÚF*Üóý£L$禑®Kjç\ðøðxelY‘²¤¤Ó¶™x<Çãñøüý2wÈ(uò9ãÐK:^zX‘ï3nCŸã]Ï讦IøEÝÞÞtM4l-âùN’9ÚKóî.=M{ÀãÃêÓfp¥¤%Òæ]8ÍÐÀãñx<Ççé'+ò„Ì)R_Ÿ3í¥}¤?Éü7£a‹Ï1®'rOê®EÛ~ÜG4l•Øu¢€Î÷Sƒ}IãÖ­ J{ÀãÃè•6Â!iÒE45]Í<(Çãñx<ÞŠK‘Ëe†Êõ ÒÆkô;™e⩟J…$>¿r-ü½‰O°‹¼ý¼åºëÄÖRaï™Þ^ÚðÁÒù¹žàñ!òé»ì–;/#é0FÇãñx<oÝ%s·Ì¡RWŸ3Ý¥£¥¿É|›Ø±" ñ9Ì5Ó2Z†öS®È[®Q”4¢!üç{‡L{/íöb™²Ä\OðøÐz‡¥bRŒf.Çãñx<÷Ûÿ,ó´Ì™RŸ3Qié2ï§®«×*ñ9ص¨§³hÛO³‰†‚8ßR™Ó¼4ÔÎÒÃY–~äz‚LJͫÜiÔ\Æø‡Hêx <Çãñx|pþ]™kev“¢>'6—Î’yF¦Ôé¶2€óéZ¼Ç“6ï,æöð¶k¢aËD¢!Ìçû•Ìî^ZæfÒ[I‹2p}ÀãCîÕ¸,dÚœŠÌ¦-#‰Çãñx<Ø'sŸÌQ2Ý}Î8t“—ù‹Ì„Ôg{¿Ïw_×R=‘ºFCѶ‡w\ ¥—ÿ?2ž@ÝKú&ýñ†ëj/ÇåûdºÀãñx<Çéc2ÏËœ# ô9ã`¤¥+eÞJyÈ÷ë|÷r-ÌSIe(æöðžk¢a )Ìå-ÓÑK ^÷¡w±××]kf©Ë›L{/mà’¤:¥?âñmƧÍàr™†áø#<Çãñx|›õ_)r·ÌaRWŸ3Ý¥£¥ûe6peŸe=©âª/÷DC_©UÊÿ³"§x©ô.Ò#)Ó%èx|ÛñrÌ –§ hƯáñx<Çã‹Èÿ,ó´"gÈôWk¾Æ§|ú]¼õõ±ë®‰DC åÿRfW/UÙ_zÇùRêo >ó2ä<#ûŸÁãñx<Ç‘Wæ™Ý¤hà‰†¯S?/ÚúúÄuDÃÆYÖhð¯å;ãdnÙKjïsÆ¡¯tšôO™InI‡¶ÿÿ¹&úH”ç;EFx©¯>Ò«éKlÐ_ðø6뛦N”e½F;þÇãñx<Ïê'Ê<(s¬L/Ÿ3¤ƒ¤;d¾ÈßVãÿ™k¢aC§5ì–ç}™-<ŽCù"uKú ß¶}òb)‡ÈøåhÆ <Çãñx<¾Wäe™ ¥müŸX±½t©Ìëë2m6þŸ»&6HŒhð©>gJ¤Ò-2Ÿ¦<ñv<¿P¤¹Dƒýòü$ó+/‘ï)=ë°ô#í/ ¯TÔHS¾.sú3x<Çãñx|ËýX™‹e†ø?±b°t¡ôŠL™LAÇs¼ëˆ†ÞM#¬•ç™í¼„z鿉O>iÿx|zeÉU$''²íiÇãñx<Ç[óïH¤¨ÿ‡^ÒqÒCŠLÌX?² âù¥ëˆ†^ëF4X+Ï Wô'¶”Γ^T$Ö´iEHã3Á5=#ZXžŸeNòõ.ÒcIO ´g<¾˜}Ú ®hc"íŸk¿Î˜¡Çãñx<Çá'(r·Ìa÷VÌãÕ]:Jº_曤MCŸ¯\Ÿÿ{$F4´¤<ãevñ´þÒ;M¡=ãñÅîÓfp¥§(ÊÒ~ˆâñx<Çãñ­èVäi™3dúûœqˆJ»K×ʼŸ”qC|¾vM4t—Zxü×e.ó²"HÛÈ÷×öÒ%2c“Æ8Ø:_÷ ]¤Ü…Œñ² ÇMpÐÞðx|V¯Æ´DÚNŽ31Ê“0Çãñx<_¸þ™›eö“J|Î8ô‘FIÊü²tbþåÿÞu1ÈÎ)»Nd=þ2‡{9‹žÒ³–ÊÇãÛ¼oÜu"mÑH‡eÒÆHàñx<ÇãñmÀÿ ó˜"£dúøœq(‘FH7Ë|šeYµËÿ½ëˆ†NëÖhp;þ'Šlë¥äƒ¥Ó0h?x<>«WÚú ™ Çå%ñx<Çãñø¶çÇ*r‰Ìÿ'V –.”^Q$ž´iEŽåwO4tÌÑöÅsת8Lú1e/OÚoÆËñÇeN K—Ãáñx<ÇãñmÉ.s‡ÌR'Ÿ3½¤ãdRä;§Ý"Ëÿ£ëÔ‰Ž‹A&ŸïM2í¼láyyÊæ´<Ÿ“Ws+I¦Lº(k~åI<Çãñx<¾íøI2OÈœ"õõ9ãÐ^Ú[ºAfœÓÍ}rùtÑÐAr<ßÉ2£¼”§«ôXJ–ö€ÇãsõrÙ¦¢ÌaËŠ(Çãñx<_œþÿd®&Ÿ“[JçJ/ÈÄœæHOrÑP’±FC¹¢ãevöR€Í¥w3þ4íÇçèå˜~(Kß×qhÇãñx<_Œ~‚"wË&ÓÕçŒCwé(é>™o’üäšè(‘ÒÊ?Vf#/t¸ôóLlÚÏÉËñÊ-Ë‘¹öÇãñx<_Ì~²"OËœ!ÓßçŒCTÚMºVæ=E&¹&Ú7hXWæ¡^þй2±ÄjÔ/ÏÏË1'‘ñ ™ù <Çãñx<ßôÍwe®•ÙMŠúœtØÌõ§í2F4|œÛ6¤{»KP¿x<¾%^Ù¦U4게&ñx<Çãñx|6ÿÌý2GIÝÕ ¯¨”Yþçqßlbci¬ õ‹Çã­x•e¬ëà2 #íèx<Çãñx<>›/•y^æ\™-L4D’F4$—ç¦ì.v–Æ'Æ2P¿x<¾å^ÖLü?ê4LÇãñx<Ç7ã?’¹^fo©} ‰ÇòŒrÊ5Œ’™,C}áñx‹~m¾3š6¢ÌùŸMC&ðx<Çãñx|þ;™dŽÍmÝ„<^f݈‡òLNÝä²tSÓ¢ Ô·æ•–{H‘ñ <Çãñx<ßr“yY‘ e¶±kp)ÏøÄV—½¤çœ†CS_x<¾å^eûRD³(sÞÇÇãñx<Ççï?Qäf™ý¤‰÷òŒ•&},Cüñx¼O~íe(ê>("5oÇãñx<Çã}ñ?È<ªÈ(™>-J4O<ßš^Ù0Ÿ6¢!Zî±püÇãñx<ÇêRä ™S¤¾®‰†Òô ÄÇê³n~ã”ÀpßÜÇãñx<Çäß”¹Bf¨d2 ?;< O<œWƘ‡¦lDÜ!EÁãñx<Çãñáñ_*rÌa2]‰†ÉëF4<ß:^YVwÈ–®ˆâñx<ÇãñøúÉ2O+ræº ÄÇ·šW<5ýW¤ñÿŽc!ðx<Çãñx<Çã³y%‚p\4Òq Çãñx<Çãñx¼ƒ—ãú ñô_HÉOàñx<Çãñx<Ç;úµk4¤ý‚ü‹xêOñx<Çãñx<Çã3½2×uÈœ†w˜Çãñx<Çãñx<Ÿî›ƒŒ§/äà0Ñ"Ùàñx<Çãñx<ǧyeîQoš}‘öÏHÆ&x<Çãñx<ÇãñM@NK;8o’Ù8ïÇãñx<Çãñx<ÞÑ+5?ÍLW¸<Çãñx<Çãñø¦*c¡ÈhY*ÍòM<Çãñx<Çãñøt¯xÆ2’IÿlJHdä0ðx<Çãñx<ÇãÓ½’“I;U8ÌLjg$-ðx<Çãñx<Ç㓽Ó޳,â«Jâñx<Çãñx<ÇgóЧO±pØ»ÂqŒÇãñx<Çãñx|š—cŠÂ)iá–ÒÀãñx<Çãñx<oJ4$uhÔ.[Vàñx<Çãñx<Çgúô©I(s†ÃÐ<Çãñx<Çãñø¦ N‹:D‡@8NÆÀãñx<Çãñx<OÙuÂqN…㔌l34ðx<Çãñx<Çã×­ÑøwÖtEÚ” <Çãñx<ÇãñxG¯xƺŽI‹¤áñx<Çãñx<Ç;{ųìZј–pÌ[àñx<Çãñx<Çgz%ëxjZ"#K‘~t<Çãñx<Çãñød¯ŒQɢދ@àñx<Çãñx<Ç;ze~Ëé—¿Åãñx<Çãñx<ÏæµöÇ™£ œ2M‡Ããñx<Çãñx<ÏôʶŒdÚï77@Çãñx<Çãñx<>’¼dúÔ‹ÔceŠÀãñx<Çãñx<OñJ[25K‘¾7fæ÷ñx<Çãñx<ÇãË’§N”9ÿZrÒ"eù<Çãñx<ÇãñxG¯¸sŠÂåèx<Çãñx<ÇãñÎ^¿§Î¯ˆg,)‰Çãñx<Çãñx<ï蕤Ó̶§Çãñx<Çãñx¼³Wöñ™C ¢q·ñx<Çãñx<Çã‹Ý+KN"’ñOÇáñx<Çãñx<ǧ¯Ñm.]¥üÇãñx<Çãñx<ÞÁËi]‡H\‘Xz¢Âñ <Çãñx<Çãñø¨ó 1çéÑŒ_Ããñx<Çãñx<wðjn‡fŽÇãñx<Çãñx<iL4DGAÄ2iGŒàñx<Çãñx<Çgór:Dã?#YþÇãñx<Çãñx¼Ã?•ºPd$Íø&Çãñx<Çãñx|ºW,eIçßL^aÇãñx<Çãñx<>›WÚÞ˜?Ž¥¯úÍXõÇãñx<Çãñx<>Å«1'‘zˆhÚ÷Ó&càñx<Çãñx<Çgze „pÞ¬"æðx<Çãñx<Çã“ÿ©,)ŠÌµ%Š©¯èÛoÖ™g­ýofêÿg¦~?ù‹€ýÌÓϘ>ê7ÓŽ¯ä)Öþr,uÅÈX–©ø0û©üK[yÕ×Ö®øì³wßS³ÇžÔ/Çãñx|³¾rà–¶îĈ'ÏÃg.™â2“Ä„ŸÖ† ɯUUUóKzÇ¡´<ÇãñølÞîˆâ‰Çã½z9æ$bßLžn¿/Ü©9¾–½óNÍÐix<Çãñ™Þîˆâ‰Çã½ze™e‘þXÆ |˜ýÔ6:¢!e5‡††%/¾X5hkÚÇãñx|òO}X£øãñx^‰¬CúÍ}µoó#šÒ «W/|ôÑŠ¾ýhx<ÇãñþŒh þx<Þ›WÚÇ,Eòø‚ðÅ“hX·`äŠóïús¼Ûz´<Çãñx?ƒ$þx<>w¯X–Uÿ™ù>œ¾¦Nd¾jø¡b³þ´<ÇãñEî-&ˆ'ÏÃ+æ4æ!–²IfÚNøðÅ™høå—_VÏœY½ën´<ÇãñÅì-®Ñ@<ñx|^™ßÊ\12K¢^_´‰†µÓ(¦{íÇãñx|Ñzß¶·$þx<>'¯´œ„ 5}»/æDÃÚ )æ\s-íÇãñx|qzƒ$þx<ÞƒWÒ˜‡äqé¿ßx|Aø"O4¬}-úû?â†ö€Çãñx<¾è¼ÕDñÄãñž½2÷¢ˆ9, é0(f_l»Nd{͹êjÚÇãñøbó•¶§N<ïÉ+-'‘š¥H?\æ÷ñáôŒhX7‡bõêš=ö¤=àñx</*ïÈâÇã=xe HNNd~Á„'ÑÐøZU]]Ö³íÇãñx|ñxÛ»N<ïÍ+î4ÝÂé;Y—À‡ÐOeêDÒk騱´<ÇãñÅãíŽh žx<Þ«WÆ/GSuÈ\þ_žDCÚkö%—Ò~ðx<lj·½½%ñÇãñÞ¼’&W8®é0%~ÏÔ‰ôÅêꪷ۞öƒÇãñx<¾¼Ýí-‰'÷ê“×hH)‡H[ì~O¢!óµøé§i?x<Çã‹ÁWÚ\£xâñxÏ^N¿I›wá8fÏÔ ‡A «VUlÒöƒÇãñx<¾Íû²^½çÝr˼[n™wË­ÿÏöMçO<Ÿ‡—Óø‡ÌM,Ò~„»·>¢aÑSOÍ8õ´ÌÿfæöÍ™gŸ3çêkæß}Ï¢'þ¹ôõ×W|öY],¶fÞ¼†úú s óÿügÚÇãñx<Çûꕺ\dZZÂå |¨½õ ³~‘/åD«¶ÝnÖ…¿_òÒK«gÏö;ѰfÑ¢x·õh?x<Çãñx<ïŸWÚ.ŽYŠŒõ$ña÷Ó|L4øXþ©ºü£üÝ~â²Ëi?x<Çãñx<ïŸWÆ×yQ|AxëS'fýþ¢ÀÊ_³ûžËÞ}×§DêêêX»ÚÇãñx<Çûä•EG³,2Á„÷gêD€çk¢ónº©¡¡Á\Ô‘Ò~ðx<Çãñx<Þ'/Ç„Dióã%ð¡öþŒhú|§s\ýÒ¥Ö ón¾…öƒÇãñx<Çãñ>y¹Šˆ:í`/ïÛÔ‰ Ïwê!‡Y×°|Ü8ÚÇãñx<ÇûäUšHK”fÿÍҦ߉â Âû¹FCÐç»àÞ{ížKýб’´<Çãñx<÷ç-ÙôãR§µ%3“øpz?×hü|K:®üî;»§S³÷pÚÇãñx<ÇûáÕ8Ý¢4Ë4ŒÒ”Fñá§ø6¢¡UηfŸávOgÎþHûÁãñx<Çãñx?¼²¬$éüEò |˜½¯S'Zå|WUVZ•[lY½ãN5ûì;eÄÈê]w«¼]E¿Íâ]»q}³ëã»–oÖ¿zè°)#FVï8´¼o¿X$¢ò—t,ëÕ»¢ÿ€ª!;Ôì±ç”‘Öì=¼zØÎUÛ©0°|£Ëº÷,¶£~›ñkûÔÀAÕÃv™²ßˆš}ö­ÞiXåÀ-Ë7Ü(i×êåw]¯¢ßfUC¶¯Ùgß)Ã÷«Ú~‡ŠMûÇ»u§ÿ:³¦ÚÜyÊ~û×ì3¼z§¡•9ÖfðåuíVÑoÓª!;8Ö&ý1Œ¾¤CùÆ›Tn=¸f·=¦Œ< fŸ}«wÞµjÛí*6ߢ¬{Oî7h?x?¼“¥)4├HIZàÃìý˜:Ѻç;ï¶Û,žÎêY³ ¨~Ëûn2ýÄQ F^ùí·õ+WfžÎšE‹–¾ýö¬ßßZå/ïÛoúñ'Ì»ù–ÅÏ<»üÿ[=}z³Kx6¬ZUWV¶ì½÷>öØœk®ràAñnÝÛvÿ-ßp£'<ïÎ;—Ž[‹5¬^íÖDgÌXþÑG ytÖVn¹×7¯¾,ç^dù˺÷¨Þu·§œ:ïæ›—¼8få·ß®ž;·¡®.—«VÚ5«§O_1aÂÒ±c<ôÐÜ?^7ãŒ3«wÝmíŠ3EÚJ:L9äй×]¿d̘ÚÉ“]úTýÊ•µ?ü°ä¥—æÞrËÔƒwê@ù+·<ãô3Œ~`ÅçŸ×/_îR³kæÍ«++[:vìœëo˜zÈañÞëcÿ-é0u]m¾”cmλ喩ïÔ%€òWn=xæég,=:÷Úœ{ý S9´¬÷\Ÿ[íúpÐÁso¼iÉË/ו–6¬Yãr]³xqí?.}óÍ=ãäS*·Ø’û Ú¾å^©ëC6ýWšu°¾¼Ÿ‰†Ö9ߪÁÛY<†Õ«KMØë·¬÷³/»¼ö§Ÿr<©•&Yþ²6žuþ‹Ÿ{~UU•J©¯_9q⇙~¨X—®m¦?VÛyÞ-·®ü꫖쟲ª²rá#N1’ë›»Ï¯×øZþʃfýþ¢¥ÿùÏêY³~ñáU_[»büø£GÏ8åÔÊA[ÇLÛo±Î]¦ÿæ¤%/ŽY³xqžA[¹rÙûïϾìòò 6´^þò¾ýf_yÕʉ[R­«*+—ŒyiÆI'Ç;tjÛý7Þ¹Ë kµÙÇzù­Ôf]Smvä~Õo_¯û̳ÏYúÚk-Ü}õìÙ‹ŸyfÚ¿ŠµïÀýí ŸŸWÒ9’öÍ,S/ðáõ¾­ÑКç[WQañŒÊzôʱ<ËÞ{oÕÔ©-ü¯bÓþ¹ŸoÍž{/~îùúÚZOg´b„Ú[ù†}f]páòqãêëñíU¿bÅ’—_ž~â¨Xç.…ÚK:Î8ù”ãÇÛLí¤I³~Q¼[w÷òLÙoÿ–7Ú…>–w|¬ôšòM7Ë=þÕ{îµø¹ç¼öš•ëzåöïÜuê¿ZðÀuee¿ûZ=cƼ»îªÜj›ÀÚEÿ-¯ëKyÊzöš{ßÖÌk-é\W·dÌKS8¨ÔXˆOå¶Û-}ýu»×Æ5óæÍÿË_+·ÌõÍVmæRž¸_µy`ÌXˆ¯µÌûQEÿÍ[^›kÿË»<¶î r9ßêwZøØcõË–Ù½¨®™7oþ}÷Å{¯ÏýF8ï7ðaö*už\‘mÉ(¾ ¼?»N´òù.ÿä‹gT¹åV9–§öûï[þç*l‘ËùVl1pÉ+¯ä÷'’G4øÿŠÍ·XôÏ'ÝÚÏ8,Y2ïÖÛÊzô*¤þh¢³ÎûÝê™3ý Ëš¹sgž}ÎÚ›iÇòL=äЖÿ•%/¿œw|,õš¹ÄßR¯±Ó*·¼èŸÿôšïðãµü“Ofœqf¼K7¿ÛÅÀ-[^ÚÅÏ<ã^žx‡Nó…Qº%j?û¬zèÎyǧ|£>þw_/ËÿûßiGÿÚïë[åÀAöj3ky‚©Í¼ãTmã÷û‘•Ú\ûÊ»<+mÞAe=ßêa»,ÿè#_¯¨k,˜}Ùå‰Ñ Üo„è~f¯´‘ˆŒ‰Ƀ%ða÷>moÙºç»ä¥—-žQõ{æX‹o“.çïÞcþ=÷ä8[Ûõ³Yûñ/ïÛoÁÃ7¬ZÕZLk.œsý ±në…¿?Vn9hù¸qÁ„eÅ_Tï4̱ëRžÊm[ßäØqöÖ‡Ž÷ìå5>ÓO:Ù¿gæô@=ÿ|YÏÞþ]߬¤=óŒKy*·Ù6¨Ú|¤¬g/¯ñ™lmæÑÞ<¼٨͵¯¼Ëc+éœõþ¤ÏÆ ÿñÀ.¼uñøÔ£Žæ~#T÷ø0{¥mJ‘9#cÛL|xŸ¦N´îù.=ÚâMûÕQ9–ÇÞg³YÏ·jØÎ-ßV#cDƒ…ø—oÐgÁ_ïu\K¯Ò óæÍ¹úšxç®!íÑvs®¾¦~ÅŠ@#kkgœtrfy¦r˜­7þüâãȆôøWÛÅn¯É»=ÔŒØÙ»ïþâתêꩇæSû·4¢áÙlÇŸyι.kïÙˆÅ*6ß"×ø´+Ypï}A׿´iS>Ô§ë›­´Q¶ã_›å›È5>­Z›~¼ÙÑ_yVZM4¤ú¨ßÔ/Yüuù‡–m´1÷!¹ßÀ‡Ù+ %ç*2W•,M_õRÌ®ŸïÜ?^gñŒfžqfŽåYiï‘Éñø3Ï=ÏÊ@ë´Ïf[ÿ²ž½æÝ~{`ìäþZ=kÖìK/‹wìªþX½Ó°•ß|ÓZ1™û§ÓÊcï?ÏøØšp”íø³,õšé‹Az;ßx·õ¿øâ/òZüÜselh½ý[y˜Y”˜:‘|ü²½–¼ôR+\df̨Úq§fãS¶aŸÀ>NLÿ¸¾¡aÁƒÆ;v¶~}³•6Ê<~+ÖfõŽC›OjÓúûW…í y”ÇêäÓ¤ãG¢óïús+^NëJKË7îËýFî7ðaöJþµ,i‰”/ðá}Ýu¢µÎwæïηxF³/½,Çò¬´úÈ”rüv%‹ž|ÊÚÀ¶Ô -‰Í>û®ž=;ÌLu¥¥[o’þ8çºëÝ÷Ž àµð‘G“Ëo}(£×øXÑÐtüví-öšÆ y´‡ê†ÕÅã¿ÔkͼyÓ~}¬Ýöoq°}Ê8‘}†¯ª©iµ@-^\=l—øTïºÛª©S[·6—Œ‹´³{}³U›iÇoõÚ¬¶³Ûð¨]woõÚ\š¨M‹ï_G4ä]«k4$ö ^¯Ç²wÞiýûx¼|“~Üo´úý>Ì^Ùv­HË[”:,¯÷oêD+žïœkÿ`sDÃYgçXžZF4Ä¢íí~ê8Û<øÏ<çÜ–LzîÞqÑ¢©‡ÞêýqÞ­·…$ sÿx]c©l}Âw|¬hXwüh»%/ޱ´Æ ^Ûìó/É”"ÏŸ®^Ý8ÇØJ±¸FCÓ눑­~ª«¬Œ÷è韙gŸ†õ>ùå—…>d÷úfoêDÓñkFìßêµ¹ª²2Þ£§c|ÂS› |Ðîû—Å y—Çâ ëŽÜ±Óò?Ëgååå›nÆýFëÞoàÃì•M—fß9~ïÓb­{¾ î¿ßâM=êèËSk{†aLÑR±ø©l戆<ãß®dÁÒ#S}ýœ«®nÅþ8÷Æ›B††'Ÿ²¶`vçL柕VG4¬;¾‰Zï5+“ 9¶‡x·î4]ÂñU_[;倃lõ‹ƒí×­Y3x»5 †!PK_=ó|gœyV¨jsö•WY¼¾Ù]Ú3´µÙ”3 YmÎIÔ¦•÷/»#ò+Ý÷‚X»’¥¯¿ª*[UYY–˜CÁýF«ÜoàÃì•ö­Ìt… À‡Öû1¢¡ÕÏwñ 6oîköÜ;ÇòØѰöÿ ~Äúu?±ëDžñ÷ê½ìà ñ©iñ³Ï®«pûœ{Ýõ¡Ë¼ÔÕ­ÝÔͧOrO­å½Z¢¥Š,xøa_{MNí¡¤£Ý}v[-×°lYõž{Yé/Û—*RÞgãUUU!zŒ¿ô²äó2bd+î¿“íŽú‰£l]ßìŽhmm®=Ùšû‡¶6­¼ù¶½¥‡òXœ|ZªÈ¢§þÆ›^ä~£ï7ðaöráxh|AxŸ¦N´îùÚ]¨©rÐÖ9–Çú ð™çœëÇE?m¸§øWn7¤®¢¢pŸšV~õUÅ&›Ù>ç\smHC1qb¬}[s&óŽõ-Íè5¹´‡EO>ùK[y­Y¸pí’‡-ì/Mc»¬üê«°E)žØ"±rÐÖkæÏcÚ¨¶¶¼ÿæV®o¶–ö,U$Þ¹kksíæ 1EÃ\›ýXyÿª°¿½¥çòXü¨fæÙç„örZ3|_î7Zë~f¯DZbíE4ËLŒ(¾ ¼¯Û[¶ÖùÖÅbϨ¬gïËc/)Z±ÕÖõË–ùúÈä5þ5{o• ¢ì¾VÏœY1h«`Úçì+® s(æþéF»‹3åO«órýí5¹·‡9W_óKÛzÕNž\Ú¾¤…ý¥ÂÖ`ûh»° Š^ûšw×]1Eã½Ö·ûd÷µèŸOZ¹¾YŸmÖÚüs©"e¡¯M+ï_V y–ÇÖÔ‰Š[„p¬äGîÒh;î7Zå~f/Ç$D,ÅEKEàÃìýÙu¢5Ï·bÀ@‹§Ó°zu©Éµ<w.m_²òë¯}ºÜ¯H ÷ÿò7Y=sfyjúñÇX—n~·Ïšáû544„9 «VÍ»ùKŸ0äÙm®4Þ¾ƒ½feRzν=Lûõ1!¯÷ü^³¯¸²…ýÅÒgàφv˜ú+ÊûoÞZ{æÚë׬i܈§%×7[i£<@m¶¤6+·Üò÷/?¦Nx-¤óÀA+>ý4ä×ÒY\ÈýF«ÜoàÃì•”~H9Dæºiù |˜}»N|¾s¬ÎO[=kVîå±8Û|Þ-·ú˜PwÑÐLüÛwXñÙgmé©iñ˜1¾¶ÏX‡Žu¥¥¿Ç+y(£×xZLÏÍõ³×¤hÈv¾U; õiHEë?w-YïÕ»%ýÅ⧦¡}­ž3§:옗ZþþkñєڴU›y¿ÙÝu"¿òXy/XñÅ᯲5óæÅ{öæ~#øû |˜½’Æ<¤èÆi31ðáýY ²5Ï·vòd‹§³ôí·s/­AàeöñõYeí#“§ø/xèá¶÷v5çŠ+ýkŸón¿ã—¢y5®G2åÿ™§ŸÑ6ïÏÖ¬©Ùÿ?ÚgÕŽCV¯.ª7þ¼û¯½^ó_Ï19=—­=̺àBŸþzí¤I FžsåUÓO8±f·=Ê6Ú¸Ô¬‹g¬SçòM6­Ü~‡šýFL?åÔ…;vl ß‹a|J¡¼–ŽÛÂ÷/»k4äw}¨-¦Dò÷ßç~#øû |˜½JÓ9š¼¨ƒÓÂ’øðþ¬ÑÐJç‰.ÿøc»§S³÷ðÜËcå‘©zϽëW¬ð?Ñkü«†í䧦õË—ù–¹zΜòM7³Ü>£í‚\A½aõêúåËÃð C~ý·°zK{ˆ¯×ÝÖ+ÆŸvô1¥Æ[û¬¶Ëâ_lX³Æzy*¶”wáÑ4<¯úÚÚX§.-yÿ¥6CV›[òþe{†|®E5¢¡aõêxÏ^Üo|¿³oš:‘¼1fêJŽS2ð¡ö¾­ÑÐ çk}÷àú•+KK:ä^+o“+¿ýÖïËôЦ ÍÄ?Þ{ƒUÕÕþ•¤vÒ¤y·Ý>óÜó¦vxåö;¬{ß´+Ûx“ê]w›vÌq³þßÅ xÐ׉²+'Lˆuèh±}ÎñyåçŸ>û²Ë§ýú˜ª]v+Û¸o,Ò®T‘øzÝ+·ÙvÊÈgœzÚœëoX9qbk|ÂOÿ­-°^“µ=̾ô2ëyMy@K®Ÿ5{·¾€ëŒSOË»<­2u¢~éÒºXlå×_¯š2¥¡®.¤ŠË–Õ•–®üúëUS§6¬ZÌrÈ¡-yÿ¥6CU›S9¬%ï_v··ÌïúÐZ‰†úÚÚUÓ¦­üß}·jÚ´ÀÚՌߞÎýFÀ÷ø0{¥p(mZ12íMó.ðá÷¾Nò|«÷ØÓú'áËÇóTžBø×8¼Ùø/üÇ?|z__ôÌ35ûì›ký–tœ~â¨å|àÓ¢Ês®»ÞVû,Û¨¯OùþÕ3gοûžÊm¶Í±<Õ; [pÿß‚YÌ,iq&Ïý·P>ÅJ,¡šµ=Øíþs®¿ÁÊõ³¬ï&v—˜ï}y—'°ÏÀêê–Œyiæ™gUl=8¥<&ï½Aå¦{ÜÒ7ÞðcÄG®%¬¯_úæ›ÓŽ?±rÛ!ñî=Sâi¢ñÞT ÙaÎWúz?ÿž¿´äý7°‰0 uu‹ÇŒ™yæY[o“Ržuµ¹ý´cCmN_W›=Râ™(d µ™ÿû—Õ5ò¼>ö^°fñâ%ÿþ÷¬sÏ«Øj›X·õ2ËïÞcÊ~ûÏ¿ç_WX\òÚkÜo|¿³—cN"m1ÉŒ_ƇÝû1u"øó­ÙgøêÙ³­_ÎæÞ|³§òÐ#S.ñ/ß|€õOcêëçÝ~ûÚµëóh-3ÆþmǼy±®ëYiŸsl«YûZøØc±Î]òé/íKæÞð'¿oÁÛMåÓWRz.kü«†íb3ËðÇë,^?«†ì`qöÓòÿþ7ïòðøê¹sç\}MÙæRžò~›ÍýÓk. ôãÓ%KæÝv[yÿ9ÖoÕö;.zæ_Þ&NlÉûoi£5MµÙ|yÊûmÚJµy{yÿÍsì•Ûï°ø™g}«Íüß¿lhÈçúÀ{ÁÊo¿zÈa¥íÚçŸê]w÷i×äú+b»p¿äý>Ì^©É‰äÒ×tJfàCêýÛu"°óyÞï|8倃<•§°F44ÿ…>fýy¾q°nKÚì __[kyPÃ5×ZhŸ‘v«jj¬mÚ1ǵ°¿Ô ßwÕÔ©~¿ñç× (Ñàÿù÷X[ŠrùÇ[¿~ξìr[Å««¬Ì»<~?š.y啲 7òŸÊí¶_5eJ0­¨.¯ÜvHõ;㬳­¯BÒÐÐW>íÍï K^y¥lÃ>^ÛkÔ¦çþè[möÉûý«Âê ù]|}/X=cÆŒ3Ï*´Ë'>Ñö³.¾ÄŪjFŒä~#Èû |˜½JÓQ$m'ÌR‡å%ña÷S|[ 2€òW ØbÑ¿žöéZ¶jÊ”Òví=•§™VÕÔ,ù÷¿<üÈÜošyþÓ9®z¯}ª†«Ùoÿ©G5ý”Sg]øûùwß½äµ×júiù'Ÿ4ÿòMûÛ©¸büøòM7³ÕªvÞ¥®¢Âæ]Èœ9±Î]ZØ>§þê(»ÕZûóÏ›lj¥¿Ä{­¿ô­·üþ„!ú A¯yxm¯™v̱‰^3bê‘G'zÍ=K›zMÖø¯øòK;O «VUn7Äúõ3Þ½‡­»ä5óçç]ÿF44¬Y3ã·§çŸò~›Öþø£ßímé[oÅ{ôÌûý®jǬ\?ý¤“óÿõ-m”¨Í<Û€µÙ+ï÷ Ÿj3ïòø4¢ÁSyü{/Xùõ×+/æý~:í¸êë-ß0ÿî|î7‚¼ßÀ‡Ù+EJÓ–Œ:®'‰¹ŸêÛ ¾–¿j‡?÷¼¯´æ\y•×òÿÈTWV6ï®»ªwÝÍzûYðàƒ˹ì½÷b%í¶‡x^v·ñ›}Å•-lŸKß|ÓfîcæÌòÍXìﱎVN˜àÓÞí­•zÍŸ«wÝÝV‰uîbkPÕâ1/ùtý\òÊ+¶ó.O¦ k³ -‰Oùf›ûºqÉŠÏ>‹µ+ia{›~ü‰vKµ`ôy—Ç×Úlaû/߬¿ßµYÚ®¤…ï>Ôæè¼ËSas†<¯>½¬ü曵Y†–ßζ½òâü{ïå~#Èû |˜½œÆBD\²ø‚ð~N°\þx¯ÞÓ~}ì‚ûï`…Ûú%K—tʽüA>2-zú™ª‡úÔ~Êûö³87¡®¼<Þ³—í¹bË­Ö,X`ívÖ¬x§.y—§|ó?î¨_º´jØ.Öë·¬ï&«§O÷ç†<ë7È^³øégªvj½¿L1ÒV §ýúŸ®Ÿ3Ï>ÇV!ã]ºåWŸÛ'ÞtZz=™{ãM>5¼5óç'çjQý.|ìq›=â…ò.O…µi¡ýû\›ý­Ü-|ì1«µùbÞ屘6ÊûzåÇäÓÚI“Êzö¶xÿ¼ì½÷쎋á~#Èû |˜½²ëHê/d¦+ðáõÖ§N,=zÊÈSÿ;`ÊÈ2¾HþižzØ3NûíìK/›wÛí }tÉË//7®öÇWϘáÓŽÎgqßýyÄ3˜G¦º²²)èkûYpÿýßÀ*‡ìà_{žrð!¶ÌºäÒ¼Ë3ïŽ;-ÖòÔ#ö©~«wÛÝú\ÓÄPÆ|Êl¯ñ¥¿Ìºø;0‹Å:tôéú?õ°#¬%š’°ÞÊãÇgà‹ŸÞÖõ$Ö©‹õ9ÏÝÙV{‹wïaqùe￟wyüH4,~þy[í?Ö©³oµy”­÷/?j3¿òTZÑO|üx/¨Ùo„Ýûçš½‡Û|cª¨à~#Èû |˜}òö–ÑXJ¢"müC$cû |x½õ màÕ°fMb™·xúýÈÔ°jÕ¼;îˆuììkû)ë³±ÅA§ÓŽ;Áïö<ûÊ«¬ j˜>=Ö¡S>åi_bqß“¥o¼áëõaÎõ7øú ƒ§òÒkîŒuìä_vß êê*òã~iÚ±Ç[,gåvC¸ßì~f/Çœ„Óÿ×{À‡Ô3¢!s8CÕ.»åOÿ™Ö¬™~â¨`Ú­õóùå—š}ö ¦=Ï8í·¶Êœ˜´ì­<GU$¦íø{}˜sí|ʘOyj}î5\o—ÿïV <óü üë/U;ìhwDCå±ûhºzúôX‡Ž–ë×DVÏœi±uåå‰õlößÕ³fÙD°|yÞå±;>eíh2ËíßD­×f¬©6­]O¬Öfžå±ºëDžñ±{µxÌŸî7âëu·¸¥úÔCç~#°û |˜½Òv¼Ì’¨ÈüøP{F4¤½æÞxSÞñô)ÑÐÐÐ0ã̳‚iåý6³µƲ>®=ÛÔP¿dIÒýn®åYòÚkvêzõê²õ7àúëÒuõœ9¶ßøó)ÿ½Æ÷ëmù¦ý+nY1pPÒ[f|‘ö#ëÒÍ¿þ2í¸l'<—Çn¢aÁƒùQ¿‹_có åO7úÑ—½ÿ¾­&æây.Ÿµi­ýûP›ö¯'>Ô¦çòXŸ:‘G|ì¾Lõÿ®ÿËdz6Fæø¹ßì~f¯Œõ¢.«J:}Fψ†ä×ò>*DóާOLs®¿!°ö0ëÿ]lo8Ãð Û³ÅA ‰)*ÊckÂäÒ·ßìú0ÿî{|Êè¹<~ö®ÿ?¦D%%¼•ÇîgàS>Ôxλó.‹…¬Ù¤õ;ÿÞ{m•0iYoå±›h˜rð!~´ÿywÞésmZè¿Vk³_~åñaDƒçøX|/¨¯­uëîßõÖâåtÆgr¿Øý>Ì^ÍÍ»HùâçæçiàCáI44 Ýœ=»lã¾-‰§LuñxiIÇÀÚƒ­­›êb± ÛsIÇú¥K­~ácy*OÅ–ƒìÞss}¨Ùw„Ÿ0x.Ÿ½†ëb᥎küÑÚ§¦Ý{äW‹¦õK–4^íÆsæùXV³jU¬sW?êwÆYgÛ*då6ÛæWŸjÓnû·]›]ü迾ÖfŽå±X›yÇÇâ{ÁÒ7ßôõz;å@kwγ.úÜov¿³W*JIEüœñEÆAñ!õLXwÑÐ0åC[O?™¦qdpí!­_²ÄJ±çßw_ðíyÉØ±V _ûãžÊ3ãô3ì4ººx^Á]¢íÖ,X`ñ?¿òøÔk¸þ'û=d1¼ñî=ó+Ň™%/½ìS<§v¸­B®?Þ§úzÄ‘¶ Y±ÍàüÊSnï3ð%/½äSû·[›>õ_jÓsylhÈ'>ß fýþ"_¯·åýX|wí¸ßì~f/בì³/ð¡ö$Ö¾æÝyWËãiý‘iéÛoÙ*‡lomìA‡ßžgþî|;oÀõõ±nÝs/ÏÂÇÿnåï.{瀯‹Ÿ{Îê' ù”ÇŸ^Ãõ?ñcs>Tj¢Ásy,>Ì̾ìrŸâY½û¶ ¹èé§}ªßš#í}>8¿òØ®M_Úõî{Ú®Mûý×jmn›_yl¯ÑO|,¾ÔŒéïõ6Ò®¾¶ÖÎÍçm·{*÷-¹ßÀ‡Ù+5ù9%Ñ”®hÌOà Â×0uâ—_–¾ñÆÏíÚ·<žÖ™*¶Ý.Èö0óìs쌃]¶¬´CÇàÛsù¦ý­Ý¦Œ< ÷òÔþô“ŽÛïøú0ý”Sm½ñç]뽦rÛ!\ÿ×~QµãПný‚ïÞ#¿òX|˜™~êi>ųjØÿgï¾ÃÛ*χl'qœ„ÄÙa‡°ÂÞ»”²÷†@¡”Q({Ê -´Ì(´¼¥…B-›…R”–{Ç[–÷ÞñÞ¶ä÷GãHÖ9ºï£céëKWH>–n=ëÝzÆžRA®Y·£»xýVî½ìGSñ¨Õ¦d‘­M¥þ[µ÷¾¢µi'Ùã-í•ൠdñíñv°°P$Ôö‡²÷ñÜoàÝì‹+&ØFïrÏŒ†ö‡ZwüX¼å)û‘©ÿË/nR™òž7ßLT{–º·Ü|Kìñødî¶¿Û%Û¹ñ¡\hKعÖâQè5©>þ{3³êN9µû¥—ý££cæøfVãœl?¾ÒM¼<'v­ÛÇW¾=Tì°£ôŒËñ~4­9òh¥þ"]›*ý·b‡¤kÓr<§NX-©kÁhG‡ãmÏÛo‹DÛñ—Ç-ÅÃýF<÷x7ûÐ=ÖŠqç Þa2ðñnö©œhðŽ6]v¹`yÊ~dj¾þç·‡þÏ?‰¼õ×w$ª=wý]fn^×óÏÇOqÖ ±{ÄåÛ;<>x§M÷û|Å<•ÑR<â½&EÇó)Ó*wÛ½ñ¢‹;ÿö·Q¡V"ýxgϱ¿à‡™Ê=öR*Ïòm¶“ RöúèË—.üÜ^<‚K'*÷ØS©¿”m³­`m*õß²¥[ŠÍ‚Ün¹½xkÓvùH] Öí¦¡;>w¿ü²H´O?{<ÜoÄy¿w³7"lç}¿¼Ë}Ê.ðuw×uŒlyÊ~d*ÛbK‡ÛÃHS“Hä çü(Qí¹å—·ÉÜ©|úiŒñH­×ð §Oq~|*/—»ðÛ‰G£×$ùx¾Azéâªö; þ‡g·¬¼µãñ'ú¿øBjÁpÌ3ìÄ/8£¡l³-”Ê_ð3|]Ðw†’í¡tÑ…DƒµxÓFkkS£¿ÖfýŠ3•ú{ɢłµi/=¬–Ôµ óé§Ÿ;Ÿ~F*Ñ{<ÜoÄy¿w³7Âwqˆ´ #Ò®xúÔœÑ0\]]±Ó.âå)ø‘©ÿË/nÞÌ,¿ß/|ÕÞû&ª=ןy–È[ihˆ1žÊ]wyÅ¡’’„Œ=ÿþ·ÐTF›ñhôš¤ŸKç/¬ÚkŸúÓÏh¹áÆöGéyûíAÇ×ߟØñ³$`Fƒ¥÷+øaÆ›5S©üË6ÞT*ȚÎPj?Þ™Š4µ`ÚÈ›5C© Öfõa‡+õw…Ú´O™ä©6ËGêZ°voíñ¹ý‘Gä iÜo8s¿w³7wqˆœ–XŸ·ÀO Ÿj‰¿Ï×ùÌßJ-Ö(OÁL­¿¼ÍáöP¾ír±»Æ9Ù‰jÏR[ùý~ï´é±ÄS}èa"¯8ðÕW Ö<ôÔ…ß^<â½fòŽÏ¥ ×wBëwô¼ñÆ`~¾¯§Ç£¨wýfÖÞ¯ôz*õU²p‘T•»í®Õ~ÒÒ¥‚,_¾½½xD”ï_²µ©5>¤eÖ¦½x“€¶ËGêZ°îÝñ|Í}÷Éοà~Ãû ¼›½¾Áƒ'x‰Exï~ŸRK'zÞx£|ÇôÊSð#SÝI';ܪI9´´$°=Ïœ%6›wëmb‰§þŒ"/×ûŸÿ$d|h•XlÒº ´…xD{Í)“k|öfͬ>ð æë®ïzñÅ¡ÊÊÉ2oiíýÊ~˜Qª¯’9sÅÆõ+äÛdDæ;ðå;Ø‹Gãœñþ([›zãƒ`mÚ‹§L'md©|¤®Í7ÝìÀxÞvÇJ3¸ßлßÀ»Ù‘Z¤™­ÇHÃO Ÿ"3ú>ü°jÿµËSð#SùÖÛ:ܤNÌÏOlû÷õöм‘u f‚xš.½Läåº_}5!ãCóÏ®“û†ÁN<Ò½Æíã³7{nÃyçw<úØÀêÕRŸ.O4̱W>jëÀ%ë«dv¶T¥óêµ7ÿð°ÌGÓàUý±Ç£Q›âýQ§6åÇÁÚ´lÚÈ^ùH] š®¼Êñ¼õ×w(Ìhà~C÷~ïfoxÌþÍ6" À»Ð'ýŒ†œœÚcŽs¦<¥.“¾OZºÃí¡á¢‹E‚ïÿì³Ä¶©--k;"–xZný…ÈËu<ùdBƇF‰zÿ†!öxÄ{;ÇÛâÌéu§Ñýúëþ¡¡É>¨–ÌζW>eÒ;ÛkÔ—àGÓ’ù ôÚ›ìGSñèÍO첉½ñA6md#Ù´‘½ò‘º4\p¡ã¿\¢á™Øãá~#Îû ¼›½˜0Ýà!®xWûdÑ0ÚÕÕùô3µGãÙÀ¹ò”ºL¬^í|{hºú™)yï¾›Øö?TZ*òFjO8)–xZïºKük 'LJº³~(ò ƒíxd{ Ç۲Ͷèxì/£]]I3º®;ÞÒrùˆ4Õ¨/ñ¦JíM㣩¥xTÏ)ª_ïì9²3”Æ©Ú,ßn¹½xôúfìñH] êÏXáÀø¯1£û íû ¼›½='ºRz¢Þ%>Éf4 UTtþíou'ŸêÍÌr¾<¥.“]Ï=ï|{h¹ù…)y hÿ«W‹¼‘º3ÏŠ%žæn”)·ü#!ãCíñ'ˆ|Ã`¿¾ÄzÍsno½37l½óNßÀ@’¥q×Îh°Q>âßšjԯߋ´7ñÉöVã‘]Õ¯Ô %óè'‚‰{ñˆ×¦ò‘ºÔž|Šãë¯-5£!öx¸ßˆó~ïfox‚VYD<3àIñ“ÀOê ¾¾¾Á¢¢žÿ{Íoï«=ùÔÒÅ%¶<ÅgúÃÃÎÇ/¸³QbÛßGIM¿Œ%žÆŸ^"5$!ãCÝɧŠ|Ã`;©^Óþ‡‡]4Þ¦¥7\páHccRÎ+™m¯|ô¾¬_…Uý*íMs†˜âÑø\¼?*í¸!>žˆ¦ìÄ#´S>Rׂº“Ou`ü_:Áý†÷x7{Ã4'eWIü¤ðâ3ºßx£å–•›oi¾æÚÆŸ^Òð£sëN;½ö˜ã*÷Ü«dÁB·•§ØáLwÝí|ümwß-|Ç_ÿšØöß÷¿ÿÉ$.º8–xêVœ)òrýŸ~šöÜpÁ…"ß0ØŽGª×´Þu—KÆ[ofV÷k¯%ïOà –ÊÇ=â¯_Ù=ôÚ›3{4D‰GoU¿`”]:¡7žhÏh˜0¥ù)–ÊGpFƒã¿`¢!öx¸ßˆó~ïfoæ!þÍ|%FÀóâ]íÅ M—_‘²å)x8“óñKm2ÔýÒˉ­¯¯¿y#õgŸK<µG#òrƒ…… iÏÍ×ÿ\j*£Íúê5-7Ýì†ñ¡dîü¾?v[j ÿÓOkO8IêÙ¼³çØ+Ÿ2é õ+šhX¨×Þ4Î)°O¹|m*ôG……0ã‰NmZˆGv~нò‘]:¡=þ‹ïÑÀý†÷x7{Ã4Eá ž 2)ï~/¾t¢éò+R¶<Ågºìrção’8vhll¬çí·[_ƒÅÅrߊLOå~û‹¼œ¯·wíÆ¥·g‘Í¥º_~Ùv>”m¶Å`Q‘«R Cååõ§¯ði%óÎh°W>¢f´êWã;pö&û¸xdç§(o²{4è'Òµi9Ù öÊGpé„ã¿à ±ÇÃýFœ÷x7{cœzÂV\D>²ïv/žhh\—hHÁò;œéGç:ã%—Šß÷ÑG‰­¯áúz‘7RsäѱÄS¾|±%›lê|{îxì/"~ÛñÈöšŽ%‹– ×Õ¹!¹àíÿâ‹¶{î­>ìpÏÔ̵á•Î_(h°\žzÛ Ö¯ôöZíMu²},ñˆ4Õè¿^éÃJ•ƹÚÜÞ^<óS¬–ì Úã¿ìf1ÆÃýFœ÷x7ûÐ¥kE@Ò"Ò’ ¼«½øÒ‰Æï–N¤byŠMü;åTçã¯?÷Ç"Áää$¶¾¤Î¬úÞ÷c‰§t£M¤úNÍ!‡9ßžû¿üRd*£íxäzÍi‰zþõ¯De|==_Ýõìs-¿¼­öø×6xŒ´¹DƒéóÇRžeÒÛjÔ¯ÆÒ ö¦±} ¥x¤'Û«ŒoÎ,ˆ?~ñ7¬ÆS¦¹t"Æxä–NœêÀø/¸t"öx¸ßˆó~ïfo˜Šðm$ßïf_­¹t"ÕÊSvâŸÃñK-ᮩId}MÍôû|2wl;íK<ÅY3Ä’t—\êp{.ž–)rƒ»v*£½xÄwOÈøÐpÑÅÍVòz{Þ|sÍïl¼äÒšC+Ýx“Xâ/•L4dÛ+OÑÉöZõ«q ¢Fÿ_:a5Ù…0J× é…0Zã‰FmZŠGgY“µò¿ƒRÿEOˆ5î7â¼ßÀ»ÙžàÖ%!Òþ7t¹Þý^céDÊ–§èeÒéø+vÙMæƒßï>#QõU±ÝöbŸ¦6œc<#--"¯ØþÈ#·çª}e|v­™´ìNã Ê–måëéÑK.Œ¶·w¿þzÓÕ×T'cнø÷hðΞc¯<õ>ÌÖ¯Þwà²íSú;pËñ(ìÑ ßöhPOtöh°tmÚ)Ñkúø¯°G÷ê÷x7{#`ÅEhr¢8hŽDš't…Þ½^méD*–§àÄ?çã÷Ι+ÕÖÎHH}Õž(3/c´½=öxzW­yÑ¡òr‡ÛsÓ5× ^øíÅ£Ók”Ž™innYykÅî{§eĉô 6âQ˜Ñ _¿ÒÇ[jõ_ñDƒÕx¤·T¹^x¥ÓFJã‰à öâ?ÆFùÈ&´Çéã-¹ßpâ~ïfo„ìÜuFzÈ?á]ëu6ƒLÑòT˜Ñàhü£2ñŸvF¢ê«ùç7ˆ¼…Õ«c§íÞßHuŸòm—;Ùž{ß{O$ì] -Å#þ-–ÃãCåÞûj¤𝻾8k†`ü 3,ÇS¦sê„lýz¥÷hP꿲ÛÚˆGãÔ ñþ["¿¤Êx"˜6²ÂŒËå£tê„Òø¯qê÷Ú÷x7{#…Svf~Rx¥ã-S³p†õÿl¶î"0w»×\:‘rå)»g²óñw½ð¢ÌeàùU_ýŸ.òÚî¹'öxʶÙNªûô¾÷žcíYjæçº©Œ6ãQ^—«<>dLin–*FÿÈHÍ‘G)Å_ºÑÆbŸ¸fgÛ‹Gùœ™ú•Þ£A«ÿêŸS0A<âM5ú¯ìü½ñDvé„xÄÓF6ÊGz¿Ýñ_t3È4î7œ¹ßÀ»Ù³…!¿ð«ñ(ôçÆ‡ÎgŸ•*Ã5÷ݯå{‰&ìÄ£±\¼~½Ò›A*]D¿·ìŒ¥ë…øŒ¥ñD:md9µa,”ÆŒ½ñ_vF÷ÎÜoàÝ샎· ÈIæ'B&Bà'WšÑšå)= Üéø½Ó¦û‡†DÞBëw:×ße>õ WUY§ýáÿ'6Þç+ßv;ÕöìÍž+8á,hhËñˆ.8rz|mk ¾ïã=iªñ×¢\¢a޽xt¾®_…s T®GÒ“í-Ç£ð¸|ûÜ£!x!Œðx"»GƒxÊä—5Y.Ùköø/;£û gî7ðnö†Ù*‹4ÉMrx×z=R¶<Å·2rþýöñ…È[øæ§ãOËúÔ×õ‹Vã©?ó,ÁNÔùìsªí¹ýÏÊöúñs­mÄ£qê„3ý¥xZ¦T6œw¾vi¼äRÙ 6â?uB£~ÕVõ ׯôŒËñH¯êWiÿ²›Aê'[{ZŠGöèY{å£p-PÿOà~ñû ¼›½éfáë1&ÈaàÝæ«u·L­ò”Þ 2ï·å¶ÛeÒä~ùö;:Í1ÇIµáúsl5žâ¬RË&¿[pæYJí¹r¿ýý>Ÿl¯_wÜ”x4ÒsÎô—ÒÍ—ŠDîðn8[»¿ Šæ5ß râxþÜ^yzµ6ƒ®_…ã-­Å#þ¸Fû—Ni' ›AZ‹§L¡oZ-éýztÇéÍ ¹ßpâ~ïfoæ$"d,ÒÂwzÀ»ÜkÎhH¹òTžÑàÄû-ßq'±¬ósÏ9¿Ôyþáa6âé|úiÁ~äëí-ßa'ñú-ÛfÛ‘¦¦1éŸ] -Õ¯ÚŒõþR¹ïþ2Óòòèï}| =£Ár<{4ˆ×¯ô Z×#¥=bGü°Rö¯pX©Êx¢?£a‚xf4X.¥S'”ÆÁD÷ŽÝoàÝì Ó%âÐßÇO¯–hHÅòÔÙ£Áé÷;TR"ó‰Ýç_ý«Í‘GK5àžwÞ±OõaÂ]iÈëõn8G°~K7ÛBpçç ¿íú•Þ£Á¹þR{Ò)"‘÷®Z¥Þß§Lóõ÷Ë%æØ‹Gú£©Jýª~.X¿²ßÛˆ§Le~Špû×X£1ž(,„±Îükå#ýUîø¯³G÷º÷x7{Ã1E‘nö‡tü¤ð:K'R´<¥—N$æý¶Ýs¯Tcèüû³ÎÄß÷É'b øâŸÚŒ'-}¸¾^¶7õ}ôQÉÂE"õ[²dc©R„olÖ¯BzΡþÒxée¢Sgû{å¾û Vwàñ––âQØ£A¾~u¾—¯_ÙïÀmÄ#=?E¥ýKïÑ 5žHצåx¤g4Ø)½5ÆÁ=¸ßpì~ïfoDÎU„?cZÔÜÞEÞ‘DCª”§Îw³N¿ßòí–K­©óŽV쾇vüµ'Ÿ"ÕzG»»½sçÛŽ§í¾ûů©Ã55•{ìgýÖ­8s¤µuLí'øÂo­~n.ê/¢7šºý½ãÑÇ«»dÝ VãQšž-[¿šM%ëW-Ñk< MåÛ¿øa¥Jã‰ø"VãQ˜md¹|t I;þs¿Áç»$óFØ‘ia.-röïR¯·t"ËSs…¡£ï·ëùÄ®[UUÁó‡…ã/Ûf»ÑÎN©hÛî¾'žx*vÞEã²ê¨?÷Çöʧdáâ®W^Sþ‰¼frâúßBÕ±þÒzç]"‘÷¾û®j/Y°Ð70 =£ÁN< GèÉׯÎÒ ùúÕØ>ÐR<šµ)Öþu–NÈ'Ê;nLæl£XãQ¸hŽÿ’K'¸ßpè~ïfo˜Íˆˆ¶$?)¼òŒ†Ô*O¥ÕæÎ¿ßòíwÜ(¸÷ý÷=éS4â÷n8gÐ㻾öôxçͳ<¥Ú@øÏ@^^ãÅ?-Κc<;íÒöÛû¤ŽüŒí;õ«Ðkê/MW^%ù`Ajo½ýW²Õ¾dŒñè|.\¿â"*]f4X‹GmÉö/½Fk<Ѭ͘âÑI4X+µ;(•ñ_ôÔ î7ºßÀ»ÙÑWVE\žwµW:Þ25ËS'Ÿ˜÷ÛõâK‚­¢íäãß ½ûŸÿ” òÞßÄ_žµ'ž¤z‰íèXóÀïª<ª|ùÅ3gÅ“–Q²x£Ê=öl¾îúœœ1B¦2Zª_Mœé/ug¬‰Ü?2R²`¡R/Ûr™à”Ÿu‰†9öâqäÃL¼õ«·} lý ~n/3D„Û¿ÂB•ñDakñ(ÌO±\>Ê' ÿÒ{4p¿áÄýÞÍþ»DC‘yrb}Ò"à]î5·L¹òÔÏÇ;÷~ËwÜÙï÷ 6Œö‡ÿŸgj¦TüÞìy²Y_ooÉ‚E"åÙóæ›Ž]qGÛÛrrú?ûl¸¦FêV5žolÔ¯ÚÎ&êý¥ê ƒ¥ °éÊ«4ú»'súÀ·ßŠW÷ºÍ -ÇS*=£A£~ ^“=ÄêWãœKñhž:!ÖeÓFzã‰Ú ±Æ£Q›VËG|c`Õñ_mF÷Š÷x7{#|YEQP®"=Â!™xW{¥ ©Yž²ßÍ&üýНµëÿò˲-¶Œ?þÊý®®–­í·÷I•gÙÒe‚G NŠŸ°] -Ô¯ìÍ¥“ý¥|Ûíç©eL¿ãñ'4ªÛ›=×^š{4Èÿ§Np¿¡}¿w³7Âs‹.Âw˜ÄO ¯”hHÍòÔùÈäŠ÷+~…~Úî¿_½<§Lë~ýuw¾ýŽ¿þÕc¤ ^øíµ7³Óì/ŽÝÛvvy½ý_|1›;T^>ÒÜ,¾Wk샼½ò”ýhªT¿J‰ññY|²½Õxd+Uº~ &+OÄ VãQ¨MËå£w‘Æøß"yê÷ÝoàÝì ZĘÃÀ»Ê;¹GCÒ—§Ú$ðÄ¿_ÏÌYƒ……É”eè}ÿ}Oú'Êsê´ž·ßvÛÛøæï¬Ù#½æÈ£e¿a°Z>Ú3´ë·Vb.èäúiYy«½òtþ;põ«±¤Æø¬½GÄñh|.ÞÙq#þø5–NXŠGuÇãq~Nh<íM|é÷ÜoàÝìñœ„é2Œ¢°c3ñ“ÂëíÑ‚å©ñ‘É=ï·l›mE6òqÃÏpuõÚ¯§œ)Ïâ̬Þ÷ßwÏÛòz½ ¾»i–ú†Ávùh|‹åhIËøæ›”J4´ýö>{å)ø­©^ýÊîÑ 7>ËÎh°Æüñþ+»tBoÓïvï@¢!uÊSi…¡ÛÞoéKrr&ã¤Þ÷Þ+ž;/±åY¶åV½«V%äí¯ùã=S3Câü†Á^ùˆß\&¤~½sç»?7X\,ò<=ï¼c¯<•¦gËÖ¯ÞGSÙö©:Ù>–xÄ?šjô_ñÃJ•ƽ7bŒGa¶‘åòÑ[|ª1þËnÉý†3÷x7{#dÇȵ“©X÷ßtü¤ðJK'R³[¨&¤~kŽ;ÁÍ ‹ú>ù¤8{îh[›@sª¨°WžâÛjÔ¯ÆöíMcû@KñˆO¶×è¿:K'äÇñ7¬ÆS*Y›6ËGüZ :þË-xšû Çî7ðnö†éâŠÀ%E1,ÆÀ»ÍëÌhHÑòT;Ú•ïwƒô–_ürR,M÷ Öÿø<·•§wނΧŸÑ~ï£kÖ4]s­gjf¤xªÅ.ü6ËGa]nÂê·æ¤“Ý™kèyë­â¬™#½ÿ‹/Dž°8{®òl¯U¿Å›Ajµ7¹ ÛÛ‹GiÙþ[,œhÐOdkÓFjf$ëWoû@Ùö&û¸x¤÷hPéâ a”Æ…=¬ÅS*??Årùè@¤1þKïÑÀý†÷x7{#8ž®ˆ¾ßÞ¥^ïxË,O½ýóÝ\>¥›mÑñèc.ü"w´»»õ®»¼ÙóÜß~<Ó³Î;¿ûµ×F;;ãM¬ÔÔ´?úXå~ÄOÍÑÇÆ_Ôí>j»|¤×å&¾~kO=Ý%Ýa¸¶¶úÃãoú®ùç7Ø(¥ çdëWaU¿J{O4XGcFƒxÔHiŒ'J§NÄNmZ+½5ÆS'¸ßоßÀ»Ù!ó—Uo혫À»Ü«.Hµòÿnv•OÙÒeO<á’ïr}==m÷Üë7òµ·ô)•ûîß¼òÖ®W^ÈËóõ÷Oü•õðð`QQ×+¯4^}MÙò¬ÆSwúŠø ¼íÞߨ.ÑMÜR¿å»ìÚÿå—‰œÈàóu<õTqö¼ø«>Fäù»^yÅFùh¬¯_Ñ¥ õÚ›øÒ «ñˆŸ:¡Ñ5ÒFã‰øŽVãQXÖd¹|d—Nhÿâ§Np¿áÀýÞÍÞÜÅ!$ø\![Mâ]î•NHÍò”žø7ùʧt«m:ŸyÆ?:š°CooÛo~ë¿ IÚÛé%›m^ù½ƒjŽ>¶öô ç_ÐxÅ•W\YÿãójO9­ê°#Ê·ÛÞ“15žxêÏ¿@àûí›n¶ý~5ÎNwEý¦e4]}¯§Çù^Ðýúëå;îdñŒY"i|ƒƒ% [„—N¨Ô¯èdû…zíMp²½½x4kS¬?ÊÖ¦Þx"Z›vâ‘^:a§|4f·éÿ-r›Ar¿áØýÞÍÞ( ÛÚÁôL³'Å»×ë-HÁòÔÉÇO¾ò)ßvyçsÏû}>GS }}m÷Ýï]°þnÉ7^uuü…ßpÉ¥¶ãÑ[—ë†ò/ÙlóîüÙ¾àëïï|î¹Ê}÷߇м\ËÊ[­–Æ©âõëUØ>P£½‰ŸS`5ž2•ù)ÂýQz3H­ñDm~J¬ñH=k§|dÏíÒÿ7ƒä~ñû ¼›½< "p:Dè®’ã;=àÝï8u"uÊSvød/ŸÒ6i¼âÊÞ>Pý”åëïïúÇ?êÎúañ¬Ùôw¾eå­ñ×BÝ™gÙŽG:=çÆò/ÝxÓæ[V•–ª¬’éû裆‹.öÎÎŽ%ž–_Þ&òºÃµµES-•ìÒ ¥ú_:¡ÔÞ”Nˆ=ž2•Úîâi#¥ñD:md9é´‘òÑ8uBoü=Þ’û ‡î7ðnöFXB"ôTÌÀ¿ ?¾ǧ¦÷.ZÒpÑÅO=5äõÊ|²îÿòË5x¸öÔÓŠ³fRþñøŽ'ŸŠ¿F*8òœØo^õýƒ;žøëPiiœçÂŽ´¶v¿ñFóM7Wt°'k&íÇãñÜoPþ“מ°-"üoЮx<?þ¿Þy jŽ=¾ùÆ›ÚÿôçžwÞ,.ö D¿¨Œvt ¬^Ýýê«m¿{°éÊ«*8Г™EyJùü|onçÌ¥<-yU‡Þ|ãM]/½4XX8ÒØhÚüÃÃ#ƒ}~ØýÚkíü©þÇç•m³å‰Çãñxî7(ÿ¤ñF¤ ÁN›p‚ÇzÏôÞy J6ݬlÛåå»íQ±Ën¥[m]²Ñ&Ås²‹¦fR>zÞ“53þ;‡ëê(Oï™6Ý»hIù¶ËËwÝ­t‹-‹gmHùàñx<žû î7’ÞEÁû7DZá ;ÄÇãñ.ôUûÿ× =«VQžx<Çã¹ßÀÛóF@N"Í–¥ÙU2üïñx<>‰½gÆÌâ¹ó‹çÎ[÷ßyÞõÿú÷Þ ¿ òES3‹¿í7¿‰ÿÂßö»ix<Çs¿ÁýÞž7B¶‘Œü¿i¦ÛNâñx|û¶ûîÙê²õ×w8ÆÔ‘¦¦ø®¿ð'´<Çã¹ßà~oÏ!ÈlFàÒñx<>u|ÝÙçˆ\ø‹‹‰¿æ¤“E®ØcOÚÇãñÜop¿·ç°W¤™n)‰Çãñ)âËwØIêòŠwu þžwÞ‰?Ô‘¶¶¢´tÚÇãñÜop¿·çàlDZäm$M³x<ŸÔ>cê„GuÆøÓñøÚñׂH¨]/¼H{Àãñx<žû î7ð¶½¶—ƒÉÃq^Ç'¹ïÿúk‘«©ßç+ßig½ø=3f WW‹„ZÞù´<Çã¹ßà~oÛÁé‡Àÿ¦Å®Àãñø$÷?.5›±÷½÷Š6Њ¿íD‚ôõôÏÚö€Çãñx<÷Üoàm{Ãc¾CzØo¦…®ÐÀãñøä÷W\9&÷Óvßýñ7\z™ßý‘?Ñðx<ç~ƒû |<Þ0Ý42Br"úÿâñx|zïžþ~ÁkÓµ?“_ðª?66V¾ãδ<Çã¹ßà~7‚sÑ!Äàñx|Jø5ý~Lô§óÙg‹çd ÄŸ1µù¦›¯ú]¯¾J{Àãñx<žû î7ðqz#òtˆ´È <O!_²ÑƾÁAÙkÿpMMãUW{ç/°õ1Ç z<‚!ù‡†J·Úšö€Çãñx<÷ÜoàãôF‘‘^h¾—Cècœáñx|ªùöGþ4¦ðãî~íµš“N)š2-ÆxŠçί;ó¬žwߦíßÑðx<ç~ƒû |üÞ0ÝÔ!øwÒ¢.ÃÀãñøä÷%›/õ©ýŒ´¶vþýï­wßÝxÙå5'žT±Ç^ÞEKЦfzoT¾ãNU?8´öô-·ÝÞ÷Ùg~ŸO#€¡ŠŠâ gÓðx<ç~ƒû |üÞˆyG‡t‹;@àñx|RùöÇþ2–¤?þ‘‘Š}ö£=àñx<Ïý÷xo˜MxýÍÀÂãñøÔôž™³rr’òÂßtó-Ô/ÇãñÜop¿—òF -¢å0ðx<>u|ɦ›74$ÙU¿ë…‹Ò2¨_<Çã¹ßà~/åÇg4¤…•}ÉÒ-û¿ùfr]õGZZª;žúÅãñx<žû î7ðzÞÿ“YÒ"â2 <ÇižiÓÛ}t²\õ;ž~Æ;oõ‹Çãñx<÷ÜoàU½2óa­wÁË-ÖÿÇãñã¾öìs†ëëÝ|ɪ¨¨:üê Çãñxî7¸ßÀ;àèÛEFßïÇãñkÿד™Õxõ5#n»ä××7^~…gÚtê Çãñxî7¸ßÀ;ã)…a“ ƒ2éx<䋦g5]wýHs³+–G666^}'3‹úÂãñx<žû î7ðNz#pÚCà̇àtEøîx<7÷ž³¯ýYÿ—_&äH*ÿÈH÷[oÕžy–'3‹úÂãñx<žû î7ðÎ{#쌊%éaÏŽÇãñø˜¼wÓͯºº÷ƒü££ê×{Ÿ¯ÿ«¯š®¹Ö»h åÇãñx<÷Üoà袰­ÿ9øÖ3<ÇÇî‹,¬¿èâοý} 7×?<,u±íêêYµªåö_Uq¤gv6åÇãñx<÷ÜoàÝàB³M‚ç?˜L“Àãñx¼M?uZù.»Õýèܶûïïyçþo¾*/]³Æô[¿ßïëëik*/ïýàƒŽ§Ÿi¹ãކŸ\TuÄQ¥Ûl[˜–Ayâñx<ç~ï6o­¯0¥&‰Çãñxq_4sÃ’M6+Ùr«’%{æd{¦M§|ðx<Çs¿ŸtÞXwÐeÈ6’&‡aæ0ðx<Çãñx<ÇãýazEØ/mÿ€Çãñx<Çãñx<oêƒf4>EØ®’A;=àñx<Çãñx<LJ{#d:D¡ùQé…fi <Çãñx<Çãñø@`„í$™òkÁë.Òñx<Çãñx<Çã#y#r®"-ì¨Ì´¨¹ <Çãñx<Çãñ©îàÅúᲫ$Çãñx<Çãñx|È¿!3BÖ]˜ý/Çãñx<Çãñx¼¹7"ˆÐ=$ÃÉÄãñx<Çãñx<õ†™LQ„î÷€Çãñx<Çãñx<É‘9-Ò¯áñx<Çãñx<Ç›z#8'aò a‰ <Çãñx<ÇãñxsoDúMÓC2£>ðx<Çãñx<ǧº7§È|þƒéSãñx<Çãñx<ǯ÷F”6QÞÇãñx<Çãñx<>ÔDztb¿Äãñx<Çãñx<ÿnFÃwÿVù7ƒÿ Çãñx<Çãñx<ÞÜ‘r÷„Àãñx<Çãñx<7XU‚Çãñx<Çãñx<^ʱ¥%Ò-¦1ðx<Çãñx<ǧ¢7BZÒ‚ˆÓ$ðx<Çãñx<ÇãM¼A2Çãñx<Çãñx¼”7B~!RÞ"RöÇãñx<Çãñx<~ü_‹ù <Çãñx<ÇãñøHÞË=˜¬¾(0›/Çãñx<Çãñx<âè+. ",ÉÀãñx<Çãñx<7ŸÑPü›Q¶— yv<Çãñx<Çãñø@oÌ‚ˆø y <Çãñx<ÇãñøHÞŸ Q¼Ä"dÇãñx<Çãñx|$oF8š¢ÀäwÒL·‚Àãñx<Çãñx<ÿnFCØ¿…¦+¢<Çãñx<ÇãñøÂðS'‚'E˜RÓmðx<Çãñx<Çã×ÿ¥±6'Qõ7ÇóãÆãñx<Çãñx<÷†éYÁ+.Ò £%-ðx<Çãñx<ÇãÓÆ÷hH+4ÏX„ì*™fú÷x<Çãñx<Çãñ¡3 Ì—a„§+Òðx<Çãñx<Çã#y#,E‘VaoÉð'Åãñx<Çãñx<ôÆxâ!|ÅE¤Õx<Çãñx<Çãñ¦~ý Áɉ´‚àí–dàñx<Çãñx<LJz£ ò’fçX¤ãñx<Çãñx<ÇGò†é{H˜ä'ðx<Çãñx<ÇãM¼Qhö -BRx<Çãñx<Çãñ‘¼Q¶¯ƒé2Œ‚à§Æãñx<Çãñx<÷FøŒˆHË0 CŸÇãñx<Çãñx<>Èfs!‚³iÁs$ðx<Çãñx<Çãͽþ;¦'aFxj<Çãñx<ÇãñøõÞäx˵"ü—#_Çãñx<Çãñx<¿ö_“I&û:Xyàñx<Çãñx<OMo˜®µ0]y‚Çãñx<Çãñx|zAàñ–a¿“[>Çãñx<Çãñx<þ;o„üBøÑaψÇãñx<Çãñx<oîcÚ£!Ò³àñx<Çãñx<ÇGZ:‘Bó'XžÇãñx<Çãñx<ä­ÎhàÁƒ’7&\h1QÇãñx<Çãñx<>-tÓUùëÍ ýW<Çãñx<Çãñø¿1L—UDúCØ9™x<Çãñx<Çãñëÿ`ï$™øÓ¤Çãñx<Çãñx|7B~90åÈ <Çãñx<Çãñø|ÓS'‚9-?xÇHÓ%x<Çãñx<ÇãñáÞÈ=”"t‰E~ÔÅx<Çãñx<Çãñù3ÂsAË0òƒÓx<Çãñx<Çãñ‘¼Q¼sCAÄu!ûIâñx<Çãñx<LJz#|_‡ü€äDÈ2 ÓC2ñx<Çãñx<Çã¿›Ñ<Ã!-|÷ÈHƒÇãñx<Çãñx<â ³\Eè6’ù‘ŸÇãñx<Çãñx<>?0Ñ0 "-?ì$L³gÄãñx<Çãñx<7ñF¾ùy˜i¦éгõx<Çãñx<Çãñk½azpE„Œ…ùßàñx<Çãñx<Ç篛Ñ>áÁdS‡¨$ðx<Çãñx<Çã×-È7ßì!-Âßãñx<Çãñx<Ç›{#?ñÇãñx<Çãñx<4£¡ 6)Çãñx<Çãñx<´t"xqEЯ…ÿÇãñx<Çãñx¼é_–æEXœGÇãñx<Çãñx<>¥¼–H›èyñx<Çãñx<Çãͽ‘?Q–‚u½ó/¤Y|<Çãñx<Çãñ)ç#Îhȳ˜ÛÀãñx<Çãñx<7(,<Çãñx<ÇãñRÞˆA§[|v<Çãñx<Çãñ)êÀÄC^lù <Çãñx<ÇãñxSo˜>E8Í‹šÆÀãñx<Çãñx<Ï3Ò f€àñx<Çãñx<—òF^X–"üéÿ Çãñx<Çãñx<>’7"%*Ÿ7/jbÇãñx<Çãñx<ÞX—“]nò÷áÿŠÇãñx<Çãñx<ò7oþìx<Çãñx<Çãñ¦#d¡EžÙìˆix<Çãñx<Çãñ¦Þˆ´¾"Òd <Çãñx<ÇãñøHÞÙ1r<‘qIÇãñx<Çãñx¼¹7Ù 2úº <Çãñx<ÇãñøHÞ0ËI„n&iºÃ$Ç»Ó{6Ú¤öü œ|/ÛÚýåS0g®ÃÅR²ãδO<ŸÄ¾pÖl©“òÄãñIæè›FF:6Çã]ë+?bÌÙŸ5>æþò©ýÉEKãÏo }âñø$öÅ˶–0)O<ŸdÞ_q1¾idx¢Ât×<w•¯8üH‡?Q´¶ægLuyùt¿ý¶ó‰Ú'Obï•K4Pžx<>ɼ<Ã!-?l3É?àñx¼Ë½ó‰†±±±Š#rsùÌÎö 9\& ëf4Ð>ñx|RzÙ ”'O&oäEØÅ!R–Çã]î’hhÿë“n.Ÿš³Ïq¾LÖ&hŸx<>Y½ìŒÊÇ'“7ò"hÓ_0Ý Çã]å’híè(˜šéÚòézõÕ„$hŸx<>‰}±B¢òÇãñÉá¼yˆüÈ¿ƒÇãñnö I4ŒU¢;˧ k¦¯¯/Q3hŸx<>Y}±òŒÊÇO^o˜móí° <w¹OT¢¡ãïϺ³|ªN==!Ò°t‚ö‰Çã“Ï+- üñx|x#`¶CZ¤DEø?áñx¼k}¢ £ÝÝù™Y.,ŸŽgŸKHŒ/ }âñø¤ôÒ›ARþx<>y¼ž„È‹zjÇ»Ü'*Ñ066VuÊin+Ÿ‚©™£]]‰J4Ð>ñx|{¥ã-)<ŸÞÙ¿!–§Ããñx7û&:^|ÉmåSyÌq‰*€ ´O<Ÿ„^i3HÊÇ'7Lÿ9ú³àñx¼›} ¾¾¾ü³\U>k"‰Ú'Ob/½t‚òÇãñÉãHTŒ/½È‹ú2x<ï6ŸÀDÃØØXõŠ3]T>éSFZ[U?¿ö‰Çã“Ø‹/ üñx|Òx#:Š4YÇã]ë›hè|õU÷”OÅM`Q„, }âñø$ó3(<ŸÞOKDHZ„ÿ/Ç»Ú'6Ñà(˜5Û%åÓúðÿsC¢ö‰Çã“Ò+Ìh üñx|rxÃÊS¤[|I<O€Ol¢all¬æœ¹¢|6H®«Kl¢ö‰Çã“Ø+mIùãñø$ðFtýŸðx<Þ…>ቆ®7ßtCù”î»bË!|éíÇ'“/Ö9Þ’òÇãñIà JÇ'™Ox¢Á74T0gnÂ˧å·÷%¶ ´O<Ÿ|¾Xy3HÊÇO^oP"x<>É| cccµç_ðò,+sÉŒÚ'OJ¯—h üñxüd÷F^dã3âñx¼«¼ Ý3Øò)Ùe·„BƒÙŒÚ'OïÌÒ ÊÇOFoäY|F˜ÑÀƒ“ôaŒÁãñIæÝh«»ø§ ,Ÿ‚&hŸx<>™¼“‰ÊÇO.ÏŒ9¼ó3(<?Y¼ö !O”;Á àñx¼»¼{ ~¿¿hãM.Ÿúk®uk¢ö‰Çã“Ê &(O<ŸdÞ˜Ôi<¸'Ñ066VíÏ.ŸÞ?tùŒÚ3O¯4£òÇãñIàñÎ £Ñ“x<ïNïªDCßçŸ;Y>…‹–ø}>÷$hŸx<>‰½ê ”?ŸÔÞ ¹!ðx<ÞµÞU‰†±±1Ï[:V>u?½Ä=o<ö=hÏx<~2z ”?Oo„¤("å-L³x<ïB_î²DCà 7:V>Ý«V¹3Ñ@ûÄãñÉçÅ÷h üñx|Òx#×âb <w¹wÛŒ†þo¾q¦| ²çù‡‡Ý–hpûÉŸšY8w¾gó¥Þw.ÝwÿòC+;à{%»ïY¼ýŽž¥Ë oT0;;/} ý+ºÏŸšY´dãâm——î½où!‡•xPé{y·ßѳŖ³³)|$©z·ßѳtYѺèÎø=j§NÐ~ðxüd÷F¤•¹‘ÿÇãÝìÝ–hólµåSsîÝ5•cÝŒ—´Ÿ‚ÙÙ¥{íSsö9M¿úuÇ /öûíHk«oh(¦DFG‡ëëû¾ü²óõ×[ÿøHã-+kÎ;¿t¯}ò¦f¦lÌŸšYqø‘M·ÝÞñò˃ÅÅþÑÑ(8ÚÕ5ŸßõÖ[­¿ÿCõÏ.Þr+Æ«Tó³³Kâî€]a0±ïWcÚOoäEÍXÄ|ˆǻŗ»/ÑиòVʧëõ×]˜hHl{(^¶uÝåWt½ùæpS“Æ{ô ö}þyë®9ûœâ­·ÍÛ ùûWþ†sj/üIçk¯öôÄSt#ÍÍíû{å±ÇçM™Æø–¬Þ±X¡j¿_ñ ´<Ÿ4Þˆ}F^„ÂãñxWyÎhÈËÓ.Ÿü™úÜ–hHH{ÈËšYyìñ­ÿ¿ÁÒR‡ßòpCC˽¿)Þf;ÇÞo÷»ïÕÖ¯{ ÿ!äŸLÿr¸¶Ö³éæ±ÄS²Ënm>æëí•-´‘¶¶Ö*œ·Àñ¡ûÝwm”O¸¯8êê·þúŸÇOôø[|ÈÉñ9ßб÷«tê×w<ŸÞœö-]‘ò2x<ïNïÂDÃØØXñòT˧êô"qúý~ñ ޵‡âm—¯ù듾ÁÁ„WwχÖœw~þŒYÚí¿?7W`iÏÒeÑã)Ù}ÏžÿþWµÄFÛÛë¯ýYî”iªãƒHqUž|ªí¹é×wˆDÛþô3ÎŒÏ.ì€ÚãG>ÑÀõÇ'‰7ÂçBDYŒa:wÇã]å—NŒöôøGFDžªéö_©–OÇó/|·ÜÚÚrÿJÇ[ª¶‡Ò=öê|å¿ÏçªìÒhwwË}÷ç͘¥×þ¥ ‘ž¿hÑ’5?áXÁ–”Tžp’Þø •h¨:ùTÆ7ÁDƒöøìæ˜oÖ¥êKïÔ ®ïx<~²{ÃLg„ü9ü5ðx<Þµ^pFC÷;«ºÞxCfõ„Ç£W>yÓ¦vwÇäšGk¾ç^Ù¥Úí¡ìàC\u¨gøÏPUUÅQÇ(µ‘OÎEK—™>õгDڕ寣ß¿pñFýEzFƒîø&;£Aiü)Ÿ °ü¨c”êKãÔ ®ïx<>9¼‘y•E®YÆÇã]îË% ïTŸõC©góî²›RùTw‚H„å"›hPmù³fw¼ðâØ$ùiö¹‚‹ÄÛ¿àŒ† çOËh¾÷7 ,®ÁââÂ%‹·Ù Úã›ìŒññvÒuÀ‹ÄëË£6£ë;ŸìÞˆ2)Âô©ñx<Þå^6ÑP0sC©Ýïšï¾G©|ÚŸ|J`µººÜ´ ñDƒR{ðîºû`IÉØ¤úik«:éÙö/¸GC^À¹Ý3ðâ,))ÚxSÙö#;£A{|ŸÑ ØK&y”ª/¥¥\ßñx|x#7lç†È'dfb<w§—M4äéíÏ=/óÁ©¬L¥|2¦Ž¬Yxk·¦×X:!Þê.¹ÌmGlÄøã©<á$Áö/”hØjý3gfõüßÿ¹¤¸ËÊŠÖˆ!Ò~g480¾‰o)Õë.¹t’w@±úß ’ë;Oo˜Ÿ ä<w§¯N4T¢Ô–î¹·øû-?ôp‘ØJöÙ/O:Ñ ^¿“j¶¶éop°üÐÃ¥Ú¿Ô ß=ÆÔ®þÓ] ì+*Š–l,Õ~g480¾i,ˆ³½%eŒ§¾Äg4p}ÇãñIãÃg4dDÚU2daǻӋÏhÈ›š)2e`ll¬å¾ûÅßoÛ#ùêxíókÎhˆ÷ýæMÍìýðñÉÿãëí-Ûï‘ö/›hXóÔÓ.,®Žç_ê/¢3ÔÇ7ñDCœñ$S,Ýï‘úÒØ£ë;OoD9¬Ât¾Ç»ÜË&¾û0ÿØ_d¾ž­®ÎÝ@ôý¦e 74ÄXóÝ÷¬}B¥Í EÞ¯ÈV.ùíèÜÔvùîÑPsáO\[\eßû¾HŸÑ :¾‰/ˆ3ž$ë€%1tÀ ËGüÔ ®ïx<>i¼}'ÉðÇ»Ük$Ê~p¨ØG¦àoÒâ|¿¥|O$*ïN»¬}Bñ RõÛpÃcÉõ3PT”;eZœå#5£¡hé²Ñž×–UNNnú”øû‹ì©Úã›Æñ–¶ãIÖg}É.àúŽÇã“ɇ,ÈȰ#Ïl¿<w¡ߣ!×HÏMË®¯—Y=ñÐïßoË¿¸áÎÏ~µ¥q½ßÊ“NñûýcI÷SÝõq–ÌŒ†e[÷~ô‘Ë˪öÒËâï/âÇ[ªŽo¢K'⊧*y;`œõ%¾$×w<Ÿ4Þ0M?äšÿšùÔ<w•ŸÑ°öù[~÷ Ès××ç¥eH½ß¡ÊÊøCj¼õãϬºtÂÞûõîº»Ô £®›¿ÝÝ]0w~<å#òɹï³ÏÜ_V#mmÙóâì/²K'´Ç7í¥1ÆS’2ÐFùxf4p}ÇãñÉá[8Dû<w³/טÑ`¤—îµØê‰ƒy¿%»ï)g«mÆŸS#ÑWýfL(*ræS‡opp¸±Ñásûê.¿"žò‘úä<)~ê.½,ÎñÁS'Ç7¥DƒµxR¬Z-¥Í ¹¾ãñø$ðFt}IÇ»ÐW¨ÌhHÏ5ÒKKEž¶õˆ¼ß¦;ïø6û«¯Ÿ_ïÔ {ï·öÒË´Vh¶þááúë^uúŠÒ½÷-\¼Qî뮎Ógn¼©w§]ʾÿƒê³ÏiûÓŸ •ÂèûòËxÊ'¥ Ýï½çø ±GƒÞø&žh°ó0×HÏè€5Žt@Ûå#>£ë;Oo˜Îˆ2)Çã]î¥g4dˆÁ8ÒÜœ›>%þ÷+òMcÀ6≆ã¬ßü 猴´È´øüóÊOÎÛÀZ<%»ïÙñ‹þÑQñxÖÎ(±×R*Ñà)ÌžÏø 8£ÁñMöxKñ(w@kñ”ì¾—^´]_zÇ[r}Çãñ“Ý+.ò&Êa„¬ÐÀãñxz=Ö>ñö;J=sù¡‡Çù~½Ëwøäæóm²YàókÌh°]¿õ×\+þ•xÙ!‡ÅÓÞJøÞpc£lT5çœk;žD%|ƒƒÃuuý«W÷¯^=\Wçræu«Ïýq<ãƒÒŒ¥ñMiFCìñ(uÀxÊG£VŸó#ÛñxÔNàúŽÇã'»7r'šó`šÃÀãñx×ú =¾[¿zµÈ3·=ö—8ßoãÊ[ã£çÃCž_i鄽ú•ý¸çe<í­p£MdW­·üîAÛñ8–híêêüÇ?j/º¸x›åù³f‡G’?;»ìû?h¹ïþâb½0:_{-žñA|3HÕñMoéDŒñhtÀøËGµZGáÔ ®ïx<>I¼1af"ÊÆ’x<ïB¯4£aíCê0ù‘¶¶ÜŒ©ñ¼ßþo¿?ŒÚ€Ýõ” ¶ëWj«Ëï>äܲR°½︳à–u=|`; ýß~[~äÑ!Í5zù”ìµOß×_«Ì¤èïÏËši{|P:uBi|“]:a5¥(R>âÐv<Å:3¸¾ãñø$ð†éœÓ?G™#Çãñîñ¢‰†U!Ï_´ùR©óä+Ž>Ööû-ZºLdÅ{Á‚E!ϯ:£ÁÒûm¹ï~±ÿ÷âí­þÚë¤Âª¨°j¢a¸¡¡æü rÓ2ìôÇô©uW]­q‚@ÙÁ‡Ø¤OÐß´g4DG¶Š—Oýµ?ï€6âq`é×w<?I½¨'ÜF2äÙñx<Þ…^|FCÈó÷~ô‘È“¯yêiÛï·þg׉¼»ðç—>ÞÒ~ýö}ñ…Hþááâvooù³³¥>E¬Yc;½DCß×_dÏ‹³?Vžzºßç“ ¬î§—ØŽGc½ñMáxK ñht@Áò‘퀶ãQM4p}Çãñ“Ú–fDÄøÀãñøzÕ¥yFzÝe—Ë,zïìÌ›šiïýö~òIüÔœw~ø3kïÑãûÍËšé £ãÅ—”Ú[ç+¯È|µR¢¡ï›oÖfâïõ×]/[¤--byh/ߨ£!â X([>tÀ ãQ:u‚ë;OoXyº ‹/Çãñ 𪉆\#½`ábÿȈÌÇ•N²ñ~ —lÿò ßÀ@þìì„'"½ß²ƒ‘ £ò¤S”Ú[Í…?ÛnÆ,{ñh$ M³ ¶ûo÷»ï †×õïÛŽÇ™=¤Ú›ó‰†ñxd; Rù8֣ģ1£ë;O)Ñ`í5ðx<Þ=^:Ñ`O÷ÛoË|xö9ï·öÒËâéÀÝûM4Äô~뮺ZlÚÈ´éJí­âèc¥Ê* éc-DCÙ÷ ÛKøž`xƒåå¶ãQH4(ŽoŽ$2Ýí—N´“{4p}Çãñ“ËO2¯=£!×H¯þѹ2wá==yÓgX}¿ÝÿùÀ"ó3V˜>¿f¢ÁBýJmD×óþûzíMp[þüÙÙöâO4t¾úªFÿíyÿ}©ý>_lŸ]3”g4¨oʉ†ŒDwÀxËGºÚ‰ÇÁD×w<?ɼÃ/gX|1<O¤×L4|÷êùΑڇ¬òÔÓ-½ß‚y â_¸1ÚÓ³îŒÀ å 6ë·ãùDbhýÃÃzí­h“Í•¿P8ÙDƒohȳlkþ[yÊi‚q®Û\Ðr<ÊK'„Ç7…DC¬ñèt@áò)Úd3éh9ÑD×w<ŸT~ýŒ†œ°ˉüOx<ïZ¯‘h§ãå—evJ{éeKï·æü „–l˜?¿ÆŒõÛûñÇ"1Ô^r©^{óR¢!öxd k÷íÓè¿ùΑÚ\pll¬ü¨cìÅ£”hPß”f4ÄlT*¥h)Ù \ßñx|2yÃ⼈ <w¹w`éD®‘^yò©2ß!÷õE؇Ìüýv½ùfü/Zqü‰‘ž_m鄵ú-Út ϲ­£>¶‰ú¿ß=ÊV¾½UžzºÜ眹öâ‘M4T­8S¯ÿöüïbqžv†½xœÙ Rª½‰&¬ÅÖ·±×#o²(P>š0ÖxÔ–Np}Çãñ“Þ9fyˆœ—5QÇãñn󲉆HñäefvvÊ|j:ó¬ßoþ¬Ù¾ÁÁ8_ndÍšµÇjš¾\“\¢¡>x†äkoõ7Þ$ø…ª½x ¾ÁÁüY³õÊS°¸jλÀ^<‚‰ڛ쌆äÿ: Õx \ßñx|’y#Êä‡(™ <w­WžÑ°>ž5O>%³ý^ÐÑÞoÕ™gÅÿrk"JyŠÏhHÖö–—™5Ÿ¯¼GÃÄñ&ºÞzKµ<Ë;B*Ôº+®´þŒÉö¦±t"iú£R´O‘ðŒ®ïx<>y|È ÑW_ä„þÇã]çuf4˜Ä#õB¾ÁÁü çÄò~;^Ø¢üÐã”g“Ö ÉÖÞZÿøˆàš…ñ™ÛVãL4Ô]~…jym¾T¬iÝt³½xÄ ªíM0Ñ|ã¿lÌ Ý£!Öx”–Np}ÇãñIà ÓùQŸÇã]íË„g4DŽ'cÚpS“È UÿèÜ ßo^f–¯·7ÎnhÈIŸ¥ay6 /p]ûÉŸ¿°d¯}ªN_QÃmü©ëí·<_ÿXBògϵ÷~¥>9·<øåßöÈŸÄ×XŠGpFƒíYv3H—ŒÏní€ÙöÞo‘ÖŒ®ïx<~Òû ã-s¢/ x<ïB/¾GÄñ ˆ¼\í%—š¿ß´Œø·(*Š¥<›uŽ·LT{(X¸¤â¸šî¸³ó7òóG{zÆ\ùvº^¬ïWê“sÓw9Ð[î»_zwCkñhìѠמõŽ·t¬?,\¼¶vMªûû•žÑÀõÇ'7r¢.ºÈ úŒÈ9 <w‹WÚ£!J< ·¬y¹žÿýÏôùK¿÷ýøŸ¼ñ¶Ûc)OÙÍ oyY3K<¨þºë;^|Ijû ‡gn[z¿RŸœnºÙþÛtDzŸœ­Æ£·GƒF{n”žÑà@œ¼ÐÞû?u‚ë;Ooä˜o™‘3Á&x<ïR/=£aâx¤î5ý>ßÚ#Cž¿åÁ‡ÖMl»<–òT8uB½=dÏ«>ïü¶Gë_½Ú?226 6½·V>RŸœë®¼ÊþÛ¤s^cìñÎhp`|“Ý£A¯~ó³çÕLò˜Ð-•gÙ6J{4p}Çãñ“Ý9¡ó2Ìr&ù <w§×›Ñ%žÞÏ>“þ¼·þù‡ª«ã|Úþo¿±<Å zí!73«ê´3:_Ý7446ÉòggÛ+©O·žèõ_ó-Å#:£A}|k”ߣA²~“¬Ú+å=¸¾ãñøIì³%![;îñ€Çãñ.÷z›AF‰§îª«E^±÷ãCž¿dϽ&ÆßpcŒå)¾¤F{(ÚliÛcíêK–Ÿñ%âVËGì“ó+è¿Ò›XŽG|ÕñM!/#S¿E›m‘|Ð^ùˆ.àúŽÇã“ʦË-r‚SÑiàñx¼«|¹èŒ†ã)\²±tT`õ„ß_´Éf²›&øýþÂͶˆ±<›Ž·¬ß¼™6Ýy—o``,¹~Æ—ˆ[-ÕMÄûo£ôZ«ñÈž:¡=¾5êoOý&q´W>Ñ \ßñx|2y#ä—M7Ì Ë^àñx¼k½Æ©±ÄÓýÞ{2~v]àóx½ñÎ’øä“ØË³Y:Ñ V¿i5\8ÜØ8–Œ?ù³çÚ+ñDƒjÿÕüäS<²Å¥=¾‰îÑw<)Ðm”O‘ôf\ßñx|ÒxÃ4ý¸¾"Ê’ <w¡/“ŸÑS<5\(ò¢}_|1þüÅ;ìÿÖ]qeìåÙ¤°GCüõ›—9£óµ×Æ’÷'/hFƒ…òßÝPµÿêíÑc<²Å¥=¾5*Wìñäff¥B´Q>J{4p}ÇãñIà³_OT„œcÇãñ®õeÒ3bŒ'?{žopPäu‹–.ûî“Æ/owÝÄèhá¢%±—§ôfõ[0w~ïÇ»í“Iï§ŸVœp’ìÒ å#hÐí¿ Ç(X‹Gvé„öø¦±GƒxòÝÚ+å:àø VËG:ÑÀõÇ'7rÂ~!'83‘!ŸÇãñîôâ{4ÄÔ—~õ7Þôݰ99ñæJÞ{ÏRyÊÎhˆ¿~ 7Ûb ¨ÈUŸpËË«N_‘c¤çÏ_(8sÛ^ùˆE¯ÚÅ¿¢·Æ zã[ÓÝ÷HåelÇS”p|J‘ÕòQÚ£ë;Oo„-«ˆ¸ÓCø ™x<ïB/}¼¥…x*ÏX!³zâÛo¥Nh¯¹ð"Kå)ºGÃqÖoÁ¢%Ãuunølãíû⋦{î-?ìˆÜ©™kã”ýœc¯ý˞רÝ•–NÄì©Úã[Ëïÿ 8ÄF<….ë€Í÷Ü[vعS3¿›D&™é˶W_K'¸¾ãñøäðFÈÎ 9¡™‰ ӌǻÖkÌhˆ1žÜ¬™£=="/íÙf»úŸßç“ø††òæÌµTžâ3â©ß®ý+QlF{zú¾þºýÙçy[Åñ'ž 1¤ìç{í_gÓ­þ+º¤x”f4(om?!>£ÁR<îé€Á›˜dhdúìÕW‘òŒ®ïx<~òzÃt D Šô7x<ïN_.=£ÁR<íû»Ìt€[ÑûÙgq>IçoX¿Ya3H{õ[{ÑÅ}Y:<<àõv¾ùfË﬽äÒ²C+ÜxÓXÚ[ÎŒKõ¥±¤^ÿÜ£Á^óé,°Ò \ßñx|øã-3"í0™c~|Ç»ÎËoi#ž¶?ýÙ ‰†ö^´QžMZÇ[Z¨_ïÞûj¤꯻>/k–`{ÿBÕF Ô4½([>zÇ[ÆGxF×w<Ÿ<Þˆ"r'z:<w¡w`† âI˪­Mðº‰ŽŽ¼iÓm”§ÆÒ kõ›1u¸¹Y*ÿÈHù‘G+µ·‚6üœc/¥zýWi†Øãéû摚î¼K{|+Úd3±ÉMa[ZD‹'cêˆ|Tÿe; ½xtf4p}ÇãñÉà S2ù!ú: <w•/“>uÂF<Í÷ÝŸØDÚ'Ÿ²WžÍò3¬ÕoÅÑÇ –CÍO/ÑkoE[o«ð…ªµx6ƒTì¿Ç[ZЧçÃexêiíñ­ì°#ÄFƒ§Ÿ‰=žrÑXûÓKõÆÁ˜ÖcŒÇ³lñD×w<ŸÞȉ!-aiÖÇ'Ö«.ˆ1ïn{$6ÑPvÄQöÊSsFCLñ´?ûœTÍ÷ݯÚÞ¼{ì%:£ÁN<š3äûo£Î ±ÇÓõï‹ÐûÉ'Úã[ÝW &bDZ{“í€öâ)Ò9u‚ë;OoLøËáÙ <w³×K4XŠg ¸8QY†áææœô)öÊSi3ÈØëw¤­Mæ£àÇç¦MQmoÇŸ¨ºGC,ñ(m©Ôe7ƒ´OÇK/‹0ÒÒ¢=¾µ>ò'ñ¥±Ä#Ø–ÐÿÅ; x \ßñx|’y#òSXK]àñx¼K¼B¢ÁN<·Ýž¨DCë±]žz3b‰'wÚt©W¯>ï|íöV{É¥:‰ ñèÍhÐè¿NÎh0gÍ_ŸT¨2•ñm°¬LuFƒi<:PküWë€âqlF×w<?é¼a–œÈˆqâǻЋ&VَdzíòD%J¿÷}Ûå©”hˆ1žÂÍ—Š¼´o` oÃ9Úí­ùÞßÈ-Ÿk/ñ=Tû¯^¢!ÆxZþð°X/ûþôÆ7ïλIîØb²¥…y<ÒPwüW耖ãQJ4p}ÇãñIà ’.x<>ɼÎÒ ;ñô}ýµóY†¡êêœ ì—§#3"ÆS²ïþ"/ÝŸ—ç@{ëùàµ/TcÇ‘ bý7A3ÖÇ#ؼ›î¹Wo|“Cqe(w@•ñ_³ÆO"f4p?€Çã'‡7bû… ‹/€Çãñ óÊ›AZˆ§þºëO44ßÿ@<å)h°V¿'"òÒÝ«V©··)Ó|ýýúŸs&ˆG:Ñ Û ÖâiXù ©*ëÏÉÑßúsrt Ä£ÐÕÆ•h9éD×w<Ÿ<Þˆù3,¦4ðx<>1^ÿÔ‰Xã)Üts¿ßïp¢Á»Ç^ñ”§ÚŒ†˜â©½ô2…¯pUÚ›Ôw¿ë>ç̵ÚŒ•þ«3£ÁB<Õç/Xkm¢1¾•t°ì˜`6£Á<¨2þKwÀl{ñ(ÌhàúŽÇã“ÄkÿgõD¿¶:øŸðx<Þµ¾T8ÑW<‚“{cùðzã,OÑDÃVëWヨR{k{ô1Ï9ÖâM4¨÷ß„×oÉ~ÖZãm·Ëoi}ß|£“h˜8ý)'býQ¡Ú‰§P:ÑÀõÇ'7"ýòj‹9 <w‰ŸÑO<5ÿÔÉDCã¯ïˆ³©¼1á\ˆÕæY <w©W›Ñ`3ž®ýË™,Cnnüå©h°Oå+D^Ú?2’¿`‘R{+Ür«ÑÎNÙº3›ÑS< ‰Åþ+›h°OÏG Vœ¯¯¯x¯}Dʧ`ÉÆ^¯ÆÈ<$Z<²Piü/Ré€síÅS´l©¸¾ãñø$ó†Ùïd˜ÎXñx<ï"/šhXɼi‰EÈŒÕfi <w¡/ÕY:gü¥‡¦w—\sñ%Rå)¾¤Õxr3³F{zTæ}øý=|PsÁ…Þ½÷-Ø|infVx<¹Y3=»ìVµâ¬Ö??:TSãØGÁªs~d¯¾Ä7ƒTí¿Ò{4ØgJæHGGJ%b/ŸåX}Á…Þ½÷[×CãÉÍšY¼ËnU+ÎlKL´ÜþE—Np}ÇãñIå´Údv„é>x<ïR¯°GƒDüéS”–dû‡‡óçΗ*O…ã--ÇÓñÒËÎ|ºíìðzû¾ø¢?7w°¼|¸¹Ùï÷'ä£`íåWØ«/…ã-û¯øf¶ãiÿÛßSmFCìåãpìuG´×þe—Np}ÇãñÉä ³2"O–ÈÀãñx—{ÑDÃ*Áø[|Hã¹ë­·ËScé„Õx*ÏX1–b? +a¯¾Ä÷hPí¿â3lÇSzÐ&EÃ,-*. å“ÂÐrû=Þ’ë;O*o„œH±:ø)B6–\v‚Ç»ÍË.Œß»÷¾z“~¥ÊSãÔ Ëñ¤e8p柫~š~{Ÿ½úÒ8uB¯ÿÊ&âŒÇ±ïímÿ´¿ðbÅɧJ-°P>©Úm´ÿ"=¸¾ãñø$ðÆø<‡Õæë.B6“LÇãñx—{ñS'ã,+“½?öõ÷çÍš-Xžâ{4؋ǻ÷¾‰šDŸ¶G³W_Ò‰Ýþ«h°OÁf[øúû]Û$†ëëó³çI%¬–O v@{í_z3H®ïx<>y¼ò !I‹Õf¿ŒÇãñnöeÒ3ão¼ãNÙû㎗_–-O…=lÆÓúèc©ó9§ý…íÕ—Â ŠýWöÔ‰øãiøåm®meGµÚHœÑ`µ|ÚR¬Úkÿ¢›Ar}ÇãñIåðùá‡X/ºÀãñxW{éS'$ã/ÞqgÙûãÊSO—-OÑDÃñÄ“?wþHk«Ë?Ÿ ˵4;õ%šhPï¿â‰†8ãÉÍ̬¬tãLþ»ïY­ÜŒËå“?wA*uÀUöÚ¿è \ßñx|Ry#`eEFHZ"nî€9Y3sŒ ©˜—=ÏFù(œ:ÁõÇ'‰7ÂϨ0ÝF2ìðL<w©/U˜Ñ ÑÒ­¤vY+;úXñòT8u"Þú­8å4ÿȈ{>áøýþæûX1umxíÏ=/ò´¥‡n£|NP쿲K'Ç“ò£õ $>ËðâK¹S§,¸tÂvù¤N´3ž/ÛFpF×w<ŸLÞXm6çÁôÌÕaç[àñx¼ ½h¢a•Fü½l#­­«3¦Š—§ÎÒ‰xë·òÔÓ]òµêPmmé!‡Æ/õá9쎘ÊG6Ñ ÝÅ—N¶ÿÒÃLà!þÑQÓþ";£ÁvùT¸©–rX`ü‚ÐFù*oÉõÇ'‡9Þ2ÃtÇȰùx<ï^_*}ê„xüµ—_l­~T£<ÕŽ·Œ·~=»ìÖ÷å—‰üÕç[óÔÓyÙóBâ/;úX©9ó6Êçÿ·w?1z”uÀØ1Eb( !h°ˆ!õB4QÄ?gã=iГ(¨7=)œñ¨‰ NœÛëû¾ÝÒmAЦÑÒBKÚšF,-%vywæy~Ïìnv¦ÔÝÏ…¼3ó™y'Ónúå÷û=£-o9Êû;ZEÃ0?ÿ‡ï½ïí£G/ýÖ…'^ýú7ÃûmyË ?ŸËçÌîÿïC¾€~>c ~¿ó<¿5|êY¢ÿ¢<Ïó—§?<Ö0ÈÁîÿÀΛÞ}çÍúÞ{ßÏs„å-‡ûó½²9úðß9{öÒÿ#çÌîÝ/ßyWxÿû¯¹vÿÙ{ñܹ7ܸÑç3Âò–#¾¿ÃÎhãçÿU×{ì§—ìgìâÛo¿ñ«_¿xÝõµûayËM<Ÿ+›£ÿàý~óûúÜØóºuÂïwžç·ŽOEÁC~.7yžç/O?xEÃ÷ÿï^ØÌ?ztß•ÍÏsŒÖ‰aÿ|—n¹õôŸÿòîÅ‹—âßo½uêüÛ=_ì¿ÿ³{ö òuÇ}l£ÏgŒÖ‰ñÞßÁ+FúûdiçÍ'ŸúíæÓÀþA§Ÿ}öàm»úïgŒÖ‰M>ŸKÿ¾rÏ—úïðpýÏgðU'ü~çy~Ëø´¯[ö°/*~ˆ‚ žçùËÔ¾êÄ÷äÁ‡6sco<þÄHÏsŒŠ†1~–>~Ëk?yôÜáãü#ðÂ…³{÷þó;ßÝÿ‘®ç~ŽýìçCõŸ/6;6ô|F}Ç[ÞrŒ¿O}öÎÓÏ<3ø‚ç_ýõ_üòÐ'o[Ïý ; rÀçs _ÀµïgØpCÏgØŠ¿ßyžßJ>eó*±D0ìçyžçßgÅÂ+_ùê›OÿþÜáÛ\ËãÂÉ“gžþØ#?~åË÷.^ý!ÏŸ_©ÌÿðuGîàÌsÏ]8uj“UHoþîé|ëÛû>°cë<Ÿ¡_À׺/ ŸOžçùÿ_ŸÖ,ˆÒ žçyž¿¼ü‹×]ÿê×¾ñÚ9ý§gþ{ðàùãÇà ß=þüñão--ݳçÌ_wŸüÍ“G|èЮÏxžüþŠ…—vÝqäþÞxü‰3»wÿg:½pâDß¿œO:»wïÉ'Ÿú×÷¾ÿÒ]woùç3à èççy~ ø´X鯣‹püÏó<Ï_ž~qÇUvÞtèö;^¾ûóoýÔþk?âùðúÅWøØÎ¥OÜrðÓ·¿t×Ý/î oÛuà†?xµç³ü|–vÞÜ~ýüð<ÏoŸÊ“{ŒðÏó<Ïó<Ïó<ÏóüJECëÀš¡Eÿ&Ïó<Ïó<Ïó<ÏóÛݧJĺº2xžçyžçyžçyžçÛ>­;¢XcQMžçyžçyžçyžçù´¸®+®^Žçyžçyžçyžçy¾æS÷ä5j$Š/ãyžçyžçyžçyžoU4Tt•£&yžçyžçyžçyžçûf4T“‰J€Áó<Ïó<Ïó<Ïó<Ÿûԫ矛õ]çyžçyžçyžçùmíS”C4³j½ÄÏó<Ïó<Ïó<Ïó|ͯ³ubC xžçyžçyžçyžß¶>ÍÞû4«ÖEtñ<Ïó<Ïó<Ïó<Ï×|ª3‹“‰†çyžçyžçyžçy¾æ³Š†¦+û‹ ‚çyžçyžçyžçy>÷©7–ÈSеb žçyžçyžçyžç·µOó’³n ¦­ý<Ïó<Ïó<Ïó<Ïó¹OQ8±2Ô!*–hxžçyžçyžçyžçk>eE7‡X#9ënò<Ïó<Ïó<Ïó<Ï—>e³ÖjÃXàyžçyžçyžçyž¯ùŠY±ÙÎ'xžçyžçyžçyžçCŸÊ‚‡vD-›Éó<Ïó<Ïó<Ïó<ûÔí¸è´U”}E‡Ïó<Ïó<Ïó<ÏóüªOí²‡nÑtãŠ&+™àyžçyžçyžçyžÏ|ÊÆ9dƒ%Ã9“<Ïó<Ïó<Ïó<Ïó¡Oåh‡n9D³¯ˆ(xžçyžçyžçyžçCŸ-oÙ̺ÿÅëdò<Ïó<Ïó<Ïó<Ï>e™D9Ñ¡\Ç‚çyžçyžçyžçy>ôiKDƒ‚e3yžçyžçyžçyžçk>e}í b$ Ïó<Ïó<Ïó<Ïó|ͧ,~è™ëÐÞÃó<Ïó<Ïó<Ïó<_úTÖ[’çyžçyžçyžçy¾ô©HtÏ/G;4Y€Áó<Ïó<Ïó<Ïó<ßö©7™¨<Ïó<Ïó<Ïó<Ïó¥Oa£Eqfß×ð<Ïó<Ïó<Ïó<Ï/›åµ“›JnÁó<Ïó<Ïó<Ïó<¿4ôdáEyžçyžçyžçyžçcŸzû.šþ– žçyžçyžçyžçùöÎÔÚ/ÑT‚ žçyžçyžçyžçùܧ"~X×xIžçyžçyžçyžçùÒ§z DZLûJ&xžçyžçyžçyžßî~uä2š¶Ï?O£¯áyžçyžçyžçyžÏ|êÍ*ÚÅÍ:² žçyžçyžçyžç·µOÓîv7‡Èö4í<Ïó<Ïó<Ïó<ÏóÙÑ”UA#â ‚çyžçyžçyžçy¾ô«­Ó ³¢‰â žçyžçyžçyžçùØ/ƒl'ˆbšG Ïó<Ïó<Ïó<Ïó|ͧnÇE_Æ,2Éó<Ïó<Ïó<Ïó<ßñ©]öÐä­Š¹²‡çyžçyžçyžçy¾æS·Âa~xµÅ¢ 0xžçyžçyžçyžçCŸ* E\±P^”çyžçyžçyžçy¾mÒ´»«µYžÜtÏó<Ïó<Ïó<Ïó|ǧy&1í u/ÝiºàyžçyžçyžçyžÏ|ª÷iÖqåÂMmM žçyžçyžçyžçùlg ㇢õ",àyžçyžçyžçyžïøžõ]„M<Ïó<Ïó<Ïó<Ïó™O=!DÙ’1­ „àyžçyžçyžçyž_žÑÐD3šieù žçyžçyžçyžçùšOÓb®C%´ñ<Ïó<Ïó<Ïó<Ïw*в‡&C³Êžçyžçyžçyžçù̧°Å¢'¥àyžçyžçyžçyž¯ùTžVkɨ} Ïó<Ïó<Ïó<ÏóüòÑåM­þaàyžçyžçyžçyž_ šnD°Y^”çyžçyžçyžçy¾ô©·ï¢ºl&Ïó<Ïó<Ïó<Ïó|i–ƒ†f^öPœ&<Ïó<Ïó<Ïó<ÏóÏ*šYœXÔVËäyžçyžçyžçyž_õ)<<‡LV/Çó<Ïó<Ïó<Ïó§µk!²1’á×ð<Ïó<Ïó<Ïó<Ï/¬ “ Ñ"hɘ÷]ð<Ïó<Ïó<Ïó<χ>e»&E\ÑÝÓð<Ïó<Ïó<Ïó<Ï×|*…›eÓÏó<Ïó<Ïó<Ïó|Ò¤#ÙÚlY†Áó<Ïó<Ïó<Ïó<Ÿûö0Èöh‡²£)fNò<Ïó<Ïó<Ïó<Ïw|šÇÙ%æYÅ$hºàyžçyžçyžçyž|*Ö½\ˆÖ®h²ëò<Ïó<Ïó<Ïó<Ï—>e“$'Q3Ædu5‹žçyžçyžçyžçùšOÙÉÓVDQÆÝC<Ïó<Ïó<Ïó<ÏóŸ²)&ˆb^±•Fð<Ïó<Ïó<Ïó<Ïw|І:4eP‘ueð<Ïó<Ïó<Ïó<Ï—>MŠ%1[¡E~æyžçyžçyžçyž}*—¬(&:dE<Ïó<Ïó<Ïó<Ïó±O増ahÑžñÀó<Ïó<Ïó<Ïó<ú–@dƒ%Ã=<Ïó<Ïó<Ïó<ÏóÙÑ4)Ö¨˜Ë`ÆåyžçyžçyžçyžoïO=U“â„þª žçyžçyžçyžç·¹Oµ ¢§^‚çyžçyžçyžçy>ôiššIglC_Ä{ŸyžçyžçyžçyžçŸj­ÏÁŒžçyžçyžçyžçùÒ§V¯EÞz‘õc´/Íó<Ïó<Ïó<Ïó<_ú¬¢![*3¾Ïó<Ïó<Ïó<Ïó|èS½¢½®fÁó<Ïó<Ïó<Ïó<Ÿ¯:Ñ”ÇÂ=aÏó<Ïó<Ïó<Ïóü|šDËTL:µM÷|žçyžçyžçyžçùاVð‡EëEm“çyžçyžçyžçy¾µêD!Ê ¢d<Ïó<Ïó<Ïó<ÏóŸzC‹¦ò™çyžçyžçyžçy>ðiÒm«(ãŠIÐ’Áó<Ïó<Ïó<Ïó<øÿÃõú÷è(¶IEND®B`‚PK@NvL IÅ€ÛB¢$#H È ‚¬ºÄͦ;šIDÅG)Ê#õ=Y)Z–tQt%jøÏ÷s†Ãêñ¨zØ£¤Ñ’§ÔÜ©Û }“<ÇzUYư!¨õ°!÷¶¤ôp8¤RØ&5®¥E–ÝSc£–?GL¤@íe#Ñmí`¹:­ƒS½¨z&˜ggt)øB·£ë#YpŠ=ª@hžæ”ÌÚ`ö£LÁCðÒKßcýüþº…WgZÇ” % Ó#ë+º(–îyãêÉ;†=¼Áö€è£ô²wO€uÆ¢ó§ Ü£SC©BCñ‚ÔE–?$Ù:)Šoùº¼ËÊ,ÿ^Ñ)íj×3ÝŽ¡Ã5êä}]–Ð"r²íüP?{ŠKøý ¦Z“àp»œ9êá t{iÄÎjÇ]/‡]­B[…áQu.Âë}‚Ë•ÖçoR¤EzS¯ºÛi¦0$™0¸Ñ>ˆæÿDªP&‚^&â<LË?£¤GÝ5Ûè6q™;¯z …d‰?Ù`ÅB/$g>ŒÛ_Ž“d¾(‰Ã ¡ŸÑ;#Nö´þø_¬õ‘1”ZÝ~$F áKnJ¯+5ÞÐ*,g\’f]Eç[¯þPK@NvLòaÛ5 þ_OEBPS/nav.xhtml­œ[sÛ¸Çß÷S°ê³¢lÚi7©ãY¶³Þ&±Æ´7Ó'LYŒ)‚K€²µ~÷ˆ ©trûbãü!üˆû9¼žüü²+“=4¢àÕûÙ¯^Ϩ2žÕãûY+7óŸf?Ÿþpò§óëÕí¿ÖÉVîJeë‰*Z‰÷³­”õ»ÅâùùùÕó_^ñæqñãÛ·o/ú73ó£wP·Ñ/‹¼Þt¿}óúõß¼³Ó’äd ,× •”…,átu·N“uö۩J%ŸXÕ²òda²ÍO…<¨4/“'e!ä¼³çòPû¤âü#ùÏÉÂüHdÑåäç˨Ø>ѵ|§‹½ŸIžÍLŽÊãeŸTFYœž°dÛÀæýL—Õ5ôÏE%ž·™T9;½ ¬“;߆<¶EeQêŽ.ݪÈw$4;1oäó¢šËm!æ9ÏÚTrvz«3“;•™Ur«2“s›‰9FÆwu¡jö8¯ÍÀu &õQUæY[‹9«‹Ùéªÿe?„B•I]…Dý2éFw¹¾ýd¡zl }£:ϼyÒ•y.ävžƒEÅt¿«>üb²•œYˆ1Ù•^ s¶gEÉÔÄŠqiò“eŸ?>ÐwöëEÒÕnx³cfNéìž\ùlÌqrªªj†|óPçöÿ£‰öaWHÙu¡š0jÌ¿ò‡Ùiêô„©é¡ôäWþ0i&0CUÔõ¼ß[Uy5@©Q“«õ:¹±*bü3^Uuõ—¼›ß"ÛBÞ–ÐÌycZžëýïÉ»Ùö¿KxcZ j5ÀL¿Ua“Ô¡lFª°U¨Q±]¥Û±ûÞÒ ²Õ®1^Ôj5Àìtí2ƒC˜LÌ1X«JW²ÈìŒ]Fö¤Yty÷yu{uý9Uk»­2ì~¡w¿ežŸw½¨‘7Å”Gh®kÓÆc*:ÀÑ8+VePêvýªóHBó¶=é²i[×¼‘[èHG“K. ®h  if•ûÑ <«>„ cQ)ª"›²ÈôŽwT¦rõ¶#µ‚¦é-k0 ¡„åóå`8¦b©:ô³"l?FÒ$Þ›#À7bs°·ñ¤vwnš…å¯Y#â=T°´Øñ=ø™ém)£PÁÒL7ŽIã rUª“WÐÈÕYŠD s8¨±F Ú½ØA¬‘ˆ~GM©;ª*8 ƒ#‰Àëw—Õ™¯\ ˆñ4‘ä™bWeºx:TÐ4É9ÑG2–ë›Iiã ¤ÖéÛ)Ë,ƒZö×õr8¦¢©yîç€E†×,«ƒ#iƒÂè®ÜxJg’8¦gÞ(«Ðhõác¡÷È¡B¡]üÞ}nL ç’íŠ2èrc“Hêô,n_¯Ph*–‹aV °>Bõ(·elIÕª€ÔÙ$’Ó¶×u0azÍð®Ú¦‘ó¸£M ËÞt·™l‚Pö²(Á•×quíW×Èòiì¯Sª¿NGþ:à¯ÓÀצ$_›|mJöµiìkSª¯M_›’|m:öµé_›}mJ÷µú5˜~Ù4žà½uJóÖéÐ[§to޼u:Á[§¡·NiÞ:yët‚·N‡‰:‡Â+>Þ$söÐOŠâ‡”?¤qüRã‡èKl#Iª ÇYxŠw™½e;¸ån“ö&’Ó=v̆×8FêTª8ŽÅ^ñ°Ïwö)JiçðE¡X—oÓ“¾b¤¿Ö—ÎNÕØ±äöPöF÷Y÷6ê}úópo_TÉØßîõGÇB ³i¤C`èïžyˆ±Ð”¯Ü·§K£ ¼{´ÆAzÍ©íK«ªGß8Z,â™ú“ˆf,4Et¯–ŽæÓPÆs‹?|匽{Ïò¼¹·÷‚­fôŸÍt/PXö™Øæ$4o£´p(k¡)O5ÓY8R  iB»KG²šÒ—'”4gع8’ð<ý‚ŠG Mi›â~0B‰Ä],ñz é¤îYïbïÍ9A(`Y¯¦óC K)¸g˜4–À›Î£YFoa)µ›Ï¡…¥è—} yè1ÎÄr=£KbËG!¶Å––“˜ôöænu{w£c·™l|,Ó"ŒÉÇ‹ÀÇ ª±4'B'&õñÅç»O7KûÍK}£Î^,@÷³‰ Š€îIaèIaŠ'…±'¢'…È“ÂO #O DO ‘'¥Q”K1Ú$úAˆü Lñƒ0öƒ0ÅÂØbOÖÔÀëüéNîÍi_¤`i_݆ÚÕ=A§ˆ^"/D/‘ª„Ø Å ‚÷‚@ó‚zA£!„2ß${ì]ò;öûN0ß¶_Tlo¾|o>x²0Ÿñÿ/PK@NvLoa«,¤mimetypePK @NvL íA:META-INF/PK@NvL²ç”w«ü¤aMETA-INF/container.xmlPK @NvLíA@OEBPS/PK@NvL;#ù’°ÁT¤dOEBPS/body.xhtmlPK@NvLG3 ]z—z—¤$²OEBPS/cover.pngPK@NvL I CUPS Programming Manual

    CUPS Programming Manual

    Michael R Sweet

    Copyright © 2007-2017 by Apple Inc. All Rights Reserved.

    Contents

    Please file issues on Github to provide feedback on this document.

    Introduction

    CUPS provides the "cups" library to talk to the different parts of CUPS and with Internet Printing Protocol (IPP) printers. The "cups" library functions are accessed by including the <cups/cups.h> header.

    CUPS is based on the Internet Printing Protocol ("IPP"), which allows clients (applications) to communicate with a server (the scheduler, printers, etc.) to get a list of destinations, send print jobs, and so forth. You identify which server you want to communicate with using a pointer to the opaque structure http_t. The CUPS_HTTP_DEFAULT constant can be used when you want to talk to the CUPS scheduler.

    Guidelines

    When writing software that uses the "cups" library:

    • Do not use undocumented or deprecated APIs,
    • Do not rely on pre-configured printers,
    • Do not assume that printers support specific features or formats, and
    • Do not rely on implementation details (PPDs, etc.)

    CUPS is designed to insulate users and developers from the implementation details of printers and file formats. The goal is to allow an application to supply a print file in a standard format with the user intent ("print four copies, two-sided on A4 media, and staple each copy") and have the printing system manage the printer communication and format conversion needed.

    Similarly, printer and job management applications can use standard query operations to obtain the status information in a common, generic form and use standard management operations to control the state of those printers and jobs.

    Terms Used in This Document

    A Destination is a printer or print queue that accepts print jobs. A Print Job is one or more documents that are processed by a destination using options supplied when creating the job. A Document is a file (JPEG image, PDF file, etc.) suitable for printing. An Option controls some aspect of printing, such as the media used. Media is the sheets or roll that is printed on. An Attribute is an option encoded for an Internet Printing Protocol (IPP) request.

    Compiling Programs That Use the CUPS API

    The CUPS libraries can be used from any C, C++, or Objective C program. The method of compiling against the libraries varies depending on the operating system and installation of CUPS. The following sections show how to compile a simple program (shown below) in two common environments.

    The following simple program lists the available destinations:

    #include <stdio.h>
    #include <cups/cups.h>
    
    int print_dest(void *user_data, unsigned flags, cups_dest_t *dest)
    {
      if (dest->instance)
        printf("%s/%s\n", dest->name, dest->instance);
      else
        puts(dest->name);
    
      return (1);
    }
    
    int main(void)
    {
      cupsEnumDests(CUPS_DEST_FLAGS_NONE, 1000, NULL, 0, 0, print_dest, NULL);
    
      return (0);
    }
    

    Compiling with Xcode

    In Xcode, choose New Project... from the File menu (or press SHIFT+CMD+N), then select the Command Line Tool under the macOS Application project type. Click Next and enter a name for the project, for example "firstcups". Click Next and choose a project directory. The click Next to create the project.

    In the project window, click on the Build Phases group and expand the Link Binary with Libraries section. Click +, type "libcups" to show the library, and then double-click on libcups.tbd.

    Finally, click on the main.c file in the sidebar and copy the example program to the file. Build and run (CMD+R) to see the list of destinations.

    Compiling with GCC

    From the command-line, create a file called sample.c using your favorite editor, copy the example to this file, and save. Then run the following command to compile it with GCC and run it:

    gcc -o simple `cups-config --cflags` simple.c `cups-config --libs`
    ./simple
    

    The cups-config command provides the compiler flags (cups-config --cflags) and libraries (cups-config --libs) needed for the local system.

    Working with Destinations

    Destinations, which in CUPS represent individual printers or classes (collections or pools) of printers, are represented by the cups_dest_t structure which includes the name (name), instance (instance, saved options/settings), whether the destination is the default for the user (is_default), and the options and basic information associated with that destination (num_options and options).

    Historically destinations have been manually maintained by the administrator of a system or network, but CUPS also supports dynamic discovery of destinations on the current network.

    Finding Available Destinations

    The cupsEnumDests function finds all of the available destinations:

     int
     cupsEnumDests(unsigned flags, int msec, int *cancel,
                   cups_ptype_t type, cups_ptype_t mask,
                   cups_dest_cb_t cb, void *user_data)
    

    The flags argument specifies enumeration options, which at present must be CUPS_DEST_FLAGS_NONE.

    The msec argument specifies the maximum amount of time that should be used for enumeration in milliseconds - interactive applications should keep this value to 5000 or less when run on the main thread.

    The cancel argument points to an integer variable that, when set to a non-zero value, will cause enumeration to stop as soon as possible. It can be NULL if not needed.

    The type and mask arguments are bitfields that allow the caller to filter the destinations based on categories and/or capabilities. The destination's "printer-type" value is masked by the mask value and compared to the type value when filtering. For example, to only enumerate destinations that are hosted on the local system, pass CUPS_PRINTER_LOCAL for the type argument and CUPS_PRINTER_DISCOVERED for the mask argument. The following constants can be used for filtering:

    • CUPS_PRINTER_CLASS: A collection of destinations.
    • CUPS_PRINTER_FAX: A facsimile device.
    • CUPS_PRINTER_LOCAL: A local printer or class. This constant has the value 0 (no bits set) and is only used for the type argument and is paired with the CUPS_PRINTER_REMOTE or CUPS_PRINTER_DISCOVERED constant passed in the mask argument.
    • CUPS_PRINTER_REMOTE: A remote (shared) printer or class.
    • CUPS_PRINTER_DISCOVERED: An available network printer or class.
    • CUPS_PRINTER_BW: Can do B&W printing.
    • CUPS_PRINTER_COLOR: Can do color printing.
    • CUPS_PRINTER_DUPLEX: Can do two-sided printing.
    • CUPS_PRINTER_STAPLE: Can staple output.
    • CUPS_PRINTER_COLLATE: Can quickly collate copies.
    • CUPS_PRINTER_PUNCH: Can punch output.
    • CUPS_PRINTER_COVER: Can cover output.
    • CUPS_PRINTER_BIND: Can bind output.
    • CUPS_PRINTER_SORT: Can sort output (mailboxes, etc.)
    • CUPS_PRINTER_SMALL: Can print on Letter/Legal/A4-size media.
    • CUPS_PRINTER_MEDIUM: Can print on Tabloid/B/C/A3/A2-size media.
    • CUPS_PRINTER_LARGE: Can print on D/E/A1/A0-size media.
    • CUPS_PRINTER_VARIABLE: Can print on rolls and custom-size media.

    The cb argument specifies a function to call for every destination that is found:

    typedef int (*cups_dest_cb_t)(void *user_data,
                                  unsigned flags,
                                  cups_dest_t *dest);
    

    The callback function receives a copy of the user_data argument along with a bitfield (flags) and the destination that was found. The flags argument can have any of the following constant (bit) values set:

    • CUPS_DEST_FLAGS_MORE: There are more destinations coming.
    • CUPS_DEST_FLAGS_REMOVED: The destination has gone away and should be removed from the list of destinations a user can select.
    • CUPS_DEST_FLAGS_ERROR: An error occurred. The reason for the error can be found by calling the cupsLastError and/or cupsLastErrorString functions.

    The callback function returns 0 to stop enumeration or 1 to continue.

    Note that the callback function will likely be called multiple times for the same destination, so it is up to the caller to suppress any duplicate destinations.

    The following example shows how to use cupsEnumDests to get a filtered array of destinations:

    typedef struct
    {
      int num_dests;
      cups_dest_t *dests;
    } my_user_data_t;
    
    int
    my_dest_cb(my_user_data_t *user_data, unsigned flags,
               cups_dest_t *dest)
    {
      if (flags & CUPS_DEST_FLAGS_REMOVED)
      {
       /*
        * Remove destination from array...
        */
    
        user_data->num_dests =
            cupsRemoveDest(dest->name, dest->instance,
                           user_data->num_dests,
                           &(user_data->dests));
      }
      else
      {
       /*
        * Add destination to array...
        */
    
        user_data->num_dests =
            cupsCopyDest(dest, user_data->num_dests,
                         &(user_data->dests));
      }
    
      return (1);
    }
    
    int
    my_get_dests(cups_ptype_t type, cups_ptype_t mask,
                 cups_dest_t **dests)
    {
      my_user_data_t user_data = { 0, NULL };
    
      if (!cupsEnumDests(CUPS_DEST_FLAGS_NONE, 1000, NULL, type,
                         mask, (cups_dest_cb_t)my_dest_cb,
                         &user_data))
      {
       /*
        * An error occurred, free all of the destinations and
        * return...
        */
    
        cupsFreeDests(user_data.num_dests, user_dasta.dests);
    
        *dests = NULL;
    
        return (0);
      }
    
     /*
      * Return the destination array...
      */
    
      *dests = user_data.dests;
    
      return (user_data.num_dests);
    }
    

    Basic Destination Information

    The num_options and options members of the cups_dest_t structure provide basic attributes about the destination in addition to the user default options and values for that destination. The following names are predefined for various destination attributes:

    • "auth-info-required": The type of authentication required for printing to this destination: "none", "username,password", "domain,username,password", or "negotiate" (Kerberos).
    • "printer-info": The human-readable description of the destination such as "My Laser Printer".
    • "printer-is-accepting-jobs": "true" if the destination is accepting new jobs, "false" otherwise.
    • "printer-is-shared": "true" if the destination is being shared with other computers, "false" otherwise.
    • "printer-location": The human-readable location of the destination such as "Lab 4".
    • "printer-make-and-model": The human-readable make and model of the destination such as "ExampleCorp LaserPrinter 4000 Series".
    • "printer-state": "3" if the destination is idle, "4" if the destination is printing a job, and "5" if the destination is stopped.
    • "printer-state-change-time": The UNIX time when the destination entered the current state.
    • "printer-state-reasons": Additional comma-delimited state keywords for the destination such as "media-tray-empty-error" and "toner-low-warning".
    • "printer-type": The cups_ptype_t value associated with the destination.
    • "printer-uri-supported": The URI associated with the destination; if not set, this destination was discovered but is not yet setup as a local printer.

    Use the cupsGetOption function to retrieve the value. For example, the following code gets the make and model of a destination:

    const char *model = cupsGetOption("printer-make-and-model",
                                      dest->num_options,
                                      dest->options);
    

    Detailed Destination Information

    Once a destination has been chosen, the cupsCopyDestInfo function can be used to gather detailed information about the destination:

    cups_dinfo_t *
    cupsCopyDestInfo(http_t *http, cups_dest_t *dest);
    

    The http argument specifies a connection to the CUPS scheduler and is typically the constant CUPS_HTTP_DEFAULT. The dest argument specifies the destination to query.

    The cups_dinfo_t structure that is returned contains a snapshot of the supported options and their supported, ready, and default values. It also can report constraints between different options and values, and recommend changes to resolve those constraints.

    Getting Supported Options and Values

    The cupsCheckDestSupported function can be used to test whether a particular option or option and value is supported:

    int
    cupsCheckDestSupported(http_t *http, cups_dest_t *dest,
                           cups_dinfo_t *info,
                           const char *option,
                           const char *value);
    

    The option argument specifies the name of the option to check. The following constants can be used to check the various standard options:

    • CUPS_COPIES: Controls the number of copies that are produced.
    • CUPS_FINISHINGS: A comma-delimited list of integer constants that control the finishing processes that are applied to the job, including stapling, punching, and folding.
    • CUPS_MEDIA: Controls the media size that is used, typically one of the following: CUPS_MEDIA_3X5, CUPS_MEDIA_4X6, CUPS_MEDIA_5X7, CUPS_MEDIA_8X10, CUPS_MEDIA_A3, CUPS_MEDIA_A4, CUPS_MEDIA_A5, CUPS_MEDIA_A6, CUPS_MEDIA_ENV10, CUPS_MEDIA_ENVDL, CUPS_MEDIA_LEGAL, CUPS_MEDIA_LETTER, CUPS_MEDIA_PHOTO_L, CUPS_MEDIA_SUPERBA3, or CUPS_MEDIA_TABLOID.
    • CUPS_MEDIA_SOURCE: Controls where the media is pulled from, typically either CUPS_MEDIA_SOURCE_AUTO or CUPS_MEDIA_SOURCE_MANUAL.
    • CUPS_MEDIA_TYPE: Controls the type of media that is used, typically one of the following: CUPS_MEDIA_TYPE_AUTO, CUPS_MEDIA_TYPE_ENVELOPE, CUPS_MEDIA_TYPE_LABELS, CUPS_MEDIA_TYPE_LETTERHEAD, CUPS_MEDIA_TYPE_PHOTO, CUPS_MEDIA_TYPE_PHOTO_GLOSSY, CUPS_MEDIA_TYPE_PHOTO_MATTE, CUPS_MEDIA_TYPE_PLAIN, or CUPS_MEDIA_TYPE_TRANSPARENCY.
    • CUPS_NUMBER_UP: Controls the number of document pages that are placed on each media side.
    • CUPS_ORIENTATION: Controls the orientation of document pages placed on the media: CUPS_ORIENTATION_PORTRAIT or CUPS_ORIENTATION_LANDSCAPE.
    • CUPS_PRINT_COLOR_MODE: Controls whether the output is in color (CUPS_PRINT_COLOR_MODE_COLOR), grayscale (CUPS_PRINT_COLOR_MODE_MONOCHROME), or either (CUPS_PRINT_COLOR_MODE_AUTO).
    • CUPS_PRINT_QUALITY: Controls the generate quality of the output: CUPS_PRINT_QUALITY_DRAFT, CUPS_PRINT_QUALITY_NORMAL, or CUPS_PRINT_QUALITY_HIGH.
    • CUPS_SIDES: Controls whether prints are placed on one or both sides of the media: CUPS_SIDES_ONE_SIDED, CUPS_SIDES_TWO_SIDED_PORTRAIT, or CUPS_SIDES_TWO_SIDED_LANDSCAPE.

    If the value argument is NULL, the cupsCheckDestSupported function returns whether the option is supported by the destination. Otherwise, the function returns whether the specified value of the option is supported.

    The cupsFindDestSupported function returns the IPP attribute containing the supported values for a given option:

     ipp_attribute_t *
     cupsFindDestSupported(http_t *http, cups_dest_t *dest,
                           cups_dinfo_t *dinfo,
                           const char *option);
    

    For example, the following code prints the supported finishing processes for a destination, if any, to the standard output:

    cups_dinfo_t *info = cupsCopyDestInfo(CUPS_HTTP_DEFAULT,
                                          dest);
    
    if (cupsCheckDestSupported(CUPS_HTTP_DEFAULT, dest, info,
                               CUPS_FINISHINGS, NULL))
    {
      ipp_attribute_t *finishings =
          cupsFindDestSupported(CUPS_HTTP_DEFAULT, dest, info,
                                CUPS_FINISHINGS);
      int i, count = ippGetCount(finishings);
    
      puts("finishings supported:");
      for (i = 0; i < count; i ++)
        printf("  %d\n", ippGetInteger(finishings, i));
    }
    else
      puts("finishings not supported.");
    

    The "job-creation-attributes" option can be queried to get a list of supported options. For example, the following code prints the list of supported options to the standard output:

    ipp_attribute_t *attrs =
        cupsFindDestSupported(CUPS_HTTP_DEFAULT, dest, info,
                              "job-creation-attributes");
    int i, count = ippGetCount(attrs);
    
    for (i = 0; i < count; i ++)
      puts(ippGetString(attrs, i, NULL));
    

    Getting Default Values

    There are two sets of default values - user defaults that are available via the num_options and options members of the cups_dest_t structure, and destination defaults that available via the cups_dinfo_t structure and the cupsFindDestDefault function which returns the IPP attribute containing the default value(s) for a given option:

    ipp_attribute_t *
    cupsFindDestDefault(http_t *http, cups_dest_t *dest,
                        cups_dinfo_t *dinfo,
                        const char *option);
    

    The user defaults from cupsGetOption should always take preference over the destination defaults. For example, the following code prints the default finishings value(s) to the standard output:

    const char *def_value =
        cupsGetOption(CUPS_FINISHINGS, dest->num_options,
                      dest->options);
    ipp_attribute_t *def_attr =
        cupsFindDestDefault(CUPS_HTTP_DEFAULT, dest, info,
                            CUPS_FINISHINGS);
    
    if (def_value != NULL)
    {
      printf("Default finishings: %s\n", def_value);
    }
    else
    {
      int i, count = ippGetCount(def_attr);
    
      printf("Default finishings: %d",
             ippGetInteger(def_attr, 0));
      for (i = 1; i < count; i ++)
        printf(",%d", ippGetInteger(def_attr, i));
      putchar('\n');
    }
    

    Getting Ready (Loaded) Values

    The finishings and media options also support queries for the ready, or loaded, values. For example, a printer may have punch and staple finishers installed but be out of staples - the supported values will list both punch and staple finishing processes but the ready values will only list the punch processes. Similarly, a printer may support hundreds of different sizes of media but only have a single size loaded at any given time - the ready values are limited to the media that is actually in the printer.

    The cupsFindDestReady function finds the IPP attribute containing the ready values for a given option:

    ipp_attribute_t *
    cupsFindDestReady(http_t *http, cups_dest_t *dest,
                      cups_dinfo_t *dinfo, const char *option);
    

    For example, the following code lists the ready finishing processes:

    ipp_attribute_t *ready_finishings =
        cupsFindDestReady(CUPS_HTTP_DEFAULT, dest, info,
                          CUPS_FINISHINGS);
    
    if (ready_finishings != NULL)
    {
      int i, count = ippGetCount(ready_finishings);
    
      puts("finishings ready:");
      for (i = 0; i < count; i ++)
        printf("  %d\n", ippGetInteger(ready_finishings, i));
    }
    else
      puts("no finishings are ready.");
    

    Media Size Options

    CUPS provides functions for querying the dimensions and margins for each of the supported media size options. The cups_size_t structure is used to describe a media size:

    typedef struct cups_size_s
    {
      char media[128];
      int width, length;
      int bottom, left, right, top;
    } cups_size_t;
    

    The width and length members specify the dimensions of the media in hundredths of millimeters (1/2540th of an inch). The bottom, left, right, and top members specify the margins of the printable area, also in hundredths of millimeters.

    The cupsGetDestMediaByName and cupsGetDestMediaBySize functions lookup the media size information using a standard media size name or dimensions in hundredths of millimeters:

    int
    cupsGetDestMediaByName(http_t *http, cups_dest_t *dest,
                           cups_dinfo_t *dinfo,
                           const char *media,
                           unsigned flags, cups_size_t *size);
    
    int
    cupsGetDestMediaBySize(http_t *http, cups_dest_t *dest,
                           cups_dinfo_t *dinfo,
                           int width, int length,
                           unsigned flags, cups_size_t *size);
    

    The media, width, and length arguments specify the size to lookup. The flags argument specifies a bitfield controlling various lookup options:

    • CUPS_MEDIA_FLAGS_DEFAULT: Find the closest size supported by the printer.
    • CUPS_MEDIA_FLAGS_BORDERLESS: Find a borderless size.
    • CUPS_MEDIA_FLAGS_DUPLEX: Find a size compatible with two-sided printing.
    • CUPS_MEDIA_FLAGS_EXACT: Find an exact match for the size.
    • CUPS_MEDIA_FLAGS_READY: If the printer supports media sensing or configuration of the media in each tray/source, find the size amongst the "ready" media.

    If a matching size is found for the destination, the size information is stored in the structure pointed to by the size argument and 1 is returned. Otherwise 0 is returned.

    For example, the following code prints the margins for two-sided printing on US Letter media:

    cups_size_t size;
    
    if (cupsGetDestMediaByName(CUPS_HTTP_DEFAULT, dest, info,
                               CUPS_MEDIA_LETTER,
                               CUPS_MEDIA_FLAGS_DUPLEX, &size))
    {
      puts("Margins for duplex US Letter:");
      printf("  Bottom: %.2fin\n", size.bottom / 2540.0);
      printf("    Left: %.2fin\n", size.left / 2540.0);
      printf("   Right: %.2fin\n", size.right / 2540.0);
      printf("     Top: %.2fin\n", size.top / 2540.0);
    }
    else
      puts("Margins for duplex US Letter are not available.");
    

    You can also enumerate all of the sizes that match a given flags value using the cupsGetDestMediaByIndex and cupsGetDestMediaCount functions:

    int
    cupsGetDestMediaByIndex(http_t *http, cups_dest_t *dest,
                            cups_dinfo_t *dinfo, int n,
                            unsigned flags, cups_size_t *size);
    
    int
    cupsGetDestMediaCount(http_t *http, cups_dest_t *dest,
                          cups_dinfo_t *dinfo, unsigned flags);
    

    For example, the following code prints the list of ready media and corresponding margins:

    cups_size_t size;
    int i;
    int count = cupsGetDestMediaCount(CUPS_HTTP_DEFAULT,
                                      dest, info,
                                      CUPS_MEDIA_FLAGS_READY);
    
    for (i = 0; i < count; i ++)
    {
      if (cupsGetDestMediaByIndex(CUPS_HTTP_DEFAULT, dest, info,
                                  i, CUPS_MEDIA_FLAGS_READY,
                                  &size))
      {
        printf("%s:\n", size.name);
        printf("   Width: %.2fin\n", size.width / 2540.0);
        printf("  Length: %.2fin\n", size.length / 2540.0);
        printf("  Bottom: %.2fin\n", size.bottom / 2540.0);
        printf("    Left: %.2fin\n", size.left / 2540.0);
        printf("   Right: %.2fin\n", size.right / 2540.0);
        printf("     Top: %.2fin\n", size.top / 2540.0);
      }
    }
    

    Finally, the cupsGetDestMediaDefault function returns the default media size:

    int
    cupsGetDestMediaDefault(http_t *http, cups_dest_t *dest,
                            cups_dinfo_t *dinfo, unsigned flags,
                            cups_size_t *size);
    

    Localizing Options and Values

    CUPS provides three functions to get localized, human-readable strings in the user's current locale for options and values: cupsLocalizeDestMedia, cupsLocalizeDestOption, and cupsLocalizeDestValue:

    const char *
    cupsLocalizeDestMedia(http_t *http, cups_dest_t *dest,
                          cups_dinfo_t *info, unsigned flags,
                          cups_size_t *size);
    
    const char *
    cupsLocalizeDestOption(http_t *http, cups_dest_t *dest,
                           cups_dinfo_t *info,
                           const char *option);
    
    const char *
    cupsLocalizeDestValue(http_t *http, cups_dest_t *dest,
                          cups_dinfo_t *info,
                          const char *option, const char *value);
    

    Submitting a Print Job

    Once you are ready to submit a print job, you create a job using the cupsCreateDestJob function:

    ipp_status_t
    cupsCreateDestJob(http_t *http, cups_dest_t *dest,
                      cups_dinfo_t *info, int *job_id,
                      const char *title, int num_options,
                      cups_option_t *options);
    

    The title argument specifies a name for the print job such as "My Document". The num_options and options arguments specify the options for the print job which are allocated using the cupsAddOption function.

    When successful, the job's numeric identifier is stored in the integer pointed to by the job_id argument and IPP_STATUS_OK is returned. Otherwise, an IPP error status is returned.

    For example, the following code creates a new job that will print 42 copies of a two-sided US Letter document:

    int job_id = 0;
    int num_options = 0;
    cups_option_t *options = NULL;
    
    num_options = cupsAddOption(CUPS_COPIES, "42",
                                num_options, &options);
    num_options = cupsAddOption(CUPS_MEDIA, CUPS_MEDIA_LETTER,
                                num_options, &options);
    num_options = cupsAddOption(CUPS_SIDES,
                                CUPS_SIDES_TWO_SIDED_PORTRAIT,
                                num_options, &options);
    
    if (cupsCreateDestJob(CUPS_HTTP_DEFAULT, dest, info,
                          &job_id, "My Document", num_options,
                          options) == IPP_STATUS_OK)
      printf("Created job: %d\n", job_id);
    else
      printf("Unable to create job: %s\n",
             cupsLastErrorString());
    

    Once the job is created, you submit documents for the job using the cupsStartDestDocument, cupsWriteRequestData, and cupsFinishDestDocument functions:

    http_status_t
    cupsStartDestDocument(http_t *http, cups_dest_t *dest,
                          cups_dinfo_t *info, int job_id,
                          const char *docname,
                          const char *format,
                          int num_options,
                          cups_option_t *options,
                          int last_document);
    
    http_status_t
    cupsWriteRequestData(http_t *http, const char *buffer,
                         size_t length);
    
    ipp_status_t
    cupsFinishDestDocument(http_t *http, cups_dest_t *dest,
                           cups_dinfo_t *info);
    

    The docname argument specifies the name of the document, typically the original filename. The format argument specifies the MIME media type of the document, including the following constants:

    • CUPS_FORMAT_JPEG: "image/jpeg"
    • CUPS_FORMAT_PDF: "application/pdf"
    • CUPS_FORMAT_POSTSCRIPT: "application/postscript"
    • CUPS_FORMAT_TEXT: "text/plain"

    The num_options and options arguments specify per-document print options, which at present must be 0 and NULL. The last_document argument specifies whether this is the last document in the job.

    For example, the following code submits a PDF file to the job that was just created:

    FILE *fp = fopen("filename.pdf", "rb");
    size_t bytes;
    char buffer[65536];
    
    if (cupsStartDestDocument(CUPS_HTTP_DEFAULT, dest, info,
                              job_id, "filename.pdf", 0, NULL,
                              1) == HTTP_STATUS_CONTINUE)
    {
      while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
        if (cupsWriteRequestData(CUPS_HTTP_DEFAULT, buffer,
                                 bytes) != HTTP_STATUS_CONTINUE)
          break;
    
      if (cupsFinishDestDocument(CUPS_HTTP_DEFAULT, dest,
                                 info) == IPP_STATUS_OK)
        puts("Document send succeeded.");
      else
        printf("Document send failed: %s\n",
               cupsLastErrorString());
    }
    
    fclose(fp);
    

    Sending IPP Requests

    CUPS provides a rich API for sending IPP requests to the scheduler or printers, typically from management or utility applications whose primary purpose is not to send print jobs.

    Connecting to the Scheduler or Printer

    The connection to the scheduler or printer is represented by the HTTP connection type http_t. The cupsConnectDest function connects to the scheduler or printer associated with the destination:

    http_t *
    cupsConnectDest(cups_dest_t *dest, unsigned flags, int msec,
                    int *cancel, char *resource,
                    size_t resourcesize, cups_dest_cb_t cb,
                    void *user_data);
    

    The dest argument specifies the destination to connect to.

    The flags argument specifies whether you want to connect to the scheduler (CUPS_DEST_FLAGS_NONE) or device/printer (CUPS_DEST_FLAGS_DEVICE) associated with the destination.

    The msec argument specifies how long you are willing to wait for the connection to be established in milliseconds. Specify a value of -1 to wait indefinitely.

    The cancel argument specifies the address of an integer variable that can be set to a non-zero value to cancel the connection. Specify a value of NULL to not provide a cancel variable.

    The resource and resourcesize arguments specify the address and size of a character string array to hold the path to use when sending an IPP request.

    The cb and user_data arguments specify a destination callback function that returns 1 to continue connecting or 0 to stop. The destination callback work the same way as the one used for the cupsEnumDests function.

    On success, a HTTP connection is returned that can be used to send IPP requests and get IPP responses.

    For example, the following code connects to the printer associated with a destination with a 30 second timeout:

    char resource[256];
    http_t *http = cupsConnectDest(dest, CUPS_DEST_FLAGS_DEVICE,
                                   30000, NULL, resource,
                                   sizeof(resource), NULL, NULL);
    

    Creating an IPP Request

    IPP requests are represented by the IPP message type ipp_t and each IPP attribute in the request is representing using the type ipp_attribute_t. Each IPP request includes an operation code (IPP_OP_CREATE_JOB, IPP_OP_GET_PRINTER_ATTRIBUTES, etc.) and a 32-bit integer identifier.

    The ippNewRequest function creates a new IPP request:

    ipp_t *
    ippNewRequest(ipp_op_t op);
    

    The op argument specifies the IPP operation code for the request. For example, the following code creates an IPP Get-Printer-Attributes request:

    ipp_t *request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
    

    The request identifier is automatically set to a unique value for the current process.

    Each IPP request starts with two IPP attributes, "attributes-charset" and "attributes-natural-language", followed by IPP attribute(s) that specify the target of the operation. The ippNewRequest automatically adds the correct "attributes-charset" and "attributes-natural-language" attributes, but you must add the target attribute(s). For example, the following code adds the "printer-uri" attribute to the IPP Get-Printer-Attributes request to specify which printer is being queried:

    const char *printer_uri = cupsGetOption("device-uri",
                                            dest->num_options,
                                            dest->options);
    
    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
                 "printer-uri", NULL, printer_uri);
    

    Note: If we wanted to query the scheduler instead of the device, we would look up the "printer-uri-supported" option instead of the "device-uri" value.

    The ippAddString function adds the "printer-uri" attribute the the IPP request. The IPP_TAG_OPERATION argument specifies that the attribute is part of the operation. The IPP_TAG_URI argument specifies that the value is a Universal Resource Identifier (URI) string. The NULL argument specifies there is no language (English, French, Japanese, etc.) associated with the string, and the printer_uri argument specifies the string value.

    The IPP Get-Printer-Attributes request also supports an IPP attribute called "requested-attributes" that lists the attributes and values you are interested in. For example, the following code requests the printer state attributes:

    static const char * const requested_attributes[] =
    {
      "printer-state",
      "printer-state-message",
      "printer-state-reasons"
    };
    
    ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
                  "requested-attributes", 3, NULL,
                  requested_attributes);
    

    The ippAddStrings function adds an attribute with one or more strings, in this case three. The IPP_TAG_KEYWORD argument specifies that the strings are keyword values, which are used for attribute names. All strings use the same language (NULL), and the attribute will contain the three strings in the array requested_attributes.

    CUPS provides many functions to adding attributes of different types:

    • ippAddBoolean adds a boolean (IPP_TAG_BOOLEAN) attribute with one value.
    • ippAddInteger adds an enum (IPP_TAG_ENUM) or integer (IPP_TAG_INTEGER) attribute with one value.
    • ippAddIntegers adds an enum or integer attribute with one or more values.
    • ippAddOctetString adds an octetString attribute with one value.
    • ippAddOutOfBand adds a admin-defined (IPP_TAG_ADMINDEFINE), default (IPP_TAG_DEFAULT), delete-attribute (IPP_TAG_DELETEATTR), no-value (IPP_TAG_NOVALUE), not-settable (IPP_TAG_NOTSETTABLE), unknown (IPP_TAG_UNKNOWN), or unsupported (IPP_TAG_UNSUPPORTED_VALUE) out-of-band attribute.
    • ippAddRange adds a rangeOfInteger attribute with one range.
    • ippAddRanges adds a rangeOfInteger attribute with one or more ranges.
    • ippAddResolution adds a resolution attribute with one resolution.
    • ippAddResolutions adds a resolution attribute with one or more resolutions.
    • ippAddString adds a charset (IPP_TAG_CHARSET), keyword (IPP_TAG_KEYWORD), mimeMediaType (IPP_TAG_MIMETYPE), name (IPP_TAG_NAME and IPP_TAG_NAMELANG), naturalLanguage (IPP_TAG_NATURAL_LANGUAGE), text (IPP_TAG_TEXT and IPP_TAG_TEXTLANG), uri (IPP_TAG_URI), or uriScheme (IPP_TAG_URISCHEME) attribute with one value.
    • ippAddStrings adds a charset, keyword, mimeMediaType, name, naturalLanguage, text, uri, or uriScheme attribute with one or more values.

    Sending the IPP Request

    Once you have created the IPP request, you can send it using the cupsDoRequest function. For example, the following code sends the IPP Get-Printer-Attributes request to the destination and saves the response:

    ipp_t *response = cupsDoRequest(http, request, resource);
    

    For requests like Send-Document that include a file, the cupsDoFileRequest function should be used:

    ipp_t *response = cupsDoFileRequest(http, request, resource,
                                        filename);
    

    Both cupsDoRequest and cupsDoFileRequest free the IPP request. If a valid IPP response is received, it is stored in a new IPP message (ipp_t) and returned to the caller. Otherwise NULL is returned.

    The status from the most recent request can be queried using the cupsLastError function, for example:

    if (cupsLastError() >= IPP_STATUS_ERROR_BAD_REQUEST)
    {
      /* request failed */
    }
    

    A human-readable error message is also available using the cupsLastErrorString function:

    if (cupsLastError() >= IPP_STATUS_ERROR_BAD_REQUEST)
    {
      /* request failed */
      printf("Request failed: %s\n", cupsLastErrorString());
    }
    

    Processing the IPP Response

    Each response to an IPP request is also an IPP message (ipp_t) with its own IPP attributes (ipp_attribute_t) that includes a status code (IPP_STATUS_OK, IPP_STATUS_ERROR_BAD_REQUEST, etc.) and the corresponding 32-bit integer identifier from the request.

    For example, the following code finds the printer state attributes and prints their values:

    ipp_attribute_t *attr;
    
    if ((attr = ippFindAttribute(response, "printer-state",
                                 IPP_TAG_ENUM)) != NULL)
    {
      printf("printer-state=%s\n",
             ippEnumString("printer-state", ippGetInteger(attr, 0)));
    }
    else
      puts("printer-state=unknown");
    
    if ((attr = ippFindAttribute(response, "printer-state-message",
                                 IPP_TAG_TEXT)) != NULL)
    {
      printf("printer-state-message=\"%s\"\n",
             ippGetString(attr, 0, NULL)));
    }
    
    if ((attr = ippFindAttribute(response, "printer-state-reasons",
                                 IPP_TAG_KEYWORD)) != NULL)
    {
      int i, count = ippGetCount(attr);
    
      puts("printer-state-reasons=");
      for (i = 0; i < count; i ++)
        printf("    %s\n", ippGetString(attr, i, NULL)));
    }
    

    The ippGetCount function returns the number of values in an attribute.

    The ippGetInteger and ippGetString functions return a single integer or string value from an attribute.

    The ippEnumString function converts a enum value to its keyword (string) equivalent.

    Once you are done using the IPP response message, free it using the ippDelete function:

    ippDelete(response);
    

    Authentication

    CUPS normally handles authentication through the console. GUI applications should set a password callback using the cupsSetPasswordCB2 function:

    void
    cupsSetPasswordCB2(cups_password_cb2_t cb, void *user_data);
    

    The password callback will be called when needed and is responsible for setting the current user name using cupsSetUser and returning a string:

    const char *
    cups_password_cb2(const char *prompt, http_t *http,
                      const char *method, const char *resource,
                      void *user_data);
    

    The prompt argument is a string from CUPS that should be displayed to the user.

    The http argument is the connection hosting the request that is being authenticated. The password callback can call the httpGetField and httpGetSubField functions to look for additional details concerning the authentication challenge.

    The method argument specifies the HTTP method used for the request and is typically "POST".

    The resource argument specifies the path used for the request.

    The user_data argument provides the user data pointer from the cupsSetPasswordCB2 call.

    Functions

    cupsAddDest

    Add a destination to the list of destinations.

    int cupsAddDest(const char *name, const char *instance, int num_dests, cups_dest_t **dests);

    Parameters

    name Destination name
    instance Instance name or NULL for none/primary
    num_dests Number of destinations
    dests Destinations

    Return Value

    New number of destinations

    Discussion

    This function cannot be used to add a new class or printer queue, it only adds a new container of saved options for the named destination or instance.

    If the named destination already exists, the destination list is returned unchanged. Adding a new instance of a destination creates a copy of that destination's options.

    Use the cupsSaveDests function to save the updated list of destinations to the user's lpoptions file.

     CUPS 2.2.4/macOS 10.13 cupsAddIntegerOption

    Add an integer option to an option array.

    int cupsAddIntegerOption(const char *name, int value, int num_options, cups_option_t **options);

    Parameters

    name Name of option
    value Value of option
    num_options Number of options
    options Pointer to options

    Return Value

    Number of options

    Discussion

    New option arrays can be initialized simply by passing 0 for the "num_options" parameter.

    cupsAddOption

    Add an option to an option array.

    int cupsAddOption(const char *name, const char *value, int num_options, cups_option_t **options);

    Parameters

    name Name of option
    value Value of option
    num_options Number of options
    options Pointer to options

    Return Value

    Number of options

    Discussion

    New option arrays can be initialized simply by passing 0 for the "num_options" parameter.

     CUPS 1.6/macOS 10.8 cupsCancelDestJob

    Cancel a job on a destination.

    ipp_status_t cupsCancelDestJob(http_t *http, cups_dest_t *dest, int job_id);

    Parameters

    http Connection to destination
    dest Destination
    job_id Job ID

    Return Value

    Status of cancel operation

    Discussion

    The "job_id" is the number returned by cupsCreateDestJob.

    Returns IPP_STATUS_OK on success and IPP_STATUS_ERROR_NOT_AUTHORIZED or IPP_STATUS_ERROR_FORBIDDEN on failure.

     CUPS 1.6/macOS 10.8 cupsCheckDestSupported

    Check that the option and value are supported by the destination.

    int cupsCheckDestSupported(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option, const char *value);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    option Option
    value Value or NULL

    Return Value

    1 if supported, 0 otherwise

    Discussion

    Returns 1 if supported, 0 otherwise.

     CUPS 1.6/macOS 10.8 cupsCloseDestJob

    Close a job and start printing.

    ipp_status_t cupsCloseDestJob(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, int job_id);

    Parameters

    http Connection to destination
    dest Destination
    info Destination information
    job_id Job ID

    Return Value

    IPP status code

    Discussion

    Use when the last call to cupsStartDocument passed 0 for "last_document". "job_id" is the job ID returned by cupsCreateDestJob. Returns IPP_STATUS_OK on success.

     CUPS 1.6/macOS 10.8 cupsConnectDest

    Open a conection to the destination.

    http_t *cupsConnectDest(cups_dest_t *dest, unsigned flags, int msec, int *cancel, char *resource, size_t resourcesize, cups_dest_cb_t cb, void *user_data);

    Parameters

    dest Destination
    flags Connection flags
    msec Timeout in milliseconds
    cancel Pointer to "cancel" variable
    resource Resource buffer
    resourcesize Size of resource buffer
    cb Callback function
    user_data User data pointer

    Return Value

    Connection to destination or NULL

    Discussion

    Connect to the destination, returning a new http_t connection object and optionally the resource path to use for the destination. These calls will block until a connection is made, the timeout expires, the integer pointed to by "cancel" is non-zero, or the callback function (or block) returns 0. The caller is responsible for calling httpClose on the returned connection.

    Starting with CUPS 2.2.4, the caller can pass CUPS_DEST_FLAGS_DEVICE for the "flags" argument to connect directly to the device associated with the destination. Otherwise, the connection is made to the CUPS scheduler associated with the destination.

     CUPS 1.6/macOS 10.8 cupsCopyDest

    Copy a destination.

    int cupsCopyDest(cups_dest_t *dest, int num_dests, cups_dest_t **dests);

    Parameters

    dest Destination to copy
    num_dests Number of destinations
    dests Destination array

    Return Value

    New number of destinations

    Discussion

    Make a copy of the destination to an array of destinations (or just a single copy) - for use with the cupsEnumDests* functions. The caller is responsible for calling cupsFreeDests() on the returned object(s).

     CUPS 1.6/macOS 10.8 cupsCopyDestConflicts

    Get conflicts and resolutions for a new option/value pair.

    int cupsCopyDestConflicts(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, int num_options, cups_option_t *options, const char *new_option, const char *new_value, int *num_conflicts, cups_option_t **conflicts, int *num_resolved, cups_option_t **resolved);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    num_options Number of current options
    options Current options
    new_option New option
    new_value New value
    num_conflicts Number of conflicting options
    conflicts Conflicting options
    num_resolved Number of options to resolve
    resolved Resolved options

    Return Value

    1 if there is a conflict, 0 if none, -1 on error

    Discussion

    "num_options" and "options" represent the currently selected options by the user. "new_option" and "new_value" are the setting the user has just changed.

    Returns 1 if there is a conflict, 0 if there are no conflicts, and -1 if there was an unrecoverable error such as a resolver loop.

    If "num_conflicts" and "conflicts" are not NULL, they are set to contain the list of conflicting option/value pairs. Similarly, if "num_resolved" and "resolved" are not NULL they will be set to the list of changes needed to resolve the conflict.

    If cupsCopyDestConflicts returns 1 but "num_resolved" and "resolved" are set to 0 and NULL, respectively, then the conflict cannot be resolved.

     CUPS 1.6/macOS 10.8 cupsCopyDestInfo

    Get the supported values/capabilities for the destination.

    cups_dinfo_t *cupsCopyDestInfo(http_t *http, cups_dest_t *dest);

    Parameters

    http Connection to destination
    dest Destination

    Return Value

    Destination information

    Discussion

    The caller is responsible for calling cupsFreeDestInfo on the return value. NULL is returned on error.

     CUPS 1.6/macOS 10.8 cupsCreateDestJob

    Create a job on a destination.

    ipp_status_t cupsCreateDestJob(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, int *job_id, const char *title, int num_options, cups_option_t *options);

    Parameters

    http Connection to destination
    dest Destination
    info Destination information
    job_id Job ID or 0 on error
    title Job name
    num_options Number of job options
    options Job options

    Return Value

    IPP status code

    Discussion

    Returns IPP_STATUS_OK or IPP_STATUS_OK_SUBST on success, saving the job ID in the variable pointed to by "job_id".

     CUPS 1.1.20/macOS 10.4 cupsDoAuthentication

    Authenticate a request.

    int cupsDoAuthentication(http_t *http, const char *method, const char *resource);

    Parameters

    http Connection to server or CUPS_HTTP_DEFAULT
    method Request method ("GET", "POST", "PUT")
    resource Resource path

    Return Value

    0 on success, -1 on error

    Discussion

    This function should be called in response to a HTTP_STATUS_UNAUTHORIZED status, prior to resubmitting your request.

    cupsEncodeOptions

    Encode printer options into IPP attributes.

    void cupsEncodeOptions(ipp_t *ipp, int num_options, cups_option_t *options);

    Parameters

    ipp Request to add to
    num_options Number of options
    options Options

    Discussion

    This function adds operation, job, and then subscription attributes, in that order. Use the cupsEncodeOptions2 function to add attributes for a single group.

     CUPS 1.2/macOS 10.5 cupsEncodeOptions2

    Encode printer options into IPP attributes for a group.

    void cupsEncodeOptions2(ipp_t *ipp, int num_options, cups_option_t *options, ipp_tag_t group_tag);

    Parameters

    ipp Request to add to
    num_options Number of options
    options Options
    group_tag Group to encode

    Discussion

    This function only adds attributes for a single group. Call this function multiple times for each group, or use cupsEncodeOptions to add the standard groups.

    cupsEncryption

    Get the current encryption settings.

    http_encryption_t cupsEncryption(void);

    Return Value

    Encryption settings

    Discussion

    The default encryption setting comes from the CUPS_ENCRYPTION environment variable, then the ~/.cups/client.conf file, and finally the /etc/cups/client.conf file. If not set, the default is HTTP_ENCRYPTION_IF_REQUESTED.

    Note: The current encryption setting is tracked separately for each thread in a program. Multi-threaded programs that override the setting via the cupsSetEncryption function need to do so in each thread for the same setting to be used.

     CUPS 1.6/macOS 10.8 cupsEnumDests

    Enumerate available destinations with a callback function.

    int cupsEnumDests(unsigned flags, int msec, int *cancel, cups_ptype_t type, cups_ptype_t mask, cups_dest_cb_t cb, void *user_data);

    Parameters

    flags Enumeration flags
    msec Timeout in milliseconds, -1 for indefinite
    cancel Pointer to "cancel" variable
    type Printer type bits
    mask Mask for printer type bits
    cb Callback function
    user_data User data

    Return Value

    1 on success, 0 on failure

    Discussion

    Destinations are enumerated from one or more sources. The callback function receives the user_data pointer and the destination pointer which can be used as input to the cupsCopyDest function. The function must return 1 to continue enumeration or 0 to stop.

    The type and mask arguments allow the caller to filter the destinations that are enumerated. Passing 0 for both will enumerate all printers. The constant CUPS_PRINTER_DISCOVERED is used to filter on destinations that are available but have not yet been added locally.

    Enumeration happens on the current thread and does not return until all destinations have been enumerated or the callback function returns 0.

    Note: The callback function will likely receive multiple updates for the same destinations - it is up to the caller to suppress any duplicate destinations.

     CUPS 1.7/macOS 10.9 cupsFindDestDefault

    Find the default value(s) for the given option.

    ipp_attribute_t *cupsFindDestDefault(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    option Option/attribute name

    Return Value

    Default attribute or NULL for none

    Discussion

    The returned value is an IPP attribute. Use the ippGetBoolean, ippGetCollection, ippGetCount, ippGetDate, ippGetInteger, ippGetOctetString, ippGetRange, ippGetResolution, ippGetString, and ippGetValueTag functions to inspect the default value(s) as needed.

     CUPS 1.7/macOS 10.9 cupsFindDestReady

    Find the default value(s) for the given option.

    ipp_attribute_t *cupsFindDestReady(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    option Option/attribute name

    Return Value

    Default attribute or NULL for none

    Discussion

    The returned value is an IPP attribute. Use the ippGetBoolean, ippGetCollection, ippGetCount, ippGetDate, ippGetInteger, ippGetOctetString, ippGetRange, ippGetResolution, ippGetString, and ippGetValueTag functions to inspect the default value(s) as needed.

     CUPS 1.7/macOS 10.9 cupsFindDestSupported

    Find the default value(s) for the given option.

    ipp_attribute_t *cupsFindDestSupported(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    option Option/attribute name

    Return Value

    Default attribute or NULL for none

    Discussion

    The returned value is an IPP attribute. Use the ippGetBoolean, ippGetCollection, ippGetCount, ippGetDate, ippGetInteger, ippGetOctetString, ippGetRange, ippGetResolution, ippGetString, and ippGetValueTag functions to inspect the default value(s) as needed.

     CUPS 1.6/macOS 10.8 cupsFinishDestDocument

    Finish the current document.

    ipp_status_t cupsFinishDestDocument(http_t *http, cups_dest_t *dest, cups_dinfo_t *info);

    Parameters

    http Connection to destination
    dest Destination
    info Destination information

    Return Value

    Status of document submission

    Discussion

    Returns IPP_STATUS_OK or IPP_STATUS_OK_SUBST on success.

     CUPS 1.6/macOS 10.8 cupsFreeDestInfo

    Free destination information obtained using cupsCopyDestInfo.

    void cupsFreeDestInfo(cups_dinfo_t *dinfo);

    Parameters

    dinfo Destination information

    cupsFreeDests

    Free the memory used by the list of destinations.

    void cupsFreeDests(int num_dests, cups_dest_t *dests);

    Parameters

    num_dests Number of destinations
    dests Destinations

    cupsFreeJobs

    Free memory used by job data.

    void cupsFreeJobs(int num_jobs, cups_job_t *jobs);

    Parameters

    num_jobs Number of jobs
    jobs Jobs

    cupsFreeOptions

    Free all memory used by options.

    void cupsFreeOptions(int num_options, cups_option_t *options);

    Parameters

    num_options Number of options
    options Pointer to options

    cupsGetDest

    Get the named destination from the list.

    cups_dest_t *cupsGetDest(const char *name, const char *instance, int num_dests, cups_dest_t *dests);

    Parameters

    name Destination name or NULL for the default destination
    instance Instance name or NULL
    num_dests Number of destinations
    dests Destinations

    Return Value

    Destination pointer or NULL

    Discussion

    Use the cupsEnumDests or cupsGetDests2 functions to get a list of supported destinations for the current user.

     CUPS 1.7/macOS 10.9 cupsGetDestMediaByIndex

    Get a media name, dimension, and margins for a specific size.

    int cupsGetDestMediaByIndex(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, int n, unsigned flags, cups_size_t *size);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    n Media size number (0-based)
    flags Media flags
    size Media size information

    Return Value

    1 on success, 0 on failure

    Discussion

    The flags parameter determines which set of media are indexed. For example, passing CUPS_MEDIA_FLAGS_BORDERLESS will get the Nth borderless size supported by the printer.

     CUPS 1.6/macOS 10.8 cupsGetDestMediaByName

    Get media names, dimensions, and margins.

    int cupsGetDestMediaByName(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *media, unsigned flags, cups_size_t *size);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    media Media name
    flags Media matching flags
    size Media size information

    Return Value

    1 on match, 0 on failure

    Discussion

    The "media" string is a PWG media name. "Flags" provides some matching guidance (multiple flags can be combined):

    CUPS_MEDIA_FLAGS_DEFAULT = find the closest size supported by the printer, CUPS_MEDIA_FLAGS_BORDERLESS = find a borderless size, CUPS_MEDIA_FLAGS_DUPLEX = find a size compatible with 2-sided printing, CUPS_MEDIA_FLAGS_EXACT = find an exact match for the size, and CUPS_MEDIA_FLAGS_READY = if the printer supports media sensing, find the size amongst the "ready" media.

    The matching result (if any) is returned in the "cups_size_t" structure.

    Returns 1 when there is a match and 0 if there is not a match.

     CUPS 1.6/macOS 10.8 cupsGetDestMediaBySize

    Get media names, dimensions, and margins.

    int cupsGetDestMediaBySize(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, int width, int length, unsigned flags, cups_size_t *size);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    width Media width in hundredths of of millimeters
    length Media length in hundredths of of millimeters
    flags Media matching flags
    size Media size information

    Return Value

    1 on match, 0 on failure

    Discussion

    "Width" and "length" are the dimensions in hundredths of millimeters. "Flags" provides some matching guidance (multiple flags can be combined):

    CUPS_MEDIA_FLAGS_DEFAULT = find the closest size supported by the printer, CUPS_MEDIA_FLAGS_BORDERLESS = find a borderless size, CUPS_MEDIA_FLAGS_DUPLEX = find a size compatible with 2-sided printing, CUPS_MEDIA_FLAGS_EXACT = find an exact match for the size, and CUPS_MEDIA_FLAGS_READY = if the printer supports media sensing, find the size amongst the "ready" media.

    The matching result (if any) is returned in the "cups_size_t" structure.

    Returns 1 when there is a match and 0 if there is not a match.

     CUPS 1.7/macOS 10.9 cupsGetDestMediaCount

    Get the number of sizes supported by a destination.

    int cupsGetDestMediaCount(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, unsigned flags);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    flags Media flags

    Return Value

    Number of sizes

    Discussion

    The flags parameter determines the set of media sizes that are counted. For example, passing CUPS_MEDIA_FLAGS_BORDERLESS will return the number of borderless sizes.

     CUPS 1.7/macOS 10.9 cupsGetDestMediaDefault

    Get the default size for a destination.

    int cupsGetDestMediaDefault(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, unsigned flags, cups_size_t *size);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    flags Media flags
    size Media size information

    Return Value

    1 on success, 0 on failure

    Discussion

    The flags parameter determines which default size is returned. For example, passing CUPS_MEDIA_FLAGS_BORDERLESS will return the default borderless size, typically US Letter or A4, but sometimes 4x6 photo media.

     CUPS 2.0/macOS 10.10 cupsGetDestWithURI

    Get a destination associated with a URI.

    cups_dest_t *cupsGetDestWithURI(const char *name, const char *uri);

    Parameters

    name Desired printer name or NULL
    uri URI for the printer

    Return Value

    Destination or NULL

    Discussion

    "name" is the desired name for the printer. If NULL, a name will be created using the URI.

    "uri" is the "ipp" or "ipps" URI for the printer.

     CUPS 1.1.21/macOS 10.4 cupsGetDests2

    Get the list of destinations from the specified server.

    int cupsGetDests2(http_t *http, cups_dest_t **dests);

    Parameters

    http Connection to server or CUPS_HTTP_DEFAULT
    dests Destinations

    Return Value

    Number of destinations

    Discussion

    Starting with CUPS 1.2, the returned list of destinations include the "printer-info", "printer-is-accepting-jobs", "printer-is-shared", "printer-make-and-model", "printer-state", "printer-state-change-time", "printer-state-reasons", "printer-type", and "printer-uri-supported" attributes as options.

    CUPS 1.4 adds the "marker-change-time", "marker-colors", "marker-high-levels", "marker-levels", "marker-low-levels", "marker-message", "marker-names", "marker-types", and "printer-commands" attributes as options.

    CUPS 2.2 adds accessible IPP printers to the list of destinations that can be used. The "printer-uri-supported" option will be present for those IPP printers that have been recently used.

    Use the cupsFreeDests function to free the destination list and the cupsGetDest function to find a particular destination.

     CUPS 2.2.4/macOS 10.13 cupsGetIntegerOption

    Get an integer option value.

    int cupsGetIntegerOption(const char *name, int num_options, cups_option_t *options);

    Parameters

    name Name of option
    num_options Number of options
    options Options

    Return Value

    Option value or INT_MIN

    Discussion

    INT_MIN is returned when the option does not exist, is not an integer, or exceeds the range of values for the "int" type.

     CUPS 1.1.21/macOS 10.4 cupsGetJobs2

    Get the jobs from the specified server.

    int cupsGetJobs2(http_t *http, cups_job_t **jobs, const char *name, int myjobs, int whichjobs);

    Parameters

    http Connection to server or CUPS_HTTP_DEFAULT
    jobs Job data
    name NULL = all destinations, otherwise show jobs for named destination
    myjobs 0 = all users, 1 = mine
    whichjobs CUPS_WHICHJOBS_ALL, CUPS_WHICHJOBS_ACTIVE, or CUPS_WHICHJOBS_COMPLETED

    Return Value

    Number of jobs

    Discussion

    A "whichjobs" value of CUPS_WHICHJOBS_ALL returns all jobs regardless of state, while CUPS_WHICHJOBS_ACTIVE returns jobs that are pending, processing, or held and CUPS_WHICHJOBS_COMPLETED returns jobs that are stopped, canceled, aborted, or completed.

     CUPS 1.4/macOS 10.6 cupsGetNamedDest

    Get options for the named destination.

    cups_dest_t *cupsGetNamedDest(http_t *http, const char *name, const char *instance);

    Parameters

    http Connection to server or CUPS_HTTP_DEFAULT
    name Destination name or NULL for the default destination
    instance Instance name or NULL

    Return Value

    Destination or NULL

    Discussion

    This function is optimized for retrieving a single destination and should be used instead of cupsGetDests2 and cupsGetDest when you either know the name of the destination or want to print to the default destination. If NULL is returned, the destination does not exist or there is no default destination.

    If "http" is CUPS_HTTP_DEFAULT, the connection to the default print server will be used.

    If "name" is NULL, the default printer for the current user will be returned.

    The returned destination must be freed using cupsFreeDests with a "num_dests" value of 1.

    cupsGetOption

    Get an option value.

    const char *cupsGetOption(const char *name, int num_options, cups_option_t *options);

    Parameters

    name Name of option
    num_options Number of options
    options Options

    Return Value

    Option value or NULL

     CUPS 1.4/macOS 10.6 cupsGetPassword2

    Get a password from the user using the current password callback.

    const char *cupsGetPassword2(const char *prompt, http_t *http, const char *method, const char *resource);

    Parameters

    prompt Prompt string
    http Connection to server or CUPS_HTTP_DEFAULT
    method Request method ("GET", "POST", "PUT")
    resource Resource path

    Return Value

    Password

    Discussion

    Uses the current password callback function. Returns NULL if the user does not provide a password.

    Note: The current password callback function is tracked separately for each thread in a program. Multi-threaded programs that override the setting via the cupsSetPasswordCB2 function need to do so in each thread for the same function to be used.

     CUPS 2.0/macOS 10.10 cupsLocalizeDestMedia

    Get the localized string for a destination media size.

    const char *cupsLocalizeDestMedia(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, unsigned flags, cups_size_t *size);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    flags Media flags
    size Media size

    Return Value

    Localized string

    Discussion

    The returned string is stored in the destination information and will become invalid if the destination information is deleted.

     CUPS 1.6/macOS 10.8 cupsLocalizeDestOption

    Get the localized string for a destination option.

    const char *cupsLocalizeDestOption(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    option Option to localize

    Return Value

    Localized string

    Discussion

    The returned string is stored in the destination information and will become invalid if the destination information is deleted.

     CUPS 1.6/macOS 10.8 cupsLocalizeDestValue

    Get the localized string for a destination option+value pair.

    const char *cupsLocalizeDestValue(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option, const char *value);

    Parameters

    http Connection to destination
    dest Destination
    dinfo Destination information
    option Option to localize
    value Value to localize

    Return Value

    Localized string

    Discussion

    The returned string is stored in the destination information and will become invalid if the destination information is deleted.

     CUPS 2.0/OS 10.10 cupsMakeServerCredentials

    Make a self-signed certificate and private key pair.

    int cupsMakeServerCredentials(const char *path, const char *common_name, int num_alt_names, const char **alt_names, time_t expiration_date);

    Parameters

    path Keychain path or NULL for default
    common_name Common name
    num_alt_names Number of subject alternate names
    alt_names Subject Alternate Names
    expiration_date Expiration date

    Return Value

    1 on success, 0 on failure

    cupsParseOptions

    Parse options from a command-line argument.

    int cupsParseOptions(const char *arg, int num_options, cups_option_t **options);

    Parameters

    arg Argument to parse
    num_options Number of options
    options Options found

    Return Value

    Number of options found

    Discussion

    This function converts space-delimited name/value pairs according to the PAPI text option ABNF specification. Collection values ("name={a=... b=... c=...}") are stored with the curley brackets intact - use cupsParseOptions on the value to extract the collection attributes.

     CUPS 1.3/macOS 10.5 cupsRemoveDest

    Remove a destination from the destination list.

    int cupsRemoveDest(const char *name, const char *instance, int num_dests, cups_dest_t **dests);

    Parameters

    name Destination name
    instance Instance name or NULL
    num_dests Number of destinations
    dests Destinations

    Return Value

    New number of destinations

    Discussion

    Removing a destination/instance does not delete the class or printer queue, merely the lpoptions for that destination/instance. Use the cupsSetDests or cupsSetDests2 functions to save the new options for the user.

     CUPS 1.2/macOS 10.5 cupsRemoveOption

    Remove an option from an option array.

    int cupsRemoveOption(const char *name, int num_options, cups_option_t **options);

    Parameters

    name Option name
    num_options Current number of options
    options Options

    Return Value

    New number of options

    cupsServer

    Return the hostname/address of the current server.

    const char *cupsServer(void);

    Return Value

    Server name

    Discussion

    The default server comes from the CUPS_SERVER environment variable, then the ~/.cups/client.conf file, and finally the /etc/cups/client.conf file. If not set, the default is the local system - either "localhost" or a domain socket path.

    The returned value can be a fully-qualified hostname, a numeric IPv4 or IPv6 address, or a domain socket pathname.

    Note: The current server is tracked separately for each thread in a program. Multi-threaded programs that override the server via the cupsSetServer function need to do so in each thread for the same server to be used.

     CUPS 1.5/macOS 10.7 cupsSetClientCertCB

    Set the client certificate callback.

    void cupsSetClientCertCB(cups_client_cert_cb_t cb, void *user_data);

    Parameters

    cb Callback function
    user_data User data pointer

    Discussion

    Pass NULL to restore the default callback.

    Note: The current certificate callback is tracked separately for each thread in a program. Multi-threaded programs that override the callback need to do so in each thread for the same callback to be used.

     CUPS 1.5/macOS 10.7 cupsSetCredentials

    Set the default credentials to be used for SSL/TLS connections.

    int cupsSetCredentials(cups_array_t *credentials);

    Parameters

    credentials Array of credentials

    Return Value

    Status of call (0 = success)

    Discussion

    Note: The default credentials are tracked separately for each thread in a program. Multi-threaded programs that override the setting need to do so in each thread for the same setting to be used.

     CUPS 1.3/macOS 10.5 cupsSetDefaultDest

    Set the default destination.

    void cupsSetDefaultDest(const char *name, const char *instance, int num_dests, cups_dest_t *dests);

    Parameters

    name Destination name
    instance Instance name or NULL
    num_dests Number of destinations
    dests Destinations

     CUPS 1.1.21/macOS 10.4 cupsSetDests2

    Save the list of destinations for the specified server.

    int cupsSetDests2(http_t *http, int num_dests, cups_dest_t *dests);

    Parameters

    http Connection to server or CUPS_HTTP_DEFAULT
    num_dests Number of destinations
    dests Destinations

    Return Value

    0 on success, -1 on error

    Discussion

    This function saves the destinations to /etc/cups/lpoptions when run as root and ~/.cups/lpoptions when run as a normal user.

    cupsSetEncryption

    Set the encryption preference.

    void cupsSetEncryption(http_encryption_t e);

    Parameters

    e New encryption preference

    Discussion

    The default encryption setting comes from the CUPS_ENCRYPTION environment variable, then the ~/.cups/client.conf file, and finally the /etc/cups/client.conf file. If not set, the default is HTTP_ENCRYPTION_IF_REQUESTED.

    Note: The current encryption setting is tracked separately for each thread in a program. Multi-threaded programs that override the setting need to do so in each thread for the same setting to be used.

     CUPS 1.4/macOS 10.6 cupsSetPasswordCB2

    Set the advanced password callback for CUPS.

    void cupsSetPasswordCB2(cups_password_cb2_t cb, void *user_data);

    Parameters

    cb Callback function
    user_data User data pointer

    Discussion

    Pass NULL to restore the default (console) password callback, which reads the password from the console. Programs should call either this function or cupsSetPasswordCB2, as only one callback can be registered by a program per thread.

    Note: The current password callback is tracked separately for each thread in a program. Multi-threaded programs that override the callback need to do so in each thread for the same callback to be used.

    cupsSetServer

    Set the default server name and port.

    void cupsSetServer(const char *server);

    Parameters

    server Server name

    Discussion

    The "server" string can be a fully-qualified hostname, a numeric IPv4 or IPv6 address, or a domain socket pathname. Hostnames and numeric IP addresses can be optionally followed by a colon and port number to override the default port 631, e.g. "hostname:8631". Pass NULL to restore the default server name and port.

    Note: The current server is tracked separately for each thread in a program. Multi-threaded programs that override the server need to do so in each thread for the same server to be used.

     CUPS 1.5/macOS 10.7 cupsSetServerCertCB

    Set the server certificate callback.

    void cupsSetServerCertCB(cups_server_cert_cb_t cb, void *user_data);

    Parameters

    cb Callback function
    user_data User data pointer

    Discussion

    Pass NULL to restore the default callback.

    Note: The current credentials callback is tracked separately for each thread in a program. Multi-threaded programs that override the callback need to do so in each thread for the same callback to be used.

     CUPS 2.0/macOS 10.10 cupsSetServerCredentials

    Set the default server credentials.

    int cupsSetServerCredentials(const char *path, const char *common_name, int auto_create);

    Parameters

    path Keychain path or NULL for default
    common_name Default common name for server
    auto_create 1 = automatically create self-signed certificates

    Return Value

    1 on success, 0 on failure

    Discussion

    Note: The server credentials are used by all threads in the running process. This function is threadsafe.

    cupsSetUser

    Set the default user name.

    void cupsSetUser(const char *user);

    Parameters

    user User name

    Discussion

    Pass NULL to restore the default user name.

    Note: The current user name is tracked separately for each thread in a program. Multi-threaded programs that override the user name need to do so in each thread for the same user name to be used.

     CUPS 1.7/macOS 10.9 cupsSetUserAgent

    Set the default HTTP User-Agent string.

    void cupsSetUserAgent(const char *user_agent);

    Parameters

    user_agent User-Agent string or NULL

    Discussion

    Setting the string to NULL forces the default value containing the CUPS version, IPP version, and operating system version and architecture.

     CUPS 1.6/macOS 10.8 cupsStartDestDocument

    Start a new document.

    http_status_t cupsStartDestDocument(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, int job_id, const char *docname, const char *format, int num_options, cups_option_t *options, int last_document);

    Parameters

    http Connection to destination
    dest Destination
    info Destination information
    job_id Job ID
    docname Document name
    format Document format
    num_options Number of document options
    options Document options
    last_document 1 if this is the last document

    Return Value

    Status of document creation

    Discussion

    "job_id" is the job ID returned by cupsCreateDestJob. "docname" is the name of the document/file being printed, "format" is the MIME media type for the document (see CUPS_FORMAT_xxx constants), and "num_options" and "options" are the options do be applied to the document. "last_document" should be 1 if this is the last document to be submitted in the job. Returns HTTP_CONTINUE on success.

    cupsUser

    Return the current user's name.

    const char *cupsUser(void);

    Return Value

    User name

    Discussion

    Note: The current user name is tracked separately for each thread in a program. Multi-threaded programs that override the user name with the cupsSetUser function need to do so in each thread for the same user name to be used.

     CUPS 1.7/macOS 10.9 cupsUserAgent

    Return the default HTTP User-Agent string.

    const char *cupsUserAgent(void);

    Return Value

    User-Agent string

     CUPS 1.7/macOS 10.9 httpAcceptConnection

    Accept a new HTTP client connection from the specified listening socket.

    http_t *httpAcceptConnection(int fd, int blocking);

    Parameters

    fd Listen socket file descriptor
    blocking 1 if the connection should be blocking, 0 otherwise

    Return Value

    HTTP connection or NULL

     CUPS 1.5/macOS 10.7 httpAddCredential

    Allocates and adds a single credential to an array.

    int httpAddCredential(cups_array_t *credentials, const void *data, size_t datalen);

    Parameters

    credentials Credentials array
    data PEM-encoded X.509 data
    datalen Length of data

    Return Value

    0 on success, -1 on error

    Discussion

    Use cupsArrayNew(NULL, NULL) to create a credentials array.

     CUPS 1.2/macOS 10.5 httpAddrAny

    Check for the "any" address.

    int httpAddrAny(const http_addr_t *addr);

    Parameters

    addr Address to check

    Return Value

    1 if "any", 0 otherwise

     CUPS 2.0/OS 10.10 httpAddrClose

    Close a socket created by httpAddrConnect or httpAddrListen.

    int httpAddrClose(http_addr_t *addr, int fd);

    Parameters

    addr Listen address or NULL
    fd Socket file descriptor

    Return Value

    0 on success, -1 on failure

    Discussion

    Pass NULL for sockets created with httpAddrConnect2 and the listen address for sockets created with httpAddrListen. This function ensures that domain sockets are removed when closed.

     CUPS 1.7/macOS 10.9 httpAddrConnect2

    Connect to any of the addresses in the list with a timeout and optional cancel.

    http_addrlist_t *httpAddrConnect2(http_addrlist_t *addrlist, int *sock, int msec, int *cancel);

    Parameters

    addrlist List of potential addresses
    sock Socket
    msec Timeout in milliseconds
    cancel Pointer to "cancel" variable

    Return Value

    Connected address or NULL on failure

     CUPS 1.7/macOS 10.9 httpAddrCopyList

    Copy an address list.

    http_addrlist_t *httpAddrCopyList(http_addrlist_t *src);

    Parameters

    src Source address list

    Return Value

    New address list or NULL on error

     CUPS 1.2/macOS 10.5 httpAddrEqual

    Compare two addresses.

    int httpAddrEqual(const http_addr_t *addr1, const http_addr_t *addr2);

    Parameters

    addr1 First address
    addr2 Second address

    Return Value

    1 if equal, 0 if not

    httpAddrFamily

    Get the address family of an address.

    int httpAddrFamily(http_addr_t *addr);

    Parameters

    addr Address

    Return Value

    Address family

     CUPS 1.2/macOS 10.5 httpAddrFreeList

    Free an address list.

    void httpAddrFreeList(http_addrlist_t *addrlist);

    Parameters

    addrlist Address list to free

     CUPS 1.2/macOS 10.5 httpAddrGetList

    Get a list of addresses for a hostname.

    http_addrlist_t *httpAddrGetList(const char *hostname, int family, const char *service);

    Parameters

    hostname Hostname, IP address, or NULL for passive listen address
    family Address family or AF_UNSPEC
    service Service name or port number

    Return Value

    List of addresses or NULL

     CUPS 1.2/macOS 10.5 httpAddrLength

    Return the length of the address in bytes.

    int httpAddrLength(const http_addr_t *addr);

    Parameters

    addr Address

    Return Value

    Length in bytes

     CUPS 1.7/macOS 10.9 httpAddrListen

    Create a listening socket bound to the specified address and port.

    int httpAddrListen(http_addr_t *addr, int port);

    Parameters

    addr Address to bind to
    port Port number to bind to

    Return Value

    Socket or -1 on error

     CUPS 1.2/macOS 10.5 httpAddrLocalhost

    Check for the local loopback address.

    int httpAddrLocalhost(const http_addr_t *addr);

    Parameters

    addr Address to check

    Return Value

    1 if local host, 0 otherwise

     CUPS 1.2/macOS 10.5 httpAddrLookup

    Lookup the hostname associated with the address.

    char *httpAddrLookup(const http_addr_t *addr, char *name, int namelen);

    Parameters

    addr Address to lookup
    name Host name buffer
    namelen Size of name buffer

    Return Value

    Host name

     CUPS 1.7/macOS 10.9 httpAddrPort

    Get the port number associated with an address.

    int httpAddrPort(http_addr_t *addr);

    Parameters

    addr Address

    Return Value

    Port number

     CUPS 1.2/macOS 10.5 httpAddrString

    Convert an address to a numeric string.

    char *httpAddrString(const http_addr_t *addr, char *s, int slen);

    Parameters

    addr Address to convert
    s String buffer
    slen Length of string

    Return Value

    Numeric address string

     CUPS 1.2/macOS 10.5 httpAssembleURI

    Assemble a uniform resource identifier from its components.

    http_uri_status_t httpAssembleURI(http_uri_coding_t encoding, char *uri, int urilen, const char *scheme, const char *username, const char *host, int port, const char *resource);

    Parameters

    encoding Encoding flags
    uri URI buffer
    urilen Size of URI buffer
    scheme Scheme name
    username Username
    host Hostname or address
    port Port number
    resource Resource

    Return Value

    URI status

    Discussion

    This function escapes reserved characters in the URI depending on the value of the "encoding" argument. You should use this function in place of traditional string functions whenever you need to create a URI string.

     CUPS 1.2/macOS 10.5 httpAssembleURIf

    Assemble a uniform resource identifier from its components with a formatted resource.

    http_uri_status_t httpAssembleURIf(http_uri_coding_t encoding, char *uri, int urilen, const char *scheme, const char *username, const char *host, int port, const char *resourcef, ...);

    Parameters

    encoding Encoding flags
    uri URI buffer
    urilen Size of URI buffer
    scheme Scheme name
    username Username
    host Hostname or address
    port Port number
    resourcef Printf-style resource
    ... Additional arguments as needed

    Return Value

    URI status

    Discussion

    This function creates a formatted version of the resource string argument "resourcef" and escapes reserved characters in the URI depending on the value of the "encoding" argument. You should use this function in place of traditional string functions whenever you need to create a URI string.

     CUPS 1.7/macOS 10.9 httpAssembleUUID

    Assemble a name-based UUID URN conforming to RFC 4122.

    char *httpAssembleUUID(const char *server, int port, const char *name, int number, char *buffer, size_t bufsize);

    Parameters

    server Server name
    port Port number
    name Object name or NULL
    number Object number or 0
    buffer String buffer
    bufsize Size of buffer

    Return Value

    UUID string

    Discussion

    This function creates a unique 128-bit identifying number using the server name, port number, random data, and optionally an object name and/or object number. The result is formatted as a UUID URN as defined in RFC 4122.

    The buffer needs to be at least 46 bytes in size.

    httpBlocking

    Set blocking/non-blocking behavior on a connection.

    void httpBlocking(http_t *http, int b);

    Parameters

    http HTTP connection
    b 1 = blocking, 0 = non-blocking

    httpCheck

    Check to see if there is a pending response from the server.

    int httpCheck(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    0 = no data, 1 = data available

     CUPS 1.1.19/macOS 10.3 httpClearCookie

    Clear the cookie value(s).

    void httpClearCookie(http_t *http);

    Parameters

    http HTTP connection

    httpClearFields

    Clear HTTP request fields.

    void httpClearFields(http_t *http);

    Parameters

    http HTTP connection

    httpClose

    Close an HTTP connection.

    void httpClose(http_t *http);

    Parameters

    http HTTP connection

     CUPS 2.0/OS 10.10 httpCompareCredentials

    Compare two sets of X.509 credentials.

    int httpCompareCredentials(cups_array_t *cred1, cups_array_t *cred2);

    Parameters

    cred1 First set of X.509 credentials
    cred2 Second set of X.509 credentials

    Return Value

    1 if they match, 0 if they do not

     CUPS 1.7/macOS 10.9 httpConnect2

    Connect to a HTTP server.

    http_t *httpConnect2(const char *host, int port, http_addrlist_t *addrlist, int family, http_encryption_t encryption, int blocking, int msec, int *cancel);

    Parameters

    host Host to connect to
    port Port number
    addrlist List of addresses or NULL to lookup
    family Address family to use or AF_UNSPEC for any
    encryption Type of encryption to use
    blocking 1 for blocking connection, 0 for non-blocking
    msec Connection timeout in milliseconds, 0 means don't connect
    cancel Pointer to "cancel" variable

    Return Value

    New HTTP connection

     CUPS 1.5/macOS 10.7 httpCopyCredentials

    Copy the credentials associated with the peer in an encrypted connection.

    int httpCopyCredentials(http_t *http, cups_array_t **credentials);

    Parameters

    http Connection to server
    credentials Array of credentials

    Return Value

    Status of call (0 = success)

     CUPS 2.0/macOS 10.10 httpCredentialsAreValidForName

    Return whether the credentials are valid for the given name.

    int httpCredentialsAreValidForName(cups_array_t *credentials, const char *common_name);

    Parameters

    credentials Credentials
    common_name Name to check

    Return Value

    1 if valid, 0 otherwise

     CUPS 2.0/macOS 10.10 httpCredentialsGetExpiration

    Return the expiration date of the credentials.

    time_t httpCredentialsGetExpiration(cups_array_t *credentials);

    Parameters

    credentials Credentials

    Return Value

    Expiration date of credentials

     CUPS 2.0/macOS 10.10 httpCredentialsGetTrust

    Return the trust of credentials.

    http_trust_t httpCredentialsGetTrust(cups_array_t *credentials, const char *common_name);

    Parameters

    credentials Credentials
    common_name Common name for trust lookup

    Return Value

    Level of trust

     CUPS 2.0/macOS 10.10 httpCredentialsString

    Return a string representing the credentials.

    size_t httpCredentialsString(cups_array_t *credentials, char *buffer, size_t bufsize);

    Parameters

    credentials Credentials
    buffer Buffer or NULL
    bufsize Size of buffer

    Return Value

    Total size of credentials string

     CUPS 1.1.21/macOS 10.4 httpDecode64_2

    Base64-decode a string.

    char *httpDecode64_2(char *out, int *outlen, const char *in);

    Parameters

    out String to write to
    outlen Size of output string
    in String to read from

    Return Value

    Decoded string

    Discussion

    The caller must initialize "outlen" to the maximum size of the decoded string before calling httpDecode64_2. On return "outlen" contains the decoded length of the string.

    httpDelete

    Send a DELETE request to the server.

    int httpDelete(http_t *http, const char *uri);

    Parameters

    http HTTP connection
    uri URI to delete

    Return Value

    Status of call (0 = success)

     CUPS 1.1.21/macOS 10.4 httpEncode64_2

    Base64-encode a string.

    char *httpEncode64_2(char *out, int outlen, const char *in, int inlen);

    Parameters

    out String to write to
    outlen Maximum size of output string
    in String to read from
    inlen Size of input string

    Return Value

    Encoded string

    httpEncryption

    Set the required encryption on the link.

    int httpEncryption(http_t *http, http_encryption_t e);

    Parameters

    http HTTP connection
    e New encryption preference

    Return Value

    -1 on error, 0 on success

    httpError

    Get the last error on a connection.

    int httpError(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Error code (errno) value

    httpFieldValue

    Return the HTTP field enumeration value for a field name.

    http_field_t httpFieldValue(const char *name);

    Parameters

    name String name

    Return Value

    Field index

    httpFlush

    Flush data read from a HTTP connection.

    void httpFlush(http_t *http);

    Parameters

    http HTTP connection

     CUPS 1.2/macOS 10.5 httpFlushWrite

    Flush data written to a HTTP connection.

    int httpFlushWrite(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Bytes written or -1 on error

    httpFreeCredentials

    Free an array of credentials.

    void httpFreeCredentials(cups_array_t *credentials);

    Parameters

    credentials Array of credentials

    httpGet

    Send a GET request to the server.

    int httpGet(http_t *http, const char *uri);

    Parameters

    http HTTP connection
    uri URI to get

    Return Value

    Status of call (0 = success)

     CUPS 2.0/OS 10.10 httpGetActivity

    Get the most recent activity for a connection.

    time_t httpGetActivity(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Time of last read or write

    Discussion

    The return value is the time in seconds of the last read or write.

     CUPS 2.0/OS 10.10 httpGetAddress

    Get the address of the connected peer of a connection.

    http_addr_t *httpGetAddress(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Connected address or NULL

    Discussion

    For connections created with httpConnect2, the address is for the server. For connections created with httpAccept, the address is for the client.

    Returns NULL if the socket is currently unconnected.

     CUPS 1.3/macOS 10.5 httpGetAuthString

    Get the current authorization string.

    char *httpGetAuthString(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Authorization string

    Discussion

    The authorization string is set by cupsDoAuthentication and httpSetAuthString. Use httpGetAuthString to retrieve the string to use with httpSetField for the HTTP_FIELD_AUTHORIZATION value.

     CUPS 1.2/macOS 10.5 httpGetBlocking

    Get the blocking/non-block state of a connection.

    int httpGetBlocking(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    1 if blocking, 0 if non-blocking

     CUPS 1.7/macOS 10.9 httpGetContentEncoding

    Get a common content encoding, if any, between the client and server.

    const char *httpGetContentEncoding(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Content-Coding value or NULL for the identity coding.

    Discussion

    This function uses the value of the Accepts-Encoding HTTP header and must be called after receiving a response from the server or a request from the client. The value returned can be use in subsequent requests (for clients) or in the response (for servers) in order to compress the content stream.

     CUPS 1.1.19/macOS 10.3 httpGetCookie

    Get any cookie data from the response.

    const char *httpGetCookie(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Cookie data or NULL

     CUPS 1.2/macOS 10.5 httpGetDateString2

    Get a formatted date/time string from a time value.

    const char *httpGetDateString2(time_t t, char *s, int slen);

    Parameters

    t Time in seconds
    s String buffer
    slen Size of string buffer

    Return Value

    Date/time string

    httpGetDateTime

    Get a time value from a formatted date/time string.

    time_t httpGetDateTime(const char *s);

    Parameters

    s Date/time string

    Return Value

    Time in seconds

     CUPS 2.0/OS 10.10 httpGetEncryption

    Get the current encryption mode of a connection.

    http_encryption_t httpGetEncryption(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Current encryption mode

    Discussion

    This function returns the encryption mode for the connection. Use the httpIsEncrypted function to determine whether a TLS session has been established.

     CUPS 1.7/macOS 10.9 httpGetExpect

    Get the value of the Expect header, if any.

    http_status_t httpGetExpect(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Expect: status, if any

    Discussion

    Returns HTTP_STATUS_NONE if there is no Expect header, otherwise returns the expected HTTP status code, typically HTTP_STATUS_CONTINUE.

     CUPS 1.2/macOS 10.5 httpGetFd

    Get the file descriptor associated with a connection.

    int httpGetFd(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    File descriptor or -1 if none

    httpGetField

    Get a field value from a request/response.

    const char *httpGetField(http_t *http, http_field_t field);

    Parameters

    http HTTP connection
    field Field to get

    Return Value

    Field value

     CUPS 1.2/macOS 10.5 httpGetHostname

    Get the FQDN for the connection or local system.

    const char *httpGetHostname(http_t *http, char *s, int slen);

    Parameters

    http HTTP connection or NULL
    s String buffer for name
    slen Size of buffer

    Return Value

    FQDN for connection or system

    Discussion

    When "http" points to a connected socket, return the hostname or address that was used in the call to httpConnect() or httpConnectEncrypt(), or the address of the client for the connection from httpAcceptConnection(). Otherwise, return the FQDN for the local system using both gethostname() and gethostbyname() to get the local hostname with domain.

     CUPS 2.0/OS 10.10 httpGetKeepAlive

    Get the current Keep-Alive state of the connection.

    http_keepalive_t httpGetKeepAlive(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Keep-Alive state

     CUPS 1.2/macOS 10.5 httpGetLength2

    Get the amount of data remaining from the content-length or transfer-encoding fields.

    off_t httpGetLength2(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Content length

    Discussion

    This function returns the complete content length, even for content larger than 2^31 - 1.

     CUPS 2.0/OS 10.10 httpGetPending

    Get the number of bytes that are buffered for writing.

    size_t httpGetPending(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Number of bytes buffered

     CUPS 2.0/OS 10.10 httpGetReady

    Get the number of bytes that can be read without blocking.

    size_t httpGetReady(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Number of bytes available

     CUPS 2.0/OS 10.10 httpGetRemaining

    Get the number of remaining bytes in the message body or current chunk.

    size_t httpGetRemaining(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Remaining bytes

    Discussion

    The httpIsChunked function can be used to determine whether the message body is chunked or fixed-length.

    httpGetState

    Get the current state of the HTTP request.

    http_state_t httpGetState(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    HTTP state

     CUPS 1.2/macOS 10.5 httpGetStatus

    Get the status of the last HTTP request.

    http_status_t httpGetStatus(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    HTTP status

     CUPS 1.2/macOS 10.5 httpGetSubField2

    Get a sub-field value.

    char *httpGetSubField2(http_t *http, http_field_t field, const char *name, char *value, int valuelen);

    Parameters

    http HTTP connection
    field Field index
    name Name of sub-field
    value Value string
    valuelen Size of value buffer

    Return Value

    Value or NULL

    httpGetVersion

    Get the HTTP version at the other end.

    http_version_t httpGetVersion(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    Version number

    httpGets

    Get a line of text from a HTTP connection.

    char *httpGets(char *line, int length, http_t *http);

    Parameters

    line Line to read into
    length Max length of buffer
    http HTTP connection

    Return Value

    Line or NULL

    httpHead

    Send a HEAD request to the server.

    int httpHead(http_t *http, const char *uri);

    Parameters

    http HTTP connection
    uri URI for head

    Return Value

    Status of call (0 = success)

    httpInitialize

    Initialize the HTTP interface library and set the default HTTP proxy (if any).

    void httpInitialize(void);

     CUPS 2.0/OS 10.10 httpIsChunked

    Report whether a message body is chunked.

    int httpIsChunked(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    1 if chunked, 0 if not

    Discussion

    This function returns non-zero if the message body is composed of variable-length chunks.

     CUPS 2.0/OS 10.10 httpIsEncrypted

    Report whether a connection is encrypted.

    int httpIsEncrypted(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    1 if encrypted, 0 if not

    Discussion

    This function returns non-zero if the connection is currently encrypted.

     CUPS 2.0/OS 10.10 httpLoadCredentials

    Load X.509 credentials from a keychain file.

    int httpLoadCredentials(const char *path, cups_array_t **credentials, const char *common_name);

    Parameters

    path Keychain path or NULL for default
    credentials Credentials
    common_name Common name for credentials

    Return Value

    0 on success, -1 on error

    httpOptions

    Send an OPTIONS request to the server.

    int httpOptions(http_t *http, const char *uri);

    Parameters

    http HTTP connection
    uri URI for options

    Return Value

    Status of call (0 = success)

     CUPS 1.7/macOS 10.9 httpPeek

    Peek at data from a HTTP connection.

    ssize_t httpPeek(http_t *http, char *buffer, size_t length);

    Parameters

    http HTTP connection
    buffer Buffer for data
    length Maximum number of bytes

    Return Value

    Number of bytes copied

    Discussion

    This function copies available data from the given HTTP connection, reading a buffer as needed. The data is still available for reading using httpRead2.

    For non-blocking connections the usual timeouts apply.

    httpPost

    Send a POST request to the server.

    int httpPost(http_t *http, const char *uri);

    Parameters

    http HTTP connection
    uri URI for post

    Return Value

    Status of call (0 = success)

    httpPut

    Send a PUT request to the server.

    int httpPut(http_t *http, const char *uri);

    Parameters

    http HTTP connection
    uri URI to put

    Return Value

    Status of call (0 = success)

     CUPS 1.2/macOS 10.5 httpRead2

    Read data from a HTTP connection.

    ssize_t httpRead2(http_t *http, char *buffer, size_t length);

    Parameters

    http HTTP connection
    buffer Buffer for data
    length Maximum number of bytes

    Return Value

    Number of bytes read

     CUPS 1.7/macOS 10.9 httpReadRequest

    Read a HTTP request from a connection.

    http_state_t httpReadRequest(http_t *http, char *uri, size_t urilen);

    Parameters

    http HTTP connection
    uri URI buffer
    urilen Size of URI buffer

    Return Value

    New state of connection

    httpReconnect2

    Reconnect to a HTTP server with timeout and optional cancel.

    int httpReconnect2(http_t *http, int msec, int *cancel);

    Parameters

    http HTTP connection
    msec Timeout in milliseconds
    cancel Pointer to "cancel" variable

    Return Value

    0 on success, non-zero on failure

     CUPS 2.0/OS 10.10 httpResolveHostname

    Resolve the hostname of the HTTP connection address.

    const char *httpResolveHostname(http_t *http, char *buffer, size_t bufsize);

    Parameters

    http HTTP connection
    buffer Hostname buffer
    bufsize Size of buffer

    Return Value

    Resolved hostname or NULL

     CUPS 2.0/OS 10.10 httpSaveCredentials

    Save X.509 credentials to a keychain file.

    int httpSaveCredentials(const char *path, cups_array_t *credentials, const char *common_name);

    Parameters

    path Keychain path or NULL for default
    credentials Credentials
    common_name Common name for credentials

    Return Value

    -1 on error, 0 on success

     CUPS 1.2/macOS 10.5 httpSeparateURI

    Separate a Universal Resource Identifier into its components.

    http_uri_status_t httpSeparateURI(http_uri_coding_t decoding, const char *uri, char *scheme, int schemelen, char *username, int usernamelen, char *host, int hostlen, int *port, char *resource, int resourcelen);

    Parameters

    decoding Decoding flags
    uri Universal Resource Identifier
    scheme Scheme (http, https, etc.)
    schemelen Size of scheme buffer
    username Username
    usernamelen Size of username buffer
    host Hostname
    hostlen Size of hostname buffer
    port Port number to use
    resource Resource/filename
    resourcelen Size of resource buffer

    Return Value

    Result of separation

     CUPS 1.3/macOS 10.5 httpSetAuthString

    Set the current authorization string.

    void httpSetAuthString(http_t *http, const char *scheme, const char *data);

    Parameters

    http HTTP connection
    scheme Auth scheme (NULL to clear it)
    data Auth data (NULL for none)

    Discussion

    This function just stores a copy of the current authorization string in the HTTP connection object. You must still call httpSetField to set HTTP_FIELD_AUTHORIZATION prior to issuing a HTTP request using httpGet, httpHead, httpOptions, httpPost, or httpPut.

     CUPS 1.1.19/macOS 10.3 httpSetCookie

    Set the cookie value(s).

    void httpSetCookie(http_t *http, const char *cookie);

    Parameters

    http Connection
    cookie Cookie string

     CUPS 1.5/macOS 10.7 httpSetCredentials

    Set the credentials associated with an encrypted connection.

    int httpSetCredentials(http_t *http, cups_array_t *credentials);

    Parameters

    http HTTP connection
    credentials Array of credentials

    Return Value

    Status of call (0 = success)

     CUPS 1.7/macOS 10.9 httpSetDefaultField

    Set the default value of an HTTP header.

    void httpSetDefaultField(http_t *http, http_field_t field, const char *value);

    Parameters

    http HTTP connection
    field Field index
    value Value

    Discussion

    Currently only HTTP_FIELD_ACCEPT_ENCODING, HTTP_FIELD_SERVER, and HTTP_FIELD_USER_AGENT can be set.

     CUPS 1.2/macOS 10.5 httpSetExpect

    Set the Expect: header in a request.

    void httpSetExpect(http_t *http, http_status_t expect);

    Parameters

    http HTTP connection
    expect HTTP status to expect (HTTP_STATUS_CONTINUE)

    Discussion

    Currently only HTTP_STATUS_CONTINUE is supported for the "expect" argument.

    httpSetField

    Set the value of an HTTP header.

    void httpSetField(http_t *http, http_field_t field, const char *value);

    Parameters

    http HTTP connection
    field Field index
    value Value

     CUPS 2.0/OS 10.10 httpSetKeepAlive

    Set the current Keep-Alive state of a connection.

    void httpSetKeepAlive(http_t *http, http_keepalive_t keep_alive);

    Parameters

    http HTTP connection
    keep_alive New Keep-Alive value

     CUPS 1.2/macOS 10.5 httpSetLength

    Set the content-length and content-encoding.

    void httpSetLength(http_t *http, size_t length);

    Parameters

    http HTTP connection
    length Length (0 for chunked)

     CUPS 1.5/macOS 10.7 httpSetTimeout

    Set read/write timeouts and an optional callback.

    void httpSetTimeout(http_t *http, double timeout, http_timeout_cb_t cb, void *user_data);

    Parameters

    http HTTP connection
    timeout Number of seconds for timeout, must be greater than 0
    cb Callback function or NULL
    user_data User data pointer

    Discussion

    The optional timeout callback receives both the HTTP connection and a user data pointer and must return 1 to continue or 0 to error (time) out.

     CUPS 2.0/OS 10.10 httpShutdown

    Shutdown one side of an HTTP connection.

    void httpShutdown(http_t *http);

    Parameters

    http HTTP connection

     CUPS 2.0/OS 10.10 httpStateString

    Return the string describing a HTTP state value.

    const char *httpStateString(http_state_t state);

    Parameters

    state HTTP state value

    Return Value

    State string

    httpStatus

    Return a short string describing a HTTP status code.

    const char *httpStatus(http_status_t status);

    Parameters

    status HTTP status code

    Return Value

    Localized status string

    Discussion

    The returned string is localized to the current POSIX locale and is based on the status strings defined in RFC 7231.

     CUPS 2.0/OS 10.10 httpURIStatusString

    Return a string describing a URI status code.

    const char *httpURIStatusString(http_uri_status_t status);

    Parameters

    status URI status code

    Return Value

    Localized status string

    httpUpdate

    Update the current HTTP state for incoming data.

    http_status_t httpUpdate(http_t *http);

    Parameters

    http HTTP connection

    Return Value

    HTTP status

     CUPS 1.1.19/macOS 10.3 httpWait

    Wait for data available on a connection.

    int httpWait(http_t *http, int msec);

    Parameters

    http HTTP connection
    msec Milliseconds to wait

    Return Value

    1 if data is available, 0 otherwise

     CUPS 1.2/macOS 10.5 httpWrite2

    Write data to a HTTP connection.

    ssize_t httpWrite2(http_t *http, const char *buffer, size_t length);

    Parameters

    http HTTP connection
    buffer Buffer for data
    length Number of bytes to write

    Return Value

    Number of bytes written

     CUPS 1.7/macOS 10.9 httpWriteResponse

    Write a HTTP response to a client connection.

    int httpWriteResponse(http_t *http, http_status_t status);

    Parameters

    http HTTP connection
    status Status code

    Return Value

    0 on success, -1 on error

    ippAddBoolean

    Add a boolean attribute to an IPP message.

    ipp_attribute_t *ippAddBoolean(ipp_t *ipp, ipp_tag_t group, const char *name, char value);

    Parameters

    ipp IPP message
    group IPP group
    name Name of attribute
    value Value of attribute

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    ippAddBooleans

    Add an array of boolean values.

    ipp_attribute_t *ippAddBooleans(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, const char *values);

    Parameters

    ipp IPP message
    group IPP group
    name Name of attribute
    num_values Number of values
    values Values

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

     CUPS 1.1.19/macOS 10.3 ippAddCollection

    Add a collection value.

    ipp_attribute_t *ippAddCollection(ipp_t *ipp, ipp_tag_t group, const char *name, ipp_t *value);

    Parameters

    ipp IPP message
    group IPP group
    name Name of attribute
    value Value

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

     CUPS 1.1.19/macOS 10.3 ippAddCollections

    Add an array of collection values.

    ipp_attribute_t *ippAddCollections(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, const ipp_t **values);

    Parameters

    ipp IPP message
    group IPP group
    name Name of attribute
    num_values Number of values
    values Values

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    ippAddDate

    Add a dateTime attribute to an IPP message.

    ipp_attribute_t *ippAddDate(ipp_t *ipp, ipp_tag_t group, const char *name, const ipp_uchar_t *value);

    Parameters

    ipp IPP message
    group IPP group
    name Name of attribute
    value Value

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    ippAddInteger

    Add a integer attribute to an IPP message.

    ipp_attribute_t *ippAddInteger(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, int value);

    Parameters

    ipp IPP message
    group IPP group
    value_tag Type of attribute
    name Name of attribute
    value Value of attribute

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    Supported values include enum (IPP_TAG_ENUM) and integer (IPP_TAG_INTEGER).

    ippAddIntegers

    Add an array of integer values.

    ipp_attribute_t *ippAddIntegers(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, int num_values, const int *values);

    Parameters

    ipp IPP message
    group IPP group
    value_tag Type of attribute
    name Name of attribute
    num_values Number of values
    values Values

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    Supported values include enum (IPP_TAG_ENUM) and integer (IPP_TAG_INTEGER).

     CUPS 1.2/macOS 10.5 ippAddOctetString

    Add an octetString value to an IPP message.

    ipp_attribute_t *ippAddOctetString(ipp_t *ipp, ipp_tag_t group, const char *name, const void *data, int datalen);

    Parameters

    ipp IPP message
    group IPP group
    name Name of attribute
    data octetString data
    datalen Length of data in bytes

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

     CUPS 1.6/macOS 10.8 ippAddOutOfBand

    Add an out-of-band value to an IPP message.

    ipp_attribute_t *ippAddOutOfBand(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name);

    Parameters

    ipp IPP message
    group IPP group
    value_tag Type of attribute
    name Name of attribute

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    Supported out-of-band values include unsupported-value (IPP_TAG_UNSUPPORTED_VALUE), default (IPP_TAG_DEFAULT), unknown (IPP_TAG_UNKNOWN), no-value (IPP_TAG_NOVALUE), not-settable (IPP_TAG_NOTSETTABLE), delete-attribute (IPP_TAG_DELETEATTR), and admin-define (IPP_TAG_ADMINDEFINE).

    ippAddRange

    Add a range of values to an IPP message.

    ipp_attribute_t *ippAddRange(ipp_t *ipp, ipp_tag_t group, const char *name, int lower, int upper);

    Parameters

    ipp IPP message
    group IPP group
    name Name of attribute
    lower Lower value
    upper Upper value

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    The lower parameter must be less than or equal to the upper parameter.

    ippAddRanges

    Add ranges of values to an IPP message.

    ipp_attribute_t *ippAddRanges(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, const int *lower, const int *upper);

    Parameters

    ipp IPP message
    group IPP group
    name Name of attribute
    num_values Number of values
    lower Lower values
    upper Upper values

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    ippAddResolution

    Add a resolution value to an IPP message.

    ipp_attribute_t *ippAddResolution(ipp_t *ipp, ipp_tag_t group, const char *name, ipp_res_t units, int xres, int yres);

    Parameters

    ipp IPP message
    group IPP group
    name Name of attribute
    units Units for resolution
    xres X resolution
    yres Y resolution

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    ippAddResolutions

    Add resolution values to an IPP message.

    ipp_attribute_t *ippAddResolutions(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, ipp_res_t units, const int *xres, const int *yres);

    Parameters

    ipp IPP message
    group IPP group
    name Name of attribute
    num_values Number of values
    units Units for resolution
    xres X resolutions
    yres Y resolutions

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    ippAddSeparator

    Add a group separator to an IPP message.

    ipp_attribute_t *ippAddSeparator(ipp_t *ipp);

    Parameters

    ipp IPP message

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    ippAddString

    Add a language-encoded string to an IPP message.

    ipp_attribute_t *ippAddString(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, const char *language, const char *value);

    Parameters

    ipp IPP message
    group IPP group
    value_tag Type of attribute
    name Name of attribute
    language Language code
    value Value

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    Supported string values include charset (IPP_TAG_CHARSET), keyword (IPP_TAG_KEYWORD), language (IPP_TAG_LANGUAGE), mimeMediaType (IPP_TAG_MIMETYPE), name (IPP_TAG_NAME), nameWithLanguage (IPP_TAG_NAMELANG), text (code IPP_TAG_TEXT@), textWithLanguage (IPP_TAG_TEXTLANG), uri (IPP_TAG_URI), and uriScheme (IPP_TAG_URISCHEME).

    The language parameter must be non-NULL for nameWithLanguage and textWithLanguage string values and must be NULL for all other string values.

     CUPS 1.7/macOS 10.9 ippAddStringf

    Add a formatted string to an IPP message.

    ipp_attribute_t *ippAddStringf(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, const char *language, const char *format, ...);

    Parameters

    ipp IPP message
    group IPP group
    value_tag Type of attribute
    name Name of attribute
    language Language code (NULL for default)
    format Printf-style format string
    ... Additional arguments as needed

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    Supported string values include charset (IPP_TAG_CHARSET), keyword (IPP_TAG_KEYWORD), language (IPP_TAG_LANGUAGE), mimeMediaType (IPP_TAG_MIMETYPE), name (IPP_TAG_NAME), nameWithLanguage (IPP_TAG_NAMELANG), text (code IPP_TAG_TEXT@), textWithLanguage (IPP_TAG_TEXTLANG), uri (IPP_TAG_URI), and uriScheme (IPP_TAG_URISCHEME).

    The language parameter must be non-NULL for nameWithLanguage and textWithLanguage string values and must be NULL for all other string values.

    The format parameter uses formatting characters compatible with the printf family of standard functions. Additional arguments follow it as needed. The formatted string is truncated as needed to the maximum length of the corresponding value type.

     CUPS 1.7/macOS 10.9 ippAddStringfv

    Add a formatted string to an IPP message.

    ipp_attribute_t *ippAddStringfv(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, const char *language, const char *format, va_list ap);

    Parameters

    ipp IPP message
    group IPP group
    value_tag Type of attribute
    name Name of attribute
    language Language code (NULL for default)
    format Printf-style format string
    ap Additional arguments

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    Supported string values include charset (IPP_TAG_CHARSET), keyword (IPP_TAG_KEYWORD), language (IPP_TAG_LANGUAGE), mimeMediaType (IPP_TAG_MIMETYPE), name (IPP_TAG_NAME), nameWithLanguage (IPP_TAG_NAMELANG), text (code IPP_TAG_TEXT@), textWithLanguage (IPP_TAG_TEXTLANG), uri (IPP_TAG_URI), and uriScheme (IPP_TAG_URISCHEME).

    The language parameter must be non-NULL for nameWithLanguage and textWithLanguage string values and must be NULL for all other string values.

    The format parameter uses formatting characters compatible with the printf family of standard functions. Additional arguments are passed in the stdarg pointer ap. The formatted string is truncated as needed to the maximum length of the corresponding value type.

    ippAddStrings

    Add language-encoded strings to an IPP message.

    ipp_attribute_t *ippAddStrings(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, int num_values, const char *language, const char *const *values);

    Parameters

    ipp IPP message
    group IPP group
    value_tag Type of attribute
    name Name of attribute
    num_values Number of values
    language Language code (NULL for default)
    values Values

    Return Value

    New attribute

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

    Supported string values include charset (IPP_TAG_CHARSET), keyword (IPP_TAG_KEYWORD), language (IPP_TAG_LANGUAGE), mimeMediaType (IPP_TAG_MIMETYPE), name (IPP_TAG_NAME), nameWithLanguage (IPP_TAG_NAMELANG), text (code IPP_TAG_TEXT@), textWithLanguage (IPP_TAG_TEXTLANG), uri (IPP_TAG_URI), and uriScheme (IPP_TAG_URISCHEME).

    The language parameter must be non-NULL for nameWithLanguage and textWithLanguage string values and must be NULL for all other string values.

     CUPS 1.6/macOS 10.8 ippAttributeString

    Convert the attribute's value to a string.

    size_t ippAttributeString(ipp_attribute_t *attr, char *buffer, size_t bufsize);

    Parameters

    attr Attribute
    buffer String buffer or NULL
    bufsize Size of string buffer

    Return Value

    Number of bytes less nul

    Discussion

    Returns the number of bytes that would be written, not including the trailing nul. The buffer pointer can be NULL to get the required length, just like (v)snprintf.

     CUPS 1.7/macOS 10.9 ippContainsInteger

    Determine whether an attribute contains the specified value or is within the list of ranges.

    int ippContainsInteger(ipp_attribute_t *attr, int value);

    Parameters

    attr Attribute
    value Integer/enum value

    Return Value

    1 on a match, 0 on no match

    Discussion

    Returns non-zero when the attribute contains either a matching integer or enum value, or the value falls within one of the rangeOfInteger values for the attribute.

     CUPS 1.7/macOS 10.9 ippContainsString

    Determine whether an attribute contains the specified string value.

    int ippContainsString(ipp_attribute_t *attr, const char *value);

    Parameters

    attr Attribute
    value String value

    Return Value

    1 on a match, 0 on no match

    Discussion

    Returns non-zero when the attribute contains a matching charset, keyword, naturalLanguage, mimeMediaType, name, text, uri, or uriScheme value.

     CUPS 1.6/macOS 10.8 ippCopyAttribute

    Copy an attribute.

    ipp_attribute_t *ippCopyAttribute(ipp_t *dst, ipp_attribute_t *srcattr, int quickcopy);

    Parameters

    dst Destination IPP message
    srcattr Attribute to copy
    quickcopy 1 for a referenced copy, 0 for normal

    Return Value

    New attribute

    Discussion

    The specified attribute, attr, is copied to the destination IPP message. When quickcopy is non-zero, a "shallow" reference copy of the attribute is created - this should only be done as long as the original source IPP message will not be freed for the life of the destination.

     CUPS 1.6/macOS 10.8 ippCopyAttributes

    Copy attributes from one IPP message to another.

    int ippCopyAttributes(ipp_t *dst, ipp_t *src, int quickcopy, ipp_copycb_t cb, void *context);

    Parameters

    dst Destination IPP message
    src Source IPP message
    quickcopy 1 for a referenced copy, 0 for normal
    cb Copy callback or NULL for none
    context Context pointer

    Return Value

    1 on success, 0 on error

    Discussion

    Zero or more attributes are copied from the source IPP message, src, to the destination IPP message, dst. When quickcopy is non-zero, a "shallow" reference copy of the attribute is created - this should only be done as long as the original source IPP message will not be freed for the life of the destination.

    The cb and context parameters provide a generic way to "filter" the attributes that are copied - the function must return 1 to copy the attribute or 0 to skip it. The function may also choose to do a partial copy of the source attribute itself.

     CUPS 1.7/macOS 10.9 ippCreateRequestedArray

    Create a CUPS array of attribute names from the given requested-attributes attribute.

    cups_array_t *ippCreateRequestedArray(ipp_t *request);

    Parameters

    request IPP request

    Return Value

    CUPS array or NULL if all

    Discussion

    This function creates a (sorted) CUPS array of attribute names matching the list of "requested-attribute" values supplied in an IPP request. All IANA- registered values are supported in addition to the CUPS IPP extension attributes.

    The request parameter specifies the request message that was read from the client. NULL is returned if all attributes should be returned. Otherwise, the result is a sorted array of attribute names, where cupsArrayFind(array, "attribute-name") will return a non-NULL pointer. The array must be freed using the cupsArrayDelete function.

    ippDateToTime

    Convert from RFC 2579 Date/Time format to time in seconds.

    time_t ippDateToTime(const ipp_uchar_t *date);

    Parameters

    date RFC 2579 date info

    Return Value

    UNIX time value

    ippDelete

    Delete an IPP message.

    void ippDelete(ipp_t *ipp);

    Parameters

    ipp IPP message

     CUPS 1.1.19/macOS 10.3 ippDeleteAttribute

    Delete a single attribute in an IPP message.

    void ippDeleteAttribute(ipp_t *ipp, ipp_attribute_t *attr);

    Parameters

    ipp IPP message
    attr Attribute to delete

     CUPS 1.6/macOS 10.8 ippDeleteValues

    Delete values in an attribute.

    int ippDeleteValues(ipp_t *ipp, ipp_attribute_t **attr, int element, int count);

    Parameters

    ipp IPP message
    attr Attribute
    element Index of first value to delete (0-based)
    count Number of values to delete

    Return Value

    1 on success, 0 on failure

    Discussion

    The element parameter specifies the first value to delete, starting at 0. It must be less than the number of values returned by ippGetCount.

    The attr parameter may be modified as a result of setting the value.

    Deleting all values in an attribute deletes the attribute.

    ippEnumString

    Return a string corresponding to the enum value.

    const char *ippEnumString(const char *attrname, int enumvalue);

    Parameters

    attrname Attribute name
    enumvalue Enum value

    Return Value

    Enum string

    ippEnumValue

    Return the value associated with a given enum string.

    int ippEnumValue(const char *attrname, const char *enumstring);

    Parameters

    attrname Attribute name
    enumstring Enum string

    Return Value

    Enum value or -1 if unknown

    ippErrorString

    Return a name for the given status code.

    const char *ippErrorString(ipp_status_t error);

    Parameters

    error Error status

    Return Value

    Text string

     CUPS 1.2/macOS 10.5 ippErrorValue

    Return a status code for the given name.

    ipp_status_t ippErrorValue(const char *name);

    Parameters

    name Name

    Return Value

    IPP status code

    ippFindAttribute

    Find a named attribute in a request.

    ipp_attribute_t *ippFindAttribute(ipp_t *ipp, const char *name, ipp_tag_t type);

    Parameters

    ipp IPP message
    name Name of attribute
    type Type of attribute

    Return Value

    Matching attribute

    Discussion

    Starting with CUPS 2.0, the attribute name can contain a hierarchical list of attribute and member names separated by slashes, for example "media-col/media-size".

    ippFindNextAttribute

    Find the next named attribute in a request.

    ipp_attribute_t *ippFindNextAttribute(ipp_t *ipp, const char *name, ipp_tag_t type);

    Parameters

    ipp IPP message
    name Name of attribute
    type Type of attribute

    Return Value

    Matching attribute

    Discussion

    Starting with CUPS 2.0, the attribute name can contain a hierarchical list of attribute and member names separated by slashes, for example "media-col/media-size".

     CUPS 1.6/macOS 10.8 ippFirstAttribute

    Return the first attribute in the message.

    ipp_attribute_t *ippFirstAttribute(ipp_t *ipp);

    Parameters

    ipp IPP message

    Return Value

    First attribute or NULL if none

     CUPS 1.6/macOS 10.8 ippGetBoolean

    Get a boolean value for an attribute.

    int ippGetBoolean(ipp_attribute_t *attr, int element);

    Parameters

    attr IPP attribute
    element Value number (0-based)

    Return Value

    Boolean value or 0 on error

    Discussion

    The element parameter specifies which value to get from 0 to ippGetCount(attr) - 1.

     CUPS 1.6/macOS 10.8 ippGetCollection

    Get a collection value for an attribute.

    ipp_t *ippGetCollection(ipp_attribute_t *attr, int element);

    Parameters

    attr IPP attribute
    element Value number (0-based)

    Return Value

    Collection value or NULL on error

    Discussion

    The element parameter specifies which value to get from 0 to ippGetCount(attr) - 1.

     CUPS 1.6/macOS 10.8 ippGetCount

    Get the number of values in an attribute.

    int ippGetCount(ipp_attribute_t *attr);

    Parameters

    attr IPP attribute

    Return Value

    Number of values or 0 on error

     CUPS 1.6/macOS 10.8 ippGetDate

    Get a dateTime value for an attribute.

    const ipp_uchar_t *ippGetDate(ipp_attribute_t *attr, int element);

    Parameters

    attr IPP attribute
    element Value number (0-based)

    Return Value

    dateTime value or NULL

    Discussion

    The element parameter specifies which value to get from 0 to ippGetCount(attr) - 1.

     CUPS 1.6/macOS 10.8 ippGetGroupTag

    Get the group associated with an attribute.

    ipp_tag_t ippGetGroupTag(ipp_attribute_t *attr);

    Parameters

    attr IPP attribute

    Return Value

    Group tag or IPP_TAG_ZERO on error

     CUPS 1.6/macOS 10.8 ippGetInteger

    Get the integer/enum value for an attribute.

    int ippGetInteger(ipp_attribute_t *attr, int element);

    Parameters

    attr IPP attribute
    element Value number (0-based)

    Return Value

    Value or 0 on error

    Discussion

    The element parameter specifies which value to get from 0 to ippGetCount(attr) - 1.

     CUPS 1.6/macOS 10.8 ippGetName

    Get the attribute name.

    const char *ippGetName(ipp_attribute_t *attr);

    Parameters

    attr IPP attribute

    Return Value

    Attribute name or NULL for separators

     CUPS 1.7/macOS 10.9 ippGetOctetString

    Get an octetString value from an IPP attribute.

    void *ippGetOctetString(ipp_attribute_t *attr, int element, int *datalen);

    Parameters

    attr IPP attribute
    element Value number (0-based)
    datalen Length of octetString data

    Return Value

    Pointer to octetString data

    Discussion

    The element parameter specifies which value to get from 0 to ippGetCount(attr) - 1.

     CUPS 1.6/macOS 10.8 ippGetOperation

    Get the operation ID in an IPP message.

    ipp_op_t ippGetOperation(ipp_t *ipp);

    Parameters

    ipp IPP request message

    Return Value

    Operation ID or 0 on error

     CUPS 1.6/macOS 10.8 ippGetRange

    Get a rangeOfInteger value from an attribute.

    int ippGetRange(ipp_attribute_t *attr, int element, int *uppervalue);

    Parameters

    attr IPP attribute
    element Value number (0-based)
    uppervalue Upper value of range

    Return Value

    Lower value of range or 0

    Discussion

    The element parameter specifies which value to get from 0 to ippGetCount(attr) - 1.

     CUPS 1.6/macOS 10.8 ippGetRequestId

    Get the request ID from an IPP message.

    int ippGetRequestId(ipp_t *ipp);

    Parameters

    ipp IPP message

    Return Value

    Request ID or 0 on error

     CUPS 1.6/macOS 10.8 ippGetResolution

    Get a resolution value for an attribute.

    int ippGetResolution(ipp_attribute_t *attr, int element, int *yres, ipp_res_t *units);

    Parameters

    attr IPP attribute
    element Value number (0-based)
    yres Vertical/feed resolution
    units Units for resolution

    Return Value

    Horizontal/cross feed resolution or 0

    Discussion

    The element parameter specifies which value to get from 0 to ippGetCount(attr) - 1.

     CUPS 1.6/macOS 10.8 ippGetState

    Get the IPP message state.

    ipp_state_t ippGetState(ipp_t *ipp);

    Parameters

    ipp IPP message

    Return Value

    IPP message state value

     CUPS 1.6/macOS 10.8 ippGetStatusCode

    Get the status code from an IPP response or event message.

    ipp_status_t ippGetStatusCode(ipp_t *ipp);

    Parameters

    ipp IPP response or event message

    Return Value

    Status code in IPP message

    ippGetString

    const char *ippGetString(ipp_attribute_t *attr, int element, const char **language);

    Parameters

    attr IPP attribute
    element Value number (0-based)
    language Language code (NULL for don't care)

    Return Value

    Get the string and optionally the language code for an attribute.

    The element parameter specifies which value to get from 0 to ippGetCount(attr) - 1.

     CUPS 1.6/macOS 10.8 ippGetValueTag

    Get the value tag for an attribute.

    ipp_tag_t ippGetValueTag(ipp_attribute_t *attr);

    Parameters

    attr IPP attribute

    Return Value

    Value tag or IPP_TAG_ZERO on error

     CUPS 1.6/macOS 10.8 ippGetVersion

    Get the major and minor version number from an IPP message.

    int ippGetVersion(ipp_t *ipp, int *minor);

    Parameters

    ipp IPP message
    minor Minor version number or NULL for don't care

    Return Value

    Major version number or 0 on error

    ippLength

    Compute the length of an IPP message.

    size_t ippLength(ipp_t *ipp);

    Parameters

    ipp IPP message

    Return Value

    Size of IPP message

    ippNew

    Allocate a new IPP message.

    ipp_t *ippNew(void);

    Return Value

    New IPP message

     CUPS 1.2/macOS 10.5 ippNewRequest

    Allocate a new IPP request message.

    ipp_t *ippNewRequest(ipp_op_t op);

    Parameters

    op Operation code

    Return Value

    IPP request message

    Discussion

    The new request message is initialized with the "attributes-charset" and "attributes-natural-language" attributes added. The "attributes-natural-language" value is derived from the current locale.

     CUPS 1.7/macOS 10.9 ippNewResponse

    Allocate a new IPP response message.

    ipp_t *ippNewResponse(ipp_t *request);

    Parameters

    request IPP request message

    Return Value

    IPP response message

    Discussion

    The new response message is initialized with the same "version-number", "request-id", "attributes-charset", and "attributes-natural-language" as the provided request message. If the "attributes-charset" or "attributes-natural-language" attributes are missing from the request, 'utf-8' and a value derived from the current locale are substituted, respectively.

     CUPS 1.6/macOS 10.8 ippNextAttribute

    Return the next attribute in the message.

    ipp_attribute_t *ippNextAttribute(ipp_t *ipp);

    Parameters

    ipp IPP message

    Return Value

    Next attribute or NULL if none

     CUPS 1.2/macOS 10.5 ippOpString

    Return a name for the given operation id.

    const char *ippOpString(ipp_op_t op);

    Parameters

    op Operation ID

    Return Value

    Name

     CUPS 1.2/macOS 10.5 ippOpValue

    Return an operation id for the given name.

    ipp_op_t ippOpValue(const char *name);

    Parameters

    name Textual name

    Return Value

    Operation ID

    ippPort

    Return the default IPP port number.

    int ippPort(void);

    Return Value

    Port number

    ippRead

    Read data for an IPP message from a HTTP connection.

    ipp_state_t ippRead(http_t *http, ipp_t *ipp);

    Parameters

    http HTTP connection
    ipp IPP data

    Return Value

    Current state

     CUPS 1.1.19/macOS 10.3 ippReadFile

    Read data for an IPP message from a file.

    ipp_state_t ippReadFile(int fd, ipp_t *ipp);

    Parameters

    fd HTTP data
    ipp IPP data

    Return Value

    Current state

     CUPS 1.2/macOS 10.5 ippReadIO

    Read data for an IPP message.

    ipp_state_t ippReadIO(void *src, ipp_iocb_t cb, int blocking, ipp_t *parent, ipp_t *ipp);

    Parameters

    src Data source
    cb Read callback function
    blocking Use blocking IO?
    parent Parent request, if any
    ipp IPP data

    Return Value

    Current state

     CUPS 1.6/macOS 10.8 ippSetBoolean

    Set a boolean value in an attribute.

    int ippSetBoolean(ipp_t *ipp, ipp_attribute_t **attr, int element, int boolvalue);

    Parameters

    ipp IPP message
    attr IPP attribute
    element Value number (0-based)
    boolvalue Boolean value

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

    The element parameter specifies which value to set from 0 to ippGetCount(attr).

     CUPS 1.6/macOS 10.8 ippSetCollection

    Set a collection value in an attribute.

    int ippSetCollection(ipp_t *ipp, ipp_attribute_t **attr, int element, ipp_t *colvalue);

    Parameters

    ipp IPP message
    attr IPP attribute
    element Value number (0-based)
    colvalue Collection value

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

    The element parameter specifies which value to set from 0 to ippGetCount(attr).

     CUPS 1.6/macOS 10.8 ippSetDate

    Set a dateTime value in an attribute.

    int ippSetDate(ipp_t *ipp, ipp_attribute_t **attr, int element, const ipp_uchar_t *datevalue);

    Parameters

    ipp IPP message
    attr IPP attribute
    element Value number (0-based)
    datevalue dateTime value

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

    The element parameter specifies which value to set from 0 to ippGetCount(attr).

     CUPS 1.6/macOS 10.8 ippSetGroupTag

    Set the group tag of an attribute.

    int ippSetGroupTag(ipp_t *ipp, ipp_attribute_t **attr, ipp_tag_t group_tag);

    Parameters

    ipp IPP message
    attr Attribute
    group_tag Group tag

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

    The group parameter specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

     CUPS 1.6/macOS 10.8 ippSetInteger

    Set an integer or enum value in an attribute.

    int ippSetInteger(ipp_t *ipp, ipp_attribute_t **attr, int element, int intvalue);

    Parameters

    ipp IPP message
    attr IPP attribute
    element Value number (0-based)
    intvalue Integer/enum value

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

    The element parameter specifies which value to set from 0 to ippGetCount(attr).

     CUPS 1.6/macOS 10.8 ippSetName

    Set the name of an attribute.

    int ippSetName(ipp_t *ipp, ipp_attribute_t **attr, const char *name);

    Parameters

    ipp IPP message
    attr IPP attribute
    name Attribute name

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

     CUPS 1.7/macOS 10.9 ippSetOctetString

    Set an octetString value in an IPP attribute.

    int ippSetOctetString(ipp_t *ipp, ipp_attribute_t **attr, int element, const void *data, int datalen);

    Parameters

    ipp IPP message
    attr IPP attribute
    element Value number (0-based)
    data Pointer to octetString data
    datalen Length of octetString data

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

    The element parameter specifies which value to set from 0 to ippGetCount(attr).

     CUPS 1.6/macOS 10.8 ippSetOperation

    Set the operation ID in an IPP request message.

    int ippSetOperation(ipp_t *ipp, ipp_op_t op);

    Parameters

    ipp IPP request message
    op Operation ID

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    ippSetPort

    Set the default port number.

    void ippSetPort(int p);

    Parameters

    p Port number to use

     CUPS 1.6/macOS 10.8 ippSetRange

    Set a rangeOfInteger value in an attribute.

    int ippSetRange(ipp_t *ipp, ipp_attribute_t **attr, int element, int lowervalue, int uppervalue);

    Parameters

    ipp IPP message
    attr IPP attribute
    element Value number (0-based)
    lowervalue Lower bound for range
    uppervalue Upper bound for range

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

    The element parameter specifies which value to set from 0 to ippGetCount(attr).

     CUPS 1.6/macOS 10.8 ippSetRequestId

    Set the request ID in an IPP message.

    int ippSetRequestId(ipp_t *ipp, int request_id);

    Parameters

    ipp IPP message
    request_id Request ID

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The request_id parameter must be greater than 0.

     CUPS 1.6/macOS 10.8 ippSetResolution

    Set a resolution value in an attribute.

    int ippSetResolution(ipp_t *ipp, ipp_attribute_t **attr, int element, ipp_res_t unitsvalue, int xresvalue, int yresvalue);

    Parameters

    ipp IPP message
    attr IPP attribute
    element Value number (0-based)
    unitsvalue Resolution units
    xresvalue Horizontal/cross feed resolution
    yresvalue Vertical/feed resolution

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

    The element parameter specifies which value to set from 0 to ippGetCount(attr).

     CUPS 1.6/macOS 10.8 ippSetState

    Set the current state of the IPP message.

    int ippSetState(ipp_t *ipp, ipp_state_t state);

    Parameters

    ipp IPP message
    state IPP state value

    Return Value

    1 on success, 0 on failure

     CUPS 1.6/macOS 10.8 ippSetStatusCode

    Set the status code in an IPP response or event message.

    int ippSetStatusCode(ipp_t *ipp, ipp_status_t status);

    Parameters

    ipp IPP response or event message
    status Status code

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

     CUPS 1.6/macOS 10.8 ippSetString

    Set a string value in an attribute.

    int ippSetString(ipp_t *ipp, ipp_attribute_t **attr, int element, const char *strvalue);

    Parameters

    ipp IPP message
    attr IPP attribute
    element Value number (0-based)
    strvalue String value

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

    The element parameter specifies which value to set from 0 to ippGetCount(attr).

     CUPS 1.7/macOS 10.9 ippSetStringf

    Set a formatted string value of an attribute.

    int ippSetStringf(ipp_t *ipp, ipp_attribute_t **attr, int element, const char *format, ...);

    Parameters

    ipp IPP message
    attr IPP attribute
    element Value number (0-based)
    format Printf-style format string
    ... Additional arguments as needed

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

    The element parameter specifies which value to set from 0 to ippGetCount(attr).

    The format parameter uses formatting characters compatible with the printf family of standard functions. Additional arguments follow it as needed. The formatted string is truncated as needed to the maximum length of the corresponding value type.

     CUPS 1.7/macOS 10.9 ippSetStringfv

    Set a formatted string value of an attribute.

    int ippSetStringfv(ipp_t *ipp, ipp_attribute_t **attr, int element, const char *format, va_list ap);

    Parameters

    ipp IPP message
    attr IPP attribute
    element Value number (0-based)
    format Printf-style format string
    ap Pointer to additional arguments

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

    The element parameter specifies which value to set from 0 to ippGetCount(attr).

    The format parameter uses formatting characters compatible with the printf family of standard functions. Additional arguments follow it as needed. The formatted string is truncated as needed to the maximum length of the corresponding value type.

     CUPS 1.6/macOS 10.8 ippSetValueTag

    Set the value tag of an attribute.

    int ippSetValueTag(ipp_t *ipp, ipp_attribute_t **attr, ipp_tag_t value_tag);

    Parameters

    ipp IPP message
    attr IPP attribute
    value_tag Value tag

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The attr parameter may be modified as a result of setting the value.

    Integer (IPP_TAG_INTEGER) values can be promoted to rangeOfInteger (IPP_TAG_RANGE) values, the various string tags can be promoted to name (IPP_TAG_NAME) or nameWithLanguage (IPP_TAG_NAMELANG) values, text (IPP_TAG_TEXT) values can be promoted to textWithLanguage (IPP_TAG_TEXTLANG) values, and all values can be demoted to the various out-of-band value tags such as no-value (IPP_TAG_NOVALUE). All other changes will be rejected.

    Promoting a string attribute to nameWithLanguage or textWithLanguage adds the language code in the "attributes-natural-language" attribute or, if not present, the language code for the current locale.

     CUPS 1.6/macOS 10.8 ippSetVersion

    Set the version number in an IPP message.

    int ippSetVersion(ipp_t *ipp, int major, int minor);

    Parameters

    ipp IPP message
    major Major version number (major.minor)
    minor Minor version number (major.minor)

    Return Value

    1 on success, 0 on failure

    Discussion

    The ipp parameter refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

    The valid version numbers are currently 1.0, 1.1, 2.0, 2.1, and 2.2.

     CUPS 2.0/OS 10.10 ippStateString

    Return the name corresponding to a state value.

    const char *ippStateString(ipp_state_t state);

    Parameters

    state State value

    Return Value

    State name

     CUPS 1.4/macOS 10.6 ippTagString

    Return the tag name corresponding to a tag value.

    const char *ippTagString(ipp_tag_t tag);

    Parameters

    tag Tag value

    Return Value

    Tag name

    Discussion

    The returned names are defined in RFC 8011 and the IANA IPP Registry.

     CUPS 1.4/macOS 10.6 ippTagValue

    Return the tag value corresponding to a tag name.

    ipp_tag_t ippTagValue(const char *name);

    Parameters

    name Tag name

    Return Value

    Tag value

    Discussion

    The tag names are defined in RFC 8011 and the IANA IPP Registry.

    ippTimeToDate

    Convert from time in seconds to RFC 2579 format.

    const ipp_uchar_t *ippTimeToDate(time_t t);

    Parameters

    t Time in seconds

    Return Value

    RFC-2579 date/time data

     CUPS 1.7/macOS 10.9 ippValidateAttribute

    Validate the contents of an attribute.

    int ippValidateAttribute(ipp_attribute_t *attr);

    Parameters

    attr Attribute

    Return Value

    1 if valid, 0 otherwise

    Discussion

    This function validates the contents of an attribute based on the name and value tag. 1 is returned if the attribute is valid, 0 otherwise. On failure, cupsLastErrorString is set to a human-readable message.

     CUPS 1.7/macOS 10.9 ippValidateAttributes

    Validate all attributes in an IPP message.

    int ippValidateAttributes(ipp_t *ipp);

    Parameters

    ipp IPP message

    Return Value

    1 if valid, 0 otherwise

    Discussion

    This function validates the contents of the IPP message, including each attribute. Like ippValidateAttribute, cupsLastErrorString is set to a human-readable message on failure.

    ippWrite

    Write data for an IPP message to a HTTP connection.

    ipp_state_t ippWrite(http_t *http, ipp_t *ipp);

    Parameters

    http HTTP connection
    ipp IPP data

    Return Value

    Current state

     CUPS 1.1.19/macOS 10.3 ippWriteFile

    Write data for an IPP message to a file.

    ipp_state_t ippWriteFile(int fd, ipp_t *ipp);

    Parameters

    fd HTTP data
    ipp IPP data

    Return Value

    Current state

     CUPS 1.2/macOS 10.5 ippWriteIO

    Write data for an IPP message.

    ipp_state_t ippWriteIO(void *dst, ipp_iocb_t cb, int blocking, ipp_t *parent, ipp_t *ipp);

    Parameters

    dst Destination
    cb Write callback function
    blocking Use blocking IO?
    parent Parent IPP message
    ipp IPP data

    Return Value

    Current state

    Data Types

     CUPS 1.5/macOS 10.7 cups_client_cert_cb_t

    Client credentials callback

    typedef int(*)(http_t *http, void *tls, cups_array_t *distinguished_names, void *user_data)cups_client_cert_cb_t;

     CUPS 1.6/macOS 10.8 cups_dest_cb_t

    Destination enumeration callback

    typedef int(*)(void *user_data, unsigned flags, cups_dest_t *dest)cups_dest_cb_t;

    cups_dest_t

    Destination

    typedef struct cups_dest_s cups_dest_t;

     CUPS 1.6/macOS 10.8 cups_dinfo_t

    Destination capability and status information

    typedef struct _cups_dinfo_s cups_dinfo_t;

    cups_job_t

    Job

    typedef struct cups_job_s cups_job_t;

    cups_option_t

    Printer Options

    typedef struct cups_option_s cups_option_t;

     CUPS 1.4/macOS 10.6 cups_password_cb2_t

    New password callback

    typedef const char *(*)(const char *prompt, http_t *http, const char *method, const char *resource, void *user_data)cups_password_cb2_t;

    cups_ptype_t

    Printer type/capability bits

    typedef unsigned cups_ptype_t;

     CUPS 1.5/macOS 10.7 cups_server_cert_cb_t

    Server credentials callback

    typedef int(*)(http_t *http, void *tls, cups_array_t *certs, void *user_data)cups_server_cert_cb_t;

     CUPS 1.6/macOS 10.8 cups_size_t

    Media Size

    typedef struct cups_size_s cups_size_t;

     CUPS 1.2/macOS 10.5 http_addr_t

    Socket address union, which makes using IPv6 and other address types easier and more portable.

    typedef union _http_addr_u / http_addr_t;

    http_encoding_t

    HTTP transfer encoding values

    typedef enum http_encoding_e http_encoding_t;

    http_encryption_t

    HTTP encryption values

    typedef enum http_encryption_e http_encryption_t;

    http_field_t

    HTTP field names

    typedef enum http_field_e http_field_t;

    http_keepalive_t

    HTTP keep-alive values

    typedef enum http_keepalive_e http_keepalive_t;

    http_state_t

    HTTP state values; states are server-oriented...

    typedef enum http_state_e http_state_t;

    http_t

    HTTP connection type

    typedef struct _http_s http_t;

     CUPS 1.5/macOS 10.7 http_timeout_cb_t

    HTTP timeout callback

    typedef int(*)(http_t *http, void *user_data)http_timeout_cb_t;

     CUPS 2.0/OS 10.10 http_trust_t

    Level of trust for credentials

    typedef enum http_trust_e http_trust_t;

    http_uri_coding_t

    URI en/decode flags

    typedef enum http_uri_coding_e http_uri_coding_t;

     CUPS 1.2 http_uri_status_t

    URI separation status

    typedef enum http_uri_status_e http_uri_status_t;

    ipp_attribute_t

    IPP attribute

    typedef struct _ipp_attribute_s ipp_attribute_t;

     CUPS 1.6/macOS 10.8 ipp_copycb_t

    ippCopyAttributes callback function

    typedef int(*)(void *context, ipp_t *dst, ipp_attribute_t *attr)ipp_copycb_t;

     CUPS 1.2/macOS 10.5 ipp_iocb_t

    ippReadIO/ippWriteIO callback function

    typedef ssize_t(*)(void *context, ipp_uchar_t *buffer, size_t bytes) ipp_iocb_t;

    ipp_orient_t

    Orientation values

    typedef enum ipp_orient_e ipp_orient_t;

    ipp_pstate_t

    Printer state values

    typedef enum ipp_pstate_e ipp_pstate_t;

    ipp_quality_t

    Print quality values

    typedef enum ipp_quality_e ipp_quality_t;

    ipp_res_t

    Resolution units

    typedef enum ipp_res_e ipp_res_t;

    ipp_state_t

    ipp_t state values

    typedef enum ipp_state_e ipp_state_t;

    ipp_t

    IPP request/response data

    typedef struct _ipp_s ipp_t;

    Structures

    cups_dest_s

    Destination

    struct cups_dest_s {
        char *name, *instance;
        int is_default;
        int num_options;
        cups_option_t *options;
    };

    Members

    instance Local instance name or NULL
    is_default Is this printer the default?
    num_options Number of options
    options Options

    cups_job_s

    Job

    struct cups_job_s {
        time_t completed_time;
        time_t creation_time;
        char *dest;
        char *format;
        int id;
        int priority;
        time_t processing_time;
        int size;
        ipp_jstate_t state;
        char *title;
        char *user;
    };

    Members

    completed_time Time the job was completed
    creation_time Time the job was created
    dest Printer or class name
    format Document format
    id The job ID
    priority Priority (1-100)
    processing_time Time the job was processed
    size Size in kilobytes
    state Job state
    title Title/job name
    user User that submitted the job

    cups_option_s

    Printer Options

    struct cups_option_s {
        char *name;
        char *value;
    };

    Members

    name Name of option
    value Value of option

     CUPS 1.6/macOS 10.8 cups_size_s

    Media Size

    struct cups_size_s {
        char media[128];
        int width, length, bottom, left, right, top;
    };

    Members

    media[128] Media name to use
    top Top margin in hundredths of millimeters

    Constants

    cups_ptype_e

    Printer type/capability bit constants

    Constants

    CUPS_PRINTER_AUTHENTICATED  CUPS 1.2/macOS 10.5  Printer requires authentication
    CUPS_PRINTER_BIND Can bind output
    CUPS_PRINTER_BW Can do B&W printing
    CUPS_PRINTER_CLASS Printer class
    CUPS_PRINTER_COLLATE Can quickly collate copies
    CUPS_PRINTER_COLOR Can do color printing
    CUPS_PRINTER_COMMANDS  CUPS 1.2/macOS 10.5  Printer supports maintenance commands
    CUPS_PRINTER_COPIES Can do copies in hardware
    CUPS_PRINTER_COVER Can cover output
    CUPS_PRINTER_DEFAULT Default printer on network
    CUPS_PRINTER_DISCOVERED  CUPS 1.2/macOS 10.5  Printer was discovered
    CUPS_PRINTER_DUPLEX Can do two-sided printing
    CUPS_PRINTER_FAX Fax queue
    CUPS_PRINTER_LARGE Can print on D/E/A1/A0-size media
    CUPS_PRINTER_LOCAL Local printer or class
    CUPS_PRINTER_MEDIUM Can print on Tabloid/B/C/A3/A2-size media
    CUPS_PRINTER_NOT_SHARED  CUPS 1.2/macOS 10.5  Printer is not shared
    CUPS_PRINTER_PUNCH Can punch output
    CUPS_PRINTER_REJECTING Printer is rejecting jobs
    CUPS_PRINTER_REMOTE Remote printer or class
    CUPS_PRINTER_SMALL Can print on Letter/Legal/A4-size media
    CUPS_PRINTER_SORT Can sort output
    CUPS_PRINTER_STAPLE Can staple output
    CUPS_PRINTER_VARIABLE Can print on rolls and custom-size media

    http_encoding_e

    HTTP transfer encoding values

    Constants

    HTTP_ENCODING_CHUNKED Data is chunked
    HTTP_ENCODING_FIELDS Sending HTTP fields
    HTTP_ENCODING_LENGTH Data is sent with Content-Length

    http_encryption_e

    HTTP encryption values

    Constants

    HTTP_ENCRYPTION_ALWAYS Always encrypt (SSL)
    HTTP_ENCRYPTION_IF_REQUESTED Encrypt if requested (TLS upgrade)
    HTTP_ENCRYPTION_NEVER Never encrypt
    HTTP_ENCRYPTION_REQUIRED Encryption is required (TLS upgrade)

    http_field_e

    HTTP field names

    Constants

    HTTP_FIELD_ACCEPT_ENCODING  CUPS 1.7/macOS 10.9  Accepting-Encoding field
    HTTP_FIELD_ACCEPT_LANGUAGE Accept-Language field
    HTTP_FIELD_ACCEPT_RANGES Accept-Ranges field
    HTTP_FIELD_ALLOW  CUPS 1.7/macOS 10.9  Allow field
    HTTP_FIELD_AUTHORIZATION Authorization field
    HTTP_FIELD_CONNECTION Connection field
    HTTP_FIELD_CONTENT_ENCODING Content-Encoding field
    HTTP_FIELD_CONTENT_LANGUAGE Content-Language field
    HTTP_FIELD_CONTENT_LENGTH Content-Length field
    HTTP_FIELD_CONTENT_LOCATION Content-Location field
    HTTP_FIELD_CONTENT_MD5 Content-MD5 field
    HTTP_FIELD_CONTENT_RANGE Content-Range field
    HTTP_FIELD_CONTENT_TYPE Content-Type field
    HTTP_FIELD_CONTENT_VERSION Content-Version field
    HTTP_FIELD_DATE Date field
    HTTP_FIELD_HOST Host field
    HTTP_FIELD_IF_MODIFIED_SINCE If-Modified-Since field
    HTTP_FIELD_IF_UNMODIFIED_SINCE If-Unmodified-Since field
    HTTP_FIELD_KEEP_ALIVE Keep-Alive field
    HTTP_FIELD_LAST_MODIFIED Last-Modified field
    HTTP_FIELD_LINK Link field
    HTTP_FIELD_LOCATION Location field
    HTTP_FIELD_MAX Maximum field index
    HTTP_FIELD_RANGE Range field
    HTTP_FIELD_REFERER Referer field
    HTTP_FIELD_RETRY_AFTER Retry-After field
    HTTP_FIELD_SERVER  CUPS 1.7/macOS 10.9  Server field
    HTTP_FIELD_TRANSFER_ENCODING Transfer-Encoding field
    HTTP_FIELD_UNKNOWN Unknown field
    HTTP_FIELD_UPGRADE Upgrade field
    HTTP_FIELD_USER_AGENT User-Agent field
    HTTP_FIELD_WWW_AUTHENTICATE WWW-Authenticate field

    http_keepalive_e

    HTTP keep-alive values

    Constants

    HTTP_KEEPALIVE_OFF No keep alive support
    HTTP_KEEPALIVE_ON Use keep alive

    http_state_e

    HTTP state values; states are server-oriented...

    Constants

    HTTP_STATE_CONNECT CONNECT command, waiting for blank line
    HTTP_STATE_DELETE DELETE command, waiting for blank line
    HTTP_STATE_ERROR Error on socket
    HTTP_STATE_GET GET command, waiting for blank line
    HTTP_STATE_GET_SEND GET command, sending data
    HTTP_STATE_HEAD HEAD command, waiting for blank line
    HTTP_STATE_OPTIONS OPTIONS command, waiting for blank line
    HTTP_STATE_POST POST command, waiting for blank line
    HTTP_STATE_POST_RECV POST command, receiving data
    HTTP_STATE_POST_SEND POST command, sending data
    HTTP_STATE_PUT PUT command, waiting for blank line
    HTTP_STATE_PUT_RECV PUT command, receiving data
    HTTP_STATE_STATUS Command complete, sending status
    HTTP_STATE_TRACE TRACE command, waiting for blank line
    HTTP_STATE_UNKNOWN_METHOD  CUPS 1.7/macOS 10.9  Unknown request method, waiting for blank line
    HTTP_STATE_UNKNOWN_VERSION  CUPS 1.7/macOS 10.9  Unknown request method, waiting for blank line
    HTTP_STATE_WAITING Waiting for command

    http_status_e

    HTTP status codes

    Constants

    HTTP_STATUS_ACCEPTED DELETE command was successful
    HTTP_STATUS_BAD_GATEWAY Bad gateway
    HTTP_STATUS_BAD_REQUEST Bad request
    HTTP_STATUS_CONFLICT Request is self-conflicting
    HTTP_STATUS_CONTINUE Everything OK, keep going...
    HTTP_STATUS_CREATED PUT command was successful
    HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED  CUPS 1.4  User canceled authorization
    HTTP_STATUS_CUPS_PKI_ERROR  CUPS 1.5/macOS 10.7  Error negotiating a secure connection
    HTTP_STATUS_ERROR An error response from httpXxxx()
    HTTP_STATUS_EXPECTATION_FAILED The expectation given in an Expect header field was not met
    HTTP_STATUS_FORBIDDEN Forbidden to access this URI
    HTTP_STATUS_FOUND Document was found at a different URI
    HTTP_STATUS_GATEWAY_TIMEOUT Gateway connection timed out
    HTTP_STATUS_GONE Server has gone away
    HTTP_STATUS_LENGTH_REQUIRED A content length or encoding is required
    HTTP_STATUS_METHOD_NOT_ALLOWED Method is not allowed
    HTTP_STATUS_MOVED_PERMANENTLY Document has moved permanently
    HTTP_STATUS_MULTIPLE_CHOICES Multiple files match request
    HTTP_STATUS_NONE  CUPS 1.7/macOS 10.9  No Expect value
    HTTP_STATUS_NOT_ACCEPTABLE Not Acceptable
    HTTP_STATUS_NOT_AUTHORITATIVE Information isn't authoritative
    HTTP_STATUS_NOT_FOUND URI was not found
    HTTP_STATUS_NOT_IMPLEMENTED Feature not implemented
    HTTP_STATUS_NOT_MODIFIED File not modified
    HTTP_STATUS_NOT_SUPPORTED HTTP version not supported
    HTTP_STATUS_NO_CONTENT Successful command, no new data
    HTTP_STATUS_OK OPTIONS/GET/HEAD/POST/TRACE command was successful
    HTTP_STATUS_PARTIAL_CONTENT Only a partial file was received/sent
    HTTP_STATUS_PAYMENT_REQUIRED Payment required
    HTTP_STATUS_PRECONDITION Precondition failed
    HTTP_STATUS_PROXY_AUTHENTICATION Proxy Authentication is Required
    HTTP_STATUS_REQUESTED_RANGE The requested range is not satisfiable
    HTTP_STATUS_REQUEST_TIMEOUT Request timed out
    HTTP_STATUS_REQUEST_TOO_LARGE Request entity too large
    HTTP_STATUS_RESET_CONTENT Content was reset/recreated
    HTTP_STATUS_SEE_OTHER See this other link
    HTTP_STATUS_SERVER_ERROR Internal server error
    HTTP_STATUS_SERVICE_UNAVAILABLE Service is unavailable
    HTTP_STATUS_SWITCHING_PROTOCOLS HTTP upgrade to TLS/SSL
    HTTP_STATUS_TEMPORARY_REDIRECT Temporary redirection
    HTTP_STATUS_UNAUTHORIZED Unauthorized to access host
    HTTP_STATUS_UNSUPPORTED_MEDIATYPE The requested media type is unsupported
    HTTP_STATUS_UPGRADE_REQUIRED Upgrade to SSL/TLS required
    HTTP_STATUS_URI_TOO_LONG URI too long
    HTTP_STATUS_USE_PROXY Must use a proxy to access this URI

     CUPS 2.0/OS 10.10 http_trust_e

    Level of trust for credentials

    Constants

    HTTP_TRUST_CHANGED Credentials have changed
    HTTP_TRUST_EXPIRED Credentials are expired
    HTTP_TRUST_INVALID Credentials are invalid
    HTTP_TRUST_OK Credentials are OK/trusted
    HTTP_TRUST_RENEWED Credentials have been renewed
    HTTP_TRUST_UNKNOWN Credentials are unknown/new

    http_uri_coding_e

    URI en/decode flags

    Constants

    HTTP_URI_CODING_ALL En/decode everything
    HTTP_URI_CODING_HOSTNAME En/decode the hostname portion
    HTTP_URI_CODING_MOST En/decode all but the query
    HTTP_URI_CODING_NONE Don't en/decode anything
    HTTP_URI_CODING_QUERY En/decode the query portion
    HTTP_URI_CODING_RESOURCE En/decode the resource portion
    HTTP_URI_CODING_RFC6874 Use RFC 6874 address format
    HTTP_URI_CODING_USERNAME En/decode the username portion

     CUPS 1.2 http_uri_status_e

    URI separation status

    Constants

    HTTP_URI_STATUS_BAD_ARGUMENTS Bad arguments to function (error)
    HTTP_URI_STATUS_BAD_HOSTNAME Bad hostname in URI (error)
    HTTP_URI_STATUS_BAD_PORT Bad port number in URI (error)
    HTTP_URI_STATUS_BAD_RESOURCE Bad resource in URI (error)
    HTTP_URI_STATUS_BAD_SCHEME Bad scheme in URI (error)
    HTTP_URI_STATUS_BAD_URI Bad/empty URI (error)
    HTTP_URI_STATUS_BAD_USERNAME Bad username in URI (error)
    HTTP_URI_STATUS_MISSING_RESOURCE Missing resource in URI (warning)
    HTTP_URI_STATUS_MISSING_SCHEME Missing scheme in URI (warning)
    HTTP_URI_STATUS_OK URI decoded OK
    HTTP_URI_STATUS_OVERFLOW URI buffer for httpAssembleURI is too small
    HTTP_URI_STATUS_UNKNOWN_SCHEME Unknown scheme in URI (warning)

    ipp_finishings_e

    Finishings values

    Constants

    IPP_FINISHINGS_BALE Bale (any type)
    IPP_FINISHINGS_BIND Bind
    IPP_FINISHINGS_BIND_BOTTOM Bind on bottom
    IPP_FINISHINGS_BIND_LEFT Bind on left
    IPP_FINISHINGS_BIND_RIGHT Bind on right
    IPP_FINISHINGS_BIND_TOP Bind on top
    IPP_FINISHINGS_BOOKLET_MAKER Fold to make booklet
    IPP_FINISHINGS_COAT Apply protective liquid or powder coating
    IPP_FINISHINGS_COVER Add cover
    IPP_FINISHINGS_EDGE_STITCH Stitch along any side
    IPP_FINISHINGS_EDGE_STITCH_BOTTOM Stitch along bottom edge
    IPP_FINISHINGS_EDGE_STITCH_LEFT Stitch along left side
    IPP_FINISHINGS_EDGE_STITCH_RIGHT Stitch along right side
    IPP_FINISHINGS_EDGE_STITCH_TOP Stitch along top edge
    IPP_FINISHINGS_FOLD Fold (any type)
    IPP_FINISHINGS_FOLD_ACCORDIAN Accordian-fold the paper vertically into four sections
    IPP_FINISHINGS_FOLD_DOUBLE_GATE Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically
    IPP_FINISHINGS_FOLD_ENGINEERING_Z Fold the paper vertically into two small sections and one larger, forming an elongated Z
    IPP_FINISHINGS_FOLD_GATE Fold the top and bottom quarters of the paper towards the midline
    IPP_FINISHINGS_FOLD_HALF Fold the paper in half vertically
    IPP_FINISHINGS_FOLD_HALF_Z Fold the paper in half horizontally, then Z-fold the paper vertically
    IPP_FINISHINGS_FOLD_LEFT_GATE Fold the top quarter of the paper towards the midline
    IPP_FINISHINGS_FOLD_LETTER Fold the paper into three sections vertically; sometimes also known as a C fold
    IPP_FINISHINGS_FOLD_PARALLEL Fold the paper in half vertically two times, yielding four sections
    IPP_FINISHINGS_FOLD_POSTER Fold the paper in half horizontally and vertically; sometimes also called a cross fold
    IPP_FINISHINGS_FOLD_RIGHT_GATE Fold the bottom quarter of the paper towards the midline
    IPP_FINISHINGS_FOLD_Z Fold the paper vertically into three sections, forming a Z
    IPP_FINISHINGS_JOG_OFFSET Offset for binding (any type)
    IPP_FINISHINGS_LAMINATE Apply protective (solid) material
    IPP_FINISHINGS_NONE No finishing
    IPP_FINISHINGS_PUNCH Punch (any location/count)
    IPP_FINISHINGS_PUNCH_BOTTOM_LEFT Punch 1 hole bottom left
    IPP_FINISHINGS_PUNCH_BOTTOM_RIGHT Punch 1 hole bottom right
    IPP_FINISHINGS_PUNCH_DUAL_BOTTOM Punch 2 holes bottom edge
    IPP_FINISHINGS_PUNCH_DUAL_LEFT Punch 2 holes left side
    IPP_FINISHINGS_PUNCH_DUAL_RIGHT Punch 2 holes right side
    IPP_FINISHINGS_PUNCH_DUAL_TOP Punch 2 holes top edge
    IPP_FINISHINGS_PUNCH_MULTIPLE_BOTTOM Pucnh multiple holes bottom edge
    IPP_FINISHINGS_PUNCH_MULTIPLE_LEFT Pucnh multiple holes left side
    IPP_FINISHINGS_PUNCH_MULTIPLE_RIGHT Pucnh multiple holes right side
    IPP_FINISHINGS_PUNCH_MULTIPLE_TOP Pucnh multiple holes top edge
    IPP_FINISHINGS_PUNCH_QUAD_BOTTOM Punch 4 holes bottom edge
    IPP_FINISHINGS_PUNCH_QUAD_LEFT Punch 4 holes left side
    IPP_FINISHINGS_PUNCH_QUAD_RIGHT Punch 4 holes right side
    IPP_FINISHINGS_PUNCH_QUAD_TOP Punch 4 holes top edge
    IPP_FINISHINGS_PUNCH_TOP_LEFT Punch 1 hole top left
    IPP_FINISHINGS_PUNCH_TOP_RIGHT Punch 1 hole top right
    IPP_FINISHINGS_PUNCH_TRIPLE_BOTTOM Punch 3 holes bottom edge
    IPP_FINISHINGS_PUNCH_TRIPLE_LEFT Punch 3 holes left side
    IPP_FINISHINGS_PUNCH_TRIPLE_RIGHT Punch 3 holes right side
    IPP_FINISHINGS_PUNCH_TRIPLE_TOP Punch 3 holes top edge
    IPP_FINISHINGS_SADDLE_STITCH Staple interior
    IPP_FINISHINGS_STAPLE Staple (any location/method)
    IPP_FINISHINGS_STAPLE_BOTTOM_LEFT Staple bottom left corner
    IPP_FINISHINGS_STAPLE_BOTTOM_RIGHT Staple bottom right corner
    IPP_FINISHINGS_STAPLE_DUAL_BOTTOM Two staples on bottom
    IPP_FINISHINGS_STAPLE_DUAL_LEFT Two staples on left
    IPP_FINISHINGS_STAPLE_DUAL_RIGHT Two staples on right
    IPP_FINISHINGS_STAPLE_DUAL_TOP Two staples on top
    IPP_FINISHINGS_STAPLE_TOP_LEFT Staple top left corner
    IPP_FINISHINGS_STAPLE_TOP_RIGHT Staple top right corner
    IPP_FINISHINGS_STAPLE_TRIPLE_BOTTOM Three staples on bottom
    IPP_FINISHINGS_STAPLE_TRIPLE_LEFT Three staples on left
    IPP_FINISHINGS_STAPLE_TRIPLE_RIGHT Three staples on right
    IPP_FINISHINGS_STAPLE_TRIPLE_TOP Three staples on top
    IPP_FINISHINGS_TRIM Trim (any type)
    IPP_FINISHINGS_TRIM_AFTER_COPIES Trim output after each copy
    IPP_FINISHINGS_TRIM_AFTER_DOCUMENTS Trim output after each document
    IPP_FINISHINGS_TRIM_AFTER_JOB Trim output after job
    IPP_FINISHINGS_TRIM_AFTER_PAGES Trim output after each page

    ipp_jstate_e

    Job states

    Constants

    IPP_JSTATE_ABORTED Job has aborted due to error
    IPP_JSTATE_CANCELED Job has been canceled
    IPP_JSTATE_COMPLETED Job has completed successfully
    IPP_JSTATE_HELD Job is held for printing
    IPP_JSTATE_PENDING Job is waiting to be printed
    IPP_JSTATE_PROCESSING Job is currently printing
    IPP_JSTATE_STOPPED Job has been stopped

    ipp_op_e

    IPP operations

    Constants

    IPP_OP_CANCEL_CURRENT_JOB Cancel-Current-Job: Cancel the current job
    IPP_OP_CANCEL_JOB Cancel-Job: Cancel a job
    IPP_OP_CANCEL_JOBS Cancel-Jobs: Cancel all jobs (administrative)
    IPP_OP_CANCEL_MY_JOBS Cancel-My-Jobs: Cancel a user's jobs
    IPP_OP_CANCEL_SUBSCRIPTION  CUPS 1.2/macOS 10.5  Cancel-Subscription: Cancel a subscription
    IPP_OP_CLOSE_JOB Close-Job: Close a job and start printing
    IPP_OP_CREATE_JOB Create-Job: Create an empty print job
    IPP_OP_CREATE_JOB_SUBSCRIPTIONS  CUPS 1.2/macOS 10.5  Create-Job-Subscriptions: Create one of more job subscriptions
    IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS  CUPS 1.2/macOS 10.5  Create-Printer-Subscriptions: Create one or more printer subscriptions
    IPP_OP_CUPS_ADD_MODIFY_CLASS CUPS-Add-Modify-Class: Add or modify a class
    IPP_OP_CUPS_ADD_MODIFY_PRINTER CUPS-Add-Modify-Printer: Add or modify a printer
    IPP_OP_CUPS_AUTHENTICATE_JOB  CUPS 1.2/macOS 10.5  CUPS-Authenticate-Job: Authenticate a job
    IPP_OP_CUPS_CREATE_LOCAL_PRINTER  CUPS 2.2  CUPS-Create-Local-Printer: Create a local (temporary) printer
    IPP_OP_CUPS_DELETE_CLASS CUPS-Delete-Class: Delete a class
    IPP_OP_CUPS_DELETE_PRINTER CUPS-Delete-Printer: Delete a printer
    IPP_OP_CUPS_GET_DEFAULT CUPS-Get-Default: Get the default printer
    IPP_OP_CUPS_GET_DEVICES  DEPRECATED  CUPS-Get-Devices: Get a list of supported devices
    IPP_OP_CUPS_GET_DOCUMENT  CUPS 1.4/macOS 10.6  CUPS-Get-Document: Get a document file
    IPP_OP_CUPS_GET_PPD  DEPRECATED  CUPS-Get-PPD: Get a PPD file
    IPP_OP_CUPS_GET_PPDS  DEPRECATED  CUPS-Get-PPDs: Get a list of supported drivers
    IPP_OP_CUPS_GET_PRINTERS CUPS-Get-Printers: Get a list of printers and/or classes
    IPP_OP_CUPS_INVALID Invalid operation name for ippOpValue
    IPP_OP_CUPS_MOVE_JOB CUPS-Move-Job: Move a job to a different printer
    IPP_OP_CUPS_SET_DEFAULT CUPS-Set-Default: Set the default printer
    IPP_OP_DISABLE_PRINTER Disable-Printer: Reject new jobs for a printer
    IPP_OP_ENABLE_PRINTER Enable-Printer: Accept new jobs for a printer
    IPP_OP_GET_JOBS Get-Jobs: Get a list of jobs
    IPP_OP_GET_JOB_ATTRIBUTES Get-Job-Attribute: Get information about a job
    IPP_OP_GET_NOTIFICATIONS  CUPS 1.2/macOS 10.5  Get-Notifications: Get notification events
    IPP_OP_GET_PRINTER_ATTRIBUTES Get-Printer-Attributes: Get information about a printer
    IPP_OP_GET_PRINTER_SUPPORTED_VALUES Get-Printer-Supported-Values: Get supported values
    IPP_OP_GET_SUBSCRIPTIONS  CUPS 1.2/macOS 10.5  Get-Subscriptions: Get list of subscriptions
    IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES  CUPS 1.2/macOS 10.5  Get-Subscription-Attributes: Get subscription information
    IPP_OP_HOLD_JOB Hold-Job: Hold a job for printing
    IPP_OP_HOLD_NEW_JOBS Hold-New-Jobs: Hold new jobs
    IPP_OP_IDENTIFY_PRINTER Identify-Printer: Make the printer beep, flash, or display a message for identification
    IPP_OP_PAUSE_PRINTER Pause-Printer: Stop a printer
    IPP_OP_PAUSE_PRINTER_AFTER_CURRENT_JOB Pause-Printer-After-Current-Job: Stop printer after the current job
    IPP_OP_PRINT_JOB Print-Job: Print a single file
    IPP_OP_PROMOTE_JOB Promote-Job: Promote a job to print sooner
    IPP_OP_RELEASE_HELD_NEW_JOBS Release-Held-New-Jobs: Release new jobs that were previously held
    IPP_OP_RELEASE_JOB Release-Job: Release a job for printing
    IPP_OP_RENEW_SUBSCRIPTION  CUPS 1.2/macOS 10.5  Renew-Subscription: Renew a printer subscription
    IPP_OP_RESTART_JOB  DEPRECATED  Restart-Job: Reprint a job
    IPP_OP_RESUME_JOB Resume-Job: Resume the current job
    IPP_OP_RESUME_PRINTER Resume-Printer: Start a printer
    IPP_OP_SCHEDULE_JOB_AFTER Schedule-Job-After: Schedule a job to print after another
    IPP_OP_SEND_DOCUMENT Send-Document: Add a file to a job
    IPP_OP_SET_JOB_ATTRIBUTES Set-Job-Attributes: Set job values
    IPP_OP_SET_PRINTER_ATTRIBUTES Set-Printer-Attributes: Set printer values
    IPP_OP_SUSPEND_CURRENT_JOB Suspend-Current-Job: Suspend the current job
    IPP_OP_VALIDATE_JOB Validate-Job: Validate job values prior to submission

    ipp_orient_e

    Orientation values

    Constants

    IPP_ORIENT_LANDSCAPE 90 degrees counter-clockwise
    IPP_ORIENT_NONE No rotation
    IPP_ORIENT_PORTRAIT No rotation
    IPP_ORIENT_REVERSE_LANDSCAPE 90 degrees clockwise
    IPP_ORIENT_REVERSE_PORTRAIT 180 degrees

    ipp_pstate_e

    Printer state values

    Constants

    IPP_PSTATE_IDLE Printer is idle
    IPP_PSTATE_PROCESSING Printer is working
    IPP_PSTATE_STOPPED Printer is stopped

    ipp_quality_e

    Print quality values

    Constants

    IPP_QUALITY_DRAFT Draft quality
    IPP_QUALITY_HIGH High quality
    IPP_QUALITY_NORMAL Normal quality

    ipp_res_e

    Resolution units

    Constants

    IPP_RES_PER_CM Pixels per centimeter
    IPP_RES_PER_INCH Pixels per inch

    ipp_state_e

    ipp_t state values

    Constants

    IPP_STATE_ATTRIBUTE One or more attributes need to be sent/received
    IPP_STATE_DATA IPP request data needs to be sent/received
    IPP_STATE_ERROR An error occurred
    IPP_STATE_HEADER The request header needs to be sent/received
    IPP_STATE_IDLE Nothing is happening/request completed

    ipp_status_e

    IPP status code values

    Constants

    IPP_STATUS_CUPS_INVALID Invalid status name for ippErrorValue
    IPP_STATUS_ERROR_ACCOUNT_AUTHORIZATION_FAILED client-error-account-authorization-failed
    IPP_STATUS_ERROR_ACCOUNT_CLOSED client-error-account-closed
    IPP_STATUS_ERROR_ACCOUNT_INFO_NEEDED client-error-account-info-needed
    IPP_STATUS_ERROR_ACCOUNT_LIMIT_REACHED client-error-account-limit-reached
    IPP_STATUS_ERROR_ATTRIBUTES_NOT_SETTABLE client-error-attributes-not-settable
    IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES client-error-attributes-or-values-not-supported
    IPP_STATUS_ERROR_BAD_REQUEST client-error-bad-request
    IPP_STATUS_ERROR_BUSY server-error-busy
    IPP_STATUS_ERROR_CHARSET client-error-charset-not-supported
    IPP_STATUS_ERROR_COMPRESSION_ERROR client-error-compression-error
    IPP_STATUS_ERROR_COMPRESSION_NOT_SUPPORTED client-error-compression-not-supported
    IPP_STATUS_ERROR_CONFLICTING client-error-conflicting-attributes
    IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED  DEPRECATED  cups-error-account-authorization-failed
    IPP_STATUS_ERROR_CUPS_ACCOUNT_CLOSED cups-error-account-closed @deprecate@
    IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED  DEPRECATED  cups-error-account-info-needed
    IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED  DEPRECATED  cups-error-account-limit-reached
    IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED  CUPS 1.5/macOS 10.7  cups-authentication-canceled - Authentication canceled by user
    IPP_STATUS_ERROR_CUPS_PKI  CUPS 1.5/macOS 10.7  cups-pki-error - Error negotiating a secure connection
    IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED  CUPS 1.5/macOS 10.7  cups-upgrade-required - TLS upgrade required
    IPP_STATUS_ERROR_DEVICE server-error-device-error
    IPP_STATUS_ERROR_DOCUMENT_ACCESS client-error-document-access-error
    IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR client-error-document-format-error
    IPP_STATUS_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED client-error-document-format-not-supported
    IPP_STATUS_ERROR_DOCUMENT_PASSWORD client-error-document-password-error
    IPP_STATUS_ERROR_DOCUMENT_PERMISSION client-error-document-permission-error
    IPP_STATUS_ERROR_DOCUMENT_SECURITY client-error-document-security-error
    IPP_STATUS_ERROR_DOCUMENT_UNPRINTABLE client-error-document-unprintable-error
    IPP_STATUS_ERROR_FORBIDDEN client-error-forbidden
    IPP_STATUS_ERROR_GONE client-error-gone
    IPP_STATUS_ERROR_IGNORED_ALL_SUBSCRIPTIONS client-error-ignored-all-subscriptions
    IPP_STATUS_ERROR_INTERNAL server-error-internal-error
    IPP_STATUS_ERROR_JOB_CANCELED server-error-job-canceled
    IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED server-error-multiple-document-jobs-not-supported
    IPP_STATUS_ERROR_NOT_ACCEPTING_JOBS server-error-not-accepting-jobs
    IPP_STATUS_ERROR_NOT_AUTHENTICATED client-error-not-authenticated
    IPP_STATUS_ERROR_NOT_AUTHORIZED client-error-not-authorized
    IPP_STATUS_ERROR_NOT_FETCHABLE client-error-not-fetchable
    IPP_STATUS_ERROR_NOT_FOUND client-error-not-found
    IPP_STATUS_ERROR_NOT_POSSIBLE client-error-not-possible
    IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED server-error-operation-not-supported
    IPP_STATUS_ERROR_PRINTER_IS_DEACTIVATED server-error-printer-is-deactivated
    IPP_STATUS_ERROR_REQUEST_ENTITY client-error-request-entity-too-large
    IPP_STATUS_ERROR_REQUEST_VALUE client-error-request-value-too-long
    IPP_STATUS_ERROR_SERVICE_UNAVAILABLE server-error-service-unavailable
    IPP_STATUS_ERROR_TEMPORARY server-error-temporary-error
    IPP_STATUS_ERROR_TIMEOUT client-error-timeout
    IPP_STATUS_ERROR_TOO_MANY_DOCUMENTS server-error-too-many-documents
    IPP_STATUS_ERROR_TOO_MANY_JOBS server-error-too-many-jobs
    IPP_STATUS_ERROR_TOO_MANY_SUBSCRIPTIONS client-error-too-many-subscriptions
    IPP_STATUS_ERROR_URI_SCHEME client-error-uri-scheme-not-supported
    IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED server-error-version-not-supported
    IPP_STATUS_OK successful-ok
    IPP_STATUS_OK_CONFLICTING successful-ok-conflicting-attributes
    IPP_STATUS_OK_EVENTS_COMPLETE successful-ok-events-complete
    IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED successful-ok-ignored-or-substituted-attributes
    IPP_STATUS_OK_IGNORED_SUBSCRIPTIONS successful-ok-ignored-subscriptions
    IPP_STATUS_OK_TOO_MANY_EVENTS successful-ok-too-many-events

    ipp_tag_e

    Value and group tag values for attributes

    Constants

    IPP_TAG_ADMINDEFINE Admin-defined value
    IPP_TAG_BOOLEAN Boolean value
    IPP_TAG_CHARSET Character set value
    IPP_TAG_CUPS_INVALID Invalid tag name for ippTagValue
    IPP_TAG_DATE Date/time value
    IPP_TAG_DEFAULT Default value
    IPP_TAG_DELETEATTR Delete-attribute value
    IPP_TAG_END End-of-attributes
    IPP_TAG_ENUM Enumeration value
    IPP_TAG_EVENT_NOTIFICATION Event group
    IPP_TAG_INTEGER Integer value
    IPP_TAG_JOB Job group
    IPP_TAG_KEYWORD Keyword value
    IPP_TAG_LANGUAGE Language value
    IPP_TAG_MIMETYPE MIME media type value
    IPP_TAG_NAME Name value
    IPP_TAG_NAMELANG Name-with-language value
    IPP_TAG_NOTSETTABLE Not-settable value
    IPP_TAG_NOVALUE No-value value
    IPP_TAG_OPERATION Operation group
    IPP_TAG_PRINTER Printer group
    IPP_TAG_RANGE Range value
    IPP_TAG_RESOLUTION Resolution value
    IPP_TAG_STRING Octet string value
    IPP_TAG_SUBSCRIPTION Subscription group
    IPP_TAG_TEXT Text value
    IPP_TAG_TEXTLANG Text-with-language value
    IPP_TAG_UNKNOWN Unknown value
    IPP_TAG_UNSUPPORTED_GROUP Unsupported attributes group
    IPP_TAG_UNSUPPORTED_VALUE Unsupported value
    IPP_TAG_URI URI value
    IPP_TAG_URISCHEME URI scheme value
    IPP_TAG_ZERO Zero tag - used for separators
    cups-2.2.7/doc/help/encryption.html000664 000765 000024 00000010241 13255074424 017726 0ustar00msweetstaff000000 000000 Managing Encryption

    Managing Encryption

    CUPS supports TLS encryption in two ways:

    1. Using HTTPS (always on) as soon as a connection is established, and
    2. Using HTTP Upgrade to TLS (opportunistic) after the connection is established.

    CUPS supports self-signed, CA-signed, and enterprise certificates, with configurable certificate validation, cipher suite, and SSL/TLS version policies.

    Out of the box, CUPS uses a Trust On First Use ("TOFU") certificate validation policy like the popular Secure Shell (ssh) software, requires TLS/1.0 or higher, only allows secure cipher suites, and automatically creates a "self-signed" certificate and private key for the scheduler so that remote administration operations and printer sharing are encrypted by default.

    Configuring Client TLS Policies

    The client.conf file controls the client TLS policies. The default policy is:

    AllowAnyRoot Yes
    AllowExpiredCerts No
    Encryption IfRequested
    SSLOptions None
    TrustOnFirstUse Yes
    ValidateCerts No
    

    A client can be configured to only communicate with trusted TLS/1.1+ servers and printers by copying the corresponding certificates to the client (see below) and using the following policy in the client.conf file or macOS® printing preferences:

    AllowAnyRoot No
    AllowExpiredCerts No
    Encryption Required
    SSLOptions DenyTLS1.0
    TrustOnFirstUse No
    ValidateCerts Yes
    

    Similarly, if a client needs to support an older server that only supports SSL/3.0 and RC4 cipher suites you can use the following policy option:

    SSLOptions AllowRC4 AllowSSL3
    

    Configuring Server TLS Policies

    Two directives in the cups-files.conf file control the server (scheduler) TLS policies - CreateSelfSignedCerts and ServerKeychain. The default policy creates self-signed certificates as needed.

    The DefaultEncryption and Encryption directives in the cupsd.conf file control whether encryption is used. The default configuration requires encryption for remote access whenever authentication is required.

    Platform Differences

    macOS®

    On macOS, client configuration settings for ordinary users are stored in the ~/Library/Preferences/org.cups.PrintingPrefs.plist file. System-wide and user certificates are stored in the system and login keychains, with private CUPS keychains being used for self-signed and CUPS-managed certificates.

    Windows®

    On Windows, client configuration settings are controlled by the SSL/TLS Group Policy settings and certificate stores.

    Other Platforms

    Other platforms only use the client.conf file and PEM-encoded certificates (hostname.crt) and private keys (hostname.key) in the /etc/cups/ssl and ~/.cups/ssl directories. If present, the /etc/cups/ssl/site.crt file defines a site-wide CA certificate that is used to validate server and printer certificates. Certificates for known servers and printers are stored by CUPS in the corresponding ssl directory so they can be validated for subsequent connections.

    CUPS also supports certificates created and managed by the popular Let's Encrypt certificate service, which are stored in the /etc/letsencrypt/live directory.

    cups-2.2.7/doc/help/glossary.html000664 000765 000024 00000005243 13255074424 017405 0ustar00msweetstaff000000 000000 Glossary

    Glossary

    A

    ASCII
    American Standard Code for Information Interchange

    C

    C
    A computer language
    Character Set
    The association of numbers with specific printed or displayed characters or symbols

    E

    ESC/P
    EPSON Standard Code for Printers

    F

    FTP
    File Transfer Protocol

    G

    GIF
    Graphics Interchange Format

    H

    HP-PCL
    Hewlett-Packard Page Control Language
    HP-PJL
    Hewlett-Packard Printer Job Language

    I

    IETF
    Internet Engineering Task Force
    IP
    Internet Protocol
    IPv4
    Internet Protocol, version 4; IPv4 addresses are 32-bits in length and often look like "nnn.nnn.nnn.nnn" and "127.0.0.1"
    IPv6
    Internet Protocol, version 6: IPv6 addresses are 128-bits in length and look like "xxxx::xxxx:xxxx:xxxx:xxxx" and "::1"
    IPP
    Internet Printing Protocol
    ISO
    International Standards Organization

    J

    JFIF
    JPEG File Interchange Format
    JPEG
    Joint Photographic Experts Group

    L

    LPD
    Line Printer Daemon

    M

    MIME
    Multimedia Internet Mail Exchange

    P

    parallel
    Sending or receiving data more than 1 bit at a time
    PDF
    Portable Document Format
    pipe
    A one-way communications channel between two programs
    PNG
    Portable Network Graphics
    PostScript
    A page description language that is most often used for printing
    PPD
    PostScript Printer Description
    PWG
    Printer Working Group

    S

    serial
    Sending or receiving data 1 bit at a time
    SMB
    Server Message Block
    socket
    A two-way network communications channel

    T

    TCP
    Transmission Control Protocol
    TFTP
    Trivial File Transfer Protocol
    TIFF
    Tagged Image File Format

    U

    UDP
    Unicast Datagram Protocol
    Unicode
    A universal character set for all languages of the world
    UTF-8
    Unicode Transfer Format 8-Bit
    cups-2.2.7/doc/help/kerberos.html000664 000765 000024 00000010005 13255074424 017346 0ustar00msweetstaff000000 000000 Using Kerberos Authentication

    Using Kerberos Authentication

    CUPS allows you to use a Key Distribution Center (KDC) for authentication on your local CUPS server and when printing to a remote authenticated queue. This document describes how to configure CUPS to use Kerberos authentication and provides links to the MIT help pages for configuring Kerberos on your systems and network.

    System Requirements

    The following are required to use Kerberos with CUPS:

    1. Heimdal Kerberos (any version) or MIT Kerberos (1.6.3 or newer)
    2. Properly configured Domain Name System (DNS) infrastructure (for your servers):
      1. DNS server(s) with static IP addresses for all CUPS servers or configured to allow DHCP updates to the host addresses and
      2. All CUPS clients and servers configured to use the same DNS server(s).
    3. Properly configured Kerberos infrastructure:
      1. KDC configured to allow CUPS servers to obtain Service Granting Tickets (SGTs) for the "host" service,
      2. LDAP-based user accounts - both OpenDirectory and ActiveDirectory provide this with the KDC, and
      3. CUPS clients and servers bound to the same KDC and LDAP server(s).

    Configuring Kerberos on Your System

    Before you can use Kerberos with CUPS, you will need to configure Kerberos on your system and setup a system as a KDC. Because this configuration is highly system and site-specific, please consult the following on-line resources provided by the creators of Kerberos at the Massachusetts Institute of Technology (MIT):

    The Linux Documentation Project also has a HOWTO on Kerberos:

    Configuring CUPS to Use Kerberos

    Once you have configured Kerberos on your system(s), you can then enable Kerberos authentication by selecting the Negotiate authentication type. The simplest way to do this is using the cupsctl(8) command on your server(s):

    cupsctl DefaultAuthType=Negotiate
    

    You can also enable Kerberos from the web interface by checking the Use Kerberos Authentication box and clicking Change Settings:

    http://server.example.com:631/admin
    

    After you have enabled Kerberos authentication, use the built-in "authenticated" policy or your own custom policies with the printers you will be sharing. See Managing Operation Policies for more information.

    Implementation Information

    CUPS implements Kerberos over HTTP using GSSAPI and the service name "host". Because of limitations in the HTTP GSSAPI protocol extension, only a single domain/KDC is supported for authentication. The HTTP extension is described in RFC 4559.

    When doing printing tasks that require authentication, CUPS requests single-use "tickets" from your login session to authenticate who you are. These tickets give CUPS a username of the form "user@REALM", which is then converted to just "user" for purposes of user and group checks.

    In order to support printing to a shared printer, CUPS runs the IPP backend as the owner of the print job so it can obtain the necessary credentials when the job is de-spooled to the server.

    cups-2.2.7/doc/help/license.html000664 000765 000024 00000140653 13255074424 017171 0ustar00msweetstaff000000 000000 Software License Agreement

    Software License Agreement

    Copyright 2007-2013 by Apple Inc.
    1 Infinite Loop
    Cupertino, CA 95014 USA

    WWW: http://www.cups.org/

    Introduction

    CUPSTM is provided under the GNU General Public License ("GPL") and GNU Library General Public License ("LGPL"), Version 2, with an exception for Apple operating systems. A copy of the exception and licenses follow this introduction.

    The GNU LGPL applies to the CUPS and CUPS Imaging libraries located in the "cups" and "filter" subdirectories of the CUPS source distribution and the files in the "test" subdirectory. The GNU GPL applies to the remainder of the CUPS distribution.

    For those not familiar with the GNU GPL, the license basically allows you to:

    • Use the CUPS software at no charge.
    • Distribute verbatim copies of the software in source or binary form.
    • Sell verbatim copies of the software for a media fee, or sell support for the software.

    What this license does not allow you to do is make changes or add features to CUPS and then sell a binary distribution without source code. You must provide source for any changes or additions to the software, and all code must be provided under the GPL or LGPL as appropriate. The only exceptions to this are the portions of the CUPS software covered by the Apple operating system license exceptions outlined later in this license agreement.

    The GNU LGPL relaxes the "link-to" restriction, allowing you to develop applications that use the CUPS and CUPS Imaging libraries under other licenses and/or conditions as appropriate for your application, driver, or filter.

    License Exceptions

    In addition, as the copyright holder of CUPS, Apple Inc. grants the following special exception:

    1. Apple Operating System Development License Exception;
      1. Software that is developed by any person or entity for an Apple Operating System ("Apple OS-Developed Software"), including but not limited to Apple and third party printer drivers, filters, and backends for an Apple Operating System, that is linked to the CUPS imaging library or based on any sample filters or backends provided with CUPS shall not be considered to be a derivative work or collective work based on the CUPS program and is exempt from the mandatory source code release clauses of the GNU GPL. You may therefore distribute linked combinations of the CUPS imaging library with Apple OS-Developed Software without releasing the source code of the Apple OS-Developed Software. You may also use sample filters and backends provided with CUPS to develop Apple OS-Developed Software without releasing the source code of the Apple OS-Developed Software.
      2. An Apple Operating System means any operating system software developed and/or marketed by Apple Inc., including but not limited to all existing releases and versions of Apple's Darwin, macOS, and macOS Server products and all follow-on releases and future versions thereof.
      3. This exception is only available for Apple OS-Developed Software and does not apply to software that is distributed for use on other operating systems.
      4. All CUPS software that falls under this license exception have the following text at the top of each source file:
        This file is subject to the Apple OS-Developed Software exception.

    No developer is required to provide this exception in a derived work.

    Kerberos Support Code

    The Kerberos support code ("KSC") is copyright 2006 by Jelmer Vernooij and is provided 'as-is', without any express or implied warranty. In no event will the author or Apple Inc. be held liable for any damages arising from the use of the KSC.

    Sources files containing KSC have the following text at the top of each source file:

    This file contains Kerberos support code, copyright 2006 by Jelmer Vernooij.

    The KSC copyright and license apply only to Kerberos-related feature code in CUPS. Such code is typically conditionally compiled based on the present of the HAVE_GSSAPI preprocessor definition.

    Permission is granted to anyone to use the KSC for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

    1. The origin of the KSC must not be misrepresented; you must not claim that you wrote the original software. If you use the KSC in a product, an acknowledgment in the product documentation would be appreciated but is not required.
    2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
    3. This notice may not be removed or altered from any source distribution.

    Trademarks

    CUPS and the CUPS logo (the "CUPS Marks") are trademarks of Apple Inc. Apple grants you a non-exclusive and non-transferable right to use the CUPS Marks in any direct port or binary distribution incorporating CUPS software and in any promotional material therefor. You agree that your products will meet the highest levels of quality and integrity for similar goods, not be unlawful, and be developed, manufactured, and distributed in compliance with this license. You will not interfere with Apple's rights in the CUPS Marks, and all use of the CUPS Marks shall inure to the benefit of Apple. This license does not apply to use of the CUPS Marks in a derivative products, which requires prior written permission from Apple Inc.

    GNU GENERAL PUBLIC LICENSE

    Version 2, June 1991

    Copyright 1989, 1991 Free Software Foundation, Inc.
    59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    
    Everyone is permitted to copy and distribute verbatim
    copies of this license document, but changing it is not allowed.
    

    Preamble

    The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.

    When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

    To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.

    For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

    We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.

    Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.

    Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.

    The precise terms and conditions for copying, distribution and modification follow.

    GNU GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

    1. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".

      Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.

    2. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.

      You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

    3. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
      1. You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
      2. You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
      3. if the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)

      These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

      Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.

      In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

    4. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
      1. Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
      2. Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
      3. Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)

      The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

      If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.

    5. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
    6. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
    7. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
    8. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.

      If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.

      It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

      This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.

    9. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
    10. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

      Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.

    11. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

    NO WARRANTY

    1. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    2. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

    END OF TERMS AND CONDITIONS

    How to Apply These Terms to Your New Programs

    If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

    To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.

    one line to give the program's name and an idea of what it does.
    Copyright (C) yyyy  name of author
    
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    

    Also add information on how to contact you by electronic and paper mail.

    If the program is interactive, make it output a short notice like this when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
    type `show w'.  This is free software, and you are welcome
    to redistribute it under certain conditions; type `show c'
    for details.
    

    The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.

    You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:

    Yoyodyne, Inc., hereby disclaims all copyright
    interest in the program `Gnomovision'
    (which makes passes at compilers) written
    by James Hacker.
    
    signature of Ty Coon, 1 April 1989
    Ty Coon, President of Vice
    

    GNU LIBRARY GENERAL PUBLIC LICENSE

    Version 2, June 1991

    Copyright (C) 1991 Free Software Foundation, Inc.
    59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.
    
    [This is the first released version of the library GPL.  It is
     numbered 2 because it goes with version 2 of the ordinary GPL.]
    

    Preamble

    The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.

    This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too.

    When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

    To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it.

    For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights.

    Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library.

    Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations.

    Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.

    Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license.

    The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such.

    Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better.

    However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries.

    The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library.

    Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one.

    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

    0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you".

    A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.

    The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)

    "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.

    Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.

    1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.

    You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

    2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

    1. The modified work must itself be a software library.

    2. You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.

    3. You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.

    4. 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 invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.

      (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)

    These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

    Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.

    In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

    3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.

    Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.

    This option is useful when you wish to copy part of the code of the Library into a program that is not a library.

    4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.

    If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.

    5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.

    However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.

    When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.

    If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)

    Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.

    6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.

    You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:

    1. Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable 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.)

    2. 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.

    3. 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.

    4. Verify that the user has already received a copy of these materials or that you have already sent this user a copy.

    For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

    It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.

    7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:

    1. 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.

    2. 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.

    8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

    9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.

    10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.

    11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.

    If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.

    It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

    This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.

    12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.

    13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

    Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.

    14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

    NO WARRANTY

    15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

    16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

    END OF TERMS AND CONDITIONS

    How to Apply These Terms to Your New Libraries

    If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).

    To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.

    one line to give the library's name and an idea of what it does.
    Copyright (C) year  name of author
    
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.
    
    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    

    Also add information on how to contact you by electronic and paper mail.

    You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:

    Yoyodyne, Inc., hereby disclaims all copyright interest in
    the library `Frob' (a library for tweaking knobs) written
    by James Random Hacker.
    
    signature of Ty Coon, 1 April 1990
    Ty Coon, President of Vice
    

    That's all there is to it! cups-2.2.7/doc/help/man-backend.html000664 000765 000024 00000022626 13255074424 017706 0ustar00msweetstaff000000 000000 backend(7)

    backend(7)

    Name

    backend - cups backend transmission interfaces

    Synopsis

    backend
    backend job user title num-copies options [ filename ]
    
    #include <cups/cups.h>
    
    const char *cupsBackendDeviceURI(char **argv);
    
    void cupsBackendReport(const char *device_scheme,
                           const char *device_uri,
                           const char *device_make_and_model,
                           const char *device_info,
                           const char *device_id,
                           const char *device_location);
    
    ssize_t cupsBackChannelWrite(const char *buffer,
                                 size_t bytes, double timeout);
    
    int cupsSideChannelRead(cups_sc_command_t *command,
                            cups_sc_status_t *status, char *data,
                            int *datalen, double timeout);
    
    int cupsSideChannelWrite(cups_sc_command_t command,
                             cups_sc_status_t status, const char *data,
                             int datalen, double timeout);
    

    Description

    Backends are a special type of filter(7) which is used to send print data to and discover different devices on the system.

    Like filters, backends must be capable of reading from a filename on the command-line or from the standard input, copying the standard input to a temporary file as required by the physical interface.

    The command name (argv[0]) is set to the device URI of the destination printer. Authentication information in argv[0] is removed, so backend developers are urged to use the DEVICE_URI environment variable whenever authentication information is required. The cupsBackendDeviceURI() function may be used to retrieve the correct device URI.

    Back-channel data from the device should be relayed to the job filters using the cupsBackChannelWrite function.

    Backends are responsible for reading side-channel requests using the cupsSideChannelRead() function and responding with the cupsSideChannelWrite() function. The CUPS_SC_FD constant defines the file descriptor that should be monitored for incoming requests.

    Device Discovery

    When run with no arguments, the backend should list the devices and schemes it supports or is advertising to the standard output. The output consists of zero or more lines consisting of any of the following forms:
    
        device-class scheme "Unknown" "device-info"
        device-class device-uri "device-make-and-model" "device-info"
        device-class device-uri "device-make-and-model" "device-info" "device-id"
        device-class device-uri "device-make-and-model" "device-info" "device-id" "device-location"
    

    The cupsBackendReport() function can be used to generate these lines and handle any necessary escaping of characters in the various strings.

    The device-class field is one of the following values:

    direct
    The device-uri refers to a specific direct-access device with no options, such as a parallel, USB, or SCSI device.
    file
    The device-uri refers to a file on disk.
    network
    The device-uri refers to a networked device and conforms to the general form for network URIs.
    serial
    The device-uri refers to a serial device with configurable baud rate and other options. If the device-uri contains a baud value, it represents the maximum baud rate supported by the device.

    The scheme field provides the URI scheme that is supported by the backend. Backends should use this form only when the backend supports any URI using that scheme. The device-uri field specifies the full URI to use when communicating with the device.

    The device-make-and-model field specifies the make and model of the device, e.g. "Example Foojet 2000". If the make and model is not known, you must report "Unknown".

    The device-info field specifies additional information about the device. Typically this includes the make and model along with the port number or network address, e.g. "Example Foojet 2000 USB #1".

    The optional device-id field specifies the IEEE-1284 device ID string for the device, which is used to select a matching driver.

    The optional device-location field specifies the physical location of the device, which is often used to pre-populate the printer-location attribute when adding a printer.

    Permissions

    Backends without world read and execute permissions are run as the root user. Otherwise, the backend is run using an unprivileged user account, typically "lp".

    Exit Status

    The following exit codes are defined for backends:
    CUPS_BACKEND_OK
    The print file was successfully transmitted to the device or remote server.
    CUPS_BACKEND_FAILED

    The print file was not successfully transmitted to the device or remote server. The scheduler will respond to this by canceling the job, retrying the job, or stopping the queue depending on the state of the printer-error-policy attribute.
    CUPS_BACKEND_AUTH_REQUIRED
    The print file was not successfully transmitted because valid authentication information is required. The scheduler will respond to this by holding the job and adding the 'cups-held-for-authentication' keyword to the "job-reasons" Job Description attribute.
    CUPS_BACKEND_HOLD
    The print file was not successfully transmitted because it cannot be printed at this time. The scheduler will respond to this by holding the job.
    CUPS_BACKEND_STOP
    The print file was not successfully transmitted because it cannot be printed at this time. The scheduler will respond to this by stopping the queue.
    CUPS_BACKEND_CANCEL
    The print file was not successfully transmitted because one or more attributes are not supported or the job was canceled at the printer. The scheduler will respond to this by canceling the job.
    CUPS_BACKEND_RETRY
    The print file was not successfully transmitted because of a temporary issue. The scheduler will retry the job at a future time - other jobs may print before this one.
    CUPS_BACKEND_RETRY_CURRENT
    The print file was not successfully transmitted because of a temporary issue. The scheduler will retry the job immediately without allowing intervening jobs.

    All other exit code values are reserved.

    Environment

    In addition to the environment variables listed in cups(1) and filter(7), CUPS backends can expect the following environment variable:
    DEVICE_URI
    The device URI associated with the printer.

    Files

    /etc/cups/cups-files.conf

    Notes

    CUPS backends are not generally designed to be run directly by the user. Aside from the device URI issue ( argv[0] and DEVICE_URI environment variable contain the device URI), CUPS backends also expect specific environment variables and file descriptors, and typically run in a user session that (on macOS) has additional restrictions that affect how it runs. Backends can also be installed with restricted permissions (0500 or 0700) that tell the scheduler to run them as the "root" user instead of an unprivileged user (typically "lp") on the system.

    Unless you are a developer and know what you are doing, please do not run backends directly. Instead, use the lp(1) or lpr(1) programs to send print jobs or lpinfo(8) to query for available printers using the backend. The one exception is the SNMP backend - see cups-snmp(8) for more information.

    See Also

    cups(1), cups-files.conf(5), cups-snmp(8), cupsd(8), filter(7), lp(1), lpinfo(8), lpr(1),
    CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cancel.html000664 000765 000024 00000005445 13255074424 017544 0ustar00msweetstaff000000 000000 cancel(1)

    cancel(1)

    Name

    cancel - cancel jobs

    Synopsis

    cancel [ -E ] [ -U username ] [ -a ] [ -h hostname[:port] ] [ -u username ] [ -x ] [ id ] [ destination ] [ destination-id ]

    Description

    The cancel command cancels print jobs. If no destination or id is specified, the currently printing job on the default destination is canceled.

    Options

    The following options are recognized by cancel:
    -a
    Cancel all jobs on the named destination, or all jobs on all destinations if none is provided.
    -E
    Forces encryption when connecting to the server.
    -h hostname[:port]
    Specifies an alternate server.
    -U username
    Specifies the username to use when connecting to the server.
    -u username
    Cancels jobs owned by username.
    -x
    Deletes job data files in addition to canceling.

    Conforming To

    Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", or "#". Also, printer and class names are not case-sensitive.

    Examples

    Cancel the current print job:
    
        cancel
    
    
    Cancel job "myprinter-42":
    
        cancel myprinter-42
    
    
    Cancel all jobs:
    
        cancel -a
    

    Notes

    Administrators wishing to prevent unauthorized cancellation of jobs via the -u option should require authentication for Cancel-Jobs operations in cupsd.conf(5).

    See Also

    cupsd.conf(5), lp(1), lpmove(8), lpstat(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-classes.conf.html000664 000765 000024 00000002774 13255074424 020702 0ustar00msweetstaff000000 000000 classes.conf(5)

    classes.conf(5)

    Name

    classes.conf - class configuration file for cups

    Description

    The classes.conf file defines the local printer classes that are available. It is normally located in the /etc/cups directory and is maintained by the cupsd(8) program. This file is not intended to be edited or managed manually.

    Notes

    The name, location, and format of this file are an implementation detail that will change in future releases of CUPS.

    See Also

    cupsd(8), cupsd.conf(5), mime.convs(5), mime.types(5), printers.conf(5), subscriptions.conf(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-client.conf.html000664 000765 000024 00000012300 13255074424 020505 0ustar00msweetstaff000000 000000 client.conf(5)

    client.conf(5)

    Name

    client.conf - client configuration file for cups

    Description

    The client.conf file configures the CUPS client and is normally located in the /etc/cups and/or ~/.cups directories. Each line in the file can be a configuration directive, a blank line, or a comment. Comment lines start with the # character.

    Note: Starting with macOS 10.7, this file is only used by command-line and X11 applications plus the IPP backend. The ServerName directive is not supported on macOS at all. Starting with macOS 10.12, all applications can access these settings in the /Library/Preferences/org.cups.PrintingPrefs.plist file instead. See the NOTES section below for more information.

    Directives

    The following directives are understood by the client. Consult the online help for detailed descriptions:
    AllowAnyRoot Yes
    AllowAnyRoot No
    Specifies whether to allow TLS with certificates that have not been signed by a trusted Certificate Authority. The default is "Yes".
    AllowExpiredCerts Yes
    AllowExpiredCerts No
    Specifies whether to allow TLS with expired certificates. The default is "No".
    Encryption IfRequested
    Encryption Never
    Encryption Required
    Specifies the level of encryption that should be used.
    GSSServiceName name
    Specifies the Kerberos service name that is used for authentication, typically "host", "http", or "ipp". CUPS adds the remote hostname ("name@server.example.com") for you. The default name is "http".
    ServerName hostname-or-ip-address[:port]
    ServerName /domain/socket
    Specifies the address and optionally the port to use when connecting to the server. Note: This directive is not supported on macOS 10.7 or later.
    ServerName hostname-or-ip-address[:port]/version=1.1
    Specifies the address and optionally the port to use when connecting to a server running CUPS 1.3.12 and earlier.
    SSLOptions [AllowDH] [AllowRC4] [AllowSSL3] [DenyCBC] [DenyTLS1.0]
    SSLOptions None
    Sets encryption options (only in /etc/cups/client.conf). By default, CUPS only supports encryption using TLS v1.0 or higher using known secure cipher suites. Security is reduced when Allow options are used. Security is enhanced when Deny options are used. The AllowDH option enables cipher suites using plain Diffie-Hellman key negotiation (not supported on systems using GNU TLS). The AllowRC4 option enables the 128-bit RC4 cipher suites, which are required for some older clients. The AllowSSL3 option enables SSL v3.0, which is required for some older clients that do not support TLS v1.0. The DenyCBC option disables all CBC cipher suites. The DenyTLS1.0 option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1.
    TrustOnFirstUse Yes
    TrustOnFirstUse No
    Specifies whether to trust new TLS certificates by default. The default is "Yes".
    User name
    Specifies the default user name to use for requests.
    ValidateCerts Yes
    ValidateCerts No
    Specifies whether to only allow TLS with certificates whose common name matches the hostname. The default is "No".

    Notes

    The client.conf file is deprecated on macOS and will no longer be supported in a future version of CUPS. Configuration settings can instead be viewed or changed using the defaults(1) command:
    defaults write /Library/Preferences/org.cups.PrintingPrefs.plist Encryption Required
    defaults write /Library/Preferences/org.cups.PrintingPrefs.plist TrustOnFirstUse -bool NO
    
    defaults read /Library/Preferences/org.cups.PrintingPrefs.plist Encryption
    
    On Linux and other systems using GNU TLS, the /etc/cups/ssl/site.crl file, if present, provides a list of revoked X.509 certificates and is used when validating certificates.

    See Also

    cups(1), default(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cups-config.html000664 000765 000024 00000006264 13255074424 020534 0ustar00msweetstaff000000 000000 cups-config(1)

    cups-config(1)

    Name

    cups-config - get cups api, compiler, directory, and link information.

    Synopsis

    cups-config --api-version
    cups-config --build
    cups-config --cflags
    cups-config --datadir
    cups-config --help
    cups-config --ldflags
    cups-config [ --image ] [ --static ] --libs
    cups-config --serverbin
    cups-config --serverroot
    cups-config --version

    Description

    The cups-config command allows application developers to determine the necessary command-line options for the compiler and linker, as well as the installation directories for filters, configuration files, and drivers. All values are reported to the standard output.

    Options

    The cups-config command accepts the following command-line options:
    --api-version
    Reports the current API version (major.minor).
    --build
    Reports a system-specific build number.
    --cflags
    Reports the necessary compiler options.
    --datadir
    Reports the default CUPS data directory.
    --help
    Reports the program usage message.
    --image
    When used with --libs, adds the CUPS imaging library to the list of libraries.
    --ldflags
    Reports the necessary linker options.
    --libs
    Reports the necessary libraries to link to.
    --serverbin
    Reports the default CUPS binary directory, where filters and backends are stored.
    --serverroot
    Reports the default CUPS configuration file directory.
    --static
    When used with --libs, reports the static libraries instead of the default (shared) libraries.
    --version
    Reports the full version number of the CUPS installation (major.minor.patch).

    Examples

    Show the currently installed version of CUPS:
    
        cups-config --version
    
    
    Compile a simple one-file CUPS filter:
    
        cc `cups-config --cflags --ldflags` -o filter filter.c \
            `cups-config --libs`
    

    See Also

    cups(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cups-files.conf.html000664 000765 000024 00000027662 13255074424 021322 0ustar00msweetstaff000000 000000 cups-files.conf(5)

    cups-files.conf(5)

    Name

    cups-files.conf - file and directory configuration file for cups

    Description

    The cups-files.conf file configures the files and directories used by the CUPS scheduler, cupsd(8). It is normally located in the /etc/cups directory.

    Each line in the file can be a configuration directive, a blank line, or a comment. Configuration directives typically consist of a name and zero or more values separated by whitespace. The configuration directive name and values are case-insensitive. Comment lines start with the # character.

    Directives

    The following directives are understood by cupsd(8):
    AccessLog
    AccessLog filename
    AccessLog stderr
    AccessLog syslog
    Defines the access log filename. Specifying a blank filename disables access log generation. The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background. The value "syslog" causes log entries to be sent to the system log daemon. The server name may be included in filenames using the string "%s", for example:
    
        AccessLog /var/log/cups/%s-access_log
    
    
    The default is "/var/log/cups/access_log".
    CacheDir directory
    Specifies the directory to use for long-lived temporary (cache) files. The default is "/var/spool/cups/cache" or "/var/cache/cups" depending on the platform.
    ConfigFilePerm mode
    Specifies the permissions for all configuration files that the scheduler writes. The default is "0644" on macOS and "0640" on all other operating systems.

    Note: The permissions for the printers.conf file are currently masked to only allow access from the scheduler user (typically root). This is done because printer device URIs sometimes contain sensitive authentication information that should not be generally known on the system. There is no way to disable this security feature.

    CreateSelfSignedCerts yes
    CreateSelfSignedCerts no
    Specifies whether the scheduler automatically creates self-signed certificates for client connections using TLS. The default is yes.
    DataDir path
    Specifies the directory where data files can be found. The default is usually "/usr/share/cups".
    DocumentRoot directory
    Specifies the root directory for the CUPS web interface content. The default is usually "/usr/share/doc/cups".
    ErrorLog
    ErrorLog filename
    ErrorLog stderr
    ErrorLog syslog
    Defines the error log filename. Specifying a blank filename disables error log generation. The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background. The value "syslog" causes log entries to be sent to the system log daemon. The server name may be included in filenames using the string "%s", for example:
    
        ErrorLog /var/log/cups/%s-error_log
    
    
    The default is "/var/log/cups/error_log".
    FatalErrors none
    FatalErrors all -kind [ ... -kind ]
    FatalErrors kind [ ... kind ]
    Specifies which errors are fatal, causing the scheduler to exit. The default is "config". The kind strings are:
    none
    No errors are fatal.
    all
    All of the errors below are fatal.
    browse
    Browsing initialization errors are fatal, for example failed connections to the DNS-SD daemon.
    config
    Configuration file syntax errors are fatal.
    listen
    Listen or Port errors are fatal, except for IPv6 failures on the loopback or "any" addresses.
    log
    Log file creation or write errors are fatal.
    permissions
    Bad startup file permissions are fatal, for example shared TLS certificate and key files with world-read permissions.
    Group group-name-or-number
    Specifies the group name or ID that will be used when executing external programs. The default group is operating system specific but is usually "lp" or "nobody".
    LogFilePerm mode
    Specifies the permissions of all log files that the scheduler writes. The default is "0644".
    PageLog [ filename ]
    PageLog stderr
    PageLog syslog
    Defines the page log filename. The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background. The value "syslog" causes log entries to be sent to the system log daemon. Specifying a blank filename disables page log generation. The server name may be included in filenames using the string "%s", for example:
    
        PageLog /var/log/cups/%s-page_log
    
    
    The default is "/var/log/cups/page_log".
    RemoteRoot username
    Specifies the username that is associated with unauthenticated accesses by clients claiming to be the root user. The default is "remroot".
    RequestRoot directory
    Specifies the directory that contains print jobs and other HTTP request data. The default is "/var/spool/cups".
    Sandboxing relaxed
    Sandboxing strict
    Specifies the level of security sandboxing that is applied to print filters, backends, and other child processes of the scheduler. The default is "strict". This directive is currently only used/supported on macOS.
    ServerBin directory
    Specifies the directory containing the backends, CGI programs, filters, helper programs, notifiers, and port monitors. The default is "/usr/lib/cups" or "/usr/libexec/cups" depending on the platform.
    ServerKeychain path
    Specifies the location of TLS certificates and private keys. The default is "/Library/Keychains/System.keychain" on macOS and "/etc/cups/ssl" on all other operating systems. macOS uses its keychain database to store certificates and keys while other platforms use separate files in the specified directory, *.crt for PEM-encoded certificates and *.key for PEM-encoded private keys.
    ServerRoot directory
    Specifies the directory containing the server configuration files. The default is "/etc/cups".
    StateDir directory
    Specifies the directory to use for PID and local certificate files. The default is "/var/run/cups" or "/etc/cups" depending on the platform.
    SyncOnClose Yes
    SyncOnClose No
    Specifies whether the scheduler calls fsync(2) after writing configuration or state files. The default is "No".
    SystemGroup group-name [ ... group-name ]
    Specifies the group(s) to use for @SYSTEM group authentication. The default contains "admin", "lpadmin", "root", "sys", and/or "system".
    TempDir directory
    Specifies the directory where short-term temporary files are stored. The default is "/var/spool/cups/tmp".
    User username
    Specifies the user name or ID that is used when running external programs. The default is "lp".

    Deprecated Directives

    The following directives are deprecated and will be removed from a future version of CUPS:
    FileDevice Yes
    FileDevice No
    Specifies whether the file pseudo-device can be used for new printer queues. The URI "file:///dev/null" is always allowed. File devices cannot be used with "raw" print queues - a PPD file is required. The specified file is overwritten for every print job. Writing to directories is not supported.
    FontPath directory[:...:directoryN]
    Specifies a colon separated list of directories where fonts can be found. On Linux the font-config(1) mechanism is used instead. On macOS the Font Book application manages system-installed fonts.
    LPDConfigFile filename
    Specifies the LPD service configuration file to update.
    Printcap filename
    Specifies a file that is filled with a list of local print queues.
    PrintcapFormat bsd
    PrintcapFormat plist
    PrintcapFormat solaris
    Specifies the format to use for the Printcap file. "bsd" is the historical LPD printcap file format. "plist" is the Apple plist file format. "solaris" is the historical Solaris LPD printcap file format.
    SMBConfigFile filename
    Specifies the SMB service configuration file to update.

    See Also

    classes.conf(5), cups(1), cupsd(8), cupsd.conf(5), mime.convs(5), mime.types(5), printers.conf(5), subscriptions.conf(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cups-lpd.html000664 000765 000024 00000011334 13255074424 020040 0ustar00msweetstaff000000 000000 cups-lpd(8)

    cups-lpd(8)

    Name

    cups-lpd - receive print jobs and report printer status to lpd clients

    Synopsis

    cups-lpd [ -h hostname[:port] ] [ -n ] [ -o option=value ]

    Description

    cups-lpd is the CUPS Line Printer Daemon ("LPD") mini-server that supports legacy client systems that use the LPD protocol. cups-lpd does not act as a standalone network daemon but instead operates using any of the Internet "super-servers" such as inetd(8), launchd(8), and systemd(8).

    Options

    -h hostname[:port]
    Sets the CUPS server (and port) to use.
    -n
    Disables reverse address lookups; normally cups-lpd will try to discover the hostname of the client via a reverse DNS lookup.
    -o name=value
    Inserts options for all print queues. Most often this is used to disable the "l" filter so that remote print jobs are filtered as needed for printing; the inetd(8) example below sets the "document-format" option to "application/octet-stream" which forces autodetection of the print file format.

    Conforming To

    cups-lpd does not enforce the restricted source port number specified in RFC 1179, as using restricted ports does not prevent users from submitting print jobs. While this behavior is different than standard Berkeley LPD implementations, it should not affect normal client operations.

    The output of the status requests follows RFC 2569, Mapping between LPD and IPP Protocols. Since many LPD implementations stray from this definition, remote status reporting to LPD clients may be unreliable.

    Errors

    Errors are sent to the system log.

    Files

    /etc/inetd.conf
    /etc/xinetd.d/cups-lpd
    /System/Library/LaunchDaemons/org.cups.cups-lpd.plist
    

    Notes

    Performance

    cups-lpd performs well with small numbers of clients and printers. However, since a new process is created for each connection and since each process must query the printing system before each job submission, it does not scale to larger configurations. We highly recommend that large configurations use the native IPP support provided by CUPS instead.

    Security

    cups-lpd currently does not perform any access control based on the settings in cupsd.conf(5) or in the hosts.allow(5) or hosts.deny(5) files used by TCP wrappers. Therefore, running cups-lpd on your server will allow any computer on your network (and perhaps the entire Internet) to print to your server.

    While xinetd(8) has built-in access control support, you should use the TCP wrappers package with inetd(8) to limit access to only those computers that should be able to print through your server.

    cups-lpd is not enabled by the standard CUPS distribution. Please consult with your operating system vendor to determine whether it is enabled by default on your system.

    Example

    If you are using inetd(8), add the following line to the inetd.conf file to enable the cups-lpd mini-server:
    
        printer stream tcp nowait lp /usr/lib/cups/daemon/cups-lpd cups-lpd \
            -o document-format=application/octet-stream
    
    

    Note: If you are using Solaris 10 or higher, you must run the inetdconv(1m) program to register the changes to the inetd.conf file.

    CUPS includes configuration files for launchd(8), systemd(8), and xinetd(8). Simply enable the cups-lpd service using the corresponding control program.

    See Also

    cups(1), cupsd(8), inetconv(1m), inetd(8), launchd(8), xinetd(8), CUPS Online Help (http://localhost:631/help), RFC 2569

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cups-snmp.conf.html000664 000765 000024 00000005710 13255074424 021163 0ustar00msweetstaff000000 000000 snmp.conf(5)

    snmp.conf(5)

    Name

    snmp.conf - snmp configuration file for cups

    Description

    The snmp.conf file configures how the standard CUPS network backends (http, https, ipp, ipps, lpd, snmp, and socket) access printer information using SNMPv1 and is normally located in the /etc/cups directory. Each line in the file can be a configuration directive, a blank line, or a comment. Comment lines start with the # character.

    The Community and DebugLevel directives are used by all backends. The remainder apply only to the SNMP backend - cups-snmp(8).

    Directives

    The following directives are understood by the CUPS network backends:
    Address @IF(name)
    Address @LOCAL
    Address address
    Sends SNMP broadcast queries (for discovery) to the specified address(es). There is no default for the broadcast address.
    Community name
    Specifies the community name to use. Only a single community name may be specified. The default community name is "public".
    DebugLevel number
    Specifies the logging level from 0 (none) to 3 (everything). Typically only used for debugging (thus the name). The default debug level is 0.
    DeviceURI "regular expression" device-uri [... device-uri]
    Specifies one or more device URIs that should be used for a given make and model string. The regular expression is used to match the detected make and model, and the device URI strings must be of the form "scheme://%s[:port]/[path]", where "%s" represents the detected address or hostname. There are no default device URI matching rules.
    HostNameLookups on
    HostNameLookups off
    Specifies whether the addresses of printers should be converted to hostnames or left as numeric IP addresses. The default is "off".
    MaxRunTime seconds
    Specifies the maximum number of seconds that the SNMP backend will scan the network for printers. The default is 120 seconds (2 minutes).

    See Also

    cups-snmp(8), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cups-snmp.html000664 000765 000024 00000005441 13255074424 020240 0ustar00msweetstaff000000 000000 cups-snmp(8)

    cups-snmp(8)

    Name

    snmp - cups snmp backend

    Synopsis

    /usr/lib/cups/backend/snmp ip-address-or-hostname
    /usr/libexec/cups/backend/snmp ip-address-or-hostname
    lpinfo -v --include-schemes snmp

    Description

    The CUPS SNMP backend provides legacy discovery and identification of network printers using SNMPv1. When used for discovery through the scheduler, the backend will list all printers that respond to a broadcast SNMPv1 query with the "public" community name. Additional queries are then sent to printers that respond in order to determine the correct device URI, make and model, and other information needed for printing.

    In the first form, the SNMP backend is run directly by the user to look up the device URI and other information when you have an IP address or hostname. This can be used for programs that need to configure print queues where the user has supplied an address but nothing else.

    In the second form, the SNMP backend is run indirectly using the lpinfo(8) command. The output provides all printers detected via SNMP on the configured broadcast addresses. Note: no broadcast addresses are configured by default.

    Environment

    The DebugLevel value can be overridden using the CUPS_DEBUG_LEVEL environment variable. The MaxRunTime value can be overridden using the CUPS_MAX_RUN_TIME environment variable.

    Files

    The SNMP backend reads the /etc/cups/snmp.conf configuration file, if present, to set the default broadcast address, community name, and logging level.

    Conforming To

    The CUPS SNMP backend uses the information from the Host, Printer, and Port Monitor MIBs along with some vendor private MIBs and intelligent port probes to determine the correct device URI and make and model for each printer.

    See Also

    backend(7), cups-snmp.conf(5), cupsd(8), lpinfo(8), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cups.html000664 000765 000024 00000017436 13255074424 017274 0ustar00msweetstaff000000 000000 cups(1)

    cups(1)

    Name

    cups - a standards-based, open source printing system

    Description

    CUPS is the software you use to print from applications like word processors, email readers, photo editors, and web browsers. It converts the page descriptions produced by your application (put a paragraph here, draw a line there, and so forth) into something your printer can understand and then sends the information to the printer for printing.

    Now, since every printer manufacturer does things differently, printing can be very complicated. CUPS does its best to hide this from you and your application so that you can concentrate on printing and less on how to print. Generally, the only time you need to know anything about your printer is when you use it for the first time, and even then CUPS can often figure things out on its own.

    How Does It Work?

    The first time you print to a printer, CUPS creates a queue to keep track of the current status of the printer (everything OK, out of paper, etc.) and any pages you have printed. Most of the time the queue points to a printer connected directly to your computer via a USB port, however it can also point to a printer on your network, a printer on the Internet, or multiple printers depending on the configuration. Regardless of where the queue points, it will look like any other printer to you and your applications.

    Every time you print something, CUPS creates a job which contains the queue you are sending the print to, the name of the document you are printing, and the page descriptions. Job are numbered (queue-1, queue-2, and so forth) so you can monitor the job as it is printed or cancel it if you see a mistake. When CUPS gets a job for printing, it determines the best programs (filters, printer drivers, port monitors, and backends) to convert the pages into a printable format and then runs them to actually print the job.

    When the print job is completely printed, CUPS removes the job from the queue and moves on to any other jobs you have submitted. You can also be notified when the job is finished, or if there are any errors during printing, in several different ways.

    Where Do I Begin?

    The easiest way to start is by using the web interface to configure your printer. Go to "http://localhost:631" and choose the Administration tab at the top of the page. Click/press on the Add Printer button and follow the prompts.

    When you are asked for a username and password, enter your login username and password or the "root" username and password.

    After the printer is added you will be asked to set the default printer options (paper size, output mode, etc.) for the printer. Make any changes as needed and then click/press on the Set Default Options button to save them. Some printers also support auto-configuration - click/press on the Query Printer for Default Options button to update the options automatically.

    Once you have added the printer, you can print to it from any application. You can also choose Print Test Page from the maintenance menu to print a simple test page and verify that everything is working properly.

    You can also use the lpadmin(8) and lpinfo(8) commands to add printers to CUPS. Additionally, your operating system may include graphical user interfaces or automatically create printer queues when you connect a printer to your computer.

    How Do I Get Help?

    The CUPS web site (http://www.CUPS.org) provides access to the cups and cups-devel mailing lists, additional documentation and resources, and a bug report database. Most vendors also provide online discussion forums to ask printing questions for your operating system of choice.

    Environment

    CUPS commands use the following environment variables to override the default locations of files and so forth. For security reasons, these environment variables are ignored for setuid programs:
    CUPS_ANYROOT
    Whether to allow any X.509 certificate root (Y or N).
    CUPS_CACHEDIR
    The directory where semi-persistent cache files can be found.
    CUPS_DATADIR
    The directory where data files can be found.
    CUPS_ENCRYPTION
    The default level of encryption (Always, IfRequested, Never, Required).
    CUPS_EXPIREDCERTS
    Whether to allow expired X.509 certificates (Y or N).
    CUPS_GSSSERVICENAME
    The Kerberos service name used for authentication.
    CUPS_SERVER
    The hostname/IP address and port number of the CUPS scheduler (hostname:port or ipaddress:port).
    CUPS_SERVERBIN
    The directory where server helper programs, filters, backend, etc. can be found.
    CUPS_SERVERROOT
    The root directory of the server.
    CUPS_STATEDIR
    The directory where state files can be found.
    CUPS_USER
    Specifies the name of the user for print requests.
    HOME
    Specifies the home directory of the current user.
    IPP_PORT
    Specifies the default port number for IPP requests.
    LOCALEDIR
    Specifies the location of localization files.
    LPDEST
    Specifies the default print queue (System V standard).
    PRINTER
    Specifies the default print queue (Berkeley standard).
    TMPDIR
    Specifies the location of temporary files.

    Files

    ~/.cups/client.conf
    ~/.cups/lpoptions
    

    Conforming To

    CUPS conforms to the Internet Printing Protocol version 2.1 and implements the Berkeley and System V UNIX print commands.

    See Also

    cancel(1), client.conf(7), cupsctl(8), cupsd(8), lp(1), lpadmin(8), lpinfo(8), lpoptions(1), lpr(1), lprm(1), lpq(1), lpstat(1), CUPS Online Help (http://localhost:631/help), CUPS Web Site (http://www.CUPS.org), PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cupsaccept.html000664 000765 000024 00000005323 13255074424 020444 0ustar00msweetstaff000000 000000 cupsaccept(8)

    cupsaccept(8)

    Name

    cupsaccept/cupsreject - accept/reject jobs sent to a destination

    Synopsis

    cupsaccept [ -E ] [ -U username ] [ -h hostname[:port] ] destination(s)
    cupsreject [ -E ] [ -U username ] [ -h hostname[:port] ] [ -r reason ] destination(s)

    Description

    The cupsaccept command instructs the printing system to accept print jobs to the specified destinations.

    The cupsreject command instructs the printing system to reject print jobs to the specified destinations. The -r option sets the reason for rejecting print jobs. If not specified, the reason defaults to "Reason Unknown".

    Options

    The following options are supported by both cupsaccept and cupsreject:
    -E
    Forces encryption when connecting to the server.
    -U username
    Sets the username that is sent when connecting to the server.
    -h hostname[:port]
    Chooses an alternate server.
    -r "reason"
    Sets the reason string that is shown for a printer that is rejecting jobs.

    Conforming To

    The cupsaccept and cupsreject commands correspond to the System V printing system commands "accept" and "reject", respectively. Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", or "#". Also, printer and class names are not case-sensitive.

    Finally, the CUPS versions may ask the user for an access password depending on the printing system configuration.

    See Also

    cancel(1), cupsenable(8), lp(1), lpadmin(8), lpstat(1),
    CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cupsaddsmb.html000664 000765 000024 00000010032 13255074424 020430 0ustar00msweetstaff000000 000000 cupsaddsmb(8)

    cupsaddsmb(8)

    Name

    cupsaddsmb - export printers to samba for windows clients

    Synopsis

    cupsaddsmb [ -H samba-server ] [ -U samba-user[%samba-password] ] [ -h cups-server[:port] ] [ -v ] -a
    cupsaddsmb [ -H samba-server ] [ -U samba-user[%samba-password] ] [ -h cups-server[:port] ] [ -v ] printer [ ... printer ]

    Description

    The cupsaddsmb program exports printers to the SAMBA software (version 2.2.0 or higher) for use with Windows clients. Depending on the SAMBA configuration, you may need to provide a password to export the printers. This program requires the Windows printer driver files described below.

    Samba Configuration

    cupsaddsmb uses the RPC-based printing support in SAMBA to provide printer drivers and PPD files to Windows client machines. In order to use this functionality, you must first configure the SAMBA smb.conf(5) file to support printing through CUPS and provide a printer driver download share, as follows:
    
        [global]
    	load printers = yes
    	printing = cups
    	printcap name = cups
    
        [printers]
    	comment = All Printers
    	path = /var/spool/samba
    	browseable = no
    	public = yes
    	guest ok = yes
    	writable = no
    	printable = yes
    
        [print$]
    	comment = Printer Drivers
    	path = /etc/samba/drivers
    	browseable = yes
    	guest ok = no
    	read only = yes
    	write list = root
    
    
    This configuration assumes a FHS-compliant installation of SAMBA; adjust the [printers] and [print$] share paths accordingly on your system as needed.

    Microsoft Postscript Drivers For Windows

    The base driver for Windows 2000 and higher is the Microsoft PostScript driver, which is available on any system running Windows 2000 or higher in the %WINDIR%\SYSTEM32\SPOOL\DRIVERS\W32X86\3 folder for 32-bit drivers and %WINDIR%\SYSTEM32\SPOOL\DRIVERS\X64\3 folder for 64-bit drivers.

    Copy the 32-bit drivers to the /usr/share/cups/drivers directory and the 64-bit drivers to the /usr/share/cups/drivers/x64 directory exactly as named below:

    
        ps5ui.dll
        pscript.hlp
        pscript.ntf
        pscript5.dll
    
    
    Note: Unlike Windows, case is significant - make sure that you use the lowercase filenames shown above, otherwise cupsaddsmb will fail to export the drivers.

    Options

    cupsaddsmb supports the following options:
    -H samba-server
    Specifies the SAMBA server which defaults to the CUPS server.
    -U samba-user[%samba-password]
    Specifies the SAMBA print admin username which defaults to your current username. If the username contains a percent (%) character, then the text following the percent is treated as the SAMBA password to use.
    -a
    Exports all known printers. Otherwise only the named printers are exported.
    -h cups-server[:port]
    Specifies a different CUPS server to use.
    -v
    Specifies that verbose information should be shown. This is useful for debugging SAMBA configuration problems.

    See Also

    rpcclient(1), smbclient(1), smbd(8), smb.conf(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cupsctl.html000664 000765 000024 00000005757 13255074424 020002 0ustar00msweetstaff000000 000000 cupsctl(8)

    cupsctl(8)

    Name

    cupsctl - configure cupsd.conf options

    Synopsis

    cupsctl [ -E ] [ -U username ] [ -h server[:port] ] [ --[no-]debug-logging ] [ --[no-]remote-admin ] [ --[no-]remote-any ] [ --[no-]share-printers ] [ --[no-]user-cancel-any ] [ name=value ]

    Description

    cupsctl updates or queries the cupsd.conf file for a server. When no changes are requested, the current configuration values are written to the standard output in the format "name=value", one per line.

    Options

    The following options are recognized:
    -E
    Enables encryption on the connection to the scheduler.
    -U username
    Specifies an alternate username to use when authenticating with the scheduler.
    -h server[:port]
    Specifies the server address.
    --[no-]debug-logging
    Enables (disables) debug logging to the error_log file.
    --[no-]remote-admin
    Enables (disables) remote administration.
    --[no-]remote-any
    Enables (disables) printing from any address, e.g., the Internet.
    --[no-]share-printers
    Enables (disables) sharing of local printers with other computers.
    --[no-]user-cancel-any
    Allows (prevents) users to cancel jobs owned by others.

    Examples

    Display the current settings:
    
        cupsctl
    
    
    Enable debug logging:
    
        cupsctl --debug-logging
    
    
    Get the current debug logging state:
    
        cupsctl | grep '^_debug_logging' | awk -F= '{print $2}'
    
    
    Disable printer sharing:
    
        cupsctl --no-share-printers
    

    Known Issues

    You cannot set the Listen or Port directives using cupsctl.

    See Also

    cupsd.conf(5), cupsd(8),
    CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cupsd-helper.html000664 000765 000024 00000005327 13255074424 020711 0ustar00msweetstaff000000 000000 cupsd-helper(8)

    cupsd-helper(8)

    Name

    cupsd-helper - cupsd helper programs

    Synopsis

    cups-deviced request-id limit user-id options
    cups-driverd cat ppd-name
    cups-driverd list request_id limit options
    cups-exec sandbox-profile [ -g group-id ] [ -n nice-value ] [ -u user-id ] /path/to/program argv0 ... argvN

    Description

    The cupsd-helper programs perform long-running operations on behalf of the scheduler, cupsd(8). The cups-deviced helper program runs each CUPS backend(7) with no arguments in order to discover the available printers.

    The cups-driverd helper program lists all available printer drivers, a subset of "matching" printer drivers, or a copy of a specific driver PPD file.

    The cups-exec helper program runs backends, filters, and other programs. On macOS these programs are run in a secure sandbox.

    Files

    The cups-driverd program looks for PPD and driver information files in the following directories:
    
        /Library/Printers
        /opt/share/ppd
        /System/Library/Printers
        /usr/local/share/ppd
        /usr/share/cups/drv
        /usr/share/cups/model
        /usr/share/ppd
    

    PPD files can be compressed using the gzip(1) program or placed in compressed tar(1) archives to further reduce their size.

    Driver information files must conform to the format defined in ppdcfile(5).

    See Also

    backend(7), cups(1), cupsd(8), cupsd.conf(5), filter(7), ppdcfile(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cupsd-logs.html000664 000765 000024 00000025112 13255074424 020370 0ustar00msweetstaff000000 000000 cupsd-logs(5)

    cupsd-logs(5)

    Name

    cupsd-logs - cupsd log files (access_log, error_log, and page_log)

    Description

    cupsd(8) normally maintains three log files: access_log to track requests that are submitted to the scheduler, error_log to track progress and errors, and page_log to track pages that are printed. Configuration directives in cupsd.conf(5) and cups-files.conf(5) control what information is logged and where it is stored.

    Access Log File Format

    The access_log file lists each HTTP resource that is accessed by a web browser or client. Each line is in an extended version of the so-called "Common Log Format" used by many web servers and web reporting tools:
    
        host group user date-time "method resource version" status bytes
          ipp-operation ipp-status
    
    
    For example:
    
        10.0.1.2 - - [01/Dec/2005:21:50:28 +0000] "POST / HTTP/1.1" 200 317
          CUPS-Get-Printers successful-ok-ignored-or-substituted-attributes
        localhost - - [01/Dec/2005:21:50:32 +0000] "GET /admin HTTP/1.1"
          200 0 - -
        localhost - - [01/Dec/2005:21:50:32 +0000] "POST / HTTP/1.1"
          200 157 CUPS-Get-Printers
          successful-ok-ignored-or-substituted-attributes
        localhost - - [01/Dec/2005:21:50:32 +0000] "POST / HTTP/1.1"
          200 1411 CUPS-Get-Devices -
        localhost - - [01/Dec/2005:21:50:32 +0000] "GET /admin HTTP/1.1"
          200 6667 - -
    
    
    The host field will normally only be an IP address unless you have enabled the HostNameLookups directive in the cupsd.conf file or if the IP address corresponds to your local machine.

    The group field always contains "-".

    The user field is the authenticated username of the requesting user. If no username and password is supplied for the request then this field contains "-".

    The date-time field is the date and time of the request in local time and is in the format "[DD/MON/YYYY:HH:MM:SS +ZZZZ]".

    The method field is the HTTP method used: "GET", "HEAD", "OPTIONS", "POST", or "PUT". "GET" requests are used to get files from the server, both for the web interface and to get configuration and log files. "HEAD" requests are used to get information about a resource prior to a "GET". "OPTIONS" requests are used to upgrade connections to TLS encryption. "POST" requests are used for web interface forms and IPP requests. "PUT" requests are used to upload configuration files.

    The resource field is the filename of the requested resource.

    The version field is the HTTP specification version used by the client. For CUPS clients this will always be "HTTP/1.1".

    The status field contains the HTTP result status of the request, as follows:

    200
    Successful operation.
    201
    File created/modified successfully.
    304
    The requested file has not changed.
    400
    Bad HTTP request; typically this means that you have a malicious program trying to access your server.
    401
    Unauthorized, authentication (username + password) is required.
    403
    Access is forbidden; typically this means that a client tried to access a file or resource they do not have permission to access.
    404
    The file or resource does not exist.
    405
    URL access method is not allowed; typically this means you have a web browser using your server as a proxy.
    413
    Request too large; typically this means that a client tried to print a file larger than the MaxRequestSize allows.
    426
    Upgrading to TLS-encrypted connection.
    500
    Server error; typically this happens when the server is unable to open/create a file - consult the error_log file for details.
    501
    The client requested encryption but encryption support is not enabled/compiled in.
    505
    HTTP version number not supported; typically this means that you have a malicious program trying to access your server.
  • The bytes field contains the number of bytes in the request. For POST requests the bytes field contains the number of bytes of non-IPP data that is received from the client.

    The ipp-operation field contains either "-" for non-IPP requests or the IPP operation name for POST requests containing an IPP request.

    The ipp-status field contains either "-" for non-IPP requests or the IPP status code name for POST requests containing an IPP response.

    Error Log File Format

    The error_log file lists messages from the scheduler - errors, warnings, etc. The LogLevel directive in the cupsd.conf(5) file controls which messages are logged:
    
        level date-time message
    
    
    For example:
    
        I [20/May/1999:19:18:28 +0000] [Job 1] Queued on 'DeskJet' by 'mike'.
        D [20/May/1999:19:18:28 +0000] [Job 1] argv[0]="DeskJet"
        D [20/May/1999:19:18:28 +0000] [Job 1] argv[1]="1"
        D [20/May/1999:19:18:28 +0000] [Job 1] argv[2]="mike"
        D [20/May/1999:19:18:28 +0000] [Job 1] argv[3]="myjob"
        D [20/May/1999:19:18:28 +0000] [Job 1] argv[4]="1"
        D [20/May/1999:19:18:28 +0000] [Job 1] argv[5]="media=
          na_letter_8.5x11in sides=one-sided"
        D [20/May/1999:19:18:28 +0000] [Job 1] argv[6]="/var/spool/cups/
          d000001-001"
        I [20/May/1999:19:21:02 +0000] [Job 2] Queued on 'DeskJet' by 'mike'.
        I [20/May/1999:19:22:24 +0000] [Job 2] Canceled by 'mike'.
    
    
    The level field contains the type of message:
    A
    Alert message (LogLevel alert)
    C
    Critical error message (LogLevel crit)
    D
    Debugging message (LogLevel debug)
    d
    Detailed debugging message (LogLevel debug2)
    E
    Normal error message (LogLevel error)
    I
    Informational message (LogLevel info)
    N
    Notice message (LogLevel notice)
    W
    Warning message (LogLevel warn)
    X
    Emergency error message (LogLevel emerg)

    The date-time field contains the date and time of when the page started printing. The format of this field is identical to the data-time field in the access_log file.

    The message field contains a free-form textual message. Messages from job filters are prefixed with "[Job NNN]" where "NNN" is the job ID.

    Page Log File Format

    The page_log file lists each page or group of pages that are sent to a printer. By default, each line contains the following information:
    
        printer user job-id date-time page-number num-copies job-billing
          job-originating-host-name job-name media sides
    
        printer user job-id date-time total num-impressions job-billing
          job-originating-host-name job-name media sides
    
    
    For example the entries for a two page job called "myjob" might look like:
    
        DeskJet root 1 [20/May/1999:19:21:05 +0000] 1 1 acme-123
          localhost myjob na_letter_8.5x11in one-sided
        DeskJet root 1 [20/May/1999:19:21:05 +0000] 2 1 acme-123
          localhost myjob na_letter_8.5x11in one-sided
    
        DeskJet root 1 [20/May/1999:19:21:06 +0000] total 2 acme-123
          localhost myjob na_letter_8.5x11in one-sided
    
    
    The PageLogFormat directive in the cupsd.conf(5) file can be used to change this information.

    The printer field contains the name of the printer that printed the page. If you send a job to a printer class, this field will contain the name of the printer that was assigned the job.

    The user field contains the name of the user (the IPP requesting-user-name attribute) that submitted this file for printing.

    The job-id field contains the job number of the page being printed.

    The date-time field contains the date and time of when the page started printing. The format of this field is identical to the data-time field in the access_log file.

    The page-number and num-copies fields contain the page number and number of copies being printed of that page. For printers that cannot produce copies on their own, the num-copies field will always be 1.

    Lines containing the keyword "total" have a num-impressions field instead which provides the total number of impressions (sides) that have been printed on for the job.

    The job-billing field contains a copy of the job-billing or job-account-id attributes provided with the IPP Create-Job or Print-Job requests or "-" if neither was provided.

    The job-originating-host-name field contains the hostname or IP address of the client that printed the job.

    The job-name field contains a copy of the job-name attribute provided with the IPP Create-Job or Print-Job requests or "-" if none was provided.

    The media field contains a copy of the media or media-col/media-size attribute provided with the IPP Create-Job or Print-Job requests or "-" if none was provided.

    The sides field contains a copy of the sides attribute provided with the IPP Create-Job or Print-Job requests or "-" if none was provided.

    See Also

    cupsd(8), cupsd.conf(5), cups-files.conf(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cupsd.conf.html000664 000765 000024 00000111503 13255074424 020352 0ustar00msweetstaff000000 000000 cupsd.conf(5)

    cupsd.conf(5)

    Name

    cupsd.conf - server configuration file for cups

    Description

    The cupsd.conf file configures the CUPS scheduler, cupsd(8). It is normally located in the /etc/cups directory. Note: File, directory, and user configuration directives that used to be allowed in the cupsd.conf file are now stored in the cups-files.conf(5) file instead in order to prevent certain types of privilege escalation attacks.

    Each line in the file can be a configuration directive, a blank line, or a comment. Configuration directives typically consist of a name and zero or more values separated by whitespace. The configuration directive name and values are case-insensitive. Comment lines start with the # character.

    Top-level Directives

    The following top-level directives are understood by cupsd(8):
    AccessLogLevel config
    AccessLogLevel actions
    AccessLogLevel all
    Specifies the logging level for the AccessLog file. The "config" level logs when printers and classes are added, deleted, or modified and when configuration files are accessed or updated. The "actions" level logs when print jobs are submitted, held, released, modified, or canceled, and any of the conditions for "config". The "all" level logs all requests. The default access log level is "actions".
    AutoPurgeJobs Yes
    AutoPurgeJobs No

    Specifies whether to purge job history data automatically when it is no longer required for quotas. The default is "No".
    BrowseLocalProtocols all
    BrowseLocalProtocols dnssd
    BrowseLocalProtocols none
    Specifies which protocols to use for local printer sharing. The default is "dnssd" on systems that support Bonjour and "none" otherwise.
    BrowseWebIF Yes
    BrowseWebIF No

    Specifies whether the CUPS web interface is advertised. The default is "No".
    Browsing Yes
    Browsing No

    Specifies whether shared printers are advertised. The default is "No".
    DefaultAuthType Basic
    DefaultAuthType Negotiate

    Specifies the default type of authentication to use. The default is "Basic".
    DefaultEncryption Never
    DefaultEncryption IfRequested
    DefaultEncryption Required
    Specifies whether encryption will be used for authenticated requests. The default is "Required".
    DefaultLanguage locale
    Specifies the default language to use for text and web content. The default is "en".
    DefaultPaperSize Auto
    DefaultPaperSize None
    DefaultPaperSize sizename
    Specifies the default paper size for new print queues. "Auto" uses a locale-specific default, while "None" specifies there is no default paper size. Specific size names are typically "Letter" or "A4". The default is "Auto".
    DefaultPolicy policy-name
    Specifies the default access policy to use. The default access policy is "default".
    DefaultShared Yes
    DefaultShared No
    Specifies whether local printers are shared by default. The default is "Yes".
    DirtyCleanInterval seconds
    Specifies the delay for updating of configuration and state files. A value of 0 causes the update to happen as soon as possible, typically within a few milliseconds. The default value is "30".
    ErrorPolicy abort-job
    Specifies that a failed print job should be aborted (discarded) unless otherwise specified for the printer.
    ErrorPolicy retry-job
    Specifies that a failed print job should be retried at a later time unless otherwise specified for the printer.
    ErrorPolicy retry-this-job
    Specifies that a failed print job should be retried immediately unless otherwise specified for the printer.
    ErrorPolicy stop-printer
    Specifies that a failed print job should stop the printer unless otherwise specified for the printer. The 'stop-printer' error policy is the default.
    FilterLimit limit
    Specifies the maximum cost of filters that are run concurrently, which can be used to minimize disk, memory, and CPU resource problems. A limit of 0 disables filter limiting. 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. The default limit is "0".
    FilterNice nice-value
    Specifies the scheduling priority ( nice(8) value) of filters that are run to print a job. The nice value ranges from 0, the highest priority, to 19, the lowest priority. The default is 0.
    GSSServiceName name
    Specifies the service name when using Kerberos authentication. The default service name is "http."
    HostNameLookups On
    HostNameLookups Off
    HostNameLookups Double
    Specifies whether to do reverse lookups on connecting clients. The "Double" setting causes cupsd(8) to verify that the hostname resolved from the address matches one of the addresses returned for that hostname. Double lookups also prevent clients with unregistered addresses from connecting to your server. The default is "Off" to avoid the potential server performance problems with hostname lookups. Only set this option to "On" or "Double" if absolutely required.
    IdleExitTimeout seconds
    Specifies the length of time to wait before shutting down due to inactivity. The default is "60" seconds. Note: Only applicable when cupsd(8) is run on-demand (e.g., with -l).
    JobKillDelay seconds
    Specifies the number of seconds to wait before killing the filters and backend associated with a canceled or held job. The default is "30".
    JobRetryInterval seconds
    Specifies the interval between retries of jobs in seconds. This is typically used for fax queues but can also be used with normal print queues whose error policy is "retry-job" or "retry-current-job". The default is "30".
    JobRetryLimit count
    Specifies the number of retries that are done for jobs. This is typically used for fax queues but can also be used with normal print queues whose error policy is "retry-job" or "retry-current-job". The default is "5".
    KeepAlive Yes
    KeepAlive No
    Specifies whether to support HTTP keep-alive connections. The default is "Yes".
    KeepAliveTimeout seconds
    Specifies how long an idle client connection remains open. The default is "30".
    <Limit operation ...> ... </Limit>
    Specifies the IPP operations that are being limited inside a Policy section. IPP operation names are listed below in the section "IPP OPERATION NAMES".
    <Limit method ...> ... </Limit>
    <LimitExcept method ...> ... </LimitExcept>
    Specifies the HTTP methods that are being limited inside a Location section. HTTP method names are listed below in the section "HTTP METHOD NAMES".
    LimitRequestBody size
    Specifies the maximum size of print files, IPP requests, and HTML form data. The default is "0" which disables the limit check.
    Listen ipv4-address:port
    Listen [ipv6-address]:port
    Listen *:port
    Listen /path/to/domain/socket
    Listens to the specified address and port or domain socket path for connections. Multiple Listen directives can be provided to listen on multiple addresses. The Listen directive is similar to the Port directive but allows you to restrict access to specific interfaces or networks.
    ListenBackLog number
    Specifies the number of pending connections that will be allowed. This normally only affects very busy servers that have reached the MaxClients limit, but can also be triggered by large numbers of simultaneous connections. When the limit is reached, the operating system will refuse additional connections until the scheduler can accept the pending ones. The default is the OS-defined default limit, typically either "5" for older operating systems or "128" for newer operating systems.
    <Location /path> ... </Location>
    Specifies access control for the named location. Paths are documented below in the section "LOCATION PATHS".
    LogDebugHistory number
    Specifies the number of debugging messages that are retained for logging if an error occurs in a print job. Debug messages are logged regardless of the LogLevel setting.
    LogLevel none
    LogLevel emerg
    LogLevel alert
    LogLevel crit
    LogLevel error
    LogLevel warn
    LogLevel notice
    LogLevel info
    LogLevel debug
    LogLevel debug2
    Specifies the level of logging for the ErrorLog file. The value "none" stops all logging while "debug2" logs everything. The default is "warn".
    LogTimeFormat standard
    LogTimeFormat usecs
    Specifies the format of the date and time in the log files. The value "standard" is the default and logs whole seconds while "usecs" logs microseconds.
    MaxClients number
    Specifies the maximum number of simultaneous clients that are allowed by the scheduler. The default is "100".
    MaxClientsPerHost number
    Specifies the maximum number of simultaneous clients that are allowed from a single address. The default is the MaxClients value.
    MaxCopies number
    Specifies the maximum number of copies that a user can print of each job. The default is "9999".
    MaxHoldTime seconds
    Specifies the maximum time a job may remain in the "indefinite" hold state before it is canceled. The default is "0" which disables cancellation of held jobs.
    MaxJobs number
    Specifies the maximum number of simultaneous jobs that are allowed. Set to "0" to allow an unlimited number of jobs. The default is "500".
    MaxJobsPerPrinter number
    Specifies the maximum number of simultaneous jobs that are allowed per printer. The default is "0" which allows up to MaxJobs jobs per printer.
    MaxJobsPerUser number
    Specifies the maximum number of simultaneous jobs that are allowed per user. The default is "0" which allows up to MaxJobs jobs per user.
    MaxJobTime seconds
    Specifies the maximum time a job may take to print before it is canceled. Set to "0" to disable cancellation of "stuck" jobs. The default is "10800" (3 hours).
    MaxLogSize size
    Specifies the maximum size of the log files before they are rotated. The value "0" disables log rotation. The default is "1048576" (1MB).
    MultipleOperationTimeout seconds
    Specifies the maximum amount of time to allow between files in a multiple file print job. The default is "300" (5 minutes).
    PassEnv variable [ ... variable ]
    Passes the specified environment variable(s) to child processes.
    <Policy name> ... </Policy>
    Specifies access control for the named policy.
    Port number
    Listens to the specified port number for connections.
    PreserveJobFiles Yes
    PreserveJobFiles No
    PreserveJobFiles seconds
    Specifies whether job files (documents) are preserved after a job is printed. If a numeric value is specified, job files are preserved for the indicated number of seconds after printing. The default is "86400" (preserve 1 day).
    PreserveJobHistory Yes
    PreserveJobHistory No
    PreserveJobHistory seconds
    Specifies whether the job history is preserved after a job is printed. If a numeric value is specified, the job history is preserved for the indicated number of seconds after printing. If "Yes", the job history is preserved until the MaxJobs limit is reached. The default is "Yes".
    ReloadTimeout seconds
    Specifies the amount of time to wait for job completion before restarting the scheduler. The default is "30".
    ServerAdmin email-address
    Specifies the email address of the server administrator. The default value is "root@ServerName".
    ServerAlias hostname [ ... hostname ]
    ServerAlias *
    The ServerAlias directive is used for HTTP Host header validation when clients connect to the scheduler from external interfaces. Using the special name "*" can expose your system to known browser-based DNS rebinding attacks, even when accessing sites through a firewall. If the auto-discovery of alternate names does not work, we recommend listing each alternate name with a ServerAlias directive instead of using "*".
    ServerName hostname
    Specifies the fully-qualified hostname of the server. The default is the value reported by the hostname(1) command.
    ServerTokens None
    ServerTokens ProductOnly
    ServerTokens Major
    ServerTokens Minor
    ServerTokens Minimal
    ServerTokens OS
    ServerTokens Full
    Specifies what information is included in the Server header of HTTP responses. "None" disables the Server header. "ProductOnly" reports "CUPS". "Major" reports "CUPS 2". "Minor" reports "CUPS 2.0". "Minimal" reports "CUPS 2.0.0". "OS" reports "CUPS 2.0.0 (UNAME)" where UNAME is the output of the uname(1) command. "Full" reports "CUPS 2.0.0 (UNAME) IPP/2.0". The default is "Minimal".
    SetEnv variable value
    Set the specified environment variable to be passed to child processes.
    SSLListen ipv4-address:port
    SSLListen [ipv6-address]:port
    SSLListen *:port
    Listens on the specified address and port for encrypted connections.
    SSLOptions [AllowDH] [AllowRC4] [AllowSSL3] [DenyCBC] [DenyTLS1.0]
    SSLOptions None
    Sets encryption options. By default, CUPS only supports encryption using TLS v1.0 or higher using known secure cipher suites. Security is reduced when Allow options are used. Security is enhanced when Deny options are used. The AllowDH option enables cipher suites using plain Diffie-Hellman key negotiation (not supported on systems using GNU TLS). The AllowRC4 option enables the 128-bit RC4 cipher suites, which are required for some older clients. The AllowSSL3 option enables SSL v3.0, which is required for some older clients that do not support TLS v1.0. The DenyCBC option disables all CBC cipher suites. The DenyTLS1.0 option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1.
    SSLPort port
    Listens on the specified port for encrypted connections.
    StrictConformance Yes
    StrictConformance No
    Specifies whether the scheduler requires clients to strictly adhere to the IPP specifications. The default is "No".
    Timeout seconds
    Specifies the HTTP request timeout. The default is "300" (5 minutes).
    WebInterface yes
    WebInterface no
    Specifies whether the web interface is enabled. The default is "No".

    Http Method Names

    The following HTTP methods are supported by cupsd(8):
    GET
    Used by a client to download icons and other printer resources and to access the CUPS web interface.
    HEAD
    Used by a client to get the type, size, and modification date of resources.
    OPTIONS
    Used by a client to establish a secure (SSL/TLS) connection.
    POST
    Used by a client to submit IPP requests and HTML forms from the CUPS web interface.
    PUT
    Used by a client to upload configuration files.

    Ipp Operation Names

    The following IPP operations are supported by cupsd(8):
    CUPS-Accept-Jobs
    Allows a printer to accept new jobs.
    CUPS-Add-Modify-Class
    Adds or modifies a printer class.
    CUPS-Add-Modify-Printer
    Adds or modifies a printer.
    CUPS-Authenticate-Job
    Releases a job that is held for authentication.
    CUPS-Delete-Class
    Deletes a printer class.
    CUPS-Delete-Printer
    Deletes a printer.
    CUPS-Get-Classes
    Gets a list of printer classes.
    CUPS-Get-Default
    Gets the server default printer or printer class.
    CUPS-Get-Devices
    Gets a list of devices that are currently available.
    CUPS-Get-Document
    Gets a document file for a job.
    CUPS-Get-PPD
    Gets a PPD file.
    CUPS-Get-PPDs
    Gets a list of installed PPD files.
    CUPS-Get-Printers
    Gets a list of printers.
    CUPS-Move-Job
    Moves a job.
    CUPS-Reject-Jobs
    Prevents a printer from accepting new jobs.
    CUPS-Set-Default
    Sets the server default printer or printer class.
    Cancel-Job
    Cancels a job.
    Cancel-Jobs
    Cancels one or more jobs.
    Cancel-My-Jobs
    Cancels one or more jobs creates by a user.
    Cancel-Subscription
    Cancels a subscription.
    Close-Job
    Closes a job that is waiting for more documents.
    Create-Job
    Creates a new job with no documents.
    Create-Job-Subscriptions
    Creates a subscription for job events.
    Create-Printer-Subscriptions
    Creates a subscription for printer events.
    Get-Job-Attributes
    Gets information about a job.
    Get-Jobs
    Gets a list of jobs.
    Get-Notifications
    Gets a list of event notifications for a subscription.
    Get-Printer-Attributes
    Gets information about a printer or printer class.
    Get-Subscription-Attributes
    Gets information about a subscription.
    Get-Subscriptions
    Gets a list of subscriptions.
    Hold-Job
    Holds a job from printing.
    Hold-New-Jobs
    Holds all new jobs from printing.
    Pause-Printer
    Stops processing of jobs by a printer or printer class.
    Pause-Printer-After-Current-Job
    Stops processing of jobs by a printer or printer class after the current job is finished.
    Print-Job
    Creates a new job with a single document.
    Purge-Jobs
    Cancels one or more jobs and deletes the job history.
    Release-Held-New-Jobs
    Allows previously held jobs to print.
    Release-Job
    Allows a job to print.
    Renew-Subscription
    Renews a subscription.
    Restart-Job
    Reprints a job, if possible.
    Send-Document
    Adds a document to a job.
    Set-Job-Attributes
    Changes job information.
    Set-Printer-Attributes
    Changes printer or printer class information.
    Validate-Job
    Validates options for a new job.

    Location Paths

    The following paths are commonly used when configuring cupsd(8):
    /
    The path for all get operations (get-printers, get-jobs, etc.)
    /admin
    The path for all administration operations (add-printer, delete-printer, start-printer, etc.)
    /admin/conf
    The path for access to the CUPS configuration files (cupsd.conf, client.conf, etc.)
    /admin/log
    The path for access to the CUPS log files (access_log, error_log, page_log)
    /classes
    The path for all printer classes
    /classes/name
    The resource for the named printer class
    /jobs
    The path for all jobs (hold-job, release-job, etc.)
    /jobs/id
    The path for the specified job
    /printers
    The path for all printers
    /printers/name
    The path for the named printer
    /printers/name.png
    The icon file path for the named printer
    /printers/name.ppd
    The PPD file path for the named printer

    Directives Valid Within Location And Limit Sections

    The following directives may be placed inside Location and Limit sections in the cupsd.conf file:
    Allow all
    Allow none
    Allow host.domain.com
    Allow *.domain.com
    Allow ipv4-address
    Allow ipv4-address/netmask
    Allow ipv4-address/mm
    Allow [ipv6-address]
    Allow [ipv6-address]/mm
    Allow @IF(name)
    Allow @LOCAL
    Allows access from the named hosts, domains, addresses, or interfaces. The Order directive controls whether Allow lines are evaluated before or after Deny lines.
    AuthType None
    AuthType Basic
    AuthType Default
    AuthType Negotiate
    Specifies the type of authentication required. The value "Default" corresponds to the DefaultAuthType value.
    Deny all
    Deny none
    Deny host.domain.com
    Deny *.domain.com
    Deny ipv4-address
    Deny ipv4-address/netmask
    Deny ipv4-address/mm
    Deny [ipv6-address]
    Deny [ipv6-address]/mm
    Deny @IF(name)
    Deny @LOCAL
    Denies access from the named hosts, domains, addresses, or interfaces. The Order directive controls whether Deny lines are evaluated before or after Allow lines.
    Encryption IfRequested
    Encryption Never
    Encryption Required
    Specifies the level of encryption that is required for a particular location. The default value is "IfRequested".
    Order allow,deny
    Specifies that access is denied by default. Allow lines are then processed followed by Deny lines to determine whether a client may access a particular resource.
    Order deny,allow
    Specifies that access is allowed by default. Deny lines are then processed followed by Allow lines to determine whether a client may access a particular resource.
    Require group group-name [ group-name ... ]
    Specifies that an authenticated user must be a member of one of the named groups.
    Require user {user-name|@group-name} ...
    Specifies that an authenticated user must match one of the named users or be a member of one of the named groups. The group name "@SYSTEM" corresponds to the list of groups defined by the SystemGroup directive in the cups-files.conf(5) file. The group name "@OWNER" corresponds to the owner of the resource, for example the person that submitted a print job. Note: The 'root' user is not special and must be granted privileges like any other user account.
    Require valid-user
    Specifies that any authenticated user is acceptable.
    Satisfy all
    Specifies that all Allow, AuthType, Deny, Order, and Require conditions must be satisfied to allow access.
    Satisfy any
    Specifies that any a client may access a resource if either the authentication (AuthType/Require) or address (Allow/Deny/Order) conditions are satisfied. For example, this can be used to require authentication only for remote accesses.

    Directives Valid Within Policy Sections

    The following directives may be placed inside Policy sections in the cupsd.conf file:
    JobPrivateAccess all
    JobPrivateAccess default
    JobPrivateAccess {user|@group|@ACL|@OWNER|@SYSTEM} ...
    Specifies an access list for a job's private values. The "default" access list is "@OWNER @SYSTEM". "@ACL" maps to the printer's requesting-user-name-allowed or requesting-user-name-denied values. "@OWNER" maps to the job's owner. "@SYSTEM" maps to the groups listed for the SystemGroup directive in the cups-files.conf(5) file.
    JobPrivateValues all
    JobPrivateValues default
    JobPrivateValues none
    JobPrivateValues attribute-name [ ... attribute-name ]
    Specifies the list of job values to make private. The "default" values are "job-name", "job-originating-host-name", "job-originating-user-name", and "phone".
    SubscriptionPrivateAccess all
    SubscriptionPrivateAccess default
    SubscriptionPrivateAccess {user|@group|@ACL|@OWNER|@SYSTEM} ...
    Specifies an access list for a subscription's private values. The "default" access list is "@OWNER @SYSTEM". "@ACL" maps to the printer's requesting-user-name-allowed or requesting-user-name-denied values. "@OWNER" maps to the job's owner. "@SYSTEM" maps to the groups listed for the SystemGroup directive in the cups-files.conf(5) file.
    SubscriptionPrivateValues all
    SubscriptionPrivateValues default
    SubscriptionPrivateValues none
    SubscriptionPrivateValues attribute-name [ ... attribute-name ]
    Specifies the list of subscription values to make private. The "default" values are "notify-events", "notify-pull-method", "notify-recipient-uri", "notify-subscriber-user-name", and "notify-user-data".

    Deprecated Directives

    The following directives are deprecated and will be removed in a future release of CUPS:
    Classification banner

    Specifies the security classification of the server. Any valid banner name can be used, including "classified", "confidential", "secret", "topsecret", and "unclassified", or the banner can be omitted to disable secure printing functions. The default is no classification banner.
    ClassifyOverride Yes
    ClassifyOverride No

    Specifies whether users may override the classification (cover page) of individual print jobs using the "job-sheets" option. The default is "No".
    PageLogFormat format-string
    Specifies the format of PageLog lines. Sequences beginning with percent (%) characters are replaced with the corresponding information, while all other characters are copied literally. The following percent sequences are recognized:
    
        "%%" inserts a single percent character.
        "%{name}" inserts the value of the specified IPP attribute.
        "%C" inserts the number of copies for the current page.
        "%P" inserts the current page number.
        "%T" inserts the current date and time in common log format.
        "%j" inserts the job ID.
        "%p" inserts the printer name.
        "%u" inserts the username.
    
    
    The default is the empty string, which disables page logging. The string "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}" creates a page log with the standard items.
    RIPCache size
    Specifies the maximum amount of memory to use when converting documents into bitmaps for a printer. The default is "128m".

    Conforming To

    The cupsd.conf file format is based on the Apache HTTP Server configuration file format.

    Examples

    Log everything with a maximum log file size of 32 megabytes:
    
        AccessLogLevel all
        LogLevel debug2
        MaxLogSize 32m
    
    
    Require authentication for accesses from outside the 10. network:
    
        <Location />
        Order allow,deny
        Allow from 10./8
        AuthType Basic
        Require valid-user
        Satisfy any
        </Location>
    

    See Also

    classes.conf(5), cups-files.conf(5), cupsd(8), mime.convs(5), mime.types(5), printers.conf(5), subscriptions.conf(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cupsd.html000664 000765 000024 00000007471 13255074424 017436 0ustar00msweetstaff000000 000000 cupsd(8)

    cupsd(8)

    Name

    cupsd - cups scheduler

    Synopsis

    cupsd [ -c cupsd.conf ] [ -f ] [ -F ] [ -h ] [ -l ] [ -s cups-files.conf ] [ -t ]

    Description

    cupsd is the scheduler for CUPS. It implements a printing system based upon the Internet Printing Protocol, version 2.1, and supports most of the requirements for IPP Everywhere. If no options are specified on the command-line then the default configuration file /etc/cups/cupsd.conf will be used.

    Options

    -c cupsd.conf
    Uses the named cupsd.conf configuration file.
    -f
    Run cupsd in the foreground; the default is to run in the background as a "daemon".
    -F
    Run cupsd in the foreground but detach the process from the controlling terminal and current directory. This is useful for running cupsd from init(8).
    -h
    Shows the program usage.
    -l
    This option is passed to cupsd when it is run from launchd(8) or systemd(8).
    -s cups-files.conf
    Uses the named cups-files.conf configuration file.
    -t
    Test the configuration file for syntax errors.

    Files

    /etc/cups/classes.conf
    /etc/cups/cups-files.conf
    /etc/cups/cupsd.conf
    /usr/share/cups/mime/mime.convs
    /usr/share/cups/mime/mime.types
    /etc/cups/printers.conf
    /etc/cups/subscriptions.conf
    

    Conforming To

    cupsd implements all of the required IPP/2.1 attributes and operations. It also implements several CUPS-specific administrative operations.

    Examples

    Run cupsd in the background with the default configuration file:
    
        cupsd
    
    
    Test a configuration file called test.conf:
    
        cupsd -t -c test.conf
    
    
    Run cupsd in the foreground with a test configuration file called test.conf:
    
        cupsd -f -c test.conf
    
    

    See Also

    backend(7), classes.conf(5), cups(1), cups-files.conf(5), cups-lpd(8), cupsd.conf(5), cupsd-helper(8), cupsd-logs(8), filter(7), launchd(8), mime.convs(5), mime.types(5), printers.conf(5), systemd(8), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cupsenable.html000664 000765 000024 00000006314 13255074424 020434 0ustar00msweetstaff000000 000000 cupsenable(8)

    cupsenable(8)

    Name

    cupsdisable, cupsenable - stop/start printers and classes

    Synopsis

    cupsdisable [ -E ] [ -U username ] [ -c ] [ -h server[:port] ] [ -r reason ] [ --hold ] destination(s)
    cupsenable [ -E ] [ -U username ] [ -c ] [ -h server[:port] ] [ --release ] destination(s)

    Description

    cupsenable starts the named printers or classes while cupsdisable stops the named printers or classes.

    Options

    The following options may be used:
    -E
    Forces encryption of the connection to the server.
    -U username
    Uses the specified username when connecting to the server.
    -c
    Cancels all jobs on the named destination.
    -h server[:port]
    Uses the specified server and port.
    --hold
    Holds remaining jobs on the named printer. Useful for allowing the current job to complete before performing maintenance.
    -r "reason"
    Sets the message associated with the stopped state. If no reason is specified then the message is set to "Reason Unknown".
    --release
    Releases pending jobs for printing. Use after running cupsdisable with the --hold option to resume printing.

    Conforming To

    Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", or "#". Also, printer and class names are not case-sensitive.

    The System V versions of these commands are disable and enable, respectively. They have been renamed to avoid conflicts with the bash(1) build-in commands of the same names.

    The CUPS versions of disable and enable may ask the user for an access password depending on the printing system configuration. This differs from the System V versions which require the root user to execute these commands.

    See Also

    cupsaccept(8), cupsreject(8), cancel(1), lp(1), lpadmin(8), lpstat(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cupsfilter.html000664 000765 000024 00000010540 13255074424 020467 0ustar00msweetstaff000000 000000 cupsfilter(8)

    cupsfilter(8)

    Name

    cupsfilter - convert a file to another format using cups filters

    Synopsis

    cupsfilter [ --list-filters ] [ -D ] [ -U user ] [ -c config-file ] [ -d printer ] [ -e ] [ -i mime/type ] [ -j job-id[,N] ] [ -m mime/type ] [ -n copies ] [ -o name=value ] [ -p filename.ppd ] [ -t title ] [ -u ] filename

    Description

    cupsfilter is a front-end to the CUPS filter subsystem which allows you to convert a file to a specific format, just as if you had printed the file through CUPS. By default, cupsfilter generates a PDF file. The converted file is sent to the standard output.

    Options

    --list-filters
    Do not actually run the filters, just print the filters used to stdout.
    -D
    Delete the input file after conversion.
    -U user
    Specifies the username passed to the filters. The default is the name of the current user.
    -c config-file
    Uses the named cups-files.conf configuration file.
    -d printer
    Uses information from the named printer.
    -e
    Use every filter from the PPD file.
    -i mime/type
    Specifies the source file type. The default file type is guessed using the filename and contents of the file.
    -j job-id[,N]
    Converts document N from the specified job. If N is omitted, document 1 is converted.
    -m mime/type
    Specifies the destination file type. The default file type is application/pdf. Use printer/foo to convert to the printer format defined by the filters in the PPD file.
    -n copies
    Specifies the number of copies to generate.
    -o name=value
    Specifies options to pass to the CUPS filters.
    -p filename.ppd
    Specifies the PPD file to use.
    -t title
    Specifies the document title.
    -u
    Delete the PPD file after conversion.

    Exit Status

    cupsfilter returns a non-zero exit status on any error.

    Environment

    All of the standard cups(1) environment variables affect the operation of cupsfilter.

    Files

    /etc/cups/cups-files.conf
    /etc/cups/*.convs
    /etc/cups/*.types
    /usr/share/cups/mime/*.convs
    /usr/share/cups/mime/*.types
    

    Notes

    Unlike when printing, filters run using the cupsfilter command use the current user and security session. This may result in different output or unexpected behavior.

    Example

    The following command will generate a PDF preview of job 42 for a printer named "myprinter" and save it to a file named "preview.pdf":
    
        cupsfilter -m application/pdf -d myprinter -j 42 >preview.pdf
    

    See Also

    cups(1), cupsd.conf(5), filter(7), mime.convs(7), mime.types(7), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cupstestdsc.html000664 000765 000024 00000003431 13255074424 020654 0ustar00msweetstaff000000 000000 cupstestdsc(1)

    cupstestdsc(1)

    Name

    cupstestdsc - test conformance of postscript files (deprecated)

    Synopsis

    cupstestdsc [ -h ] filename.ps [ ... filenameN.ps ]
    cupstestdsc [ -h ] -

    Description

    cupstestdsc tests the conformance of PostScript files to the Adobe PostScript Language Document Structuring Conventions Specification version 3.0. The results of testing and any other output are sent to the standard output. The second form of the command reads PostScript from the standard input.

    Notes

    This program is deprecated and will be removed in a future release of CUPS.

    cupstestdsc only validates the DSC comments in a PostScript file and does not attempt to validate the PostScript code itself. Developers must ensure that the PostScript they generate follows the rules defined by Adobe. Specifically, all pages must be independent of each other, code outside page descriptions may not affect the graphics state (current font, color, transform matrix, etc.), and device-specific commands such as setpagedevice should not be used.

    See Also

    CUPS Online Help (http://localhost:631/help), Adobe PostScript Language Document Structuring Conventions Specification, Version 3.0.

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-cupstestppd.html000664 000765 000024 00000011213 13255074424 020663 0ustar00msweetstaff000000 000000 cupstestppd(1)

    cupstestppd(1)

    Name

    cupstestppd - test conformance of ppd files

    Synopsis

    cupstestppd [ -I category ] [ -R rootdir ] [ -W category ] [ -q ] [ -r ] [ -v[v] ] filename.ppd[.gz] [ ... filename.ppd[.gz] ]
    cupstestppd [ -R rootdir ] [ -W category ] [ -q ] [ -r ] [ -v[v] ] -

    Description

    cupstestppd tests the conformance of PPD files to the Adobe PostScript Printer Description file format specification version 4.3. It can also be used to list the supported options and available fonts in a PPD file. The results of testing and any other output are sent to the standard output.

    The first form of cupstestppd tests one or more PPD files on the command-line. The second form tests the PPD file provided on the standard input.

    Options

    cupstestppd supports the following options:
    -I filename
    Ignores all PCFileName warnings.
    -I filters
    Ignores all filter errors.
    -I profiles
    Ignores all profile errors.
    -R rootdir
    Specifies an alternate root directory for the filter, pre-filter, and other support file checks.
    -W constraints
    Report all UIConstraint errors as warnings.
    -W defaults
    Except for size-related options, report all default option errors as warnings.
    -W filters
    Report all filter errors as warnings.
    -W profiles
    Report all profile errors as warnings.
    -W sizes
    Report all media size errors as warnings.
    -W translations
    Report all translation errors as warnings.
    -W all
    Report all of the previous errors as warnings.
    -W none
    Report all of the previous errors as errors.
    -q
    Specifies that no information should be displayed.
    -r
    Relaxes the PPD conformance requirements so that common whitespace, control character, and formatting problems are not treated as hard errors.
    -v
    Specifies that detailed conformance testing results should be displayed rather than the concise PASS/FAIL/ERROR status.
    -vv
    Specifies that all information in the PPD file should be displayed in addition to the detailed conformance testing results.

    The -q, -v, and -vv options are mutually exclusive.

    Exit Status

    cupstestppd returns zero on success and non-zero on error. The error codes are as follows:
    1
    Bad command-line arguments or missing PPD filename.
    2
    Unable to open or read PPD file.
    3
    The PPD file contains format errors that cannot be skipped.
    4
    The PPD file does not conform to the Adobe PPD specification.

    Examples

    The following command will test all PPD files under the current directory and print the names of each file that does not conform:
    
        find . -name \*.ppd \! -exec cupstestppd -q '{}' \; -print
    
    
    The next command tests all PPD files under the current directory and print detailed conformance testing results for the files that do not conform:
    
        find . -name \*.ppd \! -exec cupstestppd -q '{}' \; \
            -exec cupstestppd -v '{}' \;
    

    See Also

    lpadmin(8), CUPS Online Help (http://localhost:631/help), Adobe PostScript Printer Description File Format Specification, Version 4.3.

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-filter.html000664 000765 000024 00000026670 13255074424 017607 0ustar00msweetstaff000000 000000 filter(7)

    filter(7)

    Name

    filter - cups file conversion filter interface

    Synopsis

    filter job user title num-copies options [ filename ]
    
    #include <cups/cups.h>
    
    ssize_t cupsBackChannelRead(char *buffer, size_t bytes,
                                double timeout);
    
    cups_sc_status_t cupsSideChannelDoRequest(cups_sc_command_t command,
                                              char *data, int *datalen,
                                              double timeout);
    
    #include <cups/ppd.h>
    
    const char *cupsGetOption(const char *name, int num_options,
                     cups_option_t *options);
    
    int cupsMarkOptions(ppd_file_t *ppd, int num_options,
                        cups_option_t *options);
    
    int cupsParseOptions(const char *arg, int num_options,
                         cups_option_t **options);
    
    ppd_choice_t *ppdFindMarkedChoice(ppd_file_t *ppd, const char *keyword);
    
    void ppdMarkDefaults(ppd_file_t *ppd);
    
    ppd_file_t *ppdOpenFile(const char *filename);
    

    Description

    The CUPS filter interface provides a standard method for adding support for new document types or printers to CUPS. Each filter is capable of converting from one or more input formats to another format that can either be printed directly or piped into another filter to get it to a printable format.

    Filters MUST be capable of reading from a filename on the command-line or from the standard input, copying the standard input to a temporary file as required by the file format. All output MUST be sent to the standard output. Filters MUST NOT attempt to communicate directly with the printer, other processes, or other services.

    The command name (argv[0]) is set to the name of the destination printer but is also available in the PRINTER environment variable.

    Options

    Options are passed in argv[5] and are encoded from the corresponding IPP attributes used when the job was submitted. Use the cupsParseOptions() function to load the options into a cups_option_t array and the cupsGetOption() function to get the value of a specific attribute. Be careful to look for common aliases of IPP attributes such as "landscape" for the IPP "orientation-requested" attribute.

    Options passed on the command-line typically do not include the default choices the printer's PPD file. Use the ppdMarkDefaults() and cupsMarkOptions() functions in the CUPS library to apply the options to the PPD defaults and map any IPP attributes to the corresponding PPD options. Use ppdFindMarkedChoice() to get the user-selected choice for a PPD option. For example, a filter might use the following code to determine the current value of the Duplex PPD option:

    
        ppd_file_t *ppd = ppdOpenFile(getenv("PPD"));
        cups_option_t *options = NULL;
        int num_options = cupsParseOptions(argv[5], 0, &options);
    
        ppdMarkDefaults(ppd);
        cupsMarkOptions(ppd, num_options, options);
    
        ppd_choice_t *choice = ppdFindMarkedChoice(ppd, "Duplex");
    

    Raster filters should use option choices set through the raster page header, as those reflect the options in effect for a given page. Options specified on the command-line determine the default values for the entire job, which can be overridden on a per-page basis.

    Log Messages

    Messages sent to the standard error are generally stored in the printer's "printer-state-message" attribute and the current ErrorLog file. Each line begins with a standard prefix:
    ALERT: message
    Sets the "printer-state-message" attribute and adds the specified message to the current ErrorLog using the "alert" log level.
    ATTR: attribute=value [ ... attribute=value]
    Sets the named job or printer attribute(s). The following job attributes can be set: "job-media-progress". The following printer attributes can be set: "auth-info-required", "marker-colors", "marker-high-levels", "marker-levels", "marker-low-levels", "marker-message", "marker-names", "marker-types", "printer-alert", and "printer-alert-description".
    CRIT: message
    Sets the "printer-state-message" attribute and adds the specified message to the current ErrorLog using the "critical" log level.
    DEBUG: message
    Adds the specified message to the current ErrorLog using the "debug" log level. DEBUG messages are never stored in the "printer-state-message" attribute.
    DEBUG2: message

    Adds the specified message to the current ErrorLog using the "debug2" log level. DEBUG2 messages are never stored in the "printer-state-message" attribute.
    EMERG: message
    Sets the "printer-state-message" attribute and adds the specified message to the current ErrorLog using the "emergency" log level.
    ERROR: message
    Sets the "printer-state-message" attribute and adds the specified message to the current ErrorLog using the "error" log level.
    INFO: message
    Sets the "printer-state-message" attribute. If the current LogLevel is set to "debug2", also adds the specified message to the current ErrorLog using the "info" log level.
    NOTICE: message
    Sets the "printer-state-message" attribute and adds the specified message to the current ErrorLog using the "notice" log level.
    PAGE: page-number #-copies
    PAGE: total #-pages
    Adds an entry to the current PageLog. The first form adds #-copies to the "job-media-sheets-completed" attribute. The second form sets the "job-media-sheets-completed" attribute to #-pages.
    PPD: Keyword=Value [ ... KeywordN=Value ]
    Sets the named keywords in the printer's PPD file. This is typically used to update default option keywords such as DefaultPageSize and the various installable options in the PPD file.
    STATE: printer-state-reason [ ... printer-state-reason ]
    STATE: + printer-state-reason [ ... printer-state-reason ]
    STATE: - printer-state-reason [ ... printer-state-reason ]
    Sets, adds, or removes "printer-state-reason" keywords for the current queue. Typically this is used to indicate media, ink, and toner conditions on a printer.
    WARNING: message
    Sets the "printer-state-message" attribute and adds the specified message to the current ErrorLog using the "warning" log level.

    Environment Variables

    The following environment variables are defined by the CUPS server when executing the filter:
    CHARSET
    The default text character set, typically "utf-8".
    CLASS
    When a job is submitted to a printer class, contains the name of the destination printer class. Otherwise this environment variable will not be set.
    CONTENT_TYPE
    The MIME media type associated with the submitted job file, for example "application/postscript".
    CUPS_CACHEDIR
    The directory where semi-persistent cache files can be found and stored.
    CUPS_DATADIR
    The directory where data files can be found.
    CUPS_FILETYPE
    The type of file being printed: "job-sheet" for a banner page and "document" for a regular print file.
    CUPS_MAX_MESSAGE
    The maximum size of a message sent to stderr, including any leading prefix and the trailing newline.
    CUPS_SERVERROOT
    The root directory of the server.
    FINAL_CONTENT_TYPE
    The MIME media type associated with the output destined for the printer, for example "application/vnd.cups-postscript".
    LANG
    The default language locale (typically C or en).
    PATH
    The standard execution path for external programs that may be run by the filter.
    PPD
    The full pathname of the PostScript Printer Description (PPD) file for this printer.
    PRINTER
    The name of the printer.
    RIP_CACHE
    The recommended amount of memory to use for Raster Image Processors (RIPs).
    SOFTWARE
    The name and version number of the server (typically CUPS/major.minor).
    TZ
    The timezone of the server.
    USER
    The user executing the filter, typically "lp" or "root"; consult the cups-files.conf file for the current setting.

    Conforming To

    While the filter interface is compatible with System V interface scripts, CUPS does not support System V interface scripts.

    Notes

    CUPS filters are not meant to be run directly by the user. Aside from the legacy System V interface issues (argv[0] is the printer name), CUPS filters also expect specific environment variables and file descriptors, and typically run in a user session that (on macOS) has additional restrictions that affect how it runs. Unless you are a developer and know what you are doing, please do not run filters directly. Instead, use the cupsfilter(8) program to use the appropriate filters to do the conversions you need.

    See Also

    backend(7), cups(1), cups-files.conf(5), cupsd(8), cupsfilter(8),
    CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-ippfind.html000664 000765 000024 00000023134 13255074424 017743 0ustar00msweetstaff000000 000000 ippfind(1)

    ippfind(1)

    Name

    ippfind - find internet printing protocol printers

    Synopsis

    ippfind [ options ] regtype[,subtype][.domain.] ... [ expression ... ]
    ippfind [ options ] name[.regtype[.domain.]] ... [ expression ... ]
    ippfind --help
    ippfind --version

    Description

    ippfind finds services registered with a DNS server or available through local devices. Its primary purpose is to find IPP printers and show their URIs, show their current status, or run commands.

    Registration Types

    ippfind supports the following registration types:
    _http._tcp
    HyperText Transport Protocol (HTTP, RFC 2616)
    _https._tcp
    Secure HyperText Transport Protocol (HTTPS, RFC 2818)
    _ipp._tcp
    Internet Printing Protocol (IPP, RFC 2911)
    _ipps._tcp
    Secure Internet Printing Protocol (IPPS, draft)
    _printer._tcp
    Line Printer Daemon (LPD, RFC 1179)

    Expressions

    ippfind supports expressions much like the find(1) utility. However, unlike find(1), ippfind uses POSIX regular expressions instead of shell filename matching patterns. If --exec, -l, --ls, -p, --print, --print-name, -q, --quiet, -s, or -x is not specified, ippfind adds --print to print the service URI of anything it finds. The following expressions are supported:
    -d regex
    --domain regex
    True if the domain matches the given regular expression.
    --false
    Always false.
    -h regex
    --host regex
    True is the hostname matches the given regular expression.
    -l
    --ls
    Lists attributes returned by Get-Printer-Attributes for IPP printers and traditional find "-ls" output for HTTP URLs. The result is true if the URI is accessible, false otherwise.
    --local
    True if the service is local to this computer.
    -n regex
    --name regex
    True if the service instance name matches the given regular expression.
    --path regex
    True if the URI resource path matches the given regular expression.
    -P number[-number]
    --port number[-number]
    True if the port matches the given number or range.
    -p
    --print
    Prints the URI if the result of previous expressions is true. The result is always true.
    -q
    --quiet
    Quiet mode - just returns the exit codes below.
    -r
    --remote
    True if the service is not local to this computer.
    -s
    --print-name
    Prints the service instance name if the result of previous expressions is true. The result is always true.
    --true
    Always true.
    -t key
    --txt key
    True if the TXT record contains the named key.
    --txt-key regex
    True if the TXT record contains the named key and matches the given regular expression.
    -u regex
    --uri regex
    True if the URI matches the given regular expression.
    -x utility [ argument ... ] ;
    --exec utility [ argument ... ] ;
    Executes the specified program if the current result is true. "{foo}" arguments are replaced with the corresponding value - see SUBSTITUTIONS below.

    Expressions may also contain modifiers:

    ( expression )
    Group the result of expressions.
    ! expression
    --not expression
    Unary NOT of the expression.
    expression expression
    expression --and expression
    Logical AND of expressions.
    expression --or expression
    Logical OR of expressions.

    Substitutions

    The substitutions for "{foo}" in -e and --exec are:
    {service_domain}
    Domain name, e.g., "example.com.", "local.", etc.
    {service_hostname}
    Fully-qualified domain name, e.g., "printer.example.com.", "printer.local.", etc.
    {service_name}
    Service instance name, e.g., "My Fine Printer".
    {service_port}
    Port number for server, typically 631 for IPP and 80 for HTTP.
    {service_regtype}
    DNS-SD registration type, e.g., "_ipp._tcp", "_http._tcp", etc.
    {service_scheme}
    URI scheme for DNS-SD registration type, e.g., "ipp", "http", etc.
    {}
    {service_uri}
    URI for service, e.g., "ipp://printer.local./ipp/print", "http://printer.local./", etc.
    {txt_key}
    Value of TXT record key (lowercase).

    Options

    ippfind supports the following options:
    --help
    Show program help.
    --version
    Show program version.
    -4
    Use IPv4 when listing.
    -6
    Use IPv6 when listing.
    -T seconds
    Specify find timeout in seconds. If 1 or less, ippfind stops as soon as it thinks it has found everything. The default timeout is 1 second.
    -V version
    Specifies the IPP version when listing. Supported values are "1.1", "2.0", "2.1", and "2.2".

    Exit Status

    ippfind returns 0 if the result for all processed expressions is true, 1 if the result of any processed expression is false, 2 if browsing or any query or resolution failed, 3 if an undefined option or invalid expression was specified, and 4 if it ran out of memory.

    Environment

    When executing a program, ippfind sets the following environment variables for the matching service registration:
    IPPFIND_SERVICE_DOMAIN
    Domain name, e.g., "example.com.", "local.", etc.
    IPPFIND_SERVICE_HOSTNAME
    Fully-qualified domain name, e.g., "printer.example.com.", "printer.local.", etc.
    IPPFIND_SERVICE_NAME
    Service instance name, e.g., "My Fine Printer".
    IPPFIND_SERVICE_PORT
    Port number for server, typically 631 for IPP and 80 for HTTP.
    IPPFIND_SERVICE_REGTYPE
    DNS-SD registration type, e.g., "_ipp._tcp", "_http._tcp", etc.
    IPPFIND_SERVICE_SCHEME
    URI scheme for DNS-SD registration type, e.g., "ipp", "http", etc.
    IPPFIND_SERVICE_URI
    URI for service, e.g., "ipp://printer.local./ipp/print", "http://printer.local./", etc.
    IPPFIND_TXT_fIKEYfR
    Values of TXT record KEY (uppercase).

    Examples

    To show the status of all registered IPP printers on your network, run:
    
        ippfind --ls
    
    
    Similarly, to send a PostScript test page to every PostScript printer, run:
    
        ippfind --txt-pdl application/postscript --exec ipptool
          -f onepage-letter.ps '{}' print-job.test \;
    

    See Also

    ipptool(1)

    Copyright

    Copyright © 2013-2015 by Apple Inc. cups-2.2.7/doc/help/man-ipptool.html000664 000765 000024 00000016663 13255074424 020011 0ustar00msweetstaff000000 000000 ipptool(1)

    ipptool(1)

    Name

    ipptool - perform internet printing protocol requests

    Synopsis

    ipptool [ --help ] [ --stop-after-include-error ] [ --version ] [ -4 ] [ -6 ] [ -C ] [ -E ] [ -I ] [ -L ] [ -P filename.plist ] [ -S ] [ -T seconds ] [ -V version ] [ -X ] [ -c ] [ -d name=value ] [ -f filename ] [ -h ] [ -i seconds ] [ -n repeat-count ] [ -q ] [ -t ] [ -v] printer-uri testfile [ ... testfile ]

    Description

    ipptool sends IPP requests to the specified printer-uri and tests and/or displays the results. Each named testfile defines one or more requests, including the expected response status, attributes, and values. Output is either a plain text, formatted text, CSV, or XML report on the standard output, with a non-zero exit status indicating that one or more tests have failed. The testfile format is described in ipptoolfile(5).

    Options

    The following options are recognized by ipptool:
    --help
    Shows program help.
    --stop-after-include-error
    Tells ipptool to stop if an error occurs in an included file. Normally ipptool will continue with subsequent tests after the INCLUDE directive.
    --version
    Shows the version of ipptool being used.
    -4
    Specifies that ipptool must connect to the printer or server using IPv4.
    -6
    Specifies that ipptool must connect to the printer or server using IPv6.
    -C
    Specifies that requests should be sent using the HTTP/1.1 "Transfer-Encoding: chunked" header, which is required for conformance by all versions of IPP. The default is to use "Transfer-Encoding: chunked" for requests with attached files and "Content-Length:" for requests without attached files.
    -E
    Forces TLS encryption when connecting to the server using the HTTP "Upgrade" header.
    -I
    Specifies that ipptool will continue past errors.
    -L
    Specifies that requests should be sent using the HTTP/1.0 "Content-Length:" header, which is required for conformance by all versions of IPP. The default is to use "Transfer-Encoding: chunked" for requests with attached files and "Content-Length:" for requests without attached files.
    -P filename.plist
    Specifies that the test results should be written to the named XML (Apple plist) file in addition to the regular test report (-t). This option is incompatible with the -i (interval) and -n (repeat-count) options.
    -S
    Forces (dedicated) TLS encryption when connecting to the server.
    -T seconds
    Specifies a timeout for IPP requests in seconds.
    -V version
    Specifies the default IPP version to use: 1.0, 1.1, 2.0, 2.1, or 2.2. If not specified, version 1.1 is used.
    -X
    Specifies that XML (Apple plist) output is desired instead of the plain text report. This option is incompatible with the -i (interval) and -n (repeat-count) options.
    -c
    Specifies that CSV (comma-separated values) output is desired instead of the plain text output.
    -d name=value
    Defines the named variable.
    -f filename
    Defines the default request filename for tests.
    -h
    Validate HTTP response headers.
    -i seconds
    Specifies that the (last) testfile should be repeated at the specified interval. This option is incompatible with the -X (XML plist output) option.
    -l
    Specifies that plain text output is desired.
    -n repeat-count
    Specifies that the (last) testfile should be repeated the specified number of times. This option is incompatible with the -X (XML plist output) option.
    -q
    Be quiet and produce no output.
    -t
    Specifies that CUPS test report output is desired instead of the plain text output.
    -v
    Specifies that all request and response attributes should be output in CUPS test mode (-t). This is the default for XML output.

    Exit Status

    The ipptool program returns 0 if all tests were successful and 1 otherwise.

    Files

    The following standard files are available:
    color.jpg
    create-printer-subscription.test
    document-a4.pdf
    document-a4.ps
    document-letter.pdf
    document-letter.ps
    get-completed-jobs.test
    get-jobs.test
    get-notifications.test
    get-printer-attributes.test
    get-subscriptions.test
    gray.jpg
    ipp-1.1.test
    ipp-2.0.test
    ipp-2.1.test
    ipp-2.2.test
    ipp-everywhere.test
    onepage-a4.pdf
    onepage-a4.ps
    onepage-letter.pdf
    onepage-letter.ps
    print-job.test
    print-job-deflate.test
    print-job-gzip.test
    testfile.jpg
    testfile.pcl
    testfile.pdf
    testfile.ps
    testfile.txt
    validate-job.test
    

    Conforming To

    The ipptool program is unique to CUPS and conforms to the Internet Printing Protocol up to version 2.2.

    Examples

    Get a list of completed jobs for "myprinter":
    
        ipptool ipp://localhost/printers/myprinter get-completed-jobs.test
    

    Send email notifications to "user@example.com" when "myprinter" changes:

    
        ipptool -d recipient=mailto:user@example.com \
            ipp://localhost/printers/myprinter create-printer-subscription.test
    

    See Also

    ipptoolfile(5), IANA IPP Registry (http://www.iana.org/assignments/ipp\-registrations), PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp) RFC 8011 (http://tools.ietf.org/html/rfc8011),

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-ipptoolfile.html000664 000765 000024 00000070123 13255074424 020640 0ustar00msweetstaff000000 000000 ipptoolfile(5)

    ipptoolfile(5)

    Name

    ipptoolfile - ipptool file format

    Description

    The ipptool(1) program accepts free-form plain text files that describe one or more IPP requests. Comments start with the "#" character and continue to the end of the line. Each request is enclosed by curly braces, for example:
    
        # This is a comment
        {
          # The name of the test
          NAME "Print PDF File"
    
          # The request to send
          OPERATION Print-Job
    
          GROUP operation-attributes-tag
          ATTR charset attributes-charset utf-8
          ATTR language attributes-natural-language en
          ATTR uri printer-uri $uri
          ATTR name requesting-user-name $user
          ATTR mimeMediaType document-format application/pdf
    
          GROUP job-attributes-tag
          ATTR collection media-col {
            # US Letter plain paper from the "main" tray
            MEMBER collection media-size {
              MEMBER integer x-dimension 21590
              MEMBER integer y-dimension 27940
            }
            MEMBER integer media-top-margin 423
            MEMBER integer media-bottom-margin 423
            MEMBER integer media-left-margin 423
            MEMBER integer media-right-margin 423
            MEMBER keyword media-source "main"
            MEMBER keyword media-type "stationery"
          }
    
          FILE testfile.pdf
    
          # The response to expect
          STATUS successful-ok
          EXPECT job-id OF-TYPE integer WITH-VALUE >0
          EXPECT job-uri OF-TYPE uri
        }
        {
          # The name of the test
          NAME "Wait for Job to Complete"
    
          # The request to send
          OPERATION Get-Job-Attributes
    
          GROUP operation-attributes-tag
          ATTR charset attributes-charset utf-8
          ATTR language attributes-natural-language en
          ATTR uri printer-uri $uri
          ATTR integer job-id $job-id
          ATTR name requesting-user-name $user
    
          # The response to expect
          STATUS successful-ok
          EXPECT job-id OF-TYPE integer WITH-VALUE $job-id
          EXPECT job-uri OF-TYPE uri
          EXPECT job-state OF-TYPE enum WITH-VALUE >5 REPEAT-NO-MATCH
          EXPECT job-originating-user-name OF-TYPE name WITH-VALUE "$user"
    
          # Show the job state until completed...
          DISPLAY job-state
          DISPLAY job-state-reasons
        }
    

    Top-level Directives

    The following directives can be used outside of a test:
    { test }
    Defines a test.
    DEFINE variable-name value
    Defines the named variable to the given value. This is equivalent to specifying -d variable-name=value on the ipptool(8) command-line.
    DEFINE-DEFAULT variable-name value
    Defines the named variable to the given value if it does not already have a value.
    FILE-ID "identifier"
    Specifies an identifier string for the current file.
    IGNORE-ERRORS yes
    IGNORE-ERRORS no
    Specifies whether, by default, ipptool(8) will ignore errors and continue with subsequent tests.
    INCLUDE "filename"
    INCLUDE <filename>
    Includes another test file. The first form includes a file relative to the current test file, while the second form includes a file from the ipptool(8) include directory.
    INCLUDE-IF-DEFINED name "filename"
    INCLUDE-IF-DEFINED name <filename>
    Includes another test file if the named variable is defined. The first form includes a file relative to the current test file, while the second form includes a file from the ipptool(8) include directory.
    INCLUDE-IF-NOT-DEFINED name "filename"
    INCLUDE-IF-NOT-DEFINED name <filename>
    Includes another test file if the named variable is not defined. The first form includes a file relative to the current test file, while the second form includes a file from the ipptool(8) include directory.
    SKIP-IF-DEFINED variable-name
    SKIP-IF-NOT-DEFINED variable-name
    Specifies that the remainder of the test file should be skipped when the variable is or is not defined.
    STOP-AFTER-INCLUDE-ERROR no
    STOP-AFTER-INCLUDE-ERROR yes
    Specifies whether tests will be stopped after an error in an included file.
    TRANSFER auto
    Specifies that tests will, by default, use "Transfer-Encoding: chunked" for requests with attached files and "Content-Length:" for requests without attached files.
    TRANSFER chunked
    Specifies that tests will, by default, use the HTTP/1.1 "Transfer-Encoding: chunked" header. This is the default and is equivalent to specifying -c on the ipptool(8) command-line. Support for chunked requests is required for conformance with all versions of IPP.
    TRANSFER length
    Specifies that tests will, by default, use the HTTP/1.0 "Content-Length:" header. This is equivalent to specifying -l on the ipptool(8) command-line. Support for content length requests is required for conformance with all versions of IPP.
    VERSION 1.0
    VERSION 1.1
    VERSION 2.0
    VERSION 2.1
    VERSION 2.2
    Specifies the default IPP version number to use for the tests that follow.

    Test Directives

    The following directives are understood within a test:
    ATTR out-of-band-tag attribute-name
    ATTR tag attribute-name value(s)
    Adds an attribute to the test request. Out-of-band tags (admin-define, delete-attribute, no-value, not-settable, unknown, unsupported) have no value. Values for other tags are separated by the comma (",") character - escape commas using the "" character. Common attributes and values are listed in the IANA IPP registry - see references below.
    ATTR collection attribute-name { MEMBER tag member-name value(s) ... } [ ... ,{ ... } ]
    Adds a collection attribute to the test request. Member attributes follow the same syntax as regular attributes and can themselves be nested collections. Multiple collection values can be supplied as needed, separated by commas.
    COMPRESSION deflate
    COMPRESSION gzip
    COMPRESSION none
    Uses the specified compression on the document data following the attributes in a Print-Job or Send-Document request.
    DELAY seconds[,repeat-seconds]
    Specifies a delay in seconds before this test will be run. If two values are specified, the second value is used as the delay between repeated tests.
    DISPLAY attribute-name
    Specifies that value of the named attribute should be output as part of the test report.
    EXPECT attribute-name [ predicate(s) ]
    EXPECT ?attribute-name predicate(s)
    EXPECT !attribute-name
    Specifies that the response must/may/must not include the named attribute. Additional requirements can be added as predicates - see the "EXPECT PREDICATES" section for more information on predicates. Attribute names can specify member attributes by separating the attribute and member names with the forward slash, for example "media-col/media-size/x-dimension".
    EXPECT-ALL attribute-name [ predicate(s) ]
    EXPECT-ALL ?attribute-name predicate(s)
    Specifies that the response must/may include the named attribute and that all occurrences of that attribute must match the given predicates.
    FILE filename
    Specifies a file to include at the end of the request. This is typically used when sending a test print file.
    GROUP tag
    Specifies the group tag for subsequent attributes in the request.
    IGNORE-ERRORS yes
    IGNORE-ERRORS no
    Specifies whether ipptool(8) will ignore errors and continue with subsequent tests.
    NAME "literal string"
    Specifies the human-readable name of the test.
    OPERATION operation-code
    Specifies the operation to be performed.
    PAUSE "message"
    Displays the provided message and waits for the user to press a key to continue.
    REQUEST-ID number
    REQUEST-ID random
    Specifies the request-id value to use in the request, either an integer or the word "random" to use a randomly generated value (the default).
    RESOURCE path
    Specifies an alternate resource path that is used for the HTTP POST request. The default is the resource from the URI provided to the ipptool(8) program.
    SKIP-IF-DEFINED variable-name
    SKIP-IF-NOT-DEFINED variable-name
    Specifies that the current test should be skipped when the variable is or is not defined.
    SKIP-PREVIOUS-ERROR yes
    SKIP-PREVIOUS-ERROR no
    Specifies whether ipptool(8) will skip the current test if the previous test resulted in an error/failure.
    STATUS status-code [ predicate ]
    Specifies an expected response status-code value. Additional requirements can be added as predicates - see the "STATUS PREDICATES" section for more information on predicates.
    TEST-ID "identifier"
    Specifies an identifier string for the current test.
    TRANSFER auto
    Specifies that this test will use "Transfer-Encoding: chunked" if it has an attached file or "Content-Length:" otherwise.
    TRANSFER chunked
    Specifies that this test will use the HTTP/1.1 "Transfer-Encoding: chunked" header.
    TRANSFER length
    Specifies that this test will use the HTTP/1.0 "Content-Length:" header.
    VERSION 1.0
    VERSION 1.1
    VERSION 2.0
    VERSION 2.1
    VERSION 2.2
    Specifies the IPP version number to use for this test.

    Expect Predicates

    The following predicates are understood following the EXPECT test directive:
    COUNT number
    Requires the EXPECT attribute to have the specified number of values.
    DEFINE-MATCH variable-name
    Defines the variable to "1" when the EXPECT condition matches. A side-effect of this predicate is that this EXPECT will never fail a test.
    DEFINE-NO-MATCH variable-name
    Defines the variable to "1" when the EXPECT condition does not match. A side-effect of this predicate is that this EXPECT will never fail a test.
    DEFINE-VALUE variable-name
    Defines the variable to the value of the attribute when the EXPECT condition matches. A side-effect of this predicate is that this EXPECT will never fail a test.
    IF-DEFINED variable-name
    Makes the EXPECT conditions apply only if the specified variable is defined.
    IF-NOT-DEFINED variable-name
    Makes the EXPECT conditions apply only if the specified variable is not defined.
    IN-GROUP tag
    Requires the EXPECT attribute to be in the specified group tag.
    OF-TYPE tag[,tag,...]
    Requires the EXPECT attribute to use one of the specified value tag(s).
    REPEAT-LIMIT number

    Specifies the maximum number of times to repeat if the REPEAT-MATCH or REPEAT-NO-MATCH predicate is specified. The default value is 1000.
    REPEAT-MATCH
    REPEAT-NO-MATCH
    Specifies that the current test should be repeated when the EXPECT condition matches or does not match.
    SAME-COUNT-AS attribute-name
    Requires the EXPECT attribute to have the same number of values as the specified parallel attribute.
    WITH-ALL-HOSTNAMES "literal string"
    WITH-ALL-HOSTNAMES "/regular expression/"
    Requires that all URI values contain a matching hostname.
    WITH-ALL-RESOURCES "literal string"
    WITH-ALL-RESOURCES "/regular expression/"
    Requires that all URI values contain a matching resource (including leading /).
    WITH-ALL-SCHEMES "literal string"
    WITH-ALL-SCHEMES "/regular expression/"
    Requires that all URI values contain a matching scheme.
    WITH-ALL-VALUES "literal string"
    Requires that all values of the EXPECT attribute match the literal string. Comparisons are case-sensitive.
    WITH-ALL-VALUES <number
    WITH-ALL-VALUES =number
    WITH-ALL-VALUES >number
    WITH-ALL-VALUES number[,...,number]
    Requires that all values of the EXPECT attribute match the number(s) or numeric comparison. When comparing rangeOfInteger values, the "<" and ">" operators only check the upper bound of the range.
    WITH-ALL-VALUES "false"
    WITH-ALL-VALUES "true"
    Requires that all values of the EXPECT attribute match the boolean value given.
    WITH-ALL-VALUES "/regular expression/"
    Requires that all values of the EXPECT attribute match the regular expression, which must conform to the POSIX regular expression syntax. Comparisons are case-sensitive.
    WITH-HOSTNAME "literal string"
    WITH-HOSTNAME "/regular expression/"
    Requires that at least one URI value contains a matching hostname.
    WITH-RESOURCE "literal string"
    WITH-RESOURCE "/regular expression/"
    Requires that at least one URI value contains a matching resource (including leading /).
    WITH-SCHEME "literal string"
    WITH-SCHEME "/regular expression/"
    Requires that at least one URI value contains a matching scheme.
    WITH-VALUE "literal string"
    Requires that at least one value of the EXPECT attribute matches the literal string. Comparisons are case-sensitive.
    WITH-VALUE <number
    WITH-VALUE =number
    WITH-VALUE >number
    WITH-VALUE number[,...,number]
    Requires that at least one value of the EXPECT attribute matches the number(s) or numeric comparison. When comparing rangeOfInteger values, the "<" and ">" operators only check the upper bound of the range.
    WITH-VALUE "false"
    WITH-VALUE "true"
    Requires that at least one value of the EXPECT attribute matches the boolean value given.
    WITH-VALUE "/regular expression/"
    Requires that at least one value of the EXPECT attribute matches the regular expression, which must conform to the POSIX regular expression syntax. Comparisons are case-sensitive.
    WITH-VALUE-FROM attribute-name
    Requires that the value(s) of the EXPECT attribute matches the value(s) in the specified attribute. For example, "EXPECT job-sheets WITH-VALUE-FROM job-sheets-supported" requires that the "job-sheets" value is listed as a value of the "job-sheets-supported" attribute.

    Status Predicates

    The following predicates are understood following the STATUS test directive:
    DEFINE-MATCH variable-name
    Defines the variable to "1" when the STATUS matches. A side-effect of this predicate is that this STATUS will never fail a test.
    DEFINE-NO-MATCH variable-name
    Defines the variable to "1" when the STATUS does not match. A side-effect of this predicate is that this STATUS will never fail a test.
    IF-DEFINED variable-name
    Makes the STATUS apply only if the specified variable is defined.
    IF-NOT-DEFINED variable-name
    Makes the STATUS apply only if the specified variable is not defined.
    REPEAT-LIMIT number

    Specifies the maximum number of times to repeat. The default value is 1000.
    REPEAT-MATCH
    REPEAT-NO-MATCH
    Specifies that the current test should be repeated when the response status-code matches or does not match the value specified by the STATUS directive.

    Operation Codes

    Operation codes correspond to the hexadecimal numbers (0xHHHH) and names from RFC 8011 and other IPP extension specifications. Here is a complete list of names supported by ipptool(8):
    
        Activate-Printer
        CUPS-Accept-Jobs
        CUPS-Add-Modify-Class
        CUPS-Add-Modify-Printer
        CUPS-Authenticate-Job
        CUPS-Delete-Class
        CUPS-Delete-Printer
        CUPS-Get-Classes
        CUPS-Get-Default
        CUPS-Get-Devices
        CUPS-Get-Document
        CUPS-Get-PPD
        CUPS-Get-PPDs
        CUPS-Get-Printers
        CUPS-Move-Job
        CUPS-Reject-Jobs
        CUPS-Set-Default
        Cancel-Current-Job
        Cancel-Job
        Cancel-Jobs
        Cancel-My-Jobs
        Cancel-Subscription
        Close-Job
        Create-Job
        Create-Job-Subscriptions
        Create-Printer-Subscriptions
        Deactivate-Printer
        Disable-Printer
        Enable-Printer
        Get-Job-Attributes
        Get-Jobs
        Get-Notifications
        Get-Printer-Attributes
        Get-Printer-Support-Files
        Get-Printer-Supported-Values
        Get-Subscription-Attributes
        Get-Subscriptions
        Hold-Job
        Hold-New-Jobs
        Identify-Printer
        Pause-Printer
        Pause-Printer-After-Current-Job
        Print-Job
        Print-URI
        Promote-Job
        Purge-Jobs
        Release-Held-New-Jobs
        Release-Job
        Renew-Subscription
        Reprocess-Job
        Restart-Job
        Restart-Printer
        Resubmit-Job
        Resume-Job
        Resume-Printer
        Schedule-Job-After
        Send-Document
        Send-Hardcopy-Document
        Send-Notifications
        Send-URI
        Set-Job-Attributes
        Set-Printer-Attributes
        Shutdown-Printer
        Startup-Printer
        Suspend-Current-Job
        Validate-Document
        Validate-Job
    

    Status Codes

    Status codes correspond to the hexadecimal numbers (0xHHHH) and names from RFC 8011 and other IPP extension specifications. Here is a complete list of the names supported by ipptool(8):
    
        client-error-account-authorization-failed
        client-error-account-closed
        client-error-account-info-needed
        client-error-account-limit-reached
        client-error-attributes-not-settable
        client-error-attributes-or-values-not-supported
        client-error-bad-request
        client-error-charset-not-supported
        client-error-compression-error
        client-error-compression-not-supported
        client-error-conflicting-attributes
        client-error-document-access-error
        client-error-document-format-error
        client-error-document-format-not-supported
        client-error-document-password-error
        client-error-document-permission-error
        client-error-document-security-error
        client-error-document-unprintable-error
        client-error-forbidden
        client-error-gone
        client-error-ignored-all-notifications
        client-error-ignored-all-subscriptions
        client-error-not-authenticated
        client-error-not-authorized
        client-error-not-found
        client-error-not-possible
        client-error-print-support-file-not-found
        client-error-request-entity-too-large
        client-error-request-value-too-long
        client-error-timeout
        client-error-too-many-subscriptions
        client-error-uri-scheme-not-supported
        cups-error-account-authorization-failed
        cups-error-account-closed
        cups-error-account-info-needed
        cups-error-account-limit-reached
        cups-see-other
        redirection-other-site
        server-error-busy
        server-error-device-error
        server-error-internal-error
        server-error-job-canceled
        server-error-multiple-document-jobs-not-supported
        server-error-not-accepting-jobs
        server-error-operation-not-supported
        server-error-printer-is-deactivated
        server-error-service-unavailable
        server-error-temporary-error
        server-error-version-not-supported
        successful-ok
        successful-ok-but-cancel-subscription
        successful-ok-conflicting-attributes
        successful-ok-events-complete
        successful-ok-ignored-notifications
        successful-ok-ignored-or-substituted-attributes
        successful-ok-ignored-subscriptions
        successful-ok-too-many-events
    

    Tags

    Value and group tags correspond to the names from RFC 8011 and other IPP extension specifications. Here are the group tags:
    
        document-attributes-tag
        event-notification-attributes-tag
        job-attributes-tag
        operation-attributes-tag
        printer-attributes-tag
        subscription-attributes-tag
        unsupported-attributes-tag
    

    Here are the value tags:

    
        admin-define
        boolean
        charset
        collection
        dateTime
        default
        delete-attribute
        enum
        integer
        keyword
        mimeMediaType
        nameWithLanguage
        nameWithoutLanguage
        naturalLanguage
        no-value
        not-settable
        octetString
        rangeOfInteger
        resolution
        textWithLanguage
        textWithoutLanguage
        unknown
        unsupported
        uri
        uriScheme
    

    Variables

    The ipptool(8) program maintains a list of variables that can be used in any literal string or attribute value by specifying "$variable-name". Aside from variables defined using the -d option or DEFINE directive, the following pre-defined variables are available:
    $$
    Inserts a single "$" character.
    $ENV[name]
    Inserts the value of the named environment variable, or an empty string if the environment variable is not defined.
    $filename
    Inserts the filename provided to ipptool(8) with the -f option.
    $filetype
    Inserts the MIME media type for the filename provided to ipptool(8) with the -f option.
    $hostname
    Inserts the hostname from the URI provided to ipptool(8).
    $job-id
    Inserts the last "job-id" attribute value returned in a test response or 0 if no "job-id" attribute has been seen.
    $job-uri
    Inserts the last "job-uri" attribute value returned in a test response or an empty string if no "job-uri" attribute has been seen.
    $notify-subscription-id
    Inserts the last "notify-subscription-id" attribute value returned in a test response or 0 if no "notify-subscription-id" attribute has been seen.
    $port
    Inserts the port number from the URI provided to ipptool(8).
    $resource
    Inserts the resource path from the URI provided to ipptool(8).
    $scheme
    Inserts the scheme from the URI provided to ipptool(8).
    $uri
    Inserts the URI provided to ipptool(8).
    $uriuser
    Inserts the username from the URI provided to ipptool(8), if any.
    $user
    Inserts the current user's login name.

    See Also

    ipptool(1), IANA IPP Registry (http://www.iana.org/assignments/ipp-registrations), PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp), RFC 8011 (http://tools.ietf.org/html/rfc8011)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-lp.html000664 000765 000024 00000023424 13255074424 016727 0ustar00msweetstaff000000 000000 lp(1)

    lp(1)

    Name

    lp - print files

    Synopsis

    lp [ -E ] [ -U username ] [ -c ] [ -d destination[/instance] ] [ -h hostname[:port] ] [ -m ] [ -n num-copies ] [ -o option[=value] ] [ -q priority ] [ -s ] [ -t title ] [ -H handling ] [ -P page-list ] [ -- ] [ file(s) ]
    lp [ -E ] [ -U username ] [ -c ] [ -h hostname[:port] ] [ -i job-id ] [ -n num-copies ] [ -o option[=value] ] [ -q priority ] [ -t title ] [ -H handling ] [ -P page-list ]

    Description

    lp submits files for printing or alters a pending job. Use a filename of "-" to force printing from the standard input.

    The Default Destination

    CUPS provides many ways to set the default destination. The LPDEST and PRINTER environment variables are consulted first. If neither are set, the current default set using the lpoptions(1) command is used, followed by the default set using the lpadmin(8) command.

    Options

    The following options are recognized by lp:
    --
    Marks the end of options; use this to print a file whose name begins with a dash (-).
    -E
    Forces encryption when connecting to the server.
    -U username
    Specifies the username to use when connecting to the server.
    -c
    This option is provided for backwards-compatibility only. On systems that support it, this option forces the print file to be copied to the spool directory before printing. In CUPS, print files are always sent to the scheduler via IPP which has the same effect.
    -d destination
    Prints files to the named printer.
    -h hostname[:port]
    Chooses an alternate server.
    -i job-id
    Specifies an existing job to modify.
    -m
    Sends an email when the job is completed.
    -n copies
    Sets the number of copies to print.
    -o "name=value [ ... name=value ]"
    Sets one or more job options. See "COMMON JOB OPTIONS" below.
    -q priority
    Sets the job priority from 1 (lowest) to 100 (highest). The default priority is 50.
    -s
    Do not report the resulting job IDs (silent mode.)
    -t "name"
    Sets the job name.
    -H hh:mm
    -H hold
    -H immediate
    -H restart
    -H resume
    Specifies when the job should be printed. A value of immediate will print the file immediately, a value of hold will hold the job indefinitely, and a UTC time value (HH:MM) will hold the job until the specified UTC (not local) time. Use a value of resume with the -i option to resume a held job. Use a value of restart with the -i option to restart a completed job.
    -P page-list
    Specifies which pages to print in the document. The list can contain a list of numbers and ranges (#-#) separated by commas, e.g., "1,3-5,16". The page numbers refer to the output pages and not the document's original pages - options like "number-up" can affect the numbering of the pages.

    Common Job Options

    Aside from the printer-specific options reported by the lpoptions(1) command, the following generic options are available:
    -o collate=true
    Prints collated copies.
    -o fit-to-page
    Scales the print file to fit on the page.
    -o job-hold-until=when
    Holds the job until the specified local time. "when" can be "indefinite" to hold the until released, "day-time" to print the job between 6am and 6pm local time, "night" to print the job between 6pm and 6am local time, "second-shift" to print the job between 4pm and 12am local time, "third-shift" to print the job between 12am and 8am local time, or "weekend" to print the job on Saturday or Sunday.
    -o job-hold-until=hh:mm
    Holds the job until the specified time in hours and minutes UTC.
    -o job-priority=priority
    Set the priority to a value from 1 (lowest) to 100 (highest), which influences when a job is scheduled for printing. The default priority is typically 50.
    -o job-sheets=name
    Prints a cover page (banner) with the document. The "name" can be "classified", "confidential", "secret", "standard", "topsecret", or "unclassified".
    -o job-sheets=start-name,end-name
    Prints cover pages (banners) with the document.
    -o media=size
    Sets the page size to size. Most printers support at least the size names "a4", "letter", and "legal".
    -o mirror
    Mirrors each page.
    -o number-up={2|4|6|9|16}
    Prints 2, 4, 6, 9, or 16 document (input) pages on each output page.
    -o number-up-layout=layout
    Specifies the layout of pages with the "number-up" option. The "layout" string can be "btlr", "btrl", "lrbt", "lrtb", "rlbt", "rltb", "tblr", or "tbrl" - the first two letters determine the column order while the second two letters determine the row order. "bt" is bottom-to-top, "lr" is left-to-right, "rl" is right-to-left, and "tb" is top-to-bottom.
    -o orientation-requested=4
    Prints the job in landscape (rotated 90 degrees counter-clockwise).
    -o orientation-requested=5
    Prints the job in landscape (rotated 90 degrees clockwise).
    -o orientation-requested=6
    Prints the job in reverse portrait (rotated 180 degrees).
    -o outputorder=reverse
    Prints pages in reverse order.
    -o page-border=border
    Prints a border around each document page. "border" is "double", "double-thick", "single", or "single-thick".
    -o page-ranges=page-list
    Specifies which pages to print in the document. The list can contain a list of numbers and ranges (#-#) separated by commas, e.g., "1,3-5,16". The page numbers refer to the output pages and not the document's original pages - options like "number-up" can affect the numbering of the pages.
    -o sides=one-sided
    Prints on one side of the paper.
    -o sides=two-sided-long-edge
    Prints on both sides of the paper for portrait output.
    -o sides=two-sided-short-edge
    Prints on both sides of the paper for landscape output.

    Conforming To

    Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", or "#". Also, printer and class names are not case-sensitive.

    The -q option accepts a different range of values than the Solaris lp command, matching the IPP job priority values (1-100, 100 is highest priority) instead of the Solaris values (0-39, 0 is highest priority).

    Examples

    Print two copies of a document to the default printer:
    
        lp -n 2 filename
    
    
    Print a double-sided legal document to a printer called "foo":
    
        lp -d foo -o media=legal -o sides=two-sided-long-edge filename
    
    
    Print a presentation document 2-up to a printer called "foo":
    
        lp -d foo -o number-up=2 filename
    

    See Also

    cancel(1), lpadmin(8), lpoptions(1), lpq(1), lpr(1), lprm(1), lpstat(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-lpadmin.html000664 000765 000024 00000021741 13255074424 017740 0ustar00msweetstaff000000 000000 lpadmin(8)

    lpadmin(8)

    Name

    lpadmin - configure cups printers and classes

    Synopsis

    lpadmin [ -E ] [ -U username ] [ -h server[:port] ] -d destination
    lpadmin [ -E ] [ -U username ] [ -h server[:port] ] -p destination [ -R name-default ] option(s)
    lpadmin [ -E ] [ -U username ] [ -h server[:port] ] -x destination

    Description

    lpadmin configures printer and class queues provided by CUPS. It can also be used to set the server default printer or class.

    When specified before the -d, -p, or -x options, the -E option forces encryption when connecting to the server.

    The first form of the command (-d) sets the default printer or class to destination. Subsequent print jobs submitted via the lp(1) or lpr(1) commands will use this destination unless the user specifies otherwise with the lpoptions(1) command.

    The second form of the command (-p) configures the named printer or class. The additional options are described below.

    The third form of the command (-x) deletes the printer or class destination. Any jobs that are pending for the destination will be removed and any job that is currently printed will be aborted.

    Options

    The following options are recognized when configuring a printer queue:
    -c class
    Adds the named printer to class. If class does not exist it is created automatically.
    -i ppd-file
    -P ppd-file
    Specifies a PostScript Printer Description (PPD) file to use with the printer.
    -m model
    Sets a standard PPD file for the printer from the model directory or using one of the driver interfaces. Use the -m option with the lpinfo(8) command to get a list of supported models. The model "raw" clears any existing PPD file and the model "everywhere" queries the printer referred to by the specified IPP device-uri. Note: The "raw" model is deprecated and will not be supported in a future version of CUPS.
    -o cupsIPPSupplies=true
    -o cupsIPPSupplies=false
    Specifies whether IPP supply level values should be reported.
    -o cupsSNMPSupplies=true
    -o cupsSNMPSupplies=false
    Specifies whether SNMP supply level (RFC 3805) values should be reported.
    -o job-k-limit=value
    Sets the kilobyte limit for per-user quotas. The value is an integer number of kilobytes; one kilobyte is 1024 bytes.
    -o job-page-limit=value
    Sets the page limit for per-user quotas. The value is the integer number of pages that can be printed; double-sided pages are counted as two pages.
    -o job-quota-period=value
    Sets the accounting period for per-user quotas. The value is an integer number of seconds; 86,400 seconds are in one day.
    -o job-sheets-default=banner
    -o job-sheets-default=banner,banner
    Sets the default banner page(s) to use for print jobs.
    -o name=value
    Sets a PPD option for the printer. PPD options can be listed using the -l option with the lpoptions(1) command.
    -o name-default=value
    Sets a default server-side option for the destination. Any print-time option can be defaulted, e.g., "-o number-up-default=2" to set the default "number-up" option value to 2.
    -o port-monitor=name
    Sets the binary communications program to use when printing, "none", "bcp", or "tbcp". The default program is "none". The specified port monitor must be listed in the printer's PPD file.
    -o printer-error-policy=name
    Sets the error policy to be used when the printer backend is unable to send the job to the printer. The name must be one of "abort-job", "retry-job", "retry-current-job", or "stop-printer". The default error policy is "stop-printer" for printers and "retry-current-job" for classes.
    -o printer-is-shared=true
    -o printer-is-shared=false
    Sets the destination to shared/published or unshared/unpublished. Shared/published destinations are publicly announced by the server on the LAN based on the browsing configuration in cupsd.conf, while unshared/unpublished destinations are not announced. The default value is "true".
    -o printer-op-policy=name
    Sets the IPP operation policy associated with the destination. The name must be defined in the cupsd.conf in a Policy section. The default operation policy is "default".
    -R name-default
    Deletes the named option from printer.
    -r class
    Removes the named printer from class. If the resulting class becomes empty it is removed.
    -u allow:{user|@group}{,user|,@group}*
    -u deny:{user|@group}{,user|,@group}*
    -u allow:all
    -u deny:none
    Sets user-level access control on a destination. Names starting with "@" are interpreted as UNIX groups. The latter two forms turn user-level access control off. Note: The user 'root' is not granted special access - using "-u allow:foo,bar" will allow users 'foo' and 'bar' to access the printer but NOT 'root'.
    -v "device-uri"
    Sets the device-uri attribute of the printer queue. Use the -v option with the lpinfo(8) command to get a list of supported device URIs and schemes.
    -D "info"
    Provides a textual description of the destination.
    -E
    Enables the destination and accepts jobs; this is the same as running the cupsaccept(8) and cupsenable(8) programs on the destination.
    -L "location"
    Provides a textual location of the destination.

    Conforming To

    Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", or "#". Also, printer and class names are not case-sensitive. Finally, the CUPS version of lpadmin may ask the user for an access password depending on the printing system configuration. This differs from the System V version which requires the root user to execute this command.

    Notes

    The CUPS version of lpadmin does not support all of the System V or Solaris printing system configuration options.

    Example

    Create an IPP Everywhere print queue:
    
        lpadmin -p myprinter -E -v ipp://myprinter.local/ipp/print -m everywhere
    
    

    See Also

    cupsaccept(8), cupsenable(8), lpinfo(8), lpoptions(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-lpc.html000664 000765 000024 00000004657 13255074424 017101 0ustar00msweetstaff000000 000000 lpc(8)

    lpc(8)

    Name

    lpc - line printer control program

    Synopsis

    lpc [ command [ parameter(s) ] ]

    Description

    lpc provides limited control over printer and class queues provided by CUPS. It can also be used to query the state of queues.

    If no command is specified on the command-line, lpc displays a prompt and accepts commands from the standard input.

    Commands

    The lpc program accepts a subset of commands accepted by the Berkeley lpc program of the same name:
    exit
    Exits the command interpreter.
    help [command]
    ? [command]
    Displays a short help message.
    quit
    Exits the command interpreter.
    status [queue]
    Displays the status of one or more printer or class queues.

    Notes

    Since lpc is geared towards the Berkeley printing system, it is impossible to use lpc to configure printer or class queues provided by CUPS. To configure printer or class queues you must use the lpadmin(8) command or another CUPS-compatible client with that functionality.

    See Also

    cancel(1), cupsaccept(8), cupsenable(8), lp(1), lpadmin(8), lpr(1), lprm(1), lpstat(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-lpinfo.html000664 000765 000024 00000006671 13255074424 017610 0ustar00msweetstaff000000 000000 lpinfo(8)

    lpinfo(8)

    Name

    lpinfo - show available devices or drivers

    Synopsis

    lpinfo [ -E ] [ -h server[:port] ] [ -l ] [ --device-id device-id-string ] [ --exclude-schemes scheme-list ] [ --include-schemes scheme-list ] [ --language locale ] [ --make-and-model name ] [ --product name ] -m
    lpinfo [ -E ] [ -h server[:port] ] [ -l ] [ --exclude-schemes scheme-list ] [ --include-schemes scheme-list ] [ --timeout seconds ] -v

    Description

    lpinfo lists the available devices or drivers known to the CUPS server. The first form (-m) lists the available drivers, while the second form (-v) lists the available devices.

    Options

    lpinfo accepts the following options:
    -E
    Forces encryption when connecting to the server.
    -h server[:port]
    Selects an alternate server.
    -l
    Shows a "long" listing of devices or drivers.
    --device-id device-id-string
    Specifies the IEEE-1284 device ID to match when listing drivers with the -m option.
    --exclude-schemes scheme-list
    Specifies a comma-delimited list of device or PPD schemes that should be excluded from the results. Static PPD files use the "file" scheme.
    --include-schemes scheme-list
    Specifies a comma-delimited list of device or PPD schemes that should be included in the results. Static PPD files use the "file" scheme.
    --language locale
    Specifies the language to match when listing drivers with the -m option.
    --make-and-model name
    Specifies the make and model to match when listing drivers with the -m option.
    --product name
    Specifies the product to match when listing drivers with the -m option.
    --timeout seconds
    Specifies the timeout when listing devices with the -v option.

    Conforming To

    The lpinfo command is unique to CUPS.

    Examples

    List all devices:
    
        lpinfo -v
    
    
    List all drivers:
    
        lpinfo -m
    
    
    List drivers matching "HP LaserJet":
    
        lpinfo --make-and-model "HP LaserJet" -m
    

    See Also

    lpadmin(8), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-lpmove.html000664 000765 000024 00000004116 13255074424 017613 0ustar00msweetstaff000000 000000 lpmove(8)

    lpmove(8)

    Name

    lpmove - move a job or all jobs to a new destination

    Synopsis

    lpmove [ -E ] [ -h server[:port] ] [ -U username ] job destination
    lpmove [ -E ] [ -h server[:port] ] [ -U username ] source destination

    Description

    lpmove moves the specified job or all jobs from source to destination. job can be the job ID number or the old destination and job ID.

    Options

    The lpmove command supports the following options:
    -E
    Forces encryption when connecting to the server.
    -U username
    Specifies an alternate username.
    -h server[:port]
    Specifies an alternate server.

    Examples

    Move job 123 from "oldprinter" to "newprinter":
    
        lpmove 123 newprinter
    
                or
    
        lpmove oldprinter-123 newprinter
    
    
    Move all jobs from "oldprinter" to "newprinter":
    
        lpmove oldprinter newprinter
    

    See Also

    cancel(1), lp(1), lpr(1), lprm(1),
    CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-lpoptions.html000664 000765 000024 00000011014 13255074424 020333 0ustar00msweetstaff000000 000000 lpoptions(1)

    lpoptions(1)

    Name

    lpoptions - display or set printer options and defaults

    Synopsis

    lpoptions [ -E ] [ -U username ] [ -h server[:port] ] -d destination[/instance] [ -l ]
    lpoptions [ -E ] [ -U username ] [ -h server[:port] ] [ -p destination[/instance] ] -o option[=value] ...
    lpoptions [ -E ] [ -U username ] [ -h server[:port] ] [ -p destination[/instance] ] -r option
    lpoptions [ -E ] [ -U username ] [ -h server[:port] ] -x destination[/instance]

    Description

    lpoptions displays or sets printer options and defaults. If no printer is specified using the -p option, the default printer is used as described in lp(1).

    If no -l, -o, or -r options are specified, the current options are reported on the standard output.

    Options set with the lpoptions command are used by the lp(1) and lpr(1) commands when submitting jobs.

    When run by the root user, lpoptions gets and sets default options and instances for all users in the /etc/cups/lpoptions file. Otherwise, the per-user defaults are managed in the ~/.cups/lpoptions file.

    Options

    lpoptions supports the following options:
    -E
    Enables encryption when communicating with the CUPS server.
    -U username
    Uses an alternate username.
    -d destination[/instance]
    Sets the user default printer to destination. If instance is supplied then that particular instance is used. This option overrides the system default printer for the current user.
    -h server[:port]
    Uses an alternate server.
    -l
    Lists the printer specific options and their current settings.
    -o option[=value]
    Specifies a new option for the named destination.
    -p destination[/instance]
    Sets the destination and instance, if specified, for any options that follow. If the named instance does not exist then it is created. Destinations can only be created using the lpadmin(8) program.
    -r option
    Removes the specified option from the named destination.
    -x destination[/instance]
    Removes the options for the named destination and instance, if specified. If the named instance does not exist then this does nothing. Destinations can only be removed using the lpadmin(8) command.

    Files

    ~/.cups/lpoptions - user defaults and instances created by non-root users.
    /etc/cups/lpoptions - system-wide defaults and instances created by the root user.

    Conforming To

    The lpoptions command is unique to CUPS.

    See Also

    cancel(1), lp(1), lpadmin(8), lpr(1), lprm(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-lpq.html000664 000765 000024 00000004303 13255074424 017103 0ustar00msweetstaff000000 000000 lpq(1)

    lpq(1)

    Name

    lpq - show printer queue status

    Synopsis

    lpq [ -E ] [ -U username ] [ -h server[:port] ] [ -P destination[/instance] ] [ -a ] [ -l ] [ +interval ]

    Description

    lpq shows the current print queue status on the named printer. Jobs queued on the default destination will be shown if no printer or class is specified on the command-line.

    The +interval option allows you to continuously report the jobs in the queue until the queue is empty; the list of jobs is shown once every interval seconds.

    Options

    lpq supports the following options:
    -E
    Forces encryption when connecting to the server.
    -P destination[/instance]
    Specifies an alternate printer or class name.
    -U username
    Specifies an alternate username.
    -a
    Reports jobs on all printers.
    -h server[:port]
    Specifies an alternate server.
    -l
    Requests a more verbose (long) reporting format.

    See Also

    cancel(1), lp(1), lpr(1), lprm(1), lpstat(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-lpr.html000664 000765 000024 00000020576 13255074424 017116 0ustar00msweetstaff000000 000000 lpr(1)

    lpr(1)

    Name

    lpr - print files

    Synopsis

    lpr [ -E ] [ -H server[:port] ] [ -U username ] [ -P destination[/instance] ] [ -# num-copies [ -h ] [ -l ] [ -m ] [ -o option[=value] ] [ -p ] [ -q ] [ -r ] [ -C title ] [ -J title ] [ -T title ] [ file(s) ]

    Description

    lpr submits files for printing. Files named on the command line are sent to the named printer or the default destination if no destination is specified. If no files are listed on the command-line, lpr reads the print file from the standard input.

    The Default Destination

    CUPS provides many ways to set the default destination. The LPDEST and PRINTER environment variables are consulted first. If neither are set, the current default set using the lpoptions(1) command is used, followed by the default set using the lpadmin(8) command.

    Options

    The following options are recognized by lpr:
    -E
    Forces encryption when connecting to the server.
    -H server[:port]
    Specifies an alternate server.
    -C "name"
    -J "name"
    -T "name"
    Sets the job name/title.
    -P destination[/instance]
    Prints files to the named printer.
    -U username
    Specifies an alternate username.
    -# copies
    Sets the number of copies to print.
    -h
    Disables banner printing. This option is equivalent to -o job-sheets=none.
    -l
    Specifies that the print file is already formatted for the destination and should be sent without filtering. This option is equivalent to -o raw.
    -m
    Send an email on job completion.
    -o option[=value]
    Sets a job option. See "COMMON JOB OPTIONS" below.
    -p
    Specifies that the print file should be formatted with a shaded header with the date, time, job name, and page number. This option is equivalent to -o prettyprint and is only useful when printing text files.
    -q
    Hold job for printing.
    -r
    Specifies that the named print files should be deleted after submitting them.

    Common Job Options

    Aside from the printer-specific options reported by the lpoptions(1) command, the following generic options are available:
    -o collate=true
    Prints collated copies.
    -o fit-to-page
    Scales the print file to fit on the page.
    -o job-hold-until=when
    Holds the job until the specified local time. "when" can be "indefinite" to hold the until released, "day-time" to print the job between 6am and 6pm local time, "night" to print the job between 6pm and 6am local time, "second-shift" to print the job between 4pm and 12am local time, "third-shift" to print the job between 12am and 8am local time, or "weekend" to print the job on Saturday or Sunday.
    -o job-hold-until=hh:mm
    Holds the job until the specified time in hours and minutes UTC.
    -o job-priority=priority
    Set the priority to a value from 1 (lowest) to 100 (highest), which influences when a job is scheduled for printing. The default priority is typically 50.
    -o job-sheets=name
    Prints a cover page (banner) with the document. The "name" can be "classified", "confidential", "secret", "standard", "topsecret", or "unclassified".
    -o job-sheets=start-name,end-name
    Prints cover pages (banners) with the document.
    -o media=size
    Sets the page size to size. Most printers support at least the size names "a4", "letter", and "legal".
    -o mirror
    Mirrors each page.
    -o number-up={2|4|6|9|16}
    Prints 2, 4, 6, 9, or 16 document (input) pages on each output page.
    -o number-up-layout=layout
    Specifies the layout of pages with the "number-up" option. The "layout" string can be "btlr", "btrl", "lrbt", "lrtb", "rlbt", "rltb", "tblr", or "tbrl" - the first two letters determine the column order while the second two letters determine the row order. "bt" is bottom-to-top, "lr" is left-to-right, "rl" is right-to-left, and "tb" is top-to-bottom.
    -o orientation-requested=4
    Prints the job in landscape (rotated 90 degrees counter-clockwise).
    -o orientation-requested=5
    Prints the job in landscape (rotated 90 degrees clockwise).
    -o orientation-requested=6
    Prints the job in reverse portrait (rotated 180 degrees).
    -o outputorder=reverse
    Prints pages in reverse order.
    -o page-border=border
    Prints a border around each document page. "border" is "double", "double-thick", "single", or "single-thick".
    -o page-ranges=page-list
    Specifies which pages to print in the document. The list can contain a list of numbers and ranges (#-#) separated by commas, e.g., "1,3-5,16". The page numbers refer to the output pages and not the document's original pages - options like "number-up" can affect the numbering of the pages.
    -o sides=one-sided
    Prints on one side of the paper.
    -o sides=two-sided-long-edge
    Prints on both sides of the paper for portrait output.
    -o sides=two-sided-short-edge
    Prints on both sides of the paper for landscape output.

    Notes

    The -c, -d, -f, -g, -i, -n, -t, -v, and -w options are not supported by CUPS and produce a warning message if used.

    Examples

    Print two copies of a document to the default printer:
    
        lpr -# 2 filename
    
    
    Print a double-sided legal document to a printer called "foo":
    
        lpr -P foo -o media=legal -o sides=two-sided-long-edge filename
    
    
    Print a presentation document 2-up to a printer called "foo":
    
        lpr -P foo -o number-up=2 filename
    

    See Also

    cancel(1), lp(1), lpadmin(8), lpoptions(1), lpq(1), lprm(1), lpstat(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-lprm.html000664 000765 000024 00000004460 13255074424 017265 0ustar00msweetstaff000000 000000 lprm(1)

    lprm(1)

    Name

    lprm - cancel print jobs

    Synopsis

    lprm [ -E ] [ -U username ] [ -h server[:port] ] [ -P destination[/instance] ] [ - ] [ job-id(s) ]

    Description

    lprm cancels print jobs that have been queued for printing. If no arguments are supplied, the current job on the default destination is canceled. You can specify one or more job ID numbers to cancel those jobs or use the - option to cancel all jobs.

    Options

    The lprm command supports the following options:
    -E
    Forces encryption when connecting to the server.
    -P destination[/instance]
    Specifies the destination printer or class.
    -U username
    Specifies an alternate username.
    -h server[:port]
    Specifies an alternate server.

    Conforming To

    The CUPS version of lprm is compatible with the standard Berkeley command of the same name.

    Examples

    Cancel the current job on the default printer:
    
        lprm
    
    
    Cancel job 1234:
    
        lprm 1234
    
    
    Cancel all jobs:
    
        lprm -
    

    See Also

    cancel(1), lp(1), lpq(1), lpr(1), lpstat(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-lpstat.html000664 000765 000024 00000011415 13255074424 017620 0ustar00msweetstaff000000 000000 lpstat(1)

    lpstat(1)

    Name

    lpstat - print cups status information

    Synopsis

    lpstat [ -E ] [ -H ] [ -U username ] [ -h hostname[:port] ] [ -l ] [ -W which-jobs ] [ -a [ destination(s) ] ] [ -c [ class(es) ] ] [ -d ] [ -e ] [ -o [ destination(s) ] ] [ -p [ printer(s) ] ] [ -r ] [ -R ] [ -s ] [ -t ] [ -u [ user(s) ] ] [ -v [ printer(s) ] ]

    Description

    lpstat displays status information about the current classes, jobs, and printers. When run with no arguments, lpstat will list active jobs queued by the current user.

    Options

    The lpstat command supports the following options:
    -E
    Forces encryption when connecting to the server.
    -H
    Shows the server hostname and port.
    -R
    Shows the ranking of print jobs.
    -U username
    Specifies an alternate username.
    -W which-jobs
    Specifies which jobs to show, "completed" or "not-completed" (the default). This option must appear before the -o option and/or any printer names, otherwise the default ("not-completed") value will be used in the request to the scheduler.
    -a [printer(s)]
    Shows the accepting state of printer queues. If no printers are specified then all printers are listed.
    -c [class(es)]
    Shows the printer classes and the printers that belong to them. If no classes are specified then all classes are listed.
    -d
    Shows the current default destination.
    -e
    Shows all available destinations on the local network.
    -h server[:port]
    Specifies an alternate server.
    -l
    Shows a long listing of printers, classes, or jobs.
    -o [destination(s)]
    Shows the jobs queued on the specified destinations. If no destinations are specified all jobs are shown.
    -p [printer(s)]
    Shows the printers and whether they are enabled for printing. If no printers are specified then all printers are listed.
    -r
    Shows whether the CUPS server is running.
    -s
    Shows a status summary, including the default destination, a list of classes and their member printers, and a list of printers and their associated devices. This is equivalent to using the -d, -c, and -v options.
    -t
    Shows all status information. This is equivalent to using the -r, -d, -c, -v, -a, -p, and -o options.
    -u [user(s)]
    Shows a list of print jobs queued by the specified users. If no users are specified, lists the jobs queued by the current user.
    -v [printer(s)]
    Shows the printers and what device they are attached to. If no printers are specified then all printers are listed.

    Conforming To

    Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", and "#". Also, printer and class names are not case-sensitive.

    The -h, -e, -E, -U, and -W options are unique to CUPS.

    The Solaris -f, -P, and -S options are silently ignored.

    See Also

    cancel(1), lp(1), lpq(1), lpr(1), lprm(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-mailto.conf.html000664 000765 000024 00000004165 13255074424 020526 0ustar00msweetstaff000000 000000 mailto.conf(5)

    mailto.conf(5)

    Name

    mailto.conf - configuration file for cups email notifier

    Description

    The mailto.conf file defines the local mail server and email notification preferences for CUPS.

    Each line in the file can be a configuration directive, a blank line, or a comment. Configuration directives typically consist of a name and zero or more values separated by whitespace. The configuration directive name and values are case-insensitive. Comment lines start with the # character.

    Directives

    Cc cc-address@domain.com
    Specifies an additional recipient for all email notifications.
    From from-address@domain.com
    Specifies the sender of email notifications.
    Sendmail sendmail command and options
    Specifies the sendmail command to use when sending email notifications. Only one Sendmail or SMTPServer line may be present in the mailto.conf file. If multiple lines are present, only the last one is used.
    SMTPServer servername
    Specifies a SMTP server to send email notifications to. Only one Sendmail or SMTPServer line may be present in the mailto.conf file. If multiple lines are present, only the last one is used.
    Subject subject-prefix
    Specifies a prefix string for the subject line of an email notification.

    See Also

    cupsd(8), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-mime.convs.html000664 000765 000024 00000005122 13255074424 020365 0ustar00msweetstaff000000 000000 mime.convs(5)

    mime.convs(5)

    Name

    mime.convs - mime type conversion file for cups

    Description

    The mime.convs file defines the filters that are available for converting files from one format to another. The standard filters support text, PDF, PostScript, and many types of image files.

    Additional filters are specified in files with the extension .convs in the CUPS configuration directory.

    Each line in the mime.convs file is a comment, blank, or filter line. Comment lines start with the # character. Filter lines specify the source and destination MIME types along with a relative cost associated with the filter and the filter to run:

    
        source/type destination/type cost filter
    
    
    The source/type field specifies the source MIME media type that is consumed by the filter.

    The destination/type field specifies the destination MIME media type that is produced by the filter.

    The cost field specifies the relative cost for running the filter. A value of 100 means that the filter uses a large amount of resources while a value of 0 means that the filter uses very few resources.

    The filter field specifies the filter program filename. Filenames are relative to the CUPS filter directory.

    Files

    /etc/cups - Typical CUPS configuration directory.
    /usr/lib/cups/filter - Typical CUPS filter directory.
    /usr/libexec/cups/filter - CUPS filter directory on macOS.

    Examples

    Define a filter that converts PostScript documents to CUPS Raster format:
    
        application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
    
    

    See Also

    cups-files.conf(5), cupsd.conf(5), cupsd(8), cupsfilter(8), mime.types(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-mime.types.html000664 000765 000024 00000013335 13255074424 020406 0ustar00msweetstaff000000 000000 mime.types(5)

    mime.types(5)

    Name

    mime.types - mime type description file for cups

    Description

    The mime.types file defines the recognized file types.

    Additional file types are specified in files with the extension .types in the CUPS configuration directory.

    Each line in the mime.types file is a comment, blank, or rule line. Comment lines start with the # character. Rule lines start with the MIME media type and are optionally followed by a series of file recognition rules:

    
        mime/type [ rule ... rule ]
    
    
    Rules can be extended over multiple lines using the backslash character (\):
    
        mime/type [ really-really-really-long-rule ... \
          rule ]
    
    
    MIME media types specified by the mime/type field are case-insensitive and are sorted in ascending alphanumeric order for the purposes of matching. See the "TYPE MATCHING AND PRIORITY" section for more information.

    The rules may be grouped using parenthesis, joined using "+" for a logical AND, joined using "," or whitespace for a logical OR, and negated using "!".

    Rules

    Rules take two forms - a filename extension by itself and functions with test values inside parenthesis. The following functions are available:
    match("pattern")
    True if the filename matches the given shell wildcard pattern.
    ascii(offset,length)
    True if the length bytes starting at offset are valid printable ASCII (CR, NL, TAB, BS, 32-126).
    printable(offset,length)
    True if the length bytes starting at offset are printable 8-bit chars (CR, NL, TAB, BS, 32-126, 128-254).
    priority(number)
    Specifies the relative priority of this MIME media type. The default priority is 100. Larger values have higher priority while smaller values have lower priority.
    string(offset,"string")
    True if the bytes starting at offset are identical to string.
    istring(offset,"string")
    True if the bytes starting at offset match string without respect to case.
    char(offset,value)
    True if the byte at offset is identical to value.
    short(offset,value)
    True if the 16-bit big-endian integer at offset is identical to value.
    int(offset,value)
    True if the 32-bit big-endian integer at offset is identical to value.
    locale("string")
    True if current locale matches string.
    contains(offset,range,"string")
    True if the bytes starting at offset for range bytes contains string.

    String Constants

    String constants can be specified inside quotes ("") for strings containing whitespace and angle brackets (<>) for hexadecimal strings.

    Type Matching And Priority

    When CUPS needs to determine the MIME media type of a given file, it checks every MIME media type defined in the .types files. When two or more types match a given file, the type chosen will depend on the type name and priority, with higher-priority types being used over lower-priority ones. If the types have the same priority, the type names are sorted alphanumerically in ascending order and the first type is chosen.

    For example, if two types "text/bar" and "text/foo" are defined as matching the extension "doc", normally the type "text/bar" will be chosen since its name is alphanumerically smaller than "text/foo". However, if "text/foo" also defines a higher priority than "text/bar", "text/foo" will be chosen instead.

    Files

    /etc/cups - Typical CUPS configuration directory.

    Examples

    Define two MIME media types for raster data, with one being a subset with higher priority:
    
        application/vnd.cups-raster  string(0,"RaSt") string(0,"tSaR") \
                                      string(0,"RaS2") string(0,"2SaR") \
                                      string(0,"RaS3") string(0,"3SaR")
    
        image/pwg-raster              string(0,"RaS2") + \
                                      string(4,PwgRaster<00>) priority(150)
    

    See Also

    cups-files.conf(5), cupsd.conf(5), cupsd(8), cupsfilter(8), mime.convs(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-notifier.html000664 000765 000024 00000002756 13255074424 020140 0ustar00msweetstaff000000 000000 notifier(7)

    notifier(7)

    Name

    notifier - cups notification interface

    Synopsis

    notifier recipient [ user-data ]

    Description

    The CUPS notifier interface provides a standard method for adding support for new event notification methods to CUPS. Each notifier delivers one or more IPP events from the standard input to the specified recipient.

    Notifiers MUST read IPP messages from the standard input using the ippNew() and ippReadFile() functions and exit on error. Notifiers are encouraged to exit after a suitable period of inactivity, however they may exit after reading the first message or stay running until an error is seen. Notifiers inherit the environment and can use the logging mechanism documented in filter(7).

    See Also

    cupsd(8), filter(7), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-ppdc.html000664 000765 000024 00000006766 13255074424 017254 0ustar00msweetstaff000000 000000 ppdc(1)

    ppdc(1)

    Name

    ppdc - cups ppd compiler (deprecated)

    Synopsis

    ppdc [ -D name[=value] ] [ -I include-directory ] [ -c message-catalog ] [ -d output-directory ] [ -l language(s) ] [ -m ] [ -t ] [ -v ] [ -z ] [ --cr ] [ --crlf ] [ --lf ] source-file

    Description

    ppdc compiles PPDC source files into one or more PPD files. This program is deprecated and will be removed in a future release of CUPS.

    Options

    ppdc supports the following options:
    -D name[=value]
    Sets the named variable for use in the source file. It is equivalent to using the #define directive in the source file.
    -I include-directory
    Specifies an alternate include directory. Multiple -I options can be supplied to add additional directories.
    -c message-catalog
    Specifies a single message catalog file in GNU gettext (filename.po) or Apple strings (filename.strings) format to be used for localization.
    -d output-directory
    Specifies the output directory for PPD files. The default output directory is "ppd".
    -l language(s)
    Specifies one or more languages to use when localizing the PPD file(s). The default language is "en" (English). Separate multiple languages with commas, for example "de_DE,en_UK,es_ES,es_MX,es_US,fr_CA,fr_FR,it_IT" will create PPD files with German, UK English, Spanish (Spain, Mexico, and US), French (France and Canada), and Italian languages in each file.
    -m
    Specifies that the output filename should be based on the ModelName value instead of FileName or PCFilenName.
    -t
    Specifies that PPD files should be tested instead of generated.
    -v
    Specifies verbose output, basically a running status of which files are being loaded or written. -z Generates compressed PPD files (filename.ppd.gz). The default is to generate uncompressed PPD files.
    --cr
    --crlf
    --lf
    Specifies the line ending to use - carriage return, carriage return and line feed, or line feed alone. The default is to use the line feed character alone.

    See Also

    ppdhtml(1), ppdi(1), ppdmerge(1), ppdpo(1), ppdcfile(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-ppdcfile.html000664 000765 000024 00000016530 13255074424 020102 0ustar00msweetstaff000000 000000 ppdcfile(5)

    ppdcfile(5)

    Name

    ppdcfile - cups ppd compiler source file format

    Description

    The CUPS PPD compiler reads meta files that contain descriptions of one or more PPD files to be generated by ppdc(1). This man page provides a quick reference to the supported keywords and should be used in conjunction with the online help for CUPS.

    The source file format is plain ASCII text that can be edited using your favorite text editor. Comments are supported using the C (/* ... */) and C++ (// ...) comment mechanisms.

    Printer driver information can be grouped and shared using curly braces ({ ... }); PPD files are written when a close brace or end-of-file is seen and a PCFileName directive has been defined.

    Directives may be placed anywhere on a line and are followed by one or more values. The following is a list of the available directives and the values they accept:

    #define name value
    #elif {name | value}
    #else
    #endif
    #font name encoding "version" charset status
    #if {name | value}
    #include <filename>
    #include "filename"
    #media name width length
    #media "name/text" width length
    #po locale "filename"
    Attribute name "" value
    Attribute name keyword value
    Attribute name "keyword/text" value
    Choice name "code"
    Choice "name/text" "code"
    ColorDevice boolean-value
    ColorModel name colorspace colororder compression
    ColorModel "name/text" colorspace colororder compression
    ColorProfile resolution/mediatype gamma density matrix
    Copyright "text"
    CustomMedia name width length left bottom right top "size-code" "region-code"
    CustomMedia "name/text" width length left bottom right top "size-code" "region-code"
    Cutter boolean-value
    Darkness temperature name
    Darkness temperature "name/text"
    DriverType type
    Duplex type
    Filter mime-type cost program
    Finishing name
    Finishing "name/text"
    Font *
    Font name encoding "version" charset status
    Group name
    Group "name/text"
    HWMargins left bottom right top
    InputSlot position name
    InputSlot position "name/text"
    Installable name
    Installable "name/text"
    LocAttribute name "keyword/text" value
    ManualCopies boolean-value
    Manufacturer "name"
    MaxSize width length
    MediaSize name
    MediaType type name
    MediaType type "name/text"
    MinSize width length
    ModelName "name"
    ModelNumber number
    Option name type section order
    Option "name/text" type section order
    PCFileName "filename.ppd"
    Resolution colorspace bits-per-color row-count row-feed row-step name
    Resolution colorspace bits-per-color row-count row-feed row-step "name/text"
    SimpleColorProfile resolution/mediatype density yellow-density red-density gamma red-adjust green-adjust blue-adjust
    Throughput pages-per-minute
    UIConstraints "*Option1 *Option2"
    UIConstraints "*Option1 Choice1 *Option2"
    UIConstraints "*Option1 *Option2 Choice2"
    UIConstraints "*Option1 Choice1 *Option2 Choice2"
    VariablePaperSize boolean-value
    Version number

    See Also

    ppdc(1), ppdhtml(1), ppdi(1), ppdmerge(1), ppdpo(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-ppdhtml.html000664 000765 000024 00000003501 13255074424 017756 0ustar00msweetstaff000000 000000 ppdhtml(1)

    ppdhtml(1)

    Name

    ppdhtml - cups html summary generator (deprecated)

    Synopsis

    ppdhtml [ -D name[=value] ] [ -I include-directory ] source-file

    Description

    ppdhtml reads a driver information file and produces a HTML summary page that lists all of the drivers in a file and the supported options. This program is deprecated and will be removed in a future release of CUPS.

    Options

    ppdhtml supports the following options:
    -D name[=value]
    Sets the named variable for use in the source file. It is equivalent to using the #define directive in the source file.
    -I include-directory
    Specifies an alternate include directory. Multiple -I options can be supplied to add additional directories.

    See Also

    ppdc(1), ppdcfile(5), ppdi(1), ppdmerge(1), ppdpo(1), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-ppdi.html000664 000765 000024 00000003753 13255074424 017253 0ustar00msweetstaff000000 000000 ppdi(1)

    ppdi(1)

    Name

    ppdi - import ppd files (deprecated)

    Synopsis

    ppdi [ -I include-directory ] [ -o source-file ] ppd-file [ ... ppd-file ]

    Description

    ppdi imports one or more PPD files into a PPD compiler source file. Multiple languages of the same PPD file are merged into a single printer definition to facilitate accurate changes for all localizations. This program is deprecated and will be removed in a future release of CUPS.

    Options

    ppdi supports the following options:
    -I include-directory
    Specifies an alternate include directory. Multiple -I options can be supplied to add additional directories.
    -o source-file
    Specifies the PPD source file to update. If the source file does not exist, a new source file is created. Otherwise the existing file is merged with the new PPD file(s) on the command-line. If no source file is specified, the filename ppdi.drv is used.

    See Also

    ppdc(1), ppdhtml(1), ppdmerge(1), ppdpo(1), ppdcfile(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-ppdmerge.html000664 000765 000024 00000003434 13255074424 020116 0ustar00msweetstaff000000 000000 ppdmerge(1)

    ppdmerge(1)

    Name

    ppdmerge - merge ppd files (deprecated)

    Synopsis

    ppdmerge [ -o output-ppd-file ] ppd-file ppd-file [ ... ppd-file ]

    Description

    ppdmerge merges two or more PPD files into a single, multi-language PPD file. This program is deprecated and will be removed in a future release of CUPS.

    Options

    ppdmerge supports the following options:
    -o output-ppd-file
    Specifies the PPD file to create. If not specified, the merged PPD file is written to the standard output. If the output file already exists, it is silently overwritten.

    Notes

    ppdmerge does not check whether the merged PPD files are for the same device. Merging of different device PPDs will yield unpredictable results.

    See Also

    ppdc(1), ppdhtml(1), ppdi(1), ppdpo(1), ppdcfile(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-ppdpo.html000664 000765 000024 00000004042 13255074424 017431 0ustar00msweetstaff000000 000000 ppdpo(1)

    ppdpo(1)

    Name

    ppdpo - ppd message catalog generator (deprecated)

    Synopsis

    ppdpo [ -D name[=value] ] [ -I include-directory ] [ -o output-file ] source-file

    Description

    ppdpo extracts UI strings from PPDC source files and updates either a GNU gettext or macOS strings format message catalog source file for translation. This program is deprecated and will be removed in a future release of CUPS.

    Options

    ppdpo supports the following options:
    -D name[=value]
    Sets the named variable for use in the source file. It is equivalent to using the #define directive in the source file.
    -I include-directory
    Specifies an alternate include directory. Multiple -I options can be supplied to add additional directories.
    -o output-file
    Specifies the output file. The supported extensions are .po or .po.gz for GNU gettext format message catalogs and .strings for macOS strings files.

    See Also

    ppdc(1), ppdhtml(1), ppdi(1), ppdmerge(1), ppdcfile(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-printers.conf.html000664 000765 000024 00000002771 13255074424 021110 0ustar00msweetstaff000000 000000 printers.conf(5)

    printers.conf(5)

    Name

    printers.conf - printer configuration file for cups

    Description

    The printers.conf file defines the local printers that are available. It is normally located in the /etc/cups directory and is maintained by the cupsd(8) program. This file is not intended to be edited or managed manually.

    Notes

    The name, location, and format of this file are an implementation detail that will change in future releases of CUPS.

    See Also

    classes.conf(5), cupsd(8), cupsd.conf(5), mime.convs(5), mime.types(5), subscriptions.conf(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/man-subscriptions.conf.html000664 000765 000024 00000003035 13255074424 022143 0ustar00msweetstaff000000 000000 subscriptions.conf(5)

    subscriptions.conf(5)

    Name

    subscriptions.conf - subscription configuration file for cups

    Description

    The subscriptions.conf file defines the local event notification subscriptions that are active. It is normally located in the /etc/cups directory and is maintained by the cupsd(8) program. This file is not intended to be edited or managed manually.

    Notes

    The name, location, and format of this file are an implementation detail that will change in future releases of CUPS.

    See Also

    classes.conf(5), cupsd(8), cupsd.conf(5), mime.convs(5), mime.types(5), printers.conf(5), CUPS Online Help (http://localhost:631/help)

    Copyright

    Copyright © 2007-2017 by Apple Inc. cups-2.2.7/doc/help/network.html000664 000765 000024 00000066267 13255074424 017250 0ustar00msweetstaff000000 000000 Using Network Printers

    Using Network Printers

    This help document describes how to discover, configure, and use TCP/IP network printers with CUPS.

    Getting the IP Address

    Every network printer or print server has a unique Internet Protocol (IP) address associated with it. This address is either configured manually or set using an automatic network protocol such as the Boot Protocol (BOOTP), Dynamic Host Control Protocol (DHCP), Reverse Address Resolution Protocol (RARP), or ZeroConf.

    You can normally find the IP address of a printer on the printer's control panel or by printing the configuration or status page. The Simple Network Management Protocol (SNMP) can also be used to get the IP address remotely.

    Configuring the IP Address

    When you first install a network printer or print server on your LAN, you need to set the Internet Protocol ("IP") address. Most higher-end "workgroup" printers allow you to set the address through the printer control panel. However, if you have many printers you will want to assign the addresses remotely - this makes administration a bit easier and avoids assigning duplicate addresses accidentally.

    To setup your printer or print server for remote address assignment, you'll need the Ethernet Media Access Control ("MAC") address, also sometimes called a node address, and the IP address you want to use for the device. The Ethernet MAC address can often be found on the printer test page or bottom of the print server.

    Configuring the IP Address Using DHCP

    The DHCP protocol is the usual way of setting the IP address of a printer on a managed network. Using the standard dhcpd(8) program supplied with UNIX you simply need to add a line to the /etc/dhcpd.conf file:

    host hostname {
      hardware ethernet mac-address;
      fixed-address ip-address;
    }
    

    Make sure that the hostname you use is also listed in the /etc/hosts file or is registered with your DNS server.

    Configuring the IP Address Using BOOTP

    The BOOTP protocol is used when you need to provide additional information such as the location of a configuration file to the network interface. Using the standard bootpd(8) program supplied with UNIX you simply need to add a line to the /etc/bootptab file:

    myprinter:ha=080069001234:ip=192.0.2.2:t144=myprinter.boot
    

    The myprinter.boot file resides in the /usr/local/boot directory by default. If you do not need to provide a boot file you may leave the last part of the line blank.

    Note: Some versions of UNIX do not enable the BOOTP service by default. The /etc/inetd.conf or /etc/xinetd.d/bootp file usually contains a line for the BOOTP service that can be uncommented if needed.

    Verifying the Printer Connection

    To test that the IP address has been successfully assigned and that the printer is properly connected to your LAN, type:

    ping ip-address
    

    If the connection is working properly you will see something like:

    ping myprinter
    PING myprinter (192.0.2.2): 56 data bytes
    64 bytes from 192.0.2.2: icmp_seq=0 ttl=15 time=5 ms
    64 bytes from 192.0.2.2: icmp_seq=1 ttl=15 time=3 ms
    64 bytes from 192.0.2.2: icmp_seq=2 ttl=15 time=3 ms
    64 bytes from 192.0.2.2: icmp_seq=3 ttl=15 time=3 ms
    

    If not, verify that the printer or print server is connected to the LAN, it is powered on, the LAN cabling is good, and the IP address is set correctly. You can usually see the current IP address and network status by printing a configuration or test page on the device.

    Network Protocols Supported by CUPS

    CUPS supports most network printers using one of three TCP/IP-based protocols. Printer discovery is currently accomplished using the SNMP protocol, however future versions of CUPS will also include support for multicast DNS service discovery as well.

    AppSocket Protocol

    The AppSocket protocol (sometimes also called the JetDirect protocol, owing to its origins with the HP JetDirect network interfaces) is the simplest, fastest, and generally the most reliable network protocol used for printers. AppSocket printing normally happens over port 9100 and uses the socket URI scheme:

    socket://ip-address-or-hostname
    socket://ip-address-or-hostname/?option=value
    socket://ip-address-or-hostname/?option=value&option=value
    socket://ip-address-or-hostname:port-number
    socket://ip-address-or-hostname:port-number/?option=value
    socket://ip-address-or-hostname:port-number/?option=value&option=value
    

    The "contimeout" option controls the number of seconds that the backend will wait to obtain a connection to the printer. The default is 1 week.

    The "snmp" option controls whether the socket backend queries for supply and page count information via SNMP.

    The "waiteof" option controls whether the socket backend waits for the printer to complete the printing of the job. The default is to wait.

    Internet Printing Protocol (IPP)

    IPP is the only protocol that CUPS supports natively and is supported by most network printers and print servers. IPP printing normally happens over port 631 and uses the http (Windows), ipp, and ipps URI schemes:

    http://ip-address-or-hostname:port-number/resource
    http://ip-address-or-hostname:port-number/resource?option=value
    http://ip-address-or-hostname:port-number/resource?option=value&option=value
    ipp://ip-address-or-hostname/resource
    ipp://ip-address-or-hostname/resource?option=value
    ipp://ip-address-or-hostname/resource?option=value&option=value
    ipp://ip-address-or-hostname:port-number/resource
    ipp://ip-address-or-hostname:port-number/resource?option=value
    ipp://ip-address-or-hostname:port-number/resource?option=value&option=value
    ipps://ip-address-or-hostname/resource
    ipps://ip-address-or-hostname/resource?option=value
    ipps://ip-address-or-hostname/resource?option=value&option=value
    ipps://ip-address-or-hostname:port-number/resource
    ipps://ip-address-or-hostname:port-number/resource?option=value
    ipps://ip-address-or-hostname:port-number/resource?option=value&option=value
    

    The ipp backend supports many options, which are summarized in Table 2.

    Table 2: IPP URI Options
    Option Description
    encryption=always Specifies that the connection to the IPP server should be encrypted using SSL.
    encryption=ifrequested Specifies that the connection to the IPP server should only be encrypted if the server requests it.
    encryption=never Specifies that the connection to the IPP server should not be encrypted.
    encryption=required Specifies that the connection to the IPP server should be encrypted using TLS.
    snmp=false Specifies that SNMP supply and page count queries should not be performed.
    version=1.0 Specifies that version 1.0 of the IPP protocol should be used instead of the default version 2.0.
    version=1.1 Specifies that version 1.1 of the IPP protocol should be used instead of the default version 2.0.
    version=2.1 Specifies that version 2.1 of the IPP protocol should be used instead of the default version 2.0.
    waitjob=false Specifies that the IPP backend should not wait for the job to complete.
    waitprinter=false Specifies that the IPP backend should not wait for the printer to become idle before sending the print job.

    Line Printer Daemon (LPD) Protocol

    LPD is the original network printing protocol and is supported by many network printers. Due to limitations in the LPD protocol, we do not recommend using it if the printer or server supports one of the other protocols. LPD printing normally happens over port 515 and uses the lpd URI scheme:

    lpd://ip-address-or-hostname/queue
    lpd://username@ip-address-or-hostname/queue
    lpd://ip-address-or-hostname/queue?option=value
    lpd://username@ip-address-or-hostname/queue?option=value
    lpd://ip-address-or-hostname/queue?option=value&option=value
    lpd://username@ip-address-or-hostname/queue?option=value&option=value
    

    Table 3 summarizes the options supported by the lpd backend.

    Table 3: LPD URI Options
    Option Description
    banner=on Specifies that a banner page should be printed by the server.
    contimeout=seconds Specifies the number of seconds to wait for the connection to the server to complete.
    format=c Specifies that the print data is a CIF file.
    format=d Specifies that the print data is a DVI file.
    format=f Specifies that the print data is a plain text file.
    format=g Specifies that the print data is a Berkeley plot file.
    format=l Specifies that the print data is a raw (preformatted) print file.
    format=n Specifies that the print data is a ditroff file.
    format=o Specifies that the print data is a PostScript file.
    format=p Specifies that the print data is a plain text file that should be "pretty" printed with a header and footer.
    format=r Specifies that the print data is a FORTRAN carriage control file.
    format=t Specifies that the print data is a troff Graphic Systems C/A/T phototypesetter file.
    format=v Specifies that the print data is a Sun raster file.
    order=data,control Specifies that the print data files should be sent before the control file.
    reserve=none Specifies that the backend should not reserve a source port.
    reserve=rfc1179 Specifies that the backend should reserve a source port from 721 to 731 as required by RFC 1179.
    sanitize_title=no Specifies that the job title string should not be restricted to ASCII alphanumeric and space characters.
    sanitize_title=yes Specifies that the job title string should be restricted to ASCII alphanumeric and space characters.
    snmp=false Specifies that SNMP supply and page count queries should not be performed.
    timeout=seconds Specifies the number of seconds to wait for LPD commands to complete.

    Common Network Printer URIs

    Once you have set the IP address you can access the printer or print server using the ipp, lpd, or socket backends. Table 1 shows a list of common network interfaces and printer servers and the settings you should use with CUPS:

    Table 1: Common Device URIs
    Model/Manufacturer Device URI(s)
    Apple LaserWriter lpd://address/PASSTHRU
    Axis w/o IPP
    Axis OfficeBasic
    (see directions)
    socket://address:9100
    socket://address:9101
    socket://address:9102
    Axis w/IPP ipp://address/LPT1
    ipp://address/LPT2
    ipp://address/COM1
    Castelle LANpressTM lpd://address/pr1
    lpd://address/pr2
    lpd://address/pr3
    DPI NETPrint lpd://address/pr1
    lpd://address/pr2
    lpd://address/pr3
    DLink DP-301P+ socket://address
    EFI® Fiery® RIP lpd://address/print
    EPSON® Multiprotocol Ethernet Interface Board socket://address
    Extended System ExtendNET lpd://address/pr1
    lpd://address/pr2
    lpd://address/pr3
    Hewlett Packard JetDirect socket://address:9100
    socket://address:9101
    socket://address:9102
    Intel® NetportExpress XL, PRO/100 lpd://address/LPT1_PASSTHRU
    lpd://address/LPT2_PASSTHRU
    lpd://address/COM1_PASSTHRU
    LexmarkTM MarkNet lpd://address/ps
    Linksys EtherFast®
    (see directions)
    socket://address:4010
    socket://address:4020
    socket://address:4030
    Linksys PSUS4 lpd://address/lp
    Kodak® lpd://address/ps
    Netgear WGPS606 lpd://address/L1
    lpd://address/L2
    QMS® CrownNetTM lpd://address/ps
    Tektronix® PhaserShareTM socket://address:9100
    XEROX® 4512 NIC lpd://address/PORT1
    XEROX® XNIC lpd://address/PASSTHRU
    XEROX® (most others) socket://address:5503

    Troubleshooting SNMP Discovery Problems

    Whenever you view the administration web page or a list of supported device URIs, the snmp backend can probe the local network(s) using Simple Network Management Protocol (SNMP) v1 broadcasts. Printers that respond to these broadcasts are then interrogated for the make, model, and supported protocols, yielding a device URI that can be used to add the printer.

    That said, the SNMP requests sometimes expose problems in vendor implementations. If you are experiencing long delays in loading the CUPS web interface administration page, or if you don't see your printer listed, the following instructions will help you to diagnose those problems and/or provide important feedback to the CUPS developers so that we can correct problems and improve the SNMP backend in future releases.

    Quick Fixes

    If you don't use "public" as your community name, edit or create (as needed) a text file called /etc/cups/snmp.conf and put the following line in it:

    Community your community name
    

    The SNMP backend will not be able to find any printers on your network if SNMP v1 or broadcasting are not supported on your network.

    Basic Debugging

    The SNMP backend supports a debugging mode that is activated by running it from a shell prompt. If you are using Bash (/bin/bash), Bourne shell (/bin/sh), Korn shell (/bin/ksh), or Z shell (/bin/zsh), you can run the following command to get a verbose log of the SNMP backend:

    CUPS_DEBUG_LEVEL=2 /usr/lib/cups/backend/snmp 2>&1 | tee snmp.log
    

    For C shell (/bin/csh) and TCsh (/bin/tcsh), use the following command instead:

    (setenv CUPS_DEBUG_LEVEL 2; /usr/lib/cups/backend/snmp) |& tee snmp.log
    

    On macOS you'll find the SNMP backend in /usr/libexec/cups/backend instead:

    CUPS_DEBUG_LEVEL=2 /usr/libexec/cups/backend/snmp 2>&1 | tee snmp.log
    

    The output will look something like this:

     1  INFO: Using default SNMP Address @LOCAL
     2  INFO: Using default SNMP Community public
     3  DEBUG: Scanning for devices in "public" via "@LOCAL"...
     4  DEBUG: 0.000 Sending 46 bytes to 192.168.2.255...
     5  DEBUG: SEQUENCE 44 bytes
     6  DEBUG:     INTEGER 1 bytes 0
     7  DEBUG:     OCTET STRING 6 bytes "public"
     8  DEBUG:     Get-Request-PDU 31 bytes
     9  DEBUG:         INTEGER 4 bytes 1149539174
    10  DEBUG:         INTEGER 1 bytes 0
    11  DEBUG:         INTEGER 1 bytes 0
    12  DEBUG:         SEQUENCE 17 bytes
    13  DEBUG:             SEQUENCE 15 bytes
    14  DEBUG:                 OID 11 bytes .1.3.6.1.2.1.25.3.2.1.2.1
    15  DEBUG:                 NULL VALUE 0 bytes
    16  DEBUG: 0.001 Received 55 bytes from 192.168.2.229...
    17  DEBUG: community="public"
    18  DEBUG: request-id=1149539174
    19  DEBUG: error-status=0
    20  DEBUG: SEQUENCE 53 bytes
    21  DEBUG:     INTEGER 1 bytes 0
    22  DEBUG:     OCTET STRING 6 bytes "public"
    23  DEBUG:     Get-Response-PDU 40 bytes
    24  DEBUG:         INTEGER 4 bytes 1149539174
    25  DEBUG:         INTEGER 1 bytes 0
    26  DEBUG:         INTEGER 1 bytes 0
    27  DEBUG:         SEQUENCE 26 bytes
    28  DEBUG:             SEQUENCE 24 bytes
    29  DEBUG:                 OID 11 bytes .1.3.6.1.2.1.25.3.2.1.2.1
    30  DEBUG:                 OID 9 bytes .1.3.6.1.2.1.25.3.1.5
    31  DEBUG: add_cache(addr=0xbfffe170, addrname="192.168.2.229",
        uri="(null)", id="(null)", make_and_model="(null)")
    32  DEBUG: 0.002 Sending 46 bytes to 192.168.2.229...
    33  DEBUG: SEQUENCE 44 bytes
    34  DEBUG:     INTEGER 1 bytes 0
    35  DEBUG:     OCTET STRING 6 bytes "public"
    36  DEBUG:     Get-Request-PDU 31 bytes
    37  DEBUG:         INTEGER 4 bytes 1149539175
    38  DEBUG:         INTEGER 1 bytes 0
    39  DEBUG:         INTEGER 1 bytes 0
    40  DEBUG:         SEQUENCE 17 bytes
    41  DEBUG:             SEQUENCE 15 bytes
    42  DEBUG:                 OID 11 bytes .1.3.6.1.2.1.25.3.2.1.3.1
    43  DEBUG:                 NULL VALUE 0 bytes
    44  DEBUG: 0.003 Received 69 bytes from 192.168.2.229...
    45  DEBUG: community="public"
    46  DEBUG: request-id=1149539175
    47  DEBUG: error-status=0
    48  DEBUG: SEQUENCE 67 bytes
    49  DEBUG:     INTEGER 1 bytes 0
    50  DEBUG:     OCTET STRING 6 bytes "public"
    51  DEBUG:     Get-Response-PDU 54 bytes
    52  DEBUG:         INTEGER 4 bytes 1149539175
    53  DEBUG:         INTEGER 1 bytes 0
    54  DEBUG:         INTEGER 1 bytes 0
    55  DEBUG:         SEQUENCE 40 bytes
    56  DEBUG:             SEQUENCE 38 bytes
    57  DEBUG:                 OID 11 bytes .1.3.6.1.2.1.25.3.2.1.3.1
    58  DEBUG:                 OCTET STRING 23 bytes "HP LaserJet 4000
        Series"
    59  DEBUG: 1.001 Probing 192.168.2.229...
    60  DEBUG: 1.001 Trying socket://192.168.2.229:9100...
    61  DEBUG: 192.168.2.229 supports AppSocket!
    62  DEBUG: 1.002 Scan complete!
    63  network socket://192.168.2.229 "HP LaserJet 4000 Series"
        "HP LaserJet 4000 Series 192.168.2.229" ""
    

    Dissecting the Output

    The first two lines are just informational and let you know that the default community name and address are being used. Lines 3-15 contain the initial SNMP query for the device type OID (.1.3.6.1.2.1.25.3.2.1.2.1) from the Host MIB.

    Lines 16-31 show the response we got from an HP LaserJet 4000 network printer. At this point we discover that it is a printer device and then send another SNMP query (lines 32-43) for the device description OID (.1.3.6.1.2.1.25.3.2.1.3.1) from the Host MIB as well.

    Lines 44-58 show the response to the device description query, which tells us that this is an HP LaserJet 4000 Series printer.

    On line 59 we start our active connection probe and discover that this print server supports the AppSocket (JetDirect) protocol on port 9100.

    Finally, line 63 shows the device information line for the print server that is sent to CUPS.

    Reporting Problems

    If you don't see your printer listed, or the wrong information is listed, then you need to gather more information on the printer. The easiest way to do this is to run the snmpwalk command:
    snmpwalk -Cc -v 1 -c public ip-address | tee snmpwalk.log
    

    where "ip-address" is the IP address of the printer or print server. You should see a lot of values stream by - the ones you want to see are:

    HOST-RESOURCES-MIB::hrDeviceType.1 = OID: HOST-RESOURCES-TYPES::hrDevicePrinter
    HOST-RESOURCES-MIB::hrDeviceDescr.1 = STRING: HP LaserJet 4000 Series
    

    The hrDeviceType line should show hrDevicePrinter; if not, then your printer or print server doesn't identify itself as a printer. The hrDeviceDescr line should provide a human-readable string for the make and model of the printer, although in some cases you'll just see something less useful like "Axis OfficeBASIC Parallel Print Server".

    Once you have collected the snmpwalk output, you should go to the CUPS Bugs & Features page to submit a feature request to support your printer or print server. Be sure to attach those two log files you created - they will help us to identify the SNMP values we need to look for.

    Configuring Print Servers

    Configuring Axis Print Servers

    The Axis print servers can be configured using BOOTP or DHCP. However, on models that do not provide IPP support an additional step must be performed to configure the TCP/IP portion of the print server for use with CUPS.

    Each print server contains a configuration file named config that contains a list of network parameters used by the server. To modify this file you must first download it from the print server using the ftp(1) program:

    ftp ip-address
    Connected to ip-address.
    220 Axis NPS ### FTP Printer Server V#.## MON DD YEAR ready.
    ftp> user root
    331 User name ok, need password
    Password: pass (this is not echoed)
    230 User logged in
    ftp> get config
    local: config remote: config
    200 PORT command successful.
    150 Opening data connection for config (192,0,2,2),
    (mode ascii).
    226 Transfer complete.
    ##### bytes received in #.## seconds (##### Kbytes/s)
    ftp> quit
    221 Goodbye.
    

    Next, edit the file with your favorite text editor and locate the lines beginning with:

    RTN_OPT.     : YES
    RTEL_PR1.    : 0
    RTEL_PR2.    : 0
    RTEL_PR3.    : 0
    RTEL_PR4.    : 0
    RTEL_PR5.    : 0
    RTEL_PR6.    : 0
    RTEL_PR7.    : 0
    RTEL_PR8.    : 0
    

    Change the RTN_OPT line to read:

    RTN_OPT.     : NO
    

    This disables the Reverse TELNET protocol and enables the standard TELNET protocol on the print server. Next, assign a port number for each parallel and serial port on the server as follows:

    RTEL_PR1.    : 9100
    RTEL_PR2.    : 9101
    RTEL_PR3.    : 9102
    RTEL_PR4.    : 9103
    RTEL_PR5.    : 9104
    RTEL_PR6.    : 9105
    RTEL_PR7.    : 9106
    RTEL_PR8.    : 9107
    

    This essentially makes the Axis print server look like a Hewlett Packard JetDirect EX print server. Save the file and then upload the new config file using the ftp command:

    ftp ip-address
    Connected to ip-address.
    220 Axis NPS ### FTP Printer Server V#.## MON DD YEAR ready.
    ftp> user root
    331 User name ok, need password
    Password: pass (this is not echoed)
    230 User logged in
    ftp> put config CONFIG
    local: config remote: CONFIG
    200 PORT command successful.
    150 Opening data connection for config (192,0,2,2), (mode ascii).
    226 Transfer complete.
    ##### bytes received in #.## seconds (##### Kbytes/s)
    ftp> get hardreset
    local: hardreset remote: hardreset
    200 PORT command successful.
    421 Axis NPS ### hard reset, closing connection.
    ftp> quit
    221 Goodbye.
    

    Your Axis print server is now ready for use!

    Configuring Linksys Print Servers

    The Linksys print servers can be configured using BOOTP or DHCP. Like older Axis print servers, an additional step must be performed to configure the TCP/IP portion of the print server for use with CUPS.

    Each print server contains a configuration file named CONFIG that contains a list of network parameters used by the server. To modify this file you must first download it from the print server using the ftp(1) program:

    ftp -n ip-address
    Connected to ip-address.
    220 Print Server Ready.
    Remote system type is Print.
    ftp> get CONFIG
    local: CONFIG remote: CONFIG
    200 Command OK.
    150 Open ASCII Mode Connection.
    WARNING! 68 bare linefeeds received in ASCII mode
    File may not have transferred correctly.
    226 Transfer complete.
    ##### bytes received in #.## seconds (##### Kbytes/s)
    ftp> quit
    221 Goodbye.
    

    Next, edit the file with your favorite text editor and locate the lines beginning with:

    0100 L1_PROUT:P1
    0120 L2_PROUT:P1
    0140 L3_PROUT:P1
    

    Change the port number for each parallel and serial port on the server as follows:

    0100 L1_PROUT:P1
    0120 L2_PROUT:P2
    0140 L3_PROUT:P3
    

    This maps each virtual printer with a physical port. Save the file and then upload the new CONFIG file using the ftp command:

    ftp -n ip-address
    Connected to ip-address.
    220 Print Server Ready.
    Remote system type is Print.
    ftp> put CONFIG
    local: CONFIG remote: CONFIG
    200 Command OK.
    150 Open ASCII Mode Connection.
    226 Transfer complete.
    ##### bytes received in #.## seconds (##### Kbytes/s)
    ftp> quit
    221 Goodbye.
    

    Your Linksys print server is now ready for use!

    cups-2.2.7/doc/help/options.html000664 000765 000024 00000041656 13255074424 017245 0ustar00msweetstaff000000 000000 Command-Line Printing and Options

    Command-Line Printing and Options

    CUPS provides both the System V (lp(1)) and Berkeley (lpr(1)) printing commands for printing files. In addition, it supported a large number of standard and printer-specific options that allow you to control how and where files are printed.

    Printing Files

    CUPS understands many different types of files directly, including text, PostScript, PDF, and image files. This allows you to print from inside your applications or at the command-line, whichever is most convenient! Type either of the following commands to print a file to the default (or only) printer on the system:

    lp filename
    lpr filename
    

    Choosing a Printer

    Many systems will have more than one printer available to the user. These printers can be attached to the local system via a parallel, serial, or USB port, or available over the network. Use the lpstat(1) command to see a list of available printers:

    lpstat -p -d
    

    The -p option specifies that you want to see a list of printers, and the -d option reports the current default printer or class.

    Use the -d option with the lp command to print to a specific printer:

    lp -d printer filename
    

    or the -P option with the lpr command:

    lpr -P printer filename
    

    Setting the Default Printer

    If you normally use a particular printer, you can tell CUPS to use it by default using the lpoptions(1) command:

    lpoptions -d printer
    

    Printing the Output of a Program

    Both the lp and lpr commands support printing from the standard input:

    program | lp
    program | lp -d printer
    program | lpr
    program | lpr -P printer
    

    If the program does not provide any output, then nothing will be queued for printing.

    Specifying Printer Options

    For many types of files, the default printer options may be sufficient for your needs. However, there may be times when you need to change the options for a particular file you are printing.

    The lp and lpr commands allow you to pass printer options using the -o option:

    lp -o landscape -o fit-to-page -o media=A4 filename.jpg
    lpr -o landscape -o fit-to-page -o media=A4 filename.jpg
    

    The available printer options vary depending on the printer. The standard options are described in the "Standard Printing Options" section below. Printer-specific options are also available and can be listed using the lpoptions command:

    lpoptions -p printer -l
    

    Creating Saved Options

    Saved options are supported in CUPS through printer instances. Printer instances are, as their name implies, copies of a printer that have certain options associated with them. Use the lpoptions command to create a printer instance:

    lpoptions -p printer/instance -o name=value ...
    

    The -p printer/instance option provides the name of the instance, which is always the printer name, a slash, and the instance name which can contain any printable characters except space and slash. The remaining options are then associated with the instance instead of the main queue. For example, the following command creates a duplex instance of the LaserJet queue:

    lpoptions -p LaserJet/duplex -o sides=two-sided-long-edge
    

    Instances do not inherit lpoptions from the main queue.

    Printing Multiple Copies

    Both the lp and lpr commands have options for printing more than one copy of a file:

    lp -n num-copies filename
    lpr -#num-copies filename
    

    Copies are normally not collated for you. Use the -o collate=true option to get collated copies:

    lp -n num-copies -o collate=true filename
    lpr -#num-copies -o collate=true filename
    

    Canceling a Print Job

    The cancel(1) and lprm(1) commands cancel a print job:

    cancel job-id
    lprm job-id
    

    The job-id is the number that was reported to you by the lp command. You can also get the job ID using the lpq(1) or lpstat commands:

    lpq
    lpstat
    

    Moving a Print Job

    The lpmove(8) command moves a print job to a new printer or class:

    lpmove job-id destination
    

    The job-id is the number that was reported to you by the lp or lpstat commands. Destination is the name of a printer or class that you want to actually print the job.

    Note:

    The lpmove command is located in the system command directory (typically /usr/sbin or /usr/local/sbin), and so may not be in your command path. Specify the full path to the command if you get a "command not found" error, for example:

    /usr/sbin/lpmove foo-123 bar
    

    Standard Printing Options

    The following options apply when printing all types of files.

    Selecting the Media Size, Type, and Source

    The -o media=xyz option sets the media size, type, and/or source:

    lp -o media=Letter filename
    lp -o media=Letter,MultiPurpose filename
    lpr -o media=Letter,Transparency filename
    lpr -o media=Letter,MultiPurpose,Transparency filename
    

    The available media sizes, types, and sources depend on the printer, but most support the following options (case is not significant):

    • Letter - US Letter (8.5x11 inches, or 216x279mm)
    • Legal - US Legal (8.5x14 inches, or 216x356mm)
    • A4 - ISO A4 (8.27x11.69 inches, or 210x297mm)
    • COM10 - US #10 Envelope (9.5x4.125 inches, or 241x105mm)
    • DL - ISO DL Envelope (8.66x4.33 inches, or 220x110mm)
    • Transparency - Transparency media type or source
    • Upper - Upper paper tray
    • Lower - Lower paper tray
    • MultiPurpose - Multi-purpose paper tray
    • LargeCapacity - Large capacity paper tray

    The actual options supported are defined in the printer's PPD file in the PageSize, InputSlot, and MediaType options. You can list them using the lpoptions(1) command:

    lpoptions -p printer -l
    

    When Custom is listed for the PageSize option, you can specify custom media sizes using one of the following forms:

    lp -o media=Custom.WIDTHxLENGTH filename
    lp -o media=Custom.WIDTHxLENGTHin filename
    lp -o media=Custom.WIDTHxLENGTHcm filename
    lp -o media=Custom.WIDTHxLENGTHmm filename
    

    where "WIDTH" and "LENGTH" are the width and length of the media in points, inches, centimeters, or millimeters, respectively.

    Setting the Orientation

    The -o landscape option will rotate the page 90 degrees to print in landscape orientation:

    lp -o landscape filename
    lpr -o landscape filename
    

    The -o orientation-requested=N option rotates the page depending on the value of N:

    • -o orientation-requested=3 - portrait orientation (no rotation)
    • -o orientation-requested=4 - landscape orientation (90 degrees)
    • -o orientation-requested=5 - reverse landscape or seascape orientation (270 degrees)
    • -o orientation-requested=6 - reverse portrait or upside-down orientation (180 degrees)

    Printing On Both Sides of the Paper

    The -o sides=two-sided-short-edge and -o sides=two-sided-long-edge options will enable two-sided printing on the printer if the printer supports it. The -o sides=two-sided-short-edge option is suitable for landscape pages, while the -o sides=two-sided-long-edge option is suitable for portrait pages:

    lp -o sides=two-sided-short-edge filename
    lp -o sides=two-sided-long-edge filename
    lpr -o sides=two-sided-long-edge filename
    

    The default is to print single-sided:

    lp -o sides=one-sided filename
    lpr -o sides=one-sided filename
    

    Selecting the Banner Page(s)

    The -o job-sheets=start,end option sets the banner page(s) to use for a job:

    lp -o job-sheets=none filename
    lp -o job-sheets=standard filename
    lpr -o job-sheets=classified,classified filename
    

    If only one banner file is specified, it will be printed before the files in the job. If a second banner file is specified, it is printed after the files in the job.

    The available banner pages depend on the local system configuration; CUPS includes the following banner files:

    • none - Do not produce a banner page.
    • classified - A banner page with a "classified" label at the top and bottom.
    • confidential - A banner page with a "confidential" label at the top and bottom.
    • secret - A banner page with a "secret" label at the top and bottom.
    • standard - A banner page with no label at the top and bottom.
    • topsecret - A banner page with a "top secret" label at the top and bottom.
    • unclassified - A banner page with an "unclassified" label at the top and bottom.

    Holding Jobs for Later Printing

    The -o job-hold-until=when option tells CUPS to delay printing until the "when" time, which can be one of the following:

    • -o job-hold-until=indefinite; print only after released by the user or an administrator
    • -o job-hold-until=day-time; print from 6am to 6pm local time
    • -o job-hold-until=night; print from 6pm to 6am local time
    • -o job-hold-until=second-shift; print from 4pm to 12am local time
    • -o job-hold-until=third-shift; print from 12am to 8am local time
    • -o job-hold-until=weekend; print on Saturday or Sunday
    • -o job-hold-until=HH:MM; print at the specified UTC time

    Releasing Held Jobs

    Aside from the web interface, you can use the lp command to release a held job:

    lp -i job-id -H resume
    

    where "job-id" is the job ID reported by the lpstat command.

    Setting the Job Priority

    The -o job-priority=NNN option tells CUPS to assign a priority to your job from 1 (lowest) to 100 (highest), which influences where the job appears in the print queue. Higher priority jobs are printed before lower priority jobs, however submitting a new job with a high priority will not interrupt an already printing job.

    Specifying the Output Order

    The -o outputorder=normal and -o outputorder=reverse options specify the order of the pages. Normal order prints page 1 first, page 2 second, and so forth. Reverse order prints page 1 last.

    Selecting a Range of Pages

    The -o page-ranges=pages option selects a range of pages for printing:

    lp -o page-ranges=1 filename
    lp -o page-ranges=1-4 filename
    lp -o page-ranges=1-4,7,9-12 filename
    lpr -o page-ranges=1-4,7,9-12 filename
    

    As shown above, the pages value can be a single page, a range of pages, or a collection of page numbers and ranges separated by commas. The pages will always be printed in ascending order, regardless of the order of the pages in the page-ranges option.

    The default is to print all pages.

    Note:

    The page numbers used by page-ranges refer to the output pages and not the document's page numbers. Options like number-up can make the output page numbering not match the document page numbers.

    N-Up Printing

    The -o number-up=value option selects N-Up printing. N-Up printing places multiple document pages on a single printed page. CUPS supports 1, 2, 4, 6, 9, and 16-Up formats; the default format is 1-Up:

    lp -o number-up=1 filename
    lp -o number-up=2 filename
    lp -o number-up=4 filename
    lpr -o number-up=16 filename
    

    The -o page-border=value option chooses the border to draw around each page:

    • -o page-border=double; draw two hairline borders around each page
    • -o page-border=double-thick; draw two 1pt borders around each page
    • -o page-border=none; do not draw a border (default)
    • -o page-border=single; draw one hairline border around each page
    • -o page-border=single-thick; draw one 1pt border around each page

    The -o number-up-layout=value option chooses the layout of the pages on each output page:

    • -o number-up-layout=btlr; Bottom to top, left to right
    • -o number-up-layout=btrl; Bottom to top, right to left
    • -o number-up-layout=lrbt; Left to right, bottom to top
    • -o number-up-layout=lrtb; Left to right, top to bottom (default)
    • -o number-up-layout=rlbt; Right to left, bottom to top
    • -o number-up-layout=rltb; Right to left, top to bottom
    • -o number-up-layout=tblr; Top to bottom, left to right
    • -o number-up-layout=tbrl; Top to bottom, right to left

    Scaling to Fit

    The -o fit-to-page option specifies that the document should be scaled to fit on the page:

    lp -o fit-to-page filename
    lpr -o fit-to-page filename
    

    The default is to use the size specified in the file.

    Note:

    This feature depends upon an accurate size in the print file. If no size is given in the file, the page may be scaled incorrectly!

    Printing in Reverse Order

    The -o outputorder=reverse option will print the pages in reverse order:

    lp -o outputorder=reverse filename
    lpr -o outputorder=reverse filename
    

    Similarly, the -o outputorder=normal option will print starting with page 1:

    lp -o outputorder=normal filename
    lpr -o outputorder=normal filename
    

    The default is -o outputorder=normal for printers that print face down and -o outputorder=reverse for printers that print face up.

    Printing Mirrored Pages

    The -o mirror option flips each page along the vertical axis to produce a mirrored image:

    lp -o mirror filename
    lpr -o mirror filename
    

    This is typically used when printing on T-shirt transfer media or sometimes on transparencies.

    Raw or Unfiltered Output

    The -o raw option allows you to send files directly to a printer without filtering. This is sometimes required when printing from applications that provide their own "printer drivers" for your printer:

    lp -o raw filename
    lpr -o raw filename
    

    The -l option can also be used with the lpr command to send files directly to a printer:

    lpr -l filename
    
    cups-2.2.7/doc/help/overview.html000664 000765 000024 00000006636 13255074424 017417 0ustar00msweetstaff000000 000000 Overview of CUPS

    Overview of CUPS

    CUPS is the software you use to print from applications like the web browser you are using to read this page. It converts the page descriptions produced by your application (put a paragraph here, draw a line there, and so forth) into something your printer can understand and then sends the information to the printer for printing.

    Now, since every printer manufacturer does things differently, printing can be very complicated. CUPS does its best to hide this from you and your application so that you can concentrate on printing and less on how to print. Generally, the only time you need to know anything about your printer is when you use it for the first time, and even then CUPS can often figure things out on its own.

    How Does It Work?

    The first time you print to a printer, CUPS creates a queue to keep track of the current status of the printer (everything OK, out of paper, etc.) and any pages you have printed. Most of the time the queue points to a printer connected directly to your computer via a USB port, however it can also point to a printer on your network, a printer on the Internet, or multiple printers depending on the configuration. Regardless of where the queue points, it will look like any other printer to you and your applications.

    Every time you print something, CUPS creates a job which contains the queue you are sending the print to, the name of the document you are printing, and the page descriptions. Job are numbered (queue-1, queue-2, and so forth) so you can monitor the job as it is printed or cancel it if you see a mistake. When CUPS gets a job for printing, it determines the best programs (filters, printer drivers, port monitors, and backends) to convert the pages into a printable format and then runs them to actually print the job.

    When the print job is completely printed, CUPS removes the job from the queue and moves on to any other jobs you have submitted. You can also be notified when the job is finished, or if there are any errors during printing, in several different ways.

    Where Do I Begin?

    Click on the Administration tab. Click on the Add Printer button and follow the prompts.

    When you are asked for a username and password, enter your login username and password or the "root" username and password. On macOS®, the login username (or "short name") is typically your first and last name in lowercase.

    After the printer is added, CUPS will ask you to set the default printer options (paper size, output mode, etc.) for the printer. Make any changes as needed and then click on the Set Default Options button to save them. Some printers also support auto-configuration - click on the Query Printer for Default Options button to update the options automatically.

    Once you have added the printer, you can print to it from any application. You can also choose Print Test Page from the maintenance menu to print a simple test page and verify that everything is working properly.

    cups-2.2.7/doc/help/policies.html000664 000765 000024 00000052401 13255074424 017347 0ustar00msweetstaff000000 000000 Managing Operation Policies

    Managing Operation Policies

    Operation policies are the rules used for each IPP operation in CUPS. These rules include things like "user must provide a password", "user must be in the system group", "allow only from the local system", and so forth. Until CUPS 1.2, these rules were largely hardcoded and could only be customized at a very basic level.

    CUPS 1.2 and later provides a fine-grained policy layer which allows you to completely redefine the rules for each operation and/or printer. Each policy is named and defines access control rules for each IPP operation. This document describes how to manage policies and their rules.

    The Basics

    Operation policies are used for all IPP requests sent to the scheduler and are evaluated after the Location based access control rules. This means that operation policies can only add additional security restrictions to a request, never relax them. Use Location based access control rules for server-wide limits and operation policies for limits on individual printers, tasks, or services.

    Policies are stored in the cupsd.conf file in Policy sections. Each policy has an alphanumeric name that is used to select it. Inside the policy section are one or more Limit subsections which list the operations that are affected by the rules inside it. Listing 1 shows the default operation policy, appropriately called "default", that is shipped with CUPS.

    The easiest way to add a policy to the cupsd.conf file is to use the web interface. Click on the Administration tab and then the Edit Configuration File button to edit the current cupsd.conf file. Click on the Save Changes button to save the changes and restart the scheduler. If you edit the cupsd.conf file from the console, make sure to restart the cupsd process before trying to use the new policy.

    Listing 1: Default Operation Policy
    
     1    <Policy default>
     2      # Job-related operations must be done by the owner or an
          administrator...
     3      <Limit Send-Document Send-URI Hold-Job Release-Job
          Restart-Job Purge-Jobs Set-Job-Attributes
          Create-Job-Subscription Renew-Subscription
          Cancel-Subscription Get-Notifications Reprocess-Job
          Cancel-Current-Job Suspend-Current-Job Resume-Job
          CUPS-Move-Job CUPS-Get-Document>
     4        Require user @OWNER @SYSTEM
     5        Order deny,allow
     6      </Limit>
     7
     8      # All administration operations require an administrator
          to authenticate...
     9      <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class
          CUPS-Delete-Class CUPS-Set-Default>
    10        AuthType Default
    11        Require user @SYSTEM
    12        Order deny,allow
    13      </Limit>
    14
    15      # All printer operations require a printer operator
          to authenticate...
    16      <Limit Pause-Printer Resume-Printer
          Set-Printer-Attributes Enable-Printer Disable-Printer
          Pause-Printer-After-Current-Job Hold-New-Jobs
          Release-Held-New-Jobs Deactivate-Printer Activate-Printer
          Restart-Printer Shutdown-Printer Startup-Printer
          Promote-Job Schedule-Job-After CUPS-Accept-Jobs
          CUPS-Reject-Jobs>
    17        AuthType Default
    18        Require user varies by OS
    19        Order deny,allow
    20      </Limit>
    21
    22      # Only the owner or an administrator can cancel or
          authenticate a job...
    23      <Limit Cancel-Job CUPS-Authenticate-Job>
    24        Require user @OWNER @SYSTEM
    25        Order deny,allow
    26      </Limit>
    27
    28      <Limit All>
    29        Order deny,allow
    30      </Limit>
    31    </Policy>
    

    The Default CUPS Operation Policy

    The policy definition starts with an opening Policy directive:

     1    <Policy default>
    

    The first Limit subsection defines the rules for IPP job operations:

     3      <Limit Send-Document Send-URI Hold-Job Release-Job
          Restart-Job Purge-Jobs Set-Job-Attributes
          Create-Job-Subscription Renew-Subscription
          Cancel-Subscription Get-Notifications Reprocess-Job
          Cancel-Current-Job Suspend-Current-Job Resume-Job
          CUPS-Move-Job CUPS-Get-Document>
     4        Require user @OWNER @SYSTEM
     5        Order deny,allow
     6      </Limit>
    

    The operation names are listed on a single line with spaces separating them. Each name corresponds to the IPP operation described in any of the IETF or PWG standards documents for the Internet Printing Protocol. Table 1 lists all of the operations that have been defined along with their usage in CUPS.

    The access control rules are listed after the Limit line and are the same as those used for Location sections. In this case, we require the owner of the job ("@OWNER") or a member of the SystemGroup ("@SYSTEM") to do the operation. Because we do not include an AuthType directive here, the user information can come from the IPP request itself or the authenticated username from the HTTP request. The administrative operations starting on line 9, however, do use the AuthType directive, and so administrative operations need to be authenticated:

     9      <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class
          CUPS-Delete-Class CUPS-Set-Default>
    10        AuthType Default
    11        Require user @SYSTEM
    12        Order deny,allow
    13      </Limit>
    14
    15      # All printer operations require a printer operator
          to authenticate...
    16      <Limit Pause-Printer Resume-Printer
          Set-Printer-Attributes Enable-Printer Disable-Printer
          Pause-Printer-After-Current-Job Hold-New-Jobs
          Release-Held-New-Jobs Deactivate-Printer Activate-Printer
          Restart-Printer Shutdown-Printer Startup-Printer
          Promote-Job Schedule-Job-After CUPS-Accept-Jobs
          CUPS-Reject-Jobs>
    17        AuthType Default
    18        Require user varies by OS
    19        Order deny,allow
    20      </Limit>
    

    The "Order deny,allow" line at the end of both Limit subsections allows the request to come from any system allowed by the Location sections elsewhere in the cupsd.conf file.

    The Cancel-Job and CUPS-Authenticate-Job operations are listed separately to allow the web interface to more easily edit their policy without disturbing the rest. Like the rest of the job operations, we want the job's owner ("@OWNER") or an administrator ("@SYSTEM") to do it:

    16      <Limit Cancel-Job CUPS-Authenticate-Job>
    17        Require user @OWNER @SYSTEM
    18        Order deny,allow
    19      </Limit>
    

    The last Limit subsection in any policy uses the special operation name All. CUPS will use the rules in this subsection for any operation you don't list specifically in the policy. In this case, all other operations are allowed without a username or authentication:

    21      <Limit All>
    22        Order deny,allow
    23      </Limit>
    24    </Policy>
    
    Table 1: IPP Operation Names
    Name Used by CUPS? Description
    Activate-Printer No Activates a printer or class.
    Cancel-Current-Job No Cancels the current job on a printer or class.
    Cancel-Job Yes Cancels a print job.
    Cancel-Jobs Yes Cancels all print jobs.
    Cancel-My-Jobs Yes Cancels a user's print job.
    Cancel-Subscription Yes Cancels an event subscription.
    Close-Job Yes Closes a user's print job so that it can be printed.
    Create-Job Yes Creates a print job with no files or URIs.
    Create-Job-Subscriptions Yes Creates one or more event subscriptions for a job.
    Create-Printer-Subscriptions Yes Creates one or more event subscriptions for a printer or the server.
    Deactivate-Printer No Deactivates a printer or class.
    Disable-Printer Yes Stops a printer or class.
    Enable-Printer Yes Starts a printer or class.
    Get-Job-Attributes Yes Gets information and options associated with a job.
    Get-Jobs Yes Gets a list of jobs.
    Get-Notifications Yes Gets (pending) events for an event subscription.
    Get-Printer-Attributes Yes Gets information and options associated with a printer or class.
    Get-Printer-Supported-Values Yes Gets -supported attributes for a printer based on job options.
    Get-Subscription-Attributes Yes Gets information for an event subscription.
    Get-Subscriptions Yes Gets a list of event subscriptions.
    Hold-Job Yes Holds a print job for printing.
    Hold-New-Jobs Yes Holds new jobs submitted to a printer or class.
    Pause-Printer Yes Stops a printer or class.
    Pause-Printer-After-Current-Job No Stops a printer or class after the current job is finished.
    Print-Job Yes Creates a print job with a single file.
    Print-URI No Create a print job with a single URI.
    Promote-Job No Prints a job before others.
    Purge-Jobs Yes Cancels all jobs on the server or a printer or class and removes the job history information.
    Release-Held-New-Jobs Yes Releases jobs that were held because of the Hold-New-Jobs operation.
    Release-Job Yes Releases a print job for printing.
    Renew-Subscription Yes Renews an event subscription that is about to expire.
    Reprocess-Job No Reprints a job on a different printer or class; CUPS has the CUPS-Move-Job operation instead.
    Restart-Job Yes Reprints a print job.
    Restart-Printer No Restarts a printer or class, resuming print jobs as needed.
    Resubmit-Job No Reprints a job with new options.
    Resume-Job No Resumes printing of a stopped job.
    Resume-Printer Yes Starts a printer or class.
    Schedule-Job-After No Prints a job after others.
    Send-Document Yes Adds a file to a print job.
    Send-URI No Adds a URI to a print job.
    Set-Printer-Attributes Yes Sets printer or class information; CUPS uses CUPS-Add-Modify-Printer and CUPS-Add-Modify-Class for most attributes instead.
    Set-Job-Attributes Yes Changes job options.
    Shutdown-Printer No Powers a printer or class off.
    Startup-Printer No Powers a printer or class on.
    Suspend-Current-Job No Stops the current job on a printer or class.
    Validate-Document No Validates a document request before sending.
    Validate-Job Yes Validates a print request before printing.
    CUPS-Accept-Jobs Yes Sets a printer's or class' printer-is-accepting-jobs attribute to true.
    CUPS-Add-Modify-Class Yes Adds or modifies a class.
    CUPS-Add-Modify-Printer Yes Adds or modifies a printer.
    CUPS-Authenticate-Job Yes Authenticates a job for printing.
    CUPS-Delete-Class * Yes Removes a class.
    CUPS-Delete-Printer * Yes Removes a printer.
    CUPS-Get-Classes * Yes Gets a list of classes.
    CUPS-Get-Default * Yes Gets the server/network default printer or class.
    CUPS-Get-Devices * Yes Gets a list of printer devices.
    CUPS-Get-Document Yes Retrieves a document file from a job.
    CUPS-Get-PPDs * Yes Gets a list of printer drivers or manufacturers.
    CUPS-Get-Printers * Yes Gets a list of printers and/or classes.
    CUPS-Move-Job Yes Moves a job to a different printer or class.
    CUPS-Reject-Jobs Yes Sets a printer's or class' printer-is-accepting-jobs attribute to false.
    CUPS-Set-Default * Yes Sets the server/network default printer or class.

    * = These operations only apply to the default policy.

    Creating Your Own Policies

    The easiest way to create a new policy is to start with the default policy and then make changes to the copy. The first change you'll make is to give the policy a new name. Policy names can use the same characters as a printer name, specifically all printable characters except space, slash (/), and pound (#):

    <Policy mypolicy>
    

    Then you need to decide exactly what limits you want for the policy. For example, if you want to allow any user to cancel any other users' jobs, you can change the Cancel-Job limits to:

    <Limit Cancel-Job>
      Order deny,allow
    </Limit>
    

    The directives inside the Limit subsection can use any of the normal limiting directives: Allow, AuthType, Deny, Encryption, Require, and Satisfy. Table 2 lists some basic "recipes" for different access control rules.

    Table 2: Access Control Recipes
    Access Level Directives to Use
    Allow Everyone
    Order deny,allow
    Allow from all
    Allow Everyone on the Local Network
    Order deny,allow
    Allow from @LOCAL
    Deny Everyone/Disable Operation(s)
    Order deny,allow
    Require Login (System) Password
    AuthType Basic
    Require CUPS (lppasswd) Password
    AuthType BasicDigest
    Require Kerberos
    AuthType Negotiate
    Require the Owner of a Job or Subscription
    Require user @OWNER
    Require an Administrative User
    Require user @SYSTEM
    Require Member of Group "foogroup"
    Require user @foogroup
    Require "john" or "mary"
    Require user john mary
    Require Encryption
    Encryption Required

    Creating a Policy for a Computer Lab

    One common operating scenario is a computer lab. The lab is managed by one or more technicians that assist the users of the lab and handle the basic administration tasks. Listing 2 shows an operation policy that only allows access from the lab's subnet, 10.0.2.x, and allows the lab technicians, who are members of a special UNIX group for that lab called "lab999", to do job, printer, and subscription management operations.

    Listing 2: Operation Policy for a Lab
    
     1    <Policy lab999>
     2      # Job- and subscription-related operations must be done
          by the owner, a lab technician, or an administrator...
     3      <Limit Send-Document Send-URI Hold-Job Release-Job
          Restart-Job Purge-Jobs Set-Job-Attributes
          Create-Job-Subscription Renew-Subscription
          Cancel-Subscription Get-Notifications Reprocess-Job
          Cancel-Current-Job Suspend-Current-Job Resume-Job
          CUPS-Move-Job Cancel-Job CUPS-Authenticate-Job CUPS-Get-Document>
     4        Require user @OWNER @lab999 @SYSTEM
     5        Order allow,deny
     6        Allow from 10.0.2.0/24
     7      </Limit>
     8
     9      # All administration operations require a lab technician
          or an administrator to authenticate...
    10      <Limit Pause-Printer Resume-Printer
          Set-Printer-Attributes Enable-Printer Disable-Printer
          Pause-Printer-After-Current-Job Hold-New-Jobs
          Release-Held-New-Jobs Deactivate-Printer Activate-Printer
          Restart-Printer Shutdown-Printer Startup-Printer
          Promote-Job Schedule-Job-After CUPS-Accept-Jobs
          CUPS-Reject-Jobs CUPS-Set-Default>
    11        AuthType Default
    12        Require user @lab999 @SYSTEM
    13        Order allow,deny
    14        Allow from 10.0.2.0/24
    15      </Limit>
    16
    17      # All other operations are allowed from the lab network...
    18      <Limit All>
    19        Order allow,deny
    20        Allow from 10.0.2.0/24
    21      </Limit>
    22    </Policy>
    

    Using Policies

    Once you have created a policy, you can use it in two ways. The first way is to assign it as the default policy for the system using the DefaultPolicy directive in the cupsd.conf file. For example, add the following line to the cupsd.conf file to use the "lab999" policy from the previous section:

    DefaultPolicy lab999
    

    To associate the policy with one or more printers, use either the lpadmin(8) command or the web interface to change the operation policy for each printer. When using the lpadmin command, the -o printer-op-policy=name option sets the operation policy for a printer. For example, enter the following command to use the "lab999" policy from the previous section with a printer named "LaserJet4000":

    lpadmin -p LaserJet4000 -o printer-op-policy=lab999
    

    To make the same change in the web interface, go to the printer's web page, for example "http://localhost:631/printers/LaserJet4000", and choose Set Default Options from the Administration menu button. Click on the Policies link and choose the desired policy from the pull-down list. Click on Set Default Options to change the policy for the printer.

    cups-2.2.7/doc/help/postscript-driver.html000664 000765 000024 00000053762 13255074424 021256 0ustar00msweetstaff000000 000000 Developing PostScript Printer Drivers

    Developing PostScript Printer Drivers

    This document describes how to develop printer drivers for PostScript printers. Topics include: printer driver basics, creating new PPD files, importing existing PPD files, using custom filters, implementing color management, and adding macOS features.

    Printer Driver Basics

    A CUPS PostScript printer driver consists of a PostScript Printer Description (PPD) file that describes the features and capabilities of the device, zero or more filter programs that prepare print data for the device, and zero or more support files for color management, online help, and so forth. The PPD file includes references to all of the filters and support files used by the driver.

    Every time a user prints something the scheduler program, cupsd(8), determines the format of the print job and the programs required to convert that job into something the printer understands. CUPS includes filter programs for many common formats, for example to convert Portable Document Format (PDF) files into device-independent PostScript, and then from device-independent PostScript to device-dependent PostScript. Figure 1 shows the data flow of a typical print job.

    The optional PostScript filter can be provided to add printer-specific commands to the PostScript output that cannot be represented in the PPD file or to reorganize the output for special printer features. Typically this is used to support advanced job management or finishing functions on the printer. CUPS includes a generic PostScript filter that handles all PPD-defined commands.

    The optional port monitor handles interface-specific protocol or encoding issues. For example, many PostScript printers support the Binary Communications Protocol (BCP) and Tagged Binary Communications Protocol (TBCP) to allow applications to print 8-bit ("binary") PostScript jobs. CUPS includes port monitors for BCP and TBCP, and you can supply your own port monitors as needed.

    The backend handles communications with the printer, sending print data from the last filter to the printer and relaying back-channel data from the printer to the upstream filters. CUPS includes backend programs for common direct-connect interfaces and network protocols, and you can provide your own backend to support custom interfaces and protocols.

    The scheduler also supports a special "command" file format for sending maintenance commands and status queries to a printer or printer driver. Command print jobs typically use a single command filter program defined in the PPD file to generate the appropriate printer commands and handle any responses from the printer. Figure 2 shows the data flow of a typical command job.

    PostScript printer drivers typically do not require their own command filter since CUPS includes a generic PostScript command filter that supports all of the standard functions using PPD-defined commands.

    Creating New PPD Files

    We recommend using the CUPS PPD compiler, ppdc(1), to create new PPD files since it manages many of the tedious (and error-prone!) details of paper sizes and localization for you. It also allows you to easily support multiple devices from a single source file. For more information see the "Introduction to the PPD Compiler" document. Listing 1 shows a driver information file for a black-and-white PostScript printer.

    Listing 1: "examples/postscript.drv"

    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // Specify this is a PostScript printer driver
    DriverType ps
    
    // List the fonts that are supported, in this case all standard fonts
    Font *
    
    // Manufacturer, model name, and version
    Manufacturer "Foo"
    ModelName "Foo LaserProofer 2000"
    Version 1.0
    
    // PostScript printer attributes
    Attribute DefaultColorSpace "" Gray
    Attribute LandscapeOrientation "" Minus90
    Attribute LanguageLevel "" "3"
    Attribute Product "" "(Foo LaserProofer 2000)"
    Attribute PSVersion "" "(3010) 0"
    Attribute TTRasterizer "" Type42
    
    // Supported page sizes
    *MediaSize Letter
    MediaSize Legal
    MediaSize A4
    
    // Query command for page size
    Attribute "?PageSize" "" "
          save
          currentpagedevice /PageSize get aload pop
          2 copy gt {exch} if (Unknown)
          23 dict
                  dup [612 792] (Letter) put
                  dup [612 1008] (Legal) put
                  dup [595 842] (A4) put
                  {exch aload pop 4 index sub abs 5 le exch
                   5 index sub abs 5 le and
                  {exch pop exit} {pop} ifelse
          } bind forall = flush pop pop
          restore"
    
    // Specify the name of the PPD file we want to generate
    PCFileName "fooproof.ppd"
    

    Required Attributes

    PostScript drivers require the attributes listed in Table 1. If not specified, the defaults for CUPS drivers are used. A typical PostScript driver information file would include the following attributes:

    Attribute DefaultColorSpace "" Gray
    Attribute LandscapeOrientation "" Minus90
    Attribute LanguageLevel "" "3"
    Attribute Product "" "(Foo LaserProofer 2000)"
    Attribute PSVersion "" "(3010) 0"
    Attribute TTRasterizer "" Type42
    
    Table 1: Required PostScript Printer Driver Attributes
    Attribute Description
    DefaultColorSpace The default colorspace: Gray, RGB, CMY, or CMYK. If not specified, then RGB is assumed.
    LandscapeOrientation The preferred landscape orientation: Plus90, Minus90, or Any. If not specified, Plus90 is assumed.
    LanguageLevel The PostScript language level supported by the device: 1, 2, or 3. If not specified, 2 is assumed.
    Product The string returned by the PostScript product operator, which must include parenthesis to conform with PostScript syntax rules for strings. Multiple Product attributes may be specified to support multiple products with the same PPD file. If not specified, "(ESP Ghostscript)" and "(GNU Ghostscript)" are assumed.
    PSVersion The PostScript interpreter version numbers as returned by the version and revision operators. The required format is "(version) revision". Multiple PSVersion attributes may be specified to support multiple interpreter version numbers. If not specified, "(3010) 705" and "(3010) 707" are assumed.
    TTRasterizer The type of TrueType font rasterizer supported by the device, if any. The supported values are None, Accept68k, Type42, and TrueImage. If not specified, None is assumed.

    Query Commands

    Most PostScript printer PPD files include query commands (?PageSize, etc.) that allow applications to query the printer for its current settings and configuration. Query commands are included in driver information files as attributes. For example, the example in Listing 1 uses the following definition for the PageSize query command:

    Attribute "?PageSize" "" "
          save
          currentpagedevice /PageSize get aload pop
          2 copy gt {exch} if (Unknown)
          23 dict
                  dup [612 792] (Letter) put
                  dup [612 1008] (Legal) put
                  dup [595 842] (A4) put
                  {exch aload pop 4 index sub abs 5 le exch
                   5 index sub abs 5 le and
                  {exch pop exit} {pop} ifelse
          } bind forall = flush pop pop
          restore"
    

    Query commands can span multiple lines, however no single line may contain more than 255 characters.

    Importing Existing PPD Files

    CUPS includes a utility called ppdi(1) which allows you to import existing PPD files into the driver information file format used by the PPD compiler ppdc(1). Once imported, you can modify, localize, and regenerate the PPD files easily. Type the following command to import the PPD file mydevice.ppd into the driver information file mydevice.drv:

    ppdi -o mydevice.drv mydevice.ppd
    

    If you have a whole directory of PPD files that you would like to import, you can list multiple filenames or use shell wildcards to import more than one PPD file on the command-line:

    ppdi -o mydevice.drv mydevice1.ppd mydevice2.ppd
    ppdi -o mydevice.drv *.ppd
    

    If the driver information file already exists, the new PPD file entries are appended to the end of the file. Each PPD file is placed in its own group of curly braces within the driver information file.

    Using Custom Filters

    Normally a PostScript printer driver will not utilize any additional print filters. For drivers that provide additional filters such as a CUPS command file filter for doing printer maintenance, you must also list the following Filter directive to handle printing PostScript files:

    Filter application/vnd.cups-postscript 0 -
    

    Custom Command Filters

    The application/vnd.cups-command file type is used for CUPS command files. Use the following Filter directive to handle CUPS command files:

    Filter application/vnd.cups-command 100 /path/to/command/filter
    

    To use the standard PostScript command filter, specify commandtops as the path to the command filter.

    Custom PDF Filters

    The application/pdf file type is used for unfiltered PDF files while the application/vnd.cups-pdf file type is used for filtered PDF files. Use the following Filter directive to handle filtered PDF files:

    Filter application/vnd.cups-pdf 100 /path/to/pdf/filter
    

    For unfiltered PDF files, use:

    Filter application/pdf 100 /path/to/pdf/filter
    

    Custom PDF filters that accept filtered data do not need to perform number-up processing and other types of page imposition, while those that accept unfiltered data MUST do the number-up processing themselves.

    Custom PostScript Filters

    The application/vnd.cups-postscript file type is used for filtered PostScript files. Use the following Filter directive to handle PostScript files:

    Filter application/vnd.cups-postscript 100 /path/to/postscript/filter
    

    Implementing Color Management

    CUPS uses ICC color profiles to provide more accurate color reproduction. The cupsICCProfile attribute defines the color profiles that are available for a given printer, for example:

    Attribute cupsICCProfile "ColorModel.MediaType.Resolution/Description" /path/to/ICC/profile
    

    where "ColorModel.MediaType.Resolution" defines a selector based on the corresponding option selections. A simple driver might only define profiles for the color models that are supported, for example a printer supporting Gray and RGB might use:

    Attribute cupsICCProfile "Gray../Grayscale Profile" /path/to/ICC/gray-profile
    Attribute cupsICCProfile "RGB../Full Color Profile" /path/to/ICC/rgb-profile
    

    The options used for profile selection can be customized using the cupsICCQualifier2 and cupsICCQualifier3 attributes.

    Adding macOS Features

    macOS printer drivers can provide additional attributes to specify additional option panes in the print dialog, an image of the printer, a help book, and option presets for the driver software:

    Attribute APDialogExtension "" /Library/Printers/Vendor/filename.plugin
    Attribute APHelpBook "" /Library/Printers/Vendor/filename.bundle
    Attribute APPrinterIconPath "" /Library/Printers/Vendor/filename.icns
    Attribute APPrinterPreset "name/text" "*option choice ..."
    
    cups-2.2.7/doc/help/ppd-compiler.html000664 000765 000024 00000127552 13255074424 020145 0ustar00msweetstaff000000 000000 Introduction to the PPD Compiler

    Introduction to the PPD Compiler

    This document describes how to use the CUPS PostScript Printer Description (PPD) file compiler. The PPD compiler generates PPD files from simple text files that describe the features and capabilities of one or more printers.

    Note:

    The PPD compiler and related tools are deprecated and will be removed in a future release of CUPS.

    The Basics

    The PPD compiler, ppdc(1), is a simple command-line tool that takes a single driver information file, which by convention uses the extension .drv, and produces one or more PPD files that may be distributed with your printer drivers for use with CUPS. For example, you would run the following command to create the English language PPD files defined by the driver information file mydrivers.drv:

    ppdc mydrivers.drv
    

    The PPD files are placed in a subdirectory called ppd. The -d option is used to put the PPD files in a different location, for example:

    ppdc -d myppds mydrivers.drv
    

    places the PPD files in a subdirectory named myppds. Finally, use the -l option to specify the language localization for the PPD files that are created, for example:

    ppdc -d myppds/de -l de mydrivers.drv
    ppdc -d myppds/en -l en mydrivers.drv
    ppdc -d myppds/es -l es mydrivers.drv
    ppdc -d myppds/fr -l fr mydrivers.drv
    ppdc -d myppds/it -l it mydrivers.drv
    

    creates PPD files in German (de), English (en), Spanish (es), French (fr), and Italian (it) in the corresponding subdirectories. Specify multiple languages (separated by commas) to produce "globalized" PPD files:

    ppdc -d myppds -l de,en,es,fr,it mydrivers.drv
    

    Driver Information Files

    The driver information files accepted by the PPD compiler are plain text files that define the various attributes and options that are included in the PPD files that are generated. A driver information file can define the information for one or more printers and their corresponding PPD files.

    Listing 1: "examples/minimum.drv"

    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // List the fonts that are supported, in this case all standard fonts...
    Font *
    
    // Manufacturer, model name, and version
    Manufacturer "Foo"
    ModelName "FooJet 2000"
    Version 1.0
    
    // Each filter provided by the driver...
    Filter application/vnd.cups-raster 100 rastertofoo
    
    // Supported page sizes
    *MediaSize Letter
    MediaSize A4
    
    // Supported resolutions
    *Resolution k 8 0 0 0 "600dpi/600 DPI"
    
    // Specify the name of the PPD file we want to generate...
    PCFileName "foojet2k.ppd"
    

    A Simple Example

    The example in Listing 1 shows a driver information file which defines the minimum required attributes to provide a valid PPD file. The first part of the file includes standard definition files for fonts and media sizes:

    #include <font.defs>
    #include <media.defs>
    

    The #include directive works just like the C/C++ include directive; files included using the angle brackets (<filename>) are found in any of the standard include directories and files included using quotes ("filename") are found in the same directory as the source or include file. The <font.defs> include file defines the standard fonts which are included with GPL Ghostscript and the Apple PDF RIP, while the <media.defs> include file defines the standard media sizes listed in Appendix B of the Adobe PostScript Printer Description File Format Specification.

    CUPS provides several other standard include files:

    • <epson.h> - Defines all of the rastertoepson driver constants.
    • <escp.h> - Defines all of the rastertoescpx driver constants.
    • <hp.h> - Defines all of the rastertohp driver constants.
    • <label.h> - Defines all of the rastertolabel driver constants.
    • <pcl.h> - Defines all of the rastertopclx driver constants.
    • <raster.defs> - Defines all of the CUPS raster format constants.

    Next we list all of the fonts that are available in the driver; for CUPS raster drivers, the following line is all that is usually supplied:

    Font *
    

    The Font directive specifies the name of a single font or the asterisk to specify all fonts. For example, you would use the following line to define an additional bar code font that you are supplying with your printer driver:

    //   name         encoding  version  charset  status
    Font Barcode-Foo  Special   "(1.0)"  Special  ROM
    

    The name of the font is Barcode-Foo. Since it is not a standard text font, the encoding and charset name Special is used. The version number is 1.0 and the status (where the font is located) is ROM to indicate that the font does not need to be embedded in documents that use the font for this printer.

    Third comes the manufacturer, model name, and version number information strings:

    Manufacturer "Foo"
    ModelName "FooJet 2000"
    Version 1.0
    

    These strings are used when the user (or auto-configuration program) selects the printer driver for a newly connected device.

    The list of filters comes after the information strings; for the example in Listing 1, we have a single filter that takes CUPS raster data:

    Filter application/vnd.cups-raster 100 rastertofoo
    

    Each filter specified in the driver information file is the equivalent of a printer driver for that format; if a user submits a print job in a different format, CUPS figures out the sequence of commands that will produce a supported format for the least relative cost.

    Once we have defined the driver information we specify the supported options. For the example driver we support a single resolution of 600 dots per inch and two media sizes, A4 and Letter:

    *MediaSize Letter
    MediaSize A4
    
    *Resolution k 8 0 0 0 "600dpi/600 DPI"
    

    The asterisk in front of the MediaSize and Resolution directives specify that those option choices are the default. The MediaSize directive is followed by a media size name which is normally defined in the <media.defs> file and corresponds to a standard Adobe media size name. If the default media size is Letter, the PPD compiler will override it to be A4 for non-English localizations for you automatically.

    The Resolution directive accepts several values after it as follows:

    1. Colorspace for this resolution, if any. In the example file, the colorspace k is used which corresponds to black. For printer drivers that support color printing, this field is usually specified as "-" for "no change".
    2. Bits per color. In the example file, we define 8 bits per color, for a continuous-tone grayscale output. All versions of CUPS support 1 and 8 bits per color. CUPS 1.2 and higher (macOS 10.5 and higher) also supports 16 bits per color.
    3. Rows per band. In the example file, we define 0 rows per band to indicate that our printer driver does not process the page in bands.
    4. Row feed. In the example, we define the feed value to be 0 to indicate that our printer driver does not interleave the output.
    5. Row step. In the example, we define the step value to be 0 to indicate that our printer driver does not interleave the output. This value normally indicates the spacing between the nozzles of an inkjet printer - when combined with the previous two values, it informs the driver how to stagger the output on the page to produce interleaved lines on the page for higher-resolution output.
    6. Choice name and text. In the example, we define the choice name and text to be "600dpi/600 DPI". The name and text are separated by slash (/) character; if no text is specified, then the name is used as the text. The PPD compiler parses the name to determine the actual resolution; the name can be of the form RESOLUTIONdpi for resolutions that are equal horizontally and vertically or HRESxVRESdpi for isometric resolutions. Only integer resolution values are supported, so a resolution name of 300dpi is valid while 300.1dpi is not.

    Finally, the PCFileName directive specifies that the named PPD file should be written for the current driver definitions:

    PCFileName "foojet2k.ppd"
    

    The filename follows the directive and must conform to the Adobe filename requirements in the Adobe Postscript Printer Description File Format Specification. Specifically, the filename may not exceed 8 characters followed by the extension .ppd. The FileName directive can be used to specify longer filenames:

    FileName "FooJet 2000"
    

    Grouping and Inheritance

    The previous example created a single PPD file. Driver information files can also define multiple printers by using the PPD compiler grouping functionality. Directives are grouped using the curly braces ({ and }) and every group that uses the PCFileName or FileName directives produces a PPD file with that name. Listing 2 shows a variation of the original example that uses two groups to define two printers that share the same printer driver filter but provide two different resolution options.

    Listing 2: "examples/grouping.drv"

    
    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // List the fonts that are supported, in this case all standard fonts...
    Font *
    
    // Manufacturer and version
    Manufacturer "Foo"
    Version 1.0
    
    // Each filter provided by the driver...
    Filter application/vnd.cups-raster 100 rastertofoo
    
    // Supported page sizes
    *MediaSize Letter
    MediaSize A4
    
    {
      // Supported resolutions
      *Resolution k 8 0 0 0 "600dpi/600 DPI"
    
      // Specify the model name and filename...
      ModelName "FooJet 2000"
      PCFileName "foojet2k.ppd"
    }
    
    {
      // Supported resolutions
      *Resolution k 8 0 0 0 "1200dpi/1200 DPI"
    
      // Specify the model name and filename...
      ModelName "FooJet 2001"
      PCFileName "foojt2k1.ppd"
    }
    

    The second example is essentially the same as the first, except that each printer model is defined inside of a pair of curly braces. For example, the first printer is defined using:

    {
      // Supported resolutions
      *Resolution k 8 0 0 0 "600dpi/600 DPI"
    
      // Specify the model name and filename...
      ModelName "FooJet 2000"
      PCFileName "foojet2k.ppd"
    }
    

    The printer inherits all of the definitions from the parent group (the top part of the file) and adds the additional definitions inside the curly braces for that printer driver. When we define the second group, it also inherits the same definitions from the parent group but none of the definitions from the first driver. Groups can be nested to any number of levels to support variations of similar models without duplication of information.

    Color Support

    For printer drivers that support color printing, the ColorDevice and ColorModel directives should be used to tell the printing system that color output is desired and in what formats. Listing 3 shows a variation of the previous example which includes a color printer that supports printing at 300 and 600 DPI.

    The key changes are the addition of the ColorDevice directive:

    ColorDevice true
    

    which tells the printing system that the printer supports color printing, and the ColorModel directives:

    ColorModel Gray/Grayscale w chunky 0
    *ColorModel RGB/Color rgb chunky 0
    

    which tell the printing system which colorspaces are supported by the printer driver for color printing. Each of the ColorModel directives is followed by the option name and text (Gray/Grayscale and RGB/Color), the colorspace name (w and rgb), the color organization (chunky), and the compression mode number (0) to be passed to the driver. The option name can be any of the standard Adobe ColorModel names:

    • Gray - Grayscale output.
    • RGB - Color output, typically using the RGB colorspace, but without a separate black channel.
    • CMYK - Color output with a separate black channel.

    Custom names can be used, however it is recommended that you use your vendor prefix for any custom names, for example "fooName".

    The colorspace name can be any of the following universally supported colorspaces:

    • w - Luminance
    • rgb - Red, green, blue
    • k - Black
    • cmy - Cyan, magenta, yellow
    • cmyk - Cyan, magenta, yellow, black

    The color organization can be any of the following values:

    • chunky - Color values are passed together on a line as RGB RGB RGB RGB
    • banded - Color values are passed separately on a line as RRRR GGGG BBBB; not supported by the Apple RIP filters
    • planar - Color values are passed separately on a page as RRRR RRRR RRRR ... GGGG GGGG GGGG ... BBBB BBBB BBBB; not supported by the Apple RIP filters

    The compression mode value is passed to the driver in the cupsCompression attribute. It is traditionally used to select an appropriate compression mode for the color model but can be used for any purpose, such as specifying a photo mode vs. standard mode.

    Listing 3: "examples/color.drv"

    
    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // List the fonts that are supported, in this case all standard fonts...
    Font *
    
    // Manufacturer and version
    Manufacturer "Foo"
    Version 1.0
    
    // Each filter provided by the driver...
    Filter application/vnd.cups-raster 100 rastertofoo
    
    // Supported page sizes
    *MediaSize Letter
    MediaSize A4
    
    {
      // Supported resolutions
      *Resolution k 8 0 0 0 "600dpi/600 DPI"
    
      // Specify the model name and filename...
      ModelName "FooJet 2000"
      PCFileName "foojet2k.ppd"
    }
    
    {
      // Supports color printing
      ColorDevice true
    
      // Supported colorspaces
      ColorModel Gray/Grayscale w chunky 0
      *ColorModel RGB/Color rgb chunky 0
    
      // Supported resolutions
      *Resolution - 8 0 0 0 "300dpi/300 DPI"
      Resolution - 8 0 0 0 "600dpi/600 DPI"
    
      // Specify the model name and filename...
      ModelName "FooJet Color"
      PCFileName "foojetco.ppd"
    }
    

    Defining Custom Options and Option Groups

    The Group, Option, and Choice directives are used to define or select a group, option, or choice. Listing 4 shows a variation of the first example that provides two custom options in a group named "Footasm".

    Listing 4: "examples/custom.drv"

    
    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // List the fonts that are supported, in this case all standard fonts...
    Font *
    
    // Manufacturer, model name, and version
    Manufacturer "Foo"
    ModelName "FooJet 2000"
    Version 1.0
    
    // Each filter provided by the driver...
    Filter application/vnd.cups-raster 100 rastertofoo
    
    // Supported page sizes
    *MediaSize Letter
    MediaSize A4
    
    // Supported resolutions
    *Resolution k 8 0 0 0 "600dpi/600 DPI"
    
    // Option Group
    Group "Footasm"
    
      // Boolean option
      Option "fooEnhance/Resolution Enhancement" Boolean AnySetup 10
        *Choice True/Yes "<</cupsCompression 1>>setpagedevice"
        Choice False/No "<</cupsCompression 0>>setpagedevice"
    
      // Multiple choice option
      Option "fooOutputType/Output Quality" PickOne AnySetup 10
        *Choice "Auto/Automatic Selection"
                "<</OutputType(Auto)>>setpagedevice""
        Choice "Text/Optimize for Text"
                "<</OutputType(Text)>>setpagedevice""
        Choice "Graph/Optimize for Graphics"
                "<</OutputType(Graph)>>setpagedevice""
        Choice "Photo/Optimize for Photos"
                "<</OutputType(Photo)>>setpagedevice""
    
    // Specify the name of the PPD file we want to generate...
    PCFileName "foojet2k.ppd"
    

    The custom group is introduced by the Group directive which is followed by the name and optionally text for the user:

    Group "Footasm/Footastic Options"
    

    The group name must conform to the PPD specification and cannot exceed 40 characters in length. If you specify user text, it cannot exceed 80 characters in length. The groups General, Extra, and InstallableOptions are predefined by CUPS; the general and extra groups are filled by the UI options defined by the PPD specification. The InstallableOptions group is reserved for options that define whether accessories for the printer (duplexer unit, finisher, stapler, etc.) are installed.

    Once the group is specified, the Option directive is used to introduce a new option:

    Option "fooEnhance/Resolution Enhancement" Boolean AnySetup 10
    

    The directive is followed by the name of the option and any optional user text, the option type, the PostScript document group, and the sort order number. The option name must conform to the PPD specification and cannot exceed 40 characters in length. If you specify user text, it cannot exceed 80 characters in length.

    The option type can be Boolean for true/false selections, PickOne for picking one of many choices, or PickMany for picking zero or more choices. Boolean options can have at most two choices with the names False and True. Pick options can have any number of choices, although for Windows compatibility reasons the number of choices should not exceed 255.

    The PostScript document group is typically AnySetup, meaning that the option can be introduced at any point in the PostScript document. Other values include PageSetup to include the option before each page and DocumentSetup to include the option once at the beginning of the document.

    The sort order number is used to sort the printer commands associated with each option choice within the PostScript document. This allows you to setup certain options before others as required by the printer. For most CUPS raster printer drivers, the value 10 can be used for all options.

    Once the option is specified, each option choice can be listed using the Choice directive:

    *Choice True/Yes "<</cupsCompression 1>>setpagedevice"
    Choice False/No "<</cupsCompression 0>>setpagedevice"
    

    The directive is followed by the choice name and optionally user text, and the PostScript commands that should be inserted when printing a file to this printer. The option name must conform to the PPD specification and cannot exceed 40 characters in length. If you specify user text, it cannot exceed 80 characters in length.

    The PostScript commands are also interpreted by any RIP filters, so these commands typically must be present for all option choices. Most commands take the form:

    <</name value>>setpagedevice
    

    where name is the name of the PostScript page device attribute and value is the numeric or string value for that attribute.

    Defining Constants

    Sometimes you will want to define constants for your drivers so that you can share values in different groups within the same driver information file, or to share values between different driver information files using the #include directive. The #define directive is used to define constants for use in your printer definitions:

    #define NAME value
    

    The NAME is any sequence of letters, numbers, and the underscore. The value is a number or string; if the value contains spaces you must put double quotes around it, for example:

    #define FOO "My String Value"
    

    Constants can also be defined on the command-line using the -D option:

    ppdc -DNAME="value" filename.drv
    

    Once defined, you use the notation $NAME to substitute the value of the constant in the file, for example:

    #define MANUFACTURER "Foo"
    #define FOO_600      0
    #define FOO_1200     1
    
    {
      Manufacturer "$MANUFACTURER"
      ModelNumber $FOO_600
      ModelName "FooJet 2000"
      ...
    }
    
    {
      Manufacturer "$MANUFACTURER"
      ModelNumber $FOO_1200
      ModelName "FooJet 2001"
      ...
    }
    

    Numeric constants can be bitwise OR'd together by placing the constants inside parenthesis, for example:

    // ModelNumber capability bits
    #define DUPLEX 1
    #define COLOR  2
    
    ...
    
    {
      // Define a model number specifying the capabilities of the printer...
      ModelNumber ($DUPLEX $COLOR)
      ...
    }
    

    Conditional Statements

    The PPD compiler supports conditional compilation using the #if, #elif, #else, and #endif directives. The #if and #elif directives are followed by a constant name or an expression. For example, to include a group of options when "ADVANCED" is defined:

    #if ADVANCED
    Group "Advanced/Advanced Options"
      Option "fooCyanAdjust/Cyan Adjustment"
        Choice "plus10/+10%" ""
        Choice "plus5/+5%" ""
        *Choice "none/No Adjustment" ""
        Choice "minus5/-5%" ""
        Choice "minus10/-10%" ""
      Option "fooMagentaAdjust/Magenta Adjustment"
        Choice "plus10/+10%" ""
        Choice "plus5/+5%" ""
        *Choice "none/No Adjustment" ""
        Choice "minus5/-5%" ""
        Choice "minus10/-10%" ""
      Option "fooYellowAdjust/Yellow Adjustment"
        Choice "plus10/+10%" ""
        Choice "plus5/+5%" ""
        *Choice "none/No Adjustment" ""
        Choice "minus5/-5%" ""
        Choice "minus10/-10%" ""
      Option "fooBlackAdjust/Black Adjustment"
        Choice "plus10/+10%" ""
        Choice "plus5/+5%" ""
        *Choice "none/No Adjustment" ""
        Choice "minus5/-5%" ""
        Choice "minus10/-10%" ""
    #endif
    

    Defining Constraints

    Constraints are strings that are used to specify that one or more option choices are incompatible, for example two-sided printing on transparency media. Constraints are also used to prevent the use of uninstalled features such as the duplexer unit, additional media trays, and so forth.

    The UIConstraints directive is used to specify a constraint that is placed in the PPD file. The directive is followed by a string using one of the following formats:

    UIConstraints "*Option1 *Option2"
    UIConstraints "*Option1 Choice1 *Option2"
    UIConstraints "*Option1 *Option2 Choice2"
    UIConstraints "*Option1 Choice1 *Option2 Choice2"
    

    Each option name is preceded by the asterisk (*). If no choice is given for an option, then all choices except False and None will conflict with the other option and choice(s). Since the PPD compiler automatically adds reciprocal constraints (option A conflicts with option B, so therefore option B conflicts with option A), you need only specify the constraint once.

    Listing 5: "examples/constraint.drv"

    
    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // List the fonts that are supported, in this case all standard fonts...
    Font *
    
    // Manufacturer, model name, and version
    Manufacturer "Foo"
    ModelName "FooJet 2000"
    Version 1.0
    
    // Each filter provided by the driver...
    Filter application/vnd.cups-raster 100 rastertofoo
    
    // Supported page sizes
    *MediaSize Letter
    MediaSize A4
    
    // Supported resolutions
    *Resolution k 8 0 0 0 "600dpi/600 DPI"
    
    // Installable Option Group
    Group "InstallableOptions/Options Installed"
    
      // Duplexing unit option
      Option "OptionDuplexer/Duplexing Unit" Boolean AnySetup 10
        Choice True/Installed ""
        *Choice "False/Not Installed" ""
    
    // General Option Group
    Group General
    
      // Duplexing option
      Option "Duplex/Two-Sided Printing" PickOne AnySetup 10
        *Choice "None/No" "<</Duplex false>>setpagedevice""
        Choice "DuplexNoTumble/Long Edge Binding"
               "<</Duplex true/Tumble false>>setpagedevice""
        Choice "DuplexTumble/Short Edge Binding"
               "<</Duplex true/Tumble true>>setpagedevice""
    
    // Only allow duplexing if the duplexer is installed
    UIConstraints "*Duplex *OptionDuplexer False"
    
    // Specify the name of the PPD file we want to generate...
    PCFileName "foojet2k.ppd"
    

    Listing 5 shows a variation of the first example with an added Duplex option and installable option for the duplexer, OptionDuplex. A constraint is added at the end to specify that any choice of the Duplex option that is not None is incompatible with the "Duplexer Installed" option set to "Not Installed" (False):

    UIConstraints "*Duplex *OptionDuplexer False"
    

    Enhanced Constraints

    CUPS 1.4 supports constraints between 2 or more options using the Attribute directive. cupsUIConstraints attributes define the constraints, while cupsUIResolver attributes define option changes to resolve constraints. For example, we can specify the previous duplex constraint with a resolver that turns off duplexing with the following two lines:

    Attribute cupsUIConstraints DuplexOff "*Duplex *OptionDuplexer False"
    Attribute cupsUIResolver DuplexOff "*Duplex None"
    

    Localization

    The PPD compiler provides localization of PPD files in different languages through message catalog files in the GNU gettext or Apple .strings formats. Each user text string and several key PPD attribute values such as LanguageVersion and LanguageEncoding are looked up in the corresponding message catalog and the translated text is substituted in the generated PPD files. One message catalog file can be used by multiple driver information files, and each file contains a single language translation.

    The ppdpo Utility

    While CUPS includes localizations of all standard media sizes and options in several languages, your driver information files may provide their own media sizes and options that need to be localized. CUPS provides a utility program to aid in the localization of drivers called ppdpo(1). The ppdpo program creates or updates a message catalog file based upon one or more driver information files. New messages are added with the word "TRANSLATE" added to the front of the translation string to make locating new strings for translation easier. The program accepts the message catalog filename and one or more driver information files.

    For example, run the following command to create a new German message catalog called de.po for all of the driver information files in the current directory:

    ppdpo -o de.po *.drv
    

    If the file de.po already exists, ppdpo will update the contents of the file with any new messages that need to be translated. To create an Apple .strings file instead, specify the output filename with a .strings extension, for example:

    ppdpo -o de.strings *.drv
    

    Using Message Catalogs with the PPD Compiler

    Once you have created a message catalog, use the #po directive to declare it in each driver information file. For example, to declare the German message catalog for a driver use:

    #po de "de.po"  // German
    

    In fact, you can use the #po directive as many times as needed:

    #po de "de.po"  // German
    #po es "es.po"  // Spanish
    #po fr "fr.po"  // French
    #po it "it.po"  // Italian
    #po ja "ja.po"  // Japanese
    

    The filename ("de.po", etc.) can be relative to the location of the driver information file or an absolute path. Once defined, the PPD compiler will automatically generate a globalized PPD for every language declared in your driver information file. To generate a single-language PPD file, simply use the -l option to list the corresponding locale, for example:

    ppdc -l de -d ppd/de mydrivers.drv
    

    to generate German PPD files.

    cups-2.2.7/doc/help/raster-driver.html000664 000765 000024 00000046054 13255074424 020340 0ustar00msweetstaff000000 000000 Developing Raster Printer Drivers

    Developing Raster Printer Drivers

    This document describes how to develop printer drivers for raster printers. Topics include: printer driver basics, creating new PPD files, using filters, implementing color management, and adding macOS features.

    Printer Driver Basics

    A CUPS raster printer driver consists of a PostScript Printer Description (PPD) file that describes the features and capabilities of the device, one or more filter programs that prepare print data for the device, and zero or more support files for color management, online help, and so forth. The PPD file includes references to all of the filters and support files used by the driver.

    Every time a user prints something the scheduler program, cupsd(8), determines the format of the print job and the programs required to convert that job into something the printer understands. CUPS includes filter programs for many common formats, for example to convert Portable Document Format (PDF) files into CUPS raster data. Figure 1 shows the data flow of a typical print job.

    The raster filter converts CUPS raster data into a format the printer understands, for example HP-PCL. CUPS includes several sample raster filters supporting standard page description languages (PDLs). Table 1 shows the raster filters that are bundled with CUPS and the languages they support.

    Table 1: Standard CUPS Raster Filters
    FilterPDLsppdc DriverTypeppdc #include file
    rastertoepsonESC/P, ESC/P2epsonepson.h
    rastertoescpxESC/P, ESC/P2, EPSON Remote Modeescpescp.h
    rastertohpHP-PCL3, HP-PCL5hphp.h
    rastertolabelCPCL, Dymo, EPL1, EPL2, Intellitech PCL, ZPLlabellabel.h
    rastertopclxHP-RTL, HP-PCL3, HP-PCL3GUI, HP-PCL5, HP-PCL5c, HP-PCL5epclpcl.h

    The optional port monitor handles interface-specific protocol or encoding issues. For example, some raster printers use the 1284.4 communications protocol.

    The backend handles communications with the printer, sending print data from the last filter to the printer and relaying back-channel data from the printer to the upstream filters. CUPS includes backend programs for common direct-connect interfaces and network protocols, and you can provide your own backend to support custom interfaces and protocols.

    The scheduler also supports a special "command" file format for sending maintenance commands and status queries to a printer or printer driver. Command print jobs typically use a single command filter program defined in the PPD file to generate the appropriate printer commands and handle any responses from the printer. Figure 2 shows the data flow of a typical command job.

    Raster printer drivers must provide their own command filter.

    Creating New PPD Files

    We recommend using the CUPS PPD compiler, ppdc(1), to create new PPD files since it manages many of the tedious (and error-prone!) details of paper sizes and localization for you. It also allows you to easily support multiple devices from a single source file. For more information see the "Introduction to the PPD Compiler" document. Listing 1 shows a driver information file for several similar black-and-white HP-PCL5 laser printers.

    Listing 1: "examples/laserjet-basic.drv"

    // Include standard font and media definitions
    #include <font.defs>
    #include <media.defs>
    
    // Include HP-PCL driver definitions
    #include <pcl.h>
    
    // Specify that this driver uses the HP-PCL driver...
    DriverType pcl
    
    // Specify the driver options via the model number...
    ModelNumber ($PCL_PAPER_SIZE $PCL_PJL $PCL_PJL_RESOLUTION)
    
    // List the fonts that are supported, in this case all standard fonts...
    Font *
    
    // Manufacturer and driver version
    Manufacturer "HP"
    Version 1.0
    
    // Supported page sizes and their margins
    HWMargins 18 12 18 12
    *MediaSize Letter
    MediaSize Legal
    MediaSize Executive
    MediaSize Monarch
    MediaSize Statement
    MediaSize FanFoldGermanLegal
    
    HWMargins 18 12.72 18 12.72
    MediaSize Env10
    
    HWMargins 9.72 12 9.72 12
    MediaSize A4
    MediaSize A5
    MediaSize B5
    MediaSize EnvC5
    MediaSize EnvDL
    MediaSize EnvISOB5
    MediaSize Postcard
    MediaSize DoublePostcard
    
    // Only black-and-white output with mode 3 compression...
    ColorModel Gray k chunky 3
    
    // Supported resolutions
    Resolution - 1 0 0 0 "300dpi/300 DPI"
    *Resolution - 8 0 0 0 "600dpi/600 DPI"
    
    // Supported input slots
    *InputSlot 7 "Auto/Automatic Selection"
    InputSlot 2 "Manual/Tray 1 - Manual Feed"
    InputSlot 4 "Upper/Tray 1"
    InputSlot 1 "Lower/Tray 2"
    InputSlot 5 "LargeCapacity/Tray 3"
    
    // Tray 3 is an option...
    Installable "OptionLargeCapacity/Tray 3 Installed"
    UIConstraints "*OptionLargeCapacity False *InputSlot LargeCapacity"
    
    {
      // HP LaserJet 2100 Series
      Throughput 10
      ModelName "LaserJet 2100 Series"
      PCFileName "hpljt211.ppd"
    }
    
    {
      // LaserJet 2200 and 2300 series have duplexer option...
      Duplex normal
      Installable "OptionDuplex/Duplexer Installed"
      UIConstraints "*OptionDuplex False *Duplex"
    
      {
        // HP LaserJet 2200 Series
        Throughput 19
        ModelName "LaserJet 2200 Series"
        PCFileName "hpljt221.ppd"
      }
    
      {
        // HP LaserJet 2300 Series
        Throughput 25
        ModelName "LaserJet 2300 Series"
        PCFileName "hpljt231.ppd"
      }
    }
    

    Using Filters

    The standard CUPS raster filters can be specified using the DriverType directive, for example:

    // Specify that this driver uses the HP-PCL driver...
    DriverType pcl
    

    Table 1 shows the driver types for each of the standard CUPS raster filters. For drivers that do not use the standard raster filters, the "custom" type is used with Filter directives:

    DriverType custom
    Filter application/vnd.cups-raster 100 /path/to/raster/filter
    Filter application/vnd.cups-command 100 /path/to/command/filter
    

    Implementing Color Management

    CUPS uses ICC color profiles to provide more accurate color reproduction. The cupsICCProfile attribute defines the color profiles that are available for a given printer, for example:

    Attribute cupsICCProfile "ColorModel.MediaType.Resolution/Description" /path/to/ICC/profile
    

    where "ColorModel.MediaType.Resolution" defines a selector based on the corresponding option selections. A simple driver might only define profiles for the color models that are supported, for example a printer supporting Gray and RGB might use:

    Attribute cupsICCProfile "Gray../Grayscale Profile" /path/to/ICC/gray-profile
    Attribute cupsICCProfile "RGB../Full Color Profile" /path/to/ICC/rgb-profile
    

    The options used for profile selection can be customized using the cupsICCQualifier2 and cupsICCQualifier3 attributes.

    Since macOS 10.5Custom Color Matching Support

    macOS printer drivers that are based on an existing standard RGB colorspace can tell the system to use the corresponding colorspace instead of an arbitrary ICC color profile when doing color management. The APSupportsCustomColorMatching and APDefaultCustomColorMatchingProfile attributes can be used to enable this mode:

    Attribute APSupportsCustomColorMatching "" true
    Attribute APDefaultCustomColorMatchingProfile "" sRGB
    

    Adding macOS Features

    macOS printer drivers can provide additional attributes to specify additional option panes in the print dialog, an image of the printer, a help book, and option presets for the driver software:

    Attribute APDialogExtension "" /Library/Printers/Vendor/filename.plugin
    Attribute APHelpBook "" /Library/Printers/Vendor/filename.bundle
    Attribute APPrinterIconPath "" /Library/Printers/Vendor/filename.icns
    Attribute APPrinterPreset "name/text" "*option choice ..."
    
    cups-2.2.7/doc/help/ref-ppdcfile.html000664 000765 000024 00000212454 13255074424 020106 0ustar00msweetstaff000000 000000 PPD Compiler Driver Information File Reference

    PPD Compiler Driver Information File Reference

    The CUPS PPD compiler reads meta files that contain descriptions of one or more PPD files to be generated by ppdc(1) or the corresponding driver interface program drv(1). The source file format is plain ASCII text that can be edited using your favorite text editor.

    Directives may be placed anywhere on a line and are followed by zero or more values.

    Comments are supported using the C (/* ... */) and C++ (// ...) comment mechanisms.

    Directives that accept expressions look for sequences of the form:

    NAME
    Evaluates to 1 if NAME is defined, otherwise 0.
    number
    Evaluates to the specified integer; the number can be preceded by a leading sign (+/-) followed by a decimal number (1234), octal number (01234), or hexadecimal number (0x1234) using the same rules as C and C++.
    (NAME NAME ... number number ...)
    Evaluates to the bitwise OR of each named #define constant or number.
    (NAME == OTHERNAME)
    (NAME == number)
    Evaluates to 1 if NAME is equal to the other named constant or number, otherwise 0.
    (NAME != OTHERNAME)
    (NAME != number)
    Evaluates to 1 if NAME is not equal to the other named constant or number, otherwise 0.
    (NAME < OTHERNAME)
    (NAME < number)
    Evaluates to 1 if NAME is less than to the other named constant or number, otherwise 0.
    (NAME <= OTHERNAME)
    (NAME <= number)
    Evaluates to 1 if NAME is less than or equal to the other named constant or number, otherwise 0.
    (NAME > OTHERNAME)
    (NAME > number)
    Evaluates to 1 if NAME is greater than to the other named constant or number, otherwise 0.
    (NAME >= OTHERNAME)
    (NAME >= number)
    Evaluates to 1 if NAME is greater than or equal to the other named constant or number, otherwise 0.

    Printer driver information can be grouped and shared using curly braces ({ ... }); PPD files are written when a close brace or end-of-file is seen and a PCFileName directive has been defined.

    #define

    Syntax

    #define name expression
    

    Examples

    #define FOO 100
    #define BAR "Bar, Inc."
    

    Description

    The #define directive assigns a value to a name which can be later referenced using $name. The name is case-insensitive and can be any sequence of letters, numbers, and the underscore. The value can be any valid expression.

    Predefined Names

    The following #define names are set by the PPD compiler:

    • CUPS_VERSION - The full CUPS version string, e.g. "1.4.0"
    • CUPS_VERSION_MAJOR - The major version number, e.g. "1"
    • CUPS_VERSION_MINOR - The minor version number, e.g. "4"
    • CUPS_VERSION_PATCH - The patch version number, e.g. "0"
    • PLATFORM_NAME - The operating system name used by the current system as reported by "uname" ("Windows" on Microsoft Windows)
    • PLATFORM_ARCH - The processor architecture used by the current system as reported by "uname -m" ("X86" or "X64" on Microsoft Windows)

    See Also

    #include

    #elif

    Syntax

    #elif expression
    

    Examples

    #if HAVE_FOO
    ...
    #elif (HAVE_BAR >= 999)
    ...
    #else
    ...
    #endif
    

    Description

    The #elif directive allows portions of a driver information file to be used conditionally. #elif directives must appear after a corresponding #if directive.

    See Also

    #else, #endif, #if

    #else

    Syntax

    #else
    

    Examples

    #if HAVE_FOO
    ...
    #elif (HAVE_BAR >= 999)
    ...
    #else
    ...
    #endif
    

    Description

    The #else directive allows portions of a driver information file to be used conditionally when the corresponding #if and #elif expressions are non-zero.

    See Also

    #elif, #endif, #if

    #endif

    Syntax

    #endif
    

    Examples

    #if HAVE_FOO
    ...
    #elif (HAVE_BAR >= 999)
    ...
    #else
    ...
    #endif
    

    Description

    The #endif directive ends a conditional block of a driver information file. It must appear after all of the #if, #elif, and #else directives for the current conditional block.

    See Also

    #elif, #else, #if

    #font

    Syntax

    #font name encoding "version" charset status
    

    Examples

    #font Courier Standard "(1.05)" Standard ROM
    #font Symbol Special "(001.005)" Special ROM
    #font Barcode-Foo Special "(1.0)" Special Disk
    #font Unicode-Foo Expert "(2.0)" Adobe-Identity ROM
    

    Description

    The #font directive defines a "base font" for all printer drivers. The name is the PostScript font name.

    The encoding is the default encoding of the font, usually Standard, Expert, or Special, as defined in the Adobe PPD file specification.

    The version is the PostScript string definition that corresponds to the font version number.

    The charset defines the available characters in the font, usually Standard or Special, as defined in the Adobe PPD file specification.

    The status is the installation status of the font and must be either the word ROM or Disk.

    Base fonts differ from fonts defined using the Font directive in that they are not automatically associated with all drivers - you must use the special Font * directive to include them in a driver.

    Currently the #font directive is used mainly for defining the standard raster fonts in the <font.defs> include file.

    See Also

    #include, Font

    #if

    Syntax

    #if name or expression
    

    Examples

    #if HAVE_FOO
    ...
    #elif (HAVE_BAR >= 999)
    ...
    #else
    ...
    #endif
    

    Description

    The #if directive allows portions of a driver information file to be used conditionally. When followed by a name, the data that follows is used only when the name is defined, otherwise the data is ignored. #if directives can be nested up to 100 times.

    See Also

    #elif, #else, #endif

    #include

    Syntax

    #include <filename>
    #include "filename"
    

    Examples

    #include <font.defs>
    #include "myfile.h"
    

    Description

    The #include directive reads the named driver information file. If the filename is included inside angle brackets (<filename>), then the PPD compiler will look for the file in all of the include directories it knows about. Otherwise, the file is opened in the current directory relative to the current driver information file, and if that fails then it looks in the include directories for the file.

    The #include directive can be nested to as many files as are allowed by the host operating system, typically at least 100 files.

    See Also

    #define, #font, #media

    #media

    Syntax

    #media name width length
    #media "name/text" width length
    

    Examples

    #media "Letter/Letter - 8.5x11in" 8.5in 11in
    #media "A4/A4 - 210x297mm" 210mm 297mm
    #media "w936h1368/Super B/A3 - 13x19in" 936 1368
    #media Photo 4in 6in
    

    Description

    The #media directive defines a named media size for inclusion in a driver. The name with optional user text defines the name for the media size and is used with the MediaSize directive to associate the media size with the driver. The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58). The user text, if supplied, may not exceed 80 bytes in length.

    The width and length define the dimensions of the media. Each number is optionally followed by one of the following unit suffixes:

    • cm - centimeters
    • ft - feet
    • in - inches
    • m - meters
    • mm - millimeters
    • pt - points (72 points = 1 inch)

    Points are assumed if no units are specified.

    See Also

    #include, CustomMedia, MediaSize

    #po

    Syntax

    #po locale filename
    

    Examples

    #po es "es.po"
    #po fr_CA "mydriver-fr_CA.po"
    

    Description

    The #po directive defines a message catalog to use for the given POSIX language abbreviation. Multiple #po directives can be specified to list multiple catalogs. The filename can be an absolute path or relative to the driver information file. GNU gettext and macOS .strings files are supported.

    Attribute

    Syntax

    Attribute name "" value
    Attribute name keyword value
    Attribute name "keyword/text" value
    

    Examples

    Attribute cupsInkChannels "" 1
    Attribute cupsAllDither 600dpi "1.0"
    Attribute fooProfile "Photo/Photographic Profile" "photopro.icc"
    

    Description

    The Attribute directive creates a PPD attribute. The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58).

    The selector can be the empty string ("") or text of up to 80 bytes.

    The value is any string or number; the string may contain multiple lines, however no one line may exceed 255 bytes.

    See Also

    LocAttribute

    Choice

    Syntax

    Choice name "code"
    Choice "name/text" "code"
    

    Examples

    Choice None "<</MediaType (None)>>setpagedevice"
    Choice "False/No" "<</cupsCompression 0>>setpagedevice"
    

    Description

    The Choice directive adds a single choice to the current option. The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58).

    If provided, the text can be any string up to 80 bytes in length. If no text is provided, the name is used.

    The code is any string and may contain multiple lines, however no one line may exceed 255 bytes.

    See Also

    ColorModel, Cutter, Darkness, Duplex, Finishing, Group, InputSlot, Installable, MediaType, Option, Resolution, UIConstraints

    ColorDevice

    Syntax

    ColorDevice boolean-value
    

    Examples

    ColorDevice no
    ColorDevice yes
    

    Description

    The ColorDevice directive tells the application if the printer supports color. It is typically used in conjunction with the ColorModel directive to provide color printing support.

    See Also

    ColorModel

    DeprecatedColorModel

    Syntax

    ColorModel name colorspace colororder compression
    ColorModel "name/text" colorspace colororder compression
    

    Examples

    ColorModel Gray/Grayscale w chunky 0
    ColorModel RGB/Color rgb chunky 0
    ColorModel CMYK cmyk chunky 0
    

    Description

    The ColorModel directive is a convenience directive which creates a ColorModel option and choice for the current printer driver. The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58).

    If provided, the text can be any string up to 80 bytes in length. If no text is provided, the name is used.

    The colorspace argument is one of the standard colorspace keywords defined later in this appendix in the section titled, "Colorspace Keywords".

    The colororder argument is one of the standard color order keywords defined later in this appendix in the section titled, "Color Order Keywords".

    The compression argument is any number and is assigned to the cupsCompression attribute in the PostScript page device dictionary.

    See Also

    Choice, ColorDevice, Cutter, Darkness, Duplex, Finishing, Group, InputSlot, Installable, MediaType, Option, Resolution, UIConstraints

    DeprecatedColorProfile

    Syntax

    ColorProfile resolution/mediatype gamma density matrix
    

    Examples

    ColorProfile -/- 1.7 1.0
         1.0    0.0    0.0
         0.0    1.0    0.0
         0.0    0.0    1.0
    
    ColorProfile 360dpi/- 1.6 1.0
         1.0   -0.05  -0.3
        -0.35   1.0   -0.15
        -0.095 -0.238  0.95
    
    ColorProfile 720dpi/Special 1.5 1.0
         1.0    0.0   -0.38
        -0.4    1.0    0.0
         0.0   -0.38   0.9
    

    Description

    The ColorProfile directive defines a CMY transform-based color profile. The resolution and mediatype arguments specify the Resolution and MediaType choices which use the profile; the hyphen (-) is used to specify that any resolution or mediatype can be used with the profile.

    The gamma argument specifies the gamma correction to apply to the color values (P = pg) and is a real number greater than 0. Values larger than 1 cause a general lightening of the print while values smaller than 1 cause a general darkening of the print. A value of 1 disables gamma correction.

    The density argument specifies the linear density correction to apply to the color values (P = d * pg) and is a real number greater than 0 and less than or equal to 1. A value 1 of disables density correction while lower values produce proportionately lighter output.

    The matrix argument specifies a 3x3 linear transformation matrix in row-major order. The matrix is applied only to the CMY component of a RGB to CMYK transformation and is not used when printing in grayscale or CMYK mode unless the printer only supports printing with 3 colors.

    See Also

    SimpleColorProfile

    Copyright

    Syntax

    Copyright "text"
    

    Examples

    Copyright "Copyright 2008 by Foo Enterprises"
    
    Copyright
    "This software is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
    published by the Free Software Foundation; either version 2 of
    the License, or (at your option) any later version.
    
    This software is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public
    License along with this software; if not, write to the Free
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
    MA 02111 USA"
    

    Description

    The Copyright directive adds text comments to the top of a PPD file, typically for use in copyright notices. The text argument can contain multiple lines of text, but no line may exceed 255 bytes.

    CustomMedia

    Syntax

    CustomMedia name width length left bottom right top
        "size-code" "region-code"
    
    CustomMedia "name/text" width length left bottom right top
        "size-code" "region-code"
    

    Examples

    CustomMedia Letter 8.5in 11in 0.25in 0.46in 0.25in 0.04in
        "<</PageSize[612 792]/ImagingBBox null/ManualFeed false>>
         setpagedevice"
        "<</PageSize[612 792]/ImagingBBox null/ManualFeed true>>
         setpagedevice"
    
    CustomMedia "A4/A4 - 210x297mm" 210mm 297mm 12 12 12 12
        "<</PageSize[595 842]/ImagingBBox null>>setpagedevice"
        "<</PageSize[595 842]/ImagingBBox null>>setpagedevice"
    

    Description

    The CustomMedia directive adds a custom media size to the driver. The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58).

    If provided, the text can be any string up to 80 bytes in length. If no text is provided, the name is used.

    The width and length arguments specify the dimensions of the media as defined for the #media directive.

    The left, bottom, right, and top arguments specify the printable margins of the media.

    The size-code and region-code arguments specify the PostScript commands to run for the PageSize and PageRegion options, respectively. The commands can contain multiple lines, however no line may be more than 255 bytes in length.

    See Also

    #media, MediaSize

    Cutter

    Syntax

    Cutter boolean-value
    

    Examples

    Cutter yes
    Cutter no
    

    Description

    The Cutter directive specifies whether the printer has a built-in media cutter. When a cutter is present, the printer's PPD file will contain a CutMedia option that allows the user to control whether the media is cut at the end of the job.

    See Also

    Choice, ColorModel, Darkness, Duplex, Finishing, Group, InputSlot, Installable, MediaType, Option, Resolution, UIConstraints

    DeprecatedDarkness

    Syntax

    Darkness temperature name
    Darkness temperature "name/text"
    

    Examples

    Darkness 0 Light
    Darkness 2 "Normal/Standard"
    

    Description

    The Darkness directive defines a choice for the cupsDarkness option which sets the cupsCompression attribute in the PostScript page device dictionary. It is used with the CUPS rastertolabel sample driver to control the print head temperature and therefore the darkness of the print.

    The temperature argument specifies a temperature value for the Dymo driver from 0 (lowest) to 3 (highest), with 2 representing the normal setting.

    The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58).

    If provided, the text can be any string up to 80 bytes in length. If no text is provided, the name is used.

    See Also

    Choice, ColorModel, Cutter, Duplex, Finishing, Group, InputSlot, Installable, MediaType, Option, Resolution, UIConstraints

    DriverType

    Syntax

    DriverType type
    

    Examples

    DriverType custom
    DriverType escp
    DriverType pcl
    DriverType ps
    

    Description

    The DriverType directive tells the PPD compiler which DDK filters to include in the PPD file. The following types are supported:

    • custom - Use only those filters that are defined in the driver information file
    • epson - Use the CUPS sample Epson driver filter rastertoepson
    • escp - Use the ESC/P DDK driver filters commandtoescpx and rastertoescpx
    • hp - Use the CUPS sample HP driver filter rastertohp
    • label - Use the CUPS sample label driver filter rastertolabel
    • pcl - Use the HP-PCL DDK driver filters commandtopclx and rastertopclx
    • ps - Use no filters; this driver is for a standard PostScript device

    See Also

    Filter, ModelNumber

    Duplex

    Syntax

    Duplex type
    

    Examples

    Duplex none
    Duplex normal
    Duplex flip
    Duplex rotated
    Duplex manualtumble
    

    Description

    The Duplex directive determines whether double-sided printing is supported in the current driver. The type argument specifies the type of duplexing that is supported:

    • none - double-sided printing is not supported
    • normal - double-sided printing is supported
    • flip - double-sided printing is supported, but the back side image needs to be flipped vertically (used primarily with inkjet printers)
    • rotated - double-sided printing is supported, but the back side image needs to be rotated 180 degrees for DuplexNoTumble
    • manualtumble - double-sided printing is supported, but the back side image needs to be rotated 180 degrees for DuplexTumble

    See Also

    Choice, ColorModel, Cutter, Darkness, Finishing, Group, InputSlot, Installable, MediaType, Option, Resolution, UIConstraints

    FileName

    Syntax

    FileName "filename"
    

    Examples

    FileName "Acme Laser Printer 2000"
    FileName "Acme Ink Waster 1000"
    

    Description

    The FileName attribute specifies the "long" name of the PPD file for the current driver.

    See Also

    Manufacturer, ModelName, PCFileName, Version

    Filter

    Syntax

    Filter mime-type cost program
    

    Examples

    Filter application/vnd.cups-raster 50 rastertofoo
    Filter application/vnd.hp-HPGL 25 /usr/foo/filter/hpgltofoo
    

    Description

    The Filter directive adds a filter for the current driver. The mime-type argument is a valid MIME media type name as defined in a CUPS mime.types file.

    The cost argument specifies the relative cost of the filter. In general, use a number representing the average percentage of CPU time that is used when printing the specified MIME media type.

    The program argument specifies the program to run; if the program is not an absolute filename, then CUPS will look for the program in the CUPS filter directory.

    See Also

    DriverType

    DeprecatedFinishing

    Syntax

    Finishing name
    Finishing "name/text"
    

    Examples

    Finishing None
    Finishing "Glossy/Photo Overcoat"
    

    Description

    The Finishing directive adds a choice to the cupsFinishing option. The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58).

    If provided, the text can be any string up to 80 bytes in length. If no text is provided, the name is used.

    The name is stored in the OutputType attribute in the PostScript page device dictionary.

    See Also

    Choice, ColorModel, Cutter, Darkness, Duplex, Group, InputSlot, Installable, MediaType, Option, Resolution, UIConstraints

    Font

    Syntax

    Font name encoding "version" charset status
    Font *
    

    Examples

    Font *
    Font Courier Standard "(1.05)" Standard ROM
    Font Symbol Special "(001.005)" Special ROM
    Font Barcode-Foo Special "(1.0)" Special Disk
    Font Unicode-Foo Expert "(2.0)" Adobe-Identity ROM
    

    Description

    The Font directive defines a "device font" for the current printer driver. The name is the PostScript font name.

    The encoding is the default encoding of the font, usually Standard, Expert, or Special, as defined in the Adobe PPD file specification.

    The version is the PostScript string definition that corresponds to the font version number.

    The charset defines the available characters in the font, usually Standard or Special, as defined in the Adobe PPD file specification.

    The status is the installation status of the font and must be either the word ROM or Disk.

    Device fonts differ from fonts defined using the #font directive in that they are automatically associated with the current driver. Fonts defined using #font may be imported into the current driver using the Font * form of this directive.

    See Also

    #font

    Group

    Syntax

    Group name
    Group "name/text"
    

    Examples

    Group General
    Group "InstallableOptions/Options Installed"
    Group "Special/Vendor Options"
    

    Description

    The Group directive specifies the group for new Option directives. The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58).

    If provided, the text can be any string up to 40 bytes in length. If no text is provided, the name is used.

    The names General and InstallableOptions are predefined for the standard Adobe UI keywords and for installable options, respectively.

    Note:

    Because of certain API binary compatibility issues, CUPS limits the length of PPD group translation strings (text) to 40 bytes, while the PPD specification allows for up to 80 bytes.

    See Also

    Choice, ColorModel, Cutter, Darkness, Duplex, Finishing, InputSlot, Installable, MediaType, Option, Resolution, UIConstraints

    HWMargins

    Syntax

    HWMargins left bottom right top
    

    Examples

    HWMargins 18 36 18 36
    HWMargins 0.25in 0.5in 0.25in 0.5in
    HWMargins 0.6cm 1.2cm 0.6cm 1.2cm
    

    Description

    The HWMargins directive specifies the current margins for MediaSize that follow. The left, bottom, right, and top margin values specify the printable margins.

    See Also

    MediaSize

    InputSlot

    Syntax

    InputSlot position name
    InputSlot position "name/text"
    

    Examples

    InputSlot 0 Auto
    InputSlot 1 "Upper/Tray 1"
    

    Description

    The InputSlot directive adds a new choice to the InputSlot option. The position argument is a number from 0 to 232-1 specifying the value that is placed in the MediaPosition attribute in the PostScript page device dictionary.

    The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58).

    If provided, the text can be any string up to 80 bytes in length. If no text is provided, the name is used.

    See Also

    Choice, ColorModel, Cutter, Darkness, Duplex, Finishing, Group, Installable, MediaType, Option, Resolution, UIConstraints

    Installable

    Syntax

    Installable name
    Installable "name/text"
    

    Examples

    Installable EnvTray
    Installable "Option1/Duplexer Installed"
    

    Description

    The Installable directive adds a new boolean option to the InstallableOptions group with a default value of False. The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58).

    If provided, the text can be any string up to 80 bytes in length. If no text is provided, the name is used.

    LocAttribute

    Syntax

    LocAttribute name "keyword/text" value
    

    Examples

    LocAttribute fooProfile "Photo/Photographic Profile" "photopro.icc"
    

    Description

    The LocAttribute directive creates a localized PPD attribute. The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58).

    The selector can be the empty string ("") or text of up to 80 bytes.

    The value is any string or number; the string may contain multiple lines, however no one line may exceed 255 bytes.

    See Also

    Attribute

    ManualCopies

    Syntax

    ManualCopies boolean-value
    

    Examples

    ManualCopies no
    ManualCopies yes
    

    Description

    The ManualCopies directive specifies whether copies need to be produced by the RIP filters. The default is no.

    See Also

    Choice, ColorModel, Cutter, Darkness, Duplex, Finishing, Group, InputSlot, MediaType, Option, Resolution, UIConstraints

    Manufacturer

    Syntax

    Manufacturer "name"
    

    Examples

    Manufacturer "Foo"
    Manufacturer "HP"
    

    Description

    The Manufacturer directive specifies the manufacturer name for the current driver. The name argument must conform to the manufacturer name requirements in the Adobe PPD file specification.

    See Also

    FileName, ModelName, PCFileName, Version

    MaxSize

    Syntax

    MaxSize width length
    

    Examples

    MaxSize 36in 100ft
    MaxSize 300cm 30m
    

    Description

    The MaxSize directive specifies the maximum width and length that is supported for custom page sizes.

    See Also

    MinSize, VariablePaperSize

    MediaSize

    Syntax

    MediaSize name
    

    Examples

    MediaSize Letter
    MediaSize A4
    

    Description

    The MediaSize directive adds the named size to the current printer driver using the current margins defined with the HWMargins directive. The name argument must match a media size defined using the #media directive.

    See Also

    #media, HWMargins

    MediaType

    Syntax

    MediaType type name
    MediaType type "name/text"
    

    Examples

    MediaType 0 Auto
    MediaType 1 "Plain/Plain Paper"
    

    Description

    The MediaType directive adds a new choice to the MediaType option. The type argument is a number from 0 to 232-1 specifying the value that is placed in the cupsMediaType attribute in the PostScript page device dictionary.

    The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58).

    If provided, the text can be any string up to 80 bytes in length. If no text is provided, the name is used.

    The name is placed in the MediaType attribute in the PostScript page device dictionary.

    See Also

    Choice, ColorModel, Cutter, Darkness, Duplex, Finishing, Group, InputSlot, Installable, Option, Resolution, UIConstraints

    MinSize

    Syntax

    MinSize width length
    

    Examples

    MinSize 4in 8in
    MinSize 10cm 20cm
    

    Description

    The MinSize directive specifies the minimum width and length that is supported for custom page sizes.

    See Also

    MaxSize, VariablePaperSize

    ModelName

    Syntax

    ModelName "name"
    

    Examples

    ModelName "Foo Laser Printer 2000"
    ModelName "Colorific 123"
    

    Description

    The ModelName directive sets the printer name for the ModelName, NickName, and ShortNickName attributes for the printer driver. The name is any string of letters, numbers, spaces, and the characters ".", "/", "-", and "+" and should not begin with the manufacturer name since the PPD compiler will add this automatically for you. The maximum length of the name string is 31 bytes to conform to the Adobe limits on the length of ShortNickName.

    See Also

    FileName, Manufacturer, PCFileName, Version

    ModelNumber

    Syntax

    ModelNumber expression
    

    Examples

    ModelNumber 123
    ModelNumber ($PCL_PAPER_SIZE $PCL_PJL)
    

    Description

    The ModelNumber directive sets the cupsModelNumber attribute for the printer driver, which is often used by the printer driver filter to tailor its output for the current device. The number is any integer or bitwise OR of integers and constants that is appropriate for the printer driver filters.

    A complete list of printer driver model number constants is available later in this appendix in the section titled, "Printer Driver ModelNumber Constants".

    See Also

    DriverType, Filter

    Option

    Syntax

    Option name type section order
    Option "name/text" type section order
    

    Examples

    Option Punch Boolean AnySetup 10
    Option "fooFinish/Finishing Option" PickOne DocumentSetup 10
    

    Description

    The Option directive creates a new option in the current group, by default the General group. The name may contain up to 40 ASCII characters within the range of decimal 33 to decimal 126 inclusive, except for the characters comma (44), slash (47) and colon (58).

    If provided, the text can be any string up to 80 bytes in length. If no text is provided, the name is used.

    The type argument is one of the following keywords:

    • Boolean - a true/false option
    • PickOne - allows the user to pick one choice from a list
    • PickMany - allows the user to pick zero or more choices from a list

    The section argument is one of the following keywords:

    • AnySetup - The option can be placed in either the DocumentSetup or PageSetup sections of the PostScript document
    • DocumentSetup - The option must be placed in the DocumentSetup section of the PostScript document; this does not allow the option to be overridden on individual pages
    • ExitServer - The option must be placed in a separate initialization job prior to the document (not used for raster printer drivers)
    • JCLSetup - The option contains job control language commands and must be sent prior to the document using the JCLBegin and JCLToPSInterpreter attributes (not used for raster printer drivers)
    • PageSetup - The option must be placed at the beginning of each page in the PostScript document
    • Prolog - The option must be placed in the prolog section of the PostScript document; this is typically used to add special comments for high-end typesetters, but can also be used to add CUPS PostScript job ticket comments.

    The order argument is a real number greater than or equal to 0.0 and is used to sort the printer commands from many options before sending them to the printer or RIP filter.

    See Also

    Choice, ColorModel, Cutter, Darkness, Duplex, Finishing, Group, InputSlot, Installable, MediaType, Resolution, UIConstraints

    PCFileName

    Syntax

    PCFileName "filename.ppd"
    

    Examples

    PCFileName "foljt2k1.ppd"
    PCFileName "deskjet.ppd"
    

    Description

    The PCFileName attribute specifies the name of the PPD file for the current driver. The filename argument must conform to the Adobe PPD file specification and can be no more than 8 filename characters plus the extension ".ppd".

    See Also

    FileName, Manufacturer, ModelName, Version

    DeprecatedResolution

    Syntax

    Resolution colorspace bits-per-color row-count row-feed row-step name
    Resolution colorspace bits-per-color row-count row-feed row-step "name/text"
    

    Examples

    Resolution - 8 0 0 0 300dpi
    Resolution k 8 0 0 0 "600x300dpi/600 DPI Grayscale"
    

    Description

    The Resolution directive creates a new Resolution option choice which sets the HWResolution, cupsBitsPerColor, cupsRowCount, cupsRowFeed, cupsRowStep, and optionally the cupsColorSpace page device dictionary attributes. The colorspace argument specifies a colorspace to use for the specified resolution and can be the hyphen (-) character to make no change to the selected color model or any keyword listed in the section titled, "Colorspace Keywords", to force the named colorspace.

    The bits-per-color argument specifies the number of bits per color to generate when RIP'ing a job. The values 1, 2, 4, and 8 are currently supported by CUPS.

    The row-count, row-feed, and row-step argument specify the driver-dependent values for the cupsRowCount, cupsRowFeed, and cupsRowStep attributes, respectively. Most drivers leave these attributes set to 0, but any number from 0 to 232-1 is allowed.

    The name argument must conform to the resolution naming conventions in the Adobe PPD file specification, either HHHdpi for symmetric resolutions or HHHxVVVdpi for asymmetric resolutions. The HHH and VVV in the examples represent the horizontal and vertical resolutions which must be positive integer values.

    If provided, the text can be any string up to 80 bytes in length. If no text is provided, the name is used.

    See Also

    Choice, ColorModel, Cutter, Darkness, Duplex, Finishing, Group, InputSlot, Installable, MediaType, Option, UIConstraints

    DeprecatedSimpleColorProfile

    Syntax

    SimpleColorProfile resolution/mediatype density
        yellow-density red-density gamma
        red-adjust green-adjust blue-adjust
    

    Examples

    SimpleColorProfile -/- 100 100 200 1.0 0 0 0
    
    SimpleColorProfile 360dpi/- 100 95 150 1.2 5 10 15
    
    SimpleColorProfile 720dpi/Glossy 100 90 120 1.5 -5 5 10
    

    Description

    The SimpleColorProfile directive creates a matrix-based ColorProfile. The resolution and mediatype arguments specify the Resolution and MediaType choices which use the profile; the hyphen (-) is used to specify that any resolution or mediatype can be used with the profile.

    The density argument specifies the linear density correction to apply to the color values (P = d * 0.01 * pg) and is an integer greater than 0 and less than or equal to 100. A value 100 of disables density correction while lower values produce proportionately lighter output. The density value adjusts all color channels equally in all color modes.

    The yellow-density argument specifies the density of the yellow channel when printing in grayscale or RGB mode and is an integer greater than 0 and less then or equal to 100. A value of 100 disables yellow density correction while lower values produce proportionately lighter output.

    The red-density argument specifies the two-color density limit (e.g. C + M, C + Y, M + Y) when printing in grayscale or RGB mode and is an integer greater than 0 and less then or equal to 200. A value of 200 disables two-color density correction while lower values produce proportionately lighter output.

    The gamma argument specifies the gamma correction to apply to the color values (P = pg) and is a real number greater than 0. Values larger than 1 cause a general lightening of the print while values smaller than 1 cause a general darkening of the print. A value of 1 disables gamma correction.

    The red-adjust, green-adjust, blue-adjust arguments specify the percentage of color to add or remove. Positive red-adjust values add magenta and negative values add yellow. Positive green-adjust values add cyan and negative values add yellow. Positive blue-adjust values add cyan and negative values add magenta. Values of 0 disable color adjustments.

    See Also

    ColorProfile

    Throughput

    Syntax

    Throughput pages-per-minute
    

    Examples

    Throughput 1
    Throughput 10
    

    Description

    The Throughput directive sets the Throughput attribute for the current printer driver. The pages-per-minute argument is a positive integer representing the peak number of pages per minute that the printer is capable of producing. Use a value of 1 for printers that produce less than 1 page per minute.

    UIConstraints

    Syntax

    UIConstraints "*Option1 *Option2"
    UIConstraints "*Option1 Choice1 *Option2"
    UIConstraints "*Option1 *Option2 Choice2"
    UIConstraints "*Option1 Choice1 *Option2 Choice2"
    

    Examples

    UIConstraints "*Finishing *MediaType"
    UIConstraints "*Option1 False *Duplex"
    UIConstraints "*Duplex *MediaType Transparency"
    UIConstraints "*Resolution 600dpi *ColorModel RGB"
    

    Description

    The UIConstraints directive adds a constraint between two options. Constraints inform the application when a user has chosen incompatible options. Each option name is preceded by the asterisk (*). If no choice is given for an option, then all choices except False and None will conflict with the other option and choice(s). Since the PPD compiler automatically adds reciprocal constraints (option A conflicts with option B, so therefore option B conflicts with option A), you need only specify the constraint once.

    See Also

    Choice, ColorModel, Cutter, Darkness, Duplex, Finishing, Group, InputSlot, Installable, MediaType, Option, Resolution

    VariablePaperSize

    Syntax

    VariablePaperSize boolean-value
    

    Examples

    VariablePaperSize yes
    VariablePaperSize no
    

    Description

    The VariablePaperSize directive specifies whether the current printer supports variable (custom) page sizes. When yes is specified, the PPD compiler will include the standard PPD attributes required to support custom page sizes.

    See Also

    MaxSize, MinSize

    Version

    Syntax

    Version number
    

    Examples

    Version 1.0
    Version 3.7
    

    Description

    The Version directive sets the FileVersion attribute in the PPD file and is also used for the NickName attribute. The number argument is a positive real number.

    See Also

    Manufacturer, ModelName, PCFileName

    Standard Include Files

    Table B-1 shows the standard include files which are provided with the DDK.

    Table B-1, Standard Include Files
    Include File Description
    <font.defs> Defines all of the standard fonts which are included with ESP Ghostscript and the Apple PDF RIP.
    <epson.h> Defines all of the CUPS ESC/P sample driver constants.
    <escp.h> Defines all of the DDK ESC/P driver constants.
    <hp.h> Defines all of the CUPS HP-PCL sample driver constants.
    <label.h> Defines all of the CUPS label sample driver constants.
    <media.defs> Defines all of the standard media sizes listed in Appendix B of the Adobe PostScript Printer Description File Format Specification.
    <pcl.h> Defines all of the DDK HP-PCL driver constants.
    <raster.defs> Defines all of the CUPS raster format constants.

    Printer Driver ModelNumber Constants

    The CUPS DDK and sample drivers use the cupsModelNumber attribute in the PPD file to tailor their output to the printer. The following sections describe the constants for each driver.

    The CUPS ESC/P Sample Driver (epson)

    The epson driver supports Epson and Okidata dot-matrix, Epson Stylus Color, and Epson Stylus Photo printers. Table B-2 lists the constants for the ModelNumber directive. ModelNumber values should be inserted by referencing only one of these constants.

    Table B-2, epson driver constants
    Constant Description
    EPSON_9PIN Epson and Okidata 9-pin dot-matrix printers
    EPSON_24PIN Epson and Okidata 24-pin dot-matrix printers
    EPSON_COLOR Older Epson Stylus Color printers that use the ESC . graphics command
    EPSON_PHOTO Older Epson Stylus Photo printers that use the ESC . graphics command
    EPSON_ICOLOR Newer Epson Stylus Color printers that use the ESC i graphics command
    EPSON_IPHOTO Newer Epson Stylus Photo printers that use the ESC i graphics command

    The CUPS HP-PCL Sample Driver (hp)

    The hp driver supports HP LaserJet and DeskJet printers. Table B-3 lists the constants for the ModelNumber directive. ModelNumber values should be inserted by referencing only one of these constants.

    Table B-3, hp driver constants
    Constant Description
    HP_LASERJET HP LaserJet printers supporting PCL 3, 4, or 5
    HP_DESKJET HP DeskJet printers supporting PCL 3 and using the simple color graphics command (ESC * r # U)
    HP_DESKJET2 HP DeskJet printers supporting PCL3GUI and using the configure raster graphics command (ESC * g # W)

    The CUPS Label Sample Driver (label)

    The label driver supports the Dymo Labelwriter, Zebra CPCL, Zebra EPL, and Zebra ZPL, and Intellitech PCL label printers. Table B-4 lists the constants for the ModelNumber directive. ModelNumber values should be inserted by referencing only one of these constants.

    Table B-4, label driver constants
    Constant Description
    DYMO_3x0 Format output for the Dymo Labelwriter 300, 330, or 330 Turbo.
    INTELLITECH_PCL Format output for the Intellitech PCL printers.
    ZEBRA_CPCL Format output for the Zebra CPCL printers.
    ZEBRA_EPL_LINE Format output for the Zebra EPL line mode (EPL 1) printers.
    ZEBRA_EPL_PAGE Format output for the Zebra EPL page mode (EPL 2) printers.
    ZEBRA_ZPL Format output for the Zebra ZPL printers.

    The DDK ESC/P Driver (escp)

    The escp driver supports all Epson inkjet printers. Table B-6 lists the constants for the ModelNumber directive. ModelNumber values should be specified as the bitwise OR of one or more of these constants.

    Table B-6, escp driver constants
    Constant Description
    ESCP_MICROWEAVE Use microweave command?
    ESCP_STAGGER Are color jets staggered?
    ESCP_ESCK Use print mode command?
    ESCP_EXT_UNITS Use extended unit commands?
    ESCP_EXT_MARGINS Use extended margin command?
    ESCP_USB Send USB packet mode escape
    ESCP_PAGE_SIZE Use page size command
    ESCP_RASTER_ESCI Use ESC i graphics command
    ESCP_REMOTE Use remote mode commands
    ESCP_REMOTE_AC Use auto-cutter command
    ESCP_REMOTE_CO Use cutter-operation command
    ESCP_REMOTE_EX Use media-position command
    ESCP_REMOTE_MS Use media-size command
    ESCP_REMOTE_MT Use media-type command
    ESCP_REMOTE_PC Use paper-check command
    ESCP_REMOTE_PH Use paper-thickness command
    ESCP_REMOTE_PP Use paper-path command
    ESCP_REMOTE_SN0 Use feed-sequence-0 command
    ESCP_REMOTE_SN1 Use platten-gap command
    ESCP_REMOTE_SN2 Use feed-sequence-2 command
    ESCP_REMOTE_SN6 Use eject-delay command
    ESCP_REMOTE_FP Use print-position command

    The DDK HP-PCL Driver (pcl)

    The pcl driver supports all HP LaserJet, DeskJet, and DesignJet printers. Table B-5 lists the constants for the ModelNumber directive. ModelNumber values should be specified as the bitwise OR of one or more of these constants.

    Table B-5, pcl driver constants
    Constant Description
    PCL_PAPER_SIZE Use paper size command (ESC & l # A)
    PCL_INKJET Use inkjet commands
    PCL_RASTER_END_COLOR Use new end-raster command (ESC * r C)
    PCL_RASTER_CID Use configure-image-data command (ESC * v # W)
    PCL_RASTER_CRD Use configure-raster-data command (ESC * g # W)
    PCL_RASTER_SIMPLE Use simple-raster-color command (ESC * r # U)
    PCL_RASTER_RGB24 Use 24-bit RGB mode
    PCL_PJL Use PJL commands
    PCL_PJL_PAPERWIDTH Use PJL PAPERWIDTH/LENGTH commands
    PCL_PJL_HPGL2 Use PJL ENTER HPGL2 command
    PCL_PJL_PCL3GUI Use PJL ENTER PCL3GUI command
    PCL_PJL_RESOLUTION Use PJL SET RESOLUTION command

    Color Keywords

    The PPD compiler defines two types of color keywords: colorspace and color order. The following sections list the supported keywords for each type.

    Colorspace Keywords

    The following colorspace keywords are recognized:

    • cielab - CIE Lab **
    • ciexyz - CIE XYZ **
    • cmy - Cyan, magenta, yellow
    • cmyk - Cyan, magenta, yellow, black
    • gmck - Gold, magenta, yellow, black **
    • gmcs - Gold, magenta, yellow, silver **
    • gold - Gold foil **
    • icc1 - ICC-based, 1 color **
    • icc2 - ICC-based, 2 colors **
    • icc3 - ICC-based, 3 colors **
    • icc4 - ICC-based, 4 colors **
    • icc5 - ICC-based, 5 colors **
    • icc6 - ICC-based, 6 colors **
    • icc7 - ICC-based, 7 colors **
    • icc8 - ICC-based, 8 colors **
    • icc9 - ICC-based, 9 colors **
    • icca - ICC-based, 10 colors **
    • iccb - ICC-based, 11 colors **
    • iccc - ICC-based, 12 colors **
    • iccd - ICC-based, 13 colors **
    • icce - ICC-based, 14 colors **
    • iccf - ICC-based, 15 colors **
    • k - Black
    • kcmy - Black, cyan, magenta, yellow *
    • kcmycm - Black, cyan, magenta, yellow, light-cyan, light-magenta *
    • rgb - Red, green, blue
    • rgba - Red, green, blue, alpha
    • rgbw - Red, green, blue, luminance *
    • silver - Silver foil **
    • w - Luminance
    • white - White ink (as black) **
    • ymc - Yellow, magenta, cyan *
    • ymck - Yellow, magenta, cyan, black *
       
      * = This colorspace is not supported on macOS prior to 10.4.
      ** = This colorspace is not supported on macOS.

    Color Order Keywords

    The following color order keywords are recognized:

    • chunked or chunky - Color values are passed together on a line as RGB RGB RGB RGB
    • banded - Color values are passed separately on a line as RRRR GGGG BBBB *
    • planar - Color values are passed separately on a page as RRRR RRRR RRRR ... GGGG GGGG GGGG ... BBBB BBBB BBBB *
       
      * = This color order is not supported by the current Apple RIP filters and should not be used when developing printer drivers for macOS.
    cups-2.2.7/doc/help/security.html000664 000765 000024 00000010707 13255074424 017412 0ustar00msweetstaff000000 000000 Server Security

    Server Security

    In the default "standalone" configuration, there are few potential security risks - the CUPS server does not accept remote connections, and only accepts shared printer information from the local subnet. When you share printers and/or enable remote administration, you expose your system to potential unauthorized access. This help page provides an analysis of possible CUPS security concerns and describes how to better secure your server.

    Authentication Issues

    When you enable remote administration, the server will use Basic authentication for administration tasks. The current CUPS server supports Basic, Kerberos, and local certificate authentication:

    1. Basic authentication essentially places the clear text of the username and password on the network.

      Since CUPS uses the system username and password account information, the authentication information could be used to gain access to possibly privileged accounts on the server.

      Recommendation: Enable encryption to hide the username and password information - this is the default on macOS and systems with GNU TLS installed.

    2. Local certificate authentication passes 128-bit "certificates" that identify an authenticated user. Certificates are created on-the-fly from random data and stored in files under /var/run/cups/certs. They have restricted read permissions: root + system-group(s) for the root certificate, and lp + lp for CGI certificates.

      Because certificates are only available on the local system, the CUPS server does not accept local authentication unless the client is connected to the loopback interface (127.0.0.1 or ::1) or domain socket.

      Recommendation: Ensure that unauthorized users are not added to the system group(s).

    Denial of Service Attacks

    When printer sharing or remote administration is enabled, the CUPS server, like all Internet services, is vulnerable to a variety of denial of service attacks:

    1. Establishing multiple connections to the server until the server will accept no more.

      This cannot be protected against by any known software. The MaxClientsPerHost directive can be used to configure CUPS to limit the number of connections allowed from a single host, however that does not prevent a distributed attack.

      Recommendation: Limit access to trusted systems and networks.

    2. Repeatedly opening and closing connections to the server as fast as possible.

      There is no easy way of protecting against this in the CUPS software. If the attack is coming from outside the local network, it may be possible to filter such an attack. However, once the connection request has been received by the server it must at least accept the connection to find out who is connecting.

      Recommendation: None.

    3. Sending partial IPP requests; specifically, sending part of an attribute value and then stopping transmission.

      The current code will wait up to 1 second before timing out the partial value and closing the connection. This will slow the server responses to valid requests and may lead to dropped browsing packets, but will otherwise not affect the operation of the server.

      Recommendation: Block IPP packets from foreign or untrusted networks using a router or firewall.

    4. Sending large/long print jobs to printers, preventing other users from printing.

      There are limited facilities for protecting against large print jobs (the MaxRequestSize attribute), however this will not protect printers from malicious users and print files that generate hundreds or thousands of pages.

      Recommendation: Restrict printer access to known hosts or networks, and add user-level access controls as needed for expensive printers.

    Encryption Issues

    CUPS supports 128-bit TLS encryption of network connections via the GNU TLS library, macOS Security framework, and Windows Schannel APIs. Secure deployment of TLS depends on proper certificate management and software maintenance.

    cups-2.2.7/doc/help/sharing.html000664 000765 000024 00000010702 13255074424 017171 0ustar00msweetstaff000000 000000 Printer Sharing

    Printer Sharing

    This document discusses several ways to configure printer sharing.

    The Basics

    A "server" is any machine that communicates directly to a printer. A "client" is any machine that sends print jobs to a server for final printing. Clients can also be servers if they communicate directly with any printers of their own.

    By default, CUPS uses the Internet Printing Protocol (IPP) to send jobs from a client to a server. When printing to legacy print servers you may also use the Line Printer Daemon (LPD) protocol when printing to older UNIX-based servers or Server Message Block (SMB) when printing to Windows® servers.

    Clients can automatically discover and access shared printers via DNS Service Discovery (DNS-SD a.k.a. Bonjour®). SMB browsing can also be used to manually discover and access shared printers when Samba is installed.

    Configuring the Server

    You must enable printer sharing on the server before clients can print through it. The simplest way to do this is to use the cupsctl(8) command on the server:

    cupsctl --share-printers
    

    By default, the above command will allow printing from other clients on the same subnet as your server. To allow printing from any subnet, use the following command instead:

    cupsctl --share-printers --remote-any
    

    Next, tag each printer that you want to share using the lpadmin(8) command on the server, for example:

    lpadmin -p printer -o printer-is-shared=true
    

    You can require authentication for shared printing by setting the policy on each printer, for example:

    lpadmin -p printer -o printer-op-policy=authenticated
    

    Automatic Configuration using IPP

    Note:

    This method of configuration does not work on macOS 10.7 or later because sandboxed applications do not always have direct network access.

    CUPS can be configured to run without a local spooler and send all jobs to a single server. However, if that server goes down then all printing will be disabled. Use this configuration only as absolutely necessary.

    The default server is normally the local system ("localhost"). To override the default server create a file named /etc/cups/client.conf with a line as follows:

    ServerName server
    

    The server name can be the hostname or IP address of the default server. If the server is not using the default IPP port (631), you can add the port number at the end like this:

    ServerName server:port
    

    The default server can also be customized on a per-user basis. To set a user-specific server create a file named ~/.cups/client.conf instead. The user client.conf file takes precedence over the system one.

    Finally, you can set the CUPS_SERVER environment variable to override the default server for a single process, for example:

    CUPS_SERVER=server:port firefox http://www.cups.org
    

    will run the Firefox web browser pointed to the specified server and port. The environment variable overrides both the user and system client.conf files, if any.

    Manual Configuration of Print Queues

    Note:

    This method of configuration does not work on macOS 10.7 or later because sandboxed applications do not always have direct network access.

    The most tedious method of configuring client machines is to configure each remote queue by hand using the lpadmin(8) command:

    lpadmin -p printer -E -v ipp://server/printers/printer
    

    The printer name is the name of the printer on the server machine. The server name is the hostname or IP address of the server machine. Repeat the lpadmin command for each remote printer you wish to use.

    cups-2.2.7/doc/help/spec-banner.html000664 000765 000024 00000010465 13255074424 017741 0ustar00msweetstaff000000 000000 CUPS Banner File Format

    CUPS Banner File Format

    Introduction

    This specification describes the CUPS banner file format (application/vnd.cups-banner) which is used to generate print job cover pages and the CUPS test page. The format itself consists of a header followed by lines of UTF-8 text containing comments or keywords and values:

    #CUPS-BANNER
    
    # What to show on the cover page
    Show job-id job-name job-originating-user-name time-at-creation
    
    # The header and footer text
    Header Cover Page
    Footer Cover Page
    
    # Arbitrary "notice" text
    Notice All work and no play makes Johnny a dull boy.
    Notice All work and no play makes Johnny a dull boy.
    Notice All work and no play makes Johnny a dull boy.
    Notice All work and no play makes Johnny a dull boy.
    
    # Images to place below the rest
    Image /usr/share/doc/cups/images/cups-icon.png
    Image /usr/share/doc/cups/images/smiley.jpg
    

    Standard Keywords

    Footer

    Footer text for footer

    The Footer key defines the text that is centered at the bottom of the page. Only one Footer key can be specified.

    Header

    Header text for Header

    The Header key defines the text that is centered at the top of the page. Only one Header key can be specified.

    Image

    Image /path/to/image/filename
    Image relative/path/in/DocumentRoot/filename

    The Image key defines images that are centered above the footer text. Multiple images are centered as a group from left to right. Images are scaled as needed to fit on the page with a nominal size of 1"/25cm.

    Notice

    Notice Text to display below the job information.
    Notice More text to display below the job information.

    The Notice key defines lines of text that are centered below the job information.

    Show

    Show value value ... value

    The Show key lists the job information that is shown. The following values are supported:

    • imageable-area: The imageable area of the current page size
    • job-billing: Billing information for the job
    • job-id: The job ID
    • job-name: The title of the job
    • job-originating-host-name: The computer that printed the job
    • job-originating-user-name: The user that printed the job
    • job-uuid: The job UUID
    • options: The options that were provided with the job
    • paper-name: The name of the paper size used
    • paper-size: The dimensions of the paper size used.
    • printer-driver-name: The printer driver used
    • printer-driver-version: The driver version
    • printer-info: The printer description
    • printer-location: The location of the printer
    • printer-make-and-model: The make and model strings reported by the printer driver
    • printer-name: The printer used
    • time-at-creation: When the job was submitted
    • time-at-processing: The current date and time
    cups-2.2.7/doc/help/spec-command.html000664 000765 000024 00000014520 13255074424 020106 0ustar00msweetstaff000000 000000 CUPS Command File Format

    CUPS Command File Format

    Introduction

    This specification describes the CUPS command file format (application/vnd.cups-command) which is used to send printer maintenance commands to a printer in a device-independent way. The current specification supports basic maintenance functions such as head cleaning and self-test pages and query functions such as auto-configure, report supply levels, and report status.

    Printer drivers advertise support for the CUPS command file format by providing a filter for the application/vnd.cups-command file type. Applications can determine if a printer supports printing of CUPS command files by checking the printer-type attribute for the CUPS_PRINTER_COMMANDS capability bit.

    In addition, the PPD file for a printer can contain a cupsCommands keyword that provides a list of supported commands separated by spaces, for example:

    *cupsCommand: "AutoConfigure Clean PrintSelfTestPage ReportLevels ReportStatus"
    

    If no cupsCommands keyword is provided, the command filter must support AutoConfigure, Clean, PrintSelfTestPage, and ReportLevels. The scheduler also provides the printer-commands attribute containing the list of supported commands.

    File Syntax

    CUPS command files are ASCII text files. The first line of a CUPS command file MUST contain:

    #CUPS-COMMAND
    

    After that, each line is either a command or a comment. Comments begin with the # character, e.g.:

    # This is a comment
    

    Commands are any sequence of letters, numbers, and punctuation characters optionally followed by parameters separated by whitespace, e.g.:

    Clean all
    PrintSelfTestPage
    

    Command names are case-insensitive, so "PRINTSELFTESTPAGE", "printselftestpage", and "PrintSelfTestPage" are equivalent. Vendor-specific commands should use a domain name prefix, e.g.:

    com.vendor.foo
    com.vendor.bar param param2 ... paramN
    

    Standard Commands

    The following are the standard commands supported by the format. The only required command is PrintSelfTestPage.

    AutoConfigure

    AutoConfigure

    The AutoConfigure command updates the printer's PPD file and driver state information to reflect the current configuration of the printer. There are no arguments for this command.

    Example:

    #CUPS-COMMAND
    AutoConfigure
    

    Clean

    Clean colorname

    The Clean command performs a standard print head cleaning. The "colorname" parameter specifies which color or head to clean. If a printer does not support cleaning of individual colors or cartridges, then all colors are cleaned. Command filters MUST support the "all" colorname. Other standard color names include "black", "color", "photo", "cyan", "magenta", "yellow", "light-cyan", "light-magenta", "light-black", "light-gray", and "dark-gray".

    Example:

    #CUPS-COMMAND
    Clean all
    

    PrintAlignmentPage

    PrintAlignmentPage pass

    The PrintAlignmentPage command prints a head alignment page on the printer. The "pass" parameter provides a pass number from 1 to N. The number of passes is device-dependent.

    Example:

    #CUPS-COMMAND
    PrintAlignmentPage 1
    

    PrintSelfTestPage

    PrintSelfTestPage

    The PrintSelfTestPage command prints a self-test page on the printer. Typically this page shows whether all jets on a print head are functioning and that the print feed mechanisms are working properly.

    Example:

    #CUPS-COMMAND
    PrintSelfTestPage
    

    ReportLevels

    ReportLevels

    The ReportLevels command queries the supply levels on a printer and reports "marker-colors", "marker-levels", "marker-names", and "marker-types" attributes using "ATTR:" messages sent to the scheduler. This command should also report the current printer status using "STATE:" messages like the ReportStatus command.

    Example:

    #CUPS-COMMAND
    ReportLevels
    

    ReportStatus

    ReportStatus

    The ReportStatus command queries the printer for its current status and reports it using "STATE:" messages sent to the scheduler.

    Example:

    #CUPS-COMMAND
    ReportLevels
    

    SetAlignment

    SetAlignment pass value ... valueN

    The SetAlignment command sets print head alignment values. The "pass" parameter is a number from 1 to N. All parameters are device-dependent.

    Example:

    #CUPS-COMMAND
    SetAlignment 1 14
    
    cups-2.2.7/doc/help/spec-design.html000664 000765 000024 00000032060 13255074424 017740 0ustar00msweetstaff000000 000000 CUPS Design Description

    CUPS Design Description

    This design description documents the overall organization of CUPS. The purpose is not to provide a line-by-line description of the CUPS source code, but rather to describe the overall architecture and location of key pieces so that developers can more easily understand the underlying operation of CUPS.

    Introduction

    Like most printing systems, CUPS is designed around a central print scheduling process that dispatches print jobs, processes administrative commands, provides printer status information to local and remote programs, and informs users as needed. Figure 1 shows the basic organization of CUPS.

    Scheduler

    The scheduler is a HTTP/1.1 and IPP/2.1 server application that manages HTTP and IPP requests, printers, classes, jobs, subscriptions, and notifications on the system. HTTP is used for normal web browser services as well as IPP operation messages passed via HTTP POST requests with the application/ipp content type. The scheduler uses a series of helper applications based on the Common Gateway Interface ("CGI") to provide dynamic web interfaces and can be configured to run additional site-specific programs or scripts for the web interface.

    The scheduler is designed as a traditional single-threaded server process which runs external processes to do longer-term operations such as printing, notification, device/driver enumeration, and remote printer monitoring. External processes are normally run as a non-privileged account ("lp") and, on some platforms, with additional restrictions that limit what the processes are allowed to do.

    The maximum number of simultaneous clients and print jobs that can be supported is primarily limited by the available server memory, file descriptors, and CPU - the scheduler itself imposes no hard limits.

    Figure 1: CUPS Block Diagram
    CUPS Block Diagram

    Config Files

    The scheduler uses several configuration files to store the server settings (cupsd.conf), available classes (classes.conf), available printers (printers.conf), current notification subscriptions (subscriptions.conf), and supported file types and filters (mime.types, mime.convs). In addition, PostScript Printer Description ("PPD") files are associated with each printer, and the scheduler has cache files for remote printers, PPD files, and current jobs to optimize the scheduler's startup speed and availability.

    Job Files

    The scheduler stores job files in a spool directory, typically /var/spool/cups. Two types of files will be found in the spool directory: control files starting with the letter "c" ("c00001", "c99999", "c100000", etc.) and data files starting with the letter "d" ("d00001-001", "d99999-001", "d100000-001", etc.) Control files are IPP messages based on the original IPP Print-Job or Create-Job messages, while data files are the original print files that were submitted for printing. There is one control file for every job known to the system and 0 or more data files for each job.

    Control files are normally cleaned out after the 500th job is submitted, while data files are removed immediately after a job has successfully printed. Both behaviors can be configured.

    Log Files

    The scheduler keeps three kinds of log files which are normally stored in the /var/log/cups directory. The access_log file lists every HTTP and IPP request that is processed by the scheduler. The error_log file contains messages from the scheduler and its helper applications that can be used to track down problems. The page_log file lists every page that is printed, allowing for simple print accounting.

    Log files are rotated automatically by the scheduler when they reach the configured size limit, by default 1MB. If the limit is set to 0 then no rotation is performed in the scheduler - this mode is often used by Linux distributions so they can use the logrotated(8) program to rotate them instead.

    Berkeley Commands

    CUPS provides the Berkeley lpc(8), lpq(1), lpr(1), and lprm(1) commands. In general, they function identically to the original Berkeley commands with the following exceptions:

    1. The lpc command currently only supports the "status" sub-command.
    2. The lpr command does not support the format modifier options "1" (TROFF font set 1), "2" (TROFF font set 2), "3" (TROFF font set 3), "4" (TROFF font set 4), "c" (CIFPLOT), "d" (DVI), "f" (FORTRAN), "g" (GNU plot), "i" (indentation), "n" (Ditroff), "r" (Sun raster), "t" (Troff), or "w" (width), as they do not map to the IPP MIME media type based document formats.

    System V Commands

    CUPS provides the System V cancel(1), lp(1), lpadmin(8), lpmove(8), and lpstat(1) commands. In general, they function identically to the original System V commands with the following exceptions:

    1. All commands may ask for a password; the System V print spooler requires root access to perform administration tasks, while CUPS allows for more flexible configurations.
    2. The lpadmin command does not implement the Solaris "-A" (alert), "-F" (fault recovery), "-M" (mount form/wheel), "-P" (paper list), "-S" (print wheels), "-T" (type list), "-U" (dialer info), "-W" (wait), "-f" (form name), "-l" (content-type list), "-s" (remote printer), or "-t" (number of trays) options.

    CUPS Commands

    CUPS provides the cupsaccept(8), cupsaddsmb(8), cupsdisable(8), cupsenable(8), cupsreject(8), cupstestppd(1), lpinfo(8), and lppasswd(1) commands. The cupsaccept, cupsdisable, cupsenable, and cupsreject commands correspond to the System V accept, disable, enable, and reject commands but have been renamed to avoid confusion and conflicts with the bash(1) internal enable command of the same name.

    LPD Support

    LPD client support is provided via the cups-lpd(8) program. Incoming LPD requests are accepted on TCP port 515 by the local inetd(8), launchd(8), or xinetd(8) process and forwarded to the cups-lpd program for conversion to the corresponding IPP request(s).

    The cups-lpd program conforms, for the most part, to RFC 1179: Line Printer Daemon Protocol, but does not enforce the privileged source port restriction specified in that document. In addition, the banner page and output format options are usually overridden via command-line options to the cups-lpd program when it is invoked by the corresponding super-daemon program.

    Web Interface

    The web interface is supported by five CGI programs. Table 1 describes the purpose of each of the programs.

    Table 1: CGI Programs
    Program Location Description
    admin.cgi /admin Provides all of the administrative functions
    classes.cgi /classes Lists classes and provides class management functions
    help.cgi /help Provides access to online help documents
    jobs.cgi /jobs Lists jobs and provides job management functions
    printers.cgi /printers Lists printers and provides printer management functions

    Notifiers

    Notifiers (notifier(7)) provide the means for sending asynchronous event notifications from the scheduler. Notifiers are executed with the recipient information on the command-line and the event data on the standard input. For example:

    CUPS_SERVERBIN/notifier/foo recipient user-data
    

    CUPS includes two notifiers: mailto to provide SMTP-based email notifications and rss to provide Really Simple Syndication ("RSS") notifications from the scheduler. Additional notifiers can be installed in the notifier directory as needed to support other methods.

    Filters

    Filters (filter(7)) convert job files into a printable format. Multiple filters are run, as needed, to convert from the job file format to the printable format. A filter program reads from the standard input or from a file if a filename is supplied. All filters must support a common set of options including printer name, job ID, username, job title, number of copies, and job options. All output is sent to the standard output.

    CUPS provides filters for printing text, PostScript, PDF, HP-GL/2, and many types of image files. CUPS also provides printer driver filters for HP-PCL, ESC/P, and several types of label printers. Additional filters can be registered with CUPS via mime.convs and PPD files.

    Port Monitors

    Port monitors handle the device- and channel-specific data formatting for a printer. Port monitors use the same interface as filters.

    CUPS includes two port monitors: the bcp port monitor which supports the PostScript Binary Communications Protocol ("BCP") and the tbcp port monitor which supports the PostScript Tagged Binary Communications Protocol ("TBCP"). Additional port monitors can be registered in PPD files.

    Backends

    Backends (backend(7)) send print data to the printer and enumerate available printers/devices as needed. Backends use the same interface as filters.

    CUPS includes backends for AppSocket (JetDirect), IPP, LPD, and USB connections and DNS-SD and SNMP for discovery. Additional backends can be added as needed without additional configuration.

    Programming Interfaces

    CUPS makes use of several general-purpose libraries to provide its printing services. Unlike the rest of CUPS, the libraries are provided under the terms of the GNU LGPL so they may be used by non-GPL applications.

    CUPS Library (libcups)

    The CUPS library contains all of the core HTTP and IPP communications code as well as convenience functions for queuing print jobs, getting printer information, accessing resources via HTTP and IPP, and manipulating PPD files. The scheduler and all commands, filters, and backends use this library.

    CUPS CGI Library (libcupscgi)

    The CUPS CGI library provides all of the web interface support functions. It is used by the CGI programs to provide the CUPS web interface.

    CUPS Driver Library (libcupsdriver)

    The CUPS driver library provides access to the dithering, color conversion, and helper functions used by the CUPS sample printer drivers.

    CUPS Imaging Library (libcupsimage)

    The CUPS imaging library provides functions for managing large images, doing colorspace conversion and color management, scaling images for printing, and managing raster page streams. It is used by the CUPS image file filters, the PostScript RIP, and all raster printers drivers.

    CUPS MIME Library (libcupsmime)

    The CUPS MIME library provides file typing and conversion functions and is used by the scheduler and cupsfilter(8) command to auto-type and convert print files to a printable format.

    CUPS PPD Compiler Library (libcupsppdc)

    The CUPS PPD compiler library provides access to driver information files and is used by the PPD compiler tools as well as the cups-driverd(8) helper program to generate PPD files and message catalogs for localization.

    cups-2.2.7/doc/help/spec-ipp.html000664 000765 000024 00000202301 13255074424 017254 0ustar00msweetstaff000000 000000 CUPS Implementation of IPP

    CUPS Implementation of IPP

    Introduction

    CUPS implements IPP/2.1 and the operations and attributes defined in the following specifications:

    CUPS also provides 17 new operations and many new attributes to support multiple IPP printers and printer classes on a single host.

    IPP URIs

    CUPS supports the "http", "https", "ipp", and "ipps" schemes. The following resource names are used:

    scheme://hostname:port/
    Can be used for all "get" operations and for server subscriptions.
    scheme://hostname:port/admin/
    Used for all administrative operations.
    scheme://hostname:port/classes/name
    Specifies a printer class.
    scheme://hostname:port/jobs/id
    Specifies a job.
    scheme://hostname:port/printers/name
    Specifies a printer.

    So a typical printer URI would be "ipp://foo.example.com/printers/LaserJet". In addition, the CUPS scheduler also supports (when enabled) normal browser access via "http://foo.example.com:port/" and "https://foo.example.com:port/".

    CUPS IPP Operations

    CUPS provides 17 vendor extension operations in addition to most of the standard IPP and registered extension operations:

    Operation Name CUPS Code Brief Description
    Print-Job 1.0 0x0002 Print a file.
    Validate-Job 1.0 0x0004 Validate job attributes.
    Create-Job 1.1 0x0005 Create a print job.
    Send-Document 1.1 0x0006 Send a file for a print job.
    Cancel-Job 1.0 0x0008 Cancel a print job.
    Get-Job-Attributes 1.0 0x0009 Get job attributes.
    Get-Jobs 1.0 0x000A Get all jobs.
    Get-Printer-Attributes 1.0 0x000B Get printer attributes.
    Hold-Job 1.1 0x000C Hold a job for printing.
    Release-Job 1.1 0x000D Release a job for printing.
    Restart-Job 1.1 0x000E Restarts a print job.
    Pause-Printer 1.0 0x0010 Pause printing on a printer.
    Resume-Printer 1.0 0x0011 Resume printing on a printer.
    Purge-Jobs 1.0 0x0012 Purge all jobs.
    Set-Printer-Attributes 1.4 0x0013 Set attributes for a printer.
    Set-Job-Attributes 1.1 0x0014 Set attributes for a pending or held job.
    Create-Printer-Subscription 1.2 0x0016 Creates a subscription associated with a printer or the server.
    Create-Job-Subscription 1.2 0x0017 Creates a subscription associated with a job.
    Get-Subscription-Attributes 1.2 0x0018 Gets the attributes for a subscription.
    Get-Subscriptions 1.2 0x0019 Gets the attributes for zero or more subscriptions.
    Renew-Subscription 1.2 0x001A Renews a subscription.
    Cancel-Subscription 1.2 0x001B Cancels a subscription.
    Get-Notifications 1.2 0x001C Get notification events for ippget subscriptions.
    Enable-Printer 1.2 0x0022 Accepts jobs on a printer.
    Disable-Printer 1.2 0x0023 Rejects jobs on a printer.
    Hold-New-Jobs 1.4 0x0025 Hold new jobs by default.
    Release-Held-New-Jobs 1.4 0x0026 Releases all jobs that were previously held.
    Cancel-Jobs 1.5 0x0038 Cancel all jobs (administrator).
    Cancel-My-Jobs 1.5 0x0039 Cancel all jobs (user).
    Close-Job 1.5 0x003b Close a created job.
    CUPS-Get-Default 1.0 0x4001 Get the default destination.
    CUPS-Get-Printers 1.0 0x4002 Get all of the available printers.
    CUPS-Add-Modify-Printer 1.0 0x4003 Add or modify a printer.
    CUPS-Delete-Printer 1.0 0x4004 Delete a printer.
    CUPS-Get-Classes 1.0 0x4005 Get all of the available printer classes.
    CUPS-Add-Modify-Class 1.0 0x4006 Add or modify a printer class.
    CUPS-Delete-Class 1.0 0x4007 Delete a printer class.
    CUPS-Accept-Jobs 1.0 0x4008 Accept jobs on a printer or printer class. This operation is deprecated - use the Enable-Printer operation instead.
    CUPS-Reject-Jobs 1.0 0x4009 Reject jobs on a printer or printer class. This operation is deprecated - use the Disable-Printer operation instead.
    CUPS-Set-Default 1.0 0x400A Set the default destination.
    CUPS-Get-Devices 1.1 0x400B Get all of the available devices.
    CUPS-Get-PPDs 1.1 0x400C Get all of the available PPDs.
    CUPS-Move-Job 1.1 0x400D Move a job to a different printer.
    CUPS-Authenticate-Job 1.2 0x400E Authenticate a job for printing.
    CUPS-Get-PPD 1.3 0x400F Get a PPD file.
    CUPS-Get-Document 1.4 0x4027 Get a document file from a job.
    CUPS-Create-Local-Printer 2.2 0x4028 Creates a local (temporary) print queue pointing to a remote IPP Everywhere printer.

    Operations

    The following sections describe the operations supported by CUPS. In the interest of brevity, operations which use only the standard IPP attributes are not described.

    Cancel Job Operation (Extension)

    The Cancel-Job operation (0x0008) cancels the specified job. CUPS 1.4 added support for the purge-job (boolean) operation attribute that (if 'true') removes all history and document files for the job as well.

    Purge-Jobs Operation

    The Purge-Jobs operation (0x0012) cancels all of the jobs on a given destination and optionally removes all history and document files for the jobs as well. CUPS 1.2 added support for the purge-job (boolean) operation attribute that (if 'false') retains all history and document files for the canceled jobs.

    Note:

    The Cancel-Jobs and Cancel-My-Jobs operations should be used instead of Purge-Jobs.

    CUPS 1.2/macOS 10.5Create-Printer-Subscription

    The Create-Printer-Subscription operation (0x0016) creates a subscription for printer or server event notifications. CUPS provides several additional events in addition to the standard events in the IPP notifications specification. CUPS adds the following notify-events (1setOf type2 keyword) values:

    • printer-added - Get notified whenever a printer or class is added
    • printer-deleted - Get notified whenever a printer or class is deleted
    • printer-modified - Get notified whenever a printer or class is modified
    • server-audit - Get notified when a security condition occurs
    • server-restarted - Get notified when the server is restarted
    • server-started - Get notified when the server is started
    • server-stopped - Get notified when the server is stopped

    CUPS-Get-Default Operation

    The CUPS-Get-Default operation (0x4001) returns the default printer URI and attributes.

    CUPS-Get-Default Request

    The following groups of attributes are supplied as part of the CUPS-Get-Default request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "requested-attributes" (1setOf keyword):
    The client OPTIONALLY supplies a set of attribute names and/or attribute group names in whose values the requester is interested. If the client omits this attribute, the server responds as if this attribute had been supplied with a value of 'all'.

    CUPS-Get-Default Response

    The following groups of attributes are send as part of the CUPS-Get-Default Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.

    Group 2: Printer Object Attributes

    The set of requested attributes and their current values.

    CUPS-Get-Printers Operation

    The CUPS-Get-Printers operation (0x4002) returns the printer attributes for every printer known to the system. This may include printers that are not served directly by the server.

    CUPS-Get-Printers Request

    The following groups of attributes are supplied as part of the CUPS-Get-Printers request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "first-printer-name" (name(127)): CUPS 1.2/macOS 10.5
    The client OPTIONALLY supplies this attribute to select the first printer that is returned.
    "limit" (integer (1:MAX)):
    The client OPTIONALLY supplies this attribute limiting the number of printers that are returned.
    "printer-id" (integer(0:65535)): CUPS 2.2
    The client OPTIONALLY supplies this attribute to select which printer is returned.
    "printer-location" (text(127)): CUPS 1.1.7
    The client OPTIONALLY supplies this attribute to select which printers are returned.
    "printer-type" (type2 enum): CUPS 1.1.7
    The client OPTIONALLY supplies a printer type enumeration to select which printers are returned.
    "printer-type-mask" (type2 enum): CUPS 1.1.7
    The client OPTIONALLY supplies a printer type mask enumeration to select which bits are used in the "printer-type" attribute.
    "requested-attributes" (1setOf keyword):
    The client OPTIONALLY supplies a set of attribute names and/or attribute group names in whose values the requester is interested. If the client omits this attribute, the server responds as if this attribute had been supplied with a value of 'all'.
    "requested-user-name" (name(127)): CUPS 1.2/macOS 10.5
    The client OPTIONALLY supplies a user name that is used to filter the returned printers.

    CUPS-Get-Printers Response

    The following groups of attributes are send as part of the CUPS-Get-Printers Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.

    Group 2: Printer Object Attributes

    The set of requested attributes and their current values for each printer.

    CUPS-Add-Modify-Printer Operation

    The CUPS-Add-Modify-Printer operation (0x4003) adds a new printer or modifies an existing printer on the system.

    CUPS-Add-Modify-Printer Request

    The following groups of attributes are supplied as part of the CUPS-Add-Modify-Printer request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "printer-uri" (uri):
    The client MUST supply a URI for the specified printer.

    Group 2: Printer Object Attributes

    "auth-info-required" (1setOf type2 keyword): CUPS 1.3/macOS 10.5
    The client OPTIONALLY supplies one or more authentication keywords that are required to communicate with the printer/remote queue.
    "job-sheets-default" (1setOf name(127)): CUPS 1.1.7
    The client OPTIONALLY supplies one or two banner page names that are printed before and after files in a job. The reserved name "none" is used to specify that no banner page should be printed.
    "device-uri" (uri):
    The client OPTIONALLY supplies a device URI for the specified printer.
    "port-monitor" (name(127)):
    The client OPTIONALLY supplies a port monitor name for the specified printer.
    "ppd-name" (name(255)):
    The client OPTIONALLY supplies a PPD name for the specified printer.
    "printer-is-accepting-jobs" (boolean):
    The client OPTIONALLY supplies this boolean attribute indicating whether the printer object should accept new jobs.
    "printer-info" (text(127)):
    The client OPTIONALLY supplies this attribute indicating the printer information string.
    "printer-location" (text(127)):
    The client OPTIONALLY supplies this attribute indicating a textual location of the printer.
    "printer-more-info" (uri):
    The client OPTIONALLY supplies this attribute indicating a URI for additional printer information.
    "printer-state" (type2 enum):
    The client OPTIONALLY supplies this attribute indicating the initial/current state of the printer. Only the 'idle(3)' and 'stopped(5)' enumerations are recognized.
    "printer-state-message" (text(MAX)):
    The client OPTIONALLY supplies this attribute indicating a textual reason for the current printer state.
    "requesting-user-name-allowed" (1setof name(127) | delete)
    OR
    "requesting-user-name-denied" (1setof name(127) | delete):
    The client OPTIONALLY supplies one of these attributes to 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.

    The CUPS-Add-Modify-Printer request can optionally be followed by a PPD file to be used for the printer. The "ppd-name" attribute overrides any file that is attached to the end of the request with a local CUPS PPD file.

    CUPS-Add-Modify-Printer Response

    The following groups of attributes are send as part of the CUPS-Add-Modify-Printer Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.

    CUPS-Delete-Printer Operation

    The CUPS-Delete-Printer operation (0x4004) removes an existing printer from the system.

    CUPS-Delete-Printer Request

    The following groups of attributes are supplied as part of the CUPS-Delete-Printer request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "printer-uri" (uri):
    The client MUST supply a URI for the specified printer.

    CUPS-Delete-Printer Response

    The following groups of attributes are send as part of the CUPS-Delete-Printer Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.

    CUPS-Get-Classes Operation

    The CUPS-Get-Classes operation (0x4005) returns the printer attributes for every printer class known to the system. This may include printer classes that are not served directly by the server.

    CUPS-Get-Classes Request

    The following groups of attributes are supplied as part of the CUPS-Get-Classes request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "first-printer-name" (name(127)): CUPS 1.2/macOS 10.5
    The client OPTIONALLY supplies this attribute to select the first printer that is returned.
    "limit" (integer (1:MAX)):
    The client OPTIONALLY supplies this attribute limiting the number of printer classes that are returned.
    "printer-location" (text(127)): CUPS 1.1.7
    The client OPTIONALLY supplies this attribute to select which printer classes are returned.
    "printer-type" (type2 enum): CUPS 1.1.7
    The client OPTIONALLY supplies a printer type enumeration to select which printer classes are returned.
    "printer-type-mask" (type2 enum): CUPS 1.1.7
    The client OPTIONALLY supplies a printer type mask enumeration to select which bits are used in the "printer-type" attribute.
    "requested-attributes" (1setOf keyword):
    The client OPTIONALLY supplies a set of attribute names and/or attribute group names in whose values the requester is interested. If the client omits this attribute, the server responds as if this attribute had been supplied with a value of 'all'.
    "requested-user-name" (name(127)): CUPS 1.2/macOS 10.5
    The client OPTIONALLY supplies a user name that is used to filter the returned printers.

    CUPS-Get-Classes Response

    The following groups of attributes are send as part of the CUPS-Get-Classes Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.

    Group 2: Printer Class Object Attributes

    The set of requested attributes and their current values for each printer class.

    CUPS-Add-Modify-Class Operation

    The CUPS-Add-Modify-Class operation (0x4006) adds a new printer class or modifies and existing printer class on the system.

    CUPS-Add-Modify-Class Request

    The following groups of attributes are supplied as part of the CUPS-Add-Modify-Class request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "printer-uri" (uri):
    The client MUST supply a URI for the specified printer class.

    Group 2: Printer Object Attributes

    "auth-info-required" (1setOf type2 keyword): CUPS 1.3/macOS 10.5
    The client OPTIONALLY supplies one or more authentication keywords that are required to communicate with the printer/remote queue.
    "member-uris" (1setof uri):
    The client OPTIONALLY supplies the "member-uris" set specifying the printers and printer classes that are part of the class.
    "printer-is-accepting-jobs" (boolean):
    The client OPTIONALLY supplies this boolean attribute indicating whether the class object should accept new jobs.
    "printer-info" (text(127)):
    The client OPTIONALLY supplies this attribute indicating the printer information string.
    "printer-location" (text(127)):
    The client OPTIONALLY supplies this attribute indicating a textual location of the class.
    "printer-more-info" (uri):
    The client OPTIONALLY supplies this attribute indicating a URI for additional class information.
    "printer-state" (type2 enum):
    The client OPTIONALLY supplies this attribute indicating the initial/current state of the class. Only the 'idle(3)' and 'stopped(5)' enumerations are recognized.
    "printer-state-message" (text(MAX)):
    The client OPTIONALLY supplies this attribute indicating a textual reason for the current class state.
    "requesting-user-name-allowed" (1setof name(127))
    OR
    "requesting-user-name-denied" (1setof name(127)):
    The client OPTIONALLY supplies one of these attributes to 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.

    CUPS-Add-Modify-Class Response

    The following groups of attributes are send as part of the CUPS-Add-Modify-Class Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.

    CUPS-Delete-Class Operation

    The CUPS-Delete-Class operation (0x4007) removes an existing printer class from the system.

    CUPS-Delete-Class Request

    The following groups of attributes are supplied as part of the CUPS-Delete-Class request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "printer-uri" (uri):
    The client MUST supply a URI for the specified printer class.

    CUPS-Delete-Class Response

    The following groups of attributes are send as part of the CUPS-Delete-Class Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.

    CUPS-Set-Default Operation

    The CUPS-Set-Default operation (0x400A) sets the default printer destination for all clients when a resource name of "/printers" is specified.

    CUPS-Set-Default Request

    The following groups of attributes are supplied as part of the CUPS-Set-Default request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "printer-uri" (uri):
    The client MUST supply a URI for the specified printer or printer class.

    CUPS-Set-Default Response

    The following groups of attributes are send as part of the CUPS-Set-Default Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.

    DeprecatedCUPS-Get-Devices Operation

    The CUPS-Get-Devices operation (0x400B) returns all of the supported device-uri's for the server.

    CUPS-Get-Devices Request

    The following groups of attributes are supplied as part of the CUPS-Get-Devices request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "device-class" (type1 keyword):
    The client OPTIONALLY supplies a device class keyword to select which devices are returned.
    "exclude-schemes" (1setOf name): CUPS 1.4/macOS 10.6
    The client OPTIONALLY supplies a set of scheme names that the requestor does not want to discover. If the client omits this attribute, the server responds with devices of all schemes specified by the "include-schemes" attribute.
    "include-schemes" (1setOf name): CUPS 1.4/macOS 10.6
    The client OPTIONALLY supplies a set of scheme names that the requestor wants to discover. If the client omits this attribute, the server responds with devices of all schemes except those specified by the "exclude-schemes" attribute.
    "limit" (integer (1:MAX)):
    The client OPTIONALLY supplies this attribute limiting the number of devices that are returned.
    "requested-attributes" (1setOf keyword):
    The client OPTIONALLY supplies a set of attribute names and/or attribute group names in whose values the requester is interested. If the client omits this attribute, the server responds as if this attribute had been supplied with a value of 'all'.
    "timeout" (integer (1:MAX)): CUPS 1.4/macOS 10.6
    The client OPTIONALLY supplies this attribute to limit the duration of the lookup. The default timeout is 15 seconds.

    CUPS-Get-Devices Response

    The following groups of attributes are send as part of the CUPS-Get-Devices Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.

    Groups 2-N: Device Object Attributes (using printer-attributes-tag group)

    The set of requested attributes and their current values for each device.

    DeprecatedCUPS-Get-PPDs Operation

    The CUPS-Get-PPDs operation (0x400C) returns all of the locally available PPD files on the system.

    CUPS-Get-PPDs Request

    The following groups of attributes are supplied as part of the CUPS-Get-PPDs request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "exclude-schemes" (1setOf name): CUPS 1.4/macOS 10.6
    The client OPTIONALLY supplies a set of scheme names that the requestor does not want to list. If the client omits this attribute, the server responds with PPDs of all schemes specified by the "include-schemes" attribute.
    "include-schemes" (1setOf name): CUPS 1.4/macOS 10.6
    The client OPTIONALLY supplies a set of scheme names that the requestor wants to list. If the client omits this attribute, the server responds with PPDs of all schemes except those specified by the "exclude-schemes" attribute.
    "limit" (integer (1:MAX)):
    The client OPTIONALLY supplies this attribute limiting the number of PPDs that are returned.
    "ppd-make" (text(127)):
    The client OPTIONALLY supplies a printer manufacturer to select which PPDs are returned.
    "ppd-make-and-model" (text(127)): CUPS 1.3/macOS 10.5
    The client OPTIONALLY supplies a make and model to select which PPDs are returned.
    "ppd-model-number" (integer): CUPS 1.3/macOS 10.5
    The client OPTIONALLY supplies a model number to select which PPDs are returned.
    "ppd-natural-language" (naturalLanguage): CUPS 1.3/macOS 10.5
    The client OPTIONALLY supplies a language to select which PPDs are returned.
    "ppd-product" (text(127)): CUPS 1.3/macOS 10.5
    The client OPTIONALLY supplies a PostScript product string to select which PPDs are returned.
    "ppd-psversion" (text(127)): CUPS 1.3/macOS 10.5
    The client OPTIONALLY supplies a PostScript version string to select which PPDs are returned.
    "ppd-type" (type1 keyword): CUPS 1.3/macOS 10.5
    The client OPTIONALLY supplies a driver type to select which PPDs are returned.
    "requested-attributes" (1setOf keyword):
    The client OPTIONALLY supplies a set of attribute names and/or attribute group names in whose values the requester is interested. If the client omits this attribute, the server responds as if this attribute had been supplied with a value of 'all'. Specify "ppd-make" to get a list of manufacturers.

    CUPS-Get-PPDs Response

    The following groups of attributes are send as part of the CUPS-Get-PPDs Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.

    Groups 2-N: PPD Attributes (using printer-attributes-tag group)

    The set of requested attributes and their current values for each PPD file.

    CUPS 1.1CUPS-Move-Job Operation

    The CUPS-Move-Job operation (0x400D) moves an active print job or all print jobs for a printer to a different printer.

    CUPS-Move-Job Request

    The following groups of attributes are supplied as part of the CUPS-Move-Job request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "printer-uri" (uri)
    OR
    "printer-uri" (uri) and "job-id" (integer)
    OR
    "job-uri" (uri):
    The client MUST supply a URI for the specified printer, the URI for the specified printer and a job ID number, or the job URI.

    Group 2: Job Template Attributes

    "job-printer-uri" (uri):
    The client MUST supply a URI for a printer on the same server.

    CUPS-Move-Job Response

    The following groups of attributes are send as part of the CUPS-Move-Job Response:

    Group 1: Operation Attributes

    Status Message:
    The standard response status message.
    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.

    CUPS 1.2/macOS 10.5CUPS-Authenticate-Job Operation

    The CUPS-Authenticate-Job operation (0x400E) authenticates a print job for printing, releasing the job if it is held. Typically this is used when printing to a remote server. The authentication information is passed in the HTTP request; the HTTP connection is normally encrypted for this type of request.

    CUPS-Authenticate-Job Request

    The following groups of attributes are supplied as part of the CUPS-Authenticate-Job request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "printer-uri" (uri) and "job-id" (integer)
    OR
    "job-uri" (uri):
    The client MUST supply a URI for the specified printer and a job ID number, or the job URI.

    Group 2: Job Attributes

    "auth-info" (1setOf text(MAX)): CUPS 1.3/macOS 10.5
    The client OPTIONALLY supplies one or more authentication values as specified by the "auth-info-required" attribute.
    "job-hold-until" (keyword | name(MAX)): CUPS 1.3/macOS 10.5
    The client OPTIONALLY supplies a new job-hold-until value for the job. If specified and not the "no-hold" value, the job is held instead of released for printing.

    CUPS-Authenticate-Job Response

    The following groups of attributes are send as part of the CUPS-Authenticate-Job Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.

    Group 2: Unsupported Attributes (status=client-eror-attributes-or-values-not-supported)

    auth-info-required (1setOf Type2 keyword)
    The required authentication information.

    DeprecatedCUPS-Get-PPD Operation

    The CUPS-Get-PPD operation (0x400F) gets a PPD file from the server. The PPD file can be specified using a ppd-name returned by CUPS-Get-PPDs or using the printer-uri for a queue.

    If the PPD file is found, successful-ok is returned with the PPD file following the response data.

    If the PPD file cannot be served by the local server because the printer-uri attribute points to an external printer, a cups-see-other status is returned with the correct URI to use.

    If the PPD file does not exist, client-error-not-found is returned.

    CUPS-Get-PPD Request

    The following group of attributes is supplied as part of the CUPS-Get-PPD request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "printer-uri" (uri)
    OR
    "ppd-name" (name(255)):
    The client MUST supply a printer URI or PPD name.

    CUPS-Get-PPD Response

    The following group of attributes is sent as part of the CUPS-Get-PPD Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.
    "printer-uri" (uri):
    The printer that provides the actual PPD file when the status code is cups-see-other (0x280).

    If the status code is successful-ok, the PPD file follows the end of the IPP response.

    CUPS 1.4/macOS 10.6CUPS-Get-Document Operation

    The CUPS-Get-Document operation (0x4027) gets a document file from a job on the server. The document file is specified using the document-number and either the job-uri or printer-uri and job-id identifying the job.

    If the document file is found, successful-ok is returned with the document file following the response data.

    If the document file does not exist, client-error-not-found is returned.

    If the requesting user does not have access to the document file, client-error-not-authorized is returned.

    CUPS-Get-Document Request

    The following group of attributes is supplied as part of the CUPS-Get-Document request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.
    "printer-uri" (uri) and "job-id" (integer)
    OR
    "job-uri" (uri):
    The client MUST supply a printer URI and job ID or job URI.
    "document-number" (integer(1:MAX)):
    The client MUST supply a document number to retrieve. The document-count attribute for the job defines the maximum document number that can be specified. In the case of jobs with banners (job-sheets is not "none"), document number 1 will typically contain the start banner and document number N will typically contain the end banner.

    CUPS-Get-Document Response

    The following group of attributes is sent as part of the CUPS-Get-Document Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.
    "document-format" (mimeType):
    The format of the document file.
    "document-number" (integer(1:MAX)):
    The requested document number.
    "document-name" (name(MAX)):
    The name that was supplied with the document, if any.

    If the status code is successful-ok, the document file follows the end of the IPP response.

    CUPS-Create-Local-Printer

    The CUPS-Create-Local-Printer operation (0x4028) creates a local (temporary) print queue pointing to a remote IPP Everywhere Printer. The queue will remain until the scheduler idle exits, is restarted, or the system is restarted or shutdown. Temporary print queues can be made permanent by an administrator by setting the "printer-is-shared" attribute to 'true'.

    At a minimum, the scheduler requires a name and URI for the Printer to add. When successful, the local "printer-uri" values are returned and may be used by the Client to submit Job Creation Requests, monitor for state changes, and so forth.

    If the named printer already exists, the scheduler will reject the request with the 'client-error-not-possible' status code.

    Access Rights: The authenticated user performing this operation MUST be a Local User of the system, and the request MUST be made over a local (domain socket or loopback interface) address. Otherwise, the request will be rejected with the 'client-error-forbidden' status code.

    CUPS-Create-Local-Printer Request

    The following group of attributes is supplied as part of the CUPS-Create-Local-Printer request:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.1 of the IPP Model and Semantics document.

    Group 2: Printer Attributes

    "printer-name" (name(127)):
    The Client MUST supply this attribute which provides the name for the new Printer.
    "device-uri" (uri):
    The Client MUST supply this attribute which provides an "ipp" or "ipps" URI pointing to an IPP Everywhere Printer.
    "printer-device-id" (text(1023)):
    The Client OPTIONALLY supplies this attribute which provides the IEEE 1284 device ID for the new Printer.
    "printer-geo-location" (uri):
    The Client OPTIONALLY supplies this attribute which provides the geo-location of the new Printer as a "geo" URI.
    "printer-info" (text(127)):
    The Client OPTIONALLY supplies this attribute which provides the description for the new Printer.
    "printer-location" (text(127)):
    The Client OPTIONALLY supplies this attribute which provides the location of the new Printer.

    CUPS-Create-Local-Printer Response

    The following group of attributes is sent as part of the CUPS-Create-Local-Printer Response:

    Group 1: Operation Attributes

    Natural Language and Character Set:
    The "attributes-charset" and "attributes-natural-language" attributes as described in section 3.1.4.2 of the IPP Model and Semantics document.
    Status Message:
    The standard response status message.

    Group 2: Printer Attributes

    "printer-id" (integer(0:65535)):
    The numeric identifier for the created Printer.
    "printer-is-accepting-jobs" (boolean):
    Whether the created Printer is accepting jobs at the time of the response.
    "printer-state" (type1 enum):
    The state of the created Printer at the time of the response.
    "printer-state-reasons" (1setOf type2 keyword):
    The state keywords for the created Printer at the time of the response.
    "printer-uri-supported" (1setOf uri):
    The URIs for the created Printer.

    Attributes

    CUPS provides many extension attributes to support multiple devices, PPD files, standard job filters, printers, and printer classes.

    Device AttributesDeprecated

    Device attributes are returned by the CUPS-Get-Devices operation and enumerate all of the available hardware devices and network protocols that are supported by the server. Device attributes are reported in the printer-attributes-tag group.

    device-class (type2 keyword)Deprecated

    The "device-class" attribute provides the class of device and can be one of the following:

    • 'file': A disk file.
    • 'direct': A parallel or fixed-rate serial data port, currently used for Centronics, IEEE-1284, and USB printer ports.
    • 'serial': A variable-rate serial port.
    • 'network': A network connection, typically via AppSocket, HTTP, IPP, LPD, or SMB/CIFS protocols.

    device-id (text(1023))Deprecated

    The "device-id" attribute provides the IEEE-1284 device ID string for the device.

    device-info (text(127))Deprecated

    The "device-info" attribute specifies a human-readable string describing the device, e.g., 'Parallel Port #1'.

    device-location (text(127))Deprecated

    The "device-location" attribute specifies the physical location of the printer, e.g., '2nd Floor Computer Lab'.

    device-make-and-model (text(127))Deprecated

    The "device-make-and-model" attribute specifies a device identification string provided by the printer connected to the device. If the device or printer does not support identification then this attribute contains the string 'unknown'.

    device-uri (uri)

    The "device-uri" attribute specifies a unique identifier for the device. The actual format of the "device-uri" string depends on the value of the "device-class" attribute:

    • 'file': The "device-uri" will be of the form 'file:///path/to/filename'.
    • 'direct': The "device-uri" will be of the form 'scheme:/dev/filename' or 'scheme://vendor/identifier', where scheme may be 'parallel' or 'usb' in the current implementation.
    • '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), "hard" or "rts/cts" (RTS/CTS handshaking), or "dtrdsr" (DTR/DSR handshaking).

      The URI returned by CUPS-Get-Devices will contain the maximum baud rate supported by the device and the best type of flow control available ("soft" or "hard").

    • 'network': The "device-uri" will be of the form 'scheme://[username:password@]hostname[:port]/[resource]', where scheme may be "http", "https", "ipp", "lpd", "smb", or "socket" in the current implementation.

      The URI returned by CUPS-Get-Devices MAY only contain the scheme name ('scheme'). It is up to the client application to add the appropriate host and other information when adding a new printer.

      The URI returned by Get-Printer-Attributes and CUPS-Get-Printers has any username and password information stripped; the information is still stored and used by the server internally to perform any needed authentication.

    Job Attributes

    auth-info (1setOf text(MAX))CUPS 1.3/macOS 10.5

    The "auth-info" attribute specifies the authentication information to use when printing to a remote device. The order and content of each text value is specifed by the auth-info-required printer attribute.

    job-cancel-after (integer(1:MAX))CUPS 2.0

    The "job-cancel-after" attribute provides the maximum number of seconds that are allowed for processing a job.

    job-hold-until (keyword | name(MAX))CUPS 1.1

    The "job-hold-until" attribute specifies a hold time. In addition to the standard IPP/1.1 keyword names, CUPS supports name values of the form "HH:MM" and "HH:MM:SS" that specify a hold time. The hold time is in Universal Coordinated Time (UTC) and not in the local time zone. If the specified time is less than the current time, the job is held until the next day.

    job-media-progress (integer(0:100))CUPS 1.4/macOS 10.6

    The "job-media-progress" status attribute specifies the percentage of completion of the current page. It is only valid when the "job-state" attribute has the 'processing(5)' value.

    job-printer-state-message (text(MAX))CUPS 1.3/macOS 10.5

    The "job-printer-state-message" status attribute provides the last known value of the "printer-state-message" attribute for the printer that processed (or is processing) the job.

    job-printer-state-reasons (1setOf type2 keyword)CUPS 1.3/macOS 10.5

    The "job-printer-state-reasons" status attribute provides the last known value of the "printer-state-reasons" attribute for the printer that processed (or is processing) the job.

    job-sheets (1setof type3 keyword | name(MAX))CUPS 1.1

    The "job-sheets" attribute specifies one or two banner files that are printed before and after a job. The reserved value of "none" disables banner printing. The default value is stored in the "job-sheets-default" attribute.

    If only one value is supplied, the banner file is printed before the job. If two values are supplied, the first value is used as the starting banner file and the second as the ending banner file.

    job-originating-host-name (name(MAX))CUPS 1.1.5/macOS 10.2

    The "job-originating-host-name" status 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 always resolved to the name "localhost".

    This attribute is read-only.

    page-border (type2 keyword)CUPS 1.1.15

    The "page-border" attribute specifies whether a border is draw around each page. The following keywords are presently defined:

    • 'double': Two hairline borders are drawn
    • 'double-thick': Two 1pt borders are drawn
    • 'none': No border is drawn (default)
    • 'single': A single hairline border is drawn
    • 'single-thick': A single 1pt border is drawn

    page-set (type2 keyword)Deprecated

    The "page-set" attribute specifies which pages to print in a file. The supported keywords are 'all', 'even', and 'odd'. The default value is 'all'.

    PPD AttributesDeprecated

    PPD attributes are returned in the printer-attributes-tag group.

    ppd-device-id (text(127))Deprecated

    The "ppd-device-id" attribute specifies the IEEE-1284 device ID string for the device described by the PPD file.

    ppd-make (text(127))Deprecated

    The "ppd-make" attribute specifies the manufacturer of the printer (the Manufacturer attribute in the PPD file). If the manufacturer is not specified in the PPD file then an educated guess is made using the NickName attribute in the PPD file.

    ppd-make-and-model (text(127))Deprecated

    The "ppd-make-and-model" attribute specifies the manufacturer and model name of the PPD file (the NickName attribute in the PPD file). If the make and model is not specified in the PPD file then the ModelName or ShortNickName attributes are used instead.

    ppd-model-number (integer)Deprecated

    The "ppd-model-number" attribute provides the cupsModelNumber value from the PPD file.

    ppd-name (name(255))Deprecated

    The "ppd-name" attribute specifies either the PPD filename on the server relative to the model directory or a URI that maps to a specific driver interface in the driver directory. The forward slash (/) is used to delineate directories.

    ppd-natural-language (1setOf naturalLanguage)Deprecated

    The "ppd-natural-language" attribute specifies the language encoding of the PPD file (the LanguageVersion attribute in the PPD file). If the language is unknown or undefined then "en" (English) is assumed.

    ppd-product (1setOf text(127))Deprecated

    The "ppd-product" attribute specifies the Product attribute values in the PPD file.

    ppd-psversion (1setOf text(127))Deprecated

    The "ppd-product" attribute specifies the PSVersion attribute values in the PPD file.

    ppd-type (type1 keyword)Deprecated

    The "ppd-type" attribute specifies the type of driver described by the PPD file:

    • 'fax': A facsimile or multi-function device
    • 'pdf': A PDF printer
    • 'postscript': A PostScript printer (no filters)
    • 'raster': A CUPS raster driver
    • 'unknown': An unknown or hybrid driver

    Printer Attributes

    auth-info-required (1setOf type2 keyword)CUPS 1.3/macOS 10.5

    The "auth-info-required" attribute specifies the authentication information that is required for printing a job. The following keywords are recognized:

    • 'domain': A domain name is required.
    • 'none': No authentication is required - this keyword can only appear by itself.
    • 'password': A password is required.
    • 'username': A username is required.

    job-k-limit (integer)CUPS 1.1

    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.

    job-page-limit (integer)CUPS 1.1

    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.

    job-quota-period (integer)CUPS 1.1

    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.

    marker-change-time (integer)CUPS 1.3/macOS 10.5

    The "marker-change-time" status attribute specifies the "printer-up-time" value when the last change to the marker-colors, marker-levels, marker-message, marker-names, or marker-types attributes was made.

    marker-colors (1setof name(MAX))CUPS 1.3/macOS 10.5

    The "marker-colors" status attribute specifies the color(s) for each supply in the printer. It is only available when the driver provides supply levels. The color is either 'none' or one or more hex-encoded sRGB colors of the form '#RRGGBB'.

    marker-high-levels (1setof integer(0:100))CUPS 1.4/macOS 10.6

    The "marker-high-levels" status attribute specifies the supply levels that indicate a near-full condition. A value of 100 should be used for supplies that are consumed/emptied, e.g. ink cartridges.

    marker-levels (1setof integer(-3:100))CUPS 1.3/macOS 10.5

    The "marker-levels" status attribute specifies the current supply levels for the printer. It is only available when the driver provides supply levels. A value of -1 indicates the level is unavailable, -2 indicates unknown, and -3 indicates the level is unknown but has not yet reached capacity. Values from 0 to 100 indicate the corresponding percentage.

    marker-low-levels (1setof integer(0:100))CUPS 1.4/macOS 10.6

    The "marker-low-levels" status attribute specifies the supply levels that indicate a near-empty condition. A value of 0 should be used for supplies that are filled, e.g. waste ink tanks.

    marker-message (text(MAX))CUPS 1.4/macOS 10.6

    The "marker-message" status attribute provides a human-readable status message for the current supply levels, e.g. "12 pages of ink remaining." It is only available when the driver provides supply levels.

    marker-names (1setof name(MAX))CUPS 1.3/macOS 10.5

    The "marker-names" status attribute specifies the name(s) for each supply in the printer. It is only available when the driver provides supply levels.

    marker-types (1setof type3 keyword)CUPS 1.3/macOS 10.5

    The "marker-types" status attribute specifies the type(s) of each supply in the printer. It is only available when the driver provides supply levels. The following (RFC 3805) types are currently supported:

    • 'toner'
    • 'waste-toner'
    • 'ink'
    • 'ink-cartridge'
    • 'ink-ribbon'
    • 'waste-ink'
    • 'opc'
    • 'developer'
    • 'fuser-oil'
    • 'solid-wax'
    • 'ribbon-wax'
    • 'waste-wax'
    • 'fuser'
    • 'corona-wire'
    • 'fuser-oil-wick'
    • 'cleaner-unit'
    • 'fuser-cleaning-pad'
    • 'transfer-unit'
    • 'toner-cartridge'
    • 'fuser-oiler'
    • 'water'
    • 'waste-water'
    • 'binding-supply'
    • 'banding-supply'
    • 'stiching-wire'
    • 'shrink-wrap'
    • 'paper-wrap'
    • 'staples'
    • 'inserts'
    • 'covers'

    port-monitor" (name(127))Deprecated

    The "port-monitor" attribute specifies the port monitor to use when printing to this printer. The default port monitor is 'none'.

    port-monitor-supported" (1setOf name(127))Deprecated

    The "port-monitor-supported" attribute specifies the available port monitors.

    printer-commands (1setOf Type3 keyword)Deprecated

    The "printer-commands" attribute specifies the commands that are supported by the CUPS command file filter. The keyword 'none' indicates that no commands are supported.

    printer-dns-sd-name (name(MAX) | noValue)CUPS 1.4/macOS 10.6

    The "printer-dns-sd-name" attribute specifies the registered DNS-SD service name for the printer. If the printer is not being shared using this protocol, "printer-dns-sd-name" will have the no-value value.

    printer-id (integer(0:65535)CUPS 2.2

    The "printer-id" status attribute provides a unique integer identifying the printer. It is used when only an IP address and integer are provided for identifying a print queue.

    printer-type (type2 enum)

    The "printer-type" status attribute specifies printer type and capability bits for the printer or class. The default value is computed from internal state information and the PPD file for the printer. The following bits are defined:

    Bit Description
    0x00000001 Is a printer class.
    0x00000002 Is a remote destination.
    0x00000004 Can print in black.
    0x00000008 Can print in color.
    0x00000010 Can print on both sides of the page in hardware.
    0x00000020 Can staple output.
    0x00000040 Can do fast copies in hardware.
    0x00000080 Can do fast copy collation in hardware.
    0x00000100 Can punch output.
    0x00000200 Can cover output.
    0x00000400 Can bind output.
    0x00000800 Can sort output.
    0x00001000 Can handle media up to US-Legal/A4.
    0x00002000 Can handle media from US-Legal/A4 to ISO-C/A2.
    0x00004000 Can handle media larger than ISO-C/A2.
    0x00008000 Can handle user-defined media sizes.
    0x00010000 Is an implicit (server-generated) class.
    0x00020000 Is the a default printer on the network.
    0x00040000 Is a facsimile device.
    0x00080000 Is rejecting jobs.
    0x00100000 Delete this queue.
    0x00200000 Queue is not shared.
    0x00400000 Queue requires authentication.
    0x00800000 Queue supports CUPS command files.
    0x01000000 Queue was automatically discovered and added.
    0x02000000 Queue is a scanner with no printing capabilities.
    0x04000000 Queue is a printer with scanning capabilities.
    0x08000000 Queue is a printer with 3D capabilities.

    printer-type-mask (type2 enum)CUPS 1.1

    The "printer-type-mask" attribute is used to choose printers or classes with the CUPS-Get-Printers and CUPS-Get-Classes operations. The bits are defined identically to the printer-type attribute and default to all 1's.

    requesting-user-name-allowed (1setof name(127))CUPS 1.1

    The "requesting-user-name-allowed" attribute lists all of the users that are allowed to access a printer or class. Either this attribute or the "requesting-user-name-denied" attribute will be defined, but not both.

    requesting-user-name-denied (1setof name(127))CUPS 1.1

    The "requesting-user-name-denied" attribute lists all of the users that are not allowed to access a printer or class. Either this attribute or the "requesting-user-name-allowed" attribute will be defined, but not both.

    Printer Class Attributes

    Printer class attributes are placed in the printer-attributes-tag group.

    member-names (1setof name(127))

    The "member-names" attribute specifies the "printer-name" attributes for each the member printer and class. Each name corresponds to the same element of the "member-uris" attribute.

    member-uris (1setof uri)

    The "member-uris" attribute specifies the "printer-uri-supported" values for each member printer and class. Each URI corresponds to the same element of the "member-names" attribute. cups-2.2.7/doc/help/spec-pdf.html000664 000765 000024 00000000674 13255074424 017246 0ustar00msweetstaff000000 000000 CUPS PDF Format

    CUPS PDF Format

    CUPS PDF files (application/vnd.cups-pdf) are device-dependent PDF files that contain a job ticket information.

    cups-2.2.7/doc/help/spec-postscript.html000664 000765 000024 00000011721 13255074424 020702 0ustar00msweetstaff000000 000000 Generating PostScript for CUPS

    Generating PostScript for CUPS

    Introduction

    This document describes how to generate PostScript output for CUPS and is largely based on the Adobe TechNote #5001: PostScript Language Document Structuring Conventions Specification Version 3.0. While CUPS can generally print any PostScript file, following the rules in the Adobe TechNote and this document will ensure that your PostScript output will work reliably.

    Note: While PostScript is currently the de-facto standard print job file format/language for UNIX-based applications, it is slowly being phased out in favor of Adobe's Portable Document Format ("PDF") which offers many advantages over PostScript. macOS uses PDF as the primary print job file format and Linux is making the transition. Both PostScript and PDF are complex formats, and we highly recommend using high-level toolkits whenever possible to create your print jobs.

    Anatomy of a PostScript File

    PostScript files are ASCII text files starting with a header line (%!PS-Adobe-3.0) followed by a combination of comment lines starting with the percent sign (%) and PostScript code lines. The lines themselves should not exceed 255 characters to conform to the DSC. The following short PostScript file produces a box with a smiley face in it:

    %!PS-Adobe-3.0
    %%BoundingBox: 36 36 576 756
    %%Pages: 1
    %%LanguageLevel: 2
    %%EndComments
    %%BeginSetup
    % this is where fonts would be embedded
    %%EndSetup
    %%Page: (1) 1
    %%BeginPageSetup
    % this is where page-specific features would be specified
    %%EndPageSetup
    % Draw a black box around the page
    0 setgray
    1 setlinewidth
    36 36 540 720 rectstroke
    
    % Draw a two inch blue circle in the middle of the page
    0 0 1 setrgbcolor
    306 396 144 0 360 arc closepath fill
    
    % Draw two half inch yellow circles for eyes
    1 1 0 setrgbcolor
    252 432 36 0 360 arc closepath fill
    360 432 36 0 360 arc closepath fill
    
    % Draw the smile
    1 setlinecap
    18 setlinewidth
    306 396 99 200 340 arc stroke
    
    % Print it!
    showpage
    %%EOF
    

    Embedding Printer Options

    There are two main strategies for embedding printer options in PostScript files. The first is to list CUPS options using the %cupsJobTicket comment:

    %!PS-Adobe-3.0
    %cupsJobTicket: media=A4 sides=two-sided-long-edge
    %cupsJobTicket: PrinterOption=foo PrinterOption2=bar
    ...
    %%EndComments
    

    CUPS options apply to the entire job. To apply options to individual pages, use the %%IncludeFeature comment instead:

    %%Page: label 123
    %%BeginPageSetup
    %%IncludeFeature: *PageSize A4
    %%IncludeFeature: *PrinterOption Foo
    %%IncludeFeature: *PrinterOption2 Bar
    %%EndPageSetup
    ...
    

    Embedding Fonts and Text

    Always embed the fonts used by your print job, and for best performance embed the fonts and character encodings in the setup section of the PostScript file. Type 1 and Type 3 fonts are supported by all PostScript printers, while Type 42 (TrueType) and CID fonts are supported by most level 2 and all level 3 PostScript printers. Binary font files should always be converted to the corresponding ASCII (hex) encoding to avoid problems when printing over interfaces that do not support binary PostScript.

    Embedding Images

    The image operator should be used to embed images in PostScript files. Always use ASCII hex or Base-85 encoding for the image data to avoid problems when printing over interfaces that do not support binary PostScript. In most cases, the Base-85 encoding and compression filters can be used to embed images with very little, if any, increase in data size.

    cups-2.2.7/doc/help/spec-ppd.html000664 000765 000024 00000254024 13255074424 017260 0ustar00msweetstaff000000 000000 CUPS PPD Extensions

    CUPS PPD Extensions

    This specification describes the attributes and extensions that CUPS adds to Adobe TechNote #5003: PostScript Printer Description File Format Specification Version 4.3. PostScript Printer Description ("PPD") files describe the capabilities of each printer and are used by CUPS to support printer-specific features and intelligent filtering.

    PPD File Syntax

    The PPD format is text-based and uses lines of up to 255 characters terminated by a carriage return, linefeed, or combination of carriage return and line feed. The following ABNF definition [RFC5234] defines the general format of lines in a PPD file:

    PPD-FILE = HEADER +(DATA / COMMENT / LINE-END)
    
    HEADER   = "*PPD-Adobe:" *WSP DQUOTE VERSION DQUOTE LINE-END
    
    VERSION  = "4.0" / "4.1" / "4.2" / "4.3"
    
    COMMENT  = "*%" *TCHAR LINE-END
    
    DATA     = "*" 1*KCHAR [ WSP 1*KCHAR [ "/" 1*TCHAR ] ] ":"
               1*(*WSP VALUE) LINE-END
    
    VALUE    = 1*TCHAR / DQUOTE 1*SCHAR DQUOTE
    
    KCHAR    = ALPHA / DIGIT / "_" / "." / "-"
    
    SCHAR    = LINE-END / WSP / %x21.23-7E.A0-FF
    
    TCHAR    = %x20-7E.A0-FF
    
    LINE-END = CR / LF / CR LF
    

    Auto-Configuration

    CUPS supports several methods of auto-configuration via PPD keywords.

    macOS 10.5APAutoSetupTool

    *APAutoSetupTool: "/LibraryPrinters/vendor/filename"

    This macOS keyword defines a program that sets the default option choices. It is run when a printer is added from the Add Printer window or the Nearby Printers list in the Print dialog.

    The program is provided with two arguments: the printer's device URI and the PPD file to be used for the printer. The program must write an updated PPD file to stdout.

    Examples:

    *% Use our setup tool when adding a printer
    *APAutoSetupTool: "/Library/Printers/vendor/Tools/autosetuptool"
    

    macOS 10.2/CUPS 1.4?MainKeyword

    *?MainKeyword: "
    PostScript query code that writes a message using the = operator...
    "
    *End

    The ?MainKeyword keyword defines PostScript code that determines the currently selected/enabled option keyword (choice) for the main keyword (option). It is typically used when communicating with USB, serial, Appletalk, and AppSocket (port 9100) printers.

    The PostScript code typically sends its response back using the = operator.

    Example:

    *OpenUI OptionDuplex/Duplexer Installed: Boolean
    *DuplexOptionDuplex: False
    *OptionDuplex False/Not Installed: ""
    *OptionDuplex True/Installed: ""
    
    *% Query the printer for the presence of the duplexer option...
    *?OptionDuplex: "
      currentpagedevice /Duplex known
      {(True)} {(False)} ifelse
      = flush
    "
    *End
    *CloseUI: OptionDuplex
    

    macOS 10.4/CUPS 1.5OIDMainKeyword

    *?OIDMainKeyword: ".n.n.n..."
    *OIDMainKeyword OptionKeyword1: "value"
    ...
    *OIDMainKeyword OptionKeywordN: "value"

    The OIDMainKeyword keyword is used to define SNMP OIDs that map to installable options. The first (query) line defines the OID to lookup on the network device. The second and subsequent keywords define a mapping from OID value to option keyword. Since SNMP is an IP-based network protocol, this method is typically only used to configure AppSocket, IPP, and LPD network printers.

    Examples:

    *% Get the installed memory on the printer...
    *?OIDInstalledMemory: ".1.3.6.1.2.1.25.2.2.0"
    *OIDInstalledMemory 16MB: "16384 KBytes"
    *OIDInstalledMemory 32MB: "32768 KBytes"
    *OIDInstalledMemory 48MB: "49152 KBytes"
    *OIDInstalledMemory 72MB: "73728 KBytes"
    

    Color Profiles

    CUPS supports three types of color profiles. The first type is based on sRGB and is used by the standard CUPS raster filters and GPL Ghostscript. The second type is based on ICC profiles and is used by the Quartz-based filters on macOS. The final type is based on well-known colorspaces such as sRGB and Adobe RGB.

    Note:

    At this time, none of the CUPS raster filters support ICC profiles. This will be addressed as time and resources permit.

    DeprecatedcupsColorProfile

    *cupsColorProfile Resolution/MediaType: "density gamma m00 m01 m02 m10 m11 m12 m20 m21 m22"

    This string keyword specifies an sRGB-based color profile consisting of gamma and density controls and a 3x3 CMY color transform matrix. This keyword is not supported on macOS.

    The Resolution and MediaType values may be "-" to act as a wildcard. Otherwise they must match one of the Resolution or MediaType option keywords defined in the PPD file.

    The density and gamma values define gamma and density adjustment function such that:

    f(x) = density * x gamma
    

    The m00 through m22 values define a 3x3 transformation matrix for the CMY color values. The density function is applied after the CMY transformation:

    | m00 m01 m02 |
    | m10 m11 m12 |
    | m20 m21 m22 |
    

    Examples:

    *% Specify a profile for printing at 360dpi on all media types
    *cupsColorProfile 360dpi/-: "1.0 1.5 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
    
    *% Specify a profile for printing at 720dpi on Glossy media
    *cupsColorProfile 720dpi/Glossy: "1.0 2.5 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
    
    *% Specify a default profile for printing at all other resolutions and media types
    *cupsColorProfile -/-: "0.9 2.0 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
    

    macOS 10.3/CUPS 1.2cupsICCProfile

    *cupsICCProfile ColorModel.MediaType.Resolution/Description: "filename"

    This keyword specifies an ICC color profile that is used to convert the document colors to the device colorspace. The ColorModel, MediaType, and Resolution option keywords specify a selector for color profiles. If omitted, the color profile will match any option keyword for the corresponding main keyword.

    The Description specifies human-readable text that is associated with the color profile. The filename portion specifies the ICC color profile to use; if the filename is not absolute, it is loaded relative to the /usr/share/cups/profiles directory.

    Examples:

    *% Specify a profile for CMYK printing at 360dpi on all media types
    *cupsICCProfile CMYK..360dpi/360dpi CMYK: "/Library/Printers/vendor/Profiles/foo-360-cmyk.icc"
    
    *% Specify a profile for RGB printing at 720dpi on Glossy media
    *cupsColorProfile RGB.Glossy.720dpi/720dpi Glossy: "/Library/Printers/vendor/Profiles/foo-720-glossy-rgb.icc"
    
    *% Specify a default profile for printing at all other resolutions and media types
    *cupsICCProfile ../Default: "/Library/Printers/vendor/Profiles/foo-default.icc"
    

    Customizing the Profile Selection Keywords

    The ColorModel, MediaType, and Resolution main keywords can be reassigned to different main keywords, allowing drivers to do color profile selection based on different parameters. The cupsICCQualifier1, cupsICCQualifier2, and cupsICCQualifier3 keywords define the mapping from selector to main keyword:

    *cupsICCQualifier1: MainKeyword1
    *cupsICCQualifier2: MainKeyword2
    *cupsICCQualifier3: MainKeyword3
    

    The default mapping is as follows:

    *cupsICCQualifier1: ColorModel
    *cupsICCQualifier2: MediaType
    *cupsICCQualifier3: Resolution
    

    macOS 10.4Custom Color Matching Support

    *APSupportsCustomColorMatching: true
    *APCustomColorMatchingName name/text: ""
    *APCustomColorMatchingProfile: profile
    *APDefaultCustomColorMatchingProfile: profile

    These keywords tell the macOS raster filters that the printer driver provides its own custom color matching and that generic color profiles should be used when generating 1-, 3-, and 4-component raster data as requested by the driver. The APCustomColorMatchingProfile and APDefaultColorMatchingProfile keywords specify alternate color profiles (sRGB or AdobeRGB) to use for 3-color (RGB) raster data.

    Note:

    Prior to macOS 10.6, the default RGB color space was Apple's "GenericRGB". The new default in macOS 10.6 and later is "sRGB". For more information, see "macOS v10.6: About gamma 2.2" on Apple's support site.

    macOS 10.5APCustomColorMatchingName

    *APCustomColorMatchingName name/text: ""

    This keyword defines an alternate name for the color matching provided by a driver in the Color Matching print panel. The default is to use the name "Vendor Matching" or its localized equivalent.

    Examples:

    *% Define the names for our color matching...
    *APCustomColorMatchingName name/AcmeColor(tm): ""
    *fr.APCustomColorMatchingName name/La AcmeColor(tm): ""
    

    macOS 10.5APCustomColorMatchingProfile

    *APCustomColorMatchingProfile: name

    This keyword defines a supported RGB color profile that can be used when doing custom color matching. Currently only sRGB, AdobeRGB, and GenericRGB are supported. If not specified, RGB data will use the GenericRGB colorspace.

    Note:

    If you provide multiple APCustomColorMatchingProfile keywords, you are responsible for providing the necessary user interface controls to select the profile in a print dialog pane. Add the named profile to the print settings using the key kPMCustomColorMatchingProfileKey.

    Examples:

    *% Use sRGB for RGB color by default, but support both sRGB and AdobeRGB
    *APSupportsCustomColorMatching: true
    *APDefaultCustomColorMatchingProfile: sRGB
    *APCustomColorMatchingProfile: sRGB
    *APCustomColorMatchingProfile: AdobeRGB
    

    macOS 10.5APDefaultCustomColorMatchingProfile

    *APDefaultCustomColorMatchingProfile: name

    This keyword defines the default RGB color profile that will be used when doing custom color matching. Currently only sRGB, AdobeRGB, and GenericRGB are supported.

    Examples:

    *% Use sRGB for RGB color by default
    *APSupportsCustomColorMatching: true
    *APDefaultCustomColorMatchingProfile: sRGB
    

    macOS 10.4APSupportsCustomColorMatching

    *APSupportsCustomColorMatching: boolean

    This keyword specifies that the driver provides its own custom color matching. When true, the default hand-off colorspace will be GenericGray, GenericRGB, or GenericCMYK depending on the number of components the driver requests. The APDefaultCustomColorMatchingProfile keyword can be used to override the default 3-component (RGB) colorspace.

    The default for APSupportsCustomColorMatching is false.

    Examples:

    *APSupportsCustomColorMatching: true
    *APDefaultCustomColorMatchingProfile: sRGB
    

    Constraints

    Constraints are option choices that are not allowed by the driver or device, for example printing 2-sided transparencies. All versions of CUPS support constraints defined by the legacy Adobe UIConstraints and NonUIConstraints keywords which support conflicts between any two option choices, for example:

    *% Do not allow 2-sided printing on transparency media
    *UIConstraints: "*Duplex *MediaType Transparency"
    *UIConstraints: "*MediaType Transparency *Duplex"
    

    While nearly all constraints can be expressed using these keywords, there are valid scenarios requiring constraints between more than two option choices. In addition, resolution of constraints is problematic since users and software have to guess how a particular constraint is best resolved.

    CUPS 1.4 and higher define two new keywords for constraints, cupsUIConstraints and cupsUIResolver. Each cupsUIConstraints keyword points to a cupsUIResolver keyword which specifies alternate options that resolve the conflict condition. The same cupsUIResolver can be used by multiple cupsUIConstraints.

    Note:

    When developing PPD files that contain constraints, it is very important to use the cupstestppd(1) program to verify that your constraints are accurate and cannot result in unresolvable option selections.

    CUPS 1.4/macOS 10.6cupsUIConstraints

    *cupsUIConstraints resolver: "*Keyword1 *Keyword2 ..."
    *cupsUIConstraints resolver: "*Keyword1 OptionKeyword1 *Keyword2 ..."
    *cupsUIConstraints resolver: "*Keyword1 *Keyword2 OptionKeyword2 ..."
    *cupsUIConstraints resolver: "*Keyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."
    *cupsUIConstraints: "*InstallableKeyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."

    Lists two or more options which conflict. The "resolver" string is a (possibly unique) keyword which specifies which options to change when the constraint exists. When no resolver is provided, CUPS first tries the default choice followed by testing each option choice to resolve the conflict.

    Examples:

    *% Specify that 2-sided printing cannot happen on transparencies
    *cupsUIConstraints transparency: "*Duplex *MediaType Transparency"
    
    *% Specify that envelope printing cannot happen from the paper trays
    *cupsUIConstraints envelope: "*PageSize Env10 *InputSlot Tray1"
    *cupsUIConstraints envelope: "*PageSize Env10 *InputSlot Tray1"
    *cupsUIConstraints envelope: "*PageSize EnvDL *InputSlot Tray2"
    *cupsUIConstraints envelope: "*PageSize EnvDL *InputSlot Tray2"
    
    *% Specify an installable option constraint for the envelope feeder
    *cupsUIConstraints: "*InputSlot EnvFeeder *InstalledEnvFeeder"
    
    *% Specify that photo printing cannot happen on plain paper or transparencies at 1200dpi
    *cupsUIConstraints photo: "*OutputMode Photo *MediaType Plain *Resolution 1200dpi"
    *cupsUIConstraints photo: "*OutputMode Photo *MediaType Transparency *Resolution 1200dpi"
    

    CUPS 1.4/macOS 10.6cupsUIResolver

    *cupsUIResolver resolver: "*Keyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."

    Specifies two or more options to mark/select to resolve a constraint. The "resolver" string identifies a particular action to take for one or more cupsUIConstraints. The same action can be used for multiple constraints. The option keyword pairs are treated as an ordered list of option selections to try - only the first N selections will be used, where N is the minimum number of selections required. Because cupsResolveConflicts() will not change the most recent option selection passed to it, at least two options from the constraints must be listed to avoid situations where conflicts cannot be resolved.

    Examples:

    *% Specify the options to change for the 2-sided transparency constraint
    *cupsUIResolver transparency: "*Duplex None *MediaType Plain"
    
    *% Specify the options to change for the envelope printing constraints.  Notice
    *% that we try to change the InputSlot to either the envelope feeder or the
    *% manual feed first, then we change the page size...
    *cupsUIResolver envelope: "*InputSlot EnvFeeder *InputSlot ManualFeed *PageSize Letter"
    
    *% Specify the options to change for the photo printing constraints
    *cupsUIResolver photo: "*OutputMode Best *Resolution 600dpi"
    

    Globalized PPD Support

    CUPS 1.2 and higher adds support for PPD files containing multiple languages by following the following additional rules:

    1. The LanguageVersion MUST be English
    2. The LanguageEncoding MUST be ISOLatin1
    3. The cupsLanguages keyword MUST be provided and list each of the supported locales in the PPD file
    4. Main and option keywords MUST NOT exceed 34 (instead of 40) characters to allow room for the locale prefixes in translation keywords
    5. The main keyword "Translation" MUST NOT be used
    6. Translation strings included with the main and option keywords MUST NOT contain characters outside the ASCII subset of ISOLatin1 and UTF-8; developers wishing to use characters outside ASCII MUST provide a separate set of English localization keywords for the affected keywords.
    7. Localizations are specified using a locale prefix of the form "ll" or "ll_CC." where "ll" is the 2-letter ISO language code and "CC" is the 2-letter ISO country code
      • A generic language translation ("ll") SHOULD be provided with country-specific differences ("ll_CC") provided only as needed
      • For historical reasons, the "zh" and "zh_CN" locales map to Simplified Chinese while the "zh_TW" locale maps to Traditional Chinese
    8. Locale-specific translation strings MUST be encoded using UTF-8.
    9. Main keywords MUST be localized using one of the following forms:

      *ll.Translation MainKeyword/translation text: ""
      *ll_CC.Translation MainKeyword/translation text: ""

    10. Option keywords MUST be localized using one of the following forms:

      *ll.MainKeyword OptionKeyword/translation text: ""
      *ll_CC.MainKeyword OptionKeyword/translation text: ""

    11. Localization keywords MAY appear anywhere after the first line of the PPD file
    Note:

    We use a LanguageEncoding value of ISOLatin1 and limit the allowed base translation strings to ASCII to avoid character coding issues that would otherwise occur. In addition, requiring the base translation strings to be in English allows for easier fallback translation when no localization is provided in the PPD file for a given locale.

    Examples:

    *LanguageVersion: English
    *LanguageEncoding: ISOLatin1
    *cupsLanguages: "de fr_CA"
    *ModelName: "Foobar Laser 9999"
    
    *% Localize ModelName for French and German
    *fr_CA.Translation ModelName/La Foobar Laser 9999: ""
    *de.Translation ModelName/Foobar LaserDrucken 9999: ""
    
    *cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html"
    *% Localize printer-state-reason for French and German
    *fr_CA.cupsIPPReason com.vendor-error/Une erreur sèrieuse s'est produite: "/help/com.vendor/error.html"
    *de.cupsIPPReason com.vendor-error/Eine ernste Störung trat: "/help/com.vendor/error.html"
    
    ...
    
    *OpenUI *InputSlot/Paper Source: PickOne
    *OrderDependency: 10 AnySetup *InputSlot
    *DefaultInputSlot: Auto
    *% Localize InputSlot for French and German
    *fr_CA.Translation InputSlot/Papier source: ""
    *de.Translation InputSlot/Papiereinzug: ""
    *InputSlot Auto/Default: "<</ManualFeed false>>setpagedevice"
    *% Localize InputSlot=Auto for French and German
    *fr_CA.InputSlot Auto/Par Defaut: ""
    *de.InputSlot Auto/Standard: ""
    *InputSlot Manual/Manual Feed: "<</ManualFeed true>>setpagedevice"
    *% Localize InputSlot=Manual for French and German
    *fr_CA.InputSlot Manual/Manuel mecanisme de alimentation: ""
    *de.InputSlot Manual/Manueller Einzug: ""
    *CloseUI: *InputSlot
    

    CUPS 1.3/macOS 10.6Custom Options

    CUPS supports custom options using an extension of the CustomPageSize and ParamCustomPageSize syntax:

    *CustomFoo True: "command"
    *ParamCustomFoo Name1/Text 1: order type minimum maximum
    *ParamCustomFoo Name2/Text 2: order type minimum maximum
    ...
    *ParamCustomFoo NameN/Text N: order type minimum maximum
    

    When the base option is part of the JCLSetup section, the "command" string contains JCL commands with "\order" placeholders for each numbered parameter. The CUPS API handles any necessary value quoting for HP-PJL commands. For example, if the JCL command string is "@PJL SET PASSCODE=\1" and the first option value is "1234" then CUPS will output the string "@PJL SET PASSCODE=1234".

    For non-JCLSetup options, the "order" value is a number from 1 to N and specifies the order of values as they are placed on the stack before the command. For example, if the PostScript command string is "<</cupsReal1 2 1 roll>>setpagedevice" and the option value is "2.0" then CUPS will output the string "2.0 <</cupsReal1 2 1 roll>>setpagedevice".

    The "type" is one of the following keywords:

    • curve - a real value from "minimum" to "maximum" representing a gamma correction curve using the function: f(x) = x value
    • int - an integer value from "minimum" to "maximum"
    • invcurve - a real value from "minimum" to "maximum" representing a gamma correction curve using the function: f(x) = x 1 / value
    • passcode - a string of numbers value with a minimum of "minimum" numbers and a maximum of "maximum" numbers ("minimum" and "maximum" are numbers and passcode strings are not displayed in the user interface)
    • password - a string value with a minimum of "minimum" characters and a maximum of "maximum" characters ("minimum" and "maximum" are numbers and password strings are not displayed in the user interface)
    • points - a measurement value in points from "minimum" to "maximum"
    • real - a real value from "minimum" to "maximum"
    • string - a string value with a minimum of "minimum" characters and a maximum of "maximum" characters ("minimum" and "maximum" are numbers)

    Examples:

    *% Base JCL key code option
    *JCLOpenUI JCLPasscode/Key Code: PickOne
    *OrderDependency: 10 JCLSetup *JCLPasscode
    *DefaultJCLPasscode: None
    *JCLPasscode None/No Code: ""
    *JCLPasscode 1111: "@PJL SET PASSCODE = 1111<0A>"
    *JCLPasscode 2222: "@PJL SET PASSCODE = 2222<0A>"
    *JCLPasscode 3333: "@PJL SET PASSCODE = 3333<0A>"
    *JCLCloseUI: *JCLPasscode
    
    *% Custom JCL key code option
    *CustomJCLPasscode True: "@PJL SET PASSCODE = \1<0A>"
    *ParamCustomJCLPasscode Code/Key Code: 1 passcode 4 4
    
    
    *% Base PostScript watermark option
    *OpenUI WatermarkText/Watermark Text: PickOne
    *OrderDependency: 10 AnySetup *WatermarkText
    *DefaultWatermarkText: None
    *WatermarkText None: ""
    *WatermarkText Draft: "<</cupsString1(Draft)>>setpagedevice"
    *CloseUI: *WatermarkText
    
    *% Custom PostScript watermark option
    *CustomWatermarkText True: "<</cupsString1 3 -1 roll>>setpagedevice"
    *ParamCustomWatermarkText Text: 1 string 0 32
    
    
    *% Base PostScript gamma/density option
    *OpenUI GammaDensity/Gamma and Density: PickOne
    *OrderDependency: 10 AnySetup *GammaDensity
    *DefaultGammaDensity: Normal
    *GammaDensity Normal/Normal: "<</cupsReal1 1.0/cupsReal2 1.0>>setpagedevice"
    *GammaDensity Light/Lighter: "<</cupsReal1 0.9/cupsReal2 0.67>>setpagedevice"
    *GammaDensity Dark/Darker: "<</cupsReal1 1.1/cupsReal2 1.5>>setpagedevice"
    *CloseUI: *GammaDensity
    
    *% Custom PostScript gamma/density option
    *CustomGammaDensity True: "<</cupsReal1 3 -1 roll/cupsReal2 5 -1>>setpagedevice"
    *ParamCustomGammaDensity Gamma: 1 curve 0.1 10
    *ParamCustomGammaDensity Density: 2 real 0 2
    

    Writing PostScript Option Commands for Raster Drivers

    PPD files are used for both PostScript and non-PostScript printers. For CUPS raster drivers, you use a subset of the PostScript language to set page device keywords such as page size, resolution, and so forth. For example, the following code sets the page size to A4 size:

    *PageSize A4: "<</PageSize[595 842]>>setpagedevice"
    

    Custom options typically use other operators to organize the values into a key/value dictionary for setpagedevice. For example, our previous CustomWatermarkText option code uses the roll operator to move the custom string value into the dictionary for setpagedevice:

    *CustomWatermarkText True: "<</cupsString1 3 -1 roll>>setpagedevice"
    

    For a custom string value of "My Watermark", CUPS will produce the following PostScript code for the option:

    (My Watermark)
    <</cupsString1 3 -1 roll>>setpagedevice
    

    The code moves the string value ("My Watermark") from the bottom of the stack to the top, creating a dictionary that looks like:

    <</cupsString1(My Watermark)>>setpagedevice
    

    The resulting dictionary sets the page device attributes that are sent to your raster driver in the page header.

    Custom Page Size Code

    There are many possible implementations of the CustomPageSize code. For CUPS raster drivers, the following code is recommended:

    *ParamCustomPageSize Width:        1 points min-width max-width
    *ParamCustomPageSize Height:       2 points min-height max-height
    *ParamCustomPageSize WidthOffset:  3 points 0 0
    *ParamCustomPageSize HeightOffset: 4 points 0 0
    *ParamCustomPageSize Orientation:  5 int 0 0
    *CustomPageSize True: "pop pop pop <</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice"
    

    Supported PostScript Operators

    CUPS supports the following PostScript operators in addition to the usual PostScript number, string (literal and hex-encoded), boolean, null, and name values:

    • << - Start a dictionary.
    • >> - End a dictionary.
    • [ - Start an array.
    • ] - End an array.
    • copy - Copy the top N objects on the stack.
    • dup - Copy the top object on the stack.
    • index - Copy the Nth from the top object on the stack.
    • pop - Pop the top object on the stack.
    • roll - Shift the top N objects on the stack.
    • setpagedevice - Set the page header values according to the key/value dictionary on the stack.
    Note:

    Never use the unsupported dict or put operators in your option code. These operators are typically used in option code dating back to Level 1 PostScript printers, which did not support the simpler << or >> operators. If you have old option code using dict or put, you can rewrite it very easily to use the newer << and >> operators instead. For example, the following code to set the page size:

    1 dict dup /PageSize [612 792] put setpagedevice
    

    can be rewritten as:

    << /PageSize [612 792] >> setpagedevice
    

    Supported Page Device Attributes

    Table 2 shows the supported page device attributes along with PostScript code examples.

    Table 2: Supported Page Device Attributes
    Name(s) Type Description Example(s)
    AdvanceDistance Integer Specifies the number of points to advance roll media after printing. <</AdvanceDistance 18>>setpagedevice
    AdvanceMedia Integer Specifies when to advance the media: 0 = never, 1 = after the file, 2 = after the job, 3 = after the set, and 4 = after the page. <</AdvanceMedia 4>>setpagedevice
    Collate Boolean Specifies whether collated copies are required. <</Collate true>>setpagedevice
    CutMedia Integer Specifies when to cut the media: 0 = never, 1 = after the file, 2 = after the job, 3 = after the set, and 4 = after the page. <</CutMedia 1>>setpagedevice
    Duplex Boolean Specifies whether 2-sided printing is required. <</Duplex true>>setpagedevice
    HWResolution Integer Array Specifies the resolution of the page image in pixels per inch. <</HWResolution[1200 1200]>>setpagedevice
    InsertSheet Boolean Specifies whether to insert a blank sheet before the job. <</InsertSheet true>>setpagedevice
    Jog Integer Specifies when to shift the media in the output bin: 0 = never, 1 = after the file, 2 = after the job, 3 = after the set, and 4 = after the page. <</Jog 2>>setpagedevice
    LeadingEdge Integer Specifies the leading edge of the media: 0 = top, 1 = right, 2 = bottom, 3 = left. <</LeadingEdge 0>>setpagedevice
    ManualFeed Boolean Specifies whether media should be drawn from the manual feed tray. Note: The MediaPosition attribute is preferred over the ManualFeed attribute. <</ManualFeed true>>setpagedevice
    MediaClass String Specifies a named media. <</MediaClass (Invoices)>>setpagedevice
    MediaColor String Specifies the color of the media. <</MediaColor >>setpagedevice
    MediaPosition Integer Specifies the tray or source of the media. <</MediaPosition 12>>setpagedevice
    MediaType String Specifies the general media type. <</MediaType (Glossy)>>setpagedevice
    MediaWeight Integer Specifies the media weight in grams per meter2. <</MediaWeight 100>>setpagedevice
    MirrorPrint Boolean Specifies whether to flip the output image horizontally. <</MirrorPrint true>>setpagedevice
    NegativePrint Boolean Specifies whether to invert the output image. <</NegativePrint true>>setpagedevice
    NumCopies Integer Specifies the number of copies to produce of each page. <</NumCopies 100>>setpagedevice
    Orientation Integer Specifies the orientation of the output: 0 = portrait, 1 = landscape rotated counter-clockwise, 2 = upside-down, 3 = landscape rotated clockwise. <</Orientation 3>>setpagedevice
    OutputFaceUp Boolean Specifies whether to place the media face-up in the output bin/tray. <</OutputFaceUp true>>setpagedevice
    OutputType String Specifies the output type name. <</OutputType (Photo)>>setpagedevice
    PageSize Integer/Real Array Specifies the width and length/height of the page in points. <</PageSize[595 842]>>setpagedevice
    Separations Boolean Specifies whether to produce color separations. <</Separations true>>setpagedevice
    TraySwitch Boolean Specifies whether to switch trays automatically. <</TraySwitch true>>setpagedevice
    Tumble Boolean Specifies whether the back sides of pages are rotated 180 degrees. <</Tumble true>>setpagedevice
    cupsBorderlessScalingFactor Real Specifies the amount to scale the page image dimensions. <</cupsBorderlessScalingFactor 1.01>>setpagedevice
    cupsColorOrder Integer Specifies the order of colors: 0 = chunked, 1 = banded, 2 = planar. <</cupsColorOrder 0>>setpagedevice
    cupsColorSpace Integer Specifies the page image colorspace: 0 = W, 1 = RGB, 2 = RGBA, 3 = K, 4 = CMY, 5 = YMC, 6 = CMYK, 7 = YMCK, 8 = KCMY, 9 = KCMYcm, 10 = GMCK, 11 = GMCS, 12 = White, 13 = Gold, 14 = Silver, 15 = CIE XYZ, 16 = CIE Lab, 17 = RGBW, 32 to 46 = CIE Lab (1 to 15 inks) <</cupsColorSpace 1 >>setpagedevice
    cupsCompression Integer Specifies a driver compression type/mode. <</cupsCompression 2>>setpagedevice
    cupsInteger0
    ...
    cupsInteger15
    Integer Specifies driver integer values. <</cupsInteger11 1234>>setpagedevice
    cupsMarkerType String Specifies the type of ink/toner to use. <</cupsMarkerType (Black+Color)>>setpagedevice
    cupsMediaType Integer Specifies a numeric media type. <</cupsMediaType 999>>setpagedevice
    cupsPageSizeName String Specifies the name of the page size. <</cupsPageSizeName (A4.Full)>>setpagedevice
    cupsPreferredBitsPerColor Integer Specifies the preferred number of bits per color, typically 8 or 16. <</cupsPreferredBitsPerColor 16>>setpagedevice
    cupsReal0
    ...
    cupsReal15
    Real Specifies driver real number values. <</cupsReal15 1.234>>setpagedevice
    cupsRenderingIntent String Specifies the color rendering intent. <</cupsRenderingIntent (AbsoluteColorimetric)>>setpagedevice
    cupsRowCount Integer Specifies the number of rows of raster data to print on each line for some drivers. <</cupsRowCount 24>>setpagedevice
    cupsRowFeed Integer Specifies the number of rows to feed between passes for some drivers. <</cupsRowFeed 17>>setpagedevice
    cupsRowStep Integer Specifies the number of lines between columns/rows on the print head for some drivers. <</cupsRowStep 2>>setpagedevice
    cupsString0
    ...
    cupsString15
    String Specifies driver string values. <</cupsString0(String Value)>>setpagedevice

    Media Keywords

    The CUPS media keywords allow drivers to specify alternate custom page size limits based on up to two options.

    CUPS 1.4/macOS 10.6cupsMediaQualifier2

    *cupsMediaQualifier2: MainKeyword

    This keyword specifies the second option to use for overriding the custom page size limits.

    Example:

    *% Specify alternate custom page size limits based on InputSlot and Quality
    *cupsMediaQualifier2: InputSlot
    *cupsMediaQualifier3: Quality
    *cupsMaxSize .Manual.: "1000 1000"
    *cupsMinSize .Manual.: "100 100"
    *cupsMinSize .Manual.Photo: "200 200"
    *cupsMinSize ..Photo: "300 300"
    

    CUPS 1.4/macOS 10.6cupsMediaQualifier3

    *cupsMediaQualifier3: MainKeyword

    This keyword specifies the third option to use for overriding the custom page size limits.

    Example:

    *% Specify alternate custom page size limits based on InputSlot and Quality
    *cupsMediaQualifier2: InputSlot
    *cupsMediaQualifier3: Quality
    *cupsMaxSize .Manual.: "1000 1000"
    *cupsMinSize .Manual.: "100 100"
    *cupsMinSize .Manual.Photo: "200 200"
    *cupsMinSize ..Photo: "300 300"
    

    CUPS 1.4/macOS 10.6cupsMinSize

    *cupsMinSize .Qualifier2.Qualifier3: "width length"
    *cupsMinSize .Qualifier2.: "width length"
    *cupsMinSize ..Qualifier3: "width length"

    This keyword specifies alternate minimum custom page sizes in points. The cupsMediaQualifier2 and cupsMediaQualifier3 keywords are used to identify options to use for matching.

    Example:

    *% Specify alternate custom page size limits based on InputSlot and Quality
    *cupsMediaQualifier2: InputSlot
    *cupsMediaQualifier3: Quality
    *cupsMaxSize .Manual.: "1000 1000"
    *cupsMinSize .Manual.: "100 100"
    *cupsMinSize .Manual.Photo: "200 200"
    *cupsMinSize ..Photo: "300 300"
    

    CUPS 1.4/macOS 10.6cupsMaxSize

    *cupsMaxSize .Qualifier2.Qualifier3: "width length"
    *cupsMaxSize .Qualifier2.: "width length"
    *cupsMaxSize ..Qualifier3: "width length"

    This keyword specifies alternate maximum custom page sizes in points. The cupsMediaQualifier2 and cupsMediaQualifier3 keywords are used to identify options to use for matching.

    Example:

    *% Specify alternate custom page size limits based on InputSlot and Quality
    *cupsMediaQualifier2: InputSlot
    *cupsMediaQualifier3: Quality
    *cupsMaxSize .Manual.: "1000 1000"
    *cupsMinSize .Manual.: "100 100"
    *cupsMinSize .Manual.Photo: "200 200"
    *cupsMinSize ..Photo: "300 300"
    

    CUPS 1.4/macOS 10.6cupsPageSizeCategory

    *cupsPageSizeCategory name/text: "name name2 ... nameN"

    This keyword lists related paper size names that should be grouped together in the Print or Page Setup dialogs. The "name" portion of the keyword specifies the root/default size for the grouping. On macOS the grouped paper sizes are shown in a submenu of the main paper size. When omitted, sizes with the same dimensions are automatically grouped together, for example "Letter" and "Letter.Borderless".

    Example:

    *% Specify grouping of borderless/non-borderless sizes
    *cupsPageSizeCategory Letter/US Letter: "Letter Letter.Borderless"
    *cupsPageSizeCategory A4/A4: "A4 A4.Borderless"
    

    General Attributes

    CUPS 1.3/macOS 10.5cupsBackSide

    *cupsBackSide: keyword

    This keyword requests special handling of the back side of pages when doing duplexed (2-sided) output. Table 1 shows the supported keyword values for this keyword and their effect on the raster data sent to your driver. For example, when cupsBackSide is Rotated and Tumble is false, your driver will receive print data starting at the bottom right corner of the page, with each line going right-to-left instead of left-to-right. The default value is Normal.

    Note:

    cupsBackSide replaces the older cupsFlipDuplex keyword - if cupsBackSide is specified, cupsFlipDuplex will be ignored.

    Table 1: Back Side Raster Coordinate System
    cupsBackSide Tumble Value Image Presentation
    Normal false Left-to-right, top-to-bottom
    Normal true Left-to-right, top-to-bottom
    ManualTumble false Left-to-right, top-to-bottom
    ManualTumble true Right-to-left, bottom-to-top
    Rotated false Right-to-left, bottom-to-top
    Rotated true Right-to-left, top-to-bottom
    Flipped * false Left-to-right, bottom-to-top
    Flipped * true Right-to-left, top-to-bottom

    * - Not supported in macOS 10.5.x and earlier

    Figure 1: Back side images
    Back side images

    Examples:

    *% Flip the page image for the back side of duplexed output
    *cupsBackSide: Flipped
    
    *% Rotate the page image for the back side of duplexed output
    *cupsBackSide: Rotated
    

    Also see the related APDuplexRequiresFlippedMargin keyword.

    CUPS 1.4/macOS 10.6cupsCommands

    *cupsCommands: "name name2 ... nameN"

    This string keyword specifies the commands that are supported by the CUPS command file filter for this device. The command names are separated by whitespace.

    Example:

    *% Specify the list of commands we support
    *cupsCommands: "AutoConfigure Clean PrintSelfTestPage ReportLevels com.vendor.foo"
    

    CUPS 1.3/macOS 10.5cupsEvenDuplex

    *cupsEvenDuplex: boolean

    This boolean keyword notifies the RIP filters that the destination printer requires an even number of pages when 2-sided printing is selected. The default value is false.

    Example:

    *% Always send an even number of pages when duplexing
    *cupsEvenDuplex: true
    

    cupsFax

    *cupsFax: boolean

    This boolean keyword specifies whether the PPD defines a facsimile device. The default is false.

    Examples:

    *cupsFax: true
    

    cupsFilter

    *cupsFilter: "source/type cost program"

    This string keyword provides a conversion rule from the given source type to the printer's native format using the filter "program". If a printer supports the source type directly, the special filter program "-" may be specified.

    Examples:

    *% Standard raster printer driver filter
    *cupsFilter: "application/vnd.cups-raster 100 rastertofoo"
    
    *% Plain text filter
    *cupsFilter: "text/plain 10 texttofoo"
    
    *% Pass-through filter for PostScript printers
    *cupsFilter: "application/vnd.cups-postscript 0 -"
    

    CUPS 1.5cupsFilter2

    *cupsFilter2: "source/type destination/type cost program"

    This string keyword provides a conversion rule from the given source type to the printer's native format using the filter "program". If a printer supports the source type directly, the special filter program "-" may be specified. The destination type is automatically created as needed and is passed to the filters and backend as the FINAL_CONTENT_TYPE value.

    Note:

    The presence of a single cupsFilter2 keyword in the PPD file will hide any cupsFilter keywords from the CUPS scheduler. When using cupsFilter2 to provide filters specific for CUPS 1.5 and later, provide a cupsFilter2 line for every filter and a cupsFilter line for each filter that is compatible with older versions of CUPS.

    Examples:

    *% Standard raster printer driver filter
    *cupsFilter2: "application/vnd.cups-raster application/vnd.foo 100 rastertofoo"
    
    *% Plain text filter
    *cupsFilter2: "text/plain application/vnd.foo 10 texttofoo"
    
    *% Pass-through filter for PostScript printers
    *cupsFilter2: "application/vnd.cups-postscript application/postscript 0 -"
    

    DeprecatedcupsFlipDuplex

    *cupsFlipDuplex: boolean

    Due to implementation differences between macOS and Ghostscript, the cupsFlipDuplex keyword is deprecated. Instead, use the cupsBackSide keyword to specify the coordinate system (pixel layout) of the page data on the back side of duplex pages.

    The value true maps to a cupsBackSide value of Rotated on macOS and Flipped with Ghostscript.

    The default value is false.

    Note:

    macOS drivers that previously used cupsFlipDuplex may wish to provide both the old and new keywords for maximum compatibility, for example:

    *cupsBackSide: Rotated
    *cupsFlipDuplex: true
    

    Similarly, drivers written for other operating systems using Ghostscript can use:

    *cupsBackSide: Flipped
    *cupsFlipDuplex: true
    

    CUPS 1.3/macOS 10.5cupsIPPFinishings

    *cupsIPPFinishings number/text: "*Option Choice ..."

    This keyword defines a mapping from IPP finishings values to PPD options and choices.

    Examples:

    *cupsIPPFinishings 4/staple: "*StapleLocation SinglePortrait"
    *cupsIPPFinishings 5/punch: "*PunchMedia Yes *PunchLocation LeftSide"
    *cupsIPPFinishings 20/staple-top-left: "*StapleLocation SinglePortrait"
    *cupsIPPFinishings 21/staple-bottom-left: "*StapleLocation SingleLandscape"
    

    CUPS 1.3/macOS 10.5cupsIPPReason

    *cupsIPPReason reason/Reason Text: "optional URIs"

    This optional keyword maps custom printer-state-reasons keywords that are generated by the driver to human readable text. The optional URIs string contains zero or more URIs separated by a newline. Each URI can be a CUPS server absolute path to a help file under the scheduler's DocumentRoot directory, a full HTTP URL ("http://www.domain.com/path/to/help/page.html"), or any other valid URI which directs the user at additional information concerning the condition that is being reported.

    Since the reason text is limited to 80 characters by the PPD specification, longer text strings can be included by URI-encoding the text with the "text" scheme, for example "text:some%20text". Multiple text URIs are combined by the ppdLocalizeIPPReason into a single string that can be displayed to the user.

    Examples:

    *% Map com.vendor-error to text but no page
    *cupsIPPReason com.vendor-error/A serious error occurred: ""
    
    *% Map com.vendor-error to more than 80 characters of text but no page
    *cupsIPPReason com.vendor-error/A serious error occurred: "text:Now%20is%20the%20time
    text:for%20all%20good%20men%20to%20come%20to%20the%20aid%20of%20their%20country."
    
    *% Map com.vendor-error to text and a local page
    *cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html"
    
    *% Map com.vendor-error to text and a remote page
    *cupsIPPReason com.vendor-error/A serious error occurred: "http://www.vendor.com/help"
    
    *% Map com.vendor-error to text and a local, Apple help book, and remote page
    *APHelpBook: "file:///Library/Printers/vendor/Help.bundle"
    *cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html
    help:anchor='com.vendor-error'%20bookID=Vendor%20Help
    http://www.vendor.com/help"
    *End
    

    CUPS 1.5cupsIPPSupplies

    *cupsIPPSupplies: boolean

    This keyword tells the IPP backend whether it should report the current marker-xxx supply attribute values. The default value is True.

    Example:

    *% Do not use IPP marker-xxx attributes to report supply levels
    *cupsIPPSupplies: False
    

    CUPS 1.7/macOS 10.9cupsJobAccountId

    *cupsJobAccountId: boolean

    This keyword defines whether the printer accepts the job-account-id IPP attribute.

    Example:

    *% Specify the printer accepts the job-account-id IPP attribute.
    *cupsJobAccountId: True
    

    CUPS 1.7/macOS 10.9cupsJobAccountingUserId

    *cupsJobAccountingUserId: boolean

    This keyword defines whether the printer accepts the job-accounting-user-id IPP attribute.

    Example:

    *% Specify the printer accepts the job-accounting-user-id IPP attribute.
    *cupsJobAccountingUserId: True
    

    CUPS 1.7/macOS 10.9cupsJobPassword

    *cupsJobPassword: "format"

    This keyword defines the format of the job-password IPP attribute, if supported by the printer. Currently the only supported format is "1111" indicating a 4-digit PIN code.

    Example:

    *% Specify the printer supports 4-digit PIN codes.
    *cupsJobPassword: "1111"
    

    CUPS 1.2/macOS 10.5cupsLanguages

    *cupsLanguages: "locale list"

    This keyword describes which language localizations are included in the PPD. The "locale list" string is a space-delimited list of locale names ("en", "en_US", "fr_CA", etc.)

    Example:

    *% Specify Canadian, UK, and US English, and Canadian and French French
    *cupsLanguages: "en_CA en_UK en_US fr_CA fr_FR"
    

    CUPS 1.7/macOS 10.9cupsMandatory

    *cupsMandatory: "attribute1 attribute2 ... attributeN"

    This keyword defines a list of IPP attributes that must be provided when submitting a print job creation request.

    Example:

    *% Specify that the user must supply a job-password
    *cupsMandatory: "job-password job-password-encryption"
    

    cupsManualCopies

    *cupsManualCopies: boolean

    This boolean keyword notifies the RIP filters that the destination printer does not support copy generation in hardware. The default value is false.

    Example:

    *% Tell the RIP filters to generate the copies for us
    *cupsManualCopies: true
    

    CUPS 1.4/macOS 10.6cupsMarkerName

    *cupsMarkerName/Name Text: ""

    This optional keyword maps marker-names strings that are generated by the driver to human readable text.

    Examples:

    *% Map cyanToner to "Cyan Toner"
    *cupsMarkerName cyanToner/Cyan Toner: ""
    

    CUPS 1.4/macOS 10.6cupsMarkerNotice

    *cupsMarkerNotice: "disclaimer text"

    This optional keyword provides disclaimer text for the supply level information provided by the driver, typically something like "supply levels are approximate".

    Examples:

    *cupsMarkerNotice: "Supply levels are approximate."
    

    CUPS 1.6/macOS 10.8cupsMaxCopies

    *cupsMaxCopies: integer

    This integer keyword notifies the filters that the destination printer supports up to N copies in hardware. The default value is 9999.

    Example:

    *% Tell the RIP filters we can do up to 99 copies
    *cupsMaxCopies: 99
    

    cupsModelNumber

    *cupsModelNumber: number

    This integer keyword specifies a printer-specific model number. This number can be used by a filter program to adjust the output for a specific model of printer.

    Example:

    *% Specify an integer for a driver-specific model number
    *cupsModelNumber: 1234
    

    CUPS 1.3/macOS 10.5cupsPJLCharset

    *cupsPJLCharset: "ISO character set name"

    This string keyword specifies the character set that is used for strings in PJL commands. If not specified, US-ASCII is assumed.

    Example:

    *% Specify UTF-8 is used in PJL strings
    *cupsPJLCharset: "UTF-8"
    

    CUPS 1.4/macOS 10.6cupsPJLDisplay

    *cupsPJLDisplay: "what"

    This optional keyword specifies which command is used to display the job ID, name, and user on the printer's control panel. "What" is either "none" to disable this functionality, "job" to use "@PJL JOB DISPLAY", or "rdymsg" to use "@PJL RDYMSG DISPLAY". The default is "job".

    Examples:

    *% Display job information using @PJL SET RDYMSG DISPLAY="foo"
    *cupsPJLDisplay: "rdymsg"
    
    *% Display job information display
    *cupsPJLDisplay: "none"
    

    CUPS 1.2/macOS 10.5cupsPortMonitor

    *cupsPortMonitor urischeme/Descriptive Text: "port monitor"

    This string keyword specifies printer-specific "port monitor" filters that may be used with the printer. The CUPS scheduler also looks for the Protocols keyword to see if the BCP or TBCP protocols are supported. If so, the corresponding port monitor ("bcp" and "tbcp", respectively) is listed in the printer's port-monitor-supported keyword.

    The "urischeme" portion of the keyword specifies the URI scheme that this port monitor should be used for. Typically this is used to pre-select a particular port monitor for each type of connection that is supported by the printer. The "port monitor" string can be "none" to disable the port monitor for the given URI scheme.

    Examples:

    *% Specify a PostScript printer that supports the TBCP protocol
    *Protocols: TBCP PJL
    
    *% Specify that TBCP should be used for socket connections but not USB
    *cupsPortMonitor socket/AppSocket Printing: "tbcp"
    *cupsPortMonitor usb/USB Printing: "none"
    
    *% Specify a printer-specific port monitor for an Epson USB printer
    *cupsPortMonitor usb/USB Status Monitor: "epson-usb"
    

    CUPS 1.3/macOS 10.5cupsPreFilter

    *cupsPreFilter: "source/type cost program"

    This string keyword provides a pre-filter rule. The pre-filter program will be inserted in the conversion chain immediately before the filter that accepts the given MIME type.

    Examples:

    *% PDF pre-filter
    *cupsPreFilter: "application/pdf 100 mypdfprefilter"
    
    *% PNG pre-filter
    *cupsPreFilter: "image/png 0 mypngprefilter"
    

    CUPS 1.5cupsPrintQuality

    *cupsPrintQuality keyword/text: "code"

    This UI keyword defines standard print qualities that directly map from the IPP "print-quality" job template keyword. Standard keyword values are "Draft", "Normal", and "High" which are mapped from the IPP "print-quality" values 3, 4, and 5 respectively. Each cupsPrintQuality option typically sets output mode and resolution parameters in the page device dictionary, eliminating the need for separate (and sometimes confusing) output mode and resolution options.

    Note:

    Unlike all of the other keywords defined in this document, cupsPrintQuality is a UI keyword that MUST be enclosed inside the PPD OpenUI and CloseUI keywords.

    Examples:

    *OpenUI *cupsPrintQuality/Print Quality: PickOne
    *OrderDependency: 10 AnySetup *cupsPrintQuality
    *DefaultcupsPrintQuality: Normal
    *cupsPrintQuality Draft/Draft: "code"
    *cupsPrintQuality Normal/Normal: "code"
    *cupsPrintQuality High/Photo: "code"
    *CloseUI: *cupsPrintQuality
    

    CUPS 1.5cupsSingleFile

    *cupsSingleFile: Boolean

    This boolean keyword tells the scheduler whether to print multiple files in a job together or singly. The default is "False" which uses a single instance of the backend for all files in the print job. Setting this keyword to "True" will result in separate instances of the backend for each file in the print job.

    Examples:

    *% Send all print data to a single backend
    *cupsSingleFile: False
    
    *% Send each file using a separate backend
    *cupsSingleFile: True
    

    CUPS 1.4/macOS 10.6cupsSNMPSupplies

    *cupsSNMPSupplies: boolean

    This keyword tells the standard network backends whether they should query the standard SNMP Printer MIB OIDs for supply levels. The default value is True.

    Example:

    *% Do not use SNMP queries to report supply levels
    *cupsSNMPSupplies: False
    

    cupsVersion

    *cupsVersion: major.minor

    This required keyword describes which version of the CUPS PPD file extensions was used. Currently it must be the string "1.0", "1.1", "1.2", "1.3", "1.4", "1.5", or "1.6".

    Example:

    *% Specify a CUPS 1.2 driver
    *cupsVersion: "1.2"
    

    CUPS 1.6/macOS 10.8JCLToPDFInterpreter

    *JCLToPDFInterpreter: "JCL"

    This keyword provides the JCL command to insert a PDF job file into a printer-ready data stream. The JCL command is added after the JCLBegin value and any commands for JCL options in the PPD file.

    Example:

    *% PJL command to start the PDF interpreter
    *JCLToPDFInterpreter: "@PJL ENTER LANGUAGE = PDF<0A>"
    

    macOS Attributes

    macOS 10.3APDialogExtension

    *APDialogExtension: "/Library/Printers/vendor/filename.plugin"

    This keyword defines additional option panes that are displayed in the print dialog. Each keyword adds one or more option panes. See the "OutputBinsPDE" example and Apple Technical Q&A QA1352 for information on writing your own print dialog plug-ins.

    Note:

    Starting with macOS 10.5, each plug-in must be compiled "4-way fat" (32-bit and 64-bit for both PowerPC and Intel) with garbage collection enabled in order to be usable with all applications.

    Examples:

    *% Add two panes for finishing and driver options
    *APDialogExtension: "/Library/Printers/vendor/finishing.plugin"
    *APDialogExtension: "/Library/Printers/vendor/options.plugin"
    

    macOS 10.4APDuplexRequiresFlippedMargin

    *APDuplexRequiresFlippedMargin: boolean

    This boolean keyword notifies the RIP filters that the destination printer requires the top and bottom margins of the ImageableArea to be swapped for the back page. The default is true when cupsBackSide is Flipped and false otherwise. Table 2 shows how APDuplexRequiresFlippedMargin interacts with cupsBackSide and the Tumble page attribute.

    Table 2: Margin Flipping Modes
    APDuplexRequiresFlippedMargin cupsBackSide Tumble Value Margins
    false any any Normal
    any Normal any Normal
    true ManualDuplex false Normal
    true ManualDuplex true Flipped
    true Rotated false Flipped
    true Rotated true Normal
    true or unspecified Flipped any Flipped

    Example:

    *% Rotate the back side images
    *cupsBackSide: Rotated
    
    *% Don't swap the top and bottom margins for the back side
    *APDuplexRequiresFlippedMargin: false
    

    Also see the related cupsBackSide keyword.

    APHelpBook

    *APHelpBook: "bundle URL"

    This string keyword specifies the Apple help book bundle to use when looking up IPP reason codes for this printer driver. The cupsIPPReason keyword maps "help" URIs to this file.

    Example:

    *APHelpBook: "file:///Library/Printers/vendor/Help.bundle"
    

    macOS 10.6APICADriver

    *APICADriver: boolean

    This keyword specifies whether the device has a matching Image Capture Architecture (ICA) driver for scanning. The default is False.

    Examples:

    *APICADriver: True
    *APScanAppBundleID: "com.apple.ImageCaptureApp"
    

    macOS 10.3APPrinterIconPath

    *APPrinterIconPath: "/Library/Printers/vendor/filename.icns"

    This keyword defines the location of a printer icon file to use when displaying the printer. The file must be in the Apple icon format.

    Examples:

    *% Apple icon file
    *APPrinterIconPath: "/Library/Printers/vendor/Icons/filename.icns"
    

    macOS 10.4APPrinterLowInkTool

    *APPrinterLowInkTool: "/Library/Printers/vendor/program"

    This keyword defines an program that checks the ink/toner/marker levels on a printer, returning an XML document with those levels. See the "InkTool" example and Apple Technical Note TN2144 for more information.

    Examples:

    *% Use a vendor monitoring program
    *APPrinterLowInkTool: "/Library/Printers/vendor/Tools/lowinktool"
    

    macOS 10.5APPrinterPreset

    *APPrinterPreset name/text: "*Option Choice ..."

    This keyword defines presets for multiple options that show up in the print dialog of applications (such as iPhoto) that set the job style hint to NSPrintPhotoJobStyleHint. Each preset maps to one or more pairs of PPD options and choices as well as providing key/value data for the application. The following standard preset names are currently defined:

    • General_with_Paper_Auto-Detect; Normal quality general printing with auto-detected media.
    • General_with_Paper_Auto-Detect_-_Draft; Draft quality general printing with auto-detected media.
    • General_on_Plain_Paper; Normal quality general printing on plain paper.
    • General_on_Plain_Paper_-_Draft; Draft quality general printing on plain paper.
    • Photo_with_Paper_Auto-Detect; Normal quality photo printing with auto-detected media.
    • Photo_with_Paper_Auto-Detect_-_Fine; High quality photo printing with auto-detected media.
    • Photo_on_Plain_Paper; Normal quality photo printing on plain paper.
    • Photo_on_Plain_Paper_-_Fine; High quality photo printing on plain paper.
    • Photo_on_Photo_Paper; Normal quality photo printing on glossy photo paper.
    • Photo_on_Photo_Paper_-_Fine; High quality photo printing on glossy photo paper.
    • Photo_on_Matte_Paper; Normal quality photo printing on matte paper.
    • Photo_on_Matte_Paper_-_Fine; High quality photo printing on matte paper.

    The value string consists of pairs of keywords, either an option name and choice (*MainKeyword OptionKeyword) or a preset identifier and value (com.apple.print.preset.foo value). The following preset identifiers are currently used:

    • com.apple.print.preset.graphicsType; specifies the type of printing used for this printing - "General" for general purpose printing and "Photo" for photo printing.
    • com.apple.print.preset.media-front-coating; specifies the media type selected by this preset - "none" (plain paper), "glossy", "high-gloss", "semi-gloss", "satin", "matte", and "autodetect".
    • com.apple.print.preset.output-mode; specifies the output mode for this preset - "color" (default for color printers) or "monochrome" (grayscale, default for B&W printers).
    • com.apple.print.preset.quality; specifies the overall print quality selected by this preset - "low" (draft), "mid" (normal), or "high".

    Presets, like options, can also be localized in multiple languages.

    Examples:

    *APPrinterPreset Photo_on_Photo_Paper/Photo on Photo Paper: "
      *MediaType Glossy
      *ColorModel RGB
      *Resolution 300dpi
      com.apple.print.preset.graphicsType Photo
      com.apple.print.preset.quality mid
      com.apple.print.preset.media-front-coating glossy"
    *End
    *fr.APPrinterPreset Photo_on_Photo_Paper/Photo sur papier photographique: ""
    

    macOS 10.3APPrinterUtilityPath

    *APPrinterPrinterUtilityPath: "/Library/Printers/vendor/filename.app"

    This keyword defines a GUI application that can be used to do printer maintenance functions such as cleaning the print head(s). See ... for more information.

    Examples:

    *% Define the printer utility application
    *APPrinterPrinterUtilityPath: "/Library/Printers/vendor/Tools/utility.app"
    

    macOS 10.6APScannerOnly

    *APScannerOnly: boolean

    This keyword specifies whether the device has scanning but no printing capabilities. The default is False.

    Examples:

    *APICADriver: True
    *APScannerOnly: True
    

    macOS 10.3APScanAppBundleID

    *APScanAppBundleID: "bundle ID"

    This keyword defines the application to use when scanning pages from the device.

    Examples:

    *APICADriver: True
    *APScanAppBundleID: "com.apple.ImageCaptureApp"
    

    Change History

    Changes in CUPS 1.7

    Changes in CUPS 1.6

    Changes in CUPS 1.5

    • Changes all instances of PPD attributes to PPD keywords, to be consistent with the parent specification from Adobe.

    Changes in CUPS 1.4.5

    Changes in CUPS 1.4

    Changes in CUPS 1.3.1

    • Added missing macOS AP keywords.
    • Added section on auto-configuration including the OIDMainKeyword and ?MainKeyword keywords.
    • Minor reorganization.

    Changes in CUPS 1.3

    Changes in CUPS 1.2.8

    • Added section on supported PostScript commands for raster drivers

    Changes in CUPS 1.2

    Changes in CUPS 1.1

    cups-2.2.7/doc/help/spec-raster.html000664 000765 000024 00000056540 13255074424 020000 0ustar00msweetstaff000000 000000 CUPS Raster Format

    CUPS Raster Format

    CUPS Raster files are device-dependent raster image files that contain a PostScript page device dictionary and device-dependent raster imagery for each page in the document. These files are used to transfer raster data from the PostScript and image file RIPs to device-dependent filters that convert the raster data to a printable format.

    CUPS 1.0 and 1.1 used version 1 of the raster format. CUPS 1.2 and later use version 2 (compressed) and version 3 (uncompressed) that are a superset of the version 1 raster format. All three versions of CUPS Raster are streamable formats, and applications using the CUPS Imaging API (the cupsRaster* functions) can read all formats without code changes.

    The registered MIME media type for CUPS Raster files is application/vnd.cups-raster.

    Organization of a CUPS Raster File

    Figure 1, "Raster Organization", shows the general organization of all CUPS Raster files. Each file begins with a 32-bit synchronization word followed by zero or more pages. Each page consists of a header (the PostScript page device dictionary and raster-specific values) followed by the bitmap image for the page.

    Each page bitmap is stored as described by the cupsBitsPerColor, cupsBytesPerLine, cupsColorOrder, cupsColorSpace, cupsHeight, and cupsWidth values in the page header. Pixels for the front side of a sheet are always stored left-to-right, top-to-bottom. When doing duplex printing, pixels for the back side of a sheet may be stored differently depending on the value of the cupsBackSide keyword ("Normal", "ManualTumble", "Rotated", or "Flipped") in the PPD file and the Tumble value ("true" or "false") in the page header. Figure 2, "Page Bitmaps", shows the pixel order for each combination.

    Version 1 Raster File Format

    A version 1 raster file begins with a 32-bit synchronization word: 0x52615374 ("RaSt") for big-endian architectures or 0x74536152 ("tSaR") for little-endian architectures. The writer of the raster file will use the native word order, and the reader is responsible for detecting a reversed word order file and swapping bytes as needed. The CUPS Imaging API raster functions perform this function automatically.

    Following the synchronization word are a series of raster pages. Each page starts with a page device dictionary header and is followed immediately by the (uncompressed/raw) raster data for that page.

    Table 1: CUPS Version 1 Raster Page Device Dictionary
    Bytes Type Description Values
    0-63 C String MediaClass Media class string
    64-127 C String MediaColor Media color string
    128-191 C String MediaType Media type string
    192-255 C String OutputType Output type string
    256-259 Unsigned Integer AdvanceDistance 0 to 232 - 1 points
    260-263 Unsigned Integer AdvanceMedia 0 = Never advance roll
    1 = Advance roll after file
    2 = Advance roll after job
    3 = Advance roll after set
    4 = Advance roll after page
    264-267 Unsigned Integer Collate 0 = do not collate copies
    1 = collate copies
    268-271 Unsigned Integer CutMedia 0 = Never cut media
    1 = Cut roll after file
    2 = Cut roll after job
    3 = Cut roll after set
    4 = Cut roll after page
    272-275 Unsigned Integer Duplex 0 = Print single-sided
    1 = Print double-sided
    276-283 Unsigned Integers (2) HWResolution Horizontal and vertical resolution in dots-per-inch.
    284-299 Unsigned Integers (4) ImagingBoundingBox Four integers giving the left, bottom, right, and top positions of the page bounding box in points
    300-303 Unsigned Integer InsertSheet 0 = Do not insert separator sheets
    1 = Insert separator sheets
    304-307 Unsigned Integer Jog 0 = Do no jog pages
    1 = Jog pages after file
    2 = Jog pages after job
    3 = Jog pages after set
    308-311 Unsigned Integer LeadingEdge 0 = Top edge is first
    1 = Right edge is first
    2 = Bottom edge is first
    3 = Left edge is first
    312-319 Unsigned Integers (2) Margins Left and bottom origin of image in points
    320-323 Unsigned Integer ManualFeed 0 = Do not manually feed media
    1 = Manually feed media
    324-327 Unsigned Integer MediaPosition Input slot position from 0 to N
    328-331 Unsigned Integer MediaWeight Media weight in grams per meter squared, 0 = printer default
    332-335 Unsigned Integer MirrorPrint 0 = Do not mirror prints
    1 = Mirror prints
    336-339 Unsigned Integer NegativePrint 0 = Do not invert prints
    1 = Invert prints
    340-343 Unsigned Integer NumCopies 0 to 232 - 1, 0 = printer default
    344-347 Unsigned Integer Orientation 0 = Do not rotate page
    1 = Rotate page counter-clockwise
    2 = Turn page upside down
    3 = Rotate page clockwise
    348-351 Unsigned Integer OutputFaceUp 0 = Output face down
    1 = Output face up
    352-359 Unsigned Integers (2) PageSize Width and length in points
    360-363 Unsigned Integer Separations 0 = Print composite image
    1 = Print color separations
    364-367 Unsigned Integer TraySwitch 0 = Do not change trays if selected tray is empty
    1 = Change trays if selected tray is empty
    368-371 Unsigned Integer Tumble 0 = Do not rotate even pages when duplexing
    1 = Rotate even pages when duplexing
    372-375 Unsigned Integer cupsWidth Width of page image in pixels
    376-379 Unsigned Integer cupsHeight Height of page image in pixels
    380-383 Unsigned Integer cupsMediaType Driver-specific 0 to 232 - 1
    384-387 Unsigned Integer cupsBitsPerColor 1, 2, 4, 8 bits for version 1 raster files
    1, 2, 4, 8, and 16 bits for version 2/3 raster files
    388-391 Unsigned Integer cupsBitsPerPixel 1 to 32 bits for version 1 raster files
    1 to 240 bits for version 2/3 raster files
    392-395 Unsigned Integer cupsBytesPerLine 1 to 232 - 1 bytes
    396-399 Unsigned Integer cupsColorOrder 0 = chunky pixels (CMYK CMYK CMYK)
    1 = banded pixels (CCC MMM YYY KKK)
    2 = planar pixels (CCC... MMM... YYY... KKK...)
    400-403 Unsigned Integer cupsColorSpace 0 = gray (device, typically sRGB-based)
    1 = RGB (device, typically sRGB)
    2 = RGBA (device, typically sRGB)
    3 = black
    4 = CMY
    5 = YMC
    6 = CMYK
    7 = YMCK
    8 = KCMY
    9 = KCMYcm
    10 = GMCK
    11 = GMCS
    12 = WHITE
    13 = GOLD
    14 = SILVER
    15 = CIE XYZ
    16 = CIE Lab
    17 = RGBW (sRGB)
    18 = sGray (gray using sRGB gamma/white point)
    19 = sRGB
    20 = AdobeRGB
    32 = ICC1 (CIE Lab with hint for 1 color)
    33 = ICC2 (CIE Lab with hint for 2 colors)
    34 = ICC3 (CIE Lab with hint for 3 colors)
    35 = ICC4 (CIE Lab with hint for 4 colors)
    36 = ICC5 (CIE Lab with hint for 5 colors)
    37 = ICC6 (CIE Lab with hint for 6 colors)
    38 = ICC7 (CIE Lab with hint for 7 colors)
    39 = ICC8 (CIE Lab with hint for 8 colors)
    40 = ICC9 (CIE Lab with hint for 9 colors)
    41 = ICCA (CIE Lab with hint for 10 colors)
    42 = ICCB (CIE Lab with hint for 11 colors)
    43 = ICCC (CIE Lab with hint for 12 colors)
    44 = ICCD (CIE Lab with hint for 13 colors)
    45 = ICCE (CIE Lab with hint for 14 colors)
    46 = ICCF (CIE Lab with hint for 15 colors)
    48 = Device1 (DeviceN for 1 color)
    49 = Device2 (DeviceN for 2 colors)
    50 = Device3 (DeviceN for 3 colors)
    51 = Device4 (DeviceN for 4 colors)
    52 = Device5 (DeviceN for 5 colors)
    53 = Device6 (DeviceN for 6 colors)
    54 = Device7 (DeviceN for 7 colors)
    55 = Device8 (DeviceN for 8 colors)
    56 = Device9 (DeviceN for 9 colors)
    57 = DeviceA (DeviceN for 10 colors)
    58 = DeviceB (DeviceN for 11 colors)
    59 = DeviceC (DeviceN for 12 colors)
    60 = DeviceD (DeviceN for 13 colors)
    61 = DeviceE (DeviceN for 14 colors)
    62 = DeviceF (DeviceN for 15 colors)
    404-407 Unsigned Integer cupsCompression Driver-specific 0 to 232 - 1
    408-411 Unsigned Integer cupsRowCount Driver-specific 0 to 232 - 1
    412-415 Unsigned Integer cupsRowFeed Driver-specific 0 to 232 - 1
    416-419 Unsigned Integer cupsRowStep Driver-specific 0 to 232 - 1

    Version 2 Raster File Format

    A version 2 raster file begins with a 32-bit synchronization word: 0x52615332 ("RaS2") for big-endian architectures or 0x32536152 ("2SaR") for little-endian architectures. The writer of the raster file will use the native word order, and the reader is responsible for detecting a reversed word order file and swapping bytes as needed. The CUPS Imaging API raster functions perform this function automatically.

    Following the synchronization word are a series of raster pages. Each page starts with a version 2 page device dictionary header and is followed immediately by the compressed raster data for that page.

    Table 2: CUPS Version 2 Raster Page Device Dictionary
    Bytes Type Description Values
    0-419 Version 1 header data See Table 1
    420-423 Unsigned Integer cupsNumColors 1 to 15 colors
    424-427 IEEE Single Precision cupsBorderlessScalingFactor 0.0 or 1.0 or greater
    428-435 IEEE Single Precision (2) cupsPageSize Width and length in points
    436-451 IEEE Single Precision (4) cupsImagingBBox Four floating point numbers giving the left, bottom, right, and top positions of the page bounding box in points
    452-515 Unsigned Integers (16) cupsInteger 16 driver-defined integer values
    516-579 IEEE Single Precision (16) cupsReal 16 driver-defined floating point values
    580-1603 C Strings (16x64) cupsString 16 driver-defined strings
    1604-1667 C String cupsMarkerType Ink/toner type string
    1668-1731 C String cupsRenderingIntent Color rendering intent string
    1732-1795 C String cupsPageSizeName Page size name/keyword string from PPD

    Compressed Raster Data Format

    The version 2 raster data is compressed using a PackBits-like algorithm. Lines are grouped into an integral number of color values based upon the cupsColorOrder setting:

    Table 3: Color Value Sizes
    cupsColorOrder Bytes per color value
    0 (chunky) (cupsBitsPerPixel + 7) / 8
    1 (banded) (cupsBitsPerColor + 7) / 8
    2 (planar) (cupsBitsPerColor + 7) / 8

    Each line of raster data begins with a repetition count from 1 to 256 that is encoded using a single byte of "count - 1".

    After the repetition count, whole color values for that line are run-length encoded using a PackBits-like run-length encoding algorithm: 1 to 128 repeated colors are encoded using an initial byte of "count - 1" followed by the color value byte(s) while 2 to 128 non-repeating colors are encoded using an initial byte of "257 - count" followed by the color value bytes.

    For example, the 8x8 24-bit sRGB image shown in Figure 3, "Sample Image", would be encoded as the following 89 octets:

    %x00 %x00.FF.FF.FF %x02.FF.FF.00 %x03.FF.FF.FF
    %x00 %xFE.FF.FF.00.00.00.FF.FF.FF.00 %x02.FF.FF.FF %x00.00.FF.00 %x00.FF.FF.FF
    %x00 %x01.FF.FF.00 %x02.FF.FF.FF %x02.00.FF.00
    %x00 %x02.FF.FF.00 %x02.FF.FF.FF %x00.00.FF.00 %x00.FF.FF.FF
    %x00 %x00.FF.FF.FF %x02.FF.FF.00 %x03.FF.FF.FF
    %x00 %x07.FF.FF.FF
    %x01 %x07.FF.00.00
    

    The first line (%x00) contains 1 white pixel (%x00.FF.FF.FF), 3 yellow pixels (%x02.FF.FF.00), and 4 white pixels (%x03.FF.FF.FF).

    The second line (%x00) contains a sequence of yellow + blue + yellow pixels (%xFE.FF.FF.00.00.00.FF.FF.FF.00), 3 white pixels (%x02.FF.FF.FF), 1 green pixel (%x00.00.FF.00), and 1 white pixel (%x00.FF.FF.FF).

    The third line (%x00) contains 2 yellow pixels (%x01.FF.FF.00), 3 white pixels (%x02.FF.FF.FF), and 3 green pixels (%x02.00.FF.00)

    The fourth line (%x00) contains 3 yellow pixels (%x02.FF.FF.00), 3 white pixels (%x02.FF.FF.FF), 1 green pixel (%x00.00.FF.00), and 1 white pixel (%x00.FF.FF.FF).

    The fifth line (%x00) contains 1 white pixel (%x00.FF.FF.FF), 3 yellow pixels (%x02.FF.FF.00), and 4 white pixels (%x03.FF.FF.FF).

    The sixth line (%x00) contains 8 white pixels (%x07.FF.FF.FF).

    The seventh and eighth lines (%x01) contain 8 red pixels (%x07.FF.00.00).

    Version 3 Raster File Format

    A version 3 raster file begins with a 32-bit synchronization word: 0x52615333 ("RaS3") for big-endian architectures and 0x33536152 ("3SaR") for little-endian architectures. The writer of the raster file will use the native word order, and the reader is responsible for detecting a reversed word order file and swapping bytes as needed. The CUPS Imaging API raster functions perform this function automatically.

    Following the synchronization word are a series of raster pages. Each page starts with a version 2 page device dictionary header and is followed immediately by the uncompressed/raw raster data for that page.

    Pixel Value Coding

    The following sections describe the encoding and decoding of the color values in a CUPS Raster file. In general, colors are packed into the minimum number of bytes, with special consideration provided for efficiency of encoding and access. Multi-byte values are stored in the native byte order and automatically swapped as needed when reading them using the CUPS imaging API.

    CUPS_ORDER_CHUNKED

    The chunked order provides the pixel value packed in a single place. Pixel values with 8 or more bits per color are stored as an array of colors in order, e.g. for CUPS_CSPACE_RGB you will see 8/16-bits of red, then blue, then green, then red, green, blue, etc. Pixel values with less than 8 bits per color are packed together as shown in Table 4. Multi-byte pixel values are stored in the native word order, just as for 16-bit color values.

    Table 4: Chunked Color Values
    Bits 1-color 3-color 4-color 6-color
    1 W/W/W/W/W/W/W/W 0RGB/0RGB CMYK/CMYK 00KCMYcm
    2 WW/WW/WW/WW 00RRGGBB CCMMYYKK N/A
    4 WWWW/WWWW 0000RRRRGGGGBBBB
    (multi-byte)
    CCCCMMMMYYYYKKKK
    (multi-byte)
    N/A

    CUPS_ORDER_BANDED

    The banded order provides each color as a separate line of data. Each color plane for a line is written in sequence, e.g. for the CUPS_CSPACE_CMYK color space you would see all of the cyan pixels for a line followed by the magenta, yellow, and black pixels for that line. This is repeated for all of the lines on the page. Color values are packed starting with the most-significant bit (MSB) first.

    CUPS_ORDER_PLANAR

    The planar order provides each color as a separate page of data using a shared page header. Each color plane for a page is written in sequence, e.g. for the CUPS_CSPACE_CMYK color space you would see all of the cyan pixels for a page followed by the magenta, yellow, and black pixels for that page. Color values are packed starting with the most-significant bit (MSB) first. Each line starts on an 8-bit boundary.

    CUPS_CSPACE_RGBW

    This color space provides a dedicated black text channel and uses the sRGB color space definition and white point for the RGB color channels. The white channel is 0 for text (or "true") black, otherwise it must contain the maximum color value: 1 for 1-bit, 3 for 2-bit, 15 for 4-bit, 255 for 8-bit, or 65535 for 16-bit.

    CUPS_CSPACE_KCMYcm

    When cupsBitsPerColor is 1, 6 color planes are provided - black, cyan, magenta, yellow, light cyan, and light magenta. When cupsBitsPerColor is greater than 1, 4 color planes are provided using the CUPS_CSPACE_KCMY color space instead.

    When cupsColorOrder is CUPS_ORDER_CHUNKED, bit 5 corresponds to black and bit 0 corresponds to light magenta. For CUPS_ORDER_BANDED and CUPS_ORDER_PLANAR, each color plane is encoded separately.

    CUPS_CSPACE_CIELab and CUPS_CSPACE_ICCn

    These color spaces map a CIE Lab color value with a D65 white point to either a 8- or 16-bit per color chunked (CUPS_ORDER_CHUNKED) format; the banded (CUPS_ORDER_BANDED) and planar (CUPS_ORDER_PLANAR) color orders are not supported.

    The values are encoded and decoded using the following formulas:

    • 8-bit Encoding:
      L8 = 2.55 * L + 0.5
      a8 = a + 128.5
      b8 = b + 128.5
       
    • 8-bit Decoding:
      L = L8 / 2.55
      a = a8 - 128
      b = b8 - 128
       
    • 16-bit Encoding:
      L16 = 655.35 * L + 0.5
      a16 = 256 * (a + 128) + 0.5
      b16 = 256 * (b + 128) + 0.5
       
    • 16-bit Decoding:
      L = L16 / 655.35
      a = a16 / 256 - 128
      b = b16 / 256 - 128
       

    CUPS_CSPACE_CIEXYZ

    These color spaces map a CIE XYZ color value with a D65 white point to either a 8- or 16-bit per color chunked (CUPS_ORDER_CHUNKED) format; the banded (CUPS_ORDER_BANDED) and planar (CUPS_ORDER_PLANAR) color orders are not supported.

    The values are encoded and decoded using the following formulas:

    • 8-bit Encoding:
      X8 = 231.8181 * X + 0.5
      Y8 = 231.8181 * Y + 0.5
      Z8 = 231.8181 * Z + 0.5
       
    • 8-bit Decoding:
      X = X8 / 231.8181
      Y = Y8 / 231.8181
      Z = Z8 / 231.8181
       
    • 16-bit Encoding:
      X16 = 59577.2727 * X + 0.5
      Y16 = 59577.2727 * Y + 0.5
      Z16 = 59577.2727 * Z + 0.5
       
    • 16-bit Decoding:
      X = X16 / 59577.2727
      Y = Y16 / 59577.2727
      Z = Z16 / 59577.2727
       

    The scaling factor for XYZ values is 1/1.1, or 231.8181 for 8-bit values and 59577.2727 for 16-bit values. This allows for a slight overflow of XYZ values when converting from RGB, improving accuracy.

    Change History

    Changes in CUPS 1.4.7

    • Greatly improved the detail and now include an example of the bitmap compression.
    • Added all missing cupsColorSpace values and a separate description of CUPS_CSPACE_RGBW.

    Changes in CUPS 1.2.2

    • Added version 3 (uncompressed) format.

    Changes in CUPS 1.2.1

    • Added new sections on coding pixel values.
    • Clarified definitions of color spaces.

    Changes in CUPS 1.2

    • Bumped raster version to 2
    • Added RGBW color space
    • Added 16 bit per color support
    • Added cupsNumColors, cupsBorderlessScalingFactor, cupsPageSize, cupsImagingBBox, cupsInteger, cupsReal, cupsString, cupsMarkerType, cupsRenderingIntent, and cupsPageSizeName attributes to the page device dictionary
    • Added raster data compression
    • Added data type column to device dictionary documentation.

    Changes in CUPS 1.1.19

    • Added ICC and CIE color spaces.
    cups-2.2.7/doc/help/spec-stp.html000664 000765 000024 00000007454 13255074424 017306 0ustar00msweetstaff000000 000000 CUPS Software Test Plan

    CUPS Software Test Plan

    This software test plan provides detailed tests that are used to evaluate the stability and compliance of CUPS.

    Test Procedure

    The test software and data files are located in the test subdirectory of the source distribution. A script is provided to compile the ipptool program and run all of the tests that follow, producing a success/fail report.

    The test target of the top-level makefile can be used to run this script:

    make test
    

    or you can run the test script directly:

    cd test
    ./run-stp-tests
    

    A Software Test Report is stored in a HTML file in the test subdirectory at the conclusion of the test.

    IPP Compliance Tests

    This section describes the tests used to validate the IPP standards compliance of the CUPS server.

    Request Tests

    These tests verify that the CUPS scheduler only accepts valid IPP requests that start with the attributes-charset and attributes-natural-language attributes and also contain a printer-uri or job-uri attribute.

    It also verifies that the CUPS scheduler always responds with attributes-charset and attributes-natural-language attributes, using default values if they are not provided by the client.

    CUPS Printer Operation Tests

    These tests verify that the CUPS printer operations are supported and function properly. Two printers called Test1 and Test2 are created, one as a PostScript printer and one as a raster printer.

    Job Operation Tests

    These test verify that the CUPS scheduler accepts print jobs for all supported file formats and that the cancel-job, hold-job, and resume-job operations work.

    Subscription Operation Tests

    These test verify that the CUPS scheduler accepts subscriptions with print jobs and that all subscription operations work as required by the IPP notification and mailto specifications.

    Command Tests

    This section describes the tests used to validate the Berkeley and System V commands included with CUPS.

    lpadmin

    This test verifies that printers can be added, modified, and defaulted using the lpadmin command.

    lpc

    This test verifies that the lpc command can show the current status of all print queues.

    lpq

    This test verifies that the lpq command lists any jobs in the queue.

    lpstat

    This test verifies that the lpstat command works with all reports using the "-t" option.

    lp

    This test verifies that the lp command works with both the default destination and a specific destination.

    lpr

    This test verifies that the lpr command works with both the default destination and a specific destination.

    lprm

    This test verifies that the lprm command can properly cancel a job.

    cancel

    This test verifies that the cancel command can properly cancel a job or all jobs.

    lpinfo

    This test verifies that the lpinfo command returns a list of available printer drivers and devices.

    cups-2.2.7/doc/help/translation.html000664 000765 000024 00000055727 13255074424 020114 0ustar00msweetstaff000000 000000 Translating and Customizing CUPS

    Translating and Customizing CUPS

    Thanks to its extensive use of templates, images, and message catalogs, CUPS can be easily translated (or customized!) to suit your needs. This help file will guide you through the CUPS localization files so you can get the most out of it.

    Getting Started

    Start by downloading the CUPS source code from www.cups.org. After you extract the files from the source archive, you will want to copy the following files and directories:

    • desktop/cups.desktop - the GNOME/KDE desktop file pointing to the CUPS web interface
    • doc/index.html - the web interface home page
    • locale/cups.pot - the message catalog
    • templates/*.tmpl - the web interface template files

    With the exception of the message catalogs and desktop file, localization files are placed in subdirectories under the doc and templates using the locale name. Locale names are either ll or ll_CC, where "ll" is the 2-letter language code and "CC" is the 2-letter country code. CUPS does not currently use or support the newer ll-region syntax for locale names.

    All non-image files must be encoded using the UTF-8 character set.

    Submitting a Translation for CUPS

    To submit a translation for inclusion in CUPS, translate the desktop file, all of the template files, the index.html.in file, and the message catalog. Place these files in the correct subdirectories in the CUPS source code archive and run the following command to create an archive with your files:

    tar cvf ll_CC.tar.gz desktop/cups.desktop doc/ll_CC \
        locale/cups_ll_CC.po templates/ll_CC
    

    Replace "ll_CC" with the locale name for your translation. Once you have created the archive, go to the CUPS Bugs & Features page and submit a bug report, attaching the translation to the report.

    The Desktop File

    The desktop/cups.desktop file provides a link to the CUPS web interface from desktop environments such as GNOME and KDE. To translate this file, add two lines to the bottom with the Name and Comment keys:

    Name[ll_CC]=Translation of "Manage Printing"
    Comment[ll_CC]=Translation of "CUPS Web Interface"
    

    The Home Page

    The index.html file is a complete HTML file that is displayed when the user visits "http://localhost:631/". Edit the existing doc/index.html and save it in the doc/ll_CC subdirectory so that the makefile can install it. Run "make install" in the doc subdirectory to test the new home page.

    Message Catalogs

    CUPS message catalogs are GNU gettext ".po" text files that provide a list of localized message strings for the CUPS software. Message catalogs are named cups_ll.po or cups_ll_CC.po, where "ll" is the standard 2-letter abbreviation for the language and "CC" is the standard 2-letter abbreviation for the country.

    When translating a new message catalog, copy the cups.pot message catalog file in the locale subdirectory of the CUPS source code. For example, to start translating the message catalog to Canadian French, you would type the following commands:

    cd locale
    cp cups.pot cups_fr_CA.po
    

    Alternatively, you can copy the existing cups_fr.po message catalog and then make any necessary changes.

    Once you have make your copy of the file, edit it using your favorite text editor or translation program to translate the text to the desired language.

    Then validate your translation using the locale/checkpo utility:

    cd locale
    ./checkpo cups_ll_CC.po
    

    After fixing any errors in your translation, add your locale to the LANGUAGES variable in the Makedefs file and run the "make install" command in the locale subdirectory to test the translation.

    Template Files

    The CUPS scheduler provides a web interface that can be used to do many common printing and administration tasks. The built-in web server supports localization of web pages through the use of subdirectories for each locale, e.g. "fr" for French, "de" for German, "fr_ca" for French in Canada, and so forth.

    Template files are HTML files with special formatting characters in them that allow substitution of variables and arrays. The CUPS CGI programs (admin.cgi, classes.cgi, help.cgi, jobs.cgi, and printers.cgi) use these template file to provide dynamic content for the web interface. Template files are installed in the /usr/share/cups/templates directory by default. Table 2 lists the various template files and their purpose.

    Translated versions of the template files should be saved in the templates/ll_CC subdirectory. For example, Canadian French template files should be saved in the templates/fr_CA subdirectory. After you have translated all of the templates, add the locale to the LANGUAGES variable in the Makedefs file and run "make install" in the templates subdirectory to test the translation.

    Table 2: Web Interface Template Files
    Filename Purpose
    add-class.tmpl This is the initial form that is shown to add a new printer class.
    add-printer.tmpl This is the initial form that is shown to add a new printer.
    add-rss-subscription.tmpl This is the form that is shown to add a new RSS subscription.
    admin.tmpl This is the main administration page.
    choose-device.tmpl This is the form that shows the list of available devices.
    choose-make.tmpl This is the form that shows the list of available manufacturers.
    choose-model.tmpl This is the form that shows the list of available printer models/drivers.
    choose-serial.tmpl This is the form that allows the user to choose a serial port and any options.
    choose-uri.tmpl This is the form that allows the user to enter a device URI for network printers.
    class-added.tmpl This template shows the "class added" message.
    class-confirm.tmpl This is the template used to confirm the deletion of a class.
    class-deleted.tmpl This template shows the "class deleted" message.
    class-jobs-header.tmpl This template shows the "jobs" header for jobs in a class.
    class-modified.tmpl This template shows the "class modified" message.
    classes.tmpl This template shows one or more printer classes.
    classes-header.tmpl This template shows the "showing N of M classes" header in the class list.
    edit-config.tmpl This is the cupsd.conf editor page.
    error.tmpl This template displays a generic error message.
    error-op.tmpl This is the "unknown operation" error page.
    header.tmpl This template is used as the standard header on all dynamic content.
    help-header.tmpl This is the top part of the help page.
    help-printable.tmpl This is the standard page header for the printable version of help files.
    job-cancel.tmpl This template shows "job canceled".
    job-hold.tmpl This template shows "job held".
    job-move.tmpl This template shows the move-job form.
    job-moved.tmpl This template shows "job moved".
    job-release.tmpl This template shows "job released".
    job-restart.tmpl This template shows "job reprinted".
    jobs.tmpl This template is used to list the print jobs on a server, class, or printer.
    jobs-header.tmpl This template shows the "showing N or M jobs" header in the jobs list.
    list-available-printers.tmpl This template shows a list of new printers that have been found.
    maintenance.tmpl This template shows "maintenance commands sent".
    modify-class.tmpl This template is used as the first form when modifying a class.
    modify-printer.tmpl This template is used as the first form when modifying a printer.
    norestart.tmpl This template shows "server not restarted because no changes were made to the configuration".
    option-boolean.tmpl This template is used to select a boolean PPD option.
    option-conflict.tmpl This template shows the conflicting options.
    option-header.tmpl This template is used to start a PPD option group.
    option-pickmany.tmpl This template is used to select a multi-valued PPD option.
    option-pickone.tmpl This template is used to select a single-valued PPD option.
    option-trailer.tmpl This template is used to end a PPD option group.
    pager.tmpl This template shows the previous/next pager bar.
    printer-accept.tmpl This template shows "printer now accepting jobs".
    printer-added.tmpl This template shows "printer added".
    printer-configured.tmpl This template shows "printer configured".
    printer-confirm.tmpl This template asks the user to confirm the deletion of a printer.
    printer-default.tmpl This template shows "default printer set".
    printer-deleted.tmpl This template shows "printer deleted".
    printer-jobs-header.tmpl This templates shows the "jobs" header for jobs on a printer.
    printer-modified.tmpl This template shows "printer modified".
    printer-purge.tmpl This template shows "printer has been purged of all jobs".
    printer-reject.tmpl This template shows "printer now rejecting jobs".
    printer-start.tmpl This template shows "printer started".
    printer-stop.tmpl This template shows "printer stopped".
    printers.tmpl This template is used to list information on one or more printers.
    printers-header.tmpl This template shows the "showing printer N of M" header in the printers list.
    restart.tmpl This template shows "server restarting".
    samba-export.tmpl This template shows the export printers to Samba form.
    samba-exported.tmpl This template shows "printers exported to Samba".
    search.tmpl This template shows the search form.
    set-printer-options-header.tmpl This template shows the first part of the set printer options form.
    set-printer-options-trailer.tmpl This template shows the last part of the set printer options form.
    subscription-added.tmpl This template shows "subscription ... added".
    subscription-canceled.tmpl This template shows "subscription #NNN canceled".
    test-page.tmpl This template shows "test page printed".
    trailer.tmpl This template is used as the standard trailer on all dynamic content.
    users.tmpl This template shows the set allowed users form.

    Inserting Attributes and Values

    Template files consist of HTML with variable substitutions for named inside curly braces "{name}". Variable names are generally the IPP attribute names with the hyphen ("-") replaced by the underscore ("_") character. For example, the job-printer-uri attribute is renamed to job_printer_uri.

    Curley braces ("{" and "}") to indicate substitutions, and the backslash ("\") character for quoting. To insert any of these special characters as-is you need to use the HTML &name; mechanism or prefix each special character with the backslash ("\".)

    You substitute the value of a variable using {NAME} in your template file. If the variable is undefined then the {NAME} string is output as-is.

    To substitute an empty string if the variable is undefined, use {?NAME} instead.

    Array Substitutions

    The number of array elements can be inserted using {#NAME}. If the array is undefined then 0 is output. The current array element (starting at 1) is inserted with {#}.

    Arrays are handled using {[NAME] at the beginning of a section and } at the end. The information between the closing bracket ("]") and closing brace ("}") is repeated for as many elements as are in the named array. For example, the following template will display a list of each job in the job_id array:

    <TABLE>
    <TR>
    	<TH>Job ID</TH>
    	<TH>Destination</TH>
    	<TH>Title</TH>
    </TR>
    
    {[job_id]
    <TR>
    	<TD>{?job_id}</TD>
    	<TD>{?job_printer_name}</TD>
    	<TD>{?job_name}</TD>
    </TR>
    }
    </TABLE>
    

    Arrays can be nested, however all elements within the curly braces ("{" and "}") are indexed using the innermost array.

    Conditional Tests

    Templates can also test variables against specific values and conditionally include text in the template. The format is:

    {variable?true:false}
    {variable=value?true:false}
    {variable!value?true:false}
    {variable<value?true:false}
    {variable>value?true:false}
    

    where true is the text that is included if the condition is true and false is the text that is included if the condition is false. A value of # is replaced with the current element number (starting at 1.) The character after the variable name specifies the condition to test. Table 3 shows the available test conditions.

    Table 3: Template Substitution Conditions
    Char Condition
    ? True if variable exists.
    = True if variable is equal to value.
    ! True if variable is not equal to value.
    < True if variable is less than value.
    > True if variable is greater than value.

    CGI Programs

    CUPS uses five CGI programs to manage the dynamic web interfaces:

    • admin.cgi
    • classes.cgi
    • help.cgi
    • jobs.cgi
    • printers.cgi

    Each CGI program accepts standard form variables such as OP for the operation to perform, PRINTER_NAME for the printer or class name to operate on, QUERY for any search words, FIRST for the first class, job, or printer to display, and ORDER to control the order that classes, jobs, or printers are displayed.

    In addition, the classes.cgi, jobs.cgi, and printers.cgi programs support a WHICH_JOBS variable to control which jobs are displayed. Table 4 lists the supported values.

    Table 4: WHICH_JOBS Values
    WHICH_JOBS Value Description
    all Show all jobs
    completed Show completed jobs
    not-completed Show active jobs

    admin.cgi

    The admin.cgi program handles all of the printer and class administration functions and is run for all direct accesses to the /admin resource. For most operations it uses the PRINTER_NAME and OP form variables to specify the action requested. Table 5 shows the supported OP values.

    Table 5: admin.cgi OP Values
    OP Value Description
    accept-jobs Accepts jobs on the named destination.
    add-class Adds a new printer class.
    add-printer Adds a new printer.
    config-server Configures the server.
    delete-class Deletes a printer class. The form variable CONFIRM may be set to any value to bypass the confirmation page.
    delete-printer Deletes a printer. The form variable CONFIRM may be set to any value to bypass the confirmation page.
    export-samba Exports printers to Samba.
    find-new-printers Find new printers that have not yet been added.
    modify-class Modifies a printer class.
    modify-printer Modifies a printer.
    purge-jobs Purges all jobs on the named destination.
    redirect Redirects the web browser to the location referenced by the URL form variable.
    reject-jobs Rejects new jobs on the named destination.
    set-allowed-users Sets the allowed users for a destination.
    set-as-default Sets the default destination.
    set-printer-options Sets the default options for a printer.
    set-sharing Sets the printer-is-shared attribute for a destination.
    start-class Starts the named class.
    start-printer Starts the named printer.
    stop-class Stops the named class.
    stop-printer Stops the named printer.

    classes.cgi

    The classes.cgi program is responsible for listing class information, including jobs destined for that class. It is for all direct accesses to the /classes resource and supports the optional form variables OP and WHICH_JOBS. If no form variables are supplied then the CGI lists all or a specific class and the active jobs on each class. Table 6 shows the supported OP values.

    Table 6: classes.cgi OP Values
    OP Value Description
    move-jobs Moves the jobs on this class to another destination.
    print-test-page Prints the standard PostScript test page.

    help.cgi

    The help.cgi program handles all of the on-line help functions and is run for all direct accesses to the /help resource.

    jobs.cgi

    The jobs.cgi program handles all of the job functions and is run for all direct accesses to the /jobs resource. For most operations it uses the JOB_ID, OP, and WHICH_JOBS form variables to specify the action requested. Table 7 shows the supported OP values.

    Table 7: jobs.cgi OP Values
    OP Value Description
    cancel-job Cancels a job.
    hold-job Holds a job indefinitely.
    move-job Moves a job to another destination.
    release-job Releases a job for printing.
    restart-job Restarts/reprints a stopped, canceled, completed, or aborted print job.

    printers.cgi

    The printers.cgi program is responsible for listing printer information, including jobs destined for that printer. It is for all direct accesses to the /printers resource and supports the optional form variables OP and WHICH_JOBS. If no form variables are supplied then the CGI lists all printers or a specific printer and the active jobs on that printer. Table 8 shows the supported OP values.

    Table 8: printers.cgi OP Values
    OP Value Description
    clean-print-heads Clean the print heads.
    move-jobs Move all jobs to a different destination.
    print-self-test-page Print a printer self-test page.
    print-test-page Print a PostScript test page.
    cups-2.2.7/doc/es/index.html.in000664 000765 000024 00000005111 13255074424 016727 0ustar00msweetstaff000000 000000 Inicio - CUPS @CUPS_VERSION@@CUPS_REVISION@

    CUPS @CUPS_VERSION@

    CUPS es el sistema de impresión de código abierto basado en estándares desarrollado por Apple Inc. para macOS® y otros sistemas operativos tipo UNIX®.

    cups-2.2.7/doc/de/index.html.in000664 000765 000024 00000004612 13255074424 016715 0ustar00msweetstaff000000 000000 Home - CUPS @CUPS_VERSION@@CUPS_REVISION@

    CUPS @CUPS_VERSION@

    CUPS basiert auf Standards, Open Source Drucksystem entwickelt durch Apple Inc. für macOS® und andere UNIX®-artige Betriebssysteme.

    cups-2.2.7/desktop/cups-128.png000664 000765 000024 00000011430 13255074424 016613 0ustar00msweetstaff000000 000000 ‰PNG  IHDR€€Ã>aËsBIT|dˆ pHYs··šcS+tEXtSoftwarewww.inkscape.org›î<•IDATxœíy¼Tŕǿ‡EE4¸#~EŒ£Q³ FâJ4“E͸ÇOÔù`2qFÀQM$“1¸ebĉΠq4jŒ‘Œ{’qa ð¹„EQDàùãÔµï»t¿î®ªîÛý^ÿ>Ÿû¹}«k9uëÜSÛ9§DUi¡û¢GÞ´/Z ÐÍÑb€nŽts´ ›£WÞÔ ""À®ÀžÀÀÖ@?wO~oÞ.q­V©êƺ_CHWœŠH`$p°ÖèC­³þ˜ <“\ªÚ˜g®è "}€C€Ñî:èY§â—S`ˆÇTõÿêTn45ˆÈ§³“01Þ˜Ü Ü®ª+ó&¦šŽDd[à›XÃïŸ39a=pÆ jƒ¾è¦a×ðÿHã|í•âeàFàZU]—71i4<ˆÈVÀ8`<0 grBñ20NUÌ› Í"r:0Ø9gRbã~à|U}5oB’DäãÀMÀ±yÓRC¬¾LQÕ yÑp "§×ýó¦¥N˜œ¤ªÊ£ð†aÙ¸ 8!oZrÀ;À—Tõ÷õ.¸!@D¿öË›–±ø†ª>PÏBsg9øù ôÖc«y˱ÕÃþÀ¶î޻δlÎRÕÛêU`® "c@ß³x›‚-–¥®¥ªºªúú;bKËŸq×ÔvB Tõê–‘*M5— 8Û\Ñ\óaB½#ÓÝ[ü1°¢Fô+pI]Ú!§Æ‰õy1_X;ð0ºŽõè Z‰ïØõ9¶Ë1ðYL,Ç|YwCó`æT½†F®×ÀÎ]†ÜKZñ½ |5φ/RÇ1Àˆu|èÑô l ̉øbîvÌ»ÁKÔu `"°!R]/ê p]¤—±8=ïF®°ÎGc‹<¡uÞŒhZŽÔø»æÝ°UÖý“@[„º·ÛĦ¯æZÁ"² 0-BVOǨêkòªTõÏØÀ7TUl7à¼pŠ:¢æ A"2SÙ Á\`¤ª¾¤\ "€ÙÀà€l–ƒUu}¢¨±]€ˆAxã¿„}ùMÛøj+Ž_Å–ž}±pJŠ 5“"ÒxÍRàmrÕë4DälL=Ì/{k¤†«¥øaÿ6ptWj|U½ ¸5 ‹½€±‘È©pzú¯Û{f¡XŸÿ»xT5œáJ¶ë胧Uõà´ÔJ|ÿƘÖU@UW×d1BDAK­$À,àÓžÉW{ªê›Eòì ¼ )ÍZ§2~®{¼QUW‰È¹ØöTš™DdwŒAWªêM"28ÓýýàPàSØæÎµêôõDd;àÛ.Þ=ªú’gý:B¥Àuªú€ø AXÇ,xœßIÞÓ]œé™ðÁ©ôÃ\X›{^l—Š{Œ _àž÷O¥Ý ØxÏ=OL¥›æÂf½"½«Iïiv£.ýC@Ú?×Ç"Äa ¦PTu1fƒp‰ˆì."£€30ý…Ó4ž…ð5ØÎ¨ö‘¿ % *ˆÈö˜xõŸˆ/7o‰È!UÄ¿x ³&¾˜êÂ/s+{QàÆ¿õLÞJCl pÐÇ3í]ªúDDZÜ 0Õ­M”…›cŸ‰}GC°¥ÜŠ%IøM@Úà`4‘b>¸,-܆í#ìüs¥‰Tõà© ©ê¦¸¤ðÖ§û qÓñì™vŽªþ¥‚x•¼¨bqÎÅúA^YˆÈ>À©© I"²E%i«ª.Çö:|ðÙJ¥Z)Äd€Á_¥jÐÉÔ0;øšúýF6‘ª.ÀÄ÷VÀåå ‘žØŒc àaà]l[wR…tV ßn /6eõFAN}ú žÉ7wVwž»%"ÃUõ/"²pš _ªªo—H;Û˜RA9bîeVcRà+ÀO Eä>UU!½•b pgÚ¶ ’#ÍgGá?Ÿ}°Šr¶ÄT¾Ø,¡£ÚÕ驸m–”“°#SqK­ >pÏßrqzO»°ù@ŸØë'y]±º€ÁÈí•FTÛ…MË–acޱú×Tuz*úblçlm*ýÃÀÏ\øü{~“Fã1湸ťkÇ<’,ÀfgUSÁFF”¥`ùìëªk0ÅN/¯"²…ª~è“¶C°p&߉{} ÕøáˆÑì¿­\ÝÍ¡[舳€þv5‘¿ -3Ák² 4nwP2ñ6¨êû%òÛ ªï»9u? ]3*hÎA/lL!”q:©ª«SiÖ©êúly%h~×9²eï‹u™ £J¾3€ÿÆoô¿ž* 7±uùl>k1Irh*Þ%Ê\‚mæ$ñ®qá÷¹çSqGeÊ~Â…ŸL(W?—æ÷¨Jüg𴪣ªGb:[µûf&ÞÅ.ÞÑŽÎ×0fSAC‹Šý¡ª7©ê0U†™€¼•„¹ðrøºˆtæk Öø³0™±ªº7æ?‰R´U‹ÐA`5[¬Y„0ÀGPÛ>žïwè$Þ& ËÄKËdûf¾>AD*iÌj‘HëÝ*j¸}þ¯¸Çñ™ñȥ؊æ$7 Bhð‰€´! °ˆ|ûš÷¢àXêéL¼ãœ( Þ=Ú0—4a)¦ðClÜ12€Öb˜‰-*þ•‚J‚„éÚ§à#5ûDr}àîÛa]œ7BÀWñs¦ýã‹Ãؼ±gweÂÆI;I+sÐ8ø{àp9£zËb¶ò=ùÏÌýÜ}#ö®’°{3ñŽÀ§Þí|àÍÀ©Ì¬/¼¸û2ŽËNŸ0¿Â#°/ø*6MDÊÚ+¸ê9ØÈûJ´œ‹åÿöõ÷ EÒÓÖ¤KÛ‚‚4X‹©¥íNFA¨ðõÝ»:°ÜTõ»Ä[ ªÏ¸ßOŠÈqØ  ”Õ?PÕ?ˆÈ4lí?*8\‹™z}.Sî ™‹mõN‘Ý3]D¾l‹€¼$@(ø"Q¼Ø±Š4ØÏ–‚À~ë볇IŸ¯ˆÈE"ò_øoE(ä%|±ØÝw«4šQç?Õ†PÕg)b+èÖ)ŽÁ¤£€+€“1;e•Z*EÐn ˆ¬Ä f¨jvÎ^Iy{»`sî’ƒH9 cîç5åPDvÆf kUu–[Ç”äçŒD†c˱sJä¹@M+ ß ëV>TÕ§2iÀÄõU}5UÞ몺(okL`–ª®Mý×Ûoù[Ì<¯. … B dTÜb€AÈ40äøo%Ùø.Ïâó›Uõ1×ÇOÆæÔ7«êRévÅhë‚f‰ÈÀù.¯vlunªª>éúÞrfj?w÷Ó:‰sË7ך2.ucƒ‹SÿŸ—ÔÛÀ£ñWèYæá¶MWb’¤ƒB(¶˜(oöN¥½Ó…ÏÃ\¼IÁWñ[ttçvÖÅ•«Ç9‹J]ÇÉëû™z]šù¿¬íÞ²ï4€ `€ó,sf’ûÊ{`_µ¯¸8ƒ(X÷^èÂK•}„ {Ô=OvÏ=€¸°˜t<&u%ÌrY*l׬ÈÄO®Eà¥L½žÏ‹Bº€Rú÷•À×&~»oÂf0í"r& TDz©êë"r9fr‰ˆüÃwªêãîwr>A»ˆôpy]IÅ´‚f&‹H²X37žü\—OÃùH° ""©êÝÔv_l§r`•ï#`þ`†g™?Hå±³(:‰×[êUàUwØ%çßSy-Å,NÉæ•ŠŸt=Çg ð&™Ò×x'-­¦»ÿ&ºçŸƒa€tTUªæªØ$Sf/LägN¿3âHÅÍ«\P$¯+0I–ÍëL(vµa€¤;J”Sf»çƒ›Š\ÅVwRùήß–Û S»ÛTÇŒC2ñîwÿ-¤„W—×ç]^m.þ&2.i+`€eئNúúTè D›=(ð§lœfa€%ø1Àóe Æö¾¥ãè¾ð×ä…fÒ$J˜3+Ì«Ö+v€S5 ÐÖ íYø÷;‘>òb€ÐÍ ß Ï ð¯˜VÏ(LU+À~‚‚Å’b Ëä5>•×®\¼^%}}Ddd‘kP‘¸w¸{28¬Ô86>%À#øI€÷<Ë;3•ÇLd'ã_áö6ÊI€"y½›Éë—Eòò(¶hµÙ×MÁØô©bR¢^ T!ÄWô‘ÝUõåj©ê4™í¡Çìã‹©JݪîM¦0óòñ\…yÍîn+’×]˜†NV2,¢£'‘,^ÄÖ’8‰&Ô•Ø^ÿ]©ðlœš#t;øFÌjÖ'¨ê}Þ…·yÀö¸[È¡ °¸|”’h1@ t â*¥Å)ˆÈǰ 6ÌQÕ…> CàL]Ùçè×ÝD¤¿ª4u!Œ¢0=¬‡-vU .@ÍÜjNÙˆ¥ÑO Ï¢çU¥ð‚oÂ"ž HÛê Z>JQ¬#`,ƒBÆŸP~W/ÌÓÍ-¢*FÞ`ŒˆD³rirøvÞâ"0€šOÝͼsVˆ>,{»-ÜGà« ’/8„H“#ÑÐÌ8 mûúX 2í,rº3¾¶é%@OlS¤;ãËžéÞÒ”™šb1À“4êgi{WÇ"¤Ip1Vot¦…T1¢žê|,Æÿì €/«êq(j\ˆÈLЪÅzÌÍþ;¡tD•nMzjÙˆcJèAHM‚KðߎŸ£ñ¡6‡GßB˜RãPŠû÷ë2‘¡˜B_DS#Îj‡>ߘͥ]|upþ}ÿZ ZY«ããÿ#0ý¶À1ÎÆm4ˆÈÉ„-|ý\3g ÑsØ!c‘_¾Ó÷p¬ª~P.b3@DöÃ|ÿú¨Ð° qR6 j%¾GÁ©±/Fww…A¡ˆ À X|Ì™E´Æ‡2€[º2BVc€Ûݳ)áhŸmà‹W(œµ´;ø=qÐzÝ\/{¹Èï@0%¡õ?©&ôÕá…¿#‰Í˜è—w£VQ÷¾Ø†Mh½Ÿ!c¬Ú4 à^ÄäH  ˜1æáy7nuÞøc¤:\3:ëô2zb'{Åb‚v'VR`nÞ_T×;jJk_Ê ¸º¤4ÀΜHÁM]è5غK0€{A#)}¦_¨4Ø>džï‰9œˆõÕ«Ëëã5§=‡—u¦Ì“ ["½ødëóEL37f]Öû׃þš­v9›"‡$DÄ㘶ÌCªb¾ÜQmcë_b+±l¶Ä9ߢȅDdv,[­±sý²s¹,¹´‚%f·1B£MÁ¹S-pžª†(ÖT…Ü>’×çk¼MŠ!\ØÇ2WŸâIk‚«Tµ®º‘¹2€ˆ‰mwgÁMØr“µÎ ’;8eЩâ0§.„Ø2ïãyÞ,ª:;)Š¢cáIl´ŸKãCƒ0€ª®TÕ±#ÕƒÕŠ €Gk iW(¢ ÈBDvÄ”KÇæMK ° 8¥^Ó¼rh †ª®PÕã1¯Y!–Ç„ä<áÒøÐ  9óí¿wÞ´x`æ³øUvès,4ÀG+p_ÃÖÜGÓ Ò+……˜FÔíªº>obJ¡i ç‚ýàt`Ï|©é€õ˜ÒçO{5ÀyS½Ð” †;Ÿw4æhñP`ë:ÿÖà¿s׬FþÚ‹¡é wðÃg°mç}€=0ç !§œ&X‡MOçPhð¹jGÀ7-º”‚;¶mf´º ¦«×;i¤/¦Èñ>6E[éî~«ª÷i§ŒnÁ-”F£¤[¨1Z ÐÍÑb€nŽts´ ›ãÿÙ2¶{LåIEND®B`‚cups-2.2.7/desktop/cups-16.png000664 000765 000024 00000000767 13255074424 016542 0ustar00msweetstaff000000 000000 ‰PNG  IHDRóÿasBIT|dˆ pHYs77÷DÂtEXtSoftwarewww.inkscape.org›î<tIDAT8}Ó½jTQào›Á "ASHI!‚‚…/`!ê LŠø6IÀFðô|-,Ä"C,…hì¦H"ݳ'L®w&«2s;"nãTDDfæ°ÀlfæV汃óXˆ›8‡½Â%úDDgª°VûX‘[•ÉÉÏÐËñÆ÷µªw¼Êêá*~¢—™+ RDìb'3ç"âBÕÓøËõ¼ˆ)¼Ë̽a6ªÃ³M vnT&š6>®ZŸý‡<_%½i›ƒ lVÝò4VõÇúΨQ¾Ž¯•É[<Ѩl×ùÒÈ»P"¼À—Š–eß:î6ñ‡.´­ˆ8³ø–™m˜¿uk>–å"§=IEND®B`‚cups-2.2.7/desktop/cups-256.png000664 000765 000024 00000023643 13255074424 016626 0ustar00msweetstaff000000 000000 ‰PNG  IHDR\r¨fsBIT|dˆ pHYs#o#o5üûtEXtSoftwarewww.inkscape.org›î< IDATxœíw¸Uõ¿ßO¡UEªôÎW…°Ð,ˆˆ*¨ Š""¥ ¢Hн„ -"Ò{h¡%„õûcÏMæÌ©÷ÞsΚ9³ßç™çÞ3gϬuν{ÍÚ{¯½–ÌŒH$RN†x+‰Düˆ )1ÑD"%&€H¤ÄD‰”˜h"‘ @$Rb¢ˆDJL4‘H‰‰ )1ÑD"%f¨·‘| i^``Áä0`zr¼Û÷»ÅÍ#=…âß³÷4 XX%9V†3§s/Pã÷¹Z¼ý{ƒð6ð"ð|½ÃÌÞlÏ'ŠtŠh Š$K+:yúçHZïÐäà~à¾ä¸xØÌf¸j™M4AÒP`c` 0Xðô.3GáV`œ™=â«Ry‰ §$Oø:û`s‚«Þ‹¼ŒKŽÌìg}JC49BÒrÌéðc€%|5rã ààa¦³>=K4ÎHZØ ØØÐY<2…`þÜdf³œõé)¢pBÒÀ7…œÕ) “‹ Æà¶¸$9x¢è"’>ìJèøë:«St&'ç˜ÙÛÞÊ•hº€¤M.þŽÀüÎêô¯g§˜ÙsÞÊh:ˆ¤±À¯€¼u)3 ÃãÍì¿ÞÊ…h:€¤Í gUÊÊ ÀÁfv—·"y'€6"iàHà³ÞºD0àà§fö´³.¹%€6 iàÀ—9«©ä=à÷À¯Ìì5oeòF4ƒ@Ò²Àϯ’ØûH}¦¿N0³÷½•É Ñ €$LwÂ?TœÕ/÷{˜Ù}ފ䘤ŸHZ¸ 8Øù‹ÈÚÀ%"©ô^[ôZ$yêïü†Øñ{…;€¯–y7bôZ@Ò ÀÀIÄÎßKlÜ-é@I¥ì Ñh@òÔß8šbΕÀÎeËb @$-üå­K¤k< |ÞÌ÷V¤[DPIÿ–òÖ%Òu^¾bf×{+Ò J9îi„¤/fùcç/'‹WKÚß[‘n @ I‡óyëqe.àDIg&¹{–8`ví3=¼u‰äŽ‹€]ÌìoE:Aé €¤EKOzëÒf¯Ó€·2?Ó¿¿CH@ºHrŒHý¾¡Æ@™¼Ç ÝzÑ”Ú$›x® Ñè%Þ%¤ßîûù0Ñ̦öæÉòèp‚a¬NXS߈i7l°2rÈy„âžÊIXZ i}àz`ao]‰wWÿ&ÞxÞKIóŒÀF©cezc—ä¹Àž½dJi$­Nè,‹zë2@¦×WטÙ+Îú4DÒÂÀÀVÀî{…åàë½bJg’°Þ[€{ëÒOžþJèôÿ-ê?`2«¾ ð5B┹}5¿3³ƒ¼•h¥2’–&tþ‘Ϊô‡q„ì·—µÓ×CÒ`/` guúË®fv¾·ƒ¥4@Òâ·Uo]Z`:aÒéD3»ß[™n i#‚W°a‚1ï¼ üŸ™Ýí­È`(…HÆ 7ëxëÒ„ é«N7³)ÞÊx iààÀ<Îê4ã`ƒ¼ÏÁ4¢ç @òu-°™·. x8øE,rHæjŽ>ï­KÆ[µ~aOsHš¸Œ|wþñÀ:fö£Øùç`fOšÙ€­ 1 ye à8o%JOBöž±ÞJÔa2a"i”™=ä­L^1³k€µC‚¼îÕÿ®¤¼{*5éÙ!€¤m [zó€òp ð³²%Ÿ,’–Žö$×ÕÍlª·"ý¡' @’ÌãB˜jžx‰uæFoEŠŒ¤Oâó—öÖ%Ã9f¶—·ý¡ç @hrù÷ßìhf/x+Ò $1çc¼uɰu2l)½8p$ùëüÇ£bçofö2ðiB Æ<=Åδ·­ÒS€¤­ Éó2>|ØËÌ.ñV¤—‘´¡à¼Þº$œffßöV¢zÆHúaÜ¿¸·. LNôV¤ HE˜ô]Ð[‚G²¹™Ýì­H3zbTx¹€ütþû ÿ±ów‰dbu ‡ ŽñV¢zÂr÷Ê[‰„» ãý—½)fv!0ç%gU6–´½·Í(ü ™ ~Œ|l ¹øtÑÖ‚{ IV‚¼«8= ¬™çTb½àM>:ÿ­„˜ðØù1³; ÛŒ½Ÿn«JÇç–B{’6%t<ïYÿñÀ¶1–?_H:ø­³ÏkG.ÆNPX )æx þÿAÂlìü9ÃÌŽÎvV㣄ªÒ¹¤°€¤opVãU`#3{ÒYH$ÍO˜˜]ÙQWeÌì]GjRH@Òb„ˆ?Of_Ž?ߘÙ;„ùÏýú‹_q”_—Bà×øoôÙ?nê)Éò ÷cogù5)Ü ©Ü;_ãuª™íë(?ÒO’Mb·êx±¦™=à(¿Š"z¿ÀWïñ@)*ÇöIÊ®}ñ]ÌP(@ÒzÀÿU˜JHú𢣑A é\`7'ñSäi2°hÀOœå?vþÂs!¥· _v’]“€¤çŽ*\cfr”ifö,!Û°¹f élB¦7³gœäGÚH’°c¡Ôy·1Â0`²ƒì* áHZ¿qÀÁýíü’FIšœ9f*’´^k¶Î´¹$óþÄ$.¢Ñ}Î\sZæýkÈ])yomIÏ÷G¦¤15îwzóo­;˜Ù4ÀKRç‚Bà‡ø‘ÏÀþYæ–ÌÚ\3¬Æ5Ù,7#2ï¯DH9Öˆá™k²%Ñç«!w(€™ÝKȽ—•Y3Æ^Ò|„ï+{¯Ÿ7ѱۜB(ÈâÁ6Nr«È½Hjú}ÃIüL`oËÿ8iI£;xÿClí‚=%ÕÊÁp8°bæÜ~yqyû0³ç‹œÄo•$±q'÷8€ð„òàìeõ9URGjé™Ù{ÀT†Ó*‘9Û3“´ðýÌå7³ ;¡Wðš \ØÄIv¹6ÉFŽï8‰ŸN:* +–¸:‚™ý7ÍêÀA0;-ÛI† /¹MŽ™|¦;œÄçbkl_²?$nb‘ø±¤N–??¸+sîФçÀú™÷ö)@•ã9É öp’;P‚ª¤ÓM N—Ô‘ I8íÀ{©ÓóçRí-gf—vB6s…“Üu“Rg®äÖ$i¾½ {_€'WgSY4óSt0^Â̘ތÊü{/ßí”íÄÌî<<=;È­ ·Øý^£ù²Zžx0KŸæ˜dõ¤SKØYWošÙë”ßn®t’»¶“ÜÙäÙx¹ÿ'°jïï;S¯GÐÁšõf6‹P¡·Vž»sÌÌË­(—;É ’Ö>î z&p†ƒÜA‘tÈoQ9°›¤NÎIvʲL§æ :È TÎkt‹udVK@HáäÁ¥EÝígfw¢ÛÒœ&©íõò’Xú?R;!ë‚1* IB×ñ¢WäZÊ,w Éܲ‹“øv&mWô`îs•Z+?m“i~,×àýc$ì€ÜNâ1l°–ƒÜÙäÎ[âÇ»ÍCf6¾÷«úÚ,¦¡Ö›–=’d“K6[ÑÁ„mAÒVToi}"ózAଂ ¼æ-\çòh¼ÜÿSÛ|¿Ç¨~z/ßäš‘5Î=Ü¡I)òô¤Ö0ÚT7QÒ‡®š)À¦@¶îhr˜%ÉîüˆƒhW0´y“ÿŸqýð—vÞÐÌÞ•ô •®òÀ .Ë}žMžêýe?`°À®mÄqÀ2™s˜Ù+’öî¥rÇãÑ’®2³§Ú¬G§Ø‹ÚF¸“¸Î9åÊJ>ä ÷Â-ýÝA¥X7ÉI÷­$_=’†?#CõÞ‚[©³djf7S=Q¸a(P¤UR§9€OãSé·ã;ÖÌì/’."lCȘ³!ÍÙû„Nÿpðû$G=ÆQ¹ÄجÒÌO€…¨ü[ß–ióð·Ì¹¾9‘Ñ5Þ;¼É˜þ`Âæ ìÿ×úT†,GœÉMV`Iç;wYìt`1ÒÞIÅ€)föA³ö‘H'È… i!¨Û\çÑù’Nÿ’‡ìH¤¼Ìl@(¡Ümа"éy1^ËEÛ¶‰´•¼Ì?šÙËr#‘Üàn’ñÿº¢oq‰ä w@زê±':»y%)yXðxúC‡=€dcSÚ} o´R/> ”j5N¢é=“eÈlÞÀŠë$-Lei²™Í’¥& .Ò}†™½–¼·80¨Š8}†’‰óW¾e³WUZù|µ´•Æ×›Äeô]7 XXXx†PMé¾\5ÍÌõ~CíæñB>×:-êò0‘°"ñ]`®:÷›ÞÏ÷añ9À uî7²ÆuûdÚ\–y°I“Ï}xæšñ©÷&öo—º×i™÷¦·ðùƵðw›š¹f»&í?AØô5£ŽÎïg#½ûZ­#C€²ÿ‡†AÛ'·¶¡¸Ç`UBò’²›vŠuòà9„Q’Ú’lVÒI‡R‰mHýâµC¯IÚ¯²ÛI4ùccàÚ¤,Z;˜8YÒzmºßZÀmº—ÇJTÌIRƒñzB1”V‡4s'Júâ`d·WK.iiªÇiÝàv™’ŽÜz=?aOÀ—©¼ûX†ß-À‘æ6àâ̹yÛoGQ™±w(!I[2?—t‘…ÝŽýa•Ÿ³õ©œ/™Fõ~…v±p á©¥n"äõ4fv½¤ó˜ã !ÄllÅHlÒ—2½o™u´¤ÝÍìÜ®ÍX™ TEùIú0a® W˜Yv§ëx€l’Éná9ø:Õ©µkñ,ð«&m– Úhd1Bz®­½y¿O¨ß°Hòz}BÇ:±2:‚™=¤L?:uúXIW$“±È†v¿m¡0k–á„ ¬FL¦z·ëxÎx€Éf6ÕAn¸تM+" >Ù†{ÍÆBlûÁ™Ó¿Lâ:ŠÀqÀý©×‹bšñXæõð6l¹P6à9™Í0`ahr#pB‹“uµ–%¤_1unyàIë˜ÙÓƒWw6gžrŸH^/De¾¿î9ÁÌf&áÑ·0gƒÕ^’šeb®5|\–êZo×dέIˆ!Èe3Þ¥¿÷!,¥ii7` î7³Zeƾ/ià¼Ô¹áÀ7€C §&ffI'º›9s9;ÐÞXƒŽaf·I:“9…NE˜lÔ'j€/¿ÌÜû92Y®$M ‡ lCoð†™MÎéü͸ê%Ä1íbfRí:oÐn9äÇTNâ­FƒzŠfö"Õ±ßIâê"iÂ'¹¯wQÖdàˆÌ¹Á$8’Ê¿W+E6Lå²ÜŒÔïS©Ö/{Ï {R¯'4‘waÉ1ótS-C'Jß»•¹šË3í²±µ>_]ÅÌfHÚø\æ­ìúšiÀî’Ž#$];9V “ÿW›Ù’ÎeÎ.Í\d¥r)*i|²ò ksHl$Rh¼†À¬Øù#‘J¼ €Gütfy#‘RP&`ºƒÌH$×D )1шDJL™ @ô"‘ ^q¥$i¢¶'D‰­HX·ž”ךYU¦"IkP7q¢™ÕŠ@K_70–Êb¢˜Ùu5Ú.C(`±"aýzFJ¯«Í,»§Ió›7Ò¡¦šÙ„ä~› 7i_ÍìÞä>ÀÑuÚÝm©â¡µH °ÖËT=ÎÌfÔy¯¸x# ìŸîvA‡œ>ër„ü~Š{Î"ǹvÓä½tÛG€¹›ÈÜ¿†ŒS3mV$­WÔ²O¯+€Oe®Ù†¿Ç„Ôý& â>¦î³TƒvÇ´ð·jT¨v)ÿŸŽÿ:uŠß9€Ç>粄ü~­ê8ø\æg×hwP™‹"Óí_IµYx¡z½OHSVd0‰$ð­Áw÷Xƒë{ÒxÍÔJ¤Øi&mh7ɶÐk©Þ€ó*ðàAB¹®4sfÒlÿˆêæÃ’!E-Ž¢Úþ‘…½ï}É)®²×OIôzˆê Ó¡Àß%­UGfX–àQÕDÒš„¼ÿ¥ÂkÀcF¾«ØX%õÚ®ùi–äüKŒÄ„Í"}ÌOØnº€™½"éPà÷©6 ¿vO ”´!ÕE/o§29È6Tæ ü€°ö,KÒzKüÊb öýxƒÊ¬ºi ò»¾‡êüxиJѳÀù ÞOso‹ív¤~ÑÑ"—98n¡òm·‡otù3ž”‘cƒ¶Ê´}<óþடéÿRmDµ+=X's¯32m®j ×™¶´ð¹³Å5ë1M]“Õ{ü¿óFCž†Ô¹6[œ5:H<€¬»üFƒ¶3gæ}0—¤Ù[¦-¤øÚ—ð˜ædI}Ã=3ïÿÁÌîÉœŒ^ó¬ T7?BéIy°5S§J³g¤L` •`Ù×ÛHÚ_RU"3»ÒÌF¦Žå-S¤ÂÂ’ÙŸ2—® ì¸ì¿É¼÷pX z}AÒ·kå´3³K2z­`a l‘¸6ózÇm²îÿÕÒ%w”Éh€å Jv¬9ŒP9ç%I‘´›¤þ¦‰þ1Õ‚G'P]%è 3«õtÏê5/¡zídI’´‹¤¥ú©W»*iáŽVRœeS•}1‰“¨8×äšÞÅcÜìL÷ç X¨‹Ÿq(p] :=B¨0» M–©’ûîÛÂ=ÿÝàúa„¤–Íîñaâq«~~îvÌ´zŒÏܧÖÀò„ Çô¹±©k–©ñ÷XµÆ}â@ñŠËh´Y¿±0ÓÿešWå]…P0äJàIc›´?0!X™Àwè5ƒàòf3ÛfY`l®‘t—¤Í›´Ï+FÈl”&= ȺÿÙ¶=MÙ À’ÝffSÍl,°-0žê´UYÖ®ô™÷œEèàÙ Á>N6³†å¹ÌìU3Û‚š|3a)°ëÒ^73Ny%»¤¸ƒ¤t5£4åqÿ)WtÙôafW:öàÓ„±TÇùCpÑ/‘´†Õ‰ù7³ ’ΦºÒð‹ÀÏû¡×eÀeI–æmRzÕš›˜ø—¤UÌìÙVe §Ë•ÍhK03»GÒÃÌ)ï=‚PªýÌ©ma¿À£’Ví—¶ÆËt¢V+¸€>,Ìì_HZ›àŽHešôyò”·;†jpœ `–ÞÌ^%$æük¢×zÀN„À¥ôêÀ|öÇþÊè'ϘYvUc°\@eÀÕŽ<$Ó¦TDÐ$}‚àö÷1ÃÌ~–mgaÛ½ÉÓü*ëÒmIcPkwã[MôÚ‚Ê¢•ï˜Ù/²íÌì.à®”^i#°%7 k¶#ìièÀ¿uS¡<àe¼JtuËXˆL 9Ig™Ù¤ZÍìqIÿvI^ºz-RC¯Ó­Î6Y3{DÒTŽ“;¡WÇI¾ã;˜Sa8•[šo³PK¡TxM¾Bó ±NÐ-ðßç²îz–‘™×­äýï/íЫÖ=ŠB£ý¥sÿÁÉ0³Y’^¤ö$X'éŠ0³)’&R¹»ìPI'šÙì’&lºÙ,s›z›V£×s’ž¥ò{ÿ¥$€SÌìÍ”^#€Ã /Òt£žÃHI‡·Øvª™ÐbÛ‹€ã¨~ð}@{.^ nø@»øù6%Ìudux›°ñäBå˜Z 9n†6¹ÿÈ×íÓ‚^›æ²×¾EØYw!Îàým®£ÎfšÔý»dÀÓ©ûÔ ™‘u}6×dÚÄ@ .ð¼ƒÌe›7ifv;ðUª×ëç'l<MxºÎyÿe`GK¶ w@¯›€oÔxkBÂhºÖ;|ØÙBB‘©5 (¥û¾åÁ_p¹ ¤®Mb™ÙE„I§‹ižå-Âû5̬£ÆÑÌÎ6.mA¯7 ³çk›Ù”NêÕ%.¡rå=Â÷PJ¼VÀÇ€zÛ5Ùfv'ðI+[Òq­@KžD(1ý$p]?;ØË„H¾4Ù­¿ôú!"neÂÒÞò‰^à 8O&Ç5–dj‘]©ôjžjᚃxÅèwR¿¿Nõwòrú…™M•´5s§Zõ¦©çjܧ›…e»†KqPI{v½¯™ê 7Ée›€Ê4]‘H©)ÛD‰Ì&z‘H‰q›4X´Ëbg ˜Y¬)=žÀ2‡PÂüï‘H-ÊhÖoÞ$é}<ãÀÏlJ¨‹‰T!igBg7yÅÌvoÞ¬½”ÙD"õMH|ÒMní²< ¼C€5 Xà"Ò=VrÙ°ä{§p5¶Åz,aNbˆH$‹‡xÜA¦»Ð0ƒm‰Ã€H’æÃ'ëQù<€„8É+ ­v›Òz^`%©p"‘î?DÐuF«;ÉŽä0Õ2Å`»E^ €WXî¶Í›DJFi&!ÀÌÞ£;‰&kñy'¹‘üRš%@ÈH¸ÑIî&’²eµ#åÆÃ<ê ˆ`qI4Œ.&ŽMáVk!/à?Tævë&qécy|úÄ2œ3{Ÿ ߃-%ÍÛ¼Y¤¬Ö¼IÛyÚÌ^nÞ¬3äÂ$x æ'”ÄŽDF9Èt{úC4}dS@GÊÉ™®À5%XICוu»ÍÛÀ‡ÍlšƒìH´$>U«?if^ÃßüxI)¬›Ä/@(h)/£dÎ$Ôat#7 aœ£ìo9ÊŽøãáþ?`f^«_@þ À%޲ב´¡£üˆ/Á®ãÈ™0³§€ÛUˆ^@ ‘´°œƒhOÈ™Hø«£ì$}ÈQ~ć]dήq[A ÀEÀûN²ãd`É4ØÑAô­IJàtGù‘6"iKà3Nâsõô‡3{ÿ±’¾ê¬Cd$žÇ9‰ŸüÅIv]ro~ xG,+iqg"ƒã›ÀÇdÿÓ̦8É®K! €™=üÓYEuˆ IÃ_8ªp¦£ìºÂ$í­°³¤XH¤˜xypO×;ÉnHa €™Msé§IDATnòÖ8WÒªÞJDZGÒ(`GNµïÍ_Ì,.æI{vT!×O(˜`f“€£¼õHØCÒO¼•ˆT“ÌÓœâ¬F®ŸþP@ )æù ‡]v5³ ¼‰’*?·vtz‘û§?Ð0³éøíåÎ"ÂÊÀ×¼‰€¤ù ûí=;?àéõút%°· üÀÌŽ÷V¤¬$¡¾—ŸsV¥O(¨â{„ë< à8IGx+RbN¿ó^„Î7f68Ö[ ?“t¢$y+R8Ø×[à?ø'²i™B`ö˜ïN`5o]2œìmfž[™{žÄí? ÈÃrìL`}3»Ï[‘V)´TWݘî­K†=›$-ë­H¯"iàïä£óW¤Î=àô!iòéz½|ÕÌr“ ¶´ p>e½kñðqïrßý¥ð@fvái7Fÿ’ô[IC½•é$­N(­—ΰoÑ:?ô³÷|ߌtV¥·;™Ù³ÞŠI»<½¼uIq¡™íì­Ä@èÀÌÞvÂ7‡`#6î–äU®°HšWÒ„´Zyêü“¼•(=eÌì?øe}m…Eó$ý[ÒZÞÊIë)½òÄL`G3{É[‘Òs áào%šðIà.I''{Ö#$}HÒ‰Àµ½õ©ÁOÌ,7U~BOͤ‘´p °Š·.-088+©ˆTz$íDÈàûao]êp‰™}Ñ[‰ÁÒ³ Yƒ¿ß„ýáNà—Àåe5’Ö#dÎÓ –Ç€ ÍìMoEKOI«7ÆÞEáIÂ^ö³“‰ÍžGÒÆÀaÀg½uiÂ;„tpx+ÒzÞHÚ,è­K?y‹0ë}r’½çôIBÇßÒ[—ÙÍÌÎóV¢]”ÂH\ 1Ÿ×J”]W”fõH ¬| Ø ¿"ágföKo%ÚIi €¤/QìÕ„ÉÍ«€«ÌìAg}Z" ÒÚž§1(ZTäoÍìGÞJ´›RIß §UZȳ$ƸÁ̦9ëÌNÛ¶ð Â’ç(`W¥ÎÌì;ÞJt‚ÒIòôÚž}&²&? <Ò÷{'k$s–'¤Kß„Ðá7 ˜Ã­,öÊkaÁRJ iGžýyUéSÆà àM`a’±ÞO&MHŽS?—$ì·X>9Š´ÂÒ.v6³¼é¥5’6#]Ì[—Hî¸Ø¡×ºy2lИÙmÀ¦„ÀŽH¤ó/õz燒3{œ`nöÖ%’ Ž0³]Íì=oEºA©‡i’ôRgq«n9yøz/ù´Bé=€>‹¿p¤·.‘®3[¶ÎѨ‰¤m ±Kyëé8Ÿ5³'¼ñ z5Hx®\è­K¤£\lZÖÎÑÔÅÌ^Kò¼}…à"Fz‡7ãýmÍìuoe<‰C€HªÍž|Þ[—È ¹øFL̈@ ˜ÙKföB±RìÏïA¦ß2³OÇÎ?‡èôIN#ÿ‰+"s|ÍÌ&y+’7¢ÐOÌì93Û–°»m‚·>‘†>—DÐ$ vŽ–sV§Ì¼ü8ÞÌÞöV¦DÐF$ ¾ üXÜY21Dõ(3{Í[™" @Hdì ,ã¬N/óðGà 3{Ñ[™" @I†c½€í(Oò‘N2‹þìtàÊ^NÖÑ ¢è’v&ƒ Õ)"/vkžifÏx+Ó+Dà€¤5†`w` guòÌÂÓþBµ¤™ÎúôÑ8"i(°5¡(ÆÀšô^¢Òþra“ÎåÀe-‘Ö-¢È’FŸ"ƒÍµèý`­·€þJ3{ÞYŸR @ŽIʆŠ` ¶ ”È.²A˜Ü Üü/ùùH|Êû @´°RêX1õûGÉÏða:a‰n•~b¯æ×/*ÑôI%ž¨4K2'¯­cîoÿðnrLO~N&T%z.ùÙw1²13’œœô´¸wòyŸ×yÞ)èÀ…ó<÷ÞÿùŸ{îMáÿ”Ù3Ù”Rš‹‹1ŒÅ8„1ŒGÄdO`Ñj ›ð:Ž#Æ_…È˜× ·¥ñ°·‹Ñn㜎Èt†ïbà >Áø¿vY÷!{&€YØÖ¸#H {V` ŽÕö¼†Ù½¸·r÷´LÙRŒ×öoiM«j^ü m ¶`,ÃŒI,lKà…û;0¯»—caѯÆ:\„%5œ5œ;ë¶R½¥”–æg•_?•Ü®ÀµÅ³ –´ô—B»·FÄÉ V?öc~ùõvD¬¯ÚkjD+Æáш8žR:ˆÕ’äÜT.•{Ã~›Ú)¥»qYùu"¥Ô'TÕÃ_­üß1§2wÜùÎCŸö¥%:çbQ/u¸¤¢ïŠˆ£%œâ>|/×C§…Ðr¹'œ“RZwÊþeø_cÆ"b[ÕØ¬«*úxE(ž/(Ï—ï‚rQÞ†rü¬ÁÍeîÙÁé RZ W÷”ì­èx1"îÇxL.ÀýxNŽÌ¤\Çp[ñ ž—§¹[ËÿZÇæöÚüêŠçƒE_S€WË©X^ô%˜#§h m ô×¾*ÑY)ßr;ä³ß'§h¨DdTnÓ›ä–OÄ:<ìT]tH½ÆkßË+úÞ“óú”ê°O~|ƒwå+ù°|,Ë]´«Ô#ð£œÇ©>°¬2w €>#Wö+òCäR¹s.(Æ^–Só–S=áP7Mp¬x;#âŠ3y0¤”Öʧ`JžŒˆ/ÿùjhDo:U„G1Ôks©á=¢³°‡«óM}`¬¢ÊÑ¿‘k*ú®ˆ8Ð1ÛÀx¤ÆxŸ.‰ÞÏÓy­?Ñö:þ¼Fâ–ØZÃmK`´¶ñ0Ö÷h|'+_¡¿ðRÄ$îjiüz¹EOí=Ž5kϲH¾ÅêÒm¸ªaý,ùø>ݰgsW;Óx²;CnZïãU| Ù¦uÛÑ7#…ÄŸ] t»qÝ´ø=ÕÊB¤)-SãH‰ÆfœÝ÷´VÜFRJçË‹aù*þ»#âçž±fBà¿”¿XòrŠ#‰TIEND®B`‚cups-2.2.7/desktop/cups-512.png000664 000765 000024 00000051045 13255074424 016616 0ustar00msweetstaff000000 000000 ‰PNG  IHDRôxÔúsBIT|dˆ pHYsFÞFÞŽ&2[tEXtSoftwarewww.inkscape.org›î< IDATxœìÝyÜmcÝÇñÏ×pÌ’1óT(’¡$i@dJŠÒDI¤YéI“”¦'E…<¥T(J!CÊe¢B™§Ì2¿çµÇ9÷½×ÚÓºÖÞ×÷ýzí×yÕ}Ýk}ísŸ{ýö5*"033³¼Ì‘:€™™™5Ï€™™Y†\˜™™eÈ€™™Y†\˜™™eÈ€™™Y†\˜™™eÈ€™™Y†\˜™™eÈ€™™Y†\˜™™eÈ€™™Y†\˜™™eÈ€™™Y†\˜™™eÈ€™™Y†\˜™™eÈ€™™Y†\˜™™eÈ€™™Y†\˜™™eÈ€™™Y†\˜™™eÈ€™™Y†æJÀÌš%IÀ"À³€)³¼æîð¿ç-ÿìôšÑÔ—™uGþ÷i6Ú$-¬, , ,6ËŸ³þ‹s6-( …Y‹…»€[€[Ë×-3ýy[DLk ›Yö\˜µœ¤Å(ð³¾V*ÿ\4Y¸á¸‹Ù ƒ™ÿ¼)"îLÏl<¸0k²[~%à…ÀÚåŸkR<àL—¬µî.Ÿåõw÷˜ÕçÀ¬a’á™úµµ€…RæW—1Sa7'MeÖR.̆HÒ\ÀzÀ+€õ哆ÊϽ<]\V¾.ˆÇ“¦2KÌ€Ù•ò^Fñ°ßؘ?i(›ÈÀŸ€?gRþehYq`ÖI‹¯¢xØ¿X‡ffØÛ`ÝL¥(þÿHÇlø\˜uIÒºÀ6åk¼¡Ö8º¢g`FApmâ ,—8ŽY“Î>ç¥bãÀµ^¹[ßîÀ'€¥Ç1KéÀ¾>ÐÁ€µVùàß ø°dâ8fmñð=`ÿˆ¸'u].¬uÊYýトÞ5›Ì}À—)ö˜–:ŒÖ*’6¾ ¬“:‹Ùˆ¸b%ÌÑá_èÖÖ ’Ö¾N±žß̺w1ðñˆ˜š:ˆ†9R°¼IZ\Ò!ÀßðÃ߬ëgJúmyð•YGî°$$Í|ˆ¢ëòY‰ã˜›'€#(V øÐ!› kœ¤WQìt¶zê,fcîVà}qrê Ö>°ÆHz¶¤#€3ñÃ߬ Ë'Iú¡$÷´Ù3¸À!é­x=¿Y7»FÄi©ƒX;¸À†JÒJ’N~Žþf)-œ*épI ¥cé¹°¡4§¤QqºeêñPê0Ö<÷ØÀ¨°7p!~ø›µ€——+s,3î°ôàH൉£˜Y÷8˜b߀‡S‡±f¸°¾IÚø?`ñÔY̬/¶‹ˆëS±áó€õLÒü’~ƒþfãà…À’^‘:ˆ Ÿ 뉤õK€ÝSg1³Zøƒ¤]S±ár`]“ôQà\¼›ŸÙ¸šø¤ƒ$Í™:Œ ‡çXm’æ£8`äm©³˜YcNvŠˆûR±Ár`µHZ ø5°NÚ$f–ÀÕÀë"âêÔAlp<`•$m \„þf¹Z 8_Òæ©ƒØà¸°ŽÊñþÓÅRg1³¤N)7û²1à!›P9Þÿàí©³˜YëüØ3"¦§b½s`³‘´p°nê,fÖZ¢˜ðßÔA¬7.ì$­üX:u3k½ó€×ºMž`O‘ôŠªÞ3«cCàTI ¥bÝs`HzÅ'ÿC¶‰LOÄZçe“Lĺã!CÒ'¯PjããAà¶òÏ&øs¢ÿo¯Í<Ù«Ün^`¾Î, ,CÑ£4óŸKâãè`ˈx(u«Ç@Æ$Í|Ø+uëÉ4àúòuÝL¯ëë"â®TÁ:) ˆ¥( ‚¥å€çSDóB|°Ô(û°µ‹€Ñà S’æ~¼1u«åfàÒY^ׯþ–´O/ÖÖ¤èU°ö› l§b¹È¤g'§Îbº8ø+åÃ>"îN)­²·jàÅÀ«M(v§³v:“¢x$u›œ €ÌHZ˜bg¿—¦ÎbO¹8‹â“ÓYq]Ò4#BÒ2<] ¼xnÊ<6›?Pìà" ¥\d¤|øŸF±tÇÒ¹ 8•§ø7¤3$-ÇÓÁæÀòIÀEÀ£©ƒØì\d¢\§{Å’kÞuÀ¯Ê×¹ã8vß&’DÑËõfàM -Ó×»hðÃ?™+)úqiê0¹*‹—Q;˦M”¥_;¸ðmc®|øŸ l”:K&n~å³ÓÛ§,6âéb`™´‰²ò¹ˆøbêö4c¬Ü™ëTà婳Œ¹'€“#€ßEĉóX åÊ‚-€½-ñFXÃÀöñÛÔA¬à`L•ÿSðR¿aºø?àGqkê0Ö;I«ÞxKÛáù/ðÒˆøgê æ`,Iš‹bÿkSgSg_N÷˜æx)Wʼ‡bwÌUÇWWDÄý©ƒäÎÀ’ôc`—Ô9ÆLPU_ŽˆóR‡±á*‡¶¡xMâ8ãèd`»ˆx2uœù@Ž1#éËøá?HO?^Ûùះˆx2"NŒˆÍu(NÊ´ÁÙð„ÀÄÜ0F$í ’:ǘxø!ðÕˆøwê0–ž¤Wâ5ƒÀ›"âøÔArå`LHÚøîÕ„?ˆˆËS±ö‘´ðeŠЬ?/‹ˆ+RÉ‘ €1P~29â,vëÝÀ>À=¹Ï:)çì |X1qœQ÷oà%qoê ¹q0â$­ œ,’:Ë{8 øÿ²nHšØø`ñÄqFÙéÀÖÞC£Y.F˜¤çàCOúq!EwÿE©ƒØè’´(ð¿À;Sga_ˆ}R‡È‰ €U®õÿðÊÔYFÔ½À¾À¼ÉEÒæ½I+§Î2¢¶ŒˆÓR‡È…'Œ®¯á‡/‚bvÿjq˜þ6Hñ{`-à›+I¬;‡—ç—XÜ0‚$í“:ǺŒ¢»ÿ/©ƒØø“ôbŠó!^”:ˈù~D| uˆ¸1夿óRg!û‡x’‘5©ªûðY¼J§®6ˆ©©ƒŒ;#¤Ü§üB`µÔYFÈÀŽqUê –/IÏ£èµ[/u–ño`íˆx8uqæ9£åHüðïÆO)NóÃß’Šˆk(v<1p@\´ˆ¤ù¿âÝþ&2b²ßq©ƒ˜5AÒ‚Ào€MSgi™¿R øáÕ'´Ëþøá?‘Ç(6÷ñÃß²[¿M¥eÖvJb¸ %Êu®à fõ(ð†ˆ85u³Ê¼9u–ùðüˆðþ }p@ ”³þ€þ³z˜bs?ü-[åCnàìÔYZä¹À®©CŒ:÷´€¤ßL£e¶‰ÿÒ3$-œ‹—Îpð\Ü;÷$&iEà‹©s´ÌýÀ~ø›=-"î¶¼Ýuai`ïÔ!F™{“ô;`«Ô9ZäЇÿÅ©ƒ˜µ‘¤WPl4%u–¸X%"îMd¹ !IoÁÿ™Ý lꇿÙäÊž±÷¤ÎÑ‹ŸLbT¹ ‘r£K¥ÎÒÿ6‹ˆ+S1’>|>uŽx„b.À­©ƒŒ÷¤óUüðŸáQàu~ø›Õ_ŽJ£æ>›:Ä(r@’Ö.ÂØ o÷ö¾fÝ“4…bëðõSgIìqàqMê £Ä 4¾…ßûôÃ߬7ñðŠnðœÍE±“ªuÁ= “ôFàøÔ9ZâD`ûˆx2u³Q&éƒÀwRçHìI`åòDE«ÁŸB$iàë©s´Ä•]ÿ~ø›õïà÷©C$6Þ°+.šõ!`•Ô!Zàn`»ˆx u³qPžŒ÷n ÷õðï)·V·\4DÒ’Àÿ¤ÎÑoŠˆkS1'q °Gê‰- l›:ĨpМý…S‡hEÄ™©C˜£ˆ8È}Rí Ol€¤µKði‡EÄûS‡0g’.–O%‘')¶¾!u¶s@3¾‰þgLÂlÜEÄ}óråÉ€5¹`È$mü9uŽÄ®6ˆˆ»R1Ë…¤_;¦Î‘ÈmÀ ñxê mæ€áÛ7u€Ä¤˜ñY³> <–:D"K¯K¢í\ ‘¤Rœß³}"âŠÔ!ÌrS®´98uŽ„Þ—:@Ûy`ˆ$ý x[ê lþ!3K¢œø/`±ÔYxX5"®O¤­Ü0$’VvJ#¡‡÷úáo–N9!ð‹©s$2°[êmæ`xö!ï™ÿŸ‰ˆ§af|¸:uˆDÞ#i®Ô!ÚÊÀHzð®Ô9:øvêf1âIŽžl—:D[¹Žó¤‘È4à=>äǬ="â7srräÉ€“ð$À+'ÝÜ,”:K"ÿ_NÂÌžIÒúÀ…€RgiØt`1>6;÷ Þ^äûð¿øZêf6»ˆ¸85uŽæ^“:D¹`€$ÍÜ,ž:KÓ—DÄeþ‘¤}wV4;$"éó>»Ÿ®hö눘t³'I{Q…\ïè6ß,÷Y8¥¢Ùžñ‡×ø °A·×t8ðÊ1/Œˆk´›,ß«Ck4ýUDTý½eIÒÀi©s$ðƒˆðPÀ,<;r°v%χ?ÀM<üKK«W´Äßâ5î³tU×X]Òo#ⵓÍnž÷©ê™Z¡ÇkH±ßÅß»º¤"âøŠv³‘4/p8𼊦wßêöú¹ˆˆÓ%] ¬™:KöL <0 ’æ>ž:G"W_JbÄ$éY©Cô¢Üqî5›[Ò‚=Üf?ªþˆˆ;{¸~Nr\¡³¼¤ÜŠžJ.çäyüæ³þsÝs|P–FvòdD|ø}¦ËÒåÆ4å–Úu Œc#â¸n®©Ÿw§‘€{fá`$ÍAqðFŽŠˆ S‡ï—ôÒÔ!úð^àþíö–ô¢:,ÿmA1‘«“ÿ{Ö¹fî"âà°Ô9Ø*u€¶q0o zìtÝ‹»þià°Qݹ,"n>\£éœÀ¡’ê,Gۋꉉïˆ?Õöê»wsò IUóT²â`0r=ò÷«å^ã68/¢ÞC´•"âHàÄM7¤bƒI+Ô¸ÖO#â„í¬·ýL:ES€MS‡h}’´9°~ê ÜFÞGÓç%­˜:DÞÜS£ÝW$-Ùáëߪ& Þì]7˜=ÃA©$àa€™¸è_®Ÿþ¿§1¦úÚà ¥ˆ¸zãñϾ1Ñ$ílSã»EĽ]ijRD\ü9uކ¹˜‰ €>HZØ$uŽ®~:ĘÛVÒS‡èUDü²FÓË ~ž"éÙÔ[ªvdDœÜC<{ÚORhØJ’rœ¯5!ýÙ%u€D>Wž0fÃõI£¼­ô(fçWùž¤)3ýïoPlöÔÉÍŒð\‰9xŸr-I›ï©ñ=»FD%‡ÖA¹râŒÔ9æ ä w›çÆ?ŸñQ¿ÚSÒ‹S‡èUy íQ5š~FÒ ¨·>ý‘ã~öÃrLê {¥¤ùR‡h½«:Œf_þB·Á à‘_Ÿ±7Àœ 冽[*ÚÌü…êí~o>6ˆPö”€i©C4h^àÕ©C´ €”{™ì­>äºâa˜>WÑf=àƒ dŠr¯ˆ÷ÖhZuBïõ¹îƒU¥ävLðKRh½Ùê“ÏÆÍqfêcê[Àåmö—´\a†¡ì²?¼ÏËÚé8cëKnÃë¤Ð.z“ã쟯>$ñ8Åd¹Ns+dô7^úp}ß{°Ïà¢Ø,NrÚ×Ã.ºVnOšÛÚÿ_ùÀŸáŠˆó¨ž·½¤×7‘g"âAàÝ]ù]}+ðîòûm"â!à¤Ô9´ò¨¿=H.º·3Pç“qòùÔ2±/p{E›ƒË9(#)"¦ßéòÛŽˆ³†Çž)·a€Z'RŽ3ÝË­ûÿ¬ˆø[ê9('cUmn³<ðÅâ Ó¾T¯ ˜áF<ù´)§ÐyEʸÉ~À@$m¬–:Gþ—:@N"âXªgdï-iÝ&ò ɺÀÒ5Û>XeˆY¬ç¥ÎÑ ©Œ˜Ü>ýßü:uˆ íIçObsRì 0rÿ~Ë X~Dýß=S€#%Í5¼T6“©©4È@ê£BÒ<À[RçhØÞó¿yq-°E³—PïĽ¶ùÝ÷¢­|jYlvSShК’æN"%õmKq|i.ž Þ¶¬6ß®¬hó%IË4f$mDïøì'é…ƒÌc:Ÿ|æL¡8‡"[.êËmëß#âæÔ!rUö¼ìNç%s ÓýŒú$zèúŸ•‡Óð<€l¸¨AÒäw‚T›'ÿu»Ž|˜†–%"þ QÑlIÛ+ÃõÒõ?«õðŠ€&LM AY/tPÏÛ€œ>y\C»­³ü¢¸Ï’5Ú {_úOwT´9„oMÝg×ÿ¬ö“´ö€®e›š:@ƒÜ`•r›ýÿýˆhÓ§ìYÝS£ÍspŸj´¹{÷™TDÜ |´¢ÙŠTOL¢‹®ÿ;€ƒj\rnŠ¡€¬'o YNó\Øä$­EÑõ˜‹G€#S‡¨Pç¡[wy'u €:ÅH_"âgT÷È´uˆªn×ÿÞ½¯Ñv]<04™ÍXTÒò©C¤â ÚÛShØÑå§Î6»«F›u$-Üç}V®ÑæÎ>ïQ×À£ Ýk ºèúÿmD»Qo^Åg$e=~;dSShP¶½9k÷jëÔöýÔj¸â!ÑéL†)Vnôt‚ž¤Í:Çï6òI)"þ%éZÚÕ?«.ºþÿ |`Æÿˆˆ¿H:”¢àédÆPÀÞ«b(N6J¢!ó¦Š €$- ä4á舸(uˆ*q—¤Ë©žÁ»§¤CzœÏðÙm®‹ˆë{¸v¯¾F1!uÖ.×íúß'"f=àSÀvÀ²ß»ð?ø°ª‹ˆ‹-Sç°áò@g[¤а6/ý›Õ™5Ú¬üªÛ¡Iï6®ÑôÝ\·_eùûi×2ÈÙtÑõpø¬ÿgDüØ«æí>-)Û.\³~¸è쵩4èà—©Ctág5Ûm\ iͪ†’V’ô[ਚ×þIÍv¢Å“4»èúØm²Þ™ˆ8zçPÌ üØ«̺ç!€I”­lž:Gƒ~¥QWD\$éd`›ÍW®t;ÅöºW”N§˜è·JùçzÀ|5#œ^>ŒSøð:`ñD÷ï¤n×ÿç"⚊6{›QìxØÉÚÀg€ÏÕ¸¯™•\Ln=Úù vXFñÔ¿ÏS¯˜á9åk³>ïÀ~}^£÷›GÜ-éã´¬' ‹®ÿK€oV5Šˆ[%}ŠzCSŸ–tBDüµF[3ÃCäÔýÿpbêÝ*',¦x:".Hpß§DÄ©7¢]tý?¼7"ž¨yéC?×h7ÅPÀ”š×5Ëž €Éå4öìˆêŽvÃ_¢xð4å»q`ƒ÷ëd`Zꥺ]ÿ_ˆKë^´œ#ð>à±Í_Hž³Qã`å¬ñ SçhÐ(vÿÏlwŠmd‡9;þ àŠëZ!"®’#]tý_ |±ÛëGÄß©ÿßù)Iëw{³¹˜Øfä5?â„ÔúÓ#â#À¦ÀõC¸ÅUÀË#â3ñä®ß¯Pô- I×+¥ÎÑýÊqô±Sv¿xiùª:ÜçzŠ­}Ïþ— ÃEÉdžˆˆ¾'`JÚ X¨¢Ùùq[‡klLõÊ—§®!IÀ¶Àœ5"þ!"ú>:YÒ&À³j4'÷{?³qæ`’V£èòÍÅZqeêM4°ÈL/€ûÊ×½åN{ffYÈiœ»®œºÿÿ•ËÞêFþOù23ËšçÌ.§`Ôgÿ›™Y\̤ì"~uê r`f–)Ï´1°@ê ¹†Î²73³öqðL9uÿÿf²“ØÌÌlü¹x¦¬ €ÔÌÌ,/,IZ¸5uކ<<{ë²ÍÌl4¹ài[¤РËýð73Ë› €§½,u€“:€™™¥åàië¦Ð ff™ó@ÒœÀÀ|©³4dÙˆÈe¾ƒ™™MÀ=…5Èçáþffæ S÷ÿŸS03³ô|Pa½Ôäñ3’¦KR;}W0 Ž €BN=#_HZXa@—›Ü ÜOô{1Iks÷jvÓ»€»úÍ)i!`ÕŠfEÄ5®±°RÅ5þ×vo¢{­SÑäÖˆ¸c–ïYôÃzOFÄå3ÿåy#ϯø¾éNé”´ ðÜŠk<ÿ¬sr5~žïŠˆ›û½ÏL÷[x=°%°"°ðìYÚLþ œLN‹ˆ{•!+‘ý ¸ˆ ^÷PNüåð®!¼7OR'Vì1ÛíCþ;|¸8xA·¬qŸó*®ñ–×xXißU÷ùÔßsi þ½=:A®5j|ßíïÇ«k\ã à¥xï«~žÀ=> \Öãûüp$°aÊßK£øÊ~@Yq.’:GCþå¿8›€Em€ï×Iú¥¤5ÒÆš€Qü¼TÒ’æMœi2óS¼—Ö¼9€Ã$µ¶—W…«) Úµ{¼Ô¼À;s% iÙAewÙäÕýï €õ ظBÒ—%)u  ÌMùÉIÒ«R‡™ÄÖ’vL"S/>œ:ÄD$­ œ üXf€—~=ðwIïà5Ç– O´Îæö~))õ˜òdVΔô–ÔA&ñmI §‘©ÏKZ1uˆ™IZâÃÈK‡t‹…#%í7¤ë ùôL.Lb„íž:D‘´Tê X†¢‹×š·pHê3Hz ÅĽ&~N¿(é¸ÏÈrOpQDLKbĽCÒûR‡è`1àû©CLâ’6H"SÛJÚ!uˆò“ÿÉÀB Þö#’vjð~#¥µDšP~ZZ:uކä6þÿ pK‡¯/L1éož.¯ûeI?ˆ‡{N×Õh·ÅÏg7óÞ éMñËž’ ÏŒIi/Ž,·´®}GÒï#â¿)n.iàçÀ”.¾íaàlàFàfŠçÕsçQL¬{­C%7vqï,d]ϧ(–Eåä±}U£rMüÖÀ.Àk)Æü;Y¬l{hÙ¶Žšk´Ëuã+»{RÌx®²ж`àC@ݲ_ï¢ýkªŸ—³)bu=ÞEÛa[†â=Ù;ÑýV¯Ùö*àÀ±1ɦ?’V ˜ûnª E€¯Q,]µ™¸ÈÇßSh£ò̱ˆóLê IDATÀ±’¶N¤úÊNôWÔVÛ\|\Òw‹™ec” ¬?ô`½û¢¤ã†ýi,"Žë¦}¹±QUð÷ˆhäï}Hö”ô“ˆ¸¨É›JÚصfóG:5*~Þ/éÛÀŸ¨.öv´lDtêÌNîsrYð$ÅCÄ:ˆˆÓ·×hºæ°³L$"®>R£éJ’vž-œ:D¦æ/O?mÒ'k¶Û7">PõðŸYDüxÅf@ÌE±Á—Í$÷ —€k#âÑÔ!FAùÉñêŠfKHZ¢‰<8 ¨ówÙæ^€í$½!uˆL­KƒÃ’Ö¶¨ÑôGq`/÷ˆˆó€ÖhúÆ^®?β-ÊuÉ«¤ÎÑI÷· ý¥F›T½O“îÑ?“6.œÙwÊùÖ¼/JZ¾¡{}¼F›G€}ú¼ÏQ@Õ!A«•ç(X)Û€bBRwwÿw§Nð‚¡§˜Üõ5Ú´}¬s9`ÿÔ!2µ ÔXßT£éÏ"â®~îQÌåédòéõ­%çI€9ý ¸èNÛÏK¨³uêMCOQíït.”ö’tTD\ÜT Œ\F±ðd^/iûˆ8aˆ^J½U+ è~û¨hÓ†­á .º³Q6)ßÓªåTQ¬›NíÃÀ¯(>qNdNн^ê½n?ŠõÆ9XÒñà2lR£ÍÑáèãn”+¼Ö¿ 9Ô]“:êèû\ðÌ´¶ôj& ÎðËnfRÑMÀç*Ú¬ìÕ@–Ü<@õd¿aüºF›£†x«s°\ê ¹¾Ï]ë²"i[ŠÃu:¹+"îh"ÏÌ$M¡ÞV¿mÚøÛToBµ¿¤\þ=6&"~E±¯E',·è†uj´¹aH÷¶²,Êu°¹lì5IzÅD¢ªÉ¡¿§å!*çkT4­Ùö¹ìÚßb/ŠÉ,|§™DÙÙ x¨Ã×g à ôYP«‹ÔhÚöɪc-×9ËP½åë¸ðøå² ×PÌV~=0oëj—¹ ì+éÞí¢Øx•òÏ*ÿvì=ÖpDÄ’¾O±•ñdÞ éuQõ‰Õº7Jú<ðõÍ^Lñw3È•u÷ɨ]HZ’ÁlÞvz¹œ6{¹9u7æZl"©S×ó"¿¤ê<ðgv/ð£žSvéóû'r°MDÜ=„k§)6béÔóvˆ¤?–KºlpÞAçUHúÕ·Ê]²F›{ºœ«²ðëóÌl>êm¦5ö²šÚ£ r-¦ø…7ÙkEºøìײÔtʃV"¢µÛ=—§Ð}¨¢Ù Àˆ“•ˆxœæ‡aªÎ«€¢hµ„\Œ·þ‘:ÄùED|7uˆ™L§øÔÿ‘ˆ¸/u˜*åŧT4û¤:“Ǭ q>pXE³7–“`áþmÚz^E6r-r¸qˆk|ssðžÔ!f17p¢¤ƒ$µ}ëßö¤8ç}2C™”fì Ü^ÑæI à^u>Ý/!©ÎFA6$¹þ#Ë¥ ÎžñÖYß^ß²®ÿæ¡èZ¿|–Ò•'VuóoìÑ@œ¬DÄý›3u²"ðùÜ®n÷~§ŠlÈr-Zÿ‹r@nK`Ä ¼$">:àY÷R¬îôêv|tIàWåþëm÷¿Àm¾,)—¥º‰ˆcÓ*š}XR§ ƒuî3zù|k¥\WäòCWÕÝgÏô0p!ð{à´ˆ¸hH÷Ù,"*wg”4?Åò¿-ÏP=±ê%À§€/ôp˜"bº¤Ý)ö5˜lÏ……)6zscÁòñŠl¾I¾>Å0L1;¹ xeE›U€©5¯w%Å0F'+àÞ£Ú²+$Í<'uކäÜð'à“5ÚMî¦ØÝ¯U;&–yþü]Ò‘»ºUýRÞ…–ñI?Þסٛ$mÝT¦\Dĵ’ö¾Ü¡ÙK÷÷y«3©.Þü°ÎÅ"âàÀNm$õ›9+Ù›å2ô‘sÀ½q^êƒ÷HÚ•b[Ý)š®R®s~CÑúñ)`{:¯?´¡,¹ùðv`Ím¾L1Ñ´WgR}ÄË%môqŸ™½j@×ÉB.™åÒýyc'"þA½Mˆ¶v–Aˆˆ{T4Ëéßkc"b:Å'üNG_?‹Þöʘá<êm¸óÑ>î1+]p0Þ\ŒŸÓk´yîÐS HDü8#uŽEÄ9Àÿ ñúÓ(ÎÖ¨²£¤û½Ÿ¤ÍÈ猗ȱÈeä=`\M¥ó§6¡ ´Þš5•Owñú_£úçuNàI=7HZ„þ·èÎNŽ@.=ÓFaw8ëNDÜ\_Ñl…¢ LDü 8 uŽ•?Oƒì‚Ÿõú§ØD«Êk(Š€^ŸIß%Ÿßíã`|¹û|Uزp#)ëk@åÒH¼ˆø)ð‡!Þâ:ŸC0Ã.À»ÙÐJÒ ’ŽÞÖk¸œåXä2à`|ÝZñõ…$M¶¾¾•"â1ú_vf½ÛƒbIìÀ•+R¾Z³ù«€¿IúÖdgBHš[Òó$}¢hÜi@Q³“cK€ÇÿÇWU ŠãŽGJDœ…Çq“(רwÚ _Ÿ¥XPÇ"[ÿUÒ$]"é$I§Kºx¸º¼æd›Y Yå$“Q94¥_î_UÔ;޵>Ü•:D¦†r¤ty$ñ[)6ÝêÆ’ÀºÀ6ÀæÀÊ“m²*(ž©®Ñ>¸_××h3’Ë¡"ânŠ"À6ìa˜ˆ¸x9õ~~ûñõ{²–[K÷?x`œ]\£Íó‡žbH"âHêïoSñúWQlg}énñ0EoÁφtý±’[0rã¢}pÀ˜Šˆk{+šuÚâuì<–:D¦>N÷]õµEÄm“ýžà¥¶‹ˆ³¿ðºc+· § #.Æ[U/ÀŽ’:Ðjåi‰ugŽÛEÄ]À>C¾Ç#âýãûƒØ r*°^DÌXÎx)õ–f-·Ã€r*îI`ˆž zÉRªORm¿˜Î^ÑáëKP¬>r‚¯Õyÿª¾^çýþwìHqdl'÷yŸרúï™>€ûU»"Ö¹F¿ïý( zyE»¾Þ“ˆø°¹¤M7¯£˜«UוÀå^3_÷!IW«OtÛ^óŽEäó^HÚø^ê Y>"nNÂ̬’Ö^K±£åR3½ž¤Xs p!ðÛr8Ìzä€ñõHêffÝŠˆK€KRçÈçŒ/®bff“r0¾\˜™Ù¤\Œ§é1Èå5ff6f\Œ'ú73³Ž\Œ'O43³Žr+æO !î03³Žr+Ü`ff† €qå33ëÈÀxr`ff¹O03³Ž\Œ'÷˜™YG.Æ“{Ì̬#ãÉ=ffÖQn§z€ÌHZX•âLùU(Þ›Ê×õqgÂx­#i)Š÷iU`eàž~¿nˆˆ»Æ3³Ê­È¥àñÔR‘4ðnà=Àó€…+Ú?Bñpû ppFDL¯qŸå=kDz8 "ž¬Ñ¶êžÏöTÑô1`ÿšÿ ïvž ,XÑþ!Š÷ëlŠ÷ë̺çNtñž Û9qÒÌÿ‡¤måùaD\=ëÿÙãûuiD3ˆP’Þ¬Óå·}7"nÄý­‘Å‹¢Ø‰L^?Ný~'øû}6ðàŽ>ß»{€OóÕ¸çÔš×Üu@ÿ×¼ß5®µ$ð¥ò¿·Ÿ÷ëà#À”÷ܰÿ68h‚l%̳å߯ۀ9ð³&à¦î¿aêß~Õå4 —Oÿó¦ÐIsKú*p#°?°DŸ—|6pp•¤m*ÚîI½Þ–¯”ŸÞ{&im`Mo¢x&»Î|’¾\üÅo?–þø»¤Mú¼–õï9À+p €åpk1ã)‹@Ò³€S(ºÅ;v]÷`yà7’Þ?Yƒˆ¸øvk-Nñi»sÖh÷‘ˆxh¢/”ó!þ|Áÿ{X8MÒÛ|]ëÞN¸Æ¸†µ\NÀ<©4hì IóP<Ì6âmæ¾/iïm¾ÜZãZ»Kêv<Io¥Þ§ºÓ#âøI®±ŸýËzÉPÓÜÀQ’Þ9Ä{Xµ$Õ);yã@’X«åT<–:@ƒr(v¾¬ßн¾&é…}!">Vãs‡t{cI _¯Ñô1`¯_ÿ°F·÷ï€C$­ÒÀ½lbK›öúÍ’^DÑ£cc.§U9-ëI›Òùa7³G)>ùÞÜ ,J1Nº2°ZÍkÌCñÉv½˜`6D#é}@ÕøË%íGÕ¼/—­ÑîëqÍD_ôà5ï÷pÅûu?ÅÃd)Š+׼ƂÀ‘ f,Úz³ðû¿×Ÿþ3‘SÓîxc]Pïáÿ°pDDÜ3QIëR,Üê^“¯NŸäë{—Qtƒwò5I¿‰ˆÿV´CÒó€Vµ£˜Ðw@‡¯¸Æ5> üt²l’^ÆÓK,«º˜_!iƒˆ¸ Æ½mðÞ(i¨±tÿÏD6@D<&)¨^C=ƶ´$°mE³iÀ#âwEÄ_J: 8–ê!±w1Iÿtð‰Šk<øõ† ¦Ôh÷መ°À•´ÕŸÄ¶Šˆs:5Šˆss%ü_\ïf..¤ûU—SLÈìdsà¢.®9­Ë 3|8°ÇïíäÁ!\óÙïKdz’´°æòX eS”%Õã<àeTÊ>ºêá?³ˆ8NÒ>ó :Ù^Ò\1ÙÒ¿/o£ºË~oIÿŸ¬A¹1ÍÖ×89"~Óáëuºá¨zøÏ,"~(ieŠá‰NÞ|`¦ï{¸¯î}$ÕÙ@éÁˆèêº=z´¡û ÊNtYàOÿYÉi ä3 0¶=À 5Úü±‡ëNõšþù(>ÁO("¤^—ý\Ëú&T®p8¨Æu:­P€zózy¿¾W£ÍâåNƒ–ÆöåÏR7<þŸ‘Ü €\&ŽsPÕ p{·-góŸ_£é2×ùpFël*éÍ“|íãÔ›…}`D\[ѦNÐËûupe¦ß/ª…­ê6–´ðâáű¶ÉmÀ=y؈Þf@Eu/@3{QŒ]WßSÒÉ3oÜSîÿþé÷¸–bLºJ.ô(Æç»õ#àumrÿY¶GéüïœPóZUŸþo¢^n#"· —€qžp[6ï“tjDÔùDÿ”ˆ8 8¬·XϸÎU’þøTEÓå(¶ãùÿ êZùÁˆ¨óó\çýú¤3#âòmŸß¾ÙÍ÷ØÀtÚ}ñu’æ›l’è,ªÆÿBñójc"·!€\z$©ÎìñQtc6Ë’´Ÿ¤Tû™‰âS••Ëý(÷ÒŸlX`f¿éb’c÷keàõû=Ä¿ÇÅkô>ýø>ð`á!d]bã™Ad½˜ÒC†e›”á ŠžŠmø»¾¾F¦¾Ï §XvÙô¿ÑÏWdÚ°Æ5¶¤èEº§¢ÝÛ:ÜçÙÀôß{UÙnË&þ.üjîå!€ñ5®CDÄ]›äÜ=€Ë­¼øp·¤©’v”4q5Õ ÕµWDt}¨UDÜl<0€ kR'|"p¤Ó%m#)‡6[©ü™˜ðÈ™t؎νÁÇtÊFBn@NC‹¦0LQ|³=½oë:‘¹€W¿®’´»¤ARµ»í'q\DLvA¥ˆ¸Œ¢›¸j™c7¦Pl7{p¹¤Ë¹ Ö¼£+¾þZIÏšäkU³ÿ«®m#*· §€±¯‹bûÚ ém'»*Ï®•ôŠ~.Sï@žÉ¯³7ÝYüøß>ï;›ˆ8x>°3ÅÇ æÌ0?p´¤— ðšVíç_¤Y‡;Íþ<þ?Ör+rêû!€YEÄq\D¼ƒâ¿à[ÔÛ³¾ÊœÀ1åV½½æûðµ.¿m¯èíL÷:y¦EÄO#âÍ++^ \5€ËÏ'©ÛãÛlpÿ_ý@Q¬Ž™ÌÜÌôÀ/ç·t:qò¼èbÉ©žÜ ÷d""ˆ©ñшX‹â¿·QœcßkwúbÀ¾}Fû ÅÒ¶:މˆaÌo˜MD<§GÄ#b ŠmŠw~L½í„'²ÅŠqq`D,2À×CÈXÕe?ó0À@§ÓÝý?ær+Ü©ˆøOD»FÄ Àú;^Öå¥Þ%i±>r<|¦FÓ‡€õzŸ~EÄ-qTD¼‹b )Š—nçYì9 •VOÕ0À&’fünè4ûÿ Š¡!c¹î0"â’ˆø\D¬lJ±ÉNóQlÔ[j´¹9":ÍênLΈOGÄš.ëv / ô;wÂjŠˆ«€K:4™ØAÒÜt>ÉqjDt}L´ãkìz$Í#iÞ¯ž@Šˆ3)&~©æ·¬ÒË}šVñ^Í[>ºVN¸|ÅîyuŒÄû5Fªzv¢˜Ói~†»ÿ3[0v{ãw°˜¤9S‡°›)†q&{õü‰¹œ·ðÃÍWèõ>M)7äy˜Îï×¥½^?"ŽˆPì X¥õïט©:¸çt>Pê1êý½ÚˆË­hE—jC,‘:Ä€UD³˜¤Uû¼Ç¡5Ú,Þç=†."î¬h¶†¤…û¼Õj´·ŸÃV‹ˆ›?uh2gÿŸƒ\Fk-•[0´“ßZjÜæü§F›—öy›k´©z°¶EÕÏûÀ‹û¼GqâAœÙ`Ý©èÄÝÿ™È­¸Î]cãfÜæÔ™xÖibSu&¬Õ™Ä×uvúë÷ýÚ¤FO&kÞq'üuëaŠSS-Yå†*£òémÆ­à×5Ú¼EÒî}Üc¶ýÒ'ð×>®ß¤:ïׇ$íØÇ=¶«Ñ¦Û¥–Ö§ˆ¸8­‡o=1"tk§¬ €RNóÆ­àTêmñ{°¤M»¹° û¯¯húpr7×Nè×Tï}!àÇ’6èæÂ’æ´?Åé‰ÜÃpk²j½ xëߌ¸ocÕPž{~T¦sSàó;IN:›ñà pðUŠuÒœÖ œXD<@½Í\æΕôkI¯ìÔ°|ðoDñéò3D'Ç k+ã>')†ðš:¤¼¿¥ØPª®ûéýÀ*A9žÝS0n=Ÿ¥ØÏ|¹Šv¶¶’t=ÅF?7–¯éÀ"ïÏ;ÝÕñõvñk“OPÌø®Z¹0ÅðÇö’þE±§üŒ÷ àYÛ)¿–ú…å/tØ#"’ôŠ-°ëøUDt{X•0ãm¬z"â~I»ÑÝ'••ÊW¿¾[iˆ¸CÒ^t×µûÜòկ϶e7ÃŒMýÀÝÿ™Éq §¥€+¥0 q*ðš]Ñqð¹ï70åÑ¿Ÿoø¶‡ßiøž6»Ó¨· óàCÎb-“cÓ'’UÇp7@"â à݇– Û/€·–›ëŒ¤ˆø°7ÍMG–ܶR9ÿâ¸MMü[²q0Þ¦0Æû°GÄ ‡t‹ûÝ"b§Q~øÏS|tùnqð¶ˆØÍÿV©³ÀÝÿr0þVO`˜"â<ŠÝÿÞüm@—½8xAD1 k¶BDLÖö®Ðeï¾ Å$± •¥k^æ:Š÷ëWÀoË%šÃpÕ+±¹×Tÿ Ë?'ùÿï¤:Så®”’>Ëä{6œU³Çæ–yrÚhmä)Çž:I·Rÿݨ;""vK"IóPL†\¥|-Lî£ø¤pqDä49tR’æ£(f¼_ËRl{_ùºƒâýª:˜ÉÌZ.×àbŠnМ7w13³üäÒ >«œæ¬‘:€™™µ €ñ·„¤g§affíâ c½ÀÌ̺ç 03³gp÷˜™Ù3¸Èƒ{ÌÌìr-r[óí33{†\÷ð 0ê, ™ÌçÃ>ÌÌl†,{Êm/¯L£As3Ƈ™™Y÷²,Jƒ:8fTxÀÌÌžâ ÏOÀÌÌÚÃ@>6HÀÌÌÚ#çàŠÔ¶aêffÖY®˜AÒÀ©s4h¹ˆ¨u3=’æM£§EÄ–©C4!ç!ÈoÀËR0³Ñ#iQòxøü+u€¦¸È‹ç˜Y/–I AÿN ).ò²¾¤¹S‡0³‘³lê r‰+œ&AÌ ¬“:„™÷Œ¡¬ €ˆx¸.uކyÀ̺•KÀµ©C4%ë ”Û0€ 3ëV.C·EÄ#©C4Å@~€W˜Y·réȦû\@~ÀÊ’–LÂÌFJ.@6KÁäW€‡̬;¹ ¸ 3×ÓR‡h˜‡̬IsK¥ÎÑ9‰ˆÇ¦ÎÑ0÷˜Y]Ks¦ÑÊmà%eUofV%—ñp¥Ü €€¦af#áy©4侈¸'uˆ&¹(äV¼6u3 k§ЬV€ €.I íR0³‘KU÷?¸ "þü#uކm(i‰Ô!̬õ\Œ)O›š:@Ãæ¶MÂÌÚKÒ¢Àr©s4Ä@ÆÎL ×¥`f­–Óda›J^Gl!iÞÔ!̬µréþOÌWDÜ \™:GÃ6MÂÌZ+—ஈ¸%uˆ¦¹x¦‡¼ÀÌ&“KpAê)¸x¦ €m%)u3kIsk¥ÎÑÆYä7`Y`½Ô!̬uVæO¢!ç§‚ €™”Û@^ž:G0³YåÒýî°RŽÃ.ÌlV/J !ÿÊí €\Ì.Ç`I˧af­²qê ɲû\LäOÀ“©C$àMÌ €rRçhH–Ýÿà`6qð×Ô9ð0€™Í°10Oê q€=CŽÃ›HZ0u3k…ÍRhÈcÀ¥©C¤â`bSSH` ð¦Ô!̬r).‹ˆi©C¤â`bgO¤‘ÀYZ’!Ÿ½A²ÿŠˆÿ§Î‘ÀK%å´ö×Ìf÷j`ÎÔ!’íø?¸è$ÇyïKÀÌ’Ê¥û\Ø$r-Þ!)—í?Ílv¹÷פ‘’ €ÉLO"g;¥afÍ“´ ðüÔ9rADävöË3¸˜DDÿ{€sS‡hõä: ž h–ƒœºÿOˆÏz™‡j4'p °Tê, Ü,Sö„˜Ù˜)¿˜/u–†¼="~ž:D¸ †²Z<&uŽDž¼7u3šíÉçáÿpjêmá ¾Ÿ¥о’rùa–›·¦Рs#âžÔ!ÚÂ@Mq!puê‰, ì‘:„™ –¤Å-RçhÐÉ©´‰ €îäÜ ðII9.…4g;s¥Ñ ¯ÿŸ‰ €îä\, ì•:„™ TN³ÿoŒˆ+R‡h]ˆˆç¥Î‘Ð'$-”:„™õOÒjÀÆ©s4ÈÝÿ³pнœ÷X øPêf6”:DƒÜý? ïÐ%IK·’׸ÙÌîVŠˆûS1¶ÅLIŠIDAT³Þ”“ÿn$Ÿå‹EÄ#©ƒ´‰{ºTžxZê -|4u3ëËäóðø£þ³sЛœ'|XÒ¢©C˜Y÷$ÍC~zÝý?½ù ð`ê - |üOõÿ{.†¤÷¾,uŽÙEÒ§S‡0S_ÖN"¡Ï§0Š<0D’¶~—:G‹ð¦ˆ8>u³q!é5Àé€RgIäÔˆØ*uˆQä`È$lž:G‹< ¼2".NÄlÔIZø°Lê, mç§1Š<0|§8šÒ ó¿-wM4³þNÞÿSüðï €!‹ˆË¥ÎÑ2Ë'Jš?u³Q%é=À©s$öùÔF™‡ iiàŠƒrìi¿vÿšuEÒªÀ¥À‚©³$tJDl:Ä(s@"â6Š-‚í™Þ@1{ÙÌj’4Å’¿œþàOÿ}s@CÊîîkÈ{¼n2#S‡0’ŽÞ›:Gb¿‹ˆmR‡uîhH¹EågRçh©Ã$½2u³¶“´~øƒ?ý„{$iàb`ÔYZè^Šƒƒ<£×l’Þ ™:G øÓÿ€¸h˜¤ ?ãÞ—‰<lg¦bÖ&åf?¿æN¥6ˆˆ S‡~5,"ÎM£¥~'iÛÔAÌÚBÒÚÀñøáp²þƒã€$= ø°tê,-õ8°sD“:ˆYJ’–μqVá%qQêãÂ= DÄýÀ‡Rçh±¹€ŸIÚ-u³TÊ ¿ÃÿNöðܤ“odÑÙÇ#⛩C˜5IÒÜÀ)Àf©³´ÄãÀúåΪ6 îHkOŠÃqlrßô…Ô!Ìš"IÀÿá‡ÿ̾å‡ÿ๠1IŸ¾–:Ç8ø¨· ¶q&iNàà]‰£´ÉõÀšå^*6@.+·õ¼xQê,#à‡ÀnáÓmìHš ¼1u––Ù:"NIby ±ˆxØ•bŒË:{pt9>j66$-œ„þ³ú…þÃã Ê™­ç®çÍÀo$-œ:ˆÙ HZ8Ø€ •™ß>Y£§Þ \ûW‘"âeÀOwUg™pfæwªC´Ä%€ 6:ðæ_%ÕYzj 8-3?UDmŠˆw+€]ª³L¸ß{eæ=ÕAZâ ÀËÌ)ºƒoü¥˜›€OFÄ¥£}ÒXDÄS#â,à<ügâTÿñ³L¸Ì\¬¯ÎÒconˆ÷D„?óZP±ˆîP¯÷Vgé‰ 3óìê-òadæUÀªsôܳé¦bV‡Ñ0EÄÛkWTg鉛€«C´Ê==—‡U瀾¼ßiGm ñ<àL¼Ìg6ÖûeæmÕAZå @¿ÜQb8¸-"Þ7º’YšµˆØ>"þ¸ÿÙ:ÞÁ¿–3=û?v®Î2 7§dæ÷ªƒ¨?"b ðy`Ÿê,=tFfžV¢u€Šˆ£ ªs Ð7¿ÉÌ_VÑ䊈gާ›MÒì\,ËL76s  ‡2óBàôêt8°:"Nˆ§V‡Ñd‰Î ÀjàÝ8øÏÅà(ÿÉà @EÄÙÀ_Tç¨ÿÞ—™ßª¢z±/pà$s7¼63XDgúí$àÊêõ"àÒˆøˆx[Døi¯A±WD|¸ÿù:ÕÁ²8Ðsñtº{Å÷­Î2p·.ÈÌG«ÃhaEÄŸ¤[òƒÒü]”™GW‡ÐÆ,0zùÇÀŸTgiÀÀÀ9™ùpqmc£ ¤>¼©:Ë€Ü ìŸ™VÑÆ,1úÄòàéÕYq7Ýšð9™yWuÍOD,¥ø__e`î§;ìçÖê z2 À€DÄ!Àe€ÛŒÏcÀÀ€Ë\è—ˆxÝÀPu–:"3¿QB›f˜ˆ8’îŒ€íª³4ènàKÀÙ™ù‹â,ÚŒˆØ•nmÿ$`¿â8CvZfžQB›g ˆ8ø*n^ª’t‡|øVfþº6ŽFç:,Þ  ìT›hð>š™®¡-³ TD¼ 8K@µ®..qf`|"b;à`àºsúŸQ›¨ŸÈÌ¿­¡­³ XD|O,›$«èÊÀ¥Àé/à67ÚÉ ðà¹ÅqZ³"3Oª¡™± \Dœ¬À0‰î¾O·\pUfÞT§ŸFkú¯ŽÕ&jÖyÀ±™ùXuÍŒ q2ðÙêÚª{Ù¸Ü\g2EÄžÀ’Ñó*`1.uU»8Ò3þûÅЈˆ88³:‡fåwÀÀ Óž›2s]iª1­ã¿œÇü%xàÕ¤ù6pXK?—CahHD¼‡îþr?-õ×ݱÄ ÁtÝ™™T›ˆØ…îþ…Oûº8ø£ÂhÚ²«€C3ó¡ê š= @c"âpà|| jˆþ‡® Lî~<0í¹?3§Æ,"žB÷ÉýÅOx6 ö{Œ3¶‰ŸËú\<[ghPDL· ÝcƒÛµŽKÁÊÁþýAº¦v~Â³Ë þmw`DZüÏ47Ð]íûÛê š; @£"â•tkw»Wg‘Ô+«¥™y_uÍ añàJ`Ïâ(’úá?ƒ2sMuÍŸ›Á–™·ÓíªþYuIoðÿá°4nô˼”î*aIÚ”•À¯¾ €mäYFw¥­$Mw&ðfwû{´‘Ñ©Ÿv¨Î"©Ô£À)™ùùê Z=ID,¾<§:‹¤k#2óÊê Z8mRD¼€î¬€WTg‘4Vw˽‹bøÜ MÊÌ_Ò]´rQuIcs5p€ƒ,Ú¬Ìü}f ü=àŸÒ°]œ™÷VÑxX´U™ùqº·þ»:‹¤ñ‘Ì<&3®¢ñq€f,"žœ VEÒ6ñðî̼ :ˆÆÏ Y‹ˆ“€OO«Î"iÎîËÌUQ €æ$"ö¦[3Ü·:‹¤Y»8Ñc}ÛæÍÉh—ðþÀ§«³Hš±µÀ ™¹ÜÁ_ÎhÞ"b9p^-,M²Ž½â+9 ùËÌ•ÀÞÀyÕY$=Éï¿–9øk:g´MEij€Vg‘Äã2óŽê š<Îh›ÊÌ+€Åt7ˆyxTãàT`©ƒ¿6Ç-˜ˆ8€îÜ€?­Î"5äàXóÕÖ8 “™?^ ü#°®8Ž4tSt¿k:øk&œÐXDÄËè–^_E UtŸúo¨¢þp@c‘™·dæ€åÀ-Õy¤X œìçà¯Ùr@cÛï><«8ŽÔGŸ>–™ÿ[FýdP™ˆØ øÝ;Ê;Ç‘úàQà\ºÛû¼SóbP¹ˆXü3ð¶ê,Ò„JàëÀé™y{u ƒ@#"–ÿ¼ª:‹4A®>™×WѰX4q"bða,jÛ€ÈÌ«¢a²hbYÔ¨UÀ3ó²ê 6 €&žE@øÝA>e¦ÇhkÁYÔ Ô5Àç€ó2sª:ŒÚaPïDÄAÀ_ѽ5°Cqi..ÎÊÌëªÃ¨MõVD<8îP¡çÇ‘fbÝuÙçgæÚê0j›@½ÛoN^Dm"i#_VdæÕÕa¤ ,”ˆx)ð—ÀqÀ®µiÔ¸ÕÀ àË™ù›ê0ÒY4H±3ðVà(àÜ+ ñX\L·¶ÿýê0Ò–X4xñLº ƒG¯¶«M¤º ø"pnfÞWFš €š{o§+Kp¿€æf øwà2`efÞZœGš5 €šÏŽöÇ™mÙ=À·•À•îâWßY$þ°L°Œn¿À!øZ¡ºø®¥ðWפ05 i"b1ðÆÑs°Sm"ÉýÀwéüË3óîâ<Ò‚±H[1z£à5t3K}p¹`Hn.§ô™ëŠóHcaf)"vöþ|ôõ9¥¡4 Ü\7z®®÷}µÊ m±ˆ Á¾Àö¥¡Ú¶žî žky|À¿!3ï/M%M €´FË{‹G_7<{O©K6HSÀÏy| ¿¸13*M%M8 €4Fñ4`/6.{‹p_Á–¬~ Üüjôu5Ý`ÿ3×í¥Ù³H`t¡ÑÏ=/˜öý†g÷²€ ë1ºwìïšöüê ߯ÉÌõe ¥²H=;ñxØxæ žgŒ)^máyXÓù5™95¦œ’F,Ò€fv£+;Žžføýz¶< Oñ©_,’$5ÈÝÈ’$5È IRƒ,’$5È IRƒ,’$5È IRƒ,’$5È IRƒ,’$5È IRƒ,’$5È IRƒ,’$5È IRƒ,’$5È IRƒ,’$5È IRƒ,’$5È IRƒ,’$5È IRƒ,’$5È IRƒþœ6ŠZbü´IEND®B`‚cups-2.2.7/desktop/cups-64.png000664 000765 000024 00000004272 13255074424 016540 0ustar00msweetstaff000000 000000 ‰PNG  IHDR@@ªiqÞsBIT|dˆ pHYsÜÜŸè_<tEXtSoftwarewww.inkscape.org›î<7IDATxœå›{°ÕUÇ?_¸ „!ÈH×Gê@f"j5‰ØÔt­È2òÇ(fÌ1ÒÔ¦‡Š–SQØK{L¢„¢Üì!d„‘">B.Fòã*W»Yý±ö{:ÜßÞ¿sÏùkÚÙs~g?×úþö^kíµ÷OfÆáL½zšž¦Ã€†z $IÀ™À[ã€á%¿ƒ6`wH/ÏkÌìÅBù*RHêœ\ L»ÑÍ`5ðsà3Û_;3«yN/VÃôp pRÍx­±à}€ë€ö ^žþ |èó†˜l,Xðò´˜Ð£à–ä»u¼4íft—ÿª” ¤#€ŸÓ+hö*ð<° ØÒàxàäNÁ-C^2`¶™Í« MhÙý7ßXF¾·ô/`!082gÿ«PygÃ5uYAøGs0´¸8ª  ûW›sŽ7¶Üšƒ™õÀ9Õꘒ1€Ï!cãþ PÀXà@‚‰Ÿ}k%|ÙøïÇõHlü;  LÇõ‰Áïz!| ïFxø0¼nNÿjàœääåº/·æé'·”4Ø™Qe+pš™½ž«Ã*IRð"0,£Jp‚™í‰õSÉvø ²…¸¶CxIï’4?<÷—Ô,i¤Å’. ùs$](i–¤Ë%]#in(ûš¤Ëb̘ÙÜÉ¢¸w§œÓ­ÃYÓíeõ›€uáy`¨3 W^Ûs qó¶_ZÀ?ëqMž4ÀÈO|;ÕGÞм%R~uÎ~V_-Ï4³­¸Ïð%`Vž¥df-¡¿,zOª¼|&Rö´™­)Ëkz‡ç~¸Ænÿo&£»è« ßòNËÉÀ"egHkœŒI ŒTéj>+éFà `¹™µyPˆvÐ‡ËÆ¹‚ûOKZdf¤ø ã?)o”¥­€¤©ÀÒŒâƒ@£™íì¢]#0q-7³×$],ÏÓñ°×``¾ Zkf-’ÆãÞܲ(sµ Š&æö®¨‡Í/2å ŠÆÉŸ»Ê”ôvàáïà.à\܃×ß~Š+ÒyfÖ*i6°‚CuÁ<°ºø8ðe3Û'éf\·˜ œüÊÌîM U‚’úçDª<™‘?¸ X‡ø½ð;>ä½àdÜ¿ ÌÁgÀ§ppváæn'ppihw=pm¨?ß¡.ã<Ü!iJL>H+ÁQÄŸµ‘²vüMÎ6ào~>+Ê•Ï+Àù’:fÜN3k–4XifwHº²¤þ&`¦¤{Âÿc€ q0{/„>£”2ƒÇFÊö†A²¨ø%þÖ® y#ñ-íd]>ûðé»8"Á¸ÓtŽ#´±ÐÏ$à;äðOR)kµ¸ ù‡™3³ifölÈû“™Í¾@a43û5¾D†'øê à~¸ÿ°¸ hÅHRj ДŦ×\a•Ò:œI€?â³a[¨·øE(»z´†ÿ¿Ã— @ ÐÚ=dfü‡Ù¸ÀS€¹¸^ù&ÎX6%LàMd›ÀÇzÚ„Õà Ɩ@t›)i p6îì<+¨f¶GÒ™tWšpóõ¾ßQÒÍŽð{\IÞ£Àø{*Xª‰ÀF3[ŸçJé€>‘²~Y’ÎÃMÒ |×7·Û_‘t4ðîR\˜ pÁNǹ˜»Åsχü¦Ðn ~Vn&—ÐéwTD©ðj¤ìèHÙPü­î>üx x8 ø}0qßÀ-É"à‡f¶ ¸7¸ÉsÍlƒ¤÷kp@Ð9+úH¼nJÈ‘I)bŠn`V™-–Ô¸b~ÚÌî–t þ6G†ª“Y¸)Û'iŒ™íí¢Ës£pß≷ø$îc$=¾,ªfd és¸0Îíïݸã´Õ̶Izð[ ›pOïü¼¯œšéÜöv,Ë…¸'º?,íU5$õÍxc?Æ~?úšò_Ç£=˜Y{˜Ëq«r›™uß‚GvÁ#Q |­·à¦±ßŸž#“¢ÛaI“ƒYôN3ËÚü_Pjü5Q>šì QÝHÒñd¦î1³Í™SŽÐÈr†¾ÕÓŽLàqi„Çè)Qž˜`y¼¯”b[åzÒ©‘²¿ÄV ÀXI±hqá.b©ò\¬}µô¢²ËEÐ(âkÕ¬ÆwgYtiŽ>Ф©‘²]f¶+Ö8 €™µrèÖ¶”Ζ4*ÕOà¡dëœZvñ#¨æÒþ£|MLöQÁ`Ï'›ÔÜáçe !ÕG%§Ãw&Êo—”ŽÀÔˆ$Eüí~óä8U€ö@ÒW_ï"¸×¿ùþÀ³>ïÈÕW…_’À€ùuàžÅÜ ƒ/ÎÂ×)àžnµnOŒÝ )€!xL>Âãø•™Z ÿfàÁãΩ¨ßn2s1ñ[Zi/²®êâ Ø”c¼+yÕ0õQÒ—;Ò+øùàø¼JWºÂ=ÑFaŸÍ…ïÇáÛÕâ×V*¥ƒ¸Â\ ,3³•µãЩÐïÿg éT<~?¬‹t€Î&wãŽÖ3À*3{­P¾êÀ•ûo‡{þ  ê( ËB3IEND®B`‚cups-2.2.7/desktop/cups.conf000664 000765 000024 00000000714 13255074424 016447 0ustar00msweetstaff000000 000000 cups-2.2.7/desktop/cups.desktop.in000664 000765 000024 00000004015 13255074424 017576 0ustar00msweetstaff000000 000000 [Desktop Entry] Categories=System;Printing;HardwareSettings;X-Red-Hat-Base; Exec=@CUPS_HTMLVIEW@ http://localhost:631/ Icon=cups StartupNotify=false Terminal=false Type=Application Name=Manage Printing Comment=CUPS Web Interface Name[af]=bestuur Printing Comment[af]=CUPS Web Interface Name[ar]=إدارة الطباعة Comment[ar]=الكؤوس واجهة الويب Name[az]=Çap idarÉ™ Comment[az]=CUPS Web Interface Name[bn-IN]=মà§à¦¦à§à¦°à¦£ পরিচালনা Comment[bn-IN]=CUPS ওয়েব ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ Name[ca]=Gestor d'impressió Comment[ca]=Interfície web de CUPS Name[cs]=Správa tisku CUPS Comment[cs]=Webové rozhraní CUPS Name[de]=Druckerverwaltung Comment[de]=CUPS Webinterface Name[en_US]=Manage Printing Comment[en_US]=CUPS Web Interface Name[es]=Administrar impresión Comment[es]=Interfaz Web de CUPS Name[et]=Trükkimise haldur Comment[et]=CUPS-i veebiliides Name[eu]=Kudeatu inprimaketak Comment[eu]=CUPSen web interfazea Name[fr]=Gestionnaire d'impression Comment[fr]=Interface Web de CUPS Name[he]=נהל הדפסות Comment[he]=ממשק דפדפן של CUPS Name[id]=Manajemen Pencetakan Comment[id]=Antarmuka Web CUPS Name[it]=Gestione stampa Comment[it]=Interfaccia web di CUPS Name[ja]=å°åˆ·ã®ç®¡ç† Comment[ja]=CUPS Web インタフェース Name[ko]=ì¸ì‡„ 관리 Comment[ko]=CUPS 웹 ì¸í„°íŽ˜ì´ìФ Name[pl]=ZarzÄ…dzanie drukowaniem Comment[pl]=Interfejs WWW CUPS Name[pt_BR]=Gerenciador de impressão Comment[pt_BR]=Interface web do CUPS Name[pt-PT]=Gerenciador de impressão Comment[pt-PT]=Interface sítio do CUPS Name[ru]=ÐаÑтройка печати Comment[ru]=ÐаÑтройка CUPS Name[sv]=Hantera skrivare Comment[sv]=CUPS webb-gränssnitt Name[sq]=Menaxho Printime Comment[sq]=CUPS Web Interface Name[th]=จัดà¸à¸²à¸£à¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œ Comment[th]=CUPS เว็บอินเตอร์เฟส Name[uz]=chop boshqarish Comment[uz]=CUPS veb interfeysi Name[zh]=æ‰“å°æœºç®¡ç† Comment[zh]=CUPSç½‘é¡µç•Œé¢ Name[zh_TW]=å°è¡¨ç®¡ç† Comment[zh_TW]=CUPS ç¶²é ä»‹é¢ cups-2.2.7/desktop/cups.icns000664 000765 000024 00000321755 13255074424 016471 0ustar00msweetstaff000000 000000 icns£íis32I„ÿ€‡ÿ†ƒÿˆÿÿÿ…ÿ€ÿ…ÿÿ€€ÿÿ†€ÿ€ÿ†€ÿ€ÿ…‚ÿÿ‡€ÿ€„ÿ€€ÿ€ƒÿ€ÿÿ‚ÿ‡„ÿ…ˆÿ€ƒÿ„ÿ€‡ÿ†ƒÿˆÿÿÿ…ÿ€ÿ…ÿÿ€€ÿÿ†€ÿ€ÿ†€ÿ€ÿ…‚ÿÿ‡€ÿ€„ÿ€€ÿ€ƒÿ€ÿÿ‚ÿ‡„ÿ…ˆÿ€ƒÿ„ÿ€‡ÿ†ƒÿˆÿÿÿ…ÿ€ÿ…ÿÿ€€ÿÿ†€ÿ€ÿ†€ÿ€ÿ…‚ÿÿ‡€ÿ€„ÿ€€ÿ€ƒÿ€ÿÿ‚ÿ‡„ÿ…ˆÿ€ƒÿs8mk% †ÐûÿþÔ^$Îÿćk­ñÿ¡Ðýp¹ÿl\ÿ“7]VZ;üÌÇü1RIQ6it32÷ÿÿÿÿÿÿÿÿÿÿÿÿ«ÿæÿ˜Þÿ Øÿ¥Òÿ«Íÿ¯Éÿ²ÇÿµÃÿ¹Àÿ»½ÿ¾»ÿÀ¹ÿ·ÿž„ÿœµÿ˜ÿ˜³ÿ•—ÿ–±ÿ”œÿ”¯ÿ“ ÿ“­ÿ“¢ÿ’­ÿ‘¦ÿ‘«ÿ‘¨ÿ‘©ÿ‘ªÿ©ÿ¬ÿ§ÿ®ÿ¦ÿ°ÿ¥ÿ²ÿޤÿ³ÿޤÿ޵ÿŽ£ÿŽ‚ÿ€€ÿÿ€€ÿ€ÿ…ÿÿÿŽ¢ÿŽƒÿ€€ÿÿÿÿ€ÿ…ÿÿŽÿ¢ÿŽƒÿ€€ÿÿÿÿ€ÿÿ…ÿŽ ÿŽ„ÿ€€ÿÿ‚ÿ€ÿÿ„‘ÿ ÿ…ÿ€€ÿÿ†ÿÿÿƒ‘ÿŸÿŽ…ÿ€€ÿÿ†ÿ€ÿ’ÿŸÿ†ÿ€€ÿÿ†ÿÿÿƒ’ÿžÿ†ÿ€€ÿÿ€ÿ‚ÿÿ„’ÿÿކÿÿÿÿ€ÿ‚ÿÿ…‘ÿÿ‡ÿ†ÿÿ€ÿÿÿ…ÿ‚Àÿˆÿ„€ÿ€€ÿ€ÿ…ÿÿÀÿ‹ÿÝÿíÿíÿˆÿƒÿƒÿ€ÿ€ÿ‰ÿ€ÿ€ÿ€ÿ ÿˆÿ…ÿÿ…ÿÿ€ÿ€ÿ‰ÿ€ÿ€ÿ€ÿÿ„ŸÿŒ‰ÿ†ÿ†ÿ€ÿ‚ÿÿ‰ÿ€ÿ€ÿ€ÿ†ÿ‰ÿ€ÿÿÿ€ÿÿÿ€ÿ‚ÿÿ€€ÿ€ÿ€ÿ‚ÿÿ€ÿÿÿ€ÿ‰ÿ€€ÿ€ÿ€€ÿ€ÿ€ÿƒÿ€€ÿ€ÿ€ÿƒÿ„€ÿœÿ‰ÿ†ÿ†ÿ€ÿƒÿ€€ÿ€ÿ€ÿƒÿ„ÿƒœÿ‰ÿ†ÿ…ÿÿ€ÿ‡€ÿ€ÿ€ÿ‹ÿƒœÿŒŠÿ…ÿÿ†ÿ€ÿ€ÿƒ€ÿ€ÿ€ÿ€ÿ‡ÿƒœÿŒŠÿ€„ÿ€€ÿ€ÿ€ÿ€ÿÿ‚€ÿ€ÿ€ÿ€ÿƒÿÿÿœÿŒŠÿ€„ÿ€€ÿ€ÿ€ÿ€ÿÿ‚€ÿ€ÿ€ÿ€ÿÿ‚ÿ‡œÿŒŠÿ€„ÿ€€ÿ€ÿ€ÿ€€ÿ€ÿ€ÿ€ÿ€€ÿÿÿ†œÿŒŠÿ€„ÿ€€ÿ€ÿ€ÿ€ÿ€€ÿ€ÿ€ÿ€€ÿ€ÿ…›ÿíÿíÿíÿ‹ÿƒÿ€ÿÿƒÿ•€ÿ‚¥ÿŠÿ…ÿÿÿ¡€ÿ‚¥ÿŠÿ…ÿÿÿ€ÿ™€ÿ‚¥ÿŠÿÿÿ„ÿÿÿ€ÿ€€ÿ€ƒÿƒÿƒ¥ÿŠÿ„€ÿ„ÿÿ„‚ÿ€€ÿ…ÿƒÿƒ¥ÿŠÿ…€ÿ‚€ÿ…ÿ€€ÿ…ÿЦÿŒŒÿ„€ÿ‚ÿ„€ÿ€€ÿ…ÿЦÿŒ‰ÿÿÿ€ÿ€€ÿÿÿ€ÿ€€ÿ€ƒÿЦÿŒ‰ÿ‚ÿ€ÿ€€ÿ‚ÿ€ÿ€€ÿ“¦ÿŒŠÿ†€ÿ€ÿ†€ÿ€€ÿŠÿ€ÿ¦ÿŠÿ„ÿ€‚ÿ„ÿ€€ÿŠÿ€ÿ¦ÿíÿíÿíÿÀÿšÿŽ¿ÿ›ÿ¿ÿ›ÿ¿ÿ›ÿ¿ÿŒœÿ޾ÿŒÿ½ÿÿ½ÿÿ޼ÿÿ޼ÿŒžÿŽ»ÿŸÿŽºÿŸÿŽºÿ ÿޏÿ¡ÿޏÿ¡ÿ¶ÿŽ¢ÿµÿ£ÿ´ÿޤÿ³ÿޤÿ±ÿަÿ¯ÿ¦ÿ‘­ÿ¨ÿ‘«ÿ¨ÿ‘ªÿªÿ’§ÿ‘«ÿ’¥ÿ‘¬ÿ”¢ÿ‘®ÿ”Ÿÿ“¯ÿ•›ÿ”±ÿ–˜ÿ”³ÿ˜‘ÿ—µÿž†ÿš·ÿ¹ÿÁºÿ¾½ÿ¼Àÿ¹Âÿ¶Æÿ³Éÿ¯Ìÿ¬Ñÿ§Öÿ¡ÜÿšæÿŽÿÿÿÿÿÿÿÿÿÿÿÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿ«ÿæÿ˜Þÿ Øÿ¥Òÿ«Íÿ¯Éÿ²ÇÿµÃÿ¹Àÿ»½ÿ¾»ÿÀ¹ÿ·ÿž„ÿœµÿ˜ÿ˜³ÿ•—ÿ–±ÿ”œÿ”¯ÿ“ ÿ“­ÿ“¢ÿ’­ÿ‘¦ÿ‘«ÿ‘¨ÿ‘©ÿ‘ªÿ©ÿ¬ÿ§ÿ®ÿ¦ÿ°ÿ¥ÿ²ÿޤÿ³ÿޤÿ޵ÿŽ£ÿŽ‚ÿ€€ÿÿ€€ÿ€ÿ…ÿÿÿŽ¢ÿŽƒÿ€€ÿÿÿÿ€ÿ…ÿÿŽÿ¢ÿŽƒÿ€€ÿÿÿÿ€ÿÿ…ÿŽ ÿŽ„ÿ€€ÿÿ‚ÿ€ÿÿ„‘ÿ ÿ…ÿ€€ÿÿ†ÿÿÿƒ‘ÿŸÿŽ…ÿ€€ÿÿ†ÿ€ÿ’ÿŸÿ†ÿ€€ÿÿ†ÿÿÿƒ’ÿžÿ†ÿ€€ÿÿ€ÿ‚ÿÿ„’ÿÿކÿÿÿÿ€ÿ‚ÿÿ…‘ÿÿ‡ÿ†ÿÿ€ÿÿÿ…ÿ‚Àÿˆÿ„€ÿ€€ÿ€ÿ…ÿÿÀÿ‹ÿÝÿíÿíÿˆÿƒÿƒÿ€ÿ€ÿ‰ÿ€ÿ€ÿ€ÿ ÿˆÿ…ÿÿ…ÿÿ€ÿ€ÿ‰ÿ€ÿ€ÿ€ÿÿ„ŸÿŒ‰ÿ†ÿ†ÿ€ÿ‚ÿÿ‰ÿ€ÿ€ÿ€ÿ†ÿ‰ÿ€ÿÿÿ€ÿÿÿ€ÿ‚ÿÿ€€ÿ€ÿ€ÿ‚ÿÿ€ÿÿÿ€ÿ‰ÿ€€ÿ€ÿ€€ÿ€ÿ€ÿƒÿ€€ÿ€ÿ€ÿƒÿ„€ÿœÿ‰ÿ†ÿ†ÿ€ÿƒÿ€€ÿ€ÿ€ÿƒÿ„ÿƒœÿ‰ÿ†ÿ…ÿÿ€ÿ‡€ÿ€ÿ€ÿ‹ÿƒœÿŒŠÿ…ÿÿ†ÿ€ÿ€ÿƒ€ÿ€ÿ€ÿ€ÿ‡ÿƒœÿŒŠÿ€„ÿ€€ÿ€ÿ€ÿ€ÿÿ‚€ÿ€ÿ€ÿ€ÿƒÿÿÿœÿŒŠÿ€„ÿ€€ÿ€ÿ€ÿ€ÿÿ‚€ÿ€ÿ€ÿ€ÿÿ‚ÿ‡œÿŒŠÿ€„ÿ€€ÿ€ÿ€ÿ€€ÿ€ÿ€ÿ€ÿ€€ÿÿÿ†œÿŒŠÿ€„ÿ€€ÿ€ÿ€ÿ€ÿ€€ÿ€ÿ€ÿ€€ÿ€ÿ…›ÿíÿíÿíÿ‹ÿƒÿ€ÿÿƒÿ•€ÿ‚¥ÿŠÿ…ÿÿÿ¡€ÿ‚¥ÿŠÿ…ÿÿÿ€ÿ™€ÿ‚¥ÿŠÿÿÿ„ÿÿÿ€ÿ€€ÿ€ƒÿƒÿƒ¥ÿŠÿ„€ÿ„ÿÿ„‚ÿ€€ÿ…ÿƒÿƒ¥ÿŠÿ…€ÿ‚€ÿ…ÿ€€ÿ…ÿЦÿŒŒÿ„€ÿ‚ÿ„€ÿ€€ÿ…ÿЦÿŒ‰ÿÿÿ€ÿ€€ÿÿÿ€ÿ€€ÿ€ƒÿЦÿŒ‰ÿ‚ÿ€ÿ€€ÿ‚ÿ€ÿ€€ÿ“¦ÿŒŠÿ†€ÿ€ÿ†€ÿ€€ÿŠÿ€ÿ¦ÿŠÿ„ÿ€‚ÿ„ÿ€€ÿŠÿ€ÿ¦ÿíÿíÿíÿÀÿšÿŽ¿ÿ›ÿ¿ÿ›ÿ¿ÿ›ÿ¿ÿŒœÿ޾ÿŒÿ½ÿÿ½ÿÿ޼ÿÿ޼ÿŒžÿŽ»ÿŸÿŽºÿŸÿŽºÿ ÿޏÿ¡ÿޏÿ¡ÿ¶ÿŽ¢ÿµÿ£ÿ´ÿޤÿ³ÿޤÿ±ÿަÿ¯ÿ¦ÿ‘­ÿ¨ÿ‘«ÿ¨ÿ‘ªÿªÿ’§ÿ‘«ÿ’¥ÿ‘¬ÿ”¢ÿ‘®ÿ”Ÿÿ“¯ÿ•›ÿ”±ÿ–˜ÿ”³ÿ˜‘ÿ—µÿž†ÿš·ÿ¹ÿÁºÿ¾½ÿ¼Àÿ¹Âÿ¶Æÿ³Éÿ¯Ìÿ¬Ñÿ§Öÿ¡ÜÿšæÿŽÿÿÿÿÿÿÿÿÿÿÿÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿ«ÿæÿ˜Þÿ Øÿ¥Òÿ«Íÿ¯Éÿ²ÇÿµÃÿ¹Àÿ»½ÿ¾»ÿÀ¹ÿ·ÿž„ÿœµÿ˜ÿ˜³ÿ•—ÿ–±ÿ”œÿ”¯ÿ“ ÿ“­ÿ“¢ÿ’­ÿ‘¦ÿ‘«ÿ‘¨ÿ‘©ÿ‘ªÿ©ÿ¬ÿ§ÿ®ÿ¦ÿ°ÿ¥ÿ²ÿޤÿ³ÿޤÿ޵ÿŽ£ÿŽ‚ÿ€€ÿÿ€€ÿ€ÿ…ÿÿÿŽ¢ÿŽƒÿ€€ÿÿÿÿ€ÿ…ÿÿŽÿ¢ÿŽƒÿ€€ÿÿÿÿ€ÿÿ…ÿŽ ÿŽ„ÿ€€ÿÿ‚ÿ€ÿÿ„‘ÿ ÿ…ÿ€€ÿÿ†ÿÿÿƒ‘ÿŸÿŽ…ÿ€€ÿÿ†ÿ€ÿ’ÿŸÿ†ÿ€€ÿÿ†ÿÿÿƒ’ÿžÿ†ÿ€€ÿÿ€ÿ‚ÿÿ„’ÿÿކÿÿÿÿ€ÿ‚ÿÿ…‘ÿÿ‡ÿ†ÿÿ€ÿÿÿ…ÿ‚Àÿˆÿ„€ÿ€€ÿ€ÿ…ÿÿÀÿ‹ÿÝÿíÿíÿˆÿƒÿƒÿ€ÿ€ÿ‰ÿ€ÿ€ÿ€ÿ ÿˆÿ…ÿÿ…ÿÿ€ÿ€ÿ‰ÿ€ÿ€ÿ€ÿÿ„ŸÿŒ‰ÿ†ÿ†ÿ€ÿ‚ÿÿ‰ÿ€ÿ€ÿ€ÿ†ÿ‰ÿ€ÿÿÿ€ÿÿÿ€ÿ‚ÿÿ€€ÿ€ÿ€ÿ‚ÿÿ€ÿÿÿ€ÿ‰ÿ€€ÿ€ÿ€€ÿ€ÿ€ÿƒÿ€€ÿ€ÿ€ÿƒÿ„€ÿœÿ‰ÿ†ÿ†ÿ€ÿƒÿ€€ÿ€ÿ€ÿƒÿ„ÿƒœÿ‰ÿ†ÿ…ÿÿ€ÿ‡€ÿ€ÿ€ÿ‹ÿƒœÿŒŠÿ…ÿÿ†ÿ€ÿ€ÿƒ€ÿ€ÿ€ÿ€ÿ‡ÿƒœÿŒŠÿ€„ÿ€€ÿ€ÿ€ÿ€ÿÿ‚€ÿ€ÿ€ÿ€ÿƒÿÿÿœÿŒŠÿ€„ÿ€€ÿ€ÿ€ÿ€ÿÿ‚€ÿ€ÿ€ÿ€ÿÿ‚ÿ‡œÿŒŠÿ€„ÿ€€ÿ€ÿ€ÿ€€ÿ€ÿ€ÿ€ÿ€€ÿÿÿ†œÿŒŠÿ€„ÿ€€ÿ€ÿ€ÿ€ÿ€€ÿ€ÿ€ÿ€€ÿ€ÿ…›ÿíÿíÿíÿ‹ÿƒÿ€ÿÿƒÿ•€ÿ‚¥ÿŠÿ…ÿÿÿ¡€ÿ‚¥ÿŠÿ…ÿÿÿ€ÿ™€ÿ‚¥ÿŠÿÿÿ„ÿÿÿ€ÿ€€ÿ€ƒÿƒÿƒ¥ÿŠÿ„€ÿ„ÿÿ„‚ÿ€€ÿ…ÿƒÿƒ¥ÿŠÿ…€ÿ‚€ÿ…ÿ€€ÿ…ÿЦÿŒŒÿ„€ÿ‚ÿ„€ÿ€€ÿ…ÿЦÿŒ‰ÿÿÿ€ÿ€€ÿÿÿ€ÿ€€ÿ€ƒÿЦÿŒ‰ÿ‚ÿ€ÿ€€ÿ‚ÿ€ÿ€€ÿ“¦ÿŒŠÿ†€ÿ€ÿ†€ÿ€€ÿŠÿ€ÿ¦ÿŠÿ„ÿ€‚ÿ„ÿ€€ÿŠÿ€ÿ¦ÿíÿíÿíÿÀÿšÿŽ¿ÿ›ÿ¿ÿ›ÿ¿ÿ›ÿ¿ÿŒœÿ޾ÿŒÿ½ÿÿ½ÿÿ޼ÿÿ޼ÿŒžÿŽ»ÿŸÿŽºÿŸÿŽºÿ ÿޏÿ¡ÿޏÿ¡ÿ¶ÿŽ¢ÿµÿ£ÿ´ÿޤÿ³ÿޤÿ±ÿަÿ¯ÿ¦ÿ‘­ÿ¨ÿ‘«ÿ¨ÿ‘ªÿªÿ’§ÿ‘«ÿ’¥ÿ‘¬ÿ”¢ÿ‘®ÿ”Ÿÿ“¯ÿ•›ÿ”±ÿ–˜ÿ”³ÿ˜‘ÿ—µÿž†ÿš·ÿ¹ÿÁºÿ¾½ÿ¼Àÿ¹Âÿ¶Æÿ³Éÿ¯Ìÿ¬Ñÿ§Öÿ¡ÜÿšæÿŽÿÿÿÿÿÿÿÿÿÿÿÿ§ÿt8mk@DXdo{‡’Ž}l[J9(P„«ÑöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÈX C†Éüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç¯w55šóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔpjÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø¨D‚óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞx víÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞK`æÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõx^ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖ/ ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð=ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöM4æÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøàÈËÛêúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû^Oõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò²‘w^E, !TŠÀóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþqJúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ׉@0Œéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}@÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ³CQ´üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþI7óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§%%µÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿê%îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëTKÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±yûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð`Gñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû9Pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿,àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿Êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿx¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçAÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚ3øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿdÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî,žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPìÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ>ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆ_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ<ÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿïKxKxxix>!xexx Gxtxx%ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿn ÿ  ÿÿ(àÿéHÿØ0ÿÿ#ôÿyžÿÍ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ ÿ  ÿÿ(àÿÿšHÿØ0ÿÿkÿö!Bÿù,òÿÿÿÿÿÿÿÿÿÿÿÿÿü ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ ÿ  ÿÿ(àÿÿþ;HÿØ0ÿÿ½ÿ¹Ûÿz«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿFvÿÿÿÿÿÿÿÿÿÿÿÿÿÿ© ÿ  ÿÿ(àÿžÿÔHÿØ0ÿÿòÿÿÊaÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿ* ÿ  ÿÿ(àÿ@¿ÿzHÿØ0ÿÿ›ÿÿSþÿÿÿÿÿÿÿÿÿÿÿÿÿ¾LÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍŸÿ  ÿÿ'àÿ@(ùökÿØ0ÿÿ+ùÿÿÓÍÿÿÿÿÿÿÿÿÿÿÿÿÿõ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿoŠÿ­Eÿÿàÿ@‚ÿíÿØ0ÿÿËÿºñÿ†ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6 ûÿÿÿÿÿÿÿÿÿÿÿÿÿû_ÿó*¤ÿåàÿ@ÛÿÿØ0ÿÿyÿïjÿü600000000000000Bÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ×ÿýÞûÿÿ`àÿ@EÿÿØ0ÿÿ*øÿdÇÿ×~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿX˜äþõÊT½Ø6–ض(ØØ¡Ø¬,רkºÿÿÿÿÿÿÿÿÿÿÿÿÿò óÿÿÿÿÿÿÿÿÿÿÿÿÿ¡3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿdoÿÿÿÿÿÿÿÿÿÿÿÿÿÿ1        9,«ÿÿÿÿÿÿÿÿÿÿÿÿÿù˜ÿÿÿÿöÃ<øÿÿÿÿÿÞ_ÿ°XÿÿBÀÿ`xÿÿÿÿÿÿÿÿÈÿxÿðøÿ(¿þÿÿç_çÿÿÿÿÿÿÿÿÿÿÿÿÿ˘ÿ鸻ãÿù"øÿ̸¹ëÿþ;ÿ°XÿÿÚÀÿ`eØØçÿüØØØÈÿxÿÿ©øÿ( ïÿè±×ÿÿ]$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜˜ÿ°Ìÿ}øÿHâÿ†ÿ°XÿÿÿÀÿ``ÿèÈÿxÿÿÿIøÿ(­ÿÉÿ×_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿe˜ÿ°£ÿ‘øÿHÌÿlÿ°Xÿâöù(Àÿ``ÿèÈÿxÿØÿß øÿ( ÿÿ@XW}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2˜ÿÁ89`ôÿXøÿ’hiŸÿßÿ°XÿÈxÿÀÀÿ``ÿèÈÿxÿ°ÿ‰øÿ(5ÿýPPPPÿÿÿÿÿÿÿÿÿÿÿÿÿú˜ÿÿÿÿÿÿ·øÿÿÿÿÿÿ_ÿ°XÿÈÔÿaÀÿ``ÿèÈÿxÿôû-øÿ(@ÿùÿÿÿÿ@£ÿÿÿÿÿÿÿÿÿÿÿÿÿå˜ÿÝ|Jøÿp8?ÿý*ÿ°XÿÈ<þìÓÿ``ÿèÈÿxÿsÿÇùÿ(ÿÿ)``ñÿ@µÿÿÿÿÿÿÿÿÿÿÿÿÿÕ˜ÿ°øÿH×ÿjÿ°XÿÈœÿÿÿ``ÿèÈÿxÿÐÿÿÿ(Îÿ©Dÿÿ@ÈÿÿÿÿÿÿÿÿÿÿÿÿÿŘÿ°øÿH¦ÿÿ°XÿÈëÿÿ``ÿèÈÿxÿ7ýÿÿ(;þÿ½z¥ñÿÿ@Úÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜ÿ°øÿHƒÿ ÿ°XÿÈ_ÿÿ``ÿèÈÿxÿ—ÿÿ(Fåÿÿÿßÿ@íÿÿÿÿÿÿÿÿÿÿÿÿÿ¥&@,>@@6$@,@2>@@:2@$@$ @@ :hP @ýÿÿÿÿÿÿÿÿÿÿÿÿÿ•ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿu7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿl0 ÏϦBŸ <  63¡ÐΦ?         AA       2    %$    Cÿÿÿÿÿÿÿÿÿÿÿÿÿÿy?øÿíðÿÿ`ªÿרÿÕEúÿìñÿÿYÿÿÿÿÿÿÿÿhhÿÿÿÿÿÿÿPÿÿÿƒ~ÿÿÿ4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆ¸ÿˆƒÿáôÿv>ÿÿA½ÿ†„ÿØHHHúÿHHhÿéHHHHHÿÿÿÛÒÿÿÿ#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ—Ôÿ…povÿóÐÿ§Öÿ„poøÿPhÿàÿÿíÿ4&ÿéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦„ÿÿè¢^ÖÿâÿòŠÿÿæ ]øÿPhÿñˆˆˆˆwÿÿ˜ÿŒyÿ“ÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿµƒîÿÿÿõdBÿÿÿs…ïÿÿÿõbøÿPhÿÿÿÿÿÿàÿÿ>ÿãÍÿ:ÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÃ<‚Þÿþ$±ÿÚ=‚àÿýøÿPhÿç88881ÿÿÕÿ_ÿÑÿÿÞÿÿÿÿÿÿÿÿÿÿÿÿÿÒ À½åÿ_ÿ¸ À½ êÿWøÿPhÿàÿÿ{ÿïÿxÿÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿáöÿ}&ðÿ=ÿ¸öÿ|(òÿ;øÿPhÿè@@@@@ÿÿ"ÿÿÿ ÿÿ¼ÿÿÿÿÿÿÿÿÿÿÿÿÿôbÿÿóàþÿ²ÿ¸bÿÿòàþÿ®øÿPhÿÿÿÿÿÿÿpÿÿÇÿÆÿÿ«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!9 ÊÔ·f^¨x9 ÊÔ¶b¢¨4D¨¨¨¨¨¨¨I ¨¨ R¨R ¨¨ šÿÿÿÿÿÿÿÿÿÿÿÿÿÿP‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€fÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿàXXXXXXXXXXXXXX&õÿÿÿÿÿÿÿÿÿÿÿÿÿÿWÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ%Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿo ÿÿÿÿÿÿÿÿÿÿÿÿÿöVÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÅÿÿÿÿÿÿÿÿÿÿÿÿÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷éÿÿÿÿÿÿÿÿÿÿÿÿÿžéÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿq²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿE|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿlÛÿÿÿÿÿÿÿÿÿÿÿÿÿëêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆ(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!vÿÿÿÿÿÿÿÿÿÿÿÿÿÿe ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”Ãÿÿÿÿÿÿÿÿÿÿÿÿÿû´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿü+!üÿÿÿÿÿÿÿÿÿÿÿÿÿ¶Kÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿM#ûÿÿÿÿÿÿÿÿÿÿÿÿÿøxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr%üÿÿÿÿÿÿÿÿÿÿÿÿÿÿX¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ 9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉ Zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿/õÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´Þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿw‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœ’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYFþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœ ­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿȆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜ?Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ:Ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ’ 1äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜ? yôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏ @øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ’bäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäQüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöš,LÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó0eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾l#=ˆÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüJxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ“mS:! #]¨ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿieûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÕ¼££¸Íâ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿEñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü{+àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèA¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀVìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ†°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíJBÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð‡QÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿævXºýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙdyÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø¾S2u·óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó¹{=:z¥Èìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöã±s54Tblv‹”‰wdR@- ic08gÙ jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿR ÿ\ PXX`XX`XX`XXXPPXÿdKakadu-v5.2.1ÿ fìÿ“ÏÁ0Ѫž¬Z ¹´ddyò¹ò5&GQÂ;)ï½UÏ8X‚´b°raæ?JÝË ã˱ø½t1Wɨï¹VœÌÕd3|–š[F|üMåa€€ÏÁ(ÍxRÛ6?m’Kù¡Œòþ6˜îË”nÊnxâµQÍŒ;P ¬æ‘Ï0íQ§§ý_/âÚzW&ýiü÷Áà?ß³ß?½¿kHª ì9jŽÇà?4ˆüÒÀ„–d}XêW€Ñîé]Ï8Ùbîx…ð¯ºûˆÎ*ýƒ_DJ8>Í1æÌ/LÁ­guËѨÇVM)MD­†±iañšP´M$Ùæô pªt›Öm{¶Ô+\ä1‰œÈ$@áB·vI¢OºÞƒÔÖO{miAvƒ¦ôõØ_®ì}ÁÑê"jŒ/[[NG$¤(]Tÿ8”ìí‰þcW0%§ÂÐëÒàê]±ö‚?¿§Ä8Ô^²¢ãÀ&¬1›™U»ÖËÏH2æ×¹^h2$¿@ y<½€€Çà‰?4h~ ËIç£\©“$í\ôî¬6Ÿ´j¢ ú}ðÉrWò‹¾-¸y`yuogkÿ]Kާ_š4hC5QãĶ5¢Òu˜ MÐã• g°ô‘¨:'­qoÔEÓåžÖG…—¦g!ìò~¬tQvÜ:Ž]ÏÛüò×jFrQƒ’gn N,á$Ìó•µòŠ^º_çiqF«—R¢@ÎkŸ­»xÉ90&ÄáFŠnŠ—´`ÕlDfª‚³Å2M•sž Ål«Î_á·i°Áóƒlë`½âÏÎÝŸ»À|•2Ö仈˲ðWí*KYÀ|¢ñ_ªÌµÃÇ.ºo0S@ÔîˆxU?Ì+`ßw æÕ§ +‚¯!èv°àB¿;4SbΠïÏ0ÎuMqô¯‘Ñ~ÔZk¶{_å˜ÚŒ"ûÓ£ßêMä‘êCLalýëU¡që’#º3\'>oP»Ï³‘Ì4^¥å·Ç¶,`TJ>vÃVðÆÓ¿Xå78¾p '¬U1Yxšöoä0ëf>’Î… SEC5Ï®zqÇØ‰73–¤m®6®ÃØÇ-æRU$ò2_6â·~løCèv‰`6®59lcÚ®2íÃü, €*a¿‰‡ºPþ##©$ŠœèÞ|k£²9Igè[˜…pk7:A`YÿU‘ªt"’Þ`H9l%yL£G€€ÏÎÕŸ³²}D‘µf¬”k&! äºãV r½˜¿ ,(1Tt—L°ÿ*á ›úìP@W&ÈQ¹€J4᎞Á,Ç#W)w1 êš²¸‰©­¶A/²h‚èÝ.¾gKÌ ¯©/w¼s”y¨R|¢k̤˙­øè;ø÷'i&±{9ÓQæN:±þ\îÁ:qû£%Óï©•YKU÷³Ð]Ê›—6 ,Ú?@Ãb‚1rÛ-«bĘÐo° ¼£>W@Ò†W|ѱø2 ê¼`‰QkEµÃ±•üŒ¶sÙ¦+µ3'I†–ËK“áT1¢¶ý C3åm®ˆŠïFþL ˆXÀeáêö|_íôµ1°BZ¬ö7>v½&“óæADf ÷/̪À!åÊPmÌv^¯Z)ópÝ^g¶È¾Rª#ÔÝÙÓò…]ÿP»ÆO1VcTÀÓø1›ì Œ!œ;ŠuÍí°Ìäô‘C“æj9mÎzBšyÀ’~ŒLœÖ| e¬–×?Ä{†£ó~„þäŽ}qL´ý3CYÄ·*1\f^4zAH$åÓÃç„F[ä÷¯gÊuôÏQÂÐE$#ŠYXh½t.1œ°ŸƒoÁîÉÆmLŽê£©[(±Mïv–fp=›‘ââ"ûޝÍd¥Ðe!êPŒQE#5—³àj’àŽ¾­ó¾E¾õ7˜²¥ÙNì"-H£ÃHåÞvÚ$)‡˜í³ó‚¡“‡EŒ˜%]©ÈÚýOûÜëÞϳ@©jÆL‡¸<~óåæŒ~ã v­½DØZéñ2”d—TpQÓDývØ?i‰^u]~¶ØKæ8z+I¯Œ ô˜ßOx› ìâ_fÙw5X- Íó€2vZ1ó®ïmq?;èz5Ëà ^ ¤¬=E½E¢K±Á3Â>?q2ö¿)g¯Üi{GS>­Xøom*&ÄÇPÅâaávºB€Ì¹‘ÒÝ™!:k¥ Oβ­x!´O/Ðç/Ó`‘ƒ,P‰HÀÚú(sõÀKÛÐ]h­ÒÍœÞ×']éŠíÞ/DZém碆83nº2¯„qô‰D¾§ÿ0ë§ó[ûW‘–C§˜™¬ k:9Ï.rŠÕˆq…Úk`˜ÍNJÞ)½ð ÑŒ¼½Y * xb+"ß(}µBÙDæ2¡=È!m¯>ßüÜÿÛ”ûÁ yµmþJÌø½“xÍMÑ÷‹ ÷ Vj)ÒÆXt7]V– HŒYFK²ç¬Š–wm›ºtfèëÌ­rr/9šmp _¸Y º>u©"‚úæØ/ZV/ ¹6÷ŸSy%Ç2šOoŒÎSÙí¤5ý¥š=•@>†£ÕÁÍ™"%—INP'üè¥ 1ÏV}ë&›€È¥E‰Åƒ©sœlÖ5rA}ì“&¶Œš+ó[4RpÒò»Sö&ÔF×H†ìØÐ²‘E´"î¹®[,Ö°„R 4‹®©VBÙ>BÒ¾þ›ˆÉä°Êg2.[ƒùù’¬\±?'¹yÀe쬂Ç_Z¦@¬ÔêíK¬8·—íÜ‹ˆ„ýˆVÝ7ü#Æ’Ð@°qåM÷3E öØS§Çæ£iRÃT¿(Zqá‹vZôZL)gu˜€úï tn_è‘`SÉç¸#šÅÒ'ž2LfþÃækÓ¼”Õ°D@dÄê'OBWcSµki=E¬‹ì´€ÏXtÎ[Ñ." #Æ.÷§"¹íªúy¤ãÜ'¿+m—~©b4£jÜ“ÈSv¤Äù•¡…W ’6e²y¢Õ /llAú:_¾ÓJ y'nQØ¥ M~X´Žší‡¢ê<6[‚Å·3Û~iˆßÏþe-&aùbЍdЧƒ€µ-^4¥rvFÆz7›Ž[Bv«‡*ŸkÀ)ÝmƒÍz}x¦]³Ð€øEbCJåóï`ç kÇ}¬[®I(½¦ÑÐGõ,;ë9±ÐRk`FȨ®ƒB2õþ_;õÉéºt†Õ36Mr8 °6cjIo¦vÈ7ŸŒÔº9ÍA„¨—íÇd‹‹;¸bK¼´ƒn €€ÏÏ¥©ùô—ŸJ`¾(„öµT½£³]+É£1¶äÝã™õ×ÝåÎ L*òý–$S%µšiaªW†ëm™c÷{50núèZÍ0°gŠZò71E4ètÞΨÙx¢¼r«æj˜ÈÓ~YFîi;fårÔ‚»…WØv‚+†ùe \¹QLq#¾åÁTýP%pÓåŽÝ‰à Ýéo{¶§é=²ýRz«h'ëÕ&2Å÷°1Y‰¾IŠa²{ ð·†â<žíÝÛ)¾³ŸŒkBWО^/(½Ž‚3SóŸ<ÕÌ#gÓfEþNHõøÙvi€”“H]±ªèp0¡Ø®ýÊé™3Ó”à©x5\¡_óÉäN“QN«;¼Lf æ.ª˜±0äFVô™Ô¨-ÚgÁ!~Wðß1ľIK,¼iévºÓLÜP­ƒáó1¶n9Èè~EúCªÑBYÏN:xËgMZWÇýË¿y}7œ˜ ê¦ÅË>’­¼üäÉ$x›ÃýÏDùUý$Utô¦˜R€1í®6]¦’wÈ>òàgw«)Sy¿gšµÜu4õ` cs‹ÉªÄðmB©½©gÛ@iŠ­Ý´Æ÷¾VO‹À=JÁ4h?'Øàåðî<ô:S~p×J,Ìg”+`AüÿØV­À6Á?dw·O£ëâ.ü¬Ùy’3…ñå¶MéèfÉQt{›ü?³E✖ÐwÖ*†Á íkËeRºC¿RÓ©Ë@bê‡ÉÍÏ/!FGã=Pâ;[þ ñ8!Nö’I1“aÇZÒ Á@¬ƒÌl~#yÚÓÑä˜ý'v…æ¥D ó­HÑÕ£dAaû5÷j6ÅõÀ.ÜÂ'Ú¨Ò¦²ô?ØØ'rL¢gÄ}ú$nQ¸Ò™ºìõ×K>¥Tl.   U)Aõ¼SÝÈ¿ï..óà “_ñãûr{í‹ùu_ ž—Üh´è¹ ‰W¬wÆ™¬)QçèG¼ÿúÉw'x@ç]ψ˺ã®=Ûj¥„ÁU)‚¬©‘’Že寯G|* 5^Iæc;{ƒÐ@vyU×½ðpeW¨.]‹ÉÆgƒA*fU+“)iLi©®Â¿÷LóÜbn¸Ò¿³þé`˜R“œ/ø$” xeoòŠryªÄ ^–µŒÅÀ†ôҲļ“õÒòƒ|šMG^Ö>§_ e‹umŸ¡8qâãDÎàpë?+tAl8ŽãYp¹›¢Î¦aÎb$ð¤òù¤O´T W&­-•~~ͽ;MBKçÆ.Š746ãeáLˆòÆÜwü ¼9fÇàÊóZA/±Kðèÿ,ÿ@`áUýfoè·PÿdRà’åèãnôP³)}Ïn˜G¡táþ·õŠt5C¤]"¹I8^~´8aêóH!I㓆”fÿcäïWJJ“š$**tùK èà+bÜÚ¨ámš˜tŒ3eû7[· ó­d}¶cû–¹Fí—ŒN|5µ’+3a´ËïÔÞÏL ãç‰fg5§!úÛ•¤»rtb~}0V|¿?ìÕ|dŠ„øH¸”Š~«•ÃáZ9o¥¤Ð®ÂQ]´ìqXó,p›‹_Eú³'ÕÜ 8¸ÉÏÝ‘±Ï8Úh*^b<ö›d–2}…ϵ©Æ*¢=Õ½ƒ·bêà»mü%œÁ¨jp¸˜³R¯*B‘^KÀOõÃèq´»àÀŸ)ûæx2Ñ #Í-ßÕ‰êîD˞˭Rž¨GÂ9{·9ðJIËŽpÁ†ïž‰çןˆkÓ¸¯Å–ˆ±ðLßõ³§yÓ1ê{{Kë´ü•‚ Ê ¥Œ‚Q¢ìÊÒòÒM'ì»mìË:r´w…is œ²ØH»4Iÿ!úa:1©¨ÊÅØHùïóÐM­Á…ã‡ìD¸Ït'Þ’ik“,RN8àNxÃr&ÕXhJ^Ü«*€>’ñ{ÐÓæ;AOK6çND¢´h)Š«VòœomEø?'Ó¼¿t‰ÏJ¿Æ˜–&µ’qÎõ6&\¨ó[§ž)Pï þ…Ò]Î9^Î ƒÿˆ\çèw¥Yû§P!ަ»P6Aþ¼úE}Ëf / „Ú¹^"eÕ¿«j£)+rˆ% ‹§~ü¢¯U•[V þáJ´wPÍ–L-²ñBŽÐϸëîGDª¤Í^Àñ2yxúÚÖ 1=f{oj†i?ÏÏÖ†~~°“óõ<åThó}—P'÷¿š^·³jóÕÂÆNp|‰ElcÔqÓ=îålb±³c¡7å†OûwäW{·xVÈ㮥ÖÕ™uQA{#Œ¥âÒ™7o ým¾Ò‡×¾o«€Zú¾UnY=Ÿh¤H¾1†|Æ)ýØß ²Mº¥Ö´ou”BR]¿lˆéÄ qFFÃEŠ< ~²h½ã|[)dè@0Äw¯M6Ù,ÉÖ®„D8±9%!Óˆ6&¨q±=“ŸvóÂb3Z™­¢y@WÅã‹-¿*-”,»KÕ™YoÃ¥ë0Ë9ÄB=!½…ïo§”¶†…ŠÐã–suøíPúêDÝî÷L5h-l*´v"»‰<£AÝé@g{Î (e Áúœ TÆÞ̼«„9{‘:”âŒg•(éþ4pyÕ‡Û½Ò£_†æf ëçÕ47ËÏùOÚÒþ?xc†Íj‡ÀÿŽ¡X µ;\)º …Œ>}½”-'c¯¸û4n bl¿mÓŸ¹Rw¸JO™-ä¼,ðó4uµP.g 9"!ñ¹}³¿q~1½ü ¹7ߨ[èaSBÍõð©§í®´=/%ë~…j#‘wÛÎÁÓ²2qMÐpðÈ›YµÛÑS×Ra{~éò° iYÃ[” ÑØˆ“viïçèÈ¡åèâmÙ°²«¬Œ}­è…¶Ô×u,Hö¨òÙÚÞ3;ùU³'×^êì°F/“#~l>Unõ¢è8 _ÁмuÜ ÝBtÕ†‰ä¨·¡µ1ÿD¶([¨ßÚ¹ä£5ÞH÷¬—Œ…ü¦ö1\<ÿFDQ„ì¬ÒT±ié$ô‰ÇwÄI‰èU FZÙ~Q æ’)ýî¤Ò!Ú´v¾yVjO…Û7tŽ<>Úk<ÏN"üñB, 5+B!æP;3}!™I¤¯aéÉèTPJ×üذ/¹„ngk”%ñ—€²¯IM• ºrÝëL Vÿ,ËÛN â.tWö{V©Ëi¤Ë#Ù»*[ºIŸâ…Ö_áœW;ø)«§B+°øëÌKÑ- ßz®˜pop¢½B%ZaGø«§¯÷Ûd­y?kWiömîy6L ~w¥AWh@ }‹×c:387} OïóWó°ãKæ+ÌDÙ]eoß|›Ýÿuª‡ÌßXò1Ã)@/#ÅWó:O|Y<{ãp¿J>ÉÅ® ìæ1Î UJ+¿q/‡¸? u?Ãýñ‘© ¡èÁA`˜¡[c§pë4´.€Äú’.þ§ì¸Æì¿ÌŒ%O”‘j,ÀÙK û7Dø#..ÂÂø)ÂØVé÷áš]'çBpO†ÊCSïÅu²t*ñpTŸÅüZÑn¾Í~»x”·åB£' pî-xi:,¬æ#u ãà&)÷LÂîÄ~ØŽ{Ö4÷ ;ì[Æ¿ùß¹-u lê_¨Öø¤™Š²<ÿ?˜áùÞù d¶†•}Ñúþ¼{D˜Eî^ãp¿9ÉßÕó""!Á_r`OÑ8·Nl?‰E£¨Ê¥ÁÉÑ”‰ª5¬­)w– ¥ÛBGâ°ñÅt,!Qiì@Û%¹Áƒj&Ã}'ƒâ6(õöÞ%œÏó‘GÄ1ËÜYo_dú²mIþe’óBPŦٽ‘?“Èwbƒ\…§á¼ß„ .9øeøFç"RðÚKî ¼4²» Hd±9ªP; u;œVGDa±/ÕýB†~ÿA?è{ÿzPÈYhM B’:ì’ѵ_§V_´/T)ê©pT'©qB»¼TÔ˜¦ÿ=É´'—qXŒ=‚KㇾqS´úé[¨ØoZ<ÈÂÝ´•"Öi®*Œ° 9d@A%K;9"»0e‰ PO¥!—ì{_—Ïäòå˜- ËmkÁSÇøi×Rï‡K/ +FRÛjI÷¦†^JvØÈ:Ú¾ôT«²\ñ†ÍY5ä—±Ó©D9`î¡£r‚ÿZç´7:¨Ö_Þ~惒…ÁE|!Ëd‚p‰ÖWÚ •j. ²4w«¤›Lס†ÛXdØnrcD|cî 1 Và?µ<Øn›%4XÜFeg!ጩf€ðÈ56RP5¯¨¾´‹¿VI3g¼óǵ`¤éE|Ãý¬¼2ž¿ MÔ2•‚÷¬)´Îïë.4œ‚÷ö+Z‘øËù?âŸAþkÎŒ}ÔªËÍ\I8ŒÝ*àœ{Õ¤æŒc.÷ÒB#—XNX‡­ ºœó¹Öc“PïôGãÂ!ß„Àvì%Ôê.{3Áhã´dT´Éã‚<¸bkÙNCêÂ0êÏZ·ÔŠ´â3Fò̯ñդІ.¢»6êÒ™â/ÎRYE˜Ã‰ë~AbE#èÍaø4Ký“<ôœ?}1›šç¬öb‘®ÜsåĽ”'Uœ¸ϲŒe5جºˆÊ'³ÕáÓqž†—¹Î‘x_>? ·­ˆmå>ų‚å´5Ä;B§¤”##’ζ„R#FW];ûó9\ßÙ ðYO?OºtðÌTKöˆ+Låêç«%í]÷{í ÝŽ§sš‰BÞ³,?“ çÍÛ¶J X¡ZÐF×)ŠO¡th¸Ï|Ò½µ6ࢇgÞ1À+.ß“…¹Çmox©¥85Lxä.Ù%hÁ>‡'­[EÞ£âûxåÀ"×a]½Ï°û²‰•:;PXŽª\"Üû¤7-Šès¶Ü|†eèj0.€b;$Á»Œû¡§øD p½Ò*ÐOÃ",Ox9„Á¥ÓúÎ AIÜ—¢š·IÀ-§¾Œhž UÝFð4] –¼çMHØtž¾¿ÊTs˜Špžæ±Ÿ¯Þl3Ä­ !Ó› ®£~S\wŸ" ö~ñÓhÃ`ÀP)†Á_}ׄ „aÄ ô8'UÕïZ­ÇA-°~CýJBW\‹þx캌xÀ݃»Íióÿ1pþ¯ÜøœoÄ…OÂÖq_iÕðnù÷"QÈ‘-!ý•‹¡˜ó'|÷ºœë/xƒŒŒç#6.î/ëH0³º[ ¸«êãî{®\°`ªÒsèç(ŠJ½ÂŒü0¤‰šC(Á’¤@v!ü¬¢ðÁáø@í)åmXå;\?D‘-ÃñôkÂ0Ž€‹7~=­†Ÿ/aÊm_2PYÉ<ÐAÈ;¶s¤`ê,i”˲6‚fs%Õ“¡kEÐ’Y©”²‹“ ZìdÓ{S-ƒ“ÖiyA_ÇëŠk1^γ²—E\ЉӴo€-̪:ÍO ˜0UM|‰ªŠ²\¥Û½3Ò½  (Um“‡&Ð.‹`.]“ºAõ¹n!SC\™hòý=ã·ƒ}F òBS:Ñ)OŽöþcõÑ„ë(™¾Îiî8笎›”…EÒËys2ôks»«J_”ÍyÍôÁ'æÙ/TÒ±ÕÓú¨îîø& ûó#†#'º÷ %·Ñj’„ëB[¦À-N2â¤i¯_¹5!x½!»Ýã¬DÑmxŽ•ûøÿr&æødþÑíö6+•³¨<Ð0·²=ˆ¯—Üú ÌVþé'ùä8<‡ÑùLG÷eN…ùYÏë5!ÑÃ&›ƒ.Ì;£@QpÎ.u@Ò½Þb©iåÄ‹ËÛk è%|Ì’]ÍY¦—~s&sù*Ð^ß‘eøÆh ¼ñ@¯©9#¹®`¤!o`‚_›Ýñ¼iKŠWwñà0áƒrvµ&«q‹<oïÉd’L±\à'3.ê]£}z’AŸŸf'Ê8]ßÄ[dožgë-éxéÈÆ ôS‡•ƒÞÂ^aÖC*ŽS'bd ¢aªzˆ÷ø)°ùXxÐ9U »×Ì„àx$ ,Ú¶bºC1-åIß´oÁrhóéf*ÕÊÃzž°&Ìßœ÷rþekÕm’;!NƳé‹zòŸÉyµèÊ]P}uûÜÔ0ÚpÙÄA? Çêä$µbPœ±…éôµµ)Û8*‰UùÃR±uÌÒ9¾Æ«Ü×7E›h·&{‹fÎ7ã±”º:£µk§9fž‹Ïw¼p&@Š6u qÑ 8¿]õoX ptÒ_ðœ¯ÒýŠº\åÿyyók Ý[*>)B§Rùñ,£ÿG“»(×X´v~—GBnN3v>fEAM†ãj#æšÌUf“r¯ÞóÓ ¨l-ÈèØ>Îî”’±É°b™Ï„R,‘Ée3Ü€Vò ,ª ݇Z9Ç©–ÆÿÐyZ’•Vç’ ý¶×<ÁNì•]ëÆ2‘`˜¨`w¹À¢“"ø%7ðâ¸àÕ–·¥C‡ã.¤¦æ&â´Àï}08ß)øEq eQÕ‰½É…Nñ“g•'¥îtãÿK™×y®è`ií6Þ©ç¹¥Ê ,ßMÙ+]ÙªL•(õ›^’ PXÀŠvïÁ¨kxÙ•ðu6ïc:*ø|ì¡ë ÅëßøHéêÿDY§žô?Á¿Qg®ÙÇCzV3ºQó²ìòÖþ¡àîT+~ù££9{{œ5b¸Ø(e› (ì{áÐÐsKÈÞ´+çJÎ¥Áp‰ðý9F6v"E=ñÈ(;[Ó~Æ1¿ëXþeµ«0LÏ.6€©I{¡÷dÖpm]±GŠ…³)!Ïß…ÔÍ{ïl FmÔt“@ùÞ7YK‚~Å–6Œe€Ô}­bâŸC’©é©ñ%l >\ÑòÌ’]eUJ²zc¼JµÛuìð¤Üž¸j„yЀìÀۜ·V÷ŸsàÒ(^Ÿ„úaI›±*Ân®–Œm¢A踘M«T:Ù¬qÝ«ùÛR޿š€âuŽú‰BÓH!¾Xª®xóî{…•j¶ ­91\ ròÖb /é°eDõ}—Œümáˆõ»²%LYÁÿD1Ž—ý— @ôÉü5ÜNgfe’(“Yë”*?LçåB²?F%,øé¢q´´þ(QQA*!£fÐ~­Õ´o ¶'IÄÜøË!ùv%ÄÊ~¨Ï¥ð=V]nUÕ[Ħk@®ÞHä83ás!^åM;eaæË—„ኳ<Ÿèa¢ìÜÚ .ŸÙ±ÿ ³n¦YÚî©Ã º„¦$§B;qf”ü×…’ÌöU6%ncsÅU”¾°ºD~Ç”*Ó›*ˆá¥!•âÜRÊ)5ý‚Îh}ï †üu !ˆûaj™Zž%«}üašgö‘‹Q¼kUööÊÍ• Á8IíŒ3§¾Ç{­ FÉà„±°oqÝâ&®†h-èÐÛ<œxôјX=ùalôEÊva€ÎiÀàø„ _µqerí2…Hz*Ïy¾YÁÞ'˜Ž÷øËþµ\?€\7Ë`ÂBb™×yU²¤ ±dÖ“[þÜ.Ÿ%·a Òžœ5Zç8.-'ùSú¨¿Bº‹¦®ÚþþSp;š¢È„л€€ÏÏÕ~~£øzf€óz®eÁ}¾ ‰-³ßÏ›;aV" ˜äÒ*‰Ý4ŒˆÛ´5.jnÒ^¸Zj´ªéLP!ý'—€X‘ðj¤Ø™ðMœÊïÉn@Ü„h¢ÈRœ­‹è$-^.¦R%CLSæèjáFZ³.º©ÝVœá?’Æ9þèÐJþ>MH°¼Úï’ vµsÌ7’&,8¹ç~RôH4Oõçw†©G¹±)F¬¶6•‰oä uÁÛ¬r&zâ²h2ÕRP·ÿf;±c˜EÇJhq¬ Sÿ$®ðr@0™™=‹ÿ"?­R·‡)ðz8`u8\ûÙæ…\j=+;£ ;F&ñ‚Lþ{³ÝJN”²•ýîÎ;¼19úø™"F’¡ŒË‰I{'‚ñb|zÆËB²S1„ŠÞrö;Ô”µ·•¬Þ£Qû? ýsLâ…%{w€Ê—v–å"|ª¯Cç´‰á5grJÕ.ÇÃ@Gˆ‚ªp(u†x1*Ö«Ãg-àõˆëšx _†q²¢<ºœ…¹v0lõr¦2%X©KÃÿlçÏÝ3 e]’‚Ì£E!O§*mb6á;ˆÊGvﳃ/¤í¯ninJÜÖ@”Ÿá%õs³¡°«š¶üàX„6è–dT«²1³ßÔÆž®6­öÇd;ä˜%˜@LZN¨*üwDHDK½¬å¹™ˆÆÏô߀xÃ1µâ¹T„Çm ¬gXCR~°}]„Ök ªƒo#è¯ähÌMÿmöÌ`+‹ÀNffc³`þ>²z½;´}DèþóòˆaÛ¦ëÕÍŸbj×,”ù:}L¦D¢®rX¥¢kw¿Hd`sb£aœüÏž“¼‘5¿Ù;‘¢R&ƒ†Zf‘˜J£‚#WֲߧýÑä„á•Ry/#!œU²}þ!ÑSÆ.K|¿Þç’cF~?ÌÛ~%mE8K[£VõÖÐÏE&7ÔENŠ|èúÊ™&jˆÁ;&*zM)(¤0ÊŽþ‡Ð"ÊŽ6…Éî)çÒ(ÐT[5Uwš]\*–0³_?\lf}R=Ÿ³5¿Mµ~ûî%§ÛÍý,O´ÆaYB¼;ê_l}’oC¯•-™ê€Í”EZÛȃ7 ް\ˆöú¹s(È™¶OU`ÞVÜ(*ú³†HØñç@¿¼Œgéüxç1«R@ŽãS5d>ñ̃3r´Ò)ß3Uœòeƒè‡ãu_Uü`d¢¯Ûßm云ØòLœ8g£¤'H릮!ÔçøOw@¥]©—0”Tqöêß¹ii“¤aÌ_©Ê$úÕ=ߢñ…mF‚¹|ëú¬þ™nH´íņšÓÖ šJ7L=úOR®bDPõ­•—óÒg'o7VBéwž½S®vÎs RS³½6<­öêàP8|Z²”*s/«öäûê—O¤6ˆKîqhÖÏèFù_4vȦ|2béèÆKÊ®˜¤‹jT}-¾²uÜð”f.Ó°–1uÆ?9rA‹‡Æa^Wû*<¼§ym{³q¾µf6°Åt*œì»~B7D&œÈz²uÀÓÄ'Kí’‡]À‰YW¥4PÍ{‹nö@Kù¾†«KíPÓr*’Czv`»>„*äh–<öI_®‡}@¹“O©nh`ÂA #0úïö7E+`²î‰ýPØ6öu ݘýŒÅò²T` “—¢ÞÁË7&™™ciÉß-ƒ„ oò&÷ki4œXxÛÑ0ôChƒ "3åL/¿Ítx­Õ8'ÚòŽJ?Se\sAá’Y ^Ñ*Wf4§¥˜¡JÈ'#>N™ú¸ø’$Á¯'3ßST9E{Ï‚ž$Ÿ¯Z<]‹Ûµ8T¢õUY2 p$ ÚÆ ƒûÜB²øFŒÌ*6²»7šV¹Þ!U5syÊ­¡?,jTtõ1@ÒSíu.òåsfû÷R>!õàøbƬ½›æ(&ï1àœ=€#f˜™Ô¼÷N/GJ7L1ÓĈ݇’`£T:ï«Ç|o‘8£ù¡/ú&³ñj ¡ãjÕ…WyG”—2"0yadúq ±@Âpq¶×ìmÖ.º}‰H™Ã@”T“œ܃&]]^“ËÀ¦fˆS­àbê¡<ºrù¡é·<»ÜCãi*&Çè=æVyŠ\É·myâ(À@iƒÿI§ ¾g<º2–‘wê‘u‡'a©"çiƒyŸSoÆ·f¶Ãämà<ŸAH§Ãó ã•pÊ´lw¨t'‰šãV ¦5U9ÚÜØqÔ%êî àÕ€¸¼„ NgÇŽê d)µG{èö\š*ý”bi¼ò·Å®Èÿik`qÆyŸ I…ì\°özzvòºd퉇³ZâŽ*³óñ~6+ï²pàS7«hwûÔmòÚãrf¾ø;‚â> eú..áN½"9¹¡ùH¤ñÝ0ôACÞ伌~oV1vw¸¥U¥Ø‹ÿD<ó(£dî@'ÞŠ¥òh¼Ì:o‘ŸjñI rlÀ¾éÝþ•ÄÑëm+Æ”t‰Å _?Êìe³7ÛÆÛ¤&ìSQßH—ºëØ&‰ smÉŸOð-·‰‡Âõ²¬„§¥B'ê’V)v@ts=õ$Z’ò™¾¨wj&}‰Wj¦Æ3_»@íÈ´`·.ÞÉZaⓜóÿ-gwñYXžþ¾2†‰¸UÍeöð˜ã¯a}¿ã0j}ôŽF]/pÂñOø[úÒùtÅ«Yï2eN¬ ׃P"`Qÿ2 8²"8§«âŒŸ^«­bîƒB|ö4rªÑ0ñPÛîI„7M’ï#?/²>ÎÂçŸÕò”† Š~&m¥Ç@Y,×gÉæŽ8Çp©NMu·lÍáB§÷~ÄšJ'‹œpQua2>– šÀÆ\@""é •ç¹ó×ÜÇ݈p».ÎG ¥¿Uuý…åÚ¤7j¿¤´Œ'N·Ý?¹6ͧNÒHÃ#¿Õ¤hb7güÿ1€6,ÕÑH»²LOxn£…siï¸-XPö=êS˜{±cKOŸ|`@•8¼ë;tU”u3•Ë' ˜%=v“_úÈ nš=ãu$o;)aŠ;‹+”;ÞXu­vÀ›×)ÊÐ÷F6™‹ 3d°6¥‘SMÿzñL#â¿ÏQ^#'® jÙ žÈüøòƈGêo/3wqt¡€“Oëk£Wß®\ l§ЉѤ±Ã+’ãÃvîµÅÞ.0û0»ºQÑârùÂ>Y³P9–\c«O œZ)[v½x䇣ÏqKÔTÖ”v‘‹ônâÒ^méÖéžðÎúòŒä“VÒo,IâKTvä×:ÌìSÿv^¾ºg è’!¦>Oz/]ñ"¡7ŸÃùÌ›DRuõŒy\»È½—dÑ2ïˤyƒ^²Ážûîe¸ôsì<QÇ+ð M¨šbþñ±&ÇÌgïÊƒÇÆ‡…{¯¢Æ_RC4¯¥T‹õÙ!pêôÊ\`sÔ1EÉéêduµÉ?J±à}Ù¦?CG/~ðßòì¦6ÂlãQ@iÉdÇEø‰§ä ÕxÁRËä<Z(oÔçF×`3–ÒV!3( ˆMŽU³ED¹Ž?ÃÊú¹.Îe¬ª’Þš¯OØ$ƒP–ÄZÄDO–à}ÀàÍ„ÖÞqØ;UbSÖL×zôGMd£„ |nSCx3ü ";D:óί•”XJ,¨O9•êïáS<-†Ee£%·×³Ç-(ÿdkOL8 #æÎ¹9_>Ü7e“‹»--¾ Åfýžü=ûÛ±¿!‚Ìè’Â^kcþ =1¬»‚õ8ÓÂk*M¦ÆkúâèÄÿy뉽۩ w@š70wZ¥ ˜’¶Êƒæˆå¨I,†f;Nðj¬‰¿²?úUÑaV:ÙɃÞ> xO~4Иdxõ´#ê”éWí™ ÊYØd#Þn¶Ð)·”Œu¾îè…î`d?JG¡Šª8Ü*ýЬւâ§ Cí¿8‘ÁžÄ’æÇ]ÕÐóFЍ+lÐû{6pôø:€Ží£¢|å…òR@ã,£‚›™d†£ï°ƒ›ôìç”;æzP"p’f1‰Íù<0ó}R—Ží5²œQsÛ|'½§2Uþ?ºÒà `ÿORZŸ{óýpLt.D?šŸ¤Às^_4#ˆ5ëƒÀSIf‰¤M< -ØöNà$'Áßí3¼]d]ž¨~WÃ&üU ÿvóo¥Añ8?ÙÈÒKEÀ¾}Ç9„úÝÀk¹õdÀ§Ï‘tð£ü­èÎÚHŒoé†waˆñíèÞÃÚðy"7Àu¦$>î7o{0…~=³Òì¡EiÞ_ãÕ?úo-§Ì\›0‹×=±8ŒE„‰ïAQM`–ììAÒÊTßXHѬâÙˆë ½srÙXmró^ÒyûöŽäÀŸK~ßFÈÈ ˜º*Âü°BñwJª­ªŽ98Âñ ÙáõªQæ¼8¢"w—$¢¡d[¯)iH:±<`_ò¹oÇæW›Evš DÈT¶Uªâ—“–„- 9}âè3È×¹å=äÔÑP¶®ÑÜž8®aV×tm“ò Øšóÿpü³r3K#GqONÎĺ í¤Ϻš ‘4ÒáMÅ™jÿ%9€y,¶C“Y¹cñÞxX<-Ü…Ö~@šuËImð½Xuƒê- —¿{,Žˆ–@K»ß&‰ówÈù-Õ>,o¹µ-”<±+ þ{Æ{ô¼8¥ÝVØôýŽ…bî•͘´S²pžÆ'QngÏzâØˆ\ÖÒ^j$벊ERpûG þ{Æ{ô¼8¥ÝVØôýŽ…bî•͘´S²pžÆ'QngÏzâØˆ\ÖÒ^j$ëhŠ*“‡Ú8€_øºí^ý.^¯)A ª ÛžŸ±Ð¬]¹³ŠvNØÄê-Ìùï\B;q šÚKÍD•‰;ÇüäU\¶‹Ð—³am‹ºÎ"FŽÆ{ªa`¶ð±'ž6Ëc²8Ãùn¹º°Ò¬†ç´ƒpªă×5:ÑdÔß’´Öšùl—â ¥u¦{îð•XýAk§ñNB'Wï¸aü‹ØlPÅîÄ[9Šp yP|àŒj©]]‹1ɨö ß@pO0üG2'Æ¥{1×àR­½½¼BQ*ohhT´_W„‚õýåt¨ôÝê€çÑçÔ…ú~¡KyùaÀHÂÏ•3ãOß+àûÚÜË3£ò9µ¯Jû{Hm†ÿ)}ýsv ãÎi¸Å'Œà“ni8pÔ41xƒˆb7)À¡_þ˜?,œ£p r(Bö xŽ}0êç †‚b—ÓÒ€ÚS|Tið¦ì°@ôð±ãi‘ÄW¡?ŠÖlÉ}–Iî£ù‰ö<Šl³¨¡õ“H@[;‚°‡ á 6ô'˜T£Lº~{$÷QüÄûE6YÔPúÉ‚Ž$ -Á XCpzÌ*PÕ%ùì“ÝGóìyØgQCë& 8€¶w5aAÂ@mèO0¥ ý_¥ŽyãˆÉ8ðm qÎTv«S×÷ÁÉèÎ ë…*xÔ D[¡e“øJQñw\óllÝ*šO‡½Tð~´BÛ"çðîEùV¥[÷Ò..qdqúžì[d7vîL ´ÃùBJžXy«[œAr„Û]÷¾Ì V+gxÂÆŸØ€äTMß•ê=ÃñµLWR(œ›–úó`‘qJ ìiPƒJ=Ù¢Ní?ËöÚ "EaiùöÜÛ»Z0 ª2ºd…¡± ïw(ÛSÃ_ü=’_›ýÕ¦}dPhµµðóH?žïLÔÀ:é9˜÷¢û,n¥µÐjZx½˜|ë ˆúày½©ínÙÖ¾ê¹/ÿ}»ï™ýQu°ó¬ü?6–÷:Ú'¬½Ç|ð¨é»}í¿°§êëMm¶wíì\Ç B™3æ°zÖÁêOÑ,ó JôÞ;±ì©‘ØEEÏ[mû{1ÂP¦Lù…¬žµ°_úÓôK<ÃR½7Žì{*dt:»=m¶wíì\Ç B™3æ°zÖÁêOÑ,ó JôÞ;±ì©‘¶É‹Mqtþm» ÄZÿZÆò<ã õˆ3ÂàôÞƒ—ð ´í}9„VËâ@$‘H-âXéu•ªúœ8¬Kcd:TZyµyßaã}·Œ?Ç”&Øb·| 0®U†8[tƒf™²r®©/VÍ÷šÞñÐR%±¯ûæÂÇT%Ó’£Cg¾!öíäsÊóÔL¶ ýråK²þ BÄôââÚªÿ-q¬ºÿŸ§Ròÿ7ߤzHBëœúE0ƒt2dˆÿk8®‰µ"=ßÑ ì),`Õòx®~0:•mÂÆåŽÉw®Z5²»ƒR†ßjVíz9b‡;ìnËzߨI”â¼)š–%I’ÕúF¨ÄbˆäïÞµT,§ùŠV¥¡EFê”FB ©7°×ÒÒ‰ã*&!ãÞL):ľcö9rb`\*6.îfbÆ¥qá‹ñÑÊ?ù™iÕqæ2S$ IܸrÒײV á]iŒIºž(5§I"4»Ý ,RûåI‘£Vxמ¸0K©‡ºòÝj¿Ûëí P¼±@y,«E1;{8á]]ªLs ûÎZÅly£PÆ|´þ̈²×—Bë@Öž[_C™üÃ&u›ÿEù× K-}Ÿ«^ǵŠTUGJä£8u=±ÇÿQQÍT¬¼P7âxŠŸøðúž øÑÂ…¯0089lÄÌQ²×ƒ*ÆüB/Sÿ©àÏ(Zórÿ+313l€5àÊ€q¿‹ÄTÿcÀêxF¿ßP]”³b ‹] º¿­ („n!Ù'­{j3(|´ÜÜÍ2íYÏy®­ßÀ¾b|4ÛOÍÉgtg›IRëæxëtE=”âÆó†x*£}9N³‚tý‹¼×*mGZ6g‘³MÂñöéulYë“ÕœÝÏÿ5ròÍ™Ñø@Øê¹ŽÉíÌ @$h6;uÅʘhß’âö'3ët–‰x…tLJ¿kÈêhÏmvË,T††$%-îFå‰*í%ˆ6•h›5¢1iýg¶M$#&>qôW÷nŠ>Ñ€b2vA¯ô m]‹¹µbA¦UL›€/»Á¤»³²<Ý—/#1tÉJ] çëÀ’«!Ì«sôð4ž=Mb™K@Ñ:2D°)UÇ­‘ŸÒáI§”5´ñjæ{‰èêÀþÔ°aîS;èê )`¡èQ4\¦MT¸åÞ%Ÿ(xò+ö®g¸žŽ¬íKå1s¾Ž ’– …EÊdÕKn]á‚Yò<]•ûW3ÜOGVö¥ƒr˜¹ßGPIKB‰¢å2j¥ÀÄÌ%ŒÁÉ‹ÐCqìÈuyŠHjô¤ôȲ1lOR¥y’ÕBÓ¢|qò ß(óÛ›ÂX“Èn@”¢Qºoa„7Boé(ÙÖŸæ¬î%m¥´€×ö鮜}‡xÖV×dÍ3ÝøUK ¶7Õíj1)ÞÀ¤½HJ{³w›ˆhTaV#úëWeˆ÷U9æ¥>*W51‘;§[ð1LÇ T,¯ ‡0¨ß‡º"«î^! ûké³2©9!=;¢{¢ôšé~ƦÌv¶ý2†{÷ç&M$ê™ìœÈº_¾™ßbGgéí5£øÿr}Ý•ª¼¿#¹ÿx©H—~¿» #cÒ6×<ŒøÛ%¡"‡iðNõ&¿á£b®¥êŽ)æaûйMŒm¬àÁI ûƒÎY«s˜ÕRƒõGó0ýè\¦Æ6ÇÖp`¤†ýÁç,ÌóJcUJÕSÌÃ÷ r›ÛYÁ‚’÷œ²ó²SªP~¨âžf½ë”ØÆØúÎ ߸<五'}:濵a[R¶’/¬tDN1•còM0`b_î‡,la…Œ­:’À!ÓægVƒqxžÏ诛ìÆ$msÐìßÕ‰öRi%æoñ­Ðí©ÆÌ>LBrÅÌf@‘¾5/ûzà “¥× Œ¸Ñ§áô­¨oKšÏÞ?³HV‡²ƒdáB°J©­é@ÒŠ¯bp³b`‰`'µ®0í³‚D!, CL ý¦ã2TÉ(ÌAÞaRŸÃ\4i l§‚6£µ¦ Äjõ6ªãˆ‹æ™£ÿ¼„RyLÝ×ø"£HgAÉpΧ}3gYS¾ï÷§l¢F^òj|¯Þ,W=Á™ðr\3§iÇÆ_LÙÖTï»ýéÛ(‘—¼šŸ+÷‡lçgÁÉpΧ}3gYS¾ï÷§l¢F^òj|¯Ýû6¸3>K†tí8øËé›:Ê÷½;e2÷“Så~Ò‰ž¶­XìÜ>©Èµ*ï’ J—m›ûWûZѵé6†J%~ # ñËDß–dŽÙ#š,ch¥aÆÙ.£ÃÜ|z SîÓm7““tn*öœ qÊ/É4+4ßë@½’µA‡+V<'Q¹d%®>òÛhzò.µAº£õÁþðxÐ<w¶ðn0½„ÿy•®x¿+ŸÏ[ØW—Yáå¿ÿ|Žnð÷W¶4oÖ¡ÙðsEd‰AôèvØ}Ð?ÿr5ëÏ´®ÊŸP¤7׬éÐ@™ç‡hVHíå{/>Ðgè;Q˜ªüúΆüà*ëntSMíœ2˜:•?AÚŒÅWçÖt7çW[pC¢™íó ¦¥OÐv£1Uùõ ùÀUÖÜè¦Þ/>Ðgè;Q˜ªüúΆüà*ëntEMå°Ëb“! `xb&Pî©çÖéÒ ƒ&¦—o¤œWä'"8ÆÏ—OÌO{„%:îÀY'*L\öäá9\"2/9{l  jEZñÖÅÙ9ç_Ã×x *o`Z¼j–è= xòŠ„f©Rù‹8¢¨á‘<™U þ„R~""šk÷EV†çÌkK(|‰BÅ8ôõš\n5jÅÚqõyF6X×hŠ+Ø¥9x £U¥Á/qͧ= Ëÿ‡•äu«|–™®÷ÌÝiUÖ)˜’:Ù5pa~¨êÏE×”ób÷†¥»H_‡ê:³Ñ_Àõå<ؽá)FvÈûH_‡ê:³Ñ_Àõå<ؽá)F[Õm!~¨êÏE×”ób÷†¤€€çðë£øv›}½ÿG}½:ßo^÷Û½ÿaЮ/·¢ÿpéÞûwûv¬óW>ZU ùÐz‡ï#—-ïEã)–³m㾦Ÿrú]v¨Ø“¬¤YJ“ìÒgó^¶v´‰wU7ØòhñæQ`”XÚˆuþc*ƒÝ¬€ø¨æCÔ”ñàß}ûØ…Å¢É3Š7BŒÙF 7%&j XPWcÈTö}[§†Vn̪*%ìAù°úxBW©T>5h¿Ú{ŒúîK„›à:Z ˜ŒÝòÅã_{'îPÇç¢z J’| èÜâ /u§ Ϲ˜ÝåÛ ™ànZ4žâ‘¬³‰ z²¦ˆRd7¸½4>»aÌÝ(@›¾ÿ4¶Ïmæ1ÛÑj ¯Êuǃߙî ’]ªEÆ(4f(Ê×3×ù%òlG5§Jt:ýº`Ü•b9øså`^F<Ž1ÍœÐV+¢$øç¦Þí´nÓ›GëRþO§xg _§5`Ä-þ ’ÆÅ²ýïXÙËóÂÙÈtÇ8ÌÐéÎl¼¹ì¼S‹jÖ]y½ÑSlŸç¹±Þ‘NÛÔE2½ŽËØ|#—›¶˜Y È ®û…íKÀ» Bê©íÙîM¥˜—µaƒuòI; UØ¥ÕEèÕxr€#N ZʱíÞéü ’ü(‹$bÖÿJ¥üU§ApÀ[Àþ˜Ô¢W9Œ-vLÓoÙ4P¼:Óù‡®Œ¤¢ºù˜=ÿ˜»+µrÖR2ïÅYZ*”2–s2Ê@0(žXO.Ç õ¢ËðôñÕ\N| ¦Õ¨¨ÕÓ©«?=O"ë êèñÛÄßìi í`j`C-± ?å: EwÑ86›çÞz>G›îûp1‚ôôä+û&ðÔ•B½g XÕK³³óxIâp,Ü)v9Gä/”WÈVŸ][KΞŠ[´Ìò¸Dpv¶L¨‘¬Baú¡å¬v¬¸ù­@WújŒÓÇõÛMöÕ.ÂÁ§¸V›Q¤ªñÇTªAòyÝJ°™÷õTÓ¤<å³j̰rìw ý€,È,dE.¥ ãÉü©³ªûm\R%¬˜Ü÷¹ÐùÆ4ò&‡¼ ˆPT${<ˆ)Ï#[~39Yž`ЮK9‹êé±ò îM4ÙV|ÎE_¦ƒ7„ŒÄV`ñ‡O$Ê"@§`^p™N¨0OJšÞc‰çe˜àF}< £ †j ZÖå×ñù[xiÎWc 5½‡¡ù8>o£»¡œã%Y&>…ÁX:µ»EÌ®ê5JŠ{XÉy€¢6=°ÒŸÊ ¸ ÈÍÂ@qö[‡KæµßeŽ]óF¦Q¬Ä»ÔîPBá]+TYL_ôŸû«—ŽÙœG¶jÊúÜ.ªU„ ª|¹=„µ£?(õëøxYÏüÛ_’XrgRÌÀûu5c«§$³ÃË©Œ8n[Ö t²ww¤H™nÍOÕäÃW-@Ÿ¼b¶›»3’àÚîÑ‚¬½ñTð€;ìÕ÷ŠŒÕF6r-è+¯¢@¥Šîô_¸“¤Å-ŒÙ­7ïa²ÓÅ 9'°ªq\ë@0„>B¤>hRùØtÔAj׎3±»Û½rt…ÀêäF”_yŒìE©iÌõ¡x/ϳ0PtdâT‹DóÅõSP+ýèB|º‹rD&~¹ì!…4¨r' t£Õ4QW<ýÀը̴ªa”˜äÅž4ð3Uj?Û)Þ^©NÓ}}ojWD¿ç+0ÚÐBh _ÓýÁ<à¡:g=¯J6ÌN ¢kh.S´ü ñÊGHmÂÍ>*)Àjvù÷D ¬s´€£5o z?°XÖ#txË µ·èy³žò Ùi×ýÓìh±¾Êù­sÓ:˵ન¢¯DT u= ùüîß4»|jÐŽ±\ïqCÌV>,Lº4 sÄ8T®_Î@G ô“ÿY Iÿ3ÐÓR 7@·«% ã°®üàŒMílÙ{Ê-]ÏfÁ²DKÔµ„Ü\©.‚=ïnç·xcKí¢ QGçW¼XÌɇ?ÈÃØ¶õž>j•9^éêþ…@3ψâ”ÂqH·#€!è¡ï ÷GCûÚ÷³¶pQ:+ý<ú×Âà5!’‚pŸZXd]ÉœZîC¤7I ˆ‰”Ó•ùa×Í@JGâ9‡¾³‡õÑ]è¢ÂØ ¡ŠHk]ô¦\Մ9Å×&Ò¬Ëâ^¹êA†^‘aê^¸D PO99ºª 1sÝ'”<©“¶ó.;azA]FtTŒ\Ìyî^Þ8ÏÍ%D=_F%CŠƒVš ïúÖÚ ˜§®9Ú´—‚ŸBB¿9Xsˆ ²ˆKG~¸ê„'†hK8ˆÊ3p³£PL¥×PÒ#PóEKÛbóŒ“tzÐØr‘«wî!ìž ebØšð™×ÊÀÎŽ ò²&‘è¾ð‹ß…Ц¡Œcäâ5.óú7¯§¼k“(ù6ƒØxÞî^.þ/Mrƒ¯p±Ê÷œÉ¿C£BÑäÛÍ ) @Téc9tØöåÓ oEôtémÚAú`X‹?k­Ô¤¤ôŒD³7š­®J º-l( }„à™œá¸W òãŽË“êy®“ÖZ-2}%L3C#+|\Ò'iJ¾JB×IR—»õÎXÞÖ\°Ë;Õ¸è±H[a]•Ž7§˜!ÖY7¦¶Û¦ßè"䬒w×cA:Ý“êQñÖlʧ.ÆxÐíDˆ¤(ðÙ,ÿ\åÖw<‚€4Þ´*ìÚ„åBÈ=Ô+„eXo€ <«µ<±ËÌWòÑ'¼t³Í !‘£+Ù€zÞö¹ù4¶ÍhŸ–]è.4Aº¦–"¡ŽôêÿeVÇ ¡¡ÿTÑ&_pã¾jFZj¦@ìÈ'Äiñ¬íú6=Ó”\:Éáš&ý!8C×´ºO«¿™Ój[µk¡Dމ'4lÑ÷±~R\Œ§‹F€Åû2² ¼ ûÇ{ÑNt?ú¬µPñõ±SdòìNDì@‰Ÿ6úéü¼³n‚ØìX1[P’ ü¿§„¯uh¼ç@$r¬ 3v®Ö‘» w^£H‰@Í$á¾ß2´OøºÙRAÃúᲪlWk£C‚P…˜ªr&'¸T™)e?‚8ˆît¡yÖ¡²á÷˜Xˆ2kê°.Ff&ä¨DüÖòü—n•À톰=Ýçìor—K8ŘՃ{ç…5÷®Oš1Kš*ÄÉÕûlº½ÚþæA“uNl=ЄY©¢—®åB”Ñ«Wë Ø­OçóP;ý§«²§N_ý5éÿ^Fû¸Eº¶žH† ðÝiš®÷ýGd_“¤è9{ò]NEí±ƒ&pÏqß(ý‡ã,"yÑã—=ú!:\óQòÇL½Û¯›Ûe„h íc1FÃÕJç1°nµ*vQæ¸;³ÅüÕ9fGщOµ‚û•P:õ‡à‘ÍÌ„¾vpœ3‘~÷©rí[VÈv»8Ù8—~é¶j¤zŽÿ ò6fš`·+¬_q~:½UÆËIP’B³˜Öm ÍDKêŒ&Áí8Û ò­9ßcþlU5 ñµµ®·YÓ?žî}¹]ìúŠsKVQQÉÊ-Zl™Ûl¢ð]c=ëâãHÝî›épÙ=‡$©ÕW¯Åà/QÚ¼šÎ³LÈÅ.K$€«Ù›’Ãö¶G:ŽùBh¶ËznÁ²0×°–ó¿Ðù„ý¢«_©ŒøÕà°…á÷@ç‹j]Ø^˜*}Q¹Ïœ¶² ô”øn$…Ú‘#nï<å(Ùh©e¢,é³ Ó:e‘o~ÑWŸÛ©~C¬¬”Åm…D_v~;qGÎÁß §‘S–•¾U^+˜M˲"T,ýR„迉•ñ'÷Q눔jÈ2èÆÅ(j+Áèä'Bmý?]ã·ÝQhüáQ«¾3(]gW¡‚¾œJ÷qóïyòÙá×øHíBlmÙ¸¡k}<»q(|®€e–÷¥ç&§1uL„ƒSç·àwg RÑ©ì©ÈOž¿Mz/eC¹‹ë®5suLH<iÒ¹£IÐùòÄñ®ÞÅ$¥=#Ÿ,]39`˜­þGW¡pPÕi¼ºƒï4/0ç G ¾'kvv}ö¸å§·rißõ2‹ $å Ê É…ÀDMG 66›Ó.UôKd*D>Œ¤8&ïŠOáŸ8ñ] «uióµ¢ô†k–ÞçW>èçtºÍ‡ül¯°lf·‚Üä»—¿¨‘ýAÏÉ´OŒ[%ÏTa£?žþ¢CN"ÍØ³¦mÐÇ-9&&ÌÁÆK{Áà}N2‘B•(Û˜\ß³7J?xnrVk t²Ð>¥çÕØÜ:]M—#6˜±?¸KN³´ÒS¿°óާ½ðáså±,â@} à; Æ©×ì{‰ƒð¨#Ÿ:Z'é9äø Ú¿W:±Zzt,­yÁ ·$ˆ¦²ã;ã¹V¬À"Y‚O_ã‰ôË T'%¯$»µ.¾¸¬ŠY¦XåP!ŸÑ²Œ3_ˆÀðnáùêªÕèA(%VðËsnײ¦Óg„…ö<×Sö€ÿ|®«4iŸütÂ:± ŠJ‘€kz¥™ÿ,ùÞ'ìÌ…NÙ7LxÛ†<0 Þãõ®äág<#V”ªâ~nÿŒt”åD"G ü×6Ç·K€p6¸ÝŸBݹӰ.šïìN†z·­yQê9š_¡ Òì8†ÜüYsêámíô^U7â¸[k2Ni?²¸–âB{N_džD9wn9g,ª¬â¿ÜÀobá\Š¿„»†qçí+Ò8b<€7nWümOhèöõ¸ûŽWÖ±‹G_Ý ¬á߀R5M©¯Mm²z;î¬×Ö(e£HrP+ÇÌ<³G­œ2uÓ—hŸfnᜃÜ yd:Z˜Aѳ„Õ„ãÿHÍH¿>í(Õo8œ.èYˆÇ!UÝœ˜H»›íqÙ±Üqñ9†m«u,ã ,]:¯÷è@ÂÊéÜ©ÄÿxÉÛ…ÈõÜo#ó¯ôÍ&ðÖÙ¢Uè=¾æ:¼L§›Y¨Q–¼õ´Ká 㩃ûT“®¢(šo¸iµÅÚ Óç,¢ÔÕ‰* ˜¸¦T$&§êÏ‹´1í­¾µ v-ú­¤À7uÇâN!ÎÚæ-4ZOlˆ7r‰¼žygr™û¤AaJ†y/aØ6ŸRÖ쨂Uó1 «G„üÑp]ê%ðJdÚSeÉŸQ(ÊãxèTO2&Ò“õ«I¯Eöz°³xFBcV) =xòïžLwZ0©œ3²6J‰(úÀ eJà/ÕÝÄ|¼ö<;ÕÖ~Êy~å”ô•—}ñåýQþnøw /[Åãê~ËÇMÉJ¿ao$ª´þa´¦‚L®œ)ï ÇLºb Å·…ným‚J$ÊŒ!‰!‰2ëžÝ8ýº'5§¬´IqÝD‡jüp¡’!ü/Ô3MÈMJ -`ù>O–ßGÑfú8¯§8P]ßÇ5k¸øP°µr7JÙïÒFÅþß«AÁ‹;R=Ä–®"˰±!ÄåM3sqn„)½î¥õÓûiÄxþžáfˆy€n1f^ô«bÑÅÞðŸ‰SXïÿƒ²ó«³Ûb²»sÐ ÆšsŸ¡¶Œ¬/ÏkBšµ#ínî~¢”6¯ZÍm`ådD5‰ƒùe}0s¨Ÿ—¹oéˆgwI4÷¼‚—`©¨ÂÂiPÜU/ ö|1cëѧìòût“_zº>„fQ¿- ^6µaé•ßð¸ \^b‹ÿ|EN[}Iv_jL÷w.¦hµHí„bä›0ó 6ã "íð·!28%‘ùcÜõáö€žDD*B§˜Év¿]Ç=£ZŽc"¾R ”šg§„$•¤ªÞþ\ 2Ï”g)†‰+Ä¿TOA}ؼ"ºqfdX ÝRzÜW)£nìã?‹êiLê2¬<(©"ŽXtP>/ ¹È7zk…ɵПô#§}•¹Í:!XÌÌq˜Æ^æ§_]V_QQ¼³ÙoBΘމ_PdôdO3–•º}V¸Ü³9#µ÷Q±âÔÇ®`¡›« éÎ,+qÕÜ9+A©Oý?]4½ÚøëÖˆngø=!këxêhøÏÙ”ë%U ÁIœz:0#ë ¾cê_ºÊw¸Ø4`åù1G m4ÇvaST’-<6L<£Óº)ã¯Ü*©Óe§×~µ=9"±Ð(ødÇ&ø ´í›ª+J”L[ç ËLÝGz×°ÿrâà`ç¾®'œ-ïnG^”­MŸ…^íÂctí‰ê ã4§V49âåLbE3¯ «"WKYìQDI­ÈÙj( ÷±R«5r–MFw¼BZ>1˜‘v~ Õ8 r³YËw¹Ïiðþ0Ô¿E‰•MÉ÷6´iŸ«¿&m@®Ö ¾•G\tÝåÛ­o¡tab<(Su×\õÔ)>%¾Ø)ZqâɆÛ{CãèuÐc¯±èbm„Ï–ÎPÛ’¯ôR|xªvžI4€Ñ>6 „š­¦ß»Û6Û•·Ƈxí˜ÀÝ—“úa6¼]¡ããÇu­Æñ/ŸEó¾!Ra_Z ²‘P„º7‘ ô'‰#¦šKÖ»i›7çˆ×ñÁedÑAÛ¿¯Å¯|œ.¥v›Tî8 i›5Ø–ŽÀ½Ütèæv#_£K…hm;t”H 3É÷Ñ7¶ø“*­ ‹¹ìÐÍšMåîõÛPrl#kØÀÞÔ})m’ý§F ý»h]ÒÞ®o³"ØÓ¸Õ‚ú6]@5²¯î–ÓE©úº7˜t!¬;žâÿF³’[_…ññ6bµ]šþR_\,b,!±ûϰ²Ž °ƒÄ/(yîõ] | ìÀçûxž¾<^±»Ð§Åì—NPûŒ=ßs%'eæ´ÀXçÞLrY˜íT:ßBƒ Õg¢,,ªö×B9ý–Ô±G÷W”¿`„€q5q šÔ¼Â MŸ‹ÿHã÷k4Ð9dzØAHÿh *a6Mû²û×Ûõè±öˆƒˆóŒ@ççÍôÕÞq_B²êVw}Ü©ƒŽ¢Äé±çÿ¾”^‡¿ë€aÞ)ú¤qbôŠòó1 èS¼w‚‡ ±æUN¾5s³7漋4ºäÓÍQ²¡b’ÓÀ`ü­èÌCk`ÞŒâ'&›uvÑ#Õøœ åãçeÅCX[©cMÐeEÑm«õ¢Ø|·‡dº]“¥‘±vxÇ<®ä«Øs„š•$ø–Õè`´[%4Eà3ô‰fš^³Á 8Hfçq5GM{åEOèCe¸ÈYv#Ê´AãS”Ü+ï£3I'sÍ!V_­8ÈjÙ3{…3¼©¨ñ ‰‡ßjjAn.CgQÀy6¯ü¾N7©|–>w†ñ&ü†û&90±ï@4öJÀpwË=(˜ª‰bÌ­ÊéºOþc`žÛÉç½QCñ„ôZÿ)€ÔcYn€ÿÙic09Þ jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿR ÿ\ PXX`XX`XX`XXXPPXÿdKakadu-v5.2.1ÿ Ýÿ“ÏÃC@• ×ù4qùæu×8ã D$yE#4ÿO‡$DÜÞÎôÖ»Ûå7‘>Àk{D3çøÅ)Y{E§¿£=iVž©Ø7„‚Ttì/ODˆºÚÀDò|— Þ·jPl?˜kù0Dãô§«ƒk¦ÔüþçÆ—šÕL$ks:e“n¡pÓð½,áò‹0vѱ‹m=xD£k2Û1vôs”eÊ{ac1¢ ð#ûÒã€$ïÿ½ýz‘)þÙÃ0³ëƒ%H_Éq ñ wýö"uÝ ´÷à.þrdFÏ«|Òˆ’¬Æ¸ýˆm äâÓpù/xêBKü›³/üt²SÆ0gÁ௨½5õ{€€ÏÃA€Pv“9Nl‰šcáçlö9¡ÙWŠ_Íõݩ펫Þ «£ðº‡-é/ŠEÜädxý·¥ýŸÂl›)ím}“ꇣMýiÃ×»ÈlޱÐ}âAa0£pò €Á@fîÊ_Â`˜››ÖM³Þû‰¿˜÷%‚®ßß4¹$†ÀŸ 7,'Ó¶zXÉCùÿjÏ)™ia®µ|l¦,ÊTkË0ŒmÕñ¹Ü‘wÜ`¿P/cûYg¯ÒÒñ"GÄ'›à5æ²…m6„‹Òzœí÷шեâ9ê9'WAëXŠn´š:ƒ%7¸!k( F¤?ت‡I(úÕ\Š7»;¾:×CÏÎÙŸ³´|•‹¶FNš€P%-&Rqp÷ýUúÔcâ¾Ïp¹®uï$ãÝ$ëiW¯‘“)•Χ|Zož‰ßRÇ ¦Ê’(J²4(‚Á6Æ8mcIµE22ŽŠ5û½|ÞþE¸’ã­èƒd ÖúE¦ {…Wñ:ÔÔ7ÿ)æ—Î䬉 * Õ2È·‡ œg8wC`Q†yùð'b¢ú™?Õû¨4b.þ²ˆ7:ÉTÃ'¬Þíd“cF@¾FŽÎ™áG` LÐ57– `³×j‚¨Îº°ñÿ)¦)¡ˆÓS(&8¥ížDŬ)3ÏH²íjEŸá=è×Óê}j@®˜8Ôwé!³ÿqÈNSÄŽ­(ØFL)Áš&hŽÄDÚ#4¿é¼&ý€j¸Ÿ×«|‡ {þuaâdvÖ"VÀÓy+Z‘‡ €Ð/¡ïP&š/G “ñÙë,²Ðn³iï¿d‘%óÁ;õ}ƒŠÁ¼ûº²"ÿ3Õ „»}âm¶Õ\p’ñÚs9.‰ÊõÈ£µFPêE4øÈÒÓ Gàn¥ú„âs:¯nPÒ¢v.nwF§¬óà:wð@NËM¡„>æÅ [ƒS禹+a^oä‹’¿UßJ?dA_~êi?Ãm¤§‹Ò™,?)_#¨…|mw°ùÔ»œWÊ6rp–1©1 hS`Sí®¼Žv!$K¦¡¶‹Ž–òò8» •,ÕuIéGßå¢Ìä·˜r´Ä€Ë÷ý³¯¨gð˜f‹§f¡€ƒ’5Œ’ñ¼ l䟨ūçòÓ9¡±Ä'PØ´A¶üFð£MëÌ”§f¨uuÚSµ÷P/ŽÀЬfN*›dJ_¥¸zÀ€ÏÎÖŸµ²}D‘µf¬”k&! äºãVU<¦zæ‰25»*B-u.‰™ý?¹ÅbKŽ@¤"ÞñŽqW4 ¸½¬Þä¶@Ü0Ú±=©(e¹B³•1¯Ù¤¢’jn6Í‘þ)©µåúÙºEÛ•<Ÿ °SÔW‹Åâ q·N§;Í”¿ú ­è£íBhû—}M9é &"s"ßÛ,…!ë„}zr4¸›™-l…HÕœbðÄÏ º¡¤Ñ3ɯ›¦gbU̲p"8¢H—’תü^?”ŒÜ×ÇzGËÜ¥ mSÚ-Iîï€ÞcîÍi=!Ýâw§”è¥Òàk&’ôH DB•q,ã…Þ/ÞŒ?W’6\ç׌@›„‘-@”6òdÙ¬‰~u+¾£ò#Õ1\yAÞË®@;ÇAéçùÀÖÏPÂ4©€ØÊ¡^5ýîoú—û&Køñ{—Ê›™!«qê ,;ŠV‡&½—ˆ‡ªî[^É2ä"9F¬,=<®D§’¢Öç« '¬]ª !&ýñã£]Yaƒ— >P‹Ú„=†V±#[¸vÏ6ò‚8t³)Wó‹QÂÐE lÓ¯«Ã´²æÞ“ºèm%xŒX–ÓŸ;^×o[%JOe{Ÿ[8 2m –½êÙX‰NÈËÉ‘}‚lC“ÞðæD„uIIvSD]Ь×–“4F,þÆ üŒ@]R 3>² Çó ‹|Y0+Ä“Š×¶¢0·Ù·;­À‚øÅJãµ"}L’ð‹ªHùÆ{T·D¨ïîK&ÿ3eÏ•Sîc÷˜¦ß(ÄÑÀÓZ¹…ÉKËqŒþþ8À^¸uCr™ŽVëÓXGmNL~-<°…6¯ÏϦ)ùôÍŸL€½•Jµ/q¸ ÙlõË“–êphá9ož;Ê BÀj%Úd¿#‚†&#†l}·%…Nk„Ãà5Ô‹_À¸Õ‰ò›Yè¯Û­$ üðJYŸa€ƒ·¢ZY·TßZ²s½‰íEŽs‡ŽžÃÉühßNÐ<”޾ \½¶º ô ¢°Ú‚7@¾RSÔ OkU¦QðsþÇÆ/\è¢Ï†ÇN¬JM…—„œ1jìÉ–+Kºµ>À‰:ÉךÜ×£†x„™Î.Õn!ëN\lîŸ{$€Vƒ¢[_ÓÌ@e¸3Âä1Á'EPœ1·WÍÈîÑCrÅI+Ne:½÷!¤NÓ3}¼ð¦+JvgfD>Ù›7}öNÅ—øŠ®éu A¼¿H5«EÕ‹ukg{ÜÑÏ"Ì#>~‡,ªÉkEða™†ÅtyX´YxZßžÏ}ï^Ü Ó‚\Î\ª.üÖ{{{£'­ü \Ï}n@ýžÅʳÎ¸Ëø—íƒÅtŪ®{U>„29 p2ÇÏÄÅÇ4@=»På9¥³’|­ÞÀRÍŸd|¨Hé öÀ²³áêæ¥˜DŽ5~ÆqW_ÇÝ·‘éLJ¢ð½‚r³øò§–N(ïG‡Ra!á¢Fý»6YŸ°«YJOZN´A¨Q"Öäž$ƒ½ÀÆXÿ3Yâ}g^oЋ¨wº«¢ôN;ü4µœ¶5fŒ¨ŠÆMFñ/EÇPÿr²J¨‡R$Õ”þôuhR_íš) 5·Ä†nÿ9/N®þÝ·¸&»Úú³p"ƒHŽ®!yÅÙ'åâ7´Á_$û©!É/÷Õ>mwz½$AÁÂB§M’ô¥žúC휴ÈN½8ªÕYÆ"ÿ I‰1Öµ…D„¨džÈ,ãØÖ*þ`P\ùsô©Êôöf@äck\vÑ4¯&–ؼIf½Dù;_v…™ÒÏœÈw®k¸ï9ÚrpAüa¶ÛøZ1µI8²’‹½Ñæéæ<<çí?§¸uù2€Fæî¹d¯NA]äדˆ¹| DQÕêY¼Ö*$âv›z:Zÿazæz.ƒÍ—Œ/,¦à2©À?š«œzÚ;œ<ÁUØ*²CÛ” J¨Æ©Ä™¢ ´žÞe Œ“Êê«[þú("LÖºŒG‘|"iÊŽ»|IÞC@—|CcU5,–³ÃN2ƒ" v锫aƒ†¦wí¢²æ²Xr’Û¬ªšð’Ë)Åû |ÙÃù ˜£§v{Úñõs]g©¯Ý“jú‹»”sŽþØl’, S:eZƒ^©ag`: —Ã%Tc/FÂÀ446‡cûĆ$ˆÞ/К¼\ͺ\5]´Ÿ?T}Ϧë’þtùG×FÄyØ÷Š¿ìæ§y'tßàg?9þ®rÄ܇‹Ó:z-t\fÿ-K”èjš6ψTÕrcÊ-9&ã;’"¥ý´8oÎ>ÚDÂm˪qóÑîq%ÓßRÓ=¸ó øÌ$ ïÎÔÌ^¬g«ÏO梸‘ÙÁ „Ä8jô^+²Á\[Ô™ŠÚÙ_xs;H²äH<°Ø¤u –5ˆ m1 Œ©c<¾]NPßÇÒ¬ð‡e©døùêÔú+‚÷Ò,˜f:*u‰iH0·Ót)¬S¹DrM»c=eäà•Hõ‹t·&²‚iÎ ¦ñ¨û“&E‚öƒ] ¯ê…zvlSûYgjs—Á ýêxqG]!û`0ª™5Ý«-T­žàÏM…ŠãI5wÑðñŒáoÓxçÆÀ]£€€ÏÏ¥éùô¥ŸJ`¾(„öµT½£³]+É£1·óQÓ¸A¸1Áx9RØlQN‚jo‰¢¹¾f¨½oØ´Ë^0jCÆÛšµå+Ëjõ—HUæœSŠ}Ž|îep'‡N_ÖS<¦Ž›?rç’µž£Å`XˆÆ¶TW—ÇAq ; ®ÍÝ=<Þ%_æ¢Ík–Üi” ‹BQg¤Ú–Ü¢H®F¥™µŽZ–ú¿4`®²2ZIªáBjVõk¢sèNLêV¡£i-ûNmœõÌ7L!“û8™®¸%¤¤E˜Ÿ]ßüžM«ÓõýaŸŸb­RÞñ?ï“¥[Y«1†H™4í –÷K’†Ô.—‰Ð°¦4ö¬:¼·8µ±R‹%¦Î p.èøI ëçªu«tj'Ëš•½)l’qù¬£;8€Ûí³šŽýxz‰g¯è£‘OÚ`^ Mþùΰ/ñ]Ø¿x™hbצ×ÊM+¼ ¥§mˆ4)Ä­Ò˜VI‘ƒ³#°ùoˆv_¤•Y§0Mï±¼º`†FÜݱë!y¿PU¢ÓÝúJ$3{¢D@Yâ§ž‚N£³î¾~~HR|pq)óXôÍsféΕ¢¸QJ&,bèé'3ûР5¦Û*­}½ih‰'R5ÛÓ³ZpÐmˆ—Ø3F>òÂw¬­4:S0ábcl O(Jê൭‘¸ñA ÀTˆ) _'Õ‘'‹"®“*«OzdŒZ\ê³o$L*š¬¿q æß~×¢JnÑ â"÷´zበ»Â!VL+½þB Q›f=^À\‰ÇZÒåd•Q¤I«+›Û´ŠÁ ïeqò,¦9ÞveB>ü#ï×F¤~ÙRcÚ4=dGÌ™øgSpªT;.âsÎjLt׿úxõNm:Ò–XA¯l)[@q’®Ì–¥ÑLZ¡H–§U­‚ëÑ&Ò’€6y(êaMÂVªýÿ> lèÉÉ™f NõÚÐè{>àáM.Ù…™ié:ËѭΕ ¦Â}:HëÜÆâÑ“ «¬Øœí¿œ°ó­|°CÑzÐð^ JÚÃhSV«Ÿvv+/àº~F«Xš’øãMq5o†-ï3®Kmf÷À7_áU˜Y¬#Ä[Áñ‹˜"°C Þzߘd3€ãN-yØ5Îëîüêv‡ÿQ/) “­ôRTš×lü˦¶2Òeæ?Þâò:rÀh»O˜\½ŸXqÒtŒñó)ŸgëH F12HŠd):U²j2­X|DÙÏQnŽªL]pï/[¦ý…lÃè$ ˜bŸb÷QN5,щn¢'úcÙ¸ ×jÛ2Zâ9ø® *‘‘·‚äT™8¥çÁñ)ˆ+«FÖyÙx»ëÿP ºåížÇf¨“ÍÆŒ¢»‰RìÙ{-бápü=rŒQ)¹AÇËÍ?*÷X×¶À{B‹-€†W½1ÒªBT)¼L{•íÈóÓýºÜ¯h¦š ÷]W£ò'=XizEX”0T‹î¶&Ju@ا^E‘jÒÉìó­…Pà  kï¢%ÝÌ,Á“—£Ðß òÞYw7\õá‰Í:Ìc ù÷ö%€;Ýc݆N{I¶ZŠÂØ)½fލƒ´8Y~ôR ñ:ôíj¥¼qÇç¶„È„¼UŸk…]=´cßÜý o@¾Ò|ëÖ—™Áß/’´º~/ù5T÷0—ûýµßßÖ‡(ùò}Od”v¼ÜFûÃkáºöÿNµBã·}´º§Ñ`d•Oì•‚n;3©Sa"™wDª[Õ6„Z­uãc//߳ά٘fßÀZ^ØÛ,É[Õ–CÃÙ‘ËZ ‡t’ŽÓ[=šÅoÞ$å½¾¡ç-¯¡ ŠÙ&¸‡ù2íh׌ Û;©@ƒÙ^˜ºÁç4ÈXÉë^Ð&Mû s•«öçˆÌ ¿}MÑì}{ü&ÅãsED·Ì†!±Ú ‡ÆÌ•MÒýWׇ÷iaw:‘/8û»¾á©¼<¯ô$ò³¡"¨+ÔQôK·ÚŒqžÇ6©1””RÒ~H¼2ª&.çüÖQ_Ø’¶¡r?Rι<[2€&_S4ÊŠ™µAg­¯ÑÈ¢kh>AÛZ»h«Kˆh&¨-Û¹½ð¿À23ióRº…wΖÈÒÁÜé'IãpŠ®Þ¤+ÙA˜¢œðPìV¨HÌ\+˜ÛˆúHŒÚ&t"‰þÛšš'7‰­€ýä·ßzJ^íáùs¿¤µ«èSƒÅr¶ª4ÜU„˜=ŸäozÏÏÖª~~°ñùú³åThÅî as‰n­)Y³Ì?·-›7¬“ ÿvX`0Þ† |¿Ç¯ñülj·­6D–õ?M6ÝGÔrû®4„?£Ækg&ÞÎ~錒Ɖ‡¬Õ?ÊÀj–t™((ç™"޵¨íÚ§‡‡Îo©‰éoDŠ—\7_Z…‚î“ìÞËW|%zé%^ê«B[[ˆ7N·>Â&8 SB ¨–ÿX³ï±æ!}54ûÌÕÄâuÐ[ô/"piJXÍÀèÔž*U¡Ü‘øiMŠÃš¶à{Öoµ=‰Ø¨k†£»e¶M;ÒAG’püd”~|G®[ôÃ{–+§†÷B;X8=*¿¡:jJíüÿ–ÄIíäõ”q  {ú=.öàöµßߺä*¶êØþ_É“r ̵/ ªó1b­d†o ƒ5¥ru/ÊÁ²j˜áa–÷G2è!h07ÜC‰Êbÿ3\¨÷|#>dáÅüL›F/9oÛ%¾›¾×é+ËúÞ4ÿ$ß»·ï…[P©ßã§2篂 ê2Ôø–êoVeÒvH]üæ¯?ÿW‰,;Y«pÞ׿Ð;Ù\¶gzÔÝAk;ûÄŒ6èj¿\Èûø”¨s&³yñ 4f«gªë÷ø‰ž’‡Ó«œR”š›ß‡=až’z%­Q>mW6 ª ÊxiÔ/>J`ºN*–ÞªB"0âÄ~.«‚ñ ™ÇpqÚ»ÚÎøðÓÜ+Žog+l„üÉõýçîȵ“pWIŒ,‡ãDéˆ10„-äØš·ý©BŒ0ZÁ˜j"Øø]x]ÄI&½xÖ[ÉKlº‘@ó%q+TßhÂg¤ëÚ­ÄòæÉ¯Ã¶âúžÎCö§üцWÅB]CpEŽö &¤‚Šc¶â)-}샗€‡ÛVHr±ÅH÷(›ÇIk p•¾÷TÞQà3â$îί;ÁŒš×ókÇ é:}öQ†_UëÚø³åŒ…ÉZpGu†•Œ*S¡í]þMH|}Ÿ~wÂ>:Ëç¶IÈ»dºþã”õº ¯"\NÇ_:ªœ64é®9þ Èl\hêÂö–^ϵ;×ZíÇRË:“Õ©£-KNt3üÉ_ÜŠEª*TÞ«šÊß®w5Vê†Ëâj\“‡Xú<Š_ŽNWÛÍ~ÿU¿<Ãë}‚^>h)/®6hl:Mª¤š !Ýs]¾x4‹mKA=DgÓɸ;²eõàÇä, S©Ä[jwbúØ5Y®rŒbg_Þ+<2,5Ü ‘>Ÿ¿Ì+XàU%TðÉîT3X0AÌ{à€†ùÎ} ÝûDo’ÇÇ}çzJ¯öq6õX»Qo/’í*é±®ëB›WÈò°¼ŸZO ur¨œ>‚Œ"ä¾f»Oʹ%Ronµþ£xBêÃ_/íÚ%©É¤4ÄÃ0‡]²7dz„±“A7×'ã'™ôÆËÙI±†vûƒº±|hÒ ß?ŒÐ]1BOf­æpÌè·‚F+‰ o*L€'r™b‰?pÏÎâÄà ¨¤ø½¯ªŒ}@P–Nî4F´mPL¤±5n£¬oر¥âʰHtt%Û%y=ÛEÇ!¡¢´ŠQø äQ†]us·¨“³[ÂHƒ†m­J%V8©j)ãád‘~®=FÓìIüŠ/ ñ}Ñ¡Ù_âÈßÂnR£Av„Oeä|ZRN¬ØMþ£óõïqIöÂtXBŠûú¹…A¸Ó#ÓïFÎÿ%3nZZï‡K/ +FH‘Óò±ð˜ç÷­] „÷ö©ô7pù(üC2ĺ[¼3Ø1;öXïV/ÿWÜ£¡êú¹œ-»7îŒÏZ†ôÍw ›C_¿XüZGˆâå±°J£.D—e3¡ ó/öÓªaô¿+^!¶O¯š`Ä´kïn냸Eó§‡ó8¦_øÈîLzm’·ºÄö”wbfM„ˆÓd샙ÃÁÏsËŒï ù£؇±ôL¸²~²Óé†yO}EÌ<{BKãŸÕ8†w&n¬‰-«Ò«Çwh‰sZ²Àç „ðál3Xm{Dív<¢Ü,1ãÜŸ‹+³è]¹$&´‡%n ¼Ÿ±Ìu^°U&ç]Ž›|¡ÛWá8æ¯ø5Ô5ŽÉNòk…øÝ°`F‹‡V©,j…{é÷ZÑ¡Ñwq‘W‡ÒŽƒØ~³c3‡ø k Ï2ó2:LÁ±ªgZm1¾üè¨èJ4w›—‡Y4té¥èÓ³ 1Ó•›5 Ÿ / šDýž‘üÀlq¤s„íŇ9ò™­ è]Á nÂîËÔóѵ˶ø†½ƒLÃɈ€ºèSvüVŽöF!~³ÙÐyÅ‹"é1–‚9÷ºº6žA/gf „WÊcÕè¬Få6¨‘–ç½ý£›í¯¼’4(ð>ÝÛÃ|R”¼)¡.`!ËÚ´R ßü•¨¨íWRœ]égXœår’90ÅÉíD FðÌaÀ)ÊüÐB³êãIÉåA,X÷,Íàâ¯Ú^ªÐD1þ "R!xïÕWn–‚ŸzXî¼Y¦ ÅUÅ'Ä‘˜ÇÀ¨ü¥ÎôŸD¨AjXy¦©Rg|8Ø‘ÓÉ-0”ãÜ âŽëcj+ÍTùàˆaÒRVìÑâQž0‚–q¢’e-¼+}EЊ{ð²“!ær…Àt[ÜäŽü)Ǫ5œÕ—lq´ —›*èß²q÷Ëöm§ÚǵY»Û[¯B jéV¦†¹Îk?ýN蛼>,;™@µ' ÑZ·1ëa‘Áý+·Js+cp>½r[N‡læðçd3x_ÿE‰Ôa‰uè æ_Ѻ×* ¢6¥@†éEÖOeK\¹ƒ(ó¹T€Ì9=ò“j)+‡0e,ùMMÉoô>õEÏ•%1šß¤ÉÃ` wS#Hk{k³Åö®lúk;Oˆ?üÔÍm1îwÛœ|Ún¢#ãI^å:.e\ú¸‚ ^ÁRì )ªÖèkBÍm¥-‹JX*É•ÇX+6ŽCbäüµdµÔ˜)s<úÓÅV­°¹“5n <RØNÜÃ,2#@ôÁ¼‚Ï»áy.Ê8!v6‡0rºÒšî&:YÏJôwñ)ôugy¥zÓGŒ¦8ï¿9•&\¸*©ŠSVLžÝfª_Ø—nVUbéô ÄtK]ƒ M¢«’ŸÍ“+h‘nÏŠ’èÖjÝE¶Q;¦ž)Êñ® Y²7ÈFA" à&h;ÆŒdÓãh˜ )æO\ô­¼œ'H…Ú¥cÝš¤BÙOQyÞç½`´£;ÏÀ‹GÇu÷'$ð†OA‹Ö¬Ðz ¾³¡£=jô}¥3 Ië<éÚ óJk°ƒAYON¸@xùô^Ò¡Òå0tdö®„îîqÂ{6GôiEƒ`Ñ`JZÀ­`‘ö½;ÕÂÆ… ó¡B”¾˜¬<7’FÉÃLÒ'‰'„R³ˆEÿo±ÕÀЀûÕDŽdsj›Ô˜ë³žÈ^‡qãbËá3qL»{‰JQÊ7æó¦½é;81{ÑCv‘¾ºHMµÓÏsëÆ7ÂeñËkçìØW@¿ú5’ÈἾð$±RΆî…ñgµù`ä>oprÊZêhq<¿) –‚ \øÁm€¯›–SöfÂNš–6d¹–¯l™ŽL£®,Eñ¹ ‹Ù©iöZíǯ÷g PK»cÆ‚è†Lc“V>nMzÁsõüêŒÂö‡)¹:Ýø÷ÕóÉX?·ösìÇA„ê;E7gz»;?Ø5T ¬ŽüÞ÷ãg5]Hî“Th>­êýŠê` Cœ¥¿Äv)lN$‚ÈšœÉw­.3û$²$ßó¨öø= ¢Èï.D©ópñÜ:sÐÉÆ|l iâÐ<©ög(^cÿŽ¥ÉÅ ¹¤bµëe™ hÆý \â 8mµP˜ì 0³ ¥~c‹ÌuJ¢C¼]ìzª˜lFqâ)E}ß ê­Zc#¢Þ8ôlwX{ï ÓÊì!Á)2Ç;r]ÄÒfÀö¾Ù©œaSrºŠýr£É·׸¹îаË ÝÌ ¿´ôüXùÓ‹¦ðf]J¶t•Q‚í*ôx]fè~Ska_Øl–]&³‹Ý5gH°„ˆ¨»u'êr²q(˜zpÆÆV Õ92;Pd;ÛR|·œñ Ìýך³FìzA´$“L\¸á[=ãc±Tb_©¿ð ÂmÎÕb™qDVHæ‘°åLØšŽSĬe{fAÁç^ÈËhÂeµÇÙÁ;ÕñÛ)·B‹g Ú£T^Úì¡ õÜ”ªÔ£ƒ¯ò#{–ÙôÚ¶Yä=ið:„·çXNÁ„V¶uª×@ÚHÒ+ù8xŠ©úÞ/fà¾B'ËXSilþ#ùÀqDCƹÀ—ïó” Œ!êóX·]ØäÍŸ€¤¬-F| «0ÊP}+(x¹÷8PüOª_äwê“×,öö•z¡w3sâ^oÈM¨|f?Óg"Ù°4ÐÚ÷:LÑófWÈýsÏQÒÞ¨CØâ}Dzç†Ñµ›nU‹¦¯1•I:á,Ï ¥Yê'çøŠ¢Ÿªx¢óá/%u×äE”>¤Ÿ§tq­bÔøG„#ê? &G¯-¤ËŒ¾u½_BÇÖ¨N%SHÚ2ÐÙ^hYJñÉpd V · ae2æ–»¯:‚÷õ Ц]ã èæ{à„êcÀ]õ.ÜÔ§™ÙúNJÓ%ÿ¬uü#ž}>’w¹öÙ³7ÐòJ’£eíŸè,šet~5™¨ü§áaÚ7¬.Ö:!ã¸ãûl"FIt=ª¦R}‚; \(Vº½Jl m2 œÀÆà÷"s`Ô \¤˜¿®e9i_;‡+j[”ž©Ž¿¸@º|ŽÝÚ1hÖÇ,ÛÌ*“Ö+uÙ­<âJ˜š¿°§‘$–¾u±–${B\âÏžªŽ˜á¯>ÈšX·»çyNÍDÍr¾¥gq¹tdàvºþme]y É6oPm!ó®éŒf}Ñýíh9}%åĈå|AŽ4ø°8)4w£¶À<¾¶µ€ÎYמÝè¡óFQoº†ô­ˆU9ï¶Î}T³RË95é¶Ü‘u¤ÌªÀ¤\!ÂÙ¨زÎp;XçÉgY‘`“'µ‘ÌŒµÛ÷@a Ák:p„2š‹íyy  8—— ³}ª£ã„W±i9­4V-íàøqÐéç³Ù(zÎì-R‹.L’Ÿú2GþË úik £>ã^;Û~ާ;Ý%>œ"´ÐKúEaiùVðÇ–$t¦¤½¤;a¥{¨÷œ¢O‚ûåkçEJT&Xʾa‘¡øO+^Øb+òÁð÷³RnÒoÁ¡×ëHæJ#ÙÇB›‘teS4µxêí†óæîàkB*:‘GRïðö(†še l)¾©ˆk€€ÏÏÕÖ~~®°ü=KÀ镤»1zï#|w÷ÀÑßXµóOÊ )QÄÃE!:wè[Ö>7EsuˆÚÌa +÷Ñ.4ÞŸkÈæ%Ž`²sÓÙÌi+NœjÌUª7AêÕ+pžæ£Û¸¾ƒÝ{÷àƒy`Ø-2ÿBÒ§~vnpØ®ÞÝñŠªIâ&aÛ>“èäK03œù¯ E–\«$Á4˜-ÙA µ"hÚÆë`s[Zyɰô:p•cÝxî­…ó<\¹;¯OÓ?ò0ÑÀcçFd\-Qýì<€bÊÛøÕ®î¸ðòšP_¡¾ŒRðÄcç¤â¯|ëo/‚0l’i!ý¨èMjxZÀJš¾ð‚aR9îƒ6"¯Ïû°Œ£ãŒoÈ­eÍþ{ó¤ ‘ÀUØy:ã-7›íÿ/D½ÅXÄtj¡ƒúwþh.Û´ ök+Õ—ßÇùaô¾ÔDN جÖÃOE.g4låì~¿aÌ%­p)N#îäÔœ,ãÁvî˜Mùáo+$°ÁÌ–ÕòAÆ“xÜ¢•*¦ŸØáº#HÎe¡ÿ, w~TÁMsG©&¼]žhaÞ.òe—nóvI7ÉöCxažV÷e›#§ ÷[|ß×ù9€(u’@,w8hµ;0%mõÙÎrÕI,uc‰ãÁ÷+g¸¼6ºþÁ˜¦ˆÔI¯’ÒA)ÑÂëq(ª=~'ºf±]¢Ç3¾‚~H÷ó˜eÀ‹ft¬ lóòp^)¯¯Öáç8•Ú —{Øa€çpe¯Ü‰Ï'ÐÖyUª/!PÜŸÖÍ2®QRYë$®µÉ¢i#åT»?§Ž”ô55E1âÆP˜ô4µ¸`àBª™ÊpÂvd…`•‚®ÈE†ÛâwÕ÷Ùå2o0²ñ»^Ùîd³Ž!رNø˜Ö4¬Ð³^©7ÔÂ|©‡ncZ @úÿ+¢Rnz^êf¶Z1e–íâŸ×ß°VKZk3q/añú›ûºÙ×ÿRîäê­²ÏÕþö§òÀ5ÅË"lÒŒo&. §aMFf~âü5™h¢›”°Œ}ˆ €$ººÌ\L,„œô«NENRt\™žÐ¶´AÞç7;ÀzóÓ€7Ô;{»õ:àMh4m°Ÿ#¨Ø0…Ú¨,G£.$ïžäP⩈+þSà®d Kƒ–{Ó0²™W­(À-`±ˆ’Ô”?ÞgI$&1é°_¥M¹<,\Ënxn-o-‘eìÃð¨„cbW¡&7Æ&˜êÍ¥»«û¢Ä*_ukä// b¸U-2 ÊsΠTŽh¼ScµÊ¤øhê’¶Tè” Èñ.‚u+2v•ùçÄqôgú)ÀP²Nú\ai?CEw%Zßã|šp¬cÜŠëÒ¾j¦À*%=všOjR±·GÜ7 ¡ÃkÚØo˜š(³Gþé(ͶçN­ynXl'÷ˆ†dK0-ŸBÌJNÓ³Í#O<¤eЀV³´«Âô}p‚ir:‡Kh= pÔÆ|VÑÄ0  ”øz§?€Z¤)I¬Ù†©“:€.¬û3Õ£R$ÆÚ‡Ðô¢¬b¢·Bâ!,'z¤á¡dÜœŠÔ í²V8“^š¶7RjNˆÅþá»MX»§…”¸Äȳ!3“nÑbª¦>è†é®Á—ÂU¦Ð×§}(!2{`Z/˜g# 4ñ©A¨q²˜ŒQz¡šÄDm H`‚80eâ¶Uñz¤öÁ„SAX[.Zà®Â“xØ(xb!Š„[æÄv¬ñérŒ?/T†•]DÖW“¥ÿ]2â¥Ä,ãj½×­¯õjm»1*fCÓåO­ÚýT-ÞìgmÐŒ¦é‘&b#öà,í¯‘\²u¥˜—QàûIHDœ”42è÷8ÆfJíblÒàZm¡|¨é•]¡.Ëß,*L@ÈÔ&n+»¥óŠ™rô`”D">”™³^Ù0t”£8]:€BgˆžäÿZÄÂ%¶·c%p2ƒœj%¾™F|ŒInPøB´fô‚2–«F)±TFqÉâ:˜O}Œó¹Mó¾·ÿku±ˆ{ød1ôíÍT“öôs!q Ë‹wϧý‰ŒË·xÒð^4` GÀ)üØ äÁz’†g̓F Yštv9ç¹vû —‘ ÈUó WßìÍY’©ÀgEËfž®t¿«…³¢yÛWF€7-ÎCÐq\c¤Í‡ü„’Ö_¸ÛÒ…ÔAÍò!B,@mÄgŒŽÊ®ôžãn–ˆ¶Á€MVV†+× [?ÑßÉÕ*ßð@^ØU|ô«n{Ü2öNpÝ‘t¢f°bkt­þš¹-mX™‚+‘ì„ÎÙ‚D^ƒÛÀŪx-Q\h\Í­9ùÜãÎ6ï.í”Í©ôÚ½áè™[c¦ÓRÀ÷oPèÀ gÊÉW{تœ¼+ÛxdY rŒò ½õUµë}µ9ÅŽöqȸž,N såÄ|É©°>Ê&drJäò¶w)bý7žk:Z²ñØ!‚ŧTáébTôSÚß> 5¥‚7ë¸Óð&ë [‘ë¥ö7H‰äâÁ¿Œ~üT¡ô6Â}šÜ“Ƈ>[íXO§Ê®'°pY㋈@SÞ\!‚´GH? ö}K÷é«’ ·` PiòØä2WbÄå8­sžK_VI} \ឬ²3 ñþýZ‘â0@éÅ~O¨3Ínv#>D¦\›%xìÍÕñŒ 9Z¥Í6ÿ3¶‚¥<Æú Äb¼ýî€÷—u±pÃÐ *€1mÐÌ”qF!-éh9µ.«&‘ÚOt©2*©ê¼Ú±Çdz~Ÿ¼»]pa<Ÿ¢P“DªŒˆ•k¡$|#.„®\H´†¨#U²æóü3®r²¥oÌÙìÊ÷iV«óuЂ¹gã6L¾¤Ëþèpl⸸ÑÚÖEd7sG%g SÊ<â;ëQÃõÄËvhHBü¥$p‘{}&p¯æDBˆD{ï¼ÂŒ[S²€(hg<'ìÆs¢?GÊŽÇÅ4cc»Äíµ(À‹‚}8˜ˆtv“i‰º5<ÑAn6Jd’+r ÜI úxµV(ÍEg‘NnÝ4Ü_ÕOC#–)ž"À#ÿ eÄHüF!$EãÚ³3ôä`±’ëែQQ ôÌm/+àæ-VÏÎ>;˜ß#Ó”¥/O‹{ã&4ñóhD¢¼]¨ÎÙE,!<šËAóKn]:N4´£#¿`£ 'û·ŒÈ±HL´'—Ëh_òñÃ<ƕҟÿWšé.ñ¶„¹ÁkyYB¦¨¾ØpZÅUgs>Zˆû/±‚ ªžüNëRTQ4bð÷б5{G®Ðo¹"÷`~úÿw…Ò§Nj…ÙÁ¼áiƒŒ'7L+–Ö̤9ÿ :@ú(ësÓ4p(À@gWÓ«ÏJš¢âûËŽºž¹3o’*pû‘Z”*N:F°*Šæµà/x; iÖ˜ë«ðq™™˜+“‹³DMzÑûr¯1m€ÌmIëò0ÑBjbþL0ñ3­‹p\À j”ëI½Çjgá’Z úú¥»ðf©M8¦Þ[[Q.»+ÃöTRÏÅ1óÀ½+ÐÜ|ßæ«ö;Xnmð¶Ñ´!~ÃÚx©ÞUòý’2\ úQH³•ÒoÕÐdë߈`+#Ø0åÀêjƘ5v=›TGÛô>k)X²xú`êBBÏ ¯±&T#ϵ¿;ñûéyÖ½öÈ' °l«(q‘è— &£¯ËÕ«\ÿ iò˜°rR×|´6¯¤E÷ï¶wS-$ÀÔîµôKoâ¿ã’AÒñÛ¡idq‰ Æ•ß8PØ£Ñv*Re¾%9ÈW¸j:'x¾ˆsl)fñŸ¯]Ʋ AâÞ·>Ë?åÀ!ÎgóŽ{¦Ž2 7îOêd‡â~ÆâO®Ã)gëdUÙâ6ʉ•2äz™ªˆ·¾|Iœeš ª7OKzª¥ËoÏ!U9¸ÏY!XÈÖyû„öó*_¶ñbÅ«¯ÿ`bÂ2:½ÍÚo  Ö™¿dH¼èle(Á¸ƒyþUÈ™ йy(Ï1ž7²^«Â¿èçóîBü;õ¿¥ÿOªlË¿‡uÿaÓŸðê«/ðûðí+ùôù~%óW•êS1ZV¨ƒqJû'–O¿ÅEcÿW•Ìy!ÝH6s#'_Ãup"á5˜Ý¨25®ÑópëCo+¼ß¢Vl3€ J£¸@ç¿…ø3qŠÉãÓ'.hØÂ ÔU¹ËdÊÔ6ˤ0å¡¶L˜õ/«£¸âñú ±çVFU¬øÂ ²–ärõ\TðxIYÞñæ1$cž¥ÐÞaK$R@kíÊݼoy;È1‚@o:Z”)à+VG0Ý\ Ï$Ãø³Lþ v@ʨ¼ºÙà¿áɶã:Ѱ.ä‹ày°~R&?£WÈëþÖìæi²5J(=—è6zÏM ø1ß¹ EPÑ£û¬[›QþÊØY®Ž^í¿s8y#¡¦¯GÈ/Ub;äàãRê‘áe ßdã$Tý;l"aÖ„¦6é5ŒçoÔ$È:åbüãkß²¶·~‡0~ß± ‰é»^ìAo²"©S_'];7Â¥¤[B”'»à¨Çë˜ ‡*E‡¹êþ<'9áK²¨ê–ð½e3©ôÐUo’ßë[prjaS«ï‹WQ穦Æ)нØÑ r‹€ZÏ’P*1€™õÊüVáÏ· z|öÝåÏÞ–ËóÕ¼ƒ3µ§0vOR¢:¹ßµˆ¼±Pz/Fì£ÔS•½½žn¬É8õ2}9颜®hªXý2ì¨Ã/¾ØÏîƒ/ÝðƒE\ÔŽQ '$ÿEÓ#” î5Âæ5x …ô1›wî!Èù»µøX]àè±Öàç³[ß”.Ðf&Ú¨ô~¾så²–¬—¥{ß³:nÈ£ŒÚ¶øƒÒ¥m$¡jN)‡a‡îê]mgUýëPM¿âmÍa˜YŒÙ,3zJ#¥»¨uÄLÁSˆ tv¸qÿ¤˜êS£|+á¸Ff%aa¶Ì‚DªÕðÛèzÍò<â˜äÀKߎ1ì“’}uZ93ÚÁý¾½XĺµÅk;Íi¬eÜLŠÒfê«X)L}"IVÅ$¨TÑÊ1`Þ%ð‘.I$H ÇÑwoMZuxÆÔ‹E8b´Ë4ÝxôšùF±©9#Öí<ìe„àdydÒèl6PÂ_. x²äóâûòRf*s„žð[0`ù¨»¶÷#øŽÇ·Ó±›P&÷1Y®w#œ"¢öYuÒGÏýRÐ`Ïfí€ø½4KêCWÎmŠÁjŠX ÕØü@ż½Mld¦›”ôÐBaí-zòËñ$*Ø¥Õ¦·˜kåaûý{Û³zX§ $¯pY¡Pä``l .+ÖP fTžtð=+;,iQ²YÖã·WXó)T¶ö­ø…ÒSï6–æ0D8Z‰ô2¾w®fÖ.í¤¶¢“ ?9–¨'‰Í†×\¾îMgÀ5x¥È%…MX~‰ Õ­RÓiÐRu1>ÞwÑÁÐrÙ D¡ã"a0¹y½ð>âx——'¼¬d«¹»Û,Z?ÉóJ~Xr,‰ªF¥HÏ6¨»Êg°þ’ç_ô¾:Öúša§[š&[,Šó}/„Â;¡C`SÚ"Àùq^²ÂNkÈï—áYu N1B'‡ƒ‹u>%,zVoBiÅ-3zqÃîÝ¥{$'öyù§á·5ì:ø‡-+è»%÷ƒ¯Ð€ã î|´QãÉÝI« Sí¿m}ûT5÷ïWÖ1½n%ÍØ£hÙ×s†¹ ×( e’¨ªïGÈãØæ¤ŽÙó" ÏŽñЬþéVOýFõMÜïÙžjK1¦›“Í9V^Ë¡n~uù¥ˆ/nú¬1ÅðqûKç7AËTpk&ÖôKœäý'(}ÔÄ?cÓgQò“¯MS¾[ÍaÌŒøÇ—þ”€ÙŸû€DJ”öpŠõ"Øñ%C6’h&1%§Ó}½˜Œïý;:®&þ‘Òe‹ÇÇ¿ý¾ú ŠÈ¢Kå7Ë–ÕnÌâ=úù½ä1Š­,ú?‹æ4DÄ/-¼Ê:õäù„]uæ~kB´ÒŸùÄÖ$d6id”j«t®ë6ˉÈ[oú4`{°ØĮ̂ä¶â¦/C¢F….%`0eÝ-¸“¹‘óÏ abJÀŒ4žù¡’ß- «å»]ÀïWð*¡AÒ¥%r`¶–/»°yÖa³ƒ-a ê†%A·‡-ÝÞ4Ä×ù‰zñˆTY݇›…Ѹ\ßf”ÚËGÆDä1;éÝ)øMéx~Xä¹ãä÷¥8-ùÎøKŸÔô;ª_ ˆÃ˜ a’{§ß9‹ #¾a»Þ2éò-e)jCJ"ɯŒ„÷à×Aóîw(2‹ ÝOFŸ¾xÜ÷"äRf÷Ûz¨`±È’S÷*€oÏÚ Op òNkl V±¥Gyzª™;‡ª¸åª"é ¯óJ!t‘æçÆÃ$ïG€ƒ/b I8Í—$iëwP"óºkΘ‡œòÀ¦€±W2ç o+h9€ü=´%]ÞBð†G¯ÑëzÀ™8 9JFOƇ-Ö'’Ÿ÷>±\Û<(,ˆ£|×(»3 Ï€Á†,m<¿1yb_‰jhpJbî{mÒí´Ñ %P£k¹9¯ÓÆ'Ì…ó*¾ –“c Únu2±´%Ù24q †ÉWç‰O(Bµ‘ª%©×.FW±ŸŸßyBqÓÑÍTѵõ ÈazK«ÂÖO§M: ±Œe)Ùµð+ûÃ1à˜F7ÚNw;ÖûhPŒ{yVQ©K⸠‹OY—¨³Á¢ÞGž4˰ÃöZžd¤b»Ôü'³-|h¼@·ÌœÞ_U !üË9|‹þƒH} øƒûÙïS„M\5¹8¼˜•)K7-Á«š]Y>åpÏ“Âu¢®p½R0àÌ{kó\+%f)Ú[aKéKåo¼w—ã5²”Õ·Åc¦ñŠÖsÞÚÛ=!¼8dìE]{ü¢ÕÏ3ªT~Ôf¬³ÃôœM³ô]Ëã¤êÃ8s¼FÛ14Ê«‚[¸ÓÄßqR*8ñȯ9@ñŸS …ýa1bmò„ÃPÿKÜŸS†(xaÀ—µß1Î@…›¥ôR^×Á:JÉ#»à…?¾Ãê2ŸÏ¬%o¶§…»Œ›µÝ.ÏÄáh8šS† ‘vééÿŸ6¡€LÛv)ѧŕ¦,Ì@,éi…ºâ‹)©“<e“}èX;qrÄ)LEÁ» Þ¹o´ãœ>ði_fc¬*“Ù£p8‚LÓsºþË0ìkŠ5RJ? ZÍÐJìyÜ„.al³ÄæÏ¤æzxôoÉÏ‘¡^®n™6£{¸H¥éÖßtJØFoðnmÎ ‡ÇÛ ŒËMˆ¯sneOè`<_5@NIã vEÒŒ‘dç÷PÀùA0ì\£á@JÙ…@Þ%Ÿ)y¢€(akõ£¸m:6_.µõÜ—Í¹ëØ p,óù="Û^<<Âx¿N[YLQ7™–'×VÎ{cÓ |’Ì0xÃ!èÚ^Î_úû³õ%¹'HGól¤&u8.­¡Od1t¸ÑÇ𰧉…*zé!ô™”—Üø+Æè¡û`[×+F·{pªH+²—ëé_´)[H¦]'\Þ:åŠç²)7“¯/–沇±vü4šëŠÀjñhÃVÁ©ÜÒÍýȵ4Öã%‡Ø¢=B˜E@›Rô¨ÜÿbVtøö ~ÞCå³¥Äcª7œJbFúé.PBÝzaË»ßdK‚ž8ZE³¨˜ Êr\´ò p(‰»ùwQ¯â¼»IB­,ÃŒ‘JúïsîbÙ¸QÊÁT†}„A›åÕý.tȘpu©ÉßP Q²lؼöo4zÀ¤È4äyìié˜.Ø•0Å1Ã|¸Ÿñp1‡^õÈ0ûBÁs¾ã@>°¶AvQ0™Í‘‹>p*UϺF&!ò¡Ã(Þï Mm«pI„‹¤ªs{¯¸ÚÁÒ¿þ[>¸AŠ*88]²¬ö.¶{ü‘ Œ'ã;÷7ÿuë „g´ÙŸb¾P±!ªYÉÒ ZcníÆô .ú%Fì[Û£# TÑWùO°Â7óqÂZР'½kÓU9‹DA‹Á‰â#5vÍ…•¾ÜœÖó§UçŠ=f©âN++5NÂãU&’uH„‚*=íqœ"êŸXf‡w©øë-ŽßEØ©œKËÛè™m3â^0“Òq5 L¨îŽÜÅ*ÐËý÷xä\“(zäðés©O‚b)D²sc¼í'£hB8'¹ò÷îƒ>•Ôâ™–#Ã%CwXËg»#•Ã\…Ú+ þ=&¾JÂ9Om€à.b⪅ÿC#À®Ð¾ê²‚ Êø‘»v*³'L:@g…Äœ€…=œõ‡°ÑeÜ¡•î(i†Aó͉G`((¼½ðEaìl@I{S_Mu±ær×ÎÁuÎ1­?„]ù`ˆ¹è}sCV‰ðMY;&®êiÃTçÜ‹h_þ‚*¿6àF.×i÷ð™ÑùU¨øÛTªÐ‰Ç:âxnÔ°Í£ÎæØ,+O'EÚKKH3ØÖÏ–x6ß§%Y_£ÑÑcöÁ&]ós”Ï ×—ÜX$Tƒ¨0ž£3®©Kˆ¬@­@n=5/[¦»á9âëÝÖMx:”CÈ@9^µícŒ€>ê@M&Ø#9.$XºÕøøögŸ{U–¶UC•¸£D«þ¾àSñ,Ø£M§4ÍŸo‚æ§Ü)¸†+AÄ.|¬’i¤! %¨}¬Žˆ[mh ªW|^`} ± Mç‘PSЇn<ÛªÂ)E1ø‰çÕ% ö*›¬«H±¹ç‚‚Ϊ{Š^ÄÆw_4he?PÄ㘩¯‘ãÙ(u¢3 ,[2¯&%÷—z›¨Ó}Æ7Ë8 ®÷œÒB?‚zFãâqѺCã^ïá÷.“8äÇêêù¼{ZJg·¡—K-ª ‘ËÜì‹òu"rvn¬JóÌÁG4B2s™7oÔHðgî&Càçݯ°k/Ué)ÆøÅ4Íé8@K¤ÄÖ+rÄêØƒÜpÍn–Ãâm“.õJˆb ›§Heä³G¨*¿a.i[”ŽbÁÀ é^‚|O¶»V†¡­8jlîEå]e±Ã’Ù¶š5>9ŽÁVÞUÀß@PÝn9×™Ê ˆüÒ¬— sy,Ôš„ ѧ@½â(xDŽä;ôGYÒ)ݸ¯®gW<ÓÉ!£ÚsRÉKôA Úåà=}½Z知o clÐÛ¥Ã{mO…¿s¡ù}œMãçf¶NµµJ³‚À\ªôvÜ)QDJú÷Õgô®%€~I¥z¨q‹+V)ä[~’»¶n#nHãݬ‹(?˜Ø4¼N‚ Ü“˜ÊÆêU…ѽ½F-«rq"å NAG Üöõ n榠ˆg÷`åeéð/e»sÜhÆIYÄIë.¾q2ºØq’vm…嚥€›ÇäŸ&)ÿ9ÏsœHÓÓ¿ñ„íè<êÇî«-¶²Êg óXìù<ÍT@€ýsÿ1Ù-lR3ùQÓ;¢¸†x2"ßD¨J¢¦r[œEøu»¡´îH©Ï1j fª0­EÅ!\€ •Wn`:Pò|„ÙÒ_ˆ ±¡hUÆŽªŸ 0` dÑžÎ* ø/Ëÿ‚ÿnÔµ|šVêKQð!¶yY‹E€Sá±4š‚˜w,SË”2׿ù°ž¿XN^y8=Á30/B™Ü ”Ã0ß +eûÄ}ñå£Q‹ÙÿqÈ…nê-ôM¤±¡©Ú€`&% þq÷tÄH#z»ì¬à²U!)ªÆ÷t“x½sÚ În~GœÊò÷ÙÂ¥§3~ŸOb‚-pâe½–FéH’zþ>!xdzM‹ã¼!×g¨—\tto¬!¾b‘1̰ÒlãÂö™ù­0ÿaæP‘P3â*Œœ\ÇM^Å"ýÈ¿‡ 1.9ÚôO: ÞÐÿ »£Tï)žwèG+µL?_‘>ï~¿Íxi)ÃÛjº³¬9×gÐEC¢ Ñ<3Ì–¥ö¤¤ÑáÐ9^qR42ŠƒËJSD{’WÉlÒ2‹Ž‚þP>åð(ƒôˆÜNr§ß7:[òü…}ÌøŸú2— 8† YÈÑ?ùÜ*\ªäè%ËÁŶnCÊ£šCŠföœH=ºGSÁôZ@rz}lAøÌXmÁ²ÌßÖÉ&¢ÌWÂÝqpÿ{ñy¸Ü(O€òo™¿ 4˜»BÚpP û(GLÄÞ^ûýý…PO>€Éþ3–w5xTKÛŸ z·v‡sÞà{~t-C’1.„Ö³V#î.çb¼ „ÕWÚS¹´2= LÙ†=–Éh¤áMk{ñoB¢æOœ~ÙµKR²Ïp—³Ë¯Ãæñ-³:oœðÿ 6ŸÄ‚ÿM|#à5Œ%¦úLHú(@Kõ'‡¼oM"é2Ý!}ët÷bF-oÊØ·ºˆÔQ*Z/ •õé­ž{õßåçj’Þ«ºj3èã7„s|^z…;>оI¤¯%Ú½ÎôÞõšª-eïÚ4ÄT=ÅZªÕ6ðSÒUšiI(JGJÕøE ®ÜdP‡˜wSsM™ññÌœ+…öÁq3å³& ¬?@F…º@U¶ÄQP‰>÷œŽ¿™÷!Y@öZÙMÜïÔa˜Ïö!¥ Ù7!³¬Y £œ["RÙùáÀcáˆ55ÙmQKH(âg%|’"ÒWîs®6bO7zð<àí<zý`õG)*”‹.ZÁ©;0ëûÇâ>+Ó¤z¼pu~lTúMû§>d.é¾@ŸºoÀù½oË•Ùë´²ñ¦•ÜÅ]'øcz;Õ2Àí,C\Yò ØQ F- ºxZ§%ŸÉüÿl–E…A?]¥e.zè»ôPÜÇJ‘Ú¯4&4¶êî.ÕCŠ›å„kh ° Ę6¸³#ˆE˜S§á΋mVÞÑáñ Å¢ðs IÄMéØ%š¬ûYÌw‚µb6A»‰l:qc@¢œnéÜTÒ–*- §ê!áÔÝÛg+c˜ÊsŽ ×òyêM%ÂÖ¨5«UúÍëÐÂ'VêØ]±Î½“°Ë…gdU½l7Dtný>ùOÎ}¯Š“¸§ád•5BDÖ7_pw6»ëM°ƒ˜ºŽ_(°x=¸Œ1‘U(!)Jÿ=KÐ"8w(9>àlÆDÔªÞðóh]ëöÛ&Ò±­ŒÖ¤Yÿ -?LÛÉ‹ké-ªfq{wr=¹Ý¾ûº`-áõ*Nh‚€—Õ¢¯%%çÆµ}:`~̈J4a¯¸îX=cìfÑ<Ý µ®„-§<„Ïm«ÇÓM OÍè…:% ,R3–†;\rôïÆŽµ{ôWìyÆAµ¤t©š/†H™áÞø?ËùŠ-)5½{œÃœý÷F§ÛtfÍ>NGÃzNŸúTÔü†7óøÃå m©[¥aóäÉÕ3}o^½ò\H©¢«º‘Ð Wª°À"ïåè\CâM£°%]¤˜5HÐS÷f™j Z0GÉyV’ j¦rˆH¦~û©ßõí]}b„óý(f -ú†¦ÆKW**@)r·H5ðŽ'¨ÊIôÝž.?F×!šáþÑQÒ¢Ùƒ O¼„»§ׂý«ƒéy ÐÌNaRå>µ.¿Õ”³=ÔµTç}Ñ)ß«Qu#;ÝV`AÉ›Ý{H±>¨‡¿RðIaÈÚ¬σ0¸D+Ü0¾÷èç™-ê(8 œ>{J3Íl+6×vÐ|±ôƒį*oÏ’$Üo1q¦à8úК?º9ÂyXôªÂy“Dµ*¾Ch‘Bk¡+š}ø€¾æÇ]±v'™F^#ƒ´Óh½…7ž”¿ñ×.MŒÕ¸yÆ<>vGI—ADðŽá~ˆ Q¾Úgü\ã%€úZ|fKqbtõ(jÿßS+ª‡…òÑóe)Ô2÷¶P3Y>âXÒÁœëC}h7®}ćäX¯ý@qat «'#‚®-yóÝj(0ŽM5øáLpl§®æ¼¬PùxÓiôxbVÞô=·Yå¿™òøGÌ WLù;ž¼ÊÃÿM"Ô’tužýGƒßßz®ù2ÿpZî‡5î–«/½|«»¨Ù5{Ȧ.kzË>ÝIK*öîzŠpU} z¦tZì«XýÑð3Êuœ¶qH«KÚ”mçôœ*¨8?ŠùŸQ޶~Y÷u¹8’½©ÃV4ãì ¢³çNˆ¬°*‹ËaZ¾5n[cËÚ©ê¾ùÈ|ýþ4&&½;vãw‡ÆjÂjíjëä Þ}‘!p§¶¦CÚNÔIY µÄüÀfá´Úb6“môk¢õPC(9zôØë÷ €2Û]–§d’¯?¯+ôÖþz¸Ð‚ÝÙWZ]É’È~ät7X:㳞üª_鈖JÆýz$¦Ÿµý³?ÄQ|’KÍ‚àdŠxZbªˆÖ”Û$Ô·ÊéoïasJŸ=WÓnÇÝ vtsðdÎ7ûü|‡¦îÈÖ€)D¼d v¢üqöÔ©G?+â‰ÍÕÝN÷ßöÐ×õIÊUA–“iþYµèÏC“´±oÃ¥ûßmX iùÔ; {eÓÿ‚TÝ>e¡<ùïßÒ×—*è(\îü*]ÈH{!Hê¸|£±°¾ÔŒ2H¥ºh:™°‚¬ÿ5-Ú_UI逇 Ÿ7sÔfÿZ.vÔ^½âkzä#ÝEÀNðÓmˆó²ófL,æè š‚Ç¢©ƒíô™Šù[zd’{²'CñáxP ^ v1¹[Âð è>YÍ$…ó/fU€D+!<·Ú„ÖXA`Á+ôƒ]c¨ÿg?cñ§Æ}SΕ¢(¦¦_ä™oSüxéz!r+;~gu²¡v¶&>XczM¿:yyÂ#DT¬iî 6u ü;%•V×dŽEòÅàiÌ(ZUçø¢þa´aX}ôñ§2¹"þ’9iÆ5]L+$Xg‰WÇ”"Œ» þßÿu÷˶eÊ™ÐÐ!ÐÛGº÷/±£¯ìæ=z­br·îgAŒSœ»BûÛOgz˜§4EŒrÇÔ…·T…­c Ó\’IeÓ0íãçØ×µÒûZ.p«cÖŸyÁi«XîˆY=ÃÞ.ç"¹£ŽÄÒD’lÆüo( ×±õ¯¨åð«  ±tiÒ˜{UÂDvǺx+Q1¦AjÙ§Þi¶<-ò´Ÿs–ä-Bcoçÿk\ºnhõ”Ô6§Ÿ\Ú´÷áãê·H²¼mBÉÓ÷qêK}˜Å>]F¬¹g÷§aóE'¨ jÇvï¿^›îôtç^ò÷À!˜ŒìeOÊ¡æ;C¡ŽŠÇ¿“s©#~å\Äq\ìz½èR ò/*¬À'r$rf€MP¦#Ýò܈"lŸÍ²æ©)ÃþšÌ5¯÷¹8Hç7Gæäkpg;@Âÿ;·?¬öÛKUá¦ftœQi÷x+™e¸Â9¿ÕÉšêlC[½lêÈÖÛÌþ2(‹J(󯦷 vL oõ´?ûKi£êgc1܇²¬Á’…®äJ3í8)±Ï nÏ„¾TPÊB*ÐKìMÄEl; VÔ¡“þêmm½øi²{²uõtÇYçÀŽ£'êyreXg²9a)ׄAsT¶ÒF¶ÙÒæ.Ðf­§cš^¥õXæx¤éµ7Ku[…>ýçl,Xe‚›Ò6*þep—ŒYWBÿû“¦Yû-@1S½Pﲌ§û&à%RåÖÁ> •{>#Ÿç^ª^'JÛ¦ ÚDz 8>§…rP x±0ÑŽä—Æ2猎@€:Ùc’ŒË½§ï !ªF^Ò'G9d,%žÊS˜ÃNE6Ë:iź'õÂ1ÕÊ{ØŽZÄþ5ÙU@™%²N–öò ÷þî…¾´Ú.§VL“¬0æ_´°bĥîӖ(úk¼ï‡×MŸ¥Ö¨bQ&±.¦`°·c{2K…\V÷]‡jð°‡ô‰^½örYmÒZƒz%F܈™ŠÝÞU:úõï©­ÿG`ïÉpv¾p.M”I~H"rZJ UT²n³Yð.‚'fÑhWÿ+Vì$IvÄúõjÔ^Ñd°e®L_ÜB]ä‹É³tÜ/è$c å«]ŠKü ÚãÇ/bÖ§¿iH§ÛùíCœ’¿W”®6Ãà5Ë´ }LüäÉÂ7~å„rKì—«6‘mgHÑY^3ñ¥¹s(4¯'ЫˆiÇ·g¥ñÏM*­T¿Nn©÷¶˜&üíû-”¨ºq–öÈ‚$MZoYá.÷P‚6dÝH-o$$ ¥Þ¸º”fVl‚CÝ7–ÎOAÒ$´ŽÌÖì ®µ@`Ù2Ì厾¤¥$SSP^Rl¨r~ŠJ’öñJNr¤ ”L4mxî—Å{@*>f„¨âd’~k6LOÒòœî­žg@3B²Æk¯Ò€€çóíÚü;è¿ÿOª<¿¿‡oŸÃ¤ÏáÔæ?‡Z¿Ã²ÿpéøtNóW@'Uy‚Qs‹ vH_”!<²¾pqX·Š)x+c;vI-h•«ßÙ ¯ÌÎS (/Ý·•Lþ&šXñ<*·\Zûè/Fu ¤ ] (ªŸ”*ÆO†Ìè—ÂI¢ðšûÌ–XêÙAŽvKÑæ{…îL+ ž’Þrƒ¡è¯£Õ^®±u[ã[Œk¬˜ÍpYÖØ»H<*«à|,Ô×Öõ8,«{L7€ª–Æ9#Mˆ´µSΦÙÏ;Š>3€w‡+ÛÞ»y)ª±7€òlVƾú ËŒüïØ¦÷öújÕŠí3C]ûNk)¡ð…7¤èS@˜M»@–H(‹ÓY Ä´Z­)UÀc :I~•Šh9t]Kœ Ü){ñvÂ'1ì쟭ձê?ørñú¸AÛÍ’s:ÕâhqËddtD‹ˆÈ·µœ äŽI" ÈOüA%µâLs±Œxm˜$ï&™ú˜k$R}rÈgAË­*7. (ÐW¨ÊõÈa»3N¶±AÐaÀim©“þ¸gf{A=´¡5¶jL$ˆ\ºõüW 6û݇ǒÆÊ²K!ŠZj²q¼¾ŸfÂ(R®é2@»+;Pº£1Wбóy<+Âàxh:#*Û?Í…ÍÉQOs­“pŒº\>ØL¢#?búJBðúý– BÅ1­’üËñÍ'¨ù šÎÖ…0À}>~"~Ð=:¢7vzsh%çLõ­}ôì)IÕ£=WÅ>ê¦3FA ÚPw¶Îãï /ÏLK­¯ú’˹dOÖR'|í¡ô9Û*-$Ì|,MÿxX>¾ ¤×®ûΪ‘JáÃv}ió)º/?tëm}@ Ò/Ä‘c±aŸaÌr oÀV”I©¶ ŽÕ<âðŸ^â ‰D ±G£çÀÊFŠó)×Ë´Þ¿Yô!©ú¡þÒ~Èúàî»9¡~7>2öñ™9„5gè´,Êb•ÉRYŠÆæ_ÑꯠÀ~"®PÒãoiº “fÛx|æØ -æ£{ø¦ÂŽ^Ýs&§jœñSg&íÇ­Iý¼¿´ñݱšLëülÌ yïsê}²zââÓAHÆÁ€àï\îŒ&AÁ'r‹›¨(¤Õ1JñT„ž5l'ûÿeûY£œhÝ—Içu„pëLQÖСoE£\‹ä‰¸¥ZtŸ· ëEøtms`Ïr cr?ÓEó~1|”¶VBäóÂ`H1×KfúëÚPâ³ùÿG·ÙÉ’Ãö³t¯E©càUAÿèÚ(ر õ–~÷uØHæ VÙTàõ†êQ­Ÿ›*o|ðeìšhA^ÊÍy¬qOo!·ÀòZ‰>‘À]ÅñÌ97Vy¡ù EÚñ¿·™\åW <%Õ?E6q µSßÞ4O`Ôé »4¤òìc+Ï÷d°ÍÐ_(NÅFLdàÿc¿â‹l¶îZÀ?ñdÁ†V‡ ¨¼Ü]NÕTÄÀaŸøÇLWU©z©åkÒK±rcðHNå¸Ûˆ c`ó™|ô´ìŽ^Ó›èÙá(•—Ò{ï @ÁÝf©+ÕÖW¦•ð£Um‚mR¼ºQ¢Âݪ’ÞˆýàŒ2+vKàJ/>ÄiôK¢féËyþ²±ïOןëÙ¯‚,˧Éî%¦Ô¼ªiÌæŠ¢Ðk òvÜÛ0G€i+9·|•þj‹ŸS 8ÃTCWöÅ5q‚Î|2ˆ¾d%t’ôoLvΆ‡|!«S˜ª‰S`·aCvôä…n¦§,Úv22ð½6R›%û(3&|/Ô ( (½Áiñ>íOÉð²uìÛNÌ-Lpª3µ²;Ðã³è”Ù±K;h$FAÍ2möÊ»)­Ûn|¢ñ!òðºõKªr®¶÷†.ÇjÀbÌt½’K#!hpÐv}!«tƒi¦rƒßÀ…Àë]bÐy"³†U jœQtüš¾"%˜ØÀts)­<$…l\4ªCÎs‘ýu’?À䆽Á1òäX¹r{†ÔÒ«V¶žvÍ áhÚçxCìÇÛËl1s"ÉrÌÅÏ?Î>b© &‡Ä JJÃßv^ íhçã±tv2N§Ò·“Û`±;ÆûÔ¨qc!ÏŽ¸âöà†õܵeàK•Ix“ÒÓÍÝw%Ы!Ò Å<à2ªƒ+P[Úú䫤^ÓßÀ­oÕžÁhÄ8Ï!þqgÔ©,ÒqX Nv†ÙÇœÖ~Èû˜`*™ ¸½LHyá u²¡þûp7}=¬yð+øð “´©v„©ÃО¥O9ù÷RÌó½äø“c„;»xDŸK{õ`iìû!J§”þWé:ÖÁ:BL÷Ö opÒw¯µÖÐà陕‡rÔ1æ(Z$ªÅïÅ!ž—«49ê+±6`ÏR,öù¿#}"N+|ý]éË'³/èkçÊÙjý‘ç*0Øwü3kX[‰°¥ÁQ©€gœŠy3·g#œT§ wéwcFš:;jžD5„úV¤æŽµ“]›nédG“;{bré´et×ûܶ7Šç'1ÚD 1[˜ ‹|r7'{4WÒªdí*zRhÕL“Ó¿ˆ§«U°Ðuniº¨ó}u¯#fÖc:íäòý W¥ý·aß¼ˆ^;pKò`{o¶Mn<Âm4 ÅDû= ™·Í%…™àYèõëÆŸ]IO€¥{_ç¸ÚŰ s9ãYvYóŠóà·àŸÈ8S×/¬ ÄZÃi²ëS5ë_=Æ­ß‚A Aó=SЩ&åIn·ÃRÜ®€ NÌ/ ›8p! eoÛE$Ë­¶²›ÚlÛ鈋jpÎ(Mo¬Tãç û½)#½aíüW £âDÉÊ1£2«Œ¿âš]žÓg€ú™—ÝÉðŠñ(ªÁ”(ݶ`I<Ð5nÃ/€- üo”6m~½£¸‘~žª“­ìEZók˜ H…“þ¿Im]?s¦­X–æÒ´²1;o:ÝÁÒ†¿ÚÍ›óªBCCÚo2·-yéäù4Ä­ç¥å?ýsòyƒÙñŸ»gîEG!Ð¥}ù‚R)¥&·jÇŽ,¢©ð%Ý}ÔKã^Øüçøòµ1¡z<\¾¯]<Ç_Ô_^I6ß÷Ø/~‰Ç·‘<ôZÆ5kÛß”3± 0¸(kŒKz»j•†2!;¤*¾Úp>Êžb2T¨‰óœÁÞ RzU©ÂŠw,gMáùþ 2GV$1£¿xbP²ÐJØ“Ê/ ¼„À¤ßCÇ8¿ˆ8®_tˆd﬘@œÜ {„Ó„õ[ í[%‡z8=À {1mjÀ•™‡èæÑ.†„YgÇÍ HÄþñ>PÃ="“¼«J}Sn{¡`†h(l:¥Dùç²R32t­9™ þñ¥d……7v&H”N×€› V”·^§Àõ›_¦ZjýMÒ†[cð†3ц²¶‰HÈÈï˜ûGâº^qºwXižWÄJ@iÿT¸SI^:WôàLtûÓIƒÂhæØeãÍ2ïœãÁlèbË…ºœæô µ00áÀ¬1¾ö¦å`Jý›Ùw{ë—3´zu}è爿^õu¬§J{ZÐR&HÊíÖ&Wkà|˜V§é÷—Sk&l­ß‰J%¢Þ.ø2¿­³­?¦£ÀÚ‘@qVqÀ!., to(ÚPÔY·½ñ„æÕ Û 4o¶û±ùJW3챇Ž9¡²·(gZÒ¥M#ÅÌ;dá®,4ª+ƒ…§¾°õ”¹@´vÇ! ×ç´"êzU2Îz›³2/ái¢ÆÌV$sm˜K…H<ÿ1BÛ©¼â-Êý;Û¿ †wäîqp¼KŒÎâìíëtfƲÃ!Qš‡⺇,¯À•’xæJfY+#,Æ0u ›Úè/”ÌaeÞÒv«—Lß&n‚‘«É J‡é,Åîñü2 "<0Bï)54"B/W¢û+@*+MŸ¬$óqßñËRª‘—½úù‡ÝhÂm&©9Åû½sÕ#ŠjN8æI‚‡!VÆ*Å]4£šé¹(Ú¢ï_ó&Ùÿ]¯+幚ÿ>ÉfL§ê©^d±eçóÛl¬…ðÌ@Ð¥¸…Ëúa›O¤<”í‹õˆÍ| AñÔ3´®,—WxÁÕü9<(MËòld¢”Ô ã 9Uò´Ä¨ë c¾a?@›ÒN½Ó»rq—¢¦¤vî‹ Üž\#L …¥$ÅC'­þîî_* Yöì] =î?@1ÙÓìÏtŸZt©^èbY Ãh¤ }2ÊÜ6É;¸uàÑ­|LA úm¿Ü ‡7å c2ßMfZh g˜Z¨õŒw<\#a0k—}æÝjCOýÚÝã®2 ’‘@ƒÅ’¼»%Ò 5>TŽ/à ‘C"cÚ)b%wÒ4 T(5Ž5‰a@kWØgÂ,Õð¨¦-Y¢üŒ)ÂÖ ­W6<7d@ÒiµÛÓ¾¼2gÎ`­üƒºú+£LnpÐÔBµŸÄ>8"g{Æ=Ð…&˜NÿJ·¯BueVqzPã«Àû¿†{&ÊÖÍ€þØ5ëEE§ƣᑾ/»®ZHß±)zDƚǫ”ÒöK›õ*Ѥú^F6ƒs_—ÜÖú`B_„[gõÍ4öãÄ H}msâ-rܾZWÑø X—«öTu&ƒn3§Â[qø—t §¹£¹P]D–ÖÇ8‡…ß÷t;͈-;»è&P¿e@ᣨt¡6y¹6< N¯eœèØ/¤‘ ΋{à1ƒ†ˆI:߯– Zçt& +IÇœh¾Á2G$˜ù8U_¿‡I´ªwhÀ¤ xLjml.½ËïAÁ¨¼fmM¸6*Z[p]ñbí³|ÆÉm§`sÜáø©ôhÊu£i< ô(×’ˆ-û99€‡%è>®ÑF\¨é–þ½a8Р˜×6ÉÖ¤=«€*ÿJîi‘·ˆxØo‘ÿ7ÿ-¿âúü9籯Ò*ÜÌѦˆŒx“u£¸Û›¤É÷`,þ ¾M†¤ÑG=éL­ýaÅ/NVôhh±jEð¦|œ°ßKøîƒÉ`©‘>RÉÂ6æË-Iz¬\ö‹%qåWlhdAzìfŠÕñ¨~fx´ýÇ »n|ÜS'mÍ‹¾Æy‚^äæk°ûU¾óíˆ9…׳ݣp{F:±»ÝøöÊ=p úò2·I–ßÍwB²«·Aãá;®OZ8ÏÊRŠ36q³qu}_|Ÿäm‘=¯wHÛþÀ:ipÌïQÿI¼ÿ&_W F „ïuÍXG éX‚æâ Š=ñJÁÎqгˆTp…ûW‘iq ãѤ]¥•(Яë4ËÀ+6¦Ð¿- žý/–\qÊ`r¿Qy>¹ 9AÓGx3ï­Üwå¹ðawËÞ+}€“³þ¹m\I~Hx#7Ýÿ…æ®–™Œ›/‰oOu¸b5˜:_8ŠM.»×+ŸSÒ¿*ÝKü뤬ŒœvE‘ÅaвbÏr9üŸ¤ JL c‹QÝfÍ&è{g3 —ùÁ ÷[JkéGBy;Ú79÷ú݇dñ¾¤SŠ0‹”r'êý*X‰ñS$ò`³¾Sp{9ú¼·™Åë“yµqÖ±Ž@ç™Å$žöhæA|ù^ëÚÜ@ŒðÈÿ"– Táf vaÚCŠœ nÌËV™?}ïî?·’ZA ¶L~ï°ÐrëÇ·G$ß 'Mƒr åõg€²pÿh<„:M—´Ý€Ó"{ ®8¯—ˆCÉF<Ô>‚’°¸ªì½ÉøÅME™Ì×9sæ–sI¡Òšž‘®½¢Ù7ÓÂ1¶ÑWÏAjæ ¡Ë‡ vºiÇŒ¢-5ðz¥~H†ìüðîë)ŒâwG3ozFå!f¿õ¼ZÂOjj3Ï‘x¼Òzh—pFö£Ð`œ”<Ã©ÌØf ã6÷ì® -}ôÙ)–{æ¸À:`½SSZ## L8 ät9÷‰89•֯Â. C­EÎÆŠF¨*¦°}7„,f]ƒª1—?ÚÌr@ÙÞ»,>y±Ò´·T“ƦæéÕôå2sMSY˜3ñh—‚ò Ì%GƒU M15þ@÷Ç<ÞÕÂÈ Å:ÃúX9z–adFî‰ p*ŽðÈm•\r_KšÉÖÖ¨hL´íÁPêèš_ ³³I—_¼tð\üÿÑ^Â0÷}{ ÖPîÛ±ùW<ƒ-Y͹4«Qã €º.`b*(f€3ÕÈ%’’ÿG(¨I­[»¼Õã^*Îð0Ïã*ÓA¼ùò·àçÛ­F8w¯žõ·¿£Ëo6ë-ú°Uº4©ùK’ÖÇÊA:TöŸѨ¡Æ°°_pz_ÎyƸ¨[%ôûûÐk‚‘¨/Ûly°ò|œ[ÿL‘kÊíœ)Ýü˜v@ªÙò]BI'3qr>(^ãx oî5û½é„¹‰#d o…¿áG|ºU²†š¤xLŒ áâX²¬Ãñ2éŸIûë ]á{Ô˽ƒ+è;é¨KœÅé(Õäƒ}F‰, õ^Z7²ØƒsÚŒ“¡eÌ g¼Í Í-Ã]ZUŸ\<ÚzYµDr:™&4|εNѾa§âC}ÈÄ­’¶_Ö>h6?øÇ\]2žÐ:HZýGÓ¬»îÔ`̘y(N€ÁÔ•Ø$…ÁáçÄ¿&8Ã…‡C'X$_,A¤ø*ú$£ÒKͽÐö­m uò > ×Ë Ñ’ØåŒ åÏï®R‰«nôѰD¥ûÔŠþy2Õ¤çïí÷)PU !QDü0‡ž›÷¼ÌÒ²t%méŒ\¡2õÐ{)Ån±\Xß±jŸ…³ÑIžåâGíÏ‹©ª\Aù=½\d“rš t/Þñ¼)brA þ—¸°ÏM Æž1èžõ‰þñ]ki›kÔùõ¢§ØLàÆÕÂwƒÒm³<¸® ´¼Ò‡ÞõxFˆ³–?ˆdz—͆—™(‰eé¢Õr-lÑç…æçkIQΣëÓ0‹C®¼Ôû¹Ë­À©x#fÔw3ù¦} §Gû9·™%Ï‚&ÈÇUÏßTB}%¥œrvÆ›¥î4ª®TA·(Ùæ¾š;<$>]b0¯ØüXs>¾ªlMÁ“ÃÄ“áaT¨4™?xL‡›\{×DÞ÷ëÆ¹¬iÑËæ†n*&sâáךÒð÷#Mî£h´¨ó0| D!qÆÝjÜè×TSUFr1]QÉÍÀE«BΟȵ[ÎËÙ%±ä;õÙÕh Í‚°;¯†äú¿$¿ÄÐkLh€“‰[ÞY;SÐcá6Ìæ_¶°rÍsïé^{ïdŠVEZ3êpx½OÜ·àc!~§;XïF¸Š:8™O¸ùRüP†8 JF]H€š]Mo d#B;!H²üzuuj­RY ’Y4:´EìlÞì-Ñhÿ-tÏ[‰²è]ü·b¦ªßùÿ!sºAö&ýìùù©ÿ/·å‹èSqœÔŠ‚iu;ó0‚÷¶ø™'÷H¯<$츾H¡†þŠ0ãÃ[Å;îX°ëäÎNÌ2ÆG\…ëŽzÌ w‹…(ÙGÄ)lZ·èq檎.“f¯ Gç€2mOÁä‹ Ë ’@öÞº*–‘ÛO^ƒ—;'dö" cö²dOã ±_븵¬º_–uݧ«ûÎÝ÷—¦°d¦­ïÏ^šëîŠÚöŽˆŽÎ l¨é«WŽý­"gn‘X(›Îtt\¥åŸ7ƒ[ÓrTЗ“sZ˜Ô5`k2S2U0yï~~á¬Eq°*Ì­ÃA(àU•”R’G7xA%¯Jãÿ$¥ôx¾4óçRþbfŸl…‚¯W ôŽçô«0]OuMoÝ{H¡Ê`Ú:Uir³„4ÛÚ§ß1b%wÝø:vð„Nº',µŒ>ãåmzV7±ÍµòÓ£™KŒùè_ô›Ä$ÙÐtw yÀÝ%z ¤ñ©\à ü„Ðï¸C)òO2 4`!·G Í!7‚*0Gq^!‰Ö$²´§RΫ€~µ¸É펎°Ã`žjôMTÎ(#„KÖÞŠŽ_º~I,®AYí\ø+.) @grqÊÿ!Bm‰yÿEÖ›9“€,É`˜òº¢z=½ ô¥ Ž‘¤!/«@d8¹W‰ ‡ã7d]C.ßêß=óhV±xà<.Ð’òº éön0 jÛ㟀b3×+íE]7{Á{öSÛ„ÑÈ<êAVøE^1‡é0!wËZÍüˆqýÛÓýbÃ~¡uÂBØ*ß64ŽÛlº¿ÿ}%'Zík}‘˜8oѧ¹£ ;#àx’^:‡^?é(XM,E³|âÍË$5èˆUNŒÕG+’¡ßP‰«»¥ô3vn˜f•¶Fîxã,Ðix"n hûÛa5j„]Ñ:¸ÍÄÏ”ÁÕ3Ióͱ•¬%Û@E`Ý0®GzbKü½dø[þ-Åyyh¦§v|’»w’-+é| ¨ßÕÓÚ¸fÍ{6 48Yâ:*»9uoyßÈPSXÝV“Ä¢w'0ti>=›ÏyÊ0›_r9]N·Ã:U_×_˜QsΟ¬Èµô¡]"øgÝêVKÖa¸Œô¥på9“ð•UÌÊÜäh@å]Œaã:ÿYÒ¸MJÔtxu\¿v';µ^Ø”(éá•Nd޶á™Ì[#™"A[G»øÜjd9X/d½„ü,ãÝ$™ïûžÃ#šž¿VX“ºbˆYÚÔcÒdgSÑ\»¼GM òXßË,sÈú¤-ºÜ“¯‚èi¨­9Õ°Wô|îj‡S¡zæ´\º«Q'Òê¦BØ”<|-¼ÜA 5M ½KYhá7{ FUfalìvþå—ð6oˆ>QD³#ÑΉÏfª }̸¨þëëF¡PË+çR ˆá§&t=ùºøŒÎ Z‰"ö0?1kÜAVÑëï ¬Hj#í,ãáåJ†­Juz Ü;ÉnëI ©»}ù’széåTv v)Ô+ x˜HÏm„ZmÏÏÝñD$²9£ÛlŠc “ƒ{gÇ6¨ñg4SlÕ¯fd™;®¾|„+^¿Gõ>•*dÉÏù ^Tò‡kîËà=œ}°£m¼îòl~ÈNŽ‘±Ø| $b!¥;N›Bå¥d°áÜ* ƾÅÛ5ÁíÁ,Œ°ôrôtNtü¥<¯Ä¦«+ èÝUøïÞ¸$íÆ ìj†ˆ¨gž?%ÿsÝüžxEPiðǨi÷÷BW«¯ÉMÔÜ1\¿"_+Iƒ(¸¹†õ¢…¿dŠGD^»èú ׸1­Üb£éª™õü?…·¿…‹ü?…kü:oþ1ÿ¡oáZ ŒÿOZ/ÂÍþ ÂÛ¿ âü9¾Ôïáÿa Á²û\ÿC /á¿?ÃQ;íqþóÿ¤ÿ=}©¿Ã@¿…áü¸ÿð´ÿp¬?‚Ïð_þÁü5#ø\ðXþQÿüÿA7øWß¶þ Àõ–f×r †!ͧÑ\„Oˆ'hÓMë>ϱø× Y¨gÕëÓMûÌûæ µÍû!rÑ& ¦rlÿxz1IsMpŠéÝë«„WH±66õpŠéø_7]>z%kh®ÿ} [ôvxà&œ¿c-û² ö °œoß—ï/­ò.P‘ų).i£Râà¾ÜÖNt*§ÕÊ]½¬&à `“nØ"z1v䱯¹×F3ÜîR8ã§‚k¯‡ó»R{uü)}þ›À– ª=¤€ï· g´ŒÔz$X³™’$¥F5­8¿žtY,¥¹ÆöMOÿ*O­æ©`Àds È…ñÅ~/ëÜó²éáÓ*îÅM0„SӬׇ‡L¨[¸C4 ´-šððé• wb¦—ø‚bÃK†å%u… bÛ­”Õí.>¥w€\Ù¸æÆµõ,d™àT¡"É¥Á¨½iHޏêuJ,1)-ÄÅ]áÞÙ÷øiqø_‡ž}¨Ô%Å÷ÄÊ3›´ è¼0͉æ>0þ5«Œõ)0ðÿcäc¬´ çæ¡–¤‘°v£f††?ëùT¿ÀYfGkøÕßѬÏÓü·•æ‰)œRûæj0•æ‰)œRûãM™€ð´¯4IHÌâ—ÒôãIt•×ÓpaY@e‘­½#£ããi-3©[Û„_ÿ{ ßh\WÂ)ÌÆÚtÙú¦šÛšÊ|©¦]Âã̱VŠ‹tØo÷'ŸµÔÛT¹Í×—–E×À¸¢fȪ¾üZàŠ÷¦,Š«ïŘ}é‹"ªûð—m×Jv&Ôoæ¾h±âí³¡p¸àM„È™â)6° ÿC]…1ºýwpÆšcêüð,Â[vÓ¯ÿM`L¦œ³ }«g–Q-¥.°+(ŽCç"¶mJ8+Ý>ŽÒø¶qáˆÄ/9yŽÈ«Ï/az;L|V÷ ›êºü-þèóW ·UàÖ)W(x•¦,mª º<Õè-Õx5ŠUÊ%i6ömª º<Õè-Õx5ŠUÊ%gM2!ŸeW„†iwÿ6iˆˆäÒ°k³tæ €|¹mLòÅÙ&‰6þ‹Lq±òWèðË;5@1Á>¥xº˜x[¢Ø®¦Ye9žûԙئÁùÒV2§–t“|Ù«ªŽn„ãéƒ ¹ÒM>Aý5 VñLéx2" û56ž~dØô_ÿ_…MÙ˜|‚0Y "Üô"/ê,æ`¥Öæ=ŠsŠZJ4/ÛZ™'}*júþD*78Ú°ºµc,Â(ªF4âaƒSy´P½Ä@ÏLjv"‰¶ÇG¡pÒ:¼*ê­‚d(­kÄ8@ÄëØ‰{Z×´ÝWÃÇ®‹ì/Âó¢„=¿~•?fXÐÔCi•Q~]?Bá™s‘ž"šl¨4sžè}`,íE¥ŸÐ5€pä\|°lb/:ç;¯Øª"ø"N’ƃ¢4áÒP @¹‹ï*Üàžo-ªÓÑ0ñN^“—¥⮣/¥YÍ“7˜P© ?‹û_úÄ1@™Â2ø«< Ýw¥²±-D‘§!ˆmíäèŒ{•™«,ÓVžˆ‰‡Šrô›ü½(ÿºŒ¾•g6MüÞaB¤4þ/ì9ëÅg 4Ëâ¬ð3uÞ–ÊĵFœ†!··\ûÀÆòѺ­=åé7ùzQþ ê2úUœÙ7óy… Óø¿°åÿV!ŠÎi—ÅYàfë½-•‰j$9 CŽÚ© ËÌ÷xm<ëËí¤Ž«ÄSø†æCBÚ× W/ :S{ P:D:ÛÔ&±°Ñc€¨Ê„¬ü{s%5ô8¿Çà}=frÌ6Ó?f4ÐÅzŠ#}£ñgŒŸ«}h/%ûüpÏÇ†Ž ËM~Cß÷è+`mÛ6S˜„Ø%Û„΃É<€'ÙÙ 8Åïîaq‘8· Q9 b·ÇéŽáñ¯éêõ¤ØäßÎ}¶µß¨ùZ« Œ11Ù>ÙÞŒ¶#ÐÒÏóRlš‹D± (Å7ORkÊ{'¢¸Œ1­ÂÞˆö†ŒI¹_¤fµ}¿—ô”àò4?½M »Ž¸/ß8îIO4ƒwœcaN}-yD>i™?«(™k>£¬ùŽ ^üOøù~;‰¬÷ñ¥;ßëàŠyWÙé0Ú™[y ïÊ&ßÒ€+™4b S LîgñßÎŽYò3ÄÿýnÃ’fâΓ„~œì}IŽÖQ8?€´³s/áQ'PfïZ‹wîòí1@}ýî#VrZõ_"‡cÕXψÅÜü ÁŽY•YˆÛPþGb¹XŸ˜ b Ñ}7ö…íBr‰ð{õw½L°qôX:JN'‰¯VƒZ °GÅpÙfú©¬c¡ouŸˆÃœŒƒ³*>³¶¡ü(ŽÅr±?0Ä¢úoí Ú„åà÷êïz™`âè°t”œO^­µA`Šá²<ÍõSXÇBÞë'ÌeÈÈ1Ë2£ë1jˆìW+óL@Aº/¦þн¨NQ>~®÷©– þ‹IIÄñ5êÐkTø®#ÌßU5Œt-î"ˆQ¥9ºhË8¡Íûƒ¬ñ DEEÿ$ÓÃÎ/Ýsk÷»™U¹eˆè ‰V̱øqH5”þ‹Ü‡÷´ì……4˜4G×/Þw…º^!!gŠWügꛄ'Û .³äf‹ΖÀúoÍœíœ(mXZ5mêù¤zGˆêq>SVLÓéæž ~$”û„~]tdô[JþÊ3ˆ)¼u ›žgÓ(ª„Xô†éÊÛò›ˆ½Â™*ŒgN†¤Œ¬\쟗x<®3dˆr/"$Bÿj•„ß¶ÒŠúí¢12XO—Wî$ðCžk*Ï Ú\1yaµ`6ù$ðCžk*Ï Ú\1t´@mòIà‡<ÖTž@´¸b»€‹#ÈŽ:D¤†rû¨æ±«`Xþ˜RÛm &f#õ¡wB¬‹ãÌ¿ÅùàØG™ =[Œ÷X|Zo2ÓcaÏœ•MÅe_Ä*?ž8 ´'¼š"¦4©/a[Ú›ï² oœ½=Ä>Q¹Õ'ç3ƒ=·é¤˜’ Òp“1u`ui¤túÃÏÂŒsWlÂYLL…8Ã겈€AÄÅ$¡9dã œâ´Fò¼ §TL‹N)Ù`ÿZÉÞõÙ~ ïH?«¿ÜÍçÈ; ¾~ Ñq”Øäxö¦*Ödc5 ÊW©/ÐU6N1]O ÂÎáJ?Û!>K®ÅîãÊ „">­u-²:½Œø}‹ÿû¯írÔVÛîÑÞY ¬a[cáïS\‹ŒDö˶Ój\}¼oÈo òð<ߢJ@5B|ÒÏY¼-“½“õdÇzŽ/Å®ßw~C}—æýRª£æ–zËýál쟫&;Иï×o»¿!¾ƒËÀó~‰)ÕQóK=eþð¶NöOÕ“è>Û¢ÝyPîh£”¡Y³—áÀ0îô©¬haÙÃmÑèá‚Ò‚×=ùÌõ‘Š×öù0:KžÄ­hè2¶Âú‹ê‹: –¦0x9»–ž¾Ëø=¶é,›b0¨’zUÕ€¼úk¨RUÄ‚y>ϱÛ_€ˆ×Wô9&p"=ÂÏ%i˜¤Z9Š•4Ãù< öË‹Z•†-Y&Ä*6$mà ûþ I¦ª®eîÒ[î;Øb3Nà«xo_0ð°ºeÈE+:äÜ&vNS„êa+õÕÊa2(>Oº__ÿ~Þ&#F‘dKâîÝ‘~¨ §¬ŸàA ãÁÝMÄ¥Ü<óGŽš ¿¨¾»9?¿ÈQÓá÷õÐú½V;öÊÎ7‰PLü¢úìäþÿ£§Â5ïë¡ô:z¬wí•n7 GŽ-‚–ªzš˜À0eວmÌMå9Ÿz‚eªÝ/›MÇž7G§ô=Ù‡S' èY7ãß‚>×@ Xÿ[ÁϤª”G‰5©¯ü¦™ »îð¿;×{ïPðž›],²ª v¨Wo±ß„´»êx'Hž%jËßþEn3#áu;¸³|ôè}Ù²„DW²¡…8O•ÇãJ}Ï£é%/íe;E^¾-§åÂBW)÷>¤”¿µ”ízøÆ@8¸(Jãñ¥>çÑô’—ö²¢¯_ —®¸•NÕŽ I:gˆ$ÏGÒý·K'_›+˜8"„ð¤ÈÙàáɘ#;Gëwj3–•ð²æy²³ìå$Y^›ŒOí˜ÊASüþÙDBªŸÚU˜'ev‘!Nv5ªÀ–åÊUMàëíU´ÆŠ*Øâ ûž \ï5fÅ’×NG!!cäxBöãKHß @ó!Ô!5ëٛЀÙ/ˆBAÂÙi’›ç¾þ Ií|Õ××–z9´®Zºø-õÚW-]Yô„¦Ø^õÓ> £"KRgy4µákI?›¬Nqú¶ºQª]Ó9µ†-ä—ÌIîzí¶ôH’W µ%®41§þ'gƆ5‹hâ‘râ#-›V¶å^¹‰âpú•Iåý\I#²§4×VéSú¡nf0\7úü°ÅÂF5†ÄÎn˜ý}c‰F’Æ­×"3Mpïâ6¸©¹´3´cS•pîiKŒ>ÏIÿS°ÉÄjð v;}¶XƒmS̸¬¨S:ŠìÞæGÚÇËE4K¶”0¹y!ÿ]æ¢Æ­Ë$^ ÑßU@´)¿T´_úšQ€á¥ðSG1Þ&ºÛíå0oZtÆdø7S‹f(EáÓ¦ÇîÒ©ôÕþ/ƒû Ív_ñ«³"ðˆéÓc÷iTújÿ àþª?Û/ø×ÏŠ(HáÓ¦ÇîÒ©ôÕþ/ƒôà*çë[”ý7ˆÕ,–äà¦[š:سQaJ϶õí/Èÿ_hS®Èÿh[ƒ×!ÔÏsU­NÊV6JÑÌ&Y«sèÊgÏ‘ùzx´ h¡³-'žò™²öUµ£÷QâÓ|Fâ—Sïòò‘è—œ"ÑK=ÔŒbâzòe™xØ~#0mì;šÜ]Ä_¬ø£ŠâÒ¢gJ]KT?ÃuVÀ>yþ½¿´'ýê—} D.0ÿ93ÐB/¶”Ð2&áö¦mçá°Øqp L.:áj[ôÀ‘ú¦mçá°Øqp L.:ájÐ-#ôLÜF?˜VQøÂfÎlæ5ÂÎð YTÃ2´ÙìË#Zêí6¶ƒD‰ ¨¦úÎ.¨ßœPÙ·»esåB0Ü÷y^ÎͰ‰fnûžõk¶aš„gì7¿šÑ/UFí-“¬mÛʆ ÓÙ:ÀvÑ0Ô{'XÀ—C®h¯©DÕF¤#%>&R&•I2;Ó;¬~ƒÎg;+_4n òIc9ïP–§íI ~YWðŽ…˜Å®o÷ÌÞÚäa¿.°”>h@g(D{UÇSû€' âk ÿ1"2€žÃ]ÖsÒ„ÕÓ8~OÁÇÈÆVö„5;Æ1|¦>ÉVNá&=ÑW[¾ÈÈEð!Ä’F<³|¿–ÊòÄ(J‘ª¦vk&}ß߯©Pë’GM¡ê¯Ó‹¢Ži¤ÚT¿×³ Ã<³ä|¨è‰Ì|v¿8™çi3u¥ç¾ò*þ9â³rhuiP´ÿuã êÇQ—®Ó±ñdG¹ÂMvÕ#QGWKëâqÞ_Ëæ;E0ÌmÏ“íCóÜXÞ+T• Œ”Å›w†}u%¸œ-z »8º<ÇVÀ†h™û¤ó¥L[í`’eÅ;íò³“£m¾1@$pb©_UdðÑ1àç3ç¼x?2‚€ ÅFrl»´N5Wº´wþjºúÊè#1*‚„è}ÒRçgT‚çMhÄ”1™k³EJ¤z}E¼Î¥ÍXÀ?ñ ¤2õÚA,å"P…¬ßŸ/ÃÿÙø'©×àÇÏ"Ñ[B§·ôÞƒ^œ+¶À=Ê®ÚmúùÖ‘´æ®Œ÷ü3a«Š€$µÌ«R&Ö%_ôQ—ê>®šmçœYá{þÃ0¸±]1—ß^·ˆK’õî$V¿ @ªà€5^ƒ3ì|rÐI—ê>®šmçœYá{þÃ0¸±]1—ß^·¨ë׸‘Zü5«‚Õz ϱñËA&_¨úºi·žqg…ñ ´=ø®˜Ëï¯"°´"kˆ¤é ÛýM‰ótÆ¢©òÔ%²ˆ¼úx,À®dm È´*úä àJ&•ØNaäo3CBê… CïÝ4Kî¼=²âÿRºÜrÓõ¬löº;½ÅÎíW:hm°CÔ2sJ>X1 LÑ󛉹¼`䤋mÃÆPtµã=Ýöµ-Z1†/!°¤ŸgËßyu`1Ø‹BÃn´Ýja'&1àâ;ñ8–á)óXQ÷OGšpؾþ‹õNì$¡áÖ1_AÌjÔ?ôïW¢õ®&YFÝ[£ú%-²×p­Ç³h/ušË?É5 —ƘñŠ•ç;Ū{mô-À Ø £«Æ ,’Ó/å°!·8Š:¯éqåÒ2Ûíß] blH¹xçÏ:i$;2âƒj3Òè2ްś¤Æ eš3ÐßÿE÷ÈŠ|[ò{âGGóÜ#ln>âoÓÇqÀÊ>¯í¬ØÍœôärÔge1 F}§XÅpJßË÷`9=Œx*cKÄ롳½®à¬'D2&¹ÕÇY7ÁÀJ4´¦Þ‰§XÅpJßË÷`9=Œx*cKÄ롳½®à¬'D2&¹ÕÇY7ÁÀJ4¾2ðýèšuŒW­ü¿vÓ“ØÇ’¦4¼Nº;Úî ÂtC"k\u“p£è Þ—™º—?EBL-L0R AûíW½ñÊô+È)ÝW ãsо™ õõĪƛ›ï]ܰ#ž#Ñ0žOù:9G$¡ìGœ*(cö‰ƒ~h—RWq6pÜ} px&ù—-:uˆºÄ„c JÅMËÛq“+†Ÿ®"¹„pmò‘¸©‹Û·NFð7Ÿêm©…ðœ=§0Œ­Ð+\n†åþIì!׉cc“‘-4¢m±‡Î Rèæ·ÛæÊp:²Ã3Ĩo3޾𧻓™{SŠǦV#`TKAûg´è­;[ú¡:B=W ÄKv-Ó·/ƒõFÅé[ÉX«?ª­*d1@ƒj»t¹ÏбQÊ6rK꿼•гúªÒ¦C6«·Kœý ¢ü‘õ_ŠÞJÅYýUiS!ŠUÛ¯ª¹x\j‰¡Ó…úåÞÖb­ìž×Ï€°RáÈBÜö··XÃ^™†QªÓÕrä‡qK›?ÇW«ŸÙŽ³Ý­L4¾*öEë (²|>e8À2%Â7yÊÿ?úÖ[þBxßòj^¤Î8Ì“[U@Ù’k`¶¸@lÉ5©ˆ——IN¸»&Ó÷°—§Œ¥À8´žœ“E®T¯¹LŸñkËÚQMtƒDÕÆàá•ÝU‹¾¦™m‰ûeP:L%PÔëe=/÷ÑÿY«$OÕð®3KºJñBØò¤rTìT£sÏfÞsX0Ñ #Ap“ÂXjÁ\À|3V¬²ŸYµ¤]C-ꘫ¡ Ƹ¥¦æMÌ ¥$Œþ<´ä¹Sù™•¥U¤õFŽºÅn©E½—¥(c憰ªV×T0`|¢CÌe$QK—î5$Ýøð‘ TõÓº§{Ì’¶bÊMf@•ïj11joú£¸á*_ݸd÷_ÆN%ÜÑâÜ·cfÎ|Æ>±Â”QÿÍÆdIÑQŽWY<”9£–7hæ_Ê¡M(RT[NC$’H–b¢¹ÂŽ•6U2èòœ;gvp Üoß§Ã×àì$1f*) œ(éQSeS.)öwg½Æýðz|éì$1f*) œ(é$¯*#.™Ãè{€oN•Òˆ“§L=®jÿº©¯Ò«Lx°Ÿrêɇ_œÓÇë:Ìؾˆ¸Ò–T3Ö;á冞ý–C" ö2iðוSŠ(·ý"’ís1 a¹EÓt=ϵºñH¸ !_RJˆ"DÄ€s¼+uäR9OêÊQ¢@ ÿ?ÆÃr2Ãÿ;£ðXô-h%„^ô6ÞL—¬€L"ä£"ôÈUpŠ&?ÇÇœ4ay xy°„À¶Ò |AG)éÒm“ÅaÁ§Í̶zH·X-j۽ܨÕ%°Fcål¿þ´5ˆ\öµÛß©³£ùññâÞ}ñIt 2SAÖ”œ>¯ºp¸p@½ê\‰;ýøk2q=>x9¶NWÝ8\8 ^õ.Dþ|?µ‡8ž“³Ó©Í°"pú¾éÂáÁãîÈ“¿Ñï‡ö°ã'Îã¡e¿/ òq:ó¾cøø?—ÌÄ|ŒeêÈÜøvÙ^i.䥫Dó˜ÊÃæ‰ÿ?¤"]ø %²­ð¨ËC¡v~ÂÌf¦Ÿ p.·‘ÆÓ˜ï’mŒ­êJÛìÿYØ3ðQ;53-$¶0Zø1 Ü+'eMZ€DÀ’¬gƒðé‡G¦? }Ã[ƒ2  ~ú/„õvTÂßEå˜Ïýb±Oý«ˆµÀJXúv‚WÿM’NÀÀ${‰#‡Óò·$q@·ÄG?ÙÉñœWþƒ-²¹?;–'ÒÚ\þäT«0¢žžîã )âÓi€#-œ-â+"x¤sš¹%´%P`øÌ\ËU¶ÙÕoϘ3üUN¬“ŠÒÒupã@‡š7ü»/K»¢»q¾¥z½äÄÛ‹ÐÞî>¼ 8p#L°rú|0q®÷Á‰Üd§; PÈÏø|·äg]{XùeÜ.Í×jBà6u“BðX}ÜÃ\¬N„gk/™òènëÂPÐÆŒÅ iG£üPÕ‡ý=€›‡Yªã£NZ]׿õøjœ‘ˆ‚ÛIE&ÅŒ(|®'%Q±¬Ì¾ì†c€ëwÒ{“vügÃa|®'%Q±¬Ì¾ì†c€ëoå³&íøÏ™ŽœZq9*f ú-»†U:ŠâG¿¨EÓç…hªéÐ e/>™‰ªUžÛÛqCÍ|yag*ãOµÔq(äÌ…8ïö/°›Ãê’kƒ\…ÙGU— 8¤¾ð5ïV²½ˆmȪkêsú:÷…ÅÍ×çæ4æ§#Ó[ý‹¤;;S ˆ’»dòFlg Rw—mOžŒ·Î—ÃËóói #£9ضY–°Náìz;¥Ã« 2Cøç€‡·h|õ%O9Cnfæ+ÊxÆ‚MµŠƒ’#¤*Pnì'çrÈ!ã 6Ö(HŽ©A¸?°ŸÅp@¹ÀðI¶±@ÐrDt†Ivöð$Ý Ê”G?¸µEPâÍ϶楩Û8E `F¡^×ù+~³æžÊÊ:7H*”C( ‹¢Mí …^WÃ×ý ½Pò!3œkj¾_¡"|y}Ÿ¢Ì ˆþ"0İþ"/ónÆ"J? ^-ëÆ™…½'bÐG§¹S§,ÉQq3xð -CµÿgŠE ®QB¯U ¹…¸€3ÂÜ$ ‚Ìâ#¿tÓfoTlóøîùü^Ïö»6*‰Jا°lo7®D}²åµÒcL4÷¯¹Í¢ ¸¨Æ<ϘvºÌ¹Gl…´¥.ã•nÓZ<°Ð3fA¹ÜÌp‚9ùB÷m`z'ÈÌ¢üüdpݳ®áà[„h«Ø$9Nu¤²¯ÿ¨¡ì6þÆ“¥;Aì•@êÍù‡K>X¯øË!ö›ú˜‡àC„'4égËÿ ²i¿©ˆ~l‰˜t³åŠÿFY´ßÔÄ?­kšt³åŠÿFY´ßÔÄ>áNO°Ö"fֵ؃Ž-KD‡­©Zéš0ŸA"˜‚z»´·2à´ùËÕjÐD L•²Ò|öü)±bŽAn}Ö<˜ZÖÖ#+u¾ÊÆ$6žÎ^`Ö—W(\þU¯T@ÜjÚÆÓÿs4~B°¹fÍÂܯôh<ôœJûjÏÅÊÌÞo÷Ü¢WØûV~(–Vfó|t•ö>ÕŸŠ%•™¼Ý˜ÀJûjÏÅÊÌÞ^ðÅÌnt޼؄øöR23åÿ„’AùN†Ë±!œ&©O–.–$„çÖÇñ<¼ò_íñ¿ø¢ëwqJȳsÔaÖ‘h¢ñ)ñe>LÑxd_©òf‹¿«:Ÿ&h»3SäÍ—mÐdœNb$.  £ÉvÜû(‘%d[莣]1VVܢ؜\U‹Ö‹äïúÔ]”(í^yÑ áÅ6¯×l±RWãz…Qê&I¨´Wù² iÕ&dÓšöEkKHi Ê¿ÝÖuÊË´mtaB[ã”ÙvSÊÕ)îBiYmÙˆ¦¸èýeµ3s¶çrV©§äw³ƒšfÊÝñ´ (Š‘Ø½9]ë$íùkê%r£gfùö0£®»Ë„Ä]sì…¹ŽúlÙ·ÎÞ{ìjÒtaûg4YOG½5p“"/´«ÓVå''þÆñâ©Gêi²FU0dä¹BØ(¨è;òHºümäÁÕò6KbÆòÝ$ó&¢/ÿþ“WQ«y…6ò,##QÛØÃ+"‚î£î¼¹­YgÓÈáX±ú¹»`OÿrÎL7çHÿ"¿oØ(f“•3lP×íjFï}7YÅ‘þŠý¿`q†d¶Èjê«¿ÀqF7N‘þŠý¿`q†d¶Èjê«¿Àp¤NLÝ:Gú+öý€eÆH:Û!«ª®ÿß‚féÒ?Ñ_·ì.0Ì‚AÖÙ ]Uwø ¸I/¯&¤¬âã<‰Ç2Å®ÙøÈ2A'™‚W#1ÝÔtoò†ü–ƒãX~jnN¹ñU‰Èk+mØùy#½˜[ç¨91>–`o þôhÈ”Nl]Ž\Á7ªT£=$ž3ß'숞¥_H3>ºEùÉ~RnK4Xb `jmýä€åúuƦE”/úÃZa=† LX»è'Ñ-pûõàoÿ[vyOsæY–54ä[ìÃþÕZ JR3´/g5÷d {X/ôDcPã…ÌOÿ=´ax¨Iê¬à3rÎ,7ý7¦q¨qÂæ'‡ÿf pËx¯€Ï| ñ¬‚|.º1¨qÂæ'‡ÿf pËx¯€Ï| ñ¬Y.:èÆ¡Ç ˜žÿ5Ã-â¾$„·ÄGæáýluL%Ìd2á»›²òþ'^BŸ ¶×(â Å^¾¯YØ+·~æåŸBäKbR€Ç+7èÂ|¼àqJ+$´ÝãÛï ½œgkaš½QØìËý±–ó3&?Ì£à/šÑ팟3 p˜ÛŸ²x ÒBàzWóˆV96G±  ¯ñÆÜüŸ<ã8˘q8 ­_õ2¶ñìKÅ“î6çäùçÆ\ÉÀejÿTÊ>ÛDZ ÙXãn~OžqœeÌ8œV¯ú™GÛxö".8ÛŸ“çœgs'•«þ¦QöÞ=iR:O‡÷Ù èóÿœÅ…îzâËTI9LÎÃÄ×ÎÔ)`¬Sg:qÖêÇqSnÜ·Y2 xêÈ1a,ßE·Ž75aûá0ÉúÚ÷˜f_ Ëý:áÃŽUGF“å½Jÿî”ö˜{ á– ´ü4_ç¸øT¼é)Žg-aÿÿ6¶X÷ðíµÝzÂi𠇢âŒå¶ÿ[ky*n¹`ââŒå¶ÿ[ky*n¹D‹ Š3–ÛþÛ[ÉSuÉÄÔFrÛÛky*n°ŽY´*eôÈ&ôûÿs“¬•š•©bç0»šZÐn­ÝŒÞÈw„%~ÍVîG#?gVØ£}q+šÿWÿþQ•&2Zz!÷lMaožòؤ«‘òؤ¨`'Ëb’Œä„®¾Çòó\=ŽwÐ+ø9Ö'ÝSwÜ¿J‹Eú”´Q£UÄ–ûT2Ž{Jض_yÀOý?o5õ® ×¹·ÁÈ:mR\oƒtÖêd.ƒ¦{°Báh9U’z3Áϲi•¨¼Ù³ÊËI)4*}¸VYØÿFYYʵI@%j«ìÙ|˜%S 6!°:4\…I»{#Uåù é?(uµvƒÃfÄB®Eª§T<è$¡*GÖ^_÷Å0‚Xâ0—xv‡¢õК*X5pÿFõ–5WéìéG ÎÁÛ‰oe†Ñƒ@‡­ƒK[>ÒÊùéÖ@‡­ƒK[>ÒÈ•§XL ¶ -lûK)$Ý:Â`hõ°ikgÚJ¤ƒ<†Ø_F+ymd®AÙb;Oï¿H¶»ƒdð]ÀÛçh0Ðøà´úœ‰æoÁ´ì1miK“8á?¯¦}1Š'k/ùªy‚RÄÎzüþÄÆg?hl~»¢­tmð8È8½_¤5öoÿô±àúÀ.©¥’gmdÜ„K Ù^íØ6ðÝ͸² ø3e{·`ÛÀ#w4³σ6W»v ¼7s:ÚðfÊ÷nÁ·€Fî„DÐdœIHëÉoðü.–`iöõQv•UÇjˆÊƒÃþïÜ¡4©äas†kÍÒ®Âè½—P§ñe+†,QÍLø'Bkx\/œLØýBá|âa\ x@›€€ó}«·Û¡ýöß·Úï}¶?ðì·øvAü6Ëþ-öïOü7ø]×ÚÅ}º}º }®¼ßjåöéç}ºY}®QóèáÕ§ðésøm7=ÿ|7·þ1}¶õö¯_n—ßn–ßkíZýº þÛËö¸ßUûzý»©ûuý´GíÚ_öé õT?µkößÿ[z~ÖÀô„S¶k-Ñq€c“vjd ˯ ü úfXŠløªbëOx“Òƒx—˜žó‡PNUÐ8âjÈÈ‘ëR/ÓD]Ü'›ÿ7þ¡¶C/¹"‚ÿb Ö0x>™‰S£°9Õܰø“8PÌe¸Ï1嬂·¼ÛxPÆ‹µ ¾+‚Û(:%пŸØ FþƒVÃÇ´ÏkÝÍ[ck¡°l°ûw餶ËÙ¥¤*ýY=¶ä9i¶“€æºX‚pBååüìòf¥uЫ¿nVÑ3Dc+ø™DÅ­ÒáŸúλ=µÛm[Uû=rc¤{ÉŽææ'–!´N/¢;N㸴ÄÂ×øÔy ¾xšI”~7u@fñÅ4N’é±/¸¦º6fP¸Ã[•nràÜwQ ‘>'ªˆ&%4 I8\è¥Hþq!ûŽ˜‹¨±^(çßrÄýÞÒ«š ‚üN„ŠÒKÞNj•ÅÄWª¤¯VßóH)ËH‘øEêS=³è€¹’&œõÎhí3²‡N 6—0´öcΚ¯´vbúJPp 䵎˜9OZX]ÔQš†²èpp p1ýæÖ½…y`C'Q;»Üt~ñ95®Ü%ʸ vq '®AX©R|•²zú°Ç,„9#à¿Nš4Í_l+À¨¹y^$ãg°Úõ*xêÄÔNåüÍv[CECæÅèòŸÙIS0Øý¼ÔV6òzÚݱ&Uñÿ‹»µ·{ì¾ëÛØ~Á S7W—“:íÑó™k/ñÜ€€ÿ~‰9PZ4¥†yŸ4î.ÎÎ¥‡ø %‚¼÷¾kãHd§øöÅ‘¥É0ó´9nü4¤¢×°éZ8·l»n¥q¥Bá¼ExÅÀß0ôïO%l ûxÜअÿ>Ácô9›±è4,2è§V1ìæÎòçG€¦ÓxÇTNc’MkÂÁI Ù¢}q ?÷‡f¢Î^aPÅÌ«úÏ‚Î/6ߣ–ß¿ìåC¥¹.ª²ü ÂÉç0Þ.ޝË4>¬¦š6UJ(=—¶R+L• Íš\õ{nR’‚ÈfüA»ä>›²ðcðe©É®®Ýðô—‹ï^]ôÝ…5͉U"TšH£ÝÓ+àØœDûÖËóŸ«Cž°u¤Úî×úw|oÖ­÷ˆ¦þð½È1wú©®'¿2•VmáÒ¿gíùl¥z•ê›_'ßEš†‚V“!Sc#ª{‰”yùIõCwœg‹É4$ó…4ÿR*º‘{‡¿ã*rOai§6,h#¾)ß}lÊ:}Pí°‰„móßk¶yäQÒ£©%Ô=Íhs™MXI8Õß–Ùk7Vu’%ÿ í°¥mžvÜЕ³DØ÷²Ü#t¤0¬Ä_ƒ°0lÅT²çná7€¦³4h“1þôãúÍ]n0Ú}·`˃s1j:ðÊSOOKí« !Þ.àÞs‚o¶(þ†Ù5VßkÔ‘yÍ@VÓ™¹—Í5Þ®‰ ±ølç±Sòõ0A™‰¿ÔùÎJ„D­ݦ=…5sIßøì`üm‰_ç!f=Ü /†ý˲o0‰l'ùŒV>(®YD}ÉÍÏ ‰%sέ3@ÿhWâXçH1ÛÇ•ƒš¿UûÝ/á Fìé„áëJ0(÷ó<Ø#›­BzIן*z=Qz‡Mÿ]¼¨>gDñ¯FÛo¤£nï̾põòeâŒ\ÓþÕžïÇ.£†&¸"6ÌtøÑÌ.e—Ú >H®W!ÅC×—ÛUØËî¸ù7k…D·‰d@ù¹&Õ‡\b+ž¢uìâÛ$dßñŒÚa_½]»âq¸5ùý¼c`ãMÝ?‡åÎ_K:ÄyReàjŒHº83«înTÊ¡áξTˆèl"¨{l‹‘™ŽhÇç„pU[HžƒšãÏìáˆyËAGŠ£^µ›/D­D»c“sRíˆh‘bŸSã¹ãZN(*5{'œ‰ÀñDÔG)ÜU)~„Sç˜ÿ$‰e˱®¢Vq;ËnÙãÜÂá55š;Ö•þhõ¦œ*âÖ#%‚£Ìð™¾øzBÌÍOŠl"ù>D_ï6JC¸É?©Y£áÑ|¨RÈ&€ó­(¸nî µ0ôRð¾ïÔÅ™âJøŽÁïûg/'ƒ1 š‰)^7Ïš…BØ]·÷)¨äE{"§Q™(19a &–È9fåb Âõ~õ–Úd9åÚhýƒ}u‡]©lœççAê¹§ãþ\êÙsÊ‹EòµEé´Z—Ì¢pSÈ]¾Kb¢mOü3ïLZò©·ì?¿ÃT ª:DqЛÈAq*æñ¹I¦’¨hÒ µ¸÷ †)†nËÈcLX^àûà†'Q¸žü†jÁã–0ñ;×=êÌ ûs™(:Ù°¤–Ämô¯ ¿|êðϸ¤À=žP¨o ªžÍÒ©³´…Yv÷þ>¸AìÌÒ¡ì¢ `} ¤K±m€økíÚã`eohÿX2;R‘õ×?“Ëç\:-(+n—ŠÌvuÑ ñì¥å¶²JÌOrpÄe>Ф› †¢?§c›bäTÒõÿpÍ6NÛ?Û=¶Ã¬÷ÞÚ|©³ {3ÒD‰mG6œ g9“ÆŠ/ž ÞN^Úí|ªßý©GgÏtÑÇ{©¥^]º;°ÿ-b…ÔU²Íp=תt´#òsT2dªÅF-g€ÌÁQЄ)ˆ0ÞþJ?ß/е‘íÝïÙÎÐ(:òk#-&q ‰H¡dEæjëÿ8ŠÊØPœì2  GR‰ŸªÂÂÐK(žéˆ8xÇ?Ÿ×²éEEð°1¿ÒS4mÇ|uô¼*¨ ½™S^’OòOùQ—I ª¶Ýt΢þ£ÄÉ2Y㡇v9$d¾‚Á³èX®éØÜ;ß/F4Ÿ`3! ‡ô·á}¨»høß/EüÔiýÑwòONˆæmI`¿Ë-"èÂË´˜¹-j†É£÷•¨4’ ¥òÚ·CãöAØP€‰ïûFˆ~¡‡xnªA¯–¯p ú´9Nyä*-ì¨Ò“èñïal¡!´N¥„vÓ,=fîë9Þyà|a pS®æJ”½‚mPqAºi{Ö€ûÔb6¨m:‹–|@Ì)TîRšºE|¦VPB¯¡y‰[ÙŠ³êÜl¼4œ}7 qG¼ý5|«¸éá‹„½ƒÁeÝþ‹ƒv|>Ϙ"±ÿ[jîì*âs ´~ÂÔêóf^[ʘ Nº^Îó¹X=ÿ2Â/¡‚¬J¶7*aeÒÇ3A~ ÈogÄŽÄßF‚ô¢E\DZø˜î]ô6½kf¼È4¨§Õ‚è¬ã•ëË4ÊU}çV‘„74AÍjŽÑ¥eèlÜ(‰+ˆD¦Þ>zz—ï3Øï-ç=aªÑJ³ð+Xïç ù¹«µð¤TŸ‹Aqå9X‡!U÷ů?£Í…“²¿èÛy s;4ÇbAÓÌ6Ç‹·Í Í‘a”€ ‰aQœ{ÚÔ±Ö©¶u(µU¶¯ô  w”¡`@šK0*7@ø-5ÑÌQ}ïõ…›Á–#Q×ÛüÝü=ˆÿvdS=ÐÉ7dlúñò{1 ¢ÇbÄÄ•Wœ >£l3ûWy†B*Îj’ ¡\uª ¼Ð<©pLÎJ^tŽ7ò0ñJŒ±l¦®e@ÕQÚ4B+WuW‰¿ ÖÓ€˜§ÄƒD”+4vËÒºû´ûaîçö°ÍÊšŒ$Š˜|•kR8º£‰ºbîž…ÕŽw])€|J„—ÝÁŸnž’y®py~‘8”ô‰>Æ¡@ÐsÀ¿­v¼hˆ£¸TÖ2 ø79Ñ­´%ìÚDÓì¨9»¿'.zƒ=òk9lŒ0ENÁÆwoÈŒ7TNìÐWUŠÍÉ*³š>ÓN*º C=b6ˆ¶_ÒüàJ|¢ö„Ï$2ÊÑ5 ¡Ã®#ƒM§EyúĬ3ÿ/·ÙhQ}ıR›.æ©Á§N„Åþ‡ ‡°ÓD¢ÉÅ0C${õë7\ª~‚–Bt^ ²¸NðÆ.wTá´ÿy‘~p*ë ŠKÜ×ÀLißÞŠ >ãØeÄw¿Ðm@ÎǵêÙ 7öÁš)¤Txg«;u?ñ7Šü‹¬×, ý_ÆŽ-úîêhȯñ–íã
    è¼x¦tô…Õ&HeoÿTeü3 sÈfbp³»Â zŒò?I²yx¼-fÙ7rùƒþ½³&ÃÑ5“¨8¯OÓ2ç? ›>Ü|Çé0*Nž«W5ZÊOë¦[Ça„Œ’ þøx7ý2Ù¹ë„Dí´¡­‹µ]¹Ñ¹-ѳg]ªá3_,Ì¡:åšÑ¬*De­¿.Ï¡¤¼ßP­‹ˆ¡ŽÅ|‚ÓN,üÈ6\¸àæ™ cæ˜ó”쪓¥€cfMkA†DBp7nÂ×_WÄô¥i—æOK„~'H¡±óðü-F¤¼wpÛXÖpAFË\_íÿ„Þ Í¥Î3D#ôÚ1»hìãççÉ.¬fŒzÖ±ÅñÊ$G'>ì§Ðæ£å€ì6;^°¢@Õ»0Ÿ…*tÒ)—~R§Z¨­ŠMU“ˆBÕåO9uiw¹€£c£C¦¦”‡ß2¿Èd›Û^êPO| ë#ÇÄ)³:['vT*¨©Q®æKAðšë”×Q¡rHcsFLU.ØÂšöƾñšö òÒSzxQ,¬Ìѯm*ËÌA,qµõhB¸L›§%ΠÑ÷Qd! ¥KŽ­Íío† ¦Õ¢ÇQÎÔ½ƒÛÃWº4U=ˆÎ3ƒ åmMlüß®€Õ ãåKöã@Þ¶¼©lˆj¹;ÔUi­£=ûà¬Þ)?%Îåd¼ðŒ Eixr‰“ª4¯ît—­‰èðPîaÕLð_·»ùßDG!bþñAþ©‰°[7{å/´CŒ¤²×Û(?LóxŸ>s/žš9€ºy' ª™=§i"Üœø¦Ø° e^»PÂ{SÎn;²£¯!hØ&”fm´>Fg[™œÉÇ]Rî·ÑÞ½øÏD.R'²~» «â!=e ´kaT+Ò¡6Ø «±ÆÏ!›îg,”·i®>5#!7vþ¹@X¿»Wþ®HY]5Ì„)z®;UY„8߸¾gLYcÙd«´eÂU最Ÿü,†žÏÜ÷à™-@&2(°¥òÚa¯—_«•+v·7Æë)—| @ŽÂ•!ÏbTÜ?~Ã%I·hð2«=lFMÄÓ›Y›œŸ‘ c$òˆc½À4±j>¬™äy"EH¿Ö£­/7•ØR0„·''#¥î&f§9h•NÐ)¥‹—¾@l„k[´­s• LhÜã7ƒŽãZd§I$BÙã¹j=°M•®ÆRà•×¾¦Ê©†9P€B6Ÿ¸­·7 ™È›¨]щè™xáYS`è¢ü5I~˜ 3“ÈËU;ÕÝ»Ðõ'³{¯Hc{"àûmÛpô|ùñ9N­xÄ~BWŽiÚ-‰|š»J¼µ°Ï ö|BC*–¬Ÿ}CWÓBË\¬”éLn¦Ò;Ý9;¹ªUÞ7Ê+†R%ƒøWØ©×~ㄾ…r‚ذ{½þÉ œFn^·(`^xk³R Cé°+¢š“ tŒìï¾þÇ× Ÿz<,=iuxü4¶;¶ kª4Fü„×~s | eRâüEô08OÒ<àì™ð*Zú¶¸Í`›`&Óy>‹ßïì8ºˆV°ý÷pµ¦l+æV…Å—IÅÅxPf–#y..§l¼„=|‘k¹¤³zå/ØÞÓí”8Ïb4¸é%¹¶à8ÙlHʬ뚂G„„ϧC]aVÂùÏhEœw×Hè@§Ñsˆ]9¾YvŠãÐßš_µÈ`iÕ—ñTÌø·(»ýúŽ„ð÷.¾ hkÈBÝT} 1ePua#çN.g2ó\þIQЕƒKíµûqŒxvàÇÌZEç6™U•àCÇ–+êç5…Í1óàäÆ)Qm8õÆ‹øÕ—Í÷¯Vë[î.ŒÌaˆ¦C&+r­ FsÃËcß%v» =¿‹ç—`bß$†v]„¾gà§TN±º¦çÄV3ùàeFt”o Ó2váé¾WG÷@/`3OÕd9¨Ë™ÎRÙœ†÷¶u"2‘"“,®D÷Ú¤ „IÈáë1Äï}ýDÞˆ] ¹ýø¡ÆÜ}ßP79lc™‰A‹NYÜïE˱j÷õ{Ðkɧä£ìoPè°‰nÊëØÑ•"ûäbð“g¯°êQUã"qàkKÝÖÍ»©q8š 1CÖ ,O$ö9 ô+—š`Ò9¥M;9†ØÂç)[PdÜæ g }Þfµ#ZeQXÜNvw«¤ÜiL@V2Èâ_pk '´½Â·XˇîÕyì¦ wBøÒÖ®ôfU`R/Šžåo 燈LâõJ!éz.YŸs÷ ˆFr4×÷¨ýÞ=A‰å¦ÐXo`VdŽ!ŠÙ}[ÙL}¦äõS+×Ö¯f³ËíNâË:èé ^ó1z—¥úu–,Æ_¡Xuø žϩ/!Ú ëÀ)2ŽU¨tk'åx9g÷Áìûn÷©æ§,g0Ü›tót/g›z©XH?xýMÏ€ü¶&žÇ™ø;t'ÿ…NãW~¡H†-ÂöÏ>UÍñ:fÎÎ?½³â˜ ÒÆt©©BË’«3¾ºAœn/3¦L2¨'ÏAø7ö aÈÑ-`íº{,B×G–¨ðŽécßËâ Ìáe:zü$¯Z(Õ[œ¸m=ötÜ€ŒÃÆÅÛÑGÏKÈ\¦+¨‘Ó¥$ ‰C}Í¿Žzâ o'…ÿ +]Ñ¿ ¶¥‡´Ì¶öHÄ žü"¢â®‰7Ló«IýÌUÚœ›êY}úôuZIÁT½«hÕdÌ)ݹÝY g(°wŸÇÖ ÃtJ ¯ÀæÏ„¹Û‘»VÜá0Ï׬XQ®Ïè÷ÖÀ%½”™MŸÊ=Úì;$–í¿Ï§#¢5-Cé:PrôÝ7¯ÑŸ—~t±~ÿ‚¦Š¸þ p‰\Óù‚6G•¶ëØaÖR·Rz*K§ûp˦i·>ÖC¶{5måNêÄFtü'}HÊäÔ'Ö«!}hû“ÑÂ÷$ƒ4úæ[e³1áVß—%#T@Å]ýÖ2_Qò{Æw·w«xYˆ²§÷^Ý 6ï¥|¥gð9VžªU×\¢bzTâHÖÑŠˆÅ ÛaöûF¾ V 9â&fœð·…ôO†9GÁT×››3$vZe@FÔRI‹ÎdX,Þ4 ›Ç~ zEnn‚{v9¨RÂ|¸íq)õÛ&ßíí[KåBêõiöýÍX‡¼7r”4{9_‚LŽHø½‹Û!°VǬžïäF>,⿊ªýT:)5H=¼øšiÞôR¤… >ÄÎe§ÁÖ‰Ván¶’´ YÂ:ÈìWÇ/£Œ˜ Oo¤ƒ«¶/œ¦ƒùN … 9!Ù¦኷'‚nŸ6೪ýZNÿaªa±õÉ7QÀ£¥$ÀÝùós ÈIºi9¯ecÊÎ+‚RDš,WîÜÒ¨î÷-¤ ôbˆlõPòX0åvE8k"Ég*®è“ äK[€u0Û´oôY6Œ‘~á«ÍûhM¸#õÇG<ø[Ȅ՟Wª¢3I y_h÷(`Þ$l3ã­ÜXŒßïnY×3¥ÓNº2&qé³Å8‡–ñÑ”#B\ßÞFôÂçêsB ÜW«ÙìÞXù|Cø_¹Îõm€õDôÓ±ð“WßþÞtk;[sú¤ üäe!yrJËj¿ðk°4¿á‰^^¯½hÔx«@ñ´À©œ~uEPgๅAßi»rU:ý!áçp–[™JÖ¸‡½›ª`Ä›¨½{*å‚âð{§þ—™€ûr’º¿VVÍ>So!rǦ³5üóË5ÔÚKpë OÇþï<£°Â3¡kâÂl#ãÎÿm~FD´Ézc½e‡bA˜Ò ¡#Êûég”KÃhÛ+Úáñ"I„¯{5‡h5ø-òa+HÒCÀ†d±5•íêÂö¶VŒ¸µÐÄ‚Ð%¢s\žÎnåùÉ÷q«‡ ®Ï HaZĘ„ó 9Ížašh§±î²”=8ˆiózÅ)–k±‹ôlcSŒß¸Y*Þ娙ÒñÉ5ôÛò$:å«áŒˆ”ðÃø`4¿pY †6CAÆ!Šî–s?KÒäfÔûÜÄò ,x¨·™{|(=±H.º  Õ(Ù×Ù²4çvwuG7üzÅ"'ÉšÉG\cð©pF5H¨(’MXY\ÞóxzÊ>ÝDÍù?Å#“¬_Šðµ¾¾_£ü€i[B¯\{¬ \ã'µ¦£Ý¨G×:‘e¿Ý¹œWrzáŒÓ©C-™£žô¨Ô3{Z%Ì¡*¬·R´»Ûû5ð´k¸«®]Îd˜0€We-x¸šýÁ3p./ݨ2`ñ€òߨè1¾QÝâõÁy˜ø¦I4µ”š„)¬ƒŠàaċܶ’Üîe$0cÕã  »/ –ãnÕEïNV®@Q^Õ?O³F"l‹¸! ªÍ>Ëi æ:þqgE3RW¬…$“ìu¤]^7j^«þ|ƒX¡ú6‚$jhÅ€;©yÌÏBüQN‰‘žhÓ`,? H¤nL¼*–¯öÞdzö˜cèžöß¶W„ÀŠh™¸”êå­Sxja|ÏRoo§:ãôížÁɲKÚü¡Ï96|ýk^¢¿bÑäk3xÇOµDA‹iGèÈmR£u Üøj£Ÿpö=£„{^¥É‰Mf3 ïðXº6p˵‡|˜ô&E7¹šìÂ[ ¨Ñ⟗Y°³õdòy'§toäK4Ô]ŽÊ@”¾ ŒY‹‘òoÑü3Y-ì’úd¢èIt8šyØ‘”ï@—#÷Må) à³´ÏÝÇÒç¡#½ÿdÂÓ½:ßznnhk4#™™…·„¨±{ˆ¦Ošž `¸@o“ ÉF#é¹.¯Qü\EoÝð®‰Í‰^êôæc­´˜˜Ò€»Ÿ)긔Õ6“1®É'V[õB -êºà^VjJâb /°¯‚GÆc"ÍnÔïÖì>Û_Žœ£\e‚?²ßÂsltžëͧûš»å+Ù™¸Ö@T<Ï=³.‰‘>U:¶«„†Ô¼PžVÞ27?¤Í‘.P} Y ;\qÞ¶ò3®ãÝå2¢±×þ•I^¸zOúf½ðg.çfæVÎk³PgcOé`¶>¼q¨N`¶À'äiòÒ^3¤þ0{îLŒ†ÅQV“`ø?ô —n."o¸´œéA¶b$%â[O ÿeî¹Çp0Ò Ð wô»+¤æHË»ú싆Ðaγ´©6ô˜=e¥ Lœ * dDM ¾ˆÜ¹ôåP`…†çÄ¿Ÿš*Ó!únÓ4Äø* „Ì>È"‰šbíâ ” Öt¬‚ÅÁX$zü@è1‘’]ýŒ%ùÊÅJüW^j‡ä*ôæûû|÷ôT6+©ï?ÈŒió¬’ô"œb‹Ì”£NìºmZ¦údo3‚¸“jÉóÜׂmrûY8¸ p4‚é1ÏSè¥;u*?•Ã¥°Z‹ÿ§#\«Wˆ2æ[tp~ø1Ú¾,ñV—o²Aã5áëº3LÜ­›÷Ç0ݧR~{ØôfCvJ‰RU>6Wn©ùe.¡u Ôˆh4#_ ’šêW·X6ð¯#æDy—€ “IÌ“bT·dYêp‚½;U »7Åo÷æ µe6'Ìø òÎ2¯Z-ã¥|!ösøÛaI¸øþ>$­æ–)4 RMW.¿ˆò雾$y¶Oïóá{‚äšÿ›¸yŸeuóræØz S“ÏÆÀ¼4\ØþÒ#0=@¨µ|y@€¬ŽÅ þµlQü÷hTlf!ãóž1\§‘ö³®÷Þ±b”ç[·S¡ðý°ãªrÛ(Ʊ½â dc†N é<áUrŠ’¼™ôv²Âfà ¹istKBS8O¯¤úò‘ð!ð€`` ‰wW¿.cÀ™~ž-J¶¡b¡ºSQ°üT‘ÖüPÞ]ç"l'®á—’Ü()!WÍæïØñúŽ–Œ’écµØŸ„éõ!ÎŒŸ=*ü+Íy Òä—[Xå°¨žWKãˉ‚Ø­Vÿ F¢Â¬¾16gåáN››@NM Á=ÔÒv´dÐnuëáöKœÞäÜ$kr娦ÌgÇËBÛg¿k^6Yx<ÊsA!Œ-mý(Oá`À‡¯8’ýT T“ìï’íæ·¶s™Cö áÆ_9‘çü¨iëJúÃ1>X,PÐ9†·÷|£ÿ-¶-*ä§ó°{¡Óuÿ5èê«1ö .SĶׯS¶–è0÷B”_ö_*2qq½ R›æYÓHHtõ55ñjþüX)8VFcIÁ>\»îÅR(Úš@:O‚,B‘T¢N´ K¤6`‹’Ž?jÛë˜4U’×Õáu­èä#×%ºQ[‰!äQg*(s¢¬£Å)•Jœç [«<#ezø¸[Á–ÁåîVÖÚ›öò ‹Ô»Ì„]/ òã“À¡Ë•e_·‘ÎÕ#×|­4£·«)ܸbšÑ¥ð LÌÖädzxư†YæDbɦÒCO)îú)xð9;Àÿ ‹3É’§nãô~ñ¹³ÖðL°£C~Ýž}{”=gÕÇî;@ÓJço_ HX”~w|R84m¢›Á(6lsÛ¡¥-©»¢ºÔìd5‰Ìº˜±ŒäŒ2 Ã+„‘˜žkNÁLѺ·Íúzm´&4{“ÅĉˆÁ)ßü0è¿úSËl‰ƒ5ÓÔðbÏc2»zÏI Ðm1¯-æ~TàA=?Æ 4‘ÿ[ß$”G† vmQy»{ rï*ˆ3u –õg_’ã0‰çÅ„3•ÙK¼œ€[L²QË÷NÕ1HbW1FÎÊ¥_&ãÝâc þ¤Åcul±Îù Mö¨"ÔS.ðŠ³ªó„"”9Žª’{3i!É3íŠJÝÑ÷¢‘`Ïé{ýUÈŸ”æCD¯ÓÚG¡¤¹|ÃùÖ"tL/òqÄ-…ø#äÕoTÞFµ%ë$ç¶\(ž#lZÖ9—ÿaD{üf¸ø$¡me ø¬í? Ò|«W¦—]=Ïî†WÎV8Ñ+­9¸µŽý×ÊÐ"AÇ\î„–fu£pZ—m@LìñÁ?huÇßÀFWÿP[–?B2àX± îBHîâ6GEéè5‡PÃÃÞƒªQäK®¦ tueõüÐ}H[÷)7tS>Ü0ûØü‰@MfîÚÃBÀÑ1‚J™Z³yÕÆÿy úOÃaÉ—õvþ ÃØLz€Òãâ‚à™Ot_Ò3m„Þk3q·H†ÿøÿKE…©yWãsúä³4cô`^°ÍÃoˆ=“‡m$T¾ØT¦¨y¿•½<>8çm;£ÓéãKt˜I(ª çÿf‡D~€VhVŽ˜ w\­L·F^ÏèRÄïßih’‘æOI£@Z%´Yrsë 3²_mùa4:Rxcè³ù[m±ÀàBD—&èB¸‡KOÖ(ª’©æö¸YY˜Z™—Ë%Á~MÔꨬX’Èñs¸Å-[¯t~ól·I>ߊ?ú¥7±dØò¤÷ÐxÄ54Þ+Ô˨Ö—þ'ªÁ× M×DWƒo×ú‡ñNaŸÂ@,®î²˜ø#û™qÊ6”ɼLÚi—/$Æ™¯î)$OTi‰<£³ ߊÒ{êÍ a¸ö hW•Q¥Æiû’‹MOL€¼§§§‘"àzš}zÅÝg¸L"J^¾k=ÛÑIñ¢ÙÕ£¢Úò à,+Te ÏO?ÎÓJ‚™ˆM Š ˜˜dV~çÃúp,6¥~jɰ²lÂ*HA“«u<™pd}|ùfWl‘të«2 ýVpßd,õXÇ?7&5ü¼Ù°l +.‘>”ûѶ®g'…‚ì!oL½%ÃcÖÑà "Y@G":Ÿ´Wn•y *Z?ÂMš$š6Hºœ SêÆæ3ô쵌1pâ&vÆö€n[½÷Fyàä§;c!éö°ø½htóþ¨(^çvÌàÄÃŒ‚¬í;a¸+ÌD™fkæM|Ęƒ0eqTO¸[oüLB+ÅÐlì«©¬w8F¼x™2¡]\w׿TË|¤Ë¿”ðÝ甕'BA©}Iï$ßq„Z£Æ7#Ù¼´Ò1ùüî¹{ËÆƒç°‹l À% N¡›+)~J!è}‡]&»Ã>ÖêßÄ”3~:"²£åçpsQ» â…Ä¿âͲ(Õ=x¤,×=~üµ:Ëâ•m?Tÿ{šÆÍû„¤Ÿ€µ¶LІ[W[ìV…`˜YÞ‚Þô”ÙÎÖS3«Xðö.™Ÿ–§åù…`:HT-!HÕGÖ>ÔHÍ.hpš  èdñýÄÜC¬i›##Myç]syœLìjHÂh9Ð’eœdf®ñ)wI˜”1Ëú÷ÒçÞG$à¶¶Õ/»ÃD è‘ÇMåyAËëC¤µ¡ÞŸI:F¦ Rt„ª™h”V ÿ8VÊ’HÙ¼)›(õƒÚb˜ÎÓ=d%~ƒ7žurWì/ruÒíÓ[hÏÞ΢'ýÁé¿Æ†Y¿Ò§´³ÙÊÕ‡úù—'ÄC¥#U"¹f®\¥Ð)ã$ÑŒlü.v»ÃòFðj9¾þQ…;kCïñl8ö(á–cfydÏQÒñ„©‘ì"B­&œÏ ë§oœ£ßžɾßlíUðÏ×ÀèjH(NIØÞÜHyMYp‰ùÈþdP$µ´¨g'’‘­]ÆHxÒþ αzŽÉ<¾Z´­6Œ7’ 7¶õ'ÑŒjÎ2gÍï½5›X Ò¸-2w ‘p£Õ€ CÌË$Áw†³Æ–å1Q7Ê0dâ[áÅz^- òÍ/7™¦·ë:ŒÆ #Cº—!Å i^)³¿3›–ªBžMÊI¡Å€eVìt¦H2ÓRyç5ë…ZÌLK†¡Y~Ÿp ª·ðuz°ÖùYäÛêNÚÔ‰˜1 g8Tmh›Ó¬ªŠÌWÜ•Ü)‹1N ‡R@ Ûu3$`å9¿ÕÀÞwoò³Ûí0=bÏV; ýá¿¿oî5dg{ŸgqÝ}öD‘d–a'ë´âž£F-Çšè(YJì}ûz‰ÌSa8qg‘£éW—M~¦aÍž[^$xä`P»þ3„#µÎEV^ŸÌ3G­Ü&Èt‰òÍVÈ¥4'¬™–8Žl¤½«ÜNÖ¡H Ò¾6QÐû~¦ =çB·@øc2«ùÆÚísoW> ÀB2Õc+HzpÈ‘ˆÌwÝßDÝVTÑÍîžù¶zÜ ²¥3­ýS™Vb@Ú÷g­¢^? ûìâ½ œIÄÂ%É…°T|íüǾ3²O­ÓÛî,É¢ºŒqʈH!+_4Œ¹¿ßåVy$ öW=¬ÏQ‰ÌkrT‹…·<'üf7.ýçàõª/å…!.¬àëv‹å¿rÜMØ«*ä×Ãn{Ð1*là©øé&“‘<Ï›ëO—K1ät³Ä–9¤ì²YœNHMBŽ.+s‚ìXp ÇÄ˼å‰wëÿ`}nh §ïÁá†Gcutß>ß3ñƒjÎ"^QG«,gªlõÞM赌±õQhiFʳÑÞY¸‡ÔWgz2Rv„U0Dêo0¢~Ô¤!ÝÍU©”xÐ0¨’lŽ¥[,xN¼¬Å½˜]+ E4k±£«ý.Â"8Â-/HU> ›ö³œØ3JmÏ$˜Ü„à s;q(F ‡ a¯ñá(ö™DCÎtÿÙicnV Bîcups-2.2.7/desktop/cups.svg000664 000765 000024 00000077754 13255074424 016343 0ustar00msweetstaff000000 000000 image/svg+xml CUPS Icon Michael Sweet Apple Inc. cups-2.2.7/desktop/Makefile000664 000765 000024 00000005241 13255074424 016266 0ustar00msweetstaff000000 000000 # # Desktop makefile for CUPS. # # Copyright 2007-2009 by Apple Inc. # Copyright 1993-2006 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include ../Makedefs # # Make everything... # all: # # Make library targets... # libs: # # Make unit tests... # unittests: # # Clean all config and object files... # clean: # # Dummy depend... # depend: # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: if test "x$(DBUSDIR)" != x; then \ echo Installing cups.conf in $(DBUSDIR)...;\ $(INSTALL_DIR) -m 755 $(BUILDROOT)$(DBUSDIR)/system.d; \ $(INSTALL_DATA) cups.conf $(BUILDROOT)$(DBUSDIR)/system.d/cups.conf; \ fi if test "x$(MENUDIR)" != x; then \ echo Installing desktop menu...; \ $(INSTALL_DIR) -m 755 $(BUILDROOT)$(MENUDIR); \ $(INSTALL_DATA) cups.desktop $(BUILDROOT)$(MENUDIR); \ fi if test "x$(ICONDIR)" != x; then \ echo Installing desktop icons...; \ $(INSTALL_DIR) -m 755 $(BUILDROOT)$(ICONDIR)/hicolor/16x16/apps; \ $(INSTALL_DATA) cups-16.png $(BUILDROOT)$(ICONDIR)/hicolor/16x16/apps/cups.png; \ $(INSTALL_DIR) -m 755 $(BUILDROOT)$(ICONDIR)/hicolor/32x32/apps; \ $(INSTALL_DATA) cups-32.png $(BUILDROOT)$(ICONDIR)/hicolor/32x32/apps/cups.png; \ $(INSTALL_DIR) -m 755 $(BUILDROOT)$(ICONDIR)/hicolor/64x64/apps; \ $(INSTALL_DATA) cups-64.png $(BUILDROOT)$(ICONDIR)/hicolor/64x64/apps/cups.png; \ $(INSTALL_DIR) -m 755 $(BUILDROOT)$(ICONDIR)/hicolor/128x128/apps; \ $(INSTALL_DATA) cups-128.png $(BUILDROOT)$(ICONDIR)/hicolor/128x128/apps/cups.png; \ fi # # Install programs... # install-exec: # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Uninstall files... # uninstall: if test "x$(DBUSDIR)" != x; then \ echo Uninstalling cups.conf in $(DBUSDIR)...;\ $(RM) $(BUILDROOT)$(DBUSDIR)/cups.conf; \ $(RMDIR) $(BUILDROOT)$(DBUSDIR); \ fi if test "x$(MENUDIR)" != x; then \ echo Uninstalling desktop menu...; \ $(RM) $(BUILDROOT)$(MENUDIR)/cups.desktop; \ fi if test "x$(ICONDIR)" != x; then \ echo Uninstalling desktop icons...; \ $(RM) $(BUILDROOT)$(ICONDIR)/hicolor/16x16/apps/cups.png; \ $(RM) $(BUILDROOT)$(ICONDIR)/hicolor/32x32/apps/cups.png; \ $(RM) $(BUILDROOT)$(ICONDIR)/hicolor/64x64/apps/cups.png; \ $(RM) $(BUILDROOT)$(ICONDIR)/hicolor/128x128/apps/cups.png; \ fi cups-2.2.7/data/cups.irix000664 000765 000024 00000000127 13255074424 015733 0ustar00msweetstaff000000 000000 #%PAM-1.0 auth required pam_unix.so shadow nodelay nullok account required pam_unix.so cups-2.2.7/data/cups.pam000664 000765 000024 00000000141 13255074424 015531 0ustar00msweetstaff000000 000000 auth required /lib/security/pam_pwdb.so nullok shadow account required /lib/security/pam_pwdb.so cups-2.2.7/data/cups.suse000664 000765 000024 00000000107 13255074424 015735 0ustar00msweetstaff000000 000000 auth required pam_unix2.so nullok shadow account required pam_unix2.so cups-2.2.7/data/epson.h000664 000765 000024 00000001530 13255074424 015360 0ustar00msweetstaff000000 000000 /* * This file contains model number definitions for the CUPS sample * ESC/P driver. * * Copyright 2007 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #define EPSON_9PIN 0 /* 9-pin dot matrix */ #define EPSON_24PIN 1 /* 24-pin dot matrix */ #define EPSON_COLOR 2 /* Epson Stylus Color with ESC . */ #define EPSON_PHOTO 3 /* Epson Stylus Photo with ESC . */ #define EPSON_ICOLOR 4 /* Epson Stylus Color with ESC i */ #define EPSON_IPHOTO 5 /* Epson Stylus Photo with ESC i */ cups-2.2.7/data/font.defs000664 000765 000024 00000005034 13255074424 015677 0ustar00msweetstaff000000 000000 /* * "$Id: font.defs 343 2007-07-13 19:52:48Z mike $" * * Standard ESP Ghostscript font definitions for the CUPS PPD file * compiler. * * Copyright 2007 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * file is missing or damaged, see the license at "http://www.cups.org/". */ #font AvantGarde-Book Standard "(1.05)" Standard ROM #font AvantGarde-BookOblique Standard "(1.05)" Standard ROM #font AvantGarde-Demi Standard "(1.05)" Standard ROM #font AvantGarde-DemiOblique Standard "(1.05)" Standard ROM #font Bookman-Demi Standard "(1.05)" Standard ROM #font Bookman-DemiItalic Standard "(1.05)" Standard ROM #font Bookman-Light Standard "(1.05)" Standard ROM #font Bookman-LightItalic Standard "(1.05)" Standard ROM #font Courier Standard "(1.05)" Standard ROM #font Courier-Bold Standard "(1.05)" Standard ROM #font Courier-BoldOblique Standard "(1.05)" Standard ROM #font Courier-Oblique Standard "(1.05)" Standard ROM #font Helvetica Standard "(1.05)" Standard ROM #font Helvetica-Bold Standard "(1.05)" Standard ROM #font Helvetica-BoldOblique Standard "(1.05)" Standard ROM #font Helvetica-Narrow Standard "(1.05)" Standard ROM #font Helvetica-Narrow-Bold Standard "(1.05)" Standard ROM #font Helvetica-Narrow-BoldOblique Standard "(1.05)" Standard ROM #font Helvetica-Narrow-Oblique Standard "(1.05)" Standard ROM #font Helvetica-Oblique Standard "(1.05)" Standard ROM #font NewCenturySchlbk-Bold Standard "(1.05)" Standard ROM #font NewCenturySchlbk-BoldItalic Standard "(1.05)" Standard ROM #font NewCenturySchlbk-Italic Standard "(1.05)" Standard ROM #font NewCenturySchlbk-Roman Standard "(1.05)" Standard ROM #font Palatino-Bold Standard "(1.05)" Standard ROM #font Palatino-BoldItalic Standard "(1.05)" Standard ROM #font Palatino-Italic Standard "(1.05)" Standard ROM #font Palatino-Roman Standard "(1.05)" Standard ROM #font Symbol Special "(001.005)" Special ROM #font Times-Bold Standard "(1.05)" Standard ROM #font Times-BoldItalic Standard "(1.05)" Standard ROM #font Times-Italic Standard "(1.05)" Standard ROM #font Times-Roman Standard "(1.05)" Standard ROM #font ZapfChancery-MediumItalic Standard "(1.05)" Standard ROM #font ZapfDingbats Special "(001.005)" Special ROM /* * End of "$Id: font.defs 343 2007-07-13 19:52:48Z mike $". */ cups-2.2.7/data/hp.h000664 000765 000024 00000001245 13255074424 014646 0ustar00msweetstaff000000 000000 /* * This file contains model number definitions for the CUPS sample * HP driver. * * Copyright 2007 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #define HP_LASERJET 0 /* HP LaserJet */ #define HP_DESKJET 1 /* HP DeskJet with simple color */ #define HP_DESKJET2 2 /* HP DeskJet with CRet color */ cups-2.2.7/data/label.h000664 000765 000024 00000001675 13255074424 015325 0ustar00msweetstaff000000 000000 /* * This file contains model number definitions for the CUPS sample * label printer driver. * * Copyright 2007 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #define DYMO_3x0 0 /* Dymo Labelwriter 300/330/330 Turbo */ #define ZEBRA_EPL_LINE 0x10 /* Zebra EPL line mode printers */ #define ZEBRA_EPL_PAGE 0x11 /* Zebra EPL page mode printers */ #define ZEBRA_ZPL 0x12 /* Zebra ZPL-based printers */ #define ZEBRA_CPCL 0x13 /* Zebra CPCL-based printers */ #define INTELLITECH_PCL 0x20 /* Intellitech PCL-based printers */ cups-2.2.7/data/Makefile000664 000765 000024 00000003140 13255074424 015522 0ustar00msweetstaff000000 000000 # # Datafile makefile for CUPS. # # Copyright 2007-2014 by Apple Inc. # Copyright 1993-2006 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include ../Makedefs # # Data files... # PPDCFILES = \ epson.h \ font.defs \ hp.h \ label.h \ media.defs \ raster.defs # # Make everything... # all: # # Make library targets... # libs: # # Make unit tests... # unittests: # # Clean all config and object files... # clean: # # Dummy depend... # depend: # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: $(INSTALL_DIR) -m 755 $(DATADIR)/banners $(INSTALL_DIR) -m 755 $(DATADIR)/data $(INSTALL_DIR) -m 755 $(DATADIR)/model $(INSTALL_DIR) -m 755 $(DATADIR)/ppdc for file in $(PPDCFILES); do \ $(INSTALL_DATA) $$file $(DATADIR)/ppdc; \ done $(INSTALL_DIR) -m 755 $(DATADIR)/profiles # # Install programs... # install-exec: # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Uninstall files... # uninstall: for file in $(PPDCFILES); do \ $(RM) $(DATADIR)/ppdc/$$file; \ done -$(RMDIR) $(DATADIR)/profiles -$(RMDIR) $(DATADIR)/ppdc -$(RMDIR) $(DATADIR)/model -$(RMDIR) $(DATADIR)/data -$(RMDIR) $(DATADIR)/banners -$(RMDIR) $(DATADIR) cups-2.2.7/data/media.defs000664 000765 000024 00000016735 13255074424 016022 0ustar00msweetstaff000000 000000 /* * Adobe standard media size definitions for the CUPS PPD file compiler. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These codedinstructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * copyright law. Distribution and use rights are outlinedin the file * "LICENSE.txt" which should have beenincluded with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". */ #media "3x5/3 x 5" 216 360 #media "3.5x5/3.5 x 5" 252 360 #media "5x7/5 x 7" 360 504 #media "10x11/10 x 11" 720 792 #media "10x13/10 x 13" 720 936 #media "10x14/10 x 14" 720 1008 #media "12x11/12 x 11" 864 792 #media "15x11/15 x 11" 1080 792 #media "7x9/7 x 9" 504 648 #media "8x10/8 x 10" 576 720 #media "9x11/9 x 11" 648 792 #media "9x12/9 x 12" 648 864 #media "A0/A0" 2384 3370 #media "A0.Transverse/A0 Long Edge" 3370 2384 #media "A1/A1" 1684 2384 #media "A1.Transverse/A1 Long Edge" 2384 1684 #media "A2/A2" 1191 1684 #media "A2.Transverse/A2 Long Edge" 1684 1191 #media "A3/A3" 842 1191 #media "A3.Transverse/A3 Long Edge" 1191 842 #media "A3Extra/A3 Oversize" 913 1262 #media "A3Extra.Transverse/A3 Oversize Long Edge" 913 1262 #media "A3Rotated/A3 Long Edge" 1191 842 #media "A4/A4" 595 842 #media "A4Extra/A4 Oversize" 667 914 #media "A4Plus/A4 Oversize" 595 936 #media "A4Rotated/A4 Long Edge" 842 595 #media "A4Small/A4 Small" 595 842 #media "A4.Transverse/A4 Long Edge" 842 595 #media "A5/A5" 420 595 #media "A5Extra/A5 Oversize" 492 668 #media "A5Rotated/A5 Long Edge" 595 420 #media "A5.Transverse/A5 Long Edge" 595 420 #media "A6/A6" 297 420 #media "A6Rotated/A6 Long Edge" 420 297 #media "A7/A7" 210 297 #media "A8/A8" 148 210 #media "A9/A9" 105 148 #media "A10/A10" 73 105 #media "AnsiA/ANSI A" 612 792 #media "AnsiB/ANSI B" 792 1224 #media "AnsiC/ANSI C" 1224 1584 #media "AnsiD/ANSI D" 1584 2448 #media "AnsiE/ANSI E" 2448 3168 #media "ARCHA/Letter Oversize" 648 864 #media "ARCHA.Transverse/Letter Oversize Long Edge" 864 648 #media "ARCHB/Tabloid Oversize" 864 1296 #media "ARCHB.Transverse/Tabloid Oversize Long Edge" 1296 864 #media "ARCHC/ARCH C" 1296 1728 #media "ARCHC.Transverse/ARCH C Long Edge" 1728 1296 #media "ARCHD/ARCH D" 1728 2592 #media "ARCHD.Transverse/ARCH D Long Edge" 2592 1728 #media "ARCHE/ARCH E" 2592 3456 #media "ARCHE.Transverse/ARCH E Long Edge" 3456 2592 #media "B0/JIS B0" 2920 4127 #media "B10/JIS B10" 91 127 #media "B1/JIS B1" 2064 2918 #media "B1/JIS B1" 2064 2920 #media "B2/JIS B2" 1460 2064 #media "B3/JIS B3" 1032 1460 #media "B4/JIS B4" 729 1032 #media "B4Rotated/JIS B4 Long Edge" 1032 729 #media "B5/JIS B5" 516 729 #media "B5Rotated/JIS B5 Long Edge" 729 516 #media "B5.Transverse/JIS B5 Long Edge" 516 729 #media "B6/JIS B6" 363 516 #media "B6Rotated/JIS B6 Long Edge" 516 363 #media "B7/JIS B7" 258 363 #media "B8/JIS B8" 181 258 #media "B9/JIS B9" 127 181 #media "C4/Envelope C4" 649 918 #media "C5/Envelope C5" 459 649 #media "C6/Envelope C6" 323 459 #media "DL/Envelope DL" 312 624 #media "DoublePostcard/Postcard Double" 567 420 #media "DoublePostcardRotated/Postcard Double Long Edge" 420 567 #media "Env10/Envelope #10" 297 684 #media "Env11/Envelope #11" 324 747 #media "Env12/Envelope #12" 342 792 #media "Env14/Envelope #14" 360 828 #media "Env9/Envelope #9" 279 639 #media "EnvC0/Envelope C0" 2599 3676 #media "EnvC1/Envelope C1" 1837 2599 #media "EnvC2/Envelope C2" 1298 1837 #media "EnvC3/Envelope C3" 918 1296 #media "EnvC4/Envelope C4" 649 918 #media "EnvC5/Envelope C5" 459 649 #media "EnvC65/Envelope C65" 324 648 #media "EnvC6/Envelope C6" 323 459 #media "EnvC7/Envelope C7" 230 323 #media "EnvChou3/Envelope Choukei 3" 340 666 #media "EnvChou3Rotated/Envelope Choukei 3 Long Edge" 666 340 #media "EnvChou4/Envelope Choukei 4" 255 581 #media "EnvChou4Rotated/Envelope Choukei 4 Long Edge" 581 255 #media "EnvDL/Envelope DL" 312 624 #media "EnvInvite/Envelope Invite" 624 624 #media "EnvISOB4/Envelope B4" 708 1001 #media "EnvISOB5/Envelope B5" 499 709 #media "EnvISOB6/Envelope B6" 499 354 #media "EnvItalian/Envelope Italian" 312 652 #media "EnvKaku2/Envelope Kaku2" 680 941 #media "EnvKaku2Rotated/Envelope Kaku2 Long Edge" 941 680 #media "EnvKaku3/Envelope Kaku3" 612 785 #media "EnvKaku3Rotated/Envelope Kaku3 Long Edge" 785 612 #media "EnvMonarch/Envelope Monarch" 279 540 #media "EnvPersonal/Envelope Personal" 261 468 #media "EnvPRC1/Envelope PRC1" 289 468 #media "EnvPRC1Rotated/Envelope PRC1 Long Edge" 468 289 #media "EnvPRC2/Envelope PRC2" 289 499 #media "EnvPRC2Rotated/Envelope PRC2 Long Edge" 499 289 #media "EnvPRC3/Envelope PRC3" 354 499 #media "EnvPRC3Rotated/Envelope PRC3 Long Edge" 499 354 #media "EnvPRC4/Envelope PRC4" 312 590 #media "EnvPRC4Rotated/Envelope PRC4 Long Edge" 590 312 #media "EnvPRC5/Envelope PRC5PRC5" 312 624 #media "EnvPRC5Rotated/Envelope PRC5 Long Edge" 624 312 #media "EnvPRC6/Envelope PRC6" 340 652 #media "EnvPRC6Rotated/Envelope PRC6 Long Edge" 652 340 #media "EnvPRC7/Envelope PRC7" 454 652 #media "EnvPRC7Rotated/Envelope PRC7 Long Edge" 652 454 #media "EnvPRC8/Envelope PRC8" 340 876 #media "EnvPRC8Rotated/Envelope PRC8 Long Edge" 876 340 #media "EnvPRC9/Envelope PRC9" 649 918 #media "EnvPRC9Rotated/Envelope PRC9 Long Edge" 918 649 #media "EnvPRC10/Envelope PRC10" 918 1298 #media "EnvPRC10Rotated/Envelope PRC10 Long Edge" 1298 918 #media "EnvYou4/Envelope You4" 298 666 #media "EnvYou4Rotated/Envelope You4 Long Edge" 666 298 #media "Executive/Executive" 522 756 #media "FanFoldGerman/European Fanfold" 612 864 #media "FanFoldGermanLegal/European Fanfold Legal" 612 936 #media "FanFoldUS/US Fanfold" 1071 792 #media "Folio/Folio" 595 935 #media "ISOB0/B0" 2835 4008 #media "ISOB1/B1" 2004 2835 #media "ISOB2/B2" 1417 2004 #media "ISOB3/B3" 1001 1417 #media "ISOB4/B4" 709 1001 #media "ISOB5/B5" 499 709 #media "ISOB5Extra/B5 Oversize" 570 782 #media "ISOB6/B6" 354 499 #media "ISOB7/B7" 249 354 #media "ISOB8/B8" 176 249 #media "ISOB9/B9" 125 176 #media "ISOB10/B10" 88 125 #media "Ledger/US Ledger" 1224 792 #media "Legal/US Legal" 612 1008 #media "LegalExtra/US Legal Oversize" 684 1080 #media "Letter/US Letter" 612 792 #media "Letter.Transverse/US Letter Long Edge" 792 612 #media "LetterExtra/US Letter Oversize" 684 864 #media "LetterExtra.Transverse/US Letter Oversize Long Edge" 864 684 #media "LetterPlus/US Letter Oversize" 612 914 #media "LetterRotated/US Letter Long Edge" 792 612 #media "LetterSmall/US Letter Small" 612 792 #media "Monarch/Envelope Monarch" 279 540 #media "Note/Note" 612 792 #media "Postcard/Postcard" 284 419 #media "PostcardRotated/Postcard Long Edge" 419 284 #media "PRC16K/PRC16K" 414 610 #media "PRC16KRotated/PRC16K Long Edge" 610 414 #media "PRC32K/PRC32K" 275 428 #media "PRC32KBig/PRC32K Oversize" 275 428 #media "PRC32KBigRotated/PRC32K Oversize Long Edge" 428 275 #media "PRC32KRotated/PRC32K Long Edge" 428 275 #media "Quarto/Quarto" 610 780 #media "Statement/Statement" 396 612 #media "SuperA/Super A" 643 1009 #media "SuperB/Super B" 864 1380 #media "Tabloid/Tabloid" 792 1224 #media "TabloidExtra/Tabloid Oversize" 864 1296 /* * Non-standard sizes... */ #media "Photo4x6/Photo" 288 432 #media "PhotoLabel/Photo Labels" 288 468 #media "w936h1368/Super B/A3" 936 1368 #media "w81h252/Address" 81 252 #media "w101h252/Large Address" 101 252 #media "w54h144/Return Address" 54 144 #media "w167h288/Shipping Address" 167 288 #media "w162h540/Internet Postage 2-Part" 162 540 #media "w162h504/Internet Postage 3-Part" 162 504 #media "w41h248/File Folder" 41 248 #media "w41h144/Hanging Folder" 41 144 #media "w153h198/3.5\" Disk" 153 198 cups-2.2.7/data/raster.defs000664 000765 000024 00000010124 13255074424 016225 0ustar00msweetstaff000000 000000 /* * "$Id: raster.defs 343 2007-07-13 19:52:48Z mike $" * * This file contains the standard definitions for enumerated attributes * in the CUPS raster page device dictionary. * * Copyright 2007 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * file is missing or damaged, see the license at "http://www.cups.org/". */ /* Jog values */ #define CUPS_JOG_NONE 0 /* Never move pages */ #define CUPS_JOG_FILE 1 /* Move pages after this file */ #define CUPS_JOG_JOB 2 /* Move pages after this job */ #define CUPS_JOG_SET 3 /* Move pages after this set */ /* Orientation values */ #define CUPS_ORIENT_0 0 /* Don't rotate the page */ #define CUPS_ORIENT_90 1 /* Rotate the page counter-clockwise */ #define CUPS_ORIENT_180 2 /* Turn the page upside down */ #define CUPS_ORIENT_270 3 /* Rotate the page clockwise */ /* CutMedia values */ #define CUPS_CUT_NONE 0 /* Never cut the roll */ #define CUPS_CUT_FILE 1 /* Cut the roll after this file */ #define CUPS_CUT_JOB 2 /* Cut the roll after this job */ #define CUPS_CUT_SET 3 /* Cut the roll after this set */ #define CUPS_CUT_PAGE 4 /* Cut the roll after this page */ /* AdvanceMedia values */ #define CUPS_ADVANCE_NONE 0 /* Never advance the roll */ #define CUPS_ADVANCE_FILE 1 /* Advance the roll after this file */ #define CUPS_ADVANCE_JOB 2 /* Advance the roll after this job */ #define CUPS_ADVANCE_SET 3 /* Advance the roll after this set */ #define CUPS_ADVANCE_PAGE 4 /* Advance the roll after this page */ /* LeadingEdge values */ #define CUPS_EDGE_TOP 0 /* Leading edge is the top of the page */ #define CUPS_EDGE_RIGHT 1 /* Leading edge is the right of the page */ #define CUPS_EDGE_BOTTOM 2 /* Leading edge is the bottom of the page */ #define CUPS_EDGE_LEFT 3 /* Leading edge is the left of the page */ /* cupsColorOrder values */ #define CUPS_ORDER_CHUNKED 0 /* CMYK CMYK CMYK ... */ #define CUPS_ORDER_BANDED 1 /* CCC MMM YYY KKK ... */ #define CUPS_ORDER_PLANAR 2 /* CCC ... MMM ... YYY ... KKK ... */ /* cupsColorSpace values */ #define CUPS_CSPACE_W 0 /* Luminance */ #define CUPS_CSPACE_RGB 1 /* Red, green, blue */ #define CUPS_CSPACE_RGBA 2 /* Red, green, blue, alpha */ #define CUPS_CSPACE_K 3 /* Black */ #define CUPS_CSPACE_CMY 4 /* Cyan, magenta, yellow */ #define CUPS_CSPACE_YMC 5 /* Yellow, magenta, cyan */ #define CUPS_CSPACE_CMYK 6 /* Cyan, magenta, yellow, black */ #define CUPS_CSPACE_YMCK 7 /* Yellow, magenta, cyan, black */ #define CUPS_CSPACE_KCMY 8 /* Black, cyan, magenta, yellow */ #define CUPS_CSPACE_KCMYcm 9 /* Black, cyan, magenta, yellow, * * light-cyan, light-magenta */ #define CUPS_CSPACE_GMCK 10 /* Gold, magenta, yellow, black */ #define CUPS_CSPACE_GMCS 11 /* Gold, magenta, yellow, silver */ #define CUPS_CSPACE_WHITE 12 /* White ink (as black) */ #define CUPS_CSPACE_GOLD 13 /* Gold foil */ #define CUPS_CSPACE_SILVER 14 /* Silver foil */ #define CUPS_CSPACE_CIEXYZ 15 /* CIE XYZ */ #define CUPS_CSPACE_CIELab 16 /* CIE Lab */ #define CUPS_CSPACE_ICC1 32 /* ICC-based, 1 color */ #define CUPS_CSPACE_ICC2 33 /* ICC-based, 2 colors */ #define CUPS_CSPACE_ICC3 34 /* ICC-based, 3 colors */ #define CUPS_CSPACE_ICC4 35 /* ICC-based, 4 colors */ #define CUPS_CSPACE_ICC5 36 /* ICC-based, 5 colors */ #define CUPS_CSPACE_ICC6 37 /* ICC-based, 6 colors */ #define CUPS_CSPACE_ICC7 38 /* ICC-based, 7 colors */ #define CUPS_CSPACE_ICC8 39 /* ICC-based, 8 colors */ #define CUPS_CSPACE_ICC9 40 /* ICC-based, 9 colors */ #define CUPS_CSPACE_ICCA 41 /* ICC-based, 10 colors */ #define CUPS_CSPACE_ICCB 42 /* ICC-based, 11 colors */ #define CUPS_CSPACE_ICCC 43 /* ICC-based, 12 colors */ #define CUPS_CSPACE_ICCD 44 /* ICC-based, 13 colors */ #define CUPS_CSPACE_ICCE 45 /* ICC-based, 14 colors */ #define CUPS_CSPACE_ICCF 46 /* ICC-based, 15 colors */ /* * End of "$Id: raster.defs 343 2007-07-13 19:52:48Z mike $". */ cups-2.2.7/data/smiley.ps000664 000765 000024 00000001034 13255074424 015730 0ustar00msweetstaff000000 000000 %!PS-Adobe-3.0 %%BoundingBox: 36 36 576 756 %%Pages: 1 %%LanguageLevel: 2 %%EndComments %%Page: (1) 1 % Draw a black box around the page 0 setgray 1 setlinewidth 36 36 540 720 rectstroke % Draw a two inch blue circle in the middle of the page 0 0 1 setrgbcolor 306 396 144 0 360 arc closepath fill % Draw two half inch yellow circles for eyes 1 1 0 setrgbcolor 252 432 36 0 360 arc closepath fill 360 432 36 0 360 arc closepath fill % Draw the smile 1 setlinecap 18 setlinewidth 306 396 99 200 340 arc stroke % Print it! showpage %%EOF cups-2.2.7/cups/adminutil.c000664 000765 000024 00000201363 13255074424 016264 0ustar00msweetstaff000000 000000 /* * Administration utility API definitions for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 2001-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include "ppd.h" #include "adminutil.h" #include #include #ifdef WIN32 #else # include # include #endif /* WIN32 */ /* * Local functions... */ static int do_samba_command(const char *command, const char *address, const char *subcommand, const char *authfile, FILE *logfile); static http_status_t get_cupsd_conf(http_t *http, _cups_globals_t *cg, time_t last_update, char *name, size_t namelen, int *remote); static void invalidate_cupsd_cache(_cups_globals_t *cg); static void write_option(cups_file_t *dstfp, int order, const char *name, const char *text, const char *attrname, ipp_attribute_t *suppattr, ipp_attribute_t *defattr, int defval, int valcount); /* * 'cupsAdminCreateWindowsPPD()' - Create the Windows PPD file for a printer. * * @deprecated@ */ char * /* O - PPD file or NULL */ cupsAdminCreateWindowsPPD( http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *dest, /* I - Printer or class */ char *buffer, /* I - Filename buffer */ int bufsize) /* I - Size of filename buffer */ { const char *src; /* Source PPD filename */ cups_file_t *srcfp, /* Source PPD file */ *dstfp; /* Destination PPD file */ ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *suppattr, /* IPP -supported attribute */ *defattr; /* IPP -default attribute */ cups_lang_t *language; /* Current language */ char line[256], /* Line from PPD file */ junk[256], /* Extra junk to throw away */ *ptr, /* Pointer into line */ uri[1024], /* Printer URI */ option[41], /* Option */ choice[41]; /* Choice */ int jcloption, /* In a JCL option? */ jclorder, /* Next JCL order dependency */ linenum; /* Current line number */ time_t curtime; /* Current time */ struct tm *curdate; /* Current date */ static const char * const pattrs[] = /* Printer attributes we want */ { "job-hold-until-supported", "job-hold-until-default", "job-sheets-supported", "job-sheets-default", "job-priority-supported", "job-priority-default" }; /* * Range check the input... */ if (buffer) *buffer = '\0'; if (!http) http = _cupsConnect(); if (!http || !dest || !buffer || bufsize < 2) return (NULL); /* * Get the PPD file... */ if ((src = cupsGetPPD2(http, dest)) == NULL) return (NULL); /* * Get the supported banner pages, etc. for the printer... */ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", dest); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs); /* * Do the request and get back a response... */ response = cupsDoRequest(http, request, "/"); if (!response || cupsLastError() > IPP_STATUS_OK_CONFLICTING) { unlink(src); return (NULL); } /* * Open the original PPD file... */ if ((srcfp = cupsFileOpen(src, "rb")) == NULL) return (NULL); /* * Create a temporary output file using the destination buffer... */ if ((dstfp = cupsTempFile2(buffer, bufsize)) == NULL) { cupsFileClose(srcfp); unlink(src); return (NULL); } /* * Write a new header explaining that this isn't the original PPD... */ cupsFilePuts(dstfp, "*PPD-Adobe: \"4.3\"\n"); curtime = time(NULL); curdate = gmtime(&curtime); cupsFilePrintf(dstfp, "*%% Modified on %04d%02d%02d%02d%02d%02d+0000 " "for CUPS Windows Driver\n", curdate->tm_year + 1900, curdate->tm_mon + 1, curdate->tm_mday, curdate->tm_hour, curdate->tm_min, curdate->tm_sec); /* * Read the existing PPD file, converting all PJL commands to CUPS * job ticket comments... */ jcloption = 0; jclorder = 0; linenum = 0; language = cupsLangDefault(); while (cupsFileGets(srcfp, line, sizeof(line))) { linenum ++; if (!strncmp(line, "*PPD-Adobe:", 11)) { /* * Already wrote the PPD header... */ continue; } else if (!strncmp(line, "*JCLBegin:", 10) || !strncmp(line, "*JCLToPSInterpreter:", 20) || !strncmp(line, "*JCLEnd:", 8) || !strncmp(line, "*Protocols:", 11)) { /* * Don't use existing JCL keywords; we'll create our own, below... */ cupsFilePrintf(dstfp, "*%% Commented out for CUPS Windows Driver...\n" "*%%%s\n", line + 1); continue; } else if (!strncmp(line, "*JCLOpenUI", 10)) { jcloption = 1; cupsFilePrintf(dstfp, "%s\n", line); } else if (!strncmp(line, "*JCLCloseUI", 11)) { jcloption = 0; cupsFilePrintf(dstfp, "%s\n", line); } else if (jcloption && !strncmp(line, "*OrderDependency:", 17)) { for (ptr = line + 17; _cups_isspace(*ptr); ptr ++); ptr = strchr(ptr, ' '); if (ptr) { cupsFilePrintf(dstfp, "*OrderDependency: %d%s\n", jclorder, ptr); jclorder ++; } else cupsFilePrintf(dstfp, "%s\n", line); } else if (jcloption && strncmp(line, "*End", 4) && strncmp(line, "*Default", 8)) { if ((ptr = strchr(line, ':')) == NULL) { snprintf(line, sizeof(line), _cupsLangString(language, _("Missing value on line %d.")), linenum); _cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, line, 0); cupsFileClose(srcfp); cupsFileClose(dstfp); unlink(src); unlink(buffer); *buffer = '\0'; return (NULL); } if ((ptr = strchr(ptr, '\"')) == NULL) { snprintf(line, sizeof(line), _cupsLangString(language, _("Missing double quote on line %d.")), linenum); _cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, line, 0); cupsFileClose(srcfp); cupsFileClose(dstfp); unlink(src); unlink(buffer); *buffer = '\0'; return (NULL); } if (sscanf(line, "*%40s%*[ \t]%40[^:/]", option, choice) != 2) { snprintf(line, sizeof(line), _cupsLangString(language, _("Bad option + choice on line %d.")), linenum); _cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, line, 0); cupsFileClose(srcfp); cupsFileClose(dstfp); unlink(src); unlink(buffer); *buffer = '\0'; return (NULL); } if (strchr(ptr + 1, '\"') == NULL) { /* * Skip remaining... */ while (cupsFileGets(srcfp, junk, sizeof(junk)) != NULL) { linenum ++; if (!strncmp(junk, "*End", 4)) break; } } snprintf(ptr + 1, sizeof(line) - (size_t)(ptr - line + 1), "%%cupsJobTicket: %s=%s\n\"\n*End", option, choice); cupsFilePrintf(dstfp, "*%% Changed for CUPS Windows Driver...\n%s\n", line); } else cupsFilePrintf(dstfp, "%s\n", line); } cupsFileClose(srcfp); unlink(src); if (linenum == 0) { _cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, _("Empty PPD file."), 1); cupsFileClose(dstfp); unlink(buffer); *buffer = '\0'; return (NULL); } /* * Now add the CUPS-specific attributes and options... */ cupsFilePuts(dstfp, "\n*% CUPS Job Ticket support and options...\n"); cupsFilePuts(dstfp, "*Protocols: PJL\n"); cupsFilePuts(dstfp, "*JCLBegin: \"%!PS-Adobe-3.0<0A>\"\n"); cupsFilePuts(dstfp, "*JCLToPSInterpreter: \"\"\n"); cupsFilePuts(dstfp, "*JCLEnd: \"\"\n"); cupsFilePuts(dstfp, "\n*OpenGroup: CUPS/CUPS Options\n\n"); if ((defattr = ippFindAttribute(response, "job-hold-until-default", IPP_TAG_ZERO)) != NULL && (suppattr = ippFindAttribute(response, "job-hold-until-supported", IPP_TAG_ZERO)) != NULL) write_option(dstfp, jclorder ++, "cupsJobHoldUntil", "Hold Until", "job-hold-until", suppattr, defattr, 0, 1); if ((defattr = ippFindAttribute(response, "job-priority-default", IPP_TAG_INTEGER)) != NULL && (suppattr = ippFindAttribute(response, "job-priority-supported", IPP_TAG_RANGE)) != NULL) write_option(dstfp, jclorder ++, "cupsJobPriority", "Priority", "job-priority", suppattr, defattr, 0, 1); if ((defattr = ippFindAttribute(response, "job-sheets-default", IPP_TAG_ZERO)) != NULL && (suppattr = ippFindAttribute(response, "job-sheets-supported", IPP_TAG_ZERO)) != NULL) { write_option(dstfp, jclorder ++, "cupsJobSheetsStart", "Start Banner", "job-sheets", suppattr, defattr, 0, 2); write_option(dstfp, jclorder, "cupsJobSheetsEnd", "End Banner", "job-sheets", suppattr, defattr, 1, 2); } cupsFilePuts(dstfp, "*CloseGroup: CUPS\n"); cupsFileClose(dstfp); ippDelete(response); return (buffer); } /* * 'cupsAdminExportSamba()' - Export a printer to Samba. * * @deprecated@ */ int /* O - 1 on success, 0 on failure */ cupsAdminExportSamba( const char *dest, /* I - Destination to export */ const char *ppd, /* I - PPD file */ const char *samba_server, /* I - Samba server */ const char *samba_user, /* I - Samba username */ const char *samba_password, /* I - Samba password */ FILE *logfile) /* I - Log file, if any */ { int status; /* Status of Samba commands */ int have_drivers; /* Have drivers? */ char file[1024], /* File to test for */ authfile[1024], /* Temporary authentication file */ address[1024], /* Address for command */ subcmd[1024], /* Sub-command */ message[1024]; /* Error message */ cups_file_t *fp; /* Authentication file */ cups_lang_t *language; /* Current language */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ /* * Range check input... */ if (!dest || !ppd || !samba_server || !samba_user || !samba_password) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } /* * Create a temporary authentication file for Samba... */ if ((fp = cupsTempFile2(authfile, sizeof(authfile))) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0); return (0); } cupsFilePrintf(fp, "username = %s\n", samba_user); cupsFilePrintf(fp, "password = %s\n", samba_password); cupsFileClose(fp); /* * See which drivers are available; the new CUPS v6 and Adobe drivers * depend on the Windows 2k PS driver, so copy that driver first: * * Files: * * ps5ui.dll * pscript.hlp * pscript.ntf * pscript5.dll */ have_drivers = 0; language = cupsLangDefault(); snprintf(file, sizeof(file), "%s/drivers/pscript5.dll", cg->cups_datadir); if (!access(file, 0)) { have_drivers |= 1; /* * Windows 2k driver is installed; do the smbclient commands needed * to copy the Win2k drivers over... */ snprintf(address, sizeof(address), "//%s/print$", samba_server); snprintf(subcmd, sizeof(subcmd), "mkdir W32X86;" "put %s W32X86/%s.ppd;" "put %s/drivers/ps5ui.dll W32X86/ps5ui.dll;" "put %s/drivers/pscript.hlp W32X86/pscript.hlp;" "put %s/drivers/pscript.ntf W32X86/pscript.ntf;" "put %s/drivers/pscript5.dll W32X86/pscript5.dll", ppd, dest, cg->cups_datadir, cg->cups_datadir, cg->cups_datadir, cg->cups_datadir); if ((status = do_samba_command("smbclient", address, subcmd, authfile, logfile)) != 0) { snprintf(message, sizeof(message), _cupsLangString(language, _("Unable to copy Windows 2000 printer " "driver files (%d).")), status); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); if (logfile) _cupsLangPuts(logfile, message); unlink(authfile); return (0); } /* * See if we also have the CUPS driver files; if so, use them! */ snprintf(file, sizeof(file), "%s/drivers/cupsps6.dll", cg->cups_datadir); if (!access(file, 0)) { /* * Copy the CUPS driver files over... */ snprintf(subcmd, sizeof(subcmd), "put %s/drivers/cups6.ini W32X86/cups6.ini;" "put %s/drivers/cupsps6.dll W32X86/cupsps6.dll;" "put %s/drivers/cupsui6.dll W32X86/cupsui6.dll", cg->cups_datadir, cg->cups_datadir, cg->cups_datadir); if ((status = do_samba_command("smbclient", address, subcmd, authfile, logfile)) != 0) { snprintf(message, sizeof(message), _cupsLangString(language, _("Unable to copy CUPS printer driver " "files (%d).")), status); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); if (logfile) _cupsLangPuts(logfile, message); unlink(authfile); return (0); } /* * Do the rpcclient command needed for the CUPS drivers... */ snprintf(subcmd, sizeof(subcmd), "adddriver \"Windows NT x86\" \"%s:" "pscript5.dll:%s.ppd:ps5ui.dll:pscript.hlp:NULL:RAW:" "pscript5.dll,%s.ppd,ps5ui.dll,pscript.hlp,pscript.ntf," "cups6.ini,cupsps6.dll,cupsui6.dll\"", dest, dest, dest); } else { /* * Don't have the CUPS drivers, so just use the standard Windows * drivers... */ snprintf(subcmd, sizeof(subcmd), "adddriver \"Windows NT x86\" \"%s:" "pscript5.dll:%s.ppd:ps5ui.dll:pscript.hlp:NULL:RAW:" "pscript5.dll,%s.ppd,ps5ui.dll,pscript.hlp,pscript.ntf\"", dest, dest, dest); } if ((status = do_samba_command("rpcclient", samba_server, subcmd, authfile, logfile)) != 0) { snprintf(message, sizeof(message), _cupsLangString(language, _("Unable to install Windows 2000 printer " "driver files (%d).")), status); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); if (logfile) _cupsLangPuts(logfile, message); unlink(authfile); return (0); } } /* * See if we have the Win9x PS driver... */ snprintf(file, sizeof(file), "%s/drivers/ADOBEPS4.DRV", cg->cups_datadir); if (!access(file, 0)) { have_drivers |= 2; /* * Do the smbclient commands needed for the Adobe Win9x drivers... */ snprintf(address, sizeof(address), "//%s/print$", samba_server); snprintf(subcmd, sizeof(subcmd), "mkdir WIN40;" "put %s WIN40/%s.PPD;" "put %s/drivers/ADFONTS.MFM WIN40/ADFONTS.MFM;" "put %s/drivers/ADOBEPS4.DRV WIN40/ADOBEPS4.DRV;" "put %s/drivers/ADOBEPS4.HLP WIN40/ADOBEPS4.HLP;" "put %s/drivers/ICONLIB.DLL WIN40/ICONLIB.DLL;" "put %s/drivers/PSMON.DLL WIN40/PSMON.DLL;", ppd, dest, cg->cups_datadir, cg->cups_datadir, cg->cups_datadir, cg->cups_datadir, cg->cups_datadir); if ((status = do_samba_command("smbclient", address, subcmd, authfile, logfile)) != 0) { snprintf(message, sizeof(message), _cupsLangString(language, _("Unable to copy Windows 9x printer " "driver files (%d).")), status); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); if (logfile) _cupsLangPuts(logfile, message); unlink(authfile); return (0); } /* * Do the rpcclient commands needed for the Adobe Win9x drivers... */ snprintf(subcmd, sizeof(subcmd), "adddriver \"Windows 4.0\" \"%s:ADOBEPS4.DRV:%s.PPD:NULL:" "ADOBEPS4.HLP:PSMON.DLL:RAW:" "ADOBEPS4.DRV,%s.PPD,ADOBEPS4.HLP,PSMON.DLL,ADFONTS.MFM," "ICONLIB.DLL\"", dest, dest, dest); if ((status = do_samba_command("rpcclient", samba_server, subcmd, authfile, logfile)) != 0) { snprintf(message, sizeof(message), _cupsLangString(language, _("Unable to install Windows 9x printer " "driver files (%d).")), status); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); if (logfile) _cupsLangPuts(logfile, message); unlink(authfile); return (0); } } /* * See if we have the 64-bit Windows PS driver... * * Files: * * x64/ps5ui.dll * x64/pscript.hlp * x64/pscript.ntf * x64/pscript5.dll */ snprintf(file, sizeof(file), "%s/drivers/x64/pscript5.dll", cg->cups_datadir); if (!access(file, 0)) { have_drivers |= 4; /* * 64-bit Windows driver is installed; do the smbclient commands needed * to copy the Win64 drivers over... */ snprintf(address, sizeof(address), "//%s/print$", samba_server); snprintf(subcmd, sizeof(subcmd), "mkdir x64;" "put %s x64/%s.ppd;" "put %s/drivers/x64/ps5ui.dll x64/ps5ui.dll;" "put %s/drivers/x64/pscript.hlp x64/pscript.hlp;" "put %s/drivers/x64/pscript.ntf x64/pscript.ntf;" "put %s/drivers/x64/pscript5.dll x64/pscript5.dll", ppd, dest, cg->cups_datadir, cg->cups_datadir, cg->cups_datadir, cg->cups_datadir); if ((status = do_samba_command("smbclient", address, subcmd, authfile, logfile)) != 0) { snprintf(message, sizeof(message), _cupsLangString(language, _("Unable to copy 64-bit Windows printer " "driver files (%d).")), status); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); if (logfile) _cupsLangPuts(logfile, message); unlink(authfile); return (0); } /* * See if we also have the CUPS driver files; if so, use them! */ snprintf(file, sizeof(file), "%s/drivers/x64/cupsps6.dll", cg->cups_datadir); if (!access(file, 0)) { /* * Copy the CUPS driver files over... */ snprintf(subcmd, sizeof(subcmd), "put %s/drivers/x64/cups6.ini x64/cups6.ini;" "put %s/drivers/x64/cupsps6.dll x64/cupsps6.dll;" "put %s/drivers/x64/cupsui6.dll x64/cupsui6.dll", cg->cups_datadir, cg->cups_datadir, cg->cups_datadir); if ((status = do_samba_command("smbclient", address, subcmd, authfile, logfile)) != 0) { snprintf(message, sizeof(message), _cupsLangString(language, _("Unable to copy 64-bit CUPS printer driver " "files (%d).")), status); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); if (logfile) _cupsLangPuts(logfile, message); unlink(authfile); return (0); } /* * Do the rpcclient command needed for the CUPS drivers... */ snprintf(subcmd, sizeof(subcmd), "adddriver \"Windows x64\" \"%s:" "pscript5.dll:%s.ppd:ps5ui.dll:pscript.hlp:NULL:RAW:" "pscript5.dll,%s.ppd,ps5ui.dll,pscript.hlp,pscript.ntf," "cups6.ini,cupsps6.dll,cupsui6.dll\"", dest, dest, dest); } else { /* * Don't have the CUPS drivers, so just use the standard Windows * drivers... */ snprintf(subcmd, sizeof(subcmd), "adddriver \"Windows x64\" \"%s:" "pscript5.dll:%s.ppd:ps5ui.dll:pscript.hlp:NULL:RAW:" "pscript5.dll,%s.ppd,ps5ui.dll,pscript.hlp,pscript.ntf\"", dest, dest, dest); } if ((status = do_samba_command("rpcclient", samba_server, subcmd, authfile, logfile)) != 0) { snprintf(message, sizeof(message), _cupsLangString(language, _("Unable to install Windows 2000 printer " "driver files (%d).")), status); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); if (logfile) _cupsLangPuts(logfile, message); unlink(authfile); return (0); } } if (logfile && !(have_drivers & 1)) { if (!have_drivers) strlcpy(message, _cupsLangString(language, _("No Windows printer drivers are installed.")), sizeof(message)); else strlcpy(message, _cupsLangString(language, _("Warning, no Windows 2000 printer drivers " "are installed.")), sizeof(message)); _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, message, 0); _cupsLangPuts(logfile, message); } if (have_drivers == 0) { _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, message, 0); unlink(authfile); return (0); } /* * Finally, associate the drivers we just added with the queue... */ snprintf(subcmd, sizeof(subcmd), "setdriver %s %s", dest, dest); if ((status = do_samba_command("rpcclient", samba_server, subcmd, authfile, logfile)) != 0) { snprintf(message, sizeof(message), _cupsLangString(language, _("Unable to set Windows printer driver (%d).")), status); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); if (logfile) _cupsLangPuts(logfile, message); unlink(authfile); return (0); } unlink(authfile); return (1); } /* * 'cupsAdminGetServerSettings()' - Get settings from the server. * * The returned settings should be freed with cupsFreeOptions() when * you are done with them. * * @since CUPS 1.3/macOS 10.5@ */ int /* O - 1 on success, 0 on failure */ cupsAdminGetServerSettings( http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ int *num_settings, /* O - Number of settings */ cups_option_t **settings) /* O - Settings */ { int i; /* Looping var */ cups_file_t *cupsd; /* cupsd.conf file */ char cupsdconf[1024]; /* cupsd.conf filename */ int remote; /* Remote cupsd.conf file? */ http_status_t status; /* Status of getting cupsd.conf */ char line[1024], /* Line from cupsd.conf file */ *value; /* Value on line */ cups_option_t *setting; /* Current setting */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ /* * Range check input... */ if (!http) { /* * See if we are connected to the same server... */ if (cg->http) { /* * Compare the connection hostname, port, and encryption settings to * the cached defaults; these were initialized the first time we * connected... */ if (strcmp(cg->http->hostname, cg->server) || cg->ipp_port != httpAddrPort(cg->http->hostaddr) || (cg->http->encryption != cg->encryption && cg->http->encryption == HTTP_ENCRYPTION_NEVER)) { /* * Need to close the current connection because something has changed... */ httpClose(cg->http); cg->http = NULL; } } /* * (Re)connect as needed... */ if (!cg->http) { if ((cg->http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 0, NULL)) == NULL) { if (errno) _cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, NULL, 0); else _cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, _("Unable to connect to host."), 1); if (num_settings) *num_settings = 0; if (settings) *settings = NULL; return (0); } } http = cg->http; } if (!http || !num_settings || !settings) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); if (num_settings) *num_settings = 0; if (settings) *settings = NULL; return (0); } *num_settings = 0; *settings = NULL; /* * Get the cupsd.conf file... */ if ((status = get_cupsd_conf(http, cg, cg->cupsd_update, cupsdconf, sizeof(cupsdconf), &remote)) == HTTP_STATUS_OK) { if ((cupsd = cupsFileOpen(cupsdconf, "r")) == NULL) { char message[1024]; /* Message string */ snprintf(message, sizeof(message), _cupsLangString(cupsLangDefault(), _("Open of %s failed: %s")), cupsdconf, strerror(errno)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); } } else cupsd = NULL; if (cupsd) { /* * Read the file, keeping track of what settings are enabled... */ int remote_access = 0, /* Remote access allowed? */ remote_admin = 0, /* Remote administration allowed? */ remote_any = 0, /* Remote access from anywhere allowed? */ browsing = 1, /* Browsing enabled? */ cancel_policy = 1, /* Cancel-job policy set? */ debug_logging = 0; /* LogLevel debug set? */ int linenum = 0, /* Line number in file */ in_location = 0, /* In a location section? */ in_policy = 0, /* In a policy section? */ in_cancel_job = 0, /* In a cancel-job section? */ in_admin_location = 0; /* In the /admin location? */ invalidate_cupsd_cache(cg); cg->cupsd_update = time(NULL); httpGetHostname(http, cg->cupsd_hostname, sizeof(cg->cupsd_hostname)); while (cupsFileGetConf(cupsd, line, sizeof(line), &value, &linenum)) { if (!value && strncmp(line, "")) { in_policy = 0; } else if (!_cups_strcasecmp(line, "")) { in_cancel_job = 0; } else if (!_cups_strcasecmp(line, "Require") && in_cancel_job) { cancel_policy = 0; } else if (!_cups_strcasecmp(line, "")) { in_admin_location = 0; in_location = 0; } else if (!_cups_strcasecmp(line, "Allow") && value && _cups_strcasecmp(value, "localhost") && _cups_strcasecmp(value, "127.0.0.1") #ifdef AF_LOCAL && *value != '/' #endif /* AF_LOCAL */ #ifdef AF_INET6 && strcmp(value, "::1") #endif /* AF_INET6 */ ) { if (in_admin_location) remote_admin = 1; else if (!_cups_strcasecmp(value, "all")) remote_any = 1; } else if (line[0] != '<' && !in_location && !in_policy && _cups_strcasecmp(line, "Allow") && _cups_strcasecmp(line, "AuthType") && _cups_strcasecmp(line, "Deny") && _cups_strcasecmp(line, "Order") && _cups_strcasecmp(line, "Require") && _cups_strcasecmp(line, "Satisfy")) cg->cupsd_num_settings = cupsAddOption(line, value, cg->cupsd_num_settings, &(cg->cupsd_settings)); } cupsFileClose(cupsd); cg->cupsd_num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING, debug_logging ? "1" : "0", cg->cupsd_num_settings, &(cg->cupsd_settings)); cg->cupsd_num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN, (remote_access && remote_admin) ? "1" : "0", cg->cupsd_num_settings, &(cg->cupsd_settings)); cg->cupsd_num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ANY, remote_any ? "1" : "0", cg->cupsd_num_settings, &(cg->cupsd_settings)); cg->cupsd_num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS, (remote_access && browsing) ? "1" : "0", cg->cupsd_num_settings, &(cg->cupsd_settings)); cg->cupsd_num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY, cancel_policy ? "1" : "0", cg->cupsd_num_settings, &(cg->cupsd_settings)); } else if (status != HTTP_STATUS_NOT_MODIFIED) invalidate_cupsd_cache(cg); /* * Remove any temporary files and copy the settings array... */ if (remote) unlink(cupsdconf); for (i = cg->cupsd_num_settings, setting = cg->cupsd_settings; i > 0; i --, setting ++) *num_settings = cupsAddOption(setting->name, setting->value, *num_settings, settings); return (cg->cupsd_num_settings > 0); } /* * 'cupsAdminSetServerSettings()' - Set settings on the server. * * @since CUPS 1.3/macOS 10.5@ */ int /* O - 1 on success, 0 on failure */ cupsAdminSetServerSettings( http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ int num_settings, /* I - Number of settings */ cups_option_t *settings) /* I - Settings */ { int i; /* Looping var */ http_status_t status; /* GET/PUT status */ const char *server_port_env; /* SERVER_PORT env var */ int server_port; /* IPP port for server */ cups_file_t *cupsd; /* cupsd.conf file */ char cupsdconf[1024]; /* cupsd.conf filename */ int remote; /* Remote cupsd.conf file? */ char tempfile[1024]; /* Temporary new cupsd.conf */ cups_file_t *temp; /* Temporary file */ char line[1024], /* Line from cupsd.conf file */ *value; /* Value on line */ int linenum, /* Line number in file */ in_location, /* In a location section? */ in_policy, /* In a policy section? */ in_default_policy, /* In the default policy section? */ in_cancel_job, /* In a cancel-job section? */ in_admin_location, /* In the /admin location? */ in_conf_location, /* In the /admin/conf location? */ in_log_location, /* In the /admin/log location? */ in_root_location; /* In the / location? */ const char *val; /* Setting value */ int share_printers, /* Share local printers */ remote_admin, /* Remote administration allowed? */ remote_any, /* Remote access from anywhere? */ user_cancel_any, /* Cancel-job policy set? */ debug_logging; /* LogLevel debug set? */ int wrote_port_listen, /* Wrote the port/listen lines? */ wrote_browsing, /* Wrote the browsing lines? */ wrote_policy, /* Wrote the policy? */ wrote_loglevel, /* Wrote the LogLevel line? */ wrote_admin_location, /* Wrote the /admin location? */ wrote_conf_location, /* Wrote the /admin/conf location? */ wrote_log_location, /* Wrote the /admin/log location? */ wrote_root_location; /* Wrote the / location? */ int indent; /* Indentation */ int cupsd_num_settings; /* New number of settings */ int old_share_printers, /* Share local printers */ old_remote_admin, /* Remote administration allowed? */ old_remote_any, /* Remote access from anywhere? */ old_user_cancel_any, /* Cancel-job policy set? */ old_debug_logging; /* LogLevel debug set? */ cups_option_t *cupsd_settings, /* New settings */ *setting; /* Current setting */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ /* * Range check input... */ if (!http) http = _cupsConnect(); if (!http || !num_settings || !settings) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } /* * Get the cupsd.conf file... */ if (get_cupsd_conf(http, cg, 0, cupsdconf, sizeof(cupsdconf), &remote) == HTTP_STATUS_OK) { if ((cupsd = cupsFileOpen(cupsdconf, "r")) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0); return (0); } } else return (0); /* * Get current settings... */ if (!cupsAdminGetServerSettings(http, &cupsd_num_settings, &cupsd_settings)) return (0); if ((val = cupsGetOption(CUPS_SERVER_DEBUG_LOGGING, cupsd_num_settings, cupsd_settings)) != NULL) old_debug_logging = atoi(val); else old_debug_logging = 0; DEBUG_printf(("1cupsAdminSetServerSettings: old debug_logging=%d", old_debug_logging)); if ((val = cupsGetOption(CUPS_SERVER_REMOTE_ADMIN, cupsd_num_settings, cupsd_settings)) != NULL) old_remote_admin = atoi(val); else old_remote_admin = 0; DEBUG_printf(("1cupsAdminSetServerSettings: old remote_admin=%d", old_remote_admin)); if ((val = cupsGetOption(CUPS_SERVER_REMOTE_ANY, cupsd_num_settings, cupsd_settings)) != NULL) old_remote_any = atoi(val); else old_remote_any = 0; DEBUG_printf(("1cupsAdminSetServerSettings: old remote_any=%d", old_remote_any)); if ((val = cupsGetOption(CUPS_SERVER_SHARE_PRINTERS, cupsd_num_settings, cupsd_settings)) != NULL) old_share_printers = atoi(val); else old_share_printers = 0; DEBUG_printf(("1cupsAdminSetServerSettings: old share_printers=%d", old_share_printers)); if ((val = cupsGetOption(CUPS_SERVER_USER_CANCEL_ANY, cupsd_num_settings, cupsd_settings)) != NULL) old_user_cancel_any = atoi(val); else old_user_cancel_any = 0; DEBUG_printf(("1cupsAdminSetServerSettings: old user_cancel_any=%d", old_user_cancel_any)); cupsFreeOptions(cupsd_num_settings, cupsd_settings); /* * Get basic settings... */ if ((val = cupsGetOption(CUPS_SERVER_DEBUG_LOGGING, num_settings, settings)) != NULL) { debug_logging = atoi(val); if (debug_logging == old_debug_logging) { /* * No change to this setting... */ debug_logging = -1; } } else debug_logging = -1; DEBUG_printf(("1cupsAdminSetServerSettings: debug_logging=%d", debug_logging)); if ((val = cupsGetOption(CUPS_SERVER_REMOTE_ANY, num_settings, settings)) != NULL) { remote_any = atoi(val); if (remote_any == old_remote_any) { /* * No change to this setting... */ remote_any = -1; } } else remote_any = -1; DEBUG_printf(("1cupsAdminSetServerSettings: remote_any=%d", remote_any)); if ((val = cupsGetOption(CUPS_SERVER_REMOTE_ADMIN, num_settings, settings)) != NULL) { remote_admin = atoi(val); if (remote_admin == old_remote_admin) { /* * No change to this setting... */ remote_admin = -1; } } else remote_admin = -1; DEBUG_printf(("1cupsAdminSetServerSettings: remote_admin=%d", remote_admin)); if ((val = cupsGetOption(CUPS_SERVER_SHARE_PRINTERS, num_settings, settings)) != NULL) { share_printers = atoi(val); if (share_printers == old_share_printers) { /* * No change to this setting... */ share_printers = -1; } } else share_printers = -1; DEBUG_printf(("1cupsAdminSetServerSettings: share_printers=%d", share_printers)); if ((val = cupsGetOption(CUPS_SERVER_USER_CANCEL_ANY, num_settings, settings)) != NULL) { user_cancel_any = atoi(val); if (user_cancel_any == old_user_cancel_any) { /* * No change to this setting... */ user_cancel_any = -1; } } else user_cancel_any = -1; DEBUG_printf(("1cupsAdminSetServerSettings: user_cancel_any=%d", user_cancel_any)); /* * Create a temporary file for the new cupsd.conf file... */ if ((temp = cupsTempFile2(tempfile, sizeof(tempfile))) == NULL) { cupsFileClose(cupsd); if (remote) unlink(cupsdconf); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0); return (0); } /* * Copy the old file to the new, making changes along the way... */ cupsd_num_settings = 0; in_admin_location = 0; in_cancel_job = 0; in_conf_location = 0; in_default_policy = 0; in_location = 0; in_log_location = 0; in_policy = 0; in_root_location = 0; linenum = 0; wrote_admin_location = 0; wrote_browsing = 0; wrote_conf_location = 0; wrote_log_location = 0; wrote_loglevel = 0; wrote_policy = 0; wrote_port_listen = 0; wrote_root_location = 0; indent = 0; if ((server_port_env = getenv("SERVER_PORT")) != NULL) { if ((server_port = atoi(server_port_env)) <= 0) server_port = ippPort(); } else server_port = ippPort(); if (server_port <= 0) server_port = IPP_PORT; while (cupsFileGetConf(cupsd, line, sizeof(line), &value, &linenum)) { if ((!_cups_strcasecmp(line, "Port") || !_cups_strcasecmp(line, "Listen")) && (remote_admin >= 0 || remote_any >= 0 || share_printers >= 0)) { if (!wrote_port_listen) { wrote_port_listen = 1; if (remote_admin > 0 || remote_any > 0 || share_printers > 0) { cupsFilePuts(temp, "# Allow remote access\n"); cupsFilePrintf(temp, "Port %d\n", server_port); } else { cupsFilePuts(temp, "# Only listen for connections from the local " "machine.\n"); cupsFilePrintf(temp, "Listen localhost:%d\n", server_port); } #ifdef CUPS_DEFAULT_DOMAINSOCKET if ((!value || strcmp(CUPS_DEFAULT_DOMAINSOCKET, value)) && !access(CUPS_DEFAULT_DOMAINSOCKET, 0)) cupsFilePuts(temp, "Listen " CUPS_DEFAULT_DOMAINSOCKET "\n"); #endif /* CUPS_DEFAULT_DOMAINSOCKET */ } else if (value && value[0] == '/' #ifdef CUPS_DEFAULT_DOMAINSOCKET && strcmp(CUPS_DEFAULT_DOMAINSOCKET, value) #endif /* CUPS_DEFAULT_DOMAINSOCKET */ ) cupsFilePrintf(temp, "Listen %s\n", value); } else if ((!_cups_strcasecmp(line, "Browsing") || !_cups_strcasecmp(line, "BrowseLocalProtocols")) && share_printers >= 0) { if (!wrote_browsing) { int new_share_printers = (share_printers > 0 || (share_printers == -1 && old_share_printers > 0)); wrote_browsing = 1; if (new_share_printers) { const char *localp = cupsGetOption("BrowseLocalProtocols", num_settings, settings); if (!localp || !localp[0]) localp = cupsGetOption("BrowseLocalProtocols", cupsd_num_settings, cupsd_settings); cupsFilePuts(temp, "# Share local printers on the local network.\n"); cupsFilePuts(temp, "Browsing On\n"); if (!localp) localp = CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS; cupsFilePrintf(temp, "BrowseLocalProtocols %s\n", localp); cupsd_num_settings = cupsAddOption("BrowseLocalProtocols", localp, cupsd_num_settings, &cupsd_settings); } else { cupsFilePuts(temp, "# Disable printer sharing.\n"); cupsFilePuts(temp, "Browsing Off\n"); } } } else if (!_cups_strcasecmp(line, "LogLevel") && debug_logging >= 0) { wrote_loglevel = 1; if (debug_logging) { cupsFilePuts(temp, "# Show troubleshooting information in error_log.\n"); cupsFilePuts(temp, "LogLevel debug\n"); } else { cupsFilePuts(temp, "# Show general information in error_log.\n"); cupsFilePuts(temp, "LogLevel " CUPS_DEFAULT_LOG_LEVEL "\n"); } } else if (!_cups_strcasecmp(line, "\n", line, value); indent += 2; } else if (!_cups_strcasecmp(line, "")) { indent -= 2; if (!wrote_policy && in_default_policy) { wrote_policy = 1; if (!user_cancel_any) cupsFilePuts(temp, " # Only the owner or an administrator can " "cancel a job...\n" " \n" " Order deny,allow\n" " Require user @OWNER " CUPS_DEFAULT_PRINTOPERATOR_AUTH "\n" " \n"); } in_policy = 0; in_default_policy = 0; cupsFilePuts(temp, "\n"); } else if (!_cups_strcasecmp(line, "\n", line, value); } else if (!_cups_strcasecmp(line, "")) { in_location = 0; indent -= 2; if (in_admin_location && remote_admin >= 0) { wrote_admin_location = 1; if (remote_admin) cupsFilePuts(temp, " # Allow remote administration...\n"); else if (remote_admin == 0) cupsFilePuts(temp, " # Restrict access to the admin pages...\n"); cupsFilePuts(temp, " Order allow,deny\n"); if (remote_admin) cupsFilePrintf(temp, " Allow %s\n", remote_any > 0 ? "all" : "@LOCAL"); } else if (in_conf_location && remote_admin >= 0) { wrote_conf_location = 1; if (remote_admin) cupsFilePuts(temp, " # Allow remote access to the configuration " "files...\n"); else cupsFilePuts(temp, " # Restrict access to the configuration " "files...\n"); cupsFilePuts(temp, " Order allow,deny\n"); if (remote_admin) cupsFilePrintf(temp, " Allow %s\n", remote_any > 0 ? "all" : "@LOCAL"); } else if (in_log_location && remote_admin >= 0) { wrote_log_location = 1; if (remote_admin) cupsFilePuts(temp, " # Allow remote access to the log " "files...\n"); else cupsFilePuts(temp, " # Restrict access to the log " "files...\n"); cupsFilePuts(temp, " Order allow,deny\n"); if (remote_admin) cupsFilePrintf(temp, " Allow %s\n", remote_any > 0 ? "all" : "@LOCAL"); } else if (in_root_location && (remote_admin >= 0 || remote_any >= 0 || share_printers >= 0)) { wrote_root_location = 1; if (remote_admin > 0 && share_printers > 0) cupsFilePuts(temp, " # Allow shared printing and remote " "administration...\n"); else if (remote_admin > 0) cupsFilePuts(temp, " # Allow remote administration...\n"); else if (share_printers > 0) cupsFilePuts(temp, " # Allow shared printing...\n"); else if (remote_any > 0) cupsFilePuts(temp, " # Allow remote access...\n"); else cupsFilePuts(temp, " # Restrict access to the server...\n"); cupsFilePuts(temp, " Order allow,deny\n"); if (remote_admin > 0 || remote_any > 0 || share_printers > 0) cupsFilePrintf(temp, " Allow %s\n", remote_any > 0 ? "all" : "@LOCAL"); } in_admin_location = 0; in_conf_location = 0; in_log_location = 0; in_root_location = 0; cupsFilePuts(temp, "\n"); } else if (!_cups_strcasecmp(line, "= 0) { /* * Don't write anything for this limit section... */ in_cancel_job = 2; } else { cupsFilePrintf(temp, "%*s%s", indent, "", line); while (*value) { for (valptr = value; *valptr && !_cups_isspace(*valptr); valptr ++); if (*valptr) *valptr++ = '\0'; if (!_cups_strcasecmp(value, "cancel-job") && user_cancel_any >= 0) { /* * Write everything except for this definition... */ in_cancel_job = 1; } else cupsFilePrintf(temp, " %s", value); for (value = valptr; _cups_isspace(*value); value ++); } cupsFilePuts(temp, ">\n"); } } else cupsFilePrintf(temp, "%*s%s %s>\n", indent, "", line, value); indent += 2; } else if (!_cups_strcasecmp(line, "") && in_cancel_job) { indent -= 2; if (in_cancel_job == 1) cupsFilePuts(temp, " \n"); wrote_policy = 1; if (!user_cancel_any) cupsFilePuts(temp, " # Only the owner or an administrator can cancel " "a job...\n" " \n" " Order deny,allow\n" " Require user @OWNER " CUPS_DEFAULT_PRINTOPERATOR_AUTH "\n" " \n"); in_cancel_job = 0; } else if ((((in_admin_location || in_conf_location || in_root_location) && (remote_admin >= 0 || remote_any >= 0)) || (in_root_location && share_printers >= 0)) && (!_cups_strcasecmp(line, "Allow") || !_cups_strcasecmp(line, "Deny") || !_cups_strcasecmp(line, "Order"))) continue; else if (in_cancel_job == 2) continue; else if (line[0] == '<') { if (value) { cupsFilePrintf(temp, "%*s%s %s>\n", indent, "", line, value); indent += 2; } else { if (line[1] == '/') indent -= 2; cupsFilePrintf(temp, "%*s%s\n", indent, "", line); } } else if (!in_policy && !in_location && (val = cupsGetOption(line, num_settings, settings)) != NULL) { /* * Replace this directive's value with the new one... */ cupsd_num_settings = cupsAddOption(line, val, cupsd_num_settings, &cupsd_settings); /* * Write the new value in its place, without indentation since we * only support setting root directives, not in sections... */ cupsFilePrintf(temp, "%s %s\n", line, val); } else if (value) { if (!in_policy && !in_location) { /* * Record the non-policy, non-location directives that we find * in the server settings, since we cache this info and record it * in cupsAdminGetServerSettings()... */ cupsd_num_settings = cupsAddOption(line, value, cupsd_num_settings, &cupsd_settings); } cupsFilePrintf(temp, "%*s%s %s\n", indent, "", line, value); } else cupsFilePrintf(temp, "%*s%s\n", indent, "", line); } /* * Write any missing info... */ if (!wrote_browsing && share_printers >= 0) { if (share_printers > 0) { cupsFilePuts(temp, "# Share local printers on the local network.\n"); cupsFilePuts(temp, "Browsing On\n"); } else { cupsFilePuts(temp, "# Disable printer sharing and shared printers.\n"); cupsFilePuts(temp, "Browsing Off\n"); } } if (!wrote_loglevel && debug_logging >= 0) { if (debug_logging) { cupsFilePuts(temp, "# Show troubleshooting information in error_log.\n"); cupsFilePuts(temp, "LogLevel debug\n"); } else { cupsFilePuts(temp, "# Show general information in error_log.\n"); cupsFilePuts(temp, "LogLevel " CUPS_DEFAULT_LOG_LEVEL "\n"); } } if (!wrote_port_listen && (remote_admin >= 0 || remote_any >= 0 || share_printers >= 0)) { if (remote_admin > 0 || remote_any > 0 || share_printers > 0) { cupsFilePuts(temp, "# Allow remote access\n"); cupsFilePrintf(temp, "Port %d\n", ippPort()); } else { cupsFilePuts(temp, "# Only listen for connections from the local machine.\n"); cupsFilePrintf(temp, "Listen localhost:%d\n", ippPort()); } #ifdef CUPS_DEFAULT_DOMAINSOCKET if (!access(CUPS_DEFAULT_DOMAINSOCKET, 0)) cupsFilePuts(temp, "Listen " CUPS_DEFAULT_DOMAINSOCKET "\n"); #endif /* CUPS_DEFAULT_DOMAINSOCKET */ } if (!wrote_root_location && (remote_admin >= 0 || remote_any >= 0 || share_printers >= 0)) { if (remote_admin > 0 && share_printers > 0) cupsFilePuts(temp, "# Allow shared printing and remote administration...\n"); else if (remote_admin > 0) cupsFilePuts(temp, "# Allow remote administration...\n"); else if (share_printers > 0) cupsFilePuts(temp, "# Allow shared printing...\n"); else if (remote_any > 0) cupsFilePuts(temp, "# Allow remote access...\n"); else cupsFilePuts(temp, "# Restrict access to the server...\n"); cupsFilePuts(temp, "\n" " Order allow,deny\n"); if (remote_admin > 0 || remote_any > 0 || share_printers > 0) cupsFilePrintf(temp, " Allow %s\n", remote_any > 0 ? "all" : "@LOCAL"); cupsFilePuts(temp, "\n"); } if (!wrote_admin_location && remote_admin >= 0) { if (remote_admin) cupsFilePuts(temp, "# Allow remote administration...\n"); else cupsFilePuts(temp, "# Restrict access to the admin pages...\n"); cupsFilePuts(temp, "\n" " Order allow,deny\n"); if (remote_admin) cupsFilePrintf(temp, " Allow %s\n", remote_any > 0 ? "all" : "@LOCAL"); cupsFilePuts(temp, "\n"); } if (!wrote_conf_location && remote_admin >= 0) { if (remote_admin) cupsFilePuts(temp, "# Allow remote access to the configuration files...\n"); else cupsFilePuts(temp, "# Restrict access to the configuration files...\n"); cupsFilePuts(temp, "\n" " AuthType Default\n" " Require user @SYSTEM\n" " Order allow,deny\n"); if (remote_admin) cupsFilePrintf(temp, " Allow %s\n", remote_any > 0 ? "all" : "@LOCAL"); cupsFilePuts(temp, "\n"); } if (!wrote_log_location && remote_admin >= 0) { if (remote_admin) cupsFilePuts(temp, "# Allow remote access to the log files...\n"); else cupsFilePuts(temp, "# Restrict access to the log files...\n"); cupsFilePuts(temp, "\n" " AuthType Default\n" " Require user @SYSTEM\n" " Order allow,deny\n"); if (remote_admin) cupsFilePrintf(temp, " Allow %s\n", remote_any > 0 ? "all" : "@LOCAL"); cupsFilePuts(temp, "\n"); } if (!wrote_policy && user_cancel_any >= 0) { cupsFilePuts(temp, "\n" " # Job-related operations must be done by the owner " "or an administrator...\n" " \n" " Require user @OWNER @SYSTEM\n" " Order deny,allow\n" " \n" " # All administration operations require an " "administrator to authenticate...\n" " \n" " AuthType Default\n" " Require user @SYSTEM\n" " Order deny,allow\n" "\n"); if (!user_cancel_any) cupsFilePuts(temp, " # Only the owner or an administrator can cancel " "a job...\n" " \n" " Order deny,allow\n" " Require user @OWNER " CUPS_DEFAULT_PRINTOPERATOR_AUTH "\n" " \n"); cupsFilePuts(temp, " \n" " Order deny,allow\n" " \n" "\n"); } for (i = num_settings, setting = settings; i > 0; i --, setting ++) if (setting->name[0] != '_' && _cups_strcasecmp(setting->name, "Listen") && _cups_strcasecmp(setting->name, "Port") && !cupsGetOption(setting->name, cupsd_num_settings, cupsd_settings)) { /* * Add this directive to the list of directives we have written... */ cupsd_num_settings = cupsAddOption(setting->name, setting->value, cupsd_num_settings, &cupsd_settings); /* * Write the new value, without indentation since we only support * setting root directives, not in sections... */ cupsFilePrintf(temp, "%s %s\n", setting->name, setting->value); } cupsFileClose(cupsd); cupsFileClose(temp); /* * Upload the configuration file to the server... */ status = cupsPutFile(http, "/admin/conf/cupsd.conf", tempfile); if (status == HTTP_STATUS_CREATED) { /* * Updated OK, add the basic settings... */ if (debug_logging >= 0) cupsd_num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING, debug_logging ? "1" : "0", cupsd_num_settings, &cupsd_settings); else cupsd_num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING, old_debug_logging ? "1" : "0", cupsd_num_settings, &cupsd_settings); if (remote_admin >= 0) cupsd_num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN, remote_admin ? "1" : "0", cupsd_num_settings, &cupsd_settings); else cupsd_num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN, old_remote_admin ? "1" : "0", cupsd_num_settings, &cupsd_settings); if (remote_any >= 0) cupsd_num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ANY, remote_any ? "1" : "0", cupsd_num_settings, &cupsd_settings); else cupsd_num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ANY, old_remote_any ? "1" : "0", cupsd_num_settings, &cupsd_settings); if (share_printers >= 0) cupsd_num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS, share_printers ? "1" : "0", cupsd_num_settings, &cupsd_settings); else cupsd_num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS, old_share_printers ? "1" : "0", cupsd_num_settings, &cupsd_settings); if (user_cancel_any >= 0) cupsd_num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY, user_cancel_any ? "1" : "0", cupsd_num_settings, &cupsd_settings); else cupsd_num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY, old_user_cancel_any ? "1" : "0", cupsd_num_settings, &cupsd_settings); /* * Save the new values... */ invalidate_cupsd_cache(cg); cg->cupsd_num_settings = cupsd_num_settings; cg->cupsd_settings = cupsd_settings; cg->cupsd_update = time(NULL); httpGetHostname(http, cg->cupsd_hostname, sizeof(cg->cupsd_hostname)); } else cupsFreeOptions(cupsd_num_settings, cupsd_settings); /* * Remote our temp files and return... */ if (remote) unlink(cupsdconf); unlink(tempfile); return (status == HTTP_STATUS_CREATED); } /* * 'do_samba_command()' - Do a SAMBA command. */ static int /* O - Status of command */ do_samba_command(const char *command, /* I - Command to run */ const char *address, /* I - Address for command */ const char *subcmd, /* I - Sub-command */ const char *authfile, /* I - Samba authentication file */ FILE *logfile) /* I - Optional log file */ { #ifdef WIN32 return (1); /* Always fail on Windows... */ #else int status; /* Status of command */ int pid; /* Process ID of child */ if (logfile) _cupsLangPrintf(logfile, _("Running command: %s %s -N -A %s -c \'%s\'"), command, address, authfile, subcmd); if ((pid = fork()) == 0) { /* * Child goes here, redirect stdin/out/err and execute the command... */ int fd = open("/dev/null", O_RDONLY); if (fd > 0) { dup2(fd, 0); close(fd); } if (logfile) dup2(fileno(logfile), 1); else if ((fd = open("/dev/null", O_WRONLY)) > 1) { dup2(fd, 1); close(fd); } dup2(1, 2); execlp(command, command, address, "-N", "-A", authfile, "-c", subcmd, (char *)0); exit(errno); } else if (pid < 0) { status = -1; if (logfile) _cupsLangPrintf(logfile, _("Unable to run \"%s\": %s"), command, strerror(errno)); } else { /* * Wait for the process to complete... */ while (wait(&status) != pid); } if (logfile) _cupsLangPuts(logfile, ""); DEBUG_printf(("9do_samba_command: status=%d", status)); if (WIFEXITED(status)) return (WEXITSTATUS(status)); else return (-WTERMSIG(status)); #endif /* WIN32 */ } /* * 'get_cupsd_conf()' - Get the current cupsd.conf file. */ static http_status_t /* O - Status of request */ get_cupsd_conf( http_t *http, /* I - Connection to server */ _cups_globals_t *cg, /* I - Global data */ time_t last_update, /* I - Last update time for file */ char *name, /* I - Filename buffer */ size_t namesize, /* I - Size of filename buffer */ int *remote) /* O - Remote file? */ { int fd; /* Temporary file descriptor */ #ifndef WIN32 struct stat info; /* cupsd.conf file information */ #endif /* WIN32 */ http_status_t status; /* Status of getting cupsd.conf */ char host[HTTP_MAX_HOST]; /* Hostname for connection */ /* * See if we already have the data we need... */ httpGetHostname(http, host, sizeof(host)); if (_cups_strcasecmp(cg->cupsd_hostname, host)) invalidate_cupsd_cache(cg); snprintf(name, namesize, "%s/cupsd.conf", cg->cups_serverroot); *remote = 0; #ifndef WIN32 if (!_cups_strcasecmp(host, "localhost") && !access(name, R_OK)) { /* * Read the local file rather than using HTTP... */ if (stat(name, &info)) { char message[1024]; /* Message string */ snprintf(message, sizeof(message), _cupsLangString(cupsLangDefault(), _("stat of %s failed: %s")), name, strerror(errno)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); *name = '\0'; return (HTTP_STATUS_SERVER_ERROR); } else if (last_update && info.st_mtime <= last_update) status = HTTP_STATUS_NOT_MODIFIED; else status = HTTP_STATUS_OK; } else #endif /* !WIN32 */ { /* * Read cupsd.conf via a HTTP GET request... */ if ((fd = cupsTempFd(name, (int)namesize)) < 0) { *name = '\0'; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0); invalidate_cupsd_cache(cg); return (HTTP_STATUS_SERVER_ERROR); } *remote = 1; httpClearFields(http); if (last_update) httpSetField(http, HTTP_FIELD_IF_MODIFIED_SINCE, httpGetDateString(last_update)); status = cupsGetFd(http, "/admin/conf/cupsd.conf", fd); close(fd); if (status != HTTP_STATUS_OK) { unlink(name); *name = '\0'; } } return (status); } /* * 'invalidate_cupsd_cache()' - Invalidate the cached cupsd.conf settings. */ static void invalidate_cupsd_cache( _cups_globals_t *cg) /* I - Global data */ { cupsFreeOptions(cg->cupsd_num_settings, cg->cupsd_settings); cg->cupsd_hostname[0] = '\0'; cg->cupsd_update = 0; cg->cupsd_num_settings = 0; cg->cupsd_settings = NULL; } /* * 'write_option()' - Write a CUPS option to a PPD file. */ static void write_option(cups_file_t *dstfp, /* I - PPD file */ int order, /* I - Order dependency */ const char *name, /* I - Option name */ const char *text, /* I - Option text */ const char *attrname, /* I - Attribute name */ ipp_attribute_t *suppattr, /* I - IPP -supported attribute */ ipp_attribute_t *defattr, /* I - IPP -default attribute */ int defval, /* I - Default value number */ int valcount) /* I - Number of values */ { int i; /* Looping var */ cupsFilePrintf(dstfp, "*JCLOpenUI *%s/%s: PickOne\n" "*OrderDependency: %d JCLSetup *%s\n", name, text, order, name); if (defattr->value_tag == IPP_TAG_INTEGER) { /* * Do numeric options with a range or list... */ cupsFilePrintf(dstfp, "*Default%s: %d\n", name, defattr->values[defval].integer); if (suppattr->value_tag == IPP_TAG_RANGE) { /* * List each number in the range... */ for (i = suppattr->values[0].range.lower; i <= suppattr->values[0].range.upper; i ++) { cupsFilePrintf(dstfp, "*%s %d: \"", name, i); if (valcount == 1) cupsFilePrintf(dstfp, "%%cupsJobTicket: %s=%d\n\"\n*End\n", attrname, i); else if (defval == 0) cupsFilePrintf(dstfp, "%%cupsJobTicket: %s=%d\"\n", attrname, i); else if (defval < (valcount - 1)) cupsFilePrintf(dstfp, ",%d\"\n", i); else cupsFilePrintf(dstfp, ",%d\n\"\n*End\n", i); } } else { /* * List explicit numbers... */ for (i = 0; i < suppattr->num_values; i ++) { cupsFilePrintf(dstfp, "*%s %d: \"", name, suppattr->values[i].integer); if (valcount == 1) cupsFilePrintf(dstfp, "%%cupsJobTicket: %s=%d\n\"\n*End\n", attrname, suppattr->values[i].integer); else if (defval == 0) cupsFilePrintf(dstfp, "%%cupsJobTicket: %s=%d\"\n", attrname, suppattr->values[i].integer); else if (defval < (valcount - 1)) cupsFilePrintf(dstfp, ",%d\"\n", suppattr->values[i].integer); else cupsFilePrintf(dstfp, ",%d\n\"\n*End\n", suppattr->values[i].integer); } } } else { /* * Do text options with a list... */ cupsFilePrintf(dstfp, "*Default%s: %s\n", name, defattr->values[defval].string.text); for (i = 0; i < suppattr->num_values; i ++) { cupsFilePrintf(dstfp, "*%s %s: \"", name, suppattr->values[i].string.text); if (valcount == 1) cupsFilePrintf(dstfp, "%%cupsJobTicket: %s=%s\n\"\n*End\n", attrname, suppattr->values[i].string.text); else if (defval == 0) cupsFilePrintf(dstfp, "%%cupsJobTicket: %s=%s\"\n", attrname, suppattr->values[i].string.text); else if (defval < (valcount - 1)) cupsFilePrintf(dstfp, ",%s\"\n", suppattr->values[i].string.text); else cupsFilePrintf(dstfp, ",%s\n\"\n*End\n", suppattr->values[i].string.text); } } cupsFilePrintf(dstfp, "*JCLCloseUI: *%s\n\n", name); } cups-2.2.7/cups/adminutil.h000664 000765 000024 00000005134 13255074424 016267 0ustar00msweetstaff000000 000000 /* * Administration utility API definitions for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 2001-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_ADMINUTIL_H_ # define _CUPS_ADMINUTIL_H_ /* * Include necessary headers... */ # include # include "cups.h" /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Constants... */ # define CUPS_SERVER_DEBUG_LOGGING "_debug_logging" # define CUPS_SERVER_REMOTE_ADMIN "_remote_admin" # define CUPS_SERVER_REMOTE_ANY "_remote_any" # define CUPS_SERVER_SHARE_PRINTERS "_share_printers" # define CUPS_SERVER_USER_CANCEL_ANY "_user_cancel_any" /* * Types and structures... */ typedef void (*cups_device_cb_t)(const char *device_class, const char *device_id, const char *device_info, const char *device_make_and_model, const char *device_uri, const char *device_location, void *user_data); /* Device callback * @since CUPS 1.4/macOS 10.6@ */ /* * Functions... */ extern int cupsAdminExportSamba(const char *dest, const char *ppd, const char *samba_server, const char *samba_user, const char *samba_password, FILE *logfile) _CUPS_DEPRECATED; extern char *cupsAdminCreateWindowsPPD(http_t *http, const char *dest, char *buffer, int bufsize) _CUPS_DEPRECATED; extern int cupsAdminGetServerSettings(http_t *http, int *num_settings, cups_option_t **settings) _CUPS_API_1_3; extern int cupsAdminSetServerSettings(http_t *http, int num_settings, cups_option_t *settings) _CUPS_API_1_3; extern ipp_status_t cupsGetDevices(http_t *http, int timeout, const char *include_schemes, const char *exclude_schemes, cups_device_cb_t callback, void *user_data) _CUPS_API_1_4; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_ADMINUTIL_H_ */ cups-2.2.7/cups/api-admin.header000664 000765 000024 00000001705 13255074424 017141 0ustar00msweetstaff000000 000000

    Administrative APIs

    Header cups/adminutil.h
    Library -lcups
    See Also Programming: Introduction to CUPS Programming
    Programming: CUPS API
    Programming: HTTP and IPP APIs
    cups-2.2.7/cups/api-admin.shtml000664 000765 000024 00000013077 13255074424 017045 0ustar00msweetstaff000000 000000

    Overview

    The administrative APIs provide convenience functions to perform certain administrative functions with the CUPS scheduler.

    Note:

    Administrative functions normally require administrative privileges to execute and must not be used in ordinary user applications!

    Scheduler Settings

    The cupsAdminGetServerSettings and cupsAdminSetServerSettings functions allow you to get and set simple directives and their values, respectively, in the cupsd.conf file for the CUPS scheduler. Settings are stored in CUPS option arrays which provide a simple list of string name/value pairs. While any simple cupsd.conf directive name can be specified, the following convenience names are also defined to control common complex directives:

    • CUPS_SERVER_DEBUG_LOGGING
    • : For cupsAdminGetServerSettings, a value of "1" means that the LogLevel directive is set to debug or debug2 while a value of "0" means it is set to any other value. For cupsAdminSetServerSettings a value of "1" sets the LogLeveL to debug while a value of "0" sets it to warn.
    • CUPS_SERVER_REMOTE_ADMIN
    • : A value of "1" specifies that administrative requests are accepted from remote addresses while "0" specifies that requests are only accepted from local addresses (loopback interface and domain sockets).
    • CUPS_SERVER_REMOTE_ANY
    • : A value of "1" specifies that requests are accepts from any address while "0" specifies that requests are only accepted from the local subnet (when sharing is enabled) or local addresses (loopback interface and domain sockets).
    • CUPS_SERVER_SHARE_PRINTERS
    • : A value of "1" specifies that printer sharing is enabled for selected printers and remote requests are accepted while a value of "0" specifies that printer sharing is disables and remote requests are not accepted.
    • CUPS_SERVER_USER_CANCEL_ANY
    • : A value of "1" specifies that the default security policy allows any user to cancel any print job, regardless of the owner. A value of "0" specifies that only administrative users can cancel other user's jobs.
    Note:

    Changing settings will restart the CUPS scheduler.

    When printer sharing or the web interface are enabled, the scheduler's launch-on-demand functionality is effectively disabled. This can affect power usage, system performance, and the security profile of a system.

    The recommended way to make changes to the cupsd.conf is to first call cupsAdminGetServerSettings, make any changes to the returned option array, and then call cupsAdminSetServerSettings to save those settings. For example, to enable the web interface:

    #include <cups/cups.h>
    #include <cups/adminutil.h>
    
    void
    enable_web_interface(void)
    {
      int num_settings = 0;           /* Number of settings */
      cups_option_t *settings = NULL; /* Settings */
    
    
      if (!cupsAdminGetServerSettings(CUPS_HTTP_DEFAULT, &num_settings, &settings))
      {
        fprintf(stderr, "ERROR: Unable to get server settings: %s\n", cupsLastErrorString());
        return;
      }
    
      num_settings = cupsAddOption("WebInterface", "Yes", num_settings, &settings);
    
      if (!cupsAdminSetServerSettings(CUPS_HTTP_DEFAULT, num_settings, settings))
      {
        fprintf(stderr, "ERROR: Unable to set server settings: %s\n", cupsLastErrorString());
      }
    
      cupsFreeOptions(num_settings, settings);
    }
    

    Devices

    Printers can be discovered through the CUPS scheduler using the cupsGetDevices API. Typically this API is used to locate printers to add the the system. Each device that is found will cause a supplied callback function to be executed. For example, to list the available printer devices that can be found within 30 seconds:

    #include <cups/cups.h>
    #include <cups/adminutil.h>
    
    
    void
    get_devices_cb(
        const char *device_class,           /* I - Class */
        const char *device_id,              /* I - 1284 device ID */
        const char *device_info,            /* I - Description */
        const char *device_make_and_model,  /* I - Make and model */
        const char *device_uri,             /* I - Device URI */
        const char *device_location,        /* I - Location */
        void       *user_data)              /* I - User data */
    {
      puts(device_uri);
    }
    
    
    void
    show_devices(void)
    {
      cupsGetDevices(CUPS_HTTP_DEFAULT, 30, NULL, NULL, get_devices_cb, NULL);
    }
    
    cups-2.2.7/cups/api-filter.header000664 000765 000024 00000002553 13255074424 017340 0ustar00msweetstaff000000 000000

    Filter and Backend Programming

    Headers cups/backend.h
    cups/ppd.h
    cups/sidechannel.h
    Library -lcups
    See Also Programming: Introduction to CUPS Programming
    Programming: CUPS API
    Programming: PPD API
    Programming: Raster API
    Programming: Developing PostScript Printer Drivers
    Programming: Developing Raster Printer Drivers
    Specifications: CUPS Design Description
    cups-2.2.7/cups/api-filter.shtml000664 000765 000024 00000075511 13255074424 017243 0ustar00msweetstaff000000 000000

    Overview

    Filters (which include printer drivers and port monitors) and backends are used to convert job files to a printable format and send that data to the printer itself. All of these programs use a common interface for processing print jobs and communicating status information to the scheduler. Each is run with a standard set of command-line arguments:

    argv[1]
    The job ID
    argv[2]
    The user printing the job
    argv[3]
    The job name/title
    argv[4]
    The number of copies to print
    argv[5]
    The options that were provided when the job was submitted
    argv[6]
    The file to print (first program only)

    The scheduler runs one or more of these programs to print any given job. The first filter reads from the print file and writes to the standard output, while the remaining filters read from the standard input and write to the standard output. The backend is the last filter in the chain and writes to the device.

    Filters are always run as a non-privileged user, typically "lp", with no connection to the user's desktop. Backends are run either as a non-privileged user or as root if the file permissions do not allow user or group execution. The file permissions section talks about this in more detail.

    Security Considerations

    It is always important to use security programming practices. Filters and most backends are run as a non-privileged user, so the major security consideration is resource utilization - filters should not depend on unlimited amounts of CPU, memory, or disk space, and should protect against conditions that could lead to excess usage of any resource like infinite loops and unbounded recursion. In addition, filters must never allow the user to specify an arbitrary file path to a separator page, template, or other file used by the filter since that can lead to an unauthorized disclosure of information. Always treat input as suspect and validate it!

    If you are developing a backend that runs as root, make sure to check for potential buffer overflows, integer under/overflow conditions, and file accesses since these can lead to privilege escalations. When writing files, always validate the file path and never allow a user to determine where to store a file.

    Note:

    Never write files to a user's home directory. Aside from the security implications, CUPS is a network print service and as such the network user may not be the same as the local user and/or there may not be a local home directory to write to.

    In addition, some operating systems provide additional security mechanisms that further limit file system access, even for backends running as root. On macOS, for example, no backend may write to a user's home directory. See the Sandboxing on macOS section for more information.

    Canceled Jobs and Signal Handling

    The scheduler sends SIGTERM when a printing job is canceled or held. Filters, backends, and port monitors must catch SIGTERM and perform any cleanup necessary to produce a valid output file or return the printer to a known good state. The recommended behavior is to end the output on the current page, preferably on the current line or object being printed.

    Filters and backends may also receive SIGPIPE when an upstream or downstream filter/backend exits with a non-zero status. Developers should generally ignore SIGPIPE at the beginning of main() with the following function call:

    #include <signal.h>
    
    ...
    
    int
    main(int argc, char *argv[])
    {
      signal(SIGPIPE, SIG_IGN);
    
      ...
    }
    

    File Permissions

    For security reasons, CUPS will only run filters and backends that are owned by root and do not have world or group write permissions. The recommended permissions for filters and backends are 0555 - read and execute but no write. Backends that must run as root should use permissions of 0500 - read and execute by root, no access for other users. Write permissions can be enabled for the root user only.

    To avoid a warning message, the directory containing your filter(s) must also be owned by root and have world and group write disabled - permissions of 0755 or 0555 are strongly encouraged.

    Temporary Files

    Temporary files should be created in the directory specified by the "TMPDIR" environment variable. The cupsTempFile2 function can be used to safely create temporary files in this directory.

    Copy Generation

    The argv[4] argument specifies the number of copies to produce of the input file. In general, you should only generate copies if the filename argument is supplied. The only exception to this are filters that produce device-independent PostScript output, since the PostScript filter pstops is responsible for generating copies of PostScript files.

    Exit Codes

    Filters must exit with status 0 when they successfully generate print data or 1 when they encounter an error. Backends can return any of the cups_backend_t constants.

    Environment Variables

    The following environment variables are defined by the printing system when running print filters and backends:

    APPLE_LANGUAGE
    The Apple language identifier associated with the job (macOS only).
    CHARSET
    The job character set, typically "utf-8".
    CLASS
    When a job is submitted to a printer class, contains the name of the destination printer class. Otherwise this environment variable will not be set.
    CONTENT_TYPE
    The MIME type associated with the file (e.g. application/postscript).
    CUPS_CACHEDIR
    The directory where cache files can be stored. Cache files can be used to retain information between jobs or files in a job.
    CUPS_DATADIR
    The directory where (read-only) CUPS data files can be found.
    CUPS_FILETYPE
    The type of file being printed: "job-sheet" for a banner page and "document" for a regular print file.
    CUPS_SERVERROOT
    The root directory of the server.
    DEVICE_URI
    The device-uri associated with the printer.
    FINAL_CONTENT_TYPE
    The MIME type associated with the printer (e.g. application/vnd.cups-postscript).
    LANG
    The language locale associated with the job.
    PPD
    The full pathname of the PostScript Printer Description (PPD) file for this printer.
    PRINTER
    The queue name of the class or printer.
    RIP_CACHE
    The recommended amount of memory to use for Raster Image Processors (RIPs).
    TMPDIR
    The directory where temporary files should be created.

    Communicating with the Scheduler

    Filters and backends communicate with the scheduler by writing messages to the standard error file. The scheduler reads messages from all filters in a job and processes the message based on its prefix. For example, the following code sets the current printer state message to "Printing page 5":

    int page = 5;
    
    fprintf(stderr, "INFO: Printing page %d\n", page);
    

    Each message is a single line of text starting with one of the following prefix strings:

    ALERT: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "alert" log level.
    ATTR: attribute=value [attribute=value]
    Sets the named printer or job attribute(s). Typically this is used to set the marker-colors, marker-high-levels, marker-levels, marker-low-levels, marker-message, marker-names, marker-types, printer-alert, and printer-alert-description printer attributes. Standard marker-types values are listed in Table 1. String values need special handling - see Reporting Attribute String Values below.
    CRIT: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "critical" log level.
    DEBUG: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "debug" log level.
    DEBUG2: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "debug2" log level.
    EMERG: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "emergency" log level.
    ERROR: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "error" log level. Use "ERROR:" messages for non-persistent processing errors.
    INFO: message
    Sets the printer-state-message attribute. If the current log level is set to "debug2", also adds the specified message to the current error log file using the "info" log level.
    NOTICE: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "notice" log level.
    PAGE: page-number #-copies
    PAGE: total #-pages
    Adds an entry to the current page log file. The first form adds #-copies to the job-media-sheets-completed attribute. The second form sets the job-media-sheets-completed attribute to #-pages.
    PPD: keyword=value [keyword=value ...]
    Changes or adds keywords to the printer's PPD file. Typically this is used to update installable options or default media settings based on the printer configuration.
    STATE: + printer-state-reason [printer-state-reason ...]
    STATE: - printer-state-reason [printer-state-reason ...]
    Sets or clears printer-state-reason keywords for the current queue. Typically this is used to indicate persistent media, ink, toner, and configuration conditions or errors on a printer. Table 2 lists some of the standard "printer-state-reasons" keywords from the IANA IPP Registry - use vendor-prefixed ("com.example.foo") keywords for custom states. See Managing Printer State in a Filter for more information.
    WARNING: message
    Sets the printer-state-message attribute and adds the specified message to the current error log file using the "warning" log level.

    Messages without one of these prefixes are treated as if they began with the "DEBUG:" prefix string.

    Table 1: Standard marker-types Values
    marker-type Description
    developer Developer unit
    fuser Fuser unit
    fuser-cleaning-pad Fuser cleaning pad
    fuser-oil Fuser oil
    ink Ink supply
    opc Photo conductor
    solid-wax Wax supply
    staples Staple supply
    toner Toner supply
    transfer-unit Transfer unit
    waste-ink Waste ink tank
    waste-toner Waste toner tank
    waste-wax Waste wax tank

    Table 2: Standard State Keywords
    Keyword Description
    connecting-to-device Connecting to printer but not printing yet.
    cover-open The printer's cover is open.
    input-tray-missing The paper tray is missing.
    marker-supply-empty The printer is out of ink.
    marker-supply-low The printer is almost out of ink.
    marker-waste-almost-full The printer's waste bin is almost full.
    marker-waste-full The printer's waste bin is full.
    media-empty The paper tray (any paper tray) is empty.
    media-jam There is a paper jam.
    media-low The paper tray (any paper tray) is almost empty.
    media-needed The paper tray needs to be filled (for a job that is printing).
    paused Stop the printer.
    timed-out Unable to connect to printer.
    toner-empty The printer is out of toner.
    toner-low The printer is low on toner.

    Reporting Attribute String Values

    When reporting string values using "ATTR:" messages, a filter or backend must take special care to appropriately quote those values. The scheduler uses the CUPS option parsing code for attributes, so the general syntax is:

    name=simple
    name=simple,simple,...
    name='complex value'
    name="complex value"
    name='"complex value"','"complex value"',...
    

    Simple values are strings that do not contain spaces, quotes, backslashes, or the comma and can be placed verbatim in the "ATTR:" message, for example:

    int levels[4] = { 40, 50, 60, 70 }; /* CMYK */
    
    fputs("ATTR: marker-colors=#00FFFF,#FF00FF,#FFFF00,#000000\n", stderr);
    fputs("ATTR: marker-high-levels=100,100,100,100\n", stderr);
    fprintf(stderr, "ATTR: marker-levels=%d,%d,%d,%d\n", levels[0], levels[1],
            levels[2], levels[3], levels[4]);
    fputs("ATTR: marker-low-levels=5,5,5,5\n", stderr);
    fputs("ATTR: marker-types=toner,toner,toner,toner\n", stderr);
    

    Complex values that contains spaces, quotes, backslashes, or the comma must be quoted. For a single value a single set of quotes is sufficient:

    fputs("ATTR: marker-message='Levels shown are approximate.'\n", stderr);
    

    When multiple values are reported, each value must be enclosed by a set of single and double quotes:

    fputs("ATTR: marker-names='\"Cyan Toner\"','\"Magenta Toner\"',"
          "'\"Yellow Toner\"','\"Black Toner\"'\n", stderr);
    

    The IPP backend includes a quote_string function that may be used to properly quote a complex value in an "ATTR:" message:

    static const char *                     /* O - Quoted string */
    quote_string(const char *s,             /* I - String */
                 char       *q,             /* I - Quoted string buffer */
                 size_t     qsize)          /* I - Size of quoted string buffer */
    {
      char  *qptr,                          /* Pointer into string buffer */
            *qend;                          /* End of string buffer */
    
    
      qptr = q;
      qend = q + qsize - 5;
    
      if (qend < q)
      {
        *q = '\0';
        return (q);
      }
    
      *qptr++ = '\'';
      *qptr++ = '\"';
    
      while (*s && qptr < qend)
      {
        if (*s == '\\' || *s == '\"' || *s == '\'')
        {
          if (qptr < (qend - 4))
          {
            *qptr++ = '\\';
            *qptr++ = '\\';
            *qptr++ = '\\';
          }
          else
            break;
        }
    
        *qptr++ = *s++;
      }
    
      *qptr++ = '\"';
      *qptr++ = '\'';
      *qptr   = '\0';
    
      return (q);
    }
    

    Managing Printer State in a Filter

    Filters are responsible for managing the state keywords they set using "STATE:" messages. Typically you will update all of the keywords that are used by the filter at startup, for example:

    if (foo_condition != 0)
      fputs("STATE: +com.example.foo\n", stderr);
    else
      fputs("STATE: -com.example.foo\n", stderr);
    
    if (bar_condition != 0)
      fputs("STATE: +com.example.bar\n", stderr);
    else
      fputs("STATE: -com.example.bar\n", stderr);
    

    Then as conditions change, your filter sends "STATE: +keyword" or "STATE: -keyword" messages as necessary to set or clear the corresponding keyword, respectively.

    State keywords are often used to notify the user of issues that span across jobs, for example "media-empty-warning" that indicates one or more paper trays are empty. These keywords should not be cleared unless the corresponding issue no longer exists.

    Filters should clear job-related keywords on startup and exit so that they do not remain set between jobs. For example, "connecting-to-device" is a job sub-state and not an issue that applies when a job is not printing.

    Note:

    "STATE:" messages often provide visible alerts to the user. For example, on macOS setting a printer-state-reason value with an "-error" or "-warning" suffix will cause the printer's dock item to bounce if the corresponding reason is localized with a cupsIPPReason keyword in the printer's PPD file.

    When providing a vendor-prefixed keyword, always provide the corresponding standard keyword (if any) to allow clients to respond to the condition correctly. For example, if you provide a vendor-prefixed keyword for a low cyan ink condition ("com.example.cyan-ink-low") you must also set the "marker-supply-low-warning" keyword. In such cases you should also refrain from localizing the vendor-prefixed keyword in the PPD file - otherwise both the generic and vendor-specific keyword will be shown in the user interface.

    Reporting Supply Levels

    CUPS tracks several "marker-*" attributes for ink/toner supply level reporting. These attributes allow applications to display the current supply levels for a printer without printer-specific software. Table 3 lists the marker attributes and what they represent.

    Filters set marker attributes by sending "ATTR:" messages to stderr. For example, a filter supporting an inkjet printer with black and tri-color ink cartridges would use the following to initialize the supply attributes:

    fputs("ATTR: marker-colors=#000000,#00FFFF#FF00FF#FFFF00\n", stderr);
    fputs("ATTR: marker-low-levels=5,10\n", stderr);
    fputs("ATTR: marker-names=Black,Tri-Color\n", stderr);
    fputs("ATTR: marker-types=ink,ink\n", stderr);
    

    Then periodically the filter queries the printer for its current supply levels and updates them with a separate "ATTR:" message:

    int black_level, tri_level;
    ...
    fprintf(stderr, "ATTR: marker-levels=%d,%d\n", black_level, tri_level);
    
    Table 3: Supply Level Attributes
    Attribute Description
    marker-colors A list of comma-separated colors; each color is either "none" or one or more hex-encoded sRGB colors of the form "#RRGGBB".
    marker-high-levels A list of comma-separated "almost full" level values from 0 to 100; a value of 100 should be used for supplies that are consumed/emptied like ink cartridges.
    marker-levels A list of comma-separated level values for each supply. A value of -1 indicates the level is unavailable, -2 indicates unknown, and -3 indicates the level is unknown but has not yet reached capacity. Values from 0 to 100 indicate the corresponding percentage.
    marker-low-levels A list of comma-separated "almost empty" level values from 0 to 100; a value of 0 should be used for supplies that are filled like waste ink tanks.
    marker-message A human-readable supply status message for the user like "12 pages of ink remaining."
    marker-names A list of comma-separated supply names like "Cyan Ink", "Fuser", etc.
    marker-types A list of comma-separated supply types; the types are listed in Table 1.

    Communicating with the Backend

    Filters can communicate with the backend via the cupsBackChannelRead and cupsSideChannelDoRequest functions. The cupsBackChannelRead function reads data that has been sent back from the device and is typically used to obtain status and configuration information. For example, the following code polls the backend for back-channel data:

    #include <cups/cups.h>
    
    char buffer[8192];
    ssize_t bytes;
    
    /* Use a timeout of 0.0 seconds to poll for back-channel data */
    bytes = cupsBackChannelRead(buffer, sizeof(buffer), 0.0);
    

    Filters can also use select() or poll() on the back-channel file descriptor (3 or CUPS_BC_FD) to read data only when it is available.

    The cupsSideChannelDoRequest function allows you to get out-of-band status information and do synchronization with the device. For example, the following code gets the current IEEE-1284 device ID string from the backend:

    #include <cups/sidechannel.h>
    
    char data[2049];
    int datalen;
    cups_sc_status_t status;
    
    /* Tell cupsSideChannelDoRequest() how big our buffer is, less 1 byte for
       nul-termination... */
    datalen = sizeof(data) - 1;
    
    /* Get the IEEE-1284 device ID, waiting for up to 1 second */
    status = cupsSideChannelDoRequest(CUPS_SC_CMD_GET_DEVICE_ID, data, &datalen, 1.0);
    
    /* Use the returned value if OK was returned and the length is non-zero */
    if (status == CUPS_SC_STATUS_OK && datalen > 0)
      data[datalen] = '\0';
    else
      data[0] = '\0';
    

    Forcing All Output to a Printer

    The cupsSideChannelDoRequest function allows you to tell the backend to send all pending data to the printer. This is most often needed when sending query commands to the printer. For example:

    #include <cups/cups.h>
    #include <cups/sidechannel.h>
    
    char data[1024];
    int datalen = sizeof(data);
    cups_sc_status_t status;
    
    /* Flush pending output to stdout */
    fflush(stdout);
    
    /* Drain output to backend, waiting for up to 30 seconds */
    status = cupsSideChannelDoRequest(CUPS_SC_CMD_DRAIN_OUTPUT, data, &datalen, 30.0);
    
    /* Read the response if the output was sent */
    if (status == CUPS_SC_STATUS_OK)
    {
      ssize_t bytes;
    
      /* Wait up to 10.0 seconds for back-channel data */
      bytes = cupsBackChannelRead(data, sizeof(data), 10.0);
      /* do something with the data from the printer */
    }
    

    Communicating with Filters

    Backends communicate with filters using the reciprocal functions cupsBackChannelWrite, cupsSideChannelRead, and cupsSideChannelWrite. We recommend writing back-channel data using a timeout of 1.0 seconds:

    #include <cups/cups.h>
    
    char buffer[8192];
    ssize_t bytes;
    
    /* Obtain data from printer/device */
    ...
    
    /* Use a timeout of 1.0 seconds to give filters a chance to read */
    cupsBackChannelWrite(buffer, bytes, 1.0);
    

    The cupsSideChannelRead function reads a side-channel command from a filter, driver, or port monitor. Backends can either poll for commands using a timeout of 0.0, wait indefinitely for commands using a timeout of -1.0 (probably in a separate thread for that purpose), or use select or poll on the CUPS_SC_FD file descriptor (4) to handle input and output on several file descriptors at the same time.

    Once a command is processed, the backend uses the cupsSideChannelWrite function to send its response. For example, the following code shows how to poll for a side-channel command and respond to it:

    #include <cups/sidechannel.h>
    
    cups_sc_command_t command;
    cups_sc_status_t status;
    char data[2048];
    int datalen = sizeof(data);
    
    /* Poll for a command... */
    if (!cupsSideChannelRead(&command, &status, data, &datalen, 0.0))
    {
      switch (command)
      {
        /* handle supported commands, fill data/datalen/status with values as needed */
    
        default :
            status  = CUPS_SC_STATUS_NOT_IMPLEMENTED;
    	datalen = 0;
    	break;
      }
    
      /* Send a response... */
      cupsSideChannelWrite(command, status, data, datalen, 1.0);
    }
    

    Doing SNMP Queries with Network Printers

    The Simple Network Management Protocol (SNMP) allows you to get the current status, page counter, and supply levels from most network printers. Every piece of information is associated with an Object Identifier (OID), and every printer has a community name associated with it. OIDs can be queried directly or by "walking" over a range of OIDs with a common prefix.

    The two CUPS SNMP functions provide a simple API for querying network printers through the side-channel interface. Each accepts a string containing an OID like ".1.3.6.1.2.1.43.10.2.1.4.1.1" (the standard page counter OID) along with a timeout for the query.

    The cupsSideChannelSNMPGet function queries a single OID and returns the value as a string in a buffer you supply:

    #include <cups/sidechannel.h>
    
    char data[512];
    int datalen = sizeof(data);
    
    if (cupsSideChannelSNMPGet(".1.3.6.1.2.1.43.10.2.1.4.1.1", data, &datalen, 5.0)
            == CUPS_SC_STATUS_OK)
    {
      /* Do something with the value */
      printf("Page counter is: %s\n", data);
    }
    

    The cupsSideChannelSNMPWalk function allows you to query a whole group of OIDs, calling a function of your choice for each OID that is found:

    #include <cups/sidechannel.h>
    
    void
    my_callback(const char *oid, const char *data, int datalen, void *context)
    {
      /* Do something with the value */
      printf("%s=%s\n", oid, data);
    }
    
    ...
    
    void *my_data;
    
    cupsSNMPSideChannelWalk(".1.3.6.1.2.1.43", 5.0, my_callback, my_data);
    

    Sandboxing on macOS

    Starting with macOS 10.6, filters and backends are run inside a security "sandbox" which further limits (beyond the normal UNIX user/group permissions) what a filter or backend can do. This helps to both secure the printing system from malicious software and enforce the functional separation of components in the CUPS filter chain. What follows is a list of actions that are explicitly allowed for all filters and backends:

    1. Reading of files: pursuant to normal UNIX file permissions, filters and backends can read files for the current job from the /private/var/spool/cups directory and other files on mounted filesystems except for user home directories under /Users.
    2. Writing of files: pursuant to normal UNIX file permissions, filters and backends can read/write files to the cache directory specified by the CUPS_CACHEDIR environment variable, to the state directory specified by the CUPS_STATEDIR environment variable, to the temporary directory specified by the TMPDIR environment variable, and under the /private/var/db, /private/var/folders, /private/var/lib, /private/var/mysql, /private/var/run, /private/var/spool (except /private/var/spool/cups), /Library/Application Support, /Library/Caches, /Library/Logs, /Library/Preferences, /Library/WebServer, and /Users/Shared directories.
    3. Execution of programs: pursuant to normal UNIX file permissions, filters and backends can execute any program not located under the /Users directory. Child processes inherit the sandbox and are subject to the same restrictions as the parent.
    4. Bluetooth and USB: backends can access Bluetooth and USB printers through IOKit. Filters cannot access Bluetooth and USB printers directly.
    5. Network: filters and backends can access UNIX domain sockets under the /private/tmp, /private/var/run, and /private/var/tmp directories. Backends can also create IPv4 and IPv6 TCP (outgoing) and UDP (incoming and outgoing) socket, and bind to local source ports. Filters cannot directly create IPv4 and IPv6 TCP or UDP sockets.
    6. Notifications: filters and backends can send notifications via the Darwin notify_post() API.
    Note: The sandbox profile used in CUPS 2.0 still allows some actions that are not listed above - these privileges will be removed over time until the profile matches the list above.
    cups-2.2.7/cups/api-overview.header000664 000765 000024 00000004011 13255074424 017710 0ustar00msweetstaff000000 000000

    Introduction to CUPS Programming

    Headers cups/cups.h
    cups/adminutil.h
    cups/array.h
    cups/dir.h
    cups/file.h
    cups/http.h
    cups/ipp.h
    cups/language.h
    cups/ppd.h
    cups/pwg.h
    cups/raster.h
    Libraries -lcups
    See Also Programming: Developing Raster Printer Drivers
    Programming: Developing PostScript Printer Drivers
    Programming: Filter and Backend Programming
    Programming: Introduction to the PPD Compiler
    Programming: Administrative APIs
    Programming: Array API
    Programming: CUPS API
    Programming: File and Directory APIs
    Programming: HTTP and IPP APIs
    Programming: PPD API (DEPRECATED)
    Programming: Raster API
    References: PPD Compiler Driver Information File Reference
    Specifications: CUPS PPD Extensions
    cups-2.2.7/cups/api-overview.shtml000664 000765 000024 00000007057 13255074424 017624 0ustar00msweetstaff000000 000000

    Overview

    CUPS provides two libraries that interface with the different parts of the printing system. The "cups" library provides all of the common application and filter functions while the "cupsimage" library provides all of the imaging functions used in raster printer drivers. The "cups" library functions are accessed by including the <cups/cups.h> header, while "cupsimage" functions are found in the <cups/raster.h> header.

    Compiling Programs

    The CUPS libraries can be used from any C, C++, or Objective C program. The method of compiling against the libraries varies depending on the operating system and installation of CUPS. The following sections show how to compile a simple program (shown below) in two common environments.

    The following simple program lists the available printers on the system:

    #include <stdio.h>
    #include <cups/cups.h>
    
    int main(void)
    {
      int i;
      cups_dest_t *dests, *dest;
      int num_dests = cupsGetDests(&dests);
    
      for (i = num_dests, dest = dests; i > 0; i --, dest ++)
      {
        if (dest->instance)
          printf("%s/%s\n", dest->name, dest->instance);
        else
          puts(dest->name);
      }
    
      return (0);
    }
    

    Compiling with Xcode

    In Xcode, choose New Project... from the File menu, then select the Standard Tool project type under Command Line Utility. Click Next and choose a project directory. Click Next to create the project.

    In the project window, double-click on the Targets group and control-click on the simple target to show the context menu. Choose Existing Framework... from the Add submenu. When the file chooser sheet appears, press the / key and enter "/usr/lib". Scroll down the file list and select the libcups.dylib file. Click the Add button in the file chooser and attributes sheets.

    In the project window, double-click on the main.c source file. Replace the template source code with the listing above and save it. Click the Build and Go button to build the sample program and run it.

    Compiling with GCC

    From the command-line, create a file called sample.c using your favorite editor and then run the following command to compile it with GCC and run it:

    gcc -o simple `cups-config --cflags` simple.c `cups-config --libs`
    ./simple
    

    The cups-config command provides the compiler flags ("cups-config --cflags") and libraries ("cups-config --libs") needed for the local system.

    Where to Go Next

    If you are developing a print filter, driver, or backend, see the Filter and Backend Programming guide. Raster printer driver developers should also read the Raster API reference.

    cups-2.2.7/cups/api-ppd.header000664 000765 000024 00000002254 13255074424 016634 0ustar00msweetstaff000000 000000

    PPD API (DEPRECATED)

    The PPD API is deprecated starting in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the CUPS API documentation. These functions will be removed in a future release of CUPS.
    Header cups/ppd.h
    Library -lcups
    See Also Programming: Introduction to CUPS Programming
    Programming: CUPS API
    Specifications: CUPS PPD Extensions
    cups-2.2.7/cups/api-ppd.shtml000664 000765 000024 00000022016 13255074424 016531 0ustar00msweetstaff000000 000000

    Overview

    The PPD API is deprecated starting in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the CUPS API documentation. These functions will be removed in a future release of CUPS.

    The CUPS PPD API provides read-only access the data in PostScript Printer Description ("PPD") files which are used for all printers with a driver. With it you can obtain the data necessary to display printer options to users, mark option choices and check for conflicting choices, and output marked choices in PostScript output. The ppd_file_t structure contains all of the information in a PPD file.

    Note:

    The CUPS PPD API uses the terms "option" and "choice" instead of the Adobe terms "MainKeyword" and "OptionKeyword" to refer to specific printer options and features. CUPS also treats option ("MainKeyword") and choice ("OptionKeyword") values as case-insensitive strings, so option "InputSlot" and choice "Upper" are equivalent to "inputslot" and "upper", respectively.

    Loading a PPD File

    The ppdOpenFile function "opens" a PPD file and loads it into memory. For example, the following code opens the current printer's PPD file in a CUPS filter:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd = ppdOpenFile(getenv("PPD"));
    

    The return value is a pointer to a new ppd_file_t structure or NULL if the PPD file does not exist or cannot be loaded. The ppdClose function frees the memory used by the structure:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd;
    
    ppdClose(ppd);
    

    Once closed, pointers to the ppd_file_t structure and any data in it will no longer be valid.

    Options and Groups

    PPD files support multiple options, which are stored in arrays of ppd_option_t and ppd_choice_t structures.

    Each option in turn is associated with a group stored in a ppd_group_t structure. Groups can be specified in the PPD file; if an option is not associated with a group then it is put in an automatically-generated "General" group. Groups can also have sub-groups, however CUPS currently ignores sub-groups because of past abuses of this functionality.

    Option choices are selected by marking them using one of three functions. The first is ppdMarkDefaults which selects all of the default options in the PPD file:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd;
    
    ppdMarkDefaults(ppd);
    

    The second is ppdMarkOption which selects a single option choice in the PPD file. For example, the following code selects the upper paper tray:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd;
    
    ppdMarkOption(ppd, "InputSlot", "Upper");
    

    The last function is cupsMarkOptions which selects multiple option choices in the PPD file from an array of CUPS options, mapping IPP attributes like "media" and "sides" to their corresponding PPD options. You typically use this function in a print filter with cupsParseOptions and ppdMarkDefaults to select all of the option choices needed for the job, for example:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd = ppdOpenFile(getenv("PPD"));
    cups_option_t *options = NULL;
    int num_options = cupsParseOptions(argv[5], 0, &options);
    
    ppdMarkDefaults(ppd);
    cupsMarkOptions(ppd, num_options, options);
    cupsFreeOptions(num_options, options);
    

    Constraints

    PPD files support specification of conflict conditions, called constraints, between different options. Constraints are stored in an array of ppd_const_t structures which specify the options and choices that conflict with each other. The ppdConflicts function tells you how many of the selected options are incompatible. Since constraints are normally specified in pairs, the returned value is typically an even number.

    Page Sizes

    Page sizes are special options which have physical dimensions and margins associated with them. The size information is stored in ppd_size_t structures and is available by looking up the named size with the ppdPageSize function. The page size and margins are returned in units called points; there are 72 points per inch. If you pass NULL for the size, the currently selected size is returned:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd;
    ppd_size_t *size = ppdPageSize(ppd, NULL);
    

    Besides the standard page sizes listed in a PPD file, some printers support variable or custom page sizes. Custom page sizes are supported if the variables_sizes member of the ppd_file_t structure is non-zero. The custom_min, custom_max, and custom_margins members of the ppd_file_t structure define the limits of the printable area. To get the resulting media size, use a page size string of the form "Custom.widthxlength", where "width" and "length" are in points. Custom page size names can also be specified in inches ("Custom.widthxheightin"), centimeters ("Custom.widthxheightcm"), or millimeters ("Custom.widthxheightmm"):

    #include <cups/ppd.h>
    
    ppd_file_t *ppd;
    
    /* Get an 576x720 point custom page size */
    ppd_size_t *size = ppdPageSize(ppd, "Custom.576x720");
    
    /* Get an 8x10 inch custom page size */
    ppd_size_t *size = ppdPageSize(ppd, "Custom.8x10in");
    
    /* Get a 100x200 millimeter custom page size */
    ppd_size_t *size = ppdPageSize(ppd, "Custom.100x200mm");
    
    /* Get a 12.7x34.5 centimeter custom page size */
    ppd_size_t *size = ppdPageSize(ppd, "Custom.12.7x34.5cm");
    

    If the PPD does not support variable page sizes, the ppdPageSize function will return NULL.

    Attributes

    Every PPD file is composed of one or more attributes. Most of these attributes are used to define groups, options, choices, and page sizes, however several informational attributes may be present which you can access in your program or filter. Attributes normally look like one of the following examples in a PPD file:

    *name: "value"
    *name spec: "value"
    *name spec/text: "value"
    

    The ppdFindAttr and ppdFindNextAttr functions find the first and next instances, respectively, of the named attribute with the given "spec" string and return a ppd_attr_t structure. If you provide a NULL specifier string, all attributes with the given name will be returned. For example, the following code lists all of the Product attributes in a PPD file:

    #include <cups/ppd.h>
    
    ppd_file_t *ppd;
    ppd_attr_t *attr;
    
    for (attr = ppdFindAttr(ppd, "Product", NULL);
         attr != NULL;
         attr = ppdFindNextAttr(ppd, "Product", NULL))
      puts(attr->value);
    
    cups-2.2.7/cups/array-private.h000664 000765 000024 00000002052 13255074424 017063 0ustar00msweetstaff000000 000000 /* * Private array definitions for CUPS. * * Copyright 2011-2012 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_ARRAY_PRIVATE_H_ # define _CUPS_ARRAY_PRIVATE_H_ /* * Include necessary headers... */ # include /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Functions... */ extern int _cupsArrayAddStrings(cups_array_t *a, const char *s, char delim) _CUPS_API_1_5; extern cups_array_t *_cupsArrayNewStrings(const char *s, char delim) _CUPS_API_1_5; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_ARRAY_PRIVATE_H_ */ cups-2.2.7/cups/array.c000664 000765 000024 00000067057 13255074424 015426 0ustar00msweetstaff000000 000000 /* * Sorted array routines for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include "string-private.h" #include "debug-private.h" #include "array-private.h" /* * Limits... */ #define _CUPS_MAXSAVE 32 /**** Maximum number of saves ****/ /* * Types and structures... */ struct _cups_array_s /**** CUPS array structure ****/ { /* * The current implementation uses an insertion sort into an array of * sorted pointers. We leave the array type private/opaque so that we * can change the underlying implementation without affecting the users * of this API. */ int num_elements, /* Number of array elements */ alloc_elements, /* Allocated array elements */ current, /* Current element */ insert, /* Last inserted element */ unique, /* Are all elements unique? */ num_saved, /* Number of saved elements */ saved[_CUPS_MAXSAVE]; /* Saved elements */ void **elements; /* Array elements */ cups_array_func_t compare; /* Element comparison function */ void *data; /* User data passed to compare */ cups_ahash_func_t hashfunc; /* Hash function */ int hashsize, /* Size of hash */ *hash; /* Hash array */ cups_acopy_func_t copyfunc; /* Copy function */ cups_afree_func_t freefunc; /* Free function */ }; /* * Local functions... */ static int cups_array_add(cups_array_t *a, void *e, int insert); static int cups_array_find(cups_array_t *a, void *e, int prev, int *rdiff); /* * 'cupsArrayAdd()' - Add an element to the array. * * When adding an element to a sorted array, non-unique elements are * appended at the end of the run of identical elements. For unsorted arrays, * the element is appended to the end of the array. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 1 on success, 0 on failure */ cupsArrayAdd(cups_array_t *a, /* I - Array */ void *e) /* I - Element */ { DEBUG_printf(("2cupsArrayAdd(a=%p, e=%p)", (void *)a, e)); /* * Range check input... */ if (!a || !e) { DEBUG_puts("3cupsArrayAdd: returning 0"); return (0); } /* * Append the element... */ return (cups_array_add(a, e, 0)); } /* * '_cupsArrayAddStrings()' - Add zero or more delimited strings to an array. * * Note: The array MUST be created using the @link _cupsArrayNewStrings@ * function. Duplicate strings are NOT added. If the string pointer "s" is NULL * or the empty string, no strings are added to the array. */ int /* O - 1 on success, 0 on failure */ _cupsArrayAddStrings(cups_array_t *a, /* I - Array */ const char *s, /* I - Delimited strings or NULL */ char delim)/* I - Delimiter character */ { char *buffer, /* Copy of string */ *start, /* Start of string */ *end; /* End of string */ int status = 1; /* Status of add */ DEBUG_printf(("_cupsArrayAddStrings(a=%p, s=\"%s\", delim='%c')", (void *)a, s, delim)); if (!a || !s || !*s) { DEBUG_puts("1_cupsArrayAddStrings: Returning 0"); return (0); } if (delim == ' ') { /* * Skip leading whitespace... */ DEBUG_puts("1_cupsArrayAddStrings: Skipping leading whitespace."); while (*s && isspace(*s & 255)) s ++; DEBUG_printf(("1_cupsArrayAddStrings: Remaining string \"%s\".", s)); } if (!strchr(s, delim) && (delim != ' ' || (!strchr(s, '\t') && !strchr(s, '\n')))) { /* * String doesn't contain a delimiter, so add it as a single value... */ DEBUG_puts("1_cupsArrayAddStrings: No delimiter seen, adding a single " "value."); if (!cupsArrayFind(a, (void *)s)) status = cupsArrayAdd(a, (void *)s); } else if ((buffer = strdup(s)) == NULL) { DEBUG_puts("1_cupsArrayAddStrings: Unable to duplicate string."); status = 0; } else { for (start = end = buffer; *end; start = end) { /* * Find the end of the current delimited string and see if we need to add * it... */ if (delim == ' ') { while (*end && !isspace(*end & 255)) end ++; while (*end && isspace(*end & 255)) *end++ = '\0'; } else if ((end = strchr(start, delim)) != NULL) *end++ = '\0'; else end = start + strlen(start); DEBUG_printf(("1_cupsArrayAddStrings: Adding \"%s\", end=\"%s\"", start, end)); if (!cupsArrayFind(a, start)) status &= cupsArrayAdd(a, start); } free(buffer); } DEBUG_printf(("1_cupsArrayAddStrings: Returning %d.", status)); return (status); } /* * 'cupsArrayClear()' - Clear the array. * * This function is equivalent to removing all elements in the array. * The caller is responsible for freeing the memory used by the * elements themselves. * * @since CUPS 1.2/macOS 10.5@ */ void cupsArrayClear(cups_array_t *a) /* I - Array */ { /* * Range check input... */ if (!a) return; /* * Free the existing elements as needed.. */ if (a->freefunc) { int i; /* Looping var */ void **e; /* Current element */ for (i = a->num_elements, e = a->elements; i > 0; i --, e ++) (a->freefunc)(*e, a->data); } /* * Set the number of elements to 0; we don't actually free the memory * here - that is done in cupsArrayDelete()... */ a->num_elements = 0; a->current = -1; a->insert = -1; a->unique = 1; a->num_saved = 0; } /* * 'cupsArrayCount()' - Get the number of elements in the array. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - Number of elements */ cupsArrayCount(cups_array_t *a) /* I - Array */ { /* * Range check input... */ if (!a) return (0); /* * Return the number of elements... */ return (a->num_elements); } /* * 'cupsArrayCurrent()' - Return the current element in the array. * * The current element is undefined until you call @link cupsArrayFind@, * @link cupsArrayFirst@, or @link cupsArrayIndex@, or @link cupsArrayLast@. * * @since CUPS 1.2/macOS 10.5@ */ void * /* O - Element */ cupsArrayCurrent(cups_array_t *a) /* I - Array */ { /* * Range check input... */ if (!a) return (NULL); /* * Return the current element... */ if (a->current >= 0 && a->current < a->num_elements) return (a->elements[a->current]); else return (NULL); } /* * 'cupsArrayDelete()' - Free all memory used by the array. * * The caller is responsible for freeing the memory used by the * elements themselves. * * @since CUPS 1.2/macOS 10.5@ */ void cupsArrayDelete(cups_array_t *a) /* I - Array */ { /* * Range check input... */ if (!a) return; /* * Free the elements if we have a free function (otherwise the caller is * responsible for doing the dirty work...) */ if (a->freefunc) { int i; /* Looping var */ void **e; /* Current element */ for (i = a->num_elements, e = a->elements; i > 0; i --, e ++) (a->freefunc)(*e, a->data); } /* * Free the array of element pointers... */ if (a->alloc_elements) free(a->elements); if (a->hashsize) free(a->hash); free(a); } /* * 'cupsArrayDup()' - Duplicate the array. * * @since CUPS 1.2/macOS 10.5@ */ cups_array_t * /* O - Duplicate array */ cupsArrayDup(cups_array_t *a) /* I - Array */ { cups_array_t *da; /* Duplicate array */ /* * Range check input... */ if (!a) return (NULL); /* * Allocate memory for the array... */ da = calloc(1, sizeof(cups_array_t)); if (!da) return (NULL); da->compare = a->compare; da->data = a->data; da->current = a->current; da->insert = a->insert; da->unique = a->unique; da->num_saved = a->num_saved; memcpy(da->saved, a->saved, sizeof(a->saved)); if (a->num_elements) { /* * Allocate memory for the elements... */ da->elements = malloc((size_t)a->num_elements * sizeof(void *)); if (!da->elements) { free(da); return (NULL); } /* * Copy the element pointers... */ if (a->copyfunc) { /* * Use the copy function to make a copy of each element... */ int i; /* Looping var */ for (i = 0; i < a->num_elements; i ++) da->elements[i] = (a->copyfunc)(a->elements[i], a->data); } else { /* * Just copy raw pointers... */ memcpy(da->elements, a->elements, (size_t)a->num_elements * sizeof(void *)); } da->num_elements = a->num_elements; da->alloc_elements = a->num_elements; } /* * Return the new array... */ return (da); } /* * 'cupsArrayFind()' - Find an element in the array. * * @since CUPS 1.2/macOS 10.5@ */ void * /* O - Element found or @code NULL@ */ cupsArrayFind(cups_array_t *a, /* I - Array */ void *e) /* I - Element */ { int current, /* Current element */ diff, /* Difference */ hash; /* Hash index */ /* * Range check input... */ if (!a || !e) return (NULL); /* * See if we have any elements... */ if (!a->num_elements) return (NULL); /* * Yes, look for a match... */ if (a->hash) { hash = (*(a->hashfunc))(e, a->data); if (hash < 0 || hash >= a->hashsize) { current = a->current; hash = -1; } else { current = a->hash[hash]; if (current < 0 || current >= a->num_elements) current = a->current; } } else { current = a->current; hash = -1; } current = cups_array_find(a, e, current, &diff); if (!diff) { /* * Found a match! If the array does not contain unique values, find * the first element that is the same... */ if (!a->unique && a->compare) { /* * The array is not unique, find the first match... */ while (current > 0 && !(*(a->compare))(e, a->elements[current - 1], a->data)) current --; } a->current = current; if (hash >= 0) a->hash[hash] = current; return (a->elements[current]); } else { /* * No match... */ a->current = -1; return (NULL); } } /* * 'cupsArrayFirst()' - Get the first element in the array. * * @since CUPS 1.2/macOS 10.5@ */ void * /* O - First element or @code NULL@ if the array is empty */ cupsArrayFirst(cups_array_t *a) /* I - Array */ { /* * Range check input... */ if (!a) return (NULL); /* * Return the first element... */ a->current = 0; return (cupsArrayCurrent(a)); } /* * 'cupsArrayGetIndex()' - Get the index of the current element. * * The current element is undefined until you call @link cupsArrayFind@, * @link cupsArrayFirst@, or @link cupsArrayIndex@, or @link cupsArrayLast@. * * @since CUPS 1.3/macOS 10.5@ */ int /* O - Index of the current element, starting at 0 */ cupsArrayGetIndex(cups_array_t *a) /* I - Array */ { if (!a) return (-1); else return (a->current); } /* * 'cupsArrayGetInsert()' - Get the index of the last inserted element. * * @since CUPS 1.3/macOS 10.5@ */ int /* O - Index of the last inserted element, starting at 0 */ cupsArrayGetInsert(cups_array_t *a) /* I - Array */ { if (!a) return (-1); else return (a->insert); } /* * 'cupsArrayIndex()' - Get the N-th element in the array. * * @since CUPS 1.2/macOS 10.5@ */ void * /* O - N-th element or @code NULL@ */ cupsArrayIndex(cups_array_t *a, /* I - Array */ int n) /* I - Index into array, starting at 0 */ { if (!a) return (NULL); a->current = n; return (cupsArrayCurrent(a)); } /* * 'cupsArrayInsert()' - Insert an element in the array. * * When inserting an element in a sorted array, non-unique elements are * inserted at the beginning of the run of identical elements. For unsorted * arrays, the element is inserted at the beginning of the array. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 0 on failure, 1 on success */ cupsArrayInsert(cups_array_t *a, /* I - Array */ void *e) /* I - Element */ { DEBUG_printf(("2cupsArrayInsert(a=%p, e=%p)", (void *)a, e)); /* * Range check input... */ if (!a || !e) { DEBUG_puts("3cupsArrayInsert: returning 0"); return (0); } /* * Insert the element... */ return (cups_array_add(a, e, 1)); } /* * 'cupsArrayLast()' - Get the last element in the array. * * @since CUPS 1.2/macOS 10.5@ */ void * /* O - Last element or @code NULL@ if the array is empty */ cupsArrayLast(cups_array_t *a) /* I - Array */ { /* * Range check input... */ if (!a) return (NULL); /* * Return the last element... */ a->current = a->num_elements - 1; return (cupsArrayCurrent(a)); } /* * 'cupsArrayNew()' - Create a new array. * * The comparison function ("f") is used to create a sorted array. The function * receives pointers to two elements and the user data pointer ("d") - the user * data pointer argument can safely be omitted when not required so functions * like @code strcmp@ can be used for sorted string arrays. * * @since CUPS 1.2/macOS 10.5@ */ cups_array_t * /* O - Array */ cupsArrayNew(cups_array_func_t f, /* I - Comparison function or @code NULL@ for an unsorted array */ void *d) /* I - User data pointer or @code NULL@ */ { return (cupsArrayNew3(f, d, 0, 0, 0, 0)); } /* * 'cupsArrayNew2()' - Create a new array with hash. * * The comparison function ("f") is used to create a sorted array. The function * receives pointers to two elements and the user data pointer ("d") - the user * data pointer argument can safely be omitted when not required so functions * like @code strcmp@ can be used for sorted string arrays. * * The hash function ("h") is used to implement cached lookups with the * specified hash size ("hsize"). * * @since CUPS 1.3/macOS 10.5@ */ cups_array_t * /* O - Array */ cupsArrayNew2(cups_array_func_t f, /* I - Comparison function or @code NULL@ for an unsorted array */ void *d, /* I - User data or @code NULL@ */ cups_ahash_func_t h, /* I - Hash function or @code NULL@ for unhashed lookups */ int hsize) /* I - Hash size (>= 0) */ { return (cupsArrayNew3(f, d, h, hsize, 0, 0)); } /* * 'cupsArrayNew3()' - Create a new array with hash and/or free function. * * The comparison function ("f") is used to create a sorted array. The function * receives pointers to two elements and the user data pointer ("d") - the user * data pointer argument can safely be omitted when not required so functions * like @code strcmp@ can be used for sorted string arrays. * * The hash function ("h") is used to implement cached lookups with the * specified hash size ("hsize"). * * The copy function ("cf") is used to automatically copy/retain elements when * added or the array is copied. * * The free function ("cf") is used to automatically free/release elements when * removed or the array is deleted. * * @since CUPS 1.5/macOS 10.7@ */ cups_array_t * /* O - Array */ cupsArrayNew3(cups_array_func_t f, /* I - Comparison function or @code NULL@ for an unsorted array */ void *d, /* I - User data or @code NULL@ */ cups_ahash_func_t h, /* I - Hash function or @code NULL@ for unhashed lookups */ int hsize, /* I - Hash size (>= 0) */ cups_acopy_func_t cf, /* I - Copy function */ cups_afree_func_t ff) /* I - Free function */ { cups_array_t *a; /* Array */ /* * Allocate memory for the array... */ a = calloc(1, sizeof(cups_array_t)); if (!a) return (NULL); a->compare = f; a->data = d; a->current = -1; a->insert = -1; a->num_saved = 0; a->unique = 1; if (hsize > 0 && h) { a->hashfunc = h; a->hashsize = hsize; a->hash = malloc((size_t)hsize * sizeof(int)); if (!a->hash) { free(a); return (NULL); } memset(a->hash, -1, (size_t)hsize * sizeof(int)); } a->copyfunc = cf; a->freefunc = ff; return (a); } /* * '_cupsArrayNewStrings()' - Create a new array of comma-delimited strings. * * Note: The array automatically manages copies of the strings passed. If the * string pointer "s" is NULL or the empty string, no strings are added to the * newly created array. */ cups_array_t * /* O - Array */ _cupsArrayNewStrings(const char *s, /* I - Delimited strings or NULL */ char delim) /* I - Delimiter character */ { cups_array_t *a; /* Array */ if ((a = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0, (cups_acopy_func_t)_cupsStrAlloc, (cups_afree_func_t)_cupsStrFree)) != NULL) _cupsArrayAddStrings(a, s, delim); return (a); } /* * 'cupsArrayNext()' - Get the next element in the array. * * This function is equivalent to "cupsArrayIndex(a, cupsArrayGetIndex(a) + 1)". * * The next element is undefined until you call @link cupsArrayFind@, * @link cupsArrayFirst@, or @link cupsArrayIndex@, or @link cupsArrayLast@ * to set the current element. * * @since CUPS 1.2/macOS 10.5@ */ void * /* O - Next element or @code NULL@ */ cupsArrayNext(cups_array_t *a) /* I - Array */ { /* * Range check input... */ if (!a) return (NULL); /* * Return the next element... */ if (a->current < a->num_elements) a->current ++; return (cupsArrayCurrent(a)); } /* * 'cupsArrayPrev()' - Get the previous element in the array. * * This function is equivalent to "cupsArrayIndex(a, cupsArrayGetIndex(a) - 1)". * * The previous element is undefined until you call @link cupsArrayFind@, * @link cupsArrayFirst@, or @link cupsArrayIndex@, or @link cupsArrayLast@ * to set the current element. * * @since CUPS 1.2/macOS 10.5@ */ void * /* O - Previous element or @code NULL@ */ cupsArrayPrev(cups_array_t *a) /* I - Array */ { /* * Range check input... */ if (!a) return (NULL); /* * Return the previous element... */ if (a->current >= 0) a->current --; return (cupsArrayCurrent(a)); } /* * 'cupsArrayRemove()' - Remove an element from the array. * * If more than one element matches "e", only the first matching element is * removed. * * The caller is responsible for freeing the memory used by the * removed element. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 1 on success, 0 on failure */ cupsArrayRemove(cups_array_t *a, /* I - Array */ void *e) /* I - Element */ { ssize_t i, /* Looping var */ current; /* Current element */ int diff; /* Difference */ /* * Range check input... */ if (!a || !e) return (0); /* * See if the element is in the array... */ if (!a->num_elements) return (0); current = cups_array_find(a, e, a->current, &diff); if (diff) return (0); /* * Yes, now remove it... */ a->num_elements --; if (a->freefunc) (a->freefunc)(a->elements[current], a->data); if (current < a->num_elements) memmove(a->elements + current, a->elements + current + 1, (size_t)(a->num_elements - current) * sizeof(void *)); if (current <= a->current) a->current --; if (current < a->insert) a->insert --; else if (current == a->insert) a->insert = -1; for (i = 0; i < a->num_saved; i ++) if (current <= a->saved[i]) a->saved[i] --; if (a->num_elements <= 1) a->unique = 1; return (1); } /* * 'cupsArrayRestore()' - Reset the current element to the last @link cupsArraySave@. * * @since CUPS 1.2/macOS 10.5@ */ void * /* O - New current element */ cupsArrayRestore(cups_array_t *a) /* I - Array */ { if (!a) return (NULL); if (a->num_saved <= 0) return (NULL); a->num_saved --; a->current = a->saved[a->num_saved]; if (a->current >= 0 && a->current < a->num_elements) return (a->elements[a->current]); else return (NULL); } /* * 'cupsArraySave()' - Mark the current element for a later @link cupsArrayRestore@. * * The current element is undefined until you call @link cupsArrayFind@, * @link cupsArrayFirst@, or @link cupsArrayIndex@, or @link cupsArrayLast@ * to set the current element. * * The save/restore stack is guaranteed to be at least 32 elements deep. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 1 on success, 0 on failure */ cupsArraySave(cups_array_t *a) /* I - Array */ { if (!a) return (0); if (a->num_saved >= _CUPS_MAXSAVE) return (0); a->saved[a->num_saved] = a->current; a->num_saved ++; return (1); } /* * 'cupsArrayUserData()' - Return the user data for an array. * * @since CUPS 1.2/macOS 10.5@ */ void * /* O - User data */ cupsArrayUserData(cups_array_t *a) /* I - Array */ { if (a) return (a->data); else return (NULL); } /* * 'cups_array_add()' - Insert or append an element to the array. * * @since CUPS 1.2/macOS 10.5@ */ static int /* O - 1 on success, 0 on failure */ cups_array_add(cups_array_t *a, /* I - Array */ void *e, /* I - Element to add */ int insert) /* I - 1 = insert, 0 = append */ { int i, /* Looping var */ current; /* Current element */ int diff; /* Comparison with current element */ DEBUG_printf(("7cups_array_add(a=%p, e=%p, insert=%d)", (void *)a, e, insert)); /* * Verify we have room for the new element... */ if (a->num_elements >= a->alloc_elements) { /* * Allocate additional elements; start with 16 elements, then * double the size until 1024 elements, then add 1024 elements * thereafter... */ void **temp; /* New array elements */ int count; /* New allocation count */ if (a->alloc_elements == 0) { count = 16; temp = malloc((size_t)count * sizeof(void *)); } else { if (a->alloc_elements < 1024) count = a->alloc_elements * 2; else count = a->alloc_elements + 1024; temp = realloc(a->elements, (size_t)count * sizeof(void *)); } DEBUG_printf(("9cups_array_add: count=" CUPS_LLFMT, CUPS_LLCAST count)); if (!temp) { DEBUG_puts("9cups_array_add: allocation failed, returning 0"); return (0); } a->alloc_elements = count; a->elements = temp; } /* * Find the insertion point for the new element; if there is no * compare function or elements, just add it to the beginning or end... */ if (!a->num_elements || !a->compare) { /* * No elements or comparison function, insert/append as needed... */ if (insert) current = 0; /* Insert at beginning */ else current = a->num_elements; /* Append to the end */ } else { /* * Do a binary search for the insertion point... */ current = cups_array_find(a, e, a->insert, &diff); if (diff > 0) { /* * Insert after the current element... */ current ++; } else if (!diff) { /* * Compared equal, make sure we add to the begining or end of * the current run of equal elements... */ a->unique = 0; if (insert) { /* * Insert at beginning of run... */ while (current > 0 && !(*(a->compare))(e, a->elements[current - 1], a->data)) current --; } else { /* * Append at end of run... */ do { current ++; } while (current < a->num_elements && !(*(a->compare))(e, a->elements[current], a->data)); } } } /* * Insert or append the element... */ if (current < a->num_elements) { /* * Shift other elements to the right... */ memmove(a->elements + current + 1, a->elements + current, (size_t)(a->num_elements - current) * sizeof(void *)); if (a->current >= current) a->current ++; for (i = 0; i < a->num_saved; i ++) if (a->saved[i] >= current) a->saved[i] ++; DEBUG_printf(("9cups_array_add: insert element at index " CUPS_LLFMT, CUPS_LLCAST current)); } #ifdef DEBUG else DEBUG_printf(("9cups_array_add: append element at " CUPS_LLFMT, CUPS_LLCAST current)); #endif /* DEBUG */ if (a->copyfunc) { if ((a->elements[current] = (a->copyfunc)(e, a->data)) == NULL) { DEBUG_puts("8cups_array_add: Copy function returned NULL, returning 0"); return (0); } } else a->elements[current] = e; a->num_elements ++; a->insert = current; #ifdef DEBUG for (current = 0; current < a->num_elements; current ++) DEBUG_printf(("9cups_array_add: a->elements[" CUPS_LLFMT "]=%p", CUPS_LLCAST current, a->elements[current])); #endif /* DEBUG */ DEBUG_puts("9cups_array_add: returning 1"); return (1); } /* * 'cups_array_find()' - Find an element in the array. */ static int /* O - Index of match */ cups_array_find(cups_array_t *a, /* I - Array */ void *e, /* I - Element */ int prev, /* I - Previous index */ int *rdiff) /* O - Difference of match */ { int left, /* Left side of search */ right, /* Right side of search */ current, /* Current element */ diff; /* Comparison with current element */ DEBUG_printf(("7cups_array_find(a=%p, e=%p, prev=%d, rdiff=%p)", (void *)a, e, prev, (void *)rdiff)); if (a->compare) { /* * Do a binary search for the element... */ DEBUG_puts("9cups_array_find: binary search"); if (prev >= 0 && prev < a->num_elements) { /* * Start search on either side of previous... */ if ((diff = (*(a->compare))(e, a->elements[prev], a->data)) == 0 || (diff < 0 && prev == 0) || (diff > 0 && prev == (a->num_elements - 1))) { /* * Exact or edge match, return it! */ DEBUG_printf(("9cups_array_find: Returning %d, diff=%d", prev, diff)); *rdiff = diff; return (prev); } else if (diff < 0) { /* * Start with previous on right side... */ left = 0; right = prev; } else { /* * Start wih previous on left side... */ left = prev; right = a->num_elements - 1; } } else { /* * Start search in the middle... */ left = 0; right = a->num_elements - 1; } do { current = (left + right) / 2; diff = (*(a->compare))(e, a->elements[current], a->data); DEBUG_printf(("9cups_array_find: left=%d, right=%d, current=%d, diff=%d", left, right, current, diff)); if (diff == 0) break; else if (diff < 0) right = current; else left = current; } while ((right - left) > 1); if (diff != 0) { /* * Check the last 1 or 2 elements... */ if ((diff = (*(a->compare))(e, a->elements[left], a->data)) <= 0) current = left; else { diff = (*(a->compare))(e, a->elements[right], a->data); current = right; } } } else { /* * Do a linear pointer search... */ DEBUG_puts("9cups_array_find: linear search"); diff = 1; for (current = 0; current < a->num_elements; current ++) if (a->elements[current] == e) { diff = 0; break; } } /* * Return the closest element and the difference... */ DEBUG_printf(("8cups_array_find: Returning %d, diff=%d", current, diff)); *rdiff = diff; return (current); } cups-2.2.7/cups/array.h000664 000765 000024 00000005734 13255074424 015425 0ustar00msweetstaff000000 000000 /* * Sorted array definitions for CUPS. * * Copyright 2007-2010 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_ARRAY_H_ # define _CUPS_ARRAY_H_ /* * Include necessary headers... */ # include "versioning.h" # include /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Types and structures... */ typedef struct _cups_array_s cups_array_t; /**** CUPS array type ****/ typedef int (*cups_array_func_t)(void *first, void *second, void *data); /**** Array comparison function ****/ typedef int (*cups_ahash_func_t)(void *element, void *data); /**** Array hash function ****/ typedef void *(*cups_acopy_func_t)(void *element, void *data); /**** Array element copy function ****/ typedef void (*cups_afree_func_t)(void *element, void *data); /**** Array element free function ****/ /* * Functions... */ extern int cupsArrayAdd(cups_array_t *a, void *e) _CUPS_API_1_2; extern void cupsArrayClear(cups_array_t *a) _CUPS_API_1_2; extern int cupsArrayCount(cups_array_t *a) _CUPS_API_1_2; extern void *cupsArrayCurrent(cups_array_t *a) _CUPS_API_1_2; extern void cupsArrayDelete(cups_array_t *a) _CUPS_API_1_2; extern cups_array_t *cupsArrayDup(cups_array_t *a) _CUPS_API_1_2; extern void *cupsArrayFind(cups_array_t *a, void *e) _CUPS_API_1_2; extern void *cupsArrayFirst(cups_array_t *a) _CUPS_API_1_2; extern int cupsArrayGetIndex(cups_array_t *a) _CUPS_API_1_3; extern int cupsArrayGetInsert(cups_array_t *a) _CUPS_API_1_3; extern void *cupsArrayIndex(cups_array_t *a, int n) _CUPS_API_1_2; extern int cupsArrayInsert(cups_array_t *a, void *e) _CUPS_API_1_2; extern void *cupsArrayLast(cups_array_t *a) _CUPS_API_1_2; extern cups_array_t *cupsArrayNew(cups_array_func_t f, void *d) _CUPS_API_1_2; extern cups_array_t *cupsArrayNew2(cups_array_func_t f, void *d, cups_ahash_func_t h, int hsize) _CUPS_API_1_3; extern cups_array_t *cupsArrayNew3(cups_array_func_t f, void *d, cups_ahash_func_t h, int hsize, cups_acopy_func_t cf, cups_afree_func_t ff) _CUPS_API_1_5; extern void *cupsArrayNext(cups_array_t *a) _CUPS_API_1_2; extern void *cupsArrayPrev(cups_array_t *a) _CUPS_API_1_2; extern int cupsArrayRemove(cups_array_t *a, void *e) _CUPS_API_1_2; extern void *cupsArrayRestore(cups_array_t *a) _CUPS_API_1_2; extern int cupsArraySave(cups_array_t *a) _CUPS_API_1_2; extern void *cupsArrayUserData(cups_array_t *a) _CUPS_API_1_2; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_ARRAY_H_ */ cups-2.2.7/cups/auth.c000664 000765 000024 00000103664 13255074424 015244 0ustar00msweetstaff000000 000000 /* * Authentication functions for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * This file contains Kerberos support code, copyright 2006 by * Jelmer Vernooij. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include #include #if defined(WIN32) || defined(__EMX__) # include #else # include #endif /* WIN32 || __EMX__ */ #if HAVE_AUTHORIZATION_H # include # ifdef HAVE_SECBASEPRIV_H # include # else extern const char *cssmErrorString(int error); # endif /* HAVE_SECBASEPRIV_H */ #endif /* HAVE_AUTHORIZATION_H */ #if defined(SO_PEERCRED) && defined(AF_LOCAL) # include #endif /* SO_PEERCRED && AF_LOCAL */ /* * Local functions... */ static const char *cups_auth_find(const char *www_authenticate, const char *scheme); static const char *cups_auth_param(const char *scheme, const char *name, char *value, size_t valsize); static const char *cups_auth_scheme(const char *www_authenticate, char *scheme, size_t schemesize); #ifdef HAVE_GSSAPI # ifdef HAVE_GSS_ACQUIRE_CRED_EX_F # ifdef HAVE_GSS_GSSAPI_SPI_H # include # else # define GSS_AUTH_IDENTITY_TYPE_1 1 # define gss_acquire_cred_ex_f __ApplePrivate_gss_acquire_cred_ex_f typedef struct gss_auth_identity /* @private@ */ { uint32_t type; uint32_t flags; char *username; char *realm; char *password; gss_buffer_t *credentialsRef; } gss_auth_identity_desc; extern OM_uint32 gss_acquire_cred_ex_f(gss_status_id_t, const gss_name_t, OM_uint32, OM_uint32, const gss_OID, gss_cred_usage_t, gss_auth_identity_t, void *, void (*)(void *, OM_uint32, gss_status_id_t, gss_cred_id_t, gss_OID_set, OM_uint32)); # endif /* HAVE_GSS_GSSAPI_SPI_H */ # include typedef struct _cups_gss_acquire_s /* Acquire callback data */ { dispatch_semaphore_t sem; /* Synchronization semaphore */ OM_uint32 major; /* Returned status code */ gss_cred_id_t creds; /* Returned credentials */ } _cups_gss_acquire_t; static void cups_gss_acquire(void *ctx, OM_uint32 major, gss_status_id_t status, gss_cred_id_t creds, gss_OID_set oids, OM_uint32 time_rec); # endif /* HAVE_GSS_ACQUIRE_CRED_EX_F */ static gss_name_t cups_gss_getname(http_t *http, const char *service_name); # ifdef DEBUG static void cups_gss_printf(OM_uint32 major_status, OM_uint32 minor_status, const char *message); # else # define cups_gss_printf(major, minor, message) # endif /* DEBUG */ #endif /* HAVE_GSSAPI */ static int cups_local_auth(http_t *http); /* * 'cupsDoAuthentication()' - Authenticate a request. * * This function should be called in response to a @code HTTP_STATUS_UNAUTHORIZED@ * status, prior to resubmitting your request. * * @since CUPS 1.1.20/macOS 10.4@ */ int /* O - 0 on success, -1 on error */ cupsDoAuthentication( http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *method, /* I - Request method ("GET", "POST", "PUT") */ const char *resource) /* I - Resource path */ { const char *password, /* Password string */ *www_auth, /* WWW-Authenticate header */ *schemedata; /* Scheme-specific data */ char scheme[256], /* Scheme name */ prompt[1024], /* Prompt for user */ realm[HTTP_MAX_VALUE], /* realm="xyz" string */ nonce[HTTP_MAX_VALUE]; /* nonce="xyz" string */ int localauth; /* Local authentication result */ _cups_globals_t *cg; /* Global data */ DEBUG_printf(("cupsDoAuthentication(http=%p, method=\"%s\", resource=\"%s\")", (void *)http, method, resource)); if (!http) http = _cupsConnect(); if (!http || !method || !resource) return (-1); DEBUG_printf(("2cupsDoAuthentication: digest_tries=%d, userpass=\"%s\"", http->digest_tries, http->userpass)); DEBUG_printf(("2cupsDoAuthentication: WWW-Authenticate=\"%s\"", httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE))); /* * Clear the current authentication string... */ httpSetAuthString(http, NULL, NULL); /* * See if we can do local authentication... */ if (http->digest_tries < 3) { if ((localauth = cups_local_auth(http)) == 0) { DEBUG_printf(("2cupsDoAuthentication: authstring=\"%s\"", http->authstring)); if (http->status == HTTP_STATUS_UNAUTHORIZED) http->digest_tries ++; return (0); } else if (localauth == -1) { http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED; return (-1); /* Error or canceled */ } } /* * Nope, loop through the authentication schemes to find the first we support. */ www_auth = httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE); for (schemedata = cups_auth_scheme(www_auth, scheme, sizeof(scheme)); schemedata; schemedata = cups_auth_scheme(schemedata + strlen(scheme), scheme, sizeof(scheme))) { /* * Check the scheme name... */ #ifdef HAVE_GSSAPI if (!_cups_strcasecmp(scheme, "Negotiate")) { /* * Kerberos authentication... */ if (_cupsSetNegotiateAuthString(http, method, resource)) { http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED; return (-1); } break; } else #endif /* HAVE_GSSAPI */ if (_cups_strcasecmp(scheme, "Basic") && _cups_strcasecmp(scheme, "Digest")) continue; /* Not supported (yet) */ /* * See if we should retry the current username:password... */ if ((http->digest_tries > 1 || !http->userpass[0]) && (!_cups_strcasecmp(scheme, "Basic") || (!_cups_strcasecmp(scheme, "Digest")))) { /* * Nope - get a new password from the user... */ char default_username[HTTP_MAX_VALUE]; /* Default username */ cg = _cupsGlobals(); if (!cg->lang_default) cg->lang_default = cupsLangDefault(); if (cups_auth_param(scheme, "username", default_username, sizeof(default_username))) cupsSetUser(default_username); snprintf(prompt, sizeof(prompt), _cupsLangString(cg->lang_default, _("Password for %s on %s? ")), cupsUser(), http->hostname[0] == '/' ? "localhost" : http->hostname); http->digest_tries = _cups_strncasecmp(scheme, "Digest", 6) != 0; http->userpass[0] = '\0'; if ((password = cupsGetPassword2(prompt, http, method, resource)) == NULL) { http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED; return (-1); } snprintf(http->userpass, sizeof(http->userpass), "%s:%s", cupsUser(), password); } else if (http->status == HTTP_STATUS_UNAUTHORIZED) http->digest_tries ++; if (http->status == HTTP_STATUS_UNAUTHORIZED && http->digest_tries >= 3) { DEBUG_printf(("1cupsDoAuthentication: Too many authentication tries (%d)", http->digest_tries)); http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED; return (-1); } /* * Got a password; encode it for the server... */ if (!_cups_strcasecmp(scheme, "Basic")) { /* * Basic authentication... */ char encode[256]; /* Base64 buffer */ httpEncode64_2(encode, sizeof(encode), http->userpass, (int)strlen(http->userpass)); httpSetAuthString(http, "Basic", encode); } else if (!_cups_strcasecmp(scheme, "Digest")) { /* * Digest authentication... */ int i; /* Looping var */ char algorithm[65], /* Hashing algorithm */ opaque[HTTP_MAX_VALUE], /* Opaque data from server */ cnonce[65], /* cnonce value */ kd[65], /* Final MD5/SHA-256 digest */ ha1[65], /* Hash of username:realm:password */ ha2[65], /* Hash of method:request-uri */ hdata[65], /* Hash of auth data */ temp[1024], /* Temporary string */ digest[1024]; /* Digest auth data */ unsigned char hash[32]; /* Hash buffer */ const char *hashalg; /* Hashing algorithm */ size_t hashsize; /* Size of hash */ if (strcmp(nonce, http->nonce)) { strlcpy(http->nonce, nonce, sizeof(http->nonce)); http->nonce_count = 1; } else http->nonce_count ++; cups_auth_param(schemedata, "opaque", opaque, sizeof(opaque)); cups_auth_param(schemedata, "nonce", nonce, sizeof(nonce)); cups_auth_param(schemedata, "realm", realm, sizeof(realm)); for (i = 0; i < 64; i ++) cnonce[i] = "0123456789ABCDEF"[CUPS_RAND() & 15]; cnonce[64] = '\0'; if (cups_auth_param(schemedata, "algorithm", algorithm, sizeof(algorithm))) { /* * Follow RFC 2617/7616... */ if (!_cups_strcasecmp(algorithm, "MD5")) { /* * RFC 2617 Digest with MD5 */ hashalg = "md5"; } else if (!_cups_strcasecmp(algorithm, "SHA-256")) { /* * RFC 7616 Digest with SHA-256 */ hashalg = "sha2-256"; } else { /* * Some other algorithm we don't support, skip this one... */ continue; } /* * Calculate digest value... */ /* H(A1) = H(username:realm:password) */ snprintf(temp, sizeof(temp), "%s:%s:%s", cupsUser(), realm, strchr(http->userpass, ':') + 1); hashsize = (size_t)cupsHashData(hashalg, (unsigned char *)temp, strlen(temp), hash, sizeof(hash)); cupsHashString(hash, hashsize, ha1, sizeof(ha1)); /* H(A2) = H(method:uri) */ snprintf(temp, sizeof(temp), "%s:%s", method, resource); hashsize = (size_t)cupsHashData(hashalg, (unsigned char *)temp, strlen(temp), hash, sizeof(hash)); cupsHashString(hash, hashsize, ha2, sizeof(ha2)); /* H(data) = H(nonce:nc:cnonce:qop:H(A2)) */ snprintf(temp, sizeof(temp), "%s:%08x:%s:auth:%s", nonce, http->nonce_count, cnonce, ha2); hashsize = (size_t)cupsHashData(hashalg, (unsigned char *)temp, strlen(temp), hash, sizeof(hash)); cupsHashString(hash, hashsize, hdata, sizeof(hdata)); /* KD = H(H(A1):H(data)) */ snprintf(temp, sizeof(temp), "%s:%s", ha1, hdata); hashsize = (size_t)cupsHashData(hashalg, (unsigned char *)temp, strlen(temp), hash, sizeof(hash)); cupsHashString(hash, hashsize, kd, sizeof(kd)); /* Pass the RFC 2617/7616 WWW-Authenticate header */ if (opaque[0]) snprintf(digest, sizeof(digest), "username=\"%s\", realm=\"%s\", nonce=\"%s\", algorithm=%s, qop=auth, opaque=\"%s\", cnonce=\"%s\", nc=%08x, uri=\"%s\", response=\"%s\"", cupsUser(), realm, nonce, algorithm, opaque, cnonce, http->nonce_count, resource, kd); else snprintf(digest, sizeof(digest), "username=\"%s\", realm=\"%s\", nonce=\"%s\", algorithm=%s, qop=auth, cnonce=\"%s\", nc=%08x, uri=\"%s\", response=\"%s\"", cupsUser(), realm, nonce, algorithm, cnonce, http->nonce_count, resource, kd); } else { /* * Use old RFC 2069 Digest method... */ /* H(A1) = H(username:realm:password) */ snprintf(temp, sizeof(temp), "%s:%s:%s", cupsUser(), realm, strchr(http->userpass, ':') + 1); hashsize = (size_t)cupsHashData("md5", (unsigned char *)temp, strlen(temp), hash, sizeof(hash)); cupsHashString(hash, hashsize, ha1, sizeof(ha1)); /* H(A2) = H(method:uri) */ snprintf(temp, sizeof(temp), "%s:%s", method, resource); hashsize = (size_t)cupsHashData("md5", (unsigned char *)temp, strlen(temp), hash, sizeof(hash)); cupsHashString(hash, hashsize, ha2, sizeof(ha2)); /* KD = H(H(A1):nonce:H(A2)) */ snprintf(temp, sizeof(temp), "%s:%s:%s", ha1, nonce, ha2); hashsize = (size_t)cupsHashData("md5", (unsigned char *)temp, strlen(temp), hash, sizeof(hash)); cupsHashString(hash, hashsize, kd, sizeof(kd)); /* Pass the RFC 2069 WWW-Authenticate header */ snprintf(digest, sizeof(digest), "username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", response=\"%s\"", cupsUser(), realm, nonce, resource, kd); } httpSetAuthString(http, "Digest", digest); } } if (http->authstring) { DEBUG_printf(("1cupsDoAuthentication: authstring=\"%s\"", http->authstring)); return (0); } else { DEBUG_printf(("1cupsDoAuthentication: Unknown auth type: \"%s\"", www_auth)); http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED; return (-1); } } #ifdef HAVE_GSSAPI /* * '_cupsSetNegotiateAuthString()' - Set the Kerberos authentication string. */ int /* O - 0 on success, -1 on error */ _cupsSetNegotiateAuthString( http_t *http, /* I - Connection to server */ const char *method, /* I - Request method ("GET", "POST", "PUT") */ const char *resource) /* I - Resource path */ { OM_uint32 minor_status, /* Minor status code */ major_status; /* Major status code */ gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER; /* Output token */ (void)method; (void)resource; # ifdef __APPLE__ /* * If the weak-linked GSSAPI/Kerberos library is not present, don't try * to use it... */ if (&gss_init_sec_context == NULL) { DEBUG_puts("1_cupsSetNegotiateAuthString: Weak-linked GSSAPI/Kerberos " "framework is not present"); return (-1); } # endif /* __APPLE__ */ if (http->gssname == GSS_C_NO_NAME) { http->gssname = cups_gss_getname(http, _cupsGSSServiceName()); } if (http->gssctx != GSS_C_NO_CONTEXT) { gss_delete_sec_context(&minor_status, &http->gssctx, GSS_C_NO_BUFFER); http->gssctx = GSS_C_NO_CONTEXT; } major_status = gss_init_sec_context(&minor_status, GSS_C_NO_CREDENTIAL, &http->gssctx, http->gssname, http->gssmech, GSS_C_MUTUAL_FLAG | GSS_C_INTEG_FLAG, GSS_C_INDEFINITE, GSS_C_NO_CHANNEL_BINDINGS, GSS_C_NO_BUFFER, &http->gssmech, &output_token, NULL, NULL); # ifdef HAVE_GSS_ACQUIRE_CRED_EX_F if (major_status == GSS_S_NO_CRED) { /* * Ask the user for credentials... */ char prompt[1024], /* Prompt for user */ userbuf[256]; /* Kerberos username */ const char *username, /* Username string */ *password; /* Password string */ _cups_gss_acquire_t data; /* Callback data */ gss_auth_identity_desc identity; /* Kerberos user identity */ _cups_globals_t *cg = _cupsGlobals(); /* Per-thread global data */ if (!cg->lang_default) cg->lang_default = cupsLangDefault(); snprintf(prompt, sizeof(prompt), _cupsLangString(cg->lang_default, _("Password for %s on %s? ")), cupsUser(), http->gsshost); if ((password = cupsGetPassword2(prompt, http, method, resource)) == NULL) return (-1); /* * Try to acquire credentials... */ username = cupsUser(); if (!strchr(username, '@')) { snprintf(userbuf, sizeof(userbuf), "%s@%s", username, http->gsshost); username = userbuf; } identity.type = GSS_AUTH_IDENTITY_TYPE_1; identity.flags = 0; identity.username = (char *)username; identity.realm = (char *)""; identity.password = (char *)password; identity.credentialsRef = NULL; data.sem = dispatch_semaphore_create(0); data.major = 0; data.creds = NULL; if (data.sem) { major_status = gss_acquire_cred_ex_f(NULL, GSS_C_NO_NAME, 0, GSS_C_INDEFINITE, GSS_KRB5_MECHANISM, GSS_C_INITIATE, (gss_auth_identity_t)&identity, &data, cups_gss_acquire); if (major_status == GSS_S_COMPLETE) { dispatch_semaphore_wait(data.sem, DISPATCH_TIME_FOREVER); major_status = data.major; } dispatch_release(data.sem); if (major_status == GSS_S_COMPLETE) { OM_uint32 release_minor; /* Minor status from releasing creds */ major_status = gss_init_sec_context(&minor_status, data.creds, &http->gssctx, http->gssname, http->gssmech, GSS_C_MUTUAL_FLAG | GSS_C_INTEG_FLAG, GSS_C_INDEFINITE, GSS_C_NO_CHANNEL_BINDINGS, GSS_C_NO_BUFFER, &http->gssmech, &output_token, NULL, NULL); gss_release_cred(&release_minor, &data.creds); } } } # endif /* HAVE_GSS_ACQUIRED_CRED_EX_F */ if (GSS_ERROR(major_status)) { cups_gss_printf(major_status, minor_status, "_cupsSetNegotiateAuthString: Unable to initialize " "security context"); return (-1); } # ifdef DEBUG else if (major_status == GSS_S_CONTINUE_NEEDED) cups_gss_printf(major_status, minor_status, "_cupsSetNegotiateAuthString: Continuation needed!"); # endif /* DEBUG */ if (output_token.length > 0 && output_token.length <= 65536) { /* * Allocate the authorization string since Windows KDCs can have * arbitrarily large credentials... */ int authsize = 10 + /* "Negotiate " */ (int)output_token.length * 4 / 3 + 1 + 1; /* Base64 + nul */ httpSetAuthString(http, NULL, NULL); if ((http->authstring = malloc((size_t)authsize)) == NULL) { http->authstring = http->_authstring; authsize = sizeof(http->_authstring); } strlcpy(http->authstring, "Negotiate ", (size_t)authsize); httpEncode64_2(http->authstring + 10, authsize - 10, output_token.value, (int)output_token.length); gss_release_buffer(&minor_status, &output_token); } else { DEBUG_printf(("1_cupsSetNegotiateAuthString: Kerberos credentials too " "large - %d bytes!", (int)output_token.length)); gss_release_buffer(&minor_status, &output_token); return (-1); } return (0); } #endif /* HAVE_GSSAPI */ /* * 'cups_auth_find()' - Find the named WWW-Authenticate scheme. * * The "www_authenticate" parameter points to the current position in the header. * * Returns @code NULL@ if the auth scheme is not present. */ static const char * /* O - Start of matching scheme or @code NULL@ if not found */ cups_auth_find(const char *www_authenticate, /* I - Pointer into WWW-Authenticate header */ const char *scheme) /* I - Authentication scheme */ { size_t schemelen = strlen(scheme); /* Length of scheme */ DEBUG_printf(("8cups_auth_find(www_authenticate=\"%s\", scheme=\"%s\"(%d))", www_authenticate, scheme, (int)schemelen)); while (*www_authenticate) { /* * Skip leading whitespace and commas... */ DEBUG_printf(("9cups_auth_find: Before whitespace: \"%s\"", www_authenticate)); while (isspace(*www_authenticate & 255) || *www_authenticate == ',') www_authenticate ++; DEBUG_printf(("9cups_auth_find: After whitespace: \"%s\"", www_authenticate)); /* * See if this is "Scheme" followed by whitespace or the end of the string. */ if (!strncmp(www_authenticate, scheme, schemelen) && (isspace(www_authenticate[schemelen] & 255) || !www_authenticate[schemelen])) { /* * Yes, this is the start of the scheme-specific information... */ DEBUG_printf(("9cups_auth_find: Returning \"%s\".", www_authenticate)); return (www_authenticate); } /* * Skip the scheme name or param="value" string... */ while (!isspace(*www_authenticate & 255) && *www_authenticate) { if (*www_authenticate == '\"') { /* * Skip quoted value... */ www_authenticate ++; while (*www_authenticate && *www_authenticate != '\"') www_authenticate ++; DEBUG_printf(("9cups_auth_find: After quoted: \"%s\"", www_authenticate)); } www_authenticate ++; } DEBUG_printf(("9cups_auth_find: After skip: \"%s\"", www_authenticate)); } DEBUG_puts("9cups_auth_find: Returning NULL."); return (NULL); } /* * 'cups_auth_param()' - Copy the value for the named authentication parameter, * if present. */ static const char * /* O - Parameter value or @code NULL@ if not present */ cups_auth_param(const char *scheme, /* I - Pointer to auth data */ const char *name, /* I - Name of parameter */ char *value, /* I - Value buffer */ size_t valsize) /* I - Size of value buffer */ { char *valptr = value, /* Pointer into value buffer */ *valend = value + valsize - 1; /* Pointer to end of buffer */ size_t namelen = strlen(name); /* Name length */ int param; /* Is this a parameter? */ DEBUG_printf(("8cups_auth_param(scheme=\"%s\", name=\"%s\", value=%p, valsize=%d)", scheme, name, (void *)value, (int)valsize)); while (!isspace(*scheme & 255) && *scheme) scheme ++; while (*scheme) { while (isspace(*scheme & 255) || *scheme == ',') scheme ++; if (!strncmp(scheme, name, namelen) && scheme[namelen] == '=') { /* * Found the parameter, copy the value... */ scheme += namelen + 1; if (*scheme == '\"') { scheme ++; while (*scheme && *scheme != '\"') { if (valptr < valend) *valptr++ = *scheme; scheme ++; } } else { while (*scheme && strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~+/=", *scheme)) { if (valptr < valend) *valptr++ = *scheme; scheme ++; } } *valptr = '\0'; DEBUG_printf(("9cups_auth_param: Returning \"%s\".", value)); return (value); } /* * Skip the param=value string... */ param = 0; while (!isspace(*scheme & 255) && *scheme) { if (*scheme == '=') param = 1; else if (*scheme == '\"') { /* * Skip quoted value... */ scheme ++; while (*scheme && *scheme != '\"') scheme ++; } scheme ++; } /* * If this wasn't a parameter, we are at the end of this scheme's * parameters... */ if (!param) break; } *value = '\0'; DEBUG_puts("9cups_auth_param: Returning NULL."); return (NULL); } /* * 'cups_auth_scheme()' - Get the (next) WWW-Authenticate scheme. * * The "www_authenticate" parameter points to the current position in the header. * * Returns @code NULL@ if there are no (more) auth schemes present. */ static const char * /* O - Start of scheme or @code NULL@ if not found */ cups_auth_scheme(const char *www_authenticate, /* I - Pointer into WWW-Authenticate header */ char *scheme, /* I - Scheme name buffer */ size_t schemesize) /* I - Size of buffer */ { const char *start; /* Start of scheme data */ char *sptr = scheme, /* Pointer into scheme buffer */ *send = scheme + schemesize - 1;/* End of scheme buffer */ int param; /* Is this a parameter? */ DEBUG_printf(("8cups_auth_scheme(www_authenticate=\"%s\", scheme=%p, schemesize=%d)", www_authenticate, (void *)scheme, (int)schemesize)); while (*www_authenticate) { /* * Skip leading whitespace and commas... */ while (isspace(*www_authenticate & 255) || *www_authenticate == ',') www_authenticate ++; /* * Parse the scheme name or param="value" string... */ for (sptr = scheme, start = www_authenticate, param = 0; *www_authenticate && !isspace(*www_authenticate & 255); www_authenticate ++) { if (*www_authenticate == '=') param = 1; else if (!param && sptr < send) *sptr++ = *www_authenticate; else if (*www_authenticate == '\"') { /* * Skip quoted value... */ www_authenticate ++; while (*www_authenticate && *www_authenticate != '\"') www_authenticate ++; } } if (sptr > scheme && !param) { *sptr = '\0'; DEBUG_printf(("9cups_auth_scheme: Returning \"%s\".", start)); return (start); } } *scheme = '\0'; DEBUG_puts("9cups_auth_scheme: Returning NULL."); return (NULL); } #ifdef HAVE_GSSAPI # ifdef HAVE_GSS_ACQUIRE_CRED_EX_F /* * 'cups_gss_acquire()' - Kerberos credentials callback. */ static void cups_gss_acquire( void *ctx, /* I - Caller context */ OM_uint32 major, /* I - Major error code */ gss_status_id_t status, /* I - Status (unused) */ gss_cred_id_t creds, /* I - Credentials (if any) */ gss_OID_set oids, /* I - Mechanism OIDs (unused) */ OM_uint32 time_rec) /* I - Timestamp (unused) */ { uint32_t min; /* Minor error code */ _cups_gss_acquire_t *data; /* Callback data */ (void)status; (void)time_rec; data = (_cups_gss_acquire_t *)ctx; data->major = major; data->creds = creds; gss_release_oid_set(&min, &oids); dispatch_semaphore_signal(data->sem); } # endif /* HAVE_GSS_ACQUIRE_CRED_EX_F */ /* * 'cups_gss_getname()' - Get CUPS service credentials for authentication. */ static gss_name_t /* O - Server name */ cups_gss_getname( http_t *http, /* I - Connection to server */ const char *service_name) /* I - Service name */ { gss_buffer_desc token = GSS_C_EMPTY_BUFFER; /* Service token */ OM_uint32 major_status, /* Major status code */ minor_status; /* Minor status code */ gss_name_t server_name; /* Server name */ char buf[1024]; /* Name buffer */ DEBUG_printf(("7cups_gss_getname(http=%p, service_name=\"%s\")", http, service_name)); /* * Get the hostname... */ if (!http->gsshost[0]) { httpGetHostname(http, http->gsshost, sizeof(http->gsshost)); if (!strcmp(http->gsshost, "localhost")) { if (gethostname(http->gsshost, sizeof(http->gsshost)) < 0) { DEBUG_printf(("1cups_gss_getname: gethostname() failed: %s", strerror(errno))); http->gsshost[0] = '\0'; return (NULL); } if (!strchr(http->gsshost, '.')) { /* * The hostname is not a FQDN, so look it up... */ struct hostent *host; /* Host entry to get FQDN */ if ((host = gethostbyname(http->gsshost)) != NULL && host->h_name) { /* * Use the resolved hostname... */ strlcpy(http->gsshost, host->h_name, sizeof(http->gsshost)); } else { DEBUG_printf(("1cups_gss_getname: gethostbyname(\"%s\") failed.", http->gsshost)); http->gsshost[0] = '\0'; return (NULL); } } } } /* * Get a service name we can use for authentication purposes... */ snprintf(buf, sizeof(buf), "%s@%s", service_name, http->gsshost); DEBUG_printf(("8cups_gss_getname: Looking up \"%s\".", buf)); token.value = buf; token.length = strlen(buf); server_name = GSS_C_NO_NAME; major_status = gss_import_name(&minor_status, &token, GSS_C_NT_HOSTBASED_SERVICE, &server_name); if (GSS_ERROR(major_status)) { cups_gss_printf(major_status, minor_status, "cups_gss_getname: gss_import_name() failed"); return (NULL); } return (server_name); } # ifdef DEBUG /* * 'cups_gss_printf()' - Show debug error messages from GSSAPI. */ static void cups_gss_printf(OM_uint32 major_status,/* I - Major status code */ OM_uint32 minor_status,/* I - Minor status code */ const char *message) /* I - Prefix for error message */ { OM_uint32 err_major_status, /* Major status code for display */ err_minor_status; /* Minor status code for display */ OM_uint32 msg_ctx; /* Message context */ gss_buffer_desc major_status_string = GSS_C_EMPTY_BUFFER, /* Major status message */ minor_status_string = GSS_C_EMPTY_BUFFER; /* Minor status message */ msg_ctx = 0; err_major_status = gss_display_status(&err_minor_status, major_status, GSS_C_GSS_CODE, GSS_C_NO_OID, &msg_ctx, &major_status_string); if (!GSS_ERROR(err_major_status)) gss_display_status(&err_minor_status, minor_status, GSS_C_MECH_CODE, GSS_C_NULL_OID, &msg_ctx, &minor_status_string); DEBUG_printf(("1%s: %s, %s", message, (char *)major_status_string.value, (char *)minor_status_string.value)); gss_release_buffer(&err_minor_status, &major_status_string); gss_release_buffer(&err_minor_status, &minor_status_string); } # endif /* DEBUG */ #endif /* HAVE_GSSAPI */ /* * 'cups_local_auth()' - Get the local authorization certificate if * available/applicable. */ static int /* O - 0 if available */ /* 1 if not available */ /* -1 error */ cups_local_auth(http_t *http) /* I - HTTP connection to server */ { #if defined(WIN32) || defined(__EMX__) /* * Currently WIN32 and OS-2 do not support the CUPS server... */ return (1); #else int pid; /* Current process ID */ FILE *fp; /* Certificate file */ char trc[16], /* Try Root Certificate parameter */ filename[1024]; /* Certificate filename */ const char *www_auth, /* WWW-Authenticate header */ *schemedata; /* Data for the named auth scheme */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ # if defined(HAVE_AUTHORIZATION_H) OSStatus status; /* Status */ AuthorizationItem auth_right; /* Authorization right */ AuthorizationRights auth_rights; /* Authorization rights */ AuthorizationFlags auth_flags; /* Authorization flags */ AuthorizationExternalForm auth_extrn; /* Authorization ref external */ char auth_key[1024]; /* Buffer */ char buffer[1024]; /* Buffer */ # endif /* HAVE_AUTHORIZATION_H */ DEBUG_printf(("7cups_local_auth(http=%p) hostaddr=%s, hostname=\"%s\"", (void *)http, httpAddrString(http->hostaddr, filename, sizeof(filename)), http->hostname)); /* * See if we are accessing localhost... */ if (!httpAddrLocalhost(http->hostaddr) && _cups_strcasecmp(http->hostname, "localhost") != 0) { DEBUG_puts("8cups_local_auth: Not a local connection!"); return (1); } www_auth = httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE); # if defined(HAVE_AUTHORIZATION_H) /* * Delete any previous authorization reference... */ if (http->auth_ref) { AuthorizationFree(http->auth_ref, kAuthorizationFlagDefaults); http->auth_ref = NULL; } if (!getenv("GATEWAY_INTERFACE") && (schemedata = cups_auth_find(www_auth, "AuthRef")) != NULL && cups_auth_param(schemedata, "key", auth_key, sizeof(auth_key))) { status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &http->auth_ref); if (status != errAuthorizationSuccess) { DEBUG_printf(("8cups_local_auth: AuthorizationCreate() returned %d (%s)", (int)status, cssmErrorString(status))); return (-1); } auth_right.name = auth_key; auth_right.valueLength = 0; auth_right.value = NULL; auth_right.flags = 0; auth_rights.count = 1; auth_rights.items = &auth_right; auth_flags = kAuthorizationFlagDefaults | kAuthorizationFlagPreAuthorize | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagExtendRights; status = AuthorizationCopyRights(http->auth_ref, &auth_rights, kAuthorizationEmptyEnvironment, auth_flags, NULL); if (status == errAuthorizationSuccess) status = AuthorizationMakeExternalForm(http->auth_ref, &auth_extrn); if (status == errAuthorizationSuccess) { /* * Set the authorization string and return... */ httpEncode64_2(buffer, sizeof(buffer), (void *)&auth_extrn, sizeof(auth_extrn)); httpSetAuthString(http, "AuthRef", buffer); DEBUG_printf(("8cups_local_auth: Returning authstring=\"%s\"", http->authstring)); return (0); } else if (status == errAuthorizationCanceled) return (-1); DEBUG_printf(("9cups_local_auth: AuthorizationCopyRights() returned %d (%s)", (int)status, cssmErrorString(status))); /* * Fall through to try certificates... */ } # endif /* HAVE_AUTHORIZATION_H */ # ifdef HAVE_GSSAPI if (cups_auth_find(www_auth, "Negotiate")) return (1); # endif /* HAVE_GSSAPI */ # ifdef HAVE_AUTHORIZATION_H if (cups_auth_find(www_auth, "AuthRef")) return (1); # endif /* HAVE_AUTHORIZATION_H */ # if defined(SO_PEERCRED) && defined(AF_LOCAL) /* * See if we can authenticate using the peer credentials provided over a * domain socket; if so, specify "PeerCred username" as the authentication * information... */ if (http->hostaddr->addr.sa_family == AF_LOCAL && !getenv("GATEWAY_INTERFACE") && /* Not via CGI programs... */ cups_auth_find(www_auth, "PeerCred")) { /* * Verify that the current cupsUser() matches the current UID... */ struct passwd *pwd; /* Password information */ const char *username; /* Current username */ username = cupsUser(); if ((pwd = getpwnam(username)) != NULL && pwd->pw_uid == getuid()) { httpSetAuthString(http, "PeerCred", username); DEBUG_printf(("8cups_local_auth: Returning authstring=\"%s\"", http->authstring)); return (0); } } # endif /* SO_PEERCRED && AF_LOCAL */ if ((schemedata = cups_auth_find(www_auth, "Local")) == NULL) return (1); /* * Try opening a certificate file for this PID. If that fails, * try the root certificate... */ pid = getpid(); snprintf(filename, sizeof(filename), "%s/certs/%d", cg->cups_statedir, pid); if ((fp = fopen(filename, "r")) == NULL && pid > 0) { /* * No certificate for this PID; see if we can get the root certificate... */ DEBUG_printf(("9cups_local_auth: Unable to open file %s: %s", filename, strerror(errno))); if (!cups_auth_param(schemedata, "trc", trc, sizeof(trc))) { /* * Scheduler doesn't want us to use the root certificate... */ return (1); } snprintf(filename, sizeof(filename), "%s/certs/0", cg->cups_statedir); fp = fopen(filename, "r"); } if (fp) { /* * Read the certificate from the file... */ char certificate[33], /* Certificate string */ *certptr; /* Pointer to certificate string */ certptr = fgets(certificate, sizeof(certificate), fp); fclose(fp); if (certptr) { /* * Set the authorization string and return... */ httpSetAuthString(http, "Local", certificate); DEBUG_printf(("8cups_local_auth: Returning authstring=\"%s\"", http->authstring)); return (0); } } return (1); #endif /* WIN32 || __EMX__ */ } cups-2.2.7/cups/backchannel.c000664 000765 000024 00000010146 13255074424 016524 0ustar00msweetstaff000000 000000 /* * Backchannel functions for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups.h" #include #ifdef WIN32 # include # include #else # include #endif /* WIN32 */ /* * Local functions... */ static void cups_setup(fd_set *set, struct timeval *tval, double timeout); /* * 'cupsBackChannelRead()' - Read data from the backchannel. * * Reads up to "bytes" bytes from the backchannel/backend. The "timeout" * parameter controls how many seconds to wait for the data - use 0.0 to * return immediately if there is no data, -1.0 to wait for data indefinitely. * * @since CUPS 1.2/macOS 10.5@ */ ssize_t /* O - Bytes read or -1 on error */ cupsBackChannelRead(char *buffer, /* I - Buffer to read into */ size_t bytes, /* I - Bytes to read */ double timeout) /* I - Timeout in seconds, typically 0.0 to poll */ { fd_set input; /* Input set */ struct timeval tval; /* Timeout value */ int status; /* Select status */ /* * Wait for input ready. */ do { cups_setup(&input, &tval, timeout); if (timeout < 0.0) status = select(4, &input, NULL, NULL, NULL); else status = select(4, &input, NULL, NULL, &tval); } while (status < 0 && errno != EINTR && errno != EAGAIN); if (status < 0) return (-1); /* Timeout! */ /* * Read bytes from the pipe... */ #ifdef WIN32 return ((ssize_t)_read(3, buffer, (unsigned)bytes)); #else return (read(3, buffer, bytes)); #endif /* WIN32 */ } /* * 'cupsBackChannelWrite()' - Write data to the backchannel. * * Writes "bytes" bytes to the backchannel/filter. The "timeout" parameter * controls how many seconds to wait for the data to be written - use * 0.0 to return immediately if the data cannot be written, -1.0 to wait * indefinitely. * * @since CUPS 1.2/macOS 10.5@ */ ssize_t /* O - Bytes written or -1 on error */ cupsBackChannelWrite( const char *buffer, /* I - Buffer to write */ size_t bytes, /* I - Bytes to write */ double timeout) /* I - Timeout in seconds, typically 1.0 */ { fd_set output; /* Output set */ struct timeval tval; /* Timeout value */ int status; /* Select status */ ssize_t count; /* Current bytes */ size_t total; /* Total bytes */ /* * Write all bytes... */ total = 0; while (total < bytes) { /* * Wait for write-ready... */ do { cups_setup(&output, &tval, timeout); if (timeout < 0.0) status = select(4, NULL, &output, NULL, NULL); else status = select(4, NULL, &output, NULL, &tval); } while (status < 0 && errno != EINTR && errno != EAGAIN); if (status <= 0) return (-1); /* Timeout! */ /* * Write bytes to the pipe... */ #ifdef WIN32 count = (ssize_t)_write(3, buffer, (unsigned)(bytes - total)); #else count = write(3, buffer, bytes - total); #endif /* WIN32 */ if (count < 0) { /* * Write error - abort on fatal errors... */ if (errno != EINTR && errno != EAGAIN) return (-1); } else { /* * Write succeeded, update buffer pointer and total count... */ buffer += count; total += (size_t)count; } } return ((ssize_t)bytes); } /* * 'cups_setup()' - Setup select() */ static void cups_setup(fd_set *set, /* I - Set for select() */ struct timeval *tval, /* I - Timer value */ double timeout) /* I - Timeout in seconds */ { tval->tv_sec = (int)timeout; tval->tv_usec = (int)(1000000.0 * (timeout - tval->tv_sec)); FD_ZERO(set); FD_SET(3, set); } cups-2.2.7/cups/backend.c000664 000765 000024 00000007206 13255074424 015665 0ustar00msweetstaff000000 000000 /* * Backend functions for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include "backend.h" #include "ppd.h" /* * Local functions... */ static void quote_string(const char *s); /* * 'cupsBackendDeviceURI()' - Get the device URI for a backend. * * The "argv" argument is the argv argument passed to main(). This * function returns the device URI passed in the DEVICE_URI environment * variable or the device URI passed in argv[0], whichever is found * first. * * @since CUPS 1.2/macOS 10.5@ */ const char * /* O - Device URI or @code NULL@ */ cupsBackendDeviceURI(char **argv) /* I - Command-line arguments */ { const char *device_uri, /* Device URI */ *auth_info_required; /* AUTH_INFO_REQUIRED env var */ _cups_globals_t *cg = _cupsGlobals(); /* Global info */ int options; /* Resolve options */ ppd_file_t *ppd; /* PPD file */ ppd_attr_t *ppdattr; /* PPD attribute */ if ((device_uri = getenv("DEVICE_URI")) == NULL) { if (!argv || !argv[0] || !strchr(argv[0], ':')) return (NULL); device_uri = argv[0]; } options = _HTTP_RESOLVE_STDERR; if ((auth_info_required = getenv("AUTH_INFO_REQUIRED")) != NULL && !strcmp(auth_info_required, "negotiate")) options |= _HTTP_RESOLVE_FQDN; if ((ppd = ppdOpenFile(getenv("PPD"))) != NULL) { if ((ppdattr = ppdFindAttr(ppd, "cupsIPPFaxOut", NULL)) != NULL && !_cups_strcasecmp(ppdattr->value, "true")) options |= _HTTP_RESOLVE_FAXOUT; ppdClose(ppd); } return (_httpResolveURI(device_uri, cg->resolved_uri, sizeof(cg->resolved_uri), options, NULL, NULL)); } /* * 'cupsBackendReport()' - Write a device line from a backend. * * This function writes a single device line to stdout for a backend. * It handles quoting of special characters in the device-make-and-model, * device-info, device-id, and device-location strings. * * @since CUPS 1.4/macOS 10.6@ */ void cupsBackendReport( const char *device_scheme, /* I - device-scheme string */ const char *device_uri, /* I - device-uri string */ const char *device_make_and_model, /* I - device-make-and-model string or @code NULL@ */ const char *device_info, /* I - device-info string or @code NULL@ */ const char *device_id, /* I - device-id string or @code NULL@ */ const char *device_location) /* I - device-location string or @code NULL@ */ { if (!device_scheme || !device_uri) return; printf("%s %s", device_scheme, device_uri); if (device_make_and_model && *device_make_and_model) quote_string(device_make_and_model); else quote_string("unknown"); quote_string(device_info); quote_string(device_id); quote_string(device_location); putchar('\n'); fflush(stdout); } /* * 'quote_string()' - Write a quoted string to stdout, escaping \ and ". */ static void quote_string(const char *s) /* I - String to write */ { fputs(" \"", stdout); if (s) { while (*s) { if (*s == '\\' || *s == '\"') putchar('\\'); if (((*s & 255) < ' ' && *s != '\t') || *s == 0x7f) putchar(' '); else putchar(*s); s ++; } } putchar('\"'); } cups-2.2.7/cups/backend.h000664 000765 000024 00000003611 13255074424 015666 0ustar00msweetstaff000000 000000 /* * Backend definitions for CUPS. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_BACKEND_H_ # define _CUPS_BACKEND_H_ /* * Include necessary headers... */ # include "versioning.h" /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Constants... */ enum cups_backend_e /**** Backend exit codes ****/ { CUPS_BACKEND_OK = 0, /* Job completed successfully */ CUPS_BACKEND_FAILED = 1, /* Job failed, use error-policy */ CUPS_BACKEND_AUTH_REQUIRED = 2, /* Job failed, authentication required */ CUPS_BACKEND_HOLD = 3, /* Job failed, hold job */ CUPS_BACKEND_STOP = 4, /* Job failed, stop queue */ CUPS_BACKEND_CANCEL = 5, /* Job failed, cancel job */ CUPS_BACKEND_RETRY = 6, /* Job failed, retry this job later */ CUPS_BACKEND_RETRY_CURRENT = 7 /* Job failed, retry this job immediately */ }; typedef enum cups_backend_e cups_backend_t; /**** Backend exit codes ****/ /* * Prototypes... */ extern const char *cupsBackendDeviceURI(char **argv) _CUPS_API_1_2; extern void cupsBackendReport(const char *device_scheme, const char *device_uri, const char *device_make_and_model, const char *device_info, const char *device_id, const char *device_location) _CUPS_API_1_4; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_BACKEND_H_ */ cups-2.2.7/cups/cups-private.h000664 000765 000024 00000021321 13255074424 016717 0ustar00msweetstaff000000 000000 /* * Private definitions for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_CUPS_PRIVATE_H_ # define _CUPS_CUPS_PRIVATE_H_ /* * Include necessary headers... */ # include "string-private.h" # include "debug-private.h" # include "array-private.h" # include "ipp-private.h" # include "http-private.h" # include "language-private.h" # include "pwg-private.h" # include "thread-private.h" # include # ifdef __APPLE__ # include # include # endif /* __APPLE__ */ /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Types... */ typedef struct _cups_buffer_s /**** Read/write buffer ****/ { struct _cups_buffer_s *next; /* Next buffer in list */ size_t size; /* Size of buffer */ char used, /* Is this buffer used? */ d[1]; /* Data buffer */ } _cups_buffer_t; typedef struct _cups_globals_s /**** CUPS global state data ****/ { /* Multiple places... */ const char *cups_datadir, /* CUPS_DATADIR environment var */ *cups_serverbin,/* CUPS_SERVERBIN environment var */ *cups_serverroot, /* CUPS_SERVERROOT environment var */ *cups_statedir, /* CUPS_STATEDIR environment var */ *localedir; /* LOCALDIR environment var */ /* adminutil.c */ time_t cupsd_update; /* Last time we got or set cupsd.conf */ char cupsd_hostname[HTTP_MAX_HOST]; /* Hostname for connection */ int cupsd_num_settings; /* Number of server settings */ cups_option_t *cupsd_settings;/* Server settings */ /* auth.c */ # ifdef HAVE_GSSAPI char gss_service_name[32]; /* Kerberos service name */ # endif /* HAVE_GSSAPI */ /* backend.c */ char resolved_uri[1024]; /* Buffer for cupsBackendDeviceURI */ /* debug.c */ # ifdef DEBUG int thread_id; /* Friendly thread ID */ # endif /* DEBUG */ /* file.c */ cups_file_t *stdio_files[3];/* stdin, stdout, stderr */ /* http.c */ char http_date[256]; /* Date+time buffer */ /* http-addr.c */ unsigned ip_addr; /* Packed IPv4 address */ char *ip_ptrs[2]; /* Pointer to packed address */ struct hostent hostent; /* Host entry for IP address */ # ifdef HAVE_GETADDRINFO char hostname[1024]; /* Hostname */ # endif /* HAVE_GETADDRINFO */ int need_res_init; /* Need to reinitialize resolver? */ /* ipp.c */ ipp_uchar_t ipp_date[11]; /* RFC-2579 date/time data */ _cups_buffer_t *cups_buffers; /* Buffer list */ /* ipp-support.c */ int ipp_port; /* IPP port number */ char ipp_unknown[255]; /* Unknown error statuses */ /* language.c */ cups_lang_t *lang_default; /* Default language */ # ifdef __APPLE__ char language[32]; /* Cached language */ # endif /* __APPLE__ */ /* pwg-media.c */ cups_array_t *leg_size_lut, /* Lookup table for legacy names */ *ppd_size_lut, /* Lookup table for PPD names */ *pwg_size_lut; /* Lookup table for PWG names */ pwg_media_t pwg_media; /* PWG media data for custom size */ char pwg_name[65], /* PWG media name for custom size */ ppd_name[41]; /* PPD media name for custom size */ /* request.c */ http_t *http; /* Current server connection */ ipp_status_t last_error; /* Last IPP error */ char *last_status_message; /* Last IPP status-message */ /* snmp.c */ char snmp_community[255]; /* Default SNMP community name */ int snmp_debug; /* Log SNMP IO to stderr? */ /* tempfile.c */ char tempfile[1024]; /* cupsTempFd/File buffer */ /* usersys.c */ http_encryption_t encryption; /* Encryption setting */ char user[65], /* User name */ user_agent[256],/* User-Agent string */ server[256], /* Server address */ servername[256],/* Server hostname */ password[128]; /* Password for default callback */ cups_password_cb2_t password_cb; /* Password callback */ void *password_data; /* Password user data */ http_tls_credentials_t tls_credentials; /* Default client credentials */ cups_client_cert_cb_t client_cert_cb; /* Client certificate callback */ void *client_cert_data; /* Client certificate user data */ cups_server_cert_cb_t server_cert_cb; /* Server certificate callback */ void *server_cert_data; /* Server certificate user data */ int server_version, /* Server IPP version */ trust_first, /* Trust on first use? */ any_root, /* Allow any (e.g., self-signed) root */ expired_certs, /* Allow expired certs */ validate_certs; /* Validate certificates */ /* util.c */ char def_printer[256]; /* Default printer */ } _cups_globals_t; typedef struct _cups_media_db_s /* Media database */ { char *color, /* Media color, if any */ *key, /* Media key, if any */ *info, /* Media human-readable name, if any */ *size_name, /* Media PWG size name, if provided */ *source, /* Media source, if any */ *type; /* Media type, if any */ int width, /* Width in hundredths of millimeters */ length, /* Length in hundredths of * millimeters */ bottom, /* Bottom margin in hundredths of * millimeters */ left, /* Left margin in hundredths of * millimeters */ right, /* Right margin in hundredths of * millimeters */ top; /* Top margin in hundredths of * millimeters */ } _cups_media_db_t; typedef struct _cups_dconstres_s /* Constraint/resolver */ { char *name; /* Name of resolver */ ipp_t *collection; /* Collection containing attrs */ } _cups_dconstres_t; struct _cups_dinfo_s /* Destination capability and status * information */ { int version; /* IPP version */ const char *uri; /* Printer URI */ char *resource; /* Resource path */ ipp_t *attrs; /* Printer attributes */ int num_defaults; /* Number of default options */ cups_option_t *defaults; /* Default options */ cups_array_t *constraints; /* Job constraints */ cups_array_t *resolvers; /* Job resolvers */ cups_array_t *localizations; /* Localization information */ cups_array_t *media_db; /* Media database */ _cups_media_db_t min_size, /* Minimum size */ max_size; /* Maximum size */ unsigned cached_flags; /* Flags used for cached media */ cups_array_t *cached_db; /* Cache of media from last index/default */ time_t ready_time; /* When xxx-ready attributes were last queried */ ipp_t *ready_attrs; /* xxx-ready attributes */ cups_array_t *ready_db; /* media[-col]-ready media database */ }; /* * Prototypes... */ # ifdef __APPLE__ extern CFStringRef _cupsAppleCopyDefaultPaperID(void); extern CFStringRef _cupsAppleCopyDefaultPrinter(void); extern int _cupsAppleGetUseLastPrinter(void); extern void _cupsAppleSetDefaultPaperID(CFStringRef name); extern void _cupsAppleSetDefaultPrinter(CFStringRef name); extern void _cupsAppleSetUseLastPrinter(int uselast); # endif /* __APPLE__ */ extern char *_cupsBufferGet(size_t size); extern void _cupsBufferRelease(char *b); extern http_t *_cupsConnect(void); extern char *_cupsCreateDest(const char *name, const char *info, const char *device_id, const char *device_uri, char *uri, size_t urisize); extern int _cupsGet1284Values(const char *device_id, cups_option_t **values); extern const char *_cupsGetDestResource(cups_dest_t *dest, char *resource, size_t resourcesize); extern int _cupsGetDests(http_t *http, ipp_op_t op, const char *name, cups_dest_t **dests, cups_ptype_t type, cups_ptype_t mask); extern const char *_cupsGetPassword(const char *prompt); extern void _cupsGlobalLock(void); extern _cups_globals_t *_cupsGlobals(void); extern void _cupsGlobalUnlock(void); # ifdef HAVE_GSSAPI extern const char *_cupsGSSServiceName(void); # endif /* HAVE_GSSAPI */ extern int _cupsNextDelay(int current, int *previous); extern void _cupsSetDefaults(void); extern void _cupsSetError(ipp_status_t status, const char *message, int localize); extern void _cupsSetHTTPError(http_status_t status); # ifdef HAVE_GSSAPI extern int _cupsSetNegotiateAuthString(http_t *http, const char *method, const char *resource); # endif /* HAVE_GSSAPI */ extern char *_cupsUserDefault(char *name, size_t namesize); /* * C++ magic... */ # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_CUPS_PRIVATE_H_ */ cups-2.2.7/cups/cups.h000664 000765 000024 00000061555 13255074424 015264 0ustar00msweetstaff000000 000000 /* * API definitions for CUPS. * * Copyright 2007-2018 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_CUPS_H_ # define _CUPS_CUPS_H_ /* * Include necessary headers... */ # include # if defined(WIN32) && !defined(__CUPS_SSIZE_T_DEFINED) # define __CUPS_SSIZE_T_DEFINED # include /* Windows does not support the ssize_t type, so map it to long... */ typedef long ssize_t; /* @private@ */ # endif /* WIN32 && !__CUPS_SSIZE_T_DEFINED */ # include "file.h" # include "ipp.h" # include "language.h" # include "pwg.h" /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Constants... */ # define CUPS_VERSION 2.0207 # define CUPS_VERSION_MAJOR 2 # define CUPS_VERSION_MINOR 2 # define CUPS_VERSION_PATCH 7 # define CUPS_BC_FD 3 /* Back-channel file descriptor for * select/poll */ # define CUPS_DATE_ANY (time_t)-1 # define CUPS_EXCLUDE_NONE (const char *)0 # define CUPS_FORMAT_AUTO "application/octet-stream" # define CUPS_FORMAT_COMMAND "application/vnd.cups-command" # define CUPS_FORMAT_JPEG "image/jpeg" # define CUPS_FORMAT_PDF "application/pdf" # define CUPS_FORMAT_POSTSCRIPT "application/postscript" # define CUPS_FORMAT_RAW "application/vnd.cups-raw" # define CUPS_FORMAT_TEXT "text/plain" # define CUPS_HTTP_DEFAULT (http_t *)0 # define CUPS_INCLUDE_ALL (const char *)0 # define CUPS_JOBID_ALL -1 # define CUPS_JOBID_CURRENT 0 # define CUPS_LENGTH_VARIABLE (ssize_t)0 # define CUPS_TIMEOUT_DEFAULT 0 # define CUPS_WHICHJOBS_ALL -1 # define CUPS_WHICHJOBS_ACTIVE 0 # define CUPS_WHICHJOBS_COMPLETED 1 /* Flags for cupsConnectDest and cupsEnumDests */ # define CUPS_DEST_FLAGS_NONE 0x00 /* No flags are set */ # define CUPS_DEST_FLAGS_UNCONNECTED 0x01 /* There is no connection */ # define CUPS_DEST_FLAGS_MORE 0x02 /* There are more destinations */ # define CUPS_DEST_FLAGS_REMOVED 0x04 /* The destination has gone away */ # define CUPS_DEST_FLAGS_ERROR 0x08 /* An error occurred */ # define CUPS_DEST_FLAGS_RESOLVING 0x10 /* The destination address is being * resolved */ # define CUPS_DEST_FLAGS_CONNECTING 0x20 /* A connection is being established */ # define CUPS_DEST_FLAGS_CANCELED 0x40 /* Operation was canceled */ # define CUPS_DEST_FLAGS_DEVICE 0x80 /* For @link cupsConnectDest@: Connect to device */ /* Flags for cupsGetDestMediaByName/Size */ # define CUPS_MEDIA_FLAGS_DEFAULT 0x00 /* Find the closest size supported by * the printer */ # define CUPS_MEDIA_FLAGS_BORDERLESS 0x01 /* Find a borderless size */ # define CUPS_MEDIA_FLAGS_DUPLEX 0x02 /* Find a size compatible with 2-sided * printing */ # define CUPS_MEDIA_FLAGS_EXACT 0x04 /* Find an exact match for the size */ # define CUPS_MEDIA_FLAGS_READY 0x08 /* If the printer supports media * sensing, find the size amongst the * "ready" media. */ /* Options and values */ # define CUPS_COPIES "copies" # define CUPS_COPIES_SUPPORTED "copies-supported" # define CUPS_FINISHINGS "finishings" # define CUPS_FINISHINGS_SUPPORTED "finishings-supported" # define CUPS_FINISHINGS_BIND "7" # define CUPS_FINISHINGS_COVER "6" # define CUPS_FINISHINGS_FOLD "10" # define CUPS_FINISHINGS_NONE "3" # define CUPS_FINISHINGS_PUNCH "5" # define CUPS_FINISHINGS_STAPLE "4" # define CUPS_FINISHINGS_TRIM "11" # define CUPS_MEDIA "media" # define CUPS_MEDIA_READY "media-ready" # define CUPS_MEDIA_SUPPORTED "media-supported" # define CUPS_MEDIA_3X5 "na_index-3x5_3x5in" # define CUPS_MEDIA_4X6 "na_index-4x6_4x6in" # define CUPS_MEDIA_5X7 "na_5x7_5x7in" # define CUPS_MEDIA_8X10 "na_govt-letter_8x10in" # define CUPS_MEDIA_A3 "iso_a3_297x420mm" # define CUPS_MEDIA_A4 "iso_a4_210x297mm" # define CUPS_MEDIA_A5 "iso_a5_148x210mm" # define CUPS_MEDIA_A6 "iso_a6_105x148mm" # define CUPS_MEDIA_ENV10 "na_number-10_4.125x9.5in" # define CUPS_MEDIA_ENVDL "iso_dl_110x220mm" # define CUPS_MEDIA_LEGAL "na_legal_8.5x14in" # define CUPS_MEDIA_LETTER "na_letter_8.5x11in" # define CUPS_MEDIA_PHOTO_L "oe_photo-l_3.5x5in" # define CUPS_MEDIA_SUPERBA3 "na_super-b_13x19in" # define CUPS_MEDIA_TABLOID "na_ledger_11x17in" # define CUPS_MEDIA_SOURCE "media-source" # define CUPS_MEDIA_SOURCE_SUPPORTED "media-source-supported" # define CUPS_MEDIA_SOURCE_AUTO "auto" # define CUPS_MEDIA_SOURCE_MANUAL "manual" # define CUPS_MEDIA_TYPE "media-type" # define CUPS_MEDIA_TYPE_SUPPORTED "media-type-supported" # define CUPS_MEDIA_TYPE_AUTO "auto" # define CUPS_MEDIA_TYPE_ENVELOPE "envelope" # define CUPS_MEDIA_TYPE_LABELS "labels" # define CUPS_MEDIA_TYPE_LETTERHEAD "stationery-letterhead" # define CUPS_MEDIA_TYPE_PHOTO "photographic" # define CUPS_MEDIA_TYPE_PHOTO_GLOSSY "photographic-glossy" # define CUPS_MEDIA_TYPE_PHOTO_MATTE "photographic-matte" # define CUPS_MEDIA_TYPE_PLAIN "stationery" # define CUPS_MEDIA_TYPE_TRANSPARENCY "transparency" # define CUPS_NUMBER_UP "number-up" # define CUPS_NUMBER_UP_SUPPORTED "number-up-supported" # define CUPS_ORIENTATION "orientation-requested" # define CUPS_ORIENTATION_SUPPORTED "orientation-requested-supported" # define CUPS_ORIENTATION_PORTRAIT "3" # define CUPS_ORIENTATION_LANDSCAPE "4" # define CUPS_PRINT_COLOR_MODE "print-color-mode" # define CUPS_PRINT_COLOR_MODE_SUPPORTED "print-color-mode-supported" # define CUPS_PRINT_COLOR_MODE_AUTO "auto" # define CUPS_PRINT_COLOR_MODE_MONOCHROME "monochrome" # define CUPS_PRINT_COLOR_MODE_COLOR "color" # define CUPS_PRINT_QUALITY "print-quality" # define CUPS_PRINT_QUALITY_SUPPORTED "print-quality-supported" # define CUPS_PRINT_QUALITY_DRAFT "3" # define CUPS_PRINT_QUALITY_NORMAL "4" # define CUPS_PRINT_QUALITY_HIGH "5" # define CUPS_SIDES "sides" # define CUPS_SIDES_SUPPORTED "sides-supported" # define CUPS_SIDES_ONE_SIDED "one-sided" # define CUPS_SIDES_TWO_SIDED_PORTRAIT "two-sided-long-edge" # define CUPS_SIDES_TWO_SIDED_LANDSCAPE "two-sided-short-edge" /* * Types and structures... */ typedef unsigned cups_ptype_t; /* Printer type/capability bits */ enum cups_ptype_e /* Printer type/capability bit * constants */ { /* Not a typedef'd enum so we can OR */ CUPS_PRINTER_LOCAL = 0x0000, /* Local printer or class */ CUPS_PRINTER_CLASS = 0x0001, /* Printer class */ CUPS_PRINTER_REMOTE = 0x0002, /* Remote printer or class */ CUPS_PRINTER_BW = 0x0004, /* Can do B&W printing */ CUPS_PRINTER_COLOR = 0x0008, /* Can do color printing */ CUPS_PRINTER_DUPLEX = 0x0010, /* Can do two-sided printing */ CUPS_PRINTER_STAPLE = 0x0020, /* Can staple output */ CUPS_PRINTER_COPIES = 0x0040, /* Can do copies in hardware */ CUPS_PRINTER_COLLATE = 0x0080, /* Can quickly collate copies */ CUPS_PRINTER_PUNCH = 0x0100, /* Can punch output */ CUPS_PRINTER_COVER = 0x0200, /* Can cover output */ CUPS_PRINTER_BIND = 0x0400, /* Can bind output */ CUPS_PRINTER_SORT = 0x0800, /* Can sort output */ CUPS_PRINTER_SMALL = 0x1000, /* Can print on Letter/Legal/A4-size media */ CUPS_PRINTER_MEDIUM = 0x2000, /* Can print on Tabloid/B/C/A3/A2-size media */ CUPS_PRINTER_LARGE = 0x4000, /* Can print on D/E/A1/A0-size media */ CUPS_PRINTER_VARIABLE = 0x8000, /* Can print on rolls and custom-size media */ CUPS_PRINTER_IMPLICIT = 0x10000, /* Implicit class @private@ * @since Deprecated@ */ CUPS_PRINTER_DEFAULT = 0x20000, /* Default printer on network */ CUPS_PRINTER_FAX = 0x40000, /* Fax queue */ CUPS_PRINTER_REJECTING = 0x80000, /* Printer is rejecting jobs */ CUPS_PRINTER_DELETE = 0x100000, /* Delete printer * @deprecated@ @exclude all@ */ CUPS_PRINTER_NOT_SHARED = 0x200000, /* Printer is not shared * @since CUPS 1.2/macOS 10.5@ */ CUPS_PRINTER_AUTHENTICATED = 0x400000,/* Printer requires authentication * @since CUPS 1.2/macOS 10.5@ */ CUPS_PRINTER_COMMANDS = 0x800000, /* Printer supports maintenance commands * @since CUPS 1.2/macOS 10.5@ */ CUPS_PRINTER_DISCOVERED = 0x1000000, /* Printer was discovered @since CUPS 1.2/macOS 10.5@ */ CUPS_PRINTER_SCANNER = 0x2000000, /* Scanner-only device * @since CUPS 1.4/macOS 10.6@ @private@ */ CUPS_PRINTER_MFP = 0x4000000, /* Printer with scanning capabilities * @since CUPS 1.4/macOS 10.6@ @private@ */ CUPS_PRINTER_3D = 0x8000000, /* Printer with 3D capabilities @exclude all@ @private@ */ CUPS_PRINTER_OPTIONS = 0x6fffc /* ~(CLASS | REMOTE | IMPLICIT | * DEFAULT | FAX | REJECTING | DELETE | * NOT_SHARED | AUTHENTICATED | * COMMANDS | DISCOVERED) @private@ */ }; typedef struct cups_option_s /**** Printer Options ****/ { char *name; /* Name of option */ char *value; /* Value of option */ } cups_option_t; typedef struct cups_dest_s /**** Destination ****/ { char *name, /* Printer or class name */ *instance; /* Local instance name or NULL */ int is_default; /* Is this printer the default? */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ } cups_dest_t; typedef struct _cups_dinfo_s cups_dinfo_t; /* Destination capability and status * information @since CUPS 1.6/macOS 10.8@ */ typedef struct cups_job_s /**** Job ****/ { int id; /* The job ID */ char *dest; /* Printer or class name */ char *title; /* Title/job name */ char *user; /* User that submitted the job */ char *format; /* Document format */ ipp_jstate_t state; /* Job state */ int size; /* Size in kilobytes */ int priority; /* Priority (1-100) */ time_t completed_time; /* Time the job was completed */ time_t creation_time; /* Time the job was created */ time_t processing_time; /* Time the job was processed */ } cups_job_t; typedef struct cups_size_s /**** Media Size @since CUPS 1.6/macOS 10.8@ ****/ { char media[128]; /* Media name to use */ int width, /* Width in hundredths of millimeters */ length, /* Length in hundredths of * millimeters */ bottom, /* Bottom margin in hundredths of * millimeters */ left, /* Left margin in hundredths of * millimeters */ right, /* Right margin in hundredths of * millimeters */ top; /* Top margin in hundredths of * millimeters */ } cups_size_t; typedef int (*cups_client_cert_cb_t)(http_t *http, void *tls, cups_array_t *distinguished_names, void *user_data); /* Client credentials callback * @since CUPS 1.5/macOS 10.7@ */ typedef int (*cups_dest_cb_t)(void *user_data, unsigned flags, cups_dest_t *dest); /* Destination enumeration callback * @since CUPS 1.6/macOS 10.8@ */ # ifdef __BLOCKS__ typedef int (^cups_dest_block_t)(unsigned flags, cups_dest_t *dest); /* Destination enumeration block * @since CUPS 1.6/macOS 10.8@ * @exclude all@ */ # endif /* __BLOCKS__ */ typedef const char *(*cups_password_cb_t)(const char *prompt); /* Password callback @exclude all@ */ typedef const char *(*cups_password_cb2_t)(const char *prompt, http_t *http, const char *method, const char *resource, void *user_data); /* New password callback * @since CUPS 1.4/macOS 10.6@ */ typedef int (*cups_server_cert_cb_t)(http_t *http, void *tls, cups_array_t *certs, void *user_data); /* Server credentials callback * @since CUPS 1.5/macOS 10.7@ */ /* * Functions... */ extern int cupsCancelJob(const char *name, int job_id); extern ipp_t *cupsDoFileRequest(http_t *http, ipp_t *request, const char *resource, const char *filename); extern ipp_t *cupsDoRequest(http_t *http, ipp_t *request, const char *resource); extern http_encryption_t cupsEncryption(void); extern void cupsFreeJobs(int num_jobs, cups_job_t *jobs); extern int cupsGetClasses(char ***classes) _CUPS_DEPRECATED_MSG("Use cupsEnumDests instead."); extern const char *cupsGetDefault(void); extern int cupsGetJobs(cups_job_t **jobs, const char *name, int myjobs, int whichjobs); extern int cupsGetPrinters(char ***printers) _CUPS_DEPRECATED_MSG("Use cupsEnumDests instead."); extern ipp_status_t cupsLastError(void); extern int cupsPrintFile(const char *name, const char *filename, const char *title, int num_options, cups_option_t *options); extern int cupsPrintFiles(const char *name, int num_files, const char **files, const char *title, int num_options, cups_option_t *options); extern char *cupsTempFile(char *filename, int len) _CUPS_DEPRECATED_MSG("Use cupsTempFd or cupsTempFile2 instead."); extern int cupsTempFd(char *filename, int len); extern int cupsAddDest(const char *name, const char *instance, int num_dests, cups_dest_t **dests); extern void cupsFreeDests(int num_dests, cups_dest_t *dests); extern cups_dest_t *cupsGetDest(const char *name, const char *instance, int num_dests, cups_dest_t *dests); extern int cupsGetDests(cups_dest_t **dests); 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); extern int cupsParseOptions(const char *arg, int num_options, cups_option_t **options); extern const char *cupsGetPassword(const char *prompt); extern const char *cupsServer(void); extern void cupsSetEncryption(http_encryption_t e); extern void cupsSetPasswordCB(cups_password_cb_t cb); extern void cupsSetServer(const char *server); extern void cupsSetUser(const char *user); extern const char *cupsUser(void); /**** New in CUPS 1.1.20 ****/ extern int cupsDoAuthentication(http_t *http, const char *method, const char *resource) _CUPS_API_1_1_20; extern http_status_t cupsGetFile(http_t *http, const char *resource, const char *filename) _CUPS_API_1_1_20; extern http_status_t cupsGetFd(http_t *http, const char *resource, int fd); extern http_status_t cupsPutFile(http_t *http, const char *resource, const char *filename) _CUPS_API_1_1_20; extern http_status_t cupsPutFd(http_t *http, const char *resource, int fd) _CUPS_API_1_1_20; /**** New in CUPS 1.1.21 ****/ extern const char *cupsGetDefault2(http_t *http) _CUPS_API_1_1_21; extern int cupsGetDests2(http_t *http, cups_dest_t **dests) _CUPS_API_1_1_21; extern int cupsGetJobs2(http_t *http, cups_job_t **jobs, const char *name, int myjobs, int whichjobs) _CUPS_API_1_1_21; extern int cupsPrintFile2(http_t *http, const char *name, const char *filename, const char *title, int num_options, cups_option_t *options) _CUPS_API_1_1_21; extern int cupsPrintFiles2(http_t *http, const char *name, int num_files, const char **files, const char *title, int num_options, cups_option_t *options) _CUPS_API_1_1_21; extern int cupsSetDests2(http_t *http, int num_dests, cups_dest_t *dests) _CUPS_API_1_1_21; /**** New in CUPS 1.2/macOS 10.5 ****/ extern ssize_t cupsBackChannelRead(char *buffer, size_t bytes, double timeout) _CUPS_API_1_2; extern ssize_t cupsBackChannelWrite(const char *buffer, size_t bytes, double timeout) _CUPS_API_1_2; extern void cupsEncodeOptions2(ipp_t *ipp, int num_options, cups_option_t *options, ipp_tag_t group_tag) _CUPS_API_1_2; extern const char *cupsLastErrorString(void) _CUPS_API_1_2; extern char *cupsNotifySubject(cups_lang_t *lang, ipp_t *event) _CUPS_API_1_2; extern char *cupsNotifyText(cups_lang_t *lang, ipp_t *event) _CUPS_API_1_2; extern int cupsRemoveOption(const char *name, int num_options, cups_option_t **options) _CUPS_API_1_2; extern cups_file_t *cupsTempFile2(char *filename, int len) _CUPS_API_1_2; /**** New in CUPS 1.3/macOS 10.5 ****/ extern ipp_t *cupsDoIORequest(http_t *http, ipp_t *request, const char *resource, int infile, int outfile) _CUPS_API_1_3; extern int cupsRemoveDest(const char *name, const char *instance, int num_dests, cups_dest_t **dests) _CUPS_API_1_3; extern void cupsSetDefaultDest(const char *name, const char *instance, int num_dests, cups_dest_t *dests) _CUPS_API_1_3; /**** New in CUPS 1.4/macOS 10.6 ****/ extern ipp_status_t cupsCancelJob2(http_t *http, const char *name, int job_id, int purge) _CUPS_API_1_4; extern int cupsCreateJob(http_t *http, const char *name, const char *title, int num_options, cups_option_t *options) _CUPS_API_1_4; extern ipp_status_t cupsFinishDocument(http_t *http, const char *name) _CUPS_API_1_4; extern cups_dest_t *cupsGetNamedDest(http_t *http, const char *name, const char *instance) _CUPS_API_1_4; extern const char *cupsGetPassword2(const char *prompt, http_t *http, const char *method, const char *resource) _CUPS_API_1_4; extern ipp_t *cupsGetResponse(http_t *http, const char *resource) _CUPS_API_1_4; extern ssize_t cupsReadResponseData(http_t *http, char *buffer, size_t length) _CUPS_API_1_4; extern http_status_t cupsSendRequest(http_t *http, ipp_t *request, const char *resource, size_t length) _CUPS_API_1_4; extern void cupsSetPasswordCB2(cups_password_cb2_t cb, void *user_data) _CUPS_API_1_4; extern http_status_t cupsStartDocument(http_t *http, const char *name, int job_id, const char *docname, const char *format, int last_document) _CUPS_API_1_4; extern http_status_t cupsWriteRequestData(http_t *http, const char *buffer, size_t length) _CUPS_API_1_4; /**** New in CUPS 1.5/macOS 10.7 ****/ extern void cupsSetClientCertCB(cups_client_cert_cb_t cb, void *user_data) _CUPS_API_1_5; extern int cupsSetCredentials(cups_array_t *certs) _CUPS_API_1_5; extern void cupsSetServerCertCB(cups_server_cert_cb_t cb, void *user_data) _CUPS_API_1_5; /**** New in CUPS 1.6/macOS 10.8 ****/ extern ipp_status_t cupsCancelDestJob(http_t *http, cups_dest_t *dest, int job_id) _CUPS_API_1_6; extern int cupsCheckDestSupported(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, const char *option, const char *value) _CUPS_API_1_6; extern ipp_status_t cupsCloseDestJob(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, int job_id) _CUPS_API_1_6; extern http_t *cupsConnectDest(cups_dest_t *dest, unsigned flags, int msec, int *cancel, char *resource, size_t resourcesize, cups_dest_cb_t cb, void *user_data) _CUPS_API_1_6; # ifdef __BLOCKS__ extern http_t *cupsConnectDestBlock(cups_dest_t *dest, unsigned flags, int msec, int *cancel, char *resource, size_t resourcesize, cups_dest_block_t block) _CUPS_API_1_6; # endif /* __BLOCKS__ */ extern int cupsCopyDest(cups_dest_t *dest, int num_dests, cups_dest_t **dests) _CUPS_API_1_6; extern cups_dinfo_t *cupsCopyDestInfo(http_t *http, cups_dest_t *dest) _CUPS_API_1_6; extern int cupsCopyDestConflicts(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, int num_options, cups_option_t *options, const char *new_option, const char *new_value, int *num_conflicts, cups_option_t **conflicts, int *num_resolved, cups_option_t **resolved) _CUPS_API_1_6; extern ipp_status_t cupsCreateDestJob(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, int *job_id, const char *title, int num_options, cups_option_t *options) _CUPS_API_1_6; extern int cupsEnumDests(unsigned flags, int msec, int *cancel, cups_ptype_t type, cups_ptype_t mask, cups_dest_cb_t cb, void *user_data) _CUPS_API_1_6; # ifdef __BLOCKS__ extern int cupsEnumDestsBlock(unsigned flags, int msec, int *cancel, cups_ptype_t type, cups_ptype_t mask, cups_dest_block_t block) _CUPS_API_1_6; # endif /* __BLOCKS__ */ extern ipp_status_t cupsFinishDestDocument(http_t *http, cups_dest_t *dest, cups_dinfo_t *info) _CUPS_API_1_6; extern void cupsFreeDestInfo(cups_dinfo_t *dinfo) _CUPS_API_1_6; extern int cupsGetDestMediaByName(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *media, unsigned flags, cups_size_t *size) _CUPS_API_1_6; extern int cupsGetDestMediaBySize(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, int width, int length, unsigned flags, cups_size_t *size) _CUPS_API_1_6; extern const char *cupsLocalizeDestOption(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, const char *option) _CUPS_API_1_6; extern const char *cupsLocalizeDestValue(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, const char *option, const char *value) _CUPS_API_1_6; extern http_status_t cupsStartDestDocument(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, int job_id, const char *docname, const char *format, int num_options, cups_option_t *options, int last_document) _CUPS_API_1_6; /* New in CUPS 1.7 */ extern ipp_attribute_t *cupsFindDestDefault(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option) _CUPS_API_1_7; extern ipp_attribute_t *cupsFindDestReady(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option) _CUPS_API_1_7; extern ipp_attribute_t *cupsFindDestSupported(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option) _CUPS_API_1_7; extern int cupsGetDestMediaByIndex(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, int n, unsigned flags, cups_size_t *size) _CUPS_API_1_7; extern int cupsGetDestMediaCount(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, unsigned flags) _CUPS_API_1_7; extern int cupsGetDestMediaDefault(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, unsigned flags, cups_size_t *size) _CUPS_API_1_7; extern void cupsSetUserAgent(const char *user_agent) _CUPS_API_1_7; extern const char *cupsUserAgent(void) _CUPS_API_1_7; /* New in CUPS 2.0/macOS 10.10 */ extern cups_dest_t *cupsGetDestWithURI(const char *name, const char *uri) _CUPS_API_2_0; extern const char *cupsLocalizeDestMedia(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, unsigned flags, cups_size_t *size) _CUPS_API_2_0; extern int cupsMakeServerCredentials(const char *path, const char *common_name, int num_alt_names, const char **alt_names, time_t expiration_date) _CUPS_API_2_0; extern int cupsSetServerCredentials(const char *path, const char *common_name, int auto_create) _CUPS_API_2_0; /* New in CUPS 2.2/macOS 10.12 */ extern ssize_t cupsHashData(const char *algorithm, const void *data, size_t datalen, unsigned char *hash, size_t hashsize) _CUPS_API_2_2; /* New in CUPS 2.2.4 */ extern int cupsAddIntegerOption(const char *name, int value, int num_options, cups_option_t **options) _CUPS_API_2_2_4; extern int cupsGetIntegerOption(const char *name, int num_options, cups_option_t *options) _CUPS_API_2_2_4; /* New in CUPS 2.2.7 */ extern const char *cupsHashString(const unsigned char *hash, size_t hashsize, char *buffer, size_t bufsize) _CUPS_API_2_2_7; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_CUPS_H_ */ cups-2.2.7/cups/cupspm-icon.png000664 000765 000024 00000036674 13255074424 017110 0ustar00msweetstaff000000 000000 ‰PNG  IHDRŒ»8Ýá| iCCPICC Profile8U]hU>»sg#$ÎSl4…t¨? % “V4¡´ºÝÝ6n–I6Ú"èdöîΘÉÎ83»ý¡OEP|1ê›Ä¿·€ (õÛ>´/• %ÚÔ (>´øƒP苦ë™;3™iº±Þeî|óïž{î¹gï蹪X–‘š®-2âs‡ˆ=+„‡ ¡WQ+]©L6O wµ[ßCÂ{_ÙÕÝþŸ­·F qb³æ¨ ˆð§UËvzú‘?êZöbè·1@Ä/z¸ác×Ãs>~ifä,âÓˆUSjˆ—ÌÅøF û1°Ö_ Mjëªèå¢b›uÝ ±pïaþŸmÁh…ómçϙŸ>„ïa\û+5%çáQÄKª’ŸFüâkm}¶àÛ–›‘?ÜÞš¯¦ïD\¬Ûª¾Ÿ¤­µŠ!~ç„6ó,â-ˆÏ7çÊSÁØ«ª“ÅœÁvÄ·5Zòò;À‰º[šñÇrûmSžòçåê5šË{yDüú¼yHö}rŸ9íé|èó„–-ü¥—”ƒăˆ¡FAöçâþ±ÜJjåI.’£[/ã]m¦èÏK 7ÔKëúR ÿD³‹r€¯Y«QŒOÚ-¹êëùQÅÎ|Ÿ|…6«¾ ³ (˜0‡½ MXd(@ߨh©ƒ2­Š_¡fçÀ<ò:´™ÍÁ¾Â”þÈÈ_ƒù¸Î´*d‡>‚²üެÓeñ«…\c?~,7?& ÙƒÏ^2Iö‘q2"yŠ@ÿ«g Ÿ|UP`þoØiTXtXML:com.adobe.xmp Michael Sweet Copyright 2017 Michael Sweet New Icon yP~6†IDATxÚí]|UEÖ?÷¾—¼$¡(½£TÅX°  +Ò ¢¨€‚PÀîÚÛŠŠeí±¬uí«²ºŠtHï !´$öòJøÎœ¹wÞÜòZ€gv¿ä7^¦üçÜ3ç?gfîܹO8€¡®!BCÈd3þˆâe„Âã zfƒEDC3þÏÀ²,"¤ÍøØàÅÍ¡ÉöŸ_OèEBâþ ‘fü‘ÅóEûh÷ë5‚šñ1Å*øíBˆ4ãc†¤}ZDñ©`*jÆÇ o®  Ö:>C²;¼–ë³›òåH3>ÆxOŸž‘´Fšñ±Áã?vmÃâ­[‡×'.>€ÕMxgœ7€IµÁÓs¼ÉÉ>W‚Ou„o¯I~jª¯S'o·n>lòøÎ8ÃÛ·¯¯K_ÇN¾”µ=x-&®r9>sÒˆONööïï›?ßÿÉ' ••¥¿†6mòø¡oÎßѽ AåîùeCxòÉðú h®õòËf|ß¾VŒMXµÊÇÞ)S¼Ç‡öevWTûö ùñ.oûöÞÑ£ýo¼Ñ–ÖPSh8þíÞݰaƒï¡‡¼C† 4¯î^áíii/Ø+^cŽ/XÒéôvíê»óΆòòƒáþ˜ÆÓ¦y;tð²Æ›úfÎ4ã÷ì «ïì³­72ãÏ8ã`” »vù_yÙõº\AíƒnÂÿçŸ7øýa¤ÕÖ"‹Þ‘#½qqa줽˜G+q–ôj‚GÆã-‡oHOªýþ~ðöèa•„¤0úxíI2â£'IS  À{É%Þ-lìƒ36Ô×G!mÿ~ïYgyŽ ö n7Ì:Š†Ç›×PVÖˆÆû¿úÊÛ¶­I¾×ޤ°úñ$#¾±$1ü~ß 7xU‡Á>Øö ª«- ó¬«;ˆƒžÛ}Ð糑VZê9ñD¯¢ØØ3¤ýÙ?ž@±â‘r<º9䈎;Î~ˆCwí:XRr°¨è`iéÁ½{z›þ¾p¡,ßÄ“B뜤ޖ$/.>Ï>[ çœãýË_|³g£ò ™™VËú^yÅ£îî{ôQ³ª;wú&Oö8 q)ôé§Ö>ê7ÏlÏpöK––S¯W¨7H!ƒÞ~»ÕÓòóÙ˜kÅã£ߨUM +.ö´l)ðÞ $…Ò'I˜Iž¤$ûöbÿûòK³&^¯'9Y€rrÌ,^~¹½‰SRþóë¬l¡'ŒýÿS(Ð"õFt½€%'7àPfjFn®çä“íñtõΚÅFjSŸš:UàmI «Çž$Þ–¤zFRö¶mÛPUe–ÉZGxUm°4ÄÓ¹³©½BIßW°!T 8ÞXíÚþ`h³dYP} Gñ^y¥Õ¼èìAðB”Ç=S\¹RàƒxR}BhT’B´×¿v­¹?Íœ©a¬‹ºú“O®gã¡¡½Z¤wo\ÂÖ­¶Ú'„>¼ÁZ´?H’lã¬Åê]®`x!ß;}úÁÂB9ø?ø@`‚yRh}lI2áCL¾ïµ×Ì$Ý~»4lÜhîmŸ|‚dÔ§´®w:£µg$xpS¨×¯˜+%éJâã,«ïÒ¥Añ²|U­OLÄàׄAR}lI2ბ¢½Öe‘wÆ ÷=û¬ýCÕcÕŸy¦»S'wj*“í kÏÈì¯%xÐ+ârWÞ6ÃËàÁÁðâV¾-Iáõ±÷$㽂zR}:w¶™“N8! êäÉkkƒ>fgû^}ÕsÍ5õC†¸;vt·iSŸxˆöáLjYî@±bÊçϤIÖ•·;%%¾Î’L¾Çž¤0úÔñ$oK’;9Ùíp¸Îz‡“EââÝ.—»UŠwE?ûÌúðÇðB\¯¾øâÁpÛ ø ìߺÕ÷ õ³f¹»vu·lÙhû ú5P³N¯)r<³g›U©¬ wG,?Iaô±%É„·÷¤1cܧž*Býرõ¸tÿýþ´4k/ô½ô’Yÿ¤$¶Rß¿ßúðkï^¸ú½õVw÷îHp#ì£%ê´,QÈá5y‘÷¦›Ì·ÏÌ §dDòƒyRh}‚{R_ÛB|³µ®Ký[µò,^Ìž™°Ý²¡*+Ë}ÜqÈS´öÑzP¤  )žyóÌm() —’aäÛ’VŸ`ž$ãOzɾ}ž… Céß¹³÷Þ{ýëÖ±M |Mn d< ­}Le`W! ±~ÊsC|¾ºøø`x;QöòëíI §=I¼»q$¹Ý ÙÙõW^Y§(áõGÌ 'xn¿×âþ‚¶ˆK ¯0üééî¶m£²–®µaÒêŠ{äH›æôé /’L>ÇÝ{B·nsϘaÝÙ «Oý¹ç÷$ iOî˜n`£eq›µ¬ ·¬|kÖÔõèaÐ?û°Ðª•ûœs<>êß°±e7zæÏ·±OpùPKˆZ ÇãZ¨³¥¦ZŸ·Ý³fÅKò±Íf**j].pO˜`.­ªªSÔÐú¸q5lyÃfÂÛ’äýðCïêÕ¾Õ«½"¼û®ç¡‡ÜW]UwƵ:XõçëRRDp§´Æk-)iƒÇEãyçùqïκc»vm0ù¶íåÅg f€ß²cèûé§Ú¸ø`x‘¬·¬ q±+`u½{[MYÛ²eh}ê- Ü3ámIªMJа½†¤ª"‘ž‡–C]›6AñZ´ð÷yÄ+.Š·Ó‡ýWc@OÊ™RêW¬°û¾ýש5ŠMEW8š™Ï44àd+ãý[¶˜Çî^@ ¦ŽþøüaÇ^~Ù„¯³#©&))Âöšìc}òÜw_à Ï>Ü:Ü…À[õÁ-·F ­H×@’Ã<«VYâ|?þXÛ§OM|¼Ÿ˜T;x0>NY7»jœNY¾÷í·­çêÎ: G ³>8 ´ní^´Èºh®›6ͤ]Oм½rÄóüóæ{îÞ]wÒI5qq¶øZÜ¢|è!3¯O>L¾­>,V­¥E}Àpû½¸Øæ¥ø¦Mî /¬íÜ¥¶ÃQµíÚ×}tm×nn|㉋³‘jÝ—^j’φˈ‡G Ü Ôöí[Û©smûL2Fúöõ<ý´u ƒž5íÛ›Åõ¤HÛ+Û§nÔ(ëÆ®ªëÆ«éС6¹vÊj—‹uÍV)µGå¾új<×f4“¯nÊ”`òm5j#OÖ¤- nêÔƒ¦{ |øòñƒ|¿ýfÁ¹–ž—^²‘'4Þßv£ߢ/z?ùÄûõ×þŒ ù„›4Òyë—-³j[kGRµîI¶7TU﫯Z_ŠãË<ß÷ß×ßu—{Î÷E¹/¿¼þž{|¿üÒ`r6l¨IM ap«> wœj-b›4q®Ôß}÷ÁŠŠèÏ ùÑájÚ´±•_Ó¥K¾jjÄŸÏçûùçêÖ­­ú×ñ¤hÛ´léûê«·‚¬§!j‡ #ß’ž¨6äŠTñîùóq„±=dÿwà€ÿ?jO9%„|ôðè“õ]{¨Í›ÊJßï¿×tëf«0OjD{–íÔ â õTWˆ¿úz¶ 8kV$òMúÈiªtD˜‹ªmr”Z<öýÍ7ìèVh³ÖÕáÃŽU­Z…•} Ÿ.#¢¿ªŠí†Ýtöî`ú'©1í ÀzõÂyÑ~Ã~è½pÞ/¾Ày+rù²>ÀU–bq•“R¾”ãp`÷G³úóóQ¶³‚{ø¸L¯¨`ç¡KJÐŽžwÞ©0 *ùµãÆù¾þG?t,M,š%ã 7ܹ!±õýku‡¡õ¯9å\IšBUbbãÛ+ºtqß}7›&wì`½ _[£†¨gy9k;j^Xèý꫺sÏ­R”FÈçxüOÑAZ¨–®–HH|›6uçŸ_wõÕî%KÐ|lUvöÙÕ½{W;—Ÿœ\;`@í¹çº¯½¶þþûÝK—Ö]ziíé§WwíZípT^ýÇeHÿþè(u³g»—/¯¿ï¾º¹sQçšùÈqˆò¡J‡¯Š1.g6ãc7¡á€Yæ(UÁC3þÈáAN ²FëW¥{<Ðc4\!cI6ãc‡‡Æ´%@Èd3>x ´?z Æüf|ìðÀcRe`¿”ciÆÇû-ûè–œf|Œñ°ß•áÍø#¹ZeHY•zf3>Æx¨´« gÚ ª ‚ÄP>ZùÿŸñP!·2‚`‹Çøz€Pv‚²`(Ò@I%”,P°(”

    `Ò~¸ `0À€gpÌÓ‰|õ ѳ`2ÉpÀ€'ÈçÖ[\íÐõoâxˆ@6g@Wmo\0àZ€ȲÅ66 /?“|‡Ç¹4~ö8à2€å4ZþÀ\MÍ$W+1ô†(ôoâxfY>]Ë× c¼ÜXÍŠÿ‚f [üv€†‘eïø` [\°°Ù‘“›-E<¾à]5“Ķ¡0`Mu8®þ¡w—Èõoâx¤r-K•å6RT[üK4µ„ÀãHø­Tò¹#:8ÊH™Èõ¶½1ƃ„ EcR –Ä~}ë¿aðÛiá×ù‘ãqàí`èðËÿSð¼=j¹a jȤr?añß Ña› A ™´<ûO€“ šD¤ÇÚCÏ’ê>=¾/(Ú'Õ”ñ8Ö½D¦ ”±ÛEƒR·Ö­KèܪJÛÍ$«¸”8Ÿ­3£Ó¿‰ãÓ(g•Ñå†jª-þd€Ï%’‚៤§ÚrÚ†h_{×]‡%äÞ|óQN'¿ËƒW[QéßÄñZ§ÓiTErŸ‘pkñ]6Pÿ _ Ê"‚ýà<«u˜HúuîÜ®®>N-ˆVÿ&ŽçíÑÊöŠå ª¸î5ähIÜvKØa¨kÇ-†É‚Ÿr*~ƒ`1wMÈd0ü§³fv¹øí&ÓnSTúGÛÞØãaŸ·Wª`JZîÄòÓÚD‚ǃ— ùÎ={r+ׄäðſ|ÑE“ããùp{éCê‘ëm{c‡½Õq9ÇŠÿ”A‘àñÙóêæ\1x°Õúo´ú7}<ìÑß¹í1ï1Æ…8+_Ý®‘ _@n„ñéqqÏMšÄÊÒ¹ÁÇK~}òä²%KL¾‚3±ãlaEÎÓ9ݺ¿I  ›öÔ»Käú7}<'I¥ ª„Vm#zÒ€ÇGŸ§‚T”ñëAéZŸ8ÛåZ=}ºp‘Ü„`K8ÜÐÔÔ¯é^¸d8Uê.êßôñOÚc„î Ä­‘~í=‡Åã뉺'ìr}7{¶Ê"áÆDÅ®IIHç@ù @´ú7}<ØB-‚´œÝv¢ûüÄLofÏÕ¹ì¿yÁ«Ý«£ä©šÌDU- ÉËé }´ú7}<èÐÀ•!BO*B¢ ª,€°ø‡pÙÍvØX~k§³ø¶Ûª…¡ U¯Õv9"¹kÉ’$Uåw¹àý‘ëßôñØ$k*eªzMkKæÑ‚*üMôZ}7r*Ê+ªƒ0Œ[üænèÏo1àE­»Dª´íýSð°K¯À¯»ô »ùV@ ‰»p½ôÎ?‹N¡ì¢ŠÔ¸¸j£épn;Éåâ·;™–£Ò?Úöþ)x¤]f´Ê3åú²Pÿ€úD‚Ç#A¯Ñ-ÿ JßäV‡‹¤w§N=Çåâúàêq®L„úGÛÞ?»$œ@ï2VV„×§éLO$øã¾¤8vöaíÛ +Wéã^TAÔzú‚ .‹Cù8Šº te"Ô?Úöþ)x Oˆ«ºÛ’£×TMø;@Y ¾3ÆÚÅÞË)zô¶Î½å–ÊåË£b¨rÙ2¬ÅyZv晋…FQ¥ ÉJÿÿ <Èx¼ŒâeÌõ :£Ï»y!åàá¬Ë ª"sï¹ãŽcÛ·ÿ`ÆŒ:ì:E½wìX™Œ¯‰§5AxâaÿŠè:kˆ!Ä ØG½†n: Zý£Å—Й§[ÎŽ ‰Ã““¯r%<¡ª_Ñ Îe“vj -¢'µOSd€œÜI$]G‡F CâWÒ·<¼ËõîôéU_Aë#ÈÄÆùóK/–Ãû3ftIIYxÚiøžbïw"‘»–.ݹdÉŽÅ‹Sãã·Ñ}ñuÉ_5"Õ_nrPHñ:ÀÅ´›^ ‹þ…o–‡´m÷ñÌ™’“‡vìxÉ A‹GZuÑE?Ì™³nÞ¼/½tù™cÎïÕ«k‹ý[´˜Ü¢ÅrÕñ.Ø-Š^‚ØÆÚV“Dkx<ðv@w€;èó‡â ø»@ÁC<<‰Ïžß½A<÷ƒL´MLLt:]GœªâÞzMŒ‹{åâ‹¿¾òÊ×/¾øáqãž|òÔÞ½Gµk×/!1 ”ÄŽeÏa­þeÔßsAÅÏ7nå:±ü=qn rRïQÕÖÇí§Ÿ^xÛmØ?J/þeîÜ×&O^>fÌô!CNìÜicõ»îÚ°`ÁʉÏëÝ?ê°J¿W$úXõ^¶S tºÓP_µÅ¯¥íç¾dÒÁ|þzú,‰ãqwuýüùË—ï[¶Œ»EÙ’¥¥äÙ7ßüó5×¼7mÚSç·ä´Ó¯è?`|ÇŽCZ&wPÕ®Ç0—ëB—ëZ§óÖlÀÓ,°{ñ&°ÙñK£Î¡õ/¡ ;>ê£~†JâñÍÖ¾£Ãå·¬8+!áôN: ´o?¶wïˆ]2jÔ3\€®óŸë®CÚða@0„c5¶çy'œÐÅé\àpl¡†GeOô,KÄTÿ(cèk²UìÓm å€KèOâîêWW^ùÉÌ™/Lœx×èÑs‡ ™Ø­Û)))]ãâŒãâãÏq%\¿”g@yŸ™‰}"ÈG$´`1ÍÏlæÀ|¿Á…V¨í6TÿRZ’a•ÐЕöæ_¢·ºÅlÁÆòñ£<ÿ4‚N‡õHJºg̘¼[n)¾ýößçÍûxÖ¬g'MºãÌ3¯8ñÄñ}û8ꨣZ¶¬ä“èŠØçpw_¢Ç¬ÏŽhì)2¡TW½TÏ9r¾µ4þ-zot:{ÉĆNÕHú†´Tp€ê7ÊåšïZ¤²Ýq<%ñ –%4øipüˆLÝξ[R>¥ÿã ÜI9~}Ö÷™Ýlô/¦ë7¶SÎNsâCÕRòÅRmI­¼Êét´6•¾Hü‹ËÕ;9ùË+®([º´]RÒÀÎí×ïÚaÃ<ûì·§N]{íµ·Ý†~ÃÂçλFŸÙÁéœépl°Ú;Ö÷ÑÚƒ¨£ŠæIÉ ²JõR[<2õC'~¿ µ)Zä‹h0ɧT.™†ûààïl„œbä ó>àR€ÙC´²’Þ7þ@Sc1}ËyÝP’­¯ èAíuP.¦ãüøyáj7\&ÓV à¢U(ö›ÞII N>¥kJÊè^½n9òiÓp]óæ”)ÈмáÃ/8öØ!G}4ùÐz6ÀÒÚ¶7›†ý<©»ì$×Ç.x P fÏöc§ÓªÉuJ ‘@;K~HT¾|9Ž„7ž2¬½Ó9”M§Ý/aú(ñeÚ ÁilíÚþ„†ºÔP_+Í¥f߯žì˜s„Àg€r3@Kƒsu?¸—¾±]MÛ9›Ù| u°×gõÊ|šó2Øt<ü­L£m»ÒW›ËAùÇ€­l\òu£‡„ïtù;hÐÛ@¥és©Äð7üô3)éò!Cpc°'NzvâÄ´E‹­½Ë–á ÷ùW agõéƒÔ8ýìZznôIN>-.îD’ð¹d4Z`9Ÿ¾(}:#IáÛ«‘´CW® á9ªPŒIu½dD3JM'!ð›I¹¨ä <¹‹Bc£º”·YWÐáºÐÝq ö$(?’«åÓ§Ñ>a"`Ë!­¶–>mKCøÉ{.}߉Ï ŽžÉÉoMz€ÖÐ;–,yU:œ„l¥/Z„3/EÂ0yÙàÁG9ãN£ñí9:h-ô/¤ñífRãNÒ·¶×jsƒ…RCÒ€Î8Lø•fš°øå‘´6a Y1Žu %É lùÀæ!Y>\ŧ±“È«–ЊÀ*ÿiPð©¥yØ#´Å‘àc\‘ÆÅíÑ#máBAƒ‚-ô-ô'â!|h똘x‚ÓÙ™¾¤Ï•îULcìK¤ÆEìý–¡á ³•}@ÄJ$´7dÊùrNþ7Ðhó(8…ÃÛÊ/¡ÞÇgœ6pÜx€ob[Ê?˜Ë‚À£oÑïy°á 3ÿ=¨åЊ ØNÿ<ú\à¯tm0±ŽG6[8³†xeúôÌ›oFVÊî¸ù@ÂöKlí¡§ºM œß»wǸ¸®4ýü¡ëC™þßÓ ~ý>…µ½ eFn%KìÄÙâQ¹‘49ÿƒ†¦âpxêtlvÉ¥ÕݶFWø8ÖYÇ×Ç1/Ö嬣'Mœêb¿À0¸pÚNጠïÔÿFuÓ‰õ|ZDØê“ÆŽI³¸C¥£Ë•âpômß~êˆOOŸ¾åæ›Kˆ0¤gßòåø¸ýØyÚÄÇ÷TÕSéQZ6K-Cn&îd]lí©“Þž’J¨¬$Ë ÄÕ˜cV|1ûLŒ-ç®f+6^Yñ…´ϦÇ®!jù8¶€-Á•Íú­ù2ã3©“þ›w~£Iå'‚ýŽ+a¤ í’åÐðµ‚æËî´º¹˜~·ãúr=“†Pîd¶í]K ¼‘ŠÒÝåÂ} ^íÛO1âéÓß3gX§Îè@=èÓþ³;%º†ø$÷"(||û]·•­|ˆÜžÂþ UPl+ Œ=~ 9éM}9‹öi•ÌZ’FGÅ©ÆõØÇôËC&™iǧ«¿‘À3h­ ä.×Ñ:ªH{òUèÚ™¾0)³–žæÐóõQô3 ØÈÈΠ:úm{³Ø’&*J?—«­ÃÑAQn£ßO¾Cñ]`|SÂÚG') {–Èž$ß›®J‰)B^0<.±Ž§_±ùŒíA`óãØLöÛ&¸© ºdvͱjFíÚ­°–´¶žBrþ Ê—~ žzÓSmý‘ÜYLbéצÑ<ú)ý\U ¼D¼µ½ÅFnèusM>¾- t²0ö@«£°'ð,)Åœ,|> ;@|Û¤÷£"ê¿9Ô¹\OÚËòy{8UÅd>œºZÐ]9Ó šù1(DÏ ún7Bý ið|Œf¾ÁÄÙ8¶¤à¢ñwF»WžþâÕÔÞ"Zs®ÒÇ·ßt£Gb©ÏEaO°à ½çrL7ƒ×­¬Hä±×bëhU}=M$, PxRÛ4b¨çÓCq6[7ú;š¬;s>‰ýò‰þÖöâFõôÎp ŠCé¨a?8€C4#,‡¦X~;1¾½MÓp$òekD…×úk±ÁôáC[‰ñõ[DARKsˆ§h%ömr§Ò Ø 9xm¥‡«ÙçÓLéò§òÅm4®Ó5>l¦ç§ûiâìGØÃ´7Ð4ÖÖo¹º—µ™Õâ/Y_4X®¦˜¦S|À¾Ÿñ¢ð@ONBþ´ð¦øMEä7ÅR]$@ÑI²ÊïD›Lkèéu¬OoÂê¶½tGÆG:ùß¼žm'©”es—HåófF¥'Éà%v•ÍÕðùãDú1¡ßôA ^î;˜s>ÛƒQ¬x íZQë+ÚX+’ªËx|(Á=…¹¤ßöÆY7ž¶o¼M³C´—w |a/'':ã–+*.76êcò!Êç¢Ò§ˆ“$‡bc2XȦç›cè¥QvH¤P‹‡6ÚÌÈÙFWûj\ËG£ãºëªè³†…4«ÑÆÛÊùd!(gÐwhý4ŠPDa¼üñýúõëÙ±#¾’pH=æP䃥9‘Ø¢ºe¡1ù ¿^LöAð&µpæß(‘„|´#ÀHZock÷l’Øî'ƒÝ®WçÄdÐsØ{´¦?‹vðá=£Ìd¿I©D¥ˆ^…“eï¶m‡ |Æé§9R0wˆòM #3;¨¸D(¦H‘YD“Ê´(ZKs©tHà±ñ?jÇØ£Æ=´ï‡øè³ç^´mŒ³ËÇ´ü³ö¶ï ";ÑBn½Äã/J¸äëh_5Zý­xR˜íñà+ŒþGg—«_Ïž¼üz(ò9IQéÃT*Ô ÜÑf)2>Ÿ½sd3ùKôžÛ$J4Œ'çÐñ·™؉ɩè%i4]§i›FlüŒ–é9f­î^¤M#[}pлQïQéo›zvŽÉªÚV"éPä@´ú˜I*´«ax¦úëØŽ€’/åË$ñ€“Mk<7r!kà“£óOÚ7â'ßúÓÖç³ôÞ!¬>Kišl´þ…úùÚyRù.ŸhÈRY¾Õ‘Ø_«Såýlñ›èhø0:Îc$ÉŠÄl§×—øä8žKøè'h{-*}î¦ó‘‡¢?WôS¥³iþk¶cÄÆÛLÚC–LBhû,(®"Ø…Ã+h¬®ô¶4˜:e(b(ñî)2ë@Úi½˜ÎŸþ@Ä4NŸ‡A¹D;Ñx(ú3…?¢aö/4Gö¤]à%ôÃ/ü9áPäË]6B}8IŽB›‡­³[Ôè,ÃjX®NÌ/ônbí»t¢³D÷ÐÖK-#—o«ÏÓôS‡®¿°#/ýÔçiëTÚƒÏ%U-ßÔe#lo käƒ#ßȤ)És"Äo£EÁ`jØK´:ŒVÌãiOåSzCz(ò­øA=ËèI“’M~¶Qxäí•I2T³$¦š‘à§…õhz“ö¾öCù‡S¾œ¿’^òÉãPäs;Úâùp×ýói,Á¹­>`FÕ^È—å[D[næˆ/ŽB!ù<‚ôE›°Kè(ÄVší³m$„—¯“dƒ‡€‰£ÐŸH3‡ÎÌþS?¢j/Ø u䇻kÄ@ Ù´YÕ—^->Ë~JÝ®¯Í"”/ÜÅô¢(ôÏeo‡ÕÑ4Îob 5¦½¦»j‘<=žg_¹)â¿£ßÓã9ßèäGÓ7šº{9t÷ %_"É EêŸ ܪïKû#9ŠQ·7ÐkòŒ"lÅ™M ¿–ÎÔ™ðÛéÛ¼Ùôáw¯¿Ñ ½í4IäØÉ'&ìõ‹üú¤Ó$Ô…Kb{!O/ÖAS<ß®¨ âq¹ŸBö †ÿÔ’{-¦0è^iÚËr ÁôòEQ.½9¼J›„ÔCo¯½B"iäh²ø4zHÿ˜ rxþ6æ^êlÚà裹Û)ÎÓç¤`úXù³ÊGïü”Q4 m$™‡Þ^ö¤)ø§:))ç«Aò› >‡¸ãè…Åw´ÀËÐϺ„ÿ-}*:–dSbÂ/Ùêƒù>MBóÙ/—)‡«½ ×Ñ V‰¹z~SÆo¦)ôë+øÌt+û‰m½N>gHgÂ^¾îIöú¤ƒã!}:¼í=K+ÈÕƒa ÿø ¶Õ¦^EÛµé3Š·Ù2¶^È'ŸïcÙÊ—‹d}øgk|úÒPëð´×F¡\ƒ8G®”iºSÓÇç°o`ÕéuTOvÊNyýo²1uYåëLØÈ—‹Yÿ‰ÎÁc“z$Ú 9\G®>ˆçrŽCŽü×á¿g¿˜Ã¾ëD‡¥Ãè[hêÊ–ðœ [ù`’L¯ÖŸ„²ŒŠFý5’r¶E‘~UåÌÿ^üoì·FÙ±çŽÔýqáð-Û¹ÁWÃl0$’ìåKžÄäo'9]hkãˆê¼8Gª,‚œ4ýoàñÿŽõ,½…êL›ô·ÐÆ3›e‡çž”£s8›¾„ýBcèêTì0¡WSäË¿7Èè½éhصt^u#›ºžHrd±“‡*Ÿ„ÖCGZàýBTÈÖ“R&ýãñú1`â ™ôÌoÚS ³é4Ÿ„è“ÂXè¼/qcûœÿyÑoL†—ßôñY I¬á­ÚÄR๙æb‡)Ÿ×)½ø’ƒÆ?_eeí¯¿îš¿µ·â­rBËoúø}÷Ü‹­öîØK}d’´«„0Gv\<™sÓPS㯬dáÀƒ>æT<ó·LÅi©¨F%¿éãwß¾Ø[ZZ·qc,õL#‚W³Ëa‘º'•κ,+1)«e«üƒª¿þ†Ñæóåõè™åJÊnÙŠy•##Ù)©œ9voWb6Œ8B&§d'µùìª8²“’³[µÎnÕ&+¡EVœ‹!ƒ¥X„rZ¶ÊTãP,’˜ê(?©%&ñ¬b‹VYŽ8­Uñ L‡Ä–YÎx페tÄëwiƒx,wçò•ØB/mÁfrR˜|VêÒZA¹n¼E¬±âFÉ­³hä×Ûå$%[3™†vÉæ o0Ò´‡/KÉHÚ1uš@–\xÏ,>÷¼]7ßRûË/åO G9ð`§FŸöíÝ[õÅ…#Gsi;¯™‹øŠU«Š&œßþýµüQ4flÞ1Çâ]|ååX«båJ”Ìðª“Ë/7¾âùç=EEž;0‚f-»qaÝæÍþªªÚß/ž0z•&¼êÓOÑZcŸzºø‚‰ˆA¤{ûö²7PwA‹9óú+µëi©]š=%ó†²?HP­@.ÎÐeñk‰>Üí¸t&ë2ñ ™ -vÝr+€ ÃO-v%F±mh‹†ÚÚ†êêì¶í°ÇUÿ=ƒTW»·nõíÙƒ#$²Uxò0”ŸÝ¾Ú…Moû÷³ŠÞ;1‰\²7=í;ð;ÖüøcC}=JØ÷Øc'óWWôûëÖ­+á…úíÛ€"«M*VÙ{/›69&ª¸YdÉòrOn®oÏ^ßîÝ||Þ÷ð#¬¥'—ô b¢´nìè-)ѪWVævì"„#Íh j,Ʊ+¢n\v,Í Þ®Lɪ‘Ødt†–(–Hb¡D÷¤Ê×_/[tÒS¾r¥Ÿ”ódgg&µà$±FnÙ²cÆ¥…£Î̈w•͹š1ävcgG!Y)mjÿýof÷_~Áäž»îf&®ªÊ?n(&s{ôäm«ÏË# Ò–(zRѸ³Ñ!ö,Yê)(@¿ÌÄ¡Ï_8üTÍ:ãÎÁ*{ï½O“¯œÉâó/àIììY­R2“p¥Ã{k”#NSxƬԶ(°†tcqÚtV}Ò…ñ Pvý<"é^$•÷È'3¹¯[Ÿ“ÃÚòÖ[˜´´K-ü ½]²©ÃÛŸ“ÄÎÓdèu˜òyDxRÍ?T¼òw 8Cìœ{mN§.ÆIò˱“²þõÜó"§à¤S¸œ¼ã‡âJ‰•®Z%JÑ^VOÚyÕ¡FN箕o½…[dÒ$'‘dèì ¯84 ×^ÇåïYq—D’æI8Ùpüž»ïa¥eeB#I²'1’ê33…b5ÿú#æ½Õ˜äíª\õ¢m»Lmà±t)—'EfºM—椒©Ólñ\oœ?åŠ>þ3|ôq†âäøâ &1)~v‡£y)2®¤t\JÄ'V¾ý¶hL–îI%—Lúìÿè#Èʱ(§[œž½t’&1+ë]ÃK$q}vK$¥ëž„$q¼ Iè/“$ WEc…}t’ÞK×[MíJLWãÐ#+ß~‡·KàõHûƒž%¸I—ø4‘d‹·’„­,ü~ß¹ýd&%g&§ðPó;¯¾†ÏÕ»—-Ïr®©êêDc²tO*¹dªÐçsÌÙûÐÃñ‰Hmñ_4­³tfÇû„Óil”I HbIÉ“8ÞD pý<êB¸6lØ‘„žä(•Ú•?äxS»2,6aÐ4Mç3M"V wD’ ^Ö[ÈÌHj‰ëœÀp1Z¹zu-Ž~~?®… Ï9ÁØÚ5€f8œik~þYoLÀ“ŠÉ“¸>Uß|ƒ<%%»/ÞóàƒžÂB]«é“֧IžTÌä(´Ë®;—¥Ç'pdÕ石Õà—_†’ïpæô;CZ\|Ìô Ÿ?r´hÏ´¶+Bù¦%4œm2Ýsxðù#Nã]]mÇåWì÷=îpELüSô9\øü§Ûõ®Þ®IÑÊggÌxl»È”‹Ž~Ç쫼¸ ¡ÿa¼dÚô?QŸÃ…·¶«xÚôFÈG’ä,Cíz¦Q¡#‚Ow%æ ^0v|f×îMAŸÃ…Os%ä AíêÖhùÀÖbS¾œlÆÇz, 6ãcg$ÑO®<ˆø6£¬f|Œñø‘©C„íÒÕ”¹-xQ3þHãÙ¹Y9‹'™6€f|,ñH’V¶ÕH ešsDf3>–xFÒV:De©HmÆÇ&ôV;ôÖàÒ›ñ1Àƒ¥2þ/lùU5å Íø#=‹ÕŠ6Ešñ±Çƒ[ƒç|ÝÖ­ÚQˆ†´.ÝdXåš5bË+wÔ™±Ñǯ¿È(¹fnìí#2!´,Ûʇ /Hb¯snº9Hj駃T&’Ž´>6x;’bf×HÚ¬çn¶KʑÈ—IªY·N€ &O‘›#I±ÑÇ&¢“T¬“KûˆȸÍÁq›-¢ÏI“…ܽûò¢ŠwÞeû{÷òüò$,Ê>é=;wâ)*,ÝÿÉ'Y'œ„EÛZ§Vÿü3†ÌãOØûÜóx¼ÍSVVùá‡iºðŠ;Ý„¥å¯¿!ôÙóô3˜Sv÷=¡%o–<)ööù°Y/–AÖ8%&ð!â9I•xZ˜øØyçrHHòUU±s&Ï=/HÂ|$€uåo¼Y_PÀ×mMNÙ¦¿bwÓÙ.}=OV}÷¿Ñ~®vûvqë*zÏ]ñÞê-’d·Qò¶äÖ›%Oн}D¬8 Î ùŽÃˆ×HZ³fïó/0#nÛ†™ù“ØÉrä)ï¼ó%’œØë½åå-®DÆÙеÁpÜÙ‚¤ºôôÌã†nKm·ÿ“OyRš$Œ‡l%)–ö½•ý³‰/9r¾^ê8ŒxNRÅš59#Gk#Þ !û^#åo½§vé/›'Éi+BO:õç&)rèøZÍ“>ج8ê‹‹™•y”OQyçOÌÑIBOB<úǾ¿¿*&0<ë#‘t4LŸÁ% ‚ÓûÄ» ’„>U?þÈI !IÚ$‘{ûˆRØdÌÚ$•m²dn2 :D|­îI˜Dzø¹jf¦}û6ã§<’'! â}öä„Fþä)Û{ôÚÞ­‡ i«îIù—LåÂe’˜'=ó7vÈkçNqw}àÀIª £ê¶’7IÃ]ìí³Iö$)8¥«)Ó¼¨‘x¤0žyÂIbͽ÷Å—dCgÃÌZZÊÎúÞ{¯ž{ÎyÁIrIrv,Ù¯?»—~“$Iv˜$orÄËÃ]Œí#2ñwôé6éWŽ–s6Š^ö$ÌÁe›6¾k$éL,­^»–õ÷âââ¢Ñq‘-ˆ‘IÚhñ$ÌÉ9kœv’Òí®þåüèÃ_[Ëf¾÷VË’Kn\d’¼Ñ8'ÅØ>ÏIrZ‹9N£Ð×HbÉËWð“§›Ô¸F’1ôD·~j×~%ú©Õ‹—lÕç¤`$aõÝO>…›OlDõzËü+_žTI™A$—.^"“{ûˆبCe´œAâÞŸ†GVû»1ÎÕù›[$§²)©¥ ÞG’û“ä&Ó^= <¶Á\ÁŒÞÈoÆÇÂÉ+󤱿4ãc¹¦TG®à´ÍiÆÇ zq'gðœf|ìðŒ¤õzÖz› NqÕK›ñ±ÆÃzcñzãu½.b½VÁÙŒ=I2e9¥«ÃRêhÆÇý‡dˆÛ5ãc‡=Á‡²¸¥ŽóÏÍøØáá*øÃRü‡.È6ÒŒ%¤„¨`HR©ÓNt3>Føÿ‰ÉÖgþhIEND®B`‚cups-2.2.7/cups/cupspm.md000664 000765 000024 00000113436 13255074424 015766 0ustar00msweetstaff000000 000000 --- title: CUPS Programming Manual author: Michael R Sweet copyright: Copyright © 2007-2017 by Apple Inc. All Rights Reserved. version: 2.2.5 ... > Please [file issues on Github](https://github.com/apple/cups/issues) to > provide feedback on this document. # Introduction CUPS provides the "cups" library to talk to the different parts of CUPS and with Internet Printing Protocol (IPP) printers. The "cups" library functions are accessed by including the `` header. CUPS is based on the Internet Printing Protocol ("IPP"), which allows clients (applications) to communicate with a server (the scheduler, printers, etc.) to get a list of destinations, send print jobs, and so forth. You identify which server you want to communicate with using a pointer to the opaque structure `http_t`. The `CUPS_HTTP_DEFAULT` constant can be used when you want to talk to the CUPS scheduler. ## Guidelines When writing software that uses the "cups" library: - Do not use undocumented or deprecated APIs, - Do not rely on pre-configured printers, - Do not assume that printers support specific features or formats, and - Do not rely on implementation details (PPDs, etc.) CUPS is designed to insulate users and developers from the implementation details of printers and file formats. The goal is to allow an application to supply a print file in a standard format with the user intent ("print four copies, two-sided on A4 media, and staple each copy") and have the printing system manage the printer communication and format conversion needed. Similarly, printer and job management applications can use standard query operations to obtain the status information in a common, generic form and use standard management operations to control the state of those printers and jobs. ## Terms Used in This Document A *Destination* is a printer or print queue that accepts print jobs. A *Print Job* is one or more documents that are processed by a destination using options supplied when creating the job. A *Document* is a file (JPEG image, PDF file, etc.) suitable for printing. An *Option* controls some aspect of printing, such as the media used. *Media* is the sheets or roll that is printed on. An *Attribute* is an option encoded for an Internet Printing Protocol (IPP) request. ## Compiling Programs That Use the CUPS API The CUPS libraries can be used from any C, C++, or Objective C program. The method of compiling against the libraries varies depending on the operating system and installation of CUPS. The following sections show how to compile a simple program (shown below) in two common environments. The following simple program lists the available destinations: #include #include int print_dest(void *user_data, unsigned flags, cups_dest_t *dest) { if (dest->instance) printf("%s/%s\n", dest->name, dest->instance); else puts(dest->name); return (1); } int main(void) { cupsEnumDests(CUPS_DEST_FLAGS_NONE, 1000, NULL, 0, 0, print_dest, NULL); return (0); } ### Compiling with Xcode In Xcode, choose *New Project...* from the *File* menu (or press SHIFT+CMD+N), then select the *Command Line Tool* under the macOS Application project type. Click *Next* and enter a name for the project, for example "firstcups". Click *Next* and choose a project directory. The click *Next* to create the project. In the project window, click on the *Build Phases* group and expand the *Link Binary with Libraries* section. Click *+*, type "libcups" to show the library, and then double-click on `libcups.tbd`. Finally, click on the `main.c` file in the sidebar and copy the example program to the file. Build and run (CMD+R) to see the list of destinations. ### Compiling with GCC From the command-line, create a file called `sample.c` using your favorite editor, copy the example to this file, and save. Then run the following command to compile it with GCC and run it: gcc -o simple `cups-config --cflags` simple.c `cups-config --libs` ./simple The `cups-config` command provides the compiler flags (`cups-config --cflags`) and libraries (`cups-config --libs`) needed for the local system. # Working with Destinations Destinations, which in CUPS represent individual printers or classes (collections or pools) of printers, are represented by the `cups_dest_t` structure which includes the name \(`name`), instance \(`instance`, saved options/settings), whether the destination is the default for the user \(`is_default`), and the options and basic information associated with that destination \(`num_options` and `options`). Historically destinations have been manually maintained by the administrator of a system or network, but CUPS also supports dynamic discovery of destinations on the current network. ## Finding Available Destinations The `cupsEnumDests` function finds all of the available destinations: int cupsEnumDests(unsigned flags, int msec, int *cancel, cups_ptype_t type, cups_ptype_t mask, cups_dest_cb_t cb, void *user_data) The `flags` argument specifies enumeration options, which at present must be `CUPS_DEST_FLAGS_NONE`. The `msec` argument specifies the maximum amount of time that should be used for enumeration in milliseconds - interactive applications should keep this value to 5000 or less when run on the main thread. The `cancel` argument points to an integer variable that, when set to a non-zero value, will cause enumeration to stop as soon as possible. It can be `NULL` if not needed. The `type` and `mask` arguments are bitfields that allow the caller to filter the destinations based on categories and/or capabilities. The destination's "printer-type" value is masked by the `mask` value and compared to the `type` value when filtering. For example, to only enumerate destinations that are hosted on the local system, pass `CUPS_PRINTER_LOCAL` for the `type` argument and `CUPS_PRINTER_DISCOVERED` for the `mask` argument. The following constants can be used for filtering: - `CUPS_PRINTER_CLASS`: A collection of destinations. - `CUPS_PRINTER_FAX`: A facsimile device. - `CUPS_PRINTER_LOCAL`: A local printer or class. This constant has the value 0 (no bits set) and is only used for the `type` argument and is paired with the `CUPS_PRINTER_REMOTE` or `CUPS_PRINTER_DISCOVERED` constant passed in the `mask` argument. - `CUPS_PRINTER_REMOTE`: A remote (shared) printer or class. - `CUPS_PRINTER_DISCOVERED`: An available network printer or class. - `CUPS_PRINTER_BW`: Can do B&W printing. - `CUPS_PRINTER_COLOR`: Can do color printing. - `CUPS_PRINTER_DUPLEX`: Can do two-sided printing. - `CUPS_PRINTER_STAPLE`: Can staple output. - `CUPS_PRINTER_COLLATE`: Can quickly collate copies. - `CUPS_PRINTER_PUNCH`: Can punch output. - `CUPS_PRINTER_COVER`: Can cover output. - `CUPS_PRINTER_BIND`: Can bind output. - `CUPS_PRINTER_SORT`: Can sort output (mailboxes, etc.) - `CUPS_PRINTER_SMALL`: Can print on Letter/Legal/A4-size media. - `CUPS_PRINTER_MEDIUM`: Can print on Tabloid/B/C/A3/A2-size media. - `CUPS_PRINTER_LARGE`: Can print on D/E/A1/A0-size media. - `CUPS_PRINTER_VARIABLE`: Can print on rolls and custom-size media. The `cb` argument specifies a function to call for every destination that is found: typedef int (*cups_dest_cb_t)(void *user_data, unsigned flags, cups_dest_t *dest); The callback function receives a copy of the `user_data` argument along with a bitfield \(`flags`) and the destination that was found. The `flags` argument can have any of the following constant (bit) values set: - `CUPS_DEST_FLAGS_MORE`: There are more destinations coming. - `CUPS_DEST_FLAGS_REMOVED`: The destination has gone away and should be removed from the list of destinations a user can select. - `CUPS_DEST_FLAGS_ERROR`: An error occurred. The reason for the error can be found by calling the `cupsLastError` and/or `cupsLastErrorString` functions. The callback function returns 0 to stop enumeration or 1 to continue. > Note that the callback function will likely be called multiple times for the > same destination, so it is up to the caller to suppress any duplicate > destinations. The following example shows how to use `cupsEnumDests` to get a filtered array of destinations: typedef struct { int num_dests; cups_dest_t *dests; } my_user_data_t; int my_dest_cb(my_user_data_t *user_data, unsigned flags, cups_dest_t *dest) { if (flags & CUPS_DEST_FLAGS_REMOVED) { /* * Remove destination from array... */ user_data->num_dests = cupsRemoveDest(dest->name, dest->instance, user_data->num_dests, &(user_data->dests)); } else { /* * Add destination to array... */ user_data->num_dests = cupsCopyDest(dest, user_data->num_dests, &(user_data->dests)); } return (1); } int my_get_dests(cups_ptype_t type, cups_ptype_t mask, cups_dest_t **dests) { my_user_data_t user_data = { 0, NULL }; if (!cupsEnumDests(CUPS_DEST_FLAGS_NONE, 1000, NULL, type, mask, (cups_dest_cb_t)my_dest_cb, &user_data)) { /* * An error occurred, free all of the destinations and * return... */ cupsFreeDests(user_data.num_dests, user_dasta.dests); *dests = NULL; return (0); } /* * Return the destination array... */ *dests = user_data.dests; return (user_data.num_dests); } ## Basic Destination Information The `num_options` and `options` members of the `cups_dest_t` structure provide basic attributes about the destination in addition to the user default options and values for that destination. The following names are predefined for various destination attributes: - "auth-info-required": The type of authentication required for printing to this destination: "none", "username,password", "domain,username,password", or "negotiate" (Kerberos). - "printer-info": The human-readable description of the destination such as "My Laser Printer". - "printer-is-accepting-jobs": "true" if the destination is accepting new jobs, "false" otherwise. - "printer-is-shared": "true" if the destination is being shared with other computers, "false" otherwise. - "printer-location": The human-readable location of the destination such as "Lab 4". - "printer-make-and-model": The human-readable make and model of the destination such as "ExampleCorp LaserPrinter 4000 Series". - "printer-state": "3" if the destination is idle, "4" if the destination is printing a job, and "5" if the destination is stopped. - "printer-state-change-time": The UNIX time when the destination entered the current state. - "printer-state-reasons": Additional comma-delimited state keywords for the destination such as "media-tray-empty-error" and "toner-low-warning". - "printer-type": The `cups_ptype_t` value associated with the destination. - "printer-uri-supported": The URI associated with the destination; if not set, this destination was discovered but is not yet setup as a local printer. Use the `cupsGetOption` function to retrieve the value. For example, the following code gets the make and model of a destination: const char *model = cupsGetOption("printer-make-and-model", dest->num_options, dest->options); ## Detailed Destination Information Once a destination has been chosen, the `cupsCopyDestInfo` function can be used to gather detailed information about the destination: cups_dinfo_t * cupsCopyDestInfo(http_t *http, cups_dest_t *dest); The `http` argument specifies a connection to the CUPS scheduler and is typically the constant `CUPS_HTTP_DEFAULT`. The `dest` argument specifies the destination to query. The `cups_dinfo_t` structure that is returned contains a snapshot of the supported options and their supported, ready, and default values. It also can report constraints between different options and values, and recommend changes to resolve those constraints. ### Getting Supported Options and Values The `cupsCheckDestSupported` function can be used to test whether a particular option or option and value is supported: int cupsCheckDestSupported(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, const char *option, const char *value); The `option` argument specifies the name of the option to check. The following constants can be used to check the various standard options: - `CUPS_COPIES`: Controls the number of copies that are produced. - `CUPS_FINISHINGS`: A comma-delimited list of integer constants that control the finishing processes that are applied to the job, including stapling, punching, and folding. - `CUPS_MEDIA`: Controls the media size that is used, typically one of the following: `CUPS_MEDIA_3X5`, `CUPS_MEDIA_4X6`, `CUPS_MEDIA_5X7`, `CUPS_MEDIA_8X10`, `CUPS_MEDIA_A3`, `CUPS_MEDIA_A4`, `CUPS_MEDIA_A5`, `CUPS_MEDIA_A6`, `CUPS_MEDIA_ENV10`, `CUPS_MEDIA_ENVDL`, `CUPS_MEDIA_LEGAL`, `CUPS_MEDIA_LETTER`, `CUPS_MEDIA_PHOTO_L`, `CUPS_MEDIA_SUPERBA3`, or `CUPS_MEDIA_TABLOID`. - `CUPS_MEDIA_SOURCE`: Controls where the media is pulled from, typically either `CUPS_MEDIA_SOURCE_AUTO` or `CUPS_MEDIA_SOURCE_MANUAL`. - `CUPS_MEDIA_TYPE`: Controls the type of media that is used, typically one of the following: `CUPS_MEDIA_TYPE_AUTO`, `CUPS_MEDIA_TYPE_ENVELOPE`, `CUPS_MEDIA_TYPE_LABELS`, `CUPS_MEDIA_TYPE_LETTERHEAD`, `CUPS_MEDIA_TYPE_PHOTO`, `CUPS_MEDIA_TYPE_PHOTO_GLOSSY`, `CUPS_MEDIA_TYPE_PHOTO_MATTE`, `CUPS_MEDIA_TYPE_PLAIN`, or `CUPS_MEDIA_TYPE_TRANSPARENCY`. - `CUPS_NUMBER_UP`: Controls the number of document pages that are placed on each media side. - `CUPS_ORIENTATION`: Controls the orientation of document pages placed on the media: `CUPS_ORIENTATION_PORTRAIT` or `CUPS_ORIENTATION_LANDSCAPE`. - `CUPS_PRINT_COLOR_MODE`: Controls whether the output is in color \(`CUPS_PRINT_COLOR_MODE_COLOR`), grayscale \(`CUPS_PRINT_COLOR_MODE_MONOCHROME`), or either \(`CUPS_PRINT_COLOR_MODE_AUTO`). - `CUPS_PRINT_QUALITY`: Controls the generate quality of the output: `CUPS_PRINT_QUALITY_DRAFT`, `CUPS_PRINT_QUALITY_NORMAL`, or `CUPS_PRINT_QUALITY_HIGH`. - `CUPS_SIDES`: Controls whether prints are placed on one or both sides of the media: `CUPS_SIDES_ONE_SIDED`, `CUPS_SIDES_TWO_SIDED_PORTRAIT`, or `CUPS_SIDES_TWO_SIDED_LANDSCAPE`. If the `value` argument is `NULL`, the `cupsCheckDestSupported` function returns whether the option is supported by the destination. Otherwise, the function returns whether the specified value of the option is supported. The `cupsFindDestSupported` function returns the IPP attribute containing the supported values for a given option: ipp_attribute_t * cupsFindDestSupported(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option); For example, the following code prints the supported finishing processes for a destination, if any, to the standard output: cups_dinfo_t *info = cupsCopyDestInfo(CUPS_HTTP_DEFAULT, dest); if (cupsCheckDestSupported(CUPS_HTTP_DEFAULT, dest, info, CUPS_FINISHINGS, NULL)) { ipp_attribute_t *finishings = cupsFindDestSupported(CUPS_HTTP_DEFAULT, dest, info, CUPS_FINISHINGS); int i, count = ippGetCount(finishings); puts("finishings supported:"); for (i = 0; i < count; i ++) printf(" %d\n", ippGetInteger(finishings, i)); } else puts("finishings not supported."); The "job-creation-attributes" option can be queried to get a list of supported options. For example, the following code prints the list of supported options to the standard output: ipp_attribute_t *attrs = cupsFindDestSupported(CUPS_HTTP_DEFAULT, dest, info, "job-creation-attributes"); int i, count = ippGetCount(attrs); for (i = 0; i < count; i ++) puts(ippGetString(attrs, i, NULL)); ### Getting Default Values There are two sets of default values - user defaults that are available via the `num_options` and `options` members of the `cups_dest_t` structure, and destination defaults that available via the `cups_dinfo_t` structure and the `cupsFindDestDefault` function which returns the IPP attribute containing the default value(s) for a given option: ipp_attribute_t * cupsFindDestDefault(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option); The user defaults from `cupsGetOption` should always take preference over the destination defaults. For example, the following code prints the default finishings value(s) to the standard output: const char *def_value = cupsGetOption(CUPS_FINISHINGS, dest->num_options, dest->options); ipp_attribute_t *def_attr = cupsFindDestDefault(CUPS_HTTP_DEFAULT, dest, info, CUPS_FINISHINGS); if (def_value != NULL) { printf("Default finishings: %s\n", def_value); } else { int i, count = ippGetCount(def_attr); printf("Default finishings: %d", ippGetInteger(def_attr, 0)); for (i = 1; i < count; i ++) printf(",%d", ippGetInteger(def_attr, i)); putchar('\n'); } ### Getting Ready (Loaded) Values The finishings and media options also support queries for the ready, or loaded, values. For example, a printer may have punch and staple finishers installed but be out of staples - the supported values will list both punch and staple finishing processes but the ready values will only list the punch processes. Similarly, a printer may support hundreds of different sizes of media but only have a single size loaded at any given time - the ready values are limited to the media that is actually in the printer. The `cupsFindDestReady` function finds the IPP attribute containing the ready values for a given option: ipp_attribute_t * cupsFindDestReady(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option); For example, the following code lists the ready finishing processes: ipp_attribute_t *ready_finishings = cupsFindDestReady(CUPS_HTTP_DEFAULT, dest, info, CUPS_FINISHINGS); if (ready_finishings != NULL) { int i, count = ippGetCount(ready_finishings); puts("finishings ready:"); for (i = 0; i < count; i ++) printf(" %d\n", ippGetInteger(ready_finishings, i)); } else puts("no finishings are ready."); ### Media Size Options CUPS provides functions for querying the dimensions and margins for each of the supported media size options. The `cups_size_t` structure is used to describe a media size: typedef struct cups_size_s { char media[128]; int width, length; int bottom, left, right, top; } cups_size_t; The `width` and `length` members specify the dimensions of the media in hundredths of millimeters (1/2540th of an inch). The `bottom`, `left`, `right`, and `top` members specify the margins of the printable area, also in hundredths of millimeters. The `cupsGetDestMediaByName` and `cupsGetDestMediaBySize` functions lookup the media size information using a standard media size name or dimensions in hundredths of millimeters: int cupsGetDestMediaByName(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *media, unsigned flags, cups_size_t *size); int cupsGetDestMediaBySize(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, int width, int length, unsigned flags, cups_size_t *size); The `media`, `width`, and `length` arguments specify the size to lookup. The `flags` argument specifies a bitfield controlling various lookup options: - `CUPS_MEDIA_FLAGS_DEFAULT`: Find the closest size supported by the printer. - `CUPS_MEDIA_FLAGS_BORDERLESS`: Find a borderless size. - `CUPS_MEDIA_FLAGS_DUPLEX`: Find a size compatible with two-sided printing. - `CUPS_MEDIA_FLAGS_EXACT`: Find an exact match for the size. - `CUPS_MEDIA_FLAGS_READY`: If the printer supports media sensing or configuration of the media in each tray/source, find the size amongst the "ready" media. If a matching size is found for the destination, the size information is stored in the structure pointed to by the `size` argument and 1 is returned. Otherwise 0 is returned. For example, the following code prints the margins for two-sided printing on US Letter media: cups_size_t size; if (cupsGetDestMediaByName(CUPS_HTTP_DEFAULT, dest, info, CUPS_MEDIA_LETTER, CUPS_MEDIA_FLAGS_DUPLEX, &size)) { puts("Margins for duplex US Letter:"); printf(" Bottom: %.2fin\n", size.bottom / 2540.0); printf(" Left: %.2fin\n", size.left / 2540.0); printf(" Right: %.2fin\n", size.right / 2540.0); printf(" Top: %.2fin\n", size.top / 2540.0); } else puts("Margins for duplex US Letter are not available."); You can also enumerate all of the sizes that match a given `flags` value using the `cupsGetDestMediaByIndex` and `cupsGetDestMediaCount` functions: int cupsGetDestMediaByIndex(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, int n, unsigned flags, cups_size_t *size); int cupsGetDestMediaCount(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, unsigned flags); For example, the following code prints the list of ready media and corresponding margins: cups_size_t size; int i; int count = cupsGetDestMediaCount(CUPS_HTTP_DEFAULT, dest, info, CUPS_MEDIA_FLAGS_READY); for (i = 0; i < count; i ++) { if (cupsGetDestMediaByIndex(CUPS_HTTP_DEFAULT, dest, info, i, CUPS_MEDIA_FLAGS_READY, &size)) { printf("%s:\n", size.name); printf(" Width: %.2fin\n", size.width / 2540.0); printf(" Length: %.2fin\n", size.length / 2540.0); printf(" Bottom: %.2fin\n", size.bottom / 2540.0); printf(" Left: %.2fin\n", size.left / 2540.0); printf(" Right: %.2fin\n", size.right / 2540.0); printf(" Top: %.2fin\n", size.top / 2540.0); } } Finally, the `cupsGetDestMediaDefault` function returns the default media size: int cupsGetDestMediaDefault(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, unsigned flags, cups_size_t *size); ### Localizing Options and Values CUPS provides three functions to get localized, human-readable strings in the user's current locale for options and values: `cupsLocalizeDestMedia`, `cupsLocalizeDestOption`, and `cupsLocalizeDestValue`: const char * cupsLocalizeDestMedia(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, unsigned flags, cups_size_t *size); const char * cupsLocalizeDestOption(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, const char *option); const char * cupsLocalizeDestValue(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, const char *option, const char *value); ## Submitting a Print Job Once you are ready to submit a print job, you create a job using the `cupsCreateDestJob` function: ipp_status_t cupsCreateDestJob(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, int *job_id, const char *title, int num_options, cups_option_t *options); The `title` argument specifies a name for the print job such as "My Document". The `num_options` and `options` arguments specify the options for the print job which are allocated using the `cupsAddOption` function. When successful, the job's numeric identifier is stored in the integer pointed to by the `job_id` argument and `IPP_STATUS_OK` is returned. Otherwise, an IPP error status is returned. For example, the following code creates a new job that will print 42 copies of a two-sided US Letter document: int job_id = 0; int num_options = 0; cups_option_t *options = NULL; num_options = cupsAddOption(CUPS_COPIES, "42", num_options, &options); num_options = cupsAddOption(CUPS_MEDIA, CUPS_MEDIA_LETTER, num_options, &options); num_options = cupsAddOption(CUPS_SIDES, CUPS_SIDES_TWO_SIDED_PORTRAIT, num_options, &options); if (cupsCreateDestJob(CUPS_HTTP_DEFAULT, dest, info, &job_id, "My Document", num_options, options) == IPP_STATUS_OK) printf("Created job: %d\n", job_id); else printf("Unable to create job: %s\n", cupsLastErrorString()); Once the job is created, you submit documents for the job using the `cupsStartDestDocument`, `cupsWriteRequestData`, and `cupsFinishDestDocument` functions: http_status_t cupsStartDestDocument(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, int job_id, const char *docname, const char *format, int num_options, cups_option_t *options, int last_document); http_status_t cupsWriteRequestData(http_t *http, const char *buffer, size_t length); ipp_status_t cupsFinishDestDocument(http_t *http, cups_dest_t *dest, cups_dinfo_t *info); The `docname` argument specifies the name of the document, typically the original filename. The `format` argument specifies the MIME media type of the document, including the following constants: - `CUPS_FORMAT_JPEG`: "image/jpeg" - `CUPS_FORMAT_PDF`: "application/pdf" - `CUPS_FORMAT_POSTSCRIPT`: "application/postscript" - `CUPS_FORMAT_TEXT`: "text/plain" The `num_options` and `options` arguments specify per-document print options, which at present must be 0 and `NULL`. The `last_document` argument specifies whether this is the last document in the job. For example, the following code submits a PDF file to the job that was just created: FILE *fp = fopen("filename.pdf", "rb"); size_t bytes; char buffer[65536]; if (cupsStartDestDocument(CUPS_HTTP_DEFAULT, dest, info, job_id, "filename.pdf", 0, NULL, 1) == HTTP_STATUS_CONTINUE) { while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) if (cupsWriteRequestData(CUPS_HTTP_DEFAULT, buffer, bytes) != HTTP_STATUS_CONTINUE) break; if (cupsFinishDestDocument(CUPS_HTTP_DEFAULT, dest, info) == IPP_STATUS_OK) puts("Document send succeeded."); else printf("Document send failed: %s\n", cupsLastErrorString()); } fclose(fp); # Sending IPP Requests CUPS provides a rich API for sending IPP requests to the scheduler or printers, typically from management or utility applications whose primary purpose is not to send print jobs. ## Connecting to the Scheduler or Printer The connection to the scheduler or printer is represented by the HTTP connection type `http_t`. The `cupsConnectDest` function connects to the scheduler or printer associated with the destination: http_t * cupsConnectDest(cups_dest_t *dest, unsigned flags, int msec, int *cancel, char *resource, size_t resourcesize, cups_dest_cb_t cb, void *user_data); The `dest` argument specifies the destination to connect to. The `flags` argument specifies whether you want to connect to the scheduler (`CUPS_DEST_FLAGS_NONE`) or device/printer (`CUPS_DEST_FLAGS_DEVICE`) associated with the destination. The `msec` argument specifies how long you are willing to wait for the connection to be established in milliseconds. Specify a value of `-1` to wait indefinitely. The `cancel` argument specifies the address of an integer variable that can be set to a non-zero value to cancel the connection. Specify a value of `NULL` to not provide a cancel variable. The `resource` and `resourcesize` arguments specify the address and size of a character string array to hold the path to use when sending an IPP request. The `cb` and `user_data` arguments specify a destination callback function that returns 1 to continue connecting or 0 to stop. The destination callback work the same way as the one used for the `cupsEnumDests` function. On success, a HTTP connection is returned that can be used to send IPP requests and get IPP responses. For example, the following code connects to the printer associated with a destination with a 30 second timeout: char resource[256]; http_t *http = cupsConnectDest(dest, CUPS_DEST_FLAGS_DEVICE, 30000, NULL, resource, sizeof(resource), NULL, NULL); ## Creating an IPP Request IPP requests are represented by the IPP message type `ipp_t` and each IPP attribute in the request is representing using the type `ipp_attribute_t`. Each IPP request includes an operation code (`IPP_OP_CREATE_JOB`, `IPP_OP_GET_PRINTER_ATTRIBUTES`, etc.) and a 32-bit integer identifier. The `ippNewRequest` function creates a new IPP request: ipp_t * ippNewRequest(ipp_op_t op); The `op` argument specifies the IPP operation code for the request. For example, the following code creates an IPP Get-Printer-Attributes request: ipp_t *request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); The request identifier is automatically set to a unique value for the current process. Each IPP request starts with two IPP attributes, "attributes-charset" and "attributes-natural-language", followed by IPP attribute(s) that specify the target of the operation. The `ippNewRequest` automatically adds the correct "attributes-charset" and "attributes-natural-language" attributes, but you must add the target attribute(s). For example, the following code adds the "printer-uri" attribute to the IPP Get-Printer-Attributes request to specify which printer is being queried: const char *printer_uri = cupsGetOption("device-uri", dest->num_options, dest->options); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer_uri); > Note: If we wanted to query the scheduler instead of the device, we would look > up the "printer-uri-supported" option instead of the "device-uri" value. The `ippAddString` function adds the "printer-uri" attribute the the IPP request. The `IPP_TAG_OPERATION` argument specifies that the attribute is part of the operation. The `IPP_TAG_URI` argument specifies that the value is a Universal Resource Identifier (URI) string. The `NULL` argument specifies there is no language (English, French, Japanese, etc.) associated with the string, and the `printer_uri` argument specifies the string value. The IPP Get-Printer-Attributes request also supports an IPP attribute called "requested-attributes" that lists the attributes and values you are interested in. For example, the following code requests the printer state attributes: static const char * const requested_attributes[] = { "printer-state", "printer-state-message", "printer-state-reasons" }; ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", 3, NULL, requested_attributes); The `ippAddStrings` function adds an attribute with one or more strings, in this case three. The `IPP_TAG_KEYWORD` argument specifies that the strings are keyword values, which are used for attribute names. All strings use the same language (`NULL`), and the attribute will contain the three strings in the array `requested_attributes`. CUPS provides many functions to adding attributes of different types: - `ippAddBoolean` adds a boolean (`IPP_TAG_BOOLEAN`) attribute with one value. - `ippAddInteger` adds an enum (`IPP_TAG_ENUM`) or integer (`IPP_TAG_INTEGER`) attribute with one value. - `ippAddIntegers` adds an enum or integer attribute with one or more values. - `ippAddOctetString` adds an octetString attribute with one value. - `ippAddOutOfBand` adds a admin-defined (`IPP_TAG_ADMINDEFINE`), default (`IPP_TAG_DEFAULT`), delete-attribute (`IPP_TAG_DELETEATTR`), no-value (`IPP_TAG_NOVALUE`), not-settable (`IPP_TAG_NOTSETTABLE`), unknown (`IPP_TAG_UNKNOWN`), or unsupported (`IPP_TAG_UNSUPPORTED_VALUE`) out-of-band attribute. - `ippAddRange` adds a rangeOfInteger attribute with one range. - `ippAddRanges` adds a rangeOfInteger attribute with one or more ranges. - `ippAddResolution` adds a resolution attribute with one resolution. - `ippAddResolutions` adds a resolution attribute with one or more resolutions. - `ippAddString` adds a charset (`IPP_TAG_CHARSET`), keyword (`IPP_TAG_KEYWORD`), mimeMediaType (`IPP_TAG_MIMETYPE`), name (`IPP_TAG_NAME` and `IPP_TAG_NAMELANG`), naturalLanguage (`IPP_TAG_NATURAL_LANGUAGE`), text (`IPP_TAG_TEXT` and `IPP_TAG_TEXTLANG`), uri (`IPP_TAG_URI`), or uriScheme (`IPP_TAG_URISCHEME`) attribute with one value. - `ippAddStrings` adds a charset, keyword, mimeMediaType, name, naturalLanguage, text, uri, or uriScheme attribute with one or more values. ## Sending the IPP Request Once you have created the IPP request, you can send it using the `cupsDoRequest` function. For example, the following code sends the IPP Get-Printer-Attributes request to the destination and saves the response: ipp_t *response = cupsDoRequest(http, request, resource); For requests like Send-Document that include a file, the `cupsDoFileRequest` function should be used: ipp_t *response = cupsDoFileRequest(http, request, resource, filename); Both `cupsDoRequest` and `cupsDoFileRequest` free the IPP request. If a valid IPP response is received, it is stored in a new IPP message (`ipp_t`) and returned to the caller. Otherwise `NULL` is returned. The status from the most recent request can be queried using the `cupsLastError` function, for example: if (cupsLastError() >= IPP_STATUS_ERROR_BAD_REQUEST) { /* request failed */ } A human-readable error message is also available using the `cupsLastErrorString` function: if (cupsLastError() >= IPP_STATUS_ERROR_BAD_REQUEST) { /* request failed */ printf("Request failed: %s\n", cupsLastErrorString()); } ## Processing the IPP Response Each response to an IPP request is also an IPP message (`ipp_t`) with its own IPP attributes (`ipp_attribute_t`) that includes a status code (`IPP_STATUS_OK`, `IPP_STATUS_ERROR_BAD_REQUEST`, etc.) and the corresponding 32-bit integer identifier from the request. For example, the following code finds the printer state attributes and prints their values: ipp_attribute_t *attr; if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL) { printf("printer-state=%s\n", ippEnumString("printer-state", ippGetInteger(attr, 0))); } else puts("printer-state=unknown"); if ((attr = ippFindAttribute(response, "printer-state-message", IPP_TAG_TEXT)) != NULL) { printf("printer-state-message=\"%s\"\n", ippGetString(attr, 0, NULL))); } if ((attr = ippFindAttribute(response, "printer-state-reasons", IPP_TAG_KEYWORD)) != NULL) { int i, count = ippGetCount(attr); puts("printer-state-reasons="); for (i = 0; i < count; i ++) printf(" %s\n", ippGetString(attr, i, NULL))); } The `ippGetCount` function returns the number of values in an attribute. The `ippGetInteger` and `ippGetString` functions return a single integer or string value from an attribute. The `ippEnumString` function converts a enum value to its keyword (string) equivalent. Once you are done using the IPP response message, free it using the `ippDelete` function: ippDelete(response); ## Authentication CUPS normally handles authentication through the console. GUI applications should set a password callback using the `cupsSetPasswordCB2` function: void cupsSetPasswordCB2(cups_password_cb2_t cb, void *user_data); The password callback will be called when needed and is responsible for setting the current user name using `cupsSetUser` and returning a string: const char * cups_password_cb2(const char *prompt, http_t *http, const char *method, const char *resource, void *user_data); The `prompt` argument is a string from CUPS that should be displayed to the user. The `http` argument is the connection hosting the request that is being authenticated. The password callback can call the `httpGetField` and `httpGetSubField` functions to look for additional details concerning the authentication challenge. The `method` argument specifies the HTTP method used for the request and is typically "POST". The `resource` argument specifies the path used for the request. The `user_data` argument provides the user data pointer from the `cupsSetPasswordCB2` call. cups-2.2.7/cups/cupspm.opacity000664 000765 000024 00000231460 13255074424 017034 0ustar00msweetstaff000000 000000 –bplist00Ô‘’X$versionX$objectsY$archiverT$top† ¯copqrswx€„Ž•šŸ£¨­²·»ÅÏÓÙîôúûÿ :;ABNOPQRX\bfnoVsuy}…’“—˜¤¨«µ»ÁÂÆÇÍÎÒí,/27?EJNOPQRSTUVWX^b{~†‹‘’“”•–›œ£¶ÃÏÛæçèéïðñòóôõö÷øùúû .16;@ABCDEFJ^afkpqrstuv{†’ž©ª«¬­®¯°±²³´µ¼ËÞáæëðñòóôõöú !"#$%&+6BNYZ[\]^_`abcdel{Ž‘–› ¡¢£¤¥¦ª¾ÁÆËÐÑÒÓÔÕÖÛæòýþÿ .16;@ABCDEFJ^afkpqrstuv{†’žŸ ¡¢£¤¥¦¬¼½ÁÕØÝâçèéêëìíòóôý "%*/456789:>RUZ_defghijoz†’ž¦§¨©ª«¬­®¯°±²ºÈÉÍáäéîóôõö÷øùþÿ'*/49:;<=>?DEFUhkpuz{|}~€„˜› ¥ª«¬­®¯°µÀÌØäðü ,789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXfuˆ‹•š›œžŸ £®ºÆÒÞêö    & 2 > J V b n z † ’ ž ª ¶ Â Î Ú æ ò þ   + 7 C O [ g s  ‹ — £ ¯ » Ç Ó Ü è ô  $ 0 9 E Q ] i u ™ ¥ ® º Æ Ò Þ ê ö    & 2 > J V b n z † ’ ž ª ¶ Â Î Ú æ ò þ  " . : F R ^ j v ‚ Ž š ¦ ² ¾ Ê Ö â î ú !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^Öåøû    (+05:;<=>?@EP\ht€‚ƒ„…†‡ˆ‰Š‹ŒŽ–¥¸»ÀÅÊËÌÍÎÏÐÔèëðõúûüýþÿ(4@KLMNOPQRSTUVWXYZ[\]fuˆ‹•š›œžŸ ¤¸»ÀÅÊËÌÍÎÏÐÕàëìíîïðñö %*+,-./04HKPUZ[\]^_`ep|ˆ“”•–—˜™š›œžŸ¦µÈËÐÕÚÛÜÝÞßàäøû     ,789:;<=>?@FUhkpuz{|}~€„˜› ¥ª«¬­®¯°µÀËÌÍÎÏÐÑÖåøý !58=BGHIJKLMR]iu‰Š‹ŒŽ‘’“”•¬¿ÂÅÊÏÔÕÖרÙÚÞòõúÿ  &2>JV^_`abcdefghijklmnopzˆ‰¡¤©®³´µ¶·¸¹¾¿ÀÎÏÓçêïôùúûüýþÿ-05:?@ABCDEJKLZ[_sv{€…†‡ˆ‰Š‹‘’ ¡¥¹¼ÁÆËÌÍÎÏÐÑÖרâèðñòöúû  !"#69<AFKNOPQRSTXloty~€‚ƒ„‰’–¢¼½¾áñòóôõö÷ûÿ  !01CSTUVWXY]aeijkorstwxy|}Ÿ ¡¢£¤¥©­³´µ¹º»¿ÂÃÄÅÛÜÝÞßàáâãMåæçëï  @ W: $%&'()*+567>?Iª@JKLMUVWXYefg9hi}~€‚ƒ„…†‡ŠU$nullß0  !"#$%&'()*+,-./0123456789:;9<=>>@AB::CDEFGH:IJKLMN>PQRSI@UVWXYB[\]B>BaM9WpolySidWpixDTypSbmPUresUnTsecCUcolSpUoBgImSparVnPaStrWactLaysUsnShsWpenTTypSmodTzoomTallRVsavStDTmetaVspiDecVgenNamUorTypVpixRadTfrasUimSizUbgColVnPaFilV$classVactTraVsavPrDTtarsVcurFraSenVVlineThVautoBTUshLayXrectCRadUresiMTcurRWspiSegsTtrasWfilSensUmainCVtraTrgVcurObjVguiLinTvarsVlasModWpolyStaUbgTyp°€P €€ y€ #@¸ÊHü•A€ Å€#@T¯#?ð€­®€ã{€› «#-€ € #@I€d¬€ €€ Óde"fjnWNS.keysZNS.objects£ghi€€€£klm€€€ € \kMDItemTitle^kMDItemAuthors_kMDItemCopyrightXNew IconÒe"tv¡u€€ ]Michael SweetÒyz{|Z$classnameX$classesWNSArray¢}~WNSArrayXNSObject_Copyright 2017 Michael SweetÒyz‚_NSMutableDictionary£ƒ~\NSDictionaryÒe"…v§†‡ˆ‰ŠXŒ€ €€€€€€€ Ô"‘’‘”SresSdel€#?À€€Òyz–—\PCResolution£˜™~\PCResolutionXPCObjectÔ"‘œ‘”€#?Ѐ€Ô"‘I‘”€€€Ô"‘¥‘”€#@€€Ô"‘ª‘”€#@€€Ô"‘¯‘”€#@#ÿÿÿÿÿÿ€€Ô"‘´‘”€#?à€€Òe"¸v¡R€€ Ö¼½¾"¿‘ÁÂAÄTlaysUanimTUlAcLs€€€#?¹™™™™™šyzÓde"ÆÊn£ghi€€€£kÌm€€€ € Òe"Ðv¡u€€ Òe"Ôv£ÕÖ×€€CM€ ÜÚÛÜÝÞßà"áâã::Måæ@èéêMìRUblendWmaskTypUedMskSnamWmaskLaySvisUalConTobjsTisShTopac€"€ €#€!€&#@Y€ÕÞàá">ÕñB退€€ €!Óde"õ÷n¡ö€¡ø€€ #@#ÿÿÿÿÿÿÓ"æýþ€#@#ÿÿÿÿÿÿ€Òyz_PCBitmapContext¤~_PCBitmapContextZPCDrawableXPCObjectÒe"v € Òyz  ]PCNormalLayer¥   ~]PCNormalLayerWPCLayerZPCDrawableXPCObjectTTextÓde"n¡€$¡€%€ #@#ÿÿÿÿÿÿÓ"Õþ€#@#ÿÿÿÿÿÿ€Òe"v¢€'€<€ ß!"#$ß%&'(")*+ ,-.ìMM@ìV@M45VÕ@8VMTrectTstrYSisIXstrTBndsTstrXSshXTantiSflVVattStrSshYUalPixSangSflH€( €;€)€ €:_{{0, 0}, {140, 60}}Ó<"=>?@XNSString\NSAttributes€*€9€+_Programming ManualÓde"CHM¤DEFG€,€-€.€/¤IJKL€0€2€4€7€8_NSParagraphStyleWNSColorVNSFontVNSKernÓS"T>VWZNSTabStops[NSAlignment€€1ÒyzYZ_NSMutableParagraphStyle£Y[~_NSParagraphStyleÓ]^"_`aUNSRGB\NSColorSpaceF1 1 1€3ÒyzcdWNSColor¢e~WNSColorÔghi"jklmVNSSizeXNSfFlagsVNSName#@1€5€6_HelveticaNeue-BoldÒyzpqVNSFont¢r~VNSFontÒyzƒt¢ƒ~Òyzvw_NSAttributedString¢x~_NSAttributedStringÓz^"{9aWNSWhiteD1 0€3Òyz~\PCTextVector¦€‚ƒ„~\PCTextVector_PCRectBasedVectorXPCVectorZPCDrawableXPCObjectß!"#$ß%&'(")*+ ,-†ìMM@ìV@M4VÕ@VM€= €;€>€ €B_{{0, 135}, {140, 50}}Ó<"=”?–€?€9€@TCUPSÓde"™žM¤DEFG€,€-€.€/¤IJ¡L€0€2€A€7€8Ôghi"¥klm#@D€5€6Óz^"©9aD1 0€3ÜÚÛÜÝÞßà"áâã::M­®@°é²MìR€H€D €I€!€L€ÕÞàá">Ö¸B退C€E€ €!Óde"¼¾n¡½€F¡¿€G€ #@#ÿÿÿÿÿÿÓ"®Äþ€D#@#ÿÿÿÿÿÿ€VMascotÓde"ÈÊn¡É€J¡Ë€K€ #@#ÿÿÿÿÿÿÓ"ÖÐþ€C#@#ÿÿÿÿÿÿ€Òe"Óv¯ÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêë€M€‰€³€Ý);gx‰Ï¢Ð$Nt–Äø +<€ ß!î#ïßð&'("ñò*+,-óôMö@øV@MûüýVÖ@VMVfConPtVconPtsWfilPropVlConPtUstros€N€r€‡ €O €ˆ€v€b€C _{{0, 0}, {0, 0}}ß"     M`:W <">$Ô&':()`*MVrelLP2SblHWgradAngUradGCTfilTWrelRadCVfilPosSaEqStypXrelLinP1VfilColVrelLP1UfilImVothColXrelLinP2SgEqUfilGrSrEqXgradStopUpgNumSbEqSfil€[#@V€€W€X€a€`€Z€P€Y€€Q€M€\€^€]€R€_Óz^"-9aB1€3Ó]^"0`aL0.6 0.6 0.6€3Òe"36¢45€S€U€VÕ89:">øV<>ValtColSlocScol€€O€P€TÒyz@A^PCGradientStop¤BCD~^PCGradientStopZPCDrawableXPCObjectÕ89:">øì$>€€O€Q€TÒyzKL^NSMutableArray£KM~WNSArrayV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Q0QtW100 - tS100ÒyzYZ_PCDrawVectorProperties¤[\]~_PCDrawVectorPropertiesZPCDrawableXPCObjectÒe"_6¡`€c€Vßc"    def:gWhMj:kl:Wn>pqÔ:Mt'I:\(x`*zTcapSSposUinvisSwidUdashS€m€i€j€q€`€l€€k€e€M€n€^€d€]€f€_€oÓz^"|9aB0€3Ó]^"`aL0.4 0.4 0.4€3Òe"‚6¢ƒ„€g€h€VÕ89:">`V\>€€c€d€TÕ89:">`ìq>€€c€e€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"—v¢˜L€p€7€ #@ Òyzž_PCStrokeVectorProperties¥Ÿ ¡¢~_PCStrokeVectorProperties_PCDrawVectorPropertiesZPCDrawableXPCObjectÛ¤¥¦§¨©ª«" M@MÔ°±M³´µ:YhasConPt1VcPLinkUisCloRptTnextYhasConPt2VconPt1VconPt2 €M€„€s€…€†€zÜ©«"·§ ª¤¥¨¦M¹µô¼`½M@ÔÁMTprev€ƒ€z€r€€‚ €M€tÜ©«"·§ ª¤¥¨¦Mŵ±È`ÉM@ÔÍM€€€z€s€~€ €M€uÜ©«"·§ ª¤¥¨¦MѵÁÔ`ÕMMÔüM€}€z€t€{€|€M€vÛ¤ ¦¥§©ª«"·M`MÔMàMâãµÍ€M€w€x€y€z€u_({24.692968750000006, 131.27734375000003}_({24.692968750000006, 131.27734375000003}_({24.692968750000006, 131.27734375000003}Òyzêë]PCCustomPoint¤ìíî~]PCCustomPointZPCDrawableXPCObject_'{37.49296875000001, 126.27734375000003}_'{37.49296875000001, 126.27734375000003}_'{37.49296875000001, 126.27734375000003}_({34.419726562500003, 94.499414062500023}_({34.419726562500003, 94.499414062500023}_({34.419726562500003, 94.499414062500023}_({21.992968750000003, 101.97734375000002}_({21.992968750000003, 101.97734375000002}_({21.992968750000003, 101.97734375000002}_({24.692968750000006, 129.17734375000003}_({24.692968750000006, 129.17734375000003}_({24.692968750000006, 129.17734375000003}Òe"ü6¥ô±ÁÍü€r€s€t€u€v€VÒyz^PCCustomVector§   ~^PCCustomVector\PCPathVector_PCRectBasedVectorXPCVectorZPCDrawableXPCObjectß!î#ïßð&'("ñò*+,-óM@V@MûVÖ@VM€N€¢€² €Š €ˆ€¥€•€C ß"     M`:W"<$>&Õ(':(+`*M€“€€€a€`€’€P€‘€€‹€‰€”€^€]€Œ€_Ó]^"/`aL0.6 0.6 0.6€3Òe"26¢34€€Ž€VÕ89:">V<>€€Š€P€TÕ89:">ì&>€€Š€‹€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"G6¡H€–€Vßc"    def:gWKMM:Nl:WQ>STÕ:MW'I:\([`*]€Ÿ€›€œ€q€`€ž€€€—€‰€ €^€d€]€˜€_€¡Ó]^"_`aL0.4 0.4 0.4€3Òe"b6¢cd€™€š€VÕ89:">HV\>€€–€d€TÕ89:">HìT>€€–€—€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"wv¢˜L€p€7€ Û¤¥¦§¨©ª«" M@MÕ€Mƒ„µ: €‰€¯€£€°€±€zÜ©«"·§ ª¤¥¨¦Mˆµ‹`ŒM@ÕM€®€z€¢€¬€­ €‰€¤Ü©«"·§ ª¤¥¨¦M”µ—`˜M@ÕM€«€z€£€©€ª €‰€¥Û¤ ¦¥§©ª«"·M`MÕ@£M¥¦µ€‰ €¦€§€¨€z€¤_({71.592968750000011, 93.577343750000026}_({71.592968750000011, 93.577343750000026}_({71.592968750000011, 93.577343750000026}_({71.592968750000011, 95.477343750000017}_({71.592968750000011, 95.477343750000017}_({71.592968750000011, 95.477343750000017}_({32.692968750000006, 86.977343750000017}_({32.692968750000006, 86.977343750000017}_({32.692968750000006, 86.977343750000017}_({19.209375000000009, 94.662695312500034}_({19.209375000000009, 94.662695312500034}_({19.209375000000009, 94.662695312500034}Òe"¶6¤€¢€£€¤€¥€Vß!î#ïßð&'("ñò*+,-ó¾MÀ@ÂV@MûÆÇVÖ@VM€N€Ì€Ü €´ €ˆ€Ï€¿€C ß"     ÌMÎ`Ï:WÒ<Ô>ÖÖØ':(Û`*M€½€¹€º€a€`€¼€P€»€€µ€³€¾€^€]€¶€_Ó]^"ß`aL0.6 0.6 0.6€3Òe"â6¢ã䀷€¸€VÕ89:">ÂV<>€€´€P€TÕ89:">ÂìÖ>€€´€µ€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"÷6¡ø€À€Vßc"    def:gWûMý:þl:W>Ö:M'I:\( `* €É€Å€Æ€q€`€È€€Ç€Á€³€Ê€^€d€]€Â€_€ËÓ]^"`aL0.4 0.4 0.4€3Òe"6¢€Ã€Ä€VÕ89:">øV\>€€À€d€TÕ89:">øì>€€À€Á€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"'v¢˜L€p€7€ Û¤¥¦§¨©ª«" M@MÖ01M34µ: €³€Ù€Í€Ú€Û€zÜ©«"·§ ª¤¥¨¦M8µ¾;`<M@Ö@M€Ø€z€Ì€Ö€× €³€ÎÜ©«"·§ ª¤¥¨¦MDµ1G`HMMÖÆM€Õ€z€Í€Ó€Ô€³€ÏÛ¤ ¦¥§©ª«"·M`MÖMSMUVµ@€³€Ð€Ñ€Ò€z€Î_'{37.49296875000001, 126.27734375000003}_'{37.49296875000001, 126.27734375000003}_'{37.49296875000001, 126.27734375000003}_({70.792968750000014, 126.27734375000003}_({70.792968750000014, 126.27734375000003}_({70.792968750000014, 126.27734375000003}_({67.492968750000017, 97.077343750000026}_({67.492968750000017, 97.077343750000026}_({67.492968750000017, 97.077343750000026}_({34.834375000000009, 94.292187500000026}_({34.834375000000009, 94.292187500000026}_({34.834375000000009, 94.292187500000026}Òe"f6¤¾1@ƀ̀̀΀πVß!î#ïßð&'("ñò*+,-ónMp@rV@MûvwVÖ@VM€N€ö €Þ €ˆ€ø€é€C ß"     |M~`:W‚<„>†×ˆ':(‹`*M€ç€ã€ä€a€`€æ€P€å€€ß€Ý€è€^€]€à€_Ó]^"`aL0.6 0.6 0.6€3Òe"’6¢“”€á€â€VÕ89:">rV<>€€Þ€P€TÕ89:">rì†>€€Þ€ß€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"§6¡¨€ê€Vßc"    def:gW«M­:®l:W±>³´×:M·'I:\(»`*½€ó€ï€ð€q€`€ò€€ñ€ë€Ý€ô€^€d€]€ì€_€õÓ]^"¿`aL0.4 0.4 0.4€3Òe"Â6¢ÃÄ€í€î€VÕ89:">¨V\>€€ê€d€TÕ89:">¨ì´>€€ê€ë€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"×v¢˜L€p€7€ Û¤¥¦§¨©ª«" M@M×àáMãäµ: €Ý€ÿ€÷€zÜ©«"·§ ª¤¥¨¦Mèµnë`ìM@×vM€þ€z€ö€ü€ý €Ý€øÛ¤ ¦¥§©ª«"·M`M×@÷Mùúµá€Ý €ù€ú€û€z€÷_({27.686914062500001, 131.48457031250001}_({27.686914062500001, 131.48457031250001}_({27.686914062500001, 131.48457031250001}_({48.176953125000004, 130.83671875000002}_({48.176953125000004, 130.83671875000002}_({48.176953125000004, 130.83671875000002}_({70.792968750000014, 126.27734375000003}_({70.792968750000014, 126.27734375000003}_({70.792968750000014, 126.27734375000003}Òe"6£náv€ö€÷€ø€Vß!î#ïßð&'("ñò*+,-óM@V@MûVÖ@VM€N(  €ˆ€C ß"     M`:W"<$>&Ø(':(+`*M   €a€` €P €€^€]€_Ó]^"/`aL0.6 0.6 0.6€3Òe"26¢34€VÕ89:">V<>€€P€TÕ89:">ì&>€€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"G6¡H€Vßc"    def:gWKMM:Nl:WQ>STØ:MW'I:\([`*]€q€`€€^€d€]€_Ó]^"_`aL0.4 0.4 0.4€3Òe"b6¢cd€VÕ89:">HV\>€€d€TÕ89:">HìT>€€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"wv¢˜L€p€7€ Û¤¥¦§¨©ª«" M@MØ€Mƒ„µ: %&'€zÜ©«"·§ ª¤¥¨¦Mˆµ‹`ŒM@ØM$€z"# Û¤ ¦¥§©ª«"·M`MØ@—M™šµ  !€z_({67.211328124999994, 81.120703125000006}_({67.211328124999994, 81.120703125000006}_({67.211328124999994, 81.120703125000006}_({32.975781249999997, 72.560742187500011}_({32.975781249999997, 72.560742187500011}_({32.975781249999997, 72.560742187500011}_({17.499999999999993, 83.085156250000011}_({17.499999999999993, 83.085156250000011}_({17.499999999999993, 83.085156250000011}Òe"§6£€Vß!#­ßð&'(®"ò*+,-¯M±@>V@M¶·¸VÖ@VMSpt1Spt2*8 € 9:+€C _*{{0.79296875, 19.177343750000006}, {0, 0}}Òe"¾6¡¿,€Vßc"    def:gWÂMÄ:Ål:WÈ>ÊËÙ:MÎ'I:\(Ò`*Ô512€q€`4€3-)6€^€d€].€_7Ó]^"Ö`aL0.4 0.4 0.4€3Òe"Ù6¢ÚÛ/0€VÕ89:">¿V\>€,€d€TÕ89:">¿ìË>€,-€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"îv¢˜L€p€7€ _({32.592968750000004, 86.977343750000017}_'{32.88203124999999, 72.722070312500009}Òyzõö\PCLineVector§÷øùúûü~\PCLineVector\PCPathVector_PCRectBasedVectorXPCVectorZPCDrawableXPCObjectß!î#ïßð&'("ñò*+,-óÿM@V@MûVÖ@VM€NUf < €ˆYH€C ß"      M::W>Ú':(`*@FBC€a€`E=D€>;G€^€]?€_ Óz^" 9aF1 0.5€3Ó]^"#`aL0.6 0.6 0.6€3Òe"&6¢'(@A€VÕ89:">V<>€<€P€TÕ89:">ì>€<>€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe";6¡<I€Vßc"    def:gW?MA:Bl:WE>GHÚ:MK'I:\(O`*QRNO€q€`Q€PJ;S€^€d€]K€_TÓ]^"S`aL0.4 0.4 0.4€3Òe"V6¢WXLM€VÕ89:"><V\>€I€d€TÕ89:"><ìH>€IJ€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"kv¢˜L€p€7€ Û¤¥¦§¨©ª«" M@MÚtuMwxµ: ;cVde€zÜ©«"·§ ª¤¥¨¦M|µÿ`€M@Ú„Mb€zU`a ;WÜ©«"·§ ª¤¥¨¦Mˆµu‹`ŒM@ÚM_€zV]^ ;XÜ©«"·§ ª¤¥¨¦M”µ„—`˜M@ÚM\€zWZ[ ;Yؤ ¦¥"©·M`@Ú@µM ; €zX_({66.913704302362703, 123.62500000000003}_({66.913704302362703, 123.62500000000003}_({66.913704302362703, 123.62500000000003}_({64.569173052362714, 100.17285156250001}_({64.569173052362714, 100.17285156250001}_({64.569173052362714, 100.17285156250001}_({38.146712114862709, 97.893945312500009}_({38.146712114862709, 97.893945312500009}_({38.146712114862709, 97.893945312500009}_({40.808430864862707, 123.53730468750003}_({40.808430864862707, 123.53730468750003}_({40.808430864862707, 123.53730468750003}Òe"³6¥ÿu„UVWXY€Vß!#­ßð&'(®"ò*+,-»M½@>V@M·ÄVÖ@VMhv € w:i€C _*{{0.79296875, 19.177343750000006}, {0, 0}}Òe"Ê6¡Ëj€Vßc"    def:gWÎMÐ:Ñl:WÔ>Ö×Û:MÚ'I:\(Þ`*àsop€q€`r€qkgt€^€d€]l€_uÓ]^"â`aL0.4 0.4 0.4€3Òe"å6¢æçmn€VÕ89:">ËV\>€j€d€TÕ89:">Ëì×>€jk€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"úv¢˜L€p€7€ _({43.292968750000007, 114.37734375000002}_({49.557031249999994, 116.97949218750001}ß!#­ßð&'(®"ò*+,-M@>V@M· VÖ@VMy‡ € ˆ:z€C _*{{0.79296875, 19.177343750000006}, {0, 0}}Òe"6¡{€Vßc"    def:gWM:l:W>Ü:M 'I:\($`*&„€€q€`ƒ€‚|x…€^€d€]}€_†Ó]^"(`aL0.4 0.4 0.4€3Òe"+6¢,-~€VÕ89:">V\>€{€d€TÕ89:">ì>€{|€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"@v¢˜L€p€7€ _({56.892968750000009, 116.27734375000003}_({62.518359375000003, 114.21093750000001}ß!î#ïßð&'("ñò*+,-óHMJ@LV@MûPQVÖ@VM€N¢Î Š €ˆ¬•€C ß"     VMX`Y:W\<^>`Ýb':(e`*M“€a€`’€P‘€‹‰”€^€]Œ€_Ó]^"i`aL0.6 0.6 0.6€3Òe"l6¢mnŽ€VÕ89:">LV<>€Š€P€TÕ89:">Lì`>€Š‹€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"6¡‚–€Vßc"    def:gW…M‡:ˆl:W‹>ŽÝ:M‘'I:\(•`*—Ÿ›œ€q€`ž€—‰ €^€d€]˜€_¡Ó]^"™`aL0.4 0.4 0.4€3Òe"œ6¢ž™š€VÕ89:">‚V\>€–€d€TÕ89:">‚ìŽ>€–—€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"±v¢˜L€p€7€ Û¤¥¦§¨©ª«" M@Mݺ»M½¾µ: ‰Ë£ÌÍ€zÜ©«"·§ ª¤¥¨¦MµHÅ`ÆM@ÝÊMÊ€z¢ÈÉ ‰¤Ü©«"·§ ª¤¥¨¦Mε»Ñ`ÒM@ÝÖMÇ€z£ÅÆ ‰¥Ü©«"·§ ª¤¥¨¦MÚµÊÝ`ÞM@ÝâMÄ€z¤Âà ‰¦Ü©«"·§ ª¤¥¨¦MæµÖé`êM@ÝîMÁ€z¥¿À ‰§Ü©«"·§ ª¤¥¨¦Mòµâõ`öM@ÝúM¾€z¦¼½ ‰¨Ü©«"·§ ª¤¥¨¦Mþµî`M@ÝM»€z§¹º ‰©Ü©«"·§ ª¤¥¨¦M µú `M@ÝM¸€z¨¶· ‰ªÜ©«"·§ ª¤¥¨¦Mµ`M@ÝMµ€z©³´ ‰«Ü©«"·§ ª¤¥¨¦M"µ%`&M@ÝPM²€zª°± ‰¬Û¤ ¦¥§©ª«"·M`MÝ@1M34µ‰ ­®¯€z«_{61.318359375, 105.9109375}_{61.318359375, 105.9109375}_{61.318359375, 105.9109375}_({59.838281250000001, 103.91562500000001}_({59.838281250000001, 103.91562500000001}_({59.838281250000001, 103.91562500000001}_({58.323437499999997, 102.57363281250001}_({58.323437499999997, 102.57363281250001}_({58.323437499999997, 102.57363281250001}_({56.571874999999999, 101.42890625000001}_({56.571874999999999, 101.42890625000001}_({56.571874999999999, 101.42890625000001}_#{55.167578124999999, 100.920703125}_#{55.167578124999999, 100.920703125}_#{55.167578124999999, 100.920703125}_({53.516992187500001, 100.66718750000001}_({53.516992187500001, 100.66718750000001}_({53.516992187500001, 100.66718750000001}_${50.775195312499996, 100.8064453125}_${50.775195312499996, 100.8064453125}_${50.775195312499996, 100.8064453125}_${49.391406249999996, 100.9509765625}_${49.391406249999996, 100.9509765625}_${49.391406249999996, 100.9509765625}_({47.762304687499999, 101.78964843750001}_({47.762304687499999, 101.78964843750001}_({47.762304687499999, 101.78964843750001}_${45.963281249999994, 103.0330078125}_${45.963281249999994, 103.0330078125}_${45.963281249999994, 103.0330078125}_({43.932226562499999, 105.15937500000001}_({43.932226562499999, 105.15937500000001}_({43.932226562499999, 105.15937500000001}Òe"Y6«H»ÊÖâîúP¢£¤¥¦§¨©ª«¬€Vß!î#ïßð&'("ñò*+,-óhMj@lV@MûpqVÖ@VM€NÜ¡ Ð €ˆPÛ€C ß"     vMx:y:W|\~>€Þ‚':(…`*@ÙÕÖ€a€`Ø€d×€ÑÏÚ€^€]Ò€_ Ó]^"‰`aL0.4 0.4 0.4€3Òe"Œ6¢ŽÓÔ€VÕ89:">lV\>€Ѐd€TÕ89:">lì€>€ÐÑ€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"¡6 €VÛ¤¥¦§¨©ª«" MMMÞ¨©M«¬µ:Ϟݟ €zÜ©«"·§ ª¤¥¨¦@°µh³`´MMÞ¸M €zÜ›œÏÞÜ©«"·§ ª¤¥¨¦@¼µ©¿`À@MÞÄM š€zݘ™ ÏßÜ©«"·§ ª¤¥¨¦@ȵ¸Ë`Ì@MÞÐM —€zÞ•– ÏàÜ©«"·§ ª¤¥¨¦@ÔµÄ×`Ø@MÞÜM ”€zß’“ ÏáÜ©«"·§ ª¤¥¨¦@àµÐã`ä@MÞèM ‘€zà ÏâÜ©«"·§ ª¤¥¨¦@ìµÜï`ð@MÞôM Ž€zጠÏãÜ©«"·§ ª¤¥¨¦@øµèû`ü@MÞ M ‹€z≊ ÏäÜ©«"·§ ª¤¥¨¦@ µô ` @MÞ M ˆ€zㆇ ÏåÜ©«"·§ ª¤¥¨¦@ µ ` @MÞ M …€z䃄 ÏæÜ©«"·§ ª¤¥¨¦@ µ ` @MÞ $M ‚€zå€ ÏçÜ©«"·§ ª¤¥¨¦@ (µ  +` ,@MÞ 0M €zæ}~ ÏèÜ©«"·§ ª¤¥¨¦@ 4µ $ 7` 8@MÞ <M |€zçz{ ÏéÜ©«"·§ ª¤¥¨¦@ @µ 0 C` D@MÞ HM y€zèwx ÏêÜ©«"·§ ª¤¥¨¦@ Lµ < O` P@MÞ TM v€zétu ÏëÜ©«"·§ ª¤¥¨¦M Xµ H [` \@MÞ `Ms€zêqr ÏìÜ©«"·§ ª¤¥¨¦@ dµ T g` hMMÞ lM p€zënoÏíÜ©«"·§ ª¤¥¨¦@ pµ ` s` t@MÞ xM m€zìkl ÏîÜ©«"·§ ª¤¥¨¦@ |µ l ` €@MÞ „M j€zíhi ÏïÜ©«"·§ ª¤¥¨¦@ ˆµ x ‹` Œ@MÞ M g€zîef ÏðÜ©«"·§ ª¤¥¨¦@ ”µ „ —` ˜@MÞ œM d€zïbc ÏñÜ©«"·§ ª¤¥¨¦@  µ £` ¤@MÞ ¨M a€zð_` ÏòÜ©«"·§ ª¤¥¨¦@ ¬µ œ ¯` °@MÞ ´M ^€zñ\] ÏóÜ©«"·§ ª¤¥¨¦@ ¸µ ¨ »` ¼@MÞ ÀM [€zòYZ ÏôÜ©«"·§ ª¤¥¨¦@ ĵ ´ Ç` È@MÞ ÌM X€zóVW ÏõÜ©«"·§ ª¤¥¨¦@ е À Ó` Ô@MÞ ØM U€zôST ÏöÜ©«"·§ ª¤¥¨¦@ ܵ Ì ß` à@MÞ äM R€zõPQ Ï÷Ü©«"·§ ª¤¥¨¦@ èµ Ø ë` ì@MÞ ðM O€zöMN ÏøÜ©«"·§ ª¤¥¨¦@ ôµ ä ÷` ø@MÞ üM L€z÷JK ÏùÜ©«"·§ ª¤¥¨¦@ µ ð ` @MÞ M I€zøGH ÏúÜ©«"·§ ª¤¥¨¦M µ ü ` @MÞ MF€zùDE ÏûÙ¤ ¦¥¨©"·M`@ÞM Mµ  Ïü€zúÜ©«"·§ ª¤¥¨¦M !µ  $: %MMÞ )MC€zûABÏýÜ©«"·§ ª¤¥¨¦M -µ  0` 1MMÞ 5M@€zü>?ÏþÜ©«"·§ ª¤¥¨¦M 9µ ) <` =MMÞ AM=€zý;<ÏÿÜ©«"·§ ª¤¥¨¦@ Eµ 5 H` IMMÞ MM :€zþ89ÏÜ©«"·§ ª¤¥¨¦@ Qµ A T` U@MÞ YM 7€zÿ56 ÏÜ©«"·§ ª¤¥¨¦@ ]µ M `` a@MÞ eM 4€z23 ÏÜ©«"·§ ª¤¥¨¦@ iµ Y l` m@MÞ qM 1€z/0 ÏÜ©«"·§ ª¤¥¨¦M uµ e x` y@MÞ }M.€z,- ÏÜ©«"·§ ª¤¥¨¦M µ q „` …MMÞ ‰M+€z)*ÏÜ©«"·§ ª¤¥¨¦M µ } ` ‘MMÞ •M(€z&'ÏÜ©«"·§ ª¤¥¨¦@ ™µ ‰ œ` MMÞ ¡M %€z#$ÏÜ©«"·§ ª¤¥¨¦@ ¥µ • ¨` ©@MÞ ­M "€z ! ÏÜ©«"·§ ª¤¥¨¦@ ±µ ¡ ´` µ@MÞ ¹M €z Ï Ü©«"·§ ª¤¥¨¦@ ½µ ­ À` Á@MÞ ÅM €z Ï Ü©«"·§ ª¤¥¨¦M ɵ ¹ Ì` Í@MÞ ÑM€z  Ï Ù¤ ¦¥¨©"·M`@ÞM ØMµ Å Ï €z Ü©«"·§ ª¤¥¨¦M Þµ Ñ á: âMMÞ æM€z Ï Ü©«"·§ ª¤¥¨¦M êµ Ø í` îMMÞ òM€z ÏÜ©«"·§ ª¤¥¨¦@ öµ æ ù` úMMÞ þM €z ÏÜ©«"·§ ª¤¥¨¦@ µ ò ` @MÞ M  €z  ÏÜ©«"·§ ª¤¥¨¦@ µ þ ` @MÞ M  €z ÏÜ©«"·§ ª¤¥¨¦@ µ ` @MÞ "M €z ÏÜ©«"·§ ª¤¥¨¦M &µ  )` *@MÞ .M€z ÏÙ¤ ¦¥¨©"·M`@ÞM 5Mµ " Ï€zÜ©«"·§ ª¤¥¨¦M ;µ . >: ?MMÞ CM€zÿÏÜ©«"·§ ª¤¥¨¦M Gµ 5 J` KMMÞ OMþ€züýÏÜ©«"·§ ª¤¥¨¦M Sµ C V` WMMÞ [Mû€zùúÏÜ©«"·§ ª¤¥¨¦M _µ O b` cMMÞ gMø€zö÷ÏÜ©«"·§ ª¤¥¨¦@ kµ [ n` oMMÞ sM õ€zóôÏÜ©«"·§ ª¤¥¨¦@ wµ g z` {@MÞ M ò€zðñ ÏÜ©«"·§ ª¤¥¨¦@ ƒµ s †` ‡@MÞ ‹M ï€zíî ÏÜ©«"·§ ª¤¥¨¦@ µ  ’` “@MÞ —M ì€zêë ÏÜ©«"·§ ª¤¥¨¦M ›µ ‹ ž` Ÿ@MÞ £Mé€zçè ÏÙ¤ ¦¥¨©"·M`@ÞM ªMµ — Ï€zÜ©«"·§ ª¤¥¨¦M °µ £ ³: ´MMÞ ¸Mæ€zäåÏÜ©«"·§ ª¤¥¨¦@ ¼µ ª ¿` ÀMMÞ ÄM ã€záâÏ Ü©«"·§ ª¤¥¨¦@ ȵ ¸ Ë` Ì@MÞ ÐM à€zÞß Ï!Ü©«"·§ ª¤¥¨¦@ Ôµ Ä ×` Ø@MÞ ÜM Ý€z ÛÜ Ï"Ü©«"·§ ª¤¥¨¦@ ൠРã` ä@MÞ èM Ú€z!ØÙ Ï#Ü©«"·§ ª¤¥¨¦@ ìµ Ü ï` ð@MÞ ôM ×€z"ÕÖ Ï$Ü©«"·§ ª¤¥¨¦@ øµ è û` ü@MÞ M Ô€z#ÒÓ Ï%Ü©«"·§ ª¤¥¨¦@ µ ô ` @MÞ M Ñ€z$ÏÐ Ï&Ü©«"·§ ª¤¥¨¦@ µ ` @MÞ M ΀z%ÌÍ Ï'Ü©«"·§ ª¤¥¨¦@ µ ` @MÞ $M Ë€z&ÉÊ Ï(Ü©«"·§ ª¤¥¨¦@ (µ  +` ,@MÞ 0M È€z'ÆÇ Ï)Ü©«"·§ ª¤¥¨¦@ 4µ $ 7` 8@MÞ <M Å€z(ÃÄ Ï*Ü©«"·§ ª¤¥¨¦@ @µ 0 C` D@MÞ HM €z)ÀÁ Ï+Ü©«"·§ ª¤¥¨¦@ Lµ < O` P@MÞ TM ¿€z*½¾ Ï,Ü©«"·§ ª¤¥¨¦@ Xµ H [` \@MÞ `M ¼€z+º» Ï-Ü©«"·§ ª¤¥¨¦@ dµ T g` h@MÞ lM ¹€z,·¸ Ï.Ü©«"·§ ª¤¥¨¦@ pµ ` s` t@MÞ xM ¶€z-´µ Ï/Ü©«"·§ ª¤¥¨¦@ |µ l ` €@MÞ „M ³€z.±² Ï0Ü©«"·§ ª¤¥¨¦@ ˆµ x ‹` Œ@MÞ M °€z/®¯ Ï1Ü©«"·§ ª¤¥¨¦@ ”µ „ —` ˜@MÞ œM ­€z0«¬ Ï2Ü©«"·§ ª¤¥¨¦@  µ £` ¤@MÞ ¨M ª€z1¨© Ï3Ü©«"·§ ª¤¥¨¦@ ¬µ œ ¯` °@MÞ ´M §€z2¥¦ Ï4Ü©«"·§ ª¤¥¨¦@ ¸µ ¨ »` ¼@MÞ ÀM ¤€z3¢£ Ï5Ü©«"·§ ª¤¥¨¦@ ĵ ´ Ç` È@MÞ ÌM ¡€z4Ÿ  Ï6Ü©«"·§ ª¤¥¨¦@ е À Ó` Ô@MÞ ØM ž€z5œ Ï7Ü©«"·§ ª¤¥¨¦M ܵ Ì ß` à@MÞ äM›€z6™š Ï8Ü©«"·§ ª¤¥¨¦@ èµ Ø ë` ìMMÞ ðM ˜€z7–—Ï9Ü©«"·§ ª¤¥¨¦@ ôµ ä ÷` ø@MÞ üM •€z8“” Ï:Ü©«"·§ ª¤¥¨¦@ µ ð ` @MÞ M ’€z9‘ Ï;Ü©«"·§ ª¤¥¨¦@ µ ü ` @MÞ M €z:Ž Ï<Ü©«"·§ ª¤¥¨¦@ µ  ` @MÞ M Œ€z;Š‹ Ï=Ü©«"·§ ª¤¥¨¦@ $µ  '` (@MÞ ,M ‰€z<‡ˆ Ï>Ü©«"·§ ª¤¥¨¦@ 0µ 3` 4@MÞ 8M †€z=„… Ï?Ü©«"·§ ª¤¥¨¦@ <µ , ?` @@MÞ DM ƒ€z>‚ Ï@Ü©«"·§ ª¤¥¨¦@ Hµ 8 K` L@MÞ PM €€z?~ ÏAÜ©«"·§ ª¤¥¨¦@ Tµ D W` X@MÞ \M }€z@{| ÏBÜ©«"·§ ª¤¥¨¦@ `µ P c` d@MÞ hM z€zAxy ÏCÜ©«"·§ ª¤¥¨¦@ lµ \ o` p@MÞ tM w€zBuv ÏDÜ©«"·§ ª¤¥¨¦@ xµ h {` |@MÞ €M t€zCrs ÏEÜ©«"·§ ª¤¥¨¦@ „µ t ‡` ˆ@MÞ ŒM q€zDop ÏFÜ©«"·§ ª¤¥¨¦@ µ € “` ”@MÞ ˜M n€zElm ÏGÜ©«"·§ ª¤¥¨¦@ œµ Œ Ÿ`  @MÞ ¤M k€zFij ÏHÜ©«"·§ ª¤¥¨¦@ ¨µ ˜ «` ¬@MÞ °M h€zGfg ÏIÜ©«"·§ ª¤¥¨¦@ ´µ ¤ ·` ¸@MÞ ¼M e€zHcd ÏJÜ©«"·§ ª¤¥¨¦@ Àµ ° Ã` Ä@MÞ ÈM b€zI`a ÏKÜ©«"·§ ª¤¥¨¦@ ̵ ¼ Ï` Ð@MÞ ÔM _€zJ]^ ÏLÜ©«"·§ ª¤¥¨¦@ ص È Û` Ü@MÞ àM \€zKZ[ ÏMÜ©«"·§ ª¤¥¨¦@ äµ Ô ç` è@MÞ ìM Y€zLWX ÏNÜ©«"·§ ª¤¥¨¦M ðµ à ó` ô@MÞ øMV€zMTU ÏOÙ¤ ¦¥¨©"·M`@ÞMpMµ ì ÏP€zNÛ¤ ¦¥§©ª«"·M:MÞMM  µ øÏQRS€zO_({66.782109375000019, 83.613734342065342}_({66.782109375000019, 83.613734342065342}_({66.782109375000019, 83.613734342065342}_({65.055109375000015, 88.754118325133973}_({64.996442415000033, 89.304703124178175}_({65.055109375000015, 88.754118325133973}_({64.444609374999999, 89.834050242715549}_({64.096274300000005, 90.003423655165463}_({64.792944450000036, 89.664676830265634}_({63.108109374999991, 89.892684981204965}_"{62.888108275, 89.839867390120716}_({63.650778754999997, 90.022968372546146}_'{62.45910937499999, 89.670873866561962}_({62.246441644999997, 89.575816641847169}_({62.671777105000011, 89.765931091276755}_({61.892609374999999, 89.314869249543094}_({61.727608550000006, 89.172588876229909}_({62.057610199999992, 89.457149622856278}_'{61.496609375000013, 88.80729806094736}_!{61.39760888, 88.611195949959424}_({61.595609869999997, 89.003400171935269}_"{61.348109375, 88.128146365223969}_"{61.348109375, 87.886145155223986}_"{61.348109375, 88.384814315223949}_'{61.562609375000015, 87.59114325904666}_({61.705610090000015, 87.475140608251436}_({61.419608660000016, 87.707145909841913}_&{62.134609375000018, 87.3599683092405}_({62.372943899999989, 87.321853556248456}_({61.896274850000019, 87.398083062232544}_({62.943109374999999, 87.317571985956775}_({63.243777544999993, 87.327422382105269}_({62.642441205000004, 87.307721589808281}_({63.861609374999993, 87.334584326171878}_({64.173277600000006, 87.336075546874568}_'{63.549941149999988, 87.33309310546916}_({64.780109375000023, 87.296596666386947}_({65.080777545000032, 87.269780212535451}_'{64.479441205000001, 87.32341312023847}_({65.588609375000019, 87.089200343103229}_({65.826943900000018, 86.977751890111179}_'{65.350274850000019, 87.20064879609528}_({66.160609375000021, 86.588525393297047}_({66.303610090000021, 86.366188877501813}_({66.017608660000022, 86.810861909092282}_({66.375109375000036, 85.672022287119731}_({66.375109375000036, 85.254020197119743}_({66.375109375000036, 86.060690897119727}_({66.094609375000019, 84.532180195197768}_({65.907608440000033, 84.190283757776157}_({66.281610310000033, 84.874076632619378}_({65.374109375000032, 83.633203449280543}_({65.080774575000035, 83.375779059501539}_({65.667444175000028, 83.890627839059576}_'{64.38960937500002, 82.989845910966167}_({64.026607560000002, 82.818363130677142}_'{64.75261119000001, 83.161328691255207}_'{63.306109374999998, 82.60322057550286}_({62.866107175000018, 82.497585393334333}_({63.665444505000004, 82.689489307607147}_({62.057609374999991, 82.468482244791318}_'{61.66527408000001, 82.484291424024406}_({62.449944670000001, 82.452673065558258}_({61.023609374999999, 82.720740807902502}_({60.726607890000018, 82.873104844938752}_({61.320610860000009, 82.568376770866251}_({60.319609374999992, 83.409725361510098}_({60.147275180000001, 83.716686656827406}_({60.491943570000011, 83.102764066192762}_({60.061109374999994, 84.585165002287894}_({60.061109374999994, 84.585165002287894}_({60.061109374999994, 84.108495952287868}_({61.051109375000003, 84.822842973777213}_({61.051109375000003, 84.492841323777199}_({61.051109375000003, 84.822842973777213}_({61.243609374999998, 84.016558134900109}_({61.371943350000002, 83.809033871365941}_({61.115275400000023, 84.224082398434305}_'{61.749609374999999, 83.54953798699465}_({61.958610420000007, 83.445713928524711}_({61.540608329999991, 83.653362045464618}_'{62.48110937500001, 83.384155599261774}_({62.759777435000011, 83.377724181301815}_({62.202441315000009, 83.390587017221705}_({63.339109375000014, 83.480143174552509}_"{63.573777215, 83.536481938375701}_({63.045774575000017, 83.409719719773491}_({64.048609375000012, 83.716479054119858}_({64.286943900000011, 83.817698331127801}_({63.810274850000006, 83.615259777111888}_({64.692109375000001, 84.096469735587888}_({64.882776995000015, 84.248578846194263}_({64.501441755000002, 83.944360624981542}_({65.154109375000033, 84.641886122282912}_({65.271443295000026, 84.853389754194538}_({65.036775455000011, 84.430382490371315}_({65.330109375000021, 85.388139983881004}_({65.330109375000021, 85.659474673881007}_({65.330109375000021, 85.102138553881005}_({65.115609375000034, 85.996643090058328}_'{64.972608660000034, 86.13097916585356}_({65.258610090000033, 85.862307014263095}_({64.543609375000017, 86.271818039864499}_({64.305274850000018, 86.320932847856554}_'{64.78194390000003, 86.222703231872444}_"{63.735109375, 86.336214363148216}_({63.434441205000006, 86.330030651999735}_({64.035777545000002, 86.342398074296725}_'{62.816609375000006, 86.31920202293314}_({62.504941150000001, 86.314044117230438}_({63.128277600000011, 86.324359928635843}_({61.898109375000011, 86.340689682718065}_({61.597441205000017, 86.360172766569562}_({62.198777545000006, 86.321206598866539}_({61.089609375000002, 86.509586006001783}_({60.851274850000003, 86.602701033993824}_({61.327943900000001, 86.416470978009713}_'{60.517609374999999, 86.95526095580793}_!{60.37460866, 87.159264046603155}_({60.660610089999999, 86.751257865012704}_'{60.303109375000012, 87.80026406198526}_({60.303109375000012, 88.196266041985226}_({60.303109375000012, 87.440928931985255}_({60.545109375000003, 88.886863121682623}_({60.706443515000011, 89.215264136811086}_'{60.383775234999995, 88.55846210655416}_({61.188609374999992, 89.756353803150674}_'{61.45627738000001, 90.007616140636529}_({60.920941370000001, 89.505091465664819}_'{62.101609375000002, 90.39354571019085}_({62.442611079999999, 90.567080101371417}_({61.760607670000006, 90.220011319010226}_({63.152109375000002, 90.783248446604503}_({63.555444724999994, 90.880080696925646}_({62.792774244999997, 90.696979714500188}_({64.274109375000023, 90.909616814292391}_({64.618777765000004, 90.897030563657708}_({63.929440985000006, 90.922203064927047}_({65.181609375000036, 90.676488288157586}_'{65.441944010000029, 90.53365474427396}_({64.921274740000015, 90.819321832041211}_({65.797609375000022, 90.048876803750957}_({65.947943460000019, 89.773300599325196}_'{65.647275290000024, 90.32445300817669}_({66.045109375000024, 88.991796296623292}_({66.045109375000024, 88.991796296623292}_({66.030442635000028, 89.420943953884304}_({65.055109375000015, 88.754118325133973}_({65.055109375000015, 88.754118325133973}_({65.055109375000015, 88.754118325133973}_({56.827109375000006, 89.077750295422746}_({57.619113334999994, 89.267893623326088}_({56.827109375000006, 89.077750295422746}_({58.625609374999996, 88.899031943628316}_({59.032611410000001, 88.589742452134246}_({58.218607339999991, 89.208321435122443}_'{59.236109374999998, 87.33510002604676}_({59.236109374999998, 86.601763026046783}_({59.236109374999998, 88.068437026046738}_({58.625609374999996, 85.472531943628368}_({58.218607339999991, 84.964150680122501}_({59.032611410000001, 85.980913207134265}_({56.827109375000006, 84.435750295422778}_({56.827109375000006, 84.435750295422778}_({57.619113334999994, 84.618560253326123}_({54.429109375000003, 83.860041431148673}_({54.429109375000003, 83.860041431148673}_({54.429109375000003, 83.860041431148673}_'{54.429109375000003, 80.64804143114867}_'{54.429109375000003, 80.64804143114867}_'{54.429109375000003, 80.64804143114867}_({53.384109375000001, 80.397159127909958}_({53.384109375000001, 80.397159127909958}_({53.384109375000001, 80.397159127909958}_({53.384109375000001, 88.251159127909901}_({53.384109375000001, 88.251159127909901}_({53.384109375000001, 88.251159127909901}_({56.475109375000002, 85.231242572226577}_({57.069112344999994, 85.366516698154086}_({56.475109375000002, 85.231242572226577}_({57.778609374999988, 85.907185234687503}_({58.053610750000004, 86.222541803542825}_{57.503608, 85.591828665832182}_({58.191109375000011, 87.084217722808049}_({58.191109375000011, 87.553553402808021}_({58.191109375000011, 86.614882042808048}_({57.778609374999988, 88.057685234687497}_{57.503608, 88.237331140832154}_({58.053610750000004, 87.878039328542783}_({56.475109375000002, 88.113242572226554}_({56.475109375000002, 88.113242572226554}_({57.069112344999994, 88.255850068154061}_({54.429109375000003, 87.622041431148645}_({54.429109375000003, 87.622041431148645}_({54.429109375000003, 87.622041431148645}_({54.429109375000003, 84.740041431148668}_({54.429109375000003, 84.740041431148668}_({54.429109375000003, 84.740041431148668}_({51.712109375000004, 82.833747442727997}_({51.712109375000004, 81.829075752728016}_({51.712109375000004, 82.833747442727997}_({50.909109375000007, 80.380464199186662}_({50.373773365000012, 79.749605549214948}_({51.444445385000002, 81.011322849158375}_'{48.62110937500001, 79.077663998411367}_({47.609104315000017, 78.834703079423747}_'{49.61111432500001, 79.315343158290517}_({46.250609375000003, 79.229057300011931}_({45.682273200000004, 79.572947591377613}_({46.818945550000002, 78.885167008646278}_'{45.398109374999997, 81.31789015789613}_'{45.398109374999997, 81.31789015789613}_({45.398109374999997, 80.269218247896134}_({45.398109374999997, 86.333890157896107}_({45.398109374999997, 86.333890157896107}_({45.398109374999997, 86.333890157896107}_({46.443109374999999, 86.584772461134818}_({46.443109374999999, 86.584772461134818}_({46.443109374999999, 86.584772461134818}_'{46.443109374999999, 81.56877246113487}_({46.443109374999999, 80.864768941134855}_'{46.443109374999999, 81.56877246113487}_({47.004109375000006, 80.102956644978804}_({47.378111245000007, 79.829744734822043}_({46.630107505000005, 80.376168555135564}_'{48.62110937500001, 79.946663998411367}_({49.288446045000008, 80.106877358033614}_'{47.91710585500001, 79.777647706941735}_({50.144609375000009, 80.856923987869919}_({50.492944450000003, 81.303553655419989}_({49.796274300000015, 80.410294320319821}_({50.667109375000003, 82.582865139489286}_({50.667109375000003, 82.582865139489286}_({50.667109375000003, 81.878861619489271}_({50.667109375000003, 87.598865139489234}_({50.667109375000003, 87.598865139489234}_({50.667109375000003, 87.598865139489234}_({51.712109375000004, 87.849747442727946}_({51.712109375000004, 87.849747442727946}_({51.712109375000004, 87.849747442727946}_({51.712109375000004, 82.833747442727997}_({51.712109375000004, 82.833747442727997}_({51.712109375000004, 82.833747442727997}_({43.022109375000007, 83.398463026321778}_({42.904775455000006, 83.927629764410156}_({43.022109375000007, 83.398463026321778}_({42.246609375000006, 84.466281948655123}_({41.846940710000005, 84.648998051518717}_({42.646278040000006, 84.283565845791529}_({40.822109375000004, 84.542289756345511}_({40.352773695000003, 84.429612228699071}_({41.372112125000008, 84.674333734056162}_({39.617609375000001, 83.989114891033481}_({39.283941040000002, 83.733007331222367}_({39.951277710000006, 84.245222450844622}_({38.792609375000005, 83.081549914792404}_({38.576274960000006, 82.732611131892895}_({39.008943790000004, 83.430488697691928}_({38.314109375000001, 81.949172228572564}_({38.211442195000004, 81.543188779399941}_({38.416776555000006, 82.355155677745216}_({38.160109375000005, 80.724200099674277}_'{38.160109375000005, 80.27686452967427}_({38.160109375000005, 81.134868819674267}_({38.314109375000001, 79.490672228572606}_({38.416776555000006, 79.115651772745252}_'{38.211442195000004, 79.86569268439996}_({38.792609375000005, 78.560549914792432}_({39.008943790000004, 78.315485727691964}_({38.576274960000006, 78.805614101892928}_({39.623109375000006, 78.050435324208479}_({39.960444395000003, 77.955421417204349}_({39.285774355000008, 78.145449231212609}_({40.833109375000006, 78.076930622695414}_({41.177777765000002, 78.159678182060759}_({40.363773695000006, 77.964253095049003}_({41.751609375000001, 78.467942962910513}_({42.019277380000013, 78.645871600396362}_({41.483941370000004, 78.290014325424636}_({42.444609375000006, 79.107317542953012}_({42.638943680000004, 79.355640756744123}_({42.250275070000008, 78.858994329161931}_({42.901109375000004, 79.937413496473084}_({43.011109925000007, 80.242490352015238}_({42.791108825000002, 79.632336640930959}_({43.099109375000005, 80.886949090770969}_({43.099109375000005, 80.886949090770969}_({43.077109265000004, 80.558999051662539}_'{44.144109375000006, 81.13783139400968}_({44.041442195000009, 80.123178234837013}_'{44.144109375000006, 81.13783139400968}_({43.121109375000003, 78.582230823470724}_({42.541773145000001, 77.893141750282155}_({43.700445605000006, 79.271319896659264}_({40.745109375000006, 77.186803691896358}_({40.136439665000005, 77.040675023229909}_({41.749781065000001, 77.428004024514479}_({39.150109375000007, 77.117378071163586}_({38.695440435000002, 77.217222761256096}_({39.604778314999997, 77.017533381071047}_({38.017109375000004, 77.708868837125806}_'{37.716441205000002, 78.00335329597732}_({38.317777545000006, 77.414384378274292}_({37.340609375000007, 78.844455556608096}_({37.190275290000002, 79.307032696033872}_({37.490943460000004, 78.381878417182349}_'{37.115109375000003, 80.39631779643554}_({37.115109374999996, 80.968320656435537}_({37.115109374999996, 79.824314936435542}_'{37.357109375000007, 82.06591685613293}_({37.518443515000008, 82.606985601261357}_({37.195775235000006, 81.524848111004474}_({38.066609375000006, 83.550752735700243}_'{38.378277600000011, 83.99957952640294}_({37.754941150000001, 83.101925944997518}_({39.232609375000003, 84.716184568787654}_({39.698278370000004, 85.044316218249335}_({38.766940380000001, 84.388052919325972}_({40.833109375000006, 85.424930622695385}_'{41.24377809500001, 85.523523459385999}_({40.231773035000003, 85.280562540398407}_({41.999109375000003, 85.539862455782796}_({42.365777875000006, 85.517891224256559}_({41.632440875000007, 85.561833687309033}_({42.978109375000003, 85.290899560922227}_({43.264110805000008, 85.146894699331781}_({42.692107945000011, 85.434904422512673}_({43.693109375000006, 84.665055873664485}_({43.883776994999998, 84.391829524270875}_({43.502441755000007, 84.938282223058152}_({44.067109375000008, 83.649345329560489}_({44.067109375000008, 83.649345329560489}_({44.008442415000012, 84.053262728604679}_({43.022109375000007, 83.398463026321778}_({43.022109375000007, 83.398463026321778}_({43.022109375000007, 83.398463026321778}Òe"_6¯uh©¸ÄÐÜèô  $ 0 < H T ` l x „ œ ¨ ´ À Ì Ø ä ð ü    ) 5 A M Y e q } ‰ • ¡ ­ ¹ Å Ñ Ø æ ò þ  " . 5 C O [ g s  ‹ — £ ª ¸ Ä Ð Ü è ô  $ 0 < H T ` l x „ œ ¨ ´ À Ì Ø ä ð ü   , 8 D P \ h t € Œ ˜ ¤ ° ¼ È Ô à ì øpÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP€Vß!î#ïßð&'("ñò*+,-óØMÚ@ÜV@MûàáVÖ@VM€N»Ï £ €ˆ¿®€C ß"     æMè`é:Wì<î>ðßò':(õ`*M¬¨©€a€`«€Pª€¤¢­€^€]¥€_Ó]^"ù`aL0.6 0.6 0.6€3Òe"ü6¢ýþ¦§€VÕ89:">ÜV<>€£€P€TÕ89:">Üìð>€£¤€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"6¡¯€Vßc"    def:gWM:l:W>ß:M!'I:\(%`*'¸´µ€q€`·€¶°¢¹€^€d€]±€_ºÓ]^")`aL0.4 0.4 0.4€3Òe",6¢-.²³€VÕ89:">V\>€¯€d€TÕ89:">ì>€¯°€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"Av¢˜L€p€7€ Û¤¥¦§¨©ª«" M@MßJKMMNµ: ¢Ì¼Í΀zÜ©«"·§ ª¤¥¨¦MRµØU`VMMßZMË€z»ÉÊ¢½Ü©«"·§ ª¤¥¨¦M^µKa`bMMßfMÈ€z¼ÆÇ¢¾Ü©«"·§ ª¤¥¨¦MjµZm`nM@ßàMÅ€z½ÃÄ ¢¿Û¤ ¦¥§©ª«"·M`Mß@yM{|µf¢ ÀÁ€z¾_({113.47812500000002, 96.250390625000009}_({113.47812500000002, 96.250390625000009}_({113.47812500000002, 96.250390625000009}_({99.056250000000006, 88.161328125000011}_({99.056250000000006, 88.161328125000011}_({99.056250000000006, 88.161328125000011}_({80.251562500000006, 92.976171875000006}_({80.251562500000006, 92.976171875000006}_({80.251562500000006, 92.976171875000006}_({95.893359375000003, 99.782421875000011}_({95.893359375000003, 99.782421875000011}_({95.893359375000003, 99.782421875000011}_({86.415234374999997, 93.280859375000006}_({86.415234374999997, 93.280859375000006}_({86.415234374999997, 93.280859375000006}Òe"6¥ØKZf໼½¾¿€Vß!î#ïßð&'("ñò*+,-ó˜Mš@œV@Mû ¡VÖ@VM€Né Ñ €ˆîÜ€C ß"     ¦M¨`©:W¬<®>°à²':(µ`*MÚÖ×€a€`Ù€PØ€ÒÐÛ€^€]Ó€_Ó]^"¹`aL0.6 0.6 0.6€3Òe"¼6¢½¾ÔÕ€VÕ89:">œV<>€Ñ€P€TÕ89:">œì°>€ÑÒ€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"Ñ6¡ÒÝ€Vßc"    def:gWÕM×:Øl:WÛ>ÝÞà:Má'I:\(å`*çæâã€q€`å€äÞÐç€^€d€]߀_èÓ]^"é`aL0.4 0.4 0.4€3Òe"ì6¢íîàá€VÕ89:">ÒV\>€Ý€d€TÕ89:">ÒìÞ>€ÝÞ€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"v¢˜L€p€7€ Û¤¥¦§¨©ª«" M@Mà  M µ: Ðþêÿ€zÜ©«"·§ ª¤¥¨¦Mµ˜`M@àMý€zéûü ÐëÜ©«"·§ ª¤¥¨¦Mµ !`"M@à&Mú€zêøù ÐìÜ©«"·§ ª¤¥¨¦M*µ-`.M@à2M÷€zëõö ÐíÜ©«"·§ ª¤¥¨¦M6µ&9`:M@à Mô€zìòó ÐîÛ¤ ¦¥§©ª«"·M`Mà@EMGHµ2Ð ïðñ€zí_!{69.782812500000006, 90.69140625}_!{69.782812500000006, 90.69140625}_!{69.782812500000006, 90.69140625}_({100.79335937500001, 83.373828125000003}_({100.79335937500001, 83.373828125000003}_({100.79335937500001, 83.373828125000003}_{100.94179687500001, 55.5}_{100.94179687500001, 55.5}_{100.94179687500001, 55.5}_({68.017968749999994, 65.328906250000003}_({68.017968749999994, 65.328906250000003}_({68.017968749999994, 65.328906250000003}_({67.870703125000006, 91.667968750000014}_({67.870703125000006, 91.667968750000014}_({67.870703125000006, 91.667968750000014}_({93.776953125000006, 101.13710937499999}_({93.776953125000006, 101.13710937499999}_({93.776953125000006, 101.13710937499999}Òe"^6¦˜ &2 éêëìíî€Vß!î#ïßð&'("ñò*+,-óhMj@lV@MûpqVÖ@VM€N#  €ˆ€C ß"     vMx`y:W|<~>€á‚':(…`*M  €a€` €P € €^€]€_Ó]^"‰`aL0.6 0.6 0.6€3Òe"Œ6¢Ž€VÕ89:">lV<>€€P€TÕ89:">lì€>€€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"¡6¡¢€Vßc"    def:gW¥M§:¨l:W«>­®á:M±'I:\(µ`*·€q€`€€^€d€]€_Ó]^"¹`aL0.4 0.4 0.4€3Òe"¼6¢½¾€VÕ89:">¢V\>€€d€TÕ89:">¢ì®>€€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"Ñv¢˜L€p€7€ Û¤¥¦§¨©ª«" M@MáÚpMÝÞµ:  !"€zÛ¤ ¦¥§©ª«"·M`Má@åMçèµh €z_!{67.948046875000003, 71.43359375}_!{67.948046875000003, 71.43359375}_!{67.948046875000003, 71.43359375}_ {88.7890625, 65.558984374999994}_ {88.7890625, 65.558984374999994}_ {88.7890625, 65.558984374999994}Òe"ò6¢hp€Vß!î#ïßð&'("ñò*+,-óøMú@üV@MûVÖ@VM€N=M % €ˆ@0€C ß"     M` :W <>â':(`*M.*+€a€`-€P,€&$/€^€]'€_Ó]^"`aL0.6 0.6 0.6€3Òe"6¢()€VÕ89:">üV<>€%€P€TÕ89:">üì>€%&€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"16¡21€Vßc"    def:gW5M7:8l:W;>=>â:MA'I:\(E`*G:67€q€`9€82$;€^€d€]3€_<Ó]^"I`aL0.4 0.4 0.4€3Òe"L6¢MN45€VÕ89:">2V\>€1€d€TÕ89:">2ì>>€12€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"av¢˜L€p€7€ Û¤¥¦§¨©ª«" M@MâjkMmnµ: $J>KL€zÜ©«"·§ ª¤¥¨¦Mrµøu`vM@âzMI€z=GH $?Ü©«"·§ ª¤¥¨¦M~µk`‚M@âMF€z>DE $@Û¤ ¦¥§©ª«"·M`Mâ@Mµz$ ABC€z?_({102.56601562500001, 56.248828125000003}_({102.56601562500001, 56.248828125000003}_({102.56601562500001, 56.248828125000003}_({122.32773437500002, 72.188281250000003}_({122.32773437500002, 72.188281250000003}_({122.32773437500002, 72.188281250000003}_({122.15781250000002, 96.316015625000006}_({122.15781250000002, 96.316015625000006}_({122.15781250000002, 96.316015625000006}_({102.23476562500001, 84.106250000000003}_({102.23476562500001, 84.106250000000003}_({102.23476562500001, 84.106250000000003}Òe" 6¤økz=>?@€Vß!î#ïßð&'("ñò*+,-ó¨Mª@¬V@Mû°±VÖ@VM€Ngs O €ˆiZ€C ß"     ¶M¸`¹:W¼<¾>ÀãÂ':(Å`*MXTU€a€`W€PV€PNY€^€]Q€_Ó]^"É`aL0.6 0.6 0.6€3Òe"Ì6¢ÍÎRS€VÕ89:">¬V<>€O€P€TÕ89:">¬ìÀ>€OP€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"á6¡â[€Vßc"    def:gWåMç:èl:Wë>íîã:Mñ'I:\(õ`*÷d`a€q€`c€b\Ne€^€d€]]€_fÓ]^"ù`aL0.4 0.4 0.4€3Òe"ü6¢ýþ^_€VÕ89:">âV\>€[€d€TÕ89:">âìî>€[\€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"v¢˜L€p€7€ Û¤¥¦§¨©ª«" MMMãMµ:Nphqr€zÜ©«"·§ ª¤¥¨¦M"µ¨%`&MMã°Mo€zgmnNiÛ¤ ¦¥§©ª«"·M`MãM1M34µNjkl€zh_({91.016015625000009, 58.502734375000003}_({91.101544851983462, 64.525836062270471}_({91.016015625000009, 58.502734375000003}_({91.349426222617225, 76.656674853478108}_({91.423054981744855, 79.089085318985383}_'{91.23316782896714, 70.599718999540968}_({91.518750000000011, 83.969531250000003}_({91.518750000000011, 83.969531250000003}_&{91.410746240872413, 81.5475374511594}Òe"A6£¨°ghi€Vß!î#ïßð&'("ñò*+,-óHMJ@LV@MûPQVÖ@VM€N• u €ˆŽ€€C ß"     VMX`Y:W\<^>`äb':(e`*M~z{€a€`}€P|€vt€^€]w€_Ó]^"i`aL0.6 0.6 0.6€3Òe"l6¢mnxy€VÕ89:">LV<>€u€P€TÕ89:">Lì`>€uv€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"6¡‚€Vßc"    def:gW…M‡:ˆl:W‹>Žä:M‘'I:\(•`*—І‡€q€`‰€ˆ‚t‹€^€d€]ƒ€_ŒÓ]^"™`aL0.4 0.4 0.4€3Òe"œ6¢ž„…€VÕ89:">‚V\>€€d€TÕ89:">‚ìŽ>€‚€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"±v¢˜L€p€7€ Û¤¥¦§¨©ª«" M@MäºPM½¾µ: t’Ž“”€zÛ¤ ¦¥§©ª«"·M`Mä@ÅMÇȵHt ‘€z_({91.569791666666674, 76.697526041666663}_({91.569791666666674, 76.697526041666663}_({91.569791666666674, 76.697526041666663}_!{100.54843750000001, 74.44140625}_!{100.54843750000001, 74.44140625}_!{100.54843750000001, 74.44140625}Òe"Ò6¢HPŽ€Vß!î#ïßð&'("ñò*+,-óØMÚ@ÜV@MûàáVÖ@VM€N²à — €ˆ¶¥€C ß"     æMè:é:Wìíî>ðåò':(õ`*@£Ÿ €a€`¢˜¡€›–¤€^€]œ€_ Ôz^ù"ú9ûa_NSCustomColorSpaceE0.25™€3Òþ"ÿTNSIDšÒyz\NSColorSpace¢~\NSColorSpaceÓ]^"`aL0.6 0.6 0.6€3Òe" 6¢  ž€VÕ89:">ÜV<>€—€P€TÕ89:">Üìð>€—›€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"6¡¦€Vßc"    def:gW"M$:%l:W(>*+å:M.'I:\(2`*4¯«¬€q€`®€­§–°€^€d€]¨€_±Ó]^"6`aL0.4 0.4 0.4€3Òe"96¢:;©ª€VÕ89:">V\>€¦€d€TÕ89:">ì+>€¦§€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"Nv¢˜L€p€7€ Û¤¥¦§¨©ª«" M@MåWXMZ[µ: –À³Á€zÜ©«"·§ ª¤¥¨¦M_µØb`cM@ågM¿€z²½¾ –´Ü©«"·§ ª¤¥¨¦MkµXn`oM@åsM¼€z³º» –µÜ©«"·§ ª¤¥¨¦Mwµgz`{M@åàM¹€z´·¸ –¶Ø¤ ¦¥"©·M`@å@µMs – €zµ_"{93.277734375000009, 80.302734375}_"{93.277734375000009, 80.302734375}_"{93.277734375000009, 80.302734375}_({98.163281250000011, 78.995182291666666}_({98.163281250000011, 78.995182291666666}_({98.163281250000011, 78.995182291666666}_({98.151953125000006, 81.398697916666663}_({98.151953125000006, 81.398697916666663}_({98.151953125000006, 81.398697916666663}_({93.256510416666671, 82.557942708333329}_({93.256510416666671, 82.557942708333329}_({93.256510416666671, 82.557942708333329}Òe"–6¥ØXgsಳ´µ¶€Vß!î#ïßð&'("ñò*+,-óŸM¡@£V@Mû§¨VÖ@VM€NÞ÷ Å €ˆäÑ€C ß"     ­M¯:°:W³´µ>·æ¹':(¼`*@ÏËÌ€a€`ÎÆÍ€ÇÄЀ^€]È€_ Óz^"À9aF1 0.5€3Ó]^"Ã`aL0.6 0.6 0.6€3Òe"Æ6¢ÇÈÉÊ€VÕ89:">£V<>€Å€P€TÕ89:">£ì·>€ÅÇ€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"Û6¡ÜÒ€Vßc"    def:gWßMá:âl:Wå>çèæ:Më'I:\(ï`*ñÛר€q€`Ú€ÙÓÄÜ€^€d€]Ô€_ÝÓ]^"ó`aL0.4 0.4 0.4€3Òe"ö6¢÷øÕÖ€VÕ89:">ÜV\>€Ò€d€TÕ89:">Üìè>€ÒÓ€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe" v¢˜L€p€7€ Û¤¥¦§¨©ª«" M@MæMµ: Äôßõö€zÜ©«"·§ ª¤¥¨¦MµŸ` M@æ$Mó€zÞñò ÄàÜ©«"·§ ª¤¥¨¦M(µ+`,M@æ0Mð€zßîï ÄáÜ©«"·§ ª¤¥¨¦M4µ$7`8M@æ<Mí€zàëì ÄâÜ©«"·§ ª¤¥¨¦M@µ0C`DM@æHMê€záèé ÄãÜ©«"·§ ª¤¥¨¦MLµ<O`PM@æ§Mç€zâåæ Ä䨤 ¦¥"©·M`@æ@µMH Ä €zã_({86.074739583333326, 91.577083333333334}_({86.074739583333326, 91.577083333333334}_({86.074739583333326, 91.577083333333334}_({98.426302083333326, 88.456250000000011}_({98.426302083333326, 88.456250000000011}_({98.426302083333326, 88.456250000000011}_({112.89166666666668, 97.971354166666671}_({112.89166666666668, 97.971354166666671}_({112.89166666666668, 97.971354166666671}_({118.49947916666667, 100.39791666666667}_({118.49947916666667, 100.39791666666667}_({118.49947916666667, 100.39791666666667}_({104.03880208333334, 103.20026041666668}_({104.03880208333334, 103.20026041666668}_({104.03880208333334, 103.20026041666668}_({99.073177083333348, 100.97890625000001}_({99.073177083333348, 100.97890625000001}_({99.073177083333348, 100.97890625000001}Òe"q6§Ÿ$0<H§Þßàáâãä€Vß!#­ßð&'(®"ò*+,-{M}@>V@M‚·„VÖ@VMù € :ú€C _*{{0.79296875, 19.177343750000006}, {0, 0}}Òe"Š6¡‹û€Vßc"    def:gWŽM:‘l:W”>–—ç:Mš'I:\(ž`* €q€`€üø€^€d€]ý€_Ó]^"¢`aL0.4 0.4 0.4€3Òe"¥6¢¦§þÿ€VÕ89:">‹V\>€û€d€TÕ89:">‹ì—>€ûü€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"ºv¢˜L€p€7€ _({103.19296875000002, 101.37734375000002}_({109.85338541666668, 100.27942708333335}ß!#­ßð&'(®"ò*+,-ÁMÃ@>V@MÈ·ÊVÖ@VM  € : €C _*{{0.79296875, 19.177343750000006}, {0, 0}}Òe"Ð6¡Ñ €Vßc"    def:gWÔMÖ:×l:WÚ>ÜÝè:Mà'I:\(ä`*æ€q€`€  €^€d€]€_Ó]^"è`aL0.4 0.4 0.4€3Òe"ë6¢ìí€VÕ89:">ÑV\>€ €d€TÕ89:">ÑìÝ>€  €TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"v¢˜L€p€7€ _({99.792968750000014, 99.777343750000014}_({107.37786458333335, 98.518489583333348}ß!#­ßð&'(®"ò*+,-M @>V@M·VÖ@VM) € *:€C _*{{0.79296875, 19.177343750000006}, {0, 0}}Òe"6¡€Vßc"    def:gWM:l:W >"#é:M&'I:\(*`*,&"#€q€`%€$'€^€d€]€_(Ó]^".`aL0.4 0.4 0.4€3Òe"16¢23 !€VÕ89:">V\>€€d€TÕ89:">ì#>€€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"Fv¢˜L€p€7€ _({98.092968750000011, 97.977343750000017}_({105.82682291666667, 96.658333333333346}ß!#­ßð&'(®"ò*+,-MMO@>V@MT·VVÖ@VM,: € ;:-€C _*{{0.79296875, 19.177343750000006}, {0, 0}}Òe"\6¡].€Vßc"    def:gW`Mb:cl:Wf>hiê:Ml'I:\(p`*r734€q€`6€5/+8€^€d€]0€_9Ó]^"t`aL0.4 0.4 0.4€3Òe"w6¢xy12€VÕ89:">]V\>€.€d€TÕ89:">]ìi>€./€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"Œv¢˜L€p€7€ _({95.892968750000023, 96.477343750000017}_ {103.621875, 94.742187500000014}ß!#­ßð&'(®"ò*+,-“M•@>V@Mš·œVÖ@VM=K € L:>€C _*{{0.79296875, 19.177343750000006}, {0, 0}}Òe"¢6¡£?€Vßc"    def:gW¦M¨:©l:W¬>®¯ë:M²'I:\(¶`*¸HDE€q€`G€F@<I€^€d€]A€_JÓ]^"º`aL0.4 0.4 0.4€3Òe"½6¢¾¿BC€VÕ89:">£V\>€?€d€TÕ89:">£ì¯>€?@€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"Òv¢˜L€p€7€ _({93.092968750000011, 94.477343750000017}_({99.834895833333348, 92.602343750000003}ÜÚÛÜÝÞßà"áâã::MÚÛ@ÝéßMìRTN U€!X€ÕÞàá">×åBé€MO€ €!Óde"éìn¢êëPQ¢íîRS€ #@æíia-#@#ÿÿÿÿÿÿÓ"ÛôþN#@æíia-€Ó"ÛøþN#@#ÿÿÿÿÿÿ€ZBackgroundÓde"üþn¡ýV¡ÿW€ #@#ÿÿÿÿÿÿÓ"×þM#@#ÿÿÿÿÿÿ€Òe"v¡Y€ ß !#ßð&'(  "ò*+,-M@V@MVVV×@VMUdimLKVcornRXVcornRYZ] ^ xkM Óde"n¡[¡\€ ]cornerRadiusX]cornerRadiusY_#{{0, 0}, {140, 187.30000000000001}}ß"     $M&`':W*+,>.0':(3`*@ief€a€`h_g€`Yj€^€]a€_ Ó]^"7`aO0.8 0 0.01333333333€3Ó]^":`aF1 0 0€3Òe"=6¢>?bc€VÕ89:">ì<>€^€P€TÕ89:">VI>€^d€TÓ]^"L`aL0.6 0.6 0.6€3V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"U6¡Vl€Vßc"    def:gWYM[:\l:W_>ab:@e'I:\(i`*kuqr€q€`t€smY v€^€d€]n€_wÓ]^"m`aL0.4 0.4 0.4€3Òe"p6¢qrop€VÕ89:">VV\>€l€d€TÕ89:">Vìb>€lm€TV{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}V{0, 0}Òe"…v¢˜L€p€7€ ÒyzŠ‹\PCRectVector§ŒŽ‘~\PCRectVector\PCPathVector_PCRectBasedVectorXPCVectorZPCDrawableXPCObjectÒe"“v¡Ö€C€ Òyz—˜WPCFrame¥™š›œ~WPCFrame_PCMetadataObjectZPCDrawableXPCObjectÒe"žv¢Ÿ |—€ ߣ¤¥¦"§ ¨©ª«¬ ­MM>±²>:´>@‘MMºBYauSizCropVnewFacUapIn1TpathTapIDUcropRUapIn2UisRelUisColTcropVvarVal€~–€}€ €€ _!{{6, 29.650000000000006}, {0, 0}}Zcupspm.pngß¿ÀÁÂÃÄÅ"ÆÇÈ ÉÊËÌÍÎÏ@RÒÓÔÕ>רÙ@ÛÜŸÞßXUcodeSUprColVprShTiSfraVcodePlVcodeFrUcodeFTsnShVexPropTpropUgenCHUgrTypVanLooCVprLinCUcodeL” €‘“•€Ž€Œ ÿÿÿÿÿÿÿÿ|’€Óde"âén¦ãäåæç肃„…†¦êë<íî€P‰Š‹€ V{JFIF}U{GIF}_"kCGImageDestinationBackgroundColorU{PNG}V{TIFF}_*kCGImageDestinationLossyCompressionQualityÓde"øùn  € Óde"üýn  € Óde"n  € Óde"n  € #?ìÌÌÌÌÌÍZpublic.png]public.folderÓde"  n  € Ó]^"`aL0.5 0 0 0.5€3SiosUcocoaUtouchVMyViewVUIViewÒyz_PCBitmapProperties£~_PCBitmapPropertiesXPCObjectÒyzYPCFactory¤ ~YPCFactoryZPCDrawableXPCObjectߣ¤¥¦"§ ¨©ª«¬ ­MM>%²>:ó>@‘MM.B€˜–€€N€ €™€ _cupspm-icon.pngß¿ÀÁÂÃÄÅ"ÆÇÈ ÉÊËÌÍ2Ï@RÒÓ7Õ>:;Ù@>Ü @߈ª €‘©•€§šŒ ¦—¨’€Óde"DKn¦EFGHIJ›œžŸ ¦LM<OPQ¡¢€P£¤¥€ V{JFIF}U{GIF}_"kCGImageDestinationBackgroundColorU{PNG}V{TIFF}_*kCGImageDestinationLossyCompressionQualityÓde"Z[n  € Óde"^_n  € Óde"bcn  € Óde"fgn  € #?ìÌÌÌÌÌÍ]public.folderÓde"lmn  € Ó]^"p`aL0.5 0 0 0.5€3VMyViewVUIViewÒe"u6 €VYselection_{140, 187.30000000000001}Óz^"z9aE0.75€3_CICheckerboardGeneratorß¿ÀÁÂÃÄÅ"ÆÇÈ ÉÊËÌÍ>Ï@R‚ƒÕ>†‡ˆ@ÛÜ‘Œ‚ˆ€ €ÂÃÄ•€À±¿ €ÁÀÓde"—n¦‘’“”•–²³´µ¶·¦<™š›œ€P¸¹º½¾€ _"kCGImageDestinationBackgroundColorV{JFIF}U{GIF}V{TIFF}U{PNG}_*kCGImageDestinationLossyCompressionQualityÓde"¦§n  € Óde"ª«n  € Óde"®°n¡¯»¡±¼€ [CompressionÓde"¶·n  € #?ìÌÌÌÌÌÍ_com.likethought.opacity.opacityÓde"¼½n  € Ó]^"À`aJ1 0 0 0.5€3SmacVquartz_MyDrawingFunctionÓde"ÆÐn©ÇÈÉÊËÌÍÎÏÆÇÈÉÊËÌÍΩÑÑÓÔÑÖ×ÑÑÏÏÐÑÏÒÓÏÏ€ _framePickerVisibleZhideRulers[windowFrame_layerViewDimension]hideVariablesZexpansionsYprintInfo]toolbarHidden_editFrameMetadata_{{0, 0}, {1440, 849}}#@i`Óde"èén  € Ò"ìíî\NSAttributesâÔÓde"ðùn¨ñòóôõö÷øÕÖרÙÚÛܨúûûýþúÝÞÞßàÝáဠ_NSHorizontallyCentered]NSRightMargin\NSLeftMargin_NSHorizonalPagination_NSVerticalPagination_NSVerticallyCentered[NSTopMargin^NSBottomMargin "B"B´Òyz[NSPrintInfo¢~[NSPrintInfoÓde"n§äåæçèéê§Ÿ "ëó|÷üä€ _"com.likethought.opacity.preview.ui_(com.likethought.opacity.preview.elementsWfactory_#com.likethought.opacity.preview.web_&com.likethought.opacity.preview.cursorTtype_&com.likethought.opacity.preview.iphoneÓde",0n£-/ìéí£<þ3€Pàî€ Ucolor[resolutionsÒe"86¤9:;<ïðñò€V#?À#?ÐÓde"AEn£BCDôõö£ÑÑúÏÏÝ€ VstatusWtoolbarTdockÓde"NQn¢OPøù¢RSúû€ WaddressUimage_#http://likethought.com/opacity/web/_,http://likethought.com/opacity/web/image.pngÓde"Z_n¤[]-ýéþì¤`ab<ÿ€P€ XhotspotXXhotspotY#@#@=¦ffffhÓde"jsn¨k-mnopqìé¨t<vwtyþþ €P    àà€ UrectXUrectHUrectWUrectYTleftStop#@4#@F#@iÒþ"ˆšÒyz‹ŒWPCImage¥Ž~WPCImage_PCMetadataObjectZPCDrawableXPCObject_NSKeyedArchiverÑ“‘Troot€"+5:? a g * 2 : > D I O U Y ` h n v z  „ ‹ — ž ¤ « ° ¶ ¼ Ã Ê Ñ Ø Ý ä è ï ö ü %+29@ELTZ\^acfhjknpy{~€‰Œ•—šž¡£¦©«­®±º¼¾ÀÂËÍÐÒÔÖØÙæîù "1DMVY[]ktˆ•¦ÅÎäëø 159;DFHQ^er{ŒŽ—™›¬®°²ÃÅÎÐÒãåîðò#%.02;>@B[`flnpr{~Ž•—™›¢¤¦¨ª³¶¸ºÃÊÌÎÑÓ $(.38=>@BCEGIJSUjlnprt„†‰‹–£¥®°¹ËÔæñú(6>IRWdgilnpy†ˆ‘“œ¡£¥§îóøü "(,02345679;=>@AWdmz|~€•¢«­¯±³¼¾ÀÂÄÆÙáèïü"<CVciv}Š’—Ÿ°·ÀÇÐÒÔÖëôû38MZbgirŒ™­¶ÁÊ!":GIKMR_hjlnpy{}ƒ”Ÿ¡®³µæçéëìîðòóõ  !$&)+-6CENPWdgilnpy†ˆ‘“œÏÑÓÕ×ÚÝàãæéìïòõøûþ  \cjryƒ„†‡‰Š‹‘“”•¨ $)18<@IPW]dmqw{„ŠŽ’”•ž ¢¤¦¨ª¬®°²´¶¸º¼½ÊÍÏÜéëôùûýÿ#%')+4CL[fo„†ˆŠŒ•¤«³ºÁÈÏÖÝßáéíö1<ENQSUÈÍÑ×Ûáãäæèêìîðòôö÷ùûýÿ$13<ACEG\^`bdy{}ˆ–¤«´¹»½¿ÈÑì÷+6?lv}ƒ†‹•œ£¤¥¦¨ª¬­¯±³äéêìîðòôõöøúû,-/135789;=>oprtvxz{|~€®¯°²³µ¶¸º¼¾é  ? H V _ m x « Õ ÿ!*!U!€!«!Ö"","W"‚"‹"–"˜"š"œ"ž" "¢"«"º"É"Ø"å"ù## ##]#_#a#b#d#e#g#h#i#k#m#o#q#r#s#Ö#Ø#Ù#Û#Ý#ß#á#ã#å#ç#é#ë#í#ï#ñ#ó#õ#÷#ø$$$$$"$$$&$($=$?$A$C$E$Z$\$^$`$b$i$p$w$~$…$Œ$•$˜$š$œ%%%%%%%%%% %"%$%%%'%)%+%-%/%1%3%@%M%O%X%]%_%a%c%x%z%|%~%€%•%—%™%›%%¤%«%²%¹%À%Ç%Ð%Õ%×%Ù%Û&& & & & &&&&&&&I&J&L&N&P&R&T&U&V&X&Z&[&Œ&&&‘&“&•&—&˜&™&›&&ž&Ë&Ì&Í&Ï&Ð&Ò&Ó&Õ&×&Ù&Û''1'\'‡'²'Ý((3(^(‰(´(ß(è(ñ(ó(õ(÷(ù(û)B)D)F)G)I)J)L)M)N)P)R)T)V)W)X)»)½)¾)À)Â)Ä)Æ)È)Ê)Ì)Î)Ð)Ò)Ô)Ö)Ø)Ú)Ü)Ý)ê)÷)ù*** * * *"*$*&*(***?*A*C*E*G*N*U*\*c*j*q*z*}***ô*ö*÷*ù*û*ý*ÿ+++++ + + +++++++%+2+4+=+B+D+F+H+]+_+a+c+e+z+|+~+€+‚+‰++—+ž+¥+¬+µ+º+¼+¾+À+í+î+ï+ð+ò+ô+ö+÷+ù+û+ý,.,/,1,3,5,7,9,:,;,=,?,@,q,r,t,v,x,z,|,},~,€,‚,ƒ,°,±,²,´,µ,·,¸,º,¼,¾,À,ê-->-i-”-¿-ê..@.k.–.Á.Ê.Ó.Õ.×.Ù.Û.Ý/$/&/(/)/,/-///0/1/3/5/7/9/:/;/ž/ /¡/£/¥/§/©/«/­/¯/±/³/µ/·/¹/»/½/¿/À/Í/Ú/Ü/å/ê/ì/î/ð000 0 0 0"0$0&0(0*01080?0F0M0T0]0`0b0d0×0Ù0Ú0Ü0Þ0à0â0ä0æ0è0ê0ì0í0ï0ñ0ó0õ0÷0ù0û1111 1%1'1)1+1@1B1D1F1H1]1_1a1c1e1l1s1z11ˆ11˜11Ÿ1¡1£1Ð1Ñ1Ò1Ó1Õ1×1Ù1Ú1Ý1à1â222222222 2"2$2%2R2S2T2V2W2Y2Z2\2^2`2b22¸2ã3393d33º3å3î3õ3÷3ù3û3ý4D4F4I4J4M4N4Q4R4S4U4X4[4]4^4_4Â4Å4Æ4É4Ì4Î4Ð4Ó4Õ4Ø4Ú4Ý4à4ã4å4ç4ê4ì4í4ú55 555555456595;5=5R5T5W5Z5\5c5j5q5x55†55’5•5—6 6 66666666 6#6&6'6*6,6.606365686E6R6T6]6b6e6h6j666„6†6ˆ66Ÿ6¢6¥6§6®6µ6¼6Ã6Ê6Ñ6Ú6ß6á6ã6å777777777"7%7'7X7Y7\7^7a7d7g7h7i7l7o7p77ž7Ÿ7¢7£7¦7§7ª7­7¯7²7Ý8838^8‰8´8ß9 959>9E9H9K9N9P9“9—9›9ž9Ÿ9¢9£9¥9¦9§9ª9­9°9²9³9´9á9ê9í9ð9ò:e:h:i:l:o:q:s:v:x:{:~::‚:…:‡:‰:‹:Ž::“: :­:¯:¸:½:À:Ã:Å:Ú:Ü:ß:á:ã:ø:ú:ý;;; ;;;;%;,;5;:;<;>;@;k;•;ž;«;º;Ç;Ô;è;ñ;ü<=S=U=X=Z=\=q=s=v=y={=‚=‰==—=ž=¥=®=±=´=¶>)>,>->0>3>5>7>:><>?>B>E>F>I>K>M>O>R>T>W>d>q>s>|>>„>‡>‰>ž> >£>¥>§>¼>¾>Á>Ä>Æ>Í>Ô>Û>â>é>ð>ù>þ????1?2?3?4?7?:?=?>?A?D?F?w?x?{?}?€?ƒ?†?‡?ˆ?‹?Ž??À?Á?Ä?Æ?É?Ì?Ï?Ð?Ñ?Ô?×?Ø@ @ @ @@@@@@@@ @!@B@C@D@G@H@J@K@N@y@¤@Ï@úA%APA{A¦AÑAüB'BRB[BfBiBlBoBrBuBwBºB½B¾BÁBÂBÄBÅBÆBÉBÌBÏBÑBÒBÓCC C CCC„C‡CˆC‹CŽCC’C•C—CšCC C¡C¤C¦C¨CªC­C¯C²C¿CÌCÎC×CÜCßCâCäCùCûCþDDDDDDD!D(D/D6D=DDDKDTDYD[D]D_DŠDµDøDûDüDÿEEEEEE E EEEE>EGEJEMEOEÂEÅEÆEÉEÌEÎEÐEÓEÕEØEÛEÞEßEâEäEæEèEëEíEðEýF F FFFF F"F7F9FF@FUFWFZF]F_FfFmFtF{F‚F‰F’F—F™F›FFÈFóG:G]?]B]E]F]w]x]{]}]€]ƒ]†]‡]ˆ]‹]Ž]]À]Á]Ä]Æ]É]Ì]Ï]Ð]Ñ]Ô]×]Ø^ ^ ^ ^^^^^^^^ ^!^R^S^V^X^[^^^a^b^c^f^i^j^›^œ^Ÿ^¡^¤^§^ª^«^¬^¯^²^³^ä^å^è^ê^í^ð^ó^ô^õ^ø^û^ü_-_._1_3_6_9_<_=_>_A_D_E_v_w_z_|__‚_…_†_‡_Š__Ž_¿_À_Ã_Å_È_Ë_Î_Ï_Ð_Ó_Ö_×`` ` ````````` `Q`R`U`W`Z`]```a`b`e`h`i`š`›`ž` `£`¦`©`ª`«`®`±`²`ã`ä`ç`é`ì`ï`ò`ó`ô`÷`ú`ûa,a-a0a2a5a8a;aiAiBiCiFiIiJi{i|iii„i‡iŠi‹iŒii’i“iÄiÅiÈiÊiÍiÐiÓiÔiÕiØiÛiÜj jjjjjjjjj!j$j%jVjWjZj\j_jbjejfjgjjjmjnjŸj j£j¥j¨j«j®j¯j°j³j¶j·jèjéjìjîjñjôj÷jøjùjüjÿkk1k2k5k7k:k=k@kAkBkEkHkIkzk{k~k€kƒk†k‰kŠk‹kŽk‘k’kÃkÄkÇkÉkÌkÏkÒkÓkÔk×kÚkÛl l llllllll l#l$lUlVlYl[l^laldlelflilllmlžlŸl¢l¤l§lªl­l®l¯l²lµl¶lçlèlëlílðlólöl÷lølûlþlÿm0m1m4m6m9mo?o@oCoFoGoxoyo|o~oo„o‡oˆo‰oŒoooÁoÂoÅoÇoÊoÍoÐoÑoÒoÕoØoÙp p ppppppppp!p"pSpTpWpYp\p_pbpcpdpgpjpkpœpp p¢p¥p¨p«p¬p­p°p³p´påpæpépëpîpñpôpõpöpùpüpýq.q/q2q4q7q:q=q>q?qBqEqFqwqxq{q}q€qƒq†q‡qˆq‹qŽqqÀqÁqÄqÆqÉqÌqÏqÐqÑqÔq×qØr r r rrrrrrrr r!rRrSrVrXr[r^rarbrcrfrirjr›rœrŸr¡r¤r§rªr«r¬r¯r²r³rärårèrêrírðrórôrõrørûrüs-s.s1s3s6s9ssAsDsEsvswszs|ss‚s…s†s‡sŠssŽs¿sÀsÃsÅsÈsËsÎsÏsÐsÓsÖs×tt t ttttttttt tQtRtUtWtZt]t`tatbtethtitŽttt“t”t—t˜tšttÊtËtÌtÏtÐtÓtÔt×tÚtÜtßu u5u`u‹u¶uáv v7vbvv²vÝww2w]wˆw³wÞxx,xWx|x¡xÆxðyyFyoyšyÅyðzzFzqzœzÆzñ{{F{q{œ{Æ{ñ||G|r||È|ó}}I}t}Ÿ}Ê}ô~~I~s~ž~É~ôItŸÊõ€ €K€v€¡€Ì€÷"Mx£Îø‚#‚N‚x‚£‚΂ùƒƒIƒtƒŸƒÊƒõ„ „K„v„¡„Ì„÷…"…M…x…¢…Í…ø†#†M†r††È†ò‡‡H‡s‡ž‡É‡ôˆˆJˆtˆ˜ˆÃˆí‰‰C‰n‰™‰Ã‰îŠŠCŠmŠ˜ŠÃŠî‹‹D‹o‹š‹Å‹ðŒŒEŒpŒ›ŒÅŒðFqœÇòŽŽHŽsŽžŽÉŽóItŸÊõ Kv¡Ìö‘ ‘J‘u‘ ‘Ë‘ö’!’L’w’¢’Í’ø“#“E“p“›“Æ“ñ””>”i”””¿”ê••@•k•–•Á•ì––B–m–˜–Öí——B—m—˜—×혘B˜m˜˜˜Ã˜î™™D™n™™™Ã™îššDšnš™šÃšî››D›o›š›Å›ðœœFœqœœœÇœòHsžÉôžžJžuž žËžöŸ!ŸLŸwŸ¢ŸÍŸø # N y £ Î ù¡$¡N¡y¡¤¡Ï¡ú¢%¢P¢{¢¦¢Ñ¢ü£'£R£}£¨£Ó£þ¤)¤T¤¤ª¤Õ¤ÿ¥*¥T¥¥ª¥Õ¦¦+¦V¦¦¬¦×§§,§W§‚§­§Ø¨¨-¨X¨‚¨­¨Ø©©-©X©ƒ©®©Ùªª.ªYª„ª¯ªÚ««0«[«†«±«Ü¬¬2¬]¬ˆ¬³¬Þ¬ç­Ô­×­Ú­Ý­à­ã­æ­é­ì­ï­ò­õ­ø­û­þ®®®® ® ®®®®®®®"®%®(®+®.®1®4®7®:®=®@®C®F®I®L®O®R®U®X®[®^®a®d®g®j®m®p®s®v®y®|®®‚®…®ˆ®‹®Ž®‘®”®—®š®® ®£®¦®©®¬®¯®²®µ®¸®»®¾®Á®Ä®Ç®Ê®Í®Ð®Ó®Ö®Ù®Ü®ß®â®å®è®ë®î®ñ®ô®÷®ú®ý¯¯¯¯ ¯ ¯¯¯¯¯¯¯!¯$¯'¯*¯-¯0¯3¯5¯|¯~¯¯‚¯…¯†¯‰¯Š¯‹¯¯¯“¯•¯–¯—¯ú¯ý¯þ°°°°° ° °°°°°°°°"°$°%°2°?°A°J°O°R°U°W°l°n°q°s°u°Š°Œ°°’°”°›°¢°©°°°·°¾°Ç°Ê°Í°Ï±B±E±F±I±L±N±P±S±U±X±[±^±_±b±d±f±h±k±m±p±}±Š±Œ±•±š±± ±¢±·±¹±¼±¾±À±Õ±×±Ú±Ý±ß±æ±í±ô±û²² ²²²²²²J²K²L²M²P²S²V²W²Z²]²_²²‘²”²–²™²œ²Ÿ² ²¡²¤²§²¨²Ù²Ú²Ý²ß²â²å²è²é²ê²í²ð²ñ³"³#³&³(³+³.³1³2³3³6³9³:³g³h³i³l³m³p³q³t³w³y³|³§³Ò³ý´(´S´~´©´Ô´ÿµ*µUµ€µ«µÖ¶¶ ¶¶¶¶¶!¶$¶&¶m¶o¶r¶s¶v¶w¶z¶{¶|¶~¶¶„¶†¶‡¶ˆ¶ë¶î¶ï¶ò¶õ¶÷¶ù¶ü¶þ···· · ······#·0·2·;·@·C·F·H·]·_·b·d·f·{·}·€·ƒ·…·Œ·“·š·¡·¨·¯·¸·»·¾·À¸3¸6¸7¸:¸=¸?¸A¸D¸F¸I¸L¸O¸P¸S¸U¸W¸Y¸\¸^¸a¸n¸{¸}¸†¸‹¸Ž¸‘¸“¸¨¸ª¸­¸¯¸±¸Æ¸È¸Ë¸Î¸Ð¸×¸Þ¸å¸ì¸ó¸ú¹¹¹ ¹ ¹¹;¹<¹=¹>¹A¹D¹G¹H¹K¹N¹P¹¹‚¹…¹‡¹Š¹¹¹‘¹’¹•¹˜¹™¹Ê¹Ë¹Î¹Ð¹Ó¹Ö¹Ù¹Ú¹Û¹Þ¹á¹âººººººº"º#º$º'º*º+º\º]º`ºbºeºhºkºlºmºpºsºtº¡º¢º£º¦º§ºªº«º®º±º³º¶ºÚºþ»"»M»x»£»À»Ý»ú¼%¼P¼{¼¦¼Ñ¼ü½'½R½}½†½“½–½™½œ½Ÿ½¢½¥½§½î½ð½ó½ô½÷½ø½û½ü½ý½ÿ¾¾¾¾¾ ¾l¾o¾p¾s¾v¾x¾z¾}¾¾‚¾„¾‡¾Š¾¾¾‘¾”¾–¾—¾¤¾±¾³¾¼¾Á¾Ä¾Ç¾É¾Þ¾à¾ã¾å¾ç¾ü¾þ¿¿¿¿ ¿¿¿"¿)¿0¿9¿<¿?¿A¿´¿·¿¸¿»¿¾¿À¿Â¿Å¿Ç¿Ê¿Í¿Ð¿Ñ¿Ô¿Ö¿Ø¿Ú¿Ý¿ß¿â¿ï¿ü¿þÀÀ ÀÀÀÀ)À+À.À0À2ÀGÀIÀLÀOÀQÀXÀ_ÀfÀmÀtÀ{À„À‰À‹ÀÀÀ¼À½À¾À¿ÀÂÀÅÀÈÀÉÀÌÀÏÀÑÀþÀÿÁÁÁÁÁÁ ÁÁÁÁ7Á[ÁÁ¢ÁÅÁèÁñÁöÁùÁüÁþÂEÂGÂJÂKÂNÂOÂRÂSÂTÂVÂYÂ\Â^Â_Â`ÂÃÂÆÂÇÂÊÂÍÂÏÂÑÂÔÂÖÂÙÂÛÂÞÂáÂäÂæÂèÂëÂíÂîÂûÃà ÃÃÃÃà Ã5Ã7Ã:Ã<Ã>ÃSÃUÃXÃ[Ã]ÃdÃkÃrÃyÀÇÃÃ“Ã–Ã˜Ä ÄÄÄÄÄÄÄÄÄ!Ä$Ä'Ä(Ä+Ä-Ä/Ä1Ä4Ä6Ä9ÄFÄSÄUÄ^ÄcÄfÄiÄkĀĂąćĉĞĠģĦĨįĶĽÄÄÄËÄÒÄÛÄàÄâÄäÄæÅÅÅÅÅÅÅÅ Å#Å&Å(ÅYÅZÅ]Å_ÅbÅeÅhÅiÅjÅmÅpÅqŢţŦŨūŮűŲųŶŹźÅçÅèÅéÅìÅíÅðÅñÅôÅ÷ÅùÅüÆ'ÆRÆ}ƨÆÓÆþÇ)ÇTÇǪÇÕÈÈ ÈÈÈÈÈÈ ÈgÈiÈlÈmÈpÈqÈtÈuÈvÈxÈ{È~È€ÈÈ‚ÈåÈèÈéÈìÈïÈñÈóÈöÈøÈûÈýÉÉÉÉÉ É ÉÉÉÉ*É,É5É:É=É@ÉBÉWÉYÉ\É^É`ÉuÉwÉzÉ}ÉɆÉɔɛɢɩɲɵɸɺÊ-Ê0Ê1Ê4Ê7Ê9Ê;Ê>Ê@ÊCÊFÊIÊJÊMÊOÊQÊSÊVÊXÊ[ÊhÊuÊwʀʅʈʋÊʢʤʧʩʫÊÀÊÂÊÅÊÈÊÊÊÑÊØÊßÊæÊíÊôÊýËËËËË5Ë6Ë7Ë8Ë;Ë>ËAËBËEËHËJË{Ë|ËË˄ˇˊˋˌËË’Ë“ËÀËÁËÂËÅËÆËÉËÊËÍËÐËÒËÕÌÌ+ÌVÌ̬ÌÖÍÍ,ÍUÍ^ÍeÍhÍkÍnÍpͷ͹ͼͽÍÀÍÁÍÄÍÅÍÆÍÈÍËÍÎÍÐÍÑÍÒÎ5Î8Î9Î<Î?ÎAÎCÎFÎHÎKÎMÎPÎSÎVÎXÎZÎ]Î_Î`ÎmÎzÎ|΅ΊÎÎΒΧΩάήΰÎÅÎÇÎÊÎÍÎÏÎÖÎÝÎäÎëÎòÎùÏÏÏÏ Ï}Ï€ÏτχωϋώÏϓϖϙϚÏϟϡϣϦϨϫϸÏÅÏÇÏÐÏÕÏØÏÛÏÝÏòÏôÏ÷ÏùÏûÐÐÐÐÐÐ!Ð(Ð/Ð6Ð=ÐDÐMÐRÐTÐVÐXЅІЇЈЋЎБВЕИКÐÇÐÈÐÉÐÌÐÍÐÐÐÑÐÔÐ×ÐÙÐÜÑÑ2Ñ]ÑÑ¥ÑÉÑÒÑ×ÑÚÑÝÑßÒ&Ò(Ò+Ò,Ò/Ò0Ò3Ò4Ò5Ò7Ò:Ò=Ò?Ò@ÒAÒ¤Ò§Ò¨Ò«Ò®Ò°Ò²ÒµÒ¸Ò»Ò½ÒÀÒÃÒÆÒÈÒÊÒÍÒÏÒÐÒáÒöÒüÒÿÓÓ ÓÓÓÓÓ*Ó/Ó<ÓIÓVÓXÓaÓfÓiÓlÓnӃӅӈӊӌӡӣӦөӫӲӹÓÀÓÇÓÎÓÕÓÞÓáÓäÓæÔYÔ\Ô]Ô`ÔcÔeÔgÔjÔlÔoÔrÔuÔvÔyÔ{Ô}ÔÔ‚Ô„Ô‡Ô”Ô¡Ô£Ô¬Ô±Ô´Ô·Ô¹ÔÎÔÐÔÓÔÕÔ×ÔìÔîÔñÔôÔöÔýÕÕ ÕÕÕ Õ)Õ.Õ0Õ2Õ4ÕaÕbÕcÕdÕgÕjÕmÕnÕqÕtÕvÕ§Õ¨Õ«Õ­Õ°Õ³Õ¶Õ·Õ¸Õ»Õ¾Õ¿ÕðÕñÕôÕöÕùÕüÕÿÖÖÖÖÖÖ9Ö:Ö=Ö?ÖBÖEÖHÖIÖJÖMÖPÖQÖrÖsÖtÖwÖxÖzÖ{Ö~Ö£ÖÈÖí××C×n×™×Ä×ïØØEØpØyØ„Ø‡ØŠØØØ“Ø•ØÜØÞØáØâØåØæØéØêØëØíØðØóØõØöØ÷ÙZÙ]Ù^ÙaÙdÙfÙhÙkÙnÙqÙsÙvÙyÙ|Ù~ـكمنٜٓٚ٩ٶٸÙÁÙÆÙÉÙÌÙÎÙãÙåÙèÙêÙìÚÚÚÚ Ú ÚÚÚ Ú'Ú.Ú5Ú>ÚAÚDÚFÚ¹Ú¼Ú½ÚÀÚÃÚÅÚÇÚÊÚÌÚÏÚÒÚÕÚÖÚÙÚÛÚÝÚßÚâÚäÚçÚôÛÛÛ ÛÛÛÛÛ.Û0Û3Û5Û7ÛLÛNÛQÛTÛVÛ]ÛdÛkÛrÛyÛ€Û‰ÛŽÛÛ’Û”ÛÁÛÂÛÃÛÄÛÇÛÊÛÍÛÎÛÑÛÔÛÖÜÜÜ Ü ÜÜÜÜÜÜÜÜÜPÜQÜTÜVÜYÜ\Ü_Ü`ÜaÜdÜgÜhܙܚÜܟܢܥܨܩܪܭܱܰÜâÜãÜæÜèÜëÜîÜñÜòÜóÜöÜùÜúÝ+Ý,Ý/Ý1Ý4Ý7Ý:Ý;Ý<Ý?ÝBÝCÝdÝeÝfÝiÝjÝlÝmÝpÝ›ÝÆÝñÞÞGÞrÞÞÈÞóßßIßtߟßÊßõà àKàvààŽà‘à”à—àšàà à£à¥àèàëàìàïàðàòàóàôà÷àúàýàÿááá.á7á:á=á?á²áµá¶á¹á¼á¾áÀáÃáÅáÈáËáÎáÏáÒáÔáÖáØáÛáÝáàáíáúáüââ â âââ'â)â,â.â0âEâGâJâMâOâVâ]âdâkârâyâ‚â‡â‰â‹ââ¸âãã&ã)ã*ã-ã.ã0ã1ã2ã5ã8ã;ã=ã>ã?ãlãuãxã{ã}ãðãóãôã÷ãúãüãþääää ä ä ääääääää+ä8ä:äCäHäKäNäPäeägäjälänäƒä…äˆä‹ää”ä›ä¢ä©ä°ä·äÀäÅäÇäÉäËäöå!ådågåhåkålånåoåpåsåvåyå{å|å}åªå³å¶å¹å»æ.æ1æ2æ5æ8æ:æ<æ?æAæDæGæJæKæNæPæRæTæWæYæ\æiævæxææ†æ‰æŒæŽæ£æ¥æ¨æªæ¬æÁæÃæÆæÉæËæÒæÙæàæçæîæõæþçççç ç4ç_ç¢ç¥ç¦ç©çªç¬ç­ç®ç±ç´ç·ç¹çºç»çèçñçôç÷çùèlèoèpèsèvèxèzè}èè‚è…èˆè‰èŒèŽèè’è•è—èšè§è´è¶è¿èÄèÇèÊèÌèáèãèæèèèêèÿéééé éééé%é,é3é<éAéCéEéGéré•éØéÛéÜéßéàéâéãéäéçéêéíéïéðéñêê'ê*ê-ê/ê¢ê¥ê¦ê©ê¬ê®ê°ê³êµê¸ê»ê¾ê¿êÂêÄêÆêÈêËêÍêÐêÝêêêìêõêúêýëëëëëëë ë5ë7ë:ë=ë?ëFëMëTë[ëbëiërëwëyë{ë}ë¨ëÓìììì ì ìììììì,ì.ì1ì4ì6ì8ìEìJìMìPìUìXì[ì]ìfìoì|ììˆìŠì—ìšì£ì¥ì°ì½ìÀìÃìÆìÉìËìÔìáìäìíìïìøìûìþííGíMíTí[í^íaíbícífígíhíkíníqírísí€íƒí†í‰íŒíŽíœíªíÐî3î6î7î:î=î?îAîDîGîJîLîOîRîUîWîYî\î^î_îlîƒî…î’î™î›î¤î©î¬î¯î±îÆîÈîËîÍîÏîäîæîéîìîîîûïï ïïïï&ï-ï4ï=ï@ïCïEï¸ï»ï¼ï¿ïÂïÄïÆïÉïËïÎïÑïÔïÕïØïÚïÜïÞïáïãïæïóððð ððððð-ð/ð2ð4ð6ðKðMðPðSðUð\ðcðjðqðxððˆððð‘ð“ðœð©ð¸ðÅðÒðæðïðúññ ñññññ$ñ/ñ7ñJñUñ^ñgñlñoñrñtñ³ñ½ñÄñÊñÏñÔñÚñàñæñìñññøñùñúñüñÿòòòò ò ò ò òòòò7òBò‘ò—òò¤ò¨ò¯ò¶ò¼òÁòÈòÍòÓòÙòàòçòíòðòòòóòõòøòûòþóóóó ó ó óóóóó"ó$ó1ó>óAóDóGóJóMóPó]ó`ócóeóhókónópówó}ó¢ó¨ó¯óÜóéóêóëóíóúóûóüóþô ô ô ôôôôô ô)ô4ôBôOôPôQôSô`ômôoôsôyôô†ôô–ô«ô²ôÇôÐôÙôãôìôöõõ õIõJõKõMõPõSõUõWõYõZõ\õ]õ^õaõcõuõÄõÇõÈõÊõÍõÐõÓõÖõØõÛõÞõáõâõåõèõëõîõðõýö ö öööööö)ö,ö/ö1ö4ö7ö:ö<öCöIönötö{ö¨öµö¶ö·ö¹öÆöÇöÈöÊö×öØöÙöÛöèöéöêöìöõ÷÷÷÷÷÷!÷.÷0÷7÷>÷G÷H÷J÷T÷p÷}÷ƒ÷…÷Ÿ÷î÷ð÷ñ÷ó÷ö÷ù÷ü÷ÿøøøø ø øøøøøø%ø2ø5ø8ø;ø>øAøDøQøSøVøYø\ø_øbødø‰øø–øø£øÐøÝøÞøßøáøîøïøðøòøÿùùùù ù ùùù(ù)ù*ù,ù5ùWùdùeùfùhùuù€ù‚ù†ùù¡ù®ùÁùÄùÇùÊùÍùÐùÓùÖùÙùÜùïùòùõùøùûùþúúúú ú ú!ú,ú8úMú[úfúpú~ú’ú“ú«ú´úÁúÂúÃúÅúÎúÛúÞúáúîúÿûûûû ûûûûû(û+û.û1û4û7û:û=û@ûBû[ûiûvûŽû¥û¼ûÈû×ûØûÝûâûëû÷ûüüüü$ü'ü*ü-ü0ü3ü6ü9üHüKüNüQüTüWüZü]ü_ü„ü¯ü·üÝýý ý4ýAýHýKýNýQýXýZý]ý`ýbýhýtý}ý†ý‰ýŒýý’ý”ýý¦ý³ýºý½ýÀýÃýÊýÍýÐýÓýÕýÜýäýéýöýûýþþþþ þ þþþþBþqþ~þ‡þŠþþþ“þœþŸþ¢þ¥þ§þ©þ²þ»þÄþÍþÚþëþîþñþôþ÷þúþýÿÿÿÿÿÿÿÿ"ÿ%ÿ(ÿ+ÿ-ÿ3ÿ9ÿ?ÿEÿJÿNÿWÿ`ÿiÿkÿtÿvÿyÿ‚ÿŠÿ•ÿÿ°ÿ»ÿÄÿÖÿÛÿà•ÿâcups-2.2.7/cups/cupspm.png000664 000765 000024 00000513572 13255074424 016157 0ustar00msweetstaff000000 000000 ‰PNG  IHDRxQ"Ug· iCCPICC Profile8U]hU>»sg#$ÎSl4…t¨? % “V4¡´ºÝÝ6n–I6Ú"èdöîΘÉÎ83»ý¡OEP|1ê›Ä¿·€ (õÛ>´/• %ÚÔ (>´øƒP苦ë™;3™iº±Þeî|óïž{î¹gï蹪X–‘š®-2âs‡ˆ=+„‡ ¡WQ+]©L6O wµ[ßCÂ{_ÙÕÝþŸ­·F qb³æ¨ ˆð§UËvzú‘?êZöbè·1@Ä/z¸ác×Ãs>~ifä,âÓˆUSjˆ—ÌÅøF û1°Ö_ Mjëªèå¢b›uÝ ±pïaþŸmÁh…ómçϙŸ>„ïa\û+5%çáQÄKª’ŸFüâkm}¶àÛ–›‘?ÜÞš¯¦ïD\¬Ûª¾Ÿ¤­µŠ!~ç„6ó,â-ˆÏ7çÊSÁØ«ª“ÅœÁvÄ·5Zòò;À‰º[šñÇrûmSžòçåê5šË{yDüú¼yHö}rŸ9íé|èó„–-ü¥—”ƒăˆ¡FAöçâþ±ÜJjåI.’£[/ã]m¦èÏK 7ÔKëúR ÿD³‹r€¯Y«QŒOÚ-¹êëùQÅÎ|Ÿ|…6«¾ ³ (˜0‡½ MXd(@ߨh©ƒ2­Š_¡fçÀ<ò:´™ÍÁ¾Â”þÈÈ_ƒù¸Î´*d‡>‚²üެÓeñ«…\c?~,7?& ÙƒÏ^2Iö‘q2"yŠ@ÿ«g Ÿ|UP`þoØiTXtXML:com.adobe.xmp Michael Sweet Copyright 2017 Michael Sweet New Icon yP~DIDATxÚìÝy˜TÅÕøñ¾Ã:€ ¸ ¢‚¼ ‚à.*JPT\HÔhLРFã/.1úº Qcˆ;q‹¸£"‰Šy5.hÄ5h¢¨D\AQÔ(`gºï½u‹ßÀÐËížè;Sçô·žyf>=<Ï9UuoŸ®ª›Z•JñÅ_|ñÅ_|ñÅ_|ñÅ_|Uä«èlÇãñx<Çãñx<ÁÂãñx<Çãñx<_1Otðx<Çãñx<ÇWÌçP[ÞoÄãñx<Çãñx<·%V4Ø&þx<Çãñx<Çãñ…eÇãñx<ÇãñøŠùFÖEØ‚áñx<Çãñx<Çóo´XUÆ¿„Çãñx<Çãñx<¿nEƒ]÷-ÏæÖ*lÜ?€Çãñx<Çãñx<_è›¶%Ãâñx<Çãñx<ÇùÈ–}¤$Çãñx<Çãñx|ž/µãÂÆ¼ÒÃãñx<Çãñx</æóOŒÌ]ᕨgàñx<Çãñx<ÇçùxQbßÇãñx<Çãñx|1¿§Â|sUÉoâñx<Çãñx<ÇÛTc‡F–sÞÇãñx<Çãñx|þІ†…õ [r‡Çãñx<Çãñx¼Í> ÒÆ¸¼?Äü3x<Çãñx<ÇãñÙ>æ%ö]¬Âãñx<Çãñx</îckžÍýsÞ!x<Çãñx<Çãñ±~ͲwŠCñõx<Çãñx<Çãñ1>ç HÛØ ‹Çãñx<Çãñx<_ÜÇ/x(òK=‹Çãñx<Çãñx<_ÜÇ!lɧVàñx<Çãñx<Çóùå‡ì²D‰§eâñx<Çãñx<ÇúøÇ®ˆ(ñëðx<Çãñx<Çãm*î8[ä;ÅŽÀãñx<Çãñx<_·¢Áæ' Ï´EÎ{Àãñx<Çãñx<Ïö¥J/k¤¤Çãñx<Çãñx<¾Ê}Yë"JÿF<Çãñx<ÇãñxûÔ [rë…Åãñx<Çãñx</þÍüjDl‰¢Ñáñx<Çãñx<ǯJyŠT#Çãñx<ÇãñøêõE]ù5 <Çãñx<Çãñø¦øâ‹/¾øâ‹/¾øâ‹/¾øâ‹/¾ýj´8ÑxaÇãñx<Çãñx<~µ/Wç~áñx<Çãñx<Ç{ë½u‚Háñx<Çãñx<oܯûSTEq¿Çãñx<Çãñx<>*oEƒ5±¤Çãñx<Çãñx<_X¨ðŠ”+Š6ðx<Çãñx<Çã½ì ^™0"<Çãñx<Çãñøâ~Ý£‚‚DT²hÇãñx<Çãñx<Ÿç-Nä½ÞÃãñx<Çãñx</æóKQÁˆ¨xõÇãñx<Çãñx<>ÛǬˆ(gÇãñx<Çãñx|{FCöʇ(®t‘÷M<Çãñx<ÇãñøXŸ³þ¡°D·"Çãñx<Çãñx<>ÞÇì¸(¶ ÃùÇãñx<Çãñxüê¿æ,{ˆ}L…Í:O2Âãñx<Çãñx</îóÏlˆŠì»ˆ N}Àãñx<Çãñx<Ïó©Æ–Cx±ÿÇãñx<Çãñx|¡Ï92û”ÈՎ⟓‰Çãñx<Çãñx<ãK-Š(|e„Çãñx<Çãñx<_ܯ;¶!öèÈܵžÅãñx<Çãñx</îãŸEѰ.¢ÌgWàñx<Çãñx<ÇÛ”—~CÞ*ˆb<àñx<Çãñx<Çúü-%VDd•1ðx<Çãñx<Çãc|üv‹B9 Çãñx<Çãñx<¾áûñ/¶Eððx<Çãñx<Çã‹ùøòC”»¢ôN <Çãñx<Çãñø5+b_Pð¯ô?€Çãñx<Çãñx<¿fEC£%ŠÂáñx<Çãñx<Ç~3þÅ%Eàñx<Çãñx<Çó9å‡F·aäýÇãñx<Çãñx<ÞœÑP Ö0ðx<Çãñx<Çãc}㕉ØÇãñx<Çãñx|¡/¥Ëüðx<Çãñx<ÇãW›¢uˆ¸_áEx<Çãñx<ÇãñÅ}ãË!Ê_8Çãñx<Çãñx<¾Ê}ªXY¢ì_‡Çãñx<Çãñx<ïå¼"¿®ØïÅãñx<Çãñx<Ï÷M¨X”÷ñx<Çãñx<ÇW¯/çÅ^Ùe <Çãñx<ÇãñUí×iSðú†ï˜¸ßŽÇãñx<Çãñx<oвK^ñÅÇãñx<Çãñx|1Ÿ_09% /*ðx<Çãñx<Çã }Ñu¥ÿŠÇãñx<Çãñx<_èój^^YÂäþ.“Âãñx<Çãñx</êã×?4é7âñx<Çãñx<Çç¯hÈ{±)õ2<Çãñx<ÇãñøŸS“(R–𲿃Çãñx<Çãñx<_ÌÇç`âE˜|†Çãñx<Çãñx<Ÿïc7ZÄ?ÓýÇãñx<Çãñx¼×°u¢áq^V}"g-„ÉY/Çãñx<Çãñx<ãSQüžŠ¼²„Wp¶$Çãñx<Çãñx|¾Ï«Iä-LÎk kx<Çãñx<ÇãñëLþc*ò~\°ÃÃãñx<Çãñx</æS&CvÅ¢°>Çãñx<Çãñx<_ÔÇo±(Ü€ÑP®Àãñx<Çãñx</æã·[ÄmÀÈÿíx<Çãñx<Çãñy>ÿÅ%öcä÷€Çãñx<Çãñx<ŸçS…;.òŠy‡Lâñx<Çãñx<Çóñ"kßEüs,ðx<Çãñx<Çã }*¶&a þZð#<Çãñx<Çãñøüon«(zÒÃÚMx<Çãñx<Çãññ>ïä¯ô6 “Âãñx<Çãñx</êóQáé‘k«^aÇãñx<Çãñx<>fECa­Â4rÎ$Çãñx<Çãñx|¾yYá¥ÿ<Çãñx<ÇãñøÕ?©C{qa¹Çãñx<Çãñx<>[–Ú:aŠÿÇãñx<Çãñx<¾ÔÖ‰bë"Jÿcx<Çãñx<Çãñ ßlä5|Ÿïó}¾Ï÷ù>ßçû|Ÿïó}¾Ï÷ù>ßçûå¿ñU&•2ÅNàñx<Çãñx<Çç¬h(xq#U <Çãñx<ÇãñøX_¢&Qêø<Çãñx<ÇãñxSú0ȵ¥ˆ¢Œ"[2ðx<Çãñx<Çã½¼BC£E Ïàñx<Çãñx<Çÿ+!Àãñx<Çãñx<_1_þëË9mÇãñx<Çãñx|Uû5 ù ÀÃãñx<Çãñx</æó^ìŽ2Uä Çãñx<Çãñx<ÞË[ѰN‡ñhÝÑ‘!Çãñx<Çãñx|qßèZˆ¼UÇãñx<Çãñx|1ûšÂ3¼Ø_Çãñx<Çãñx<Ÿí×ü)ÌùÚÿ¼f]¹Çãñx<Çãñx<¾Ð¯«I„E–FlºÀãñx<Çãñx<÷¬‹ ~„Çãñx<Çãñx<_ÌÇÖ$r?˜"«#ðx<Çãñx<Çãó|ª¡&±ÖåT)¾ŸW¨Àãñx<Çãñx</ôñåS°#Œ+càñx<Çãñx<Çç=u"û$ɆRDL•"wcÇãñx<Çãñx|¾=¹Á+¾XÂÃãñx<Çãñx</泫^¸öõ…ÇH†YÇãñx<Çãñx<>ÖÇŠ˜_‘w¶$Çãñx<Çãñx|¡OÅÖ$ò“Ì{1Çãñx<Çãñx|¬/VœÈyˆEîy’x<Çãñx<Çãññ>Ux®Cá2óÄãñx<Çãñx<õù+LÁa’ Ï«Èz/÷onº©éÑ#Üi§pÐ 3l˜ùÁÌñÇG§žt’ùÑ̈fذpŸ}Ì.»˜v·Ù&ÜtSÓ¡CèyÄÇãñx<¾™¼ç…]»šm¶1}ú„†ƒ™¡CÍ¡‡š£6ÇrŠ=:úéOÍ~d~ð3|¸ùÞ÷½÷6»îjúõ {õ ·ÞÚl´ñÄã³}þâ‡Â… <n¾¹<Øœ|r4aBtß}ÑSOÙ—^²o¾i?üÐþç?öÛo­1«6 ÙåËí»ïF3fD“'G—^jF6‡î¸cر#ñÇãñx<o²ßh£p§Ì!‡˜“O6ãÆEøCôÐCöÕWíÂ…Ö÷Wmp³é´]¸Ð¾þzôÄÑÝwGW_mÎ=75Ê Ùdò…¯*Ÿ´CÁ¡‘^á!x|uùÍ6 ÷ÝלtRôÛßF÷ßog϶ß~»ªåš]ºÔþûßÑcE¿û9æ˜pûíÉÇãñx|ŽïÐ!ÜsOsòÉѵ×FOûY¥÷cä*ðx¾M›pß}ÍÅÛ¿ÿÝÖÕ­ª²f-ЦL1'œ`6ßœþ€Çãñx<^Œ÷¼pŸ}¢k®±óæ­ªÖfW¬°=dÆŒ »w§ÿàÝ÷ùå‡FËx¼<_Sc9$úË_ìÊ•«h«VYkíë¯G¿þµéуþÓ<~õÂN¡_ávÛ‘ßD½¹øbÁÝÃýø"7¼J¾n»-ºá†èŠ+¢ñã͹çšÓO7'dŽ;nÝ3žwÞÙôén±ó>ß·ic†n»Í~ù%÷o9÷rsæDW^î¿تýï¦/±Â+]½Àãø>}¢ßý®VÖ­ÅáùçÍÏ~vêDÿIÔGwÜ!·Ÿ„{ìA~õvölÁÝÃùø›ÓNc¶sUª¯·ï¿͘Ý~{4nœ9þøpð`Ó½{XSÃ|R]¾m[sì±ÑŸÿܲÏù’1j–-‹¦M3dzzcýïŽ_ó‚šD±*/ÀwîlÆŒ±ÿø—ŸòOЦN5¼úfŽþVq/½Ð@~õ¢ îÇ?¢Ð à"åûvþüèÙg£[n1£F5œÇ|¢Ð÷ì]u•]²„nßäa²xq4qbدý ïˆ[⛃¼FÀã]ñ55æ ƒ¢©S«ðü…Š]¥>ÿ<ºòÊpÇéo•õ ä79¯`EƒËñgEƒÖ÷Tö‘GÌ…†C†„µµÌ'â}M9âˆèñÇmѽ7ttÌšeF;v¤¿á[Ö§²VA4Z´ðB<ÞMß»w4a‚]¸«KÅ®Rÿø‡9òÈÐóèoñò ä7A/¿Ðàtü)4è¿`}ýõèæ›ÍÈ‘á[0ÿó›on.¼Ð.X@O®ð¸X±"š<9Ügú¾¥|±”zpïÿÞ÷ìÌ™\N’ºJ½óN4jTغ5ým½–­ä7¯æŒ7ãO¡¡º.[ÆDÏœù*¿ñÆÑwÒÇÔݾýÖœ~záÁ ôgüúø`kÿ4ò/áñÉøÖ­Í¸q6fö—q‰J§£Ë/;t ?óò ÌW z['Ü?…ZãW±7Þ0Ì|UAoŽ9Æ~ù%]KÒ(˜5+Üi'ú3¾‚¾XMÂ+^±Àãö{ìaçÌaÆ—w‰Z¸ÐüøÇôçX¯eEóU"^×Ö çâO¡Vîê†\{T$óÕø­¶Š~˜î$òF.¢+®Û·§?ã+â×Õ$‚âÏÆÌþŸ ¯­®½ÖÃ\/øFíÉ'ÃnÝèÏy^ÇŠæ«„¼ô ŽÇŸB­ o´¾ûÎ\tQض-óÕúysê©vÙ2:’ìQ0¾6ŒþŒßpŸŒdÃFJx|…½9ð@ûÑGÌï.Q‹›#èÿÙ@ÝaÌo•ôòW48 ´&_Å>ü0\spóUÙ¾C‡èϦó(Qd.¹$ôèÿø òy¯ J±æû… <¾ržã‚T.m¸å–†Õwô['˜¯ò*V4¸ ´õ¼Š=ôP¸ÝvÌWeùí·gÓ«Â!ðè£A—.ôüzûTñ 1G;x|¥=Çi®ˆ¿óN¸óÎô['˜¯’ó*ƒt7þhë««3§ŸÎ|UÚ›Cµß|CoÑ9æÍË=!’þo‚_w†d[ˆ­R„x|ýV[E=Ä$®ü•ɘsÎÉZ}W¥ý_ÍaÌoIxé['?…Ú†~®{ß}a§NÌW1Þó̸q6Šè$šoä¾ûÎwý¿>U¬Vä/~X÷L <¾~èP»d ÓwµÜ¥Í˜l¹e5÷é…æ·D½¦Ç[: ´ ¼×úàƒpÀæ«¿ÑF|\TE7r×]¶jEÿÇ7ɧ‚ÜÇ]EŽ‘Ì}r&¿AÞœq† CfíêºK[²$ÜwߪíÿŠž:ÁüVy/¿Ðàtü)4Ð*s«¯7§œÂ|µÆ÷ìiß{^Q]µ†™3ƒM7¥ÿãË÷ùg9„¹G8>ß ß¶m4y2“u•Þ¥¥ÓæG?ªÎþ¯è0Hæ·Ê{Ñ…÷ãO¡VÉ÷ZwßÖÖVûüÖ«—]¸ÎP7rÿþw¸Ùf\ßñeúT¬ þš]ŸÀã×ÓwëfgÍbš®êK”µæüó«°ÿ+Ø:Áü–œ×ñÔ gãO¡Vá ÙܹAïÞÕ;¿õîm?ÿœnP͵†`³Í¸¾ãËñkê A‘#%㛉ǯ—ßsO®L´ÕÍÜzëê~ÕÓÿU¬h`~KÊkYÑàhü)4Ð*ÿ^kÑ¢pÀ€jœ¯vØÁþç?tj áf›q}Ç7êóv\äl«ÈÝw‘ cvhàñey3j”M§™ši -z≠çoåãEA¡ù-9¯àŒ—ãO¡–È{­ÿþ7Ø}÷ꚯúõãyä´‚u \ßñE}β‡ §báå–+²_†Ç—í[µ2'2#Ób®Ro¾l½u•Œ‡A2¿%祯hp<þhI]žývõ!ÇU1_í´“]´ˆ¤Óòj \ßñ%|Î’Y…Šü}qk$ðøÆü&›DO?Í\L+z•úì³Õ«OÕ['˜ßòÂW4¸ ´¯b+WšÐ?_ È#Éi±µ††³!¹¾ã }ÌѹË!ržTàñåûÞ½íüùÌ´F®RË–»îª~¼¨9 ’ù- /ÿŒ§ãO¡–ìU¬¾><ì0ÍóÕÖ[s.­Ôº†.]¸¾ãc}þ·‚ÜÿùÏÉôðø²|¯^ýH+÷*µxqØ·¯îñ¢`ëó[r^ÅaîÆŸB-ñ«˜ï‡G¥s¾j×Îþë_¤˜V¢E>x×w|¡Ï¯I”üÕ9›.ðø¢~ûíyÀ2­iwiŸôè¡x¼h9 ’ù-/}ë„ãñ§Ð@kŽ«X:¤o¾Š¦L!¹´F›ùõ¯¹¾ã }ª¡,{CáZ<¾ߣ‡ýäæ\Z“ïÒæÏ·ÜRëxQs$óa^ÍanÆŸB­™®b_~tï®i¾2çžKZieuþ( ;Œë;>ï›ñÏ¢(<@²°’ÇÇøm·µ 0áÒÖóBõöÛá&›¨/ Îh`~KÎË? ÒéøSh 5ßUì7‚tÌWᡇZcÈ)­Üοti¸ýö\ßñÙ>¿üPX±ˆýã»w·}ÄTKÛýóŸA§NúÆ‹šBóa^ÁŠ—ãO¡Ö¬W± =ùóUŸ>vÙ2²IkZ­á­·‚ÚZ®ïø¼ ^áj‡œ¢fc¿¶ÚÊΛÇ$K«À]ÚÌ™aûöÊÆ‹š­̇Ix['œ?…Z37ó›ßÈž¯:w¶ï¿Oiës wï½\ßñ9‡A9I2fÇE€ÇÇú-·´|ÀôJ«Ø…ê±Ç‚V­4-·d>LÄ+8 ÒåøSh 5÷çºÖ†Ç'w¾Š¦N%‰´õ/´y&×wüº Åjq¬ððøüm±…}÷]&VZ…/TW^©i¼¨Ü:Á|X)¯c넳ñ§Ð@kZC}}8`€Äù*1‚ôÑ6¨óAد×w|ÎÖ‰ÂEìËðøœ¿n¾¹;—Y•–È'B?øšñ¢lëóae½ôBƒãñ§Ð@k™«ØìÙAëÖÂæ«Îí矓;Ú¶è…¸¾ã‹žÑõ¯ÄoÄW»¯­}Lsý.méÒ`ûíuŒ['˜òšÎhp0þh-ÕÌÅËš¯¢Ûo'k´ÊÜ9œ|2×w|ªÌÔ3ðøTtï½Ì¤´dk o¼´k§`¼¨)40&á…\?…Z‹]Â|?Üi')óUxÀÖZ²F«Lç_²$Èz`9÷ÕéWÿÅ+"rêYÅ <>eÎ>›i”Ö -úãŒg40&䵬hp4þh-y {íµ U+óU‡<¡œVáÎÇ\ß«Ü}HfA¡"æGøªõáС6 ™CiÍôF÷¤“¤/]+˜+ìœÑàrü)4ÐZ¶™‹.r¾2¿ÿ=™¢U¶YkÃ}÷å~ š}!j¨XíûKñÕç·ÝÖ.^ÌJk¾kU}}0p èñ%¿ÐÀ|˜ W·¢Á­øSh µð%,“ ú÷wy¾  ²QD¦h•ïüsæ¬>•ûêô¥ŸŠYüm|Õúví¢×^cê¤5÷µjÞ¼°sg¹ãKÓã-™+îEÜ?…ZË_Â^}Õåù*š9³Ú”NÛ¹s£^ˆþö·è/‰n¿Ý\w¹äsÎ9æ¿0çŸo~ó3q¢¹í¶hêÔèᇣ§ŸŽfͲsæØ>²ß|C/Ñ̹çr?Pµ>æeqg<”úgðU壻îbÒ¤µH‹¦L‘;¾”m`>¬¬—¿¢ÁéøSh 91‘þð‡nÎ?áàÁUWVøúëè嗣ɓ͹ç†Gl¿}XS³AñÜd“pРpÔ(sùåÑý÷ÛÙ³íòåôù5Ñ^¹2Øl3îªÓÇn´ðb×?kWGà«Ö›_ü‚“Ö’7jÆ _*¶N0&åUlp7þhN¼Ýš;wí»Y·ÆKôä“UcìK/™ÿýß oßfŠ·ná!áØ±Ñ´ivÙ²jîüæÒK¹¨N_ø²ÒÅW¯÷ßß÷ ´–¼Q˜7/h×NâøÒ²¢ù0¯àñ–.ÇŸBÍ•¹ô„\/á{(¿mX±"úë_ÃO 6Ý´%çÿ֭áCÍ5רwÞ©Æ›·Å‹ƒví¸¨B_zß…WzK¾ŠüÖ[Û¯¾â.¡Ü)uÉ;¾}óÍèÅ£'žˆx š<Ù\½¹ürsþùæ¿0¿ü¥¹øbsÅæ†¢?þ1š6-ú׿8b³¬ºøo+q|): ’ù°ò^ÓaÆŸBÍ•{ƒùóKŒ×"ã%š>]m´ß{/üñƒ¶m›ÿ{ô0¿øEôøã¶¾¾ŠªlcÆp?P…>•µæ!öW[5¯&ß¶môê«Ü"Ä_ɬµŸ~=ù¤ùýïÃSO ÷Ý7Øxãõ‡Aÿþáˆ梋¢éÓí—_áü€û~ЯŸ¸ñ¥bEóaR^þЧãO¡æØÛ-gÆËÀÖZ…÷ žtRsì‚“óm­9ë,ûŸÿTÅÍÛ»ï÷Uç Ëåü:|uyó›ßps3]~ñEtÇáI'…{îtì˜lü·Û.<î8sãöã‰üê½øbS.WNŒ/E…æÏÊ{-g48 4‡î.\û{Ë—èþûõÝž™ÓOÚ´‘t½hßÞœ}v5|°q÷ÕæK,ð ´çã«Ð`}Ÿ›kmôÚkæÒKƒÝw<¯eò5p ùõ¯íìÙ*?‚hÚåjôhYãKÁÖ æÃä¼–­ŽÆ_t¡Á\qE¸Ç…_AÜ7K|UÒ~xxÌ1á¨Qæ´ÓÌ/Žg&L0'š[o~ØÎžm—,áÎ!>§gåÄxéÛ×F‘ž›´úzsÞyAûöR¯µµæœstoRŽž}–ûjó©\”óöiíËR~Ü?ƒ¯ _SýóŸU]_øî»húôðÔSƒ-·t(_Ûnk~÷»j~t³ýæ›`óÍ/e‡A2VÖG·N8Ù…†ÓNÜÿkkƒ¾}ÃC O=Õ\~yt÷ÝÑÌ™ö믫ýs‹O? Ö=~¢Åòe&MRÒÝvÓp½¨­5çžk-ÒÚùƒ]wå~ ª|ªH­"¦\Q²¶×éÍ9çTï­À'Ÿ˜³Î :tp7_:˜3ϬÚ-ÑÔ©‚Æ—Ò­ÌŸ•ñºoé\üåtõÏ  0gžýßÿUmÑ!>¼…óåyjÖêGÏ>›õD ׋Ì7ê¼s»÷^îªÊ§ü\äç”(ò¾ãeÿ¯ß÷ìi¿û®ßÁ¾ùf8rdЪ•Œ|ÕÔ„Ç[§uC†H_¢ ÁÚ§N0&ä圎¿èBC¸¦Ð ´ÿWkÑ!š6­eã¬#’fâÄ‚»5%ã%1Bßþ#A·nÜTOÅm®ðŠ&‰¯"=ýtÕ•ž~:<ø`¡ù ÷Û/š>]Ó–ËÆó5s¦”ñ¥èñ–ÌŸ•÷¢ îÇ_ÑŠÕãÅóÂAƒ¢¬†«˜õý`ÓM[0þfâDñ1¬« GŽT~½Øj«hæLmËyFæ~ z|ÞŽ /¯bá箂ðSøjñáÉ'WW‰á¡‡Öîžß>}Ìí·Û0¬’Ä…ûí'"_ ¶N0&çuœÑàlüu¬h¨¢ñÒ§O4y²úS¨ÃsÎiÁøKßtiƒ üÞ÷ªâzѦMôÀÚî·¹¨¿¦ÞàÇ)éù1% |ønݪç A»pa0b„²ü†{îiß}·**DÏ<#"_ò·N0&èU¬hp7þ*V4TßxÙzksÝuvÅ µ÷sç¶XüwÙE|™f̘*º^ÔÔDwÞ©§ç¯X´iÃý@•ø¼%¶a¬;æ¯ÞGÓ¦UE‰Ásýõ~ÇŽ:óÛ®¹öÚjXƒî³ûùÒòÔ æÏD¼Š3Ü(¼ÐPÕãeãÍøñZŸ”ì½w‹Äß\~¹è¸™o¬ºë…ç™›nÒsÛ6l÷UâsNqÈ=È!f£…¯ydUTÞ|3Øcõù ¶óæ)_Ôðä“îçKÁ ÌŸÉyá['\¿¢Ç[VëxéÜÙL™¢ðâ5yr‹ÄÓÎ+8hO?´jU× 5{(ÌĉÜT‰Ï{Fź7ü×/y^›ïÒÅ~ñ…òÃwß…ç´jU-ùíÐÁÜt“µVqNƒ=÷t<_Z¶N0&â…¯hp=þ*V40^¼ð¸ãìÒ¥ªîF–.]ýž¹YãÙ§àˆ}ð¿ñÆÕ{½èÐÁ¾õ–†žÿþûÜT‰=ÚÁ‹{溓ðŠ½¦¥YÅf·`‡ª0¿ÁØO>Q»¨á±Ç¿¾¢ù3Q¯`ë„Ëñ×÷Ô‰ê/Ý»G³fiºx…ƒ7s<ͯ~%÷S¢ê¼Ëñ=zèØIl¿=÷Õàó ÙåŠÂFÞa’xm~»ítŸó=þ¸ß¹sõæ·S'óÇ?ª]Ô°Ûn.Ç_þŠæÏ½ŽÇ[:ùO`¼dù¢'ŸTså2&4s<ÍÔ©RcõÛßÒÿýT*<è kTÃ3Ïä~ |Î’~Ñó$½¬Z^­7“'+®2˜+¯ jjèæÂ uV‘~Øåøky¼%óg"^Áã-]Ž¿šÃ /k¾ß¦Ñ²YÝΞÝÌñ´sæˆ ÔâÅ~§Nôÿ5ÅÓ?ýIü=Û“Or?P ¾¡&‘¿à!v'FV ¯Î÷îmÃPå[P[WþøÇô‡oΚþ_èÃ#d—Ø.¿œûõ>̓Ÿ’d±Mx=>Øe…;ö,¶Ù†ü6êƒC±uujònîºËÍøky¼%óg"^Áa.Ç_A¡ñR‡cÇJ¿r{îÙ<ñŒ\Þí\:í·kGÿñžÍ+·ÛG>Èý€zŸÿâ «D÷È ¯ÏG>ª­ÊðÙg~Ïžä·Lî¿¿]¾\IêW¬ðkkŒ¿Ž3/ y-['¿‚­Œ—RÞ“¿†üôÓ›'žváByoG_þ_ôþíä“ß°ÍËý€zŸŠ-?øñ{0âÿŠíƒAƒ´U¾üÒïÓ‡ü6ÉhÑÑÂNp0þê¶N0¾*éåop:þ¡ð Œ—Æ}ÿþB¦°æ½ôäÉÍÏ.]DÖÚ&O¦ÿõmÚØÏ?—z»žÉøk7 ‘_­>þ……ŠB†×ᣧŸVUeX²$èߟü®‡/½TGˆžzÊÁø++40^*ëu¬hp6þFøŠÆK9ÞL˜ ø²õÖ[ÍO¡,™3Πÿ—šß®½VðÝÅÚÏɯVŸ*õ!gÁ–Œ‚xÙ>2DU•! ƒÁƒÉïzúššèÙg5tc‚-·t-þ ¶N0^’óÊÎhp-þšV40^ŠúŽíÒ¥R/[Aà·k—t<ƒáÃEÎ0kÏx¦ÿÇï™ßw_Á—#d~Óíc¶U”.Qà5ùèùç5Ìÿþ/ùÝ ¿å–vÑ"=!<ï<×âo„¯h`¼$ê¬hp9þúoÉøŠõæê«O³{í•t|‚ýHddvÙ…þ_Ê{žýòK©óÛ…2¿éö¹Ÿo7¶ #ÿóp¼dì¼³¦*Côè£äwÃ}pðÁ6ŠÄ/j˜3ǵøkZÑÀx©¸WpFƒËñW°¢ñR–ïÞÝÔw\§Ÿžt|ÂÑ£EÎ0ÛoOÿ/íÍm·Iíö÷ÜÃü¦Û§Š<µÂ‹Ýháãy3i’š*ƒýä“`“MÈoE¼è®ë>éÙÓ©øG Œ—D½² ®Å_Ç Œ—²®_þ³ÔDßygÒñ1çœ#òjÞµ+ý¿´=Têg„¯¾Êü¦Û¯þ{jy[,ò~^¾ïØQÏ }?4ˆüVÌ·j½ð‚ô^ŽíTüul`¼$äœÑàrüuÑÀx)僽÷–úŽëÍ7“ŽOxÙe"K™mÚÐÿñ:}p˜7ùM·Ï^íPXðŠ=Ù/Ý ]Aÿ9ÀÙg“ß û­·¶K–ÈîS§:…ÆKr^þŠ·¯w¶N0^Êóžg/ùŽkùò¤ãc~ÿ{‘3L×®ôÿF½}ç‘Ýþ«¯˜ßtû¢ÏÃÌ}qÃw<¼ýë_:ª Ñôéä7 q„ìu._|áT[äm¼µ¾ç‘_Å>UìÉÂ_»@/ÑË=Ÿ6ÿìüóÉo‚¾¡»þÖtŸÿÜxªXÑÀxIÊk: ÒÁøëØ:Áx)×o±…µVäLûýï'Ÿè©§DSO¥ÿ7êƒýö“zéÔ‰ü*öÙ{-ò·^–.üœÃð2}ÇŽvÅ ËÞ{ÏoÓ†ü&êÍí·Ëí!fÚ4wâ©bEã%)/EƒÓñ…?u‚ñÒT½õ–ÈwÔ¿øE¢ñ‰fÍ–K/¥ÿ7î;u’ZhØj+ò«ØçŸßW±ˆý^ªnjѱœ!6Œü&î»u³+WJ-E-^ìN</•÷*V4¸E+/åÍ·2÷«›«¯N4>Ñ+¯ˆ ËwÐÿËñvéR‘W5»\ɯN_tßEî_x1>zýuUóÀä·y¼¹ê*ÁïwÚÉ‘xÊ/40^ôjž:áfüå/Móáøñ"olî¿?ÑøDO?-1,ÑãÓÿËÊïܹ"o0vßü*öùkŠmÀ(ò}¼0ì¾»‚*Ãê3 Éo3ùí¶“{RCxÖYŽÄSÑaŒ—Ê{á…×㯥ÐÀx)ׇÇ'òõ¬Y‰Æ'zè!‘·|}Dÿ/+¿2 IÁСäW±/öâbå /Ú‹Þr¿îÆëüóÉosúèᇅv•èᇉ§–­Œ—D¼Ž­ÎÆ_ÑS'/ey¡Ö² $sÏ=R¯AC†ÐÿÏï]w‰LîˆÌoŠ}*“[~ÈÄ' ^¦ïÔIÁ1vÑ"¿¶–ü6§áÙg þœé½÷èÿx¼8ó˜ŠÕ(“_¨ˆ]ヿœaåJ¿kWòÛRÞ~ø¡ÈâÔõ×»O]O`¼TØ«8£ÁÝø Œ—õðÑ‹/Š,Ûm¼qrñ G}y$ý—åsP¦èÁ’ëêx¡Þüþ÷Ò áµ×’ßôáu×Iì6Ñ“OºOg40^’ó Îhp9þZÎh`¼4Á›'Ÿ9š¶Þ:¹ø?ü¡ìO›¾ùÆïÙ“þÇ ò±Ï¨hØ}Q¬\—çí¼y²/0é´ß­ùmAì¿¿Èž³` ñÔòxKÆK"^× ÎÅ_ÅŠÆKÓ|ôàƒ"GSïÞÉÅÇßi'é8Eo¼á·oOÿÇã¥øœU™"‹òNzÀËó;ì ýêbü¶°oÕÊÖÕÉ+4D‘_[Ûâñ”^h ÿ'êlp9þZÎh`¼4Á›»ï9Ùî¼s‚ñiÛÖ†¡øZÃóÏgºt¡ÿãñ"|^}bͲ˹ßñð}xÞyÒ/-ÁÞ{“ß÷Ñ+¯ˆ|#´Ë.-Où‡AÒÿôòƒt:þ¢ ÁÚ­Œ—&y¹…†Dã#ô¬¥üZÃܹþ6ÛÐÿñx÷}áA‘ù´È7ñ’|ô ²÷M¼ÿ>ùuÁ›?üAäG‚?ùI‹ÇSÇ Œ—„¼ô­ŽÇ_ËÖ ÆK¼‘½u"©øD<²JE³Ÿ¾öÙÕô<Þ]ßP“È_ð]¨È;a/Ìo²‰ôÅrá…’_|ø³Ÿ‰ì?—]ÖâñTPh ÿ'ç¥op<þ: Œ—&ùHæa™­¶J4>áÕW¯ÒÒ¬µææ›ýèÿx¼³>ÿÙ˜™˜c'ƒåÃN}-1fí9Ìä·…½?p Ä.dx Åã©âŒÆKR^þaNÇ_Óã-/ez¡·ô»tI4>áÉ'¯ÒÕìÇÆÑÿñx7ýºòCì6ŒÜ=9õ ¼oî»Oöf¼§ž"¿®øÖ­ƒÓN O;­á¿Ù-ü~˜ Z̯{øv‹ÅSþ ôÿ½ô3¿š Œ—ò½Ð1å·i“h|‚AƒVilÑŒÁž{Òÿñx×|γ.3EŸ]‘ÿ{ñb|ëÖvÙ2Ùû&~òò‹—îI~“óšž:á`üÕÉx)ßG| ïÃù0L<>;¯ÒÛ¢‡òû÷§ÿãñîøT‘EìwJ”4ðŽúà€d/Š[¶,Ó®ùÅK÷òÏh ¿ z‡Aºù·d¼4ÙÛ¯¾’wó|y3ÄÇ ,Á4!†Qýíoþðá¾ÇxÁã[Þç¿8ûÐÈ"Ï´ÀKòæòËE_3ÌÿH~ñ ¼–3Èo"^þã-Ž¿‚­Œ—¦ùŽ­µòÞ$õU3ÄÇÜpê*höý÷Ã3ÎÈtêÄxÁã[Ðç/uÈd™½:¢ØÒ¼ãÞÈŒ<¾9}*W“Èä ŠýïºïÑCô…!zþyò‹×ál ¿ÉyMg48ÿ@øŠÆKS}8~¼Ä\›)SšézôÈ#«ªµEÿügø«_ù={2^ðøfðñ»,Šï»ðð‚|𣉾„^H~ñ:¼ô ä7Q/ÿŒ§ã¯æñ–Œ—rçÛ)SD&Lhžøˆ«8¼õVxé¥ÁÀŒ<>9Ÿ*<×!¶hû¼ã>¼æÑ——]È/^‡×±¢ü&ä\Ž¿‚ Œ—&ùè­·Dæz̘fŠç¶ÛRhX·«bþüðÚkƒ¡C3mÚ0¾ðøÊúø%YÈ‹­[àEøhæLÁSÿ—_’_¼/ÿñ–ä7A¯àŒ—ã¯ãŒÆK¹~‹-$>rbÕªUÁðáÍwøöÛ”òo;W¬0Ó§‡?ÿyÃÆ Æ¿>Uú‡ÜWzžú€wÈ{ž]¾\îŒoî¾›üâÕxù['Èo‚^Ó Æ_ÍÖ ÆK9>5JêPêÛ·ÙâŽGe¡TÑáƒÂo ;ÌïÐñ…ǯ·/\‘½àÁ‹=/Âû}ûŠžåƒŸü„üâÕxg4ß伎3œ¿Š­Œ—r½™:UêPª­m¾xvíjëê((4^qðýè…ÂK.ñö[·f|áñMòñ‰Òë%ð"|(¶¨¿æ½Í–[’_¼¯îñ–ä·’^þÖ §ã /40^šà=Ï.^,ò í’%ÍO3iu„&ï­øÛßÂsÎñÌxãoÔ¯þ_N•¢Íú^€o¼Qðlþùçä¯É+Ø:A~“ó ¶N¸['/eú`ï½…&:z饿ŽgŸ>6Š(¬çmê¢EæþûÃ1c2½z1ñøb¾Ø‚‡TÞë[ wÎG³fÉÁÍÓ_¼&¯`EùMÎk: ÒÁø+Ø:Áx)Ó›?ÿYjE醚?žæÑG)T èðÉ'æO ~úÓÌV[1ñøìofïµÈßz‘û» +x‡}ëÖ¶¾^ðg8ãÆ‘_¼&¯àŒò›œ—¿¢Áéø«XÑÀx)Ãwïnƒ@j¢úÓæ§?t(e‚ Þ{ÏüáÁ˜Ùd®wx|*»&‘õ+ŠÕ*<¼ïï¼³è™Ú?ø`ò‹×äUI~“ò*V4¸‡A2^õáÕW žfwܱEâ½ñÕD*Q½ñFxÝuÁGd:ubüâ«ÓÇ,ˆû-ñO³À;ëƒSN<;[›Ùxcò‹×äÕl ¿Ix‡Aºù…ÆK¾cG»t©ÔÛž+255-ÏàØc) $žß0Œ^yÅüîwþAe?[„ñ‹WïóOw(¶#ë5x>œ0AîŒÍ›G~ñʼ– ä7¯â0Hwã¯å©Œ—R^ömÏ‹/¶äüóì³Ôš¯èÉDÏ?^r‰¿ÿþ™6m¿xݾðÅ _9¯Ì>Rï¾7S¦È…Í_þB~ñʼ–3Èo"^ÁÖ —ã¯bë㥔÷û÷·¾/7Ëáõ×·`<ýw”{¶…ì¢C]]ôôÓáE{ïiÕŠë#^ŸÏÖùʼn[/ðŽûè…_qÏ9‡üâ•y·$¿ yá…×ã¯`ë㥔÷¼èå—E¿á\{d‹Å3¼ê*Þö·pÑaÅ óøãáyçù»ïî×Ô0Þñ:|ªÈî‹ÂBE~õï²· ¾¯:äò‹WæUÈoR^ÇaÎÆ_Ë Œ—"ù;Vú›ÌLïÞ-ÏŽígŸñnß•¢ÃÒ¥æ‘G³ÏÌxã/×§ŠÔ$RýÞI_S#z\¦gOò‹WæUœÑ@~“òòW48MO`¼äH6p ]¹Rö»Ê \ˆ'§B:[tˆžz*¼ôRøðÌÆs=ÅËò…u¯ÈwR%ŠwÉwï.xJÍd29kÆÈ/^ƒWt$ù­¼×òÔ G㯨ÐÀxÉýéf›‰^¿¹º™I“‰g4coì¾CŽ¢è­·ÂnŽ:*Óµ+×S¼û>w®C*“J¥ãwUàxð`¹Óhôî»ä¯ÏkYÑ@~ñ* îÆ_z¡ñïÛ´}Õº ö?p%þÛmg¿ù†÷ó2ŠÖFo½^w?|x¦¶–ùï¦ÏùY:¦Já©[àÝõÁÈ‘‚Kû¼à¹ÓexÝuä¯Ïë: ’üVØë:£Á¹øë:£ñâeÚ´1< ã-bôì³®Å?¼újÞº .:|ù¥ùÓŸ‚cÍtîÌõßâ>•Iy « Òñ;.Ö¼ —áÝõfÒ$ŸÞ_¼& /4ßD½‚­.Ç_K¡ñâ¥S©L‡æÉ'Õ¼- Ï;Ϲø·n½ôïØÅW‚À<ÿ|xþù~¿~\ñ-åã é‚gЉwΛ¿ýMð[š$¿x}^Ýã-Éo%½¢3\Œ¿Ž­Œ—L*•éÞ=š5KÓ»ÁÌN;¹ÿîÝí’%¼WWÓ¢¹sÃ_ÿÚïÓ‡ë/¾™}ÞA‘©b´È±“x}ôöÛ‚/ºÝ»“_¼>¯åŒò›ˆW±uÂÝøë[ÑPã%8î8»t©ªÏœ.t6þþðá6Šx‹®­âðÆád=Ežë/>YßP“H¥‹¿2»nwßÛo¿•zÑ5&SSC~ñú¼ŽBùMÈK_Ñàxü5=Þ²JÇKçÎfÊ}ïú«®r9þÁYgñÎ\mÅaÖ¬à„ÒmÚpýÅ'êóŸ~Ùðã2Eàô]º®î/^L~ñ*½ŠÇ[’ߤ¼ü NÇ_×ã-«l¼l¼q8~¼Öeüþ;8ÿð׿æ=¹âf¿ü2¼ôÒÌ[p½Æ'äS¹Û-~źÿ¦ãxÀ;ê3®°ÎK~ñ*½èBCfm¡ü&äÕ¬hp3þ* Õ7^¶Þ:¼î:»b…Ú”_zID¾Âë®ã ¹òrƒï›)S29K¹^ã+ã›ö°Št ïº÷÷ÛOðuwæLò‹Wél ¿Éy‡Aº‡AVÑxñûô1“'[ß×ýî.øÙÏÄ\¿þøGÞWC‹^~9ëDv®×ø øT‘Elq¢DIïŠ÷9DîgüâUz-['Èo"^úÖ Ç㯠ÐPãÅó2ƒ™¬†3íŠéŽÅ䫦ÆÜ?ï뤙gŸõ÷Þ›ë5¾"¾ð1^ƒŽ],wÜG)wv oº‰üâUúPx¡ü&êEÜ¿‚­jû¿çe Î<ÓüßÿÙ¯¿®¢÷r“' ËW›6桇x^E]ôÑGýwæzß@Ÿ}8äºòCÁkò·dàõþÈ‘‚ ãÇ“_¼J/ÿŒò› Wp¤ËñW³uBIÿ÷<¿*‹ 9£fß}åÍW55áĉ¼¯žf­5÷ßï÷éÃõ¿Þ>U r\áa’xÇ}0z´à;ª±cÉ/^¥WñxKò›”—¾¢ÁñøkÚ:!¬ÿ×Öú}ûú‡œzjxùåæî»£™3«¶¸ÐТ÷Þ“;_?ÿ¹ CÞ„WQ¹!«®ÊtèÀõ¿>[“H|³°žwÓgž)øýÌQG‘_¼J¯`ëùMÎk:£ÁÁø‹.4„W\‘Ùc=òþ[ì›%~T1?h?t¨øáÁ±Çú£F§üò—Á¸qá„ áĉæÖ[ÍÃG³gk}&efÔ“O=_ù‡j—/'ÕUnøôÓàÈ#¹^ã›ê‹í²ðrÏ{ÈûÞ]ž¾à«ï_¼J¯`ëùMÎË?£Áéø‹.4д-gøàƒL«VÒç·Ì€öÓOÉfµ5óØcé=¸¾ãË÷ùOl¦ˆýÞY\v™àBÃ>û_¼J¯eEùMÄ+8£ÁåøSh ¹Ó‚‘#•Ìo[niž{Ž„VÝÒ†ººà¢‹ÒmÚp}Ç—ãSy+b«ÙÀ;îÃk®ü~f·ÝÈ/^¥WpFùMÎ+8£ÁåøSh ¹²œáí·Óž§g~«© /¸Àú>™­ºžüÎ;™¸¾ãõ1Ϩˆ=F²ØoÇ»æÃ?üAð'cýû“_¼J¯cëùMÈk:£ÁÁøSh ¹²œáè£õÍo™Ýv‹Þ{äVÝÒ†úúì£j¹¾ãc}Qõg¯°DwÖ‡wÞ)ø†õþ‡üâUúPx¡ü&ê5Ñà`ü)4Мøxölµó[m­™4‰Wa3Ó¦e:wæúŽ/æã ®—À;ëÍ}÷ ¾aÝfò‹Wé5­h ¿÷ .ÇŸBÍ…æ~¸îùÍ1Â~õ‰®º¥ ìïµ×w|ì_ãyXûט_wÜ›Gü~f³ÍÈ/^¥WPh ¿Éy['\Ž?…ZË/gxá…ª˜ßºt oºÉCÆ««Öá¹ç¦=ë;>挆¬¯u]¤ÈN ︞yFð'cmD~ñ*½ŠBùMÊ«8 ÒÝøSh µðÛ°úúLïÞÕ3¿ù;ï½ü2y¯¶fþú×t»v\ßñÙ>[„(8@Ò+]´À»ãEOî™¶mÉ/^¥WðxKò›œWðxK—ãO¡Ö²-øÕ¯ªn~ó<ÿ¤“ì¢Ed¿ºVîÌœ™Þh#®ïø†¿¦ê¹¿Â‹{HfÎOñnúèµ×2VSC~ñ*½üà Éo‚^ÁŠ—ãO¡Ö’o½^y%]SS¥óÛêA@7¨¢?{vfó͹¾ãsV4dý8»8Qø¼ë>zñEÁ7¬íÛ“_¼J¯ãŒò›—_hp:þh-Õl:éÛ·Êç·LÏžáwÚ0¤?TK­aÞ¼LÏž\ßñkƒ,øY*î;1k$ðzóÔS‚oX»t!¿x•^Åã-ÉoR^ÅaîÆŸB­¥ZpÁÌokþÚ«Wx×]”ª¥ÄöŸÿd àúŽ/|±—}¨CÜb ¼ÓÞ<ôàÖnÝÈ/^¥WPh ¿Éy['œ?…ZË|®û¯¥[µb~Ëö™Þ½Í”)<–¢*j K—f¦ÿW¹o¨Fx™ø#c¶dà]öfêTÁ7¬ÛmG~ñ*½š­ä7 /¼Ðàzü)4ÐZà]V]]¦æ·Xï÷éNšdW¬ Ÿ(+VdvÛþ_Í>U(Šÿ /ö7âò²?8Ýaò‹WéI~“ó:oélü)4Кûý•µþ±Ç2¿5â7Ú(8óÌèý÷é0šÇÂW_ezö¤ÿW­O©IäoÃÈlÆÀ»éÃnü~fà@ò‹Wé<Þ’ü&祯hp<þhÍÜÂK/e~+ßûd¦Og?…Ö½ÿ~ºkWúuúT^q"wÙCN¡"¶˜w͇W\!¸Ð°×^ä¯ÒëXÑ@~òjž:áfü)4К³™iÓ˜ßÖÇo·]ø›ßD~HRXk˜5+S[Kÿ¯BŸw\d^Y¢°PwÝãÇ þàtÿýÉ/^¥WñÔ ò›”WqFƒ»ñ§Ð@k¾7T³g§kk™ß6Äû»ï^wýüsº“ªÜôééšúµù<_¥(8Oï®~õ+Á…†C%¿x•^þÖ ò› WqFƒ»ñ§Ð@kžf¿ü2ݽ;ó[e¼çe† o½Õ~ý5]KG 'M¢ÿW›Ï9³!·Ñ¢øoǻ胟ÿ\ðû™O$¿x•^Íaä7 /ÿŒ§ãO¡ÖU†t:3hó[å}ëÖþa‡™)Sìòåt3é-8ï<úUùÒkþ[®À»èýO\ìüßÿ%¿x•^×Ö ò[a¯æŒ7ãO¡–x•Á÷ý£Žb~KÖ·oï{¬ù¿ÿ³é4]NêH ÃÌ>ûП«Ç+H4º^ï¨÷=Vp¡áºëÈ/^¥×µ¢üVØ«(4¸ ´dß;Õ×û‡ÆüÖ|~£ü“N2Où$Ý¥ ý¹J|ªä¢ˆØ_wÚû‡.wö1÷ÞK~ñ*½ŠBùMÊ+x¼¥Ëñ§Ð@K°Ê°r¥ÀÌo-ãkkýÃoº‰gU»ÛÏy2 ýY³_÷TÌú⯬O¥r/Þ]Ÿ:TðÔóôÓä¯Ò+ZÑ@~+說hp<þhIU¾ý6³ï¾Ìo.øÌöÛÿïÿ™Gµ+WÒ3ÝoÁ˜1ôçjð©"E¯>îlÉâE ¼+>³çž‚×SÍ™C~ñ*½Š3ÈoR^ÅaîÆß§Ð@K¢ÊðßÿfvßùÍ9ß¶­àá5×Dÿþ7½ÔÝáSW—é×þ¬Þžß_±¨/ºRï¤ïÞ]ð¼óÕWä¯Ò«;£üVÒ«x¼¥»ñgE­ò·+‹e `~sÝo½u0z´yðA»t)Ö¹ÿýïtûöôgݾpEC©?䮑À;ékj¬ïK½r“öÈ/^¡WPh ¿Éy-+?…Z…ß Í›îÝ›ùM’oÕ*³ï¾Áe—Eÿø‡ Cú°#-üÃ蟺}ÞF‹šÊZ_´À;ë£?|ϺõÖä¯ÏkÙ:A~ñÒ ŽÇŸB­’oî¾;][Ëü&ØwîìuTxË-Ѽyôçþ|ÑÚÌ.»Ð?ûÂÇTxY{0J<²ï®7Ï='wÒñ<üâõy]…ò[a¯hë„‹ñçŒZeÞÕ×§œÂ|¥Ê÷èák|Ð~ó =¼Eš™1ƒþ©ØgÙPœÈùf}|õï®ïºKp¡áç?'¿x}^t¡!½öñ–ä7!¯c넳ñgEmÃ[ôÁ阯Ôúššô^{_lž^îd©wþDÿÔêSõñ›+Š#éáÝ÷Áe— ^”xýõä¯Ïë8 ’ü&äEÜ?…Ú†~èzß}éN˜¯ªÅwìèqD0qb4{¶5†þŸxoöì´GÿÔéãÏh¨Ï)@ÄoÆÀ;ëýŸýLðåü‰'È/^ŸW°u‚ü&ç5Ñà`üÙ:A[ïfëêüÓOg¾ª^ß¹sfĈðÚk£×^£èࢆ‘#éo*}ÞS1ó‹õ1ÍÄ»îý\ל?Ÿüâõy['ÈoR^þЧãÏŠÚz~òñÐCéí¶c¾Â¯ñmä~xxÍ5Ñ?ÿÉ£+*|óÿñÇé6mèoú|*ÕÇl¦HåU,ðŽût¯^‚?=0¦¾m[ò‹WæÕ¬h ¿Ixg4¸V4Кü¶çÃ3Ç3_á‹úNüà ®º*zõUŠiÁYgÑßôù”W‡¨û^€oÛÖF‘àÛÖw$¿xe^Á ä79/ý©ŽÇŸ ´&|ÚñÝwÁE5|àÁ|…oÜwì˜9ì°à÷¿Þ~›´þCoÉ’ú6¢¿)ó1k!òv_V)ðî{ûÅrçÿ¨£È/^™×´u‚üVÜk\ÑàPüYÑ@+³™Lo»-ó~ýý–[ú'žhî½×~õªÉ‹Î8ƒþ¦ÌÕõ©R5¼ã>š5KîD^~9ùÅ+óÒW4ßD½‚3\Ž?…Z£-zã ÿàƒ™¯ðô™ƒsÏ53fغ:†XYÃðå—é?Ê|þ· Ë%ÞYÞwŸàfÌ ¿xe^ÇŠò›Wq¤»ñgë­Ô-ÇsÏùÇ3_áôíÚe† ®¾:zã k-ƒ®X³ÖÖo³ ýG“O•Xû«ñ"|pÕU‚'šo¾©÷<ò‹×äÈor^Áã-]Ž?+h±oiÌô陽÷fþÁ7«ßb‹à¿0ÿø‡Øœ{.ýG“O­-K”zeÖ¹^„÷ÇŽ=ѤwØüâ5y5+Èo^øŠ×ãO¡–SbsÏ=é~ý˜ð-èÓ=z]Äù‘ù»'^{þ£É§b‹kÿ¼ú^좼Ë>³Ç¢'Ô(ò‹×äœÑ@~“ó ƒt9þhkJ Ë—‡7Þ˜Þv[æ¼;>3`@på•Ñ'Ÿ0B×\Szõ¢ÿ¨ñ©ØšDì©’õ¹?Å;íÛ´±™ŒÜY&üÃȯËÞ<ö˜È7̽zµT<¥¯h ÿ'꥟Ñàxü)4T{}¡®ÎL›æÿð‡õíÚ1ÿàõž—<8¼å»dI•Ø`Ü8úƒßà¼8³^/ÅG¯¾*}éùuÖÛÏ>“w¯iL}›6-Og4ÐÿòÒ·N8ƒ¬Òú‚ï›Çó?>ݱ#ó^ŒoÝ:sØaáý÷Û ¨Î‘Í™CPãSEN’ô ¿SòäI¼s>¼ùfÑ÷«?y ¿.úM7Ù©.lÉñ8i’àBÃ>ûÐÿõÑœ9Rçê p?þª«¾`Œyæ™`ôèôÆ3ÿàûm¶ ®¹Æ.[V…£8³ãŽô¾ðÅñû1òΙĻïýQ£dÏ2ûïO~ÝôþA‰¬‘¿ðB Æ3˜8Qî`ô:ˆþŸ¨Þ{O꛺åËÝ?['ô‚ zýõðæ›ý‘#Ó[lÁüƒ×ã;uòÏ>;úøãªÑÁ…ÒtøÂ¥©<—]®ˆ[wÔgvØAô,^qùuÓç'²GÝ}w Æ3œ0ApÕ﨣èÿ‰z¹7‘vÑ"÷ãO¡AgqañbóÈ#Á…f† I×Ö2Ÿà5ûšÿÄ%îZ]϶iÓè:|ª`ýCCÅ"o Dþ7ñ®{Ͻà*zë-òë¦7S§Š,_zi Æ3¸øbÁ+N8þŸ¨·_|!u¢þä÷ãO¡ACYÁ÷£ùóͳφ·Üâ•îÕ‹ù_u¾¶67Î._®~¼G|@ÐáSõñ{*r“ŒÝŒwß›¿ÿ]ôDSß½;ùuÐGsçŠ|·|ÒI-OÿW¿¼ˆqìXú¢^î1ãÑ{ï¹ ’ õõÑûï›3ÂÛoÆó?>3xp}÷îõ55Ì'x|:åÕo¾y8i’ CÍó@Õwè@PàsžŠ™½­¢>k]Dö’xA>¼â ÑM0f ùuηo/ôò–2¤ãéŸ~ºà çœCÿOÔËý„*zã ÷ã/ºÐ½ôRxÇâ¿n»-¼á†àŠ+‚ñãƒsÏõO?Ý?é$ÿ¸ãü#2Æ¥÷Ù'½óΙ>}ê·Ø‚ù/ÇgvÛ-zçŵ†Ì Aô>UŸ‹²ËÙ±¨Ïÿ^€Ïu”èYÆLŸN~]óé=÷ÚÒÛlÓ‚ñôO>YpÉoüxú¢Þ¦ÓRgé—_v?þ¢ þi§1^ðx|Œoß>øýï­µ* þš¥”ôÙ>U°""ï`ÉüÇfâ%ù­¶’½tjåÊú¶mɯSÞ3Fd_òýµ+o[&žþ,w$†W^IÿOÔ˽S4Ï<ã~üE?Þ28í4Æ /æýˆ>ýT_¡!œ4‰ü*ð9+ Ë…U ¼,/÷Œ±5K§>˜ü:åÃI“D.?ž?¿eã™ùÁ_ïoº‰þŸ ßxcÁëÎ}Ôýø«XÑÀxÁãñE|—.æé§•Ì?þA~ø:•û‚üUxÞ<ü°ìŠæ7’_§|4k–äÏ][,ž™ƒ< 3þŸœO÷é#¸o<ð€ûñ×Qh`¼àñø¢¾uëpòdM…»bE½ç‘_é>çôÈ"ÇHfÇÃËòÁEÉžh-J·nM~]ñ55våJ‘o‡î¸£eã™Ùo?Ño&éÿÉyÙ}ãî»Ý ¼ÐÀxÁãñåø`Ü8MG6dzõ"¿Ò}*® ‘}ÀCö¯ðêñÒ|z÷ÝÅO4GM~ñéw”z³þË_¶l?^p¡aÂ÷ãï êã_¦Ïyd4{¶¸/ÿ¸ãÈoe}xç Á_é>ÿü†t\­¢H=/Ãg;Lü\sÑEä·Å}úþGêòo¼ÑòñìÒEô\[ìc¼TÞ‡7Þ(ø§sÎq?þ*Ÿ:ÁøÂzÿ„$¿Ÿ$¿•ómÚ˜_óÿ»ß‘_é¾è¾‹"À ôíÚ =ÀoÝÅyóÈo‹û`Ü8¡ý'¼í6âiW¬¼Ur¿ý/ y3}ºàŽqÌ1îÇ_~¡ñ‚/Ëg~øC‘ï'û[ò[y¿é¦vÑ"Ñ7ÿáÍ7“_é>~»Åê×Åü:/Ñ›¿þUz]3ó½ï‘ß–õÑ[oI½SÿÙÏ\ˆgôßíœx"ã%!/ºc¤÷ÚËýø+(40^ðåx¡+XÃë¯'¿Ixÿ¬³düJ÷Åh^q"w¤$^Œ÷O8ï<é…é=Èoóûtÿþ‚×ü_}µ#ñÌHþ`Á~ñã% ïÿò—‚ËOÏ='"þ:ž:ÁxÁ7êÓ½{‹|?ùÏ’ßïÿÅ>A9úðCò+Ýžë[´Èxq^ôûu‹n¿ü6¿.¿\nŸÉsŒ#ñÌ|°àBƒµõíÛ3^*îÃÛn½óÎr{KôùçųcGÑC/s≌— ûNDÓ›;VDüÑÀøÂ—ôµµR ÙC†ßä|ø—¿ˆ,4„!ù•î‹>µ¢.~ß…‡—ë3ûî« Ð`3™ú­·&¿ÍæÃ?ýI×^›–Œ§]ºTp0︃ñRYŸ6Lvíé°ÃDÄ_ÅŠÆ ¾ ïyRûù˜1ä79ïŸt’ô=5äW¨Ï~WWòI˜uùÿ^žÞyGâ†{î!¿ÍãÓ}ûÊþÄõˆ#œŠgôï ^ò—Êúà׿–½›¦ñ×q$ã_Ž·é´Ä~LœH~“óé½öy×ñÙgäWºÏÞq±îguk!J¼ ïŸyæ*-3dùm>ø àÅ/ß}W×¾½Sñ4?.8žÖÖuíÊx©dxê)Ñóp]§N"â¯ã0HÆ ¾-X ±Ÿ›§ž"¿ÉùtÏž" ï½G~¥ûTaA¢Èù% ¼Hߥ‹­«SPhˆÞy§¾ukò›¨¯ß}wk­à•/Ó§»ÿð¦›dø~ðÆKÅ|M]¶LpáéË/¥Ä_ËÖ Æ¾qofÌúÁ@}Û¶ä7)/óˆ¨è_ÿ"¿Ò}ªtM¢á¿eÖ0ðîûðÎ;u,jÎ?Ÿü&ê…Þ¯¬»A?å×⟑¹OrÝ »ùfÆK¥|fÈÑÁ<òˆ”øë(40¾ðåøðæ›…võô°aä79/ñSF3s&ù•îc7ZÄ? 3öYšxq^îu ëßém·%¿ ùôС²»G­}\–CñO÷ï/;ª‹×·jÅx©ˆo¸AvÕiüx)ñW´¢ñ…oÄËÝ!\s ùMÎGŸ~*±œM~¥ûTlM¢°VQøS¼\½þºŽZCøðÃä7!ofÍ’ýqë+¯¸ÿš»r¥ì݇Æx©ˆ.”݆—5+_øF}úÐC…võhÎò›œ—xu8u*ù•îSuq[,êŠ0òž‰ê3§žºJKËŒA~+îÓßÿ¾ø5]äfüÍK/É®îMÊxÙp¯`eY]×®Râ¯æ0HƾQŸÞ~{¹½½~«­ÈoB^⊆ð¶Ûȯt¿Ý¢.çÅëþP¬¤æ;t°ß~«£Ðýç?u[lA~+é=/š3GzǨïßßÍø×_/{÷ÄwßÕwèÀxÙ@\y¥ì‰÷£Å_A¡ñ…/××ÔØLFjo?ýtò›·Ë—ËûÄèÚkɯt¿ŽÖl®(þÈ ¼xˆ=.(f‘ü³ÏÖ×ÔßJùÌñÇ‹/?}ü±³ñÏœp‚øeD£G3^6È{^ôÑG²¶ÜwŸ ø+Ø:ÁøÂ—ï£wß•zí~çò›ˆoÕJâCÄü3Î ¿Ò}þR‡Õ"ï5%–Fà…úôN;­RÔ‚ Èoe|›6Ñüùâûà 78ÿô;ˆ¯ãÌŸ_ߪãe½}zÄé}ÀÿÕ¯Å_ËÖ Æ¾,oyDp!û ƒÈoåý¦›Šì L~¥ûTÁ¡ù'FÖÅíÊÀ+ðæÅÕ¬µ™Ã'¿ô‡ôàÁîÆßól\Êœx"ãe½½yæñ`ÿýÅ_ÓÖ Æ¾Q\{­àÕR>J~+îÓýú‰¼—Ûv[ò+ݯ®7x{*² ùÛ-ð:¼/…|N­á›oê·ÛŽünˆÏsŒ‚ž½ý¶ãñ7Ï='>È~˜µ¨ñÕ_/ü§«V­²ÆÔuè (þŠž:ÁøÂ7î3cÆž^¢¨¾W/ò[Yï%¯'|÷]G~ÅûTaq"û`ÉìmÅŠx©¾m[»h‘¦ZCô¯Õ·mK~×ϧûô‘xVPÌ}yÁ¦>×â/úã¦uŸiÿô§Œ¯õðáí·+¨åÉŠ¿üBã ߟùÞ÷DÏ0áM7‘ßÊú`Ò$yš7ß$¿ |*eo«¨Ë߆áå|,ƒ—ïý_þr•®NžL~×Çwè ñËñ%ðÎæÇ?ÖP×[° ®cGÆWÓ|·n¶®Nü4{ç²â¯â0Hƾl_[kÓiÁ×ñ H÷íK~+è£7ß”w¡¹ÿ~ò«À§²Qác*âêxE¾]»è³Ï´Õn¸ü6Õ‡÷Ü£©Òäxüë{ôPí¬Ï_åøpòd ‹†N9EVüuœÑÀøÂ—ïÍÓO‹ždÌŒä·b¾cGkŒ¼©ï²ËȯŸ]{ÈûqªX¯É‹ÞËW¬×\C~Ë÷þرjRŸÞcñæÎÕ°~$ŠÒûíÇø*Ó×ﺫ"ñI7¦n³ÍdÅ_Ñ Œ/|YÞ?÷\éSMæè£ÉoE|樣Dv€‘#ɯŸ‡r–CÔålƈý¥xù¾uëhÞ<…µ† Èo9>½ûî6“Ñ‘ôèõ×¥Ä?øÝï”ÄüƒêÚ·g|•ãÍ /(ȸyáqñ×´u‚ñ…/Ç×Ë„y´`A}ûöäwý™1Cb¨ßm7ò«À§ò¶Uä–+bŸœ‰×æ3#G®ÒØ‚K.!¿øM6‰,P“ñÌèÑRâŸÞk/=mâDÆW£^Ç#]V­ZåŸsޏø«Ø:ÁøÂ7ÍGŸ.þârÕUäw}}ïÞÖZyKçêëëÚµ#¿ |ö“0×=¢HÅ"ïÉ™x-Þó¢9sTÖü /$¿E½ç™¿ýMM®í·ßÖwè &þžýç?zJ<'ŸÌø*å·ØÂ~ù¥Ž\§{ô+_øF|xçâ/ëÖ¦=”ünˆ&N¹tî™gȯŸ*¶à!ï9™±5 ¼Ÿþþ÷W)mÁ„ uý!ÆW^©)ÑáÍ7 ‹ÿm·é©òAæ€_ñÞó¤̶n1ó›oJÌ—¢3_ør½Üq.._]ß½;ù]Oßµ«]ºTä¼wÁäW‡_Sr¨)T¤r¿Ÿ½^¯Ð›W^ÑZk0=V×¹3ý!ÛW_­,Ëõ;í$+_éÃ×»tiºo_ÆW¡.¾XϱK/•˜/]·d|áËó›l"ñY1·p/¿\׺5ù]N™"uéÜn»‘_>»ü_±(¬O~¯Æ§ú¨®[7ÆW¶O¢ã^M9oà@‰ùÒQhàú…oª7¯¾ªdiêĉ䷩^î‡öë¯W¯D&¿ |ª°ü÷UŸS®Àköæ™g×ì·ß¦GŒ¨öþàyá­·êKnzð`‰ù ÿúWm½?®ïÝ›ùvÍ7wÞÙ~ýµ¦B’Ð|É/4p‚_ï_v™žåT^H~›à;wŽ>ûLh®ÃiÓȯŸWœˆ-]þx^ÓIøñµ†(òǯó¼*ímÛ†wß­/­æ‰'„æ+3j”ÂQ¶dIz¯½˜o•UV­Z\wÐ|©xê÷3ø&ûôÞ{kš‚ü³Î"¿eù6mÂG‘›èÌØ±äWOž!Y—¨CÞñxÍ>|øáUÚ[øè£u[mUmù­ïÑ#zí5…ok­]û°eùÚd† “òÝwéïæù¶~—]ìÿ«mÝÐ~û Í—Š­ÜŸà×ÇGo¿­érŸ3†ü6âÿ?{÷U•ÿqü3“„Þ;RPPT@DE@AQT,(kï¸v×µwW¬¸ëÚýaÅvÑE„P25“HÈ”;g&É$™¹÷}žóø„ä5Å{î9÷žï=%Ç£ þù§¯sgÊ×6>qË %8Ë9x{z_ÇŽ‘¢"ÛÇ"Û¶gÍŠšfóòõٲŞa£gžÉéò*yã {V±P(xöÙ±£‡œÒÞú ²_”!²~½×íÎÑò²ÁÔ îOðó3l6.5áq7çC”¯U+ô 9]Äá¤|íä•°¨CâˆdãÌñöôÁ3ÏüÓ©äý÷}={Ú¼|Ýîâ+®ˆD"öì͆þîÝsº¼'žhç*öÚk¾víÔ~ºÝÁ‹/¶å(•àÂ…¹[^¶X£û|…|ݺö‹{/YâÍϧ|ãÿT«VÉK/å|á^=õ×N^æ™I~‰·µw¹JÞyÇ!±†HqqñUWyëÔ±eùúz÷.Y¾ÜÆÅzøáœ/¯‚‚ðúõv®b……‰Ð~úvÛͶãS|>oóæ¹[^6Úu‚û|¹}ñÕWÛ0ŠýúëÞfÍ(ß²?Õ®]òòË6(ÙØâ(ßœ÷2'Ê~ï±^ïoOïÛsψÏ÷§cRxõjÿðá¶*߯‹o»ÍNûêY‰|]ºØ ¼‚ Ú¾Š…žxÂÛª•mÛO—+püñ6[ú1æÓÝwçtyÙe× îOðñ¾öím9Ì*¼f¯W/Êwg”aÙ2;ÄÞ{úk3¯dÓ*<Á‰ÄùxÛúà¹çþé°TòÑGqã¼nwn—¯Ë8ùäÈï¿Û¾¼Šï¾Û&õ±E‹ˆßoÿÑCEEÁE‹¼ جýôvX‰—Y-+¸HÄÛ­[N—W Ç ÜŸà+éCO=eÏÖ) ^z©· ÀÉåëm×®äõ×íQ ©S©¿6ó1KG¦ÆÀ;Æ»Ý%|ð§óRxõêàÌ™Q“)r§|óòÇ^±Â Åñû½íÚÙ¦>†î¿ß!õ+²qcpöloA ÚO_ß¾%¯½fÿì²e¹^¿lºF÷3øt½Ð ;ß¶­\é‹ÙSÙ1å›—œ7/²c‡MnvìðÖ¯Oýµ™OJKÑ.m;·§÷õè þtdŠlܼäo³f¹Q^õëçÌ ¯]ëœ*¾é&;ÕG_ïÞÎ ç­Y8åoݺ9Y^µjùÇ/yõU»®±—üG‘ëõË.#¸?ÁWÜ—|ò‰ïÙJJŠoºÉÛ¨‘sÊ×?p`øóÏmu_wï½Ô_ûù˜Qž¤ÚeÉð¶÷N˜=nºty<Åwßí9Ò[»vv–—ocW^i×­+“vSׯ÷6jd³úXòÖ[Ž«_Û·‡î¹Ç?p`®”—¯gÏâ[n±ñZ umÕ*Ô/»¬ÑÀý ¾â>0eŠý¯)[¶/¼0꩸MË·I“â;Ãv j@ýµŸŸqá±øgÜ” ¼“|~~ø³Ïþt|Šx<¡çŸ̘ámÛ6ÊËÛ½{ðÒKÃ+W:³8ü£GÛ¯>ÆŽulý ýuð¼ó¼­[gcyø>¸xñb‡LJŠKiÓlP¿r:Ð( 4p‚¯”¯U+²aƒ#nØ6n žsާt¬ÍÊ×ÒI¶\„+¼jõ×–^Éf\XF/ñ¯xGyo›6áõë¹ù&Õ`*yõUÛ×ÇÀÔ©4)+‚z'Ÿl›úe@÷'øŒøâûîstuóæâ‡L˜°kIé¬*/ßž{ú'O=÷œsæ,‡W¯öæçSíêMËH&F&ÌËNâííýýûGü~î¿I5ssPTäíØÑþõÑyC[IÙÔ[¾Üë²Oý²Ù®ÜŸà+å[¶ŒÒÊEJJÂ_}zä‘à¹çú‡õ6mZ3åÕ°¡ذàÂ…%/½ٴɉA퉩¿6öJ¢0 “À;Ö;a{$R–Þm—.dûúè80‰P⤻ÿ‡}}úØ©~Ù ÐÀý >ƒ>8{6 Å£õuëBK—/»,0zô_«Hfþø7hàëÞÝ?|xà´ÓB÷ÜþòËHI‰£ù—_z]Ô_;{ÓŒ‹d{Zàì‹oº‰«©úŸ¯zŒ{|ج>†|B'ÕT*¾óN›Õ/LàþŸIŸ—þâ Úº!×?þ(yçÐsÏ…x ø–[‚‹çÍ Lê;Ö7t¨¯O_çΞ¦M½ùùe«nuëæëÛ×ÐAþáÃÇ8å”à%—ßsOhÙ²ðÊ•‘­[9ªqÉôÑÔG{{ÅýÙ#y¬^Sú_Þé>/¯äµ×hIÕw±/*òvëæ¨úèmÓÆÞKL“²·ºmÞìmÖÌfõ+§G4¢¦Np‚Ï”÷|0Í©æŸ!QíLœwQößÄ÷Å;×7m^³†&’TM÷ÙãÆ9°>, èI5÷üÜVõËS'¸?Ág؇{ŒTƒÉÈ!ÔGÛ{E½ LÄ-&™°Â$ÞéÞ·Ï>:Ê'θˆß3!bÇ'øüüÐÓOÓ†’*ŸJÞxÓ—GýŠóìCFªªæçgûúÌñ@í!¾|àÌ3iIU{¹¹àê£Ó|ÌvžØõ$=ñ —OæóóY¯TÉ^µÊÓ¼9õËÂׯþúkÎRfSèÙgP¿ì´$í!¾ê|èÉ'iIUõiÙ²]Û'Sã•lÀCìÏJ9@÷äçs•"U<Êðí·ÞÖ­©_ɼ·{÷HQç )ƒ5ÎÓ°¡ê—=¦NÐâ«Ü7lX²bm#)óQ†O?õ4h@}t WÜt Ã|Œ¸M,ðx Ÿ—zâ šTR¹û<«W{Û¶¥~™½ÿÄ9UHI‘¢"_©_öÚÞ’ö_•¾yóðÊ•´¤LÞà­[çmÓ†úåL¯¨˜„¼ QЏm3ÇÇû¼¼ÐãÓ°’ÊqZ»ÖÛ¾=õ+_|ûíœ0¤ÊF"ÿ„ Ω_¹?¢ö_¾uëðwßÑN’2s¹),ôvïNýr¬Wì W⼋¸=-ðøÔ>/µëHéF~þÙÛ©õ+]Ïb(¤JÞö…éSU¿ì²$í!¾š¼·]»ð?ÒZ’*{¹ |C†P¿œìã¶Ä´œ€ýƒ OËçå…}”F–”"ʰ~½w=¨/åólòBªL”áä“V¿lh =ÄW«÷vêþåÚLRÅ/7‘ˆÿÄ©_÷‰+7DO®å’’x|ZÞí^s M-)éEhÃïÞ{S_*âóóCÏ<Ã)D*_+) LžìÀúb‹©´‡øêö¾®]Ã6Ðr’*–‚ P¿ðÑ»N”½ØjI%¬*‰Ç§öþñãY*ŸdÑçÙ´ÉÛ£õ¥âžX©œQÿI'9³¾Øe× ÚC|u{ï>ûDþøƒö“Tî(ÃßþFýÂ{d±–ƒ+Ù, OÂd <>ïÛgŸð?Ðì’v¥ðÚµÞ+ÞS_*áóóCÏ>ËéDJ+ÊpÂ Ž­/¹¿ëí!¾Æ¼¯OŸÈ–-´¢¤t/7‘H`Îê~×®–BqkKZ†+ðøt}“&¡—_¦ý%ýùçŸ%ï½çmÑ‚ú’ŸŸú׿8©H¦Û¾PÈ?a‚“ë‹v =Ä×€÷î¹gø›ohKI©/7Á`iP›ú…wyd-\qs-ÀãËïÝîàâÅ‘H„†ØÉ©ø<µjQ_2é ˆ5LQ†qã^_ì2¢ö_s¾Q£‘Ì—›;ü‡N}Á'ŽhÕ‹ãæZ¸?¿ø–[88zhÝ:_¿~Ô—8ŸÓÌb´oø¬ñuêßu+|;÷r³aƒøpê ÞìS¬è¥×®àDQòWFÿ ¯ß²eèÑGi»í‘Šï¿¿¨Q#Îÿ÷Þž=Ã?üÀ iÿÑCápðŠ+}8ÿñéû]#Td= cçï>¯_¯^ðúëéåäPºG-jÚ”ó9 ½wß}K>ø€SÔnO–¶oÌžíq»9ÿÍÞ.ʟݾNàµ×FJJhœmx¹ …‚·Üâ©_Ÿó_.o^F2i|¯RïÛo¿’O>¡eÏ™+ÐÆþcå|ÎjïrÎ8#²u+§«MâzO=åmÛ–ó?oÇ]'(_|¶Þ¿í¿xåJšh[]n–-óvëÆù¯€/‹F¥=ݯŸ—˜7/²mM|V‡"‘âGõ´hÁùœ¾uëbCÉõÁ«?þè1‚ó9}oƒ@å‹Ï%_P˜;7²q#ÍuÎ_n¾ýÖ䑜ÿø {ƒJ?¼ÇW‰oÒ$¸ha³3•¼öš¯o_Îçœó¾Ãg‘ÈœŒëƒÁ+¯ôÔ©Ãù\.o‹©”/>×|ƒÁ‹/æqQ®^n¶n Ì›ç)(à|ÆWÆ+.D‘,na½Àã«É7n¼ôÒHa!M¶„V¬øk÷JÎÏ\õµk-ŠìØÁÉœ3ƒW_~Ù5x•ó9}ŸÓ#üQS'(_|îù¦Mƒ×^ñziÃs&ÄPRR|çE-Zp>ã+ï-^™Î4 <¾|£FÁ‹/ŽlÙÂe &ÇÑ­Yã?á‹óÓ¾iÓà¢EÔ©¬¾ç‹DBÏ>ëëÓ‡ó¹ÂÞ–k4P¾øòÞ6mŠo¿= Ò¤gõå&ýë_Þ^½8Ÿñ™òJ6³¢Èâ—I#x|õù† ]ùã. Õ}úýwÿ™gþ5ŽŽóÓV¾aÃÀ‚‘ßç$϶ÇJ¡GñtïÎù\IïÏñ ”/ÞÞÛ©SñƒFÂaš÷¬»Üx½Å·ßîÝcÎg|f½Ìó+Ìë=àñ5æ4.XÙ´‰ËCu\vì^v™§AÎO;ûºu³g‡ù…¾æk\0X|~.]8?3âí1¢òÅÛÃ{»v-¾å&ÃfË0Õß^r‰§ysÎO|Uø¡ˆ(a^^Ò…Çg‘¯_?xÞyaV6®º+ÐwßÎ>ÛÓ¸1ç›S|AA`úôðêÕœü5bðùŠ—,ñ´oÏù™Ao‹Å )_¼½|ݺ©SK>üf¿Ænð¾ùÆ?c†§vmÎO|ÕyE{H–(²XÝÏ_»¶„ÐK/EB!®³½t©ïðË\.Î7'ú¼<ÿ‰'–¼ñc\«ïžoÍšà¢EžV­8?3îíµ½%å‹·•÷õéS|g«@µ¥Ð[où>ÚãâüÄW¹WÂXWìì‹«AàñYä[µ Ì›WòÙg\E*ÞÛÙ¸1xÕUž8ßðEry:t^xaøë¯©UÔÛºµøž{|ƒs¾U·ÇˆÊogߨQଳ«VqQ¨ºT²jUpáBOçΜoøjóK;xÆ?D…+\x|ö{o¯^Ánÿöוr\Þß?i’§V-Î|¢÷öí¼åŒÌX|! ½ô’„¢Úµ9ߪÚç~ òÅ;æþmРâ›oÿø#—‰Œ=@Z·.xÍ5»ö’à|ÃW§ÿUâ2’EÖÓ0ðø¬÷yy¾# =ñDÄçãJ“ô ôãÁ›oöõéÃùƒOíóóý£FS§*Ñ[±"pöÙž–-9ߪÍr|× Êï@ïÝgŸàÂ…%}‰D¸pT$œ½iSñwxö¸8ßð5æeHºÀCŸ‹¾qcÿŒ%ï¾Ëå*¦·sÉ%Þ^½8ðñùO9%ôøãaÆ8¤sà –¼õVðâ‹==zpþT¿·Íb”/ÞÞÓ¶màôÓC¯¼ ¸š¤~zôË/Åÿü§oäHO~>ç¾Æ½þúw‘ÅÅ$н&Ÿ“ÞÓª•„àí·—|õ•ƒ‘ââÐk¯ùÏ<ÓÓ¾=ç>3Þåòöê˜7/ôÒK‘;¸É+«n‘HÉ_o¼Ñ?rdQ½zœ?x<_)ß ï¸ãŠï¿?üý÷\bb.77?ùdàôÓ={îÉùƒÏ*/˽(,ŠÑ˃áñ6ð-[úÇ þýïá•+ítˆlÝzòIÿĉžÆ9ðUèóó½ƒ/»¬äw"Á cgÃÿãþO,jÙ’óÇã«Ä·há=:xÍ5%ï¼ãÌ©|‘­[CÏ?8ûloÏžœø¬õ1#’MÃH\é·•oÞÜwì±ÅK–„¿üÒA‡H0XòÉ'ÅwÜá?ùdO·nç¾Ú}ýúþ‘#ƒW^zá…ðÚµ6ŽåEvì(yÿýâ»ïœq†§kWÎ<¯V_Pàëß?0wnñSO…ÿ÷?Û^kJJÂß~zæ™À‚¾ý÷÷¸Ýœøì÷ñÃ!,ÿ=R·¹oÖÌ7vlð†B/¾þ曜˜‰DÂß_üÈ#9s|Õ®Mùâ³Ë7hà=àÿi§ßv[è­·"›7çð­Þwß…ž~:p饾cŽñvî¼k+rÎ<¯qïmßÞ7rdàœsŠï½·äÝw#ü‘£“ïÂk׆^|1xÍ5þI“¼½{ﺵã|ÀçWBˆBE±/‹wáÂãåÝnÏî»û;ÌÆÁn-]Z²jUÍŽÓ‹–|þyèùçƒK–Î=×wÄž¦M)/|nyOÛ¶¾áÃóçÿóŸ¡×_ýu¤°0ëb ë×—|òIè…‚7ß8õTo¿~EuëR¾x<ŸK¾E ïÁN?=xË-¡W_ ¯[ ‡³èZG~ÿ½äóÏC¯¼¼é¦À´iÞŠ4 |ñ6ðe"qÆEb¸Â…ñxçz—ËÓ®oÈÿôéÁk® =õTèµ×J–//ùâ‹ðš5á ";vTæ2).ŽlÛ^¿¾äÃCO=¼þúÀYgùŽ>ÚÛ«—§Q#Ž?Þ¶¾NOçÎÞAƒ|ãÇæÌ ^}uñƒ†þóŸ’•+#ü …2|{„û­dŊЋ/ßsOpÑ¢Ài§ùŽ:Ê×·¯§MÛMyáñx¼ }^ž§Mß~ûùGŽôO¸è¢â%KBO=UòÎ;áï¿lßžák×þñÇ’åËCÏ>[|ûí‹/L›æ5ÊÛ§§mÛ¢¼<Ê oW¯è%¢‚‰ËHÆMÉÀãñ©|ݺE-[z;uòöìé8Ð7l˜oÌÿĉþéÓýS¦øÇóy¤wÈoÿþÞž=½]ºxÚ´)jÔÈ“ŸÏñÄã­}^^Q½zEÍšywÛÍÓ¥‹§G_ß¾ÞAƒ|ÆùFòwœÿ¤“üÓ¦ù§MóŸt’ï¸ã|£Fù† óäëÓÇÓ½»§sgoÛ¶EM›zêÖ-r»9žx<·ðµk5mêmÛÖÓ¹³·{woŸ>Þðz¨oäHߨ±þOôOêŸ>Ý?y²oüxÿèѾ#Žð|°oÀï¾ûz÷ÞÛÓ±£§uë¢&MŠêÔ)rq<ñÎõŠáP³bdüt‹¢„x<Çãñx<ÇãñÑ#,Eü’ ›dâñx<Çãñx<ÇÇ{ʼn„…Ь¦dàñx<Çãñx<Ç'zËɦaįô€Çãñx<Çãñx<ýWÅîQa1"ai<Çãñx<Çãñxk÷ʘE~ˆ_Çãñx<Çãñx<>:+ñ5žØñÆ·Æãñx<Çãñx</óñk9DOÀ0Æ-ðx<Çãñx<Çãã½Å*EÉx(Âãñx<Çãñx<Oîe“Hx¥å “x<Çãñx<ÇãñJ\£!ÅÆŒÇãñx<Çãñx<¯”#”´0~Çãñx<Çãñx§û4îr†1ðx<Çãñx<Ç;Ñ—E#vÄG&vý¦ì‡è·Ããñx<Çãñx<ó*"ƒÇãñx<Çãñx<>C^qш1ÑWbdÇãñx<Çãñx<>™O6ø!EÆãñx<Çãñx<Oô²üÛc|Çãñx<Çãñx<Þòç#ÒyG<Çãñx<Çãñøø iLÃ0 “Àãñx<Çãñx<WTL"1,añ<Çãñx<ÇãñødÞrDƒÅ ˆ¦ˆÇãñx<Çãñx|i aGz{O$2<Çãñx<Çãñø˜ ñ‰xš àñx<Çãñx<ÇïügôŠ1ãâ¨åÏx<Çãñx<ÇãñÑÿTò˜DL@bGÌzx<Çãñx<Çãñ^ Aˆ¤ó1vX-ðx<Çãñx<ÇãU6¢!á-b“ŒÛ6Çãñx<Çãñx<>™×«hD²¢ÆEàñx<Çãñx<ÇÇÿU ! íH´pY…4ðx<Çãñx<Çãwú]4frEÜ¢‘‰ñ <Çãñx<ÇãñøD¯èhÄŽ²„vÄ.ç`½Àãñx<Çãñx<ö²œ\Q”t Çãñx<Çãñx|2o9ã"ÚEƒd34ðx<Çãñx<Çã];µ)ÅŽôBx<Çãñx<Çãñɼv$¬ë|FLÆãñx<Çãñx<óÑÚ•¸MEÂz’x<Çãñx<ÇãñI}܋謸y ƒ%ðx<Çãñx<Çãc²—vˆÛ 3q¥<Çãñx<ÇãñxKo½½¥U¸B†í+ðx<Çãñx<ÇãwH†©®ÉBàñx<Çãñx<Ç[NHð¨e Çãñx<Çãñx<_¶Fƒåkdˆdàñx<Çãñx<Ç'úè "ö‹âñx<Çãñx<ÇÇŒh(Ï <Çãñx<Çãñø¤^ ¡íH´Àãñx<Çãñx<·ðÚa W£x<Çãñx<Çãññ#”vÜÂðO<Çãñx<Çãñøƒ Çãñx<Çãñx<^‰#Êõ<Çãñx<Çãñx¦N¸vȵ=Õ;Æ<Çãñx<ÇãñøíéhP:oÇãñx<Çãñx<牻àñx<Çãñx<ϘWòפûîx<Çãñx<Çãñe†]ÔüšD†Çãñx<Çãñx<o1¢a{l Âê5Éâx<Çãñx<Çãñ;™ÿfùÏÄ_âñx<Çãñx<ÇÇ™ƒÛ†@àñx<Çãñx<Ç'óJ9Ñ"U Çãñx<Çãñx<^»F4ìD Ó*vý^V“.ðx<Çãñx<Çãã#sLb{ò1x<Çãñx<Çãñq^qh»Õ™–¯Çãñx<Çãñx<ó2Ä*,Kàñx<Çãñx<Ç'óŠ]1Òµ]ÚnµŒdÜ” <Çãñx<ÇãñøD¿k1H%›€±Ýú—x<Çãñx<Çãññ^;,–‘,a®Àãñx<Çãñx<·ôJÿ`®HXïÇãñx<Çãñx<>Þ'®$¹++nKÌíI6ÉÄãñx<Çãñx<ß9¢!v„ƒv$,&¹#áex<Çãñx<Çãñ–^‰{T$L±Pâïñx<Çãñx<Çã½bGAÈrðÃŽ˜*ðx<Çãñx<Çã­½’*´#a&†1°Çãñx<Çãñx<¿;…yŒDj€Çãñx<Çãñx<ÞÉ^V,u0Àãñx<Çãñx</:±=~ã ëùÛ­–Äãñx<Çãñx<Y 2~u‡íïký{<Çãñx<Çãñø˜ ;Œ/Û‘<ŒÇãñx<Çãñx< ‡GGlOøÇãñx<Çãñx¼¥O|±)€aù'<Çãñx<Çãñø]#â¢ÚždD’èÇãñx<ÇãñxüN¯íIrHg±<Çãñx<Çãñø¤S'ÒˆO¸ðx<Çãñx<ÇãSÊqÀãñx<Çãñx<Wú#ˆÍàñx<Çãñx</Ÿ Çãñx<Çãñx|¦|y_I&“Éd2™L&“Éd2™lѰ-½@Å.†Çãñx<Çãñx<oé•ê5®r~Çãñx<Çãñxçz¦NÉd2™L&“Éd2™LÎÜÔ‰m Q C#:†Çãñx<Çãñx<ç•ðšÔï‹Çãñx<Çãñx<oé£G4Äü`þ'Çãñx<Çãñx|âå[£a[y0Çãñx<Çãñx§yEÅ$G“íWÇãñx<Çãñx<oé“nS±-á—ÛŒ¡ <Çãñx<ÇãñxÅ­i·HºÇãñx<Çãñx|´×¶$ñ‰d3.ðx<Çãñx<Çã“yYŠm± Ëãñx<Çãñx<ÇÇy‚Û“o›‰Çãñx<Çãñx<o±FC⌋]‹FnK2Çãñx<Çãñx<ÞÒ+v„ƒb£?àñx<Çãñx<Ç'ó)ÂÛ,V•Äãñx<Çãñx<·öJ¦·%YÔÇãñx<Çãñx<>™×¶$qˆíVËKn7þÇãñx<Çãñx¼Ã½¬–y0½5Çãñx<Çãñx|2¯mQ+7$ T$þ Çãñx<Çãñx<>ÑË2±=ùŒ <Çãñx<Çãñød>zDCÌŸ·%;<Çãñx<ÇãñxK/Ë?›ßÇãñx<Çãñx<ÞÒ˸’¤¶ÅÏ»páñx<Çãñx<Ç'ó2Ä*¶÷´Àãñx<Çãñx<û¥¶I–(ÙËðx<Çãñx<Çã“y•ç-¬ÿ‰Çãñx<Çãñx<¿Ír׉dÿL|1Çãñx<Çãñx|Ü/•Î;&NÉÀãñx<Çãñx<7h(×;âñx<Çãñx<Ço³\£!×ÞÇãñx<Çãñx<~[â )óöò`<Çãñx<ÇãñNó2ëíå|w<Çãñx<ÇãñNöåÑ@&“Éd2™L&“Éd2™¼­\#Èd2™L&“Éd2™L&“+hØšmMû—x<Çãñx<ÇãìÑ@&—#)­”VKÿ“þÕ‡L&“Éd2™L&“SOp—ó-ðø,õKË]%R¼ŤÚRKiw©«´¯4@:D.#/"!Í•..—®•n•ënéAéIéyé?ÒÛÒGÒ—Ò÷ÒÏÒ¦øàå‹Çãñx<ÇãsÌ—ï‘ìÖrvÛðøšòÿ•$5•fJï'zP÷o§êHyRSi7©³ÔCê+ ’†IGIÇI“¤éÒYÒ|ééoÒÒíÒýÒ£Ò¿¤W¤7¤åÒgÒ×ÒZé7©PâüÁãñx<ÇãñÕàã×hØjõ2à <>;ý䨮{?i‰´^ªäû7Sn§F¥C0ö’zK¤!ÒééijéŒ ˆ`h׌¤KïH—ÁøEÚ”$~Áù‰Çãñx<Ç;Ö3Éœlü^ªoÕÍ®/M‘þ[‰µê‰d‘ê•ÁèR:c°t˜t”4Nš,M—fKçI—HWJ7•Áx¬tÆ›ÒûÒgÒ7ÒOÒoÒV–À “Éd2™L&“s3Ç?L·H½Àã³Ð/IÕ1î&]-­U¹Ï7A…jLyR#©UÔŒ¥C0ÆJ'J§H3¥y¥C0®“n•î‘’ž’^þS:ã¯%<–þˆ-tê Çãñx<Ÿq/&“àíçû¥×-Ž•ž— Ó{xþ] Áh&µ“ºHûHýJ‡`-“&I3¤9ÒyÒ¥ÒUÒMÒÒ?¥Ç¤ç¤e¥C0>—¾‘ÖJÒ>‹¨¿x<ÇãñxÛ{ë5¶¦®Àã³Ó¿_þngGi¡ôMé³îdïÿ3t’1Õ’K­¥ŽÒÞQC0F–Á˜5ã éZiI錧¥¥×¤w¥O¤•ÒQ»¨Rßñx<Çãñ9äSŒh0ˆÀã³ÐϬh/Ñ- —•6K–ᅳž4©†â¥3¤»¤’ŸŸ´x<Çãñø,ñJŒC–—´Œ[àñÙã7JM+ݯk%Í•>Mèέ¤ËKÊŽ¸ÃétéNi¹´)vÊíÇãñx<¾Æ½¶&ü*ÉëÝqÏBÿXF{tƒ¥{¤ Ò_ïÿ¥´‡ÔNj&Õ—X’”%q‡ý¥ÒíÒÛQS-hðx<Çãñ5å•8"nrÅÖTc'ðø¬òÿ•¦$ÙÞ²b©±4Cz×j©¿uÒwÒÒÒÛÒ«ÒRéIéé.ééi‘´@š+.M‘Ž—ÆHGH‡Hý¥žRW©ƒÔBj åÓo&U.Hý¤éÒߥw¥±K<Ð>àñx<Çã«ÁËj¢…Ûò•[“®ý€Çg_/-‘öÏh®·t³ôsü”ŠÌÿMÒÒ*i…ôr½.½$=+="Ý'ý]ºAZ,]$+Í’N•N’ޕޔ†JJûIÝ¥NR©‰T‡þ·ƒã}¥iÒmQqÚ<Çãñx|•zÓ2û[“¿Ïÿ43 7ìJu¥‰Ò«V{dùñÙ"ý5ãséCémi™ô¼ô¸ô€t§t³tu錳¥Ó¤)Òéhéé`i©—´§Ô¾tF]ùœJùÒ~ÒTéVéméw‰öÇãñx<Ÿq¯mIæT${k<>ýïÒýÒŒöÙºJ‹¥ÕÆ®šCŽÿÿ¤5ÒJi…ôžô_é%éiéaé>é6é:i±´P:G:S:Uš(•Ž”•ö“ºE Á¨MH ZR^iÜáé­Ò¸ç3Çãñx<¾’^[S-¢^ãÞ–*†Çg¹ÿBš/µÍè#â1Ò3R¡ÄñϬß(­“¾•>—>ë-i™ôœô¸ôϨ!—Iç' Á8\:HÚ_ê)í!µ—šKõ‚‘*î°¯tŠt³ô–ô[̺’œŸx<Çãñøt½’!RŠÀãs×o‘žFe´ÛÙ^º@ZûL˜ãŸ…¾PúEZ-­’>.‚ñbéŒ{¥%ÒõÒÒ…Ò9Ò,ij錑¥C0zK{K¥ÖRc›ÁpK=¥)ÒMÒëÒq½Àãñx<ǧåãžÁº¶ÉlUIËßãñ9í¿“I]2×7sIä¥MV«ýsüíí7Èõ“ô­ô™ôô¦ôŠ´TzLº_ºCºIºJºD:_š#Í&K㥣¤Ã¥ÁR¿Ò!íJ‡`¸²,î0YºAú¯´^â|Àãñx<Ç[z6«Øj®Àãmé_’&dô¹tsé,é£ä› rüñéøß¥K×I¥îÙ´ªKÚGš$]_w ¼ðx<Çãñe‹AšW’ÜûK<ÞÆ~tÔ3£ý±ÒÒ¯QÓÝ9þø ûߥÿH×K¥Ywè!M”®•þ-ýÏjå‹Çãñx<ï×ùqoM2c[Âzx¼ý›ÒT©aæºa ¥©Ò›Q½/Ž?¾ò~“ôšt£4Iê)dSÜ¡›t¢tôªôKÔ< ÊÇãñx<Þö^É‚»\ʱx¼]ý¯ÒÒÀŒvÀzJ×I?•ö»8þø úÒÒÒ”,‹;HÚ[:AºZZ&ýÌùÇãñx<ok¯­É×Üšt <ÞYþ#i¶Ô§½¦U˜Þq›Å4 <>ëüŒØ>L-©ƒÔ_:Z:Mz-*ôP±÷_)] µÏ\/+O%=)mIoÍÎ|åýfém¹n•¦JûeYÜaiœô·¨¸å…Çãñx<ŸC^Ñ3.¬¦aÄÿÏ~´±sGl¿¥Âß§PzFÑ•ÿÛJó¥/$Ê_Í~³ôŽ´D:Uê#Õɦ¸Cé8i±ôBÔ%ÊÇãñx<>k½’,ó8ѽ-ù»ãñYåû;-ÏÅvã+ÿ}ÖH‹¥®íY"ýCú½t 9勯f¿YzWºMš&õ“êfSÜ¡“4Vº\zÞ*î@ùâñx<Ç׸WÊÈD²1x|ÖúÆ^Êò„U2õ}–I3Ú%k"ÍŒú”/¾¦üféÿ¤Û¥ÒþR½,‹;#-’–Jk’TÊÇãñx<¾:½õÔ¸Ÿ·¥xw<>‹ü©võû)yW$#ßçéf©wF»Rý¤%Òú4ª=ç¾üéÿ¤;¤Ó¤þRýlŠ;ì.‘.“–ʵ:j? ÊÇãñx<¾Ú¼¶&ì‡iÿ÷Ix|ú¯Œ›BÔ·ÎPUßç]é4©qæzPõ¥É¥‹Yr>à³ÇJË¥;¤Ó¥Ywè -]*=+ý Q^x<ÇãñÕàU®if<¾ýëÆ^Ç^©žpfüûlî–g´ïÔMºZúQÔ_|6úBéé.i¦t€Ô ›âí¥£¤‹¥g¤ÕÖëJR¾x<Çãñ•õ*ÏÛ¹Ëùñx| øGS-²XSßÿSi®Ô*s]¦ZÒ±ÒR©0ˆç¾¦|¡ô¡t·4S:Pj˜Mq‡¶Ò(i¡ô´ôƒDyáñx<ÇgÄ[/™ò3ðø¬õ7ûǧñ ³J¿ÿÒ£r —Ü™ë,u”J_§CáüÁ× ß*×GÒ=Ò,iÔ(›âm¤#¥ ¥'¥ïÄõÇãñx<¾‚^„að6óç;sÒ^ ²ª¿ÿ×ÒBi÷Ìõ‘ÜÒpéQé‰óŸ+¾PúDºO:Kœeq‡VÒHéé éÛ¨õ(_<Çãñx³ÿ«Cb~±;ßàñÙâ§{W§õ‰Õ÷ý åZ*+ÕÊhïh®´Bâ|Àç¢_!ýCš-”ѵT+ŸZJ#¤ ¤Ç¥o¨_x<ÇãñÉ}9Öh “s"aì*ܯ,=ç”®–ºg´_4Xº[Ú ª99‡ó§ÒýÒé`©I6ÅZHGHçKJ_QËÈd2™L&““RŽ‹pãñYî{û¯Äô²ñû¿&MÎè¤Ò»çÞþ3éi®4DjšMq‡æÒáÒyÒ£Ò*‹êFùâñx<wWaÂ@nóûâñYî[;ŸÆ>xÌÚÿßÿIK¤~íõ–n”~Ž:œ?ø\÷_HJó¤C¥fÙwh&&Í—‘V&‰;P¾x<ÇãíêÓíY¾ ðøšò…Ržñî]ZO³èÿw¹43£OnëJ¥e¦‘Þœoø\õ_JIçHC¥Ùwh* “Α’ëËòͳ |ñx<ÇçžOq»cŒgàñYç¿1Þë74gÈæÿßߥH‡d´çÓUZ,­N:Àó ŸóþKéai¾t˜Ô2›âM¤C¥yÒƒÒIâ”/ÇãñøÜõ;Ÿî¦ QÆþ ÏNÿ¦\†›û=Koès÷ÿ÷ i¾Ô6sž|i´ôŒ´Å:âÀù†·_%×£Ò|éð,ïÐX"Í•>—«0iH”òÅãñx<ŸÞba¼Â˜Wº“*ðø¬ó§Ú…Áÿ¿›¥'¤Q©æ‰”+µ—.VJœox‡øo¤G¥ó¥#²l¼C#éélé~i…Th1äòÅãñx<ŸÕ>¦SQ˜jFa¬Áã³Íßl¼}_v¿n“ÿßo¥Ë¤Î™ëḤaÒƒrm’8ßðŽòßJI ¤Rë,‹;$͖;P^x<Çã³Ù+åì‹”ó4ðøìñï×ÏJú¸>çÏKÒ©vF÷ê;Kú(ÕìqÎO¼]ýwÒÒÒH©M6ÅJƒ¥³¤û¤O¤Â¨fòÅãñx<Ÿ%^V¯q[NÆ(LúŸ-þã ú•ƪbƒã³NºN®žíÕ ”î~-ëÌp¾áè¿—ž”.”ëÈŒ.’RùÔ@,)Ý+×G¥‹­P^x<ÇãkÖÿõ¸Ò½ëW… ´Ð"nÇg©a¼#¿·´·lûãó¦4Uj˜Ñ‡¨S¥7ú0œŸxgúÕÒ“ÒEÒ(©]6ÅêKH3¥»¥¥-Q—|ÊÇãñx|µù4w¶s'þÏBßÛx þÒΉN9>¿JwH3Úé)]'ý$q¾áñ»üéiébé(©}6ÅêIHgHwIH›-Öw |ñx<ÇgÞ+1&Qhõß„õðø,ôæ©Ô—Þd;íø|(%5Ï\略4Az±t~8ç'í×HÏJ—HGK²)îPW(.Ý)-—6Sñx<ÇWW’˜„»0ùòx|ÖúãMö/’“Ï&éAi˜äÊ\¿¥³t™ô]ü*›œŸx|™ÿQú—t©4:ûâý¥Ó¤Û¥ÿ“þ°óEùâñx</·WlL"~†!žÇg›ÿÎxK]KâxþõÃJiAFxçI£¤'J;*œŸx¼Á¯•–J‹¤c¤ŽÙw¨#í/M—þ.½'ýaýì‚òÅãñx<ŸÚ«ÐjŠEìî]?D‘Àã³Í¿m¼‡î"q<£ýféi´”Ÿ¹ŽJ[i¾ô…iÝ{Ž?ã×IÏK‹¤±R§lŠ;Ô–úIÓ¤¿KïJ%Ê Çãñx|š^I¦[Ä„.Ì“4ðø,ñOošŒ}ØÎñÜõ×ÕÒb¹ºf´‹rˆôiCÔ¦˜œŸx|:~ô‚\—KÇJ³)îPKê#*-‘Þ–6‰û<ÇãñI}Y×+:ûŽÑ¯tãñYë—8®tŽg2¿Lš(ÕÍ\Ϥ©4SZ5i…ãǗ˯“^’Kã¤=²,î°Ÿ4UºEzKÚ;c“òÅãñx<Þá^… 7ÑA‹äñ <>ëü…ÆÛâY¦çoÏ2ÿ³t£Ô[$‰TÁt&í-ÇãñÎöŠ\a±faì"“x|ÖúS7¾——Ýør<ÓòïJÓ¥Fô™H$R9SÚ[<ÇãíãÖáwÇ-,Æã³Ói¼ñ½§t?dz\þ7éni='‰”vF{‹Çãñx¼³½Ç?$nb±Õ8^ÏßÇxãûBÙ„ÏŠøO¤¹R+ºP$)UšO{‹Çãñx¼³}ô:üDâ(ˆØðøìò»o|?8ž•÷›¤G¤á’›¾‰DJ’ž£½Åãñx<ÞÙ^–C ¢Q²ßàñÙæó7¾ë$ŽgýWÒBiwzT$)!m ½Åãñx<ÞÙ>~pca’e$ ­V}Àã³Ço¼ëÍ—8žUá·HK¥c¥Zt­H$’$©.í-ÇãñŽ÷Ë5E/á=£ÐêÃðø,ñïo|;IÏ*õk¤«¤îô±H$ǧ´·x<Ç;ÞÇmoéN¶Âd’í+ðølñOo|ˆZãY¥~¡\t´H$'§ƒioñx<w¼×Öä»SX¾)Ÿþ6ãï1±†9žUçÒÍ"‘œN§½Åãñx<Þñ^Éêäxâñ¹ë3Vó»hoñx<w¼·¾éü`ž§Çgƒ7÷o/“8žÕã2ÄÇÏußÍXÍ—ÑÞâñx<ïxŸ8¢!EÏN_þ-dz*|cAü+áQ'ÇÏ9ßÐXÍ¿¤½Åãñx<Þñ^É^lˆ^àñYè÷7Þø>—0bŸãYE¾ƒ± –§ ‹r<ñø,÷¿§Z£áWÚ[<Çãï•,&‘êÝñøìòí7¾ï'sŽgf}cA¬IXŽžã‰Çç–ßXÇÛHO<Çãñ²z±;Íx|öxsÿv­uÿ–ã™a¿ÖX yÒ–˜1ÕO<>÷ü3ÆjÞϪ±åxâñx<ï4¯tE¤™ñøšò«Óèßr<«Á›u¶—8žx|®û[Õ|ŒÄñÄãñx</sˆ"É;âñÙåÿÏxãÛAâxV_šÆ£NŽ'ŸÓþ|c5ŸE{‹Çãñx<>aDƒáÝiÿ¯nÿ¬\†ßÒ9žUâï6ö@F•ÇÏU’±š_I{‹Çãñx<^.qDð6ð·o|G›Fìs<3é/7F|¦ÑÁãsß1¶·˜€p<ñx<wŠW2±¥œïˆÇ× ¿Ôxã;CâxVŸe,ˆ‹Òîp<ñø¬õ{«ùhoñx<ÇÇMØb KX¼#Ÿ%þ4ãï¥éÞ8ž•÷Ç âVãÔ Ž'Ÿ¾‰±šE{‹Çãñx<>jDCš Hºñø,ô£7¾·':Áñ̰d,ˆ'%Ž'ŸÓÞ¼…­¤ßioñx<Çÿ5¢a‹i8„;1>Çg›`¼ñ}ÖêA:dz*üÆ‚xË*ÞÉñÄãsÈ¿WŽ-l9žx<Ç;×Ë2±¥ôç-)Âx|VøÆ{ß÷$ŽgõøÆ‚øÚºÂñÄãsÆ?i¬ãw.ÐÀñÄãñx<Þé^åáÂã³Ð×3Þû®–8žÕàK5¦z£ÄñÄãsÚßhÜYæ¸tw–áxâñx<os/㸋?áñÙæ4vnÝÒf‰ãY ~…± Z•–ǯj¿E®ÍÒ&i“´Ù¸ Dyßÿc5Ÿ“h ¼ðx<w¦—Õ W¡ÜIÞ×Çg›_žzÎ0dz:ü+ÆG=K'°TÑ÷Ù"m–ëi“´Qú]Ú ×é7éW¹ÖKÿ“~–~–ÖÉõ“ô“´V®¥5Òjéé{¹¾—¾“¾•ëéki•´JZ)×—Ò—Òr}.}&}*­>‘ëécé#¹>”>–KË¥ÿ“ë=é=é]¹Þ‘Þ–Þ’Þ”Þë éué¿r½&ýGú·ôª´L®W¤W¤—åzIzQzAz^Z*×Ré9é_r=+=#=-=%=)×ÒÒãr=&=*="=,=$×CÒƒÒrýSº_ú‡tŸt¯\÷H÷HwËu—t§t‡t»ôw¹þ.Ý&-‘ëVééfé&éF¹nn®—ë:éZééjé*¹®’®”þ&×bé éri‘t™\—J—J—Èu±´PºHºPº@® ¤ÒùÒyÒ|é\éiž4Wš+-Í‘fKgIgJ³¤YÒLé été4i†4]š&**M•N‘N–¦H“¥IÒ$é$i¢t¢t‚t¼4A/“ÆIÇIÇJc¥c¤1Òhi´t´t”4J:R)†KGHGH‡K‡Iä¡Ò¡Òiˆtˆt°t4X$( ”J¤þÒþR?©¯ÔGê#í'õ–ö•zI=¥}¤Rw©»ÔMÚ[ÚKê*í)í!í!u‘:K¤ŽÒîR©½ÔNj'í&µ•ÚH­¥VRK©¥ÔBj.5“šJM¤ÆR#©¡ÔPj Õ— ªÞe —ÿÊÔ÷ãííµ´·x<Çãå*”ÛbDÖا"[R­ô€Ç׬ÎxãÛOâxVÿ§± —2ø}Î’Ü26H$’$éΨ •¯ïƒŸõí-Çãñø¨ îô&`¸·¤5%¯V—ñÆ÷¨ä[*r<3ë¯6Ĥø*õ}Ž¥ûH"¥—ž“2Xß;?ë Ú[<Çãñ» [b £#âÖ–Äã³Ë_f¼ñVÚ¿åxVµŸg,ˆsã×h¨Ô÷H÷‘DJ/-OxQ™únÞYæ[Ú[<ÇãñÑk4Ć"Ü–ï¸Åjê_ãþ ãïÅIjÇ3ãþDcA\Û©ä÷Ùî#‰”^Z3˜¨Rõý‡TÓ•þ ½Åãñx</wÌ®V3.Ü…±¿Ù½Àã³Ác¼ñ½-vÅuŽgÕù¡)&o»2ø}jÑ}$‘ÒHõ¢FU¾¾¿iü¬ŽQ 4Ðâñx<ïp¯-ek¶ÇÏ»H TD‹Àã³Ä`¼÷}ªt³ŽgUûÆ‚øwY'¤²ßçº$Rz©kÔ"¬•¯ï?kPÔÐ ÚC<Çãî÷‚-¥qˆ-ñ݆_âñ5èÍ‹“½“°ÙdzŠ|3cA|Q:´¤òßç]º$Rzé )ƒõý:ãgM(mliñx<Ç'>ìuYmƒ=XÏ.o^œìûÒ Ï*õ¤Úlr½”©ïó$ÝG)½4>&ÀWÙú~¶ñ³æÅî,Cû‰Çãñx¼“}܌ʘ°Db "a†_Ãþ'ã¯KÚTú@ãY¥~¥± Kü>·Ð}$‘ÒKg–uþ3Pß3~ÖõQA ÚO<Çãîcn â&]Ä®*éŽ{/<>ü‡Æç軕öo9žUíÿkììµ$gå¿ÏstÉåÊw» òò òòjååÕÎϯ“Ÿ_·  ^AAýZµÔªÕ°víFµk7®S§I:MëÖmV·nózõZÔ«×¢^½–õë·ª_¿uƒm4hÛ°án ¶kÔ¨]£Fí7îиñîMštlÒ¤SÓ¦›6íÒ¬Y—fÍöhÖlÏæÍ»6o¾W‹{·hÑ­eËî-[öhÕjŸV­z¶nÝ«uë}Û´éݦÍ~mÛöiÛ¶OÛ¶}wÛ­ßn»íß®]ÿví´o? }û:Сûï>h÷ÝwìxPÇŽwêtH§NC:wÒ¹ó¡;íÒeX—.‡í±Çá{ìqÄž{ßsÏ]»ŽìÚõȽöµ×^Gí½÷Ñ{ï=º[·1ݺéÖí˜îÝÇvï~lÇõèqÜ>ûŒÛgŸñ={NèÙóø^½NèÕëÄ}÷¸ï¾'õî=©wïÉûí7y¿ý¦ì·ßÉ}úœÒ§ÏÔ¾}OíÛwZ¿~Óûõ›±ÿþ§í¿ÿéýûŸÑ¿ÿÌf pæÀg xÖÀ³8`ÎÌ9ðÀ³âˆk†¿ö¯ñÄg&N|vâÄtÒs'´tÒ¤ç'Mzaòä'O~iÊ”—¦LyyÊ”WN>yÙÉ'¿zÊ)ÿ>å”ÿLúÚÔ©ÿ=õÔ×O=õiÓÞœ6í­éÓßš>ýí3Þ™1ã3Þ=í´÷N;íÿN?}ùé§¿ÆœqƇ3g~4sæÇ³f}2kÖŠ3ÏüôÌ3?;ë¬ÏÏ:ë‹Ù³¿˜=ûËÙ³WΙ³jΜ¯Î>ûë³ÏþfîÜoçÎýnÞ¼ïçÍûáœs~8çœÕçž»æÜsœ?íüùkçÏÿé¼óÖwÞÏçŸÿËùçÿoÁ‚õ üzÁSöÛÏP[Lg¨x}7/ˆó8í-ÇãñøR¯Ä=*,—‘LØ<Ï ¿ÔxãÛ'vØ0dzêü£Æ‚8$f\Ie¿Ïãg];|¸ïòËÉd‡äQ{íe¨÷J¬ïŒUïmÚ[<Çãñ»F4$Ó–/0¼;_#þnãï‘¥7ÙϪö7¦Z%.ƒßç0ãg=<~š¯Ÿz*O²sòn ªÃGV·«ï_ë[ÚL{‹Çãñx<¾ô¯*LˆRX…%܉ËHâñÙàgï}/Œ_œŒãYUþdcAü-aoËÊ|Ÿ¦ÆÏúfî\:Ÿdç䂼K¼yô[^Ëñ¬"?ÜX÷YL¯à÷ù5Õ2û[/¹„Î'Ù!yÝyçêB”Áúþ@êuXhñx<Çïü¥¢ö¢°øsBdÂÇg•?ÐxïûDü®ŠϪò½ñ‚Õö–û>Ÿ?¨y½zt>ÉÎÉΜi¨Êö¶Ì@}¿Ê¸ÅÏÄÒ í!Çãñø»NDϵHœzaùŸ%¾‹±ÛùVòuJ8ž™õmña®þ>/?¨WëÖt>ÉÎÉK'M2T‡±k£T²¾›ç©ÍÑ@û‰Çãñx¼£½Ç<$‘ø_㾑yº~òûÏ úÍR¾± Ö™žv–ïûÜg|¬:¢kW:Ÿdç仯Œ1T‡cb;ÿ•¬ïÇëøÍí!Çãñø]ÿ´X#Ú0ãÂrÍI<¾¦üºTÓõ7&ôo9žUá¿3–Bí„ÞNe¾ÏbãgÚ·/O²sò¢aà Õát)ƒõ}cÕ{*fôí'ÇãñN÷²ŠU¸“–pãñÙã?6Þø¶I¸ÉæxV‘ÇXÊÂ=ø>æñÛz(O²sòýûªÃe ÿÊÔ÷ÝŒUïÿ¬6¾¢ýÄãñx<Þ±ÞôÂòex|öøŒ7¾½“¯¸Îñ̬ÚX¥ ~óøí;F¦óIvN>¦{wSuH>¤«õ±ÀXõ~¢½Åãñx<7¢C†ÏQ¯ñÆwx’›lŽgÆýmÆ‚8¦<=”` ñ³–NšDç“ìœ< }{CuxÖjÖRÅêûJc½+H>o‚öÇãñxgz…Û<%¯Yÿ7ã½ï)±ý[ŽgÕùKŒ 4ž¾³ 2ó}: ý£™3é|’“woÒÄ8A™ªï¯ëøÞ ÚO<Çãí•Þ;–½5Ÿ=þLcŸsAª• 9ž™ò3Œq™õ›Wäûl‘Ë<~û Ðù$;'×-0Uˆ5Ö+6U¤¾ÿÃX±$í'ÇãñŽòq7î´ß¯y?Þxï{S9jdzR~´± nOñI÷û|oÞÞ"?Ÿž'Ù9yý‚†êà–þˆ©z•ªïW«Þd‰öÇãñx|´Òœ8(bKÂR“x|–øƒŒ÷¾•=dãxV­`,ˆg^[áïó¶y{‹¦Mé|’“WœiÔÕN™¼¾ŸžÞð1ÚC<ÇãñýFÉÿ–tè2Ÿ%~Oã½ïëñk4p<«Êïn,ˆ÷’D¹¿ÏÆ´ûît>ÉÎÉ/O™b¨ý”ÉëûÑÆª·$ucKû‰Çãñx¼³¼Œz×ÏîôÞ¯VßÐxïû•Å=Žg•øzÆ‚ø!¾ÃSñïs³ñƒÆ÷ìIç“ìœüc5T‡£”Éë{cÕ{6ùð1ÚO<Çãée‡p§/Ç×¼ÿM)Ò†•㙿ÖX ¥Å3ó}Î7~ÖÙHç“ìœ|åᇪÃ4eòúÞÊXõ>(«ã´Ÿx<ÇãÝÑ#ÒaàñYá?1Þø¶4 ååxfÒ¿oÜ÷n7‹‚¨ø÷™l,ôkGŒ óIvNž}À†êp‘2v}ß,å«Þ´·x<Çãã¦Nl.»“H6."æOx|–ø—ýÛ^IçMp<3ìŸ3ö@ú&ôv*ó}†?ë‘ñã}—_îê‰y~HÌx|Žúqûìc¨·*c×÷ÏŒõ®qÙÑâñx<wÇ­ÑÿšÍÖ‘ 7Ÿ%Þ¼¯ûádzzüÝÆ‚)eðût7~ÖÓ¦™Ÿ§Ó¯ÃãsÅîØÑPžL~OPÞúø¢±Þõ( &Òâñx<ßÅÊžx”þ9Nüõƒ{K| ¯aeZûºs<«Ü/6-9%&âSÙïÓÄXèßÎëMþ48ŸC¾K³f†êð–2v}¿+¨.í!Çãñøh/cX">J‘*ŒÇWŸŸc¼÷=/éüdŽg†ý™Æ‚X|͘ò~Ÿÿ¥ZþsÛ%—¤Ó‹KgŒ:Ÿý¾QíÚ†êðµ2v}¿ÔXïN‰Y öÇãñxüÎÅ ÿúóNpoN¥Àã³ÁO0Þû^û ãYu~œ± n.ííTþû¬0~P‹zõ ½iOÇãsÂo¼è"sÜm£2v}Ÿnü …¥’öÇãñxü®?É*8áŽ{GË1x|ÍúCÌëÆn·Æñ¬:± Kh¡*ü}^2ÎÑØ·M›ô{ËùxÏ6ÿåìÙ†êÐÆbOÙŠ×÷‘Æ:~GÌÐ ÚO<Çãñî˜]'þ BlN²Œäf«ÀãkÐïe¼÷}M.Žgõø®Æ‚x=vEúÊ|Ÿ{Í«Nvíšød8îq²çÆx|ÎùOj¨½­†tU¸¾÷2V½çK‡NÐâñx<ßõWmŽ‘j† ÏßÈxï»2­iÃÏ ø†Æ‚X•ôÉj¹¿ÏÆšÖ¯_²'ÃÞrNƒÇã³ß?4Î4iixY !õ½™±ê},Ñâñx<²›þŸÀãkÜÿ–j]À_£vUäxVOY¿K™ú>g?è’C›îîM>Þ›ü—x|NøkGŒ0T‡)±[NT¦¾oLUÇ×I´‡x<Çã〒̸0l›‰Ç×¼ÿÔxãÛ<~Ë ŽgUysA´ˆ]÷¾’ßçãgÝ9f › âãç d¨çGíï[Éúþ±qm”æ1 ÚO<Çãñî² ÑÈ0 c‹ÅŸðøšñ¯ûœ=Jo²9žUí— bŸÒNHF¾OóDñI“,»giNƒÇãsËŸÐË´rÂU¯‚õ}©±Þõ* &Òâñx</óŠö‡pdž+ÜqC&ðøôÿ4>dV6\ŸãYµ>eAdðû´7vx>š5+±c=ìÜ›êq1ŸC~HçÎæmw2Ußo7Öñ‘¥D{ˆÇãñx<~³Õ ec!6Ç'x|û«}ΓJ§Np<«Ú_c,ˆ‰±U+ó}6KùÆÏZ¿`7Õêz^ãdx<>‡üÞ-Z·ÝQ¦êûBc½›õA´‡x<ÇãËF4$.í;"fçLË¥ ðøê÷s÷¾çD­Éñ¬R?/‚ÈÈ÷ùÖøAµóó }6Ãpt<>G}ã:uÌÛîdª¾Ÿb¬z—J´‡x<Çã}ü-ÂæØÿn¶Þ'¯a‚ñÞ÷ÚÒûϪö'¦.ˆÌ|Ÿ·Œã·;7mêµê³þ‰Çç®ß~饿 ~³Ønª‚õýpãÝ¿(í'ÇãñxwÙ®‰ËçüÓ¦¥±íNfê{#cÿ,få]ÚO<Çãñîè]'âgYD$ܱ{W¸ñølðMŒ÷¾_Ä®DÂñ¬:ßÜX+¢æ°TòûÌ7~ÐÜAƒ¼iïèKc;ŸÍþ±ã7T‡¡IÖM¨@}ß i}lPƒöóÿÙ»ïð¨ªôàß; ¡×½†z %ÔHBKè-$ÔÐ)¬]×^YÄŽ]w±,²–EQQÁ^PQ©î® þþþý!sÛ;3·Lf2ßyîãƒðÉÜ3çæ=sϹ缇žžžžžžþÒ®º1 QVII¶IzúZðg|ÝûþP}ŸÍútÕŸ8Í8aò>Ê3_<Ñõ“& ö~—ÁÓÓ‡¿qòd!æïöb%Þÿ-Æ]ÀöžžžžžžÞÐÃp „ú‡U9èékÝ Þû¶4N·ÎútÞ/DSÕcU»å‘“AìËË3ì­ýîÇÿÒӇߜž.MðQåM°ïO‹c‰i^ûû°=¤§§§§§§÷þ_èÓ9hF)~Ö®» §¯eÿ’ØçLÖÝû²>]ò/‹¢à`y䬯.]ú»zÅûïæËÝ×-§§/_п¿×ÖäM°ï·‰q7 `{HOOOOOOoèñ#d>YÂCO_ëþAñÞwŒî&›õé’T|Ú™^³€Åò4/úg6[þnò—ôôaêÇwëæÇn/ÄûV1ÆWéÙ~ÒÓÓÓÓÓÓ_üKƒ¹Ífƒº©ôôµã¯ûœs½²±>]õ7‰b6àTy~ð••ãååÿgôì×ðq±áCczú0ò)­[ ápÀ`é„Åx_ ÆÝ¶‡ôôôôôôô†F? ÏîàO@OT¿QÞ€`}Ço/Äõ&£vÊsXw{q$Þ{ˆ1þ’4¢Áö“žžžžž>¢= X˜AO_ë^~Èv¿Ñ²aÖ§>K¼»M¦U[(ÏnñD““’Ì&™ÿŸyî=zú0õ_n”&u5óiµï-ÄÐ;jž Ší'=====}„{U—Ìç2 Í?ÑÓ׊ï-Þûþµ&ëÓ]Ÿ&^ˆý¾ÆDý/O•x¢¥ʹú ;uôôaêÿµ|¹Ÿ»½ØŒ÷o|åF9i>¨Áö“žžžžž>ÂýÅ»ßקv¸ÌèékÓÇŠ÷¾ï÷oYŸÎûDñBü[µ†ÅVyV‰'ª;öw_©õäIéôôa䟜;W‡Q—f9﯋q—Þ?ÐÓÓÓÓÓÓ›zˆ#¦ôôµåÏ@\¯|¯ËOÆútÉ×/Äqí“Uëå™.žèî3ä›Ü¯£§/ÛÔ©B8äê’ÔXŽ÷'ĸÞ?ÐÓÓÓÓÓÓ›zèÌ(ǃtzú`ú£â8CóšÎ-ëÓ]ÿ¹Ø ‰1ê„X.Ï yFAÿ¶ÿóo*;=}Èú²Œ !JŒ–NX‹wyÿÚlðþžžžžžžÞÔÃhÂc2†á1· §žÿ»8ФÛ@žõé’ÿ—Ø éTs!(O;ñ\‡‹Šþ/ÀçÆôôáë—  „Õê vâ}“_ûײ=¤§§§§§§7ðøY“0|SzúÚô‰÷¾£M– ³>÷O‰bˆùcÕ@Ëó3”hñ\?nÛö{€ÏééÃ×ONJÂá^ƒ²ïsĸ»¼ §§§§§§7õ×]xüÈ0IOTƒxï›/å`}:éï§–L7ñ±XžOÅ+Þ :šÝQúˆòi‰RÖçÔ ìÄû(1ôïèééééééM½÷‚v÷ð˜ TÐÓ׎—gó®­éß²>Ýõåâ…Xf´~ÛZy^OÔµU«ßì³ÕíãÇmÛöåå±êðѦiS!"Þ6˜h`1Þ»Š¡÷Õ²ý¤§§§§§§Wyíã_?ÓKÒÓ×–_ Þû^¥îß²>Ýó+Ä ±pª<ûÄ©é:ñ1øÅãÍ•+¦¥5ˆŽðÑÚµœ&P'ý…ªªhGˆˆoƒËJ¼7cücðþžžžžžžÞÔ.h÷ˆƒôôµéÇ‹÷¾{kžæ±>Ýõ3Ä q»vûëåù£¼X¦oß¾ýŸ;÷Ìœ9 m[ÕÔžáÃùä¿Nß”– áP_·íŽåxÿBŒ;8 Þ?ÐÓÓÓÓÓÓ›úš9–çt£—ÿæœÑièékŧˆ·¿/èÞõé’*^ˆ'tO;-—G^,³aĈˆís]»výˆ-6ÔWKˆ Þ¹“Ýòºw¼µj•]§âý51î:¨FØÒÓÓÓÓÓÓk=ı ïµ?Æ6èé]÷ñâíﻩXŸ®øÎâ…8hœ‘ÞJyæ‰'º!++Òºš¿UV>5wîønÝÄŠÁîìlvËëÞñìüùÂE®îÿÛ‰wyÉÒ0ßsÇØ~ÒÓÓÓÓÓG´¿øô£æÿÏ©†(<êáŠËÿKO_;þ à;Wߪû·¬O÷|cñB|æ%m–gŒx¢ˆJ|øMiiå¸qíš5ƒ¯mÛ²[^÷Ž»fH‹–fª—N؉÷ëÅß®ÙÛCzzzzzzzÁÃhžƒÇ<™¤BO_‹þ˜xïÛü}’ÿV¼à,àTyzŠçzuÙ²Hè^þ}ñâÙ}úÈYõ¯7W®dϼŽcÇ W|•ÑDkñ¾^üÕZçàléééééééõ¾fž¹×PD͈…Ñp=}­ù—Å{ßîàïsü!ñB´,üøþó êp¯òÔöí7O™’K¯…iiaýñÏWV¾PXx¾²’ã —ƒ W¼Òké„Íxϵ®S'ƒ`ûIOOOOOO¯ñŸ~hÀü=ôôµè‘w:Ÿƒä÷‹T“-',”焯¾ô/u²?yhõê¥6ªW6^ ¢£ܶ-|+aA€Ä¦MKÓÓ?()á(Ãï»vMON®ø]€Sñ>\üÕz¤º±e{HOOOOOOo衟!.ÃPèékÑßèDzaÖgünñBLªé„Ø-Ï;â‰7®cÝÈÿ–—ïÍÉÖ¡z…u‹ÜÕ&3ƒÛ·¿}Ú´“Û·Gò@àví„Ëý¬v× ëñÞQü½z`{HOOOOOO/øšÎç´‰¼G)jþ†ž¾ýñÞw øû$…8µd!àTyö‹'ꟘXg:Ÿ¬_¿iäÈØF_hÙ°áÚáÃ?Z»6|+ääöíõ££õ­~ttnJÊþ‚‚È\RѾys)+‡××¼Íxo(/YR¿'ÛOzzzzzzz×ÌpÖ$Š7À §¯-_(Þû^¡±Ãút˯/Äm² ëå¹G<Ñ䤤pï7ž¯¬|fþü¬=Eqdˆa@Û¶»³³Þ¹3ÜkæöiÓäO™K* _.¿¾¬Ù ÂV¼*Ö|Ô¥l¯léééééééM=LZ,É8§þIzúàû‰âíïð÷9H^Nw£v¡¸õòTŠ'Z6hPøö¿Û²åŠñã;¶háÈøBƒèè‚þýßX±¢Îô¨·oïçgœ%'¶nê!8WÝÿ·ï/‹3‰ºx-Ð`{HOOOOOOoè/M5Wÿ›G7ÿáò†‡ž¾}?±¿ñ\õ²>Ýö£|'Šs¦<+ÄUŒŽÝÅ.]:§oßzQQŽ 1t½vâİNú¨?>() ´"aIÅá¢"¡:T÷ÿíÇûCbUT¥Ýe{HOOOOOOoà/Ï~¼¼¾Âpô£۲‚ž¾|kñö÷øû$ßC¼ÿðjƒl–Gž=OvvõÏ”•Ý>mZJëÖŽŒ/xeZròó……ªªê^º4=ÝrÍÔá%ÏJ«Çyími3Þ¯k8¿fîÛCzzzzzzzcsºUÞC—ÿl2†AO<þ>É7/ÄÑš™ÕvË3PžÃRPýÃw׬Y9xp“˜G†Ú4i²}ôè¯6mª«ÏíÏWV&6mj¿¢êÞ’Š=3g Ÿwjuÿß~¼ËIX6z-Ð`{HOOOOOOoèqÎh/ £õÚIôôAöËkÔ 6g}ºâOÂGÚ“څ[ÖËÓV<Ñ»kÖ„r·ð—ŠŠ‡rsGvêäÔ^•£:w~$/ï×ŠŠº‰à…ÂB8÷ªKK*®?^JYR“„Õn¼Ïô‘„Ea{HOOOOOO/{èÆ$´#F‹.èékÁ¿"öo»z 4°>]õGÄNH+ÕÞ–¶ÊsÆ×–ŸB51Áç6l5*¡qcGºÊÍê×_=dÈ‘ââÙXá|eåþ‚‚Ü”y‡…\RQ4t¨ð˧â}°X“ª’°°ý¤§§§§§§7ð8§]b¡MöàýõÞ˜ôôAõŠ÷¾#Tý[Ö§‹þ€x!zU?Vµ_yKÃzõB­x¡ªjAÁ”ž==íU™Ú¦ÍÓ§ŸÛ±#¢vp¼|œÜ¾ýöiÓ†ø½ýD_R‘Ó»·ð¹nUm9a+Þå™D«GuÙÒÓÓÓÓÓÓ›yh2IžóPN(†™'ééƒæog4äítÀútÃ? vBÆN•çŸâ‰ºµjRû^=aB—–-ší?¯_¿W—-‹ÌñÃM(JÓÓIÜÖK*†wì(|¢'L“Ôr6‘¯µIXØ~ÒÓÓÓÓÓÓk}Mî¨sº]1¶¬ðÐÓ×–ß&4©ó“±>Ýó׉9Ú©%ÖËóˆxÅGuî }¿ƒË—ÏOMuj’ç–-¯?þÄÖ­\à’ ý!d4߃* x<*VW=¯‘D¶‡ôôôôôôôfú)Ω' —dÐÓß/owé~¿YŸ.ùâ…Xï5µÄfynG4úö­Å.ß¹;îœ>=µMGúºŠ¢LNJúó‚ur¯J—–T ޼%òÆ%ŸŽÄûßÄZêá• ‚í!======½™×Ü1ÔŒR¨w°¸œìA¡§¯-Ÿ%ÞþÞãµµ;ëÓU?_¼×hçSY/<¢±qäÈZéì).^3th³úõéÜÆ7n¼9=ýó 8|À%òqjûvi¬ 8£MÎd1Þ÷Šõ“Q³n‚í!======½©Ç9Ýh–aèÿLO_+>M¼ýýKõŒ}Ö§Û>S¼{r4X+Ï\ñDÌÊ f7ï׊Š}yy]º8Õ¡Þ±ã³gÿ¯¼œã\Rá稊PÚ6ºÐr¼_!.Yšï• ’í!======½™ÇåU猆(ÎLŠ §¯/ORÿ÷¥ ¬O×}Šx!^4iq,”'CÞc/??8¼¯6mÚ‘‘ÑÆ¡ÇæMbb–t¸¨ˆ\RÐñÒ¢EB!ûNÅû*±6¶¨÷¯e{HOOOOOOoèqN—×ÁpÐÂðŸèéƒæÏA©'Þþ~ãõ@õéª/ÄaÀ©ò$‰'zÍåM.TU½¸páŒ^½¢<Gú«}n:õLYG¸¤ÂÂqÿ¬YBñ&ª·œ´ïÓÄz¸Y7£í'======½ÞÃd× æ-ôCOLÿ©Ü0¹Éf}:îÏr·û;£ ÖÊ#w¿Ø¸Ñ¥ÝÛ¶]?iR÷ØXG:¨õ¢¢òRR^^²„ý.©°s\3q¢Pª…^9mÆ»¼HíI€í!======½Oár œééÝó¯Ê›ê¡³>]òÇäu€Såù^\(®(ʯŽ÷åÞ\¹raZZ‡ú¥š7ß•™ùíæÍìósI…ýcÝðáþ¬h°ïò"µ7Öh°ý¤§§§§§§×üdd˜‚ž>øþ ±Û9Ì¿›lÖ§}ÿOñBt;!•çØÛiݤ‰ƒ]¸ŸwîÜ= m[§öªœØ½ûÓóæ…Ú¶<ÂzIE~ß¾B1n2IÂh<ž¢ÄÏû•îÍÙ~ÒÓÓÓÓÓÓë½Ás`£¾ü7zúZñ·ˆ÷¾Ù—n²YŸ®ûGņº5,–ËóñЧ%&:ÒyûhíڵÇ·lØÐ‘>gl£FGŽüdýzv鹤ÂñctçÎÂÙ÷Õ ¶ÚŠ÷Äo °=¤§§§§§§÷ÇëŸx¼þ«œÓ½)=}­øíâ-þJ€õ“x!fi—NX/ÏÝ≦ôìi¿ç¶//Ï©Næöí÷æäü—{UrI…kK*’ââ„“¾¬°ï/ˆ-Y ’í!======½™‡°îBØ6“ž>È~‰xû[i”õé†ß*^ˆ"ÝÞ–ËS!>Y]>h#Im¦chT¯ÞÒÿ½j;í\Ráö’Šfõë §;æk ¥Ÿñ¸[üP™ÛCzzzzzzzüÅ›Ïåiæë1¼*èéƒí'‹·¿w©~œõé¢_$^ˆ*À©ò,—‡–Æs¤ó¶0-ÍZ729>þÆÉ“O+ ð]RñBa¡ý²ý·¼\>ËOªÁVëñ^)ð-¼4ÐÀöžžžžžžÞ‡×Ìhðè—^˜üž>¨~€x“ýŒ×í/ëÓU/øÜ­šÑ`«ƒãåŸg Ö°X,|¢çxJ|ñðs³‰¶Íš•ûMi)ûá\Ráÿ«4=Ý‘’¼¼DZ=ÖÇ|·—@ãQI¼Ã÷^Vl?ééééééé/í:á1Êñ œ0< =}|Œ×Àú Ž÷5â£8UžDñDï­YãTgrwv¶ÜW×µësæüƽ*¹¤"ð%NmBñˆ˜¸tœn_Ëñžêk$‘í!======½?Þ0s›G=Âc˜^’ž>hþsñÞ·žQºuÖ§KÞï[å9D‰'r0¥ÿÏ;wnoÙ²aõÇ´v-{Ú<¬-©ܾ½S§þcV–p¢ù5kÇìÆ{œø‰™¤›fûIOOOOOO¯ñ0®¦LÐÓÛï};j4°>Ýò_øñq¦<Ç|íõàlríðáÞï? mÛÝÙÙ?ïÜÉ®5;K*nŸ6Í©3–¦§ 'Úhºd)°x<1$ð­vîÛOzzzzzzzcoœBÏägLS>Ðӻ꟔4°>÷¯‹¢kO^OÔ=6ÖÙ~ãGk×h½0-íÍ•+Ù‘æaIEýèhçÝ,H•Ö4\g0Æg%Þ‹q×Òx$‘í'======½‡8h!,É §ž¿]|Ì6]•õé¢Zì‡ ‚cíÉÃâ‰Fwîìx§q_^ÞÛ¶±óÌé%¹))ž"³[7!"жã}¿w)ÓØ~ÒÓÓÓÓÓÓ+f9SáX{r½xÅçöë'÷Ê.Ø‹£§wÄ{/©Ø_Pààû÷IH"â€z×IËñ~—à«g4°=¤§§§§§§÷éa2#B9k¼îB¡§¾—·vßi0£õ銯/ÄR8Öž¬O´iäHöléCÖŸ¯¬|¡°ð¼×6%öß¿•Q¾ÒšMX|,ó7å!ÝŦ3Ø~ÒÓÓÓÓÓÓk½êîä¬j¬B¿ Cû¦ôôÁñÓ|líÖgpüJñB”Á±ödŽx¢'Ofç–>rü¯òN%Ýd³>ôÙâ…¸Õh,ÓZyF‹'z,?߬“v!ÀN=}èûÏ7l¡ù¥µcÄûD1îîö:ÛCzzzzzzzÙÃ{ÄYÓ/FOlßA¼ý}]õ¶¬Oý0ñB<ÇÚ“â‰._î³Ïv!À>=}ÈúƒË— áÐÓ( «µxï#ÆÝ~¯Ÿb{HOOOOOO/{mn§³ÃÞã¡§¾o Þþ~Q3®Æút×w/Ä«º&ÆryšÈW|ãFï¾™Ï>›æïééÃË?>GZK4ºzEƒýxo!ÆÝaU2H¶‡ôôôôôôô’‡É˜šÑ ÃEôôÁð_Š÷¾Ñ5[N°>]÷Åkñ1œiO¾Sß+ŠòkE…?ëÛ/¸žž>4ý­S§ ‘§ÚvÇz¼ÿ¯ï¥E›l?éééééééÕ»Nœ5M#YóvgÅ “ôô®ú7Ä{ßöê›lÖ§{þ[ñB(Ài8ÓžOÔ¦I¹çvÁïµñôôaá·–’–”¨w´ïrÜÅWG7ÛCzzzzzzz<4»_^ž¡ß¾B—s’ž>þiñùö@íl^Ö§[^î‡$h3Ò[/ÏŸÅ+žÖ¶­?ý´ æä£§Y¿xÀ!"®4ÚnÊB¼?#Æ]ªja¶‡ôôôôôôô>|Í3 Í[\^\qÖ`Ñ=}ðübÿv Àú ŽNì‡ôóº6Ës—xŧöìyÁdYû“Uîôôaí'ö²£î©Þ Âf¼ß&ød€í!======½ÿºé†«,È~†xû{›jöëÓE_"^ˆM—«:Pž)â‰þ4s¦áŠ÷ ~¤Ü£§;ÿ[ee”Ç#DÄqƒÉŠVâ}œwÕÎöžžžžžžÞ³ê-+ÎÖܲ¨ÒHj–dÐÓÍoXŸÁñyâ…¸AÕÛ±Už4ñD/zwÆ.õÙôχééÃÔ]Z*„Cc£mw¬Å{O1î^ôz|ÁöžžžžžžÞ§‡¡0¨ð~_zúàùNâí﫪ÍXŸ.úÑâ…xȼŠ´ÝòòÏ—GÊs ðˆ':¹}»¦‡vA÷ øwñ/ééÃÈ?3¾Ãu›AX‹÷oàãõ“ñã ¶ŸôôôôôôôÆú-+t4ù$ééƒç¿z€3êí-YŸîùb?䃚 ¶ÊsL&*Jˆˆ¯ 5X‰÷n~m^ËöžžžžžžÞ_o:áÙëÏ9èéƒã‡‰·¿¬Ïàøùⅸʫ·c³<ÝÅ\¾Üp¹~Fº,üw[¶áPp*Þ›ˆqw´&ÀÙÒÓÓÓÓÓÓûå/Þ¦x¼“Fž5J ©º §’ï"Þþ¾¢›½ÃútÉ/ÄuÓc§<Å}¹i“&i¿¼kà]’zú0òo áÐp$Þ¿3°(ÀI€í!======}@šáõ°„~¬ÂCOL/w;i“A²>Ýò}Å ñÜ¥'«vËó­Øáñ(ʯ••Lºgò³bzúpôû „ˆ¬JÂj=Þ_£»:ºÙÒÓÓÓÓÓÓûãa6B=Vá1J;IOï®?.Þþ*À©KzYŸ®ûñZ¼­[(n­]õg xÄkq\• ÒzyžÏ2 m[³ …§Äôôáëwef ±Lw–ãý1îfê4°ý¤§§§§§§÷éqÖh›Š³ë1ôÿDOï®ß/N¤OU­Of}ºè‰ýÆÕ#>öËs‡x¢iÉÉ>;i>ÓïÑÓ‡‘_=dˆ;¼¦tÙ‰÷õbÜ×,Ð`{HOOOOOOï¯÷^{é1Ï0é1Z‰AO﮿G¼ýèuûËútÕ¿"^ˆ.Æ™2¬”g‡x¢•ƒ_0y2ìgVzúðò3{÷"â6ƒ]'¬Ä{žwW8ÛOzzzzzzzÙ›õ¢ü°„ˆxâRh7ÞGˆq÷ úîí!======½?Þì™°b²$C¡§š/o·˜ìïÊútÜß"®aÉöÊg³<“åM4gÎô³‡P¶zúõ[¶"â5£]',Ä{g1î^Öí)Ãö“žžžžžžÞ§×¬ð¼4ü Ëå Y’AO Ÿ#ÞþÞhðÏútÅo—W4h—p[/OñD/,\È)}DùFõê ñ©n¤µxo(ÆÝ§º·eûIOOOOOOïÓã¬n› “A íèéÝöò„ÞGT»N°>]ôKÄ Qat!¬•§µx¢÷‹‹ýŸ ~!À íôô¡æܶM‡(à´jFƒÅxÿD :õYØÒÓÓÓÓÓÓûë¡KÛའC1É'IO ßÍï ½¬OWýñBÜ©K}o­<§yÍSeeì¦ÒGޝ¸X‡Äš>[ñþ²tjÒ@°=¤§§§§§§ÀCýcfy#=&§¡§wÑ7ï€šŽ«±>öÅ ñ´i3Xy>3A4‰‰¹`wް>^\¸PˆˆþÚ‰ãý!1†3ØÒÓÓÓÓÓÓûëák„ñÎôônûïÄέœ4ßy…õé¬o/^‹× ÞÜJyþ&ž%).Ž=Ouì5Kˆˆ,mŽF‹ñ~8ЫÎ`{HOOOOOO﯇á€Äó%èé]÷o‹·¿ éÖYŸnùúâÀ¦íN`åy@¼âcºtaÏ“GDWO˜ DÄ¢ê›ñ^"F÷z€í!======½¯Ù…[çHèwѤ§wË?'v;STOóXŸ.ú/Ä }©â@y®;<óRSÙóäQÇÚáÃ…ˆØjº¨!°x—7÷¹Þ Õ+ÛOzzzzzzzßþr'A9cžÈÁûŸèéƒã÷ˆýÛñ^7Ù¬OWýëb?¤½z ÁNyÖ‰'*MOgÏ“GDy))BDܤ°ïCĸۧËÁö“žžžžžžÞÍ Dõ¤ÏÓ4ôôÁðWˆ·¿ ÖgpüÓâˆÏã©%VÊ“'^ñ›¦LaÏ“GD£:w–‡‰w9Ë«º› ¶ŸôôôôôôôþxÍŒ~Æõ}=}p|±xû»©úiëÓm—x!&N•']<Ñãsæ°çÉ#¢Žî±±âþ¾Š#ñ#ÆÝç5Îöžžžžžž>_ë.ôïNO Ÿ+ÞþÞ šÀÃútÑWŠ3›¬a±Pžnâÿ׊ìyòˆ¨£ILŒ¸¿/ìÇûQ1ºcŒÓ@°ý¤§§§§§§÷íkV¨G&ôƒ5oJO/?ß~¨fÌŒõé®_%^ˆm59ì–§±x¢¯6mbÏ“Gäçvî'Õ¡d-Þå=e»z%h`{HOOOOOO‡Ù6gŒ‡+<ôôÁñ=Ä;࿬Ïàø™â…¸YÛîX,Ï7âY<Šòke%;Ÿ<"çøhíZ_ûû:ï÷‰3F]: ÛCzzzzzzú€½÷Ùž3Õƒº4’Ú%ôônû¦bÏóCƒ ¬OWüpßIé(Ï›b‡'±iSö®¬OÇ}WñBüS½ŠÛryžÏ2°];öCŒ»«g4°=¤§§§§§§Ô{¯À4®8c¼$ƒžÞ]ÿ¼xûÛ§:AëÓmÿ8â£'µC˜˳C<Ѫ!CØóäQÇÆ‘#…ˆØ¨JRc=ÞÊ{Êš¬ÃdûIOOOOOOïÓCƒ„eFó"èé]ñ{Ån縚XŸîú·Å ‘P³„Ûny–ˆž?df²çÉ#¢Ž¹ýú q¯e“~Æc1îV·´léééééééõªiÏgLKžÑþ=½»þj±;`}Ç?'öCRT™ m•'K<ѽ99ìyòˆ¨clW);Êý€ýx? D‰q÷µvÛ*¶Ÿôôôôôôôþzƒ=5Û`ž1Ø»‚žÞ]_"ÞþnÐæ`}ºåï/D¦*Y†­ò¤Š'zqáBö^ˆˆÕc|vâýˆt k6¶`{HOOOOOO°7Hõ¤ž¡Ê'i˜ ‚žÞqŸ/Þ_Wó4õ鮿J¼ókŠÛ-O‚x¢#%%ìyòˆ¨£eÆRDO_ ,Þ_'Ž%©£›í!======}@^û@R?\!zz—üh±Ûy¿×Ó<Ö§«^žZ²p¤Y¼½t!ì–ç~ñŠíÚ•=Ou<6gŽê>Ëñ>EŒî[½Rá°=¤§§§§§§Ô_|0¢ 㱠不wÉ¿'v;[¬Ï ùVbWä]£í?,”çj9ådj*{ž<"ê¸iŠ4§°ïòV/O©ßí!======}@†ÿ¬ùa“9ôô®ø¿Š ½t[Ö§KþGøx}8R9åäæQ£ØóäQÇ–Q£„ˆ(©lµïñbܽi²Bí'======½?r&É3Úuzz·ý}âíoÀú Ž?"Žø4÷êíØ,O®xÅož2…=Ou¦¥ q•ɂɀâÑçV/ß,¶dûIOOOOOOï¯WuÎÂSM‡+¼ÿ‰žÞ%xû;Wý4õéžÿ›ØIÒMg°\ž‘âbî\ö#]_€í!======½MMI“ŸÔçx §wÅoï€K r4°>]ñ‰ CMŠ\žxñŠPRž'Z?vggÏOM=»cGÎ5 m[?Ò4ÚŠ÷ÛÅ Ë2h`ûIOOOOOOï¯‡É „ÇpR„ù =½3~žx|¥êA:ëÓE‹x!¦û˜Zâoy~‚]FÎ¥kǃ‡p¼»fMÃzõ$ÇÇ¿»fÛ§kÛ¬™oÄTÀñ¾M º¥ÚLléééééééöÐIÈczzWý8ñx”õ”õé¤//Ärƒ¤ôVÊsDqåĸ®]ÍúcçÍÿ†žÞ)¿;;[»¸ŒÂÙòZ½ZˆˆNÕs lÆ{/1ºŸS½ ÛCzzzzzzz+ºm*ÌÖcxtË3èéö?AQ|ïîÎú †$^ˆ'M'WVž«Ä†ýûsê>ZOÍ`ºÉ« Ë(þ²`pÆ!ÚLã½™ÝïlééééééémzœV'o¸8ùÁë//ýY7zAOï¼ÿ@¼ým °>ƒæ;Š×â5õZ.O±x–-£FŸŸ×ý¥þ·ª*Wߟ>½&5ƒÙk~jª³å¹Ç|EuV»ñ~Üׇ:¡úq¶‡ôôôôôôôVßî°>ƒæˆ]‘OÅmuý/Ïlñ,·LZë‹ù¯ÏÊš–œüKE“D”7LÍ _=a¸á¥òTç3 «ÍxClfªÇsÙÒÓÓÓÓÓÓÛñÚï^#Þ? z¾AOï’H¼­OWÍh`}ºè¿»"ÑÀiU‡ÇzyFˆWü‰¹sÍúcçý~^mÇWV÷úòRR~«¬tüýéCÓï§\^7qX½Õ¥#åY5dˆ˜„öãý ñs¥Õ„6ÛCzzzzzzzëþÒ<ÌÓ&×'B¨gDÐÓ»â¯ï€g«§ ³>Ý󯋢­6#õòtOôúÊ•>{hþäÛ³æKÓÓ½ ³0-íòŠZ)}p¼ÏÔ _»³³Ý(Ov¯^rVûñ~³8Œ8`{HOOOOOOoßC‡¼]è³J*ôôîùRñξ`}Ç?#vEÒÔ“«í”§¡xÅ¿)-õÙ‹3[oÇŸ¯ªZmô`yõ!µRú y?S3x§)u¶d´k+ëÓ ?S¼7êæo[+ϭ⌆ì^½Î›äíþצ¿>+ þ½î˜>=塎÷35ÃüÔTWËsxÍiŽœù¾n"~Ƽn#ØÒÓÓÓÓÓÓ[öðNyZ=gRŸ@Ò;Í=½³þ$œÐ+GëÓU/ï:ùˆ®+b­<ÛäÜŸC‡ …Ï›ü“}_U½¥¥üRå¾Y³‚Pú xÿS3¸Zž. 0|_)ÿV?©'=²=¤§§§§§§·æk¦bŽIœÖÞsxèé]òGÅçÛÖgÐ|7±7ò“•Z–g‘x–+Ç?ož3Ïð™°S^³±¥®ò±9s‚PzWýn¿S3¸]ž{sr„2L†ßׯùÚ¹–í!======½#&ƒ -NKƒôôvý?Ä;à®57Ù¬O×½<¹úC£…âÊ3Q<ËÞY³„IæúÛqRz ¾hèPÆêEEí/(Byè]òþ§fBy®œ0ÁŸ$¬vâýQqBIn‚ß×Ä»`{HOOOOOOá…¼U&=½~³x¼ÊëQëÓUÿ¼x!zôv¬”ç_<¹wçÝUóó¡±ÿ¿ŠŠ©={ú3ÖТAƒC«W»]z½Ÿ©«S3¸Zþ‘: …Ùg²<2 xÌ—£½ÛOzzzzzzz ^Ûy3_áÑä{ §wÖŠwÀU^‹‡YŸ®ú{Å 1Vœ\íyÞÏÒ¼Ay@ïÅíÂduûþ?ååãºuóg¬!®Q£÷‹‹Ý.½#þ°©vgg³üÝZµ óOÝ—½…x—ÓœÞ_ÙÒÓÓÓÓÓÓÛô—Nª„÷œ“Ñ zz‡½œðnf}ºè¯—NÌU¯a±\žų$ÇÇûœ‹~^}¸çÏìØ!?j¾üJlÚôèºun—‡Þ¦?`j† •¿ILŒPž£pàûº‹ø‘_º4ŒÈöžžžžžžÞ®‡¡0ßÇÂCOï’—WK?ãuÌútÕ¯/ÄziŸÑʳWh×­Ûy1—žaÒ~÷ü©²²íÚù3ÖбE‹/6nt»<ô–½Ÿ©7.¦ffùO—• åQŒ“°ï ÅO}T=_‰í!======½eÓ&k2½Ó9˜ý=½ƒ¾xü¦:GëÓ=?G¼WŽ”çJñ,ýû_0z,<4vÛÿ°m[ŸÖ­ýkè{|óæP+?ýù]»NïØ‘•”ägj† —ÿõk…"%TÇxÿDüÔQÀI£ ,l?ééééééé-xx-«ðh¦=hòFžÖ®Ð §wÌŸ¢Ä›à¯tÓrXŸ.ù1â…Øk’W6Ðò¬ϲuôhÃGÄÌsìÁß¼¹Gl¬?c }Z·>±uk¨•?Âý×¥¥©‰‰þ\¾{²³ƒ_þ—/ŠÔ×+Iåxÿ§8¨#x?@OOOOOOï˜Çi5º¼ã´Á,MwÒ“0ªî€YŸîú^âµxp¤<9âYn™:Õ°ov^—WOXï†ÿbÓ¦N-ZøÓYÐ¶í©²²P+ÄúwŠŠÚ7oîÏ…›ŸšZ+å`öl¡Tã«s£Ø‰÷‡Ä>¼ §§§§§§wÌC7íA“=Ò£Ï'IOï¸E|ÔÖ¹fÚ0ëÓu/?²GýØÓry†‹gyjÞ¼ó&ùùåN]ü±õë›6õ§Ë:¢cdzÕëüC§üèŸ/,lZ¿¾?—ìbj†Z)ÿµ“& [ ]²d%Þ¯›Ùð~€žžžžžžÞ1¯I ¯–ÐRÐÓ»á÷ù~ÔÆú †ÿÑWOì[¯ÇžvÊÓY<Ë+Wžä°áឯ¸8®qc:®ãºuû¹¼<ÔÊQþ®3¢=.–aj† •ýˆBÙ6Ö$©±ïkÅ_ÞÐÓÓÿï;P~X?ôôôy˜hÕŸõCôôÎú›Ä;àlõœ^Ö§{þˆøÌ³YõÞöËÓ@¼âßlÞ,ì(çØ Žÿ÷êÕ-4ð§û:µgÏÿUT„Zù#ÁŸ¯ªÚ:z4ü~í®NÍP+åŸÓ¯ŸP¶ëM[ŠÇYâÇ¿¼ §§WýùG(w÷é© 7Cù'ð½W¶yÖ'==½¡‡>©ƒQ†IÃí+èéó[Åþí ¯qtÖ§«þ%y?…êǪ6Ëó¹x–hç|U•ÏÇÅÄÎ[ükË—7‰‰ñ§››’ò[ee¨•¿nûÿ”—çõíëÿ(ÚaÃj·ücºtŠ÷ 6ó•x&ÖÀCêlÒléé#Ù T‰â>5)À|àZ(/_{ †²>ééé/þ÷â ɤíOzý%=½“~‘x\®0c}ºååtqéêŒt–Ëóšx–öÍ›Ÿ7ß ÐÿéAð/-^Ü :ÚŸ~ì´´ßt£'µ^þºê¿ßºud§Nþ2\=qb­—?9>^( ²ïÅJx¼ §§÷Vð«;0 ¨ž†ò9Ûzzúê 5½8ÝÏh2LzèéÝðYâ·×Æ‹‡YŸÎûÄ©%³µ Ëó¸x¹‡´oïg÷ìB€Ý97ü_ êEEùs6=9ùøæÍ¡Vþºç®[çç.¤DG?’Ÿ å—WâQÍK´ï§ ÈÓo>Q½9ÛCzúˆóf8ójL¶ôIXÿôôußC·îB9m°…GóÖôôÎú4ñëêiõâÖ§{¾T¼«U¹ ¬—çfq8cfïÞ=¾à3dÇýãsæDù—n0¶Q£ssC­üuÉ¿²lY\#ÅÅ5jôʲe¡PþŸËË增0ÎS@¼ß?8¥zC¶‡ôô‘âOB¹ w_-1À:`ð6pR5K‹×‹ž¾nzm~)£ ³·£§wÌ·¿Ÿþ%Íh`}:é Å Q%fõ¿<[ų v³úï›5KQ?ï·²{õ:î•í’«œòûòóý\É Glì±uëB¤üÇÖ¯ŠÚªf²õxÉ÷Âléé#ˇr еðj V·¯AùA—OŽ×‹ž¾xè–UxŒ`èß—žÞ1 ;_ÿ6³>÷“Ä q·ñ­€Ë#g\9aB8v}ï˜>Ýÿ{¬‹S84à ¿zâDÿÇzFvêôýÖ­¡Sþ——.J›¬ÝÂJ¼ß'WÀöž>rüGÀ: BåUè7@9å¸vt•×—ž>,=NQø9hAOï€ÿXüú©oð¨õé–ï/^‹gT½ëå™ žå¾Y³ÎØ ‘ãú¬¬€n­.OmàaçøqûöÜ”ÿ«=¯oßÿ”—‡ÔGx$?_(p`?Þ¯g4äLš`{HO_ýkPæõÒ/Hr+€?פ–äõ¥§3Ýë“FzŒÞˆžÞ1ÿªxÜÑàQëÓ-Ÿ(~÷¿¡}‹å‘;…/ßNoå¸qÝN™Mmàáçq`ñâöÍ›û_á[Fòsû`7Nž,”yŽv ÁJ¼‰Õ²^5ÐÀöž¾ú' d \_€i@ð”cl¯èéÃÄ_ÌÿTóç j|‚žÞqÿ˜øí2Øë…õéª?Å×8Rž8ñ,®]Ö]ßÒôô@o¡8µÁÂñߊŠMééþ/—ˆòxîš1#4?ËæQ£„’¯«~šg'Þ³Åʹ¡zg ¶‡ôôuÌŸ€r ”dÔ©W ¬î‡òNMóÅßzúÐò0Y\a8BXŒAOoÝß"Îh˜f<£õé¼ÿX¼ TÛb[/Ï øèžÝ¹3ÜûÀEC‡zÛÄ© ï§&&ú_½Më×¾°0d?NAiÑÒU&É ŠÇAbýì3žÉö“ž>ŒýgPÊ Ä;ѱŸÔ£ÇcsæÜ4eÊ¢RýO»œWS`8°¸ÊëP~øû@O ^ÈÑ \|Âi¾ƒžÞ_&~,7ÎÑÀútÞ¿"^¯5,¶Êó®x– Ôžðƒ¹¹±~ï³È© 7OÐmn»fÍÞ)* åO4¾{w¡ü÷¯ ,Þå}^ØÒÓ×Êb ¡í|ýèèżW\¬i²~©¬ü÷êÕwgg¯2dxÇŽÍêשq‡À@`1pð(ß±}£§¯%ËS¦ÕÃú}TÿDOï _"~a쨙Ãút×?îï[åyAœÑÐ+!¡Îô‡oÞ<£W/Nmp¶J'õèP}¦&&~UZâŸ+¥uká#<§= ñ~J”_;û°=¤§o¿ÈÛ}õ¸FÊ22ŽoÙâg#v¤¤äÙ³7Œ9¶k×V †Ô¸CИ \ å9àké!-ßèéôÐýü¥NÝ)Ý–¶Fé%ééðSÄoˆÛT7Ù¬Oý­~¬a±_ž=âåÎìÖ­Žõ˜=›S9žš7/®qã@§ûžÞ±#ô?ZœøòŽÁŒ†ÀâýˆÚ v“a{HONþ'àOPÒœè–'ÅÅÝ6mÚ9{k¿*-}bîܲŒŒ)={¶mÖ,ÔRÙ°!Œ>æÁ+„Ó°ï»Ä†yÛCzú0òÿ€2 °ß;oV¿þú#>߸±Ö÷*~}åÊ;¦O_>hÐàöíÇĄԸC#`(°¸Ê«P~Ðå«âï'=½™‡æ¯N Wh~†žÞIÿi I‹Û.%f}:ï‹•ÿ¸j–õò ÏòÔ¼yu¾ÿl-kC¤ 7|²aÃÈNªŸh§*33ìê特s¥ÉÌ—FlÅû ±ÞJÕ3ØÒÓ‡¦?å`¤çŽ-Z\7iÒɲ²ó»v}´n]~ß¾•ãÆ=6gΑ’’Z_qö[UÕá5köΚU2|ø¨ÎC-µd= X\üÊ7l?ééÍ=ô†?©¢ §wÄ¿x+ßxÌ`cyÖ§]ßQ¬öW½r4Ø)Üw|sÕªÙ=ÁÚÔ†HnøvË–ë³²Ý/­GlìëAœúëàqë4i.Ñ,À~¼O«î¦šIlééCÑüJw'úÉÛµ{(7×{4áá¼´ÿ?†R ÄÚï+Ê´ää¿/Y¢o‚vŒãs²Xr||NïÞeåæ¾STôŸòòÚ©ß²åÙ *ÇËîÕ«sË–¡¶¥E`*°Ê#ÀQõƒ_Æ#}¤yîEa4ba¸—&=½þ-(VÎU?è:À¬ þKq KpÒk ·åò|æënÆ|×uujCÝnø¥²ò¹ÂÂy©©M,­ËkÜ8Ü—Û,(m¼³Ë‰ö-A¬Ã× ²:±ý¤¯Ëþm(¥ÀÅéu÷…êïÿÀ ¾í~oÃzõV üáÚµfMЬ>}}O¢ôˆžœ¼eÔ¨ûfÍzkÕª³ö¶Ã´sœ,+;°hѵ“&Íé×/9>>*ð¡jW_q@&°Ø ¼åÛ[úHò¸<ü`¸ Ãl|‚žÞq¿JKxà¯'¬Okþ q ¡®†­•çUù9@󿑹±‚© á;ÜðúÊ•ÅÆ%ؘ;©G:0&+)IøŒ÷ES@ñþ|$Âù’í'}døÏ[¡hvÊÍ ½ßÿg Œw¢‹›Ð¤IŸqßoÝ*7A½XA (]Z¶œœ”´qäÈ?Íœù¯+N••ÕJ‹úsyù«Ë—ß2uêâÒÚ¶mRãMÀ*àà_P~Ô=ÂaüÒ×%ݲ éÞ?OOï¸ÿXe5‘ò,àCð÷ÙºV쌤Mg°PžÇij íÐ!b7q´9µábr¯)={®>ü–©S_X¸ð“ BsèáèºuåcǺc¥6/ltôÍS§ÖKß?1Qø¤Ïz}[‹÷ÃbÐ5ØÒ×mÿ”}ÀL Æ$·ßgªç̵Yþ½PRœèÍöNH¸';ÛŸ¿TVƸ¶»d‡æÍ'tï¾vøð»fÌxeÙ²·o¯•Is‡V¯Þ““S4thzçÎÍ4©q‡À`!ðG(ƒò­zØ‹ñKî&CÒV™ôô®úƒÀpKíuàJ(?¬O þn±n'TתÍòÜ$ž%§wïˆh¸xìËÏOŽwê&&*ªg\\m>œÝ¹óHIÉó……w͘±=#cAÿþ£»téâÄzÚÔÄÄ÷Š‹ëÌEoÓ´©ðaßðJÂj-ÞŸzÚ~zúõV>ë¤){A*ÿ×PrhöÇuë¶¿ ÀÿöçHII0ûÕ‰M›ŽíÚµhèÐÛ¦Mûû’%>g[¸q|°víC¹¹›ÒÓÇuëgc.¡¯( \ e?ðÛgú0÷ÐCh’:èö´ §†¿ ˆ³ÔL÷ž3Úå˜õ/û*±V ÔUj¹<[Ä>ÏšaÃ"| áü®]¿VV>˜›ëàpƒ~mm“˜˜øÆ;µh‘ŸÖ¶íˆŽ3»u›–œœ×·ï´´•C†l9²,#ãŠñãÿ8yò3fÜ7kÖ£sæü¥ à¥Å‹ÿµbÅá5kŽ­_ÿuiéOÛ·ÿ§¼ü›Í›®XñH~þ5' :=9¹b¢KwoŠ¢l9ò¿µÝÙË-¯(þJ½%„…x—ÇÇÙ~zúPóoePºø¿ƒ.dË :a„õ=£¢ôïÿvQQ MÐcsæÔn×:¾qãQ;¯<ø¦)S,ZüÕp_•–>9oÞŽ1c¦öìÙ¾yóPK-Ù˜ì„ò”cêy»ŒwúÐ÷Ú©æ§Læ™M §wÏ,¬eõ™ \l‘YŸ~ú"±>K½*ÓNy ij\5a‚3ÜޝöÍ›X¼¸Ž]èo6o–²¸ÌÏ 8ÞËÅѽó¥l?éÃËÜ ÅÚŒÈC¨ûá“À.(v²´lØpó¨Q_•–Zk‚*Ç µ¦¾UÆ#:v\:pà YYÏ~¹iS0ÛäÛ¶=_Xxå„ ¹))=bcE ©ÊI&¥ÀÀ»Fë…Ù>Ї”7¾Ã0z °ƒžÞ=ÿO(-5Ç̀로4žÒÃú×úYbe^o4IÄBy2ųÜ?{6‡8Ü`øÊMI©•õ½no­Z%|êΗlÅû±b·Aa{HÖþ”G€l«[e{¦¹üAe£Ì][µºiÊ›;ûæ÷íúí³úõ‡´o¿0-횉ÿ¼`Á§6mƒª3;vücéÒ'O.LKëÛ¦M=×òYXfFk€{ ¼œd{Nb§ŒÆ$N©²Oiþ‰ž>Øþ”V–Zá~ÀÕ ëÓØ§‹Õø WŽ;å‘7Ñz©Î=¯æpƒý×öíÊÍ­«÷Ù ¤ô¨êεxŸ$Vï­ªÐf{HNþ°háD;Ó Á¾~Øê] €a:<:gŽ# wŽ®[÷p^ÞŽ1cfõéÓ;!!&Ä:Òf¯Æ11Ú¶ŸšzÅøñOÍ›wtݺà¤úoEÅ›«VÝ9cÆŠÁƒ‡´oßØÒ®Ì%À-ÀËPNèæÄ±=¡²‡á*‹ËCêuƃôôÁñŸ¾öi3{V§•f}šùò€vZ”ÅòÈ; |´n‡8ÜpñÕ#6vçØ±Gëú¯Ä]3f•0£fÀz¼ËÏ+Ÿ®¾E`{H.þ”m¶“è_/ªï’Ý+ÿ÷P[Ͱ“Ó»÷«Ë—»ºGÃ{ÅÅûòóËÇŽÍMIIiÝ:Ô¶‡4{5ˆŽîצM~ß¾•ãÆ=6gΑ’’_Üzøµ²òý’’fÏ^7bDF—.­6 ©:©ôæ×/B9îõší }p¼ö&Fóùâ;ê÷̤§¯-Hµ:Áìf('u{űþ/šfbí1šfhyNø&:»s'"|¸!¡I“5ÆýkÅŠ¹ åcÇ µ±\7ÛB¼Ë£{oª6”a{Hºþ3(7Ã\èŒe{ïÕƒn.}ÞƒP,ìcÜ8&¦hèÐׯ¯•/Ö­{bîÜ]™™sûõ럘jñÍ^1QQ½fõé³c̘‡óò‚3lýɆ Ι³mô謤$yG¡à¿ 0 ¨žòï‡éÝ÷ši™ÚåFãôôµìOB¹еÔÀ€èòK³þ¿ó5p¢¦Ãc½<‡Å³´lØã;ÜÐ8&f^jêþ‚‚_‚µûf­lçþÝÖ­ïX¼ø¡ÜÜ'OÞ6ztJëÖBµìÔÎà 8Þ¿÷Úß°=¤mÿ=”½P¦Ž?X\ |fp¯ìÖç½ Jƒ Ù¶Y³+'L© 5¿UU}¼~ý3óç_5aBAÿþƒÚµkV¿~èËÌé×/øuu|Ë–¿TefæôîíÈîÎξÚS€mP>T¯eûCïˆÇ)Ý\Ã4’^oJOþc(ùÖ&K/´aÑõùŽXc±€#åyNœ—÷Úòå_—–mg2ÿ70;¶~ý«Ë—?9oÞ3fTef š›’’Ñ¥Kï„„øÆkëÎø WÎpkñ~‡Úl¿?=½Sþcà(ƒ]èGîòQþ ÜŸl<‰uÉðá'2|ºaÃÌÞ½ËÆŒy8/ï½ââp_YöÝÖ­/-^|ËÔ©«† ÉèÒ¥u“&ÁlN?ù›_*+ß)*Ú““³fذôNÜ^ l>Øþл硙äpJõ¿ÚŸ<¥›TCO"þ#(9–šÚ(`5ðÉõyµ¼²ñRåØ-Ïjñ,Û328:„ã?åå?lÛöUiéGëÖ½STtpÅŠ‹ÿyÁ‚}ùù{gͺ}úô²²vefnÏÈX?bÄŠÁƒ ÓÒf§¤LíÙsl×®Ã;v쟘Ø3.®c‹q7‰‰ñ(JLTT×V­Fwé² ÿíwΘñ\aáû%%!²âÇ7o~»¨è…… ïŸ=ûš‰7µhÀ€ÉIIƒÚµëÔ¢E(OýøÔk2‘µxß.öqÛ~zz›þ{(÷S\HÁÐø”Okve³[þï» |¤ÚSòïƒ,s›¦MŸ/,¼Ü|=1w®f.XjbâÜ~ý®?þ™ùó?ݰ!Ôm=~ܾýå¥Kï˜>½xذÌnÝÚ5kæR[vÃ4¿UU}´nÝÃyy¥éé£:wvv•Äí^Col¯èÝóPOxðí©Í0IO²þY ÉR³Ûø“ñÞ°QŸëÄÊY[= c³<ÙòrôiÓ8 À#ÐãTYÙÑuë^Y¶ìñ¹soŸ>}ǘ1«‡’2ªsçäøøZŸ¬këÎX;—ÕJ¼/O±C·‰ß/ôAó'¡¼,ÏËßX ¼¥_°[þ¡” €Æ Ž´ï¿;ð6©GãêÕdU™™>ó8 nß~Ñ€×ge=_XøuiihÒ_[¾üžììõ#FLêÑ£S‹Š¢Øÿ­èÓºu˜VÈ—›6mÏȈsbbÝÅU/¨ÇØ^Ñ»ê¡[w¡èF,<§Œ'EÐÓ‡¢?¥еîE:ðºÁyë~}ΫåJ¯ÅNy†Šgyzþ|v›yxÿ­¨øº´ôÐêÕÏî5ëÚI“6¥§¦¥e%% hÛ¶CóæõÂ6 ¦Ÿ)ëìÇ»ÜM¹ÓèÑ¿_è]õoB)Ú;/͹À³Úù½vËÿ*”@}u>éƒÆy‹.ýï7À‚ÀŸ·_3q¢¾ ÌëÛ7ÐzhÙ°az§N+¾yêÔ¿-YòÝÖ­u Ïî+WÞ›“Sšž>µgÏn­Zyz˜’vü•eËrSR¢H l>ˆÈû[úÚõÐŒI¨G)´yôOOšþ}`ª¥æ¸°øÆ(/N®Ïqbì©ÎÎm³¾Uè%-òk€:+¾µxï%žâYÕ£-~¿Ð»èדz@&°Ê÷NÄËå¿? åa(£LNšYs‡ }ÿ— t ð#ôJH8´zµa#ÙGÜþÖß ›MšŒíÚµxذ»fÌxuùò“eeáþÝñsyù¡Õ«˜={ÛèÑÙ½zõŒ‹óÙß9vl}º=99imÛ: ©ÀmÀ÷Ú§Ðl¯èƒäá5çA?;Âã=#â´vŽ=}¨û'ÿÊ¿øjܯžT·ë³XûgO\9¯Ññ0Ù€€‡Ÿ™ ¾Ü´é­U«öÜ›“sÍĉFŽ\пÿÄ=ÒÚ¶mß¼yt(m뚯É^3´-Ç{sñïhgBòû…Þaÿ-°Jàøì£þÀ•P>­žøãTù¿‚r”N¾Îþ´÷Ï'¡\ ¥^€Ÿ¢0-Í,Í/••.e騢EVRÒÆ‘#ïÍÉykÕªsá¿»ð+*¯Yóp^ÞŽ1cfõéÓ;!ASuäçGÔ*‰(`ð¼ºÈöŠ>ø†Ë-Ni‡..¿¯‡ž>¼ü÷ÀV( ,µÔã€C^I"ëp}Ɖõð¶zëkåùD~*îI­"çø­ªêÇíÛ””ü}É’‡óòn™:uǘ1+žÙ»÷ÈN’ââZFüd;g¾ÀXà&u; ñþ¯l÷ßEFûF|Ê~ Àê†P«°8äN•ÿ”U€Ÿ¼à¤×3½£PÆøAZ4h°Oìý¾W\œfGQ”î±±3zõÚž‘ñp^Þá5k.îyÖÇ/••GJJ›3§rܸü¾}®[9«$Ö˜,§g{EdÝ›®ÇÐç{ §˜`5[)ð­Q¾“:S??ÂÇzÇoÌw÷¿<¯øzÀÂ|ˆçvîübÓ¦7V®üó‚š9óª Ö1/5u|÷‰m›5‹âd«¯@{ ?0˜”îž„ò*”Ä= ñþ†8Ðg”rœßô6ýA`#ÐÖéØiÌþ¬ÊLìXùŸ&¾ åmÕƒB‰ ðgGvêôÙÆrSüp^^mµTÑOï„„Ü””ŠqãŸ;÷£uë~ ó5Cvꟃ«$ú·ßÕéûUú°óš§Ê)í ±Á’ zú0õ@éh5‹õ#OëHý| ~ö&^Sí”çQñ.nX‡¼çÎd„Û¶½_RòÒâÅçåÝ4eJYFÆòAƒ²{õÞ±c÷ØØæ p8ÀòTÕX '0È–Û€?/ByÊ·êœÌAˆ÷'}­Ýå÷½Sþ(p ætXÅ=PNÀùûÕo[}å1^‰Àç@Q€?åQ”íþôÛË22Bh4:ºbâüÔÔ«&Løó‚>GIxø\%±môh÷’x.èß/ôôþx˜ÏÐTxNIó%èéÃÀ lb,µæYÀa îÕÏßÄ!€n€#å¹Q¬Ûœ>}xçáHvîÏ6n|}åÊg,¸';ûŠñã×>·_¿ÌnÝú¶iÓ¦iSNF°üjtÒ€‰À|`p”»§¡¼å˜ô[kñ~‹¯ü¾ ·é¿…²ÊÀñ–% ¸øB{óêLù?JXûyôš7yéR?Ûó™½{‡r“Ø´~ý¡:,8ð†¬¬.<¾y3¿‚ý9þéÊ* ¶Wô!êa2&¡óˆIONþ”qVg>o¾×ÎpïúyXüÈÃuéµ­•§TÎ(6Œ÷òñkeåw[·¾[\|`ñâ‡óònœ9o^Uff^ß¾}Z·Ž ùÝ|c5JïÜyå!·N›ö¥KOlÛÆ/n—ö’¨^%¶Wô!ð˜ Zè=}Øû½PÚYjâ»OŸ",ëçbod¦Aº8+å‘÷¿Úh ñH›ŒðɆ W¬xzþü»³³wef–ß·ïØ®]SZ·nݤ‰…Ãùºøj t“€`p”ÝPžrÊÇ¿Æu¤=œ/VKÀï ú@ýëPÖ‰Ni+ °f‡#çËÿ#”{¡ ­¥&¨Q½z·OŸnó;â‡×¬y07wëèÑÓ““»µjú_ ‰M›fvë¶vøð»³³®XqzÇ®’°9&®ÞK‚í}¨{èþV1šü ß$“ž¾.øo õ,µøÓ÷:P?òcÏU5½[åÉ+óÙ³ëöd„ã[¶^³æ¯‹=˜›ûÇÉ“·Ž½xÀ€©={iß¾KË–êÕãp€µW= è Œf+Pn@9 å{mw:‚Ú·1bÕÝ£}C~_Лú \ ôq!C°Ê í³2ÇÊÿ” (&§ ´sŸš˜x¤¤Ä¥Ä½o¬\¹''gÃÈ‘{ôhß¼yè·Ø[¶œœ”Tšž~߬Y‡V¯þ¹¼œ«$ü\%±øÀ¡û1zú yU7é¤é°„bxzúºá_Ò­=¦*.Ý!…qý,ôñØSq¤<òbÓ¿-Yò[ y CÆŸÙ±ããõë_Y¾üÉyóîœ1£*3sͰa¹))]ºôNHˆoÜXád«¯&@`00(6×{ < å_À'^+ؾéÿ$Öís ¿/èUþ(»LR0 ®½”‚Á­ò¿,jw¯Ý¢¡CÿcÔ—véûèTYÙ+Ë–Ý1}zÑСcºvMhÒ$Ä[x¢$ÅÅÍìÝ»l̘‡óòÞ+.þ¥²2¤¾ß-øŸËËÿäð* å;°¿F–Fs!„uzúºêï†ÒÚÒ×@ð¬6Id8ÕÏ$ñÓÝi:¢XyZ‰g Ù=®©¬<¾yó;EE/,\xÿìÙ×gem5jÑ€““’µkשE‹†œŒ`ãafk ä«r(·BÙåoPÞSå™g{eÅËŒwµÕËú¤¿ô‡Ÿ <e.ÐÈé¨ï”‡Mç~;Pþ“Àã¾æÐa"C|ãÆ)(¨õ¯°Û¶X¼ø¦)S–4¢cÇV †ú÷BTTJëÖy}ûVef>9o^xmoáÎ* ¶Wôaìq ž“ÆZû“'kqzúºé¿‚²°–pi6ð‘×Y¨~ú‹Ÿë)ãÞH`åùÎWíÛ¹ÓÏç ¿øüá7_ÏŽ®[÷ʲeÏ{ûôéãÆ­:tvJÊè.]’ããã5âd˯f@W`(0X”×@Ùå/PÞ>Sÿ ±ýqÜé«×ôCx¶Wô®úƒPJßLÁŸ‰ß‹€ªOäRù¿r=”î.´fÞŒïÞÝ{—¾¿¬ù¯JK÷^;iRaZÚ víšÄÄ„ò÷ÈÌÞ½ƒ\?Öü?—-›íð* ¶ÏôuÁë»—©Çägèé븰–2ª pð£Áú¥þ¼òô¾é>Ž…ò¼#> jÕ°¡÷ÿ«¨øº´ôÐêÕÏÞ7kÖµ“&mJO/LKËJJØ®]‡æÍDGs8Àrf„D /0ÈŠ€ (·ÿ€r¤¦Ëö¤ÖüA1èÚ¬OúËþ(»€^N7õÉÀýP~¸4™Ö­ò¿ ¥p#EA #Íõ¢¢®œ0á·ªªÐéûô¯_ÿÔ¼y?~N¿~}Û´©JߌecƄژ‚÷~./ÿÓÌ™Nï%¡°½¢¯3Þ0­ˆOR¡§+”8K_½kr‡Áç= Ežúÿ¹ñÖ¸•g¿xŠ>­[[˜£øÓöí®]ûòҥ͙sÛ´i;ÇŽ]9dHNŸ>é;'ÇLJþÑP~µºÀiÀb`3”ë ìöCy ÊWª´mlOBÔ?*^âë“þk(wAxwÚçkp”/M9öy_€2Ã…—GTzõˆ}sÕª:½øHIɾüücÆäôîïȃzk¯‡óò"o/ ¶WôuÇC=áÁc´ ¦÷¸…‡ž>rüÀb«w0sc^ÏpBöó~ìëy”#åÙ-žeB÷ ÿ­¨ørÓ¦·V­Ú_P°''皉7Œ¹ ÿ‰=z¤µmÛ¾yóÐßQ˜‘FžÂ0(Ÿ÷÷k˜ 1¾Ÿf Ýbcϯ\i½dµ[Á>øgfÿþú§*]¢D‡:u¦¶k÷ÈÀLzaåÊ{ÙÙ:'¼çdÁ¾`ãÆ¯æÎ}~ĈE }5òJNA›š5ƒ¤¿×׬ç•,‰ÑEYj¾R|$ð¸Ê»pP¼â#”¿ÓÌî3Ï„‹öÑqAÑßçu#†WÚ3J9 ÜÓ­ Í¡'Œ†y°¶ÂäsääÏ ?ŠZ¾—îxÛ¥-òªìVü5äE¤¯·%ºÁ6¸æ$†Ö»ý-€½H/ßOÂFCé,"ëz÷þ[7 Áz?||›6F›T6&¦sݺ3:tx|Р§O¿²zµ;1ÿ†öó}Çç®[wxÖ¬mC‡ÎíÔ©[llÅRF}8LhÛ6úûÚØ±•Œ7^3Kâ´†>¿š¯Î’ùCoê1Sž;EËÅ éoºn›gÅbxØž®ïG( ±ÐÁTH…‡‘íð|‡œ+FP÷£â½Ã7ÑŸ«ñ¾|>²Æû@‚¡ l@~wسòQ¯"C}¿LÑF+VÔ­PáÈœ9÷´v…差酲¡J–LˆÕ±ã–!C>›9óÚš5ŽËã{nË ø™¿²zõGÓ§?6hÐôöí;Ö©S¦„ µÍ줤À¶ÿâªU›zZ/Õ:KBÍWŠ4gw¬$êŠW|Dóùð8b.%±E‚§¿óu[»AëÑh¢=±aíDˆ‚j½` ¤ÀFØ{‘CHܰ1—º¿ï^‘i'?¦ìü×È"¨æí)®:̃£V/—¾îïO°ÊúË l4cTË–·7lp¶U~Ok}ûwV–4Œ+•*Õ½~ýy;?=lØáY³n¬[çN{t¶úýÆßËÎ>›šz`ʔ줤 mÛ¶®YÓÎD¦L Tûïeg¿4jT¹ó™:²$Ô|¥øHæ±ûßwœücê…âáüY˜`6H~\±÷ü¦¿#u›ú´Uê„'í‰ e?BYh`0LƒUðì@>€ïà¼U7Õý¢ø á/êËG‰Ô*{†É€f>X‚·|«Å’¯ûû ñA¹Mg‡QQÉÒ%J<;|¸æòÕÙ>ùýÿþ¾l™ßžYUË”éÕ°á‚®]Ÿ>üÈœ97ׯ×× p§ýþáÿ›™yréÒ7'LØØ·ïèV­.­ZöœMMíݰ¡'Y+Šœ¹j¾R|„óؽ"k)FjÇE(^ñŠÿ–O–feº_²Oj @ûtùvѓғöœ÷ßK£™`„Ð úÀXXéÈ3ð&Fr\5þüü×®ªÉ({†žGz{{VèÏ ×¼1ÿ»Éç"Ï"q~œüK‚Qç65kþfUmñž“ýpÍmó·&N à“®F¹r‰/NHxaäÈ£sçæmØ`´ýÂßÍÊÚ6thiW9úY¹ö5}Ô|¥øÈåï?Eì ;×…Ã~â¯øâ_æÁf(gê±Ô¾³}™ósûõöGÏÛs4poWå t¡0V£°>„ãÈy¸£ Æ¿âCžß«{_teÏÐåów Ùx}—GsHƒÓ6_êóþþ¬„*þ}4Ô£i )]ºü•‘qOk?Üú—ÎþצÄÄ r²×._>©I“eÝ»o5ê›ùó拉é·ßhC‘?¹ti×zõLgI|æ÷%Å+>ÌxœWÅt­÷ xÅ+þÁçdŒÙMõEp]7ÇÉwí×Oä>ëD£ÁP{ÞòMDC4Ô„Öãa¤ÃsÈÛÈ8‰ÜÔ«ú«Æ³âÙB÷¦cÓ«ì*üWȬÉkB |­«ê‹þFÆC´Ø% ÑðÃ2eÞŸ:U__P§lÁý’[·ò$ÁØŠ5k¶¢GcÆOIùǦMžô7´øÿff>™|r ~D>Av#OÁ:¤½î͵”=CˆÏMfŸ,ú càm$ß¿ã!Ù…¤Q}㱇IMš\_»ÖqcüžnÚ¿ãçW®Ü7yrVÿþãÛ´qT= ΣA¥JC›7_ݫ׮ää.üWzºûý5jŸò?,\ØÆxA*ð ’[øÚ¦æ+Å+^›Ç.ÂáA䃦»Â.ÌXñŠW¼# Ò]I¾;;zÃöáI>lÿº.€šxg~X£µ§TÚB"L„Å ÏÃ;ÈärK«|šoŠ@þOÈA#oÂ3,„qm –©yæQu…yéáíÕ£zÁsðgÑû¢ßú{ É€:X3[Œ×¥Ž¶X6'%ÝËÎÖÜ¿çï Óäÿ“™™³dÉÞ ÒúöÓªU³jÕ¢,– ÷;ˆH“*U†ÇÅ­íÝûµqã~Y¼ø¯Œ 7ûkÔ>þáÿÊÈØ”˜mÜòÃá¼íÊJÍWŠW¼&ÕŸiK:êL*^ñŠw‡?‰ 7Ø™Z”IáëöèJÖÈ+öyyv#ÁpÙf‘£Æâ#—ÏCÎ ß û‘íÈfXS` t„úÆÓÈÝ<^³×…Q×+ˆøÛÈ[Èh(éíëÞ2?¬2ÉýÖßãÈ,( r,Ô7ø'«T9–’¢“çïøÃ=]]—üÿefþ¼xñãÆ­ëÓgd\\“*U,"Aîzˆ²XšW«6ªeË}ûî0!gÉ’ÿdfúÈ>^ç¿KI‰«^ÝD™’×Õü©xÅ»ÍcQLÛýåí¨ Å+^ñzü»H#³RU¯gÌúªý¯èF4 @ÍŠW¼I>."ß#‘]ð²™# šnѱš[Ôõ þ2ß µ`|ˆùüòÒÏK1'~ÙŒÖWž'-íE 4·Ðï9Ù9÷œÿ+#ãÇ… _;vM¯^C›7oX¹²½ë!Úb‰«^=¹uëM‰‰oOœxrÙ²ÿfeùÈ>¦ù§§¯êÕË„g<\rØ)Qó›â¯Ããà°vWhz,¯xÅào"ë̾!õ‡_¬b¼Þþͺß> 5?(^ñÚÿ¼ŽüŸÃ^d¬AR ú@+¨Ü‹sˆº¾ÁÃÿ‘ÆÞ¾Êea,ìCòmUýÓß?‘'¡©—ü ã Ÿ)KgƒR¾dÉׯûŸó šé~ãÿ•ž~|Á‚cƬèÑcP³fõ+U ~¡‡˜¨¨Ö5kNhÛ6«ÿ}“'Ÿ_¹2°ö<2gN“*†½yuá]›b=j~Óã/ ót_ Õü9øù¸Šü„|¯#[‘ È< =¡TEt5~‚9PÙÛ´,†c¶•DüÙß[È‹Æk:hgøÃ(8w°CLœ³´57Q¾ü¡Y³œm’?øùI“tNÒ¬Zµ™;î3æLjê=çò„:ç÷kÆ#sæ<;|ø‚®]{7lX­lÙÎ?oOœègûäoÜ8»S'£í˜7´SÓíÇ&”¿¯¡-­þóÛ5d­O0ºÐç¢æÿHç¹c›«éè±pxP¼âï!ÿ#$šzH—†4äfqLšGíi®û]‡lÜ“êú*>À|.üG·á9$Y ÄC/m¥†ý1ζl­o¾æ‚õÐÐÛ×±Œ‡ýHAÑõÏÁ:¤º7ºSRáw¸ƒ%²£îøŠ0Œ®¡GÄÅÝ\¿Þq“ü;ä˺»›æR½lÙ1­Z=1xð±””ÿEI¸<ÿ=ÝM{ïò¹ëÖž5kÛ°aó:wîÑ A•Òþ“¦=¹l™?û{`Ê”ZåËmd3·ßv!õí_œˆ´ùp—V¡å(›z^D.Ũ—ÂÚ!qG;FBñŠW¼Gü«f+Š7¶µj͵G?Ž05?(ÞOü-ä |ï#/ #©0 C'hàƒRu”€ÚÐá%ûˤƧOø °¼})£Š.⟟"S¼”ýѶvÇò,¿ &ŒÖ ŒÖ“.½mèP—Ë×ÿí\·®™½%ú6j”Ö·ïÇ3f¤¥éœßÍå´økkÖ|:sæ–!CfwêÔ-6¶b)ŸäÅDE=(Báëþæ®_?9>ÞÄýµ n¹ñ~uȉÔhûì‰pžF‹Å¨ç…âï<(oi—na뜰þÁ¢xÅ+Þ‹üud D›zf‚SZé¸n¶ç¦«$Ö›¶gV×Kñæø;È%øùvÓÈZdŒ„îЬ(èTúÚB"Œ‡EŽ<‹¼…|¿ÕPãÓüMx%¼}•ÛÀfälQ@r@ú›o =½Ô£$Øg£ä/[ ŒÁ“”¥ÐÀà_µ¬Qã×%Kî9_¦Úmÿ3==ÚâiÈ”E¤]íÚ‹öN˜peõê{ºŠ÷\URð5yõê¦O|ðà:t©W¯\ŒÜJ­kÖôOûßž8ÑD†HkøÊûë7d¬îyvEÀ|›‹¤!%usOÔóBñ… Î|ÎkZ(^ñŠ÷&éaê±]²Ûöê¾nµ'G×ÑP¹Ø­®—âõøëȯpÞBžE6ÁB }¡5Ô2¨Ê¦Ç£*4‡0 æÂzØ‚¼Ž|‚œ@nZm¾©ñ@þsd¶—ª-Xua)×*QéÏþ^ErˆÇìck6œ°}Uý1QÀ²+,5۹ó¿ŠjFh®TyhÖ,¯ß× *Ušÿüˆ9K–ÜÍÎ6ÔýšŽ>â/¬\ùÁ´i 8­}ûuê”)aØ™6¡m[_·ÿÚš5#ââ ‡ZÀ$Ï~çÆþ~¹†¤º^W¿0&"lçÃwÝËSÏ ÅÛ¤NüC[1ÒYJ†â¯x/óÛ—ãzzzP»B„^{>suNu½Ÿ§‘£°y6Ãr˜¡Äú@9?ÒŽòкÀP˜+àxùù¹Z´)¤ÆgÐò'`­—Vàvc¼W(ÁÈþþ„Ì7®} yÄBrÙAŽ~‡«<>Í•á 0[Q¥té}“';[¦:[ÄÞÛ¼9£_?ŸÎ•J•Ò¼ùC|5wî¿32\¶Çhû}ÁßÍÎ>»bÅ)S0`R|||­Z¥¢]ø|²ú÷÷iû_;¶’ñ¤Ž…Zªz÷Kl…jnŸ3Âr>üIvÛêy¡ø;vwìÖÿ´OÆP¼âï]þ*¤¯æõ@ãíŒÆà´=»uwšû8¬pÔõ 3>9ß#a<ެ†™0 )”SnÏŽRPÚA˜K yy9‚œD l#lÕø !þ<ò$ÒÙÛc&úÃËpþèïû0ØKI °É·Ùø²ÜA. #Ÿ­-<U þUŸF®¬^ý?÷V°v¿IjÒÄoóFLTT·úõWöìy`Ê”[ë×ß3Ò`÷—è¾àÿÎÊúcùò}“'gõï?¾M›Ö5kÆDÙ¼Îì›<ÙGí¹¸jÕÀ¦MMLÑH¾Õ¡y¿ì£1åᜑ÷±àŸo#"†2›.;ÜïêùC~†Û¢åj|ž²Š–Ñþæ"»‘¡f…utŽxx9gÿ¥èo.ò´ñ••³¸ƒñðU±Cͦ=o¯XKaŽÑ¿²X2û÷ÿ;+Ks½ú?çùÿ>ëÔ ÔTW½úœNv%'Ÿ]±ÂtûÅÿ7+ëä²eoMœ¸)11¹uëó+Wz½=w³³_9Ò„„D·Âü½ûå8’döÂÍ-)ùùüS¤¥q \²ù.õþ¡<ÿps°uQˆ]Ò…â¯x?ðȳHUszKð©M v{Vèžd©m9hu½‚Š¿‰üŽ| ï / Y°&B´ƒº>¢‹¨Ã¡ $À0˜ «áqdò!r¹æÆý¥Æóäò ²FBÝÂ`Úìoò 2*x{°ÅB*üPœòÈþžBVÐ<ªÃj8ë»{ÿ‡«ÈTãçl ;Œ{@V®üÍüùî( ê¯xo¬[÷ΤIË»wï\·n”%0µtk•/ŸÜºõ–¡C¿_°à¿V~wÚo´¿!ÁŸIMíݰ¡Q3–…G›ˆûûå<2Ûlx)0~Ó=¨Ìçç‘éfpÑ6Ø^=#“G+ãÂY†ÅÉÿR¼âïþÌ2¹:Îk-‡œŠîŸ?ä´©êzù–σsÈwÈûð ò(¬„0º@#ãªìê°;JC,t€0–ÁfxÙENCm¾®Ÿ†øŸ‘—`.´×Úö¹þþ« ž·a˜I0¼¿‡‘q^ Óh ÏYi”:~釈 {·ÇÀhþýø6m‹Jê¯`ÝÙcÿ›6}6sæ¦ÄÄ~{¥ƒ‰£lLL¿Æ7%&~6sæ?6mºg0F Ôù¿³²¶ ZÚ¸ eb‘ ÀÙøÌE2ÓµºÀaÝó‡Ê|^ÏB%†è›nõ|ŒP[H;'кZ¦â¯x?ó_"ÌéKÁ–âÊvöçï¯û·;l^Õõò9|¯Ád=2FAOhU•À³# jBkè cal‚g‘½È!øµ0£AOoòW‘÷` tc3B~@®Û }«ñé#>Ž!O#Ó Î`ÈU÷÷ìB{2íìhÂy›ä‘@ö÷"’^¨ Gã[lð45~òÉð6Ô6øWëÔù#5õžî ÖGŸ³+VìLNžÓ©S\õ€)á4®Rej»v/ŽyréÒ€ÁwŸÿdf><`€Æ¤;Ç`8m?DmÆç!èâÁ-YÅòóÿdx%5èœV®œzžFf¢…V2†c€„â¯x¿òLåµ3móåî`Ñ :aÐéö¿…œE¾A Û‘‡ ¦Â`è  ´òx   †i #/#o3úÕj|ú“?¼…¬„>ž•# Îþ ax}?º>¬(Öœ ŠþGfxi¾j "×5¤mÚsYmÜwS^‡UÆ“Wôèñ™™.·ÇÿçÆ²ÖCþÖ† ¦LYÙ³gBllÉèÀø™«”)3¬E‹GüzÞ¼¿22|Ú__ó'-jW»¶a À‹ºï39ÈXÜß³‹ˆ!?ÿ¿j¶ÈºGƒ¨ç©â¹ã<‹Û‰ÇBñŠW| ùÏ‘6æ^8àÙÂüsÉCô=Ö×ÒÔÃØþp¹_èq7ò$¬EfÃèM¡²rxvÄ@ˆ‡D‹ yÞ†#Èo6 ê~ þ6rCÆBCï„`ëïqdE‘P¥J0 S w ÑKì oBëZŽA[ãç_B'ƒU³\¹OgΠέø¿22¾š;÷¡†4o^¥t`üÒ%££{4h°¦wï¦M»½aC2ü•‘‘–˜m\ƒsDñ¾ºÆø¼Š¤BI³öL‚ãNdBnþÿéåíñvÖùA=ÞGË!aq !ŠW¼âÎç#"æôÏ»À}Å;ý½åp²çuäW8„ìEžFîz }¡5ÔôA˜tDÑPZ@O ó`²y >AN Ú—>R÷{ò¿#¯"‹ «qÕ=ƒ©îïYäo$!Û%`0¼Z,…×÷:òÒÄ,Óà˜V.žc{ò‘,ĨRbEx ^6®Æ7¤yóÜuëBbÙ|7;;gÉ’çGŒ˜ß R¥€ÌÛ"ÒªFy;ï;öBQÕÉàü|;¾‰<”ðºÓ{Dò­H5³ÖkônºPšÿ¯#ks•ªô£Î8·¿zþFÕžž¦OâÁÿrÜT|äò§aFá$¢ì0þ,2ÞÔ³Áƒ]ĆŠ}nÂ)ä+؇¼›‘¥0@{¨ç³õRä 1t¡0V£È+ðr 9gŸs®îßPâÿD>†,µü2œÞßW`€|‹áq¸XX3/X®o²ØK%9kÃFä‚Û÷û/H‚ñoI„0ÙhÀTTÔ“C†„®îÀÕ5köN˜°(!¡]íÚ‘€Ìóu*TצͶaÃN,Zô·máÌ~þ™ž¾²gO6—ÀÙøÜg¼HªuFÏVÈ·¹õBøyñÄšuµ| úîŸ?‚l>T|@xœù$ ´u},ŠWü,“Šö½Ó\-?–²§ßøƒHœ·ß9lR©Öß|äFFxIÑ­¼ŒÜ¶z¡tÙž-ˆÑ*¼eà)8‚42ø‡-ªWÿiÑ¢°;¼“–öñŒúöíÛ¨QÙÎ,_²ä€¦M3úõ;4kÖ?ÓÓeŠ#sæ4©RÅhãë»ÎïÇãH’ËT¸V¸xùçE2Ä”ÊBÜ7Ðt8­Þo«ÑàÌcá,CñÊÁƽ »$¾”=ýÉ߆l(ë½÷ŒQ9ÞoÿUä'ø y¶Âd>Œ^Õ½ô–±G ¨-¡7$C l„m°ù~FnØ\u…-öÃz$Éò“~q4øÏ>Ç`¹—j+X•a|âZ…Ûßãá&¼ˆÄ{)%j4Ò¨s¬×žSH?S®íŸ Ûxüö¬Ž­„ ÒÒîfg‡z……ã <1xð¨–-k”+6Úbé\·îòîÝß4醿2S-J0Ãt¸¦ñ\“;XÎ!³=e ¿ßýnŽ¿Ùˆ9™¡pÊêý°¦.|Ê©Fƒz^G“¢Úž‰§E,A|‚“…#z®ìésþ2ÚKï)Å1‡&Û“‹œDŽ ï Ï#™È˜ý!êz ¿¤Žû‰‘• )$Àp˜«á1Ø…DŽ#\\;u¿„3Ÿß"[a 47.ÚïLj_Ùç ò—ÖÛ6!ú0v#·‚ïþ:‡¬C¼RP± ,‡ß1ü~ø2RɸI3ÓÐר¯§téw&MÒY¬NНY®Ü´öí÷Œ+¤„}þHMÝ1fÌÌŽ›U«¨û·c:¾îæÇ3fÄV4­ØÐiMnK.d—üxpt…Ãaô<ýifÊa¿}̼E?áîw^=¯#Ç*ЊŽ+ÐÒP|dò»œ¿µ L†?ŠÞN”=¿gªV¹Ý‘îcÝž|ä,ò-¼¼‚<+`: ÎÐÈ%â"í(±ÐÂX›á%d…ÓH¾Uô¦ÿŠ¿ƒå,ìER¡—Wƒ›|àhð¡}®#/CCu†'‘K¶9¨A2Ž"“À+Aö-` ÜÐÿ5ÛsiüëÚÂwð6RÕàölÐàÒªUúj‹UËgoXDbc³ú÷ÿ~Á‚Ps¸ÿÉ]¿~ßäÉ+zôèZ¯^‰(ÿÉhÚÔwÊÛ¸qVÇŽ&ÜîóáO[9€ãs§Y  ~a¸n˜êÅþ)Sj•7¼IÑ >×VdCH³Ý¬™…µcÂáy‘l1[§¬üìü}^?+í7èzõ|8[o„8¸¬ì~£øHæÓÜ^cÖƒ]öž-eO¿ò¿!CÕ²Þ¿‡ª@3è#a¬‡§ÝðòrÕæ•HgÅãs`'²:AòQcO _)Þo§Û©^°Ï·°Ôõ2ªÀ,øÌáƒd<\†ÍˆW¼Ke`6œ°m€ûí¹Si8ŒGZÝa®Téè¼yî¬ZÓû¹VŠ‘.õêmJLüvþüੳàyáÌŸ/~føð‰mÛšH@pyš5ËÑ“â ç9EÁ²¢mv»ñ™ƒŒ5ÛÁ(˜ ç5vïCõùò…Ù$²:°Û6$ÁñüuuÏc›„«žï‘ÉS —\¡ñKÅG,ÆxDnWáeO?óï •ÀKG9haLƒTx^FÀ·ÈYû(A5>ï)9ˆd C¡f Çè «àí"Íö»t4xnŸÓÈfhåí–„aðz¡C0އÈῇça&´ñ@#Ý[:­`<Ç‘|7Óö»Ñ`Î>×àE¤¯$ºÂäRqƒnü¼‡ òRÚZì†|› ÍX{nOy¸çør† »(Qâ¥Q£Ü_»ÞÚ°ÁâÁ¢ºC:ëûôùjîÜÿ†K˜ÃýOþƧO_×§O¯† K—(aÂ2ëÖõb{®­Y3".ÎÄ“zrìÆg>²L‹d¶„ýîÍo¡ò|ÙUÍÎßi)Sh¶GßÕøkq³Õó=ryœWÅÔÓ{P|ò§‘If_tJÆÂrzÊžáADª! ªAô‚Ñ06 [×áSä'äšm’§?Š÷'ÞEÖ"ý R o–j06"ï#לôK¿¿f#œž?ö#ã=ÓÑ<šÂzäW'å‚aüÜ@¶!qÞèl L°Ú6Ýþ/zÓá |äj ÔñhW»öïË–ZÁî?Þ+ãb©RÉ­[¿€cÈ9«­5 |ò5²&y£FŒ‡G èóáe› (óýÕÿ:CçÿY 5¼Ýåª0Ôï?§T¨ìþV‡5ÈYû{ V²©{ Y‹ EYÚ­Û_F±ÓÚ·÷úmÒ¶V­Õ½z}1{ö23ÃÌépoóæß—-Û>zôŒšVÕÛW·ž¨›Ÿ‹«V hjxÚ+¶î€ûãó$™½¦¥ ®imƆèóå:²¢›B`*\2>ÿë+Åüìp½Ôû@ò¯à:n‰[ŸŸâ#–ßåÁzµ3F”=Åÿ‰¤B‰q"”†zÐ’`,läEä]øNªÐ©ë«ø`çÿ€7åÐÝÅLø|GÁfä3$W«Ížô×ÍÔ óÿŽdzißn]1öMA;~#cL­4–Çð|‘x¾‡íÿÚoÀ8ä×ÿ¯^¶ìÁéÓÍ©!Ö,WÎw÷Nù’%G¶lùâÈ‘uëk†îçÆºuïLš´¼{÷ÎuëF[lnçëÖy(TùÂÈ‘åb Wbí'ÂŽÎÁl’Ë’ k"„Ïóh¯ñp¡ûG<|aûNî~{èžù'­e§zˆ4Ô>¹BW Bñ‘Ëç"ÓªTà¢ì(þ¤o W;ÑPZA )†lƒ=Ègð rÔõR|ˆò7‘χ`4Ô ‡]7X¯ÁVÍö…}Üq4hžÿ*<}|P@·lC.÷|rÙtö’¸ÆP8è¥þæ#YˆÑÕaEØŽ »Œ×ÕØ´©iQÆ‚´´Iññ&ôÍ$öר‘Ú£Çg3gš»‰Ï?ÓÓÍš•ѯ_R“&ëÔñäT¤¦öjØÐ¨…Ë£Vê0d§2‘òf¯ZW8\8ÎÃäyô³Ù°Ž ð’ç4wÌu{ô¯è.råÔûCDðNKhåc8OÌP|dòx&ܰù³hÆWöô?¿ ©í³—°ÊÐ`8Ì‚5ÈÈ«ÈAä{ä<(û+>ÌøäeHŽhçB˜OÂQ$Ï>&Ö‡öq3uâÁyÈ»ÈXH04ƒ ÈoEM ÚñsÙu¼”G¶~ÕÞn2ÓþŸ Áx3úÁïp™f4‘'*ê±Aƒîfg{^åñXJJz¿~ ±±_ßkecb†µhñìðágW¬Kƒ'Ÿ¿³²ž2Ä„üdbQÙëñ¹ ‰5{™êÃN§çÑM$ )eÊ£áŒÍ´™ö4ráhõþ x4Ë`XyûtÅ+þþGÌjÏu`{¡×SÙ3ü5Sí2P: ˜ Ëa3ò²¾FNCžƒ,­²¿âÿ"›`T´g¡"$Â两U~Ò?öqÑð€ÿøÀnÕ`>±mmpŽŸc0Jyɯô(\/nƒÚÿ”ñ4Ÿ2ð$ÜÁòÒĨc¨jÕ.ôúB÷æúõ¯7¥]»¾L©(îEµjK»uûhúôy»d(~N.]Úµ^=SÙ6‡û÷s0ïS2‘\§çÑ>hlÊMá}«\ Oڣ߀ï\½?D–CÂÎ-¡ñKÅ+ޑ߉Ô7û臬\×ÊžþäÇÙ^‹(¨ m /Œƒ…Ž<o"_ ¿"7lr±”=A|>ry¦CkÔY4!ßfÀ³ð}á‹càíéÒÑpI‡æ>` o…oóxˇ·‘D/u¼¼ ù6POÛ ég¼% Eòoè™Ñ¡Ãÿ۴ɧ‹Þ»ÙÙß/XÙ¿·úõ£,>¿wKEGjÖlëС§—/@Ã230 &ʰŠÂ8Uðh¹ƒ%Æš½ Q0ÎkȆðóè$›$×#7‹Ã:'-jWÛp^fxÉv<_T(iÖìàxx½Ï܆GÍŠ£%ANQø°·ÚãÒÑ ÞO–rƒ£CÂî ¯xþ 2ÙìÛd)Xëð­ìï7þ2rÞ6>JÙGñ‘Æç!_“ÈhhÏB t‚ØäØæI§=ýf™° ù=Dæ«_‘E^rTÕ†4¸`«=á•öŸCFoO[øî`y1š“{aåÊÀ®ŠZ´è¡z5líû0‡˜¨¨þMš<1xðÉ¥KÃÒÅðWFÆÆ¾}MXr$œ³šßò­PÍ´N'°]…Áó뤕)kÄÂû¢Þi¿~ÒcZ Tõ¾i<Zu4U%|ŠW¼éîÁ‹ÔK¶)dÊžŠW¼â}ÇŸF^ƒ%ÐÍK9óž±0†Ïá¦M"@ØÓ1)ð¥ý"xíó óR–MGx¹e«¤ë­öï5®—«à&ä"‹Œ&þˆlèÛ÷¿YYÁ³H.HK{wÒ¤Ù:ÅV¬è‡Û¼~¥Js;wÞ7yò´´ðð2|;~\õê&îè×mÇí>0]ݶ:l…üЙÜáÏ!3LY£,붘^l3Ýoÿ®¸\ˆz߈\Û ‹æ?c$¯x7ùÝ® íêàS[áeOÅ+^ñ^áo Ÿ ›‘‘P7О…²Ð–ÁÈ™b±¥´¿LT’áävˆØ'žGâ½Ñ÷hS$cä£öÏ3%?ùrË`´›õ*VürΜ`^3ç,Yòè A‰›P0¼ŒŠêÓ¨Ñ#þ²xqèÂ\ѳ§‰à¢Õrô8Òß•–p5ÄçO‡ʳPÙ”Azj÷ø°ýÍ]8D½o(M…­sÂR”taqæÒP¼âuø\HGLË='Ão¶¡ ÊþŠW¼âMð¿ Ûa´‡v.4ƒÉ°¾)ªdÒö¿‚lƒîÞ¶’@ox®¨žBHØç ²ÖxæQ–Ã)ûZÞoÿS6n Xž5^™bt«V·6l•%ôÿÛ´éÀ”)ó»tiX¹²¦…:*ÌìØñí‰ó7n ™3§I•*F{ZÞ-Nê¶œCfƒi§ÎXÈ0{~EÌÚ¨/hTþò~û[è6ã«ë«ÞO"–·.+hŸqá ,)Ö©ŠW¼!þ L3>Z V¾h*{*^ñŠw—¿†¼‡lDAÕ@{*CX‹ìC.Yé~‡´ýo!{a”‚mÎŽ8È@~w(!Ìö9ŠL2^pÁ™ÅVä†F0ª¯Ú麗c=ø ËÈh£a)%J¼0rdè¦ü¾lÙ“C† hÚ´Tt´¯§‹(‹¥Gƒ›“’~\¸ðnvvpäNZÚ®]Môn\+Þ‹’ 0­ÉÙŶfYx<¿®ÀbS/̘—ýõ|‰síhPï'‘Îc§!ù@1²Àöo¬½ŠW¼iþ(ô4û8©/§Þ){*^ñŠ·çó‘ï`2 Zâ{ÁWìm`<ühÕ—ð°ÿ!d.Tñ¶Ñj¢¢7ÔP±OòššDŽ) ûl+hø§¿¿#•\µm2\,Ÿ"õŒjFÖª6 ˆÿJOÿpÚ´E M«úÃY³\¹iíÛï?>¨"A>ž1ĘECøÐj@î@bÍš¥ì²ZʆÍóîU¤¦Y —/m£Ÿ|Ýþ–ºí9jUCD½ŸD,o-i—taŸa{"Å+Þ<ÿ44ûhiŸXÅê({*^ñΟƒ7‘•ÐÛƒm1oµ`¤#‘ë6nþ0±ÿ¯Èz/h´>ÊÀ8؇ä۾ǹ}® ›‘ú>~O"?Ø&œûº¿Û»æªÃä–|d=b4Ä}QB¿32²ÎÂÙ+¶ 6¤yó2%|žeIˆÍè×ïXJJÃò6nœÙ±£‰4¨ø³hø2›T€ $×JÜ!<žw?"}M¤<äÛ‹šù¼ýúU0¾ò{{„<þmKˆÝ?mýŠW¼§|.d"¦W£!Ƕd«²¿â!ümä<ã Q = %¡ ,„…j2áiÿKÈVHðú úÀ Å !cŸÈ\(ëûV ÆÂÓÈ/6Ûƒ¾ê¯fyË‘p)@~CºlÕ2eÞŸ:5,] vŸgd|2cÆòîÝ[T¯î‡™§ZÙ²“âã ü^±bÿ”)µÊ~wkŸ àëA˜Øl8W$Ç6óí dÙ¬«qp.@ógk݆}é ¯¦Þg"Ǻ*¦£bdMT’u…LÅ+Þ ü9dº +‹Óü”=¯øpæO"¯ÂbH‚ò“ …ÃÈ-«d®ð³ÿMä d„—t¬Öœ¶Ú±!û\C2‘Dã:ˆ5`¼'‹‚e¼Þßó¶2–a{áúвÛÜ »£_ãÆ×Ö¬‰/ƒÝçÂÊ•Ï1<.®\LŒïÆCÍråü×»nÝĶmM¸–C.rËU$Õ=—$8Žóí[f£¢âàc+ï¶ÿÛßF·yGÔû¹â‹"Ä6"ÂY†ýÙ¯x¯ðß ½=Hè}®P¸AÙSñŠþò1’ áv = 堤«½£ð¶ÿçÈl³eÕtŽÚ°¸¸ìYÈç[ð ²zùÝÿ ÓàeøÝAˆËÃþî-J è¿C–?‘›m±<¦µoï·Ž¼9aBÕ2†kmàË¢Œ›­H5³=m ûmdnÂd¾Í‘fsÍÒ‘[Øö»t4¨÷Åc[£Â¾L…c†âï#þuhlö!©g){*^ñ!ÊŸ€‘ÙÑõ,´€)° ùɳŠÔ ïëõ ²ñzBJY˜û‹Âa8žo "«!ÁïÅS›Álx9Sìtð¨¿óà) ß¿FšÕ³¬Råø‚îbpü\Y½ú¥Q£F·jU±”w¼R{Æ÷C³¯­Y3".ÎhÛb`ÜF °ìƒ8³}¬[ gà°šooA6”6e“!p²(Î(°ýwíhPï?‘ÎS` aã±pâÀP¼â}ÂßD² ‚ÙÒ(øÕö‹”ý¯ø`æ/Ã~d= ðAý£Gë‘ýpÅA„/¼¯×ä)¤‹·Mý`;\0{^Gö#Ë¡ƒßKŸ´†ØœÓÖ 7ÖßG£îSÛµ»ãwá€Ðúü7+ëË9sÖôîÝ®¶ùh-‹ˆŠPìLN®dÜ-Ò±0ÇÁr I2ÛÁR°®Ú슇ÉüpinÊ& á]‡ÞöWßÑpX#àB½ÿDãßXCZ_ xÅû–?‡Ì4+ÜPR ŸLÊžŠW|ÐñùÈ7ÈVd2´tùÉhˆ‡Ùð"rÂF, R®W.ò2Ô m`3rÆI3"jü_B^EfC3ÿov°ÞA.ƒÑöŸCüÆò%K¾6nœò#ú\_»vǘ1ãÚ´©\ÚØövBl¬OvqÕªM›šðd"yp™ QfGo2äØÎÉá1?œE&›}¹]7loä€÷·n›©ù_ñV©6¢ZñâX¾BñŠ÷ÿÒÇŬg ˤ){*^ñæÏÂ$zùE¥_ÿ¨# ùùÓ¡Êwä\¯O™PÉæ]Z´™©Æ¿#ÙÓý^-Å!ÞC®G¡;mÿĨ¢@×zõήX¡¦?ge}=oÞ†¾};Õ­+âڛѯŸZr7;ûù#LÈXvƒÈ ÏjŠuC²ö!??äÁV¨hÊ&‰pÂVí?HúÛ^·ÙŸ;†ôý~igV=÷e ›K;è6þ3‡¢Bjþ@ž½È}…IÅ+ÞüMd3RÑì£kü¬—P¤ì¯xÅ{ÏAvÂBèìAõ2o`<GŠt¹#üz‡Ç‘N>`H‚WŠcCÔýb’?‰lCÆBMÿÞ)%¡7lD>En W[”1,*š5K¹|\p,%%½_¿„ØX‹U˜Cµ²e½^Ñãשּׁ'‡ )]°’i_ÈA>‡ÎfÇaÈ@r$ø„ôý~ ™g*I0 æÃÕà~~uÔí§N+4©ù?‚xl½ÎNçì7ŠW¼ŸxOòýb`\qî“SöW¼âòבƒŽ õûêH#9zÃJx9¯QR+r¯W>2ØEâáä¬ÓIUÙß<ÿ3ò$2Òï·U ãOØáqq7ׯWîÿ|nmذgüøiíÛ×,WnR|¼wOþÛÒ¥]êÕ3:f*Â3H${ଜ ç ,ï÷íf+zvoô¶”ƒ¥¿úÎëOôΠæÿHá)°Í¥¼c¯*)ÎE&¯xóÇ‘¾fŸgÕ`ä²§âoŽÿžGfAT¾¼•sÞ¦ÁÓÈ1ÈwH;W×ëþy^ܬ©pÜ~ãQÝ/¾â¿…G!AP“Å^ó/:ú™áÃÕâ?PaÞ«ëñŸÌÌÍII1Q†gô!ð#¤‚éZI…z.axÿCz˜-~´µ° pôW?†åcõ¾­x­ˆý(^ñçßòL¸áNVeÅ+¾ðs Ù‡¬EúCå@¯mªÂ ؈¼‡\Õ[P×מÏ÷†£¡ vBœÙ‘S¶"·Ãt>ßkVÛµMq†PêoÝN}¤± æóˆãÑuNr7*^ñþæÏ#s<nX—õœÇÊþŠþ ò:² z@™@;êÂ(ÈF>)–ÄW×Ë#Þ„6gx9§ìôümäcdÒÃvO%££û6j”ѯßWsçþå†ÓA}þùvþü¸êÕ^èšð$™N·T¸j“>÷ã/È@³ñb›‘Ûö›ÿ¡aŸ®º];ènø°šÏÙÇ.2¿(ØÒ‰¢xÅéçA0öV$¯èK•= |.|Ž<ŒŒ†Ø@{JC7X¯!§l$ÁÔõòïþú3VÂj> M>ÞGV@ˆ œvC¿Æ³ú÷?:oÞ_™™ú{ïwµþ©xŸòÿLO_Ñ£‡u 7Ñ0ÅiždÈp}žnB̹ùFÁéPžot{÷¡­FƒšÏ#“§@ã/ÝJûT¼âƒŠ1éÝ Þs·IÊþŠIþWä$:nòàhà äKu½¼Ì»|®Ó¬Â\•=ÀÿyY ̦‹{Á‡X¢DR“&›“’¾™?ÿ?™™*‹!àü‘9sšT1¬+Z¦@y³Ã   ß÷«f%ÚÀ ÏKˆÙ§›n?ÐÚ÷Vós¤ñègVäëº+¯ø âo£ˆiɺ!pBÛÿªì¯øÐã¯!À&d0T´g¡"ô…Õð6r¡(lA]/ÿð¥u/Ív¸áb§BÙ3´ùkÈ^d´Á«5HŒebb4múð€ߥ¤ü7+Ëõó]ƒëmÅëÀwÒÒRºt1qáúB=³½>ìÔ™ar‚qfSHÖ"7‡õWwÝž¾oc¯æçˆåÑ"4ò.ìÅ+>hù È<³{8%`1\rÈ+SöW|ðóùÈqäYd:´K@= h 3àYä8äë–YV××§¼¾îÆUûZ6ÞúÀZä=ä:({†:Ù s*õZ6&fp³f x|Á‚ÿfe)€¯ùg̈­h¸VImháAš $×ÅŽh¨Þ_·‘Çr¦,Ó~¶q1„¶}ôKx¾§5Ôüi<Ž*ŽiùºªŠW|òß#¦%‹ªÀ“pÛÉ]¤ì¯øàá/ oÃj$1ŠÞU‡Á ל¨@©ëë^¿0Áepvþs¶ûßÑÐVÂ>䢺¾¡ÏŸGvÀ h¸I£|É’C›7lРï,ø»Èép×íe¶âõù[6ÌèÐÁ„›¸©Ù ³á\øÎŸ!­Íê¿îàÕ uûôÔíò°ë¯âMðÅMùºÛŽŒâüü>¤¹ÙçeìwøFeÅ–¿|‰<Œ‡&ö,Ä@G˜/#¿Ø¯WÕõ ¾œ Gƒ8;ÿkºöm`ìDN#Êþ¡ÎŸ†‘ÉÄÉ{~T(UjX‹O |bÑ¢ûévkì»Z?;[o+~ÿ”)µÊ—7±ÑbZÄ' Ž;ŸOBý~9Ì4['x1\Ç÷É^ºßo»"Uómdòå-í<ù®Ô ¯ø`æoÁc7 ‚4œ²ÊþŠ÷y YÝ t  ±0B>Cr„ˆÕõrŸÏC®#¹ÅUo|Õý¥Æ%çóÛB#rqa[QšŒº¾!ÍÿÏ ã¡VU]J•÷Ô!?/^üwv¶›;ünÖe{>wݺ mÛšd0ý|i û´uéÃá~ÉGžCª˜²L8f›tNöé­Û÷}®Ô.Õ| <Ž£ÿŠW|(ò‘³Â Ѱ.:ä'+û+ÞGü äØŒŒ‚ºö,”° ^GÎ8¬!Õõr‡?¼‰¬GÆCW¨vé %¡´†±q¾`¢=t¯ïE­W‡û?t0·/ C ù¹á¼Ùjü„ÿ3lAFCÀMA•K—Õ²åÖ¡C]²äÓá®{²w¤$„¿w„ªeÊ5rI2æ¶ÚzKÃì~ùébÖ2Ï9ù–°±+Gƒšÿo!_ëÿÙÆ?ØŠW|¨òßÃÓï:ðrKן§ì¯xÓüÏÈv˜ D  Ma< _!·mœ êz¹Ë_GÞ€ÙÐÀÔ%¨sàKûo4Ó}ñŽ N®ïuÄó²ˆ1ÐÓJÖAŸæ¿ƒÇaP9pSSÕ2eÆ´jõô°a¿-]긽¯¿áöüÕ5kFÄÅ5©éB$¥ ®XíÁ„Ùø¿‚,†(ã–˜Y´;ÞóC];¼ãç—âCÇYÆ…¦÷BGBñŠ~?göÉÚ¢ÈG«ì©xù«È{ÈFdT ´g¡ôƒ5È»ˆ³Xzu}Ýás‘ÝÈHï%¹L†?])0é·¿’îùÏkmAä#ïù bÛ"Y‡Sn讫ñÌüQd32*nÖªV¶ìØÖ­Ÿ>üä²eúµÜ©ãêüŽ1c*•*å7ã'CŽîng¨ÿW¡¶)Ë´‡/"f~ë놣AÍŸÎãÜ'aãÈ·Ñ{P¼âC›¿…þTþ³’uÈu®/¥Æ[ó·‘O Ho(¸‰®VùòÛ¶}qäÈ?RSõ…ÜŒ)Zþnvös#F”‹‰ñaëÃN­}˰Ï7µˆ9¹Š±EîàˆšúéÚä-÷b^ÔüÞ í4Œ|§¢âŠW|˜ð?"ƒ<nx n[VÙ3Âù›py ÆA£@{JB'X; Ǫ¡º^Þâ¿…D]ÍÎp³0é×Xûõƒ,Îj‰°ä#í4hïË:¬‚7‘‹¦ú«ø`ào""«!Áƒr‰^œ©PaR|üK£F]±ÂYì€c¼€³‚ âO§¦öjØÐ?f,Ȱ¾ßsÖlm¾7‚î÷þº–Ù j>T|qÌäƒ ¬c$¯øpâ -Í>ƒ›kÞ({F"ÿ;ò*²ºtïþÑ’áäsä¦Ö°T×Ë+üdŽ)0OŽ`¢ýúކ3VáŽvý=‡¼†,€öËôy ëc©Ægñ"û‘åÐÉï·ŒõQ¯bÅ©íÚ½fu½|Ä¿äº £íןÓNíRêÛç ìE–BçÀyÓêÂØŠ|äÙn®ªñ*ü5x YñøXD?  R¥éíÛï3Æ™ÓáÁRßÍ ¿ñ9K—v­WÏ?VJ‚cîÍ!:>o"ÙHSÆ\'É÷»¾£aOÄÛGñ –|+®ÀÁ9á¨î xŇ+YlV¸! 橸+{†ÿ#ò2ÚAt@= Ía2lE¾An«ñæGþ*29 W¿m5ŽÃãçrÒþ«th'ë Æg(ò—‘בùÐ* ÷TÃÊ•gtè°+9ùÒªUwB t’윾æÿ“™™”堖ŶÂv|~l¶YxÓiI¿Èºßõ Æ¿¡¥¨æÃH㱫H‘oµ%kë®°O½P¼âØÿ bö ] [¶_­ìrüeØë‘$ß”0ª’ë`rÉJñ[]/ò_@zøÐÃÈnx9{‘'™ÐÄø ß²Êt§ýÕ]9<´Ï×ÈãÈèÀE÷”„ž°öÁ%›*ßj<‡ vÂ,hЙ¶q•*³:vÜ=vìåÕ«ïêÖ€pLmð)ÿã¢EñµjùÁÕakaé„°oçÌú‹c`yq½auÿº8{Ý&þN͇ÊãP€Í>Å"ß>ÝBñŠþ}ÄôNKÓ¢Ò>Êž¡Âç!ßÀ6d ´hX/ ñ0^D~,*@¨®WùmÕÈ;Ar\».”Íù?ƒ¾FÎÜÞàx¨¡{¶S¶å©<´ç)ä%d´¬ƒÉ:ìBNÛ¼÷¨ñ2üd;2Õ¬8Ÿ·Ž&U«ÎéÔéõqã®­Ys×I¸f¾ƒfJÓü¿32Ö÷émñùýT RáªM C¸·|d+T2eŸ>ðƒóyDÝ¿úŽ†×œÄÕ«ù0¢xòµJbæÛªCY»+¯øˆâo#[ šÙ'w?øN#gIÙ?Xø³ÈX½ \ ÃjÃpÈ„‘ëÅþ`u½Ïgº}[Aò[ÑNŽûíùIrû[¾6rþšº§:i%và]{^†=È’ uØV$ë ÆsÈñ'á9dÔ èäܬZµy;¿1~üõµkãîj)hþl”ÿfþü¸êÕýÐÁdÈ)ºAÂu¼A:˜2N-ØnµC«î߿ׯë¼Û6\NÍo‘ÉS`óŽî )ÐÖ“T¼â#ˆ¿ KÌÖ节9…¢ÍÊžço"‡‘Gä@o—ÝßAê‹`'rÒ¶Ê º^ÁÿèÞÕì4“Œ¶çÄ Fæ“Z. â{æ"!*ëP †@6ò9ܰòTã?ø_‘mHr %x[T¯žÒ¥Ë›&ÜX·NSvASgážs™MþŸéé©=zXÄç¡u]àóp?¹„Ì7cu_xë²zsÂqåhPó›â±SnÈ×pZX{,,ŠW|Äò?!Ã<.{¹©áWö÷9ŸƒìDBg(hçB#"_¨ñ ü‡n¬ü«Ã EWÏÛóšY;ƒìÃôί¿*ËÿÛÿkä± uXû‹¶I§jü‡yáA¼¡wDkÔXصëÛ'æ®_×I‚]ðÂ]-™;þðìÙ«ø\¨>ì°Õu Ëñó2RÔ}:ÁW`Oø¡ºÜeÑ æ·å± {‡t&'Å+>’ù‘6¦s>‹ +{ú”¿Ž|„dÀ0¨hÏByè +a/œ³Yªëì|Žõn“àœ•:£WÚ“êêK›ƒûçwåhÀÚÿò"2=pÂ(÷eæÛÊ:¨ñBü7ÈÃ08pÁ2÷Ö5k.JHxwÒ¤›EN‡{N´uþoAZZJ—.~x*eÀpGzšU_~ òÔóÚ?̵£AÍW‘Î[k4Ø}ìó.¬1Å+>’ùm[Ì‚³Vûa9®#+ÌÖ)ŸTì;V÷— ~¸®%w¨ùSñEŽi»J˜ùö!ŠW¼â-X®À2³¡ø˜e%Ü ìi‚¿ï"k‘þfE¤½xT…°9€\±]¹©ë¢üC6BŸÀ9­î;ÚÕ®½¬{÷S¦Ü޸љÓáÖ† 3:tðuc’àx°Þï^ä÷"õLÙ§|öñ"?Â…£AÔ|¥x~e_ÓÁ¡xÅ+¾˜ÿaö©_²‘\Û46egümä(²™ÍíY(ía.lG~*^ò©ëåþ ²ɆY0Ú@C¨ 5 1´‡d؈| ùZ2×&Ú³ÇÕ:ÿ9«² ¾°ÏU¤¬n®XUÏÕ?¿þ;÷Ï!2ÿEƒ€Ë:¬†}pɶ–ºƒœ¿¯Eºz˜uöÊaéP§NjïOZ–öÀѰoòäZåËûVKöo/‡íxÈqUpÑÙQ²à–½¾º¿\ð#u­úв§âïWpáà±°äÛÖ×U¼âÿsÚš}h {l§ceÏüÈÈrè eí\¨# ùùÓ6 M]/ïòyÈ7ÈH2Ô1rªÃZäœÕn¿‰öœCôæ–{v~7ùѺmȵ‘ŸÔ;¬kGCˆŸ“ð2# ²ñ0v"§­Êv¨û7øù?‘°:Ct@êÖ]Ù³çÿgï¼Û¤(¾¿}Ÿ]’ ‚*&D1+¢b@1gÌ¢˜Q1£~1‹(¦ŸŠbÌ9çf1£ˆ HfwÁç}<À²Ó3ÝÕݳÓa¦?sõå…pOÍ©S§BŸ:uê¤wLô‡6€ÿƒå>Úh¨ömÁnª ]9f5º~âÝŽ†'<™¥Ï‚òø<”{&þ /^|ÓØ$ذÚÕÀþð•w´˜ú\†}ŒMÀŽ‡Í³ö,ô€!0¦bÜ!û¯¿ûnĆC')÷Yµ—R¥<Ç„…×¶ú_+]cýLöþn7ØFÃSØLÿsþå»ûÑOž¢êÏ~æç ­Ãfp<«Ó:¨¿×¿{.…]«ºû0çŸpŪЧoß·`›ªT´%¼^ý$ÇçTïã^'¬ôYL¾2dàyŒ€dâÅ‹ïøÃ"ìŠN$nåÍÒT}ÎÄžÄFÃî™Æµ®09îÆ¦am ûO”Ÿ‡½ˆ]{%Ðôç@kH²"ù¿Û#½|ñ””~fbÃ1pö!¶¬"kcÄò·pVçGW2È:³·•inÈ4oËê´Ÿ®:§þ^üBìl4ìØ^†0³ó×lìäj½0ײ—±úK¼;ìî±øó¯øÆã JáPö÷ÿ+^¼ø@þW8¶ÚõÁZpÖâ]"4˜~Ã;ØM؈©Õgm8ÆÂËØ?%§XeÏ ñ3±Çàl˜|ã²Ê×Cþ›Ž†= îôßß©¢bê§Žì-ó´=`(Œõ¦uÐøþ˜ŠÛÕ¡‹a0|ÒÐ뇕ÿ]ŽÝ Õe¶?«?Ö‚?Á©çGý§Ké³X<0‚¼&^¼øˆü°Kµk…-á9ÏìúÖÏ ì{ì!ìl”ujìgÁ$ì{l…ÓM+{î<¿û »;~Â…š|F:·õ*å–F»îô¿¥³F3Šaÿ`+Ó: ÈAZ‡¿ü£H4žä‘Ÿ‹=‰‚-sïbØžö[64^{}ŠU—k˜¬"Ù\~Dˆ£Á¤OñTø$¬âFéšÄ‹_=}«]7 …/Ë]‰u£ŸyØ+p 6¬ÓGîk’ë0¸ÞÂy¶2dωðK±÷±š$\èü癊¼‰Aò/Áº:7¨×a s4P4ûœ­Lë°GµÇÜj’ÖáTx+ þë—Ÿ…=§Áf9s1¬·¬:]Õàí5ήÊWØ.†E {®!¢Sç“=árÒgAy|~_núÏst\¼xñQùEØUÕ&*k‚³`Nùb4õ]ŽMÇîÁN­³^x­Ìœw!<ýê—¹SöYs~öv ÎA®ÒÏF°¢Ô÷]ç ö ïÉšzi¯( …µç•i®ÇÊ:­Ãø’´OòÏÏÄ&a'ew0gå§Î¹ÑÆ·z×ÿdl½ª´´7|Œ&{î ’SíûÝ€(}Çáø!g0Ä‹ƒŸ‰_ãýŠìëû'<‹]ûÀY¿Oöƒãàvì#XV^Ùg"üoØ£0*•„ ùÜÍnu2®d7¬ŽÚk+g¥¾÷ÏÑPD{^_`wÁq9Hëð¶ >í­€üؽØq°AºÖ2¾+FÿýR•ŠÖƒ‡IJçÎòîLœæh> Ä;ögÜxñâ«á?Äv«vU±Eyxò/Å>ÄÆcÇB¿¬ß{Â>p<»ê6{Ù[Ú|Ê{w½a½ª\ZÛ{b‚ë;ÒYÈ«Q•¯ör‡}ç·;!ûÿ¦ß±G°³rÖa ö‡Æ·:á¿Á&bG% ³}û½Œ ¯ÏEإХªîsÌÓø–$æh0éS<î“þ ñâÅWϯ€ÉXÕ;fûÂtŸíÙåÿ{.€Ý kÖÎ…màT¸¦·_?){ËO´­7…“`"¼‹ý‰-/q,Ä>†›±A‘Kû™ðùnog ³ëÓÞÜ7ÌëÿuÙ¿˜½c2Më°%œ b3ÒÿÅWǯ€éØxìj/GÊ7ôØòÀÓï ¥Ïgª])í Ÿúg?‘}Ö’?ÅÙ “|Ê”> LJF4D)Q¼xñ±ùÅØØj7Œ„¿®³ò/„·°°Ã`ý¬= }à ¸{›ç/{ËŒ¯yso gÁ#Øo®(Ï?]­ä»"ô—-œ%ü¨‡\·×¶ÎJ}òÆ"û/–Á»Ø¸LÓ:¬ãIë€Ú+çürìSìflôìıš+`aÀer ¦ÏŸ°ƒ«ÒÒÚpg¹#Fö™ª³-tX”>‹ÂôåŽ(ñâÅ׌Ÿ‰¨vÙ±&Ü„-õëäqåYßb“°³`‡¬¯Ÿl†A0 Zµw'ûÉ/_“æÞ.‚g±¿œ ¡òœá‡F>ß­ë,áŽvk¬¯öà¬Ôׯ©²ÿp~eZ‡;sÖáluZµWžùVìCl64ÎNØYŸãO\~)6«.nhüÕ~eµì-þ4gs< õ›ø²d+ÂOb˜xñâk΄í^í*sóö{¡ãÊ3^®†`í¬ÃúÂpö¶Øå@•ýä‹ï|Æ»E¿x•ò,Â6 ûÑÝŸïÜ'ƒÀŠ£òyl¯íœ•úªú¿:­ÃäLÓ:4ÁÎ0¦`³||Ðj¯|ñK±·±±0$øXâžðIùËsÃêçµ°ëx¡po‡¿óÈ>kÌŸîl”ûËßH¥Ï"ò„¦sˆPºxñâ;˯ÀíD↽;7ÊÓŠMÃîÆN†-³ö,t‡=`4<…Í ’—ý$ÊÏÂ^À®Á†Ã†~éCËuæ0¸ûkmÿ­Ö÷Á°7» ŸïBoåœP~ »ìÁ}!È—‘~Bý%6ÿ/ö<–mZ‡þpš'­ƒÚ+¿übì5¸v‡æö]„§œéôI?`ÇUeäkÀ %÷ÂÊÞÒäݱ„÷…„ËIŸ…à){Õq†ZÐÄ‹_~1vM'7œ³+Þ$§bc`HµÅÖð³9œw`Ÿ`Ë*^5e)ðež…²Oå»[|÷`ßxS9&QߥÐ;Ì·Z~è%í]a²ßólÛ;kô…7Jý% ~ö6džÖá(Ÿb-a;äjßlù𶬤™¸¾mØíЫ*«> ~‹Ñ){Kˆs4˜ô)¾r[)ÒšC¼xñÉñ3á¤NÜøx5\‡A߬= ½`(\Ïcs‚×L²‡Ôxw{UQ~X©Ö÷ä0ƒl-_’–—¿u4à mõcÏnGÃôŠwNõ—Dùå0›ˆe›Öa?¸ÞÀæ‡ù|Õ¾â“ã? ó„}6ƒÂÆsé?iþLgÝëç’>‹ÆêŸýKñâÅ'Á‚íA} ÀépöåªÌÏjßñQü±ÊX`:õ} ÌñÑð«‹:"²©o±ïKrLäÖvs4¨¿dÈÏÌAZ‡]üÒ:¨½Ä'Êÿ¬Êb»Â°½¿dÏŸål©{4žˆ§‰!oåÿ$^¼ø4ùDZMòí\X†Ãÿ°×±gïÕ¾™ó±üQÊw˜r}?{S[fŸc«êÃñp36>Ã~ÅæA ¶ûû›Ž}Œ}„}Ž}`K°EØO0 ûû¦c3°?±%•ª~9…ÿÜÏÁ¤þ’ ?2Oë°eIZµ—ø$øØXugˆöƒÑ⺥ÿøPGƒô)žÐƒe…Š/>e~1v¬‘ÏBØ ÎÉØÞ—"µWÎùªýAåÇô\$[ß?ÃL7(ÆoõÞËfSÙ'qæní‘A߯Š?¬^?;†8Lý%‡|iZ‡ÞÙẫÒ:اX«Óï ö‘Ÿ^í[ÂcZoäŒål²»Õ^âWG4¬ðÑA¬èøƒçÄ‹Ÿ2ÿvrvo>ÁQp ö.¶¸}Å©öª;>Ô/·ü(/ö©Õwi˜› µ½ŽAå/ÏÁ…,¾YT/†/*ú]Dýìä,ü³ŠHõ—¼ñ+Ó:܉ešÖa,ö¶ÀÛÔ^â£ð ° ©æJä&8þí¥Ï¼ðg;n¢_fé³h|Ä«G|b$Ä‹Ÿ>ÿ)68­eå`¸žÆ~LíU/|µ)jœ£!¡ú.«6GCéóT>‚|?‡Â¯ªP¦Ÿe~Š©¿Ô¿2­Ã™°mÒ:ü)û«.;õîåWwKŸ9âÏ q4˜ô)žÿ¼>‰ísÆa)%Å‹Ÿÿ$¶i2—®ŸwÂgXk¹“Rúo>4!nùB$ҫ Y"–JŽS¢ô„'Jvö¢èÇíhøØëR©/þŸö´»C·¬Ó:üàÝsV{‰_ÍÀö¯öÙ½Q ÒNøs-xgÀ•FÒg¡x‚ÎWxK,gÄ‹Ÿ-¿‡õìÜqMØ®„`Nyp”ô߀|ô['"–ízË”ê;ÝéøØ,²<‹±ùÎÀzE…wÀ¡Ÿ]B ¦þÒüRìl6,Ó´GÂx¬Ì[­ö* ¿»ºZÿשð·ì'÷üyÎF¼£#ÜIú,.7cdù‰‹ ÿD“xñâóÃÿ39¹Á@ ÷c_amÞtÒgÃóÑR*Ä(?zòÅê;Å)ÌÞqä™Sííî©}FEn¯]à ê/ǯÀ¦cw±٧uà l¡W6µWÃó/b›We6ÛØôYüùΦœà‰"”> ʳ¢Â?ñ_°£¢ô0†xñâóÀ÷°ÅtŒÃÞÀæWD@IŸ…⣧TˆX~˜£!Õú^áæÜ˜òÌÏ÷ `Œ'%P?nGÃGÞÅúKCò+Ó:Œ„m3²Õ•i.„©ØŸ©ÅÔ^ÄÏÄŽ¬ÊHzÁmXKû@-}柿ÀÙ ·$×> Åû¦ïàVx2y”ý¯xñâ³çÝÉÞéx¹’>³á[°·±‹`K²oCýqËE‚õÝË)ÌÿU%ÏØû¦a¡úq_&÷ayiõßççaÏÁ%9Hë0 ›Q¾'¦öªc¾» «î*î£àŠŸ–þsλ ãKŽNHŸ…åù¯â ÿùµÈ÷ ^¼øŒy÷m|3*‚¤Ïtø°G±ã½‡¥3—?Ö%QÊ–£!úÎÅÜÒüZq Sôò¿Å®Ãö„æœ9ίj¨”?ÔÑ þ[X¾4­ÃÚÙðzpÜîMë öª;þml@µY¨_õ‰Ç–þë€ílÙÛ´þ_ÑPy¬¢ÒQá›õA¼xñòîPد<°¥ÏÄùïáVlï€7ÒÌåѯüˆ )Ô÷g¼ÆÖ%¡=‘g¼]‡À†ÐúÀư)ôƒ¾ÐÖ€&èëCØv„`l =` Ø v†ÝaØ6‡ê¶7i?ëg ï·7“úoÁù•iîÈ4­Ã°\ÓžÖAíUül8¹ªæîca骆–>ëw;nÕúS“æ£å,ÈLþè~úªo¶•S’ë©sþ¢pGƒôYtžÊ;**ŽX¸J/^|¶|ØÝuHŸiòQ^¼3”?Jކz¬ïdg8ƒÁL¿/æÖÞ^†í"¯×¬¸6¢¬ØÁaŽõ_ñnþoì9,ó´§Ã$ìïŠVí•ÿ)¶KUM¹<í W‘>딿ØÙÐ7ký)~¥£¡4µCÙ?—ez¨L!^¼ølù="lWJŸ©ñQÎ&d(ô„:ªï¿˜ûî•ã îì­;7ršwùî™ï¶¯øÕÅGá—`oå)­C‹ß¥îj¯Dù±sË-ì÷i†‹`aùµ#Ò½ò—8›û&­?Å—°ÞÛ)þóK/Yy}…xñâ³å÷vôoy“ñHŸIó±®{L_þˆâÕW}G„`ב–²ÎìíÂk÷ý:’,ø—?$äbSÿ_¿<iö‡k°7Úß`Õ^‰ò“aýªZj¯ò¤QÒgÝócœ-~£ú£øÕ·NTærðýߊ4âŋϘßß9пê¹fFúLœx­CVòG¾²nê{yØêöÜŽk;ëÏÞ–c;†UpkÏ™Ÿòݾȷ;ö"ÔÅwŠÿ Ë6­C3ì £a ö§÷ µWçùo±}ªj—uáÁòËð¤ÏFà/äh> Íû”z Š/^|Žøƒœý‹å9´¤Ïdù°þŒåâh¨—ú.ÆBSo ¢öŠÇ/Æ.….ñ›ÀàLø[úoPÞíh¸AëOñ¥É ÿ ;tw…xñâ3äsôSË£˜¤ÏdùˆÉ³’?Š_ .êû¶CØ·K{‚º¶·?”ÜÓÓp>åïëüú›ÞFõwñ5ç—@æiÖ÷¤u@íÛ¤*ï—„UKŸÇ»# ¯×úS|YDÃ~WST\’)^¼øñG;ú'K¶©‹£Ÿ¿°Ï°°7àmì{lAÉ)ýD剾߉~"G4ä·¾ °1Ð5Â2÷ŸK¼ëҞݕíîòÝŽ†7<—Øk¼Ÿ,¿›†Ý }sÖa‘ì?˜ÿ†W¥áµà¬­ãØšôÙ˜¼ÛÑ0®ëOñe|y8SÐ1Œþ÷dŠ/>cþç@ÿhÅ*ª!õóövìkÇpv…^0Ž€k°±¶Zë'úµ™è3¢xù¬ïì&lÝh+Ý‘>›–õjÿËsååu~ýõ€m ·âSàÅÆFÂ6Ù§u`¶÷Hy‘Ûk)6ëQ•JO€Ùå1ó²ÿÆä¯q4˜ô)žÿÊ]þÎ]¿Ÿ/^|ö¼û˜úƒíó}ãégv?Œ€M:±ÊìçÀçžßí”ü‘³-f£Ïˆy«ïWØyÁ.¤ÊÏî°´d3­Þí¿ÙYÙ“Wé9°|·£á5o²L·â³âÿ†gÛÓ:tÍÈïОÖJ¦Î¢µ×ØVUioxSãI‘ø+öp]ã®?ÅGçqø*Vø¥”/^|®ø3œý}£@½×w66Û­ÖëË#àÏ]U-è¶ú¬.!«ú~‹Ý!CÙg ÌõzŽêÝþ{:ë;! ¯þó~!ŽÓx+>oübleZ‡a­ìÒ:ÝžÖ¡Õ•­qô? ;¾*]õ€ë±–†[oˆwóW…;¤Ï¢óe[X?DÙß”e•/^|ø³ýÄU/{Pß÷±ã’Üéê Ïzo ¬Bþ8!è3šx™Õw9|݃U¨²Ìñ¹F¡¾íßÀünX}CoÀÕx+>Ï|LÇîÀŽ2r:ô\•Ö7±…‡•Gÿ­Ø„8Qc¥ŸCàWϦì¹(üÕNø¦ÖŸâ«æ©ˆ‚qZˆ/>WüÎ~¼ÿ¡Ó:«ï+Øà´”WyRÆ–?ZÈ@fúŒ€r}[±°[°Ã OçÚîHXpʺ~í¾Ó›Ó­$›]Pù„;4ÞŠ¯þ'x;#i¦byƒÃëTÿaƒªRE?x>üçdÏ ËušÇ؆XŠï$OÀÊO_T\’)^¼ø\ð;ú›ü/¹­›ú~‚íú:òthóL1ä{” e}F/ñú.Â^ÇÆÂ¾Ð£MÖnÖ{O6FŸîlµaÞ«=|Ë?Щº—+¶#4ÞŠ¯~.ö,\ »eÖá!ì‡:æb#«ªuW¸l•—SöY\~¬szëm'}Ž'ŒhŠY¢xñâSåî²:­ï\ì ÂÞŒûŒ€åg×ÝòG»?23ýWÑP«úÎÅžÁ.‚]¡¹¦5¾ > Zïýýg'¸§b˨²üaNí½TžôNã­øºäW¦u¸.Ó´ÀÑ0¡$­Cnõ¹{[§ªjî ßV5?Šo0þçôtuûÑ é³È<Áî (Q¼xñ9âÃBרÇú>ë‘ñç"ÏUþˆ;üYé?‚xµ¬ï¯ØdìLØ6™6Úž)µ6úü{‹ ‡­KîL¿¿œáÜTœ]ÒjAåGp4h¼ßP|6 ›ƒ´×bob‹B¶ÓÖÏØžÕzRñ ÷“}”¿Öéh¸ª>ןâkËãë–þš‰/>WüÿœýåÁ¡kù¬ïìŒÎ-ï 6„í`'Ø®s«Ìתà?úQ‚LôG¼Ô7¹Ï0Ú<"uJ?¥ž… ½¿Õß»-“rÙÌw¥üƒœš|1àè„Æ[ñ Ãÿ„=™§u¸¨#­CfúY€®*¦¬ Î…y~×ÚÉÞ Ë_ç\^YoëOñIð+ËFñâÅgÎßäè/:ªï¯ØÎU-ã6‡‘0û –UüÄ"ìCl60f±;w ˆZßêÞäSÓdñjSß$.œ»>¯u<ý,uþhŸ†K©½np ö‘O±>åì,ä…H"i¼Ÿ%?›…ý-òI¨¦ü¹Ø39HëpL Në>ŸªÖó¾kȨ+{.(ïÞ躢®ÖŸââ‰ó‹ùâÅ‹Oœï\œœá/oõ}bcàEl–ÿùËóJLwÃ3µð/?òÙ„lô_­¤ÊúÖêÓ.„7<÷´×R?s«¥Þa µ×D§TGGn¯áNÝ>øª£ñV|^øM*v×{@oØ6…™‘\>å—¦uX3#§ƒ;­C­ô9;°*ñzÃ=Ør×BBöY\~œÓx.¯Ÿõ§øäx¤#ñâëš¿Óù6rvFïHqùç°îÑÖ=}a |á3Iže0&ò2k¨_VGùU½É§§ÿên¨º¾UzÃ~p9LÅ~O~;'L3ó;aoÕñ;EZþŠüNrˆ³jÏUÜϧñV|Þøõ6<+^\€¿Åûó×;ç©Ëêdý)>Q>bX‹=zrúÜçèÏ úøCX”#£›ÀÝØÒ¨Á]!Ïäh?JIzíHAbÕ‡ ¤ñÔ\¼Z­°{Àp><‚Í踨2¥g^˜£áÍt噌¹šGžCE=›nÕôè©âYÛiÃ'`Ã?ba¦uèâ“Ö¡šç„ª~};xW#ƒž°ççÔy)zÇÔÓÔq…›caWúOâÅ‹Ïÿ s ?¥äšÆ|Ê„+,{ÁlYÉûgMäy0Úí™eç Ý廋Ê\ÿU8:S_wv´íá ¸¦µŸ‰ÈJ?ËüNW/˜j.ÏmafyŽ·S‡–˜³´©%UÓx+>Ÿ|§ /ò+³†ò¬¼š7Û´[—§uˆ*ÿ‘]ê«/˸¹äšìS¼ƒ¿Ñ9[ÉýúS| }ýwÞ«¾•©N€ñØ{Þwƒ<ØçÆa6‚<óáÄ0îK*Šu—xˆ£Á4ÞŠÏ9ïhZ¢mœÖDžE9Hë°¡Z‡@ùGG.ùH˜9 Lö)>ÔÑ }Š\@/÷sW8~@¼xñ™ðOÆÉ—+ùßÄBŽÞ’°üÿBß˯ï‚wÂc… d®ÿˆ~èå‡&Ô8 Æa¯b{<ß¹ë_CÃlàÆ„åÛ<Â¥¾N7wùGD>…¡ñV|ùç×YÉß «Ó:ôÍÈéОÖÁÞļ×ÍÇB³Nl/uLs²Oñ‘x÷­gçxý)>5>Þù™¸çfÅ‹Ÿ4?Õ9Ðîù¿ÃÖ ;¡:9Ú(ÖIy&DØ–¿Ãÿí®¶×:¤¡ÿΈWõÎ_aM?ÑYBÕò|á×»Áûq~buù oÅç“_è¢×ˆpæ+ùjOë°uÖižÁæxÅ{*X‡Ý`,,«¾ìS|%sdGƒôYXžÕΉåÞ#²Îã¬â?ô:³¥ŸzáŸwôUì¢çAþØÖaøWOZž…Ð+lwT𱂲òC_¼³Õô€‹Æ¨otþhKù»ÂŽ-Ä’çì(¢ž?ybU™±ëëv4}žå1cˆo0Þw z,ÌšVTú̘Ï9Ðï‰üaë:×F熤)NDþß°õa¸Ʀòjí?lå—±þ;™R¡îê‹ÿ4Î%+ó\ŽÅ¦`Ó°9Ø’ö ð+Ë_„}ƒ=ý«}U8þ¨HB·¾G;âÉN—/^|¢üwÎŽ¹UXäTžëûc’i*XŒ_ø“•½‰¯‚ïì›älý)>ž bµ+¢Ü]±¼Â]!¾ÞùÇ‚ˆ àÙö.é3ÏüGÎ~—Ž—½\È’sa´´`uÝ^±Î&¤/4¿@ãÔ7.?¢Ó‹ûfè Ý:]κðˆ'ÉEõõ=ÆùC·Kã­ø|ò_8®^‡fýÖ÷/x]»´ó;º¶ìM|"üíξy~ÎÖŸâ3áýÓ­Už»Ð¥ÇÏÂz‡MT§Ã¼|_J'~šs ßÁ›(+[ùßvŠÚ»âê¾zl¯(/ÞÊk¬ê—ŸáŽÉW„¹'ª¨ï±aŽ·âóÌì4à]*ί.ð-lq…y×…~aoa×bDÈUìv4È~Ä'Ç»/í:/OëOñYñ”eq8†áã¥_ïüðhsÕFðJÅY>é3?ü—Î~[ÏãYÊ¿ÛÑii­Še¨ïöŠx CVò‡F44X}«à§‡]¼šèg_˜Vëñö¸°~§ñV|žùwsÜàŠ\0¥£S7Ø ®„W±þ×+ä]?­%i6Œ3˜Ì«ÏúН#>ÔÑ }Š÷ÄÊ.t–~M|#ðÆ9¼òäü|ïzTúÌ ÿ½³)û{ú åØ)ç× Õ]{E?›‰üÑ#£¾ÕñoyÓ³§óÙÞ ž¿;S_·£áQOö_·âsÇ¿îœ;†–'œ tƒ6Ãn0^ÄæÕízæGlvz„´ÿ&3žˆ¿»ÃÙ7ÏÍÍúS|†¼O¬lÅa ×ÝWâë”?;þ:xSx«ÃA.}æ…ÿ9BFîÌåoÁú;oüþ²ü4i½¶Wܳ )Ë!¢¡¡ê[5ÿ:–ÎEtGÀûIÚÿ Nñ»­Sã­øüð/8縃*ÎG¹Í· v‚ álnplpÎõ㎽ú§$Í–ìM|üξyv>ÖŸâ³åijn ‡(=w±¼ââë—ŸŠ­Y|1,ꆗ>³çg†åÆÏƒü“³ÑÈŠƒ|õÛ^Žd)¬Ü PßÎðÓ°~IºÖ…‹à{¿»9j[_·£a²Æsñùæ§8§#JvMËÊÞÂ9ðögòý±†üÚaŽÙøDù‰N <;ëOñÙò,÷?eÑ‘†z¹ó†øºæÿ‚£â¯·„ŽõJÿé󳋰uýÂJÓ—3KÿÏ~·mÕi{EQþngß<+ëOñ™ó,o¿µ~¹ßuE,D“ø†äÇŠ?€ÏÚÏuKŸYñ œý¹ü§:­hZÉe Ð^a;üYÊ¿Èi*kU¬ ê½¾5ç¿ÃîÂN‡½acè Ýð×é0ƒ+áÙŽ­Ñlä?ÉÙF“¼GÜ5ÞŠÏOØÉ» òk‹´ Œ€ûà{ïž^†úéÇÑ {_sÞíh83ëOñ™óø:!VDŠßxü=ñóŸ5Ãÿ°o&3é3M~©s ïâ½c<}ùc=#\Þ0íå(AVòÏtšÊúžÁF¨ojübl&ö5ö-6û'gãáÉ!ŽÓx+>Ï|„+ôüËO.Áʆp,Lľ.ɾ~Öq ùWÇr_ö&>þÞ鷤ς󫷣c!–WdÃßÀü/ØÐø“îŽí·HŸéó-ÎÞ*&¤,ÿ3Nñ&vx@¤½¢\ë•üÓœm1Ð/¢¡®ë+~åNq¶Ñƒí}PúŸOþfçÀu±ß­I;J?ëÀ0›†µzÝvIë'ÔÑ ûŸ(ïv4œ‘õúS|x*¾æó¿¾1â•_ŽÇÖˆ9×vƒ[JB¤Ï4ùfgÓ´øäƒMOþ3‚ëÚ‘­ªqÚ+zrÄôåw;} ¯~ë+~åÜŽ†2Ä‹å¯s\Wx_fJ’”û3Ä‹å¯tðµ%÷³–•O¦Ÿ^pŒƒ÷*®˜©•~Ü7”ÿé V’½‰¯=ÿá‹ é³è<_ö=áóOâžoÃnÀºÇ¿¼íN¬Íyešô_[~­—ig"ÿWÎIh¼ÏàU÷íåÅ;+ùG:e»ÁÛg ¾â£9LúŸg~ŒÓ€o,y.+ŸÜ|ºÃ¾p ö–ß½3Uëg}çÎ* ©½‰O‚¿?Âî…ôYpžå'Ê–—§‘,;€!¾XüרÎñ§Õ!ðS‰£KúL”~P3eù¯q ö}I­†i¯Ð[2”S¶—°«¯ø•üiÎ6ú¿ìÆñâ£ðç; x¼'GC 7hÿþýûôéÓÔ”¶?¢ìWÀ+° }Ô­N?8èUÁJ²7ñIñ8×§´‡ËIŸEæq¤p¨iÈïx³í[>5H{EÌY¾ü úð~ õ[_ñ«ÿòtgÝ—Ýø ^|þ,§ßíÍfº"òè4lذaÆpÀ»í¶Û–[n¹Î:ë477§ìth†Ýàxû7þz)tê—ýˆO”0ÌÑ }ŠÇM,/ÏGmâ ËOǶ?¿ù\:-}Ö’ßÄÙ?g¤ÿYÎèpï὆i¯X·0¤)ÿsÎæØØAPÇõ¿úÏp¶Ñ½ŸÅç›?5N6ÓèñVÃ*>xàî»ï¾ÕV[­·Þz]ºtIÙéÐT±ýªŸ¾Îg–Ÿ–½‰¯1ïv4œì½Fú,&O±ÂY⊊ÅŠ_Š!öÁǵ`rûp#}&ÁoáÔÿŒ’àÌ4åŸìœÆy6[§½¢å,È@~w‚†Óýnˆ¨ëúŠ_ˆ½‚]ë‡9¤Oñyæwð#> \‹2: s~<ðÀ=öØc›m¶Yýõ»v횎¯!®~¢8d?â“ã'9—y'­ZHŸ…æñˆ:†A!¾PüÇØ6ñgÐC`–׿.}ÖŠw7ÇWÞuXjòŸé”jjÅê°1ÚËÝ Tä-KGþE°¶S°§½‰9kU_õß”ùùØËØ¥°DŒ¿;£ñA¼øˆü‘N~* ÍÁòÎ9ÊœƒÞvÛm7Ø`ƒnݺ%êhˆ¥·£á7ofxÙ›øšó9 '˜´ôY(¾Ì¬2æÁׇ!¾àübì|bßRÝžö,j¥ÏÚðjŸVþ™’üÛ9¥šîózÓíåî?fdÿîm‡î0¯#d-ë«þ›?{»vì\(ýÜ•Ñø ^|D~¸Ó€Ÿ÷¿_­–ކ²Ï^{í5`À€¾}ûvïÞ½¶Ž†¸úÙ(‚£Aö#>9þaçÒb„_ž&é³h¼>6‡—B¼øÕÏ{Øñ§Òc`®ßšôY5ï¾äãŠ"ùaîwžù%¯7Ô^nãÿ Ìœ„ü-a!H#‚wÒ:Y_õß„øyØ ØÅ°3½ÄobãƒxñÑùýüJÀrbEbކÒÏ!C¸ÑFõèÑ£¶ Qô³±³´_ -Ù›øÎóî²'x£¥Ïbò¸S8¬ðóOˆ¿¼äð™ñgÓõá™`÷˜ô—ßÝ©í÷Jî¤IMþOÓOO&Ȇj/·{åá’ÀÔä ,öèŠ-ÁèåGX7«ÿÖ†ÿ{] 炟£AúŸS~/§¿í·–ˆo5¬ÖŸ}öÙgûí·ßxã{öìÙiGC$ý¸ó@ÿâ V’½‰¯9ÿˆÓï0i鳸<~ÿ4ÔÁ~ ñ…æ_Ç6‰?§žÿ´¯q¥ÏÎðîuØ[#E¢ò?á|¹íâç®ãöêål‹+J.wHGžYX§HÛB[yœEŒò£_o©þ[ÿ7ö,6vŒT-âçÎ,Æñâ£ó»: øÃФ³5ÏÑPÅgß}÷Ýa‡6ÝtÓ^½zu&Gƒ[?›†]8%ûŸ(ÿ¨s^:®Â¤¥Ïòñ"f#>â ÈÏÃNŽ¿ÆÝ^®0Vé3.¿ŸSɯE;¨R[ùotN?›D‹ÕÏVÿ¿cÏaWÃpØÒÏ3âû¬ël‹á*^Ãú¶bÃÂúàãaæá–§ºÜf꿎g.6»%æ\(ýܑŸ ^|t~§î¸V-;GCégèС;î¸c¿~ýÖ\sÍèžÙ(O?gi?9ßdoâ;Ï?æœ£Ž­¸6[ú, ï©åŸÔaE@¦ñâWÿå a;û~FÁüŠ$yÒgtÞý2ù¢ÿò%YùÏrŠÔ×gúÉ^Ÿ+= c±á°¡WàþA­Aå»·˜z·‡¤SßóºހNË?XýׇŸS±óa{ÒþLÈb|/>:ïN1óuùw-b¼Õ°,>ÏšEÔÏf1rËÞÄמu4HŸâq9Î#^üªí¸cã/v7«ˆð—>£ó‡Æ¹H2ùpŠ´vø^wÚúü×9_î9c·0Sÿ$xñWÛú>a;üÕÀr¢ÊSmDƒúoÓ_ØÓع0,?·g1>ˆßÜiÀ?T$¾É[DCLGC ýDÐŒìG|‚üãÎeÆ1QMZúldž˜¥ëÑéy[?þ’÷|XÛâõ4åÔê“Y¨t'§H]ÈÝÈó]Ì£†AÏ1aF>&•ºÿ„­&É)µ¤Fëæ¢<³±'±s`yùŒ×«'ß;Lrf°7®£!’ f†º¶ž„w6®£µÐßÑ ·ø¨ülìÈø«Þ-á}¹ácòÇ9UúhúÜ"’£!Gú|Ý9_^9 áâyI–F¬ÊúÎ 66„¹Ô`ü¯éº¹1ûï,ì lTÎ…fØ Ü×ßÞ¦ñV|¾ùuœüWpX–»w¬»îº[o½õž{îyàæÒÑ®Ÿ-:åh½‰ï,ÿ¤³—õø¤ôÙÈ|‡´U@«ÿ¦ÍïûâÅGá'a½c.Ž›àrXì-Pútð'9õù ßû^Òò¯óèDæú¼Ó9_NÅ"–„ “JJ«y}çb»† ÐÕãÎë”>+ýÃájxû½ä‹Eë¿¿ÃãØ(Ø&uçBØ.ƒ—±Ørš.pò·f1>ˆw_Ûð/T~Ä.Óµk× 7Üp»í¶Û{ï½3w4ÄÒOtGƒìM|üSÎÏ‘I ¤Ïâò kÑ“øó;vpüåòøTÑžÓš¼/ 5v K™7ŽªQ ê× ý`a2ò#¶u„ÎuOí~=ȳPÌî1ìLØ:uçBWØ.‡W°JÓº0ÄÑ aVO®Ÿ®N^RíÑ ßÏk¬±É&› 4hèСù?:ÑßYÚ÷êÚz’?%í°À#ttBMåÞ¦¶U¾áÒ¿q9*Ä‹È߃­?î÷ZXVá•—>Ë÷KòÄàåääw/ W_o™}î,í:%^ùÐòÛ°µ#Øö¹%›Wµªïcò2£AãU­ø™Ø£ØHØ2#çÂðj‰sÁWþÑÎrnÉb|/>"ßæºu”ßÉ.¶ÖZkm¾ùæ»ì²Ëþû£!®~ÜÃη«fÙ›ø¤ø)Îîy¸×Ñ }“Ç—}Ä‹¯‚ÿ²ß¾ˆé˜/šþÏ‹™ì-ù× »å1Wú\ˆ5w"¡QYù‡G3ìè‘&¡òÿ„EüÑcýB5^ÅâÃ&c§CÿÔ Ý`/¸^Ç¢çÍîhPûŠÏ¿Øù&ÓÍ98תß555­³Î:[mµÕ{ìÑÉ„UD48ô³Uˆ£Ád?âå§:»çaþçò¤Ïbñøþ[[ »¢I¼øÎðmØíØñ—×7a-»vÒg”‰›ýv;“–³°X•\éóUçdywàv±ÿŸŸˆpz°vPg䟉]Ý£õ£áÞ0cWÑù_°‡±Ó`‹Ô Ýa\íu.Ä’ÿ¢üâÅGäç9‡Ó5K¢*ËO$J—.l°Á€† ’¨£!Š~ܧ´¾éôü"^¼›îh> ˇD4´FDˆ_=?‚ß ¾ øÝ‚ëóR§ÞÆU¤LAþa­9/à7}º³åýèãár•¿(,{YéçPø)fù+Ÿ°S [äQrÛ…Æ«(üÏØ$ìØ< çÂ>p5ö¶¸Óý×}ÊMYŒâÅGäg;ßdÖõ{“ JU[û~Ú½ûÆo¼Ã;ì»ï¾5t4D×;×ì×Z/‰O˜ÆÙ=õËo*} ki‹ð ^|Õ|+v#Ö=þú{Öæ]KŸW9•vµ3~2!ù÷kÊϤÊDŸŽø]*fÊ(å_óš€ãàlIŸÊçKìlÛ˜çâà4¯JùŸ°±S _Î…}áìmlqÀFPuõ½Äù»7d1>ˆ‘ÿÕù&³‘s|^#ÅþÛ«W¯~ýúí´ÓNî„nˆ¡·£á+Lö#>QþYg÷<¤"íˆôY@Þuê–hóFMˆßIþlçø3úø±}•>—Óts¬¿¢cŸ$=ùOkħ±œèó}§öÆ¿Ÿ;Êÿ3þù ` Ø FÁuØDì^ì.ìl œ»CŸ*ò™Á”ÿ…ÆŸ•þ{;6IݹÐöƒë°w¼Î…ÚÖwL4GƒìA|ùÎñy p”¿{»v'ùð†ÕgâÌz÷îÝ¿ÿÝvÛ­2¡C¬£¡úÙ6ÌÑ ûŸ(ÿœ³{÷zÌ¥ÏbòŽˆÿÿ/¾¶ü2ì¬k̹¼g{.=és9M7:ÇúKœNå„ä¿8¬¯ ‰hHOŸG:sIüîwÌ5JùW“ýg¯ö‹95þ”a3°û±aãÔe Øþ‡½‹- HÄXÛúºV]ïç´Õü%>'üWÎÙm[o€£ü°©ØÙ°Uн¹¹y½õÖÛf›mýÖ‰èúq;¾ìˆh½‰O„ÞÙ= Ò‘>‹ÀãHíPñ…T|âÅWÍOǶ?‹¿U;/ >ouŽõxƒKÓ‘|XBÄC+v¢2Ñç˜CÐãƒSš‡–¿ Û5;Co¸·âì}ÁÇŸØ}Ø °QêÍÑ€qØûíÎ…4õsYXÍGâsËæœJÞÔà*&ö v"l˜æ•1ݺõíÛ7bDCDý s4È~Ä'Ê» U¤‘> ÈàŸ(¥l ñgˆßY~)v)4Ç ¸dG®˜úœàëÏ®ÈË‚üSà }K\ÝêÓ½ÁôIÅ;X¬òg`}R§í£á/O¼OqÇŸo±{±ã¡oê Ñ „°÷aY{sd¢·£á…?Åç™ÿÀ9•ìæÍ>SEù_bã±á°fbÐâÊ¿³´é›¿Ä‹å_tvÏa΀#é³ ¼ÿù™ ïE[Ày ñâkÅŒmz>fy€ ¥Ï{œcýH¿S¬IËÿe„+¿ðž M_ŸSœBî–/Š<ÓRô5ô‚óáï;mÇ“o±»±cÓÝ®\}ÙÞAp#ö!¶,,aRjú¹"Ú!&ÍGâsȿ奇ÇfÇ•g)öv ¶tÉÈÑWþ ²7ñÉñ/9»çÁ×[JŸÅáióóRTü×Ú*¾/^|BüB¸€ï©ÞOx²$¿`¡ôù€S[§@úò/Ž|ë2²þÂÖsŠ÷QEêä™›%¼<waó‹jÿËiú îÂŽ… R7X †›±±eiÞó ·£áÚ,Æñâ#ò/;­wÿŠÈ¸šÈ3^À.„íRw4Ä’ß}àtš7GƒìM|Íy·£á>ÅÓœ4ÒB¼øDùw°-âÏÓGÜ€$ê ¬Ï‡cý ~‡R?´ùúAk@PCÒú\†íï”í¸'Hç噇Àªt;‹}µ±í¿û »;ÖKݹ°6·`Ÿ`­¹×ÿ•!ŽÓ|$>·|èýyIËó'övj*·ÒÄ•giŸ9¯L’½‰ï<ÿr˜£Aúßq$Ì÷”…ã †xñIó ±³âOÕëÃ3§ŽUŸ;Çúcür4¤ ÿakJEœ:ú<;ìÒÁŸ<¸‘ç lÏN¯D7…“á~ìGOüB!ƇVì ìNì(X7‹üš‡Â­Ø§XKXÎ…\éó*g½®ñ-5‰Ï ÿ¤sv;ÊëFOZžï°‰ØÐ;Ý Aò„:d?âå_qvÏýr4HŸ…âi Náàø¾xñ©ñ¯c›ÆŸ°O¹ÁyPLŸO;ÇúÃ!ùÇF8þ²kpJÈäôùP˜`ü®„¬•<c£ã¦è ÛÃ(˜Œýâ¬!LJ6l:6;Öɹp܆}Þî\¨G}ºoZ[ò6¢ùH|ÞøÉañz™Èߊ}„] …hˆ.Ï  ²7ñÉñ¯Fv4HŸ…åñuQ”ž²p'–/>þ_ìäøsöFðRÅ©õ†ÔÏsq®2NMþç£åÙ˜êÜNZŸßc½œò -9U˜¨<³°g°›° á88¢ý9.…[±)Ø··!¨¿·aŸc·c‡Cú×vôÃa<6 kóÛ¬;}º Wg4>ˆ…ÿ?çÁnŵSw.¬GÁ^çBCêß}ˆéªìÆñâCùÛœÖ{¾7 Wòÿ„݇'[m\yÜŽ†Û•#{ŸÿFØâSúOPR‡€{,šÄ‹ÏœŸv1¡ïçXœ©®õóŽs¬ßÓ/GC:ò¿9’ttEòðÚÊó5Ö/L†»««?Ö_é\¸k¥î\XŽ;½Wu4¼þ¯qvÃ+³Ä‹åopZï¿´öy«o+6 »kÄs4„”¿s„šeoâ“ãßtvϽr4HŸ…âi 8Sáw$£üŋϊÿ;2þkÆ–ð^ÅñûÐχα~ÈPþ="·Î=%îÒÚÊ3 ëöëçUlþ¨?ÖŠoÁ>ÂnƆ5Sw.lÇÂ]ØW÷tDÿ×9LJ+2Ä‹wóQâq꨾‹±·±+awhvæhˆRþ.ΡïC¿HÙ›øònGï[ú,&Ïr¿/8\âÅ燋{œ» .+ mh ý|êë•,_Ò—ÿÍÈA ]Jî%­•6Û?ìøqŸ`Ü‹}ïÝ»S{•þÍ8çøpiÖãƒxñŽ=Ç9L𽋣ŸÝœÊù $rSö&> þhŽé³ÈJ&ré³à|ˆ,ð3âÅç„oÅ&`q·U»Â X‹ßz¥^ôó«s¬ï[2Ög% 6¸ÚËp¼ŠÍÄZÛ›iö6 ›WUìhñË ªþåË/ÆÞÁ®Å†fá\ØN‚°ÂÜ‚j¯Jþ†hŽéS|ù“œ#äŠwéBéÇkùÝ€€MÙ›øZñï:'—=üÎåIŸEãý¯·Œè®/>‡üŒªÞiwƒïü2'Õ…~þpŽõë…]_—Žü?`5¹Î°4u®„^ð”_Rõ¯²ÿ.ÂÞ®Áö–í¢¶ŸÍàdxûÉϹ öŠÎ» —äc|/Þ—?Æ9J<à,.ˆ~öt*çŠL™²7ñµåßwN.»‡ËIŸÅá]G'¢ÄHˆŸC¾»1f^ ;Œ/Ù3¯£úÎuŽõ½+v,³’ÿ¬‰Œ?ûÃOÁ÷hª-ÄÞÄ®Æöι°9œ “°Ÿ+º¡Ú«jÞ}péâÜŒâÅW>‡9GŒ)u8_×u4È~Ä'Ê» »d–> Å—®0¬-ÂݘâÅ× ÿ5¶KüW!í™먾ÿ:Çúžþ‰³‘ÿŽ˜ÉjøY >³Zäþ²{®†!Ð-õvÙNƒ‡±_=Ëbo5ãÝŽ†‹ò4>ˆ_ sŽ/äh(ˆ~ÜÁ›ok¾Ÿ0ÿsrÙ¤Oñ¸¿³<šC¼ø|ò˰k°®1ß|z¶§˜ª—ú.vŽõ]Ãv,S–ÿ,å·Ù^p5Ì«X’¹¿,Ä^î„ÁY8úÃ0û-ž›Ú«“ü-ÎñatÎÆñâKÿ°¯s$y­ä\Uõ³—S9o…ÝB'{ßIþCç䲋3ôY>^Ìd”¨ ñâóÆOÃv¨*Æþ×àøí\Õw™s¬7¿±>[ù?Ä6Jå…¶ŒÙÎë ŠÓ_`¯bWÀžÐ5uçÂV0ñÞ$¢ñ*Þíh¸0ãƒxñ9PýDq4ÈÞÄ'Çäœ\vž\¤Ïâðè‰ø"ðK°Ë 9æ«ÑZðP„# y¨¯;÷Á2ç5W™Èÿ7v^ü‰þÙÀ\RPûŸ½‚]{@—Ô [ÃYð(ö{À’WãU ü­ÎµàÞµ ô)>WüNÎæãb'ÜâTΛÅN`!>þ㘎é³€ ±©Øé°YXCtíáT¸û±ª–ÐóöuN.ƒ4¹è‘£AOaŸبø/WëÃÔ\NÞ8ÅžYo Ž?±·±G±;°›±›±;°ÉØ«Ø lY×OcÏaÁNY8Âyðö—–°r4èÑ“õÔ¶òÓöƒqØØÒ" MCjyU£´ž„ŸÏœ“Ëš\ôÈÑ §àÏkئñ_·N‚¹9›Â7v ü³õüÌÅžÅFÃNñOýtòc°œS°9²¢ú|nwZ͹Z êÉñÓ;þeÆÃá6lÖÚèCÖ~r4èÉôùÜ9¹l¯ÉEÏjGCk×êü_ñâë—Ÿ‡ÿ¬/¼<‹§_ßÍÒ–%G”=䟟‹=ƒ]ƒ²p. ‚ `*¶Ò¡¦öªk~‚Ó‚ÎéS|nù»Þøh˜ˆ}ë|å®_ý¸ ¯ÔZö&¾Vü4çä2¤Oñ}'´hñâ‰Û0þ:f$Ìó{K_þ­r~æ‘=䟃MÁ·²p.ìÂ3Ø\LíÕHüNk:Û¹é$}ŠÏ–¯Õ± áDxû¹Æ7·£áåöšÊÞÄ'ÄOwN.Û…E4HŸEà‰ì·hŽéç/¾Îø9ØñU]yð†Ïk|Úò»ï›ÛO){H‰ÿ {;¦žp¡ v‚‹àYìïÅ·Ú«Žù;kÁQ }ŠÏ'¿0ë0븂·^õ³˜£Aö&>Qþ g°ÊÑ }š'4"¢ëB¼øÆàŸÆÖ‹¿p9Æ m¨¹ü;9Åû$쬦ì!M~6ö$v.l—…sa¸žÇþ‰pöGíÕüDçZð¬Çh¥Oñ™ðó’íçµGrÕ~pVmõéNÙ›ø„ø/=tÛh9¤ÏÆæñûNsĢŋoH~6vdüõJx¯d¥’²ü»9e{¯d¿Zí› ÿöv6l›ºs¡v…1ð6/xé©öjTþ.çZðL>Å瓟›â2ƒáx›ß1cæZ?:kô"&{Ÿ(ÑÑ }™÷7‚Ö0¿…xñ Ï?ŒõŽ¿R‹*¢ÐS°S°7’AÊåÇÇFÁ6©;ºÀî0^r:Ô^EàÝŽ†‘ÁÉ ¥OñÙò³ÓNVÓ1~†«àmlQŽÇÏaÎZ<ï²”½‰¯9ÿ•³‡nãL)}„§- úKñ➟‰ ¿FÙ¶ý¨Bšòïáš+µo üïØcØ™°u‹ã=à2xû7Â=#j¯‚ð÷„9¤OñùäÏÈÑPúéûà ؇Ø2¿ Å õsPGƒìM|rü×κ5HŸâq;'Z+B Ä‹/¶fü`õ«±%® 5–?b¥Ú7 ~&6 [¥¾î {Âåð*M R´7ñuÄ» §ûåë’>ÅçÿÅiº=SOs³ã±/hjÍÁx{°SÚç¼Á•²7ñ5ç¿qöЭ:Âå¤ÏâòDÏñÐ3'„xñ Ãÿ‚ ¿(Ógj(¿;ò♀;Ô¾Uó¿b“±3 êÎ…n0®„W±…Ñö¬Ô^Eæïàh>ÅçÿÁiºý ¦ÙØcØÈÔ‡âuá¸û>BÎÅ„ôãž÷Ÿ ždoâkÂëì¡[ú…ËIŸEãYí“Xí–hõú*Z]ˆ_(¾»[#þ†ó ØÒ’ÌR É„SŒ'½ µouü/ØCØé°EÎ…!pö¶°ävtµ—øPþ>çZð4>Åç“w¿Æô‡2þWlv"l’îø¼1œ“°_JN)¦ ŸƒC M²7ñ‰òß…õPéS<­NŸDð÷Å‹/"?²+|ãSPCùu ðHûêGí—ÿ›„ ›§î\è{ÃÕØ%ε—ø¸üÿ9ׂ§‚ô)>Ÿ|”TsAå‹Ý… ë¥;no gÂج@ÿ~Íô1¢Aö&>!þ{gÝ¢ÄÑ }–§-ÀåÙ–RR¼øbò˰›±îñ_Çc-a§:«–„ó×'U¤°Rû:øŸ°°S _Î…}`,öV{¶sµ—øNònGÃ)~okÒ§ø<ðÓ¦»D,6k§;ž„óáYìŸ §CMôsˆó×§&¶Þ/~åãv4lp¥‘ôY(žJ?D[@‰­%ùÄ‹/8ÿ5¶KüeÇ^ðCEpAMä9Íù»÷­Zp¨}ù°°“`Ó,²šï ×boc‹KŽE¨½Äׄâh>ÅçÿÄiºƒJN€G,ö!6Ûz¤8È7Á®p)¼‚-ðtF?‡†9doâågDs4HŸEæËN´zÏW8üâÅœ_Š]‹u¹àè w­šþk)Ï™Îpt¢àíûv_z5`?¸{§ãžvõ/ñ‰ð8ׂ'>ÅgËà4Ý¡3å/ÆÞÄ®†=¡kŠƒWc±wJ<ËÕéç0ç=ÉÞÄ'ÊGI×*}œ÷_aø†@8cˆ_X~¶Cü¥Æ~ðsE`|gä9Çùsã‡E Õ^ßc÷a#`£,œ ûÃ8ì]l±ß¦–ú—ø$x·£á$W2HéS|–ü»NÓÝ£äÔO'åY€½„] ;ASº“Âp#öqÉÉÊèòæh½‰O”ÿ1²£Aú,,O«ŸO¢Õ¯” /¾àübìrhŽ#÷ª«–çBçoÝܾ³QÌöú»;ú¦î\è ÂõØ{Ø’’ý%õ/ñ©ñ“œkÁAúŸOþ-§éîÕÑP[yþƦ`çÁ¶éNkÃap;öeäù:ô¶)Ù›øDy·£aSo¸œôYLž6?·D£"è_Å‹ÿ1¶MüµÅpø½âB*äãü•q~Ù§»½¾ÁîÁŽƒ Sw.ô‚apö>¶´Ä—¤þ">>ÔÑ }ŠÏ'ÿšÓt÷…¤å™…=Šžú­CëÃqp/öCE˜C©„GƼÖZö&¾¶üÏκ‰7¢Aú,&_š ²¹Ì-QyU¦÷âÅ‹÷<‹°Ñ8Ç]¿OxÌ»×]…Ä–úh[ýE|füCÎÁá>Åç“Éiºû—D4¤ Ï/Øý؈Ô#ã6…S°‡°ß*"Ü OøEFÈÞÄ×w;6®H$}/k)óRå“/^|ÿ.¶EüÅÄÑðgÉÞE\y®q÷Wx“A6’þ¿Ä&bGÃú©;Ö‚ƒáfì£vç‚ì_|ù‡ƒÃñ }ŠÏ'ÿœÓtò¦ISþo°;±#at'­a<‰ÍÆZi:*‚£Aö&>9þWgÝhU•> Ífr¸+Ä‹ïæçc£ªŠ–œµ1TžëÃý%žK†ê[ÿ­Ø—ØØÑ°^êÎ…µá¸û¤$w—ì_|žùÉaŽéS|>ù)NÓ=Ô;¯e5}ŽÝ‚ ‡5ÓŒv€-Àã^÷·ìM|Íùßœ=´oE¸œôY@¿(ˆæVïŸ+C&ċʿ†mõp"Ìñ D’ççp7Ä´îôÙ‚MÃ&`G¤¾ƒô†CáVìSš–•4ì_|]ðnGÃqƒƒô)>'ü“NÓ=r%ÿRìš®Ãö…îdÿy “½‰O”w;6¬È4,}§ô›Ai$+âÅ‹Äÿƒ;i}á…ŠË/ÝòÜîü•³=I³êCŸ-ØçØxìè“ú­·aŸc-^ç‚ì_|}ñ8‡c˯·”>Åç…ÔiºÇ”¤šË›ü ±×±+`Oè’‘£áQ¿k­doâkÈÏtÞ»Ïõ–Ògáx¢E´_\!^¼øPþ¬Š»΀yÞ¬ yîr.ÈFB]è³û½S_–­GÀíØ´Š+ÍeÏâë—,ìmMúŸOþá°<¦uQß±ç±Ñ°cü\Ñt4ÈÞÄ'ÊÏtZôÞˆ鳘|`@u«Ïݘ͎ ñâÅ;ø9Øññ ýàõŠ+ |Ë¿Ï9ÜŸê 1Í•~–aŸ`·`‡fá\XŽ„ Ø4µxstËžÅ7ïv4 Ò§ø|ò÷;M÷$¨»úÎÁžÂΆm’ŸÝ)™Ñdoâ“àwöÐõ;¶¸¤Ïâòûœmþç+âÅ‹Ë?U‘¿ð<˜ïÜšh£i’s¸Q±ó“­~Z°Ûh­ºsa=8 îÀ¾ô:qdŸâ’Â98Ò§ø|ò÷†9Ð뺾3±‡±Ó _23ÝÃ~ËÙ›øò8{èzéZ¥ÏBñå·‡º1Ä‹ßþOìÈø+†þðn@hCij¬™ëg)öv6ÖJݹ°Kœ ²OñáC Ò§ø|ò¦{fÅ`^¿õý»;6¬µ£Aö&>9~–³‡® Rú,_„DD[ ^¼øxüd,î1ƒ‹aQ€71Bvî ê»û»;(õ«¿V:Ž…»±¯"DÊ>Å7*:8HŸâóÉOˆä¸ñô³òþæ#:}–ðáŠ;’doâkËÏvöÐu¼ÙÁ¤Ïbòù$‚¼âÅ‹¯ ?;8þÒa[øØoOþçp0¤Vß%ØØõØ0蕺saC8îÆ¾ v.È>ÅŠâh>Åç¿ÕiºçCcëge£›±ƒ güÙð!g¤ìM|çy·£¡óîdé³ <•Ή6Wú‡fñâÅ×ÿ?,îV3\ ‹½Wd¿èîðË÷VÃú.ÆÞŮǨj=ÔÉÏFp<Ü‹}[~¥ìM¼ø¨ŽéS|Þø¦;Ú'¢¡aõ³”¦w±k±} {´™q’ODƒìM|-ù¿œ=´·']«ôYP§[¢¹Õé·/^|çùŸ±¡ñß®Á´’MûלÃý>Psù—Ðô.v¶?¬‘ºsac÷aßwlÚÈÞÄ‹÷yžr‡G¤Oñ™ðÿsšî˜àטÆÖÏì5š.‡u³äƒž°>Ù›øÚósœ=tíh“‹ôÙØ<¡Q~Ž ñâÅ×’oÁîÀâ¾®w…qØ2¬•¦·œÃýžÁ׀Œö6v-6z¤î\ØN„û±~9®doâÅûòO;‡ÃÂÎUIŸâ³â¯qšîþÙÒÏIÎóÿd²7ñ5ãç†9¤OññV±Îiˆ/>?ÿõ{Wø{Ï9Üïí¤œï³{ »9b³†Ÿ~p2Üýù¶Ù›xñ¥Ïçàphð­Ò§ølù+³ÃX§Ç¹ú9Ù©Ÿû ¯ñIónGÃZÁ Ògqxî«hŽ/!^¼øšð-4ÝŒÅ}Ÿï†³ˆ%ÏBì llœã 5ül§ÀƒØ>ÎÙxññø©Îµà!añçÒ§ø¬øËœ3ÅuXÁõsŠS?ÿWxýˆOšÿÛ9¹¬ Ò§øR#ˆwBC¼xñ ñ_c»ÖôÕ}€_¹¹òØçëØU°wÎ…ÍáT˜„ýuFö#^|¤Ç}%ÍpÿM'éS|öüÅÎYã†;ö©·£á¾ÂëG|Òü?ÎÉ¥W`DƒôY ©I¼øòK±ë°®5zß*`¸_€½†] {A·Ô [Àið0öKøzHö#^|•ü³áwßJŸâóÈ_àœAnœ8Š¢ŸS«t4ÈÞÄ׆Ÿçœ\z®ZyJŸ…æ‰Yœ=zÒ{¦a;Ôè0Âê2çc¯b—Ã`蚺saK8Æ~‹s|T=U?Ï9ׂ¡e€žœ>ç8g“Û ?‰œZ³ˆ=zªyþuN.khrѳÒÑÐârNtü¹¥ââÅ‹Oš_LÓÐܹ×û¾ðv9ì‘…sa+ `3Kê¥ö/>>Š£AúŸCþ,çÌr'VpýœæÔϽ…×ø¤y·£¡G»£Aú,2_ÖÒö&ñâŧÏŒmC=}¶³°G±™˜ÚW¼ø ùçkÁaå›NÒ§ø¼ð§;g™{0éGúŸ!¿€&wžréS|İ8/>c~!vÎ7†¬?ÛÂ(xû#$bSí+^|zü ÎaãÀØÑ­Ò¿ø”ø(·*Y?g8õswáõ#>i~sré®@âi"Ì9QúOÍœâÅ‹OëŸ'çÂ8žÀfErvª}Å‹O›ѹ< $_—ô)>Wü ÎÙg’ß‹t¡ô3Ò©Ÿ» ¯ñIó “K7>Åô–hÎ ñâŧÌÏÇÎÉÔ¹°œOb†åšR{‰Ÿ9ÿ’s-¸pDƒô)>[þXçL4yÕT\ýœéÔÏÄÂëG|Òü"çäÒÕ.'}„¯Œhð?†Qé¨/^|†ükX¿ ÛÃyðM³ýŽ}ª½Ä‹Ï-ÿ²s-¸HŸâóÉ霕ž(§8úž,Sö&>A~±sréiXú,åŽÓæÖ€/‹/>CþoìôÄ< ÛÃù0…¦¿\‘ j/ñâsÍ¿â\ -O .}ŠÏ ˜s’zÚgb*–~Îrví; ¯ñIóKœÉ ›K"¤ÏÂò”ù$Z|ÂÊ[ˆ/>?ü XßÚ9Á0›ãÝ ‘þÅ‹¯SÞíhØ×Ý*}ŠÏ°sÂz¦äEº˜úåÔÏ…×ø¤ù%ÎÉ¥©$\Nú,,¸•ÑâÿýfñâÅ矃P­s¡ v„ álnùºDú/¾îù(ŽéS|ùœ“× %Þðbê'¢£Aö&>!~¦sr1O¸œôYPž2EK×ì½/^|~øžqœ ;ÃEð,ö7&}ŠßÀükεà> }ŠÏ'¿¯s"{Ù“0¨ˆú9Û©ŸÛ ¯ñ‰òŸb›†­6¥Oñ´ø'¼ßi®Œ‹/^|®øõÜ »ÀÅð¼Ç¹ }Šßà|¨£AúŸO~ˆsR{Ãïh@¡ôsNGƒìM|ücXÛZÒ§ø²Fs‹ŸëÂ÷ËâÅ‹Ï?‹¦?±°aíöL<»Á%ðö×¹ }Š_þu§£aHû¦“ô)>oüÎw˜·Ûwì «Ÿsú¹­ðúŸ¿ »2rü¬ô)žÒø‡ÊL’-Þ ñâÅ癟‰½„Í«¸ÝJú/¾h|¨£AúŸO~Wç;Ìû«&¸âê缎ٛøòcÅÉÖâÙâ’>‹ÈSyâÂëŸh®ôXˆ/^¼xñâë‚ÓéhØËÑ }ŠÏ¿£óæ£öw˜ÂêÇíh¸µðú_[þ¬/Þ Ògy´œÁh øñâÅ‹/^|žù×kÁÁ }ŠÏ'?ÐiºŸ^ßXýœæh½‰¯ÿ<¶V/ðx•«Kú,4ïsǩ﹋Õ^ ñâÅ‹/^|½ðw9—ƒëÁdl&&}ŠÏ¿Ót¿(Ù±/¦~ÜŽ†[ ¯ñµâoÁ,²‹¡&`Ò§ø–ÕÉ ·V”Æh ‹‘/^¼xñâÅçŠ?%Úêp'¸ÞÄÜŠ'}ŠO™ßÒi±ß`×Ï…NýÜ\xýˆï<¿;6N Ã:ðZEré³È<-?Ds‹7cd‹ÿ=™âÅ‹/^¼ø:àï³±éS|üfNCý¾ðöév4ܤþ+¾süÏØ 8sÇ@ø¡=8Nú¿úÖ‰À ßk*Ä‹/^¼xñuÁÏÁš¨þ³)œ Ï`{_Z¤ñ)ð›8ó'ïÑ€êgt˜£Aö&¾jþml½8“Å‘0Ï '}ŠoÏÑÐâùàw£¹ /^¼xñâÅç–£ŸfØ®Ç>Å–z÷¬¤ñ ñ8mò·ösà…ÕÏENýÜXxýˆ¯š¿ëg‚¸²äö"éS|é¿â{Åêï{2Ä‹/^¼xñ¹æO£öŸ>0Æ~+9‹+ý‹¯9¿®Óo7¿Âêçb§~®/¼~ÄWÁ/¦éÌ8ÓA/x¦$õ£ô)¾Œ§¥ü.Šæ ¼eþ ñâÅ‹/^|žùMHö3ÆÀë«RHJÿâkÉ¯í´½9ÁyÈ ¢ŸPGƒìM|,þlpœñ ø²ý„Žô)Þ—§2æ¡2"¢,ýƒxñâÅ‹/>çü<ìhlMÒøô€C`<ö]û1]é_|'ù^N“+ÉRPý\â<5®ðú‹ÿ‹å˜>Àëì“>Åûò´ú}9èÄEeŒ„xñâÅ‹/>·üû¤ýÙ΂)Øì’=Uµ—ø¸|w§™ÍïØ.¨~.qêg\áõ#>:ÿÖ=Î ,õf•>ÅûòeG'š+ó=x¿Ù,^¼xñâÅ‹¯þÃ僬âÓCàØÇزòE‰ÚK|ßì´®E%±3ÅÔÏ¥Nýü¯ðú…_†]gTïUä–>Åñøº!âÅ‹/^¼øzá?r:zA·Tœ½áx˜„ýâ}ÿQ{‰âݲ¥žEÔÛÑp]áõ#>”Ÿƒ ‹3ŒozÇIŸâCx|£ ZCJ/^¼xñâÅ×ÿ±ÓÑ0æcS±Q°EZ‘ÛÃ%ð¶ Âé ö¿òKœvÛÒçeÎ^vmId»ìM|%ÿ¶Uœq{wøÝùsÒ¿øJž(.Š–ÀK2Å‹/^¼xñùå?q¾°í¥üØØ¡°v*‡îp0ÜŽ}¼ûªö-&¿Ài·Ý@útG¼_ãwë„ìMüJþ9l­8cõI°p•ëJúƒ'J‰Þ#âÅ‹/^¼øúà?u¾°m_²3\ZÔì ìRØ‘”rÅGç)ýŸÖÈ%Š/^¼xñâóÏGt48ÊŸ=ŒˆõM+…ä`¸ûkOl®ö-?—&‡‘¬Ua·Ô§ÛÑpuù/²7ñMó±câŒÆëÀëN•ô/ÞÍE/Q¼xñâÅ‹ŸOþ3§£a Ä*ÿSìlŸ´RH® ÇÂýØÏÁwõÉ’Ÿå´Û>Á ÅÑç• ²7ñ¥'ãÅL¦ócœ7Lé_¼#¢ÁÅýöî3<ŽêüûøïìÚrÇ 0ƒ1Æ€Á›^ ÆtªC á¡·½ ¦“Ý@À?½8@cš)6ÚUwï½H¶%žöJ[fG;«3£Yíw/..Yúhtæ>çÌÎÜ{ŠÓáðx<LJݿíúÉðÖl9¿T‘'dN—µ„ä6ÒyÒ³2¥ãximÏOpM4¬/ÏK\ûË%NÝ„öV´þE™^^®·GH“³7!â‰ÏÑË=]QÃÀãñx<NÿŽëÛV®l9–çs™Ûdj Éi„t£Ì®R´‡‚ö_¸&È6’ˆç%®]û’ÔÁJ´·böwÊ´ËùkY*â‰o¹Wö Z—h°Sžr™—d.’ÙA®‰ö^I'I(21ýΘöPØþS×v»IJ‚¬Hãy©kˆ.–hoø¸ÌÉ^®¨]¥ÈO¼-¯\FDä8pÇãñx|¨ü{®O#[J>•ç{™Ñ2ÇÉlHÆÁH;K—ɼ&Sî6ÒöS~œk»íŸµÝQ H|ìÙŠå¯yEæbi§ –ÜP%=$óm®·V´· ýX×v»C3 E<¯l&Ñ Ú[±ùïeöór%ÜXzC†xâýóÊ@‘ÌïT:Çãñx|Èý‡®ï›;=´bù'Ê< s‚Ô7¨%$‡J—ȼ*SÖô±í§õý¿]Ÿ¢‡¦î:Qœñ¼Ê5DH´·¢òÈ ðrõÛEšà0–xâmz9%'¢ÙKDñx<ÇŠÿÈõids)´åWæ:™áRÇ –<\æ.™O“2´ŸÖò/º¶Û]1-®x^í¢óf—ÐÞÚ¬B¦«—ËÝ RÜm`<ñÇÛñJKu"ìç;^‘»d—zµ„äpé:™wK²ÓÞ‚ñÿrm·Ã%âyM‰Ú[Ûö“9ÂË­—ô¢Û–ÄoÙ+5÷ÍžŸˆ¦¥+ðx<LJÜìú4²ib|uÁo¹Ì«2—È •¢$6Nù:iù4Ú›Oþ ×v;"}DC1ÆóZ×›2¢öÖý§2ƒ½\ÁKóˆ'>ïp‡‘œ¢Èåˆx<ÇãÃéÝ ý¤6p¾?È<$3Jf“ –ÜIºXzE¦,£Ø´O+þq×v{`ƈ†"ŒçrH4ÐÞÚªA¦——«Ö¯¤É2İO›Áu™†Q•~P<Çãñ¡öŸº>l’:u¢ œïû27Èì+u $éÐU:TºCæ“ìóTiŸyøG\wK9$éãú¢§{¢áœìËXÐÞ Ýß.õ’½ÌaQ≧¬•%-MþÇãñøBñ9$Úf|b2OËœ#³UPKHn!)=©È$Úg ýh×v{xꈆâŒç›K4ÐÞڞɌò¸™Î?’V´%žø€½ÃسäŒE¥SÇãñx|Aøÿ¹~2Ü·iêD[ŽÏ™?Ë!õ $ãÐ^Ú[úƒÌÛ©›VÐ>s÷÷º>E-O÷DÃÙ©#homÀOÙÙË…h€ô×|«zÇ¥b¢N¿™yP<Çãñ¡öŸ¹>lœ‚^$ñ©”yMæ2™ƒZBr}é8éo‰%$iŸ9ú{\Ûí±Y?®/¢x^Ò×y¥½¶Cf#/Wžý¤‰éK?O|Ð^É‹C¦®*ÍøåhÚb’x<ÇãÃìÝ ­ûسãóƒÌ#ŠüFÚ$¨¹;H¿—^R$ž4·‚öìèïtm·'&†ŠswO4œÙ´Œ×Â÷÷É”x¹Ôœ#•'mŽC<ñ­åUå<§"--ÍX[Çãñx|Øý®O#}sÝ‹<žÊüIfDPKHv‘–n“ùÔaínÚs¤J‘Û\ÛíIýý† \ ÝWÈœïåÚÒA²(ñÄ·¦Wæ,‹äEêLŒ¨ã¬ <Çãñáôã]ŸF6LÑ@“,ÒøßÐÌS´hŸî¹˜ß&–±àzX þ=™Í½\@v•¾jÚÆ’xâCáU™>Î!꺪dÇãñx|¡ø/]ŸFÖ—ˆg³¾Ræu™Ëev•Ú’tè-+sŸÌWIŸKUüÿàÚnÏMÑPŒí³¹Dƒ¡ÿ®\¦«—+Æ()Ö”e žø°x9 p˜€ÑÈðx<ÇŠÏ-Ñ@k]”h·ÅÜ>ojn úoÁùI2‡{É2ô–Ƥ~˜L<ñ¡òJûe—ùië=àñx<¹ŸàzÛÚÛi<âéÕÇdž—9_fpPÃ6•N“—ù!éÃ̶ÿ‹]Oÿ’u©–¢nŸ·¸víS%úoaùOñtÙNú,i£\≡W挋´¤E¥ÃP=<Çãñà¿r}é•>u‚x¶ÔOù«ÌÑÒúA-!¹»t•ÌKH¶x^èzÖ—'δ˜Û›{¢á”ŒAôß0ûçezzéø¿’&·¡þŽo«Þù#iÞ…ó>x<ÇãÃï¿v}é)OŸ|…̹Rf7©} I‡^Ò¯eî•ù2cñù‚‹çï\Ïôš¤]9ж½ÝêÚµONì:A ¿¿M&šs77Ò´|x9æ$*3þ™ñ#<Çãña÷ߺ>ôH¬ÞO<}õ?)ò¸Ì©ÒfAÍ­ØV:_z^&–1™¶ ây¶ëÙ]—eDCQµ·Û\»öIN#èaó1™½ôënÒ?eˆ'¾P¼2¦Ud]721éÇãñx|ax÷DC÷¤ãˆg0þc™[dº’qè$ Ý,3.}M¯PÇótדúSÖ!EÔÞnÏ!Ñ@ ³Ÿ 3ÌK_ÞBú iQ≿WêÊ ÑlÓ0*fhàñx<³ÿÎõid½¤=‰gÀ>.ó‚ÌÒvA sè'"=¦È٧݆$>§º¶Û[RG4gûqO4ŒJíÚôǰù±2}¼tÞý¥‰M+¿O|axe[æ¡*}‹hfÇãñx|˜ýD×§‘nKÓÏVñ_ÉÜ+sLPKHF¥]¥+dÞP$m ÉÄg”kùoO*sѶŸ;rH4пÂéÿ*Sâ¥Ãž+•'FñO|y5›™¨t^gÇãñx|Øý÷Џ'ˆgØüÿÉ\-³GPKHö”Ž’þ"3>i˜@«Ççx×2ÿ9cDC¶Ÿ;¼Œh …Ä—Éœç¥{v”F'-Ê@<ñ…åUé:|®1]‘ËÑñx<LJÊïú4Ò5·§âÙ*~’"—ù­´yPs+KçIÏÊüìô$d|Žqm·MŒ!/æös§kˆNL]ç•þ?Q‘}¼ôǾÒÿeÏ©O|ø½2óÙ~93]Çãñx<>Ìþ×§‘.ñ,ÿ‰Ì­2I]É8t”ö—n”ù é‘>Èó=ÒµxË(U¶Ÿ»\»ö ‰Dý+$þ]™þ^úà®ÒW© 5â‰/8ßøQF®9 <Çãñ…ât:ÑÙaDñ µË¼(ó{i{¹>hÚ{õ•N’‘™˜ÓŒvÎ÷p×"=˜åcÞ¢jv­ÿã%úKxüã2žv™ùËØÆ’xâ ÎËõw¢ÍÇãñx|xýO®O#RG4ÏÂòßÈÜ/s¬´aPKHî"].óš"åN :X<߃\KòHú3X1¶‡»]»öq)¹úK«ù ™+½¤Û%­uJ<ñ…îƒLúgÔ1QÇãñx<>ü~²ëˆ†ŽñlþM™keö’JI:ô~%Ý-óź‡"Ëç;Òõ¯?žºSFq¶‡{\_MÏ!Ò_ZÁORäP/ݪ·4&µCO|A{å0 ÂmàÇãñøÐúÉ®O#²/I< ÔO’yBæti@PKHn-#=º„d Ïw_׿ø¤ó¨òâjÍ% ý¥uýÇ2ÛxéGC¤ÿ¥×ñĶ—KZ"{öÇãñx|øŸ]ŸFJ$âÙ†ý§2·Ë"u $ãÐAÚOºAæ}§Oe=•o×?ôt‹ßü_\»ö1í¿ýs2=¼ô£¤ÉYíˆ'¾P½Ëbî;gâñx<»ÿÙuêDIN‹AÏ‚÷e2/É\$íà’£¤‡d&º>kùww=øóÙ (žúý«kMþZ¢ý·–¿Y&šsO1Ò•´g|õrú±K#ŠÇãñx<¾P|n#ˆgùoeFË/õ $㑆I—ʼš²„d3åßÙõ˜cšÿÀ­í×o‰ÚоTæ/½£›ô¤ ñÄ·U¯ŠÔïV¸¥%ÒÇãñøPûR×§‘öIS'ˆgú·eþ ³OPKHv——~R¤ÙòïèzœËP¿÷ºví£R+Ñþƒð_Ê õÒ¶>Ldˆ'¾Mzå6."êqÇãñøÖ÷1×§‘vñÄW*2YæI™3eú?¥"—ò q=ÈëÍŒŒ(Šú½/§Dí? ÿªŒ§!B#¥ï›yNüñ…íÝï0¢®ù <Çãñ¡öq×§‘hb|5ñÄ7~ý?™;d“Öó!Ñ0J&—ò¸/×ÿfƯa}ÝïÚµLMèÐþ}õ÷Èxô;©Üm]âo#>Ç;ŒFÅãñx<_(>ÞÜÚ¿•þ%ós®wÄ¿ˆ|™ÌË2K;ÉuMQ/¯‡š6Œp+Ï ×ƒ¼“uDCÕ×ß\»ö¯œG4Ðþ-û¸Ì9^ÚGéuÓ%ˆ'¾íû´lM¨"ë(<Çãñ…áËsÛd “tˆôg™/3n‚‰'¾RÑïd9QÚ¨e CNLù 7ky¸çƒ$Y´õåžh8B¢=ûí¿“ÙÇ㼡7skÿÄß6üÚËP45-Ñ„’޵îwðx<ÇНð¾›áŽÒe2ÿ—úÉ3ñÄ7úwe®“.uðØ´†%MÕq/Ϧ®Çù(eDC‘Ö×èæ ´g_ý;Šlæ¥ñï&}´ô#ñăWsc!²­3‰Çãñx<¾|ÞŸ?÷‘N–þ!3Éa^=ñÇG~–ù—ÌÙÒ ÜZÔ¥Sœß×õ8Ÿ&},\´ñwO4žX£öì‡T¦³—kéÉRÌyQâ‰oË^N¿“¹1fÔñÐx<ÇãCî[>¯¾D)Ý.óY–[ âÿLæ.™Ã¥îÙÒ«9·Ÿ ]äçMÃmŠ7þ6Ÿh }Ú÷2—{&Ö^º#1xâ‹Í¯XÕø­Š¤ÿgüNSºÇãñx|Ax»»l+]$óšL… ñÇgúr™W¹DfXê’Ý¥r™ßÛµNhšT¼ñwO4*Ñ>­ûdñrµì-½ìð F<ñÅâóÑŠ,C#*Ó']àñx</oäË«·t‚ôˆ"ß§.oFüñ`¢Ìƒ2£¤¾©Ÿ±7{üî®mï[§©Åÿ‡šO4Ð>múe¶ör…Ü^úl]fxâ‹Ô«"cÉä%*† áñx</¿©ü}µ—†K7Ê$/ÑGüñiþ§¦‡®æ}×&÷}Êhš"çC»NÐ>­øgéáåªx´Ìd®‡ø¢÷rÊI¤ ~¨Ì2:Çãñx|Aø·e®”&Ÿ“[IçKcdÊÒ?¡¾ð¼û~“’rEÏG\{óÁíÍ–¿Q&÷5u#ÒÕ´O<^‘JE›vÙM¸”,EEÊ,8‡ïãñx</ÿµÌÝ2‡I]}Î8t—~-= ó]âc=âÏÝ·sm]±ŒOÕŠ0žî#’ho-÷“eŽórÝë&=¹néGâ‰ÇGTá–®ˆ¤®úͲO&ÇãñøBò¥2O+r†´™Ï‡¨´‡tÌMK¯|3Þ}èMYb׉bŽç£®ë¼Ô´$í-O?^‘¼\ëJ¥ìL<ñÅ’äºTDæw2þ Çãñø¶àß—¹VfW)êsÒasél™çdb2ÄŸÍ—¹~Vo$âY©È£®Q:P¢½µÄ¿ÚÜ«i¯R—!žxüÚDCÊ/g,ê6X"ŠÇãñx<¾Múïdî“9RêîsÆ¡›t„ôW™¯âoüæd×GèöM»Wu<wÑp@"J´·<ü=2%^.hÈT¤&O‰'ß8u¢)‘„’ÇB¤ Àãñx<ßf}\æ™s¤-|Î8iéj™·˧üO®ÐŸÕy<wMÇŒlÑ@{óàã2g{Y3·“ô`Ê¡ˆ'Ÿ4¢¡Âá’ç]8.ö€Çãñx<¾(üe®—ÙKjïsÒ¡¯ô[™§d~nšçLü‹ÑOt}Òë–˜:Qäñü»k”öOì:A{ËÝ«È^^.Y›Ho¦,vK<ñøŒ]'2sÿÌÌgàñx</ÿ½Ìƒ2ÇÊôö9ãÐI:DºKf|FÆú*ÿ눆‰e‹<žÿh.Ñ@{óäß’ÙÔËejé«Ä¢ ÄwôÊLNTfl”ºž$Çãñøâõe2¯(r¡Ì6òýµƒt¹Ìšv¬ þmßéú½¾D<+yÂ5J##ho¹ø‡e:{¹."Å“² ÄwôÊ\×Á1i‘¶¼$Çãñxü§27Ëì'•øœqè#$ýCæ§u«9ÿ6ë?s}„î“1¢¡8ãé>¢a¿ô•,hoξ\æR/‹2´—îLI1O<>«WƈtÔ¸_EÚwðx<Çã×þ7IæQ™Q2úœqè í/Ý*óY–R_…î?v}ðë»nDC±ÇóŸ®Lök÷A{ËêTä`/Ÿõ¥WÒ÷ù#žx|V¯Š,KJfËRàñx<Ç»ø×e.–†ø?±b[é"éÕ¦=2‰[ð¹&ú§¬>P¼ñü§k”öMIÇÐÞü8™­¼\m¶—>OÚ‡xâñÍz9‚H_ã!sÈÇãñx¼»ÿR‘;d:ùœqè-/=,ó}êÄiê«ý{®Ð[4mÜXÔñ|Ò5JÃS'˜ÐÞÒ~ô´Lw/W˜_K?g„xâñî^™ßÊöËIË<àñx<Ççê–yBæT™¾>gÚKÃ¥eþ›È8ÿ‚óo¹>Bo•x„.òx>å¥}R£D{KþÑŸd"9_R"ÒµIëÂO<>w/—œ„ãAñx<ÇãóöoÊ\!3T^V`Ëë5H:_#wJ:P_¡õÿqmƒS—9,ÚxþË5J{;-I{ûY‘c½\CÖ“þ•˜™E<ñx¯^Ù.ó‚̹Ò>gŒ´‹tµÌÛNË¿Q_ù<–9,Âx明)æööµÌž^®ý¤·šú>ýo©w¼XGS-š9Çãñx<>`?Næz™½¤ö>'úJ¿•yJf²ÛTUêËÿ×Gèý7y<ŸsѰ{Óˆ†"Ï[ŠôóÒå÷”¾–¡?âñ½¼$-¢“x<Çãñöý÷2Ê+õö9ãÐI:XºKf|â!„øûíw}„)Ï EžwMÇì–}׉bˆÏC2¼tóÓ¤XúXú#ßR/§CD+²"‚Çãñx<_&ó²ÌÒÖòýµƒt©ÌRH¨/ûþ!×GèCRÖh(Þx¾à¥]×h(ºø”Ë\ìeQ†é.‡ý·à•ó/ä²Ú$Çãñx|ëøOen–ÙO*ñ9ãÐG:Iú»ÌOëQˆ¿M?ÚõAñðôIEÏöæ(ºø|/s —޼ôJÓH%ú#oÙgæ;£®GŒâñx<LJÙÿ$ó˜"'Júœqè í/Ý*ó¿ôŒõ•¿¿Ïõú(‰xV(2&§DCÅç#™A(}žõ‰þˆÇ[ðÊ6"¢Ü-QÇãñx<_~¬ÌÅ2CüŸX±­t‘ôªLyú¦Ô—7ë#ô1©Am<Ý ;'F4I|þ%³ž—ÞzŒ4Y†þˆÇûêSòåÎ(šå;x<Çãñ…áÇ+r‡ÌR'Ÿ3½¥ã¥‡e¾O¿9£¾ròwº>B/Ï EƸ.™¹sÓˆ†¶Ÿëd"9wψt­ó2+ôG<Þ²——)‘Ìcáñx<ÇŸ,ó„"§H}}Î8´—ö‘n”ù¯Ãê+«¿Õ5ÑpRÆ®ÅÏ—\£4,ë m*>“ùµ—.Ù]z:½3Òñx¿¼’GA”g]ã!šœŸÀãñx<oþM™+d†ÊË:õy½I¿“#OYÍúrð7¹ÖÆ©2´ç E_vÒÐô%3Û`|þ'³½Ç>ø‘ ý ÌË)±Vdþr4c)<Çãñø‚÷_ÉÜ-s¨ÔÕçŒCwéhé~™ïš¦ˆÿ½ë#ôMÐEÝž_qÒNRÛŽÏË2ë{éwI?d<&q=Äã}õʶŒdyFÆ¢"ëwðx<ÇãÛ‚ÿYæi™3dúûœqˆJ{H”ù cŒC‘××\¡ÏNP´íùß®QÚ1±FC›ŒÏ]2í½ôµ‹šÖõ áñÁyexÈ<\òðx<Çã‹Á¿+s­Ì®RÔç¤ÃæÒYÒ³2¥YæUü¯r}„>ÏaãÆblŸ¯ºFi§tLˆOLæt/óœ:K§–ëœWÚ2’Ùçc4—Àãñx</ÿ"÷É%u÷9ãÐM:Bæ¯2Ê0þ—¹>I^˜º+aѶÏ×\£´½óˆ†ÂŽÏ×2{xéM›Jo5îæú†ÇíÕ˜“hœe‘œ¥hü~Z¢Çãñx<¾Ø|Læy™seúœq0Ò0é*™·ÏÕÅÿ‹]#s± í³Ù ÛKmì|ÿOf/=hO雌Z¹¾áñAz9N¨È²SE4Û'<Çãñø¢òÿUäz™½¤ö>'úJ§IO)29ë0‡6ÿ ]£qyÓö„EÝ>_S¤¹ mç|”éä¥Ëœ.ųN,çú†Çä›Ö¤müÆèˆ¦t`EªÄãñx</r?QæA™c¥^>g:IKwÉŒoÚ¥¯ Æó<× \•8÷"oŸc]G4 IZþ° Ï·\‘‹¼ô‘éωT×+<¾u½œVnˆ: ~H™ƒÇãñx<Oöq™W¹@ÚZ¾¿v.•y=cÇŠ6ϳ\Oüë¦N{{{ÝuDÃv‰ }¾ßËà¥Sl(½²n9U®Wx|ë{%ý8%}˜¶Œdj~Çãñx<ŸÕ"s‹Ì~R‰Ï‡>Òo¤Çe~Jݱ¢pãé¾­Àõ2´· E^wÒ¶R¡Ÿï‡2[zé;JŸ'åݸ^áñ­î•1""mÅÈ´Å$#x<Çãñøý2ÉŒ’6ô9ãÐAÚ_ºUæÓ¤‰…ÏS\Oó¦”5Š·½½ášh¼nDC¡žïS2ëyiüÇI“S¸þàñ­ï嘓H[L²Ü)ŸÇãñx<ÏÝ•¹Xf{ÿ'V –.’þøð¿°âù×GèÛ’Öh(æöö®QÚF*Üóý£L$禑®Kjç\ðøðxelY‘²¤¤Ó¶™x<Çãñøüý2wÈ(uò9ãÐK:^zX‘ï3nCŸã]Ï讦IøEÝÞÞtM4l-âùN’9ÚKóî.=M{ÀãÃêÓfp¥¤%Òæ]8ÍÐÀãñx<Ççé'+ò„Ì)R_Ÿ3í¥}¤?Éü7£a‹Ï1®'rOê®EÛ~ÜG4l•Øu¢€Î÷Sƒ}IãÖ­ J{ÀãÃè•6Â!iÒE45]Í<(Çãñx<ÞŠK‘Ëe†Êõ ÒÆkô;™e⩟J…$>¿r-ü½‰O°‹¼ý¼åºëÄÖRaï™Þ^ÚðÁÒù¹žàñ!òé»ì–;/#é0FÇãñx<oÝ%s·Ì¡RWŸ3Ý¥£¥¿É|›Ø±" ñ9Ì5Ó2Z†öS®È[®Q”4¢!üç{‡L{/íöb™²Ä\OðøÐz‡¥bRŒf.Çãñx<÷Ûÿ,ó´Ì™RŸ3Qié2ï§®«×*ñ9ص¨§³hÛO³‰†‚8ßR™Ó¼4ÔÎÒÃY–~äz‚LJͫÜiÔ\Æø‡Hêx <Çãñx|pþ]™kev“¢>'6—Î’yF¦Ôé¶2€óéZ¼Ç“6ï,æöð¶k¢aËD¢!Ìçû•Ìî^ZæfÒ[I‹2p}ÀãCîÕ¸,dÚœŠÌ¦-#‰Çãñx<Ø'sŸÌQ2Ý}Î8t“—ù‹Ì„Ôg{¿Ïw_×R=‘ºFCѶ‡w\ ¥—ÿ?2ž@ÝKú&ýñ†ëj/ÇåûdºÀãñx<Çéc2ÏËœ# ô9ã`¤¥+eÞJyÈ÷ë|÷r-ÌSIe(æöðžk¢a )Ìå-ÓÑK ^÷¡w±××]kf©Ë›L{/mà’¤:¥?âñmƧÍàr™†áø#<Çãñx|›õ_)r·ÌaRWŸ3Ý¥£¥ûe6peŸe=©âª/÷DC_©UÊÿ³"§x©ô.Ò#)Ó%èx|ÛñrÌ –§ hƯáñx<Çã‹Èÿ,ó´"gÈôWk¾Æ§|ú]¼õõ±ë®‰DC åÿRfW/UÙ_zÇùRêo >ó2ä<#ûŸÁãñx<Ç‘Wæ™Ý¤hà‰†¯S?/ÚúúÄuDÃÆYÖhð¯å;ãdnÙKjïsÆ¡¯tšôO™InI‡¶ÿÿ¹&úH”ç;EFx©¯>Ò«éKlÐ_ðø6뛦N”e½F;þÇãñx<Ïê'Ê<(s¬L/Ÿ3¤ƒ¤;d¾ÈßVãÿ™k¢aC§5ì–ç}™-<ŽCù"uKú ß¶}òb)‡ÈøåhÆ <Çãñx<¾Wäe™ ¥müŸX±½t©Ìëë2m6þŸ»&6HŒhð©>gJ¤Ò-2Ÿ¦<ñv<¿P¤¹Dƒýòü$ó+/‘ï)=ë°ô#í/ ¯TÔHS¾.sú3x<Çãñx|ËýX™‹e†ø?±b°t¡ôŠL™LAÇs¼ëˆ†ÞM#¬•ç™í¼„z鿉O>iÿx|zeÉU$''²íiÇãñx<Ç[óïH¤¨ÿ‡^ÒqÒCŠLÌX?² âù¥ëˆ†^ëF4X+Ï Wô'¶”Γ^T$Ö´iEHã3Á5=#ZXžŸeNòõ.ÒcIO ´g<¾˜}Ú ®hc"íŸk¿Î˜¡Çãñx<Çá'(r·Ìa÷VÌãÕ]:Jº_曤MCŸ¯\Ÿÿ{$F4´¤<ãevñ´þÒ;M¡=ãñÅîÓfp¥§(ÊÒ~ˆâñx<Çãñ­èVäi™3dúûœqˆJ»K×ʼŸ”qC|¾vM4t—Zxü×e.ó²"HÛÈ÷×öÒ%2c“Æ8Ø:_÷ ]¤Ü…Œñ² ÇMpÐÞðx|V¯Æ´DÚNŽ31Ê“0Çãñx<_¸þ™›eö“J|Î8ô‘FIÊü²tbþåÿÞu1ÈÎ)»Nd=þ2‡{9‹žÒ³–ÊÇãÛ¼oÜu"mÑH‡eÒÆHàñx<ÇãñmÀÿ ó˜"£dúøœq(‘FH7Ë|šeYµËÿ½ëˆ†NëÖhp;þ'Šlë¥äƒ¥Ó0h?x<>«WÚú ™ Çå%ñx<Çãñø¶çÇ*r‰Ìÿ'V –.”^Q$ž´iEŽåwO4tÌÑöÅsת8Lú1e/OÚoÆËñÇeN K—Ãáñx<ÇãñmÉ.s‡ÌR'Ÿ3½¤ãdRä;§Ý"Ëÿ£ëÔ‰Ž‹A&ŸïM2í¼láyyÊæ´<Ÿ“Ws+I¦Lº(k~åI<Çãñx<¾íøI2OÈœ"õõ9ãÐ^Ú[ºAfœÓÍ}rùtÑÐAr<ßÉ2£¼”§«ôXJ–ö€ÇãsõrÙ¦¢ÌaËŠ(Çãñx<_œþÿd®&Ÿ“[JçJ/ÈÄœæHOrÑP’±FC¹¢ãevöR€Í¥w3þ4íÇçèå˜~(Kß×qhÇãñx<_Œ~‚"wË&ÓÕçŒCwé(é>™o’üäšè(‘ÒÊ?Vf#/t¸ôóLlÚÏÉËñÊ-Ë‘¹öÇãñx<_Ì~²"OËœ!ÓßçŒCTÚMºVæ=E&¹&Ú7hXWæ¡^þй2±ÄjÔ/ÏÏË1'‘ñ ™ù <Çãñx<ßôÍwe®•ÙMŠúœtØÌõ§í2F4|œÛ6¤{»KP¿x<¾%^Ù¦U4게&ñx<Çãñx|6ÿÌý2GIÝÕ ¯¨”Yþçqßlbci¬ õ‹Çã­x•e¬ëà2 #íèx<Çãñx<>›/•y^æ\™-L4D’F4$—ç¦ì.v–Æ'Æ2P¿x<¾å^ÖLü?ê4LÇãñx<Ç7ã?’¹^fo©} ‰ÇòŒrÊ5Œ’™,C}áñx‹~m¾3š6¢ÌùŸMC&ðx<Çãñx|þ;™dŽÍmÝ„<^f݈‡òLNÝä²tSÓ¢ Ô·æ•–{H‘ñ <Çãñx<ßr“yY‘ e¶±kp)ÏøÄV—½¤çœ†CS_x<¾å^eûRD³(sÞÇÇãñx<Ççï?Qäf™ý¤‰÷òŒ•&},Cüñx¼O~íe(ê>("5oÇãñx<Çã}ñ?È<ªÈ(™>-J4O<ßš^Ù0Ÿ6¢!Zî±püÇãñx<ÇêRä ™S¤¾®‰†Òô ÄÇê³n~ã”ÀpßÜÇãñx<Çäß”¹Bf¨d2 ?;< O<œWƘ‡¦lDÜ!EÁãñx<Çãñáñ_*rÌa2]‰†ÉëF4<ß:^YVwÈ–®ˆâñx<ÇãñøúÉ2O+ræº ÄÇ·šW<5ýW¤ñÿŽc!ðx<Çãñx<Çã³y%‚p\4Òq Çãñx<Çãñx¼ƒ—ãú ñô_HÉOàñx<Çãñx<Ç;úµk4¤ý‚ü‹xêOñx<Çãñx<Çã3½2×uÈœ†w˜Çãñx<Çãñx<Ÿî›ƒŒ§/äà0Ñ"Ùàñx<Çãñx<ǧyeîQoš}‘öÏHÆ&x<Çãñx<ÇãñM@NK;8o’Ù8ïÇãñx<Çãñx<ÞÑ+5?ÍLW¸<Çãñx<Çãñø¦*c¡ÈhY*ÍòM<Çãñx<Çãñøt¯xÆ2’IÿlJHdä0ðx<Çãñx<ÇãÓ½’“I;U8ÌLjg$-ðx<Çãñx<Ç㓽Ó޳,â«Jâñx<Çãñx<ÇgóЧO±pØ»ÂqŒÇãñx<Çãñx|š—cŠÂ)iá–ÒÀãñx<Çãñx<oJ4$uhÔ.[Vàñx<Çãñx<Çgúô©I(s†ÃÐ<Çãñx<Çãñø¦ N‹:D‡@8NÆÀãñx<Çãñx<OÙuÂqN…㔌l34ðx<Çãñx<Çã×­ÑøwÖtEÚ” <Çãñx<ÇãñxG¯xƺŽI‹¤áñx<Çãñx<Ç;{ųìZј–pÌ[àñx<Çãñx<Çgz%ëxjZ"#K‘~t<Çãñx<Çãñød¯ŒQɢދ@àñx<Çãñx<Ç;ze~Ëé—¿Åãñx<Çãñx<ÏæµöÇ™£ œ2M‡Ããñx<Çãñx<ÏôʶŒdÚï77@Çãñx<Çãñx<>’¼dúÔ‹ÔceŠÀãñx<Çãñx<OñJ[25K‘¾7fæ÷ñx<Çãñx<ÇãË’§N”9ÿZrÒ"eù<Çãñx<ÇãñxG¯¸sŠÂåèx<Çãñx<ÇãñÎ^¿§Î¯ˆg,)‰Çãñx<Çãñx<ï蕤Ó̶§Çãñx<Çãñx¼³Wöñ™C ¢q·ñx<Çãñx<Çã‹Ý+KN"’ñOÇáñx<Çãñx<ǧ¯Ñm.]¥üÇãñx<Çãñx<ÞÁËi]‡H\‘Xz¢Âñ <Çãñx<Çãñø¨ó 1çéÑŒ_Ããñx<Çãñx<wðjn‡fŽÇãñx<Çãñx<iL4DGAÄ2iGŒàñx<Çãñx<Çgór:Dã?#YþÇãñx<Çãñx¼Ã?•ºPd$Íø&Çãñx<Çãñx|ºW,eIçßL^aÇãñx<Çãñx<>›WÚÞ˜?Ž¥¯úÍXõÇãñx<Çãñx<>Å«1'‘zˆhÚ÷Ó&càñx<Çãñx<Çgze „pÞ¬"æðx<Çãñx<Çã“ÿ©,)ŠÌµ%Š©¯èÛoÖ™g­ýofêÿg¦~?ù‹€ýÌÓϘ>ê7ÓŽ¯ä)Öþr,uÅÈX–©ø0û©üK[yÕ×Ö®øì³wßS³ÇžÔ/Çãñx|³¾rà–¶îĈ'ÏÃg.™â2“Ä„ŸÖ† ɯUUUóKzÇ¡´<ÇãñølÞîˆâ‰Çã½z9æ$bßLžn¿/Ü©9¾–½óNÍÐix<Çãñ™Þîˆâ‰Çã½ze™e‘þXÆ |˜ýÔ6:¢!e5‡††%/¾X5hkÚÇãñx|òO}X£øãñx^‰¬CúÍ}µoó#šÒ «W/|ôÑŠ¾ýhx<ÇãñþŒh þx<Þ›WÚÇ,Eòø‚ðÅ“hX·`äŠóïús¼Ûz´<Çãñx?ƒ$þx<>w¯X–Uÿ™ù>œ¾¦Nd¾jø¡b³þ´<ÇãñEî-&ˆ'ÏÃ+æ4æ!–²IfÚNøðÅ™høå—_VÏœY½ën´<ÇãñÅì-®Ñ@<ñx|^™ßÊ\12K¢^_´‰†µÓ(¦{íÇãñx|Ñzß¶·$þx<>'¯´œ„ 5}»/æDÃÚ )æ\s-íÇãñx|qzƒ$þx<ÞƒWÒ˜‡äqé¿ßx|Aø"O4¬}-úû?â†ö€Çãñx<¾è¼ÕDñÄãñž½2÷¢ˆ9, é0(f_l»Nd{͹êjÚÇãñøbó•¶§N<ïÉ+-'‘š¥H?\æ÷ñáôŒhX7‡bõêš=ö¤=àñx</*ïÈâÇã=xe HNNd~Á„'ÑÐøZU]]Ö³íÇãñx|ñxÛ»N<ïÍ+î4ÝÂé;Y—À‡ÐOeêDÒk騱´<ÇãñÅãíŽh žx<Þ«WÆ/GSuÈ\þ_žDCÚkö%—Ò~ðx<lj·½½%ñÇãñÞ¼’&W8®é0%~ÏÔ‰ôÅêꪷ۞öƒÇãñx<¾¼Ýí-‰'÷ê“×hH)‡H[ì~O¢!óµøé§i?x<Çã‹ÁWÚ\£xâñxÏ^N¿I›wá8fÏÔ ‡A «VUlÒöƒÇãñx<¾Íû²^½çÝr˼[n™wË­ÿÏöMçO<Ÿ‡—Óø‡ÌM,Ò~„»·>¢aÑSOÍ8õ´ÌÿfæöÍ™gŸ3çêkæß}Ï¢'þ¹ôõ×W|öY],¶fÞ¼†úú s óÿügÚÇãñx<Çûꕺ\dZZÂå |¨½õ ³~‘/åD«¶ÝnÖ…¿_òÒK«gÏö;ѰfÑ¢x·õh?x<Çãñx<ïŸWÚ.ŽYŠŒõ$ña÷Ó|L4øXþ©ºü£üÝ~â²Ëi?x<Çãñx<ïŸWÆ×yQ|AxëS'fýþ¢ÀÊ_³ûžËÞ}×§DêêêX»ÚÇãñx<Çûä•EG³,2Á„÷gêD€çk¢ónº©¡¡Á\Ô‘Ò~ðx<Çãñx<Þ'/Ç„Dióã%ð¡öþŒhú|§s\ýÒ¥Ö ón¾…öƒÇãñx<Çãñ>y¹Šˆ:í`/ïÛÔ‰ Ïwê!‡Y×°|Ü8ÚÇãñx<ÇûäUšHK”fÿÍҦ߉â Âû¹FCÐç»àÞ{ížKýб’´<Çãñx<÷ç-ÙôãR§µ%3“øpz?×hü|K:®üî;»§S³÷pÚÇãñx<ÇûáÕ8Ý¢4Ë4ŒÒ”Fñá§ø6¢¡UηfŸávOgÎþHûÁãñx<Çãñx?¼²¬$éüEò |˜½¯S'Zå|WUVZ•[lY½ãN5ûì;eÄÈê]w«¼]E¿Íâ]»q}³ëã»–oÖ¿zè°)#FVï8´¼o¿X$¢ò—t,ëÕ»¢ÿ€ª!;Ôì±ç”‘Öì=¼zØÎUÛ©0°|£Ëº÷,¶£~›ñkûÔÀAÕÃv™²ßˆš}ö­ÞiXåÀ-Ë7Ü(i×êåw]¯¢ßfUC¶¯Ùgß)Ã÷«Ú~‡ŠMûÇ»u§ÿ:³¦ÚÜyÊ~û×ì3¼z§¡•9ÖfðåuíVÑoÓª!;8Ö&ý1Œ¾¤CùÆ›Tn=¸f·=¦Œ< fŸ}«wÞµjÛí*6ߢ¬{Oî7h?x?¼“¥)4├HIZàÃìý˜:Ѻç;ï¶Û,žÎêY³ ¨~Ëûn2ýÄQ F^ùí·õ+WfžÎšE‹–¾ýö¬ßßZå/ïÛoúñ'Ì»ù–ÅÏ<»üÿ[=}z³Kx6¬ZUWV¶ì½÷>öØœk®ràAñnÝÛvÿ-ßp£'<ïÎ;—Ž[‹5¬^íÖDgÌXþÑG ytÖVn¹×7¯¾,ç^dù˺÷¨Þu·§œ:ïæ›—¼8få·ß®ž;·¡®.—«VÚ5«§O_1aÂÒ±c<ôÐÜ?^7ãŒ3«wÝmíŠ3EÚJ:L9äй×]¿d̘ÚÉ“]úTýÊ•µ?ü°ä¥—æÞrËÔƒwê@ù+·<ãô3Œ~`ÅçŸ×/_îR³kæÍ«++[:vìœëo˜zÈañÞëcÿ-é0u]m¾”cmλ喩ïÔ%€òWn=xæég,=:÷Úœ{ý S9´¬÷\Ÿ[íúpÐÁso¼iÉË/ו–6¬Yãr]³xqí?.}óÍ=ãäS*·Ø’û Ú¾å^©ëC6ýWšu°¾¼Ÿ‰†Ö9ߪÁÛY<†Õ«KMØë·¬÷³/»¼ö§Ÿr<©•&Yþ²6žuþ‹Ÿ{~UU•J©¯_9q⇙~¨X—®m¦?VÛyÞ-·®ü꫖쟲ª²rá#N1’ë›»Ï¯×øZþʃfýþ¢¥ÿùÏêY³~ñáU_[»büø£GÏ8åÔÊA[ÇLÛo±Î]¦ÿæ¤%/ŽY³xqžA[¹rÙûïϾìòò 6´^þò¾ýf_yÕʉ[R­«*+—ŒyiÆI'Ç;tjÛý7Þ¹Ë kµÙÇzù­Ôf]Smvä~Õo_¯û̳ÏYúÚk-Ü}õìÙ‹ŸyfÚ¿ŠµïÀýí ŸŸWÒ9’öÍ,S/ðáõ¾­ÑКç[WQañŒÊzôʱ<ËÞ{oÕÔ©-ü¯bÓþ¹ŸoÍž{/~îùúÚZOg´b„Ú[ù†}f]páòqãêëñíU¿bÅ’—_ž~â¨Xç.…ÚK:Î8ù”ãÇÛLí¤I³~Q¼[w÷òLÙoÿ–7Ú…>–w|¬ôšòM7Ë=þÕ{îµø¹ç¼öš•ëzåöïÜuê¿ZðÀuee¿ûZ=cƼ»îªÜj›ÀÚEÿ-¯ëKyÊzöš{ßÖÌk-é\W·dÌKS8¨ÔXˆOå¶Û-}ýu»×Æ5óæÍÿË_+·ÌõÍVmæRž¸_µy`ÌXˆ¯µÌûQEÿÍ[^›kÿË»<¶î r9ßêwZøØcõË–Ù½¨®™7oþ}÷Å{¯ÏýF8ï7ðaö*už\‘mÉ(¾ ¼?»N´òù.ÿä‹gT¹åV9–§öûï[þç*l‘ËùVl1pÉ+¯ä÷'’G4øÿŠÍ·XôÏ'ÝÚÏ8,Y2ïÖÛÊzô*¤þh¢³ÎûÝê™3ý Ëš¹sgž}ÎÚ›iÇòL=äЖÿ•%/¿œw|,õš¹ÄßR¯±Ó*·¼èŸÿôšïðãµü“Ofœqf¼K7¿ÛÅÀ-[^ÚÅÏ<ã^žx‡Nó…Qº%j?û¬zèÎyǧ|£>þw_/ËÿûßiGÿÚïë[åÀAöj3ky‚©Í¼ãTmã÷û‘•Ú\ûÊ»<+mÞAe=ßêa»,ÿè#_¯¨k,˜}Ùå‰Ñ Üo„è~f¯´‘ˆŒ‰Ƀ%ða÷>moÙºç»ä¥—-žQõ{æX‹o“.çïÞcþ=÷ä8[Ûõ³Yûñ/ïÛoÁÃ7¬ZÕZLk.œsý ±në…¿?Vn9hù¸qÁ„eÅ_Tï4̱ëRžÊm[ßäØqöÖ‡Ž÷ìå5>ÓO:Ù¿gæô@=ÿ|YÏÞþ]߬¤=óŒKy*·Ù6¨Ú|¤¬g/¯ñ™lmæÑÞ<¼٨͵¯¼Ëc+éœõþ¤ÏÆ ÿñÀ.¼uñøÔ£Žæ~#T÷ø0{¥mJ‘9#cÛL|xŸ¦N´îù.=ÚâMûÕQ9–ÇÞg³YÏ·jØÎ-ßV#cDƒ…ø—oÐgÁ_ïu\K¯Ò óæÍ¹úšxç®!íÑvs®¾¦~ÅŠ@#kkgœtrfy¦r˜­7þüâãȆôøWÛÅn¯É»=ÔŒØÙ»ïþâתêꩇæSû·4¢áÙlÇŸyι.kïÙˆÅ*6ß"×ø´+Ypï}A׿´iS>Ô§ë›­´Q¶ã_›å›È5>­Z›~¼ÙÑ_yVZM4¤ú¨ßÔ/Yüuù‡–m´1÷!¹ßÀ‡Ù+ %ç*2W•,M_õRÌ®ŸïÜ?^gñŒfžqfŽåYiï‘Éñø3Ï=ÏÊ@ë´Ïf[ÿ²ž½æÝ~{`ìäþZ=kÖìK/‹wìªþX½Ó°•ß|ÓZ1™û§ÓÊcï?ÏøØšp”íø³,õšé‹Az;ßx·õ¿øâ/òZüÜselh½ý[y˜Y”˜:‘|ü²½–¼ôR+\df̨Úq§fãS¶aŸÀ>NLÿ¸¾¡aÁƒÆ;v¶~}³•6Ê<~+ÖfõŽC›OjÓúûW…í y”ÇêäÓ¤ãG¢óïús+^NëJKË7îËýFî7ðaöJþµ,i‰”/ðá}Ýu¢µÎwæïηxF³/½,Çò¬´úÈ”rüv%‹ž|ÊÚÀ¶Ô -‰Í>û®ž=;ÌLu¥¥[o’þ8çºëÝ÷Ž àµð‘G“Ëo}(£×øXÑÐtüví-öšÆ y´‡ê†ÕÅã¿ÔkͼyÓ~}¬Ýöoq°}Ê8‘}†¯ª©iµ@-^\=l—øTïºÛª©S[·6—Œ‹´³{}³U›iÇoõÚ¬¶³Ûð¨]woõÚ\š¨M‹ï_G4ä]«k4$ö ^¯Ç²wÞiýûx¼|“~Üo´úý>Ì^Ùv­HË[”:,¯÷oêD+žïœkÿ`sDÃYgçXžZF4Ä¢íí~ê8Û<øÏ<çÜ–LzîÞqÑ¢©‡ÞêýqÞ­·…$ sÿx]c©l}Âw|¬hXwüh»%/ޱ´Æ ^Ûìó/É”"ÏŸ®^Ý8ÇØJ±¸FCÓ눑­~ª«¬Œ÷è韙gŸ†õ>ùå—…>d÷úfoêDÓñkFìßêµ¹ª²2Þ£§c|ÂS› |Ðîû—Å y—Çâ ëŽÜ±Óò?Ëgååå›nÆýFëÞoàÃì•M—fß9~ïÓb­{¾ î¿ßâM=êèËSk{†aLÑR±ø©l戆<ãß®dÁÒ#S}ýœ«®nÅþ8÷Æ›B††'Ÿ²¶`vçL柕VG4¬;¾‰Zï5+“ 9¶‡x·î4]ÂñU_[;倃lõ‹ƒí×­Y3x»5 †!PK_=ó|gœyV¨jsö•WY¼¾Ù]Ú3´µÙ”3 YmÎIÔ¦•÷/»#ò+Ý÷‚X»’¥¯¿ª*[UYY–˜CÁýF«ÜoàÃì•ö­Ìt… À‡Öû1¢¡ÕÏwñ 6oîköÜ;ÇòØѰöÿ ~Äúu?±ëDžñ÷ê½ìà ñ©iñ³Ï®«pûœ{Ýõ¡Ë¼ÔÕ­ÝÔͧOrO­å½Z¢¥Š,xøa_{MNí¡¤£Ý}v[-×°lYõž{Yé/Û—*RÞgãUUU!zŒ¿ô²äó2bd+î¿“íŽú‰£l]ßìŽhmm®=Ùšû‡¶6­¼ù¶½¥‡òXœ|ZªÈ¢§þÆ›^ä~£ï7ðaöráxh|AxŸ¦N´îùÚ]¨©rÐÖ9–Çú ð™çœëÇE?m¸§øWn7¤®¢¢pŸšV~õUÅ&›Ù>ç\smHC1qb¬}[s&óŽõ-Íè5¹´‡EO>ùK[y­Y¸pí’‡-ì/Mc»¬üê«°E)žØ"±rÐÖkæÏcÚ¨¶¶¼ÿæV®o¶–ö,U$Þ¹kksíæ 1EÃ\›ýXyÿª°¿½¥çòXü¨fæÙç„örZ3|_î7Zë~f¯DZbíE4ËLŒ(¾ ¼¯Û[¶ÖùÖÅbϨ¬gïËc/)Z±ÕÖõË–ùúÈä5þ5{o• ¢ì¾VÏœY1h«`Úçì+® s(æþéF»‹3åO«órýí5¹·‡9W_óKÛzÕNž\Ú¾¤…ý¥ÂÖ`ûh»° Š^ûšw×]1Eã½Ö·ûd÷µèŸOZ¹¾YŸmÖÚüs©"e¡¯M+ï_V y–ÇÖÔ‰Š[„p¬äGîÒh;î7Zå~f/Ç$D,ÅEKEàÃìýÙu¢5Ï·bÀ@‹§Ó°zu©Éµ<w.m_²òë¯}ºÜ¯H ÷ÿò7Y=sfyjúñÇX—n~·Ïšáû544„9 «VÍ»ùKŸ0äÙm®4Þ¾ƒ½feRzν=Lûõ1!¯÷ü^³¯¸²…ýÅÒgàφv˜ú+ÊûoÞZ{æÚë׬i܈§%×7[i£<@m¶¤6+·Üò÷/?¦Nx-¤óÀA+>ý4ä×ÒY\ÈýF«ÜoàÃì•”~H9Dæºiù |˜}»N|¾s¬ÎO[=kVîå±8Û|Þ-·ú˜PwÑÐLüÛwXñÙgmé©iñ˜1¾¶ÏX‡Žu¥¥¿Ç+y(£×xZLÏÍõ³×¤hÈv¾U; õiHEë?w-YïÕ»%ýÅ⧦¡}­ž3§:옗ZþþkñєڴU›y¿ÙÝu"¿òXy/XñÅ᯲5óæÅ{öæ~#øû |˜½’Æ<¤èÆi31ðáýY ²5Ï·vòd‹§³ôí·s/­AàeöñõYeí#“§ø/xèá¶÷v5çŠ+ýkŸón¿ã—¢y5®G2åÿ™§ŸÑ6ïÏÖ¬©Ùÿ?ÚgÕŽCV¯.ª7þ¼û¯½^ó_Ï19=—­=̺àBŸþzí¤I FžsåUÓO8±f·=Ê6Ú¸Ô¬‹g¬SçòM6­Ü~‡šýFL?åÔ…;vl ß‹a|J¡¼–ŽÛÂ÷/»k4äw}¨-¦Dò÷ßç~#øû |˜½JÓ9š¼¨ƒÓÂ’øðþ¬ÑÐJç‰.ÿøc»§S³÷ðÜËcå‘©zϽëW¬ð?Ñkü«†í䧦õË—ù–¹zΜòM7³Ü>£í‚\A½aõêúåËÃð C~ý·°zK{ˆ¯×ÝÖ+ÆŸvô1¥Æ[û¬¶Ëâ_lX³Æzy*¶”wáÑ4<¯úÚÚX§.-yÿ¥6CV›[òþe{†|®E5¢¡aõêxÏ^Üo|¿³oš:‘¼1fêJŽS2ð¡ö¾­ÑÐ çk}÷àú•+KK:ä^+o“+¿ýÖïËôЦ ÍÄ?Þ{ƒUÕÕþ•¤vÒ¤y·Ý>óÜó¦vxåö;¬{ß´+Ûx“ê]w›vÌq³þßÅ xÐ׉²+'Lˆuèh±}ÎñyåçŸ>û²Ë§ýú˜ª]v+Û¸o,Ò®T‘øzÝ+·ÙvÊÈgœzÚœëoX9qbk|ÂOÿ­-°^“µ=̾ô2ëyMy@K®Ÿ5{·¾€ëŒSOË»<­2u¢~éÒºXlå×_¯š2¥¡®.¤ŠË–Õ•–®üúëUS§6¬ZÌrÈ¡-yÿ¥6CU›S9¬%ï_v··ÌïúÐZ‰†úÚÚUÓ¦­üß}·jÚ´ÀÚՌߞÎýFÀ÷ø0{¥p(mZ12íMó.ðá÷¾Nò|«÷ØÓú'áËÇóTžBø×8¼Ùø/üÇ?|z__ôÌ35ûì›ký–tœ~â¨å|àÓ¢Ês®»ÞVû,Û¨¯OùþÕ3gοûžÊm¶Í±<Õ; [pÿß‚YÌ,iq&Ïý·P>ÅJ,¡šµ=Øíþs®¿ÁÊõ³¬ï&v—˜ï}y—'°ÏÀêê–Œyiæ™gUl=8¥<&ï½Aå¦{ÜÒ7ÞðcÄG®%¬¯_úæ›ÓŽ?±rÛ!ñî=Sâi¢ñÞT ÙaÎWúz?ÿž¿´äý7°‰0 uu‹ÇŒ™yæY[o“Ržuµ¹ý´cCmN_W›=Râ™(d µ™ÿû—Õ5ò¼>ö^°fñâ%ÿþ÷¬sÏ«Øj›X·õ2ËïÞcÊ~ûÏ¿ç_WX\òÚkÜo|¿³—cN"m1ÉŒ_ƇÝû1u"øó­ÙgøêÙ³­_ÎæÞ|³§òÐ#S.ñ/ß|€õOcêëçÝ~ûÚµëóh-3ÆþmǼy±®ëYiŸsl«YûZøØc±Î]òé/íKæÞð'¿oÁÛMåÓWRz.kü«†íb3ËðÇë,^?«†ì`qöÓòÿþ7ïòðøê¹sç\}MÙæRžò~›ÍýÓk. ôãÓ%KæÝv[yÿ9ÖoÕö;.zæ_Þ&NlÉûoi£5MµÙ|yÊûmÚJµy{yÿÍsì•Ûï°ø™g}«Íüß¿lhÈçúÀ{ÁÊo¿zÈa¥íÚçŸê]w÷i×äú+b»p¿äý>Ì^©É‰äÒ×tJfàCêýÛu"°óyÞï|8倃<•§°F44ÿ…>fýy¾q°nKÚì __[kyPÃ5×ZhŸ‘v«jj¬mÚ1ǵ°¿Ô ßwÕÔ©~¿ñç× (Ñàÿù÷X[ŠrùÇ[¿~ξìr[Å««¬Ì»<~?š.y啲 7òŸÊí¶_5eJ0­¨.¯ÜvHõ;㬳­¯BÒÐÐW>íÍï K^y¥lÃ>^ÛkÔ¦çþè[möÉûý«Âê ù]|}/X=cÆŒ3Ï*´Ë'>Ñö³.¾ÄŪjFŒä~#Èû |˜½JÓQ$m'ÌR‡å%ña÷S|[ 2€òW ØbÑ¿žöéZ¶jÊ”Òví=•§™VÕÔ,ù÷¿<üÈÜošyþÓ9®z¯}ª†«Ùoÿ©G5ý”Sg]øûùwß½äµ×júiù'Ÿ4ÿòMûÛ©¸büøòM7³ÕªvÞ¥®¢Âæ]Èœ9±Î]ZØ>§þê(»ÕZûóÏ›lj¥¿Ä{­¿ô­·üþ„!ú A¯yxm¯™v̱‰^3bê‘G'zÍ=K›zMÖø¯øòK;O «VUn7Äúõ3Þ½‡­»ä5óçç]ÿF44¬Y3ã·§çŸò~›Öþø£ßímé[oÅ{ôÌûý®jǬ\?ý¤“óÿõ-m”¨Í<Û€µÙ+ï÷ Ÿj3ïòø4¢ÁSyü{/Xùõ×+/æý~:í¸êë-ß0ÿî|î7‚¼ßÀ‡Ù+EJÓ–Œ:®'‰¹ŸêÛ ¾–¿j‡?÷¼¯´æ\y•×òÿÈTWV6ï®»ªwÝÍzûYðàƒ˹ì½÷b%í¶‡x^v·ñ›}Å•-lŸKß|ÓfîcæÌòÍXìﱎVN˜àÓÞí­•zÍŸ«wÝÝV‰uîbkPÕâ1/ùtý\òÊ+¶ó.O¦ k³ -‰Oùf›ûºqÉŠÏ>‹µ+ia{›~ü‰vKµ`ôy—Ç×Úlaû/߬¿ßµYÚ®¤…ï>Ôæè¼ËSas†<¯>½¬ü曵Y†–ßζ½òâü{ïå~#Èû |˜½œÆBD\²ø‚ð~N°\þx¯ÞÓ~}ì‚ûï`…Ûú%K—tʽüA>2-zú™ª‡úÔ~Êûö³87¡®¼<Þ³—í¹bË­Ö,X`ívÖ¬x§.y—§|ó?î¨_º´jØ.Öë·¬ï&«§O÷ç†<ë7È^³øégªvj½¿L1ÒV §ýúŸ®Ÿ3Ï>ÇV!ã]ºåWŸÛ'ÞtZz=™{ãM>5¼5óç'çjQý.|ìq›=â…ò.O…µi¡ýû\›ý­Ü-|ì1«µùbÞ屘6ÊûzåÇäÓÚI“Êzö¶xÿ¼ì½÷쎋á~#Èû |˜½²ëHê/d¦+ðáõÖ§N,=zÊÈSÿ;`ÊÈ2¾HþižzØ3NûíìK/›wÛí }tÉË//7®öÇWϘáÓŽÎgqßýyÄ3˜G¦º²²)èkûYpÿýßÀ*‡ìà_{žrð!¶ÌºäÒ¼Ë3ïŽ;-ÖòÔ#ö©~«wÛÝú\ÓÄPÆ|Êl¯ñ¥¿Ìºø;0‹Å:tôéú?õ°#¬%š’°ÞÊãÇgà‹ŸÞÖõ$Ö©‹õ9ÏÝÙV{‹wïaqùe￟wyüH4,~þy[í?Ö©³oµy”­÷/?j3¿òTZÑO|üx/¨Ùo„Ýûçš½‡Û|cª¨à~#Èû |˜}òö–ÑXJ¢"müC$cû |x½õ màÕ°fMb™·xúýÈÔ°jÕ¼;îˆuììkû)ë³±ÅA§ÓŽ;Áïö<ûÊ«¬ j˜>=Ö¡S>åi_bqß“¥o¼áëõaÎõ7øú ƒ§òÒkîŒuìä_vß êê*òã~iÚ±Ç[,gåvC¸ßì~f/Çœ„Óÿ×{À‡Ô3¢!s8CÕ.»åOÿ™Ö¬™~â¨`Ú­õóùå—š}ö ¦=Ï8í·¶Êœ˜´ì­<GU$¦íø{}˜sí|ʘOyj}î5\o—ÿïV <óü üë/U;ìhwDCå±ûhºzúôX‡Ž–ë×DVÏœi±uåå‰õlößÕ³fÙD°|yÞå±;>eíh2ËíßD­×f¬©6­]O¬Öfžå±ºëDžñ±{µxÌŸî7âëu·¸¥úÔCç~#°û |˜½Òv¼Ì’¨ÈüøP{F4¤½æÞxSÞñô)ÑÐÐÐ0ã̳‚iåý6³µƲ>®=ÛÔP¿dIÒýn®åYòÚkvêzõê²õ7àúëÒuõœ9¶ßøó)ÿ½Æ÷ëmù¦ý+nY1pPÒ[f|‘ö#ëÒÍ¿þ2í¸l'<—Çn¢aÁƒùQ¿‹_có åO7úÑ—½ÿ¾­&æây.Ÿµi­ýûP›ö¯'>Ô¦çòXŸ:‘G|ì¾Lõÿ®ÿËdz6Fæø¹ßì~f¯Œõ¢.«J:}Fψ†ä×ò>*DóާOLs®¿!°ö0ëÿ]lo8Ãð Û³ÅA ‰)*ÊckÂäÒ·ßìú0ÿî{|Êè¹<~ö®ÿ?¦D%%¼•ÇîgàS>Ôxλó.‹…¬Ù¤õ;ÿÞ{m•0iYoå±›h˜rð!~´ÿywÞésmZè¿Vk³_~åñaDƒçøX|/¨¯­uëîßõÖâåtÆgr¿Øý>Ì^ÍÍ»HùâçæçiàCáI44 Ýœ=»lã¾-‰§LuñxiIÇÀÚƒ­­›êb± ÛsIÇú¥K­~ácy*OÅ–ƒìÞss}¨Ùw„Ÿ0x.Ÿ½†ëb᥎küÑÚ§¦Ý{äW‹¦õK–4^íÆsæùXV³jU¬sW?êwÆYgÛ*då6ÛæWŸjÓnû·]›]ü迾ÖfŽå±X›yÇÇâ{ÁÒ7ßôõz;å@kwγ.úÜov¿³W*JIEüœñEÆAñ!õLXwÑÐ0åC[O?™¦qdpí!­_²ÄJ±çßw_ðíyÉØ±V _ûãžÊ3ãô3ì4ººx^Á]¢íÖ,X`ñ?¿òøÔk¸þ'û=d1¼ñî=ó+Ň™%/½ìS<§v¸­B®?Þ§úzÄ‘¶ Y±ÍàüÊSnï3ð%/½äSû·[›>õ_jÓsylhÈ'>ß fýþ"_¯·åýX|wí¸ßì~f/בì³/ð¡ö$Ö¾æÝyWËãiý‘iéÛoÙ*‡lomìA‡ßžgþî|;oÀõõ±nÝs/ÏÂÇÿnåï.{瀯‹Ÿ{Îê' ù”ÇŸ^Ãõ?ñcs>Tj¢Ásy,>Ì̾ìrŸâY½û¶ ¹èé§}ªßš#í}>8¿òØ®M_Úõî{Ú®Mûý×jmn›_yl¯ÑO|,¾ÔŒéïõ6Ò®¾¶ÖÎÍçm·{*÷-¹ßÀ‡Ù+5ù9%Ñ”®hÌOà Â×0uâ—_–¾ñÆÏíÚ·<žÖ™*¶Ý.Èö0óìs쌃]¶¬´CÇàÛsù¦ý­Ý¦Œ< ÷òÔþô“ŽÛïøú0ý”Sm½ñç]뽦rÛ!\ÿ×~QµãПný‚ïÞ#¿òX|˜™~êi>ųjØÿgï¾ÃÛ*χl'qœ„ÄÙa‡°ÂÞ»”²÷†@¡”Q({Ê -´Ì(´¼¥…B-›…R”–{Ç[–÷ÞñÞ¶ä÷GãHÖ9ºï£céëKWH>–n=ëÝzÆžRA®Y·£»xýVî½ìGSñ¨Õ¦d‘­M¥þ[µ÷¾¢µi'Ùã-í•ൠdñíñv°°P$Ôö‡²÷ñÜoàÝì‹+&ØFïrÏŒ†ö‡ZwüX¼å)û‘©ÿË/nR™òž7ßLT{–º·Ü|Kìñødî¶¿Û%Û¹ñ¡\hKعÖâQè5©>þ{3³êN9µû¥—ý££cæøfVãœl?¾ÒM¼<'v­ÛÇW¾=Tì°£ôŒËñ~4­9òh¥þ"]›*ý·b‡¤kÓr<§NX-©kÁhG‡ãmÏÛo‹DÛñ—Ç-ÅÃýF<÷x7ûÐ=ÖŠqç Þa2ðñnö©œhðŽ6]v¹`yÊ~dj¾þç·‡þÏ?‰¼õ×w$ª=wý]fn^×óÏÇOqÖ ±{ÄåÛ;<>x§M÷û|Å<•ÑR<â½&EÇó)Ó*wÛ½ñ¢‹;ÿö·Q¡V"ýxgϱ¿à‡™Ê=öR*Ïòm¶“ RöúèË—.üÜ^<‚K'*÷ØS©¿”m³­`m*õß²¥[ŠÍ‚Ün¹½xkÓvùH] Öí¦¡;>w¿ü²H´O?{<ÜoÄy¿w³7"lç}¿¼Ë}Ê.ðuw×uŒlyÊ~d*ÛbK‡ÛÃHS“Hä çü(Qí¹å—·ÉÜ©|úiŒñH­×ð §Oq~|*/—»ðÛ‰G£×$ùx¾Azéâªö; þ‡g·¬¼µãñ'ú¿øBjÁpÌ3ìÄ/8£¡l³-”Ê_ð3|]Ðw†’í¡tÑ…DƒµxÓFkkS£¿ÖfýŠ3•ú{ɢłµi/=¬–Ôµ óé§Ÿ;Ÿ~F*Ñ{<ÜoÄy¿w³7Âwqˆ´ #Ò®xúÔœÑ0\]]±Ó.âå)ø‘©ÿË/nÞÌ,¿ß/|ÕÞû&ª=ןy–È[ihˆ1žÊ]wyÅ¡’’„Œ=ÿþ·ÐTF›ñhôš¤ŸKç/¬ÚkŸúÓÏh¹áÆöGéyûíAÇ×ߟØñ³$`Fƒ¥÷+øaÆ›5S©üË6ÞT*ȚÎPj?Þ™Š4µ`ÚÈ›5C© Öfõa‡+õw…Ú´O™ä©6ËGêZ°voíñ¹ý‘Gä iÜo8s¿w³7wqˆœ–XŸ·ÀO Ÿj‰¿Ï×ùÌßJ-Ö(OÁL­¿¼ÍáöP¾ír±»Æ9Ù‰jÏR[ùý~ï´é±ÄS}èa"¯8ðÕW Ö<ôÔ…ß^<â½fòŽÏ¥ ×wBëwô¼ñÆ`~¾¯§Ç£¨wýfÖÞ¯ôz*õU²p‘T•»í®Õ~ÒÒ¥‚,_¾½½xD”ï_²µ©5>¤eÖ¦½x“€¶ËGêZ°îÝñ|Í}÷Éοà~Ãû ¼›½¾Áƒ'x‰Exï~ŸRK'zÞx£|ÇôÊSð#SÝI';ܪI9´´$°=Ïœ%6›wëmb‰§þŒ"/×ûŸÿ$d|h•XlÒº ´…xD{Í)“k|öfͬ>ð æë®ïzñÅ¡ÊÊÉ2oiíýÊ~˜Qª¯’9sÅÆõ+äÛdDæ;ðå;Ø‹Gãœñþ([›zãƒ`mÚ‹§L'md©|¤®Í7ÝìÀxÞvÇJ3¸ßлßÀ»Ù‘Z¤™­ÇHÃO Ÿ"3ú>ü°jÿµËSð#SùÖÛ:ܤNÌÏOlû÷õöм‘u f‚xš.½Läåº_}5!ãCóÏ®“û†ÁN<Ò½Æíã³7{nÃyçw<úØÀêÕRŸ.O4̱W>jëÀ%ë«dv¶T¥óêµ7ÿð°ÌGÓàUý±Ç£Q›âýQ§6åÇÁÚ´lÚÈ^ùH] š®¼Êñ¼õ×w(Ìhà~C÷~ïfoxÌþÍ6" À»Ð'ýŒ†œœÚcŽs¦<¥.“¾OZºÃí¡á¢‹E‚ïÿì³Ä¶©--k;"–xZný…ÈËu<ùdBƇF‰zÿ†!öxÄ{;ÇÛâÌéu§Ñýúëþ¡¡É>¨–ÌζW>eÒ;ÛkÔ—àGÓ’ù ôÚ›ìGSñèÍO첉½ñA6md#Ù´‘½ò‘º4\p¡ã¿\¢á™Øãá~#Îû ¼›½˜0Ýà!®xWûdÑ0ÚÕÕùô3µGãÙÀ¹ò”ºL¬^í|{hºú™)yï¾›Øö?TZ*òFjO8)–xZïºKük 'LJº³~(ò ƒíxd{ Ç۲Ͷèxì/£]]I3º®;ÞÒrùˆ4Õ¨/ñ¦JíM㣩¥xTÏ)ª_ïì9²3”Æ©Ú,ßn¹½xôúfìñH] êÏXáÀø¯1£û íû ¼›½='ºRz¢Þ%>Éf4 UTtþíou'ŸêÍÌr¾<¥.“]Ï=ï|{h¹ù…)y hÿ«W‹¼‘º3ÏŠ%žæn”)·ü#!ãCíñ'ˆ|Ã`¿¾ÄzÍsno½37l½óNßÀ@’¥q×Îh°Q>âßšjԯߋ´7ñÉöVã‘]Õ¯Ô %óè'‚‰{ñˆ×¦ò‘ºÔž|Šãë¯-5£!öx¸ßˆó~ïfox‚VYD<3àIñ“ÀOê ¾¾¾Á¢¢žÿ{Íoï«=ùÔÒÅ%¶<ÅgúÃÃÎÇ/¸³QbÛßGIM¿Œ%žÆŸ^"5$!ãCÝɧŠ|Ã`;©^Óþ‡‡]4Þ¦¥7\páHccRÎ+™m¯|ô¾¬_…Uý*íMs†˜âÑø\¼?*í¸!>žˆ¦ìÄ#´S>Rׂº“Ou`ü_:Áý†÷x7{Ã4'eWIü¤ðâ3ºßx£å–•›oi¾æÚÆŸ^Òð£sëN;½ö˜ã*÷Ü«dÁB·•§ØáLwÝí|ümwß-|Ç_ÿšØöß÷¿ÿÉ$.º8–xêVœ)òrýŸ~šöÜpÁ…"ß0ØŽGª×´Þu—KÆ[ofV÷k¯%ïOà –ÊÇ=â¯_Ù=ôÚ›3{4D‰GoU¿`”]:¡7žhÏh˜0¥ù)–ÊGpFƒã¿`¢!öx¸ßˆó~ïfoæ!þÍ|%FÀóâ]íÅ M—_‘²å)x8“óñKm2ÔýÒˉ­¯¯¿y#õgŸK<µG#òrƒ…… iÏÍ×ÿ\j*£Íúê5-7Ýì†ñ¡dîü¾?v[j ÿÓOkO8IêÙ¼³çØ+Ÿ2é õ+šhX¨×Þ4Î)°O¹|m*ôG……0ã‰NmZˆGv~нò‘]:¡=þ‹ïÑÀý†÷x7{Ã4Eá ž 2)ï~/¾t¢éò+R¶<Ågºìrção’8vhll¬çí·[_ƒÅÅrߊLOå~û‹¼œ¯·wíÆ¥·g‘Í¥º_~Ùv>”m¶Å`Q‘«R Cååõ§¯ði%óÎh°W>¢f´êWã;pö&û¸xdç§(o²{4è'Òµi9Ù öÊGpé„ã¿à ±ÇÃýFœ÷x7{cœzÂV\D>²ïv/žhh\—hHÁò;œéGç:ã%—Šß÷ÑG‰­¯áúz‘7RsäѱÄS¾|±%›lê|{îxì/"~ÛñÈöšŽ%‹– ×Õ¹!¹àíÿâ‹¶{î­>ìpÏÔ̵á•Î_(h°\žzÛ Ö¯ôöZíMu²},ñˆ4Õè¿^éÃJ•ƹÚÜÞ^<óS¬–ì Úã¿ìf1ÆÃýFœ÷x7ûÐ¥kE@Ò"Ò’ ¼«½øÒ‰Æï–N¤byŠMü;åTçã¯?÷Ç"Áää$¶¾¤Î¬úÞ÷c‰§t£M¤úNÍ!‡9ßžû¿üRd*£íxäzÍi‰zþõ¯De|==_Ýõìs-¿¼­öø×6xŒ´¹DƒéóÇRžeÒÛjÔ¯ÆÒ ö¦±} ¥x¤'Û«ŒoÎ,ˆ?~ñ7¬ÆS¦¹t"Æxä–NœêÀø/¸t"öx¸ßˆó~ïfo˜Šðm$ßïf_­¹t"ÕÊSvâŸÃñK-ᮩId}MÍôû|2wl;íK<ÅY3Ä’t—\êp{.ž–)rƒ»v*£½xÄwOÈøÐpÑÅÍVòz{Þ|sÍïl¼äÒšC+Ýx“Xâ/•L4dÛ+OÑÉöZõ«q ¢Fÿ_:a5Ù…0J× é…0Zã‰FmZŠGgY“µò¿ƒRÿEOˆ5î7â¼ßÀ»ÙžàÖ%!Òþ7t¹Þý^céDÊ–§èeÒéø+vÙMæƒßï>#QõU±ÝöbŸ¦6œc<#--"¯ØþÈ#·çª}e|v­™´ìNã Ê–måëéÑK.Œ¶·w¿þzÓÕ×T'cнø÷hðΞc¯<õ>ÌÖ¯Þwà²íSú;pËñ(ìÑ ßöhPOtöh°tmÚ)Ñkúø¯°G÷ê÷x7{#`ÅEhr¢8hŽDš't…Þ½^méD*–§àÄ?çã÷Ι+ÕÖÎHH}Õž(3/c´½=öxzW­yÑ¡òr‡ÛsÓ5× ^øíÅ£Ók”Ž™innYykÅî{§eĉô 6âQ˜Ñ _¿ÒÇ[jõ_ñDƒÕx¤·T¹^x¥ÓFJã‰à öâ?ÆFùÈ&´Çéã-¹ßpâ~ïfo„ìÜuFzÈ?á]ëu6ƒLÑòT˜Ñàhü£2ñŸvF¢ê«ùç7ˆ¼…Õ«c§íÞßHuŸòm—;Ùž{ß{O$ì] -Å#þ-–ÃãCåÞûj¤𝻾8k†`ü 3,ÇS¦sê„lýz¥÷hP꿲ÛÚˆGãÔ ñþ["¿¤Êx"˜6²ÂŒËå£tê„Òø¯qê÷Ú÷x7{#…Svf~Rx¥ã-S³p†õÿl¶î"0w»×\:‘rå)»g²óñw½ð¢ÌeàùU_ýŸ.òÚî¹'öxʶÙNªûô¾÷žcíYjæçº©Œ6ãQ^—«<>dLin–*FÿÈHÍ‘G)Å_ºÑÆbŸ¸fgÛ‹Gùœ™ú•Þ£A«ÿêŸS0A<âM5ú¯ìü½ñDvé„xÄÓF6ÊGz¿Ýñ_t3È4î7œ¹ßÀ»Ù³…!¿ð«ñ(ôçÆ‡ÎgŸ•*Ã5÷ݯå{‰&ìÄ£±\¼~½Ò›A*]D¿·ìŒ¥ë…øŒ¥ñD:md9µa,”ÆŒ½ñ_vF÷ÎÜoàÝ샎· ÈIæ'B&Bà'WšÑšå)= Üéø½Ó¦û‡†DÞBëw:×ße>õ WUY§ýáÿ'6Þç+ßv;ÕöìÍž+8á,hhËñˆ.8rz|mk ¾ïã=iªñ×¢\¢a޽xt¾®_…s T®GÒ“í-Ç£ð¸|ûÜ£!x!Œðx"»GƒxÊä—5Y.Ùköø/;£û gî7ðnö†Ù*‹4ÉMrx×z=R¶<Å·2rþýöñ…È[øæ§ãOËúÔ×õ‹Vã©?ó,ÁNÔùìsªí¹ýÏÊöúñs­mÄ£qê„3ý¥xZ¦T6œw¾vi¼äRÙ 6â?uB£~ÕVõ ׯôŒËñH¯êWiÿ²›Aê'[{ZŠGöèY{å£p-PÿOà~ñû ¼›½éfáë1&ÈaàÝæ«u·L­ò”Þ 2ï·å¶ÛeÒä~ùö;:Í1ÇIµáúsl5žâ¬RË&¿[pæYJí¹r¿ýý>Ÿl¯_wÜ”x4ÒsÎô—ÒÍ—ŠDîðn8[»¿ Šæ5ß râxþÜ^yzµ6ƒ®_…ã-­Å#þ¸Fû—Ni' ›AZ‹§L¡oZ-éýztÇéÍ ¹ßpâ~ïfoæ$"d,ÒÂwzÀ»ÜkÎhH¹òTžÑàÄû-ßq'±¬ósÏ9¿Ôyþáa6âé|úiÁ~äëí-ßa'ñú-ÛfÛ‘¦¦1éŸ] -Õ¯ÚŒõþR¹ïþ2Óòòèï}| =£Ár<{4ˆ×¯ô Z×#¥=bGü°Rö¯pX©Êx¢?£a‚xf4X.¥S'”ÆÁD÷ŽÝoàÝì Ó%âÐßÇO¯–hHÅòÔÙ£Áé÷;TR"ó‰Ýç_ý«Í‘GK5àžwÞ±OõaÂ]iÈëõn8G°~K7ÛBpçç ¿íú•Þ£Á¹þR{Ò)"‘÷®Z¥Þß§Lóõ÷Ë%æØ‹Gú£©Jýª~.X¿²ßÛˆ§Le~Špû×X£1ž(,„±Îükå#ýUîø¯³G÷º÷x7{Ã1E‘nö‡tü¤ð:K'R´<¥—N$æý¶Ýs¯Tcèüû³ÎÄß÷É'b øâŸÚŒ'-}¸¾^¶7õ}ôQÉÂE"õ[²dc©R„olÖ¯BzΡþÒxée¢Sgû{å¾û Vwàñ––âQØ£A¾~u¾—¯_ÙïÀmÄ#=?E¥ýKïÑ 5žHצåx¤g4Ø)½5ÆÁ=¸ßpì~ïfoDÎU„?cZÔÜÞEÞ‘DCª”§Îw³N¿ßòí–K­©óŽV쾇vüµ'Ÿ"ÕzG»»½sçÛŽ§í¾ûů©Ã55•{ìgýÖ­8s¤µuLí'øÂo­~n.ê/¢7šºý½ãÑÇ«»dÝ VãQšž-[¿šM%ëW-Ñk< MåÛ¿øa¥Jã‰ø"VãQ˜md¹|t I;þs¿Áç»$óFØ‘ia.-röïR¯·t"ËSs…¡£ï·ëùÄ®[UUÁó‡…ã/Ûf»ÑÎN©hÛî¾'žx*vÞEã²ê¨?÷Çöʧdáâ®W^Sþ‰¼frâúßBÕ±þÒzç]"‘÷¾û®j/Y°Ð70 =£ÁN< GèÉׯÎÒ ùúÕØ>ÐR<šµ)Öþu–NÈ'Ê;nLæl£XãQ¸hŽÿ’K'¸ßpè~ïfo˜Íˆˆ¶$?)¼òŒ†Ô*O¥ÕæÎ¿ßòíwÜ(¸÷ý÷=éS4â÷n8gÐ㻾öôxçͳ<¥Ú@øÏ@^^ãÅ?-Κc<;íÒöÛû¤ŽüŒí;õ«Ðkê/MW^%ù`Ajo½ýW²Õ¾dŒñè|.\¿â"*]f4X‹GmÉö/½Fk<Ѭ͘âÑI4X+µ;(•ñ_ôÔ î7ºßÀ»ÙÑWVE\žwµW:Þ25ËS'Ÿ˜÷ÛõâK‚­¢íäãß ½ûŸÿ” òÞßÄ_žµ'ž¤z‰íèXóÀïª<ª|ùÅ3gÅ“–Q²x£Ê=öl¾îúœœ1B¦2Zª_Mœé/ug¬‰Ü?2R²`¡R/Ûr™à”Ÿu‰†9öâqäÃL¼õ«·} lý ~n/3D„Û¿ÂB•ñDakñ(ÌO±\>Ê' ÿÒ{4p¿áÄýÞÍþ»DC‘yrb}Ò"à]î5·L¹òÔÏÇ;÷~ËwÜÙï÷ 6Œö‡ÿŸgj¦TüÞìy²Y_ooÉ‚E"åÙóæ›Ž]qGÛÛrrú?ûl¸¦FêV5žolÔ¯ÚÎ&êý¥ê ƒ¥ °éÊ«4ú»'súÀ·ßŠW÷ºÍ -ÇS*=£A£~ ^“=ÄêWãœKñhž:!ÖeÓFzã‰Ú ±Æ£Q›VËG|c`Õñ_mF÷Š÷x7{#|YEQP®"=Â!™xW{¥ ©Yž²ßÍ&üýНµëÿò˲-¶Œ?þÊý®®–­í·÷I•gÙÒe‚G NŠŸ°] -Ô¯ìÍ¥“ý¥|Ûíç©eL¿ãñ'4ªÛ›=×^š{4Èÿ§Np¿¡}¿w³7Âs‹.Âw˜ÄO ¯”hHÍòÔùÈäŠ÷+~…~Úî¿_½<§Lë~ýuw¾ýŽ¿þÕc¤ ^øíµ7³Óì/ŽÝÛvvy½ý_|1›;T^>ÒÜ,¾Wk샼½ò”ýhªT¿J‰ññY|²½Õxd+Uº~ &+OÄ VãQ¨MËå£w‘Æøß"yê÷ÝoàÝì ZĘÃÀ»Ê;¹GCÒ—§Ú$ðÄ¿_ÏÌYƒ……É”eè}ÿ}Oú'Êsê´ž·ßvÛÛøæï¬Ù#½æÈ£e¿a°Z>Ú3´ë·Vb.èäúiYy«½òtþ;põ«±¤Æø¬½GÄñh|.ÞÙq#þø5–NXŠGuÇãq~Nh<íM|é÷ÜoàÝìñœ„é2Œ¢°c3ñ“ÂëíÑ‚å©ñ‘É=ï·l›mE6òqÃÏpuõÚ¯§œ)Ïâ̬Þ÷ßwÏÛòz½ ¾»i–ú†Ávùh|‹åhIËøæ›”J4´ýö>{å)ø­©^ýÊîÑ 7>ËÎh°Æüñþ+»tBoÓïvï@¢!uÊSi…¡ÛÞoéKrr&ã¤Þ÷Þ+ž;/±åY¶åV½«V%äí¯ùã=S3Câü†Á^ùˆß\&¤~½sç»?7X\,ò<=ï¼c¯<•¦gËÖ¯ÞGSÙö©:Ù>–xÄ?šjô_ñÃJ•ƽ7bŒGa¶‘åòÑ[|ª1þËnÉý†3÷x7{#dÇȵ“©X÷ßtü¤ðJK'R³[¨&¤~kŽ;ÁÍ ‹ú>ù¤8{îh[›@sª¨°WžâÛjÔ¯ÆöíMcû@KñˆO¶×è¿:K'äÇñ7¬ÆS*Y›6ËGüZ :þË-xšû Çî7ðnö†éâŠÀ%E1,ÆÀ»ÍëÌhHÑòT;Ú•ïwƒô–_ürR,M÷ Öÿø<·•§wނΧŸÑ~ï£kÖ4]s­gjf¤xªÅ.ü6ËGa]nÂê·æ¤“Ý™kèyë­â¬™#½ÿ‹/Dž°8{®òl¯U¿Å›Ajµ7¹ ÛÛ‹GiÙþ[,œhÐOdkÓFjf$ëWoû@Ùö&û¸x¤÷hPéâ a”Æ…=¬ÅS*??Årùè@¤1þKïÑÀý†÷x7{#8ž®ˆ¾ßÞ¥^ïxË,O½ýóÝ\>¥›mÑñèc.ü"w´»»õ®»¼ÙóÜß~<Ó³Î;¿ûµ×F;;ãM¬ÔÔ´?úXå~ÄOÍÑÇÆ_Ôí>j»|¤×å&¾~kO=Ý%Ýa¸¶¶úÃãoú®ùç7Ø(¥ çdëWaU¿J{O4XGcFƒxÔHiŒ'J§NÄNmZ+½5ÆS'¸ßоßÀ»Ù!ó—Uo혫À»Ü«.Hµòÿnv•OÙÒeO<á’ïr}==m÷Üë7òµ·ô)•ûîß¼òÖ®W^ÈËóõ÷Oü•õðð`QQ×+¯4^}MÙò¬ÆSwúŠø ¼íÞߨ.ÑMÜR¿å»ìÚÿå—‰œÈàóu<õTqö¼ø«>Fäù»^yÅFùh¬¯_Ñ¥ õÚ›øÒ «ñˆŸ:¡Ñ5ÒFã‰øŽVãQXÖd¹|d—Nhÿâ§Np¿áÀýÞÍÞÜÅ!$ø\![Mâ]î•NHÍò”žø7ùʧt«m:ŸyÆ?:š°CooÛo~ë¿ IÚÛé%›m^ù½ƒjŽ>¶öô ç_ÐxÅ•W\YÿãójO9­ê°#Ê·ÛÞ“15žxêÏ¿@àûí›n¶ý~5ÎNwEý¦e4]}¯§Çù^Ðýúëå;îdñŒY"i|ƒƒ% [„—N¨Ô¯èdû…zíMp²½½x4kS¬?ÊÖ¦Þx"Z›vâ‘^:a§|4f·éÿ-r›Ar¿áØýÞÍÞ( ÛÚÁôL³'Å»×ë-HÁòÔÉÇO¾ò)ßvyçsÏû}>GS }}m÷Ýï]°þnÉ7^uuü…ßpÉ¥¶ãÑ[—ë†ò/ÙlóîüÙ¾àëïï|î¹Ê}÷߇м\ËÊ[­–Æ©âõëUØ>P£½‰ŸS`5ž2•ù)ÂýQz3H­ñDm~J¬ñH=k§|dÏíÒÿ7ƒä~ñû ¼›½< "p:Dè®’ã;=àÝï8u"uÊSvød/ŸÒ6i¼âÊÞ>Pý”åëïïúÇ?êÎúañ¬Ùôw¾eå­ñ×BÝ™gÙŽG:=çÆò/ÝxÓæ[V•–ª¬’éû裆‹.öÎÎŽ%ž–_Þ&òºÃµµES-•ìÒ ¥ú_:¡ÔÞ”Nˆ=ž2•Úîâi#¥ñD:md9é´‘òÑ8uBoü=Þ’û ‡î7ðnöFXB"ôTÌÀ¿ ?¾ǧ¦÷.ZÒpÑÅO=5äõÊ|²îÿòË5x¸öÔÓŠ³fRþñøŽ'ŸŠ¿F*8òœØo^õýƒ;žøëPiiœçÂŽ´¶v¿ñFóM7Wt°'k&íÇãñÜoPþ“מ°-"üoЮx<?þ¿Þy jŽ=¾ùÆ›ÚÿôçžwÞ,.ö D¿¨Œvt ¬^Ýýê«m¿{°éÊ«*8Г™EyJùü|onçÌ¥<-yU‡Þ|ãM]/½4XX8ÒØhÚüÃÃ#ƒ}~ØýÚkíü©þÇç•m³å‰Çãñxî7(ÿ¤ñF¤ ÁN›p‚ÇzÏôÞy J6ݬlÛåå»íQ±Ën¥[m]²Ñ&Ås²‹¦fR>zÞ“53þ;‡ëê(Oï™6Ý»hIù¶ËËwÝ­t‹-‹gmHùàñx<žû î7’ÞEÁû7DZá ;ÄÇãñ.ôUûÿ× =«VQžx<Çã¹ßÀÛóF@N"Í–¥ÙU2üïñx<>‰½gÆÌâ¹ó‹çÎ[÷ßyÞõÿú÷Þ ¿ òES3‹¿í7¿‰ÿÂßö»ix<Çs¿ÁýÞž7B¶‘Œü¿i¦ÛNâñx|û¶ûîÙê²õ×w8ÆÔ‘¦¦ø®¿ð'´<Çã¹ßà~oÏ!ÈlFàÒñx<>u|ÝÙçˆ\ø‹‹‰¿æ¤“E®ØcOÚÇãñÜop¿·ç°W¤™n)‰Çãñ)âËwØIêòŠwu þžwÞ‰?Ô‘¶¶¢´tÚÇãñÜop¿·çàlDZäm$M³x<ŸÔ>cê„GuÆøÓñøÚñׂH¨]/¼H{Àãñx<žû î7ð¶½¶—ƒÉÃq^Ç'¹ïÿúk‘«©ßç+ßig½ø=3f WW‹„ZÞù´<Çã¹ßà~oÛÁé‡Àÿ¦Å®Àãñø$÷?.5›±÷½÷Š6Њ¿íD‚ôõôÏÚö€Çãñx<÷Üoàm{Ãc¾CzØo¦…®ÐÀãñøä÷W\9&÷Óvßýñ7\z™ßý‘?Ñðx<ç~ƒû |<Þ0Ý42Br"úÿâñx|zïžþ~ÁkÓµ?“_ðª?66V¾ãδ<Çã¹ßà~7‚sÑ!Äàñx|Jø5ý~Lô§óÙg‹çd ÄŸ1µù¦›¯ú]¯¾J{Àãñx<žû î7ðqz#òtˆ´È <O!_²ÑƾÁAÙkÿpMMãUW{ç/°õ1Ç z<‚!ù‡†J·Úšö€Çãñx<÷ÜoàãôF‘‘^h¾—Cècœáñx|ªùöGþ4¦ðãî~íµš“N)š2-ÆxŠçί;ó¬žwߦíßÑðx<ç~ƒû |üÞ0ÝÔ!øwÒ¢.ÃÀãñøä÷%›/õ©ýŒ´¶vþýï­wßÝxÙå5'žT±Ç^ÞEKЦfzoT¾ãNU?8´öô-·ÝÞ÷Ùg~ŸO#€¡ŠŠâ gÓðx<ç~ƒû |üÞˆyG‡t‹;@àñx|RùöÇþ2–¤?þ‘‘Š}ö£=àñx<Ïý÷xo˜MxýÍÀÂãñøÔôž™³rr’òÂßtó-Ô/ÇãñÜop¿—òF -¢å0ðx<>u|ɦ›74$ÙU¿ë…‹Ò2¨_<Çã¹ßà~/åÇg4¤…•}ÉÒ-û¿ùfr]õGZZª;žúÅãñx<žû î7ðzÞÿ“YÒ"â2 <ÇižiÓÛ}t²\õ;ž~Æ;oõ‹Çãñx<÷ÜoàU½2óa­wÁË-ÖÿÇãñã¾öìs†ëëÝ|ɪ¨¨:üê Çãñxî7¸ßÀ;àèÛEFßïÇãñkÿד™Õxõ5#n»ä××7^~…gÚtê Çãñxî7¸ßÀ;ã)…a“ ƒ2éx<䋦g5]wýHs³+–G666^}'3‹úÂãñx<žû î7ðNz#pÚCà̇àtEøîx<7÷ž³¯ýYÿ—_&äH*ÿÈH÷[oÕžy–'3‹úÂãñx<žû î7ðÎ{#쌊%éaÏŽÇãñø˜¼wÓͯºº÷ƒü££ê×{Ÿ¯ÿ«¯š®¹Ö»h åÇãñx<÷Üoà袰­ÿ9øÖ3<ÇÇî‹,¬¿èâοý} 7×?<,u±íêêYµªåö_Uq¤gv6åÇãñx<÷ÜoàÝàB³M‚ç?˜L“Àãñx¼M?uZù.»Õýèܶûïïyçþo¾*/]³Æô[¿ßïëëik*/ïýàƒŽ§Ÿi¹ãކŸ\TuÄQ¥Ûl[˜–Ayâñx<ç~ï6o­¯0¥&‰Çãñxq_4sÃ’M6+Ùr«’%{æd{¦M§|ðx<Çs¿ŸtÞXwÐeÈ6’&‡aæ0ðx<Çãñx<ÇãýazEØ/mÿ€Çãñx<Çãñx<oêƒf4>EØ®’A;=àñx<Çãñx<LJ{#d:D¡ùQé…fi <Çãñx<Çãñø@`„í$™òkÁë.Òñx<Çãñx<Çã#y#r®"-ì¨Ì´¨¹ <Çãñx<Çãñ©îàÅúᲫ$Çãñx<Çãñx|È¿!3BÖ]˜ý/Çãñx<Çãñx¼¹7"ˆÐ=$ÃÉÄãñx<Çãñx<õ†™LQ„î÷€Çãñx<Çãñx<É‘9-Ò¯áñx<Çãñx<Ç›z#8'aò a‰ <Çãñx<ÇãñxsoDúMÓC2£>ðx<Çãñx<ǧº7§È|þƒéSãñx<Çãñx<ǯ÷F”6QÞÇãñx<Çãñx<>ÔDztb¿Äãñx<Çãñx<ÿnFÃwÿVù7ƒÿ Çãñx<Çãñx<ÞÜ‘r÷„Àãñx<Çãñx<7XU‚Çãñx<Çãñx<^ʱ¥%Ò-¦1ðx<Çãñx<ǧ¢7BZÒ‚ˆÓ$ðx<Çãñx<ÇãM¼A2Çãñx<Çãñx¼”7B~!RÞ"RöÇãñx<Çãñx<~ü_‹ù <Çãñx<ÇãñøHÞË=˜¬¾(0›/Çãñx<Çãñx<âè+. ",ÉÀãñx<Çãñx<7ŸÑPü›Q¶— yv<Çãñx<Çãñø@oÌ‚ˆø y <Çãñx<ÇãñøHÞŸ Q¼Ä"dÇãñx<Çãñx|$oF8š¢ÀäwÒL·‚Àãñx<Çãñx<ÿnFCØ¿…¦+¢<Çãñx<ÇãñøÂðS'‚'E˜RÓmðx<Çãñx<Çã×ÿ¥±6'Qõ7ÇóãÆãñx<Çãñx<÷†éYÁ+.Ò £%-ðx<Çãñx<ÇãÓÆ÷hH+4ÏX„ì*™fú÷x<Çãñx<Çãñ¡3 Ì—a„§+Òðx<Çãñx<Çã#y#,E‘VaoÉð'Åãñx<Çãñx<ôÆxâ!|ÅE¤Õx<Çãñx<Çãñ¦~ý Áɉ´‚àí–dàñx<Çãñx<LJz£ ò’fçX¤ãñx<Çãñx<ÇGò†é{H˜ä'ðx<Çãñx<ÇãM¼Qhö -BRx<Çãñx<Çãñ‘¼Q¶¯ƒé2Œ‚à§Æãñx<Çãñx<÷FøŒˆHË0 CŸÇãñx<Çãñx<>Èfs!‚³iÁs$ðx<Çãñx<Çãͽþ;¦'aFxj<Çãñx<ÇãñøõÞäx˵"ü—#_Çãñx<Çãñx<¿ö_“I&û:Xyàñx<Çãñx<OMo˜®µ0]y‚Çãñx<Çãñx|zAàñ–a¿“[>Çãñx<Çãñx<þ;o„üBøÑaψÇãñx<Çãñx<oîcÚ£!Ò³àñx<Çãñx<ÇGZ:‘Bó'XžÇãñx<Çãñx<ä­ÎhàÁƒ’7&\h1QÇãñx<Çãñx<>-tÓUùëÍ ýW<Çãñx<Çãñø¿1L—UDúCØ9™x<Çãñx<Çãñëÿ`ï$™øÓ¤Çãñx<Çãñx|7B~90åÈ <Çãñx<Çãñø|ÓS'‚9-?xÇHÓ%x<Çãñx<ÇãñáÞÈ=”"t‰E~ÔÅx<Çãñx<Çãñù3ÂsAË0òƒÓx<Çãñx<Çãñ‘¼Q¼sCAÄu!ûIâñx<Çãñx<LJz#|_‡ü€äDÈ2 ÓC2ñx<Çãñx<Çã¿›Ñ<Ã!-|÷ÈHƒÇãñx<Çãñx<â ³\Eè6’ù‘ŸÇãñx<Çãñx<>?0Ñ0 "-?ì$L³gÄãñx<Çãñx<7ñF¾ùy˜i¦éгõx<Çãñx<Çãñk½azpE„Œ…ùßàñx<Çãñx<Ç篛Ñ>áÁdS‡¨$ðx<Çãñx<Çã×-È7ßì!-Âßãñx<Çãñx<Ç›{#?ñÇãñx<Çãñx<4£¡ 6)Çãñx<Çãñx<´t"xqEЯ…ÿÇãñx<Çãñx¼é_–æEXœGÇãñx<Çãñx<>¥¼–H›èyñx<Çãñx<Çãͽ‘?Q–‚u½ó/¤Y|<Çãñx<Çãñ)ç#Îhȳ˜ÛÀãñx<Çãñx<7(,<Çãñx<ÇãñRÞˆA§[|v<Çãñx<Çãñ)êÀÄC^lù <Çãñx<ÇãñxSo˜>E8Í‹šÆÀãñx<Çãñx<Ï3Ò f€àñx<Çãñx<—òF^X–"üéÿ Çãñx<Çãñx<>’7"%*Ÿ7/jbÇãñx<Çãñx<ÞX—“]nò÷áÿŠÇãñx<Çãñx<ò7oþìx<Çãñx<Çãñ¦#d¡EžÙìˆix<Çãñx<Çãñ¦Þˆ´¾"Òd <Çãñx<ÇãñøHÞÙ1r<‘qIÇãñx<Çãñx¼¹7Ù 2úº <Çãñx<ÇãñøHÞ0ËI„n&iºÃ$Ç»Ó{6Ú¤öü œ|/ÛÚýåS0g®ÃÅR²ãδO<ŸÄ¾pÖl©“òÄãñIæè›FF:6Çã]ë+?bÌÙŸ5>æþò©ýÉEKãÏo }âñø$öÅ˶–0)O<ŸdÞ_q1¾idx¢Ât×<w•¯8üH‡?Q´¶ægLuyùt¿ý¶ó‰Ú'Obï•K4Pžx<>ɼ<Ã!-?l3É?àñx¼Ë½ó‰†±±±Š#rsùÌÎö 9\& ëf4Ð>ñx|RzÙ ”'O&oäEØÅ!R–Çã]î’hhÿë“n.Ÿš³Ïq¾LÖ&hŸx<>Y½ìŒÊÇ'“7ò"hÓ_0Ý Çã]å’híè(˜šéÚòézõÕ„$hŸx<>‰}±B¢òÇãñÉá¼yˆüÈ¿ƒÇãñnö I4ŒU¢;˧ k¦¯¯/Q3hŸx<>Y}±òŒÊÇO^o˜móí° <w¹OT¢¡ãïϺ³|ªN==!Ò°t‚ö‰Çã“Ï+- üñx|x#`¶CZ¤DEø?áñx¼k}¢ £ÝÝù™Y.,ŸŽgŸKHŒ/ }âñø¤ôÒ›ARþx<>y¼ž„È‹zjÇ»Ü'*Ñ066VuÊin+Ÿ‚©™£]]‰J4Ð>ñx|{¥ã-)<ŸÞÙ¿!–§Ããñx7û&:^|ÉmåSyÌq‰*€ ´O<Ÿ„^i3HÊÇ'7Lÿ9ú³àñx¼›} ¾¾¾ü³\U>k"‰Ú'Ob/½t‚òÇãñÉãHTŒ/½È‹ú2x<ï6ŸÀDÃØØXõŠ3]T>éSFZ[U?¿ö‰Çã“Ø‹/ üñx|Òx#:Š4YÇã]ë›hè|õU÷”OÅM`Q„, }âñø$ó3(<ŸÞOKDHZ„ÿ/Ç»Ú'6Ñà(˜5Û%åÓúðÿsC¢ö‰Çã“Ò+Ìh üñx|rxÃÊS¤[|I<O€Ol¢all¬æœ¹¢|6H®«Kl¢ö‰Çã“Ø+mIùãñø$ðFtýŸðx<Þ…>ቆ®7ßtCù”î»bË!|éíÇ'“/Ö9Þ’òÇãñIà JÇ'™Ox¢Á74T0gnÂ˧å·÷%¶ ´O<Ÿ|¾Xy3HÊÇO^oP"x<>É| cccµç_ðò,+sÉŒÚ'OJ¯—h üñxüd÷F^dã3âñx¼«¼ Ý3Øò)Ùe·„BƒÙŒÚ'OïÌÒ ÊÇOFoäY|F˜ÑÀƒ“ôaŒÁãñIæÝh«»ø§ ,Ÿ‚&hŸx<>™¼“‰ÊÇO.ÏŒ9¼ó3(<?Y¼ö !O”;Á àñx¼»¼{ ~¿¿hãM.Ÿúk®uk¢ö‰Çã“Ê &(O<ŸdÞ˜Ôi<¸'Ñ066VíÏ.ŸÞ?tùŒÚ3O¯4£òÇãñIàñÎ £Ñ“x<ïNïªDCßçŸ;Y>…‹–ø}>÷$hŸx<>‰½ê ”?ŸÔÞ ¹!ðx<ÞµÞU‰†±±1Ï[:V>u?½Ä=o<ö=hÏx<~2z ”?Oo„¤("å-L³x<ïB_î²DCà 7:V>Ý«V¹3Ñ@ûÄãñÉçÅ÷h üñx|Òx#×âb <w¹wÛŒ†þo¾q¦| ²çù‡‡Ý–hpûÉŸšY8w¾gó¥Þw.ÝwÿòC+;à{%»ïY¼ýŽž¥Ë oT0;;/} ý+ºÏŸšY´dãâm——î½où!‡•xPé{y·ßѳŖ³³)|$©z·ßѳtYѺèÎø=j§NÐ~ðxüd÷F¤•¹‘ÿÇãÝìÝ–hólµåSsîÝ5•cÝŒ—´Ÿ‚ÙÙ¥{íSsö9M¿úuÇ /öûíHk«oh(¦DFG‡ëëû¾ü²óõ×[ÿøHã-+kÎ;¿t¯}ò¦f¦lÌŸšYqø‘M·ÝÞñò˃ÅÅþÑÑ(8ÚÕ5ŸßõÖ[­¿ÿCõÏ.Þr+Æ«Tó³³Kâî€]a0±ïWcÚOoäEÍXÄ|ˆǻŗ»/ÑиòVʧëõ×]˜hHl{(^¶uÝåWt½ùæpS“Æ{ô ö}þyë®9ûœâ­·ÍÛ ùûWþ†sj/üIçk¯öôÄSt#ÍÍíû{å±ÇçM™Æø–¬Þ±X¡j¿_ñ ´<Ÿ4Þˆ}F^„ÂãñxWyÎhÈËÓ.Ÿü™úÜ–hHH{ÈËšYyìñ­ÿ¿ÁÒR‡ßòpCC˽¿)Þf;ÇÞo÷»ïÕÖ¯{ ÿ!äŸLÿr¸¶Ö³éæ±ÄS²Ënm>æëí•-´‘¶¶Ö*œ·Àñ¡ûÝwm”O¸¯8êê·þúŸÇOôø[|ÈÉñ9ßб÷«tê×w<ŸÞœö-]‘ò2x<ïNïÂDÃØØXñòT˧êô"qúý~ñ ޵‡âm—¯ù듾ÁÁ„WwχÖœw~þŒYÚí¿?7W`iÏÒeÑã)Ù}ÏžÿþWµÄFÛÛë¯ýYî”iªãƒHqUž|ªí¹é×wˆDÛþô3ÎŒÏ.ì€ÚãG>ÑÀõÇ'‰7ÂçBDYŒa:wÇã]å—NŒöôøGFDžªéö_©–OÇó/|·ÜÚÚrÿJÇ[ª¶‡Ò=öê|å¿ÏçªìÒhwwË}÷ç͘¥×þ¥ ‘ž¿hÑ’5?áXÁ–”Tžp’Þø •h¨:ùTÆ7ÁDƒöøìæ˜oÖ¥êKïÔ ®ïx<~²{ÃLg„ü9ü5ðx<Þµ^pFC÷;«ºÞxCfõ„Ç£W>yÓ¦vwÇäšGk¾ç^Ù¥Úí¡ìàC\u¨gøÏPUUÅQÇ(µ‘OÎEK—™>õгDڕ寣ß¿pñFýEzFƒîø&;£Aiü)Ÿ °ü¨c”êKãÔ ®ïx<>9¼‘y•E®YÆÇã]îË% ïTŸõC©góî²›RùTw‚H„å"›hPmù³fw¼ðâØ$ùiö¹‚‹ÄÛ¿àŒ† çOËh¾÷7 ,®ÁââÂ%‹·Ù Úã›ìŒññvÒuÀ‹ÄëË£6£ë;ŸìÞˆ2)Âô©ñx<Þå^6ÑP0sC©Ýïšï¾G©|ÚŸ|J`µººÜ´ ñDƒR{ðîºû`IÉØ¤úik«:éÙö/¸GC^À¹Ý3ðâ,))ÚxSÙö#;£A{|ŸÑ ØK&y”ª/¥¥\ßñx|x#7lç†È'dfb<w§—M4äéíÏ=/óÁ©¬L¥|2¦Ž¬Yxk·¦×X:!Þê.¹ÌmGlÄøã©<á$Áö/”hØjý3gfõüßÿ¹¤¸ËÊŠÖˆ!Ò~g480¾‰o)Õë.¹t’w@±úß ’ë;Oo˜Ÿ ä<w§¯N4T¢Ô–î¹·øû-?ôp‘ØJöÙ/O:Ñ ^¿“j¶¶éop°üÐÃ¥Ú¿Ô ß=ÆÔ®þÓ] ì+*Š–l,Õ~g480¾i,ˆ³½%eŒ§¾Äg4p}ÇãñIãÃg4dDÚU2daǻӋÏhÈ›š)2e`ll¬å¾ûÅßoÛ#ùêxíókÎhˆ÷ýæMÍìýðñÉÿãëí-Ûï‘ö/›hXóÔÓ.,®Žç_ê/¢3ÔÇ7ñDCœñ$S,Ýï‘úÒØ£ë;OoD9¬Ât¾Ç»ÜË&¾û0ÿØ_d¾ž­®ÎÝ@ôý¦e 74ÄXóÝ÷¬}B¥Í EÞ¯ÈV.ùíèÜÔvùîÑPsáO\[\eßû¾HŸÑ :¾‰/ˆ3ž$ë€%1tÀ ËGüÔ ®ïx<>i¼}'ÉðÇ»Ük$Ê~p¨ØG¦àoÒâ|¿¥|O$*ïN»¬}Bñ RõÛpÃcÉõ3PT”;eZœå#5£¡hé²Ñž×–UNNnú”øû‹ì©Úã›Æñ–¶ãIÖg}É.àúŽÇã“ɇ,ÈȰ#Ïl¿<w¡ߣ!×HÏMË®¯—Y=ñÐïßoË¿¸áÎÏ~µ¥q½ßÊ“NñûýcI÷SÝõq–ÌŒ†e[÷~ô‘Ë˪öÒËâï/âÇ[ªŽo¢K'⊧*y;`œõ%¾$×w<Ÿ4Þ0M?äšÿšùÔ<w•ŸÑ°öù[~÷ Ès××ç¥eH½ß¡ÊÊøCj¼õãϬºtÂÞûõîº»Ô £®›¿ÝÝ]0w~<å#òɹï³ÏÜ_V#mmÙóâì/²K'´Ç7í¥1ÆS’2ÐFùxf4p}ÇãñÉá[8Dû<w³/טÑ`¤—îµØê‰ƒy¿%»ï)g«mÆŸS#ÑWýfL(*ræS‡opp¸±Ñásûê.¿"žò‘úä<)~ê.½,ÎñÁS'Ç7¥DƒµxR¬Z-¥Í ¹¾ãñø$ðFt}IÇ»ÐW¨ÌhHÏ5ÒKKEž¶õˆ¼ß¦;ïø6û«¯Ÿ_ïÔ {ï·öÒË´Vh¶þááúë^uúŠÒ½÷-\¼Qî뮎Ógn¼©w§]ʾÿƒê³ÏiûÓŸ •ÂèûòËxÊ'¥ Ýï½çø ±GƒÞø&žh°ó0×HÏè€5Žt@Ûå#>£ë;Oo˜Îˆ2)Çã]î¥g4dˆÁ8ÒÜœ›>%þ÷+òMcÀ6≆ã¬ßü 猴´È´øüóÊOÎÛÀZ<%»ïÙñ‹þÑQñxÖÎ(±×R*Ñà)ÌžÏø 8£ÁñMöxKñ(w@kñ”ì¾—^´]_zÇ[r}Çãñ“Ý+.ò&Êa„¬ÐÀãñxz=Ö>ñö;J=sù¡‡Çù~½Ëwøäæóm²YàókÌh°]¿õ×\+þ•xÙ!‡ÅÓÞJøÞpc£lT5çœk;žD%|ƒƒÃuuý«W÷¯^=\Wçræu«Ïýq<ãƒÒŒ¥ñMiFCìñ(uÀxÊG£VŸó#ÛñxÔNàúŽÇã'»7r'šó`šÃÀãñx×ú =¾[¿zµÈ3·=ö—8ßoãÊ[ã£çÃCž_i鄽ú•ý¸çe<í­p£MdW­·üîAÛñ8–híêêüÇ?j/º¸x›åù³f‡G’?;»ìû?h¹ïþâb½0:_{-žñA|3HÕñMoéDŒñhtÀøËGµZGáÔ ®ïx<>I¼1af"ÊÆ’x<ïB¯4£aíCê0ù‘¶¶ÜŒ©ñ¼ßþo¿?ŒÚ€Ýõ” ¶ëWj«Ëï>äܲR°½︳à–u=|`; ýß~[~äÑ!Í5zù”ìµOß×_«Ì¤èïÏËši{|P:uBi|“]:a5¥(R>âÐv<Å:3¸¾ãñø$ð†éœÓ?G™#Çãñîñ¢‰†U!Ï_´ùR©óä+Ž>Ööû-ZºLdÅ{Á‚E!ϯ:£ÁÒûm¹ï~±ÿ÷âí­þÚë¤Âª¨°j¢a¸¡¡æü rÓ2ìôÇô©uW]­q‚@ÙÁ‡Ø¤OÐß´g4DG¶Š—Oýµ?ï€6âq`é×w<?I½¨'ÜF2äÙñx<Þ…^|FCÈó÷~ô‘È“¯yêiÛï·þg׉¼»ðç—>ÞÒ~ýö}ñ…Hþááâvooù³³¥>E¬Yc;½DCß×_dÏ‹³?Vžzºßç“ ¬î§—ØŽGc½ñMáxK ñht@Áò‘퀶ãQM4p}Çãñ“Ú–fDÄøÀãñøzÕ¥yFzÝe—Ë,zïìÌ›šiïýö~òIüÔœw~ø3kïÑãûÍËšé £ãÅ—”Ú[ç+¯È|µR¢¡ï›oÖfâïõ×]/[¤--byh/ߨ£!â X([>tÀ ãQ:u‚ë;OoXyº ‹/Çãñ 𪉆\#½`ábÿȈÌÇ•N²ñ~ —lÿò ßÀ@þìì„'"½ß²ƒ‘ £ò¤S”Ú[Í…?ÛnÆ,{ñh$ M³ ¶ûo÷»ï †×õïÛŽÇ™=¤Ú›ó‰†ñxd; Rù8֣ģ1£ë;O)Ñ`í5ðx<Þ=^:Ñ`O÷ÛoË|xö9ï·öÒËâéÀÝûM4Äô~뮺ZlÚÈ´éJí­âèc¥Ê* éc-DCÙ÷ ÛKøž`xƒåå¶ãQH4(ŽoŽ$2Ýí—N´“{4p}Çãñ“ËO2¯=£!×H¯þѹ2wá==yÓgX}¿ÝÿùÀ"ó3V˜>¿f¢ÁBýJmD×óþûzíMp[þüÙÙöâO4t¾úªFÿíyÿ}©ý>_lŸ]3”g4¨oʉ†ŒDwÀxËGºÚ‰ÇÁD×w<?ɼÃ/gX|1<O¤×L4|÷êùΑڇ¬òÔÓ-½ß‚y â_¸1ÚÓ³îŒÀ å 6ë·ãùDbhýÃÃzí­h“Í•¿P8ÙDƒohȳlkþ[yÊi‚q®Û\Ðr<ÊK'„Ç7…DC¬ñèt@áò)Úd3éh9ÑD×w<ŸT~ýŒ†œ°ˉüOx<ïZ¯‘h§ãå—evJ{éeKï·æü „–l˜?¿ÆŒõÛûñÇ"1Ô^r©^{óR¢!öxd k÷íÓè¿ùΑÚ\pll¬ü¨cìÅ£”hPß”f4ÄlT*¥h)Ù \ßñx|2yÃ⼈ <w¹w`éD®‘^yò©2ß!÷õE؇Ìüýv½ùfü/Zqü‰‘ž_m鄵ú-Út ϲ­£>¶‰ú¿ß=ÊV¾½UžzºÜ眹öâ‘M4T­8S¯ÿöüïbqžv†½xœÙ Rª½‰&¬ÅÖ·±×#o²(P>š0ÖxÔ–Np}Çãñ“Þ9fyˆœ—5QÇãñn󲉆HñäefvvÊ|j:ó¬ßoþ¬Ù¾ÁÁ8_ndÍšµÇjš¾\“\¢¡>x†äkoõ7Þ$ø…ª½x ¾ÁÁüY³õÊS°¸jλÀ^<‚‰ڛ쌆äÿ: Õx \ßñx|’y#Êä‡(™ <w­WžÑ°>ž5O>%³ý^ÐÑÞoÕ™gÅÿrk"JyŠÏhHÖö–—™5Ÿ¯¼GÃÄñ&ºÞzKµ<Ë;B*Ôº+®´þŒÉö¦±t"iú£R´O‘ðŒ®ïx<>y|È ÑW_ä„þÇã]çuf4˜Ä#õB¾ÁÁü çÄò~;^Ø¢üÐã”g“Ö ÉÖÞZÿøˆàš…ñ™ÛVãL4Ô]~…jym¾T¬iÝt³½xÄ ªíM0Ñ|ã¿lÌ Ý£!Öx”–Np}ÇãñIà ÓùQŸÇã]íË„g4DŽ'cÚpS“È UÿèÜ ßo^f–¯·7ÎnhÈIŸ¥ay6 /p]ûÉŸ¿°d¯}ªN_QÃmü©ëí·<_ÿXBògϵ÷~¥>9·<øåßöÈŸÄ×XŠGpFƒíYv3H—ŒÏní€ÙöÞo‘ÖŒ®ïx<~Òû ã-s¢/ x<ïB/¾GÄñ ˆ¼\í%—š¿ß´Œø·(*Š¥<›uŽ·LT{(X¸¤â¸šî¸³ó7òóG{zÆ\ùvº^¬ïWê“sÓw9Ð[î»_zwCkñhìѠמõŽ·t¬?,\¼¶vMªûû•žÑÀõÇ'7r¢.ºÈ úŒÈ9 <w‹WÚ£!J< ·¬y¹žÿýÏôùK¿÷ýøŸ¼ñ¶Ûc)OÙÍ oyY3K<¨þºë;^|Ijû ‡gn[z¿RŸœnºÙþÛtDzŸœ­Æ£·GƒF{n”žÑà@œ¼ÐÞû?u‚ë;Ooä˜o™‘3Á&x<ïR/=£aâx¤î5ý>ßÚ#Cž¿åÁ‡ÖMl»<–òT8uB½=dÏ«>ïü¶Gë_½Ú?226 6½·V>RŸœë®¼ÊþÛ¤s^cìñÎhp`|“Ý£A¯~ó³çÕLò˜Ð-•gÙ6J{4p}Çãñ“Ý9¡ó2Ìr&ù <w§×›Ñ%žÞÏ>“þ¼·þù‡ª«ã|Úþo¿±<Å zí!73«ê´3:_Ý7446ÉòggÛ+©O·žèõ_ó-Å#:£A}|k”ߣA²~“¬Ú+å=¸¾ãñøIì³%![;îñ€Çãñ.÷z›AF‰§îª«E^±÷ãCž¿dϽ&ÆßpcŒå)¾¤F{(ÚliÛcíêK–Ÿñ%âVËGì“ó+è¿Ò›XŽG|ÕñM!/#S¿E›m‘|Ð^ùˆ.àúŽÇã“ʦË-r‚SÑiàñx¼«|¹èŒ†ã)\²±tT`õ„ß_´Éf²›&øýþÂͶˆ±<›Ž·¬ß¼™6Ýy—o``,¹~Æ—ˆ[-ÕMÄûo£ôZ«ñÈž:¡=¾5êoOý&q´W>Ñ \ßñx|2y#ä—M7Ì Ë^àñx¼k½Æ©±ÄÓýÞ{2~v]àóx½ñÎ’øä“ØË³Y:Ñ V¿i5\8ÜØ8–Œ?ù³çÚ+ñDƒjÿÕüäS<²Å¥=¾‰îÑw<)Ðm”O‘ôf\ßñx|ÒxÃ4ý¸¾"Ê’ <w¡/“ŸÑS<5\(ò¢}_|1þüÅ;ìÿÖ]qeìåÙ¤°GCüõ›—9£óµ×Æ’÷'/hFƒ…òßÝPµÿêíÑc<²Å¥=¾5*Wìñäff¥B´Q>J{4p}ÇãñIà³_OT„œcÇãñ®õeÒ3bŒ'?{žopPäu‹–.ûî“Æ/owÝÄèhá¢%±—§ôfõ[0w~ïÇ»í“Iï§ŸVœp’ìÒ å#hÐí¿ Ç(X‹Gvé„öø¦±GƒxòÝÚ+å:àø VËG:ÑÀõÇ'7rÂ~!'83‘!ŸÇãñîôâ{4ÄÔ—~õ7Þôݰ99ñæJÞ{ÏRyÊÎhˆ¿~ 7Ûb ¨ÈUŸpËË«N_‘c¤çÏ_(8sÛ^ùˆE¯ÚÅ¿¢·Æ zã[ÓÝ÷HåelÇS”p|J‘ÕòQÚ£ë;Oo„-«ˆ¸ÓCø ™x<ïB/}¼¥…x*ÏX!³zâÛo¥Nh¯¹ð"Kå)ºGÃqÖoÁ¢%Ãuunølãíû⋦{î-?ìˆÜ©™kã”ýœc¯ý˞רÝ•–NÄì©Úã[Ëïÿ 8ÄF<….ë€Í÷Ü[vعS3¿›D&™é˶W_K'¸¾ãñøäðFÈÎ 9¡™‰ ӌǻÖkÌhˆ1žÜ¬™£=="/íÙf»úŸßç“ø††òæÌµTžâ3â©ß®ý+QlF{zú¾þºýÙçy[Åñ'ž 1¤ìç{í_gÓ­þ+º¤x”f4(om?!>£ÁR<îé€Á›˜dhdúìÕW‘òŒ®ïx<~òzÃt D Šô7x<ïN_.=£ÁR<íû»Ìt€[ÑûÙgq>IçoX¿Ya3H{õ[{ÑÅ}Y:<<àõv¾ùfË﬽äÒ²C+ÜxÓXÚ[ÎŒKõ¥±¤^ÿÜ£Á^óé,°Ò \ßñx|øã-3"í0™c~|Ç»ÎËoi#ž¶?ýÙ ‰†ö^´QžMZÇ[Z¨_ïÞûj¤꯻>/k–`{ÿBÕF Ô4½([>zÇ[ÆGxF×w<Ÿ<Þˆ"r'z:<w¡w`† âI˪­Mðº‰ŽŽ¼iÓm”§ÆÒ kõ›1u¸¹Y*ÿÈHù‘G+µ·‚6üœc/¥zýWi†Øãéû摚î¼K{|+Úd3±ÉMa[ZD‹'cêˆ|Tÿe; ½xtf4p}ÇãñÉà S2ù!ú: <w•/“>uÂF<Í÷ÝŸØDÚ'Ÿ²WžÍò3¬ÕoÅÑÇ –CÍO/ÑkoE[o«ð…ªµx6ƒTì¿Ç[ZЧçÃexêiíñ­ì°#ÄFƒ§Ÿ‰=žrÑXûÓKõÆÁ˜ÖcŒÇ³lñD×w<ŸÞȉ!-aiÖÇ'Ö«.ˆ1ïn{$6ÑPvÄQöÊSsFCLñ´?ûœTÍ÷ݯÚÞ¼{ì%:£ÁN<š3äûo£Î ±ÇÓõï‹ÐûÉ'Úã[ÝW &bDZ{“í€öâ)Ò9u‚ë;OoLøËáÙ <w³×K4XŠg ¸8QY†áææœô)öÊSi3ÈØëw¤­Mæ£àÇç¦MQmoÇŸ¨ºGC,ñ(m©Ôe7ƒ´OÇK/‹0ÒÒ¢=¾µ>ò'ñ¥±Ä#Ø–ÐÿÅ; x \ßñx|’y#òSXK]àñx¼K¼B¢ÁN<·Ýž¨DCë±]žz3b‰'wÚt©W¯>ï|íöV{É¥:‰ ñèÍhÐè¿NÎh0gÍ_ŸT¨2•ñm°¬LuFƒi<:PküWë€âqlF×w<?é¼a–œÈˆqâǻЋ&VَdzíòD%J¿÷}Ûå©”hˆ1žÂÍ—Š¼´o` oÃ9Úí­ùÞßÈ-Ÿk/ñ=Tû¯^¢!ÆxZþð°X/ûþôÆ7ïλIîØb²¥…y<ÒPwüW耖ãQJ4p}ÇãñIà ’.x<>ɼÎÒ ;ñô}ýµóY†¡êêœ ì—§#3"ÆS²ïþ"/ÝŸ—ç@{ëùàµ/TcÇ‘ bý7A3ÖÇ#ؼ›î¹Wo|“Cqe(w@•ñ_³ÆO"f4p?€Çã'‡7bû… ‹/€Çãñ óÊ›AZˆ§þºëO44ßÿ@<å)h°V¿'"òÒÝ«V©··)Ó|ýýúŸs&ˆG:Ñ Û ÖâiXù ©*ëÏÉÑßúsrt Ä£ÐÕÆ•h9éD×w<Ÿ<Þˆù3,¦4ðx<>1^ÿÔ‰Xã)Üts¿ßïp¢Á»Ç^ñ”§ÚŒ†˜â©½ô2…¯pUÚ›Ôw¿ë>ç̵ÚŒ•þ«3£ÁB<Õç/Xkm¢1¾•t°ì˜`6£Á<¨2þKwÀl{ñ(ÌhàúŽÇã“ÄkÿgõD¿¶:øŸðx<Þµ¾T8ÑW<‚“{cùðzã,OÑDÃVëWヨR{k{ô1Ï9ÖâM4¨÷ß„×oÉ~ÖZãm·Ëoi}ß|£“h˜8ý)'býQ¡Ú‰§P:ÑÀõÇ'7"ýòj‹9 <w‰ŸÑO<5ÿÔÉDCã¯ïˆ³©¼1á\ˆÕæY <w©W›Ñ`3ž®ýË™,Cnnüå©h°Oå+D^Ú?2’¿`‘R{+Ür«ÑÎNÙº3›ÑS< ‰Åþ+›h°OÏG Vœ¯¯¯x¯}Dʧ`ÉÆ^¯ÆÈ<$Z<²Piü/Ré€síÅS´l©¸¾ãñø$ó†Ùïd˜ÎXñx<ï"/šhXɼi‰EÈŒÕfi <w¡/ÕY:gü¥‡¦w—\sñ%Rå)¾¤Õxr3³F{zTæ}øý=|PsÁ…Þ½÷-Ø|infVx<¹Y3=»ìVµâ¬Ö??:TSãØGÁªs~d¯¾Ä7ƒTí¿Ò{4ØgJæHGGJ%b/ŸåX}Á…Þ½÷[×CãÉÍšY¼ËnU+ÎlKL´ÜþE—Np}ÇãñIå´Údv„é>x<ïR¯°GƒDüéS”–dû‡‡óçΗ*O…ã--ÇÓñÒËÎ|ºíìðzû¾ø¢?7w°¼|¸¹Ùï÷'ä£`íåWØ«/…ã-û¯øf¶ãiÿÛßSmFCìåãpìuG´×þe—Np}ÇãñÉä ³2"O–ÈÀãñx—{ÑDÃ*Áø[|Hã¹ë­·ËScé„Õx*ÏX1–b? +a¯¾Ä÷hPí¿â3lÇSzÐ&EÃ,-*. å“ÂÐrû=Þ’ë;O*o„œH±:ø)B6–\v‚Ç»ÍË.Œß»÷¾z“~¥ÊSãÔ Ëñ¤e8p柫~š~{Ÿ½úÒ8uB¯ÿÊ&âŒÇ±ïímÿ´¿ðbÅɧJ-°P>©Úm´ÿ"=¸¾ãñø$ðÆø<‡Õæë.B6“LÇãñx—{ñS'ã,+“½?öõ÷çÍš-Xžâ{4؋ǻ÷¾‰šDŸ¶G³W_Ò‰Ýþ«h°OÁf[øúû]Û$†ëëó³çI%¬–O v@{í_z3H®ïx<>y¼ò !I‹Õf¿ŒÇãñnöeÒ3ão¼ãNÙû㎗_–-O…=lÆÓúèc©ó9§ý…íÕ—Â ŠýWöÔ‰øãiøåm®meGµÚHœÑ`µ|ÚR¬Úkÿ¢›Ar}ÇãñIåðùá‡X/ºÀãñxW{éS'$ã/ÞqgÙûãÊSO—-OÑDÃñÄ“?wþHk«Ë?Ÿ ˵4;õ%šhPï¿â‰†8ãÉÍ̬¬tãLþ»ïY­ÜŒËå“?wA*uÀUöÚ¿è \ßñx|Ry#`eEFHZ"nî€9Y3sŒ ©˜—=ÏFù(œ:ÁõÇ'‰7ÂϨ0ÝF2ìðL<w©/U˜Ñ ÑÒ­¤vY+;úXñòT8u"Þú­8å4ÿȈ{>áøýþæûX1umxíÏ=/ò´¥‡n£|NP쿲K'Ç“ò£õ $>ËðâK¹S§,¸tÂvù¤N´3ž/ÛFpF×w<ŸLÞXm6çÁôÌÕaç[àñx¼ ½h¢a•Fü½l#­­«3¦Š—§ÎÒ‰xë·òÔÓ]òµêPmmé!‡Æ/õá9쎘ÊG6Ñ ÝÅ—N¶ÿÒÃLà!þÑQÓþ";£ÁvùT¸©–rX`ü‚ÐFù*oÉõÇ'‡9Þ2ÃtÇȰùx<ï^_*}ê„xüµ—_l­~T£<ÕŽ·Œ·~=»ìÖ÷å—‰üÕç[óÔÓyÙóBâ/;úX©9ó6Êçÿ·w?1z”uÀØ1Eb( !h°ˆ!õB4QÄ?gã=iГ(¨7=)œñ¨‰ NœÛëû¾ÝÒmAЦÑÒBKÚšF,-%vywæy~Ïìnv¦ÔÝÏ…¼3ó™y'Ónúå÷û=£-o9Êû;ZEÃ0?ÿ‡ï½ïí£G/ýÖ…'^ýú7ÃûmyË ?ŸËçÌîÿïC¾€~>c ~¿ó<¿5|êY¢ÿ¢<Ïó—§?<Ö0ÈÁîÿÀΛÞ}çÍúÞ{ßÏs„å-‡ûó½²9úðß9{öÒÿ#çÌîÝ/ßyWxÿû¯¹vÿÙ{ñܹ7ܸÑç3Âò–#¾¿ÃÎhãçÿU×{ì§—ìgìâÛo¿ñ«_¿xÝõµûayËM<Ÿ+›£ÿàý~óûúÜØóºuÂïwžç·ŽOEÁC~.7yžç/O?xEÃ÷ÿï^ØÌ?ztß•ÍÏsŒÖ‰aÿ|—n¹õôŸÿòîÅ‹—âßo½uêüÛ=_ì¿ÿ³{ö òuÇ}l£ÏgŒÖ‰ñÞßÁ+FúûdiçÍ'ŸúíæÓÀþA§Ÿ}öàm»úïgŒÖ‰M>ŸKÿ¾rÏ—úïðpýÏgðU'ü~çy~Ëø´¯[ö°/*~ˆ‚ žçùËÔ¾êÄ÷äÁ‡6sco<þÄHÏsŒŠ†1~–>~Ëk?yôÜáãü#ðÂ…³{÷þó;ßÝÿ‘®ç~ŽýìçCõŸ/6;6ô|F}Ç[ÞrŒ¿O}öÎÓÏ<3ø‚ç_ýõ_üòÐ'o[Ïý ; rÀçs _ÀµïgØpCÏgØŠ¿ßyžßJ>eó*±D0ìçyžçßgÅÂ+_ùê›OÿþÜáÛ\ËãÂÉ“gžþØ#?~åË÷.^ý!ÏŸ_©ÌÿðuGîàÌsÏ]8uj“UHoþîé|ëÛû>°cë<Ÿ¡_À׺/ ŸOžçùÿ_ŸÖ,ˆÒ žçyž¿¼ü‹×]ÿê×¾ñÚ9ý§gþ{ðàùãÇà ß=þüñão--ݳçÌ_wŸüÍ“G|èЮÏxžüþŠ…—vÝqäþÞxü‰3»wÿg:½pâDß¿œO:»wïÉ'Ÿú×÷¾ÿÒ]woùç3à èççy~ ø´X鯣‹püÏó<Ï_ž~qÇUvÞtèö;^¾ûóoýÔþk?âùðúÅWøØÎ¥OÜrðÓ·¿t×Ý/î oÛuà†?xµç³ü|–vÞÜ~ýüð<ÏoŸÊ“{ŒðÏó<Ïó<Ïó<ÏóüJECëÀš¡Eÿ&Ïó<Ïó<Ïó<ÏóÛݧJĺº2xžçyžçyžçyžçÛ>­;¢XcQMžçyžçyžçyžçù´¸®+®^Žçyžçyžçyžçy¾æS÷ä5j$Š/ãyžçyžçyžçyžoU4Tt•£&yžçyžçyžçyžçûf4T“‰J€Áó<Ïó<Ïó<Ïó<Ÿûԫ矛õ]çyžçyžçyžçùmíS”C4³j½ÄÏó<Ïó<Ïó<Ïó|ͯ³ubC xžçyžçyžçyžß¶>ÍÞû4«ÖEtñ<Ïó<Ïó<Ïó<Ï×|ª3‹“‰†çyžçyžçyžçy¾æ³Š†¦+û‹ ‚çyžçyžçyžçy>÷©7–ÈSеb žçyžçyžçyžç·µOó’³n ¦­ý<Ïó<Ïó<Ïó<Ïó¹OQ8±2Ô!*–hxžçyžçyžçyžçk>eE7‡X#9ënò<Ïó<Ïó<Ïó<Ï—>e³ÖjÃXàyžçyžçyžçyž¯ùŠY±ÙÎ'xžçyžçyžçyžçCŸÊ‚‡vD-›Éó<Ïó<Ïó<Ïó<ûÔí¸è´U”}E‡Ïó<Ïó<Ïó<ÏóüªOí²‡nÑtãŠ&+™àyžçyžçyžçyžÏ|ÊÆ9dƒ%Ã9“<Ïó<Ïó<Ïó<Ïó¡Oåh‡n9D³¯ˆ(xžçyžçyžçyžçCŸ-oÙ̺ÿÅëdò<Ïó<Ïó<Ïó<Ï>e™D9Ñ¡\Ç‚çyžçyžçyžçy>ôiKDƒ‚e3yžçyžçyžçyžçk>e}í b$ Ïó<Ïó<Ïó<Ïó|ͧ,~è™ëÐÞÃó<Ïó<Ïó<Ïó<_úTÖ[’çyžçyžçyžçy¾ô©HtÏ/G;4Y€Áó<Ïó<Ïó<Ïó<ßö©7™¨<Ïó<Ïó<Ïó<Ïó¥Oa£Eqfß×ð<Ïó<Ïó<Ïó<Ï/›åµ“›JnÁó<Ïó<Ïó<Ïó<¿4ôdáEyžçyžçyžçyžçcŸzû.šþ– žçyžçyžçyžçùöÎÔÚ/ÑT‚ žçyžçyžçyžçùܧ"~X×xIžçyžçyžçyžçùÒ§z DZLûJ&xžçyžçyžçyžßî~uä2š¶Ï?O£¯áyžçyžçyžçyžÏ|êÍ*ÚÅÍ:² žçyžçyžçyžç·µOÓîv7‡Èö4í<Ïó<Ïó<Ïó<ÏóÙÑ”UA#â ‚çyžçyžçyžçy¾ô«­Ó ³¢‰â žçyžçyžçyžçùØ/ƒl'ˆbšG Ïó<Ïó<Ïó<Ïó|ͧnÇE_Æ,2Éó<Ïó<Ïó<Ïó<ßñ©]öÐä­Š¹²‡çyžçyžçyžçy¾æS·Âa~xµÅ¢ 0xžçyžçyžçyžçCŸ* E\±P^”çyžçyžçyžçy¾mÒ´»«µYžÜtÏó<Ïó<Ïó<Ïó|ǧy&1í u/ÝiºàyžçyžçyžçyžÏ|ª÷iÖqåÂMmM žçyžçyžçyžçùlg ㇢õ",àyžçyžçyžçyžïøžõ]„M<Ïó<Ïó<Ïó<Ïó™O=!DÙ’1­ „àyžçyžçyžçyž_žÑÐD3šieù žçyžçyžçyžçùšOÓb®C%´ñ<Ïó<Ïó<Ïó<Ïw*в‡&C³Êžçyžçyžçyžçù̧°Å¢'¥àyžçyžçyžçyž¯ùTžVkɨ} Ïó<Ïó<Ïó<ÏóüòÑåM­þaàyžçyžçyžçyž_ šnD°Y^”çyžçyžçyžçy¾ô©·ï¢ºl&Ïó<Ïó<Ïó<Ïó|i–ƒ†f^öPœ&<Ïó<Ïó<Ïó<ÏóÏ*šYœXÔVËäyžçyžçyžçyž_õ)<<‡LV/Çó<Ïó<Ïó<Ïó§µk!²1’á×ð<Ïó<Ïó<Ïó<Ï/¬ “ Ñ"hɘ÷]ð<Ïó<Ïó<Ïó<χ>e»&E\ÑÝÓð<Ïó<Ïó<Ïó<Ï×|*…›eÓÏó<Ïó<Ïó<Ïó|Ò¤#ÙÚlY†Áó<Ïó<Ïó<Ïó<Ÿûö0Èöh‡²£)fNò<Ïó<Ïó<Ïó<Ïw|šÇÙ%æYÅ$hºàyžçyžçyžçyž|*Ö½\ˆÖ®h²ëò<Ïó<Ïó<Ïó<Ï—>e“$'Q3Ædu5‹žçyžçyžçyžçùšOÙÉÓVDQÆÝC<Ïó<Ïó<Ïó<ÏóŸ²)&ˆb^±•Fð<Ïó<Ïó<Ïó<Ïw|І:4eP‘ueð<Ïó<Ïó<Ïó<Ï—>MŠ%1[¡E~æyžçyžçyžçyž}*—¬(&:dE<Ïó<Ïó<Ïó<Ïó±O増ahÑžñÀó<Ïó<Ïó<Ïó<ú–@dƒ%Ã=<Ïó<Ïó<Ïó<ÏóÙÑ4)Ö¨˜Ë`ÆåyžçyžçyžçyžoïO=U“â„þª žçyžçyžçyžç·¹Oµ ¢§^‚çyžçyžçyžçy>ôiššIglC_Ä{ŸyžçyžçyžçyžçŸj­ÏÁŒžçyžçyžçyžçùÒ§V¯EÞz‘õc´/Íó<Ïó<Ïó<Ïó<_ú¬¢![*3¾Ïó<Ïó<Ïó<Ïó|èS½¢½®fÁó<Ïó<Ïó<Ïó<Ÿ¯:Ñ”ÇÂ=aÏó<Ïó<Ïó<Ïóü|šDËTL:µM÷|žçyžçyžçyžçùاVð‡EëEm“çyžçyžçyžçy¾µêD!Ê ¢d<Ïó<Ïó<Ïó<ÏóŸzC‹¦ò™çyžçyžçyžçy>ðiÒm«(ãŠIÐ’Áó<Ïó<Ïó<Ïó<øÿÃõú÷è(¶IEND®B`‚cups-2.2.7/cups/debug-private.h000664 000765 000024 00000006106 13255074424 017037 0ustar00msweetstaff000000 000000 /* * Private debugging macros for CUPS. * * Copyright 2007-2012 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_DEBUG_PRIVATE_H_ # define _CUPS_DEBUG_PRIVATE_H_ /* * Include necessary headers... */ # include /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * The debug macros are used if you compile with DEBUG defined. * * Usage: * * DEBUG_puts("string") * DEBUG_printf(("format string", arg, arg, ...)); * * Note the extra parenthesis around the DEBUG_printf macro... * * Newlines are not required on the end of messages, as both add one when * writing the output. * * If the first character is a digit, then it represents the "log level" of the * message from 0 to 9. The default level is 1. The following defines the * current levels we use: * * 0 = public APIs, other than value accessor functions * 1 = return values for public APIs * 2 = public value accessor APIs, progress for public APIs * 3 = return values for value accessor APIs * 4 = private APIs, progress for value accessor APIs * 5 = return values for private APIs * 6 = progress for private APIs * 7 = static functions * 8 = return values for static functions * 9 = progress for static functions * * The DEBUG_set macro allows an application to programmatically enable (or * disable) debug logging. The arguments correspond to the CUPS_DEBUG_LOG, * CUPS_DEBUG_LEVEL, and CUPS_DEBUG_FILTER environment variables. */ # ifdef DEBUG # ifdef WIN32 # ifdef LIBCUPS2_EXPORTS # define DLLExport __declspec(dllexport) # else # define DLLExport # endif /* LIBCUPS2_EXPORTS */ # else # define DLLExport # endif /* WIN32 */ # define DEBUG_puts(x) _cups_debug_puts(x) # define DEBUG_printf(x) _cups_debug_printf x # define DEBUG_set(logfile,level,filter) _cups_debug_set(logfile,level,filter,1) # else # define DLLExport # define DEBUG_puts(x) # define DEBUG_printf(x) # define DEBUG_set(logfile,level,filter) # endif /* DEBUG */ /* * Prototypes... */ extern int _cups_debug_fd; extern int _cups_debug_level; extern void DLLExport _cups_debug_printf(const char *format, ...) __attribute__ ((__format__ (__printf__, 1, 2))); extern void DLLExport _cups_debug_puts(const char *s); extern void DLLExport _cups_debug_set(const char *logfile, const char *level, const char *filter, int force); # ifdef WIN32 extern int _cups_gettimeofday(struct timeval *tv, void *tz); # define gettimeofday(a,b) _cups_gettimeofday(a, b) # endif /* WIN32 */ # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_DEBUG_PRIVATE_H_ */ cups-2.2.7/cups/debug.c000664 000765 000024 00000032450 13255074424 015363 0ustar00msweetstaff000000 000000 /* * Debugging functions for CUPS. * * Copyright 2008-2015 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include "thread-private.h" #ifdef WIN32 # include # include # include # define getpid (int)GetCurrentProcessId int /* O - 0 on success, -1 on failure */ _cups_gettimeofday(struct timeval *tv, /* I - Timeval struct */ void *tz) /* I - Timezone */ { struct _timeb timebuffer; /* Time buffer struct */ _ftime(&timebuffer); tv->tv_sec = (long)timebuffer.time; tv->tv_usec = timebuffer.millitm * 1000; return 0; } #else # include # include #endif /* WIN32 */ #include #include /* * Globals... */ int _cups_debug_fd = -1; /* Debug log file descriptor */ int _cups_debug_level = 1; /* Log level (0 to 9) */ #ifdef DEBUG /* * Local globals... */ static regex_t *debug_filter = NULL; /* Filter expression for messages */ static int debug_init = 0; /* Did we initialize debugging? */ static _cups_mutex_t debug_init_mutex = _CUPS_MUTEX_INITIALIZER, /* Mutex to control initialization */ debug_log_mutex = _CUPS_MUTEX_INITIALIZER; /* Mutex to serialize log entries */ /* * 'debug_thread_id()' - Return an integer representing the current thread. */ static int /* O - Local thread ID */ debug_thread_id(void) { _cups_globals_t *cg = _cupsGlobals(); /* Global data */ return (cg->thread_id); } /* * '_cups_debug_printf()' - Write a formatted line to the log. */ void DLLExport _cups_debug_printf(const char *format, /* I - Printf-style format string */ ...) /* I - Additional arguments as needed */ { va_list ap; /* Pointer to arguments */ struct timeval curtime; /* Current time */ char buffer[2048]; /* Output buffer */ ssize_t bytes; /* Number of bytes in buffer */ int level; /* Log level in message */ /* * See if we need to do any logging... */ if (!debug_init) _cups_debug_set(getenv("CUPS_DEBUG_LOG"), getenv("CUPS_DEBUG_LEVEL"), getenv("CUPS_DEBUG_FILTER"), 0); if (_cups_debug_fd < 0) return; /* * Filter as needed... */ if (isdigit(format[0])) level = *format++ - '0'; else level = 0; if (level > _cups_debug_level) return; if (debug_filter) { int result; /* Filter result */ _cupsMutexLock(&debug_init_mutex); result = regexec(debug_filter, format, 0, NULL, 0); _cupsMutexUnlock(&debug_init_mutex); if (result) return; } /* * Format the message... */ gettimeofday(&curtime, NULL); snprintf(buffer, sizeof(buffer), "T%03d %02d:%02d:%02d.%03d ", debug_thread_id(), (int)((curtime.tv_sec / 3600) % 24), (int)((curtime.tv_sec / 60) % 60), (int)(curtime.tv_sec % 60), (int)(curtime.tv_usec / 1000)); va_start(ap, format); bytes = _cups_safe_vsnprintf(buffer + 19, sizeof(buffer) - 20, format, ap) + 19; va_end(ap); if ((size_t)bytes >= (sizeof(buffer) - 1)) { buffer[sizeof(buffer) - 2] = '\n'; bytes = sizeof(buffer) - 1; } else if (buffer[bytes - 1] != '\n') { buffer[bytes++] = '\n'; buffer[bytes] = '\0'; } /* * Write it out... */ _cupsMutexLock(&debug_log_mutex); write(_cups_debug_fd, buffer, (size_t)bytes); _cupsMutexUnlock(&debug_log_mutex); } /* * '_cups_debug_puts()' - Write a single line to the log. */ void DLLExport _cups_debug_puts(const char *s) /* I - String to output */ { struct timeval curtime; /* Current time */ char buffer[2048]; /* Output buffer */ ssize_t bytes; /* Number of bytes in buffer */ int level; /* Log level in message */ /* * See if we need to do any logging... */ if (!debug_init) _cups_debug_set(getenv("CUPS_DEBUG_LOG"), getenv("CUPS_DEBUG_LEVEL"), getenv("CUPS_DEBUG_FILTER"), 0); if (_cups_debug_fd < 0) return; /* * Filter as needed... */ if (isdigit(s[0])) level = *s++ - '0'; else level = 0; if (level > _cups_debug_level) return; if (debug_filter) { int result; /* Filter result */ _cupsMutexLock(&debug_init_mutex); result = regexec(debug_filter, s, 0, NULL, 0); _cupsMutexUnlock(&debug_init_mutex); if (result) return; } /* * Format the message... */ gettimeofday(&curtime, NULL); bytes = snprintf(buffer, sizeof(buffer), "T%03d %02d:%02d:%02d.%03d %s", debug_thread_id(), (int)((curtime.tv_sec / 3600) % 24), (int)((curtime.tv_sec / 60) % 60), (int)(curtime.tv_sec % 60), (int)(curtime.tv_usec / 1000), s); if ((size_t)bytes >= (sizeof(buffer) - 1)) { buffer[sizeof(buffer) - 2] = '\n'; bytes = sizeof(buffer) - 1; } else if (buffer[bytes - 1] != '\n') { buffer[bytes++] = '\n'; buffer[bytes] = '\0'; } /* * Write it out... */ _cupsMutexLock(&debug_log_mutex); write(_cups_debug_fd, buffer, (size_t)bytes); _cupsMutexUnlock(&debug_log_mutex); } /* * '_cups_debug_set()' - Enable or disable debug logging. */ void DLLExport _cups_debug_set(const char *logfile, /* I - Log file or NULL */ const char *level, /* I - Log level or NULL */ const char *filter, /* I - Filter string or NULL */ int force) /* I - Force initialization */ { _cupsMutexLock(&debug_init_mutex); if (!debug_init || force) { /* * Restore debug settings to defaults... */ if (_cups_debug_fd != -1) { close(_cups_debug_fd); _cups_debug_fd = -1; } if (debug_filter) { regfree((regex_t *)debug_filter); debug_filter = NULL; } _cups_debug_level = 1; /* * Open logs, set log levels, etc. */ if (!logfile) _cups_debug_fd = -1; else if (!strcmp(logfile, "-")) _cups_debug_fd = 2; else { char buffer[1024]; /* Filename buffer */ snprintf(buffer, sizeof(buffer), logfile, getpid()); if (buffer[0] == '+') _cups_debug_fd = open(buffer + 1, O_WRONLY | O_APPEND | O_CREAT, 0644); else _cups_debug_fd = open(buffer, O_WRONLY | O_TRUNC | O_CREAT, 0644); } if (level) _cups_debug_level = atoi(level); if (filter) { if ((debug_filter = (regex_t *)calloc(1, sizeof(regex_t))) == NULL) fputs("Unable to allocate memory for CUPS_DEBUG_FILTER - results not " "filtered!\n", stderr); else if (regcomp(debug_filter, filter, REG_EXTENDED)) { fputs("Bad regular expression in CUPS_DEBUG_FILTER - results not " "filtered!\n", stderr); free(debug_filter); debug_filter = NULL; } } debug_init = 1; } _cupsMutexUnlock(&debug_init_mutex); } #endif /* DEBUG */ /* * '_cups_safe_vsnprintf()' - Format a string into a fixed size buffer, * quoting special characters. */ ssize_t /* O - Number of bytes formatted */ _cups_safe_vsnprintf( char *buffer, /* O - Output buffer */ size_t bufsize, /* O - Size of output buffer */ const char *format, /* I - printf-style format string */ va_list ap) /* I - Pointer to additional arguments */ { char *bufptr, /* Pointer to position in buffer */ *bufend, /* Pointer to end of buffer */ size, /* Size character (h, l, L) */ type; /* Format type character */ int width, /* Width of field */ prec; /* Number of characters of precision */ char tformat[100], /* Temporary format string for snprintf() */ *tptr, /* Pointer into temporary format */ temp[1024]; /* Buffer for formatted numbers */ char *s; /* Pointer to string */ ssize_t bytes; /* Total number of bytes needed */ if (!buffer || bufsize < 2 || !format) return (-1); /* * Loop through the format string, formatting as needed... */ bufptr = buffer; bufend = buffer + bufsize - 1; bytes = 0; while (*format) { if (*format == '%') { tptr = tformat; *tptr++ = *format++; if (*format == '%') { if (bufptr < bufend) *bufptr++ = *format; bytes ++; format ++; continue; } else if (strchr(" -+#\'", *format)) *tptr++ = *format++; if (*format == '*') { /* * Get width from argument... */ format ++; width = va_arg(ap, int); snprintf(tptr, sizeof(tformat) - (size_t)(tptr - tformat), "%d", width); tptr += strlen(tptr); } else { width = 0; while (isdigit(*format & 255)) { if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; width = width * 10 + *format++ - '0'; } } if (*format == '.') { if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; format ++; if (*format == '*') { /* * Get precision from argument... */ format ++; prec = va_arg(ap, int); snprintf(tptr, sizeof(tformat) - (size_t)(tptr - tformat), "%d", prec); tptr += strlen(tptr); } else { prec = 0; while (isdigit(*format & 255)) { if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; prec = prec * 10 + *format++ - '0'; } } } if (*format == 'l' && format[1] == 'l') { size = 'L'; if (tptr < (tformat + sizeof(tformat) - 2)) { *tptr++ = 'l'; *tptr++ = 'l'; } format += 2; } else if (*format == 'h' || *format == 'l' || *format == 'L') { if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; size = *format++; } else size = 0; if (!*format) break; if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; type = *format++; *tptr = '\0'; switch (type) { case 'E' : /* Floating point formats */ case 'G' : case 'e' : case 'f' : case 'g' : if ((size_t)(width + 2) > sizeof(temp)) break; snprintf(temp, sizeof(temp), tformat, va_arg(ap, double)); bytes += (int)strlen(temp); if (bufptr) { strlcpy(bufptr, temp, (size_t)(bufend - bufptr)); bufptr += strlen(bufptr); } break; case 'B' : /* Integer formats */ case 'X' : case 'b' : case 'd' : case 'i' : case 'o' : case 'u' : case 'x' : if ((size_t)(width + 2) > sizeof(temp)) break; # ifdef HAVE_LONG_LONG if (size == 'L') snprintf(temp, sizeof(temp), tformat, va_arg(ap, long long)); else # endif /* HAVE_LONG_LONG */ if (size == 'l') snprintf(temp, sizeof(temp), tformat, va_arg(ap, long)); else snprintf(temp, sizeof(temp), tformat, va_arg(ap, int)); bytes += (int)strlen(temp); if (bufptr) { strlcpy(bufptr, temp, (size_t)(bufend - bufptr)); bufptr += strlen(bufptr); } break; case 'p' : /* Pointer value */ if ((size_t)(width + 2) > sizeof(temp)) break; snprintf(temp, sizeof(temp), tformat, va_arg(ap, void *)); bytes += (int)strlen(temp); if (bufptr) { strlcpy(bufptr, temp, (size_t)(bufend - bufptr)); bufptr += strlen(bufptr); } break; case 'c' : /* Character or character array */ bytes += width; if (bufptr) { if (width <= 1) *bufptr++ = (char)va_arg(ap, int); else { if ((bufptr + width) > bufend) width = (int)(bufend - bufptr); memcpy(bufptr, va_arg(ap, char *), (size_t)width); bufptr += width; } } break; case 's' : /* String */ if ((s = va_arg(ap, char *)) == NULL) s = "(null)"; /* * Copy the C string, replacing control chars and \ with * C character escapes... */ for (bufend --; *s && bufptr < bufend; s ++) { if (*s == '\n') { *bufptr++ = '\\'; *bufptr++ = 'n'; bytes += 2; } else if (*s == '\r') { *bufptr++ = '\\'; *bufptr++ = 'r'; bytes += 2; } else if (*s == '\t') { *bufptr++ = '\\'; *bufptr++ = 't'; bytes += 2; } else if (*s == '\\') { *bufptr++ = '\\'; *bufptr++ = '\\'; bytes += 2; } else if (*s == '\'') { *bufptr++ = '\\'; *bufptr++ = '\''; bytes += 2; } else if (*s == '\"') { *bufptr++ = '\\'; *bufptr++ = '\"'; bytes += 2; } else if ((*s & 255) < ' ') { if ((bufptr + 2) >= bufend) break; *bufptr++ = '\\'; *bufptr++ = '0'; *bufptr++ = '0' + *s / 8; *bufptr++ = '0' + (*s & 7); bytes += 4; } else { *bufptr++ = *s; bytes ++; } } bufend ++; break; case 'n' : /* Output number of chars so far */ *(va_arg(ap, int *)) = (int)bytes; break; } } else { bytes ++; if (bufptr < bufend) *bufptr++ = *format; format ++; } } /* * Nul-terminate the string and return the number of characters needed. */ *bufptr = '\0'; return (bytes); } cups-2.2.7/cups/Dependencies000664 000765 000024 00000047343 13255074424 016451 0ustar00msweetstaff000000 000000 adminutil.o: adminutil.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h ppd.h raster.h \ adminutil.h array.o: array.c ../cups/cups.h file.h versioning.h ipp.h http.h array.h \ language.h pwg.h string-private.h ../config.h debug-private.h \ array-private.h auth.o: auth.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h backchannel.o: backchannel.c cups.h file.h versioning.h ipp.h http.h \ array.h language.h pwg.h backend.o: backend.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h backend.h ppd.h raster.h debug.o: debug.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h dest.o: dest.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h dest-job.o: dest-job.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h dest-localization.o: dest-localization.c cups-private.h string-private.h \ ../config.h debug-private.h ../cups/versioning.h array-private.h \ ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ ../cups/language.h md5-private.h language-private.h \ ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ thread-private.h dest-options.o: dest-options.c cups-private.h string-private.h \ ../config.h debug-private.h ../cups/versioning.h array-private.h \ ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ ../cups/language.h md5-private.h language-private.h \ ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ thread-private.h dir.o: dir.c string-private.h ../config.h debug-private.h \ ../cups/versioning.h dir.h encode.o: encode.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h file.o: file.c file-private.h cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h getdevices.o: getdevices.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h adminutil.h getifaddrs.o: getifaddrs.c http-private.h ../config.h ../cups/language.h \ array.h versioning.h ../cups/http.h md5-private.h ipp-private.h \ ../cups/ipp.h getputfile.o: getputfile.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h globals.o: globals.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h hash.o: hash.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h http.o: http.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h http-addr.o: http-addr.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h http-addrlist.o: http-addrlist.c cups-private.h string-private.h \ ../config.h debug-private.h ../cups/versioning.h array-private.h \ ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ ../cups/language.h md5-private.h language-private.h \ ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ thread-private.h http-support.o: http-support.c cups-private.h string-private.h \ ../config.h debug-private.h ../cups/versioning.h array-private.h \ ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ ../cups/language.h md5-private.h language-private.h \ ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ thread-private.h ipp.o: ipp.c cups-private.h string-private.h ../config.h debug-private.h \ ../cups/versioning.h array-private.h ../cups/array.h ipp-private.h \ ../cups/ipp.h http.h http-private.h ../cups/language.h md5-private.h \ language-private.h ../cups/transcode.h pwg-private.h ../cups/cups.h \ file.h pwg.h thread-private.h ipp-support.o: ipp-support.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h langprintf.o: langprintf.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h language.o: language.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h md5.o: md5.c md5-private.h string-private.h ../config.h md5passwd.o: md5passwd.c http-private.h ../config.h ../cups/language.h \ array.h versioning.h ../cups/http.h md5-private.h ipp-private.h \ ../cups/ipp.h string-private.h notify.o: notify.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h options.o: options.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h ppd.o: ppd.c cups-private.h string-private.h ../config.h debug-private.h \ ../cups/versioning.h array-private.h ../cups/array.h ipp-private.h \ ../cups/ipp.h http.h http-private.h ../cups/language.h md5-private.h \ language-private.h ../cups/transcode.h pwg-private.h ../cups/cups.h \ file.h pwg.h thread-private.h ppd-private.h ../cups/ppd.h raster.h ppd-attr.o: ppd-attr.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ ../cups/ppd.h raster.h ppd-cache.o: ppd-cache.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ ../cups/ppd.h raster.h ppd-conflicts.o: ppd-conflicts.c cups-private.h string-private.h \ ../config.h debug-private.h ../cups/versioning.h array-private.h \ ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ ../cups/language.h md5-private.h language-private.h \ ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ thread-private.h ppd-private.h ../cups/ppd.h raster.h ppd-custom.o: ppd-custom.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ ../cups/ppd.h raster.h ppd-emit.o: ppd-emit.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h ppd.h raster.h ppd-localize.o: ppd-localize.c cups-private.h string-private.h \ ../config.h debug-private.h ../cups/versioning.h array-private.h \ ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ ../cups/language.h md5-private.h language-private.h \ ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ thread-private.h ppd-private.h ../cups/ppd.h raster.h ppd-mark.o: ppd-mark.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ ../cups/ppd.h raster.h ppd-page.o: ppd-page.c string-private.h ../config.h debug-private.h \ ../cups/versioning.h ppd.h cups.h file.h ipp.h http.h array.h \ language.h pwg.h raster.h ppd-util.o: ppd-util.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ ../cups/ppd.h raster.h pwg-media.o: pwg-media.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h request.o: request.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h sidechannel.o: sidechannel.c sidechannel.h versioning.h cups-private.h \ string-private.h ../config.h debug-private.h array-private.h \ ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ ../cups/language.h md5-private.h language-private.h \ ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ thread-private.h snmp.o: snmp.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h snmp-private.h snprintf.o: snprintf.c string-private.h ../config.h string.o: string.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h tempfile.o: tempfile.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h thread.o: thread.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h tls.o: tls.c cups-private.h string-private.h ../config.h debug-private.h \ ../cups/versioning.h array-private.h ../cups/array.h ipp-private.h \ ../cups/ipp.h http.h http-private.h ../cups/language.h md5-private.h \ language-private.h ../cups/transcode.h pwg-private.h ../cups/cups.h \ file.h pwg.h thread-private.h tls-darwin.c transcode.o: transcode.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h usersys.o: usersys.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h util.o: util.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h testadmin.o: testadmin.c adminutil.h cups.h file.h versioning.h ipp.h \ http.h array.h language.h pwg.h string-private.h ../config.h testarray.o: testarray.c string-private.h ../config.h debug-private.h \ ../cups/versioning.h array-private.h ../cups/array.h dir.h testcache.o: testcache.c ppd-private.h ../cups/cups.h file.h versioning.h \ ipp.h http.h array.h language.h pwg.h ../cups/ppd.h raster.h \ pwg-private.h file-private.h cups-private.h string-private.h \ ../config.h debug-private.h array-private.h ipp-private.h \ http-private.h md5-private.h language-private.h ../cups/transcode.h \ thread-private.h testconflicts.o: testconflicts.c cups.h file.h versioning.h ipp.h http.h \ array.h language.h pwg.h ppd.h raster.h string-private.h ../config.h testcreds.o: testcreds.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h testcups.o: testcups.c string-private.h ../config.h cups.h file.h \ versioning.h ipp.h http.h array.h language.h pwg.h ppd.h raster.h testdest.o: testdest.c cups.h file.h versioning.h ipp.h http.h array.h \ language.h pwg.h testfile.o: testfile.c string-private.h ../config.h debug-private.h \ ../cups/versioning.h file.h testhttp.o: testhttp.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h testi18n.o: testi18n.c string-private.h ../config.h language-private.h \ ../cups/transcode.h language.h array.h versioning.h testipp.o: testipp.c file.h versioning.h string-private.h ../config.h \ ipp-private.h ../cups/ipp.h http.h array.h testoptions.o: testoptions.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h testlang.o: testlang.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ ../cups/ppd.h raster.h testppd.o: testppd.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ ../cups/ppd.h raster.h testpwg.o: testpwg.c ppd-private.h ../cups/cups.h file.h versioning.h \ ipp.h http.h array.h language.h pwg.h ../cups/ppd.h raster.h \ pwg-private.h file-private.h cups-private.h string-private.h \ ../config.h debug-private.h array-private.h ipp-private.h \ http-private.h md5-private.h language-private.h ../cups/transcode.h \ thread-private.h testsnmp.o: testsnmp.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h snmp-private.h tlscheck.o: tlscheck.c cups-private.h string-private.h ../config.h \ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h thread-private.h cups-2.2.7/cups/dest-job.c000664 000765 000024 00000027312 13255074424 016005 0ustar00msweetstaff000000 000000 /* * Destination job support for CUPS. * * Copyright 2012-2017 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" /* * 'cupsCancelDestJob()' - Cancel a job on a destination. * * The "job_id" is the number returned by cupsCreateDestJob. * * Returns @code IPP_STATUS_OK@ on success and * @code IPP_STATUS_ERROR_NOT_AUTHORIZED@ or * @code IPP_STATUS_ERROR_FORBIDDEN@ on failure. * * @since CUPS 1.6/macOS 10.8@ */ ipp_status_t /* O - Status of cancel operation */ cupsCancelDestJob(http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ int job_id) /* I - Job ID */ { cups_dinfo_t *info; /* Destination information */ if ((info = cupsCopyDestInfo(http, dest)) != NULL) { ipp_t *request; /* Cancel-Job request */ request = ippNewRequest(IPP_OP_CANCEL_JOB); ippSetVersion(request, info->version / 10, info->version % 10); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, info->uri); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippDelete(cupsDoRequest(http, request, info->resource)); cupsFreeDestInfo(info); } return (cupsLastError()); } /* * 'cupsCloseDestJob()' - Close a job and start printing. * * Use when the last call to cupsStartDocument passed 0 for "last_document". * "job_id" is the job ID returned by cupsCreateDestJob. Returns @code IPP_STATUS_OK@ * on success. * * @since CUPS 1.6/macOS 10.8@ */ ipp_status_t /* O - IPP status code */ cupsCloseDestJob( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *info, /* I - Destination information */ int job_id) /* I - Job ID */ { int i; /* Looping var */ ipp_t *request = NULL;/* Close-Job/Send-Document request */ ipp_attribute_t *attr; /* operations-supported attribute */ DEBUG_printf(("cupsCloseDestJob(http=%p, dest=%p(%s/%s), info=%p, job_id=%d)", (void *)http, (void *)dest, dest ? dest->name : NULL, dest ? dest->instance : NULL, (void *)info, job_id)); /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (!http || !dest || !info || job_id <= 0) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); DEBUG_puts("1cupsCloseDestJob: Bad arguments."); return (IPP_STATUS_ERROR_INTERNAL); } /* * Build a Close-Job or empty Send-Document request... */ if ((attr = ippFindAttribute(info->attrs, "operations-supported", IPP_TAG_ENUM)) != NULL) { for (i = 0; i < attr->num_values; i ++) if (attr->values[i].integer == IPP_OP_CLOSE_JOB) { request = ippNewRequest(IPP_OP_CLOSE_JOB); break; } } if (!request) request = ippNewRequest(IPP_OP_SEND_DOCUMENT); if (!request) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOMEM), 0); DEBUG_puts("1cupsCloseDestJob: Unable to create Close-Job/Send-Document " "request."); return (IPP_STATUS_ERROR_INTERNAL); } ippSetVersion(request, info->version / 10, info->version % 10); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, info->uri); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); if (ippGetOperation(request) == IPP_OP_SEND_DOCUMENT) ippAddBoolean(request, IPP_TAG_OPERATION, "last-document", 1); /* * Send the request and return the status... */ ippDelete(cupsDoRequest(http, request, info->resource)); DEBUG_printf(("1cupsCloseDestJob: %s (%s)", ippErrorString(cupsLastError()), cupsLastErrorString())); return (cupsLastError()); } /* * 'cupsCreateDestJob()' - Create a job on a destination. * * Returns @code IPP_STATUS_OK@ or @code IPP_STATUS_OK_SUBST@ on success, saving the job ID * in the variable pointed to by "job_id". * * @since CUPS 1.6/macOS 10.8@ */ ipp_status_t /* O - IPP status code */ cupsCreateDestJob( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *info, /* I - Destination information */ int *job_id, /* O - Job ID or 0 on error */ const char *title, /* I - Job name */ int num_options, /* I - Number of job options */ cups_option_t *options) /* I - Job options */ { ipp_t *request, /* Create-Job request */ *response; /* Create-Job response */ ipp_attribute_t *attr; /* job-id attribute */ DEBUG_printf(("cupsCreateDestJob(http=%p, dest=%p(%s/%s), info=%p, " "job_id=%p, title=\"%s\", num_options=%d, options=%p)", (void *)http, (void *)dest, dest ? dest->name : NULL, dest ? dest->instance : NULL, (void *)info, (void *)job_id, title, num_options, (void *)options)); /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (job_id) *job_id = 0; if (!http || !dest || !info || !job_id) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); DEBUG_puts("1cupsCreateDestJob: Bad arguments."); return (IPP_STATUS_ERROR_INTERNAL); } /* * Build a Create-Job request... */ if ((request = ippNewRequest(IPP_OP_CREATE_JOB)) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOMEM), 0); DEBUG_puts("1cupsCreateDestJob: Unable to create Create-Job request."); return (IPP_STATUS_ERROR_INTERNAL); } ippSetVersion(request, info->version / 10, info->version % 10); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, info->uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); if (title) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, title); cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION); cupsEncodeOptions2(request, num_options, options, IPP_TAG_JOB); cupsEncodeOptions2(request, num_options, options, IPP_TAG_SUBSCRIPTION); /* * Send the request and get the job-id... */ response = cupsDoRequest(http, request, info->resource); if ((attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) != NULL) { *job_id = attr->values[0].integer; DEBUG_printf(("1cupsCreateDestJob: job-id=%d", *job_id)); } ippDelete(response); /* * Return the status code from the Create-Job request... */ DEBUG_printf(("1cupsCreateDestJob: %s (%s)", ippErrorString(cupsLastError()), cupsLastErrorString())); return (cupsLastError()); } /* * 'cupsFinishDestDocument()' - Finish the current document. * * Returns @code IPP_STATUS_OK@ or @code IPP_STATUS_OK_SUBST@ on success. * * @since CUPS 1.6/macOS 10.8@ */ ipp_status_t /* O - Status of document submission */ cupsFinishDestDocument( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *info) /* I - Destination information */ { DEBUG_printf(("cupsFinishDestDocument(http=%p, dest=%p(%s/%s), info=%p)", (void *)http, (void *)dest, dest ? dest->name : NULL, dest ? dest->instance : NULL, (void *)info)); /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (!http || !dest || !info) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); DEBUG_puts("1cupsFinishDestDocument: Bad arguments."); return (IPP_STATUS_ERROR_INTERNAL); } /* * Get the response at the end of the document and return it... */ ippDelete(cupsGetResponse(http, info->resource)); DEBUG_printf(("1cupsFinishDestDocument: %s (%s)", ippErrorString(cupsLastError()), cupsLastErrorString())); return (cupsLastError()); } /* * 'cupsStartDestDocument()' - Start a new document. * * "job_id" is the job ID returned by cupsCreateDestJob. "docname" is the name * of the document/file being printed, "format" is the MIME media type for the * document (see CUPS_FORMAT_xxx constants), and "num_options" and "options" * are the options do be applied to the document. "last_document" should be 1 * if this is the last document to be submitted in the job. Returns * @code HTTP_CONTINUE@ on success. * * @since CUPS 1.6/macOS 10.8@ */ http_status_t /* O - Status of document creation */ cupsStartDestDocument( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *info, /* I - Destination information */ int job_id, /* I - Job ID */ const char *docname, /* I - Document name */ const char *format, /* I - Document format */ int num_options, /* I - Number of document options */ cups_option_t *options, /* I - Document options */ int last_document) /* I - 1 if this is the last document */ { ipp_t *request; /* Send-Document request */ http_status_t status; /* HTTP status */ DEBUG_printf(("cupsStartDestDocument(http=%p, dest=%p(%s/%s), info=%p, job_id=%d, docname=\"%s\", format=\"%s\", num_options=%d, options=%p, last_document=%d)", (void *)http, (void *)dest, dest ? dest->name : NULL, dest ? dest->instance : NULL, (void *)info, job_id, docname, format, num_options, (void *)options, last_document)); /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (!http || !dest || !info || job_id <= 0) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); DEBUG_puts("1cupsStartDestDocument: Bad arguments."); return (HTTP_STATUS_ERROR); } /* * Create a Send-Document request... */ if ((request = ippNewRequest(IPP_OP_SEND_DOCUMENT)) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOMEM), 0); DEBUG_puts("1cupsStartDestDocument: Unable to create Send-Document " "request."); return (HTTP_STATUS_ERROR); } ippSetVersion(request, info->version / 10, info->version % 10); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, info->uri); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); if (docname) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "document-name", NULL, docname); if (format) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format); ippAddBoolean(request, IPP_TAG_OPERATION, "last-document", (char)last_document); cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION); cupsEncodeOptions2(request, num_options, options, IPP_TAG_DOCUMENT); /* * Send and delete the request, then return the status... */ status = cupsSendRequest(http, request, info->resource, CUPS_LENGTH_VARIABLE); ippDelete(request); return (status); } cups-2.2.7/cups/dest-localization.c000664 000765 000024 00000036421 13255074424 017724 0ustar00msweetstaff000000 000000 /* * Destination localization support for CUPS. * * Copyright 2012-2014 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" /* * Local functions... */ static void cups_create_localizations(http_t *http, cups_dinfo_t *dinfo); static int cups_read_strings(cups_file_t *fp, char *buffer, size_t bufsize, char **id, char **str); static char *cups_scan_strings(char *buffer); /* * 'cupsLocalizeDestMedia()' - Get the localized string for a destination media * size. * * The returned string is stored in the destination information and will become * invalid if the destination information is deleted. * * @since CUPS 2.0/macOS 10.10@ */ const char * /* O - Localized string */ cupsLocalizeDestMedia( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ unsigned flags, /* I - Media flags */ cups_size_t *size) /* I - Media size */ { cups_lang_t *lang; /* Standard localizations */ _cups_message_t key, /* Search key */ *match; /* Matching entry */ pwg_media_t *pwg; /* PWG media information */ cups_array_t *db; /* Media database */ _cups_media_db_t *mdb; /* Media database entry */ char name[1024], /* Size name */ temp[256]; /* Temporary string */ const char *lsize, /* Localized media size */ *lsource, /* Localized media source */ *ltype; /* Localized media type */ DEBUG_printf(("cupsLocalizeDestMedia(http=%p, dest=%p, dinfo=%p, flags=%x, size=%p(\"%s\"))", (void *)http, (void *)dest, (void *)dinfo, flags, (void *)size, size ? size->media : "(null)")); /* * Range check input... */ if (!http || !dest || !dinfo || !size) { DEBUG_puts("1cupsLocalizeDestMedia: Returning NULL."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (NULL); } /* * See if the localization is cached... */ if (!dinfo->localizations) cups_create_localizations(http, dinfo); key.id = size->media; if ((match = (_cups_message_t *)cupsArrayFind(dinfo->localizations, &key)) != NULL) { DEBUG_printf(("1cupsLocalizeDestMedia: Returning \"%s\".", match->str)); return (match->str); } /* * If not, get the localized size, source, and type strings... */ lang = cupsLangDefault(); snprintf(temp, sizeof(temp), "media.%s", size->media); if ((lsize = _cupsLangString(lang, temp)) != NULL && strcmp(lsize, temp)) { DEBUG_printf(("1cupsLocalizeDestMedia: Returning standard localization \"%s\".", lsize)); return (lsize); } pwg = pwgMediaForSize(size->width, size->length); if (pwg->ppd) lsize = _cupsLangString(lang, pwg->ppd); else lsize = NULL; if (!lsize) { if ((size->width % 635) == 0 && (size->length % 635) == 0) { /* * Use inches since the size is a multiple of 1/4 inch. */ snprintf(temp, sizeof(temp), _cupsLangString(lang, _("%g x %g \"")), size->width / 2540.0, size->length / 2540.0); } else { /* * Use millimeters since the size is not a multiple of 1/4 inch. */ snprintf(temp, sizeof(temp), _cupsLangString(lang, _("%d x %d mm")), (size->width + 50) / 100, (size->length + 50) / 100); } lsize = temp; } if (flags & CUPS_MEDIA_FLAGS_READY) db = dinfo->ready_db; else db = dinfo->media_db; DEBUG_printf(("1cupsLocalizeDestMedia: size->media=\"%s\"", size->media)); for (mdb = (_cups_media_db_t *)cupsArrayFirst(db); mdb; mdb = (_cups_media_db_t *)cupsArrayNext(db)) { if (mdb->key && !strcmp(mdb->key, size->media)) break; else if (mdb->size_name && !strcmp(mdb->size_name, size->media)) break; } if (!mdb) { for (mdb = (_cups_media_db_t *)cupsArrayFirst(db); mdb; mdb = (_cups_media_db_t *)cupsArrayNext(db)) { if (mdb->width == size->width && mdb->length == size->length && mdb->bottom == size->bottom && mdb->left == size->left && mdb->right == size->right && mdb->top == size->top) break; } } if (mdb) { DEBUG_printf(("1cupsLocalizeDestMedia: MATCH mdb%p [key=\"%s\" size_name=\"%s\" source=\"%s\" type=\"%s\" width=%d length=%d B%d L%d R%d T%d]", (void *)mdb, mdb->key, mdb->size_name, mdb->source, mdb->type, mdb->width, mdb->length, mdb->bottom, mdb->left, mdb->right, mdb->top)); lsource = cupsLocalizeDestValue(http, dest, dinfo, "media-source", mdb->source); ltype = cupsLocalizeDestValue(http, dest, dinfo, "media-type", mdb->type); } else { lsource = NULL; ltype = NULL; } if (!lsource && !ltype) { if (size->bottom || size->left || size->right || size->top) snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (Borderless)")), lsize); else strlcpy(name, lsize, sizeof(name)); } else if (!lsource) { if (size->bottom || size->left || size->right || size->top) snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (Borderless, %s)")), lsize, ltype); else snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (%s)")), lsize, ltype); } else if (!ltype) { if (size->bottom || size->left || size->right || size->top) snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (Borderless, %s)")), lsize, lsource); else snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (%s)")), lsize, lsource); } else { if (size->bottom || size->left || size->right || size->top) snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (Borderless, %s, %s)")), lsize, ltype, lsource); else snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (%s, %s)")), lsize, ltype, lsource); } if ((match = (_cups_message_t *)calloc(1, sizeof(_cups_message_t))) == NULL) return (NULL); match->id = strdup(size->media); match->str = strdup(name); cupsArrayAdd(dinfo->localizations, match); DEBUG_printf(("1cupsLocalizeDestMedia: Returning \"%s\".", match->str)); return (match->str); } /* * 'cupsLocalizeDestOption()' - Get the localized string for a destination * option. * * The returned string is stored in the destination information and will become * invalid if the destination information is deleted. * * @since CUPS 1.6/macOS 10.8@ */ const char * /* O - Localized string */ cupsLocalizeDestOption( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ const char *option) /* I - Option to localize */ { _cups_message_t key, /* Search key */ *match; /* Matching entry */ const char *localized; /* Localized string */ DEBUG_printf(("cupsLocalizeDestOption(http=%p, dest=%p, dinfo=%p, option=\"%s\")", (void *)http, (void *)dest, (void *)dinfo, option)); if (!http || !dest || !dinfo) return (option); if (!dinfo->localizations) cups_create_localizations(http, dinfo); key.id = (char *)option; if ((match = (_cups_message_t *)cupsArrayFind(dinfo->localizations, &key)) != NULL) return (match->str); else if ((localized = _cupsLangString(cupsLangDefault(), option)) != NULL) return (localized); else return (option); } /* * 'cupsLocalizeDestValue()' - Get the localized string for a destination * option+value pair. * * The returned string is stored in the destination information and will become * invalid if the destination information is deleted. * * @since CUPS 1.6/macOS 10.8@ */ const char * /* O - Localized string */ cupsLocalizeDestValue( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ const char *option, /* I - Option to localize */ const char *value) /* I - Value to localize */ { _cups_message_t key, /* Search key */ *match; /* Matching entry */ char pair[256]; /* option.value pair */ const char *localized; /* Localized string */ DEBUG_printf(("cupsLocalizeDestValue(http=%p, dest=%p, dinfo=%p, option=\"%s\", value=\"%s\")", (void *)http, (void *)dest, (void *)dinfo, option, value)); if (!http || !dest || !dinfo) return (value); if (!strcmp(option, "media")) { pwg_media_t *media = pwgMediaForPWG(value); cups_size_t size; strlcpy(size.media, value, sizeof(size.media)); size.width = media ? media->width : 0; size.length = media ? media->length : 0; size.left = 0; size.right = 0; size.bottom = 0; size.top = 0; return (cupsLocalizeDestMedia(http, dest, dinfo, CUPS_MEDIA_FLAGS_DEFAULT, &size)); } if (!dinfo->localizations) cups_create_localizations(http, dinfo); snprintf(pair, sizeof(pair), "%s.%s", option, value); key.id = pair; if ((match = (_cups_message_t *)cupsArrayFind(dinfo->localizations, &key)) != NULL) return (match->str); else if ((localized = _cupsLangString(cupsLangDefault(), pair)) != NULL && strcmp(localized, pair)) return (localized); else return (value); } /* * 'cups_create_localizations()' - Create the localizations array for a * destination. */ static void cups_create_localizations( http_t *http, /* I - Connection to destination */ cups_dinfo_t *dinfo) /* I - Destination informations */ { http_t *http2; /* Connection for strings file */ http_status_t status; /* Request status */ ipp_attribute_t *attr; /* "printer-strings-uri" attribute */ char scheme[32], /* URI scheme */ userpass[256], /* Username/password info */ hostname[256], /* Hostname */ resource[1024], /* Resource */ http_hostname[256], /* Hostname of connection */ tempfile[1024]; /* Temporary filename */ int port; /* Port number */ http_encryption_t encryption; /* Encryption to use */ cups_file_t *temp; /* Temporary file */ /* * Create an empty message catalog... */ dinfo->localizations = _cupsMessageNew(NULL); /* * See if there are any localizations... */ if ((attr = ippFindAttribute(dinfo->attrs, "printer-strings-uri", IPP_TAG_URI)) == NULL) { /* * Nope... */ DEBUG_puts("4cups_create_localizations: No printer-strings-uri (uri) " "value."); return; /* Nope */ } /* * Pull apart the URI and determine whether we need to try a different * server... */ if (httpSeparateURI(HTTP_URI_CODING_ALL, attr->values[0].string.text, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) { DEBUG_printf(("4cups_create_localizations: Bad printer-strings-uri value " "\"%s\".", attr->values[0].string.text)); return; } httpGetHostname(http, http_hostname, sizeof(http_hostname)); if (!_cups_strcasecmp(http_hostname, hostname) && port == httpAddrPort(http->hostaddr)) { /* * Use the same connection... */ http2 = http; } else { /* * Connect to the alternate host... */ if (!strcmp(scheme, "https")) encryption = HTTP_ENCRYPTION_ALWAYS; else encryption = HTTP_ENCRYPTION_IF_REQUESTED; if ((http2 = httpConnect2(hostname, port, NULL, AF_UNSPEC, encryption, 1, 30000, NULL)) == NULL) { DEBUG_printf(("4cups_create_localizations: Unable to connect to " "%s:%d: %s", hostname, port, cupsLastErrorString())); return; } } /* * Get a temporary file... */ if ((temp = cupsTempFile2(tempfile, sizeof(tempfile))) == NULL) { DEBUG_printf(("4cups_create_localizations: Unable to create temporary " "file: %s", cupsLastErrorString())); if (http2 != http) httpClose(http2); return; } status = cupsGetFd(http2, resource, cupsFileNumber(temp)); DEBUG_printf(("4cups_create_localizations: GET %s = %s", resource, httpStatus(status))); if (status == HTTP_STATUS_OK) { /* * Got the file, read it... */ char buffer[8192], /* Message buffer */ *id, /* ID string */ *str; /* Translated message */ _cups_message_t *m; /* Current message */ lseek(cupsFileNumber(temp), 0, SEEK_SET); while (cups_read_strings(temp, buffer, sizeof(buffer), &id, &str)) { if ((m = malloc(sizeof(_cups_message_t))) == NULL) break; m->id = strdup(id); m->str = strdup(str); if (m->id && m->str) cupsArrayAdd(dinfo->localizations, m); else { if (m->id) free(m->id); if (m->str) free(m->str); free(m); break; } } } DEBUG_printf(("4cups_create_localizations: %d messages loaded.", cupsArrayCount(dinfo->localizations))); /* * Cleanup... */ unlink(tempfile); cupsFileClose(temp); if (http2 != http) httpClose(http2); } /* * 'cups_read_strings()' - Read a pair of strings from a .strings file. */ static int /* O - 1 on success, 0 on failure */ cups_read_strings(cups_file_t *strings, /* I - .strings file */ char *buffer, /* I - Line buffer */ size_t bufsize, /* I - Size of line buffer */ char **id, /* O - Pointer to ID string */ char **str) /* O - Pointer to translation string */ { char *bufptr; /* Pointer into buffer */ while (cupsFileGets(strings, buffer, bufsize)) { if (buffer[0] != '\"') continue; *id = buffer + 1; bufptr = cups_scan_strings(buffer); if (*bufptr != '\"') continue; *bufptr++ = '\0'; while (*bufptr && *bufptr != '\"') bufptr ++; if (!*bufptr) continue; *str = bufptr + 1; bufptr = cups_scan_strings(bufptr); if (*bufptr != '\"') continue; *bufptr = '\0'; return (1); } return (0); } /* * 'cups_scan_strings()' - Scan a quoted string. */ static char * /* O - End of string */ cups_scan_strings(char *buffer) /* I - Start of string */ { char *bufptr; /* Pointer into string */ for (bufptr = buffer + 1; *bufptr && *bufptr != '\"'; bufptr ++) { if (*bufptr == '\\') { if (bufptr[1] >= '0' && bufptr[1] <= '3' && bufptr[2] >= '0' && bufptr[2] <= '7' && bufptr[3] >= '0' && bufptr[3] <= '7') { /* * Decode \nnn octal escape... */ *bufptr = (char)(((((bufptr[1] - '0') << 3) | (bufptr[2] - '0')) << 3) | (bufptr[3] - '0')); _cups_strcpy(bufptr + 1, bufptr + 4); } else { /* * Decode \C escape... */ _cups_strcpy(bufptr, bufptr + 1); if (*bufptr == 'n') *bufptr = '\n'; else if (*bufptr == 'r') *bufptr = '\r'; else if (*bufptr == 't') *bufptr = '\t'; } } } return (bufptr); } cups-2.2.7/cups/dest-options.c000664 000765 000024 00000174677 13255074424 016747 0ustar00msweetstaff000000 000000 /* * Destination option/media support for CUPS. * * Copyright 2012-2017 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" /* * Local constants... */ #define _CUPS_MEDIA_READY_TTL 30 /* Life of xxx-ready values */ /* * Local functions... */ static void cups_add_dconstres(cups_array_t *a, ipp_t *collection); static int cups_compare_dconstres(_cups_dconstres_t *a, _cups_dconstres_t *b); static int cups_compare_media_db(_cups_media_db_t *a, _cups_media_db_t *b); static _cups_media_db_t *cups_copy_media_db(_cups_media_db_t *mdb); static void cups_create_cached(http_t *http, cups_dinfo_t *dinfo, unsigned flags); static void cups_create_constraints(cups_dinfo_t *dinfo); static void cups_create_defaults(cups_dinfo_t *dinfo); static void cups_create_media_db(cups_dinfo_t *dinfo, unsigned flags); static void cups_free_media_db(_cups_media_db_t *mdb); static int cups_get_media_db(http_t *http, cups_dinfo_t *dinfo, pwg_media_t *pwg, unsigned flags, cups_size_t *size); static int cups_is_close_media_db(_cups_media_db_t *a, _cups_media_db_t *b); static cups_array_t *cups_test_constraints(cups_dinfo_t *dinfo, const char *new_option, const char *new_value, int num_options, cups_option_t *options, int *num_conflicts, cups_option_t **conflicts); static void cups_update_ready(http_t *http, cups_dinfo_t *dinfo); /* * 'cupsCheckDestSupported()' - Check that the option and value are supported * by the destination. * * Returns 1 if supported, 0 otherwise. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 if supported, 0 otherwise */ cupsCheckDestSupported( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ const char *option, /* I - Option */ const char *value) /* I - Value or @code NULL@ */ { int i; /* Looping var */ char temp[1024]; /* Temporary string */ int int_value; /* Integer value */ int xres_value, /* Horizontal resolution */ yres_value; /* Vertical resolution */ ipp_res_t units_value; /* Resolution units */ ipp_attribute_t *attr; /* Attribute */ _ipp_value_t *attrval; /* Current attribute value */ /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (!http || !dest || !dinfo || !option) return (0); /* * Lookup the attribute... */ if (strstr(option, "-supported")) attr = ippFindAttribute(dinfo->attrs, option, IPP_TAG_ZERO); else { snprintf(temp, sizeof(temp), "%s-supported", option); attr = ippFindAttribute(dinfo->attrs, temp, IPP_TAG_ZERO); } if (!attr) return (0); if (!value) return (1); /* * Compare values... */ if (!strcmp(option, "media") && !strncmp(value, "custom_", 7)) { /* * Check range of custom media sizes... */ pwg_media_t *pwg; /* Current PWG media size info */ int min_width, /* Minimum width */ min_length, /* Minimum length */ max_width, /* Maximum width */ max_length; /* Maximum length */ /* * Get the minimum and maximum size... */ min_width = min_length = INT_MAX; max_width = max_length = 0; for (i = attr->num_values, attrval = attr->values; i > 0; i --, attrval ++) { if (!strncmp(attrval->string.text, "custom_min_", 11) && (pwg = pwgMediaForPWG(attrval->string.text)) != NULL) { min_width = pwg->width; min_length = pwg->length; } else if (!strncmp(attrval->string.text, "custom_max_", 11) && (pwg = pwgMediaForPWG(attrval->string.text)) != NULL) { max_width = pwg->width; max_length = pwg->length; } } /* * Check the range... */ if (min_width < INT_MAX && max_width > 0 && (pwg = pwgMediaForPWG(value)) != NULL && pwg->width >= min_width && pwg->width <= max_width && pwg->length >= min_length && pwg->length <= max_length) return (1); } else { /* * Check literal values... */ switch (attr->value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : int_value = atoi(value); for (i = 0; i < attr->num_values; i ++) if (attr->values[i].integer == int_value) return (1); break; case IPP_TAG_BOOLEAN : return (attr->values[0].boolean); case IPP_TAG_RANGE : int_value = atoi(value); for (i = 0; i < attr->num_values; i ++) if (int_value >= attr->values[i].range.lower && int_value <= attr->values[i].range.upper) return (1); break; case IPP_TAG_RESOLUTION : if (sscanf(value, "%dx%d%15s", &xres_value, &yres_value, temp) != 3) { if (sscanf(value, "%d%15s", &xres_value, temp) != 2) return (0); yres_value = xres_value; } if (!strcmp(temp, "dpi")) units_value = IPP_RES_PER_INCH; else if (!strcmp(temp, "dpc") || !strcmp(temp, "dpcm")) units_value = IPP_RES_PER_CM; else return (0); for (i = attr->num_values, attrval = attr->values; i > 0; i --, attrval ++) { if (attrval->resolution.xres == xres_value && attrval->resolution.yres == yres_value && attrval->resolution.units == units_value) return (1); } break; case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_CHARSET : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_MIMETYPE : case IPP_TAG_LANGUAGE : case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : for (i = 0; i < attr->num_values; i ++) if (!strcmp(attr->values[i].string.text, value)) return (1); break; default : break; } } /* * If we get there the option+value is not supported... */ return (0); } /* * 'cupsCopyDestConflicts()' - Get conflicts and resolutions for a new * option/value pair. * * "num_options" and "options" represent the currently selected options by the * user. "new_option" and "new_value" are the setting the user has just * changed. * * Returns 1 if there is a conflict, 0 if there are no conflicts, and -1 if * there was an unrecoverable error such as a resolver loop. * * If "num_conflicts" and "conflicts" are not @code NULL@, they are set to * contain the list of conflicting option/value pairs. Similarly, if * "num_resolved" and "resolved" are not @code NULL@ they will be set to the * list of changes needed to resolve the conflict. * * If cupsCopyDestConflicts returns 1 but "num_resolved" and "resolved" are set * to 0 and @code NULL@, respectively, then the conflict cannot be resolved. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 if there is a conflict, 0 if none, -1 on error */ cupsCopyDestConflicts( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ int num_options, /* I - Number of current options */ cups_option_t *options, /* I - Current options */ const char *new_option, /* I - New option */ const char *new_value, /* I - New value */ int *num_conflicts, /* O - Number of conflicting options */ cups_option_t **conflicts, /* O - Conflicting options */ int *num_resolved, /* O - Number of options to resolve */ cups_option_t **resolved) /* O - Resolved options */ { int i, /* Looping var */ have_conflicts = 0, /* Do we have conflicts? */ changed, /* Did we change something? */ tries, /* Number of tries for resolution */ num_myconf = 0, /* My number of conflicting options */ num_myres = 0; /* My number of resolved options */ cups_option_t *myconf = NULL, /* My conflicting options */ *myres = NULL, /* My resolved options */ *myoption, /* My current option */ *option; /* Current option */ cups_array_t *active = NULL, /* Active conflicts */ *pass = NULL, /* Resolvers for this pass */ *resolvers = NULL, /* Resolvers we have used */ *test; /* Test array for conflicts */ _cups_dconstres_t *c, /* Current constraint */ *r; /* Current resolver */ ipp_attribute_t *attr; /* Current attribute */ char value[2048]; /* Current attribute value as string */ const char *myvalue; /* Current value of an option */ /* * Clear returned values... */ if (num_conflicts) *num_conflicts = 0; if (conflicts) *conflicts = NULL; if (num_resolved) *num_resolved = 0; if (resolved) *resolved = NULL; /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (!http || !dest || !dinfo || (num_conflicts != NULL) != (conflicts != NULL) || (num_resolved != NULL) != (resolved != NULL)) return (0); /* * Load constraints as needed... */ if (!dinfo->constraints) cups_create_constraints(dinfo); if (cupsArrayCount(dinfo->constraints) == 0) return (0); if (!dinfo->num_defaults) cups_create_defaults(dinfo); /* * If we are resolving, create a shadow array... */ if (num_resolved) { for (i = num_options, option = options; i > 0; i --, option ++) num_myres = cupsAddOption(option->name, option->value, num_myres, &myres); if (new_option && new_value) num_myres = cupsAddOption(new_option, new_value, num_myres, &myres); } else { num_myres = num_options; myres = options; } /* * Check for any conflicts... */ if (num_resolved) pass = cupsArrayNew((cups_array_func_t)cups_compare_dconstres, NULL); for (tries = 0; tries < 100; tries ++) { /* * Check for any conflicts... */ if (num_conflicts || num_resolved) { cupsFreeOptions(num_myconf, myconf); num_myconf = 0; myconf = NULL; active = cups_test_constraints(dinfo, new_option, new_value, num_myres, myres, &num_myconf, &myconf); } else active = cups_test_constraints(dinfo, new_option, new_value, num_myres, myres, NULL, NULL); have_conflicts = (active != NULL); if (!active || !num_resolved) break; /* All done */ /* * Scan the constraints that were triggered to apply resolvers... */ if (!resolvers) resolvers = cupsArrayNew((cups_array_func_t)cups_compare_dconstres, NULL); for (c = (_cups_dconstres_t *)cupsArrayFirst(active), changed = 0; c; c = (_cups_dconstres_t *)cupsArrayNext(active)) { if (cupsArrayFind(pass, c)) continue; /* Already applied this resolver... */ if (cupsArrayFind(resolvers, c)) { DEBUG_printf(("1cupsCopyDestConflicts: Resolver loop with %s.", c->name)); have_conflicts = -1; goto cleanup; } if ((r = cupsArrayFind(dinfo->resolvers, c)) == NULL) { DEBUG_printf(("1cupsCopyDestConflicts: Resolver %s not found.", c->name)); have_conflicts = -1; goto cleanup; } /* * Add the options from the resolver... */ cupsArrayAdd(pass, r); cupsArrayAdd(resolvers, r); for (attr = ippFirstAttribute(r->collection); attr; attr = ippNextAttribute(r->collection)) { if (new_option && !strcmp(attr->name, new_option)) continue; /* Ignore this if we just changed it */ if (ippAttributeString(attr, value, sizeof(value)) >= sizeof(value)) continue; /* Ignore if the value is too long */ if ((test = cups_test_constraints(dinfo, attr->name, value, num_myres, myres, NULL, NULL)) == NULL) { /* * That worked, flag it... */ changed = 1; } else cupsArrayDelete(test); /* * Add the option/value from the resolver regardless of whether it * worked; this makes sure that we can cascade several changes to * make things resolve... */ num_myres = cupsAddOption(attr->name, value, num_myres, &myres); } } if (!changed) { DEBUG_puts("1cupsCopyDestConflicts: Unable to resolve constraints."); have_conflicts = -1; goto cleanup; } cupsArrayClear(pass); cupsArrayDelete(active); active = NULL; } if (tries >= 100) { DEBUG_puts("1cupsCopyDestConflicts: Unable to resolve after 100 tries."); have_conflicts = -1; goto cleanup; } /* * Copy resolved options as needed... */ if (num_resolved) { for (i = num_myres, myoption = myres; i > 0; i --, myoption ++) { if ((myvalue = cupsGetOption(myoption->name, num_options, options)) == NULL || strcmp(myvalue, myoption->value)) { if (new_option && !strcmp(new_option, myoption->name) && new_value && !strcmp(new_value, myoption->value)) continue; *num_resolved = cupsAddOption(myoption->name, myoption->value, *num_resolved, resolved); } } } /* * Clean up... */ cleanup: cupsArrayDelete(active); cupsArrayDelete(pass); cupsArrayDelete(resolvers); if (num_resolved) { /* * Free shadow copy of options... */ cupsFreeOptions(num_myres, myres); } if (num_conflicts) { /* * Return conflicting options to caller... */ *num_conflicts = num_myconf; *conflicts = myconf; } else { /* * Free conflicting options... */ cupsFreeOptions(num_myconf, myconf); } return (have_conflicts); } /* * 'cupsCopyDestInfo()' - Get the supported values/capabilities for the * destination. * * The caller is responsible for calling @link cupsFreeDestInfo@ on the return * value. @code NULL@ is returned on error. * * @since CUPS 1.6/macOS 10.8@ */ cups_dinfo_t * /* O - Destination information */ cupsCopyDestInfo( http_t *http, /* I - Connection to destination */ cups_dest_t *dest) /* I - Destination */ { cups_dinfo_t *dinfo; /* Destination information */ ipp_t *request, /* Get-Printer-Attributes request */ *response; /* Supported attributes */ int tries, /* Number of tries so far */ delay, /* Current retry delay */ prev_delay; /* Next retry delay */ const char *uri; /* Printer URI */ char resource[1024]; /* Resource path */ int version; /* IPP version */ ipp_status_t status; /* Status of request */ static const char * const requested_attrs[] = { /* Requested attributes */ "job-template", "media-col-database", "printer-description" }; DEBUG_printf(("cupsCopyDestSupported(http=%p, dest=%p(%s))", (void *)http, (void *)dest, dest ? dest->name : "")); /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (!http || !dest) return (NULL); /* * Get the printer URI and resource path... */ if ((uri = _cupsGetDestResource(dest, resource, sizeof(resource))) == NULL) return (NULL); /* * Get the supported attributes... */ delay = 1; prev_delay = 1; tries = 0; version = 20; do { /* * Send a Get-Printer-Attributes request... */ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(requested_attrs) / sizeof(requested_attrs[0])), NULL, requested_attrs); response = cupsDoRequest(http, request, resource); status = cupsLastError(); if (status > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED) { DEBUG_printf(("cupsCopyDestSupported: Get-Printer-Attributes for '%s' " "returned %s (%s)", dest->name, ippErrorString(status), cupsLastErrorString())); ippDelete(response); response = NULL; if (status == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED && version > 11) version = 11; else if (status == IPP_STATUS_ERROR_BUSY) { sleep((unsigned)delay); delay = _cupsNextDelay(delay, &prev_delay); } else return (NULL); } tries ++; } while (!response && tries < 10); if (!response) return (NULL); /* * Allocate a cups_dinfo_t structure and return it... */ if ((dinfo = calloc(1, sizeof(cups_dinfo_t))) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); ippDelete(response); return (NULL); } dinfo->version = version; dinfo->uri = uri; dinfo->resource = _cupsStrAlloc(resource); dinfo->attrs = response; return (dinfo); } /* * 'cupsFindDestDefault()' - Find the default value(s) for the given option. * * The returned value is an IPP attribute. Use the @code ippGetBoolean@, * @code ippGetCollection@, @code ippGetCount@, @code ippGetDate@, * @code ippGetInteger@, @code ippGetOctetString@, @code ippGetRange@, * @code ippGetResolution@, @code ippGetString@, and @code ippGetValueTag@ * functions to inspect the default value(s) as needed. * * @since CUPS 1.7/macOS 10.9@ */ ipp_attribute_t * /* O - Default attribute or @code NULL@ for none */ cupsFindDestDefault( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ const char *option) /* I - Option/attribute name */ { char name[IPP_MAX_NAME]; /* Attribute name */ /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (!http || !dest || !dinfo || !option) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (NULL); } /* * Find and return the attribute... */ snprintf(name, sizeof(name), "%s-default", option); return (ippFindAttribute(dinfo->attrs, name, IPP_TAG_ZERO)); } /* * 'cupsFindDestReady()' - Find the default value(s) for the given option. * * The returned value is an IPP attribute. Use the @code ippGetBoolean@, * @code ippGetCollection@, @code ippGetCount@, @code ippGetDate@, * @code ippGetInteger@, @code ippGetOctetString@, @code ippGetRange@, * @code ippGetResolution@, @code ippGetString@, and @code ippGetValueTag@ * functions to inspect the default value(s) as needed. * * @since CUPS 1.7/macOS 10.9@ */ ipp_attribute_t * /* O - Default attribute or @code NULL@ for none */ cupsFindDestReady( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ const char *option) /* I - Option/attribute name */ { char name[IPP_MAX_NAME]; /* Attribute name */ /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (!http || !dest || !dinfo || !option) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (NULL); } /* * Find and return the attribute... */ cups_update_ready(http, dinfo); snprintf(name, sizeof(name), "%s-ready", option); return (ippFindAttribute(dinfo->ready_attrs, name, IPP_TAG_ZERO)); } /* * 'cupsFindDestSupported()' - Find the default value(s) for the given option. * * The returned value is an IPP attribute. Use the @code ippGetBoolean@, * @code ippGetCollection@, @code ippGetCount@, @code ippGetDate@, * @code ippGetInteger@, @code ippGetOctetString@, @code ippGetRange@, * @code ippGetResolution@, @code ippGetString@, and @code ippGetValueTag@ * functions to inspect the default value(s) as needed. * * @since CUPS 1.7/macOS 10.9@ */ ipp_attribute_t * /* O - Default attribute or @code NULL@ for none */ cupsFindDestSupported( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ const char *option) /* I - Option/attribute name */ { char name[IPP_MAX_NAME]; /* Attribute name */ /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (!http || !dest || !dinfo || !option) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (NULL); } /* * Find and return the attribute... */ snprintf(name, sizeof(name), "%s-supported", option); return (ippFindAttribute(dinfo->attrs, name, IPP_TAG_ZERO)); } /* * 'cupsFreeDestInfo()' - Free destination information obtained using * @link cupsCopyDestInfo@. * * @since CUPS 1.6/macOS 10.8@ */ void cupsFreeDestInfo(cups_dinfo_t *dinfo) /* I - Destination information */ { /* * Range check input... */ if (!dinfo) return; /* * Free memory and return... */ _cupsStrFree(dinfo->resource); cupsArrayDelete(dinfo->constraints); cupsArrayDelete(dinfo->resolvers); cupsArrayDelete(dinfo->localizations); cupsArrayDelete(dinfo->media_db); cupsArrayDelete(dinfo->cached_db); ippDelete(dinfo->ready_attrs); cupsArrayDelete(dinfo->ready_db); ippDelete(dinfo->attrs); free(dinfo); } /* * 'cupsGetDestMediaByIndex()' - Get a media name, dimension, and margins for a * specific size. * * The @code flags@ parameter determines which set of media are indexed. For * example, passing @code CUPS_MEDIA_FLAGS_BORDERLESS@ will get the Nth * borderless size supported by the printer. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - 1 on success, 0 on failure */ cupsGetDestMediaByIndex( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ int n, /* I - Media size number (0-based) */ unsigned flags, /* I - Media flags */ cups_size_t *size) /* O - Media size information */ { _cups_media_db_t *nsize; /* Size for N */ pwg_media_t *pwg; /* PWG media name for size */ /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (size) memset(size, 0, sizeof(cups_size_t)); if (!http || !dest || !dinfo || n < 0 || !size) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } /* * Load media list as needed... */ if (flags & CUPS_MEDIA_FLAGS_READY) cups_update_ready(http, dinfo); if (!dinfo->cached_db || dinfo->cached_flags != flags) cups_create_cached(http, dinfo, flags); /* * Copy the size over and return... */ if ((nsize = (_cups_media_db_t *)cupsArrayIndex(dinfo->cached_db, n)) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } if (nsize->size_name) strlcpy(size->media, nsize->size_name, sizeof(size->media)); else if (nsize->key) strlcpy(size->media, nsize->key, sizeof(size->media)); else if ((pwg = pwgMediaForSize(nsize->width, nsize->length)) != NULL) strlcpy(size->media, pwg->pwg, sizeof(size->media)); else { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } size->width = nsize->width; size->length = nsize->length; size->bottom = nsize->bottom; size->left = nsize->left; size->right = nsize->right; size->top = nsize->top; return (1); } /* * 'cupsGetDestMediaByName()' - Get media names, dimensions, and margins. * * The "media" string is a PWG media name. "Flags" provides some matching * guidance (multiple flags can be combined): * * CUPS_MEDIA_FLAGS_DEFAULT = find the closest size supported by the printer, * CUPS_MEDIA_FLAGS_BORDERLESS = find a borderless size, * CUPS_MEDIA_FLAGS_DUPLEX = find a size compatible with 2-sided printing, * CUPS_MEDIA_FLAGS_EXACT = find an exact match for the size, and * CUPS_MEDIA_FLAGS_READY = if the printer supports media sensing, find the * size amongst the "ready" media. * * The matching result (if any) is returned in the "cups_size_t" structure. * * Returns 1 when there is a match and 0 if there is not a match. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on match, 0 on failure */ cupsGetDestMediaByName( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ const char *media, /* I - Media name */ unsigned flags, /* I - Media matching flags */ cups_size_t *size) /* O - Media size information */ { pwg_media_t *pwg; /* PWG media info */ /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (size) memset(size, 0, sizeof(cups_size_t)); if (!http || !dest || !dinfo || !media || !size) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } /* * Lookup the media size name... */ if ((pwg = pwgMediaForPWG(media)) == NULL) if ((pwg = pwgMediaForLegacy(media)) == NULL) { DEBUG_printf(("1cupsGetDestMediaByName: Unknown size '%s'.", media)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unknown media size name."), 1); return (0); } /* * Lookup the size... */ return (cups_get_media_db(http, dinfo, pwg, flags, size)); } /* * 'cupsGetDestMediaBySize()' - Get media names, dimensions, and margins. * * "Width" and "length" are the dimensions in hundredths of millimeters. * "Flags" provides some matching guidance (multiple flags can be combined): * * CUPS_MEDIA_FLAGS_DEFAULT = find the closest size supported by the printer, * CUPS_MEDIA_FLAGS_BORDERLESS = find a borderless size, * CUPS_MEDIA_FLAGS_DUPLEX = find a size compatible with 2-sided printing, * CUPS_MEDIA_FLAGS_EXACT = find an exact match for the size, and * CUPS_MEDIA_FLAGS_READY = if the printer supports media sensing, find the * size amongst the "ready" media. * * The matching result (if any) is returned in the "cups_size_t" structure. * * Returns 1 when there is a match and 0 if there is not a match. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on match, 0 on failure */ cupsGetDestMediaBySize( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ int width, /* I - Media width in hundredths of * of millimeters */ int length, /* I - Media length in hundredths of * of millimeters */ unsigned flags, /* I - Media matching flags */ cups_size_t *size) /* O - Media size information */ { pwg_media_t *pwg; /* PWG media info */ /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (size) memset(size, 0, sizeof(cups_size_t)); if (!http || !dest || !dinfo || width <= 0 || length <= 0 || !size) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } /* * Lookup the media size name... */ if ((pwg = pwgMediaForSize(width, length)) == NULL) { DEBUG_printf(("1cupsGetDestMediaBySize: Invalid size %dx%d.", width, length)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid media size."), 1); return (0); } /* * Lookup the size... */ return (cups_get_media_db(http, dinfo, pwg, flags, size)); } /* * 'cupsGetDestMediaCount()' - Get the number of sizes supported by a * destination. * * The @code flags@ parameter determines the set of media sizes that are * counted. For example, passing @code CUPS_MEDIA_FLAGS_BORDERLESS@ will return * the number of borderless sizes. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - Number of sizes */ cupsGetDestMediaCount( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ unsigned flags) /* I - Media flags */ { /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (!http || !dest || !dinfo) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } /* * Load media list as needed... */ if (flags & CUPS_MEDIA_FLAGS_READY) cups_update_ready(http, dinfo); if (!dinfo->cached_db || dinfo->cached_flags != flags) cups_create_cached(http, dinfo, flags); return (cupsArrayCount(dinfo->cached_db)); } /* * 'cupsGetDestMediaDefault()' - Get the default size for a destination. * * The @code flags@ parameter determines which default size is returned. For * example, passing @code CUPS_MEDIA_FLAGS_BORDERLESS@ will return the default * borderless size, typically US Letter or A4, but sometimes 4x6 photo media. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - 1 on success, 0 on failure */ cupsGetDestMediaDefault( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ unsigned flags, /* I - Media flags */ cups_size_t *size) /* O - Media size information */ { const char *media; /* Default media size */ /* * Get the default connection as needed... */ if (!http) http = _cupsConnect(); /* * Range check input... */ if (size) memset(size, 0, sizeof(cups_size_t)); if (!http || !dest || !dinfo || !size) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } /* * Get the default media size, if any... */ if ((media = cupsGetOption("media", dest->num_options, dest->options)) == NULL) media = "na_letter_8.5x11in"; if (cupsGetDestMediaByName(http, dest, dinfo, media, flags, size)) return (1); if (strcmp(media, "na_letter_8.5x11in") && cupsGetDestMediaByName(http, dest, dinfo, "iso_a4_210x297mm", flags, size)) return (1); if (strcmp(media, "iso_a4_210x297mm") && cupsGetDestMediaByName(http, dest, dinfo, "na_letter_8.5x11in", flags, size)) return (1); if ((flags & CUPS_MEDIA_FLAGS_BORDERLESS) && cupsGetDestMediaByName(http, dest, dinfo, "na_index_4x6in", flags, size)) return (1); /* * Fall back to the first matching media size... */ return (cupsGetDestMediaByIndex(http, dest, dinfo, 0, flags, size)); } /* * 'cups_add_dconstres()' - Add a constraint or resolver to an array. */ static void cups_add_dconstres( cups_array_t *a, /* I - Array */ ipp_t *collection) /* I - Collection value */ { ipp_attribute_t *attr; /* Attribute */ _cups_dconstres_t *temp; /* Current constraint/resolver */ if ((attr = ippFindAttribute(collection, "resolver-name", IPP_TAG_NAME)) == NULL) return; if ((temp = calloc(1, sizeof(_cups_dconstres_t))) == NULL) return; temp->name = attr->values[0].string.text; temp->collection = collection; cupsArrayAdd(a, temp); } /* * 'cups_compare_dconstres()' - Compare to resolver entries. */ static int /* O - Result of comparison */ cups_compare_dconstres( _cups_dconstres_t *a, /* I - First resolver */ _cups_dconstres_t *b) /* I - Second resolver */ { return (strcmp(a->name, b->name)); } /* * 'cups_compare_media_db()' - Compare two media entries. */ static int /* O - Result of comparison */ cups_compare_media_db( _cups_media_db_t *a, /* I - First media entries */ _cups_media_db_t *b) /* I - Second media entries */ { int result; /* Result of comparison */ if ((result = a->width - b->width) == 0) result = a->length - b->length; return (result); } /* * 'cups_copy_media_db()' - Copy a media entry. */ static _cups_media_db_t * /* O - New media entry */ cups_copy_media_db( _cups_media_db_t *mdb) /* I - Media entry to copy */ { _cups_media_db_t *temp; /* New media entry */ if ((temp = calloc(1, sizeof(_cups_media_db_t))) == NULL) return (NULL); if (mdb->color) temp->color = _cupsStrAlloc(mdb->color); if (mdb->key) temp->key = _cupsStrAlloc(mdb->key); if (mdb->info) temp->info = _cupsStrAlloc(mdb->info); if (mdb->size_name) temp->size_name = _cupsStrAlloc(mdb->size_name); if (mdb->source) temp->source = _cupsStrAlloc(mdb->source); if (mdb->type) temp->type = _cupsStrAlloc(mdb->type); temp->width = mdb->width; temp->length = mdb->length; temp->bottom = mdb->bottom; temp->left = mdb->left; temp->right = mdb->right; temp->top = mdb->top; return (temp); } /* * 'cups_create_cached()' - Create the media selection cache. */ static void cups_create_cached(http_t *http, /* I - Connection to destination */ cups_dinfo_t *dinfo, /* I - Destination information */ unsigned flags) /* I - Media selection flags */ { cups_array_t *db; /* Media database array to use */ _cups_media_db_t *mdb, /* Media database entry */ *first; /* First entry this size */ DEBUG_printf(("3cups_create_cached(http=%p, dinfo=%p, flags=%u)", (void *)http, (void *)dinfo, flags)); if (dinfo->cached_db) cupsArrayDelete(dinfo->cached_db); dinfo->cached_db = cupsArrayNew(NULL, NULL); dinfo->cached_flags = flags; if (flags & CUPS_MEDIA_FLAGS_READY) { DEBUG_puts("4cups_create_cached: ready media"); cups_update_ready(http, dinfo); db = dinfo->ready_db; } else { DEBUG_puts("4cups_create_cached: supported media"); if (!dinfo->media_db) cups_create_media_db(dinfo, CUPS_MEDIA_FLAGS_DEFAULT); db = dinfo->media_db; } for (mdb = (_cups_media_db_t *)cupsArrayFirst(db), first = mdb; mdb; mdb = (_cups_media_db_t *)cupsArrayNext(db)) { DEBUG_printf(("4cups_create_cached: %p key=\"%s\", type=\"%s\", %dx%d, B%d L%d R%d T%d", (void *)mdb, mdb->key, mdb->type, mdb->width, mdb->length, mdb->bottom, mdb->left, mdb->right, mdb->top)); if (flags & CUPS_MEDIA_FLAGS_BORDERLESS) { if (!mdb->left && !mdb->right && !mdb->top && !mdb->bottom) { DEBUG_printf(("4cups_create_cached: add %p", (void *)mdb)); cupsArrayAdd(dinfo->cached_db, mdb); } } else if (flags & CUPS_MEDIA_FLAGS_DUPLEX) { if (first->width != mdb->width || first->length != mdb->length) { DEBUG_printf(("4cups_create_cached: add %p", (void *)first)); cupsArrayAdd(dinfo->cached_db, first); first = mdb; } else if (mdb->left >= first->left && mdb->right >= first->right && mdb->top >= first->top && mdb->bottom >= first->bottom && (mdb->left != first->left || mdb->right != first->right || mdb->top != first->top || mdb->bottom != first->bottom)) first = mdb; } else { DEBUG_printf(("4cups_create_cached: add %p", (void *)mdb)); cupsArrayAdd(dinfo->cached_db, mdb); } } if (flags & CUPS_MEDIA_FLAGS_DUPLEX) { DEBUG_printf(("4cups_create_cached: add %p", (void *)first)); cupsArrayAdd(dinfo->cached_db, first); } } /* * 'cups_create_constraints()' - Create the constraints and resolvers arrays. */ static void cups_create_constraints( cups_dinfo_t *dinfo) /* I - Destination information */ { int i; /* Looping var */ ipp_attribute_t *attr; /* Attribute */ _ipp_value_t *val; /* Current value */ dinfo->constraints = cupsArrayNew3(NULL, NULL, NULL, 0, NULL, (cups_afree_func_t)free); dinfo->resolvers = cupsArrayNew3((cups_array_func_t)cups_compare_dconstres, NULL, NULL, 0, NULL, (cups_afree_func_t)free); if ((attr = ippFindAttribute(dinfo->attrs, "job-constraints-supported", IPP_TAG_BEGIN_COLLECTION)) != NULL) { for (i = attr->num_values, val = attr->values; i > 0; i --, val ++) cups_add_dconstres(dinfo->constraints, val->collection); } if ((attr = ippFindAttribute(dinfo->attrs, "job-resolvers-supported", IPP_TAG_BEGIN_COLLECTION)) != NULL) { for (i = attr->num_values, val = attr->values; i > 0; i --, val ++) cups_add_dconstres(dinfo->resolvers, val->collection); } } /* * 'cups_create_defaults()' - Create the -default option array. * * TODO: Need to support collection defaults... */ static void cups_create_defaults( cups_dinfo_t *dinfo) /* I - Destination information */ { ipp_attribute_t *attr; /* Current attribute */ char name[IPP_MAX_NAME + 1], /* Current name */ *nameptr, /* Pointer into current name */ value[2048]; /* Current value */ /* * Iterate through the printer attributes looking for xxx-default and adding * xxx=value to the defaults option array. */ for (attr = ippFirstAttribute(dinfo->attrs); attr; attr = ippNextAttribute(dinfo->attrs)) { if (!attr->name || attr->group_tag != IPP_TAG_PRINTER) continue; if (attr->value_tag == IPP_TAG_BEGIN_COLLECTION) continue; /* TODO: STR #4096 */ if ((nameptr = attr->name + strlen(attr->name) - 8) <= attr->name || strcmp(nameptr, "-default")) continue; strlcpy(name, attr->name, sizeof(name)); if ((nameptr = name + strlen(name) - 8) <= name || strcmp(nameptr, "-default")) continue; *nameptr = '\0'; if (ippAttributeString(attr, value, sizeof(value)) >= sizeof(value)) continue; dinfo->num_defaults = cupsAddOption(name, value, dinfo->num_defaults, &dinfo->defaults); } } /* * 'cups_create_media_db()' - Create the media database. */ static void cups_create_media_db( cups_dinfo_t *dinfo, /* I - Destination information */ unsigned flags) /* I - Media flags */ { int i; /* Looping var */ _ipp_value_t *val; /* Current value */ ipp_attribute_t *media_col_db, /* media-col-database */ *media_attr, /* media-xxx */ *x_dimension, /* x-dimension */ *y_dimension; /* y-dimension */ pwg_media_t *pwg; /* PWG media info */ cups_array_t *db; /* New media database array */ _cups_media_db_t mdb; /* Media entry */ db = cupsArrayNew3((cups_array_func_t)cups_compare_media_db, NULL, NULL, 0, (cups_acopy_func_t)cups_copy_media_db, (cups_afree_func_t)cups_free_media_db); if (flags == CUPS_MEDIA_FLAGS_READY) { dinfo->ready_db = db; media_col_db = ippFindAttribute(dinfo->ready_attrs, "media-col-ready", IPP_TAG_BEGIN_COLLECTION); media_attr = ippFindAttribute(dinfo->ready_attrs, "media-ready", IPP_TAG_ZERO); } else { dinfo->media_db = db; dinfo->min_size.width = INT_MAX; dinfo->min_size.length = INT_MAX; dinfo->max_size.width = 0; dinfo->max_size.length = 0; media_col_db = ippFindAttribute(dinfo->attrs, "media-col-database", IPP_TAG_BEGIN_COLLECTION); media_attr = ippFindAttribute(dinfo->attrs, "media-supported", IPP_TAG_ZERO); } if (media_col_db) { _ipp_value_t *custom = NULL; /* Custom size range value */ for (i = media_col_db->num_values, val = media_col_db->values; i > 0; i --, val ++) { memset(&mdb, 0, sizeof(mdb)); if ((media_attr = ippFindAttribute(val->collection, "media-size", IPP_TAG_BEGIN_COLLECTION)) != NULL) { ipp_t *media_size = media_attr->values[0].collection; /* media-size collection value */ if ((x_dimension = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER)) != NULL && (y_dimension = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER)) != NULL) { /* * Fixed size... */ mdb.width = x_dimension->values[0].integer; mdb.length = y_dimension->values[0].integer; } else if ((x_dimension = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER)) != NULL && (y_dimension = ippFindAttribute(media_size, "y-dimension", IPP_TAG_RANGE)) != NULL) { /* * Roll limits... */ mdb.width = x_dimension->values[0].integer; mdb.length = y_dimension->values[0].range.upper; } else if (flags != CUPS_MEDIA_FLAGS_READY && (x_dimension = ippFindAttribute(media_size, "x-dimension", IPP_TAG_RANGE)) != NULL && (y_dimension = ippFindAttribute(media_size, "y-dimension", IPP_TAG_RANGE)) != NULL) { /* * Custom size range; save this as the custom size value with default * margins, then continue; we'll capture the real margins below... */ custom = val; dinfo->min_size.width = x_dimension->values[0].range.lower; dinfo->min_size.length = y_dimension->values[0].range.lower; dinfo->min_size.left = dinfo->min_size.right = 635; /* Default 1/4" side margins */ dinfo->min_size.top = dinfo->min_size.bottom = 1270; /* Default 1/2" top/bottom margins */ dinfo->max_size.width = x_dimension->values[0].range.upper; dinfo->max_size.length = y_dimension->values[0].range.upper; dinfo->max_size.left = dinfo->max_size.right = 635; /* Default 1/4" side margins */ dinfo->max_size.top = dinfo->max_size.bottom = 1270; /* Default 1/2" top/bottom margins */ continue; } } if ((media_attr = ippFindAttribute(val->collection, "media-color", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD)) mdb.color = media_attr->values[0].string.text; if ((media_attr = ippFindAttribute(val->collection, "media-info", IPP_TAG_TEXT)) != NULL) mdb.info = media_attr->values[0].string.text; if ((media_attr = ippFindAttribute(val->collection, "media-key", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD)) mdb.key = media_attr->values[0].string.text; if ((media_attr = ippFindAttribute(val->collection, "media-size-name", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD)) mdb.size_name = media_attr->values[0].string.text; if ((media_attr = ippFindAttribute(val->collection, "media-source", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD)) mdb.source = media_attr->values[0].string.text; if ((media_attr = ippFindAttribute(val->collection, "media-type", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD)) mdb.type = media_attr->values[0].string.text; if ((media_attr = ippFindAttribute(val->collection, "media-bottom-margin", IPP_TAG_INTEGER)) != NULL) mdb.bottom = media_attr->values[0].integer; if ((media_attr = ippFindAttribute(val->collection, "media-left-margin", IPP_TAG_INTEGER)) != NULL) mdb.left = media_attr->values[0].integer; if ((media_attr = ippFindAttribute(val->collection, "media-right-margin", IPP_TAG_INTEGER)) != NULL) mdb.right = media_attr->values[0].integer; if ((media_attr = ippFindAttribute(val->collection, "media-top-margin", IPP_TAG_INTEGER)) != NULL) mdb.top = media_attr->values[0].integer; cupsArrayAdd(db, &mdb); } if (custom) { if ((media_attr = ippFindAttribute(custom->collection, "media-bottom-margin", IPP_TAG_INTEGER)) != NULL) { dinfo->min_size.top = dinfo->max_size.top = media_attr->values[0].integer; } if ((media_attr = ippFindAttribute(custom->collection, "media-left-margin", IPP_TAG_INTEGER)) != NULL) { dinfo->min_size.left = dinfo->max_size.left = media_attr->values[0].integer; } if ((media_attr = ippFindAttribute(custom->collection, "media-right-margin", IPP_TAG_INTEGER)) != NULL) { dinfo->min_size.right = dinfo->max_size.right = media_attr->values[0].integer; } if ((media_attr = ippFindAttribute(custom->collection, "media-top-margin", IPP_TAG_INTEGER)) != NULL) { dinfo->min_size.top = dinfo->max_size.top = media_attr->values[0].integer; } } } else if (media_attr && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD)) { memset(&mdb, 0, sizeof(mdb)); mdb.left = mdb.right = 635; /* Default 1/4" side margins */ mdb.top = mdb.bottom = 1270; /* Default 1/2" top/bottom margins */ for (i = media_attr->num_values, val = media_attr->values; i > 0; i --, val ++) { if ((pwg = pwgMediaForPWG(val->string.text)) == NULL) if ((pwg = pwgMediaForLegacy(val->string.text)) == NULL) { DEBUG_printf(("3cups_create_media_db: Ignoring unknown size '%s'.", val->string.text)); continue; } mdb.width = pwg->width; mdb.length = pwg->length; if (flags != CUPS_MEDIA_FLAGS_READY && !strncmp(val->string.text, "custom_min_", 11)) { mdb.size_name = NULL; dinfo->min_size = mdb; } else if (flags != CUPS_MEDIA_FLAGS_READY && !strncmp(val->string.text, "custom_max_", 11)) { mdb.size_name = NULL; dinfo->max_size = mdb; } else { mdb.size_name = val->string.text; cupsArrayAdd(db, &mdb); } } } } /* * 'cups_free_media_cb()' - Free a media entry. */ static void cups_free_media_db( _cups_media_db_t *mdb) /* I - Media entry to free */ { if (mdb->color) _cupsStrFree(mdb->color); if (mdb->key) _cupsStrFree(mdb->key); if (mdb->info) _cupsStrFree(mdb->info); if (mdb->size_name) _cupsStrFree(mdb->size_name); if (mdb->source) _cupsStrFree(mdb->source); if (mdb->type) _cupsStrFree(mdb->type); free(mdb); } /* * 'cups_get_media_db()' - Lookup the media entry for a given size. */ static int /* O - 1 on match, 0 on failure */ cups_get_media_db(http_t *http, /* I - Connection to destination */ cups_dinfo_t *dinfo, /* I - Destination information */ pwg_media_t *pwg, /* I - PWG media info */ unsigned flags, /* I - Media matching flags */ cups_size_t *size) /* O - Media size/margin/name info */ { cups_array_t *db; /* Which media database to query */ _cups_media_db_t *mdb, /* Current media database entry */ *best = NULL, /* Best matching entry */ key; /* Search key */ /* * Create the media database as needed... */ if (flags & CUPS_MEDIA_FLAGS_READY) { cups_update_ready(http, dinfo); db = dinfo->ready_db; } else { if (!dinfo->media_db) cups_create_media_db(dinfo, CUPS_MEDIA_FLAGS_DEFAULT); db = dinfo->media_db; } /* * Find a match... */ memset(&key, 0, sizeof(key)); key.width = pwg->width; key.length = pwg->length; if ((mdb = cupsArrayFind(db, &key)) != NULL) { /* * Found an exact match, let's figure out the best margins for the flags * supplied... */ best = mdb; if (flags & CUPS_MEDIA_FLAGS_BORDERLESS) { /* * Look for the smallest margins... */ if (best->left != 0 || best->right != 0 || best->top != 0 || best->bottom != 0) { for (mdb = (_cups_media_db_t *)cupsArrayNext(db); mdb && !cups_compare_media_db(mdb, &key); mdb = (_cups_media_db_t *)cupsArrayNext(db)) { if (mdb->left <= best->left && mdb->right <= best->right && mdb->top <= best->top && mdb->bottom <= best->bottom) { best = mdb; if (mdb->left == 0 && mdb->right == 0 && mdb->bottom == 0 && mdb->top == 0) break; } } } /* * If we need an exact match, return no-match if the size is not * borderless. */ if ((flags & CUPS_MEDIA_FLAGS_EXACT) && (best->left || best->right || best->top || best->bottom)) return (0); } else if (flags & CUPS_MEDIA_FLAGS_DUPLEX) { /* * Look for the largest margins... */ for (mdb = (_cups_media_db_t *)cupsArrayNext(db); mdb && !cups_compare_media_db(mdb, &key); mdb = (_cups_media_db_t *)cupsArrayNext(db)) { if (mdb->left >= best->left && mdb->right >= best->right && mdb->top >= best->top && mdb->bottom >= best->bottom && (mdb->bottom != best->bottom || mdb->left != best->left || mdb->right != best->right || mdb->top != best->top)) best = mdb; } } else { /* * Look for the smallest non-zero margins... */ for (mdb = (_cups_media_db_t *)cupsArrayNext(db); mdb && !cups_compare_media_db(mdb, &key); mdb = (_cups_media_db_t *)cupsArrayNext(db)) { if (((mdb->left > 0 && mdb->left <= best->left) || best->left == 0) && ((mdb->right > 0 && mdb->right <= best->right) || best->right == 0) && ((mdb->top > 0 && mdb->top <= best->top) || best->top == 0) && ((mdb->bottom > 0 && mdb->bottom <= best->bottom) || best->bottom == 0) && (mdb->bottom != best->bottom || mdb->left != best->left || mdb->right != best->right || mdb->top != best->top)) best = mdb; } } } else if (flags & CUPS_MEDIA_FLAGS_EXACT) { /* * See if we can do this as a custom size... */ if (pwg->width < dinfo->min_size.width || pwg->width > dinfo->max_size.width || pwg->length < dinfo->min_size.length || pwg->length > dinfo->max_size.length) return (0); /* Out of range */ if ((flags & CUPS_MEDIA_FLAGS_BORDERLESS) && (dinfo->min_size.left > 0 || dinfo->min_size.right > 0 || dinfo->min_size.top > 0 || dinfo->min_size.bottom > 0)) return (0); /* Not borderless */ key.size_name = (char *)pwg->pwg; key.bottom = dinfo->min_size.bottom; key.left = dinfo->min_size.left; key.right = dinfo->min_size.right; key.top = dinfo->min_size.top; best = &key; } else if (pwg->width >= dinfo->min_size.width && pwg->width <= dinfo->max_size.width && pwg->length >= dinfo->min_size.length && pwg->length <= dinfo->max_size.length) { /* * Map to custom size... */ key.size_name = (char *)pwg->pwg; key.bottom = dinfo->min_size.bottom; key.left = dinfo->min_size.left; key.right = dinfo->min_size.right; key.top = dinfo->min_size.top; best = &key; } else { /* * Find a close size... */ for (mdb = (_cups_media_db_t *)cupsArrayFirst(db); mdb; mdb = (_cups_media_db_t *)cupsArrayNext(db)) if (cups_is_close_media_db(mdb, &key)) break; if (!mdb) return (0); best = mdb; if (flags & CUPS_MEDIA_FLAGS_BORDERLESS) { /* * Look for the smallest margins... */ if (best->left != 0 || best->right != 0 || best->top != 0 || best->bottom != 0) { for (mdb = (_cups_media_db_t *)cupsArrayNext(db); mdb && cups_is_close_media_db(mdb, &key); mdb = (_cups_media_db_t *)cupsArrayNext(db)) { if (mdb->left <= best->left && mdb->right <= best->right && mdb->top <= best->top && mdb->bottom <= best->bottom && (mdb->bottom != best->bottom || mdb->left != best->left || mdb->right != best->right || mdb->top != best->top)) { best = mdb; if (mdb->left == 0 && mdb->right == 0 && mdb->bottom == 0 && mdb->top == 0) break; } } } } else if (flags & CUPS_MEDIA_FLAGS_DUPLEX) { /* * Look for the largest margins... */ for (mdb = (_cups_media_db_t *)cupsArrayNext(db); mdb && cups_is_close_media_db(mdb, &key); mdb = (_cups_media_db_t *)cupsArrayNext(db)) { if (mdb->left >= best->left && mdb->right >= best->right && mdb->top >= best->top && mdb->bottom >= best->bottom && (mdb->bottom != best->bottom || mdb->left != best->left || mdb->right != best->right || mdb->top != best->top)) best = mdb; } } else { /* * Look for the smallest non-zero margins... */ for (mdb = (_cups_media_db_t *)cupsArrayNext(db); mdb && cups_is_close_media_db(mdb, &key); mdb = (_cups_media_db_t *)cupsArrayNext(db)) { if (((mdb->left > 0 && mdb->left <= best->left) || best->left == 0) && ((mdb->right > 0 && mdb->right <= best->right) || best->right == 0) && ((mdb->top > 0 && mdb->top <= best->top) || best->top == 0) && ((mdb->bottom > 0 && mdb->bottom <= best->bottom) || best->bottom == 0) && (mdb->bottom != best->bottom || mdb->left != best->left || mdb->right != best->right || mdb->top != best->top)) best = mdb; } } } if (best) { /* * Return the matching size... */ if (best->size_name) strlcpy(size->media, best->size_name, sizeof(size->media)); else if (best->key) strlcpy(size->media, best->key, sizeof(size->media)); else strlcpy(size->media, pwg->pwg, sizeof(size->media)); size->width = best->width; size->length = best->length; size->bottom = best->bottom; size->left = best->left; size->right = best->right; size->top = best->top; return (1); } return (0); } /* * 'cups_is_close_media_db()' - Compare two media entries to see if they are * close to the same size. * * Currently we use 5 points (from PostScript) as the matching range... */ static int /* O - 1 if the sizes are close */ cups_is_close_media_db( _cups_media_db_t *a, /* I - First media entries */ _cups_media_db_t *b) /* I - Second media entries */ { int dwidth, /* Difference in width */ dlength; /* Difference in length */ dwidth = a->width - b->width; dlength = a->length - b->length; return (dwidth >= -176 && dwidth <= 176 && dlength >= -176 && dlength <= 176); } /* * 'cups_test_constraints()' - Test constraints. * * TODO: STR #4096 - Need to properly support media-col contraints... */ static cups_array_t * /* O - Active constraints */ cups_test_constraints( cups_dinfo_t *dinfo, /* I - Destination information */ const char *new_option, /* I - Newly selected option */ const char *new_value, /* I - Newly selected value */ int num_options, /* I - Number of options */ cups_option_t *options, /* I - Options */ int *num_conflicts, /* O - Number of conflicting options */ cups_option_t **conflicts) /* O - Conflicting options */ { int i, /* Looping var */ match; /* Value matches? */ int num_matching; /* Number of matching options */ cups_option_t *matching; /* Matching options */ _cups_dconstres_t *c; /* Current constraint */ cups_array_t *active = NULL; /* Active constraints */ ipp_attribute_t *attr; /* Current attribute */ _ipp_value_t *attrval; /* Current attribute value */ const char *value; /* Current value */ char temp[1024]; /* Temporary string */ int int_value; /* Integer value */ int xres_value, /* Horizontal resolution */ yres_value; /* Vertical resolution */ ipp_res_t units_value; /* Resolution units */ for (c = (_cups_dconstres_t *)cupsArrayFirst(dinfo->constraints); c; c = (_cups_dconstres_t *)cupsArrayNext(dinfo->constraints)) { num_matching = 0; matching = NULL; for (attr = ippFirstAttribute(c->collection); attr; attr = ippNextAttribute(c->collection)) { if (attr->value_tag == IPP_TAG_BEGIN_COLLECTION) break; /* TODO: STR #4096 */ /* * Get the value for the current attribute in the constraint... */ if (new_option && new_value && !strcmp(attr->name, new_option)) value = new_value; else if ((value = cupsGetOption(attr->name, num_options, options)) == NULL) value = cupsGetOption(attr->name, dinfo->num_defaults, dinfo->defaults); if (!value) { /* * Not set so this constraint does not apply... */ break; } match = 0; switch (attr->value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : int_value = atoi(value); for (i = attr->num_values, attrval = attr->values; i > 0; i --, attrval ++) { if (attrval->integer == int_value) { match = 1; break; } } break; case IPP_TAG_BOOLEAN : int_value = !strcmp(value, "true"); for (i = attr->num_values, attrval = attr->values; i > 0; i --, attrval ++) { if (attrval->boolean == int_value) { match = 1; break; } } break; case IPP_TAG_RANGE : int_value = atoi(value); for (i = attr->num_values, attrval = attr->values; i > 0; i --, attrval ++) { if (int_value >= attrval->range.lower && int_value <= attrval->range.upper) { match = 1; break; } } break; case IPP_TAG_RESOLUTION : if (sscanf(value, "%dx%d%15s", &xres_value, &yres_value, temp) != 3) { if (sscanf(value, "%d%15s", &xres_value, temp) != 2) break; yres_value = xres_value; } if (!strcmp(temp, "dpi")) units_value = IPP_RES_PER_INCH; else if (!strcmp(temp, "dpc") || !strcmp(temp, "dpcm")) units_value = IPP_RES_PER_CM; else break; for (i = attr->num_values, attrval = attr->values; i > 0; i --, attrval ++) { if (attrval->resolution.xres == xres_value && attrval->resolution.yres == yres_value && attrval->resolution.units == units_value) { match = 1; break; } } break; case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_CHARSET : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_MIMETYPE : case IPP_TAG_LANGUAGE : case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : for (i = attr->num_values, attrval = attr->values; i > 0; i --, attrval ++) { if (!strcmp(attrval->string.text, value)) { match = 1; break; } } break; default : break; } if (!match) break; num_matching = cupsAddOption(attr->name, value, num_matching, &matching); } if (!attr) { if (!active) active = cupsArrayNew(NULL, NULL); cupsArrayAdd(active, c); if (num_conflicts && conflicts) { cups_option_t *moption; /* Matching option */ for (i = num_matching, moption = matching; i > 0; i --, moption ++) *num_conflicts = cupsAddOption(moption->name, moption->value, *num_conflicts, conflicts); } } cupsFreeOptions(num_matching, matching); } return (active); } /* * 'cups_update_ready()' - Update xxx-ready attributes for the printer. */ static void cups_update_ready(http_t *http, /* I - Connection to destination */ cups_dinfo_t *dinfo) /* I - Destination information */ { ipp_t *request; /* Get-Printer-Attributes request */ static const char * const pattrs[] = /* Printer attributes we want */ { "finishings-col-ready", "finishings-ready", "job-finishings-col-ready", "job-finishings-ready", "media-col-ready", "media-ready" }; /* * Don't update more than once every 30 seconds... */ if ((time(NULL) - dinfo->ready_time) < _CUPS_MEDIA_READY_TTL) return; /* * Free any previous results... */ if (dinfo->cached_flags & CUPS_MEDIA_FLAGS_READY) { cupsArrayDelete(dinfo->cached_db); dinfo->cached_db = NULL; dinfo->cached_flags = CUPS_MEDIA_FLAGS_DEFAULT; } ippDelete(dinfo->ready_attrs); dinfo->ready_attrs = NULL; cupsArrayDelete(dinfo->ready_db); dinfo->ready_db = NULL; /* * Query the xxx-ready values... */ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); ippSetVersion(request, dinfo->version / 10, dinfo->version % 10); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, dinfo->uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddStrings(request, IPP_TAG_OPERATION, IPP_CONST_TAG(IPP_TAG_KEYWORD), "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs); dinfo->ready_attrs = cupsDoRequest(http, request, dinfo->resource); /* * Update the ready media database... */ cups_create_media_db(dinfo, CUPS_MEDIA_FLAGS_READY); /* * Update last lookup time and return... */ dinfo->ready_time = time(NULL); } cups-2.2.7/cups/dest.c000664 000765 000024 00000365714 13255074424 015250 0ustar00msweetstaff000000 000000 /* * User-defined destination (and option) support for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include #ifdef HAVE_NOTIFY_H # include #endif /* HAVE_NOTIFY_H */ #ifdef HAVE_POLL # include #endif /* HAVE_POLL */ #ifdef HAVE_DNSSD # include #endif /* HAVE_DNSSD */ #ifdef HAVE_AVAHI # include # include # include # include # include # include #define kDNSServiceMaxDomainName AVAHI_DOMAIN_NAME_MAX #endif /* HAVE_AVAHI */ /* * Constants... */ #ifdef __APPLE__ # if !TARGET_OS_IOS # include # define _CUPS_LOCATION_DEFAULTS 1 # endif /* !TARGET_OS_IOS */ # define kCUPSPrintingPrefs CFSTR("org.cups.PrintingPrefs") # define kDefaultPaperIDKey CFSTR("DefaultPaperID") # define kLastUsedPrintersKey CFSTR("LastUsedPrinters") # define kLocationNetworkKey CFSTR("Network") # define kLocationPrinterIDKey CFSTR("PrinterID") # define kUseLastPrinter CFSTR("UseLastPrinter") #endif /* __APPLE__ */ #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) # define _CUPS_DNSSD_GET_DESTS 250 /* Milliseconds for cupsGetDests */ # define _CUPS_DNSSD_MAXTIME 50 /* Milliseconds for maximum quantum of time */ #else # define _CUPS_DNSSD_GET_DESTS 0 /* Milliseconds for cupsGetDests */ #endif /* HAVE_DNSSD || HAVE_AVAHI */ /* * Types... */ #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) typedef enum _cups_dnssd_state_e /* Enumerated device state */ { _CUPS_DNSSD_NEW, _CUPS_DNSSD_QUERY, _CUPS_DNSSD_PENDING, _CUPS_DNSSD_ACTIVE, _CUPS_DNSSD_LOCAL, _CUPS_DNSSD_INCOMPATIBLE, _CUPS_DNSSD_ERROR } _cups_dnssd_state_t; typedef struct _cups_dnssd_data_s /* Enumeration data */ { # ifdef HAVE_DNSSD DNSServiceRef main_ref; /* Main service reference */ # else /* HAVE_AVAHI */ AvahiSimplePoll *simple_poll; /* Polling interface */ AvahiClient *client; /* Client information */ int got_data; /* Did we get data? */ int browsers; /* How many browsers are running? */ # endif /* HAVE_DNSSD */ cups_dest_cb_t cb; /* Callback */ void *user_data; /* User data pointer */ cups_ptype_t type, /* Printer type filter */ mask; /* Printer type mask */ cups_array_t *devices; /* Devices found so far */ } _cups_dnssd_data_t; typedef struct _cups_dnssd_device_s /* Enumerated device */ { _cups_dnssd_state_t state; /* State of device listing */ # ifdef HAVE_DNSSD DNSServiceRef ref; /* Service reference for query */ # else /* HAVE_AVAHI */ AvahiRecordBrowser *ref; /* Browser for query */ # endif /* HAVE_DNSSD */ char *fullName, /* Full name */ *regtype, /* Registration type */ *domain; /* Domain name */ cups_ptype_t type; /* Device registration type */ cups_dest_t dest; /* Destination record */ } _cups_dnssd_device_t; typedef struct _cups_dnssd_resolve_s /* Data for resolving URI */ { int *cancel; /* Pointer to "cancel" variable */ struct timeval end_time; /* Ending time */ } _cups_dnssd_resolve_t; #endif /* HAVE_DNSSD */ typedef struct _cups_getdata_s { int num_dests; /* Number of destinations */ cups_dest_t *dests; /* Destinations */ } _cups_getdata_t; typedef struct _cups_namedata_s { const char *name; /* Named destination */ cups_dest_t *dest; /* Destination */ } _cups_namedata_t; /* * Local functions... */ #if _CUPS_LOCATION_DEFAULTS static CFArrayRef appleCopyLocations(void); static CFStringRef appleCopyNetwork(void); #endif /* _CUPS_LOCATION_DEFAULTS */ #ifdef __APPLE__ static char *appleGetPaperSize(char *name, size_t namesize); #endif /* __APPLE__ */ #if _CUPS_LOCATION_DEFAULTS static CFStringRef appleGetPrinter(CFArrayRef locations, CFStringRef network, CFIndex *locindex); #endif /* _CUPS_LOCATION_DEFAULTS */ static cups_dest_t *cups_add_dest(const char *name, const char *instance, int *num_dests, cups_dest_t **dests); #ifdef __BLOCKS__ static int cups_block_cb(cups_dest_block_t block, unsigned flags, cups_dest_t *dest); #endif /* __BLOCKS__ */ static int cups_compare_dests(cups_dest_t *a, cups_dest_t *b); #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) # ifdef HAVE_DNSSD static void cups_dnssd_browse_cb(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *serviceName, const char *regtype, const char *replyDomain, void *context); # else /* HAVE_AVAHI */ static void cups_dnssd_browse_cb(AvahiServiceBrowser *browser, AvahiIfIndex interface, AvahiProtocol protocol, AvahiBrowserEvent event, const char *serviceName, const char *regtype, const char *replyDomain, AvahiLookupResultFlags flags, void *context); static void cups_dnssd_client_cb(AvahiClient *client, AvahiClientState state, void *context); # endif /* HAVE_DNSSD */ static int cups_dnssd_compare_devices(_cups_dnssd_device_t *a, _cups_dnssd_device_t *b); static void cups_dnssd_free_device(_cups_dnssd_device_t *device, _cups_dnssd_data_t *data); static _cups_dnssd_device_t * cups_dnssd_get_device(_cups_dnssd_data_t *data, const char *serviceName, const char *regtype, const char *replyDomain); # ifdef HAVE_DNSSD static void cups_dnssd_local_cb(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *serviceName, const char *regtype, const char *replyDomain, void *context); static void cups_dnssd_query_cb(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *fullName, uint16_t rrtype, uint16_t rrclass, uint16_t rdlen, const void *rdata, uint32_t ttl, void *context); # else /* HAVE_AVAHI */ static int cups_dnssd_poll_cb(struct pollfd *pollfds, unsigned int num_pollfds, int timeout, void *context); static void cups_dnssd_query_cb(AvahiRecordBrowser *browser, AvahiIfIndex interface, AvahiProtocol protocol, AvahiBrowserEvent event, const char *name, uint16_t rrclass, uint16_t rrtype, const void *rdata, size_t rdlen, AvahiLookupResultFlags flags, void *context); # endif /* HAVE_DNSSD */ static const char *cups_dnssd_resolve(cups_dest_t *dest, const char *uri, int msec, int *cancel, cups_dest_cb_t cb, void *user_data); static int cups_dnssd_resolve_cb(void *context); static void cups_dnssd_unquote(char *dst, const char *src, size_t dstsize); static int cups_elapsed(struct timeval *t); #endif /* HAVE_DNSSD || HAVE_AVAHI */ static int cups_enum_dests(http_t *http, unsigned flags, int msec, int *cancel, cups_ptype_t type, cups_ptype_t mask, cups_dest_cb_t cb, void *user_data); static int cups_find_dest(const char *name, const char *instance, int num_dests, cups_dest_t *dests, int prev, int *rdiff); static int cups_get_cb(_cups_getdata_t *data, unsigned flags, cups_dest_t *dest); static char *cups_get_default(const char *filename, char *namebuf, size_t namesize, const char **instance); static int cups_get_dests(const char *filename, const char *match_name, const char *match_inst, int user_default_set, int num_dests, cups_dest_t **dests); static char *cups_make_string(ipp_attribute_t *attr, char *buffer, size_t bufsize); static int cups_name_cb(_cups_namedata_t *data, unsigned flags, cups_dest_t *dest); static void cups_queue_name(char *name, const char *serviceName, size_t namesize); /* * 'cupsAddDest()' - Add a destination to the list of destinations. * * This function cannot be used to add a new class or printer queue, * it only adds a new container of saved options for the named * destination or instance. * * If the named destination already exists, the destination list is * returned unchanged. Adding a new instance of a destination creates * a copy of that destination's options. * * Use the @link cupsSaveDests@ function to save the updated list of * destinations to the user's lpoptions file. */ int /* O - New number of destinations */ cupsAddDest(const char *name, /* I - Destination name */ const char *instance, /* I - Instance name or @code NULL@ for none/primary */ int num_dests, /* I - Number of destinations */ cups_dest_t **dests) /* IO - Destinations */ { int i; /* Looping var */ cups_dest_t *dest; /* Destination pointer */ cups_dest_t *parent = NULL; /* Parent destination */ cups_option_t *doption, /* Current destination option */ *poption; /* Current parent option */ if (!name || !dests) return (0); if (!cupsGetDest(name, instance, num_dests, *dests)) { if (instance && !cupsGetDest(name, NULL, num_dests, *dests)) return (num_dests); if ((dest = cups_add_dest(name, instance, &num_dests, dests)) == NULL) return (num_dests); /* * Find the base dest again now the array has been realloc'd. */ parent = cupsGetDest(name, NULL, num_dests, *dests); if (instance && parent && parent->num_options > 0) { /* * Copy options from parent... */ dest->options = calloc(sizeof(cups_option_t), (size_t)parent->num_options); if (dest->options) { dest->num_options = parent->num_options; for (i = dest->num_options, doption = dest->options, poption = parent->options; i > 0; i --, doption ++, poption ++) { doption->name = _cupsStrRetain(poption->name); doption->value = _cupsStrRetain(poption->value); } } } } return (num_dests); } #ifdef __APPLE__ /* * '_cupsAppleCopyDefaultPaperID()' - Get the default paper ID. */ CFStringRef /* O - Default paper ID */ _cupsAppleCopyDefaultPaperID(void) { return (CFPreferencesCopyAppValue(kDefaultPaperIDKey, kCUPSPrintingPrefs)); } /* * '_cupsAppleCopyDefaultPrinter()' - Get the default printer at this location. */ CFStringRef /* O - Default printer name */ _cupsAppleCopyDefaultPrinter(void) { # if _CUPS_LOCATION_DEFAULTS CFStringRef network; /* Network location */ CFArrayRef locations; /* Location array */ CFStringRef locprinter; /* Current printer */ /* * Use location-based defaults only if "use last printer" is selected in the * system preferences... */ if (!_cupsAppleGetUseLastPrinter()) { DEBUG_puts("1_cupsAppleCopyDefaultPrinter: Not using last printer as " "default."); return (NULL); } /* * Get the current location... */ if ((network = appleCopyNetwork()) == NULL) { DEBUG_puts("1_cupsAppleCopyDefaultPrinter: Unable to get current " "network."); return (NULL); } /* * Lookup the network in the preferences... */ if ((locations = appleCopyLocations()) == NULL) { /* * Missing or bad location array, so no location-based default... */ DEBUG_puts("1_cupsAppleCopyDefaultPrinter: Missing or bad last used " "printer array."); CFRelease(network); return (NULL); } DEBUG_printf(("1_cupsAppleCopyDefaultPrinter: Got locations, %d entries.", (int)CFArrayGetCount(locations))); if ((locprinter = appleGetPrinter(locations, network, NULL)) != NULL) CFRetain(locprinter); CFRelease(network); CFRelease(locations); return (locprinter); # else return (NULL); # endif /* _CUPS_LOCATION_DEFAULTS */ } /* * '_cupsAppleGetUseLastPrinter()' - Get whether to use the last used printer. */ int /* O - 1 to use last printer, 0 otherwise */ _cupsAppleGetUseLastPrinter(void) { Boolean uselast, /* Use last printer preference value */ uselast_set; /* Valid is set? */ if (getenv("CUPS_DISABLE_APPLE_DEFAULT")) return (0); uselast = CFPreferencesGetAppBooleanValue(kUseLastPrinter, kCUPSPrintingPrefs, &uselast_set); if (!uselast_set) return (1); else return (uselast); } /* * '_cupsAppleSetDefaultPaperID()' - Set the default paper id. */ void _cupsAppleSetDefaultPaperID( CFStringRef name) /* I - New paper ID */ { CFPreferencesSetAppValue(kDefaultPaperIDKey, name, kCUPSPrintingPrefs); CFPreferencesAppSynchronize(kCUPSPrintingPrefs); # ifdef HAVE_NOTIFY_POST notify_post("com.apple.printerPrefsChange"); # endif /* HAVE_NOTIFY_POST */ } /* * '_cupsAppleSetDefaultPrinter()' - Set the default printer for this location. */ void _cupsAppleSetDefaultPrinter( CFStringRef name) /* I - Default printer/class name */ { # if _CUPS_LOCATION_DEFAULTS CFStringRef network; /* Current network */ CFArrayRef locations; /* Old locations array */ CFIndex locindex; /* Index in locations array */ CFStringRef locprinter; /* Current printer */ CFMutableArrayRef newlocations; /* New locations array */ CFMutableDictionaryRef newlocation; /* New location */ /* * Get the current location... */ if ((network = appleCopyNetwork()) == NULL) { DEBUG_puts("1_cupsAppleSetDefaultPrinter: Unable to get current network..."); return; } /* * Lookup the network in the preferences... */ if ((locations = appleCopyLocations()) != NULL) locprinter = appleGetPrinter(locations, network, &locindex); else { locprinter = NULL; locindex = -1; } if (!locprinter || CFStringCompare(locprinter, name, 0) != kCFCompareEqualTo) { /* * Need to change the locations array... */ if (locations) { newlocations = CFArrayCreateMutableCopy(kCFAllocatorDefault, 0, locations); if (locprinter) CFArrayRemoveValueAtIndex(newlocations, locindex); } else newlocations = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); newlocation = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); if (newlocation && newlocations) { /* * Put the new location at the front of the array... */ CFDictionaryAddValue(newlocation, kLocationNetworkKey, network); CFDictionaryAddValue(newlocation, kLocationPrinterIDKey, name); CFArrayInsertValueAtIndex(newlocations, 0, newlocation); /* * Limit the number of locations to 10... */ while (CFArrayGetCount(newlocations) > 10) CFArrayRemoveValueAtIndex(newlocations, 10); /* * Push the changes out... */ CFPreferencesSetAppValue(kLastUsedPrintersKey, newlocations, kCUPSPrintingPrefs); CFPreferencesAppSynchronize(kCUPSPrintingPrefs); # ifdef HAVE_NOTIFY_POST notify_post("com.apple.printerPrefsChange"); # endif /* HAVE_NOTIFY_POST */ } if (newlocations) CFRelease(newlocations); if (newlocation) CFRelease(newlocation); } if (locations) CFRelease(locations); CFRelease(network); # else (void)name; # endif /* _CUPS_LOCATION_DEFAULTS */ } /* * '_cupsAppleSetUseLastPrinter()' - Set whether to use the last used printer. */ void _cupsAppleSetUseLastPrinter( int uselast) /* O - 1 to use last printer, 0 otherwise */ { CFPreferencesSetAppValue(kUseLastPrinter, uselast ? kCFBooleanTrue : kCFBooleanFalse, kCUPSPrintingPrefs); CFPreferencesAppSynchronize(kCUPSPrintingPrefs); # ifdef HAVE_NOTIFY_POST notify_post("com.apple.printerPrefsChange"); # endif /* HAVE_NOTIFY_POST */ } #endif /* __APPLE__ */ /* * 'cupsConnectDest()' - Open a conection to the destination. * * Connect to the destination, returning a new @code http_t@ connection object * and optionally the resource path to use for the destination. These calls * will block until a connection is made, the timeout expires, the integer * pointed to by "cancel" is non-zero, or the callback function (or block) * returns 0. The caller is responsible for calling @link httpClose@ on the * returned connection. * * Starting with CUPS 2.2.4, the caller can pass @code CUPS_DEST_FLAGS_DEVICE@ * for the "flags" argument to connect directly to the device associated with * the destination. Otherwise, the connection is made to the CUPS scheduler * associated with the destination. * * @since CUPS 1.6/macOS 10.8@ */ http_t * /* O - Connection to destination or @code NULL@ */ cupsConnectDest( cups_dest_t *dest, /* I - Destination */ unsigned flags, /* I - Connection flags */ int msec, /* I - Timeout in milliseconds */ int *cancel, /* I - Pointer to "cancel" variable */ char *resource, /* I - Resource buffer */ size_t resourcesize, /* I - Size of resource buffer */ cups_dest_cb_t cb, /* I - Callback function */ void *user_data) /* I - User data pointer */ { const char *uri; /* Printer URI */ char scheme[32], /* URI scheme */ userpass[256], /* Username and password (unused) */ hostname[256], /* Hostname */ tempresource[1024]; /* Temporary resource buffer */ int port; /* Port number */ char portstr[16]; /* Port number string */ http_encryption_t encryption; /* Encryption to use */ http_addrlist_t *addrlist; /* Address list for server */ http_t *http; /* Connection to server */ DEBUG_printf(("cupsConnectDest(dest=%p, flags=0x%x, msec=%d, cancel=%p(%d), resource=\"%s\", resourcesize=" CUPS_LLFMT ", cb=%p, user_data=%p)", (void *)dest, flags, msec, (void *)cancel, cancel ? *cancel : -1, resource, CUPS_LLCAST resourcesize, (void *)cb, user_data)); /* * Range check input... */ if (!dest) { if (resource) *resource = '\0'; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (NULL); } if (!resource || resourcesize < 1) { resource = tempresource; resourcesize = sizeof(tempresource); } /* * Grab the printer URI... */ if (flags & CUPS_DEST_FLAGS_DEVICE) { if ((uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL) { #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) if (strstr(uri, "._tcp")) uri = cups_dnssd_resolve(dest, uri, msec, cancel, cb, user_data); #endif /* HAVE_DNSSD || HAVE_AVAHI */ } } else if ((uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options)) == NULL) { if ((uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL) { #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) if (strstr(uri, "._tcp")) uri = cups_dnssd_resolve(dest, uri, msec, cancel, cb, user_data); #endif /* HAVE_DNSSD || HAVE_AVAHI */ } if (uri) uri = _cupsCreateDest(dest->name, cupsGetOption("printer-info", dest->num_options, dest->options), NULL, uri, tempresource, sizeof(tempresource)); if (uri) { dest->num_options = cupsAddOption("printer-uri-supported", uri, dest->num_options, &dest->options); uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options); } } if (!uri) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0); if (cb) (*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_ERROR, dest); return (NULL); } if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, (int)resourcesize) < HTTP_URI_STATUS_OK) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad printer-uri."), 1); if (cb) (*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_ERROR, dest); return (NULL); } /* * Lookup the address for the server... */ if (cb) (*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_RESOLVING, dest); snprintf(portstr, sizeof(portstr), "%d", port); if ((addrlist = httpAddrGetList(hostname, AF_UNSPEC, portstr)) == NULL) { if (cb) (*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_ERROR, dest); return (NULL); } if (cancel && *cancel) { httpAddrFreeList(addrlist); if (cb) (*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_CANCELED, dest); return (NULL); } /* * Create the HTTP object pointing to the server referenced by the URI... */ if (!strcmp(scheme, "ipps") || port == 443) encryption = HTTP_ENCRYPTION_ALWAYS; else encryption = HTTP_ENCRYPTION_IF_REQUESTED; http = httpConnect2(hostname, port, addrlist, AF_UNSPEC, encryption, 1, 0, NULL); httpAddrFreeList(addrlist); /* * Connect if requested... */ if (flags & CUPS_DEST_FLAGS_UNCONNECTED) { if (cb) (*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED, dest); } else { if (cb) (*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_CONNECTING, dest); if (!httpReconnect2(http, msec, cancel) && cb) { if (cancel && *cancel) (*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_CONNECTING, dest); else (*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_ERROR, dest); } else if (cb) (*cb)(user_data, CUPS_DEST_FLAGS_NONE, dest); } return (http); } #ifdef __BLOCKS__ /* * 'cupsConnectDestBlock()' - Open a connection to the destination. * * Connect to the destination, returning a new @code http_t@ connection object * and optionally the resource path to use for the destination. These calls * will block until a connection is made, the timeout expires, the integer * pointed to by "cancel" is non-zero, or the block returns 0. The caller is * responsible for calling @link httpClose@ on the returned connection. * * Starting with CUPS 2.2.4, the caller can pass @code CUPS_DEST_FLAGS_DEVICE@ * for the "flags" argument to connect directly to the device associated with * the destination. Otherwise, the connection is made to the CUPS scheduler * associated with the destination. * * @since CUPS 1.6/macOS 10.8@ @exclude all@ */ http_t * /* O - Connection to destination or @code NULL@ */ cupsConnectDestBlock( cups_dest_t *dest, /* I - Destination */ unsigned flags, /* I - Connection flags */ int msec, /* I - Timeout in milliseconds */ int *cancel, /* I - Pointer to "cancel" variable */ char *resource, /* I - Resource buffer */ size_t resourcesize, /* I - Size of resource buffer */ cups_dest_block_t block) /* I - Callback block */ { return (cupsConnectDest(dest, flags, msec, cancel, resource, resourcesize, (cups_dest_cb_t)cups_block_cb, (void *)block)); } #endif /* __BLOCKS__ */ /* * 'cupsCopyDest()' - Copy a destination. * * Make a copy of the destination to an array of destinations (or just a single * copy) - for use with the cupsEnumDests* functions. The caller is responsible * for calling cupsFreeDests() on the returned object(s). * * @since CUPS 1.6/macOS 10.8@ */ int /* O - New number of destinations */ cupsCopyDest(cups_dest_t *dest, /* I - Destination to copy */ int num_dests, /* I - Number of destinations */ cups_dest_t **dests) /* IO - Destination array */ { int i; /* Looping var */ cups_dest_t *new_dest; /* New destination pointer */ cups_option_t *new_option, /* Current destination option */ *option; /* Current parent option */ /* * Range check input... */ if (!dest || num_dests < 0 || !dests) return (num_dests); /* * See if the destination already exists... */ if ((new_dest = cupsGetDest(dest->name, dest->instance, num_dests, *dests)) != NULL) { /* * Protect against copying destination to itself... */ if (new_dest == dest) return (num_dests); /* * Otherwise, free the options... */ cupsFreeOptions(new_dest->num_options, new_dest->options); new_dest->num_options = 0; new_dest->options = NULL; } else new_dest = cups_add_dest(dest->name, dest->instance, &num_dests, dests); if (new_dest) { if ((new_dest->options = calloc(sizeof(cups_option_t), (size_t)dest->num_options)) == NULL) return (cupsRemoveDest(dest->name, dest->instance, num_dests, dests)); new_dest->num_options = dest->num_options; for (i = dest->num_options, option = dest->options, new_option = new_dest->options; i > 0; i --, option ++, new_option ++) { new_option->name = _cupsStrRetain(option->name); new_option->value = _cupsStrRetain(option->value); } } return (num_dests); } /* * '_cupsCreateDest()' - Create a local (temporary) queue. */ char * /* O - Printer URI or @code NULL@ on error */ _cupsCreateDest(const char *name, /* I - Printer name */ const char *info, /* I - Printer description of @code NULL@ */ const char *device_id, /* I - 1284 Device ID or @code NULL@ */ const char *device_uri, /* I - Device URI */ char *uri, /* I - Printer URI buffer */ size_t urisize) /* I - Size of URI buffer */ { http_t *http; /* Connection to server */ ipp_t *request, /* CUPS-Create-Local-Printer request */ *response; /* CUPS-Create-Local-Printer response */ ipp_attribute_t *attr; /* printer-uri-supported attribute */ ipp_pstate_t state = IPP_PSTATE_STOPPED; /* printer-state value */ if (!name || !device_uri || !uri || urisize < 32) return (NULL); if ((http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL)) == NULL) return (NULL); request = ippNewRequest(IPP_OP_CUPS_CREATE_LOCAL_PRINTER); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/"); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_URI, "device-uri", NULL, device_uri); ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-name", NULL, name); if (info) ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info", NULL, info); if (device_id) ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-device-id", NULL, device_id); response = cupsDoRequest(http, request, "/"); if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL) strlcpy(uri, ippGetString(attr, 0, NULL), urisize); else { ippDelete(response); httpClose(http); return (NULL); } if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL) state = (ipp_pstate_t)ippGetInteger(attr, 0); while (state == IPP_PSTATE_STOPPED && cupsLastError() == IPP_STATUS_OK) { sleep(1); ippDelete(response); request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "printer-state"); response = cupsDoRequest(http, request, "/"); if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL) state = (ipp_pstate_t)ippGetInteger(attr, 0); } ippDelete(response); httpClose(http); return (uri); } /* * 'cupsEnumDests()' - Enumerate available destinations with a callback function. * * Destinations are enumerated from one or more sources. The callback function * receives the @code user_data@ pointer and the destination pointer which can * be used as input to the @link cupsCopyDest@ function. The function must * return 1 to continue enumeration or 0 to stop. * * The @code type@ and @code mask@ arguments allow the caller to filter the * destinations that are enumerated. Passing 0 for both will enumerate all * printers. The constant @code CUPS_PRINTER_DISCOVERED@ is used to filter on * destinations that are available but have not yet been added locally. * * Enumeration happens on the current thread and does not return until all * destinations have been enumerated or the callback function returns 0. * * Note: The callback function will likely receive multiple updates for the same * destinations - it is up to the caller to suppress any duplicate destinations. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ cupsEnumDests( unsigned flags, /* I - Enumeration flags */ int msec, /* I - Timeout in milliseconds, -1 for indefinite */ int *cancel, /* I - Pointer to "cancel" variable */ cups_ptype_t type, /* I - Printer type bits */ cups_ptype_t mask, /* I - Mask for printer type bits */ cups_dest_cb_t cb, /* I - Callback function */ void *user_data) /* I - User data */ { return (cups_enum_dests(CUPS_HTTP_DEFAULT, flags, msec, cancel, type, mask, cb, user_data)); } # ifdef __BLOCKS__ /* * 'cupsEnumDestsBlock()' - Enumerate available destinations with a block. * * Destinations are enumerated from one or more sources. The block receives the * @code user_data@ pointer and the destination pointer which can be used as * input to the @link cupsCopyDest@ function. The block must return 1 to * continue enumeration or 0 to stop. * * The @code type@ and @code mask@ arguments allow the caller to filter the * destinations that are enumerated. Passing 0 for both will enumerate all * printers. The constant @code CUPS_PRINTER_DISCOVERED@ is used to filter on * destinations that are available but have not yet been added locally. * * Enumeration happens on the current thread and does not return until all * destinations have been enumerated or the block returns 0. * * Note: The block will likely receive multiple updates for the same * destinations - it is up to the caller to suppress any duplicate destinations. * * @since CUPS 1.6/macOS 10.8@ @exclude all@ */ int /* O - 1 on success, 0 on failure */ cupsEnumDestsBlock( unsigned flags, /* I - Enumeration flags */ int timeout, /* I - Timeout in milliseconds, 0 for indefinite */ int *cancel, /* I - Pointer to "cancel" variable */ cups_ptype_t type, /* I - Printer type bits */ cups_ptype_t mask, /* I - Mask for printer type bits */ cups_dest_block_t block) /* I - Block */ { return (cupsEnumDests(flags, timeout, cancel, type, mask, (cups_dest_cb_t)cups_block_cb, (void *)block)); } # endif /* __BLOCKS__ */ /* * 'cupsFreeDests()' - Free the memory used by the list of destinations. */ void cupsFreeDests(int num_dests, /* I - Number of destinations */ cups_dest_t *dests) /* I - Destinations */ { int i; /* Looping var */ cups_dest_t *dest; /* Current destination */ if (num_dests == 0 || dests == NULL) return; for (i = num_dests, dest = dests; i > 0; i --, dest ++) { _cupsStrFree(dest->name); _cupsStrFree(dest->instance); cupsFreeOptions(dest->num_options, dest->options); } free(dests); } /* * 'cupsGetDest()' - Get the named destination from the list. * * Use the @link cupsEnumDests@ or @link cupsGetDests2@ functions to get a * list of supported destinations for the current user. */ cups_dest_t * /* O - Destination pointer or @code NULL@ */ cupsGetDest(const char *name, /* I - Destination name or @code NULL@ for the default destination */ const char *instance, /* I - Instance name or @code NULL@ */ int num_dests, /* I - Number of destinations */ cups_dest_t *dests) /* I - Destinations */ { int diff, /* Result of comparison */ match; /* Matching index */ if (num_dests <= 0 || !dests) return (NULL); if (!name) { /* * NULL name for default printer. */ while (num_dests > 0) { if (dests->is_default) return (dests); num_dests --; dests ++; } } else { /* * Lookup name and optionally the instance... */ match = cups_find_dest(name, instance, num_dests, dests, -1, &diff); if (!diff) return (dests + match); } return (NULL); } /* * '_cupsGetDestResource()' - Get the resource path and URI for a destination. */ const char * /* O - Printer URI */ _cupsGetDestResource( cups_dest_t *dest, /* I - Destination */ char *resource, /* I - Resource buffer */ size_t resourcesize) /* I - Size of resource buffer */ { const char *uri; /* Printer URI */ char scheme[32], /* URI scheme */ userpass[256], /* Username and password (unused) */ hostname[256]; /* Hostname */ int port; /* Port number */ DEBUG_printf(("_cupsGetDestResource(dest=%p(%s), resource=%p, resourcesize=%d)", (void *)dest, dest->name, (void *)resource, (int)resourcesize)); /* * Range check input... */ if (!dest || !resource || resourcesize < 1) { if (resource) *resource = '\0'; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (NULL); } /* * Grab the printer URI... */ if ((uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options)) == NULL) { if ((uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL) { #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) if (strstr(uri, "._tcp")) uri = cups_dnssd_resolve(dest, uri, 5000, NULL, NULL, NULL); #endif /* HAVE_DNSSD || HAVE_AVAHI */ } if (uri) { DEBUG_printf(("1_cupsGetDestResource: Resolved printer-uri-supported=\"%s\"", uri)); uri = _cupsCreateDest(dest->name, cupsGetOption("printer-info", dest->num_options, dest->options), NULL, uri, resource, resourcesize); } if (uri) { DEBUG_printf(("1_cupsGetDestResource: Local printer-uri-supported=\"%s\"", uri)); dest->num_options = cupsAddOption("printer-uri-supported", uri, dest->num_options, &dest->options); uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options); } else { DEBUG_puts("1_cupsGetDestResource: No printer-uri-supported found."); if (resource) *resource = '\0'; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0); return (NULL); } } else { DEBUG_printf(("1_cupsGetDestResource: printer-uri-supported=\"%s\"", uri)); if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, (int)resourcesize) < HTTP_URI_STATUS_OK) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad printer-uri."), 1); return (NULL); } } DEBUG_printf(("1_cupsGetDestResource: resource=\"%s\"", resource)); return (uri); } /* * 'cupsGetDestWithURI()' - Get a destination associated with a URI. * * "name" is the desired name for the printer. If @code NULL@, a name will be * created using the URI. * * "uri" is the "ipp" or "ipps" URI for the printer. * * @since CUPS 2.0/macOS 10.10@ */ cups_dest_t * /* O - Destination or @code NULL@ */ cupsGetDestWithURI(const char *name, /* I - Desired printer name or @code NULL@ */ const char *uri) /* I - URI for the printer */ { cups_dest_t *dest; /* New destination */ char temp[1024], /* Temporary string */ scheme[256], /* Scheme from URI */ userpass[256], /* Username:password from URI */ hostname[256], /* Hostname from URI */ resource[1024], /* Resource path from URI */ *ptr; /* Pointer into string */ const char *info; /* printer-info string */ int port; /* Port number from URI */ /* * Range check input... */ if (!uri) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (NULL); } if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK || (strncmp(uri, "ipp://", 6) && strncmp(uri, "ipps://", 7))) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad printer-uri."), 1); return (NULL); } if (name) { info = name; } else { /* * Create the name from the URI... */ if (strstr(hostname, "._tcp")) { /* * Use the service instance name... */ if ((ptr = strstr(hostname, "._")) != NULL) *ptr = '\0'; cups_queue_name(temp, hostname, sizeof(temp)); name = temp; info = hostname; } else if (!strncmp(resource, "/classes/", 9)) { snprintf(temp, sizeof(temp), "%s @ %s", resource + 9, hostname); name = resource + 9; info = temp; } else if (!strncmp(resource, "/printers/", 10)) { snprintf(temp, sizeof(temp), "%s @ %s", resource + 10, hostname); name = resource + 10; info = temp; } else { name = hostname; info = hostname; } } /* * Create the destination... */ if ((dest = calloc(1, sizeof(cups_dest_t))) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); return (NULL); } dest->name = _cupsStrAlloc(name); dest->num_options = cupsAddOption("device-uri", uri, dest->num_options, &(dest->options)); dest->num_options = cupsAddOption("printer-info", info, dest->num_options, &(dest->options)); return (dest); } /* * '_cupsGetDests()' - Get destinations from a server. * * "op" is IPP_OP_CUPS_GET_PRINTERS to get a full list, IPP_OP_CUPS_GET_DEFAULT * to get the system-wide default printer, or IPP_OP_GET_PRINTER_ATTRIBUTES for * a known printer. * * "name" is the name of an existing printer and is only used when "op" is * IPP_OP_GET_PRINTER_ATTRIBUTES. * * "dest" is initialized to point to the array of destinations. * * 0 is returned if there are no printers, no default printer, or the named * printer does not exist, respectively. * * Free the memory used by the destination array using the @link cupsFreeDests@ * function. * * Note: On macOS this function also gets the default paper from the system * preferences (~/L/P/org.cups.PrintingPrefs.plist) and includes it in the * options array for each destination that supports it. */ int /* O - Number of destinations */ _cupsGetDests(http_t *http, /* I - Connection to server or * @code CUPS_HTTP_DEFAULT@ */ ipp_op_t op, /* I - IPP operation */ const char *name, /* I - Name of destination */ cups_dest_t **dests, /* IO - Destinations */ cups_ptype_t type, /* I - Printer type bits */ cups_ptype_t mask) /* I - Printer type mask */ { int num_dests = 0; /* Number of destinations */ cups_dest_t *dest; /* Current destination */ ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr; /* Current attribute */ const char *printer_name; /* printer-name attribute */ char uri[1024]; /* printer-uri value */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ #ifdef __APPLE__ char media_default[41]; /* Default paper size */ #endif /* __APPLE__ */ char optname[1024], /* Option name */ value[2048], /* Option value */ *ptr; /* Pointer into name/value */ static const char * const pattrs[] = /* Attributes we're interested in */ { "auth-info-required", "device-uri", "job-sheets-default", "marker-change-time", "marker-colors", "marker-high-levels", "marker-levels", "marker-low-levels", "marker-message", "marker-names", "marker-types", #ifdef __APPLE__ "media-supported", #endif /* __APPLE__ */ "printer-commands", "printer-defaults", "printer-info", "printer-is-accepting-jobs", "printer-is-shared", "printer-is-temporary", "printer-location", "printer-make-and-model", "printer-mandatory-job-attributes", "printer-name", "printer-state", "printer-state-change-time", "printer-state-reasons", "printer-type", "printer-uri-supported" }; DEBUG_printf(("_cupsGetDests(http=%p, op=%x(%s), name=\"%s\", dests=%p, type=%x, mask=%x)", (void *)http, op, ippOpString(op), name, (void *)dests, type, mask)); #ifdef __APPLE__ /* * Get the default paper size... */ appleGetPaperSize(media_default, sizeof(media_default)); DEBUG_printf(("1_cupsGetDests: Default media is '%s'.", media_default)); #endif /* __APPLE__ */ /* * Build a IPP_OP_CUPS_GET_PRINTERS or IPP_OP_GET_PRINTER_ATTRIBUTES request, which * require the following attributes: * * attributes-charset * attributes-natural-language * requesting-user-name * printer-uri [for IPP_OP_GET_PRINTER_ATTRIBUTES] */ request = ippNewRequest(op); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); if (name && op != IPP_OP_CUPS_GET_DEFAULT) { httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", ippPort(), "/printers/%s", name); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); } else if (mask) { ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type", (int)type); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type-mask", (int)mask); } /* * Do the request and get back a response... */ if ((response = cupsDoRequest(http, request, "/")) != NULL) { for (attr = response->attrs; attr != NULL; attr = attr->next) { /* * Skip leading attributes until we hit a printer... */ while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) attr = attr->next; if (attr == NULL) break; /* * Pull the needed attributes from this printer... */ printer_name = NULL; num_options = 0; options = NULL; for (; attr && attr->group_tag == IPP_TAG_PRINTER; attr = attr->next) { if (attr->value_tag != IPP_TAG_INTEGER && attr->value_tag != IPP_TAG_ENUM && attr->value_tag != IPP_TAG_BOOLEAN && attr->value_tag != IPP_TAG_TEXT && attr->value_tag != IPP_TAG_TEXTLANG && attr->value_tag != IPP_TAG_NAME && attr->value_tag != IPP_TAG_NAMELANG && attr->value_tag != IPP_TAG_KEYWORD && attr->value_tag != IPP_TAG_RANGE && attr->value_tag != IPP_TAG_URI) continue; if (!strcmp(attr->name, "auth-info-required") || !strcmp(attr->name, "device-uri") || !strcmp(attr->name, "marker-change-time") || !strcmp(attr->name, "marker-colors") || !strcmp(attr->name, "marker-high-levels") || !strcmp(attr->name, "marker-levels") || !strcmp(attr->name, "marker-low-levels") || !strcmp(attr->name, "marker-message") || !strcmp(attr->name, "marker-names") || !strcmp(attr->name, "marker-types") || !strcmp(attr->name, "printer-commands") || !strcmp(attr->name, "printer-info") || !strcmp(attr->name, "printer-is-shared") || !strcmp(attr->name, "printer-is-temporary") || !strcmp(attr->name, "printer-make-and-model") || !strcmp(attr->name, "printer-mandatory-job-attributes") || !strcmp(attr->name, "printer-state") || !strcmp(attr->name, "printer-state-change-time") || !strcmp(attr->name, "printer-type") || !strcmp(attr->name, "printer-is-accepting-jobs") || !strcmp(attr->name, "printer-location") || !strcmp(attr->name, "printer-state-reasons") || !strcmp(attr->name, "printer-uri-supported")) { /* * Add a printer description attribute... */ num_options = cupsAddOption(attr->name, cups_make_string(attr, value, sizeof(value)), num_options, &options); } #ifdef __APPLE__ else if (!strcmp(attr->name, "media-supported") && media_default[0]) { /* * See if we can set a default media size... */ int i; /* Looping var */ for (i = 0; i < attr->num_values; i ++) if (!_cups_strcasecmp(media_default, attr->values[i].string.text)) { DEBUG_printf(("1_cupsGetDests: Setting media to '%s'.", media_default)); num_options = cupsAddOption("media", media_default, num_options, &options); break; } } #endif /* __APPLE__ */ else if (!strcmp(attr->name, "printer-name") && attr->value_tag == IPP_TAG_NAME) printer_name = attr->values[0].string.text; else if (strncmp(attr->name, "notify-", 7) && strncmp(attr->name, "print-quality-", 14) && (attr->value_tag == IPP_TAG_BOOLEAN || attr->value_tag == IPP_TAG_ENUM || attr->value_tag == IPP_TAG_INTEGER || attr->value_tag == IPP_TAG_KEYWORD || attr->value_tag == IPP_TAG_NAME || attr->value_tag == IPP_TAG_RANGE) && (ptr = strstr(attr->name, "-default")) != NULL) { /* * Add a default option... */ strlcpy(optname, attr->name, sizeof(optname)); optname[ptr - attr->name] = '\0'; if (_cups_strcasecmp(optname, "media") || !cupsGetOption("media", num_options, options)) num_options = cupsAddOption(optname, cups_make_string(attr, value, sizeof(value)), num_options, &options); } } /* * See if we have everything needed... */ if (!printer_name) { cupsFreeOptions(num_options, options); if (attr == NULL) break; else continue; } if ((dest = cups_add_dest(printer_name, NULL, &num_dests, dests)) != NULL) { dest->num_options = num_options; dest->options = options; } else cupsFreeOptions(num_options, options); if (attr == NULL) break; } ippDelete(response); } /* * Return the count... */ return (num_dests); } /* * 'cupsGetDests()' - Get the list of destinations from the default server. * * Starting with CUPS 1.2, the returned list of destinations include the * "printer-info", "printer-is-accepting-jobs", "printer-is-shared", * "printer-make-and-model", "printer-state", "printer-state-change-time", * "printer-state-reasons", "printer-type", and "printer-uri-supported" * attributes as options. * * CUPS 1.4 adds the "marker-change-time", "marker-colors", * "marker-high-levels", "marker-levels", "marker-low-levels", "marker-message", * "marker-names", "marker-types", and "printer-commands" attributes as options. * * CUPS 2.2 adds accessible IPP printers to the list of destinations that can * be used. The "printer-uri-supported" option will be present for those IPP * printers that have been recently used. * * Use the @link cupsFreeDests@ function to free the destination list and * the @link cupsGetDest@ function to find a particular destination. * * @exclude all@ */ int /* O - Number of destinations */ cupsGetDests(cups_dest_t **dests) /* O - Destinations */ { return (cupsGetDests2(CUPS_HTTP_DEFAULT, dests)); } /* * 'cupsGetDests2()' - Get the list of destinations from the specified server. * * Starting with CUPS 1.2, the returned list of destinations include the * "printer-info", "printer-is-accepting-jobs", "printer-is-shared", * "printer-make-and-model", "printer-state", "printer-state-change-time", * "printer-state-reasons", "printer-type", and "printer-uri-supported" * attributes as options. * * CUPS 1.4 adds the "marker-change-time", "marker-colors", * "marker-high-levels", "marker-levels", "marker-low-levels", "marker-message", * "marker-names", "marker-types", and "printer-commands" attributes as options. * * CUPS 2.2 adds accessible IPP printers to the list of destinations that can * be used. The "printer-uri-supported" option will be present for those IPP * printers that have been recently used. * * Use the @link cupsFreeDests@ function to free the destination list and * the @link cupsGetDest@ function to find a particular destination. * * @since CUPS 1.1.21/macOS 10.4@ */ int /* O - Number of destinations */ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ cups_dest_t **dests) /* O - Destinations */ { _cups_getdata_t data; /* Enumeration data */ cups_dest_t *dest; /* Current destination */ const char *home; /* HOME environment variable */ char filename[1024]; /* Local ~/.cups/lpoptions file */ const char *defprinter; /* Default printer */ char name[1024], /* Copy of printer name */ *instance, /* Pointer to instance name */ *user_default; /* User default printer */ int num_reals; /* Number of real queues */ cups_dest_t *reals; /* Real queues */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ DEBUG_printf(("cupsGetDests2(http=%p, dests=%p)", (void *)http, (void *)dests)); /* * Range check the input... */ if (!dests) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad NULL dests pointer"), 1); DEBUG_puts("1cupsGetDests2: NULL dests pointer, returning 0."); return (0); } /* * Connect to the server as needed... */ if (!http) { if ((http = _cupsConnect()) == NULL) { *dests = NULL; return (0); } } /* * Grab the printers and classes... */ data.num_dests = 0; data.dests = NULL; if (!httpAddrLocalhost(httpGetAddress(http))) { /* * When talking to a remote cupsd, just enumerate printers on the remote * cupsd. */ cups_enum_dests(http, 0, _CUPS_DNSSD_GET_DESTS, NULL, 0, CUPS_PRINTER_DISCOVERED, (cups_dest_cb_t)cups_get_cb, &data); } else { /* * When talking to a local cupsd, enumerate both local printers and ones we * can find on the network... */ cups_enum_dests(http, 0, _CUPS_DNSSD_GET_DESTS, NULL, 0, 0, (cups_dest_cb_t)cups_get_cb, &data); } /* * Make a copy of the "real" queues for a later sanity check... */ if (data.num_dests > 0) { num_reals = data.num_dests; reals = calloc((size_t)num_reals, sizeof(cups_dest_t)); if (reals) memcpy(reals, data.dests, (size_t)num_reals * sizeof(cups_dest_t)); else num_reals = 0; } else { num_reals = 0; reals = NULL; } /* * Grab the default destination... */ if ((user_default = _cupsUserDefault(name, sizeof(name))) != NULL) defprinter = name; else if ((defprinter = cupsGetDefault2(http)) != NULL) { strlcpy(name, defprinter, sizeof(name)); defprinter = name; } if (defprinter) { /* * Separate printer and instance name... */ if ((instance = strchr(name, '/')) != NULL) *instance++ = '\0'; /* * Lookup the printer and instance and make it the default... */ if ((dest = cupsGetDest(name, instance, data.num_dests, data.dests)) != NULL) dest->is_default = 1; } else instance = NULL; /* * Load the /etc/cups/lpoptions and ~/.cups/lpoptions files... */ snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot); data.num_dests = cups_get_dests(filename, NULL, NULL, user_default != NULL, data.num_dests, &data.dests); if ((home = getenv("HOME")) != NULL) { snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home); data.num_dests = cups_get_dests(filename, NULL, NULL, user_default != NULL, data.num_dests, &data.dests); } /* * Validate the current default destination - this prevents old * Default lines in /etc/cups/lpoptions and ~/.cups/lpoptions from * pointing to a non-existent printer or class... */ if (num_reals) { /* * See if we have a default printer... */ if ((dest = cupsGetDest(NULL, NULL, data.num_dests, data.dests)) != NULL) { /* * Have a default; see if it is real... */ if (!cupsGetDest(dest->name, NULL, num_reals, reals)) { /* * Remove the non-real printer from the list, since we don't want jobs * going to an unexpected printer... () */ data.num_dests = cupsRemoveDest(dest->name, dest->instance, data.num_dests, &data.dests); } } /* * Free memory... */ free(reals); } /* * Return the number of destinations... */ *dests = data.dests; if (data.num_dests > 0) _cupsSetError(IPP_STATUS_OK, NULL, 0); DEBUG_printf(("1cupsGetDests2: Returning %d destinations.", data.num_dests)); return (data.num_dests); } /* * 'cupsGetNamedDest()' - Get options for the named destination. * * This function is optimized for retrieving a single destination and should * be used instead of @link cupsGetDests2@ and @link cupsGetDest@ when you * either know the name of the destination or want to print to the default * destination. If @code NULL@ is returned, the destination does not exist or * there is no default destination. * * If "http" is @code CUPS_HTTP_DEFAULT@, the connection to the default print * server will be used. * * If "name" is @code NULL@, the default printer for the current user will be * returned. * * The returned destination must be freed using @link cupsFreeDests@ with a * "num_dests" value of 1. * * @since CUPS 1.4/macOS 10.6@ */ cups_dest_t * /* O - Destination or @code NULL@ */ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *name, /* I - Destination name or @code NULL@ for the default destination */ const char *instance) /* I - Instance name or @code NULL@ */ { const char *dest_name; /* Working destination name */ cups_dest_t *dest; /* Destination */ char filename[1024], /* Path to lpoptions */ defname[256]; /* Default printer name */ const char *home = getenv("HOME"); /* Home directory */ int set_as_default = 0; /* Set returned destination as default */ ipp_op_t op = IPP_OP_GET_PRINTER_ATTRIBUTES; /* IPP operation to get server ops */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ DEBUG_printf(("cupsGetNamedDest(http=%p, name=\"%s\", instance=\"%s\")", (void *)http, name, instance)); /* * If "name" is NULL, find the default destination... */ dest_name = name; if (!dest_name) { set_as_default = 1; dest_name = _cupsUserDefault(defname, sizeof(defname)); if (dest_name) { char *ptr; /* Temporary pointer... */ if ((ptr = strchr(defname, '/')) != NULL) { *ptr++ = '\0'; instance = ptr; } else instance = NULL; } else if (home) { /* * No default in the environment, try the user's lpoptions files... */ snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home); dest_name = cups_get_default(filename, defname, sizeof(defname), &instance); } if (!dest_name) { /* * Still not there? Try the system lpoptions file... */ snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot); dest_name = cups_get_default(filename, defname, sizeof(defname), &instance); } if (!dest_name) { /* * No locally-set default destination, ask the server... */ op = IPP_OP_CUPS_GET_DEFAULT; DEBUG_puts("1cupsGetNamedDest: Asking server for default printer..."); } else DEBUG_printf(("1cupsGetNamedDest: Using name=\"%s\"...", name)); } /* * Get the printer's attributes... */ if (!_cupsGetDests(http, op, dest_name, &dest, 0, 0)) { if (name) { _cups_namedata_t data; /* Callback data */ DEBUG_puts("1cupsGetNamedDest: No queue found for printer, looking on network..."); data.name = name; data.dest = NULL; cupsEnumDests(0, 1000, NULL, 0, 0, (cups_dest_cb_t)cups_name_cb, &data); if (!data.dest) return (NULL); dest = data.dest; } else return (NULL); } DEBUG_printf(("1cupsGetNamedDest: Got dest=%p", (void *)dest)); if (instance) dest->instance = _cupsStrAlloc(instance); if (set_as_default) dest->is_default = 1; /* * Then add local options... */ snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot); cups_get_dests(filename, dest_name, instance, 1, 1, &dest); if (home) { snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home); cups_get_dests(filename, dest_name, instance, 1, 1, &dest); } /* * Return the result... */ return (dest); } /* * 'cupsRemoveDest()' - Remove a destination from the destination list. * * Removing a destination/instance does not delete the class or printer * queue, merely the lpoptions for that destination/instance. Use the * @link cupsSetDests@ or @link cupsSetDests2@ functions to save the new * options for the user. * * @since CUPS 1.3/macOS 10.5@ */ int /* O - New number of destinations */ cupsRemoveDest(const char *name, /* I - Destination name */ const char *instance, /* I - Instance name or @code NULL@ */ int num_dests, /* I - Number of destinations */ cups_dest_t **dests) /* IO - Destinations */ { int i; /* Index into destinations */ cups_dest_t *dest; /* Pointer to destination */ /* * Find the destination... */ if ((dest = cupsGetDest(name, instance, num_dests, *dests)) == NULL) return (num_dests); /* * Free memory... */ _cupsStrFree(dest->name); _cupsStrFree(dest->instance); cupsFreeOptions(dest->num_options, dest->options); /* * Remove the destination from the array... */ num_dests --; i = (int)(dest - *dests); if (i < num_dests) memmove(dest, dest + 1, (size_t)(num_dests - i) * sizeof(cups_dest_t)); return (num_dests); } /* * 'cupsSetDefaultDest()' - Set the default destination. * * @since CUPS 1.3/macOS 10.5@ */ void cupsSetDefaultDest( const char *name, /* I - Destination name */ const char *instance, /* I - Instance name or @code NULL@ */ int num_dests, /* I - Number of destinations */ cups_dest_t *dests) /* I - Destinations */ { int i; /* Looping var */ cups_dest_t *dest; /* Current destination */ /* * Range check input... */ if (!name || num_dests <= 0 || !dests) return; /* * Loop through the array and set the "is_default" flag for the matching * destination... */ for (i = num_dests, dest = dests; i > 0; i --, dest ++) dest->is_default = !_cups_strcasecmp(name, dest->name) && ((!instance && !dest->instance) || (instance && dest->instance && !_cups_strcasecmp(instance, dest->instance))); } /* * 'cupsSetDests()' - Save the list of destinations for the default server. * * This function saves the destinations to /etc/cups/lpoptions when run * as root and ~/.cups/lpoptions when run as a normal user. * * @exclude all@ */ void cupsSetDests(int num_dests, /* I - Number of destinations */ cups_dest_t *dests) /* I - Destinations */ { cupsSetDests2(CUPS_HTTP_DEFAULT, num_dests, dests); } /* * 'cupsSetDests2()' - Save the list of destinations for the specified server. * * This function saves the destinations to /etc/cups/lpoptions when run * as root and ~/.cups/lpoptions when run as a normal user. * * @since CUPS 1.1.21/macOS 10.4@ */ int /* O - 0 on success, -1 on error */ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ int num_dests, /* I - Number of destinations */ cups_dest_t *dests) /* I - Destinations */ { int i, j; /* Looping vars */ int wrote; /* Wrote definition? */ cups_dest_t *dest; /* Current destination */ cups_option_t *option; /* Current option */ _ipp_option_t *match; /* Matching attribute for option */ FILE *fp; /* File pointer */ #ifndef WIN32 const char *home; /* HOME environment variable */ #endif /* WIN32 */ char filename[1024]; /* lpoptions file */ int num_temps; /* Number of temporary destinations */ cups_dest_t *temps = NULL, /* Temporary destinations */ *temp; /* Current temporary dest */ const char *val; /* Value of temporary option */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ /* * Range check the input... */ if (!num_dests || !dests) return (-1); /* * Get the server destinations... */ num_temps = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, &temps, 0, 0); if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE) { cupsFreeDests(num_temps, temps); return (-1); } /* * Figure out which file to write to... */ snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot); #ifndef WIN32 if (getuid()) { /* * Merge in server defaults... */ num_temps = cups_get_dests(filename, NULL, NULL, 0, num_temps, &temps); /* * Point to user defaults... */ if ((home = getenv("HOME")) != NULL) { /* * Create ~/.cups subdirectory... */ snprintf(filename, sizeof(filename), "%s/.cups", home); if (access(filename, 0)) mkdir(filename, 0700); snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home); } } #endif /* !WIN32 */ /* * Try to open the file... */ if ((fp = fopen(filename, "w")) == NULL) { cupsFreeDests(num_temps, temps); return (-1); } #ifndef WIN32 /* * Set the permissions to 0644 when saving to the /etc/cups/lpoptions * file... */ if (!getuid()) fchmod(fileno(fp), 0644); #endif /* !WIN32 */ /* * Write each printer; each line looks like: * * Dest name[/instance] options * Default name[/instance] options */ for (i = num_dests, dest = dests; i > 0; i --, dest ++) if (dest->instance != NULL || dest->num_options != 0 || dest->is_default) { if (dest->is_default) { fprintf(fp, "Default %s", dest->name); if (dest->instance) fprintf(fp, "/%s", dest->instance); wrote = 1; } else wrote = 0; if ((temp = cupsGetDest(dest->name, dest->instance, num_temps, temps)) == NULL) temp = cupsGetDest(dest->name, NULL, num_temps, temps); for (j = dest->num_options, option = dest->options; j > 0; j --, option ++) { /* * See if this option is a printer attribute; if so, skip it... */ if ((match = _ippFindOption(option->name)) != NULL && match->group_tag == IPP_TAG_PRINTER) continue; /* * See if the server/global options match these; if so, don't * write 'em. */ if (temp && (val = cupsGetOption(option->name, temp->num_options, temp->options)) != NULL && !_cups_strcasecmp(val, option->value)) continue; /* * Options don't match, write to the file... */ if (!wrote) { fprintf(fp, "Dest %s", dest->name); if (dest->instance) fprintf(fp, "/%s", dest->instance); wrote = 1; } if (option->value[0]) { if (strchr(option->value, ' ') || strchr(option->value, '\\') || strchr(option->value, '\"') || strchr(option->value, '\'')) { /* * Quote the value... */ fprintf(fp, " %s=\"", option->name); for (val = option->value; *val; val ++) { if (strchr("\"\'\\", *val)) putc('\\', fp); putc(*val, fp); } putc('\"', fp); } else { /* * Store the literal value... */ fprintf(fp, " %s=%s", option->name, option->value); } } else fprintf(fp, " %s", option->name); } if (wrote) fputs("\n", fp); } /* * Free the temporary destinations and close the file... */ cupsFreeDests(num_temps, temps); fclose(fp); #ifdef __APPLE__ /* * Set the default printer for this location - this allows command-line * and GUI applications to share the same default destination... */ if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) != NULL) { CFStringRef name = CFStringCreateWithCString(kCFAllocatorDefault, dest->name, kCFStringEncodingUTF8); /* Default printer name */ if (name) { _cupsAppleSetDefaultPrinter(name); CFRelease(name); } } #endif /* __APPLE__ */ #ifdef HAVE_NOTIFY_POST /* * Send a notification so that macOS applications can know about the * change, too. */ notify_post("com.apple.printerListChange"); #endif /* HAVE_NOTIFY_POST */ return (0); } /* * '_cupsUserDefault()' - Get the user default printer from environment * variables and location information. */ char * /* O - Default printer or NULL */ _cupsUserDefault(char *name, /* I - Name buffer */ size_t namesize) /* I - Size of name buffer */ { const char *env; /* LPDEST or PRINTER env variable */ #ifdef __APPLE__ CFStringRef locprinter; /* Last printer as this location */ #endif /* __APPLE__ */ if ((env = getenv("LPDEST")) == NULL) if ((env = getenv("PRINTER")) != NULL && !strcmp(env, "lp")) env = NULL; if (env) { strlcpy(name, env, namesize); return (name); } #ifdef __APPLE__ /* * Use location-based defaults if "use last printer" is selected in the * system preferences... */ if ((locprinter = _cupsAppleCopyDefaultPrinter()) != NULL) { CFStringGetCString(locprinter, name, (CFIndex)namesize, kCFStringEncodingUTF8); CFRelease(locprinter); } else name[0] = '\0'; DEBUG_printf(("1_cupsUserDefault: Returning \"%s\".", name)); return (*name ? name : NULL); #else /* * No location-based defaults on this platform... */ name[0] = '\0'; return (NULL); #endif /* __APPLE__ */ } #if _CUPS_LOCATION_DEFAULTS /* * 'appleCopyLocations()' - Copy the location history array. */ static CFArrayRef /* O - Location array or NULL */ appleCopyLocations(void) { CFArrayRef locations; /* Location array */ /* * Look up the location array in the preferences... */ if ((locations = CFPreferencesCopyAppValue(kLastUsedPrintersKey, kCUPSPrintingPrefs)) == NULL) return (NULL); if (CFGetTypeID(locations) != CFArrayGetTypeID()) { CFRelease(locations); return (NULL); } return (locations); } /* * 'appleCopyNetwork()' - Get the network ID for the current location. */ static CFStringRef /* O - Network ID */ appleCopyNetwork(void) { SCDynamicStoreRef dynamicStore; /* System configuration data */ CFStringRef key; /* Current network configuration key */ CFDictionaryRef ip_dict; /* Network configuration data */ CFStringRef network = NULL; /* Current network ID */ if ((dynamicStore = SCDynamicStoreCreate(NULL, CFSTR("libcups"), NULL, NULL)) != NULL) { /* * First use the IPv6 router address, if available, since that will generally * be a globally-unique link-local address. */ if ((key = SCDynamicStoreKeyCreateNetworkGlobalEntity( NULL, kSCDynamicStoreDomainState, kSCEntNetIPv6)) != NULL) { if ((ip_dict = SCDynamicStoreCopyValue(dynamicStore, key)) != NULL) { if ((network = CFDictionaryGetValue(ip_dict, kSCPropNetIPv6Router)) != NULL) CFRetain(network); CFRelease(ip_dict); } CFRelease(key); } /* * If that doesn't work, try the IPv4 router address. This isn't as unique * and will likely be a 10.x.y.z or 192.168.y.z address... */ if (!network) { if ((key = SCDynamicStoreKeyCreateNetworkGlobalEntity( NULL, kSCDynamicStoreDomainState, kSCEntNetIPv4)) != NULL) { if ((ip_dict = SCDynamicStoreCopyValue(dynamicStore, key)) != NULL) { if ((network = CFDictionaryGetValue(ip_dict, kSCPropNetIPv4Router)) != NULL) CFRetain(network); CFRelease(ip_dict); } CFRelease(key); } } CFRelease(dynamicStore); } return (network); } #endif /* _CUPS_LOCATION_DEFAULTS */ #ifdef __APPLE__ /* * 'appleGetPaperSize()' - Get the default paper size. */ static char * /* O - Default paper size */ appleGetPaperSize(char *name, /* I - Paper size name buffer */ size_t namesize) /* I - Size of buffer */ { CFStringRef defaultPaperID; /* Default paper ID */ pwg_media_t *pwgmedia; /* PWG media size */ defaultPaperID = _cupsAppleCopyDefaultPaperID(); if (!defaultPaperID || CFGetTypeID(defaultPaperID) != CFStringGetTypeID() || !CFStringGetCString(defaultPaperID, name, (CFIndex)namesize, kCFStringEncodingUTF8)) name[0] = '\0'; else if ((pwgmedia = pwgMediaForLegacy(name)) != NULL) strlcpy(name, pwgmedia->pwg, namesize); if (defaultPaperID) CFRelease(defaultPaperID); return (name); } #endif /* __APPLE__ */ #if _CUPS_LOCATION_DEFAULTS /* * 'appleGetPrinter()' - Get a printer from the history array. */ static CFStringRef /* O - Printer name or NULL */ appleGetPrinter(CFArrayRef locations, /* I - Location array */ CFStringRef network, /* I - Network name */ CFIndex *locindex) /* O - Index in array */ { CFIndex i, /* Looping var */ count; /* Number of locations */ CFDictionaryRef location; /* Current location */ CFStringRef locnetwork, /* Current network */ locprinter; /* Current printer */ for (i = 0, count = CFArrayGetCount(locations); i < count; i ++) if ((location = CFArrayGetValueAtIndex(locations, i)) != NULL && CFGetTypeID(location) == CFDictionaryGetTypeID()) { if ((locnetwork = CFDictionaryGetValue(location, kLocationNetworkKey)) != NULL && CFGetTypeID(locnetwork) == CFStringGetTypeID() && CFStringCompare(network, locnetwork, 0) == kCFCompareEqualTo && (locprinter = CFDictionaryGetValue(location, kLocationPrinterIDKey)) != NULL && CFGetTypeID(locprinter) == CFStringGetTypeID()) { if (locindex) *locindex = i; return (locprinter); } } return (NULL); } #endif /* _CUPS_LOCATION_DEFAULTS */ /* * 'cups_add_dest()' - Add a destination to the array. * * Unlike cupsAddDest(), this function does not check for duplicates. */ static cups_dest_t * /* O - New destination */ cups_add_dest(const char *name, /* I - Name of destination */ const char *instance, /* I - Instance or NULL */ int *num_dests, /* IO - Number of destinations */ cups_dest_t **dests) /* IO - Destinations */ { int insert, /* Insertion point */ diff; /* Result of comparison */ cups_dest_t *dest; /* Destination pointer */ /* * Add new destination... */ if (*num_dests == 0) dest = malloc(sizeof(cups_dest_t)); else dest = realloc(*dests, sizeof(cups_dest_t) * (size_t)(*num_dests + 1)); if (!dest) return (NULL); *dests = dest; /* * Find where to insert the destination... */ if (*num_dests == 0) insert = 0; else { insert = cups_find_dest(name, instance, *num_dests, *dests, *num_dests - 1, &diff); if (diff > 0) insert ++; } /* * Move the array elements as needed... */ if (insert < *num_dests) memmove(*dests + insert + 1, *dests + insert, (size_t)(*num_dests - insert) * sizeof(cups_dest_t)); (*num_dests) ++; /* * Initialize the destination... */ dest = *dests + insert; dest->name = _cupsStrAlloc(name); dest->instance = _cupsStrAlloc(instance); dest->is_default = 0; dest->num_options = 0; dest->options = (cups_option_t *)0; return (dest); } # ifdef __BLOCKS__ /* * 'cups_block_cb()' - Enumeration callback for block API. */ static int /* O - 1 to continue, 0 to stop */ cups_block_cb( cups_dest_block_t block, /* I - Block */ unsigned flags, /* I - Destination flags */ cups_dest_t *dest) /* I - Destination */ { return ((block)(flags, dest)); } # endif /* __BLOCKS__ */ /* * 'cups_compare_dests()' - Compare two destinations. */ static int /* O - Result of comparison */ cups_compare_dests(cups_dest_t *a, /* I - First destination */ cups_dest_t *b) /* I - Second destination */ { int diff; /* Difference */ if ((diff = _cups_strcasecmp(a->name, b->name)) != 0) return (diff); else if (a->instance && b->instance) return (_cups_strcasecmp(a->instance, b->instance)); else return ((a->instance && !b->instance) - (!a->instance && b->instance)); } #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) # ifdef HAVE_DNSSD /* * 'cups_dnssd_browse_cb()' - Browse for printers. */ static void cups_dnssd_browse_cb( DNSServiceRef sdRef, /* I - Service reference */ DNSServiceFlags flags, /* I - Option flags */ uint32_t interfaceIndex, /* I - Interface number */ DNSServiceErrorType errorCode, /* I - Error, if any */ const char *serviceName, /* I - Name of service/device */ const char *regtype, /* I - Type of service */ const char *replyDomain, /* I - Service domain */ void *context) /* I - Enumeration data */ { _cups_dnssd_data_t *data = (_cups_dnssd_data_t *)context; /* Enumeration data */ DEBUG_printf(("5cups_dnssd_browse_cb(sdRef=%p, flags=%x, interfaceIndex=%d, errorCode=%d, serviceName=\"%s\", regtype=\"%s\", replyDomain=\"%s\", context=%p)", (void *)sdRef, flags, interfaceIndex, errorCode, serviceName, regtype, replyDomain, context)); /* * Don't do anything on error... */ if (errorCode != kDNSServiceErr_NoError) return; /* * Get the device... */ cups_dnssd_get_device(data, serviceName, regtype, replyDomain); } # else /* HAVE_AVAHI */ /* * 'cups_dnssd_browse_cb()' - Browse for printers. */ static void cups_dnssd_browse_cb( AvahiServiceBrowser *browser, /* I - Browser */ AvahiIfIndex interface, /* I - Interface index (unused) */ AvahiProtocol protocol, /* I - Network protocol (unused) */ AvahiBrowserEvent event, /* I - What happened */ const char *name, /* I - Service name */ const char *type, /* I - Registration type */ const char *domain, /* I - Domain */ AvahiLookupResultFlags flags, /* I - Flags */ void *context) /* I - Devices array */ { #ifdef DEBUG AvahiClient *client = avahi_service_browser_get_client(browser); /* Client information */ #endif /* DEBUG */ _cups_dnssd_data_t *data = (_cups_dnssd_data_t *)context; /* Enumeration data */ (void)interface; (void)protocol; (void)context; DEBUG_printf(("cups_dnssd_browse_cb(..., name=\"%s\", type=\"%s\", domain=\"%s\", ...);", name, type, domain)); switch (event) { case AVAHI_BROWSER_FAILURE: DEBUG_printf(("cups_dnssd_browse_cb: %s", avahi_strerror(avahi_client_errno(client)))); avahi_simple_poll_quit(data->simple_poll); break; case AVAHI_BROWSER_NEW: /* * This object is new on the network. */ if (flags & AVAHI_LOOKUP_RESULT_LOCAL) { /* * This comes from the local machine so ignore it. */ DEBUG_printf(("cups_dnssd_browse_cb: Ignoring local service \"%s\".", name)); } else { /* * Create a device entry for it if it doesn't yet exist. */ cups_dnssd_get_device(data, name, type, domain); } break; case AVAHI_BROWSER_REMOVE : case AVAHI_BROWSER_CACHE_EXHAUSTED : break; case AVAHI_BROWSER_ALL_FOR_NOW : DEBUG_puts("cups_dnssd_browse_cb: ALL_FOR_NOW"); data->browsers --; break; } } /* * 'cups_dnssd_client_cb()' - Avahi client callback function. */ static void cups_dnssd_client_cb( AvahiClient *client, /* I - Client information (unused) */ AvahiClientState state, /* I - Current state */ void *context) /* I - User data (unused) */ { _cups_dnssd_data_t *data = (_cups_dnssd_data_t *)context; /* Enumeration data */ (void)client; DEBUG_printf(("cups_dnssd_client_cb(client=%p, state=%d, context=%p)", client, state, context)); /* * If the connection drops, quit. */ if (state == AVAHI_CLIENT_FAILURE) { DEBUG_puts("cups_dnssd_client_cb: Avahi connection failed."); avahi_simple_poll_quit(data->simple_poll); } } # endif /* HAVE_DNSSD */ /* * 'cups_dnssd_compare_device()' - Compare two devices. */ static int /* O - Result of comparison */ cups_dnssd_compare_devices( _cups_dnssd_device_t *a, /* I - First device */ _cups_dnssd_device_t *b) /* I - Second device */ { return (strcmp(a->dest.name, b->dest.name)); } /* * 'cups_dnssd_free_device()' - Free the memory used by a device. */ static void cups_dnssd_free_device( _cups_dnssd_device_t *device, /* I - Device */ _cups_dnssd_data_t *data) /* I - Enumeration data */ { DEBUG_printf(("5cups_dnssd_free_device(device=%p(%s), data=%p)", (void *)device, device->dest.name, (void *)data)); # ifdef HAVE_DNSSD if (device->ref) DNSServiceRefDeallocate(device->ref); # else /* HAVE_AVAHI */ if (device->ref) avahi_record_browser_free(device->ref); # endif /* HAVE_DNSSD */ _cupsStrFree(device->domain); _cupsStrFree(device->fullName); _cupsStrFree(device->regtype); _cupsStrFree(device->dest.name); cupsFreeOptions(device->dest.num_options, device->dest.options); free(device); } /* * 'cups_dnssd_get_device()' - Lookup a device and create it as needed. */ static _cups_dnssd_device_t * /* O - Device */ cups_dnssd_get_device( _cups_dnssd_data_t *data, /* I - Enumeration data */ const char *serviceName, /* I - Service name */ const char *regtype, /* I - Registration type */ const char *replyDomain) /* I - Domain name */ { _cups_dnssd_device_t key, /* Search key */ *device; /* Device */ char fullName[kDNSServiceMaxDomainName], /* Full name for query */ name[128]; /* Queue name */ DEBUG_printf(("5cups_dnssd_get_device(data=%p, serviceName=\"%s\", regtype=\"%s\", replyDomain=\"%s\")", (void *)data, serviceName, regtype, replyDomain)); /* * See if this is an existing device... */ cups_queue_name(name, serviceName, sizeof(name)); key.dest.name = name; if ((device = cupsArrayFind(data->devices, &key)) != NULL) { /* * Yes, see if we need to do anything with this... */ int update = 0; /* Non-zero if we need to update */ if (!_cups_strcasecmp(replyDomain, "local.") && _cups_strcasecmp(device->domain, replyDomain)) { /* * Update the "global" listing to use the .local domain name instead. */ _cupsStrFree(device->domain); device->domain = _cupsStrAlloc(replyDomain); DEBUG_printf(("6cups_dnssd_get_device: Updating '%s' to use local " "domain.", device->dest.name)); update = 1; } if (!_cups_strcasecmp(regtype, "_ipps._tcp") && _cups_strcasecmp(device->regtype, regtype)) { /* * Prefer IPPS over IPP. */ _cupsStrFree(device->regtype); device->regtype = _cupsStrAlloc(regtype); DEBUG_printf(("6cups_dnssd_get_device: Updating '%s' to use IPPS.", device->dest.name)); update = 1; } if (!update) { DEBUG_printf(("6cups_dnssd_get_device: No changes to '%s'.", device->dest.name)); return (device); } } else { /* * No, add the device... */ DEBUG_printf(("6cups_dnssd_get_device: Adding '%s' for %s with domain " "'%s'.", serviceName, !strcmp(regtype, "_ipps._tcp") ? "IPPS" : "IPP", replyDomain)); device = calloc(sizeof(_cups_dnssd_device_t), 1); device->dest.name = _cupsStrAlloc(name); device->domain = _cupsStrAlloc(replyDomain); device->regtype = _cupsStrAlloc(regtype); device->dest.num_options = cupsAddOption("printer-info", serviceName, 0, &device->dest.options); cupsArrayAdd(data->devices, device); } /* * Set the "full name" of this service, which is used for queries... */ # ifdef HAVE_DNSSD DNSServiceConstructFullName(fullName, serviceName, regtype, replyDomain); # else /* HAVE_AVAHI */ avahi_service_name_join(fullName, kDNSServiceMaxDomainName, serviceName, regtype, replyDomain); # endif /* HAVE_DNSSD */ _cupsStrFree(device->fullName); device->fullName = _cupsStrAlloc(fullName); if (device->ref) { # ifdef HAVE_DNSSD DNSServiceRefDeallocate(device->ref); # else /* HAVE_AVAHI */ avahi_record_browser_free(device->ref); # endif /* HAVE_DNSSD */ device->ref = 0; } if (device->state == _CUPS_DNSSD_ACTIVE) { DEBUG_printf(("6cups_dnssd_get_device: Remove callback for \"%s\".", device->dest.name)); (*data->cb)(data->user_data, CUPS_DEST_FLAGS_REMOVED, &device->dest); device->state = _CUPS_DNSSD_NEW; } return (device); } # ifdef HAVE_DNSSD /* * 'cups_dnssd_local_cb()' - Browse for local printers. */ static void cups_dnssd_local_cb( DNSServiceRef sdRef, /* I - Service reference */ DNSServiceFlags flags, /* I - Option flags */ uint32_t interfaceIndex, /* I - Interface number */ DNSServiceErrorType errorCode, /* I - Error, if any */ const char *serviceName, /* I - Name of service/device */ const char *regtype, /* I - Type of service */ const char *replyDomain, /* I - Service domain */ void *context) /* I - Devices array */ { _cups_dnssd_data_t *data = (_cups_dnssd_data_t *)context; /* Enumeration data */ _cups_dnssd_device_t *device; /* Device */ DEBUG_printf(("5cups_dnssd_local_cb(sdRef=%p, flags=%x, interfaceIndex=%d, errorCode=%d, serviceName=\"%s\", regtype=\"%s\", replyDomain=\"%s\", context=%p)", (void *)sdRef, flags, interfaceIndex, errorCode, serviceName, regtype, replyDomain, context)); /* * Only process "add" data... */ if (errorCode != kDNSServiceErr_NoError || !(flags & kDNSServiceFlagsAdd)) return; /* * Get the device... */ device = cups_dnssd_get_device(data, serviceName, regtype, replyDomain); /* * Hide locally-registered devices... */ DEBUG_printf(("6cups_dnssd_local_cb: Hiding local printer '%s'.", serviceName)); if (device->ref) { DNSServiceRefDeallocate(device->ref); device->ref = 0; } if (device->state == _CUPS_DNSSD_ACTIVE) { DEBUG_printf(("6cups_dnssd_local_cb: Remove callback for \"%s\".", device->dest.name)); (*data->cb)(data->user_data, CUPS_DEST_FLAGS_REMOVED, &device->dest); } device->state = _CUPS_DNSSD_LOCAL; } # endif /* HAVE_DNSSD */ # ifdef HAVE_AVAHI /* * 'cups_dnssd_poll_cb()' - Wait for input on the specified file descriptors. * * Note: This function is needed because avahi_simple_poll_iterate is broken * and always uses a timeout of 0 (!) milliseconds. * (https://github.com/lathiat/avahi/issues/127) * * @private@ */ static int /* O - Number of file descriptors matching */ cups_dnssd_poll_cb( struct pollfd *pollfds, /* I - File descriptors */ unsigned int num_pollfds, /* I - Number of file descriptors */ int timeout, /* I - Timeout in milliseconds (unused) */ void *context) /* I - User data (unused) */ { _cups_dnssd_data_t *data = (_cups_dnssd_data_t *)context; /* Enumeration data */ int val; /* Return value */ DEBUG_printf(("cups_dnssd_poll_cb(pollfds=%p, num_pollfds=%d, timeout=%d, context=%p)", pollfds, num_pollfds, timeout, context)); (void)timeout; val = poll(pollfds, num_pollfds, _CUPS_DNSSD_MAXTIME); DEBUG_printf(("cups_dnssd_poll_cb: poll() returned %d", val)); if (val < 0) { DEBUG_printf(("cups_dnssd_poll_cb: %s", strerror(errno))); } else if (val > 0) { data->got_data = 1; } return (val); } # endif /* HAVE_AVAHI */ /* * 'cups_dnssd_query_cb()' - Process query data. */ # ifdef HAVE_DNSSD static void cups_dnssd_query_cb( DNSServiceRef sdRef, /* I - Service reference */ DNSServiceFlags flags, /* I - Data flags */ uint32_t interfaceIndex, /* I - Interface */ DNSServiceErrorType errorCode, /* I - Error, if any */ const char *fullName, /* I - Full service name */ uint16_t rrtype, /* I - Record type */ uint16_t rrclass, /* I - Record class */ uint16_t rdlen, /* I - Length of record data */ const void *rdata, /* I - Record data */ uint32_t ttl, /* I - Time-to-live */ void *context) /* I - Enumeration data */ { # else /* HAVE_AVAHI */ static void cups_dnssd_query_cb( AvahiRecordBrowser *browser, /* I - Record browser */ AvahiIfIndex interfaceIndex, /* I - Interface index (unused) */ AvahiProtocol protocol, /* I - Network protocol (unused) */ AvahiBrowserEvent event, /* I - What happened? */ const char *fullName, /* I - Service name */ uint16_t rrclass, /* I - Record class */ uint16_t rrtype, /* I - Record type */ const void *rdata, /* I - TXT record */ size_t rdlen, /* I - Length of TXT record */ AvahiLookupResultFlags flags, /* I - Flags */ void *context) /* I - Enumeration data */ { # ifdef DEBUG AvahiClient *client = avahi_record_browser_get_client(browser); /* Client information */ # endif /* DEBUG */ # endif /* HAVE_DNSSD */ _cups_dnssd_data_t *data = (_cups_dnssd_data_t *)context; /* Enumeration data */ char serviceName[256],/* Service name */ name[128], /* Queue name */ *ptr; /* Pointer into string */ _cups_dnssd_device_t dkey, /* Search key */ *device; /* Device */ # ifdef HAVE_DNSSD DEBUG_printf(("5cups_dnssd_query_cb(sdRef=%p, flags=%x, interfaceIndex=%d, errorCode=%d, fullName=\"%s\", rrtype=%u, rrclass=%u, rdlen=%u, rdata=%p, ttl=%u, context=%p)", (void *)sdRef, flags, interfaceIndex, errorCode, fullName, rrtype, rrclass, rdlen, rdata, ttl, context)); /* * Only process "add" data... */ if (errorCode != kDNSServiceErr_NoError || !(flags & kDNSServiceFlagsAdd)) return; # else /* HAVE_AVAHI */ DEBUG_printf(("cups_dnssd_query_cb(browser=%p, interfaceIndex=%d, protocol=%d, event=%d, fullName=\"%s\", rrclass=%u, rrtype=%u, rdata=%p, rdlen=%u, flags=%x, context=%p)", browser, interfaceIndex, protocol, event, fullName, rrclass, rrtype, rdata, (unsigned)rdlen, flags, context)); /* * Only process "add" data... */ if (event != AVAHI_BROWSER_NEW) { if (event == AVAHI_BROWSER_FAILURE) DEBUG_printf(("cups_dnssd_query_cb: %s", avahi_strerror(avahi_client_errno(client)))); return; } # endif /* HAVE_DNSSD */ /* * Lookup the service in the devices array. */ cups_dnssd_unquote(serviceName, fullName, sizeof(serviceName)); if ((ptr = strstr(serviceName, "._")) != NULL) *ptr = '\0'; cups_queue_name(name, serviceName, sizeof(name)); dkey.dest.name = name; if ((device = cupsArrayFind(data->devices, &dkey)) != NULL && device->state == _CUPS_DNSSD_NEW) { /* * Found it, pull out the make and model from the TXT record and save it... */ const uint8_t *txt, /* Pointer into data */ *txtnext, /* Next key/value pair */ *txtend; /* End of entire TXT record */ uint8_t txtlen; /* Length of current key/value pair */ char key[256], /* Key string */ value[256], /* Value string */ make_and_model[512], /* Manufacturer and model */ model[256], /* Model */ uriname[1024], /* Name for URI */ uri[1024]; /* Printer URI */ cups_ptype_t type = CUPS_PRINTER_DISCOVERED | CUPS_PRINTER_BW; /* Printer type */ int saw_printer_type = 0; /* Did we see a printer-type key? */ device->state = _CUPS_DNSSD_PENDING; make_and_model[0] = '\0'; strlcpy(model, "Unknown", sizeof(model)); for (txt = rdata, txtend = txt + rdlen; txt < txtend; txt = txtnext) { /* * Read a key/value pair starting with an 8-bit length. Since the * length is 8 bits and the size of the key/value buffers is 256, we * don't need to check for overflow... */ txtlen = *txt++; if (!txtlen || (txt + txtlen) > txtend) break; txtnext = txt + txtlen; for (ptr = key; txt < txtnext && *txt != '='; txt ++) *ptr++ = (char)*txt; *ptr = '\0'; if (txt < txtnext && *txt == '=') { txt ++; if (txt < txtnext) memcpy(value, txt, (size_t)(txtnext - txt)); value[txtnext - txt] = '\0'; DEBUG_printf(("6cups_dnssd_query_cb: %s=%s", key, value)); } else { DEBUG_printf(("6cups_dnssd_query_cb: '%s' with no value.", key)); continue; } if (!_cups_strcasecmp(key, "usb_MFG") || !_cups_strcasecmp(key, "usb_MANU") || !_cups_strcasecmp(key, "usb_MANUFACTURER")) strlcpy(make_and_model, value, sizeof(make_and_model)); else if (!_cups_strcasecmp(key, "usb_MDL") || !_cups_strcasecmp(key, "usb_MODEL")) strlcpy(model, value, sizeof(model)); else if (!_cups_strcasecmp(key, "product") && !strstr(value, "Ghostscript")) { if (value[0] == '(') { /* * Strip parenthesis... */ if ((ptr = value + strlen(value) - 1) > value && *ptr == ')') *ptr = '\0'; strlcpy(model, value + 1, sizeof(model)); } else strlcpy(model, value, sizeof(model)); } else if (!_cups_strcasecmp(key, "ty")) { strlcpy(model, value, sizeof(model)); if ((ptr = strchr(model, ',')) != NULL) *ptr = '\0'; } else if (!_cups_strcasecmp(key, "note")) device->dest.num_options = cupsAddOption("printer-location", value, device->dest.num_options, &device->dest.options); else if (!_cups_strcasecmp(key, "pdl")) { /* * Look for PDF-capable printers; only PDF-capable printers are shown. */ const char *start, *next; /* Pointer into value */ int have_pdf = 0, /* Have PDF? */ have_raster = 0;/* Have raster format support? */ for (start = value; start && *start; start = next) { if (!_cups_strncasecmp(start, "application/pdf", 15) && (!start[15] || start[15] == ',')) { have_pdf = 1; break; } else if ((!_cups_strncasecmp(start, "image/pwg-raster", 16) && (!start[16] || start[16] == ',')) || (!_cups_strncasecmp(start, "image/urf", 9) && (!start[9] || start[9] == ','))) { have_raster = 1; break; } if ((next = strchr(start, ',')) != NULL) next ++; } if (!have_pdf && !have_raster) device->state = _CUPS_DNSSD_INCOMPATIBLE; } else if (!_cups_strcasecmp(key, "printer-type")) { /* * Value is either NNNN or 0xXXXX */ saw_printer_type = 1; type = (cups_ptype_t)strtol(value, NULL, 0) | CUPS_PRINTER_DISCOVERED; } else if (!saw_printer_type) { if (!_cups_strcasecmp(key, "air") && !_cups_strcasecmp(value, "t")) type |= CUPS_PRINTER_AUTHENTICATED; else if (!_cups_strcasecmp(key, "bind") && !_cups_strcasecmp(value, "t")) type |= CUPS_PRINTER_BIND; else if (!_cups_strcasecmp(key, "collate") && !_cups_strcasecmp(value, "t")) type |= CUPS_PRINTER_COLLATE; else if (!_cups_strcasecmp(key, "color") && !_cups_strcasecmp(value, "t")) type |= CUPS_PRINTER_COLOR; else if (!_cups_strcasecmp(key, "copies") && !_cups_strcasecmp(value, "t")) type |= CUPS_PRINTER_COPIES; else if (!_cups_strcasecmp(key, "duplex") && !_cups_strcasecmp(value, "t")) type |= CUPS_PRINTER_DUPLEX; else if (!_cups_strcasecmp(key, "fax") && !_cups_strcasecmp(value, "t")) type |= CUPS_PRINTER_MFP; else if (!_cups_strcasecmp(key, "papercustom") && !_cups_strcasecmp(value, "t")) type |= CUPS_PRINTER_VARIABLE; else if (!_cups_strcasecmp(key, "papermax")) { if (!_cups_strcasecmp(value, "legal-a4")) type |= CUPS_PRINTER_SMALL; else if (!_cups_strcasecmp(value, "isoc-a2")) type |= CUPS_PRINTER_MEDIUM; else if (!_cups_strcasecmp(value, ">isoc-a2")) type |= CUPS_PRINTER_LARGE; } else if (!_cups_strcasecmp(key, "punch") && !_cups_strcasecmp(value, "t")) type |= CUPS_PRINTER_PUNCH; else if (!_cups_strcasecmp(key, "scan") && !_cups_strcasecmp(value, "t")) type |= CUPS_PRINTER_MFP; else if (!_cups_strcasecmp(key, "sort") && !_cups_strcasecmp(value, "t")) type |= CUPS_PRINTER_SORT; else if (!_cups_strcasecmp(key, "staple") && !_cups_strcasecmp(value, "t")) type |= CUPS_PRINTER_STAPLE; } } /* * Save the printer-xxx values... */ if (make_and_model[0]) { strlcat(make_and_model, " ", sizeof(make_and_model)); strlcat(make_and_model, model, sizeof(make_and_model)); device->dest.num_options = cupsAddOption("printer-make-and-model", make_and_model, device->dest.num_options, &device->dest.options); } else device->dest.num_options = cupsAddOption("printer-make-and-model", model, device->dest.num_options, &device->dest.options); device->type = type; snprintf(value, sizeof(value), "%u", type); device->dest.num_options = cupsAddOption("printer-type", value, device->dest.num_options, &device->dest.options); /* * Save the URI... */ cups_dnssd_unquote(uriname, device->fullName, sizeof(uriname)); httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), !strcmp(device->regtype, "_ipps._tcp") ? "ipps" : "ipp", NULL, uriname, 0, saw_printer_type ? "/cups" : "/"); DEBUG_printf(("6cups_dnssd_query: device-uri=\"%s\"", uri)); device->dest.num_options = cupsAddOption("device-uri", uri, device->dest.num_options, &device->dest.options); } else DEBUG_printf(("6cups_dnssd_query: Ignoring TXT record for '%s'.", fullName)); } /* * 'cups_dnssd_resolve()' - Resolve a Bonjour printer URI. */ static const char * /* O - Resolved URI or NULL */ cups_dnssd_resolve( cups_dest_t *dest, /* I - Destination */ const char *uri, /* I - Current printer URI */ int msec, /* I - Time in milliseconds */ int *cancel, /* I - Pointer to "cancel" variable */ cups_dest_cb_t cb, /* I - Callback */ void *user_data) /* I - User data for callback */ { char tempuri[1024]; /* Temporary URI buffer */ _cups_dnssd_resolve_t resolve; /* Resolve data */ /* * Resolve the URI... */ resolve.cancel = cancel; gettimeofday(&resolve.end_time, NULL); if (msec > 0) { resolve.end_time.tv_sec += msec / 1000; resolve.end_time.tv_usec += (msec % 1000) * 1000; while (resolve.end_time.tv_usec >= 1000000) { resolve.end_time.tv_sec ++; resolve.end_time.tv_usec -= 1000000; } } else resolve.end_time.tv_sec += 75; if (cb) (*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_RESOLVING, dest); if ((uri = _httpResolveURI(uri, tempuri, sizeof(tempuri), _HTTP_RESOLVE_DEFAULT, cups_dnssd_resolve_cb, &resolve)) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to resolve printer-uri."), 1); if (cb) (*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_ERROR, dest); return (NULL); } /* * Save the resolved URI... */ dest->num_options = cupsAddOption("device-uri", uri, dest->num_options, &dest->options); return (cupsGetOption("device-uri", dest->num_options, dest->options)); } /* * 'cups_dnssd_resolve_cb()' - See if we should continue resolving. */ static int /* O - 1 to continue, 0 to stop */ cups_dnssd_resolve_cb(void *context) /* I - Resolve data */ { _cups_dnssd_resolve_t *resolve = (_cups_dnssd_resolve_t *)context; /* Resolve data */ struct timeval curtime; /* Current time */ /* * If the cancel variable is set, return immediately. */ if (resolve->cancel && *(resolve->cancel)) { DEBUG_puts("4cups_dnssd_resolve_cb: Canceled."); return (0); } /* * Otherwise check the end time... */ gettimeofday(&curtime, NULL); DEBUG_printf(("4cups_dnssd_resolve_cb: curtime=%d.%06d, end_time=%d.%06d", (int)curtime.tv_sec, (int)curtime.tv_usec, (int)resolve->end_time.tv_sec, (int)resolve->end_time.tv_usec)); return (curtime.tv_sec < resolve->end_time.tv_sec || (curtime.tv_sec == resolve->end_time.tv_sec && curtime.tv_usec < resolve->end_time.tv_usec)); } /* * 'cups_dnssd_unquote()' - Unquote a name string. */ static void cups_dnssd_unquote(char *dst, /* I - Destination buffer */ const char *src, /* I - Source string */ size_t dstsize) /* I - Size of destination buffer */ { char *dstend = dst + dstsize - 1; /* End of destination buffer */ while (*src && dst < dstend) { if (*src == '\\') { src ++; if (isdigit(src[0] & 255) && isdigit(src[1] & 255) && isdigit(src[2] & 255)) { *dst++ = ((((src[0] - '0') * 10) + src[1] - '0') * 10) + src[2] - '0'; src += 3; } else *dst++ = *src++; } else *dst++ = *src ++; } *dst = '\0'; } #endif /* HAVE_DNSSD */ #if defined(HAVE_AVAHI) || defined(HAVE_DNSSD) /* * 'cups_elapsed()' - Return the elapsed time in milliseconds. */ static int /* O - Elapsed time in milliseconds */ cups_elapsed(struct timeval *t) /* IO - Previous time */ { int msecs; /* Milliseconds */ struct timeval nt; /* New time */ gettimeofday(&nt, NULL); msecs = (int)(1000 * (nt.tv_sec - t->tv_sec) + (nt.tv_usec - t->tv_usec) / 1000); *t = nt; return (msecs); } #endif /* HAVE_AVAHI || HAVE_DNSSD */ /* * 'cups_enum_dests()' - Enumerate destinations from a specific server. */ static int /* O - 1 on success, 0 on failure */ cups_enum_dests( http_t *http, /* I - Connection to scheduler */ unsigned flags, /* I - Enumeration flags */ int msec, /* I - Timeout in milliseconds, -1 for indefinite */ int *cancel, /* I - Pointer to "cancel" variable */ cups_ptype_t type, /* I - Printer type bits */ cups_ptype_t mask, /* I - Mask for printer type bits */ cups_dest_cb_t cb, /* I - Callback function */ void *user_data) /* I - User data */ { int i, /* Looping var */ num_dests; /* Number of destinations */ cups_dest_t *dests = NULL, /* Destinations */ *dest; /* Current destination */ const char *defprinter; /* Default printer */ char name[1024], /* Copy of printer name */ *instance, /* Pointer to instance name */ *user_default; /* User default printer */ #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) int count, /* Number of queries started */ completed, /* Number of completed queries */ remaining; /* Remainder of timeout */ struct timeval curtime; /* Current time */ _cups_dnssd_data_t data; /* Data for callback */ _cups_dnssd_device_t *device; /* Current device */ # ifdef HAVE_DNSSD int nfds, /* Number of files responded */ main_fd; /* File descriptor for lookups */ DNSServiceRef ipp_ref = NULL, /* IPP browser */ local_ipp_ref = NULL; /* Local IPP browser */ # ifdef HAVE_SSL DNSServiceRef ipps_ref = NULL, /* IPPS browser */ local_ipps_ref = NULL; /* Local IPPS browser */ # endif /* HAVE_SSL */ # ifdef HAVE_POLL struct pollfd pfd; /* Polling data */ # else fd_set input; /* Input set for select() */ struct timeval timeout; /* Timeout for select() */ # endif /* HAVE_POLL */ # else /* HAVE_AVAHI */ int error; /* Error value */ AvahiServiceBrowser *ipp_ref = NULL; /* IPP browser */ # ifdef HAVE_SSL AvahiServiceBrowser *ipps_ref = NULL; /* IPPS browser */ # endif /* HAVE_SSL */ # endif /* HAVE_DNSSD */ #endif /* HAVE_DNSSD || HAVE_AVAHI */ DEBUG_printf(("cups_enum_dests(flags=%x, msec=%d, cancel=%p, type=%x, mask=%x, cb=%p, user_data=%p)", flags, msec, (void *)cancel, type, mask, (void *)cb, (void *)user_data)); /* * Range check input... */ (void)flags; if (!cb) { DEBUG_puts("1cups_enum_dests: No callback, returning 0."); return (0); } /* * Get ready to enumerate... */ #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) memset(&data, 0, sizeof(data)); data.type = type; data.mask = mask; data.cb = cb; data.user_data = user_data; data.devices = cupsArrayNew3((cups_array_func_t)cups_dnssd_compare_devices, NULL, NULL, 0, NULL, (cups_afree_func_t)cups_dnssd_free_device); #endif /* HAVE_DNSSD || HAVE_AVAHI */ if (!(mask & CUPS_PRINTER_DISCOVERED) || !(type & CUPS_PRINTER_DISCOVERED)) { /* * Get the list of local printers and pass them to the callback function... */ num_dests = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, &dests, type, mask); if ((user_default = _cupsUserDefault(name, sizeof(name))) != NULL) defprinter = name; else if ((defprinter = cupsGetDefault2(http)) != NULL) { strlcpy(name, defprinter, sizeof(name)); defprinter = name; } if (defprinter) { /* * Separate printer and instance name... */ if ((instance = strchr(name, '/')) != NULL) *instance++ = '\0'; /* * Lookup the printer and instance and make it the default... */ if ((dest = cupsGetDest(name, instance, num_dests, dests)) != NULL) dest->is_default = 1; } for (i = num_dests, dest = dests; i > 0 && (!cancel || !*cancel); i --, dest ++) { #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) const char *device_uri; /* Device URI */ #endif /* HAVE_DNSSD || HAVE_AVAHI */ if (!(*cb)(user_data, i > 1 ? CUPS_DEST_FLAGS_MORE : CUPS_DEST_FLAGS_NONE, dest)) break; #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) if (!dest->instance && (device_uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL && !strncmp(device_uri, "dnssd://", 8)) { /* * Add existing queue using service name, etc. so we don't list it again... */ char scheme[32], /* URI scheme */ userpass[32], /* Username:password */ serviceName[256], /* Service name (host field) */ resource[256], /* Resource (options) */ *regtype, /* Registration type */ *replyDomain; /* Registration domain */ int port; /* Port number (not used) */ if (httpSeparateURI(HTTP_URI_CODING_ALL, device_uri, scheme, sizeof(scheme), userpass, sizeof(userpass), serviceName, sizeof(serviceName), &port, resource, sizeof(resource)) >= HTTP_URI_STATUS_OK) { if ((regtype = strstr(serviceName, "._ipp")) != NULL) { *regtype++ = '\0'; if ((replyDomain = strstr(regtype, "._tcp.")) != NULL) { replyDomain[5] = '\0'; replyDomain += 6; if ((device = cups_dnssd_get_device(&data, serviceName, regtype, replyDomain)) != NULL) device->state = _CUPS_DNSSD_ACTIVE; } } } } #endif /* HAVE_DNSSD || HAVE_AVAHI */ } cupsFreeDests(num_dests, dests); if (i > 0 || msec == 0) goto enum_finished; } /* * Return early if the caller doesn't want to do discovery... */ if ((mask & CUPS_PRINTER_DISCOVERED) && !(type & CUPS_PRINTER_DISCOVERED)) goto enum_finished; #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) /* * Get Bonjour-shared printers... */ gettimeofday(&curtime, NULL); # ifdef HAVE_DNSSD if (DNSServiceCreateConnection(&data.main_ref) != kDNSServiceErr_NoError) { DEBUG_puts("1cups_enum_dests: Unable to create service browser, returning 0."); return (0); } main_fd = DNSServiceRefSockFD(data.main_ref); ipp_ref = data.main_ref; if (DNSServiceBrowse(&ipp_ref, kDNSServiceFlagsShareConnection, 0, "_ipp._tcp", NULL, (DNSServiceBrowseReply)cups_dnssd_browse_cb, &data) != kDNSServiceErr_NoError) { DEBUG_puts("1cups_enum_dests: Unable to create IPP browser, returning 0."); DNSServiceRefDeallocate(data.main_ref); return (0); } local_ipp_ref = data.main_ref; if (DNSServiceBrowse(&local_ipp_ref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexLocalOnly, "_ipp._tcp", NULL, (DNSServiceBrowseReply)cups_dnssd_local_cb, &data) != kDNSServiceErr_NoError) { DEBUG_puts("1cups_enum_dests: Unable to create local IPP browser, returning 0."); DNSServiceRefDeallocate(data.main_ref); return (0); } # ifdef HAVE_SSL ipps_ref = data.main_ref; if (DNSServiceBrowse(&ipps_ref, kDNSServiceFlagsShareConnection, 0, "_ipps._tcp", NULL, (DNSServiceBrowseReply)cups_dnssd_browse_cb, &data) != kDNSServiceErr_NoError) { DEBUG_puts("1cups_enum_dests: Unable to create IPPS browser, returning 0."); DNSServiceRefDeallocate(data.main_ref); return (0); } local_ipps_ref = data.main_ref; if (DNSServiceBrowse(&local_ipps_ref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexLocalOnly, "_ipps._tcp", NULL, (DNSServiceBrowseReply)cups_dnssd_local_cb, &data) != kDNSServiceErr_NoError) { DEBUG_puts("1cups_enum_dests: Unable to create local IPPS browser, returning 0."); DNSServiceRefDeallocate(data.main_ref); return (0); } # endif /* HAVE_SSL */ # else /* HAVE_AVAHI */ if ((data.simple_poll = avahi_simple_poll_new()) == NULL) { DEBUG_puts("1cups_enum_dests: Unable to create Avahi poll, returning 0."); return (0); } avahi_simple_poll_set_func(data.simple_poll, cups_dnssd_poll_cb, &data); data.client = avahi_client_new(avahi_simple_poll_get(data.simple_poll), 0, cups_dnssd_client_cb, &data, &error); if (!data.client) { DEBUG_puts("1cups_enum_dests: Unable to create Avahi client, returning 0."); avahi_simple_poll_free(data.simple_poll); return (0); } data.browsers = 1; if ((ipp_ref = avahi_service_browser_new(data.client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_ipp._tcp", NULL, 0, cups_dnssd_browse_cb, &data)) == NULL) { DEBUG_puts("1cups_enum_dests: Unable to create Avahi IPP browser, returning 0."); avahi_client_free(data.client); avahi_simple_poll_free(data.simple_poll); return (0); } # ifdef HAVE_SSL data.browsers ++; if ((ipps_ref = avahi_service_browser_new(data.client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_ipps._tcp", NULL, 0, cups_dnssd_browse_cb, &data)) == NULL) { DEBUG_puts("1cups_enum_dests: Unable to create Avahi IPPS browser, returning 0."); avahi_service_browser_free(ipp_ref); avahi_client_free(data.client); avahi_simple_poll_free(data.simple_poll); return (0); } # endif /* HAVE_SSL */ # endif /* HAVE_DNSSD */ if (msec < 0) remaining = INT_MAX; else remaining = msec; while (remaining > 0 && (!cancel || !*cancel)) { /* * Check for input... */ DEBUG_printf(("1cups_enum_dests: remaining=%d", remaining)); cups_elapsed(&curtime); # ifdef HAVE_DNSSD # ifdef HAVE_POLL pfd.fd = main_fd; pfd.events = POLLIN; nfds = poll(&pfd, 1, remaining > _CUPS_DNSSD_MAXTIME ? _CUPS_DNSSD_MAXTIME : remaining); # else FD_ZERO(&input); FD_SET(main_fd, &input); timeout.tv_sec = 0; timeout.tv_usec = 1000 * (remaining > _CUPS_DNSSD_MAXTIME ? _CUPS_DNSSD_MAXTIME : remaining); nfds = select(main_fd + 1, &input, NULL, NULL, &timeout); # endif /* HAVE_POLL */ if (nfds > 0) DNSServiceProcessResult(data.main_ref); else if (nfds < 0 && errno != EINTR && errno != EAGAIN) break; # else /* HAVE_AVAHI */ data.got_data = 0; if ((error = avahi_simple_poll_iterate(data.simple_poll, _CUPS_DNSSD_MAXTIME)) > 0) { /* * We've been told to exit the loop. Perhaps the connection to * Avahi failed. */ break; } DEBUG_printf(("1cups_enum_dests: got_data=%d", data.got_data)); # endif /* HAVE_DNSSD */ remaining -= cups_elapsed(&curtime); for (device = (_cups_dnssd_device_t *)cupsArrayFirst(data.devices), count = 0, completed = 0; device; device = (_cups_dnssd_device_t *)cupsArrayNext(data.devices)) { if (device->ref) count ++; if (device->state == _CUPS_DNSSD_ACTIVE) completed ++; if (!device->ref && device->state == _CUPS_DNSSD_NEW) { DEBUG_printf(("1cups_enum_dests: Querying '%s'.", device->fullName)); # ifdef HAVE_DNSSD device->ref = data.main_ref; if (DNSServiceQueryRecord(&(device->ref), kDNSServiceFlagsShareConnection, 0, device->fullName, kDNSServiceType_TXT, kDNSServiceClass_IN, (DNSServiceQueryRecordReply)cups_dnssd_query_cb, &data) == kDNSServiceErr_NoError) { count ++; } else { device->ref = 0; device->state = _CUPS_DNSSD_ERROR; DEBUG_puts("1cups_enum_dests: Query failed."); } # else /* HAVE_AVAHI */ if ((device->ref = avahi_record_browser_new(data.client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, device->fullName, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_TXT, 0, cups_dnssd_query_cb, &data)) != NULL) { DEBUG_printf(("1cups_enum_dests: Query ref=%p", device->ref)); count ++; } else { device->state = _CUPS_DNSSD_ERROR; DEBUG_printf(("1cups_enum_dests: Query failed: %s", avahi_strerror(avahi_client_errno(data.client)))); } # endif /* HAVE_DNSSD */ } else if (device->ref && device->state == _CUPS_DNSSD_PENDING) { completed ++; DEBUG_printf(("1cups_enum_dests: Query for \"%s\" is complete.", device->fullName)); if ((device->type & mask) == type) { DEBUG_printf(("1cups_enum_dests: Add callback for \"%s\".", device->dest.name)); if (!(*cb)(user_data, CUPS_DEST_FLAGS_NONE, &device->dest)) { remaining = -1; break; } } device->state = _CUPS_DNSSD_ACTIVE; } } # ifdef HAVE_AVAHI DEBUG_printf(("1cups_enum_dests: remaining=%d, browsers=%d, completed=%d, count=%d, devices count=%d", remaining, data.browsers, completed, count, cupsArrayCount(data.devices))); if (data.browsers == 0 && completed == cupsArrayCount(data.devices)) break; # else DEBUG_printf(("1cups_enum_dests: remaining=%d, completed=%d, count=%d, devices count=%d", remaining, completed, count, cupsArrayCount(data.devices))); if (completed == cupsArrayCount(data.devices)) break; # endif /* HAVE_AVAHI */ } #endif /* HAVE_DNSSD || HAVE_AVAHI */ /* * Return... */ enum_finished: #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) cupsArrayDelete(data.devices); # ifdef HAVE_DNSSD if (ipp_ref) DNSServiceRefDeallocate(ipp_ref); if (local_ipp_ref) DNSServiceRefDeallocate(local_ipp_ref); # ifdef HAVE_SSL if (ipps_ref) DNSServiceRefDeallocate(ipps_ref); if (local_ipps_ref) DNSServiceRefDeallocate(local_ipps_ref); # endif /* HAVE_SSL */ if (data.main_ref) DNSServiceRefDeallocate(data.main_ref); # else /* HAVE_AVAHI */ if (ipp_ref) avahi_service_browser_free(ipp_ref); # ifdef HAVE_SSL if (ipps_ref) avahi_service_browser_free(ipps_ref); # endif /* HAVE_SSL */ if (data.client) avahi_client_free(data.client); if (data.simple_poll) avahi_simple_poll_free(data.simple_poll); # endif /* HAVE_DNSSD */ #endif /* HAVE_DNSSD || HAVE_AVAHI */ DEBUG_puts("1cups_enum_dests: Returning 1."); return (1); } /* * 'cups_find_dest()' - Find a destination using a binary search. */ static int /* O - Index of match */ cups_find_dest(const char *name, /* I - Destination name */ const char *instance, /* I - Instance or NULL */ int num_dests, /* I - Number of destinations */ cups_dest_t *dests, /* I - Destinations */ int prev, /* I - Previous index */ int *rdiff) /* O - Difference of match */ { int left, /* Low mark for binary search */ right, /* High mark for binary search */ current, /* Current index */ diff; /* Result of comparison */ cups_dest_t key; /* Search key */ key.name = (char *)name; key.instance = (char *)instance; if (prev >= 0) { /* * Start search on either side of previous... */ if ((diff = cups_compare_dests(&key, dests + prev)) == 0 || (diff < 0 && prev == 0) || (diff > 0 && prev == (num_dests - 1))) { *rdiff = diff; return (prev); } else if (diff < 0) { /* * Start with previous on right side... */ left = 0; right = prev; } else { /* * Start wih previous on left side... */ left = prev; right = num_dests - 1; } } else { /* * Start search in the middle... */ left = 0; right = num_dests - 1; } do { current = (left + right) / 2; diff = cups_compare_dests(&key, dests + current); if (diff == 0) break; else if (diff < 0) right = current; else left = current; } while ((right - left) > 1); if (diff != 0) { /* * Check the last 1 or 2 elements... */ if ((diff = cups_compare_dests(&key, dests + left)) <= 0) current = left; else { diff = cups_compare_dests(&key, dests + right); current = right; } } /* * Return the closest destination and the difference... */ *rdiff = diff; return (current); } /* * 'cups_get_cb()' - Collect enumerated destinations. */ static int /* O - 1 to continue, 0 to stop */ cups_get_cb(_cups_getdata_t *data, /* I - Data from cupsGetDests */ unsigned flags, /* I - Enumeration flags */ cups_dest_t *dest) /* I - Destination */ { if (flags & CUPS_DEST_FLAGS_REMOVED) { /* * Remove destination from array... */ data->num_dests = cupsRemoveDest(dest->name, dest->instance, data->num_dests, &data->dests); } else { /* * Add destination to array... */ data->num_dests = cupsCopyDest(dest, data->num_dests, &data->dests); } return (1); } /* * 'cups_get_default()' - Get the default destination from an lpoptions file. */ static char * /* O - Default destination or NULL */ cups_get_default(const char *filename, /* I - File to read */ char *namebuf, /* I - Name buffer */ size_t namesize, /* I - Size of name buffer */ const char **instance) /* I - Instance */ { cups_file_t *fp; /* lpoptions file */ char line[8192], /* Line from file */ *value, /* Value for line */ *nameptr; /* Pointer into name */ int linenum; /* Current line */ *namebuf = '\0'; if ((fp = cupsFileOpen(filename, "r")) != NULL) { linenum = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { if (!_cups_strcasecmp(line, "default") && value) { strlcpy(namebuf, value, namesize); if ((nameptr = strchr(namebuf, ' ')) != NULL) *nameptr = '\0'; if ((nameptr = strchr(namebuf, '\t')) != NULL) *nameptr = '\0'; if ((nameptr = strchr(namebuf, '/')) != NULL) *nameptr++ = '\0'; *instance = nameptr; break; } } cupsFileClose(fp); } return (*namebuf ? namebuf : NULL); } /* * 'cups_get_dests()' - Get destinations from a file. */ static int /* O - Number of destinations */ cups_get_dests( const char *filename, /* I - File to read from */ const char *match_name, /* I - Destination name we want */ const char *match_inst, /* I - Instance name we want */ int user_default_set, /* I - User default printer set? */ int num_dests, /* I - Number of destinations */ cups_dest_t **dests) /* IO - Destinations */ { int i; /* Looping var */ cups_dest_t *dest; /* Current destination */ cups_file_t *fp; /* File pointer */ char line[8192], /* Line from file */ *lineptr, /* Pointer into line */ *name, /* Name of destination/option */ *instance; /* Instance of destination */ int linenum; /* Current line number */ DEBUG_printf(("7cups_get_dests(filename=\"%s\", match_name=\"%s\", match_inst=\"%s\", user_default_set=%d, num_dests=%d, dests=%p)", filename, match_name, match_inst, user_default_set, num_dests, (void *)dests)); /* * Try to open the file... */ if ((fp = cupsFileOpen(filename, "r")) == NULL) return (num_dests); /* * Read each printer; each line looks like: * * Dest name[/instance] options * Default name[/instance] options */ linenum = 0; while (cupsFileGetConf(fp, line, sizeof(line), &lineptr, &linenum)) { /* * See what type of line it is... */ DEBUG_printf(("9cups_get_dests: linenum=%d line=\"%s\" lineptr=\"%s\"", linenum, line, lineptr)); if ((_cups_strcasecmp(line, "dest") && _cups_strcasecmp(line, "default")) || !lineptr) { DEBUG_puts("9cups_get_dests: Not a dest or default line..."); continue; } name = lineptr; /* * Search for an instance... */ while (!isspace(*lineptr & 255) && *lineptr && *lineptr != '/') lineptr ++; if (*lineptr == '/') { /* * Found an instance... */ *lineptr++ = '\0'; instance = lineptr; /* * Search for an instance... */ while (!isspace(*lineptr & 255) && *lineptr) lineptr ++; } else instance = NULL; if (*lineptr) *lineptr++ = '\0'; DEBUG_printf(("9cups_get_dests: name=\"%s\", instance=\"%s\"", name, instance)); /* * See if the primary instance of the destination exists; if not, * ignore this entry and move on... */ if (match_name) { if (_cups_strcasecmp(name, match_name) || (!instance && match_inst) || (instance && !match_inst) || (instance && _cups_strcasecmp(instance, match_inst))) continue; dest = *dests; } else if (cupsGetDest(name, NULL, num_dests, *dests) == NULL) { DEBUG_puts("9cups_get_dests: Not found!"); continue; } else { /* * Add the destination... */ num_dests = cupsAddDest(name, instance, num_dests, dests); if ((dest = cupsGetDest(name, instance, num_dests, *dests)) == NULL) { /* * Out of memory! */ DEBUG_puts("9cups_get_dests: Out of memory!"); break; } } /* * Add options until we hit the end of the line... */ dest->num_options = cupsParseOptions(lineptr, dest->num_options, &(dest->options)); /* * If we found what we were looking for, stop now... */ if (match_name) break; /* * Set this as default if needed... */ if (!user_default_set && !_cups_strcasecmp(line, "default")) { DEBUG_puts("9cups_get_dests: Setting as default..."); for (i = 0; i < num_dests; i ++) (*dests)[i].is_default = 0; dest->is_default = 1; } } /* * Close the file and return... */ cupsFileClose(fp); return (num_dests); } /* * 'cups_make_string()' - Make a comma-separated string of values from an IPP * attribute. */ static char * /* O - New string */ cups_make_string( ipp_attribute_t *attr, /* I - Attribute to convert */ char *buffer, /* I - Buffer */ size_t bufsize) /* I - Size of buffer */ { int i; /* Looping var */ char *ptr, /* Pointer into buffer */ *end, /* Pointer to end of buffer */ *valptr; /* Pointer into string attribute */ /* * Return quickly if we have a single string value... */ if (attr->num_values == 1 && attr->value_tag != IPP_TAG_INTEGER && attr->value_tag != IPP_TAG_ENUM && attr->value_tag != IPP_TAG_BOOLEAN && attr->value_tag != IPP_TAG_RANGE) return (attr->values[0].string.text); /* * Copy the values to the string, separating with commas and escaping strings * as needed... */ end = buffer + bufsize - 1; for (i = 0, ptr = buffer; i < attr->num_values && ptr < end; i ++) { if (i) *ptr++ = ','; switch (attr->value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : snprintf(ptr, (size_t)(end - ptr + 1), "%d", attr->values[i].integer); break; case IPP_TAG_BOOLEAN : if (attr->values[i].boolean) strlcpy(ptr, "true", (size_t)(end - ptr + 1)); else strlcpy(ptr, "false", (size_t)(end - ptr + 1)); break; case IPP_TAG_RANGE : if (attr->values[i].range.lower == attr->values[i].range.upper) snprintf(ptr, (size_t)(end - ptr + 1), "%d", attr->values[i].range.lower); else snprintf(ptr, (size_t)(end - ptr + 1), "%d-%d", attr->values[i].range.lower, attr->values[i].range.upper); break; default : for (valptr = attr->values[i].string.text; *valptr && ptr < end;) { if (strchr(" \t\n\\\'\"", *valptr)) { if (ptr >= (end - 1)) break; *ptr++ = '\\'; } *ptr++ = *valptr++; } *ptr = '\0'; break; } ptr += strlen(ptr); } *ptr = '\0'; return (buffer); } /* * 'cups_name_cb()' - Find an enumerated destination. */ static int /* O - 1 to continue, 0 to stop */ cups_name_cb(_cups_namedata_t *data, /* I - Data from cupsGetNamedDest */ unsigned flags, /* I - Enumeration flags */ cups_dest_t *dest) /* I - Destination */ { DEBUG_printf(("2cups_name_cb(data=%p(%s), flags=%x, dest=%p(%s)", (void *)data, data->name, flags, (void *)dest, dest->name)); if (!(flags & CUPS_DEST_FLAGS_REMOVED) && !dest->instance && !strcasecmp(data->name, dest->name)) { /* * Copy destination and stop enumeration... */ cupsCopyDest(dest, 0, &data->dest); return (0); } return (1); } /* * 'cups_queue_name()' - Create a local queue name based on the service name. */ static void cups_queue_name( char *name, /* I - Name buffer */ const char *serviceName, /* I - Service name */ size_t namesize) /* I - Size of name buffer */ { const char *ptr; /* Pointer into serviceName */ char *nameptr; /* Pointer into name */ for (nameptr = name, ptr = serviceName; *ptr && nameptr < (name + namesize - 1); ptr ++) { /* * Sanitize the printer name... */ if (_cups_isalnum(*ptr)) *nameptr++ = *ptr; else if (nameptr == name || nameptr[-1] != '_') *nameptr++ = '_'; } *nameptr = '\0'; } cups-2.2.7/cups/dir.c000664 000765 000024 00000016766 13255074424 015067 0ustar00msweetstaff000000 000000 /* * Directory routines for CUPS. * * This set of APIs abstracts enumeration of directory entries. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2005 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "string-private.h" #include "debug-private.h" #include "dir.h" /* * Windows implementation... */ #ifdef WIN32 # include /* * Types and structures... */ struct _cups_dir_s /**** Directory data structure ****/ { char directory[1024]; /* Directory filename */ HANDLE dir; /* Directory handle */ cups_dentry_t entry; /* Directory entry */ }; /* * '_cups_dir_time()' - Convert a FILETIME value to a UNIX time value. */ time_t /* O - UNIX time */ _cups_dir_time(FILETIME ft) /* I - File time */ { ULONGLONG val; /* File time in 0.1 usecs */ /* * Convert file time (1/10 microseconds since Jan 1, 1601) to UNIX * time (seconds since Jan 1, 1970). There are 11,644,732,800 seconds * between them... */ val = ft.dwLowDateTime + ((ULONGLONG)ft.dwHighDateTime << 32); return ((time_t)(val / 10000000 - 11644732800)); } /* * 'cupsDirClose()' - Close a directory. * * @since CUPS 1.2/macOS 10.5@ */ void cupsDirClose(cups_dir_t *dp) /* I - Directory pointer */ { /* * Range check input... */ if (!dp) return; /* * Close an open directory handle... */ if (dp->dir != INVALID_HANDLE_VALUE) FindClose(dp->dir); /* * Free memory used... */ free(dp); } /* * 'cupsDirOpen()' - Open a directory. * * @since CUPS 1.2/macOS 10.5@ */ cups_dir_t * /* O - Directory pointer or @code NULL@ if the directory could not be opened. */ cupsDirOpen(const char *directory) /* I - Directory name */ { cups_dir_t *dp; /* Directory */ /* * Range check input... */ if (!directory) return (NULL); /* * Allocate memory for the directory structure... */ dp = (cups_dir_t *)calloc(1, sizeof(cups_dir_t)); if (!dp) return (NULL); /* * Copy the directory name for later use... */ dp->dir = INVALID_HANDLE_VALUE; strlcpy(dp->directory, directory, sizeof(dp->directory)); /* * Return the new directory structure... */ return (dp); } /* * 'cupsDirRead()' - Read the next directory entry. * * @since CUPS 1.2/macOS 10.5@ */ cups_dentry_t * /* O - Directory entry or @code NULL@ if there are no more */ cupsDirRead(cups_dir_t *dp) /* I - Directory pointer */ { WIN32_FIND_DATA entry; /* Directory entry data */ /* * Range check input... */ if (!dp) return (NULL); /* * See if we have already started finding files... */ if (dp->dir == INVALID_HANDLE_VALUE) { /* * No, find the first file... */ dp->dir = FindFirstFile(dp->directory, &entry); if (dp->dir == INVALID_HANDLE_VALUE) return (NULL); } else if (!FindNextFile(dp->dir, &entry)) return (NULL); /* * Copy the name over and convert the file information... */ strlcpy(dp->entry.filename, entry.cFileName, sizeof(dp->entry.filename)); if (entry.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) dp->entry.fileinfo.st_mode = 0755 | S_IFDIR; else dp->entry.fileinfo.st_mode = 0644; dp->entry.fileinfo.st_atime = _cups_dir_time(entry.ftLastAccessTime); dp->entry.fileinfo.st_ctime = _cups_dir_time(entry.ftCreationTime); dp->entry.fileinfo.st_mtime = _cups_dir_time(entry.ftLastWriteTime); dp->entry.fileinfo.st_size = entry.nFileSizeLow + ((unsigned long long)entry.nFileSizeHigh << 32); /* * Return the entry... */ return (&(dp->entry)); } /* * 'cupsDirRewind()' - Rewind to the start of the directory. * * @since CUPS 1.2/macOS 10.5@ */ void cupsDirRewind(cups_dir_t *dp) /* I - Directory pointer */ { /* * Range check input... */ if (!dp) return; /* * Close an open directory handle... */ if (dp->dir != INVALID_HANDLE_VALUE) { FindClose(dp->dir); dp->dir = INVALID_HANDLE_VALUE; } } #else /* * POSIX implementation... */ # include # include /* * Types and structures... */ struct _cups_dir_s /**** Directory data structure ****/ { char directory[1024]; /* Directory filename */ DIR *dir; /* Directory file */ cups_dentry_t entry; /* Directory entry */ }; /* * 'cupsDirClose()' - Close a directory. * * @since CUPS 1.2/macOS 10.5@ */ void cupsDirClose(cups_dir_t *dp) /* I - Directory pointer */ { DEBUG_printf(("cupsDirClose(dp=%p)", (void *)dp)); /* * Range check input... */ if (!dp) return; /* * Close the directory and free memory... */ closedir(dp->dir); free(dp); } /* * 'cupsDirOpen()' - Open a directory. * * @since CUPS 1.2/macOS 10.5@ */ cups_dir_t * /* O - Directory pointer or @code NULL@ if the directory could not be opened. */ cupsDirOpen(const char *directory) /* I - Directory name */ { cups_dir_t *dp; /* Directory */ DEBUG_printf(("cupsDirOpen(directory=\"%s\")", directory)); /* * Range check input... */ if (!directory) return (NULL); /* * Allocate memory for the directory structure... */ dp = (cups_dir_t *)calloc(1, sizeof(cups_dir_t)); if (!dp) return (NULL); /* * Open the directory... */ dp->dir = opendir(directory); if (!dp->dir) { free(dp); return (NULL); } /* * Copy the directory name for later use... */ strlcpy(dp->directory, directory, sizeof(dp->directory)); /* * Return the new directory structure... */ return (dp); } /* * 'cupsDirRead()' - Read the next directory entry. * * @since CUPS 1.2/macOS 10.5@ */ cups_dentry_t * /* O - Directory entry or @code NULL@ when there are no more */ cupsDirRead(cups_dir_t *dp) /* I - Directory pointer */ { struct dirent *entry; /* Pointer to entry */ char filename[1024]; /* Full filename */ DEBUG_printf(("2cupsDirRead(dp=%p)", (void *)dp)); /* * Range check input... */ if (!dp) return (NULL); /* * Try reading an entry that is not "." or ".."... */ for (;;) { /* * Read the next entry... */ if ((entry = readdir(dp->dir)) == NULL) { DEBUG_puts("3cupsDirRead: readdir() returned a NULL pointer!"); return (NULL); } DEBUG_printf(("4cupsDirRead: readdir() returned \"%s\"...", entry->d_name)); /* * Skip "." and ".."... */ if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, "..")) continue; /* * Copy the name over and get the file information... */ strlcpy(dp->entry.filename, entry->d_name, sizeof(dp->entry.filename)); snprintf(filename, sizeof(filename), "%s/%s", dp->directory, entry->d_name); if (stat(filename, &(dp->entry.fileinfo))) { DEBUG_printf(("3cupsDirRead: stat() failed for \"%s\" - %s...", filename, strerror(errno))); continue; } /* * Return the entry... */ return (&(dp->entry)); } } /* * 'cupsDirRewind()' - Rewind to the start of the directory. * * @since CUPS 1.2/macOS 10.5@ */ void cupsDirRewind(cups_dir_t *dp) /* I - Directory pointer */ { DEBUG_printf(("cupsDirRewind(dp=%p)", (void *)dp)); /* * Range check input... */ if (!dp) return; /* * Rewind the directory... */ rewinddir(dp->dir); } #endif /* WIN32 */ cups-2.2.7/cups/dir.h000664 000765 000024 00000002613 13255074424 015056 0ustar00msweetstaff000000 000000 /* * Public directory definitions for CUPS. * * This set of APIs abstracts enumeration of directory entries. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #ifndef _CUPS_DIR_H_ # define _CUPS_DIR_H_ /* * Include necessary headers... */ # include "versioning.h" # include /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Data types... */ typedef struct _cups_dir_s cups_dir_t; /**** Directory type ****/ typedef struct cups_dentry_s /**** Directory entry type ****/ { char filename[260]; /* File name */ struct stat fileinfo; /* File information */ } cups_dentry_t; /* * Prototypes... */ extern void cupsDirClose(cups_dir_t *dp) _CUPS_API_1_2; extern cups_dir_t *cupsDirOpen(const char *directory) _CUPS_API_1_2; extern cups_dentry_t *cupsDirRead(cups_dir_t *dp) _CUPS_API_1_2; extern void cupsDirRewind(cups_dir_t *dp) _CUPS_API_1_2; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_DIR_H_ */ cups-2.2.7/cups/encode.c000664 000765 000024 00000063663 13255074424 015544 0ustar00msweetstaff000000 000000 /* * Option encoding routines for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" /* * Local list of option names, the value tags they should use, and the list of * supported operations... * * **** THIS LIST MUST BE SORTED BY ATTRIBUTE NAME **** */ static const ipp_op_t ipp_job_creation[] = { IPP_OP_PRINT_JOB, IPP_OP_PRINT_URI, IPP_OP_VALIDATE_JOB, IPP_OP_CREATE_JOB, IPP_OP_HOLD_JOB, IPP_OP_SET_JOB_ATTRIBUTES, IPP_OP_CUPS_NONE }; static const ipp_op_t ipp_doc_creation[] = { IPP_OP_PRINT_JOB, IPP_OP_PRINT_URI, IPP_OP_SEND_DOCUMENT, IPP_OP_SEND_URI, IPP_OP_SET_JOB_ATTRIBUTES, IPP_OP_SET_DOCUMENT_ATTRIBUTES, IPP_OP_CUPS_NONE }; static const ipp_op_t ipp_sub_creation[] = { IPP_OP_PRINT_JOB, IPP_OP_PRINT_URI, IPP_OP_CREATE_JOB, IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS, IPP_OP_CREATE_JOB_SUBSCRIPTIONS, IPP_OP_CUPS_NONE }; static const ipp_op_t ipp_all_print[] = { IPP_OP_PRINT_JOB, IPP_OP_PRINT_URI, IPP_OP_VALIDATE_JOB, IPP_OP_CREATE_JOB, IPP_OP_SEND_DOCUMENT, IPP_OP_SEND_URI, IPP_OP_CUPS_NONE }; static const ipp_op_t ipp_set_printer[] = { IPP_OP_SET_PRINTER_ATTRIBUTES, IPP_OP_CUPS_ADD_MODIFY_PRINTER, IPP_OP_CUPS_ADD_MODIFY_CLASS, IPP_OP_CUPS_NONE }; static const ipp_op_t cups_schemes[] = { IPP_OP_CUPS_GET_DEVICES, IPP_OP_CUPS_GET_PPDS, IPP_OP_CUPS_NONE }; static const ipp_op_t cups_get_ppds[] = { IPP_OP_CUPS_GET_PPDS, IPP_OP_CUPS_NONE }; static const ipp_op_t cups_ppd_name[] = { IPP_OP_CUPS_ADD_MODIFY_PRINTER, IPP_OP_CUPS_GET_PPD, IPP_OP_CUPS_NONE }; static const _ipp_option_t ipp_options[] = { { 1, "auth-info", IPP_TAG_TEXT, IPP_TAG_JOB }, { 1, "auth-info-default", IPP_TAG_TEXT, IPP_TAG_PRINTER }, { 1, "auth-info-required", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, { 0, "blackplot", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, { 0, "blackplot-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, { 0, "brightness", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "brightness-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "columns", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "columns-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "compression", IPP_TAG_KEYWORD, IPP_TAG_OPERATION, IPP_TAG_ZERO, ipp_doc_creation }, { 0, "copies", IPP_TAG_INTEGER, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "copies-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "date-time-at-completed",IPP_TAG_DATE, IPP_TAG_ZERO }, /* never send as option */ { 0, "date-time-at-creation", IPP_TAG_DATE, IPP_TAG_ZERO }, /* never send as option */ { 0, "date-time-at-processing",IPP_TAG_DATE, IPP_TAG_ZERO }, /* never send as option */ { 0, "device-uri", IPP_TAG_URI, IPP_TAG_PRINTER }, { 1, "document-copies", IPP_TAG_RANGE, IPP_TAG_JOB, IPP_TAG_DOCUMENT, ipp_doc_creation }, { 0, "document-format", IPP_TAG_MIMETYPE, IPP_TAG_OPERATION, IPP_TAG_ZERO, ipp_doc_creation }, { 0, "document-format-default", IPP_TAG_MIMETYPE, IPP_TAG_PRINTER }, { 1, "document-numbers", IPP_TAG_RANGE, IPP_TAG_JOB, IPP_TAG_DOCUMENT, ipp_all_print }, { 1, "exclude-schemes", IPP_TAG_NAME, IPP_TAG_OPERATION, IPP_TAG_ZERO, cups_schemes }, { 1, "finishings", IPP_TAG_ENUM, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 1, "finishings-default", IPP_TAG_ENUM, IPP_TAG_PRINTER }, { 0, "fit-to-page", IPP_TAG_BOOLEAN, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "fit-to-page-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, { 0, "fitplot", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, { 0, "fitplot-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, { 0, "gamma", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "gamma-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "hue", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "hue-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 1, "include-schemes", IPP_TAG_NAME, IPP_TAG_OPERATION, IPP_TAG_ZERO, cups_schemes }, { 0, "job-account-id", IPP_TAG_NAME, IPP_TAG_JOB }, { 0, "job-account-id-default",IPP_TAG_NAME, IPP_TAG_PRINTER }, { 0, "job-accounting-user-id", IPP_TAG_NAME, IPP_TAG_JOB }, { 0, "job-accounting-user-id-default", IPP_TAG_NAME, IPP_TAG_PRINTER }, { 0, "job-authorization-uri", IPP_TAG_URI, IPP_TAG_OPERATION }, { 0, "job-cancel-after", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "job-cancel-after-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "job-hold-until", IPP_TAG_KEYWORD, IPP_TAG_JOB }, { 0, "job-id", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */ { 0, "job-impressions", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */ { 0, "job-impressions-completed", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */ { 0, "job-k-limit", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "job-k-octets", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */ { 0, "job-k-octets-completed",IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */ { 0, "job-media-sheets", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */ { 0, "job-media-sheets-completed", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */ { 0, "job-page-limit", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "job-password", IPP_TAG_STRING, IPP_TAG_OPERATION, IPP_TAG_ZERO, ipp_job_creation }, { 0, "job-password-encryption", IPP_TAG_KEYWORD, IPP_TAG_OPERATION, IPP_TAG_ZERO, ipp_job_creation }, { 0, "job-priority", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "job-quota-period", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 1, "job-sheets", IPP_TAG_NAME, IPP_TAG_JOB }, { 1, "job-sheets-default", IPP_TAG_NAME, IPP_TAG_PRINTER }, { 0, "job-state", IPP_TAG_ENUM, IPP_TAG_ZERO }, /* never send as option */ { 0, "job-state-message", IPP_TAG_TEXT, IPP_TAG_ZERO }, /* never send as option */ { 0, "job-state-reasons", IPP_TAG_KEYWORD, IPP_TAG_ZERO }, /* never send as option */ { 0, "job-uuid", IPP_TAG_URI, IPP_TAG_JOB }, { 0, "landscape", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, { 1, "marker-change-time", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 1, "marker-colors", IPP_TAG_NAME, IPP_TAG_PRINTER }, { 1, "marker-high-levels", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 1, "marker-levels", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 1, "marker-low-levels", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "marker-message", IPP_TAG_TEXT, IPP_TAG_PRINTER }, { 1, "marker-names", IPP_TAG_NAME, IPP_TAG_PRINTER }, { 1, "marker-types", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, { 1, "media", IPP_TAG_KEYWORD, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "media-col", IPP_TAG_BEGIN_COLLECTION, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "media-col-default", IPP_TAG_BEGIN_COLLECTION, IPP_TAG_PRINTER }, { 0, "media-color", IPP_TAG_KEYWORD, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 1, "media-default", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, { 0, "media-key", IPP_TAG_KEYWORD, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "media-size", IPP_TAG_BEGIN_COLLECTION, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "media-type", IPP_TAG_KEYWORD, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "mirror", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, { 0, "mirror-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, { 0, "natural-scaling", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "natural-scaling-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "notify-charset", IPP_TAG_CHARSET, IPP_TAG_SUBSCRIPTION }, { 1, "notify-events", IPP_TAG_KEYWORD, IPP_TAG_SUBSCRIPTION }, { 1, "notify-events-default", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, { 0, "notify-lease-duration", IPP_TAG_INTEGER, IPP_TAG_SUBSCRIPTION }, { 0, "notify-lease-duration-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "notify-natural-language", IPP_TAG_LANGUAGE, IPP_TAG_SUBSCRIPTION }, { 0, "notify-pull-method", IPP_TAG_KEYWORD, IPP_TAG_SUBSCRIPTION }, { 0, "notify-recipient-uri", IPP_TAG_URI, IPP_TAG_SUBSCRIPTION }, { 0, "notify-time-interval", IPP_TAG_INTEGER, IPP_TAG_SUBSCRIPTION }, { 0, "notify-user-data", IPP_TAG_STRING, IPP_TAG_SUBSCRIPTION }, { 0, "number-up", IPP_TAG_INTEGER, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "number-up-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "orientation-requested", IPP_TAG_ENUM, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "orientation-requested-default", IPP_TAG_ENUM, IPP_TAG_PRINTER }, { 1, "overrides", IPP_TAG_BEGIN_COLLECTION, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "page-bottom", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "page-bottom-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "page-left", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "page-left-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 1, "page-ranges", IPP_TAG_RANGE, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 1, "page-ranges-default", IPP_TAG_RANGE, IPP_TAG_PRINTER }, { 0, "page-right", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "page-right-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "page-top", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "page-top-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 1, "pages", IPP_TAG_RANGE, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "penwidth", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "penwidth-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "port-monitor", IPP_TAG_NAME, IPP_TAG_PRINTER }, { 0, "ppd-device-id", IPP_TAG_TEXT, IPP_TAG_OPERATION, IPP_TAG_ZERO, cups_get_ppds }, { 0, "ppd-make", IPP_TAG_TEXT, IPP_TAG_OPERATION, IPP_TAG_ZERO, cups_get_ppds }, { 0, "ppd-make-and-model", IPP_TAG_TEXT, IPP_TAG_OPERATION, IPP_TAG_ZERO, cups_get_ppds }, { 0, "ppd-model-number", IPP_TAG_INTEGER, IPP_TAG_OPERATION, IPP_TAG_ZERO, cups_get_ppds }, { 0, "ppd-name", IPP_TAG_NAME, IPP_TAG_OPERATION, IPP_TAG_ZERO, cups_ppd_name }, { 0, "ppd-natural-language", IPP_TAG_LANGUAGE, IPP_TAG_OPERATION, IPP_TAG_ZERO, cups_get_ppds }, { 0, "ppd-product", IPP_TAG_TEXT, IPP_TAG_OPERATION, IPP_TAG_ZERO, cups_get_ppds }, { 0, "ppd-psversion", IPP_TAG_TEXT, IPP_TAG_OPERATION, IPP_TAG_ZERO, cups_get_ppds }, { 0, "ppd-type", IPP_TAG_KEYWORD, IPP_TAG_OPERATION, IPP_TAG_ZERO, cups_get_ppds }, { 0, "ppi", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "ppi-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "prettyprint", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, { 0, "prettyprint-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, { 0, "print-quality", IPP_TAG_ENUM, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "print-quality-default", IPP_TAG_ENUM, IPP_TAG_PRINTER }, { 1, "printer-commands", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, { 0, "printer-error-policy", IPP_TAG_NAME, IPP_TAG_PRINTER }, { 0, "printer-geo-location", IPP_TAG_URI, IPP_TAG_PRINTER }, { 0, "printer-info", IPP_TAG_TEXT, IPP_TAG_PRINTER }, { 0, "printer-is-accepting-jobs", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, { 0, "printer-is-shared", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, { 0, "printer-is-temporary", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, { 0, "printer-location", IPP_TAG_TEXT, IPP_TAG_PRINTER }, { 0, "printer-make-and-model", IPP_TAG_TEXT, IPP_TAG_PRINTER }, { 0, "printer-more-info", IPP_TAG_URI, IPP_TAG_PRINTER }, { 0, "printer-op-policy", IPP_TAG_NAME, IPP_TAG_PRINTER }, { 0, "printer-resolution", IPP_TAG_RESOLUTION, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "printer-state", IPP_TAG_ENUM, IPP_TAG_PRINTER }, { 0, "printer-state-change-time", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 1, "printer-state-reasons", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, { 0, "printer-type", IPP_TAG_ENUM, IPP_TAG_PRINTER }, { 0, "printer-uri", IPP_TAG_URI, IPP_TAG_OPERATION }, { 1, "printer-uri-supported", IPP_TAG_URI, IPP_TAG_PRINTER }, { 0, "queued-job-count", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "raw", IPP_TAG_MIMETYPE, IPP_TAG_OPERATION }, { 1, "requested-attributes", IPP_TAG_NAME, IPP_TAG_OPERATION }, { 1, "requesting-user-name-allowed", IPP_TAG_NAME, IPP_TAG_PRINTER }, { 1, "requesting-user-name-denied", IPP_TAG_NAME, IPP_TAG_PRINTER }, { 0, "resolution", IPP_TAG_RESOLUTION, IPP_TAG_JOB }, { 0, "resolution-default", IPP_TAG_RESOLUTION, IPP_TAG_PRINTER }, { 0, "saturation", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "saturation-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "scaling", IPP_TAG_INTEGER, IPP_TAG_JOB }, { 0, "scaling-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, { 0, "sides", IPP_TAG_KEYWORD, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "sides-default", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, { 0, "time-at-completed", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */ { 0, "time-at-creation", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */ { 0, "time-at-processing", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */ { 0, "wrap", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, { 0, "wrap-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, { 0, "x-dimension", IPP_TAG_INTEGER, IPP_TAG_JOB, IPP_TAG_DOCUMENT }, { 0, "y-dimension", IPP_TAG_INTEGER, IPP_TAG_JOB, IPP_TAG_DOCUMENT } }; /* * Local functions... */ static int compare_ipp_options(_ipp_option_t *a, _ipp_option_t *b); /* * 'cupsEncodeOptions()' - Encode printer options into IPP attributes. * * This function adds operation, job, and then subscription attributes, * in that order. Use the @link cupsEncodeOptions2@ function to add attributes * for a single group. */ void cupsEncodeOptions(ipp_t *ipp, /* I - Request to add to */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { DEBUG_printf(("cupsEncodeOptions(%p, %d, %p)", (void *)ipp, num_options, (void *)options)); /* * Add the options in the proper groups & order... */ cupsEncodeOptions2(ipp, num_options, options, IPP_TAG_OPERATION); cupsEncodeOptions2(ipp, num_options, options, IPP_TAG_JOB); cupsEncodeOptions2(ipp, num_options, options, IPP_TAG_SUBSCRIPTION); } /* * 'cupsEncodeOptions2()' - Encode printer options into IPP attributes for a group. * * This function only adds attributes for a single group. Call this * function multiple times for each group, or use @link cupsEncodeOptions@ * to add the standard groups. * * @since CUPS 1.2/macOS 10.5@ */ void cupsEncodeOptions2( ipp_t *ipp, /* I - Request to add to */ int num_options, /* I - Number of options */ cups_option_t *options, /* I - Options */ ipp_tag_t group_tag) /* I - Group to encode */ { int i, j; /* Looping vars */ int count; /* Number of values */ char *s, /* Pointer into option value */ *val, /* Pointer to option value */ *copy, /* Copy of option value */ *sep, /* Option separator */ quote; /* Quote character */ ipp_attribute_t *attr; /* IPP attribute */ ipp_tag_t value_tag; /* IPP value tag */ cups_option_t *option; /* Current option */ ipp_t *collection; /* Collection value */ int num_cols; /* Number of collection values */ cups_option_t *cols; /* Collection values */ ipp_op_t op; /* Operation for this request */ const ipp_op_t *ops; /* List of allowed operations */ DEBUG_printf(("cupsEncodeOptions2(ipp=%p(%s), num_options=%d, options=%p, group_tag=%x)", (void *)ipp, ipp ? ippOpString(ippGetOperation(ipp)) : "", num_options, (void *)options, group_tag)); /* * Range check input... */ if (!ipp || num_options < 1 || !options) return; /* * Do special handling for the document-format/raw options... */ op = ippGetOperation(ipp); if (group_tag == IPP_TAG_OPERATION && (op == IPP_OP_PRINT_JOB || op == IPP_OP_PRINT_URI || op == IPP_OP_SEND_DOCUMENT || op == IPP_OP_SEND_URI)) { /* * 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 loop through the options... */ for (i = num_options, option = options; i > 0; i --, option ++) { _ipp_option_t *match; /* Matching attribute */ /* * Skip document format options that are handled above... */ if (!_cups_strcasecmp(option->name, "raw") || !_cups_strcasecmp(option->name, "document-format") || !option->name[0]) continue; /* * Figure out the proper value and group tags for this option... */ if ((match = _ippFindOption(option->name)) != NULL) { if (match->group_tag != group_tag && match->alt_group_tag != group_tag) continue; value_tag = match->value_tag; if (match->operations) ops = match->operations; else if (group_tag == IPP_TAG_JOB) ops = ipp_job_creation; else if (group_tag == IPP_TAG_DOCUMENT) ops = ipp_doc_creation; else if (group_tag == IPP_TAG_SUBSCRIPTION) ops = ipp_sub_creation; else if (group_tag == IPP_TAG_PRINTER) ops = ipp_set_printer; else { DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name)); continue; } } else { int namelen; /* Length of name */ namelen = (int)strlen(option->name); if (namelen < 10 || (strcmp(option->name + namelen - 8, "-default") && strcmp(option->name + namelen - 10, "-supported"))) { if (group_tag != IPP_TAG_JOB && group_tag != IPP_TAG_DOCUMENT) { DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name)); continue; } } else if (group_tag != IPP_TAG_PRINTER) { DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name)); continue; } if (group_tag == IPP_TAG_JOB) ops = ipp_job_creation; else if (group_tag == IPP_TAG_DOCUMENT) ops = ipp_doc_creation; else ops = ipp_set_printer; if (!_cups_strcasecmp(option->value, "true") || !_cups_strcasecmp(option->value, "false")) value_tag = IPP_TAG_BOOLEAN; else value_tag = IPP_TAG_NAME; } /* * Verify that we send this attribute for this operation... */ while (*ops != IPP_OP_CUPS_NONE) if (op == *ops) break; else ops ++; if (*ops == IPP_OP_CUPS_NONE && op != IPP_OP_CUPS_NONE) { DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name)); continue; } /* * Count the number of values... */ if (match && match->multivalue) { for (count = 1, sep = option->value, quote = 0; *sep; sep ++) { if (*sep == quote) quote = 0; else if (!quote && (*sep == '\'' || *sep == '\"')) { /* * Skip quoted option value... */ quote = *sep++; } else if (*sep == ',' && !quote) count ++; else if (*sep == '\\' && sep[1]) sep += 2; } } else count = 1; DEBUG_printf(("2cupsEncodeOptions2: option=\"%s\", value=\"%s\", count=%d", option->name, option->value, count)); /* * Allocate memory for the attribute values... */ if ((attr = ippAddStrings(ipp, group_tag, value_tag, option->name, count, NULL, NULL)) == NULL) { /* * Ran out of memory! */ DEBUG_puts("1cupsEncodeOptions2: Ran out of memory for attributes!"); return; } if (count > 1) { /* * Make a copy of the value we can fiddle with... */ if ((copy = strdup(option->value)) == NULL) { /* * Ran out of memory! */ DEBUG_puts("1cupsEncodeOptions2: Ran out of memory for value copy!"); ippDeleteAttribute(ipp, attr); return; } val = copy; } else { /* * Since we have a single value, use the value directly... */ val = option->value; copy = NULL; } /* * Scan the value string for values... */ for (j = 0, sep = val; j < count; val = sep, j ++) { /* * Find the end of this value and mark it if needed... */ if (count > 1) { for (quote = 0; *sep; sep ++) { if (*sep == quote) { /* * Finish quoted value... */ quote = 0; } else if (!quote && (*sep == '\'' || *sep == '\"')) { /* * Handle quoted option value... */ quote = *sep; } else if (*sep == ',' && count > 1) break; else if (*sep == '\\' && sep[1]) { /* * Skip quoted character... */ memmove(sep, sep + 1, strlen(sep)); sep ++; } } if (*sep == ',') *sep++ = '\0'; } /* * Copy the option value(s) over as needed by the type... */ switch (attr->value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : /* * Integer/enumeration value... */ attr->values[j].integer = (int)strtol(val, &s, 10); DEBUG_printf(("2cupsEncodeOptions2: Added integer option value " "%d...", attr->values[j].integer)); break; case IPP_TAG_BOOLEAN : if (!_cups_strcasecmp(val, "true") || !_cups_strcasecmp(val, "on") || !_cups_strcasecmp(val, "yes")) { /* * Boolean value - true... */ attr->values[j].boolean = 1; DEBUG_puts("2cupsEncodeOptions2: Added boolean true value..."); } else { /* * Boolean value - false... */ attr->values[j].boolean = 0; DEBUG_puts("2cupsEncodeOptions2: Added boolean false value..."); } break; case IPP_TAG_RANGE : /* * Range... */ if (*val == '-') { attr->values[j].range.lower = 1; s = val; } else attr->values[j].range.lower = (int)strtol(val, &s, 10); if (*s == '-') { if (s[1]) attr->values[j].range.upper = (int)strtol(s + 1, NULL, 10); else attr->values[j].range.upper = 2147483647; } else attr->values[j].range.upper = attr->values[j].range.lower; DEBUG_printf(("2cupsEncodeOptions2: Added range option value " "%d-%d...", attr->values[j].range.lower, attr->values[j].range.upper)); break; case IPP_TAG_RESOLUTION : /* * Resolution... */ attr->values[j].resolution.xres = (int)strtol(val, &s, 10); if (*s == 'x') attr->values[j].resolution.yres = (int)strtol(s + 1, &s, 10); else attr->values[j].resolution.yres = attr->values[j].resolution.xres; if (!_cups_strcasecmp(s, "dpc") || !_cups_strcasecmp(s, "dpcm")) attr->values[j].resolution.units = IPP_RES_PER_CM; else attr->values[j].resolution.units = IPP_RES_PER_INCH; DEBUG_printf(("2cupsEncodeOptions2: Added resolution option value " "%s...", val)); break; case IPP_TAG_STRING : /* * octet-string */ attr->values[j].unknown.length = (int)strlen(val); attr->values[j].unknown.data = strdup(val); DEBUG_printf(("2cupsEncodeOptions2: Added octet-string value " "\"%s\"...", (char *)attr->values[j].unknown.data)); break; case IPP_TAG_BEGIN_COLLECTION : /* * Collection value */ num_cols = cupsParseOptions(val, 0, &cols); if ((collection = ippNew()) == NULL) { cupsFreeOptions(num_cols, cols); if (copy) free(copy); ippDeleteAttribute(ipp, attr); return; } attr->values[j].collection = collection; cupsEncodeOptions2(collection, num_cols, cols, IPP_TAG_JOB); cupsFreeOptions(num_cols, cols); break; default : if ((attr->values[j].string.text = _cupsStrAlloc(val)) == NULL) { /* * Ran out of memory! */ DEBUG_puts("1cupsEncodeOptions2: Ran out of memory for string!"); if (copy) free(copy); ippDeleteAttribute(ipp, attr); return; } DEBUG_printf(("2cupsEncodeOptions2: Added string value \"%s\"...", val)); break; } } if (copy) free(copy); } } #ifdef DEBUG /* * '_ippCheckOptions()' - Validate that the option array is sorted properly. */ const char * /* O - First out-of-order option or NULL */ _ippCheckOptions(void) { int i; /* Looping var */ for (i = 0; i < (int)(sizeof(ipp_options) / sizeof(ipp_options[0]) - 1); i ++) if (strcmp(ipp_options[i].name, ipp_options[i + 1].name) >= 0) return (ipp_options[i + 1].name); return (NULL); } #endif /* DEBUG */ /* * '_ippFindOption()' - Find the attribute information for an option. */ _ipp_option_t * /* O - Attribute information */ _ippFindOption(const char *name) /* I - Option/attribute name */ { _ipp_option_t key; /* Search key */ /* * Lookup the proper value and group tags for this option... */ key.name = name; return ((_ipp_option_t *)bsearch(&key, ipp_options, sizeof(ipp_options) / sizeof(ipp_options[0]), sizeof(ipp_options[0]), (int (*)(const void *, const void *)) compare_ipp_options)); } /* * 'compare_ipp_options()' - Compare two IPP options. */ static int /* O - Result of comparison */ compare_ipp_options(_ipp_option_t *a, /* I - First option */ _ipp_option_t *b) /* I - Second option */ { return (strcmp(a->name, b->name)); } cups-2.2.7/cups/file-private.h000664 000765 000024 00000007146 13255074424 016675 0ustar00msweetstaff000000 000000 /* * Private file definitions for CUPS. * * Since stdio files max out at 256 files on many systems, we have to * write similar functions without this limit. At the same time, using * our own file functions allows us to provide transparent support of * different line endings, gzip'd print files, PPD files, etc. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_FILE_PRIVATE_H_ # define _CUPS_FILE_PRIVATE_H_ /* * Include necessary headers... */ # include "cups-private.h" # include # include # include # include # ifdef HAVE_LIBZ # include # endif /* HAVE_LIBZ */ # ifdef WIN32 # include # include # endif /* WIN32 */ /* * Some operating systems support large files via open flag O_LARGEFILE... */ # ifndef O_LARGEFILE # define O_LARGEFILE 0 # endif /* !O_LARGEFILE */ /* * Some operating systems don't define O_BINARY, which is used by Microsoft * and IBM to flag binary files... */ # ifndef O_BINARY # define O_BINARY 0 # endif /* !O_BINARY */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Types and structures... */ typedef enum /**** _cupsFileCheck return values ****/ { _CUPS_FILE_CHECK_OK = 0, /* Everything OK */ _CUPS_FILE_CHECK_MISSING = 1, /* File is missing */ _CUPS_FILE_CHECK_PERMISSIONS = 2, /* File (or parent dir) has bad perms */ _CUPS_FILE_CHECK_WRONG_TYPE = 3, /* File has wrong type */ _CUPS_FILE_CHECK_RELATIVE_PATH = 4 /* File contains a relative path */ } _cups_fc_result_t; typedef enum /**** _cupsFileCheck file type values ****/ { _CUPS_FILE_CHECK_FILE = 0, /* Check the file and parent directory */ _CUPS_FILE_CHECK_PROGRAM = 1, /* Check the program and parent directory */ _CUPS_FILE_CHECK_FILE_ONLY = 2, /* Check the file only */ _CUPS_FILE_CHECK_DIRECTORY = 3 /* Check the directory */ } _cups_fc_filetype_t; typedef void (*_cups_fc_func_t)(void *context, _cups_fc_result_t result, const char *message); struct _cups_file_s /**** CUPS file structure... ****/ { int fd; /* File descriptor */ char mode, /* Mode ('r' or 'w') */ compressed, /* Compression used? */ is_stdio, /* stdin/out/err? */ eof, /* End of file? */ buf[4096], /* Buffer */ *ptr, /* Pointer into buffer */ *end; /* End of buffer data */ off_t pos, /* Position in file */ bufpos; /* File position for start of buffer */ #ifdef HAVE_LIBZ z_stream stream; /* (De)compression stream */ Bytef cbuf[4096]; /* (De)compression buffer */ uLong crc; /* (De)compression CRC */ #endif /* HAVE_LIBZ */ char *printf_buffer; /* cupsFilePrintf buffer */ size_t printf_size; /* Size of cupsFilePrintf buffer */ }; /* * Prototypes... */ extern _cups_fc_result_t _cupsFileCheck(const char *filename, _cups_fc_filetype_t filetype, int dorootchecks, _cups_fc_func_t cb, void *context); extern void _cupsFileCheckFilter(void *context, _cups_fc_result_t result, const char *message); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_FILE_PRIVATE_H_ */ cups-2.2.7/cups/file.c000664 000765 000024 00000157102 13255074424 015216 0ustar00msweetstaff000000 000000 /* * File functions for CUPS. * * Since stdio files max out at 256 files on many systems, we have to * write similar functions without this limit. At the same time, using * our own file functions allows us to provide transparent support of * different line endings, gzip'd print files, PPD files, etc. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "file-private.h" #include #include /* * Local functions... */ #ifdef HAVE_LIBZ static ssize_t cups_compress(cups_file_t *fp, const char *buf, size_t bytes); #endif /* HAVE_LIBZ */ static ssize_t cups_fill(cups_file_t *fp); static int cups_open(const char *filename, int mode); static ssize_t cups_read(cups_file_t *fp, char *buf, size_t bytes); static ssize_t cups_write(cups_file_t *fp, const char *buf, size_t bytes); #ifndef WIN32 /* * '_cupsFileCheck()' - Check the permissions of the given filename. */ _cups_fc_result_t /* O - Check result */ _cupsFileCheck( const char *filename, /* I - Filename to check */ _cups_fc_filetype_t filetype, /* I - Type of file checks? */ int dorootchecks, /* I - Check for root permissions? */ _cups_fc_func_t cb, /* I - Callback function */ void *context) /* I - Context pointer for callback */ { struct stat fileinfo; /* File information */ char message[1024], /* Message string */ temp[1024], /* Parent directory filename */ *ptr; /* Pointer into parent directory */ _cups_fc_result_t result; /* Check result */ /* * Does the filename contain a relative path ("../")? */ if (strstr(filename, "../")) { /* * Yes, fail it! */ result = _CUPS_FILE_CHECK_RELATIVE_PATH; goto finishup; } /* * Does the program even exist and is it accessible? */ if (stat(filename, &fileinfo)) { /* * Nope... */ result = _CUPS_FILE_CHECK_MISSING; goto finishup; } /* * Check the execute bit... */ result = _CUPS_FILE_CHECK_OK; switch (filetype) { case _CUPS_FILE_CHECK_DIRECTORY : if (!S_ISDIR(fileinfo.st_mode)) result = _CUPS_FILE_CHECK_WRONG_TYPE; break; default : if (!S_ISREG(fileinfo.st_mode)) result = _CUPS_FILE_CHECK_WRONG_TYPE; break; } if (result) goto finishup; /* * Are we doing root checks? */ if (!dorootchecks) { /* * Nope, so anything (else) goes... */ goto finishup; } /* * Verify permission of the file itself: * * 1. Must be owned by root * 2. Must not be writable by group * 3. Must not be setuid * 4. Must not be writable by others */ if (fileinfo.st_uid || /* 1. Must be owned by root */ (fileinfo.st_mode & S_IWGRP) || /* 2. Must not be writable by group */ (fileinfo.st_mode & S_ISUID) || /* 3. Must not be setuid */ (fileinfo.st_mode & S_IWOTH)) /* 4. Must not be writable by others */ { result = _CUPS_FILE_CHECK_PERMISSIONS; goto finishup; } if (filetype == _CUPS_FILE_CHECK_DIRECTORY || filetype == _CUPS_FILE_CHECK_FILE_ONLY) goto finishup; /* * Now check the containing directory... */ strlcpy(temp, filename, sizeof(temp)); if ((ptr = strrchr(temp, '/')) != NULL) { if (ptr == temp) ptr[1] = '\0'; else *ptr = '\0'; } if (stat(temp, &fileinfo)) { /* * Doesn't exist?!? */ result = _CUPS_FILE_CHECK_MISSING; filetype = _CUPS_FILE_CHECK_DIRECTORY; filename = temp; goto finishup; } if (fileinfo.st_uid || /* 1. Must be owned by root */ (fileinfo.st_mode & S_IWGRP) || /* 2. Must not be writable by group */ (fileinfo.st_mode & S_ISUID) || /* 3. Must not be setuid */ (fileinfo.st_mode & S_IWOTH)) /* 4. Must not be writable by others */ { result = _CUPS_FILE_CHECK_PERMISSIONS; filetype = _CUPS_FILE_CHECK_DIRECTORY; filename = temp; } /* * Common return point... */ finishup: if (cb) { cups_lang_t *lang = cupsLangDefault(); /* Localization information */ switch (result) { case _CUPS_FILE_CHECK_OK : if (filetype == _CUPS_FILE_CHECK_DIRECTORY) snprintf(message, sizeof(message), _cupsLangString(lang, _("Directory \"%s\" permissions OK " "(0%o/uid=%d/gid=%d).")), filename, fileinfo.st_mode, (int)fileinfo.st_uid, (int)fileinfo.st_gid); else snprintf(message, sizeof(message), _cupsLangString(lang, _("File \"%s\" permissions OK " "(0%o/uid=%d/gid=%d).")), filename, fileinfo.st_mode, (int)fileinfo.st_uid, (int)fileinfo.st_gid); break; case _CUPS_FILE_CHECK_MISSING : if (filetype == _CUPS_FILE_CHECK_DIRECTORY) snprintf(message, sizeof(message), _cupsLangString(lang, _("Directory \"%s\" not available: " "%s")), filename, strerror(errno)); else snprintf(message, sizeof(message), _cupsLangString(lang, _("File \"%s\" not available: %s")), filename, strerror(errno)); break; case _CUPS_FILE_CHECK_PERMISSIONS : if (filetype == _CUPS_FILE_CHECK_DIRECTORY) snprintf(message, sizeof(message), _cupsLangString(lang, _("Directory \"%s\" has insecure " "permissions " "(0%o/uid=%d/gid=%d).")), filename, fileinfo.st_mode, (int)fileinfo.st_uid, (int)fileinfo.st_gid); else snprintf(message, sizeof(message), _cupsLangString(lang, _("File \"%s\" has insecure " "permissions " "(0%o/uid=%d/gid=%d).")), filename, fileinfo.st_mode, (int)fileinfo.st_uid, (int)fileinfo.st_gid); break; case _CUPS_FILE_CHECK_WRONG_TYPE : if (filetype == _CUPS_FILE_CHECK_DIRECTORY) snprintf(message, sizeof(message), _cupsLangString(lang, _("Directory \"%s\" is a file.")), filename); else snprintf(message, sizeof(message), _cupsLangString(lang, _("File \"%s\" is a directory.")), filename); break; case _CUPS_FILE_CHECK_RELATIVE_PATH : if (filetype == _CUPS_FILE_CHECK_DIRECTORY) snprintf(message, sizeof(message), _cupsLangString(lang, _("Directory \"%s\" contains a " "relative path.")), filename); else snprintf(message, sizeof(message), _cupsLangString(lang, _("File \"%s\" contains a relative " "path.")), filename); break; } (*cb)(context, result, message); } return (result); } /* * '_cupsFileCheckFilter()' - Report file check results as CUPS filter messages. */ void _cupsFileCheckFilter( void *context, /* I - Context pointer (unused) */ _cups_fc_result_t result, /* I - Result code */ const char *message) /* I - Message text */ { const char *prefix; /* Messaging prefix */ (void)context; switch (result) { default : case _CUPS_FILE_CHECK_OK : prefix = "DEBUG2"; break; case _CUPS_FILE_CHECK_MISSING : case _CUPS_FILE_CHECK_WRONG_TYPE : prefix = "ERROR"; fputs("STATE: +cups-missing-filter-warning\n", stderr); break; case _CUPS_FILE_CHECK_PERMISSIONS : case _CUPS_FILE_CHECK_RELATIVE_PATH : prefix = "ERROR"; fputs("STATE: +cups-insecure-filter-warning\n", stderr); break; } fprintf(stderr, "%s: %s\n", prefix, message); } #endif /* !WIN32 */ /* * 'cupsFileClose()' - Close a CUPS file. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 0 on success, -1 on error */ cupsFileClose(cups_file_t *fp) /* I - CUPS file */ { int fd; /* File descriptor */ char mode; /* Open mode */ int status; /* Return status */ DEBUG_printf(("cupsFileClose(fp=%p)", (void *)fp)); /* * Range check... */ if (!fp) return (-1); /* * Flush pending write data... */ if (fp->mode == 'w') status = cupsFileFlush(fp); else status = 0; #ifdef HAVE_LIBZ if (fp->compressed && status >= 0) { if (fp->mode == 'r') { /* * Free decompression data... */ inflateEnd(&fp->stream); } else { /* * Flush any remaining compressed data... */ unsigned char trailer[8]; /* Trailer CRC and length */ int done; /* Done writing... */ fp->stream.avail_in = 0; for (done = 0;;) { if (fp->stream.next_out > fp->cbuf) { if (cups_write(fp, (char *)fp->cbuf, (size_t)(fp->stream.next_out - fp->cbuf)) < 0) status = -1; fp->stream.next_out = fp->cbuf; fp->stream.avail_out = sizeof(fp->cbuf); } if (done || status < 0) break; done = deflate(&fp->stream, Z_FINISH) == Z_STREAM_END && fp->stream.next_out == fp->cbuf; } /* * Write the CRC and length... */ trailer[0] = (unsigned char)fp->crc; trailer[1] = (unsigned char)(fp->crc >> 8); trailer[2] = (unsigned char)(fp->crc >> 16); trailer[3] = (unsigned char)(fp->crc >> 24); trailer[4] = (unsigned char)fp->pos; trailer[5] = (unsigned char)(fp->pos >> 8); trailer[6] = (unsigned char)(fp->pos >> 16); trailer[7] = (unsigned char)(fp->pos >> 24); if (cups_write(fp, (char *)trailer, 8) < 0) status = -1; /* * Free all memory used by the compression stream... */ deflateEnd(&(fp->stream)); } } #endif /* HAVE_LIBZ */ /* * If this is one of the cupsFileStdin/out/err files, return now and don't * actually free memory or close (these last the life of the process...) */ if (fp->is_stdio) return (status); /* * Save the file descriptor we used and free memory... */ fd = fp->fd; mode = fp->mode; if (fp->printf_buffer) free(fp->printf_buffer); free(fp); /* * Close the file, returning the close status... */ if (mode == 's') { if (httpAddrClose(NULL, fd) < 0) status = -1; } else if (close(fd) < 0) status = -1; return (status); } /* * 'cupsFileCompression()' - Return whether a file is compressed. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - @code CUPS_FILE_NONE@ or @code CUPS_FILE_GZIP@ */ cupsFileCompression(cups_file_t *fp) /* I - CUPS file */ { return (fp ? fp->compressed : CUPS_FILE_NONE); } /* * 'cupsFileEOF()' - Return the end-of-file status. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 1 on end of file, 0 otherwise */ cupsFileEOF(cups_file_t *fp) /* I - CUPS file */ { return (fp ? fp->eof : 1); } /* * 'cupsFileFind()' - Find a file using the specified path. * * This function allows the paths in the path string to be separated by * colons (UNIX standard) or semicolons (Windows standard) and stores the * result in the buffer supplied. If the file cannot be found in any of * the supplied paths, @code NULL@ is returned. A @code NULL@ path only * matches the current directory. * * @since CUPS 1.2/macOS 10.5@ */ const char * /* O - Full path to file or @code NULL@ if not found */ cupsFileFind(const char *filename, /* I - File to find */ const char *path, /* I - Colon/semicolon-separated path */ int executable, /* I - 1 = executable files, 0 = any file/dir */ char *buffer, /* I - Filename buffer */ int bufsize) /* I - Size of filename buffer */ { char *bufptr, /* Current position in buffer */ *bufend; /* End of buffer */ /* * Range check input... */ DEBUG_printf(("cupsFileFind(filename=\"%s\", path=\"%s\", executable=%d, buffer=%p, bufsize=%d)", filename, path, executable, (void *)buffer, bufsize)); if (!filename || !buffer || bufsize < 2) return (NULL); if (!path) { /* * No path, so check current directory... */ if (!access(filename, 0)) { strlcpy(buffer, filename, (size_t)bufsize); return (buffer); } else return (NULL); } /* * Now check each path and return the first match... */ bufend = buffer + bufsize - 1; bufptr = buffer; while (*path) { #ifdef WIN32 if (*path == ';' || (*path == ':' && ((bufptr - buffer) > 1 || !isalpha(buffer[0] & 255)))) #else if (*path == ';' || *path == ':') #endif /* WIN32 */ { if (bufptr > buffer && bufptr[-1] != '/' && bufptr < bufend) *bufptr++ = '/'; strlcpy(bufptr, filename, (size_t)(bufend - bufptr)); #ifdef WIN32 if (!access(buffer, 0)) #else if (!access(buffer, executable ? X_OK : 0)) #endif /* WIN32 */ { DEBUG_printf(("1cupsFileFind: Returning \"%s\"", buffer)); return (buffer); } bufptr = buffer; } else if (bufptr < bufend) *bufptr++ = *path; path ++; } /* * Check the last path... */ if (bufptr > buffer && bufptr[-1] != '/' && bufptr < bufend) *bufptr++ = '/'; strlcpy(bufptr, filename, (size_t)(bufend - bufptr)); if (!access(buffer, 0)) { DEBUG_printf(("1cupsFileFind: Returning \"%s\"", buffer)); return (buffer); } else { DEBUG_puts("1cupsFileFind: Returning NULL"); return (NULL); } } /* * 'cupsFileFlush()' - Flush pending output. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 0 on success, -1 on error */ cupsFileFlush(cups_file_t *fp) /* I - CUPS file */ { ssize_t bytes; /* Bytes to write */ DEBUG_printf(("cupsFileFlush(fp=%p)", (void *)fp)); /* * Range check input... */ if (!fp || fp->mode != 'w') { DEBUG_puts("1cupsFileFlush: Attempt to flush a read-only file..."); return (-1); } bytes = (ssize_t)(fp->ptr - fp->buf); DEBUG_printf(("2cupsFileFlush: Flushing " CUPS_LLFMT " bytes...", CUPS_LLCAST bytes)); if (bytes > 0) { #ifdef HAVE_LIBZ if (fp->compressed) bytes = cups_compress(fp, fp->buf, (size_t)bytes); else #endif /* HAVE_LIBZ */ bytes = cups_write(fp, fp->buf, (size_t)bytes); if (bytes < 0) return (-1); fp->ptr = fp->buf; } return (0); } /* * 'cupsFileGetChar()' - Get a single character from a file. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - Character or -1 on end of file */ cupsFileGetChar(cups_file_t *fp) /* I - CUPS file */ { /* * Range check input... */ DEBUG_printf(("4cupsFileGetChar(fp=%p)", (void *)fp)); if (!fp || (fp->mode != 'r' && fp->mode != 's')) { DEBUG_puts("5cupsFileGetChar: Bad arguments!"); return (-1); } /* * If the input buffer is empty, try to read more data... */ DEBUG_printf(("5cupsFileGetChar: fp->eof=%d, fp->ptr=%p, fp->end=%p", fp->eof, (void *)fp->ptr, (void *)fp->end)); if (fp->ptr >= fp->end) if (cups_fill(fp) <= 0) { DEBUG_puts("5cupsFileGetChar: Unable to fill buffer!"); return (-1); } /* * Return the next character in the buffer... */ DEBUG_printf(("5cupsFileGetChar: Returning %d...", *(fp->ptr) & 255)); fp->pos ++; DEBUG_printf(("6cupsFileGetChar: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (*(fp->ptr)++ & 255); } /* * 'cupsFileGetConf()' - Get a line from a configuration file. * * @since CUPS 1.2/macOS 10.5@ */ char * /* O - Line read or @code NULL@ on end of file or error */ cupsFileGetConf(cups_file_t *fp, /* I - CUPS file */ char *buf, /* O - String buffer */ size_t buflen, /* I - Size of string buffer */ char **value, /* O - Pointer to value */ int *linenum) /* IO - Current line number */ { char *ptr; /* Pointer into line */ /* * Range check input... */ DEBUG_printf(("2cupsFileGetConf(fp=%p, buf=%p, buflen=" CUPS_LLFMT ", value=%p, linenum=%p)", (void *)fp, (void *)buf, CUPS_LLCAST buflen, (void *)value, (void *)linenum)); if (!fp || (fp->mode != 'r' && fp->mode != 's') || !buf || buflen < 2 || !value) { if (value) *value = NULL; return (NULL); } /* * Read the next non-comment line... */ *value = NULL; while (cupsFileGets(fp, buf, buflen)) { (*linenum) ++; /* * Strip any comments... */ if ((ptr = strchr(buf, '#')) != NULL) { if (ptr > buf && ptr[-1] == '\\') { // Unquote the #... _cups_strcpy(ptr - 1, ptr); } else { // Strip the comment and any trailing whitespace... while (ptr > buf) { if (!_cups_isspace(ptr[-1])) break; ptr --; } *ptr = '\0'; } } /* * Strip leading whitespace... */ for (ptr = buf; _cups_isspace(*ptr); ptr ++); if (ptr > buf) _cups_strcpy(buf, ptr); /* * See if there is anything left... */ if (buf[0]) { /* * Yes, grab any value and return... */ for (ptr = buf; *ptr; ptr ++) if (_cups_isspace(*ptr)) break; if (*ptr) { /* * Have a value, skip any other spaces... */ while (_cups_isspace(*ptr)) *ptr++ = '\0'; if (*ptr) *value = ptr; /* * Strip trailing whitespace and > for lines that begin with <... */ ptr += strlen(ptr) - 1; if (buf[0] == '<' && *ptr == '>') *ptr-- = '\0'; else if (buf[0] == '<' && *ptr != '>') { /* * Syntax error... */ *value = NULL; return (buf); } while (ptr > *value && _cups_isspace(*ptr)) *ptr-- = '\0'; } /* * Return the line... */ return (buf); } } return (NULL); } /* * 'cupsFileGetLine()' - Get a CR and/or LF-terminated line that may * contain binary data. * * This function differs from @link cupsFileGets@ in that the trailing CR * and LF are preserved, as is any binary data on the line. The buffer is * nul-terminated, however you should use the returned length to determine * the number of bytes on the line. * * @since CUPS 1.2/macOS 10.5@ */ size_t /* O - Number of bytes on line or 0 on end of file */ cupsFileGetLine(cups_file_t *fp, /* I - File to read from */ char *buf, /* I - Buffer */ size_t buflen) /* I - Size of buffer */ { int ch; /* Character from file */ char *ptr, /* Current position in line buffer */ *end; /* End of line buffer */ /* * Range check input... */ DEBUG_printf(("2cupsFileGetLine(fp=%p, buf=%p, buflen=" CUPS_LLFMT ")", (void *)fp, (void *)buf, CUPS_LLCAST buflen)); if (!fp || (fp->mode != 'r' && fp->mode != 's') || !buf || buflen < 3) return (0); /* * Now loop until we have a valid line... */ for (ptr = buf, end = buf + buflen - 2; ptr < end ;) { if (fp->ptr >= fp->end) if (cups_fill(fp) <= 0) break; *ptr++ = ch = *(fp->ptr)++; fp->pos ++; if (ch == '\r') { /* * Check for CR LF... */ if (fp->ptr >= fp->end) if (cups_fill(fp) <= 0) break; if (*(fp->ptr) == '\n') { *ptr++ = *(fp->ptr)++; fp->pos ++; } break; } else if (ch == '\n') { /* * Line feed ends a line... */ break; } } *ptr = '\0'; DEBUG_printf(("4cupsFileGetLine: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return ((size_t)(ptr - buf)); } /* * 'cupsFileGets()' - Get a CR and/or LF-terminated line. * * @since CUPS 1.2/macOS 10.5@ */ char * /* O - Line read or @code NULL@ on end of file or error */ cupsFileGets(cups_file_t *fp, /* I - CUPS file */ char *buf, /* O - String buffer */ size_t buflen) /* I - Size of string buffer */ { int ch; /* Character from file */ char *ptr, /* Current position in line buffer */ *end; /* End of line buffer */ /* * Range check input... */ DEBUG_printf(("2cupsFileGets(fp=%p, buf=%p, buflen=" CUPS_LLFMT ")", (void *)fp, (void *)buf, CUPS_LLCAST buflen)); if (!fp || (fp->mode != 'r' && fp->mode != 's') || !buf || buflen < 2) return (NULL); /* * Now loop until we have a valid line... */ for (ptr = buf, end = buf + buflen - 1; ptr < end ;) { if (fp->ptr >= fp->end) if (cups_fill(fp) <= 0) { if (ptr == buf) return (NULL); else break; } ch = *(fp->ptr)++; fp->pos ++; if (ch == '\r') { /* * Check for CR LF... */ if (fp->ptr >= fp->end) if (cups_fill(fp) <= 0) break; if (*(fp->ptr) == '\n') { fp->ptr ++; fp->pos ++; } break; } else if (ch == '\n') { /* * Line feed ends a line... */ break; } else *ptr++ = (char)ch; } *ptr = '\0'; DEBUG_printf(("4cupsFileGets: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (buf); } /* * 'cupsFileLock()' - Temporarily lock access to a file. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 0 on success, -1 on error */ cupsFileLock(cups_file_t *fp, /* I - CUPS file */ int block) /* I - 1 to wait for the lock, 0 to fail right away */ { /* * Range check... */ if (!fp || fp->mode == 's') return (-1); /* * Try the lock... */ #ifdef WIN32 return (_locking(fp->fd, block ? _LK_LOCK : _LK_NBLCK, 0)); #else return (lockf(fp->fd, block ? F_LOCK : F_TLOCK, 0)); #endif /* WIN32 */ } /* * 'cupsFileNumber()' - Return the file descriptor associated with a CUPS file. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - File descriptor */ cupsFileNumber(cups_file_t *fp) /* I - CUPS file */ { if (fp) return (fp->fd); else return (-1); } /* * 'cupsFileOpen()' - Open a CUPS file. * * The "mode" parameter can be "r" to read, "w" to write, overwriting any * existing file, "a" to append to an existing file or create a new file, * or "s" to open a socket connection. * * When opening for writing ("w"), an optional number from 1 to 9 can be * supplied which enables Flate compression of the file. Compression is * not supported for the "a" (append) mode. * * When opening a socket connection, the filename is a string of the form * "address:port" or "hostname:port". The socket will make an IPv4 or IPv6 * connection as needed, generally preferring IPv6 connections when there is * a choice. * * @since CUPS 1.2/macOS 10.5@ */ cups_file_t * /* O - CUPS file or @code NULL@ if the file or socket cannot be opened */ cupsFileOpen(const char *filename, /* I - Name of file */ const char *mode) /* I - Open mode */ { cups_file_t *fp; /* New CUPS file */ int fd; /* File descriptor */ char hostname[1024], /* Hostname */ *portname; /* Port "name" (number or service) */ http_addrlist_t *addrlist; /* Host address list */ DEBUG_printf(("cupsFileOpen(filename=\"%s\", mode=\"%s\")", filename, mode)); /* * Range check input... */ if (!filename || !mode || (*mode != 'r' && *mode != 'w' && *mode != 'a' && *mode != 's') || (*mode == 'a' && isdigit(mode[1] & 255))) return (NULL); /* * Open the file... */ switch (*mode) { case 'a' : /* Append file */ fd = cups_open(filename, O_RDWR | O_CREAT | O_APPEND | O_LARGEFILE | O_BINARY); break; case 'r' : /* Read file */ fd = open(filename, O_RDONLY | O_LARGEFILE | O_BINARY, 0); break; case 'w' : /* Write file */ fd = cups_open(filename, O_WRONLY | O_LARGEFILE | O_BINARY); if (fd < 0 && errno == ENOENT) { fd = cups_open(filename, O_WRONLY | O_CREAT | O_EXCL | O_LARGEFILE | O_BINARY); if (fd < 0 && errno == EEXIST) fd = cups_open(filename, O_WRONLY | O_LARGEFILE | O_BINARY); } if (fd >= 0) #ifdef WIN32 _chsize(fd, 0); #else ftruncate(fd, 0); #endif /* WIN32 */ break; case 's' : /* Read/write socket */ strlcpy(hostname, filename, sizeof(hostname)); if ((portname = strrchr(hostname, ':')) != NULL) *portname++ = '\0'; else return (NULL); /* * Lookup the hostname and service... */ if ((addrlist = httpAddrGetList(hostname, AF_UNSPEC, portname)) == NULL) return (NULL); /* * Connect to the server... */ if (!httpAddrConnect(addrlist, &fd)) { httpAddrFreeList(addrlist); return (NULL); } httpAddrFreeList(addrlist); break; default : /* Remove bogus compiler warning... */ return (NULL); } if (fd < 0) return (NULL); /* * Create the CUPS file structure... */ if ((fp = cupsFileOpenFd(fd, mode)) == NULL) { if (*mode == 's') httpAddrClose(NULL, fd); else close(fd); } /* * Return it... */ return (fp); } /* * 'cupsFileOpenFd()' - Open a CUPS file using a file descriptor. * * The "mode" parameter can be "r" to read, "w" to write, "a" to append, * or "s" to treat the file descriptor as a bidirectional socket connection. * * When opening for writing ("w"), an optional number from 1 to 9 can be * supplied which enables Flate compression of the file. Compression is * not supported for the "a" (append) mode. * * @since CUPS 1.2/macOS 10.5@ */ cups_file_t * /* O - CUPS file or @code NULL@ if the file could not be opened */ cupsFileOpenFd(int fd, /* I - File descriptor */ const char *mode) /* I - Open mode */ { cups_file_t *fp; /* New CUPS file */ DEBUG_printf(("cupsFileOpenFd(fd=%d, mode=\"%s\")", fd, mode)); /* * Range check input... */ if (fd < 0 || !mode || (*mode != 'r' && *mode != 'w' && *mode != 'a' && *mode != 's') || (*mode == 'a' && isdigit(mode[1] & 255))) return (NULL); /* * Allocate memory... */ if ((fp = calloc(1, sizeof(cups_file_t))) == NULL) return (NULL); /* * Open the file... */ fp->fd = fd; switch (*mode) { case 'a' : fp->pos = lseek(fd, 0, SEEK_END); case 'w' : fp->mode = 'w'; fp->ptr = fp->buf; fp->end = fp->buf + sizeof(fp->buf); #ifdef HAVE_LIBZ if (mode[1] >= '1' && mode[1] <= '9') { /* * Open a compressed stream, so write the standard gzip file * header... */ unsigned char header[10]; /* gzip file header */ time_t curtime; /* Current time */ curtime = time(NULL); header[0] = 0x1f; header[1] = 0x8b; header[2] = Z_DEFLATED; header[3] = 0; header[4] = (unsigned char)curtime; header[5] = (unsigned char)(curtime >> 8); header[6] = (unsigned char)(curtime >> 16); header[7] = (unsigned char)(curtime >> 24); header[8] = 0; header[9] = 0x03; cups_write(fp, (char *)header, 10); /* * Initialize the compressor... */ deflateInit2(&(fp->stream), mode[1] - '0', Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY); fp->stream.next_out = fp->cbuf; fp->stream.avail_out = sizeof(fp->cbuf); fp->compressed = 1; fp->crc = crc32(0L, Z_NULL, 0); } #endif /* HAVE_LIBZ */ break; case 'r' : fp->mode = 'r'; break; case 's' : fp->mode = 's'; break; default : /* Remove bogus compiler warning... */ return (NULL); } /* * Don't pass this file to child processes... */ #ifndef WIN32 fcntl(fp->fd, F_SETFD, fcntl(fp->fd, F_GETFD) | FD_CLOEXEC); #endif /* !WIN32 */ return (fp); } /* * 'cupsFilePeekChar()' - Peek at the next character from a file. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - Character or -1 on end of file */ cupsFilePeekChar(cups_file_t *fp) /* I - CUPS file */ { /* * Range check input... */ if (!fp || (fp->mode != 'r' && fp->mode != 's')) return (-1); /* * If the input buffer is empty, try to read more data... */ if (fp->ptr >= fp->end) if (cups_fill(fp) <= 0) return (-1); /* * Return the next character in the buffer... */ return (*(fp->ptr) & 255); } /* * 'cupsFilePrintf()' - Write a formatted string. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - Number of bytes written or -1 on error */ cupsFilePrintf(cups_file_t *fp, /* I - CUPS file */ const char *format, /* I - Printf-style format string */ ...) /* I - Additional args as necessary */ { va_list ap; /* Argument list */ ssize_t bytes; /* Formatted size */ DEBUG_printf(("2cupsFilePrintf(fp=%p, format=\"%s\", ...)", (void *)fp, format)); if (!fp || !format || (fp->mode != 'w' && fp->mode != 's')) return (-1); if (!fp->printf_buffer) { /* * Start with an 1k printf buffer... */ if ((fp->printf_buffer = malloc(1024)) == NULL) return (-1); fp->printf_size = 1024; } va_start(ap, format); bytes = vsnprintf(fp->printf_buffer, fp->printf_size, format, ap); va_end(ap); if (bytes >= (ssize_t)fp->printf_size) { /* * Expand the printf buffer... */ char *temp; /* Temporary buffer pointer */ if (bytes > 65535) return (-1); if ((temp = realloc(fp->printf_buffer, (size_t)(bytes + 1))) == NULL) return (-1); fp->printf_buffer = temp; fp->printf_size = (size_t)(bytes + 1); va_start(ap, format); bytes = vsnprintf(fp->printf_buffer, fp->printf_size, format, ap); va_end(ap); } if (fp->mode == 's') { if (cups_write(fp, fp->printf_buffer, (size_t)bytes) < 0) return (-1); fp->pos += bytes; DEBUG_printf(("4cupsFilePrintf: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return ((int)bytes); } if ((fp->ptr + bytes) > fp->end) if (cupsFileFlush(fp)) return (-1); fp->pos += bytes; DEBUG_printf(("4cupsFilePrintf: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); if ((size_t)bytes > sizeof(fp->buf)) { #ifdef HAVE_LIBZ if (fp->compressed) return ((int)cups_compress(fp, fp->printf_buffer, (size_t)bytes)); else #endif /* HAVE_LIBZ */ return ((int)cups_write(fp, fp->printf_buffer, (size_t)bytes)); } else { memcpy(fp->ptr, fp->printf_buffer, (size_t)bytes); fp->ptr += bytes; if (fp->is_stdio && cupsFileFlush(fp)) return (-1); else return ((int)bytes); } } /* * 'cupsFilePutChar()' - Write a character. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 0 on success, -1 on error */ cupsFilePutChar(cups_file_t *fp, /* I - CUPS file */ int c) /* I - Character to write */ { /* * Range check input... */ if (!fp || (fp->mode != 'w' && fp->mode != 's')) return (-1); if (fp->mode == 's') { /* * Send character immediately over socket... */ char ch; /* Output character */ ch = (char)c; if (send(fp->fd, &ch, 1, 0) < 1) return (-1); } else { /* * Buffer it up... */ if (fp->ptr >= fp->end) if (cupsFileFlush(fp)) return (-1); *(fp->ptr) ++ = (char)c; } fp->pos ++; DEBUG_printf(("4cupsFilePutChar: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (0); } /* * 'cupsFilePutConf()' - Write a configuration line. * * This function handles any comment escaping of the value. * * @since CUPS 1.4/macOS 10.6@ */ ssize_t /* O - Number of bytes written or -1 on error */ cupsFilePutConf(cups_file_t *fp, /* I - CUPS file */ const char *directive, /* I - Directive */ const char *value) /* I - Value */ { ssize_t bytes, /* Number of bytes written */ temp; /* Temporary byte count */ const char *ptr; /* Pointer into value */ if (!fp || !directive || !*directive) return (-1); if ((bytes = cupsFilePuts(fp, directive)) < 0) return (-1); if (cupsFilePutChar(fp, ' ') < 0) return (-1); bytes ++; if (value && *value) { if ((ptr = strchr(value, '#')) != NULL) { /* * Need to quote the first # in the info string... */ if ((temp = cupsFileWrite(fp, value, (size_t)(ptr - value))) < 0) return (-1); bytes += temp; if (cupsFilePutChar(fp, '\\') < 0) return (-1); bytes ++; if ((temp = cupsFilePuts(fp, ptr)) < 0) return (-1); bytes += temp; } else if ((temp = cupsFilePuts(fp, value)) < 0) return (-1); else bytes += temp; } if (cupsFilePutChar(fp, '\n') < 0) return (-1); else return (bytes + 1); } /* * 'cupsFilePuts()' - Write a string. * * Like the @code fputs@ function, no newline is appended to the string. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - Number of bytes written or -1 on error */ cupsFilePuts(cups_file_t *fp, /* I - CUPS file */ const char *s) /* I - String to write */ { ssize_t bytes; /* Bytes to write */ /* * Range check input... */ if (!fp || !s || (fp->mode != 'w' && fp->mode != 's')) return (-1); /* * Write the string... */ bytes = (ssize_t)strlen(s); if (fp->mode == 's') { if (cups_write(fp, s, (size_t)bytes) < 0) return (-1); fp->pos += bytes; DEBUG_printf(("4cupsFilePuts: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return ((int)bytes); } if ((fp->ptr + bytes) > fp->end) if (cupsFileFlush(fp)) return (-1); fp->pos += bytes; DEBUG_printf(("4cupsFilePuts: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); if ((size_t)bytes > sizeof(fp->buf)) { #ifdef HAVE_LIBZ if (fp->compressed) return ((int)cups_compress(fp, s, (size_t)bytes)); else #endif /* HAVE_LIBZ */ return ((int)cups_write(fp, s, (size_t)bytes)); } else { memcpy(fp->ptr, s, (size_t)bytes); fp->ptr += bytes; if (fp->is_stdio && cupsFileFlush(fp)) return (-1); else return ((int)bytes); } } /* * 'cupsFileRead()' - Read from a file. * * @since CUPS 1.2/macOS 10.5@ */ ssize_t /* O - Number of bytes read or -1 on error */ cupsFileRead(cups_file_t *fp, /* I - CUPS file */ char *buf, /* O - Buffer */ size_t bytes) /* I - Number of bytes to read */ { size_t total; /* Total bytes read */ ssize_t count; /* Bytes read */ DEBUG_printf(("2cupsFileRead(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")", (void *)fp, (void *)buf, CUPS_LLCAST bytes)); /* * Range check input... */ if (!fp || !buf || (fp->mode != 'r' && fp->mode != 's')) return (-1); if (bytes == 0) return (0); /* * Loop until all bytes are read... */ total = 0; while (bytes > 0) { if (fp->ptr >= fp->end) if (cups_fill(fp) <= 0) { DEBUG_printf(("4cupsFileRead: cups_fill() returned -1, total=" CUPS_LLFMT, CUPS_LLCAST total)); if (total > 0) return ((ssize_t)total); else return (-1); } count = (ssize_t)(fp->end - fp->ptr); if (count > (ssize_t)bytes) count = (ssize_t)bytes; memcpy(buf, fp->ptr,(size_t) count); fp->ptr += count; fp->pos += count; DEBUG_printf(("4cupsFileRead: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); /* * Update the counts for the last read... */ bytes -= (size_t)count; total += (size_t)count; buf += count; } /* * Return the total number of bytes read... */ DEBUG_printf(("3cupsFileRead: total=" CUPS_LLFMT, CUPS_LLCAST total)); return ((ssize_t)total); } /* * 'cupsFileRewind()' - Set the current file position to the beginning of the * file. * * @since CUPS 1.2/macOS 10.5@ */ off_t /* O - New file position or -1 on error */ cupsFileRewind(cups_file_t *fp) /* I - CUPS file */ { /* * Range check input... */ DEBUG_printf(("cupsFileRewind(fp=%p)", (void *)fp)); DEBUG_printf(("2cupsFileRewind: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); if (!fp || fp->mode != 'r') return (-1); /* * Handle special cases... */ if (fp->bufpos == 0) { /* * No seeking necessary... */ fp->pos = 0; if (fp->ptr) { fp->ptr = fp->buf; fp->eof = 0; } DEBUG_printf(("2cupsFileRewind: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (0); } /* * Otherwise, seek in the file and cleanup any compression buffers... */ #ifdef HAVE_LIBZ if (fp->compressed) { inflateEnd(&fp->stream); fp->compressed = 0; } #endif /* HAVE_LIBZ */ if (lseek(fp->fd, 0, SEEK_SET)) { DEBUG_printf(("1cupsFileRewind: lseek failed: %s", strerror(errno))); return (-1); } fp->bufpos = 0; fp->pos = 0; fp->ptr = NULL; fp->end = NULL; fp->eof = 0; DEBUG_printf(("2cupsFileRewind: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (0); } /* * 'cupsFileSeek()' - Seek in a file. * * @since CUPS 1.2/macOS 10.5@ */ off_t /* O - New file position or -1 on error */ cupsFileSeek(cups_file_t *fp, /* I - CUPS file */ off_t pos) /* I - Position in file */ { ssize_t bytes; /* Number bytes in buffer */ DEBUG_printf(("cupsFileSeek(fp=%p, pos=" CUPS_LLFMT ")", (void *)fp, CUPS_LLCAST pos)); DEBUG_printf(("2cupsFileSeek: fp->pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); DEBUG_printf(("2cupsFileSeek: fp->ptr=%p, fp->end=%p", (void *)fp->ptr, (void *)fp->end)); /* * Range check input... */ if (!fp || pos < 0 || fp->mode != 'r') return (-1); /* * Handle special cases... */ if (pos == 0) return (cupsFileRewind(fp)); if (fp->ptr) { bytes = (ssize_t)(fp->end - fp->buf); DEBUG_printf(("2cupsFileSeek: bytes=" CUPS_LLFMT, CUPS_LLCAST bytes)); if (pos >= fp->bufpos && pos < (fp->bufpos + bytes)) { /* * No seeking necessary... */ fp->pos = pos; fp->ptr = fp->buf + pos - fp->bufpos; fp->eof = 0; return (pos); } } #ifdef HAVE_LIBZ if (!fp->compressed && !fp->ptr) { /* * Preload a buffer to determine whether the file is compressed... */ if (cups_fill(fp) <= 0) return (-1); } #endif /* HAVE_LIBZ */ /* * Seek forwards or backwards... */ fp->eof = 0; if (pos < fp->bufpos) { /* * Need to seek backwards... */ DEBUG_puts("2cupsFileSeek: SEEK BACKWARDS"); #ifdef HAVE_LIBZ if (fp->compressed) { inflateEnd(&fp->stream); lseek(fp->fd, 0, SEEK_SET); fp->bufpos = 0; fp->pos = 0; fp->ptr = NULL; fp->end = NULL; while ((bytes = cups_fill(fp)) > 0) if (pos >= fp->bufpos && pos < (fp->bufpos + bytes)) break; if (bytes <= 0) return (-1); fp->ptr = fp->buf + pos - fp->bufpos; fp->pos = pos; } else #endif /* HAVE_LIBZ */ { fp->bufpos = lseek(fp->fd, pos, SEEK_SET); fp->pos = fp->bufpos; fp->ptr = NULL; fp->end = NULL; DEBUG_printf(("2cupsFileSeek: lseek() returned " CUPS_LLFMT, CUPS_LLCAST fp->pos)); } } else { /* * Need to seek forwards... */ DEBUG_puts("2cupsFileSeek: SEEK FORWARDS"); #ifdef HAVE_LIBZ if (fp->compressed) { while ((bytes = cups_fill(fp)) > 0) { if (pos >= fp->bufpos && pos < (fp->bufpos + bytes)) break; } if (bytes <= 0) return (-1); fp->ptr = fp->buf + pos - fp->bufpos; fp->pos = pos; } else #endif /* HAVE_LIBZ */ { fp->bufpos = lseek(fp->fd, pos, SEEK_SET); fp->pos = fp->bufpos; fp->ptr = NULL; fp->end = NULL; DEBUG_printf(("2cupsFileSeek: lseek() returned " CUPS_LLFMT, CUPS_LLCAST fp->pos)); } } DEBUG_printf(("2cupsFileSeek: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (fp->pos); } /* * 'cupsFileStderr()' - Return a CUPS file associated with stderr. * * @since CUPS 1.2/macOS 10.5@ */ cups_file_t * /* O - CUPS file */ cupsFileStderr(void) { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals... */ /* * Open file descriptor 2 as needed... */ if (!cg->stdio_files[2]) { /* * Flush any pending output on the stdio file... */ fflush(stderr); /* * Open file descriptor 2... */ if ((cg->stdio_files[2] = cupsFileOpenFd(2, "w")) != NULL) cg->stdio_files[2]->is_stdio = 1; } return (cg->stdio_files[2]); } /* * 'cupsFileStdin()' - Return a CUPS file associated with stdin. * * @since CUPS 1.2/macOS 10.5@ */ cups_file_t * /* O - CUPS file */ cupsFileStdin(void) { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals... */ /* * Open file descriptor 0 as needed... */ if (!cg->stdio_files[0]) { /* * Open file descriptor 0... */ if ((cg->stdio_files[0] = cupsFileOpenFd(0, "r")) != NULL) cg->stdio_files[0]->is_stdio = 1; } return (cg->stdio_files[0]); } /* * 'cupsFileStdout()' - Return a CUPS file associated with stdout. * * @since CUPS 1.2/macOS 10.5@ */ cups_file_t * /* O - CUPS file */ cupsFileStdout(void) { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals... */ /* * Open file descriptor 1 as needed... */ if (!cg->stdio_files[1]) { /* * Flush any pending output on the stdio file... */ fflush(stdout); /* * Open file descriptor 1... */ if ((cg->stdio_files[1] = cupsFileOpenFd(1, "w")) != NULL) cg->stdio_files[1]->is_stdio = 1; } return (cg->stdio_files[1]); } /* * 'cupsFileTell()' - Return the current file position. * * @since CUPS 1.2/macOS 10.5@ */ off_t /* O - File position */ cupsFileTell(cups_file_t *fp) /* I - CUPS file */ { DEBUG_printf(("2cupsFileTell(fp=%p)", (void *)fp)); DEBUG_printf(("3cupsFileTell: pos=" CUPS_LLFMT, CUPS_LLCAST (fp ? fp->pos : -1))); return (fp ? fp->pos : 0); } /* * 'cupsFileUnlock()' - Unlock access to a file. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 0 on success, -1 on error */ cupsFileUnlock(cups_file_t *fp) /* I - CUPS file */ { /* * Range check... */ DEBUG_printf(("cupsFileUnlock(fp=%p)", (void *)fp)); if (!fp || fp->mode == 's') return (-1); /* * Unlock... */ #ifdef WIN32 return (_locking(fp->fd, _LK_UNLCK, 0)); #else return (lockf(fp->fd, F_ULOCK, 0)); #endif /* WIN32 */ } /* * 'cupsFileWrite()' - Write to a file. * * @since CUPS 1.2/macOS 10.5@ */ ssize_t /* O - Number of bytes written or -1 on error */ cupsFileWrite(cups_file_t *fp, /* I - CUPS file */ const char *buf, /* I - Buffer */ size_t bytes) /* I - Number of bytes to write */ { /* * Range check input... */ DEBUG_printf(("2cupsFileWrite(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")", (void *)fp, (void *)buf, CUPS_LLCAST bytes)); if (!fp || !buf || (fp->mode != 'w' && fp->mode != 's')) return (-1); if (bytes == 0) return (0); /* * Write the buffer... */ if (fp->mode == 's') { if (cups_write(fp, buf, bytes) < 0) return (-1); fp->pos += (off_t)bytes; DEBUG_printf(("4cupsFileWrite: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return ((ssize_t)bytes); } if ((fp->ptr + bytes) > fp->end) if (cupsFileFlush(fp)) return (-1); fp->pos += (off_t)bytes; DEBUG_printf(("4cupsFileWrite: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); if (bytes > sizeof(fp->buf)) { #ifdef HAVE_LIBZ if (fp->compressed) return (cups_compress(fp, buf, bytes)); else #endif /* HAVE_LIBZ */ return (cups_write(fp, buf, bytes)); } else { memcpy(fp->ptr, buf, bytes); fp->ptr += bytes; return ((ssize_t)bytes); } } #ifdef HAVE_LIBZ /* * 'cups_compress()' - Compress a buffer of data. */ static ssize_t /* O - Number of bytes written or -1 */ cups_compress(cups_file_t *fp, /* I - CUPS file */ const char *buf, /* I - Buffer */ size_t bytes) /* I - Number bytes */ { DEBUG_printf(("7cups_compress(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")", (void *)fp, (void *)buf, CUPS_LLCAST bytes)); /* * Update the CRC... */ fp->crc = crc32(fp->crc, (const Bytef *)buf, (uInt)bytes); /* * Deflate the bytes... */ fp->stream.next_in = (Bytef *)buf; fp->stream.avail_in = (uInt)bytes; while (fp->stream.avail_in > 0) { /* * Flush the current buffer... */ DEBUG_printf(("9cups_compress: avail_in=%d, avail_out=%d", fp->stream.avail_in, fp->stream.avail_out)); if (fp->stream.avail_out < (uInt)(sizeof(fp->cbuf) / 8)) { if (cups_write(fp, (char *)fp->cbuf, (size_t)(fp->stream.next_out - fp->cbuf)) < 0) return (-1); fp->stream.next_out = fp->cbuf; fp->stream.avail_out = sizeof(fp->cbuf); } deflate(&(fp->stream), Z_NO_FLUSH); } return ((ssize_t)bytes); } #endif /* HAVE_LIBZ */ /* * 'cups_fill()' - Fill the input buffer. */ static ssize_t /* O - Number of bytes or -1 */ cups_fill(cups_file_t *fp) /* I - CUPS file */ { ssize_t bytes; /* Number of bytes read */ #ifdef HAVE_LIBZ int status; /* Decompression status */ const unsigned char *ptr, /* Pointer into buffer */ *end; /* End of buffer */ #endif /* HAVE_LIBZ */ DEBUG_printf(("7cups_fill(fp=%p)", (void *)fp)); DEBUG_printf(("9cups_fill: fp->ptr=%p, fp->end=%p, fp->buf=%p, fp->bufpos=" CUPS_LLFMT ", fp->eof=%d", (void *)fp->ptr, (void *)fp->end, (void *)fp->buf, CUPS_LLCAST fp->bufpos, fp->eof)); if (fp->ptr && fp->end) fp->bufpos += fp->end - fp->buf; #ifdef HAVE_LIBZ DEBUG_printf(("9cups_fill: fp->compressed=%d", fp->compressed)); while (!fp->ptr || fp->compressed) { /* * Check to see if we have read any data yet; if not, see if we have a * compressed file... */ if (!fp->ptr) { /* * Reset the file position in case we are seeking... */ fp->compressed = 0; /* * Read the first bytes in the file to determine if we have a gzip'd * file... */ if ((bytes = cups_read(fp, (char *)fp->buf, sizeof(fp->buf))) < 0) { /* * Can't read from file! */ DEBUG_printf(("9cups_fill: cups_read() returned " CUPS_LLFMT, CUPS_LLCAST bytes)); fp->eof = 1; return (-1); } if (bytes < 10 || fp->buf[0] != 0x1f || (fp->buf[1] & 255) != 0x8b || fp->buf[2] != 8 || (fp->buf[3] & 0xe0) != 0) { /* * Not a gzip'd file! */ fp->ptr = fp->buf; fp->end = fp->buf + bytes; DEBUG_printf(("9cups_fill: Returning " CUPS_LLFMT, CUPS_LLCAST bytes)); return (bytes); } /* * Parse header junk: extra data, original name, and comment... */ ptr = (unsigned char *)fp->buf + 10; end = (unsigned char *)fp->buf + bytes; if (fp->buf[3] & 0x04) { /* * Skip extra data... */ if ((ptr + 2) > end) { /* * Can't read from file! */ DEBUG_puts("9cups_fill: Extra gzip header data missing, returning -1."); fp->eof = 1; errno = EIO; return (-1); } bytes = ((unsigned char)ptr[1] << 8) | (unsigned char)ptr[0]; ptr += 2 + bytes; if (ptr > end) { /* * Can't read from file! */ DEBUG_puts("9cups_fill: Extra gzip header data does not fit in initial buffer, returning -1."); fp->eof = 1; errno = EIO; return (-1); } } if (fp->buf[3] & 0x08) { /* * Skip original name data... */ while (ptr < end && *ptr) ptr ++; if (ptr < end) ptr ++; else { /* * Can't read from file! */ DEBUG_puts("9cups_fill: Original filename in gzip header data does not fit in initial buffer, returning -1."); fp->eof = 1; errno = EIO; return (-1); } } if (fp->buf[3] & 0x10) { /* * Skip comment data... */ while (ptr < end && *ptr) ptr ++; if (ptr < end) ptr ++; else { /* * Can't read from file! */ DEBUG_puts("9cups_fill: Comment in gzip header data does not fit in initial buffer, returning -1."); fp->eof = 1; errno = EIO; return (-1); } } if (fp->buf[3] & 0x02) { /* * Skip header CRC data... */ ptr += 2; if (ptr > end) { /* * Can't read from file! */ DEBUG_puts("9cups_fill: Header CRC in gzip header data does not fit in initial buffer, returning -1."); fp->eof = 1; errno = EIO; return (-1); } } /* * Copy the flate-compressed data to the compression buffer... */ if ((bytes = end - ptr) > 0) memcpy(fp->cbuf, ptr, (size_t)bytes); /* * Setup the decompressor data... */ fp->stream.zalloc = (alloc_func)0; fp->stream.zfree = (free_func)0; fp->stream.opaque = (voidpf)0; fp->stream.next_in = (Bytef *)fp->cbuf; fp->stream.next_out = NULL; fp->stream.avail_in = (uInt)bytes; fp->stream.avail_out = 0; fp->crc = crc32(0L, Z_NULL, 0); if ((status = inflateInit2(&(fp->stream), -15)) != Z_OK) { DEBUG_printf(("9cups_fill: inflateInit2 returned %d, returning -1.", status)); fp->eof = 1; errno = EIO; return (-1); } fp->compressed = 1; } if (fp->compressed) { /* * If we have reached end-of-file, return immediately... */ if (fp->eof) { DEBUG_puts("9cups_fill: EOF, returning 0."); return (0); } /* * Fill the decompression buffer as needed... */ if (fp->stream.avail_in == 0) { if ((bytes = cups_read(fp, (char *)fp->cbuf, sizeof(fp->cbuf))) <= 0) { DEBUG_printf(("9cups_fill: cups_read error, returning %d.", (int)bytes)); fp->eof = 1; return (bytes); } fp->stream.next_in = fp->cbuf; fp->stream.avail_in = (uInt)bytes; } /* * Decompress data from the buffer... */ fp->stream.next_out = (Bytef *)fp->buf; fp->stream.avail_out = sizeof(fp->buf); status = inflate(&(fp->stream), Z_NO_FLUSH); if (fp->stream.next_out > (Bytef *)fp->buf) fp->crc = crc32(fp->crc, (Bytef *)fp->buf, (uInt)(fp->stream.next_out - (Bytef *)fp->buf)); if (status == Z_STREAM_END) { /* * Read the CRC and length... */ unsigned char trailer[8]; /* Trailer bytes */ uLong tcrc; /* Trailer CRC */ ssize_t tbytes = 0; /* Number of bytes */ if (fp->stream.avail_in > 0) { if (fp->stream.avail_in > sizeof(trailer)) tbytes = (ssize_t)sizeof(trailer); else tbytes = (ssize_t)fp->stream.avail_in; memcpy(trailer, fp->stream.next_in, (size_t)tbytes); fp->stream.next_in += tbytes; fp->stream.avail_in -= (size_t)tbytes; } if (tbytes < (ssize_t)sizeof(trailer)) { if (read(fp->fd, trailer + tbytes, sizeof(trailer) - (size_t)tbytes) < ((ssize_t)sizeof(trailer) - tbytes)) { /* * Can't get it, so mark end-of-file... */ DEBUG_puts("9cups_fill: Unable to read gzip CRC trailer, returning -1."); fp->eof = 1; errno = EIO; return (-1); } } tcrc = ((((((uLong)trailer[3] << 8) | (uLong)trailer[2]) << 8) | (uLong)trailer[1]) << 8) | (uLong)trailer[0]; if (tcrc != fp->crc) { /* * Bad CRC, mark end-of-file... */ DEBUG_printf(("9cups_fill: tcrc=%08x != fp->crc=%08x, returning -1.", (unsigned int)tcrc, (unsigned int)fp->crc)); fp->eof = 1; errno = EIO; return (-1); } /* * Otherwise, reset the compressed flag so that we re-read the * file header... */ inflateEnd(&fp->stream); fp->compressed = 0; } else if (status < Z_OK) { DEBUG_printf(("9cups_fill: inflate returned %d, returning -1.", status)); fp->eof = 1; errno = EIO; return (-1); } bytes = (ssize_t)sizeof(fp->buf) - (ssize_t)fp->stream.avail_out; /* * Return the decompressed data... */ fp->ptr = fp->buf; fp->end = fp->buf + bytes; if (bytes) { DEBUG_printf(("9cups_fill: Returning %d.", (int)bytes)); return (bytes); } } } #endif /* HAVE_LIBZ */ /* * Read a buffer's full of data... */ if ((bytes = cups_read(fp, fp->buf, sizeof(fp->buf))) <= 0) { /* * Can't read from file! */ fp->eof = 1; fp->ptr = fp->buf; fp->end = fp->buf; } else { /* * Return the bytes we read... */ fp->eof = 0; fp->ptr = fp->buf; fp->end = fp->buf + bytes; } DEBUG_printf(("9cups_fill: Not gzip, returning %d.", (int)bytes)); return (bytes); } /* * 'cups_open()' - Safely open a file for writing. * * We don't allow appending to directories or files that are hard-linked or * symlinked. */ static int /* O - File descriptor or -1 otherwise */ cups_open(const char *filename, /* I - Filename */ int mode) /* I - Open mode */ { int fd; /* File descriptor */ struct stat fileinfo; /* File information */ #ifndef WIN32 struct stat linkinfo; /* Link information */ #endif /* !WIN32 */ /* * Open the file... */ if ((fd = open(filename, mode, 0666)) < 0) return (-1); /* * Then verify that the file descriptor doesn't point to a directory or hard- * linked file. */ if (fstat(fd, &fileinfo)) { close(fd); return (-1); } if (fileinfo.st_nlink != 1) { close(fd); errno = EPERM; return (-1); } #ifdef WIN32 if (fileinfo.st_mode & _S_IFDIR) #else if (S_ISDIR(fileinfo.st_mode)) #endif /* WIN32 */ { close(fd); errno = EISDIR; return (-1); } #ifndef WIN32 /* * Then use lstat to determine whether the filename is a symlink... */ if (lstat(filename, &linkinfo)) { close(fd); return (-1); } if (S_ISLNK(linkinfo.st_mode) || fileinfo.st_dev != linkinfo.st_dev || fileinfo.st_ino != linkinfo.st_ino || #ifdef HAVE_ST_GEN fileinfo.st_gen != linkinfo.st_gen || #endif /* HAVE_ST_GEN */ fileinfo.st_nlink != linkinfo.st_nlink || fileinfo.st_mode != linkinfo.st_mode) { /* * Yes, don't allow! */ close(fd); errno = EPERM; return (-1); } #endif /* !WIN32 */ return (fd); } /* * 'cups_read()' - Read from a file descriptor. */ static ssize_t /* O - Number of bytes read or -1 */ cups_read(cups_file_t *fp, /* I - CUPS file */ char *buf, /* I - Buffer */ size_t bytes) /* I - Number bytes */ { ssize_t total; /* Total bytes read */ DEBUG_printf(("7cups_read(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")", (void *)fp, (void *)buf, CUPS_LLCAST bytes)); /* * Loop until we read at least 0 bytes... */ for (;;) { #ifdef WIN32 if (fp->mode == 's') total = (ssize_t)recv(fp->fd, buf, (unsigned)bytes, 0); else total = (ssize_t)read(fp->fd, buf, (unsigned)bytes); #else if (fp->mode == 's') total = recv(fp->fd, buf, bytes, 0); else total = read(fp->fd, buf, bytes); #endif /* WIN32 */ DEBUG_printf(("9cups_read: total=" CUPS_LLFMT, CUPS_LLCAST total)); if (total >= 0) break; /* * Reads can be interrupted by signals and unavailable resources... */ if (errno == EAGAIN || errno == EINTR) continue; else return (-1); } /* * Return the total number of bytes read... */ return (total); } /* * 'cups_write()' - Write to a file descriptor. */ static ssize_t /* O - Number of bytes written or -1 */ cups_write(cups_file_t *fp, /* I - CUPS file */ const char *buf, /* I - Buffer */ size_t bytes) /* I - Number bytes */ { size_t total; /* Total bytes written */ ssize_t count; /* Count this time */ DEBUG_printf(("7cups_write(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")", (void *)fp, (void *)buf, CUPS_LLCAST bytes)); /* * Loop until all bytes are written... */ total = 0; while (bytes > 0) { #ifdef WIN32 if (fp->mode == 's') count = (ssize_t)send(fp->fd, buf, (unsigned)bytes, 0); else count = (ssize_t)write(fp->fd, buf, (unsigned)bytes); #else if (fp->mode == 's') count = send(fp->fd, buf, bytes, 0); else count = write(fp->fd, buf, bytes); #endif /* WIN32 */ DEBUG_printf(("9cups_write: count=" CUPS_LLFMT, CUPS_LLCAST count)); if (count < 0) { /* * Writes can be interrupted by signals and unavailable resources... */ if (errno == EAGAIN || errno == EINTR) continue; else return (-1); } /* * Update the counts for the last write call... */ bytes -= (size_t)count; total += (size_t)count; buf += count; } /* * Return the total number of bytes written... */ return ((ssize_t)total); } cups-2.2.7/cups/file.h000664 000765 000024 00000007452 13255074424 015225 0ustar00msweetstaff000000 000000 /* * Public file definitions for CUPS. * * Since stdio files max out at 256 files on many systems, we have to * write similar functions without this limit. At the same time, using * our own file functions allows us to provide transparent support of * different line endings, gzip'd print files, PPD files, etc. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_FILE_H_ # define _CUPS_FILE_H_ /* * Include necessary headers... */ # include "versioning.h" # include # include # if defined(WIN32) && !defined(__CUPS_SSIZE_T_DEFINED) # define __CUPS_SSIZE_T_DEFINED /* Windows does not support the ssize_t type, so map it to off_t... */ typedef off_t ssize_t; /* @private@ */ # endif /* WIN32 && !__CUPS_SSIZE_T_DEFINED */ /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * CUPS file definitions... */ # define CUPS_FILE_NONE 0 /* No compression */ # define CUPS_FILE_GZIP 1 /* GZIP compression */ /* * Types and structures... */ typedef struct _cups_file_s cups_file_t;/**** CUPS file type ****/ /* * Prototypes... */ extern int cupsFileClose(cups_file_t *fp) _CUPS_API_1_2; extern int cupsFileCompression(cups_file_t *fp) _CUPS_API_1_2; extern int cupsFileEOF(cups_file_t *fp) _CUPS_API_1_2; extern const char *cupsFileFind(const char *filename, const char *path, int executable, char *buffer, int bufsize) _CUPS_API_1_2; extern int cupsFileFlush(cups_file_t *fp) _CUPS_API_1_2; extern int cupsFileGetChar(cups_file_t *fp) _CUPS_API_1_2; extern char *cupsFileGetConf(cups_file_t *fp, char *buf, size_t buflen, char **value, int *linenum) _CUPS_API_1_2; extern size_t cupsFileGetLine(cups_file_t *fp, char *buf, size_t buflen) _CUPS_API_1_2; extern char *cupsFileGets(cups_file_t *fp, char *buf, size_t buflen) _CUPS_API_1_2; extern int cupsFileLock(cups_file_t *fp, int block) _CUPS_API_1_2; extern int cupsFileNumber(cups_file_t *fp) _CUPS_API_1_2; extern cups_file_t *cupsFileOpen(const char *filename, const char *mode) _CUPS_API_1_2; extern cups_file_t *cupsFileOpenFd(int fd, const char *mode) _CUPS_API_1_2; extern int cupsFilePeekChar(cups_file_t *fp) _CUPS_API_1_2; extern int cupsFilePrintf(cups_file_t *fp, const char *format, ...) __attribute__((__format__ (__printf__, 2, 3))) _CUPS_API_1_2; extern int cupsFilePutChar(cups_file_t *fp, int c) _CUPS_API_1_2; extern ssize_t cupsFilePutConf(cups_file_t *fp, const char *directive, const char *value) _CUPS_API_1_4; extern int cupsFilePuts(cups_file_t *fp, const char *s) _CUPS_API_1_2; extern ssize_t cupsFileRead(cups_file_t *fp, char *buf, size_t bytes) _CUPS_API_1_2; extern off_t cupsFileRewind(cups_file_t *fp) _CUPS_API_1_2; extern off_t cupsFileSeek(cups_file_t *fp, off_t pos) _CUPS_API_1_2; extern cups_file_t *cupsFileStderr(void) _CUPS_API_1_2; extern cups_file_t *cupsFileStdin(void) _CUPS_API_1_2; extern cups_file_t *cupsFileStdout(void) _CUPS_API_1_2; extern off_t cupsFileTell(cups_file_t *fp) _CUPS_API_1_2; extern int cupsFileUnlock(cups_file_t *fp) _CUPS_API_1_2; extern ssize_t cupsFileWrite(cups_file_t *fp, const char *buf, size_t bytes) _CUPS_API_1_2; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_FILE_H_ */ cups-2.2.7/cups/getdevices.c000664 000765 000024 00000017526 13255074424 016426 0ustar00msweetstaff000000 000000 /* * cupsGetDevices implementation for CUPS. * * Copyright 2008-2016 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include "adminutil.h" /* * 'cupsGetDevices()' - Get available printer devices. * * This function sends a CUPS-Get-Devices request and streams the discovered * devices to the specified callback function. The "timeout" parameter controls * how long the request lasts, while the "include_schemes" and "exclude_schemes" * parameters provide comma-delimited lists of backends to include or omit from * the request respectively. * * @since CUPS 1.4/macOS 10.6@ */ ipp_status_t /* O - Request status - @code IPP_OK@ on success. */ cupsGetDevices( http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ int timeout, /* I - Timeout in seconds or @code CUPS_TIMEOUT_DEFAULT@ */ const char *include_schemes, /* I - Comma-separated URI schemes to include or @code CUPS_INCLUDE_ALL@ */ const char *exclude_schemes, /* I - Comma-separated URI schemes to exclude or @code CUPS_EXCLUDE_NONE@ */ cups_device_cb_t callback, /* I - Callback function */ void *user_data) /* I - User data pointer */ { ipp_t *request, /* CUPS-Get-Devices request */ *response; /* CUPS-Get-Devices response */ ipp_attribute_t *attr; /* Current attribute */ const char *device_class, /* device-class value */ *device_id, /* device-id value */ *device_info, /* device-info value */ *device_location, /* device-location value */ *device_make_and_model, /* device-make-and-model value */ *device_uri; /* device-uri value */ int blocking; /* Current blocking-IO mode */ cups_option_t option; /* in/exclude-schemes option */ http_status_t status; /* HTTP status of request */ ipp_state_t state; /* IPP response state */ /* * Range check input... */ DEBUG_printf(("cupsGetDevices(http=%p, timeout=%d, include_schemes=\"%s\", exclude_schemes=\"%s\", callback=%p, user_data=%p)", (void *)http, timeout, include_schemes, exclude_schemes, (void *)callback, user_data)); if (!callback) return (IPP_STATUS_ERROR_INTERNAL); if (!http) http = _cupsConnect(); if (!http) return (IPP_STATUS_ERROR_SERVICE_UNAVAILABLE); /* * Create a CUPS-Get-Devices request... */ request = ippNewRequest(IPP_OP_CUPS_GET_DEVICES); if (timeout > 0) ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "timeout", timeout); if (include_schemes) { option.name = "include-schemes"; option.value = (char *)include_schemes; cupsEncodeOptions2(request, 1, &option, IPP_TAG_OPERATION); } if (exclude_schemes) { option.name = "exclude-schemes"; option.value = (char *)exclude_schemes; cupsEncodeOptions2(request, 1, &option, IPP_TAG_OPERATION); } /* * Send the request and do any necessary authentication... */ do { DEBUG_puts("2cupsGetDevices: Sending request..."); status = cupsSendRequest(http, request, "/", ippLength(request)); DEBUG_puts("2cupsGetDevices: Waiting for response status..."); while (status == HTTP_STATUS_CONTINUE) status = httpUpdate(http); if (status != HTTP_STATUS_OK) { httpFlush(http); if (status == HTTP_STATUS_UNAUTHORIZED) { /* * See if we can do authentication... */ DEBUG_puts("2cupsGetDevices: Need authorization..."); if (!cupsDoAuthentication(http, "POST", "/")) httpReconnect2(http, 30000, NULL); else { status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED; break; } } #ifdef HAVE_SSL else if (status == HTTP_STATUS_UPGRADE_REQUIRED) { /* * Force a reconnect with encryption... */ DEBUG_puts("2cupsGetDevices: Need encryption..."); if (!httpReconnect2(http, 30000, NULL)) httpEncryption(http, HTTP_ENCRYPTION_REQUIRED); } #endif /* HAVE_SSL */ } } while (status == HTTP_STATUS_UNAUTHORIZED || status == HTTP_STATUS_UPGRADE_REQUIRED); DEBUG_printf(("2cupsGetDevices: status=%d", status)); ippDelete(request); if (status != HTTP_STATUS_OK) { _cupsSetHTTPError(status); return (cupsLastError()); } /* * Read the response in non-blocking mode... */ blocking = httpGetBlocking(http); httpBlocking(http, 0); response = ippNew(); device_class = NULL; device_id = NULL; device_info = NULL; device_location = ""; device_make_and_model = NULL; device_uri = NULL; attr = NULL; DEBUG_puts("2cupsGetDevices: Reading response..."); do { if ((state = ippRead(http, response)) == IPP_STATE_ERROR) break; DEBUG_printf(("2cupsGetDevices: state=%d, response->last=%p", state, (void *)response->last)); if (!response->attrs) continue; while (attr != response->last) { if (!attr) attr = response->attrs; else attr = attr->next; DEBUG_printf(("2cupsGetDevices: attr->name=\"%s\", attr->value_tag=%d", attr->name, attr->value_tag)); if (!attr->name) { if (device_class && device_id && device_info && device_make_and_model && device_uri) (*callback)(device_class, device_id, device_info, device_make_and_model, device_uri, device_location, user_data); device_class = NULL; device_id = NULL; device_info = NULL; device_location = ""; device_make_and_model = NULL; device_uri = NULL; } else if (!strcmp(attr->name, "device-class") && attr->value_tag == IPP_TAG_KEYWORD) device_class = attr->values[0].string.text; else if (!strcmp(attr->name, "device-id") && attr->value_tag == IPP_TAG_TEXT) device_id = attr->values[0].string.text; else if (!strcmp(attr->name, "device-info") && attr->value_tag == IPP_TAG_TEXT) device_info = attr->values[0].string.text; else if (!strcmp(attr->name, "device-location") && attr->value_tag == IPP_TAG_TEXT) device_location = attr->values[0].string.text; else if (!strcmp(attr->name, "device-make-and-model") && attr->value_tag == IPP_TAG_TEXT) device_make_and_model = attr->values[0].string.text; else if (!strcmp(attr->name, "device-uri") && attr->value_tag == IPP_TAG_URI) device_uri = attr->values[0].string.text; } } while (state != IPP_STATE_DATA); DEBUG_printf(("2cupsGetDevices: state=%d, response->last=%p", state, (void *)response->last)); if (device_class && device_id && device_info && device_make_and_model && device_uri) (*callback)(device_class, device_id, device_info, device_make_and_model, device_uri, device_location, user_data); /* * Set the IPP status and return... */ httpBlocking(http, blocking); httpFlush(http); if (status == HTTP_STATUS_ERROR) _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(http->error), 0); else { attr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT); DEBUG_printf(("cupsGetDevices: status-code=%s, status-message=\"%s\"", ippErrorString(response->request.status.status_code), attr ? attr->values[0].string.text : "")); _cupsSetError(response->request.status.status_code, attr ? attr->values[0].string.text : ippErrorString(response->request.status.status_code), 0); } ippDelete(response); return (cupsLastError()); } cups-2.2.7/cups/getifaddrs.c000664 000765 000024 00000012644 13255074424 016414 0ustar00msweetstaff000000 000000 /* * Network interface functions for CUPS. * * Copyright 2007-2010 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers. */ #include "http-private.h" #ifndef HAVE_GETIFADDRS /* * '_cups_getifaddrs()' - Get a list of network interfaces on the system. */ int /* O - 0 on success, -1 on error */ _cups_getifaddrs(struct ifaddrs **addrs)/* O - List of interfaces */ { int sock; /* Socket */ char buffer[65536], /* Buffer for address info */ *bufptr, /* Pointer into buffer */ *bufend; /* End of buffer */ struct ifconf conf; /* Interface configurations */ struct sockaddr addr; /* Address data */ struct ifreq *ifp; /* Interface data */ int ifpsize; /* Size of interface data */ struct ifaddrs *temp; /* Pointer to current interface */ struct ifreq request; /* Interface request */ /* * Start with an empty list... */ if (addrs == NULL) return (-1); *addrs = NULL; /* * Create a UDP socket to get the interface data... */ memset (&addr, 0, sizeof(addr)); if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) return (-1); /* * Try to get the list of interfaces... */ conf.ifc_len = sizeof(buffer); conf.ifc_buf = buffer; if (ioctl(sock, SIOCGIFCONF, &conf) < 0) { /* * Couldn't get the list of interfaces... */ close(sock); return (-1); } /* * OK, got the list of interfaces, now lets step through the * buffer to pull them out... */ # ifdef HAVE_STRUCT_SOCKADDR_SA_LEN # define sockaddr_len(a) ((a)->sa_len) # else # define sockaddr_len(a) (sizeof(struct sockaddr)) # endif /* HAVE_STRUCT_SOCKADDR_SA_LEN */ for (bufptr = buffer, bufend = buffer + conf.ifc_len; bufptr < bufend; bufptr += ifpsize) { /* * Get the current interface information... */ ifp = (struct ifreq *)bufptr; ifpsize = sizeof(ifp->ifr_name) + sockaddr_len(&(ifp->ifr_addr)); if (ifpsize < sizeof(struct ifreq)) ifpsize = sizeof(struct ifreq); memset(&request, 0, sizeof(request)); memcpy(request.ifr_name, ifp->ifr_name, sizeof(ifp->ifr_name)); /* * Check the status of the interface... */ if (ioctl(sock, SIOCGIFFLAGS, &request) < 0) continue; /* * Allocate memory for a single interface record... */ if ((temp = calloc(1, sizeof(struct ifaddrs))) == NULL) { /* * Unable to allocate memory... */ close(sock); return (-1); } /* * Add this record to the front of the list and copy the name, flags, * and network address... */ temp->ifa_next = *addrs; *addrs = temp; temp->ifa_name = strdup(ifp->ifr_name); temp->ifa_flags = request.ifr_flags; if ((temp->ifa_addr = calloc(1, sockaddr_len(&(ifp->ifr_addr)))) != NULL) memcpy(temp->ifa_addr, &(ifp->ifr_addr), sockaddr_len(&(ifp->ifr_addr))); /* * Try to get the netmask for the interface... */ if (!ioctl(sock, SIOCGIFNETMASK, &request)) { /* * Got it, make a copy... */ if ((temp->ifa_netmask = calloc(1, sizeof(request.ifr_netmask))) != NULL) memcpy(temp->ifa_netmask, &(request.ifr_netmask), sizeof(request.ifr_netmask)); } /* * Then get the broadcast or point-to-point (destination) address, * if applicable... */ if (temp->ifa_flags & IFF_BROADCAST) { /* * Have a broadcast address, so get it! */ if (!ioctl(sock, SIOCGIFBRDADDR, &request)) { /* * Got it, make a copy... */ if ((temp->ifa_broadaddr = calloc(1, sizeof(request.ifr_broadaddr))) != NULL) memcpy(temp->ifa_broadaddr, &(request.ifr_broadaddr), sizeof(request.ifr_broadaddr)); } } else if (temp->ifa_flags & IFF_POINTOPOINT) { /* * Point-to-point interface; grab the remote address... */ if (!ioctl(sock, SIOCGIFDSTADDR, &request)) { temp->ifa_dstaddr = malloc(sizeof(request.ifr_dstaddr)); memcpy(temp->ifa_dstaddr, &(request.ifr_dstaddr), sizeof(request.ifr_dstaddr)); } } } /* * OK, we're done with the socket, close it and return 0... */ close(sock); return (0); } /* * '_cups_freeifaddrs()' - Free an interface list... */ void _cups_freeifaddrs(struct ifaddrs *addrs)/* I - Interface list to free */ { struct ifaddrs *next; /* Next interface in list */ while (addrs != NULL) { /* * Make a copy of the next interface pointer... */ next = addrs->ifa_next; /* * Free data values as needed... */ if (addrs->ifa_name) { free(addrs->ifa_name); addrs->ifa_name = NULL; } if (addrs->ifa_addr) { free(addrs->ifa_addr); addrs->ifa_addr = NULL; } if (addrs->ifa_netmask) { free(addrs->ifa_netmask); addrs->ifa_netmask = NULL; } if (addrs->ifa_dstaddr) { free(addrs->ifa_dstaddr); addrs->ifa_dstaddr = NULL; } /* * Free this node and continue to the next... */ free(addrs); addrs = next; } } #endif /* !HAVE_GETIFADDRS */ cups-2.2.7/cups/getputfile.c000664 000765 000024 00000024352 13255074424 016447 0ustar00msweetstaff000000 000000 /* * Get/put file functions for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include #include #if defined(WIN32) || defined(__EMX__) # include #else # include #endif /* WIN32 || __EMX__ */ /* * 'cupsGetFd()' - Get a file from the server. * * This function returns @code HTTP_STATUS_OK@ when the file is successfully retrieved. * * @since CUPS 1.1.20/macOS 10.4@ */ http_status_t /* O - HTTP status */ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *resource, /* I - Resource name */ int fd) /* I - File descriptor */ { ssize_t bytes; /* Number of bytes read */ char buffer[8192]; /* Buffer for file */ http_status_t status; /* HTTP status from server */ char if_modified_since[HTTP_MAX_VALUE]; /* If-Modified-Since header */ /* * Range check input... */ DEBUG_printf(("cupsGetFd(http=%p, resource=\"%s\", fd=%d)", (void *)http, resource, fd)); if (!resource || fd < 0) { if (http) http->error = EINVAL; return (HTTP_STATUS_ERROR); } if (!http) if ((http = _cupsConnect()) == NULL) return (HTTP_STATUS_SERVICE_UNAVAILABLE); /* * Then send GET requests to the HTTP server... */ strlcpy(if_modified_since, httpGetField(http, HTTP_FIELD_IF_MODIFIED_SINCE), sizeof(if_modified_since)); do { if (!_cups_strcasecmp(httpGetField(http, HTTP_FIELD_CONNECTION), "close")) { httpClearFields(http); if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } } httpClearFields(http); httpSetField(http, HTTP_FIELD_AUTHORIZATION, http->authstring); httpSetField(http, HTTP_FIELD_IF_MODIFIED_SINCE, if_modified_since); if (httpGet(http, resource)) { if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } else { status = HTTP_STATUS_UNAUTHORIZED; continue; } } while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE); if (status == HTTP_STATUS_UNAUTHORIZED) { /* * Flush any error message... */ httpFlush(http); /* * See if we can do authentication... */ if (cupsDoAuthentication(http, "GET", resource)) { status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED; break; } if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } continue; } #ifdef HAVE_SSL else if (status == HTTP_STATUS_UPGRADE_REQUIRED) { /* Flush any error message... */ httpFlush(http); /* Reconnect... */ if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } /* Upgrade with encryption... */ httpEncryption(http, HTTP_ENCRYPTION_REQUIRED); /* Try again, this time with encryption enabled... */ continue; } #endif /* HAVE_SSL */ } while (status == HTTP_STATUS_UNAUTHORIZED || status == HTTP_STATUS_UPGRADE_REQUIRED); /* * See if we actually got the file or an error... */ if (status == HTTP_STATUS_OK) { /* * Yes, copy the file... */ while ((bytes = httpRead2(http, buffer, sizeof(buffer))) > 0) write(fd, buffer, (size_t)bytes); } else { _cupsSetHTTPError(status); httpFlush(http); } /* * Return the request status... */ DEBUG_printf(("1cupsGetFd: Returning %d...", status)); return (status); } /* * 'cupsGetFile()' - Get a file from the server. * * This function returns @code HTTP_STATUS_OK@ when the file is successfully retrieved. * * @since CUPS 1.1.20/macOS 10.4@ */ http_status_t /* O - HTTP status */ cupsGetFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *resource, /* I - Resource name */ const char *filename) /* I - Filename */ { int fd; /* File descriptor */ http_status_t status; /* Status */ /* * Range check input... */ if (!http || !resource || !filename) { if (http) http->error = EINVAL; return (HTTP_STATUS_ERROR); } /* * Create the file... */ if ((fd = open(filename, O_WRONLY | O_EXCL | O_TRUNC)) < 0) { /* * Couldn't open the file! */ http->error = errno; return (HTTP_STATUS_ERROR); } /* * Get the file... */ status = cupsGetFd(http, resource, fd); /* * If the file couldn't be gotten, then remove the file... */ close(fd); if (status != HTTP_STATUS_OK) unlink(filename); /* * Return the HTTP status code... */ return (status); } /* * 'cupsPutFd()' - Put a file on the server. * * This function returns @code HTTP_STATUS_CREATED@ when the file is stored * successfully. * * @since CUPS 1.1.20/macOS 10.4@ */ http_status_t /* O - HTTP status */ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *resource, /* I - Resource name */ int fd) /* I - File descriptor */ { ssize_t bytes; /* Number of bytes read */ int retries; /* Number of retries */ char buffer[8192]; /* Buffer for file */ http_status_t status; /* HTTP status from server */ /* * Range check input... */ DEBUG_printf(("cupsPutFd(http=%p, resource=\"%s\", fd=%d)", (void *)http, resource, fd)); if (!resource || fd < 0) { if (http) http->error = EINVAL; return (HTTP_STATUS_ERROR); } if (!http) if ((http = _cupsConnect()) == NULL) return (HTTP_STATUS_SERVICE_UNAVAILABLE); /* * Then send PUT requests to the HTTP server... */ retries = 0; do { if (!_cups_strcasecmp(httpGetField(http, HTTP_FIELD_CONNECTION), "close")) { httpClearFields(http); if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } } DEBUG_printf(("2cupsPutFd: starting attempt, authstring=\"%s\"...", http->authstring)); httpClearFields(http); httpSetField(http, HTTP_FIELD_AUTHORIZATION, http->authstring); httpSetField(http, HTTP_FIELD_TRANSFER_ENCODING, "chunked"); httpSetExpect(http, HTTP_STATUS_CONTINUE); if (httpPut(http, resource)) { if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } else { status = HTTP_STATUS_UNAUTHORIZED; continue; } } /* * Wait up to 1 second for a 100-continue response... */ if (httpWait(http, 1000)) status = httpUpdate(http); else status = HTTP_STATUS_CONTINUE; if (status == HTTP_STATUS_CONTINUE) { /* * Copy the file... */ lseek(fd, 0, SEEK_SET); while ((bytes = read(fd, buffer, sizeof(buffer))) > 0) if (httpCheck(http)) { if ((status = httpUpdate(http)) != HTTP_STATUS_CONTINUE) break; } else httpWrite2(http, buffer, (size_t)bytes); } if (status == HTTP_STATUS_CONTINUE) { httpWrite2(http, buffer, 0); while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE); } if (status == HTTP_STATUS_ERROR && !retries) { DEBUG_printf(("2cupsPutFd: retry on status %d", status)); retries ++; /* Flush any error message... */ httpFlush(http); /* Reconnect... */ if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } /* Try again... */ continue; } DEBUG_printf(("2cupsPutFd: status=%d", status)); if (status == HTTP_STATUS_UNAUTHORIZED) { /* * Flush any error message... */ httpFlush(http); /* * See if we can do authentication... */ if (cupsDoAuthentication(http, "PUT", resource)) { status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED; break; } if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } continue; } #ifdef HAVE_SSL else if (status == HTTP_STATUS_UPGRADE_REQUIRED) { /* Flush any error message... */ httpFlush(http); /* Reconnect... */ if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } /* Upgrade with encryption... */ httpEncryption(http, HTTP_ENCRYPTION_REQUIRED); /* Try again, this time with encryption enabled... */ continue; } #endif /* HAVE_SSL */ } while (status == HTTP_STATUS_UNAUTHORIZED || status == HTTP_STATUS_UPGRADE_REQUIRED || (status == HTTP_STATUS_ERROR && retries < 2)); /* * See if we actually put the file or an error... */ if (status != HTTP_STATUS_CREATED) { _cupsSetHTTPError(status); httpFlush(http); } DEBUG_printf(("1cupsPutFd: Returning %d...", status)); return (status); } /* * 'cupsPutFile()' - Put a file on the server. * * This function returns @code HTTP_CREATED@ when the file is stored * successfully. * * @since CUPS 1.1.20/macOS 10.4@ */ http_status_t /* O - HTTP status */ cupsPutFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *resource, /* I - Resource name */ const char *filename) /* I - Filename */ { int fd; /* File descriptor */ http_status_t status; /* Status */ /* * Range check input... */ if (!http || !resource || !filename) { if (http) http->error = EINVAL; return (HTTP_STATUS_ERROR); } /* * Open the local file... */ if ((fd = open(filename, O_RDONLY)) < 0) { /* * Couldn't open the file! */ http->error = errno; return (HTTP_STATUS_ERROR); } /* * Put the file... */ status = cupsPutFd(http, resource, fd); close(fd); return (status); } cups-2.2.7/cups/globals.c000664 000765 000024 00000021363 13255074424 015721 0ustar00msweetstaff000000 000000 /* * Global variable access routines for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" /* * Local globals... */ #ifdef DEBUG static int cups_global_index = 0; /* Next thread number */ #endif /* DEBUG */ static _cups_threadkey_t cups_globals_key = _CUPS_THREADKEY_INITIALIZER; /* Thread local storage key */ #ifdef HAVE_PTHREAD_H static pthread_once_t cups_globals_key_once = PTHREAD_ONCE_INIT; /* One-time initialization object */ #endif /* HAVE_PTHREAD_H */ #if defined(HAVE_PTHREAD_H) || defined(WIN32) static _cups_mutex_t cups_global_mutex = _CUPS_MUTEX_INITIALIZER; /* Global critical section */ #endif /* HAVE_PTHREAD_H || WIN32 */ /* * Local functions... */ #ifdef WIN32 static void cups_fix_path(char *path); #endif /* WIN32 */ static _cups_globals_t *cups_globals_alloc(void); #if defined(HAVE_PTHREAD_H) || defined(WIN32) static void cups_globals_free(_cups_globals_t *g); #endif /* HAVE_PTHREAD_H || WIN32 */ #ifdef HAVE_PTHREAD_H static void cups_globals_init(void); #endif /* HAVE_PTHREAD_H */ /* * '_cupsGlobalLock()' - Lock the global mutex. */ void _cupsGlobalLock(void) { #ifdef HAVE_PTHREAD_H pthread_mutex_lock(&cups_global_mutex); #elif defined(WIN32) EnterCriticalSection(&cups_global_mutex.m_criticalSection); #endif /* HAVE_PTHREAD_H */ } /* * '_cupsGlobals()' - Return a pointer to thread local storage */ _cups_globals_t * /* O - Pointer to global data */ _cupsGlobals(void) { _cups_globals_t *cg; /* Pointer to global data */ #ifdef HAVE_PTHREAD_H /* * Initialize the global data exactly once... */ pthread_once(&cups_globals_key_once, cups_globals_init); #endif /* HAVE_PTHREAD_H */ /* * See if we have allocated the data yet... */ if ((cg = (_cups_globals_t *)_cupsThreadGetData(cups_globals_key)) == NULL) { /* * No, allocate memory as set the pointer for the key... */ if ((cg = cups_globals_alloc()) != NULL) _cupsThreadSetData(cups_globals_key, cg); } /* * Return the pointer to the data... */ return (cg); } /* * '_cupsGlobalUnlock()' - Unlock the global mutex. */ void _cupsGlobalUnlock(void) { #ifdef HAVE_PTHREAD_H pthread_mutex_unlock(&cups_global_mutex); #elif defined(WIN32) LeaveCriticalSection(&cups_global_mutex.m_criticalSection); #endif /* HAVE_PTHREAD_H */ } #ifdef WIN32 /* * 'DllMain()' - Main entry for library. */ BOOL WINAPI /* O - Success/failure */ DllMain(HINSTANCE hinst, /* I - DLL module handle */ DWORD reason, /* I - Reason */ LPVOID reserved) /* I - Unused */ { _cups_globals_t *cg; /* Global data */ (void)hinst; (void)reserved; switch (reason) { case DLL_PROCESS_ATTACH : /* Called on library initialization */ InitializeCriticalSection(&cups_global_mutex.m_criticalSection); if ((cups_globals_key = TlsAlloc()) == TLS_OUT_OF_INDEXES) return (FALSE); break; case DLL_THREAD_DETACH : /* Called when a thread terminates */ if ((cg = (_cups_globals_t *)TlsGetValue(cups_globals_key)) != NULL) cups_globals_free(cg); break; case DLL_PROCESS_DETACH : /* Called when library is unloaded */ if ((cg = (_cups_globals_t *)TlsGetValue(cups_globals_key)) != NULL) cups_globals_free(cg); TlsFree(cups_globals_key); DeleteCriticalSection(&cups_global_mutex.m_criticalSection); break; default: break; } return (TRUE); } #endif /* WIN32 */ /* * 'cups_globals_alloc()' - Allocate and initialize global data. */ static _cups_globals_t * /* O - Pointer to global data */ cups_globals_alloc(void) { _cups_globals_t *cg = malloc(sizeof(_cups_globals_t)); /* Pointer to global data */ #ifdef WIN32 HKEY key; /* Registry key */ DWORD size; /* Size of string */ static char installdir[1024] = "", /* Install directory */ confdir[1024] = "", /* Server root directory */ localedir[1024] = ""; /* Locale directory */ #endif /* WIN32 */ if (!cg) return (NULL); /* * Clear the global storage and set the default encryption and password * callback values... */ memset(cg, 0, sizeof(_cups_globals_t)); cg->encryption = (http_encryption_t)-1; cg->password_cb = (cups_password_cb2_t)_cupsGetPassword; cg->trust_first = -1; cg->any_root = -1; cg->expired_certs = -1; cg->validate_certs = -1; #ifdef DEBUG /* * Friendly thread ID for debugging... */ cg->thread_id = ++ cups_global_index; #endif /* DEBUG */ /* * Then set directories as appropriate... */ #ifdef WIN32 if (!installdir[0]) { /* * Open the registry... */ strlcpy(installdir, "C:/Program Files/cups.org", sizeof(installdir)); if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\cups.org", 0, KEY_READ, &key)) { /* * Grab the installation directory... */ char *ptr; /* Pointer into installdir */ size = sizeof(installdir); RegQueryValueEx(key, "installdir", NULL, NULL, installdir, &size); RegCloseKey(key); for (ptr = installdir; *ptr;) { if (*ptr == '\\') { if (ptr[1]) *ptr++ = '/'; else *ptr = '\0'; /* Strip trailing \ */ } else if (*ptr == '/' && !ptr[1]) *ptr = '\0'; /* Strip trailing / */ else ptr ++; } } snprintf(confdir, sizeof(confdir), "%s/conf", installdir); snprintf(localedir, sizeof(localedir), "%s/locale", installdir); } if ((cg->cups_datadir = getenv("CUPS_DATADIR")) == NULL) cg->cups_datadir = installdir; if ((cg->cups_serverbin = getenv("CUPS_SERVERBIN")) == NULL) cg->cups_serverbin = installdir; if ((cg->cups_serverroot = getenv("CUPS_SERVERROOT")) == NULL) cg->cups_serverroot = confdir; if ((cg->cups_statedir = getenv("CUPS_STATEDIR")) == NULL) cg->cups_statedir = confdir; if ((cg->localedir = getenv("LOCALEDIR")) == NULL) cg->localedir = localedir; #else # ifdef HAVE_GETEUID if ((geteuid() != getuid() && getuid()) || getegid() != getgid()) # else if (!getuid()) # endif /* HAVE_GETEUID */ { /* * When running setuid/setgid, don't allow environment variables to override * the directories... */ cg->cups_datadir = CUPS_DATADIR; cg->cups_serverbin = CUPS_SERVERBIN; cg->cups_serverroot = CUPS_SERVERROOT; cg->cups_statedir = CUPS_STATEDIR; cg->localedir = CUPS_LOCALEDIR; } else { /* * Allow directories to be overridden by environment variables. */ if ((cg->cups_datadir = getenv("CUPS_DATADIR")) == NULL) cg->cups_datadir = CUPS_DATADIR; if ((cg->cups_serverbin = getenv("CUPS_SERVERBIN")) == NULL) cg->cups_serverbin = CUPS_SERVERBIN; if ((cg->cups_serverroot = getenv("CUPS_SERVERROOT")) == NULL) cg->cups_serverroot = CUPS_SERVERROOT; if ((cg->cups_statedir = getenv("CUPS_STATEDIR")) == NULL) cg->cups_statedir = CUPS_STATEDIR; if ((cg->localedir = getenv("LOCALEDIR")) == NULL) cg->localedir = CUPS_LOCALEDIR; } #endif /* WIN32 */ return (cg); } /* * 'cups_globals_free()' - Free global data. */ #if defined(HAVE_PTHREAD_H) || defined(WIN32) static void cups_globals_free(_cups_globals_t *cg) /* I - Pointer to global data */ { _cups_buffer_t *buffer, /* Current read/write buffer */ *next; /* Next buffer */ if (cg->last_status_message) _cupsStrFree(cg->last_status_message); for (buffer = cg->cups_buffers; buffer; buffer = next) { next = buffer->next; free(buffer); } cupsArrayDelete(cg->leg_size_lut); cupsArrayDelete(cg->ppd_size_lut); cupsArrayDelete(cg->pwg_size_lut); httpClose(cg->http); #ifdef HAVE_SSL _httpFreeCredentials(cg->tls_credentials); #endif /* HAVE_SSL */ cupsFileClose(cg->stdio_files[0]); cupsFileClose(cg->stdio_files[1]); cupsFileClose(cg->stdio_files[2]); cupsFreeOptions(cg->cupsd_num_settings, cg->cupsd_settings); free(cg); } #endif /* HAVE_PTHREAD_H || WIN32 */ #ifdef HAVE_PTHREAD_H /* * 'cups_globals_init()' - Initialize environment variables. */ static void cups_globals_init(void) { /* * Register the global data for this thread... */ pthread_key_create(&cups_globals_key, (void (*)(void *))cups_globals_free); } #endif /* HAVE_PTHREAD_H */ cups-2.2.7/cups/hash.c000664 000765 000024 00000017147 13255074424 015226 0ustar00msweetstaff000000 000000 /* * Hashing function for CUPS. * * Copyright © 2015-2018 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #ifdef __APPLE__ # include #elif defined(HAVE_GNUTLS) # include #else # include "md5-private.h" #endif /* __APPLE__ */ /* * 'cupsHashData()' - Perform a hash function on the given data. * * The "algorithm" argument can be any of the registered, non-deprecated IPP * hash algorithms for the "job-password-encryption" attribute, including * "sha" for SHA-1, "sha-256" for SHA2-256, etc. * * The "hash" argument points to a buffer of "hashsize" bytes and should be at * least 64 bytes in length for all of the supported algorithms. * * The returned hash is binary data. * * @since CUPS 2.2/macOS 10.12@ */ ssize_t /* O - Size of hash or -1 on error */ cupsHashData(const char *algorithm, /* I - Algorithm name */ const void *data, /* I - Data to hash */ size_t datalen, /* I - Length of data to hash */ unsigned char *hash, /* I - Hash buffer */ size_t hashsize) /* I - Size of hash buffer */ { if (!algorithm || !data || datalen == 0 || !hash || hashsize == 0) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad arguments to function"), 1); return (-1); } #ifdef __APPLE__ if (!strcmp(algorithm, "md5")) { /* * MD5 (deprecated but widely used...) */ CC_MD5_CTX ctx; /* MD5 context */ if (hashsize < CC_MD5_DIGEST_LENGTH) goto too_small; CC_MD5_Init(&ctx); CC_MD5_Update(&ctx, data, (CC_LONG)datalen); CC_MD5_Final(hash, &ctx); return (CC_MD5_DIGEST_LENGTH); } else if (!strcmp(algorithm, "sha")) { /* * SHA-1... */ CC_SHA1_CTX ctx; /* SHA-1 context */ if (hashsize < CC_SHA1_DIGEST_LENGTH) goto too_small; CC_SHA1_Init(&ctx); CC_SHA1_Update(&ctx, data, (CC_LONG)datalen); CC_SHA1_Final(hash, &ctx); return (CC_SHA1_DIGEST_LENGTH); } else if (!strcmp(algorithm, "sha2-224")) { CC_SHA256_CTX ctx; /* SHA-224 context */ if (hashsize < CC_SHA224_DIGEST_LENGTH) goto too_small; CC_SHA224_Init(&ctx); CC_SHA224_Update(&ctx, data, (CC_LONG)datalen); CC_SHA224_Final(hash, &ctx); return (CC_SHA224_DIGEST_LENGTH); } else if (!strcmp(algorithm, "sha2-256")) { CC_SHA256_CTX ctx; /* SHA-256 context */ if (hashsize < CC_SHA256_DIGEST_LENGTH) goto too_small; CC_SHA256_Init(&ctx); CC_SHA256_Update(&ctx, data, (CC_LONG)datalen); CC_SHA256_Final(hash, &ctx); return (CC_SHA256_DIGEST_LENGTH); } else if (!strcmp(algorithm, "sha2-384")) { CC_SHA512_CTX ctx; /* SHA-384 context */ if (hashsize < CC_SHA384_DIGEST_LENGTH) goto too_small; CC_SHA384_Init(&ctx); CC_SHA384_Update(&ctx, data, (CC_LONG)datalen); CC_SHA384_Final(hash, &ctx); return (CC_SHA384_DIGEST_LENGTH); } else if (!strcmp(algorithm, "sha2-512")) { CC_SHA512_CTX ctx; /* SHA-512 context */ if (hashsize < CC_SHA512_DIGEST_LENGTH) goto too_small; CC_SHA512_Init(&ctx); CC_SHA512_Update(&ctx, data, (CC_LONG)datalen); CC_SHA512_Final(hash, &ctx); return (CC_SHA512_DIGEST_LENGTH); } else if (!strcmp(algorithm, "sha2-512_224")) { CC_SHA512_CTX ctx; /* SHA-512 context */ unsigned char temp[CC_SHA512_DIGEST_LENGTH]; /* SHA-512 hash */ /* * SHA2-512 truncated to 224 bits (28 bytes)... */ if (hashsize < CC_SHA224_DIGEST_LENGTH) goto too_small; CC_SHA512_Init(&ctx); CC_SHA512_Update(&ctx, data, (CC_LONG)datalen); CC_SHA512_Final(temp, &ctx); memcpy(hash, temp, CC_SHA224_DIGEST_LENGTH); return (CC_SHA224_DIGEST_LENGTH); } else if (!strcmp(algorithm, "sha2-512_256")) { CC_SHA512_CTX ctx; /* SHA-512 context */ unsigned char temp[CC_SHA512_DIGEST_LENGTH]; /* SHA-512 hash */ /* * SHA2-512 truncated to 256 bits (32 bytes)... */ if (hashsize < CC_SHA256_DIGEST_LENGTH) goto too_small; CC_SHA512_Init(&ctx); CC_SHA512_Update(&ctx, data, (CC_LONG)datalen); CC_SHA512_Final(temp, &ctx); memcpy(hash, temp, CC_SHA256_DIGEST_LENGTH); return (CC_SHA256_DIGEST_LENGTH); } #elif defined(HAVE_GNUTLS) gnutls_digest_algorithm_t alg = GNUTLS_DIG_UNKNOWN; /* Algorithm */ unsigned char temp[64]; /* Temporary hash buffer */ size_t tempsize = 0; /* Truncate to this size? */ if (!strcmp(algorithm, "md5")) alg = GNUTLS_DIG_MD5; else if (!strcmp(algorithm, "sha")) alg = GNUTLS_DIG_SHA1; else if (!strcmp(algorithm, "sha2-224")) alg = GNUTLS_DIG_SHA224; else if (!strcmp(algorithm, "sha2-256")) alg = GNUTLS_DIG_SHA256; else if (!strcmp(algorithm, "sha2-384")) alg = GNUTLS_DIG_SHA384; else if (!strcmp(algorithm, "sha2-512")) alg = GNUTLS_DIG_SHA512; else if (!strcmp(algorithm, "sha2-512_224")) { alg = GNUTLS_DIG_SHA512; tempsize = 28; } else if (!strcmp(algorithm, "sha2-512_256")) { alg = GNUTLS_DIG_SHA512; tempsize = 32; } if (alg != GNUTLS_DIG_UNKNOWN) { if (tempsize > 0) { /* * Truncate result to tempsize bytes... */ if (hashsize < tempsize) goto too_small; gnutls_hash_fast(alg, data, datalen, temp); memcpy(hash, temp, tempsize); return ((ssize_t)tempsize); } if (hashsize < gnutls_hash_get_len(alg)) goto too_small; gnutls_hash_fast(alg, data, datalen, hash); return (gnutls_hash_get_len(alg)); } #else /* * No hash support beyond MD5 without CommonCrypto or GNU TLS... */ if (!strcmp(algorithm, "md5")) { _cups_md5_state_t state; /* MD5 state info */ _cupsMD5Init(&state); _cupsMD5Append(&state, data, datalen); _cupsMD5Finish(&state, hash); return (16); } else if (hashsize < 64) goto too_small; #endif /* __APPLE__ */ /* * Unknown hash algorithm... */ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unknown hash algorithm."), 1); return (-1); /* * We get here if the buffer is too small. */ too_small: _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Hash buffer too small."), 1); return (-1); } /* * 'cupsHashString()' - Format a hash value as a hexadecimal string. * * The passed buffer must be at least 2 * hashsize + 1 characters in length. * * @since CUPS 2.2.7@ */ const char * /* O - Formatted string */ cupsHashString( const unsigned char *hash, /* I - Hash */ size_t hashsize, /* I - Size of hash */ char *buffer, /* I - String buffer */ size_t bufsize) /* I - Size of string buffer */ { char *bufptr = buffer; /* Pointer into buffer */ static const char *hex = "0123456789abcdef"; /* Hex characters (lowercase!) */ /* * Range check input... */ if (!hash || hashsize < 1 || !buffer || bufsize < (2 * hashsize + 1)) { if (buffer) *buffer = '\0'; return (NULL); } /* * Loop until we've converted the whole hash... */ while (hashsize > 0) { *bufptr++ = hex[*hash >> 4]; *bufptr++ = hex[*hash & 15]; hash ++; hashsize --; } *bufptr = '\0'; return (buffer); } cups-2.2.7/cups/http-addr.c000664 000765 000024 00000052535 13255074424 016172 0ustar00msweetstaff000000 000000 /* * HTTP address routines for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include #ifdef HAVE_RESOLV_H # include #endif /* HAVE_RESOLV_H */ #ifdef __APPLE__ # include # include #endif /* __APPLE__ */ /* * 'httpAddrAny()' - Check for the "any" address. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 1 if "any", 0 otherwise */ httpAddrAny(const http_addr_t *addr) /* I - Address to check */ { if (!addr) return (0); #ifdef AF_INET6 if (addr->addr.sa_family == AF_INET6 && IN6_IS_ADDR_UNSPECIFIED(&(addr->ipv6.sin6_addr))) return (1); #endif /* AF_INET6 */ if (addr->addr.sa_family == AF_INET && ntohl(addr->ipv4.sin_addr.s_addr) == 0x00000000) return (1); return (0); } /* * 'httpAddrClose()' - Close a socket created by @link httpAddrConnect@ or * @link httpAddrListen@. * * Pass @code NULL@ for sockets created with @link httpAddrConnect2@ and the * listen address for sockets created with @link httpAddrListen@. This function * ensures that domain sockets are removed when closed. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 0 on success, -1 on failure */ httpAddrClose(http_addr_t *addr, /* I - Listen address or @code NULL@ */ int fd) /* I - Socket file descriptor */ { #ifdef WIN32 if (closesocket(fd)) #else if (close(fd)) #endif /* WIN32 */ return (-1); #ifdef AF_LOCAL if (addr && addr->addr.sa_family == AF_LOCAL) return (unlink(addr->un.sun_path)); #endif /* AF_LOCAL */ return (0); } /* * 'httpAddrEqual()' - Compare two addresses. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 1 if equal, 0 if not */ httpAddrEqual(const http_addr_t *addr1, /* I - First address */ const http_addr_t *addr2) /* I - Second address */ { if (!addr1 && !addr2) return (1); if (!addr1 || !addr2) return (0); if (addr1->addr.sa_family != addr2->addr.sa_family) return (0); #ifdef AF_LOCAL if (addr1->addr.sa_family == AF_LOCAL) return (!strcmp(addr1->un.sun_path, addr2->un.sun_path)); #endif /* AF_LOCAL */ #ifdef AF_INET6 if (addr1->addr.sa_family == AF_INET6) return (!memcmp(&(addr1->ipv6.sin6_addr), &(addr2->ipv6.sin6_addr), 16)); #endif /* AF_INET6 */ return (addr1->ipv4.sin_addr.s_addr == addr2->ipv4.sin_addr.s_addr); } /* * 'httpAddrLength()' - Return the length of the address in bytes. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - Length in bytes */ httpAddrLength(const http_addr_t *addr) /* I - Address */ { if (!addr) return (0); #ifdef AF_INET6 if (addr->addr.sa_family == AF_INET6) return (sizeof(addr->ipv6)); else #endif /* AF_INET6 */ #ifdef AF_LOCAL if (addr->addr.sa_family == AF_LOCAL) return ((int)(offsetof(struct sockaddr_un, sun_path) + strlen(addr->un.sun_path) + 1)); else #endif /* AF_LOCAL */ if (addr->addr.sa_family == AF_INET) return (sizeof(addr->ipv4)); else return (0); } /* * 'httpAddrListen()' - Create a listening socket bound to the specified * address and port. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - Socket or -1 on error */ httpAddrListen(http_addr_t *addr, /* I - Address to bind to */ int port) /* I - Port number to bind to */ { int fd = -1, /* Socket */ val, /* Socket value */ status; /* Bind status */ /* * Range check input... */ if (!addr || port < 0) return (-1); /* * Create the socket and set options... */ if ((fd = socket(addr->addr.sa_family, SOCK_STREAM, 0)) < 0) { _cupsSetHTTPError(HTTP_STATUS_ERROR); return (-1); } val = 1; setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, CUPS_SOCAST &val, sizeof(val)); #ifdef IPV6_V6ONLY if (addr->addr.sa_family == AF_INET6) setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, CUPS_SOCAST &val, sizeof(val)); #endif /* IPV6_V6ONLY */ /* * Bind the socket... */ #ifdef AF_LOCAL if (addr->addr.sa_family == AF_LOCAL) { mode_t mask; /* Umask setting */ /* * Remove any existing domain socket file... */ unlink(addr->un.sun_path); /* * Save the current umask and set it to 0 so that all users can access * the domain socket... */ mask = umask(0); /* * Bind the domain socket... */ status = bind(fd, (struct sockaddr *)addr, (socklen_t)httpAddrLength(addr)); /* * Restore the umask and fix permissions... */ umask(mask); chmod(addr->un.sun_path, 0140777); } else #endif /* AF_LOCAL */ { _httpAddrSetPort(addr, port); status = bind(fd, (struct sockaddr *)addr, (socklen_t)httpAddrLength(addr)); } if (status) { _cupsSetHTTPError(HTTP_STATUS_ERROR); close(fd); return (-1); } /* * Listen... */ if (listen(fd, 5)) { _cupsSetHTTPError(HTTP_STATUS_ERROR); close(fd); return (-1); } /* * Close on exec... */ #ifndef WIN32 fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); #endif /* !WIN32 */ #ifdef SO_NOSIGPIPE /* * Disable SIGPIPE for this socket. */ val = 1; setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, CUPS_SOCAST &val, sizeof(val)); #endif /* SO_NOSIGPIPE */ return (fd); } /* * 'httpAddrLocalhost()' - Check for the local loopback address. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 1 if local host, 0 otherwise */ httpAddrLocalhost( const http_addr_t *addr) /* I - Address to check */ { if (!addr) return (1); #ifdef AF_INET6 if (addr->addr.sa_family == AF_INET6 && IN6_IS_ADDR_LOOPBACK(&(addr->ipv6.sin6_addr))) return (1); #endif /* AF_INET6 */ #ifdef AF_LOCAL if (addr->addr.sa_family == AF_LOCAL) return (1); #endif /* AF_LOCAL */ if (addr->addr.sa_family == AF_INET && (ntohl(addr->ipv4.sin_addr.s_addr) & 0xff000000) == 0x7f000000) return (1); return (0); } /* * 'httpAddrLookup()' - Lookup the hostname associated with the address. * * @since CUPS 1.2/macOS 10.5@ */ char * /* O - Host name */ httpAddrLookup( const http_addr_t *addr, /* I - Address to lookup */ char *name, /* I - Host name buffer */ int namelen) /* I - Size of name buffer */ { _cups_globals_t *cg = _cupsGlobals(); /* Global data */ DEBUG_printf(("httpAddrLookup(addr=%p, name=%p, namelen=%d)", (void *)addr, (void *)name, namelen)); /* * Range check input... */ if (!addr || !name || namelen <= 2) { if (name && namelen >= 1) *name = '\0'; return (NULL); } #ifdef AF_LOCAL if (addr->addr.sa_family == AF_LOCAL) { strlcpy(name, addr->un.sun_path, (size_t)namelen); return (name); } #endif /* AF_LOCAL */ /* * Optimize lookups for localhost/loopback addresses... */ if (httpAddrLocalhost(addr)) { strlcpy(name, "localhost", (size_t)namelen); return (name); } #ifdef HAVE_RES_INIT /* * STR #2920: Initialize resolver after failure in cups-polld * * If the previous lookup failed, re-initialize the resolver to prevent * temporary network errors from persisting. This *should* be handled by * the resolver libraries, but apparently the glibc folks do not agree. * * We set a flag at the end of this function if we encounter an error that * requires reinitialization of the resolver functions. We then call * res_init() if the flag is set on the next call here or in httpAddrLookup(). */ if (cg->need_res_init) { res_init(); cg->need_res_init = 0; } #endif /* HAVE_RES_INIT */ #ifdef HAVE_GETNAMEINFO { /* * STR #2486: httpAddrLookup() fails when getnameinfo() returns EAI_AGAIN * * FWIW, I think this is really a bug in the implementation of * getnameinfo(), but falling back on httpAddrString() is easy to * do... */ int error = getnameinfo(&addr->addr, (socklen_t)httpAddrLength(addr), name, (socklen_t)namelen, NULL, 0, 0); if (error) { if (error == EAI_FAIL) cg->need_res_init = 1; return (httpAddrString(addr, name, namelen)); } } #else { struct hostent *host; /* Host from name service */ # ifdef AF_INET6 if (addr->addr.sa_family == AF_INET6) host = gethostbyaddr((char *)&(addr->ipv6.sin6_addr), sizeof(struct in_addr), AF_INET6); else # endif /* AF_INET6 */ host = gethostbyaddr((char *)&(addr->ipv4.sin_addr), sizeof(struct in_addr), AF_INET); if (host == NULL) { /* * No hostname, so return the raw address... */ if (h_errno == NO_RECOVERY) cg->need_res_init = 1; return (httpAddrString(addr, name, namelen)); } strlcpy(name, host->h_name, (size_t)namelen); } #endif /* HAVE_GETNAMEINFO */ DEBUG_printf(("1httpAddrLookup: returning \"%s\"...", name)); return (name); } /* * 'httpAddrFamily()' - Get the address family of an address. */ int /* O - Address family */ httpAddrFamily(http_addr_t *addr) /* I - Address */ { if (addr) return (addr->addr.sa_family); else return (0); } /* * 'httpAddrPort()' - Get the port number associated with an address. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - Port number */ httpAddrPort(http_addr_t *addr) /* I - Address */ { if (!addr) return (-1); #ifdef AF_INET6 else if (addr->addr.sa_family == AF_INET6) return (ntohs(addr->ipv6.sin6_port)); #endif /* AF_INET6 */ else if (addr->addr.sa_family == AF_INET) return (ntohs(addr->ipv4.sin_port)); else return (0); } /* * '_httpAddrSetPort()' - Set the port number associated with an address. */ void _httpAddrSetPort(http_addr_t *addr, /* I - Address */ int port) /* I - Port */ { if (!addr || port <= 0) return; #ifdef AF_INET6 if (addr->addr.sa_family == AF_INET6) addr->ipv6.sin6_port = htons(port); else #endif /* AF_INET6 */ if (addr->addr.sa_family == AF_INET) addr->ipv4.sin_port = htons(port); } /* * 'httpAddrString()' - Convert an address to a numeric string. * * @since CUPS 1.2/macOS 10.5@ */ char * /* O - Numeric address string */ httpAddrString(const http_addr_t *addr, /* I - Address to convert */ char *s, /* I - String buffer */ int slen) /* I - Length of string */ { DEBUG_printf(("httpAddrString(addr=%p, s=%p, slen=%d)", (void *)addr, (void *)s, slen)); /* * Range check input... */ if (!addr || !s || slen <= 2) { if (s && slen >= 1) *s = '\0'; return (NULL); } #ifdef AF_LOCAL if (addr->addr.sa_family == AF_LOCAL) { if (addr->un.sun_path[0] == '/') strlcpy(s, addr->un.sun_path, (size_t)slen); else strlcpy(s, "localhost", (size_t)slen); } else #endif /* AF_LOCAL */ if (addr->addr.sa_family == AF_INET) { unsigned temp; /* Temporary address */ temp = ntohl(addr->ipv4.sin_addr.s_addr); snprintf(s, (size_t)slen, "%d.%d.%d.%d", (temp >> 24) & 255, (temp >> 16) & 255, (temp >> 8) & 255, temp & 255); } #ifdef AF_INET6 else if (addr->addr.sa_family == AF_INET6) { char *sptr, /* Pointer into string */ temps[64]; /* Temporary string for address */ # ifdef HAVE_GETNAMEINFO if (getnameinfo(&addr->addr, (socklen_t)httpAddrLength(addr), temps, sizeof(temps), NULL, 0, NI_NUMERICHOST)) { /* * If we get an error back, then the address type is not supported * and we should zero out the buffer... */ s[0] = '\0'; return (NULL); } else if ((sptr = strchr(temps, '%')) != NULL) { /* * Convert "%zone" to "+zone" to match URI form... */ *sptr = '+'; } # else int i; /* Looping var */ unsigned temp; /* Current value */ const char *prefix; /* Prefix for address */ prefix = ""; for (sptr = temps, i = 0; i < 4 && addr->ipv6.sin6_addr.s6_addr32[i]; i ++) { temp = ntohl(addr->ipv6.sin6_addr.s6_addr32[i]); snprintf(sptr, sizeof(temps) - (size_t)(sptr - temps), "%s%x", prefix, (temp >> 16) & 0xffff); prefix = ":"; sptr += strlen(sptr); temp &= 0xffff; if (temp || i == 3 || addr->ipv6.sin6_addr.s6_addr32[i + 1]) { snprintf(sptr, sizeof(temps) - (size_t)(sptr - temps), "%s%x", prefix, temp); sptr += strlen(sptr); } } if (i < 4) { while (i < 4 && !addr->ipv6.sin6_addr.s6_addr32[i]) i ++; if (i < 4) { snprintf(sptr, sizeof(temps) - (size_t)(sptr - temps), "%s:", prefix); prefix = ":"; sptr += strlen(sptr); for (; i < 4; i ++) { temp = ntohl(addr->ipv6.sin6_addr.s6_addr32[i]); if ((temp & 0xffff0000) || (i > 0 && addr->ipv6.sin6_addr.s6_addr32[i - 1])) { snprintf(sptr, sizeof(temps) - (size_t)(sptr - temps), "%s%x", prefix, (temp >> 16) & 0xffff); sptr += strlen(sptr); } snprintf(sptr, sizeof(temps) - (size_t)(sptr - temps), "%s%x", prefix, temp & 0xffff); sptr += strlen(sptr); } } else if (sptr == s) { /* * Empty address... */ strlcpy(temps, "::", sizeof(temps)); } else { /* * Empty at end... */ strlcpy(sptr, "::", sizeof(temps) - (size_t)(sptr - temps)); } } # endif /* HAVE_GETNAMEINFO */ /* * Add "[v1." and "]" around IPv6 address to convert to URI form. */ snprintf(s, (size_t)slen, "[v1.%s]", temps); } #endif /* AF_INET6 */ else strlcpy(s, "UNKNOWN", (size_t)slen); DEBUG_printf(("1httpAddrString: returning \"%s\"...", s)); return (s); } /* * 'httpGetAddress()' - Get the address of the connected peer of a connection. * * For connections created with @link httpConnect2@, the address is for the * server. For connections created with @link httpAccept@, the address is for * the client. * * Returns @code NULL@ if the socket is currently unconnected. * * @since CUPS 2.0/OS 10.10@ */ http_addr_t * /* O - Connected address or @code NULL@ */ httpGetAddress(http_t *http) /* I - HTTP connection */ { if (http) return (http->hostaddr); else return (NULL); } /* * 'httpGetHostByName()' - Lookup a hostname or IPv4 address, and return * address records for the specified name. * * @deprecated@ @exclude all@ */ struct hostent * /* O - Host entry */ httpGetHostByName(const char *name) /* I - Hostname or IP address */ { const char *nameptr; /* Pointer into name */ unsigned ip[4]; /* IP address components */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ DEBUG_printf(("httpGetHostByName(name=\"%s\")", name)); /* * Avoid lookup delays and configuration problems when connecting * to the localhost address... */ if (!strcmp(name, "localhost")) name = "127.0.0.1"; /* * This function is needed because some operating systems have a * buggy implementation of gethostbyname() that does not support * IP addresses. If the first character of the name string is a * number, then sscanf() is used to extract the IP components. * We then pack the components into an IPv4 address manually, * since the inet_aton() function is deprecated. We use the * htonl() macro to get the right byte order for the address. * * We also support domain sockets when supported by the underlying * OS... */ #ifdef AF_LOCAL if (name[0] == '/') { /* * A domain socket address, so make an AF_LOCAL entry and return it... */ cg->hostent.h_name = (char *)name; cg->hostent.h_aliases = NULL; cg->hostent.h_addrtype = AF_LOCAL; cg->hostent.h_length = (int)strlen(name) + 1; cg->hostent.h_addr_list = cg->ip_ptrs; cg->ip_ptrs[0] = (char *)name; cg->ip_ptrs[1] = NULL; DEBUG_puts("1httpGetHostByName: returning domain socket address..."); return (&cg->hostent); } #endif /* AF_LOCAL */ for (nameptr = name; isdigit(*nameptr & 255) || *nameptr == '.'; nameptr ++); if (!*nameptr) { /* * We have an IPv4 address; break it up and provide the host entry * to the caller. */ if (sscanf(name, "%u.%u.%u.%u", ip, ip + 1, ip + 2, ip + 3) != 4) return (NULL); /* Must have 4 numbers */ if (ip[0] > 255 || ip[1] > 255 || ip[2] > 255 || ip[3] > 255) return (NULL); /* Invalid byte ranges! */ cg->ip_addr = htonl((((((((unsigned)ip[0] << 8) | (unsigned)ip[1]) << 8) | (unsigned)ip[2]) << 8) | (unsigned)ip[3])); /* * Fill in the host entry and return it... */ cg->hostent.h_name = (char *)name; cg->hostent.h_aliases = NULL; cg->hostent.h_addrtype = AF_INET; cg->hostent.h_length = 4; cg->hostent.h_addr_list = cg->ip_ptrs; cg->ip_ptrs[0] = (char *)&(cg->ip_addr); cg->ip_ptrs[1] = NULL; DEBUG_puts("1httpGetHostByName: returning IPv4 address..."); return (&cg->hostent); } else { /* * Use the gethostbyname() function to get the IPv4 address for * the name... */ DEBUG_puts("1httpGetHostByName: returning domain lookup address(es)..."); return (gethostbyname(name)); } } /* * 'httpGetHostname()' - Get the FQDN for the connection or local system. * * When "http" points to a connected socket, return the hostname or * address that was used in the call to httpConnect() or httpConnectEncrypt(), * or the address of the client for the connection from httpAcceptConnection(). * Otherwise, return the FQDN for the local system using both gethostname() * and gethostbyname() to get the local hostname with domain. * * @since CUPS 1.2/macOS 10.5@ */ const char * /* O - FQDN for connection or system */ httpGetHostname(http_t *http, /* I - HTTP connection or NULL */ char *s, /* I - String buffer for name */ int slen) /* I - Size of buffer */ { if (http) { if (!s || slen <= 1) { if (http->hostname[0] == '/') return ("localhost"); else return (http->hostname); } else if (http->hostname[0] == '/') strlcpy(s, "localhost", (size_t)slen); else strlcpy(s, http->hostname, (size_t)slen); } else { /* * Get the hostname... */ if (!s || slen <= 1) return (NULL); if (gethostname(s, (size_t)slen) < 0) strlcpy(s, "localhost", (size_t)slen); if (!strchr(s, '.')) { #ifdef HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME /* * The hostname is not a FQDN, so use the local hostname from the * SystemConfiguration framework... */ SCDynamicStoreRef sc = SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("libcups"), NULL, NULL); /* System configuration data */ CFStringRef local = sc ? SCDynamicStoreCopyLocalHostName(sc) : NULL; /* Local host name */ char localStr[1024]; /* Local host name C string */ if (local && CFStringGetCString(local, localStr, sizeof(localStr), kCFStringEncodingUTF8)) { /* * Append ".local." to the hostname we get... */ snprintf(s, (size_t)slen, "%s.local.", localStr); } if (local) CFRelease(local); if (sc) CFRelease(sc); #else /* * The hostname is not a FQDN, so look it up... */ struct hostent *host; /* Host entry to get FQDN */ if ((host = gethostbyname(s)) != NULL && host->h_name) { /* * Use the resolved hostname... */ strlcpy(s, host->h_name, (size_t)slen); } #endif /* HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME */ } /* * Make sure .local hostnames end with a period... */ if (strlen(s) > 6 && !strcmp(s + strlen(s) - 6, ".local")) strlcat(s, ".", (size_t)slen); } /* * Convert the hostname to lowercase as needed... */ if (s[0] != '/') { char *ptr; /* Pointer into string */ for (ptr = s; *ptr; ptr ++) *ptr = (char)_cups_tolower((int)*ptr); } /* * Return the hostname with as much domain info as we have... */ return (s); } /* * 'httpResolveHostname()' - Resolve the hostname of the HTTP connection * address. * * @since CUPS 2.0/OS 10.10@ */ const char * /* O - Resolved hostname or @code NULL@ */ httpResolveHostname(http_t *http, /* I - HTTP connection */ char *buffer, /* I - Hostname buffer */ size_t bufsize) /* I - Size of buffer */ { if (!http) return (NULL); if (isdigit(http->hostname[0] & 255) || http->hostname[0] == '[') { char temp[1024]; /* Temporary string */ if (httpAddrLookup(http->hostaddr, temp, sizeof(temp))) strlcpy(http->hostname, temp, sizeof(http->hostname)); else return (NULL); } if (buffer) { if (http->hostname[0] == '/') strlcpy(buffer, "localhost", bufsize); else strlcpy(buffer, http->hostname, bufsize); return (buffer); } else if (http->hostname[0] == '/') return ("localhost"); else return (http->hostname); } cups-2.2.7/cups/http-addrlist.c000664 000765 000024 00000055116 13255074424 017064 0ustar00msweetstaff000000 000000 /* * HTTP address list routines for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #ifdef HAVE_RESOLV_H # include #endif /* HAVE_RESOLV_H */ #ifdef HAVE_POLL # include #endif /* HAVE_POLL */ #ifndef WIN32 # include #endif /* WIN32 */ /* * 'httpAddrConnect()' - Connect to any of the addresses in the list. * * @since CUPS 1.2/macOS 10.5@ @exclude all@ */ http_addrlist_t * /* O - Connected address or NULL on failure */ httpAddrConnect( http_addrlist_t *addrlist, /* I - List of potential addresses */ int *sock) /* O - Socket */ { DEBUG_printf(("httpAddrConnect(addrlist=%p, sock=%p)", (void *)addrlist, (void *)sock)); return (httpAddrConnect2(addrlist, sock, 30000, NULL)); } /* * 'httpAddrConnect2()' - Connect to any of the addresses in the list with a * timeout and optional cancel. * * @since CUPS 1.7/macOS 10.9@ */ http_addrlist_t * /* O - Connected address or NULL on failure */ httpAddrConnect2( http_addrlist_t *addrlist, /* I - List of potential addresses */ int *sock, /* O - Socket */ int msec, /* I - Timeout in milliseconds */ int *cancel) /* I - Pointer to "cancel" variable */ { int val; /* Socket option value */ #ifndef WIN32 int flags; /* Socket flags */ #endif /* !WIN32 */ int remaining; /* Remaining timeout */ int i, j, /* Looping vars */ nfds, /* Number of file descriptors */ fds[100], /* Socket file descriptors */ result; /* Result from select() or poll() */ http_addrlist_t *addrs[100]; /* Addresses */ #ifndef HAVE_POLL int max_fd = -1; /* Highest file descriptor */ #endif /* !HAVE_POLL */ #ifdef O_NONBLOCK # ifdef HAVE_POLL struct pollfd pfds[100]; /* Polled file descriptors */ # else fd_set input_set, /* select() input set */ output_set, /* select() output set */ error_set; /* select() error set */ struct timeval timeout; /* Timeout */ # endif /* HAVE_POLL */ #endif /* O_NONBLOCK */ #ifdef DEBUG socklen_t len; /* Length of value */ http_addr_t peer; /* Peer address */ char temp[256]; /* Temporary address string */ #endif /* DEBUG */ DEBUG_printf(("httpAddrConnect2(addrlist=%p, sock=%p, msec=%d, cancel=%p)", (void *)addrlist, (void *)sock, msec, (void *)cancel)); if (!sock) { errno = EINVAL; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); return (NULL); } if (cancel && *cancel) return (NULL); if (msec <= 0) msec = INT_MAX; /* * Loop through each address until we connect or run out of addresses... */ nfds = 0; remaining = msec; while (remaining > 0) { if (cancel && *cancel) { while (nfds > 0) { nfds --; httpAddrClose(NULL, fds[nfds]); } return (NULL); } if (addrlist && nfds < (int)(sizeof(fds) / sizeof(fds[0]))) { /* * Create the socket... */ DEBUG_printf(("2httpAddrConnect2: Trying %s:%d...", httpAddrString(&(addrlist->addr), temp, sizeof(temp)), httpAddrPort(&(addrlist->addr)))); if ((fds[nfds] = (int)socket(httpAddrFamily(&(addrlist->addr)), SOCK_STREAM, 0)) < 0) { /* * Don't abort yet, as this could just be an issue with the local * system not being configured with IPv4/IPv6/domain socket enabled. * * Just skip this address... */ addrlist = addrlist->next; continue; } /* * Set options... */ val = 1; setsockopt(fds[nfds], SOL_SOCKET, SO_REUSEADDR, CUPS_SOCAST &val, sizeof(val)); #ifdef SO_REUSEPORT val = 1; setsockopt(fds[nfds], SOL_SOCKET, SO_REUSEPORT, CUPS_SOCAST &val, sizeof(val)); #endif /* SO_REUSEPORT */ #ifdef SO_NOSIGPIPE val = 1; setsockopt(fds[nfds], SOL_SOCKET, SO_NOSIGPIPE, CUPS_SOCAST &val, sizeof(val)); #endif /* SO_NOSIGPIPE */ /* * Using TCP_NODELAY improves responsiveness, especially on systems * with a slow loopback interface... */ val = 1; setsockopt(fds[nfds], IPPROTO_TCP, TCP_NODELAY, CUPS_SOCAST &val, sizeof(val)); #ifdef FD_CLOEXEC /* * Close this socket when starting another process... */ fcntl(fds[nfds], F_SETFD, FD_CLOEXEC); #endif /* FD_CLOEXEC */ #ifdef O_NONBLOCK /* * Do an asynchronous connect by setting the socket non-blocking... */ DEBUG_printf(("httpAddrConnect2: Setting non-blocking connect()")); flags = fcntl(fds[nfds], F_GETFL, 0); fcntl(fds[nfds], F_SETFL, flags | O_NONBLOCK); #endif /* O_NONBLOCK */ /* * Then connect... */ if (!connect(fds[nfds], &(addrlist->addr.addr), (socklen_t)httpAddrLength(&(addrlist->addr)))) { DEBUG_printf(("1httpAddrConnect2: Connected to %s:%d...", httpAddrString(&(addrlist->addr), temp, sizeof(temp)), httpAddrPort(&(addrlist->addr)))); #ifdef O_NONBLOCK fcntl(fds[nfds], F_SETFL, flags); #endif /* O_NONBLOCK */ *sock = fds[nfds]; while (nfds > 0) { nfds --; httpAddrClose(NULL, fds[nfds]); } return (addrlist); } #ifdef WIN32 if (WSAGetLastError() != WSAEINPROGRESS && WSAGetLastError() != WSAEWOULDBLOCK) #else if (errno != EINPROGRESS && errno != EWOULDBLOCK) #endif /* WIN32 */ { DEBUG_printf(("1httpAddrConnect2: Unable to connect to %s:%d: %s", httpAddrString(&(addrlist->addr), temp, sizeof(temp)), httpAddrPort(&(addrlist->addr)), strerror(errno))); httpAddrClose(NULL, fds[nfds]); addrlist = addrlist->next; continue; } #ifndef WIN32 fcntl(fds[nfds], F_SETFL, flags); #endif /* !WIN32 */ #ifndef HAVE_POLL if (fds[nfds] > max_fd) max_fd = fds[nfds]; #endif /* !HAVE_POLL */ addrs[nfds] = addrlist; nfds ++; addrlist = addrlist->next; } if (!addrlist && nfds == 0) break; /* * See if we can connect to any of the addresses so far... */ #ifdef O_NONBLOCK DEBUG_puts("1httpAddrConnect2: Finishing async connect()"); do { if (cancel && *cancel) { /* * Close this socket and return... */ DEBUG_puts("1httpAddrConnect2: Canceled connect()"); while (nfds > 0) { nfds --; httpAddrClose(NULL, fds[nfds]); } *sock = -1; return (NULL); } # ifdef HAVE_POLL for (i = 0; i < nfds; i ++) { pfds[i].fd = fds[i]; pfds[i].events = POLLIN | POLLOUT; } result = poll(pfds, (nfds_t)nfds, addrlist ? 100 : remaining > 250 ? 250 : remaining); DEBUG_printf(("1httpAddrConnect2: poll() returned %d (%d)", result, errno)); # else FD_ZERO(&input_set); for (i = 0; i < nfds; i ++) FD_SET(fds[i], &input_set); output_set = input_set; error_set = input_set; timeout.tv_sec = 0; timeout.tv_usec = (addrlist ? 100 : remaining > 250 ? 250 : remaining) * 1000; result = select(max_fd + 1, &input_set, &output_set, &error_set, &timeout); DEBUG_printf(("1httpAddrConnect2: select() returned %d (%d)", result, errno)); # endif /* HAVE_POLL */ } # ifdef WIN32 while (result < 0 && (WSAGetLastError() == WSAEINTR || WSAGetLastError() == WSAEWOULDBLOCK)); # else while (result < 0 && (errno == EINTR || errno == EAGAIN)); # endif /* WIN32 */ if (result > 0) { http_addrlist_t *connaddr = NULL; /* Connected address, if any */ for (i = 0; i < nfds; i ++) { # ifdef HAVE_POLL DEBUG_printf(("pfds[%d].revents=%x\n", i, pfds[i].revents)); if (pfds[i].revents && !(pfds[i].revents & (POLLERR | POLLHUP))) # else if (FD_ISSET(fds[i], &input_set) && !FD_ISSET(fds[i], &error_set)) # endif /* HAVE_POLL */ { *sock = fds[i]; connaddr = addrs[i]; # ifdef DEBUG len = sizeof(peer); if (!getpeername(fds[i], (struct sockaddr *)&peer, &len)) DEBUG_printf(("1httpAddrConnect2: Connected to %s:%d...", httpAddrString(&peer, temp, sizeof(temp)), httpAddrPort(&peer))); # endif /* DEBUG */ break; } # ifdef HAVE_POLL else if (pfds[i].revents & (POLLERR | POLLHUP)) # else else if (FD_ISSET(fds[i], &error_set)) # endif /* HAVE_POLL */ { /* * Error on socket, remove from the "pool"... */ httpAddrClose(NULL, fds[i]); nfds --; if (i < nfds) { memmove(fds + i, fds + i + 1, (size_t)(nfds - i) * (sizeof(fds[0]))); memmove(addrs + i, addrs + i + 1, (size_t)(nfds - i) * (sizeof(addrs[0]))); } i --; } } if (connaddr) { /* * Connected on one address, close all of the other sockets we have so * far and return... */ for (j = 0; j < i; j ++) httpAddrClose(NULL, fds[j]); for (j ++; j < nfds; j ++) httpAddrClose(NULL, fds[j]); return (connaddr); } } #endif /* O_NONBLOCK */ if (addrlist) remaining -= 100; else remaining -= 250; } while (nfds > 0) { nfds --; httpAddrClose(NULL, fds[nfds]); } #ifdef WIN32 _cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, "Connection failed", 0); #else _cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, strerror(errno), 0); #endif /* WIN32 */ return (NULL); } /* * 'httpAddrCopyList()' - Copy an address list. * * @since CUPS 1.7/macOS 10.9@ */ http_addrlist_t * /* O - New address list or @code NULL@ on error */ httpAddrCopyList( http_addrlist_t *src) /* I - Source address list */ { http_addrlist_t *dst = NULL, /* First list entry */ *prev = NULL, /* Previous list entry */ *current = NULL;/* Current list entry */ while (src) { if ((current = malloc(sizeof(http_addrlist_t))) == NULL) { current = dst; while (current) { prev = current; current = current->next; free(prev); } return (NULL); } memcpy(current, src, sizeof(http_addrlist_t)); current->next = NULL; if (prev) prev->next = current; else dst = current; prev = current; src = src->next; } return (dst); } /* * 'httpAddrFreeList()' - Free an address list. * * @since CUPS 1.2/macOS 10.5@ */ void httpAddrFreeList( http_addrlist_t *addrlist) /* I - Address list to free */ { http_addrlist_t *next; /* Next address in list */ /* * Free each address in the list... */ while (addrlist) { next = addrlist->next; free(addrlist); addrlist = next; } } /* * 'httpAddrGetList()' - Get a list of addresses for a hostname. * * @since CUPS 1.2/macOS 10.5@ */ http_addrlist_t * /* O - List of addresses or NULL */ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for passive listen address */ int family, /* I - Address family or AF_UNSPEC */ const char *service) /* I - Service name or port number */ { http_addrlist_t *first, /* First address in list */ *addr, /* Current address in list */ *temp; /* New address */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ #ifdef DEBUG _cups_debug_printf("httpAddrGetList(hostname=\"%s\", family=AF_%s, " "service=\"%s\")\n", hostname ? hostname : "(nil)", family == AF_UNSPEC ? "UNSPEC" : # ifdef AF_LOCAL family == AF_LOCAL ? "LOCAL" : # endif /* AF_LOCAL */ # ifdef AF_INET6 family == AF_INET6 ? "INET6" : # endif /* AF_INET6 */ family == AF_INET ? "INET" : "???", service); #endif /* DEBUG */ #ifdef HAVE_RES_INIT /* * STR #2920: Initialize resolver after failure in cups-polld * * If the previous lookup failed, re-initialize the resolver to prevent * temporary network errors from persisting. This *should* be handled by * the resolver libraries, but apparently the glibc folks do not agree. * * We set a flag at the end of this function if we encounter an error that * requires reinitialization of the resolver functions. We then call * res_init() if the flag is set on the next call here or in httpAddrLookup(). */ if (cg->need_res_init) { res_init(); cg->need_res_init = 0; } #endif /* HAVE_RES_INIT */ /* * Lookup the address the best way we can... */ first = addr = NULL; #ifdef AF_LOCAL if (hostname && hostname[0] == '/') { /* * Domain socket address... */ if ((first = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t))) != NULL) { addr = first; first->addr.un.sun_family = AF_LOCAL; strlcpy(first->addr.un.sun_path, hostname, sizeof(first->addr.un.sun_path)); } } else #endif /* AF_LOCAL */ if (!hostname || _cups_strcasecmp(hostname, "localhost")) { #ifdef HAVE_GETADDRINFO struct addrinfo hints, /* Address lookup hints */ *results, /* Address lookup results */ *current; /* Current result */ char ipv6[64], /* IPv6 address */ *ipv6zone; /* Pointer to zone separator */ int ipv6len; /* Length of IPv6 address */ int error; /* getaddrinfo() error */ /* * Lookup the address as needed... */ memset(&hints, 0, sizeof(hints)); hints.ai_family = family; hints.ai_flags = hostname ? 0 : AI_PASSIVE; hints.ai_socktype = SOCK_STREAM; if (hostname && *hostname == '[') { /* * Remove brackets from numeric IPv6 address... */ if (!strncmp(hostname, "[v1.", 4)) { /* * Copy the newer address format which supports link-local addresses... */ strlcpy(ipv6, hostname + 4, sizeof(ipv6)); if ((ipv6len = (int)strlen(ipv6) - 1) >= 0 && ipv6[ipv6len] == ']') { ipv6[ipv6len] = '\0'; hostname = ipv6; /* * Convert "+zone" in address to "%zone"... */ if ((ipv6zone = strrchr(ipv6, '+')) != NULL) *ipv6zone = '%'; } } else { /* * Copy the regular non-link-local IPv6 address... */ strlcpy(ipv6, hostname + 1, sizeof(ipv6)); if ((ipv6len = (int)strlen(ipv6) - 1) >= 0 && ipv6[ipv6len] == ']') { ipv6[ipv6len] = '\0'; hostname = ipv6; } } } if ((error = getaddrinfo(hostname, service, &hints, &results)) == 0) { /* * Copy the results to our own address list structure... */ for (current = results; current; current = current->ai_next) if (current->ai_family == AF_INET || current->ai_family == AF_INET6) { /* * Copy the address over... */ temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t)); if (!temp) { httpAddrFreeList(first); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); return (NULL); } if (current->ai_family == AF_INET6) memcpy(&(temp->addr.ipv6), current->ai_addr, sizeof(temp->addr.ipv6)); else memcpy(&(temp->addr.ipv4), current->ai_addr, sizeof(temp->addr.ipv4)); /* * Append the address to the list... */ if (!first) first = temp; if (addr) addr->next = temp; addr = temp; } /* * Free the results from getaddrinfo()... */ freeaddrinfo(results); } else { if (error == EAI_FAIL) cg->need_res_init = 1; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, gai_strerror(error), 0); } #else if (hostname) { int i; /* Looping vars */ unsigned ip[4]; /* IPv4 address components */ const char *ptr; /* Pointer into hostname */ struct hostent *host; /* Result of lookup */ struct servent *port; /* Port number for service */ int portnum; /* Port number */ /* * Lookup the service... */ if (!service) portnum = 0; else if (isdigit(*service & 255)) portnum = atoi(service); else if ((port = getservbyname(service, NULL)) != NULL) portnum = ntohs(port->s_port); else if (!strcmp(service, "http")) portnum = 80; else if (!strcmp(service, "https")) portnum = 443; else if (!strcmp(service, "ipp") || !strcmp(service, "ipps")) portnum = 631; else if (!strcmp(service, "lpd")) portnum = 515; else if (!strcmp(service, "socket")) portnum = 9100; else return (NULL); /* * This code is needed because some operating systems have a * buggy implementation of gethostbyname() that does not support * IPv4 addresses. If the hostname string is an IPv4 address, then * sscanf() is used to extract the IPv4 components. We then pack * the components into an IPv4 address manually, since the * inet_aton() function is deprecated. We use the htonl() macro * to get the right byte order for the address. */ for (ptr = hostname; isdigit(*ptr & 255) || *ptr == '.'; ptr ++); if (!*ptr) { /* * We have an IPv4 address; break it up and create an IPv4 address... */ if (sscanf(hostname, "%u.%u.%u.%u", ip, ip + 1, ip + 2, ip + 3) == 4 && ip[0] <= 255 && ip[1] <= 255 && ip[2] <= 255 && ip[3] <= 255) { first = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t)); if (!first) return (NULL); first->addr.ipv4.sin_family = AF_INET; first->addr.ipv4.sin_addr.s_addr = htonl((((((((unsigned)ip[0] << 8) | (unsigned)ip[1]) << 8) | (unsigned)ip[2]) << 8) | (unsigned)ip[3])); first->addr.ipv4.sin_port = htons(portnum); } } else if ((host = gethostbyname(hostname)) != NULL && # ifdef AF_INET6 (host->h_addrtype == AF_INET || host->h_addrtype == AF_INET6)) # else host->h_addrtype == AF_INET) # endif /* AF_INET6 */ { for (i = 0; host->h_addr_list[i]; i ++) { /* * Copy the address over... */ temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t)); if (!temp) { httpAddrFreeList(first); return (NULL); } # ifdef AF_INET6 if (host->h_addrtype == AF_INET6) { temp->addr.ipv6.sin6_family = AF_INET6; memcpy(&(temp->addr.ipv6.sin6_addr), host->h_addr_list[i], sizeof(temp->addr.ipv6)); temp->addr.ipv6.sin6_port = htons(portnum); } else # endif /* AF_INET6 */ { temp->addr.ipv4.sin_family = AF_INET; memcpy(&(temp->addr.ipv4.sin_addr), host->h_addr_list[i], sizeof(temp->addr.ipv4)); temp->addr.ipv4.sin_port = htons(portnum); } /* * Append the address to the list... */ if (!first) first = temp; if (addr) addr->next = temp; addr = temp; } } else { if (h_errno == NO_RECOVERY) cg->need_res_init = 1; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, hstrerror(h_errno), 0); } } #endif /* HAVE_GETADDRINFO */ } /* * Detect some common errors and handle them sanely... */ if (!addr && (!hostname || !_cups_strcasecmp(hostname, "localhost"))) { struct servent *port; /* Port number for service */ int portnum; /* Port number */ /* * Lookup the service... */ if (!service) portnum = 0; else if (isdigit(*service & 255)) portnum = atoi(service); else if ((port = getservbyname(service, NULL)) != NULL) portnum = ntohs(port->s_port); else if (!strcmp(service, "http")) portnum = 80; else if (!strcmp(service, "https")) portnum = 443; else if (!strcmp(service, "ipp") || !strcmp(service, "ipps")) portnum = 631; else if (!strcmp(service, "lpd")) portnum = 515; else if (!strcmp(service, "socket")) portnum = 9100; else { httpAddrFreeList(first); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unknown service name."), 1); return (NULL); } if (hostname && !_cups_strcasecmp(hostname, "localhost")) { /* * Unfortunately, some users ignore all of the warnings in the * /etc/hosts file and delete "localhost" from it. If we get here * then we were unable to resolve the name, so use the IPv6 and/or * IPv4 loopback interface addresses... */ #ifdef AF_INET6 if (family != AF_INET) { /* * Add [::1] to the address list... */ temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t)); if (!temp) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); httpAddrFreeList(first); return (NULL); } temp->addr.ipv6.sin6_family = AF_INET6; temp->addr.ipv6.sin6_port = htons(portnum); # ifdef WIN32 temp->addr.ipv6.sin6_addr.u.Byte[15] = 1; # else temp->addr.ipv6.sin6_addr.s6_addr32[3] = htonl(1); # endif /* WIN32 */ if (!first) first = temp; addr = temp; } if (family != AF_INET6) #endif /* AF_INET6 */ { /* * Add 127.0.0.1 to the address list... */ temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t)); if (!temp) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); httpAddrFreeList(first); return (NULL); } temp->addr.ipv4.sin_family = AF_INET; temp->addr.ipv4.sin_port = htons(portnum); temp->addr.ipv4.sin_addr.s_addr = htonl(0x7f000001); if (!first) first = temp; if (addr) addr->next = temp; } } else if (!hostname) { /* * Provide one or more passive listening addresses... */ #ifdef AF_INET6 if (family != AF_INET) { /* * Add [::] to the address list... */ temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t)); if (!temp) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); httpAddrFreeList(first); return (NULL); } temp->addr.ipv6.sin6_family = AF_INET6; temp->addr.ipv6.sin6_port = htons(portnum); if (!first) first = temp; addr = temp; } if (family != AF_INET6) #endif /* AF_INET6 */ { /* * Add 0.0.0.0 to the address list... */ temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t)); if (!temp) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); httpAddrFreeList(first); return (NULL); } temp->addr.ipv4.sin_family = AF_INET; temp->addr.ipv4.sin_port = htons(portnum); if (!first) first = temp; if (addr) addr->next = temp; } } } /* * Return the address list... */ return (first); } cups-2.2.7/cups/http-private.h000664 000765 000024 00000037214 13255074424 016734 0ustar00msweetstaff000000 000000 /* * Private HTTP definitions for CUPS. * * Copyright 2007-2018 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_HTTP_PRIVATE_H_ # define _CUPS_HTTP_PRIVATE_H_ /* * Include necessary headers... */ # include "config.h" # include # include # include # ifdef __sun # include # endif /* __sun */ # include # ifdef WIN32 # include # include # define CUPS_SOCAST (const char *) # else # include # include # include # define CUPS_SOCAST # endif /* WIN32 */ # ifdef HAVE_GSSAPI # ifdef HAVE_GSS_GSSAPI_H # include # elif defined(HAVE_GSSAPI_GSSAPI_H) # include # elif defined(HAVE_GSSAPI_H) # include # endif /* HAVE_GSS_GSSAPI_H */ # ifndef HAVE_GSS_C_NT_HOSTBASED_SERVICE # define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name # endif /* !HAVE_GSS_C_NT_HOSTBASED_SERVICE */ # endif /* HAVE_GSSAPI */ # ifdef HAVE_AUTHORIZATION_H # include # endif /* HAVE_AUTHORIZATION_H */ # if defined(__APPLE__) && !defined(_SOCKLEN_T) /* * macOS 10.2.x does not define socklen_t, and in fact uses an int instead of * unsigned type for length values... */ typedef int socklen_t; # endif /* __APPLE__ && !_SOCKLEN_T */ # include # include "ipp-private.h" # ifdef HAVE_GNUTLS # include # include # elif defined(HAVE_CDSASSL) # include # include # include # ifdef HAVE_SECURETRANSPORTPRIV_H # include # endif /* HAVE_SECURETRANSPORTPRIV_H */ # ifdef HAVE_SECITEM_H # include # endif /* HAVE_SECITEM_H */ # ifdef HAVE_SECBASEPRIV_H # include # endif /* HAVE_SECBASEPRIV_H */ # ifdef HAVE_SECCERTIFICATE_H # include # include # endif /* HAVE_SECCERTIFICATE_H */ # ifdef HAVE_SECCERTIFICATEPRIV_H # include # else # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ # ifndef _SECURITY_VERSION_GREATER_THAN_57610_ typedef CF_OPTIONS(uint32_t, SecKeyUsage) { kSecKeyUsageAll = 0x7FFFFFFF }; # endif /* !_SECURITY_VERSION_GREATER_THAN_57610_ */ extern const void * kSecCSRChallengePassword; extern const void * kSecSubjectAltName; extern const void * kSecCertificateKeyUsage; extern const void * kSecCSRBasicContraintsPathLen; extern const void * kSecCertificateExtensions; extern const void * kSecCertificateExtensionsEncoded; extern const void * kSecOidCommonName; extern const void * kSecOidCountryName; extern const void * kSecOidStateProvinceName; extern const void * kSecOidLocalityName; extern const void * kSecOidOrganization; extern const void * kSecOidOrganizationalUnit; extern SecCertificateRef SecCertificateCreateWithBytes(CFAllocatorRef allocator, const UInt8 *bytes, CFIndex length); extern bool SecCertificateIsValid(SecCertificateRef certificate, CFAbsoluteTime verifyTime); extern CFAbsoluteTime SecCertificateNotValidAfter(SecCertificateRef certificate); extern SecCertificateRef SecGenerateSelfSignedCertificate(CFArrayRef subject, CFDictionaryRef parameters, SecKeyRef publicKey, SecKeyRef privateKey); extern SecIdentityRef SecIdentityCreate(CFAllocatorRef allocator, SecCertificateRef certificate, SecKeyRef privateKey); # ifdef __cplusplus } # endif /* __cplusplus */ # endif /* HAVE_SECCERTIFICATEPRIV_H */ # ifdef HAVE_SECITEMPRIV_H # include # endif /* HAVE_SECITEMPRIV_H */ # ifdef HAVE_SECIDENTITYSEARCHPRIV_H # include # endif /* HAVE_SECIDENTITYSEARCHPRIV_H */ # ifdef HAVE_SECPOLICYPRIV_H # include # endif /* HAVE_SECPOLICYPRIV_H */ # elif defined(HAVE_SSPISSL) # include # include # include # define SECURITY_WIN32 # include # include # endif /* HAVE_GNUTLS */ # ifndef WIN32 # include # include # ifdef HAVE_GETIFADDRS # include # else # include # ifdef HAVE_SYS_SOCKIO_H # include # endif /* HAVE_SYS_SOCKIO_H */ # endif /* HAVE_GETIFADDRS */ # endif /* !WIN32 */ # ifdef HAVE_LIBZ # include # endif /* HAVE_LIBZ */ /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Constants... */ # define _HTTP_MAX_SBUFFER 65536 /* Size of (de)compression buffer */ # define _HTTP_RESOLVE_DEFAULT 0 /* Just resolve with default options */ # define _HTTP_RESOLVE_STDERR 1 /* Log resolve progress to stderr */ # define _HTTP_RESOLVE_FQDN 2 /* Resolve to a FQDN */ # define _HTTP_RESOLVE_FAXOUT 4 /* Resolve FaxOut service? */ # define _HTTP_TLS_NONE 0 /* No TLS options */ # define _HTTP_TLS_ALLOW_RC4 1 /* Allow RC4 cipher suites */ # define _HTTP_TLS_ALLOW_DH 2 /* Allow DH/DHE key negotiation */ # define _HTTP_TLS_DENY_CBC 4 /* Deny CBC cipher suites */ # define _HTTP_TLS_SET_DEFAULT 128 /* Setting the default TLS options */ # define _HTTP_TLS_SSL3 0 /* Min/max version is SSL/3.0 */ # define _HTTP_TLS_1_0 1 /* Min/max version is TLS/1.0 */ # define _HTTP_TLS_1_1 2 /* Min/max version is TLS/1.1 */ # define _HTTP_TLS_1_2 3 /* Min/max version is TLS/1.2 */ # define _HTTP_TLS_1_3 4 /* Min/max version is TLS/1.3 */ # define _HTTP_TLS_MAX 5 /* Highest known TLS version */ /* * Types and functions for SSL support... */ # ifdef HAVE_GNUTLS /* * The GNU TLS library is more of a "bare metal" SSL/TLS library... */ typedef gnutls_session_t http_tls_t; typedef gnutls_certificate_credentials_t *http_tls_credentials_t; # elif defined(HAVE_CDSASSL) /* * Darwin's Security framework provides its own SSL/TLS context structure * for its IO and protocol management... */ # if !defined(HAVE_SECBASEPRIV_H) && defined(HAVE_CSSMERRORSTRING) /* Declare prototype for function in that header... */ extern const char *cssmErrorString(int error); # endif /* !HAVE_SECBASEPRIV_H && HAVE_CSSMERRORSTRING */ # if !defined(HAVE_SECIDENTITYSEARCHPRIV_H) && defined(HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY) /* Declare prototype for function in that header... */ extern OSStatus SecIdentitySearchCreateWithPolicy(SecPolicyRef policy, CFStringRef idString, CSSM_KEYUSE keyUsage, CFTypeRef keychainOrArray, Boolean returnOnlyValidIdentities, SecIdentitySearchRef* searchRef); # endif /* !HAVE_SECIDENTITYSEARCHPRIV_H && HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY */ # if !defined(HAVE_SECPOLICYPRIV_H) && defined(HAVE_SECPOLICYSETVALUE) /* Declare prototype for function in that header... */ extern OSStatus SecPolicySetValue(SecPolicyRef policyRef, const CSSM_DATA *value); # endif /* !HAVE_SECPOLICYPRIV_H && HAVE_SECPOLICYSETVALUE */ typedef SSLContextRef http_tls_t; typedef CFArrayRef http_tls_credentials_t; # elif defined(HAVE_SSPISSL) /* * Windows' SSPI library gets a CUPS wrapper... */ typedef struct _http_sspi_s /**** SSPI/SSL data structure ****/ { CredHandle creds; /* Credentials */ CtxtHandle context; /* SSL context */ BOOL contextInitialized; /* Is context init'd? */ SecPkgContext_StreamSizes streamSizes;/* SSL data stream sizes */ BYTE *decryptBuffer; /* Data pre-decryption*/ size_t decryptBufferLength; /* Length of decrypt buffer */ size_t decryptBufferUsed; /* Bytes used in buffer */ BYTE *readBuffer; /* Data post-decryption */ int readBufferLength; /* Length of read buffer */ int readBufferUsed; /* Bytes used in buffer */ BYTE *writeBuffer; /* Data pre-encryption */ int writeBufferLength; /* Length of write buffer */ PCCERT_CONTEXT localCert, /* Local certificate */ remoteCert; /* Remote (peer's) certificate */ char error[256]; /* Most recent error message */ } _http_sspi_t; typedef _http_sspi_t *http_tls_t; typedef PCCERT_CONTEXT http_tls_credentials_t; # else /* * Otherwise define stub types since we have no SSL support... */ typedef void *http_tls_t; typedef void *http_tls_credentials_t; # endif /* HAVE_GNUTLS */ typedef enum _http_coding_e /**** HTTP content coding enumeration ****/ { _HTTP_CODING_IDENTITY, /* No content coding */ _HTTP_CODING_GZIP, /* LZ77+gzip decompression */ _HTTP_CODING_DEFLATE, /* LZ77+zlib compression */ _HTTP_CODING_GUNZIP, /* LZ77+gzip decompression */ _HTTP_CODING_INFLATE /* LZ77+zlib decompression */ } _http_coding_t; typedef enum _http_mode_e /**** HTTP mode enumeration ****/ { _HTTP_MODE_CLIENT, /* Client connected to server */ _HTTP_MODE_SERVER /* Server connected (accepted) from client */ } _http_mode_t; # ifndef _HTTP_NO_PRIVATE struct _http_s /**** HTTP connection structure ****/ { int fd; /* File descriptor for this socket */ int blocking; /* To block or not to block */ int error; /* Last error on read */ time_t activity; /* Time since last read/write */ http_state_t state; /* State of client */ http_status_t status; /* Status of last request */ http_version_t version; /* Protocol version */ http_keepalive_t keep_alive; /* Keep-alive supported? */ struct sockaddr_in _hostaddr; /* Address of connected host (deprecated) */ char hostname[HTTP_MAX_HOST], /* Name of connected host */ fields[HTTP_FIELD_ACCEPT_ENCODING][HTTP_MAX_VALUE]; /* Field values up to Accept-Encoding */ char *data; /* Pointer to data buffer */ http_encoding_t data_encoding; /* Chunked or not */ int _data_remaining;/* Number of bytes left (deprecated) */ int used; /* Number of bytes used in buffer */ char buffer[HTTP_MAX_BUFFER]; /* Buffer for incoming data */ int _auth_type; /* Authentication in use (deprecated) */ unsigned char _md5_state[88]; /* MD5 state (deprecated) */ char nonce[HTTP_MAX_VALUE]; /* Nonce value */ unsigned nonce_count; /* Nonce count */ http_tls_t tls; /* TLS state information */ http_encryption_t encryption; /* Encryption requirements */ /**** New in CUPS 1.1.19 ****/ fd_set *input_set; /* select() set for httpWait() (deprecated) */ http_status_t expect; /* Expect: header */ char *cookie; /* Cookie value(s) */ /**** New in CUPS 1.1.20 ****/ char _authstring[HTTP_MAX_VALUE], /* Current Authorization value (deprecated) */ userpass[HTTP_MAX_VALUE]; /* Username:password string */ int digest_tries; /* Number of tries for digest auth */ /**** New in CUPS 1.2 ****/ off_t data_remaining; /* Number of bytes left */ http_addr_t *hostaddr; /* Current host address and port */ http_addrlist_t *addrlist; /* List of valid addresses */ char wbuffer[HTTP_MAX_BUFFER]; /* Buffer for outgoing data */ int wused; /* Write buffer bytes used */ /**** New in CUPS 1.3 ****/ char *field_authorization; /* Authorization field */ char *authstring; /* Current Authorization field */ # ifdef HAVE_GSSAPI gss_OID gssmech; /* Authentication mechanism */ gss_ctx_id_t gssctx; /* Authentication context */ gss_name_t gssname; /* Authentication server name */ # endif /* HAVE_GSSAPI */ # ifdef HAVE_AUTHORIZATION_H AuthorizationRef auth_ref; /* Authorization ref */ # endif /* HAVE_AUTHORIZATION_H */ /**** New in CUPS 1.5 ****/ http_tls_credentials_t tls_credentials; /* TLS credentials */ http_timeout_cb_t timeout_cb; /* Timeout callback */ void *timeout_data; /* User data pointer */ double timeout_value; /* Timeout in seconds */ int wait_value; /* httpWait value for timeout */ # ifdef HAVE_GSSAPI char gsshost[256]; /* Hostname for Kerberos */ # endif /* HAVE_GSSAPI */ /**** New in CUPS 1.7 ****/ int tls_upgrade; /* Non-zero if we are doing an upgrade */ _http_mode_t mode; /* _HTTP_MODE_CLIENT or _HTTP_MODE_SERVER */ char *accept_encoding, /* Accept-Encoding field */ *allow, /* Allow field */ *server, /* Server field */ *default_accept_encoding, *default_server, *default_user_agent; /* Default field values */ # ifdef HAVE_LIBZ _http_coding_t coding; /* _HTTP_CODING_xxx */ z_stream stream; /* (De)compression stream */ Bytef *sbuffer; /* (De)compression buffer */ # endif /* HAVE_LIBZ */ }; # endif /* !_HTTP_NO_PRIVATE */ /* * Some OS's don't have hstrerror(), most notably Solaris... */ # ifndef HAVE_HSTRERROR extern const char *_cups_hstrerror(int error); # define hstrerror _cups_hstrerror # endif /* !HAVE_HSTRERROR */ /* * Some OS's don't have getifaddrs() and freeifaddrs()... */ # if !defined(WIN32) && !defined(HAVE_GETIFADDRS) # ifdef ifa_dstaddr # undef ifa_dstaddr # endif /* ifa_dstaddr */ # ifndef ifr_netmask # define ifr_netmask ifr_addr # endif /* !ifr_netmask */ struct ifaddrs /**** Interface Structure ****/ { struct ifaddrs *ifa_next; /* Next interface in list */ char *ifa_name; /* Name of interface */ unsigned int ifa_flags; /* Flags (up, point-to-point, etc.) */ struct sockaddr *ifa_addr, /* Network address */ *ifa_netmask; /* Address mask */ union { struct sockaddr *ifu_broadaddr; /* Broadcast address of this interface. */ struct sockaddr *ifu_dstaddr; /* Point-to-point destination address. */ } ifa_ifu; void *ifa_data; /* Interface statistics */ }; # ifndef ifa_broadaddr # define ifa_broadaddr ifa_ifu.ifu_broadaddr # endif /* !ifa_broadaddr */ # ifndef ifa_dstaddr # define ifa_dstaddr ifa_ifu.ifu_dstaddr # endif /* !ifa_dstaddr */ extern int _cups_getifaddrs(struct ifaddrs **addrs); # define getifaddrs _cups_getifaddrs extern void _cups_freeifaddrs(struct ifaddrs *addrs); # define freeifaddrs _cups_freeifaddrs # endif /* !WIN32 && !HAVE_GETIFADDRS */ /* * Prototypes... */ extern void _httpAddrSetPort(http_addr_t *addr, int port); extern http_tls_credentials_t _httpCreateCredentials(cups_array_t *credentials); extern char *_httpDecodeURI(char *dst, const char *src, size_t dstsize); extern void _httpDisconnect(http_t *http); extern char *_httpEncodeURI(char *dst, const char *src, size_t dstsize); extern void _httpFreeCredentials(http_tls_credentials_t credentials); extern const char *_httpResolveURI(const char *uri, char *resolved_uri, size_t resolved_size, int options, int (*cb)(void *context), void *context); extern const char *_httpStatus(cups_lang_t *lang, http_status_t status); extern void _httpTLSInitialize(void); extern size_t _httpTLSPending(http_t *http); extern int _httpTLSRead(http_t *http, char *buf, int len); extern int _httpTLSSetCredentials(http_t *http); extern void _httpTLSSetOptions(int options, int min_version, int max_version); extern int _httpTLSStart(http_t *http); extern void _httpTLSStop(http_t *http); extern int _httpTLSWrite(http_t *http, const char *buf, int len); extern int _httpUpdate(http_t *http, http_status_t *status); extern int _httpWait(http_t *http, int msec, int usessl); /* * C++ magic... */ # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_HTTP_PRIVATE_H_ */ cups-2.2.7/cups/http-support.c000664 000765 000024 00000174234 13255074424 016775 0ustar00msweetstaff000000 000000 /* * HTTP support routines for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #ifdef HAVE_DNSSD # include # ifdef WIN32 # include # elif defined(HAVE_POLL) # include # else # include # endif /* WIN32 */ #elif defined(HAVE_AVAHI) # include # include # include #endif /* HAVE_DNSSD */ /* * Local types... */ typedef struct _http_uribuf_s /* URI buffer */ { #ifdef HAVE_AVAHI AvahiSimplePoll *poll; /* Poll state */ #endif /* HAVE_AVAHI */ char *buffer; /* Pointer to buffer */ size_t bufsize; /* Size of buffer */ int options; /* Options passed to _httpResolveURI */ const char *resource; /* Resource from URI */ const char *uuid; /* UUID from URI */ } _http_uribuf_t; /* * Local globals... */ static const char * const http_days[7] =/* Days of the week */ { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; static const char * const http_months[12] = { /* Months of the year */ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; static const char * const http_states[] = { /* HTTP state strings */ "HTTP_STATE_ERROR", "HTTP_STATE_WAITING", "HTTP_STATE_OPTIONS", "HTTP_STATE_GET", "HTTP_STATE_GET_SEND", "HTTP_STATE_HEAD", "HTTP_STATE_POST", "HTTP_STATE_POST_RECV", "HTTP_STATE_POST_SEND", "HTTP_STATE_PUT", "HTTP_STATE_PUT_RECV", "HTTP_STATE_DELETE", "HTTP_STATE_TRACE", "HTTP_STATE_CONNECT", "HTTP_STATE_STATUS", "HTTP_STATE_UNKNOWN_METHOD", "HTTP_STATE_UNKNOWN_VERSION" }; /* * Local functions... */ static const char *http_copy_decode(char *dst, const char *src, int dstsize, const char *term, int decode); static char *http_copy_encode(char *dst, const char *src, char *dstend, const char *reserved, const char *term, int encode); #ifdef HAVE_DNSSD static void DNSSD_API http_resolve_cb(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *fullName, const char *hostTarget, uint16_t port, uint16_t txtLen, const unsigned char *txtRecord, void *context); #endif /* HAVE_DNSSD */ #ifdef HAVE_AVAHI static void http_client_cb(AvahiClient *client, AvahiClientState state, void *simple_poll); static int http_poll_cb(struct pollfd *pollfds, unsigned int num_pollfds, int timeout, void *context); static void http_resolve_cb(AvahiServiceResolver *resolver, AvahiIfIndex interface, AvahiProtocol protocol, AvahiResolverEvent event, const char *name, const char *type, const char *domain, const char *host_name, const AvahiAddress *address, uint16_t port, AvahiStringList *txt, AvahiLookupResultFlags flags, void *context); #endif /* HAVE_AVAHI */ /* * 'httpAssembleURI()' - Assemble a uniform resource identifier from its * components. * * This function escapes reserved characters in the URI depending on the * value of the "encoding" argument. You should use this function in * place of traditional string functions whenever you need to create a * URI string. * * @since CUPS 1.2/macOS 10.5@ */ http_uri_status_t /* O - URI status */ httpAssembleURI( http_uri_coding_t encoding, /* I - Encoding flags */ char *uri, /* I - URI buffer */ int urilen, /* I - Size of URI buffer */ const char *scheme, /* I - Scheme name */ const char *username, /* I - Username */ const char *host, /* I - Hostname or address */ int port, /* I - Port number */ const char *resource) /* I - Resource */ { char *ptr, /* Pointer into URI buffer */ *end; /* End of URI buffer */ /* * Range check input... */ if (!uri || urilen < 1 || !scheme || port < 0) { if (uri) *uri = '\0'; return (HTTP_URI_STATUS_BAD_ARGUMENTS); } /* * Assemble the URI starting with the scheme... */ end = uri + urilen - 1; ptr = http_copy_encode(uri, scheme, end, NULL, NULL, 0); if (!ptr) goto assemble_overflow; if (!strcmp(scheme, "geo") || !strcmp(scheme, "mailto") || !strcmp(scheme, "tel")) { /* * geo:, mailto:, and tel: only have :, no //... */ if (ptr < end) *ptr++ = ':'; else goto assemble_overflow; } else { /* * Schemes other than geo:, mailto:, and tel: typically have //... */ if ((ptr + 2) < end) { *ptr++ = ':'; *ptr++ = '/'; *ptr++ = '/'; } else goto assemble_overflow; } /* * Next the username and hostname, if any... */ if (host) { const char *hostptr; /* Pointer into hostname */ int have_ipv6; /* Do we have an IPv6 address? */ if (username && *username) { /* * Add username@ first... */ ptr = http_copy_encode(ptr, username, end, "/?#[]@", NULL, encoding & HTTP_URI_CODING_USERNAME); if (!ptr) goto assemble_overflow; if (ptr < end) *ptr++ = '@'; else goto assemble_overflow; } /* * Then add the hostname. Since IPv6 is a particular pain to deal * with, we have several special cases to deal with. If we get * an IPv6 address with brackets around it, assume it is already in * URI format. Since DNS-SD service names can sometimes look like * raw IPv6 addresses, we specifically look for "._tcp" in the name, * too... */ for (hostptr = host, have_ipv6 = strchr(host, ':') && !strstr(host, "._tcp"); *hostptr && have_ipv6; hostptr ++) if (*hostptr != ':' && !isxdigit(*hostptr & 255)) { have_ipv6 = *hostptr == '%'; break; } if (have_ipv6) { /* * We have a raw IPv6 address... */ if (strchr(host, '%') && !(encoding & HTTP_URI_CODING_RFC6874)) { /* * We have a link-local address, add "[v1." prefix... */ if ((ptr + 4) < end) { *ptr++ = '['; *ptr++ = 'v'; *ptr++ = '1'; *ptr++ = '.'; } else goto assemble_overflow; } else { /* * We have a normal (or RFC 6874 link-local) address, add "[" prefix... */ if (ptr < end) *ptr++ = '['; else goto assemble_overflow; } /* * Copy the rest of the IPv6 address, and terminate with "]". */ while (ptr < end && *host) { if (*host == '%') { /* * Convert/encode zone separator */ if (encoding & HTTP_URI_CODING_RFC6874) { if (ptr >= (end - 2)) goto assemble_overflow; *ptr++ = '%'; *ptr++ = '2'; *ptr++ = '5'; } else *ptr++ = '+'; host ++; } else *ptr++ = *host++; } if (*host) goto assemble_overflow; if (ptr < end) *ptr++ = ']'; else goto assemble_overflow; } else { /* * Otherwise, just copy the host string (the extra chars are not in the * "reg-name" ABNF rule; anything <= SP or >= DEL plus % gets automatically * percent-encoded. */ ptr = http_copy_encode(ptr, host, end, "\"#/:<>?@[\\]^`{|}", NULL, encoding & HTTP_URI_CODING_HOSTNAME); if (!ptr) goto assemble_overflow; } /* * Finish things off with the port number... */ if (port > 0) { snprintf(ptr, (size_t)(end - ptr + 1), ":%d", port); ptr += strlen(ptr); if (ptr >= end) goto assemble_overflow; } } /* * Last but not least, add the resource string... */ if (resource) { char *query; /* Pointer to query string */ /* * Copy the resource string up to the query string if present... */ query = strchr(resource, '?'); ptr = http_copy_encode(ptr, resource, end, NULL, "?", encoding & HTTP_URI_CODING_RESOURCE); if (!ptr) goto assemble_overflow; if (query) { /* * Copy query string without encoding... */ ptr = http_copy_encode(ptr, query, end, NULL, NULL, encoding & HTTP_URI_CODING_QUERY); if (!ptr) goto assemble_overflow; } } else if (ptr < end) *ptr++ = '/'; else goto assemble_overflow; /* * Nul-terminate the URI buffer and return with no errors... */ *ptr = '\0'; return (HTTP_URI_STATUS_OK); /* * Clear the URI string and return an overflow error; I don't usually * like goto's, but in this case it makes sense... */ assemble_overflow: *uri = '\0'; return (HTTP_URI_STATUS_OVERFLOW); } /* * 'httpAssembleURIf()' - Assemble a uniform resource identifier from its * components with a formatted resource. * * This function creates a formatted version of the resource string * argument "resourcef" and escapes reserved characters in the URI * depending on the value of the "encoding" argument. You should use * this function in place of traditional string functions whenever * you need to create a URI string. * * @since CUPS 1.2/macOS 10.5@ */ http_uri_status_t /* O - URI status */ httpAssembleURIf( http_uri_coding_t encoding, /* I - Encoding flags */ char *uri, /* I - URI buffer */ int urilen, /* I - Size of URI buffer */ const char *scheme, /* I - Scheme name */ const char *username, /* I - Username */ const char *host, /* I - Hostname or address */ int port, /* I - Port number */ const char *resourcef, /* I - Printf-style resource */ ...) /* I - Additional arguments as needed */ { va_list ap; /* Pointer to additional arguments */ char resource[1024]; /* Formatted resource string */ int bytes; /* Bytes in formatted string */ /* * Range check input... */ if (!uri || urilen < 1 || !scheme || port < 0 || !resourcef) { if (uri) *uri = '\0'; return (HTTP_URI_STATUS_BAD_ARGUMENTS); } /* * Format the resource string and assemble the URI... */ va_start(ap, resourcef); bytes = vsnprintf(resource, sizeof(resource), resourcef, ap); va_end(ap); if ((size_t)bytes >= sizeof(resource)) { *uri = '\0'; return (HTTP_URI_STATUS_OVERFLOW); } else return (httpAssembleURI(encoding, uri, urilen, scheme, username, host, port, resource)); } /* * 'httpAssembleUUID()' - Assemble a name-based UUID URN conforming to RFC 4122. * * This function creates a unique 128-bit identifying number using the server * name, port number, random data, and optionally an object name and/or object * number. The result is formatted as a UUID URN as defined in RFC 4122. * * The buffer needs to be at least 46 bytes in size. * * @since CUPS 1.7/macOS 10.9@ */ char * /* I - UUID string */ httpAssembleUUID(const char *server, /* I - Server name */ int port, /* I - Port number */ const char *name, /* I - Object name or NULL */ int number, /* I - Object number or 0 */ char *buffer, /* I - String buffer */ size_t bufsize) /* I - Size of buffer */ { char data[1024]; /* Source string for MD5 */ unsigned char md5sum[16]; /* MD5 digest/sum */ /* * Build a version 3 UUID conforming to RFC 4122. * * Start with the MD5 sum of the server, port, object name and * number, and some random data on the end. */ snprintf(data, sizeof(data), "%s:%d:%s:%d:%04x:%04x", server, port, name ? name : server, number, (unsigned)CUPS_RAND() & 0xffff, (unsigned)CUPS_RAND() & 0xffff); cupsHashData("md5", (unsigned char *)data, strlen(data), md5sum, sizeof(md5sum)); /* * Generate the UUID from the MD5... */ snprintf(buffer, bufsize, "urn:uuid:%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-" "%02x%02x%02x%02x%02x%02x", md5sum[0], md5sum[1], md5sum[2], md5sum[3], md5sum[4], md5sum[5], (md5sum[6] & 15) | 0x30, md5sum[7], (md5sum[8] & 0x3f) | 0x40, md5sum[9], md5sum[10], md5sum[11], md5sum[12], md5sum[13], md5sum[14], md5sum[15]); return (buffer); } /* * 'httpDecode64()' - Base64-decode a string. * * This function is deprecated. Use the httpDecode64_2() function instead * which provides buffer length arguments. * * @deprecated@ @exclude all@ */ char * /* O - Decoded string */ httpDecode64(char *out, /* I - String to write to */ const char *in) /* I - String to read from */ { int outlen; /* Output buffer length */ /* * Use the old maximum buffer size for binary compatibility... */ outlen = 512; return (httpDecode64_2(out, &outlen, in)); } /* * 'httpDecode64_2()' - Base64-decode a string. * * The caller must initialize "outlen" to the maximum size of the decoded * string before calling @code httpDecode64_2@. On return "outlen" contains the * decoded length of the string. * * @since CUPS 1.1.21/macOS 10.4@ */ char * /* O - Decoded string */ httpDecode64_2(char *out, /* I - String to write to */ int *outlen, /* IO - Size of output string */ const char *in) /* I - String to read from */ { int pos; /* Bit position */ unsigned base64; /* Value of this character */ char *outptr, /* Output pointer */ *outend; /* End of output buffer */ /* * Range check input... */ if (!out || !outlen || *outlen < 1 || !in) return (NULL); if (!*in) { *out = '\0'; *outlen = 0; return (out); } /* * Convert from base-64 to bytes... */ for (outptr = out, outend = out + *outlen - 1, pos = 0; *in != '\0'; in ++) { /* * Decode this character into a number from 0 to 63... */ if (*in >= 'A' && *in <= 'Z') base64 = (unsigned)(*in - 'A'); else if (*in >= 'a' && *in <= 'z') base64 = (unsigned)(*in - 'a' + 26); else if (*in >= '0' && *in <= '9') base64 = (unsigned)(*in - '0' + 52); else if (*in == '+') base64 = 62; else if (*in == '/') base64 = 63; else if (*in == '=') break; else continue; /* * Store the result in the appropriate chars... */ switch (pos) { case 0 : if (outptr < outend) *outptr = (char)(base64 << 2); pos ++; break; case 1 : if (outptr < outend) *outptr++ |= (char)((base64 >> 4) & 3); if (outptr < outend) *outptr = (char)((base64 << 4) & 255); pos ++; break; case 2 : if (outptr < outend) *outptr++ |= (char)((base64 >> 2) & 15); if (outptr < outend) *outptr = (char)((base64 << 6) & 255); pos ++; break; case 3 : if (outptr < outend) *outptr++ |= (char)base64; pos = 0; break; } } *outptr = '\0'; /* * Return the decoded string and size... */ *outlen = (int)(outptr - out); return (out); } /* * 'httpEncode64()' - Base64-encode a string. * * This function is deprecated. Use the httpEncode64_2() function instead * which provides buffer length arguments. * * @deprecated@ @exclude all@ */ char * /* O - Encoded string */ httpEncode64(char *out, /* I - String to write to */ const char *in) /* I - String to read from */ { return (httpEncode64_2(out, 512, in, (int)strlen(in))); } /* * 'httpEncode64_2()' - Base64-encode a string. * * @since CUPS 1.1.21/macOS 10.4@ */ char * /* O - Encoded string */ httpEncode64_2(char *out, /* I - String to write to */ int outlen, /* I - Maximum size of output string */ const char *in, /* I - String to read from */ int inlen) /* I - Size of input string */ { char *outptr, /* Output pointer */ *outend; /* End of output buffer */ static const char base64[] = /* Base64 characters... */ { "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789" "+/" }; /* * Range check input... */ if (!out || outlen < 1 || !in) return (NULL); /* * Convert bytes to base-64... */ for (outptr = out, outend = out + outlen - 1; inlen > 0; in ++, inlen --) { /* * Encode the up to 3 characters as 4 Base64 numbers... */ if (outptr < outend) *outptr ++ = base64[(in[0] & 255) >> 2]; if (outptr < outend) { if (inlen > 1) *outptr ++ = base64[(((in[0] & 255) << 4) | ((in[1] & 255) >> 4)) & 63]; else *outptr ++ = base64[((in[0] & 255) << 4) & 63]; } in ++; inlen --; if (inlen <= 0) { if (outptr < outend) *outptr ++ = '='; if (outptr < outend) *outptr ++ = '='; break; } if (outptr < outend) { if (inlen > 1) *outptr ++ = base64[(((in[0] & 255) << 2) | ((in[1] & 255) >> 6)) & 63]; else *outptr ++ = base64[((in[0] & 255) << 2) & 63]; } in ++; inlen --; if (inlen <= 0) { if (outptr < outend) *outptr ++ = '='; break; } if (outptr < outend) *outptr ++ = base64[in[0] & 63]; } *outptr = '\0'; /* * Return the encoded string... */ return (out); } /* * 'httpGetDateString()' - Get a formatted date/time string from a time value. * * @deprecated@ @exclude all@ */ const char * /* O - Date/time string */ httpGetDateString(time_t t) /* I - Time in seconds */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ return (httpGetDateString2(t, cg->http_date, sizeof(cg->http_date))); } /* * 'httpGetDateString2()' - Get a formatted date/time string from a time value. * * @since CUPS 1.2/macOS 10.5@ */ const char * /* O - Date/time string */ httpGetDateString2(time_t t, /* I - Time in seconds */ char *s, /* I - String buffer */ int slen) /* I - Size of string buffer */ { struct tm *tdate; /* UNIX date/time data */ tdate = gmtime(&t); if (tdate) snprintf(s, (size_t)slen, "%s, %02d %s %d %02d:%02d:%02d GMT", http_days[tdate->tm_wday], tdate->tm_mday, http_months[tdate->tm_mon], tdate->tm_year + 1900, tdate->tm_hour, tdate->tm_min, tdate->tm_sec); else s[0] = '\0'; return (s); } /* * 'httpGetDateTime()' - Get a time value from a formatted date/time string. */ time_t /* O - Time in seconds */ httpGetDateTime(const char *s) /* I - Date/time string */ { int i; /* Looping var */ char mon[16]; /* Abbreviated month name */ int day, year; /* Day of month and year */ int hour, min, sec; /* Time */ int days; /* Number of days since 1970 */ static const int normal_days[] = /* Days to a month, normal years */ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; static const int leap_days[] = /* Days to a month, leap years */ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }; DEBUG_printf(("2httpGetDateTime(s=\"%s\")", s)); /* * Extract the date and time from the formatted string... */ if (sscanf(s, "%*s%d%15s%d%d:%d:%d", &day, mon, &year, &hour, &min, &sec) < 6) return (0); DEBUG_printf(("4httpGetDateTime: day=%d, mon=\"%s\", year=%d, hour=%d, " "min=%d, sec=%d", day, mon, year, hour, min, sec)); /* * Convert the month name to a number from 0 to 11. */ for (i = 0; i < 12; i ++) if (!_cups_strcasecmp(mon, http_months[i])) break; if (i >= 12) return (0); DEBUG_printf(("4httpGetDateTime: i=%d", i)); /* * Now convert the date and time to a UNIX time value in seconds since * 1970. We can't use mktime() since the timezone may not be UTC but * the date/time string *is* UTC. */ if ((year & 3) == 0 && ((year % 100) != 0 || (year % 400) == 0)) days = leap_days[i] + day - 1; else days = normal_days[i] + day - 1; DEBUG_printf(("4httpGetDateTime: days=%d", days)); days += (year - 1970) * 365 + /* 365 days per year (normally) */ ((year - 1) / 4 - 492) - /* + leap days */ ((year - 1) / 100 - 19) + /* - 100 year days */ ((year - 1) / 400 - 4); /* + 400 year days */ DEBUG_printf(("4httpGetDateTime: days=%d\n", days)); return (days * 86400 + hour * 3600 + min * 60 + sec); } /* * 'httpSeparate()' - Separate a Universal Resource Identifier into its * components. * * This function is deprecated; use the httpSeparateURI() function instead. * * @deprecated@ @exclude all@ */ void httpSeparate(const char *uri, /* I - Universal Resource Identifier */ char *scheme, /* O - Scheme [32] (http, https, etc.) */ char *username, /* O - Username [1024] */ char *host, /* O - Hostname [1024] */ int *port, /* O - Port number to use */ char *resource) /* O - Resource/filename [1024] */ { httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, 32, username, HTTP_MAX_URI, host, HTTP_MAX_URI, port, resource, HTTP_MAX_URI); } /* * 'httpSeparate2()' - Separate a Universal Resource Identifier into its * components. * * This function is deprecated; use the httpSeparateURI() function instead. * * @since CUPS 1.1.21/macOS 10.4@ * @deprecated@ @exclude all@ */ void httpSeparate2(const char *uri, /* I - Universal Resource Identifier */ char *scheme, /* O - Scheme (http, https, etc.) */ int schemelen, /* I - Size of scheme buffer */ char *username, /* O - Username */ int usernamelen, /* I - Size of username buffer */ char *host, /* O - Hostname */ int hostlen, /* I - Size of hostname buffer */ int *port, /* O - Port number to use */ char *resource, /* O - Resource/filename */ int resourcelen) /* I - Size of resource buffer */ { httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, schemelen, username, usernamelen, host, hostlen, port, resource, resourcelen); } /* * 'httpSeparateURI()' - Separate a Universal Resource Identifier into its * components. * * @since CUPS 1.2/macOS 10.5@ */ http_uri_status_t /* O - Result of separation */ httpSeparateURI( http_uri_coding_t decoding, /* I - Decoding flags */ const char *uri, /* I - Universal Resource Identifier */ char *scheme, /* O - Scheme (http, https, etc.) */ int schemelen, /* I - Size of scheme buffer */ char *username, /* O - Username */ int usernamelen, /* I - Size of username buffer */ char *host, /* O - Hostname */ int hostlen, /* I - Size of hostname buffer */ int *port, /* O - Port number to use */ char *resource, /* O - Resource/filename */ int resourcelen) /* I - Size of resource buffer */ { char *ptr, /* Pointer into string... */ *end; /* End of string */ const char *sep; /* Separator character */ http_uri_status_t status; /* Result of separation */ /* * Initialize everything to blank... */ if (scheme && schemelen > 0) *scheme = '\0'; if (username && usernamelen > 0) *username = '\0'; if (host && hostlen > 0) *host = '\0'; if (port) *port = 0; if (resource && resourcelen > 0) *resource = '\0'; /* * Range check input... */ if (!uri || !port || !scheme || schemelen <= 0 || !username || usernamelen <= 0 || !host || hostlen <= 0 || !resource || resourcelen <= 0) return (HTTP_URI_STATUS_BAD_ARGUMENTS); if (!*uri) return (HTTP_URI_STATUS_BAD_URI); /* * Grab the scheme portion of the URI... */ status = HTTP_URI_STATUS_OK; if (!strncmp(uri, "//", 2)) { /* * Workaround for HP IPP client bug... */ strlcpy(scheme, "ipp", (size_t)schemelen); status = HTTP_URI_STATUS_MISSING_SCHEME; } else if (*uri == '/') { /* * Filename... */ strlcpy(scheme, "file", (size_t)schemelen); status = HTTP_URI_STATUS_MISSING_SCHEME; } else { /* * Standard URI with scheme... */ for (ptr = scheme, end = scheme + schemelen - 1; *uri && *uri != ':' && ptr < end;) if (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789-+.", *uri) != NULL) *ptr++ = *uri++; else break; *ptr = '\0'; if (*uri != ':') { *scheme = '\0'; return (HTTP_URI_STATUS_BAD_SCHEME); } uri ++; } /* * Set the default port number... */ if (!strcmp(scheme, "http")) *port = 80; else if (!strcmp(scheme, "https")) *port = 443; else if (!strcmp(scheme, "ipp") || !strcmp(scheme, "ipps")) *port = 631; else if (!_cups_strcasecmp(scheme, "lpd")) *port = 515; else if (!strcmp(scheme, "socket")) /* Not yet registered with IANA... */ *port = 9100; else if (strcmp(scheme, "file") && strcmp(scheme, "mailto") && strcmp(scheme, "tel")) status = HTTP_URI_STATUS_UNKNOWN_SCHEME; /* * Now see if we have a hostname... */ if (!strncmp(uri, "//", 2)) { /* * Yes, extract it... */ uri += 2; /* * Grab the username, if any... */ if ((sep = strpbrk(uri, "@/")) != NULL && *sep == '@') { /* * Get a username:password combo... */ uri = http_copy_decode(username, uri, usernamelen, "@", decoding & HTTP_URI_CODING_USERNAME); if (!uri) { *username = '\0'; return (HTTP_URI_STATUS_BAD_USERNAME); } uri ++; } /* * Then the hostname/IP address... */ if (*uri == '[') { /* * Grab IPv6 address... */ uri ++; if (*uri == 'v') { /* * Skip IPvFuture ("vXXXX.") prefix... */ uri ++; while (isxdigit(*uri & 255)) uri ++; if (*uri != '.') { *host = '\0'; return (HTTP_URI_STATUS_BAD_HOSTNAME); } uri ++; } uri = http_copy_decode(host, uri, hostlen, "]", decoding & HTTP_URI_CODING_HOSTNAME); if (!uri) { *host = '\0'; return (HTTP_URI_STATUS_BAD_HOSTNAME); } /* * Validate value... */ if (*uri != ']') { *host = '\0'; return (HTTP_URI_STATUS_BAD_HOSTNAME); } uri ++; for (ptr = host; *ptr; ptr ++) if (*ptr == '+') { /* * Convert zone separator to % and stop here... */ *ptr = '%'; break; } else if (*ptr == '%') { /* * Stop at zone separator (RFC 6874) */ break; } else if (*ptr != ':' && *ptr != '.' && !isxdigit(*ptr & 255)) { *host = '\0'; return (HTTP_URI_STATUS_BAD_HOSTNAME); } } else { /* * Validate the hostname or IPv4 address first... */ for (ptr = (char *)uri; *ptr; ptr ++) if (strchr(":?/", *ptr)) break; else if (!strchr("abcdefghijklmnopqrstuvwxyz" /* unreserved */ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" /* unreserved */ "0123456789" /* unreserved */ "-._~" /* unreserved */ "%" /* pct-encoded */ "!$&'()*+,;=" /* sub-delims */ "\\", *ptr)) /* SMB domain */ { *host = '\0'; return (HTTP_URI_STATUS_BAD_HOSTNAME); } /* * Then copy the hostname or IPv4 address to the buffer... */ uri = http_copy_decode(host, uri, hostlen, ":?/", decoding & HTTP_URI_CODING_HOSTNAME); if (!uri) { *host = '\0'; return (HTTP_URI_STATUS_BAD_HOSTNAME); } } /* * Validate hostname for file scheme - only empty and localhost are * acceptable. */ if (!strcmp(scheme, "file") && strcmp(host, "localhost") && host[0]) { *host = '\0'; return (HTTP_URI_STATUS_BAD_HOSTNAME); } /* * See if we have a port number... */ if (*uri == ':') { /* * Yes, collect the port number... */ if (!isdigit(uri[1] & 255)) { *port = 0; return (HTTP_URI_STATUS_BAD_PORT); } *port = (int)strtol(uri + 1, (char **)&uri, 10); if (*port <= 0 || *port > 65535) { *port = 0; return (HTTP_URI_STATUS_BAD_PORT); } if (*uri != '/' && *uri) { *port = 0; return (HTTP_URI_STATUS_BAD_PORT); } } } /* * The remaining portion is the resource string... */ if (*uri == '?' || !*uri) { /* * Hostname but no path... */ status = HTTP_URI_STATUS_MISSING_RESOURCE; *resource = '/'; /* * Copy any query string... */ if (*uri == '?') uri = http_copy_decode(resource + 1, uri, resourcelen - 1, NULL, decoding & HTTP_URI_CODING_QUERY); else resource[1] = '\0'; } else { uri = http_copy_decode(resource, uri, resourcelen, "?", decoding & HTTP_URI_CODING_RESOURCE); if (uri && *uri == '?') { /* * Concatenate any query string... */ char *resptr = resource + strlen(resource); uri = http_copy_decode(resptr, uri, resourcelen - (int)(resptr - resource), NULL, decoding & HTTP_URI_CODING_QUERY); } } if (!uri) { *resource = '\0'; return (HTTP_URI_STATUS_BAD_RESOURCE); } /* * Return the URI separation status... */ return (status); } /* * 'httpStateString()' - Return the string describing a HTTP state value. * * @since CUPS 2.0/OS 10.10@ */ const char * /* O - State string */ httpStateString(http_state_t state) /* I - HTTP state value */ { if (state < HTTP_STATE_ERROR || state > HTTP_STATE_UNKNOWN_VERSION) return ("HTTP_STATE_???"); else return (http_states[state - HTTP_STATE_ERROR]); } /* * '_httpStatus()' - Return the localized string describing a HTTP status code. * * The returned string is localized using the passed message catalog. */ const char * /* O - Localized status string */ _httpStatus(cups_lang_t *lang, /* I - Language */ http_status_t status) /* I - HTTP status code */ { const char *s; /* Status string */ switch (status) { case HTTP_STATUS_ERROR : s = strerror(errno); break; case HTTP_STATUS_CONTINUE : s = _("Continue"); break; case HTTP_STATUS_SWITCHING_PROTOCOLS : s = _("Switching Protocols"); break; case HTTP_STATUS_OK : s = _("OK"); break; case HTTP_STATUS_CREATED : s = _("Created"); break; case HTTP_STATUS_ACCEPTED : s = _("Accepted"); break; case HTTP_STATUS_NO_CONTENT : s = _("No Content"); break; case HTTP_STATUS_MOVED_PERMANENTLY : s = _("Moved Permanently"); break; case HTTP_STATUS_FOUND : s = _("Found"); break; case HTTP_STATUS_SEE_OTHER : s = _("See Other"); break; case HTTP_STATUS_NOT_MODIFIED : s = _("Not Modified"); break; case HTTP_STATUS_BAD_REQUEST : s = _("Bad Request"); break; case HTTP_STATUS_UNAUTHORIZED : case HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED : s = _("Unauthorized"); break; case HTTP_STATUS_FORBIDDEN : s = _("Forbidden"); break; case HTTP_STATUS_NOT_FOUND : s = _("Not Found"); break; case HTTP_STATUS_REQUEST_TOO_LARGE : s = _("Request Entity Too Large"); break; case HTTP_STATUS_URI_TOO_LONG : s = _("URI Too Long"); break; case HTTP_STATUS_UPGRADE_REQUIRED : s = _("Upgrade Required"); break; case HTTP_STATUS_NOT_IMPLEMENTED : s = _("Not Implemented"); break; case HTTP_STATUS_NOT_SUPPORTED : s = _("Not Supported"); break; case HTTP_STATUS_EXPECTATION_FAILED : s = _("Expectation Failed"); break; case HTTP_STATUS_SERVICE_UNAVAILABLE : s = _("Service Unavailable"); break; case HTTP_STATUS_SERVER_ERROR : s = _("Internal Server Error"); break; case HTTP_STATUS_CUPS_PKI_ERROR : s = _("SSL/TLS Negotiation Error"); break; case HTTP_STATUS_CUPS_WEBIF_DISABLED : s = _("Web Interface is Disabled"); break; default : s = _("Unknown"); break; } return (_cupsLangString(lang, s)); } /* * 'httpStatus()' - Return a short string describing a HTTP status code. * * The returned string is localized to the current POSIX locale and is based * on the status strings defined in RFC 7231. */ const char * /* O - Localized status string */ httpStatus(http_status_t status) /* I - HTTP status code */ { _cups_globals_t *cg = _cupsGlobals(); /* Global data */ if (!cg->lang_default) cg->lang_default = cupsLangDefault(); return (_httpStatus(cg->lang_default, status)); } /* * 'httpURIStatusString()' - Return a string describing a URI status code. * * @since CUPS 2.0/OS 10.10@ */ const char * /* O - Localized status string */ httpURIStatusString( http_uri_status_t status) /* I - URI status code */ { const char *s; /* Status string */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ if (!cg->lang_default) cg->lang_default = cupsLangDefault(); switch (status) { case HTTP_URI_STATUS_OVERFLOW : s = _("URI too large"); break; case HTTP_URI_STATUS_BAD_ARGUMENTS : s = _("Bad arguments to function"); break; case HTTP_URI_STATUS_BAD_RESOURCE : s = _("Bad resource in URI"); break; case HTTP_URI_STATUS_BAD_PORT : s = _("Bad port number in URI"); break; case HTTP_URI_STATUS_BAD_HOSTNAME : s = _("Bad hostname/address in URI"); break; case HTTP_URI_STATUS_BAD_USERNAME : s = _("Bad username in URI"); break; case HTTP_URI_STATUS_BAD_SCHEME : s = _("Bad scheme in URI"); break; case HTTP_URI_STATUS_BAD_URI : s = _("Bad/empty URI"); break; case HTTP_URI_STATUS_OK : s = _("OK"); break; case HTTP_URI_STATUS_MISSING_SCHEME : s = _("Missing scheme in URI"); break; case HTTP_URI_STATUS_UNKNOWN_SCHEME : s = _("Unknown scheme in URI"); break; case HTTP_URI_STATUS_MISSING_RESOURCE : s = _("Missing resource in URI"); break; default: s = _("Unknown"); break; } return (_cupsLangString(cg->lang_default, s)); } #ifndef HAVE_HSTRERROR /* * '_cups_hstrerror()' - hstrerror() emulation function for Solaris and others. */ const char * /* O - Error string */ _cups_hstrerror(int error) /* I - Error number */ { static const char * const errors[] = /* Error strings */ { "OK", "Host not found.", "Try again.", "Unrecoverable lookup error.", "No data associated with name." }; if (error < 0 || error > 4) return ("Unknown hostname lookup error."); else return (errors[error]); } #endif /* !HAVE_HSTRERROR */ /* * '_httpDecodeURI()' - Percent-decode a HTTP request URI. */ char * /* O - Decoded URI or NULL on error */ _httpDecodeURI(char *dst, /* I - Destination buffer */ const char *src, /* I - Source URI */ size_t dstsize) /* I - Size of destination buffer */ { if (http_copy_decode(dst, src, (int)dstsize, NULL, 1)) return (dst); else return (NULL); } /* * '_httpEncodeURI()' - Percent-encode a HTTP request URI. */ char * /* O - Encoded URI */ _httpEncodeURI(char *dst, /* I - Destination buffer */ const char *src, /* I - Source URI */ size_t dstsize) /* I - Size of destination buffer */ { http_copy_encode(dst, src, dst + dstsize - 1, NULL, NULL, 1); return (dst); } /* * '_httpResolveURI()' - Resolve a DNS-SD URI. */ const char * /* O - Resolved URI */ _httpResolveURI( const char *uri, /* I - DNS-SD URI */ char *resolved_uri, /* I - Buffer for resolved URI */ size_t resolved_size, /* I - Size of URI buffer */ int options, /* I - Resolve options */ int (*cb)(void *context), /* I - Continue callback function */ void *context) /* I - Context pointer for callback */ { char scheme[32], /* URI components... */ userpass[256], hostname[1024], resource[1024]; int port; #ifdef DEBUG http_uri_status_t status; /* URI decode status */ #endif /* DEBUG */ DEBUG_printf(("_httpResolveURI(uri=\"%s\", resolved_uri=%p, resolved_size=" CUPS_LLFMT ", options=0x%x, cb=%p, context=%p)", uri, (void *)resolved_uri, CUPS_LLCAST resolved_size, options, (void *)cb, context)); /* * Get the device URI... */ #ifdef DEBUG if ((status = httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource))) < HTTP_URI_STATUS_OK) #else if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) #endif /* DEBUG */ { if (options & _HTTP_RESOLVE_STDERR) _cupsLangPrintFilter(stderr, "ERROR", _("Bad device-uri \"%s\"."), uri); DEBUG_printf(("2_httpResolveURI: httpSeparateURI returned %d!", status)); DEBUG_puts("2_httpResolveURI: Returning NULL"); return (NULL); } /* * Resolve it as needed... */ if (strstr(hostname, "._tcp")) { #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) char *regtype, /* Pointer to type in hostname */ *domain, /* Pointer to domain in hostname */ *uuid, /* Pointer to UUID in URI */ *uuidend; /* Pointer to end of UUID in URI */ _http_uribuf_t uribuf; /* URI buffer */ int offline = 0; /* offline-report state set? */ # ifdef HAVE_DNSSD # ifdef WIN32 # pragma comment(lib, "dnssd.lib") # endif /* WIN32 */ DNSServiceRef ref, /* DNS-SD master service reference */ domainref = NULL,/* DNS-SD service reference for domain */ ippref = NULL, /* DNS-SD service reference for network IPP */ ippsref = NULL, /* DNS-SD service reference for network IPPS */ localref; /* DNS-SD service reference for .local */ int extrasent = 0; /* Send the domain/IPP/IPPS resolves? */ # ifdef HAVE_POLL struct pollfd polldata; /* Polling data */ # else /* select() */ fd_set input_set; /* Input set for select() */ struct timeval stimeout; /* Timeout value for select() */ # endif /* HAVE_POLL */ # elif defined(HAVE_AVAHI) AvahiClient *client; /* Client information */ int error; /* Status */ # endif /* HAVE_DNSSD */ if (options & _HTTP_RESOLVE_STDERR) fprintf(stderr, "DEBUG: Resolving \"%s\"...\n", hostname); /* * Separate the hostname into service name, registration type, and domain... */ for (regtype = strstr(hostname, "._tcp") - 2; regtype > hostname; regtype --) if (regtype[0] == '.' && regtype[1] == '_') { /* * Found ._servicetype in front of ._tcp... */ *regtype++ = '\0'; break; } if (regtype <= hostname) { DEBUG_puts("2_httpResolveURI: Bad hostname, returning NULL"); return (NULL); } for (domain = strchr(regtype, '.'); domain; domain = strchr(domain + 1, '.')) if (domain[1] != '_') break; if (domain) *domain++ = '\0'; if ((uuid = strstr(resource, "?uuid=")) != NULL) { *uuid = '\0'; uuid += 6; if ((uuidend = strchr(uuid, '&')) != NULL) *uuidend = '\0'; } resolved_uri[0] = '\0'; uribuf.buffer = resolved_uri; uribuf.bufsize = resolved_size; uribuf.options = options; uribuf.resource = resource; uribuf.uuid = uuid; DEBUG_printf(("2_httpResolveURI: Resolving hostname=\"%s\", regtype=\"%s\", " "domain=\"%s\"\n", hostname, regtype, domain)); if (options & _HTTP_RESOLVE_STDERR) { fputs("STATE: +connecting-to-device\n", stderr); fprintf(stderr, "DEBUG: Resolving \"%s\", regtype=\"%s\", " "domain=\"local.\"...\n", hostname, regtype); } uri = NULL; # ifdef HAVE_DNSSD if (DNSServiceCreateConnection(&ref) == kDNSServiceErr_NoError) { uint32_t myinterface = kDNSServiceInterfaceIndexAny; /* Lookup on any interface */ if (!strcmp(scheme, "ippusb")) myinterface = kDNSServiceInterfaceIndexLocalOnly; localref = ref; if (DNSServiceResolve(&localref, kDNSServiceFlagsShareConnection, myinterface, hostname, regtype, "local.", http_resolve_cb, &uribuf) == kDNSServiceErr_NoError) { int fds; /* Number of ready descriptors */ time_t timeout, /* Poll timeout */ start_time = time(NULL),/* Start time */ end_time = start_time + 90; /* End time */ while (time(NULL) < end_time) { if (options & _HTTP_RESOLVE_STDERR) _cupsLangPrintFilter(stderr, "INFO", _("Looking for printer.")); if (cb && !(*cb)(context)) { DEBUG_puts("2_httpResolveURI: callback returned 0 (stop)"); break; } /* * Wakeup every 2 seconds to emit a "looking for printer" message... */ if ((timeout = end_time - time(NULL)) > 2) timeout = 2; # ifdef HAVE_POLL polldata.fd = DNSServiceRefSockFD(ref); polldata.events = POLLIN; fds = poll(&polldata, 1, (int)(1000 * timeout)); # else /* select() */ FD_ZERO(&input_set); FD_SET(DNSServiceRefSockFD(ref), &input_set); # ifdef WIN32 stimeout.tv_sec = (long)timeout; # else stimeout.tv_sec = timeout; # endif /* WIN32 */ stimeout.tv_usec = 0; fds = select(DNSServiceRefSockFD(ref)+1, &input_set, NULL, NULL, &stimeout); # endif /* HAVE_POLL */ if (fds < 0) { if (errno != EINTR && errno != EAGAIN) { DEBUG_printf(("2_httpResolveURI: poll error: %s", strerror(errno))); break; } } else if (fds == 0) { /* * Wait 2 seconds for a response to the local resolve; if nothing * comes in, do an additional domain resolution... */ if (extrasent == 0 && domain && _cups_strcasecmp(domain, "local.")) { if (options & _HTTP_RESOLVE_STDERR) fprintf(stderr, "DEBUG: Resolving \"%s\", regtype=\"%s\", " "domain=\"%s\"...\n", hostname, regtype, domain ? domain : ""); domainref = ref; if (DNSServiceResolve(&domainref, kDNSServiceFlagsShareConnection, myinterface, hostname, regtype, domain, http_resolve_cb, &uribuf) == kDNSServiceErr_NoError) extrasent = 1; } else if (extrasent == 0 && !strcmp(scheme, "ippusb")) { if (options & _HTTP_RESOLVE_STDERR) fprintf(stderr, "DEBUG: Resolving \"%s\", regtype=\"_ipps._tcp\", domain=\"local.\"...\n", hostname); ippsref = ref; if (DNSServiceResolve(&ippsref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexAny, hostname, "_ipps._tcp", domain, http_resolve_cb, &uribuf) == kDNSServiceErr_NoError) extrasent = 1; } else if (extrasent == 1 && !strcmp(scheme, "ippusb")) { if (options & _HTTP_RESOLVE_STDERR) fprintf(stderr, "DEBUG: Resolving \"%s\", regtype=\"_ipp._tcp\", domain=\"local.\"...\n", hostname); ippref = ref; if (DNSServiceResolve(&ippref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexAny, hostname, "_ipp._tcp", domain, http_resolve_cb, &uribuf) == kDNSServiceErr_NoError) extrasent = 2; } /* * If it hasn't resolved within 5 seconds set the offline-report * printer-state-reason... */ if ((options & _HTTP_RESOLVE_STDERR) && offline == 0 && time(NULL) > (start_time + 5)) { fputs("STATE: +offline-report\n", stderr); offline = 1; } } else { if (DNSServiceProcessResult(ref) == kDNSServiceErr_NoError && resolved_uri[0]) { uri = resolved_uri; break; } } } if (extrasent) { if (domainref) DNSServiceRefDeallocate(domainref); if (ippref) DNSServiceRefDeallocate(ippref); if (ippsref) DNSServiceRefDeallocate(ippsref); } DNSServiceRefDeallocate(localref); } DNSServiceRefDeallocate(ref); } # else /* HAVE_AVAHI */ if ((uribuf.poll = avahi_simple_poll_new()) != NULL) { avahi_simple_poll_set_func(uribuf.poll, http_poll_cb, NULL); if ((client = avahi_client_new(avahi_simple_poll_get(uribuf.poll), 0, http_client_cb, &uribuf, &error)) != NULL) { if (avahi_service_resolver_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, hostname, regtype, "local.", AVAHI_PROTO_UNSPEC, 0, http_resolve_cb, &uribuf) != NULL) { time_t start_time = time(NULL), /* Start time */ end_time = start_time + 90; /* End time */ int pstatus; /* Poll status */ pstatus = avahi_simple_poll_iterate(uribuf.poll, 2000); if (pstatus == 0 && !resolved_uri[0] && domain && _cups_strcasecmp(domain, "local.")) { /* * Resolve for .local hasn't returned anything, try the listed * domain... */ avahi_service_resolver_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, hostname, regtype, domain, AVAHI_PROTO_UNSPEC, 0, http_resolve_cb, &uribuf); } while (!pstatus && !resolved_uri[0] && time(NULL) < end_time) { if ((pstatus = avahi_simple_poll_iterate(uribuf.poll, 2000)) != 0) break; /* * If it hasn't resolved within 5 seconds set the offline-report * printer-state-reason... */ if ((options & _HTTP_RESOLVE_STDERR) && offline == 0 && time(NULL) > (start_time + 5)) { fputs("STATE: +offline-report\n", stderr); offline = 1; } } /* * Collect the result (if we got one). */ if (resolved_uri[0]) uri = resolved_uri; } avahi_client_free(client); } avahi_simple_poll_free(uribuf.poll); } # endif /* HAVE_DNSSD */ if (options & _HTTP_RESOLVE_STDERR) { if (uri) { fprintf(stderr, "DEBUG: Resolved as \"%s\"...\n", uri); fputs("STATE: -connecting-to-device,offline-report\n", stderr); } else { fputs("DEBUG: Unable to resolve URI\n", stderr); fputs("STATE: -connecting-to-device\n", stderr); } } #else /* HAVE_DNSSD || HAVE_AVAHI */ /* * No DNS-SD support... */ uri = NULL; #endif /* HAVE_DNSSD || HAVE_AVAHI */ if ((options & _HTTP_RESOLVE_STDERR) && !uri) _cupsLangPrintFilter(stderr, "INFO", _("Unable to find printer.")); } else { /* * Nothing more to do... */ strlcpy(resolved_uri, uri, resolved_size); uri = resolved_uri; } DEBUG_printf(("2_httpResolveURI: Returning \"%s\"", uri)); return (uri); } #ifdef HAVE_AVAHI /* * 'http_client_cb()' - Client callback for resolving URI. */ static void http_client_cb( AvahiClient *client, /* I - Client information */ AvahiClientState state, /* I - Current state */ void *context) /* I - Pointer to URI buffer */ { DEBUG_printf(("7http_client_cb(client=%p, state=%d, context=%p)", client, state, context)); /* * If the connection drops, quit. */ if (state == AVAHI_CLIENT_FAILURE) { _http_uribuf_t *uribuf = (_http_uribuf_t *)context; /* URI buffer */ avahi_simple_poll_quit(uribuf->poll); } } #endif /* HAVE_AVAHI */ /* * 'http_copy_decode()' - Copy and decode a URI. */ static const char * /* O - New source pointer or NULL on error */ http_copy_decode(char *dst, /* O - Destination buffer */ const char *src, /* I - Source pointer */ int dstsize, /* I - Destination size */ const char *term, /* I - Terminating characters */ int decode) /* I - Decode %-encoded values */ { char *ptr, /* Pointer into buffer */ *end; /* End of buffer */ int quoted; /* Quoted character */ /* * Copy the src to the destination until we hit a terminating character * or the end of the string. */ for (ptr = dst, end = dst + dstsize - 1; *src && (!term || !strchr(term, *src)); src ++) if (ptr < end) { if (*src == '%' && decode) { if (isxdigit(src[1] & 255) && isxdigit(src[2] & 255)) { /* * Grab a hex-encoded character... */ src ++; if (isalpha(*src)) quoted = (tolower(*src) - 'a' + 10) << 4; else quoted = (*src - '0') << 4; src ++; if (isalpha(*src)) quoted |= tolower(*src) - 'a' + 10; else quoted |= *src - '0'; *ptr++ = (char)quoted; } else { /* * Bad hex-encoded character... */ *ptr = '\0'; return (NULL); } } else if ((*src & 255) <= 0x20 || (*src & 255) >= 0x7f) { *ptr = '\0'; return (NULL); } else *ptr++ = *src; } *ptr = '\0'; return (src); } /* * 'http_copy_encode()' - Copy and encode a URI. */ static char * /* O - End of current URI */ http_copy_encode(char *dst, /* O - Destination buffer */ const char *src, /* I - Source pointer */ char *dstend, /* I - End of destination buffer */ const char *reserved, /* I - Extra reserved characters */ const char *term, /* I - Terminating characters */ int encode) /* I - %-encode reserved chars? */ { static const char hex[] = "0123456789ABCDEF"; while (*src && dst < dstend) { if (term && *src == *term) return (dst); if (encode && (*src == '%' || *src <= ' ' || *src & 128 || (reserved && strchr(reserved, *src)))) { /* * Hex encode reserved characters... */ if ((dst + 2) >= dstend) break; *dst++ = '%'; *dst++ = hex[(*src >> 4) & 15]; *dst++ = hex[*src & 15]; src ++; } else *dst++ = *src++; } *dst = '\0'; if (*src) return (NULL); else return (dst); } #ifdef HAVE_DNSSD /* * 'http_resolve_cb()' - Build a device URI for the given service name. */ static void DNSSD_API http_resolve_cb( DNSServiceRef sdRef, /* I - Service reference */ DNSServiceFlags flags, /* I - Results flags */ uint32_t interfaceIndex, /* I - Interface number */ DNSServiceErrorType errorCode, /* I - Error, if any */ const char *fullName, /* I - Full service name */ const char *hostTarget, /* I - Hostname */ uint16_t port, /* I - Port number */ uint16_t txtLen, /* I - Length of TXT record */ const unsigned char *txtRecord, /* I - TXT record data */ void *context) /* I - Pointer to URI buffer */ { _http_uribuf_t *uribuf = (_http_uribuf_t *)context; /* URI buffer */ const char *scheme, /* URI scheme */ *hostptr, /* Pointer into hostTarget */ *reskey, /* "rp" or "rfo" */ *resdefault; /* Default path */ char resource[257], /* Remote path */ fqdn[256]; /* FQDN of the .local name */ const void *value; /* Value from TXT record */ uint8_t valueLen; /* Length of value */ DEBUG_printf(("4http_resolve_cb(sdRef=%p, flags=%x, interfaceIndex=%u, errorCode=%d, fullName=\"%s\", hostTarget=\"%s\", port=%u, txtLen=%u, txtRecord=%p, context=%p)", (void *)sdRef, flags, interfaceIndex, errorCode, fullName, hostTarget, port, txtLen, (void *)txtRecord, context)); /* * If we have a UUID, compare it... */ if (uribuf->uuid && (value = TXTRecordGetValuePtr(txtLen, txtRecord, "UUID", &valueLen)) != NULL) { char uuid[256]; /* UUID value */ memcpy(uuid, value, valueLen); uuid[valueLen] = '\0'; if (_cups_strcasecmp(uuid, uribuf->uuid)) { if (uribuf->options & _HTTP_RESOLVE_STDERR) fprintf(stderr, "DEBUG: Found UUID %s, looking for %s.", uuid, uribuf->uuid); DEBUG_printf(("5http_resolve_cb: Found UUID %s, looking for %s.", uuid, uribuf->uuid)); return; } } /* * Figure out the scheme from the full name... */ if (strstr(fullName, "._ipps") || strstr(fullName, "._ipp-tls")) scheme = "ipps"; else if (strstr(fullName, "._ipp") || strstr(fullName, "._fax-ipp")) scheme = "ipp"; else if (strstr(fullName, "._http.")) scheme = "http"; else if (strstr(fullName, "._https.")) scheme = "https"; else if (strstr(fullName, "._printer.")) scheme = "lpd"; else if (strstr(fullName, "._pdl-datastream.")) scheme = "socket"; else scheme = "riousbprint"; /* * Extract the "remote printer" key from the TXT record... */ if ((uribuf->options & _HTTP_RESOLVE_FAXOUT) && (!strcmp(scheme, "ipp") || !strcmp(scheme, "ipps")) && !TXTRecordGetValuePtr(txtLen, txtRecord, "printer-type", &valueLen)) { reskey = "rfo"; resdefault = "/ipp/faxout"; } else { reskey = "rp"; resdefault = "/"; } if ((value = TXTRecordGetValuePtr(txtLen, txtRecord, reskey, &valueLen)) != NULL) { if (((char *)value)[0] == '/') { /* * Value (incorrectly) has a leading slash already... */ memcpy(resource, value, valueLen); resource[valueLen] = '\0'; } else { /* * Convert to resource by concatenating with a leading "/"... */ resource[0] = '/'; memcpy(resource + 1, value, valueLen); resource[valueLen + 1] = '\0'; } } else { /* * Use the default value... */ strlcpy(resource, resdefault, sizeof(resource)); } /* * Lookup the FQDN if needed... */ if ((uribuf->options & _HTTP_RESOLVE_FQDN) && (hostptr = hostTarget + strlen(hostTarget) - 7) > hostTarget && !_cups_strcasecmp(hostptr, ".local.")) { /* * OK, we got a .local name but the caller needs a real domain. Start by * getting the IP address of the .local name and then do reverse-lookups... */ http_addrlist_t *addrlist, /* List of addresses */ *addr; /* Current address */ DEBUG_printf(("5http_resolve_cb: Looking up \"%s\".", hostTarget)); snprintf(fqdn, sizeof(fqdn), "%d", ntohs(port)); if ((addrlist = httpAddrGetList(hostTarget, AF_UNSPEC, fqdn)) != NULL) { for (addr = addrlist; addr; addr = addr->next) { int error = getnameinfo(&(addr->addr.addr), (socklen_t)httpAddrLength(&(addr->addr)), fqdn, sizeof(fqdn), NULL, 0, NI_NAMEREQD); if (!error) { DEBUG_printf(("5http_resolve_cb: Found \"%s\".", fqdn)); if ((hostptr = fqdn + strlen(fqdn) - 6) <= fqdn || _cups_strcasecmp(hostptr, ".local")) { hostTarget = fqdn; break; } } #ifdef DEBUG else DEBUG_printf(("5http_resolve_cb: \"%s\" did not resolve: %d", httpAddrString(&(addr->addr), fqdn, sizeof(fqdn)), error)); #endif /* DEBUG */ } httpAddrFreeList(addrlist); } } /* * Assemble the final device URI... */ if ((!strcmp(scheme, "ipp") || !strcmp(scheme, "ipps")) && !strcmp(uribuf->resource, "/cups")) httpAssembleURIf(HTTP_URI_CODING_ALL, uribuf->buffer, (int)uribuf->bufsize, scheme, NULL, hostTarget, ntohs(port), "%s?snmp=false", resource); else httpAssembleURI(HTTP_URI_CODING_ALL, uribuf->buffer, (int)uribuf->bufsize, scheme, NULL, hostTarget, ntohs(port), resource); DEBUG_printf(("5http_resolve_cb: Resolved URI is \"%s\"...", uribuf->buffer)); } #elif defined(HAVE_AVAHI) /* * 'http_poll_cb()' - Wait for input on the specified file descriptors. * * Note: This function is needed because avahi_simple_poll_iterate is broken * and always uses a timeout of 0 (!) milliseconds. * (Avahi Ticket #364) * * @private@ */ static int /* O - Number of file descriptors matching */ http_poll_cb( struct pollfd *pollfds, /* I - File descriptors */ unsigned int num_pollfds, /* I - Number of file descriptors */ int timeout, /* I - Timeout in milliseconds (used) */ void *context) /* I - User data (unused) */ { (void)timeout; (void)context; return (poll(pollfds, num_pollfds, 2000)); } /* * 'http_resolve_cb()' - Build a device URI for the given service name. */ static void http_resolve_cb( AvahiServiceResolver *resolver, /* I - Resolver (unused) */ AvahiIfIndex interface, /* I - Interface index (unused) */ AvahiProtocol protocol, /* I - Network protocol (unused) */ AvahiResolverEvent event, /* I - Event (found, etc.) */ const char *name, /* I - Service name */ const char *type, /* I - Registration type */ const char *domain, /* I - Domain (unused) */ const char *hostTarget, /* I - Hostname */ const AvahiAddress *address, /* I - Address (unused) */ uint16_t port, /* I - Port number */ AvahiStringList *txt, /* I - TXT record */ AvahiLookupResultFlags flags, /* I - Lookup flags (unused) */ void *context) /* I - Pointer to URI buffer */ { _http_uribuf_t *uribuf = (_http_uribuf_t *)context; /* URI buffer */ const char *scheme, /* URI scheme */ *hostptr, /* Pointer into hostTarget */ *reskey, /* "rp" or "rfo" */ *resdefault; /* Default path */ char resource[257], /* Remote path */ fqdn[256]; /* FQDN of the .local name */ AvahiStringList *pair; /* Current TXT record key/value pair */ char *value; /* Value for "rp" key */ size_t valueLen = 0; /* Length of "rp" key */ DEBUG_printf(("4http_resolve_cb(resolver=%p, " "interface=%d, protocol=%d, event=%d, name=\"%s\", " "type=\"%s\", domain=\"%s\", hostTarget=\"%s\", address=%p, " "port=%d, txt=%p, flags=%d, context=%p)", resolver, interface, protocol, event, name, type, domain, hostTarget, address, port, txt, flags, context)); if (event != AVAHI_RESOLVER_FOUND) { avahi_service_resolver_free(resolver); avahi_simple_poll_quit(uribuf->poll); return; } /* * If we have a UUID, compare it... */ if (uribuf->uuid && (pair = avahi_string_list_find(txt, "UUID")) != NULL) { char uuid[256]; /* UUID value */ avahi_string_list_get_pair(pair, NULL, &value, &valueLen); memcpy(uuid, value, valueLen); uuid[valueLen] = '\0'; if (_cups_strcasecmp(uuid, uribuf->uuid)) { if (uribuf->options & _HTTP_RESOLVE_STDERR) fprintf(stderr, "DEBUG: Found UUID %s, looking for %s.", uuid, uribuf->uuid); DEBUG_printf(("5http_resolve_cb: Found UUID %s, looking for %s.", uuid, uribuf->uuid)); return; } } /* * Figure out the scheme from the full name... */ if (strstr(type, "_ipp.")) scheme = "ipp"; else if (strstr(type, "_printer.")) scheme = "lpd"; else if (strstr(type, "_pdl-datastream.")) scheme = "socket"; else scheme = "riousbprint"; if (!strncmp(type, "_ipps.", 6) || !strncmp(type, "_ipp-tls.", 9)) scheme = "ipps"; else if (!strncmp(type, "_ipp.", 5) || !strncmp(type, "_fax-ipp.", 9)) scheme = "ipp"; else if (!strncmp(type, "_http.", 6)) scheme = "http"; else if (!strncmp(type, "_https.", 7)) scheme = "https"; else if (!strncmp(type, "_printer.", 9)) scheme = "lpd"; else if (!strncmp(type, "_pdl-datastream.", 16)) scheme = "socket"; else { avahi_service_resolver_free(resolver); avahi_simple_poll_quit(uribuf->poll); return; } /* * Extract the remote resource key from the TXT record... */ if ((uribuf->options & _HTTP_RESOLVE_FAXOUT) && (!strcmp(scheme, "ipp") || !strcmp(scheme, "ipps")) && !avahi_string_list_find(txt, "printer-type")) { reskey = "rfo"; resdefault = "/ipp/faxout"; } else { reskey = "rp"; resdefault = "/"; } if ((pair = avahi_string_list_find(txt, reskey)) != NULL) { avahi_string_list_get_pair(pair, NULL, &value, &valueLen); if (value[0] == '/') { /* * Value (incorrectly) has a leading slash already... */ memcpy(resource, value, valueLen); resource[valueLen] = '\0'; } else { /* * Convert to resource by concatenating with a leading "/"... */ resource[0] = '/'; memcpy(resource + 1, value, valueLen); resource[valueLen + 1] = '\0'; } } else { /* * Use the default value... */ strlcpy(resource, resdefault, sizeof(resource)); } /* * Lookup the FQDN if needed... */ if ((uribuf->options & _HTTP_RESOLVE_FQDN) && (hostptr = hostTarget + strlen(hostTarget) - 6) > hostTarget && !_cups_strcasecmp(hostptr, ".local")) { /* * OK, we got a .local name but the caller needs a real domain. Start by * getting the IP address of the .local name and then do reverse-lookups... */ http_addrlist_t *addrlist, /* List of addresses */ *addr; /* Current address */ DEBUG_printf(("5http_resolve_cb: Looking up \"%s\".", hostTarget)); snprintf(fqdn, sizeof(fqdn), "%d", ntohs(port)); if ((addrlist = httpAddrGetList(hostTarget, AF_UNSPEC, fqdn)) != NULL) { for (addr = addrlist; addr; addr = addr->next) { int error = getnameinfo(&(addr->addr.addr), (socklen_t)httpAddrLength(&(addr->addr)), fqdn, sizeof(fqdn), NULL, 0, NI_NAMEREQD); if (!error) { DEBUG_printf(("5http_resolve_cb: Found \"%s\".", fqdn)); if ((hostptr = fqdn + strlen(fqdn) - 6) <= fqdn || _cups_strcasecmp(hostptr, ".local")) { hostTarget = fqdn; break; } } #ifdef DEBUG else DEBUG_printf(("5http_resolve_cb: \"%s\" did not resolve: %d", httpAddrString(&(addr->addr), fqdn, sizeof(fqdn)), error)); #endif /* DEBUG */ } httpAddrFreeList(addrlist); } } /* * Assemble the final device URI using the resolved hostname... */ httpAssembleURI(HTTP_URI_CODING_ALL, uribuf->buffer, (int)uribuf->bufsize, scheme, NULL, hostTarget, port, resource); DEBUG_printf(("5http_resolve_cb: Resolved URI is \"%s\".", uribuf->buffer)); avahi_simple_poll_quit(uribuf->poll); } #endif /* HAVE_DNSSD */ cups-2.2.7/cups/http.c000664 000765 000024 00000343153 13255074424 015261 0ustar00msweetstaff000000 000000 /* * HTTP routines for CUPS. * * Copyright 2007-2018 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * This file contains Kerberos support code, copyright 2006 by * Jelmer Vernooij. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include #include #ifdef WIN32 # include #else # include # include # include #endif /* WIN32 */ #ifdef HAVE_POLL # include #endif /* HAVE_POLL */ /* * Local functions... */ static void http_add_field(http_t *http, http_field_t field, const char *value, int append); #ifdef HAVE_LIBZ static void http_content_coding_finish(http_t *http); static void http_content_coding_start(http_t *http, const char *value); #endif /* HAVE_LIBZ */ static http_t *http_create(const char *host, int port, http_addrlist_t *addrlist, int family, http_encryption_t encryption, int blocking, _http_mode_t mode); #ifdef DEBUG static void http_debug_hex(const char *prefix, const char *buffer, int bytes); #endif /* DEBUG */ static ssize_t http_read(http_t *http, char *buffer, size_t length); static ssize_t http_read_buffered(http_t *http, char *buffer, size_t length); static ssize_t http_read_chunk(http_t *http, char *buffer, size_t length); static int http_send(http_t *http, http_state_t request, const char *uri); static ssize_t http_write(http_t *http, const char *buffer, size_t length); static ssize_t http_write_chunk(http_t *http, const char *buffer, size_t length); static off_t http_set_length(http_t *http); static void http_set_timeout(int fd, double timeout); static void http_set_wait(http_t *http); #ifdef HAVE_SSL static int http_tls_upgrade(http_t *http); #endif /* HAVE_SSL */ /* * Local globals... */ static const char * const http_fields[] = { "Accept-Language", "Accept-Ranges", "Authorization", "Connection", "Content-Encoding", "Content-Language", "Content-Length", "Content-Location", "Content-MD5", "Content-Range", "Content-Type", "Content-Version", "Date", "Host", "If-Modified-Since", "If-Unmodified-since", "Keep-Alive", "Last-Modified", "Link", "Location", "Range", "Referer", "Retry-After", "Transfer-Encoding", "Upgrade", "User-Agent", "WWW-Authenticate", "Accept-Encoding", "Allow", "Server" }; /* * 'httpAcceptConnection()' - Accept a new HTTP client connection from the * specified listening socket. * * @since CUPS 1.7/macOS 10.9@ */ http_t * /* O - HTTP connection or @code NULL@ */ httpAcceptConnection(int fd, /* I - Listen socket file descriptor */ int blocking) /* I - 1 if the connection should be blocking, 0 otherwise */ { http_t *http; /* HTTP connection */ http_addrlist_t addrlist; /* Dummy address list */ socklen_t addrlen; /* Length of address */ int val; /* Socket option value */ /* * Range check input... */ if (fd < 0) return (NULL); /* * Create the client connection... */ memset(&addrlist, 0, sizeof(addrlist)); if ((http = http_create(NULL, 0, &addrlist, AF_UNSPEC, HTTP_ENCRYPTION_IF_REQUESTED, blocking, _HTTP_MODE_SERVER)) == NULL) return (NULL); /* * Accept the client and get the remote address... */ addrlen = sizeof(http_addr_t); if ((http->fd = accept(fd, (struct sockaddr *)&(http->addrlist->addr), &addrlen)) < 0) { _cupsSetHTTPError(HTTP_STATUS_ERROR); httpClose(http); return (NULL); } http->hostaddr = &(http->addrlist->addr); if (httpAddrLocalhost(http->hostaddr)) strlcpy(http->hostname, "localhost", sizeof(http->hostname)); else httpAddrString(http->hostaddr, http->hostname, sizeof(http->hostname)); #ifdef SO_NOSIGPIPE /* * Disable SIGPIPE for this socket. */ val = 1; setsockopt(http->fd, SOL_SOCKET, SO_NOSIGPIPE, CUPS_SOCAST &val, sizeof(val)); #endif /* SO_NOSIGPIPE */ /* * Using TCP_NODELAY improves responsiveness, especially on systems * with a slow loopback interface. Since we write large buffers * when sending print files and requests, there shouldn't be any * performance penalty for this... */ val = 1; setsockopt(http->fd, IPPROTO_TCP, TCP_NODELAY, CUPS_SOCAST &val, sizeof(val)); #ifdef FD_CLOEXEC /* * Close this socket when starting another process... */ fcntl(http->fd, F_SETFD, FD_CLOEXEC); #endif /* FD_CLOEXEC */ return (http); } /* * 'httpAddCredential()' - Allocates and adds a single credential to an array. * * Use @code cupsArrayNew(NULL, NULL)@ to create a credentials array. * * @since CUPS 1.5/macOS 10.7@ */ int /* O - 0 on success, -1 on error */ httpAddCredential( cups_array_t *credentials, /* I - Credentials array */ const void *data, /* I - PEM-encoded X.509 data */ size_t datalen) /* I - Length of data */ { http_credential_t *credential; /* Credential data */ if ((credential = malloc(sizeof(http_credential_t))) != NULL) { credential->datalen = datalen; if ((credential->data = malloc(datalen)) != NULL) { memcpy(credential->data, data, datalen); cupsArrayAdd(credentials, credential); return (0); } free(credential); } return (-1); } /* * 'httpBlocking()' - Set blocking/non-blocking behavior on a connection. */ void httpBlocking(http_t *http, /* I - HTTP connection */ int b) /* I - 1 = blocking, 0 = non-blocking */ { if (http) { http->blocking = b; http_set_wait(http); } } /* * 'httpCheck()' - Check to see if there is a pending response from the server. */ int /* O - 0 = no data, 1 = data available */ httpCheck(http_t *http) /* I - HTTP connection */ { return (httpWait(http, 0)); } /* * 'httpClearCookie()' - Clear the cookie value(s). * * @since CUPS 1.1.19/macOS 10.3@ */ void httpClearCookie(http_t *http) /* I - HTTP connection */ { if (!http) return; if (http->cookie) { free(http->cookie); http->cookie = NULL; } } /* * 'httpClearFields()' - Clear HTTP request fields. */ void httpClearFields(http_t *http) /* I - HTTP connection */ { DEBUG_printf(("httpClearFields(http=%p)", (void *)http)); if (http) { memset(http->fields, 0, sizeof(http->fields)); if (http->mode == _HTTP_MODE_CLIENT) { if (http->hostname[0] == '/') httpSetField(http, HTTP_FIELD_HOST, "localhost"); else httpSetField(http, HTTP_FIELD_HOST, http->hostname); } if (http->field_authorization) { free(http->field_authorization); http->field_authorization = NULL; } if (http->accept_encoding) { _cupsStrFree(http->accept_encoding); http->accept_encoding = NULL; } if (http->allow) { _cupsStrFree(http->allow); http->allow = NULL; } if (http->server) { _cupsStrFree(http->server); http->server = NULL; } http->expect = (http_status_t)0; } } /* * 'httpClose()' - Close an HTTP connection. */ void httpClose(http_t *http) /* I - HTTP connection */ { #ifdef HAVE_GSSAPI OM_uint32 minor_status; /* Minor status code */ #endif /* HAVE_GSSAPI */ DEBUG_printf(("httpClose(http=%p)", (void *)http)); /* * Range check input... */ if (!http) return; /* * Close any open connection... */ _httpDisconnect(http); /* * Free memory used... */ httpAddrFreeList(http->addrlist); if (http->cookie) free(http->cookie); #ifdef HAVE_GSSAPI if (http->gssctx != GSS_C_NO_CONTEXT) gss_delete_sec_context(&minor_status, &http->gssctx, GSS_C_NO_BUFFER); if (http->gssname != GSS_C_NO_NAME) gss_release_name(&minor_status, &http->gssname); #endif /* HAVE_GSSAPI */ #ifdef HAVE_AUTHORIZATION_H if (http->auth_ref) AuthorizationFree(http->auth_ref, kAuthorizationFlagDefaults); #endif /* HAVE_AUTHORIZATION_H */ httpClearFields(http); if (http->authstring && http->authstring != http->_authstring) free(http->authstring); free(http); } /* * 'httpCompareCredentials()' - Compare two sets of X.509 credentials. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 1 if they match, 0 if they do not */ httpCompareCredentials( cups_array_t *cred1, /* I - First set of X.509 credentials */ cups_array_t *cred2) /* I - Second set of X.509 credentials */ { http_credential_t *temp1, *temp2; /* Temporary credentials */ for (temp1 = (http_credential_t *)cupsArrayFirst(cred1), temp2 = (http_credential_t *)cupsArrayFirst(cred2); temp1 && temp2; temp1 = (http_credential_t *)cupsArrayNext(cred1), temp2 = (http_credential_t *)cupsArrayNext(cred2)) if (temp1->datalen != temp2->datalen) return (0); else if (memcmp(temp1->data, temp2->data, temp1->datalen)) return (0); return (temp1 == temp2); } /* * 'httpConnect()' - Connect to a HTTP server. * * This function is deprecated - use @link httpConnect2@ instead. * * @deprecated@ @exclude all@ */ http_t * /* O - New HTTP connection */ httpConnect(const char *host, /* I - Host to connect to */ int port) /* I - Port number */ { return (httpConnect2(host, port, NULL, AF_UNSPEC, HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL)); } /* * 'httpConnect2()' - Connect to a HTTP server. * * @since CUPS 1.7/macOS 10.9@ */ http_t * /* O - New HTTP connection */ httpConnect2( const char *host, /* I - Host to connect to */ int port, /* I - Port number */ http_addrlist_t *addrlist, /* I - List of addresses or @code NULL@ to lookup */ int family, /* I - Address family to use or @code AF_UNSPEC@ for any */ http_encryption_t encryption, /* I - Type of encryption to use */ int blocking, /* I - 1 for blocking connection, 0 for non-blocking */ int msec, /* I - Connection timeout in milliseconds, 0 means don't connect */ int *cancel) /* I - Pointer to "cancel" variable */ { http_t *http; /* New HTTP connection */ DEBUG_printf(("httpConnect2(host=\"%s\", port=%d, addrlist=%p, family=%d, encryption=%d, blocking=%d, msec=%d, cancel=%p)", host, port, (void *)addrlist, family, encryption, blocking, msec, (void *)cancel)); /* * Create the HTTP structure... */ if ((http = http_create(host, port, addrlist, family, encryption, blocking, _HTTP_MODE_CLIENT)) == NULL) return (NULL); /* * Optionally connect to the remote system... */ if (msec == 0 || !httpReconnect2(http, msec, cancel)) return (http); /* * Could not connect to any known address - bail out! */ httpClose(http); return (NULL); } /* * 'httpConnectEncrypt()' - Connect to a HTTP server using encryption. * * This function is now deprecated. Please use the @link httpConnect2@ function * instead. * * @deprecated@ @exclude all@ */ http_t * /* O - New HTTP connection */ httpConnectEncrypt( const char *host, /* I - Host to connect to */ int port, /* I - Port number */ http_encryption_t encryption) /* I - Type of encryption to use */ { DEBUG_printf(("httpConnectEncrypt(host=\"%s\", port=%d, encryption=%d)", host, port, encryption)); return (httpConnect2(host, port, NULL, AF_UNSPEC, encryption, 1, 30000, NULL)); } /* * 'httpDelete()' - Send a DELETE request to the server. */ int /* O - Status of call (0 = success) */ httpDelete(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI to delete */ { return (http_send(http, HTTP_STATE_DELETE, uri)); } /* * '_httpDisconnect()' - Disconnect a HTTP connection. */ void _httpDisconnect(http_t *http) /* I - HTTP connection */ { #ifdef HAVE_SSL if (http->tls) _httpTLSStop(http); #endif /* HAVE_SSL */ httpAddrClose(NULL, http->fd); http->fd = -1; } /* * 'httpEncryption()' - Set the required encryption on the link. */ int /* O - -1 on error, 0 on success */ httpEncryption(http_t *http, /* I - HTTP connection */ http_encryption_t e) /* I - New encryption preference */ { DEBUG_printf(("httpEncryption(http=%p, e=%d)", (void *)http, e)); #ifdef HAVE_SSL if (!http) return (0); if (http->mode == _HTTP_MODE_CLIENT) { http->encryption = e; if ((http->encryption == HTTP_ENCRYPTION_ALWAYS && !http->tls) || (http->encryption == HTTP_ENCRYPTION_NEVER && http->tls)) return (httpReconnect2(http, 30000, NULL)); else if (http->encryption == HTTP_ENCRYPTION_REQUIRED && !http->tls) return (http_tls_upgrade(http)); else return (0); } else { if (e == HTTP_ENCRYPTION_NEVER && http->tls) return (-1); http->encryption = e; if (e != HTTP_ENCRYPTION_IF_REQUESTED && !http->tls) return (_httpTLSStart(http)); else return (0); } #else if (e == HTTP_ENCRYPTION_ALWAYS || e == HTTP_ENCRYPTION_REQUIRED) return (-1); else return (0); #endif /* HAVE_SSL */ } /* * 'httpError()' - Get the last error on a connection. */ int /* O - Error code (errno) value */ httpError(http_t *http) /* I - HTTP connection */ { if (http) return (http->error); else return (EINVAL); } /* * 'httpFieldValue()' - Return the HTTP field enumeration value for a field * name. */ http_field_t /* O - Field index */ httpFieldValue(const char *name) /* I - String name */ { int i; /* Looping var */ for (i = 0; i < HTTP_FIELD_MAX; i ++) if (!_cups_strcasecmp(name, http_fields[i])) return ((http_field_t)i); return (HTTP_FIELD_UNKNOWN); } /* * 'httpFlush()' - Flush data read from a HTTP connection. */ void httpFlush(http_t *http) /* I - HTTP connection */ { char buffer[8192]; /* Junk buffer */ int blocking; /* To block or not to block */ http_state_t oldstate; /* Old state */ DEBUG_printf(("httpFlush(http=%p), state=%s", (void *)http, httpStateString(http->state))); /* * Nothing to do if we are in the "waiting" state... */ if (http->state == HTTP_STATE_WAITING) return; /* * Temporarily set non-blocking mode so we don't get stuck in httpRead()... */ blocking = http->blocking; http->blocking = 0; /* * Read any data we can... */ oldstate = http->state; while (httpRead2(http, buffer, sizeof(buffer)) > 0); /* * Restore blocking and reset the connection if we didn't get all of * the remaining data... */ http->blocking = blocking; if (http->state == oldstate && http->state != HTTP_STATE_WAITING && http->fd >= 0) { /* * Didn't get the data back, so close the current connection. */ #ifdef HAVE_LIBZ if (http->coding) http_content_coding_finish(http); #endif /* HAVE_LIBZ */ DEBUG_puts("1httpFlush: Setting state to HTTP_STATE_WAITING and closing."); http->state = HTTP_STATE_WAITING; #ifdef HAVE_SSL if (http->tls) _httpTLSStop(http); #endif /* HAVE_SSL */ httpAddrClose(NULL, http->fd); http->fd = -1; } } /* * 'httpFlushWrite()' - Flush data written to a HTTP connection. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - Bytes written or -1 on error */ httpFlushWrite(http_t *http) /* I - HTTP connection */ { ssize_t bytes; /* Bytes written */ DEBUG_printf(("httpFlushWrite(http=%p) data_encoding=%d", (void *)http, http ? http->data_encoding : 100)); if (!http || !http->wused) { DEBUG_puts(http ? "1httpFlushWrite: Write buffer is empty." : "1httpFlushWrite: No connection."); return (0); } if (http->data_encoding == HTTP_ENCODING_CHUNKED) bytes = http_write_chunk(http, http->wbuffer, (size_t)http->wused); else bytes = http_write(http, http->wbuffer, (size_t)http->wused); http->wused = 0; DEBUG_printf(("1httpFlushWrite: Returning %d, errno=%d.", (int)bytes, errno)); return ((int)bytes); } /* * 'httpFreeCredentials()' - Free an array of credentials. */ void httpFreeCredentials( cups_array_t *credentials) /* I - Array of credentials */ { http_credential_t *credential; /* Credential */ for (credential = (http_credential_t *)cupsArrayFirst(credentials); credential; credential = (http_credential_t *)cupsArrayNext(credentials)) { cupsArrayRemove(credentials, credential); free((void *)credential->data); free(credential); } cupsArrayDelete(credentials); } /* * 'httpGet()' - Send a GET request to the server. */ int /* O - Status of call (0 = success) */ httpGet(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI to get */ { return (http_send(http, HTTP_STATE_GET, uri)); } /* * 'httpGetActivity()' - Get the most recent activity for a connection. * * The return value is the time in seconds of the last read or write. * * @since CUPS 2.0/OS 10.10@ */ time_t /* O - Time of last read or write */ httpGetActivity(http_t *http) /* I - HTTP connection */ { return (http ? http->activity : 0); } /* * 'httpGetAuthString()' - Get the current authorization string. * * The authorization string is set by @link cupsDoAuthentication@ and * @link httpSetAuthString@. Use @link httpGetAuthString@ to retrieve the * string to use with @link httpSetField@ for the * @code HTTP_FIELD_AUTHORIZATION@ value. * * @since CUPS 1.3/macOS 10.5@ */ char * /* O - Authorization string */ httpGetAuthString(http_t *http) /* I - HTTP connection */ { if (http) return (http->authstring); else return (NULL); } /* * 'httpGetBlocking()' - Get the blocking/non-block state of a connection. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 1 if blocking, 0 if non-blocking */ httpGetBlocking(http_t *http) /* I - HTTP connection */ { return (http ? http->blocking : 0); } /* * 'httpGetContentEncoding()' - Get a common content encoding, if any, between * the client and server. * * This function uses the value of the Accepts-Encoding HTTP header and must be * called after receiving a response from the server or a request from the * client. The value returned can be use in subsequent requests (for clients) * or in the response (for servers) in order to compress the content stream. * * @since CUPS 1.7/macOS 10.9@ */ const char * /* O - Content-Coding value or @code NULL@ for the identity coding. */ httpGetContentEncoding(http_t *http) /* I - HTTP connection */ { #ifdef HAVE_LIBZ if (http && http->accept_encoding) { int i; /* Looping var */ char temp[HTTP_MAX_VALUE], /* Copy of Accepts-Encoding value */ *start, /* Start of coding value */ *end; /* End of coding value */ double qvalue; /* "qvalue" for coding */ struct lconv *loc = localeconv(); /* Locale data */ static const char * const codings[] = { /* Supported content codings */ "deflate", "gzip", "x-deflate", "x-gzip" }; strlcpy(temp, http->accept_encoding, sizeof(temp)); for (start = temp; *start; start = end) { /* * Find the end of the coding name... */ qvalue = 1.0; end = start; while (*end && *end != ';' && *end != ',' && !isspace(*end & 255)) end ++; if (*end == ';') { /* * Grab the qvalue as needed... */ if (!strncmp(end, ";q=", 3)) qvalue = _cupsStrScand(end + 3, NULL, loc); /* * Skip past all attributes... */ *end++ = '\0'; while (*end && *end != ',' && !isspace(*end & 255)) end ++; } else if (*end) *end++ = '\0'; while (*end && isspace(*end & 255)) end ++; /* * Check value if it matches something we support... */ if (qvalue <= 0.0) continue; for (i = 0; i < (int)(sizeof(codings) / sizeof(codings[0])); i ++) if (!strcmp(start, codings[i])) return (codings[i]); } } #endif /* HAVE_LIBZ */ return (NULL); } /* * 'httpGetCookie()' - Get any cookie data from the response. * * @since CUPS 1.1.19/macOS 10.3@ */ const char * /* O - Cookie data or @code NULL@ */ httpGetCookie(http_t *http) /* I - HTTP connection */ { return (http ? http->cookie : NULL); } /* * 'httpGetEncryption()' - Get the current encryption mode of a connection. * * This function returns the encryption mode for the connection. Use the * @link httpIsEncrypted@ function to determine whether a TLS session has * been established. * * @since CUPS 2.0/OS 10.10@ */ http_encryption_t /* O - Current encryption mode */ httpGetEncryption(http_t *http) /* I - HTTP connection */ { return (http ? http->encryption : HTTP_ENCRYPTION_IF_REQUESTED); } /* * 'httpGetExpect()' - Get the value of the Expect header, if any. * * Returns @code HTTP_STATUS_NONE@ if there is no Expect header, otherwise * returns the expected HTTP status code, typically @code HTTP_STATUS_CONTINUE@. * * @since CUPS 1.7/macOS 10.9@ */ http_status_t /* O - Expect: status, if any */ httpGetExpect(http_t *http) /* I - HTTP connection */ { if (!http) return (HTTP_STATUS_ERROR); else return (http->expect); } /* * 'httpGetFd()' - Get the file descriptor associated with a connection. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - File descriptor or -1 if none */ httpGetFd(http_t *http) /* I - HTTP connection */ { return (http ? http->fd : -1); } /* * 'httpGetField()' - Get a field value from a request/response. */ const char * /* O - Field value */ httpGetField(http_t *http, /* I - HTTP connection */ http_field_t field) /* I - Field to get */ { if (!http || field <= HTTP_FIELD_UNKNOWN || field >= HTTP_FIELD_MAX) return (NULL); switch (field) { case HTTP_FIELD_ACCEPT_ENCODING : return (http->accept_encoding); case HTTP_FIELD_ALLOW : return (http->allow); case HTTP_FIELD_SERVER : return (http->server); case HTTP_FIELD_AUTHORIZATION : if (http->field_authorization) { /* * Special case for WWW-Authenticate: as its contents can be * longer than HTTP_MAX_VALUE... */ return (http->field_authorization); } default : return (http->fields[field]); } } /* * 'httpGetKeepAlive()' - Get the current Keep-Alive state of the connection. * * @since CUPS 2.0/OS 10.10@ */ http_keepalive_t /* O - Keep-Alive state */ httpGetKeepAlive(http_t *http) /* I - HTTP connection */ { return (http ? http->keep_alive : HTTP_KEEPALIVE_OFF); } /* * 'httpGetLength()' - Get the amount of data remaining from the * content-length or transfer-encoding fields. * * This function is deprecated and will not return lengths larger than * 2^31 - 1; use httpGetLength2() instead. * * @deprecated@ @exclude all@ */ int /* O - Content length */ httpGetLength(http_t *http) /* I - HTTP connection */ { /* * Get the read content length and return the 32-bit value. */ if (http) { httpGetLength2(http); return (http->_data_remaining); } else return (-1); } /* * 'httpGetLength2()' - Get the amount of data remaining from the * content-length or transfer-encoding fields. * * This function returns the complete content length, even for * content larger than 2^31 - 1. * * @since CUPS 1.2/macOS 10.5@ */ off_t /* O - Content length */ httpGetLength2(http_t *http) /* I - HTTP connection */ { off_t remaining; /* Remaining length */ DEBUG_printf(("2httpGetLength2(http=%p), state=%s", (void *)http, httpStateString(http->state))); if (!http) return (-1); if (!_cups_strcasecmp(http->fields[HTTP_FIELD_TRANSFER_ENCODING], "chunked")) { DEBUG_puts("4httpGetLength2: chunked request!"); remaining = 0; } else { /* * The following is a hack for HTTP servers that don't send a * Content-Length or Transfer-Encoding field... * * If there is no Content-Length then the connection must close * after the transfer is complete... */ if (!http->fields[HTTP_FIELD_CONTENT_LENGTH][0]) { /* * Default content length is 0 for errors and certain types of operations, * and 2^31-1 for other successful requests... */ if (http->status >= HTTP_STATUS_MULTIPLE_CHOICES || http->state == HTTP_STATE_OPTIONS || (http->state == HTTP_STATE_GET && http->mode == _HTTP_MODE_SERVER) || http->state == HTTP_STATE_HEAD || (http->state == HTTP_STATE_PUT && http->mode == _HTTP_MODE_CLIENT) || http->state == HTTP_STATE_DELETE || http->state == HTTP_STATE_TRACE || http->state == HTTP_STATE_CONNECT) remaining = 0; else remaining = 2147483647; } else if ((remaining = strtoll(http->fields[HTTP_FIELD_CONTENT_LENGTH], NULL, 10)) < 0) remaining = -1; DEBUG_printf(("4httpGetLength2: content_length=" CUPS_LLFMT, CUPS_LLCAST remaining)); } return (remaining); } /* * 'httpGetPending()' - Get the number of bytes that are buffered for writing. * * @since CUPS 2.0/OS 10.10@ */ size_t /* O - Number of bytes buffered */ httpGetPending(http_t *http) /* I - HTTP connection */ { return (http ? (size_t)http->wused : 0); } /* * 'httpGetReady()' - Get the number of bytes that can be read without blocking. * * @since CUPS 2.0/OS 10.10@ */ size_t /* O - Number of bytes available */ httpGetReady(http_t *http) /* I - HTTP connection */ { if (!http) return (0); else if (http->used > 0) return ((size_t)http->used); #ifdef HAVE_SSL else if (http->tls) return (_httpTLSPending(http)); #endif /* HAVE_SSL */ return (0); } /* * 'httpGetRemaining()' - Get the number of remaining bytes in the message * body or current chunk. * * The @link httpIsChunked@ function can be used to determine whether the * message body is chunked or fixed-length. * * @since CUPS 2.0/OS 10.10@ */ size_t /* O - Remaining bytes */ httpGetRemaining(http_t *http) /* I - HTTP connection */ { return (http ? (size_t)http->data_remaining : 0); } /* * 'httpGets()' - Get a line of text from a HTTP connection. */ char * /* O - Line or @code NULL@ */ httpGets(char *line, /* I - Line to read into */ int length, /* I - Max length of buffer */ http_t *http) /* I - HTTP connection */ { char *lineptr, /* Pointer into line */ *lineend, /* End of line */ *bufptr, /* Pointer into input buffer */ *bufend; /* Pointer to end of buffer */ ssize_t bytes; /* Number of bytes read */ int eol; /* End-of-line? */ DEBUG_printf(("2httpGets(line=%p, length=%d, http=%p)", (void *)line, length, (void *)http)); if (!http || !line || length <= 1) return (NULL); /* * Read a line from the buffer... */ http->error = 0; lineptr = line; lineend = line + length - 1; eol = 0; while (lineptr < lineend) { /* * Pre-load the buffer as needed... */ #ifdef WIN32 WSASetLastError(0); #else errno = 0; #endif /* WIN32 */ while (http->used == 0) { /* * No newline; see if there is more data to be read... */ while (!_httpWait(http, http->wait_value, 1)) { if (http->timeout_cb && (*http->timeout_cb)(http, http->timeout_data)) continue; DEBUG_puts("3httpGets: Timed out!"); #ifdef WIN32 http->error = WSAETIMEDOUT; #else http->error = ETIMEDOUT; #endif /* WIN32 */ return (NULL); } bytes = http_read(http, http->buffer + http->used, (size_t)(HTTP_MAX_BUFFER - http->used)); DEBUG_printf(("4httpGets: read " CUPS_LLFMT " bytes.", CUPS_LLCAST bytes)); if (bytes < 0) { /* * Nope, can't get a line this time... */ #ifdef WIN32 DEBUG_printf(("3httpGets: recv() error %d!", WSAGetLastError())); if (WSAGetLastError() == WSAEINTR) continue; else if (WSAGetLastError() == WSAEWOULDBLOCK) { if (http->timeout_cb && (*http->timeout_cb)(http, http->timeout_data)) continue; http->error = WSAGetLastError(); } else if (WSAGetLastError() != http->error) { http->error = WSAGetLastError(); continue; } #else DEBUG_printf(("3httpGets: recv() error %d!", errno)); if (errno == EINTR) continue; else if (errno == EWOULDBLOCK || errno == EAGAIN) { if (http->timeout_cb && (*http->timeout_cb)(http, http->timeout_data)) continue; else if (!http->timeout_cb && errno == EAGAIN) continue; http->error = errno; } else if (errno != http->error) { http->error = errno; continue; } #endif /* WIN32 */ return (NULL); } else if (bytes == 0) { http->error = EPIPE; return (NULL); } /* * Yup, update the amount used... */ http->used += (int)bytes; } /* * Now copy as much of the current line as possible... */ for (bufptr = http->buffer, bufend = http->buffer + http->used; lineptr < lineend && bufptr < bufend;) { if (*bufptr == 0x0a) { eol = 1; bufptr ++; break; } else if (*bufptr == 0x0d) bufptr ++; else *lineptr++ = *bufptr++; } http->used -= (int)(bufptr - http->buffer); if (http->used > 0) memmove(http->buffer, bufptr, (size_t)http->used); if (eol) { /* * End of line... */ http->activity = time(NULL); *lineptr = '\0'; DEBUG_printf(("3httpGets: Returning \"%s\"", line)); return (line); } } DEBUG_puts("3httpGets: No new line available!"); return (NULL); } /* * 'httpGetState()' - Get the current state of the HTTP request. */ http_state_t /* O - HTTP state */ httpGetState(http_t *http) /* I - HTTP connection */ { return (http ? http->state : HTTP_STATE_ERROR); } /* * 'httpGetStatus()' - Get the status of the last HTTP request. * * @since CUPS 1.2/macOS 10.5@ */ http_status_t /* O - HTTP status */ httpGetStatus(http_t *http) /* I - HTTP connection */ { return (http ? http->status : HTTP_STATUS_ERROR); } /* * 'httpGetSubField()' - Get a sub-field value. * * @deprecated@ @exclude all@ */ char * /* O - Value or @code NULL@ */ httpGetSubField(http_t *http, /* I - HTTP connection */ http_field_t field, /* I - Field index */ const char *name, /* I - Name of sub-field */ char *value) /* O - Value string */ { return (httpGetSubField2(http, field, name, value, HTTP_MAX_VALUE)); } /* * 'httpGetSubField2()' - Get a sub-field value. * * @since CUPS 1.2/macOS 10.5@ */ char * /* O - Value or @code NULL@ */ httpGetSubField2(http_t *http, /* I - HTTP connection */ http_field_t field, /* I - Field index */ const char *name, /* I - Name of sub-field */ char *value, /* O - Value string */ int valuelen) /* I - Size of value buffer */ { const char *fptr; /* Pointer into field */ char temp[HTTP_MAX_VALUE], /* Temporary buffer for name */ *ptr, /* Pointer into string buffer */ *end; /* End of value buffer */ DEBUG_printf(("2httpGetSubField2(http=%p, field=%d, name=\"%s\", value=%p, valuelen=%d)", (void *)http, field, name, (void *)value, valuelen)); if (!http || !name || !value || valuelen < 2 || field <= HTTP_FIELD_UNKNOWN || field >= HTTP_FIELD_MAX) return (NULL); end = value + valuelen - 1; for (fptr = http->fields[field]; *fptr;) { /* * Skip leading whitespace... */ while (_cups_isspace(*fptr)) fptr ++; if (*fptr == ',') { fptr ++; continue; } /* * Get the sub-field name... */ for (ptr = temp; *fptr && *fptr != '=' && !_cups_isspace(*fptr) && ptr < (temp + sizeof(temp) - 1); *ptr++ = *fptr++); *ptr = '\0'; DEBUG_printf(("4httpGetSubField2: name=\"%s\"", temp)); /* * Skip trailing chars up to the '='... */ while (_cups_isspace(*fptr)) fptr ++; if (!*fptr) break; if (*fptr != '=') continue; /* * Skip = and leading whitespace... */ fptr ++; while (_cups_isspace(*fptr)) fptr ++; if (*fptr == '\"') { /* * Read quoted string... */ for (ptr = value, fptr ++; *fptr && *fptr != '\"' && ptr < end; *ptr++ = *fptr++); *ptr = '\0'; while (*fptr && *fptr != '\"') fptr ++; if (*fptr) fptr ++; } else { /* * Read unquoted string... */ for (ptr = value; *fptr && !_cups_isspace(*fptr) && *fptr != ',' && ptr < end; *ptr++ = *fptr++); *ptr = '\0'; while (*fptr && !_cups_isspace(*fptr) && *fptr != ',') fptr ++; } DEBUG_printf(("4httpGetSubField2: value=\"%s\"", value)); /* * See if this is the one... */ if (!strcmp(name, temp)) { DEBUG_printf(("3httpGetSubField2: Returning \"%s\"", value)); return (value); } } value[0] = '\0'; DEBUG_puts("3httpGetSubField2: Returning NULL"); return (NULL); } /* * 'httpGetVersion()' - Get the HTTP version at the other end. */ http_version_t /* O - Version number */ httpGetVersion(http_t *http) /* I - HTTP connection */ { return (http ? http->version : HTTP_VERSION_1_0); } /* * 'httpHead()' - Send a HEAD request to the server. */ int /* O - Status of call (0 = success) */ httpHead(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI for head */ { DEBUG_printf(("httpHead(http=%p, uri=\"%s\")", (void *)http, uri)); return (http_send(http, HTTP_STATE_HEAD, uri)); } /* * 'httpInitialize()' - Initialize the HTTP interface library and set the * default HTTP proxy (if any). */ void httpInitialize(void) { static int initialized = 0; /* Have we been called before? */ #ifdef WIN32 WSADATA winsockdata; /* WinSock data */ #endif /* WIN32 */ _cupsGlobalLock(); if (initialized) { _cupsGlobalUnlock(); return; } #ifdef WIN32 WSAStartup(MAKEWORD(2,2), &winsockdata); #elif !defined(SO_NOSIGPIPE) /* * Ignore SIGPIPE signals... */ # ifdef HAVE_SIGSET sigset(SIGPIPE, SIG_IGN); # elif defined(HAVE_SIGACTION) struct sigaction action; /* POSIX sigaction data */ memset(&action, 0, sizeof(action)); action.sa_handler = SIG_IGN; sigaction(SIGPIPE, &action, NULL); # else signal(SIGPIPE, SIG_IGN); # endif /* !SO_NOSIGPIPE */ #endif /* WIN32 */ # ifdef HAVE_SSL _httpTLSInitialize(); # endif /* HAVE_SSL */ initialized = 1; _cupsGlobalUnlock(); } /* * 'httpIsChunked()' - Report whether a message body is chunked. * * This function returns non-zero if the message body is composed of * variable-length chunks. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 1 if chunked, 0 if not */ httpIsChunked(http_t *http) /* I - HTTP connection */ { return (http ? http->data_encoding == HTTP_ENCODING_CHUNKED : 0); } /* * 'httpIsEncrypted()' - Report whether a connection is encrypted. * * This function returns non-zero if the connection is currently encrypted. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 1 if encrypted, 0 if not */ httpIsEncrypted(http_t *http) /* I - HTTP connection */ { return (http ? http->tls != NULL : 0); } /* * 'httpOptions()' - Send an OPTIONS request to the server. */ int /* O - Status of call (0 = success) */ httpOptions(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI for options */ { return (http_send(http, HTTP_STATE_OPTIONS, uri)); } /* * 'httpPeek()' - Peek at data from a HTTP connection. * * This function copies available data from the given HTTP connection, reading * a buffer as needed. The data is still available for reading using * @link httpRead2@. * * For non-blocking connections the usual timeouts apply. * * @since CUPS 1.7/macOS 10.9@ */ ssize_t /* O - Number of bytes copied */ httpPeek(http_t *http, /* I - HTTP connection */ char *buffer, /* I - Buffer for data */ size_t length) /* I - Maximum number of bytes */ { ssize_t bytes; /* Bytes read */ char len[32]; /* Length string */ DEBUG_printf(("httpPeek(http=%p, buffer=%p, length=" CUPS_LLFMT ")", (void *)http, (void *)buffer, CUPS_LLCAST length)); if (http == NULL || buffer == NULL) return (-1); http->activity = time(NULL); http->error = 0; if (length <= 0) return (0); if (http->data_encoding == HTTP_ENCODING_CHUNKED && http->data_remaining <= 0) { DEBUG_puts("2httpPeek: Getting chunk length..."); if (httpGets(len, sizeof(len), http) == NULL) { DEBUG_puts("1httpPeek: Could not get length!"); return (0); } if (!len[0]) { DEBUG_puts("1httpPeek: Blank chunk length, trying again..."); if (!httpGets(len, sizeof(len), http)) { DEBUG_puts("1httpPeek: Could not get chunk length."); return (0); } } http->data_remaining = strtoll(len, NULL, 16); if (http->data_remaining < 0) { DEBUG_puts("1httpPeek: Negative chunk length!"); return (0); } } DEBUG_printf(("2httpPeek: data_remaining=" CUPS_LLFMT, CUPS_LLCAST http->data_remaining)); if (http->data_remaining <= 0 && http->data_encoding != HTTP_ENCODING_FIELDS) { /* * A zero-length chunk ends a transfer; unless we are reading POST * data, go idle... */ #ifdef HAVE_LIBZ if (http->coding >= _HTTP_CODING_GUNZIP) http_content_coding_finish(http); #endif /* HAVE_LIBZ */ if (http->data_encoding == HTTP_ENCODING_CHUNKED) httpGets(len, sizeof(len), http); if (http->state == HTTP_STATE_POST_RECV) http->state ++; else http->state = HTTP_STATE_STATUS; DEBUG_printf(("1httpPeek: 0-length chunk, set state to %s.", httpStateString(http->state))); /* * Prevent future reads for this request... */ http->data_encoding = HTTP_ENCODING_FIELDS; return (0); } else if (length > (size_t)http->data_remaining) length = (size_t)http->data_remaining; #ifdef HAVE_LIBZ if (http->used == 0 && (http->coding == _HTTP_CODING_IDENTITY || (http->coding >= _HTTP_CODING_GUNZIP && http->stream.avail_in == 0))) #else if (http->used == 0) #endif /* HAVE_LIBZ */ { /* * Buffer small reads for better performance... */ ssize_t buflen; /* Length of read for buffer */ if (!http->blocking) { while (!httpWait(http, http->wait_value)) { if (http->timeout_cb && (*http->timeout_cb)(http, http->timeout_data)) continue; return (0); } } if ((size_t)http->data_remaining > sizeof(http->buffer)) buflen = sizeof(http->buffer); else buflen = (ssize_t)http->data_remaining; DEBUG_printf(("2httpPeek: Reading %d bytes into buffer.", (int)buflen)); bytes = http_read(http, http->buffer, (size_t)buflen); DEBUG_printf(("2httpPeek: Read " CUPS_LLFMT " bytes into buffer.", CUPS_LLCAST bytes)); if (bytes > 0) { #ifdef DEBUG http_debug_hex("httpPeek", http->buffer, (int)bytes); #endif /* DEBUG */ http->used = (int)bytes; } } #ifdef HAVE_LIBZ if (http->coding >= _HTTP_CODING_GUNZIP) { # ifdef HAVE_INFLATECOPY int zerr; /* Decompressor error */ z_stream stream; /* Copy of decompressor stream */ if (http->used > 0 && http->stream.avail_in < HTTP_MAX_BUFFER) { size_t buflen = buflen = HTTP_MAX_BUFFER - http->stream.avail_in; /* Number of bytes to copy */ if (http->stream.avail_in > 0 && http->stream.next_in > http->sbuffer) memmove(http->sbuffer, http->stream.next_in, http->stream.avail_in); http->stream.next_in = http->sbuffer; if (buflen > (size_t)http->data_remaining) buflen = (size_t)http->data_remaining; if (buflen > (size_t)http->used) buflen = (size_t)http->used; DEBUG_printf(("1httpPeek: Copying %d more bytes of data into " "decompression buffer.", (int)buflen)); memcpy(http->sbuffer + http->stream.avail_in, http->buffer, buflen); http->stream.avail_in += buflen; http->used -= (int)buflen; http->data_remaining -= (off_t)buflen; if (http->used > 0) memmove(http->buffer, http->buffer + buflen, (size_t)http->used); } DEBUG_printf(("2httpPeek: length=%d, avail_in=%d", (int)length, (int)http->stream.avail_in)); if (inflateCopy(&stream, &(http->stream)) != Z_OK) { DEBUG_puts("2httpPeek: Unable to copy decompressor stream."); http->error = ENOMEM; return (-1); } stream.next_out = (Bytef *)buffer; stream.avail_out = (uInt)length; zerr = inflate(&stream, Z_SYNC_FLUSH); inflateEnd(&stream); if (zerr < Z_OK) { DEBUG_printf(("2httpPeek: zerr=%d", zerr)); #ifdef DEBUG http_debug_hex("2httpPeek", (char *)http->sbuffer, (int)http->stream.avail_in); #endif /* DEBUG */ http->error = EIO; return (-1); } bytes = (ssize_t)(length - http->stream.avail_out); # else DEBUG_puts("2httpPeek: No inflateCopy on this platform, httpPeek does not " "work with compressed streams."); return (-1); # endif /* HAVE_INFLATECOPY */ } else #endif /* HAVE_LIBZ */ if (http->used > 0) { if (length > (size_t)http->used) length = (size_t)http->used; bytes = (ssize_t)length; DEBUG_printf(("2httpPeek: grabbing %d bytes from input buffer...", (int)bytes)); memcpy(buffer, http->buffer, length); } else bytes = 0; if (bytes < 0) { #ifdef WIN32 if (WSAGetLastError() == WSAEINTR || WSAGetLastError() == WSAEWOULDBLOCK) bytes = 0; else http->error = WSAGetLastError(); #else if (errno == EINTR || errno == EAGAIN) bytes = 0; else http->error = errno; #endif /* WIN32 */ } else if (bytes == 0) { http->error = EPIPE; return (0); } return (bytes); } /* * 'httpPost()' - Send a POST request to the server. */ int /* O - Status of call (0 = success) */ httpPost(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI for post */ { return (http_send(http, HTTP_STATE_POST, uri)); } /* * 'httpPrintf()' - Print a formatted string to a HTTP connection. * * @private@ */ int /* O - Number of bytes written */ httpPrintf(http_t *http, /* I - HTTP connection */ const char *format, /* I - printf-style format string */ ...) /* I - Additional args as needed */ { ssize_t bytes; /* Number of bytes to write */ char buf[16384]; /* Buffer for formatted string */ va_list ap; /* Variable argument pointer */ DEBUG_printf(("2httpPrintf(http=%p, format=\"%s\", ...)", (void *)http, format)); va_start(ap, format); bytes = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); DEBUG_printf(("3httpPrintf: (" CUPS_LLFMT " bytes) %s", CUPS_LLCAST bytes, buf)); if (http->data_encoding == HTTP_ENCODING_FIELDS) return ((int)httpWrite2(http, buf, (size_t)bytes)); else { if (http->wused) { DEBUG_puts("4httpPrintf: flushing existing data..."); if (httpFlushWrite(http) < 0) return (-1); } return ((int)http_write(http, buf, (size_t)bytes)); } } /* * 'httpPut()' - Send a PUT request to the server. */ int /* O - Status of call (0 = success) */ httpPut(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI to put */ { DEBUG_printf(("httpPut(http=%p, uri=\"%s\")", (void *)http, uri)); return (http_send(http, HTTP_STATE_PUT, uri)); } /* * 'httpRead()' - Read data from a HTTP connection. * * This function is deprecated. Use the httpRead2() function which can * read more than 2GB of data. * * @deprecated@ @exclude all@ */ int /* O - Number of bytes read */ httpRead(http_t *http, /* I - HTTP connection */ char *buffer, /* I - Buffer for data */ int length) /* I - Maximum number of bytes */ { return ((int)httpRead2(http, buffer, (size_t)length)); } /* * 'httpRead2()' - Read data from a HTTP connection. * * @since CUPS 1.2/macOS 10.5@ */ ssize_t /* O - Number of bytes read */ httpRead2(http_t *http, /* I - HTTP connection */ char *buffer, /* I - Buffer for data */ size_t length) /* I - Maximum number of bytes */ { ssize_t bytes; /* Bytes read */ #ifdef HAVE_LIBZ DEBUG_printf(("httpRead2(http=%p, buffer=%p, length=" CUPS_LLFMT ") coding=%d data_encoding=%d data_remaining=" CUPS_LLFMT, (void *)http, (void *)buffer, CUPS_LLCAST length, http->coding, http->data_encoding, CUPS_LLCAST http->data_remaining)); #else DEBUG_printf(("httpRead2(http=%p, buffer=%p, length=" CUPS_LLFMT ") data_encoding=%d data_remaining=" CUPS_LLFMT, (void *)http, (void *)buffer, CUPS_LLCAST length, http->data_encoding, CUPS_LLCAST http->data_remaining)); #endif /* HAVE_LIBZ */ if (http == NULL || buffer == NULL) return (-1); http->activity = time(NULL); http->error = 0; if (length <= 0) return (0); #ifdef HAVE_LIBZ if (http->coding >= _HTTP_CODING_GUNZIP) { do { if (http->stream.avail_in > 0) { int zerr; /* Decompressor error */ DEBUG_printf(("2httpRead2: avail_in=%d, avail_out=%d", (int)http->stream.avail_in, (int)length)); http->stream.next_out = (Bytef *)buffer; http->stream.avail_out = (uInt)length; if ((zerr = inflate(&(http->stream), Z_SYNC_FLUSH)) < Z_OK) { DEBUG_printf(("2httpRead2: zerr=%d", zerr)); #ifdef DEBUG http_debug_hex("2httpRead2", (char *)http->sbuffer, (int)http->stream.avail_in); #endif /* DEBUG */ http->error = EIO; return (-1); } bytes = (ssize_t)(length - http->stream.avail_out); DEBUG_printf(("2httpRead2: avail_in=%d, avail_out=%d, bytes=%d", http->stream.avail_in, http->stream.avail_out, (int)bytes)); } else bytes = 0; if (bytes == 0) { ssize_t buflen = HTTP_MAX_BUFFER - (ssize_t)http->stream.avail_in; /* Additional bytes for buffer */ if (buflen > 0) { if (http->stream.avail_in > 0 && http->stream.next_in > http->sbuffer) memmove(http->sbuffer, http->stream.next_in, http->stream.avail_in); http->stream.next_in = http->sbuffer; DEBUG_printf(("1httpRead2: Reading up to %d more bytes of data into " "decompression buffer.", (int)buflen)); if (http->data_remaining > 0) { if (buflen > http->data_remaining) buflen = (ssize_t)http->data_remaining; bytes = http_read_buffered(http, (char *)http->sbuffer + http->stream.avail_in, (size_t)buflen); } else if (http->data_encoding == HTTP_ENCODING_CHUNKED) bytes = http_read_chunk(http, (char *)http->sbuffer + http->stream.avail_in, (size_t)buflen); else bytes = 0; if (bytes < 0) return (bytes); else if (bytes == 0) break; DEBUG_printf(("1httpRead2: Adding " CUPS_LLFMT " bytes to " "decompression buffer.", CUPS_LLCAST bytes)); http->data_remaining -= bytes; http->stream.avail_in += (uInt)bytes; if (http->data_remaining <= 0 && http->data_encoding == HTTP_ENCODING_CHUNKED) { /* * Read the trailing blank line now... */ char len[32]; /* Length string */ httpGets(len, sizeof(len), http); } bytes = 0; } else return (0); } } while (bytes == 0); } else #endif /* HAVE_LIBZ */ if (http->data_remaining == 0 && http->data_encoding == HTTP_ENCODING_CHUNKED) { if ((bytes = http_read_chunk(http, buffer, length)) > 0) { http->data_remaining -= bytes; if (http->data_remaining <= 0) { /* * Read the trailing blank line now... */ char len[32]; /* Length string */ httpGets(len, sizeof(len), http); } } } else if (http->data_remaining <= 0) { /* * No more data to read... */ return (0); } else { DEBUG_printf(("1httpRead2: Reading up to %d bytes into buffer.", (int)length)); if (length > (size_t)http->data_remaining) length = (size_t)http->data_remaining; if ((bytes = http_read_buffered(http, buffer, length)) > 0) { http->data_remaining -= bytes; if (http->data_remaining <= 0 && http->data_encoding == HTTP_ENCODING_CHUNKED) { /* * Read the trailing blank line now... */ char len[32]; /* Length string */ httpGets(len, sizeof(len), http); } } } if ( #ifdef HAVE_LIBZ (http->coding == _HTTP_CODING_IDENTITY || (http->coding >= _HTTP_CODING_GUNZIP && http->stream.avail_in == 0)) && #endif /* HAVE_LIBZ */ ((http->data_remaining <= 0 && http->data_encoding == HTTP_ENCODING_LENGTH) || (http->data_encoding == HTTP_ENCODING_CHUNKED && bytes == 0))) { #ifdef HAVE_LIBZ if (http->coding >= _HTTP_CODING_GUNZIP) http_content_coding_finish(http); #endif /* HAVE_LIBZ */ if (http->state == HTTP_STATE_POST_RECV) http->state ++; else if (http->state == HTTP_STATE_GET_SEND || http->state == HTTP_STATE_POST_SEND) http->state = HTTP_STATE_WAITING; else http->state = HTTP_STATE_STATUS; DEBUG_printf(("1httpRead2: End of content, set state to %s.", httpStateString(http->state))); } return (bytes); } /* * 'httpReadRequest()' - Read a HTTP request from a connection. * * @since CUPS 1.7/macOS 10.9@ */ http_state_t /* O - New state of connection */ httpReadRequest(http_t *http, /* I - HTTP connection */ char *uri, /* I - URI buffer */ size_t urilen) /* I - Size of URI buffer */ { char line[4096], /* HTTP request line */ *req_method, /* HTTP request method */ *req_uri, /* HTTP request URI */ *req_version; /* HTTP request version number string */ /* * Range check input... */ DEBUG_printf(("httpReadRequest(http=%p, uri=%p, urilen=" CUPS_LLFMT ")", (void *)http, (void *)uri, CUPS_LLCAST urilen)); if (uri) *uri = '\0'; if (!http || !uri || urilen < 1) { DEBUG_puts("1httpReadRequest: Bad arguments, returning HTTP_STATE_ERROR."); return (HTTP_STATE_ERROR); } else if (http->state != HTTP_STATE_WAITING) { DEBUG_printf(("1httpReadRequest: Bad state %s, returning HTTP_STATE_ERROR.", httpStateString(http->state))); return (HTTP_STATE_ERROR); } /* * Reset state... */ httpClearFields(http); http->activity = time(NULL); http->data_encoding = HTTP_ENCODING_FIELDS; http->data_remaining = 0; http->keep_alive = HTTP_KEEPALIVE_OFF; http->status = HTTP_STATUS_OK; http->version = HTTP_VERSION_1_1; /* * Read a line from the socket... */ if (!httpGets(line, sizeof(line), http)) { DEBUG_puts("1httpReadRequest: Unable to read, returning HTTP_STATE_ERROR"); return (HTTP_STATE_ERROR); } if (!line[0]) { DEBUG_puts("1httpReadRequest: Blank line, returning HTTP_STATE_WAITING"); return (HTTP_STATE_WAITING); } DEBUG_printf(("1httpReadRequest: %s", line)); /* * Parse it... */ req_method = line; req_uri = line; while (*req_uri && !isspace(*req_uri & 255)) req_uri ++; if (!*req_uri) { DEBUG_puts("1httpReadRequest: No request URI."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No request URI."), 1); return (HTTP_STATE_ERROR); } *req_uri++ = '\0'; while (*req_uri && isspace(*req_uri & 255)) req_uri ++; req_version = req_uri; while (*req_version && !isspace(*req_version & 255)) req_version ++; if (!*req_version) { DEBUG_puts("1httpReadRequest: No request protocol version."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No request protocol version."), 1); return (HTTP_STATE_ERROR); } *req_version++ = '\0'; while (*req_version && isspace(*req_version & 255)) req_version ++; /* * Validate... */ if (!strcmp(req_method, "OPTIONS")) http->state = HTTP_STATE_OPTIONS; else if (!strcmp(req_method, "GET")) http->state = HTTP_STATE_GET; else if (!strcmp(req_method, "HEAD")) http->state = HTTP_STATE_HEAD; else if (!strcmp(req_method, "POST")) http->state = HTTP_STATE_POST; else if (!strcmp(req_method, "PUT")) http->state = HTTP_STATE_PUT; else if (!strcmp(req_method, "DELETE")) http->state = HTTP_STATE_DELETE; else if (!strcmp(req_method, "TRACE")) http->state = HTTP_STATE_TRACE; else if (!strcmp(req_method, "CONNECT")) http->state = HTTP_STATE_CONNECT; else { DEBUG_printf(("1httpReadRequest: Unknown method \"%s\".", req_method)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unknown request method."), 1); return (HTTP_STATE_UNKNOWN_METHOD); } DEBUG_printf(("1httpReadRequest: Set state to %s.", httpStateString(http->state))); if (!strcmp(req_version, "HTTP/1.0")) { http->version = HTTP_VERSION_1_0; http->keep_alive = HTTP_KEEPALIVE_OFF; } else if (!strcmp(req_version, "HTTP/1.1")) { http->version = HTTP_VERSION_1_1; http->keep_alive = HTTP_KEEPALIVE_ON; } else { DEBUG_printf(("1httpReadRequest: Unknown version \"%s\".", req_version)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unknown request version."), 1); return (HTTP_STATE_UNKNOWN_VERSION); } DEBUG_printf(("1httpReadRequest: URI is \"%s\".", req_uri)); strlcpy(uri, req_uri, urilen); return (http->state); } /* * 'httpReconnect()' - Reconnect to a HTTP server. * * This function is deprecated. Please use the @link httpReconnect2@ function * instead. * * @deprecated@ @exclude all@ */ int /* O - 0 on success, non-zero on failure */ httpReconnect(http_t *http) /* I - HTTP connection */ { DEBUG_printf(("httpReconnect(http=%p)", (void *)http)); return (httpReconnect2(http, 30000, NULL)); } /* * 'httpReconnect2()' - Reconnect to a HTTP server with timeout and optional * cancel. */ int /* O - 0 on success, non-zero on failure */ httpReconnect2(http_t *http, /* I - HTTP connection */ int msec, /* I - Timeout in milliseconds */ int *cancel) /* I - Pointer to "cancel" variable */ { http_addrlist_t *addr; /* Connected address */ #ifdef DEBUG http_addrlist_t *current; /* Current address */ char temp[256]; /* Temporary address string */ #endif /* DEBUG */ DEBUG_printf(("httpReconnect2(http=%p, msec=%d, cancel=%p)", (void *)http, msec, (void *)cancel)); if (!http) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (-1); } #ifdef HAVE_SSL if (http->tls) { DEBUG_puts("2httpReconnect2: Shutting down SSL/TLS..."); _httpTLSStop(http); } #endif /* HAVE_SSL */ /* * Close any previously open socket... */ if (http->fd >= 0) { DEBUG_printf(("2httpReconnect2: Closing socket %d...", http->fd)); httpAddrClose(NULL, http->fd); http->fd = -1; } /* * Reset all state (except fields, which may be reused)... */ http->state = HTTP_STATE_WAITING; http->version = HTTP_VERSION_1_1; http->keep_alive = HTTP_KEEPALIVE_OFF; memset(&http->_hostaddr, 0, sizeof(http->_hostaddr)); http->data_encoding = HTTP_ENCODING_FIELDS; http->_data_remaining = 0; http->used = 0; http->data_remaining = 0; http->hostaddr = NULL; http->wused = 0; /* * Connect to the server... */ #ifdef DEBUG for (current = http->addrlist; current; current = current->next) DEBUG_printf(("2httpReconnect2: Address %s:%d", httpAddrString(&(current->addr), temp, sizeof(temp)), httpAddrPort(&(current->addr)))); #endif /* DEBUG */ if ((addr = httpAddrConnect2(http->addrlist, &(http->fd), msec, cancel)) == NULL) { /* * Unable to connect... */ #ifdef WIN32 http->error = WSAGetLastError(); #else http->error = errno; #endif /* WIN32 */ http->status = HTTP_STATUS_ERROR; DEBUG_printf(("1httpReconnect2: httpAddrConnect failed: %s", strerror(http->error))); return (-1); } DEBUG_printf(("2httpReconnect2: New socket=%d", http->fd)); if (http->timeout_value > 0) http_set_timeout(http->fd, http->timeout_value); http->hostaddr = &(addr->addr); http->error = 0; #ifdef HAVE_SSL if (http->encryption == HTTP_ENCRYPTION_ALWAYS) { /* * Always do encryption via SSL. */ if (_httpTLSStart(http) != 0) { httpAddrClose(NULL, http->fd); return (-1); } } else if (http->encryption == HTTP_ENCRYPTION_REQUIRED && !http->tls_upgrade) return (http_tls_upgrade(http)); #endif /* HAVE_SSL */ DEBUG_printf(("1httpReconnect2: Connected to %s:%d...", httpAddrString(http->hostaddr, temp, sizeof(temp)), httpAddrPort(http->hostaddr))); return (0); } /* * 'httpSetAuthString()' - Set the current authorization string. * * This function just stores a copy of the current authorization string in * the HTTP connection object. You must still call @link httpSetField@ to set * @code HTTP_FIELD_AUTHORIZATION@ prior to issuing a HTTP request using * @link httpGet@, @link httpHead@, @link httpOptions@, @link httpPost@, or * @link httpPut@. * * @since CUPS 1.3/macOS 10.5@ */ void httpSetAuthString(http_t *http, /* I - HTTP connection */ const char *scheme, /* I - Auth scheme (NULL to clear it) */ const char *data) /* I - Auth data (NULL for none) */ { /* * Range check input... */ if (!http) return; if (http->authstring && http->authstring != http->_authstring) free(http->authstring); http->authstring = http->_authstring; if (scheme) { /* * Set the current authorization string... */ size_t len = strlen(scheme) + (data ? strlen(data) + 1 : 0) + 1; char *temp; if (len > sizeof(http->_authstring)) { if ((temp = malloc(len)) == NULL) len = sizeof(http->_authstring); else http->authstring = temp; } if (data) snprintf(http->authstring, len, "%s %s", scheme, data); else strlcpy(http->authstring, scheme, len); } else { /* * Clear the current authorization string... */ http->_authstring[0] = '\0'; } } /* * 'httpSetCredentials()' - Set the credentials associated with an encrypted * connection. * * @since CUPS 1.5/macOS 10.7@ */ int /* O - Status of call (0 = success) */ httpSetCredentials(http_t *http, /* I - HTTP connection */ cups_array_t *credentials) /* I - Array of credentials */ { if (!http || cupsArrayCount(credentials) < 1) return (-1); #ifdef HAVE_SSL _httpFreeCredentials(http->tls_credentials); http->tls_credentials = _httpCreateCredentials(credentials); #endif /* HAVE_SSL */ return (http->tls_credentials ? 0 : -1); } /* * 'httpSetCookie()' - Set the cookie value(s). * * @since CUPS 1.1.19/macOS 10.3@ */ void httpSetCookie(http_t *http, /* I - Connection */ const char *cookie) /* I - Cookie string */ { if (!http) return; if (http->cookie) free(http->cookie); if (cookie) http->cookie = strdup(cookie); else http->cookie = NULL; } /* * 'httpSetDefaultField()' - Set the default value of an HTTP header. * * Currently only @code HTTP_FIELD_ACCEPT_ENCODING@, @code HTTP_FIELD_SERVER@, * and @code HTTP_FIELD_USER_AGENT@ can be set. * * @since CUPS 1.7/macOS 10.9@ */ void httpSetDefaultField(http_t *http, /* I - HTTP connection */ http_field_t field, /* I - Field index */ const char *value)/* I - Value */ { DEBUG_printf(("httpSetDefaultField(http=%p, field=%d(%s), value=\"%s\")", (void *)http, field, http_fields[field], value)); if (!http) return; switch (field) { case HTTP_FIELD_ACCEPT_ENCODING : if (http->default_accept_encoding) _cupsStrFree(http->default_accept_encoding); http->default_accept_encoding = value ? _cupsStrAlloc(value) : NULL; break; case HTTP_FIELD_SERVER : if (http->default_server) _cupsStrFree(http->default_server); http->default_server = value ? _cupsStrAlloc(value) : NULL; break; case HTTP_FIELD_USER_AGENT : if (http->default_user_agent) _cupsStrFree(http->default_user_agent); http->default_user_agent = value ? _cupsStrAlloc(value) : NULL; break; default : DEBUG_puts("1httpSetDefaultField: Ignored."); break; } } /* * 'httpSetExpect()' - Set the Expect: header in a request. * * Currently only @code HTTP_STATUS_CONTINUE@ is supported for the "expect" * argument. * * @since CUPS 1.2/macOS 10.5@ */ void httpSetExpect(http_t *http, /* I - HTTP connection */ http_status_t expect) /* I - HTTP status to expect (@code HTTP_STATUS_CONTINUE@) */ { DEBUG_printf(("httpSetExpect(http=%p, expect=%d)", (void *)http, expect)); if (http) http->expect = expect; } /* * 'httpSetField()' - Set the value of an HTTP header. */ void httpSetField(http_t *http, /* I - HTTP connection */ http_field_t field, /* I - Field index */ const char *value) /* I - Value */ { DEBUG_printf(("httpSetField(http=%p, field=%d(%s), value=\"%s\")", (void *)http, field, http_fields[field], value)); if (http == NULL || field < HTTP_FIELD_ACCEPT_LANGUAGE || field >= HTTP_FIELD_MAX || value == NULL) return; http_add_field(http, field, value, 0); } /* * 'httpSetKeepAlive()' - Set the current Keep-Alive state of a connection. * * @since CUPS 2.0/OS 10.10@ */ void httpSetKeepAlive( http_t *http, /* I - HTTP connection */ http_keepalive_t keep_alive) /* I - New Keep-Alive value */ { if (http) http->keep_alive = keep_alive; } /* * 'httpSetLength()' - Set the content-length and content-encoding. * * @since CUPS 1.2/macOS 10.5@ */ void httpSetLength(http_t *http, /* I - HTTP connection */ size_t length) /* I - Length (0 for chunked) */ { DEBUG_printf(("httpSetLength(http=%p, length=" CUPS_LLFMT ")", (void *)http, CUPS_LLCAST length)); if (!http) return; if (!length) { strlcpy(http->fields[HTTP_FIELD_TRANSFER_ENCODING], "chunked", HTTP_MAX_VALUE); http->fields[HTTP_FIELD_CONTENT_LENGTH][0] = '\0'; } else { http->fields[HTTP_FIELD_TRANSFER_ENCODING][0] = '\0'; snprintf(http->fields[HTTP_FIELD_CONTENT_LENGTH], HTTP_MAX_VALUE, CUPS_LLFMT, CUPS_LLCAST length); } } /* * 'httpSetTimeout()' - Set read/write timeouts and an optional callback. * * The optional timeout callback receives both the HTTP connection and a user * data pointer and must return 1 to continue or 0 to error (time) out. * * @since CUPS 1.5/macOS 10.7@ */ void httpSetTimeout( http_t *http, /* I - HTTP connection */ double timeout, /* I - Number of seconds for timeout, must be greater than 0 */ http_timeout_cb_t cb, /* I - Callback function or @code NULL@ */ void *user_data) /* I - User data pointer */ { if (!http || timeout <= 0.0) return; http->timeout_cb = cb; http->timeout_data = user_data; http->timeout_value = timeout; if (http->fd >= 0) http_set_timeout(http->fd, timeout); http_set_wait(http); } /* * 'httpShutdown()' - Shutdown one side of an HTTP connection. * * @since CUPS 2.0/OS 10.10@ */ void httpShutdown(http_t *http) /* I - HTTP connection */ { if (!http || http->fd < 0) return; #ifdef HAVE_SSL if (http->tls) _httpTLSStop(http); #endif /* HAVE_SSL */ #ifdef WIN32 shutdown(http->fd, SD_RECEIVE); /* Microsoft-ism... */ #else shutdown(http->fd, SHUT_RD); #endif /* WIN32 */ } /* * 'httpTrace()' - Send an TRACE request to the server. * * @exclude all@ */ int /* O - Status of call (0 = success) */ httpTrace(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI for trace */ { return (http_send(http, HTTP_STATE_TRACE, uri)); } /* * '_httpUpdate()' - Update the current HTTP status for incoming data. * * Note: Unlike httpUpdate(), this function does not flush pending write data * and only retrieves a single status line from the HTTP connection. */ int /* O - 1 to continue, 0 to stop */ _httpUpdate(http_t *http, /* I - HTTP connection */ http_status_t *status) /* O - Current HTTP status */ { char line[32768], /* Line from connection... */ *value; /* Pointer to value on line */ http_field_t field; /* Field index */ int major, minor; /* HTTP version numbers */ DEBUG_printf(("_httpUpdate(http=%p, status=%p), state=%s", (void *)http, (void *)status, httpStateString(http->state))); /* * Grab a single line from the connection... */ if (!httpGets(line, sizeof(line), http)) { *status = HTTP_STATUS_ERROR; return (0); } DEBUG_printf(("2_httpUpdate: Got \"%s\"", line)); if (line[0] == '\0') { /* * Blank line means the start of the data section (if any). Return * the result code, too... * * If we get status 100 (HTTP_STATUS_CONTINUE), then we *don't* change * states. Instead, we just return HTTP_STATUS_CONTINUE to the caller and * keep on tryin'... */ if (http->status == HTTP_STATUS_CONTINUE) { *status = http->status; return (0); } if (http->status < HTTP_STATUS_BAD_REQUEST) http->digest_tries = 0; #ifdef HAVE_SSL if (http->status == HTTP_STATUS_SWITCHING_PROTOCOLS && !http->tls) { if (_httpTLSStart(http) != 0) { httpAddrClose(NULL, http->fd); *status = http->status = HTTP_STATUS_ERROR; return (0); } *status = HTTP_STATUS_CONTINUE; return (0); } #endif /* HAVE_SSL */ if (http_set_length(http) < 0) { DEBUG_puts("1_httpUpdate: Bad Content-Length."); http->error = EINVAL; http->status = *status = HTTP_STATUS_ERROR; return (0); } switch (http->state) { case HTTP_STATE_GET : case HTTP_STATE_POST : case HTTP_STATE_POST_RECV : case HTTP_STATE_PUT : http->state ++; DEBUG_printf(("1_httpUpdate: Set state to %s.", httpStateString(http->state))); case HTTP_STATE_POST_SEND : case HTTP_STATE_HEAD : break; default : http->state = HTTP_STATE_WAITING; DEBUG_puts("1_httpUpdate: Reset state to HTTP_STATE_WAITING."); break; } #ifdef HAVE_LIBZ DEBUG_puts("1_httpUpdate: Calling http_content_coding_start."); http_content_coding_start(http, httpGetField(http, HTTP_FIELD_CONTENT_ENCODING)); #endif /* HAVE_LIBZ */ *status = http->status; return (0); } else if (!strncmp(line, "HTTP/", 5) && http->mode == _HTTP_MODE_CLIENT) { /* * Got the beginning of a response... */ int intstatus; /* Status value as an integer */ if (sscanf(line, "HTTP/%d.%d%d", &major, &minor, &intstatus) != 3) { *status = http->status = HTTP_STATUS_ERROR; return (0); } httpClearFields(http); http->version = (http_version_t)(major * 100 + minor); *status = http->status = (http_status_t)intstatus; } else if ((value = strchr(line, ':')) != NULL) { /* * Got a value... */ *value++ = '\0'; while (_cups_isspace(*value)) value ++; DEBUG_printf(("1_httpUpdate: Header %s: %s", line, value)); /* * Be tolerants of servers that send unknown attribute fields... */ if (!_cups_strcasecmp(line, "expect")) { /* * "Expect: 100-continue" or similar... */ http->expect = (http_status_t)atoi(value); } else if (!_cups_strcasecmp(line, "cookie")) { /* * "Cookie: name=value[; name=value ...]" - replaces previous cookies... */ httpSetCookie(http, value); } else if ((field = httpFieldValue(line)) != HTTP_FIELD_UNKNOWN) http_add_field(http, field, value, 1); #ifdef DEBUG else DEBUG_printf(("1_httpUpdate: unknown field %s seen!", line)); #endif /* DEBUG */ } else { DEBUG_printf(("1_httpUpdate: Bad response line \"%s\"!", line)); http->error = EINVAL; http->status = *status = HTTP_STATUS_ERROR; return (0); } return (1); } /* * 'httpUpdate()' - Update the current HTTP state for incoming data. */ http_status_t /* O - HTTP status */ httpUpdate(http_t *http) /* I - HTTP connection */ { http_status_t status; /* Request status */ DEBUG_printf(("httpUpdate(http=%p), state=%s", (void *)http, httpStateString(http->state))); /* * Flush pending data, if any... */ if (http->wused) { DEBUG_puts("2httpUpdate: flushing buffer..."); if (httpFlushWrite(http) < 0) return (HTTP_STATUS_ERROR); } /* * If we haven't issued any commands, then there is nothing to "update"... */ if (http->state == HTTP_STATE_WAITING) return (HTTP_STATUS_CONTINUE); /* * Grab all of the lines we can from the connection... */ while (_httpUpdate(http, &status)); /* * See if there was an error... */ if (http->error == EPIPE && http->status > HTTP_STATUS_CONTINUE) { DEBUG_printf(("1httpUpdate: Returning status %d...", http->status)); return (http->status); } if (http->error) { DEBUG_printf(("1httpUpdate: socket error %d - %s", http->error, strerror(http->error))); http->status = HTTP_STATUS_ERROR; return (HTTP_STATUS_ERROR); } /* * Return the current status... */ return (status); } /* * '_httpWait()' - Wait for data available on a connection (no flush). */ int /* O - 1 if data is available, 0 otherwise */ _httpWait(http_t *http, /* I - HTTP connection */ int msec, /* I - Milliseconds to wait */ int usessl) /* I - Use SSL context? */ { #ifdef HAVE_POLL struct pollfd pfd; /* Polled file descriptor */ #else fd_set input_set; /* select() input set */ struct timeval timeout; /* Timeout */ #endif /* HAVE_POLL */ int nfds; /* Result from select()/poll() */ DEBUG_printf(("4_httpWait(http=%p, msec=%d, usessl=%d)", (void *)http, msec, usessl)); if (http->fd < 0) { DEBUG_printf(("5_httpWait: Returning 0 since fd=%d", http->fd)); return (0); } /* * Check the SSL/TLS buffers for data first... */ #ifdef HAVE_SSL if (http->tls && _httpTLSPending(http)) { DEBUG_puts("5_httpWait: Return 1 since there is pending TLS data."); return (1); } #endif /* HAVE_SSL */ /* * Then try doing a select() or poll() to poll the socket... */ #ifdef HAVE_POLL pfd.fd = http->fd; pfd.events = POLLIN; do { nfds = poll(&pfd, 1, msec); } while (nfds < 0 && (errno == EINTR || errno == EAGAIN)); #else do { FD_ZERO(&input_set); FD_SET(http->fd, &input_set); DEBUG_printf(("6_httpWait: msec=%d, http->fd=%d", msec, http->fd)); if (msec >= 0) { timeout.tv_sec = msec / 1000; timeout.tv_usec = (msec % 1000) * 1000; nfds = select(http->fd + 1, &input_set, NULL, NULL, &timeout); } else nfds = select(http->fd + 1, &input_set, NULL, NULL, NULL); DEBUG_printf(("6_httpWait: select() returned %d...", nfds)); } # ifdef WIN32 while (nfds < 0 && (WSAGetLastError() == WSAEINTR || WSAGetLastError() == WSAEWOULDBLOCK)); # else while (nfds < 0 && (errno == EINTR || errno == EAGAIN)); # endif /* WIN32 */ #endif /* HAVE_POLL */ DEBUG_printf(("5_httpWait: returning with nfds=%d, errno=%d...", nfds, errno)); return (nfds > 0); } /* * 'httpWait()' - Wait for data available on a connection. * * @since CUPS 1.1.19/macOS 10.3@ */ int /* O - 1 if data is available, 0 otherwise */ httpWait(http_t *http, /* I - HTTP connection */ int msec) /* I - Milliseconds to wait */ { /* * First see if there is data in the buffer... */ DEBUG_printf(("2httpWait(http=%p, msec=%d)", (void *)http, msec)); if (http == NULL) return (0); if (http->used) { DEBUG_puts("3httpWait: Returning 1 since there is buffered data ready."); return (1); } #ifdef HAVE_LIBZ if (http->coding >= _HTTP_CODING_GUNZIP && http->stream.avail_in > 0) { DEBUG_puts("3httpWait: Returning 1 since there is buffered data ready."); return (1); } #endif /* HAVE_LIBZ */ /* * Flush pending data, if any... */ if (http->wused) { DEBUG_puts("3httpWait: Flushing write buffer."); if (httpFlushWrite(http) < 0) return (0); } /* * If not, check the SSL/TLS buffers and do a select() on the connection... */ return (_httpWait(http, msec, 1)); } /* * 'httpWrite()' - Write data to a HTTP connection. * * This function is deprecated. Use the httpWrite2() function which can * write more than 2GB of data. * * @deprecated@ @exclude all@ */ int /* O - Number of bytes written */ httpWrite(http_t *http, /* I - HTTP connection */ const char *buffer, /* I - Buffer for data */ int length) /* I - Number of bytes to write */ { return ((int)httpWrite2(http, buffer, (size_t)length)); } /* * 'httpWrite2()' - Write data to a HTTP connection. * * @since CUPS 1.2/macOS 10.5@ */ ssize_t /* O - Number of bytes written */ httpWrite2(http_t *http, /* I - HTTP connection */ const char *buffer, /* I - Buffer for data */ size_t length) /* I - Number of bytes to write */ { ssize_t bytes; /* Bytes written */ DEBUG_printf(("httpWrite2(http=%p, buffer=%p, length=" CUPS_LLFMT ")", (void *)http, (void *)buffer, CUPS_LLCAST length)); /* * Range check input... */ if (!http || !buffer) { DEBUG_puts("1httpWrite2: Returning -1 due to bad input."); return (-1); } /* * Mark activity on the connection... */ http->activity = time(NULL); /* * Buffer small writes for better performance... */ #ifdef HAVE_LIBZ if (http->coding == _HTTP_CODING_GZIP || http->coding == _HTTP_CODING_DEFLATE) { DEBUG_printf(("1httpWrite2: http->coding=%d", http->coding)); if (length == 0) { http_content_coding_finish(http); bytes = 0; } else { size_t slen; /* Bytes to write */ ssize_t sret; /* Bytes written */ http->stream.next_in = (Bytef *)buffer; http->stream.avail_in = (uInt)length; while (deflate(&(http->stream), Z_NO_FLUSH) == Z_OK) { DEBUG_printf(("1httpWrite2: avail_out=%d", http->stream.avail_out)); if (http->stream.avail_out > 0) continue; slen = _HTTP_MAX_SBUFFER - http->stream.avail_out; DEBUG_printf(("1httpWrite2: Writing intermediate chunk, len=%d", (int)slen)); if (slen > 0 && http->data_encoding == HTTP_ENCODING_CHUNKED) sret = http_write_chunk(http, (char *)http->sbuffer, slen); else if (slen > 0) sret = http_write(http, (char *)http->sbuffer, slen); else sret = 0; if (sret < 0) { DEBUG_puts("1httpWrite2: Unable to write, returning -1."); return (-1); } http->stream.next_out = (Bytef *)http->sbuffer; http->stream.avail_out = (uInt)_HTTP_MAX_SBUFFER; } bytes = (ssize_t)length; } } else #endif /* HAVE_LIBZ */ if (length > 0) { if (http->wused && (length + (size_t)http->wused) > sizeof(http->wbuffer)) { DEBUG_printf(("2httpWrite2: Flushing buffer (wused=%d, length=" CUPS_LLFMT ")", http->wused, CUPS_LLCAST length)); httpFlushWrite(http); } if ((length + (size_t)http->wused) <= sizeof(http->wbuffer) && length < sizeof(http->wbuffer)) { /* * Write to buffer... */ DEBUG_printf(("2httpWrite2: Copying " CUPS_LLFMT " bytes to wbuffer...", CUPS_LLCAST length)); memcpy(http->wbuffer + http->wused, buffer, length); http->wused += (int)length; bytes = (ssize_t)length; } else { /* * Otherwise write the data directly... */ DEBUG_printf(("2httpWrite2: Writing " CUPS_LLFMT " bytes to socket...", CUPS_LLCAST length)); if (http->data_encoding == HTTP_ENCODING_CHUNKED) bytes = (ssize_t)http_write_chunk(http, buffer, length); else bytes = (ssize_t)http_write(http, buffer, length); DEBUG_printf(("2httpWrite2: Wrote " CUPS_LLFMT " bytes...", CUPS_LLCAST bytes)); } if (http->data_encoding == HTTP_ENCODING_LENGTH) http->data_remaining -= bytes; } else bytes = 0; /* * Handle end-of-request processing... */ if ((http->data_encoding == HTTP_ENCODING_CHUNKED && length == 0) || (http->data_encoding == HTTP_ENCODING_LENGTH && http->data_remaining == 0)) { /* * Finished with the transfer; unless we are sending POST or PUT * data, go idle... */ #ifdef HAVE_LIBZ if (http->coding == _HTTP_CODING_GZIP || http->coding == _HTTP_CODING_DEFLATE) http_content_coding_finish(http); #endif /* HAVE_LIBZ */ if (http->wused) { if (httpFlushWrite(http) < 0) return (-1); } if (http->data_encoding == HTTP_ENCODING_CHUNKED) { /* * Send a 0-length chunk at the end of the request... */ http_write(http, "0\r\n\r\n", 5); /* * Reset the data state... */ http->data_encoding = HTTP_ENCODING_FIELDS; http->data_remaining = 0; } if (http->state == HTTP_STATE_POST_RECV) http->state ++; else if (http->state == HTTP_STATE_POST_SEND || http->state == HTTP_STATE_GET_SEND) http->state = HTTP_STATE_WAITING; else http->state = HTTP_STATE_STATUS; DEBUG_printf(("2httpWrite2: Changed state to %s.", httpStateString(http->state))); } DEBUG_printf(("1httpWrite2: Returning " CUPS_LLFMT ".", CUPS_LLCAST bytes)); return (bytes); } /* * 'httpWriteResponse()' - Write a HTTP response to a client connection. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - 0 on success, -1 on error */ httpWriteResponse(http_t *http, /* I - HTTP connection */ http_status_t status) /* I - Status code */ { http_encoding_t old_encoding; /* Old data_encoding value */ off_t old_remaining; /* Old data_remaining value */ /* * Range check input... */ DEBUG_printf(("httpWriteResponse(http=%p, status=%d)", (void *)http, status)); if (!http || status < HTTP_STATUS_CONTINUE) { DEBUG_puts("1httpWriteResponse: Bad input."); return (-1); } /* * Set the various standard fields if they aren't already... */ if (!http->fields[HTTP_FIELD_DATE][0]) httpSetField(http, HTTP_FIELD_DATE, httpGetDateString(time(NULL))); if (status >= HTTP_STATUS_BAD_REQUEST && http->keep_alive) { http->keep_alive = HTTP_KEEPALIVE_OFF; httpSetField(http, HTTP_FIELD_KEEP_ALIVE, ""); } if (http->version == HTTP_VERSION_1_1) { if (!http->fields[HTTP_FIELD_CONNECTION][0]) { if (http->keep_alive) httpSetField(http, HTTP_FIELD_CONNECTION, "Keep-Alive"); else httpSetField(http, HTTP_FIELD_CONNECTION, "close"); } if (http->keep_alive && !http->fields[HTTP_FIELD_KEEP_ALIVE][0]) httpSetField(http, HTTP_FIELD_KEEP_ALIVE, "timeout=10"); } #ifdef HAVE_SSL if (status == HTTP_STATUS_UPGRADE_REQUIRED || status == HTTP_STATUS_SWITCHING_PROTOCOLS) { if (!http->fields[HTTP_FIELD_CONNECTION][0]) httpSetField(http, HTTP_FIELD_CONNECTION, "Upgrade"); if (!http->fields[HTTP_FIELD_UPGRADE][0]) httpSetField(http, HTTP_FIELD_UPGRADE, "TLS/1.2,TLS/1.1,TLS/1.0"); if (!http->fields[HTTP_FIELD_CONTENT_LENGTH][0]) httpSetField(http, HTTP_FIELD_CONTENT_LENGTH, "0"); } #endif /* HAVE_SSL */ if (!http->server) httpSetField(http, HTTP_FIELD_SERVER, http->default_server ? http->default_server : CUPS_MINIMAL); /* * Set the Accept-Encoding field if it isn't already... */ if (!http->accept_encoding) httpSetField(http, HTTP_FIELD_ACCEPT_ENCODING, http->default_accept_encoding ? http->default_accept_encoding : #ifdef HAVE_LIBZ "gzip, deflate, identity"); #else "identity"); #endif /* HAVE_LIBZ */ /* * Send the response header... */ old_encoding = http->data_encoding; old_remaining = http->data_remaining; http->data_encoding = HTTP_ENCODING_FIELDS; if (httpPrintf(http, "HTTP/%d.%d %d %s\r\n", http->version / 100, http->version % 100, (int)status, httpStatus(status)) < 0) { http->status = HTTP_STATUS_ERROR; return (-1); } if (status != HTTP_STATUS_CONTINUE) { /* * 100 Continue doesn't have the rest of the response headers... */ int i; /* Looping var */ const char *value; /* Field value */ for (i = 0; i < HTTP_FIELD_MAX; i ++) { if ((value = httpGetField(http, i)) != NULL && *value) { if (httpPrintf(http, "%s: %s\r\n", http_fields[i], value) < 1) { http->status = HTTP_STATUS_ERROR; return (-1); } } } if (http->cookie) { if (strchr(http->cookie, ';')) { if (httpPrintf(http, "Set-Cookie: %s\r\n", http->cookie) < 1) { http->status = HTTP_STATUS_ERROR; return (-1); } } else if (httpPrintf(http, "Set-Cookie: %s; path=/; httponly;%s\r\n", http->cookie, http->tls ? " secure;" : "") < 1) { http->status = HTTP_STATUS_ERROR; return (-1); } } /* * "Click-jacking" defense (STR #4492)... */ if (httpPrintf(http, "X-Frame-Options: DENY\r\n" "Content-Security-Policy: frame-ancestors 'none'\r\n") < 1) { http->status = HTTP_STATUS_ERROR; return (-1); } } if (httpWrite2(http, "\r\n", 2) < 2) { http->status = HTTP_STATUS_ERROR; return (-1); } if (httpFlushWrite(http) < 0) { http->status = HTTP_STATUS_ERROR; return (-1); } if (status == HTTP_STATUS_CONTINUE || status == HTTP_STATUS_SWITCHING_PROTOCOLS) { /* * Restore the old data_encoding and data_length values... */ http->data_encoding = old_encoding; http->data_remaining = old_remaining; if (old_remaining <= INT_MAX) http->_data_remaining = (int)old_remaining; else http->_data_remaining = INT_MAX; } else if (http->state == HTTP_STATE_OPTIONS || http->state == HTTP_STATE_HEAD || http->state == HTTP_STATE_PUT || http->state == HTTP_STATE_TRACE || http->state == HTTP_STATE_CONNECT || http->state == HTTP_STATE_STATUS) { DEBUG_printf(("1httpWriteResponse: Resetting state to HTTP_STATE_WAITING, " "was %s.", httpStateString(http->state))); http->state = HTTP_STATE_WAITING; } else { /* * Force data_encoding and data_length to be set according to the response * headers... */ http_set_length(http); if (http->data_encoding == HTTP_ENCODING_LENGTH && http->data_remaining == 0) { DEBUG_printf(("1httpWriteResponse: Resetting state to HTTP_STATE_WAITING, " "was %s.", httpStateString(http->state))); http->state = HTTP_STATE_WAITING; return (0); } if (http->state == HTTP_STATE_POST_RECV || http->state == HTTP_STATE_GET) http->state ++; #ifdef HAVE_LIBZ /* * Then start any content encoding... */ DEBUG_puts("1httpWriteResponse: Calling http_content_coding_start."); http_content_coding_start(http, httpGetField(http, HTTP_FIELD_CONTENT_ENCODING)); #endif /* HAVE_LIBZ */ } return (0); } /* * 'http_add_field()' - Add a value for a HTTP field, appending if needed. */ static void http_add_field(http_t *http, /* I - HTTP connection */ http_field_t field, /* I - HTTP field */ const char *value, /* I - Value string */ int append) /* I - Append value? */ { char newvalue[1024]; /* New value string */ const char *oldvalue; /* Old field value */ /* * Optionally append the new value to the existing one... */ if (append && field != HTTP_FIELD_ACCEPT_ENCODING && field != HTTP_FIELD_ACCEPT_LANGUAGE && field != HTTP_FIELD_ACCEPT_RANGES && field != HTTP_FIELD_ALLOW && field != HTTP_FIELD_LINK && field != HTTP_FIELD_TRANSFER_ENCODING && field != HTTP_FIELD_UPGRADE && field != HTTP_FIELD_WWW_AUTHENTICATE) append = 0; if (field == HTTP_FIELD_HOST) { /* * Special-case for Host: as we don't want a trailing "." on the hostname and * need to bracket IPv6 numeric addresses. */ char *ptr = strchr(value, ':'); if (value[0] != '[' && ptr && strchr(ptr + 1, ':')) { /* * Bracket IPv6 numeric addresses... */ snprintf(newvalue, sizeof(newvalue), "[%s]", value); value = newvalue; } else if (*value && value[strlen(value) - 1] == '.') { /* * Strip the trailing dot on the hostname... */ strlcpy(newvalue, value, sizeof(newvalue)); newvalue[strlen(newvalue) - 1] = '\0'; value = newvalue; } } else if (append && *value && (oldvalue = httpGetField(http, field)) != NULL && *oldvalue) { snprintf(newvalue, sizeof(newvalue), "%s, %s", oldvalue, value); value = newvalue; } /* * Save the new value... */ switch (field) { case HTTP_FIELD_ACCEPT_ENCODING : if (http->accept_encoding) _cupsStrFree(http->accept_encoding); http->accept_encoding = _cupsStrAlloc(value); break; case HTTP_FIELD_ALLOW : if (http->allow) _cupsStrFree(http->allow); http->allow = _cupsStrAlloc(value); break; case HTTP_FIELD_SERVER : if (http->server) _cupsStrFree(http->server); http->server = _cupsStrAlloc(value); break; default : strlcpy(http->fields[field], value, HTTP_MAX_VALUE); break; } if (field == HTTP_FIELD_AUTHORIZATION) { /* * Special case for Authorization: as its contents can be * longer than HTTP_MAX_VALUE */ if (http->field_authorization) free(http->field_authorization); http->field_authorization = strdup(value); } #ifdef HAVE_LIBZ else if (field == HTTP_FIELD_CONTENT_ENCODING && http->data_encoding != HTTP_ENCODING_FIELDS) { DEBUG_puts("1http_add_field: Calling http_content_coding_start."); http_content_coding_start(http, value); } #endif /* HAVE_LIBZ */ } #ifdef HAVE_LIBZ /* * 'http_content_coding_finish()' - Finish doing any content encoding. */ static void http_content_coding_finish( http_t *http) /* I - HTTP connection */ { int zerr; /* Compression status */ Byte dummy[1]; /* Dummy read buffer */ size_t bytes; /* Number of bytes to write */ DEBUG_printf(("http_content_coding_finish(http=%p)", (void *)http)); DEBUG_printf(("1http_content_coding_finishing: http->coding=%d", http->coding)); switch (http->coding) { case _HTTP_CODING_DEFLATE : case _HTTP_CODING_GZIP : http->stream.next_in = dummy; http->stream.avail_in = 0; do { zerr = deflate(&(http->stream), Z_FINISH); bytes = _HTTP_MAX_SBUFFER - http->stream.avail_out; if (bytes > 0) { DEBUG_printf(("1http_content_coding_finish: Writing trailing chunk, len=%d", (int)bytes)); if (http->data_encoding == HTTP_ENCODING_CHUNKED) http_write_chunk(http, (char *)http->sbuffer, bytes); else http_write(http, (char *)http->sbuffer, bytes); } http->stream.next_out = (Bytef *)http->sbuffer; http->stream.avail_out = (uInt)_HTTP_MAX_SBUFFER; } while (zerr == Z_OK); deflateEnd(&(http->stream)); free(http->sbuffer); http->sbuffer = NULL; if (http->wused) httpFlushWrite(http); break; case _HTTP_CODING_INFLATE : case _HTTP_CODING_GUNZIP : inflateEnd(&(http->stream)); free(http->sbuffer); http->sbuffer = NULL; break; default : break; } http->coding = _HTTP_CODING_IDENTITY; } /* * 'http_content_coding_start()' - Start doing content encoding. */ static void http_content_coding_start( http_t *http, /* I - HTTP connection */ const char *value) /* I - Value of Content-Encoding */ { int zerr; /* Error/status */ _http_coding_t coding; /* Content coding value */ DEBUG_printf(("http_content_coding_start(http=%p, value=\"%s\")", (void *)http, value)); if (http->coding != _HTTP_CODING_IDENTITY) { DEBUG_printf(("1http_content_coding_start: http->coding already %d.", http->coding)); return; } else if (!strcmp(value, "x-gzip") || !strcmp(value, "gzip")) { if (http->state == HTTP_STATE_GET_SEND || http->state == HTTP_STATE_POST_SEND) coding = http->mode == _HTTP_MODE_SERVER ? _HTTP_CODING_GZIP : _HTTP_CODING_GUNZIP; else if (http->state == HTTP_STATE_POST_RECV || http->state == HTTP_STATE_PUT_RECV) coding = http->mode == _HTTP_MODE_CLIENT ? _HTTP_CODING_GZIP : _HTTP_CODING_GUNZIP; else { DEBUG_puts("1http_content_coding_start: Not doing content coding."); return; } } else if (!strcmp(value, "x-deflate") || !strcmp(value, "deflate")) { if (http->state == HTTP_STATE_GET_SEND || http->state == HTTP_STATE_POST_SEND) coding = http->mode == _HTTP_MODE_SERVER ? _HTTP_CODING_DEFLATE : _HTTP_CODING_INFLATE; else if (http->state == HTTP_STATE_POST_RECV || http->state == HTTP_STATE_PUT_RECV) coding = http->mode == _HTTP_MODE_CLIENT ? _HTTP_CODING_DEFLATE : _HTTP_CODING_INFLATE; else { DEBUG_puts("1http_content_coding_start: Not doing content coding."); return; } } else { DEBUG_puts("1http_content_coding_start: Not doing content coding."); return; } memset(&(http->stream), 0, sizeof(http->stream)); switch (coding) { case _HTTP_CODING_DEFLATE : case _HTTP_CODING_GZIP : if (http->wused) httpFlushWrite(http); if ((http->sbuffer = malloc(_HTTP_MAX_SBUFFER)) == NULL) { http->status = HTTP_STATUS_ERROR; http->error = errno; return; } /* * Window size for compression is 11 bits - optimal based on PWG Raster * sample files on pwg.org. -11 is raw deflate, 27 is gzip, per ZLIB * documentation. */ if ((zerr = deflateInit2(&(http->stream), Z_DEFAULT_COMPRESSION, Z_DEFLATED, coding == _HTTP_CODING_DEFLATE ? -11 : 27, 7, Z_DEFAULT_STRATEGY)) < Z_OK) { http->status = HTTP_STATUS_ERROR; http->error = zerr == Z_MEM_ERROR ? ENOMEM : EINVAL; return; } http->stream.next_out = (Bytef *)http->sbuffer; http->stream.avail_out = (uInt)_HTTP_MAX_SBUFFER; break; case _HTTP_CODING_INFLATE : case _HTTP_CODING_GUNZIP : if ((http->sbuffer = malloc(_HTTP_MAX_SBUFFER)) == NULL) { http->status = HTTP_STATUS_ERROR; http->error = errno; return; } /* * Window size for decompression is up to 15 bits (maximum supported). * -15 is raw inflate, 31 is gunzip, per ZLIB documentation. */ if ((zerr = inflateInit2(&(http->stream), coding == _HTTP_CODING_INFLATE ? -15 : 31)) < Z_OK) { free(http->sbuffer); http->sbuffer = NULL; http->status = HTTP_STATUS_ERROR; http->error = zerr == Z_MEM_ERROR ? ENOMEM : EINVAL; return; } http->stream.avail_in = 0; http->stream.next_in = http->sbuffer; break; default : break; } http->coding = coding; DEBUG_printf(("1http_content_coding_start: http->coding now %d.", http->coding)); } #endif /* HAVE_LIBZ */ /* * 'http_create()' - Create an unconnected HTTP connection. */ static http_t * /* O - HTTP connection */ http_create( const char *host, /* I - Hostname */ int port, /* I - Port number */ http_addrlist_t *addrlist, /* I - Address list or @code NULL@ */ int family, /* I - Address family or AF_UNSPEC */ http_encryption_t encryption, /* I - Encryption to use */ int blocking, /* I - 1 for blocking mode */ _http_mode_t mode) /* I - _HTTP_MODE_CLIENT or _SERVER */ { http_t *http; /* New HTTP connection */ char service[255]; /* Service name */ http_addrlist_t *myaddrlist = NULL; /* My address list */ DEBUG_printf(("4http_create(host=\"%s\", port=%d, addrlist=%p, family=%d, encryption=%d, blocking=%d, mode=%d)", host, port, (void *)addrlist, family, encryption, blocking, mode)); if (!host && mode == _HTTP_MODE_CLIENT) return (NULL); httpInitialize(); /* * Lookup the host... */ if (addrlist) { myaddrlist = httpAddrCopyList(addrlist); } else { snprintf(service, sizeof(service), "%d", port); myaddrlist = httpAddrGetList(host, family, service); } if (!myaddrlist) return (NULL); /* * Allocate memory for the structure... */ if ((http = calloc(sizeof(http_t), 1)) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); httpAddrFreeList(addrlist); return (NULL); } /* * Initialize the HTTP data... */ http->mode = mode; http->activity = time(NULL); http->addrlist = myaddrlist; http->blocking = blocking; http->fd = -1; #ifdef HAVE_GSSAPI http->gssctx = GSS_C_NO_CONTEXT; http->gssname = GSS_C_NO_NAME; #endif /* HAVE_GSSAPI */ http->status = HTTP_STATUS_CONTINUE; http->version = HTTP_VERSION_1_1; if (host) strlcpy(http->hostname, host, sizeof(http->hostname)); if (port == 443) /* Always use encryption for https */ http->encryption = HTTP_ENCRYPTION_ALWAYS; else http->encryption = encryption; http_set_wait(http); /* * Return the new structure... */ return (http); } #ifdef DEBUG /* * 'http_debug_hex()' - Do a hex dump of a buffer. */ static void http_debug_hex(const char *prefix, /* I - Prefix for line */ const char *buffer, /* I - Buffer to dump */ int bytes) /* I - Bytes to dump */ { int i, j, /* Looping vars */ ch; /* Current character */ char line[255], /* Line buffer */ *start, /* Start of line after prefix */ *ptr; /* Pointer into line */ if (_cups_debug_fd < 0 || _cups_debug_level < 6) return; DEBUG_printf(("6%s: %d bytes:", prefix, bytes)); snprintf(line, sizeof(line), "6%s: ", prefix); start = line + strlen(line); for (i = 0; i < bytes; i += 16) { for (j = 0, ptr = start; j < 16 && (i + j) < bytes; j ++, ptr += 2) snprintf(ptr, 3, "%02X", buffer[i + j] & 255); while (j < 16) { memcpy(ptr, " ", 3); ptr += 2; j ++; } memcpy(ptr, " ", 3); ptr += 2; for (j = 0; j < 16 && (i + j) < bytes; j ++) { ch = buffer[i + j] & 255; if (ch < ' ' || ch >= 127) ch = '.'; *ptr++ = (char)ch; } *ptr = '\0'; DEBUG_puts(line); } } #endif /* DEBUG */ /* * 'http_read()' - Read a buffer from a HTTP connection. * * This function does the low-level read from the socket, retrying and timing * out as needed. */ static ssize_t /* O - Number of bytes read or -1 on error */ http_read(http_t *http, /* I - HTTP connection */ char *buffer, /* I - Buffer */ size_t length) /* I - Maximum bytes to read */ { ssize_t bytes; /* Bytes read */ DEBUG_printf(("http_read(http=%p, buffer=%p, length=" CUPS_LLFMT ")", (void *)http, (void *)buffer, CUPS_LLCAST length)); if (!http->blocking || http->timeout_value > 0.0) { while (!httpWait(http, http->wait_value)) { if (http->timeout_cb && (*http->timeout_cb)(http, http->timeout_data)) continue; DEBUG_puts("2http_read: Timeout."); return (0); } } DEBUG_printf(("2http_read: Reading %d bytes into buffer.", (int)length)); do { #ifdef HAVE_SSL if (http->tls) bytes = _httpTLSRead(http, buffer, (int)length); else #endif /* HAVE_SSL */ bytes = recv(http->fd, buffer, length, 0); if (bytes < 0) { #ifdef WIN32 if (WSAGetLastError() != WSAEINTR) { http->error = WSAGetLastError(); return (-1); } else if (WSAGetLastError() == WSAEWOULDBLOCK) { if (!http->timeout_cb || !(*http->timeout_cb)(http, http->timeout_data)) { http->error = WSAEWOULDBLOCK; return (-1); } } #else DEBUG_printf(("2http_read: %s", strerror(errno))); if (errno == EWOULDBLOCK || errno == EAGAIN) { if (http->timeout_cb && !(*http->timeout_cb)(http, http->timeout_data)) { http->error = errno; return (-1); } else if (!http->timeout_cb && errno != EAGAIN) { http->error = errno; return (-1); } } else if (errno != EINTR) { http->error = errno; return (-1); } #endif /* WIN32 */ } } while (bytes < 0); DEBUG_printf(("2http_read: Read " CUPS_LLFMT " bytes into buffer.", CUPS_LLCAST bytes)); #ifdef DEBUG if (bytes > 0) http_debug_hex("http_read", buffer, (int)bytes); #endif /* DEBUG */ if (bytes < 0) { #ifdef WIN32 if (WSAGetLastError() == WSAEINTR) bytes = 0; else http->error = WSAGetLastError(); #else if (errno == EINTR || (errno == EAGAIN && !http->timeout_cb)) bytes = 0; else http->error = errno; #endif /* WIN32 */ } else if (bytes == 0) { http->error = EPIPE; return (0); } return (bytes); } /* * 'http_read_buffered()' - Do a buffered read from a HTTP connection. * * This function reads data from the HTTP buffer or from the socket, as needed. */ static ssize_t /* O - Number of bytes read or -1 on error */ http_read_buffered(http_t *http, /* I - HTTP connection */ char *buffer, /* I - Buffer */ size_t length) /* I - Maximum bytes to read */ { ssize_t bytes; /* Bytes read */ DEBUG_printf(("http_read_buffered(http=%p, buffer=%p, length=" CUPS_LLFMT ") used=%d", (void *)http, (void *)buffer, CUPS_LLCAST length, http->used)); if (http->used > 0) { if (length > (size_t)http->used) bytes = (ssize_t)http->used; else bytes = (ssize_t)length; DEBUG_printf(("2http_read: Grabbing %d bytes from input buffer.", (int)bytes)); memcpy(buffer, http->buffer, (size_t)bytes); http->used -= (int)bytes; if (http->used > 0) memmove(http->buffer, http->buffer + bytes, (size_t)http->used); } else bytes = http_read(http, buffer, length); return (bytes); } /* * 'http_read_chunk()' - Read a chunk from a HTTP connection. * * This function reads and validates the chunk length, then does a buffered read * returning the number of bytes placed in the buffer. */ static ssize_t /* O - Number of bytes read or -1 on error */ http_read_chunk(http_t *http, /* I - HTTP connection */ char *buffer, /* I - Buffer */ size_t length) /* I - Maximum bytes to read */ { DEBUG_printf(("http_read_chunk(http=%p, buffer=%p, length=" CUPS_LLFMT ")", (void *)http, (void *)buffer, CUPS_LLCAST length)); if (http->data_remaining <= 0) { char len[32]; /* Length string */ if (!httpGets(len, sizeof(len), http)) { DEBUG_puts("1http_read_chunk: Could not get chunk length."); return (0); } if (!len[0]) { DEBUG_puts("1http_read_chunk: Blank chunk length, trying again..."); if (!httpGets(len, sizeof(len), http)) { DEBUG_puts("1http_read_chunk: Could not get chunk length."); return (0); } } http->data_remaining = strtoll(len, NULL, 16); if (http->data_remaining < 0) { DEBUG_printf(("1http_read_chunk: Negative chunk length \"%s\" (" CUPS_LLFMT ")", len, CUPS_LLCAST http->data_remaining)); return (0); } DEBUG_printf(("2http_read_chunk: Got chunk length \"%s\" (" CUPS_LLFMT ")", len, CUPS_LLCAST http->data_remaining)); if (http->data_remaining == 0) { /* * 0-length chunk, grab trailing blank line... */ httpGets(len, sizeof(len), http); } } DEBUG_printf(("2http_read_chunk: data_remaining=" CUPS_LLFMT, CUPS_LLCAST http->data_remaining)); if (http->data_remaining <= 0) return (0); else if (length > (size_t)http->data_remaining) length = (size_t)http->data_remaining; return (http_read_buffered(http, buffer, length)); } /* * 'http_send()' - Send a request with all fields and the trailing blank line. */ static int /* O - 0 on success, non-zero on error */ http_send(http_t *http, /* I - HTTP connection */ http_state_t request, /* I - Request code */ const char *uri) /* I - URI */ { int i; /* Looping var */ char buf[1024]; /* Encoded URI buffer */ const char *value; /* Field value */ static const char * const codes[] = /* Request code strings */ { NULL, "OPTIONS", "GET", NULL, "HEAD", "POST", NULL, NULL, "PUT", NULL, "DELETE", "TRACE", "CLOSE", NULL, NULL }; DEBUG_printf(("4http_send(http=%p, request=HTTP_%s, uri=\"%s\")", (void *)http, codes[request], uri)); if (http == NULL || uri == NULL) return (-1); /* * Set the User-Agent field if it isn't already... */ if (!http->fields[HTTP_FIELD_USER_AGENT][0]) { if (http->default_user_agent) httpSetField(http, HTTP_FIELD_USER_AGENT, http->default_user_agent); else httpSetField(http, HTTP_FIELD_USER_AGENT, cupsUserAgent()); } /* * Set the Accept-Encoding field if it isn't already... */ if (!http->accept_encoding && http->default_accept_encoding) httpSetField(http, HTTP_FIELD_ACCEPT_ENCODING, http->default_accept_encoding); /* * Encode the URI as needed... */ _httpEncodeURI(buf, uri, sizeof(buf)); /* * See if we had an error the last time around; if so, reconnect... */ if (http->fd < 0 || http->status == HTTP_STATUS_ERROR || http->status >= HTTP_STATUS_BAD_REQUEST) { DEBUG_printf(("5http_send: Reconnecting, fd=%d, status=%d, tls_upgrade=%d", http->fd, http->status, http->tls_upgrade)); if (httpReconnect2(http, 30000, NULL)) return (-1); } /* * Flush any written data that is pending... */ if (http->wused) { if (httpFlushWrite(http) < 0) if (httpReconnect2(http, 30000, NULL)) return (-1); } /* * Send the request header... */ http->state = request; http->data_encoding = HTTP_ENCODING_FIELDS; if (request == HTTP_STATE_POST || request == HTTP_STATE_PUT) http->state ++; http->status = HTTP_STATUS_CONTINUE; #ifdef HAVE_SSL if (http->encryption == HTTP_ENCRYPTION_REQUIRED && !http->tls) { httpSetField(http, HTTP_FIELD_CONNECTION, "Upgrade"); httpSetField(http, HTTP_FIELD_UPGRADE, "TLS/1.2,TLS/1.1,TLS/1.0"); } #endif /* HAVE_SSL */ if (httpPrintf(http, "%s %s HTTP/1.1\r\n", codes[request], buf) < 1) { http->status = HTTP_STATUS_ERROR; return (-1); } for (i = 0; i < HTTP_FIELD_MAX; i ++) if ((value = httpGetField(http, i)) != NULL && *value) { DEBUG_printf(("5http_send: %s: %s", http_fields[i], value)); if (i == HTTP_FIELD_HOST) { if (httpPrintf(http, "Host: %s:%d\r\n", value, httpAddrPort(http->hostaddr)) < 1) { http->status = HTTP_STATUS_ERROR; return (-1); } } else if (httpPrintf(http, "%s: %s\r\n", http_fields[i], value) < 1) { http->status = HTTP_STATUS_ERROR; return (-1); } } if (http->cookie) if (httpPrintf(http, "Cookie: $Version=0; %s\r\n", http->cookie) < 1) { http->status = HTTP_STATUS_ERROR; return (-1); } DEBUG_printf(("5http_send: expect=%d, mode=%d, state=%d", http->expect, http->mode, http->state)); if (http->expect == HTTP_STATUS_CONTINUE && http->mode == _HTTP_MODE_CLIENT && (http->state == HTTP_STATE_POST_RECV || http->state == HTTP_STATE_PUT_RECV)) if (httpPrintf(http, "Expect: 100-continue\r\n") < 1) { http->status = HTTP_STATUS_ERROR; return (-1); } if (httpPrintf(http, "\r\n") < 1) { http->status = HTTP_STATUS_ERROR; return (-1); } if (httpFlushWrite(http) < 0) return (-1); http_set_length(http); httpClearFields(http); /* * The Kerberos and AuthRef authentication strings can only be used once... */ if (http->field_authorization && http->authstring && (!strncmp(http->authstring, "Negotiate", 9) || !strncmp(http->authstring, "AuthRef", 7))) { http->_authstring[0] = '\0'; if (http->authstring != http->_authstring) free(http->authstring); http->authstring = http->_authstring; } return (0); } /* * 'http_set_length()' - Set the data_encoding and data_remaining values. */ static off_t /* O - Remainder or -1 on error */ http_set_length(http_t *http) /* I - Connection */ { off_t remaining; /* Remainder */ DEBUG_printf(("http_set_length(http=%p) mode=%d state=%s", (void *)http, http->mode, httpStateString(http->state))); if ((remaining = httpGetLength2(http)) >= 0) { if (http->mode == _HTTP_MODE_SERVER && http->state != HTTP_STATE_GET_SEND && http->state != HTTP_STATE_PUT && http->state != HTTP_STATE_POST && http->state != HTTP_STATE_POST_SEND) { DEBUG_puts("1http_set_length: Not setting data_encoding/remaining."); return (remaining); } if (!_cups_strcasecmp(http->fields[HTTP_FIELD_TRANSFER_ENCODING], "chunked")) { DEBUG_puts("1http_set_length: Setting data_encoding to " "HTTP_ENCODING_CHUNKED."); http->data_encoding = HTTP_ENCODING_CHUNKED; } else { DEBUG_puts("1http_set_length: Setting data_encoding to " "HTTP_ENCODING_LENGTH."); http->data_encoding = HTTP_ENCODING_LENGTH; } DEBUG_printf(("1http_set_length: Setting data_remaining to " CUPS_LLFMT ".", CUPS_LLCAST remaining)); http->data_remaining = remaining; if (remaining <= INT_MAX) http->_data_remaining = (int)remaining; else http->_data_remaining = INT_MAX; } return (remaining); } /* * 'http_set_timeout()' - Set the socket timeout values. */ static void http_set_timeout(int fd, /* I - File descriptor */ double timeout) /* I - Timeout in seconds */ { #ifdef WIN32 DWORD tv = (DWORD)(timeout * 1000); /* Timeout in milliseconds */ setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, CUPS_SOCAST &tv, sizeof(tv)); setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, CUPS_SOCAST &tv, sizeof(tv)); #else struct timeval tv; /* Timeout in secs and usecs */ tv.tv_sec = (int)timeout; tv.tv_usec = (int)(1000000 * fmod(timeout, 1.0)); setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, CUPS_SOCAST &tv, sizeof(tv)); setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, CUPS_SOCAST &tv, sizeof(tv)); #endif /* WIN32 */ } /* * 'http_set_wait()' - Set the default wait value for reads. */ static void http_set_wait(http_t *http) /* I - HTTP connection */ { if (http->blocking) { http->wait_value = (int)(http->timeout_value * 1000); if (http->wait_value <= 0) http->wait_value = 60000; } else http->wait_value = 10000; } #ifdef HAVE_SSL /* * 'http_tls_upgrade()' - Force upgrade to TLS encryption. */ static int /* O - Status of connection */ http_tls_upgrade(http_t *http) /* I - HTTP connection */ { int ret; /* Return value */ http_t myhttp; /* Local copy of HTTP data */ DEBUG_printf(("7http_tls_upgrade(%p)", (void *)http)); /* * Flush the connection to make sure any previous "Upgrade" message * has been read. */ httpFlush(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... */ http->tls_upgrade = 1; http->field_authorization = NULL; /* Don't free the auth string */ httpClearFields(http); httpSetField(http, HTTP_FIELD_CONNECTION, "upgrade"); httpSetField(http, HTTP_FIELD_UPGRADE, "TLS/1.2,TLS/1.1,TLS/1.0"); if ((ret = httpOptions(http, "*")) == 0) { /* * Wait for the secure connection... */ while (httpUpdate(http) == HTTP_STATUS_CONTINUE); } /* * Restore the HTTP request data... */ memcpy(http->fields, myhttp.fields, sizeof(http->fields)); http->data_encoding = myhttp.data_encoding; http->data_remaining = myhttp.data_remaining; http->_data_remaining = myhttp._data_remaining; http->expect = myhttp.expect; http->field_authorization = myhttp.field_authorization; http->digest_tries = myhttp.digest_tries; http->tls_upgrade = 0; /* * See if we actually went secure... */ if (!http->tls) { /* * Server does not support HTTP upgrade... */ DEBUG_puts("8http_tls_upgrade: Server does not support HTTP upgrade!"); _cupsSetError(IPP_STATUS_ERROR_CUPS_PKI, _("Encryption is not supported."), 1); httpAddrClose(NULL, http->fd); http->fd = -1; return (-1); } else return (ret); } #endif /* HAVE_SSL */ /* * 'http_write()' - Write a buffer to a HTTP connection. */ static ssize_t /* O - Number of bytes written */ http_write(http_t *http, /* I - HTTP connection */ const char *buffer, /* I - Buffer for data */ size_t length) /* I - Number of bytes to write */ { ssize_t tbytes, /* Total bytes sent */ bytes; /* Bytes sent */ DEBUG_printf(("2http_write(http=%p, buffer=%p, length=" CUPS_LLFMT ")", (void *)http, (void *)buffer, CUPS_LLCAST length)); http->error = 0; tbytes = 0; while (length > 0) { DEBUG_printf(("3http_write: About to write %d bytes.", (int)length)); if (http->timeout_value > 0.0) { #ifdef HAVE_POLL struct pollfd pfd; /* Polled file descriptor */ #else fd_set output_set; /* Output ready for write? */ struct timeval timeout; /* Timeout value */ #endif /* HAVE_POLL */ int nfds; /* Result from select()/poll() */ do { #ifdef HAVE_POLL pfd.fd = http->fd; pfd.events = POLLOUT; while ((nfds = poll(&pfd, 1, http->wait_value)) < 0 && (errno == EINTR || errno == EAGAIN)) /* do nothing */; #else do { FD_ZERO(&output_set); FD_SET(http->fd, &output_set); timeout.tv_sec = http->wait_value / 1000; timeout.tv_usec = 1000 * (http->wait_value % 1000); nfds = select(http->fd + 1, NULL, &output_set, NULL, &timeout); } # ifdef WIN32 while (nfds < 0 && (WSAGetLastError() == WSAEINTR || WSAGetLastError() == WSAEWOULDBLOCK)); # else while (nfds < 0 && (errno == EINTR || errno == EAGAIN)); # endif /* WIN32 */ #endif /* HAVE_POLL */ if (nfds < 0) { http->error = errno; return (-1); } else if (nfds == 0 && (!http->timeout_cb || !(*http->timeout_cb)(http, http->timeout_data))) { #ifdef WIN32 http->error = WSAEWOULDBLOCK; #else http->error = EWOULDBLOCK; #endif /* WIN32 */ return (-1); } } while (nfds <= 0); } #ifdef HAVE_SSL if (http->tls) bytes = _httpTLSWrite(http, buffer, (int)length); else #endif /* HAVE_SSL */ bytes = send(http->fd, buffer, length, 0); DEBUG_printf(("3http_write: Write of " CUPS_LLFMT " bytes returned " CUPS_LLFMT ".", CUPS_LLCAST length, CUPS_LLCAST bytes)); if (bytes < 0) { #ifdef WIN32 if (WSAGetLastError() == WSAEINTR) continue; else if (WSAGetLastError() == WSAEWOULDBLOCK) { if (http->timeout_cb && (*http->timeout_cb)(http, http->timeout_data)) continue; http->error = WSAGetLastError(); } else if (WSAGetLastError() != http->error && WSAGetLastError() != WSAECONNRESET) { http->error = WSAGetLastError(); continue; } #else if (errno == EINTR) continue; else if (errno == EWOULDBLOCK || errno == EAGAIN) { if (http->timeout_cb && (*http->timeout_cb)(http, http->timeout_data)) continue; else if (!http->timeout_cb && errno == EAGAIN) continue; http->error = errno; } else if (errno != http->error && errno != ECONNRESET) { http->error = errno; continue; } #endif /* WIN32 */ DEBUG_printf(("3http_write: error writing data (%s).", strerror(http->error))); return (-1); } buffer += bytes; tbytes += bytes; length -= (size_t)bytes; } #ifdef DEBUG http_debug_hex("http_write", buffer - tbytes, (int)tbytes); #endif /* DEBUG */ DEBUG_printf(("3http_write: Returning " CUPS_LLFMT ".", CUPS_LLCAST tbytes)); return (tbytes); } /* * 'http_write_chunk()' - Write a chunked buffer. */ static ssize_t /* O - Number bytes written */ http_write_chunk(http_t *http, /* I - HTTP connection */ const char *buffer, /* I - Buffer to write */ size_t length) /* I - Length of buffer */ { char header[16]; /* Chunk header */ ssize_t bytes; /* Bytes written */ DEBUG_printf(("7http_write_chunk(http=%p, buffer=%p, length=" CUPS_LLFMT ")", (void *)http, (void *)buffer, CUPS_LLCAST length)); /* * Write the chunk header, data, and trailer. */ snprintf(header, sizeof(header), "%x\r\n", (unsigned)length); if (http_write(http, header, strlen(header)) < 0) { DEBUG_puts("8http_write_chunk: http_write of length failed."); return (-1); } if ((bytes = http_write(http, buffer, length)) < 0) { DEBUG_puts("8http_write_chunk: http_write of buffer failed."); return (-1); } if (http_write(http, "\r\n", 2) < 0) { DEBUG_puts("8http_write_chunk: http_write of CR LF failed."); return (-1); } return (bytes); } cups-2.2.7/cups/http.h000664 000765 000024 00000073174 13255074424 015271 0ustar00msweetstaff000000 000000 /* * Hyper-Text Transport Protocol definitions for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_HTTP_H_ # define _CUPS_HTTP_H_ /* * Include necessary headers... */ # include "versioning.h" # include "array.h" # include # include # include # ifdef WIN32 # ifndef __CUPS_SSIZE_T_DEFINED # define __CUPS_SSIZE_T_DEFINED /* Windows does not support the ssize_t type, so map it to off_t... */ typedef off_t ssize_t; /* @private@ */ # endif /* !__CUPS_SSIZE_T_DEFINED */ # include # include # else # include # include # include # include # include # include # include # include # if !defined(__APPLE__) || !defined(TCP_NODELAY) # include # endif /* !__APPLE__ || !TCP_NODELAY */ # if defined(AF_UNIX) && !defined(AF_LOCAL) # define AF_LOCAL AF_UNIX /* Older UNIX's have old names... */ # endif /* AF_UNIX && !AF_LOCAL */ # ifdef AF_LOCAL # include # endif /* AF_LOCAL */ # if defined(LOCAL_PEERCRED) && !defined(SO_PEERCRED) # define SO_PEERCRED LOCAL_PEERCRED # endif /* LOCAL_PEERCRED && !SO_PEERCRED */ # endif /* WIN32 */ /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Oh, the wonderful world of IPv6 compatibility. Apparently some * implementations expose the (more logical) 32-bit address parts * to everyone, while others only expose it to kernel code... To * make supporting IPv6 even easier, each vendor chose different * core structure and union names, so the same defines or code * can't be used on all platforms. * * The following will likely need tweaking on new platforms that * support IPv6 - the "s6_addr32" define maps to the 32-bit integer * array in the in6_addr union, which is named differently on various * platforms. */ #if defined(AF_INET6) && !defined(s6_addr32) # if defined(__sun) # define s6_addr32 _S6_un._S6_u32 # elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)|| defined(__DragonFly__) # define s6_addr32 __u6_addr.__u6_addr32 # elif defined(WIN32) /* * Windows only defines byte and 16-bit word members of the union and * requires special casing of all raw address code... */ # define s6_addr32 error_need_win32_specific_code # endif /* __sun */ #endif /* AF_INET6 && !s6_addr32 */ /* * Limits... */ # define HTTP_MAX_URI 1024 /* Max length of URI string */ # define HTTP_MAX_HOST 256 /* Max length of hostname string */ # define HTTP_MAX_BUFFER 2048 /* Max length of data buffer */ # define HTTP_MAX_VALUE 256 /* Max header field value length */ /* * Types and structures... */ typedef enum http_auth_e /**** HTTP authentication types @exclude all@ ****/ { HTTP_AUTH_NONE, /* No authentication in use */ HTTP_AUTH_BASIC, /* Basic authentication in use */ HTTP_AUTH_MD5, /* Digest authentication in use */ HTTP_AUTH_MD5_SESS, /* MD5-session authentication in use */ HTTP_AUTH_MD5_INT, /* Digest authentication in use for body */ HTTP_AUTH_MD5_SESS_INT, /* MD5-session authentication in use for body */ HTTP_AUTH_NEGOTIATE /* GSSAPI authentication in use @since CUPS 1.3/macOS 10.5@ */ } http_auth_t; typedef enum http_encoding_e /**** HTTP transfer encoding values ****/ { HTTP_ENCODING_LENGTH, /* Data is sent with Content-Length */ HTTP_ENCODING_CHUNKED, /* Data is chunked */ HTTP_ENCODING_FIELDS /* Sending HTTP fields */ # ifndef _CUPS_NO_DEPRECATED # define HTTP_ENCODE_LENGTH HTTP_ENCODING_LENGTH # define HTTP_ENCODE_CHUNKED HTTP_ENCODING_CHUNKED # define HTTP_ENCODE_FIELDS HTTP_ENCODING_FIELDS # endif /* !_CUPS_NO_DEPRECATED */ } http_encoding_t; typedef enum http_encryption_e /**** HTTP encryption values ****/ { HTTP_ENCRYPTION_IF_REQUESTED, /* Encrypt if requested (TLS upgrade) */ HTTP_ENCRYPTION_NEVER, /* Never encrypt */ HTTP_ENCRYPTION_REQUIRED, /* Encryption is required (TLS upgrade) */ HTTP_ENCRYPTION_ALWAYS /* Always encrypt (SSL) */ # ifndef _CUPS_NO_DEPRECATED # define HTTP_ENCRYPT_IF_REQUESTED HTTP_ENCRYPTION_IF_REQUESTED # define HTTP_ENCRYPT_NEVER HTTP_ENCRYPTION_NEVER # define HTTP_ENCRYPT_REQUIRED HTTP_ENCRYPTION_REQUIRED # define HTTP_ENCRYPT_ALWAYS HTTP_ENCRYPTION_ALWAYS # endif /* !_CUPS_NO_DEPRECATED */ } http_encryption_t; typedef enum http_field_e /**** HTTP field names ****/ { HTTP_FIELD_UNKNOWN = -1, /* Unknown field */ HTTP_FIELD_ACCEPT_LANGUAGE, /* Accept-Language field */ HTTP_FIELD_ACCEPT_RANGES, /* Accept-Ranges field */ HTTP_FIELD_AUTHORIZATION, /* Authorization field */ HTTP_FIELD_CONNECTION, /* Connection field */ HTTP_FIELD_CONTENT_ENCODING, /* Content-Encoding field */ HTTP_FIELD_CONTENT_LANGUAGE, /* Content-Language field */ HTTP_FIELD_CONTENT_LENGTH, /* Content-Length field */ HTTP_FIELD_CONTENT_LOCATION, /* Content-Location field */ HTTP_FIELD_CONTENT_MD5, /* Content-MD5 field */ HTTP_FIELD_CONTENT_RANGE, /* Content-Range field */ HTTP_FIELD_CONTENT_TYPE, /* Content-Type field */ HTTP_FIELD_CONTENT_VERSION, /* Content-Version field */ HTTP_FIELD_DATE, /* Date field */ HTTP_FIELD_HOST, /* Host field */ HTTP_FIELD_IF_MODIFIED_SINCE, /* If-Modified-Since field */ HTTP_FIELD_IF_UNMODIFIED_SINCE, /* If-Unmodified-Since field */ HTTP_FIELD_KEEP_ALIVE, /* Keep-Alive field */ HTTP_FIELD_LAST_MODIFIED, /* Last-Modified field */ HTTP_FIELD_LINK, /* Link field */ HTTP_FIELD_LOCATION, /* Location field */ HTTP_FIELD_RANGE, /* Range field */ HTTP_FIELD_REFERER, /* Referer field */ HTTP_FIELD_RETRY_AFTER, /* Retry-After field */ HTTP_FIELD_TRANSFER_ENCODING, /* Transfer-Encoding field */ HTTP_FIELD_UPGRADE, /* Upgrade field */ HTTP_FIELD_USER_AGENT, /* User-Agent field */ HTTP_FIELD_WWW_AUTHENTICATE, /* WWW-Authenticate field */ HTTP_FIELD_ACCEPT_ENCODING, /* Accepting-Encoding field @since CUPS 1.7/macOS 10.9@ */ HTTP_FIELD_ALLOW, /* Allow field @since CUPS 1.7/macOS 10.9@ */ HTTP_FIELD_SERVER, /* Server field @since CUPS 1.7/macOS 10.9@ */ HTTP_FIELD_MAX /* Maximum field index */ } http_field_t; typedef enum http_keepalive_e /**** HTTP keep-alive values ****/ { HTTP_KEEPALIVE_OFF = 0, /* No keep alive support */ HTTP_KEEPALIVE_ON /* Use keep alive */ } http_keepalive_t; typedef enum http_state_e /**** HTTP state values; states **** are server-oriented... ****/ { HTTP_STATE_ERROR = -1, /* Error on socket */ HTTP_STATE_WAITING, /* Waiting for command */ HTTP_STATE_OPTIONS, /* OPTIONS command, waiting for blank line */ HTTP_STATE_GET, /* GET command, waiting for blank line */ HTTP_STATE_GET_SEND, /* GET command, sending data */ HTTP_STATE_HEAD, /* HEAD command, waiting for blank line */ HTTP_STATE_POST, /* POST command, waiting for blank line */ HTTP_STATE_POST_RECV, /* POST command, receiving data */ HTTP_STATE_POST_SEND, /* POST command, sending data */ HTTP_STATE_PUT, /* PUT command, waiting for blank line */ HTTP_STATE_PUT_RECV, /* PUT command, receiving data */ HTTP_STATE_DELETE, /* DELETE command, waiting for blank line */ HTTP_STATE_TRACE, /* TRACE command, waiting for blank line */ HTTP_STATE_CONNECT, /* CONNECT command, waiting for blank line */ HTTP_STATE_STATUS, /* Command complete, sending status */ HTTP_STATE_UNKNOWN_METHOD, /* Unknown request method, waiting for blank line @since CUPS 1.7/macOS 10.9@ */ HTTP_STATE_UNKNOWN_VERSION /* Unknown request method, waiting for blank line @since CUPS 1.7/macOS 10.9@ */ # ifndef _CUPS_NO_DEPRECATED # define HTTP_WAITING HTTP_STATE_WAITING # define HTTP_OPTIONS HTTP_STATE_OPTIONS # define HTTP_GET HTTP_STATE_GET # define HTTP_GET_SEND HTTP_STATE_GET_SEND # define HTTP_HEAD HTTP_STATE_HEAD # define HTTP_POST HTTP_STATE_POST # define HTTP_POST_RECV HTTP_STATE_POST_RECV # define HTTP_POST_SEND HTTP_STATE_POST_SEND # define HTTP_PUT HTTP_STATE_PUT # define HTTP_PUT_RECV HTTP_STATE_PUT_RECV # define HTTP_DELETE HTTP_STATE_DELETE # define HTTP_TRACE HTTP_STATE_TRACE # define HTTP_CLOSE HTTP_STATE_CONNECT # define HTTP_STATUS HTTP_STATE_STATUS # endif /* !_CUPS_NO_DEPRECATED */ } http_state_t; typedef enum http_status_e /**** HTTP status codes ****/ { HTTP_STATUS_ERROR = -1, /* An error response from httpXxxx() */ HTTP_STATUS_NONE = 0, /* No Expect value @since CUPS 1.7/macOS 10.9@ */ HTTP_STATUS_CONTINUE = 100, /* Everything OK, keep going... */ HTTP_STATUS_SWITCHING_PROTOCOLS, /* HTTP upgrade to TLS/SSL */ HTTP_STATUS_OK = 200, /* OPTIONS/GET/HEAD/POST/TRACE command was successful */ HTTP_STATUS_CREATED, /* PUT command was successful */ HTTP_STATUS_ACCEPTED, /* DELETE command was successful */ HTTP_STATUS_NOT_AUTHORITATIVE, /* Information isn't authoritative */ HTTP_STATUS_NO_CONTENT, /* Successful command, no new data */ HTTP_STATUS_RESET_CONTENT, /* Content was reset/recreated */ HTTP_STATUS_PARTIAL_CONTENT, /* Only a partial file was received/sent */ HTTP_STATUS_MULTIPLE_CHOICES = 300, /* Multiple files match request */ HTTP_STATUS_MOVED_PERMANENTLY, /* Document has moved permanently */ HTTP_STATUS_FOUND, /* Document was found at a different URI */ HTTP_STATUS_SEE_OTHER, /* See this other link */ HTTP_STATUS_NOT_MODIFIED, /* File not modified */ HTTP_STATUS_USE_PROXY, /* Must use a proxy to access this URI */ HTTP_STATUS_TEMPORARY_REDIRECT = 307, /* Temporary redirection */ HTTP_STATUS_BAD_REQUEST = 400, /* Bad request */ HTTP_STATUS_UNAUTHORIZED, /* Unauthorized to access host */ HTTP_STATUS_PAYMENT_REQUIRED, /* Payment required */ HTTP_STATUS_FORBIDDEN, /* Forbidden to access this URI */ HTTP_STATUS_NOT_FOUND, /* URI was not found */ HTTP_STATUS_METHOD_NOT_ALLOWED, /* Method is not allowed */ HTTP_STATUS_NOT_ACCEPTABLE, /* Not Acceptable */ HTTP_STATUS_PROXY_AUTHENTICATION, /* Proxy Authentication is Required */ HTTP_STATUS_REQUEST_TIMEOUT, /* Request timed out */ HTTP_STATUS_CONFLICT, /* Request is self-conflicting */ HTTP_STATUS_GONE, /* Server has gone away */ HTTP_STATUS_LENGTH_REQUIRED, /* A content length or encoding is required */ HTTP_STATUS_PRECONDITION, /* Precondition failed */ HTTP_STATUS_REQUEST_TOO_LARGE, /* Request entity too large */ HTTP_STATUS_URI_TOO_LONG, /* URI too long */ HTTP_STATUS_UNSUPPORTED_MEDIATYPE, /* The requested media type is unsupported */ HTTP_STATUS_REQUESTED_RANGE, /* The requested range is not satisfiable */ HTTP_STATUS_EXPECTATION_FAILED, /* The expectation given in an Expect header field was not met */ HTTP_STATUS_UPGRADE_REQUIRED = 426, /* Upgrade to SSL/TLS required */ HTTP_STATUS_SERVER_ERROR = 500, /* Internal server error */ HTTP_STATUS_NOT_IMPLEMENTED, /* Feature not implemented */ HTTP_STATUS_BAD_GATEWAY, /* Bad gateway */ HTTP_STATUS_SERVICE_UNAVAILABLE, /* Service is unavailable */ HTTP_STATUS_GATEWAY_TIMEOUT, /* Gateway connection timed out */ HTTP_STATUS_NOT_SUPPORTED, /* HTTP version not supported */ HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED = 1000, /* User canceled authorization @since CUPS 1.4@ */ HTTP_STATUS_CUPS_PKI_ERROR, /* Error negotiating a secure connection @since CUPS 1.5/macOS 10.7@ */ HTTP_STATUS_CUPS_WEBIF_DISABLED /* Web interface is disabled @private@ */ # define HTTP_STATUS_MOVED_TEMPORARILY HTTP_STATUS_FOUND /* Renamed in RFC 7231 */ # ifndef _CUPS_NO_DEPRECATED /* Old names for this enumeration */ # define HTTP_ERROR HTTP_STATUS_ERROR # define HTTP_CONTINUE HTTP_STATUS_CONTINUE # define HTTP_SWITCHING_PROTOCOLS HTTP_STATUS_SWITCHING_PROTOCOLS # define HTTP_OK HTTP_STATUS_OK # define HTTP_CREATED HTTP_STATUS_CREATED # define HTTP_ACCEPTED HTTP_STATUS_ACCEPTED # define HTTP_NOT_AUTHORITATIVE HTTP_STATUS_NOT_AUTHORITATIVE # define HTTP_NO_CONTENT HTTP_STATUS_NO_CONTENT # define HTTP_RESET_CONTENT HTTP_STATUS_RESET_CONTENT # define HTTP_PARTIAL_CONTENT HTTP_STATUS_PARTIAL_CONTENT # define HTTP_MULTIPLE_CHOICES HTTP_STATUS_MULTIPLE_CHOICES # define HTTP_MOVED_PERMANENTLY HTTP_STATUS_MOVED_PERMANENTLY # define HTTP_MOVED_TEMPORARILY HTTP_STATUS_MOVED_TEMPORARILY # define HTTP_SEE_OTHER HTTP_STATUS_SEE_OTHER # define HTTP_NOT_MODIFIED HTTP_STATUS_NOT_MODIFIED # define HTTP_USE_PROXY HTTP_STATUS_USE_PROXY # define HTTP_BAD_REQUEST HTTP_STATUS_BAD_REQUEST # define HTTP_UNAUTHORIZED HTTP_STATUS_UNAUTHORIZED # define HTTP_PAYMENT_REQUIRED HTTP_STATUS_PAYMENT_REQUIRED # define HTTP_FORBIDDEN HTTP_STATUS_FORBIDDEN # define HTTP_NOT_FOUND HTTP_STATUS_NOT_FOUND # define HTTP_METHOD_NOT_ALLOWED HTTP_STATUS_METHOD_NOT_ALLOWED # define HTTP_NOT_ACCEPTABLE HTTP_STATUS_NOT_ACCEPTABLE # define HTTP_PROXY_AUTHENTICATION HTTP_STATUS_PROXY_AUTHENTICATION # define HTTP_REQUEST_TIMEOUT HTTP_STATUS_REQUEST_TIMEOUT # define HTTP_CONFLICT HTTP_STATUS_CONFLICT # define HTTP_GONE HTTP_STATUS_GONE # define HTTP_LENGTH_REQUIRED HTTP_STATUS_LENGTH_REQUIRED # define HTTP_PRECONDITION HTTP_STATUS_PRECONDITION # define HTTP_REQUEST_TOO_LARGE HTTP_STATUS_REQUEST_TOO_LARGE # define HTTP_URI_TOO_LONG HTTP_STATUS_URI_TOO_LONG # define HTTP_UNSUPPORTED_MEDIATYPE HTTP_STATUS_UNSUPPORTED_MEDIATYPE # define HTTP_REQUESTED_RANGE HTTP_STATUS_REQUESTED_RANGE # define HTTP_EXPECTATION_FAILED HTTP_STATUS_EXPECTATION_FAILED # define HTTP_UPGRADE_REQUIRED HTTP_STATUS_UPGRADE_REQUIRED # define HTTP_SERVER_ERROR HTTP_STATUS_SERVER_ERROR # define HTTP_NOT_IMPLEMENTED HTTP_STATUS_NOT_IMPLEMENTED # define HTTP_BAD_GATEWAY HTTP_STATUS_BAD_GATEWAY # define HTTP_SERVICE_UNAVAILABLE HTTP_STATUS_SERVICE_UNAVAILABLE # define HTTP_GATEWAY_TIMEOUT HTTP_STATUS_GATEWAY_TIMEOUT # define HTTP_NOT_SUPPORTED HTTP_STATUS_NOT_SUPPORTED # define HTTP_AUTHORIZATION_CANCELED HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED # define HTTP_PKI_ERROR HTTP_STATUS_CUPS_PKI_ERROR # define HTTP_WEBIF_DISABLED HTTP_STATUS_CUPS_WEBIF_DISABLED # endif /* !_CUPS_NO_DEPRECATED */ } http_status_t; typedef enum http_trust_e /**** Level of trust for credentials @since CUPS 2.0/OS 10.10@ */ { HTTP_TRUST_OK = 0, /* Credentials are OK/trusted */ HTTP_TRUST_INVALID, /* Credentials are invalid */ HTTP_TRUST_CHANGED, /* Credentials have changed */ HTTP_TRUST_EXPIRED, /* Credentials are expired */ HTTP_TRUST_RENEWED, /* Credentials have been renewed */ HTTP_TRUST_UNKNOWN, /* Credentials are unknown/new */ } http_trust_t; typedef enum http_uri_status_e /**** URI separation status @since CUPS 1.2@ ****/ { HTTP_URI_STATUS_OVERFLOW = -8, /* URI buffer for httpAssembleURI is too small */ HTTP_URI_STATUS_BAD_ARGUMENTS = -7, /* Bad arguments to function (error) */ HTTP_URI_STATUS_BAD_RESOURCE = -6, /* Bad resource in URI (error) */ HTTP_URI_STATUS_BAD_PORT = -5, /* Bad port number in URI (error) */ HTTP_URI_STATUS_BAD_HOSTNAME = -4, /* Bad hostname in URI (error) */ HTTP_URI_STATUS_BAD_USERNAME = -3, /* Bad username in URI (error) */ HTTP_URI_STATUS_BAD_SCHEME = -2, /* Bad scheme in URI (error) */ HTTP_URI_STATUS_BAD_URI = -1, /* Bad/empty URI (error) */ HTTP_URI_STATUS_OK = 0, /* URI decoded OK */ HTTP_URI_STATUS_MISSING_SCHEME, /* Missing scheme in URI (warning) */ HTTP_URI_STATUS_UNKNOWN_SCHEME, /* Unknown scheme in URI (warning) */ HTTP_URI_STATUS_MISSING_RESOURCE /* Missing resource in URI (warning) */ # ifndef _CUPS_NO_DEPRECATED # define HTTP_URI_OVERFLOW HTTP_URI_STATUS_OVERFLOW # define HTTP_URI_BAD_ARGUMENTS HTTP_URI_STATUS_BAD_ARGUMENTS # define HTTP_URI_BAD_RESOURCE HTTP_URI_STATUS_BAD_RESOURCE # define HTTP_URI_BAD_PORT HTTP_URI_STATUS_BAD_PORT # define HTTP_URI_BAD_HOSTNAME HTTP_URI_STATUS_BAD_HOSTNAME # define HTTP_URI_BAD_USERNAME HTTP_URI_STATUS_BAD_USERNAME # define HTTP_URI_BAD_SCHEME HTTP_URI_STATUS_BAD_SCHEME # define HTTP_URI_BAD_URI HTTP_URI_STATUS_BAD_URI # define HTTP_URI_OK HTTP_URI_STATUS_OK # define HTTP_URI_MISSING_SCHEME HTTP_URI_STATUS_MISSING_SCHEME # define HTTP_URI_UNKNOWN_SCHEME HTTP_URI_STATUS_UNKNOWN_SCHEME # define HTTP_URI_MISSING_RESOURCE HTTP_URI_STATUS_MISSING_RESOURCE # endif /* !_CUPS_NO_DEPRECATED */ } http_uri_status_t; typedef enum http_uri_coding_e /**** URI en/decode flags ****/ { HTTP_URI_CODING_NONE = 0, /* Don't en/decode anything */ HTTP_URI_CODING_USERNAME = 1, /* En/decode the username portion */ HTTP_URI_CODING_HOSTNAME = 2, /* En/decode the hostname portion */ HTTP_URI_CODING_RESOURCE = 4, /* En/decode the resource portion */ HTTP_URI_CODING_MOST = 7, /* En/decode all but the query */ HTTP_URI_CODING_QUERY = 8, /* En/decode the query portion */ HTTP_URI_CODING_ALL = 15, /* En/decode everything */ HTTP_URI_CODING_RFC6874 = 16 /* Use RFC 6874 address format */ } http_uri_coding_t; typedef enum http_version_e /**** HTTP version numbers @exclude all@ ****/ { HTTP_VERSION_0_9 = 9, /* HTTP/0.9 */ HTTP_VERSION_1_0 = 100, /* HTTP/1.0 */ HTTP_VERSION_1_1 = 101 /* HTTP/1.1 */ # ifndef _CUPS_NO_DEPRECATED # define HTTP_0_9 HTTP_VERSION_0_9 # define HTTP_1_0 HTTP_VERSION_1_0 # define HTTP_1_1 HTTP_VERSION_1_1 # endif /* !_CUPS_NO_DEPRECATED */ } http_version_t; typedef union _http_addr_u /**** Socket address union, which **** makes using IPv6 and other **** address types easier and **** more portable. @since CUPS 1.2/macOS 10.5@ ****/ { struct sockaddr addr; /* Base structure for family value */ struct sockaddr_in ipv4; /* IPv4 address */ #ifdef AF_INET6 struct sockaddr_in6 ipv6; /* IPv6 address */ #endif /* AF_INET6 */ #ifdef AF_LOCAL struct sockaddr_un un; /* Domain socket file */ #endif /* AF_LOCAL */ char pad[256]; /* Padding to ensure binary compatibility */ } http_addr_t; typedef struct http_addrlist_s /**** Socket address list, which is **** used to enumerate all of the **** addresses that are associated **** with a hostname. @since CUPS 1.2/macOS 10.5@ **** @exclude all@ ****/ { struct http_addrlist_s *next; /* Pointer to next address in list */ http_addr_t addr; /* Address */ } http_addrlist_t; typedef struct _http_s http_t; /**** HTTP connection type ****/ typedef struct http_credential_s /**** HTTP credential data @since CUPS 1.5/macOS 10.7@ @exclude all@ ****/ { void *data; /* Pointer to credential data */ size_t datalen; /* Credential length */ } http_credential_t; typedef int (*http_timeout_cb_t)(http_t *http, void *user_data); /**** HTTP timeout callback @since CUPS 1.5/macOS 10.7@ ****/ /* * Prototypes... */ extern void httpBlocking(http_t *http, int b); extern int httpCheck(http_t *http); extern void httpClearFields(http_t *http); extern void httpClose(http_t *http); extern http_t *httpConnect(const char *host, int port) _CUPS_DEPRECATED_1_7_MSG("Use httpConnect2 instead."); extern http_t *httpConnectEncrypt(const char *host, int port, http_encryption_t encryption) _CUPS_DEPRECATED_1_7_MSG("Use httpConnect2 instead."); extern int httpDelete(http_t *http, const char *uri); extern int httpEncryption(http_t *http, http_encryption_t e); extern int httpError(http_t *http); extern void httpFlush(http_t *http); extern int httpGet(http_t *http, const char *uri); extern char *httpGets(char *line, int length, http_t *http); extern const char *httpGetDateString(time_t t); extern time_t httpGetDateTime(const char *s); extern const char *httpGetField(http_t *http, http_field_t field); extern struct hostent *httpGetHostByName(const char *name); extern char *httpGetSubField(http_t *http, http_field_t field, const char *name, char *value); extern int httpHead(http_t *http, const char *uri); extern void httpInitialize(void); extern int httpOptions(http_t *http, const char *uri); extern int httpPost(http_t *http, const char *uri); extern int httpPrintf(http_t *http, const char *format, ...) __attribute__ ((__format__ (__printf__, 2, 3))); extern int httpPut(http_t *http, const char *uri); extern int httpRead(http_t *http, char *buffer, int length) _CUPS_DEPRECATED_MSG("Use httpRead2 instead."); extern int httpReconnect(http_t *http) _CUPS_DEPRECATED_1_6_MSG("Use httpReconnect2 instead."); extern void httpSeparate(const char *uri, char *method, char *username, char *host, int *port, char *resource) _CUPS_DEPRECATED_MSG("Use httpSeparateURI instead."); extern void httpSetField(http_t *http, http_field_t field, const char *value); extern const char *httpStatus(http_status_t status); extern int httpTrace(http_t *http, const char *uri); extern http_status_t httpUpdate(http_t *http); extern int httpWrite(http_t *http, const char *buffer, int length) _CUPS_DEPRECATED_MSG("Use httpWrite2 instead."); extern char *httpEncode64(char *out, const char *in) _CUPS_DEPRECATED_MSG("Use httpEncode64_2 instead."); extern char *httpDecode64(char *out, const char *in) _CUPS_DEPRECATED_MSG("Use httpDecode64_2 instead."); extern int httpGetLength(http_t *http) _CUPS_DEPRECATED_MSG("Use httpGetLength2 instead."); extern char *httpMD5(const char *, const char *, const char *, char [33]); extern char *httpMD5Final(const char *, const char *, const char *, char [33]); extern char *httpMD5String(const unsigned char *, char [33]); /**** New in CUPS 1.1.19 ****/ extern void httpClearCookie(http_t *http) _CUPS_API_1_1_19; extern const char *httpGetCookie(http_t *http) _CUPS_API_1_1_19; extern void httpSetCookie(http_t *http, const char *cookie) _CUPS_API_1_1_19; extern int httpWait(http_t *http, int msec) _CUPS_API_1_1_19; /**** New in CUPS 1.1.21 ****/ extern char *httpDecode64_2(char *out, int *outlen, const char *in) _CUPS_API_1_1_21; extern char *httpEncode64_2(char *out, int outlen, const char *in, int inlen) _CUPS_API_1_1_21; extern void httpSeparate2(const char *uri, char *method, int methodlen, char *username, int usernamelen, char *host, int hostlen, int *port, char *resource, int resourcelen) _CUPS_DEPRECATED_MSG("Use httpSeparateURI instead."); /**** New in CUPS 1.2/macOS 10.5 ****/ extern int httpAddrAny(const http_addr_t *addr) _CUPS_API_1_2; extern http_addrlist_t *httpAddrConnect(http_addrlist_t *addrlist, int *sock) _CUPS_API_1_2; extern int httpAddrEqual(const http_addr_t *addr1, const http_addr_t *addr2) _CUPS_API_1_2; extern void httpAddrFreeList(http_addrlist_t *addrlist) _CUPS_API_1_2; extern http_addrlist_t *httpAddrGetList(const char *hostname, int family, const char *service) _CUPS_API_1_2; extern int httpAddrLength(const http_addr_t *addr) _CUPS_API_1_2; extern int httpAddrLocalhost(const http_addr_t *addr) _CUPS_API_1_2; extern char *httpAddrLookup(const http_addr_t *addr, char *name, int namelen) _CUPS_API_1_2; extern char *httpAddrString(const http_addr_t *addr, char *s, int slen) _CUPS_API_1_2; extern http_uri_status_t httpAssembleURI(http_uri_coding_t encoding, char *uri, int urilen, const char *scheme, const char *username, const char *host, int port, const char *resource) _CUPS_API_1_2; extern http_uri_status_t httpAssembleURIf(http_uri_coding_t encoding, char *uri, int urilen, const char *scheme, const char *username, const char *host, int port, const char *resourcef, ...) _CUPS_API_1_2; extern int httpFlushWrite(http_t *http) _CUPS_API_1_2; extern int httpGetBlocking(http_t *http) _CUPS_API_1_2; extern const char *httpGetDateString2(time_t t, char *s, int slen) _CUPS_API_1_2; extern int httpGetFd(http_t *http) _CUPS_API_1_2; extern const char *httpGetHostname(http_t *http, char *s, int slen) _CUPS_API_1_2; extern off_t httpGetLength2(http_t *http) _CUPS_API_1_2; extern http_status_t httpGetStatus(http_t *http) _CUPS_API_1_2; extern char *httpGetSubField2(http_t *http, http_field_t field, const char *name, char *value, int valuelen) _CUPS_API_1_2; extern ssize_t httpRead2(http_t *http, char *buffer, size_t length) _CUPS_API_1_2; extern http_uri_status_t httpSeparateURI(http_uri_coding_t decoding, const char *uri, char *scheme, int schemelen, char *username, int usernamelen, char *host, int hostlen, int *port, char *resource, int resourcelen) _CUPS_API_1_2; extern void httpSetExpect(http_t *http, http_status_t expect) _CUPS_API_1_2; extern void httpSetLength(http_t *http, size_t length) _CUPS_API_1_2; extern ssize_t httpWrite2(http_t *http, const char *buffer, size_t length) _CUPS_API_1_2; /**** New in CUPS 1.3/macOS 10.5 ****/ extern char *httpGetAuthString(http_t *http) _CUPS_API_1_3; extern void httpSetAuthString(http_t *http, const char *scheme, const char *data) _CUPS_API_1_3; /**** New in CUPS 1.5/macOS 10.7 ****/ extern int httpAddCredential(cups_array_t *credentials, const void *data, size_t datalen) _CUPS_API_1_5; extern int httpCopyCredentials(http_t *http, cups_array_t **credentials) _CUPS_API_1_5; extern void httpFreeCredentials(cups_array_t *certs) _CUPS_API_1_5; extern int httpSetCredentials(http_t *http, cups_array_t *certs) _CUPS_API_1_5; extern void httpSetTimeout(http_t *http, double timeout, http_timeout_cb_t cb, void *user_data) _CUPS_API_1_5; /**** New in CUPS 1.6/macOS 10.8 ****/ extern http_addrlist_t *httpAddrConnect2(http_addrlist_t *addrlist, int *sock, int msec, int *cancel) _CUPS_API_1_6; extern http_state_t httpGetState(http_t *http) _CUPS_API_1_6; extern http_version_t httpGetVersion(http_t *http) _CUPS_API_1_6; extern int httpReconnect2(http_t *http, int msec, int *cancel) _CUPS_API_1_6; /**** New in CUPS 1.7/macOS 10.9 ****/ extern http_t *httpAcceptConnection(int fd, int blocking) _CUPS_API_1_7; extern http_addrlist_t *httpAddrCopyList(http_addrlist_t *src) _CUPS_API_1_7; extern int httpAddrListen(http_addr_t *addr, int port) _CUPS_API_1_7; extern int httpAddrPort(http_addr_t *addr) _CUPS_API_1_7; extern char *httpAssembleUUID(const char *server, int port, const char *name, int number, char *buffer, size_t bufsize) _CUPS_API_1_7; extern http_t *httpConnect2(const char *host, int port, http_addrlist_t *addrlist, int family, http_encryption_t encryption, int blocking, int msec, int *cancel) _CUPS_API_1_7; extern const char *httpGetContentEncoding(http_t *http) _CUPS_API_1_7; extern http_status_t httpGetExpect(http_t *http) _CUPS_API_1_7; extern ssize_t httpPeek(http_t *http, char *buffer, size_t length) _CUPS_API_1_7; extern http_state_t httpReadRequest(http_t *http, char *resource, size_t resourcelen) _CUPS_API_1_7; extern void httpSetDefaultField(http_t *http, http_field_t field, const char *value) _CUPS_API_1_7; extern http_state_t httpWriteResponse(http_t *http, http_status_t status) _CUPS_API_1_7; /* New in CUPS 2.0/macOS 10.10 */ extern int httpAddrClose(http_addr_t *addr, int fd) _CUPS_API_2_0; extern int httpAddrFamily(http_addr_t *addr) _CUPS_API_2_0; extern int httpCompareCredentials(cups_array_t *cred1, cups_array_t *cred2) _CUPS_API_2_0; extern int httpCredentialsAreValidForName(cups_array_t *credentials, const char *common_name); extern time_t httpCredentialsGetExpiration(cups_array_t *credentials) _CUPS_API_2_0; extern http_trust_t httpCredentialsGetTrust(cups_array_t *credentials, const char *common_name) _CUPS_API_2_0; extern size_t httpCredentialsString(cups_array_t *credentials, char *buffer, size_t bufsize) _CUPS_API_2_0; extern http_field_t httpFieldValue(const char *name) _CUPS_API_2_0; extern time_t httpGetActivity(http_t *http) _CUPS_API_2_0; extern http_addr_t *httpGetAddress(http_t *http) _CUPS_API_2_0; extern http_encryption_t httpGetEncryption(http_t *http) _CUPS_API_2_0; extern http_keepalive_t httpGetKeepAlive(http_t *http) _CUPS_API_2_0; extern size_t httpGetPending(http_t *http) _CUPS_API_2_0; extern size_t httpGetReady(http_t *http) _CUPS_API_2_0; extern size_t httpGetRemaining(http_t *http) _CUPS_API_2_0; extern int httpIsChunked(http_t *http) _CUPS_API_2_0; extern int httpIsEncrypted(http_t *http) _CUPS_API_2_0; extern int httpLoadCredentials(const char *path, cups_array_t **credentials, const char *common_name) _CUPS_API_2_0; extern const char *httpResolveHostname(http_t *http, char *buffer, size_t bufsize) _CUPS_API_2_0; extern int httpSaveCredentials(const char *path, cups_array_t *credentials, const char *common_name) _CUPS_API_2_0; extern void httpSetKeepAlive(http_t *http, http_keepalive_t keep_alive) _CUPS_API_2_0; extern void httpShutdown(http_t *http) _CUPS_API_2_0; extern const char *httpStateString(http_state_t state) _CUPS_API_2_0; extern const char *httpURIStatusString(http_uri_status_t status) _CUPS_API_2_0; /* * C++ magic... */ # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_HTTP_H_ */ cups-2.2.7/cups/ipp-private.h000664 000765 000024 00000003123 13255074424 016535 0ustar00msweetstaff000000 000000 /* * Private IPP definitions for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_IPP_PRIVATE_H_ # define _CUPS_IPP_PRIVATE_H_ /* * Include necessary headers... */ # include /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Constants... */ # define IPP_BUF_SIZE (IPP_MAX_LENGTH + 2) /* Size of buffer */ /* * Structures... */ typedef struct /**** Attribute mapping data ****/ { int multivalue; /* Option has multiple values? */ const char *name; /* Option/attribute name */ ipp_tag_t value_tag; /* Value tag for this attribute */ ipp_tag_t group_tag; /* Group tag for this attribute */ ipp_tag_t alt_group_tag; /* Alternate group tag for this * attribute */ const ipp_op_t *operations; /* Allowed operations for this attr */ } _ipp_option_t; /* * Prototypes for private functions... */ #ifdef DEBUG extern const char *_ippCheckOptions(void); #endif /* DEBUG */ extern _ipp_option_t *_ippFindOption(const char *name); /* * C++ magic... */ # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_IPP_H_ */ cups-2.2.7/cups/ipp-support.c000664 000765 000024 00000212203 13255074424 016573 0ustar00msweetstaff000000 000000 /* * Internet Printing Protocol support functions for CUPS. * * Copyright © 2007-2018 by Apple Inc. * Copyright © 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" /* * Local globals... */ static const char * const ipp_states[] = { "IPP_STATE_ERROR", "IPP_STATE_IDLE", "IPP_STATE_HEADER", "IPP_STATE_ATTRIBUTE", "IPP_STATE_DATA" }; static const char * const ipp_status_oks[] = /* "OK" status codes */ { /* (name) = abandoned standard value */ "successful-ok", "successful-ok-ignored-or-substituted-attributes", "successful-ok-conflicting-attributes", "successful-ok-ignored-subscriptions", "(successful-ok-ignored-notifications)", "successful-ok-too-many-events", "(successful-ok-but-cancel-subscription)", "successful-ok-events-complete" }, * const ipp_status_400s[] = /* Client errors */ { /* (name) = abandoned standard value */ "client-error-bad-request", "client-error-forbidden", "client-error-not-authenticated", "client-error-not-authorized", "client-error-not-possible", "client-error-timeout", "client-error-not-found", "client-error-gone", "client-error-request-entity-too-large", "client-error-request-value-too-long", "client-error-document-format-not-supported", "client-error-attributes-or-values-not-supported", "client-error-uri-scheme-not-supported", "client-error-charset-not-supported", "client-error-conflicting-attributes", "client-error-compression-not-supported", "client-error-compression-error", "client-error-document-format-error", "client-error-document-access-error", "client-error-attributes-not-settable", "client-error-ignored-all-subscriptions", "client-error-too-many-subscriptions", "(client-error-ignored-all-notifications)", "(client-error-client-print-support-file-not-found)", "client-error-document-password-error", "client-error-document-permission-error", "client-error-document-security-error", "client-error-document-unprintable-error", "client-error-account-info-needed", "client-error-account-closed", "client-error-account-limit-reached", "client-error-account-authorization-failed", "client-error-not-fetchable" }, * const ipp_status_480s[] = /* Vendor client errors */ { /* 0x0480 - 0x048F */ "0x0480", "0x0481", "0x0482", "0x0483", "0x0484", "0x0485", "0x0486", "0x0487", "0x0488", "0x0489", "0x048A", "0x048B", "0x048C", "0x048D", "0x048E", "0x048F", /* 0x0490 - 0x049F */ "0x0490", "0x0491", "0x0492", "0x0493", "0x0494", "0x0495", "0x0496", "0x0497", "0x0498", "0x0499", "0x049A", "0x049B", "cups-error-account-info-needed", "cups-error-account-closed", "cups-error-account-limit-reached", "cups-error-account-authorization-failed" }, * const ipp_status_500s[] = /* Server errors */ { "server-error-internal-error", "server-error-operation-not-supported", "server-error-service-unavailable", "server-error-version-not-supported", "server-error-device-error", "server-error-temporary-error", "server-error-not-accepting-jobs", "server-error-busy", "server-error-job-canceled", "server-error-multiple-document-jobs-not-supported", "server-error-printer-is-deactivated", "server-error-too-many-jobs", "server-error-too-many-documents" }, * const ipp_status_1000s[] = /* CUPS internal */ { "cups-authentication-canceled", "cups-pki-error", "cups-upgrade-required" }; static const char * const ipp_std_ops[] = { /* 0x0000 - 0x000f */ "0x0000", "0x0001", "Print-Job", "Print-URI", "Validate-Job", "Create-Job", "Send-Document", "Send-URI", "Cancel-Job", "Get-Job-Attributes", "Get-Jobs", "Get-Printer-Attributes", "Hold-Job", "Release-Job", "Restart-Job", "0x000f", /* 0x0010 - 0x001f */ "Pause-Printer", "Resume-Printer", "Purge-Jobs", "Set-Printer-Attributes", "Set-Job-Attributes", "Get-Printer-Supported-Values", "Create-Printer-Subscriptions", "Create-Job-Subscriptions", "Get-Subscription-Attributes", "Get-Subscriptions", "Renew-Subscription", "Cancel-Subscription", "Get-Notifications", "(Send-Notifications)", "(Get-Resource-Attributes)", "(Get-Resource-Data)", /* 0x0020 - 0x002f */ "(Get-Resources)", "(Get-Printer-Support-Files)", "Enable-Printer", "Disable-Printer", "Pause-Printer-After-Current-Job", "Hold-New-Jobs", "Release-Held-New-Jobs", "Deactivate-Printer", "Activate-Printer", "Restart-Printer", "Shutdown-Printer", "Startup-Printer", "Reprocess-Job", "Cancel-Current-Job", "Suspend-Current-Job", "Resume-Job", /* 0x0030 - 0x003f */ "Promote-Job", "Schedule-Job-After", "0x0032", "Cancel-Document", "Get-Document-Attributes", "Get-Documents", "Delete-Document", "Set-Document-Attributes", "Cancel-Jobs", "Cancel-My-Jobs", "Resubmit-Job", "Close-Job", "Identify-Printer", "Validate-Document", "Add-Document-Images", "Acknowledge-Document", /* 0x0040 - 0x004a */ "Acknowledge-Identify-Printer", "Acknowledge-Job", "Fetch-Document", "Fetch-Job", "Get-Output-Device-Attributes", "Update-Active-Jobs", "Deregister-Output-Device", "Update-Document-Status", "Update-Job-Status", "Update-Output-Device-Attributes", "Get-Next-Document-Data" }, * const ipp_cups_ops[] = { "CUPS-Get-Default", "CUPS-Get-Printers", "CUPS-Add-Modify-Printer", "CUPS-Delete-Printer", "CUPS-Get-Classes", "CUPS-Add-Modify-Class", "CUPS-Delete-Class", "CUPS-Accept-Jobs", "CUPS-Reject-Jobs", "CUPS-Set-Default", "CUPS-Get-Devices", "CUPS-Get-PPDs", "CUPS-Move-Job", "CUPS-Authenticate-Job", "CUPS-Get-PPD" }, * const ipp_cups_ops2[] = { "CUPS-Get-Document", "CUPS-Create-Local-Printer" }, * const ipp_tag_names[] = { /* Value/group tag names */ "zero", /* 0x00 */ "operation-attributes-tag", /* 0x01 */ "job-attributes-tag", /* 0x02 */ "end-of-attributes-tag", /* 0x03 */ "printer-attributes-tag", /* 0x04 */ "unsupported-attributes-tag", /* 0x05 */ "subscription-attributes-tag", /* 0x06 */ "event-notification-attributes-tag", /* 0x07 */ "(resource-attributes-tag)", /* 0x08 */ "document-attributes-tag", /* 0x09 */ "0x0a", /* 0x0a */ "0x0b", /* 0x0b */ "0x0c", /* 0x0c */ "0x0d", /* 0x0d */ "0x0e", /* 0x0e */ "0x0f", /* 0x0f */ "unsupported", /* 0x10 */ "default", /* 0x11 */ "unknown", /* 0x12 */ "no-value", /* 0x13 */ "0x14", /* 0x14 */ "not-settable", /* 0x15 */ "delete-attribute", /* 0x16 */ "admin-define", /* 0x17 */ "0x18", /* 0x18 */ "0x19", /* 0x19 */ "0x1a", /* 0x1a */ "0x1b", /* 0x1b */ "0x1c", /* 0x1c */ "0x1d", /* 0x1d */ "0x1e", /* 0x1e */ "0x1f", /* 0x1f */ "0x20", /* 0x20 */ "integer", /* 0x21 */ "boolean", /* 0x22 */ "enum", /* 0x23 */ "0x24", /* 0x24 */ "0x25", /* 0x25 */ "0x26", /* 0x26 */ "0x27", /* 0x27 */ "0x28", /* 0x28 */ "0x29", /* 0x29 */ "0x2a", /* 0x2a */ "0x2b", /* 0x2b */ "0x2c", /* 0x2c */ "0x2d", /* 0x2d */ "0x2e", /* 0x2e */ "0x2f", /* 0x2f */ "octetString", /* 0x30 */ "dateTime", /* 0x31 */ "resolution", /* 0x32 */ "rangeOfInteger", /* 0x33 */ "collection", /* 0x34 */ "textWithLanguage", /* 0x35 */ "nameWithLanguage", /* 0x36 */ "endCollection", /* 0x37 */ "0x38", /* 0x38 */ "0x39", /* 0x39 */ "0x3a", /* 0x3a */ "0x3b", /* 0x3b */ "0x3c", /* 0x3c */ "0x3d", /* 0x3d */ "0x3e", /* 0x3e */ "0x3f", /* 0x3f */ "0x40", /* 0x40 */ "textWithoutLanguage",/* 0x41 */ "nameWithoutLanguage",/* 0x42 */ "0x43", /* 0x43 */ "keyword", /* 0x44 */ "uri", /* 0x45 */ "uriScheme", /* 0x46 */ "charset", /* 0x47 */ "naturalLanguage", /* 0x48 */ "mimeMediaType", /* 0x49 */ "memberAttrName" /* 0x4a */ }; static const char * const ipp_document_states[] = { /* document-state-enums */ "pending", "4", "processing", "processing-stopped", /* IPPSIX */ "canceled", "aborted", "completed" }, * const ipp_finishings[] = { /* finishings enums */ "none", "staple", "punch", "cover", "bind", "saddle-stitch", "edge-stitch", "fold", "trim", "bale", "booklet-maker", "jog-offset", "coat", /* Finishings 2.0 */ "laminate", /* Finishings 2.0 */ "17", "18", "19", "staple-top-left", "staple-bottom-left", "staple-top-right", "staple-bottom-right", "edge-stitch-left", "edge-stitch-top", "edge-stitch-right", "edge-stitch-bottom", "staple-dual-left", "staple-dual-top", "staple-dual-right", "staple-dual-bottom", "staple-triple-left", /* Finishings 2.0 */ "staple-triple-top", /* Finishings 2.0 */ "staple-triple-right",/* Finishings 2.0 */ "staple-triple-bottom",/* Finishings 2.0 */ "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "bind-left", "bind-top", "bind-right", "bind-bottom", "54", "55", "56", "57", "58", "59", "trim-after-pages", "trim-after-documents", "trim-after-copies", "trim-after-job", "64", "65", "66", "67", "68", "69", "punch-top-left", /* Finishings 2.0 */ "punch-bottom-left", /* Finishings 2.0 */ "punch-top-right", /* Finishings 2.0 */ "punch-bottom-right", /* Finishings 2.0 */ "punch-dual-left", /* Finishings 2.0 */ "punch-dual-top", /* Finishings 2.0 */ "punch-dual-right", /* Finishings 2.0 */ "punch-dual-bottom", /* Finishings 2.0 */ "punch-triple-left", /* Finishings 2.0 */ "punch-triple-top", /* Finishings 2.0 */ "punch-triple-right", /* Finishings 2.0 */ "punch-triple-bottom",/* Finishings 2.0 */ "punch-quad-left", /* Finishings 2.0 */ "punch-quad-top", /* Finishings 2.0 */ "punch-quad-right", /* Finishings 2.0 */ "punch-quad-bottom", /* Finishings 2.0 */ "punch-multiple-left",/* Finishings 2.1/Canon */ "punch-multiple-top", /* Finishings 2.1/Canon */ "punch-multiple-right",/* Finishings 2.1/Canon */ "punch-multiple-bottom",/* Finishings 2.1/Canon */ "fold-accordian", /* Finishings 2.0 */ "fold-double-gate", /* Finishings 2.0 */ "fold-gate", /* Finishings 2.0 */ "fold-half", /* Finishings 2.0 */ "fold-half-z", /* Finishings 2.0 */ "fold-left-gate", /* Finishings 2.0 */ "fold-letter", /* Finishings 2.0 */ "fold-parallel", /* Finishings 2.0 */ "fold-poster", /* Finishings 2.0 */ "fold-right-gate", /* Finishings 2.0 */ "fold-z", /* Finishings 2.0 */ "fold-engineering-z" /* Finishings 2.1 */ }, * const ipp_finishings_vendor[] = { /* 0x40000000 to 0x4000000F */ "0x40000000", "0x40000001", "0x40000002", "0x40000003", "0x40000004", "0x40000005", "0x40000006", "0x40000007", "0x40000008", "0x40000009", "0x4000000A", "0x4000000B", "0x4000000C", "0x4000000D", "0x4000000E", "0x4000000F", /* 0x40000010 to 0x4000001F */ "0x40000010", "0x40000011", "0x40000012", "0x40000013", "0x40000014", "0x40000015", "0x40000016", "0x40000017", "0x40000018", "0x40000019", "0x4000001A", "0x4000001B", "0x4000001C", "0x4000001D", "0x4000001E", "0x4000001F", /* 0x40000020 to 0x4000002F */ "0x40000020", "0x40000021", "0x40000022", "0x40000023", "0x40000024", "0x40000025", "0x40000026", "0x40000027", "0x40000028", "0x40000029", "0x4000002A", "0x4000002B", "0x4000002C", "0x4000002D", "0x4000002E", "0x4000002F", /* 0x40000030 to 0x4000003F */ "0x40000030", "0x40000031", "0x40000032", "0x40000033", "0x40000034", "0x40000035", "0x40000036", "0x40000037", "0x40000038", "0x40000039", "0x4000003A", "0x4000003B", "0x4000003C", "0x4000003D", "0x4000003E", "0x4000003F", /* 0x40000040 - 0x4000004F */ "0x40000040", "0x40000041", "0x40000042", "0x40000043", "0x40000044", "0x40000045", "cups-punch-top-left", "cups-punch-bottom-left", "cups-punch-top-right", "cups-punch-bottom-right", "cups-punch-dual-left", "cups-punch-dual-top", "cups-punch-dual-right", "cups-punch-dual-bottom", "cups-punch-triple-left", "cups-punch-triple-top", /* 0x40000050 - 0x4000005F */ "cups-punch-triple-right", "cups-punch-triple-bottom", "cups-punch-quad-left", "cups-punch-quad-top", "cups-punch-quad-right", "cups-punch-quad-bottom", "0x40000056", "0x40000057", "0x40000058", "0x40000059", "cups-fold-accordian", "cups-fold-double-gate", "cups-fold-gate", "cups-fold-half", "cups-fold-half-z", "cups-fold-left-gate", /* 0x40000060 - 0x40000064 */ "cups-fold-letter", "cups-fold-parallel", "cups-fold-poster", "cups-fold-right-gate", "cups-fold-z" }, * const ipp_job_collation_types[] = { /* job-collation-type enums */ "uncollated-sheets", "collated-documents", "uncollated-documents" }, * const ipp_job_states[] = { /* job-state enums */ "pending", "pending-held", "processing", "processing-stopped", "canceled", "aborted", "completed" }, * const ipp_orientation_requesteds[] = { /* orientation-requested enums */ "portrait", "landscape", "reverse-landscape", "reverse-portrait", "none" }, * const ipp_print_qualities[] = { /* print-quality enums */ "draft", "normal", "high" }, * const ipp_printer_states[] = { /* printer-state enums */ "idle", "processing", "stopped", }; /* * Local functions... */ static size_t ipp_col_string(ipp_t *col, char *buffer, size_t bufsize); /* * 'ippAttributeString()' - Convert the attribute's value to a string. * * Returns the number of bytes that would be written, not including the * trailing nul. The buffer pointer can be NULL to get the required length, * just like (v)snprintf. * * @since CUPS 1.6/macOS 10.8@ */ size_t /* O - Number of bytes less nul */ ippAttributeString( ipp_attribute_t *attr, /* I - Attribute */ char *buffer, /* I - String buffer or NULL */ size_t bufsize) /* I - Size of string buffer */ { int i; /* Looping var */ char *bufptr, /* Pointer into buffer */ *bufend, /* End of buffer */ temp[256]; /* Temporary string */ const char *ptr, /* Pointer into string */ *end; /* Pointer to end of string */ _ipp_value_t *val; /* Current value */ if (!attr || !attr->name) { if (buffer) *buffer = '\0'; return (0); } bufptr = buffer; if (buffer) bufend = buffer + bufsize - 1; else bufend = NULL; for (i = attr->num_values, val = attr->values; i > 0; i --, val ++) { if (val > attr->values) { if (buffer && bufptr < bufend) *bufptr++ = ','; else bufptr ++; } switch (attr->value_tag & ~IPP_TAG_CUPS_CONST) { case IPP_TAG_ENUM : ptr = ippEnumString(attr->name, val->integer); if (buffer && bufptr < bufend) strlcpy(bufptr, ptr, (size_t)(bufend - bufptr + 1)); bufptr += strlen(ptr); break; case IPP_TAG_INTEGER : if (buffer && bufptr < bufend) bufptr += snprintf(bufptr, (size_t)(bufend - bufptr + 1), "%d", val->integer); else bufptr += snprintf(temp, sizeof(temp), "%d", val->integer); break; case IPP_TAG_BOOLEAN : if (buffer && bufptr < bufend) strlcpy(bufptr, val->boolean ? "true" : "false", (size_t)(bufend - bufptr + 1)); bufptr += val->boolean ? 4 : 5; break; case IPP_TAG_RANGE : if (buffer && bufptr < bufend) bufptr += snprintf(bufptr, (size_t)(bufend - bufptr + 1), "%d-%d", val->range.lower, val->range.upper); else bufptr += snprintf(temp, sizeof(temp), "%d-%d", val->range.lower, val->range.upper); break; case IPP_TAG_RESOLUTION : if (val->resolution.xres == val->resolution.yres) { if (buffer && bufptr < bufend) bufptr += snprintf(bufptr, (size_t)(bufend - bufptr + 1), "%d%s", val->resolution.xres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); else bufptr += snprintf(temp, sizeof(temp), "%d%s", val->resolution.xres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); } else if (buffer && bufptr < bufend) bufptr += snprintf(bufptr, (size_t)(bufend - bufptr + 1), "%dx%d%s", val->resolution.xres, val->resolution.yres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); else bufptr += snprintf(temp, sizeof(temp), "%dx%d%s", val->resolution.xres, val->resolution.yres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); break; case IPP_TAG_DATE : { unsigned year; /* Year */ year = ((unsigned)val->date[0] << 8) + (unsigned)val->date[1]; if (val->date[9] == 0 && val->date[10] == 0) snprintf(temp, sizeof(temp), "%04u-%02u-%02uT%02u:%02u:%02uZ", year, val->date[2], val->date[3], val->date[4], val->date[5], val->date[6]); else snprintf(temp, sizeof(temp), "%04u-%02u-%02uT%02u:%02u:%02u%c%02u%02u", year, val->date[2], val->date[3], val->date[4], val->date[5], val->date[6], val->date[8], val->date[9], val->date[10]); if (buffer && bufptr < bufend) strlcpy(bufptr, temp, (size_t)(bufend - bufptr + 1)); bufptr += strlen(temp); } break; case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_CHARSET : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_MIMETYPE : case IPP_TAG_LANGUAGE : case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : if (!val->string.text) break; for (ptr = val->string.text; *ptr; ptr ++) { if (*ptr == '\\' || *ptr == '\"' || *ptr == '[') { if (buffer && bufptr < bufend) *bufptr = '\\'; bufptr ++; } if (buffer && bufptr < bufend) *bufptr = *ptr; bufptr ++; } if (val->string.language) { /* * Add "[language]" to end of string... */ if (buffer && bufptr < bufend) *bufptr = '['; bufptr ++; if (buffer && bufptr < bufend) strlcpy(bufptr, val->string.language, (size_t)(bufend - bufptr)); bufptr += strlen(val->string.language); if (buffer && bufptr < bufend) *bufptr = ']'; bufptr ++; } break; case IPP_TAG_BEGIN_COLLECTION : if (buffer && bufptr < bufend) bufptr += ipp_col_string(val->collection, bufptr, (size_t)(bufend - bufptr + 1)); else bufptr += ipp_col_string(val->collection, NULL, 0); break; case IPP_TAG_STRING : for (ptr = val->unknown.data, end = ptr + val->unknown.length; ptr < end; ptr ++) { if (*ptr == '\\' || _cups_isspace(*ptr)) { if (buffer && bufptr < bufend) *bufptr = '\\'; bufptr ++; if (buffer && bufptr < bufend) *bufptr = *ptr; bufptr ++; } else if (!isprint(*ptr & 255)) { if (buffer && bufptr < bufend) bufptr += snprintf(bufptr, (size_t)(bufend - bufptr + 1), "\\%03o", *ptr & 255); else bufptr += snprintf(temp, sizeof(temp), "\\%03o", *ptr & 255); } else { if (buffer && bufptr < bufend) *bufptr = *ptr; bufptr ++; } } break; default : ptr = ippTagString(attr->value_tag); if (buffer && bufptr < bufend) strlcpy(bufptr, ptr, (size_t)(bufend - bufptr + 1)); bufptr += strlen(ptr); break; } } if (buffer && bufptr < bufend) *bufptr = '\0'; else if (bufend) *bufend = '\0'; return ((size_t)(bufptr - buffer)); } /* * 'ippCreateRequestedArray()' - Create a CUPS array of attribute names from the * given requested-attributes attribute. * * This function creates a (sorted) CUPS array of attribute names matching the * list of "requested-attribute" values supplied in an IPP request. All IANA- * registered values are supported in addition to the CUPS IPP extension * attributes. * * The @code request@ parameter specifies the request message that was read from * the client. * * @code NULL@ is returned if all attributes should be returned. Otherwise, the * result is a sorted array of attribute names, where @code cupsArrayFind(array, * "attribute-name")@ will return a non-NULL pointer. The array must be freed * using the @code cupsArrayDelete@ function. * * @since CUPS 1.7/macOS 10.9@ */ cups_array_t * /* O - CUPS array or @code NULL@ if all */ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */ { int i, j, /* Looping vars */ count, /* Number of values */ added; /* Was name added? */ ipp_attribute_t *requested; /* requested-attributes attribute */ cups_array_t *ra; /* Requested attributes array */ const char *value; /* Current value */ /* The following lists come from the current IANA IPP registry of attributes */ static const char * const document_description[] = { /* document-description group */ "compression", "copies-actual", "cover-back-actual", "cover-front-actual", "current-page-order", "date-time-at-completed", "date-time-at-creation", "date-time-at-processing", "detailed-status-messages", "document-access-errors", "document-charset", "document-digital-signature", "document-format", "document-format-details", "document-format-detected", "document-format-version", "document-format-version-detected", "document-job-id", "document-job-uri", "document-message", "document-metadata", "document-name", "document-natural-language", "document-number", "document-printer-uri", "document-state", "document-state-message", "document-state-reasons", "document-uri", "document-uuid", "errors-count", "finishings-actual", "finishings-col-actual", "force-front-side-actual", "imposition-template-actual", "impressions", "impressions-completed", "impressions-completed-current-copy", "insert-sheet-actual", "k-octets", "k-octets-processed", "last-document", "materials-col-actual", /* IPP 3D */ "media-actual", "media-col-actual", "media-input-tray-check-actual", "media-sheets", "media-sheets-completed", "more-info", "multiple-object-handling-actual", /* IPP 3D */ "number-up-actual", "orientation-requested-actual", "output-bin-actual", "output-device-assigned", "overrides-actual", "page-delivery-actual", "page-order-received-actual", "page-ranges-actual", "pages", "pages-completed", "pages-completed-current-copy", "platform-temperature-actual", /* IPP 3D */ "presentation-direction-number-up-actual", "print-accuracy-actual", /* IPP 3D */ "print-base-actual", /* IPP 3D */ "print-color-mode-actual", "print-content-optimize-actual", "print-objects-actual", /* IPP 3D */ "print-quality-actual", "print-rendering-intent-actual", "print-scaling-actual", /* IPP Paid Printing */ "print-supports-actual", /* IPP 3D */ "printer-resolution-actual", "printer-up-time", "separator-sheets-actual", "sheet-completed-copy-number", "sides-actual", "time-at-completed", "time-at-creation", "time-at-processing", "x-image-position-actual", "x-image-shift-actual", "x-side1-image-shift-actual", "x-side2-image-shift-actual", "y-image-position-actual", "y-image-shift-actual", "y-side1-image-shift-actual", "y-side2-image-shift-actual" }; static const char * const document_template[] = { /* document-template group */ "copies", "copies-default", "copies-supported", "cover-back", "cover-back-default", "cover-back-supported", "cover-front", "cover-front-default", "cover-front-supported", "feed-orientation", "feed-orientation-default", "feed-orientation-supported", "finishings", "finishings-col", "finishings-col-database", "finishings-col-default", "finishings-col-ready", "finishings-col-supported", "finishings-default", "finishings-ready", "finishings-supported", "font-name-requested", "font-name-requested-default", "font-name-requested-supported", "font-size-requested", "font-size-requested-default", "font-size-requested-supported", "force-front-side", "force-front-side-default", "force-front-side-supported", "imposition-template", "imposition-template-default", "imposition-template-supported", "insert-after-page-number-supported", "insert-count-supported", "insert-sheet", "insert-sheet-default", "insert-sheet-supported", "material-amount-units-supported", /* IPP 3D */ "material-diameter-supported", /* IPP 3D */ "material-purpose-supported", /* IPP 3D */ "material-rate-supported", /* IPP 3D */ "material-rate-units-supported", /* IPP 3D */ "material-shell-thickness-supported",/* IPP 3D */ "material-temperature-supported", /* IPP 3D */ "material-type-supported", /* IPP 3D */ "materials-col", /* IPP 3D */ "materials-col-database", /* IPP 3D */ "materials-col-default", /* IPP 3D */ "materials-col-ready", /* IPP 3D */ "materials-col-supported", /* IPP 3D */ "max-materials-col-supported", /* IPP 3D */ "max-stitching-locations-supported", "media", "media-back-coating-supported", "media-bottom-margin-supported", "media-col", "media-col-default", "media-col-ready", "media-col-supported", "media-color-supported", "media-default", "media-front-coating-supported", "media-grain-supported", "media-hole-count-supported", "media-info-supported", "media-input-tray-check", "media-input-tray-check-default", "media-input-tray-check-supported", "media-key-supported", "media-left-margin-supported", "media-order-count-supported", "media-pre-printed-supported", "media-ready", "media-recycled-supported", "media-right-margin-supported", "media-size-supported", "media-source-supported", "media-supported", "media-thickness-supported", "media-top-margin-supported", "media-type-supported", "media-weight-metric-supported", "multiple-document-handling", "multiple-document-handling-default", "multiple-document-handling-supported", "multiple-object-handling", /* IPP 3D */ "multiple-object-handling-default", /* IPP 3D */ "multiple-object-handling-supported",/* IPP 3D */ "number-up", "number-up-default", "number-up-supported", "orientation-requested", "orientation-requested-default", "orientation-requested-supported", "output-mode", /* CUPS extension */ "output-mode-default", /* CUPS extension */ "output-mode-supported", /* CUPS extension */ "overrides", "overrides-supported", "page-delivery", "page-delivery-default", "page-delivery-supported", "page-order-received", "page-order-received-default", "page-order-received-supported", "page-ranges", "page-ranges-supported", "pages-per-subset", "pages-per-subset-supported", "pdl-init-file", "pdl-init-file-default", "pdl-init-file-entry-supported", "pdl-init-file-location-supported", "pdl-init-file-name-subdirectory-supported", "pdl-init-file-name-supported", "pdl-init-file-supported", "platform-temperature", /* IPP 3D */ "platform-temperature-default", /* IPP 3D */ "platform-temperature-supported", /* IPP 3D */ "presentation-direction-number-up", "presentation-direction-number-up-default", "presentation-direction-number-up-supported", "print-accuracy", /* IPP 3D */ "print-accuracy-default", /* IPP 3D */ "print-accuracy-supported", /* IPP 3D */ "print-base", /* IPP 3D */ "print-base-default", /* IPP 3D */ "print-base-supported", /* IPP 3D */ "print-color-mode", "print-color-mode-default", "print-color-mode-supported", "print-content-optimize", "print-content-optimize-default", "print-content-optimize-supported", "print-objects", /* IPP 3D */ "print-objects-default", /* IPP 3D */ "print-objects-supported", /* IPP 3D */ "print-quality", "print-quality-default", "print-quality-supported", "print-rendering-intent", "print-rendering-intent-default", "print-rendering-intent-supported", "print-scaling", /* IPP Paid Printing */ "print-scaling-default", /* IPP Paid Printing */ "print-scaling-supported", /* IPP Paid Printing */ "print-supports", /* IPP 3D */ "print-supports-default", /* IPP 3D */ "print-supports-supported", /* IPP 3D */ "printer-resolution", "printer-resolution-default", "printer-resolution-supported", "separator-sheets", "separator-sheets-default", "separator-sheets-supported", "sheet-collate", "sheet-collate-default", "sheet-collate-supported", "sides", "sides-default", "sides-supported", "stitching-locations-supported", "stitching-offset-supported", "x-image-position", "x-image-position-default", "x-image-position-supported", "x-image-shift", "x-image-shift-default", "x-image-shift-supported", "x-side1-image-shift", "x-side1-image-shift-default", "x-side1-image-shift-supported", "x-side2-image-shift", "x-side2-image-shift-default", "x-side2-image-shift-supported", "y-image-position", "y-image-position-default", "y-image-position-supported", "y-image-shift", "y-image-shift-default", "y-image-shift-supported", "y-side1-image-shift", "y-side1-image-shift-default", "y-side1-image-shift-supported", "y-side2-image-shift", "y-side2-image-shift-default", "y-side2-image-shift-supported" }; static const char * const job_description[] = { /* job-description group */ "compression-supplied", "copies-actual", "cover-back-actual", "cover-front-actual", "current-page-order", "date-time-at-completed", "date-time-at-creation", "date-time-at-processing", "destination-statuses", "document-charset-supplied", "document-digital-signature-supplied", "document-format-details-supplied", "document-format-supplied", "document-message-supplied", "document-metadata", "document-name-supplied", "document-natural-language-supplied", "document-overrides-actual", "errors-count", "finishings-actual", "finishings-col-actual", "force-front-side-actual", "imposition-template-actual", "impressions-completed-current-copy", "insert-sheet-actual", "job-account-id-actual", "job-accounting-sheets-actual", "job-accounting-user-id-actual", "job-attribute-fidelity", "job-charge-info", /* CUPS extension */ "job-collation-type", "job-collation-type-actual", "job-copies-actual", "job-cover-back-actual", "job-cover-front-actual", "job-detailed-status-message", "job-document-access-errors", "job-error-sheet-actual", "job-finishings-actual", "job-finishings-col-actual", "job-hold-until-actual", "job-id", "job-impressions", "job-impressions-completed", "job-k-octets", "job-k-octets-processed", "job-mandatory-attributes", "job-media-progress", /* CUPS extension */ "job-media-sheets", "job-media-sheets-completed", "job-message-from-operator", "job-more-info", "job-name", "job-originating-host-name", /* CUPS extension */ "job-originating-user-name", "job-originating-user-uri", "job-pages", "job-pages-completed", "job-pages-completed-current-copy", "job-printer-state-message", /* CUPS extension */ "job-printer-state-reasons", /* CUPS extension */ "job-printer-up-time", "job-printer-uri", "job-priority-actual", "job-save-printer-make-and-model", "job-sheet-message-actual", "job-sheets-actual", "job-sheets-col-actual", "job-state", "job-state-message", "job-state-reasons", "job-uri", "job-uuid", "materials-col-actual", /* IPP 3D */ "media-actual", "media-col-actual", "media-check-input-tray-actual", "multiple-document-handling-actual", "multiple-object-handling-actual", /* IPP 3D */ "number-of-documents", "number-of-intervening-jobs", "number-up-actual", "orientation-requested-actual", "original-requesting-user-name", "output-bin-actual", "output-device-assigned", "overrides-actual", "page-delivery-actual", "page-order-received-actual", "page-ranges-actual", "platform-temperature-actual", /* IPP 3D */ "presentation-direction-number-up-actual", "print-accuracy-actual", /* IPP 3D */ "print-base-actual", /* IPP 3D */ "print-color-mode-actual", "print-content-optimize-actual", "print-objects-actual", /* IPP 3D */ "print-quality-actual", "print-rendering-intent-actual", "print-scaling-actual", /* IPP Paid Printing */ "print-supports-actual", /* IPP 3D */ "printer-resolution-actual", "separator-sheets-actual", "sheet-collate-actual", "sheet-completed-copy-number", "sheet-completed-document-number", "sides-actual", "time-at-completed", "time-at-creation", "time-at-processing", "warnings-count", "x-image-position-actual", "x-image-shift-actual", "x-side1-image-shift-actual", "x-side2-image-shift-actual", "y-image-position-actual", "y-image-shift-actual", "y-side1-image-shift-actual", "y-side2-image-shift-actual" }; static const char * const job_template[] = { /* job-template group */ "accuracy-units-supported", /* IPP 3D */ "confirmation-sheet-print", /* IPP FaxOut */ "confirmation-sheet-print-default", "copies", "copies-default", "copies-supported", "cover-back", "cover-back-default", "cover-back-supported", "cover-front", "cover-front-default", "cover-front-supported", "cover-sheet-info", /* IPP FaxOut */ "cover-sheet-info-default", "cover-sheet-info-supported", "destination-uri-schemes-supported",/* IPP FaxOut */ "destination-uris", /* IPP FaxOut */ "destination-uris-supported", "feed-orientation", "feed-orientation-default", "feed-orientation-supported", "finishings", "finishings-col", "finishings-col-database", "finishings-col-default", "finishings-col-ready", "finishings-col-supported", "finishings-default", "finishings-ready", "finishings-supported", "font-name-requested", "font-name-requested-default", "font-name-requested-supported", "font-size-requested", "font-size-requested-default", "font-size-requested-supported", "force-front-side", "force-front-side-default", "force-front-side-supported", "imposition-template", "imposition-template-default", "imposition-template-supported", "insert-after-page-number-supported", "insert-count-supported", "insert-sheet", "insert-sheet-default", "insert-sheet-supported", "job-account-id", "job-account-id-default", "job-account-id-supported", "job-accounting-sheets" "job-accounting-sheets-default" "job-accounting-sheets-supported" "job-accounting-user-id", "job-accounting-user-id-default", "job-accounting-user-id-supported", "job-copies", "job-copies-default", "job-copies-supported", "job-cover-back", "job-cover-back-default", "job-cover-back-supported", "job-cover-front", "job-cover-front-default", "job-cover-front-supported", "job-delay-output-until", "job-delay-output-until-default", "job-delay-output-until-supported", "job-delay-output-until-time", "job-delay-output-until-time-default", "job-delay-output-until-time-supported", "job-error-action", "job-error-action-default", "job-error-action-supported", "job-error-sheet", "job-error-sheet-default", "job-error-sheet-supported", "job-finishings", "job-finishings-col", "job-finishings-col-default", "job-finishings-col-supported", "job-finishings-default", "job-finishings-supported", "job-hold-until", "job-hold-until-default", "job-hold-until-supported", "job-hold-until-time", "job-hold-until-time-default", "job-hold-until-time-supported", "job-message-to-operator", "job-message-to-operator-default", "job-message-to-operator-supported", "job-phone-number", "job-phone-number-default", "job-phone-number-supported", "job-priority", "job-priority-default", "job-priority-supported", "job-recipient-name", "job-recipient-name-default", "job-recipient-name-supported", "job-save-disposition", "job-save-disposition-default", "job-save-disposition-supported", "job-sheets", "job-sheets-col", "job-sheets-col-default", "job-sheets-col-supported", "job-sheets-default", "job-sheets-supported", "logo-uri-schemes-supported", "material-amount-units-supported", /* IPP 3D */ "material-diameter-supported", /* IPP 3D */ "material-purpose-supported", /* IPP 3D */ "material-rate-supported", /* IPP 3D */ "material-rate-units-supported", /* IPP 3D */ "material-shell-thickness-supported",/* IPP 3D */ "material-temperature-supported", /* IPP 3D */ "material-type-supported", /* IPP 3D */ "materials-col", /* IPP 3D */ "materials-col-database", /* IPP 3D */ "materials-col-default", /* IPP 3D */ "materials-col-ready", /* IPP 3D */ "materials-col-supported", /* IPP 3D */ "max-materials-col-supported", /* IPP 3D */ "max-save-info-supported", "max-stitching-locations-supported", "media", "media-back-coating-supported", "media-bottom-margin-supported", "media-col", "media-col-default", "media-col-ready", "media-col-supported", "media-color-supported", "media-default", "media-front-coating-supported", "media-grain-supported", "media-hole-count-supported", "media-info-supported", "media-input-tray-check", "media-input-tray-check-default", "media-input-tray-check-supported", "media-key-supported", "media-left-margin-supported", "media-order-count-supported", "media-pre-printed-supported", "media-ready", "media-recycled-supported", "media-right-margin-supported", "media-size-supported", "media-source-supported", "media-supported", "media-thickness-supported", "media-top-margin-supported", "media-type-supported", "media-weight-metric-supported", "multiple-document-handling", "multiple-document-handling-default", "multiple-document-handling-supported", "multiple-object-handling", /* IPP 3D */ "multiple-object-handling-default", /* IPP 3D */ "multiple-object-handling-supported",/* IPP 3D */ "number-of-retries", /* IPP FaxOut */ "number-of-retries-default", "number-of-retries-supported", "number-up", "number-up-default", "number-up-supported", "orientation-requested", "orientation-requested-default", "orientation-requested-supported", "output-bin", "output-bin-default", "output-bin-supported", "output-device", "output-device-default", "output-device-supported", "output-mode", /* CUPS extension */ "output-mode-default", /* CUPS extension */ "output-mode-supported", /* CUPS extension */ "overrides", "overrides-supported", "page-delivery", "page-delivery-default", "page-delivery-supported", "page-order-received", "page-order-received-default", "page-order-received-supported", "page-ranges", "page-ranges-supported", "pages-per-subset", "pages-per-subset-supported", "pdl-init-file", "pdl-init-file-default", "pdl-init-file-entry-supported", "pdl-init-file-location-supported", "pdl-init-file-name-subdirectory-supported", "pdl-init-file-name-supported", "pdl-init-file-supported", "platform-temperature", /* IPP 3D */ "platform-temperature-default", /* IPP 3D */ "platform-temperature-supported", /* IPP 3D */ "presentation-direction-number-up", "presentation-direction-number-up-default", "presentation-direction-number-up-supported", "print-accuracy", /* IPP 3D */ "print-accuracy-default", /* IPP 3D */ "print-accuracy-supported", /* IPP 3D */ "print-base", /* IPP 3D */ "print-base-default", /* IPP 3D */ "print-base-supported", /* IPP 3D */ "print-color-mode", "print-color-mode-default", "print-color-mode-supported", "print-content-optimize", "print-content-optimize-default", "print-content-optimize-supported", "print-objects", /* IPP 3D */ "print-objects-default", /* IPP 3D */ "print-objects-supported", /* IPP 3D */ "print-quality", "print-quality-default", "print-quality-supported", "print-rendering-intent", "print-rendering-intent-default", "print-rendering-intent-supported", "print-scaling", /* IPP Paid Printing */ "print-scaling-default", /* IPP Paid Printing */ "print-scaling-supported", /* IPP Paid Printing */ "print-supports", /* IPP 3D */ "print-supports-default", /* IPP 3D */ "print-supports-supported", /* IPP 3D */ "printer-resolution", "printer-resolution-default", "printer-resolution-supported", "proof-print", "proof-print-default", "proof-print-supported", "retry-interval", /* IPP FaxOut */ "retry-interval-default", "retry-interval-supported", "retry-timeout", /* IPP FaxOut */ "retry-timeout-default", "retry-timeout-supported", "save-disposition-supported", "save-document-format-default", "save-document-format-supported", "save-location-default", "save-location-supported", "save-name-subdirectory-supported", "save-name-supported", "separator-sheets", "separator-sheets-default", "separator-sheets-supported", "sheet-collate", "sheet-collate-default", "sheet-collate-supported", "sides", "sides-default", "sides-supported", "stitching-locations-supported", "stitching-offset-supported", "x-image-position", "x-image-position-default", "x-image-position-supported", "x-image-shift", "x-image-shift-default", "x-image-shift-supported", "x-side1-image-shift", "x-side1-image-shift-default", "x-side1-image-shift-supported", "x-side2-image-shift", "x-side2-image-shift-default", "x-side2-image-shift-supported", "y-image-position", "y-image-position-default", "y-image-position-supported", "y-image-shift", "y-image-shift-default", "y-image-shift-supported", "y-side1-image-shift", "y-side1-image-shift-default", "y-side1-image-shift-supported", "y-side2-image-shift", "y-side2-image-shift-default", "y-side2-image-shift-supported" }; static const char * const printer_description[] = { /* printer-description group */ "auth-info-required", /* CUPS extension */ "charset-configured", "charset-supported", "color-supported", "compression-supported", "device-service-count", "device-uri", /* CUPS extension */ "device-uuid", "document-charset-default", "document-charset-supported", "document-creation-attributes-supported", "document-digital-signature-default", "document-digital-signature-supported", "document-format-default", "document-format-details-default", "document-format-details-supported", "document-format-supported", "document-format-varying-attributes", "document-format-version-default", "document-format-version-supported", "document-natural-language-default", "document-natural-language-supported", "document-password-supported", "generated-natural-language-supported", "identify-actions-default", "identify-actions-supported", "input-source-supported", "ipp-features-supported", "ipp-versions-supported", "ippget-event-life", "job-authorization-uri-supported", /* CUPS extension */ "job-constraints-supported", "job-creation-attributes-supported", "job-finishings-col-ready", "job-finishings-ready", "job-ids-supported", "job-impressions-supported", "job-k-limit", /* CUPS extension */ "job-k-octets-supported", "job-media-sheets-supported", "job-page-limit", /* CUPS extension */ "job-password-encryption-supported", "job-password-supported", "job-presets-supported", /* IPP Presets */ "job-quota-period", /* CUPS extension */ "job-resolvers-supported", "job-settable-attributes-supported", "job-spooling-supported", "job-triggers-supported", /* IPP Presets */ "jpeg-k-octets-supported", /* CUPS extension */ "jpeg-x-dimension-supported", /* CUPS extension */ "jpeg-y-dimension-supported", /* CUPS extension */ "landscape-orientation-requested-preferred", /* CUPS extension */ "marker-change-time", /* CUPS extension */ "marker-colors", /* CUPS extension */ "marker-high-levels", /* CUPS extension */ "marker-levels", /* CUPS extension */ "marker-low-levels", /* CUPS extension */ "marker-message", /* CUPS extension */ "marker-names", /* CUPS extension */ "marker-types", /* CUPS extension */ "member-names", /* CUPS extension */ "member-uris", /* CUPS extension */ "multiple-destination-uris-supported",/* IPP FaxOut */ "multiple-document-jobs-supported", "multiple-operation-time-out", "multiple-operation-time-out-action", "natural-language-configured", "operations-supported", "pages-per-minute", "pages-per-minute-color", "pdf-k-octets-supported", /* CUPS extension */ "pdf-features-supported", /* IPP 3D */ "pdf-versions-supported", /* CUPS extension */ "pdl-override-supported", "port-monitor", /* CUPS extension */ "port-monitor-supported", /* CUPS extension */ "preferred-attributes-supported", "printer-alert", "printer-alert-description", "printer-charge-info", "printer-charge-info-uri", "printer-commands", /* CUPS extension */ "printer-config-change-date-time", "printer-config-change-time", "printer-current-time", "printer-detailed-status-messages", "printer-device-id", "printer-dns-sd-name", /* CUPS extension */ "printer-driver-installer", "printer-fax-log-uri", /* IPP FaxOut */ "printer-fax-modem-info", /* IPP FaxOut */ "printer-fax-modem-name", /* IPP FaxOut */ "printer-fax-modem-number", /* IPP FaxOut */ "printer-firmware-name", /* PWG 5110.1 */ "printer-firmware-patches", /* PWG 5110.1 */ "printer-firmware-string-version", /* PWG 5110.1 */ "printer-firmware-version", /* PWG 5110.1 */ "printer-geo-location", "printer-get-attributes-supported", "printer-icc-profiles", "printer-icons", "printer-id", /* CUPS extension */ "printer-info", "printer-input-tray", /* IPP JPS3 */ "printer-is-accepting-jobs", "printer-is-shared", /* CUPS extension */ "printer-is-temporary", /* CUPS extension */ "printer-kind", /* IPP Paid Printing */ "printer-location", "printer-make-and-model", "printer-mandatory-job-attributes", "printer-message-date-time", "printer-message-from-operator", "printer-message-time", "printer-more-info", "printer-more-info-manufacturer", "printer-name", "printer-native-formats", "printer-organization", "printer-organizational-unit", "printer-output-tray", /* IPP JPS3 */ "printer-queue-id", /* CUPS extension */ "printer-settable-attributes-supported", "printer-state", "printer-state-change-date-time", "printer-state-change-time", "printer-state-message", "printer-state-reasons", "printer-supply", "printer-supply-description", "printer-supply-info-uri", "printer-type", /* CUPS extension */ "printer-up-time", "printer-uri-supported", "printer-uuid", "printer-xri-supported", "pwg-raster-document-resolution-supported", "pwg-raster-document-sheet-back", "pwg-raster-document-type-supported", "queued-job-count", "reference-uri-schemes-supported", "repertoire-supported", "requesting-user-name-allowed", /* CUPS extension */ "requesting-user-name-denied", /* CUPS extension */ "requesting-user-uri-supported", "subordinate-printers-supported", "urf-supported", /* CUPS extension */ "uri-authentication-supported", "uri-security-supported", "user-defined-value-supported", "which-jobs-supported", "xri-authentication-supported", "xri-security-supported", "xri-uri-scheme-supported" }; static const char * const subscription_description[] = { /* subscription-description group */ "notify-job-id", "notify-lease-expiration-time", "notify-printer-up-time", "notify-printer-uri", "notify-sequence-number", "notify-subscriber-user-name", "notify-subscriber-user-uri", "notify-subscription-id", "subscriptions-uuid" }; static const char * const subscription_template[] = { /* subscription-template group */ "notify-attributes", "notify-attributes-supported", "notify-charset", "notify-events", "notify-events-default", "notify-events-supported", "notify-lease-duration", "notify-lease-duration-default", "notify-lease-duration-supported", "notify-max-events-supported", "notify-natural-language", "notify-pull-method", "notify-pull-method-supported", "notify-recipient-uri", "notify-schemes-supported", "notify-time-interval", "notify-user-data" }; /* * Get the requested-attributes attribute... */ if ((requested = ippFindAttribute(request, "requested-attributes", IPP_TAG_KEYWORD)) == NULL) { /* * The Get-Jobs operation defaults to "job-id" and "job-uri", all others * default to "all"... */ if (ippGetOperation(request) == IPP_OP_GET_JOBS) { ra = cupsArrayNew((cups_array_func_t)strcmp, NULL); cupsArrayAdd(ra, "job-id"); cupsArrayAdd(ra, "job-uri"); return (ra); } else return (NULL); } /* * If the attribute contains a single "all" keyword, return NULL... */ count = ippGetCount(requested); if (count == 1 && !strcmp(ippGetString(requested, 0, NULL), "all")) return (NULL); /* * Create an array using "strcmp" as the comparison function... */ ra = cupsArrayNew((cups_array_func_t)strcmp, NULL); for (i = 0; i < count; i ++) { added = 0; value = ippGetString(requested, i, NULL); if (!strcmp(value, "document-description") || !strcmp(value, "all")) { for (j = 0; j < (int)(sizeof(document_description) / sizeof(document_description[0])); j ++) cupsArrayAdd(ra, (void *)document_description[j]); added = 1; } if (!strcmp(value, "document-template") || !strcmp(value, "all")) { for (j = 0; j < (int)(sizeof(document_template) / sizeof(document_template[0])); j ++) cupsArrayAdd(ra, (void *)document_template[j]); added = 1; } if (!strcmp(value, "job-description") || !strcmp(value, "all")) { for (j = 0; j < (int)(sizeof(job_description) / sizeof(job_description[0])); j ++) cupsArrayAdd(ra, (void *)job_description[j]); added = 1; } if (!strcmp(value, "job-template") || !strcmp(value, "all")) { for (j = 0; j < (int)(sizeof(job_template) / sizeof(job_template[0])); j ++) cupsArrayAdd(ra, (void *)job_template[j]); added = 1; } if (!strcmp(value, "printer-description") || !strcmp(value, "all")) { for (j = 0; j < (int)(sizeof(printer_description) / sizeof(printer_description[0])); j ++) cupsArrayAdd(ra, (void *)printer_description[j]); added = 1; } if (!strcmp(value, "subscription-description") || !strcmp(value, "all")) { for (j = 0; j < (int)(sizeof(subscription_description) / sizeof(subscription_description[0])); j ++) cupsArrayAdd(ra, (void *)subscription_description[j]); added = 1; } if (!strcmp(value, "subscription-template") || !strcmp(value, "all")) { for (j = 0; j < (int)(sizeof(subscription_template) / sizeof(subscription_template[0])); j ++) cupsArrayAdd(ra, (void *)subscription_template[j]); added = 1; } if (!added) cupsArrayAdd(ra, (void *)value); } return (ra); } /* * 'ippEnumString()' - Return a string corresponding to the enum value. */ const char * /* O - Enum string */ ippEnumString(const char *attrname, /* I - Attribute name */ int enumvalue) /* I - Enum value */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ /* * Check for standard enum values... */ if (!strcmp(attrname, "document-state") && enumvalue >= 3 && enumvalue < (3 + (int)(sizeof(ipp_document_states) / sizeof(ipp_document_states[0])))) return (ipp_document_states[enumvalue - 3]); else if (!strcmp(attrname, "finishings") || !strcmp(attrname, "finishings-actual") || !strcmp(attrname, "finishings-default") || !strcmp(attrname, "finishings-ready") || !strcmp(attrname, "finishings-supported") || !strcmp(attrname, "job-finishings") || !strcmp(attrname, "job-finishings-default") || !strcmp(attrname, "job-finishings-supported")) { if (enumvalue >= 3 && enumvalue < (3 + (int)(sizeof(ipp_finishings) / sizeof(ipp_finishings[0])))) return (ipp_finishings[enumvalue - 3]); else if (enumvalue >= 0x40000000 && enumvalue <= (0x40000000 + (int)(sizeof(ipp_finishings_vendor) / sizeof(ipp_finishings_vendor[0])))) return (ipp_finishings_vendor[enumvalue - 0x40000000]); } else if ((!strcmp(attrname, "job-collation-type") || !strcmp(attrname, "job-collation-type-actual")) && enumvalue >= 3 && enumvalue < (3 + (int)(sizeof(ipp_job_collation_types) / sizeof(ipp_job_collation_types[0])))) return (ipp_job_collation_types[enumvalue - 3]); else if (!strcmp(attrname, "job-state") && enumvalue >= IPP_JSTATE_PENDING && enumvalue <= IPP_JSTATE_COMPLETED) return (ipp_job_states[enumvalue - IPP_JSTATE_PENDING]); else if (!strcmp(attrname, "operations-supported")) return (ippOpString((ipp_op_t)enumvalue)); else if ((!strcmp(attrname, "orientation-requested") || !strcmp(attrname, "orientation-requested-actual") || !strcmp(attrname, "orientation-requested-default") || !strcmp(attrname, "orientation-requested-supported")) && enumvalue >= 3 && enumvalue < (3 + (int)(sizeof(ipp_orientation_requesteds) / sizeof(ipp_orientation_requesteds[0])))) return (ipp_orientation_requesteds[enumvalue - 3]); else if ((!strcmp(attrname, "print-quality") || !strcmp(attrname, "print-quality-actual") || !strcmp(attrname, "print-quality-default") || !strcmp(attrname, "print-quality-supported")) && enumvalue >= 3 && enumvalue < (3 + (int)(sizeof(ipp_print_qualities) / sizeof(ipp_print_qualities[0])))) return (ipp_print_qualities[enumvalue - 3]); else if (!strcmp(attrname, "printer-state") && enumvalue >= IPP_PSTATE_IDLE && enumvalue <= IPP_PSTATE_STOPPED) return (ipp_printer_states[enumvalue - IPP_PSTATE_IDLE]); /* * Not a standard enum value, just return the decimal equivalent... */ snprintf(cg->ipp_unknown, sizeof(cg->ipp_unknown), "%d", enumvalue); return (cg->ipp_unknown); } /* * 'ippEnumValue()' - Return the value associated with a given enum string. */ int /* O - Enum value or -1 if unknown */ ippEnumValue(const char *attrname, /* I - Attribute name */ const char *enumstring) /* I - Enum string */ { int i, /* Looping var */ num_strings; /* Number of strings to compare */ const char * const *strings; /* Strings to compare */ /* * If the string is just a number, return it... */ if (isdigit(*enumstring & 255)) return ((int)strtol(enumstring, NULL, 0)); /* * Otherwise look up the string... */ if (!strcmp(attrname, "document-state")) { num_strings = (int)(sizeof(ipp_document_states) / sizeof(ipp_document_states[0])); strings = ipp_document_states; } else if (!strcmp(attrname, "finishings") || !strcmp(attrname, "finishings-actual") || !strcmp(attrname, "finishings-default") || !strcmp(attrname, "finishings-ready") || !strcmp(attrname, "finishings-supported")) { for (i = 0; i < (int)(sizeof(ipp_finishings_vendor) / sizeof(ipp_finishings_vendor[0])); i ++) if (!strcmp(enumstring, ipp_finishings_vendor[i])) return (i + 0x40000000); num_strings = (int)(sizeof(ipp_finishings) / sizeof(ipp_finishings[0])); strings = ipp_finishings; } else if (!strcmp(attrname, "job-collation-type") || !strcmp(attrname, "job-collation-type-actual")) { num_strings = (int)(sizeof(ipp_job_collation_types) / sizeof(ipp_job_collation_types[0])); strings = ipp_job_collation_types; } else if (!strcmp(attrname, "job-state")) { num_strings = (int)(sizeof(ipp_job_states) / sizeof(ipp_job_states[0])); strings = ipp_job_states; } else if (!strcmp(attrname, "operations-supported")) return (ippOpValue(enumstring)); else if (!strcmp(attrname, "orientation-requested") || !strcmp(attrname, "orientation-requested-actual") || !strcmp(attrname, "orientation-requested-default") || !strcmp(attrname, "orientation-requested-supported")) { num_strings = (int)(sizeof(ipp_orientation_requesteds) / sizeof(ipp_orientation_requesteds[0])); strings = ipp_orientation_requesteds; } else if (!strcmp(attrname, "print-quality") || !strcmp(attrname, "print-quality-actual") || !strcmp(attrname, "print-quality-default") || !strcmp(attrname, "print-quality-supported")) { num_strings = (int)(sizeof(ipp_print_qualities) / sizeof(ipp_print_qualities[0])); strings = ipp_print_qualities; } else if (!strcmp(attrname, "printer-state")) { num_strings = (int)(sizeof(ipp_printer_states) / sizeof(ipp_printer_states[0])); strings = ipp_printer_states; } else return (-1); for (i = 0; i < num_strings; i ++) if (!strcmp(enumstring, strings[i])) return (i + 3); return (-1); } /* * 'ippErrorString()' - Return a name for the given status code. */ const char * /* O - Text string */ ippErrorString(ipp_status_t error) /* I - Error status */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ /* * See if the error code is a known value... */ if (error >= IPP_STATUS_OK && error <= IPP_STATUS_OK_EVENTS_COMPLETE) return (ipp_status_oks[error]); else if (error == IPP_STATUS_REDIRECTION_OTHER_SITE) return ("redirection-other-site"); else if (error == IPP_STATUS_CUPS_SEE_OTHER) return ("cups-see-other"); else if (error >= IPP_STATUS_ERROR_BAD_REQUEST && error <= IPP_STATUS_ERROR_ACCOUNT_AUTHORIZATION_FAILED) return (ipp_status_400s[error - IPP_STATUS_ERROR_BAD_REQUEST]); else if (error >= 0x480 && error <= IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED) return (ipp_status_480s[error - 0x0480]); else if (error >= IPP_STATUS_ERROR_INTERNAL && error <= IPP_STATUS_ERROR_TOO_MANY_DOCUMENTS) return (ipp_status_500s[error - IPP_STATUS_ERROR_INTERNAL]); else if (error >= IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED && error <= IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED) return (ipp_status_1000s[error - IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED]); /* * No, build an "0xxxxx" error string... */ sprintf(cg->ipp_unknown, "0x%04x", error); return (cg->ipp_unknown); } /* * 'ippErrorValue()' - Return a status code for the given name. * * @since CUPS 1.2/macOS 10.5@ */ ipp_status_t /* O - IPP status code */ ippErrorValue(const char *name) /* I - Name */ { size_t i; /* Looping var */ for (i = 0; i < (sizeof(ipp_status_oks) / sizeof(ipp_status_oks[0])); i ++) if (!_cups_strcasecmp(name, ipp_status_oks[i])) return ((ipp_status_t)i); if (!_cups_strcasecmp(name, "redirection-other-site")) return (IPP_STATUS_REDIRECTION_OTHER_SITE); if (!_cups_strcasecmp(name, "cups-see-other")) return (IPP_STATUS_CUPS_SEE_OTHER); for (i = 0; i < (sizeof(ipp_status_400s) / sizeof(ipp_status_400s[0])); i ++) if (!_cups_strcasecmp(name, ipp_status_400s[i])) return ((ipp_status_t)(i + 0x400)); for (i = 0; i < (sizeof(ipp_status_480s) / sizeof(ipp_status_480s[0])); i ++) if (!_cups_strcasecmp(name, ipp_status_480s[i])) return ((ipp_status_t)(i + 0x480)); for (i = 0; i < (sizeof(ipp_status_500s) / sizeof(ipp_status_500s[0])); i ++) if (!_cups_strcasecmp(name, ipp_status_500s[i])) return ((ipp_status_t)(i + 0x500)); for (i = 0; i < (sizeof(ipp_status_1000s) / sizeof(ipp_status_1000s[0])); i ++) if (!_cups_strcasecmp(name, ipp_status_1000s[i])) return ((ipp_status_t)(i + 0x1000)); return ((ipp_status_t)-1); } /* * 'ippOpString()' - Return a name for the given operation id. * * @since CUPS 1.2/macOS 10.5@ */ const char * /* O - Name */ ippOpString(ipp_op_t op) /* I - Operation ID */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ /* * See if the operation ID is a known value... */ if (op >= IPP_OP_PRINT_JOB && op < (ipp_op_t)(sizeof(ipp_std_ops) / sizeof(ipp_std_ops[0]))) return (ipp_std_ops[op]); else if (op == IPP_OP_PRIVATE) return ("windows-ext"); else if (op >= IPP_OP_CUPS_GET_DEFAULT && op <= IPP_OP_CUPS_GET_PPD) return (ipp_cups_ops[op - IPP_OP_CUPS_GET_DEFAULT]); else if (op >= IPP_OP_CUPS_GET_DOCUMENT && op <= IPP_OP_CUPS_CREATE_LOCAL_PRINTER) return (ipp_cups_ops2[op - IPP_OP_CUPS_GET_DOCUMENT]); /* * No, build an "0xxxxx" operation string... */ sprintf(cg->ipp_unknown, "0x%04x", op); return (cg->ipp_unknown); } /* * 'ippOpValue()' - Return an operation id for the given name. * * @since CUPS 1.2/macOS 10.5@ */ ipp_op_t /* O - Operation ID */ ippOpValue(const char *name) /* I - Textual name */ { size_t i; /* Looping var */ if (!strncmp(name, "0x", 2)) return ((ipp_op_t)strtol(name + 2, NULL, 16)); for (i = 0; i < (sizeof(ipp_std_ops) / sizeof(ipp_std_ops[0])); i ++) if (!_cups_strcasecmp(name, ipp_std_ops[i])) return ((ipp_op_t)i); if (!_cups_strcasecmp(name, "windows-ext")) return (IPP_OP_PRIVATE); for (i = 0; i < (sizeof(ipp_cups_ops) / sizeof(ipp_cups_ops[0])); i ++) if (!_cups_strcasecmp(name, ipp_cups_ops[i])) return ((ipp_op_t)(i + 0x4001)); for (i = 0; i < (sizeof(ipp_cups_ops2) / sizeof(ipp_cups_ops2[0])); i ++) if (!_cups_strcasecmp(name, ipp_cups_ops2[i])) return ((ipp_op_t)(i + 0x4027)); if (!_cups_strcasecmp(name, "Create-Job-Subscription")) return (IPP_OP_CREATE_JOB_SUBSCRIPTIONS); if (!_cups_strcasecmp(name, "Create-Printer-Subscription")) return (IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS); if (!_cups_strcasecmp(name, "CUPS-Add-Class")) return (IPP_OP_CUPS_ADD_MODIFY_CLASS); if (!_cups_strcasecmp(name, "CUPS-Add-Printer")) return (IPP_OP_CUPS_ADD_MODIFY_PRINTER); return (IPP_OP_CUPS_INVALID); } /* * 'ippPort()' - Return the default IPP port number. */ int /* O - Port number */ ippPort(void) { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ DEBUG_puts("ippPort()"); if (!cg->ipp_port) _cupsSetDefaults(); DEBUG_printf(("1ippPort: Returning %d...", cg->ipp_port)); return (cg->ipp_port); } /* * 'ippSetPort()' - Set the default port number. */ void ippSetPort(int p) /* I - Port number to use */ { DEBUG_printf(("ippSetPort(p=%d)", p)); _cupsGlobals()->ipp_port = p; } /* * 'ippStateString()' - Return the name corresponding to a state value. * * @since CUPS 2.0/OS 10.10@ */ const char * /* O - State name */ ippStateString(ipp_state_t state) /* I - State value */ { if (state >= IPP_STATE_ERROR && state <= IPP_STATE_DATA) return (ipp_states[state - IPP_STATE_ERROR]); else return ("UNKNOWN"); } /* * 'ippTagString()' - Return the tag name corresponding to a tag value. * * The returned names are defined in RFC 8011 and the IANA IPP Registry. * * @since CUPS 1.4/macOS 10.6@ */ const char * /* O - Tag name */ ippTagString(ipp_tag_t tag) /* I - Tag value */ { tag &= IPP_TAG_CUPS_MASK; if (tag < (ipp_tag_t)(sizeof(ipp_tag_names) / sizeof(ipp_tag_names[0]))) return (ipp_tag_names[tag]); else return ("UNKNOWN"); } /* * 'ippTagValue()' - Return the tag value corresponding to a tag name. * * The tag names are defined in RFC 8011 and the IANA IPP Registry. * * @since CUPS 1.4/macOS 10.6@ */ ipp_tag_t /* O - Tag value */ ippTagValue(const char *name) /* I - Tag name */ { size_t i; /* Looping var */ for (i = 0; i < (sizeof(ipp_tag_names) / sizeof(ipp_tag_names[0])); i ++) if (!_cups_strcasecmp(name, ipp_tag_names[i])) return ((ipp_tag_t)i); if (!_cups_strcasecmp(name, "operation")) return (IPP_TAG_OPERATION); else if (!_cups_strcasecmp(name, "job")) return (IPP_TAG_JOB); else if (!_cups_strcasecmp(name, "printer")) return (IPP_TAG_PRINTER); else if (!_cups_strcasecmp(name, "unsupported")) return (IPP_TAG_UNSUPPORTED_GROUP); else if (!_cups_strcasecmp(name, "subscription")) return (IPP_TAG_SUBSCRIPTION); else if (!_cups_strcasecmp(name, "event")) return (IPP_TAG_EVENT_NOTIFICATION); else if (!_cups_strcasecmp(name, "language")) return (IPP_TAG_LANGUAGE); else if (!_cups_strcasecmp(name, "mimetype")) return (IPP_TAG_MIMETYPE); else if (!_cups_strcasecmp(name, "name")) return (IPP_TAG_NAME); else if (!_cups_strcasecmp(name, "text")) return (IPP_TAG_TEXT); else if (!_cups_strcasecmp(name, "begCollection")) return (IPP_TAG_BEGIN_COLLECTION); else return (IPP_TAG_ZERO); } /* * 'ipp_col_string()' - Convert a collection to a string. */ static size_t /* O - Number of bytes */ ipp_col_string(ipp_t *col, /* I - Collection attribute */ char *buffer, /* I - Buffer or NULL */ size_t bufsize) /* I - Size of buffer */ { char *bufptr, /* Position in buffer */ *bufend, /* End of buffer */ prefix = '{', /* Prefix character */ temp[256]; /* Temporary string */ ipp_attribute_t *attr; /* Current member attribute */ if (!col) { if (buffer) *buffer = '\0'; return (0); } bufptr = buffer; bufend = buffer + bufsize - 1; for (attr = col->attrs; attr; attr = attr->next) { if (!attr->name) continue; if (buffer && bufptr < bufend) *bufptr = prefix; bufptr ++; prefix = ' '; if (buffer && bufptr < bufend) bufptr += snprintf(bufptr, (size_t)(bufend - bufptr + 1), "%s=", attr->name); else bufptr += strlen(attr->name) + 1; if (buffer && bufptr < bufend) bufptr += ippAttributeString(attr, bufptr, (size_t)(bufend - bufptr + 1)); else bufptr += ippAttributeString(attr, temp, sizeof(temp)); } if (prefix == '{') { if (buffer && bufptr < bufend) *bufptr = prefix; bufptr ++; } if (buffer && bufptr < bufend) *bufptr = '}'; bufptr ++; return ((size_t)(bufptr - buffer)); } cups-2.2.7/cups/ipp.c000664 000765 000024 00000561105 13255074424 015071 0ustar00msweetstaff000000 000000 /* * Internet Printing Protocol functions for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include #ifdef WIN32 # include #endif /* WIN32 */ /* * Local functions... */ static ipp_attribute_t *ipp_add_attr(ipp_t *ipp, const char *name, ipp_tag_t group_tag, ipp_tag_t value_tag, int num_values); static void ipp_free_values(ipp_attribute_t *attr, int element, int count); static char *ipp_get_code(const char *locale, char *buffer, size_t bufsize) __attribute__((nonnull(1,2))); static char *ipp_lang_code(const char *locale, char *buffer, size_t bufsize) __attribute__((nonnull(1,2))); static size_t ipp_length(ipp_t *ipp, int collection); static ssize_t ipp_read_http(http_t *http, ipp_uchar_t *buffer, size_t length); static ssize_t ipp_read_file(int *fd, ipp_uchar_t *buffer, size_t length); static void ipp_set_error(ipp_status_t status, const char *format, ...); static _ipp_value_t *ipp_set_value(ipp_t *ipp, ipp_attribute_t **attr, int element); static ssize_t ipp_write_file(int *fd, ipp_uchar_t *buffer, size_t length); /* * '_cupsBufferGet()' - Get a read/write buffer. */ char * /* O - Buffer */ _cupsBufferGet(size_t size) /* I - Size required */ { _cups_buffer_t *buffer; /* Current buffer */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ for (buffer = cg->cups_buffers; buffer; buffer = buffer->next) if (!buffer->used && buffer->size >= size) break; if (!buffer) { if ((buffer = malloc(sizeof(_cups_buffer_t) + size - 1)) == NULL) return (NULL); buffer->next = cg->cups_buffers; buffer->size = size; cg->cups_buffers = buffer; } buffer->used = 1; return (buffer->d); } /* * '_cupsBufferRelease()' - Release a read/write buffer. */ void _cupsBufferRelease(char *b) /* I - Buffer to release */ { _cups_buffer_t *buffer; /* Buffer */ /* * Mark this buffer as unused... */ buffer = (_cups_buffer_t *)(b - offsetof(_cups_buffer_t, d)); buffer->used = 0; } /* * 'ippAddBoolean()' - Add a boolean attribute to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). */ ipp_attribute_t * /* O - New attribute */ ippAddBoolean(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ const char *name, /* I - Name of attribute */ char value) /* I - Value of attribute */ { ipp_attribute_t *attr; /* New attribute */ DEBUG_printf(("ippAddBoolean(ipp=%p, group=%02x(%s), name=\"%s\", value=%d)", (void *)ipp, group, ippTagString(group), name, value)); /* * Range check input... */ if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE) return (NULL); /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, IPP_TAG_BOOLEAN, 1)) == NULL) return (NULL); attr->values[0].boolean = value; return (attr); } /* * 'ippAddBooleans()' - Add an array of boolean values. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). */ ipp_attribute_t * /* O - New attribute */ ippAddBooleans(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ const char *name, /* I - Name of attribute */ int num_values, /* I - Number of values */ const char *values) /* I - Values */ { int i; /* Looping var */ ipp_attribute_t *attr; /* New attribute */ _ipp_value_t *value; /* Current value */ DEBUG_printf(("ippAddBooleans(ipp=%p, group=%02x(%s), name=\"%s\", num_values=%d, values=%p)", (void *)ipp, group, ippTagString(group), name, num_values, (void *)values)); /* * Range check input... */ if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || num_values < 1) return (NULL); /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, IPP_TAG_BOOLEAN, num_values)) == NULL) return (NULL); if (values) { for (i = num_values, value = attr->values; i > 0; i --, value ++) value->boolean = *values++; } return (attr); } /* * 'ippAddCollection()' - Add a collection value. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). * * @since CUPS 1.1.19/macOS 10.3@ */ ipp_attribute_t * /* O - New attribute */ ippAddCollection(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ const char *name, /* I - Name of attribute */ ipp_t *value) /* I - Value */ { ipp_attribute_t *attr; /* New attribute */ DEBUG_printf(("ippAddCollection(ipp=%p, group=%02x(%s), name=\"%s\", value=%p)", (void *)ipp, group, ippTagString(group), name, (void *)value)); /* * Range check input... */ if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE) return (NULL); /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, IPP_TAG_BEGIN_COLLECTION, 1)) == NULL) return (NULL); attr->values[0].collection = value; if (value) value->use ++; return (attr); } /* * 'ippAddCollections()' - Add an array of collection values. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). * * @since CUPS 1.1.19/macOS 10.3@ */ ipp_attribute_t * /* O - New attribute */ ippAddCollections( ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ const char *name, /* I - Name of attribute */ int num_values, /* I - Number of values */ const ipp_t **values) /* I - Values */ { int i; /* Looping var */ ipp_attribute_t *attr; /* New attribute */ _ipp_value_t *value; /* Current value */ DEBUG_printf(("ippAddCollections(ipp=%p, group=%02x(%s), name=\"%s\", num_values=%d, values=%p)", (void *)ipp, group, ippTagString(group), name, num_values, (void *)values)); /* * Range check input... */ if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || num_values < 1) return (NULL); /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, IPP_TAG_BEGIN_COLLECTION, num_values)) == NULL) return (NULL); if (values) { for (i = num_values, value = attr->values; i > 0; i --, value ++) { value->collection = (ipp_t *)*values++; value->collection->use ++; } } return (attr); } /* * 'ippAddDate()' - Add a dateTime attribute to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). */ ipp_attribute_t * /* O - New attribute */ ippAddDate(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ const char *name, /* I - Name of attribute */ const ipp_uchar_t *value) /* I - Value */ { ipp_attribute_t *attr; /* New attribute */ DEBUG_printf(("ippAddDate(ipp=%p, group=%02x(%s), name=\"%s\", value=%p)", (void *)ipp, group, ippTagString(group), name, (void *)value)); /* * Range check input... */ if (!ipp || !name || !value || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE) return (NULL); /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, IPP_TAG_DATE, 1)) == NULL) return (NULL); memcpy(attr->values[0].date, value, 11); return (attr); } /* * 'ippAddInteger()' - Add a integer attribute to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). * * Supported values include enum (@code IPP_TAG_ENUM@) and integer * (@code IPP_TAG_INTEGER@). */ ipp_attribute_t * /* O - New attribute */ ippAddInteger(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ ipp_tag_t value_tag, /* I - Type of attribute */ const char *name, /* I - Name of attribute */ int value) /* I - Value of attribute */ { ipp_attribute_t *attr; /* New attribute */ DEBUG_printf(("ippAddInteger(ipp=%p, group=%02x(%s), type=%02x(%s), name=\"%s\", value=%d)", (void *)ipp, group, ippTagString(group), value_tag, ippTagString(value_tag), name, value)); value_tag &= IPP_TAG_CUPS_MASK; /* * Special-case for legacy usage: map out-of-band attributes to new ippAddOutOfBand * function... */ if (value_tag >= IPP_TAG_UNSUPPORTED_VALUE && value_tag <= IPP_TAG_ADMINDEFINE) return (ippAddOutOfBand(ipp, group, value_tag, name)); /* * Range check input... */ #if 0 if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || (value_tag != IPP_TAG_INTEGER && value_tag != IPP_TAG_ENUM)) return (NULL); #else if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE) return (NULL); #endif /* 0 */ /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, value_tag, 1)) == NULL) return (NULL); attr->values[0].integer = value; return (attr); } /* * 'ippAddIntegers()' - Add an array of integer values. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). * * Supported values include enum (@code IPP_TAG_ENUM@) and integer * (@code IPP_TAG_INTEGER@). */ ipp_attribute_t * /* O - New attribute */ ippAddIntegers(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ ipp_tag_t value_tag, /* I - Type of attribute */ const char *name, /* I - Name of attribute */ int num_values, /* I - Number of values */ const int *values) /* I - Values */ { int i; /* Looping var */ ipp_attribute_t *attr; /* New attribute */ _ipp_value_t *value; /* Current value */ DEBUG_printf(("ippAddIntegers(ipp=%p, group=%02x(%s), type=%02x(%s), name=\"%s\", num_values=%d, values=%p)", (void *)ipp, group, ippTagString(group), value_tag, ippTagString(value_tag), name, num_values, (void *)values)); value_tag &= IPP_TAG_CUPS_MASK; /* * Range check input... */ #if 0 if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || (value_tag != IPP_TAG_INTEGER && value_tag != IPP_TAG_ENUM) || num_values < 1) return (NULL); #else if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || num_values < 1) return (NULL); #endif /* 0 */ /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, value_tag, num_values)) == NULL) return (NULL); if (values) { for (i = num_values, value = attr->values; i > 0; i --, value ++) value->integer = *values++; } return (attr); } /* * 'ippAddOctetString()' - Add an octetString value to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). * * @since CUPS 1.2/macOS 10.5@ */ ipp_attribute_t * /* O - New attribute */ ippAddOctetString(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ const char *name, /* I - Name of attribute */ const void *data, /* I - octetString data */ int datalen) /* I - Length of data in bytes */ { ipp_attribute_t *attr; /* New attribute */ if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || datalen < 0 || datalen > IPP_MAX_LENGTH) return (NULL); if ((attr = ipp_add_attr(ipp, name, group, IPP_TAG_STRING, 1)) == NULL) return (NULL); /* * Initialize the attribute data... */ attr->values[0].unknown.length = datalen; if (data) { if ((attr->values[0].unknown.data = malloc((size_t)datalen)) == NULL) { ippDeleteAttribute(ipp, attr); return (NULL); } memcpy(attr->values[0].unknown.data, data, (size_t)datalen); } /* * Return the new attribute... */ return (attr); } /* * 'ippAddOutOfBand()' - Add an out-of-band value to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). * * Supported out-of-band values include unsupported-value * (@code IPP_TAG_UNSUPPORTED_VALUE@), default (@code IPP_TAG_DEFAULT@), unknown * (@code IPP_TAG_UNKNOWN@), no-value (@code IPP_TAG_NOVALUE@), not-settable * (@code IPP_TAG_NOTSETTABLE@), delete-attribute (@code IPP_TAG_DELETEATTR@), and * admin-define (@code IPP_TAG_ADMINDEFINE@). * * @since CUPS 1.6/macOS 10.8@ */ ipp_attribute_t * /* O - New attribute */ ippAddOutOfBand(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ ipp_tag_t value_tag, /* I - Type of attribute */ const char *name) /* I - Name of attribute */ { DEBUG_printf(("ippAddOutOfBand(ipp=%p, group=%02x(%s), value_tag=%02x(%s), name=\"%s\")", (void *)ipp, group, ippTagString(group), value_tag, ippTagString(value_tag), name)); value_tag &= IPP_TAG_CUPS_MASK; /* * Range check input... */ if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || (value_tag != IPP_TAG_UNSUPPORTED_VALUE && value_tag != IPP_TAG_DEFAULT && value_tag != IPP_TAG_UNKNOWN && value_tag != IPP_TAG_NOVALUE && value_tag != IPP_TAG_NOTSETTABLE && value_tag != IPP_TAG_DELETEATTR && value_tag != IPP_TAG_ADMINDEFINE)) return (NULL); /* * Create the attribute... */ return (ipp_add_attr(ipp, name, group, value_tag, 1)); } /* * 'ippAddRange()' - Add a range of values to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). * * The @code lower@ parameter must be less than or equal to the @code upper@ parameter. */ ipp_attribute_t * /* O - New attribute */ ippAddRange(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ const char *name, /* I - Name of attribute */ int lower, /* I - Lower value */ int upper) /* I - Upper value */ { ipp_attribute_t *attr; /* New attribute */ DEBUG_printf(("ippAddRange(ipp=%p, group=%02x(%s), name=\"%s\", lower=%d, upper=%d)", (void *)ipp, group, ippTagString(group), name, lower, upper)); /* * Range check input... */ if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE) return (NULL); /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, IPP_TAG_RANGE, 1)) == NULL) return (NULL); attr->values[0].range.lower = lower; attr->values[0].range.upper = upper; return (attr); } /* * 'ippAddRanges()' - Add ranges of values to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). */ ipp_attribute_t * /* O - New attribute */ ippAddRanges(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ const char *name, /* I - Name of attribute */ int num_values, /* I - Number of values */ const int *lower, /* I - Lower values */ const int *upper) /* I - Upper values */ { int i; /* Looping var */ ipp_attribute_t *attr; /* New attribute */ _ipp_value_t *value; /* Current value */ DEBUG_printf(("ippAddRanges(ipp=%p, group=%02x(%s), name=\"%s\", num_values=%d, lower=%p, upper=%p)", (void *)ipp, group, ippTagString(group), name, num_values, (void *)lower, (void *)upper)); /* * Range check input... */ if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || num_values < 1) return (NULL); /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, IPP_TAG_RANGE, num_values)) == NULL) return (NULL); if (lower && upper) { for (i = num_values, value = attr->values; i > 0; i --, value ++) { value->range.lower = *lower++; value->range.upper = *upper++; } } return (attr); } /* * 'ippAddResolution()' - Add a resolution value to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). */ ipp_attribute_t * /* O - New attribute */ ippAddResolution(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ const char *name, /* I - Name of attribute */ ipp_res_t units, /* I - Units for resolution */ int xres, /* I - X resolution */ int yres) /* I - Y resolution */ { ipp_attribute_t *attr; /* New attribute */ DEBUG_printf(("ippAddResolution(ipp=%p, group=%02x(%s), name=\"%s\", units=%d, xres=%d, yres=%d)", (void *)ipp, group, ippTagString(group), name, units, xres, yres)); /* * Range check input... */ if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || units < IPP_RES_PER_INCH || units > IPP_RES_PER_CM || xres < 0 || yres < 0) return (NULL); /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, IPP_TAG_RESOLUTION, 1)) == NULL) return (NULL); attr->values[0].resolution.xres = xres; attr->values[0].resolution.yres = yres; attr->values[0].resolution.units = units; return (attr); } /* * 'ippAddResolutions()' - Add resolution values to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). */ ipp_attribute_t * /* O - New attribute */ ippAddResolutions(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ const char *name, /* I - Name of attribute */ int num_values,/* I - Number of values */ ipp_res_t units, /* I - Units for resolution */ const int *xres, /* I - X resolutions */ const int *yres) /* I - Y resolutions */ { int i; /* Looping var */ ipp_attribute_t *attr; /* New attribute */ _ipp_value_t *value; /* Current value */ DEBUG_printf(("ippAddResolutions(ipp=%p, group=%02x(%s), name=\"%s\", num_value=%d, units=%d, xres=%p, yres=%p)", (void *)ipp, group, ippTagString(group), name, num_values, units, (void *)xres, (void *)yres)); /* * Range check input... */ if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || num_values < 1 || units < IPP_RES_PER_INCH || units > IPP_RES_PER_CM) return (NULL); /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, IPP_TAG_RESOLUTION, num_values)) == NULL) return (NULL); if (xres && yres) { for (i = num_values, value = attr->values; i > 0; i --, value ++) { value->resolution.xres = *xres++; value->resolution.yres = *yres++; value->resolution.units = units; } } return (attr); } /* * 'ippAddSeparator()' - Add a group separator to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. */ ipp_attribute_t * /* O - New attribute */ ippAddSeparator(ipp_t *ipp) /* I - IPP message */ { DEBUG_printf(("ippAddSeparator(ipp=%p)", (void *)ipp)); /* * Range check input... */ if (!ipp) return (NULL); /* * Create the attribute... */ return (ipp_add_attr(ipp, NULL, IPP_TAG_ZERO, IPP_TAG_ZERO, 0)); } /* * 'ippAddString()' - Add a language-encoded string to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). * * Supported string values include charset (@code IPP_TAG_CHARSET@), keyword * (@code IPP_TAG_KEYWORD@), language (@code IPP_TAG_LANGUAGE@), mimeMediaType * (@code IPP_TAG_MIMETYPE@), name (@code IPP_TAG_NAME@), nameWithLanguage * (@code IPP_TAG_NAMELANG), text (@code IPP_TAG_TEXT@), textWithLanguage * (@code IPP_TAG_TEXTLANG@), uri (@code IPP_TAG_URI@), and uriScheme * (@code IPP_TAG_URISCHEME@). * * The @code language@ parameter must be non-@code NULL@ for nameWithLanguage and * textWithLanguage string values and must be @code NULL@ for all other string values. */ ipp_attribute_t * /* O - New attribute */ ippAddString(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ ipp_tag_t value_tag, /* I - Type of attribute */ const char *name, /* I - Name of attribute */ const char *language, /* I - Language code */ const char *value) /* I - Value */ { ipp_tag_t temp_tag; /* Temporary value tag (masked) */ ipp_attribute_t *attr; /* New attribute */ char code[IPP_MAX_LANGUAGE]; /* Charset/language code buffer */ DEBUG_printf(("ippAddString(ipp=%p, group=%02x(%s), value_tag=%02x(%s), name=\"%s\", language=\"%s\", value=\"%s\")", (void *)ipp, group, ippTagString(group), value_tag, ippTagString(value_tag), name, language, value)); /* * Range check input... */ temp_tag = (ipp_tag_t)((int)value_tag & IPP_TAG_CUPS_MASK); #if 0 if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || (temp_tag < IPP_TAG_TEXT && temp_tag != IPP_TAG_TEXTLANG && temp_tag != IPP_TAG_NAMELANG) || temp_tag > IPP_TAG_MIMETYPE) return (NULL); if ((temp_tag == IPP_TAG_TEXTLANG || temp_tag == IPP_TAG_NAMELANG) != (language != NULL)) return (NULL); #else if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE) return (NULL); #endif /* 0 */ /* * See if we need to map charset, language, or locale values... */ if (language && ((int)value_tag & IPP_TAG_CUPS_CONST) && strcmp(language, ipp_lang_code(language, code, sizeof(code)))) value_tag = temp_tag; /* Don't do a fast copy */ else if (value && value_tag == (ipp_tag_t)(IPP_TAG_CHARSET | IPP_TAG_CUPS_CONST) && strcmp(value, ipp_get_code(value, code, sizeof(code)))) value_tag = temp_tag; /* Don't do a fast copy */ else if (value && value_tag == (ipp_tag_t)(IPP_TAG_LANGUAGE | IPP_TAG_CUPS_CONST) && strcmp(value, ipp_lang_code(value, code, sizeof(code)))) value_tag = temp_tag; /* Don't do a fast copy */ /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, value_tag, 1)) == NULL) return (NULL); /* * Initialize the attribute data... */ if ((int)value_tag & IPP_TAG_CUPS_CONST) { attr->values[0].string.language = (char *)language; attr->values[0].string.text = (char *)value; } else { if (language) attr->values[0].string.language = _cupsStrAlloc(ipp_lang_code(language, code, sizeof(code))); if (value) { if (value_tag == IPP_TAG_CHARSET) attr->values[0].string.text = _cupsStrAlloc(ipp_get_code(value, code, sizeof(code))); else if (value_tag == IPP_TAG_LANGUAGE) attr->values[0].string.text = _cupsStrAlloc(ipp_lang_code(value, code, sizeof(code))); else attr->values[0].string.text = _cupsStrAlloc(value); } } return (attr); } /* * 'ippAddStringf()' - Add a formatted string to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document * (@code IPP_TAG_DOCUMENT@), event notification * (@code IPP_TAG_EVENT_NOTIFICATION@), operation (@code IPP_TAG_OPERATION@), * printer (@code IPP_TAG_PRINTER@), subscription (@code IPP_TAG_SUBSCRIPTION@), * or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). * * Supported string values include charset (@code IPP_TAG_CHARSET@), keyword * (@code IPP_TAG_KEYWORD@), language (@code IPP_TAG_LANGUAGE@), mimeMediaType * (@code IPP_TAG_MIMETYPE@), name (@code IPP_TAG_NAME@), nameWithLanguage * (@code IPP_TAG_NAMELANG), text (@code IPP_TAG_TEXT@), textWithLanguage * (@code IPP_TAG_TEXTLANG@), uri (@code IPP_TAG_URI@), and uriScheme * (@code IPP_TAG_URISCHEME@). * * The @code language@ parameter must be non-@code NULL@ for nameWithLanguage * and textWithLanguage string values and must be @code NULL@ for all other * string values. * * The @code format@ parameter uses formatting characters compatible with the * printf family of standard functions. Additional arguments follow it as * needed. The formatted string is truncated as needed to the maximum length of * the corresponding value type. * * @since CUPS 1.7/macOS 10.9@ */ ipp_attribute_t * /* O - New attribute */ ippAddStringf(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ ipp_tag_t value_tag, /* I - Type of attribute */ const char *name, /* I - Name of attribute */ const char *language, /* I - Language code (@code NULL@ for default) */ const char *format, /* I - Printf-style format string */ ...) /* I - Additional arguments as needed */ { ipp_attribute_t *attr; /* New attribute */ va_list ap; /* Argument pointer */ va_start(ap, format); attr = ippAddStringfv(ipp, group, value_tag, name, language, format, ap); va_end(ap); return (attr); } /* * 'ippAddStringfv()' - Add a formatted string to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document * (@code IPP_TAG_DOCUMENT@), event notification * (@code IPP_TAG_EVENT_NOTIFICATION@), operation (@code IPP_TAG_OPERATION@), * printer (@code IPP_TAG_PRINTER@), subscription (@code IPP_TAG_SUBSCRIPTION@), * or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). * * Supported string values include charset (@code IPP_TAG_CHARSET@), keyword * (@code IPP_TAG_KEYWORD@), language (@code IPP_TAG_LANGUAGE@), mimeMediaType * (@code IPP_TAG_MIMETYPE@), name (@code IPP_TAG_NAME@), nameWithLanguage * (@code IPP_TAG_NAMELANG), text (@code IPP_TAG_TEXT@), textWithLanguage * (@code IPP_TAG_TEXTLANG@), uri (@code IPP_TAG_URI@), and uriScheme * (@code IPP_TAG_URISCHEME@). * * The @code language@ parameter must be non-@code NULL@ for nameWithLanguage * and textWithLanguage string values and must be @code NULL@ for all other * string values. * * The @code format@ parameter uses formatting characters compatible with the * printf family of standard functions. Additional arguments are passed in the * stdarg pointer @code ap@. The formatted string is truncated as needed to the * maximum length of the corresponding value type. * * @since CUPS 1.7/macOS 10.9@ */ ipp_attribute_t * /* O - New attribute */ ippAddStringfv(ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ ipp_tag_t value_tag, /* I - Type of attribute */ const char *name, /* I - Name of attribute */ const char *language, /* I - Language code (@code NULL@ for default) */ const char *format, /* I - Printf-style format string */ va_list ap) /* I - Additional arguments */ { char buffer[IPP_MAX_TEXT + 4]; /* Formatted text string */ ssize_t bytes, /* Length of formatted value */ max_bytes; /* Maximum number of bytes for value */ /* * Range check input... */ if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || (value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG && value_tag != IPP_TAG_NAMELANG) || value_tag > IPP_TAG_MIMETYPE || !format) return (NULL); if ((value_tag == IPP_TAG_TEXTLANG || value_tag == IPP_TAG_NAMELANG) != (language != NULL)) return (NULL); /* * Format the string... */ if (!strcmp(format, "%s")) { /* * Optimize the simple case... */ const char *s = va_arg(ap, char *); if (!s) s = "(null)"; bytes = (ssize_t)strlen(s); strlcpy(buffer, s, sizeof(buffer)); } else { /* * Do a full formatting of the message... */ if ((bytes = vsnprintf(buffer, sizeof(buffer), format, ap)) < 0) return (NULL); } /* * Limit the length of the string... */ switch (value_tag) { default : case IPP_TAG_TEXT : case IPP_TAG_TEXTLANG : max_bytes = IPP_MAX_TEXT; break; case IPP_TAG_NAME : case IPP_TAG_NAMELANG : max_bytes = IPP_MAX_NAME; break; case IPP_TAG_CHARSET : max_bytes = IPP_MAX_CHARSET; break; case IPP_TAG_KEYWORD : max_bytes = IPP_MAX_KEYWORD; break; case IPP_TAG_LANGUAGE : max_bytes = IPP_MAX_LANGUAGE; break; case IPP_TAG_MIMETYPE : max_bytes = IPP_MAX_MIMETYPE; break; case IPP_TAG_URI : max_bytes = IPP_MAX_URI; break; case IPP_TAG_URISCHEME : max_bytes = IPP_MAX_URISCHEME; break; } if (bytes >= max_bytes) { char *bufmax, /* Buffer at max_bytes */ *bufptr; /* Pointer into buffer */ bufptr = buffer + strlen(buffer) - 1; bufmax = buffer + max_bytes - 1; while (bufptr > bufmax) { if (*bufptr & 0x80) { while ((*bufptr & 0xc0) == 0x80 && bufptr > buffer) bufptr --; } bufptr --; } *bufptr = '\0'; } /* * Add the formatted string and return... */ return (ippAddString(ipp, group, value_tag, name, language, buffer)); } /* * 'ippAddStrings()' - Add language-encoded strings to an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). * * Supported string values include charset (@code IPP_TAG_CHARSET@), keyword * (@code IPP_TAG_KEYWORD@), language (@code IPP_TAG_LANGUAGE@), mimeMediaType * (@code IPP_TAG_MIMETYPE@), name (@code IPP_TAG_NAME@), nameWithLanguage * (@code IPP_TAG_NAMELANG), text (@code IPP_TAG_TEXT@), textWithLanguage * (@code IPP_TAG_TEXTLANG@), uri (@code IPP_TAG_URI@), and uriScheme * (@code IPP_TAG_URISCHEME@). * * The @code language@ parameter must be non-@code NULL@ for nameWithLanguage and * textWithLanguage string values and must be @code NULL@ for all other string values. */ ipp_attribute_t * /* O - New attribute */ ippAddStrings( ipp_t *ipp, /* I - IPP message */ ipp_tag_t group, /* I - IPP group */ ipp_tag_t value_tag, /* I - Type of attribute */ const char *name, /* I - Name of attribute */ int num_values, /* I - Number of values */ const char *language, /* I - Language code (@code NULL@ for default) */ const char * const *values) /* I - Values */ { int i; /* Looping var */ ipp_tag_t temp_tag; /* Temporary value tag (masked) */ ipp_attribute_t *attr; /* New attribute */ _ipp_value_t *value; /* Current value */ char code[32]; /* Language/charset value buffer */ DEBUG_printf(("ippAddStrings(ipp=%p, group=%02x(%s), value_tag=%02x(%s), name=\"%s\", num_values=%d, language=\"%s\", values=%p)", (void *)ipp, group, ippTagString(group), value_tag, ippTagString(value_tag), name, num_values, language, (void *)values)); /* * Range check input... */ temp_tag = (ipp_tag_t)((int)value_tag & IPP_TAG_CUPS_MASK); #if 0 if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || (temp_tag < IPP_TAG_TEXT && temp_tag != IPP_TAG_TEXTLANG && temp_tag != IPP_TAG_NAMELANG) || temp_tag > IPP_TAG_MIMETYPE || num_values < 1) return (NULL); if ((temp_tag == IPP_TAG_TEXTLANG || temp_tag == IPP_TAG_NAMELANG) != (language != NULL)) return (NULL); #else if (!ipp || !name || group < IPP_TAG_ZERO || group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || num_values < 1) return (NULL); #endif /* 0 */ /* * See if we need to map charset, language, or locale values... */ if (language && ((int)value_tag & IPP_TAG_CUPS_CONST) && strcmp(language, ipp_lang_code(language, code, sizeof(code)))) value_tag = temp_tag; /* Don't do a fast copy */ else if (values && value_tag == (ipp_tag_t)(IPP_TAG_CHARSET | IPP_TAG_CUPS_CONST)) { for (i = 0; i < num_values; i ++) if (strcmp(values[i], ipp_get_code(values[i], code, sizeof(code)))) { value_tag = temp_tag; /* Don't do a fast copy */ break; } } else if (values && value_tag == (ipp_tag_t)(IPP_TAG_LANGUAGE | IPP_TAG_CUPS_CONST)) { for (i = 0; i < num_values; i ++) if (strcmp(values[i], ipp_lang_code(values[i], code, sizeof(code)))) { value_tag = temp_tag; /* Don't do a fast copy */ break; } } /* * Create the attribute... */ if ((attr = ipp_add_attr(ipp, name, group, value_tag, num_values)) == NULL) return (NULL); /* * Initialize the attribute data... */ for (i = num_values, value = attr->values; i > 0; i --, value ++) { if (language) { if (value == attr->values) { if ((int)value_tag & IPP_TAG_CUPS_CONST) value->string.language = (char *)language; else value->string.language = _cupsStrAlloc(ipp_lang_code(language, code, sizeof(code))); } else value->string.language = attr->values[0].string.language; } if (values) { if ((int)value_tag & IPP_TAG_CUPS_CONST) value->string.text = (char *)*values++; else if (value_tag == IPP_TAG_CHARSET) value->string.text = _cupsStrAlloc(ipp_get_code(*values++, code, sizeof(code))); else if (value_tag == IPP_TAG_LANGUAGE) value->string.text = _cupsStrAlloc(ipp_lang_code(*values++, code, sizeof(code))); else value->string.text = _cupsStrAlloc(*values++); } } return (attr); } /* * 'ippContainsInteger()' - Determine whether an attribute contains the * specified value or is within the list of ranges. * * Returns non-zero when the attribute contains either a matching integer or * enum value, or the value falls within one of the rangeOfInteger values for * the attribute. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - 1 on a match, 0 on no match */ ippContainsInteger( ipp_attribute_t *attr, /* I - Attribute */ int value) /* I - Integer/enum value */ { int i; /* Looping var */ _ipp_value_t *avalue; /* Current attribute value */ /* * Range check input... */ if (!attr) return (0); if (attr->value_tag != IPP_TAG_INTEGER && attr->value_tag != IPP_TAG_ENUM && attr->value_tag != IPP_TAG_RANGE) return (0); /* * Compare... */ if (attr->value_tag == IPP_TAG_RANGE) { for (i = attr->num_values, avalue = attr->values; i > 0; i --, avalue ++) if (value >= avalue->range.lower && value <= avalue->range.upper) return (1); } else { for (i = attr->num_values, avalue = attr->values; i > 0; i --, avalue ++) if (value == avalue->integer) return (1); } return (0); } /* * 'ippContainsString()' - Determine whether an attribute contains the * specified string value. * * Returns non-zero when the attribute contains a matching charset, keyword, * naturalLanguage, mimeMediaType, name, text, uri, or uriScheme value. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - 1 on a match, 0 on no match */ ippContainsString( ipp_attribute_t *attr, /* I - Attribute */ const char *value) /* I - String value */ { int i; /* Looping var */ _ipp_value_t *avalue; /* Current attribute value */ DEBUG_printf(("ippContainsString(attr=%p, value=\"%s\")", (void *)attr, value)); /* * Range check input... */ if (!attr || !value) { DEBUG_puts("1ippContainsString: Returning 0 (bad input)"); return (0); } /* * Compare... */ DEBUG_printf(("1ippContainsString: attr %s, %s with %d values.", attr->name, ippTagString(attr->value_tag), attr->num_values)); switch (attr->value_tag & IPP_TAG_CUPS_MASK) { case IPP_TAG_CHARSET : case IPP_TAG_KEYWORD : case IPP_TAG_LANGUAGE : case IPP_TAG_URI : case IPP_TAG_URISCHEME : for (i = attr->num_values, avalue = attr->values; i > 0; i --, avalue ++) { DEBUG_printf(("1ippContainsString: value[%d]=\"%s\"", attr->num_values - i, avalue->string.text)); if (!strcmp(value, avalue->string.text)) { DEBUG_puts("1ippContainsString: Returning 1 (match)"); return (1); } } case IPP_TAG_MIMETYPE : case IPP_TAG_NAME : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_TEXTLANG : for (i = attr->num_values, avalue = attr->values; i > 0; i --, avalue ++) { DEBUG_printf(("1ippContainsString: value[%d]=\"%s\"", attr->num_values - i, avalue->string.text)); if (!_cups_strcasecmp(value, avalue->string.text)) { DEBUG_puts("1ippContainsString: Returning 1 (match)"); return (1); } } default : break; } DEBUG_puts("1ippContainsString: Returning 0 (no match)"); return (0); } /* * 'ippCopyAttribute()' - Copy an attribute. * * The specified attribute, @code attr@, is copied to the destination IPP message. * When @code quickcopy@ is non-zero, a "shallow" reference copy of the attribute is * created - this should only be done as long as the original source IPP message will * not be freed for the life of the destination. * * @since CUPS 1.6/macOS 10.8@ */ ipp_attribute_t * /* O - New attribute */ ippCopyAttribute( ipp_t *dst, /* I - Destination IPP message */ ipp_attribute_t *srcattr, /* I - Attribute to copy */ int quickcopy) /* I - 1 for a referenced copy, 0 for normal */ { int i; /* Looping var */ ipp_attribute_t *dstattr; /* Destination attribute */ _ipp_value_t *srcval, /* Source value */ *dstval; /* Destination value */ DEBUG_printf(("ippCopyAttribute(dst=%p, srcattr=%p, quickcopy=%d)", (void *)dst, (void *)srcattr, quickcopy)); /* * Range check input... */ if (!dst || !srcattr) return (NULL); /* * Copy it... */ quickcopy = quickcopy ? IPP_TAG_CUPS_CONST : 0; switch (srcattr->value_tag & ~IPP_TAG_CUPS_CONST) { case IPP_TAG_ZERO : dstattr = ippAddSeparator(dst); break; case IPP_TAG_UNSUPPORTED_VALUE : case IPP_TAG_DEFAULT : case IPP_TAG_UNKNOWN : case IPP_TAG_NOVALUE : case IPP_TAG_NOTSETTABLE : case IPP_TAG_DELETEATTR : case IPP_TAG_ADMINDEFINE : dstattr = ippAddOutOfBand(dst, srcattr->group_tag, srcattr->value_tag & ~IPP_TAG_CUPS_CONST, srcattr->name); break; case IPP_TAG_INTEGER : case IPP_TAG_ENUM : dstattr = ippAddIntegers(dst, srcattr->group_tag, srcattr->value_tag, srcattr->name, srcattr->num_values, NULL); if (!dstattr) break; for (i = srcattr->num_values, srcval = srcattr->values, dstval = dstattr->values; i > 0; i --, srcval ++, dstval ++) dstval->integer = srcval->integer; break; case IPP_TAG_BOOLEAN : dstattr = ippAddBooleans(dst, srcattr->group_tag, srcattr->name, srcattr->num_values, NULL); if (!dstattr) break; for (i = srcattr->num_values, srcval = srcattr->values, dstval = dstattr->values; i > 0; i --, srcval ++, dstval ++) dstval->boolean = srcval->boolean; break; case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : dstattr = ippAddStrings(dst, srcattr->group_tag, (ipp_tag_t)(srcattr->value_tag | quickcopy), srcattr->name, srcattr->num_values, NULL, NULL); if (!dstattr) break; if (quickcopy) { for (i = srcattr->num_values, srcval = srcattr->values, dstval = dstattr->values; i > 0; i --, srcval ++, dstval ++) dstval->string.text = srcval->string.text; } else if (srcattr->value_tag & IPP_TAG_CUPS_CONST) { for (i = srcattr->num_values, srcval = srcattr->values, dstval = dstattr->values; i > 0; i --, srcval ++, dstval ++) dstval->string.text = _cupsStrAlloc(srcval->string.text); } else { for (i = srcattr->num_values, srcval = srcattr->values, dstval = dstattr->values; i > 0; i --, srcval ++, dstval ++) dstval->string.text = _cupsStrRetain(srcval->string.text); } break; case IPP_TAG_DATE : if (srcattr->num_values != 1) return (NULL); dstattr = ippAddDate(dst, srcattr->group_tag, srcattr->name, srcattr->values[0].date); break; case IPP_TAG_RESOLUTION : dstattr = ippAddResolutions(dst, srcattr->group_tag, srcattr->name, srcattr->num_values, IPP_RES_PER_INCH, NULL, NULL); if (!dstattr) break; for (i = srcattr->num_values, srcval = srcattr->values, dstval = dstattr->values; i > 0; i --, srcval ++, dstval ++) { dstval->resolution.xres = srcval->resolution.xres; dstval->resolution.yres = srcval->resolution.yres; dstval->resolution.units = srcval->resolution.units; } break; case IPP_TAG_RANGE : dstattr = ippAddRanges(dst, srcattr->group_tag, srcattr->name, srcattr->num_values, NULL, NULL); if (!dstattr) break; for (i = srcattr->num_values, srcval = srcattr->values, dstval = dstattr->values; i > 0; i --, srcval ++, dstval ++) { dstval->range.lower = srcval->range.lower; dstval->range.upper = srcval->range.upper; } break; case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : dstattr = ippAddStrings(dst, srcattr->group_tag, (ipp_tag_t)(srcattr->value_tag | quickcopy), srcattr->name, srcattr->num_values, NULL, NULL); if (!dstattr) break; if (quickcopy) { for (i = srcattr->num_values, srcval = srcattr->values, dstval = dstattr->values; i > 0; i --, srcval ++, dstval ++) { dstval->string.language = srcval->string.language; dstval->string.text = srcval->string.text; } } else if (srcattr->value_tag & IPP_TAG_CUPS_CONST) { for (i = srcattr->num_values, srcval = srcattr->values, dstval = dstattr->values; i > 0; i --, srcval ++, dstval ++) { if (srcval == srcattr->values) dstval->string.language = _cupsStrAlloc(srcval->string.language); else dstval->string.language = dstattr->values[0].string.language; dstval->string.text = _cupsStrAlloc(srcval->string.text); } } else { for (i = srcattr->num_values, srcval = srcattr->values, dstval = dstattr->values; i > 0; i --, srcval ++, dstval ++) { if (srcval == srcattr->values) dstval->string.language = _cupsStrRetain(srcval->string.language); else dstval->string.language = dstattr->values[0].string.language; dstval->string.text = _cupsStrRetain(srcval->string.text); } } break; case IPP_TAG_BEGIN_COLLECTION : dstattr = ippAddCollections(dst, srcattr->group_tag, srcattr->name, srcattr->num_values, NULL); if (!dstattr) break; for (i = srcattr->num_values, srcval = srcattr->values, dstval = dstattr->values; i > 0; i --, srcval ++, dstval ++) { dstval->collection = srcval->collection; srcval->collection->use ++; } break; case IPP_TAG_STRING : default : /* TODO: Implement quick copy for unknown/octetString values */ dstattr = ippAddIntegers(dst, srcattr->group_tag, srcattr->value_tag, srcattr->name, srcattr->num_values, NULL); if (!dstattr) break; for (i = srcattr->num_values, srcval = srcattr->values, dstval = dstattr->values; i > 0; i --, srcval ++, dstval ++) { dstval->unknown.length = srcval->unknown.length; if (dstval->unknown.length > 0) { if ((dstval->unknown.data = malloc((size_t)dstval->unknown.length)) == NULL) dstval->unknown.length = 0; else memcpy(dstval->unknown.data, srcval->unknown.data, (size_t)dstval->unknown.length); } } break; /* anti-compiler-warning-code */ } return (dstattr); } /* * 'ippCopyAttributes()' - Copy attributes from one IPP message to another. * * Zero or more attributes are copied from the source IPP message, @code src@, to the * destination IPP message, @code dst@. When @code quickcopy@ is non-zero, a "shallow" * reference copy of the attribute is created - this should only be done as long as the * original source IPP message will not be freed for the life of the destination. * * The @code cb@ and @code context@ parameters provide a generic way to "filter" the * attributes that are copied - the function must return 1 to copy the attribute or * 0 to skip it. The function may also choose to do a partial copy of the source attribute * itself. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on error */ ippCopyAttributes( ipp_t *dst, /* I - Destination IPP message */ ipp_t *src, /* I - Source IPP message */ int quickcopy, /* I - 1 for a referenced copy, 0 for normal */ ipp_copycb_t cb, /* I - Copy callback or @code NULL@ for none */ void *context) /* I - Context pointer */ { ipp_attribute_t *srcattr; /* Source attribute */ DEBUG_printf(("ippCopyAttributes(dst=%p, src=%p, quickcopy=%d, cb=%p, context=%p)", (void *)dst, (void *)src, quickcopy, (void *)cb, context)); /* * Range check input... */ if (!dst || !src) return (0); /* * Loop through source attributes and copy as needed... */ for (srcattr = src->attrs; srcattr; srcattr = srcattr->next) if (!cb || (*cb)(context, dst, srcattr)) if (!ippCopyAttribute(dst, srcattr, quickcopy)) return (0); return (1); } /* * 'ippDateToTime()' - Convert from RFC 2579 Date/Time format to time in * seconds. */ time_t /* O - UNIX time value */ ippDateToTime(const ipp_uchar_t *date) /* I - RFC 2579 date info */ { struct tm unixdate; /* UNIX date/time info */ time_t t; /* Computed time */ if (!date) return (0); memset(&unixdate, 0, sizeof(unixdate)); /* * RFC-2579 date/time format is: * * Byte(s) Description * ------- ----------- * 0-1 Year (0 to 65535) * 2 Month (1 to 12) * 3 Day (1 to 31) * 4 Hours (0 to 23) * 5 Minutes (0 to 59) * 6 Seconds (0 to 60, 60 = "leap second") * 7 Deciseconds (0 to 9) * 8 +/- UTC * 9 UTC hours (0 to 11) * 10 UTC minutes (0 to 59) */ unixdate.tm_year = ((date[0] << 8) | date[1]) - 1900; unixdate.tm_mon = date[2] - 1; unixdate.tm_mday = date[3]; unixdate.tm_hour = date[4]; unixdate.tm_min = date[5]; unixdate.tm_sec = date[6]; t = mktime(&unixdate); if (date[8] == '-') t += date[9] * 3600 + date[10] * 60; else t -= date[9] * 3600 + date[10] * 60; return (t); } /* * 'ippDelete()' - Delete an IPP message. */ void ippDelete(ipp_t *ipp) /* I - IPP message */ { ipp_attribute_t *attr, /* Current attribute */ *next; /* Next attribute */ DEBUG_printf(("ippDelete(ipp=%p)", (void *)ipp)); if (!ipp) return; ipp->use --; if (ipp->use > 0) { DEBUG_printf(("4debug_retain: %p IPP message (use=%d)", (void *)ipp, ipp->use)); return; } DEBUG_printf(("4debug_free: %p IPP message", (void *)ipp)); for (attr = ipp->attrs; attr != NULL; attr = next) { next = attr->next; DEBUG_printf(("4debug_free: %p %s %s%s (%d values)", (void *)attr, attr->name, attr->num_values > 1 ? "1setOf " : "", ippTagString(attr->value_tag), attr->num_values)); ipp_free_values(attr, 0, attr->num_values); if (attr->name) _cupsStrFree(attr->name); free(attr); } free(ipp); } /* * 'ippDeleteAttribute()' - Delete a single attribute in an IPP message. * * @since CUPS 1.1.19/macOS 10.3@ */ void ippDeleteAttribute( ipp_t *ipp, /* I - IPP message */ ipp_attribute_t *attr) /* I - Attribute to delete */ { ipp_attribute_t *current, /* Current attribute */ *prev; /* Previous attribute */ DEBUG_printf(("ippDeleteAttribute(ipp=%p, attr=%p(%s))", (void *)ipp, (void *)attr, attr ? attr->name : "(null)")); /* * Range check input... */ if (!attr) return; DEBUG_printf(("4debug_free: %p %s %s%s (%d values)", (void *)attr, attr->name, attr->num_values > 1 ? "1setOf " : "", ippTagString(attr->value_tag), attr->num_values)); /* * Find the attribute in the list... */ if (ipp) { for (current = ipp->attrs, prev = NULL; current; prev = current, current = current->next) if (current == attr) { /* * Found it, remove the attribute from the list... */ if (prev) prev->next = current->next; else ipp->attrs = current->next; if (current == ipp->last) ipp->last = prev; break; } if (!current) return; } /* * Free memory used by the attribute... */ ipp_free_values(attr, 0, attr->num_values); if (attr->name) _cupsStrFree(attr->name); free(attr); } /* * 'ippDeleteValues()' - Delete values in an attribute. * * The @code element@ parameter specifies the first value to delete, starting at * 0. It must be less than the number of values returned by @link ippGetCount@. * * The @code attr@ parameter may be modified as a result of setting the value. * * Deleting all values in an attribute deletes the attribute. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippDeleteValues( ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - Attribute */ int element, /* I - Index of first value to delete (0-based) */ int count) /* I - Number of values to delete */ { /* * Range check input... */ if (!ipp || !attr || !*attr || element < 0 || element >= (*attr)->num_values || count <= 0 || (element + count) >= (*attr)->num_values) return (0); /* * If we are deleting all values, just delete the attribute entirely. */ if (count == (*attr)->num_values) { ippDeleteAttribute(ipp, *attr); *attr = NULL; return (1); } /* * Otherwise free the values in question and return. */ ipp_free_values(*attr, element, count); return (1); } /* * 'ippFindAttribute()' - Find a named attribute in a request. * * Starting with CUPS 2.0, the attribute name can contain a hierarchical list * of attribute and member names separated by slashes, for example * "media-col/media-size". */ ipp_attribute_t * /* O - Matching attribute */ ippFindAttribute(ipp_t *ipp, /* I - IPP message */ const char *name, /* I - Name of attribute */ ipp_tag_t type) /* I - Type of attribute */ { DEBUG_printf(("2ippFindAttribute(ipp=%p, name=\"%s\", type=%02x(%s))", (void *)ipp, name, type, ippTagString(type))); if (!ipp || !name) return (NULL); /* * Reset the current pointer... */ ipp->current = NULL; ipp->atend = 0; /* * Search for the attribute... */ return (ippFindNextAttribute(ipp, name, type)); } /* * 'ippFindNextAttribute()' - Find the next named attribute in a request. * * Starting with CUPS 2.0, the attribute name can contain a hierarchical list * of attribute and member names separated by slashes, for example * "media-col/media-size". */ ipp_attribute_t * /* O - Matching attribute */ ippFindNextAttribute(ipp_t *ipp, /* I - IPP message */ const char *name, /* I - Name of attribute */ ipp_tag_t type) /* I - Type of attribute */ { ipp_attribute_t *attr, /* Current atttribute */ *childattr; /* Child attribute */ ipp_tag_t value_tag; /* Value tag */ char parent[1024], /* Parent attribute name */ *child = NULL; /* Child attribute name */ DEBUG_printf(("2ippFindNextAttribute(ipp=%p, name=\"%s\", type=%02x(%s))", (void *)ipp, name, type, ippTagString(type))); if (!ipp || !name) return (NULL); DEBUG_printf(("3ippFindNextAttribute: atend=%d", ipp->atend)); if (ipp->atend) return (NULL); if (strchr(name, '/')) { /* * Search for child attribute... */ strlcpy(parent, name, sizeof(parent)); if ((child = strchr(parent, '/')) == NULL) { DEBUG_puts("3ippFindNextAttribute: Attribute name too long."); return (NULL); } *child++ = '\0'; if (ipp->current && ipp->current->name && ipp->current->value_tag == IPP_TAG_BEGIN_COLLECTION && !strcmp(parent, ipp->current->name)) { while (ipp->curindex < ipp->current->num_values) { if ((childattr = ippFindNextAttribute(ipp->current->values[ipp->curindex].collection, child, type)) != NULL) return (childattr); ipp->curindex ++; if (ipp->curindex < ipp->current->num_values && ipp->current->values[ipp->curindex].collection) ipp->current->values[ipp->curindex].collection->current = NULL; } ipp->prev = ipp->current; ipp->current = ipp->current->next; ipp->curindex = 0; if (!ipp->current) { ipp->atend = 1; return (NULL); } } if (!ipp->current) { ipp->prev = NULL; ipp->current = ipp->attrs; ipp->curindex = 0; } name = parent; attr = ipp->current; } else if (ipp->current) { ipp->prev = ipp->current; attr = ipp->current->next; } else { ipp->prev = NULL; attr = ipp->attrs; } for (; attr != NULL; ipp->prev = attr, attr = attr->next) { DEBUG_printf(("4ippFindAttribute: attr=%p, name=\"%s\"", (void *)attr, attr->name)); value_tag = (ipp_tag_t)(attr->value_tag & IPP_TAG_CUPS_MASK); if (attr->name != NULL && _cups_strcasecmp(attr->name, name) == 0 && (value_tag == type || type == IPP_TAG_ZERO || name == parent || (value_tag == IPP_TAG_TEXTLANG && type == IPP_TAG_TEXT) || (value_tag == IPP_TAG_NAMELANG && type == IPP_TAG_NAME))) { ipp->current = attr; if (name == parent && attr->value_tag == IPP_TAG_BEGIN_COLLECTION) { int i; /* Looping var */ for (i = 0; i < attr->num_values; i ++) { if ((childattr = ippFindAttribute(attr->values[i].collection, child, type)) != NULL) { attr->values[0].collection->curindex = i; return (childattr); } } } else return (attr); } } ipp->current = NULL; ipp->prev = NULL; ipp->atend = 1; return (NULL); } /* * 'ippFirstAttribute()' - Return the first attribute in the message. * * @since CUPS 1.6/macOS 10.8@ */ ipp_attribute_t * /* O - First attribute or @code NULL@ if none */ ippFirstAttribute(ipp_t *ipp) /* I - IPP message */ { /* * Range check input... */ if (!ipp) return (NULL); /* * Return the first attribute... */ return (ipp->current = ipp->attrs); } /* * 'ippGetBoolean()' - Get a boolean value for an attribute. * * The @code element@ parameter specifies which value to get from 0 to * @code ippGetCount(attr)@ - 1. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - Boolean value or 0 on error */ ippGetBoolean(ipp_attribute_t *attr, /* I - IPP attribute */ int element) /* I - Value number (0-based) */ { /* * Range check input... */ if (!attr || attr->value_tag != IPP_TAG_BOOLEAN || element < 0 || element >= attr->num_values) return (0); /* * Return the value... */ return (attr->values[element].boolean); } /* * 'ippGetCollection()' - Get a collection value for an attribute. * * The @code element@ parameter specifies which value to get from 0 to * @code ippGetCount(attr)@ - 1. * * @since CUPS 1.6/macOS 10.8@ */ ipp_t * /* O - Collection value or @code NULL@ on error */ ippGetCollection( ipp_attribute_t *attr, /* I - IPP attribute */ int element) /* I - Value number (0-based) */ { /* * Range check input... */ if (!attr || attr->value_tag != IPP_TAG_BEGIN_COLLECTION || element < 0 || element >= attr->num_values) return (NULL); /* * Return the value... */ return (attr->values[element].collection); } /* * 'ippGetCount()' - Get the number of values in an attribute. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - Number of values or 0 on error */ ippGetCount(ipp_attribute_t *attr) /* I - IPP attribute */ { /* * Range check input... */ if (!attr) return (0); /* * Return the number of values... */ return (attr->num_values); } /* * 'ippGetDate()' - Get a dateTime value for an attribute. * * The @code element@ parameter specifies which value to get from 0 to * @code ippGetCount(attr)@ - 1. * * @since CUPS 1.6/macOS 10.8@ */ const ipp_uchar_t * /* O - dateTime value or @code NULL@ */ ippGetDate(ipp_attribute_t *attr, /* I - IPP attribute */ int element) /* I - Value number (0-based) */ { /* * Range check input... */ if (!attr || attr->value_tag != IPP_TAG_DATE || element < 0 || element >= attr->num_values) return (NULL); /* * Return the value... */ return (attr->values[element].date); } /* * 'ippGetGroupTag()' - Get the group associated with an attribute. * * @since CUPS 1.6/macOS 10.8@ */ ipp_tag_t /* O - Group tag or @code IPP_TAG_ZERO@ on error */ ippGetGroupTag(ipp_attribute_t *attr) /* I - IPP attribute */ { /* * Range check input... */ if (!attr) return (IPP_TAG_ZERO); /* * Return the group... */ return (attr->group_tag); } /* * 'ippGetInteger()' - Get the integer/enum value for an attribute. * * The @code element@ parameter specifies which value to get from 0 to * @code ippGetCount(attr)@ - 1. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - Value or 0 on error */ ippGetInteger(ipp_attribute_t *attr, /* I - IPP attribute */ int element) /* I - Value number (0-based) */ { /* * Range check input... */ if (!attr || (attr->value_tag != IPP_TAG_INTEGER && attr->value_tag != IPP_TAG_ENUM) || element < 0 || element >= attr->num_values) return (0); /* * Return the value... */ return (attr->values[element].integer); } /* * 'ippGetName()' - Get the attribute name. * * @since CUPS 1.6/macOS 10.8@ */ const char * /* O - Attribute name or @code NULL@ for separators */ ippGetName(ipp_attribute_t *attr) /* I - IPP attribute */ { /* * Range check input... */ if (!attr) return (NULL); /* * Return the name... */ return (attr->name); } /* * 'ippGetOctetString()' - Get an octetString value from an IPP attribute. * * The @code element@ parameter specifies which value to get from 0 to * @code ippGetCount(attr)@ - 1. * * @since CUPS 1.7/macOS 10.9@ */ void * /* O - Pointer to octetString data */ ippGetOctetString( ipp_attribute_t *attr, /* I - IPP attribute */ int element, /* I - Value number (0-based) */ int *datalen) /* O - Length of octetString data */ { /* * Range check input... */ if (!attr || attr->value_tag != IPP_TAG_STRING || element < 0 || element >= attr->num_values) { if (datalen) *datalen = 0; return (NULL); } /* * Return the values... */ if (datalen) *datalen = attr->values[element].unknown.length; return (attr->values[element].unknown.data); } /* * 'ippGetOperation()' - Get the operation ID in an IPP message. * * @since CUPS 1.6/macOS 10.8@ */ ipp_op_t /* O - Operation ID or 0 on error */ ippGetOperation(ipp_t *ipp) /* I - IPP request message */ { /* * Range check input... */ if (!ipp) return ((ipp_op_t)0); /* * Return the value... */ return (ipp->request.op.operation_id); } /* * 'ippGetRange()' - Get a rangeOfInteger value from an attribute. * * The @code element@ parameter specifies which value to get from 0 to * @code ippGetCount(attr)@ - 1. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - Lower value of range or 0 */ ippGetRange(ipp_attribute_t *attr, /* I - IPP attribute */ int element, /* I - Value number (0-based) */ int *uppervalue)/* O - Upper value of range */ { /* * Range check input... */ if (!attr || attr->value_tag != IPP_TAG_RANGE || element < 0 || element >= attr->num_values) { if (uppervalue) *uppervalue = 0; return (0); } /* * Return the values... */ if (uppervalue) *uppervalue = attr->values[element].range.upper; return (attr->values[element].range.lower); } /* * 'ippGetRequestId()' - Get the request ID from an IPP message. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - Request ID or 0 on error */ ippGetRequestId(ipp_t *ipp) /* I - IPP message */ { /* * Range check input... */ if (!ipp) return (0); /* * Return the request ID... */ return (ipp->request.any.request_id); } /* * 'ippGetResolution()' - Get a resolution value for an attribute. * * The @code element@ parameter specifies which value to get from 0 to * @code ippGetCount(attr)@ - 1. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - Horizontal/cross feed resolution or 0 */ ippGetResolution( ipp_attribute_t *attr, /* I - IPP attribute */ int element, /* I - Value number (0-based) */ int *yres, /* O - Vertical/feed resolution */ ipp_res_t *units) /* O - Units for resolution */ { /* * Range check input... */ if (!attr || attr->value_tag != IPP_TAG_RESOLUTION || element < 0 || element >= attr->num_values) { if (yres) *yres = 0; if (units) *units = (ipp_res_t)0; return (0); } /* * Return the value... */ if (yres) *yres = attr->values[element].resolution.yres; if (units) *units = attr->values[element].resolution.units; return (attr->values[element].resolution.xres); } /* * 'ippGetState()' - Get the IPP message state. * * @since CUPS 1.6/macOS 10.8@ */ ipp_state_t /* O - IPP message state value */ ippGetState(ipp_t *ipp) /* I - IPP message */ { /* * Range check input... */ if (!ipp) return (IPP_STATE_IDLE); /* * Return the value... */ return (ipp->state); } /* * 'ippGetStatusCode()' - Get the status code from an IPP response or event message. * * @since CUPS 1.6/macOS 10.8@ */ ipp_status_t /* O - Status code in IPP message */ ippGetStatusCode(ipp_t *ipp) /* I - IPP response or event message */ { /* * Range check input... */ if (!ipp) return (IPP_STATUS_ERROR_INTERNAL); /* * Return the value... */ return (ipp->request.status.status_code); } /* * 'ippGetString()' - Get the string and optionally the language code for an attribute. * * The @code element@ parameter specifies which value to get from 0 to * @code ippGetCount(attr)@ - 1. * * @since CUPS 1.6/macOS 10.8@ */ const char * ippGetString(ipp_attribute_t *attr, /* I - IPP attribute */ int element, /* I - Value number (0-based) */ const char **language)/* O - Language code (@code NULL@ for don't care) */ { ipp_tag_t tag; /* Value tag */ /* * Range check input... */ tag = ippGetValueTag(attr); if (!attr || element < 0 || element >= attr->num_values || (tag != IPP_TAG_TEXTLANG && tag != IPP_TAG_NAMELANG && (tag < IPP_TAG_TEXT || tag > IPP_TAG_MIMETYPE))) return (NULL); /* * Return the value... */ if (language) *language = attr->values[element].string.language; return (attr->values[element].string.text); } /* * 'ippGetValueTag()' - Get the value tag for an attribute. * * @since CUPS 1.6/macOS 10.8@ */ ipp_tag_t /* O - Value tag or @code IPP_TAG_ZERO@ on error */ ippGetValueTag(ipp_attribute_t *attr) /* I - IPP attribute */ { /* * Range check input... */ if (!attr) return (IPP_TAG_ZERO); /* * Return the value... */ return (attr->value_tag & IPP_TAG_CUPS_MASK); } /* * 'ippGetVersion()' - Get the major and minor version number from an IPP message. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - Major version number or 0 on error */ ippGetVersion(ipp_t *ipp, /* I - IPP message */ int *minor) /* O - Minor version number or @code NULL@ for don't care */ { /* * Range check input... */ if (!ipp) { if (minor) *minor = 0; return (0); } /* * Return the value... */ if (minor) *minor = ipp->request.any.version[1]; return (ipp->request.any.version[0]); } /* * 'ippLength()' - Compute the length of an IPP message. */ size_t /* O - Size of IPP message */ ippLength(ipp_t *ipp) /* I - IPP message */ { return (ipp_length(ipp, 0)); } /* * 'ippNextAttribute()' - Return the next attribute in the message. * * @since CUPS 1.6/macOS 10.8@ */ ipp_attribute_t * /* O - Next attribute or @code NULL@ if none */ ippNextAttribute(ipp_t *ipp) /* I - IPP message */ { /* * Range check input... */ if (!ipp || !ipp->current) return (NULL); /* * Return the next attribute... */ return (ipp->current = ipp->current->next); } /* * 'ippNew()' - Allocate a new IPP message. */ ipp_t * /* O - New IPP message */ ippNew(void) { ipp_t *temp; /* New IPP message */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ DEBUG_puts("ippNew()"); if ((temp = (ipp_t *)calloc(1, sizeof(ipp_t))) != NULL) { /* * Set default version - usually 2.0... */ DEBUG_printf(("4debug_alloc: %p IPP message", (void *)temp)); if (cg->server_version == 0) _cupsSetDefaults(); temp->request.any.version[0] = (ipp_uchar_t)(cg->server_version / 10); temp->request.any.version[1] = (ipp_uchar_t)(cg->server_version % 10); temp->use = 1; } DEBUG_printf(("1ippNew: Returning %p", (void *)temp)); return (temp); } /* * 'ippNewRequest()' - Allocate a new IPP request message. * * The new request message is initialized with the "attributes-charset" and * "attributes-natural-language" attributes added. The * "attributes-natural-language" value is derived from the current locale. * * @since CUPS 1.2/macOS 10.5@ */ ipp_t * /* O - IPP request message */ ippNewRequest(ipp_op_t op) /* I - Operation code */ { ipp_t *request; /* IPP request message */ cups_lang_t *language; /* Current language localization */ static int request_id = 0; /* Current request ID */ static _cups_mutex_t request_mutex = _CUPS_MUTEX_INITIALIZER; /* Mutex for request ID */ DEBUG_printf(("ippNewRequest(op=%02x(%s))", op, ippOpString(op))); /* * Create a new IPP message... */ if ((request = ippNew()) == NULL) return (NULL); /* * Set the operation and request ID... */ _cupsMutexLock(&request_mutex); request->request.op.operation_id = op; request->request.op.request_id = ++request_id; _cupsMutexUnlock(&request_mutex); /* * Use UTF-8 as the character set... */ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "utf-8"); /* * Get the language from the current locale... */ language = cupsLangDefault(); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, language->language); /* * Return the new request... */ return (request); } /* * 'ippNewResponse()' - Allocate a new IPP response message. * * The new response message is initialized with the same "version-number", * "request-id", "attributes-charset", and "attributes-natural-language" as the * provided request message. If the "attributes-charset" or * "attributes-natural-language" attributes are missing from the request, * 'utf-8' and a value derived from the current locale are substituted, * respectively. * * @since CUPS 1.7/macOS 10.9@ */ ipp_t * /* O - IPP response message */ ippNewResponse(ipp_t *request) /* I - IPP request message */ { ipp_t *response; /* IPP response message */ ipp_attribute_t *attr; /* Current attribute */ /* * Range check input... */ if (!request) return (NULL); /* * Create a new IPP message... */ if ((response = ippNew()) == NULL) return (NULL); /* * Copy the request values over to the response... */ response->request.status.version[0] = request->request.op.version[0]; response->request.status.version[1] = request->request.op.version[1]; response->request.status.request_id = request->request.op.request_id; /* * The first attribute MUST be attributes-charset... */ attr = request->attrs; if (attr && attr->name && !strcmp(attr->name, "attributes-charset") && attr->group_tag == IPP_TAG_OPERATION && attr->value_tag == IPP_TAG_CHARSET && attr->num_values == 1) { /* * Copy charset from request... */ ippAddString(response, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, attr->values[0].string.text); } else { /* * Use "utf-8" as the default... */ ippAddString(response, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "utf-8"); } /* * Then attributes-natural-language... */ if (attr) attr = attr->next; if (attr && attr->name && !strcmp(attr->name, "attributes-natural-language") && attr->group_tag == IPP_TAG_OPERATION && attr->value_tag == IPP_TAG_LANGUAGE && attr->num_values == 1) { /* * Copy language from request... */ ippAddString(response, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, attr->values[0].string.text); } else { /* * Use the language from the current locale... */ cups_lang_t *language = cupsLangDefault(); /* Current locale */ ippAddString(response, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, language->language); } return (response); } /* * 'ippRead()' - Read data for an IPP message from a HTTP connection. */ ipp_state_t /* O - Current state */ ippRead(http_t *http, /* I - HTTP connection */ ipp_t *ipp) /* I - IPP data */ { DEBUG_printf(("ippRead(http=%p, ipp=%p), data_remaining=" CUPS_LLFMT, (void *)http, (void *)ipp, CUPS_LLCAST (http ? http->data_remaining : -1))); if (!http) return (IPP_STATE_ERROR); DEBUG_printf(("2ippRead: http->state=%d, http->used=%d", http->state, http->used)); return (ippReadIO(http, (ipp_iocb_t)ipp_read_http, http->blocking, NULL, ipp)); } /* * 'ippReadFile()' - Read data for an IPP message from a file. * * @since CUPS 1.1.19/macOS 10.3@ */ ipp_state_t /* O - Current state */ ippReadFile(int fd, /* I - HTTP data */ ipp_t *ipp) /* I - IPP data */ { DEBUG_printf(("ippReadFile(fd=%d, ipp=%p)", fd, (void *)ipp)); return (ippReadIO(&fd, (ipp_iocb_t)ipp_read_file, 1, NULL, ipp)); } /* * 'ippReadIO()' - Read data for an IPP message. * * @since CUPS 1.2/macOS 10.5@ */ ipp_state_t /* O - Current state */ ippReadIO(void *src, /* I - Data source */ ipp_iocb_t cb, /* I - Read callback function */ int blocking, /* I - Use blocking IO? */ ipp_t *parent, /* I - Parent request, if any */ ipp_t *ipp) /* I - IPP data */ { int n; /* Length of data */ unsigned char *buffer, /* Data buffer */ string[IPP_MAX_TEXT], /* Small string buffer */ *bufptr; /* Pointer into buffer */ ipp_attribute_t *attr; /* Current attribute */ ipp_tag_t tag; /* Current tag */ ipp_tag_t value_tag; /* Current value tag */ _ipp_value_t *value; /* Current value */ DEBUG_printf(("ippReadIO(src=%p, cb=%p, blocking=%d, parent=%p, ipp=%p)", (void *)src, (void *)cb, blocking, (void *)parent, (void *)ipp)); DEBUG_printf(("2ippReadIO: ipp->state=%d", ipp ? ipp->state : IPP_STATE_ERROR)); if (!src || !ipp) return (IPP_STATE_ERROR); if ((buffer = (unsigned char *)_cupsBufferGet(IPP_BUF_SIZE)) == NULL) { DEBUG_puts("1ippReadIO: Unable to get read buffer."); return (IPP_STATE_ERROR); } switch (ipp->state) { case IPP_STATE_IDLE : ipp->state ++; /* Avoid common problem... */ case IPP_STATE_HEADER : if (parent == NULL) { /* * Get the request header... */ if ((*cb)(src, buffer, 8) < 8) { DEBUG_puts("1ippReadIO: Unable to read header."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } /* * Then copy the request header over... */ ipp->request.any.version[0] = buffer[0]; ipp->request.any.version[1] = buffer[1]; ipp->request.any.op_status = (buffer[2] << 8) | buffer[3]; ipp->request.any.request_id = (((((buffer[4] << 8) | buffer[5]) << 8) | buffer[6]) << 8) | buffer[7]; DEBUG_printf(("2ippReadIO: version=%d.%d", buffer[0], buffer[1])); DEBUG_printf(("2ippReadIO: op_status=%04x", ipp->request.any.op_status)); DEBUG_printf(("2ippReadIO: request_id=%d", ipp->request.any.request_id)); } ipp->state = IPP_STATE_ATTRIBUTE; ipp->current = NULL; ipp->curtag = IPP_TAG_ZERO; ipp->prev = ipp->last; /* * If blocking is disabled, stop here... */ if (!blocking) break; case IPP_STATE_ATTRIBUTE : for (;;) { if ((*cb)(src, buffer, 1) < 1) { DEBUG_puts("1ippReadIO: Callback returned EOF/error"); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } DEBUG_printf(("2ippReadIO: ipp->current=%p, ipp->prev=%p", (void *)ipp->current, (void *)ipp->prev)); /* * Read this attribute... */ tag = (ipp_tag_t)buffer[0]; if (tag == IPP_TAG_EXTENSION) { /* * Read 32-bit "extension" tag... */ if ((*cb)(src, buffer, 4) < 1) { DEBUG_puts("1ippReadIO: Callback returned EOF/error"); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } tag = (ipp_tag_t)((((((buffer[0] << 8) | buffer[1]) << 8) | buffer[2]) << 8) | buffer[3]); if (tag & IPP_TAG_CUPS_CONST) { /* * Fail if the high bit is set in the tag... */ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP extension tag larger than 0x7FFFFFFF."), 1); DEBUG_printf(("1ippReadIO: bad tag 0x%x.", tag)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } } if (tag == IPP_TAG_END) { /* * No more attributes left... */ DEBUG_puts("2ippReadIO: IPP_TAG_END."); ipp->state = IPP_STATE_DATA; break; } else if (tag < IPP_TAG_UNSUPPORTED_VALUE) { /* * Group tag... Set the current group and continue... */ if (ipp->curtag == tag) ipp->prev = ippAddSeparator(ipp); else if (ipp->current) ipp->prev = ipp->current; ipp->curtag = tag; ipp->current = NULL; DEBUG_printf(("2ippReadIO: group tag=%x(%s), ipp->prev=%p", tag, ippTagString(tag), (void *)ipp->prev)); continue; } DEBUG_printf(("2ippReadIO: value tag=%x(%s)", tag, ippTagString(tag))); /* * Get the name... */ if ((*cb)(src, buffer, 2) < 2) { DEBUG_puts("1ippReadIO: unable to read name length."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } n = (buffer[0] << 8) | buffer[1]; if (n >= IPP_BUF_SIZE) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP name larger than 32767 bytes."), 1); DEBUG_printf(("1ippReadIO: bad name length %d.", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } DEBUG_printf(("2ippReadIO: name length=%d", n)); if (n == 0 && tag != IPP_TAG_MEMBERNAME && tag != IPP_TAG_END_COLLECTION) { /* * More values for current attribute... */ if (ipp->current == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP attribute has no name."), 1); DEBUG_puts("1ippReadIO: Attribute without name and no current."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } attr = ipp->current; value_tag = (ipp_tag_t)(attr->value_tag & IPP_TAG_CUPS_MASK); /* * Make sure we aren't adding a new value of a different * type... */ if (value_tag == IPP_TAG_ZERO) { /* * Setting the value of a collection member... */ attr->value_tag = tag; } else if (value_tag == IPP_TAG_TEXTLANG || value_tag == IPP_TAG_NAMELANG || (value_tag >= IPP_TAG_TEXT && value_tag <= IPP_TAG_MIMETYPE)) { /* * String values can sometimes come across in different * forms; accept sets of differing values... */ if (tag != IPP_TAG_TEXTLANG && tag != IPP_TAG_NAMELANG && (tag < IPP_TAG_TEXT || tag > IPP_TAG_MIMETYPE) && tag != IPP_TAG_NOVALUE) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP 1setOf attribute with incompatible value " "tags."), 1); DEBUG_printf(("1ippReadIO: 1setOf value tag %x(%s) != %x(%s)", value_tag, ippTagString(value_tag), tag, ippTagString(tag))); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if (value_tag != tag) { DEBUG_printf(("1ippReadIO: Converting %s attribute from %s to %s.", attr->name, ippTagString(value_tag), ippTagString(tag))); ippSetValueTag(ipp, &attr, tag); } } else if (value_tag == IPP_TAG_INTEGER || value_tag == IPP_TAG_RANGE) { /* * Integer and rangeOfInteger values can sometimes be mixed; accept * sets of differing values... */ if (tag != IPP_TAG_INTEGER && tag != IPP_TAG_RANGE) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP 1setOf attribute with incompatible value " "tags."), 1); DEBUG_printf(("1ippReadIO: 1setOf value tag %x(%s) != %x(%s)", value_tag, ippTagString(value_tag), tag, ippTagString(tag))); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if (value_tag == IPP_TAG_INTEGER && tag == IPP_TAG_RANGE) { /* * Convert integer values to rangeOfInteger values... */ DEBUG_printf(("1ippReadIO: Converting %s attribute to " "rangeOfInteger.", attr->name)); ippSetValueTag(ipp, &attr, IPP_TAG_RANGE); } } else if (value_tag != tag) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP 1setOf attribute with incompatible value " "tags."), 1); DEBUG_printf(("1ippReadIO: value tag %x(%s) != %x(%s)", value_tag, ippTagString(value_tag), tag, ippTagString(tag))); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } /* * Finally, reallocate the attribute array as needed... */ if ((value = ipp_set_value(ipp, &attr, attr->num_values)) == NULL) { _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } } else if (tag == IPP_TAG_MEMBERNAME) { /* * Name must be length 0! */ if (n) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP member name is not empty."), 1); DEBUG_puts("1ippReadIO: member name not empty."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if (ipp->current) ipp->prev = ipp->current; attr = ipp->current = ipp_add_attr(ipp, NULL, ipp->curtag, IPP_TAG_ZERO, 1); if (!attr) { _cupsSetHTTPError(HTTP_STATUS_ERROR); DEBUG_puts("1ippReadIO: unable to allocate attribute."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } DEBUG_printf(("2ippReadIO: membername, ipp->current=%p, ipp->prev=%p", (void *)ipp->current, (void *)ipp->prev)); value = attr->values; } else if (tag != IPP_TAG_END_COLLECTION) { /* * New attribute; read the name and add it... */ if ((*cb)(src, buffer, (size_t)n) < n) { DEBUG_puts("1ippReadIO: unable to read name."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } buffer[n] = '\0'; if (ipp->current) ipp->prev = ipp->current; if ((attr = ipp->current = ipp_add_attr(ipp, (char *)buffer, ipp->curtag, tag, 1)) == NULL) { _cupsSetHTTPError(HTTP_STATUS_ERROR); DEBUG_puts("1ippReadIO: unable to allocate attribute."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } DEBUG_printf(("2ippReadIO: name=\"%s\", ipp->current=%p, ipp->prev=%p", buffer, (void *)ipp->current, (void *)ipp->prev)); value = attr->values; } else { attr = NULL; value = NULL; } if ((*cb)(src, buffer, 2) < 2) { DEBUG_puts("1ippReadIO: unable to read value length."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } n = (buffer[0] << 8) | buffer[1]; DEBUG_printf(("2ippReadIO: value length=%d", n)); if (n >= IPP_BUF_SIZE) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP value larger than 32767 bytes."), 1); DEBUG_printf(("1ippReadIO: bad value length %d.", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } switch (tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : if (n != 4) { if (tag == IPP_TAG_INTEGER) _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP integer value not 4 bytes."), 1); else _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP enum value not 4 bytes."), 1); DEBUG_printf(("1ippReadIO: bad integer value length %d.", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if ((*cb)(src, buffer, 4) < 4) { DEBUG_puts("1ippReadIO: Unable to read integer value."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } n = (((((buffer[0] << 8) | buffer[1]) << 8) | buffer[2]) << 8) | buffer[3]; if (attr->value_tag == IPP_TAG_RANGE) value->range.lower = value->range.upper = n; else value->integer = n; break; case IPP_TAG_BOOLEAN : if (n != 1) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP boolean value not 1 byte."), 1); DEBUG_printf(("1ippReadIO: bad boolean value length %d.", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if ((*cb)(src, buffer, 1) < 1) { DEBUG_puts("1ippReadIO: Unable to read boolean value."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } value->boolean = (char)buffer[0]; break; case IPP_TAG_NOVALUE : case IPP_TAG_NOTSETTABLE : case IPP_TAG_DELETEATTR : case IPP_TAG_ADMINDEFINE : /* * These value types are not supposed to have values, however * some vendors (Brother) do not implement IPP correctly and so * we need to map non-empty values to text... */ if (attr->value_tag == tag) { if (n == 0) break; attr->value_tag = IPP_TAG_TEXT; } case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : if (n > 0) { if ((*cb)(src, buffer, (size_t)n) < n) { DEBUG_puts("1ippReadIO: unable to read string value."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } } buffer[n] = '\0'; value->string.text = _cupsStrAlloc((char *)buffer); DEBUG_printf(("2ippReadIO: value=\"%s\"", value->string.text)); break; case IPP_TAG_DATE : if (n != 11) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP date value not 11 bytes."), 1); DEBUG_printf(("1ippReadIO: bad date value length %d.", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if ((*cb)(src, value->date, 11) < 11) { DEBUG_puts("1ippReadIO: Unable to read date value."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } break; case IPP_TAG_RESOLUTION : if (n != 9) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP resolution value not 9 bytes."), 1); DEBUG_printf(("1ippReadIO: bad resolution value length %d.", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if ((*cb)(src, buffer, 9) < 9) { DEBUG_puts("1ippReadIO: Unable to read resolution value."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } value->resolution.xres = (((((buffer[0] << 8) | buffer[1]) << 8) | buffer[2]) << 8) | buffer[3]; value->resolution.yres = (((((buffer[4] << 8) | buffer[5]) << 8) | buffer[6]) << 8) | buffer[7]; value->resolution.units = (ipp_res_t)buffer[8]; break; case IPP_TAG_RANGE : if (n != 8) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP rangeOfInteger value not 8 bytes."), 1); DEBUG_printf(("1ippReadIO: bad rangeOfInteger value length " "%d.", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if ((*cb)(src, buffer, 8) < 8) { DEBUG_puts("1ippReadIO: Unable to read range value."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } value->range.lower = (((((buffer[0] << 8) | buffer[1]) << 8) | buffer[2]) << 8) | buffer[3]; value->range.upper = (((((buffer[4] << 8) | buffer[5]) << 8) | buffer[6]) << 8) | buffer[7]; break; case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : if (n < 4) { if (tag == IPP_TAG_TEXTLANG) _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP textWithLanguage value less than " "minimum 4 bytes."), 1); else _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP nameWithLanguage value less than " "minimum 4 bytes."), 1); DEBUG_printf(("1ippReadIO: bad stringWithLanguage value " "length %d.", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if ((*cb)(src, buffer, (size_t)n) < n) { DEBUG_puts("1ippReadIO: Unable to read string w/language " "value."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; /* * text-with-language and name-with-language are composite * values: * * language-length * language * text-length * text */ n = (bufptr[0] << 8) | bufptr[1]; if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE) || n >= (int)sizeof(string)) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP language length overflows value."), 1); DEBUG_printf(("1ippReadIO: bad language value length %d.", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } else if (n >= IPP_MAX_LANGUAGE) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP language length too large."), 1); DEBUG_printf(("1ippReadIO: bad language value length %d.", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } memcpy(string, bufptr + 2, (size_t)n); string[n] = '\0'; value->string.language = _cupsStrAlloc((char *)string); bufptr += 2 + n; n = (bufptr[0] << 8) | bufptr[1]; if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE)) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP string length overflows value."), 1); DEBUG_printf(("1ippReadIO: bad string value length %d.", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr[2 + n] = '\0'; value->string.text = _cupsStrAlloc((char *)bufptr + 2); break; case IPP_TAG_BEGIN_COLLECTION : /* * Oh, boy, here comes a collection value, so read it... */ value->collection = ippNew(); if (n > 0) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP begCollection value not 0 bytes."), 1); DEBUG_puts("1ippReadIO: begCollection tag with value length " "> 0."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if (ippReadIO(src, cb, 1, ipp, value->collection) == IPP_STATE_ERROR) { DEBUG_puts("1ippReadIO: Unable to read collection value."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } break; case IPP_TAG_END_COLLECTION : _cupsBufferRelease((char *)buffer); if (n > 0) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP endCollection value not 0 bytes."), 1); DEBUG_puts("1ippReadIO: endCollection tag with value length " "> 0."); return (IPP_STATE_ERROR); } DEBUG_puts("1ippReadIO: endCollection tag..."); return (ipp->state = IPP_STATE_DATA); case IPP_TAG_MEMBERNAME : /* * The value the name of the member in the collection, which * we need to carry over... */ if (!attr) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP memberName with no attribute."), 1); DEBUG_puts("1ippReadIO: Member name without attribute."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } else if (n == 0) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP memberName value is empty."), 1); DEBUG_puts("1ippReadIO: Empty member name value."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } else if ((*cb)(src, buffer, (size_t)n) < n) { DEBUG_puts("1ippReadIO: Unable to read member name value."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } buffer[n] = '\0'; attr->name = _cupsStrAlloc((char *)buffer); /* * Since collection members are encoded differently than * regular attributes, make sure we don't start with an * empty value... */ attr->num_values --; DEBUG_printf(("2ippReadIO: member name=\"%s\"", attr->name)); break; default : /* Other unsupported values */ if (tag == IPP_TAG_STRING && n > IPP_MAX_LENGTH) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP octetString length too large."), 1); DEBUG_printf(("1ippReadIO: bad octetString value length %d.", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } value->unknown.length = n; if (n > 0) { if ((value->unknown.data = malloc((size_t)n)) == NULL) { _cupsSetHTTPError(HTTP_STATUS_ERROR); DEBUG_puts("1ippReadIO: Unable to allocate value"); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if ((*cb)(src, value->unknown.data, (size_t)n) < n) { DEBUG_puts("1ippReadIO: Unable to read unsupported value."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } } else value->unknown.data = NULL; break; } /* * If blocking is disabled, stop here... */ if (!blocking) break; } break; case IPP_STATE_DATA : break; default : break; /* anti-compiler-warning-code */ } DEBUG_printf(("1ippReadIO: returning ipp->state=%d.", ipp->state)); _cupsBufferRelease((char *)buffer); return (ipp->state); } /* * 'ippSetBoolean()' - Set a boolean value in an attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * The @code element@ parameter specifies which value to set from 0 to * @code ippGetCount(attr)@. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetBoolean(ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ int element, /* I - Value number (0-based) */ int boolvalue)/* I - Boolean value */ { _ipp_value_t *value; /* Current value */ /* * Range check input... */ if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_BOOLEAN || element < 0 || element > (*attr)->num_values) return (0); /* * Set the value and return... */ if ((value = ipp_set_value(ipp, attr, element)) != NULL) value->boolean = (char)boolvalue; return (value != NULL); } /* * 'ippSetCollection()' - Set a collection value in an attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * The @code element@ parameter specifies which value to set from 0 to * @code ippGetCount(attr)@. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetCollection( ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ int element, /* I - Value number (0-based) */ ipp_t *colvalue) /* I - Collection value */ { _ipp_value_t *value; /* Current value */ /* * Range check input... */ if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_BEGIN_COLLECTION || element < 0 || element > (*attr)->num_values || !colvalue) return (0); /* * Set the value and return... */ if ((value = ipp_set_value(ipp, attr, element)) != NULL) { if (value->collection) ippDelete(value->collection); value->collection = colvalue; colvalue->use ++; } return (value != NULL); } /* * 'ippSetDate()' - Set a dateTime value in an attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * The @code element@ parameter specifies which value to set from 0 to * @code ippGetCount(attr)@. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetDate(ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ int element, /* I - Value number (0-based) */ const ipp_uchar_t *datevalue)/* I - dateTime value */ { _ipp_value_t *value; /* Current value */ /* * Range check input... */ if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_DATE || element < 0 || element > (*attr)->num_values || !datevalue) return (0); /* * Set the value and return... */ if ((value = ipp_set_value(ipp, attr, element)) != NULL) memcpy(value->date, datevalue, sizeof(value->date)); return (value != NULL); } /* * 'ippSetGroupTag()' - Set the group tag of an attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * The @code group@ parameter specifies the IPP attribute group tag: none * (@code IPP_TAG_ZERO@, for member attributes), document (@code IPP_TAG_DOCUMENT@), * event notification (@code IPP_TAG_EVENT_NOTIFICATION@), operation * (@code IPP_TAG_OPERATION@), printer (@code IPP_TAG_PRINTER@), subscription * (@code IPP_TAG_SUBSCRIPTION@), or unsupported (@code IPP_TAG_UNSUPPORTED_GROUP@). * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetGroupTag( ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - Attribute */ ipp_tag_t group_tag) /* I - Group tag */ { /* * Range check input - group tag must be 0x01 to 0x0F, per RFC 8011... */ if (!ipp || !attr || !*attr || group_tag < IPP_TAG_ZERO || group_tag == IPP_TAG_END || group_tag >= IPP_TAG_UNSUPPORTED_VALUE) return (0); /* * Set the group tag and return... */ (*attr)->group_tag = group_tag; return (1); } /* * 'ippSetInteger()' - Set an integer or enum value in an attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * The @code element@ parameter specifies which value to set from 0 to * @code ippGetCount(attr)@. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetInteger(ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ int element, /* I - Value number (0-based) */ int intvalue) /* I - Integer/enum value */ { _ipp_value_t *value; /* Current value */ /* * Range check input... */ if (!ipp || !attr || !*attr || ((*attr)->value_tag != IPP_TAG_INTEGER && (*attr)->value_tag != IPP_TAG_ENUM) || element < 0 || element > (*attr)->num_values) return (0); /* * Set the value and return... */ if ((value = ipp_set_value(ipp, attr, element)) != NULL) value->integer = intvalue; return (value != NULL); } /* * 'ippSetName()' - Set the name of an attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetName(ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ const char *name) /* I - Attribute name */ { char *temp; /* Temporary name value */ /* * Range check input... */ if (!ipp || !attr || !*attr) return (0); /* * Set the value and return... */ if ((temp = _cupsStrAlloc(name)) != NULL) { if ((*attr)->name) _cupsStrFree((*attr)->name); (*attr)->name = temp; } return (temp != NULL); } /* * 'ippSetOctetString()' - Set an octetString value in an IPP attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * The @code element@ parameter specifies which value to set from 0 to * @code ippGetCount(attr)@. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - 1 on success, 0 on failure */ ippSetOctetString( ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ int element, /* I - Value number (0-based) */ const void *data, /* I - Pointer to octetString data */ int datalen) /* I - Length of octetString data */ { _ipp_value_t *value; /* Current value */ /* * Range check input... */ if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_STRING || element < 0 || element > (*attr)->num_values || datalen < 0 || datalen > IPP_MAX_LENGTH) return (0); /* * Set the value and return... */ if ((value = ipp_set_value(ipp, attr, element)) != NULL) { if ((int)((*attr)->value_tag) & IPP_TAG_CUPS_CONST) { /* * Just copy the pointer... */ value->unknown.data = (void *)data; value->unknown.length = datalen; } else { /* * Copy the data... */ if (value->unknown.data) { /* * Free previous data... */ free(value->unknown.data); value->unknown.data = NULL; value->unknown.length = 0; } if (datalen > 0) { void *temp; /* Temporary data pointer */ if ((temp = malloc((size_t)datalen)) != NULL) { memcpy(temp, data, (size_t)datalen); value->unknown.data = temp; value->unknown.length = datalen; } else return (0); } } } return (value != NULL); } /* * 'ippSetOperation()' - Set the operation ID in an IPP request message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetOperation(ipp_t *ipp, /* I - IPP request message */ ipp_op_t op) /* I - Operation ID */ { /* * Range check input... */ if (!ipp) return (0); /* * Set the operation and return... */ ipp->request.op.operation_id = op; return (1); } /* * 'ippSetRange()' - Set a rangeOfInteger value in an attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * The @code element@ parameter specifies which value to set from 0 to * @code ippGetCount(attr)@. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetRange(ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ int element, /* I - Value number (0-based) */ int lowervalue, /* I - Lower bound for range */ int uppervalue) /* I - Upper bound for range */ { _ipp_value_t *value; /* Current value */ /* * Range check input... */ if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_RANGE || element < 0 || element > (*attr)->num_values || lowervalue > uppervalue) return (0); /* * Set the value and return... */ if ((value = ipp_set_value(ipp, attr, element)) != NULL) { value->range.lower = lowervalue; value->range.upper = uppervalue; } return (value != NULL); } /* * 'ippSetRequestId()' - Set the request ID in an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code request_id@ parameter must be greater than 0. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetRequestId(ipp_t *ipp, /* I - IPP message */ int request_id) /* I - Request ID */ { /* * Range check input; not checking request_id values since ipptool wants to send * invalid values for conformance testing and a bad request_id does not affect the * encoding of a message... */ if (!ipp) return (0); /* * Set the request ID and return... */ ipp->request.any.request_id = request_id; return (1); } /* * 'ippSetResolution()' - Set a resolution value in an attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * The @code element@ parameter specifies which value to set from 0 to * @code ippGetCount(attr)@. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetResolution( ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ int element, /* I - Value number (0-based) */ ipp_res_t unitsvalue, /* I - Resolution units */ int xresvalue, /* I - Horizontal/cross feed resolution */ int yresvalue) /* I - Vertical/feed resolution */ { _ipp_value_t *value; /* Current value */ /* * Range check input... */ if (!ipp || !attr || !*attr || (*attr)->value_tag != IPP_TAG_RESOLUTION || element < 0 || element > (*attr)->num_values || xresvalue <= 0 || yresvalue <= 0 || unitsvalue < IPP_RES_PER_INCH || unitsvalue > IPP_RES_PER_CM) return (0); /* * Set the value and return... */ if ((value = ipp_set_value(ipp, attr, element)) != NULL) { value->resolution.units = unitsvalue; value->resolution.xres = xresvalue; value->resolution.yres = yresvalue; } return (value != NULL); } /* * 'ippSetState()' - Set the current state of the IPP message. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetState(ipp_t *ipp, /* I - IPP message */ ipp_state_t state) /* I - IPP state value */ { /* * Range check input... */ if (!ipp) return (0); /* * Set the state and return... */ ipp->state = state; ipp->current = NULL; return (1); } /* * 'ippSetStatusCode()' - Set the status code in an IPP response or event message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetStatusCode(ipp_t *ipp, /* I - IPP response or event message */ ipp_status_t status) /* I - Status code */ { /* * Range check input... */ if (!ipp) return (0); /* * Set the status code and return... */ ipp->request.status.status_code = status; return (1); } /* * 'ippSetString()' - Set a string value in an attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * The @code element@ parameter specifies which value to set from 0 to * @code ippGetCount(attr)@. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetString(ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ int element, /* I - Value number (0-based) */ const char *strvalue) /* I - String value */ { char *temp; /* Temporary string */ _ipp_value_t *value; /* Current value */ ipp_tag_t value_tag; /* Value tag */ /* * Range check input... */ if (attr && *attr) value_tag = (*attr)->value_tag & IPP_TAG_CUPS_MASK; else value_tag = IPP_TAG_ZERO; if (!ipp || !attr || !*attr || (value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG && value_tag != IPP_TAG_NAMELANG) || value_tag > IPP_TAG_MIMETYPE || !strvalue) return (0); /* * Set the value and return... */ if ((value = ipp_set_value(ipp, attr, element)) != NULL) { if (element > 0) value->string.language = (*attr)->values[0].string.language; if ((int)((*attr)->value_tag) & IPP_TAG_CUPS_CONST) value->string.text = (char *)strvalue; else if ((temp = _cupsStrAlloc(strvalue)) != NULL) { if (value->string.text) _cupsStrFree(value->string.text); value->string.text = temp; } else return (0); } return (value != NULL); } /* * 'ippSetStringf()' - Set a formatted string value of an attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * The @code element@ parameter specifies which value to set from 0 to * @code ippGetCount(attr)@. * * The @code format@ parameter uses formatting characters compatible with the * printf family of standard functions. Additional arguments follow it as * needed. The formatted string is truncated as needed to the maximum length of * the corresponding value type. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - 1 on success, 0 on failure */ ippSetStringf(ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ int element, /* I - Value number (0-based) */ const char *format, /* I - Printf-style format string */ ...) /* I - Additional arguments as needed */ { int ret; /* Return value */ va_list ap; /* Pointer to additional arguments */ va_start(ap, format); ret = ippSetStringfv(ipp, attr, element, format, ap); va_end(ap); return (ret); } /* * 'ippSetStringf()' - Set a formatted string value of an attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * The @code element@ parameter specifies which value to set from 0 to * @code ippGetCount(attr)@. * * The @code format@ parameter uses formatting characters compatible with the * printf family of standard functions. Additional arguments follow it as * needed. The formatted string is truncated as needed to the maximum length of * the corresponding value type. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - 1 on success, 0 on failure */ ippSetStringfv(ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ int element, /* I - Value number (0-based) */ const char *format, /* I - Printf-style format string */ va_list ap) /* I - Pointer to additional arguments */ { ipp_tag_t value_tag; /* Value tag */ char buffer[IPP_MAX_TEXT + 4]; /* Formatted text string */ ssize_t bytes, /* Length of formatted value */ max_bytes; /* Maximum number of bytes for value */ /* * Range check input... */ if (attr && *attr) value_tag = (*attr)->value_tag & IPP_TAG_CUPS_MASK; else value_tag = IPP_TAG_ZERO; if (!ipp || !attr || !*attr || (value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG && value_tag != IPP_TAG_NAMELANG) || value_tag > IPP_TAG_MIMETYPE || !format) return (0); /* * Format the string... */ if (!strcmp(format, "%s")) { /* * Optimize the simple case... */ const char *s = va_arg(ap, char *); if (!s) s = "(null)"; bytes = (ssize_t)strlen(s); strlcpy(buffer, s, sizeof(buffer)); } else { /* * Do a full formatting of the message... */ if ((bytes = vsnprintf(buffer, sizeof(buffer), format, ap)) < 0) return (0); } /* * Limit the length of the string... */ switch (value_tag) { default : case IPP_TAG_TEXT : case IPP_TAG_TEXTLANG : max_bytes = IPP_MAX_TEXT; break; case IPP_TAG_NAME : case IPP_TAG_NAMELANG : max_bytes = IPP_MAX_NAME; break; case IPP_TAG_CHARSET : max_bytes = IPP_MAX_CHARSET; break; case IPP_TAG_KEYWORD : max_bytes = IPP_MAX_KEYWORD; break; case IPP_TAG_LANGUAGE : max_bytes = IPP_MAX_LANGUAGE; break; case IPP_TAG_MIMETYPE : max_bytes = IPP_MAX_MIMETYPE; break; case IPP_TAG_URI : max_bytes = IPP_MAX_URI; break; case IPP_TAG_URISCHEME : max_bytes = IPP_MAX_URISCHEME; break; } if (bytes >= max_bytes) { char *bufmax, /* Buffer at max_bytes */ *bufptr; /* Pointer into buffer */ bufptr = buffer + strlen(buffer) - 1; bufmax = buffer + max_bytes - 1; while (bufptr > bufmax) { if (*bufptr & 0x80) { while ((*bufptr & 0xc0) == 0x80 && bufptr > buffer) bufptr --; } bufptr --; } *bufptr = '\0'; } /* * Set the formatted string and return... */ return (ippSetString(ipp, attr, element, buffer)); } /* * 'ippSetValueTag()' - Set the value tag of an attribute. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The @code attr@ parameter may be modified as a result of setting the value. * * Integer (@code IPP_TAG_INTEGER@) values can be promoted to rangeOfInteger * (@code IPP_TAG_RANGE@) values, the various string tags can be promoted to name * (@code IPP_TAG_NAME@) or nameWithLanguage (@code IPP_TAG_NAMELANG@) values, text * (@code IPP_TAG_TEXT@) values can be promoted to textWithLanguage * (@code IPP_TAG_TEXTLANG@) values, and all values can be demoted to the various * out-of-band value tags such as no-value (@code IPP_TAG_NOVALUE@). All other changes * will be rejected. * * Promoting a string attribute to nameWithLanguage or textWithLanguage adds the language * code in the "attributes-natural-language" attribute or, if not present, the language * code for the current locale. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetValueTag( ipp_t *ipp, /* I - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ ipp_tag_t value_tag) /* I - Value tag */ { int i; /* Looping var */ _ipp_value_t *value; /* Current value */ int integer; /* Current integer value */ cups_lang_t *language; /* Current language */ char code[32]; /* Language code */ ipp_tag_t temp_tag; /* Temporary value tag */ /* * Range check input... */ if (!ipp || !attr || !*attr) return (0); /* * If there is no change, return immediately... */ if (value_tag == (*attr)->value_tag) return (1); /* * Otherwise implement changes as needed... */ temp_tag = (ipp_tag_t)((int)((*attr)->value_tag) & IPP_TAG_CUPS_MASK); switch (value_tag) { case IPP_TAG_UNSUPPORTED_VALUE : case IPP_TAG_DEFAULT : case IPP_TAG_UNKNOWN : case IPP_TAG_NOVALUE : case IPP_TAG_NOTSETTABLE : case IPP_TAG_DELETEATTR : case IPP_TAG_ADMINDEFINE : /* * Free any existing values... */ if ((*attr)->num_values > 0) ipp_free_values(*attr, 0, (*attr)->num_values); /* * Set out-of-band value... */ (*attr)->value_tag = value_tag; break; case IPP_TAG_RANGE : if (temp_tag != IPP_TAG_INTEGER) return (0); for (i = (*attr)->num_values, value = (*attr)->values; i > 0; i --, value ++) { integer = value->integer; value->range.lower = value->range.upper = integer; } (*attr)->value_tag = IPP_TAG_RANGE; break; case IPP_TAG_NAME : if (temp_tag != IPP_TAG_KEYWORD && temp_tag != IPP_TAG_URI && temp_tag != IPP_TAG_URISCHEME && temp_tag != IPP_TAG_LANGUAGE && temp_tag != IPP_TAG_MIMETYPE) return (0); (*attr)->value_tag = (ipp_tag_t)(IPP_TAG_NAME | ((*attr)->value_tag & IPP_TAG_CUPS_CONST)); break; case IPP_TAG_NAMELANG : case IPP_TAG_TEXTLANG : if (value_tag == IPP_TAG_NAMELANG && (temp_tag != IPP_TAG_NAME && temp_tag != IPP_TAG_KEYWORD && temp_tag != IPP_TAG_URI && temp_tag != IPP_TAG_URISCHEME && temp_tag != IPP_TAG_LANGUAGE && temp_tag != IPP_TAG_MIMETYPE)) return (0); if (value_tag == IPP_TAG_TEXTLANG && temp_tag != IPP_TAG_TEXT) return (0); if (ipp->attrs && ipp->attrs->next && ipp->attrs->next->name && !strcmp(ipp->attrs->next->name, "attributes-natural-language")) { /* * Use the language code from the IPP message... */ (*attr)->values[0].string.language = _cupsStrAlloc(ipp->attrs->next->values[0].string.text); } else { /* * Otherwise, use the language code corresponding to the locale... */ language = cupsLangDefault(); (*attr)->values[0].string.language = _cupsStrAlloc(ipp_lang_code(language->language, code, sizeof(code))); } for (i = (*attr)->num_values - 1, value = (*attr)->values + 1; i > 0; i --, value ++) value->string.language = (*attr)->values[0].string.language; if ((int)(*attr)->value_tag & IPP_TAG_CUPS_CONST) { /* * Make copies of all values... */ for (i = (*attr)->num_values, value = (*attr)->values; i > 0; i --, value ++) value->string.text = _cupsStrAlloc(value->string.text); } (*attr)->value_tag = IPP_TAG_NAMELANG; break; case IPP_TAG_KEYWORD : if (temp_tag == IPP_TAG_NAME || temp_tag == IPP_TAG_NAMELANG) break; /* Silently "allow" name -> keyword */ default : return (0); } return (1); } /* * 'ippSetVersion()' - Set the version number in an IPP message. * * The @code ipp@ parameter refers to an IPP message previously created using * the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions. * * The valid version numbers are currently 1.0, 1.1, 2.0, 2.1, and 2.2. * * @since CUPS 1.6/macOS 10.8@ */ int /* O - 1 on success, 0 on failure */ ippSetVersion(ipp_t *ipp, /* I - IPP message */ int major, /* I - Major version number (major.minor) */ int minor) /* I - Minor version number (major.minor) */ { /* * Range check input... */ if (!ipp || major < 0 || minor < 0) return (0); /* * Set the version number... */ ipp->request.any.version[0] = (ipp_uchar_t)major; ipp->request.any.version[1] = (ipp_uchar_t)minor; return (1); } /* * 'ippTimeToDate()' - Convert from time in seconds to RFC 2579 format. */ const ipp_uchar_t * /* O - RFC-2579 date/time data */ ippTimeToDate(time_t t) /* I - Time in seconds */ { struct tm *unixdate; /* UNIX unixdate/time info */ ipp_uchar_t *date = _cupsGlobals()->ipp_date; /* RFC-2579 date/time data */ /* * RFC-2579 date/time format is: * * Byte(s) Description * ------- ----------- * 0-1 Year (0 to 65535) * 2 Month (1 to 12) * 3 Day (1 to 31) * 4 Hours (0 to 23) * 5 Minutes (0 to 59) * 6 Seconds (0 to 60, 60 = "leap second") * 7 Deciseconds (0 to 9) * 8 +/- UTC * 9 UTC hours (0 to 11) * 10 UTC minutes (0 to 59) */ unixdate = gmtime(&t); unixdate->tm_year += 1900; date[0] = (ipp_uchar_t)(unixdate->tm_year >> 8); date[1] = (ipp_uchar_t)(unixdate->tm_year); date[2] = (ipp_uchar_t)(unixdate->tm_mon + 1); date[3] = (ipp_uchar_t)unixdate->tm_mday; date[4] = (ipp_uchar_t)unixdate->tm_hour; date[5] = (ipp_uchar_t)unixdate->tm_min; date[6] = (ipp_uchar_t)unixdate->tm_sec; date[7] = 0; date[8] = '+'; date[9] = 0; date[10] = 0; return (date); } /* * 'ippValidateAttribute()' - Validate the contents of an attribute. * * This function validates the contents of an attribute based on the name and * value tag. 1 is returned if the attribute is valid, 0 otherwise. On * failure, @link cupsLastErrorString@ is set to a human-readable message. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - 1 if valid, 0 otherwise */ ippValidateAttribute( ipp_attribute_t *attr) /* I - Attribute */ { int i; /* Looping var */ char scheme[64], /* Scheme from URI */ userpass[256], /* Username/password from URI */ hostname[256], /* Hostname from URI */ resource[1024]; /* Resource from URI */ int port, /* Port number from URI */ uri_status; /* URI separation status */ const char *ptr; /* Pointer into string */ ipp_attribute_t *colattr; /* Collection attribute */ regex_t re; /* Regular expression */ ipp_uchar_t *date; /* Current date value */ static const char * const uri_status_strings[] = { /* URI status strings */ "URI too large", "Bad arguments to function", "Bad resource in URI", "Bad port number in URI", "Bad hostname/address in URI", "Bad username in URI", "Bad scheme in URI", "Bad/empty URI", "OK", "Missing scheme in URI", "Unknown scheme in URI", "Missing resource in URI" }; /* * Skip separators. */ if (!attr->name) return (1); /* * Validate the attribute name. */ for (ptr = attr->name; *ptr; ptr ++) if (!isalnum(*ptr & 255) && *ptr != '-' && *ptr != '.' && *ptr != '_') break; if (*ptr || ptr == attr->name) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad attribute name - invalid character " "(RFC 8011 section 5.1.4)."), attr->name); return (0); } if ((ptr - attr->name) > 255) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad attribute name - bad length %d " "(RFC 8011 section 5.1.4)."), attr->name, (int)(ptr - attr->name)); return (0); } switch (attr->value_tag) { case IPP_TAG_INTEGER : break; case IPP_TAG_BOOLEAN : for (i = 0; i < attr->num_values; i ++) { if (attr->values[i].boolean != 0 && attr->values[i].boolean != 1) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad boolen value %d " "(RFC 8011 section 5.1.21)."), attr->name, attr->values[i].boolean); return (0); } } break; case IPP_TAG_ENUM : for (i = 0; i < attr->num_values; i ++) { if (attr->values[i].integer < 1) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad enum value %d - out of range " "(RFC 8011 section 5.1.5)."), attr->name, attr->values[i].integer); return (0); } } break; case IPP_TAG_STRING : for (i = 0; i < attr->num_values; i ++) { if (attr->values[i].unknown.length > IPP_MAX_OCTETSTRING) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad octetString value - bad length %d " "(RFC 8011 section 5.1.20)."), attr->name, attr->values[i].unknown.length); return (0); } } break; case IPP_TAG_DATE : for (i = 0; i < attr->num_values; i ++) { date = attr->values[i].date; if (date[2] < 1 || date[2] > 12) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad dateTime month %u " "(RFC 8011 section 5.1.15)."), attr->name, date[2]); return (0); } if (date[3] < 1 || date[3] > 31) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad dateTime day %u " "(RFC 8011 section 5.1.15)."), attr->name, date[3]); return (0); } if (date[4] > 23) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad dateTime hours %u " "(RFC 8011 section 5.1.15)."), attr->name, date[4]); return (0); } if (date[5] > 59) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad dateTime minutes %u " "(RFC 8011 section 5.1.15)."), attr->name, date[5]); return (0); } if (date[6] > 60) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad dateTime seconds %u " "(RFC 8011 section 5.1.15)."), attr->name, date[6]); return (0); } if (date[7] > 9) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad dateTime deciseconds %u " "(RFC 8011 section 5.1.15)."), attr->name, date[7]); return (0); } if (date[8] != '-' && date[8] != '+') { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad dateTime UTC sign '%c' " "(RFC 8011 section 5.1.15)."), attr->name, date[8]); return (0); } if (date[9] > 11) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad dateTime UTC hours %u " "(RFC 8011 section 5.1.15)."), attr->name, date[9]); return (0); } if (date[10] > 59) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad dateTime UTC minutes %u " "(RFC 8011 section 5.1.15)."), attr->name, date[10]); return (0); } } break; case IPP_TAG_RESOLUTION : for (i = 0; i < attr->num_values; i ++) { if (attr->values[i].resolution.xres <= 0) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad resolution value %dx%d%s - cross " "feed resolution must be positive " "(RFC 8011 section 5.1.16)."), attr->name, attr->values[i].resolution.xres, attr->values[i].resolution.yres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : attr->values[i].resolution.units == IPP_RES_PER_CM ? "dpcm" : "unknown"); return (0); } if (attr->values[i].resolution.yres <= 0) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad resolution value %dx%d%s - feed " "resolution must be positive " "(RFC 8011 section 5.1.16)."), attr->name, attr->values[i].resolution.xres, attr->values[i].resolution.yres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : attr->values[i].resolution.units == IPP_RES_PER_CM ? "dpcm" : "unknown"); return (0); } if (attr->values[i].resolution.units != IPP_RES_PER_INCH && attr->values[i].resolution.units != IPP_RES_PER_CM) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad resolution value %dx%d%s - bad " "units value (RFC 8011 section 5.1.16)."), attr->name, attr->values[i].resolution.xres, attr->values[i].resolution.yres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : attr->values[i].resolution.units == IPP_RES_PER_CM ? "dpcm" : "unknown"); return (0); } } break; case IPP_TAG_RANGE : for (i = 0; i < attr->num_values; i ++) { if (attr->values[i].range.lower > attr->values[i].range.upper) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad rangeOfInteger value %d-%d - lower " "greater than upper (RFC 8011 section 5.1.14)."), attr->name, attr->values[i].range.lower, attr->values[i].range.upper); return (0); } } break; case IPP_TAG_BEGIN_COLLECTION : for (i = 0; i < attr->num_values; i ++) { for (colattr = attr->values[i].collection->attrs; colattr; colattr = colattr->next) { if (!ippValidateAttribute(colattr)) return (0); } } break; case IPP_TAG_TEXT : case IPP_TAG_TEXTLANG : for (i = 0; i < attr->num_values; i ++) { for (ptr = attr->values[i].string.text; *ptr; ptr ++) { if ((*ptr & 0xe0) == 0xc0) { ptr ++; if ((*ptr & 0xc0) != 0x80) break; } else if ((*ptr & 0xf0) == 0xe0) { ptr ++; if ((*ptr & 0xc0) != 0x80) break; ptr ++; if ((*ptr & 0xc0) != 0x80) break; } else if ((*ptr & 0xf8) == 0xf0) { ptr ++; if ((*ptr & 0xc0) != 0x80) break; ptr ++; if ((*ptr & 0xc0) != 0x80) break; ptr ++; if ((*ptr & 0xc0) != 0x80) break; } else if (*ptr & 0x80) break; } if (*ptr) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad UTF-8 " "sequence (RFC 8011 section 5.1.2)."), attr->name, attr->values[i].string.text); return (0); } if ((ptr - attr->values[i].string.text) > (IPP_MAX_TEXT - 1)) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad length %d " "(RFC 8011 section 5.1.2)."), attr->name, attr->values[i].string.text, (int)(ptr - attr->values[i].string.text)); return (0); } } break; case IPP_TAG_NAME : case IPP_TAG_NAMELANG : for (i = 0; i < attr->num_values; i ++) { for (ptr = attr->values[i].string.text; *ptr; ptr ++) { if ((*ptr & 0xe0) == 0xc0) { ptr ++; if ((*ptr & 0xc0) != 0x80) break; } else if ((*ptr & 0xf0) == 0xe0) { ptr ++; if ((*ptr & 0xc0) != 0x80) break; ptr ++; if ((*ptr & 0xc0) != 0x80) break; } else if ((*ptr & 0xf8) == 0xf0) { ptr ++; if ((*ptr & 0xc0) != 0x80) break; ptr ++; if ((*ptr & 0xc0) != 0x80) break; ptr ++; if ((*ptr & 0xc0) != 0x80) break; } else if (*ptr & 0x80) break; } if (*ptr) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad UTF-8 " "sequence (RFC 8011 section 5.1.3)."), attr->name, attr->values[i].string.text); return (0); } if ((ptr - attr->values[i].string.text) > (IPP_MAX_NAME - 1)) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad length %d " "(RFC 8011 section 5.1.3)."), attr->name, attr->values[i].string.text, (int)(ptr - attr->values[i].string.text)); return (0); } } break; case IPP_TAG_KEYWORD : for (i = 0; i < attr->num_values; i ++) { for (ptr = attr->values[i].string.text; *ptr; ptr ++) if (!isalnum(*ptr & 255) && *ptr != '-' && *ptr != '.' && *ptr != '_') break; if (*ptr || ptr == attr->values[i].string.text) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad keyword value \"%s\" - invalid " "character (RFC 8011 section 5.1.4)."), attr->name, attr->values[i].string.text); return (0); } if ((ptr - attr->values[i].string.text) > (IPP_MAX_KEYWORD - 1)) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad keyword value \"%s\" - bad " "length %d (RFC 8011 section 5.1.4)."), attr->name, attr->values[i].string.text, (int)(ptr - attr->values[i].string.text)); return (0); } } break; case IPP_TAG_URI : for (i = 0; i < attr->num_values; i ++) { uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, attr->values[i].string.text, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if (uri_status < HTTP_URI_STATUS_OK) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad URI value \"%s\" - %s " "(RFC 8011 section 5.1.6)."), attr->name, attr->values[i].string.text, uri_status_strings[uri_status - HTTP_URI_STATUS_OVERFLOW]); return (0); } if (strlen(attr->values[i].string.text) > (IPP_MAX_URI - 1)) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad URI value \"%s\" - bad length %d " "(RFC 8011 section 5.1.6)."), attr->name, attr->values[i].string.text, (int)strlen(attr->values[i].string.text)); } } break; case IPP_TAG_URISCHEME : for (i = 0; i < attr->num_values; i ++) { ptr = attr->values[i].string.text; if (islower(*ptr & 255)) { for (ptr ++; *ptr; ptr ++) if (!islower(*ptr & 255) && !isdigit(*ptr & 255) && *ptr != '+' && *ptr != '-' && *ptr != '.') break; } if (*ptr || ptr == attr->values[i].string.text) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad uriScheme value \"%s\" - bad " "characters (RFC 8011 section 5.1.7)."), attr->name, attr->values[i].string.text); return (0); } if ((ptr - attr->values[i].string.text) > (IPP_MAX_URISCHEME - 1)) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad uriScheme value \"%s\" - bad " "length %d (RFC 8011 section 5.1.7)."), attr->name, attr->values[i].string.text, (int)(ptr - attr->values[i].string.text)); return (0); } } break; case IPP_TAG_CHARSET : for (i = 0; i < attr->num_values; i ++) { for (ptr = attr->values[i].string.text; *ptr; ptr ++) if (!isprint(*ptr & 255) || isupper(*ptr & 255) || isspace(*ptr & 255)) break; if (*ptr || ptr == attr->values[i].string.text) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad charset value \"%s\" - bad " "characters (RFC 8011 section 5.1.8)."), attr->name, attr->values[i].string.text); return (0); } if ((ptr - attr->values[i].string.text) > (IPP_MAX_CHARSET - 1)) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad charset value \"%s\" - bad " "length %d (RFC 8011 section 5.1.8)."), attr->name, attr->values[i].string.text, (int)(ptr - attr->values[i].string.text)); return (0); } } break; case IPP_TAG_LANGUAGE : /* * The following regular expression is derived from the ABNF for * language tags in RFC 4646. All I can say is that this is the * easiest way to check the values... */ if ((i = regcomp(&re, "^(" "(([a-z]{2,3}(-[a-z][a-z][a-z]){0,3})|[a-z]{4,8})" /* language */ "(-[a-z][a-z][a-z][a-z]){0,1}" /* script */ "(-([a-z][a-z]|[0-9][0-9][0-9])){0,1}" /* region */ "(-([a-z]{5,8}|[0-9][0-9][0-9]))*" /* variant */ "(-[a-wy-z](-[a-z0-9]{2,8})+)*" /* extension */ "(-x(-[a-z0-9]{1,8})+)*" /* privateuse */ "|" "x(-[a-z0-9]{1,8})+" /* privateuse */ "|" "[a-z]{1,3}(-[a-z][0-9]{2,8}){1,2}" /* grandfathered */ ")$", REG_NOSUB | REG_EXTENDED)) != 0) { char temp[256]; /* Temporary error string */ regerror(i, &re, temp, sizeof(temp)); ipp_set_error(IPP_STATUS_ERROR_INTERNAL, _("Unable to compile naturalLanguage regular " "expression: %s."), temp); return (0); } for (i = 0; i < attr->num_values; i ++) { if (regexec(&re, attr->values[i].string.text, 0, NULL, 0)) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad naturalLanguage value \"%s\" - bad " "characters (RFC 8011 section 5.1.9)."), attr->name, attr->values[i].string.text); regfree(&re); return (0); } if (strlen(attr->values[i].string.text) > (IPP_MAX_LANGUAGE - 1)) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad naturalLanguage value \"%s\" - bad " "length %d (RFC 8011 section 5.1.9)."), attr->name, attr->values[i].string.text, (int)strlen(attr->values[i].string.text)); regfree(&re); return (0); } } regfree(&re); break; case IPP_TAG_MIMETYPE : /* * The following regular expression is derived from the ABNF for * MIME media types in RFC 2045 and 4288. All I can say is that this is * the easiest way to check the values... */ if ((i = regcomp(&re, "^" "[-a-zA-Z0-9!#$&.+^_]{1,127}" /* type-name */ "/" "[-a-zA-Z0-9!#$&.+^_]{1,127}" /* subtype-name */ "(;[-a-zA-Z0-9!#$&.+^_]{1,127}=" /* parameter= */ "([-a-zA-Z0-9!#$&.+^_]{1,127}|\"[^\"]*\"))*" /* value */ "$", REG_NOSUB | REG_EXTENDED)) != 0) { char temp[256]; /* Temporary error string */ regerror(i, &re, temp, sizeof(temp)); ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("Unable to compile mimeMediaType regular " "expression: %s."), temp); return (0); } for (i = 0; i < attr->num_values; i ++) { if (regexec(&re, attr->values[i].string.text, 0, NULL, 0)) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad mimeMediaType value \"%s\" - bad " "characters (RFC 8011 section 5.1.10)."), attr->name, attr->values[i].string.text); regfree(&re); return (0); } if (strlen(attr->values[i].string.text) > (IPP_MAX_MIMETYPE - 1)) { ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad mimeMediaType value \"%s\" - bad " "length %d (RFC 8011 section 5.1.10)."), attr->name, attr->values[i].string.text, (int)strlen(attr->values[i].string.text)); regfree(&re); return (0); } } regfree(&re); break; default : break; } return (1); } /* * 'ippValidateAttributes()' - Validate all attributes in an IPP message. * * This function validates the contents of the IPP message, including each * attribute. Like @link ippValidateAttribute@, @link cupsLastErrorString@ is * set to a human-readable message on failure. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - 1 if valid, 0 otherwise */ ippValidateAttributes(ipp_t *ipp) /* I - IPP message */ { ipp_attribute_t *attr; /* Current attribute */ if (!ipp) return (1); for (attr = ipp->attrs; attr; attr = attr->next) if (!ippValidateAttribute(attr)) return (0); return (1); } /* * 'ippWrite()' - Write data for an IPP message to a HTTP connection. */ ipp_state_t /* O - Current state */ ippWrite(http_t *http, /* I - HTTP connection */ ipp_t *ipp) /* I - IPP data */ { DEBUG_printf(("ippWrite(http=%p, ipp=%p)", (void *)http, (void *)ipp)); if (!http) return (IPP_STATE_ERROR); return (ippWriteIO(http, (ipp_iocb_t)httpWrite2, http->blocking, NULL, ipp)); } /* * 'ippWriteFile()' - Write data for an IPP message to a file. * * @since CUPS 1.1.19/macOS 10.3@ */ ipp_state_t /* O - Current state */ ippWriteFile(int fd, /* I - HTTP data */ ipp_t *ipp) /* I - IPP data */ { DEBUG_printf(("ippWriteFile(fd=%d, ipp=%p)", fd, (void *)ipp)); ipp->state = IPP_STATE_IDLE; return (ippWriteIO(&fd, (ipp_iocb_t)ipp_write_file, 1, NULL, ipp)); } /* * 'ippWriteIO()' - Write data for an IPP message. * * @since CUPS 1.2/macOS 10.5@ */ ipp_state_t /* O - Current state */ ippWriteIO(void *dst, /* I - Destination */ ipp_iocb_t cb, /* I - Write callback function */ int blocking, /* I - Use blocking IO? */ ipp_t *parent, /* I - Parent IPP message */ ipp_t *ipp) /* I - IPP data */ { int i; /* Looping var */ int n; /* Length of data */ unsigned char *buffer, /* Data buffer */ *bufptr; /* Pointer into buffer */ ipp_attribute_t *attr; /* Current attribute */ _ipp_value_t *value; /* Current value */ DEBUG_printf(("ippWriteIO(dst=%p, cb=%p, blocking=%d, parent=%p, ipp=%p)", (void *)dst, (void *)cb, blocking, (void *)parent, (void *)ipp)); if (!dst || !ipp) return (IPP_STATE_ERROR); if ((buffer = (unsigned char *)_cupsBufferGet(IPP_BUF_SIZE)) == NULL) { DEBUG_puts("1ippWriteIO: Unable to get write buffer"); return (IPP_STATE_ERROR); } switch (ipp->state) { case IPP_STATE_IDLE : ipp->state ++; /* Avoid common problem... */ case IPP_STATE_HEADER : if (parent == NULL) { /* * Send the request header: * * Version = 2 bytes * Operation/Status Code = 2 bytes * Request ID = 4 bytes * Total = 8 bytes */ bufptr = buffer; *bufptr++ = ipp->request.any.version[0]; *bufptr++ = ipp->request.any.version[1]; *bufptr++ = (ipp_uchar_t)(ipp->request.any.op_status >> 8); *bufptr++ = (ipp_uchar_t)ipp->request.any.op_status; *bufptr++ = (ipp_uchar_t)(ipp->request.any.request_id >> 24); *bufptr++ = (ipp_uchar_t)(ipp->request.any.request_id >> 16); *bufptr++ = (ipp_uchar_t)(ipp->request.any.request_id >> 8); *bufptr++ = (ipp_uchar_t)ipp->request.any.request_id; DEBUG_printf(("2ippWriteIO: version=%d.%d", buffer[0], buffer[1])); DEBUG_printf(("2ippWriteIO: op_status=%04x", ipp->request.any.op_status)); DEBUG_printf(("2ippWriteIO: request_id=%d", ipp->request.any.request_id)); if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP header..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } } /* * Reset the state engine to point to the first attribute * in the request/response, with no current group. */ ipp->state = IPP_STATE_ATTRIBUTE; ipp->current = ipp->attrs; ipp->curtag = IPP_TAG_ZERO; DEBUG_printf(("1ippWriteIO: ipp->current=%p", (void *)ipp->current)); /* * If blocking is disabled, stop here... */ if (!blocking) break; case IPP_STATE_ATTRIBUTE : while (ipp->current != NULL) { /* * Write this attribute... */ bufptr = buffer; attr = ipp->current; ipp->current = ipp->current->next; if (!parent) { if (ipp->curtag != attr->group_tag) { /* * Send a group tag byte... */ ipp->curtag = attr->group_tag; if (attr->group_tag == IPP_TAG_ZERO) continue; DEBUG_printf(("2ippWriteIO: wrote group tag=%x(%s)", attr->group_tag, ippTagString(attr->group_tag))); *bufptr++ = (ipp_uchar_t)attr->group_tag; } else if (attr->group_tag == IPP_TAG_ZERO) continue; } DEBUG_printf(("1ippWriteIO: %s (%s%s)", attr->name, attr->num_values > 1 ? "1setOf " : "", ippTagString(attr->value_tag))); /* * Write the attribute tag and name. * * The attribute name length does not include the trailing nul * character in the source string. * * Collection values (parent != NULL) are written differently... */ if (parent == NULL) { /* * Get the length of the attribute name, and make sure it won't * overflow the buffer... */ if ((n = (int)strlen(attr->name)) > (IPP_BUF_SIZE - 8)) { DEBUG_printf(("1ippWriteIO: Attribute name too long (%d)", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } /* * Write the value tag, name length, and name string... */ DEBUG_printf(("2ippWriteIO: writing value tag=%x(%s)", attr->value_tag, ippTagString(attr->value_tag))); DEBUG_printf(("2ippWriteIO: writing name=%d,\"%s\"", n, attr->name)); if (attr->value_tag > 0xff) { *bufptr++ = IPP_TAG_EXTENSION; *bufptr++ = (ipp_uchar_t)(attr->value_tag >> 24); *bufptr++ = (ipp_uchar_t)(attr->value_tag >> 16); *bufptr++ = (ipp_uchar_t)(attr->value_tag >> 8); *bufptr++ = (ipp_uchar_t)attr->value_tag; } else *bufptr++ = (ipp_uchar_t)attr->value_tag; *bufptr++ = (ipp_uchar_t)(n >> 8); *bufptr++ = (ipp_uchar_t)n; memcpy(bufptr, attr->name, (size_t)n); bufptr += n; } else { /* * Get the length of the attribute name, and make sure it won't * overflow the buffer... */ if ((n = (int)strlen(attr->name)) > (IPP_BUF_SIZE - 12)) { DEBUG_printf(("1ippWriteIO: Attribute name too long (%d)", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } /* * Write the member name tag, name length, name string, value tag, * and empty name for the collection member attribute... */ DEBUG_printf(("2ippWriteIO: writing value tag=%x(memberName)", IPP_TAG_MEMBERNAME)); DEBUG_printf(("2ippWriteIO: writing name=%d,\"%s\"", n, attr->name)); DEBUG_printf(("2ippWriteIO: writing value tag=%x(%s)", attr->value_tag, ippTagString(attr->value_tag))); DEBUG_puts("2ippWriteIO: writing name=0,\"\""); *bufptr++ = IPP_TAG_MEMBERNAME; *bufptr++ = 0; *bufptr++ = 0; *bufptr++ = (ipp_uchar_t)(n >> 8); *bufptr++ = (ipp_uchar_t)n; memcpy(bufptr, attr->name, (size_t)n); bufptr += n; if (attr->value_tag > 0xff) { *bufptr++ = IPP_TAG_EXTENSION; *bufptr++ = (ipp_uchar_t)(attr->value_tag >> 24); *bufptr++ = (ipp_uchar_t)(attr->value_tag >> 16); *bufptr++ = (ipp_uchar_t)(attr->value_tag >> 8); *bufptr++ = (ipp_uchar_t)attr->value_tag; } else *bufptr++ = (ipp_uchar_t)attr->value_tag; *bufptr++ = 0; *bufptr++ = 0; } /* * Now write the attribute value(s)... */ switch (attr->value_tag & ~IPP_TAG_CUPS_CONST) { case IPP_TAG_UNSUPPORTED_VALUE : case IPP_TAG_DEFAULT : case IPP_TAG_UNKNOWN : case IPP_TAG_NOVALUE : case IPP_TAG_NOTSETTABLE : case IPP_TAG_DELETEATTR : case IPP_TAG_ADMINDEFINE : *bufptr++ = 0; *bufptr++ = 0; break; case IPP_TAG_INTEGER : case IPP_TAG_ENUM : for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) { if ((IPP_BUF_SIZE - (bufptr - buffer)) < 9) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; } if (i) { /* * Arrays and sets are done by sending additional * values with a zero-length name... */ *bufptr++ = (ipp_uchar_t)attr->value_tag; *bufptr++ = 0; *bufptr++ = 0; } /* * Integers and enumerations are both 4-byte signed * (twos-complement) values. * * Put the 2-byte length and 4-byte value into the buffer... */ *bufptr++ = 0; *bufptr++ = 4; *bufptr++ = (ipp_uchar_t)(value->integer >> 24); *bufptr++ = (ipp_uchar_t)(value->integer >> 16); *bufptr++ = (ipp_uchar_t)(value->integer >> 8); *bufptr++ = (ipp_uchar_t)value->integer; } break; case IPP_TAG_BOOLEAN : for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) { if ((IPP_BUF_SIZE - (bufptr - buffer)) < 6) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; } if (i) { /* * Arrays and sets are done by sending additional * values with a zero-length name... */ *bufptr++ = (ipp_uchar_t)attr->value_tag; *bufptr++ = 0; *bufptr++ = 0; } /* * Boolean values are 1-byte; 0 = false, 1 = true. * * Put the 2-byte length and 1-byte value into the buffer... */ *bufptr++ = 0; *bufptr++ = 1; *bufptr++ = (ipp_uchar_t)value->boolean; } break; case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) { if (i) { /* * Arrays and sets are done by sending additional * values with a zero-length name... */ DEBUG_printf(("2ippWriteIO: writing value tag=%x(%s)", attr->value_tag, ippTagString(attr->value_tag))); DEBUG_printf(("2ippWriteIO: writing name=0,\"\"")); if ((IPP_BUF_SIZE - (bufptr - buffer)) < 3) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; } *bufptr++ = (ipp_uchar_t)attr->value_tag; *bufptr++ = 0; *bufptr++ = 0; } if (value->string.text != NULL) n = (int)strlen(value->string.text); else n = 0; if (n > (IPP_BUF_SIZE - 2)) { DEBUG_printf(("1ippWriteIO: String too long (%d)", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } DEBUG_printf(("2ippWriteIO: writing string=%d,\"%s\"", n, value->string.text)); if ((int)(IPP_BUF_SIZE - (bufptr - buffer)) < (n + 2)) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; } /* * All simple strings consist of the 2-byte length and * character data without the trailing nul normally found * in C strings. Also, strings cannot be longer than IPP_MAX_LENGTH * bytes since the 2-byte length is a signed (twos-complement) * value. * * Put the 2-byte length and string characters in the buffer. */ *bufptr++ = (ipp_uchar_t)(n >> 8); *bufptr++ = (ipp_uchar_t)n; if (n > 0) { memcpy(bufptr, value->string.text, (size_t)n); bufptr += n; } } break; case IPP_TAG_DATE : for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) { if ((IPP_BUF_SIZE - (bufptr - buffer)) < 16) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; } if (i) { /* * Arrays and sets are done by sending additional * values with a zero-length name... */ *bufptr++ = (ipp_uchar_t)attr->value_tag; *bufptr++ = 0; *bufptr++ = 0; } /* * Date values consist of a 2-byte length and an * 11-byte date/time structure defined by RFC 1903. * * Put the 2-byte length and 11-byte date/time * structure in the buffer. */ *bufptr++ = 0; *bufptr++ = 11; memcpy(bufptr, value->date, 11); bufptr += 11; } break; case IPP_TAG_RESOLUTION : for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) { if ((IPP_BUF_SIZE - (bufptr - buffer)) < 14) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; } if (i) { /* * Arrays and sets are done by sending additional * values with a zero-length name... */ *bufptr++ = (ipp_uchar_t)attr->value_tag; *bufptr++ = 0; *bufptr++ = 0; } /* * Resolution values consist of a 2-byte length, * 4-byte horizontal resolution value, 4-byte vertical * resolution value, and a 1-byte units value. * * Put the 2-byte length and resolution value data * into the buffer. */ *bufptr++ = 0; *bufptr++ = 9; *bufptr++ = (ipp_uchar_t)(value->resolution.xres >> 24); *bufptr++ = (ipp_uchar_t)(value->resolution.xres >> 16); *bufptr++ = (ipp_uchar_t)(value->resolution.xres >> 8); *bufptr++ = (ipp_uchar_t)value->resolution.xres; *bufptr++ = (ipp_uchar_t)(value->resolution.yres >> 24); *bufptr++ = (ipp_uchar_t)(value->resolution.yres >> 16); *bufptr++ = (ipp_uchar_t)(value->resolution.yres >> 8); *bufptr++ = (ipp_uchar_t)value->resolution.yres; *bufptr++ = (ipp_uchar_t)value->resolution.units; } break; case IPP_TAG_RANGE : for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) { if ((IPP_BUF_SIZE - (bufptr - buffer)) < 13) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; } if (i) { /* * Arrays and sets are done by sending additional * values with a zero-length name... */ *bufptr++ = (ipp_uchar_t)attr->value_tag; *bufptr++ = 0; *bufptr++ = 0; } /* * Range values consist of a 2-byte length, * 4-byte lower value, and 4-byte upper value. * * Put the 2-byte length and range value data * into the buffer. */ *bufptr++ = 0; *bufptr++ = 8; *bufptr++ = (ipp_uchar_t)(value->range.lower >> 24); *bufptr++ = (ipp_uchar_t)(value->range.lower >> 16); *bufptr++ = (ipp_uchar_t)(value->range.lower >> 8); *bufptr++ = (ipp_uchar_t)value->range.lower; *bufptr++ = (ipp_uchar_t)(value->range.upper >> 24); *bufptr++ = (ipp_uchar_t)(value->range.upper >> 16); *bufptr++ = (ipp_uchar_t)(value->range.upper >> 8); *bufptr++ = (ipp_uchar_t)value->range.upper; } break; case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) { if (i) { /* * Arrays and sets are done by sending additional * values with a zero-length name... */ if ((IPP_BUF_SIZE - (bufptr - buffer)) < 3) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; } *bufptr++ = (ipp_uchar_t)attr->value_tag; *bufptr++ = 0; *bufptr++ = 0; } /* * textWithLanguage and nameWithLanguage values consist * of a 2-byte length for both strings and their * individual lengths, a 2-byte length for the * character string, the character string without the * trailing nul, a 2-byte length for the character * set string, and the character set string without * the trailing nul. */ n = 4; if (value->string.language != NULL) n += (int)strlen(value->string.language); if (value->string.text != NULL) n += (int)strlen(value->string.text); if (n > (IPP_BUF_SIZE - 2)) { DEBUG_printf(("1ippWriteIO: text/nameWithLanguage value " "too long (%d)", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if ((int)(IPP_BUF_SIZE - (bufptr - buffer)) < (n + 2)) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; } /* Length of entire value */ *bufptr++ = (ipp_uchar_t)(n >> 8); *bufptr++ = (ipp_uchar_t)n; /* Length of language */ if (value->string.language != NULL) n = (int)strlen(value->string.language); else n = 0; *bufptr++ = (ipp_uchar_t)(n >> 8); *bufptr++ = (ipp_uchar_t)n; /* Language */ if (n > 0) { memcpy(bufptr, value->string.language, (size_t)n); bufptr += n; } /* Length of text */ if (value->string.text != NULL) n = (int)strlen(value->string.text); else n = 0; *bufptr++ = (ipp_uchar_t)(n >> 8); *bufptr++ = (ipp_uchar_t)n; /* Text */ if (n > 0) { memcpy(bufptr, value->string.text, (size_t)n); bufptr += n; } } break; case IPP_TAG_BEGIN_COLLECTION : for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) { /* * Collections are written with the begin-collection * tag first with a value of 0 length, followed by the * attributes in the collection, then the end-collection * value... */ if ((IPP_BUF_SIZE - (bufptr - buffer)) < 5) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; } if (i) { /* * Arrays and sets are done by sending additional * values with a zero-length name... */ *bufptr++ = (ipp_uchar_t)attr->value_tag; *bufptr++ = 0; *bufptr++ = 0; } /* * Write a data length of 0 and flush the buffer... */ *bufptr++ = 0; *bufptr++ = 0; if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; /* * Then write the collection attribute... */ value->collection->state = IPP_STATE_IDLE; if (ippWriteIO(dst, cb, 1, ipp, value->collection) == IPP_STATE_ERROR) { DEBUG_puts("1ippWriteIO: Unable to write collection value"); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } } break; default : for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) { if (i) { /* * Arrays and sets are done by sending additional * values with a zero-length name... */ if ((IPP_BUF_SIZE - (bufptr - buffer)) < 3) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; } *bufptr++ = (ipp_uchar_t)attr->value_tag; *bufptr++ = 0; *bufptr++ = 0; } /* * An unknown value might some new value that a * vendor has come up with. It consists of a * 2-byte length and the bytes in the unknown * value buffer. */ n = value->unknown.length; if (n > (IPP_BUF_SIZE - 2)) { DEBUG_printf(("1ippWriteIO: Data length too long (%d)", n)); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } if ((int)(IPP_BUF_SIZE - (bufptr - buffer)) < (n + 2)) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } bufptr = buffer; } /* Length of unknown value */ *bufptr++ = (ipp_uchar_t)(n >> 8); *bufptr++ = (ipp_uchar_t)n; /* Value */ if (n > 0) { memcpy(bufptr, value->unknown.data, (size_t)n); bufptr += n; } } break; } /* * Write the data out... */ if (bufptr > buffer) { if ((*cb)(dst, buffer, (size_t)(bufptr - buffer)) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP attribute..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } DEBUG_printf(("2ippWriteIO: wrote %d bytes", (int)(bufptr - buffer))); } /* * If blocking is disabled and we aren't at the end of the attribute * list, stop here... */ if (!blocking && ipp->current) break; } if (ipp->current == NULL) { /* * Done with all of the attributes; add the end-of-attributes * tag or end-collection attribute... */ if (parent == NULL) { buffer[0] = IPP_TAG_END; n = 1; } else { buffer[0] = IPP_TAG_END_COLLECTION; buffer[1] = 0; /* empty name */ buffer[2] = 0; buffer[3] = 0; /* empty value */ buffer[4] = 0; n = 5; } if ((*cb)(dst, buffer, (size_t)n) < 0) { DEBUG_puts("1ippWriteIO: Could not write IPP end-tag..."); _cupsBufferRelease((char *)buffer); return (IPP_STATE_ERROR); } ipp->state = IPP_STATE_DATA; } break; case IPP_STATE_DATA : break; default : break; /* anti-compiler-warning-code */ } _cupsBufferRelease((char *)buffer); return (ipp->state); } /* * 'ipp_add_attr()' - Add a new attribute to the message. */ static ipp_attribute_t * /* O - New attribute */ ipp_add_attr(ipp_t *ipp, /* I - IPP message */ const char *name, /* I - Attribute name or NULL */ ipp_tag_t group_tag, /* I - Group tag or IPP_TAG_ZERO */ ipp_tag_t value_tag, /* I - Value tag or IPP_TAG_ZERO */ int num_values) /* I - Number of values */ { int alloc_values; /* Number of values to allocate */ ipp_attribute_t *attr; /* New attribute */ DEBUG_printf(("4ipp_add_attr(ipp=%p, name=\"%s\", group_tag=0x%x, value_tag=0x%x, num_values=%d)", (void *)ipp, name, group_tag, value_tag, num_values)); /* * Range check input... */ if (!ipp || num_values < 0) return (NULL); /* * Allocate memory, rounding the allocation up as needed... */ if (num_values <= 1) alloc_values = 1; else alloc_values = (num_values + IPP_MAX_VALUES - 1) & ~(IPP_MAX_VALUES - 1); attr = calloc(sizeof(ipp_attribute_t) + (size_t)(alloc_values - 1) * sizeof(_ipp_value_t), 1); if (attr) { /* * Initialize attribute... */ DEBUG_printf(("4debug_alloc: %p %s %s%s (%d values)", (void *)attr, name, num_values > 1 ? "1setOf " : "", ippTagString(value_tag), num_values)); if (name) attr->name = _cupsStrAlloc(name); attr->group_tag = group_tag; attr->value_tag = value_tag; attr->num_values = num_values; /* * Add it to the end of the linked list... */ if (ipp->last) ipp->last->next = attr; else ipp->attrs = attr; ipp->prev = ipp->last; ipp->last = ipp->current = attr; } DEBUG_printf(("5ipp_add_attr: Returning %p", (void *)attr)); return (attr); } /* * 'ipp_free_values()' - Free attribute values. */ static void ipp_free_values(ipp_attribute_t *attr, /* I - Attribute to free values from */ int element,/* I - First value to free */ int count) /* I - Number of values to free */ { int i; /* Looping var */ _ipp_value_t *value; /* Current value */ DEBUG_printf(("4ipp_free_values(attr=%p, element=%d, count=%d)", (void *)attr, element, count)); if (!(attr->value_tag & IPP_TAG_CUPS_CONST)) { /* * Free values as needed... */ switch (attr->value_tag) { case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : if (element == 0 && count == attr->num_values && attr->values[0].string.language) { _cupsStrFree(attr->values[0].string.language); attr->values[0].string.language = NULL; } /* Fall through to other string values */ case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_RESERVED_STRING : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : for (i = count, value = attr->values + element; i > 0; i --, value ++) { _cupsStrFree(value->string.text); value->string.text = NULL; } break; case IPP_TAG_DEFAULT : case IPP_TAG_UNKNOWN : case IPP_TAG_NOVALUE : case IPP_TAG_NOTSETTABLE : case IPP_TAG_DELETEATTR : case IPP_TAG_ADMINDEFINE : case IPP_TAG_INTEGER : case IPP_TAG_ENUM : case IPP_TAG_BOOLEAN : case IPP_TAG_DATE : case IPP_TAG_RESOLUTION : case IPP_TAG_RANGE : break; case IPP_TAG_BEGIN_COLLECTION : for (i = count, value = attr->values + element; i > 0; i --, value ++) { ippDelete(value->collection); value->collection = NULL; } break; case IPP_TAG_STRING : default : for (i = count, value = attr->values + element; i > 0; i --, value ++) { if (value->unknown.data) { free(value->unknown.data); value->unknown.data = NULL; } } break; } } /* * If we are not freeing values from the end, move the remaining values up... */ if ((element + count) < attr->num_values) memmove(attr->values + element, attr->values + element + count, (size_t)(attr->num_values - count - element) * sizeof(_ipp_value_t)); attr->num_values -= count; } /* * 'ipp_get_code()' - Convert a C locale/charset name into an IPP language/charset code. * * This typically converts strings of the form "ll_CC", "ll-REGION", and "CHARSET_NUMBER" * to "ll-cc", "ll-region", and "charset-number", respectively. */ static char * /* O - Language code string */ ipp_get_code(const char *value, /* I - Locale/charset string */ char *buffer, /* I - String buffer */ size_t bufsize) /* I - Size of string buffer */ { char *bufptr, /* Pointer into buffer */ *bufend; /* End of buffer */ /* * Convert values to lowercase and change _ to - as needed... */ for (bufptr = buffer, bufend = buffer + bufsize - 1; *value && bufptr < bufend; value ++) if (*value == '_') *bufptr++ = '-'; else *bufptr++ = (char)_cups_tolower(*value); *bufptr = '\0'; /* * Return the converted string... */ return (buffer); } /* * 'ipp_lang_code()' - Convert a C locale name into an IPP language code. * * This typically converts strings of the form "ll_CC" and "ll-REGION" to "ll-cc" and * "ll-region", respectively. It also converts the "C" (POSIX) locale to "en". */ static char * /* O - Language code string */ ipp_lang_code(const char *locale, /* I - Locale string */ char *buffer, /* I - String buffer */ size_t bufsize) /* I - Size of string buffer */ { /* * Map POSIX ("C") locale to generic English, otherwise convert the locale string as-is. */ if (!_cups_strcasecmp(locale, "c")) { strlcpy(buffer, "en", bufsize); return (buffer); } else return (ipp_get_code(locale, buffer, bufsize)); } /* * 'ipp_length()' - Compute the length of an IPP message or collection value. */ static size_t /* O - Size of IPP message */ ipp_length(ipp_t *ipp, /* I - IPP message or collection */ int collection) /* I - 1 if a collection, 0 otherwise */ { int i; /* Looping var */ size_t bytes; /* Number of bytes */ ipp_attribute_t *attr; /* Current attribute */ ipp_tag_t group; /* Current group */ _ipp_value_t *value; /* Current value */ DEBUG_printf(("3ipp_length(ipp=%p, collection=%d)", (void *)ipp, collection)); if (!ipp) { DEBUG_puts("4ipp_length: Returning 0 bytes"); return (0); } /* * Start with 8 bytes for the IPP message header... */ bytes = collection ? 0 : 8; /* * Then add the lengths of each attribute... */ group = IPP_TAG_ZERO; for (attr = ipp->attrs; attr != NULL; attr = attr->next) { if (attr->group_tag != group && !collection) { group = attr->group_tag; if (group == IPP_TAG_ZERO) continue; bytes ++; /* Group tag */ } if (!attr->name) continue; DEBUG_printf(("5ipp_length: attr->name=\"%s\", attr->num_values=%d, " "bytes=" CUPS_LLFMT, attr->name, attr->num_values, CUPS_LLCAST bytes)); if ((attr->value_tag & ~IPP_TAG_CUPS_CONST) < IPP_TAG_EXTENSION) bytes += (size_t)attr->num_values;/* Value tag for each value */ else bytes += (size_t)(5 * attr->num_values); /* Value tag for each value */ bytes += (size_t)(2 * attr->num_values); /* Name lengths */ bytes += strlen(attr->name); /* Name */ bytes += (size_t)(2 * attr->num_values); /* Value lengths */ if (collection) bytes += 5; /* Add membername overhead */ switch (attr->value_tag & ~IPP_TAG_CUPS_CONST) { case IPP_TAG_UNSUPPORTED_VALUE : case IPP_TAG_DEFAULT : case IPP_TAG_UNKNOWN : case IPP_TAG_NOVALUE : case IPP_TAG_NOTSETTABLE : case IPP_TAG_DELETEATTR : case IPP_TAG_ADMINDEFINE : break; case IPP_TAG_INTEGER : case IPP_TAG_ENUM : bytes += (size_t)(4 * attr->num_values); break; case IPP_TAG_BOOLEAN : bytes += (size_t)attr->num_values; break; case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) if (value->string.text) bytes += strlen(value->string.text); break; case IPP_TAG_DATE : bytes += (size_t)(11 * attr->num_values); break; case IPP_TAG_RESOLUTION : bytes += (size_t)(9 * attr->num_values); break; case IPP_TAG_RANGE : bytes += (size_t)(8 * attr->num_values); break; case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : bytes += (size_t)(4 * attr->num_values); /* Charset + text length */ for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) { if (value->string.language) bytes += strlen(value->string.language); if (value->string.text) bytes += strlen(value->string.text); } break; case IPP_TAG_BEGIN_COLLECTION : for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) bytes += ipp_length(value->collection, 1); break; default : for (i = 0, value = attr->values; i < attr->num_values; i ++, value ++) bytes += (size_t)value->unknown.length; break; } } /* * Finally, add 1 byte for the "end of attributes" tag or 5 bytes * for the "end of collection" tag and return... */ if (collection) bytes += 5; else bytes ++; DEBUG_printf(("4ipp_length: Returning " CUPS_LLFMT " bytes", CUPS_LLCAST bytes)); return (bytes); } /* * 'ipp_read_http()' - Semi-blocking read on a HTTP connection... */ static ssize_t /* O - Number of bytes read */ ipp_read_http(http_t *http, /* I - Client connection */ ipp_uchar_t *buffer, /* O - Buffer for data */ size_t length) /* I - Total length */ { ssize_t tbytes, /* Total bytes read */ bytes; /* Bytes read this pass */ DEBUG_printf(("7ipp_read_http(http=%p, buffer=%p, length=%d)", (void *)http, (void *)buffer, (int)length)); /* * Loop until all bytes are read... */ for (tbytes = 0, bytes = 0; tbytes < (int)length; tbytes += bytes, buffer += bytes) { DEBUG_printf(("9ipp_read_http: tbytes=" CUPS_LLFMT ", http->state=%d", CUPS_LLCAST tbytes, http->state)); if (http->state == HTTP_STATE_WAITING) break; if (http->used == 0 && !http->blocking) { /* * Wait up to 10 seconds for more data on non-blocking sockets... */ if (!httpWait(http, 10000)) { /* * Signal no data... */ bytes = -1; break; } } else if (http->used == 0 && http->timeout_value > 0) { /* * Wait up to timeout seconds for more data on blocking sockets... */ if (!httpWait(http, (int)(1000 * http->timeout_value))) { /* * Signal no data... */ bytes = -1; break; } } if ((bytes = httpRead2(http, (char *)buffer, length - (size_t)tbytes)) < 0) { #ifdef WIN32 break; #else if (errno != EAGAIN && errno != EINTR) break; bytes = 0; #endif /* WIN32 */ } else if (bytes == 0) break; } /* * Return the number of bytes read... */ if (tbytes == 0 && bytes < 0) tbytes = -1; DEBUG_printf(("8ipp_read_http: Returning " CUPS_LLFMT " bytes", CUPS_LLCAST tbytes)); return (tbytes); } /* * 'ipp_read_file()' - Read IPP data from a file. */ static ssize_t /* O - Number of bytes read */ ipp_read_file(int *fd, /* I - File descriptor */ ipp_uchar_t *buffer, /* O - Read buffer */ size_t length) /* I - Number of bytes to read */ { #ifdef WIN32 return ((ssize_t)read(*fd, buffer, (unsigned)length)); #else return (read(*fd, buffer, length)); #endif /* WIN32 */ } /* * 'ipp_set_error()' - Set a formatted, localized error string. */ static void ipp_set_error(ipp_status_t status, /* I - Status code */ const char *format, /* I - Printf-style error string */ ...) /* I - Additional arguments as needed */ { va_list ap; /* Pointer to additional args */ char buffer[2048]; /* Message buffer */ cups_lang_t *lang = cupsLangDefault(); /* Current language */ va_start(ap, format); vsnprintf(buffer, sizeof(buffer), _cupsLangString(lang, format), ap); va_end(ap); _cupsSetError(status, buffer, 0); } /* * 'ipp_set_value()' - Get the value element from an attribute, expanding it as * needed. */ static _ipp_value_t * /* O - IPP value element or NULL on error */ ipp_set_value(ipp_t *ipp, /* IO - IPP message */ ipp_attribute_t **attr, /* IO - IPP attribute */ int element) /* I - Value number (0-based) */ { ipp_attribute_t *temp, /* New attribute pointer */ *current, /* Current attribute in list */ *prev; /* Previous attribute in list */ int alloc_values; /* Allocated values */ /* * If we are setting an existing value element, return it... */ temp = *attr; if (temp->num_values <= 1) alloc_values = 1; else alloc_values = (temp->num_values + IPP_MAX_VALUES - 1) & ~(IPP_MAX_VALUES - 1); if (element < alloc_values) { if (element >= temp->num_values) temp->num_values = element + 1; return (temp->values + element); } /* * Otherwise re-allocate the attribute - we allocate in groups of IPP_MAX_VALUE * values when num_values > 1. */ if (alloc_values < IPP_MAX_VALUES) alloc_values = IPP_MAX_VALUES; else alloc_values += IPP_MAX_VALUES; DEBUG_printf(("4ipp_set_value: Reallocating for up to %d values.", alloc_values)); /* * Reallocate memory... */ if ((temp = realloc(temp, sizeof(ipp_attribute_t) + (size_t)(alloc_values - 1) * sizeof(_ipp_value_t))) == NULL) { _cupsSetHTTPError(HTTP_STATUS_ERROR); DEBUG_puts("4ipp_set_value: Unable to resize attribute."); return (NULL); } /* * Zero the new memory... */ memset(temp->values + temp->num_values, 0, (size_t)(alloc_values - temp->num_values) * sizeof(_ipp_value_t)); if (temp != *attr) { /* * Reset pointers in the list... */ DEBUG_printf(("4debug_free: %p %s", (void *)*attr, temp->name)); DEBUG_printf(("4debug_alloc: %p %s %s%s (%d)", (void *)temp, temp->name, temp->num_values > 1 ? "1setOf " : "", ippTagString(temp->value_tag), temp->num_values)); if (ipp->current == *attr && ipp->prev) { /* * Use current "previous" pointer... */ prev = ipp->prev; } else { /* * Find this attribute in the linked list... */ for (prev = NULL, current = ipp->attrs; current && current != *attr; prev = current, current = current->next); if (!current) { /* * This is a serious error! */ *attr = temp; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP attribute is not a member of the message."), 1); DEBUG_puts("4ipp_set_value: Unable to find attribute in message."); return (NULL); } } if (prev) prev->next = temp; else ipp->attrs = temp; ipp->current = temp; ipp->prev = prev; if (ipp->last == *attr) ipp->last = temp; *attr = temp; } /* * Return the value element... */ if (element >= temp->num_values) temp->num_values = element + 1; return (temp->values + element); } /* * 'ipp_write_file()' - Write IPP data to a file. */ static ssize_t /* O - Number of bytes written */ ipp_write_file(int *fd, /* I - File descriptor */ ipp_uchar_t *buffer, /* I - Data to write */ size_t length) /* I - Number of bytes to write */ { #ifdef WIN32 return ((ssize_t)write(*fd, buffer, (unsigned)length)); #else return (write(*fd, buffer, length)); #endif /* WIN32 */ } cups-2.2.7/cups/ipp.h000664 000765 000024 00000152347 13255074424 015102 0ustar00msweetstaff000000 000000 /* * Internet Printing Protocol definitions for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_IPP_H_ # define _CUPS_IPP_H_ /* * Include necessary headers... */ # include "http.h" # include /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * IPP version string... */ # define IPP_VERSION "\002\001" /* * IPP registered port number... * * Note: Applications should never use IPP_PORT, but instead use the * ippPort() function to allow overrides via the IPP_PORT environment * variable and services file if needed! */ # define IPP_PORT 631 /* * Common limits... */ # define IPP_MAX_CHARSET 64 /* Maximum length of charset values w/nul */ # define IPP_MAX_KEYWORD 256 /* Maximum length of keyword values w/nul */ # define IPP_MAX_LANGUAGE 64 /* Maximum length of naturalLanguage values w/nul */ # define IPP_MAX_LENGTH 32767 /* Maximum size of any single value */ # define IPP_MAX_MIMETYPE 256 /* Maximum length of mimeMediaType values w/nul */ # define IPP_MAX_NAME 256 /* Maximum length of common name values w/nul */ # define IPP_MAX_OCTETSTRING 1023 /* Maximum length of octetString values w/o nul */ # define IPP_MAX_TEXT 1024 /* Maximum length of text values w/nul */ # define IPP_MAX_URI 1024 /* Maximum length of uri values w/nul */ # define IPP_MAX_URISCHEME 64 /* Maximum length of uriScheme values w/nul */ # define IPP_MAX_VALUES 8 /* Power-of-2 allocation increment */ /* * Macro to flag a text string attribute as "const" (static storage) vs. * allocated. */ # define IPP_CONST_TAG(x) (ipp_tag_t)(IPP_TAG_CUPS_CONST | (x)) /* * Types and structures... */ typedef enum ipp_dstate_e /**** Document states @exclude all@ ****/ { IPP_DSTATE_PENDING = 3, /* Document is pending */ IPP_DSTATE_PROCESSING = 5, /* Document is processing */ IPP_DSTATE_CANCELED = 7, /* Document is canceled */ IPP_DSTATE_ABORTED, /* Document is aborted */ IPP_DSTATE_COMPLETED /* Document is completed */ # ifndef _CUPS_NO_DEPRECATED # define IPP_DOCUMENT_PENDING IPP_DSTATE_PENDING # define IPP_DOCUMENT_PROCESSING IPP_DSTATE_PROCESSING # define IPP_DOCUMENT_CANCELED IPP_DSTATE_CANCELED # define IPP_DOCUMENT_ABORTED IPP_DSTATE_ABORTED # define IPP_DOCUMENT_COMPLETED IPP_DSTATE_COMPLETED # endif /* !_CUPS_NO_DEPRECATED */ } ipp_dstate_t; typedef enum ipp_finishings_e /**** Finishings values ****/ { IPP_FINISHINGS_NONE = 3, /* No finishing */ IPP_FINISHINGS_STAPLE, /* Staple (any location/method) */ IPP_FINISHINGS_PUNCH, /* Punch (any location/count) */ IPP_FINISHINGS_COVER, /* Add cover */ IPP_FINISHINGS_BIND, /* Bind */ IPP_FINISHINGS_SADDLE_STITCH, /* Staple interior */ IPP_FINISHINGS_EDGE_STITCH, /* Stitch along any side */ IPP_FINISHINGS_FOLD, /* Fold (any type) */ IPP_FINISHINGS_TRIM, /* Trim (any type) */ IPP_FINISHINGS_BALE, /* Bale (any type) */ IPP_FINISHINGS_BOOKLET_MAKER, /* Fold to make booklet */ IPP_FINISHINGS_JOG_OFFSET, /* Offset for binding (any type) */ IPP_FINISHINGS_COAT, /* Apply protective liquid or powder coating */ IPP_FINISHINGS_LAMINATE, /* Apply protective (solid) material */ IPP_FINISHINGS_STAPLE_TOP_LEFT = 20, /* Staple top left corner */ IPP_FINISHINGS_STAPLE_BOTTOM_LEFT, /* Staple bottom left corner */ IPP_FINISHINGS_STAPLE_TOP_RIGHT, /* Staple top right corner */ IPP_FINISHINGS_STAPLE_BOTTOM_RIGHT, /* Staple bottom right corner */ IPP_FINISHINGS_EDGE_STITCH_LEFT, /* Stitch along left side */ IPP_FINISHINGS_EDGE_STITCH_TOP, /* Stitch along top edge */ IPP_FINISHINGS_EDGE_STITCH_RIGHT, /* Stitch along right side */ IPP_FINISHINGS_EDGE_STITCH_BOTTOM, /* Stitch along bottom edge */ IPP_FINISHINGS_STAPLE_DUAL_LEFT, /* Two staples on left */ IPP_FINISHINGS_STAPLE_DUAL_TOP, /* Two staples on top */ IPP_FINISHINGS_STAPLE_DUAL_RIGHT, /* Two staples on right */ IPP_FINISHINGS_STAPLE_DUAL_BOTTOM, /* Two staples on bottom */ IPP_FINISHINGS_STAPLE_TRIPLE_LEFT, /* Three staples on left */ IPP_FINISHINGS_STAPLE_TRIPLE_TOP, /* Three staples on top */ IPP_FINISHINGS_STAPLE_TRIPLE_RIGHT, /* Three staples on right */ IPP_FINISHINGS_STAPLE_TRIPLE_BOTTOM, /* Three staples on bottom */ IPP_FINISHINGS_BIND_LEFT = 50, /* Bind on left */ IPP_FINISHINGS_BIND_TOP, /* Bind on top */ IPP_FINISHINGS_BIND_RIGHT, /* Bind on right */ IPP_FINISHINGS_BIND_BOTTOM, /* Bind on bottom */ IPP_FINISHINGS_TRIM_AFTER_PAGES = 60, /* Trim output after each page */ IPP_FINISHINGS_TRIM_AFTER_DOCUMENTS, /* Trim output after each document */ IPP_FINISHINGS_TRIM_AFTER_COPIES, /* Trim output after each copy */ IPP_FINISHINGS_TRIM_AFTER_JOB, /* Trim output after job */ IPP_FINISHINGS_PUNCH_TOP_LEFT = 70, /* Punch 1 hole top left */ IPP_FINISHINGS_PUNCH_BOTTOM_LEFT, /* Punch 1 hole bottom left */ IPP_FINISHINGS_PUNCH_TOP_RIGHT, /* Punch 1 hole top right */ IPP_FINISHINGS_PUNCH_BOTTOM_RIGHT, /* Punch 1 hole bottom right */ IPP_FINISHINGS_PUNCH_DUAL_LEFT, /* Punch 2 holes left side */ IPP_FINISHINGS_PUNCH_DUAL_TOP, /* Punch 2 holes top edge */ IPP_FINISHINGS_PUNCH_DUAL_RIGHT, /* Punch 2 holes right side */ IPP_FINISHINGS_PUNCH_DUAL_BOTTOM, /* Punch 2 holes bottom edge */ IPP_FINISHINGS_PUNCH_TRIPLE_LEFT, /* Punch 3 holes left side */ IPP_FINISHINGS_PUNCH_TRIPLE_TOP, /* Punch 3 holes top edge */ IPP_FINISHINGS_PUNCH_TRIPLE_RIGHT, /* Punch 3 holes right side */ IPP_FINISHINGS_PUNCH_TRIPLE_BOTTOM, /* Punch 3 holes bottom edge */ IPP_FINISHINGS_PUNCH_QUAD_LEFT, /* Punch 4 holes left side */ IPP_FINISHINGS_PUNCH_QUAD_TOP, /* Punch 4 holes top edge */ IPP_FINISHINGS_PUNCH_QUAD_RIGHT, /* Punch 4 holes right side */ IPP_FINISHINGS_PUNCH_QUAD_BOTTOM, /* Punch 4 holes bottom edge */ IPP_FINISHINGS_PUNCH_MULTIPLE_LEFT, /* Pucnh multiple holes left side */ IPP_FINISHINGS_PUNCH_MULTIPLE_TOP, /* Pucnh multiple holes top edge */ IPP_FINISHINGS_PUNCH_MULTIPLE_RIGHT, /* Pucnh multiple holes right side */ IPP_FINISHINGS_PUNCH_MULTIPLE_BOTTOM, /* Pucnh multiple holes bottom edge */ IPP_FINISHINGS_FOLD_ACCORDIAN = 90, /* Accordian-fold the paper vertically into four sections */ IPP_FINISHINGS_FOLD_DOUBLE_GATE, /* Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically */ IPP_FINISHINGS_FOLD_GATE, /* Fold the top and bottom quarters of the paper towards the midline */ IPP_FINISHINGS_FOLD_HALF, /* Fold the paper in half vertically */ IPP_FINISHINGS_FOLD_HALF_Z, /* Fold the paper in half horizontally, then Z-fold the paper vertically */ IPP_FINISHINGS_FOLD_LEFT_GATE, /* Fold the top quarter of the paper towards the midline */ IPP_FINISHINGS_FOLD_LETTER, /* Fold the paper into three sections vertically; sometimes also known as a C fold*/ IPP_FINISHINGS_FOLD_PARALLEL, /* Fold the paper in half vertically two times, yielding four sections */ IPP_FINISHINGS_FOLD_POSTER, /* Fold the paper in half horizontally and vertically; sometimes also called a cross fold */ IPP_FINISHINGS_FOLD_RIGHT_GATE, /* Fold the bottom quarter of the paper towards the midline */ IPP_FINISHINGS_FOLD_Z, /* Fold the paper vertically into three sections, forming a Z */ IPP_FINISHINGS_FOLD_ENGINEERING_Z, /* Fold the paper vertically into two small sections and one larger, forming an elongated Z */ /* CUPS extensions for finishings (pre-standard versions of values above) */ IPP_FINISHINGS_CUPS_PUNCH_TOP_LEFT = 0x40000046, /* Punch 1 hole top left @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_BOTTOM_LEFT,/* Punch 1 hole bottom left @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_TOP_RIGHT, /* Punch 1 hole top right @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_BOTTOM_RIGHT, /* Punch 1 hole bottom right @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_DUAL_LEFT, /* Punch 2 holes left side @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_DUAL_TOP, /* Punch 2 holes top edge @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_DUAL_RIGHT, /* Punch 2 holes right side @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_DUAL_BOTTOM,/* Punch 2 holes bottom edge @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_LEFT,/* Punch 3 holes left side @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_TOP, /* Punch 3 holes top edge @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_RIGHT, /* Punch 3 holes right side @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_BOTTOM, /* Punch 3 holes bottom edge @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_QUAD_LEFT, /* Punch 4 holes left side @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_QUAD_TOP, /* Punch 4 holes top edge @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_QUAD_RIGHT, /* Punch 4 holes right side @exclude all@ */ IPP_FINISHINGS_CUPS_PUNCH_QUAD_BOTTOM,/* Punch 4 holes bottom edge @exclude all@ */ IPP_FINISHINGS_CUPS_FOLD_ACCORDIAN = 0x4000005A, /* Accordian-fold the paper vertically into four sections @exclude all@ */ IPP_FINISHINGS_CUPS_FOLD_DOUBLE_GATE, /* Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically @exclude all@ */ IPP_FINISHINGS_CUPS_FOLD_GATE, /* Fold the top and bottom quarters of the paper towards the midline @exclude all@ */ IPP_FINISHINGS_CUPS_FOLD_HALF, /* Fold the paper in half vertically @exclude all@ */ IPP_FINISHINGS_CUPS_FOLD_HALF_Z, /* Fold the paper in half horizontally, then Z-fold the paper vertically @exclude all@ */ IPP_FINISHINGS_CUPS_FOLD_LEFT_GATE, /* Fold the top quarter of the paper towards the midline @exclude all@ */ IPP_FINISHINGS_CUPS_FOLD_LETTER, /* Fold the paper into three sections vertically; sometimes also known as a C fold @exclude all@ */ IPP_FINISHINGS_CUPS_FOLD_PARALLEL, /* Fold the paper in half vertically two times, yielding four sections @exclude all@ */ IPP_FINISHINGS_CUPS_FOLD_POSTER, /* Fold the paper in half horizontally and vertically; sometimes also called a cross fold @exclude all@ */ IPP_FINISHINGS_CUPS_FOLD_RIGHT_GATE, /* Fold the bottom quarter of the paper towards the midline @exclude all@ */ IPP_FINISHINGS_CUPS_FOLD_Z /* Fold the paper vertically into three sections, forming a Z @exclude all@ */ } ipp_finishings_t; # ifndef _CUPS_NO_DEPRECATED # define IPP_FINISHINGS_JOB_OFFSET IPP_FINISHINGS_JOG_OFFSET /* Long-time misspelling... */ typedef enum ipp_finishings_e ipp_finish_t; # endif /* !_CUPS_NO_DEPRECATED */ typedef enum ipp_jcollate_e /**** Job collation types @deprecated@ @exclude all@ ****/ { IPP_JCOLLATE_UNCOLLATED_SHEETS = 3, IPP_JCOLLATE_COLLATED_DOCUMENTS, IPP_JCOLLATE_UNCOLLATED_DOCUMENTS # ifndef _CUPS_NO_DEPRECATED # define IPP_JOB_UNCOLLATED_SHEETS IPP_JCOLLATE_UNCOLLATED_SHEETS # define IPP_JOB_COLLATED_DOCUMENTS IPP_JCOLLATE_COLLATED_DOCUMENTS # define IPP_JOB_UNCOLLATED_DOCUMENTS IPP_JCOLLATE_UNCOLLATED_DOCUMENTS # endif /* !_CUPS_NO_DEPRECATED */ } ipp_jcollate_t; typedef enum ipp_jstate_e /**** Job states ****/ { IPP_JSTATE_PENDING = 3, /* Job is waiting to be printed */ IPP_JSTATE_HELD, /* Job is held for printing */ IPP_JSTATE_PROCESSING, /* Job is currently printing */ IPP_JSTATE_STOPPED, /* Job has been stopped */ IPP_JSTATE_CANCELED, /* Job has been canceled */ IPP_JSTATE_ABORTED, /* Job has aborted due to error */ IPP_JSTATE_COMPLETED /* Job has completed successfully */ # ifndef _CUPS_NO_DEPRECATED # define IPP_JOB_PENDING IPP_JSTATE_PENDING # define IPP_JOB_HELD IPP_JSTATE_HELD # define IPP_JOB_PROCESSING IPP_JSTATE_PROCESSING # define IPP_JOB_STOPPED IPP_JSTATE_STOPPED # define IPP_JOB_CANCELED IPP_JSTATE_CANCELED # define IPP_JOB_ABORTED IPP_JSTATE_ABORTED # define IPP_JOB_COMPLETED IPP_JSTATE_COMPLETED /* Legacy name for canceled state */ # define IPP_JOB_CANCELLED IPP_JSTATE_CANCELED # endif /* !_CUPS_NO_DEPRECATED */ } ipp_jstate_t; typedef enum ipp_op_e /**** IPP operations ****/ { IPP_OP_CUPS_INVALID = -1, /* Invalid operation name for @link ippOpValue@ */ IPP_OP_CUPS_NONE = 0, /* No operation @private@ */ IPP_OP_PRINT_JOB = 0x0002, /* Print-Job: Print a single file */ IPP_OP_PRINT_URI, /* Print-URI: Print a single URL @exclude all@ */ IPP_OP_VALIDATE_JOB, /* Validate-Job: Validate job values prior to submission */ IPP_OP_CREATE_JOB, /* Create-Job: Create an empty print job */ IPP_OP_SEND_DOCUMENT, /* Send-Document: Add a file to a job */ IPP_OP_SEND_URI, /* Send-URI: Add a URL to a job @exclude all@ */ IPP_OP_CANCEL_JOB, /* Cancel-Job: Cancel a job */ IPP_OP_GET_JOB_ATTRIBUTES, /* Get-Job-Attribute: Get information about a job */ IPP_OP_GET_JOBS, /* Get-Jobs: Get a list of jobs */ IPP_OP_GET_PRINTER_ATTRIBUTES, /* Get-Printer-Attributes: Get information about a printer */ IPP_OP_HOLD_JOB, /* Hold-Job: Hold a job for printing */ IPP_OP_RELEASE_JOB, /* Release-Job: Release a job for printing */ IPP_OP_RESTART_JOB, /* Restart-Job: Reprint a job @deprecated@ */ IPP_OP_PAUSE_PRINTER = 0x0010, /* Pause-Printer: Stop a printer */ IPP_OP_RESUME_PRINTER, /* Resume-Printer: Start a printer */ IPP_OP_PURGE_JOBS, /* Purge-Jobs: Delete all jobs @deprecated@ @exclude all@ */ IPP_OP_SET_PRINTER_ATTRIBUTES, /* Set-Printer-Attributes: Set printer values */ IPP_OP_SET_JOB_ATTRIBUTES, /* Set-Job-Attributes: Set job values */ IPP_OP_GET_PRINTER_SUPPORTED_VALUES, /* Get-Printer-Supported-Values: Get supported values */ IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS, /* Create-Printer-Subscriptions: Create one or more printer subscriptions @since CUPS 1.2/macOS 10.5@ */ IPP_OP_CREATE_JOB_SUBSCRIPTIONS, /* Create-Job-Subscriptions: Create one of more job subscriptions @since CUPS 1.2/macOS 10.5@ */ IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES, /* Get-Subscription-Attributes: Get subscription information @since CUPS 1.2/macOS 10.5@ */ IPP_OP_GET_SUBSCRIPTIONS, /* Get-Subscriptions: Get list of subscriptions @since CUPS 1.2/macOS 10.5@ */ IPP_OP_RENEW_SUBSCRIPTION, /* Renew-Subscription: Renew a printer subscription @since CUPS 1.2/macOS 10.5@ */ IPP_OP_CANCEL_SUBSCRIPTION, /* Cancel-Subscription: Cancel a subscription @since CUPS 1.2/macOS 10.5@ */ IPP_OP_GET_NOTIFICATIONS, /* Get-Notifications: Get notification events @since CUPS 1.2/macOS 10.5@ */ IPP_OP_SEND_NOTIFICATIONS, /* Send-Notifications: Send notification events @private@ */ IPP_OP_GET_RESOURCE_ATTRIBUTES, /* Get-Resource-Attributes: Get resource information @private@ */ IPP_OP_GET_RESOURCE_DATA, /* Get-Resource-Data: Get resource data @private@ @deprecated@ */ IPP_OP_GET_RESOURCES, /* Get-Resources: Get list of resources @private@ */ IPP_OP_GET_PRINT_SUPPORT_FILES, /* Get-Printer-Support-Files: Get printer support files @private@ */ IPP_OP_ENABLE_PRINTER, /* Enable-Printer: Accept new jobs for a printer */ IPP_OP_DISABLE_PRINTER, /* Disable-Printer: Reject new jobs for a printer */ IPP_OP_PAUSE_PRINTER_AFTER_CURRENT_JOB, /* Pause-Printer-After-Current-Job: Stop printer after the current job */ IPP_OP_HOLD_NEW_JOBS, /* Hold-New-Jobs: Hold new jobs */ IPP_OP_RELEASE_HELD_NEW_JOBS, /* Release-Held-New-Jobs: Release new jobs that were previously held */ IPP_OP_DEACTIVATE_PRINTER, /* Deactivate-Printer: Stop a printer and do not accept jobs @deprecated@ @exclude all@ */ IPP_OP_ACTIVATE_PRINTER, /* Activate-Printer: Start a printer and accept jobs @deprecated@ @exclude all@ */ IPP_OP_RESTART_PRINTER, /* Restart-Printer: Restart a printer @exclude all@ */ IPP_OP_SHUTDOWN_PRINTER, /* Shutdown-Printer: Turn a printer off @exclude all@ */ IPP_OP_STARTUP_PRINTER, /* Startup-Printer: Turn a printer on @exclude all@ */ IPP_OP_REPROCESS_JOB, /* Reprocess-Job: Reprint a job @deprecated@ @exclude all@*/ IPP_OP_CANCEL_CURRENT_JOB, /* Cancel-Current-Job: Cancel the current job */ IPP_OP_SUSPEND_CURRENT_JOB, /* Suspend-Current-Job: Suspend the current job */ IPP_OP_RESUME_JOB, /* Resume-Job: Resume the current job */ IPP_OP_PROMOTE_JOB, /* Promote-Job: Promote a job to print sooner */ IPP_OP_SCHEDULE_JOB_AFTER, /* Schedule-Job-After: Schedule a job to print after another */ IPP_OP_CANCEL_DOCUMENT = 0x0033, /* Cancel-Document: Cancel a document @exclude all@ */ IPP_OP_GET_DOCUMENT_ATTRIBUTES, /* Get-Document-Attributes: Get document information @exclude all@ */ IPP_OP_GET_DOCUMENTS, /* Get-Documents: Get a list of documents in a job @exclude all@ */ IPP_OP_DELETE_DOCUMENT, /* Delete-Document: Delete a document @deprecated@ @exclude all@ */ IPP_OP_SET_DOCUMENT_ATTRIBUTES, /* Set-Document-Attributes: Set document values @exclude all@ */ IPP_OP_CANCEL_JOBS, /* Cancel-Jobs: Cancel all jobs (administrative) */ IPP_OP_CANCEL_MY_JOBS, /* Cancel-My-Jobs: Cancel a user's jobs */ IPP_OP_RESUBMIT_JOB, /* Resubmit-Job: Copy and reprint a job @exclude all@ */ IPP_OP_CLOSE_JOB, /* Close-Job: Close a job and start printing */ IPP_OP_IDENTIFY_PRINTER, /* Identify-Printer: Make the printer beep, flash, or display a message for identification */ IPP_OP_VALIDATE_DOCUMENT, /* Validate-Document: Validate document values prior to submission @exclude all@ */ IPP_OP_ADD_DOCUMENT_IMAGES, /* Add-Document-Images: Add image(s) from the specified scanner source @exclude all@ */ IPP_OP_ACKNOWLEDGE_DOCUMENT, /* Acknowledge-Document: Acknowledge processing of a document @exclude all@ */ IPP_OP_ACKNOWLEDGE_IDENTIFY_PRINTER, /* Acknowledge-Identify-Printer: Acknowledge action on an Identify-Printer request @exclude all@ */ IPP_OP_ACKNOWLEDGE_JOB, /* Acknowledge-Job: Acknowledge processing of a job @exclude all@ */ IPP_OP_FETCH_DOCUMENT, /* Fetch-Document: Fetch a document for processing @exclude all@ */ IPP_OP_FETCH_JOB, /* Fetch-Job: Fetch a job for processing @exclude all@ */ IPP_OP_GET_OUTPUT_DEVICE_ATTRIBUTES, /* Get-Output-Device-Attributes: Get printer information for a specific output device @exclude all@ */ IPP_OP_UPDATE_ACTIVE_JOBS, /* Update-Active-Jobs: Update the list of active jobs that a proxy has processed @exclude all@ */ IPP_OP_DEREGISTER_OUTPUT_DEVICE, /* Deregister-Output-Device: Remove an output device @exclude all@ */ IPP_OP_UPDATE_DOCUMENT_STATUS, /* Update-Document-Status: Update document values @exclude all@ */ IPP_OP_UPDATE_JOB_STATUS, /* Update-Job-Status: Update job values @exclude all@ */ IPP_OP_UPDATE_OUTPUT_DEVICE_ATTRIBUTES, /* Update-Output-Device-Attributes: Update output device values @exclude all@ */ IPP_OP_GET_NEXT_DOCUMENT_DATA, /* Get-Next-Document-Data: Scan more document data @exclude all@ */ IPP_OP_PRIVATE = 0x4000, /* Reserved @private@ */ IPP_OP_CUPS_GET_DEFAULT, /* CUPS-Get-Default: Get the default printer */ IPP_OP_CUPS_GET_PRINTERS, /* CUPS-Get-Printers: Get a list of printers and/or classes */ IPP_OP_CUPS_ADD_MODIFY_PRINTER, /* CUPS-Add-Modify-Printer: Add or modify a printer */ IPP_OP_CUPS_DELETE_PRINTER, /* CUPS-Delete-Printer: Delete a printer */ IPP_OP_CUPS_GET_CLASSES, /* CUPS-Get-Classes: Get a list of classes @deprecated@ @exclude all@ */ IPP_OP_CUPS_ADD_MODIFY_CLASS, /* CUPS-Add-Modify-Class: Add or modify a class */ IPP_OP_CUPS_DELETE_CLASS, /* CUPS-Delete-Class: Delete a class */ IPP_OP_CUPS_ACCEPT_JOBS, /* CUPS-Accept-Jobs: Accept new jobs on a printer @exclude all@ */ IPP_OP_CUPS_REJECT_JOBS, /* CUPS-Reject-Jobs: Reject new jobs on a printer @exclude all@ */ IPP_OP_CUPS_SET_DEFAULT, /* CUPS-Set-Default: Set the default printer */ IPP_OP_CUPS_GET_DEVICES, /* CUPS-Get-Devices: Get a list of supported devices @deprecated@ */ IPP_OP_CUPS_GET_PPDS, /* CUPS-Get-PPDs: Get a list of supported drivers @deprecated@ */ IPP_OP_CUPS_MOVE_JOB, /* CUPS-Move-Job: Move a job to a different printer */ IPP_OP_CUPS_AUTHENTICATE_JOB, /* CUPS-Authenticate-Job: Authenticate a job @since CUPS 1.2/macOS 10.5@ */ IPP_OP_CUPS_GET_PPD, /* CUPS-Get-PPD: Get a PPD file @deprecated@ */ IPP_OP_CUPS_GET_DOCUMENT = 0x4027, /* CUPS-Get-Document: Get a document file @since CUPS 1.4/macOS 10.6@ */ IPP_OP_CUPS_CREATE_LOCAL_PRINTER /* CUPS-Create-Local-Printer: Create a local (temporary) printer @since CUPS 2.2@ */ # ifndef _CUPS_NO_DEPRECATED # define IPP_PRINT_JOB IPP_OP_PRINT_JOB # define IPP_PRINT_URI IPP_OP_PRINT_URI # define IPP_VALIDATE_JOB IPP_OP_VALIDATE_JOB # define IPP_CREATE_JOB IPP_OP_CREATE_JOB # define IPP_SEND_DOCUMENT IPP_OP_SEND_DOCUMENT # define IPP_SEND_URI IPP_OP_SEND_URI # define IPP_CANCEL_JOB IPP_OP_CANCEL_JOB # define IPP_GET_JOB_ATTRIBUTES IPP_OP_GET_JOB_ATTRIBUTES # define IPP_GET_JOBS IPP_OP_GET_JOBS # define IPP_GET_PRINTER_ATTRIBUTES IPP_OP_GET_PRINTER_ATTRIBUTES # define IPP_HOLD_JOB IPP_OP_HOLD_JOB # define IPP_RELEASE_JOB IPP_OP_RELEASE_JOB # define IPP_RESTART_JOB IPP_OP_RESTART_JOB # define IPP_PAUSE_PRINTER IPP_OP_PAUSE_PRINTER # define IPP_RESUME_PRINTER IPP_OP_RESUME_PRINTER # define IPP_PURGE_JOBS IPP_OP_PURGE_JOBS # define IPP_SET_PRINTER_ATTRIBUTES IPP_OP_SET_PRINTER_ATTRIBUTES # define IPP_SET_JOB_ATTRIBUTES IPP_OP_SET_JOB_ATTRIBUTES # define IPP_GET_PRINTER_SUPPORTED_VALUES IPP_OP_GET_PRINTER_SUPPORTED_VALUES # define IPP_CREATE_PRINTER_SUBSCRIPTION IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS # define IPP_CREATE_JOB_SUBSCRIPTION IPP_OP_CREATE_JOB_SUBSCRIPTIONS # define IPP_OP_CREATE_PRINTER_SUBSCRIPTION IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS # define IPP_OP_CREATE_JOB_SUBSCRIPTION IPP_OP_CREATE_JOB_SUBSCRIPTIONS # define IPP_GET_SUBSCRIPTION_ATTRIBUTES IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES # define IPP_GET_SUBSCRIPTIONS IPP_OP_GET_SUBSCRIPTIONS # define IPP_RENEW_SUBSCRIPTION IPP_OP_RENEW_SUBSCRIPTION # define IPP_CANCEL_SUBSCRIPTION IPP_OP_CANCEL_SUBSCRIPTION # define IPP_GET_NOTIFICATIONS IPP_OP_GET_NOTIFICATIONS # define IPP_SEND_NOTIFICATIONS IPP_OP_SEND_NOTIFICATIONS # define IPP_GET_RESOURCE_ATTRIBUTES IPP_OP_GET_RESOURCE_ATTRIBUTES # define IPP_GET_RESOURCE_DATA IPP_OP_GET_RESOURCE_DATA # define IPP_GET_RESOURCES IPP_OP_GET_RESOURCES # define IPP_GET_PRINT_SUPPORT_FILES IPP_OP_GET_PRINT_SUPPORT_FILES # define IPP_ENABLE_PRINTER IPP_OP_ENABLE_PRINTER # define IPP_DISABLE_PRINTER IPP_OP_DISABLE_PRINTER # define IPP_PAUSE_PRINTER_AFTER_CURRENT_JOB IPP_OP_PAUSE_PRINTER_AFTER_CURRENT_JOB # define IPP_HOLD_NEW_JOBS IPP_OP_HOLD_NEW_JOBS # define IPP_RELEASE_HELD_NEW_JOBS IPP_OP_RELEASE_HELD_NEW_JOBS # define IPP_DEACTIVATE_PRINTER IPP_OP_DEACTIVATE_PRINTER # define IPP_ACTIVATE_PRINTER IPP_OP_ACTIVATE_PRINTER # define IPP_RESTART_PRINTER IPP_OP_RESTART_PRINTER # define IPP_SHUTDOWN_PRINTER IPP_OP_SHUTDOWN_PRINTER # define IPP_STARTUP_PRINTER IPP_OP_STARTUP_PRINTER # define IPP_REPROCESS_JOB IPP_OP_REPROCESS_JOB # define IPP_CANCEL_CURRENT_JOB IPP_OP_CANCEL_CURRENT_JOB # define IPP_SUSPEND_CURRENT_JOB IPP_OP_SUSPEND_CURRENT_JOB # define IPP_RESUME_JOB IPP_OP_RESUME_JOB # define IPP_PROMOTE_JOB IPP_OP_PROMOTE_JOB # define IPP_SCHEDULE_JOB_AFTER IPP_OP_SCHEDULE_JOB_AFTER # define IPP_CANCEL_DOCUMENT IPP_OP_CANCEL_DOCUMENT # define IPP_GET_DOCUMENT_ATTRIBUTES IPP_OP_GET_DOCUMENT_ATTRIBUTES # define IPP_GET_DOCUMENTS IPP_OP_GET_DOCUMENTS # define IPP_DELETE_DOCUMENT IPP_OP_DELETE_DOCUMENT # define IPP_SET_DOCUMENT_ATTRIBUTES IPP_OP_SET_DOCUMENT_ATTRIBUTES # define IPP_CANCEL_JOBS IPP_OP_CANCEL_JOBS # define IPP_CANCEL_MY_JOBS IPP_OP_CANCEL_MY_JOBS # define IPP_RESUBMIT_JOB IPP_OP_RESUBMIT_JOB # define IPP_CLOSE_JOB IPP_OP_CLOSE_JOB # define IPP_IDENTIFY_PRINTER IPP_OP_IDENTIFY_PRINTER # define IPP_VALIDATE_DOCUMENT IPP_OP_VALIDATE_DOCUMENT # define IPP_OP_SEND_HARDCOPY_DOCUMENT IPP_OP_ADD_DOCUMENT_IMAGES # define IPP_PRIVATE IPP_OP_PRIVATE # define CUPS_GET_DEFAULT IPP_OP_CUPS_GET_DEFAULT # define CUPS_GET_PRINTERS IPP_OP_CUPS_GET_PRINTERS # define CUPS_ADD_MODIFY_PRINTER IPP_OP_CUPS_ADD_MODIFY_PRINTER # define CUPS_DELETE_PRINTER IPP_OP_CUPS_DELETE_PRINTER # define CUPS_GET_CLASSES IPP_OP_CUPS_GET_CLASSES # define CUPS_ADD_MODIFY_CLASS IPP_OP_CUPS_ADD_MODIFY_CLASS # define CUPS_DELETE_CLASS IPP_OP_CUPS_DELETE_CLASS # define CUPS_ACCEPT_JOBS IPP_OP_CUPS_ACCEPT_JOBS # define CUPS_REJECT_JOBS IPP_OP_CUPS_REJECT_JOBS # define CUPS_SET_DEFAULT IPP_OP_CUPS_SET_DEFAULT # define CUPS_GET_DEVICES IPP_OP_CUPS_GET_DEVICES # define CUPS_GET_PPDS IPP_OP_CUPS_GET_PPDS # define CUPS_MOVE_JOB IPP_OP_CUPS_MOVE_JOB # define CUPS_AUTHENTICATE_JOB IPP_OP_CUPS_AUTHENTICATE_JOB # define CUPS_GET_PPD IPP_OP_CUPS_GET_PPD # define CUPS_GET_DOCUMENT IPP_OP_CUPS_GET_DOCUMENT /* Legacy names */ # define CUPS_ADD_PRINTER IPP_OP_CUPS_ADD_MODIFY_PRINTER # define CUPS_ADD_CLASS IPP_OP_CUPS_ADD_MODIFY_CLASS # endif /* !_CUPS_NO_DEPRECATED */ } ipp_op_t; typedef enum ipp_orient_e /**** Orientation values ****/ { IPP_ORIENT_PORTRAIT = 3, /* No rotation */ IPP_ORIENT_LANDSCAPE, /* 90 degrees counter-clockwise */ IPP_ORIENT_REVERSE_LANDSCAPE, /* 90 degrees clockwise */ IPP_ORIENT_REVERSE_PORTRAIT, /* 180 degrees */ IPP_ORIENT_NONE /* No rotation */ # ifndef _CUPS_NO_DEPRECATED # define IPP_PORTRAIT IPP_ORIENT_PORTRAIT # define IPP_LANDSCAPE IPP_ORIENT_LANDSCAPE # define IPP_REVERSE_LANDSCAPE IPP_ORIENT_REVERSE_LANDSCAPE # define IPP_REVERSE_PORTRAIT IPP_ORIENT_REVERSE_PORTRAIT # endif /* !_CUPS_NO_DEPRECATED */ } ipp_orient_t; typedef enum ipp_pstate_e /**** Printer state values ****/ { IPP_PSTATE_IDLE = 3, /* Printer is idle */ IPP_PSTATE_PROCESSING, /* Printer is working */ IPP_PSTATE_STOPPED /* Printer is stopped */ # ifndef _CUPS_NO_DEPRECATED # define IPP_PRINTER_IDLE IPP_PSTATE_IDLE # define IPP_PRINTER_PROCESSING IPP_PSTATE_PROCESSING # define IPP_PRINTER_STOPPED IPP_PSTATE_STOPPED # endif /* _CUPS_NO_DEPRECATED */ } ipp_pstate_t; typedef enum ipp_quality_e /**** Print quality values ****/ { IPP_QUALITY_DRAFT = 3, /* Draft quality */ IPP_QUALITY_NORMAL, /* Normal quality */ IPP_QUALITY_HIGH /* High quality */ } ipp_quality_t; typedef enum ipp_res_e /**** Resolution units ****/ { IPP_RES_PER_INCH = 3, /* Pixels per inch */ IPP_RES_PER_CM /* Pixels per centimeter */ } ipp_res_t; typedef enum ipp_state_e /**** ipp_t state values ****/ { IPP_STATE_ERROR = -1, /* An error occurred */ IPP_STATE_IDLE, /* Nothing is happening/request completed */ IPP_STATE_HEADER, /* The request header needs to be sent/received */ IPP_STATE_ATTRIBUTE, /* One or more attributes need to be sent/received */ IPP_STATE_DATA /* IPP request data needs to be sent/received */ # ifndef _CUPS_NO_DEPRECATED # define IPP_ERROR IPP_STATE_ERROR # define IPP_IDLE IPP_STATE_IDLE # define IPP_HEADER IPP_STATE_HEADER # define IPP_ATTRIBUTE IPP_STATE_ATTRIBUTE # define IPP_DATA IPP_STATE_DATA # endif /* !_CUPS_NO_DEPRECATED */ } ipp_state_t; typedef enum ipp_status_e /**** IPP status code values ****/ { IPP_STATUS_CUPS_INVALID = -1, /* Invalid status name for @link ippErrorValue@ */ IPP_STATUS_OK = 0x0000, /* successful-ok */ IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED, /* successful-ok-ignored-or-substituted-attributes */ IPP_STATUS_OK_CONFLICTING, /* successful-ok-conflicting-attributes */ IPP_STATUS_OK_IGNORED_SUBSCRIPTIONS, /* successful-ok-ignored-subscriptions */ IPP_STATUS_OK_IGNORED_NOTIFICATIONS, /* successful-ok-ignored-notifications @private@ */ IPP_STATUS_OK_TOO_MANY_EVENTS, /* successful-ok-too-many-events */ IPP_STATUS_OK_BUT_CANCEL_SUBSCRIPTION,/* successful-ok-but-cancel-subscription @private@ */ IPP_STATUS_OK_EVENTS_COMPLETE, /* successful-ok-events-complete */ IPP_STATUS_REDIRECTION_OTHER_SITE = 0x0200, /* redirection-other-site @private@ */ IPP_STATUS_CUPS_SEE_OTHER = 0x0280, /* cups-see-other @private@ */ IPP_STATUS_ERROR_BAD_REQUEST = 0x0400,/* client-error-bad-request */ IPP_STATUS_ERROR_FORBIDDEN, /* client-error-forbidden */ IPP_STATUS_ERROR_NOT_AUTHENTICATED, /* client-error-not-authenticated */ IPP_STATUS_ERROR_NOT_AUTHORIZED, /* client-error-not-authorized */ IPP_STATUS_ERROR_NOT_POSSIBLE, /* client-error-not-possible */ IPP_STATUS_ERROR_TIMEOUT, /* client-error-timeout */ IPP_STATUS_ERROR_NOT_FOUND, /* client-error-not-found */ IPP_STATUS_ERROR_GONE, /* client-error-gone */ IPP_STATUS_ERROR_REQUEST_ENTITY, /* client-error-request-entity-too-large */ IPP_STATUS_ERROR_REQUEST_VALUE, /* client-error-request-value-too-long */ IPP_STATUS_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED, /* client-error-document-format-not-supported */ IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES,/* client-error-attributes-or-values-not-supported */ IPP_STATUS_ERROR_URI_SCHEME, /* client-error-uri-scheme-not-supported */ IPP_STATUS_ERROR_CHARSET, /* client-error-charset-not-supported */ IPP_STATUS_ERROR_CONFLICTING, /* client-error-conflicting-attributes */ IPP_STATUS_ERROR_COMPRESSION_NOT_SUPPORTED, /* client-error-compression-not-supported */ IPP_STATUS_ERROR_COMPRESSION_ERROR, /* client-error-compression-error */ IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, /* client-error-document-format-error */ IPP_STATUS_ERROR_DOCUMENT_ACCESS, /* client-error-document-access-error */ IPP_STATUS_ERROR_ATTRIBUTES_NOT_SETTABLE, /* client-error-attributes-not-settable */ IPP_STATUS_ERROR_IGNORED_ALL_SUBSCRIPTIONS, /* client-error-ignored-all-subscriptions */ IPP_STATUS_ERROR_TOO_MANY_SUBSCRIPTIONS, /* client-error-too-many-subscriptions */ IPP_STATUS_ERROR_IGNORED_ALL_NOTIFICATIONS, /* client-error-ignored-all-notifications @private@ */ IPP_STATUS_ERROR_PRINT_SUPPORT_FILE_NOT_FOUND, /* client-error-print-support-file-not-found @private@ */ IPP_STATUS_ERROR_DOCUMENT_PASSWORD, /* client-error-document-password-error */ IPP_STATUS_ERROR_DOCUMENT_PERMISSION, /* client-error-document-permission-error */ IPP_STATUS_ERROR_DOCUMENT_SECURITY, /* client-error-document-security-error */ IPP_STATUS_ERROR_DOCUMENT_UNPRINTABLE,/* client-error-document-unprintable-error */ IPP_STATUS_ERROR_ACCOUNT_INFO_NEEDED, /* client-error-account-info-needed */ IPP_STATUS_ERROR_ACCOUNT_CLOSED, /* client-error-account-closed */ IPP_STATUS_ERROR_ACCOUNT_LIMIT_REACHED, /* client-error-account-limit-reached */ IPP_STATUS_ERROR_ACCOUNT_AUTHORIZATION_FAILED, /* client-error-account-authorization-failed */ IPP_STATUS_ERROR_NOT_FETCHABLE, /* client-error-not-fetchable */ /* Legacy status codes for paid printing */ IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED = 0x049C, /* cups-error-account-info-needed @deprecated@ */ IPP_STATUS_ERROR_CUPS_ACCOUNT_CLOSED, /* cups-error-account-closed @deprecate@ */ IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED, /* cups-error-account-limit-reached @deprecated@ */ IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED, /* cups-error-account-authorization-failed @deprecated@ */ IPP_STATUS_ERROR_INTERNAL = 0x0500, /* server-error-internal-error */ IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED, /* server-error-operation-not-supported */ IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, /* server-error-service-unavailable */ IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED, /* server-error-version-not-supported */ IPP_STATUS_ERROR_DEVICE, /* server-error-device-error */ IPP_STATUS_ERROR_TEMPORARY, /* server-error-temporary-error */ IPP_STATUS_ERROR_NOT_ACCEPTING_JOBS, /* server-error-not-accepting-jobs */ IPP_STATUS_ERROR_BUSY, /* server-error-busy */ IPP_STATUS_ERROR_JOB_CANCELED, /* server-error-job-canceled */ IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED, /* server-error-multiple-document-jobs-not-supported */ IPP_STATUS_ERROR_PRINTER_IS_DEACTIVATED, /* server-error-printer-is-deactivated */ IPP_STATUS_ERROR_TOO_MANY_JOBS, /* server-error-too-many-jobs */ IPP_STATUS_ERROR_TOO_MANY_DOCUMENTS, /* server-error-too-many-documents */ /* These are internal and never sent over the wire... */ IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED = 0x1000, /* cups-authentication-canceled - Authentication canceled by user @since CUPS 1.5/macOS 10.7@ */ IPP_STATUS_ERROR_CUPS_PKI, /* cups-pki-error - Error negotiating a secure connection @since CUPS 1.5/macOS 10.7@ */ IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED/* cups-upgrade-required - TLS upgrade required @since CUPS 1.5/macOS 10.7@ */ # ifndef _CUPS_NO_DEPRECATED # define IPP_OK IPP_STATUS_OK # define IPP_OK_SUBST IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED # define IPP_OK_CONFLICT IPP_STATUS_OK_CONFLICTING # define IPP_OK_IGNORED_SUBSCRIPTIONS IPP_STATUS_OK_IGNORED_SUBSCRIPTIONS # define IPP_OK_IGNORED_NOTIFICATIONS IPP_STATUS_OK_IGNORED_NOTIFICATIONS # define IPP_OK_TOO_MANY_EVENTS IPP_STATUS_OK_TOO_MANY_EVENTS # define IPP_OK_BUT_CANCEL_SUBSCRIPTION IPP_STATUS_OK_BUT_CANCEL_SUBSCRIPTION # define IPP_OK_EVENTS_COMPLETE IPP_STATUS_OK_EVENTS_COMPLETE # define IPP_REDIRECTION_OTHER_SITE IPP_STATUS_REDIRECTION_OTHER_SITE # define CUPS_SEE_OTHER IPP_STATUS_CUPS_SEE_OTHER # define IPP_BAD_REQUEST IPP_STATUS_ERROR_BAD_REQUEST # define IPP_FORBIDDEN IPP_STATUS_ERROR_FORBIDDEN # define IPP_NOT_AUTHENTICATED IPP_STATUS_ERROR_NOT_AUTHENTICATED # define IPP_NOT_AUTHORIZED IPP_STATUS_ERROR_NOT_AUTHORIZED # define IPP_NOT_POSSIBLE IPP_STATUS_ERROR_NOT_POSSIBLE # define IPP_TIMEOUT IPP_STATUS_ERROR_TIMEOUT # define IPP_NOT_FOUND IPP_STATUS_ERROR_NOT_FOUND # define IPP_GONE IPP_STATUS_ERROR_GONE # define IPP_REQUEST_ENTITY IPP_STATUS_ERROR_REQUEST_ENTITY # define IPP_REQUEST_VALUE IPP_STATUS_ERROR_REQUEST_VALUE # define IPP_DOCUMENT_FORMAT IPP_STATUS_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED # define IPP_ATTRIBUTES IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES # define IPP_URI_SCHEME IPP_STATUS_ERROR_URI_SCHEME # define IPP_CHARSET IPP_STATUS_ERROR_CHARSET # define IPP_CONFLICT IPP_STATUS_ERROR_CONFLICTING # define IPP_COMPRESSION_NOT_SUPPORTED IPP_STATUS_ERROR_COMPRESSION_NOT_SUPPORTED # define IPP_COMPRESSION_ERROR IPP_STATUS_ERROR_COMPRESSION_ERROR # define IPP_DOCUMENT_FORMAT_ERROR IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR # define IPP_DOCUMENT_ACCESS_ERROR IPP_STATUS_ERROR_DOCUMENT_ACCESS # define IPP_ATTRIBUTES_NOT_SETTABLE IPP_STATUS_ERROR_ATTRIBUTES_NOT_SETTABLE # define IPP_IGNORED_ALL_SUBSCRIPTIONS IPP_STATUS_ERROR_IGNORED_ALL_SUBSCRIPTIONS # define IPP_TOO_MANY_SUBSCRIPTIONS IPP_STATUS_ERROR_TOO_MANY_SUBSCRIPTIONS # define IPP_IGNORED_ALL_NOTIFICATIONS IPP_STATUS_ERROR_IGNORED_ALL_NOTIFICATIONS # define IPP_PRINT_SUPPORT_FILE_NOT_FOUND IPP_STATUS_ERROR_PRINT_SUPPORT_FILE_NOT_FOUND # define IPP_DOCUMENT_PASSWORD_ERROR IPP_STATUS_ERROR_DOCUMENT_PASSWORD # define IPP_DOCUMENT_PERMISSION_ERROR IPP_STATUS_ERROR_DOCUMENT_PERMISSION # define IPP_DOCUMENT_SECURITY_ERROR IPP_STATUS_ERROR_DOCUMENT_SECURITY # define IPP_DOCUMENT_UNPRINTABLE_ERROR IPP_STATUS_ERROR_DOCUMENT_UNPRINTABLE # define IPP_INTERNAL_ERROR IPP_STATUS_ERROR_INTERNAL # define IPP_OPERATION_NOT_SUPPORTED IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED # define IPP_SERVICE_UNAVAILABLE IPP_STATUS_ERROR_SERVICE_UNAVAILABLE # define IPP_VERSION_NOT_SUPPORTED IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED # define IPP_DEVICE_ERROR IPP_STATUS_ERROR_DEVICE # define IPP_TEMPORARY_ERROR IPP_STATUS_ERROR_TEMPORARY # define IPP_NOT_ACCEPTING IPP_STATUS_ERROR_NOT_ACCEPTING_JOBS # define IPP_PRINTER_BUSY IPP_STATUS_ERROR_BUSY # define IPP_ERROR_JOB_CANCELED IPP_STATUS_ERROR_JOB_CANCELED # define IPP_MULTIPLE_JOBS_NOT_SUPPORTED IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED # define IPP_PRINTER_IS_DEACTIVATED IPP_STATUS_ERROR_PRINTER_IS_DEACTIVATED # define IPP_TOO_MANY_JOBS IPP_STATUS_ERROR_TOO_MANY_JOBS # define IPP_TOO_MANY_DOCUMENTS IPP_STATUS_ERROR_TOO_MANY_DOCUMENTS # define IPP_AUTHENTICATION_CANCELED IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED # define IPP_PKI_ERROR IPP_STATUS_ERROR_CUPS_PKI # define IPP_UPGRADE_REQUIRED IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED /* Legacy name for canceled status */ # define IPP_ERROR_JOB_CANCELLED IPP_STATUS_ERROR_JOB_CANCELED # endif /* _CUPS_NO_DEPRECATED */ } ipp_status_t; typedef enum ipp_tag_e /**** Value and group tag values for attributes ****/ { IPP_TAG_CUPS_INVALID = -1, /* Invalid tag name for @link ippTagValue@ */ IPP_TAG_ZERO = 0x00, /* Zero tag - used for separators */ IPP_TAG_OPERATION, /* Operation group */ IPP_TAG_JOB, /* Job group */ IPP_TAG_END, /* End-of-attributes */ IPP_TAG_PRINTER, /* Printer group */ IPP_TAG_UNSUPPORTED_GROUP, /* Unsupported attributes group */ IPP_TAG_SUBSCRIPTION, /* Subscription group */ IPP_TAG_EVENT_NOTIFICATION, /* Event group */ IPP_TAG_RESOURCE, /* Resource group @private@ */ IPP_TAG_DOCUMENT, /* Document group @exclude all@ */ IPP_TAG_UNSUPPORTED_VALUE = 0x10, /* Unsupported value */ IPP_TAG_DEFAULT, /* Default value */ IPP_TAG_UNKNOWN, /* Unknown value */ IPP_TAG_NOVALUE, /* No-value value */ IPP_TAG_NOTSETTABLE = 0x15, /* Not-settable value */ IPP_TAG_DELETEATTR, /* Delete-attribute value */ IPP_TAG_ADMINDEFINE, /* Admin-defined value */ IPP_TAG_INTEGER = 0x21, /* Integer value */ IPP_TAG_BOOLEAN, /* Boolean value */ IPP_TAG_ENUM, /* Enumeration value */ IPP_TAG_STRING = 0x30, /* Octet string value */ IPP_TAG_DATE, /* Date/time value */ IPP_TAG_RESOLUTION, /* Resolution value */ IPP_TAG_RANGE, /* Range value */ IPP_TAG_BEGIN_COLLECTION, /* Beginning of collection value @exclude all@ */ IPP_TAG_TEXTLANG, /* Text-with-language value */ IPP_TAG_NAMELANG, /* Name-with-language value */ IPP_TAG_END_COLLECTION, /* End of collection value @exclude all@ */ IPP_TAG_TEXT = 0x41, /* Text value */ IPP_TAG_NAME, /* Name value */ IPP_TAG_RESERVED_STRING, /* Reserved for future string value @private@ */ IPP_TAG_KEYWORD, /* Keyword value */ IPP_TAG_URI, /* URI value */ IPP_TAG_URISCHEME, /* URI scheme value */ IPP_TAG_CHARSET, /* Character set value */ IPP_TAG_LANGUAGE, /* Language value */ IPP_TAG_MIMETYPE, /* MIME media type value */ IPP_TAG_MEMBERNAME, /* Collection member name value @exclude all@ */ IPP_TAG_EXTENSION = 0x7f, /* Extension point for 32-bit tags @exclude all@ */ IPP_TAG_CUPS_MASK = 0x7fffffff, /* Mask for copied attribute values @private@ */ /* The following expression is used to avoid compiler warnings with +/-0x80000000 */ IPP_TAG_CUPS_CONST = -0x7fffffff-1 /* Bitflag for copied/const attribute values @private@ */ # ifndef _CUPS_NO_DEPRECATED # define IPP_TAG_MASK IPP_TAG_CUPS_MASK # define IPP_TAG_COPY IPP_TAG_CUPS_CONST # endif /* !_CUPS_NO_DEPRECATED */ } ipp_tag_t; typedef unsigned char ipp_uchar_t; /**** Unsigned 8-bit integer/character @exclude all@ ****/ typedef struct _ipp_s ipp_t; /**** IPP request/response data ****/ typedef struct _ipp_attribute_s ipp_attribute_t; /**** IPP attribute ****/ /**** New in CUPS 1.2/macOS 10.5 ****/ typedef ssize_t (*ipp_iocb_t)(void *context, ipp_uchar_t *buffer, size_t bytes); /**** ippReadIO/ippWriteIO callback function @since CUPS 1.2/macOS 10.5@ ****/ /**** New in CUPS 1.6/macOS 10.8 ****/ typedef int (*ipp_copycb_t)(void *context, ipp_t *dst, ipp_attribute_t *attr); /**** ippCopyAttributes callback function @since CUPS 1.6/macOS 10.8 ****/ /* * The following structures are PRIVATE starting with CUPS 1.6/macOS 10.8. * Please use the new accessor functions available in CUPS 1.6 and later, as * these definitions will be moved to a private header file in a future release. * * Define _IPP_PRIVATE_STRUCTURES to 1 to cause the private IPP structures to be * exposed in CUPS 1.6. This happens automatically on macOS when compiling for * a deployment target of 10.7 or earlier. * * Define _IPP_PRIVATE_STRUCTURES to 0 to prevent the private IPP structures * from being exposed. This is useful when migrating existing code to the new * accessors. */ # ifdef _IPP_PRIVATE_STRUCTURES /* Somebody has overridden the value */ # elif defined(_CUPS_SOURCE) || defined(_CUPS_IPP_PRIVATE_H_) /* Building CUPS */ # define _IPP_PRIVATE_STRUCTURES 1 # elif defined(__APPLE__) # if defined(MAC_OS_X_VERSION_10_8) && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_8 /* Building for 10.7 and earlier */ # define _IPP_PRIVATE_STRUCTURES 1 # elif !defined(MAC_OS_X_VERSION_10_8) /* Building for 10.7 and earlier */ # define _IPP_PRIVATE_STRUCTURES 1 # endif /* MAC_OS_X_VERSION_10_8 && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_8 */ # else # define _IPP_PRIVATE_STRUCTURES 0 # endif /* _CUPS_SOURCE || _CUPS_IPP_PRIVATE_H_ */ # if _IPP_PRIVATE_STRUCTURES typedef union _ipp_request_u /**** Request Header ****/ { struct /* Any Header */ { ipp_uchar_t version[2]; /* Protocol version number */ int op_status; /* Operation ID or status code*/ int request_id; /* Request ID */ } any; struct /* Operation Header */ { ipp_uchar_t version[2]; /* Protocol version number */ ipp_op_t operation_id; /* Operation ID */ int request_id; /* Request ID */ } op; struct /* Status Header */ { ipp_uchar_t version[2]; /* Protocol version number */ ipp_status_t status_code; /* Status code */ int request_id; /* Request ID */ } status; /**** New in CUPS 1.1.19 ****/ struct /* Event Header @since CUPS 1.1.19/macOS 10.3@ */ { ipp_uchar_t version[2]; /* Protocol version number */ ipp_status_t status_code; /* Status code */ int request_id; /* Request ID */ } event; } _ipp_request_t; /**** New in CUPS 1.1.19 ****/ typedef union _ipp_value_u /**** Attribute Value ****/ { int integer; /* Integer/enumerated value */ char boolean; /* Boolean value */ ipp_uchar_t date[11]; /* Date/time value */ struct { int xres, /* Horizontal resolution */ yres; /* Vertical resolution */ ipp_res_t units; /* Resolution units */ } resolution; /* Resolution value */ struct { int lower, /* Lower value */ upper; /* Upper value */ } range; /* Range of integers value */ struct { char *language; /* Language code */ char *text; /* String */ } string; /* String with language value */ struct { int length; /* Length of attribute */ void *data; /* Data in attribute */ } unknown; /* Unknown attribute type */ /**** New in CUPS 1.1.19 ****/ ipp_t *collection; /* Collection value @since CUPS 1.1.19/macOS 10.3@ */ } _ipp_value_t; typedef _ipp_value_t ipp_value_t; /**** Convenience typedef that will be removed @private@ ****/ struct _ipp_attribute_s /**** IPP attribute ****/ { ipp_attribute_t *next; /* Next attribute in list */ ipp_tag_t group_tag, /* Job/Printer/Operation group tag */ value_tag; /* What type of value is it? */ char *name; /* Name of attribute */ int num_values; /* Number of values */ _ipp_value_t values[1]; /* Values */ }; struct _ipp_s /**** IPP Request/Response/Notification ****/ { ipp_state_t state; /* State of request */ _ipp_request_t request; /* Request header */ ipp_attribute_t *attrs; /* Attributes */ ipp_attribute_t *last; /* Last attribute in list */ ipp_attribute_t *current; /* Current attribute (for read/write) */ ipp_tag_t curtag; /* Current attribute group tag */ /**** New in CUPS 1.2 ****/ ipp_attribute_t *prev; /* Previous attribute (for read) @since CUPS 1.2/macOS 10.5@ */ /**** New in CUPS 1.4.4 ****/ int use; /* Use count @since CUPS 1.4.4/macOS 10.6.?@ */ /**** New in CUPS 2.0 ****/ int atend, /* At end of list? */ curindex; /* Current attribute index for hierarchical search */ }; # endif /* _IPP_PRIVATE_STRUCTURES */ /* * Prototypes... */ extern ipp_attribute_t *ippAddBoolean(ipp_t *ipp, ipp_tag_t group, const char *name, char value); extern ipp_attribute_t *ippAddBooleans(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, const char *values); extern ipp_attribute_t *ippAddDate(ipp_t *ipp, ipp_tag_t group, const char *name, const ipp_uchar_t *value); extern ipp_attribute_t *ippAddInteger(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, int value); extern ipp_attribute_t *ippAddIntegers(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, int num_values, const int *values); extern ipp_attribute_t *ippAddRange(ipp_t *ipp, ipp_tag_t group, const char *name, int lower, int upper); extern ipp_attribute_t *ippAddRanges(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, const int *lower, const int *upper); extern ipp_attribute_t *ippAddResolution(ipp_t *ipp, ipp_tag_t group, const char *name, ipp_res_t units, int xres, int yres); extern ipp_attribute_t *ippAddResolutions(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, ipp_res_t units, const int *xres, const int *yres); extern ipp_attribute_t *ippAddSeparator(ipp_t *ipp); extern ipp_attribute_t *ippAddString(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, const char *language, const char *value); extern ipp_attribute_t *ippAddStrings(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, int num_values, const char *language, const char * const *values); extern time_t ippDateToTime(const ipp_uchar_t *date); extern void ippDelete(ipp_t *ipp); extern const char *ippErrorString(ipp_status_t error); extern ipp_attribute_t *ippFindAttribute(ipp_t *ipp, const char *name, ipp_tag_t value_tag); extern ipp_attribute_t *ippFindNextAttribute(ipp_t *ipp, const char *name, ipp_tag_t value_tag); extern size_t ippLength(ipp_t *ipp); extern ipp_t *ippNew(void); 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); /**** New in CUPS 1.1.19 ****/ extern ipp_attribute_t *ippAddCollection(ipp_t *ipp, ipp_tag_t group, const char *name, ipp_t *value) _CUPS_API_1_1_19; extern ipp_attribute_t *ippAddCollections(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, const ipp_t **values) _CUPS_API_1_1_19; extern void ippDeleteAttribute(ipp_t *ipp, ipp_attribute_t *attr) _CUPS_API_1_1_19; extern ipp_state_t ippReadFile(int fd, ipp_t *ipp) _CUPS_API_1_1_19; extern ipp_state_t ippWriteFile(int fd, ipp_t *ipp) _CUPS_API_1_1_19; /**** New in CUPS 1.2/macOS 10.5 ****/ extern ipp_attribute_t *ippAddOctetString(ipp_t *ipp, ipp_tag_t group, const char *name, const void *data, int datalen) _CUPS_API_1_2; extern ipp_status_t ippErrorValue(const char *name) _CUPS_API_1_2; extern ipp_t *ippNewRequest(ipp_op_t op) _CUPS_API_1_2; extern const char *ippOpString(ipp_op_t op) _CUPS_API_1_2; extern ipp_op_t ippOpValue(const char *name) _CUPS_API_1_2; extern ipp_state_t ippReadIO(void *src, ipp_iocb_t cb, int blocking, ipp_t *parent, ipp_t *ipp) _CUPS_API_1_2; extern ipp_state_t ippWriteIO(void *dst, ipp_iocb_t cb, int blocking, ipp_t *parent, ipp_t *ipp) _CUPS_API_1_2; /**** New in CUPS 1.4/macOS 10.6 ****/ extern const char *ippTagString(ipp_tag_t tag) _CUPS_API_1_4; extern ipp_tag_t ippTagValue(const char *name) _CUPS_API_1_4; /**** New in CUPS 1.6/macOS 10.8 ****/ extern ipp_attribute_t *ippAddOutOfBand(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name) _CUPS_API_1_6; extern size_t ippAttributeString(ipp_attribute_t *attr, char *buffer, size_t bufsize) _CUPS_API_1_6; extern ipp_attribute_t *ippCopyAttribute(ipp_t *dst, ipp_attribute_t *attr, int quickcopy) _CUPS_API_1_6; extern int ippCopyAttributes(ipp_t *dst, ipp_t *src, int quickcopy, ipp_copycb_t cb, void *context) _CUPS_API_1_6; extern int ippDeleteValues(ipp_t *ipp, ipp_attribute_t **attr, int element, int count) _CUPS_API_1_6; extern const char *ippEnumString(const char *attrname, int enumvalue) _CUPS_API_1_6; extern int ippEnumValue(const char *attrname, const char *enumstring) _CUPS_API_1_6; extern ipp_attribute_t *ippFirstAttribute(ipp_t *ipp) _CUPS_API_1_6; extern int ippGetBoolean(ipp_attribute_t *attr, int element) _CUPS_API_1_6; extern ipp_t *ippGetCollection(ipp_attribute_t *attr, int element) _CUPS_API_1_6; extern int ippGetCount(ipp_attribute_t *attr) _CUPS_API_1_6; extern const ipp_uchar_t *ippGetDate(ipp_attribute_t *attr, int element) _CUPS_API_1_6; extern ipp_tag_t ippGetGroupTag(ipp_attribute_t *attr) _CUPS_API_1_6; extern int ippGetInteger(ipp_attribute_t *attr, int element) _CUPS_API_1_6; extern const char *ippGetName(ipp_attribute_t *attr) _CUPS_API_1_6; extern ipp_op_t ippGetOperation(ipp_t *ipp) _CUPS_API_1_6; extern int ippGetRange(ipp_attribute_t *attr, int element, int *upper) _CUPS_API_1_6; extern int ippGetRequestId(ipp_t *ipp) _CUPS_API_1_6; extern int ippGetResolution(ipp_attribute_t *attr, int element, int *yres, ipp_res_t *units) _CUPS_API_1_6; extern ipp_state_t ippGetState(ipp_t *ipp) _CUPS_API_1_6; extern ipp_status_t ippGetStatusCode(ipp_t *ipp) _CUPS_API_1_6; extern const char *ippGetString(ipp_attribute_t *attr, int element, const char **language) _CUPS_API_1_6; extern ipp_tag_t ippGetValueTag(ipp_attribute_t *attr) _CUPS_API_1_6; extern int ippGetVersion(ipp_t *ipp, int *minor) _CUPS_API_1_6; extern ipp_attribute_t *ippNextAttribute(ipp_t *ipp) _CUPS_API_1_6; extern int ippSetBoolean(ipp_t *ipp, ipp_attribute_t **attr, int element, int boolvalue) _CUPS_API_1_6; extern int ippSetCollection(ipp_t *ipp, ipp_attribute_t **attr, int element, ipp_t *colvalue) _CUPS_API_1_6; extern int ippSetDate(ipp_t *ipp, ipp_attribute_t **attr, int element, const ipp_uchar_t *datevalue) _CUPS_API_1_6; extern int ippSetGroupTag(ipp_t *ipp, ipp_attribute_t **attr, ipp_tag_t group_tag) _CUPS_API_1_6; extern int ippSetInteger(ipp_t *ipp, ipp_attribute_t **attr, int element, int intvalue) _CUPS_API_1_6; extern int ippSetName(ipp_t *ipp, ipp_attribute_t **attr, const char *name) _CUPS_API_1_6; extern int ippSetOperation(ipp_t *ipp, ipp_op_t op) _CUPS_API_1_6; extern int ippSetRange(ipp_t *ipp, ipp_attribute_t **attr, int element, int lowervalue, int uppervalue) _CUPS_API_1_6; extern int ippSetRequestId(ipp_t *ipp, int request_id) _CUPS_API_1_6; extern int ippSetResolution(ipp_t *ipp, ipp_attribute_t **attr, int element, ipp_res_t unitsvalue, int xresvalue, int yresvalue) _CUPS_API_1_6; extern int ippSetState(ipp_t *ipp, ipp_state_t state) _CUPS_API_1_6; extern int ippSetStatusCode(ipp_t *ipp, ipp_status_t status) _CUPS_API_1_6; extern int ippSetString(ipp_t *ipp, ipp_attribute_t **attr, int element, const char *strvalue) _CUPS_API_1_6; extern int ippSetValueTag(ipp_t *ipp, ipp_attribute_t **attr, ipp_tag_t value_tag) _CUPS_API_1_6; extern int ippSetVersion(ipp_t *ipp, int major, int minor) _CUPS_API_1_6; /**** New in CUPS 1.7 ****/ extern ipp_attribute_t *ippAddStringf(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, const char *language, const char *format, ...) _CUPS_API_1_7; extern ipp_attribute_t *ippAddStringfv(ipp_t *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, const char *language, const char *format, va_list ap) _CUPS_API_1_7; extern int ippContainsInteger(ipp_attribute_t *attr, int value) _CUPS_API_1_7; extern int ippContainsString(ipp_attribute_t *attr, const char *value) _CUPS_API_1_7; extern cups_array_t *ippCreateRequestedArray(ipp_t *request) _CUPS_API_1_7; extern void *ippGetOctetString(ipp_attribute_t *attr, int element, int *datalen) _CUPS_API_1_7; extern ipp_t *ippNewResponse(ipp_t *request) _CUPS_API_1_7; extern int ippSetOctetString(ipp_t *ipp, ipp_attribute_t **attr, int element, const void *data, int datalen) _CUPS_API_1_7; extern int ippSetStringf(ipp_t *ipp, ipp_attribute_t **attr, int element, const char *format, ...) _CUPS_API_1_7; extern int ippSetStringfv(ipp_t *ipp, ipp_attribute_t **attr, int element, const char *format, va_list ap) _CUPS_API_1_7; extern int ippValidateAttribute(ipp_attribute_t *attr) _CUPS_API_1_7; extern int ippValidateAttributes(ipp_t *ipp) _CUPS_API_1_7; /**** New in CUPS 2.0 ****/ extern const char *ippStateString(ipp_state_t state) _CUPS_API_2_0; /* * C++ magic... */ # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_IPP_H_ */ cups-2.2.7/cups/langprintf.c000664 000765 000024 00000017370 13255074424 016445 0ustar00msweetstaff000000 000000 /* * Localized printf/puts functions for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 2002-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" /* * '_cupsLangPrintError()' - Print a message followed by a standard error. */ void _cupsLangPrintError(const char *prefix, /* I - Non-localized message prefix */ const char *message)/* I - Message */ { ssize_t bytes; /* Number of bytes formatted */ int last_errno; /* Last error */ char buffer[2048], /* Message buffer */ *bufptr, /* Pointer into buffer */ output[8192]; /* Output buffer */ _cups_globals_t *cg; /* Global data */ /* * Range check... */ if (!message) return; /* * Save the errno value... */ last_errno = errno; /* * Get the message catalog... */ cg = _cupsGlobals(); if (!cg->lang_default) cg->lang_default = cupsLangDefault(); /* * Format the message... */ if (prefix) { snprintf(buffer, sizeof(buffer), "%s:", prefix); bufptr = buffer + strlen(buffer); } else bufptr = buffer; snprintf(bufptr, sizeof(buffer) - (size_t)(bufptr - buffer), /* TRANSLATORS: Message is "subject: error" */ _cupsLangString(cg->lang_default, _("%s: %s")), _cupsLangString(cg->lang_default, message), strerror(last_errno)); strlcat(buffer, "\n", sizeof(buffer)); /* * Convert and write to stderr... */ bytes = cupsUTF8ToCharset(output, (cups_utf8_t *)buffer, sizeof(output), cg->lang_default->encoding); if (bytes > 0) fwrite(output, 1, (size_t)bytes, stderr); } /* * '_cupsLangPrintFilter()' - Print a formatted filter message string to a file. */ int /* O - Number of bytes written */ _cupsLangPrintFilter( FILE *fp, /* I - File to write to */ const char *prefix, /* I - Non-localized message prefix */ const char *message, /* I - Message string to use */ ...) /* I - Additional arguments as needed */ { ssize_t bytes; /* Number of bytes formatted */ char temp[2048], /* Temporary format buffer */ buffer[2048], /* Message buffer */ output[8192]; /* Output buffer */ va_list ap; /* Pointer to additional arguments */ _cups_globals_t *cg; /* Global data */ /* * Range check... */ if (!fp || !message) return (-1); cg = _cupsGlobals(); if (!cg->lang_default) cg->lang_default = cupsLangDefault(); /* * Format the string... */ va_start(ap, message); snprintf(temp, sizeof(temp), "%s: %s\n", prefix, _cupsLangString(cg->lang_default, message)); vsnprintf(buffer, sizeof(buffer), temp, ap); va_end(ap); /* * Transcode to the destination charset... */ bytes = cupsUTF8ToCharset(output, (cups_utf8_t *)buffer, sizeof(output), cg->lang_default->encoding); /* * Write the string and return the number of bytes written... */ if (bytes > 0) return ((int)fwrite(output, 1, (size_t)bytes, fp)); else return ((int)bytes); } /* * '_cupsLangPrintf()' - Print a formatted message string to a file. */ int /* O - Number of bytes written */ _cupsLangPrintf(FILE *fp, /* I - File to write to */ const char *message, /* I - Message string to use */ ...) /* I - Additional arguments as needed */ { ssize_t bytes; /* Number of bytes formatted */ char buffer[2048], /* Message buffer */ output[8192]; /* Output buffer */ va_list ap; /* Pointer to additional arguments */ _cups_globals_t *cg; /* Global data */ /* * Range check... */ if (!fp || !message) return (-1); cg = _cupsGlobals(); if (!cg->lang_default) cg->lang_default = cupsLangDefault(); /* * Format the string... */ va_start(ap, message); vsnprintf(buffer, sizeof(buffer) - 1, _cupsLangString(cg->lang_default, message), ap); va_end(ap); strlcat(buffer, "\n", sizeof(buffer)); /* * Transcode to the destination charset... */ bytes = cupsUTF8ToCharset(output, (cups_utf8_t *)buffer, sizeof(output), cg->lang_default->encoding); /* * Write the string and return the number of bytes written... */ if (bytes > 0) return ((int)fwrite(output, 1, (size_t)bytes, fp)); else return ((int)bytes); } /* * '_cupsLangPuts()' - Print a static message string to a file. */ int /* O - Number of bytes written */ _cupsLangPuts(FILE *fp, /* I - File to write to */ const char *message) /* I - Message string to use */ { ssize_t bytes; /* Number of bytes formatted */ char output[8192]; /* Message buffer */ _cups_globals_t *cg; /* Global data */ /* * Range check... */ if (!fp || !message) return (-1); cg = _cupsGlobals(); if (!cg->lang_default) cg->lang_default = cupsLangDefault(); /* * Transcode to the destination charset... */ bytes = cupsUTF8ToCharset(output, (cups_utf8_t *)_cupsLangString(cg->lang_default, message), sizeof(output) - 4, cg->lang_default->encoding); bytes += cupsUTF8ToCharset(output + bytes, (cups_utf8_t *)"\n", (int)(sizeof(output) - (size_t)bytes), cg->lang_default->encoding); /* * Write the string and return the number of bytes written... */ if (bytes > 0) return ((int)fwrite(output, 1, (size_t)bytes, fp)); else return ((int)bytes); } /* * '_cupsSetLocale()' - Set the current locale and transcode the command-line. */ void _cupsSetLocale(char *argv[]) /* IO - Command-line arguments */ { int i; /* Looping var */ char buffer[8192]; /* Command-line argument buffer */ _cups_globals_t *cg; /* Global data */ #ifdef LC_TIME const char *lc_time; /* Current LC_TIME value */ char new_lc_time[255], /* New LC_TIME value */ *charset; /* Pointer to character set */ #endif /* LC_TIME */ /* * Set the locale so that times, etc. are displayed properly. * * Unfortunately, while we need the localized time value, we *don't* * want to use the localized charset for the time value, so we need * to set LC_TIME to the locale name with .UTF-8 on the end (if * the locale includes a character set specifier...) */ setlocale(LC_ALL, ""); #ifdef LC_TIME if ((lc_time = setlocale(LC_TIME, NULL)) == NULL) lc_time = setlocale(LC_ALL, NULL); if (lc_time) { strlcpy(new_lc_time, lc_time, sizeof(new_lc_time)); if ((charset = strchr(new_lc_time, '.')) == NULL) charset = new_lc_time + strlen(new_lc_time); strlcpy(charset, ".UTF-8", sizeof(new_lc_time) - (size_t)(charset - new_lc_time)); } else strlcpy(new_lc_time, "C", sizeof(new_lc_time)); setlocale(LC_TIME, new_lc_time); #endif /* LC_TIME */ /* * Initialize the default language info... */ cg = _cupsGlobals(); if (!cg->lang_default) cg->lang_default = cupsLangDefault(); /* * Transcode the command-line arguments from the locale charset to * UTF-8... */ if (cg->lang_default->encoding != CUPS_US_ASCII && cg->lang_default->encoding != CUPS_UTF8) { for (i = 1; argv[i]; i ++) { /* * Try converting from the locale charset to UTF-8... */ if (cupsCharsetToUTF8((cups_utf8_t *)buffer, argv[i], sizeof(buffer), cg->lang_default->encoding) < 0) continue; /* * Save the new string if it differs from the original... */ if (strcmp(buffer, argv[i])) argv[i] = strdup(buffer); } } } cups-2.2.7/cups/language-private.h000664 000765 000024 00000004526 13255074424 017540 0ustar00msweetstaff000000 000000 /* * Private localization support for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_LANGUAGE_PRIVATE_H_ # define _CUPS_LANGUAGE_PRIVATE_H_ /* * Include necessary headers... */ # include # include # ifdef __APPLE__ # include # endif /* __APPLE__ */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Macro for localized text... */ # define _(x) x /* * Types... */ typedef struct _cups_message_s /**** Message catalog entry ****/ { char *id, /* Original string */ *str; /* Localized string */ } _cups_message_t; /* * Prototypes... */ # ifdef __APPLE__ extern const char *_cupsAppleLanguage(const char *locale, char *language, size_t langsize); extern const char *_cupsAppleLocale(CFStringRef languageName, char *locale, size_t localesize); # endif /* __APPLE__ */ extern void _cupsCharmapFlush(void); extern const char *_cupsEncodingName(cups_encoding_t encoding); extern void _cupsLangPrintError(const char *prefix, const char *message); extern int _cupsLangPrintFilter(FILE *fp, const char *prefix, const char *message, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern int _cupsLangPrintf(FILE *fp, const char *message, ...) __attribute__ ((__format__ (__printf__, 2, 3))); extern int _cupsLangPuts(FILE *fp, const char *message); extern const char *_cupsLangString(cups_lang_t *lang, const char *message); extern void _cupsMessageFree(cups_array_t *a); extern cups_array_t *_cupsMessageLoad(const char *filename, int unquote); extern const char *_cupsMessageLookup(cups_array_t *a, const char *m); extern cups_array_t *_cupsMessageNew(void *context); extern void _cupsSetLocale(char *argv[]); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_LANGUAGE_PRIVATE_H_ */ cups-2.2.7/cups/language.c000664 000765 000024 00000117203 13255074424 016060 0ustar00msweetstaff000000 000000 /* * I18N/language support for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #ifdef HAVE_LANGINFO_H # include #endif /* HAVE_LANGINFO_H */ #ifdef WIN32 # include #else # include #endif /* WIN32 */ #ifdef HAVE_COREFOUNDATION_H # include #endif /* HAVE_COREFOUNDATION_H */ /* * Local globals... */ static _cups_mutex_t lang_mutex = _CUPS_MUTEX_INITIALIZER; /* Mutex to control access to cache */ static cups_lang_t *lang_cache = NULL; /* Language string cache */ static const char * const lang_encodings[] = { /* Encoding strings */ "us-ascii", "iso-8859-1", "iso-8859-2", "iso-8859-3", "iso-8859-4", "iso-8859-5", "iso-8859-6", "iso-8859-7", "iso-8859-8", "iso-8859-9", "iso-8859-10", "utf-8", "iso-8859-13", "iso-8859-14", "iso-8859-15", "cp874", "cp1250", "cp1251", "cp1252", "cp1253", "cp1254", "cp1255", "cp1256", "cp1257", "cp1258", "koi8-r", "koi8-u", "iso-8859-11", "iso-8859-16", "mac", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "cp932", "cp936", "cp949", "cp950", "cp1361", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "euc-cn", "euc-jp", "euc-kr", "euc-tw", "shift_jisx0213" }; #ifdef __APPLE__ typedef struct { const char * const language; /* Language ID */ const char * const locale; /* Locale ID */ } _apple_language_locale_t; static const _apple_language_locale_t apple_language_locale[] = { /* Language to locale ID LUT */ { "en", "en_US" }, { "nb", "no" }, { "nb_NO", "no" }, { "zh-Hans", "zh_CN" }, { "zh_HANS", "zh_CN" }, { "zh-Hant", "zh_TW" }, { "zh_HANT", "zh_TW" }, { "zh-Hant_CN", "zh_TW" } }; #endif /* __APPLE__ */ /* * Local functions... */ #ifdef __APPLE__ static const char *appleLangDefault(void); # ifdef CUPS_BUNDLEDIR # ifndef CF_RETURNS_RETAINED # if __has_feature(attribute_cf_returns_retained) # define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) # else # define CF_RETURNS_RETAINED # endif /* __has_feature(attribute_cf_returns_retained) */ # endif /* !CF_RETURNED_RETAINED */ static cups_array_t *appleMessageLoad(const char *locale) CF_RETURNS_RETAINED; # endif /* CUPS_BUNDLEDIR */ #endif /* __APPLE__ */ static cups_lang_t *cups_cache_lookup(const char *name, cups_encoding_t encoding); static int cups_message_compare(_cups_message_t *m1, _cups_message_t *m2); static void cups_message_free(_cups_message_t *m); static void cups_message_load(cups_lang_t *lang); static void cups_unquote(char *d, const char *s); #ifdef __APPLE__ /* * '_cupsAppleLanguage()' - Get the Apple language identifier associated with a * locale ID. */ const char * /* O - Language ID */ _cupsAppleLanguage(const char *locale, /* I - Locale ID */ char *language,/* I - Language ID buffer */ size_t langsize) /* I - Size of language ID buffer */ { int i; /* Looping var */ CFStringRef localeid, /* CF locale identifier */ langid; /* CF language identifier */ /* * Copy the locale name and convert, as needed, to the Apple-specific * locale identifier... */ switch (strlen(locale)) { default : /* * Invalid locale... */ strlcpy(language, "en", langsize); break; case 2 : strlcpy(language, locale, langsize); break; case 5 : strlcpy(language, locale, langsize); if (language[2] == '-') { /* * Convert ll-cc to ll_CC... */ language[2] = '_'; language[3] = (char)toupper(language[3] & 255); language[4] = (char)toupper(language[4] & 255); } break; } for (i = 0; i < (int)(sizeof(apple_language_locale) / sizeof(apple_language_locale[0])); i ++) if (!strcmp(locale, apple_language_locale[i].locale)) { strlcpy(language, apple_language_locale[i].language, sizeof(language)); break; } /* * Attempt to map the locale ID to a language ID... */ if ((localeid = CFStringCreateWithCString(kCFAllocatorDefault, language, kCFStringEncodingASCII)) != NULL) { if ((langid = CFLocaleCreateCanonicalLanguageIdentifierFromString( kCFAllocatorDefault, localeid)) != NULL) { CFStringGetCString(langid, language, (CFIndex)langsize, kCFStringEncodingASCII); CFRelease(langid); } CFRelease(localeid); } /* * Return what we got... */ return (language); } /* * '_cupsAppleLocale()' - Get the locale associated with an Apple language ID. */ const char * /* O - Locale */ _cupsAppleLocale(CFStringRef languageName, /* I - Apple language ID */ char *locale, /* I - Buffer for locale */ size_t localesize) /* I - Size of buffer */ { int i; /* Looping var */ CFStringRef localeName; /* Locale as a CF string */ #ifdef DEBUG char temp[1024]; /* Temporary string */ if (!CFStringGetCString(languageName, temp, (CFIndex)sizeof(temp), kCFStringEncodingASCII)) temp[0] = '\0'; DEBUG_printf(("_cupsAppleLocale(languageName=%p(%s), locale=%p, localsize=%d)", (void *)languageName, temp, (void *)locale, (int)localesize)); #endif /* DEBUG */ localeName = CFLocaleCreateCanonicalLocaleIdentifierFromString(kCFAllocatorDefault, languageName); if (localeName) { /* * Copy the locale name and tweak as needed... */ if (!CFStringGetCString(localeName, locale, (CFIndex)localesize, kCFStringEncodingASCII)) *locale = '\0'; DEBUG_printf(("_cupsAppleLocale: locale=\"%s\"", locale)); CFRelease(localeName); /* * Map new language identifiers to locales... */ for (i = 0; i < (int)(sizeof(apple_language_locale) / sizeof(apple_language_locale[0])); i ++) { size_t len = strlen(apple_language_locale[i].language); if (!strcmp(locale, apple_language_locale[i].language) || (!strncmp(locale, apple_language_locale[i].language, len) && (locale[len] == '_' || locale[len] == '-'))) { DEBUG_printf(("_cupsAppleLocale: Updating locale to \"%s\".", apple_language_locale[i].locale)); strlcpy(locale, apple_language_locale[i].locale, localesize); break; } } } else { /* * Just try the Apple language name... */ if (!CFStringGetCString(languageName, locale, (CFIndex)localesize, kCFStringEncodingASCII)) *locale = '\0'; } if (!*locale) { DEBUG_puts("_cupsAppleLocale: Returning NULL."); return (NULL); } /* * Convert language subtag into region subtag... */ if (locale[2] == '-') locale[2] = '_'; else if (locale[3] == '-') locale[3] = '_'; if (!strchr(locale, '.')) strlcat(locale, ".UTF-8", localesize); DEBUG_printf(("_cupsAppleLocale: Returning \"%s\".", locale)); return (locale); } #endif /* __APPLE__ */ /* * '_cupsEncodingName()' - Return the character encoding name string * for the given encoding enumeration. */ const char * /* O - Character encoding */ _cupsEncodingName( cups_encoding_t encoding) /* I - Encoding value */ { if (encoding < CUPS_US_ASCII || encoding >= (cups_encoding_t)(sizeof(lang_encodings) / sizeof(lang_encodings[0]))) { DEBUG_printf(("1_cupsEncodingName(encoding=%d) = out of range (\"%s\")", encoding, lang_encodings[0])); return (lang_encodings[0]); } else { DEBUG_printf(("1_cupsEncodingName(encoding=%d) = \"%s\"", encoding, lang_encodings[encoding])); return (lang_encodings[encoding]); } } /* * 'cupsLangDefault()' - Return the default language. */ cups_lang_t * /* O - Language data */ cupsLangDefault(void) { return (cupsLangGet(NULL)); } /* * 'cupsLangEncoding()' - Return the character encoding (us-ascii, etc.) * for the given language. */ const char * /* O - Character encoding */ cupsLangEncoding(cups_lang_t *lang) /* I - Language data */ { if (lang == NULL) return ((char*)lang_encodings[0]); else return ((char*)lang_encodings[lang->encoding]); } /* * 'cupsLangFlush()' - Flush all language data out of the cache. */ void cupsLangFlush(void) { cups_lang_t *lang, /* Current language */ *next; /* Next language */ /* * Free all languages in the cache... */ _cupsMutexLock(&lang_mutex); for (lang = lang_cache; lang != NULL; lang = next) { /* * Free all messages... */ _cupsMessageFree(lang->strings); /* * Then free the language structure itself... */ next = lang->next; free(lang); } lang_cache = NULL; _cupsMutexUnlock(&lang_mutex); } /* * 'cupsLangFree()' - Free language data. * * This does not actually free anything; use @link cupsLangFlush@ for that. */ void cupsLangFree(cups_lang_t *lang) /* I - Language to free */ { _cupsMutexLock(&lang_mutex); if (lang != NULL && lang->used > 0) lang->used --; _cupsMutexUnlock(&lang_mutex); } /* * 'cupsLangGet()' - Get a language. */ cups_lang_t * /* O - Language data */ cupsLangGet(const char *language) /* I - Language or locale */ { int i; /* Looping var */ #ifndef __APPLE__ char locale[255]; /* Copy of locale name */ #endif /* !__APPLE__ */ char langname[16], /* Requested language name */ country[16], /* Country code */ charset[16], /* Character set */ *csptr, /* Pointer to CODESET string */ *ptr, /* Pointer into language/charset */ real[48]; /* Real language name */ cups_encoding_t encoding; /* Encoding to use */ cups_lang_t *lang; /* Current language... */ static const char * const locale_encodings[] = { /* Locale charset names */ "ASCII", "ISO88591", "ISO88592", "ISO88593", "ISO88594", "ISO88595", "ISO88596", "ISO88597", "ISO88598", "ISO88599", "ISO885910", "UTF8", "ISO885913", "ISO885914", "ISO885915", "CP874", "CP1250", "CP1251", "CP1252", "CP1253", "CP1254", "CP1255", "CP1256", "CP1257", "CP1258", "KOI8R", "KOI8U", "ISO885911", "ISO885916", "MACROMAN", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "CP932", "CP936", "CP949", "CP950", "CP1361", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "EUCCN", "EUCJP", "EUCKR", "EUCTW", "SHIFT_JISX0213" }; DEBUG_printf(("2cupsLangGet(language=\"%s\")", language)); #ifdef __APPLE__ /* * Set the character set to UTF-8... */ strlcpy(charset, "UTF8", sizeof(charset)); /* * Apple's setlocale doesn't give us the user's localization * preference so we have to look it up this way... */ if (!language) { if (!getenv("SOFTWARE") || (language = getenv("LANG")) == NULL) language = appleLangDefault(); DEBUG_printf(("4cupsLangGet: language=\"%s\"", language)); } #else /* * Set the charset to "unknown"... */ charset[0] = '\0'; /* * Use setlocale() to determine the currently set locale, and then * fallback to environment variables to avoid setting the locale, * since setlocale() is not thread-safe! */ if (!language) { /* * First see if the locale has been set; if it is still "C" or * "POSIX", use the environment to get the default... */ # ifdef LC_MESSAGES ptr = setlocale(LC_MESSAGES, NULL); # else ptr = setlocale(LC_ALL, NULL); # endif /* LC_MESSAGES */ DEBUG_printf(("4cupsLangGet: current locale is \"%s\"", ptr)); if (!ptr || !strcmp(ptr, "C") || !strcmp(ptr, "POSIX")) { /* * Get the character set from the LC_CTYPE locale setting... */ if ((ptr = getenv("LC_CTYPE")) == NULL) if ((ptr = getenv("LC_ALL")) == NULL) if ((ptr = getenv("LANG")) == NULL) ptr = "en_US"; if ((csptr = strchr(ptr, '.')) != NULL) { /* * Extract the character set from the environment... */ for (ptr = charset, csptr ++; *csptr; csptr ++) if (ptr < (charset + sizeof(charset) - 1) && _cups_isalnum(*csptr)) *ptr++ = *csptr; *ptr = '\0'; } /* * Get the locale for messages from the LC_MESSAGES locale setting... */ if ((ptr = getenv("LC_MESSAGES")) == NULL) if ((ptr = getenv("LC_ALL")) == NULL) if ((ptr = getenv("LANG")) == NULL) ptr = "en_US"; } if (ptr) { strlcpy(locale, ptr, sizeof(locale)); language = locale; /* * CUPS STR #2575: Map "nb" to "no" for back-compatibility... */ if (!strncmp(locale, "nb", 2)) locale[1] = 'o'; DEBUG_printf(("4cupsLangGet: new language value is \"%s\"", language)); } } #endif /* __APPLE__ */ /* * If "language" is NULL at this point, then chances are we are using * a language that is not installed for the base OS. */ if (!language) { /* * Switch to the POSIX ("C") locale... */ language = "C"; } #ifdef CODESET /* * On systems that support the nl_langinfo(CODESET) call, use * this value as the character set... */ if (!charset[0] && (csptr = nl_langinfo(CODESET)) != NULL) { /* * Copy all of the letters and numbers in the CODESET string... */ for (ptr = charset; *csptr; csptr ++) if (_cups_isalnum(*csptr) && ptr < (charset + sizeof(charset) - 1)) *ptr++ = *csptr; *ptr = '\0'; DEBUG_printf(("4cupsLangGet: charset set to \"%s\" via " "nl_langinfo(CODESET)...", charset)); } #endif /* CODESET */ /* * If we don't have a character set by now, default to UTF-8... */ if (!charset[0]) strlcpy(charset, "UTF8", sizeof(charset)); /* * Parse the language string passed in to a locale string. "C" is the * standard POSIX locale and is copied unchanged. Otherwise the * language string is converted from ll-cc[.charset] (language-country) * to ll_CC[.CHARSET] to match the file naming convention used by all * POSIX-compliant operating systems. Invalid language names are mapped * to the POSIX locale. */ country[0] = '\0'; if (language == NULL || !language[0] || !strcmp(language, "POSIX")) strlcpy(langname, "C", sizeof(langname)); else { /* * Copy the parts of the locale string over safely... */ for (ptr = langname; *language; language ++) if (*language == '_' || *language == '-' || *language == '.') break; else if (ptr < (langname + sizeof(langname) - 1)) *ptr++ = (char)tolower(*language & 255); *ptr = '\0'; if (*language == '_' || *language == '-') { /* * Copy the country code... */ for (language ++, ptr = country; *language; language ++) if (*language == '.') break; else if (ptr < (country + sizeof(country) - 1)) *ptr++ = (char)toupper(*language & 255); *ptr = '\0'; /* * Map Chinese region codes to legacy country codes. */ if (!strcmp(language, "zh") && !strcmp(country, "HANS")) strlcpy(country, "CN", sizeof(country)); if (!strcmp(language, "zh") && !strcmp(country, "HANT")) strlcpy(country, "TW", sizeof(country)); } if (*language == '.' && !charset[0]) { /* * Copy the encoding... */ for (language ++, ptr = charset; *language; language ++) if (_cups_isalnum(*language) && ptr < (charset + sizeof(charset) - 1)) *ptr++ = (char)toupper(*language & 255); *ptr = '\0'; } /* * Force a POSIX locale for an invalid language name... */ if (strlen(langname) != 2 && strlen(langname) != 3) { strlcpy(langname, "C", sizeof(langname)); country[0] = '\0'; charset[0] = '\0'; } } DEBUG_printf(("4cupsLangGet: langname=\"%s\", country=\"%s\", charset=\"%s\"", langname, country, charset)); /* * Figure out the desired encoding... */ encoding = CUPS_AUTO_ENCODING; if (charset[0]) { for (i = 0; i < (int)(sizeof(locale_encodings) / sizeof(locale_encodings[0])); i ++) if (!_cups_strcasecmp(charset, locale_encodings[i])) { encoding = (cups_encoding_t)i; break; } if (encoding == CUPS_AUTO_ENCODING) { /* * Map alternate names for various character sets... */ if (!_cups_strcasecmp(charset, "iso-2022-jp") || !_cups_strcasecmp(charset, "sjis")) encoding = CUPS_WINDOWS_932; else if (!_cups_strcasecmp(charset, "iso-2022-cn")) encoding = CUPS_WINDOWS_936; else if (!_cups_strcasecmp(charset, "iso-2022-kr")) encoding = CUPS_WINDOWS_949; else if (!_cups_strcasecmp(charset, "big5")) encoding = CUPS_WINDOWS_950; } } DEBUG_printf(("4cupsLangGet: encoding=%d(%s)", encoding, encoding == CUPS_AUTO_ENCODING ? "auto" : lang_encodings[encoding])); /* * See if we already have this language/country loaded... */ if (country[0]) snprintf(real, sizeof(real), "%s_%s", langname, country); else strlcpy(real, langname, sizeof(real)); _cupsMutexLock(&lang_mutex); if ((lang = cups_cache_lookup(real, encoding)) != NULL) { _cupsMutexUnlock(&lang_mutex); DEBUG_printf(("3cupsLangGet: Using cached copy of \"%s\"...", real)); return (lang); } /* * See if there is a free language available; if so, use that * record... */ for (lang = lang_cache; lang != NULL; lang = lang->next) if (lang->used == 0) break; if (lang == NULL) { /* * Allocate memory for the language and add it to the cache. */ if ((lang = calloc(sizeof(cups_lang_t), 1)) == NULL) { _cupsMutexUnlock(&lang_mutex); return (NULL); } lang->next = lang_cache; lang_cache = lang; } else { /* * Free all old strings as needed... */ _cupsMessageFree(lang->strings); lang->strings = NULL; } /* * Then assign the language and encoding fields... */ lang->used ++; strlcpy(lang->language, real, sizeof(lang->language)); if (encoding != CUPS_AUTO_ENCODING) lang->encoding = encoding; else lang->encoding = CUPS_UTF8; /* * Return... */ _cupsMutexUnlock(&lang_mutex); return (lang); } /* * '_cupsLangString()' - Get a message string. * * The returned string is UTF-8 encoded; use cupsUTF8ToCharset() to * convert the string to the language encoding. */ const char * /* O - Localized message */ _cupsLangString(cups_lang_t *lang, /* I - Language */ const char *message) /* I - Message */ { const char *s; /* Localized message */ DEBUG_printf(("_cupsLangString(lang=%p, message=\"%s\")", (void *)lang, message)); /* * Range check input... */ if (!lang || !message || !*message) return (message); _cupsMutexLock(&lang_mutex); /* * Load the message catalog if needed... */ if (!lang->strings) cups_message_load(lang); s = _cupsMessageLookup(lang->strings, message); _cupsMutexUnlock(&lang_mutex); return (s); } /* * '_cupsMessageFree()' - Free a messages array. */ void _cupsMessageFree(cups_array_t *a) /* I - Message array */ { #if defined(__APPLE__) && defined(CUPS_BUNDLEDIR) /* * Release the cups.strings dictionary as needed... */ if (cupsArrayUserData(a)) CFRelease((CFDictionaryRef)cupsArrayUserData(a)); #endif /* __APPLE__ && CUPS_BUNDLEDIR */ /* * Free the array... */ cupsArrayDelete(a); } /* * '_cupsMessageLoad()' - Load a .po file into a messages array. */ cups_array_t * /* O - New message array */ _cupsMessageLoad(const char *filename, /* I - Message catalog to load */ int unquote) /* I - Unescape \foo in strings? */ { cups_file_t *fp; /* Message file */ cups_array_t *a; /* Message array */ _cups_message_t *m; /* Current message */ char s[4096], /* String buffer */ *ptr, /* Pointer into buffer */ *temp; /* New string */ size_t length, /* Length of combined strings */ ptrlen; /* Length of string */ DEBUG_printf(("4_cupsMessageLoad(filename=\"%s\")", filename)); /* * Create an array to hold the messages... */ if ((a = _cupsMessageNew(NULL)) == NULL) { DEBUG_puts("5_cupsMessageLoad: Unable to allocate array!"); return (NULL); } /* * Open the message catalog file... */ if ((fp = cupsFileOpen(filename, "r")) == NULL) { DEBUG_printf(("5_cupsMessageLoad: Unable to open file: %s", strerror(errno))); return (a); } /* * Read messages from the catalog file until EOF... * * The format is the GNU gettext .po format, which is fairly simple: * * msgid "some text" * msgstr "localized text" * * The ID and localized text can span multiple lines using the form: * * msgid "" * "some long text" * msgstr "" * "localized text spanning " * "multiple lines" */ m = NULL; while (cupsFileGets(fp, s, sizeof(s)) != NULL) { /* * Skip blank and comment lines... */ if (s[0] == '#' || !s[0]) continue; /* * Strip the trailing quote... */ if ((ptr = strrchr(s, '\"')) == NULL) continue; *ptr = '\0'; /* * Find start of value... */ if ((ptr = strchr(s, '\"')) == NULL) continue; ptr ++; /* * Unquote the text... */ if (unquote) cups_unquote(ptr, ptr); /* * Create or add to a message... */ if (!strncmp(s, "msgid", 5)) { /* * Add previous message as needed... */ if (m) { if (m->str && m->str[0]) { cupsArrayAdd(a, m); } else { /* * Translation is empty, don't add it... (STR #4033) */ free(m->id); if (m->str) free(m->str); free(m); } } /* * Create a new message with the given msgid string... */ if ((m = (_cups_message_t *)calloc(1, sizeof(_cups_message_t))) == NULL) { cupsFileClose(fp); return (a); } if ((m->id = strdup(ptr)) == NULL) { free(m); cupsFileClose(fp); return (a); } } else if (s[0] == '\"' && m) { /* * Append to current string... */ length = strlen(m->str ? m->str : m->id); ptrlen = strlen(ptr); if ((temp = realloc(m->str ? m->str : m->id, length + ptrlen + 1)) == NULL) { if (m->str) free(m->str); free(m->id); free(m); cupsFileClose(fp); return (a); } if (m->str) { /* * Copy the new portion to the end of the msgstr string - safe * to use memcpy because the buffer is allocated to the correct * size... */ m->str = temp; memcpy(m->str + length, ptr, ptrlen + 1); } else { /* * Copy the new portion to the end of the msgid string - safe * to use memcpy because the buffer is allocated to the correct * size... */ m->id = temp; memcpy(m->id + length, ptr, ptrlen + 1); } } else if (!strncmp(s, "msgstr", 6) && m) { /* * Set the string... */ if ((m->str = strdup(ptr)) == NULL) { free(m->id); free(m); cupsFileClose(fp); return (a); } } } /* * Add the last message string to the array as needed... */ if (m) { if (m->str && m->str[0]) { cupsArrayAdd(a, m); } else { /* * Translation is empty, don't add it... (STR #4033) */ free(m->id); if (m->str) free(m->str); free(m); } } /* * Close the message catalog file and return the new array... */ cupsFileClose(fp); DEBUG_printf(("5_cupsMessageLoad: Returning %d messages...", cupsArrayCount(a))); return (a); } /* * '_cupsMessageLookup()' - Lookup a message string. */ const char * /* O - Localized message */ _cupsMessageLookup(cups_array_t *a, /* I - Message array */ const char *m) /* I - Message */ { _cups_message_t key, /* Search key */ *match; /* Matching message */ DEBUG_printf(("_cupsMessageLookup(a=%p, m=\"%s\")", (void *)a, m)); /* * Lookup the message string; if it doesn't exist in the catalog, * then return the message that was passed to us... */ key.id = (char *)m; match = (_cups_message_t *)cupsArrayFind(a, &key); #if defined(__APPLE__) && defined(CUPS_BUNDLEDIR) if (!match && cupsArrayUserData(a)) { /* * Try looking the string up in the cups.strings dictionary... */ CFDictionaryRef dict; /* cups.strings dictionary */ CFStringRef cfm, /* Message as a CF string */ cfstr; /* Localized text as a CF string */ dict = (CFDictionaryRef)cupsArrayUserData(a); cfm = CFStringCreateWithCString(kCFAllocatorDefault, m, kCFStringEncodingUTF8); match = calloc(1, sizeof(_cups_message_t)); match->id = strdup(m); cfstr = cfm ? CFDictionaryGetValue(dict, cfm) : NULL; if (cfstr) { char buffer[1024]; /* Message buffer */ CFStringGetCString(cfstr, buffer, sizeof(buffer), kCFStringEncodingUTF8); match->str = strdup(buffer); DEBUG_printf(("1_cupsMessageLookup: Found \"%s\" as \"%s\"...", m, buffer)); } else { match->str = strdup(m); DEBUG_printf(("1_cupsMessageLookup: Did not find \"%s\"...", m)); } cupsArrayAdd(a, match); if (cfm) CFRelease(cfm); } #endif /* __APPLE__ && CUPS_BUNDLEDIR */ if (match && match->str) return (match->str); else return (m); } /* * '_cupsMessageNew()' - Make a new message catalog array. */ cups_array_t * /* O - Array */ _cupsMessageNew(void *context) /* I - User data */ { return (cupsArrayNew3((cups_array_func_t)cups_message_compare, context, (cups_ahash_func_t)NULL, 0, (cups_acopy_func_t)NULL, (cups_afree_func_t)cups_message_free)); } #ifdef __APPLE__ /* * 'appleLangDefault()' - Get the default locale string. */ static const char * /* O - Locale string */ appleLangDefault(void) { CFBundleRef bundle; /* Main bundle (if any) */ CFArrayRef bundleList; /* List of localizations in bundle */ CFPropertyListRef localizationList = NULL; /* List of localization data */ CFStringRef languageName; /* Current name */ char *lang; /* LANG environment variable */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ DEBUG_puts("2appleLangDefault()"); /* * Only do the lookup and translation the first time. */ if (!cg->language[0]) { if (getenv("SOFTWARE") != NULL && (lang = getenv("LANG")) != NULL) { DEBUG_printf(("3appleLangDefault: Using LANG=%s", lang)); strlcpy(cg->language, lang, sizeof(cg->language)); return (cg->language); } else if ((bundle = CFBundleGetMainBundle()) != NULL && (bundleList = CFBundleCopyBundleLocalizations(bundle)) != NULL) { CFURLRef resources = CFBundleCopyResourcesDirectoryURL(bundle); DEBUG_puts("3appleLangDefault: Getting localizationList from bundle."); if (resources) { CFStringRef cfpath = CFURLCopyPath(resources); char path[1024]; if (cfpath) { /* * See if we have an Info.plist file in the bundle... */ CFStringGetCString(cfpath, path, sizeof(path), kCFStringEncodingUTF8); DEBUG_printf(("3appleLangDefault: Got a resource URL (\"%s\")", path)); strlcat(path, "Contents/Info.plist", sizeof(path)); if (!access(path, R_OK)) localizationList = CFBundleCopyPreferredLocalizationsFromArray(bundleList); else DEBUG_puts("3appleLangDefault: No Info.plist, ignoring resource URL..."); CFRelease(cfpath); } CFRelease(resources); } else DEBUG_puts("3appleLangDefault: No resource URL."); CFRelease(bundleList); } if (!localizationList) { DEBUG_puts("3appleLangDefault: Getting localizationList from preferences."); localizationList = CFPreferencesCopyAppValue(CFSTR("AppleLanguages"), kCFPreferencesCurrentApplication); } if (localizationList) { #ifdef DEBUG if (CFGetTypeID(localizationList) == CFArrayGetTypeID()) DEBUG_printf(("3appleLangDefault: Got localizationList, %d entries.", (int)CFArrayGetCount(localizationList))); else DEBUG_puts("3appleLangDefault: Got localizationList but not an array."); #endif /* DEBUG */ if (CFGetTypeID(localizationList) == CFArrayGetTypeID() && CFArrayGetCount(localizationList) > 0) { languageName = CFArrayGetValueAtIndex(localizationList, 0); if (languageName && CFGetTypeID(languageName) == CFStringGetTypeID()) { if (_cupsAppleLocale(languageName, cg->language, sizeof(cg->language))) DEBUG_printf(("3appleLangDefault: cg->language=\"%s\"", cg->language)); else DEBUG_puts("3appleLangDefault: Unable to get locale."); } } CFRelease(localizationList); } /* * If we didn't find the language, default to en_US... */ if (!cg->language[0]) { DEBUG_puts("3appleLangDefault: Defaulting to en_US."); strlcpy(cg->language, "en_US.UTF-8", sizeof(cg->language)); } } else DEBUG_printf(("3appleLangDefault: Using previous locale \"%s\".", cg->language)); /* * Return the cached locale... */ return (cg->language); } # ifdef CUPS_BUNDLEDIR /* * 'appleMessageLoad()' - Load a message catalog from a localizable bundle. */ static cups_array_t * /* O - Message catalog */ appleMessageLoad(const char *locale) /* I - Locale ID */ { char filename[1024], /* Path to cups.strings file */ applelang[256], /* Apple language ID */ baselang[4]; /* Base language */ CFURLRef url; /* URL to cups.strings file */ CFReadStreamRef stream = NULL; /* File stream */ CFPropertyListRef plist = NULL; /* Localization file */ #ifdef DEBUG const char *cups_strings = getenv("CUPS_STRINGS"); /* Test strings file */ CFErrorRef error = NULL; /* Error when opening file */ #endif /* DEBUG */ DEBUG_printf(("appleMessageLoad(locale=\"%s\")", locale)); /* * Load the cups.strings file... */ #ifdef DEBUG if (cups_strings) { DEBUG_puts("1appleMessageLoad: Using debug CUPS_STRINGS file."); strlcpy(filename, cups_strings, sizeof(filename)); } else #endif /* DEBUG */ snprintf(filename, sizeof(filename), CUPS_BUNDLEDIR "/Resources/%s.lproj/cups.strings", _cupsAppleLanguage(locale, applelang, sizeof(applelang))); if (access(filename, 0)) { /* * * * Try with original locale string... */ DEBUG_printf(("1appleMessageLoad: \"%s\": %s", filename, strerror(errno))); snprintf(filename, sizeof(filename), CUPS_BUNDLEDIR "/Resources/%s.lproj/cups.strings", locale); } if (access(filename, 0)) { /* * * * Try with just the language code... */ DEBUG_printf(("1appleMessageLoad: \"%s\": %s", filename, strerror(errno))); strlcpy(baselang, locale, sizeof(baselang)); if (baselang[3] == '-' || baselang[3] == '_') baselang[3] = '\0'; snprintf(filename, sizeof(filename), CUPS_BUNDLEDIR "/Resources/%s.lproj/cups.strings", baselang); } if (access(filename, 0)) { /* * Try alternate lproj directory names... */ DEBUG_printf(("1appleMessageLoad: \"%s\": %s", filename, strerror(errno))); if (!strncmp(locale, "en", 2)) locale = "English"; else if (!strncmp(locale, "nb", 2)) locale = "no"; else if (!strncmp(locale, "nl", 2)) locale = "Dutch"; else if (!strncmp(locale, "fr", 2)) locale = "French"; else if (!strncmp(locale, "de", 2)) locale = "German"; else if (!strncmp(locale, "it", 2)) locale = "Italian"; else if (!strncmp(locale, "ja", 2)) locale = "Japanese"; else if (!strncmp(locale, "es", 2)) locale = "Spanish"; else if (!strcmp(locale, "zh_HK") || !strncasecmp(locale, "zh-Hant", 7) || !strncasecmp(locale, "zh_Hant", 7)) { /* * * * * Try zh_TW first, then zh... Sigh... */ if (!access(CUPS_BUNDLEDIR "/Resources/zh_TW.lproj/cups.strings", 0)) locale = "zh_TW"; else locale = "zh"; } else if (strstr(locale, "_") != NULL || strstr(locale, "-") != NULL) { /* * Drop country code, just try language... */ strlcpy(baselang, locale, sizeof(baselang)); if (baselang[2] == '-' || baselang[2] == '_') baselang[2] = '\0'; locale = baselang; } snprintf(filename, sizeof(filename), CUPS_BUNDLEDIR "/Resources/%s.lproj/cups.strings", locale); } DEBUG_printf(("1appleMessageLoad: filename=\"%s\"", filename)); url = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (UInt8 *)filename, (CFIndex)strlen(filename), false); if (url) { stream = CFReadStreamCreateWithFile(kCFAllocatorDefault, url); if (stream) { /* * Read the property list containing the localization data. * * NOTE: This code currently generates a clang "potential leak" * warning, but the object is released in _cupsMessageFree(). */ CFReadStreamOpen(stream); #ifdef DEBUG plist = CFPropertyListCreateWithStream(kCFAllocatorDefault, stream, 0, kCFPropertyListImmutable, NULL, &error); if (error) { CFStringRef msg = CFErrorCopyDescription(error); /* Error message */ CFStringGetCString(msg, filename, sizeof(filename), kCFStringEncodingUTF8); DEBUG_printf(("1appleMessageLoad: %s", filename)); CFRelease(msg); CFRelease(error); } #else plist = CFPropertyListCreateWithStream(kCFAllocatorDefault, stream, 0, kCFPropertyListImmutable, NULL, NULL); #endif /* DEBUG */ if (plist && CFGetTypeID(plist) != CFDictionaryGetTypeID()) { CFRelease(plist); plist = NULL; } CFRelease(stream); } CFRelease(url); } DEBUG_printf(("1appleMessageLoad: url=%p, stream=%p, plist=%p", url, stream, plist)); /* * Create and return an empty array to act as a cache for messages, passing the * plist as the user data. */ return (_cupsMessageNew((void *)plist)); } # endif /* CUPS_BUNDLEDIR */ #endif /* __APPLE__ */ /* * 'cups_cache_lookup()' - Lookup a language in the cache... */ static cups_lang_t * /* O - Language data or NULL */ cups_cache_lookup( const char *name, /* I - Name of locale */ cups_encoding_t encoding) /* I - Encoding of locale */ { cups_lang_t *lang; /* Current language */ DEBUG_printf(("7cups_cache_lookup(name=\"%s\", encoding=%d(%s))", name, encoding, encoding == CUPS_AUTO_ENCODING ? "auto" : lang_encodings[encoding])); /* * Loop through the cache and return a match if found... */ for (lang = lang_cache; lang != NULL; lang = lang->next) { DEBUG_printf(("9cups_cache_lookup: lang=%p, language=\"%s\", " "encoding=%d(%s)", (void *)lang, lang->language, lang->encoding, lang_encodings[lang->encoding])); if (!strcmp(lang->language, name) && (encoding == CUPS_AUTO_ENCODING || encoding == lang->encoding)) { lang->used ++; DEBUG_puts("8cups_cache_lookup: returning match!"); return (lang); } } DEBUG_puts("8cups_cache_lookup: returning NULL!"); return (NULL); } /* * 'cups_message_compare()' - Compare two messages. */ static int /* O - Result of comparison */ cups_message_compare( _cups_message_t *m1, /* I - First message */ _cups_message_t *m2) /* I - Second message */ { return (strcmp(m1->id, m2->id)); } /* * 'cups_message_free()' - Free a message. */ static void cups_message_free(_cups_message_t *m) /* I - Message */ { if (m->id) free(m->id); if (m->str) free(m->str); free(m); } /* * 'cups_message_load()' - Load the message catalog for a language. */ static void cups_message_load(cups_lang_t *lang) /* I - Language */ { #if defined(__APPLE__) && defined(CUPS_BUNDLEDIR) lang->strings = appleMessageLoad(lang->language); #else char filename[1024]; /* Filename for language locale file */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ snprintf(filename, sizeof(filename), "%s/%s/cups_%s.po", cg->localedir, lang->language, lang->language); if (strchr(lang->language, '_') && access(filename, 0)) { /* * Country localization not available, look for generic localization... */ snprintf(filename, sizeof(filename), "%s/%.2s/cups_%.2s.po", cg->localedir, lang->language, lang->language); if (access(filename, 0)) { /* * No generic localization, so use POSIX... */ DEBUG_printf(("4cups_message_load: access(\"%s\", 0): %s", filename, strerror(errno))); snprintf(filename, sizeof(filename), "%s/C/cups_C.po", cg->localedir); } } /* * Read the strings from the file... */ lang->strings = _cupsMessageLoad(filename, 1); #endif /* __APPLE__ && CUPS_BUNDLEDIR */ } /* * 'cups_unquote()' - Unquote characters in strings... */ static void cups_unquote(char *d, /* O - Unquoted string */ const char *s) /* I - Original string */ { while (*s) { if (*s == '\\') { s ++; if (isdigit(*s)) { *d = 0; while (isdigit(*s)) { *d = *d * 8 + *s - '0'; s ++; } d ++; } else { if (*s == 'n') *d ++ = '\n'; else if (*s == 'r') *d ++ = '\r'; else if (*s == 't') *d ++ = '\t'; else *d++ = *s; s ++; } } else *d++ = *s++; } *d = '\0'; } cups-2.2.7/cups/language.h000664 000765 000024 00000006601 13255074424 016064 0ustar00msweetstaff000000 000000 /* * Multi-language support for CUPS. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_LANGUAGE_H_ # define _CUPS_LANGUAGE_H_ /* * Include necessary headers... */ # include # include "array.h" # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Types... */ typedef enum cups_encoding_e /**** Language Encodings @exclude all@ ****/ { CUPS_AUTO_ENCODING = -1, /* Auto-detect the encoding @private@ */ CUPS_US_ASCII, /* US ASCII */ CUPS_ISO8859_1, /* ISO-8859-1 */ CUPS_ISO8859_2, /* ISO-8859-2 */ CUPS_ISO8859_3, /* ISO-8859-3 */ CUPS_ISO8859_4, /* ISO-8859-4 */ CUPS_ISO8859_5, /* ISO-8859-5 */ CUPS_ISO8859_6, /* ISO-8859-6 */ CUPS_ISO8859_7, /* ISO-8859-7 */ CUPS_ISO8859_8, /* ISO-8859-8 */ CUPS_ISO8859_9, /* ISO-8859-9 */ CUPS_ISO8859_10, /* ISO-8859-10 */ CUPS_UTF8, /* UTF-8 */ CUPS_ISO8859_13, /* ISO-8859-13 */ CUPS_ISO8859_14, /* ISO-8859-14 */ CUPS_ISO8859_15, /* ISO-8859-15 */ CUPS_WINDOWS_874, /* CP-874 */ CUPS_WINDOWS_1250, /* CP-1250 */ CUPS_WINDOWS_1251, /* CP-1251 */ CUPS_WINDOWS_1252, /* CP-1252 */ CUPS_WINDOWS_1253, /* CP-1253 */ CUPS_WINDOWS_1254, /* CP-1254 */ CUPS_WINDOWS_1255, /* CP-1255 */ CUPS_WINDOWS_1256, /* CP-1256 */ CUPS_WINDOWS_1257, /* CP-1257 */ CUPS_WINDOWS_1258, /* CP-1258 */ CUPS_KOI8_R, /* KOI-8-R */ CUPS_KOI8_U, /* KOI-8-U */ CUPS_ISO8859_11, /* ISO-8859-11 */ CUPS_ISO8859_16, /* ISO-8859-16 */ CUPS_MAC_ROMAN, /* MacRoman */ CUPS_ENCODING_SBCS_END = 63, /* End of single-byte encodings @private@ */ CUPS_WINDOWS_932, /* Japanese JIS X0208-1990 */ CUPS_WINDOWS_936, /* Simplified Chinese GB 2312-80 */ CUPS_WINDOWS_949, /* Korean KS C5601-1992 */ CUPS_WINDOWS_950, /* Traditional Chinese Big Five */ CUPS_WINDOWS_1361, /* Korean Johab */ CUPS_ENCODING_DBCS_END = 127, /* End of double-byte encodings @private@ */ CUPS_EUC_CN, /* EUC Simplified Chinese */ CUPS_EUC_JP, /* EUC Japanese */ CUPS_EUC_KR, /* EUC Korean */ CUPS_EUC_TW, /* EUC Traditional Chinese */ CUPS_JIS_X0213, /* JIS X0213 aka Shift JIS */ CUPS_ENCODING_VBCS_END = 191 /* End of variable-length encodings @private@ */ } cups_encoding_t; typedef struct cups_lang_s /**** Language Cache Structure ****/ { struct cups_lang_s *next; /* Next language in cache */ int used; /* Number of times this entry has been used. */ cups_encoding_t encoding; /* Text encoding */ char language[16]; /* Language/locale name */ cups_array_t *strings; /* Message strings @private@ */ } cups_lang_t; /* * Prototypes... */ extern cups_lang_t *cupsLangDefault(void); extern const char *cupsLangEncoding(cups_lang_t *lang); extern void cupsLangFlush(void); extern void cupsLangFree(cups_lang_t *lang); extern cups_lang_t *cupsLangGet(const char *language); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_LANGUAGE_H_ */ cups-2.2.7/cups/libcups2.def000664 000765 000024 00000020553 13255074424 016335 0ustar00msweetstaff000000 000000 LIBRARY libcups2 VERSION 2.12 EXPORTS _cupsArrayAddStrings _cupsArrayNewStrings _cupsBufferGet _cupsBufferRelease _cupsCharmapFlush _cupsCondBroadcast _cupsCondInit _cupsCondWait _cupsConnect _cupsConvertOptions _cupsCreateDest _cupsEncodingName _cupsGet1284Values _cupsGetDestResource _cupsGetDests _cupsGetPassword _cupsGlobalLock _cupsGlobalUnlock _cupsGlobals _cupsLangPrintError _cupsLangPrintf _cupsLangPuts _cupsLangString _cupsMD5Append _cupsMD5Finish _cupsMD5Init _cupsMessageFree _cupsMessageLoad _cupsMessageLookup _cupsMessageNew _cupsMutexInit _cupsMutexLock _cupsMutexUnlock _cupsNextDelay _cupsRWInit _cupsRWLockRead _cupsRWLockWrite _cupsRWUnlock _cupsSNMPClose _cupsSNMPCopyOID _cupsSNMPDefaultCommunity _cupsSNMPIsOID _cupsSNMPIsOIDPrefixed _cupsSNMPOIDToString _cupsSNMPOpen _cupsSNMPRead _cupsSNMPSetDebug _cupsSNMPStringToOID _cupsSNMPWalk _cupsSNMPWrite _cupsSetDefaults _cupsSetError _cupsSetHTTPError _cupsSetLocale _cupsStrAlloc _cupsStrDate _cupsStrFlush _cupsStrFormatd _cupsStrFree _cupsStrRetain _cupsStrScand _cupsStrStatistics _cupsThreadCancel _cupsThreadCreate _cupsThreadWait _cupsUserDefault _cups_safe_vsnprintf _cups_strcasecmp _cups_strcpy _cups_strcpy _cups_strlcat _cups_strlcpy _cups_strncasecmp _httpAddrSetPort _httpCreateCredentials _httpDecodeURI _httpDisconnect _httpEncodeURI _httpFreeCredentials _httpResolveURI _httpStatus _httpTLSInitialize _httpTLSPending _httpTLSRead _httpTLSSetOptions _httpTLSStart _httpTLSStop _httpTLSWrite _httpUpdate _httpWait _ippCheckOptions _ippFindOption _ppdCacheCreateWithFile _ppdCacheCreateWithPPD _ppdCacheDestroy _ppdCacheGetBin _ppdCacheGetFinishingOptions _ppdCacheGetFinishingValues _ppdCacheGetInputSlot _ppdCacheGetMediaType _ppdCacheGetOutputBin _ppdCacheGetPageSize _ppdCacheGetSize _ppdCacheGetSource _ppdCacheGetType _ppdCacheWriteFile _ppdCreateFromIPP _ppdFreeLanguages _ppdGetEncoding _ppdGetLanguages _ppdGlobals _ppdHashName _ppdLocalizedAttr _ppdNormalizeMakeAndModel _ppdOpen _ppdOpenFile _ppdParseOptions _pwgInputSlotForSource _pwgMediaNearSize _pwgMediaTable _pwgMediaTypeForType _pwgPageSizeForMedia cupsAddDest cupsAddOption cupsAdminCreateWindowsPPD cupsAdminExportSamba cupsAdminGetServerSettings cupsAdminSetServerSettings cupsArrayAdd cupsArrayClear cupsArrayCount cupsArrayCurrent cupsArrayDelete cupsArrayDup cupsArrayFind cupsArrayFirst cupsArrayGetIndex cupsArrayGetInsert cupsArrayIndex cupsArrayInsert cupsArrayLast cupsArrayNew cupsArrayNew2 cupsArrayNew3 cupsArrayNext cupsArrayPrev cupsArrayRemove cupsArrayRestore cupsArraySave cupsArrayUserData cupsCancelDestJob cupsCancelJob cupsCancelJob2 cupsCharsetToUTF8 cupsCheckDestSupported cupsCloseDestJob cupsConnectDest cupsCopyDest cupsCopyDestConflicts cupsCopyDestInfo cupsCreateDestJob cupsCreateJob cupsDirClose cupsDirOpen cupsDirRead cupsDirRewind cupsDoAuthentication cupsDoFileRequest cupsDoIORequest cupsDoRequest cupsEncodeOptions cupsEncodeOptions2 cupsEncryption cupsEnumDests cupsFileClose cupsFileCompression cupsFileEOF cupsFileFind cupsFileFlush cupsFileGetChar cupsFileGetConf cupsFileGetLine cupsFileGets cupsFileLock cupsFileNumber cupsFileOpen cupsFileOpenFd cupsFilePeekChar cupsFilePrintf cupsFilePutChar cupsFilePutConf cupsFilePuts cupsFileRead cupsFileRewind cupsFileSeek cupsFileStderr cupsFileStdin cupsFileStdout cupsFileTell cupsFileUnlock cupsFileWrite cupsFindDestDefault cupsFindDestReady cupsFindDestSupported cupsFinishDestDocument cupsFinishDocument cupsFreeDestInfo cupsFreeDests cupsFreeJobs cupsFreeOptions cupsGetClasses cupsGetConflicts cupsGetDefault cupsGetDefault2 cupsGetDest cupsGetDestMediaByIndex cupsGetDestMediaByName cupsGetDestMediaBySize cupsGetDestMediaCount cupsGetDestMediaDefault cupsGetDestWithURI cupsGetDests cupsGetDests2 cupsGetDevices cupsGetFd cupsGetFile cupsGetJobs cupsGetJobs2 cupsGetNamedDest cupsGetOption cupsGetPPD cupsGetPPD2 cupsGetPPD3 cupsGetPassword cupsGetPassword2 cupsGetPrinters cupsGetResponse cupsGetServerPPD cupsHashData cupsLangDefault cupsLangEncoding cupsLangFlush cupsLangFree cupsLangGet cupsLastError cupsLastErrorString cupsLocalizeDestMedia cupsLocalizeDestOption cupsLocalizeDestValue cupsMakeServerCredentials cupsMarkOptions cupsNotifySubject cupsNotifyText cupsParseOptions cupsPrintFile cupsPrintFile2 cupsPrintFiles cupsPrintFiles2 cupsPutFd cupsPutFile cupsReadResponseData cupsRemoveDest cupsRemoveOption cupsResolveConflicts cupsSendRequest cupsServer cupsSetClientCertCB cupsSetCredentials cupsSetDefaultDest cupsSetDests cupsSetDests2 cupsSetEncryption cupsSetPasswordCB cupsSetPasswordCB2 cupsSetServer cupsSetServerCertCB cupsSetServerCredentials cupsSetUser cupsSetUserAgent cupsStartDestDocument cupsStartDocument cupsTempFd cupsTempFile cupsTempFile2 cupsUTF32ToUTF8 cupsUTF8ToCharset cupsUTF8ToUTF32 cupsUser cupsUserAgent cupsWriteRequestData httpAcceptConnection httpAddCredential httpAddrAny httpAddrClose httpAddrConnect httpAddrConnect2 httpAddrCopyList httpAddrEqual httpAddrFamily httpAddrFreeList httpAddrGetList httpAddrLength httpAddrListen httpAddrLocalhost httpAddrLookup httpAddrPort httpAddrString httpAssembleURI httpAssembleURIf httpAssembleUUID httpBlocking httpCheck httpClearCookie httpClearFields httpClose httpCompareCredentials httpConnect httpConnect2 httpConnectEncrypt httpCopyCredentials httpCredentialsAreValidForName httpCredentialsGetExpiration httpCredentialsGetTrust httpCredentialsString httpDecode64 httpDecode64_2 httpDelete httpEncode64 httpEncode64_2 httpEncryption httpError httpFieldValue httpFlush httpFlushWrite httpFreeCredentials httpGet httpGetActivity httpGetAddress httpGetAuthString httpGetBlocking httpGetContentEncoding httpGetCookie httpGetDateString httpGetDateString2 httpGetDateTime httpGetEncryption httpGetExpect httpGetFd httpGetField httpGetHostByName httpGetHostname httpGetKeepAlive httpGetLength httpGetLength2 httpGetPending httpGetReady httpGetRemaining httpGetState httpGetStatus httpGetSubField httpGetSubField2 httpGetVersion httpGets httpHead httpInitialize httpIsChunked httpIsEncrypted httpLoadCredentials httpMD5 httpMD5Final httpMD5String httpOptions httpPeek httpPost httpPrintf httpPut httpRead httpRead2 httpReadRequest httpReconnect httpReconnect2 httpResolveHostname httpSaveCredentials httpSeparate httpSeparate2 httpSeparateURI httpSetAuthString httpSetCookie httpSetCredentials httpSetDefaultField httpSetExpect httpSetField httpSetKeepAlive httpSetLength httpSetTimeout httpShutdown httpStateString httpStatus httpTrace httpURIStatusString httpUpdate httpWait httpWrite httpWrite2 httpWriteResponse ippAddBoolean ippAddBooleans ippAddCollection ippAddCollections ippAddDate ippAddInteger ippAddIntegers ippAddOctetString ippAddOutOfBand ippAddRange ippAddRanges ippAddResolution ippAddResolutions ippAddSeparator ippAddString ippAddStringf ippAddStringfv ippAddStrings ippAttributeString ippContainsInteger ippContainsString ippCopyAttribute ippCopyAttributes ippCreateRequestedArray ippDateToTime ippDelete ippDeleteAttribute ippDeleteValues ippEnumString ippEnumValue ippErrorString ippErrorValue ippFindAttribute ippFindNextAttribute ippFirstAttribute ippGetBoolean ippGetCollection ippGetCount ippGetDate ippGetGroupTag ippGetInteger ippGetName ippGetOctetString ippGetOperation ippGetRange ippGetRequestId ippGetResolution ippGetState ippGetStatusCode ippGetString ippGetValueTag ippGetVersion ippLength ippNew ippNewRequest ippNewResponse ippNextAttribute ippOpString ippOpValue ippPort ippRead ippReadFile ippReadIO ippSetBoolean ippSetCollection ippSetDate ippSetGroupTag ippSetInteger ippSetName ippSetOctetString ippSetOperation ippSetPort ippSetRange ippSetRequestId ippSetResolution ippSetState ippSetStatusCode ippSetString ippSetStringf ippSetStringfv ippSetValueTag ippSetVersion ippStateString ippTagString ippTagValue ippTimeToDate ippValidateAttribute ippValidateAttributes ippWrite ippWriteFile ippWriteIO ppdClose ppdCollect ppdCollect2 ppdConflicts ppdEmit ppdEmitAfterOrder ppdEmitFd ppdEmitJCL ppdEmitJCLEnd ppdEmitString ppdErrorString ppdFindAttr ppdFindChoice ppdFindCustomOption ppdFindCustomParam ppdFindMarkedChoice ppdFindNextAttr ppdFindOption ppdFirstCustomParam ppdFirstOption ppdInstallableConflict ppdIsMarked ppdLastError ppdLocalize ppdLocalizeAttr ppdLocalizeIPPReason ppdLocalizeMarkerName ppdMarkDefaults ppdMarkOption ppdNextCustomParam ppdNextOption ppdOpen ppdOpen2 ppdOpenFd ppdOpenFile ppdPageLength ppdPageSize ppdPageSizeLimits ppdPageWidth ppdSetConformance pwgFormatSizeName pwgInitSize pwgMediaForLegacy pwgMediaForPPD pwgMediaForPWG pwgMediaForSize cups-2.2.7/cups/libcups2.rc000664 000765 000024 00000003642 13255074424 016203 0ustar00msweetstaff000000 000000 // Microsoft Visual C++ generated resource script. // #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" #include "WinVersRes.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION MASTER_PROD_VERS PRODUCTVERSION MASTER_PROD_VERS FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x4L FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "CompanyName", MASTER_COMPANY_NAME VALUE "FileDescription", "CUPS Library" VALUE "FileVersion", MASTER_PROD_VERS_STR VALUE "InternalName", "libcups2.dll" VALUE "LegalCopyright", MASTER_LEGAL_COPYRIGHT VALUE "OriginalFilename", "libcups2.dll" VALUE "ProductName", MASTER_PROD_NAME VALUE "ProductVersion", MASTER_PROD_VERS_STR END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED cups-2.2.7/cups/Makefile000664 000765 000024 00000032743 13255074424 015576 0ustar00msweetstaff000000 000000 # # Library Makefile for CUPS. # # Copyright © 2007-2018 by Apple Inc. # Copyright © 1997-2006 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # # This file is subject to the Apple OS-Developed Software exception. # include ../Makedefs # # Options to build libcups without the use of deprecated APIs... # OPTIONS = -D_CUPS_NO_DEPRECATED=1 -D_PPD_DEPRECATED="" # # Object files... # LIBOBJS = \ adminutil.o \ array.o \ auth.o \ backchannel.o \ backend.o \ debug.o \ dest.o \ dest-job.o \ dest-localization.o \ dest-options.o \ dir.o \ encode.o \ file.o \ getdevices.o \ getifaddrs.o \ getputfile.o \ globals.o \ hash.o \ http.o \ http-addr.o \ http-addrlist.o \ http-support.o \ ipp.o \ ipp-support.o \ langprintf.o \ language.o \ md5.o \ md5passwd.o \ notify.o \ options.o \ ppd.o \ ppd-attr.o \ ppd-cache.o \ ppd-conflicts.o \ ppd-custom.o \ ppd-emit.o \ ppd-localize.o \ ppd-mark.o \ ppd-page.o \ ppd-util.o \ pwg-media.o \ request.o \ sidechannel.o \ snmp.o \ snprintf.o \ string.o \ tempfile.o \ thread.o \ tls.o \ transcode.o \ usersys.o \ util.o TESTOBJS = \ testadmin.o \ testarray.o \ testcache.o \ testconflicts.o \ testcreds.o \ testcups.o \ testdest.o \ testfile.o \ testgetdests.o \ testhttp.o \ testi18n.o \ testipp.o \ testoptions.o \ testlang.o \ testppd.o \ testpwg.o \ testsnmp.o \ tlscheck.o OBJS = \ $(LIBOBJS) \ $(TESTOBJS) # # Header files to install... # HEADERS = \ adminutil.h \ array.h \ backend.h \ cups.h \ dir.h \ file.h \ http.h \ ipp.h \ language.h \ ppd.h \ pwg.h \ raster.h \ sidechannel.h \ transcode.h \ versioning.h HEADERSPRIV = \ array-private.h \ cups-private.h \ debug-private.h \ file-private.h \ http-private.h \ ipp-private.h \ language-private.h \ md5-private.h \ ppd-private.h \ pwg-private.h \ raster-private.h \ snmp-private.h \ string-private.h \ thread-private.h # # Targets in this directory... # LIBTARGETS = \ $(LIBCUPSSTATIC) \ $(LIBCUPS) UNITTARGETS = \ testadmin \ testarray \ testcache \ testconflicts \ testcreds \ testcups \ testdest \ testfile \ testgetdests \ testhttp \ testi18n \ testipp \ testlang \ testoptions \ testppd \ testpwg \ testsnmp \ tlscheck TARGETS = \ $(LIBTARGETS) # # Make all targets... # all: $(TARGETS) # # Make library targets... # libs: $(LIBTARGETS) # # Make unit tests... # unittests: $(UNITTARGETS) # # Remove object and target files... # clean: $(RM) $(OBJS) $(TARGETS) $(UNITTARGETS) $(RM) libcups.so libcups.dylib # # Update dependencies (without system header dependencies...) # depend: $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies # # Run oclint to check code coverage... # oclint: oclint -o=oclint.html -html $(LIBOBJS:.o=.c) -- $(ALL_CFLAGS) # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: # # Install programs... # install-exec: # # Install headers... # install-headers: echo Installing header files into $(INCLUDEDIR)/cups... $(INSTALL_DIR) -m 755 $(INCLUDEDIR)/cups for file in $(HEADERS); do \ $(INSTALL_DATA) $$file $(INCLUDEDIR)/cups; \ done if test "x$(privateinclude)" != x; then \ echo Installing private header files into $(PRIVATEINCLUDE)...; \ $(INSTALL_DIR) -m 755 $(PRIVATEINCLUDE); \ for file in $(HEADERSPRIV); do \ $(INSTALL_DATA) $$file $(PRIVATEINCLUDE)/$$file; \ done; \ fi # # Install libraries... # install-libs: $(INSTALLSTATIC) echo Installing libraries in $(LIBDIR)... $(INSTALL_DIR) -m 755 $(LIBDIR) $(INSTALL_LIB) $(LIBCUPS) $(LIBDIR) if test $(LIBCUPS) = "libcups.so.2"; then \ $(RM) $(LIBDIR)/`basename $(LIBCUPS) .2`; \ $(LN) $(LIBCUPS) $(LIBDIR)/`basename $(LIBCUPS) .2`; \ fi if test $(LIBCUPS) = "libcups.2.dylib"; then \ $(RM) $(LIBDIR)/libcups.dylib; \ $(LN) $(LIBCUPS) $(LIBDIR)/libcups.dylib; \ fi if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ cp $(LIBCUPS) $(SYMROOT); \ dsymutil $(SYMROOT)/$(LIBCUPS); \ fi installstatic: $(INSTALL_DIR) -m 755 $(LIBDIR) $(INSTALL_LIB) -m 755 $(LIBCUPSSTATIC) $(LIBDIR) $(RANLIB) $(LIBDIR)/$(LIBCUPSSTATIC) $(CHMOD) 555 $(LIBDIR)/$(LIBCUPSSTATIC) # # Uninstall object and target files... # uninstall: $(RM) $(LIBDIR)/libcups.2.dylib $(RM) $(LIBDIR)/$(LIBCUPSSTATIC) $(RM) $(LIBDIR)/libcups.dylib $(RM) $(LIBDIR)/libcups.so $(RM) $(LIBDIR)/libcups.so.2 -$(RMDIR) $(LIBDIR) for file in $(HEADERS); do \ $(RM) $(INCLUDEDIR)/cups/$$file; \ done -$(RMDIR) $(INCLUDEDIR)/cups # # libcups.so.2 # libcups.so.2: $(LIBOBJS) echo Linking $@... $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(LIBGSSAPI) \ $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) $(RM) `basename $@ .2` $(LN) $@ `basename $@ .2` # # libcups.2.dylib # libcups.2.dylib: $(LIBOBJS) $(LIBCUPSORDER) echo Creating export list for $@... nm -gm $(LIBOBJS) 2>/dev/null | grep "__text" | grep -v weak | \ awk '{print $$NF}' | \ grep -v -E -e '^(_cupsConnect|_cupsCharset|_cupsEncodingName|_cupsSetDefaults|_cupsSetHTTPError|_cupsUserDefault)$$' | \ sort >t.exp echo Linking $@... $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \ -install_name $(libdir)/$@ \ -current_version 2.13.0 \ -compatibility_version 2.0.0 \ -exported_symbols_list t.exp \ $(LIBOBJS) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \ $(COMMONLIBS) $(LIBZ) $(RM) libcups.dylib t.exp $(LN) $@ libcups.dylib # # libcups.la # libcups.la: $(LIBOBJS) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) \ -rpath $(LIBDIR) -version-info 2:13 $(LIBGSSAPI) $(SSLLIBS) \ $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # libcups.a # libcups.a: $(LIBOBJS) echo Archiving $@... $(RM) $@ $(AR) $(ARFLAGS) $@ $(LIBOBJS) $(RANLIB) $@ # # libcups2.def (Windows DLL exports file...) # libcups2.def: $(LIBOBJS) Makefile echo Generating $@... echo "LIBRARY libcups2" >libcups2.def echo "VERSION 2.13" >>libcups2.def echo "EXPORTS" >>libcups2.def (nm $(LIBOBJS) 2>/dev/null | grep "T _" | awk '{print $$3}'; \ echo __cups_strcpy; echo __cups_strlcat; echo __cups_strlcpy) | \ grep -v -E \ -e 'cups_debug|Apple|BackChannel|Backend|FileCheck|Filter|GSSService|SetNegotiate|SideChannel' \ -e 'Block$$' | \ sed -e '1,$$s/^_//' | sort >>libcups2.def # # testadmin (dependency on static CUPS library is intentional) # testadmin: testadmin.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ testadmin.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # testarray (dependency on static CUPS library is intentional) # testarray: testarray.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testarray.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) echo Running array API tests... ./testarray # # testcache (dependency on static CUPS library is intentional) # testcache: testcache.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ testcache.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # testconflicts (dependency on static CUPS library is intentional) # testconflicts: testconflicts.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ testconflicts.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # testcreds (dependency on static CUPS library is intentional) # testcreds: testcreds.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testcreds.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # testcups (dependency on static CUPS library is intentional) # testcups: testcups.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ testcups.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # testdest (dependency on static CUPS library is intentional) # testdest: testdest.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ testdest.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # testfile (dependency on static CUPS library is intentional) # testfile: testfile.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testfile.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) echo Running file API tests... ./testfile # # testgetdests (dependency on static CUPS library is intentional) # testgetdests: testgetdests.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ testgetdests.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # testhttp (dependency on static CUPS library is intentional) # testhttp: testhttp.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testhttp.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) echo Running HTTP API tests... ./testhttp # # testipp (dependency on static CUPS library is intentional) # testipp: testipp.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testipp.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) echo Running IPP API tests... ./testipp # # testi18n (dependency on static CUPS library is intentional) # testi18n: testi18n.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testi18n.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) echo Running internationalization API tests... ./testi18n # # testlang (dependency on static CUPS library is intentional) # testlang: testlang.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testlang.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) echo Creating locale directory structure... $(RM) -r locale $(MKDIR) locale/en echo 'msgid "No"' > locale/en/cups_en.po echo 'msgstr "No"' >> locale/en/cups_en.po echo 'msgid "Yes"' >> locale/en/cups_en.po echo 'msgstr "Yes"' >> locale/en/cups_en.po for po in ../locale/cups_*.po; do \ lang=`basename $$po .po | sed -e '1,$$s/^cups_//'`; \ $(MKDIR) locale/$$lang; \ $(LN) ../../$$po locale/$$lang; \ done echo Running language API tests... LOCALEDIR=locale ./testlang # # testoptions (dependency on static CUPS library is intentional) # testoptions: testoptions.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testoptions.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) echo Running option API tests... ./testoptions # # testppd (dependency on static CUPS library is intentional) # testppd: testppd.o $(LIBCUPSSTATIC) test.ppd test2.ppd echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testppd.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) echo Running PPD API tests... ./testppd # # testpwg (dependency on static CUPS library is intentional) # testpwg: testpwg.o $(LIBCUPSSTATIC) test.ppd echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testpwg.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) echo Running PWG API tests... ./testpwg test.ppd # # testsnmp (dependency on static CUPS library is intentional) # testsnmp: testsnmp.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ testsnmp.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # tlscheck (dependency on static CUPS library is intentional) # tlscheck: tlscheck.o $(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ tlscheck.o $(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # Automatic API help files... # apihelp: echo Generating CUPS API help files... $(RM) cupspm.xml mxmldoc --section "Programming" --body cupspm.md \ cupspm.xml \ auth.c cups.h dest*.c encode.c http.h http*.c ipp.h ipp*.c \ options.c tls-darwin.c usersys.c util.c \ --coverimage cupspm.png \ --epub ../doc/help/cupspm.epub mxmldoc --section "Programming" --body cupspm.md \ cupspm.xml > ../doc/help/cupspm.html $(RM) cupspm.xml mxmldoc --section "Programming" --title "Administration APIs" \ --css ../doc/cups-printable.css \ --header api-admin.header --intro api-admin.shtml \ api-admin.xml \ adminutil.c adminutil.h getdevices.c >../doc/help/api-admin.html $(RM) api-admin.xml mxmldoc --section "Programming" --title "PPD API (DEPRECATED)" \ --css ../doc/cups-printable.css \ --header api-ppd.header --intro api-ppd.shtml \ api-ppd.xml ppd.h ppd-*.c >../doc/help/api-ppd.html $(RM) api-ppd.xml mxmldoc --section "Programming" \ --title "Filter and Backend Programming" \ --css ../doc/cups-printable.css \ --header api-filter.header --intro api-filter.shtml \ api-filter.xml \ backchannel.c backend.h backend.c sidechannel.c sidechannel.h \ >../doc/help/api-filter.html $(RM) api-filter.xml # # Lines of code computation... # sloc: echo "libcups: \c" sloccount $(LIBOBJS:.o=.c) 2>/dev/null | grep "Total Physical" | awk '{print $$9}' # # Dependencies... # include Dependencies tls.o: tls-darwin.c tls-gnutls.c tls-sspi.c cups-2.2.7/cups/md5-private.h000664 000765 000024 00000005040 13255074424 016432 0ustar00msweetstaff000000 000000 /* * Private MD5 definitions for CUPS. * * Copyright 2007-2010 by Apple Inc. * Copyright 2005 by Easy Software Products * * Copyright (C) 1999 Aladdin Enterprises. All rights reserved. * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. * * L. Peter Deutsch * ghost@aladdin.com */ /* Independent implementation of MD5 (RFC 1321). This code implements the MD5 Algorithm defined in RFC 1321. It is derived directly from the text of the RFC and not from the reference implementation. The original and principal author of md5.h is L. Peter Deutsch . Other authors are noted in the change history that follows (in reverse chronological order): 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); added conditionalization for C++ compilation from Martin Purschke . 1999-05-03 lpd Original version. */ #ifndef _CUPS_MD5_PRIVATE_H_ # define _CUPS_MD5_PRIVATE_H_ /* Define the state of the MD5 Algorithm. */ typedef struct _cups_md5_state_s { unsigned int count[2]; /* message length in bits, lsw first */ unsigned int abcd[4]; /* digest buffer */ unsigned char buf[64]; /* accumulate block */ } _cups_md5_state_t; # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* Initialize the algorithm. */ void _cupsMD5Init(_cups_md5_state_t *pms); /* Append a string to the message. */ void _cupsMD5Append(_cups_md5_state_t *pms, const unsigned char *data, int nbytes); /* Finish the message and return the digest. */ void _cupsMD5Finish(_cups_md5_state_t *pms, unsigned char digest[16]); # ifdef __cplusplus } /* end extern "C" */ # endif /* __cplusplus */ #endif /* !_CUPS_MD5_PRIVATE_H_ */ cups-2.2.7/cups/md5.c000664 000765 000024 00000023746 13255074424 014772 0ustar00msweetstaff000000 000000 /* * Private MD5 implementation for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 2005 by Easy Software Products * Copyright (C) 1999 Aladdin Enterprises. All rights reserved. * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. * * L. Peter Deutsch * ghost@aladdin.com */ /* Independent implementation of MD5 (RFC 1321). This code implements the MD5 Algorithm defined in RFC 1321. It is derived directly from the text of the RFC and not from the reference implementation. The original and principal author of md5.c is L. Peter Deutsch . Other authors are noted in the change history that follows (in reverse chronological order): 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5). 1999-05-03 lpd Original version. */ #include "md5-private.h" #include "string-private.h" #if !defined(__APPLE__) && !defined(HAVE_GNUTLS) # define T1 0xd76aa478 # define T2 0xe8c7b756 # define T3 0x242070db # define T4 0xc1bdceee # define T5 0xf57c0faf # define T6 0x4787c62a # define T7 0xa8304613 # define T8 0xfd469501 # define T9 0x698098d8 # define T10 0x8b44f7af # define T11 0xffff5bb1 # define T12 0x895cd7be # define T13 0x6b901122 # define T14 0xfd987193 # define T15 0xa679438e # define T16 0x49b40821 # define T17 0xf61e2562 # define T18 0xc040b340 # define T19 0x265e5a51 # define T20 0xe9b6c7aa # define T21 0xd62f105d # define T22 0x02441453 # define T23 0xd8a1e681 # define T24 0xe7d3fbc8 # define T25 0x21e1cde6 # define T26 0xc33707d6 # define T27 0xf4d50d87 # define T28 0x455a14ed # define T29 0xa9e3e905 # define T30 0xfcefa3f8 # define T31 0x676f02d9 # define T32 0x8d2a4c8a # define T33 0xfffa3942 # define T34 0x8771f681 # define T35 0x6d9d6122 # define T36 0xfde5380c # define T37 0xa4beea44 # define T38 0x4bdecfa9 # define T39 0xf6bb4b60 # define T40 0xbebfbc70 # define T41 0x289b7ec6 # define T42 0xeaa127fa # define T43 0xd4ef3085 # define T44 0x04881d05 # define T45 0xd9d4d039 # define T46 0xe6db99e5 # define T47 0x1fa27cf8 # define T48 0xc4ac5665 # define T49 0xf4292244 # define T50 0x432aff97 # define T51 0xab9423a7 # define T52 0xfc93a039 # define T53 0x655b59c3 # define T54 0x8f0ccc92 # define T55 0xffeff47d # define T56 0x85845dd1 # define T57 0x6fa87e4f # define T58 0xfe2ce6e0 # define T59 0xa3014314 # define T60 0x4e0811a1 # define T61 0xf7537e82 # define T62 0xbd3af235 # define T63 0x2ad7d2bb # define T64 0xeb86d391 static void _cups_md5_process(_cups_md5_state_t *pms, const unsigned char *data /*[64]*/) { unsigned int a = pms->abcd[0], b = pms->abcd[1], c = pms->abcd[2], d = pms->abcd[3]; unsigned int t; # ifndef ARCH_IS_BIG_ENDIAN # define ARCH_IS_BIG_ENDIAN 1 /* slower, default implementation */ # endif # if ARCH_IS_BIG_ENDIAN /* * On big-endian machines, we must arrange the bytes in the right * order. (This also works on machines of unknown byte order.) */ unsigned int X[16]; const unsigned char *xp = data; int i; for (i = 0; i < 16; ++i, xp += 4) X[i] = (unsigned)xp[0] + ((unsigned)xp[1] << 8) + ((unsigned)xp[2] << 16) + ((unsigned)xp[3] << 24); # else /* !ARCH_IS_BIG_ENDIAN */ /* * On little-endian machines, we can process properly aligned data * without copying it. */ unsigned int xbuf[16]; const unsigned int *X; if (!((data - (const unsigned char *)0) & 3)) { /* data are properly aligned */ X = (const unsigned int *)data; } else { /* not aligned */ memcpy(xbuf, data, 64); X = xbuf; } # endif # define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) /* Round 1. */ /* Let [abcd k s i] denote the operation a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ # define F(x, y, z) (((x) & (y)) | (~(x) & (z))) # define SET(a, b, c, d, k, s, Ti)\ t = a + F(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 0, 7, T1); SET(d, a, b, c, 1, 12, T2); SET(c, d, a, b, 2, 17, T3); SET(b, c, d, a, 3, 22, T4); SET(a, b, c, d, 4, 7, T5); SET(d, a, b, c, 5, 12, T6); SET(c, d, a, b, 6, 17, T7); SET(b, c, d, a, 7, 22, T8); SET(a, b, c, d, 8, 7, T9); SET(d, a, b, c, 9, 12, T10); SET(c, d, a, b, 10, 17, T11); SET(b, c, d, a, 11, 22, T12); SET(a, b, c, d, 12, 7, T13); SET(d, a, b, c, 13, 12, T14); SET(c, d, a, b, 14, 17, T15); SET(b, c, d, a, 15, 22, T16); # undef SET /* Round 2. */ /* Let [abcd k s i] denote the operation a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ # define G(x, y, z) (((x) & (z)) | ((y) & ~(z))) # define SET(a, b, c, d, k, s, Ti)\ t = a + G(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 1, 5, T17); SET(d, a, b, c, 6, 9, T18); SET(c, d, a, b, 11, 14, T19); SET(b, c, d, a, 0, 20, T20); SET(a, b, c, d, 5, 5, T21); SET(d, a, b, c, 10, 9, T22); SET(c, d, a, b, 15, 14, T23); SET(b, c, d, a, 4, 20, T24); SET(a, b, c, d, 9, 5, T25); SET(d, a, b, c, 14, 9, T26); SET(c, d, a, b, 3, 14, T27); SET(b, c, d, a, 8, 20, T28); SET(a, b, c, d, 13, 5, T29); SET(d, a, b, c, 2, 9, T30); SET(c, d, a, b, 7, 14, T31); SET(b, c, d, a, 12, 20, T32); # undef SET /* Round 3. */ /* Let [abcd k s t] denote the operation a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ # define H(x, y, z) ((x) ^ (y) ^ (z)) # define SET(a, b, c, d, k, s, Ti)\ t = a + H(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 5, 4, T33); SET(d, a, b, c, 8, 11, T34); SET(c, d, a, b, 11, 16, T35); SET(b, c, d, a, 14, 23, T36); SET(a, b, c, d, 1, 4, T37); SET(d, a, b, c, 4, 11, T38); SET(c, d, a, b, 7, 16, T39); SET(b, c, d, a, 10, 23, T40); SET(a, b, c, d, 13, 4, T41); SET(d, a, b, c, 0, 11, T42); SET(c, d, a, b, 3, 16, T43); SET(b, c, d, a, 6, 23, T44); SET(a, b, c, d, 9, 4, T45); SET(d, a, b, c, 12, 11, T46); SET(c, d, a, b, 15, 16, T47); SET(b, c, d, a, 2, 23, T48); # undef SET /* Round 4. */ /* Let [abcd k s t] denote the operation a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ # define I(x, y, z) ((y) ^ ((x) | ~(z))) # define SET(a, b, c, d, k, s, Ti)\ t = a + I(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 0, 6, T49); SET(d, a, b, c, 7, 10, T50); SET(c, d, a, b, 14, 15, T51); SET(b, c, d, a, 5, 21, T52); SET(a, b, c, d, 12, 6, T53); SET(d, a, b, c, 3, 10, T54); SET(c, d, a, b, 10, 15, T55); SET(b, c, d, a, 1, 21, T56); SET(a, b, c, d, 8, 6, T57); SET(d, a, b, c, 15, 10, T58); SET(c, d, a, b, 6, 15, T59); SET(b, c, d, a, 13, 21, T60); SET(a, b, c, d, 4, 6, T61); SET(d, a, b, c, 11, 10, T62); SET(c, d, a, b, 2, 15, T63); SET(b, c, d, a, 9, 21, T64); # undef SET /* Then perform the following additions. (That is increment each of the four registers by the value it had before this block was started.) */ pms->abcd[0] += a; pms->abcd[1] += b; pms->abcd[2] += c; pms->abcd[3] += d; } void _cupsMD5Init(_cups_md5_state_t *pms) { pms->count[0] = pms->count[1] = 0; pms->abcd[0] = 0x67452301; pms->abcd[1] = 0xefcdab89; pms->abcd[2] = 0x98badcfe; pms->abcd[3] = 0x10325476; } void _cupsMD5Append(_cups_md5_state_t *pms, const unsigned char *data, int nbytes) { const unsigned char *p = data; int left = nbytes; int offset = (pms->count[0] >> 3) & 63; unsigned int nbits = (unsigned int)(nbytes << 3); if (nbytes <= 0) return; /* Update the message length. */ pms->count[1] += (unsigned)nbytes >> 29; pms->count[0] += nbits; if (pms->count[0] < nbits) pms->count[1]++; /* Process an initial partial block. */ if (offset) { int copy = (offset + nbytes > 64 ? 64 - offset : nbytes); memcpy(pms->buf + offset, p, (size_t)copy); if (offset + copy < 64) return; p += copy; left -= copy; _cups_md5_process(pms, pms->buf); } /* Process full blocks. */ for (; left >= 64; p += 64, left -= 64) _cups_md5_process(pms, p); /* Process a final partial block. */ if (left) memcpy(pms->buf, p, (size_t)left); } void _cupsMD5Finish(_cups_md5_state_t *pms, unsigned char digest[16]) { static const unsigned char pad[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; unsigned char data[8]; int i; /* Save the length before padding. */ for (i = 0; i < 8; ++i) data[i] = (unsigned char)(pms->count[i >> 2] >> ((i & 3) << 3)); /* Pad to 56 bytes mod 64. */ _cupsMD5Append(pms, pad, (int)((55 - (pms->count[0] >> 3)) & 63) + 1); /* Append the length. */ _cupsMD5Append(pms, data, 8); for (i = 0; i < 16; ++i) digest[i] = (unsigned char)(pms->abcd[i >> 2] >> ((i & 3) << 3)); } #endif /* !__APPLE__ && !HAVE_GNUTLS */ cups-2.2.7/cups/md5passwd.c000664 000765 000024 00000005651 13255074424 016207 0ustar00msweetstaff000000 000000 /* * MD5 password support for CUPS (deprecated). * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include "http-private.h" #include "string-private.h" /* * 'httpMD5()' - Compute the MD5 sum of the username:group:password. * * @deprecated@ */ char * /* O - MD5 sum */ httpMD5(const char *username, /* I - User name */ const char *realm, /* I - Realm name */ const char *passwd, /* I - Password string */ char md5[33]) /* O - MD5 string */ { unsigned char sum[16]; /* Sum data */ char line[256]; /* Line to sum */ /* * Compute the MD5 sum of the user name, group name, and password. */ snprintf(line, sizeof(line), "%s:%s:%s", username, realm, passwd); cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum)); /* * Return the sum... */ return ((char *)cupsHashString(sum, sizeof(sum), md5, 33)); } /* * 'httpMD5Final()' - Combine the MD5 sum of the username, group, and password * with the server-supplied nonce value, method, and * request-uri. * * @deprecated@ */ char * /* O - New sum */ httpMD5Final(const char *nonce, /* I - Server nonce value */ const char *method, /* I - METHOD (GET, POST, etc.) */ const char *resource, /* I - Resource path */ char md5[33]) /* IO - MD5 sum */ { unsigned char sum[16]; /* Sum data */ char line[1024]; /* Line of data */ char a2[33]; /* Hash of method and resource */ /* * First compute the MD5 sum of the method and resource... */ snprintf(line, sizeof(line), "%s:%s", method, resource); cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum)); cupsHashString(sum, sizeof(sum), a2, sizeof(a2)); /* * Then combine A1 (MD5 of username, realm, and password) with the nonce * and A2 (method + resource) values to get the final MD5 sum for the * request... */ snprintf(line, sizeof(line), "%s:%s:%s", md5, nonce, a2); cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum)); return ((char *)cupsHashString(sum, sizeof(sum), md5, 33)); } /* * 'httpMD5String()' - Convert an MD5 sum to a character string. * * @deprecated@ */ char * /* O - MD5 sum in hex */ httpMD5String(const unsigned char *sum, /* I - MD5 sum data */ char md5[33]) /* O - MD5 sum in hex */ { return ((char *)cupsHashString(sum, 16, md5, 33)); } cups-2.2.7/cups/notify.c000664 000765 000024 00000011646 13255074424 015611 0ustar00msweetstaff000000 000000 /* * Notification routines for CUPS. * * Copyright 2007-2013 by Apple Inc. * Copyright 2005-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" /* * 'cupsNotifySubject()' - Return the subject for the given notification message. * * The returned string must be freed by the caller using @code free@. * * @since CUPS 1.2/macOS 10.5@ */ char * /* O - Subject string or @code NULL@ */ cupsNotifySubject(cups_lang_t *lang, /* I - Language data */ ipp_t *event) /* I - Event data */ { char buffer[1024]; /* Subject buffer */ const char *prefix, /* Prefix on subject */ *state; /* Printer/job state string */ ipp_attribute_t *job_id, /* notify-job-id */ *job_name, /* job-name */ *job_state, /* job-state */ *printer_name, /* printer-name */ *printer_state, /* printer-state */ *printer_uri, /* notify-printer-uri */ *subscribed; /* notify-subscribed-event */ /* * Range check input... */ if (!event || !lang) return (NULL); /* * Get the required attributes... */ job_id = ippFindAttribute(event, "notify-job-id", IPP_TAG_INTEGER); job_name = ippFindAttribute(event, "job-name", IPP_TAG_NAME); job_state = ippFindAttribute(event, "job-state", IPP_TAG_ENUM); printer_name = ippFindAttribute(event, "printer-name", IPP_TAG_NAME); printer_state = ippFindAttribute(event, "printer-state", IPP_TAG_ENUM); printer_uri = ippFindAttribute(event, "notify-printer-uri", IPP_TAG_URI); subscribed = ippFindAttribute(event, "notify-subscribed-event", IPP_TAG_KEYWORD); if (job_id && printer_name && printer_uri && job_state) { /* * Job event... */ prefix = _cupsLangString(lang, _("Print Job:")); switch (job_state->values[0].integer) { case IPP_JSTATE_PENDING : state = _cupsLangString(lang, _("pending")); break; case IPP_JSTATE_HELD : state = _cupsLangString(lang, _("held")); break; case IPP_JSTATE_PROCESSING : state = _cupsLangString(lang, _("processing")); break; case IPP_JSTATE_STOPPED : state = _cupsLangString(lang, _("stopped")); break; case IPP_JSTATE_CANCELED : state = _cupsLangString(lang, _("canceled")); break; case IPP_JSTATE_ABORTED : state = _cupsLangString(lang, _("aborted")); break; case IPP_JSTATE_COMPLETED : state = _cupsLangString(lang, _("completed")); break; default : state = _cupsLangString(lang, _("unknown")); break; } snprintf(buffer, sizeof(buffer), "%s %s-%d (%s) %s", prefix, printer_name->values[0].string.text, job_id->values[0].integer, job_name ? job_name->values[0].string.text : _cupsLangString(lang, _("untitled")), state); } else if (printer_uri && printer_name && printer_state) { /* * Printer event... */ prefix = _cupsLangString(lang, _("Printer:")); switch (printer_state->values[0].integer) { case IPP_PSTATE_IDLE : state = _cupsLangString(lang, _("idle")); break; case IPP_PSTATE_PROCESSING : state = _cupsLangString(lang, _("processing")); break; case IPP_PSTATE_STOPPED : state = _cupsLangString(lang, _("stopped")); break; default : state = _cupsLangString(lang, _("unknown")); break; } snprintf(buffer, sizeof(buffer), "%s %s %s", prefix, printer_name->values[0].string.text, state); } else if (subscribed) strlcpy(buffer, subscribed->values[0].string.text, sizeof(buffer)); else return (NULL); /* * Duplicate and return the subject string... */ return (strdup(buffer)); } /* * 'cupsNotifyText()' - Return the text for the given notification message. * * The returned string must be freed by the caller using @code free@. * * @since CUPS 1.2/macOS 10.5@ */ char * /* O - Message text or @code NULL@ */ cupsNotifyText(cups_lang_t *lang, /* I - Language data */ ipp_t *event) /* I - Event data */ { ipp_attribute_t *notify_text; /* notify-text */ /* * Range check input... */ if (!event || !lang) return (NULL); /* * Get the notify-text attribute from the server... */ if ((notify_text = ippFindAttribute(event, "notify-text", IPP_TAG_TEXT)) == NULL) return (NULL); /* * Return a copy... */ return (strdup(notify_text->values[0].string.text)); } cups-2.2.7/cups/options.c000664 000765 000024 00000037652 13255074424 016001 0ustar00msweetstaff000000 000000 /* * Option routines for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" /* * Local functions... */ static int cups_compare_options(cups_option_t *a, cups_option_t *b); static int cups_find_option(const char *name, int num_options, cups_option_t *option, int prev, int *rdiff); /* * 'cupsAddIntegerOption()' - Add an integer option to an option array. * * New option arrays can be initialized simply by passing 0 for the * "num_options" parameter. * * @since CUPS 2.2.4/macOS 10.13@ */ int /* O - Number of options */ cupsAddIntegerOption( const char *name, /* I - Name of option */ int value, /* I - Value of option */ int num_options, /* I - Number of options */ cups_option_t **options) /* IO - Pointer to options */ { char strvalue[32]; /* String value */ snprintf(strvalue, sizeof(strvalue), "%d", value); return (cupsAddOption(name, strvalue, num_options, options)); } /* * 'cupsAddOption()' - Add an option to an option array. * * New option arrays can be initialized simply by passing 0 for the * "num_options" parameter. */ int /* O - Number of options */ cupsAddOption(const char *name, /* I - Name of option */ const char *value, /* I - Value of option */ int num_options,/* I - Number of options */ cups_option_t **options) /* IO - Pointer to options */ { cups_option_t *temp; /* Pointer to new option */ int insert, /* Insertion point */ diff; /* Result of search */ DEBUG_printf(("2cupsAddOption(name=\"%s\", value=\"%s\", num_options=%d, options=%p)", name, value, num_options, (void *)options)); if (!name || !name[0] || !value || !options || num_options < 0) { DEBUG_printf(("3cupsAddOption: Returning %d", num_options)); return (num_options); } if (!_cups_strcasecmp(name, "cupsPrintQuality")) num_options = cupsRemoveOption("print-quality", num_options, options); else if (!_cups_strcasecmp(name, "print-quality")) num_options = cupsRemoveOption("cupsPrintQuality", num_options, options); /* * Look for an existing option with the same name... */ if (num_options == 0) { insert = 0; diff = 1; } else { insert = cups_find_option(name, num_options, *options, num_options - 1, &diff); if (diff > 0) insert ++; } if (diff) { /* * No matching option name... */ DEBUG_printf(("4cupsAddOption: New option inserted at index %d...", insert)); if (num_options == 0) temp = (cups_option_t *)malloc(sizeof(cups_option_t)); else temp = (cups_option_t *)realloc(*options, sizeof(cups_option_t) * (size_t)(num_options + 1)); if (!temp) { DEBUG_puts("3cupsAddOption: Unable to expand option array, returning 0"); return (0); } *options = temp; if (insert < num_options) { DEBUG_printf(("4cupsAddOption: Shifting %d options...", (int)(num_options - insert))); memmove(temp + insert + 1, temp + insert, (size_t)(num_options - insert) * sizeof(cups_option_t)); } temp += insert; temp->name = _cupsStrAlloc(name); num_options ++; } else { /* * Match found; free the old value... */ DEBUG_printf(("4cupsAddOption: Option already exists at index %d...", insert)); temp = *options + insert; _cupsStrFree(temp->value); } temp->value = _cupsStrAlloc(value); DEBUG_printf(("3cupsAddOption: Returning %d", num_options)); return (num_options); } /* * 'cupsFreeOptions()' - Free all memory used by options. */ void cupsFreeOptions( int num_options, /* I - Number of options */ cups_option_t *options) /* I - Pointer to options */ { int i; /* Looping var */ DEBUG_printf(("cupsFreeOptions(num_options=%d, options=%p)", num_options, (void *)options)); if (num_options <= 0 || !options) return; for (i = 0; i < num_options; i ++) { _cupsStrFree(options[i].name); _cupsStrFree(options[i].value); } free(options); } /* * 'cupsGetIntegerOption()' - Get an integer option value. * * INT_MIN is returned when the option does not exist, is not an integer, or * exceeds the range of values for the "int" type. * * @since CUPS 2.2.4/macOS 10.13@ */ int /* O - Option value or @code INT_MIN@ */ cupsGetIntegerOption( const char *name, /* I - Name of option */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { const char *value = cupsGetOption(name, num_options, options); /* String value of option */ char *ptr; /* Pointer into string value */ long intvalue; /* Integer value */ if (!value || !*value) return (INT_MIN); intvalue = strtol(value, &ptr, 10); if (intvalue < INT_MIN || intvalue > INT_MAX || *ptr) return (INT_MIN); return ((int)intvalue); } /* * 'cupsGetOption()' - Get an option value. */ const char * /* O - Option value or @code NULL@ */ cupsGetOption(const char *name, /* I - Name of option */ int num_options,/* I - Number of options */ cups_option_t *options) /* I - Options */ { int diff, /* Result of comparison */ match; /* Matching index */ DEBUG_printf(("2cupsGetOption(name=\"%s\", num_options=%d, options=%p)", name, num_options, (void *)options)); if (!name || num_options <= 0 || !options) { DEBUG_puts("3cupsGetOption: Returning NULL"); return (NULL); } match = cups_find_option(name, num_options, options, -1, &diff); if (!diff) { DEBUG_printf(("3cupsGetOption: Returning \"%s\"", options[match].value)); return (options[match].value); } DEBUG_puts("3cupsGetOption: Returning NULL"); return (NULL); } /* * 'cupsParseOptions()' - Parse options from a command-line argument. * * This function converts space-delimited name/value pairs according * to the PAPI text option ABNF specification. Collection values * ("name={a=... b=... c=...}") are stored with the curley brackets * intact - use @code cupsParseOptions@ on the value to extract the * collection attributes. */ int /* O - Number of options found */ cupsParseOptions( const char *arg, /* I - Argument to parse */ int num_options, /* I - Number of options */ cups_option_t **options) /* O - Options found */ { char *copyarg, /* Copy of input string */ *ptr, /* Pointer into string */ *name, /* Pointer to name */ *value, /* Pointer to value */ sep, /* Separator character */ quote; /* Quote character */ DEBUG_printf(("cupsParseOptions(arg=\"%s\", num_options=%d, options=%p)", arg, num_options, (void *)options)); /* * Range check input... */ if (!arg) { DEBUG_printf(("1cupsParseOptions: Returning %d", num_options)); return (num_options); } if (!options || num_options < 0) { DEBUG_puts("1cupsParseOptions: Returning 0"); return (0); } /* * Make a copy of the argument string and then divide it up... */ if ((copyarg = strdup(arg)) == NULL) { DEBUG_puts("1cupsParseOptions: Unable to copy arg string"); DEBUG_printf(("1cupsParseOptions: Returning %d", num_options)); return (num_options); } if (*copyarg == '{') { /* * Remove surrounding {} so we can parse "{name=value ... name=value}"... */ if ((ptr = copyarg + strlen(copyarg) - 1) > copyarg && *ptr == '}') { *ptr = '\0'; ptr = copyarg + 1; } else ptr = copyarg; } else ptr = copyarg; /* * Skip leading spaces... */ while (_cups_isspace(*ptr)) ptr ++; /* * Loop through the string... */ while (*ptr != '\0') { /* * Get the name up to a SPACE, =, or end-of-string... */ name = ptr; while (!strchr("\f\n\r\t\v =", *ptr) && *ptr) ptr ++; /* * Avoid an empty name... */ if (ptr == name) break; /* * Skip trailing spaces... */ while (_cups_isspace(*ptr)) *ptr++ = '\0'; if ((sep = *ptr) == '=') *ptr++ = '\0'; DEBUG_printf(("2cupsParseOptions: name=\"%s\"", name)); if (sep != '=') { /* * Boolean option... */ if (!_cups_strncasecmp(name, "no", 2)) num_options = cupsAddOption(name + 2, "false", num_options, options); else num_options = cupsAddOption(name, "true", num_options, options); continue; } /* * Remove = and parse the value... */ value = ptr; while (*ptr && !_cups_isspace(*ptr)) { if (*ptr == ',') ptr ++; else if (*ptr == '\'' || *ptr == '\"') { /* * Quoted string constant... */ quote = *ptr; _cups_strcpy(ptr, ptr + 1); while (*ptr != quote && *ptr) { if (*ptr == '\\' && ptr[1]) _cups_strcpy(ptr, ptr + 1); ptr ++; } if (*ptr) _cups_strcpy(ptr, ptr + 1); } else if (*ptr == '{') { /* * Collection value... */ int depth; for (depth = 0; *ptr; ptr ++) { if (*ptr == '{') depth ++; else if (*ptr == '}') { depth --; if (!depth) { ptr ++; break; } } else if (*ptr == '\\' && ptr[1]) _cups_strcpy(ptr, ptr + 1); } } else { /* * Normal space-delimited string... */ while (*ptr && !_cups_isspace(*ptr)) { if (*ptr == '\\' && ptr[1]) _cups_strcpy(ptr, ptr + 1); ptr ++; } } } if (*ptr != '\0') *ptr++ = '\0'; DEBUG_printf(("2cupsParseOptions: value=\"%s\"", value)); /* * Skip trailing whitespace... */ while (_cups_isspace(*ptr)) ptr ++; /* * Add the string value... */ num_options = cupsAddOption(name, value, num_options, options); } /* * Free the copy of the argument we made and return the number of options * found. */ free(copyarg); DEBUG_printf(("1cupsParseOptions: Returning %d", num_options)); return (num_options); } /* * 'cupsRemoveOption()' - Remove an option from an option array. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - New number of options */ cupsRemoveOption( const char *name, /* I - Option name */ int num_options, /* I - Current number of options */ cups_option_t **options) /* IO - Options */ { int i; /* Looping var */ cups_option_t *option; /* Current option */ DEBUG_printf(("2cupsRemoveOption(name=\"%s\", num_options=%d, options=%p)", name, num_options, (void *)options)); /* * Range check input... */ if (!name || num_options < 1 || !options) { DEBUG_printf(("3cupsRemoveOption: Returning %d", num_options)); return (num_options); } /* * Loop for the option... */ for (i = num_options, option = *options; i > 0; i --, option ++) if (!_cups_strcasecmp(name, option->name)) break; if (i) { /* * Remove this option from the array... */ DEBUG_puts("4cupsRemoveOption: Found option, removing it..."); num_options --; i --; _cupsStrFree(option->name); _cupsStrFree(option->value); if (i > 0) memmove(option, option + 1, (size_t)i * sizeof(cups_option_t)); } /* * Return the new number of options... */ DEBUG_printf(("3cupsRemoveOption: Returning %d", num_options)); return (num_options); } /* * '_cupsGet1284Values()' - Get 1284 device ID keys and values. * * The returned dictionary is a CUPS option array that can be queried with * cupsGetOption and freed with cupsFreeOptions. */ int /* O - Number of key/value pairs */ _cupsGet1284Values( const char *device_id, /* I - IEEE-1284 device ID string */ cups_option_t **values) /* O - Array of key/value pairs */ { int num_values; /* Number of values */ char key[256], /* Key string */ value[256], /* Value string */ *ptr; /* Pointer into key/value */ /* * Range check input... */ if (values) *values = NULL; if (!device_id || !values) return (0); /* * Parse the 1284 device ID value into keys and values. The format is * repeating sequences of: * * [whitespace]key:value[whitespace]; */ num_values = 0; while (*device_id) { while (_cups_isspace(*device_id)) device_id ++; if (!*device_id) break; for (ptr = key; *device_id && *device_id != ':'; device_id ++) if (ptr < (key + sizeof(key) - 1)) *ptr++ = *device_id; if (!*device_id) break; while (ptr > key && _cups_isspace(ptr[-1])) ptr --; *ptr = '\0'; device_id ++; while (_cups_isspace(*device_id)) device_id ++; if (!*device_id) break; for (ptr = value; *device_id && *device_id != ';'; device_id ++) if (ptr < (value + sizeof(value) - 1)) *ptr++ = *device_id; if (!*device_id) break; while (ptr > value && _cups_isspace(ptr[-1])) ptr --; *ptr = '\0'; device_id ++; num_values = cupsAddOption(key, value, num_values, values); } return (num_values); } /* * 'cups_compare_options()' - Compare two options. */ static int /* O - Result of comparison */ cups_compare_options(cups_option_t *a, /* I - First option */ cups_option_t *b) /* I - Second option */ { return (_cups_strcasecmp(a->name, b->name)); } /* * 'cups_find_option()' - Find an option using a binary search. */ static int /* O - Index of match */ cups_find_option( const char *name, /* I - Option name */ int num_options, /* I - Number of options */ cups_option_t *options, /* I - Options */ int prev, /* I - Previous index */ int *rdiff) /* O - Difference of match */ { int left, /* Low mark for binary search */ right, /* High mark for binary search */ current, /* Current index */ diff; /* Result of comparison */ cups_option_t key; /* Search key */ DEBUG_printf(("7cups_find_option(name=\"%s\", num_options=%d, options=%p, prev=%d, rdiff=%p)", name, num_options, (void *)options, prev, (void *)rdiff)); #ifdef DEBUG for (left = 0; left < num_options; left ++) DEBUG_printf(("9cups_find_option: options[%d].name=\"%s\", .value=\"%s\"", left, options[left].name, options[left].value)); #endif /* DEBUG */ key.name = (char *)name; if (prev >= 0) { /* * Start search on either side of previous... */ if ((diff = cups_compare_options(&key, options + prev)) == 0 || (diff < 0 && prev == 0) || (diff > 0 && prev == (num_options - 1))) { *rdiff = diff; return (prev); } else if (diff < 0) { /* * Start with previous on right side... */ left = 0; right = prev; } else { /* * Start wih previous on left side... */ left = prev; right = num_options - 1; } } else { /* * Start search in the middle... */ left = 0; right = num_options - 1; } do { current = (left + right) / 2; diff = cups_compare_options(&key, options + current); if (diff == 0) break; else if (diff < 0) right = current; else left = current; } while ((right - left) > 1); if (diff != 0) { /* * Check the last 1 or 2 elements... */ if ((diff = cups_compare_options(&key, options + left)) <= 0) current = left; else { diff = cups_compare_options(&key, options + right); current = right; } } /* * Return the closest destination and the difference... */ *rdiff = diff; return (current); } cups-2.2.7/cups/ppd-attr.c000664 000765 000024 00000015037 13255074424 016032 0ustar00msweetstaff000000 000000 /* * PPD model-specific attribute routines for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cups-private.h" #include "ppd-private.h" /* * 'ppdFindAttr()' - Find the first matching attribute. * * @since CUPS 1.1.19/macOS 10.3@ */ ppd_attr_t * /* O - Attribute or @code NULL@ if not found */ ppdFindAttr(ppd_file_t *ppd, /* I - PPD file data */ const char *name, /* I - Attribute name */ const char *spec) /* I - Specifier string or @code NULL@ */ { ppd_attr_t key, /* Search key */ *attr; /* Current attribute */ DEBUG_printf(("2ppdFindAttr(ppd=%p, name=\"%s\", spec=\"%s\")", ppd, name, spec)); /* * Range check input... */ if (!ppd || !name || ppd->num_attrs == 0) return (NULL); /* * Search for a matching attribute... */ memset(&key, 0, sizeof(key)); strlcpy(key.name, name, sizeof(key.name)); /* * Return the first matching attribute, if any... */ if ((attr = (ppd_attr_t *)cupsArrayFind(ppd->sorted_attrs, &key)) != NULL) { if (spec) { /* * Loop until we find the first matching attribute for "spec"... */ while (attr && _cups_strcasecmp(spec, attr->spec)) { if ((attr = (ppd_attr_t *)cupsArrayNext(ppd->sorted_attrs)) != NULL && _cups_strcasecmp(attr->name, name)) attr = NULL; } } } return (attr); } /* * 'ppdFindNextAttr()' - Find the next matching attribute. * * @since CUPS 1.1.19/macOS 10.3@ */ ppd_attr_t * /* O - Attribute or @code NULL@ if not found */ ppdFindNextAttr(ppd_file_t *ppd, /* I - PPD file data */ const char *name, /* I - Attribute name */ const char *spec) /* I - Specifier string or @code NULL@ */ { ppd_attr_t *attr; /* Current attribute */ /* * Range check input... */ if (!ppd || !name || ppd->num_attrs == 0) return (NULL); /* * See if there are more attributes to return... */ while ((attr = (ppd_attr_t *)cupsArrayNext(ppd->sorted_attrs)) != NULL) { /* * Check the next attribute to see if it is a match... */ if (_cups_strcasecmp(attr->name, name)) { /* * Nope, reset the current pointer to the end of the array... */ cupsArrayIndex(ppd->sorted_attrs, cupsArrayCount(ppd->sorted_attrs)); return (NULL); } if (!spec || !_cups_strcasecmp(attr->spec, spec)) break; } /* * Return the next attribute's value... */ return (attr); } /* * '_ppdNormalizeMakeAndModel()' - Normalize a product/make-and-model string. * * This function tries to undo the mistakes made by many printer manufacturers * to produce a clean make-and-model string we can use. */ char * /* O - Normalized make-and-model string or NULL on error */ _ppdNormalizeMakeAndModel( const char *make_and_model, /* I - Original make-and-model string */ char *buffer, /* I - String buffer */ size_t bufsize) /* I - Size of string buffer */ { char *bufptr; /* Pointer into buffer */ if (!make_and_model || !buffer || bufsize < 1) { if (buffer) *buffer = '\0'; return (NULL); } /* * Skip leading whitespace... */ while (_cups_isspace(*make_and_model)) make_and_model ++; /* * Remove parenthesis and add manufacturers as needed... */ if (make_and_model[0] == '(') { strlcpy(buffer, make_and_model + 1, bufsize); if ((bufptr = strrchr(buffer, ')')) != NULL) *bufptr = '\0'; } else if (!_cups_strncasecmp(make_and_model, "XPrint", 6)) { /* * Xerox XPrint... */ snprintf(buffer, bufsize, "Xerox %s", make_and_model); } else if (!_cups_strncasecmp(make_and_model, "Eastman", 7)) { /* * Kodak... */ snprintf(buffer, bufsize, "Kodak %s", make_and_model + 7); } else if (!_cups_strncasecmp(make_and_model, "laserwriter", 11)) { /* * Apple LaserWriter... */ snprintf(buffer, bufsize, "Apple LaserWriter%s", make_and_model + 11); } else if (!_cups_strncasecmp(make_and_model, "colorpoint", 10)) { /* * Seiko... */ snprintf(buffer, bufsize, "Seiko %s", make_and_model); } else if (!_cups_strncasecmp(make_and_model, "fiery", 5)) { /* * EFI... */ snprintf(buffer, bufsize, "EFI %s", make_and_model); } else if (!_cups_strncasecmp(make_and_model, "ps ", 3) || !_cups_strncasecmp(make_and_model, "colorpass", 9)) { /* * Canon... */ snprintf(buffer, bufsize, "Canon %s", make_and_model); } else if (!_cups_strncasecmp(make_and_model, "designjet", 9) || !_cups_strncasecmp(make_and_model, "deskjet", 7)) { /* * HP... */ snprintf(buffer, bufsize, "HP %s", make_and_model); } else strlcpy(buffer, make_and_model, bufsize); /* * Clean up the make... */ if (!_cups_strncasecmp(buffer, "agfa", 4)) { /* * Replace with AGFA (all uppercase)... */ buffer[0] = 'A'; buffer[1] = 'G'; buffer[2] = 'F'; buffer[3] = 'A'; } else if (!_cups_strncasecmp(buffer, "Hewlett-Packard hp ", 19)) { /* * Just put "HP" on the front... */ buffer[0] = 'H'; buffer[1] = 'P'; _cups_strcpy(buffer + 2, buffer + 18); } else if (!_cups_strncasecmp(buffer, "Hewlett-Packard ", 16)) { /* * Just put "HP" on the front... */ buffer[0] = 'H'; buffer[1] = 'P'; _cups_strcpy(buffer + 2, buffer + 15); } else if (!_cups_strncasecmp(buffer, "Lexmark International", 21)) { /* * Strip "International"... */ _cups_strcpy(buffer + 8, buffer + 21); } else if (!_cups_strncasecmp(buffer, "herk", 4)) { /* * Replace with LHAG... */ buffer[0] = 'L'; buffer[1] = 'H'; buffer[2] = 'A'; buffer[3] = 'G'; } else if (!_cups_strncasecmp(buffer, "linotype", 8)) { /* * Replace with LHAG... */ buffer[0] = 'L'; buffer[1] = 'H'; buffer[2] = 'A'; buffer[3] = 'G'; _cups_strcpy(buffer + 4, buffer + 8); } /* * Remove trailing whitespace and return... */ for (bufptr = buffer + strlen(buffer) - 1; bufptr >= buffer && _cups_isspace(*bufptr); bufptr --); bufptr[1] = '\0'; return (buffer[0] ? buffer : NULL); } cups-2.2.7/cups/ppd-cache.c000664 000765 000024 00000431006 13255074424 016121 0ustar00msweetstaff000000 000000 /* * PPD cache implementation for CUPS. * * Copyright © 2010-2018 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include "ppd-private.h" #include /* * Macro to test for two almost-equal PWG measurements. */ #define _PWG_EQUIVALENT(x, y) (abs((x)-(y)) < 2) /* * Local functions... */ static void pwg_add_finishing(cups_array_t *finishings, ipp_finishings_t template, const char *name, const char *value); static int pwg_compare_finishings(_pwg_finishings_t *a, _pwg_finishings_t *b); static void pwg_free_finishings(_pwg_finishings_t *f); static void pwg_ppdize_name(const char *ipp, char *name, size_t namesize); static void pwg_ppdize_resolution(ipp_attribute_t *attr, int element, int *xres, int *yres, char *name, size_t namesize); static void pwg_unppdize_name(const char *ppd, char *name, size_t namesize, const char *dashchars); /* * '_cupsConvertOptions()' - Convert printer options to standard IPP attributes. * * This functions converts PPD and CUPS-specific options to their standard IPP * attributes and values and adds them to the specified IPP request. */ int /* O - New number of copies */ _cupsConvertOptions( ipp_t *request, /* I - IPP request */ ppd_file_t *ppd, /* I - PPD file */ _ppd_cache_t *pc, /* I - PPD cache info */ ipp_attribute_t *media_col_sup, /* I - media-col-supported values */ ipp_attribute_t *doc_handling_sup, /* I - multiple-document-handling-supported values */ ipp_attribute_t *print_color_mode_sup, /* I - Printer supports print-color-mode */ const char *user, /* I - User info */ const char *format, /* I - document-format value */ int copies, /* I - Number of copies */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { int i; /* Looping var */ const char *keyword, /* PWG keyword */ *password; /* Password string */ pwg_size_t *size; /* PWG media size */ ipp_t *media_col, /* media-col value */ *media_size; /* media-size value */ const char *media_source, /* media-source value */ *media_type, /* media-type value */ *collate_str, /* multiple-document-handling value */ *color_attr_name, /* Supported color attribute */ *mandatory; /* Mandatory attributes */ int num_finishings = 0, /* Number of finishing values */ finishings[10]; /* Finishing enum values */ ppd_choice_t *choice; /* Marked choice */ int finishings_copies = copies; /* Number of copies for finishings */ /* * Send standard IPP attributes... */ if (pc->password && (password = cupsGetOption("job-password", num_options, options)) != NULL && ippGetOperation(request) != IPP_OP_VALIDATE_JOB) { ipp_attribute_t *attr = NULL; /* job-password attribute */ if ((keyword = cupsGetOption("job-password-encryption", num_options, options)) == NULL) keyword = "none"; if (!strcmp(keyword, "none")) { /* * Add plain-text job-password... */ attr = ippAddOctetString(request, IPP_TAG_OPERATION, "job-password", password, (int)strlen(password)); } else { /* * Add hashed job-password... */ unsigned char hash[64]; /* Hash of password */ ssize_t hashlen; /* Length of hash */ if ((hashlen = cupsHashData(keyword, password, strlen(password), hash, sizeof(hash))) > 0) attr = ippAddOctetString(request, IPP_TAG_OPERATION, "job-password", hash, (int)hashlen); } if (attr) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "job-password-encryption", NULL, keyword); } if (pc->account_id) { if ((keyword = cupsGetOption("job-account-id", num_options, options)) == NULL) keyword = cupsGetOption("job-billing", num_options, options); if (keyword) ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "job-account-id", NULL, keyword); } if (pc->accounting_user_id) { if ((keyword = cupsGetOption("job-accounting-user-id", num_options, options)) == NULL) keyword = user; if (keyword) ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "job-accounting-user-id", NULL, keyword); } for (mandatory = (const char *)cupsArrayFirst(pc->mandatory); mandatory; mandatory = (const char *)cupsArrayNext(pc->mandatory)) { if (strcmp(mandatory, "copies") && strcmp(mandatory, "destination-uris") && strcmp(mandatory, "finishings") && strcmp(mandatory, "job-account-id") && strcmp(mandatory, "job-accounting-user-id") && strcmp(mandatory, "job-password") && strcmp(mandatory, "job-password-encryption") && strcmp(mandatory, "media") && strncmp(mandatory, "media-col", 9) && strcmp(mandatory, "multiple-document-handling") && strcmp(mandatory, "output-bin") && strcmp(mandatory, "print-color-mode") && strcmp(mandatory, "print-quality") && strcmp(mandatory, "sides") && (keyword = cupsGetOption(mandatory, num_options, options)) != NULL) { _ipp_option_t *opt = _ippFindOption(mandatory); /* Option type */ ipp_tag_t value_tag = opt ? opt->value_tag : IPP_TAG_NAME; /* Value type */ switch (value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : ippAddInteger(request, IPP_TAG_JOB, value_tag, mandatory, atoi(keyword)); break; case IPP_TAG_BOOLEAN : ippAddBoolean(request, IPP_TAG_JOB, mandatory, !_cups_strcasecmp(keyword, "true")); break; case IPP_TAG_RANGE : { int lower, upper; /* Range */ if (sscanf(keyword, "%d-%d", &lower, &upper) != 2) lower = upper = atoi(keyword); ippAddRange(request, IPP_TAG_JOB, mandatory, lower, upper); } break; case IPP_TAG_STRING : ippAddOctetString(request, IPP_TAG_JOB, mandatory, keyword, (int)strlen(keyword)); break; default : if (!strcmp(mandatory, "print-color-mode") && !strcmp(keyword, "monochrome")) { if (ippContainsString(print_color_mode_sup, "auto-monochrome")) keyword = "auto-monochrome"; else if (ippContainsString(print_color_mode_sup, "process-monochrome") && !ippContainsString(print_color_mode_sup, "monochrome")) keyword = "process-monochrome"; } ippAddString(request, IPP_TAG_JOB, value_tag, mandatory, NULL, keyword); break; } } } if ((keyword = cupsGetOption("PageSize", num_options, options)) == NULL) keyword = cupsGetOption("media", num_options, options); media_source = _ppdCacheGetSource(pc, cupsGetOption("InputSlot", num_options, options)); media_type = _ppdCacheGetType(pc, cupsGetOption("MediaType", num_options, options)); size = _ppdCacheGetSize(pc, keyword); if (size || media_source || media_type) { /* * Add a media-col value... */ media_col = ippNew(); if (size) { media_size = ippNew(); ippAddInteger(media_size, IPP_TAG_ZERO, IPP_TAG_INTEGER, "x-dimension", size->width); ippAddInteger(media_size, IPP_TAG_ZERO, IPP_TAG_INTEGER, "y-dimension", size->length); ippAddCollection(media_col, IPP_TAG_ZERO, "media-size", media_size); } for (i = 0; i < media_col_sup->num_values; i ++) { if (size && !strcmp(media_col_sup->values[i].string.text, "media-left-margin")) ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-left-margin", size->left); else if (size && !strcmp(media_col_sup->values[i].string.text, "media-bottom-margin")) ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-bottom-margin", size->bottom); else if (size && !strcmp(media_col_sup->values[i].string.text, "media-right-margin")) ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-right-margin", size->right); else if (size && !strcmp(media_col_sup->values[i].string.text, "media-top-margin")) ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-top-margin", size->top); else if (media_source && !strcmp(media_col_sup->values[i].string.text, "media-source")) ippAddString(media_col, IPP_TAG_ZERO, IPP_TAG_KEYWORD, "media-source", NULL, media_source); else if (media_type && !strcmp(media_col_sup->values[i].string.text, "media-type")) ippAddString(media_col, IPP_TAG_ZERO, IPP_TAG_KEYWORD, "media-type", NULL, media_type); } ippAddCollection(request, IPP_TAG_JOB, "media-col", media_col); } if ((keyword = cupsGetOption("output-bin", num_options, options)) == NULL) { if ((choice = ppdFindMarkedChoice(ppd, "OutputBin")) != NULL) keyword = _ppdCacheGetBin(pc, choice->choice); } if (keyword) ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "output-bin", NULL, keyword); color_attr_name = print_color_mode_sup ? "print-color-mode" : "output-mode"; if ((keyword = cupsGetOption("print-color-mode", num_options, options)) == NULL) { if ((choice = ppdFindMarkedChoice(ppd, "ColorModel")) != NULL) { if (!_cups_strcasecmp(choice->choice, "Gray")) keyword = "monochrome"; else keyword = "color"; } } if (keyword && !strcmp(keyword, "monochrome")) { if (ippContainsString(print_color_mode_sup, "auto-monochrome")) keyword = "auto-monochrome"; else if (ippContainsString(print_color_mode_sup, "process-monochrome") && !ippContainsString(print_color_mode_sup, "monochrome")) keyword = "process-monochrome"; } if (keyword) ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, color_attr_name, NULL, keyword); if ((keyword = cupsGetOption("print-quality", num_options, options)) != NULL) ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", atoi(keyword)); else if ((choice = ppdFindMarkedChoice(ppd, "cupsPrintQuality")) != NULL) { if (!_cups_strcasecmp(choice->choice, "draft")) ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", IPP_QUALITY_DRAFT); else if (!_cups_strcasecmp(choice->choice, "normal")) ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", IPP_QUALITY_NORMAL); else if (!_cups_strcasecmp(choice->choice, "high")) ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", IPP_QUALITY_HIGH); } if ((keyword = cupsGetOption("sides", num_options, options)) != NULL) ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, keyword); else if (pc->sides_option && (choice = ppdFindMarkedChoice(ppd, pc->sides_option)) != NULL) { if (!_cups_strcasecmp(choice->choice, pc->sides_1sided)) ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, "one-sided"); else if (!_cups_strcasecmp(choice->choice, pc->sides_2sided_long)) ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, "two-sided-long-edge"); if (!_cups_strcasecmp(choice->choice, pc->sides_2sided_short)) ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, "two-sided-short-edge"); } /* * Copies... */ if ((keyword = cupsGetOption("multiple-document-handling", num_options, options)) != NULL) { if (strstr(keyword, "uncollated")) keyword = "false"; else keyword = "true"; } else if ((keyword = cupsGetOption("collate", num_options, options)) == NULL) keyword = "true"; if (format) { if (!_cups_strcasecmp(format, "image/gif") || !_cups_strcasecmp(format, "image/jp2") || !_cups_strcasecmp(format, "image/jpeg") || !_cups_strcasecmp(format, "image/png") || !_cups_strcasecmp(format, "image/tiff") || !_cups_strncasecmp(format, "image/x-", 8)) { /* * Collation makes no sense for single page image formats... */ keyword = "false"; } else if (!_cups_strncasecmp(format, "image/", 6) || !_cups_strcasecmp(format, "application/vnd.cups-raster")) { /* * Multi-page image formats will have copies applied by the upstream * filters... */ copies = 1; } } if (doc_handling_sup) { if (!_cups_strcasecmp(keyword, "true")) collate_str = "separate-documents-collated-copies"; else collate_str = "separate-documents-uncollated-copies"; for (i = 0; i < doc_handling_sup->num_values; i ++) { if (!strcmp(doc_handling_sup->values[i].string.text, collate_str)) { ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "multiple-document-handling", NULL, collate_str); break; } } if (i >= doc_handling_sup->num_values) copies = 1; } /* * Map finishing options... */ num_finishings = _ppdCacheGetFinishingValues(pc, num_options, options, (int)(sizeof(finishings) / sizeof(finishings[0])), finishings); if (num_finishings > 0) { ippAddIntegers(request, IPP_TAG_JOB, IPP_TAG_ENUM, "finishings", num_finishings, finishings); if (copies != finishings_copies && (keyword = cupsGetOption("job-impressions", num_options, options)) != NULL) { /* * Send job-pages-per-set attribute to apply finishings correctly... */ ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", atoi(keyword) / finishings_copies); } } return (copies); } /* * '_ppdCacheCreateWithFile()' - Create PPD cache and mapping data from a * written file. * * Use the @link _ppdCacheWriteFile@ function to write PWG mapping data to a * file. */ _ppd_cache_t * /* O - PPD cache and mapping data */ _ppdCacheCreateWithFile( const char *filename, /* I - File to read */ ipp_t **attrs) /* IO - IPP attributes, if any */ { cups_file_t *fp; /* File */ _ppd_cache_t *pc; /* PWG mapping data */ pwg_size_t *size; /* Current size */ pwg_map_t *map; /* Current map */ _pwg_finishings_t *finishings; /* Current finishings option */ int linenum, /* Current line number */ num_bins, /* Number of bins in file */ num_sizes, /* Number of sizes in file */ num_sources, /* Number of sources in file */ num_types; /* Number of types in file */ char line[2048], /* Current line */ *value, /* Pointer to value in line */ *valueptr, /* Pointer into value */ pwg_keyword[128], /* PWG keyword */ ppd_keyword[PPD_MAX_NAME]; /* PPD keyword */ _pwg_print_color_mode_t print_color_mode; /* Print color mode for preset */ _pwg_print_quality_t print_quality; /* Print quality for preset */ DEBUG_printf(("_ppdCacheCreateWithFile(filename=\"%s\")", filename)); /* * Range check input... */ if (attrs) *attrs = NULL; if (!filename) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (NULL); } /* * Open the file... */ if ((fp = cupsFileOpen(filename, "r")) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); return (NULL); } /* * Read the first line and make sure it has "#CUPS-PPD-CACHE-version" in it... */ if (!cupsFileGets(fp, line, sizeof(line))) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); DEBUG_puts("_ppdCacheCreateWithFile: Unable to read first line."); cupsFileClose(fp); return (NULL); } if (strncmp(line, "#CUPS-PPD-CACHE-", 16)) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); DEBUG_printf(("_ppdCacheCreateWithFile: Wrong first line \"%s\".", line)); cupsFileClose(fp); return (NULL); } if (atoi(line + 16) != _PPD_CACHE_VERSION) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Out of date PPD cache file."), 1); DEBUG_printf(("_ppdCacheCreateWithFile: Cache file has version %s, " "expected %d.", line + 16, _PPD_CACHE_VERSION)); cupsFileClose(fp); return (NULL); } /* * Allocate the mapping data structure... */ if ((pc = calloc(1, sizeof(_ppd_cache_t))) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); DEBUG_puts("_ppdCacheCreateWithFile: Unable to allocate _ppd_cache_t."); goto create_error; } pc->max_copies = 9999; /* * Read the file... */ linenum = 0; num_bins = 0; num_sizes = 0; num_sources = 0; num_types = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { DEBUG_printf(("_ppdCacheCreateWithFile: line=\"%s\", value=\"%s\", " "linenum=%d", line, value, linenum)); if (!value) { DEBUG_printf(("_ppdCacheCreateWithFile: Missing value on line %d.", linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } else if (!_cups_strcasecmp(line, "Filter")) { if (!pc->filters) pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)_cupsStrAlloc, (cups_afree_func_t)_cupsStrFree); cupsArrayAdd(pc->filters, value); } else if (!_cups_strcasecmp(line, "PreFilter")) { if (!pc->prefilters) pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)_cupsStrAlloc, (cups_afree_func_t)_cupsStrFree); cupsArrayAdd(pc->prefilters, value); } else if (!_cups_strcasecmp(line, "Product")) { pc->product = _cupsStrAlloc(value); } else if (!_cups_strcasecmp(line, "SingleFile")) { pc->single_file = !_cups_strcasecmp(value, "true"); } else if (!_cups_strcasecmp(line, "IPP")) { off_t pos = cupsFileTell(fp), /* Position in file */ length = strtol(value, NULL, 10); /* Length of IPP attributes */ if (attrs && *attrs) { DEBUG_puts("_ppdCacheCreateWithFile: IPP listed multiple times."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } else if (length <= 0) { DEBUG_puts("_ppdCacheCreateWithFile: Bad IPP length."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if (attrs) { /* * Read IPP attributes into the provided variable... */ *attrs = ippNew(); if (ippReadIO(fp, (ipp_iocb_t)cupsFileRead, 1, NULL, *attrs) != IPP_STATE_DATA) { DEBUG_puts("_ppdCacheCreateWithFile: Bad IPP data."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } } else { /* * Skip the IPP data entirely... */ cupsFileSeek(fp, pos + length); } if (cupsFileTell(fp) != (pos + length)) { DEBUG_puts("_ppdCacheCreateWithFile: Bad IPP data."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } } else if (!_cups_strcasecmp(line, "NumBins")) { if (num_bins > 0) { DEBUG_puts("_ppdCacheCreateWithFile: NumBins listed multiple times."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if ((num_bins = atoi(value)) <= 0 || num_bins > 65536) { DEBUG_printf(("_ppdCacheCreateWithFile: Bad NumBins value %d on line " "%d.", num_sizes, linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if ((pc->bins = calloc((size_t)num_bins, sizeof(pwg_map_t))) == NULL) { DEBUG_printf(("_ppdCacheCreateWithFile: Unable to allocate %d bins.", num_sizes)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); goto create_error; } } else if (!_cups_strcasecmp(line, "Bin")) { if (sscanf(value, "%127s%40s", pwg_keyword, ppd_keyword) != 2) { DEBUG_printf(("_ppdCacheCreateWithFile: Bad Bin on line %d.", linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if (pc->num_bins >= num_bins) { DEBUG_printf(("_ppdCacheCreateWithFile: Too many Bin's on line %d.", linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } map = pc->bins + pc->num_bins; map->pwg = _cupsStrAlloc(pwg_keyword); map->ppd = _cupsStrAlloc(ppd_keyword); pc->num_bins ++; } else if (!_cups_strcasecmp(line, "NumSizes")) { if (num_sizes > 0) { DEBUG_puts("_ppdCacheCreateWithFile: NumSizes listed multiple times."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if ((num_sizes = atoi(value)) < 0 || num_sizes > 65536) { DEBUG_printf(("_ppdCacheCreateWithFile: Bad NumSizes value %d on line " "%d.", num_sizes, linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if (num_sizes > 0) { if ((pc->sizes = calloc((size_t)num_sizes, sizeof(pwg_size_t))) == NULL) { DEBUG_printf(("_ppdCacheCreateWithFile: Unable to allocate %d sizes.", num_sizes)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); goto create_error; } } } else if (!_cups_strcasecmp(line, "Size")) { if (pc->num_sizes >= num_sizes) { DEBUG_printf(("_ppdCacheCreateWithFile: Too many Size's on line %d.", linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } size = pc->sizes + pc->num_sizes; if (sscanf(value, "%127s%40s%d%d%d%d%d%d", pwg_keyword, ppd_keyword, &(size->width), &(size->length), &(size->left), &(size->bottom), &(size->right), &(size->top)) != 8) { DEBUG_printf(("_ppdCacheCreateWithFile: Bad Size on line %d.", linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } size->map.pwg = _cupsStrAlloc(pwg_keyword); size->map.ppd = _cupsStrAlloc(ppd_keyword); pc->num_sizes ++; } else if (!_cups_strcasecmp(line, "CustomSize")) { if (pc->custom_max_width > 0) { DEBUG_printf(("_ppdCacheCreateWithFile: Too many CustomSize's on line " "%d.", linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if (sscanf(value, "%d%d%d%d%d%d%d%d", &(pc->custom_max_width), &(pc->custom_max_length), &(pc->custom_min_width), &(pc->custom_min_length), &(pc->custom_size.left), &(pc->custom_size.bottom), &(pc->custom_size.right), &(pc->custom_size.top)) != 8) { DEBUG_printf(("_ppdCacheCreateWithFile: Bad CustomSize on line %d.", linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "max", pc->custom_max_width, pc->custom_max_length, NULL); pc->custom_max_keyword = _cupsStrAlloc(pwg_keyword); pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "min", pc->custom_min_width, pc->custom_min_length, NULL); pc->custom_min_keyword = _cupsStrAlloc(pwg_keyword); } else if (!_cups_strcasecmp(line, "SourceOption")) { pc->source_option = _cupsStrAlloc(value); } else if (!_cups_strcasecmp(line, "NumSources")) { if (num_sources > 0) { DEBUG_puts("_ppdCacheCreateWithFile: NumSources listed multiple " "times."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if ((num_sources = atoi(value)) <= 0 || num_sources > 65536) { DEBUG_printf(("_ppdCacheCreateWithFile: Bad NumSources value %d on " "line %d.", num_sources, linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if ((pc->sources = calloc((size_t)num_sources, sizeof(pwg_map_t))) == NULL) { DEBUG_printf(("_ppdCacheCreateWithFile: Unable to allocate %d sources.", num_sources)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); goto create_error; } } else if (!_cups_strcasecmp(line, "Source")) { if (sscanf(value, "%127s%40s", pwg_keyword, ppd_keyword) != 2) { DEBUG_printf(("_ppdCacheCreateWithFile: Bad Source on line %d.", linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if (pc->num_sources >= num_sources) { DEBUG_printf(("_ppdCacheCreateWithFile: Too many Source's on line %d.", linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } map = pc->sources + pc->num_sources; map->pwg = _cupsStrAlloc(pwg_keyword); map->ppd = _cupsStrAlloc(ppd_keyword); pc->num_sources ++; } else if (!_cups_strcasecmp(line, "NumTypes")) { if (num_types > 0) { DEBUG_puts("_ppdCacheCreateWithFile: NumTypes listed multiple times."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if ((num_types = atoi(value)) <= 0 || num_types > 65536) { DEBUG_printf(("_ppdCacheCreateWithFile: Bad NumTypes value %d on " "line %d.", num_types, linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if ((pc->types = calloc((size_t)num_types, sizeof(pwg_map_t))) == NULL) { DEBUG_printf(("_ppdCacheCreateWithFile: Unable to allocate %d types.", num_types)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); goto create_error; } } else if (!_cups_strcasecmp(line, "Type")) { if (sscanf(value, "%127s%40s", pwg_keyword, ppd_keyword) != 2) { DEBUG_printf(("_ppdCacheCreateWithFile: Bad Type on line %d.", linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if (pc->num_types >= num_types) { DEBUG_printf(("_ppdCacheCreateWithFile: Too many Type's on line %d.", linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } map = pc->types + pc->num_types; map->pwg = _cupsStrAlloc(pwg_keyword); map->ppd = _cupsStrAlloc(ppd_keyword); pc->num_types ++; } else if (!_cups_strcasecmp(line, "Preset")) { /* * Preset output-mode print-quality name=value ... */ print_color_mode = (_pwg_print_color_mode_t)strtol(value, &valueptr, 10); print_quality = (_pwg_print_quality_t)strtol(valueptr, &valueptr, 10); if (print_color_mode < _PWG_PRINT_COLOR_MODE_MONOCHROME || print_color_mode >= _PWG_PRINT_COLOR_MODE_MAX || print_quality < _PWG_PRINT_QUALITY_DRAFT || print_quality >= _PWG_PRINT_QUALITY_MAX || valueptr == value || !*valueptr) { DEBUG_printf(("_ppdCacheCreateWithFile: Bad Preset on line %d.", linenum)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } pc->num_presets[print_color_mode][print_quality] = cupsParseOptions(valueptr, 0, pc->presets[print_color_mode] + print_quality); } else if (!_cups_strcasecmp(line, "SidesOption")) pc->sides_option = _cupsStrAlloc(value); else if (!_cups_strcasecmp(line, "Sides1Sided")) pc->sides_1sided = _cupsStrAlloc(value); else if (!_cups_strcasecmp(line, "Sides2SidedLong")) pc->sides_2sided_long = _cupsStrAlloc(value); else if (!_cups_strcasecmp(line, "Sides2SidedShort")) pc->sides_2sided_short = _cupsStrAlloc(value); else if (!_cups_strcasecmp(line, "Finishings")) { if (!pc->finishings) pc->finishings = cupsArrayNew3((cups_array_func_t)pwg_compare_finishings, NULL, NULL, 0, NULL, (cups_afree_func_t)pwg_free_finishings); if ((finishings = calloc(1, sizeof(_pwg_finishings_t))) == NULL) goto create_error; finishings->value = (ipp_finishings_t)strtol(value, &valueptr, 10); finishings->num_options = cupsParseOptions(valueptr, 0, &(finishings->options)); cupsArrayAdd(pc->finishings, finishings); } else if (!_cups_strcasecmp(line, "MaxCopies")) pc->max_copies = atoi(value); else if (!_cups_strcasecmp(line, "ChargeInfoURI")) pc->charge_info_uri = _cupsStrAlloc(value); else if (!_cups_strcasecmp(line, "JobAccountId")) pc->account_id = !_cups_strcasecmp(value, "true"); else if (!_cups_strcasecmp(line, "JobAccountingUserId")) pc->accounting_user_id = !_cups_strcasecmp(value, "true"); else if (!_cups_strcasecmp(line, "JobPassword")) pc->password = _cupsStrAlloc(value); else if (!_cups_strcasecmp(line, "Mandatory")) { if (pc->mandatory) _cupsArrayAddStrings(pc->mandatory, value, ' '); else pc->mandatory = _cupsArrayNewStrings(value, ' '); } else if (!_cups_strcasecmp(line, "SupportFile")) { if (!pc->support_files) pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)_cupsStrAlloc, (cups_afree_func_t)_cupsStrFree); cupsArrayAdd(pc->support_files, value); } else { DEBUG_printf(("_ppdCacheCreateWithFile: Unknown %s on line %d.", line, linenum)); } } if (pc->num_sizes < num_sizes) { DEBUG_printf(("_ppdCacheCreateWithFile: Not enough sizes (%d < %d).", pc->num_sizes, num_sizes)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if (pc->num_sources < num_sources) { DEBUG_printf(("_ppdCacheCreateWithFile: Not enough sources (%d < %d).", pc->num_sources, num_sources)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } if (pc->num_types < num_types) { DEBUG_printf(("_ppdCacheCreateWithFile: Not enough types (%d < %d).", pc->num_types, num_types)); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1); goto create_error; } cupsFileClose(fp); return (pc); /* * If we get here the file was bad - free any data and return... */ create_error: cupsFileClose(fp); _ppdCacheDestroy(pc); if (attrs) { ippDelete(*attrs); *attrs = NULL; } return (NULL); } /* * '_ppdCacheCreateWithPPD()' - Create PWG mapping data from a PPD file. */ _ppd_cache_t * /* O - PPD cache and mapping data */ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ { int i, j, k; /* Looping vars */ _ppd_cache_t *pc; /* PWG mapping data */ ppd_option_t *input_slot, /* InputSlot option */ *media_type, /* MediaType option */ *output_bin, /* OutputBin option */ *color_model, /* ColorModel option */ *duplex; /* Duplex option */ ppd_choice_t *choice; /* Current InputSlot/MediaType */ pwg_map_t *map; /* Current source/type map */ ppd_attr_t *ppd_attr; /* Current PPD preset attribute */ int num_options; /* Number of preset options and props */ cups_option_t *options; /* Preset options and properties */ ppd_size_t *ppd_size; /* Current PPD size */ pwg_size_t *pwg_size; /* Current PWG size */ char pwg_keyword[3 + PPD_MAX_NAME + 1 + 12 + 1 + 12 + 3], /* PWG keyword string */ ppd_name[PPD_MAX_NAME]; /* Normalized PPD name */ const char *pwg_name; /* Standard PWG media name */ pwg_media_t *pwg_media; /* PWG media data */ _pwg_print_color_mode_t pwg_print_color_mode; /* print-color-mode index */ _pwg_print_quality_t pwg_print_quality; /* print-quality index */ int similar; /* Are the old and new size similar? */ pwg_size_t *old_size; /* Current old size */ int old_imageable, /* Old imageable length in 2540ths */ old_borderless, /* Old borderless state */ old_known_pwg; /* Old PWG name is well-known */ int new_width, /* New width in 2540ths */ new_length, /* New length in 2540ths */ new_left, /* New left margin in 2540ths */ new_bottom, /* New bottom margin in 2540ths */ new_right, /* New right margin in 2540ths */ new_top, /* New top margin in 2540ths */ new_imageable, /* New imageable length in 2540ths */ new_borderless, /* New borderless state */ new_known_pwg; /* New PWG name is well-known */ pwg_size_t *new_size; /* New size to add, if any */ const char *filter; /* Current filter */ _pwg_finishings_t *finishings; /* Current finishings value */ DEBUG_printf(("_ppdCacheCreateWithPPD(ppd=%p)", ppd)); /* * Range check input... */ if (!ppd) return (NULL); /* * Allocate memory... */ if ((pc = calloc(1, sizeof(_ppd_cache_t))) == NULL) { DEBUG_puts("_ppdCacheCreateWithPPD: Unable to allocate _ppd_cache_t."); goto create_error; } /* * Copy and convert size data... */ if (ppd->num_sizes > 0) { if ((pc->sizes = calloc((size_t)ppd->num_sizes, sizeof(pwg_size_t))) == NULL) { DEBUG_printf(("_ppdCacheCreateWithPPD: Unable to allocate %d " "pwg_size_t's.", ppd->num_sizes)); goto create_error; } for (i = ppd->num_sizes, pwg_size = pc->sizes, ppd_size = ppd->sizes; i > 0; i --, ppd_size ++) { /* * Don't copy over custom size... */ if (!_cups_strcasecmp(ppd_size->name, "Custom")) continue; /* * Convert the PPD size name to the corresponding PWG keyword name. */ if ((pwg_media = pwgMediaForPPD(ppd_size->name)) != NULL) { /* * Standard name, do we have conflicts? */ for (j = 0; j < pc->num_sizes; j ++) if (!strcmp(pc->sizes[j].map.pwg, pwg_media->pwg)) { pwg_media = NULL; break; } } if (pwg_media) { /* * Standard name and no conflicts, use it! */ pwg_name = pwg_media->pwg; new_known_pwg = 1; } else { /* * Not a standard name; convert it to a PWG vendor name of the form: * * pp_lowerppd_WIDTHxHEIGHTuu */ pwg_name = pwg_keyword; new_known_pwg = 0; pwg_unppdize_name(ppd_size->name, ppd_name, sizeof(ppd_name), "_."); pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), NULL, ppd_name, PWG_FROM_POINTS(ppd_size->width), PWG_FROM_POINTS(ppd_size->length), NULL); } /* * If we have a similar paper with non-zero margins then we only want to * keep it if it has a larger imageable area length. The NULL check is for * dimensions that are <= 0... */ if ((pwg_media = _pwgMediaNearSize(PWG_FROM_POINTS(ppd_size->width), PWG_FROM_POINTS(ppd_size->length), 0)) == NULL) continue; new_width = pwg_media->width; new_length = pwg_media->length; new_left = PWG_FROM_POINTS(ppd_size->left); new_bottom = PWG_FROM_POINTS(ppd_size->bottom); new_right = PWG_FROM_POINTS(ppd_size->width - ppd_size->right); new_top = PWG_FROM_POINTS(ppd_size->length - ppd_size->top); new_imageable = new_length - new_top - new_bottom; new_borderless = new_bottom == 0 && new_top == 0 && new_left == 0 && new_right == 0; for (k = pc->num_sizes, similar = 0, old_size = pc->sizes, new_size = NULL; k > 0 && !similar; k --, old_size ++) { old_imageable = old_size->length - old_size->top - old_size->bottom; old_borderless = old_size->left == 0 && old_size->bottom == 0 && old_size->right == 0 && old_size->top == 0; old_known_pwg = strncmp(old_size->map.pwg, "oe_", 3) && strncmp(old_size->map.pwg, "om_", 3); similar = old_borderless == new_borderless && _PWG_EQUIVALENT(old_size->width, new_width) && _PWG_EQUIVALENT(old_size->length, new_length); if (similar && (new_known_pwg || (!old_known_pwg && new_imageable > old_imageable))) { /* * The new paper has a larger imageable area so it could replace * the older paper. Regardless of the imageable area, we always * prefer the size with a well-known PWG name. */ new_size = old_size; _cupsStrFree(old_size->map.ppd); _cupsStrFree(old_size->map.pwg); } } if (!similar) { /* * The paper was unique enough to deserve its own entry so add it to the * end. */ new_size = pwg_size ++; pc->num_sizes ++; } if (new_size) { /* * Save this size... */ new_size->map.ppd = _cupsStrAlloc(ppd_size->name); new_size->map.pwg = _cupsStrAlloc(pwg_name); new_size->width = new_width; new_size->length = new_length; new_size->left = new_left; new_size->bottom = new_bottom; new_size->right = new_right; new_size->top = new_top; } } } if (ppd->variable_sizes) { /* * Generate custom size data... */ pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "max", PWG_FROM_POINTS(ppd->custom_max[0]), PWG_FROM_POINTS(ppd->custom_max[1]), NULL); pc->custom_max_keyword = _cupsStrAlloc(pwg_keyword); pc->custom_max_width = PWG_FROM_POINTS(ppd->custom_max[0]); pc->custom_max_length = PWG_FROM_POINTS(ppd->custom_max[1]); pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "min", PWG_FROM_POINTS(ppd->custom_min[0]), PWG_FROM_POINTS(ppd->custom_min[1]), NULL); pc->custom_min_keyword = _cupsStrAlloc(pwg_keyword); pc->custom_min_width = PWG_FROM_POINTS(ppd->custom_min[0]); pc->custom_min_length = PWG_FROM_POINTS(ppd->custom_min[1]); pc->custom_size.left = PWG_FROM_POINTS(ppd->custom_margins[0]); pc->custom_size.bottom = PWG_FROM_POINTS(ppd->custom_margins[1]); pc->custom_size.right = PWG_FROM_POINTS(ppd->custom_margins[2]); pc->custom_size.top = PWG_FROM_POINTS(ppd->custom_margins[3]); } /* * Copy and convert InputSlot data... */ if ((input_slot = ppdFindOption(ppd, "InputSlot")) == NULL) input_slot = ppdFindOption(ppd, "HPPaperSource"); if (input_slot) { pc->source_option = _cupsStrAlloc(input_slot->keyword); if ((pc->sources = calloc((size_t)input_slot->num_choices, sizeof(pwg_map_t))) == NULL) { DEBUG_printf(("_ppdCacheCreateWithPPD: Unable to allocate %d " "pwg_map_t's for InputSlot.", input_slot->num_choices)); goto create_error; } pc->num_sources = input_slot->num_choices; for (i = input_slot->num_choices, choice = input_slot->choices, map = pc->sources; i > 0; i --, choice ++, map ++) { if (!_cups_strncasecmp(choice->choice, "Auto", 4) || !_cups_strcasecmp(choice->choice, "Default")) pwg_name = "auto"; else if (!_cups_strcasecmp(choice->choice, "Cassette")) pwg_name = "main"; else if (!_cups_strcasecmp(choice->choice, "PhotoTray")) pwg_name = "photo"; else if (!_cups_strcasecmp(choice->choice, "CDTray")) pwg_name = "disc"; else if (!_cups_strncasecmp(choice->choice, "Multipurpose", 12) || !_cups_strcasecmp(choice->choice, "MP") || !_cups_strcasecmp(choice->choice, "MPTray")) pwg_name = "by-pass-tray"; else if (!_cups_strcasecmp(choice->choice, "LargeCapacity")) pwg_name = "large-capacity"; else if (!_cups_strncasecmp(choice->choice, "Lower", 5)) pwg_name = "bottom"; else if (!_cups_strncasecmp(choice->choice, "Middle", 6)) pwg_name = "middle"; else if (!_cups_strncasecmp(choice->choice, "Upper", 5)) pwg_name = "top"; else if (!_cups_strncasecmp(choice->choice, "Side", 4)) pwg_name = "side"; else if (!_cups_strcasecmp(choice->choice, "Roll")) pwg_name = "main-roll"; else { /* * Convert PPD name to lowercase... */ pwg_name = pwg_keyword; pwg_unppdize_name(choice->choice, pwg_keyword, sizeof(pwg_keyword), "_"); } map->pwg = _cupsStrAlloc(pwg_name); map->ppd = _cupsStrAlloc(choice->choice); } } /* * Copy and convert MediaType data... */ if ((media_type = ppdFindOption(ppd, "MediaType")) != NULL) { if ((pc->types = calloc((size_t)media_type->num_choices, sizeof(pwg_map_t))) == NULL) { DEBUG_printf(("_ppdCacheCreateWithPPD: Unable to allocate %d " "pwg_map_t's for MediaType.", media_type->num_choices)); goto create_error; } pc->num_types = media_type->num_choices; for (i = media_type->num_choices, choice = media_type->choices, map = pc->types; i > 0; i --, choice ++, map ++) { if (!_cups_strncasecmp(choice->choice, "Auto", 4) || !_cups_strcasecmp(choice->choice, "Any") || !_cups_strcasecmp(choice->choice, "Default")) pwg_name = "auto"; else if (!_cups_strncasecmp(choice->choice, "Card", 4)) pwg_name = "cardstock"; else if (!_cups_strncasecmp(choice->choice, "Env", 3)) pwg_name = "envelope"; else if (!_cups_strncasecmp(choice->choice, "Gloss", 5)) pwg_name = "photographic-glossy"; else if (!_cups_strcasecmp(choice->choice, "HighGloss")) pwg_name = "photographic-high-gloss"; else if (!_cups_strcasecmp(choice->choice, "Matte")) pwg_name = "photographic-matte"; else if (!_cups_strncasecmp(choice->choice, "Plain", 5)) pwg_name = "stationery"; else if (!_cups_strncasecmp(choice->choice, "Coated", 6)) pwg_name = "stationery-coated"; else if (!_cups_strcasecmp(choice->choice, "Inkjet")) pwg_name = "stationery-inkjet"; else if (!_cups_strcasecmp(choice->choice, "Letterhead")) pwg_name = "stationery-letterhead"; else if (!_cups_strncasecmp(choice->choice, "Preprint", 8)) pwg_name = "stationery-preprinted"; else if (!_cups_strcasecmp(choice->choice, "Recycled")) pwg_name = "stationery-recycled"; else if (!_cups_strncasecmp(choice->choice, "Transparen", 10)) pwg_name = "transparency"; else { /* * Convert PPD name to lowercase... */ pwg_name = pwg_keyword; pwg_unppdize_name(choice->choice, pwg_keyword, sizeof(pwg_keyword), "_"); } map->pwg = _cupsStrAlloc(pwg_name); map->ppd = _cupsStrAlloc(choice->choice); } } /* * Copy and convert OutputBin data... */ if ((output_bin = ppdFindOption(ppd, "OutputBin")) != NULL) { if ((pc->bins = calloc((size_t)output_bin->num_choices, sizeof(pwg_map_t))) == NULL) { DEBUG_printf(("_ppdCacheCreateWithPPD: Unable to allocate %d " "pwg_map_t's for OutputBin.", output_bin->num_choices)); goto create_error; } pc->num_bins = output_bin->num_choices; for (i = output_bin->num_choices, choice = output_bin->choices, map = pc->bins; i > 0; i --, choice ++, map ++) { pwg_unppdize_name(choice->choice, pwg_keyword, sizeof(pwg_keyword), "_"); map->pwg = _cupsStrAlloc(pwg_keyword); map->ppd = _cupsStrAlloc(choice->choice); } } if ((ppd_attr = ppdFindAttr(ppd, "APPrinterPreset", NULL)) != NULL) { /* * Copy and convert APPrinterPreset (output-mode + print-quality) data... */ const char *quality, /* com.apple.print.preset.quality value */ *output_mode, /* com.apple.print.preset.output-mode value */ *color_model_val, /* ColorModel choice */ *graphicsType, /* com.apple.print.preset.graphicsType value */ *media_front_coating; /* com.apple.print.preset.media-front-coating value */ do { num_options = _ppdParseOptions(ppd_attr->value, 0, &options, _PPD_PARSE_ALL); if ((quality = cupsGetOption("com.apple.print.preset.quality", num_options, options)) != NULL) { /* * Get the print-quality for this preset... */ if (!strcmp(quality, "low")) pwg_print_quality = _PWG_PRINT_QUALITY_DRAFT; else if (!strcmp(quality, "high")) pwg_print_quality = _PWG_PRINT_QUALITY_HIGH; else pwg_print_quality = _PWG_PRINT_QUALITY_NORMAL; /* * Ignore graphicsType "Photo" presets that are not high quality. */ graphicsType = cupsGetOption("com.apple.print.preset.graphicsType", num_options, options); if (pwg_print_quality != _PWG_PRINT_QUALITY_HIGH && graphicsType && !strcmp(graphicsType, "Photo")) continue; /* * Ignore presets for normal and draft quality where the coating * isn't "none" or "autodetect". */ media_front_coating = cupsGetOption( "com.apple.print.preset.media-front-coating", num_options, options); if (pwg_print_quality != _PWG_PRINT_QUALITY_HIGH && media_front_coating && strcmp(media_front_coating, "none") && strcmp(media_front_coating, "autodetect")) continue; /* * Get the output mode for this preset... */ output_mode = cupsGetOption("com.apple.print.preset.output-mode", num_options, options); color_model_val = cupsGetOption("ColorModel", num_options, options); if (output_mode) { if (!strcmp(output_mode, "monochrome")) pwg_print_color_mode = _PWG_PRINT_COLOR_MODE_MONOCHROME; else pwg_print_color_mode = _PWG_PRINT_COLOR_MODE_COLOR; } else if (color_model_val) { if (!_cups_strcasecmp(color_model_val, "Gray")) pwg_print_color_mode = _PWG_PRINT_COLOR_MODE_MONOCHROME; else pwg_print_color_mode = _PWG_PRINT_COLOR_MODE_COLOR; } else pwg_print_color_mode = _PWG_PRINT_COLOR_MODE_COLOR; /* * Save the options for this combination as needed... */ if (!pc->num_presets[pwg_print_color_mode][pwg_print_quality]) pc->num_presets[pwg_print_color_mode][pwg_print_quality] = _ppdParseOptions(ppd_attr->value, 0, pc->presets[pwg_print_color_mode] + pwg_print_quality, _PPD_PARSE_OPTIONS); } cupsFreeOptions(num_options, options); } while ((ppd_attr = ppdFindNextAttr(ppd, "APPrinterPreset", NULL)) != NULL); } if (!pc->num_presets[_PWG_PRINT_COLOR_MODE_MONOCHROME][_PWG_PRINT_QUALITY_DRAFT] && !pc->num_presets[_PWG_PRINT_COLOR_MODE_MONOCHROME][_PWG_PRINT_QUALITY_NORMAL] && !pc->num_presets[_PWG_PRINT_COLOR_MODE_MONOCHROME][_PWG_PRINT_QUALITY_HIGH]) { /* * Try adding some common color options to create grayscale presets. These * are listed in order of popularity... */ const char *color_option = NULL, /* Color control option */ *gray_choice = NULL; /* Choice to select grayscale */ if ((color_model = ppdFindOption(ppd, "ColorModel")) != NULL && ppdFindChoice(color_model, "Gray")) { color_option = "ColorModel"; gray_choice = "Gray"; } else if ((color_model = ppdFindOption(ppd, "HPColorMode")) != NULL && ppdFindChoice(color_model, "grayscale")) { color_option = "HPColorMode"; gray_choice = "grayscale"; } else if ((color_model = ppdFindOption(ppd, "BRMonoColor")) != NULL && ppdFindChoice(color_model, "Mono")) { color_option = "BRMonoColor"; gray_choice = "Mono"; } else if ((color_model = ppdFindOption(ppd, "CNIJSGrayScale")) != NULL && ppdFindChoice(color_model, "1")) { color_option = "CNIJSGrayScale"; gray_choice = "1"; } else if ((color_model = ppdFindOption(ppd, "HPColorAsGray")) != NULL && ppdFindChoice(color_model, "True")) { color_option = "HPColorAsGray"; gray_choice = "True"; } if (color_option && gray_choice) { /* * Copy and convert ColorModel (output-mode) data... */ cups_option_t *coption, /* Color option */ *moption; /* Monochrome option */ for (pwg_print_quality = _PWG_PRINT_QUALITY_DRAFT; pwg_print_quality < _PWG_PRINT_QUALITY_MAX; pwg_print_quality ++) { if (pc->num_presets[_PWG_PRINT_COLOR_MODE_COLOR][pwg_print_quality]) { /* * Copy the color options... */ num_options = pc->num_presets[_PWG_PRINT_COLOR_MODE_COLOR] [pwg_print_quality]; options = calloc(sizeof(cups_option_t), (size_t)num_options); if (options) { for (i = num_options, moption = options, coption = pc->presets[_PWG_PRINT_COLOR_MODE_COLOR] [pwg_print_quality]; i > 0; i --, moption ++, coption ++) { moption->name = _cupsStrRetain(coption->name); moption->value = _cupsStrRetain(coption->value); } pc->num_presets[_PWG_PRINT_COLOR_MODE_MONOCHROME][pwg_print_quality] = num_options; pc->presets[_PWG_PRINT_COLOR_MODE_MONOCHROME][pwg_print_quality] = options; } } else if (pwg_print_quality != _PWG_PRINT_QUALITY_NORMAL) continue; /* * Add the grayscale option to the preset... */ pc->num_presets[_PWG_PRINT_COLOR_MODE_MONOCHROME][pwg_print_quality] = cupsAddOption(color_option, gray_choice, pc->num_presets[_PWG_PRINT_COLOR_MODE_MONOCHROME] [pwg_print_quality], pc->presets[_PWG_PRINT_COLOR_MODE_MONOCHROME] + pwg_print_quality); } } } /* * Copy and convert Duplex (sides) data... */ if ((duplex = ppdFindOption(ppd, "Duplex")) == NULL) if ((duplex = ppdFindOption(ppd, "JCLDuplex")) == NULL) if ((duplex = ppdFindOption(ppd, "EFDuplex")) == NULL) if ((duplex = ppdFindOption(ppd, "EFDuplexing")) == NULL) duplex = ppdFindOption(ppd, "KD03Duplex"); if (duplex) { pc->sides_option = _cupsStrAlloc(duplex->keyword); for (i = duplex->num_choices, choice = duplex->choices; i > 0; i --, choice ++) { if ((!_cups_strcasecmp(choice->choice, "None") || !_cups_strcasecmp(choice->choice, "False")) && !pc->sides_1sided) pc->sides_1sided = _cupsStrAlloc(choice->choice); else if ((!_cups_strcasecmp(choice->choice, "DuplexNoTumble") || !_cups_strcasecmp(choice->choice, "LongEdge") || !_cups_strcasecmp(choice->choice, "Top")) && !pc->sides_2sided_long) pc->sides_2sided_long = _cupsStrAlloc(choice->choice); else if ((!_cups_strcasecmp(choice->choice, "DuplexTumble") || !_cups_strcasecmp(choice->choice, "ShortEdge") || !_cups_strcasecmp(choice->choice, "Bottom")) && !pc->sides_2sided_short) pc->sides_2sided_short = _cupsStrAlloc(choice->choice); } } /* * Copy filters and pre-filters... */ pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)_cupsStrAlloc, (cups_afree_func_t)_cupsStrFree); cupsArrayAdd(pc->filters, "application/vnd.cups-raw application/octet-stream 0 -"); if ((ppd_attr = ppdFindAttr(ppd, "cupsFilter2", NULL)) != NULL) { do { cupsArrayAdd(pc->filters, ppd_attr->value); } while ((ppd_attr = ppdFindNextAttr(ppd, "cupsFilter2", NULL)) != NULL); } else if (ppd->num_filters > 0) { for (i = 0; i < ppd->num_filters; i ++) cupsArrayAdd(pc->filters, ppd->filters[i]); } else cupsArrayAdd(pc->filters, "application/vnd.cups-postscript 0 -"); /* * See if we have a command filter... */ for (filter = (const char *)cupsArrayFirst(pc->filters); filter; filter = (const char *)cupsArrayNext(pc->filters)) if (!_cups_strncasecmp(filter, "application/vnd.cups-command", 28) && _cups_isspace(filter[28])) break; if (!filter && ((ppd_attr = ppdFindAttr(ppd, "cupsCommands", NULL)) == NULL || _cups_strcasecmp(ppd_attr->value, "none"))) { /* * No command filter and no cupsCommands keyword telling us not to use one. * See if this is a PostScript printer, and if so add a PostScript command * filter... */ for (filter = (const char *)cupsArrayFirst(pc->filters); filter; filter = (const char *)cupsArrayNext(pc->filters)) if (!_cups_strncasecmp(filter, "application/vnd.cups-postscript", 31) && _cups_isspace(filter[31])) break; if (filter) cupsArrayAdd(pc->filters, "application/vnd.cups-command application/postscript 100 " "commandtops"); } if ((ppd_attr = ppdFindAttr(ppd, "cupsPreFilter", NULL)) != NULL) { pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)_cupsStrAlloc, (cups_afree_func_t)_cupsStrFree); do { cupsArrayAdd(pc->prefilters, ppd_attr->value); } while ((ppd_attr = ppdFindNextAttr(ppd, "cupsPreFilter", NULL)) != NULL); } if ((ppd_attr = ppdFindAttr(ppd, "cupsSingleFile", NULL)) != NULL) pc->single_file = !_cups_strcasecmp(ppd_attr->value, "true"); /* * Copy the product string, if any... */ if (ppd->product) pc->product = _cupsStrAlloc(ppd->product); /* * Copy finishings mapping data... */ if ((ppd_attr = ppdFindAttr(ppd, "cupsIPPFinishings", NULL)) != NULL) { /* * Have proper vendor mapping of IPP finishings values to PPD options... */ pc->finishings = cupsArrayNew3((cups_array_func_t)pwg_compare_finishings, NULL, NULL, 0, NULL, (cups_afree_func_t)pwg_free_finishings); do { if ((finishings = calloc(1, sizeof(_pwg_finishings_t))) == NULL) goto create_error; finishings->value = (ipp_finishings_t)atoi(ppd_attr->spec); finishings->num_options = _ppdParseOptions(ppd_attr->value, 0, &(finishings->options), _PPD_PARSE_OPTIONS); cupsArrayAdd(pc->finishings, finishings); } while ((ppd_attr = ppdFindNextAttr(ppd, "cupsIPPFinishings", NULL)) != NULL); } else { /* * No IPP mapping data, try to map common/standard PPD keywords... */ ppd_option_t *ppd_option; /* PPD option */ pc->finishings = cupsArrayNew3((cups_array_func_t)pwg_compare_finishings, NULL, NULL, 0, NULL, (cups_afree_func_t)pwg_free_finishings); if ((ppd_option = ppdFindOption(ppd, "StapleLocation")) != NULL) { /* * Add staple finishings... */ if (ppdFindChoice(ppd_option, "SinglePortrait")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_STAPLE_TOP_LEFT, "StapleLocation", "SinglePortrait"); if (ppdFindChoice(ppd_option, "UpperLeft")) /* Ricoh extension */ pwg_add_finishing(pc->finishings, IPP_FINISHINGS_STAPLE_TOP_LEFT, "StapleLocation", "UpperLeft"); if (ppdFindChoice(ppd_option, "UpperRight")) /* Ricoh extension */ pwg_add_finishing(pc->finishings, IPP_FINISHINGS_STAPLE_TOP_RIGHT, "StapleLocation", "UpperRight"); if (ppdFindChoice(ppd_option, "SingleLandscape")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_STAPLE_BOTTOM_LEFT, "StapleLocation", "SingleLandscape"); if (ppdFindChoice(ppd_option, "DualLandscape")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_STAPLE_DUAL_LEFT, "StapleLocation", "DualLandscape"); } if ((ppd_option = ppdFindOption(ppd, "RIPunch")) != NULL) { /* * Add (Ricoh) punch finishings... */ if (ppdFindChoice(ppd_option, "Left2")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_PUNCH_DUAL_LEFT, "RIPunch", "Left2"); if (ppdFindChoice(ppd_option, "Left3")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_PUNCH_TRIPLE_LEFT, "RIPunch", "Left3"); if (ppdFindChoice(ppd_option, "Left4")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_PUNCH_QUAD_LEFT, "RIPunch", "Left4"); if (ppdFindChoice(ppd_option, "Right2")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_PUNCH_DUAL_RIGHT, "RIPunch", "Right2"); if (ppdFindChoice(ppd_option, "Right3")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_PUNCH_TRIPLE_RIGHT, "RIPunch", "Right3"); if (ppdFindChoice(ppd_option, "Right4")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_PUNCH_QUAD_RIGHT, "RIPunch", "Right4"); if (ppdFindChoice(ppd_option, "Upper2")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_PUNCH_DUAL_TOP, "RIPunch", "Upper2"); if (ppdFindChoice(ppd_option, "Upper3")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_PUNCH_TRIPLE_TOP, "RIPunch", "Upper3"); if (ppdFindChoice(ppd_option, "Upper4")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_PUNCH_QUAD_TOP, "RIPunch", "Upper4"); } if ((ppd_option = ppdFindOption(ppd, "BindEdge")) != NULL) { /* * Add bind finishings... */ if (ppdFindChoice(ppd_option, "Left")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_BIND_LEFT, "BindEdge", "Left"); if (ppdFindChoice(ppd_option, "Right")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_BIND_RIGHT, "BindEdge", "Right"); if (ppdFindChoice(ppd_option, "Top")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_BIND_TOP, "BindEdge", "Top"); if (ppdFindChoice(ppd_option, "Bottom")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_BIND_BOTTOM, "BindEdge", "Bottom"); } if ((ppd_option = ppdFindOption(ppd, "FoldType")) != NULL) { /* * Add (Adobe) fold finishings... */ if (ppdFindChoice(ppd_option, "ZFold")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_FOLD_Z, "FoldType", "ZFold"); if (ppdFindChoice(ppd_option, "Saddle")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_FOLD_HALF, "FoldType", "Saddle"); if (ppdFindChoice(ppd_option, "DoubleGate")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_FOLD_DOUBLE_GATE, "FoldType", "DoubleGate"); if (ppdFindChoice(ppd_option, "LeftGate")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_FOLD_LEFT_GATE, "FoldType", "LeftGate"); if (ppdFindChoice(ppd_option, "RightGate")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_FOLD_RIGHT_GATE, "FoldType", "RightGate"); if (ppdFindChoice(ppd_option, "Letter")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_FOLD_LETTER, "FoldType", "Letter"); if (ppdFindChoice(ppd_option, "XFold")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_FOLD_POSTER, "FoldType", "XFold"); } if ((ppd_option = ppdFindOption(ppd, "RIFoldType")) != NULL) { /* * Add (Ricoh) fold finishings... */ if (ppdFindChoice(ppd_option, "OutsideTwoFold")) pwg_add_finishing(pc->finishings, IPP_FINISHINGS_FOLD_LETTER, "RIFoldType", "OutsideTwoFold"); } if (cupsArrayCount(pc->finishings) == 0) { cupsArrayDelete(pc->finishings); pc->finishings = NULL; } } /* * Max copies... */ if ((ppd_attr = ppdFindAttr(ppd, "cupsMaxCopies", NULL)) != NULL) pc->max_copies = atoi(ppd_attr->value); else if (ppd->manual_copies) pc->max_copies = 1; else pc->max_copies = 9999; /* * cupsChargeInfoURI, cupsJobAccountId, cupsJobAccountingUserId, * cupsJobPassword, and cupsMandatory. */ if ((ppd_attr = ppdFindAttr(ppd, "cupsChargeInfoURI", NULL)) != NULL) pc->charge_info_uri = _cupsStrAlloc(ppd_attr->value); if ((ppd_attr = ppdFindAttr(ppd, "cupsJobAccountId", NULL)) != NULL) pc->account_id = !_cups_strcasecmp(ppd_attr->value, "true"); if ((ppd_attr = ppdFindAttr(ppd, "cupsJobAccountingUserId", NULL)) != NULL) pc->accounting_user_id = !_cups_strcasecmp(ppd_attr->value, "true"); if ((ppd_attr = ppdFindAttr(ppd, "cupsJobPassword", NULL)) != NULL) pc->password = _cupsStrAlloc(ppd_attr->value); if ((ppd_attr = ppdFindAttr(ppd, "cupsMandatory", NULL)) != NULL) pc->mandatory = _cupsArrayNewStrings(ppd_attr->value, ' '); /* * Support files... */ pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)_cupsStrAlloc, (cups_afree_func_t)_cupsStrFree); for (ppd_attr = ppdFindAttr(ppd, "cupsICCProfile", NULL); ppd_attr; ppd_attr = ppdFindNextAttr(ppd, "cupsICCProfile", NULL)) cupsArrayAdd(pc->support_files, ppd_attr->value); if ((ppd_attr = ppdFindAttr(ppd, "APPrinterIconPath", NULL)) != NULL) cupsArrayAdd(pc->support_files, ppd_attr->value); /* * Return the cache data... */ return (pc); /* * If we get here we need to destroy the PWG mapping data and return NULL... */ create_error: _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Out of memory."), 1); _ppdCacheDestroy(pc); return (NULL); } /* * '_ppdCacheDestroy()' - Free all memory used for PWG mapping data. */ void _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */ { int i; /* Looping var */ pwg_map_t *map; /* Current map */ pwg_size_t *size; /* Current size */ /* * Range check input... */ if (!pc) return; /* * Free memory as needed... */ if (pc->bins) { for (i = pc->num_bins, map = pc->bins; i > 0; i --, map ++) { _cupsStrFree(map->pwg); _cupsStrFree(map->ppd); } free(pc->bins); } if (pc->sizes) { for (i = pc->num_sizes, size = pc->sizes; i > 0; i --, size ++) { _cupsStrFree(size->map.pwg); _cupsStrFree(size->map.ppd); } free(pc->sizes); } if (pc->source_option) _cupsStrFree(pc->source_option); if (pc->sources) { for (i = pc->num_sources, map = pc->sources; i > 0; i --, map ++) { _cupsStrFree(map->pwg); _cupsStrFree(map->ppd); } free(pc->sources); } if (pc->types) { for (i = pc->num_types, map = pc->types; i > 0; i --, map ++) { _cupsStrFree(map->pwg); _cupsStrFree(map->ppd); } free(pc->types); } if (pc->custom_max_keyword) _cupsStrFree(pc->custom_max_keyword); if (pc->custom_min_keyword) _cupsStrFree(pc->custom_min_keyword); _cupsStrFree(pc->product); cupsArrayDelete(pc->filters); cupsArrayDelete(pc->prefilters); cupsArrayDelete(pc->finishings); _cupsStrFree(pc->charge_info_uri); _cupsStrFree(pc->password); cupsArrayDelete(pc->mandatory); cupsArrayDelete(pc->support_files); free(pc); } /* * '_ppdCacheGetBin()' - Get the PWG output-bin keyword associated with a PPD * OutputBin. */ const char * /* O - output-bin or NULL */ _ppdCacheGetBin( _ppd_cache_t *pc, /* I - PPD cache and mapping data */ const char *output_bin) /* I - PPD OutputBin string */ { int i; /* Looping var */ /* * Range check input... */ if (!pc || !output_bin) return (NULL); /* * Look up the OutputBin string... */ for (i = 0; i < pc->num_bins; i ++) if (!_cups_strcasecmp(output_bin, pc->bins[i].ppd)) return (pc->bins[i].pwg); return (NULL); } /* * '_ppdCacheGetFinishingOptions()' - Get PPD finishing options for the given * IPP finishings value(s). */ int /* O - New number of options */ _ppdCacheGetFinishingOptions( _ppd_cache_t *pc, /* I - PPD cache and mapping data */ ipp_t *job, /* I - Job attributes or NULL */ ipp_finishings_t value, /* I - IPP finishings value of IPP_FINISHINGS_NONE */ int num_options, /* I - Number of options */ cups_option_t **options) /* IO - Options */ { int i; /* Looping var */ _pwg_finishings_t *f, /* PWG finishings options */ key; /* Search key */ ipp_attribute_t *attr; /* Finishings attribute */ cups_option_t *option; /* Current finishings option */ /* * Range check input... */ if (!pc || cupsArrayCount(pc->finishings) == 0 || !options || (!job && value == IPP_FINISHINGS_NONE)) return (num_options); /* * Apply finishing options... */ if (job && (attr = ippFindAttribute(job, "finishings", IPP_TAG_ENUM)) != NULL) { int num_values = ippGetCount(attr); /* Number of values */ for (i = 0; i < num_values; i ++) { key.value = (ipp_finishings_t)ippGetInteger(attr, i); if ((f = cupsArrayFind(pc->finishings, &key)) != NULL) { int j; /* Another looping var */ for (j = f->num_options, option = f->options; j > 0; j --, option ++) num_options = cupsAddOption(option->name, option->value, num_options, options); } } } else if (value != IPP_FINISHINGS_NONE) { key.value = value; if ((f = cupsArrayFind(pc->finishings, &key)) != NULL) { int j; /* Another looping var */ for (j = f->num_options, option = f->options; j > 0; j --, option ++) num_options = cupsAddOption(option->name, option->value, num_options, options); } } return (num_options); } /* * '_ppdCacheGetFinishingValues()' - Get IPP finishings value(s) from the given * PPD options. */ int /* O - Number of finishings values */ _ppdCacheGetFinishingValues( _ppd_cache_t *pc, /* I - PPD cache and mapping data */ int num_options, /* I - Number of options */ cups_option_t *options, /* I - Options */ int max_values, /* I - Maximum number of finishings values */ int *values) /* O - Finishings values */ { int i, /* Looping var */ num_values = 0; /* Number of values */ _pwg_finishings_t *f; /* Current finishings option */ cups_option_t *option; /* Current option */ const char *val; /* Value for option */ /* * Range check input... */ DEBUG_printf(("_ppdCacheGetFinishingValues(pc=%p, num_options=%d, options=%p, max_values=%d, values=%p)", pc, num_options, options, max_values, values)); if (!pc || max_values < 1 || !values) { DEBUG_puts("_ppdCacheGetFinishingValues: Bad arguments, returning 0."); return (0); } else if (!pc->finishings) { DEBUG_puts("_ppdCacheGetFinishingValues: No finishings support, returning 0."); return (0); } /* * Go through the finishings options and see what is set... */ for (f = (_pwg_finishings_t *)cupsArrayFirst(pc->finishings); f; f = (_pwg_finishings_t *)cupsArrayNext(pc->finishings)) { DEBUG_printf(("_ppdCacheGetFinishingValues: Checking %d (%s)", f->value, ippEnumString("finishings", f->value))); for (i = f->num_options, option = f->options; i > 0; i --, option ++) { DEBUG_printf(("_ppdCacheGetFinishingValues: %s=%s?", option->name, option->value)); if ((val = cupsGetOption(option->name, num_options, options)) == NULL || _cups_strcasecmp(option->value, val)) { DEBUG_puts("_ppdCacheGetFinishingValues: NO"); break; } } if (i == 0) { DEBUG_printf(("_ppdCacheGetFinishingValues: Adding %d (%s)", f->value, ippEnumString("finishings", f->value))); values[num_values ++] = f->value; if (num_values >= max_values) break; } } if (num_values == 0) { /* * Always have at least "finishings" = 'none'... */ DEBUG_puts("_ppdCacheGetFinishingValues: Adding 3 (none)."); values[0] = IPP_FINISHINGS_NONE; num_values ++; } DEBUG_printf(("_ppdCacheGetFinishingValues: Returning %d.", num_values)); return (num_values); } /* * '_ppdCacheGetInputSlot()' - Get the PPD InputSlot associated with the job * attributes or a keyword string. */ const char * /* O - PPD InputSlot or NULL */ _ppdCacheGetInputSlot( _ppd_cache_t *pc, /* I - PPD cache and mapping data */ ipp_t *job, /* I - Job attributes or NULL */ const char *keyword) /* I - Keyword string or NULL */ { /* * Range check input... */ if (!pc || pc->num_sources == 0 || (!job && !keyword)) return (NULL); if (job && !keyword) { /* * Lookup the media-col attribute and any media-source found there... */ ipp_attribute_t *media_col, /* media-col attribute */ *media_source; /* media-source attribute */ pwg_size_t size; /* Dimensional size */ int margins_set; /* Were the margins set? */ media_col = ippFindAttribute(job, "media-col", IPP_TAG_BEGIN_COLLECTION); if (media_col && (media_source = ippFindAttribute(ippGetCollection(media_col, 0), "media-source", IPP_TAG_KEYWORD)) != NULL) { /* * Use the media-source value from media-col... */ keyword = ippGetString(media_source, 0, NULL); } else if (pwgInitSize(&size, job, &margins_set)) { /* * For media <= 5x7, look for a photo tray... */ if (size.width <= (5 * 2540) && size.length <= (7 * 2540)) keyword = "photo"; } } if (keyword) { int i; /* Looping var */ for (i = 0; i < pc->num_sources; i ++) if (!_cups_strcasecmp(keyword, pc->sources[i].pwg)) return (pc->sources[i].ppd); } return (NULL); } /* * '_ppdCacheGetMediaType()' - Get the PPD MediaType associated with the job * attributes or a keyword string. */ const char * /* O - PPD MediaType or NULL */ _ppdCacheGetMediaType( _ppd_cache_t *pc, /* I - PPD cache and mapping data */ ipp_t *job, /* I - Job attributes or NULL */ const char *keyword) /* I - Keyword string or NULL */ { /* * Range check input... */ if (!pc || pc->num_types == 0 || (!job && !keyword)) return (NULL); if (job && !keyword) { /* * Lookup the media-col attribute and any media-source found there... */ ipp_attribute_t *media_col, /* media-col attribute */ *media_type; /* media-type attribute */ media_col = ippFindAttribute(job, "media-col", IPP_TAG_BEGIN_COLLECTION); if (media_col) { if ((media_type = ippFindAttribute(media_col->values[0].collection, "media-type", IPP_TAG_KEYWORD)) == NULL) media_type = ippFindAttribute(media_col->values[0].collection, "media-type", IPP_TAG_NAME); if (media_type) keyword = media_type->values[0].string.text; } } if (keyword) { int i; /* Looping var */ for (i = 0; i < pc->num_types; i ++) if (!_cups_strcasecmp(keyword, pc->types[i].pwg)) return (pc->types[i].ppd); } return (NULL); } /* * '_ppdCacheGetOutputBin()' - Get the PPD OutputBin associated with the keyword * string. */ const char * /* O - PPD OutputBin or NULL */ _ppdCacheGetOutputBin( _ppd_cache_t *pc, /* I - PPD cache and mapping data */ const char *output_bin) /* I - Keyword string */ { int i; /* Looping var */ /* * Range check input... */ if (!pc || !output_bin) return (NULL); /* * Look up the OutputBin string... */ for (i = 0; i < pc->num_bins; i ++) if (!_cups_strcasecmp(output_bin, pc->bins[i].pwg)) return (pc->bins[i].ppd); return (NULL); } /* * '_ppdCacheGetPageSize()' - Get the PPD PageSize associated with the job * attributes or a keyword string. */ const char * /* O - PPD PageSize or NULL */ _ppdCacheGetPageSize( _ppd_cache_t *pc, /* I - PPD cache and mapping data */ ipp_t *job, /* I - Job attributes or NULL */ const char *keyword, /* I - Keyword string or NULL */ int *exact) /* O - 1 if exact match, 0 otherwise */ { int i; /* Looping var */ pwg_size_t *size, /* Current size */ *closest, /* Closest size */ jobsize; /* Size data from job */ int margins_set, /* Were the margins set? */ dwidth, /* Difference in width */ dlength, /* Difference in length */ dleft, /* Difference in left margins */ dright, /* Difference in right margins */ dbottom, /* Difference in bottom margins */ dtop, /* Difference in top margins */ dmin, /* Minimum difference */ dclosest; /* Closest difference */ const char *ppd_name; /* PPD media name */ DEBUG_printf(("_ppdCacheGetPageSize(pc=%p, job=%p, keyword=\"%s\", exact=%p)", pc, job, keyword, exact)); /* * Range check input... */ if (!pc || (!job && !keyword)) return (NULL); if (exact) *exact = 0; ppd_name = keyword; if (job) { /* * Try getting the PPD media name from the job attributes... */ ipp_attribute_t *attr; /* Job attribute */ if ((attr = ippFindAttribute(job, "PageSize", IPP_TAG_ZERO)) == NULL) if ((attr = ippFindAttribute(job, "PageRegion", IPP_TAG_ZERO)) == NULL) attr = ippFindAttribute(job, "media", IPP_TAG_ZERO); #ifdef DEBUG if (attr) DEBUG_printf(("1_ppdCacheGetPageSize: Found attribute %s (%s)", attr->name, ippTagString(attr->value_tag))); else DEBUG_puts("1_ppdCacheGetPageSize: Did not find media attribute."); #endif /* DEBUG */ if (attr && (attr->value_tag == IPP_TAG_NAME || attr->value_tag == IPP_TAG_KEYWORD)) ppd_name = attr->values[0].string.text; } DEBUG_printf(("1_ppdCacheGetPageSize: ppd_name=\"%s\"", ppd_name)); if (ppd_name) { /* * Try looking up the named PPD size first... */ for (i = pc->num_sizes, size = pc->sizes; i > 0; i --, size ++) { DEBUG_printf(("2_ppdCacheGetPageSize: size[%d]=[\"%s\" \"%s\"]", (int)(size - pc->sizes), size->map.pwg, size->map.ppd)); if (!_cups_strcasecmp(ppd_name, size->map.ppd) || !_cups_strcasecmp(ppd_name, size->map.pwg)) { if (exact) *exact = 1; DEBUG_printf(("1_ppdCacheGetPageSize: Returning \"%s\"", ppd_name)); return (size->map.ppd); } } } if (job && !keyword) { /* * Get the size using media-col or media, with the preference being * media-col. */ if (!pwgInitSize(&jobsize, job, &margins_set)) return (NULL); } else { /* * Get the size using a media keyword... */ pwg_media_t *media; /* Media definition */ if ((media = pwgMediaForPWG(keyword)) == NULL) if ((media = pwgMediaForLegacy(keyword)) == NULL) if ((media = pwgMediaForPPD(keyword)) == NULL) return (NULL); jobsize.width = media->width; jobsize.length = media->length; margins_set = 0; } /* * Now that we have the dimensions and possibly the margins, look at the * available sizes and find the match... */ closest = NULL; dclosest = 999999999; if (!ppd_name || _cups_strncasecmp(ppd_name, "Custom.", 7) || _cups_strncasecmp(ppd_name, "custom_", 7)) { for (i = pc->num_sizes, size = pc->sizes; i > 0; i --, size ++) { /* * Adobe uses a size matching algorithm with an epsilon of 5 points, which * is just about 176/2540ths... */ dwidth = size->width - jobsize.width; dlength = size->length - jobsize.length; if (dwidth <= -176 || dwidth >= 176 || dlength <= -176 || dlength >= 176) continue; if (margins_set) { /* * Use a tighter epsilon of 1 point (35/2540ths) for margins... */ dleft = size->left - jobsize.left; dright = size->right - jobsize.right; dtop = size->top - jobsize.top; dbottom = size->bottom - jobsize.bottom; if (dleft <= -35 || dleft >= 35 || dright <= -35 || dright >= 35 || dtop <= -35 || dtop >= 35 || dbottom <= -35 || dbottom >= 35) { dleft = dleft < 0 ? -dleft : dleft; dright = dright < 0 ? -dright : dright; dbottom = dbottom < 0 ? -dbottom : dbottom; dtop = dtop < 0 ? -dtop : dtop; dmin = dleft + dright + dbottom + dtop; if (dmin < dclosest) { dclosest = dmin; closest = size; } continue; } } if (exact) *exact = 1; DEBUG_printf(("1_ppdCacheGetPageSize: Returning \"%s\"", size->map.ppd)); return (size->map.ppd); } } if (closest) { DEBUG_printf(("1_ppdCacheGetPageSize: Returning \"%s\" (closest)", closest->map.ppd)); return (closest->map.ppd); } /* * If we get here we need to check for custom page size support... */ if (jobsize.width >= pc->custom_min_width && jobsize.width <= pc->custom_max_width && jobsize.length >= pc->custom_min_length && jobsize.length <= pc->custom_max_length) { /* * In range, format as Custom.WWWWxLLLL (points). */ snprintf(pc->custom_ppd_size, sizeof(pc->custom_ppd_size), "Custom.%dx%d", (int)PWG_TO_POINTS(jobsize.width), (int)PWG_TO_POINTS(jobsize.length)); if (margins_set && exact) { dleft = pc->custom_size.left - jobsize.left; dright = pc->custom_size.right - jobsize.right; dtop = pc->custom_size.top - jobsize.top; dbottom = pc->custom_size.bottom - jobsize.bottom; if (dleft > -35 && dleft < 35 && dright > -35 && dright < 35 && dtop > -35 && dtop < 35 && dbottom > -35 && dbottom < 35) *exact = 1; } else if (exact) *exact = 1; DEBUG_printf(("1_ppdCacheGetPageSize: Returning \"%s\" (custom)", pc->custom_ppd_size)); return (pc->custom_ppd_size); } /* * No custom page size support or the size is out of range - return NULL. */ DEBUG_puts("1_ppdCacheGetPageSize: Returning NULL"); return (NULL); } /* * '_ppdCacheGetSize()' - Get the PWG size associated with a PPD PageSize. */ pwg_size_t * /* O - PWG size or NULL */ _ppdCacheGetSize( _ppd_cache_t *pc, /* I - PPD cache and mapping data */ const char *page_size) /* I - PPD PageSize */ { int i; /* Looping var */ pwg_media_t *media; /* Media */ pwg_size_t *size; /* Current size */ /* * Range check input... */ if (!pc || !page_size) return (NULL); if (!_cups_strncasecmp(page_size, "Custom.", 7)) { /* * Custom size; size name can be one of the following: * * Custom.WIDTHxLENGTHin - Size in inches * Custom.WIDTHxLENGTHft - Size in feet * Custom.WIDTHxLENGTHcm - Size in centimeters * Custom.WIDTHxLENGTHmm - Size in millimeters * Custom.WIDTHxLENGTHm - Size in meters * Custom.WIDTHxLENGTH[pt] - Size in points */ double w, l; /* Width and length of page */ char *ptr; /* Pointer into PageSize */ struct lconv *loc; /* Locale data */ loc = localeconv(); w = (float)_cupsStrScand(page_size + 7, &ptr, loc); if (!ptr || *ptr != 'x') return (NULL); l = (float)_cupsStrScand(ptr + 1, &ptr, loc); if (!ptr) return (NULL); if (!_cups_strcasecmp(ptr, "in")) { w *= 2540.0; l *= 2540.0; } else if (!_cups_strcasecmp(ptr, "ft")) { w *= 12.0 * 2540.0; l *= 12.0 * 2540.0; } else if (!_cups_strcasecmp(ptr, "mm")) { w *= 100.0; l *= 100.0; } else if (!_cups_strcasecmp(ptr, "cm")) { w *= 1000.0; l *= 1000.0; } else if (!_cups_strcasecmp(ptr, "m")) { w *= 100000.0; l *= 100000.0; } else { w *= 2540.0 / 72.0; l *= 2540.0 / 72.0; } pc->custom_size.width = (int)w; pc->custom_size.length = (int)l; return (&(pc->custom_size)); } /* * Not a custom size - look it up... */ for (i = pc->num_sizes, size = pc->sizes; i > 0; i --, size ++) if (!_cups_strcasecmp(page_size, size->map.ppd) || !_cups_strcasecmp(page_size, size->map.pwg)) return (size); /* * Look up standard sizes... */ if ((media = pwgMediaForPPD(page_size)) == NULL) if ((media = pwgMediaForLegacy(page_size)) == NULL) media = pwgMediaForPWG(page_size); if (media) { pc->custom_size.width = media->width; pc->custom_size.length = media->length; return (&(pc->custom_size)); } return (NULL); } /* * '_ppdCacheGetSource()' - Get the PWG media-source associated with a PPD * InputSlot. */ const char * /* O - PWG media-source keyword */ _ppdCacheGetSource( _ppd_cache_t *pc, /* I - PPD cache and mapping data */ const char *input_slot) /* I - PPD InputSlot */ { int i; /* Looping var */ pwg_map_t *source; /* Current source */ /* * Range check input... */ if (!pc || !input_slot) return (NULL); for (i = pc->num_sources, source = pc->sources; i > 0; i --, source ++) if (!_cups_strcasecmp(input_slot, source->ppd)) return (source->pwg); return (NULL); } /* * '_ppdCacheGetType()' - Get the PWG media-type associated with a PPD * MediaType. */ const char * /* O - PWG media-type keyword */ _ppdCacheGetType( _ppd_cache_t *pc, /* I - PPD cache and mapping data */ const char *media_type) /* I - PPD MediaType */ { int i; /* Looping var */ pwg_map_t *type; /* Current type */ /* * Range check input... */ if (!pc || !media_type) return (NULL); for (i = pc->num_types, type = pc->types; i > 0; i --, type ++) if (!_cups_strcasecmp(media_type, type->ppd)) return (type->pwg); return (NULL); } /* * '_ppdCacheWriteFile()' - Write PWG mapping data to a file. */ int /* O - 1 on success, 0 on failure */ _ppdCacheWriteFile( _ppd_cache_t *pc, /* I - PPD cache and mapping data */ const char *filename, /* I - File to write */ ipp_t *attrs) /* I - Attributes to write, if any */ { int i, j, k; /* Looping vars */ cups_file_t *fp; /* Output file */ pwg_size_t *size; /* Current size */ pwg_map_t *map; /* Current map */ _pwg_finishings_t *f; /* Current finishing option */ cups_option_t *option; /* Current option */ const char *value; /* Filter/pre-filter value */ char newfile[1024]; /* New filename */ /* * Range check input... */ if (!pc || !filename) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } /* * Open the file and write with compression... */ snprintf(newfile, sizeof(newfile), "%s.N", filename); if ((fp = cupsFileOpen(newfile, "w9")) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); return (0); } /* * Standard header... */ cupsFilePrintf(fp, "#CUPS-PPD-CACHE-%d\n", _PPD_CACHE_VERSION); /* * Output bins... */ if (pc->num_bins > 0) { cupsFilePrintf(fp, "NumBins %d\n", pc->num_bins); for (i = pc->num_bins, map = pc->bins; i > 0; i --, map ++) cupsFilePrintf(fp, "Bin %s %s\n", map->pwg, map->ppd); } /* * Media sizes... */ cupsFilePrintf(fp, "NumSizes %d\n", pc->num_sizes); for (i = pc->num_sizes, size = pc->sizes; i > 0; i --, size ++) cupsFilePrintf(fp, "Size %s %s %d %d %d %d %d %d\n", size->map.pwg, size->map.ppd, size->width, size->length, size->left, size->bottom, size->right, size->top); if (pc->custom_max_width > 0) cupsFilePrintf(fp, "CustomSize %d %d %d %d %d %d %d %d\n", pc->custom_max_width, pc->custom_max_length, pc->custom_min_width, pc->custom_min_length, pc->custom_size.left, pc->custom_size.bottom, pc->custom_size.right, pc->custom_size.top); /* * Media sources... */ if (pc->source_option) cupsFilePrintf(fp, "SourceOption %s\n", pc->source_option); if (pc->num_sources > 0) { cupsFilePrintf(fp, "NumSources %d\n", pc->num_sources); for (i = pc->num_sources, map = pc->sources; i > 0; i --, map ++) cupsFilePrintf(fp, "Source %s %s\n", map->pwg, map->ppd); } /* * Media types... */ if (pc->num_types > 0) { cupsFilePrintf(fp, "NumTypes %d\n", pc->num_types); for (i = pc->num_types, map = pc->types; i > 0; i --, map ++) cupsFilePrintf(fp, "Type %s %s\n", map->pwg, map->ppd); } /* * Presets... */ for (i = _PWG_PRINT_COLOR_MODE_MONOCHROME; i < _PWG_PRINT_COLOR_MODE_MAX; i ++) for (j = _PWG_PRINT_QUALITY_DRAFT; j < _PWG_PRINT_QUALITY_MAX; j ++) if (pc->num_presets[i][j]) { cupsFilePrintf(fp, "Preset %d %d", i, j); for (k = pc->num_presets[i][j], option = pc->presets[i][j]; k > 0; k --, option ++) cupsFilePrintf(fp, " %s=%s", option->name, option->value); cupsFilePutChar(fp, '\n'); } /* * Duplex/sides... */ if (pc->sides_option) cupsFilePrintf(fp, "SidesOption %s\n", pc->sides_option); if (pc->sides_1sided) cupsFilePrintf(fp, "Sides1Sided %s\n", pc->sides_1sided); if (pc->sides_2sided_long) cupsFilePrintf(fp, "Sides2SidedLong %s\n", pc->sides_2sided_long); if (pc->sides_2sided_short) cupsFilePrintf(fp, "Sides2SidedShort %s\n", pc->sides_2sided_short); /* * Product, cupsFilter, cupsFilter2, and cupsPreFilter... */ if (pc->product) cupsFilePutConf(fp, "Product", pc->product); for (value = (const char *)cupsArrayFirst(pc->filters); value; value = (const char *)cupsArrayNext(pc->filters)) cupsFilePutConf(fp, "Filter", value); for (value = (const char *)cupsArrayFirst(pc->prefilters); value; value = (const char *)cupsArrayNext(pc->prefilters)) cupsFilePutConf(fp, "PreFilter", value); cupsFilePrintf(fp, "SingleFile %s\n", pc->single_file ? "true" : "false"); /* * Finishing options... */ for (f = (_pwg_finishings_t *)cupsArrayFirst(pc->finishings); f; f = (_pwg_finishings_t *)cupsArrayNext(pc->finishings)) { cupsFilePrintf(fp, "Finishings %d", f->value); for (i = f->num_options, option = f->options; i > 0; i --, option ++) cupsFilePrintf(fp, " %s=%s", option->name, option->value); cupsFilePutChar(fp, '\n'); } /* * Max copies... */ cupsFilePrintf(fp, "MaxCopies %d\n", pc->max_copies); /* * Accounting/quota/PIN/managed printing values... */ if (pc->charge_info_uri) cupsFilePutConf(fp, "ChargeInfoURI", pc->charge_info_uri); cupsFilePrintf(fp, "AccountId %s\n", pc->account_id ? "true" : "false"); cupsFilePrintf(fp, "AccountingUserId %s\n", pc->accounting_user_id ? "true" : "false"); if (pc->password) cupsFilePutConf(fp, "Password", pc->password); for (value = (char *)cupsArrayFirst(pc->mandatory); value; value = (char *)cupsArrayNext(pc->mandatory)) cupsFilePutConf(fp, "Mandatory", value); /* * Support files... */ for (value = (char *)cupsArrayFirst(pc->support_files); value; value = (char *)cupsArrayNext(pc->support_files)) cupsFilePutConf(fp, "SupportFile", value); /* * IPP attributes, if any... */ if (attrs) { cupsFilePrintf(fp, "IPP " CUPS_LLFMT "\n", CUPS_LLCAST ippLength(attrs)); attrs->state = IPP_STATE_IDLE; ippWriteIO(fp, (ipp_iocb_t)cupsFileWrite, 1, NULL, attrs); } /* * Close and return... */ if (cupsFileClose(fp)) { unlink(newfile); return (0); } unlink(filename); return (!rename(newfile, filename)); } /* * '_ppdCreateFromIPP()' - Create a PPD file describing the capabilities * of an IPP printer. */ char * /* O - PPD filename or @code NULL@ on error */ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */ size_t bufsize, /* I - Size of filename buffer */ ipp_t *response) /* I - Get-Printer-Attributes response */ { cups_file_t *fp; /* PPD file */ cups_array_t *sizes; /* Media sizes we've added */ ipp_attribute_t *attr, /* xxx-supported */ *defattr, /* xxx-default */ *quality, /* print-quality-supported */ *x_dim, *y_dim; /* Media dimensions */ ipp_t *media_size; /* Media size collection */ char make[256], /* Make and model */ *model, /* Model name */ ppdname[PPD_MAX_NAME]; /* PPD keyword */ int i, j, /* Looping vars */ count, /* Number of values */ bottom, /* Largest bottom margin */ left, /* Largest left margin */ right, /* Largest right margin */ top, /* Largest top margin */ is_apple = 0, /* Does the printer support Apple raster? */ is_pdf = 0, /* Does the printer support PDF? */ is_pwg = 0; /* Does the printer support PWG Raster? */ pwg_media_t *pwg; /* PWG media size */ int xres, yres; /* Resolution values */ int resolutions[1000]; /* Array of resolution indices */ cups_lang_t *lang = cupsLangDefault(); /* Localization info */ struct lconv *loc = localeconv(); /* Locale data */ static const char * const finishings[][2] = { /* Finishings strings */ { "bale", _("Bale") }, { "bind", _("Bind") }, { "bind-bottom", _("Bind (Reverse Landscape)") }, { "bind-left", _("Bind (Portrait)") }, { "bind-right", _("Bind (Reverse Portrait)") }, { "bind-top", _("Bind (Landscape)") }, { "booklet-maker", _("Booklet Maker") }, { "coat", _("Coat") }, { "cover", _("Cover") }, { "edge-stitch", _("Staple Edge") }, { "edge-stitch-bottom", _("Staple Edge (Reverse Landscape)") }, { "edge-stitch-left", _("Staple Edge (Portrait)") }, { "edge-stitch-right", _("Staple Edge (Reverse Portrait)") }, { "edge-stitch-top", _("Staple Edge (Landscape)") }, { "fold", _("Fold") }, { "fold-accordian", _("Accordian Fold") }, { "fold-double-gate", _("Double Gate Fold") }, { "fold-engineering-z", _("Engineering Z Fold") }, { "fold-gate", _("Gate Fold") }, { "fold-half", _("Half Fold") }, { "fold-half-z", _("Half Z Fold") }, { "fold-left-gate", _("Left Gate Fold") }, { "fold-letter", _("Letter Fold") }, { "fold-parallel", _("Parallel Fold") }, { "fold-poster", _("Poster Fold") }, { "fold-right-gate", _("Right Gate Fold") }, { "fold-z", _("Z Fold") }, { "jog-offset", _("Jog") }, { "laminate", _("Laminate") }, { "punch", _("Punch") }, { "punch-bottom-left", _("Single Punch (Reverse Landscape)") }, { "punch-bottom-right", _("Single Punch (Reverse Portrait)") }, { "punch-double-bottom", _("2-Hole Punch (Reverse Portrait)") }, { "punch-double-left", _("2-Hole Punch (Reverse Landscape)") }, { "punch-double-right", _("2-Hole Punch (Landscape)") }, { "punch-double-top", _("2-Hole Punch (Portrait)") }, { "punch-quad-bottom", _("4-Hole Punch (Reverse Landscape)") }, { "punch-quad-left", _("4-Hole Punch (Portrait)") }, { "punch-quad-right", _("4-Hole Punch (Reverse Portrait)") }, { "punch-quad-top", _("4-Hole Punch (Landscape)") }, { "punch-top-left", _("Single Punch (Portrait)") }, { "punch-top-right", _("Single Punch (Landscape)") }, { "punch-triple-bottom", _("3-Hole Punch (Reverse Landscape)") }, { "punch-triple-left", _("3-Hole Punch (Portrait)") }, { "punch-triple-right", _("3-Hole Punch (Reverse Portrait)") }, { "punch-triple-top", _("3-Hole Punch (Landscape)") }, { "punch-multiple-bottom", _("Multi-Hole Punch (Reverse Landscape)") }, { "punch-multiple-left", _("Multi-Hole Punch (Portrait)") }, { "punch-multiple-right", _("Multi-Hole Punch (Reverse Portrait)") }, { "punch-multiple-top", _("Multi-Hole Punch (Landscape)") }, { "saddle-stitch", _("Saddle Stitch") }, { "staple", _("Staple") }, { "staple-bottom-left", _("Single Staple (Reverse Landscape)") }, { "staple-bottom-right", _("Single Staple (Reverse Portrait)") }, { "staple-dual-bottom", _("Double Staple (Reverse Landscape)") }, { "staple-dual-left", _("Double Staple (Portrait)") }, { "staple-dual-right", _("Double Staple (Reverse Portrait)") }, { "staple-dual-top", _("Double Staple (Landscape)") }, { "staple-top-left", _("Single Staple (Portrait)") }, { "staple-top-right", _("Single Staple (Landscape)") }, { "staple-triple-bottom", _("Triple Staple (Reverse Landscape)") }, { "staple-triple-left", _("Triple Staple (Portrait)") }, { "staple-triple-right", _("Triple Staple (Reverse Portrait)") }, { "staple-triple-top", _("Triple Staple (Landscape)") }, { "trim", _("Cut Media") } }; /* * Range check input... */ if (buffer) *buffer = '\0'; if (!buffer || bufsize < 1) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (NULL); } if (!response) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No IPP attributes."), 1); return (NULL); } /* * Open a temporary file for the PPD... */ if ((fp = cupsTempFile2(buffer, (int)bufsize)) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); return (NULL); } /* * Standard stuff for PPD file... */ cupsFilePuts(fp, "*PPD-Adobe: \"4.3\"\n"); cupsFilePuts(fp, "*FormatVersion: \"4.3\"\n"); cupsFilePrintf(fp, "*FileVersion: \"%d.%d\"\n", CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR); cupsFilePuts(fp, "*LanguageVersion: English\n"); cupsFilePuts(fp, "*LanguageEncoding: ISOLatin1\n"); cupsFilePuts(fp, "*PSVersion: \"(3010.000) 0\"\n"); cupsFilePuts(fp, "*LanguageLevel: \"3\"\n"); cupsFilePuts(fp, "*FileSystem: False\n"); cupsFilePuts(fp, "*PCFileName: \"ippeve.ppd\"\n"); if ((attr = ippFindAttribute(response, "printer-make-and-model", IPP_TAG_TEXT)) != NULL) strlcpy(make, ippGetString(attr, 0, NULL), sizeof(make)); else strlcpy(make, "Unknown Printer", sizeof(make)); if (!_cups_strncasecmp(make, "Hewlett Packard ", 16) || !_cups_strncasecmp(make, "Hewlett-Packard ", 16)) { model = make + 16; strlcpy(make, "HP", sizeof(make)); } else if ((model = strchr(make, ' ')) != NULL) *model++ = '\0'; else model = make; cupsFilePrintf(fp, "*Manufacturer: \"%s\"\n", make); cupsFilePrintf(fp, "*ModelName: \"%s\"\n", model); cupsFilePrintf(fp, "*Product: \"(%s)\"\n", model); cupsFilePrintf(fp, "*NickName: \"%s\"\n", model); cupsFilePrintf(fp, "*ShortNickName: \"%s\"\n", model); if ((attr = ippFindAttribute(response, "color-supported", IPP_TAG_BOOLEAN)) != NULL && ippGetBoolean(attr, 0)) cupsFilePuts(fp, "*ColorDevice: True\n"); else cupsFilePuts(fp, "*ColorDevice: False\n"); cupsFilePrintf(fp, "*cupsVersion: %d.%d\n", CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR); cupsFilePuts(fp, "*cupsSNMPSupplies: False\n"); cupsFilePuts(fp, "*cupsLanguages: \"en\"\n"); /* * Password/PIN printing... */ if ((attr = ippFindAttribute(response, "job-password-supported", IPP_TAG_INTEGER)) != NULL) { char pattern[33]; /* Password pattern */ int maxlen = ippGetInteger(attr, 0); /* Maximum length */ const char *repertoire = ippGetString(ippFindAttribute(response, "job-password-repertoire-configured", IPP_TAG_KEYWORD), 0, NULL); /* Type of password */ if (maxlen > (int)(sizeof(pattern) - 1)) maxlen = sizeof(pattern) - 1; if (!repertoire || !strcmp(repertoire, "iana_us-ascii_digits")) memset(pattern, '1', maxlen); else if (!strcmp(repertoire, "iana_us-ascii_letters")) memset(pattern, 'A', maxlen); else if (!strcmp(repertoire, "iana_us-ascii_complex")) memset(pattern, 'C', maxlen); else if (!strcmp(repertoire, "iana_us-ascii_any")) memset(pattern, '.', maxlen); else if (!strcmp(repertoire, "iana_utf-8_digits")) memset(pattern, 'N', maxlen); else if (!strcmp(repertoire, "iana_utf-8_letters")) memset(pattern, 'U', maxlen); else memset(pattern, '*', maxlen); pattern[maxlen] = '\0'; cupsFilePrintf(fp, "*cupsPassword: \"%s\"\n", pattern); } /* * Filters... */ if ((attr = ippFindAttribute(response, "document-format-supported", IPP_TAG_MIMETYPE)) != NULL) { is_apple = ippContainsString(attr, "image/urf"); is_pdf = ippContainsString(attr, "application/pdf"); is_pwg = ippContainsString(attr, "image/pwg-raster") && !is_apple; if (ippContainsString(attr, "image/jpeg")) cupsFilePuts(fp, "*cupsFilter2: \"image/jpeg image/jpeg 0 -\"\n"); if (ippContainsString(attr, "image/png")) cupsFilePuts(fp, "*cupsFilter2: \"image/png image/png 0 -\"\n"); if (is_pdf) cupsFilePuts(fp, "*cupsFilter2: \"application/vnd.cups-pdf application/pdf 10 -\"\n"); if (is_apple) cupsFilePuts(fp, "*cupsFilter2: \"image/urf image/urf 100 -\"\n"); if (is_pwg) cupsFilePuts(fp, "*cupsFilter2: \"image/pwg-raster image/pwg-raster 100 -\"\n"); } if (!is_apple && !is_pdf && !is_pwg) goto bad_ppd; /* * PageSize/PageRegion/ImageableArea/PaperDimension */ if ((attr = ippFindAttribute(response, "media-bottom-margin-supported", IPP_TAG_INTEGER)) != NULL) { for (i = 1, bottom = ippGetInteger(attr, 0), count = ippGetCount(attr); i < count; i ++) if (ippGetInteger(attr, i) > bottom) bottom = ippGetInteger(attr, i); } else bottom = 1270; if ((attr = ippFindAttribute(response, "media-left-margin-supported", IPP_TAG_INTEGER)) != NULL) { for (i = 1, left = ippGetInteger(attr, 0), count = ippGetCount(attr); i < count; i ++) if (ippGetInteger(attr, i) > left) left = ippGetInteger(attr, i); } else left = 635; if ((attr = ippFindAttribute(response, "media-right-margin-supported", IPP_TAG_INTEGER)) != NULL) { for (i = 1, right = ippGetInteger(attr, 0), count = ippGetCount(attr); i < count; i ++) if (ippGetInteger(attr, i) > right) right = ippGetInteger(attr, i); } else right = 635; if ((attr = ippFindAttribute(response, "media-top-margin-supported", IPP_TAG_INTEGER)) != NULL) { for (i = 1, top = ippGetInteger(attr, 0), count = ippGetCount(attr); i < count; i ++) if (ippGetInteger(attr, i) > top) top = ippGetInteger(attr, i); } else top = 1270; if ((defattr = ippFindAttribute(response, "media-col-default", IPP_TAG_BEGIN_COLLECTION)) != NULL) { if ((attr = ippFindAttribute(ippGetCollection(defattr, 0), "media-size", IPP_TAG_BEGIN_COLLECTION)) != NULL) { media_size = ippGetCollection(attr, 0); x_dim = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER); y_dim = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER); if (x_dim && y_dim && (pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0))) != NULL) strlcpy(ppdname, pwg->ppd, sizeof(ppdname)); else strlcpy(ppdname, "Unknown", sizeof(ppdname)); } else strlcpy(ppdname, "Unknown", sizeof(ppdname)); } else if ((pwg = pwgMediaForPWG(ippGetString(ippFindAttribute(response, "media-default", IPP_TAG_ZERO), 0, NULL))) != NULL) strlcpy(ppdname, pwg->ppd, sizeof(ppdname)); else strlcpy(ppdname, "Unknown", sizeof(ppdname)); if ((attr = ippFindAttribute(response, "media-size-supported", IPP_TAG_BEGIN_COLLECTION)) == NULL) attr = ippFindAttribute(response, "media-supported", IPP_TAG_ZERO); if (attr) { cupsFilePrintf(fp, "*OpenUI *PageSize: PickOne\n" "*OrderDependency: 10 AnySetup *PageSize\n" "*DefaultPageSize: %s\n", ppdname); sizes = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); for (i = 0, count = ippGetCount(attr); i < count; i ++) { if (ippGetValueTag(attr) == IPP_TAG_BEGIN_COLLECTION) { media_size = ippGetCollection(attr, i); x_dim = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER); y_dim = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER); pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0)); } else pwg = pwgMediaForPWG(ippGetString(attr, i, NULL)); if (pwg) { char twidth[256], /* Width string */ tlength[256]; /* Length string */ if (cupsArrayFind(sizes, (void *)pwg->ppd)) { cupsFilePrintf(fp, "*%% warning: Duplicate size '%s' reported by printer.\n", pwg->ppd); continue; } cupsArrayAdd(sizes, (void *)pwg->ppd); _cupsStrFormatd(twidth, twidth + sizeof(twidth), pwg->width * 72.0 / 2540.0, loc); _cupsStrFormatd(tlength, tlength + sizeof(tlength), pwg->length * 72.0 / 2540.0, loc); cupsFilePrintf(fp, "*PageSize %s: \"<>setpagedevice\"\n", pwg->ppd, twidth, tlength); } } cupsFilePuts(fp, "*CloseUI: *PageSize\n"); cupsArrayDelete(sizes); sizes = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); cupsFilePrintf(fp, "*OpenUI *PageRegion: PickOne\n" "*OrderDependency: 10 AnySetup *PageRegion\n" "*DefaultPageRegion: %s\n", ppdname); for (i = 0, count = ippGetCount(attr); i < count; i ++) { if (ippGetValueTag(attr) == IPP_TAG_BEGIN_COLLECTION) { media_size = ippGetCollection(attr, i); x_dim = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER); y_dim = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER); pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0)); } else pwg = pwgMediaForPWG(ippGetString(attr, i, NULL)); if (pwg) { char twidth[256], /* Width string */ tlength[256]; /* Length string */ if (cupsArrayFind(sizes, (void *)pwg->ppd)) continue; cupsArrayAdd(sizes, (void *)pwg->ppd); _cupsStrFormatd(twidth, twidth + sizeof(twidth), pwg->width * 72.0 / 2540.0, loc); _cupsStrFormatd(tlength, tlength + sizeof(tlength), pwg->length * 72.0 / 2540.0, loc); cupsFilePrintf(fp, "*PageRegion %s: \"<>setpagedevice\"\n", pwg->ppd, twidth, tlength); } } cupsFilePuts(fp, "*CloseUI: *PageRegion\n"); cupsArrayDelete(sizes); sizes = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); cupsFilePrintf(fp, "*DefaultImageableArea: %s\n" "*DefaultPaperDimension: %s\n", ppdname, ppdname); for (i = 0, count = ippGetCount(attr); i < count; i ++) { if (ippGetValueTag(attr) == IPP_TAG_BEGIN_COLLECTION) { media_size = ippGetCollection(attr, i); x_dim = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER); y_dim = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER); pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0)); } else pwg = pwgMediaForPWG(ippGetString(attr, i, NULL)); if (pwg) { char tleft[256], /* Left string */ tbottom[256], /* Bottom string */ tright[256], /* Right string */ ttop[256], /* Top string */ twidth[256], /* Width string */ tlength[256]; /* Length string */ if (cupsArrayFind(sizes, (void *)pwg->ppd)) continue; cupsArrayAdd(sizes, (void *)pwg->ppd); _cupsStrFormatd(tleft, tleft + sizeof(tleft), left * 72.0 / 2540.0, loc); _cupsStrFormatd(tbottom, tbottom + sizeof(tbottom), bottom * 72.0 / 2540.0, loc); _cupsStrFormatd(tright, tright + sizeof(tright), (pwg->width - right) * 72.0 / 2540.0, loc); _cupsStrFormatd(ttop, ttop + sizeof(ttop), (pwg->length - top) * 72.0 / 2540.0, loc); _cupsStrFormatd(twidth, twidth + sizeof(twidth), pwg->width * 72.0 / 2540.0, loc); _cupsStrFormatd(tlength, tlength + sizeof(tlength), pwg->length * 72.0 / 2540.0, loc); cupsFilePrintf(fp, "*ImageableArea %s: \"%s %s %s %s\"\n", pwg->ppd, tleft, tbottom, tright, ttop); cupsFilePrintf(fp, "*PaperDimension %s: \"%s %s\"\n", pwg->ppd, twidth, tlength); } } cupsArrayDelete(sizes); } else goto bad_ppd; /* * InputSlot... */ if ((attr = ippFindAttribute(ippGetCollection(defattr, 0), "media-source", IPP_TAG_ZERO)) != NULL) pwg_ppdize_name(ippGetString(attr, 0, NULL), ppdname, sizeof(ppdname)); else strlcpy(ppdname, "Unknown", sizeof(ppdname)); if ((attr = ippFindAttribute(response, "media-source-supported", IPP_TAG_ZERO)) != NULL && (count = ippGetCount(attr)) > 1) { static const char * const sources[][2] = { /* "media-source" strings */ { "Auto", _("Automatic") }, { "Main", _("Main") }, { "Alternate", _("Alternate") }, { "LargeCapacity", _("Large Capacity") }, { "Manual", _("Manual") }, { "Envelope", _("Envelope") }, { "Disc", _("Disc") }, { "Photo", _("Photo") }, { "Hagaki", _("Hagaki") }, { "MainRoll", _("Main Roll") }, { "AlternateRoll", _("Alternate Roll") }, { "Top", _("Top") }, { "Middle", _("Middle") }, { "Bottom", _("Bottom") }, { "Side", _("Side") }, { "Left", _("Left") }, { "Right", _("Right") }, { "Center", _("Center") }, { "Rear", _("Rear") }, { "ByPassTray", _("Multipurpose") }, { "Tray1", _("Tray 1") }, { "Tray2", _("Tray 2") }, { "Tray3", _("Tray 3") }, { "Tray4", _("Tray 4") }, { "Tray5", _("Tray 5") }, { "Tray6", _("Tray 6") }, { "Tray7", _("Tray 7") }, { "Tray8", _("Tray 8") }, { "Tray9", _("Tray 9") }, { "Tray10", _("Tray 10") }, { "Tray11", _("Tray 11") }, { "Tray12", _("Tray 12") }, { "Tray13", _("Tray 13") }, { "Tray14", _("Tray 14") }, { "Tray15", _("Tray 15") }, { "Tray16", _("Tray 16") }, { "Tray17", _("Tray 17") }, { "Tray18", _("Tray 18") }, { "Tray19", _("Tray 19") }, { "Tray20", _("Tray 20") }, { "Roll1", _("Roll 1") }, { "Roll2", _("Roll 2") }, { "Roll3", _("Roll 3") }, { "Roll4", _("Roll 4") }, { "Roll5", _("Roll 5") }, { "Roll6", _("Roll 6") }, { "Roll7", _("Roll 7") }, { "Roll8", _("Roll 8") }, { "Roll9", _("Roll 9") }, { "Roll10", _("Roll 10") } }; cupsFilePrintf(fp, "*OpenUI *InputSlot: PickOne\n" "*OrderDependency: 10 AnySetup *InputSlot\n" "*DefaultInputSlot: %s\n", ppdname); for (i = 0, count = ippGetCount(attr); i < count; i ++) { pwg_ppdize_name(ippGetString(attr, i, NULL), ppdname, sizeof(ppdname)); for (j = 0; j < (int)(sizeof(sources) / sizeof(sources[0])); j ++) if (!strcmp(sources[j][0], ppdname)) { cupsFilePrintf(fp, "*InputSlot %s/%s: \"<>setpagedevice\"\n", ppdname, _cupsLangString(lang, sources[j][1]), j); break; } } cupsFilePuts(fp, "*CloseUI: *InputSlot\n"); } /* * MediaType... */ if ((attr = ippFindAttribute(ippGetCollection(defattr, 0), "media-type", IPP_TAG_ZERO)) != NULL) pwg_ppdize_name(ippGetString(attr, 0, NULL), ppdname, sizeof(ppdname)); else strlcpy(ppdname, "Unknown", sizeof(ppdname)); if ((attr = ippFindAttribute(response, "media-type-supported", IPP_TAG_ZERO)) != NULL && (count = ippGetCount(attr)) > 1) { static const char * const media_types[][2] = { /* "media-type" strings */ { "aluminum", _("Aluminum") }, { "auto", _("Automatic") }, { "back-print-film", _("Back Print Film") }, { "cardboard", _("Cardboard") }, { "cardstock", _("Cardstock") }, { "cd", _("CD") }, { "com.hp.advanced-photo", _("Advanced Photo Paper") }, /* HP */ { "com.hp.brochure-glossy", _("Glossy Brochure Paper") }, /* HP */ { "com.hp.brochure-matte", _("Matte Brochure Paper") }, /* HP */ { "com.hp.cover-matte", _("Matte Cover Paper") }, /* HP */ { "com.hp.ecosmart-lite", _("Office Recycled Paper") }, /* HP */ { "com.hp.everyday-glossy", _("Everyday Glossy Photo Paper") }, /* HP */ { "com.hp.everyday-matte", _("Everyday Matte Paper") }, /* HP */ { "com.hp.extra-heavy", _("Extra Heavyweight Paper") }, /* HP */ { "com.hp.intermediate", _("Multipurpose Paper") }, /* HP */ { "com.hp.mid-weight", _("Mid-Weight Paper") }, /* HP */ { "com.hp.premium-inkjet", _("Premium Inkjet Paper") }, /* HP */ { "com.hp.premium-photo", _("Premium Photo Glossy Paper") }, /* HP */ { "com.hp.premium-presentation-matte", _("Premium Presentation Matte Paper") }, /* HP */ { "continuous", _("Continuous") }, { "continuous-long", _("Continuous Long") }, { "continuous-short", _("Continuous Short") }, { "disc", _("Optical Disc") }, { "disc-glossy", _("Glossy Optical Disc") }, { "disc-high-gloss", _("High Gloss Optical Disc") }, { "disc-matte", _("Matte Optical Disc") }, { "disc-satin", _("Satin Optical Disc") }, { "disc-semi-gloss", _("Semi-Gloss Optical Disc") }, { "double-wall", _("Double Wall Cardboard") }, { "dry-film", _("Dry Film") }, { "dvd", _("DVD") }, { "embossing-foil", _("Embossing Foil") }, { "end-board", _("End Board") }, { "envelope", _("Envelope") }, { "envelope-archival", _("Archival Envelope") }, { "envelope-bond", _("Bond Envelope") }, { "envelope-coated", _("Coated Envelope") }, { "envelope-cotton", _("Cotton Envelope") }, { "envelope-fine", _("Fine Envelope") }, { "envelope-heavyweight", _("Heavyweight Envelope") }, { "envelope-inkjet", _("Inkjet Envelope") }, { "envelope-lightweight", _("Lightweight Envelope") }, { "envelope-plain", _("Plain Envelope") }, { "envelope-preprinted", _("Preprinted Envelope") }, { "envelope-window", _("Windowed Envelope") }, { "fabric", _("Fabric") }, { "fabric-archival", _("Archival Fabric") }, { "fabric-glossy", _("Glossy Fabric") }, { "fabric-high-gloss", _("High Gloss Fabric") }, { "fabric-matte", _("Matte Fabric") }, { "fabric-semi-gloss", _("Semi-Gloss Fabric") }, { "fabric-waterproof", _("Waterproof Fabric") }, { "film", _("Film") }, { "flexo-base", _("Flexo Base") }, { "flexo-photo-polymer", _("Flexo Photo Polymer") }, { "flute", _("Flute") }, { "foil", _("Foil") }, { "full-cut-tabs", _("Full Cut Tabs") }, { "glass", _("Glass") }, { "glass-colored", _("Glass Colored") }, { "glass-opaque", _("Glass Opaque") }, { "glass-surfaced", _("Glass Surfaced") }, { "glass-textured", _("Glass Textured") }, { "gravure-cylinder", _("Gravure Cylinder") }, { "image-setter-paper", _("Image Setter Paper") }, { "imaging-cylinder", _("Imaging Cylinder") }, { "jp.co.canon_photo-paper-plus-glossy-ii", _("Photo Paper Plus Glossy II") }, /* Canon */ { "jp.co.canon_photo-paper-pro-platinum", _("Photo Paper Pro Platinum") }, /* Canon */ { "jp.co.canon-photo-paper-plus-glossy-ii", _("Photo Paper Plus Glossy II") }, /* Canon */ { "jp.co.canon-photo-paper-pro-platinum", _("Photo Paper Pro Platinum") }, /* Canon */ { "labels", _("Labels") }, { "labels-colored", _("Colored Labels") }, { "labels-glossy", _("Glossy Labels") }, { "labels-high-gloss", _("High Gloss Labels") }, { "labels-inkjet", _("Inkjet Labels") }, { "labels-matte", _("Matte Labels") }, { "labels-permanent", _("Permanent Labels") }, { "labels-satin", _("Satin Labels") }, { "labels-security", _("Security Labels") }, { "labels-semi-gloss", _("Semi-Gloss Labels") }, { "laminating-foil", _("Laminating Foil") }, { "letterhead", _("Letterhead") }, { "metal", _("Metal") }, { "metal-glossy", _("Metal Glossy") }, { "metal-high-gloss", _("Metal High Gloss") }, { "metal-matte", _("Metal Matte") }, { "metal-satin", _("Metal Satin") }, { "metal-semi-gloss", _("Metal Semi Gloss") }, { "mounting-tape", _("Mounting Tape") }, { "multi-layer", _("Multi Layer") }, { "multi-part-form", _("Multi Part Form") }, { "other", _("Other") }, { "paper", _("Paper") }, { "photo", _("Photo Paper") }, /* HP mis-spelling */ { "photographic", _("Photo Paper") }, { "photographic-archival", _("Archival Photo Paper") }, { "photographic-film", _("Photo Film") }, { "photographic-glossy", _("Glossy Photo Paper") }, { "photographic-high-gloss", _("High Gloss Photo Paper") }, { "photographic-matte", _("Matte Photo Paper") }, { "photographic-satin", _("Satin Photo Paper") }, { "photographic-semi-gloss", _("Semi-Gloss Photo Paper") }, { "plastic", _("Plastic") }, { "plastic-archival", _("Plastic Archival") }, { "plastic-colored", _("Plastic Colored") }, { "plastic-glossy", _("Plastic Glossy") }, { "plastic-high-gloss", _("Plastic High Gloss") }, { "plastic-matte", _("Plastic Matte") }, { "plastic-satin", _("Plastic Satin") }, { "plastic-semi-gloss", _("Plastic Semi Gloss") }, { "plate", _("Plate") }, { "polyester", _("Polyester") }, { "pre-cut-tabs", _("Pre Cut Tabs") }, { "roll", _("Roll") }, { "screen", _("Screen") }, { "screen-paged", _("Screen Paged") }, { "self-adhesive", _("Self Adhesive") }, { "self-adhesive-film", _("Self Adhesive Film") }, { "shrink-foil", _("Shrink Foil") }, { "single-face", _("Single Face") }, { "single-wall", _("Single Wall Cardboard") }, { "sleeve", _("Sleeve") }, { "stationery", _("Plain Paper") }, { "stationery-archival", _("Archival Paper") }, { "stationery-coated", _("Coated Paper") }, { "stationery-cotton", _("Cotton Paper") }, { "stationery-fine", _("Vellum Paper") }, { "stationery-heavyweight", _("Heavyweight Paper") }, { "stationery-heavyweight-coated", _("Heavyweight Coated Paper") }, { "stationery-inkjet", _("Inkjet Paper") }, { "stationery-letterhead", _("Letterhead") }, { "stationery-lightweight", _("Lightweight Paper") }, { "stationery-preprinted", _("Preprinted Paper") }, { "stationery-prepunched", _("Punched Paper") }, { "tab-stock", _("Tab Stock") }, { "tractor", _("Tractor") }, { "transfer", _("Transfer") }, { "transparency", _("Transparency") }, { "triple-wall", _("Triple Wall Cardboard") }, { "wet-film", _("Wet Film") } }; cupsFilePrintf(fp, "*OpenUI *MediaType: PickOne\n" "*OrderDependency: 10 AnySetup *MediaType\n" "*DefaultMediaType: %s\n", ppdname); for (i = 0; i < count; i ++) { const char *keyword = ippGetString(attr, i, NULL); pwg_ppdize_name(keyword, ppdname, sizeof(ppdname)); for (j = 0; j < (int)(sizeof(media_types) / sizeof(media_types[0])); j ++) if (!strcmp(keyword, media_types[j][0])) break; if (j < (int)(sizeof(media_types) / sizeof(media_types[0]))) cupsFilePrintf(fp, "*MediaType %s/%s: \"<>setpagedevice\"\n", ppdname, _cupsLangString(lang, media_types[j][1]), ppdname); else cupsFilePrintf(fp, "*MediaType %s/%s: \"<>setpagedevice\"\n", ppdname, keyword, ppdname); } cupsFilePuts(fp, "*CloseUI: *MediaType\n"); } /* * ColorModel... */ if ((attr = ippFindAttribute(response, "urf-supported", IPP_TAG_KEYWORD)) == NULL) if ((attr = ippFindAttribute(response, "pwg-raster-document-type-supported", IPP_TAG_KEYWORD)) == NULL) if ((attr = ippFindAttribute(response, "print-color-mode-supported", IPP_TAG_KEYWORD)) == NULL) attr = ippFindAttribute(response, "output-mode-supported", IPP_TAG_KEYWORD); if (attr) { const char *default_color = NULL; /* Default */ for (i = 0, count = ippGetCount(attr); i < count; i ++) { const char *keyword = ippGetString(attr, i, NULL); /* Keyword for color/bit depth */ if (!strcasecmp(keyword, "black_1") || !strcmp(keyword, "bi-level") || !strcmp(keyword, "process-bi-level")) { if (!default_color) cupsFilePrintf(fp, "*OpenUI *ColorModel/%s: PickOne\n" "*OrderDependency: 10 AnySetup *ColorModel\n", _cupsLangString(lang, _("Color Mode"))); cupsFilePrintf(fp, "*ColorModel FastGray/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("Fast Grayscale"))); if (!default_color) default_color = "FastGray"; } else if (!strcasecmp(keyword, "sgray_8") || !strcmp(keyword, "W8") || !strcmp(keyword, "monochrome") || !strcmp(keyword, "process-monochrome")) { if (!default_color) cupsFilePrintf(fp, "*OpenUI *ColorModel/%s: PickOne\n" "*OrderDependency: 10 AnySetup *ColorModel\n", _cupsLangString(lang, _("Color Mode"))); cupsFilePrintf(fp, "*ColorModel Gray/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("Grayscale"))); if (!default_color || !strcmp(default_color, "FastGray")) default_color = "Gray"; } else if (!strcasecmp(keyword, "srgb_8") || !strcmp(keyword, "SRGB24") || !strcmp(keyword, "color")) { if (!default_color) cupsFilePrintf(fp, "*OpenUI *ColorModel/%s: PickOne\n" "*OrderDependency: 10 AnySetup *ColorModel\n", _cupsLangString(lang, _("Color Mode"))); cupsFilePrintf(fp, "*ColorModel RGB/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("Color"))); default_color = "RGB"; } else if (!strcasecmp(keyword, "adobe-rgb_16") || !strcmp(keyword, "ADOBERGB48")) { if (!default_color) cupsFilePrintf(fp, "*OpenUI *ColorModel/%s: PickOne\n" "*OrderDependency: 10 AnySetup *ColorModel\n", _cupsLangString(lang, _("Color Mode"))); cupsFilePrintf(fp, "*ColorModel AdobeRGB/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("Deep Color"))); if (!default_color) default_color = "AdobeRGB"; } } if (default_color) { cupsFilePrintf(fp, "*DefaultColorModel: %s\n", default_color); cupsFilePuts(fp, "*CloseUI: *ColorModel\n"); } } /* * Duplex... */ if ((attr = ippFindAttribute(response, "sides-supported", IPP_TAG_KEYWORD)) != NULL && ippContainsString(attr, "two-sided-long-edge")) { cupsFilePrintf(fp, "*OpenUI *Duplex/%s: PickOne\n" "*OrderDependency: 10 AnySetup *Duplex\n" "*DefaultDuplex: None\n" "*Duplex None/%s: \"<>setpagedevice\"\n" "*Duplex DuplexNoTumble/%s: \"<>setpagedevice\"\n" "*Duplex DuplexTumble/%s: \"<>setpagedevice\"\n" "*CloseUI: *Duplex\n", _cupsLangString(lang, _("2-Sided Printing")), _cupsLangString(lang, _("Off (1-Sided)")), _cupsLangString(lang, _("Long-Edge (Portrait)")), _cupsLangString(lang, _("Short-Edge (Landscape)"))); if ((attr = ippFindAttribute(response, "urf-supported", IPP_TAG_KEYWORD)) != NULL) { for (i = 0, count = ippGetCount(attr); i < count; i ++) { const char *dm = ippGetString(attr, i, NULL); /* DM value */ if (!_cups_strcasecmp(dm, "DM1")) { cupsFilePuts(fp, "*cupsBackSide: Normal\n"); break; } else if (!_cups_strcasecmp(dm, "DM2")) { cupsFilePuts(fp, "*cupsBackSide: Flipped\n"); break; } else if (!_cups_strcasecmp(dm, "DM3")) { cupsFilePuts(fp, "*cupsBackSide: Rotated\n"); break; } else if (!_cups_strcasecmp(dm, "DM4")) { cupsFilePuts(fp, "*cupsBackSide: ManualTumble\n"); break; } } } else if ((attr = ippFindAttribute(response, "pwg-raster-document-sheet-back", IPP_TAG_KEYWORD)) != NULL) { const char *keyword = ippGetString(attr, 0, NULL); /* Keyword value */ if (!strcmp(keyword, "flipped")) cupsFilePuts(fp, "*cupsBackSide: Flipped\n"); else if (!strcmp(keyword, "manual-tumble")) cupsFilePuts(fp, "*cupsBackSide: ManualTumble\n"); else if (!strcmp(keyword, "normal")) cupsFilePuts(fp, "*cupsBackSide: Normal\n"); else cupsFilePuts(fp, "*cupsBackSide: Rotated\n"); } } /* * Output bin... */ if ((attr = ippFindAttribute(response, "output-bin-default", IPP_TAG_ZERO)) != NULL) pwg_ppdize_name(ippGetString(attr, 0, NULL), ppdname, sizeof(ppdname)); else strlcpy(ppdname, "Unknown", sizeof(ppdname)); if ((attr = ippFindAttribute(response, "output-bin-supported", IPP_TAG_ZERO)) != NULL && (count = ippGetCount(attr)) > 1) { static const char * const output_bins[][2] = { /* "output-bin" strings */ { "auto", _("Automatic") }, { "bottom", _("Bottom Tray") }, { "center", _("Center Tray") }, { "face-down", _("Face Down") }, { "face-up", _("Face Up") }, { "large-capacity", _("Large Capacity Tray") }, { "left", _("Left Tray") }, { "mailbox-1", _("Mailbox 1") }, { "mailbox-2", _("Mailbox 2") }, { "mailbox-3", _("Mailbox 3") }, { "mailbox-4", _("Mailbox 4") }, { "mailbox-5", _("Mailbox 5") }, { "mailbox-6", _("Mailbox 6") }, { "mailbox-7", _("Mailbox 7") }, { "mailbox-8", _("Mailbox 8") }, { "mailbox-9", _("Mailbox 9") }, { "mailbox-10", _("Mailbox 10") }, { "middle", _("Middle") }, { "my-mailbox", _("My Mailbox") }, { "rear", _("Rear Tray") }, { "right", _("Right Tray") }, { "side", _("Side Tray") }, { "stacker-1", _("Stacker 1") }, { "stacker-2", _("Stacker 2") }, { "stacker-3", _("Stacker 3") }, { "stacker-4", _("Stacker 4") }, { "stacker-5", _("Stacker 5") }, { "stacker-6", _("Stacker 6") }, { "stacker-7", _("Stacker 7") }, { "stacker-8", _("Stacker 8") }, { "stacker-9", _("Stacker 9") }, { "stacker-10", _("Stacker 10") }, { "top", _("Top Tray") }, { "tray-1", _("Tray 1") }, { "tray-2", _("Tray 2") }, { "tray-3", _("Tray 3") }, { "tray-4", _("Tray 4") }, { "tray-5", _("Tray 5") }, { "tray-6", _("Tray 6") }, { "tray-7", _("Tray 7") }, { "tray-8", _("Tray 8") }, { "tray-9", _("Tray 9") }, { "tray-10", _("Tray 10") } }; cupsFilePrintf(fp, "*OpenUI *OutputBin: PickOne\n" "*OrderDependency: 10 AnySetup *OutputBin\n" "*DefaultOutputBin: %s\n", ppdname); for (i = 0; i < (int)(sizeof(output_bins) / sizeof(output_bins[0])); i ++) { if (!ippContainsString(attr, output_bins[i][0])) continue; pwg_ppdize_name(output_bins[i][0], ppdname, sizeof(ppdname)); cupsFilePrintf(fp, "*OutputBin %s/%s: \"\"\n", ppdname, _cupsLangString(lang, output_bins[i][1])); } cupsFilePuts(fp, "*CloseUI: *OutputBin\n"); } /* * Finishing options... * * Eventually need to re-add support for finishings-col-database, however * it is difficult to map arbitrary finishing-template values to PPD options * and have the right constraints apply (e.g. stapling vs. folding vs. * punching, etc.) */ if ((attr = ippFindAttribute(response, "finishings-supported", IPP_TAG_ENUM)) != NULL) { const char *name; /* String name */ int value; /* Enum value */ cups_array_t *names; /* Names we've added */ count = ippGetCount(attr); names = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); /* * Staple/Bind/Stitch */ for (i = 0; i < count; i ++) { value = ippGetInteger(attr, i); name = ippEnumString("finishings", value); if (!strncmp(name, "staple-", 7) || !strncmp(name, "bind-", 5) || !strncmp(name, "edge-stitch-", 12) || !strcmp(name, "saddle-stitch")) break; } if (i < count) { cupsFilePrintf(fp, "*OpenUI *StapleLocation/%s: PickOne\n", _cupsLangString(lang, _("Staple"))); cupsFilePuts(fp, "*OrderDependency: 10 AnySetup *StapleLocation\n"); cupsFilePuts(fp, "*DefaultStapleLocation: None\n"); cupsFilePrintf(fp, "*StapleLocation None/%s: \"\"\n", _cupsLangString(lang, _("None"))); for (; i < count; i ++) { value = ippGetInteger(attr, i); name = ippEnumString("finishings", value); if (strncmp(name, "staple-", 7) && strncmp(name, "bind-", 5) && strncmp(name, "edge-stitch-", 12) && strcmp(name, "saddle-stitch")) continue; if (cupsArrayFind(names, (char *)name)) continue; /* Already did this finishing template */ cupsArrayAdd(names, (char *)name); for (j = 0; j < (int)(sizeof(finishings) / sizeof(finishings[0])); j ++) { if (!strcmp(finishings[j][0], name)) { cupsFilePrintf(fp, "*StapleLocation %s/%s: \"\"\n", name, _cupsLangString(lang, finishings[j][1])); cupsFilePrintf(fp, "*cupsIPPFinishings %d/%s: \"*StapleLocation %s\"\n", value, name, name); break; } } } cupsFilePuts(fp, "*CloseUI: *StapleLocation\n"); } /* * Fold */ for (i = 0; i < count; i ++) { value = ippGetInteger(attr, i); name = ippEnumString("finishings", value); if (!strncmp(name, "fold-", 5)) break; } if (i < count) { cupsFilePrintf(fp, "*OpenUI *FoldType/%s: PickOne\n", _cupsLangString(lang, _("Fold"))); cupsFilePuts(fp, "*OrderDependency: 10 AnySetup *FoldType\n"); cupsFilePuts(fp, "*DefaultFoldType: None\n"); cupsFilePrintf(fp, "*FoldType None/%s: \"\"\n", _cupsLangString(lang, _("None"))); for (; i < count; i ++) { value = ippGetInteger(attr, i); name = ippEnumString("finishings", value); if (strncmp(name, "fold-", 5)) continue; if (cupsArrayFind(names, (char *)name)) continue; /* Already did this finishing template */ cupsArrayAdd(names, (char *)name); for (j = 0; j < (int)(sizeof(finishings) / sizeof(finishings[0])); j ++) { if (!strcmp(finishings[j][0], name)) { cupsFilePrintf(fp, "*FoldType %s/%s: \"\"\n", name, _cupsLangString(lang, finishings[j][1])); cupsFilePrintf(fp, "*cupsIPPFinishings %d/%s: \"*FoldType %s\"\n", value, name, name); break; } } } cupsFilePuts(fp, "*CloseUI: *FoldType\n"); } /* * Punch */ for (i = 0; i < count; i ++) { value = ippGetInteger(attr, i); name = ippEnumString("finishings", value); if (!strncmp(name, "punch-", 6)) break; } if (i < count) { cupsFilePrintf(fp, "*OpenUI *PunchMedia/%s: PickOne\n", _cupsLangString(lang, _("Punch"))); cupsFilePuts(fp, "*OrderDependency: 10 AnySetup *PunchMedia\n"); cupsFilePuts(fp, "*DefaultPunchMedia: None\n"); cupsFilePrintf(fp, "*PunchMedia None/%s: \"\"\n", _cupsLangString(lang, _("None"))); for (i = 0; i < count; i ++) { value = ippGetInteger(attr, i); name = ippEnumString("finishings", value); if (strncmp(name, "punch-", 6)) continue; if (cupsArrayFind(names, (char *)name)) continue; /* Already did this finishing template */ cupsArrayAdd(names, (char *)name); for (j = 0; j < (int)(sizeof(finishings) / sizeof(finishings[0])); j ++) { if (!strcmp(finishings[j][0], name)) { cupsFilePrintf(fp, "*PunchMedia %s/%s: \"\"\n", name, _cupsLangString(lang, finishings[j][1])); cupsFilePrintf(fp, "*cupsIPPFinishings %d/%s: \"*PunchMedia %s\"\n", value, name, name); break; } } } cupsFilePuts(fp, "*CloseUI: *PunchMedia\n"); } /* * Booklet */ if (ippContainsInteger(attr, IPP_FINISHINGS_BOOKLET_MAKER)) { cupsFilePrintf(fp, "*OpenUI *Booklet/%s: Boolean\n", _cupsLangString(lang, _("Booklet"))); cupsFilePuts(fp, "*OrderDependency: 10 AnySetup *Booklet\n"); cupsFilePuts(fp, "*DefaultBooklet: False\n"); cupsFilePuts(fp, "*Booklet False: \"\"\n"); cupsFilePuts(fp, "*Booklet True: \"\"\n"); cupsFilePrintf(fp, "*cupsIPPFinishings %d/booklet-maker: \"*Booklet True\"\n", IPP_FINISHINGS_BOOKLET_MAKER); cupsFilePuts(fp, "*CloseUI: *Booklet\n"); } cupsArrayDelete(names); } /* * cupsPrintQuality and DefaultResolution... */ quality = ippFindAttribute(response, "print-quality-supported", IPP_TAG_ENUM); if ((attr = ippFindAttribute(response, "urf-supported", IPP_TAG_KEYWORD)) != NULL) { int lowdpi = 0, hidpi = 0; /* Lower and higher resolution */ for (i = 0, count = ippGetCount(attr); i < count; i ++) { const char *rs = ippGetString(attr, i, NULL); /* RS value */ if (_cups_strncasecmp(rs, "RS", 2)) continue; lowdpi = atoi(rs + 2); if ((rs = strrchr(rs, '-')) != NULL) hidpi = atoi(rs + 1); else hidpi = lowdpi; break; } if (lowdpi == 0) { /* * Invalid "urf-supported" value... */ goto bad_ppd; } else { /* * Generate print qualities based on low and high DPIs... */ cupsFilePrintf(fp, "*DefaultResolution: %ddpi\n", lowdpi); cupsFilePrintf(fp, "*OpenUI *cupsPrintQuality/%s: PickOne\n" "*OrderDependency: 10 AnySetup *cupsPrintQuality\n" "*DefaultcupsPrintQuality: Normal\n", _cupsLangString(lang, _("Print Quality"))); if ((lowdpi & 1) == 0) cupsFilePrintf(fp, "*cupsPrintQuality Draft/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("Draft")), lowdpi, lowdpi / 2); else if (ippContainsInteger(quality, IPP_QUALITY_DRAFT)) cupsFilePrintf(fp, "*cupsPrintQuality Draft/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("Draft")), lowdpi, lowdpi); cupsFilePrintf(fp, "*cupsPrintQuality Normal/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("Normal")), lowdpi, lowdpi); if (hidpi > lowdpi || ippContainsInteger(quality, IPP_QUALITY_HIGH)) cupsFilePrintf(fp, "*cupsPrintQuality High/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("High")), hidpi, hidpi); cupsFilePuts(fp, "*CloseUI: *cupsPrintQuality\n"); } } else if ((attr = ippFindAttribute(response, "pwg-raster-document-resolution-supported", IPP_TAG_RESOLUTION)) != NULL) { /* * Make a sorted list of resolutions. */ count = ippGetCount(attr); if (count > (int)(sizeof(resolutions) / sizeof(resolutions[0]))) count = (int)(sizeof(resolutions) / sizeof(resolutions[0])); for (i = 0; i < count; i ++) resolutions[i] = i; for (i = 0; i < (count - 1); i ++) { for (j = i + 1; j < count; j ++) { int ix, iy, /* First X and Y resolution */ jx, jy, /* Second X and Y resolution */ temp; /* Swap variable */ ipp_res_t units; /* Resolution units */ ix = ippGetResolution(attr, resolutions[i], &iy, &units); jx = ippGetResolution(attr, resolutions[j], &jy, &units); if (ix > jx || (ix == jx && iy > jy)) { /* * Swap these two resolutions... */ temp = resolutions[i]; resolutions[i] = resolutions[j]; resolutions[j] = temp; } } } /* * Generate print quality options... */ pwg_ppdize_resolution(attr, resolutions[count / 2], &xres, &yres, ppdname, sizeof(ppdname)); cupsFilePrintf(fp, "*DefaultResolution: %s\n", ppdname); cupsFilePrintf(fp, "*OpenUI *cupsPrintQuality/%s: PickOne\n" "*OrderDependency: 10 AnySetup *cupsPrintQuality\n" "*DefaultcupsPrintQuality: Normal\n", _cupsLangString(lang, _("Print Quality"))); if (count > 2 || ippContainsInteger(quality, IPP_QUALITY_DRAFT)) { pwg_ppdize_resolution(attr, resolutions[0], &xres, &yres, NULL, 0); cupsFilePrintf(fp, "*cupsPrintQuality Draft/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("Draft")), xres, yres); } pwg_ppdize_resolution(attr, resolutions[count / 2], &xres, &yres, NULL, 0); cupsFilePrintf(fp, "*cupsPrintQuality Normal/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("Normal")), xres, yres); if (count > 1 || ippContainsInteger(quality, IPP_QUALITY_HIGH)) { pwg_ppdize_resolution(attr, resolutions[count - 1], &xres, &yres, NULL, 0); cupsFilePrintf(fp, "*cupsPrintQuality High/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("High")), xres, yres); } cupsFilePuts(fp, "*CloseUI: *cupsPrintQuality\n"); } else if (is_apple || is_pwg) goto bad_ppd; else { if ((attr = ippFindAttribute(response, "printer-resolution-default", IPP_TAG_RESOLUTION)) != NULL) { pwg_ppdize_resolution(attr, 0, &xres, &yres, ppdname, sizeof(ppdname)); } else { xres = yres = 300; strlcpy(ppdname, "300dpi", sizeof(ppdname)); } cupsFilePrintf(fp, "*DefaultResolution: %s\n", ppdname); cupsFilePrintf(fp, "*OpenUI *cupsPrintQuality/%s: PickOne\n" "*OrderDependency: 10 AnySetup *cupsPrintQuality\n" "*DefaultcupsPrintQuality: Normal\n", _cupsLangString(lang, _("Print Quality"))); if (ippContainsInteger(quality, IPP_QUALITY_DRAFT)) cupsFilePrintf(fp, "*cupsPrintQuality Draft/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("Draft")), xres, yres); cupsFilePrintf(fp, "*cupsPrintQuality Normal/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("Normal")), xres, yres); if (ippContainsInteger(quality, IPP_QUALITY_HIGH)) cupsFilePrintf(fp, "*cupsPrintQuality High/%s: \"<>setpagedevice\"\n", _cupsLangString(lang, _("High")), xres, yres); cupsFilePuts(fp, "*CloseUI: *cupsPrintQuality\n"); } /* * Close up and return... */ cupsFileClose(fp); return (buffer); /* * If we get here then there was a problem creating the PPD... */ bad_ppd: cupsFileClose(fp); unlink(buffer); *buffer = '\0'; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Printer does not support required IPP attributes or document formats."), 1); return (NULL); } /* * '_pwgInputSlotForSource()' - Get the InputSlot name for the given PWG * media-source. */ const char * /* O - InputSlot name */ _pwgInputSlotForSource( const char *media_source, /* I - PWG media-source */ char *name, /* I - Name buffer */ size_t namesize) /* I - Size of name buffer */ { /* * Range check input... */ if (!media_source || !name || namesize < PPD_MAX_NAME) return (NULL); if (_cups_strcasecmp(media_source, "main")) strlcpy(name, "Cassette", namesize); else if (_cups_strcasecmp(media_source, "alternate")) strlcpy(name, "Multipurpose", namesize); else if (_cups_strcasecmp(media_source, "large-capacity")) strlcpy(name, "LargeCapacity", namesize); else if (_cups_strcasecmp(media_source, "bottom")) strlcpy(name, "Lower", namesize); else if (_cups_strcasecmp(media_source, "middle")) strlcpy(name, "Middle", namesize); else if (_cups_strcasecmp(media_source, "top")) strlcpy(name, "Upper", namesize); else if (_cups_strcasecmp(media_source, "rear")) strlcpy(name, "Rear", namesize); else if (_cups_strcasecmp(media_source, "side")) strlcpy(name, "Side", namesize); else if (_cups_strcasecmp(media_source, "envelope")) strlcpy(name, "Envelope", namesize); else if (_cups_strcasecmp(media_source, "main-roll")) strlcpy(name, "Roll", namesize); else if (_cups_strcasecmp(media_source, "alternate-roll")) strlcpy(name, "Roll2", namesize); else pwg_ppdize_name(media_source, name, namesize); return (name); } /* * '_pwgMediaTypeForType()' - Get the MediaType name for the given PWG * media-type. */ const char * /* O - MediaType name */ _pwgMediaTypeForType( const char *media_type, /* I - PWG media-type */ char *name, /* I - Name buffer */ size_t namesize) /* I - Size of name buffer */ { /* * Range check input... */ if (!media_type || !name || namesize < PPD_MAX_NAME) return (NULL); if (_cups_strcasecmp(media_type, "auto")) strlcpy(name, "Auto", namesize); else if (_cups_strcasecmp(media_type, "cardstock")) strlcpy(name, "Cardstock", namesize); else if (_cups_strcasecmp(media_type, "envelope")) strlcpy(name, "Envelope", namesize); else if (_cups_strcasecmp(media_type, "photographic-glossy")) strlcpy(name, "Glossy", namesize); else if (_cups_strcasecmp(media_type, "photographic-high-gloss")) strlcpy(name, "HighGloss", namesize); else if (_cups_strcasecmp(media_type, "photographic-matte")) strlcpy(name, "Matte", namesize); else if (_cups_strcasecmp(media_type, "stationery")) strlcpy(name, "Plain", namesize); else if (_cups_strcasecmp(media_type, "stationery-coated")) strlcpy(name, "Coated", namesize); else if (_cups_strcasecmp(media_type, "stationery-inkjet")) strlcpy(name, "Inkjet", namesize); else if (_cups_strcasecmp(media_type, "stationery-letterhead")) strlcpy(name, "Letterhead", namesize); else if (_cups_strcasecmp(media_type, "stationery-preprinted")) strlcpy(name, "Preprinted", namesize); else if (_cups_strcasecmp(media_type, "transparency")) strlcpy(name, "Transparency", namesize); else pwg_ppdize_name(media_type, name, namesize); return (name); } /* * '_pwgPageSizeForMedia()' - Get the PageSize name for the given media. */ const char * /* O - PageSize name */ _pwgPageSizeForMedia( pwg_media_t *media, /* I - Media */ char *name, /* I - PageSize name buffer */ size_t namesize) /* I - Size of name buffer */ { const char *sizeptr, /* Pointer to size in PWG name */ *dimptr; /* Pointer to dimensions in PWG name */ /* * Range check input... */ if (!media || !name || namesize < PPD_MAX_NAME) return (NULL); /* * Copy or generate a PageSize name... */ if (media->ppd) { /* * Use a standard Adobe name... */ strlcpy(name, media->ppd, namesize); } else if (!media->pwg || !strncmp(media->pwg, "custom_", 7) || (sizeptr = strchr(media->pwg, '_')) == NULL || (dimptr = strchr(sizeptr + 1, '_')) == NULL || (size_t)(dimptr - sizeptr) > namesize) { /* * Use a name of the form "wNNNhNNN"... */ snprintf(name, namesize, "w%dh%d", (int)PWG_TO_POINTS(media->width), (int)PWG_TO_POINTS(media->length)); } else { /* * Copy the size name from class_sizename_dimensions... */ memcpy(name, sizeptr + 1, (size_t)(dimptr - sizeptr - 1)); name[dimptr - sizeptr - 1] = '\0'; } return (name); } /* * 'pwg_add_finishing()' - Add a finishings value. */ static void pwg_add_finishing( cups_array_t *finishings, /* I - Finishings array */ ipp_finishings_t template, /* I - Finishing template */ const char *name, /* I - PPD option */ const char *value) /* I - PPD choice */ { _pwg_finishings_t *f; /* New finishings value */ if ((f = (_pwg_finishings_t *)calloc(1, sizeof(_pwg_finishings_t))) != NULL) { f->value = template; f->num_options = cupsAddOption(name, value, 0, &f->options); cupsArrayAdd(finishings, f); } } /* * 'pwg_compare_finishings()' - Compare two finishings values. */ static int /* O - Result of comparison */ pwg_compare_finishings( _pwg_finishings_t *a, /* I - First finishings value */ _pwg_finishings_t *b) /* I - Second finishings value */ { return ((int)b->value - (int)a->value); } /* * 'pwg_free_finishings()' - Free a finishings value. */ static void pwg_free_finishings( _pwg_finishings_t *f) /* I - Finishings value */ { cupsFreeOptions(f->num_options, f->options); free(f); } /* * 'pwg_ppdize_name()' - Convert an IPP keyword to a PPD keyword. */ static void pwg_ppdize_name(const char *ipp, /* I - IPP keyword */ char *name, /* I - Name buffer */ size_t namesize) /* I - Size of name buffer */ { char *ptr, /* Pointer into name buffer */ *end; /* End of name buffer */ if (!ipp) { *name = '\0'; return; } *name = (char)toupper(*ipp++); for (ptr = name + 1, end = name + namesize - 1; *ipp && ptr < end;) { if (*ipp == '-' && _cups_isalnum(ipp[1])) { ipp ++; *ptr++ = (char)toupper(*ipp++ & 255); } else *ptr++ = *ipp++; } *ptr = '\0'; } /* * 'pwg_ppdize_resolution()' - Convert PWG resolution values to PPD values. */ static void pwg_ppdize_resolution( ipp_attribute_t *attr, /* I - Attribute to convert */ int element, /* I - Element to convert */ int *xres, /* O - X resolution in DPI */ int *yres, /* O - Y resolution in DPI */ char *name, /* I - Name buffer */ size_t namesize) /* I - Size of name buffer */ { ipp_res_t units; /* Units for resolution */ *xres = ippGetResolution(attr, element, yres, &units); if (units == IPP_RES_PER_CM) { *xres = (int)(*xres * 2.54); *yres = (int)(*yres * 2.54); } if (name && namesize > 4) { if (*xres == *yres) snprintf(name, namesize, "%ddpi", *xres); else snprintf(name, namesize, "%dx%ddpi", *xres, *yres); } } /* * 'pwg_unppdize_name()' - Convert a PPD keyword to a lowercase IPP keyword. */ static void pwg_unppdize_name(const char *ppd, /* I - PPD keyword */ char *name, /* I - Name buffer */ size_t namesize, /* I - Size of name buffer */ const char *dashchars)/* I - Characters to be replaced by dashes */ { char *ptr, /* Pointer into name buffer */ *end; /* End of name buffer */ if (_cups_islower(*ppd)) { /* * Already lowercase name, use as-is? */ const char *ppdptr; /* Pointer into PPD keyword */ for (ppdptr = ppd + 1; *ppdptr; ppdptr ++) if (_cups_isupper(*ppdptr) || strchr(dashchars, *ppdptr)) break; if (!*ppdptr) { strlcpy(name, ppd, namesize); return; } } for (ptr = name, end = name + namesize - 1; *ppd && ptr < end; ppd ++) { if (_cups_isalnum(*ppd) || *ppd == '-') *ptr++ = (char)tolower(*ppd & 255); else if (strchr(dashchars, *ppd)) *ptr++ = '-'; else *ptr++ = *ppd; if (!_cups_isupper(*ppd) && _cups_isalnum(*ppd) && _cups_isupper(ppd[1]) && ptr < end) *ptr++ = '-'; else if (!isdigit(*ppd & 255) && isdigit(ppd[1] & 255)) *ptr++ = '-'; } *ptr = '\0'; } cups-2.2.7/cups/ppd-conflicts.c000664 000765 000024 00000101575 13255074424 017047 0ustar00msweetstaff000000 000000 /* * Option conflict management routines for CUPS. * * Copyright 2007-2018 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * PostScript is a trademark of Adobe Systems, Inc. * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include "ppd-private.h" /* * Local constants... */ enum { _PPD_OPTION_CONSTRAINTS, _PPD_INSTALLABLE_CONSTRAINTS, _PPD_ALL_CONSTRAINTS }; /* * Local functions... */ static int ppd_is_installable(ppd_group_t *installable, const char *option); static void ppd_load_constraints(ppd_file_t *ppd); static cups_array_t *ppd_test_constraints(ppd_file_t *ppd, const char *option, const char *choice, int num_options, cups_option_t *options, int which); /* * 'cupsGetConflicts()' - Get a list of conflicting options in a marked PPD. * * This function gets a list of options that would conflict if "option" and * "choice" were marked in the PPD. You would typically call this function * after marking the currently selected options in the PPD in order to * determine whether a new option selection would cause a conflict. * * The number of conflicting options are returned with "options" pointing to * the conflicting options. The returned option array must be freed using * @link cupsFreeOptions@. * * @since CUPS 1.4/macOS 10.6@ */ int /* O - Number of conflicting options */ cupsGetConflicts( ppd_file_t *ppd, /* I - PPD file */ const char *option, /* I - Option to test */ const char *choice, /* I - Choice to test */ cups_option_t **options) /* O - Conflicting options */ { int i, /* Looping var */ num_options; /* Number of conflicting options */ cups_array_t *active; /* Active conflicts */ _ppd_cups_uiconsts_t *c; /* Current constraints */ _ppd_cups_uiconst_t *cptr; /* Current constraint */ ppd_choice_t *marked; /* Marked choice */ /* * Range check input... */ if (options) *options = NULL; if (!ppd || !option || !choice || !options) return (0); /* * Test for conflicts... */ active = ppd_test_constraints(ppd, option, choice, 0, NULL, _PPD_ALL_CONSTRAINTS); /* * Loop through all of the UI constraints and add any options that conflict... */ for (num_options = 0, c = (_ppd_cups_uiconsts_t *)cupsArrayFirst(active); c; c = (_ppd_cups_uiconsts_t *)cupsArrayNext(active)) { for (i = c->num_constraints, cptr = c->constraints; i > 0; i --, cptr ++) if (_cups_strcasecmp(cptr->option->keyword, option)) { if (cptr->choice) num_options = cupsAddOption(cptr->option->keyword, cptr->choice->choice, num_options, options); else if ((marked = ppdFindMarkedChoice(ppd, cptr->option->keyword)) != NULL) num_options = cupsAddOption(cptr->option->keyword, marked->choice, num_options, options); } } cupsArrayDelete(active); return (num_options); } /* * 'cupsResolveConflicts()' - Resolve conflicts in a marked PPD. * * This function attempts to resolve any conflicts in a marked PPD, returning * a list of option changes that are required to resolve them. On input, * "num_options" and "options" contain any pending option changes that have * not yet been marked, while "option" and "choice" contain the most recent * selection which may or may not be in "num_options" or "options". * * On successful return, "num_options" and "options" are updated to contain * "option" and "choice" along with any changes required to resolve conflicts * specified in the PPD file and 1 is returned. * * If option conflicts cannot be resolved, "num_options" and "options" are not * changed and 0 is returned. * * When resolving conflicts, @code cupsResolveConflicts@ does not consider * changes to the current page size (@code media@, @code PageSize@, and * @code PageRegion@) or to the most recent option specified in "option". * Thus, if the only way to resolve a conflict is to change the page size * or the option the user most recently changed, @code cupsResolveConflicts@ * will return 0 to indicate it was unable to resolve the conflicts. * * The @code cupsResolveConflicts@ function uses one of two sources of option * constraint information. The preferred constraint information is defined by * @code cupsUIConstraints@ and @code cupsUIResolver@ attributes - in this * case, the PPD file provides constraint resolution actions. * * The backup constraint information is defined by the * @code UIConstraints@ and @code NonUIConstraints@ attributes. These * constraints are resolved algorithmically by first selecting the default * choice for the conflicting option, then iterating over all possible choices * until a non-conflicting option choice is found. * * @since CUPS 1.4/macOS 10.6@ */ int /* O - 1 on success, 0 on failure */ cupsResolveConflicts( ppd_file_t *ppd, /* I - PPD file */ const char *option, /* I - Newly selected option or @code NULL@ for none */ const char *choice, /* I - Newly selected choice or @code NULL@ for none */ int *num_options, /* IO - Number of additional selected options */ cups_option_t **options) /* IO - Additional selected options */ { int i, /* Looping var */ tries, /* Number of tries */ num_newopts; /* Number of new options */ cups_option_t *newopts; /* New options */ cups_array_t *active = NULL, /* Active constraints */ *pass, /* Resolvers for this pass */ *resolvers, /* Resolvers we have used */ *test; /* Test array for conflicts */ _ppd_cups_uiconsts_t *consts; /* Current constraints */ _ppd_cups_uiconst_t *constptr; /* Current constraint */ ppd_attr_t *resolver; /* Current resolver */ const char *resval; /* Pointer into resolver value */ char resoption[PPD_MAX_NAME], /* Current resolver option */ reschoice[PPD_MAX_NAME], /* Current resolver choice */ *resptr, /* Pointer into option/choice */ firstpage[255]; /* AP_FIRSTPAGE_Keyword string */ const char *value; /* Selected option value */ int changed; /* Did we change anything? */ ppd_choice_t *marked; /* Marked choice */ /* * Range check input... */ if (!ppd || !num_options || !options || (option == NULL) != (choice == NULL)) return (0); /* * Build a shadow option array... */ num_newopts = 0; newopts = NULL; for (i = 0; i < *num_options; i ++) num_newopts = cupsAddOption((*options)[i].name, (*options)[i].value, num_newopts, &newopts); if (option && _cups_strcasecmp(option, "Collate")) num_newopts = cupsAddOption(option, choice, num_newopts, &newopts); /* * Loop until we have no conflicts... */ cupsArraySave(ppd->sorted_attrs); resolvers = NULL; pass = cupsArrayNew((cups_array_func_t)_cups_strcasecmp, NULL); tries = 0; while (tries < 100 && (active = ppd_test_constraints(ppd, NULL, NULL, num_newopts, newopts, _PPD_ALL_CONSTRAINTS)) != NULL) { tries ++; if (!resolvers) resolvers = cupsArrayNew((cups_array_func_t)_cups_strcasecmp, NULL); for (consts = (_ppd_cups_uiconsts_t *)cupsArrayFirst(active), changed = 0; consts; consts = (_ppd_cups_uiconsts_t *)cupsArrayNext(active)) { if (consts->resolver[0]) { /* * Look up the resolver... */ if (cupsArrayFind(pass, consts->resolver)) continue; /* Already applied this resolver... */ if (cupsArrayFind(resolvers, consts->resolver)) { /* * Resolver loop! */ DEBUG_printf(("1cupsResolveConflicts: Resolver loop with %s!", consts->resolver)); goto error; } if ((resolver = ppdFindAttr(ppd, "cupsUIResolver", consts->resolver)) == NULL) { DEBUG_printf(("1cupsResolveConflicts: Resolver %s not found!", consts->resolver)); goto error; } if (!resolver->value) { DEBUG_printf(("1cupsResolveConflicts: Resolver %s has no value!", consts->resolver)); goto error; } /* * Add the options from the resolver... */ cupsArrayAdd(pass, consts->resolver); cupsArrayAdd(resolvers, consts->resolver); for (resval = resolver->value; *resval && !changed;) { while (_cups_isspace(*resval)) resval ++; if (*resval != '*') break; for (resval ++, resptr = resoption; *resval && !_cups_isspace(*resval); resval ++) if (resptr < (resoption + sizeof(resoption) - 1)) *resptr++ = *resval; *resptr = '\0'; while (_cups_isspace(*resval)) resval ++; for (resptr = reschoice; *resval && !_cups_isspace(*resval); resval ++) if (resptr < (reschoice + sizeof(reschoice) - 1)) *resptr++ = *resval; *resptr = '\0'; if (!resoption[0] || !reschoice[0]) break; /* * Is this the option we are changing? */ snprintf(firstpage, sizeof(firstpage), "AP_FIRSTPAGE_%s", resoption); if (option && (!_cups_strcasecmp(resoption, option) || !_cups_strcasecmp(firstpage, option) || (!_cups_strcasecmp(option, "PageSize") && !_cups_strcasecmp(resoption, "PageRegion")) || (!_cups_strcasecmp(option, "AP_FIRSTPAGE_PageSize") && !_cups_strcasecmp(resoption, "PageSize")) || (!_cups_strcasecmp(option, "AP_FIRSTPAGE_PageSize") && !_cups_strcasecmp(resoption, "PageRegion")) || (!_cups_strcasecmp(option, "PageRegion") && !_cups_strcasecmp(resoption, "PageSize")) || (!_cups_strcasecmp(option, "AP_FIRSTPAGE_PageRegion") && !_cups_strcasecmp(resoption, "PageSize")) || (!_cups_strcasecmp(option, "AP_FIRSTPAGE_PageRegion") && !_cups_strcasecmp(resoption, "PageRegion")))) continue; /* * Try this choice... */ if ((test = ppd_test_constraints(ppd, resoption, reschoice, num_newopts, newopts, _PPD_ALL_CONSTRAINTS)) == NULL) { /* * That worked... */ changed = 1; } else cupsArrayDelete(test); /* * Add the option/choice from the resolver regardless of whether it * worked; this makes sure that we can cascade several changes to * make things resolve... */ num_newopts = cupsAddOption(resoption, reschoice, num_newopts, &newopts); } } else { /* * Try resolving by choosing the default values for non-installable * options, then by iterating through the possible choices... */ int j; /* Looping var */ ppd_choice_t *cptr; /* Current choice */ ppd_size_t *size; /* Current page size */ for (i = consts->num_constraints, constptr = consts->constraints; i > 0 && !changed; i --, constptr ++) { /* * Can't resolve by changing an installable option... */ if (constptr->installable) continue; /* * Is this the option we are changing? */ if (option && (!_cups_strcasecmp(constptr->option->keyword, option) || (!_cups_strcasecmp(option, "PageSize") && !_cups_strcasecmp(constptr->option->keyword, "PageRegion")) || (!_cups_strcasecmp(option, "PageRegion") && !_cups_strcasecmp(constptr->option->keyword, "PageSize")))) continue; /* * Get the current option choice... */ if ((value = cupsGetOption(constptr->option->keyword, num_newopts, newopts)) == NULL) { if (!_cups_strcasecmp(constptr->option->keyword, "PageSize") || !_cups_strcasecmp(constptr->option->keyword, "PageRegion")) { if ((value = cupsGetOption("PageSize", num_newopts, newopts)) == NULL) value = cupsGetOption("PageRegion", num_newopts, newopts); if (!value) { if ((size = ppdPageSize(ppd, NULL)) != NULL) value = size->name; else value = ""; } } else { marked = ppdFindMarkedChoice(ppd, constptr->option->keyword); value = marked ? marked->choice : ""; } } if (!_cups_strncasecmp(value, "Custom.", 7)) value = "Custom"; /* * Try the default choice... */ test = NULL; if (_cups_strcasecmp(value, constptr->option->defchoice) && (test = ppd_test_constraints(ppd, constptr->option->keyword, constptr->option->defchoice, num_newopts, newopts, _PPD_OPTION_CONSTRAINTS)) == NULL) { /* * That worked... */ num_newopts = cupsAddOption(constptr->option->keyword, constptr->option->defchoice, num_newopts, &newopts); changed = 1; } else { /* * Try each choice instead... */ for (j = constptr->option->num_choices, cptr = constptr->option->choices; j > 0; j --, cptr ++) { cupsArrayDelete(test); test = NULL; if (_cups_strcasecmp(value, cptr->choice) && _cups_strcasecmp(constptr->option->defchoice, cptr->choice) && _cups_strcasecmp("Custom", cptr->choice) && (test = ppd_test_constraints(ppd, constptr->option->keyword, cptr->choice, num_newopts, newopts, _PPD_OPTION_CONSTRAINTS)) == NULL) { /* * This choice works... */ num_newopts = cupsAddOption(constptr->option->keyword, cptr->choice, num_newopts, &newopts); changed = 1; break; } } cupsArrayDelete(test); } } } } if (!changed) { DEBUG_puts("1cupsResolveConflicts: Unable to automatically resolve " "constraint!"); goto error; } cupsArrayClear(pass); cupsArrayDelete(active); active = NULL; } if (tries >= 100) goto error; /* * Free the caller's option array... */ cupsFreeOptions(*num_options, *options); /* * If Collate is the option we are testing, add it here. Otherwise, remove * any Collate option from the resolve list since the filters automatically * handle manual collation... */ if (option && !_cups_strcasecmp(option, "Collate")) num_newopts = cupsAddOption(option, choice, num_newopts, &newopts); else num_newopts = cupsRemoveOption("Collate", num_newopts, &newopts); /* * Return the new list of options to the caller... */ *num_options = num_newopts; *options = newopts; cupsArrayDelete(pass); cupsArrayDelete(resolvers); cupsArrayRestore(ppd->sorted_attrs); DEBUG_printf(("1cupsResolveConflicts: Returning %d options:", num_newopts)); #ifdef DEBUG for (i = 0; i < num_newopts; i ++) DEBUG_printf(("1cupsResolveConflicts: options[%d]: %s=%s", i, newopts[i].name, newopts[i].value)); #endif /* DEBUG */ return (1); /* * If we get here, we failed to resolve... */ error: cupsFreeOptions(num_newopts, newopts); cupsArrayDelete(active); cupsArrayDelete(pass); cupsArrayDelete(resolvers); cupsArrayRestore(ppd->sorted_attrs); DEBUG_puts("1cupsResolveConflicts: Unable to resolve conflicts!"); return (0); } /* * 'ppdConflicts()' - Check to see if there are any conflicts among the * marked option choices. * * The returned value is the same as returned by @link ppdMarkOption@. */ int /* O - Number of conflicts found */ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */ { int i, /* Looping variable */ conflicts; /* Number of conflicts */ cups_array_t *active; /* Active conflicts */ _ppd_cups_uiconsts_t *c; /* Current constraints */ _ppd_cups_uiconst_t *cptr; /* Current constraint */ ppd_option_t *o; /* Current option */ if (!ppd) return (0); /* * Clear all conflicts... */ cupsArraySave(ppd->options); for (o = ppdFirstOption(ppd); o; o = ppdNextOption(ppd)) o->conflicted = 0; cupsArrayRestore(ppd->options); /* * Test for conflicts... */ active = ppd_test_constraints(ppd, NULL, NULL, 0, NULL, _PPD_ALL_CONSTRAINTS); conflicts = cupsArrayCount(active); /* * Loop through all of the UI constraints and flag any options * that conflict... */ for (c = (_ppd_cups_uiconsts_t *)cupsArrayFirst(active); c; c = (_ppd_cups_uiconsts_t *)cupsArrayNext(active)) { for (i = c->num_constraints, cptr = c->constraints; i > 0; i --, cptr ++) cptr->option->conflicted = 1; } cupsArrayDelete(active); /* * Return the number of conflicts found... */ return (conflicts); } /* * 'ppdInstallableConflict()' - Test whether an option choice conflicts with * an installable option. * * This function tests whether a particular option choice is available based * on constraints against options in the "InstallableOptions" group. * * @since CUPS 1.4/macOS 10.6@ */ int /* O - 1 if conflicting, 0 if not conflicting */ ppdInstallableConflict( ppd_file_t *ppd, /* I - PPD file */ const char *option, /* I - Option */ const char *choice) /* I - Choice */ { cups_array_t *active; /* Active conflicts */ DEBUG_printf(("2ppdInstallableConflict(ppd=%p, option=\"%s\", choice=\"%s\")", ppd, option, choice)); /* * Range check input... */ if (!ppd || !option || !choice) return (0); /* * Test constraints using the new option... */ active = ppd_test_constraints(ppd, option, choice, 0, NULL, _PPD_INSTALLABLE_CONSTRAINTS); cupsArrayDelete(active); return (active != NULL); } /* * 'ppd_is_installable()' - Determine whether an option is in the * InstallableOptions group. */ static int /* O - 1 if installable, 0 if normal */ ppd_is_installable( ppd_group_t *installable, /* I - InstallableOptions group */ const char *name) /* I - Option name */ { if (installable) { int i; /* Looping var */ ppd_option_t *option; /* Current option */ for (i = installable->num_options, option = installable->options; i > 0; i --, option ++) if (!_cups_strcasecmp(option->keyword, name)) return (1); } return (0); } /* * 'ppd_load_constraints()' - Load constraints from a PPD file. */ static void ppd_load_constraints(ppd_file_t *ppd) /* I - PPD file */ { int i; /* Looping var */ ppd_const_t *oldconst; /* Current UIConstraints data */ ppd_attr_t *constattr; /* Current cupsUIConstraints attribute */ _ppd_cups_uiconsts_t *consts; /* Current cupsUIConstraints data */ _ppd_cups_uiconst_t *constptr; /* Current constraint */ ppd_group_t *installable; /* Installable options group */ const char *vptr; /* Pointer into constraint value */ char option[PPD_MAX_NAME], /* Option name/MainKeyword */ choice[PPD_MAX_NAME], /* Choice/OptionKeyword */ *ptr; /* Pointer into option or choice */ DEBUG_printf(("7ppd_load_constraints(ppd=%p)", ppd)); /* * Create an array to hold the constraint data... */ ppd->cups_uiconstraints = cupsArrayNew(NULL, NULL); /* * Find the installable options group if it exists... */ for (i = ppd->num_groups, installable = ppd->groups; i > 0; i --, installable ++) if (!_cups_strcasecmp(installable->name, "InstallableOptions")) break; if (i <= 0) installable = NULL; /* * Load old-style [Non]UIConstraints data... */ for (i = ppd->num_consts, oldconst = ppd->consts; i > 0; i --, oldconst ++) { /* * Weed out nearby duplicates, since the PPD spec requires that you * define both "*Foo foo *Bar bar" and "*Bar bar *Foo foo"... */ if (i > 1 && !_cups_strcasecmp(oldconst[0].option1, oldconst[1].option2) && !_cups_strcasecmp(oldconst[0].choice1, oldconst[1].choice2) && !_cups_strcasecmp(oldconst[0].option2, oldconst[1].option1) && !_cups_strcasecmp(oldconst[0].choice2, oldconst[1].choice1)) continue; /* * Allocate memory... */ if ((consts = calloc(1, sizeof(_ppd_cups_uiconsts_t))) == NULL) { DEBUG_puts("8ppd_load_constraints: Unable to allocate memory for " "UIConstraints!"); return; } if ((constptr = calloc(2, sizeof(_ppd_cups_uiconst_t))) == NULL) { free(consts); DEBUG_puts("8ppd_load_constraints: Unable to allocate memory for " "UIConstraints!"); return; } /* * Fill in the information... */ consts->num_constraints = 2; consts->constraints = constptr; if (!_cups_strncasecmp(oldconst->option1, "Custom", 6) && !_cups_strcasecmp(oldconst->choice1, "True")) { constptr[0].option = ppdFindOption(ppd, oldconst->option1 + 6); constptr[0].choice = ppdFindChoice(constptr[0].option, "Custom"); constptr[0].installable = 0; } else { constptr[0].option = ppdFindOption(ppd, oldconst->option1); constptr[0].choice = ppdFindChoice(constptr[0].option, oldconst->choice1); constptr[0].installable = ppd_is_installable(installable, oldconst->option1); } if (!constptr[0].option || (!constptr[0].choice && oldconst->choice1[0])) { DEBUG_printf(("8ppd_load_constraints: Unknown option *%s %s!", oldconst->option1, oldconst->choice1)); free(consts->constraints); free(consts); continue; } if (!_cups_strncasecmp(oldconst->option2, "Custom", 6) && !_cups_strcasecmp(oldconst->choice2, "True")) { constptr[1].option = ppdFindOption(ppd, oldconst->option2 + 6); constptr[1].choice = ppdFindChoice(constptr[1].option, "Custom"); constptr[1].installable = 0; } else { constptr[1].option = ppdFindOption(ppd, oldconst->option2); constptr[1].choice = ppdFindChoice(constptr[1].option, oldconst->choice2); constptr[1].installable = ppd_is_installable(installable, oldconst->option2); } if (!constptr[1].option || (!constptr[1].choice && oldconst->choice2[0])) { DEBUG_printf(("8ppd_load_constraints: Unknown option *%s %s!", oldconst->option2, oldconst->choice2)); free(consts->constraints); free(consts); continue; } consts->installable = constptr[0].installable || constptr[1].installable; /* * Add it to the constraints array... */ cupsArrayAdd(ppd->cups_uiconstraints, consts); } /* * Then load new-style constraints... */ for (constattr = ppdFindAttr(ppd, "cupsUIConstraints", NULL); constattr; constattr = ppdFindNextAttr(ppd, "cupsUIConstraints", NULL)) { if (!constattr->value) { DEBUG_puts("8ppd_load_constraints: Bad cupsUIConstraints value!"); continue; } for (i = 0, vptr = strchr(constattr->value, '*'); vptr; i ++, vptr = strchr(vptr + 1, '*')); if (i == 0) { DEBUG_puts("8ppd_load_constraints: Bad cupsUIConstraints value!"); continue; } if ((consts = calloc(1, sizeof(_ppd_cups_uiconsts_t))) == NULL) { DEBUG_puts("8ppd_load_constraints: Unable to allocate memory for " "cupsUIConstraints!"); return; } if ((constptr = calloc((size_t)i, sizeof(_ppd_cups_uiconst_t))) == NULL) { free(consts); DEBUG_puts("8ppd_load_constraints: Unable to allocate memory for " "cupsUIConstraints!"); return; } consts->num_constraints = i; consts->constraints = constptr; strlcpy(consts->resolver, constattr->spec, sizeof(consts->resolver)); for (i = 0, vptr = strchr(constattr->value, '*'); vptr; i ++, vptr = strchr(vptr, '*'), constptr ++) { /* * Extract "*Option Choice" or just "*Option"... */ for (vptr ++, ptr = option; *vptr && !_cups_isspace(*vptr); vptr ++) if (ptr < (option + sizeof(option) - 1)) *ptr++ = *vptr; *ptr = '\0'; while (_cups_isspace(*vptr)) vptr ++; if (*vptr == '*') choice[0] = '\0'; else { for (ptr = choice; *vptr && !_cups_isspace(*vptr); vptr ++) if (ptr < (choice + sizeof(choice) - 1)) *ptr++ = *vptr; *ptr = '\0'; } if (!_cups_strncasecmp(option, "Custom", 6) && !_cups_strcasecmp(choice, "True")) { _cups_strcpy(option, option + 6); strlcpy(choice, "Custom", sizeof(choice)); } constptr->option = ppdFindOption(ppd, option); constptr->choice = ppdFindChoice(constptr->option, choice); constptr->installable = ppd_is_installable(installable, option); consts->installable |= constptr->installable; if (!constptr->option || (!constptr->choice && choice[0])) { DEBUG_printf(("8ppd_load_constraints: Unknown option *%s %s!", option, choice)); break; } } if (!vptr) cupsArrayAdd(ppd->cups_uiconstraints, consts); else { free(consts->constraints); free(consts); } } } /* * 'ppd_test_constraints()' - See if any constraints are active. */ static cups_array_t * /* O - Array of active constraints */ ppd_test_constraints( ppd_file_t *ppd, /* I - PPD file */ const char *option, /* I - Current option */ const char *choice, /* I - Current choice */ int num_options, /* I - Number of additional options */ cups_option_t *options, /* I - Additional options */ int which) /* I - Which constraints to test */ { int i; /* Looping var */ _ppd_cups_uiconsts_t *consts; /* Current constraints */ _ppd_cups_uiconst_t *constptr; /* Current constraint */ ppd_choice_t key, /* Search key */ *marked; /* Marked choice */ cups_array_t *active = NULL; /* Active constraints */ const char *value, /* Current value */ *firstvalue; /* AP_FIRSTPAGE_Keyword value */ char firstpage[255]; /* AP_FIRSTPAGE_Keyword string */ DEBUG_printf(("7ppd_test_constraints(ppd=%p, option=\"%s\", choice=\"%s\", " "num_options=%d, options=%p, which=%d)", ppd, option, choice, num_options, options, which)); if (!ppd->cups_uiconstraints) ppd_load_constraints(ppd); DEBUG_printf(("9ppd_test_constraints: %d constraints!", cupsArrayCount(ppd->cups_uiconstraints))); cupsArraySave(ppd->marked); for (consts = (_ppd_cups_uiconsts_t *)cupsArrayFirst(ppd->cups_uiconstraints); consts; consts = (_ppd_cups_uiconsts_t *)cupsArrayNext(ppd->cups_uiconstraints)) { DEBUG_printf(("9ppd_test_constraints: installable=%d, resolver=\"%s\", " "num_constraints=%d option1=\"%s\", choice1=\"%s\", " "option2=\"%s\", choice2=\"%s\", ...", consts->installable, consts->resolver, consts->num_constraints, consts->constraints[0].option->keyword, consts->constraints[0].choice ? consts->constraints[0].choice->choice : "", consts->constraints[1].option->keyword, consts->constraints[1].choice ? consts->constraints[1].choice->choice : "")); if (consts->installable && which < _PPD_INSTALLABLE_CONSTRAINTS) continue; /* Skip installable option constraint */ if (!consts->installable && which == _PPD_INSTALLABLE_CONSTRAINTS) continue; /* Skip non-installable option constraint */ if ((which == _PPD_OPTION_CONSTRAINTS || which == _PPD_INSTALLABLE_CONSTRAINTS) && option) { /* * Skip constraints that do not involve the current option... */ for (i = consts->num_constraints, constptr = consts->constraints; i > 0; i --, constptr ++) { if (!_cups_strcasecmp(constptr->option->keyword, option)) break; if (!_cups_strncasecmp(option, "AP_FIRSTPAGE_", 13) && !_cups_strcasecmp(constptr->option->keyword, option + 13)) break; } if (!i) continue; } DEBUG_puts("9ppd_test_constraints: Testing..."); for (i = consts->num_constraints, constptr = consts->constraints; i > 0; i --, constptr ++) { DEBUG_printf(("9ppd_test_constraints: %s=%s?", constptr->option->keyword, constptr->choice ? constptr->choice->choice : "")); if (constptr->choice && (!_cups_strcasecmp(constptr->option->keyword, "PageSize") || !_cups_strcasecmp(constptr->option->keyword, "PageRegion"))) { /* * PageSize and PageRegion are used depending on the selected input slot * and manual feed mode. Validate against the selected page size instead * of an individual option... */ if (option && choice && (!_cups_strcasecmp(option, "PageSize") || !_cups_strcasecmp(option, "PageRegion"))) { value = choice; } else if ((value = cupsGetOption("PageSize", num_options, options)) == NULL) if ((value = cupsGetOption("PageRegion", num_options, options)) == NULL) if ((value = cupsGetOption("media", num_options, options)) == NULL) { ppd_size_t *size = ppdPageSize(ppd, NULL); if (size) value = size->name; } if (value && !_cups_strncasecmp(value, "Custom.", 7)) value = "Custom"; if (option && choice && (!_cups_strcasecmp(option, "AP_FIRSTPAGE_PageSize") || !_cups_strcasecmp(option, "AP_FIRSTPAGE_PageRegion"))) { firstvalue = choice; } else if ((firstvalue = cupsGetOption("AP_FIRSTPAGE_PageSize", num_options, options)) == NULL) firstvalue = cupsGetOption("AP_FIRSTPAGE_PageRegion", num_options, options); if (firstvalue && !_cups_strncasecmp(firstvalue, "Custom.", 7)) firstvalue = "Custom"; if ((!value || _cups_strcasecmp(value, constptr->choice->choice)) && (!firstvalue || _cups_strcasecmp(firstvalue, constptr->choice->choice))) { DEBUG_puts("9ppd_test_constraints: NO"); break; } } else if (constptr->choice) { /* * Compare against the constrained choice... */ if (option && choice && !_cups_strcasecmp(option, constptr->option->keyword)) { if (!_cups_strncasecmp(choice, "Custom.", 7)) value = "Custom"; else value = choice; } else if ((value = cupsGetOption(constptr->option->keyword, num_options, options)) != NULL) { if (!_cups_strncasecmp(value, "Custom.", 7)) value = "Custom"; } else if (constptr->choice->marked) value = constptr->choice->choice; else value = NULL; /* * Now check AP_FIRSTPAGE_option... */ snprintf(firstpage, sizeof(firstpage), "AP_FIRSTPAGE_%s", constptr->option->keyword); if (option && choice && !_cups_strcasecmp(option, firstpage)) { if (!_cups_strncasecmp(choice, "Custom.", 7)) firstvalue = "Custom"; else firstvalue = choice; } else if ((firstvalue = cupsGetOption(firstpage, num_options, options)) != NULL) { if (!_cups_strncasecmp(firstvalue, "Custom.", 7)) firstvalue = "Custom"; } else firstvalue = NULL; DEBUG_printf(("9ppd_test_constraints: value=%s, firstvalue=%s", value, firstvalue)); if ((!value || _cups_strcasecmp(value, constptr->choice->choice)) && (!firstvalue || _cups_strcasecmp(firstvalue, constptr->choice->choice))) { DEBUG_puts("9ppd_test_constraints: NO"); break; } } else if (option && choice && !_cups_strcasecmp(option, constptr->option->keyword)) { if (!_cups_strcasecmp(choice, "None") || !_cups_strcasecmp(choice, "Off") || !_cups_strcasecmp(choice, "False")) { DEBUG_puts("9ppd_test_constraints: NO"); break; } } else if ((value = cupsGetOption(constptr->option->keyword, num_options, options)) != NULL) { if (!_cups_strcasecmp(value, "None") || !_cups_strcasecmp(value, "Off") || !_cups_strcasecmp(value, "False")) { DEBUG_puts("9ppd_test_constraints: NO"); break; } } else { key.option = constptr->option; if ((marked = (ppd_choice_t *)cupsArrayFind(ppd->marked, &key)) == NULL || (!_cups_strcasecmp(marked->choice, "None") || !_cups_strcasecmp(marked->choice, "Off") || !_cups_strcasecmp(marked->choice, "False"))) { DEBUG_puts("9ppd_test_constraints: NO"); break; } } } if (i <= 0) { if (!active) active = cupsArrayNew(NULL, NULL); cupsArrayAdd(active, consts); DEBUG_puts("9ppd_test_constraints: Added..."); } } cupsArrayRestore(ppd->marked); DEBUG_printf(("8ppd_test_constraints: Found %d active constraints!", cupsArrayCount(active))); return (active); } cups-2.2.7/cups/ppd-custom.c000664 000765 000024 00000005356 13255074424 016375 0ustar00msweetstaff000000 000000 /* * PPD custom option routines for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * PostScript is a trademark of Adobe Systems, Inc. * * This code and any derivative of it may be used and distributed * freely under the terms of the GNU General Public License when * used with GNU Ghostscript or its derivatives. Use of the code * (or any derivative of it) with software other than GNU * GhostScript (or its derivatives) is governed by the CUPS license * agreement. * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include "cups-private.h" #include "ppd-private.h" /* * 'ppdFindCustomOption()' - Find a custom option. * * @since CUPS 1.2/macOS 10.5@ */ ppd_coption_t * /* O - Custom option or NULL */ ppdFindCustomOption(ppd_file_t *ppd, /* I - PPD file */ const char *keyword)/* I - Custom option name */ { ppd_coption_t key; /* Custom option search key */ if (!ppd) return (NULL); strlcpy(key.keyword, keyword, sizeof(key.keyword)); return ((ppd_coption_t *)cupsArrayFind(ppd->coptions, &key)); } /* * 'ppdFindCustomParam()' - Find a parameter for a custom option. * * @since CUPS 1.2/macOS 10.5@ */ ppd_cparam_t * /* O - Custom parameter or NULL */ ppdFindCustomParam(ppd_coption_t *opt, /* I - Custom option */ const char *name) /* I - Parameter name */ { ppd_cparam_t *param; /* Current custom parameter */ if (!opt) return (NULL); for (param = (ppd_cparam_t *)cupsArrayFirst(opt->params); param; param = (ppd_cparam_t *)cupsArrayNext(opt->params)) if (!_cups_strcasecmp(param->name, name)) break; return (param); } /* * 'ppdFirstCustomParam()' - Return the first parameter for a custom option. * * @since CUPS 1.2/macOS 10.5@ */ ppd_cparam_t * /* O - Custom parameter or NULL */ ppdFirstCustomParam(ppd_coption_t *opt) /* I - Custom option */ { if (!opt) return (NULL); return ((ppd_cparam_t *)cupsArrayFirst(opt->params)); } /* * 'ppdNextCustomParam()' - Return the next parameter for a custom option. * * @since CUPS 1.2/macOS 10.5@ */ ppd_cparam_t * /* O - Custom parameter or NULL */ ppdNextCustomParam(ppd_coption_t *opt) /* I - Custom option */ { if (!opt) return (NULL); return ((ppd_cparam_t *)cupsArrayNext(opt->params)); } cups-2.2.7/cups/ppd-emit.c000664 000765 000024 00000071503 13255074424 016016 0ustar00msweetstaff000000 000000 /* * PPD code emission routines for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * PostScript is a trademark of Adobe Systems, Inc. * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include "ppd.h" #if defined(WIN32) || defined(__EMX__) # include #else # include #endif /* WIN32 || __EMX__ */ /* * Local functions... */ static int ppd_compare_cparams(ppd_cparam_t *a, ppd_cparam_t *b); static void ppd_handle_media(ppd_file_t *ppd); /* * Local globals... */ static const char ppd_custom_code[] = "pop pop pop\n" "<>setpagedevice\n"; /* * 'ppdCollect()' - Collect all marked options that reside in the specified * section. * * The choices array should be freed using @code free@ when you are * finished with it. */ int /* O - Number of options marked */ ppdCollect(ppd_file_t *ppd, /* I - PPD file data */ ppd_section_t section, /* I - Section to collect */ ppd_choice_t ***choices) /* O - Pointers to choices */ { return (ppdCollect2(ppd, section, 0.0, choices)); } /* * 'ppdCollect2()' - Collect all marked options that reside in the * specified section and minimum order. * * The choices array should be freed using @code free@ when you are * finished with it. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - Number of options marked */ ppdCollect2(ppd_file_t *ppd, /* I - PPD file data */ ppd_section_t section, /* I - Section to collect */ float min_order, /* I - Minimum OrderDependency value */ ppd_choice_t ***choices) /* O - Pointers to choices */ { ppd_choice_t *c; /* Current choice */ ppd_section_t csection; /* Current section */ float corder; /* Current OrderDependency value */ int count; /* Number of choices collected */ ppd_choice_t **collect; /* Collected choices */ float *orders; /* Collected order values */ DEBUG_printf(("ppdCollect2(ppd=%p, section=%d, min_order=%f, choices=%p)", ppd, section, min_order, choices)); if (!ppd || !choices) { if (choices) *choices = NULL; return (0); } /* * Allocate memory for up to N selected choices... */ count = 0; if ((collect = calloc(sizeof(ppd_choice_t *), (size_t)cupsArrayCount(ppd->marked))) == NULL) { *choices = NULL; return (0); } if ((orders = calloc(sizeof(float), (size_t)cupsArrayCount(ppd->marked))) == NULL) { *choices = NULL; free(collect); return (0); } /* * Loop through all options and add choices as needed... */ for (c = (ppd_choice_t *)cupsArrayFirst(ppd->marked); c; c = (ppd_choice_t *)cupsArrayNext(ppd->marked)) { csection = c->option->section; corder = c->option->order; if (!strcmp(c->choice, "Custom")) { ppd_attr_t *attr; /* NonUIOrderDependency value */ float aorder; /* Order value */ char asection[17], /* Section name */ amain[PPD_MAX_NAME + 1], aoption[PPD_MAX_NAME]; /* *CustomFoo and True */ for (attr = ppdFindAttr(ppd, "NonUIOrderDependency", NULL); attr; attr = ppdFindNextAttr(ppd, "NonUIOrderDependency", NULL)) if (attr->value && sscanf(attr->value, "%f%16s%41s%40s", &aorder, asection, amain, aoption) == 4 && !strncmp(amain, "*Custom", 7) && !strcmp(amain + 7, c->option->keyword) && !strcmp(aoption, "True")) { /* * Use this NonUIOrderDependency... */ corder = aorder; if (!strcmp(asection, "DocumentSetup")) csection = PPD_ORDER_DOCUMENT; else if (!strcmp(asection, "ExitServer")) csection = PPD_ORDER_EXIT; else if (!strcmp(asection, "JCLSetup")) csection = PPD_ORDER_JCL; else if (!strcmp(asection, "PageSetup")) csection = PPD_ORDER_PAGE; else if (!strcmp(asection, "Prolog")) csection = PPD_ORDER_PROLOG; else csection = PPD_ORDER_ANY; break; } } if (csection == section && corder >= min_order) { collect[count] = c; orders[count] = corder; count ++; } } /* * If we have more than 1 marked choice, sort them... */ if (count > 1) { int i, j; /* Looping vars */ for (i = 0; i < (count - 1); i ++) for (j = i + 1; j < count; j ++) if (orders[i] > orders[j]) { c = collect[i]; corder = orders[i]; collect[i] = collect[j]; orders[i] = orders[j]; collect[j] = c; orders[j] = corder; } } free(orders); DEBUG_printf(("2ppdCollect2: %d marked choices...", count)); /* * Return the array and number of choices; if 0, free the array since * it isn't needed. */ if (count > 0) { *choices = collect; return (count); } else { *choices = NULL; free(collect); return (0); } } /* * 'ppdEmit()' - Emit code for marked options to a file. */ int /* O - 0 on success, -1 on failure */ ppdEmit(ppd_file_t *ppd, /* I - PPD file record */ FILE *fp, /* I - File to write to */ ppd_section_t section) /* I - Section to write */ { return (ppdEmitAfterOrder(ppd, fp, section, 0, 0.0)); } /* * 'ppdEmitAfterOrder()' - Emit a subset of the code for marked options to a file. * * When "limit" is non-zero, this function only emits options whose * OrderDependency value is greater than or equal to "min_order". * * When "limit" is zero, this function is identical to ppdEmit(). * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 0 on success, -1 on failure */ ppdEmitAfterOrder( ppd_file_t *ppd, /* I - PPD file record */ FILE *fp, /* I - File to write to */ ppd_section_t section, /* I - Section to write */ int limit, /* I - Non-zero to use min_order */ float min_order) /* I - Lowest OrderDependency */ { char *buffer; /* Option code */ int status; /* Return status */ /* * Range check input... */ if (!ppd || !fp) return (-1); /* * Get the string... */ buffer = ppdEmitString(ppd, section, limit ? min_order : 0.0f); /* * Write it as needed and return... */ if (buffer) { status = fputs(buffer, fp) < 0 ? -1 : 0; free(buffer); } else status = 0; return (status); } /* * 'ppdEmitFd()' - Emit code for marked options to a file. */ int /* O - 0 on success, -1 on failure */ ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */ int fd, /* I - File to write to */ ppd_section_t section) /* I - Section to write */ { char *buffer, /* Option code */ *bufptr; /* Pointer into code */ size_t buflength; /* Length of option code */ ssize_t bytes; /* Bytes written */ int status; /* Return status */ /* * Range check input... */ if (!ppd || fd < 0) return (-1); /* * Get the string... */ buffer = ppdEmitString(ppd, section, 0.0); /* * Write it as needed and return... */ if (buffer) { buflength = strlen(buffer); bufptr = buffer; bytes = 0; while (buflength > 0) { #ifdef WIN32 if ((bytes = (ssize_t)write(fd, bufptr, (unsigned)buflength)) < 0) #else if ((bytes = write(fd, bufptr, buflength)) < 0) #endif /* WIN32 */ { if (errno == EAGAIN || errno == EINTR) continue; break; } buflength -= (size_t)bytes; bufptr += bytes; } status = bytes < 0 ? -1 : 0; free(buffer); } else status = 0; return (status); } /* * 'ppdEmitJCL()' - Emit code for JCL options to a file. */ int /* O - 0 on success, -1 on failure */ ppdEmitJCL(ppd_file_t *ppd, /* I - PPD file record */ FILE *fp, /* I - File to write to */ int job_id, /* I - Job ID */ const char *user, /* I - Username */ const char *title) /* I - Title */ { char *ptr; /* Pointer into JCL string */ char temp[65], /* Local title string */ displaymsg[33]; /* Local display string */ /* * Range check the input... */ if (!ppd || !ppd->jcl_begin || !ppd->jcl_ps) return (0); /* * See if the printer supports HP PJL... */ if (!strncmp(ppd->jcl_begin, "\033%-12345X@", 10)) { /* * This printer uses HP PJL commands for output; filter the output * so that we only have a single "@PJL JOB" command in the header... * * To avoid bugs in the PJL implementation of certain vendors' products * (Xerox in particular), we add a dummy "@PJL" command at the beginning * of the PJL commands to initialize PJL processing. */ ppd_attr_t *charset; /* PJL charset */ ppd_attr_t *display; /* PJL display command */ if ((charset = ppdFindAttr(ppd, "cupsPJLCharset", NULL)) != NULL) { if (!charset->value || _cups_strcasecmp(charset->value, "UTF-8")) charset = NULL; } if ((display = ppdFindAttr(ppd, "cupsPJLDisplay", NULL)) != NULL) { if (!display->value) display = NULL; } fputs("\033%-12345X@PJL\n", fp); for (ptr = ppd->jcl_begin + 9; *ptr;) if (!strncmp(ptr, "@PJL JOB", 8)) { /* * Skip job command... */ for (;*ptr; ptr ++) if (*ptr == '\n') break; if (*ptr) ptr ++; } else { /* * Copy line... */ for (;*ptr; ptr ++) { putc(*ptr, fp); if (*ptr == '\n') break; } if (*ptr) ptr ++; } /* * Clean up the job title... */ if ((ptr = strrchr(title, '/')) != NULL) { /* * Only show basename of file path... */ title = ptr + 1; } if (!strncmp(title, "smbprn.", 7)) { /* * Skip leading smbprn.######## from Samba jobs... */ for (title += 7; *title && isdigit(*title & 255); title ++); while (_cups_isspace(*title)) title ++; if ((ptr = strstr(title, " - ")) != NULL) { /* * Skip application name in "Some Application - Title of job"... */ title = ptr + 3; } } /* * Replace double quotes with single quotes and UTF-8 characters with * question marks so that the title does not cause a PJL syntax error. */ strlcpy(temp, title, sizeof(temp)); for (ptr = temp; *ptr; ptr ++) if (*ptr == '\"') *ptr = '\''; else if (!charset && (*ptr & 128)) *ptr = '?'; /* * CUPS STR #3125: Long PJL JOB NAME causes problems with some printers * * Generate the display message, truncating at 32 characters + nul to avoid * issues with some printer's PJL implementations... */ snprintf(displaymsg, sizeof(displaymsg), "%d %s %s", job_id, user, temp); /* * Send PJL JOB and PJL RDYMSG commands before we enter PostScript mode... */ if (display && strcmp(display->value, "job")) fprintf(fp, "@PJL JOB NAME = \"%s\"\n", temp); else if (display && !strcmp(display->value, "rdymsg")) fprintf(fp, "@PJL RDYMSG DISPLAY = \"%s\"\n", displaymsg); else fprintf(fp, "@PJL JOB NAME = \"%s\" DISPLAY = \"%s\"\n", temp, displaymsg); /* * Replace double quotes with single quotes and UTF-8 characters with * question marks so that the user does not cause a PJL syntax error. */ strlcpy(temp, user, sizeof(temp)); for (ptr = temp; *ptr; ptr ++) if (*ptr == '\"') *ptr = '\''; else if (!charset && (*ptr & 128)) *ptr = '?'; fprintf(fp, "@PJL SET USERNAME = \"%s\"\n", temp); } else fputs(ppd->jcl_begin, fp); ppdEmit(ppd, fp, PPD_ORDER_JCL); fputs(ppd->jcl_ps, fp); return (0); } /* * 'ppdEmitJCLEnd()' - Emit JCLEnd code to a file. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 0 on success, -1 on failure */ ppdEmitJCLEnd(ppd_file_t *ppd, /* I - PPD file record */ FILE *fp) /* I - File to write to */ { /* * Range check the input... */ if (!ppd) return (0); if (!ppd->jcl_end) { if (ppd->num_filters == 0) putc(0x04, fp); return (0); } /* * See if the printer supports HP PJL... */ if (!strncmp(ppd->jcl_end, "\033%-12345X@", 10)) { /* * This printer uses HP PJL commands for output; filter the output * so that we only have a single "@PJL JOB" command in the header... * * To avoid bugs in the PJL implementation of certain vendors' products * (Xerox in particular), we add a dummy "@PJL" command at the beginning * of the PJL commands to initialize PJL processing. */ fputs("\033%-12345X@PJL\n", fp); fputs("@PJL RDYMSG DISPLAY = \"\"\n", fp); fputs(ppd->jcl_end + 9, fp); } else fputs(ppd->jcl_end, fp); return (0); } /* * 'ppdEmitString()' - Get a string containing the code for marked options. * * When "min_order" is greater than zero, this function only includes options * whose OrderDependency value is greater than or equal to "min_order". * Otherwise, all options in the specified section are included in the * returned string. * * The return string is allocated on the heap and should be freed using * @code free@ when you are done with it. * * @since CUPS 1.2/macOS 10.5@ */ char * /* O - String containing option code or @code NULL@ if there is no option code */ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */ ppd_section_t section, /* I - Section to write */ float min_order) /* I - Lowest OrderDependency */ { int i, j, /* Looping vars */ count; /* Number of choices */ ppd_choice_t **choices; /* Choices */ ppd_size_t *size; /* Custom page size */ ppd_coption_t *coption; /* Custom option */ ppd_cparam_t *cparam; /* Custom parameter */ size_t bufsize; /* Size of string buffer needed */ char *buffer, /* String buffer */ *bufptr, /* Pointer into buffer */ *bufend; /* End of buffer */ struct lconv *loc; /* Locale data */ DEBUG_printf(("ppdEmitString(ppd=%p, section=%d, min_order=%f)", ppd, section, min_order)); /* * Range check input... */ if (!ppd) return (NULL); /* * Use PageSize or PageRegion as required... */ ppd_handle_media(ppd); /* * Collect the options we need to emit... */ if ((count = ppdCollect2(ppd, section, min_order, &choices)) == 0) return (NULL); /* * Count the number of bytes that are required to hold all of the * option code... */ for (i = 0, bufsize = 1; i < count; i ++) { if (section == PPD_ORDER_JCL) { if (!_cups_strcasecmp(choices[i]->choice, "Custom") && (coption = ppdFindCustomOption(ppd, choices[i]->option->keyword)) != NULL) { /* * Add space to account for custom parameter substitution... */ for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params); cparam; cparam = (ppd_cparam_t *)cupsArrayNext(coption->params)) { switch (cparam->type) { case PPD_CUSTOM_CURVE : case PPD_CUSTOM_INVCURVE : case PPD_CUSTOM_POINTS : case PPD_CUSTOM_REAL : case PPD_CUSTOM_INT : bufsize += 10; break; case PPD_CUSTOM_PASSCODE : case PPD_CUSTOM_PASSWORD : case PPD_CUSTOM_STRING : if (cparam->current.custom_string) bufsize += strlen(cparam->current.custom_string); break; } } } } else if (section != PPD_ORDER_EXIT) { bufsize += 3; /* [{\n */ if ((!_cups_strcasecmp(choices[i]->option->keyword, "PageSize") || !_cups_strcasecmp(choices[i]->option->keyword, "PageRegion")) && !_cups_strcasecmp(choices[i]->choice, "Custom")) { DEBUG_puts("2ppdEmitString: Custom size set!"); bufsize += 37; /* %%BeginFeature: *CustomPageSize True\n */ bufsize += 50; /* Five 9-digit numbers + newline */ } else if (!_cups_strcasecmp(choices[i]->choice, "Custom") && (coption = ppdFindCustomOption(ppd, choices[i]->option->keyword)) != NULL) { bufsize += 23 + strlen(choices[i]->option->keyword) + 6; /* %%BeginFeature: *Customkeyword True\n */ for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params); cparam; cparam = (ppd_cparam_t *)cupsArrayNext(coption->params)) { switch (cparam->type) { case PPD_CUSTOM_CURVE : case PPD_CUSTOM_INVCURVE : case PPD_CUSTOM_POINTS : case PPD_CUSTOM_REAL : case PPD_CUSTOM_INT : bufsize += 10; break; case PPD_CUSTOM_PASSCODE : case PPD_CUSTOM_PASSWORD : case PPD_CUSTOM_STRING : bufsize += 3; if (cparam->current.custom_string) bufsize += 4 * strlen(cparam->current.custom_string); break; } } } else bufsize += 17 + strlen(choices[i]->option->keyword) + 1 + strlen(choices[i]->choice) + 1; /* %%BeginFeature: *keyword choice\n */ bufsize += 13; /* %%EndFeature\n */ bufsize += 22; /* } stopped cleartomark\n */ } if (choices[i]->code) bufsize += strlen(choices[i]->code) + 1; else bufsize += strlen(ppd_custom_code); } /* * Allocate memory... */ DEBUG_printf(("2ppdEmitString: Allocating %d bytes for string...", (int)bufsize)); if ((buffer = calloc(1, bufsize)) == NULL) { free(choices); return (NULL); } bufend = buffer + bufsize - 1; loc = localeconv(); /* * Copy the option code to the buffer... */ for (i = 0, bufptr = buffer; i < count; i ++, bufptr += strlen(bufptr)) if (section == PPD_ORDER_JCL) { if (!_cups_strcasecmp(choices[i]->choice, "Custom") && choices[i]->code && (coption = ppdFindCustomOption(ppd, choices[i]->option->keyword)) != NULL) { /* * Handle substitutions in custom JCL options... */ char *cptr; /* Pointer into code */ int pnum; /* Parameter number */ for (cptr = choices[i]->code; *cptr && bufptr < bufend;) { if (*cptr == '\\') { cptr ++; if (isdigit(*cptr & 255)) { /* * Substitute parameter... */ pnum = *cptr++ - '0'; while (isdigit(*cptr & 255)) pnum = pnum * 10 + *cptr++ - '0'; for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params); cparam; cparam = (ppd_cparam_t *)cupsArrayNext(coption->params)) if (cparam->order == pnum) break; if (cparam) { switch (cparam->type) { case PPD_CUSTOM_CURVE : case PPD_CUSTOM_INVCURVE : case PPD_CUSTOM_POINTS : case PPD_CUSTOM_REAL : bufptr = _cupsStrFormatd(bufptr, bufend, cparam->current.custom_real, loc); break; case PPD_CUSTOM_INT : snprintf(bufptr, (size_t)(bufend - bufptr), "%d", cparam->current.custom_int); bufptr += strlen(bufptr); break; case PPD_CUSTOM_PASSCODE : case PPD_CUSTOM_PASSWORD : case PPD_CUSTOM_STRING : if (cparam->current.custom_string) { strlcpy(bufptr, cparam->current.custom_string, (size_t)(bufend - bufptr)); bufptr += strlen(bufptr); } break; } } } else if (*cptr) *bufptr++ = *cptr++; } else *bufptr++ = *cptr++; } } else { /* * Otherwise just copy the option code directly... */ strlcpy(bufptr, choices[i]->code, (size_t)(bufend - bufptr + 1)); bufptr += strlen(bufptr); } } else if (section != PPD_ORDER_EXIT) { /* * Add wrapper commands to prevent printer errors for unsupported * options... */ strlcpy(bufptr, "[{\n", (size_t)(bufend - bufptr + 1)); bufptr += 3; /* * Send DSC comments with option... */ DEBUG_printf(("2ppdEmitString: Adding code for %s=%s...", choices[i]->option->keyword, choices[i]->choice)); if ((!_cups_strcasecmp(choices[i]->option->keyword, "PageSize") || !_cups_strcasecmp(choices[i]->option->keyword, "PageRegion")) && !_cups_strcasecmp(choices[i]->choice, "Custom")) { /* * Variable size; write out standard size options, using the * parameter positions defined in the PPD file... */ ppd_attr_t *attr; /* PPD attribute */ int pos, /* Position of custom value */ orientation; /* Orientation to use */ float values[5]; /* Values for custom command */ strlcpy(bufptr, "%%BeginFeature: *CustomPageSize True\n", (size_t)(bufend - bufptr + 1)); bufptr += 37; size = ppdPageSize(ppd, "Custom"); memset(values, 0, sizeof(values)); if ((attr = ppdFindAttr(ppd, "ParamCustomPageSize", "Width")) != NULL) { pos = atoi(attr->value) - 1; if (pos < 0 || pos > 4) pos = 0; } else pos = 0; values[pos] = size->width; if ((attr = ppdFindAttr(ppd, "ParamCustomPageSize", "Height")) != NULL) { pos = atoi(attr->value) - 1; if (pos < 0 || pos > 4) pos = 1; } else pos = 1; values[pos] = size->length; /* * According to the Adobe PPD specification, an orientation of 1 * will produce a print that comes out upside-down with the X * axis perpendicular to the direction of feed, which is exactly * what we want to be consistent with non-PS printers. * * We could also use an orientation of 3 to produce output that * comes out rightside-up (this is the default for many large format * printer PPDs), however for consistency we will stick with the * value 1. * * If we wanted to get fancy, we could use orientations of 0 or * 2 and swap the width and length, however we don't want to get * fancy, we just want it to work consistently. * * The orientation value is range limited by the Orientation * parameter definition, so certain non-PS printer drivers that * only support an Orientation of 0 will get the value 0 as * expected. */ orientation = 1; if ((attr = ppdFindAttr(ppd, "ParamCustomPageSize", "Orientation")) != NULL) { int min_orient, max_orient; /* Minimum and maximum orientations */ if (sscanf(attr->value, "%d%*s%d%d", &pos, &min_orient, &max_orient) != 3) pos = 4; else { pos --; if (pos < 0 || pos > 4) pos = 4; if (orientation > max_orient) orientation = max_orient; else if (orientation < min_orient) orientation = min_orient; } } else pos = 4; values[pos] = (float)orientation; for (pos = 0; pos < 5; pos ++) { bufptr = _cupsStrFormatd(bufptr, bufend, values[pos], loc); *bufptr++ = '\n'; } if (!choices[i]->code) { /* * This can happen with certain buggy PPD files that don't include * a CustomPageSize command sequence... We just use a generic * Level 2 command sequence... */ strlcpy(bufptr, ppd_custom_code, (size_t)(bufend - bufptr + 1)); bufptr += strlen(bufptr); } } else if (!_cups_strcasecmp(choices[i]->choice, "Custom") && (coption = ppdFindCustomOption(ppd, choices[i]->option->keyword)) != NULL) { /* * Custom option... */ const char *s; /* Pointer into string value */ cups_array_t *params; /* Parameters in the correct output order */ params = cupsArrayNew((cups_array_func_t)ppd_compare_cparams, NULL); for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params); cparam; cparam = (ppd_cparam_t *)cupsArrayNext(coption->params)) cupsArrayAdd(params, cparam); snprintf(bufptr, (size_t)(bufend - bufptr + 1), "%%%%BeginFeature: *Custom%s True\n", coption->keyword); bufptr += strlen(bufptr); for (cparam = (ppd_cparam_t *)cupsArrayFirst(params); cparam; cparam = (ppd_cparam_t *)cupsArrayNext(params)) { switch (cparam->type) { case PPD_CUSTOM_CURVE : case PPD_CUSTOM_INVCURVE : case PPD_CUSTOM_POINTS : case PPD_CUSTOM_REAL : bufptr = _cupsStrFormatd(bufptr, bufend, cparam->current.custom_real, loc); *bufptr++ = '\n'; break; case PPD_CUSTOM_INT : snprintf(bufptr, (size_t)(bufend - bufptr + 1), "%d\n", cparam->current.custom_int); bufptr += strlen(bufptr); break; case PPD_CUSTOM_PASSCODE : case PPD_CUSTOM_PASSWORD : case PPD_CUSTOM_STRING : *bufptr++ = '('; if (cparam->current.custom_string) { for (s = cparam->current.custom_string; *s; s ++) { if (*s < ' ' || *s == '(' || *s == ')' || *s >= 127) { snprintf(bufptr, (size_t)(bufend - bufptr + 1), "\\%03o", *s & 255); bufptr += strlen(bufptr); } else *bufptr++ = *s; } } *bufptr++ = ')'; *bufptr++ = '\n'; break; } } cupsArrayDelete(params); } else { snprintf(bufptr, (size_t)(bufend - bufptr + 1), "%%%%BeginFeature: *%s %s\n", choices[i]->option->keyword, choices[i]->choice); bufptr += strlen(bufptr); } if (choices[i]->code && choices[i]->code[0]) { j = (int)strlen(choices[i]->code); memcpy(bufptr, choices[i]->code, (size_t)j); bufptr += j; if (choices[i]->code[j - 1] != '\n') *bufptr++ = '\n'; } strlcpy(bufptr, "%%EndFeature\n" "} stopped cleartomark\n", (size_t)(bufend - bufptr + 1)); bufptr += strlen(bufptr); DEBUG_printf(("2ppdEmitString: Offset in string is %d...", (int)(bufptr - buffer))); } else { strlcpy(bufptr, choices[i]->code, (size_t)(bufend - bufptr + 1)); bufptr += strlen(bufptr); } /* * Nul-terminate, free, and return... */ *bufptr = '\0'; free(choices); return (buffer); } /* * 'ppd_compare_cparams()' - Compare the order of two custom parameters. */ static int /* O - Result of comparison */ ppd_compare_cparams(ppd_cparam_t *a, /* I - First parameter */ ppd_cparam_t *b) /* I - Second parameter */ { return (a->order - b->order); } /* * 'ppd_handle_media()' - Handle media selection... */ static void ppd_handle_media(ppd_file_t *ppd) /* I - PPD file */ { ppd_choice_t *manual_feed, /* ManualFeed choice, if any */ *input_slot; /* InputSlot choice, if any */ ppd_size_t *size; /* Current media size */ ppd_attr_t *rpr; /* RequiresPageRegion value */ /* * This function determines what page size code to use, if any, for the * current media size, InputSlot, and ManualFeed selections. * * We use the PageSize code if: * * 1. A custom media size is selected. * 2. ManualFeed and InputSlot are not selected (or do not exist). * 3. ManualFeed is selected but is False and InputSlot is not selected or * the selection has no code - the latter check done to support "auto" or * "printer default" InputSlot options. * * We use the PageRegion code if: * * 4. RequiresPageRegion does not exist and the PPD contains cupsFilter * keywords, indicating this is a CUPS-based driver. * 5. RequiresPageRegion exists for the selected InputSlot (or "All" for any * InputSlot or ManualFeed selection) and is True. * * If none of the 5 conditions are true, no page size code is used and we * unmark any existing PageSize or PageRegion choices. */ if ((size = ppdPageSize(ppd, NULL)) == NULL) return; manual_feed = ppdFindMarkedChoice(ppd, "ManualFeed"); input_slot = ppdFindMarkedChoice(ppd, "InputSlot"); if (input_slot != NULL) rpr = ppdFindAttr(ppd, "RequiresPageRegion", input_slot->choice); else rpr = NULL; if (!rpr) rpr = ppdFindAttr(ppd, "RequiresPageRegion", "All"); if (!_cups_strcasecmp(size->name, "Custom") || (!manual_feed && !input_slot) || (manual_feed && !_cups_strcasecmp(manual_feed->choice, "False") && (!input_slot || (input_slot->code && !input_slot->code[0]))) || (!rpr && ppd->num_filters > 0)) { /* * Use PageSize code... */ ppdMarkOption(ppd, "PageSize", size->name); } else if (rpr && rpr->value && !_cups_strcasecmp(rpr->value, "True")) { /* * Use PageRegion code... */ ppdMarkOption(ppd, "PageRegion", size->name); } else { /* * Do not use PageSize or PageRegion code... */ ppd_choice_t *page; /* PageSize/Region choice, if any */ if ((page = ppdFindMarkedChoice(ppd, "PageSize")) != NULL) { /* * Unmark PageSize... */ page->marked = 0; cupsArrayRemove(ppd->marked, page); } if ((page = ppdFindMarkedChoice(ppd, "PageRegion")) != NULL) { /* * Unmark PageRegion... */ page->marked = 0; cupsArrayRemove(ppd->marked, page); } } } cups-2.2.7/cups/ppd-localize.c000664 000765 000024 00000047677 13255074424 016701 0ustar00msweetstaff000000 000000 /* * PPD localization routines for CUPS. * * Copyright 2007-2018 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * PostScript is a trademark of Adobe Systems, Inc. * * This code and any derivative of it may be used and distributed * freely under the terms of the GNU General Public License when * used with GNU Ghostscript or its derivatives. Use of the code * (or any derivative of it) with software other than GNU * GhostScript (or its derivatives) is governed by the CUPS license * agreement. * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include "cups-private.h" #include "ppd-private.h" /* * Local functions... */ static cups_lang_t *ppd_ll_CC(char *ll_CC, size_t ll_CC_size); /* * 'ppdLocalize()' - Localize the PPD file to the current locale. * * All groups, options, and choices are localized, as are ICC profile * descriptions, printer presets, and custom option parameters. Each * localized string uses the UTF-8 character encoding. * * @since CUPS 1.2/macOS 10.5@ */ int /* O - 0 on success, -1 on error */ ppdLocalize(ppd_file_t *ppd) /* I - PPD file */ { int i, j, k; /* Looping vars */ ppd_group_t *group; /* Current group */ ppd_option_t *option; /* Current option */ ppd_choice_t *choice; /* Current choice */ ppd_coption_t *coption; /* Current custom option */ ppd_cparam_t *cparam; /* Current custom parameter */ ppd_attr_t *attr, /* Current attribute */ *locattr; /* Localized attribute */ char ckeyword[PPD_MAX_NAME], /* Custom keyword */ ll_CC[6]; /* Language + country locale */ /* * Range check input... */ DEBUG_printf(("ppdLocalize(ppd=%p)", ppd)); if (!ppd) return (-1); /* * Get the default language... */ ppd_ll_CC(ll_CC, sizeof(ll_CC)); /* * Now lookup all of the groups, options, choices, etc. */ for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++) { if ((locattr = _ppdLocalizedAttr(ppd, "Translation", group->name, ll_CC)) != NULL) strlcpy(group->text, locattr->text, sizeof(group->text)); for (j = group->num_options, option = group->options; j > 0; j --, option ++) { if ((locattr = _ppdLocalizedAttr(ppd, "Translation", option->keyword, ll_CC)) != NULL) strlcpy(option->text, locattr->text, sizeof(option->text)); for (k = option->num_choices, choice = option->choices; k > 0; k --, choice ++) { if (strcmp(choice->choice, "Custom") || !ppdFindCustomOption(ppd, option->keyword)) locattr = _ppdLocalizedAttr(ppd, option->keyword, choice->choice, ll_CC); else { snprintf(ckeyword, sizeof(ckeyword), "Custom%s", option->keyword); locattr = _ppdLocalizedAttr(ppd, ckeyword, "True", ll_CC); } if (locattr) strlcpy(choice->text, locattr->text, sizeof(choice->text)); } } } /* * Translate any custom parameters... */ for (coption = (ppd_coption_t *)cupsArrayFirst(ppd->coptions); coption; coption = (ppd_coption_t *)cupsArrayNext(ppd->coptions)) { for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params); cparam; cparam = (ppd_cparam_t *)cupsArrayNext(coption->params)) { snprintf(ckeyword, sizeof(ckeyword), "ParamCustom%s", coption->keyword); if ((locattr = _ppdLocalizedAttr(ppd, ckeyword, cparam->name, ll_CC)) != NULL) strlcpy(cparam->text, locattr->text, sizeof(cparam->text)); } } /* * Translate ICC profile names... */ if ((attr = ppdFindAttr(ppd, "APCustomColorMatchingName", NULL)) != NULL) { if ((locattr = _ppdLocalizedAttr(ppd, "APCustomColorMatchingName", attr->spec, ll_CC)) != NULL) strlcpy(attr->text, locattr->text, sizeof(attr->text)); } for (attr = ppdFindAttr(ppd, "cupsICCProfile", NULL); attr; attr = ppdFindNextAttr(ppd, "cupsICCProfile", NULL)) { cupsArraySave(ppd->sorted_attrs); if ((locattr = _ppdLocalizedAttr(ppd, "cupsICCProfile", attr->spec, ll_CC)) != NULL) strlcpy(attr->text, locattr->text, sizeof(attr->text)); cupsArrayRestore(ppd->sorted_attrs); } /* * Translate printer presets... */ for (attr = ppdFindAttr(ppd, "APPrinterPreset", NULL); attr; attr = ppdFindNextAttr(ppd, "APPrinterPreset", NULL)) { cupsArraySave(ppd->sorted_attrs); if ((locattr = _ppdLocalizedAttr(ppd, "APPrinterPreset", attr->spec, ll_CC)) != NULL) strlcpy(attr->text, locattr->text, sizeof(attr->text)); cupsArrayRestore(ppd->sorted_attrs); } return (0); } /* * 'ppdLocalizeAttr()' - Localize an attribute. * * This function uses the current locale to find the localized attribute for * the given main and option keywords. If no localized version of the * attribute exists for the current locale, the unlocalized version is returned. */ ppd_attr_t * /* O - Localized attribute or @code NULL@ if none exists */ ppdLocalizeAttr(ppd_file_t *ppd, /* I - PPD file */ const char *keyword, /* I - Main keyword */ const char *spec) /* I - Option keyword or @code NULL@ for none */ { ppd_attr_t *locattr; /* Localized attribute */ char ll_CC[6]; /* Language + country locale */ /* * Get the default language... */ ppd_ll_CC(ll_CC, sizeof(ll_CC)); /* * Find the localized attribute... */ if (spec) locattr = _ppdLocalizedAttr(ppd, keyword, spec, ll_CC); else locattr = _ppdLocalizedAttr(ppd, "Translation", keyword, ll_CC); if (!locattr) locattr = ppdFindAttr(ppd, keyword, spec); return (locattr); } /* * 'ppdLocalizeIPPReason()' - Get the localized version of a cupsIPPReason * attribute. * * This function uses the current locale to find the corresponding reason * text or URI from the attribute value. If "scheme" is NULL or "text", * the returned value contains human-readable (UTF-8) text from the translation * string or attribute value. Otherwise the corresponding URI is returned. * * If no value of the requested scheme can be found, NULL is returned. * * @since CUPS 1.3/macOS 10.5@ */ const char * /* O - Value or NULL if not found */ ppdLocalizeIPPReason( ppd_file_t *ppd, /* I - PPD file */ const char *reason, /* I - IPP reason keyword to look up */ const char *scheme, /* I - URI scheme or NULL for text */ char *buffer, /* I - Value buffer */ size_t bufsize) /* I - Size of value buffer */ { cups_lang_t *lang; /* Current language */ ppd_attr_t *locattr; /* Localized attribute */ char ll_CC[6], /* Language + country locale */ *bufptr, /* Pointer into buffer */ *bufend, /* Pointer to end of buffer */ *valptr; /* Pointer into value */ int ch; /* Hex-encoded character */ size_t schemelen; /* Length of scheme name */ /* * Range check input... */ if (buffer) *buffer = '\0'; if (!ppd || !reason || (scheme && !*scheme) || !buffer || bufsize < PPD_MAX_TEXT) return (NULL); /* * Get the default language... */ lang = ppd_ll_CC(ll_CC, sizeof(ll_CC)); /* * Find the localized attribute... */ if ((locattr = _ppdLocalizedAttr(ppd, "cupsIPPReason", reason, ll_CC)) == NULL) locattr = ppdFindAttr(ppd, "cupsIPPReason", reason); if (!locattr) { if (lang && (!scheme || !strcmp(scheme, "text")) && strcmp(reason, "none")) { /* * Try to localize a standard printer-state-reason keyword... */ const char *message = NULL; /* Localized message */ if (!strncmp(reason, "media-needed", 12)) message = _("Load paper."); else if (!strncmp(reason, "media-jam", 9)) message = _("Paper jam."); else if (!strncmp(reason, "offline", 7) || !strncmp(reason, "shutdown", 8)) message = _("The printer is not connected."); else if (!strncmp(reason, "toner-low", 9)) message = _("The printer is low on toner."); else if (!strncmp(reason, "toner-empty", 11)) message = _("The printer may be out of toner."); else if (!strncmp(reason, "cover-open", 10)) message = _("The printer's cover is open."); else if (!strncmp(reason, "interlock-open", 14)) message = _("The printer's interlock is open."); else if (!strncmp(reason, "door-open", 9)) message = _("The printer's door is open."); else if (!strncmp(reason, "input-tray-missing", 18)) message = _("Paper tray is missing."); else if (!strncmp(reason, "media-low", 9)) message = _("Paper tray is almost empty."); else if (!strncmp(reason, "media-empty", 11)) message = _("Paper tray is empty."); else if (!strncmp(reason, "output-tray-missing", 19)) message = _("Output bin is missing."); else if (!strncmp(reason, "output-area-almost-full", 23)) message = _("Output bin is almost full."); else if (!strncmp(reason, "output-area-full", 16)) message = _("Output bin is full."); else if (!strncmp(reason, "marker-supply-low", 17)) message = _("The printer is low on ink."); else if (!strncmp(reason, "marker-supply-empty", 19)) message = _("The printer may be out of ink."); else if (!strncmp(reason, "marker-waste-almost-full", 24)) message = _("The printer's waste bin is almost full."); else if (!strncmp(reason, "marker-waste-full", 17)) message = _("The printer's waste bin is full."); else if (!strncmp(reason, "fuser-over-temp", 15)) message = _("The fuser's temperature is high."); else if (!strncmp(reason, "fuser-under-temp", 16)) message = _("The fuser's temperature is low."); else if (!strncmp(reason, "opc-near-eol", 12)) message = _("The optical photoconductor will need to be replaced soon."); else if (!strncmp(reason, "opc-life-over", 13)) message = _("The optical photoconductor needs to be replaced."); else if (!strncmp(reason, "developer-low", 13)) message = _("The developer unit will need to be replaced soon."); else if (!strncmp(reason, "developer-empty", 15)) message = _("The developer unit needs to be replaced."); if (message) { strlcpy(buffer, _cupsLangString(lang, message), bufsize); return (buffer); } } return (NULL); } /* * Now find the value we need... */ bufend = buffer + bufsize - 1; if (!scheme || !strcmp(scheme, "text")) { /* * Copy a text value (either the translation text or text:... URIs from * the value... */ strlcpy(buffer, locattr->text, bufsize); for (valptr = locattr->value, bufptr = buffer; *valptr && bufptr < bufend;) { if (!strncmp(valptr, "text:", 5)) { /* * Decode text: URI and add to the buffer... */ valptr += 5; while (*valptr && !_cups_isspace(*valptr) && bufptr < bufend) { if (*valptr == '%' && isxdigit(valptr[1] & 255) && isxdigit(valptr[2] & 255)) { /* * Pull a hex-encoded character from the URI... */ valptr ++; if (isdigit(*valptr & 255)) ch = (*valptr - '0') << 4; else ch = (tolower(*valptr) - 'a' + 10) << 4; valptr ++; if (isdigit(*valptr & 255)) *bufptr++ = (char)(ch | (*valptr - '0')); else *bufptr++ = (char)(ch | (tolower(*valptr) - 'a' + 10)); valptr ++; } else if (*valptr == '+') { *bufptr++ = ' '; valptr ++; } else *bufptr++ = *valptr++; } } else { /* * Skip this URI... */ while (*valptr && !_cups_isspace(*valptr)) valptr++; } /* * Skip whitespace... */ while (_cups_isspace(*valptr)) valptr ++; } if (bufptr > buffer) *bufptr = '\0'; return (buffer); } else { /* * Copy a URI... */ schemelen = strlen(scheme); if (scheme[schemelen - 1] == ':') /* Force scheme to be just the name */ schemelen --; for (valptr = locattr->value, bufptr = buffer; *valptr && bufptr < bufend;) { if ((!strncmp(valptr, scheme, schemelen) && valptr[schemelen] == ':') || (*valptr == '/' && !strcmp(scheme, "file"))) { /* * Copy URI... */ while (*valptr && !_cups_isspace(*valptr) && bufptr < bufend) *bufptr++ = *valptr++; *bufptr = '\0'; return (buffer); } else { /* * Skip this URI... */ while (*valptr && !_cups_isspace(*valptr)) valptr++; } /* * Skip whitespace... */ while (_cups_isspace(*valptr)) valptr ++; } return (NULL); } } /* * 'ppdLocalizeMarkerName()' - Get the localized version of a marker-names * attribute value. * * This function uses the current locale to find the corresponding name * text from the attribute value. If no localized text for the requested * name can be found, @code NULL@ is returned. * * @since CUPS 1.4/macOS 10.6@ */ const char * /* O - Value or @code NULL@ if not found */ ppdLocalizeMarkerName( ppd_file_t *ppd, /* I - PPD file */ const char *name) /* I - Marker name to look up */ { ppd_attr_t *locattr; /* Localized attribute */ char ll_CC[6]; /* Language + country locale */ /* * Range check input... */ if (!ppd || !name) return (NULL); /* * Get the default language... */ ppd_ll_CC(ll_CC, sizeof(ll_CC)); /* * Find the localized attribute... */ if ((locattr = _ppdLocalizedAttr(ppd, "cupsMarkerName", name, ll_CC)) == NULL) locattr = ppdFindAttr(ppd, "cupsMarkerName", name); return (locattr ? locattr->text : NULL); } /* * '_ppdFreeLanguages()' - Free an array of languages from _ppdGetLanguages. */ void _ppdFreeLanguages( cups_array_t *languages) /* I - Languages array */ { char *language; /* Current language */ for (language = (char *)cupsArrayFirst(languages); language; language = (char *)cupsArrayNext(languages)) free(language); cupsArrayDelete(languages); } /* * '_ppdGetLanguages()' - Get an array of languages from a PPD file. */ cups_array_t * /* O - Languages array */ _ppdGetLanguages(ppd_file_t *ppd) /* I - PPD file */ { cups_array_t *languages; /* Languages array */ ppd_attr_t *attr; /* cupsLanguages attribute */ char *value, /* Copy of attribute value */ *start, /* Start of current language */ *ptr; /* Pointer into languages */ /* * See if we have a cupsLanguages attribute... */ if ((attr = ppdFindAttr(ppd, "cupsLanguages", NULL)) == NULL || !attr->value) return (NULL); /* * Yes, load the list... */ if ((languages = cupsArrayNew((cups_array_func_t)strcmp, NULL)) == NULL) return (NULL); if ((value = strdup(attr->value)) == NULL) { cupsArrayDelete(languages); return (NULL); } for (ptr = value; *ptr;) { /* * Skip leading whitespace... */ while (_cups_isspace(*ptr)) ptr ++; if (!*ptr) break; /* * Find the end of this language name... */ for (start = ptr; *ptr && !_cups_isspace(*ptr); ptr ++); if (*ptr) *ptr++ = '\0'; if (!strcmp(start, "en")) continue; cupsArrayAdd(languages, strdup(start)); } /* * Free the temporary string and return either an array with one or more * values or a NULL pointer... */ free(value); if (cupsArrayCount(languages) == 0) { cupsArrayDelete(languages); return (NULL); } else return (languages); } /* * '_ppdHashName()' - Generate a hash value for a device or profile name. * * This function is primarily used on macOS, but is generally accessible * since cupstestppd needs to check for profile name collisions in PPD files... */ unsigned /* O - Hash value */ _ppdHashName(const char *name) /* I - Name to hash */ { unsigned mult, /* Multiplier */ hash = 0; /* Hash value */ for (mult = 1; *name && mult <= 128; mult ++, name ++) hash += (*name & 255) * mult; return (hash); } /* * '_ppdLocalizedAttr()' - Find a localized attribute. */ ppd_attr_t * /* O - Localized attribute or NULL */ _ppdLocalizedAttr(ppd_file_t *ppd, /* I - PPD file */ const char *keyword, /* I - Main keyword */ const char *spec, /* I - Option keyword */ const char *ll_CC) /* I - Language + country locale */ { char lkeyword[PPD_MAX_NAME]; /* Localization keyword */ ppd_attr_t *attr; /* Current attribute */ DEBUG_printf(("4_ppdLocalizedAttr(ppd=%p, keyword=\"%s\", spec=\"%s\", " "ll_CC=\"%s\")", ppd, keyword, spec, ll_CC)); /* * Look for Keyword.ll_CC, then Keyword.ll... */ snprintf(lkeyword, sizeof(lkeyword), "%s.%s", ll_CC, keyword); if ((attr = ppdFindAttr(ppd, lkeyword, spec)) == NULL) { /* * * * Multiple locales need special handling... Sigh... */ if (!strcmp(ll_CC, "zh_HK")) { snprintf(lkeyword, sizeof(lkeyword), "zh_TW.%s", keyword); attr = ppdFindAttr(ppd, lkeyword, spec); } if (!attr) { snprintf(lkeyword, sizeof(lkeyword), "%2.2s.%s", ll_CC, keyword); attr = ppdFindAttr(ppd, lkeyword, spec); } if (!attr) { if (!strncmp(ll_CC, "ja", 2)) { /* * Due to a bug in the CUPS DDK 1.1.0 ppdmerge program, Japanese * PPD files were incorrectly assigned "jp" as the locale name * instead of "ja". Support both the old (incorrect) and new * locale names for Japanese... */ snprintf(lkeyword, sizeof(lkeyword), "jp.%s", keyword); attr = ppdFindAttr(ppd, lkeyword, spec); } else if (!strncmp(ll_CC, "nb", 2)) { /* * Norway has two languages, "Bokmal" (the primary one) * and "Nynorsk" (new Norwegian); this code maps from the (currently) * recommended "nb" to the previously recommended "no"... */ snprintf(lkeyword, sizeof(lkeyword), "no.%s", keyword); attr = ppdFindAttr(ppd, lkeyword, spec); } else if (!strncmp(ll_CC, "no", 2)) { /* * Norway has two languages, "Bokmal" (the primary one) * and "Nynorsk" (new Norwegian); we map "no" to "nb" here as * recommended by the locale folks... */ snprintf(lkeyword, sizeof(lkeyword), "nb.%s", keyword); attr = ppdFindAttr(ppd, lkeyword, spec); } } } #ifdef DEBUG if (attr) DEBUG_printf(("5_ppdLocalizedAttr: *%s %s/%s: \"%s\"\n", attr->name, attr->spec, attr->text, attr->value ? attr->value : "")); else DEBUG_puts("5_ppdLocalizedAttr: NOT FOUND"); #endif /* DEBUG */ return (attr); } /* * 'ppd_ll_CC()' - Get the current locale names. */ static cups_lang_t * /* O - Current language */ ppd_ll_CC(char *ll_CC, /* O - Country-specific locale name */ size_t ll_CC_size) /* I - Size of country-specific name */ { cups_lang_t *lang; /* Current language */ /* * Get the current locale... */ if ((lang = cupsLangDefault()) == NULL) { strlcpy(ll_CC, "en_US", ll_CC_size); return (NULL); } /* * Copy the locale name... */ strlcpy(ll_CC, lang->language, ll_CC_size); if (strlen(ll_CC) == 2) { /* * Map "ll" to primary/origin country locales to have the best * chance of finding a match... */ if (!strcmp(ll_CC, "cs")) strlcpy(ll_CC, "cs_CZ", ll_CC_size); else if (!strcmp(ll_CC, "en")) strlcpy(ll_CC, "en_US", ll_CC_size); else if (!strcmp(ll_CC, "ja")) strlcpy(ll_CC, "ja_JP", ll_CC_size); else if (!strcmp(ll_CC, "sv")) strlcpy(ll_CC, "sv_SE", ll_CC_size); else if (!strcmp(ll_CC, "zh")) /* Simplified Chinese */ strlcpy(ll_CC, "zh_CN", ll_CC_size); } DEBUG_printf(("8ppd_ll_CC: lang->language=\"%s\", ll_CC=\"%s\"...", lang->language, ll_CC)); return (lang); } cups-2.2.7/cups/ppd-mark.c000664 000765 000024 00000066323 13255074424 016016 0ustar00msweetstaff000000 000000 /* * Option marking routines for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * PostScript is a trademark of Adobe Systems, Inc. * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include "ppd-private.h" /* * Local functions... */ #ifdef DEBUG static void ppd_debug_marked(ppd_file_t *ppd, const char *title); #else # define ppd_debug_marked(ppd,title) #endif /* DEBUG */ static void ppd_defaults(ppd_file_t *ppd, ppd_group_t *g); static void ppd_mark_choices(ppd_file_t *ppd, const char *s); static void ppd_mark_option(ppd_file_t *ppd, const char *option, const char *choice); /* * 'cupsMarkOptions()' - Mark command-line options in a PPD file. * * This function maps the IPP "finishings", "media", "mirror", * "multiple-document-handling", "output-bin", "print-color-mode", * "print-quality", "printer-resolution", and "sides" attributes to their * corresponding PPD options and choices. */ int /* O - 1 if conflicts exist, 0 otherwise */ cupsMarkOptions( ppd_file_t *ppd, /* I - PPD file */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { int i, j; /* Looping vars */ char *ptr, /* Pointer into string */ s[255]; /* Temporary string */ const char *val, /* Pointer into value */ *media, /* media option */ *output_bin, /* output-bin option */ *page_size, /* PageSize option */ *ppd_keyword, /* PPD keyword */ *print_color_mode, /* print-color-mode option */ *print_quality, /* print-quality option */ *sides; /* sides option */ cups_option_t *optptr; /* Current option */ ppd_attr_t *attr; /* PPD attribute */ _ppd_cache_t *cache; /* PPD cache and mapping data */ /* * Check arguments... */ if (!ppd || num_options <= 0 || !options) return (0); ppd_debug_marked(ppd, "Before..."); /* * Do special handling for finishings, media, output-bin, output-mode, * print-color-mode, print-quality, and PageSize... */ media = cupsGetOption("media", num_options, options); output_bin = cupsGetOption("output-bin", num_options, options); page_size = cupsGetOption("PageSize", num_options, options); print_quality = cupsGetOption("print-quality", num_options, options); sides = cupsGetOption("sides", num_options, options); if ((print_color_mode = cupsGetOption("print-color-mode", num_options, options)) == NULL) print_color_mode = cupsGetOption("output-mode", num_options, options); if ((media || output_bin || print_color_mode || print_quality || sides) && !ppd->cache) { /* * Load PPD cache and mapping data as needed... */ ppd->cache = _ppdCacheCreateWithPPD(ppd); } cache = ppd->cache; if (media) { /* * Loop through the option string, separating it at commas and marking each * individual option as long as the corresponding PPD option (PageSize, * InputSlot, etc.) is not also set. * * For PageSize, we also check for an empty option value since some versions * of macOS use it to specify auto-selection of the media based solely on * the size. */ for (val = media; *val;) { /* * Extract the sub-option from the string... */ for (ptr = s; *val && *val != ',' && (size_t)(ptr - s) < (sizeof(s) - 1);) *ptr++ = *val++; *ptr++ = '\0'; if (*val == ',') val ++; /* * Mark it... */ if (!page_size || !page_size[0]) { if (!_cups_strncasecmp(s, "Custom.", 7) || ppdPageSize(ppd, s)) ppd_mark_option(ppd, "PageSize", s); else if ((ppd_keyword = _ppdCacheGetPageSize(cache, NULL, s, NULL)) != NULL) ppd_mark_option(ppd, "PageSize", ppd_keyword); } if (cache && cache->source_option && !cupsGetOption(cache->source_option, num_options, options) && (ppd_keyword = _ppdCacheGetInputSlot(cache, NULL, s)) != NULL) ppd_mark_option(ppd, cache->source_option, ppd_keyword); if (!cupsGetOption("MediaType", num_options, options) && (ppd_keyword = _ppdCacheGetMediaType(cache, NULL, s)) != NULL) ppd_mark_option(ppd, "MediaType", ppd_keyword); } } if (cache) { if (!cupsGetOption("com.apple.print.DocumentTicket.PMSpoolFormat", num_options, options) && !cupsGetOption("APPrinterPreset", num_options, options) && (print_color_mode || print_quality)) { /* * Map output-mode and print-quality to a preset... */ _pwg_print_color_mode_t pwg_pcm;/* print-color-mode index */ _pwg_print_quality_t pwg_pq; /* print-quality index */ cups_option_t *preset;/* Current preset option */ if (print_color_mode && !strcmp(print_color_mode, "monochrome")) pwg_pcm = _PWG_PRINT_COLOR_MODE_MONOCHROME; else pwg_pcm = _PWG_PRINT_COLOR_MODE_COLOR; if (print_quality) { pwg_pq = (_pwg_print_quality_t)(atoi(print_quality) - IPP_QUALITY_DRAFT); if (pwg_pq < _PWG_PRINT_QUALITY_DRAFT) pwg_pq = _PWG_PRINT_QUALITY_DRAFT; else if (pwg_pq > _PWG_PRINT_QUALITY_HIGH) pwg_pq = _PWG_PRINT_QUALITY_HIGH; } else pwg_pq = _PWG_PRINT_QUALITY_NORMAL; if (cache->num_presets[pwg_pcm][pwg_pq] == 0) { /* * Try to find a preset that works so that we maximize the chances of us * getting a good print using IPP attributes. */ if (cache->num_presets[pwg_pcm][_PWG_PRINT_QUALITY_NORMAL] > 0) pwg_pq = _PWG_PRINT_QUALITY_NORMAL; else if (cache->num_presets[_PWG_PRINT_COLOR_MODE_COLOR][pwg_pq] > 0) pwg_pcm = _PWG_PRINT_COLOR_MODE_COLOR; else { pwg_pq = _PWG_PRINT_QUALITY_NORMAL; pwg_pcm = _PWG_PRINT_COLOR_MODE_COLOR; } } if (cache->num_presets[pwg_pcm][pwg_pq] > 0) { /* * Copy the preset options as long as the corresponding names are not * already defined in the IPP request... */ for (i = cache->num_presets[pwg_pcm][pwg_pq], preset = cache->presets[pwg_pcm][pwg_pq]; i > 0; i --, preset ++) { if (!cupsGetOption(preset->name, num_options, options)) ppd_mark_option(ppd, preset->name, preset->value); } } } if (output_bin && !cupsGetOption("OutputBin", num_options, options) && (ppd_keyword = _ppdCacheGetOutputBin(cache, output_bin)) != NULL) { /* * Map output-bin to OutputBin... */ ppd_mark_option(ppd, "OutputBin", ppd_keyword); } if (sides && cache->sides_option && !cupsGetOption(cache->sides_option, num_options, options)) { /* * Map sides to duplex option... */ if (!strcmp(sides, "one-sided") && cache->sides_1sided) ppd_mark_option(ppd, cache->sides_option, cache->sides_1sided); else if (!strcmp(sides, "two-sided-long-edge") && cache->sides_2sided_long) ppd_mark_option(ppd, cache->sides_option, cache->sides_2sided_long); else if (!strcmp(sides, "two-sided-short-edge") && cache->sides_2sided_short) ppd_mark_option(ppd, cache->sides_option, cache->sides_2sided_short); } } /* * Mark other options... */ for (i = num_options, optptr = options; i > 0; i --, optptr ++) { if (!_cups_strcasecmp(optptr->name, "media") || !_cups_strcasecmp(optptr->name, "output-bin") || !_cups_strcasecmp(optptr->name, "output-mode") || !_cups_strcasecmp(optptr->name, "print-quality") || !_cups_strcasecmp(optptr->name, "sides")) continue; else if (!_cups_strcasecmp(optptr->name, "resolution") || !_cups_strcasecmp(optptr->name, "printer-resolution")) { ppd_mark_option(ppd, "Resolution", optptr->value); ppd_mark_option(ppd, "SetResolution", optptr->value); /* Calcomp, Linotype, QMS, Summagraphics, Tektronix, Varityper */ ppd_mark_option(ppd, "JCLResolution", optptr->value); /* HP */ ppd_mark_option(ppd, "CNRes_PGP", optptr->value); /* Canon */ } else if (!_cups_strcasecmp(optptr->name, "multiple-document-handling")) { if (!cupsGetOption("Collate", num_options, options) && ppdFindOption(ppd, "Collate")) { if (_cups_strcasecmp(optptr->value, "separate-documents-uncollated-copies")) ppd_mark_option(ppd, "Collate", "True"); else ppd_mark_option(ppd, "Collate", "False"); } } else if (!_cups_strcasecmp(optptr->name, "finishings")) { /* * Lookup cupsIPPFinishings attributes for each value... */ for (ptr = optptr->value; *ptr;) { /* * Get the next finishings number... */ if (!isdigit(*ptr & 255)) break; if ((j = (int)strtol(ptr, &ptr, 10)) < 3) break; /* * Skip separator as needed... */ if (*ptr == ',') ptr ++; /* * Look it up in the PPD file... */ sprintf(s, "%d", j); if ((attr = ppdFindAttr(ppd, "cupsIPPFinishings", s)) == NULL) continue; /* * Apply "*Option Choice" settings from the attribute value... */ ppd_mark_choices(ppd, attr->value); } } else if (!_cups_strcasecmp(optptr->name, "APPrinterPreset")) { /* * Lookup APPrinterPreset value... */ if ((attr = ppdFindAttr(ppd, "APPrinterPreset", optptr->value)) != NULL) { /* * Apply "*Option Choice" settings from the attribute value... */ ppd_mark_choices(ppd, attr->value); } } else if (!_cups_strcasecmp(optptr->name, "mirror")) ppd_mark_option(ppd, "MirrorPrint", optptr->value); else ppd_mark_option(ppd, optptr->name, optptr->value); } if (print_quality) { int pq = atoi(print_quality); /* print-quaity value */ if (pq == IPP_QUALITY_DRAFT) ppd_mark_option(ppd, "cupsPrintQuality", "Draft"); else if (pq == IPP_QUALITY_HIGH) ppd_mark_option(ppd, "cupsPrintQuality", "High"); else ppd_mark_option(ppd, "cupsPrintQuality", "Normal"); } ppd_debug_marked(ppd, "After..."); return (ppdConflicts(ppd) > 0); } /* * 'ppdFindChoice()' - Return a pointer to an option choice. */ ppd_choice_t * /* O - Choice pointer or @code NULL@ */ ppdFindChoice(ppd_option_t *o, /* I - Pointer to option */ const char *choice) /* I - Name of choice */ { int i; /* Looping var */ ppd_choice_t *c; /* Current choice */ if (!o || !choice) return (NULL); if (choice[0] == '{' || !_cups_strncasecmp(choice, "Custom.", 7)) choice = "Custom"; for (i = o->num_choices, c = o->choices; i > 0; i --, c ++) if (!_cups_strcasecmp(c->choice, choice)) return (c); return (NULL); } /* * 'ppdFindMarkedChoice()' - Return the marked choice for the specified option. */ ppd_choice_t * /* O - Pointer to choice or @code NULL@ */ ppdFindMarkedChoice(ppd_file_t *ppd, /* I - PPD file */ const char *option) /* I - Keyword/option name */ { ppd_choice_t key, /* Search key for choice */ *marked; /* Marked choice */ DEBUG_printf(("2ppdFindMarkedChoice(ppd=%p, option=\"%s\")", ppd, option)); if ((key.option = ppdFindOption(ppd, option)) == NULL) { DEBUG_puts("3ppdFindMarkedChoice: Option not found, returning NULL"); return (NULL); } marked = (ppd_choice_t *)cupsArrayFind(ppd->marked, &key); DEBUG_printf(("3ppdFindMarkedChoice: Returning %p(%s)...", marked, marked ? marked->choice : "NULL")); return (marked); } /* * 'ppdFindOption()' - Return a pointer to the specified option. */ ppd_option_t * /* O - Pointer to option or @code NULL@ */ ppdFindOption(ppd_file_t *ppd, /* I - PPD file data */ const char *option) /* I - Option/Keyword name */ { /* * Range check input... */ if (!ppd || !option) return (NULL); if (ppd->options) { /* * Search in the array... */ ppd_option_t key; /* Option search key */ strlcpy(key.keyword, option, sizeof(key.keyword)); return ((ppd_option_t *)cupsArrayFind(ppd->options, &key)); } else { /* * Search in each group... */ int i, j; /* Looping vars */ ppd_group_t *group; /* Current group */ ppd_option_t *optptr; /* Current option */ for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++) for (j = group->num_options, optptr = group->options; j > 0; j --, optptr ++) if (!_cups_strcasecmp(optptr->keyword, option)) return (optptr); return (NULL); } } /* * 'ppdIsMarked()' - Check to see if an option is marked. */ int /* O - Non-zero if option is marked */ ppdIsMarked(ppd_file_t *ppd, /* I - PPD file data */ const char *option, /* I - Option/Keyword name */ const char *choice) /* I - Choice name */ { ppd_choice_t key, /* Search key */ *c; /* Choice pointer */ if (!ppd) return (0); if ((key.option = ppdFindOption(ppd, option)) == NULL) return (0); if ((c = (ppd_choice_t *)cupsArrayFind(ppd->marked, &key)) == NULL) return (0); return (!strcmp(c->choice, choice)); } /* * 'ppdMarkDefaults()' - Mark all default options in the PPD file. */ void ppdMarkDefaults(ppd_file_t *ppd) /* I - PPD file record */ { int i; /* Looping variables */ ppd_group_t *g; /* Current group */ ppd_choice_t *c; /* Current choice */ if (!ppd) return; /* * Clean out the marked array... */ for (c = (ppd_choice_t *)cupsArrayFirst(ppd->marked); c; c = (ppd_choice_t *)cupsArrayNext(ppd->marked)) { cupsArrayRemove(ppd->marked, c); c->marked = 0; } /* * Then repopulate it with the defaults... */ for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++) ppd_defaults(ppd, g); /* * Finally, tag any conflicts (API compatibility) once at the end. */ ppdConflicts(ppd); } /* * 'ppdMarkOption()' - Mark an option in a PPD file and return the number of * conflicts. */ int /* O - Number of conflicts */ ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */ const char *option, /* I - Keyword */ const char *choice) /* I - Option name */ { DEBUG_printf(("ppdMarkOption(ppd=%p, option=\"%s\", choice=\"%s\")", ppd, option, choice)); /* * Range check input... */ if (!ppd || !option || !choice) return (0); /* * Mark the option... */ ppd_mark_option(ppd, option, choice); /* * Return the number of conflicts... */ return (ppdConflicts(ppd)); } /* * 'ppdFirstOption()' - Return the first option in the PPD file. * * Options are returned from all groups in ascending alphanumeric order. * * @since CUPS 1.2/macOS 10.5@ */ ppd_option_t * /* O - First option or @code NULL@ */ ppdFirstOption(ppd_file_t *ppd) /* I - PPD file */ { if (!ppd) return (NULL); else return ((ppd_option_t *)cupsArrayFirst(ppd->options)); } /* * 'ppdNextOption()' - Return the next option in the PPD file. * * Options are returned from all groups in ascending alphanumeric order. * * @since CUPS 1.2/macOS 10.5@ */ ppd_option_t * /* O - Next option or @code NULL@ */ ppdNextOption(ppd_file_t *ppd) /* I - PPD file */ { if (!ppd) return (NULL); else return ((ppd_option_t *)cupsArrayNext(ppd->options)); } /* * '_ppdParseOptions()' - Parse options from a PPD file. * * This function looks for strings of the form: * * *option choice ... *optionN choiceN * property value ... propertyN valueN * * It stops when it finds a string that doesn't match this format. */ int /* O - Number of options */ _ppdParseOptions( const char *s, /* I - String to parse */ int num_options, /* I - Number of options */ cups_option_t **options, /* IO - Options */ _ppd_parse_t which) /* I - What to parse */ { char option[PPD_MAX_NAME * 2 + 1], /* Current option/property */ choice[PPD_MAX_NAME], /* Current choice/value */ *ptr; /* Pointer into option or choice */ if (!s) return (num_options); /* * Read all of the "*Option Choice" and "property value" pairs from the * string, add them to an options array as we go... */ while (*s) { /* * Skip leading whitespace... */ while (_cups_isspace(*s)) s ++; /* * Get the option/property name... */ ptr = option; while (*s && !_cups_isspace(*s) && ptr < (option + sizeof(option) - 1)) *ptr++ = *s++; if (ptr == s || !_cups_isspace(*s)) break; *ptr = '\0'; /* * Get the choice... */ while (_cups_isspace(*s)) s ++; if (!*s) break; ptr = choice; while (*s && !_cups_isspace(*s) && ptr < (choice + sizeof(choice) - 1)) *ptr++ = *s++; if (*s && !_cups_isspace(*s)) break; *ptr = '\0'; /* * Add it to the options array... */ if (option[0] == '*' && which != _PPD_PARSE_PROPERTIES) num_options = cupsAddOption(option + 1, choice, num_options, options); else if (option[0] != '*' && which != _PPD_PARSE_OPTIONS) num_options = cupsAddOption(option, choice, num_options, options); } return (num_options); } #ifdef DEBUG /* * 'ppd_debug_marked()' - Output the marked array to stdout... */ static void ppd_debug_marked(ppd_file_t *ppd, /* I - PPD file data */ const char *title) /* I - Title for list */ { ppd_choice_t *c; /* Current choice */ DEBUG_printf(("2cupsMarkOptions: %s", title)); for (c = (ppd_choice_t *)cupsArrayFirst(ppd->marked); c; c = (ppd_choice_t *)cupsArrayNext(ppd->marked)) DEBUG_printf(("2cupsMarkOptions: %s=%s", c->option->keyword, c->choice)); } #endif /* DEBUG */ /* * 'ppd_defaults()' - Set the defaults for this group and all sub-groups. */ static void ppd_defaults(ppd_file_t *ppd, /* I - PPD file */ ppd_group_t *g) /* I - Group to default */ { int i; /* Looping var */ ppd_option_t *o; /* Current option */ ppd_group_t *sg; /* Current sub-group */ for (i = g->num_options, o = g->options; i > 0; i --, o ++) if (_cups_strcasecmp(o->keyword, "PageRegion") != 0) ppd_mark_option(ppd, o->keyword, o->defchoice); for (i = g->num_subgroups, sg = g->subgroups; i > 0; i --, sg ++) ppd_defaults(ppd, sg); } /* * 'ppd_mark_choices()' - Mark one or more option choices from a string. */ static void ppd_mark_choices(ppd_file_t *ppd, /* I - PPD file */ const char *s) /* I - "*Option Choice ..." string */ { int i, /* Looping var */ num_options; /* Number of options */ cups_option_t *options, /* Options */ *option; /* Current option */ if (!s) return; options = NULL; num_options = _ppdParseOptions(s, 0, &options, 0); for (i = num_options, option = options; i > 0; i --, option ++) ppd_mark_option(ppd, option->name, option->value); cupsFreeOptions(num_options, options); } /* * 'ppd_mark_option()' - Quick mark an option without checking for conflicts. */ static void ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */ const char *option, /* I - Option name */ const char *choice) /* I - Choice name */ { int i, j; /* Looping vars */ ppd_option_t *o; /* Option pointer */ ppd_choice_t *c, /* Choice pointer */ *oldc, /* Old choice pointer */ key; /* Search key for choice */ struct lconv *loc; /* Locale data */ DEBUG_printf(("7ppd_mark_option(ppd=%p, option=\"%s\", choice=\"%s\")", ppd, option, choice)); /* * AP_D_InputSlot is the "default input slot" on macOS, and setting * it clears the regular InputSlot choices... */ if (!_cups_strcasecmp(option, "AP_D_InputSlot")) { cupsArraySave(ppd->options); if ((o = ppdFindOption(ppd, "InputSlot")) != NULL) { key.option = o; if ((oldc = (ppd_choice_t *)cupsArrayFind(ppd->marked, &key)) != NULL) { oldc->marked = 0; cupsArrayRemove(ppd->marked, oldc); } } cupsArrayRestore(ppd->options); } /* * Check for custom options... */ cupsArraySave(ppd->options); o = ppdFindOption(ppd, option); cupsArrayRestore(ppd->options); if (!o) return; loc = localeconv(); if (!_cups_strncasecmp(choice, "Custom.", 7)) { /* * Handle a custom option... */ if ((c = ppdFindChoice(o, "Custom")) == NULL) return; if (!_cups_strcasecmp(option, "PageSize")) { /* * Handle custom page sizes... */ ppdPageSize(ppd, choice); } else { /* * Handle other custom options... */ ppd_coption_t *coption; /* Custom option */ ppd_cparam_t *cparam; /* Custom parameter */ char *units; /* Custom points units */ if ((coption = ppdFindCustomOption(ppd, option)) != NULL) { if ((cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params)) == NULL) return; switch (cparam->type) { case PPD_CUSTOM_CURVE : case PPD_CUSTOM_INVCURVE : case PPD_CUSTOM_REAL : cparam->current.custom_real = (float)_cupsStrScand(choice + 7, NULL, loc); break; case PPD_CUSTOM_POINTS : cparam->current.custom_points = (float)_cupsStrScand(choice + 7, &units, loc); if (units) { if (!_cups_strcasecmp(units, "cm")) cparam->current.custom_points *= 72.0f / 2.54f; else if (!_cups_strcasecmp(units, "mm")) cparam->current.custom_points *= 72.0f / 25.4f; else if (!_cups_strcasecmp(units, "m")) cparam->current.custom_points *= 72.0f / 0.0254f; else if (!_cups_strcasecmp(units, "in")) cparam->current.custom_points *= 72.0f; else if (!_cups_strcasecmp(units, "ft")) cparam->current.custom_points *= 12.0f * 72.0f; } break; case PPD_CUSTOM_INT : cparam->current.custom_int = atoi(choice + 7); break; case PPD_CUSTOM_PASSCODE : case PPD_CUSTOM_PASSWORD : case PPD_CUSTOM_STRING : if (cparam->current.custom_string) _cupsStrFree(cparam->current.custom_string); cparam->current.custom_string = _cupsStrAlloc(choice + 7); break; } } } /* * Make sure that we keep the option marked below... */ choice = "Custom"; } else if (choice[0] == '{') { /* * Handle multi-value custom options... */ ppd_coption_t *coption; /* Custom option */ ppd_cparam_t *cparam; /* Custom parameter */ char *units; /* Custom points units */ int num_vals; /* Number of values */ cups_option_t *vals, /* Values */ *val; /* Value */ if ((c = ppdFindChoice(o, "Custom")) == NULL) return; if ((coption = ppdFindCustomOption(ppd, option)) != NULL) { num_vals = cupsParseOptions(choice, 0, &vals); for (i = 0, val = vals; i < num_vals; i ++, val ++) { if ((cparam = ppdFindCustomParam(coption, val->name)) == NULL) continue; switch (cparam->type) { case PPD_CUSTOM_CURVE : case PPD_CUSTOM_INVCURVE : case PPD_CUSTOM_REAL : cparam->current.custom_real = (float)_cupsStrScand(val->value, NULL, loc); break; case PPD_CUSTOM_POINTS : cparam->current.custom_points = (float)_cupsStrScand(val->value, &units, loc); if (units) { if (!_cups_strcasecmp(units, "cm")) cparam->current.custom_points *= 72.0f / 2.54f; else if (!_cups_strcasecmp(units, "mm")) cparam->current.custom_points *= 72.0f / 25.4f; else if (!_cups_strcasecmp(units, "m")) cparam->current.custom_points *= 72.0f / 0.0254f; else if (!_cups_strcasecmp(units, "in")) cparam->current.custom_points *= 72.0f; else if (!_cups_strcasecmp(units, "ft")) cparam->current.custom_points *= 12.0f * 72.0f; } break; case PPD_CUSTOM_INT : cparam->current.custom_int = atoi(val->value); break; case PPD_CUSTOM_PASSCODE : case PPD_CUSTOM_PASSWORD : case PPD_CUSTOM_STRING : if (cparam->current.custom_string) _cupsStrFree(cparam->current.custom_string); cparam->current.custom_string = _cupsStrRetain(val->value); break; } } cupsFreeOptions(num_vals, vals); } } else { for (i = o->num_choices, c = o->choices; i > 0; i --, c ++) if (!_cups_strcasecmp(c->choice, choice)) break; if (!i) return; } /* * Option found; mark it and then handle unmarking any other options. */ if (o->ui != PPD_UI_PICKMANY) { /* * Unmark all other choices... */ if ((oldc = (ppd_choice_t *)cupsArrayFind(ppd->marked, c)) != NULL) { oldc->marked = 0; cupsArrayRemove(ppd->marked, oldc); } if (!_cups_strcasecmp(option, "PageSize") || !_cups_strcasecmp(option, "PageRegion")) { /* * Mark current page size... */ for (j = 0; j < ppd->num_sizes; j ++) ppd->sizes[j].marked = !_cups_strcasecmp(ppd->sizes[j].name, choice); /* * Unmark the current PageSize or PageRegion setting, as * appropriate... */ cupsArraySave(ppd->options); if (!_cups_strcasecmp(option, "PageSize")) { if ((o = ppdFindOption(ppd, "PageRegion")) != NULL) { key.option = o; if ((oldc = (ppd_choice_t *)cupsArrayFind(ppd->marked, &key)) != NULL) { oldc->marked = 0; cupsArrayRemove(ppd->marked, oldc); } } } else { if ((o = ppdFindOption(ppd, "PageSize")) != NULL) { key.option = o; if ((oldc = (ppd_choice_t *)cupsArrayFind(ppd->marked, &key)) != NULL) { oldc->marked = 0; cupsArrayRemove(ppd->marked, oldc); } } } cupsArrayRestore(ppd->options); } else if (!_cups_strcasecmp(option, "InputSlot")) { /* * Unmark ManualFeed option... */ cupsArraySave(ppd->options); if ((o = ppdFindOption(ppd, "ManualFeed")) != NULL) { key.option = o; if ((oldc = (ppd_choice_t *)cupsArrayFind(ppd->marked, &key)) != NULL) { oldc->marked = 0; cupsArrayRemove(ppd->marked, oldc); } } cupsArrayRestore(ppd->options); } else if (!_cups_strcasecmp(option, "ManualFeed") && !_cups_strcasecmp(choice, "True")) { /* * Unmark InputSlot option... */ cupsArraySave(ppd->options); if ((o = ppdFindOption(ppd, "InputSlot")) != NULL) { key.option = o; if ((oldc = (ppd_choice_t *)cupsArrayFind(ppd->marked, &key)) != NULL) { oldc->marked = 0; cupsArrayRemove(ppd->marked, oldc); } } cupsArrayRestore(ppd->options); } } c->marked = 1; cupsArrayAdd(ppd->marked, c); } cups-2.2.7/cups/ppd-page.c000664 000765 000024 00000022271 13255074424 015772 0ustar00msweetstaff000000 000000 /* * Page size functions for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * PostScript is a trademark of Adobe Systems, Inc. * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "string-private.h" #include "debug-private.h" #include "ppd.h" /* * 'ppdPageSize()' - Get the page size record for the named size. */ ppd_size_t * /* O - Size record for page or NULL */ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */ const char *name) /* I - Size name */ { int i; /* Looping var */ ppd_size_t *size; /* Current page size */ double w, l; /* Width and length of page */ char *nameptr; /* Pointer into name */ struct lconv *loc; /* Locale data */ ppd_coption_t *coption; /* Custom option for page size */ ppd_cparam_t *cparam; /* Custom option parameter */ DEBUG_printf(("2ppdPageSize(ppd=%p, name=\"%s\")", ppd, name)); if (!ppd) { DEBUG_puts("3ppdPageSize: Bad PPD pointer, returning NULL..."); return (NULL); } if (name) { if (!strncmp(name, "Custom.", 7) && ppd->variable_sizes) { /* * Find the custom page size... */ for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++) if (!strcmp("Custom", size->name)) break; if (!i) { DEBUG_puts("3ppdPageSize: No custom sizes, returning NULL..."); return (NULL); } /* * Variable size; size name can be one of the following: * * Custom.WIDTHxLENGTHin - Size in inches * Custom.WIDTHxLENGTHft - Size in feet * Custom.WIDTHxLENGTHcm - Size in centimeters * Custom.WIDTHxLENGTHmm - Size in millimeters * Custom.WIDTHxLENGTHm - Size in meters * Custom.WIDTHxLENGTH[pt] - Size in points */ loc = localeconv(); w = _cupsStrScand(name + 7, &nameptr, loc); if (!nameptr || *nameptr != 'x') return (NULL); l = _cupsStrScand(nameptr + 1, &nameptr, loc); if (!nameptr) return (NULL); if (!_cups_strcasecmp(nameptr, "in")) { w *= 72.0; l *= 72.0; } else if (!_cups_strcasecmp(nameptr, "ft")) { w *= 12.0 * 72.0; l *= 12.0 * 72.0; } else if (!_cups_strcasecmp(nameptr, "mm")) { w *= 72.0 / 25.4; l *= 72.0 / 25.4; } else if (!_cups_strcasecmp(nameptr, "cm")) { w *= 72.0 / 2.54; l *= 72.0 / 2.54; } else if (!_cups_strcasecmp(nameptr, "m")) { w *= 72.0 / 0.0254; l *= 72.0 / 0.0254; } size->width = (float)w; size->length = (float)l; size->left = ppd->custom_margins[0]; size->bottom = ppd->custom_margins[1]; size->right = (float)(w - ppd->custom_margins[2]); size->top = (float)(l - ppd->custom_margins[3]); /* * Update the custom option records for the page size, too... */ if ((coption = ppdFindCustomOption(ppd, "PageSize")) != NULL) { if ((cparam = ppdFindCustomParam(coption, "Width")) != NULL) cparam->current.custom_points = (float)w; if ((cparam = ppdFindCustomParam(coption, "Height")) != NULL) cparam->current.custom_points = (float)l; } /* * Return the page size... */ DEBUG_printf(("3ppdPageSize: Returning %p (\"%s\", %gx%g)", size, size->name, size->width, size->length)); return (size); } else { /* * Lookup by name... */ for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++) if (!_cups_strcasecmp(name, size->name)) { DEBUG_printf(("3ppdPageSize: Returning %p (\"%s\", %gx%g)", size, size->name, size->width, size->length)); return (size); } } } else { /* * Find default... */ for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++) if (size->marked) { DEBUG_printf(("3ppdPageSize: Returning %p (\"%s\", %gx%g)", size, size->name, size->width, size->length)); return (size); } } DEBUG_puts("3ppdPageSize: Size not found, returning NULL"); return (NULL); } /* * 'ppdPageSizeLimits()' - Return the custom page size limits. * * This function returns the minimum and maximum custom page sizes and printable * areas based on the currently-marked (selected) options. * * If the specified PPD file does not support custom page sizes, both * "minimum" and "maximum" are filled with zeroes. * * @since CUPS 1.4/macOS 10.6@ */ int /* O - 1 if custom sizes are supported, 0 otherwise */ ppdPageSizeLimits(ppd_file_t *ppd, /* I - PPD file record */ ppd_size_t *minimum, /* O - Minimum custom size */ ppd_size_t *maximum) /* O - Maximum custom size */ { ppd_choice_t *qualifier2, /* Second media qualifier */ *qualifier3; /* Third media qualifier */ ppd_attr_t *attr; /* Attribute */ float width, /* Min/max width */ length; /* Min/max length */ char spec[PPD_MAX_NAME]; /* Selector for min/max */ /* * Range check input... */ if (!ppd || !ppd->variable_sizes || !minimum || !maximum) { if (minimum) memset(minimum, 0, sizeof(ppd_size_t)); if (maximum) memset(maximum, 0, sizeof(ppd_size_t)); return (0); } /* * See if we have the cupsMediaQualifier2 and cupsMediaQualifier3 attributes... */ cupsArraySave(ppd->sorted_attrs); if ((attr = ppdFindAttr(ppd, "cupsMediaQualifier2", NULL)) != NULL && attr->value) qualifier2 = ppdFindMarkedChoice(ppd, attr->value); else qualifier2 = NULL; if ((attr = ppdFindAttr(ppd, "cupsMediaQualifier3", NULL)) != NULL && attr->value) qualifier3 = ppdFindMarkedChoice(ppd, attr->value); else qualifier3 = NULL; /* * Figure out the current minimum width and length... */ width = ppd->custom_min[0]; length = ppd->custom_min[1]; if (qualifier2) { /* * Try getting cupsMinSize... */ if (qualifier3) { snprintf(spec, sizeof(spec), ".%s.%s", qualifier2->choice, qualifier3->choice); attr = ppdFindAttr(ppd, "cupsMinSize", spec); } else attr = NULL; if (!attr) { snprintf(spec, sizeof(spec), ".%s.", qualifier2->choice); attr = ppdFindAttr(ppd, "cupsMinSize", spec); } if (!attr && qualifier3) { snprintf(spec, sizeof(spec), "..%s", qualifier3->choice); attr = ppdFindAttr(ppd, "cupsMinSize", spec); } if ((attr && attr->value && sscanf(attr->value, "%f%f", &width, &length) != 2) || !attr) { width = ppd->custom_min[0]; length = ppd->custom_min[1]; } } minimum->width = width; minimum->length = length; minimum->left = ppd->custom_margins[0]; minimum->bottom = ppd->custom_margins[1]; minimum->right = width - ppd->custom_margins[2]; minimum->top = length - ppd->custom_margins[3]; /* * Figure out the current maximum width and length... */ width = ppd->custom_max[0]; length = ppd->custom_max[1]; if (qualifier2) { /* * Try getting cupsMaxSize... */ if (qualifier3) { snprintf(spec, sizeof(spec), ".%s.%s", qualifier2->choice, qualifier3->choice); attr = ppdFindAttr(ppd, "cupsMaxSize", spec); } else attr = NULL; if (!attr) { snprintf(spec, sizeof(spec), ".%s.", qualifier2->choice); attr = ppdFindAttr(ppd, "cupsMaxSize", spec); } if (!attr && qualifier3) { snprintf(spec, sizeof(spec), "..%s", qualifier3->choice); attr = ppdFindAttr(ppd, "cupsMaxSize", spec); } if (!attr || (attr->value && sscanf(attr->value, "%f%f", &width, &length) != 2)) { width = ppd->custom_max[0]; length = ppd->custom_max[1]; } } maximum->width = width; maximum->length = length; maximum->left = ppd->custom_margins[0]; maximum->bottom = ppd->custom_margins[1]; maximum->right = width - ppd->custom_margins[2]; maximum->top = length - ppd->custom_margins[3]; /* * Return the min and max... */ cupsArrayRestore(ppd->sorted_attrs); return (1); } /* * 'ppdPageWidth()' - Get the page width for the given size. */ float /* O - Width of page in points or 0.0 */ ppdPageWidth(ppd_file_t *ppd, /* I - PPD file record */ const char *name) /* I - Size name */ { ppd_size_t *size; /* Page size */ if ((size = ppdPageSize(ppd, name)) == NULL) return (0.0); else return (size->width); } /* * 'ppdPageLength()' - Get the page length for the given size. */ float /* O - Length of page in points or 0.0 */ ppdPageLength(ppd_file_t *ppd, /* I - PPD file */ const char *name) /* I - Size name */ { ppd_size_t *size; /* Page size */ if ((size = ppdPageSize(ppd, name)) == NULL) return (0.0); else return (size->length); } cups-2.2.7/cups/ppd-private.h000664 000765 000024 00000022032 13255074424 016530 0ustar00msweetstaff000000 000000 /* * Private PPD definitions for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * PostScript is a trademark of Adobe Systems, Inc. * * This code and any derivative of it may be used and distributed * freely under the terms of the GNU General Public License when * used with GNU Ghostscript or its derivatives. Use of the code * (or any derivative of it) with software other than GNU * GhostScript (or its derivatives) is governed by the CUPS license * agreement. * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_PPD_PRIVATE_H_ # define _CUPS_PPD_PRIVATE_H_ /* * Include necessary headers... */ # include # include # include "pwg-private.h" /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Constants... */ # define _PPD_CACHE_VERSION 8 /* Version number in cache file */ /* * Types and structures... */ typedef struct _ppd_globals_s /**** CUPS PPD global state data ****/ { /* ppd.c */ ppd_status_t ppd_status; /* Status of last ppdOpen*() */ int ppd_line; /* Current line number */ ppd_conform_t ppd_conform; /* Level of conformance required */ /* ppd-util.c */ char ppd_filename[HTTP_MAX_URI]; /* PPD filename */ } _ppd_globals_t; typedef enum _ppd_localization_e /**** Selector for _ppdOpen ****/ { _PPD_LOCALIZATION_DEFAULT, /* Load only the default localization */ _PPD_LOCALIZATION_ICC_PROFILES, /* Load only the color profile localization */ _PPD_LOCALIZATION_NONE, /* Load no localizations */ _PPD_LOCALIZATION_ALL /* Load all localizations */ } _ppd_localization_t; typedef enum _ppd_parse_e /**** Selector for _ppdParseOptions ****/ { _PPD_PARSE_OPTIONS, /* Parse only the options */ _PPD_PARSE_PROPERTIES, /* Parse only the properties */ _PPD_PARSE_ALL /* Parse everything */ } _ppd_parse_t; typedef struct _ppd_cups_uiconst_s /**** Constraint from cupsUIConstraints ****/ { ppd_option_t *option; /* Constrained option */ ppd_choice_t *choice; /* Constrained choice or @code NULL@ */ int installable; /* Installable option? */ } _ppd_cups_uiconst_t; typedef struct _ppd_cups_uiconsts_s /**** cupsUIConstraints ****/ { char resolver[PPD_MAX_NAME]; /* Resolver name */ int installable, /* Constrained against any installable options? */ num_constraints; /* Number of constraints */ _ppd_cups_uiconst_t *constraints; /* Constraints */ } _ppd_cups_uiconsts_t; typedef enum _pwg_print_color_mode_e /**** PWG print-color-mode indices ****/ { _PWG_PRINT_COLOR_MODE_MONOCHROME = 0, /* print-color-mode=monochrome */ _PWG_PRINT_COLOR_MODE_COLOR, /* print-color-mode=color */ /* Other values are not supported by CUPS yet. */ _PWG_PRINT_COLOR_MODE_MAX } _pwg_print_color_mode_t; typedef enum _pwg_print_quality_e /**** PWG print-quality values ****/ { _PWG_PRINT_QUALITY_DRAFT = 0, /* print-quality=3 */ _PWG_PRINT_QUALITY_NORMAL, /* print-quality=4 */ _PWG_PRINT_QUALITY_HIGH, /* print-quality=5 */ _PWG_PRINT_QUALITY_MAX } _pwg_print_quality_t; typedef struct _pwg_finishings_s /**** PWG finishings mapping data ****/ { ipp_finishings_t value; /* finishings value */ int num_options; /* Number of options to apply */ cups_option_t *options; /* Options to apply */ } _pwg_finishings_t; struct _ppd_cache_s /**** PPD cache and PWG conversion data ****/ { int num_bins; /* Number of output bins */ pwg_map_t *bins; /* Output bins */ int num_sizes; /* Number of media sizes */ pwg_size_t *sizes; /* Media sizes */ int custom_max_width, /* Maximum custom width in 2540ths */ custom_max_length, /* Maximum custom length in 2540ths */ custom_min_width, /* Minimum custom width in 2540ths */ custom_min_length; /* Minimum custom length in 2540ths */ char *custom_max_keyword, /* Maximum custom size PWG keyword */ *custom_min_keyword, /* Minimum custom size PWG keyword */ custom_ppd_size[41]; /* Custom PPD size name */ pwg_size_t custom_size; /* Custom size record */ char *source_option; /* PPD option for media source */ int num_sources; /* Number of media sources */ pwg_map_t *sources; /* Media sources */ int num_types; /* Number of media types */ pwg_map_t *types; /* Media types */ int num_presets[_PWG_PRINT_COLOR_MODE_MAX][_PWG_PRINT_QUALITY_MAX]; /* Number of print-color-mode/print-quality options */ cups_option_t *presets[_PWG_PRINT_COLOR_MODE_MAX][_PWG_PRINT_QUALITY_MAX]; /* print-color-mode/print-quality options */ char *sides_option, /* PPD option for sides */ *sides_1sided, /* Choice for one-sided */ *sides_2sided_long, /* Choice for two-sided-long-edge */ *sides_2sided_short; /* Choice for two-sided-short-edge */ char *product; /* Product value */ cups_array_t *filters, /* cupsFilter/cupsFilter2 values */ *prefilters; /* cupsPreFilter values */ int single_file; /* cupsSingleFile value */ cups_array_t *finishings; /* cupsIPPFinishings values */ int max_copies, /* cupsMaxCopies value */ account_id, /* cupsJobAccountId value */ accounting_user_id; /* cupsJobAccountingUserId value */ char *password; /* cupsJobPassword value */ cups_array_t *mandatory; /* cupsMandatory value */ char *charge_info_uri; /* cupsChargeInfoURI value */ cups_array_t *support_files; /* Support files - ICC profiles, etc. */ }; /* * Prototypes... */ extern int _cupsConvertOptions(ipp_t *request, ppd_file_t *ppd, _ppd_cache_t *pc, ipp_attribute_t *media_col_sup, ipp_attribute_t *doc_handling_sup, ipp_attribute_t *print_color_mode_sup, const char *user, const char *format, int copies, int num_options, cups_option_t *options); extern _ppd_cache_t *_ppdCacheCreateWithFile(const char *filename, ipp_t **attrs); extern _ppd_cache_t *_ppdCacheCreateWithPPD(ppd_file_t *ppd); extern void _ppdCacheDestroy(_ppd_cache_t *pc); extern const char *_ppdCacheGetBin(_ppd_cache_t *pc, const char *output_bin); extern int _ppdCacheGetFinishingOptions(_ppd_cache_t *pc, ipp_t *job, ipp_finishings_t value, int num_options, cups_option_t **options); extern int _ppdCacheGetFinishingValues(_ppd_cache_t *pc, int num_options, cups_option_t *options, int max_values, int *values); extern const char *_ppdCacheGetInputSlot(_ppd_cache_t *pc, ipp_t *job, const char *keyword); extern const char *_ppdCacheGetMediaType(_ppd_cache_t *pc, ipp_t *job, const char *keyword); extern const char *_ppdCacheGetOutputBin(_ppd_cache_t *pc, const char *keyword); extern const char *_ppdCacheGetPageSize(_ppd_cache_t *pc, ipp_t *job, const char *keyword, int *exact); extern pwg_size_t *_ppdCacheGetSize(_ppd_cache_t *pc, const char *page_size); extern const char *_ppdCacheGetSource(_ppd_cache_t *pc, const char *input_slot); extern const char *_ppdCacheGetType(_ppd_cache_t *pc, const char *media_type); extern int _ppdCacheWriteFile(_ppd_cache_t *pc, const char *filename, ipp_t *attrs); extern char *_ppdCreateFromIPP(char *buffer, size_t bufsize, ipp_t *response); extern void _ppdFreeLanguages(cups_array_t *languages); extern cups_encoding_t _ppdGetEncoding(const char *name); extern cups_array_t *_ppdGetLanguages(ppd_file_t *ppd); extern _ppd_globals_t *_ppdGlobals(void); extern unsigned _ppdHashName(const char *name); extern ppd_attr_t *_ppdLocalizedAttr(ppd_file_t *ppd, const char *keyword, const char *spec, const char *ll_CC); extern char *_ppdNormalizeMakeAndModel(const char *make_and_model, char *buffer, size_t bufsize); extern ppd_file_t *_ppdOpen(cups_file_t *fp, _ppd_localization_t localization); extern ppd_file_t *_ppdOpenFile(const char *filename, _ppd_localization_t localization); extern int _ppdParseOptions(const char *s, int num_options, cups_option_t **options, _ppd_parse_t which); extern const char *_pwgInputSlotForSource(const char *media_source, char *name, size_t namesize); extern const char *_pwgMediaTypeForType(const char *media_type, char *name, size_t namesize); extern const char *_pwgPageSizeForMedia(pwg_media_t *media, char *name, size_t namesize); /* * C++ magic... */ # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_PPD_PRIVATE_H_ */ cups-2.2.7/cups/ppd-util.c000664 000765 000024 00000041746 13255074424 016043 0ustar00msweetstaff000000 000000 /* * PPD utilities for CUPS. * * Copyright © 2007-2018 by Apple Inc. * Copyright © 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include "ppd-private.h" #include #include #if defined(WIN32) || defined(__EMX__) # include #else # include #endif /* WIN32 || __EMX__ */ /* * Local functions... */ static int cups_get_printer_uri(http_t *http, const char *name, char *host, int hostsize, int *port, char *resource, int resourcesize, int depth); /* * 'cupsGetPPD()' - Get the PPD file for a printer on the default server. * * For classes, @code cupsGetPPD@ returns the PPD file for the first printer * in the class. * * The returned filename is stored in a static buffer and is overwritten with * each call to @code cupsGetPPD@ or @link cupsGetPPD2@. The caller "owns" the * file that is created and must @code unlink@ the returned filename. */ const char * /* O - Filename for PPD file */ cupsGetPPD(const char *name) /* I - Destination name */ { _ppd_globals_t *pg = _ppdGlobals(); /* Pointer to library globals */ time_t modtime = 0; /* Modification time */ /* * Return the PPD file... */ pg->ppd_filename[0] = '\0'; if (cupsGetPPD3(CUPS_HTTP_DEFAULT, name, &modtime, pg->ppd_filename, sizeof(pg->ppd_filename)) == HTTP_STATUS_OK) return (pg->ppd_filename); else return (NULL); } /* * 'cupsGetPPD2()' - Get the PPD file for a printer from the specified server. * * For classes, @code cupsGetPPD2@ returns the PPD file for the first printer * in the class. * * The returned filename is stored in a static buffer and is overwritten with * each call to @link cupsGetPPD@ or @code cupsGetPPD2@. The caller "owns" the * file that is created and must @code unlink@ the returned filename. * * @since CUPS 1.1.21/macOS 10.4@ */ const char * /* O - Filename for PPD file */ cupsGetPPD2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *name) /* I - Destination name */ { _ppd_globals_t *pg = _ppdGlobals(); /* Pointer to library globals */ time_t modtime = 0; /* Modification time */ pg->ppd_filename[0] = '\0'; if (cupsGetPPD3(http, name, &modtime, pg->ppd_filename, sizeof(pg->ppd_filename)) == HTTP_STATUS_OK) return (pg->ppd_filename); else return (NULL); } /* * 'cupsGetPPD3()' - Get the PPD file for a printer on the specified * server if it has changed. * * The "modtime" parameter contains the modification time of any * locally-cached content and is updated with the time from the PPD file on * the server. * * The "buffer" parameter contains the local PPD filename. If it contains * the empty string, a new temporary file is created, otherwise the existing * file will be overwritten as needed. The caller "owns" the file that is * created and must @code unlink@ the returned filename. * * On success, @code HTTP_STATUS_OK@ is returned for a new PPD file and * @code HTTP_STATUS_NOT_MODIFIED@ if the existing PPD file is up-to-date. Any other * status is an error. * * For classes, @code cupsGetPPD3@ returns the PPD file for the first printer * in the class. * * @since CUPS 1.4/macOS 10.6@ */ http_status_t /* O - HTTP status */ cupsGetPPD3(http_t *http, /* I - HTTP connection or @code CUPS_HTTP_DEFAULT@ */ const char *name, /* I - Destination name */ time_t *modtime, /* IO - Modification time */ char *buffer, /* I - Filename buffer */ size_t bufsize) /* I - Size of filename buffer */ { int http_port; /* Port number */ char http_hostname[HTTP_MAX_HOST]; /* Hostname associated with connection */ http_t *http2; /* Alternate HTTP connection */ int fd; /* PPD file */ char localhost[HTTP_MAX_URI],/* Local hostname */ hostname[HTTP_MAX_URI], /* Hostname */ resource[HTTP_MAX_URI]; /* Resource name */ int port; /* Port number */ http_status_t status; /* HTTP status from server */ char tempfile[1024] = ""; /* Temporary filename */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ /* * Range check input... */ DEBUG_printf(("cupsGetPPD3(http=%p, name=\"%s\", modtime=%p(%d), buffer=%p, " "bufsize=%d)", http, name, modtime, modtime ? (int)*modtime : 0, buffer, (int)bufsize)); if (!name) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No printer name"), 1); return (HTTP_STATUS_NOT_ACCEPTABLE); } if (!modtime) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No modification time"), 1); return (HTTP_STATUS_NOT_ACCEPTABLE); } if (!buffer || bufsize <= 1) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad filename buffer"), 1); return (HTTP_STATUS_NOT_ACCEPTABLE); } #ifndef WIN32 /* * See if the PPD file is available locally... */ if (http) httpGetHostname(http, hostname, sizeof(hostname)); else { strlcpy(hostname, cupsServer(), sizeof(hostname)); if (hostname[0] == '/') strlcpy(hostname, "localhost", sizeof(hostname)); } if (!_cups_strcasecmp(hostname, "localhost")) { char ppdname[1024]; /* PPD filename */ struct stat ppdinfo; /* PPD file information */ snprintf(ppdname, sizeof(ppdname), "%s/ppd/%s.ppd", cg->cups_serverroot, name); if (!stat(ppdname, &ppdinfo) && !access(ppdname, R_OK)) { /* * OK, the file exists and is readable, use it! */ if (buffer[0]) { unlink(buffer); if (symlink(ppdname, buffer) && errno != EEXIST) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0); return (HTTP_STATUS_SERVER_ERROR); } } else { int tries; /* Number of tries */ const char *tmpdir; /* TMPDIR environment variable */ struct timeval curtime; /* Current time */ #ifdef __APPLE__ /* * On macOS and iOS, the TMPDIR environment variable is not always the * best location to place temporary files due to sandboxing. Instead, * the confstr function should be called to get the proper per-user, * per-process TMPDIR value. */ char tmppath[1024]; /* Temporary directory */ if ((tmpdir = getenv("TMPDIR")) != NULL && access(tmpdir, W_OK)) tmpdir = NULL; if (!tmpdir) { if (confstr(_CS_DARWIN_USER_TEMP_DIR, tmppath, sizeof(tmppath))) tmpdir = tmppath; else tmpdir = "/private/tmp"; /* This should never happen */ } #else /* * Previously we put root temporary files in the default CUPS temporary * directory under /var/spool/cups. However, since the scheduler cleans * out temporary files there and runs independently of the user apps, we * don't want to use it unless specifically told to by cupsd. */ if ((tmpdir = getenv("TMPDIR")) == NULL) tmpdir = "/tmp"; #endif /* __APPLE__ */ /* * Make the temporary name using the specified directory... */ tries = 0; do { /* * Get the current time of day... */ gettimeofday(&curtime, NULL); /* * Format a string using the hex time values... */ snprintf(buffer, bufsize, "%s/%08lx%05lx", tmpdir, (unsigned long)curtime.tv_sec, (unsigned long)curtime.tv_usec); /* * Try to make a symlink... */ if (!symlink(ppdname, buffer)) break; tries ++; } while (tries < 1000); if (tries >= 1000) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0); return (HTTP_STATUS_SERVER_ERROR); } } if (*modtime >= ppdinfo.st_mtime) return (HTTP_STATUS_NOT_MODIFIED); else { *modtime = ppdinfo.st_mtime; return (HTTP_STATUS_OK); } } } #endif /* !WIN32 */ /* * Try finding a printer URI for this printer... */ if (!http) if ((http = _cupsConnect()) == NULL) return (HTTP_STATUS_SERVICE_UNAVAILABLE); if (!cups_get_printer_uri(http, name, hostname, sizeof(hostname), &port, resource, sizeof(resource), 0)) return (HTTP_STATUS_NOT_FOUND); DEBUG_printf(("2cupsGetPPD3: Printer hostname=\"%s\", port=%d", hostname, port)); if (cupsServer()[0] == '/' && !_cups_strcasecmp(hostname, "localhost") && port == ippPort()) { /* * Redirect localhost to domain socket... */ strlcpy(hostname, cupsServer(), sizeof(hostname)); port = 0; DEBUG_printf(("2cupsGetPPD3: Redirecting to \"%s\".", hostname)); } /* * Remap local hostname to localhost... */ httpGetHostname(NULL, localhost, sizeof(localhost)); DEBUG_printf(("2cupsGetPPD3: Local hostname=\"%s\"", localhost)); if (!_cups_strcasecmp(localhost, hostname)) strlcpy(hostname, "localhost", sizeof(hostname)); /* * Get the hostname and port number we are connected to... */ httpGetHostname(http, http_hostname, sizeof(http_hostname)); http_port = httpAddrPort(http->hostaddr); DEBUG_printf(("2cupsGetPPD3: Connection hostname=\"%s\", port=%d", http_hostname, http_port)); /* * Reconnect to the correct server as needed... */ if (!_cups_strcasecmp(http_hostname, hostname) && port == http_port) http2 = http; else if ((http2 = httpConnect2(hostname, port, NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL)) == NULL) { DEBUG_puts("1cupsGetPPD3: Unable to connect to server"); return (HTTP_STATUS_SERVICE_UNAVAILABLE); } /* * Get a temp file... */ if (buffer[0]) fd = open(buffer, O_CREAT | O_TRUNC | O_WRONLY, 0600); else fd = cupsTempFd(tempfile, sizeof(tempfile)); if (fd < 0) { /* * Can't open file; close the server connection and return NULL... */ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0); if (http2 != http) httpClose(http2); return (HTTP_STATUS_SERVER_ERROR); } /* * And send a request to the HTTP server... */ strlcat(resource, ".ppd", sizeof(resource)); if (*modtime > 0) httpSetField(http2, HTTP_FIELD_IF_MODIFIED_SINCE, httpGetDateString(*modtime)); status = cupsGetFd(http2, resource, fd); close(fd); /* * See if we actually got the file or an error... */ if (status == HTTP_STATUS_OK) { *modtime = httpGetDateTime(httpGetField(http2, HTTP_FIELD_DATE)); if (tempfile[0]) strlcpy(buffer, tempfile, bufsize); } else if (status != HTTP_STATUS_NOT_MODIFIED) { _cupsSetHTTPError(status); if (buffer[0]) unlink(buffer); else if (tempfile[0]) unlink(tempfile); } else if (tempfile[0]) unlink(tempfile); if (http2 != http) httpClose(http2); /* * Return the PPD file... */ DEBUG_printf(("1cupsGetPPD3: Returning status %d", status)); return (status); } /* * 'cupsGetServerPPD()' - Get an available PPD file from the server. * * This function returns the named PPD file from the server. The * list of available PPDs is provided by the IPP @code CUPS_GET_PPDS@ * operation. * * You must remove (unlink) the PPD file when you are finished with * it. The PPD filename is stored in a static location that will be * overwritten on the next call to @link cupsGetPPD@, @link cupsGetPPD2@, * or @link cupsGetServerPPD@. * * @since CUPS 1.3/macOS 10.5@ */ char * /* O - Name of PPD file or @code NULL@ on error */ cupsGetServerPPD(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *name) /* I - Name of PPD file ("ppd-name") */ { int fd; /* PPD file descriptor */ ipp_t *request; /* IPP request */ _ppd_globals_t *pg = _ppdGlobals(); /* Pointer to library globals */ /* * Range check input... */ if (!name) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No PPD name"), 1); return (NULL); } if (!http) if ((http = _cupsConnect()) == NULL) return (NULL); /* * Get a temp file... */ if ((fd = cupsTempFd(pg->ppd_filename, sizeof(pg->ppd_filename))) < 0) { /* * Can't open file; close the server connection and return NULL... */ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0); return (NULL); } /* * Get the PPD file... */ request = ippNewRequest(IPP_OP_CUPS_GET_PPD); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name", NULL, name); ippDelete(cupsDoIORequest(http, request, "/", -1, fd)); close(fd); if (cupsLastError() != IPP_STATUS_OK) { unlink(pg->ppd_filename); return (NULL); } else return (pg->ppd_filename); } /* * 'cups_get_printer_uri()' - Get the printer-uri-supported attribute for the * first printer in a class. */ static int /* O - 1 on success, 0 on failure */ cups_get_printer_uri( http_t *http, /* I - Connection to server */ const char *name, /* I - Name of printer or class */ char *host, /* I - Hostname buffer */ int hostsize, /* I - Size of hostname buffer */ int *port, /* O - Port number */ char *resource, /* I - Resource buffer */ int resourcesize, /* I - Size of resource buffer */ int depth) /* I - Depth of query */ { int i; /* Looping var */ ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* Current attribute */ char uri[HTTP_MAX_URI], /* printer-uri attribute */ scheme[HTTP_MAX_URI], /* Scheme name */ username[HTTP_MAX_URI]; /* Username:password */ static const char * const requested_attrs[] = { /* Requested attributes */ "member-uris", "printer-uri-supported" }; DEBUG_printf(("4cups_get_printer_uri(http=%p, name=\"%s\", host=%p, hostsize=%d, resource=%p, resourcesize=%d, depth=%d)", http, name, host, hostsize, resource, resourcesize, depth)); /* * Setup the printer URI... */ if (httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", name) < HTTP_URI_STATUS_OK) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to create printer-uri"), 1); *host = '\0'; *resource = '\0'; return (0); } DEBUG_printf(("5cups_get_printer_uri: printer-uri=\"%s\"", uri)); /* * Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requested-attributes */ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(requested_attrs) / sizeof(requested_attrs[0]), NULL, requested_attrs); /* * Do the request and get back a response... */ snprintf(resource, (size_t)resourcesize, "/printers/%s", name); if ((response = cupsDoRequest(http, request, resource)) != NULL) { if ((attr = ippFindAttribute(response, "member-uris", IPP_TAG_URI)) != NULL) { /* * Get the first actual printer name in the class... */ DEBUG_printf(("5cups_get_printer_uri: Got member-uris with %d values.", ippGetCount(attr))); for (i = 0; i < attr->num_values; i ++) { DEBUG_printf(("5cups_get_printer_uri: member-uris[%d]=\"%s\"", i, ippGetString(attr, i, NULL))); httpSeparateURI(HTTP_URI_CODING_ALL, attr->values[i].string.text, scheme, sizeof(scheme), username, sizeof(username), host, hostsize, port, resource, resourcesize); if (!strncmp(resource, "/printers/", 10)) { /* * Found a printer! */ ippDelete(response); DEBUG_printf(("5cups_get_printer_uri: Found printer member with host=\"%s\", port=%d, resource=\"%s\"", host, *port, resource)); return (1); } } } else if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL) { httpSeparateURI(HTTP_URI_CODING_ALL, _httpResolveURI(attr->values[0].string.text, uri, sizeof(uri), _HTTP_RESOLVE_DEFAULT, NULL, NULL), scheme, sizeof(scheme), username, sizeof(username), host, hostsize, port, resource, resourcesize); ippDelete(response); DEBUG_printf(("5cups_get_printer_uri: Resolved to host=\"%s\", port=%d, resource=\"%s\"", host, *port, resource)); if (!strncmp(resource, "/classes/", 9)) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No printer-uri found for class"), 1); *host = '\0'; *resource = '\0'; DEBUG_puts("5cups_get_printer_uri: Not returning class."); return (0); } return (1); } ippDelete(response); } if (cupsLastError() != IPP_STATUS_ERROR_NOT_FOUND) _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No printer-uri found"), 1); *host = '\0'; *resource = '\0'; DEBUG_puts("5cups_get_printer_uri: Printer URI not found."); return (0); } cups-2.2.7/cups/ppd.c000664 000765 000024 00000237726 13255074424 015075 0ustar00msweetstaff000000 000000 /* * PPD file routines for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * PostScript is a trademark of Adobe Systems, Inc. * * This code and any derivative of it may be used and distributed * freely under the terms of the GNU General Public License when * used with GNU Ghostscript or its derivatives. Use of the code * (or any derivative of it) with software other than GNU * GhostScript (or its derivatives) is governed by the CUPS license * agreement. * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include "cups-private.h" #include "ppd-private.h" /* * Definitions... */ #define ppd_free(p) if (p) free(p) /* Safe free macro */ #define PPD_KEYWORD 1 /* Line contained a keyword */ #define PPD_OPTION 2 /* Line contained an option name */ #define PPD_TEXT 4 /* Line contained human-readable text */ #define PPD_STRING 8 /* Line contained a string or code */ #define PPD_HASHSIZE 512 /* Size of hash */ /* * Line buffer structure... */ typedef struct _ppd_line_s { char *buffer; /* Pointer to buffer */ size_t bufsize; /* Size of the buffer */ } _ppd_line_t; /* * Local globals... */ static _cups_threadkey_t ppd_globals_key = _CUPS_THREADKEY_INITIALIZER; /* Thread local storage key */ #ifdef HAVE_PTHREAD_H static pthread_once_t ppd_globals_key_once = PTHREAD_ONCE_INIT; /* One-time initialization object */ #endif /* HAVE_PTHREAD_H */ /* * Local functions... */ static ppd_attr_t *ppd_add_attr(ppd_file_t *ppd, const char *name, const char *spec, const char *text, const char *value); static ppd_choice_t *ppd_add_choice(ppd_option_t *option, const char *name); static ppd_size_t *ppd_add_size(ppd_file_t *ppd, const char *name); static int ppd_compare_attrs(ppd_attr_t *a, ppd_attr_t *b); static int ppd_compare_choices(ppd_choice_t *a, ppd_choice_t *b); static int ppd_compare_coptions(ppd_coption_t *a, ppd_coption_t *b); static int ppd_compare_options(ppd_option_t *a, ppd_option_t *b); static int ppd_decode(char *string); static void ppd_free_filters(ppd_file_t *ppd); static void ppd_free_group(ppd_group_t *group); static void ppd_free_option(ppd_option_t *option); static ppd_coption_t *ppd_get_coption(ppd_file_t *ppd, const char *name); static ppd_cparam_t *ppd_get_cparam(ppd_coption_t *opt, const char *param, const char *text); static ppd_group_t *ppd_get_group(ppd_file_t *ppd, const char *name, const char *text, _ppd_globals_t *pg, cups_encoding_t encoding); static ppd_option_t *ppd_get_option(ppd_group_t *group, const char *name); static _ppd_globals_t *ppd_globals_alloc(void); #if defined(HAVE_PTHREAD_H) || defined(WIN32) static void ppd_globals_free(_ppd_globals_t *g); #endif /* HAVE_PTHREAD_H || WIN32 */ #ifdef HAVE_PTHREAD_H static void ppd_globals_init(void); #endif /* HAVE_PTHREAD_H */ static int ppd_hash_option(ppd_option_t *option); static int ppd_read(cups_file_t *fp, _ppd_line_t *line, char *keyword, char *option, char *text, char **string, int ignoreblank, _ppd_globals_t *pg); static int ppd_update_filters(ppd_file_t *ppd, _ppd_globals_t *pg); /* * 'ppdClose()' - Free all memory used by the PPD file. */ void ppdClose(ppd_file_t *ppd) /* I - PPD file record */ { int i; /* Looping var */ ppd_emul_t *emul; /* Current emulation */ ppd_group_t *group; /* Current group */ char **font; /* Current font */ ppd_attr_t **attr; /* Current attribute */ ppd_coption_t *coption; /* Current custom option */ ppd_cparam_t *cparam; /* Current custom parameter */ /* * Range check arguments... */ if (!ppd) return; /* * Free all strings at the top level... */ _cupsStrFree(ppd->lang_encoding); _cupsStrFree(ppd->nickname); if (ppd->patches) free(ppd->patches); _cupsStrFree(ppd->jcl_begin); _cupsStrFree(ppd->jcl_end); _cupsStrFree(ppd->jcl_ps); /* * Free any emulations... */ if (ppd->num_emulations > 0) { for (i = ppd->num_emulations, emul = ppd->emulations; i > 0; i --, emul ++) { _cupsStrFree(emul->start); _cupsStrFree(emul->stop); } ppd_free(ppd->emulations); } /* * Free any UI groups, subgroups, and options... */ if (ppd->num_groups > 0) { for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++) ppd_free_group(group); ppd_free(ppd->groups); } cupsArrayDelete(ppd->options); cupsArrayDelete(ppd->marked); /* * Free any page sizes... */ if (ppd->num_sizes > 0) ppd_free(ppd->sizes); /* * Free any constraints... */ if (ppd->num_consts > 0) ppd_free(ppd->consts); /* * Free any filters... */ ppd_free_filters(ppd); /* * Free any fonts... */ if (ppd->num_fonts > 0) { for (i = ppd->num_fonts, font = ppd->fonts; i > 0; i --, font ++) _cupsStrFree(*font); ppd_free(ppd->fonts); } /* * Free any profiles... */ if (ppd->num_profiles > 0) ppd_free(ppd->profiles); /* * Free any attributes... */ if (ppd->num_attrs > 0) { for (i = ppd->num_attrs, attr = ppd->attrs; i > 0; i --, attr ++) { _cupsStrFree((*attr)->value); ppd_free(*attr); } ppd_free(ppd->attrs); } cupsArrayDelete(ppd->sorted_attrs); /* * Free custom options... */ for (coption = (ppd_coption_t *)cupsArrayFirst(ppd->coptions); coption; coption = (ppd_coption_t *)cupsArrayNext(ppd->coptions)) { for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params); cparam; cparam = (ppd_cparam_t *)cupsArrayNext(coption->params)) { switch (cparam->type) { case PPD_CUSTOM_PASSCODE : case PPD_CUSTOM_PASSWORD : case PPD_CUSTOM_STRING : _cupsStrFree(cparam->current.custom_string); break; default : break; } free(cparam); } cupsArrayDelete(coption->params); free(coption); } cupsArrayDelete(ppd->coptions); /* * Free constraints... */ if (ppd->cups_uiconstraints) { _ppd_cups_uiconsts_t *consts; /* Current constraints */ for (consts = (_ppd_cups_uiconsts_t *)cupsArrayFirst(ppd->cups_uiconstraints); consts; consts = (_ppd_cups_uiconsts_t *)cupsArrayNext(ppd->cups_uiconstraints)) { free(consts->constraints); free(consts); } cupsArrayDelete(ppd->cups_uiconstraints); } /* * Free any PPD cache/mapping data... */ if (ppd->cache) _ppdCacheDestroy(ppd->cache); /* * Free the whole record... */ ppd_free(ppd); } /* * 'ppdErrorString()' - Returns the text associated with a status. * * @since CUPS 1.1.19/macOS 10.3@ */ const char * /* O - Status string */ ppdErrorString(ppd_status_t status) /* I - PPD status */ { static const char * const messages[] =/* Status messages */ { _("OK"), _("Unable to open PPD file"), _("NULL PPD file pointer"), _("Memory allocation error"), _("Missing PPD-Adobe-4.x header"), _("Missing value string"), _("Internal error"), _("Bad OpenGroup"), _("OpenGroup without a CloseGroup first"), _("Bad OpenUI/JCLOpenUI"), _("OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"), _("Bad OrderDependency"), _("Bad UIConstraints"), _("Missing asterisk in column 1"), _("Line longer than the maximum allowed (255 characters)"), _("Illegal control character"), _("Illegal main keyword string"), _("Illegal option keyword string"), _("Illegal translation string"), _("Illegal whitespace character"), _("Bad custom parameter"), _("Missing option keyword"), _("Bad value string"), _("Missing CloseGroup") }; if (status < PPD_OK || status >= PPD_MAX_STATUS) return (_cupsLangString(cupsLangDefault(), _("Unknown"))); else return (_cupsLangString(cupsLangDefault(), messages[status])); } /* * '_ppdGetEncoding()' - Get the CUPS encoding value for the given * LanguageEncoding. */ cups_encoding_t /* O - CUPS encoding value */ _ppdGetEncoding(const char *name) /* I - LanguageEncoding string */ { if (!_cups_strcasecmp(name, "ISOLatin1")) return (CUPS_ISO8859_1); else if (!_cups_strcasecmp(name, "ISOLatin2")) return (CUPS_ISO8859_2); else if (!_cups_strcasecmp(name, "ISOLatin5")) return (CUPS_ISO8859_5); else if (!_cups_strcasecmp(name, "JIS83-RKSJ")) return (CUPS_JIS_X0213); else if (!_cups_strcasecmp(name, "MacStandard")) return (CUPS_MAC_ROMAN); else if (!_cups_strcasecmp(name, "WindowsANSI")) return (CUPS_WINDOWS_1252); else return (CUPS_UTF8); } /* * '_ppdGlobals()' - Return a pointer to thread local storage */ _ppd_globals_t * /* O - Pointer to global data */ _ppdGlobals(void) { _ppd_globals_t *pg; /* Pointer to global data */ #ifdef HAVE_PTHREAD_H /* * Initialize the global data exactly once... */ pthread_once(&ppd_globals_key_once, ppd_globals_init); #endif /* HAVE_PTHREAD_H */ /* * See if we have allocated the data yet... */ if ((pg = (_ppd_globals_t *)_cupsThreadGetData(ppd_globals_key)) == NULL) { /* * No, allocate memory as set the pointer for the key... */ if ((pg = ppd_globals_alloc()) != NULL) _cupsThreadSetData(ppd_globals_key, pg); } /* * Return the pointer to the data... */ return (pg); } /* * 'ppdLastError()' - Return the status from the last ppdOpen*(). * * @since CUPS 1.1.19/macOS 10.3@ */ ppd_status_t /* O - Status code */ ppdLastError(int *line) /* O - Line number */ { _ppd_globals_t *pg = _ppdGlobals(); /* Global data */ if (line) *line = pg->ppd_line; return (pg->ppd_status); } /* * '_ppdOpen()' - Read a PPD file into memory. * * @since CUPS 1.2/macOS 10.5@ */ ppd_file_t * /* O - PPD file record or @code NULL@ if the PPD file could not be opened. */ _ppdOpen( cups_file_t *fp, /* I - File to read from */ _ppd_localization_t localization) /* I - Localization to load */ { int i, j, k; /* Looping vars */ int count; /* Temporary count */ _ppd_line_t line; /* Line buffer */ ppd_file_t *ppd; /* PPD file record */ ppd_group_t *group, /* Current group */ *subgroup; /* Current sub-group */ ppd_option_t *option; /* Current option */ ppd_choice_t *choice; /* Current choice */ ppd_const_t *constraint; /* Current constraint */ ppd_size_t *size; /* Current page size */ int mask; /* Line data mask */ char keyword[PPD_MAX_NAME], /* Keyword from file */ name[PPD_MAX_NAME], /* Option from file */ text[PPD_MAX_LINE], /* Human-readable text from file */ *string, /* Code/text from file */ *sptr, /* Pointer into string */ *nameptr, /* Pointer into name */ *temp, /* Temporary string pointer */ **tempfonts; /* Temporary fonts pointer */ float order; /* Order dependency number */ ppd_section_t section; /* Order dependency section */ ppd_profile_t *profile; /* Pointer to color profile */ char **filter; /* Pointer to filter */ struct lconv *loc; /* Locale data */ int ui_keyword; /* Is this line a UI keyword? */ cups_lang_t *lang; /* Language data */ cups_encoding_t encoding; /* Encoding of PPD file */ _ppd_globals_t *pg = _ppdGlobals(); /* Global data */ char custom_name[PPD_MAX_NAME]; /* CustomFoo attribute name */ ppd_attr_t *custom_attr; /* CustomFoo attribute */ char ll[7], /* Base language + '.' */ ll_CC[7]; /* Language w/country + '.' */ size_t ll_len = 0, /* Base language length */ ll_CC_len = 0; /* Language w/country length */ static const char * const ui_keywords[] = { #ifdef CUPS_USE_FULL_UI_KEYWORDS_LIST /* * Adobe defines some 41 keywords as "UI", meaning that they are * user interface elements and that they should be treated as such * even if the PPD creator doesn't use Open/CloseUI around them. * * Since this can cause previously invisible options to appear and * confuse users, the default is to only treat the PageSize and * PageRegion keywords this way. */ /* Boolean keywords */ "BlackSubstitution", "Booklet", "Collate", "ManualFeed", "MirrorPrint", "NegativePrint", "Sorter", "TraySwitch", /* PickOne keywords */ "AdvanceMedia", "BindColor", "BindEdge", "BindType", "BindWhen", "BitsPerPixel", "ColorModel", "CutMedia", "Duplex", "FoldType", "FoldWhen", "InputSlot", "JCLFrameBufferSize", "JCLResolution", "Jog", "MediaColor", "MediaType", "MediaWeight", "OutputBin", "OutputMode", "OutputOrder", "PageRegion", "PageSize", "Resolution", "Separations", "Signature", "Slipsheet", "Smoothing", "StapleLocation", "StapleOrientation", "StapleWhen", "StapleX", "StapleY" #else /* !CUPS_USE_FULL_UI_KEYWORDS_LIST */ "PageRegion", "PageSize" #endif /* CUPS_USE_FULL_UI_KEYWORDS_LIST */ }; static const char * const color_keywords[] = /* Keywords associated with color profiles */ { ".cupsICCProfile", ".ColorModel", }; DEBUG_printf(("_ppdOpen(fp=%p)", fp)); /* * Default to "OK" status... */ pg->ppd_status = PPD_OK; pg->ppd_line = 0; /* * Range check input... */ if (fp == NULL) { pg->ppd_status = PPD_NULL_FILE; return (NULL); } /* * If only loading a single localization set up the strings to match... */ if (localization == _PPD_LOCALIZATION_DEFAULT) { if ((lang = cupsLangDefault()) == NULL) return (NULL); snprintf(ll_CC, sizeof(ll_CC), "%s.", lang->language); /* * * * * Need to use a different base language for some locales... */ if (!strcmp(lang->language, "zh_HK")) { /* Traditional Chinese + variants */ strlcpy(ll_CC, "zh_TW.", sizeof(ll_CC)); strlcpy(ll, "zh_", sizeof(ll)); } else if (!strncmp(lang->language, "zh", 2)) strlcpy(ll, "zh_", sizeof(ll)); /* Any Chinese variant */ else if (!strncmp(lang->language, "jp", 2)) { /* Any Japanese variant */ strlcpy(ll_CC, "ja", sizeof(ll_CC)); strlcpy(ll, "jp", sizeof(ll)); } else if (!strncmp(lang->language, "nb", 2) || !strncmp(lang->language, "no", 2)) { /* Any Norwegian variant */ strlcpy(ll_CC, "nb", sizeof(ll_CC)); strlcpy(ll, "no", sizeof(ll)); } else snprintf(ll, sizeof(ll), "%2.2s.", lang->language); ll_CC_len = strlen(ll_CC); ll_len = strlen(ll); DEBUG_printf(("2_ppdOpen: Loading localizations matching \"%s\" and \"%s\"", ll_CC, ll)); } /* * Grab the first line and make sure it reads '*PPD-Adobe: "major.minor"'... */ line.buffer = NULL; line.bufsize = 0; mask = ppd_read(fp, &line, keyword, name, text, &string, 0, pg); DEBUG_printf(("2_ppdOpen: mask=%x, keyword=\"%s\"...", mask, keyword)); if (mask == 0 || strcmp(keyword, "PPD-Adobe") || string == NULL || string[0] != '4') { /* * Either this is not a PPD file, or it is not a 4.x PPD file. */ if (pg->ppd_status == PPD_OK) pg->ppd_status = PPD_MISSING_PPDADOBE4; _cupsStrFree(string); ppd_free(line.buffer); return (NULL); } DEBUG_printf(("2_ppdOpen: keyword=%s, string=%p", keyword, string)); _cupsStrFree(string); /* * Allocate memory for the PPD file record... */ if ((ppd = calloc(1, sizeof(ppd_file_t))) == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; _cupsStrFree(string); ppd_free(line.buffer); return (NULL); } ppd->language_level = 2; ppd->color_device = 0; ppd->colorspace = PPD_CS_N; ppd->landscape = -90; ppd->coptions = cupsArrayNew((cups_array_func_t)ppd_compare_coptions, NULL); /* * Read lines from the PPD file and add them to the file record... */ group = NULL; subgroup = NULL; option = NULL; choice = NULL; ui_keyword = 0; encoding = CUPS_ISO8859_1; loc = localeconv(); while ((mask = ppd_read(fp, &line, keyword, name, text, &string, 1, pg)) != 0) { DEBUG_printf(("2_ppdOpen: mask=%x, keyword=\"%s\", name=\"%s\", " "text=\"%s\", string=%d chars...", mask, keyword, name, text, string ? (int)strlen(string) : 0)); if (strncmp(keyword, "Default", 7) && !string && pg->ppd_conform != PPD_CONFORM_RELAXED) { /* * Need a string value! */ pg->ppd_status = PPD_MISSING_VALUE; goto error; } else if (!string) continue; /* * Certain main keywords (as defined by the PPD spec) may be used * without the usual OpenUI/CloseUI stuff. Presumably this is just * so that Adobe wouldn't completely break compatibility with PPD * files prior to v4.0 of the spec, but it is hopelessly * inconsistent... Catch these main keywords and automatically * create the corresponding option, as needed... */ if (ui_keyword) { /* * Previous line was a UI keyword... */ option = NULL; ui_keyword = 0; } /* * If we are filtering out keyword localizations, see if this line needs to * be used... */ if (localization != _PPD_LOCALIZATION_ALL && (temp = strchr(keyword, '.')) != NULL && ((temp - keyword) == 2 || (temp - keyword) == 5) && _cups_isalpha(keyword[0]) && _cups_isalpha(keyword[1]) && (keyword[2] == '.' || (keyword[2] == '_' && _cups_isalpha(keyword[3]) && _cups_isalpha(keyword[4]) && keyword[5] == '.'))) { if (localization == _PPD_LOCALIZATION_NONE || (localization == _PPD_LOCALIZATION_DEFAULT && strncmp(ll_CC, keyword, ll_CC_len) && strncmp(ll, keyword, ll_len))) { DEBUG_printf(("2_ppdOpen: Ignoring localization: \"%s\"\n", keyword)); continue; } else if (localization == _PPD_LOCALIZATION_ICC_PROFILES) { /* * Only load localizations for the color profile related keywords... */ for (i = 0; i < (int)(sizeof(color_keywords) / sizeof(color_keywords[0])); i ++) { if (!_cups_strcasecmp(temp, color_keywords[i])) break; } if (i >= (int)(sizeof(color_keywords) / sizeof(color_keywords[0]))) { DEBUG_printf(("2_ppdOpen: Ignoring localization: \"%s\"\n", keyword)); continue; } } } if (option == NULL && (mask & (PPD_KEYWORD | PPD_OPTION | PPD_STRING)) == (PPD_KEYWORD | PPD_OPTION | PPD_STRING)) { for (i = 0; i < (int)(sizeof(ui_keywords) / sizeof(ui_keywords[0])); i ++) if (!strcmp(keyword, ui_keywords[i])) break; if (i < (int)(sizeof(ui_keywords) / sizeof(ui_keywords[0]))) { /* * Create the option in the appropriate group... */ ui_keyword = 1; DEBUG_printf(("2_ppdOpen: FOUND ADOBE UI KEYWORD %s WITHOUT OPENUI!", keyword)); if (!group) { if ((group = ppd_get_group(ppd, "General", _("General"), pg, encoding)) == NULL) goto error; DEBUG_printf(("2_ppdOpen: Adding to group %s...", group->text)); option = ppd_get_option(group, keyword); group = NULL; } else option = ppd_get_option(group, keyword); if (option == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } /* * Now fill in the initial information for the option... */ if (!strncmp(keyword, "JCL", 3)) option->section = PPD_ORDER_JCL; else option->section = PPD_ORDER_ANY; option->order = 10.0f; if (i < 8) option->ui = PPD_UI_BOOLEAN; else option->ui = PPD_UI_PICKONE; for (j = 0; j < ppd->num_attrs; j ++) if (!strncmp(ppd->attrs[j]->name, "Default", 7) && !strcmp(ppd->attrs[j]->name + 7, keyword) && ppd->attrs[j]->value) { DEBUG_printf(("2_ppdOpen: Setting Default%s to %s via attribute...", option->keyword, ppd->attrs[j]->value)); strlcpy(option->defchoice, ppd->attrs[j]->value, sizeof(option->defchoice)); break; } if (!strcmp(keyword, "PageSize")) strlcpy(option->text, _("Media Size"), sizeof(option->text)); else if (!strcmp(keyword, "MediaType")) strlcpy(option->text, _("Media Type"), sizeof(option->text)); else if (!strcmp(keyword, "InputSlot")) strlcpy(option->text, _("Media Source"), sizeof(option->text)); else if (!strcmp(keyword, "ColorModel")) strlcpy(option->text, _("Output Mode"), sizeof(option->text)); else if (!strcmp(keyword, "Resolution")) strlcpy(option->text, _("Resolution"), sizeof(option->text)); else strlcpy(option->text, keyword, sizeof(option->text)); } } if (!strcmp(keyword, "LanguageLevel")) ppd->language_level = atoi(string); else if (!strcmp(keyword, "LanguageEncoding")) { /* * Say all PPD files are UTF-8, since we convert to UTF-8... */ ppd->lang_encoding = _cupsStrAlloc("UTF-8"); encoding = _ppdGetEncoding(string); } else if (!strcmp(keyword, "LanguageVersion")) ppd->lang_version = string; else if (!strcmp(keyword, "Manufacturer")) ppd->manufacturer = string; else if (!strcmp(keyword, "ModelName")) ppd->modelname = string; else if (!strcmp(keyword, "Protocols")) ppd->protocols = string; else if (!strcmp(keyword, "PCFileName")) ppd->pcfilename = string; else if (!strcmp(keyword, "NickName")) { if (encoding != CUPS_UTF8) { cups_utf8_t utf8[256]; /* UTF-8 version of NickName */ cupsCharsetToUTF8(utf8, string, sizeof(utf8), encoding); ppd->nickname = _cupsStrAlloc((char *)utf8); } else ppd->nickname = _cupsStrAlloc(string); } else if (!strcmp(keyword, "Product")) ppd->product = string; else if (!strcmp(keyword, "ShortNickName")) ppd->shortnickname = string; else if (!strcmp(keyword, "TTRasterizer")) ppd->ttrasterizer = string; else if (!strcmp(keyword, "JCLBegin")) { ppd->jcl_begin = _cupsStrAlloc(string); ppd_decode(ppd->jcl_begin); /* Decode quoted string */ } else if (!strcmp(keyword, "JCLEnd")) { ppd->jcl_end = _cupsStrAlloc(string); ppd_decode(ppd->jcl_end); /* Decode quoted string */ } else if (!strcmp(keyword, "JCLToPSInterpreter")) { ppd->jcl_ps = _cupsStrAlloc(string); ppd_decode(ppd->jcl_ps); /* Decode quoted string */ } else if (!strcmp(keyword, "AccurateScreensSupport")) ppd->accurate_screens = !strcmp(string, "True"); else if (!strcmp(keyword, "ColorDevice")) ppd->color_device = !strcmp(string, "True"); else if (!strcmp(keyword, "ContoneOnly")) ppd->contone_only = !strcmp(string, "True"); else if (!strcmp(keyword, "cupsFlipDuplex")) ppd->flip_duplex = !strcmp(string, "True"); else if (!strcmp(keyword, "cupsManualCopies")) ppd->manual_copies = !strcmp(string, "True"); else if (!strcmp(keyword, "cupsModelNumber")) ppd->model_number = atoi(string); else if (!strcmp(keyword, "cupsColorProfile")) { if (ppd->num_profiles == 0) profile = malloc(sizeof(ppd_profile_t)); else profile = realloc(ppd->profiles, sizeof(ppd_profile_t) * (size_t)(ppd->num_profiles + 1)); if (!profile) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } ppd->profiles = profile; profile += ppd->num_profiles; ppd->num_profiles ++; memset(profile, 0, sizeof(ppd_profile_t)); strlcpy(profile->resolution, name, sizeof(profile->resolution)); strlcpy(profile->media_type, text, sizeof(profile->media_type)); profile->density = (float)_cupsStrScand(string, &sptr, loc); profile->gamma = (float)_cupsStrScand(sptr, &sptr, loc); profile->matrix[0][0] = (float)_cupsStrScand(sptr, &sptr, loc); profile->matrix[0][1] = (float)_cupsStrScand(sptr, &sptr, loc); profile->matrix[0][2] = (float)_cupsStrScand(sptr, &sptr, loc); profile->matrix[1][0] = (float)_cupsStrScand(sptr, &sptr, loc); profile->matrix[1][1] = (float)_cupsStrScand(sptr, &sptr, loc); profile->matrix[1][2] = (float)_cupsStrScand(sptr, &sptr, loc); profile->matrix[2][0] = (float)_cupsStrScand(sptr, &sptr, loc); profile->matrix[2][1] = (float)_cupsStrScand(sptr, &sptr, loc); profile->matrix[2][2] = (float)_cupsStrScand(sptr, &sptr, loc); } else if (!strcmp(keyword, "cupsFilter")) { if (ppd->num_filters == 0) filter = malloc(sizeof(char *)); else filter = realloc(ppd->filters, sizeof(char *) * (size_t)(ppd->num_filters + 1)); if (filter == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } ppd->filters = filter; filter += ppd->num_filters; ppd->num_filters ++; /* * Retain a copy of the filter string... */ *filter = _cupsStrRetain(string); } else if (!strcmp(keyword, "Throughput")) ppd->throughput = atoi(string); else if (!strcmp(keyword, "Font")) { /* * Add this font to the list of available fonts... */ if (ppd->num_fonts == 0) tempfonts = (char **)malloc(sizeof(char *)); else tempfonts = (char **)realloc(ppd->fonts, sizeof(char *) * (size_t)(ppd->num_fonts + 1)); if (tempfonts == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } ppd->fonts = tempfonts; ppd->fonts[ppd->num_fonts] = _cupsStrAlloc(name); ppd->num_fonts ++; } else if (!strncmp(keyword, "ParamCustom", 11)) { ppd_coption_t *coption; /* Custom option */ ppd_cparam_t *cparam; /* Custom parameter */ int corder; /* Order number */ char ctype[33], /* Data type */ cminimum[65], /* Minimum value */ cmaximum[65]; /* Maximum value */ /* * Get the custom option and parameter... */ if ((coption = ppd_get_coption(ppd, keyword + 11)) == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } if ((cparam = ppd_get_cparam(coption, name, text)) == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } /* * Get the parameter data... */ if (!string || sscanf(string, "%d%32s%64s%64s", &corder, ctype, cminimum, cmaximum) != 4) { pg->ppd_status = PPD_BAD_CUSTOM_PARAM; goto error; } cparam->order = corder; if (!strcmp(ctype, "curve")) { cparam->type = PPD_CUSTOM_CURVE; cparam->minimum.custom_curve = (float)_cupsStrScand(cminimum, NULL, loc); cparam->maximum.custom_curve = (float)_cupsStrScand(cmaximum, NULL, loc); } else if (!strcmp(ctype, "int")) { cparam->type = PPD_CUSTOM_INT; cparam->minimum.custom_int = atoi(cminimum); cparam->maximum.custom_int = atoi(cmaximum); } else if (!strcmp(ctype, "invcurve")) { cparam->type = PPD_CUSTOM_INVCURVE; cparam->minimum.custom_invcurve = (float)_cupsStrScand(cminimum, NULL, loc); cparam->maximum.custom_invcurve = (float)_cupsStrScand(cmaximum, NULL, loc); } else if (!strcmp(ctype, "passcode")) { cparam->type = PPD_CUSTOM_PASSCODE; cparam->minimum.custom_passcode = atoi(cminimum); cparam->maximum.custom_passcode = atoi(cmaximum); } else if (!strcmp(ctype, "password")) { cparam->type = PPD_CUSTOM_PASSWORD; cparam->minimum.custom_password = atoi(cminimum); cparam->maximum.custom_password = atoi(cmaximum); } else if (!strcmp(ctype, "points")) { cparam->type = PPD_CUSTOM_POINTS; cparam->minimum.custom_points = (float)_cupsStrScand(cminimum, NULL, loc); cparam->maximum.custom_points = (float)_cupsStrScand(cmaximum, NULL, loc); } else if (!strcmp(ctype, "real")) { cparam->type = PPD_CUSTOM_REAL; cparam->minimum.custom_real = (float)_cupsStrScand(cminimum, NULL, loc); cparam->maximum.custom_real = (float)_cupsStrScand(cmaximum, NULL, loc); } else if (!strcmp(ctype, "string")) { cparam->type = PPD_CUSTOM_STRING; cparam->minimum.custom_string = atoi(cminimum); cparam->maximum.custom_string = atoi(cmaximum); } else { pg->ppd_status = PPD_BAD_CUSTOM_PARAM; goto error; } /* * Now special-case for CustomPageSize... */ if (!strcmp(coption->keyword, "PageSize")) { if (!strcmp(name, "Width")) { ppd->custom_min[0] = cparam->minimum.custom_points; ppd->custom_max[0] = cparam->maximum.custom_points; } else if (!strcmp(name, "Height")) { ppd->custom_min[1] = cparam->minimum.custom_points; ppd->custom_max[1] = cparam->maximum.custom_points; } } } else if (!strcmp(keyword, "HWMargins")) { for (i = 0, sptr = string; i < 4; i ++) ppd->custom_margins[i] = (float)_cupsStrScand(sptr, &sptr, loc); } else if (!strncmp(keyword, "Custom", 6) && !strcmp(name, "True") && !option) { ppd_option_t *custom_option; /* Custom option */ DEBUG_puts("2_ppdOpen: Processing Custom option..."); /* * Get the option and custom option... */ if (!ppd_get_coption(ppd, keyword + 6)) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } if (option && !_cups_strcasecmp(option->keyword, keyword + 6)) custom_option = option; else custom_option = ppdFindOption(ppd, keyword + 6); if (custom_option) { /* * Add the "custom" option... */ if ((choice = ppdFindChoice(custom_option, "Custom")) == NULL) if ((choice = ppd_add_choice(custom_option, "Custom")) == NULL) { DEBUG_puts("1_ppdOpen: Unable to add Custom choice!"); pg->ppd_status = PPD_ALLOC_ERROR; goto error; } strlcpy(choice->text, text[0] ? text : _("Custom"), sizeof(choice->text)); choice->code = _cupsStrAlloc(string); if (custom_option->section == PPD_ORDER_JCL) ppd_decode(choice->code); } /* * Now process custom page sizes specially... */ if (!strcmp(keyword, "CustomPageSize")) { /* * Add a "Custom" page size entry... */ ppd->variable_sizes = 1; ppd_add_size(ppd, "Custom"); if (option && !_cups_strcasecmp(option->keyword, "PageRegion")) custom_option = option; else custom_option = ppdFindOption(ppd, "PageRegion"); if (custom_option) { if ((choice = ppdFindChoice(custom_option, "Custom")) == NULL) if ((choice = ppd_add_choice(custom_option, "Custom")) == NULL) { DEBUG_puts("1_ppdOpen: Unable to add Custom choice!"); pg->ppd_status = PPD_ALLOC_ERROR; goto error; } strlcpy(choice->text, text[0] ? text : _("Custom"), sizeof(choice->text)); } } } else if (!strcmp(keyword, "LandscapeOrientation")) { if (!strcmp(string, "Minus90")) ppd->landscape = -90; else if (!strcmp(string, "Plus90")) ppd->landscape = 90; } else if (!strcmp(keyword, "Emulators") && string) { for (count = 1, sptr = string; sptr != NULL;) if ((sptr = strchr(sptr, ' ')) != NULL) { count ++; while (*sptr == ' ') sptr ++; } ppd->num_emulations = count; if ((ppd->emulations = calloc((size_t)count, sizeof(ppd_emul_t))) == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } for (i = 0, sptr = string; i < count; i ++) { for (nameptr = ppd->emulations[i].name; *sptr != '\0' && *sptr != ' '; sptr ++) if (nameptr < (ppd->emulations[i].name + sizeof(ppd->emulations[i].name) - 1)) *nameptr++ = *sptr; *nameptr = '\0'; while (*sptr == ' ') sptr ++; } } else if (!strncmp(keyword, "StartEmulator_", 14)) { ppd_decode(string); for (i = 0; i < ppd->num_emulations; i ++) if (!strcmp(keyword + 14, ppd->emulations[i].name)) { ppd->emulations[i].start = string; string = NULL; } } else if (!strncmp(keyword, "StopEmulator_", 13)) { ppd_decode(string); for (i = 0; i < ppd->num_emulations; i ++) if (!strcmp(keyword + 13, ppd->emulations[i].name)) { ppd->emulations[i].stop = string; string = NULL; } } else if (!strcmp(keyword, "JobPatchFile")) { /* * CUPS STR #3421: Check for "*JobPatchFile: int: string" */ if (isdigit(*string & 255)) { for (sptr = string + 1; isdigit(*sptr & 255); sptr ++); if (*sptr == ':') { /* * Found "*JobPatchFile: int: string"... */ pg->ppd_status = PPD_BAD_VALUE; goto error; } } if (!name[0] && pg->ppd_conform == PPD_CONFORM_STRICT) { /* * Found "*JobPatchFile: string"... */ pg->ppd_status = PPD_MISSING_OPTION_KEYWORD; goto error; } if (ppd->patches == NULL) ppd->patches = strdup(string); else { temp = realloc(ppd->patches, strlen(ppd->patches) + strlen(string) + 1); if (temp == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } ppd->patches = temp; memcpy(ppd->patches + strlen(ppd->patches), string, strlen(string) + 1); } } else if (!strcmp(keyword, "OpenUI")) { /* * Don't allow nesting of options... */ if (option && pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_NESTED_OPEN_UI; goto error; } /* * Add an option record to the current sub-group, group, or file... */ DEBUG_printf(("2_ppdOpen: name=\"%s\" (%d)", name, (int)strlen(name))); if (name[0] == '*') _cups_strcpy(name, name + 1); /* Eliminate leading asterisk */ for (i = (int)strlen(name) - 1; i > 0 && _cups_isspace(name[i]); i --) name[i] = '\0'; /* Eliminate trailing spaces */ DEBUG_printf(("2_ppdOpen: OpenUI of %s in group %s...", name, group ? group->text : "(null)")); if (subgroup != NULL) option = ppd_get_option(subgroup, name); else if (group == NULL) { if ((group = ppd_get_group(ppd, "General", _("General"), pg, encoding)) == NULL) goto error; DEBUG_printf(("2_ppdOpen: Adding to group %s...", group->text)); option = ppd_get_option(group, name); group = NULL; } else option = ppd_get_option(group, name); if (option == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } /* * Now fill in the initial information for the option... */ if (string && !strcmp(string, "PickMany")) option->ui = PPD_UI_PICKMANY; else if (string && !strcmp(string, "Boolean")) option->ui = PPD_UI_BOOLEAN; else if (string && !strcmp(string, "PickOne")) option->ui = PPD_UI_PICKONE; else if (pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_BAD_OPEN_UI; goto error; } else option->ui = PPD_UI_PICKONE; for (j = 0; j < ppd->num_attrs; j ++) if (!strncmp(ppd->attrs[j]->name, "Default", 7) && !strcmp(ppd->attrs[j]->name + 7, name) && ppd->attrs[j]->value) { DEBUG_printf(("2_ppdOpen: Setting Default%s to %s via attribute...", option->keyword, ppd->attrs[j]->value)); strlcpy(option->defchoice, ppd->attrs[j]->value, sizeof(option->defchoice)); break; } if (text[0]) cupsCharsetToUTF8((cups_utf8_t *)option->text, text, sizeof(option->text), encoding); else { if (!strcmp(name, "PageSize")) strlcpy(option->text, _("Media Size"), sizeof(option->text)); else if (!strcmp(name, "MediaType")) strlcpy(option->text, _("Media Type"), sizeof(option->text)); else if (!strcmp(name, "InputSlot")) strlcpy(option->text, _("Media Source"), sizeof(option->text)); else if (!strcmp(name, "ColorModel")) strlcpy(option->text, _("Output Mode"), sizeof(option->text)); else if (!strcmp(name, "Resolution")) strlcpy(option->text, _("Resolution"), sizeof(option->text)); else strlcpy(option->text, name, sizeof(option->text)); } option->section = PPD_ORDER_ANY; _cupsStrFree(string); string = NULL; /* * Add a custom option choice if we have already seen a CustomFoo * attribute... */ if (!_cups_strcasecmp(name, "PageRegion")) strlcpy(custom_name, "CustomPageSize", sizeof(custom_name)); else snprintf(custom_name, sizeof(custom_name), "Custom%s", name); if ((custom_attr = ppdFindAttr(ppd, custom_name, "True")) != NULL) { if ((choice = ppdFindChoice(option, "Custom")) == NULL) if ((choice = ppd_add_choice(option, "Custom")) == NULL) { DEBUG_puts("1_ppdOpen: Unable to add Custom choice!"); pg->ppd_status = PPD_ALLOC_ERROR; goto error; } strlcpy(choice->text, custom_attr->text[0] ? custom_attr->text : _("Custom"), sizeof(choice->text)); choice->code = _cupsStrRetain(custom_attr->value); } } else if (!strcmp(keyword, "JCLOpenUI")) { /* * Don't allow nesting of options... */ if (option && pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_NESTED_OPEN_UI; goto error; } /* * Find the JCL group, and add if needed... */ group = ppd_get_group(ppd, "JCL", _("JCL"), pg, encoding); if (group == NULL) goto error; /* * Add an option record to the current JCLs... */ if (name[0] == '*') _cups_strcpy(name, name + 1); option = ppd_get_option(group, name); if (option == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } /* * Now fill in the initial information for the option... */ if (string && !strcmp(string, "PickMany")) option->ui = PPD_UI_PICKMANY; else if (string && !strcmp(string, "Boolean")) option->ui = PPD_UI_BOOLEAN; else if (string && !strcmp(string, "PickOne")) option->ui = PPD_UI_PICKONE; else { pg->ppd_status = PPD_BAD_OPEN_UI; goto error; } for (j = 0; j < ppd->num_attrs; j ++) if (!strncmp(ppd->attrs[j]->name, "Default", 7) && !strcmp(ppd->attrs[j]->name + 7, name) && ppd->attrs[j]->value) { DEBUG_printf(("2_ppdOpen: Setting Default%s to %s via attribute...", option->keyword, ppd->attrs[j]->value)); strlcpy(option->defchoice, ppd->attrs[j]->value, sizeof(option->defchoice)); break; } if (text[0]) cupsCharsetToUTF8((cups_utf8_t *)option->text, text, sizeof(option->text), encoding); else strlcpy(option->text, name, sizeof(option->text)); option->section = PPD_ORDER_JCL; group = NULL; _cupsStrFree(string); string = NULL; /* * Add a custom option choice if we have already seen a CustomFoo * attribute... */ snprintf(custom_name, sizeof(custom_name), "Custom%s", name); if ((custom_attr = ppdFindAttr(ppd, custom_name, "True")) != NULL) { if ((choice = ppd_add_choice(option, "Custom")) == NULL) { DEBUG_puts("1_ppdOpen: Unable to add Custom choice!"); pg->ppd_status = PPD_ALLOC_ERROR; goto error; } strlcpy(choice->text, custom_attr->text[0] ? custom_attr->text : _("Custom"), sizeof(choice->text)); choice->code = _cupsStrRetain(custom_attr->value); } } else if (!strcmp(keyword, "CloseUI") || !strcmp(keyword, "JCLCloseUI")) { option = NULL; _cupsStrFree(string); string = NULL; } else if (!strcmp(keyword, "OpenGroup")) { /* * Open a new group... */ if (group != NULL) { pg->ppd_status = PPD_NESTED_OPEN_GROUP; goto error; } if (!string) { pg->ppd_status = PPD_BAD_OPEN_GROUP; goto error; } /* * Separate the group name from the text (name/text)... */ if ((sptr = strchr(string, '/')) != NULL) *sptr++ = '\0'; else sptr = string; /* * Fix up the text... */ ppd_decode(sptr); /* * Find/add the group... */ group = ppd_get_group(ppd, string, sptr, pg, encoding); if (group == NULL) goto error; _cupsStrFree(string); string = NULL; } else if (!strcmp(keyword, "CloseGroup")) { group = NULL; _cupsStrFree(string); string = NULL; } else if (!strcmp(keyword, "OrderDependency")) { order = (float)_cupsStrScand(string, &sptr, loc); if (!sptr || sscanf(sptr, "%40s%40s", name, keyword) != 2) { pg->ppd_status = PPD_BAD_ORDER_DEPENDENCY; goto error; } if (keyword[0] == '*') _cups_strcpy(keyword, keyword + 1); if (!strcmp(name, "ExitServer")) section = PPD_ORDER_EXIT; else if (!strcmp(name, "Prolog")) section = PPD_ORDER_PROLOG; else if (!strcmp(name, "DocumentSetup")) section = PPD_ORDER_DOCUMENT; else if (!strcmp(name, "PageSetup")) section = PPD_ORDER_PAGE; else if (!strcmp(name, "JCLSetup")) section = PPD_ORDER_JCL; else section = PPD_ORDER_ANY; if (option == NULL) { ppd_group_t *gtemp; /* * Only valid for Non-UI options... */ for (i = ppd->num_groups, gtemp = ppd->groups; i > 0; i --, gtemp ++) if (gtemp->text[0] == '\0') break; if (i > 0) for (i = 0; i < gtemp->num_options; i ++) if (!strcmp(keyword, gtemp->options[i].keyword)) { gtemp->options[i].section = section; gtemp->options[i].order = order; break; } } else { option->section = section; option->order = order; } _cupsStrFree(string); string = NULL; } else if (!strncmp(keyword, "Default", 7)) { if (string == NULL) continue; /* * Drop UI text, if any, from value... */ if (strchr(string, '/') != NULL) *strchr(string, '/') = '\0'; /* * Assign the default value as appropriate... */ if (!strcmp(keyword, "DefaultColorSpace")) { /* * Set default colorspace... */ if (!strcmp(string, "CMY")) ppd->colorspace = PPD_CS_CMY; else if (!strcmp(string, "CMYK")) ppd->colorspace = PPD_CS_CMYK; else if (!strcmp(string, "RGB")) ppd->colorspace = PPD_CS_RGB; else if (!strcmp(string, "RGBK")) ppd->colorspace = PPD_CS_RGBK; else if (!strcmp(string, "N")) ppd->colorspace = PPD_CS_N; else ppd->colorspace = PPD_CS_GRAY; } else if (option && !strcmp(keyword + 7, option->keyword)) { /* * Set the default as part of the current option... */ DEBUG_printf(("2_ppdOpen: Setting %s to %s...", keyword, string)); strlcpy(option->defchoice, string, sizeof(option->defchoice)); DEBUG_printf(("2_ppdOpen: %s is now %s...", keyword, option->defchoice)); } else { /* * Lookup option and set if it has been defined... */ ppd_option_t *toption; /* Temporary option */ if ((toption = ppdFindOption(ppd, keyword + 7)) != NULL) { DEBUG_printf(("2_ppdOpen: Setting %s to %s...", keyword, string)); strlcpy(toption->defchoice, string, sizeof(toption->defchoice)); } } } else if (!strcmp(keyword, "UIConstraints") || !strcmp(keyword, "NonUIConstraints")) { if (!string) { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } if (ppd->num_consts == 0) constraint = calloc(2, sizeof(ppd_const_t)); else constraint = realloc(ppd->consts, (size_t)(ppd->num_consts + 2) * sizeof(ppd_const_t)); if (constraint == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } ppd->consts = constraint; constraint += ppd->num_consts; ppd->num_consts ++; switch (sscanf(string, "%40s%40s%40s%40s", constraint->option1, constraint->choice1, constraint->option2, constraint->choice2)) { case 0 : /* Error */ case 1 : /* Error */ pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; case 2 : /* Two options... */ /* * Check for broken constraints like "* Option"... */ if (pg->ppd_conform == PPD_CONFORM_STRICT && (!strcmp(constraint->option1, "*") || !strcmp(constraint->choice1, "*"))) { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } /* * The following strcpy's are safe, as optionN and * choiceN are all the same size (size defined by PPD spec...) */ if (constraint->option1[0] == '*') _cups_strcpy(constraint->option1, constraint->option1 + 1); else if (pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } if (constraint->choice1[0] == '*') _cups_strcpy(constraint->option2, constraint->choice1 + 1); else if (pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } constraint->choice1[0] = '\0'; constraint->choice2[0] = '\0'; break; case 3 : /* Two options, one choice... */ /* * Check for broken constraints like "* Option"... */ if (pg->ppd_conform == PPD_CONFORM_STRICT && (!strcmp(constraint->option1, "*") || !strcmp(constraint->choice1, "*") || !strcmp(constraint->option2, "*"))) { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } /* * The following _cups_strcpy's are safe, as optionN and * choiceN are all the same size (size defined by PPD spec...) */ if (constraint->option1[0] == '*') _cups_strcpy(constraint->option1, constraint->option1 + 1); else if (pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } if (constraint->choice1[0] == '*') { if (pg->ppd_conform == PPD_CONFORM_STRICT && constraint->option2[0] == '*') { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } _cups_strcpy(constraint->choice2, constraint->option2); _cups_strcpy(constraint->option2, constraint->choice1 + 1); constraint->choice1[0] = '\0'; } else { if (constraint->option2[0] == '*') _cups_strcpy(constraint->option2, constraint->option2 + 1); else if (pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } constraint->choice2[0] = '\0'; } break; case 4 : /* Two options, two choices... */ /* * Check for broken constraints like "* Option"... */ if (pg->ppd_conform == PPD_CONFORM_STRICT && (!strcmp(constraint->option1, "*") || !strcmp(constraint->choice1, "*") || !strcmp(constraint->option2, "*") || !strcmp(constraint->choice2, "*"))) { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } if (constraint->option1[0] == '*') _cups_strcpy(constraint->option1, constraint->option1 + 1); else if (pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } if (pg->ppd_conform == PPD_CONFORM_STRICT && constraint->choice1[0] == '*') { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } if (constraint->option2[0] == '*') _cups_strcpy(constraint->option2, constraint->option2 + 1); else if (pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } if (pg->ppd_conform == PPD_CONFORM_STRICT && constraint->choice2[0] == '*') { pg->ppd_status = PPD_BAD_UI_CONSTRAINTS; goto error; } break; } /* * Don't add this one as an attribute... */ _cupsStrFree(string); string = NULL; } else if (!strcmp(keyword, "PaperDimension")) { if ((size = ppdPageSize(ppd, name)) == NULL) size = ppd_add_size(ppd, name); if (size == NULL) { /* * Unable to add or find size! */ pg->ppd_status = PPD_ALLOC_ERROR; goto error; } size->width = (float)_cupsStrScand(string, &sptr, loc); size->length = (float)_cupsStrScand(sptr, NULL, loc); _cupsStrFree(string); string = NULL; } else if (!strcmp(keyword, "ImageableArea")) { if ((size = ppdPageSize(ppd, name)) == NULL) size = ppd_add_size(ppd, name); if (size == NULL) { /* * Unable to add or find size! */ pg->ppd_status = PPD_ALLOC_ERROR; goto error; } size->left = (float)_cupsStrScand(string, &sptr, loc); size->bottom = (float)_cupsStrScand(sptr, &sptr, loc); size->right = (float)_cupsStrScand(sptr, &sptr, loc); size->top = (float)_cupsStrScand(sptr, NULL, loc); _cupsStrFree(string); string = NULL; } else if (option != NULL && (mask & (PPD_KEYWORD | PPD_OPTION | PPD_STRING)) == (PPD_KEYWORD | PPD_OPTION | PPD_STRING) && !strcmp(keyword, option->keyword)) { DEBUG_printf(("2_ppdOpen: group=%p, subgroup=%p", group, subgroup)); if (!strcmp(keyword, "PageSize")) { /* * Add a page size... */ if (ppdPageSize(ppd, name) == NULL) ppd_add_size(ppd, name); } /* * Add the option choice... */ if ((choice = ppd_add_choice(option, name)) == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; goto error; } if (text[0]) cupsCharsetToUTF8((cups_utf8_t *)choice->text, text, sizeof(choice->text), encoding); else if (!strcmp(name, "True")) strlcpy(choice->text, _("Yes"), sizeof(choice->text)); else if (!strcmp(name, "False")) strlcpy(choice->text, _("No"), sizeof(choice->text)); else strlcpy(choice->text, name, sizeof(choice->text)); if (option->section == PPD_ORDER_JCL) ppd_decode(string); /* Decode quoted string */ choice->code = string; string = NULL; /* Don't add as an attribute below */ } /* * Add remaining lines with keywords and string values as attributes... */ if (string && (mask & (PPD_KEYWORD | PPD_STRING)) == (PPD_KEYWORD | PPD_STRING)) ppd_add_attr(ppd, keyword, name, text, string); else _cupsStrFree(string); } /* * Check for a missing CloseGroup... */ if (group && pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_MISSING_CLOSE_GROUP; goto error; } ppd_free(line.buffer); /* * Reset language preferences... */ #ifdef DEBUG if (!cupsFileEOF(fp)) DEBUG_printf(("1_ppdOpen: Premature EOF at %lu...\n", (unsigned long)cupsFileTell(fp))); #endif /* DEBUG */ if (pg->ppd_status != PPD_OK) { /* * Had an error reading the PPD file, cannot continue! */ ppdClose(ppd); return (NULL); } /* * Update the filters array as needed... */ if (!ppd_update_filters(ppd, pg)) { ppdClose(ppd); return (NULL); } /* * Create the sorted options array and set the option back-pointer for * each choice and custom option... */ ppd->options = cupsArrayNew2((cups_array_func_t)ppd_compare_options, NULL, (cups_ahash_func_t)ppd_hash_option, PPD_HASHSIZE); for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++) { for (j = group->num_options, option = group->options; j > 0; j --, option ++) { ppd_coption_t *coption; /* Custom option */ cupsArrayAdd(ppd->options, option); for (k = 0; k < option->num_choices; k ++) option->choices[k].option = option; if ((coption = ppdFindCustomOption(ppd, option->keyword)) != NULL) coption->option = option; } } /* * Create an array to track the marked choices... */ ppd->marked = cupsArrayNew((cups_array_func_t)ppd_compare_choices, NULL); /* * Return the PPD file structure... */ return (ppd); /* * Common exit point for errors to save code size... */ error: _cupsStrFree(string); ppd_free(line.buffer); ppdClose(ppd); return (NULL); } /* * 'ppdOpen()' - Read a PPD file into memory. */ ppd_file_t * /* O - PPD file record */ ppdOpen(FILE *fp) /* I - File to read from */ { ppd_file_t *ppd; /* PPD file record */ cups_file_t *cf; /* CUPS file */ /* * Reopen the stdio file as a CUPS file... */ if ((cf = cupsFileOpenFd(fileno(fp), "r")) == NULL) return (NULL); /* * Load the PPD file using the newer API... */ ppd = _ppdOpen(cf, _PPD_LOCALIZATION_DEFAULT); /* * Close the CUPS file and return the PPD... */ cupsFileClose(cf); return (ppd); } /* * 'ppdOpen2()' - Read a PPD file into memory. * * @since CUPS 1.2/macOS 10.5@ */ ppd_file_t * /* O - PPD file record or @code NULL@ if the PPD file could not be opened. */ ppdOpen2(cups_file_t *fp) /* I - File to read from */ { return _ppdOpen(fp, _PPD_LOCALIZATION_DEFAULT); } /* * 'ppdOpenFd()' - Read a PPD file into memory. */ ppd_file_t * /* O - PPD file record or @code NULL@ if the PPD file could not be opened. */ ppdOpenFd(int fd) /* I - File to read from */ { cups_file_t *fp; /* CUPS file pointer */ ppd_file_t *ppd; /* PPD file record */ _ppd_globals_t *pg = _ppdGlobals(); /* Global data */ /* * Set the line number to 0... */ pg->ppd_line = 0; /* * Range check input... */ if (fd < 0) { pg->ppd_status = PPD_NULL_FILE; return (NULL); } /* * Try to open the file and parse it... */ if ((fp = cupsFileOpenFd(fd, "r")) != NULL) { ppd = ppdOpen2(fp); cupsFileClose(fp); } else { pg->ppd_status = PPD_FILE_OPEN_ERROR; ppd = NULL; } return (ppd); } /* * '_ppdOpenFile()' - Read a PPD file into memory. */ ppd_file_t * /* O - PPD file record or @code NULL@ if the PPD file could not be opened. */ _ppdOpenFile(const char *filename, /* I - File to read from */ _ppd_localization_t localization) /* I - Localization to load */ { cups_file_t *fp; /* File pointer */ ppd_file_t *ppd; /* PPD file record */ _ppd_globals_t *pg = _ppdGlobals(); /* Global data */ /* * Set the line number to 0... */ pg->ppd_line = 0; /* * Range check input... */ if (filename == NULL) { pg->ppd_status = PPD_NULL_FILE; return (NULL); } /* * Try to open the file and parse it... */ if ((fp = cupsFileOpen(filename, "r")) != NULL) { ppd = _ppdOpen(fp, localization); cupsFileClose(fp); } else { pg->ppd_status = PPD_FILE_OPEN_ERROR; ppd = NULL; } return (ppd); } /* * 'ppdOpenFile()' - Read a PPD file into memory. */ ppd_file_t * /* O - PPD file record or @code NULL@ if the PPD file could not be opened. */ ppdOpenFile(const char *filename) /* I - File to read from */ { return _ppdOpenFile(filename, _PPD_LOCALIZATION_DEFAULT); } /* * 'ppdSetConformance()' - Set the conformance level for PPD files. * * @since CUPS 1.1.20/macOS 10.4@ */ void ppdSetConformance(ppd_conform_t c) /* I - Conformance level */ { _ppd_globals_t *pg = _ppdGlobals(); /* Global data */ pg->ppd_conform = c; } /* * 'ppd_add_attr()' - Add an attribute to the PPD data. */ static ppd_attr_t * /* O - New attribute */ ppd_add_attr(ppd_file_t *ppd, /* I - PPD file data */ const char *name, /* I - Attribute name */ const char *spec, /* I - Specifier string, if any */ const char *text, /* I - Text string, if any */ const char *value) /* I - Value of attribute */ { ppd_attr_t **ptr, /* New array */ *temp; /* New attribute */ /* * Range check input... */ if (ppd == NULL || name == NULL || spec == NULL) return (NULL); /* * Create the array as needed... */ if (!ppd->sorted_attrs) ppd->sorted_attrs = cupsArrayNew((cups_array_func_t)ppd_compare_attrs, NULL); /* * Allocate memory for the new attribute... */ if (ppd->num_attrs == 0) ptr = malloc(sizeof(ppd_attr_t *)); else ptr = realloc(ppd->attrs, (size_t)(ppd->num_attrs + 1) * sizeof(ppd_attr_t *)); if (ptr == NULL) return (NULL); ppd->attrs = ptr; ptr += ppd->num_attrs; if ((temp = calloc(1, sizeof(ppd_attr_t))) == NULL) return (NULL); *ptr = temp; ppd->num_attrs ++; /* * Copy data over... */ strlcpy(temp->name, name, sizeof(temp->name)); strlcpy(temp->spec, spec, sizeof(temp->spec)); strlcpy(temp->text, text, sizeof(temp->text)); temp->value = (char *)value; /* * Add the attribute to the sorted array... */ cupsArrayAdd(ppd->sorted_attrs, temp); /* * Return the attribute... */ return (temp); } /* * 'ppd_add_choice()' - Add a choice to an option. */ static ppd_choice_t * /* O - Named choice */ ppd_add_choice(ppd_option_t *option, /* I - Option */ const char *name) /* I - Name of choice */ { ppd_choice_t *choice; /* Choice */ if (option->num_choices == 0) choice = malloc(sizeof(ppd_choice_t)); else choice = realloc(option->choices, sizeof(ppd_choice_t) * (size_t)(option->num_choices + 1)); if (choice == NULL) return (NULL); option->choices = choice; choice += option->num_choices; option->num_choices ++; memset(choice, 0, sizeof(ppd_choice_t)); strlcpy(choice->choice, name, sizeof(choice->choice)); return (choice); } /* * 'ppd_add_size()' - Add a page size. */ static ppd_size_t * /* O - Named size */ ppd_add_size(ppd_file_t *ppd, /* I - PPD file */ const char *name) /* I - Name of size */ { ppd_size_t *size; /* Size */ if (ppd->num_sizes == 0) size = malloc(sizeof(ppd_size_t)); else size = realloc(ppd->sizes, sizeof(ppd_size_t) * (size_t)(ppd->num_sizes + 1)); if (size == NULL) return (NULL); ppd->sizes = size; size += ppd->num_sizes; ppd->num_sizes ++; memset(size, 0, sizeof(ppd_size_t)); strlcpy(size->name, name, sizeof(size->name)); return (size); } /* * 'ppd_compare_attrs()' - Compare two attributes. */ static int /* O - Result of comparison */ ppd_compare_attrs(ppd_attr_t *a, /* I - First attribute */ ppd_attr_t *b) /* I - Second attribute */ { return (_cups_strcasecmp(a->name, b->name)); } /* * 'ppd_compare_choices()' - Compare two choices... */ static int /* O - Result of comparison */ ppd_compare_choices(ppd_choice_t *a, /* I - First choice */ ppd_choice_t *b) /* I - Second choice */ { return (strcmp(a->option->keyword, b->option->keyword)); } /* * 'ppd_compare_coptions()' - Compare two custom options. */ static int /* O - Result of comparison */ ppd_compare_coptions(ppd_coption_t *a, /* I - First option */ ppd_coption_t *b) /* I - Second option */ { return (_cups_strcasecmp(a->keyword, b->keyword)); } /* * 'ppd_compare_options()' - Compare two options. */ static int /* O - Result of comparison */ ppd_compare_options(ppd_option_t *a, /* I - First option */ ppd_option_t *b) /* I - Second option */ { return (_cups_strcasecmp(a->keyword, b->keyword)); } /* * 'ppd_decode()' - Decode a string value... */ static int /* O - Length of decoded string */ ppd_decode(char *string) /* I - String to decode */ { char *inptr, /* Input pointer */ *outptr; /* Output pointer */ inptr = string; outptr = string; while (*inptr != '\0') if (*inptr == '<' && isxdigit(inptr[1] & 255)) { /* * Convert hex to 8-bit values... */ inptr ++; while (isxdigit(*inptr & 255)) { if (_cups_isalpha(*inptr)) *outptr = (char)((tolower(*inptr) - 'a' + 10) << 4); else *outptr = (char)((*inptr - '0') << 4); inptr ++; if (!isxdigit(*inptr & 255)) break; if (_cups_isalpha(*inptr)) *outptr |= (char)(tolower(*inptr) - 'a' + 10); else *outptr |= (char)(*inptr - '0'); inptr ++; outptr ++; } while (*inptr != '>' && *inptr != '\0') inptr ++; while (*inptr == '>') inptr ++; } else *outptr++ = *inptr++; *outptr = '\0'; return ((int)(outptr - string)); } /* * 'ppd_free_filters()' - Free the filters array. */ static void ppd_free_filters(ppd_file_t *ppd) /* I - PPD file */ { int i; /* Looping var */ char **filter; /* Current filter */ if (ppd->num_filters > 0) { for (i = ppd->num_filters, filter = ppd->filters; i > 0; i --, filter ++) _cupsStrFree(*filter); ppd_free(ppd->filters); ppd->num_filters = 0; ppd->filters = NULL; } } /* * 'ppd_free_group()' - Free a single UI group. */ static void ppd_free_group(ppd_group_t *group) /* I - Group to free */ { int i; /* Looping var */ ppd_option_t *option; /* Current option */ ppd_group_t *subgroup; /* Current sub-group */ if (group->num_options > 0) { for (i = group->num_options, option = group->options; i > 0; i --, option ++) ppd_free_option(option); ppd_free(group->options); } if (group->num_subgroups > 0) { for (i = group->num_subgroups, subgroup = group->subgroups; i > 0; i --, subgroup ++) ppd_free_group(subgroup); ppd_free(group->subgroups); } } /* * 'ppd_free_option()' - Free a single option. */ static void ppd_free_option(ppd_option_t *option) /* I - Option to free */ { int i; /* Looping var */ ppd_choice_t *choice; /* Current choice */ if (option->num_choices > 0) { for (i = option->num_choices, choice = option->choices; i > 0; i --, choice ++) { _cupsStrFree(choice->code); } ppd_free(option->choices); } } /* * 'ppd_get_coption()' - Get a custom option record. */ static ppd_coption_t * /* O - Custom option... */ ppd_get_coption(ppd_file_t *ppd, /* I - PPD file */ const char *name) /* I - Name of option */ { ppd_coption_t *copt; /* New custom option */ /* * See if the option already exists... */ if ((copt = ppdFindCustomOption(ppd, name)) != NULL) return (copt); /* * Not found, so create the custom option record... */ if ((copt = calloc(1, sizeof(ppd_coption_t))) == NULL) return (NULL); strlcpy(copt->keyword, name, sizeof(copt->keyword)); copt->params = cupsArrayNew((cups_array_func_t)NULL, NULL); cupsArrayAdd(ppd->coptions, copt); /* * Return the new record... */ return (copt); } /* * 'ppd_get_cparam()' - Get a custom parameter record. */ static ppd_cparam_t * /* O - Extended option... */ ppd_get_cparam(ppd_coption_t *opt, /* I - PPD file */ const char *param, /* I - Name of parameter */ const char *text) /* I - Human-readable text */ { ppd_cparam_t *cparam; /* New custom parameter */ /* * See if the parameter already exists... */ if ((cparam = ppdFindCustomParam(opt, param)) != NULL) return (cparam); /* * Not found, so create the custom parameter record... */ if ((cparam = calloc(1, sizeof(ppd_cparam_t))) == NULL) return (NULL); strlcpy(cparam->name, param, sizeof(cparam->name)); strlcpy(cparam->text, text[0] ? text : param, sizeof(cparam->text)); /* * Add this record to the array... */ cupsArrayAdd(opt->params, cparam); /* * Return the new record... */ return (cparam); } /* * 'ppd_get_group()' - Find or create the named group as needed. */ static ppd_group_t * /* O - Named group */ ppd_get_group(ppd_file_t *ppd, /* I - PPD file */ const char *name, /* I - Name of group */ const char *text, /* I - Text for group */ _ppd_globals_t *pg, /* I - Global data */ cups_encoding_t encoding) /* I - Encoding of text */ { int i; /* Looping var */ ppd_group_t *group; /* Group */ DEBUG_printf(("7ppd_get_group(ppd=%p, name=\"%s\", text=\"%s\", cg=%p)", ppd, name, text, pg)); for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++) if (!strcmp(group->name, name)) break; if (i == 0) { DEBUG_printf(("8ppd_get_group: Adding group %s...", name)); if (pg->ppd_conform == PPD_CONFORM_STRICT && strlen(text) >= sizeof(group->text)) { pg->ppd_status = PPD_ILLEGAL_TRANSLATION; return (NULL); } if (ppd->num_groups == 0) group = malloc(sizeof(ppd_group_t)); else group = realloc(ppd->groups, (size_t)(ppd->num_groups + 1) * sizeof(ppd_group_t)); if (group == NULL) { pg->ppd_status = PPD_ALLOC_ERROR; return (NULL); } ppd->groups = group; group += ppd->num_groups; ppd->num_groups ++; memset(group, 0, sizeof(ppd_group_t)); strlcpy(group->name, name, sizeof(group->name)); cupsCharsetToUTF8((cups_utf8_t *)group->text, text, sizeof(group->text), encoding); } return (group); } /* * 'ppd_get_option()' - Find or create the named option as needed. */ static ppd_option_t * /* O - Named option */ ppd_get_option(ppd_group_t *group, /* I - Group */ const char *name) /* I - Name of option */ { int i; /* Looping var */ ppd_option_t *option; /* Option */ DEBUG_printf(("7ppd_get_option(group=%p(\"%s\"), name=\"%s\")", group, group->name, name)); for (i = group->num_options, option = group->options; i > 0; i --, option ++) if (!strcmp(option->keyword, name)) break; if (i == 0) { if (group->num_options == 0) option = malloc(sizeof(ppd_option_t)); else option = realloc(group->options, (size_t)(group->num_options + 1) * sizeof(ppd_option_t)); if (option == NULL) return (NULL); group->options = option; option += group->num_options; group->num_options ++; memset(option, 0, sizeof(ppd_option_t)); strlcpy(option->keyword, name, sizeof(option->keyword)); } return (option); } /* * 'ppd_globals_alloc()' - Allocate and initialize global data. */ static _ppd_globals_t * /* O - Pointer to global data */ ppd_globals_alloc(void) { return ((_ppd_globals_t *)calloc(1, sizeof(_ppd_globals_t))); } /* * 'ppd_globals_free()' - Free global data. */ #if defined(HAVE_PTHREAD_H) || defined(WIN32) static void ppd_globals_free(_ppd_globals_t *pg) /* I - Pointer to global data */ { free(pg); } #endif /* HAVE_PTHREAD_H || WIN32 */ #ifdef HAVE_PTHREAD_H /* * 'ppd_globals_init()' - Initialize per-thread globals... */ static void ppd_globals_init(void) { /* * Register the global data for this thread... */ pthread_key_create(&ppd_globals_key, (void (*)(void *))ppd_globals_free); } #endif /* HAVE_PTHREAD_H */ /* * 'ppd_hash_option()' - Generate a hash of the option name... */ static int /* O - Hash index */ ppd_hash_option(ppd_option_t *option) /* I - Option */ { int hash = 0; /* Hash index */ const char *k; /* Pointer into keyword */ for (hash = option->keyword[0], k = option->keyword + 1; *k;) hash = 33 * hash + *k++; return (hash & 511); } /* * 'ppd_read()' - Read a line from a PPD file, skipping comment lines as * necessary. */ static int /* O - Bitmask of fields read */ ppd_read(cups_file_t *fp, /* I - File to read from */ _ppd_line_t *line, /* I - Line buffer */ char *keyword, /* O - Keyword from line */ char *option, /* O - Option from line */ char *text, /* O - Human-readable text from line */ char **string, /* O - Code/string data */ int ignoreblank, /* I - Ignore blank lines? */ _ppd_globals_t *pg) /* I - Global data */ { int ch, /* Character from file */ col, /* Column in line */ colon, /* Colon seen? */ endquote, /* Waiting for an end quote */ mask, /* Mask to be returned */ startline, /* Start line */ textlen; /* Length of text */ char *keyptr, /* Keyword pointer */ *optptr, /* Option pointer */ *textptr, /* Text pointer */ *strptr, /* Pointer into string */ *lineptr; /* Current position in line buffer */ /* * Now loop until we have a valid line... */ *string = NULL; col = 0; startline = pg->ppd_line + 1; if (!line->buffer) { line->bufsize = 1024; line->buffer = malloc(1024); if (!line->buffer) return (0); } do { /* * Read the line... */ lineptr = line->buffer; endquote = 0; colon = 0; while ((ch = cupsFileGetChar(fp)) != EOF) { if (lineptr >= (line->buffer + line->bufsize - 1)) { /* * Expand the line buffer... */ char *temp; /* Temporary line pointer */ line->bufsize += 1024; if (line->bufsize > 262144) { /* * Don't allow lines longer than 256k! */ pg->ppd_line = startline; pg->ppd_status = PPD_LINE_TOO_LONG; return (0); } temp = realloc(line->buffer, line->bufsize); if (!temp) { pg->ppd_line = startline; pg->ppd_status = PPD_LINE_TOO_LONG; return (0); } lineptr = temp + (lineptr - line->buffer); line->buffer = temp; } if (ch == '\r' || ch == '\n') { /* * Line feed or carriage return... */ pg->ppd_line ++; col = 0; if (ch == '\r') { /* * Check for a trailing line feed... */ if ((ch = cupsFilePeekChar(fp)) == EOF) { ch = '\n'; break; } if (ch == 0x0a) cupsFileGetChar(fp); } if (lineptr == line->buffer && ignoreblank) continue; /* Skip blank lines */ ch = '\n'; if (!endquote) /* Continue for multi-line text */ break; *lineptr++ = '\n'; } else if (ch < ' ' && ch != '\t' && pg->ppd_conform == PPD_CONFORM_STRICT) { /* * Other control characters... */ pg->ppd_line = startline; pg->ppd_status = PPD_ILLEGAL_CHARACTER; return (0); } else if (ch != 0x1a) { /* * Any other character... */ *lineptr++ = (char)ch; col ++; if (col > (PPD_MAX_LINE - 1)) { /* * Line is too long... */ pg->ppd_line = startline; pg->ppd_status = PPD_LINE_TOO_LONG; return (0); } if (ch == ':' && strncmp(line->buffer, "*%", 2) != 0) colon = 1; if (ch == '\"' && colon) endquote = !endquote; } } if (endquote) { /* * Didn't finish this quoted string... */ while ((ch = cupsFileGetChar(fp)) != EOF) if (ch == '\"') break; else if (ch == '\r' || ch == '\n') { pg->ppd_line ++; col = 0; if (ch == '\r') { /* * Check for a trailing line feed... */ if ((ch = cupsFilePeekChar(fp)) == EOF) break; if (ch == 0x0a) cupsFileGetChar(fp); } } else if (ch < ' ' && ch != '\t' && pg->ppd_conform == PPD_CONFORM_STRICT) { /* * Other control characters... */ pg->ppd_line = startline; pg->ppd_status = PPD_ILLEGAL_CHARACTER; return (0); } else if (ch != 0x1a) { col ++; if (col > (PPD_MAX_LINE - 1)) { /* * Line is too long... */ pg->ppd_line = startline; pg->ppd_status = PPD_LINE_TOO_LONG; return (0); } } } if (ch != '\n') { /* * Didn't finish this line... */ while ((ch = cupsFileGetChar(fp)) != EOF) if (ch == '\r' || ch == '\n') { /* * Line feed or carriage return... */ pg->ppd_line ++; col = 0; if (ch == '\r') { /* * Check for a trailing line feed... */ if ((ch = cupsFilePeekChar(fp)) == EOF) break; if (ch == 0x0a) cupsFileGetChar(fp); } break; } else if (ch < ' ' && ch != '\t' && pg->ppd_conform == PPD_CONFORM_STRICT) { /* * Other control characters... */ pg->ppd_line = startline; pg->ppd_status = PPD_ILLEGAL_CHARACTER; return (0); } else if (ch != 0x1a) { col ++; if (col > (PPD_MAX_LINE - 1)) { /* * Line is too long... */ pg->ppd_line = startline; pg->ppd_status = PPD_LINE_TOO_LONG; return (0); } } } if (lineptr > line->buffer && lineptr[-1] == '\n') lineptr --; *lineptr = '\0'; DEBUG_printf(("9ppd_read: LINE=\"%s\"", line->buffer)); /* * The dynamically created PPDs for older style macOS * drivers include a large blob of data inserted as comments * at the end of the file. As an optimization we can stop * reading the PPD when we get to the start of this data. */ if (!strcmp(line->buffer, "*%APLWORKSET START")) return (0); if (ch == EOF && lineptr == line->buffer) return (0); /* * Now parse it... */ mask = 0; lineptr = line->buffer + 1; keyword[0] = '\0'; option[0] = '\0'; text[0] = '\0'; *string = NULL; if ((!line->buffer[0] || /* Blank line */ !strncmp(line->buffer, "*%", 2) || /* Comment line */ !strcmp(line->buffer, "*End")) && /* End of multi-line string */ ignoreblank) /* Ignore these? */ { startline = pg->ppd_line + 1; continue; } if (!strcmp(line->buffer, "*")) /* (Bad) comment line */ { if (pg->ppd_conform == PPD_CONFORM_RELAXED) { startline = pg->ppd_line + 1; continue; } else { pg->ppd_line = startline; pg->ppd_status = PPD_ILLEGAL_MAIN_KEYWORD; return (0); } } if (line->buffer[0] != '*') /* All lines start with an asterisk */ { /* * Allow lines consisting of just whitespace... */ for (lineptr = line->buffer; *lineptr; lineptr ++) if (*lineptr && !_cups_isspace(*lineptr)) break; if (*lineptr) { pg->ppd_status = PPD_MISSING_ASTERISK; return (0); } else if (ignoreblank) continue; else return (0); } /* * Get a keyword... */ keyptr = keyword; while (*lineptr && *lineptr != ':' && !_cups_isspace(*lineptr)) { if (*lineptr <= ' ' || *lineptr > 126 || *lineptr == '/' || (keyptr - keyword) >= (PPD_MAX_NAME - 1)) { pg->ppd_status = PPD_ILLEGAL_MAIN_KEYWORD; return (0); } *keyptr++ = *lineptr++; } *keyptr = '\0'; if (!strcmp(keyword, "End")) continue; mask |= PPD_KEYWORD; if (_cups_isspace(*lineptr)) { /* * Get an option name... */ while (_cups_isspace(*lineptr)) lineptr ++; optptr = option; while (*lineptr && !_cups_isspace(*lineptr) && *lineptr != ':' && *lineptr != '/') { if (*lineptr <= ' ' || *lineptr > 126 || (optptr - option) >= (PPD_MAX_NAME - 1)) { pg->ppd_status = PPD_ILLEGAL_OPTION_KEYWORD; return (0); } *optptr++ = *lineptr++; } *optptr = '\0'; if (_cups_isspace(*lineptr) && pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_ILLEGAL_WHITESPACE; return (0); } while (_cups_isspace(*lineptr)) lineptr ++; mask |= PPD_OPTION; if (*lineptr == '/') { /* * Get human-readable text... */ lineptr ++; textptr = text; while (*lineptr != '\0' && *lineptr != '\n' && *lineptr != ':') { if (((unsigned char)*lineptr < ' ' && *lineptr != '\t') || (textptr - text) >= (PPD_MAX_LINE - 1)) { pg->ppd_status = PPD_ILLEGAL_TRANSLATION; return (0); } *textptr++ = *lineptr++; } *textptr = '\0'; textlen = ppd_decode(text); if (textlen > PPD_MAX_TEXT && pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_ILLEGAL_TRANSLATION; return (0); } mask |= PPD_TEXT; } } if (_cups_isspace(*lineptr) && pg->ppd_conform == PPD_CONFORM_STRICT) { pg->ppd_status = PPD_ILLEGAL_WHITESPACE; return (0); } while (_cups_isspace(*lineptr)) lineptr ++; if (*lineptr == ':') { /* * Get string after triming leading and trailing whitespace... */ lineptr ++; while (_cups_isspace(*lineptr)) lineptr ++; strptr = lineptr + strlen(lineptr) - 1; while (strptr >= lineptr && _cups_isspace(*strptr)) *strptr-- = '\0'; if (*strptr == '\"') { /* * Quoted string by itself, remove quotes... */ *strptr = '\0'; lineptr ++; } *string = _cupsStrAlloc(lineptr); mask |= PPD_STRING; } } while (mask == 0); return (mask); } /* * 'ppd_update_filters()' - Update the filters array as needed. * * This function re-populates the filters array with cupsFilter2 entries that * have been stripped of the destination MIME media types and any maxsize hints. * * (All for backwards-compatibility) */ static int /* O - 1 on success, 0 on failure */ ppd_update_filters(ppd_file_t *ppd, /* I - PPD file */ _ppd_globals_t *pg) /* I - Global data */ { ppd_attr_t *attr; /* Current cupsFilter2 value */ char srcsuper[16], /* Source MIME media type */ srctype[256], dstsuper[16], /* Destination MIME media type */ dsttype[256], program[1024], /* Command to run */ *ptr, /* Pointer into command to run */ buffer[1024], /* Re-written cupsFilter value */ **filter; /* Current filter */ int cost; /* Cost of filter */ DEBUG_printf(("4ppd_update_filters(ppd=%p, cg=%p)", ppd, pg)); /* * See if we have any cupsFilter2 lines... */ if ((attr = ppdFindAttr(ppd, "cupsFilter2", NULL)) == NULL) { DEBUG_puts("5ppd_update_filters: No cupsFilter2 keywords present."); return (1); } /* * Yes, free the cupsFilter-defined filters and re-build... */ ppd_free_filters(ppd); do { /* * Parse the cupsFilter2 string: * * src/type dst/type cost program * src/type dst/type cost maxsize(n) program */ DEBUG_printf(("5ppd_update_filters: cupsFilter2=\"%s\"", attr->value)); if (sscanf(attr->value, "%15[^/]/%255s%*[ \t]%15[^/]/%255s%d%*[ \t]%1023[^\n]", srcsuper, srctype, dstsuper, dsttype, &cost, program) != 6) { DEBUG_puts("5ppd_update_filters: Bad cupsFilter2 line."); pg->ppd_status = PPD_BAD_VALUE; return (0); } DEBUG_printf(("5ppd_update_filters: srcsuper=\"%s\", srctype=\"%s\", " "dstsuper=\"%s\", dsttype=\"%s\", cost=%d, program=\"%s\"", srcsuper, srctype, dstsuper, dsttype, cost, program)); if (!strncmp(program, "maxsize(", 8) && (ptr = strchr(program + 8, ')')) != NULL) { DEBUG_puts("5ppd_update_filters: Found maxsize(nnn)."); ptr ++; while (_cups_isspace(*ptr)) ptr ++; _cups_strcpy(program, ptr); DEBUG_printf(("5ppd_update_filters: New program=\"%s\"", program)); } /* * Convert to cupsFilter format: * * src/type cost program */ snprintf(buffer, sizeof(buffer), "%s/%s %d %s", srcsuper, srctype, cost, program); DEBUG_printf(("5ppd_update_filters: Adding \"%s\".", buffer)); /* * Add a cupsFilter-compatible string to the filters array. */ if (ppd->num_filters == 0) filter = malloc(sizeof(char *)); else filter = realloc(ppd->filters, sizeof(char *) * (size_t)(ppd->num_filters + 1)); if (filter == NULL) { DEBUG_puts("5ppd_update_filters: Out of memory."); pg->ppd_status = PPD_ALLOC_ERROR; return (0); } ppd->filters = filter; filter += ppd->num_filters; ppd->num_filters ++; *filter = _cupsStrAlloc(buffer); } while ((attr = ppdFindNextAttr(ppd, "cupsFilter2", NULL)) != NULL); DEBUG_puts("5ppd_update_filters: Completed OK."); return (1); } cups-2.2.7/cups/ppd.h000664 000765 000024 00000046041 13255074424 015066 0ustar00msweetstaff000000 000000 /* * PostScript Printer Description definitions for CUPS. * * THESE APIS ARE DEPRECATED. TO COMPILE WITHOUT WARNINGS ADD * -D_PPD_DEPRECATED="" TO YOUR COMPILE OPTIONS. THIS HEADER AND THESE * FUNCTIONS WILL BE REMOVED IN A FUTURE RELEASE OF CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * PostScript is a trademark of Adobe Systems, Inc. * * This code and any derivative of it may be used and distributed * freely under the terms of the GNU General Public License when * used with GNU Ghostscript or its derivatives. Use of the code * (or any derivative of it) with software other than GNU * GhostScript (or its derivatives) is governed by the CUPS license * agreement. * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_PPD_H_ # define _CUPS_PPD_H_ /* * Include necessary headers... */ # include # include "cups.h" # include "array.h" # include "file.h" # include "raster.h" /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Define _PPD_DEPRECATED to silence the warnings about PPD functions being * deprecated... */ # ifndef _PPD_DEPRECATED # define _PPD_DEPRECATED _CUPS_DEPRECATED_1_6_MSG("Use cupsCopyDestInfo and friends instead.") # endif /* !_PPD_DEPRECATED */ /* * PPD version... */ # define PPD_VERSION 4.3 /* Kept in sync with Adobe version number */ /* * PPD size limits (defined in Adobe spec) */ # define PPD_MAX_NAME 41 /* Maximum size of name + 1 for nul */ # define PPD_MAX_TEXT 81 /* Maximum size of text + 1 for nul */ # define PPD_MAX_LINE 256 /* Maximum size of line + 1 for nul */ /* * Types and structures... */ typedef enum ppd_ui_e /**** UI Types ****/ { PPD_UI_BOOLEAN, /* True or False option */ PPD_UI_PICKONE, /* Pick one from a list */ PPD_UI_PICKMANY /* Pick zero or more from a list */ } ppd_ui_t; typedef enum ppd_section_e /**** Order dependency sections ****/ { PPD_ORDER_ANY, /* Option code can be anywhere in the file */ PPD_ORDER_DOCUMENT, /* ... must be in the DocumentSetup section */ PPD_ORDER_EXIT, /* ... must be sent prior to the document */ PPD_ORDER_JCL, /* ... must be sent as a JCL command */ PPD_ORDER_PAGE, /* ... must be in the PageSetup section */ PPD_ORDER_PROLOG /* ... must be in the Prolog section */ } ppd_section_t; typedef enum ppd_cs_e /**** Colorspaces ****/ { PPD_CS_CMYK = -4, /* CMYK colorspace */ PPD_CS_CMY, /* CMY colorspace */ PPD_CS_GRAY = 1, /* Grayscale colorspace */ PPD_CS_RGB = 3, /* RGB colorspace */ PPD_CS_RGBK, /* RGBK (K = gray) colorspace */ PPD_CS_N /* DeviceN colorspace */ } ppd_cs_t; typedef enum ppd_status_e /**** Status Codes @since CUPS 1.1.19/macOS 10.3@ ****/ { PPD_OK = 0, /* OK */ PPD_FILE_OPEN_ERROR, /* Unable to open PPD file */ PPD_NULL_FILE, /* NULL PPD file pointer */ PPD_ALLOC_ERROR, /* Memory allocation error */ PPD_MISSING_PPDADOBE4, /* Missing PPD-Adobe-4.x header */ PPD_MISSING_VALUE, /* Missing value string */ PPD_INTERNAL_ERROR, /* Internal error */ PPD_BAD_OPEN_GROUP, /* Bad OpenGroup */ PPD_NESTED_OPEN_GROUP, /* OpenGroup without a CloseGroup first */ PPD_BAD_OPEN_UI, /* Bad OpenUI/JCLOpenUI */ PPD_NESTED_OPEN_UI, /* OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first */ PPD_BAD_ORDER_DEPENDENCY, /* Bad OrderDependency */ PPD_BAD_UI_CONSTRAINTS, /* Bad UIConstraints */ PPD_MISSING_ASTERISK, /* Missing asterisk in column 0 */ PPD_LINE_TOO_LONG, /* Line longer than 255 chars */ PPD_ILLEGAL_CHARACTER, /* Illegal control character */ PPD_ILLEGAL_MAIN_KEYWORD, /* Illegal main keyword string */ PPD_ILLEGAL_OPTION_KEYWORD, /* Illegal option keyword string */ PPD_ILLEGAL_TRANSLATION, /* Illegal translation string */ PPD_ILLEGAL_WHITESPACE, /* Illegal whitespace character */ PPD_BAD_CUSTOM_PARAM, /* Bad custom parameter */ PPD_MISSING_OPTION_KEYWORD, /* Missing option keyword */ PPD_BAD_VALUE, /* Bad value string */ PPD_MISSING_CLOSE_GROUP, /* Missing CloseGroup */ PPD_MAX_STATUS /* @private@ */ } ppd_status_t; enum ppd_conform_e /**** Conformance Levels @since CUPS 1.1.19/macOS 10.3@ ****/ { PPD_CONFORM_RELAXED, /* Relax whitespace and control char */ PPD_CONFORM_STRICT /* Require strict conformance */ }; typedef enum ppd_conform_e ppd_conform_t; /**** Conformance Levels @since CUPS 1.1.19/macOS 10.3@ ****/ typedef struct ppd_attr_s /**** PPD Attribute Structure @since CUPS 1.1.19/macOS 10.3@ ****/ { char name[PPD_MAX_NAME]; /* Name of attribute (cupsXYZ) */ char spec[PPD_MAX_NAME]; /* Specifier string, if any */ char text[PPD_MAX_TEXT]; /* Human-readable text, if any */ char *value; /* Value string */ } ppd_attr_t; typedef struct ppd_option_s ppd_option_t; /**** Options ****/ typedef struct ppd_choice_s /**** Option choices ****/ { char marked; /* 0 if not selected, 1 otherwise */ char choice[PPD_MAX_NAME]; /* Computer-readable option name */ char text[PPD_MAX_TEXT]; /* Human-readable option name */ char *code; /* Code to send for this option */ ppd_option_t *option; /* Pointer to parent option structure */ } ppd_choice_t; struct ppd_option_s /**** Options ****/ { char conflicted; /* 0 if no conflicts exist, 1 otherwise */ char keyword[PPD_MAX_NAME]; /* Option keyword name ("PageSize", etc.) */ char defchoice[PPD_MAX_NAME];/* Default option choice */ char text[PPD_MAX_TEXT]; /* Human-readable text */ ppd_ui_t ui; /* Type of UI option */ ppd_section_t section; /* Section for command */ float order; /* Order number */ int num_choices; /* Number of option choices */ ppd_choice_t *choices; /* Option choices */ }; typedef struct ppd_group_s /**** Groups ****/ { /**** Group text strings are limited to 39 chars + nul in order to **** preserve binary compatibility and allow applications to get **** the group's keyword name. ****/ char text[PPD_MAX_TEXT - PPD_MAX_NAME]; /* Human-readable group name */ char name[PPD_MAX_NAME]; /* Group name @since CUPS 1.1.18/macOS 10.3@ */ int num_options; /* Number of options */ ppd_option_t *options; /* Options */ int num_subgroups; /* Number of sub-groups */ struct ppd_group_s *subgroups; /* Sub-groups (max depth = 1) */ } ppd_group_t; typedef struct ppd_const_s /**** Constraints ****/ { char option1[PPD_MAX_NAME]; /* First keyword */ char choice1[PPD_MAX_NAME]; /* First option/choice (blank for all) */ char option2[PPD_MAX_NAME]; /* Second keyword */ char choice2[PPD_MAX_NAME]; /* Second option/choice (blank for all) */ } ppd_const_t; typedef struct ppd_size_s /**** Page Sizes ****/ { int marked; /* Page size selected? */ char name[PPD_MAX_NAME]; /* Media size option */ float width; /* Width of media in points */ float length; /* Length of media in points */ float left; /* Left printable margin in points */ float bottom; /* Bottom printable margin in points */ float right; /* Right printable margin in points */ float top; /* Top printable margin in points */ } ppd_size_t; typedef struct ppd_emul_s /**** Emulators ****/ { char name[PPD_MAX_NAME]; /* Emulator name */ char *start; /* Code to switch to this emulation */ char *stop; /* Code to stop this emulation */ } ppd_emul_t; typedef struct ppd_profile_s /**** sRGB Color Profiles ****/ { char resolution[PPD_MAX_NAME]; /* Resolution or "-" */ char media_type[PPD_MAX_NAME]; /* Media type or "-" */ float density; /* Ink density to use */ float gamma; /* Gamma correction to use */ float matrix[3][3]; /* Transform matrix */ } ppd_profile_t; /**** New in CUPS 1.2/macOS 10.5 ****/ typedef enum ppd_cptype_e /**** Custom Parameter Type @since CUPS 1.2/macOS 10.5@ ****/ { PPD_CUSTOM_CURVE, /* Curve value for f(x) = x^value */ PPD_CUSTOM_INT, /* Integer number value */ PPD_CUSTOM_INVCURVE, /* Curve value for f(x) = x^(1/value) */ PPD_CUSTOM_PASSCODE, /* String of (hidden) numbers */ PPD_CUSTOM_PASSWORD, /* String of (hidden) characters */ PPD_CUSTOM_POINTS, /* Measurement value in points */ PPD_CUSTOM_REAL, /* Real number value */ PPD_CUSTOM_STRING /* String of characters */ } ppd_cptype_t; typedef union ppd_cplimit_u /**** Custom Parameter Limit @since CUPS 1.2/macOS 10.5@ ****/ { float custom_curve; /* Gamma value */ int custom_int; /* Integer value */ float custom_invcurve; /* Gamma value */ int custom_passcode; /* Passcode length */ int custom_password; /* Password length */ float custom_points; /* Measurement value */ float custom_real; /* Real value */ int custom_string; /* String length */ } ppd_cplimit_t; typedef union ppd_cpvalue_u /**** Custom Parameter Value @since CUPS 1.2/macOS 10.5@ ****/ { float custom_curve; /* Gamma value */ int custom_int; /* Integer value */ float custom_invcurve; /* Gamma value */ char *custom_passcode; /* Passcode value */ char *custom_password; /* Password value */ float custom_points; /* Measurement value */ float custom_real; /* Real value */ char *custom_string; /* String value */ } ppd_cpvalue_t; typedef struct ppd_cparam_s /**** Custom Parameter @since CUPS 1.2/macOS 10.5@ ****/ { char name[PPD_MAX_NAME]; /* Parameter name */ char text[PPD_MAX_TEXT]; /* Human-readable text */ int order; /* Order (0 to N) */ ppd_cptype_t type; /* Parameter type */ ppd_cplimit_t minimum, /* Minimum value */ maximum; /* Maximum value */ ppd_cpvalue_t current; /* Current value */ } ppd_cparam_t; typedef struct ppd_coption_s /**** Custom Option @since CUPS 1.2/macOS 10.5@ ****/ { char keyword[PPD_MAX_NAME]; /* Name of option that is being extended... */ ppd_option_t *option; /* Option that is being extended... */ int marked; /* Extended option is marked */ cups_array_t *params; /* Parameters */ } ppd_coption_t; typedef struct _ppd_cache_s _ppd_cache_t; /**** PPD cache and mapping data @since CUPS 1.5/macOS 10.7@ @private@ ****/ typedef struct ppd_file_s /**** PPD File ****/ { int language_level; /* Language level of device */ int color_device; /* 1 = color device, 0 = grayscale */ int variable_sizes; /* 1 = supports variable sizes, 0 = doesn't */ int accurate_screens; /* 1 = supports accurate screens, 0 = not */ int contone_only; /* 1 = continuous tone only, 0 = not */ int landscape; /* -90 or 90 */ int model_number; /* Device-specific model number */ int manual_copies; /* 1 = Copies done manually, 0 = hardware */ int throughput; /* Pages per minute */ ppd_cs_t colorspace; /* Default colorspace */ char *patches; /* Patch commands to be sent to printer */ int num_emulations; /* Number of emulations supported */ ppd_emul_t *emulations; /* Emulations and the code to invoke them */ char *jcl_begin; /* Start JCL commands */ char *jcl_ps; /* Enter PostScript interpreter */ char *jcl_end; /* End JCL commands */ char *lang_encoding; /* Language encoding */ char *lang_version; /* Language version (English, Spanish, etc.) */ char *modelname; /* Model name (general) */ char *ttrasterizer; /* Truetype rasterizer */ char *manufacturer; /* Manufacturer name */ char *product; /* Product name (from PS RIP/interpreter) */ char *nickname; /* Nickname (specific) */ char *shortnickname; /* Short version of nickname */ int num_groups; /* Number of UI groups */ ppd_group_t *groups; /* UI groups */ int num_sizes; /* Number of page sizes */ ppd_size_t *sizes; /* Page sizes */ float custom_min[2]; /* Minimum variable page size */ float custom_max[2]; /* Maximum variable page size */ float custom_margins[4]; /* Margins around page */ int num_consts; /* Number of UI/Non-UI constraints */ ppd_const_t *consts; /* UI/Non-UI constraints */ int num_fonts; /* Number of pre-loaded fonts */ char **fonts; /* Pre-loaded fonts */ int num_profiles; /* Number of sRGB color profiles @deprecated@ */ ppd_profile_t *profiles; /* sRGB color profiles @deprecated@ */ int num_filters; /* Number of filters */ char **filters; /* Filter strings... */ /**** New in CUPS 1.1 ****/ int flip_duplex; /* 1 = Flip page for back sides @deprecated@ */ /**** New in CUPS 1.1.19 ****/ char *protocols; /* Protocols (BCP, TBCP) string @since CUPS 1.1.19/macOS 10.3@ */ char *pcfilename; /* PCFileName string @since CUPS 1.1.19/macOS 10.3@ */ int num_attrs; /* Number of attributes @since CUPS 1.1.19/macOS 10.3@ @private@ */ int cur_attr; /* Current attribute @since CUPS 1.1.19/macOS 10.3@ @private@ */ ppd_attr_t **attrs; /* Attributes @since CUPS 1.1.19/macOS 10.3@ @private@ */ /**** New in CUPS 1.2/macOS 10.5 ****/ cups_array_t *sorted_attrs; /* Attribute lookup array @since CUPS 1.2/macOS 10.5@ @private@ */ cups_array_t *options; /* Option lookup array @since CUPS 1.2/macOS 10.5@ @private@ */ cups_array_t *coptions; /* Custom options array @since CUPS 1.2/macOS 10.5@ @private@ */ /**** New in CUPS 1.3/macOS 10.5 ****/ cups_array_t *marked; /* Marked choices @since CUPS 1.3/macOS 10.5@ @private@ */ /**** New in CUPS 1.4/macOS 10.6 ****/ cups_array_t *cups_uiconstraints; /* cupsUIConstraints @since CUPS 1.4/macOS 10.6@ @private@ */ /**** New in CUPS 1.5 ****/ _ppd_cache_t *cache; /* PPD cache and mapping data @since CUPS 1.5/macOS 10.7@ @private@ */ } ppd_file_t; /* * Prototypes... */ extern const char *cupsGetPPD(const char *name) _PPD_DEPRECATED; extern const char *cupsGetPPD2(http_t *http, const char *name) _PPD_DEPRECATED; extern http_status_t cupsGetPPD3(http_t *http, const char *name, time_t *modtime, char *buffer, size_t bufsize) _PPD_DEPRECATED; extern char *cupsGetServerPPD(http_t *http, const char *name) _PPD_DEPRECATED; extern int cupsMarkOptions(ppd_file_t *ppd, int num_options, cups_option_t *options) _PPD_DEPRECATED; extern void ppdClose(ppd_file_t *ppd) _PPD_DEPRECATED; extern int ppdCollect(ppd_file_t *ppd, ppd_section_t section, ppd_choice_t ***choices) _PPD_DEPRECATED; extern int ppdConflicts(ppd_file_t *ppd) _PPD_DEPRECATED; extern int ppdEmit(ppd_file_t *ppd, FILE *fp, ppd_section_t section) _PPD_DEPRECATED; extern int ppdEmitFd(ppd_file_t *ppd, int fd, ppd_section_t section) _PPD_DEPRECATED; extern int ppdEmitJCL(ppd_file_t *ppd, FILE *fp, int job_id, const char *user, const char *title) _PPD_DEPRECATED; extern ppd_choice_t *ppdFindChoice(ppd_option_t *o, const char *option) _PPD_DEPRECATED; extern ppd_choice_t *ppdFindMarkedChoice(ppd_file_t *ppd, const char *keyword) _PPD_DEPRECATED; extern ppd_option_t *ppdFindOption(ppd_file_t *ppd, const char *keyword) _PPD_DEPRECATED; extern int ppdIsMarked(ppd_file_t *ppd, const char *keyword, const char *option) _PPD_DEPRECATED; extern void ppdMarkDefaults(ppd_file_t *ppd) _PPD_DEPRECATED; extern int ppdMarkOption(ppd_file_t *ppd, const char *keyword, const char *option) _PPD_DEPRECATED; extern ppd_file_t *ppdOpen(FILE *fp) _PPD_DEPRECATED; extern ppd_file_t *ppdOpenFd(int fd) _PPD_DEPRECATED; extern ppd_file_t *ppdOpenFile(const char *filename) _PPD_DEPRECATED; extern float ppdPageLength(ppd_file_t *ppd, const char *name) _PPD_DEPRECATED; extern ppd_size_t *ppdPageSize(ppd_file_t *ppd, const char *name) _PPD_DEPRECATED; extern float ppdPageWidth(ppd_file_t *ppd, const char *name) _PPD_DEPRECATED; /**** New in CUPS 1.1.19 ****/ extern const char *ppdErrorString(ppd_status_t status) _PPD_DEPRECATED; extern ppd_attr_t *ppdFindAttr(ppd_file_t *ppd, const char *name, const char *spec) _PPD_DEPRECATED; extern ppd_attr_t *ppdFindNextAttr(ppd_file_t *ppd, const char *name, const char *spec) _PPD_DEPRECATED; extern ppd_status_t ppdLastError(int *line) _PPD_DEPRECATED; /**** New in CUPS 1.1.20 ****/ extern void ppdSetConformance(ppd_conform_t c) _PPD_DEPRECATED; /**** New in CUPS 1.2 ****/ extern int cupsRasterInterpretPPD(cups_page_header2_t *h, ppd_file_t *ppd, int num_options, cups_option_t *options, cups_interpret_cb_t func) _PPD_DEPRECATED; extern int ppdCollect2(ppd_file_t *ppd, ppd_section_t section, float min_order, ppd_choice_t ***choices) _PPD_DEPRECATED; extern int ppdEmitAfterOrder(ppd_file_t *ppd, FILE *fp, ppd_section_t section, int limit, float min_order) _PPD_DEPRECATED; extern int ppdEmitJCLEnd(ppd_file_t *ppd, FILE *fp) _PPD_DEPRECATED; extern char *ppdEmitString(ppd_file_t *ppd, ppd_section_t section, float min_order) _PPD_DEPRECATED; extern ppd_coption_t *ppdFindCustomOption(ppd_file_t *ppd, const char *keyword) _PPD_DEPRECATED; extern ppd_cparam_t *ppdFindCustomParam(ppd_coption_t *opt, const char *name) _PPD_DEPRECATED; extern ppd_cparam_t *ppdFirstCustomParam(ppd_coption_t *opt) _PPD_DEPRECATED; extern ppd_option_t *ppdFirstOption(ppd_file_t *ppd) _PPD_DEPRECATED; extern ppd_cparam_t *ppdNextCustomParam(ppd_coption_t *opt) _PPD_DEPRECATED; extern ppd_option_t *ppdNextOption(ppd_file_t *ppd) _PPD_DEPRECATED; extern int ppdLocalize(ppd_file_t *ppd) _PPD_DEPRECATED; extern ppd_file_t *ppdOpen2(cups_file_t *fp) _PPD_DEPRECATED; /**** New in CUPS 1.3/macOS 10.5 ****/ extern const char *ppdLocalizeIPPReason(ppd_file_t *ppd, const char *reason, const char *scheme, char *buffer, size_t bufsize) _PPD_DEPRECATED; /**** New in CUPS 1.4/macOS 10.6 ****/ extern int cupsGetConflicts(ppd_file_t *ppd, const char *option, const char *choice, cups_option_t **options) _PPD_DEPRECATED; extern int cupsResolveConflicts(ppd_file_t *ppd, const char *option, const char *choice, int *num_options, cups_option_t **options) _PPD_DEPRECATED; extern int ppdInstallableConflict(ppd_file_t *ppd, const char *option, const char *choice) _PPD_DEPRECATED; extern ppd_attr_t *ppdLocalizeAttr(ppd_file_t *ppd, const char *keyword, const char *spec) _PPD_DEPRECATED; extern const char *ppdLocalizeMarkerName(ppd_file_t *ppd, const char *name) _PPD_DEPRECATED; extern int ppdPageSizeLimits(ppd_file_t *ppd, ppd_size_t *minimum, ppd_size_t *maximum) _PPD_DEPRECATED; /* * C++ magic... */ # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_PPD_H_ */ cups-2.2.7/cups/pwg-media.c000664 000765 000024 00000112645 13255074424 016154 0ustar00msweetstaff000000 000000 /* * PWG media name API implementation for CUPS. * * Copyright 2009-2017 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include /* * Local macros... */ #define _PWG_MEDIA_IN(p,l,a,x,y) {p, l, a, (int)(x * 2540), (int)(y * 2540)} #define _PWG_MEDIA_MM(p,l,a,x,y) {p, l, a, (int)(x * 100), (int)(y * 100)} /* * Local functions... */ static int pwg_compare_legacy(pwg_media_t *a, pwg_media_t *b); static int pwg_compare_pwg(pwg_media_t *a, pwg_media_t *b); static int pwg_compare_ppd(pwg_media_t *a, pwg_media_t *b); static char *pwg_format_inches(char *buf, size_t bufsize, int val); static char *pwg_format_millimeters(char *buf, size_t bufsize, int val); static int pwg_scan_measurement(const char *buf, char **bufptr, int numer, int denom); /* * Local globals... */ static pwg_media_t const cups_pwg_media[] = { /* Media size lookup table */ /* North American Standard Sheet Media Sizes */ _PWG_MEDIA_IN("na_index-3x5_3x5in", NULL, "3x5", 3, 5), _PWG_MEDIA_IN("na_personal_3.625x6.5in", NULL, "EnvPersonal", 3.625, 6.5), _PWG_MEDIA_IN("na_monarch_3.875x7.5in", "monarch-envelope", "EnvMonarch", 3.875, 7.5), _PWG_MEDIA_IN("na_number-9_3.875x8.875in", "na-number-9-envelope", "Env9", 3.875, 8.875), _PWG_MEDIA_IN("na_index-4x6_4x6in", NULL, "4x6", 4, 6), _PWG_MEDIA_IN("na_number-10_4.125x9.5in", "na-number-10-envelope", "Env10", 4.125, 9.5), _PWG_MEDIA_IN("na_a2_4.375x5.75in", NULL, "EnvA2", 4.375, 5.75), _PWG_MEDIA_IN("na_number-11_4.5x10.375in", NULL, "Env11", 4.5, 10.375), _PWG_MEDIA_IN("na_number-12_4.75x11in", NULL, "Env12", 4.75, 11), _PWG_MEDIA_IN("na_5x7_5x7in", NULL, "5x7", 5, 7), _PWG_MEDIA_IN("na_index-5x8_5x8in", NULL, "5x8", 5, 8), _PWG_MEDIA_IN("na_number-14_5x11.5in", NULL, "Env14", 5, 11.5), _PWG_MEDIA_IN("na_invoice_5.5x8.5in", "invoice", "Statement", 5.5, 8.5), _PWG_MEDIA_IN("na_index-4x6-ext_6x8in", NULL, "6x8", 6, 8), _PWG_MEDIA_IN("na_6x9_6x9in", "na-6x9-envelope", "6x9", 6, 9), _PWG_MEDIA_IN("na_c5_6.5x9.5in", NULL, "6.5x9.5", 6.5, 9.5), _PWG_MEDIA_IN("na_7x9_7x9in", "na-7x9-envelope", "7x9", 7, 9), _PWG_MEDIA_IN("na_executive_7.25x10.5in", "executive", "Executive", 7.25, 10.5), _PWG_MEDIA_IN("na_govt-letter_8x10in", "na-8x10", "8x10", 8, 10), _PWG_MEDIA_IN("na_govt-legal_8x13in", NULL, "8x13", 8, 13), _PWG_MEDIA_IN("na_quarto_8.5x10.83in", "quarto", "Quarto", 8.5, 10.83), _PWG_MEDIA_IN("na_letter_8.5x11in", "na-letter", "Letter", 8.5, 11), _PWG_MEDIA_IN("na_fanfold-eur_8.5x12in", NULL, "FanFoldGerman", 8.5, 12), _PWG_MEDIA_IN("na_letter-plus_8.5x12.69in", NULL, "LetterPlus", 8.5, 12.69), _PWG_MEDIA_IN("na_foolscap_8.5x13in", NULL, "FanFoldGermanLegal", 8.5, 13), _PWG_MEDIA_IN("na_oficio_8.5x13.4in", NULL, "Oficio", 8.5, 13.4), _PWG_MEDIA_IN("na_legal_8.5x14in", "na-legal", "Legal", 8.5, 14), _PWG_MEDIA_IN("na_super-a_8.94x14in", NULL, "SuperA", 8.94, 14), _PWG_MEDIA_IN("na_9x11_9x11in", "na-9x11-envelope", "9x11", 9, 11), _PWG_MEDIA_IN("na_arch-a_9x12in", "arch-a", "ARCHA", 9, 12), _PWG_MEDIA_IN("na_letter-extra_9.5x12in", NULL, "LetterExtra", 9.5, 12), _PWG_MEDIA_IN("na_legal-extra_9.5x15in", NULL, "LegalExtra", 9.5, 15), _PWG_MEDIA_IN("na_10x11_10x11in", NULL, "10x11", 10, 11), _PWG_MEDIA_IN("na_10x13_10x13in", "na-10x13-envelope", "10x13", 10, 13), _PWG_MEDIA_IN("na_10x14_10x14in", "na-10x14-envelope", "10x14", 10, 14), _PWG_MEDIA_IN("na_10x15_10x15in", "na-10x15-envelope", "10x15", 10, 15), _PWG_MEDIA_IN("na_11x12_11x12in", NULL, "11x12", 11, 12), _PWG_MEDIA_IN("na_edp_11x14in", NULL, "11x14", 11, 14), _PWG_MEDIA_IN("na_fanfold-us_11x14.875in", NULL, "11x14.875", 11, 14.875), _PWG_MEDIA_IN("na_11x15_11x15in", NULL, "11x15", 11, 15), _PWG_MEDIA_IN("na_ledger_11x17in", "tabloid", "Tabloid", 11, 17), _PWG_MEDIA_IN("na_eur-edp_12x14in", NULL, NULL, 12, 14), _PWG_MEDIA_IN("na_arch-b_12x18in", "arch-b", "ARCHB", 12, 18), _PWG_MEDIA_IN("na_12x19_12x19in", NULL, "12x19", 12, 19), _PWG_MEDIA_IN("na_b-plus_12x19.17in", NULL, "SuperB", 12, 19.17), _PWG_MEDIA_IN("na_super-b_13x19in", "super-b", "13x19", 13, 19), _PWG_MEDIA_IN("na_c_17x22in", "c", "AnsiC", 17, 22), _PWG_MEDIA_IN("na_arch-c_18x24in", "arch-c", "ARCHC", 18, 24), _PWG_MEDIA_IN("na_d_22x34in", "d", "AnsiD", 22, 34), _PWG_MEDIA_IN("na_arch-d_24x36in", "arch-d", "ARCHD", 24, 36), _PWG_MEDIA_IN("asme_f_28x40in", "f", "28x40", 28, 40), _PWG_MEDIA_IN("na_wide-format_30x42in", NULL, "30x42", 30, 42), _PWG_MEDIA_IN("na_e_34x44in", "e", "AnsiE", 34, 44), _PWG_MEDIA_IN("na_arch-e_36x48in", "arch-e", "ARCHE", 36, 48), _PWG_MEDIA_IN("na_f_44x68in", NULL, "AnsiF", 44, 68), /* ISO Standard Sheet Media Sizes */ _PWG_MEDIA_MM("iso_a10_26x37mm", "iso-a10", "A10", 26, 37), _PWG_MEDIA_MM("iso_a9_37x52mm", "iso-a9", "A9", 37, 52), _PWG_MEDIA_MM("iso_a8_52x74mm", "iso-a8", "A8", 52, 74), _PWG_MEDIA_MM("iso_a7_74x105mm", "iso-a7", "A7", 74, 105), _PWG_MEDIA_MM("iso_a6_105x148mm", "iso-a6", "A6", 105, 148), _PWG_MEDIA_MM("iso_a5_148x210mm", "iso-a5", "A5", 148, 210), _PWG_MEDIA_MM("iso_a5-extra_174x235mm", NULL, "A5Extra", 174, 235), _PWG_MEDIA_MM("iso_a4_210x297mm", "iso-a4", "A4", 210, 297), _PWG_MEDIA_MM("iso_a4-tab_225x297mm", NULL, "A4Tab", 225, 297), _PWG_MEDIA_MM("iso_a4-extra_235.5x322.3mm", NULL, "A4Extra", 235.5, 322.3), _PWG_MEDIA_MM("iso_a3_297x420mm", "iso-a3", "A3", 297, 420), _PWG_MEDIA_MM("iso_a4x3_297x630mm", "iso-a4x3", "A4x3", 297, 630), _PWG_MEDIA_MM("iso_a4x4_297x841mm", "iso-a4x4", "A4x4", 297, 841), _PWG_MEDIA_MM("iso_a4x5_297x1051mm", "iso-a4x5", "A4x5", 297, 1051), _PWG_MEDIA_MM("iso_a4x6_297x1261mm", "iso-a4x6", "A4x6", 297, 1261), _PWG_MEDIA_MM("iso_a4x7_297x1471mm", "iso-a4x7", "A4x7", 297, 1471), _PWG_MEDIA_MM("iso_a4x8_297x1682mm", "iso-a4x8", "A4x8", 297, 1682), _PWG_MEDIA_MM("iso_a4x9_297x1892mm", "iso-a4x9", "A4x9", 297, 1892), _PWG_MEDIA_MM("iso_a3-extra_322x445mm", "iso-a3-extra", "A3Extra", 322, 445), _PWG_MEDIA_MM("iso_a2_420x594mm", "iso-a2", "A2", 420, 594), _PWG_MEDIA_MM("iso_a3x3_420x891mm", "iso-a3x3", "A3x3", 420, 891), _PWG_MEDIA_MM("iso_a3x4_420x1189mm", "iso-a3x4", "A3x4", 420, 1189), _PWG_MEDIA_MM("iso_a3x5_420x1486mm", "iso-a3x5", "A3x6", 420, 1486), _PWG_MEDIA_MM("iso_a3x6_420x1783mm", "iso-a3x6", "A3x6", 420, 1783), _PWG_MEDIA_MM("iso_a3x7_420x2080mm", "iso-a3x7", "A3x7", 420, 2080), _PWG_MEDIA_MM("iso_a1_594x841mm", "iso-a1", "A1", 594, 841), _PWG_MEDIA_MM("iso_a2x3_594x1261mm", "iso-a2x3", "A2x3", 594, 1261), _PWG_MEDIA_MM("iso_a2x4_594x1682mm", "iso-a2x4", "A2x4", 594, 1682), _PWG_MEDIA_MM("iso_a2x5_594x2102mm", "iso-a2x5", "A2x5", 594, 2102), _PWG_MEDIA_MM("iso_a0_841x1189mm", "iso-a0", "A0", 841, 1189), _PWG_MEDIA_MM("iso_a1x3_841x1783mm", "iso-a1x3", "A1x3", 841, 1783), _PWG_MEDIA_MM("iso_a1x4_841x2378mm", "iso-a1x4", "A1x4", 841, 2378), _PWG_MEDIA_MM("iso_2a0_1189x1682mm", NULL, "1189x1682mm", 1189, 1682), _PWG_MEDIA_MM("iso_a0x3_1189x2523mm", NULL, "A0x3", 1189, 2523), _PWG_MEDIA_MM("iso_b10_31x44mm", "iso-b10", "ISOB10", 31, 44), _PWG_MEDIA_MM("iso_b9_44x62mm", "iso-b9", "ISOB9", 44, 62), _PWG_MEDIA_MM("iso_b8_62x88mm", "iso-b8", "ISOB8", 62, 88), _PWG_MEDIA_MM("iso_b7_88x125mm", "iso-b7", "ISOB7", 88, 125), _PWG_MEDIA_MM("iso_b6_125x176mm", "iso-b6", "ISOB6", 125, 176), _PWG_MEDIA_MM("iso_b6c4_125x324mm", NULL, "125x324mm", 125, 324), _PWG_MEDIA_MM("iso_b5_176x250mm", "iso-b5", "ISOB5", 176, 250), _PWG_MEDIA_MM("iso_b5-extra_201x276mm", NULL, "ISOB5Extra", 201, 276), _PWG_MEDIA_MM("iso_b4_250x353mm", "iso-b4", "ISOB4", 250, 353), _PWG_MEDIA_MM("iso_b3_353x500mm", "iso-b3", "ISOB3", 353, 500), _PWG_MEDIA_MM("iso_b2_500x707mm", "iso-b2", "ISOB2", 500, 707), _PWG_MEDIA_MM("iso_b1_707x1000mm", "iso-b1", "ISOB1", 707, 1000), _PWG_MEDIA_MM("iso_b0_1000x1414mm", "iso-b0", "ISOB0", 1000, 1414), _PWG_MEDIA_MM("iso_c10_28x40mm", "iso-c10", "EnvC10", 28, 40), _PWG_MEDIA_MM("iso_c9_40x57mm", "iso-c9", "EnvC9", 40, 57), _PWG_MEDIA_MM("iso_c8_57x81mm", "iso-c8", "EnvC8", 57, 81), _PWG_MEDIA_MM("iso_c7_81x114mm", "iso-c7", "EnvC7", 81, 114), _PWG_MEDIA_MM("iso_c7c6_81x162mm", NULL, "EnvC76", 81, 162), _PWG_MEDIA_MM("iso_c6_114x162mm", "iso-c6", "EnvC6", 114, 162), _PWG_MEDIA_MM("iso_c6c5_114x229mm", NULL, "EnvC65", 114, 229), _PWG_MEDIA_MM("iso_c5_162x229mm", "iso-c5", "EnvC5", 162, 229), _PWG_MEDIA_MM("iso_c4_229x324mm", "iso-c4", "EnvC4", 229, 324), _PWG_MEDIA_MM("iso_c3_324x458mm", "iso-c3", "EnvC3", 324, 458), _PWG_MEDIA_MM("iso_c2_458x648mm", "iso-c2", "EnvC2", 458, 648), _PWG_MEDIA_MM("iso_c1_648x917mm", "iso-c1", "EnvC1", 648, 917), _PWG_MEDIA_MM("iso_c0_917x1297mm", "iso-c0", "EnvC0", 917, 1297), _PWG_MEDIA_MM("iso_dl_110x220mm", "iso-designated", "EnvDL", 110, 220), _PWG_MEDIA_MM("iso_ra4_215x305mm", "iso-ra4", "RA4", 215, 305), _PWG_MEDIA_MM("iso_sra4_225x320mm", "iso-sra4", "SRA4", 225, 320), _PWG_MEDIA_MM("iso_ra3_305x430mm", "iso-ra3", "RA3", 305, 430), _PWG_MEDIA_MM("iso_sra3_320x450mm", "iso-sra3", "SRA3", 320, 450), _PWG_MEDIA_MM("iso_ra2_430x610mm", "iso-ra2", "RA2", 430, 610), _PWG_MEDIA_MM("iso_sra2_450x640mm", "iso-sra2", "SRA2", 450, 640), _PWG_MEDIA_MM("iso_ra1_610x860mm", "iso-ra1", "RA1", 610, 860), _PWG_MEDIA_MM("iso_sra1_640x900mm", "iso-sra1", "SRA1", 640, 900), _PWG_MEDIA_MM("iso_ra0_860x1220mm", "iso-ra0", "RA0", 860, 1220), _PWG_MEDIA_MM("iso_sra0_900x1280mm", "iso-sra0", "SRA0", 900, 1280), /* Japanese Standard Sheet Media Sizes */ _PWG_MEDIA_MM("jis_b10_32x45mm", "jis-b10", "B10", 32, 45), _PWG_MEDIA_MM("jis_b9_45x64mm", "jis-b9", "B9", 45, 64), _PWG_MEDIA_MM("jis_b8_64x91mm", "jis-b8", "B8", 64, 91), _PWG_MEDIA_MM("jis_b7_91x128mm", "jis-b7", "B7", 91, 128), _PWG_MEDIA_MM("jis_b6_128x182mm", "jis-b6", "B6", 128, 182), _PWG_MEDIA_MM("jis_b5_182x257mm", "jis-b5", "B5", 182, 257), _PWG_MEDIA_MM("jis_b4_257x364mm", "jis-b4", "B4", 257, 364), _PWG_MEDIA_MM("jis_b3_364x515mm", "jis-b3", "B3", 364, 515), _PWG_MEDIA_MM("jis_b2_515x728mm", "jis-b2", "B2", 515, 728), _PWG_MEDIA_MM("jis_b1_728x1030mm", "jis-b1", "B1", 728, 1030), _PWG_MEDIA_MM("jis_b0_1030x1456mm", "jis-b0", "B0", 1030, 1456), _PWG_MEDIA_MM("jis_exec_216x330mm", NULL, "216x330mm", 216, 330), _PWG_MEDIA_MM("jpn_kaku1_270x382mm", NULL, "EnvKaku1", 270, 382), _PWG_MEDIA_MM("jpn_kaku2_240x332mm", NULL, "EnvKaku2", 240, 332), _PWG_MEDIA_MM("jpn_kaku3_216x277mm", NULL, "EnvKaku3", 216, 277), _PWG_MEDIA_MM("jpn_kaku4_197x267mm", NULL, "EnvKaku4", 197, 267), _PWG_MEDIA_MM("jpn_kaku5_190x240mm", NULL, "EnvKaku5", 190, 240), _PWG_MEDIA_MM("jpn_kaku7_142x205mm", NULL, "EnvKaku7", 142, 205), _PWG_MEDIA_MM("jpn_kaku8_119x197mm", NULL, "EnvKaku8", 119, 197), _PWG_MEDIA_MM("jpn_chou4_90x205mm", NULL, "EnvChou4", 90, 205), _PWG_MEDIA_MM("jpn_hagaki_100x148mm", NULL, "Postcard", 100, 148), _PWG_MEDIA_MM("jpn_you4_105x235mm", NULL, "EnvYou4", 105, 235), _PWG_MEDIA_MM("jpn_you6_98x190mm", NULL, "EnvYou6", 98, 190), _PWG_MEDIA_MM("jpn_chou2_111.1x146mm", NULL, NULL, 111.1, 146), _PWG_MEDIA_MM("jpn_chou3_120x235mm", NULL, "EnvChou3", 120, 235), _PWG_MEDIA_MM("jpn_chou40_90x225mm", NULL, "EnvChou40", 90, 225), _PWG_MEDIA_MM("jpn_oufuku_148x200mm", NULL, "DoublePostcardRotated", 148, 200), _PWG_MEDIA_MM("jpn_kahu_240x322.1mm", NULL, "240x322mm", 240, 322.1), /* Chinese Standard Sheet Media Sizes */ _PWG_MEDIA_MM("prc_32k_97x151mm", NULL, "PRC32K", 97, 151), _PWG_MEDIA_MM("prc_1_102x165mm", NULL, "EnvPRC1", 102, 165), _PWG_MEDIA_MM("prc_2_102x176mm", NULL, "EnvPRC2", 102, 176), _PWG_MEDIA_MM("prc_4_110x208mm", NULL, "EnvPRC4", 110, 208), _PWG_MEDIA_MM("prc_8_120x309mm", NULL, "EnvPRC8", 120, 309), _PWG_MEDIA_MM("prc_6_120x320mm", NULL, NULL, 120, 320), _PWG_MEDIA_MM("prc_16k_146x215mm", NULL, "PRC16K", 146, 215), _PWG_MEDIA_MM("prc_7_160x230mm", NULL, "EnvPRC7", 160, 230), _PWG_MEDIA_MM("om_juuro-ku-kai_198x275mm", NULL, "198x275mm", 198, 275), _PWG_MEDIA_MM("om_pa-kai_267x389mm", NULL, "267x389mm", 267, 389), _PWG_MEDIA_MM("om_dai-pa-kai_275x395mm", NULL, "275x395mm", 275, 395), /* Chinese Standard Sheet Media Inch Sizes */ _PWG_MEDIA_IN("roc_16k_7.75x10.75in", NULL, "roc16k", 7.75, 10.75), _PWG_MEDIA_IN("roc_8k_10.75x15.5in", NULL, "roc8k", 10.75, 15.5), /* Other English Standard Sheet Media Sizes */ _PWG_MEDIA_IN("oe_photo-l_3.5x5in", NULL, "3.5x5", 3.5, 5), /* Other Metric Standard Sheet Media Sizes */ _PWG_MEDIA_MM("om_small-photo_100x150mm", NULL, "100x150mm", 100, 150), _PWG_MEDIA_MM("om_italian_110x230mm", NULL, "EnvItalian", 110, 230), _PWG_MEDIA_MM("om_large-photo_200x300", NULL, "200x300mm", 200, 300), _PWG_MEDIA_MM("om_folio_210x330mm", "folio", "Folio", 210, 330), _PWG_MEDIA_MM("om_folio-sp_215x315mm", NULL, "FolioSP", 215, 315), _PWG_MEDIA_MM("om_invite_220x220mm", NULL, "EnvInvite", 220, 220), _PWG_MEDIA_MM("om_small-photo_100x200mm", NULL, "100x200mm", 100, 200), /* Disc Sizes */ _PWG_MEDIA_MM("disc_standard_40x118mm", NULL, "Disc", 118, 118) }; /* * 'pwgFormatSizeName()' - Generate a PWG self-describing media size name. * * This function generates a PWG self-describing media size name of the form * "prefix_name_WIDTHxLENGTHunits". The prefix is typically "custom" or "roll" * for user-supplied sizes but can also be "disc", "iso", "jis", "jpn", "na", * "oe", "om", "prc", or "roc". A value of @code NULL@ automatically chooses * "oe" or "om" depending on the units. * * The size name may only contain lowercase letters, numbers, "-", and ".". If * @code NULL@ is passed, the size name will contain the formatted dimensions. * * The width and length are specified in hundredths of millimeters, equivalent * to 1/100000th of a meter or 1/2540th of an inch. The width, length, and * units used for the generated size name are calculated automatically if the * units string is @code NULL@, otherwise inches ("in") or millimeters ("mm") * are used. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - 1 on success, 0 on failure */ pwgFormatSizeName(char *keyword, /* I - Keyword buffer */ size_t keysize, /* I - Size of keyword buffer */ const char *prefix, /* I - Prefix for PWG size or @code NULL@ for automatic */ const char *name, /* I - Size name or @code NULL@ */ int width, /* I - Width of page in 2540ths */ int length, /* I - Length of page in 2540ths */ const char *units) /* I - Units - "in", "mm", or @code NULL@ for automatic */ { char usize[12 + 1 + 12 + 3], /* Unit size: NNNNNNNNNNNNxNNNNNNNNNNNNuu */ *uptr; /* Pointer into unit size */ char *(*format)(char *, size_t, int); /* Formatting function */ /* * Range check input... */ DEBUG_printf(("pwgFormatSize(keyword=%p, keysize=" CUPS_LLFMT ", prefix=\"%s\", name=\"%s\", width=%d, length=%d, units=\"%s\")", (void *)keyword, CUPS_LLCAST keysize, prefix, name, width, length, units)); if (keyword) *keyword = '\0'; if (!keyword || keysize < 32 || width < 0 || length < 0 || (units && strcmp(units, "in") && strcmp(units, "mm"))) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid media name arguments."), 1); return (0); } if (name) { /* * Validate name... */ const char *nameptr; /* Pointer into name */ for (nameptr = name; *nameptr; nameptr ++) if (!(*nameptr >= 'a' && *nameptr <= 'z') && !(*nameptr >= '0' && *nameptr <= '9') && *nameptr != '.' && *nameptr != '-') { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid media name arguments."), 1); return (0); } } else name = usize; if (prefix && !strcmp(prefix, "disc")) width = 4000; /* Disc sizes use hardcoded 40mm inner diameter */ if (!units) { if ((width % 635) == 0 && (length % 635) == 0) { /* * Use inches since the size is a multiple of 1/4 inch. */ units = "in"; } else { /* * Use millimeters since the size is not a multiple of 1/4 inch. */ units = "mm"; } } if (!strcmp(units, "in")) { format = pwg_format_inches; if (!prefix) prefix = "oe"; } else { format = pwg_format_millimeters; if (!prefix) prefix = "om"; } /* * Format the size string... */ uptr = usize; (*format)(uptr, sizeof(usize) - (size_t)(uptr - usize), width); uptr += strlen(uptr); *uptr++ = 'x'; (*format)(uptr, sizeof(usize) - (size_t)(uptr - usize), length); uptr += strlen(uptr); /* * Safe because usize can hold up to 12 + 1 + 12 + 4 bytes. */ memcpy(uptr, units, 3); /* * Format the name... */ snprintf(keyword, keysize, "%s_%s_%s", prefix, name, usize); return (1); } /* * 'pwgInitSize()' - Initialize a pwg_size_t structure using IPP Job Template * attributes. * * This function initializes a pwg_size_t structure from an IPP "media" or * "media-col" attribute in the specified IPP message. 0 is returned if neither * attribute is found in the message or the values are not valid. * * The "margins_set" variable is initialized to 1 if any "media-xxx-margin" * member attribute was specified in the "media-col" Job Template attribute, * otherwise it is initialized to 0. * * @since CUPS 1.7/macOS 10.9@ */ int /* O - 1 if size was initialized, 0 otherwise */ pwgInitSize(pwg_size_t *size, /* I - Size to initialize */ ipp_t *job, /* I - Job template attributes */ int *margins_set) /* O - 1 if margins were set, 0 otherwise */ { ipp_attribute_t *media, /* media attribute */ *media_bottom_margin, /* media-bottom-margin member attribute */ *media_col, /* media-col attribute */ *media_left_margin, /* media-left-margin member attribute */ *media_right_margin, /* media-right-margin member attribute */ *media_size, /* media-size member attribute */ *media_top_margin, /* media-top-margin member attribute */ *x_dimension, /* x-dimension member attribute */ *y_dimension; /* y-dimension member attribute */ pwg_media_t *pwg; /* PWG media value */ /* * Range check input... */ if (!size || !job || !margins_set) return (0); /* * Look for media-col and then media... */ memset(size, 0, sizeof(pwg_size_t)); *margins_set = 0; if ((media_col = ippFindAttribute(job, "media-col", IPP_TAG_BEGIN_COLLECTION)) != NULL) { /* * Got media-col, look for media-size member attribute... */ if ((media_size = ippFindAttribute(media_col->values[0].collection, "media-size", IPP_TAG_BEGIN_COLLECTION)) != NULL) { /* * Got media-size, look for x-dimension and y-dimension member * attributes... */ x_dimension = ippFindAttribute(media_size->values[0].collection, "x-dimension", IPP_TAG_INTEGER); y_dimension = ippFindAttribute(media_size->values[0].collection, "y-dimension", IPP_TAG_INTEGER); if (x_dimension && y_dimension) { size->width = x_dimension->values[0].integer; size->length = y_dimension->values[0].integer; } else if (!x_dimension) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Missing x-dimension in media-size."), 1); return (0); } else if (!y_dimension) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Missing y-dimension in media-size."), 1); return (0); } } else { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Missing media-size in media-col."), 1); return (0); } /* media-*-margin */ media_bottom_margin = ippFindAttribute(media_col->values[0].collection, "media-bottom-margin", IPP_TAG_INTEGER); media_left_margin = ippFindAttribute(media_col->values[0].collection, "media-left-margin", IPP_TAG_INTEGER); media_right_margin = ippFindAttribute(media_col->values[0].collection, "media-right-margin", IPP_TAG_INTEGER); media_top_margin = ippFindAttribute(media_col->values[0].collection, "media-top-margin", IPP_TAG_INTEGER); if (media_bottom_margin && media_left_margin && media_right_margin && media_top_margin) { *margins_set = 1; size->bottom = media_bottom_margin->values[0].integer; size->left = media_left_margin->values[0].integer; size->right = media_right_margin->values[0].integer; size->top = media_top_margin->values[0].integer; } } else { if ((media = ippFindAttribute(job, "media", IPP_TAG_NAME)) == NULL) if ((media = ippFindAttribute(job, "media", IPP_TAG_KEYWORD)) == NULL) if ((media = ippFindAttribute(job, "PageSize", IPP_TAG_NAME)) == NULL) media = ippFindAttribute(job, "PageRegion", IPP_TAG_NAME); if (media && media->values[0].string.text) { const char *name = media->values[0].string.text; /* Name string */ if ((pwg = pwgMediaForPWG(name)) == NULL) { /* * Not a PWG name, try a legacy name... */ if ((pwg = pwgMediaForLegacy(name)) == NULL) { /* * Not a legacy name, try a PPD name... */ const char *suffix; /* Suffix on media string */ pwg = pwgMediaForPPD(name); if (pwg && (suffix = name + strlen(name) - 10 /* .FullBleed */) > name && !_cups_strcasecmp(suffix, ".FullBleed")) { /* * Indicate that margins are set with the default values of 0. */ *margins_set = 1; } } } if (pwg) { size->width = pwg->width; size->length = pwg->length; } else { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unsupported media value."), 1); return (0); } } else { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Missing media or media-col."), 1); return (0); } } return (1); } /* * 'pwgMediaForLegacy()' - Find a PWG media size by ISO/IPP legacy name. * * The "name" argument specifies the legacy ISO media size name, for example * "iso-a4" or "na-letter". * * @since CUPS 1.7/macOS 10.9@ */ pwg_media_t * /* O - Matching size or NULL */ pwgMediaForLegacy(const char *legacy) /* I - Legacy size name */ { pwg_media_t key; /* Search key */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ /* * Range check input... */ if (!legacy) return (NULL); /* * Build the lookup table for PWG names as needed... */ if (!cg->leg_size_lut) { int i; /* Looping var */ pwg_media_t *size; /* Current size */ cg->leg_size_lut = cupsArrayNew((cups_array_func_t)pwg_compare_legacy, NULL); for (i = (int)(sizeof(cups_pwg_media) / sizeof(cups_pwg_media[0])), size = (pwg_media_t *)cups_pwg_media; i > 0; i --, size ++) if (size->legacy) cupsArrayAdd(cg->leg_size_lut, size); } /* * Lookup the name... */ key.legacy = legacy; return ((pwg_media_t *)cupsArrayFind(cg->leg_size_lut, &key)); } /* * 'pwgMediaForPPD()' - Find a PWG media size by Adobe PPD name. * * The "ppd" argument specifies an Adobe page size name as defined in Table B.1 * of the Adobe PostScript Printer Description File Format Specification Version * 4.3. * * If the name is non-standard, the returned PWG media size is stored in * thread-local storage and is overwritten by each call to the function in the * thread. Custom names can be of the form "Custom.WIDTHxLENGTH[units]" or * "WIDTHxLENGTH[units]". * * @since CUPS 1.7/macOS 10.9@ */ pwg_media_t * /* O - Matching size or NULL */ pwgMediaForPPD(const char *ppd) /* I - PPD size name */ { pwg_media_t key, /* Search key */ *size; /* Matching size */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ /* * Range check input... */ if (!ppd) return (NULL); /* * Build the lookup table for PWG names as needed... */ if (!cg->ppd_size_lut) { int i; /* Looping var */ cg->ppd_size_lut = cupsArrayNew((cups_array_func_t)pwg_compare_ppd, NULL); for (i = (int)(sizeof(cups_pwg_media) / sizeof(cups_pwg_media[0])), size = (pwg_media_t *)cups_pwg_media; i > 0; i --, size ++) if (size->ppd) cupsArrayAdd(cg->ppd_size_lut, size); } /* * Lookup the name... */ key.ppd = ppd; if ((size = (pwg_media_t *)cupsArrayFind(cg->ppd_size_lut, &key)) == NULL) { /* * See if the name is of the form: * * [Custom.]WIDTHxLENGTH[.FullBleed] - Size in points/inches [borderless] * [Custom.]WIDTHxLENGTHcm[.FullBleed] - Size in centimeters [borderless] * [Custom.]WIDTHxLENGTHft[.FullBleed] - Size in feet [borderless] * [Custom.]WIDTHxLENGTHin[.FullBleed] - Size in inches [borderless] * [Custom.]WIDTHxLENGTHm[.FullBleed] - Size in meters [borderless] * [Custom.]WIDTHxLENGTHmm[.FullBleed] - Size in millimeters [borderless] * [Custom.]WIDTHxLENGTHpt[.FullBleed] - Size in points [borderless] */ int w, l, /* Width and length of page */ numer, /* Unit scaling factor */ denom; /* ... */ char *ptr; /* Pointer into name */ const char *units; /* Pointer to units */ int custom; /* Custom page size? */ if (!_cups_strncasecmp(ppd, "Custom.", 7)) { custom = 1; numer = 2540; denom = 72; ptr = (char *)ppd + 7; } else { custom = 0; numer = 2540; denom = 1; ptr = (char *)ppd; } /* * Find any units in the size... */ units = strchr(ptr, '.'); while (units && isdigit(units[1] & 255)) units = strchr(units + 1, '.'); if (units) units -= 2; else units = ptr + strlen(ptr) - 2; if (units > ptr) { if (isdigit(*units & 255) || *units == '.') units ++; if (!_cups_strncasecmp(units, "cm", 2)) { numer = 1000; denom = 1; } else if (!_cups_strncasecmp(units, "ft", 2)) { numer = 2540 * 12; denom = 1; } else if (!_cups_strncasecmp(units, "in", 2)) { numer = 2540; denom = 1; } else if (!_cups_strncasecmp(units, "mm", 2)) { numer = 100; denom = 1; } else if (*units == 'm' || *units == 'M') { numer = 100000; denom = 1; } else if (!_cups_strncasecmp(units, "pt", 2)) { numer = 2540; denom = 72; } } w = pwg_scan_measurement(ptr, &ptr, numer, denom); if (ptr && ptr > ppd && *ptr == 'x') { l = pwg_scan_measurement(ptr + 1, &ptr, numer, denom); if (ptr) { /* * Not a standard size; convert it to a PWG custom name of the form: * * [oe|om]_WIDTHxHEIGHTuu_WIDTHxHEIGHTuu */ char wstr[32], lstr[32]; /* Width and length as strings */ size = &(cg->pwg_media); size->width = w; size->length = l; size->pwg = cg->pwg_name; pwgFormatSizeName(cg->pwg_name, sizeof(cg->pwg_name), custom ? "custom" : NULL, custom ? ppd + 7 : NULL, size->width, size->length, NULL); if ((w % 635) == 0 && (l % 635) == 0) snprintf(cg->ppd_name, sizeof(cg->ppd_name), "%sx%s", pwg_format_inches(wstr, sizeof(wstr), w), pwg_format_inches(lstr, sizeof(lstr), l)); else snprintf(cg->ppd_name, sizeof(cg->ppd_name), "%sx%smm", pwg_format_millimeters(wstr, sizeof(wstr), w), pwg_format_millimeters(lstr, sizeof(lstr), l)); size->ppd = cg->ppd_name; } } } return (size); } /* * 'pwgMediaForPWG()' - Find a PWG media size by 5101.1 self-describing name. * * The "pwg" argument specifies a self-describing media size name of the form * "prefix_name_WIDTHxLENGTHunits" as defined in PWG 5101.1. * * If the name is non-standard, the returned PWG media size is stored in * thread-local storage and is overwritten by each call to the function in the * thread. * * @since CUPS 1.7/macOS 10.9@ */ pwg_media_t * /* O - Matching size or NULL */ pwgMediaForPWG(const char *pwg) /* I - PWG size name */ { char *ptr; /* Pointer into name */ pwg_media_t key, /* Search key */ *size; /* Matching size */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ /* * Range check input... */ if (!pwg) return (NULL); /* * Build the lookup table for PWG names as needed... */ if (!cg->pwg_size_lut) { int i; /* Looping var */ cg->pwg_size_lut = cupsArrayNew((cups_array_func_t)pwg_compare_pwg, NULL); for (i = (int)(sizeof(cups_pwg_media) / sizeof(cups_pwg_media[0])), size = (pwg_media_t *)cups_pwg_media; i > 0; i --, size ++) cupsArrayAdd(cg->pwg_size_lut, size); } /* * Lookup the name... */ key.pwg = pwg; if ((size = (pwg_media_t *)cupsArrayFind(cg->pwg_size_lut, &key)) == NULL && (ptr = (char *)strchr(pwg, '_')) != NULL && (ptr = (char *)strchr(ptr + 1, '_')) != NULL) { /* * Try decoding the self-describing name of the form: * * class_name_WWWxHHHin * class_name_WWWxHHHmm */ int w, l; /* Width and length of page */ int numer; /* Scale factor for units */ const char *units = ptr + strlen(ptr) - 2; /* Units from size */ ptr ++; if (units >= ptr && !strcmp(units, "in")) numer = 2540; else numer = 100; w = pwg_scan_measurement(ptr, &ptr, numer, 1); if (ptr && *ptr == 'x') { l = pwg_scan_measurement(ptr + 1, &ptr, numer, 1); if (ptr) { char wstr[32], lstr[32]; /* Width and length strings */ if (!strncmp(pwg, "disc_", 5)) w = l; /* Make the media size OUTERxOUTER */ size = &(cg->pwg_media); size->width = w; size->length = l; strlcpy(cg->pwg_name, pwg, sizeof(cg->pwg_name)); size->pwg = cg->pwg_name; if (numer == 100) snprintf(cg->ppd_name, sizeof(cg->ppd_name), "%sx%smm", pwg_format_millimeters(wstr, sizeof(wstr), w), pwg_format_millimeters(lstr, sizeof(lstr), l)); else snprintf(cg->ppd_name, sizeof(cg->ppd_name), "%sx%s", pwg_format_inches(wstr, sizeof(wstr), w), pwg_format_inches(lstr, sizeof(lstr), l)); size->ppd = cg->ppd_name; } } } return (size); } /* * 'pwgMediaForSize()' - Get the PWG media size for the given dimensions. * * The "width" and "length" are in hundredths of millimeters, equivalent to * 1/100000th of a meter or 1/2540th of an inch. * * If the dimensions are non-standard, the returned PWG media size is stored in * thread-local storage and is overwritten by each call to the function in the * thread. * * @since CUPS 1.7/macOS 10.9@ */ pwg_media_t * /* O - PWG media name */ pwgMediaForSize(int width, /* I - Width in hundredths of millimeters */ int length) /* I - Length in hundredths of millimeters */ { /* * Adobe uses a size matching algorithm with an epsilon of 5 points, which * is just about 176/2540ths... */ return (_pwgMediaNearSize(width, length, 176)); } /* * '_pwgMediaNearSize()' - Get the PWG media size within the given tolerance. */ pwg_media_t * /* O - PWG media name */ _pwgMediaNearSize(int width, /* I - Width in hundredths of millimeters */ int length, /* I - Length in hundredths of millimeters */ int epsilon) /* I - Match within this tolernace. PWG units */ { int i; /* Looping var */ pwg_media_t *media, /* Current media */ *best_media = NULL; /* Best match */ int dw, dl, /* Difference in width and length */ best_dw = 999, /* Best difference in width and length */ best_dl = 999; char wstr[32], lstr[32]; /* Width and length as strings */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ /* * Range check input... */ if (width <= 0 || length <= 0) return (NULL); /* * Look for a standard size... */ for (i = (int)(sizeof(cups_pwg_media) / sizeof(cups_pwg_media[0])), media = (pwg_media_t *)cups_pwg_media; i > 0; i --, media ++) { dw = abs(media->width - width); dl = abs(media->length - length); if (!dw && !dl) return (media); else if (dw <= epsilon && dl <= epsilon) { if (dw <= best_dw && dl <= best_dl) { best_media = media; best_dw = dw; best_dl = dl; } } } if (best_media) return (best_media); /* * Not a standard size; convert it to a PWG custom name of the form: * * custom_WIDTHxHEIGHTuu_WIDTHxHEIGHTuu */ pwgFormatSizeName(cg->pwg_name, sizeof(cg->pwg_name), "custom", NULL, width, length, NULL); cg->pwg_media.pwg = cg->pwg_name; cg->pwg_media.width = width; cg->pwg_media.length = length; if ((width % 635) == 0 && (length % 635) == 0) snprintf(cg->ppd_name, sizeof(cg->ppd_name), "%sx%s", pwg_format_inches(wstr, sizeof(wstr), width), pwg_format_inches(lstr, sizeof(lstr), length)); else snprintf(cg->ppd_name, sizeof(cg->ppd_name), "%sx%smm", pwg_format_millimeters(wstr, sizeof(wstr), width), pwg_format_millimeters(lstr, sizeof(lstr), length)); cg->pwg_media.ppd = cg->ppd_name; return (&(cg->pwg_media)); } /* * '_pwgMediaTable()' - Return the internal media size table. */ const pwg_media_t * /* O - Pointer to first entry */ _pwgMediaTable(size_t *num_media) /* O - Number of entries */ { *num_media = sizeof(cups_pwg_media) / sizeof(cups_pwg_media[0]); return (cups_pwg_media); } /* * 'pwg_compare_legacy()' - Compare two sizes using the legacy names. */ static int /* O - Result of comparison */ pwg_compare_legacy(pwg_media_t *a, /* I - First size */ pwg_media_t *b) /* I - Second size */ { return (strcmp(a->legacy, b->legacy)); } /* * 'pwg_compare_ppd()' - Compare two sizes using the PPD names. */ static int /* O - Result of comparison */ pwg_compare_ppd(pwg_media_t *a, /* I - First size */ pwg_media_t *b) /* I - Second size */ { return (strcmp(a->ppd, b->ppd)); } /* * 'pwg_compare_pwg()' - Compare two sizes using the PWG names. */ static int /* O - Result of comparison */ pwg_compare_pwg(pwg_media_t *a, /* I - First size */ pwg_media_t *b) /* I - Second size */ { return (strcmp(a->pwg, b->pwg)); } /* * 'pwg_format_inches()' - Convert and format PWG units as inches. */ static char * /* O - String */ pwg_format_inches(char *buf, /* I - Buffer */ size_t bufsize, /* I - Size of buffer */ int val) /* I - Value in hundredths of millimeters */ { int thousandths, /* Thousandths of inches */ integer, /* Integer portion */ fraction; /* Fractional portion */ /* * Convert hundredths of millimeters to thousandths of inches and round to * the nearest thousandth. */ thousandths = (val * 1000 + 1270) / 2540; integer = thousandths / 1000; fraction = thousandths % 1000; /* * Format as a pair of integers (avoids locale stuff), avoiding trailing * zeros... */ if (fraction == 0) snprintf(buf, bufsize, "%d", integer); else if (fraction % 10) snprintf(buf, bufsize, "%d.%03d", integer, fraction); else if (fraction % 100) snprintf(buf, bufsize, "%d.%02d", integer, fraction / 10); else snprintf(buf, bufsize, "%d.%01d", integer, fraction / 100); return (buf); } /* * 'pwg_format_millimeters()' - Convert and format PWG units as millimeters. */ static char * /* O - String */ pwg_format_millimeters(char *buf, /* I - Buffer */ size_t bufsize, /* I - Size of buffer */ int val) /* I - Value in hundredths of millimeters */ { int integer, /* Integer portion */ fraction; /* Fractional portion */ /* * Convert hundredths of millimeters to integer and fractional portions. */ integer = val / 100; fraction = val % 100; /* * Format as a pair of integers (avoids locale stuff), avoiding trailing * zeros... */ if (fraction == 0) snprintf(buf, bufsize, "%d", integer); else if (fraction % 10) snprintf(buf, bufsize, "%d.%02d", integer, fraction); else snprintf(buf, bufsize, "%d.%01d", integer, fraction / 10); return (buf); } /* * 'pwg_scan_measurement()' - Scan a measurement in inches or millimeters. * * The "factor" argument specifies the scale factor for the units to convert to * hundredths of millimeters. The returned value is NOT rounded but is an * exact conversion of the fraction value (no floating point is used). */ static int /* O - Hundredths of millimeters */ pwg_scan_measurement( const char *buf, /* I - Number string */ char **bufptr, /* O - First byte after the number */ int numer, /* I - Numerator from units */ int denom) /* I - Denominator from units */ { int value = 0, /* Measurement value */ fractional = 0, /* Fractional value */ divisor = 1, /* Fractional divisor */ digits = 10 * numer * denom; /* Maximum fractional value to read */ /* * Scan integer portion... */ while (*buf >= '0' && *buf <= '9') value = value * 10 + (*buf++) - '0'; if (*buf == '.') { /* * Scan fractional portion... */ buf ++; while (divisor < digits && *buf >= '0' && *buf <= '9') { fractional = fractional * 10 + (*buf++) - '0'; divisor *= 10; } /* * Skip trailing digits that won't contribute... */ while (*buf >= '0' && *buf <= '9') buf ++; } if (bufptr) *bufptr = (char *)buf; return (value * numer / denom + fractional * numer / denom / divisor); } cups-2.2.7/cups/pwg-private.h000664 000765 000024 00000002456 13255074424 016552 0ustar00msweetstaff000000 000000 /* * Private PWG media API definitions for CUPS. * * Copyright 2009-2016 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_PWG_PRIVATE_H_ # define _CUPS_PWG_PRIVATE_H_ /* * Include necessary headers... */ # include /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Functions... */ extern void _pwgGenerateSize(char *keyword, size_t keysize, const char *prefix, const char *name, int width, int length) _CUPS_INTERNAL_MSG("Use pwgFormatSizeName instead."); extern int _pwgInitSize(pwg_size_t *size, ipp_t *job, int *margins_set) _CUPS_INTERNAL_MSG("Use pwgInitSize instead."); extern const pwg_media_t *_pwgMediaTable(size_t *num_media); extern pwg_media_t *_pwgMediaNearSize(int width, int length, int epsilon); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_PWG_PRIVATE_H_ */ cups-2.2.7/cups/pwg.h000664 000765 000024 00000004552 13255074424 015101 0ustar00msweetstaff000000 000000 /* * PWG media API definitions for CUPS. * * Copyright 2009-2017 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_PWG_H_ # define _CUPS_PWG_H_ /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Macros... */ /* Convert from points to hundredths of millimeters */ # define PWG_FROM_POINTS(n) (int)(((n) * 2540 + 36) / 72) /* Convert from hundredths of millimeters to points */ # define PWG_TO_POINTS(n) ((n) * 72.0 / 2540.0) /* * Types and structures... */ typedef struct pwg_map_s /**** Map element - PPD to/from PWG @exclude all@ */ { char *pwg, /* PWG media keyword */ *ppd; /* PPD option keyword */ } pwg_map_t; typedef struct pwg_media_s /**** Common media size data ****/ { const char *pwg, /* PWG 5101.1 "self describing" name */ *legacy, /* IPP/ISO legacy name */ *ppd; /* Standard Adobe PPD name */ int width, /* Width in 2540ths */ length; /* Length in 2540ths */ } pwg_media_t; typedef struct pwg_size_s /**** Size element - PPD to/from PWG @exclude all@ */ { pwg_map_t map; /* Map element */ int width, /* Width in 2540ths */ length, /* Length in 2540ths */ left, /* Left margin in 2540ths */ bottom, /* Bottom margin in 2540ths */ right, /* Right margin in 2540ths */ top; /* Top margin in 2540ths */ } pwg_size_t; /* * Functions... */ extern int pwgFormatSizeName(char *keyword, size_t keysize, const char *prefix, const char *name, int width, int length, const char *units) _CUPS_API_1_7; extern int pwgInitSize(pwg_size_t *size, ipp_t *job, int *margins_set) _CUPS_API_1_7; extern pwg_media_t *pwgMediaForLegacy(const char *legacy) _CUPS_API_1_7; extern pwg_media_t *pwgMediaForPPD(const char *ppd) _CUPS_API_1_7; extern pwg_media_t *pwgMediaForPWG(const char *pwg) _CUPS_API_1_7; extern pwg_media_t *pwgMediaForSize(int width, int length) _CUPS_API_1_7; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_PWG_H_ */ cups-2.2.7/cups/raster-private.h000664 000765 000024 00000003010 13255074424 017240 0ustar00msweetstaff000000 000000 /* * Private image library definitions for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1993-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_RASTER_PRIVATE_H_ # define _CUPS_RASTER_PRIVATE_H_ /* * Include necessary headers... */ # include "raster.h" # include # include # include # ifdef WIN32 # include # include /* for htonl() definition */ # else # include # include # endif /* WIN32 */ /* * min/max macros... */ # ifndef max # define max(a,b) ((a) > (b) ? (a) : (b)) # endif /* !max */ # ifndef min # define min(a,b) ((a) < (b) ? (a) : (b)) # endif /* !min */ /* * Prototypes... */ extern int _cupsRasterExecPS(cups_page_header2_t *h, int *preferred_bits, const char *code) __attribute__((nonnull(3))); extern void _cupsRasterAddError(const char *f, ...) __attribute__((__format__(__printf__, 1, 2))); extern void _cupsRasterClearError(void); #endif /* !_CUPS_RASTER_PRIVATE_H_ */ cups-2.2.7/cups/raster.h000664 000765 000024 00000044434 13255074424 015607 0ustar00msweetstaff000000 000000 /* * Raster file definitions for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * This file is part of the CUPS Imaging library. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_RASTER_H_ # define _CUPS_RASTER_H_ /* * Include necessary headers... */ # include "cups.h" # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Every non-PostScript printer driver that supports raster images * should use the application/vnd.cups-raster image file format. * Since both the PostScript RIP (pstoraster, based on GNU/GPL * Ghostscript) and Image RIP (imagetoraster, located in the filter * directory) use it, using this format saves you a lot of work. * Also, the PostScript RIP passes any printer options that are in * a PS file to your driver this way as well... */ /* * Constants... */ # define CUPS_RASTER_SYNC 0x52615333 /* RaS3 */ # define CUPS_RASTER_REVSYNC 0x33536152 /* 3SaR */ # define CUPS_RASTER_SYNCv1 0x52615374 /* RaSt */ # define CUPS_RASTER_REVSYNCv1 0x74536152 /* tSaR */ # define CUPS_RASTER_SYNCv2 0x52615332 /* RaS2 */ # define CUPS_RASTER_REVSYNCv2 0x32536152 /* 2SaR */ # define CUPS_RASTER_SYNCapple 0x554E4952 /* UNIR */ # define CUPS_RASTER_REVSYNCapple 0x52494E55 /* RINU */ # define CUPS_RASTER_SYNC_PWG CUPS_RASTER_SYNCv2 /* * The following definition can be used to determine if the * colorimetric colorspaces (CIEXYZ, CIELAB, and ICCn) are * defined... */ # define CUPS_RASTER_HAVE_COLORIMETRIC 1 /* * The following definition can be used to determine if the * device colorspaces (DEVICEn) are defined... */ # define CUPS_RASTER_HAVE_DEVICE 1 /* * The following definition can be used to determine if PWG Raster is supported. */ # define CUPS_RASTER_HAVE_PWGRASTER 1 /* * The following definition can be used to determine if Apple Raster is * supported (beta). */ # define CUPS_RASTER_HAVE_APPLERASTER 1 /* * The following PWG 5102.4 definitions specify indices into the * cupsInteger[] array in the raster header. */ # define CUPS_RASTER_PWG_TotalPageCount 0 # define CUPS_RASTER_PWG_CrossFeedTransform 1 # define CUPS_RASTER_PWG_FeedTransform 2 # define CUPS_RASTER_PWG_ImageBoxLeft 3 # define CUPS_RASTER_PWG_ImageBoxTop 4 # define CUPS_RASTER_PWG_ImageBoxRight 5 # define CUPS_RASTER_PWG_ImageBoxBottom 6 # define CUPS_RASTER_PWG_AlternatePrimary 7 # define CUPS_RASTER_PWG_PrintQuality 8 # define CUPS_RASTER_PWG_VendorIdentifier 14 # define CUPS_RASTER_PWG_VendorLength 15 /* * Types... */ typedef enum cups_adv_e /**** AdvanceMedia attribute values ****/ { CUPS_ADVANCE_NONE = 0, /* Never advance the roll */ CUPS_ADVANCE_FILE = 1, /* Advance the roll after this file */ CUPS_ADVANCE_JOB = 2, /* Advance the roll after this job */ CUPS_ADVANCE_SET = 3, /* Advance the roll after this set */ CUPS_ADVANCE_PAGE = 4 /* Advance the roll after this page */ } cups_adv_t; typedef enum cups_bool_e /**** Boolean type ****/ { CUPS_FALSE = 0, /* Logical false */ CUPS_TRUE = 1 /* Logical true */ } cups_bool_t; typedef enum cups_cspace_e /**** cupsColorSpace attribute values ****/ { CUPS_CSPACE_W = 0, /* Luminance (DeviceGray, gamma 2.2 by default) */ CUPS_CSPACE_RGB = 1, /* Red, green, blue (DeviceRGB, sRGB by default) */ CUPS_CSPACE_RGBA = 2, /* Red, green, blue, alpha (DeviceRGB, sRGB by default) */ CUPS_CSPACE_K = 3, /* Black (DeviceK) */ CUPS_CSPACE_CMY = 4, /* Cyan, magenta, yellow (DeviceCMY) */ CUPS_CSPACE_YMC = 5, /* Yellow, magenta, cyan @deprecated@ */ CUPS_CSPACE_CMYK = 6, /* Cyan, magenta, yellow, black (DeviceCMYK) */ CUPS_CSPACE_YMCK = 7, /* Yellow, magenta, cyan, black @deprecated@ */ CUPS_CSPACE_KCMY = 8, /* Black, cyan, magenta, yellow @deprecated@ */ CUPS_CSPACE_KCMYcm = 9, /* Black, cyan, magenta, yellow, light-cyan, light-magenta @deprecated@ */ CUPS_CSPACE_GMCK = 10, /* Gold, magenta, yellow, black @deprecated@ */ CUPS_CSPACE_GMCS = 11, /* Gold, magenta, yellow, silver @deprecated@ */ CUPS_CSPACE_WHITE = 12, /* White ink (as black) @deprecated@ */ CUPS_CSPACE_GOLD = 13, /* Gold foil @deprecated@ */ CUPS_CSPACE_SILVER = 14, /* Silver foil @deprecated@ */ CUPS_CSPACE_CIEXYZ = 15, /* CIE XYZ @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_CIELab = 16, /* CIE Lab @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_RGBW = 17, /* Red, green, blue, white (DeviceRGB, sRGB by default) @since CUPS 1.2/macOS 10.5@ */ CUPS_CSPACE_SW = 18, /* Luminance (gamma 2.2) @since CUPS 1.4.5@ */ CUPS_CSPACE_SRGB = 19, /* Red, green, blue (sRGB) @since CUPS 1.4.5@ */ CUPS_CSPACE_ADOBERGB = 20, /* Red, green, blue (Adobe RGB) @since CUPS 1.4.5@ */ CUPS_CSPACE_ICC1 = 32, /* ICC-based, 1 color @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICC2 = 33, /* ICC-based, 2 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICC3 = 34, /* ICC-based, 3 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICC4 = 35, /* ICC-based, 4 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICC5 = 36, /* ICC-based, 5 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICC6 = 37, /* ICC-based, 6 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICC7 = 38, /* ICC-based, 7 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICC8 = 39, /* ICC-based, 8 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICC9 = 40, /* ICC-based, 9 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICCA = 41, /* ICC-based, 10 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICCB = 42, /* ICC-based, 11 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICCC = 43, /* ICC-based, 12 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICCD = 44, /* ICC-based, 13 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICCE = 45, /* ICC-based, 14 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_ICCF = 46, /* ICC-based, 15 colors @since CUPS 1.1.19/macOS 10.3@ */ CUPS_CSPACE_DEVICE1 = 48, /* DeviceN, 1 color @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICE2 = 49, /* DeviceN, 2 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICE3 = 50, /* DeviceN, 3 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICE4 = 51, /* DeviceN, 4 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICE5 = 52, /* DeviceN, 5 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICE6 = 53, /* DeviceN, 6 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICE7 = 54, /* DeviceN, 7 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICE8 = 55, /* DeviceN, 8 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICE9 = 56, /* DeviceN, 9 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICEA = 57, /* DeviceN, 10 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICEB = 58, /* DeviceN, 11 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICEC = 59, /* DeviceN, 12 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICED = 60, /* DeviceN, 13 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICEE = 61, /* DeviceN, 14 colors @since CUPS 1.4.5@ */ CUPS_CSPACE_DEVICEF = 62 /* DeviceN, 15 colors @since CUPS 1.4.5@ */ } cups_cspace_t; typedef enum cups_cut_e /**** CutMedia attribute values ****/ { CUPS_CUT_NONE = 0, /* Never cut the roll */ CUPS_CUT_FILE = 1, /* Cut the roll after this file */ CUPS_CUT_JOB = 2, /* Cut the roll after this job */ CUPS_CUT_SET = 3, /* Cut the roll after this set */ CUPS_CUT_PAGE = 4 /* Cut the roll after this page */ } cups_cut_t; typedef enum cups_edge_e /**** LeadingEdge attribute values ****/ { CUPS_EDGE_TOP = 0, /* Leading edge is the top of the page */ CUPS_EDGE_RIGHT = 1, /* Leading edge is the right of the page */ CUPS_EDGE_BOTTOM = 2, /* Leading edge is the bottom of the page */ CUPS_EDGE_LEFT = 3 /* Leading edge is the left of the page */ } cups_edge_t; typedef enum cups_jog_e /**** Jog attribute values ****/ { CUPS_JOG_NONE = 0, /* Never move pages */ CUPS_JOG_FILE = 1, /* Move pages after this file */ CUPS_JOG_JOB = 2, /* Move pages after this job */ CUPS_JOG_SET = 3 /* Move pages after this set */ } cups_jog_t; enum cups_mode_e /**** cupsRasterOpen modes ****/ { CUPS_RASTER_READ = 0, /* Open stream for reading */ CUPS_RASTER_WRITE = 1, /* Open stream for writing */ CUPS_RASTER_WRITE_COMPRESSED = 2, /* Open stream for compressed writing @since CUPS 1.3/macOS 10.5@ */ CUPS_RASTER_WRITE_PWG = 3, /* Open stream for compressed writing in PWG Raster mode @since CUPS 1.5/macOS 10.7@ */ CUPS_RASTER_WRITE_APPLE = 4 /* Open stream for compressed writing in AppleRaster mode (beta) @private@ */ }; typedef enum cups_mode_e cups_mode_t; /**** cupsRasterOpen modes ****/ typedef enum cups_order_e /**** cupsColorOrder attribute values ****/ { CUPS_ORDER_CHUNKED = 0, /* CMYK CMYK CMYK ... */ CUPS_ORDER_BANDED = 1, /* CCC MMM YYY KKK ... */ CUPS_ORDER_PLANAR = 2 /* CCC ... MMM ... YYY ... KKK ... */ } cups_order_t; typedef enum cups_orient_e /**** Orientation attribute values ****/ { CUPS_ORIENT_0 = 0, /* Don't rotate the page */ CUPS_ORIENT_90 = 1, /* Rotate the page counter-clockwise */ CUPS_ORIENT_180 = 2, /* Turn the page upside down */ CUPS_ORIENT_270 = 3 /* Rotate the page clockwise */ } cups_orient_t; /* * The page header structure contains the standard PostScript page device * dictionary, along with some CUPS-specific parameters that are provided * by the RIPs... * * The API supports a "version 1" (from CUPS 1.0 and 1.1) and a "version 2" * (from CUPS 1.2 and higher) page header, for binary compatibility. */ typedef struct cups_page_header_s /**** Version 1 page header @deprecated@ ****/ { /**** Standard Page Device Dictionary String Values ****/ char MediaClass[64]; /* MediaClass string */ char MediaColor[64]; /* MediaColor string */ char MediaType[64]; /* MediaType string */ char OutputType[64]; /* OutputType string */ /**** Standard Page Device Dictionary Integer Values ****/ unsigned AdvanceDistance; /* AdvanceDistance value in points */ cups_adv_t AdvanceMedia; /* AdvanceMedia value (@link cups_adv_t@) */ cups_bool_t Collate; /* Collated copies value */ cups_cut_t CutMedia; /* CutMedia value (@link cups_cut_t@) */ cups_bool_t Duplex; /* Duplexed (double-sided) value */ unsigned HWResolution[2]; /* Resolution in dots-per-inch */ unsigned ImagingBoundingBox[4]; /* Pixel region that is painted (points, left, bottom, right, top) */ cups_bool_t InsertSheet; /* InsertSheet value */ cups_jog_t Jog; /* Jog value (@link cups_jog_t@) */ cups_edge_t LeadingEdge; /* LeadingEdge value (@link cups_edge_t@) */ unsigned Margins[2]; /* Lower-lefthand margins in points */ cups_bool_t ManualFeed; /* ManualFeed value */ unsigned MediaPosition; /* MediaPosition value */ unsigned MediaWeight; /* MediaWeight value in grams/m^2 */ cups_bool_t MirrorPrint; /* MirrorPrint value */ cups_bool_t NegativePrint; /* NegativePrint value */ unsigned NumCopies; /* Number of copies to produce */ cups_orient_t Orientation; /* Orientation value (@link cups_orient_t@) */ cups_bool_t OutputFaceUp; /* OutputFaceUp value */ unsigned PageSize[2]; /* Width and length of page in points */ cups_bool_t Separations; /* Separations value */ cups_bool_t TraySwitch; /* TraySwitch value */ cups_bool_t Tumble; /* Tumble value */ /**** CUPS Page Device Dictionary Values ****/ unsigned cupsWidth; /* Width of page image in pixels */ unsigned cupsHeight; /* Height of page image in pixels */ unsigned cupsMediaType; /* Media type code */ unsigned cupsBitsPerColor; /* Number of bits for each color */ unsigned cupsBitsPerPixel; /* Number of bits for each pixel */ unsigned cupsBytesPerLine; /* Number of bytes per line */ cups_order_t cupsColorOrder; /* Order of colors */ cups_cspace_t cupsColorSpace; /* True colorspace */ unsigned cupsCompression; /* Device compression to use */ unsigned cupsRowCount; /* Rows per band */ unsigned cupsRowFeed; /* Feed between bands */ unsigned cupsRowStep; /* Spacing between lines */ } cups_page_header_t; /**** New in CUPS 1.2 ****/ typedef struct cups_page_header2_s /**** Version 2 page header @since CUPS 1.2/macOS 10.5@ ****/ { /**** Standard Page Device Dictionary String Values ****/ char MediaClass[64]; /* MediaClass string */ char MediaColor[64]; /* MediaColor string */ char MediaType[64]; /* MediaType string */ char OutputType[64]; /* OutputType string */ /**** Standard Page Device Dictionary Integer Values ****/ unsigned AdvanceDistance; /* AdvanceDistance value in points */ cups_adv_t AdvanceMedia; /* AdvanceMedia value (@link cups_adv_t@) */ cups_bool_t Collate; /* Collated copies value */ cups_cut_t CutMedia; /* CutMedia value (@link cups_cut_t@) */ cups_bool_t Duplex; /* Duplexed (double-sided) value */ unsigned HWResolution[2]; /* Resolution in dots-per-inch */ unsigned ImagingBoundingBox[4]; /* Pixel region that is painted (points, left, bottom, right, top) */ cups_bool_t InsertSheet; /* InsertSheet value */ cups_jog_t Jog; /* Jog value (@link cups_jog_t@) */ cups_edge_t LeadingEdge; /* LeadingEdge value (@link cups_edge_t@) */ unsigned Margins[2]; /* Lower-lefthand margins in points */ cups_bool_t ManualFeed; /* ManualFeed value */ unsigned MediaPosition; /* MediaPosition value */ unsigned MediaWeight; /* MediaWeight value in grams/m^2 */ cups_bool_t MirrorPrint; /* MirrorPrint value */ cups_bool_t NegativePrint; /* NegativePrint value */ unsigned NumCopies; /* Number of copies to produce */ cups_orient_t Orientation; /* Orientation value (@link cups_orient_t@) */ cups_bool_t OutputFaceUp; /* OutputFaceUp value */ unsigned PageSize[2]; /* Width and length of page in points */ cups_bool_t Separations; /* Separations value */ cups_bool_t TraySwitch; /* TraySwitch value */ cups_bool_t Tumble; /* Tumble value */ /**** CUPS Page Device Dictionary Values ****/ unsigned cupsWidth; /* Width of page image in pixels */ unsigned cupsHeight; /* Height of page image in pixels */ unsigned cupsMediaType; /* Media type code */ unsigned cupsBitsPerColor; /* Number of bits for each color */ unsigned cupsBitsPerPixel; /* Number of bits for each pixel */ unsigned cupsBytesPerLine; /* Number of bytes per line */ cups_order_t cupsColorOrder; /* Order of colors */ cups_cspace_t cupsColorSpace; /* True colorspace */ unsigned cupsCompression; /* Device compression to use */ unsigned cupsRowCount; /* Rows per band */ unsigned cupsRowFeed; /* Feed between bands */ unsigned cupsRowStep; /* Spacing between lines */ /**** Version 2 Dictionary Values ****/ unsigned cupsNumColors; /* Number of color compoents @since CUPS 1.2/macOS 10.5@ */ float cupsBorderlessScalingFactor; /* Scaling that was applied to page data @since CUPS 1.2/macOS 10.5@ */ float cupsPageSize[2]; /* Floating point PageSize (scaling * * factor not applied) @since CUPS 1.2/macOS 10.5@ */ float cupsImagingBBox[4]; /* Floating point ImagingBoundingBox * (scaling factor not applied, left, * bottom, right, top) @since CUPS 1.2/macOS 10.5@ */ unsigned cupsInteger[16]; /* User-defined integer values @since CUPS 1.2/macOS 10.5@ */ float cupsReal[16]; /* User-defined floating-point values @since CUPS 1.2/macOS 10.5@ */ char cupsString[16][64]; /* User-defined string values @since CUPS 1.2/macOS 10.5@ */ char cupsMarkerType[64]; /* Ink/toner type @since CUPS 1.2/macOS 10.5@ */ char cupsRenderingIntent[64];/* Color rendering intent @since CUPS 1.2/macOS 10.5@ */ char cupsPageSizeName[64]; /* PageSize name @since CUPS 1.2/macOS 10.5@ */ } cups_page_header2_t; typedef struct _cups_raster_s cups_raster_t; /**** Raster stream data ****/ typedef int (*cups_interpret_cb_t)(cups_page_header2_t *header, int preferred_bits); /**** cupsRasterInterpretPPD callback function * * This function is called by * @link cupsRasterInterpretPPD@ to * validate (and update, as needed) * the page header attributes. The * "preferred_bits" argument provides * the value of the * @code cupsPreferredBitsPerColor@ * key from the PostScript page device * dictionary and is 0 if undefined. ****/ /**** New in CUPS 1.5 ****/ typedef ssize_t (*cups_raster_iocb_t)(void *ctx, unsigned char *buffer, size_t length); /**** cupsRasterOpenIO callback function * * This function is specified when * creating a raster stream with * @link cupsRasterOpenIO@ and handles * generic reading and writing of raster * data. It must return -1 on error or * the number of bytes specified by * "length" on success. ****/ /* * Prototypes... */ extern void cupsRasterClose(cups_raster_t *r); extern cups_raster_t *cupsRasterOpen(int fd, cups_mode_t mode); extern unsigned cupsRasterReadHeader(cups_raster_t *r, cups_page_header_t *h) _CUPS_DEPRECATED_MSG("Use cupsRasterReadHeader2 instead."); extern unsigned cupsRasterReadPixels(cups_raster_t *r, unsigned char *p, unsigned len); extern unsigned cupsRasterWriteHeader(cups_raster_t *r, cups_page_header_t *h) _CUPS_DEPRECATED_MSG("Use cupsRasterWriteHeader2 instead."); extern unsigned cupsRasterWritePixels(cups_raster_t *r, unsigned char *p, unsigned len); /**** New in CUPS 1.2 ****/ extern unsigned cupsRasterReadHeader2(cups_raster_t *r, cups_page_header2_t *h) _CUPS_API_1_2; extern unsigned cupsRasterWriteHeader2(cups_raster_t *r, cups_page_header2_t *h) _CUPS_API_1_2; /**** New in CUPS 1.3 ****/ extern const char *cupsRasterErrorString(void) _CUPS_API_1_3; /**** New in CUPS 1.5 ****/ extern cups_raster_t *cupsRasterOpenIO(cups_raster_iocb_t iocb, void *ctx, cups_mode_t mode); /**** New in CUPS 2.2/macOS 10.12 ****/ extern int cupsRasterInitPWGHeader(cups_page_header2_t *h, pwg_media_t *media, const char *type, int xdpi, int ydpi, const char *sides, const char *sheet_back) _CUPS_API_2_2; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_RASTER_H_ */ cups-2.2.7/cups/request.c000664 000765 000024 00000072216 13255074424 015771 0ustar00msweetstaff000000 000000 /* * IPP utilities for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include #include #if defined(WIN32) || defined(__EMX__) # include #else # include #endif /* WIN32 || __EMX__ */ #ifndef O_BINARY # define O_BINARY 0 #endif /* O_BINARY */ #ifndef MSG_DONTWAIT # define MSG_DONTWAIT 0 #endif /* !MSG_DONTWAIT */ /* * 'cupsDoFileRequest()' - Do an IPP request with a file. * * This function sends the IPP request and attached file to the specified * server, retrying and authenticating as necessary. The request is freed with * @link ippDelete@. */ ipp_t * /* O - Response data */ cupsDoFileRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ ipp_t *request, /* I - IPP request */ const char *resource, /* I - HTTP resource for POST */ const char *filename) /* I - File to send or @code NULL@ for none */ { ipp_t *response; /* IPP response data */ int infile; /* Input file */ DEBUG_printf(("cupsDoFileRequest(http=%p, request=%p(%s), resource=\"%s\", filename=\"%s\")", (void *)http, (void *)request, request ? ippOpString(request->request.op.operation_id) : "?", resource, filename)); if (filename) { if ((infile = open(filename, O_RDONLY | O_BINARY)) < 0) { /* * Can't get file information! */ _cupsSetError(errno == ENOENT ? IPP_STATUS_ERROR_NOT_FOUND : IPP_STATUS_ERROR_NOT_AUTHORIZED, NULL, 0); ippDelete(request); return (NULL); } } else infile = -1; response = cupsDoIORequest(http, request, resource, infile, -1); if (infile >= 0) close(infile); return (response); } /* * 'cupsDoIORequest()' - Do an IPP request with file descriptors. * * This function sends the IPP request with the optional input file "infile" to * the specified server, retrying and authenticating as necessary. The request * is freed with @link ippDelete@. * * If "infile" is a valid file descriptor, @code cupsDoIORequest@ copies * all of the data from the file after the IPP request message. * * If "outfile" is a valid file descriptor, @code cupsDoIORequest@ copies * all of the data after the IPP response message to the file. * * @since CUPS 1.3/macOS 10.5@ */ ipp_t * /* O - Response data */ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ ipp_t *request, /* I - IPP request */ const char *resource, /* I - HTTP resource for POST */ int infile, /* I - File to read from or -1 for none */ int outfile) /* I - File to write to or -1 for none */ { ipp_t *response = NULL; /* IPP response data */ size_t length = 0; /* Content-Length value */ http_status_t status; /* Status of HTTP request */ struct stat fileinfo; /* File information */ ssize_t bytes; /* Number of bytes read/written */ char buffer[32768]; /* Output buffer */ DEBUG_printf(("cupsDoIORequest(http=%p, request=%p(%s), resource=\"%s\", infile=%d, outfile=%d)", (void *)http, (void *)request, request ? ippOpString(request->request.op.operation_id) : "?", resource, infile, outfile)); /* * Range check input... */ if (!request || !resource) { ippDelete(request); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (NULL); } /* * Get the default connection as needed... */ if (!http && (http = _cupsConnect()) == NULL) { ippDelete(request); return (NULL); } /* * See if we have a file to send... */ if (infile >= 0) { if (fstat(infile, &fileinfo)) { /* * Can't get file information! */ _cupsSetError(errno == EBADF ? IPP_STATUS_ERROR_NOT_FOUND : IPP_STATUS_ERROR_NOT_AUTHORIZED, NULL, 0); ippDelete(request); return (NULL); } #ifdef WIN32 if (fileinfo.st_mode & _S_IFDIR) #else if (S_ISDIR(fileinfo.st_mode)) #endif /* WIN32 */ { /* * Can't send a directory... */ _cupsSetError(IPP_STATUS_ERROR_NOT_POSSIBLE, strerror(EISDIR), 0); ippDelete(request); return (NULL); } #ifndef WIN32 if (!S_ISREG(fileinfo.st_mode)) length = 0; /* Chunk when piping */ else #endif /* !WIN32 */ length = ippLength(request) + (size_t)fileinfo.st_size; } else length = ippLength(request); DEBUG_printf(("2cupsDoIORequest: Request length=%ld, total length=%ld", (long)ippLength(request), (long)length)); /* * Clear any "Local" authentication data since it is probably stale... */ if (http->authstring && !strncmp(http->authstring, "Local ", 6)) httpSetAuthString(http, NULL, NULL); /* * Loop until we can send the request without authorization problems. */ while (response == NULL) { DEBUG_puts("2cupsDoIORequest: setup..."); /* * Send the request... */ status = cupsSendRequest(http, request, resource, length); DEBUG_printf(("2cupsDoIORequest: status=%d", status)); if (status == HTTP_STATUS_CONTINUE && request->state == IPP_STATE_DATA && infile >= 0) { DEBUG_puts("2cupsDoIORequest: file write..."); /* * Send the file with the request... */ #ifndef WIN32 if (S_ISREG(fileinfo.st_mode)) #endif /* WIN32 */ lseek(infile, 0, SEEK_SET); while ((bytes = read(infile, buffer, sizeof(buffer))) > 0) { if ((status = cupsWriteRequestData(http, buffer, (size_t)bytes)) != HTTP_STATUS_CONTINUE) break; } } /* * Get the server's response... */ if (status <= HTTP_STATUS_CONTINUE || status == HTTP_STATUS_OK) { response = cupsGetResponse(http, resource); status = httpGetStatus(http); } DEBUG_printf(("2cupsDoIORequest: status=%d", status)); if (status == HTTP_STATUS_ERROR || (status >= HTTP_STATUS_BAD_REQUEST && status != HTTP_STATUS_UNAUTHORIZED && status != HTTP_STATUS_UPGRADE_REQUIRED)) { _cupsSetHTTPError(status); break; } if (response && outfile >= 0) { /* * Write trailing data to file... */ while ((bytes = httpRead2(http, buffer, sizeof(buffer))) > 0) if (write(outfile, buffer, (size_t)bytes) < bytes) break; } if (http->state != HTTP_STATE_WAITING) { /* * Flush any remaining data... */ httpFlush(http); } } /* * Delete the original request and return the response... */ ippDelete(request); return (response); } /* * 'cupsDoRequest()' - Do an IPP request. * * This function sends the IPP request to the specified server, retrying * and authenticating as necessary. The request is freed with @link ippDelete@. */ ipp_t * /* O - Response data */ cupsDoRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ ipp_t *request, /* I - IPP request */ const char *resource) /* I - HTTP resource for POST */ { DEBUG_printf(("cupsDoRequest(http=%p, request=%p(%s), resource=\"%s\")", (void *)http, (void *)request, request ? ippOpString(request->request.op.operation_id) : "?", resource)); return (cupsDoIORequest(http, request, resource, -1, -1)); } /* * 'cupsGetResponse()' - Get a response to an IPP request. * * Use this function to get the response for an IPP request sent using * @link cupsSendRequest@. For requests that return additional data, use * @link cupsReadResponseData@ after getting a successful response, * otherwise call @link httpFlush@ to complete the response processing. * * @since CUPS 1.4/macOS 10.6@ */ ipp_t * /* O - Response or @code NULL@ on HTTP error */ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *resource) /* I - HTTP resource for POST */ { http_status_t status; /* HTTP status */ ipp_state_t state; /* IPP read state */ ipp_t *response = NULL; /* IPP response */ DEBUG_printf(("cupsGetResponse(http=%p, resource=\"%s\")", (void *)http, resource)); DEBUG_printf(("1cupsGetResponse: http->state=%d", http ? http->state : HTTP_STATE_ERROR)); /* * Connect to the default server as needed... */ if (!http) { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ if ((http = cg->http) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No active connection."), 1); DEBUG_puts("1cupsGetResponse: No active connection - returning NULL."); return (NULL); } } if (http->state != HTTP_STATE_POST_RECV && http->state != HTTP_STATE_POST_SEND) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No request sent."), 1); DEBUG_puts("1cupsGetResponse: Not in POST state - returning NULL."); return (NULL); } /* * Check for an unfinished chunked request... */ if (http->data_encoding == HTTP_ENCODING_CHUNKED) { /* * Send a 0-length chunk to finish off the request... */ DEBUG_puts("2cupsGetResponse: Finishing chunked POST..."); if (httpWrite2(http, "", 0) < 0) return (NULL); } /* * Wait for a response from the server... */ DEBUG_printf(("2cupsGetResponse: Update loop, http->status=%d...", http->status)); do { status = httpUpdate(http); } while (status == HTTP_STATUS_CONTINUE); DEBUG_printf(("2cupsGetResponse: status=%d", status)); if (status == HTTP_STATUS_OK) { /* * Get the IPP response... */ response = ippNew(); while ((state = ippRead(http, response)) != IPP_STATE_DATA) if (state == IPP_STATE_ERROR) break; if (state == IPP_STATE_ERROR) { /* * Flush remaining data and delete the response... */ DEBUG_puts("1cupsGetResponse: IPP read error!"); httpFlush(http); ippDelete(response); response = NULL; http->status = status = HTTP_STATUS_ERROR; http->error = EINVAL; } } else if (status != HTTP_STATUS_ERROR) { /* * Flush any error message... */ httpFlush(http); /* * Then handle encryption and authentication... */ if (status == HTTP_STATUS_UNAUTHORIZED) { /* * See if we can do authentication... */ DEBUG_puts("2cupsGetResponse: Need authorization..."); if (!cupsDoAuthentication(http, "POST", resource)) httpReconnect2(http, 30000, NULL); else http->status = status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED; } #ifdef HAVE_SSL else if (status == HTTP_STATUS_UPGRADE_REQUIRED) { /* * Force a reconnect with encryption... */ DEBUG_puts("2cupsGetResponse: Need encryption..."); if (!httpReconnect2(http, 30000, NULL)) httpEncryption(http, HTTP_ENCRYPTION_REQUIRED); } #endif /* HAVE_SSL */ } if (response) { ipp_attribute_t *attr; /* status-message attribute */ attr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT); DEBUG_printf(("1cupsGetResponse: status-code=%s, status-message=\"%s\"", ippErrorString(response->request.status.status_code), attr ? attr->values[0].string.text : "")); _cupsSetError(response->request.status.status_code, attr ? attr->values[0].string.text : ippErrorString(response->request.status.status_code), 0); } return (response); } /* * 'cupsLastError()' - Return the last IPP status code received on the current * thread. */ ipp_status_t /* O - IPP status code from last request */ cupsLastError(void) { return (_cupsGlobals()->last_error); } /* * 'cupsLastErrorString()' - Return the last IPP status-message received on the * current thread. * * @since CUPS 1.2/macOS 10.5@ */ const char * /* O - status-message text from last request */ cupsLastErrorString(void) { return (_cupsGlobals()->last_status_message); } /* * '_cupsNextDelay()' - Return the next retry delay value. * * This function currently returns the Fibonacci sequence 1 1 2 3 5 8. * * Pass 0 for the current delay value to initialize the sequence. */ int /* O - Next delay value */ _cupsNextDelay(int current, /* I - Current delay value or 0 */ int *previous) /* IO - Previous delay value */ { int next; /* Next delay value */ if (current > 0) { next = (current + *previous) % 12; *previous = next < current ? 0 : current; } else { next = 1; *previous = 0; } return (next); } /* * 'cupsReadResponseData()' - Read additional data after the IPP response. * * This function is used after @link cupsGetResponse@ to read the PPD or document * files from @code CUPS_GET_PPD@ and @code CUPS_GET_DOCUMENT@ requests, * respectively. * * @since CUPS 1.4/macOS 10.6@ */ ssize_t /* O - Bytes read, 0 on EOF, -1 on error */ cupsReadResponseData( http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ char *buffer, /* I - Buffer to use */ size_t length) /* I - Number of bytes to read */ { /* * Get the default connection as needed... */ DEBUG_printf(("cupsReadResponseData(http=%p, buffer=%p, length=" CUPS_LLFMT ")", (void *)http, (void *)buffer, CUPS_LLCAST length)); if (!http) { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ if ((http = cg->http) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No active connection"), 1); return (-1); } } /* * Then read from the HTTP connection... */ return (httpRead2(http, buffer, length)); } /* * 'cupsSendRequest()' - Send an IPP request. * * Use @link cupsWriteRequestData@ to write any additional data (document, PPD * file, etc.) for the request, @link cupsGetResponse@ to get the IPP response, * and @link cupsReadResponseData@ to read any additional data following the * response. Only one request can be sent/queued at a time per @code http_t@ * connection. * * Returns the initial HTTP status code, which will be @code HTTP_STATUS_CONTINUE@ * on a successful send of the request. * * Note: Unlike @link cupsDoFileRequest@, @link cupsDoIORequest@, and * @link cupsDoRequest@, the request is NOT freed with @link ippDelete@. * * @since CUPS 1.4/macOS 10.6@ */ http_status_t /* O - Initial HTTP status */ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ ipp_t *request, /* I - IPP request */ const char *resource, /* I - Resource path */ size_t length) /* I - Length of data to follow or @code CUPS_LENGTH_VARIABLE@ */ { http_status_t status; /* Status of HTTP request */ int got_status; /* Did we get the status? */ ipp_state_t state; /* State of IPP processing */ http_status_t expect; /* Expect: header to use */ char date[256]; /* Date: header value */ DEBUG_printf(("cupsSendRequest(http=%p, request=%p(%s), resource=\"%s\", length=" CUPS_LLFMT ")", (void *)http, (void *)request, request ? ippOpString(request->request.op.operation_id) : "?", resource, CUPS_LLCAST length)); /* * Range check input... */ if (!request || !resource) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (HTTP_STATUS_ERROR); } /* * Get the default connection as needed... */ if (!http && (http = _cupsConnect()) == NULL) return (HTTP_STATUS_SERVICE_UNAVAILABLE); /* * If the prior request was not flushed out, do so now... */ if (http->state == HTTP_STATE_GET_SEND || http->state == HTTP_STATE_POST_SEND) { DEBUG_puts("2cupsSendRequest: Flush prior response."); httpFlush(http); } else if (http->state != HTTP_STATE_WAITING) { DEBUG_printf(("1cupsSendRequest: Unknown HTTP state (%d), " "reconnecting.", http->state)); if (httpReconnect2(http, 30000, NULL)) return (HTTP_STATUS_ERROR); } #ifdef HAVE_SSL /* * See if we have an auth-info attribute and are communicating over * a non-local link. If so, encrypt the link so that we can pass * the authentication information securely... */ if (ippFindAttribute(request, "auth-info", IPP_TAG_TEXT) && !httpAddrLocalhost(http->hostaddr) && !http->tls && httpEncryption(http, HTTP_ENCRYPTION_REQUIRED)) { DEBUG_puts("1cupsSendRequest: Unable to encrypt connection."); return (HTTP_STATUS_SERVICE_UNAVAILABLE); } #endif /* HAVE_SSL */ /* * Reconnect if the last response had a "Connection: close"... */ if (!_cups_strcasecmp(http->fields[HTTP_FIELD_CONNECTION], "close")) { DEBUG_puts("2cupsSendRequest: Connection: close"); httpClearFields(http); if (httpReconnect2(http, 30000, NULL)) { DEBUG_puts("1cupsSendRequest: Unable to reconnect."); return (HTTP_STATUS_SERVICE_UNAVAILABLE); } } /* * Loop until we can send the request without authorization problems. */ expect = HTTP_STATUS_CONTINUE; for (;;) { DEBUG_puts("2cupsSendRequest: Setup..."); /* * Setup the HTTP variables needed... */ httpClearFields(http); httpSetExpect(http, expect); httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp"); httpSetField(http, HTTP_FIELD_DATE, httpGetDateString2(time(NULL), date, (int)sizeof(date))); httpSetLength(http, length); #ifdef HAVE_GSSAPI if (http->authstring && !strncmp(http->authstring, "Negotiate", 9)) { /* * Do not use cached Kerberos credentials since they will look like a * "replay" attack... */ _cupsSetNegotiateAuthString(http, "POST", resource); } #endif /* HAVE_GSSAPI */ httpSetField(http, HTTP_FIELD_AUTHORIZATION, http->authstring); DEBUG_printf(("2cupsSendRequest: authstring=\"%s\"", http->authstring)); /* * Try the request... */ DEBUG_puts("2cupsSendRequest: Sending HTTP POST..."); if (httpPost(http, resource)) { DEBUG_puts("2cupsSendRequest: POST failed, reconnecting."); if (httpReconnect2(http, 30000, NULL)) { DEBUG_puts("1cupsSendRequest: Unable to reconnect."); return (HTTP_STATUS_SERVICE_UNAVAILABLE); } else continue; } /* * Send the IPP data... */ DEBUG_puts("2cupsSendRequest: Writing IPP request..."); request->state = IPP_STATE_IDLE; status = HTTP_STATUS_CONTINUE; got_status = 0; while ((state = ippWrite(http, request)) != IPP_STATE_DATA) { if (httpCheck(http)) { got_status = 1; _httpUpdate(http, &status); if (status >= HTTP_STATUS_MULTIPLE_CHOICES) break; } else if (state == IPP_STATE_ERROR) break; } if (state == IPP_STATE_ERROR) { /* * We weren't able to send the IPP request. But did we already get a HTTP * error status? */ if (!got_status || status < HTTP_STATUS_MULTIPLE_CHOICES) { /* * No, something else went wrong. */ DEBUG_puts("1cupsSendRequest: Unable to send IPP request."); http->status = HTTP_STATUS_ERROR; http->state = HTTP_STATE_WAITING; return (HTTP_STATUS_ERROR); } } /* * Wait up to 1 second to get the 100-continue response as needed... */ if (!got_status) { if (expect == HTTP_STATUS_CONTINUE) { DEBUG_puts("2cupsSendRequest: Waiting for 100-continue..."); if (httpWait(http, 1000)) _httpUpdate(http, &status); } else if (httpCheck(http)) _httpUpdate(http, &status); } DEBUG_printf(("2cupsSendRequest: status=%d", status)); /* * Process the current HTTP status... */ if (status >= HTTP_STATUS_MULTIPLE_CHOICES) { int temp_status; /* Temporary status */ _cupsSetHTTPError(status); do { temp_status = httpUpdate(http); } while (temp_status != HTTP_STATUS_ERROR && http->state == HTTP_STATE_POST_RECV); httpFlush(http); } switch (status) { case HTTP_STATUS_CONTINUE : case HTTP_STATUS_OK : case HTTP_STATUS_ERROR : DEBUG_printf(("1cupsSendRequest: Returning %d.", status)); return (status); case HTTP_STATUS_UNAUTHORIZED : if (cupsDoAuthentication(http, "POST", resource)) { DEBUG_puts("1cupsSendRequest: Returning HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED."); return (HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED); } DEBUG_puts("2cupsSendRequest: Reconnecting after HTTP_STATUS_UNAUTHORIZED."); if (httpReconnect2(http, 30000, NULL)) { DEBUG_puts("1cupsSendRequest: Unable to reconnect."); return (HTTP_STATUS_SERVICE_UNAVAILABLE); } break; #ifdef HAVE_SSL case HTTP_STATUS_UPGRADE_REQUIRED : /* * Flush any error message, reconnect, and then upgrade with * encryption... */ DEBUG_puts("2cupsSendRequest: Reconnecting after " "HTTP_STATUS_UPGRADE_REQUIRED."); if (httpReconnect2(http, 30000, NULL)) { DEBUG_puts("1cupsSendRequest: Unable to reconnect."); return (HTTP_STATUS_SERVICE_UNAVAILABLE); } DEBUG_puts("2cupsSendRequest: Upgrading to TLS."); if (httpEncryption(http, HTTP_ENCRYPTION_REQUIRED)) { DEBUG_puts("1cupsSendRequest: Unable to encrypt connection."); return (HTTP_STATUS_SERVICE_UNAVAILABLE); } break; #endif /* HAVE_SSL */ case HTTP_STATUS_EXPECTATION_FAILED : /* * Don't try using the Expect: header the next time around... */ expect = (http_status_t)0; DEBUG_puts("2cupsSendRequest: Reconnecting after " "HTTP_EXPECTATION_FAILED."); if (httpReconnect2(http, 30000, NULL)) { DEBUG_puts("1cupsSendRequest: Unable to reconnect."); return (HTTP_STATUS_SERVICE_UNAVAILABLE); } break; default : /* * Some other error... */ return (status); } } } /* * 'cupsWriteRequestData()' - Write additional data after an IPP request. * * This function is used after @link cupsSendRequest@ to provide a PPD and * after @link cupsStartDocument@ to provide a document file. * * @since CUPS 1.4/macOS 10.6@ */ http_status_t /* O - @code HTTP_STATUS_CONTINUE@ if OK or HTTP status on error */ cupsWriteRequestData( http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *buffer, /* I - Bytes to write */ size_t length) /* I - Number of bytes to write */ { int wused; /* Previous bytes in buffer */ /* * Get the default connection as needed... */ DEBUG_printf(("cupsWriteRequestData(http=%p, buffer=%p, length=" CUPS_LLFMT ")", (void *)http, (void *)buffer, CUPS_LLCAST length)); if (!http) { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ if ((http = cg->http) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No active connection"), 1); DEBUG_puts("1cupsWriteRequestData: Returning HTTP_STATUS_ERROR."); return (HTTP_STATUS_ERROR); } } /* * Then write to the HTTP connection... */ wused = http->wused; if (httpWrite2(http, buffer, length) < 0) { DEBUG_puts("1cupsWriteRequestData: Returning HTTP_STATUS_ERROR."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(http->error), 0); return (HTTP_STATUS_ERROR); } /* * Finally, check if we have any pending data from the server... */ if (length >= HTTP_MAX_BUFFER || http->wused < wused || (wused > 0 && (size_t)http->wused == length)) { /* * We've written something to the server, so check for response data... */ if (_httpWait(http, 0, 1)) { http_status_t status; /* Status from _httpUpdate */ _httpUpdate(http, &status); if (status >= HTTP_STATUS_MULTIPLE_CHOICES) { _cupsSetHTTPError(status); do { status = httpUpdate(http); } while (status != HTTP_STATUS_ERROR && http->state == HTTP_STATE_POST_RECV); httpFlush(http); } DEBUG_printf(("1cupsWriteRequestData: Returning %d.\n", status)); return (status); } } DEBUG_puts("1cupsWriteRequestData: Returning HTTP_STATUS_CONTINUE."); return (HTTP_STATUS_CONTINUE); } /* * '_cupsConnect()' - Get the default server connection... */ http_t * /* O - HTTP connection */ _cupsConnect(void) { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ /* * See if we are connected to the same server... */ if (cg->http) { /* * Compare the connection hostname, port, and encryption settings to * the cached defaults; these were initialized the first time we * connected... */ if (strcmp(cg->http->hostname, cg->server) || #ifdef AF_LOCAL (httpAddrFamily(cg->http->hostaddr) != AF_LOCAL && cg->ipp_port != httpAddrPort(cg->http->hostaddr)) || #else cg->ipp_port != httpAddrPort(cg->http->hostaddr) || #endif /* AF_LOCAL */ (cg->http->encryption != cg->encryption && cg->http->encryption == HTTP_ENCRYPTION_NEVER)) { /* * Need to close the current connection because something has changed... */ httpClose(cg->http); cg->http = NULL; } else { /* * Same server, see if the connection is still established... */ char ch; /* Connection check byte */ ssize_t n; /* Number of bytes */ #ifdef WIN32 if ((n = recv(cg->http->fd, &ch, 1, MSG_PEEK)) == 0 || (n < 0 && WSAGetLastError() != WSAEWOULDBLOCK)) #else if ((n = recv(cg->http->fd, &ch, 1, MSG_PEEK | MSG_DONTWAIT)) == 0 || (n < 0 && errno != EWOULDBLOCK)) #endif /* WIN32 */ { /* * Nope, close the connection... */ httpClose(cg->http); cg->http = NULL; } } } /* * (Re)connect as needed... */ if (!cg->http) { if ((cg->http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL)) == NULL) { if (errno) _cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, NULL, 0); else _cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, _("Unable to connect to host."), 1); } } /* * Return the cached connection... */ return (cg->http); } /* * '_cupsSetError()' - Set the last IPP status code and status-message. */ void _cupsSetError(ipp_status_t status, /* I - IPP status code */ const char *message, /* I - status-message value */ int localize) /* I - Localize the message? */ { _cups_globals_t *cg; /* Global data */ if (!message && errno) { message = strerror(errno); localize = 0; } cg = _cupsGlobals(); cg->last_error = status; if (cg->last_status_message) { _cupsStrFree(cg->last_status_message); cg->last_status_message = NULL; } if (message) { if (localize) { /* * Get the message catalog... */ if (!cg->lang_default) cg->lang_default = cupsLangDefault(); cg->last_status_message = _cupsStrAlloc(_cupsLangString(cg->lang_default, message)); } else cg->last_status_message = _cupsStrAlloc(message); } DEBUG_printf(("4_cupsSetError: last_error=%s, last_status_message=\"%s\"", ippErrorString(cg->last_error), cg->last_status_message)); } /* * '_cupsSetHTTPError()' - Set the last error using the HTTP status. */ void _cupsSetHTTPError(http_status_t status) /* I - HTTP status code */ { switch (status) { case HTTP_STATUS_NOT_FOUND : _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, httpStatus(status), 0); break; case HTTP_STATUS_UNAUTHORIZED : _cupsSetError(IPP_STATUS_ERROR_NOT_AUTHENTICATED, httpStatus(status), 0); break; case HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED : _cupsSetError(IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED, httpStatus(status), 0); break; case HTTP_STATUS_FORBIDDEN : _cupsSetError(IPP_STATUS_ERROR_FORBIDDEN, httpStatus(status), 0); break; case HTTP_STATUS_BAD_REQUEST : _cupsSetError(IPP_STATUS_ERROR_BAD_REQUEST, httpStatus(status), 0); break; case HTTP_STATUS_REQUEST_TOO_LARGE : _cupsSetError(IPP_STATUS_ERROR_REQUEST_VALUE, httpStatus(status), 0); break; case HTTP_STATUS_NOT_IMPLEMENTED : _cupsSetError(IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED, httpStatus(status), 0); break; case HTTP_STATUS_NOT_SUPPORTED : _cupsSetError(IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED, httpStatus(status), 0); break; case HTTP_STATUS_UPGRADE_REQUIRED : _cupsSetError(IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED, httpStatus(status), 0); break; case HTTP_STATUS_CUPS_PKI_ERROR : _cupsSetError(IPP_STATUS_ERROR_CUPS_PKI, httpStatus(status), 0); break; case HTTP_STATUS_ERROR : _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); break; default : DEBUG_printf(("4_cupsSetHTTPError: HTTP error %d mapped to " "IPP_STATUS_ERROR_SERVICE_UNAVAILABLE!", status)); _cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, httpStatus(status), 0); break; } } cups-2.2.7/cups/sidechannel.c000664 000765 000024 00000041473 13255074424 016557 0ustar00msweetstaff000000 000000 /* * Side-channel API code for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "sidechannel.h" #include "cups-private.h" #ifdef WIN32 # include #else # include #endif /* WIN32 */ #ifndef WIN32 # include # include #endif /* !WIN32 */ #ifdef HAVE_POLL # include #endif /* HAVE_POLL */ /* * Buffer size for side-channel requests... */ #define _CUPS_SC_MAX_DATA 65535 #define _CUPS_SC_MAX_BUFFER 65540 /* * 'cupsSideChannelDoRequest()' - Send a side-channel command to a backend and wait for a response. * * This function is normally only called by filters, drivers, or port * monitors in order to communicate with the backend used by the current * printer. Programs must be prepared to handle timeout or "not * implemented" status codes, which indicate that the backend or device * do not support the specified side-channel command. * * The "datalen" parameter must be initialized to the size of the buffer * pointed to by the "data" parameter. cupsSideChannelDoRequest() will * update the value to contain the number of data bytes in the buffer. * * @since CUPS 1.3/macOS 10.5@ */ cups_sc_status_t /* O - Status of command */ cupsSideChannelDoRequest( cups_sc_command_t command, /* I - Command to send */ char *data, /* O - Response data buffer pointer */ int *datalen, /* IO - Size of data buffer on entry, number of bytes in buffer on return */ double timeout) /* I - Timeout in seconds */ { cups_sc_status_t status; /* Status of command */ cups_sc_command_t rcommand; /* Response command */ if (cupsSideChannelWrite(command, CUPS_SC_STATUS_NONE, NULL, 0, timeout)) return (CUPS_SC_STATUS_TIMEOUT); if (cupsSideChannelRead(&rcommand, &status, data, datalen, timeout)) return (CUPS_SC_STATUS_TIMEOUT); if (rcommand != command) return (CUPS_SC_STATUS_BAD_MESSAGE); return (status); } /* * 'cupsSideChannelRead()' - Read a side-channel message. * * This function is normally only called by backend programs to read * commands from a filter, driver, or port monitor program. The * caller must be prepared to handle incomplete or invalid messages * and return the corresponding status codes. * * The "datalen" parameter must be initialized to the size of the buffer * pointed to by the "data" parameter. cupsSideChannelDoRequest() will * update the value to contain the number of data bytes in the buffer. * * @since CUPS 1.3/macOS 10.5@ */ int /* O - 0 on success, -1 on error */ cupsSideChannelRead( cups_sc_command_t *command, /* O - Command code */ cups_sc_status_t *status, /* O - Status code */ char *data, /* O - Data buffer pointer */ int *datalen, /* IO - Size of data buffer on entry, number of bytes in buffer on return */ double timeout) /* I - Timeout in seconds */ { char *buffer; /* Message buffer */ ssize_t bytes; /* Bytes read */ int templen; /* Data length from message */ int nfds; /* Number of file descriptors */ #ifdef HAVE_POLL struct pollfd pfd; /* Poll structure for poll() */ #else /* select() */ fd_set input_set; /* Input set for select() */ struct timeval stimeout; /* Timeout value for select() */ #endif /* HAVE_POLL */ DEBUG_printf(("cupsSideChannelRead(command=%p, status=%p, data=%p, " "datalen=%p(%d), timeout=%.3f)", command, status, data, datalen, datalen ? *datalen : -1, timeout)); /* * Range check input... */ if (!command || !status) return (-1); /* * See if we have pending data on the side-channel socket... */ #ifdef HAVE_POLL pfd.fd = CUPS_SC_FD; pfd.events = POLLIN; while ((nfds = poll(&pfd, 1, timeout < 0.0 ? -1 : (int)(timeout * 1000))) < 0 && (errno == EINTR || errno == EAGAIN)) ; #else /* select() */ FD_ZERO(&input_set); FD_SET(CUPS_SC_FD, &input_set); stimeout.tv_sec = (int)timeout; stimeout.tv_usec = (int)(timeout * 1000000) % 1000000; while ((nfds = select(CUPS_SC_FD + 1, &input_set, NULL, NULL, timeout < 0.0 ? NULL : &stimeout)) < 0 && (errno == EINTR || errno == EAGAIN)) ; #endif /* HAVE_POLL */ if (nfds < 1) { *command = CUPS_SC_CMD_NONE; *status = nfds==0 ? CUPS_SC_STATUS_TIMEOUT : CUPS_SC_STATUS_IO_ERROR; return (-1); } /* * Read a side-channel message for the format: * * Byte(s) Description * ------- ------------------------------------------- * 0 Command code * 1 Status code * 2-3 Data length (network byte order) * 4-N Data */ if ((buffer = _cupsBufferGet(_CUPS_SC_MAX_BUFFER)) == NULL) { *command = CUPS_SC_CMD_NONE; *status = CUPS_SC_STATUS_TOO_BIG; return (-1); } while ((bytes = read(CUPS_SC_FD, buffer, _CUPS_SC_MAX_BUFFER)) < 0) if (errno != EINTR && errno != EAGAIN) { DEBUG_printf(("1cupsSideChannelRead: Read error: %s", strerror(errno))); _cupsBufferRelease(buffer); *command = CUPS_SC_CMD_NONE; *status = CUPS_SC_STATUS_IO_ERROR; return (-1); } /* * Watch for EOF or too few bytes... */ if (bytes < 4) { DEBUG_printf(("1cupsSideChannelRead: Short read of " CUPS_LLFMT " bytes", CUPS_LLCAST bytes)); _cupsBufferRelease(buffer); *command = CUPS_SC_CMD_NONE; *status = CUPS_SC_STATUS_BAD_MESSAGE; return (-1); } /* * Validate the command code in the message... */ if (buffer[0] < CUPS_SC_CMD_SOFT_RESET || buffer[0] >= CUPS_SC_CMD_MAX) { DEBUG_printf(("1cupsSideChannelRead: Bad command %d!", buffer[0])); _cupsBufferRelease(buffer); *command = CUPS_SC_CMD_NONE; *status = CUPS_SC_STATUS_BAD_MESSAGE; return (-1); } *command = (cups_sc_command_t)buffer[0]; /* * Validate the data length in the message... */ templen = ((buffer[2] & 255) << 8) | (buffer[3] & 255); if (templen > 0 && (!data || !datalen)) { /* * Either the response is bigger than the provided buffer or the * response is bigger than we've read... */ *status = CUPS_SC_STATUS_TOO_BIG; } else if (!datalen || templen > *datalen || templen > (bytes - 4)) { /* * Either the response is bigger than the provided buffer or the * response is bigger than we've read... */ *status = CUPS_SC_STATUS_TOO_BIG; } else { /* * The response data will fit, copy it over and provide the actual * length... */ *status = (cups_sc_status_t)buffer[1]; *datalen = templen; memcpy(data, buffer + 4, (size_t)templen); } _cupsBufferRelease(buffer); DEBUG_printf(("1cupsSideChannelRead: Returning status=%d", *status)); return (0); } /* * 'cupsSideChannelSNMPGet()' - Query a SNMP OID's value. * * This function asks the backend to do a SNMP OID query on behalf of the * filter, port monitor, or backend using the default community name. * * "oid" contains a numeric OID consisting of integers separated by periods, * for example ".1.3.6.1.2.1.43". Symbolic names from SNMP MIBs are not * supported and must be converted to their numeric forms. * * On input, "data" and "datalen" provide the location and size of the * buffer to hold the OID value as a string. HEX-String (binary) values are * converted to hexadecimal strings representing the binary data, while * NULL-Value and unknown OID types are returned as the empty string. * The returned "datalen" does not include the trailing nul. * * @code CUPS_SC_STATUS_NOT_IMPLEMENTED@ is returned by backends that do not * support SNMP queries. @code CUPS_SC_STATUS_NO_RESPONSE@ is returned when * the printer does not respond to the SNMP query. * * @since CUPS 1.4/macOS 10.6@ */ cups_sc_status_t /* O - Query status */ cupsSideChannelSNMPGet( const char *oid, /* I - OID to query */ char *data, /* I - Buffer for OID value */ int *datalen, /* IO - Size of OID buffer on entry, size of value on return */ double timeout) /* I - Timeout in seconds */ { cups_sc_status_t status; /* Status of command */ cups_sc_command_t rcommand; /* Response command */ char *real_data; /* Real data buffer for response */ int real_datalen, /* Real length of data buffer */ real_oidlen; /* Length of returned OID string */ DEBUG_printf(("cupsSideChannelSNMPGet(oid=\"%s\", data=%p, datalen=%p(%d), " "timeout=%.3f)", oid, data, datalen, datalen ? *datalen : -1, timeout)); /* * Range check input... */ if (!oid || !*oid || !data || !datalen || *datalen < 2) return (CUPS_SC_STATUS_BAD_MESSAGE); *data = '\0'; /* * Send the request to the backend and wait for a response... */ if (cupsSideChannelWrite(CUPS_SC_CMD_SNMP_GET, CUPS_SC_STATUS_NONE, oid, (int)strlen(oid) + 1, timeout)) return (CUPS_SC_STATUS_TIMEOUT); if ((real_data = _cupsBufferGet(_CUPS_SC_MAX_BUFFER)) == NULL) return (CUPS_SC_STATUS_TOO_BIG); real_datalen = _CUPS_SC_MAX_BUFFER; if (cupsSideChannelRead(&rcommand, &status, real_data, &real_datalen, timeout)) { _cupsBufferRelease(real_data); return (CUPS_SC_STATUS_TIMEOUT); } if (rcommand != CUPS_SC_CMD_SNMP_GET) { _cupsBufferRelease(real_data); return (CUPS_SC_STATUS_BAD_MESSAGE); } if (status == CUPS_SC_STATUS_OK) { /* * Parse the response of the form "oid\0value"... */ real_oidlen = (int)strlen(real_data) + 1; real_datalen -= real_oidlen; if ((real_datalen + 1) > *datalen) { _cupsBufferRelease(real_data); return (CUPS_SC_STATUS_TOO_BIG); } memcpy(data, real_data + real_oidlen, (size_t)real_datalen); data[real_datalen] = '\0'; *datalen = real_datalen; } _cupsBufferRelease(real_data); return (status); } /* * 'cupsSideChannelSNMPWalk()' - Query multiple SNMP OID values. * * This function asks the backend to do multiple SNMP OID queries on behalf * of the filter, port monitor, or backend using the default community name. * All OIDs under the "parent" OID are queried and the results are sent to * the callback function you provide. * * "oid" contains a numeric OID consisting of integers separated by periods, * for example ".1.3.6.1.2.1.43". Symbolic names from SNMP MIBs are not * supported and must be converted to their numeric forms. * * "timeout" specifies the timeout for each OID query. The total amount of * time will depend on the number of OID values found and the time required * for each query. * * "cb" provides a function to call for every value that is found. "context" * is an application-defined pointer that is sent to the callback function * along with the OID and current data. The data passed to the callback is the * same as returned by @link cupsSideChannelSNMPGet@. * * @code CUPS_SC_STATUS_NOT_IMPLEMENTED@ is returned by backends that do not * support SNMP queries. @code CUPS_SC_STATUS_NO_RESPONSE@ is returned when * the printer does not respond to the first SNMP query. * * @since CUPS 1.4/macOS 10.6@ */ cups_sc_status_t /* O - Status of first query of @code CUPS_SC_STATUS_OK@ on success */ cupsSideChannelSNMPWalk( const char *oid, /* I - First numeric OID to query */ double timeout, /* I - Timeout for each query in seconds */ cups_sc_walk_func_t cb, /* I - Function to call with each value */ void *context) /* I - Application-defined pointer to send to callback */ { cups_sc_status_t status; /* Status of command */ cups_sc_command_t rcommand; /* Response command */ char *real_data; /* Real data buffer for response */ int real_datalen; /* Real length of data buffer */ size_t real_oidlen, /* Length of returned OID string */ oidlen; /* Length of first OID */ const char *current_oid; /* Current OID */ char last_oid[2048]; /* Last OID */ DEBUG_printf(("cupsSideChannelSNMPWalk(oid=\"%s\", timeout=%.3f, cb=%p, " "context=%p)", oid, timeout, cb, context)); /* * Range check input... */ if (!oid || !*oid || !cb) return (CUPS_SC_STATUS_BAD_MESSAGE); if ((real_data = _cupsBufferGet(_CUPS_SC_MAX_BUFFER)) == NULL) return (CUPS_SC_STATUS_TOO_BIG); /* * Loop until the OIDs don't match... */ current_oid = oid; oidlen = strlen(oid); last_oid[0] = '\0'; do { /* * Send the request to the backend and wait for a response... */ if (cupsSideChannelWrite(CUPS_SC_CMD_SNMP_GET_NEXT, CUPS_SC_STATUS_NONE, current_oid, (int)strlen(current_oid) + 1, timeout)) { _cupsBufferRelease(real_data); return (CUPS_SC_STATUS_TIMEOUT); } real_datalen = _CUPS_SC_MAX_BUFFER; if (cupsSideChannelRead(&rcommand, &status, real_data, &real_datalen, timeout)) { _cupsBufferRelease(real_data); return (CUPS_SC_STATUS_TIMEOUT); } if (rcommand != CUPS_SC_CMD_SNMP_GET_NEXT) { _cupsBufferRelease(real_data); return (CUPS_SC_STATUS_BAD_MESSAGE); } if (status == CUPS_SC_STATUS_OK) { /* * Parse the response of the form "oid\0value"... */ if (strncmp(real_data, oid, oidlen) || real_data[oidlen] != '.' || !strcmp(real_data, last_oid)) { /* * Done with this set of OIDs... */ _cupsBufferRelease(real_data); return (CUPS_SC_STATUS_OK); } if ((size_t)real_datalen < sizeof(real_data)) real_data[real_datalen] = '\0'; real_oidlen = strlen(real_data) + 1; real_datalen -= (int)real_oidlen; /* * Call the callback with the OID and data... */ (*cb)(real_data, real_data + real_oidlen, real_datalen, context); /* * Update the current OID... */ current_oid = real_data; strlcpy(last_oid, current_oid, sizeof(last_oid)); } } while (status == CUPS_SC_STATUS_OK); _cupsBufferRelease(real_data); return (status); } /* * 'cupsSideChannelWrite()' - Write a side-channel message. * * This function is normally only called by backend programs to send * responses to a filter, driver, or port monitor program. * * @since CUPS 1.3/macOS 10.5@ */ int /* O - 0 on success, -1 on error */ cupsSideChannelWrite( cups_sc_command_t command, /* I - Command code */ cups_sc_status_t status, /* I - Status code */ const char *data, /* I - Data buffer pointer */ int datalen, /* I - Number of bytes of data */ double timeout) /* I - Timeout in seconds */ { char *buffer; /* Message buffer */ ssize_t bytes; /* Bytes written */ #ifdef HAVE_POLL struct pollfd pfd; /* Poll structure for poll() */ #else /* select() */ fd_set output_set; /* Output set for select() */ struct timeval stimeout; /* Timeout value for select() */ #endif /* HAVE_POLL */ /* * Range check input... */ if (command < CUPS_SC_CMD_SOFT_RESET || command >= CUPS_SC_CMD_MAX || datalen < 0 || datalen > _CUPS_SC_MAX_DATA || (datalen > 0 && !data)) return (-1); /* * See if we can safely write to the side-channel socket... */ #ifdef HAVE_POLL pfd.fd = CUPS_SC_FD; pfd.events = POLLOUT; if (timeout < 0.0) { if (poll(&pfd, 1, -1) < 1) return (-1); } else if (poll(&pfd, 1, (int)(timeout * 1000)) < 1) return (-1); #else /* select() */ FD_ZERO(&output_set); FD_SET(CUPS_SC_FD, &output_set); if (timeout < 0.0) { if (select(CUPS_SC_FD + 1, NULL, &output_set, NULL, NULL) < 1) return (-1); } else { stimeout.tv_sec = (int)timeout; stimeout.tv_usec = (int)(timeout * 1000000) % 1000000; if (select(CUPS_SC_FD + 1, NULL, &output_set, NULL, &stimeout) < 1) return (-1); } #endif /* HAVE_POLL */ /* * Write a side-channel message in the format: * * Byte(s) Description * ------- ------------------------------------------- * 0 Command code * 1 Status code * 2-3 Data length (network byte order) <= 16384 * 4-N Data */ if ((buffer = _cupsBufferGet((size_t)datalen + 4)) == NULL) return (-1); buffer[0] = command; buffer[1] = status; buffer[2] = (char)(datalen >> 8); buffer[3] = (char)(datalen & 255); bytes = 4; if (datalen > 0) { memcpy(buffer + 4, data, (size_t)datalen); bytes += datalen; } while (write(CUPS_SC_FD, buffer, (size_t)bytes) < 0) if (errno != EINTR && errno != EAGAIN) { _cupsBufferRelease(buffer); return (-1); } _cupsBufferRelease(buffer); return (0); } cups-2.2.7/cups/sidechannel.h000664 000765 000024 00000011200 13255074424 016545 0ustar00msweetstaff000000 000000 /* * Side-channel API definitions for CUPS. * * Copyright 2007-2012 by Apple Inc. * Copyright 2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_SIDECHANNEL_H_ # define _CUPS_SIDECHANNEL_H_ /* * Include necessary headers... */ # include "versioning.h" /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Constants... */ #define CUPS_SC_FD 4 /* File descriptor for select/poll */ /* * Enumerations... */ enum cups_sc_bidi_e /**** Bidirectional capability values ****/ { CUPS_SC_BIDI_NOT_SUPPORTED = 0, /* Bidirectional I/O is not supported */ CUPS_SC_BIDI_SUPPORTED = 1 /* Bidirectional I/O is supported */ }; typedef enum cups_sc_bidi_e cups_sc_bidi_t; /**** Bidirectional capabilities ****/ enum cups_sc_command_e /**** Request command codes ****/ { CUPS_SC_CMD_NONE = 0, /* No command @private@ */ CUPS_SC_CMD_SOFT_RESET = 1, /* Do a soft reset */ CUPS_SC_CMD_DRAIN_OUTPUT = 2, /* Drain all pending output */ CUPS_SC_CMD_GET_BIDI = 3, /* Return bidirectional capabilities */ CUPS_SC_CMD_GET_DEVICE_ID = 4, /* Return the IEEE-1284 device ID */ CUPS_SC_CMD_GET_STATE = 5, /* Return the device state */ CUPS_SC_CMD_SNMP_GET = 6, /* Query an SNMP OID @since CUPS 1.4/macOS 10.6@ */ CUPS_SC_CMD_SNMP_GET_NEXT = 7, /* Query the next SNMP OID @since CUPS 1.4/macOS 10.6@ */ CUPS_SC_CMD_GET_CONNECTED = 8, /* Return whether the backend is "connected" to the printer @since CUPS 1.5/macOS 10.7@ */ CUPS_SC_CMD_MAX /* End of valid values @private@ */ }; typedef enum cups_sc_command_e cups_sc_command_t; /**** Request command codes ****/ enum cups_sc_connected_e /**** Connectivity values ****/ { CUPS_SC_NOT_CONNECTED = 0, /* Backend is not "connected" to printer */ CUPS_SC_CONNECTED = 1 /* Backend is "connected" to printer */ }; typedef enum cups_sc_connected_e cups_sc_connected_t; /**** Connectivity values ****/ enum cups_sc_state_e /**** Printer state bits ****/ { CUPS_SC_STATE_OFFLINE = 0, /* Device is offline */ CUPS_SC_STATE_ONLINE = 1, /* Device is online */ CUPS_SC_STATE_BUSY = 2, /* Device is busy */ CUPS_SC_STATE_ERROR = 4, /* Other error condition */ CUPS_SC_STATE_MEDIA_LOW = 16, /* Paper low condition */ CUPS_SC_STATE_MEDIA_EMPTY = 32, /* Paper out condition */ CUPS_SC_STATE_MARKER_LOW = 64, /* Toner/ink low condition */ CUPS_SC_STATE_MARKER_EMPTY = 128 /* Toner/ink out condition */ }; typedef enum cups_sc_state_e cups_sc_state_t; /**** Printer state bits ****/ enum cups_sc_status_e /**** Response status codes ****/ { CUPS_SC_STATUS_NONE, /* No status */ CUPS_SC_STATUS_OK, /* Operation succeeded */ CUPS_SC_STATUS_IO_ERROR, /* An I/O error occurred */ CUPS_SC_STATUS_TIMEOUT, /* The backend did not respond */ CUPS_SC_STATUS_NO_RESPONSE, /* The device did not respond */ CUPS_SC_STATUS_BAD_MESSAGE, /* The command/response message was invalid */ CUPS_SC_STATUS_TOO_BIG, /* Response too big */ CUPS_SC_STATUS_NOT_IMPLEMENTED /* Command not implemented */ }; typedef enum cups_sc_status_e cups_sc_status_t; /**** Response status codes ****/ typedef void (*cups_sc_walk_func_t)(const char *oid, const char *data, int datalen, void *context); /**** SNMP walk callback ****/ /* * Prototypes... */ extern cups_sc_status_t cupsSideChannelDoRequest(cups_sc_command_t command, char *data, int *datalen, double timeout) _CUPS_API_1_3; extern int cupsSideChannelRead(cups_sc_command_t *command, cups_sc_status_t *status, char *data, int *datalen, double timeout) _CUPS_API_1_3; extern int cupsSideChannelWrite(cups_sc_command_t command, cups_sc_status_t status, const char *data, int datalen, double timeout) _CUPS_API_1_3; /**** New in CUPS 1.4 ****/ extern cups_sc_status_t cupsSideChannelSNMPGet(const char *oid, char *data, int *datalen, double timeout) _CUPS_API_1_4; extern cups_sc_status_t cupsSideChannelSNMPWalk(const char *oid, double timeout, cups_sc_walk_func_t cb, void *context) _CUPS_API_1_4; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_SIDECHANNEL_H_ */ cups-2.2.7/cups/snmp-private.h000664 000765 000024 00000011364 13255074424 016730 0ustar00msweetstaff000000 000000 /* * Private SNMP definitions for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 2006-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_SNMP_PRIVATE_H_ # define _CUPS_SNMP_PRIVATE_H_ /* * Include necessary headers. */ #include /* * Constants... */ #define CUPS_SNMP_PORT 161 /* SNMP well-known port */ #define CUPS_SNMP_MAX_COMMUNITY 512 /* Maximum size of community name */ #define CUPS_SNMP_MAX_OID 128 /* Maximum number of OID numbers */ #define CUPS_SNMP_MAX_PACKET 1472 /* Maximum size of SNMP packet */ #define CUPS_SNMP_MAX_STRING 1024 /* Maximum size of string */ #define CUPS_SNMP_VERSION_1 0 /* SNMPv1 */ /* * Types... */ enum cups_asn1_e /**** ASN1 request/object types ****/ { CUPS_ASN1_END_OF_CONTENTS = 0x00, /* End-of-contents */ CUPS_ASN1_BOOLEAN = 0x01, /* BOOLEAN */ CUPS_ASN1_INTEGER = 0x02, /* INTEGER or ENUMERATION */ CUPS_ASN1_BIT_STRING = 0x03, /* BIT STRING */ CUPS_ASN1_OCTET_STRING = 0x04, /* OCTET STRING */ CUPS_ASN1_NULL_VALUE = 0x05, /* NULL VALUE */ CUPS_ASN1_OID = 0x06, /* OBJECT IDENTIFIER */ CUPS_ASN1_SEQUENCE = 0x30, /* SEQUENCE */ CUPS_ASN1_HEX_STRING = 0x40, /* Binary string aka Hex-STRING */ CUPS_ASN1_COUNTER = 0x41, /* 32-bit unsigned aka Counter32 */ CUPS_ASN1_GAUGE = 0x42, /* 32-bit unsigned aka Gauge32 */ CUPS_ASN1_TIMETICKS = 0x43, /* 32-bit unsigned aka Timeticks32 */ CUPS_ASN1_GET_REQUEST = 0xa0, /* GetRequest-PDU */ CUPS_ASN1_GET_NEXT_REQUEST = 0xa1, /* GetNextRequest-PDU */ CUPS_ASN1_GET_RESPONSE = 0xa2 /* GetResponse-PDU */ }; typedef enum cups_asn1_e cups_asn1_t; /**** ASN1 request/object types ****/ typedef struct cups_snmp_string_s /**** String value ****/ { unsigned char bytes[CUPS_SNMP_MAX_STRING]; /* Bytes in string */ unsigned num_bytes; /* Number of bytes */ } cups_snmp_string_t; union cups_snmp_value_u /**** Object value ****/ { int boolean; /* Boolean value */ int integer; /* Integer value */ int counter; /* Counter value */ unsigned gauge; /* Gauge value */ unsigned timeticks; /* Timeticks value */ int oid[CUPS_SNMP_MAX_OID]; /* OID value */ cups_snmp_string_t string; /* String value */ }; typedef struct cups_snmp_s /**** SNMP data packet ****/ { const char *error; /* Encode/decode error */ http_addr_t address; /* Source address */ int version; /* Version number */ char community[CUPS_SNMP_MAX_COMMUNITY]; /* Community name */ cups_asn1_t request_type; /* Request type */ unsigned request_id; /* request-id value */ int error_status; /* error-status value */ int error_index; /* error-index value */ int object_name[CUPS_SNMP_MAX_OID]; /* object-name value */ cups_asn1_t object_type; /* object-value type */ union cups_snmp_value_u object_value; /* object-value value */ } cups_snmp_t; typedef void (*cups_snmp_cb_t)(cups_snmp_t *packet, void *data); /* * Prototypes... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ extern void _cupsSNMPClose(int fd) _CUPS_API_1_4; extern int *_cupsSNMPCopyOID(int *dst, const int *src, int dstsize) _CUPS_API_1_4; extern const char *_cupsSNMPDefaultCommunity(void) _CUPS_API_1_4; extern int _cupsSNMPIsOID(cups_snmp_t *packet, const int *oid) _CUPS_API_1_4; extern int _cupsSNMPIsOIDPrefixed(cups_snmp_t *packet, const int *prefix) _CUPS_API_1_4; extern char *_cupsSNMPOIDToString(const int *src, char *dst, size_t dstsize) _CUPS_API_1_4; extern int _cupsSNMPOpen(int family) _CUPS_API_1_4; extern cups_snmp_t *_cupsSNMPRead(int fd, cups_snmp_t *packet, double timeout) _CUPS_API_1_4; extern void _cupsSNMPSetDebug(int level) _CUPS_API_1_4; extern int *_cupsSNMPStringToOID(const char *src, int *dst, int dstsize) _CUPS_API_1_4; extern int _cupsSNMPWalk(int fd, http_addr_t *address, int version, const char *community, const int *prefix, double timeout, cups_snmp_cb_t cb, void *data) _CUPS_API_1_4; extern int _cupsSNMPWrite(int fd, http_addr_t *address, int version, const char *community, cups_asn1_t request_type, const unsigned request_id, const int *oid) _CUPS_API_1_4; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_SNMP_PRIVATE_H_ */ cups-2.2.7/cups/snmp.c000664 000765 000024 00000121130 13255074424 015244 0ustar00msweetstaff000000 000000 /* * SNMP functions for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 2006-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include "cups-private.h" #include "snmp-private.h" #ifdef HAVE_POLL # include #endif /* HAVE_POLL */ /* * Local functions... */ static void asn1_debug(const char *prefix, unsigned char *buffer, size_t len, int indent); static int asn1_decode_snmp(unsigned char *buffer, size_t len, cups_snmp_t *packet); static int asn1_encode_snmp(unsigned char *buffer, size_t len, cups_snmp_t *packet); static int asn1_get_integer(unsigned char **buffer, unsigned char *bufend, unsigned length); static int asn1_get_oid(unsigned char **buffer, unsigned char *bufend, unsigned length, int *oid, int oidsize); static int asn1_get_packed(unsigned char **buffer, unsigned char *bufend); static char *asn1_get_string(unsigned char **buffer, unsigned char *bufend, unsigned length, char *string, size_t strsize); static unsigned asn1_get_length(unsigned char **buffer, unsigned char *bufend); static int asn1_get_type(unsigned char **buffer, unsigned char *bufend); static void asn1_set_integer(unsigned char **buffer, int integer); static void asn1_set_length(unsigned char **buffer, unsigned length); static void asn1_set_oid(unsigned char **buffer, const int *oid); static void asn1_set_packed(unsigned char **buffer, int integer); static unsigned asn1_size_integer(int integer); static unsigned asn1_size_length(unsigned length); static unsigned asn1_size_oid(const int *oid); static unsigned asn1_size_packed(int integer); static void snmp_set_error(cups_snmp_t *packet, const char *message); /* * '_cupsSNMPClose()' - Close a SNMP socket. */ void _cupsSNMPClose(int fd) /* I - SNMP socket file descriptor */ { DEBUG_printf(("4_cupsSNMPClose(fd=%d)", fd)); httpAddrClose(NULL, fd); } /* * '_cupsSNMPCopyOID()' - Copy an OID. * * The array pointed to by "src" is terminated by the value -1. */ int * /* O - New OID */ _cupsSNMPCopyOID(int *dst, /* I - Destination OID */ const int *src, /* I - Source OID */ int dstsize) /* I - Number of integers in dst */ { int i; /* Looping var */ DEBUG_printf(("4_cupsSNMPCopyOID(dst=%p, src=%p, dstsize=%d)", dst, src, dstsize)); for (i = 0, dstsize --; src[i] >= 0 && i < dstsize; i ++) dst[i] = src[i]; dst[i] = -1; return (dst); } /* * '_cupsSNMPDefaultCommunity()' - Get the default SNMP community name. * * The default community name is the first community name found in the * snmp.conf file. If no community name is defined there, "public" is used. */ const char * /* O - Default community name */ _cupsSNMPDefaultCommunity(void) { cups_file_t *fp; /* snmp.conf file */ char line[1024], /* Line from file */ *value; /* Value from file */ int linenum; /* Line number in file */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ DEBUG_puts("4_cupsSNMPDefaultCommunity()"); if (!cg->snmp_community[0]) { strlcpy(cg->snmp_community, "public", sizeof(cg->snmp_community)); snprintf(line, sizeof(line), "%s/snmp.conf", cg->cups_serverroot); if ((fp = cupsFileOpen(line, "r")) != NULL) { linenum = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) if (!_cups_strcasecmp(line, "Community") && value) { strlcpy(cg->snmp_community, value, sizeof(cg->snmp_community)); break; } cupsFileClose(fp); } } DEBUG_printf(("5_cupsSNMPDefaultCommunity: Returning \"%s\"", cg->snmp_community)); return (cg->snmp_community); } /* * '_cupsSNMPIsOID()' - Test whether a SNMP response contains the specified OID. * * The array pointed to by "oid" is terminated by the value -1. */ int /* O - 1 if equal, 0 if not equal */ _cupsSNMPIsOID(cups_snmp_t *packet, /* I - Response packet */ const int *oid) /* I - OID */ { int i; /* Looping var */ /* * Range check input... */ DEBUG_printf(("4_cupsSNMPIsOID(packet=%p, oid=%p)", packet, oid)); if (!packet || !oid) { DEBUG_puts("5_cupsSNMPIsOID: Returning 0"); return (0); } /* * Compare OIDs... */ for (i = 0; i < CUPS_SNMP_MAX_OID && oid[i] >= 0 && packet->object_name[i] >= 0; i ++) if (oid[i] != packet->object_name[i]) { DEBUG_puts("5_cupsSNMPIsOID: Returning 0"); return (0); } DEBUG_printf(("5_cupsSNMPIsOID: Returning %d", i < CUPS_SNMP_MAX_OID && oid[i] == packet->object_name[i])); return (i < CUPS_SNMP_MAX_OID && oid[i] == packet->object_name[i]); } /* * '_cupsSNMPIsOIDPrefixed()' - Test whether a SNMP response uses the specified * OID prefix. * * The array pointed to by "prefix" is terminated by the value -1. */ int /* O - 1 if prefixed, 0 if not prefixed */ _cupsSNMPIsOIDPrefixed( cups_snmp_t *packet, /* I - Response packet */ const int *prefix) /* I - OID prefix */ { int i; /* Looping var */ /* * Range check input... */ DEBUG_printf(("4_cupsSNMPIsOIDPrefixed(packet=%p, prefix=%p)", packet, prefix)); if (!packet || !prefix) { DEBUG_puts("5_cupsSNMPIsOIDPrefixed: Returning 0"); return (0); } /* * Compare OIDs... */ for (i = 0; i < CUPS_SNMP_MAX_OID && prefix[i] >= 0 && packet->object_name[i] >= 0; i ++) if (prefix[i] != packet->object_name[i]) { DEBUG_puts("5_cupsSNMPIsOIDPrefixed: Returning 0"); return (0); } DEBUG_printf(("5_cupsSNMPIsOIDPrefixed: Returning %d", i < CUPS_SNMP_MAX_OID)); return (i < CUPS_SNMP_MAX_OID); } /* * '_cupsSNMPOIDToString()' - Convert an OID to a string. */ char * /* O - New string or @code NULL@ on error */ _cupsSNMPOIDToString(const int *src, /* I - OID */ char *dst, /* I - String buffer */ size_t dstsize) /* I - Size of string buffer */ { char *dstptr, /* Pointer into string buffer */ *dstend; /* End of string buffer */ DEBUG_printf(("4_cupsSNMPOIDToString(src=%p, dst=%p, dstsize=" CUPS_LLFMT ")", src, dst, CUPS_LLCAST dstsize)); /* * Range check input... */ if (!src || !dst || dstsize < 4) return (NULL); /* * Loop through the OID array and build a string... */ for (dstptr = dst, dstend = dstptr + dstsize - 1; *src >= 0 && dstptr < dstend; src ++, dstptr += strlen(dstptr)) snprintf(dstptr, (size_t)(dstend - dstptr + 1), ".%d", *src); if (*src >= 0) return (NULL); else return (dst); } /* * '_cupsSNMPOpen()' - Open a SNMP socket. */ int /* O - SNMP socket file descriptor */ _cupsSNMPOpen(int family) /* I - Address family - @code AF_INET@ or @code AF_INET6@ */ { int fd; /* SNMP socket file descriptor */ int val; /* Socket option value */ /* * Create the SNMP socket... */ DEBUG_printf(("4_cupsSNMPOpen(family=%d)", family)); if ((fd = socket(family, SOCK_DGRAM, 0)) < 0) { DEBUG_printf(("5_cupsSNMPOpen: Returning -1 (%s)", strerror(errno))); return (-1); } /* * Set the "broadcast" flag... */ val = 1; if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, CUPS_SOCAST &val, sizeof(val))) { DEBUG_printf(("5_cupsSNMPOpen: Returning -1 (%s)", strerror(errno))); close(fd); return (-1); } DEBUG_printf(("5_cupsSNMPOpen: Returning %d", fd)); return (fd); } /* * '_cupsSNMPRead()' - Read and parse a SNMP response. * * If "timeout" is negative, @code _cupsSNMPRead@ will wait for a response * indefinitely. */ cups_snmp_t * /* O - SNMP packet or @code NULL@ if none */ _cupsSNMPRead(int fd, /* I - SNMP socket file descriptor */ cups_snmp_t *packet, /* I - SNMP packet buffer */ double timeout) /* I - Timeout in seconds */ { unsigned char buffer[CUPS_SNMP_MAX_PACKET]; /* Data packet */ ssize_t bytes; /* Number of bytes received */ socklen_t addrlen; /* Source address length */ http_addr_t address; /* Source address */ /* * Range check input... */ DEBUG_printf(("4_cupsSNMPRead(fd=%d, packet=%p, timeout=%.1f)", fd, packet, timeout)); if (fd < 0 || !packet) { DEBUG_puts("5_cupsSNMPRead: Returning NULL"); return (NULL); } /* * Optionally wait for a response... */ if (timeout >= 0.0) { int ready; /* Data ready on socket? */ #ifdef HAVE_POLL struct pollfd pfd; /* Polled file descriptor */ pfd.fd = fd; pfd.events = POLLIN; while ((ready = poll(&pfd, 1, (int)(timeout * 1000.0))) < 0 && (errno == EINTR || errno == EAGAIN)); #else fd_set input_set; /* select() input set */ struct timeval stimeout; /* select() timeout */ do { FD_ZERO(&input_set); FD_SET(fd, &input_set); stimeout.tv_sec = (int)timeout; stimeout.tv_usec = (int)((timeout - stimeout.tv_sec) * 1000000); ready = select(fd + 1, &input_set, NULL, NULL, &stimeout); } # ifdef WIN32 while (ready < 0 && WSAGetLastError() == WSAEINTR); # else while (ready < 0 && (errno == EINTR || errno == EAGAIN)); # endif /* WIN32 */ #endif /* HAVE_POLL */ /* * If we don't have any data ready, return right away... */ if (ready <= 0) { DEBUG_puts("5_cupsSNMPRead: Returning NULL (timeout)"); return (NULL); } } /* * Read the response data... */ addrlen = sizeof(address); if ((bytes = recvfrom(fd, buffer, sizeof(buffer), 0, (void *)&address, &addrlen)) < 0) { DEBUG_printf(("5_cupsSNMPRead: Returning NULL (%s)", strerror(errno))); return (NULL); } /* * Look for the response status code in the SNMP message header... */ asn1_debug("DEBUG: IN ", buffer, (size_t)bytes, 0); asn1_decode_snmp(buffer, (size_t)bytes, packet); memcpy(&(packet->address), &address, sizeof(packet->address)); /* * Return decoded data packet... */ DEBUG_puts("5_cupsSNMPRead: Returning packet"); return (packet); } /* * '_cupsSNMPSetDebug()' - Enable/disable debug logging to stderr. */ void _cupsSNMPSetDebug(int level) /* I - 1 to enable debug output, 0 otherwise */ { _cups_globals_t *cg = _cupsGlobals(); /* Global data */ DEBUG_printf(("4_cupsSNMPSetDebug(level=%d)", level)); cg->snmp_debug = level; } /* * '_cupsSNMPStringToOID()' - Convert a numeric OID string to an OID array. * * This function converts a string of the form ".N.N.N.N.N" to the * corresponding OID array terminated by -1. * * @code NULL@ is returned if the array is not large enough or the string is * not a valid OID number. */ int * /* O - Pointer to OID array or @code NULL@ on error */ _cupsSNMPStringToOID(const char *src, /* I - OID string */ int *dst, /* I - OID array */ int dstsize)/* I - Number of integers in OID array */ { int *dstptr, /* Pointer into OID array */ *dstend; /* End of OID array */ DEBUG_printf(("4_cupsSNMPStringToOID(src=\"%s\", dst=%p, dstsize=%d)", src, dst, dstsize)); /* * Range check input... */ if (!src || !dst || dstsize < 2) return (NULL); /* * Skip leading "."... */ if (*src == '.') src ++; /* * Loop to the end of the string... */ for (dstend = dst + dstsize - 1, dstptr = dst, *dstptr = 0; *src && dstptr < dstend; src ++) { if (*src == '.') { dstptr ++; *dstptr = 0; } else if (isdigit(*src & 255)) *dstptr = *dstptr * 10 + *src - '0'; else break; } if (*src) return (NULL); /* * Terminate the end of the OID array and return... */ dstptr[1] = -1; return (dst); } /* * '_cupsSNMPWalk()' - Enumerate a group of OIDs. * * This function queries all of the OIDs with the specified OID prefix, * calling the "cb" function for every response that is received. * * The array pointed to by "prefix" is terminated by the value -1. * * If "timeout" is negative, @code _cupsSNMPWalk@ will wait for a response * indefinitely. */ int /* O - Number of OIDs found or -1 on error */ _cupsSNMPWalk(int fd, /* I - SNMP socket */ http_addr_t *address, /* I - Address to query */ int version, /* I - SNMP version */ const char *community,/* I - Community name */ const int *prefix, /* I - OID prefix */ double timeout, /* I - Timeout for each response in seconds */ cups_snmp_cb_t cb, /* I - Function to call for each response */ void *data) /* I - User data pointer that is passed to the callback function */ { int count = 0; /* Number of OIDs found */ unsigned request_id = 0; /* Current request ID */ cups_snmp_t packet; /* Current response packet */ int lastoid[CUPS_SNMP_MAX_OID]; /* Last OID we got */ /* * Range check input... */ DEBUG_printf(("4_cupsSNMPWalk(fd=%d, address=%p, version=%d, " "community=\"%s\", prefix=%p, timeout=%.1f, cb=%p, data=%p)", fd, address, version, community, prefix, timeout, cb, data)); if (fd < 0 || !address || version != CUPS_SNMP_VERSION_1 || !community || !prefix || !cb) { DEBUG_puts("5_cupsSNMPWalk: Returning -1"); return (-1); } /* * Copy the OID prefix and then loop until we have no more OIDs... */ _cupsSNMPCopyOID(packet.object_name, prefix, CUPS_SNMP_MAX_OID); lastoid[0] = -1; for (;;) { request_id ++; if (!_cupsSNMPWrite(fd, address, version, community, CUPS_ASN1_GET_NEXT_REQUEST, request_id, packet.object_name)) { DEBUG_puts("5_cupsSNMPWalk: Returning -1"); return (-1); } if (!_cupsSNMPRead(fd, &packet, timeout)) { DEBUG_puts("5_cupsSNMPWalk: Returning -1"); return (-1); } if (!_cupsSNMPIsOIDPrefixed(&packet, prefix) || _cupsSNMPIsOID(&packet, lastoid)) { DEBUG_printf(("5_cupsSNMPWalk: Returning %d", count)); return (count); } if (packet.error || packet.error_status) { DEBUG_printf(("5_cupsSNMPWalk: Returning %d", count > 0 ? count : -1)); return (count > 0 ? count : -1); } _cupsSNMPCopyOID(lastoid, packet.object_name, CUPS_SNMP_MAX_OID); count ++; (*cb)(&packet, data); } } /* * '_cupsSNMPWrite()' - Send an SNMP query packet. * * The array pointed to by "oid" is terminated by the value -1. */ int /* O - 1 on success, 0 on error */ _cupsSNMPWrite( int fd, /* I - SNMP socket */ http_addr_t *address, /* I - Address to send to */ int version, /* I - SNMP version */ const char *community, /* I - Community name */ cups_asn1_t request_type, /* I - Request type */ const unsigned request_id, /* I - Request ID */ const int *oid) /* I - OID */ { int i; /* Looping var */ cups_snmp_t packet; /* SNMP message packet */ unsigned char buffer[CUPS_SNMP_MAX_PACKET]; /* SNMP message buffer */ ssize_t bytes; /* Size of message */ http_addr_t temp; /* Copy of address */ /* * Range check input... */ DEBUG_printf(("4_cupsSNMPWrite(fd=%d, address=%p, version=%d, " "community=\"%s\", request_type=%d, request_id=%u, oid=%p)", fd, address, version, community, request_type, request_id, oid)); if (fd < 0 || !address || version != CUPS_SNMP_VERSION_1 || !community || (request_type != CUPS_ASN1_GET_REQUEST && request_type != CUPS_ASN1_GET_NEXT_REQUEST) || request_id < 1 || !oid) { DEBUG_puts("5_cupsSNMPWrite: Returning 0 (bad arguments)"); return (0); } /* * Create the SNMP message... */ memset(&packet, 0, sizeof(packet)); packet.version = version; packet.request_type = request_type; packet.request_id = request_id; packet.object_type = CUPS_ASN1_NULL_VALUE; strlcpy(packet.community, community, sizeof(packet.community)); for (i = 0; oid[i] >= 0 && i < (CUPS_SNMP_MAX_OID - 1); i ++) packet.object_name[i] = oid[i]; packet.object_name[i] = -1; if (oid[i] >= 0) { DEBUG_puts("5_cupsSNMPWrite: Returning 0 (OID too big)"); errno = E2BIG; return (0); } bytes = asn1_encode_snmp(buffer, sizeof(buffer), &packet); if (bytes < 0) { DEBUG_puts("5_cupsSNMPWrite: Returning 0 (request too big)"); errno = E2BIG; return (0); } asn1_debug("DEBUG: OUT ", buffer, (size_t)bytes, 0); /* * Send the message... */ temp = *address; _httpAddrSetPort(&temp, CUPS_SNMP_PORT); return (sendto(fd, buffer, (size_t)bytes, 0, (void *)&temp, (socklen_t)httpAddrLength(&temp)) == bytes); } /* * 'asn1_debug()' - Decode an ASN1-encoded message. */ static void asn1_debug(const char *prefix, /* I - Prefix string */ unsigned char *buffer, /* I - Buffer */ size_t len, /* I - Length of buffer */ int indent) /* I - Indentation */ { size_t i; /* Looping var */ unsigned char *bufend; /* End of buffer */ int integer; /* Number value */ int oid[CUPS_SNMP_MAX_OID]; /* OID value */ char string[CUPS_SNMP_MAX_STRING]; /* String value */ unsigned char value_type; /* Type of value */ unsigned value_length; /* Length of value */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ #ifdef __clang_analyzer__ /* Suppress bogus clang error */ memset(string, 0, sizeof(string)); #endif /* __clang_analyzer__ */ if (cg->snmp_debug <= 0) return; if (cg->snmp_debug > 1 && indent == 0) { /* * Do a hex dump of the packet... */ size_t j; fprintf(stderr, "%sHex Dump (%d bytes):\n", prefix, (int)len); for (i = 0; i < len; i += 16) { fprintf(stderr, "%s%04x:", prefix, (unsigned)i); for (j = 0; j < 16 && (i + j) < len; j ++) { if (j && !(j & 3)) fprintf(stderr, " %02x", buffer[i + j]); else fprintf(stderr, " %02x", buffer[i + j]); } while (j < 16) { if (j && !(j & 3)) fputs(" ", stderr); else fputs(" ", stderr); j ++; } fputs(" ", stderr); for (j = 0; j < 16 && (i + j) < len; j ++) if (buffer[i + j] < ' ' || buffer[i + j] >= 0x7f) putc('.', stderr); else putc(buffer[i + j], stderr); putc('\n', stderr); } } if (indent == 0) fprintf(stderr, "%sMessage:\n", prefix); bufend = buffer + len; while (buffer < bufend) { /* * Get value type... */ value_type = (unsigned char)asn1_get_type(&buffer, bufend); value_length = asn1_get_length(&buffer, bufend); switch (value_type) { case CUPS_ASN1_BOOLEAN : integer = asn1_get_integer(&buffer, bufend, value_length); fprintf(stderr, "%s%*sBOOLEAN %d bytes %d\n", prefix, indent, "", value_length, integer); break; case CUPS_ASN1_INTEGER : integer = asn1_get_integer(&buffer, bufend, value_length); fprintf(stderr, "%s%*sINTEGER %d bytes %d\n", prefix, indent, "", value_length, integer); break; case CUPS_ASN1_COUNTER : integer = asn1_get_integer(&buffer, bufend, value_length); fprintf(stderr, "%s%*sCOUNTER %d bytes %u\n", prefix, indent, "", value_length, (unsigned)integer); break; case CUPS_ASN1_GAUGE : integer = asn1_get_integer(&buffer, bufend, value_length); fprintf(stderr, "%s%*sGAUGE %d bytes %u\n", prefix, indent, "", value_length, (unsigned)integer); break; case CUPS_ASN1_TIMETICKS : integer = asn1_get_integer(&buffer, bufend, value_length); fprintf(stderr, "%s%*sTIMETICKS %d bytes %u\n", prefix, indent, "", value_length, (unsigned)integer); break; case CUPS_ASN1_OCTET_STRING : fprintf(stderr, "%s%*sOCTET STRING %d bytes \"%s\"\n", prefix, indent, "", value_length, asn1_get_string(&buffer, bufend, value_length, string, sizeof(string))); break; case CUPS_ASN1_HEX_STRING : asn1_get_string(&buffer, bufend, value_length, string, sizeof(string)); fprintf(stderr, "%s%*sHex-STRING %d bytes", prefix, indent, "", value_length); for (i = 0; i < value_length; i ++) fprintf(stderr, " %02X", string[i] & 255); putc('\n', stderr); break; case CUPS_ASN1_NULL_VALUE : fprintf(stderr, "%s%*sNULL VALUE %d bytes\n", prefix, indent, "", value_length); buffer += value_length; break; case CUPS_ASN1_OID : integer = asn1_get_oid(&buffer, bufend, value_length, oid, CUPS_SNMP_MAX_OID); fprintf(stderr, "%s%*sOID %d bytes ", prefix, indent, "", value_length); for (i = 0; i < (unsigned)integer; i ++) fprintf(stderr, ".%d", oid[i]); putc('\n', stderr); break; case CUPS_ASN1_SEQUENCE : fprintf(stderr, "%s%*sSEQUENCE %d bytes\n", prefix, indent, "", value_length); asn1_debug(prefix, buffer, value_length, indent + 4); buffer += value_length; break; case CUPS_ASN1_GET_NEXT_REQUEST : fprintf(stderr, "%s%*sGet-Next-Request-PDU %d bytes\n", prefix, indent, "", value_length); asn1_debug(prefix, buffer, value_length, indent + 4); buffer += value_length; break; case CUPS_ASN1_GET_REQUEST : fprintf(stderr, "%s%*sGet-Request-PDU %d bytes\n", prefix, indent, "", value_length); asn1_debug(prefix, buffer, value_length, indent + 4); buffer += value_length; break; case CUPS_ASN1_GET_RESPONSE : fprintf(stderr, "%s%*sGet-Response-PDU %d bytes\n", prefix, indent, "", value_length); asn1_debug(prefix, buffer, value_length, indent + 4); buffer += value_length; break; default : fprintf(stderr, "%s%*sUNKNOWN(%x) %d bytes\n", prefix, indent, "", value_type, value_length); buffer += value_length; break; } } } /* * 'asn1_decode_snmp()' - Decode a SNMP packet. */ static int /* O - 0 on success, -1 on error */ asn1_decode_snmp(unsigned char *buffer, /* I - Buffer */ size_t len, /* I - Size of buffer */ cups_snmp_t *packet) /* I - SNMP packet */ { unsigned char *bufptr, /* Pointer into the data */ *bufend; /* End of data */ unsigned length; /* Length of value */ /* * Initialize the decoding... */ memset(packet, 0, sizeof(cups_snmp_t)); packet->object_name[0] = -1; bufptr = buffer; bufend = buffer + len; if (asn1_get_type(&bufptr, bufend) != CUPS_ASN1_SEQUENCE) snmp_set_error(packet, _("Packet does not start with SEQUENCE")); else if (asn1_get_length(&bufptr, bufend) == 0) snmp_set_error(packet, _("SEQUENCE uses indefinite length")); else if (asn1_get_type(&bufptr, bufend) != CUPS_ASN1_INTEGER) snmp_set_error(packet, _("No version number")); else if ((length = asn1_get_length(&bufptr, bufend)) == 0) snmp_set_error(packet, _("Version uses indefinite length")); else if ((packet->version = asn1_get_integer(&bufptr, bufend, length)) != CUPS_SNMP_VERSION_1) snmp_set_error(packet, _("Bad SNMP version number")); else if (asn1_get_type(&bufptr, bufend) != CUPS_ASN1_OCTET_STRING) snmp_set_error(packet, _("No community name")); else if ((length = asn1_get_length(&bufptr, bufend)) == 0) snmp_set_error(packet, _("Community name uses indefinite length")); else { asn1_get_string(&bufptr, bufend, length, packet->community, sizeof(packet->community)); if ((packet->request_type = (cups_asn1_t)asn1_get_type(&bufptr, bufend)) != CUPS_ASN1_GET_RESPONSE) snmp_set_error(packet, _("Packet does not contain a Get-Response-PDU")); else if (asn1_get_length(&bufptr, bufend) == 0) snmp_set_error(packet, _("Get-Response-PDU uses indefinite length")); else if (asn1_get_type(&bufptr, bufend) != CUPS_ASN1_INTEGER) snmp_set_error(packet, _("No request-id")); else if ((length = asn1_get_length(&bufptr, bufend)) == 0) snmp_set_error(packet, _("request-id uses indefinite length")); else { packet->request_id = (unsigned)asn1_get_integer(&bufptr, bufend, length); if (asn1_get_type(&bufptr, bufend) != CUPS_ASN1_INTEGER) snmp_set_error(packet, _("No error-status")); else if ((length = asn1_get_length(&bufptr, bufend)) == 0) snmp_set_error(packet, _("error-status uses indefinite length")); else { packet->error_status = asn1_get_integer(&bufptr, bufend, length); if (asn1_get_type(&bufptr, bufend) != CUPS_ASN1_INTEGER) snmp_set_error(packet, _("No error-index")); else if ((length = asn1_get_length(&bufptr, bufend)) == 0) snmp_set_error(packet, _("error-index uses indefinite length")); else { packet->error_index = asn1_get_integer(&bufptr, bufend, length); if (asn1_get_type(&bufptr, bufend) != CUPS_ASN1_SEQUENCE) snmp_set_error(packet, _("No variable-bindings SEQUENCE")); else if (asn1_get_length(&bufptr, bufend) == 0) snmp_set_error(packet, _("variable-bindings uses indefinite length")); else if (asn1_get_type(&bufptr, bufend) != CUPS_ASN1_SEQUENCE) snmp_set_error(packet, _("No VarBind SEQUENCE")); else if (asn1_get_length(&bufptr, bufend) == 0) snmp_set_error(packet, _("VarBind uses indefinite length")); else if (asn1_get_type(&bufptr, bufend) != CUPS_ASN1_OID) snmp_set_error(packet, _("No name OID")); else if ((length = asn1_get_length(&bufptr, bufend)) == 0) snmp_set_error(packet, _("Name OID uses indefinite length")); else { asn1_get_oid(&bufptr, bufend, length, packet->object_name, CUPS_SNMP_MAX_OID); packet->object_type = (cups_asn1_t)asn1_get_type(&bufptr, bufend); if ((length = asn1_get_length(&bufptr, bufend)) == 0 && packet->object_type != CUPS_ASN1_NULL_VALUE && packet->object_type != CUPS_ASN1_OCTET_STRING) snmp_set_error(packet, _("Value uses indefinite length")); else { switch (packet->object_type) { case CUPS_ASN1_BOOLEAN : packet->object_value.boolean = asn1_get_integer(&bufptr, bufend, length); break; case CUPS_ASN1_INTEGER : packet->object_value.integer = asn1_get_integer(&bufptr, bufend, length); break; case CUPS_ASN1_NULL_VALUE : break; case CUPS_ASN1_OCTET_STRING : case CUPS_ASN1_BIT_STRING : case CUPS_ASN1_HEX_STRING : packet->object_value.string.num_bytes = length; asn1_get_string(&bufptr, bufend, length, (char *)packet->object_value.string.bytes, sizeof(packet->object_value.string.bytes)); break; case CUPS_ASN1_OID : asn1_get_oid(&bufptr, bufend, length, packet->object_value.oid, CUPS_SNMP_MAX_OID); break; case CUPS_ASN1_COUNTER : packet->object_value.counter = asn1_get_integer(&bufptr, bufend, length); break; case CUPS_ASN1_GAUGE : packet->object_value.gauge = (unsigned)asn1_get_integer(&bufptr, bufend, length); break; case CUPS_ASN1_TIMETICKS : packet->object_value.timeticks = (unsigned)asn1_get_integer(&bufptr, bufend, length); break; default : snmp_set_error(packet, _("Unsupported value type")); break; } } } } } } } return (packet->error ? -1 : 0); } /* * 'asn1_encode_snmp()' - Encode a SNMP packet. */ static int /* O - Length on success, -1 on error */ asn1_encode_snmp(unsigned char *buffer, /* I - Buffer */ size_t bufsize, /* I - Size of buffer */ cups_snmp_t *packet) /* I - SNMP packet */ { unsigned char *bufptr; /* Pointer into buffer */ unsigned total, /* Total length */ msglen, /* Length of entire message */ commlen, /* Length of community string */ reqlen, /* Length of request */ listlen, /* Length of variable list */ varlen, /* Length of variable */ namelen, /* Length of object name OID */ valuelen; /* Length of object value */ /* * Get the lengths of the community string, OID, and message... */ namelen = asn1_size_oid(packet->object_name); switch (packet->object_type) { case CUPS_ASN1_NULL_VALUE : valuelen = 0; break; case CUPS_ASN1_BOOLEAN : valuelen = asn1_size_integer(packet->object_value.boolean); break; case CUPS_ASN1_INTEGER : valuelen = asn1_size_integer(packet->object_value.integer); break; case CUPS_ASN1_OCTET_STRING : valuelen = packet->object_value.string.num_bytes; break; case CUPS_ASN1_OID : valuelen = asn1_size_oid(packet->object_value.oid); break; default : packet->error = "Unknown object type"; return (-1); } varlen = 1 + asn1_size_length(namelen) + namelen + 1 + asn1_size_length(valuelen) + valuelen; listlen = 1 + asn1_size_length(varlen) + varlen; reqlen = 2 + asn1_size_integer((int)packet->request_id) + 2 + asn1_size_integer(packet->error_status) + 2 + asn1_size_integer(packet->error_index) + 1 + asn1_size_length(listlen) + listlen; commlen = (unsigned)strlen(packet->community); msglen = 2 + asn1_size_integer(packet->version) + 1 + asn1_size_length(commlen) + commlen + 1 + asn1_size_length(reqlen) + reqlen; total = 1 + asn1_size_length(msglen) + msglen; if (total > bufsize) { packet->error = "Message too large for buffer"; return (-1); } /* * Then format the message... */ bufptr = buffer; *bufptr++ = CUPS_ASN1_SEQUENCE; /* SNMPv1 message header */ asn1_set_length(&bufptr, msglen); asn1_set_integer(&bufptr, packet->version); /* version */ *bufptr++ = CUPS_ASN1_OCTET_STRING; /* community */ asn1_set_length(&bufptr, commlen); memcpy(bufptr, packet->community, commlen); bufptr += commlen; *bufptr++ = packet->request_type; /* Get-Request-PDU/Get-Next-Request-PDU */ asn1_set_length(&bufptr, reqlen); asn1_set_integer(&bufptr, (int)packet->request_id); asn1_set_integer(&bufptr, packet->error_status); asn1_set_integer(&bufptr, packet->error_index); *bufptr++ = CUPS_ASN1_SEQUENCE; /* variable-bindings */ asn1_set_length(&bufptr, listlen); *bufptr++ = CUPS_ASN1_SEQUENCE; /* variable */ asn1_set_length(&bufptr, varlen); asn1_set_oid(&bufptr, packet->object_name); /* ObjectName */ switch (packet->object_type) { case CUPS_ASN1_NULL_VALUE : *bufptr++ = CUPS_ASN1_NULL_VALUE; /* ObjectValue */ *bufptr++ = 0; /* Length */ break; case CUPS_ASN1_BOOLEAN : asn1_set_integer(&bufptr, packet->object_value.boolean); break; case CUPS_ASN1_INTEGER : asn1_set_integer(&bufptr, packet->object_value.integer); break; case CUPS_ASN1_OCTET_STRING : *bufptr++ = CUPS_ASN1_OCTET_STRING; asn1_set_length(&bufptr, valuelen); memcpy(bufptr, packet->object_value.string.bytes, valuelen); bufptr += valuelen; break; case CUPS_ASN1_OID : asn1_set_oid(&bufptr, packet->object_value.oid); break; default : break; } return ((int)(bufptr - buffer)); } /* * 'asn1_get_integer()' - Get an integer value. */ static int /* O - Integer value */ asn1_get_integer( unsigned char **buffer, /* IO - Pointer in buffer */ unsigned char *bufend, /* I - End of buffer */ unsigned length) /* I - Length of value */ { int value; /* Integer value */ if (length > sizeof(int)) { (*buffer) += length; return (0); } for (value = (**buffer & 0x80) ? -1 : 0; length > 0 && *buffer < bufend; length --, (*buffer) ++) value = (value << 8) | **buffer; return (value); } /* * 'asn1_get_length()' - Get a value length. */ static unsigned /* O - Length */ asn1_get_length(unsigned char **buffer, /* IO - Pointer in buffer */ unsigned char *bufend) /* I - End of buffer */ { unsigned length; /* Length */ length = **buffer; (*buffer) ++; if (length & 128) { int count; /* Number of bytes for length */ if ((count = length & 127) > sizeof(unsigned)) { (*buffer) += count; return (0); } for (length = 0; count > 0 && *buffer < bufend; count --, (*buffer) ++) length = (length << 8) | **buffer; } return (length); } /* * 'asn1_get_oid()' - Get an OID value. */ static int /* O - Number of OIDs */ asn1_get_oid( unsigned char **buffer, /* IO - Pointer in buffer */ unsigned char *bufend, /* I - End of buffer */ unsigned length, /* I - Length of value */ int *oid, /* I - OID buffer */ int oidsize) /* I - Size of OID buffer */ { unsigned char *valend; /* End of value */ int *oidptr, /* Current OID */ *oidend; /* End of OID buffer */ int number; /* OID number */ valend = *buffer + length; oidptr = oid; oidend = oid + oidsize - 1; if (valend > bufend) valend = bufend; number = asn1_get_packed(buffer, bufend); if (number < 80) { *oidptr++ = number / 40; number = number % 40; *oidptr++ = number; } else { *oidptr++ = 2; number -= 80; *oidptr++ = number; } while (*buffer < valend) { number = asn1_get_packed(buffer, bufend); if (oidptr < oidend) *oidptr++ = number; } *oidptr = -1; return ((int)(oidptr - oid)); } /* * 'asn1_get_packed()' - Get a packed integer value. */ static int /* O - Value */ asn1_get_packed( unsigned char **buffer, /* IO - Pointer in buffer */ unsigned char *bufend) /* I - End of buffer */ { int value; /* Value */ value = 0; while ((**buffer & 128) && *buffer < bufend) { value = (value << 7) | (**buffer & 127); (*buffer) ++; } if (*buffer < bufend) { value = (value << 7) | **buffer; (*buffer) ++; } return (value); } /* * 'asn1_get_string()' - Get a string value. */ static char * /* O - String */ asn1_get_string( unsigned char **buffer, /* IO - Pointer in buffer */ unsigned char *bufend, /* I - End of buffer */ unsigned length, /* I - Value length */ char *string, /* I - String buffer */ size_t strsize) /* I - String buffer size */ { if (length > (unsigned)(bufend - *buffer)) length = (unsigned)(bufend - *buffer); if (length < strsize) { /* * String is smaller than the buffer... */ if (length > 0) memcpy(string, *buffer, length); string[length] = '\0'; } else { /* * String is larger than the buffer... */ memcpy(string, *buffer, strsize - 1); string[strsize - 1] = '\0'; } if (length > 0) (*buffer) += length; return (string); } /* * 'asn1_get_type()' - Get a value type. */ static int /* O - Type */ asn1_get_type(unsigned char **buffer, /* IO - Pointer in buffer */ unsigned char *bufend) /* I - End of buffer */ { int type; /* Type */ type = **buffer; (*buffer) ++; if ((type & 31) == 31) type = asn1_get_packed(buffer, bufend); return (type); } /* * 'asn1_set_integer()' - Set an integer value. */ static void asn1_set_integer(unsigned char **buffer,/* IO - Pointer in buffer */ int integer) /* I - Integer value */ { **buffer = CUPS_ASN1_INTEGER; (*buffer) ++; if (integer > 0x7fffff || integer < -0x800000) { **buffer = 4; (*buffer) ++; **buffer = (unsigned char)(integer >> 24); (*buffer) ++; **buffer = (unsigned char)(integer >> 16); (*buffer) ++; **buffer = (unsigned char)(integer >> 8); (*buffer) ++; **buffer = (unsigned char)integer; (*buffer) ++; } else if (integer > 0x7fff || integer < -0x8000) { **buffer = 3; (*buffer) ++; **buffer = (unsigned char)(integer >> 16); (*buffer) ++; **buffer = (unsigned char)(integer >> 8); (*buffer) ++; **buffer = (unsigned char)integer; (*buffer) ++; } else if (integer > 0x7f || integer < -0x80) { **buffer = 2; (*buffer) ++; **buffer = (unsigned char)(integer >> 8); (*buffer) ++; **buffer = (unsigned char)integer; (*buffer) ++; } else { **buffer = 1; (*buffer) ++; **buffer = (unsigned char)integer; (*buffer) ++; } } /* * 'asn1_set_length()' - Set a value length. */ static void asn1_set_length(unsigned char **buffer, /* IO - Pointer in buffer */ unsigned length) /* I - Length value */ { if (length > 255) { **buffer = 0x82; /* 2-byte length */ (*buffer) ++; **buffer = (unsigned char)(length >> 8); (*buffer) ++; **buffer = (unsigned char)length; (*buffer) ++; } else if (length > 127) { **buffer = 0x81; /* 1-byte length */ (*buffer) ++; **buffer = (unsigned char)length; (*buffer) ++; } else { **buffer = (unsigned char)length; /* Length */ (*buffer) ++; } } /* * 'asn1_set_oid()' - Set an OID value. */ static void asn1_set_oid(unsigned char **buffer, /* IO - Pointer in buffer */ const int *oid) /* I - OID value */ { **buffer = CUPS_ASN1_OID; (*buffer) ++; asn1_set_length(buffer, asn1_size_oid(oid)); if (oid[1] < 0) { asn1_set_packed(buffer, oid[0] * 40); return; } asn1_set_packed(buffer, oid[0] * 40 + oid[1]); for (oid += 2; *oid >= 0; oid ++) asn1_set_packed(buffer, *oid); } /* * 'asn1_set_packed()' - Set a packed integer value. */ static void asn1_set_packed(unsigned char **buffer, /* IO - Pointer in buffer */ int integer) /* I - Integer value */ { if (integer > 0xfffffff) { **buffer = ((integer >> 28) & 0x7f) | 0x80; (*buffer) ++; } if (integer > 0x1fffff) { **buffer = ((integer >> 21) & 0x7f) | 0x80; (*buffer) ++; } if (integer > 0x3fff) { **buffer = ((integer >> 14) & 0x7f) | 0x80; (*buffer) ++; } if (integer > 0x7f) { **buffer = ((integer >> 7) & 0x7f) | 0x80; (*buffer) ++; } **buffer = integer & 0x7f; (*buffer) ++; } /* * 'asn1_size_integer()' - Figure out the number of bytes needed for an * integer value. */ static unsigned /* O - Size in bytes */ asn1_size_integer(int integer) /* I - Integer value */ { if (integer > 0x7fffff || integer < -0x800000) return (4); else if (integer > 0x7fff || integer < -0x8000) return (3); else if (integer > 0x7f || integer < -0x80) return (2); else return (1); } /* * 'asn1_size_length()' - Figure out the number of bytes needed for a * length value. */ static unsigned /* O - Size in bytes */ asn1_size_length(unsigned length) /* I - Length value */ { if (length > 0xff) return (3); else if (length > 0x7f) return (2); else return (1); } /* * 'asn1_size_oid()' - Figure out the numebr of bytes needed for an * OID value. */ static unsigned /* O - Size in bytes */ asn1_size_oid(const int *oid) /* I - OID value */ { unsigned length; /* Length of value */ if (oid[1] < 0) return (asn1_size_packed(oid[0] * 40)); for (length = asn1_size_packed(oid[0] * 40 + oid[1]), oid += 2; *oid >= 0; oid ++) length += asn1_size_packed(*oid); return (length); } /* * 'asn1_size_packed()' - Figure out the number of bytes needed for a * packed integer value. */ static unsigned /* O - Size in bytes */ asn1_size_packed(int integer) /* I - Integer value */ { if (integer > 0xfffffff) return (5); else if (integer > 0x1fffff) return (4); else if (integer > 0x3fff) return (3); else if (integer > 0x7f) return (2); else return (1); } /* * 'snmp_set_error()' - Set the localized error for a packet. */ static void snmp_set_error(cups_snmp_t *packet, /* I - Packet */ const char *message) /* I - Error message */ { _cups_globals_t *cg = _cupsGlobals(); /* Global data */ if (!cg->lang_default) cg->lang_default = cupsLangDefault(); packet->error = _cupsLangString(cg->lang_default, message); } cups-2.2.7/cups/snprintf.c000664 000765 000024 00000016230 13255074424 016136 0ustar00msweetstaff000000 000000 /* * snprintf functions for CUPS. * * Copyright 2007-2013 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "string-private.h" #ifndef HAVE_VSNPRINTF /* * '_cups_vsnprintf()' - Format a string into a fixed size buffer. */ int /* O - Number of bytes formatted */ _cups_vsnprintf(char *buffer, /* O - Output buffer */ size_t bufsize, /* O - Size of output buffer */ const char *format, /* I - printf-style format string */ va_list ap) /* I - Pointer to additional arguments */ { char *bufptr, /* Pointer to position in buffer */ *bufend, /* Pointer to end of buffer */ sign, /* Sign of format width */ size, /* Size character (h, l, L) */ type; /* Format type character */ int width, /* Width of field */ prec; /* Number of characters of precision */ char tformat[100], /* Temporary format string for sprintf() */ *tptr, /* Pointer into temporary format */ temp[1024]; /* Buffer for formatted numbers */ size_t templen; /* Length of "temp" */ char *s; /* Pointer to string */ int slen; /* Length of string */ int bytes; /* Total number of bytes needed */ /* * Loop through the format string, formatting as needed... */ bufptr = buffer; bufend = buffer + bufsize - 1; bytes = 0; while (*format) { if (*format == '%') { tptr = tformat; *tptr++ = *format++; if (*format == '%') { if (bufptr && bufptr < bufend) *bufptr++ = *format; bytes ++; format ++; continue; } else if (strchr(" -+#\'", *format)) { *tptr++ = *format; sign = *format++; } else sign = 0; if (*format == '*') { /* * Get width from argument... */ format ++; width = va_arg(ap, int); snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", width); tptr += strlen(tptr); } else { width = 0; while (isdigit(*format & 255)) { if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; width = width * 10 + *format++ - '0'; } } if (*format == '.') { if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; format ++; if (*format == '*') { /* * Get precision from argument... */ format ++; prec = va_arg(ap, int); snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", prec); tptr += strlen(tptr); } else { prec = 0; while (isdigit(*format & 255)) { if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; prec = prec * 10 + *format++ - '0'; } } } else prec = -1; if (*format == 'l' && format[1] == 'l') { size = 'L'; if (tptr < (tformat + sizeof(tformat) - 2)) { *tptr++ = 'l'; *tptr++ = 'l'; } format += 2; } else if (*format == 'h' || *format == 'l' || *format == 'L') { if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; size = *format++; } if (!*format) break; if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format; type = *format++; *tptr = '\0'; switch (type) { case 'E' : /* Floating point formats */ case 'G' : case 'e' : case 'f' : case 'g' : if ((width + 2) > sizeof(temp)) break; sprintf(temp, tformat, va_arg(ap, double)); templen = strlen(temp): bytes += (int)templen; if (bufptr) { if ((bufptr + templen) > bufend) { strlcpy(bufptr, temp, (size_t)(bufend - bufptr)); bufptr = bufend; } else { memcpy(bufptr, temp, templen + 1); bufptr += templen; } } break; case 'B' : /* Integer formats */ case 'X' : case 'b' : case 'd' : case 'i' : case 'o' : case 'u' : case 'x' : if ((width + 2) > sizeof(temp)) break; sprintf(temp, tformat, va_arg(ap, int)); templen = strlen(temp): bytes += (int)templen; if (bufptr) { if ((bufptr + templen) > bufend) { strlcpy(bufptr, temp, (size_t)(bufend - bufptr)); bufptr = bufend; } else { memcpy(bufptr, temp, templen + 1); bufptr += templen; } } break; case 'p' : /* Pointer value */ if ((width + 2) > sizeof(temp)) break; sprintf(temp, tformat, va_arg(ap, void *)); templen = strlen(temp): bytes += (int)templen; if (bufptr) { if ((bufptr + templen) > bufend) { strlcpy(bufptr, temp, (size_t)(bufend - bufptr)); bufptr = bufend; } else { memcpy(bufptr, temp, templen + 1); bufptr += templen; } } break; case 'c' : /* Character or character array */ bytes += width; if (bufptr) { if (width <= 1) *bufptr++ = va_arg(ap, int); else { if ((bufptr + width) > bufend) width = (int)(bufend - bufptr); memcpy(bufptr, va_arg(ap, char *), (size_t)width); bufptr += width; } } break; case 's' : /* String */ if ((s = va_arg(ap, char *)) == NULL) s = "(null)"; slen = (int)strlen(s); if (slen > width && prec != width) width = slen; bytes += width; if (bufptr) { if ((bufptr + width) > bufend) width = (int)(bufend - bufptr); if (slen > width) slen = width; if (sign == '-') { memcpy(bufptr, s, (size_t)slen); memset(bufptr + slen, ' ', (size_t)(width - slen)); } else { memset(bufptr, ' ', (size_t)(width - slen)); memcpy(bufptr + width - slen, s, (size_t)slen); } bufptr += width; } break; case 'n' : /* Output number of chars so far */ *(va_arg(ap, int *)) = bytes; break; } } else { bytes ++; if (bufptr && bufptr < bufend) *bufptr++ = *format; format ++; } } /* * Nul-terminate the string and return the number of characters needed. */ *bufptr = '\0'; return (bytes); } #endif /* !HAVE_VSNPRINT */ #ifndef HAVE_SNPRINTF /* * '_cups_snprintf()' - Format a string into a fixed size buffer. */ int /* O - Number of bytes formatted */ _cups_snprintf(char *buffer, /* O - Output buffer */ size_t bufsize, /* O - Size of output buffer */ const char *format, /* I - printf-style format string */ ...) /* I - Additional arguments as needed */ { int bytes; /* Number of bytes formatted */ va_list ap; /* Pointer to additional arguments */ va_start(ap, format); bytes = vsnprintf(buffer, bufsize, format, ap); va_end(ap); return (bytes); } #endif /* !HAVE_SNPRINTF */ cups-2.2.7/cups/string-private.h000664 000765 000024 00000013043 13255074424 017255 0ustar00msweetstaff000000 000000 /* * Private string definitions for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_STRING_PRIVATE_H_ # define _CUPS_STRING_PRIVATE_H_ /* * Include necessary headers... */ # include # include # include # include # include # include # include # include "config.h" # ifdef HAVE_STRING_H # include # endif /* HAVE_STRING_H */ # ifdef HAVE_STRINGS_H # include # endif /* HAVE_STRINGS_H */ # ifdef HAVE_BSTRING_H # include # endif /* HAVE_BSTRING_H */ # if defined(WIN32) && !defined(__CUPS_SSIZE_T_DEFINED) # define __CUPS_SSIZE_T_DEFINED # include /* Windows does not support the ssize_t type, so map it to long... */ typedef long ssize_t; /* @private@ */ # endif /* WIN32 && !__CUPS_SSIZE_T_DEFINED */ /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * String pool structures... */ # define _CUPS_STR_GUARD 0x12344321 typedef struct _cups_sp_item_s /**** String Pool Item ****/ { # ifdef DEBUG_GUARDS unsigned int guard; /* Guard word */ # endif /* DEBUG_GUARDS */ unsigned int ref_count; /* Reference count */ char str[1]; /* String */ } _cups_sp_item_t; /* * Replacements for the ctype macros that are not affected by locale, since we * really only care about testing for ASCII characters when parsing files, etc. * * The _CUPS_INLINE definition controls whether we get an inline function body, * and external function body, or an external definition. */ # if defined(__GNUC__) || __STDC_VERSION__ >= 199901L # define _CUPS_INLINE static inline # elif defined(_MSC_VER) # define _CUPS_INLINE static __inline # elif defined(_CUPS_STRING_C_) # define _CUPS_INLINE # endif /* __GNUC__ || __STDC_VERSION__ */ # ifdef _CUPS_INLINE _CUPS_INLINE int /* O - 1 on match, 0 otherwise */ _cups_isalnum(int ch) /* I - Character to test */ { return ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')); } _CUPS_INLINE int /* O - 1 on match, 0 otherwise */ _cups_isalpha(int ch) /* I - Character to test */ { return ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')); } _CUPS_INLINE int /* O - 1 on match, 0 otherwise */ _cups_islower(int ch) /* I - Character to test */ { return (ch >= 'a' && ch <= 'z'); } _CUPS_INLINE int /* O - 1 on match, 0 otherwise */ _cups_isspace(int ch) /* I - Character to test */ { return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' || ch == '\v'); } _CUPS_INLINE int /* O - 1 on match, 0 otherwise */ _cups_isupper(int ch) /* I - Character to test */ { return (ch >= 'A' && ch <= 'Z'); } _CUPS_INLINE int /* O - Converted character */ _cups_tolower(int ch) /* I - Character to convert */ { return (_cups_isupper(ch) ? ch - 'A' + 'a' : ch); } _CUPS_INLINE int /* O - Converted character */ _cups_toupper(int ch) /* I - Character to convert */ { return (_cups_islower(ch) ? ch - 'a' + 'A' : ch); } # else extern int _cups_isalnum(int ch); extern int _cups_isalpha(int ch); extern int _cups_islower(int ch); extern int _cups_isspace(int ch); extern int _cups_isupper(int ch); extern int _cups_tolower(int ch); extern int _cups_toupper(int ch); # endif /* _CUPS_INLINE */ /* * Prototypes... */ extern ssize_t _cups_safe_vsnprintf(char *, size_t, const char *, va_list); extern void _cups_strcpy(char *dst, const char *src); # ifndef HAVE_STRDUP extern char *_cups_strdup(const char *); # define strdup _cups_strdup # endif /* !HAVE_STRDUP */ extern int _cups_strcasecmp(const char *, const char *); extern int _cups_strncasecmp(const char *, const char *, size_t n); # ifndef HAVE_STRLCAT extern size_t _cups_strlcat(char *, const char *, size_t); # define strlcat _cups_strlcat # endif /* !HAVE_STRLCAT */ # ifndef HAVE_STRLCPY extern size_t _cups_strlcpy(char *, const char *, size_t); # define strlcpy _cups_strlcpy # endif /* !HAVE_STRLCPY */ # ifndef HAVE_SNPRINTF extern int _cups_snprintf(char *, size_t, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4))); # define snprintf _cups_snprintf # endif /* !HAVE_SNPRINTF */ # ifndef HAVE_VSNPRINTF extern int _cups_vsnprintf(char *, size_t, const char *, va_list); # define vsnprintf _cups_vsnprintf # endif /* !HAVE_VSNPRINTF */ /* * String pool functions... */ extern char *_cupsStrAlloc(const char *s); extern void _cupsStrFlush(void); extern void _cupsStrFree(const char *s); extern char *_cupsStrRetain(const char *s); extern size_t _cupsStrStatistics(size_t *alloc_bytes, size_t *total_bytes); /* * Floating point number functions... */ extern char *_cupsStrFormatd(char *buf, char *bufend, double number, struct lconv *loc); extern double _cupsStrScand(const char *buf, char **bufptr, struct lconv *loc); /* * Date function... */ extern char *_cupsStrDate(char *buf, size_t bufsize, time_t timeval); /* * C++ magic... */ # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_STRING_H_ */ cups-2.2.7/cups/string.c000664 000765 000024 00000035627 13255074424 015614 0ustar00msweetstaff000000 000000 /* * String functions for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #define _CUPS_STRING_C_ #include "cups-private.h" #include #include /* * Local globals... */ static _cups_mutex_t sp_mutex = _CUPS_MUTEX_INITIALIZER; /* Mutex to control access to pool */ static cups_array_t *stringpool = NULL; /* Global string pool */ /* * Local functions... */ static int compare_sp_items(_cups_sp_item_t *a, _cups_sp_item_t *b); /* * '_cupsStrAlloc()' - Allocate/reference a string. */ char * /* O - String pointer */ _cupsStrAlloc(const char *s) /* I - String */ { size_t slen; /* Length of string */ _cups_sp_item_t *item, /* String pool item */ *key; /* Search key */ /* * Range check input... */ if (!s) return (NULL); /* * Get the string pool... */ _cupsMutexLock(&sp_mutex); if (!stringpool) stringpool = cupsArrayNew((cups_array_func_t)compare_sp_items, NULL); if (!stringpool) { _cupsMutexUnlock(&sp_mutex); return (NULL); } /* * See if the string is already in the pool... */ key = (_cups_sp_item_t *)(s - offsetof(_cups_sp_item_t, str)); if ((item = (_cups_sp_item_t *)cupsArrayFind(stringpool, key)) != NULL) { /* * Found it, return the cached string... */ item->ref_count ++; #ifdef DEBUG_GUARDS DEBUG_printf(("5_cupsStrAlloc: Using string %p(%s) for \"%s\", guard=%08x, " "ref_count=%d", item, item->str, s, item->guard, item->ref_count)); if (item->guard != _CUPS_STR_GUARD) abort(); #endif /* DEBUG_GUARDS */ _cupsMutexUnlock(&sp_mutex); return (item->str); } /* * Not found, so allocate a new one... */ slen = strlen(s); item = (_cups_sp_item_t *)calloc(1, sizeof(_cups_sp_item_t) + slen); if (!item) { _cupsMutexUnlock(&sp_mutex); return (NULL); } item->ref_count = 1; memcpy(item->str, s, slen + 1); #ifdef DEBUG_GUARDS item->guard = _CUPS_STR_GUARD; DEBUG_printf(("5_cupsStrAlloc: Created string %p(%s) for \"%s\", guard=%08x, " "ref_count=%d", item, item->str, s, item->guard, item->ref_count)); #endif /* DEBUG_GUARDS */ /* * Add the string to the pool and return it... */ cupsArrayAdd(stringpool, item); _cupsMutexUnlock(&sp_mutex); return (item->str); } /* * '_cupsStrDate()' - Return a localized date for a given time value. * * This function works around the locale encoding issues of strftime... */ char * /* O - Buffer */ _cupsStrDate(char *buf, /* I - Buffer */ size_t bufsize, /* I - Size of buffer */ time_t timeval) /* I - Time value */ { struct tm *dateval; /* Local date/time */ char temp[1024]; /* Temporary buffer */ _cups_globals_t *cg = _cupsGlobals(); /* Per-thread globals */ if (!cg->lang_default) cg->lang_default = cupsLangDefault(); dateval = localtime(&timeval); if (cg->lang_default->encoding != CUPS_UTF8) { strftime(temp, sizeof(temp), "%c", dateval); cupsCharsetToUTF8((cups_utf8_t *)buf, temp, (int)bufsize, cg->lang_default->encoding); } else strftime(buf, bufsize, "%c", dateval); return (buf); } /* * '_cupsStrFlush()' - Flush the string pool. */ void _cupsStrFlush(void) { _cups_sp_item_t *item; /* Current item */ DEBUG_printf(("4_cupsStrFlush: %d strings in array", cupsArrayCount(stringpool))); _cupsMutexLock(&sp_mutex); for (item = (_cups_sp_item_t *)cupsArrayFirst(stringpool); item; item = (_cups_sp_item_t *)cupsArrayNext(stringpool)) free(item); cupsArrayDelete(stringpool); stringpool = NULL; _cupsMutexUnlock(&sp_mutex); } /* * '_cupsStrFormatd()' - Format a floating-point number. */ char * /* O - Pointer to end of string */ _cupsStrFormatd(char *buf, /* I - String */ char *bufend, /* I - End of string buffer */ double number, /* I - Number to format */ struct lconv *loc) /* I - Locale data */ { char *bufptr, /* Pointer into buffer */ temp[1024], /* Temporary string */ *tempdec, /* Pointer to decimal point */ *tempptr; /* Pointer into temporary string */ const char *dec; /* Decimal point */ int declen; /* Length of decimal point */ /* * Format the number using the "%.12f" format and then eliminate * unnecessary trailing 0's. */ snprintf(temp, sizeof(temp), "%.12f", number); for (tempptr = temp + strlen(temp) - 1; tempptr > temp && *tempptr == '0'; *tempptr-- = '\0'); /* * Next, find the decimal point... */ if (loc && loc->decimal_point) { dec = loc->decimal_point; declen = (int)strlen(dec); } else { dec = "."; declen = 1; } if (declen == 1) tempdec = strchr(temp, *dec); else tempdec = strstr(temp, dec); /* * Copy everything up to the decimal point... */ if (tempdec) { for (tempptr = temp, bufptr = buf; tempptr < tempdec && bufptr < bufend; *bufptr++ = *tempptr++); tempptr += declen; if (*tempptr && bufptr < bufend) { *bufptr++ = '.'; while (*tempptr && bufptr < bufend) *bufptr++ = *tempptr++; } *bufptr = '\0'; } else { strlcpy(buf, temp, (size_t)(bufend - buf + 1)); bufptr = buf + strlen(buf); } return (bufptr); } /* * '_cupsStrFree()' - Free/dereference a string. */ void _cupsStrFree(const char *s) /* I - String to free */ { _cups_sp_item_t *item, /* String pool item */ *key; /* Search key */ /* * Range check input... */ if (!s) return; /* * Check the string pool... * * We don't need to lock the mutex yet, as we only want to know if * the stringpool is initialized. The rest of the code will still * work if it is initialized before we lock... */ if (!stringpool) return; /* * See if the string is already in the pool... */ _cupsMutexLock(&sp_mutex); key = (_cups_sp_item_t *)(s - offsetof(_cups_sp_item_t, str)); #ifdef DEBUG_GUARDS if (key->guard != _CUPS_STR_GUARD) { DEBUG_printf(("5_cupsStrFree: Freeing string %p(%s), guard=%08x, " "ref_count=%d", key, key->str, key->guard, key->ref_count)); abort(); } #endif /* DEBUG_GUARDS */ if ((item = (_cups_sp_item_t *)cupsArrayFind(stringpool, key)) != NULL && item == key) { /* * Found it, dereference... */ item->ref_count --; if (!item->ref_count) { /* * Remove and free... */ cupsArrayRemove(stringpool, item); free(item); } } _cupsMutexUnlock(&sp_mutex); } /* * '_cupsStrRetain()' - Increment the reference count of a string. * * Note: This function does not verify that the passed pointer is in the * string pool, so any calls to it MUST know they are passing in a * good pointer. */ char * /* O - Pointer to string */ _cupsStrRetain(const char *s) /* I - String to retain */ { _cups_sp_item_t *item; /* Pointer to string pool item */ if (s) { item = (_cups_sp_item_t *)(s - offsetof(_cups_sp_item_t, str)); #ifdef DEBUG_GUARDS if (item->guard != _CUPS_STR_GUARD) { DEBUG_printf(("5_cupsStrRetain: Retaining string %p(%s), guard=%08x, " "ref_count=%d", item, s, item->guard, item->ref_count)); abort(); } #endif /* DEBUG_GUARDS */ _cupsMutexLock(&sp_mutex); item->ref_count ++; _cupsMutexUnlock(&sp_mutex); } return ((char *)s); } /* * '_cupsStrScand()' - Scan a string for a floating-point number. * * This function handles the locale-specific BS so that a decimal * point is always the period (".")... */ double /* O - Number */ _cupsStrScand(const char *buf, /* I - Pointer to number */ char **bufptr, /* O - New pointer or NULL on error */ struct lconv *loc) /* I - Locale data */ { char temp[1024], /* Temporary buffer */ *tempptr; /* Pointer into temporary buffer */ /* * Range check input... */ if (!buf) return (0.0); /* * Skip leading whitespace... */ while (_cups_isspace(*buf)) buf ++; /* * Copy leading sign, numbers, period, and then numbers... */ tempptr = temp; if (*buf == '-' || *buf == '+') *tempptr++ = *buf++; while (isdigit(*buf & 255)) if (tempptr < (temp + sizeof(temp) - 1)) *tempptr++ = *buf++; else { if (bufptr) *bufptr = NULL; return (0.0); } if (*buf == '.') { /* * Read fractional portion of number... */ buf ++; if (loc && loc->decimal_point) { strlcpy(tempptr, loc->decimal_point, sizeof(temp) - (size_t)(tempptr - temp)); tempptr += strlen(tempptr); } else if (tempptr < (temp + sizeof(temp) - 1)) *tempptr++ = '.'; else { if (bufptr) *bufptr = NULL; return (0.0); } while (isdigit(*buf & 255)) if (tempptr < (temp + sizeof(temp) - 1)) *tempptr++ = *buf++; else { if (bufptr) *bufptr = NULL; return (0.0); } } if (*buf == 'e' || *buf == 'E') { /* * Read exponent... */ if (tempptr < (temp + sizeof(temp) - 1)) *tempptr++ = *buf++; else { if (bufptr) *bufptr = NULL; return (0.0); } if (*buf == '+' || *buf == '-') { if (tempptr < (temp + sizeof(temp) - 1)) *tempptr++ = *buf++; else { if (bufptr) *bufptr = NULL; return (0.0); } } while (isdigit(*buf & 255)) if (tempptr < (temp + sizeof(temp) - 1)) *tempptr++ = *buf++; else { if (bufptr) *bufptr = NULL; return (0.0); } } /* * Nul-terminate the temporary string and return the value... */ if (bufptr) *bufptr = (char *)buf; *tempptr = '\0'; return (strtod(temp, NULL)); } /* * '_cupsStrStatistics()' - Return allocation statistics for string pool. */ size_t /* O - Number of strings */ _cupsStrStatistics(size_t *alloc_bytes, /* O - Allocated bytes */ size_t *total_bytes) /* O - Total string bytes */ { size_t count, /* Number of strings */ abytes, /* Allocated string bytes */ tbytes, /* Total string bytes */ len; /* Length of string */ _cups_sp_item_t *item; /* Current item */ /* * Loop through strings in pool, counting everything up... */ _cupsMutexLock(&sp_mutex); for (count = 0, abytes = 0, tbytes = 0, item = (_cups_sp_item_t *)cupsArrayFirst(stringpool); item; item = (_cups_sp_item_t *)cupsArrayNext(stringpool)) { /* * Count allocated memory, using a 64-bit aligned buffer as a basis. */ count += item->ref_count; len = (strlen(item->str) + 8) & (size_t)~7; abytes += sizeof(_cups_sp_item_t) + len; tbytes += item->ref_count * len; } _cupsMutexUnlock(&sp_mutex); /* * Return values... */ if (alloc_bytes) *alloc_bytes = abytes; if (total_bytes) *total_bytes = tbytes; return (count); } /* * '_cups_strcpy()' - Copy a string allowing for overlapping strings. */ void _cups_strcpy(char *dst, /* I - Destination string */ const char *src) /* I - Source string */ { while (*src) *dst++ = *src++; *dst = '\0'; } /* * '_cups_strdup()' - Duplicate a string. */ #ifndef HAVE_STRDUP char * /* O - New string pointer */ _cups_strdup(const char *s) /* I - String to duplicate */ { char *t; /* New string pointer */ size_t slen; /* Length of string */ if (!s) return (NULL); slen = strlen(s); if ((t = malloc(slen + 1)) == NULL) return (NULL); return (memcpy(t, s, slen + 1)); } #endif /* !HAVE_STRDUP */ /* * '_cups_strcasecmp()' - Do a case-insensitive comparison. */ int /* O - Result of comparison (-1, 0, or 1) */ _cups_strcasecmp(const char *s, /* I - First string */ const char *t) /* I - Second string */ { while (*s != '\0' && *t != '\0') { if (_cups_tolower(*s) < _cups_tolower(*t)) return (-1); else if (_cups_tolower(*s) > _cups_tolower(*t)) return (1); s ++; t ++; } if (*s == '\0' && *t == '\0') return (0); else if (*s != '\0') return (1); else return (-1); } /* * '_cups_strncasecmp()' - Do a case-insensitive comparison on up to N chars. */ int /* O - Result of comparison (-1, 0, or 1) */ _cups_strncasecmp(const char *s, /* I - First string */ const char *t, /* I - Second string */ size_t n) /* I - Maximum number of characters to compare */ { while (*s != '\0' && *t != '\0' && n > 0) { if (_cups_tolower(*s) < _cups_tolower(*t)) return (-1); else if (_cups_tolower(*s) > _cups_tolower(*t)) return (1); s ++; t ++; n --; } if (n == 0) return (0); else if (*s == '\0' && *t == '\0') return (0); else if (*s != '\0') return (1); else return (-1); } #ifndef HAVE_STRLCAT /* * '_cups_strlcat()' - Safely concatenate two strings. */ size_t /* O - Length of string */ _cups_strlcat(char *dst, /* O - Destination string */ const char *src, /* I - Source string */ size_t size) /* I - Size of destination string buffer */ { size_t srclen; /* Length of source string */ size_t dstlen; /* Length of destination string */ /* * Figure out how much room is left... */ dstlen = strlen(dst); if (size < (dstlen + 1)) return (dstlen); /* No room, return immediately... */ size -= dstlen + 1; /* * Figure out how much room is needed... */ srclen = strlen(src); /* * Copy the appropriate amount... */ if (srclen > size) srclen = size; memmove(dst + dstlen, src, srclen); dst[dstlen + srclen] = '\0'; return (dstlen + srclen); } #endif /* !HAVE_STRLCAT */ #ifndef HAVE_STRLCPY /* * '_cups_strlcpy()' - Safely copy two strings. */ size_t /* O - Length of string */ _cups_strlcpy(char *dst, /* O - Destination string */ const char *src, /* I - Source string */ size_t size) /* I - Size of destination string buffer */ { size_t srclen; /* Length of source string */ /* * Figure out how much room is needed... */ size --; srclen = strlen(src); /* * Copy the appropriate amount... */ if (srclen > size) srclen = size; memmove(dst, src, srclen); dst[srclen] = '\0'; return (srclen); } #endif /* !HAVE_STRLCPY */ /* * 'compare_sp_items()' - Compare two string pool items... */ static int /* O - Result of comparison */ compare_sp_items(_cups_sp_item_t *a, /* I - First item */ _cups_sp_item_t *b) /* I - Second item */ { return (strcmp(a->str, b->str)); } cups-2.2.7/cups/tempfile.c000664 000765 000024 00000011760 13255074424 016103 0ustar00msweetstaff000000 000000 /* * Temp file utilities for CUPS. * * Copyright © 2007-2018 by Apple Inc. * Copyright © 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include #include #include #if defined(WIN32) || defined(__EMX__) # include #else # include #endif /* WIN32 || __EMX__ */ /* * 'cupsTempFd()' - Creates a temporary file. * * The temporary filename is returned in the filename buffer. * The temporary file is opened for reading and writing. */ int /* O - New file descriptor or -1 on error */ cupsTempFd(char *filename, /* I - Pointer to buffer */ int len) /* I - Size of buffer */ { int fd; /* File descriptor for temp file */ int tries; /* Number of tries */ const char *tmpdir; /* TMPDIR environment var */ #if defined(__APPLE__) || defined(WIN32) char tmppath[1024]; /* Temporary directory */ #endif /* __APPLE__ || WIN32 */ #ifdef WIN32 DWORD curtime; /* Current time */ #else struct timeval curtime; /* Current time */ #endif /* WIN32 */ /* * See if TMPDIR is defined... */ #ifdef WIN32 if ((tmpdir = getenv("TEMP")) == NULL) { GetTempPath(sizeof(tmppath), tmppath); tmpdir = tmppath; } #elif defined(__APPLE__) /* * On macOS and iOS, the TMPDIR environment variable is not always the best * location to place temporary files due to sandboxing. Instead, the confstr * function should be called to get the proper per-user, per-process TMPDIR * value. */ if ((tmpdir = getenv("TMPDIR")) != NULL && access(tmpdir, W_OK)) tmpdir = NULL; if (!tmpdir) { if (confstr(_CS_DARWIN_USER_TEMP_DIR, tmppath, sizeof(tmppath))) tmpdir = tmppath; else tmpdir = "/private/tmp"; /* This should never happen */ } #else /* * Previously we put root temporary files in the default CUPS temporary * directory under /var/spool/cups. However, since the scheduler cleans * out temporary files there and runs independently of the user apps, we * don't want to use it unless specifically told to by cupsd. */ if ((tmpdir = getenv("TMPDIR")) == NULL) tmpdir = "/tmp"; #endif /* WIN32 */ /* * Make the temporary name using the specified directory... */ tries = 0; do { #ifdef WIN32 /* * Get the current time of day... */ curtime = GetTickCount() + tries; /* * Format a string using the hex time values... */ snprintf(filename, (size_t)len - 1, "%s/%05lx%08lx", tmpdir, GetCurrentProcessId(), curtime); #else /* * Get the current time of day... */ gettimeofday(&curtime, NULL); /* * Format a string using the hex time values... */ snprintf(filename, (size_t)len - 1, "%s/%05x%08x", tmpdir, (unsigned)getpid(), (unsigned)(curtime.tv_sec + curtime.tv_usec + tries)); #endif /* WIN32 */ /* * Open the file in "exclusive" mode, making sure that we don't * stomp on an existing file or someone's symlink crack... */ #ifdef WIN32 fd = open(filename, _O_CREAT | _O_RDWR | _O_TRUNC | _O_BINARY, _S_IREAD | _S_IWRITE); #elif defined(O_NOFOLLOW) fd = open(filename, O_RDWR | O_CREAT | O_EXCL | O_NOFOLLOW, 0600); #else fd = open(filename, O_RDWR | O_CREAT | O_EXCL, 0600); #endif /* WIN32 */ if (fd < 0 && errno != EEXIST) break; tries ++; } while (fd < 0 && tries < 1000); /* * Return the file descriptor... */ return (fd); } /* * 'cupsTempFile()' - Generates a temporary filename. * * The temporary filename is returned in the filename buffer. * This function is deprecated and will no longer generate a temporary * filename - use @link cupsTempFd@ or @link cupsTempFile2@ instead. * * @deprecated@ */ char * /* O - Filename or @code NULL@ on error */ cupsTempFile(char *filename, /* I - Pointer to buffer */ int len) /* I - Size of buffer */ { (void)len; if (filename) *filename = '\0'; return (NULL); } /* * 'cupsTempFile2()' - Creates a temporary CUPS file. * * The temporary filename is returned in the filename buffer. * The temporary file is opened for writing. * * @since CUPS 1.2/macOS 10.5@ */ cups_file_t * /* O - CUPS file or @code NULL@ on error */ cupsTempFile2(char *filename, /* I - Pointer to buffer */ int len) /* I - Size of buffer */ { cups_file_t *file; /* CUPS file */ int fd; /* File descriptor */ if ((fd = cupsTempFd(filename, len)) < 0) return (NULL); else if ((file = cupsFileOpenFd(fd, "w")) == NULL) { close(fd); unlink(filename); return (NULL); } else return (file); } cups-2.2.7/cups/test.ppd000664 000765 000024 00000024341 13255074424 015615 0ustar00msweetstaff000000 000000 *PPD-Adobe: "4.3" *% *% "$Id: test.ppd 7819 2008-08-01 00:27:24Z mike $" *% *% Test PPD file for CUPS. *% *% This file is used to test the CUPS PPD API functions and cannot be *% used with any known printers. Look on the CUPS web site for working PPD *% files. *% *% If you are a PPD file developer, consider using the PPD compiler (ppdc) *% to create your PPD files - not only will it save you time, it produces *% consistently high-quality files. *% *% Copyright 2007-2010 by Apple Inc. *% Copyright 2002-2006 by Easy Software Products. *% *% These coded instructions, statements, and computer programs are the *% property of Apple Inc. 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 file is *% file is missing or damaged, see the license at "http://www.cups.org/". *FormatVersion: "4.3" *FileVersion: "1.3" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "TEST.PPD" *Manufacturer: "ESP" *Product: "(Test)" *cupsVersion: 1.4 *ModelName: "Test" *ShortNickName: "Test" *NickName: "Test for CUPS" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True *DefaultColorSpace: RGB *FileSystem: False *Throughput: "1" *LandscapeOrientation: Plus90 *TTRasterizer: Type42 *cupsFilter: "application/vnd.cups-raster 0 -" *RequiresPageRegion All: True *% These constraints are used to test ppdConflicts() and cupsResolveConflicts() *UIConstraints: *PageSize Letter *InputSlot Envelope *UIConstraints: *InputSlot Envelope *PageSize Letter *UIConstraints: *PageRegion Letter *InputSlot Envelope *UIConstraints: *InputSlot Envelope *PageRegion Letter *% These constraints are used to test ppdInstallableConflict() *UIConstraints: "*Duplex *InstalledDuplexer False" *UIConstraints: "*InstalledDuplexer False *Duplex" *% These attributes test ppdFindAttr/ppdFindNext... *cupsTest Foo/I Love Foo: "" *cupsTest Bar/I Love Bar: "" *% For PageSize, we have put all of the translations in-line... *OpenUI *PageSize/Page Size: PickOne *fr.Translation PageSize/French Page Size: "" *fr_CA.Translation PageSize/French Canadian Page Size: "" *OrderDependency: 10 AnySetup *PageSize *DefaultPageSize: Letter *PageSize Letter/US Letter: "PageSize=Letter" *fr.PageSize Letter/French US Letter: "" *fr_CA.PageSize Letter/French Canadian US Letter: "" *PageSize Letter.Banner/US Letter Banner: "PageSize=Letter.Banner" *fr.PageSize Letter.Banner/French US Letter Banner: "" *fr_CA.PageSize Letter.Banner/French Canadian US Letter Banner: "" *PageSize Letter.Fullbleed/US Letter Borderless: "PageSize=Letter.Fullbleed" *fr.PageSize Letter.Fullbleed/French US Letter Borderless: "" *fr_CA.PageSize Letter.Fullbleed/French Canadian US Letter Borderless: "" *PageSize A4/A4: "PageSize=A4" *fr.PageSize A4/French A4: "" *fr_CA.PageSize A4/French Canadian A4: "" *PageSize Env10/#10 Envelope: "PageSize=Env10" *fr.PageSize Env10/French #10 Envelope: "" *fr_CA.PageSize Env10/French Canadian #10 Envelope: "" *CloseUI: *PageSize *% For PageRegion, we have separated the translations... *OpenUI *PageRegion/Page Region: PickOne *OrderDependency: 10 AnySetup *PageRegion *DefaultPageRegion: Letter *PageRegion Letter/US Letter: "PageRegion=Letter" *PageRegion Letter.Banner/US Letter Banner: "PageRegion=Letter.Fullbleed" *PageRegion Letter.Fullbleed/US Letter Borderless: "PageRegion=Letter.Fullbleed" *PageRegion A4/A4: "PageRegion=A4" *PageRegion Env10/#10 Envelope: "PageRegion=Env10" *CloseUI: *PageRegion *fr.Translation PageRegion/French Page Region: "" *fr.PageRegion Letter/French US Letter: "" *fr.PageRegion Letter.Banner/French US Letter Banner: "" *fr.PageRegion Letter.Fullbleed/French US Letter Borderless: "" *fr.PageRegion A4/French A4: "" *fr.PageRegion Env10/French #10 Envelope: "" *fr_CA.Translation PageRegion/French Canadian Page Region: "" *fr_CA.PageRegion Letter/French Canadian US Letter: "" *fr_CA.PageRegion Letter.Banner/French Canadian US Letter Banner: "" *fr_CA.PageRegion Letter.Fullbleed/French Canadian US Letter Borderless: "" *fr_CA.PageRegion A4/French Canadian A4: "" *fr_CA.PageRegion Env10/French Canadian #10 Envelope: "" *DefaultImageableArea: Letter *ImageableArea Letter: "18 36 594 756" *ImageableArea Letter.Banner: "18 0 594 792" *ImageableArea Letter.Fullbleed: "0 0 612 792" *ImageableArea A4: "18 36 577 806" *ImageableArea Env10: "18 36 279 648" *DefaultPaperDimension: Letter *PaperDimension Letter: "612 792" *PaperDimension Letter.Banner: "612 792" *PaperDimension Letter.Fullbleed: "612 792" *PaperDimension A4: "595 842" *PaperDimension Env10: "297 684" *% Custom page size support *HWMargins: 0 0 0 0 *NonUIOrderDependency: 100 AnySetup *CustomPageSize True *CustomPageSize True/Custom Page Size: "PageSize=Custom" *ParamCustomPageSize Width: 1 points 36 1080 *ParamCustomPageSize Height: 2 points 36 86400 *ParamCustomPageSize WidthOffset/Width Offset: 3 points 0 0 *ParamCustomPageSize HeightOffset/Height Offset: 4 points 0 0 *ParamCustomPageSize Orientation: 5 int 0 0 *OpenUI *InputSlot/Input Slot: PickOne *OrderDependency: 20 AnySetup *InputSlot *DefaultInputSlot: Tray *InputSlot Tray/Tray: "InputSlot=Tray" *InputSlot Manual/Manual Feed: "InputSlot=Manual" *InputSlot Envelope/Envelope Feed: "InputSlot=Envelope" *CloseUI: *InputSlot *OpenUI *MediaType/Media Type: PickOne *OrderDependency: 25 AnySetup *MediaType *DefaultMediaType: Plain *MediaType Plain/Plain Paper: "MediaType=Plain" *MediaType Matte/Matte Photo: "MediaType=Matte" *MediaType Glossy/Glossy Photo: "MediaType=Glossy" *MediaType Transparency/Transparency Film: "MediaType=Transparency" *CloseUI: *MediaType *OpenUI *OutputBin/Output Tray: PickOne *OrderDependency: 25 AnySetup *OutputBin *DefaultOutputBin: Tray1 *OutputBin Auto/Automatic Tray: "OutputBin=Auto" *OutputBin Tray1/Tray 1: "OutputBin=Tray1" *OutputBin Tray2/Tray 2: "OutputBin=Tray2" *OutputBin MainTray/Main Tray: "OutputBin=MainTray" *CloseUI: *OutputBin *OpenUI *Duplex/2-Sided Printing: PickOne *OrderDependency: 10 DocumentSetup *Duplex *DefaultDuplex: None *Duplex None/Off: "Duplex=None" *Duplex DuplexNoTumble/Long Edge: "Duplex=DuplexNoTumble" *Duplex DuplexTumble/Short Edge: "Duplex=DuplexTumble" *CloseUI: *Duplex *% Installable option... *OpenGroup: InstallableOptions/Installable Options *OpenUI InstalledDuplexer/Duplexer Installed: Boolean *DefaultInstalledDuplexer: False *InstalledDuplexer False: "" *InstalledDuplexer True: "" *CloseUI: *InstalledDuplexer *CloseGroup: InstallableOptions *% Custom options... *OpenGroup: Extended/Extended Options *OpenUI IntOption/Integer: PickOne *OrderDependency: 30 AnySetup *IntOption *DefaultIntOption: None *IntOption None: "" *IntOption 1: "IntOption=1" *IntOption 2: "IntOption=2" *IntOption 3: "IntOption=3" *CloseUI: *IntOption *CustomIntOption True/Custom Integer: "IntOption=Custom" *ParamCustomIntOption Integer: 1 int -100 100 *OpenUI StringOption/String: PickOne *OrderDependency: 40 AnySetup *StringOption *DefaultStringOption: None *StringOption None: "" *StringOption foo: "StringOption=foo" *StringOption bar: "StringOption=bar" *CloseUI: *StringOption *CustomStringOption True/Custom String: "StringOption=Custom" *ParamCustomStringOption String1: 2 string 1 10 *ParamCustomStringOption String2: 1 string 1 10 *CloseGroup: Extended *% IPP reasons for ppdLocalizeIPPReason tests *cupsIPPReason foo/Foo Reason: "http://foo/bar.html help:anchor='foo'%20bookID=Vendor%20Help /help/foo/bar.html" *End *fr.cupsIPPReason foo/La Foo Reason: "text:La%20Long%20 text:Foo%20Reason http://foo/fr/bar.html help:anchor='foo'%20bookID=Vendor%20Help /help/fr/foo/bar.html" *End *zh_TW.cupsIPPReason foo/Number 1 Foo Reason: "text:Number%201%20 text:Foo%20Reason http://foo/zh_TW/bar.html help:anchor='foo'%20bookID=Vendor%20Help /help/zh_TW/foo/bar.html" *End *zh.cupsIPPReason foo/Number 2 Foo Reason: "text:Number%202%20 text:Foo%20Reason http://foo/zh/bar.html help:anchor='foo'%20bookID=Vendor%20Help /help/zh/foo/bar.html" *End *% Marker names for ppdLocalizeMarkerName tests *cupsMarkerName cyan/Cyan Toner: "" *fr.cupsMarkerName cyan/La Toner Cyan: "" *zh_TW.cupsMarkerName cyan/Number 1 Cyan Toner: "" *zh.cupsMarkerName cyan/Number 2 Cyan Toner: "" *DefaultFont: Courier *Font AvantGarde-Book: Standard "(001.006S)" Standard ROM *Font AvantGarde-BookOblique: Standard "(001.006S)" Standard ROM *Font AvantGarde-Demi: Standard "(001.007S)" Standard ROM *Font AvantGarde-DemiOblique: Standard "(001.007S)" Standard ROM *Font Bookman-Demi: Standard "(001.004S)" Standard ROM *Font Bookman-DemiItalic: Standard "(001.004S)" Standard ROM *Font Bookman-Light: Standard "(001.004S)" Standard ROM *Font Bookman-LightItalic: Standard "(001.004S)" Standard ROM *Font Courier: Standard "(002.004S)" Standard ROM *Font Courier-Bold: Standard "(002.004S)" Standard ROM *Font Courier-BoldOblique: Standard "(002.004S)" Standard ROM *Font Courier-Oblique: Standard "(002.004S)" Standard ROM *Font Helvetica: Standard "(001.006S)" Standard ROM *Font Helvetica-Bold: Standard "(001.007S)" Standard ROM *Font Helvetica-BoldOblique: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow: Standard "(001.006S)" Standard ROM *Font Helvetica-Narrow-Bold: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow-BoldOblique: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow-Oblique: Standard "(001.006S)" Standard ROM *Font Helvetica-Oblique: Standard "(001.006S)" Standard ROM *Font NewCenturySchlbk-Bold: Standard "(001.009S)" Standard ROM *Font NewCenturySchlbk-BoldItalic: Standard "(001.007S)" Standard ROM *Font NewCenturySchlbk-Italic: Standard "(001.006S)" Standard ROM *Font NewCenturySchlbk-Roman: Standard "(001.007S)" Standard ROM *Font Palatino-Bold: Standard "(001.005S)" Standard ROM *Font Palatino-BoldItalic: Standard "(001.005S)" Standard ROM *Font Palatino-Italic: Standard "(001.005S)" Standard ROM *Font Palatino-Roman: Standard "(001.005S)" Standard ROM *Font Symbol: Special "(001.007S)" Special ROM *Font Times-Bold: Standard "(001.007S)" Standard ROM *Font Times-BoldItalic: Standard "(001.009S)" Standard ROM *Font Times-Italic: Standard "(001.007S)" Standard ROM *Font Times-Roman: Standard "(001.007S)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(001.007S)" Standard ROM *Font ZapfDingbats: Special "(001.004S)" Standard ROM *% *% End of "$Id: test.ppd 7819 2008-08-01 00:27:24Z mike $". *% cups-2.2.7/cups/test2.ppd000664 000765 000024 00000022172 13255074424 015677 0ustar00msweetstaff000000 000000 *PPD-Adobe: "4.3" *% *% "$Id: test2.ppd 7791 2008-07-24 00:55:30Z mike $" *% *% Test PPD file #2 for CUPS. *% *% This file is used to test the CUPS PPD API functions and cannot be *% used with any known printers. Look on the CUPS web site for working PPD *% files. *% *% If you are a PPD file developer, consider using the PPD compiler (ppdc) *% to create your PPD files - not only will it save you time, it produces *% consistently high-quality files. *% *% Copyright 2007-2011 by Apple Inc. *% Copyright 2002-2006 by Easy Software Products. *% *% These coded instructions, statements, and computer programs are the *% property of Apple Inc. 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 file is *% file is missing or damaged, see the license at "http://www.cups.org/". *FormatVersion: "4.3" *FileVersion: "1.3" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "TEST.PPD" *Manufacturer: "ESP" *Product: "(Test2)" *cupsVersion: 1.4 *ModelName: "Test2" *ShortNickName: "Test2" *NickName: "Test2 for CUPS" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True *DefaultColorSpace: RGB *FileSystem: False *Throughput: "1" *LandscapeOrientation: Plus90 *TTRasterizer: Type42 *% These constraints are used to test ppdConflicts() and cupsResolveConflicts() *cupsUIConstraints envelope: "*PageSize Letter *InputSlot Envelope" *cupsUIConstraints envelope: "*PageSize A4 *InputSlot Envelope" *cupsUIResolver envelope: "*InputSlot Manual *PageSize Env10" *cupsUIConstraints envphoto: "*PageSize Env10 *InputSlot Envelope *Quality Photo" *cupsUIResolver envphoto: "*Quality Normal" *% This constraint is used to test ppdInstallableConflict() *cupsUIConstraints: "*Duplex *InstalledDuplexer False" *% These constraints are used to test the loop detection code in cupsResolveConflicts() *cupsUIConstraints loop1: "*PageSize A4 *Quality Photo" *cupsUIResolver loop1: "*Quality Normal" *cupsUIConstraints loop2: "*PageSize A4 *Quality Normal" *cupsUIResolver loop2: "*Quality Photo" *% For PageSize, we have put all of the translations in-line... *OpenUI *PageSize/Page Size: PickOne *fr.Translation PageSize/French Page Size: "" *fr_CA.Translation PageSize/French Canadian Page Size: "" *OrderDependency: 10 AnySetup *PageSize *DefaultPageSize: Letter *PageSize Letter/US Letter: "PageSize=Letter" *fr.PageSize Letter/French US Letter: "" *fr_CA.PageSize Letter/French Canadian US Letter: "" *PageSize A4/A4: "PageSize=A4" *fr.PageSize A4/French A4: "" *fr_CA.PageSize A4/French Canadian A4: "" *PageSize Env10/#10 Envelope: "PageSize=Env10" *fr.PageSize Env10/French #10 Envelope: "" *fr_CA.PageSize Env10/French Canadian #10 Envelope: "" *CloseUI: *PageSize *% For PageRegion, we have separated the translations... *OpenUI *PageRegion/Page Region: PickOne *OrderDependency: 10 AnySetup *PageRegion *DefaultPageRegion: Letter *PageRegion Letter/US Letter: "PageRegion=Letter" *PageRegion A4/A4: "PageRegion=A4" *PageRegion Env10/#10 Envelope: "PageRegion=Env10" *CloseUI: *PageRegion *fr.Translation PageRegion/French Page Region: "" *fr.PageRegion Letter/French US Letter: "" *fr.PageRegion A4/French A4: "" *fr.PageRegion Env10/French #10 Envelope: "" *fr_CA.Translation PageRegion/French Canadian Page Region: "" *fr_CA.PageRegion Letter/French Canadian US Letter: "" *fr_CA.PageRegion A4/French Canadian A4: "" *fr_CA.PageRegion Env10/French Canadian #10 Envelope: "" *DefaultImageableArea: Letter *ImageableArea Letter: "18 36 594 756" *ImageableArea A4: "18 36 577 806" *ImageableArea Env10: "18 36 279 648" *DefaultPaperDimension: Letter *PaperDimension Letter: "612 792" *PaperDimension A4: "595 842" *PaperDimension Env10: "297 684" *% Custom page size support *HWMargins: 0 0 0 0 *NonUIOrderDependency: 100 AnySetup *CustomPageSize True *CustomPageSize True/Custom Page Size: "PageSize=Custom" *ParamCustomPageSize Width: 1 points 36 1080 *ParamCustomPageSize Height: 2 points 36 86400 *ParamCustomPageSize WidthOffset/Width Offset: 3 points 0 0 *ParamCustomPageSize HeightOffset/Height Offset: 4 points 0 0 *ParamCustomPageSize Orientation: 5 int 0 0 *cupsMediaQualifier2: InputSlot *cupsMediaQualifier3: Quality *cupsMaxSize .Manual.: "1000 1000" *cupsMinSize .Manual.: "100 100" *cupsMinSize .Manual.Photo: "200 200" *cupsMinSize ..Photo: "300 300" *OpenUI *InputSlot/Input Slot: PickOne *OrderDependency: 20 AnySetup *InputSlot *DefaultInputSlot: Tray *InputSlot Tray/Tray: "InputSlot=Tray" *InputSlot Manual/Manual Feed: "InputSlot=Manual" *InputSlot Envelope/Envelope Feed: "InputSlot=Envelope" *CloseUI: *InputSlot *OpenUI *Quality/Output Mode: PickOne *OrderDependency: 20 AnySetup *Quality *DefaultQuality: Normal *Quality Draft: "Quality=Draft" *Quality Normal: "Quality=Normal" *Quality Photo: "Quality=Photo" *CloseUI: *Quality *OpenUI *Duplex/2-Sided Printing: PickOne *OrderDependency: 10 DocumentSetup *Duplex *DefaultDuplex: None *Duplex None/Off: "Duplex=None" *Duplex DuplexNoTumble/Long Edge: "Duplex=DuplexNoTumble" *Duplex DuplexTumble/Short Edge: "Duplex=DuplexTumble" *CloseUI: *Duplex *% Installable option... *OpenGroup: InstallableOptions/Installable Options *OpenUI InstalledDuplexer/Duplexer Installed: Boolean *DefaultInstalledDuplexer: False *InstalledDuplexer False: "" *InstalledDuplexer True: "" *CloseUI: *InstalledDuplexer *CloseGroup: InstallableOptions *% Custom options... *OpenGroup: Extended/Extended Options *OpenUI IntOption/Integer: PickOne *OrderDependency: 30 AnySetup *IntOption *DefaultIntOption: None *IntOption None: "" *IntOption 1: "IntOption=1" *IntOption 2: "IntOption=2" *IntOption 3: "IntOption=3" *CloseUI: *IntOption *CustomIntOption True/Custom Integer: "IntOption=Custom" *ParamCustomIntOption Integer: 1 int -100 100 *OpenUI StringOption/String: PickOne *OrderDependency: 40 AnySetup *StringOption *DefaultStringOption: None *StringOption None: "" *StringOption foo: "StringOption=foo" *StringOption bar: "StringOption=bar" *CloseUI: *StringOption *CustomStringOption True/Custom String: "StringOption=Custom" *ParamCustomStringOption String: 1 string 1 10 *CloseGroup: Extended *% IPP reasons for ppdLocalizeIPPReason tests *cupsIPPReason foo/Foo Reason: "http://foo/bar.html help:anchor='foo'%20bookID=Vendor%20Help /help/foo/bar.html" *End *fr.cupsIPPReason foo/La Foo Reason: "text:La%20Long%20 text:Foo%20Reason http://foo/fr/bar.html help:anchor='foo'%20bookID=Vendor%20Help /help/fr/foo/bar.html" *End *zh_TW.cupsIPPReason foo/Number 1 Foo Reason: "text:Number%201%20 text:Foo%20Reason http://foo/zh_TW/bar.html help:anchor='foo'%20bookID=Vendor%20Help /help/zh_TW/foo/bar.html" *End *zh.cupsIPPReason foo/Number 2 Foo Reason: "text:Number%202%20 text:Foo%20Reason http://foo/zh/bar.html help:anchor='foo'%20bookID=Vendor%20Help /help/zh/foo/bar.html" *End *% Marker names for ppdLocalizeMarkerName tests *cupsMarkerName cyan/Cyan Toner: "" *fr.cupsMarkerName cyan/La Toner Cyan: "" *zh_TW.cupsMarkerName cyan/Number 1 Cyan Toner: "" *zh.cupsMarkerName cyan/Number 2 Cyan Toner: "" *DefaultFont: Courier *Font AvantGarde-Book: Standard "(001.006S)" Standard ROM *Font AvantGarde-BookOblique: Standard "(001.006S)" Standard ROM *Font AvantGarde-Demi: Standard "(001.007S)" Standard ROM *Font AvantGarde-DemiOblique: Standard "(001.007S)" Standard ROM *Font Bookman-Demi: Standard "(001.004S)" Standard ROM *Font Bookman-DemiItalic: Standard "(001.004S)" Standard ROM *Font Bookman-Light: Standard "(001.004S)" Standard ROM *Font Bookman-LightItalic: Standard "(001.004S)" Standard ROM *Font Courier: Standard "(002.004S)" Standard ROM *Font Courier-Bold: Standard "(002.004S)" Standard ROM *Font Courier-BoldOblique: Standard "(002.004S)" Standard ROM *Font Courier-Oblique: Standard "(002.004S)" Standard ROM *Font Helvetica: Standard "(001.006S)" Standard ROM *Font Helvetica-Bold: Standard "(001.007S)" Standard ROM *Font Helvetica-BoldOblique: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow: Standard "(001.006S)" Standard ROM *Font Helvetica-Narrow-Bold: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow-BoldOblique: Standard "(001.007S)" Standard ROM *Font Helvetica-Narrow-Oblique: Standard "(001.006S)" Standard ROM *Font Helvetica-Oblique: Standard "(001.006S)" Standard ROM *Font NewCenturySchlbk-Bold: Standard "(001.009S)" Standard ROM *Font NewCenturySchlbk-BoldItalic: Standard "(001.007S)" Standard ROM *Font NewCenturySchlbk-Italic: Standard "(001.006S)" Standard ROM *Font NewCenturySchlbk-Roman: Standard "(001.007S)" Standard ROM *Font Palatino-Bold: Standard "(001.005S)" Standard ROM *Font Palatino-BoldItalic: Standard "(001.005S)" Standard ROM *Font Palatino-Italic: Standard "(001.005S)" Standard ROM *Font Palatino-Roman: Standard "(001.005S)" Standard ROM *Font Symbol: Special "(001.007S)" Special ROM *Font Times-Bold: Standard "(001.007S)" Standard ROM *Font Times-BoldItalic: Standard "(001.009S)" Standard ROM *Font Times-Italic: Standard "(001.007S)" Standard ROM *Font Times-Roman: Standard "(001.007S)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(001.007S)" Standard ROM *Font ZapfDingbats: Special "(001.004S)" Standard ROM *% *% End of "$Id: test2.ppd 7791 2008-07-24 00:55:30Z mike $". *% cups-2.2.7/cups/testadmin.c000664 000765 000024 00000004666 13255074424 016275 0ustar00msweetstaff000000 000000 /* * Admin function test program for CUPS. * * Copyright 2007-2013 by Apple Inc. * Copyright 2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "adminutil.h" #include "string-private.h" /* * Local functions... */ static void show_settings(int num_settings, cups_option_t *settings); /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i, /* Looping var */ num_settings; /* Number of settings */ cups_option_t *settings; /* Settings */ http_t *http; /* Connection to server */ /* * Connect to the server using the defaults... */ http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL); /* * Set the current configuration if we have anything on the command-line... */ if (argc > 1) { for (i = 1, num_settings = 0, settings = NULL; i < argc; i ++) num_settings = cupsParseOptions(argv[i], num_settings, &settings); if (cupsAdminSetServerSettings(http, num_settings, settings)) { puts("New server settings:"); cupsFreeOptions(num_settings, settings); } else { printf("Server settings not changed: %s\n", cupsLastErrorString()); return (1); } } else puts("Current server settings:"); /* * Get the current configuration... */ if (cupsAdminGetServerSettings(http, &num_settings, &settings)) { show_settings(num_settings, settings); cupsFreeOptions(num_settings, settings); return (0); } else { printf(" %s\n", cupsLastErrorString()); return (1); } } /* * 'show_settings()' - Show settings in the array... */ static void show_settings( int num_settings, /* I - Number of settings */ cups_option_t *settings) /* I - Settings */ { while (num_settings > 0) { printf(" %s=%s\n", settings->name, settings->value); settings ++; num_settings --; } } cups-2.2.7/cups/testarray.c000664 000765 000024 00000025421 13255074424 016313 0ustar00msweetstaff000000 000000 /* * Array test program for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "string-private.h" #include "debug-private.h" #include "array-private.h" #include "dir.h" /* * Local functions... */ static double get_seconds(void); static int load_words(const char *filename, cups_array_t *array); /* * 'main()' - Main entry. */ int /* O - Exit status */ main(void) { int i; /* Looping var */ cups_array_t *array, /* Test array */ *dup_array; /* Duplicate array */ int status; /* Exit status */ char *text; /* Text from array */ char word[256]; /* Word from file */ double start, /* Start time */ end; /* End time */ cups_dir_t *dir; /* Current directory */ cups_dentry_t *dent; /* Directory entry */ char *saved[32]; /* Saved entries */ void *data; /* User data for arrays */ /* * No errors so far... */ status = 0; /* * cupsArrayNew() */ fputs("cupsArrayNew: ", stdout); data = (void *)"testarray"; array = cupsArrayNew((cups_array_func_t)strcmp, data); if (array) puts("PASS"); else { puts("FAIL (returned NULL, expected pointer)"); status ++; } /* * cupsArrayUserData() */ fputs("cupsArrayUserData: ", stdout); if (cupsArrayUserData(array) == data) puts("PASS"); else { printf("FAIL (returned %p instead of %p!)\n", cupsArrayUserData(array), data); status ++; } /* * cupsArrayAdd() */ fputs("cupsArrayAdd: ", stdout); if (!cupsArrayAdd(array, strdup("One Fish"))) { puts("FAIL (\"One Fish\")"); status ++; } else { if (!cupsArrayAdd(array, strdup("Two Fish"))) { puts("FAIL (\"Two Fish\")"); status ++; } else { if (!cupsArrayAdd(array, strdup("Red Fish"))) { puts("FAIL (\"Red Fish\")"); status ++; } else { if (!cupsArrayAdd(array, strdup("Blue Fish"))) { puts("FAIL (\"Blue Fish\")"); status ++; } else puts("PASS"); } } } /* * cupsArrayCount() */ fputs("cupsArrayCount: ", stdout); if (cupsArrayCount(array) == 4) puts("PASS"); else { printf("FAIL (returned %d, expected 4)\n", cupsArrayCount(array)); status ++; } /* * cupsArrayFirst() */ fputs("cupsArrayFirst: ", stdout); if ((text = (char *)cupsArrayFirst(array)) != NULL && !strcmp(text, "Blue Fish")) puts("PASS"); else { printf("FAIL (returned \"%s\", expected \"Blue Fish\")\n", text); status ++; } /* * cupsArrayNext() */ fputs("cupsArrayNext: ", stdout); if ((text = (char *)cupsArrayNext(array)) != NULL && !strcmp(text, "One Fish")) puts("PASS"); else { printf("FAIL (returned \"%s\", expected \"One Fish\")\n", text); status ++; } /* * cupsArrayLast() */ fputs("cupsArrayLast: ", stdout); if ((text = (char *)cupsArrayLast(array)) != NULL && !strcmp(text, "Two Fish")) puts("PASS"); else { printf("FAIL (returned \"%s\", expected \"Two Fish\")\n", text); status ++; } /* * cupsArrayPrev() */ fputs("cupsArrayPrev: ", stdout); if ((text = (char *)cupsArrayPrev(array)) != NULL && !strcmp(text, "Red Fish")) puts("PASS"); else { printf("FAIL (returned \"%s\", expected \"Red Fish\")\n", text); status ++; } /* * cupsArrayFind() */ fputs("cupsArrayFind: ", stdout); if ((text = (char *)cupsArrayFind(array, (void *)"One Fish")) != NULL && !strcmp(text, "One Fish")) puts("PASS"); else { printf("FAIL (returned \"%s\", expected \"One Fish\")\n", text); status ++; } /* * cupsArrayCurrent() */ fputs("cupsArrayCurrent: ", stdout); if ((text = (char *)cupsArrayCurrent(array)) != NULL && !strcmp(text, "One Fish")) puts("PASS"); else { printf("FAIL (returned \"%s\", expected \"One Fish\")\n", text); status ++; } /* * cupsArrayDup() */ fputs("cupsArrayDup: ", stdout); if ((dup_array = cupsArrayDup(array)) != NULL && cupsArrayCount(dup_array) == 4) puts("PASS"); else { printf("FAIL (returned %p with %d elements, expected pointer with 4 elements)\n", dup_array, cupsArrayCount(dup_array)); status ++; } /* * cupsArrayRemove() */ fputs("cupsArrayRemove: ", stdout); if (cupsArrayRemove(array, (void *)"One Fish") && cupsArrayCount(array) == 3) puts("PASS"); else { printf("FAIL (returned 0 with %d elements, expected 1 with 4 elements)\n", cupsArrayCount(array)); status ++; } /* * cupsArrayClear() */ fputs("cupsArrayClear: ", stdout); cupsArrayClear(array); if (cupsArrayCount(array) == 0) puts("PASS"); else { printf("FAIL (%d elements, expected 0 elements)\n", cupsArrayCount(array)); status ++; } /* * Now load this source file and grab all of the unique words... */ fputs("Load unique words: ", stdout); fflush(stdout); start = get_seconds(); if ((dir = cupsDirOpen(".")) == NULL) { puts("FAIL (cupsDirOpen failed)"); status ++; } else { while ((dent = cupsDirRead(dir)) != NULL) { i = (int)strlen(dent->filename) - 2; if (i > 0 && dent->filename[i] == '.' && (dent->filename[i + 1] == 'c' || dent->filename[i + 1] == 'h')) load_words(dent->filename, array); } cupsDirClose(dir); end = get_seconds(); printf("%d words in %.3f seconds (%.0f words/sec), ", cupsArrayCount(array), end - start, cupsArrayCount(array) / (end - start)); fflush(stdout); for (text = (char *)cupsArrayFirst(array); text;) { /* * Copy this word to the word buffer (safe because we strdup'd from * the same buffer in the first place... :) */ strlcpy(word, text, sizeof(word)); /* * Grab the next word and compare... */ if ((text = (char *)cupsArrayNext(array)) == NULL) break; if (strcmp(word, text) >= 0) break; } if (text) { printf("FAIL (\"%s\" >= \"%s\"!)\n", word, text); status ++; } else puts("PASS"); } /* * Test deleting with iteration... */ fputs("Delete While Iterating: ", stdout); text = (char *)cupsArrayFirst(array); cupsArrayRemove(array, text); free(text); text = (char *)cupsArrayNext(array); if (!text) { puts("FAIL (cupsArrayNext returned NULL!)"); status ++; } else puts("PASS"); /* * Test save/restore... */ fputs("cupsArraySave: ", stdout); for (i = 0, text = (char *)cupsArrayFirst(array); i < 32; i ++, text = (char *)cupsArrayNext(array)) { saved[i] = text; if (!cupsArraySave(array)) break; } if (i < 32) printf("FAIL (depth = %d)\n", i); else puts("PASS"); fputs("cupsArrayRestore: ", stdout); while (i > 0) { i --; text = cupsArrayRestore(array); if (text != saved[i]) break; } if (i) printf("FAIL (depth = %d)\n", i); else puts("PASS"); /* * Delete the arrays... */ cupsArrayDelete(array); cupsArrayDelete(dup_array); /* * Test the array with string functions... */ fputs("_cupsArrayNewStrings(\" \\t\\nfoo bar\\tboo\\nfar\", ' '): ", stdout); array = _cupsArrayNewStrings(" \t\nfoo bar\tboo\nfar", ' '); if (!array) { status = 1; puts("FAIL (unable to create array)"); } else if (cupsArrayCount(array) != 4) { status = 1; printf("FAIL (got %d elements, expected 4)\n", cupsArrayCount(array)); } else if (strcmp(text = (char *)cupsArrayFirst(array), "bar")) { status = 1; printf("FAIL (first element \"%s\", expected \"bar\")\n", text); } else if (strcmp(text = (char *)cupsArrayNext(array), "boo")) { status = 1; printf("FAIL (first element \"%s\", expected \"boo\")\n", text); } else if (strcmp(text = (char *)cupsArrayNext(array), "far")) { status = 1; printf("FAIL (first element \"%s\", expected \"far\")\n", text); } else if (strcmp(text = (char *)cupsArrayNext(array), "foo")) { status = 1; printf("FAIL (first element \"%s\", expected \"foo\")\n", text); } else puts("PASS"); fputs("_cupsArrayAddStrings(array, \"foo2,bar2\", ','): ", stdout); _cupsArrayAddStrings(array, "foo2,bar2", ','); if (cupsArrayCount(array) != 6) { status = 1; printf("FAIL (got %d elements, expected 6)\n", cupsArrayCount(array)); } else if (strcmp(text = (char *)cupsArrayFirst(array), "bar")) { status = 1; printf("FAIL (first element \"%s\", expected \"bar\")\n", text); } else if (strcmp(text = (char *)cupsArrayNext(array), "bar2")) { status = 1; printf("FAIL (first element \"%s\", expected \"bar2\")\n", text); } else if (strcmp(text = (char *)cupsArrayNext(array), "boo")) { status = 1; printf("FAIL (first element \"%s\", expected \"boo\")\n", text); } else if (strcmp(text = (char *)cupsArrayNext(array), "far")) { status = 1; printf("FAIL (first element \"%s\", expected \"far\")\n", text); } else if (strcmp(text = (char *)cupsArrayNext(array), "foo")) { status = 1; printf("FAIL (first element \"%s\", expected \"foo\")\n", text); } else if (strcmp(text = (char *)cupsArrayNext(array), "foo2")) { status = 1; printf("FAIL (first element \"%s\", expected \"foo2\")\n", text); } else puts("PASS"); cupsArrayDelete(array); /* * Summarize the results and return... */ if (!status) puts("\nALL TESTS PASSED!"); else printf("\n%d TEST(S) FAILED!\n", status); return (status); } /* * 'get_seconds()' - Get the current time in seconds... */ #ifdef WIN32 # include static double get_seconds(void) { } #else # include static double get_seconds(void) { struct timeval curtime; /* Current time */ gettimeofday(&curtime, NULL); return (curtime.tv_sec + 0.000001 * curtime.tv_usec); } #endif /* WIN32 */ /* * 'load_words()' - Load words from a file. */ static int /* O - 1 on success, 0 on failure */ load_words(const char *filename, /* I - File to load */ cups_array_t *array) /* I - Array to add to */ { FILE *fp; /* Test file */ char word[256]; /* Word from file */ if ((fp = fopen(filename, "r")) == NULL) { perror(filename); return (0); } while (fscanf(fp, "%255s", word) == 1) { if (!cupsArrayFind(array, word)) cupsArrayAdd(array, strdup(word)); } fclose(fp); return (1); } cups-2.2.7/cups/testcache.c000664 000765 000024 00000004770 13255074424 016244 0ustar00msweetstaff000000 000000 /* * PPD cache testing program for CUPS. * * Copyright 2009-2014 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "ppd-private.h" #include "file-private.h" /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ const char *ppdfile = NULL;/* PPD filename */ ppd_file_t *ppd; /* PPD file */ int num_options = 0;/* Number of options */ cups_option_t *options = NULL;/* Options */ _ppd_cache_t *pc; /* PPD cache and PWG mapping data */ int num_finishings, /* Number of finishing options */ finishings[20]; /* Finishing options */ ppd_choice_t *ppd_bin; /* OutputBin value */ const char *output_bin; /* output-bin value */ if (argc < 2) { puts("Usage: ./testcache filename.ppd [name=value ... name=value]"); return (1); } ppdfile = argv[1]; if ((ppd = ppdOpenFile(ppdfile)) == NULL) { ppd_status_t err; /* Last error in file */ int line; /* Line number in file */ err = ppdLastError(&line); fprintf(stderr, "Unable to open \"%s\": %s on line %d\n", ppdfile, ppdErrorString(err), line); return (1); } if ((pc = _ppdCacheCreateWithPPD(ppd)) == NULL) { fprintf(stderr, "Unable to create PPD cache from \"%s\".\n", ppdfile); return (1); } for (i = 2; i < argc; i ++) num_options = cupsParseOptions(argv[i], num_options, &options); ppdMarkDefaults(ppd); cupsMarkOptions(ppd, num_options, options); num_finishings = _ppdCacheGetFinishingValues(pc, num_options, options, (int)sizeof(finishings) / sizeof(finishings[0]), finishings); if (num_finishings > 0) { fputs("finishings=", stdout); for (i = 0; i < num_finishings; i ++) if (i) printf(",%d", finishings[i]); else printf("%d", finishings[i]); fputs("\n", stdout); } if ((ppd_bin = ppdFindMarkedChoice(ppd, "OutputBin")) != NULL && (output_bin = _ppdCacheGetBin(pc, ppd_bin->choice)) != NULL) printf("output-bin=\"%s\"\n", output_bin); return (0); } cups-2.2.7/cups/testconflicts.c000664 000765 000024 00000006074 13255074424 017164 0ustar00msweetstaff000000 000000 /* * PPD constraint test program for CUPS. * * Copyright 2008-2012 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups.h" #include "ppd.h" #include "string-private.h" /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ ppd_file_t *ppd; /* PPD file loaded from disk */ char line[256], /* Input buffer */ *ptr, /* Pointer into buffer */ *optr, /* Pointer to first option name */ *cptr; /* Pointer to first choice */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ char *option, /* Current option */ *choice; /* Current choice */ if (argc != 2) { puts("Usage: testconflicts filename.ppd"); return (1); } if ((ppd = ppdOpenFile(argv[1])) == NULL) { ppd_status_t err; /* Last error in file */ int linenum; /* Line number in file */ err = ppdLastError(&linenum); printf("Unable to open PPD file \"%s\": %s on line %d\n", argv[1], ppdErrorString(err), linenum); return (1); } ppdMarkDefaults(ppd); option = NULL; choice = NULL; for (;;) { num_options = 0; options = NULL; if (!cupsResolveConflicts(ppd, option, choice, &num_options, &options)) puts("Unable to resolve conflicts!"); else if ((!option && num_options > 0) || (option && num_options > 1)) { fputs("Resolved conflicts with the following options:\n ", stdout); for (i = 0; i < num_options; i ++) if (!option || _cups_strcasecmp(option, options[i].name)) printf(" %s=%s", options[i].name, options[i].value); putchar('\n'); cupsFreeOptions(num_options, options); } if (option) { free(option); option = NULL; } if (choice) { free(choice); choice = NULL; } printf("\nNew Option(s): "); fflush(stdout); if (!fgets(line, sizeof(line), stdin) || line[0] == '\n') break; for (ptr = line; isspace(*ptr & 255); ptr ++); for (optr = ptr; *ptr && *ptr != '='; ptr ++); if (!*ptr) break; for (*ptr++ = '\0', cptr = ptr; *ptr && !isspace(*ptr & 255); ptr ++); if (!*ptr) break; *ptr++ = '\0'; option = strdup(optr); choice = strdup(cptr); num_options = cupsParseOptions(ptr, 0, &options); ppdMarkOption(ppd, option, choice); if (cupsMarkOptions(ppd, num_options, options)) puts("Options Conflict!"); cupsFreeOptions(num_options, options); } if (option) free(option); if (choice) free(choice); return (0); } cups-2.2.7/cups/testcreds.c000664 000765 000024 00000007245 13255074424 016301 0ustar00msweetstaff000000 000000 /* * HTTP credentials test program for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { http_t *http; /* HTTP connection */ char scheme[HTTP_MAX_URI], /* Scheme from URI */ hostname[HTTP_MAX_URI], /* Hostname from URI */ username[HTTP_MAX_URI], /* Username:password from URI */ resource[HTTP_MAX_URI]; /* Resource from URI */ int port; /* Port number from URI */ http_trust_t trust; /* Trust evaluation for connection */ cups_array_t *hcreds, /* Credentials from connection */ *tcreds; /* Credentials from trust store */ char hinfo[1024], /* String for connection credentials */ tinfo[1024]; /* String for trust store credentials */ static const char *trusts[] = /* Trust strings */ { "OK", "Invalid", "Changed", "Expired", "Renewed", "Unknown" }; /* * Check command-line... */ if (argc != 2) { puts("Usage: ./testcreds hostname"); puts(" ./testcreds https://hostname[:port]"); return (1); } if (!strncmp(argv[1], "https://", 8)) { /* * Connect to the host and validate credentials... */ if (httpSeparateURI(HTTP_URI_CODING_MOST, argv[1], scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) { printf("ERROR: Bad URI \"%s\".\n", argv[1]); return (1); } if ((http = httpConnect2(hostname, port, NULL, AF_UNSPEC, HTTP_ENCRYPTION_ALWAYS, 1, 30000, NULL)) == NULL) { printf("ERROR: Unable to connect to \"%s\" on port %d: %s\n", hostname, port, cupsLastErrorString()); return (1); } puts("HTTP Credentials:"); if (!httpCopyCredentials(http, &hcreds)) { trust = httpCredentialsGetTrust(hcreds, hostname); httpCredentialsString(hcreds, hinfo, sizeof(hinfo)); printf(" Certificate Count: %d\n", cupsArrayCount(hcreds)); if (trust == HTTP_TRUST_OK) puts(" Trust: OK"); else printf(" Trust: %s (%s)\n", trusts[trust], cupsLastErrorString()); printf(" Expiration: %s\n", httpGetDateString(httpCredentialsGetExpiration(hcreds))); printf(" IsValidName: %d\n", httpCredentialsAreValidForName(hcreds, hostname)); printf(" String: \"%s\"\n", hinfo); httpFreeCredentials(hcreds); } else puts(" Not present (error)."); puts(""); } else { /* * Load stored credentials... */ strlcpy(hostname, argv[1], sizeof(hostname)); } printf("Trust Store for \"%s\":\n", hostname); if (!httpLoadCredentials(NULL, &tcreds, hostname)) { httpCredentialsString(tcreds, tinfo, sizeof(tinfo)); printf(" Certificate Count: %d\n", cupsArrayCount(tcreds)); printf(" Expiration: %s\n", httpGetDateString(httpCredentialsGetExpiration(tcreds))); printf(" IsValidName: %d\n", httpCredentialsAreValidForName(tcreds, hostname)); printf(" String: \"%s\"\n", tinfo); httpFreeCredentials(tcreds); } else puts(" Not present."); return (0); } cups-2.2.7/cups/testcups.c000664 000765 000024 00000034525 13255074424 016154 0ustar00msweetstaff000000 000000 /* * CUPS API test program for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #undef _CUPS_NO_DEPRECATED #include "string-private.h" #include "cups.h" #include "ppd.h" #include /* * Local functions... */ static int dests_equal(cups_dest_t *a, cups_dest_t *b); static int enum_cb(void *user_data, unsigned flags, cups_dest_t *dest); static void show_diffs(cups_dest_t *a, cups_dest_t *b); /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int status = 0, /* Exit status */ i, /* Looping var */ num_dests; /* Number of destinations */ cups_dest_t *dests, /* Destinations */ *dest, /* Current destination */ *named_dest; /* Current named destination */ const char *dest_name, /* Destination name */ *dval, /* Destination value */ *ppdfile; /* PPD file */ ppd_file_t *ppd; /* PPD file data */ int num_jobs; /* Number of jobs for queue */ cups_job_t *jobs; /* Jobs for queue */ if (argc > 1) { if (!strcmp(argv[1], "enum")) { cups_ptype_t mask = CUPS_PRINTER_LOCAL, /* Printer type mask */ type = CUPS_PRINTER_LOCAL; /* Printer type */ int msec = 0; /* Timeout in milliseconds */ for (i = 2; i < argc; i ++) if (isdigit(argv[i][0] & 255) || argv[i][0] == '.') msec = (int)(atof(argv[i]) * 1000); else if (!_cups_strcasecmp(argv[i], "bw")) { mask |= CUPS_PRINTER_BW; type |= CUPS_PRINTER_BW; } else if (!_cups_strcasecmp(argv[i], "color")) { mask |= CUPS_PRINTER_COLOR; type |= CUPS_PRINTER_COLOR; } else if (!_cups_strcasecmp(argv[i], "mono")) { mask |= CUPS_PRINTER_COLOR; } else if (!_cups_strcasecmp(argv[i], "duplex")) { mask |= CUPS_PRINTER_DUPLEX; type |= CUPS_PRINTER_DUPLEX; } else if (!_cups_strcasecmp(argv[i], "simplex")) { mask |= CUPS_PRINTER_DUPLEX; } else if (!_cups_strcasecmp(argv[i], "staple")) { mask |= CUPS_PRINTER_STAPLE; type |= CUPS_PRINTER_STAPLE; } else if (!_cups_strcasecmp(argv[i], "copies")) { mask |= CUPS_PRINTER_COPIES; type |= CUPS_PRINTER_COPIES; } else if (!_cups_strcasecmp(argv[i], "collate")) { mask |= CUPS_PRINTER_COLLATE; type |= CUPS_PRINTER_COLLATE; } else if (!_cups_strcasecmp(argv[i], "punch")) { mask |= CUPS_PRINTER_PUNCH; type |= CUPS_PRINTER_PUNCH; } else if (!_cups_strcasecmp(argv[i], "cover")) { mask |= CUPS_PRINTER_COVER; type |= CUPS_PRINTER_COVER; } else if (!_cups_strcasecmp(argv[i], "bind")) { mask |= CUPS_PRINTER_BIND; type |= CUPS_PRINTER_BIND; } else if (!_cups_strcasecmp(argv[i], "sort")) { mask |= CUPS_PRINTER_SORT; type |= CUPS_PRINTER_SORT; } else if (!_cups_strcasecmp(argv[i], "mfp")) { mask |= CUPS_PRINTER_MFP; type |= CUPS_PRINTER_MFP; } else if (!_cups_strcasecmp(argv[i], "printer")) { mask |= CUPS_PRINTER_MFP; } else if (!_cups_strcasecmp(argv[i], "large")) { mask |= CUPS_PRINTER_LARGE; type |= CUPS_PRINTER_LARGE; } else if (!_cups_strcasecmp(argv[i], "medium")) { mask |= CUPS_PRINTER_MEDIUM; type |= CUPS_PRINTER_MEDIUM; } else if (!_cups_strcasecmp(argv[i], "small")) { mask |= CUPS_PRINTER_SMALL; type |= CUPS_PRINTER_SMALL; } else fprintf(stderr, "Unknown argument \"%s\" ignored...\n", argv[i]); cupsEnumDests(CUPS_DEST_FLAGS_NONE, msec, NULL, type, mask, enum_cb, NULL); } else if (!strcmp(argv[1], "password")) { const char *pass = cupsGetPassword("Password:"); /* Password string */ if (pass) printf("Password entered: %s\n", pass); else puts("No password entered."); } else if (!strcmp(argv[1], "ppd") && argc == 3) { /* * ./testcups ppd printer */ http_status_t http_status; /* Status */ char buffer[1024]; /* PPD filename */ time_t modtime = 0; /* Last modified */ if ((http_status = cupsGetPPD3(CUPS_HTTP_DEFAULT, argv[2], &modtime, buffer, sizeof(buffer))) != HTTP_STATUS_OK) printf("Unable to get PPD: %d (%s)\n", (int)http_status, cupsLastErrorString()); else puts(buffer); } else if (!strcmp(argv[1], "print") && argc == 5) { /* * ./testcups print printer file interval */ int interval, /* Interval between writes */ job_id; /* Job ID */ cups_file_t *fp; /* Print file */ char buffer[16384]; /* Read/write buffer */ ssize_t bytes; /* Bytes read/written */ if ((fp = cupsFileOpen(argv[3], "r")) == NULL) { printf("Unable to open \"%s\": %s\n", argv[2], strerror(errno)); return (1); } if ((job_id = cupsCreateJob(CUPS_HTTP_DEFAULT, argv[2], "testcups", 0, NULL)) <= 0) { printf("Unable to create print job on %s: %s\n", argv[1], cupsLastErrorString()); return (1); } interval = atoi(argv[4]); if (cupsStartDocument(CUPS_HTTP_DEFAULT, argv[1], job_id, argv[2], CUPS_FORMAT_AUTO, 1) != HTTP_STATUS_CONTINUE) { puts("Unable to start document!"); return (1); } while ((bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0) { printf("Writing %d bytes...\n", (int)bytes); if (cupsWriteRequestData(CUPS_HTTP_DEFAULT, buffer, (size_t)bytes) != HTTP_STATUS_CONTINUE) { puts("Unable to write bytes!"); return (1); } if (interval > 0) sleep((unsigned)interval); } cupsFileClose(fp); if (cupsFinishDocument(CUPS_HTTP_DEFAULT, argv[1]) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED) { puts("Unable to finish document!"); return (1); } } else { puts("Usage:"); puts(""); puts("Run basic unit tests:"); puts(""); puts(" ./testcups"); puts(""); puts("Enumerate printers (for N seconds, -1 for indefinitely):"); puts(""); puts(" ./testcups enum [seconds]"); puts(""); puts("Ask for a password:"); puts(""); puts(" ./testcups password"); puts(""); puts("Get the PPD file:"); puts(""); puts(" ./testcups ppd printer"); puts(""); puts("Print a file (interval controls delay between buffers in seconds):"); puts(""); puts(" ./testcups print printer file interval"); return (1); } return (0); } /* * cupsGetDests() */ fputs("cupsGetDests: ", stdout); fflush(stdout); num_dests = cupsGetDests(&dests); if (num_dests == 0) { puts("FAIL"); return (1); } else { printf("PASS (%d dests)\n", num_dests); for (i = num_dests, dest = dests; i > 0; i --, dest ++) { printf(" %s", dest->name); if (dest->instance) printf(" /%s", dest->instance); if (dest->is_default) puts(" ***DEFAULT***"); else putchar('\n'); } } /* * cupsGetDest(NULL) */ fputs("cupsGetDest(NULL): ", stdout); fflush(stdout); if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) == NULL) { for (i = num_dests, dest = dests; i > 0; i --, dest ++) if (dest->is_default) break; if (i) { status = 1; puts("FAIL"); } else puts("PASS (no default)"); dest = NULL; } else printf("PASS (%s)\n", dest->name); /* * cupsGetNamedDest(NULL, NULL, NULL) */ fputs("cupsGetNamedDest(NULL, NULL, NULL): ", stdout); fflush(stdout); if ((named_dest = cupsGetNamedDest(NULL, NULL, NULL)) == NULL || !dests_equal(dest, named_dest)) { if (!dest) puts("PASS (no default)"); else if (named_dest) { puts("FAIL (different values)"); show_diffs(dest, named_dest); status = 1; } else { puts("FAIL (no default)"); status = 1; } } else printf("PASS (%s)\n", named_dest->name); if (named_dest) cupsFreeDests(1, named_dest); /* * cupsGetDest(printer) */ for (i = 0, dest_name = NULL; i < num_dests; i ++) { if ((dval = cupsGetOption("printer-is-temporary", dests[i].num_options, dest[i].options)) != NULL && !strcmp(dval, "false")) { dest_name = dests[i].name; break; } } printf("cupsGetDest(\"%s\"): ", dest_name ? dest_name : "(null)"); fflush(stdout); if ((dest = cupsGetDest(dest_name, NULL, num_dests, dests)) == NULL) { puts("FAIL"); return (1); } else puts("PASS"); /* * cupsGetNamedDest(NULL, printer, instance) */ printf("cupsGetNamedDest(NULL, \"%s\", \"%s\"): ", dest->name, dest->instance ? dest->instance : "(null)"); fflush(stdout); if ((named_dest = cupsGetNamedDest(NULL, dest->name, dest->instance)) == NULL || !dests_equal(dest, named_dest)) { if (named_dest) { puts("FAIL (different values)"); show_diffs(dest, named_dest); } else puts("FAIL (no destination)"); status = 1; } else puts("PASS"); if (named_dest) cupsFreeDests(1, named_dest); /* * cupsPrintFile() */ fputs("cupsPrintFile: ", stdout); fflush(stdout); if (cupsPrintFile(dest->name, "../test/testfile.pdf", "Test Page", dest->num_options, dest->options) <= 0) { printf("FAIL (%s)\n", cupsLastErrorString()); return (1); } else puts("PASS"); /* * cupsGetPPD(printer) */ fputs("cupsGetPPD: ", stdout); fflush(stdout); if ((ppdfile = cupsGetPPD(dest->name)) == NULL) { puts("FAIL"); } else { puts("PASS"); /* * ppdOpenFile() */ fputs("ppdOpenFile: ", stdout); fflush(stdout); if ((ppd = ppdOpenFile(ppdfile)) == NULL) { puts("FAIL"); return (1); } else puts("PASS"); ppdClose(ppd); unlink(ppdfile); } /* * cupsGetJobs() */ fputs("cupsGetJobs: ", stdout); fflush(stdout); num_jobs = cupsGetJobs(&jobs, NULL, 0, -1); if (num_jobs == 0) { puts("FAIL"); return (1); } else puts("PASS"); cupsFreeJobs(num_jobs, jobs); cupsFreeDests(num_dests, dests); return (status); } /* * 'dests_equal()' - Determine whether two destinations are equal. */ static int /* O - 1 if equal, 0 if not equal */ dests_equal(cups_dest_t *a, /* I - First destination */ cups_dest_t *b) /* I - Second destination */ { int i; /* Looping var */ cups_option_t *aoption; /* Current option */ const char *bval; /* Option value */ if (a == b) return (1); if (!a || !b) return (0); if (_cups_strcasecmp(a->name, b->name) || (a->instance && !b->instance) || (!a->instance && b->instance) || (a->instance && _cups_strcasecmp(a->instance, b->instance)) || a->num_options != b->num_options) return (0); for (i = a->num_options, aoption = a->options; i > 0; i --, aoption ++) if ((bval = cupsGetOption(aoption->name, b->num_options, b->options)) == NULL || strcmp(aoption->value, bval)) return (0); return (1); } /* * 'enum_cb()' - Report additions and removals. */ static int /* O - 1 to continue, 0 to stop */ enum_cb(void *user_data, /* I - User data (unused) */ unsigned flags, /* I - Destination flags */ cups_dest_t *dest) /* I - Destination */ { int i; /* Looping var */ cups_option_t *option; /* Current option */ (void)user_data; if (flags & CUPS_DEST_FLAGS_REMOVED) printf("Removed '%s':\n", dest->name); else printf("Added '%s':\n", dest->name); for (i = dest->num_options, option = dest->options; i > 0; i --, option ++) printf(" %s=\"%s\"\n", option->name, option->value); putchar('\n'); return (1); } /* * 'show_diffs()' - Show differences between two destinations. */ static void show_diffs(cups_dest_t *a, /* I - First destination */ cups_dest_t *b) /* I - Second destination */ { int i; /* Looping var */ cups_option_t *aoption; /* Current option */ cups_option_t *boption; /* Current option */ const char *bval; /* Option value */ if (!a || !b) return; puts(" Item cupsGetDest cupsGetNamedDest"); puts(" -------------------- ------------------------ ------------------------"); if (_cups_strcasecmp(a->name, b->name)) printf(" name %-24.24s %-24.24s\n", a->name, b->name); if ((a->instance && !b->instance) || (!a->instance && b->instance) || (a->instance && _cups_strcasecmp(a->instance, b->instance))) printf(" instance %-24.24s %-24.24s\n", a->instance ? a->instance : "(null)", b->instance ? b->instance : "(null)"); if (a->num_options != b->num_options) printf(" num_options %-24d %-24d\n", a->num_options, b->num_options); for (i = a->num_options, aoption = a->options; i > 0; i --, aoption ++) if ((bval = cupsGetOption(aoption->name, b->num_options, b->options)) == NULL || strcmp(aoption->value, bval)) printf(" %-20.20s %-24.24s %-24.24s\n", aoption->name, aoption->value, bval ? bval : "(null)"); for (i = b->num_options, boption = b->options; i > 0; i --, boption ++) if (!cupsGetOption(boption->name, a->num_options, a->options)) printf(" %-20.20s %-24.24s %-24.24s\n", boption->name, boption->value, "(null)"); } cups-2.2.7/cups/testdest.c000664 000765 000024 00000050573 13255074424 016142 0ustar00msweetstaff000000 000000 /* * CUPS destination API test program for CUPS. * * Copyright 2012-2017 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include #include "cups.h" /* * Local functions... */ static int enum_cb(void *user_data, unsigned flags, cups_dest_t *dest); static void localize(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option, const char *value); static void print_file(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *filename, int num_options, cups_option_t *options); static void show_conflicts(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, int num_options, cups_option_t *options); static void show_default(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option); static void show_media(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, unsigned flags, const char *name); static void show_supported(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option, const char *value); static void usage(const char *arg) __attribute__((noreturn)); /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { http_t *http; /* Connection to destination */ cups_dest_t *dest = NULL; /* Destination */ cups_dinfo_t *dinfo; /* Destination info */ if (argc < 2) usage(NULL); if (!strcmp(argv[1], "--enum")) { int i; /* Looping var */ cups_ptype_t type = 0, /* Printer type filter */ mask = 0; /* Printer type mask */ for (i = 2; i < argc; i ++) { if (!strcmp(argv[i], "grayscale")) { type |= CUPS_PRINTER_BW; mask |= CUPS_PRINTER_BW; } else if (!strcmp(argv[i], "color")) { type |= CUPS_PRINTER_COLOR; mask |= CUPS_PRINTER_COLOR; } else if (!strcmp(argv[i], "duplex")) { type |= CUPS_PRINTER_DUPLEX; mask |= CUPS_PRINTER_DUPLEX; } else if (!strcmp(argv[i], "staple")) { type |= CUPS_PRINTER_STAPLE; mask |= CUPS_PRINTER_STAPLE; } else if (!strcmp(argv[i], "small")) { type |= CUPS_PRINTER_SMALL; mask |= CUPS_PRINTER_SMALL; } else if (!strcmp(argv[i], "medium")) { type |= CUPS_PRINTER_MEDIUM; mask |= CUPS_PRINTER_MEDIUM; } else if (!strcmp(argv[i], "large")) { type |= CUPS_PRINTER_LARGE; mask |= CUPS_PRINTER_LARGE; } else usage(argv[i]); } cupsEnumDests(CUPS_DEST_FLAGS_NONE, 5000, NULL, type, mask, enum_cb, NULL); return (0); } else if (!strncmp(argv[1], "ipp://", 6) || !strncmp(argv[1], "ipps://", 7)) dest = cupsGetDestWithURI(NULL, argv[1]); else if (!strcmp(argv[1], "default")) { dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL); if (dest && dest->instance) printf("default is \"%s/%s\".\n", dest->name, dest->instance); else printf("default is \"%s\".\n", dest->name); } else dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, argv[1], NULL); if (!dest) { printf("testdest: Unable to get destination \"%s\": %s\n", argv[1], cupsLastErrorString()); return (1); } if ((http = cupsConnectDest(dest, CUPS_DEST_FLAGS_NONE, 30000, NULL, NULL, 0, NULL, NULL)) == NULL) { printf("testdest: Unable to connect to destination \"%s\": %s\n", argv[1], cupsLastErrorString()); return (1); } if ((dinfo = cupsCopyDestInfo(http, dest)) == NULL) { printf("testdest: Unable to get information for destination \"%s\": %s\n", argv[1], cupsLastErrorString()); return (1); } if (argc == 2 || (!strcmp(argv[2], "supported") && argc < 6)) { if (argc > 3) show_supported(http, dest, dinfo, argv[3], argv[4]); else if (argc > 2) show_supported(http, dest, dinfo, argv[3], NULL); else show_supported(http, dest, dinfo, NULL, NULL); } else if (!strcmp(argv[2], "conflicts") && argc > 3) { int i, /* Looping var */ num_options = 0;/* Number of options */ cups_option_t *options = NULL;/* Options */ for (i = 3; i < argc; i ++) num_options = cupsParseOptions(argv[i], num_options, &options); show_conflicts(http, dest, dinfo, num_options, options); } else if (!strcmp(argv[2], "default") && argc == 4) { show_default(http, dest, dinfo, argv[3]); } else if (!strcmp(argv[2], "localize") && argc < 6) { if (argc > 3) localize(http, dest, dinfo, argv[3], argv[4]); else if (argc > 2) localize(http, dest, dinfo, argv[3], NULL); else localize(http, dest, dinfo, NULL, NULL); } else if (!strcmp(argv[2], "media")) { int i; /* Looping var */ const char *name = NULL; /* Media name, if any */ unsigned flags = CUPS_MEDIA_FLAGS_DEFAULT; /* Media selection flags */ for (i = 3; i < argc; i ++) { if (!strcmp(argv[i], "borderless")) flags = CUPS_MEDIA_FLAGS_BORDERLESS; else if (!strcmp(argv[i], "duplex")) flags = CUPS_MEDIA_FLAGS_DUPLEX; else if (!strcmp(argv[i], "exact")) flags = CUPS_MEDIA_FLAGS_EXACT; else if (!strcmp(argv[i], "ready")) flags = CUPS_MEDIA_FLAGS_READY; else if (name) usage(argv[i]); else name = argv[i]; } show_media(http, dest, dinfo, flags, name); } else if (!strcmp(argv[2], "print") && argc > 3) { int i, /* Looping var */ num_options = 0;/* Number of options */ cups_option_t *options = NULL;/* Options */ for (i = 4; i < argc; i ++) num_options = cupsParseOptions(argv[i], num_options, &options); print_file(http, dest, dinfo, argv[3], num_options, options); } else usage(argv[2]); return (0); } /* * 'enum_cb()' - Print the results from the enumeration of destinations. */ static int /* O - 1 to continue */ enum_cb(void *user_data, /* I - User data (unused) */ unsigned flags, /* I - Flags */ cups_dest_t *dest) /* I - Destination */ { int i; /* Looping var */ (void)user_data; (void)flags; if (dest->instance) printf("%s%s/%s:\n", (flags & CUPS_DEST_FLAGS_REMOVED) ? "REMOVE " : "", dest->name, dest->instance); else printf("%s%s:\n", (flags & CUPS_DEST_FLAGS_REMOVED) ? "REMOVE " : "", dest->name); for (i = 0; i < dest->num_options; i ++) printf(" %s=\"%s\"\n", dest->options[i].name, dest->options[i].value); return (1); } /* * 'localize()' - Localize an option and value. */ static void localize(http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ const char *option, /* I - Option */ const char *value) /* I - Value, if any */ { ipp_attribute_t *attr; /* Attribute */ int i, /* Looping var */ count; /* Number of values */ if (!option) { attr = cupsFindDestSupported(http, dest, dinfo, "job-creation-attributes"); if (attr) { count = ippGetCount(attr); for (i = 0; i < count; i ++) localize(http, dest, dinfo, ippGetString(attr, i, NULL), NULL); } else { static const char * const options[] = { /* List of standard options */ CUPS_COPIES, CUPS_FINISHINGS, CUPS_MEDIA, CUPS_NUMBER_UP, CUPS_ORIENTATION, CUPS_PRINT_COLOR_MODE, CUPS_PRINT_QUALITY, CUPS_SIDES }; puts("No job-creation-attributes-supported attribute, probing instead."); for (i = 0; i < (int)(sizeof(options) / sizeof(options[0])); i ++) if (cupsCheckDestSupported(http, dest, dinfo, options[i], NULL)) localize(http, dest, dinfo, options[i], NULL); } } else if (!value) { printf("%s (%s)\n", option, cupsLocalizeDestOption(http, dest, dinfo, option)); if ((attr = cupsFindDestSupported(http, dest, dinfo, option)) != NULL) { count = ippGetCount(attr); switch (ippGetValueTag(attr)) { case IPP_TAG_INTEGER : for (i = 0; i < count; i ++) printf(" %d\n", ippGetInteger(attr, i)); break; case IPP_TAG_ENUM : for (i = 0; i < count; i ++) printf(" %s\n", ippEnumString(option, ippGetInteger(attr, i))); break; case IPP_TAG_RANGE : for (i = 0; i < count; i ++) { int upper, lower = ippGetRange(attr, i, &upper); printf(" %d-%d\n", lower, upper); } break; case IPP_TAG_RESOLUTION : for (i = 0; i < count; i ++) { int xres, yres; ipp_res_t units; xres = ippGetResolution(attr, i, &yres, &units); if (xres == yres) printf(" %d%s\n", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); else printf(" %dx%d%s\n", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); } break; case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : for (i = 0; i < count; i ++) printf(" %s (%s)\n", ippGetString(attr, i, NULL), cupsLocalizeDestValue(http, dest, dinfo, option, ippGetString(attr, i, NULL))); break; case IPP_TAG_STRING : for (i = 0; i < count; i ++) { int j, len; unsigned char *data = ippGetOctetString(attr, i, &len); fputs(" ", stdout); for (j = 0; j < len; j ++) { if (data[j] < ' ' || data[j] >= 0x7f) printf("<%02X>", data[j]); else putchar(data[j]); } putchar('\n'); } break; case IPP_TAG_BOOLEAN : break; default : printf(" %s\n", ippTagString(ippGetValueTag(attr))); break; } } } else puts(cupsLocalizeDestValue(http, dest, dinfo, option, value)); } /* * 'print_file()' - Print a file. */ static void print_file(http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ const char *filename, /* I - File to print */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { cups_file_t *fp; /* File to print */ int job_id; /* Job ID */ ipp_status_t status; /* Submission status */ const char *title; /* Title of job */ char buffer[32768]; /* File buffer */ ssize_t bytes; /* Bytes read/to write */ if ((fp = cupsFileOpen(filename, "r")) == NULL) { printf("Unable to open \"%s\": %s\n", filename, strerror(errno)); return; } if ((title = strrchr(filename, '/')) != NULL) title ++; else title = filename; if ((status = cupsCreateDestJob(http, dest, dinfo, &job_id, title, num_options, options)) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED) { printf("Unable to create job: %s\n", cupsLastErrorString()); cupsFileClose(fp); return; } printf("Created job ID: %d\n", job_id); if (cupsStartDestDocument(http, dest, dinfo, job_id, title, CUPS_FORMAT_AUTO, 0, NULL, 1) != HTTP_STATUS_CONTINUE) { printf("Unable to send document: %s\n", cupsLastErrorString()); cupsFileClose(fp); return; } while ((bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0) { if (cupsWriteRequestData(http, buffer, (size_t)bytes) != HTTP_STATUS_CONTINUE) { printf("Unable to write document data: %s\n", cupsLastErrorString()); break; } } cupsFileClose(fp); if ((status = cupsFinishDestDocument(http, dest, dinfo)) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED) { printf("Unable to send document: %s\n", cupsLastErrorString()); return; } puts("Job queued."); } /* * 'show_conflicts()' - Show conflicts for selected options. */ static void show_conflicts( http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { (void)http; (void)dest; (void)dinfo; (void)num_options; (void)options; } /* * 'show_default()' - Show default value for option. */ static void show_default(http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ const char *option) /* I - Option */ { if (!strcmp(option, "media")) { /* * Show default media option... */ cups_size_t size; /* Media size information */ if (cupsGetDestMediaDefault(http, dest, dinfo, CUPS_MEDIA_FLAGS_DEFAULT, &size)) printf("%s (%.2fx%.2fmm, margins=[%.2f %.2f %.2f %.2f])\n", size.media, size.width * 0.01, size.length * 0.01, size.left * 0.01, size.bottom * 0.01, size.right * 0.01, size.top * 0.01); else puts("FAILED"); } else { /* * Show default other option... */ ipp_attribute_t *defattr; /* Default attribute */ if ((defattr = cupsFindDestDefault(http, dest, dinfo, option)) != NULL) { char value[1024]; /* Value of default attribute */ ippAttributeString(defattr, value, sizeof(value)); puts(value); } else puts("FAILED"); } } /* * 'show_media()' - Show available media. */ static void show_media(http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ unsigned flags, /* I - Media flags */ const char *name) /* I - Size name */ { int i, /* Looping var */ count; /* Number of sizes */ cups_size_t size; /* Media size info */ if (name) { double dw, dl; /* Width and length from name */ char units[32]; /* Units */ int width, /* Width in 100ths of millimeters */ length; /* Length in 100ths of millimeters */ if (sscanf(name, "%lfx%lf%31s", &dw, &dl, units) == 3) { if (!strcmp(units, "in")) { width = (int)(dw * 2540.0); length = (int)(dl * 2540.0); } else if (!strcmp(units, "mm")) { width = (int)(dw * 100.0); length = (int)(dl * 100.0); } else { puts(" bad units in size"); return; } if (cupsGetDestMediaBySize(http, dest, dinfo, width, length, flags, &size)) { printf(" %s (%s) %dx%d B%d L%d R%d T%d\n", size.media, cupsLocalizeDestMedia(http, dest, dinfo, flags, &size), size.width, size.length, size.bottom, size.left, size.right, size.top); } else { puts(" not supported"); } } else if (cupsGetDestMediaByName(http, dest, dinfo, name, flags, &size)) { printf(" %s (%s) %dx%d B%d L%d R%d T%d\n", size.media, cupsLocalizeDestMedia(http, dest, dinfo, flags, &size), size.width, size.length, size.bottom, size.left, size.right, size.top); } else { puts(" not supported"); } } else { count = cupsGetDestMediaCount(http, dest, dinfo, flags); printf("%d size%s:\n", count, count == 1 ? "" : "s"); for (i = 0; i < count; i ++) { if (cupsGetDestMediaByIndex(http, dest, dinfo, i, flags, &size)) printf(" %s (%s) %dx%d B%d L%d R%d T%d\n", size.media, cupsLocalizeDestMedia(http, dest, dinfo, flags, &size), size.width, size.length, size.bottom, size.left, size.right, size.top); else puts(" error"); } } } /* * 'show_supported()' - Show supported options, values, etc. */ static void show_supported(http_t *http, /* I - Connection to destination */ cups_dest_t *dest, /* I - Destination */ cups_dinfo_t *dinfo, /* I - Destination information */ const char *option, /* I - Option, if any */ const char *value) /* I - Value, if any */ { ipp_attribute_t *attr; /* Attribute */ int i, /* Looping var */ count; /* Number of values */ if (!option) { attr = cupsFindDestSupported(http, dest, dinfo, "job-creation-attributes"); if (attr) { count = ippGetCount(attr); for (i = 0; i < count; i ++) show_supported(http, dest, dinfo, ippGetString(attr, i, NULL), NULL); } else { static const char * const options[] = { /* List of standard options */ CUPS_COPIES, CUPS_FINISHINGS, CUPS_MEDIA, CUPS_NUMBER_UP, CUPS_ORIENTATION, CUPS_PRINT_COLOR_MODE, CUPS_PRINT_QUALITY, CUPS_SIDES }; puts("No job-creation-attributes-supported attribute, probing instead."); for (i = 0; i < (int)(sizeof(options) / sizeof(options[0])); i ++) if (cupsCheckDestSupported(http, dest, dinfo, options[i], NULL)) show_supported(http, dest, dinfo, options[i], NULL); } } else if (!value) { printf("%s (%s - %s)\n", option, cupsLocalizeDestOption(http, dest, dinfo, option), cupsCheckDestSupported(http, dest, dinfo, option, NULL) ? "supported" : "not-supported"); if ((attr = cupsFindDestSupported(http, dest, dinfo, option)) != NULL) { count = ippGetCount(attr); switch (ippGetValueTag(attr)) { case IPP_TAG_INTEGER : for (i = 0; i < count; i ++) printf(" %d\n", ippGetInteger(attr, i)); break; case IPP_TAG_ENUM : for (i = 0; i < count; i ++) { int val = ippGetInteger(attr, i); char valstr[256]; snprintf(valstr, sizeof(valstr), "%d", val); printf(" %s (%s)\n", ippEnumString(option, ippGetInteger(attr, i)), cupsLocalizeDestValue(http, dest, dinfo, option, valstr)); } break; case IPP_TAG_RANGE : for (i = 0; i < count; i ++) { int upper, lower = ippGetRange(attr, i, &upper); printf(" %d-%d\n", lower, upper); } break; case IPP_TAG_RESOLUTION : for (i = 0; i < count; i ++) { int xres, yres; ipp_res_t units; xres = ippGetResolution(attr, i, &yres, &units); if (xres == yres) printf(" %d%s\n", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); else printf(" %dx%d%s\n", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); } break; case IPP_TAG_KEYWORD : for (i = 0; i < count; i ++) printf(" %s (%s)\n", ippGetString(attr, i, NULL), cupsLocalizeDestValue(http, dest, dinfo, option, ippGetString(attr, i, NULL))); break; case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_URI : case IPP_TAG_URISCHEME : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : for (i = 0; i < count; i ++) printf(" %s\n", ippGetString(attr, i, NULL)); break; case IPP_TAG_STRING : for (i = 0; i < count; i ++) { int j, len; unsigned char *data = ippGetOctetString(attr, i, &len); fputs(" ", stdout); for (j = 0; j < len; j ++) { if (data[j] < ' ' || data[j] >= 0x7f) printf("<%02X>", data[j]); else putchar(data[j]); } putchar('\n'); } break; case IPP_TAG_BOOLEAN : break; default : printf(" %s\n", ippTagString(ippGetValueTag(attr))); break; } } } else if (cupsCheckDestSupported(http, dest, dinfo, option, value)) puts("YES"); else puts("NO"); } /* * 'usage()' - Show program usage. */ static void usage(const char *arg) /* I - Argument for usage message */ { if (arg) printf("testdest: Unknown option \"%s\".\n", arg); puts("Usage:"); puts(" ./testdest name [operation ...]"); puts(" ./testdest ipp://... [operation ...]"); puts(" ./testdest ipps://... [operation ...]"); puts(" ./testdest --enum [grayscale] [color] [duplex] [staple] [small]\n" " [medium] [large]"); puts(""); puts("Operations:"); puts(" conflicts options"); puts(" default option"); puts(" localize option [value]"); puts(" media [borderless] [duplex] [exact] [ready] [name or size]"); puts(" print filename [options]"); puts(" supported [option [value]]"); exit(arg != NULL); } cups-2.2.7/cups/testfile.c000664 000765 000024 00000037554 13255074424 016126 0ustar00msweetstaff000000 000000 /* * File test program for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "string-private.h" #include "debug-private.h" #include "file.h" #include #include #ifdef HAVE_LIBZ # include #endif /* HAVE_LIBZ */ #ifdef WIN32 # include #else # include #endif /* WIN32 */ #include /* * Local functions... */ static int count_lines(cups_file_t *fp); static int random_tests(void); static int read_write_tests(int compression); /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int status; /* Exit status */ char filename[1024]; /* Filename buffer */ cups_file_t *fp; /* File pointer */ #ifndef WIN32 int fds[2]; /* Open file descriptors */ cups_file_t *fdfile; /* File opened with cupsFileOpenFd() */ #endif /* !WIN32 */ int count; /* Number of lines in file */ if (argc == 1) { /* * Do uncompressed file tests... */ status = read_write_tests(0); #ifdef HAVE_LIBZ /* * Do compressed file tests... */ putchar('\n'); status += read_write_tests(1); #endif /* HAVE_LIBZ */ /* * Do uncompressed random I/O tests... */ status += random_tests(); #ifndef WIN32 /* * Test fdopen and close without reading... */ pipe(fds); close(fds[1]); fputs("\ncupsFileOpenFd(fd, \"r\"): ", stdout); fflush(stdout); if ((fdfile = cupsFileOpenFd(fds[0], "r")) == NULL) { puts("FAIL"); status ++; } else { /* * Able to open file, now close without reading. If we don't return * before the alarm fires, that is a failure and we will crash on the * alarm signal... */ puts("PASS"); fputs("cupsFileClose(no read): ", stdout); fflush(stdout); alarm(5); cupsFileClose(fdfile); alarm(0); puts("PASS"); } #endif /* !WIN32 */ /* * Count lines in psglyphs, rewind, then count again. */ fputs("\ncupsFileOpen(\"../data/media.defs\", \"r\"): ", stdout); if ((fp = cupsFileOpen("../data/media.defs", "r")) == NULL) { puts("FAIL"); status ++; } else { puts("PASS"); fputs("cupsFileGets: ", stdout); if ((count = count_lines(fp)) != 201) { printf("FAIL (got %d lines, expected 201)\n", count); status ++; } else { puts("PASS"); fputs("cupsFileRewind: ", stdout); if (cupsFileRewind(fp) != 0) { puts("FAIL"); status ++; } else { puts("PASS"); fputs("cupsFileGets: ", stdout); if ((count = count_lines(fp)) != 201) { printf("FAIL (got %d lines, expected 201)\n", count); status ++; } else puts("PASS"); } } cupsFileClose(fp); } /* * Test path functions... */ fputs("\ncupsFileFind: ", stdout); #ifdef WIN32 if (cupsFileFind("notepad.exe", "C:/WINDOWS", 1, filename, sizeof(filename)) && cupsFileFind("notepad.exe", "C:/WINDOWS;C:/WINDOWS/SYSTEM32", 1, filename, sizeof(filename))) #else if (cupsFileFind("cat", "/bin", 1, filename, sizeof(filename)) && cupsFileFind("cat", "/bin:/usr/bin", 1, filename, sizeof(filename))) #endif /* WIN32 */ printf("PASS (%s)\n", filename); else { puts("FAIL"); status ++; } /* * Summarize the results and return... */ if (!status) puts("\nALL TESTS PASSED!"); else printf("\n%d TEST(S) FAILED!\n", status); } else { /* * Cat the filename on the command-line... */ char line[8192]; /* Line from file */ if ((fp = cupsFileOpen(argv[1], "r")) == NULL) { perror(argv[1]); status = 1; } else if (argc == 2) { status = 0; while (cupsFileGets(fp, line, sizeof(line))) puts(line); if (!cupsFileEOF(fp)) perror(argv[1]); cupsFileClose(fp); } else { status = 0; ssize_t bytes; while ((bytes = cupsFileRead(fp, line, sizeof(line))) > 0) printf("%s: %d bytes\n", argv[1], (int)bytes); if (cupsFileEOF(fp)) printf("%s: EOF\n", argv[1]); else perror(argv[1]); cupsFileClose(fp); } } return (status); } /* * 'count_lines()' - Count the number of lines in a file. */ static int /* O - Number of lines */ count_lines(cups_file_t *fp) /* I - File to read from */ { int count; /* Number of lines */ char line[1024]; /* Line buffer */ for (count = 0; cupsFileGets(fp, line, sizeof(line)); count ++); return (count); } /* * 'random_tests()' - Do random access tests. */ static int /* O - Status */ random_tests(void) { int status, /* Status of tests */ pass, /* Current pass */ count, /* Number of records read */ record, /* Current record */ num_records; /* Number of records */ off_t pos; /* Position in file */ ssize_t expected; /* Expected position in file */ cups_file_t *fp; /* File */ char buffer[512]; /* Data buffer */ /* * Run 4 passes, each time appending to a data file and then reopening the * file for reading to validate random records in the file. */ for (status = 0, pass = 0; pass < 4; pass ++) { /* * cupsFileOpen(append) */ printf("\ncupsFileOpen(append %d): ", pass); if ((fp = cupsFileOpen("testfile.dat", "a")) == NULL) { printf("FAIL (%s)\n", strerror(errno)); status ++; break; } else puts("PASS"); /* * cupsFileTell() */ expected = 256 * (ssize_t)sizeof(buffer) * pass; fputs("cupsFileTell(): ", stdout); if ((pos = cupsFileTell(fp)) != (off_t)expected) { printf("FAIL (" CUPS_LLFMT " instead of " CUPS_LLFMT ")\n", CUPS_LLCAST pos, CUPS_LLCAST expected); status ++; break; } else puts("PASS"); /* * cupsFileWrite() */ fputs("cupsFileWrite(256 512-byte records): ", stdout); for (record = 0; record < 256; record ++) { memset(buffer, record, sizeof(buffer)); if (cupsFileWrite(fp, buffer, sizeof(buffer)) < (ssize_t)sizeof(buffer)) break; } if (record < 256) { printf("FAIL (%d: %s)\n", record, strerror(errno)); status ++; break; } else puts("PASS"); /* * cupsFileTell() */ expected += 256 * (ssize_t)sizeof(buffer); fputs("cupsFileTell(): ", stdout); if ((pos = cupsFileTell(fp)) != (off_t)expected) { printf("FAIL (" CUPS_LLFMT " instead of " CUPS_LLFMT ")\n", CUPS_LLCAST pos, CUPS_LLCAST expected); status ++; break; } else puts("PASS"); cupsFileClose(fp); /* * cupsFileOpen(read) */ printf("\ncupsFileOpen(read %d): ", pass); if ((fp = cupsFileOpen("testfile.dat", "r")) == NULL) { printf("FAIL (%s)\n", strerror(errno)); status ++; break; } else puts("PASS"); /* * cupsFileSeek, cupsFileRead */ fputs("cupsFileSeek(), cupsFileRead(): ", stdout); for (num_records = (pass + 1) * 256, count = (pass + 1) * 256, record = ((int)CUPS_RAND() & 65535) % num_records; count > 0; count --, record = (record + ((int)CUPS_RAND() & 31) - 16 + num_records) % num_records) { /* * The last record is always the first... */ if (count == 1) record = 0; /* * Try reading the data for the specified record, and validate the * contents... */ expected = (ssize_t)sizeof(buffer) * record; if ((pos = cupsFileSeek(fp, expected)) != expected) { printf("FAIL (" CUPS_LLFMT " instead of " CUPS_LLFMT ")\n", CUPS_LLCAST pos, CUPS_LLCAST expected); status ++; break; } else { if (cupsFileRead(fp, buffer, sizeof(buffer)) != sizeof(buffer)) { printf("FAIL (%s)\n", strerror(errno)); status ++; break; } else if ((buffer[0] & 255) != (record & 255) || memcmp(buffer, buffer + 1, sizeof(buffer) - 1)) { printf("FAIL (Bad Data - %d instead of %d)\n", buffer[0] & 255, record & 255); status ++; break; } } } if (count == 0) puts("PASS"); cupsFileClose(fp); } /* * Remove the test file... */ unlink("testfile.dat"); /* * Return the test status... */ return (status); } /* * 'read_write_tests()' - Perform read/write tests. */ static int /* O - Status */ read_write_tests(int compression) /* I - Use compression? */ { int i; /* Looping var */ cups_file_t *fp; /* File */ int status; /* Exit status */ char line[1024], /* Line from file */ *value; /* Directive value from line */ int linenum; /* Line number */ unsigned char readbuf[8192], /* Read buffer */ writebuf[8192]; /* Write buffer */ int byte; /* Byte from file */ ssize_t bytes; /* Number of bytes read/written */ off_t length; /* Length of file */ static const char *partial_line = "partial line"; /* Partial line */ /* * No errors so far... */ status = 0; /* * Initialize the write buffer with random data... */ CUPS_SRAND((unsigned)time(NULL)); for (i = 0; i < (int)sizeof(writebuf); i ++) writebuf[i] = (unsigned char)CUPS_RAND(); /* * cupsFileOpen(write) */ printf("cupsFileOpen(write%s): ", compression ? " compressed" : ""); fp = cupsFileOpen(compression ? "testfile.dat.gz" : "testfile.dat", compression ? "w9" : "w"); if (fp) { puts("PASS"); /* * cupsFileCompression() */ fputs("cupsFileCompression(): ", stdout); if (cupsFileCompression(fp) == compression) puts("PASS"); else { printf("FAIL (Got %d, expected %d)\n", cupsFileCompression(fp), compression); status ++; } /* * cupsFilePuts() */ fputs("cupsFilePuts(): ", stdout); if (cupsFilePuts(fp, "# Hello, World\n") > 0) puts("PASS"); else { printf("FAIL (%s)\n", strerror(errno)); status ++; } /* * cupsFilePrintf() */ fputs("cupsFilePrintf(): ", stdout); for (i = 0; i < 1000; i ++) if (cupsFilePrintf(fp, "TestLine %03d\n", i) < 0) break; if (i >= 1000) puts("PASS"); else { printf("FAIL (%s)\n", strerror(errno)); status ++; } /* * cupsFilePutChar() */ fputs("cupsFilePutChar(): ", stdout); for (i = 0; i < 256; i ++) if (cupsFilePutChar(fp, i) < 0) break; if (i >= 256) puts("PASS"); else { printf("FAIL (%s)\n", strerror(errno)); status ++; } /* * cupsFileWrite() */ fputs("cupsFileWrite(): ", stdout); for (i = 0; i < 10000; i ++) if (cupsFileWrite(fp, (char *)writebuf, sizeof(writebuf)) < 0) break; if (i >= 10000) puts("PASS"); else { printf("FAIL (%s)\n", strerror(errno)); status ++; } /* * cupsFilePuts() with partial line... */ fputs("cupsFilePuts(\"partial line\"): ", stdout); if (cupsFilePuts(fp, partial_line) > 0) puts("PASS"); else { printf("FAIL (%s)\n", strerror(errno)); status ++; } /* * cupsFileTell() */ fputs("cupsFileTell(): ", stdout); if ((length = cupsFileTell(fp)) == 81933283) puts("PASS"); else { printf("FAIL (" CUPS_LLFMT " instead of 81933283)\n", CUPS_LLCAST length); status ++; } /* * cupsFileClose() */ fputs("cupsFileClose(): ", stdout); if (!cupsFileClose(fp)) puts("PASS"); else { printf("FAIL (%s)\n", strerror(errno)); status ++; } } else { printf("FAIL (%s)\n", strerror(errno)); status ++; } /* * cupsFileOpen(read) */ fputs("\ncupsFileOpen(read): ", stdout); fp = cupsFileOpen(compression ? "testfile.dat.gz" : "testfile.dat", "r"); if (fp) { puts("PASS"); /* * cupsFileGets() */ fputs("cupsFileGets(): ", stdout); if (cupsFileGets(fp, line, sizeof(line))) { if (line[0] == '#') puts("PASS"); else { printf("FAIL (Got line \"%s\", expected comment line)\n", line); status ++; } } else { printf("FAIL (%s)\n", strerror(errno)); status ++; } /* * cupsFileCompression() */ fputs("cupsFileCompression(): ", stdout); if (cupsFileCompression(fp) == compression) puts("PASS"); else { printf("FAIL (Got %d, expected %d)\n", cupsFileCompression(fp), compression); status ++; } /* * cupsFileGetConf() */ linenum = 1; fputs("cupsFileGetConf(): ", stdout); for (i = 0, value = NULL; i < 1000; i ++) if (!cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) break; else if (_cups_strcasecmp(line, "TestLine") || !value || atoi(value) != i || linenum != (i + 2)) break; if (i >= 1000) puts("PASS"); else if (line[0]) { printf("FAIL (Line %d, directive \"%s\", value \"%s\")\n", linenum, line, value ? value : "(null)"); status ++; } else { printf("FAIL (%s)\n", strerror(errno)); status ++; } /* * cupsFileGetChar() */ fputs("cupsFileGetChar(): ", stdout); for (i = 0, byte = 0; i < 256; i ++) if ((byte = cupsFileGetChar(fp)) != i) break; if (i >= 256) puts("PASS"); else if (byte >= 0) { printf("FAIL (Got %d, expected %d)\n", byte, i); status ++; } else { printf("FAIL (%s)\n", strerror(errno)); status ++; } /* * cupsFileRead() */ fputs("cupsFileRead(): ", stdout); for (i = 0, bytes = 0; i < 10000; i ++) if ((bytes = cupsFileRead(fp, (char *)readbuf, sizeof(readbuf))) < 0) break; else if (memcmp(readbuf, writebuf, sizeof(readbuf))) break; if (i >= 10000) puts("PASS"); else if (bytes > 0) { printf("FAIL (Pass %d, ", i); for (i = 0; i < (int)sizeof(readbuf); i ++) if (readbuf[i] != writebuf[i]) break; printf("match failed at offset %d - got %02X, expected %02X)\n", i, readbuf[i], writebuf[i]); } else { printf("FAIL (%s)\n", strerror(errno)); status ++; } /* * cupsFileGetChar() with partial line... */ fputs("cupsFileGetChar(partial line): ", stdout); for (i = 0; i < (int)strlen(partial_line); i ++) if ((byte = cupsFileGetChar(fp)) < 0) break; else if (byte != partial_line[i]) break; if (!partial_line[i]) puts("PASS"); else { printf("FAIL (got '%c', expected '%c')\n", byte, partial_line[i]); status ++; } /* * cupsFileTell() */ fputs("cupsFileTell(): ", stdout); if ((length = cupsFileTell(fp)) == 81933283) puts("PASS"); else { printf("FAIL (" CUPS_LLFMT " instead of 81933283)\n", CUPS_LLCAST length); status ++; } /* * cupsFileClose() */ fputs("cupsFileClose(): ", stdout); if (!cupsFileClose(fp)) puts("PASS"); else { printf("FAIL (%s)\n", strerror(errno)); status ++; } } else { printf("FAIL (%s)\n", strerror(errno)); status ++; } /* * Remove the test file... */ if (!status) unlink(compression ? "testfile.dat.gz" : "testfile.dat"); /* * Return the test status... */ return (status); } cups-2.2.7/cups/testgetdests.c000664 000765 000024 00000002513 13255074424 017014 0ustar00msweetstaff000000 000000 /* * CUPS cupsGetDests API test program for CUPS. * * Copyright 2017 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include #include "cups.h" #include /* * 'main()' - Loop calling cupsGetDests. */ int /* O - Exit status */ main(void) { int num_dests; /* Number of destinations */ cups_dest_t *dests; /* Destinations */ struct timeval start, end; /* Start and stop time */ double secs; /* Total seconds to run cupsGetDests */ for (;;) { gettimeofday(&start, NULL); num_dests = cupsGetDests(&dests); gettimeofday(&end, NULL); secs = end.tv_sec - start.tv_sec + 0.000001 * (end.tv_usec - start.tv_usec); printf("Found %d printers in %.3f seconds...\n", num_dests, secs); cupsFreeDests(num_dests, dests); sleep(1); } return (0); } cups-2.2.7/cups/testhttp.c000664 000765 000024 00000061603 13255074424 016156 0ustar00msweetstaff000000 000000 /* * HTTP test program for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" /* * Types and structures... */ typedef struct uri_test_s /**** URI test cases ****/ { http_uri_status_t result; /* Expected return value */ const char *uri, /* URI */ *scheme, /* Scheme string */ *username, /* Username:password string */ *hostname, /* Hostname string */ *resource; /* Resource string */ int port, /* Port number */ assemble_port; /* Port number for httpAssembleURI() */ http_uri_coding_t assemble_coding;/* Coding for httpAssembleURI() */ } uri_test_t; /* * Local globals... */ static uri_test_t uri_tests[] = /* URI test data */ { /* Start with valid URIs */ { HTTP_URI_STATUS_OK, "file:/filename", "file", "", "", "/filename", 0, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "file:/filename%20with%20spaces", "file", "", "", "/filename with spaces", 0, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "file:///filename", "file", "", "", "/filename", 0, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "file:///filename%20with%20spaces", "file", "", "", "/filename with spaces", 0, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "file://localhost/filename", "file", "", "localhost", "/filename", 0, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "file://localhost/filename%20with%20spaces", "file", "", "localhost", "/filename with spaces", 0, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "http://server/", "http", "", "server", "/", 80, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "http://username@server/", "http", "username", "server", "/", 80, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "http://username:passwor%64@server/", "http", "username:password", "server", "/", 80, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "http://username:passwor%64@server:8080/", "http", "username:password", "server", "/", 8080, 8080, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "http://username:passwor%64@server:8080/directory/filename", "http", "username:password", "server", "/directory/filename", 8080, 8080, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "http://[2000::10:100]:631/ipp", "http", "", "2000::10:100", "/ipp", 631, 631, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "https://username:passwor%64@server/directory/filename", "https", "username:password", "server", "/directory/filename", 443, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "ipp://username:passwor%64@[::1]/ipp", "ipp", "username:password", "::1", "/ipp", 631, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "lpd://server/queue?reserve=yes", "lpd", "", "server", "/queue?reserve=yes", 515, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "mailto:user@domain.com", "mailto", "", "", "user@domain.com", 0, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "socket://server/", "socket", "", "server", "/", 9100, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "socket://192.168.1.1:9101/", "socket", "", "192.168.1.1", "/", 9101, 9101, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "tel:8005551212", "tel", "", "", "8005551212", 0, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "ipp://username:password@[v1.fe80::200:1234:5678:9abc+eth0]:999/ipp", "ipp", "username:password", "fe80::200:1234:5678:9abc%eth0", "/ipp", 999, 999, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "ipp://username:password@[fe80::200:1234:5678:9abc%25eth0]:999/ipp", "ipp", "username:password", "fe80::200:1234:5678:9abc%eth0", "/ipp", 999, 999, (http_uri_coding_t)(HTTP_URI_CODING_MOST | HTTP_URI_CODING_RFC6874) }, { HTTP_URI_STATUS_OK, "http://server/admin?DEVICE_URI=usb://HP/Photosmart%25202600%2520series?serial=MY53OK70V10400", "http", "", "server", "/admin?DEVICE_URI=usb://HP/Photosmart%25202600%2520series?serial=MY53OK70V10400", 80, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "lpd://Acme%20Laser%20(01%3A23%3A45).local._tcp._printer/", "lpd", "", "Acme Laser (01:23:45).local._tcp._printer", "/", 515, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "ipp://HP%20Officejet%204500%20G510n-z%20%40%20Will's%20MacBook%20Pro%2015%22._ipp._tcp.local./", "ipp", "", "HP Officejet 4500 G510n-z @ Will's MacBook Pro 15\"._ipp._tcp.local.", "/", 631, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_OK, "ipp://%22%23%2F%3A%3C%3E%3F%40%5B%5C%5D%5E%60%7B%7C%7D/", "ipp", "", "\"#/:<>?@[\\]^`{|}", "/", 631, 0, HTTP_URI_CODING_MOST }, /* Missing scheme */ { HTTP_URI_STATUS_MISSING_SCHEME, "/path/to/file/index.html", "file", "", "", "/path/to/file/index.html", 0, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_MISSING_SCHEME, "//server/ipp", "ipp", "", "server", "/ipp", 631, 0, HTTP_URI_CODING_MOST }, /* Unknown scheme */ { HTTP_URI_STATUS_UNKNOWN_SCHEME, "vendor://server/resource", "vendor", "", "server", "/resource", 0, 0, HTTP_URI_CODING_MOST }, /* Missing resource */ { HTTP_URI_STATUS_MISSING_RESOURCE, "socket://[::192.168.2.1]", "socket", "", "::192.168.2.1", "/", 9100, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_MISSING_RESOURCE, "socket://192.168.1.1:9101", "socket", "", "192.168.1.1", "/", 9101, 0, HTTP_URI_CODING_MOST }, /* Bad URI */ { HTTP_URI_STATUS_BAD_URI, "", "", "", "", "", 0, 0, HTTP_URI_CODING_MOST }, /* Bad scheme */ { HTTP_URI_STATUS_BAD_SCHEME, "bad_scheme://server/resource", "", "", "", "", 0, 0, HTTP_URI_CODING_MOST }, /* Bad username */ { HTTP_URI_STATUS_BAD_USERNAME, "http://username:passwor%6@server/resource", "http", "", "", "", 80, 0, HTTP_URI_CODING_MOST }, /* Bad hostname */ { HTTP_URI_STATUS_BAD_HOSTNAME, "http://[/::1]/index.html", "http", "", "", "", 80, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_BAD_HOSTNAME, "http://[", "http", "", "", "", 80, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_BAD_HOSTNAME, "http://serve%7/index.html", "http", "", "", "", 80, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_BAD_HOSTNAME, "http://server with spaces/index.html", "http", "", "", "", 80, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_BAD_HOSTNAME, "ipp://\"#/:<>?@[\\]^`{|}/", "ipp", "", "", "", 631, 0, HTTP_URI_CODING_MOST }, /* Bad port number */ { HTTP_URI_STATUS_BAD_PORT, "http://127.0.0.1:9999a/index.html", "http", "", "127.0.0.1", "", 0, 0, HTTP_URI_CODING_MOST }, /* Bad resource */ { HTTP_URI_STATUS_BAD_RESOURCE, "http://server/index.html%", "http", "", "server", "", 80, 0, HTTP_URI_CODING_MOST }, { HTTP_URI_STATUS_BAD_RESOURCE, "http://server/index with spaces.html", "http", "", "server", "", 80, 0, HTTP_URI_CODING_MOST } }; static const char * const base64_tests[][2] = { { "A", "QQ==" }, /* 010000 01 */ { "AB", "QUI=" }, /* 010000 010100 0010 */ { "ABC", "QUJD" }, /* 010000 010100 001001 000011 */ { "ABCD", "QUJDRA==" }, /* 010000 010100 001001 000011 010001 00 */ { "ABCDE", "QUJDREU=" }, /* 010000 010100 001001 000011 010001 000100 0101 */ { "ABCDEF", "QUJDREVG" }, /* 010000 010100 001001 000011 010001 000100 010101 000110 */ }; /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i, j, k; /* Looping vars */ http_t *http; /* HTTP connection */ http_encryption_t encryption; /* Encryption type */ http_status_t status; /* Status of GET command */ int failures; /* Number of test failures */ char buffer[8192]; /* Input buffer */ long bytes; /* Number of bytes read */ FILE *out; /* Output file */ char encode[256], /* Base64-encoded string */ decode[256]; /* Base64-decoded string */ int decodelen; /* Length of decoded string */ char scheme[HTTP_MAX_URI], /* Scheme from URI */ hostname[HTTP_MAX_URI], /* Hostname from URI */ username[HTTP_MAX_URI], /* Username:password from URI */ resource[HTTP_MAX_URI]; /* Resource from URI */ int port; /* Port number from URI */ http_uri_status_t uri_status; /* Status of URI separation */ http_addrlist_t *addrlist, /* Address list */ *addr; /* Current address */ off_t length, total; /* Length and total bytes */ time_t start, current; /* Start and end time */ const char *encoding; /* Negotiated Content-Encoding */ static const char * const uri_status_strings[] = { "HTTP_URI_STATUS_OVERFLOW", "HTTP_URI_STATUS_BAD_ARGUMENTS", "HTTP_URI_STATUS_BAD_RESOURCE", "HTTP_URI_STATUS_BAD_PORT", "HTTP_URI_STATUS_BAD_HOSTNAME", "HTTP_URI_STATUS_BAD_USERNAME", "HTTP_URI_STATUS_BAD_SCHEME", "HTTP_URI_STATUS_BAD_URI", "HTTP_URI_STATUS_OK", "HTTP_URI_STATUS_MISSING_SCHEME", "HTTP_URI_STATUS_UNKNOWN_SCHEME", "HTTP_URI_STATUS_MISSING_RESOURCE" }; /* * Do API tests if we don't have a URL on the command-line... */ if (argc == 1) { failures = 0; /* * httpGetDateString()/httpGetDateTime() */ fputs("httpGetDateString()/httpGetDateTime(): ", stdout); start = time(NULL); strlcpy(buffer, httpGetDateString(start), sizeof(buffer)); current = httpGetDateTime(buffer); i = (int)(current - start); if (i < 0) i = -i; if (!i) puts("PASS"); else { failures ++; puts("FAIL"); printf(" Difference is %d seconds, %02d:%02d:%02d...\n", i, i / 3600, (i / 60) % 60, i % 60); printf(" httpGetDateString(%d) returned \"%s\"\n", (int)start, buffer); printf(" httpGetDateTime(\"%s\") returned %d\n", buffer, (int)current); printf(" httpGetDateString(%d) returned \"%s\"\n", (int)current, httpGetDateString(current)); } /* * httpDecode64_2()/httpEncode64_2() */ fputs("httpDecode64_2()/httpEncode64_2(): ", stdout); for (i = 0, j = 0; i < (int)(sizeof(base64_tests) / sizeof(base64_tests[0])); i ++) { httpEncode64_2(encode, sizeof(encode), base64_tests[i][0], (int)strlen(base64_tests[i][0])); decodelen = (int)sizeof(decode); httpDecode64_2(decode, &decodelen, base64_tests[i][1]); if (strcmp(decode, base64_tests[i][0])) { failures ++; if (j) { puts("FAIL"); j = 1; } printf(" httpDecode64_2() returned \"%s\", expected \"%s\"...\n", decode, base64_tests[i][0]); } if (strcmp(encode, base64_tests[i][1])) { failures ++; if (j) { puts("FAIL"); j = 1; } printf(" httpEncode64_2() returned \"%s\", expected \"%s\"...\n", encode, base64_tests[i][1]); } } if (!j) puts("PASS"); /* * httpGetHostname() */ fputs("httpGetHostname(): ", stdout); if (httpGetHostname(NULL, hostname, sizeof(hostname))) printf("PASS (%s)\n", hostname); else { failures ++; puts("FAIL"); } /* * httpAddrGetList() */ printf("httpAddrGetList(%s): ", hostname); addrlist = httpAddrGetList(hostname, AF_UNSPEC, NULL); if (addrlist) { for (i = 0, addr = addrlist; addr; i ++, addr = addr->next) { char numeric[1024]; /* Numeric IP address */ httpAddrString(&(addr->addr), numeric, sizeof(numeric)); if (!strcmp(numeric, "UNKNOWN")) break; } if (addr) printf("FAIL (bad address for %s)\n", hostname); else printf("PASS (%d address(es) for %s)\n", i, hostname); httpAddrFreeList(addrlist); } else if (isdigit(hostname[0] & 255)) { puts("FAIL (ignored because hostname is numeric)"); } else { failures ++; puts("FAIL"); } /* * Test httpSeparateURI()... */ fputs("httpSeparateURI(): ", stdout); for (i = 0, j = 0; i < (int)(sizeof(uri_tests) / sizeof(uri_tests[0])); i ++) { uri_status = httpSeparateURI(HTTP_URI_CODING_MOST, uri_tests[i].uri, scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if (uri_status != uri_tests[i].result || strcmp(scheme, uri_tests[i].scheme) || strcmp(username, uri_tests[i].username) || strcmp(hostname, uri_tests[i].hostname) || port != uri_tests[i].port || strcmp(resource, uri_tests[i].resource)) { failures ++; if (!j) { puts("FAIL"); j = 1; } printf(" \"%s\":\n", uri_tests[i].uri); if (uri_status != uri_tests[i].result) printf(" Returned %s instead of %s\n", uri_status_strings[uri_status + 8], uri_status_strings[uri_tests[i].result + 8]); if (strcmp(scheme, uri_tests[i].scheme)) printf(" Scheme \"%s\" instead of \"%s\"\n", scheme, uri_tests[i].scheme); if (strcmp(username, uri_tests[i].username)) printf(" Username \"%s\" instead of \"%s\"\n", username, uri_tests[i].username); if (strcmp(hostname, uri_tests[i].hostname)) printf(" Hostname \"%s\" instead of \"%s\"\n", hostname, uri_tests[i].hostname); if (port != uri_tests[i].port) printf(" Port %d instead of %d\n", port, uri_tests[i].port); if (strcmp(resource, uri_tests[i].resource)) printf(" Resource \"%s\" instead of \"%s\"\n", resource, uri_tests[i].resource); } } if (!j) printf("PASS (%d URIs tested)\n", (int)(sizeof(uri_tests) / sizeof(uri_tests[0]))); /* * Test httpAssembleURI()... */ fputs("httpAssembleURI(): ", stdout); for (i = 0, j = 0, k = 0; i < (int)(sizeof(uri_tests) / sizeof(uri_tests[0])); i ++) if (uri_tests[i].result == HTTP_URI_STATUS_OK && !strstr(uri_tests[i].uri, "%64") && strstr(uri_tests[i].uri, "//")) { k ++; uri_status = httpAssembleURI(uri_tests[i].assemble_coding, buffer, sizeof(buffer), uri_tests[i].scheme, uri_tests[i].username, uri_tests[i].hostname, uri_tests[i].assemble_port, uri_tests[i].resource); if (uri_status != HTTP_URI_STATUS_OK) { failures ++; if (!j) { puts("FAIL"); j = 1; } printf(" \"%s\": %s\n", uri_tests[i].uri, uri_status_strings[uri_status + 8]); } else if (strcmp(buffer, uri_tests[i].uri)) { failures ++; if (!j) { puts("FAIL"); j = 1; } printf(" \"%s\": assembled = \"%s\"\n", uri_tests[i].uri, buffer); } } if (!j) printf("PASS (%d URIs tested)\n", k); /* * httpAssembleUUID */ fputs("httpAssembleUUID: ", stdout); httpAssembleUUID("hostname.example.com", 631, "printer", 12345, buffer, sizeof(buffer)); if (strncmp(buffer, "urn:uuid:", 9)) { printf("FAIL (%s)\n", buffer); failures ++; } else printf("PASS (%s)\n", buffer); /* * Show a summary and return... */ if (failures) printf("\n%d TESTS FAILED!\n", failures); else puts("\nALL TESTS PASSED!"); return (failures); } else if (strstr(argv[1], "._tcp")) { /* * Test resolving an mDNS name. */ char resolved[1024]; /* Resolved URI */ printf("_httpResolveURI(%s, _HTTP_RESOLVE_DEFAULT): ", argv[1]); fflush(stdout); if (!_httpResolveURI(argv[1], resolved, sizeof(resolved), _HTTP_RESOLVE_DEFAULT, NULL, NULL)) { puts("FAIL"); return (1); } else printf("PASS (%s)\n", resolved); printf("_httpResolveURI(%s, _HTTP_RESOLVE_FQDN): ", argv[1]); fflush(stdout); if (!_httpResolveURI(argv[1], resolved, sizeof(resolved), _HTTP_RESOLVE_FQDN, NULL, NULL)) { puts("FAIL"); return (1); } else if (strstr(resolved, ".local:")) { printf("FAIL (%s)\n", resolved); return (1); } else { printf("PASS (%s)\n", resolved); return (0); } } else if (!strcmp(argv[1], "-u") && argc == 3) { /* * Test URI separation... */ uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, argv[2], scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)); printf("uri_status = %s\n", uri_status_strings[uri_status + 8]); printf("scheme = \"%s\"\n", scheme); printf("username = \"%s\"\n", username); printf("hostname = \"%s\"\n", hostname); printf("port = %d\n", port); printf("resource = \"%s\"\n", resource); return (0); } /* * Test HTTP GET requests... */ http = NULL; out = stdout; for (i = 1; i < argc; i ++) { if (!strcmp(argv[i], "-o")) { i ++; if (i >= argc) break; out = fopen(argv[i], "wb"); continue; } httpSeparateURI(HTTP_URI_CODING_MOST, argv[i], scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if (!_cups_strcasecmp(scheme, "https") || !_cups_strcasecmp(scheme, "ipps") || port == 443) encryption = HTTP_ENCRYPTION_ALWAYS; else encryption = HTTP_ENCRYPTION_IF_REQUESTED; http = httpConnect2(hostname, port, NULL, AF_UNSPEC, encryption, 1, 30000, NULL); if (http == NULL) { perror(hostname); continue; } if (httpIsEncrypted(http)) { cups_array_t *creds; char info[1024]; static const char *trusts[] = { "OK", "Invalid", "Changed", "Expired", "Renewed", "Unknown" }; if (!httpCopyCredentials(http, &creds)) { cups_array_t *lcreds; http_trust_t trust = httpCredentialsGetTrust(creds, hostname); httpCredentialsString(creds, info, sizeof(info)); printf("Count: %d\n", cupsArrayCount(creds)); printf("Trust: %s\n", trusts[trust]); printf("Expiration: %s\n", httpGetDateString(httpCredentialsGetExpiration(creds))); printf("IsValidName: %d\n", httpCredentialsAreValidForName(creds, hostname)); printf("String: \"%s\"\n", info); printf("LoadCredentials: %d\n", httpLoadCredentials(NULL, &lcreds, hostname)); httpCredentialsString(lcreds, info, sizeof(info)); printf(" Count: %d\n", cupsArrayCount(lcreds)); printf(" String: \"%s\"\n", info); if (lcreds && cupsArrayCount(creds) == cupsArrayCount(lcreds)) { http_credential_t *cred, *lcred; for (i = 1, cred = (http_credential_t *)cupsArrayFirst(creds), lcred = (http_credential_t *)cupsArrayFirst(lcreds); cred && lcred; i ++, cred = (http_credential_t *)cupsArrayNext(creds), lcred = (http_credential_t *)cupsArrayNext(lcreds)) { if (cred->datalen != lcred->datalen) printf(" Credential #%d: Different lengths (saved=%d, current=%d)\n", i, (int)cred->datalen, (int)lcred->datalen); else if (memcmp(cred->data, lcred->data, cred->datalen)) printf(" Credential #%d: Different data\n", i); else printf(" Credential #%d: Matches\n", i); } } if (trust != HTTP_TRUST_OK) { printf("SaveCredentials: %d\n", httpSaveCredentials(NULL, creds, hostname)); trust = httpCredentialsGetTrust(creds, hostname); printf("New Trust: %s\n", trusts[trust]); } httpFreeCredentials(creds); } else puts("No credentials!"); } printf("Checking file \"%s\"...\n", resource); do { if (!_cups_strcasecmp(httpGetField(http, HTTP_FIELD_CONNECTION), "close")) { httpClearFields(http); if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } } httpClearFields(http); httpSetField(http, HTTP_FIELD_AUTHORIZATION, httpGetAuthString(http)); httpSetField(http, HTTP_FIELD_ACCEPT_LANGUAGE, "en"); if (httpHead(http, resource)) { if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } else { status = HTTP_STATUS_UNAUTHORIZED; continue; } } while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE); if (status == HTTP_STATUS_UNAUTHORIZED) { /* * Flush any error message... */ httpFlush(http); /* * See if we can do authentication... */ if (cupsDoAuthentication(http, "GET", resource)) { status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED; break; } if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } continue; } #ifdef HAVE_SSL else if (status == HTTP_STATUS_UPGRADE_REQUIRED) { /* Flush any error message... */ httpFlush(http); /* Reconnect... */ if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } /* Upgrade with encryption... */ httpEncryption(http, HTTP_ENCRYPTION_REQUIRED); /* Try again, this time with encryption enabled... */ continue; } #endif /* HAVE_SSL */ } while (status == HTTP_STATUS_UNAUTHORIZED || status == HTTP_STATUS_UPGRADE_REQUIRED); if (status == HTTP_STATUS_OK) puts("HEAD OK:"); else printf("HEAD failed with status %d...\n", status); encoding = httpGetContentEncoding(http); printf("Requesting file \"%s\" (Accept-Encoding: %s)...\n", resource, encoding ? encoding : "identity"); do { if (!_cups_strcasecmp(httpGetField(http, HTTP_FIELD_CONNECTION), "close")) { httpClearFields(http); if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } } httpClearFields(http); httpSetField(http, HTTP_FIELD_AUTHORIZATION, httpGetAuthString(http)); httpSetField(http, HTTP_FIELD_ACCEPT_LANGUAGE, "en"); httpSetField(http, HTTP_FIELD_ACCEPT_ENCODING, encoding); if (httpGet(http, resource)) { if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } else { status = HTTP_STATUS_UNAUTHORIZED; continue; } } while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE); if (status == HTTP_STATUS_UNAUTHORIZED) { /* * Flush any error message... */ httpFlush(http); /* * See if we can do authentication... */ if (cupsDoAuthentication(http, "GET", resource)) { status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED; break; } if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } continue; } #ifdef HAVE_SSL else if (status == HTTP_STATUS_UPGRADE_REQUIRED) { /* Flush any error message... */ httpFlush(http); /* Reconnect... */ if (httpReconnect2(http, 30000, NULL)) { status = HTTP_STATUS_ERROR; break; } /* Upgrade with encryption... */ httpEncryption(http, HTTP_ENCRYPTION_REQUIRED); /* Try again, this time with encryption enabled... */ continue; } #endif /* HAVE_SSL */ } while (status == HTTP_STATUS_UNAUTHORIZED || status == HTTP_STATUS_UPGRADE_REQUIRED); if (status == HTTP_STATUS_OK) puts("GET OK:"); else printf("GET failed with status %d...\n", status); start = time(NULL); length = httpGetLength2(http); total = 0; while ((bytes = httpRead2(http, buffer, sizeof(buffer))) > 0) { total += bytes; fwrite(buffer, (size_t)bytes, 1, out); if (out != stdout) { current = time(NULL); if (current == start) current ++; printf("\r" CUPS_LLFMT "/" CUPS_LLFMT " bytes (" CUPS_LLFMT " bytes/sec) ", CUPS_LLCAST total, CUPS_LLCAST length, CUPS_LLCAST (total / (current - start))); fflush(stdout); } } } if (out != stdout) putchar('\n'); puts("Closing connection to server..."); httpClose(http); if (out != stdout) fclose(out); return (0); } cups-2.2.7/cups/testi18n.c000664 000765 000024 00000034424 13255074424 015757 0ustar00msweetstaff000000 000000 /* * Internationalization test for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "string-private.h" #include "language-private.h" #include #include #include /* * Local globals... */ static const char * const lang_encodings[] = { /* Encoding strings */ "us-ascii", "iso-8859-1", "iso-8859-2", "iso-8859-3", "iso-8859-4", "iso-8859-5", "iso-8859-6", "iso-8859-7", "iso-8859-8", "iso-8859-9", "iso-8859-10", "utf-8", "iso-8859-13", "iso-8859-14", "iso-8859-15", "windows-874", "windows-1250", "windows-1251", "windows-1252", "windows-1253", "windows-1254", "windows-1255", "windows-1256", "windows-1257", "windows-1258", "koi8-r", "koi8-u", "iso-8859-11", "iso-8859-16", "mac-roman", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "windows-932", "windows-936", "windows-949", "windows-950", "windows-1361", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "unknown", "euc-cn", "euc-jp", "euc-kr", "euc-tw", "jis-x0213" }; /* * Local functions... */ static void print_utf8(const char *msg, const cups_utf8_t *src); /* * 'main()' - Main entry for internationalization test module. */ int /* O - Exit code */ main(int argc, /* I - Argument Count */ char *argv[]) /* I - Arguments */ { FILE *fp; /* File pointer */ int count; /* File line counter */ int status, /* Status of current test */ errors; /* Error count */ char line[1024]; /* File line source string */ int len; /* Length (count) of string */ char legsrc[1024], /* Legacy source string */ legdest[1024], /* Legacy destination string */ *legptr; /* Pointer into legacy string */ cups_utf8_t utf8latin[] = /* UTF-8 Latin-1 source */ { 0x41, 0x20, 0x21, 0x3D, 0x20, 0xC3, 0x84, 0x2E, 0x00 }; /* "A != ." - use ISO 8859-1 */ cups_utf8_t utf8repla[] = /* UTF-8 Latin-1 replacement */ { 0x41, 0x20, 0xE2, 0x89, 0xA2, 0x20, 0xC3, 0x84, 0x2E, 0x00 }; /* "A ." */ cups_utf8_t utf8greek[] = /* UTF-8 Greek source string */ { 0x41, 0x20, 0x21, 0x3D, 0x20, 0xCE, 0x91, 0x2E, 0x00 }; /* "A != ." - use ISO 8859-7 */ cups_utf8_t utf8japan[] = /* UTF-8 Japanese source */ { 0x41, 0x20, 0x21, 0x3D, 0x20, 0xEE, 0x9C, 0x80, 0x2E, 0x00 }; /* "A != ." - use Windows 932 or EUC-JP */ cups_utf8_t utf8taiwan[] = /* UTF-8 Chinese source */ { 0x41, 0x20, 0x21, 0x3D, 0x20, 0xE4, 0xB9, 0x82, 0x2E, 0x00 }; /* "A != ." - use Windows 950 (Big5) or EUC-TW */ cups_utf8_t utf8dest[1024]; /* UTF-8 destination string */ cups_utf32_t utf32dest[1024]; /* UTF-32 destination string */ if (argc > 1) { int i; /* Looping var */ cups_encoding_t encoding; /* Source encoding */ if (argc != 3) { puts("Usage: ./testi18n [filename charset]"); return (1); } if ((fp = fopen(argv[1], "rb")) == NULL) { perror(argv[1]); return (1); } for (i = 0, encoding = CUPS_AUTO_ENCODING; i < (int)(sizeof(lang_encodings) / sizeof(lang_encodings[0])); i ++) if (!_cups_strcasecmp(lang_encodings[i], argv[2])) { encoding = (cups_encoding_t)i; break; } if (encoding == CUPS_AUTO_ENCODING) { fprintf(stderr, "%s: Unknown character set!\n", argv[2]); return (1); } while (fgets(line, sizeof(line), fp)) { if (cupsCharsetToUTF8(utf8dest, line, sizeof(utf8dest), encoding) < 0) { fprintf(stderr, "%s: Unable to convert line: %s", argv[1], line); return (1); } fputs((char *)utf8dest, stdout); } fclose(fp); return (0); } /* * Start with some conversion tests from a UTF-8 test file. */ errors = 0; if ((fp = fopen("utf8demo.txt", "rb")) == NULL) { perror("utf8demo.txt"); return (1); } /* * cupsUTF8ToUTF32 */ fputs("cupsUTF8ToUTF32 of utfdemo.txt: ", stdout); for (count = 0, status = 0; fgets(line, sizeof(line), fp);) { count ++; if (cupsUTF8ToUTF32(utf32dest, (cups_utf8_t *)line, 1024) < 0) { printf("FAIL (UTF-8 to UTF-32 on line %d)\n", count); errors ++; status = 1; break; } } if (!status) puts("PASS"); /* * cupsUTF8ToCharset(CUPS_EUC_JP) */ fputs("cupsUTF8ToCharset(CUPS_EUC_JP) of utfdemo.txt: ", stdout); rewind(fp); for (count = 0, status = 0; fgets(line, sizeof(line), fp);) { count ++; len = cupsUTF8ToCharset(legdest, (cups_utf8_t *)line, 1024, CUPS_EUC_JP); if (len < 0) { printf("FAIL (UTF-8 to EUC-JP on line %d)\n", count); errors ++; status = 1; break; } } if (!status) puts("PASS"); fclose(fp); /* * Test UTF-8 to legacy charset (ISO 8859-1)... */ fputs("cupsUTF8ToCharset(CUPS_ISO8859_1): ", stdout); legdest[0] = 0; len = cupsUTF8ToCharset(legdest, utf8latin, 1024, CUPS_ISO8859_1); if (len < 0) { printf("FAIL (len=%d)\n", len); errors ++; } else puts("PASS"); /* * cupsCharsetToUTF8 */ fputs("cupsCharsetToUTF8(CUPS_ISO8859_1): ", stdout); strlcpy(legsrc, legdest, sizeof(legsrc)); len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_ISO8859_1); if ((size_t)len != strlen((char *)utf8latin)) { printf("FAIL (len=%d, expected %d)\n", len, (int)strlen((char *)utf8latin)); print_utf8(" utf8latin", utf8latin); print_utf8(" utf8dest", utf8dest); errors ++; } else if (memcmp(utf8latin, utf8dest, (size_t)len)) { puts("FAIL (results do not match)"); print_utf8(" utf8latin", utf8latin); print_utf8(" utf8dest", utf8dest); errors ++; } else if (cupsUTF8ToCharset(legdest, utf8repla, 1024, CUPS_ISO8859_1) < 0) { puts("FAIL (replacement characters do not work!)"); errors ++; } else puts("PASS"); /* * Test UTF-8 to/from legacy charset (ISO 8859-7)... */ fputs("cupsUTF8ToCharset(CUPS_ISO8859_7): ", stdout); if (cupsUTF8ToCharset(legdest, utf8greek, 1024, CUPS_ISO8859_7) < 0) { puts("FAIL"); errors ++; } else { for (legptr = legdest; *legptr && *legptr != '?'; legptr ++); if (*legptr) { puts("FAIL (unknown character)"); errors ++; } else puts("PASS"); } fputs("cupsCharsetToUTF8(CUPS_ISO8859_7): ", stdout); strlcpy(legsrc, legdest, sizeof(legsrc)); len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_ISO8859_7); if ((size_t)len != strlen((char *)utf8greek)) { printf("FAIL (len=%d, expected %d)\n", len, (int)strlen((char *)utf8greek)); print_utf8(" utf8greek", utf8greek); print_utf8(" utf8dest", utf8dest); errors ++; } else if (memcmp(utf8greek, utf8dest, (size_t)len)) { puts("FAIL (results do not match)"); print_utf8(" utf8greek", utf8greek); print_utf8(" utf8dest", utf8dest); errors ++; } else puts("PASS"); /* * Test UTF-8 to/from legacy charset (Windows 932)... */ fputs("cupsUTF8ToCharset(CUPS_WINDOWS_932): ", stdout); if (cupsUTF8ToCharset(legdest, utf8japan, 1024, CUPS_WINDOWS_932) < 0) { puts("FAIL"); errors ++; } else { for (legptr = legdest; *legptr && *legptr != '?'; legptr ++); if (*legptr) { puts("FAIL (unknown character)"); errors ++; } else puts("PASS"); } fputs("cupsCharsetToUTF8(CUPS_WINDOWS_932): ", stdout); strlcpy(legsrc, legdest, sizeof(legsrc)); len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_WINDOWS_932); if ((size_t)len != strlen((char *)utf8japan)) { printf("FAIL (len=%d, expected %d)\n", len, (int)strlen((char *)utf8japan)); print_utf8(" utf8japan", utf8japan); print_utf8(" utf8dest", utf8dest); errors ++; } else if (memcmp(utf8japan, utf8dest, (size_t)len)) { puts("FAIL (results do not match)"); print_utf8(" utf8japan", utf8japan); print_utf8(" utf8dest", utf8dest); errors ++; } else puts("PASS"); /* * Test UTF-8 to/from legacy charset (EUC-JP)... */ fputs("cupsUTF8ToCharset(CUPS_EUC_JP): ", stdout); if (cupsUTF8ToCharset(legdest, utf8japan, 1024, CUPS_EUC_JP) < 0) { puts("FAIL"); errors ++; } else { for (legptr = legdest; *legptr && *legptr != '?'; legptr ++); if (*legptr) { puts("FAIL (unknown character)"); errors ++; } else puts("PASS"); } #ifndef __linux fputs("cupsCharsetToUTF8(CUPS_EUC_JP): ", stdout); strlcpy(legsrc, legdest, sizeof(legsrc)); len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_EUC_JP); if ((size_t)len != strlen((char *)utf8japan)) { printf("FAIL (len=%d, expected %d)\n", len, (int)strlen((char *)utf8japan)); print_utf8(" utf8japan", utf8japan); print_utf8(" utf8dest", utf8dest); errors ++; } else if (memcmp(utf8japan, utf8dest, (size_t)len)) { puts("FAIL (results do not match)"); print_utf8(" utf8japan", utf8japan); print_utf8(" utf8dest", utf8dest); errors ++; } else puts("PASS"); #endif /* !__linux */ /* * Test UTF-8 to/from legacy charset (Windows 950)... */ fputs("cupsUTF8ToCharset(CUPS_WINDOWS_950): ", stdout); if (cupsUTF8ToCharset(legdest, utf8taiwan, 1024, CUPS_WINDOWS_950) < 0) { puts("FAIL"); errors ++; } else { for (legptr = legdest; *legptr && *legptr != '?'; legptr ++); if (*legptr) { puts("FAIL (unknown character)"); errors ++; } else puts("PASS"); } fputs("cupsCharsetToUTF8(CUPS_WINDOWS_950): ", stdout); strlcpy(legsrc, legdest, sizeof(legsrc)); len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_WINDOWS_950); if ((size_t)len != strlen((char *)utf8taiwan)) { printf("FAIL (len=%d, expected %d)\n", len, (int)strlen((char *)utf8taiwan)); print_utf8(" utf8taiwan", utf8taiwan); print_utf8(" utf8dest", utf8dest); errors ++; } else if (memcmp(utf8taiwan, utf8dest, (size_t)len)) { puts("FAIL (results do not match)"); print_utf8(" utf8taiwan", utf8taiwan); print_utf8(" utf8dest", utf8dest); errors ++; } else puts("PASS"); /* * Test UTF-8 to/from legacy charset (EUC-TW)... */ fputs("cupsUTF8ToCharset(CUPS_EUC_TW): ", stdout); if (cupsUTF8ToCharset(legdest, utf8taiwan, 1024, CUPS_EUC_TW) < 0) { puts("FAIL"); errors ++; } else { for (legptr = legdest; *legptr && *legptr != '?'; legptr ++); if (*legptr) { puts("FAIL (unknown character)"); errors ++; } else puts("PASS"); } fputs("cupsCharsetToUTF8(CUPS_EUC_TW): ", stdout); strlcpy(legsrc, legdest, sizeof(legsrc)); len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_EUC_TW); if ((size_t)len != strlen((char *)utf8taiwan)) { printf("FAIL (len=%d, expected %d)\n", len, (int)strlen((char *)utf8taiwan)); print_utf8(" utf8taiwan", utf8taiwan); print_utf8(" utf8dest", utf8dest); errors ++; } else if (memcmp(utf8taiwan, utf8dest, (size_t)len)) { puts("FAIL (results do not match)"); print_utf8(" utf8taiwan", utf8taiwan); print_utf8(" utf8dest", utf8dest); errors ++; } else puts("PASS"); #if 0 /* * Test UTF-8 (16-bit) to UTF-32 (w/ BOM)... */ if (verbose) printf("\ntesti18n: Testing UTF-8 to UTF-32 (w/ BOM)...\n"); len = cupsUTF8ToUTF32(utf32dest, utf8good, 1024); if (len < 0) return (1); if (verbose) { print_utf8(" utf8good ", utf8good); print_utf32(" utf32dest", utf32dest); } memcpy(utf32src, utf32dest, (len + 1) * sizeof(cups_utf32_t)); len = cupsUTF32ToUTF8(utf8dest, utf32src, 1024); if (len < 0) return (1); if (len != strlen ((char *) utf8good)) return (1); if (memcmp(utf8good, utf8dest, len) != 0) return (1); /* * Test invalid UTF-8 (16-bit) to UTF-32 (w/ BOM)... */ if (verbose) printf("\ntesti18n: Testing UTF-8 bad 16-bit source string...\n"); len = cupsUTF8ToUTF32(utf32dest, utf8bad, 1024); if (len >= 0) return (1); if (verbose) print_utf8(" utf8bad ", utf8bad); /* * Test _cupsCharmapFlush()... */ if (verbose) printf("\ntesti18n: Testing _cupsCharmapFlush()...\n"); _cupsCharmapFlush(); return (0); #endif /* 0 */ return (errors > 0); } /* * 'print_utf8()' - Print UTF-8 string with (optional) message. */ static void print_utf8(const char *msg, /* I - Message String */ const cups_utf8_t *src) /* I - UTF-8 Source String */ { const char *prefix; /* Prefix string */ if (msg) printf("%s:", msg); for (prefix = " "; *src; src ++) { printf("%s%02x", prefix, *src); if ((src[0] & 0x80) && (src[1] & 0x80)) prefix = ""; else prefix = " "; } putchar('\n'); } cups-2.2.7/cups/testipp.c000664 000765 000024 00000057255 13255074424 015777 0ustar00msweetstaff000000 000000 /* * IPP test program for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "file.h" #include "string-private.h" #include "ipp-private.h" #ifdef WIN32 # include #else # include # include #endif /* WIN32 */ /* * Local types... */ typedef struct _ippdata_t { size_t rpos, /* Read position */ wused, /* Bytes used */ wsize; /* Max size of buffer */ ipp_uchar_t *wbuffer; /* Buffer */ } _ippdata_t; /* * Local globals... */ static ipp_uchar_t collection[] = /* Collection buffer */ { 0x01, 0x01, /* IPP version */ 0x00, 0x02, /* Print-Job operation */ 0x00, 0x00, 0x00, 0x01, /* Request ID */ IPP_TAG_OPERATION, IPP_TAG_CHARSET, 0x00, 0x12, /* Name length + name */ 'a','t','t','r','i','b','u','t','e','s','-', 'c','h','a','r','s','e','t', 0x00, 0x05, /* Value length + value */ 'u','t','f','-','8', IPP_TAG_LANGUAGE, 0x00, 0x1b, /* Name length + name */ 'a','t','t','r','i','b','u','t','e','s','-', 'n','a','t','u','r','a','l','-','l','a','n', 'g','u','a','g','e', 0x00, 0x02, /* Value length + value */ 'e','n', IPP_TAG_URI, 0x00, 0x0b, /* Name length + name */ 'p','r','i','n','t','e','r','-','u','r','i', 0x00, 0x1c, /* Value length + value */ 'i','p','p',':','/','/','l','o','c','a','l', 'h','o','s','t','/','p','r','i','n','t','e', 'r','s','/','f','o','o', IPP_TAG_JOB, /* job group tag */ IPP_TAG_BEGIN_COLLECTION, /* begCollection tag */ 0x00, 0x09, /* Name length + name */ 'm', 'e', 'd', 'i', 'a', '-', 'c', 'o', 'l', 0x00, 0x00, /* No value */ IPP_TAG_MEMBERNAME, /* memberAttrName tag */ 0x00, 0x00, /* No name */ 0x00, 0x0a, /* Value length + value */ 'm', 'e', 'd', 'i', 'a', '-', 's', 'i', 'z', 'e', IPP_TAG_BEGIN_COLLECTION, /* begCollection tag */ 0x00, 0x00, /* Name length + name */ 0x00, 0x00, /* No value */ IPP_TAG_MEMBERNAME, /* memberAttrName tag */ 0x00, 0x00, /* No name */ 0x00, 0x0b, /* Value length + value */ 'x', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n', IPP_TAG_INTEGER, /* integer tag */ 0x00, 0x00, /* No name */ 0x00, 0x04, /* Value length + value */ 0x00, 0x00, 0x54, 0x56, IPP_TAG_MEMBERNAME, /* memberAttrName tag */ 0x00, 0x00, /* No name */ 0x00, 0x0b, /* Value length + value */ 'y', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n', IPP_TAG_INTEGER, /* integer tag */ 0x00, 0x00, /* No name */ 0x00, 0x04, /* Value length + value */ 0x00, 0x00, 0x6d, 0x24, IPP_TAG_END_COLLECTION, /* endCollection tag */ 0x00, 0x00, /* No name */ 0x00, 0x00, /* No value */ IPP_TAG_MEMBERNAME, /* memberAttrName tag */ 0x00, 0x00, /* No name */ 0x00, 0x0b, /* Value length + value */ 'm', 'e', 'd', 'i', 'a', '-', 'c', 'o', 'l', 'o', 'r', IPP_TAG_KEYWORD, /* keyword tag */ 0x00, 0x00, /* No name */ 0x00, 0x04, /* Value length + value */ 'b', 'l', 'u', 'e', IPP_TAG_MEMBERNAME, /* memberAttrName tag */ 0x00, 0x00, /* No name */ 0x00, 0x0a, /* Value length + value */ 'm', 'e', 'd', 'i', 'a', '-', 't', 'y', 'p', 'e', IPP_TAG_KEYWORD, /* keyword tag */ 0x00, 0x00, /* No name */ 0x00, 0x05, /* Value length + value */ 'p', 'l', 'a', 'i', 'n', IPP_TAG_END_COLLECTION, /* endCollection tag */ 0x00, 0x00, /* No name */ 0x00, 0x00, /* No value */ IPP_TAG_BEGIN_COLLECTION, /* begCollection tag */ 0x00, 0x00, /* No name */ 0x00, 0x00, /* No value */ IPP_TAG_MEMBERNAME, /* memberAttrName tag */ 0x00, 0x00, /* No name */ 0x00, 0x0a, /* Value length + value */ 'm', 'e', 'd', 'i', 'a', '-', 's', 'i', 'z', 'e', IPP_TAG_BEGIN_COLLECTION, /* begCollection tag */ 0x00, 0x00, /* Name length + name */ 0x00, 0x00, /* No value */ IPP_TAG_MEMBERNAME, /* memberAttrName tag */ 0x00, 0x00, /* No name */ 0x00, 0x0b, /* Value length + value */ 'x', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n', IPP_TAG_INTEGER, /* integer tag */ 0x00, 0x00, /* No name */ 0x00, 0x04, /* Value length + value */ 0x00, 0x00, 0x52, 0x08, IPP_TAG_MEMBERNAME, /* memberAttrName tag */ 0x00, 0x00, /* No name */ 0x00, 0x0b, /* Value length + value */ 'y', '-', 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n', IPP_TAG_INTEGER, /* integer tag */ 0x00, 0x00, /* No name */ 0x00, 0x04, /* Value length + value */ 0x00, 0x00, 0x74, 0x04, IPP_TAG_END_COLLECTION, /* endCollection tag */ 0x00, 0x00, /* No name */ 0x00, 0x00, /* No value */ IPP_TAG_MEMBERNAME, /* memberAttrName tag */ 0x00, 0x00, /* No name */ 0x00, 0x0b, /* Value length + value */ 'm', 'e', 'd', 'i', 'a', '-', 'c', 'o', 'l', 'o', 'r', IPP_TAG_KEYWORD, /* keyword tag */ 0x00, 0x00, /* No name */ 0x00, 0x05, /* Value length + value */ 'p', 'l', 'a', 'i', 'd', IPP_TAG_MEMBERNAME, /* memberAttrName tag */ 0x00, 0x00, /* No name */ 0x00, 0x0a, /* Value length + value */ 'm', 'e', 'd', 'i', 'a', '-', 't', 'y', 'p', 'e', IPP_TAG_KEYWORD, /* keyword tag */ 0x00, 0x00, /* No name */ 0x00, 0x06, /* Value length + value */ 'g', 'l', 'o', 's', 's', 'y', IPP_TAG_END_COLLECTION, /* endCollection tag */ 0x00, 0x00, /* No name */ 0x00, 0x00, /* No value */ IPP_TAG_END /* end tag */ }; static ipp_uchar_t mixed[] = /* Mixed value buffer */ { 0x01, 0x01, /* IPP version */ 0x00, 0x02, /* Print-Job operation */ 0x00, 0x00, 0x00, 0x01, /* Request ID */ IPP_TAG_OPERATION, IPP_TAG_INTEGER, /* integer tag */ 0x00, 0x1f, /* Name length + name */ 'n', 'o', 't', 'i', 'f', 'y', '-', 'l', 'e', 'a', 's', 'e', '-', 'd', 'u', 'r', 'a', 't', 'i', 'o', 'n', '-', 's', 'u', 'p', 'p', 'o', 'r', 't', 'e', 'd', 0x00, 0x04, /* Value length + value */ 0x00, 0x00, 0x00, 0x01, IPP_TAG_RANGE, /* rangeOfInteger tag */ 0x00, 0x00, /* No name */ 0x00, 0x08, /* Value length + value */ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, IPP_TAG_END /* end tag */ }; /* * Local functions... */ void hex_dump(const char *title, ipp_uchar_t *buffer, size_t bytes); void print_attributes(ipp_t *ipp, int indent); ssize_t read_cb(_ippdata_t *data, ipp_uchar_t *buffer, size_t bytes); ssize_t write_cb(_ippdata_t *data, ipp_uchar_t *buffer, size_t bytes); /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { _ippdata_t data; /* IPP buffer */ ipp_uchar_t buffer[8192]; /* Write buffer data */ ipp_t *cols[2], /* Collections */ *size; /* media-size collection */ ipp_t *request; /* Request */ ipp_attribute_t *media_col, /* media-col attribute */ *media_size, /* media-size attribute */ *attr; /* Other attribute */ ipp_state_t state; /* State */ size_t length; /* Length of data */ cups_file_t *fp; /* File pointer */ size_t i; /* Looping var */ int status; /* Status of tests (0 = success, 1 = fail) */ #ifdef DEBUG const char *name; /* Option name */ #endif /* DEBUG */ status = 0; if (argc == 1) { /* * Test request generation code... */ printf("Create Sample Request: "); request = ippNew(); request->request.op.version[0] = 0x01; request->request.op.version[1] = 0x01; request->request.op.operation_id = IPP_OP_PRINT_JOB; request->request.op.request_id = 1; ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "utf-8"); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, "en"); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/printers/foo"); cols[0] = ippNew(); size = ippNew(); ippAddInteger(size, IPP_TAG_ZERO, IPP_TAG_INTEGER, "x-dimension", 21590); ippAddInteger(size, IPP_TAG_ZERO, IPP_TAG_INTEGER, "y-dimension", 27940); ippAddCollection(cols[0], IPP_TAG_JOB, "media-size", size); ippDelete(size); ippAddString(cols[0], IPP_TAG_JOB, IPP_TAG_KEYWORD, "media-color", NULL, "blue"); ippAddString(cols[0], IPP_TAG_JOB, IPP_TAG_KEYWORD, "media-type", NULL, "plain"); cols[1] = ippNew(); size = ippNew(); ippAddInteger(size, IPP_TAG_ZERO, IPP_TAG_INTEGER, "x-dimension", 21000); ippAddInteger(size, IPP_TAG_ZERO, IPP_TAG_INTEGER, "y-dimension", 29700); ippAddCollection(cols[1], IPP_TAG_JOB, "media-size", size); ippDelete(size); ippAddString(cols[1], IPP_TAG_JOB, IPP_TAG_KEYWORD, "media-color", NULL, "plaid"); ippAddString(cols[1], IPP_TAG_JOB, IPP_TAG_KEYWORD, "media-type", NULL, "glossy"); ippAddCollections(request, IPP_TAG_JOB, "media-col", 2, (const ipp_t **)cols); ippDelete(cols[0]); ippDelete(cols[1]); length = ippLength(request); if (length != sizeof(collection)) { printf("FAIL - wrong ippLength(), %d instead of %d bytes!\n", (int)length, (int)sizeof(collection)); status = 1; } else puts("PASS"); /* * Write test #1... */ printf("Write Sample to Memory: "); data.wused = 0; data.wsize = sizeof(buffer); data.wbuffer = buffer; while ((state = ippWriteIO(&data, (ipp_iocb_t)write_cb, 1, NULL, request)) != IPP_STATE_DATA) if (state == IPP_STATE_ERROR) break; if (state != IPP_STATE_DATA) { printf("FAIL - %d bytes written.\n", (int)data.wused); status = 1; } else if (data.wused != sizeof(collection)) { printf("FAIL - wrote %d bytes, expected %d bytes!\n", (int)data.wused, (int)sizeof(collection)); hex_dump("Bytes Written", data.wbuffer, data.wused); hex_dump("Baseline", collection, sizeof(collection)); status = 1; } else if (memcmp(data.wbuffer, collection, data.wused)) { for (i = 0; i < data.wused; i ++) if (data.wbuffer[i] != collection[i]) break; printf("FAIL - output does not match baseline at 0x%04x!\n", (unsigned)i); hex_dump("Bytes Written", data.wbuffer, data.wused); hex_dump("Baseline", collection, sizeof(collection)); status = 1; } else puts("PASS"); ippDelete(request); /* * Read the data back in and confirm... */ printf("Read Sample from Memory: "); request = ippNew(); data.rpos = 0; while ((state = ippReadIO(&data, (ipp_iocb_t)read_cb, 1, NULL, request)) != IPP_STATE_DATA) if (state == IPP_STATE_ERROR) break; length = ippLength(request); if (state != IPP_STATE_DATA) { printf("FAIL - %d bytes read.\n", (int)data.rpos); status = 1; } else if (data.rpos != data.wused) { printf("FAIL - read %d bytes, expected %d bytes!\n", (int)data.rpos, (int)data.wused); print_attributes(request, 8); status = 1; } else if (length != sizeof(collection)) { printf("FAIL - wrong ippLength(), %d instead of %d bytes!\n", (int)length, (int)sizeof(collection)); print_attributes(request, 8); status = 1; } else puts("PASS"); fputs("ippFindAttribute(media-col): ", stdout); if ((media_col = ippFindAttribute(request, "media-col", IPP_TAG_BEGIN_COLLECTION)) == NULL) { if ((media_col = ippFindAttribute(request, "media-col", IPP_TAG_ZERO)) == NULL) puts("FAIL (not found)"); else printf("FAIL (wrong type - %s)\n", ippTagString(media_col->value_tag)); status = 1; } else if (media_col->num_values != 2) { printf("FAIL (wrong count - %d)\n", media_col->num_values); status = 1; } else puts("PASS"); if (media_col) { fputs("ippFindAttribute(media-size 1): ", stdout); if ((media_size = ippFindAttribute(media_col->values[0].collection, "media-size", IPP_TAG_BEGIN_COLLECTION)) == NULL) { if ((media_size = ippFindAttribute(media_col->values[0].collection, "media-col", IPP_TAG_ZERO)) == NULL) puts("FAIL (not found)"); else printf("FAIL (wrong type - %s)\n", ippTagString(media_size->value_tag)); status = 1; } else { if ((attr = ippFindAttribute(media_size->values[0].collection, "x-dimension", IPP_TAG_INTEGER)) == NULL) { if ((attr = ippFindAttribute(media_size->values[0].collection, "x-dimension", IPP_TAG_ZERO)) == NULL) puts("FAIL (missing x-dimension)"); else printf("FAIL (wrong type for x-dimension - %s)\n", ippTagString(attr->value_tag)); status = 1; } else if (attr->values[0].integer != 21590) { printf("FAIL (wrong value for x-dimension - %d)\n", attr->values[0].integer); status = 1; } else if ((attr = ippFindAttribute(media_size->values[0].collection, "y-dimension", IPP_TAG_INTEGER)) == NULL) { if ((attr = ippFindAttribute(media_size->values[0].collection, "y-dimension", IPP_TAG_ZERO)) == NULL) puts("FAIL (missing y-dimension)"); else printf("FAIL (wrong type for y-dimension - %s)\n", ippTagString(attr->value_tag)); status = 1; } else if (attr->values[0].integer != 27940) { printf("FAIL (wrong value for y-dimension - %d)\n", attr->values[0].integer); status = 1; } else puts("PASS"); } fputs("ippFindAttribute(media-size 2): ", stdout); if ((media_size = ippFindAttribute(media_col->values[1].collection, "media-size", IPP_TAG_BEGIN_COLLECTION)) == NULL) { if ((media_size = ippFindAttribute(media_col->values[1].collection, "media-col", IPP_TAG_ZERO)) == NULL) puts("FAIL (not found)"); else printf("FAIL (wrong type - %s)\n", ippTagString(media_size->value_tag)); status = 1; } else { if ((attr = ippFindAttribute(media_size->values[0].collection, "x-dimension", IPP_TAG_INTEGER)) == NULL) { if ((attr = ippFindAttribute(media_size->values[0].collection, "x-dimension", IPP_TAG_ZERO)) == NULL) puts("FAIL (missing x-dimension)"); else printf("FAIL (wrong type for x-dimension - %s)\n", ippTagString(attr->value_tag)); status = 1; } else if (attr->values[0].integer != 21000) { printf("FAIL (wrong value for x-dimension - %d)\n", attr->values[0].integer); status = 1; } else if ((attr = ippFindAttribute(media_size->values[0].collection, "y-dimension", IPP_TAG_INTEGER)) == NULL) { if ((attr = ippFindAttribute(media_size->values[0].collection, "y-dimension", IPP_TAG_ZERO)) == NULL) puts("FAIL (missing y-dimension)"); else printf("FAIL (wrong type for y-dimension - %s)\n", ippTagString(attr->value_tag)); status = 1; } else if (attr->values[0].integer != 29700) { printf("FAIL (wrong value for y-dimension - %d)\n", attr->values[0].integer); status = 1; } else puts("PASS"); } } /* * Test hierarchical find... */ fputs("ippFindAttribute(media-col/media-size/x-dimension): ", stdout); if ((attr = ippFindAttribute(request, "media-col/media-size/x-dimension", IPP_TAG_INTEGER)) != NULL) { if (ippGetInteger(attr, 0) != 21590) { printf("FAIL (wrong value for x-dimension - %d)\n", ippGetInteger(attr, 0)); status = 1; } else puts("PASS"); } else { puts("FAIL (not found)"); status = 1; } fputs("ippFindNextAttribute(media-col/media-size/x-dimension): ", stdout); if ((attr = ippFindNextAttribute(request, "media-col/media-size/x-dimension", IPP_TAG_INTEGER)) != NULL) { if (ippGetInteger(attr, 0) != 21000) { printf("FAIL (wrong value for x-dimension - %d)\n", ippGetInteger(attr, 0)); status = 1; } else puts("PASS"); } else { puts("FAIL (not found)"); status = 1; } fputs("ippFindNextAttribute(media-col/media-size/x-dimension) again: ", stdout); if ((attr = ippFindNextAttribute(request, "media-col/media-size/x-dimension", IPP_TAG_INTEGER)) != NULL) { printf("FAIL (got %d, expected nothing)\n", ippGetInteger(attr, 0)); status = 1; } else puts("PASS"); ippDelete(request); /* * Read the mixed data and confirm we converted everything to rangeOfInteger * values... */ printf("Read Mixed integer/rangeOfInteger from Memory: "); request = ippNew(); data.rpos = 0; data.wused = sizeof(mixed); data.wsize = sizeof(mixed); data.wbuffer = mixed; while ((state = ippReadIO(&data, (ipp_iocb_t)read_cb, 1, NULL, request)) != IPP_STATE_DATA) if (state == IPP_STATE_ERROR) break; length = ippLength(request); if (state != IPP_STATE_DATA) { printf("FAIL - %d bytes read.\n", (int)data.rpos); status = 1; } else if (data.rpos != sizeof(mixed)) { printf("FAIL - read %d bytes, expected %d bytes!\n", (int)data.rpos, (int)sizeof(mixed)); print_attributes(request, 8); status = 1; } else if (length != (sizeof(mixed) + 4)) { printf("FAIL - wrong ippLength(), %d instead of %d bytes!\n", (int)length, (int)sizeof(mixed) + 4); print_attributes(request, 8); status = 1; } else puts("PASS"); fputs("ippFindAttribute(notify-lease-duration-supported): ", stdout); if ((attr = ippFindAttribute(request, "notify-lease-duration-supported", IPP_TAG_ZERO)) == NULL) { puts("FAIL (not found)"); status = 1; } else if (attr->value_tag != IPP_TAG_RANGE) { printf("FAIL (wrong type - %s)\n", ippTagString(attr->value_tag)); status = 1; } else if (attr->num_values != 2) { printf("FAIL (wrong count - %d)\n", attr->num_values); status = 1; } else if (attr->values[0].range.lower != 1 || attr->values[0].range.upper != 1 || attr->values[1].range.lower != 16 || attr->values[1].range.upper != 32) { printf("FAIL (wrong values - %d,%d and %d,%d)\n", attr->values[0].range.lower, attr->values[0].range.upper, attr->values[1].range.lower, attr->values[1].range.upper); status = 1; } else puts("PASS"); ippDelete(request); #ifdef DEBUG /* * Test that private option array is sorted... */ fputs("_ippCheckOptions: ", stdout); if ((name = _ippCheckOptions()) == NULL) puts("PASS"); else { printf("FAIL (\"%s\" out of order)\n", name); status = 1; } #endif /* DEBUG */ /* * Test _ippFindOption() private API... */ fputs("_ippFindOption(\"printer-type\"): ", stdout); if (_ippFindOption("printer-type")) puts("PASS"); else { puts("FAIL"); status = 1; } /* * Summarize... */ putchar('\n'); if (status) puts("Core IPP tests failed."); else puts("Core IPP tests passed."); } else { /* * Read IPP files... */ for (i = 1; i < (size_t)argc; i ++) { if ((fp = cupsFileOpen(argv[i], "r")) == NULL) { printf("Unable to open \"%s\" - %s\n", argv[i], strerror(errno)); status = 1; continue; } request = ippNew(); while ((state = ippReadIO(fp, (ipp_iocb_t)cupsFileRead, 1, NULL, request)) == IPP_STATE_ATTRIBUTE); if (state != IPP_STATE_DATA) { printf("Error reading IPP message from \"%s\"!\n", argv[i]); status = 1; } else { printf("\n%s:\n", argv[i]); print_attributes(request, 4); } ippDelete(request); cupsFileClose(fp); } } return (status); } /* * 'hex_dump()' - Produce a hex dump of a buffer. */ void hex_dump(const char *title, /* I - Title */ ipp_uchar_t *buffer, /* I - Buffer to dump */ size_t bytes) /* I - Number of bytes */ { size_t i, j; /* Looping vars */ int ch; /* Current ASCII char */ /* * Show lines of 16 bytes at a time... */ printf(" %s:\n", title); for (i = 0; i < bytes; i += 16) { /* * Show the offset... */ printf(" %04x ", (unsigned)i); /* * Then up to 16 bytes in hex... */ for (j = 0; j < 16; j ++) if ((i + j) < bytes) printf(" %02x", buffer[i + j]); else printf(" "); /* * Then the ASCII representation of the bytes... */ putchar(' '); putchar(' '); for (j = 0; j < 16 && (i + j) < bytes; j ++) { ch = buffer[i + j] & 127; if (ch < ' ' || ch == 127) putchar('.'); else putchar(ch); } putchar('\n'); } } /* * 'print_attributes()' - Print the attributes in a request... */ void print_attributes(ipp_t *ipp, /* I - IPP request */ int indent) /* I - Indentation */ { ipp_tag_t group; /* Current group */ ipp_attribute_t *attr; /* Current attribute */ char buffer[2048]; /* Value string */ for (group = IPP_TAG_ZERO, attr = ipp->attrs; attr; attr = attr->next) { if (!attr->name && indent == 4) { group = IPP_TAG_ZERO; putchar('\n'); continue; } if (group != attr->group_tag) { group = attr->group_tag; printf("\n%*s%s:\n\n", indent - 4, "", ippTagString(group)); } ippAttributeString(attr, buffer, sizeof(buffer)); printf("%*s%s (%s%s): %s\n", indent, "", attr->name ? attr->name : "(null)", attr->num_values > 1 ? "1setOf " : "", ippTagString(attr->value_tag), buffer); } } /* * 'read_cb()' - Read data from a buffer. */ ssize_t /* O - Number of bytes read */ read_cb(_ippdata_t *data, /* I - Data */ ipp_uchar_t *buffer, /* O - Buffer to read */ size_t bytes) /* I - Number of bytes to read */ { size_t count; /* Number of bytes */ /* * Copy bytes from the data buffer to the read buffer... */ if ((count = data->wsize - data->rpos) > bytes) count = bytes; memcpy(buffer, data->wbuffer + data->rpos, count); data->rpos += count; /* * Return the number of bytes read... */ return ((ssize_t)count); } /* * 'write_cb()' - Write data into a buffer. */ ssize_t /* O - Number of bytes written */ write_cb(_ippdata_t *data, /* I - Data */ ipp_uchar_t *buffer, /* I - Buffer to write */ size_t bytes) /* I - Number of bytes to write */ { size_t count; /* Number of bytes */ /* * Loop until all bytes are written... */ if ((count = data->wsize - data->wused) > bytes) count = bytes; memcpy(data->wbuffer + data->wused, buffer, count); data->wused += count; /* * Return the number of bytes written... */ return ((ssize_t)count); } cups-2.2.7/cups/testlang.c000664 000765 000024 00000020125 13255074424 016112 0ustar00msweetstaff000000 000000 /* * Localization test program for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include "ppd-private.h" #ifdef __APPLE__ # include #endif /* __APPLE__ */ /* * Local functions... */ static int test_string(cups_lang_t *language, const char *msgid); /* * 'main()' - Load the specified language and show the strings for yes and no. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ int errors = 0; /* Number of errors */ cups_lang_t *language; /* Message catalog */ cups_lang_t *language2; /* Message catalog */ struct lconv *loc; /* Locale data */ char buffer[1024]; /* String buffer */ double number; /* Number */ static const char * const tests[] = /* Test strings */ { "1", "-1", "3", "5.125" }; if (argc == 1) { language = cupsLangDefault(); language2 = cupsLangDefault(); } else { language = cupsLangGet(argv[1]); language2 = cupsLangGet(argv[1]); setenv("LANG", argv[1], 1); setenv("SOFTWARE", "CUPS/" CUPS_SVERSION, 1); } _cupsSetLocale(argv); if (language != language2) { errors ++; puts("**** ERROR: Language cache did not work! ****"); puts("First result from cupsLangGet:"); } printf("Language = \"%s\"\n", language->language); printf("Encoding = \"%s\"\n", _cupsEncodingName(language->encoding)); errors += test_string(language, "No"); errors += test_string(language, "Yes"); if (language != language2) { puts("Second result from cupsLangGet:"); printf("Language = \"%s\"\n", language2->language); printf("Encoding = \"%s\"\n", _cupsEncodingName(language2->encoding)); printf("No = \"%s\"\n", _cupsLangString(language2, "No")); printf("Yes = \"%s\"\n", _cupsLangString(language2, "Yes")); } loc = localeconv(); for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i ++) { number = _cupsStrScand(tests[i], NULL, loc); printf("_cupsStrScand(\"%s\") number=%f\n", tests[i], number); _cupsStrFormatd(buffer, buffer + sizeof(buffer), number, loc); printf("_cupsStrFormatd(%f) buffer=\"%s\"\n", number, buffer); if (strcmp(buffer, tests[i])) { errors ++; puts("**** ERROR: Bad formatted number! ****"); } } if (argc == 3) { ppd_file_t *ppd; /* PPD file */ ppd_option_t *option; /* PageSize option */ ppd_choice_t *choice; /* PageSize/Letter choice */ if ((ppd = ppdOpenFile(argv[2])) == NULL) { printf("Unable to open PPD file \"%s\".\n", argv[2]); errors ++; } else { ppdLocalize(ppd); if ((option = ppdFindOption(ppd, "PageSize")) == NULL) { puts("No PageSize option."); errors ++; } else { printf("PageSize: %s\n", option->text); if ((choice = ppdFindChoice(option, "Letter")) == NULL) { puts("No Letter PageSize choice."); errors ++; } else { printf("Letter: %s\n", choice->text); } } printf("media-empty: %s\n", ppdLocalizeIPPReason(ppd, "media-empty", NULL, buffer, sizeof(buffer))); ppdClose(ppd); } } #ifdef __APPLE__ else { /* * Test all possible language IDs for compatibility with _cupsAppleLocale... */ CFIndex j, /* Looping var */ num_locales; /* Number of locales */ CFArrayRef locales; /* Locales */ CFStringRef locale_id, /* Current locale ID */ language_id; /* Current language ID */ char locale_str[256], /* Locale ID C string */ language_str[256], /* Language ID C string */ *bufptr; /* Pointer to ".UTF-8" in POSIX locale */ size_t buflen; /* Length of POSIX locale */ # if TEST_COUNTRY_CODES CFIndex k, /* Looping var */ num_country_codes; /* Number of country codes */ CFArrayRef country_codes; /* Country codes */ CFStringRef country_code, /* Current country code */ temp_id; /* Temporary language ID */ char country_str[256]; /* Country code C string */ # endif /* TEST_COUNTRY_CODES */ locales = CFLocaleCopyAvailableLocaleIdentifiers(); num_locales = CFArrayGetCount(locales); # if TEST_COUNTRY_CODES country_codes = CFLocaleCopyISOCountryCodes(); num_country_codes = CFArrayGetCount(country_codes); # endif /* TEST_COUNTRY_CODES */ printf("%d locales are available:\n", (int)num_locales); for (j = 0; j < num_locales; j ++) { locale_id = CFArrayGetValueAtIndex(locales, j); language_id = CFLocaleCreateCanonicalLanguageIdentifierFromString(kCFAllocatorDefault, locale_id); if (!locale_id || !CFStringGetCString(locale_id, locale_str, (CFIndex)sizeof(locale_str), kCFStringEncodingASCII)) { printf("%d: FAIL (unable to get locale ID string)\n", (int)j + 1); errors ++; continue; } if (!language_id || !CFStringGetCString(language_id, language_str, (CFIndex)sizeof(language_str), kCFStringEncodingASCII)) { printf("%d %s: FAIL (unable to get language ID string)\n", (int)j + 1, locale_str); errors ++; continue; } if (!_cupsAppleLocale(language_id, buffer, sizeof(buffer))) { printf("%d %s(%s): FAIL (unable to convert language ID string to POSIX locale)\n", (int)j + 1, locale_str, language_str); errors ++; continue; } if ((bufptr = strstr(buffer, ".UTF-8")) != NULL) buflen = (size_t)(bufptr - buffer); else buflen = strlen(buffer); if ((language = cupsLangGet(buffer)) == NULL) { printf("%d %s(%s): FAIL (unable to load POSIX locale \"%s\")\n", (int)j + 1, locale_str, language_str, buffer); errors ++; continue; } if (strncasecmp(language->language, buffer, buflen)) { printf("%d %s(%s): FAIL (unable to load POSIX locale \"%s\", got \"%s\")\n", (int)j + 1, locale_str, language_str, buffer, language->language); errors ++; continue; } printf("%d %s(%s): PASS (POSIX locale is \"%s\")\n", (int)j + 1, locale_str, language_str, buffer); } CFRelease(locales); # if TEST_COUNTRY_CODES CFRelease(country_codes); # endif /* TEST_COUNTRY_CODES */ } #endif /* __APPLE__ */ if (errors == 0) puts("ALL TESTS PASSED"); return (errors > 0); } /* * 'test_string()' - Test the localization of a string. */ static int /* O - 1 on failure, 0 on success */ test_string(cups_lang_t *language, /* I - Language */ const char *msgid) /* I - Message */ { const char *msgstr; /* Localized string */ /* * Get the localized string and then see if we got what we expected. * * For the POSIX locale, the string pointers should be the same. * For any other locale, the string pointers should be different. */ msgstr = _cupsLangString(language, msgid); if (strcmp(language->language, "C") && msgid == msgstr) { printf("%-8s = \"%s\" (FAIL - no message catalog loaded)\n", msgid, msgstr); return (1); } else if (!strcmp(language->language, "C") && msgid != msgstr) { printf("%-8s = \"%s\" (FAIL - POSIX locale is localized)\n", msgid, msgstr); return (1); } printf("%-8s = \"%s\" (PASS)\n", msgid, msgstr); return (0); } cups-2.2.7/cups/testoptions.c000664 000765 000024 00000012366 13255074424 016674 0ustar00msweetstaff000000 000000 /* * Option unit test program for CUPS. * * Copyright 2008-2016 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" /* * 'main()' - Test option processing functions. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int status = 0, /* Exit status */ num_options; /* Number of options */ cups_option_t *options; /* Options */ const char *value; /* Value of an option */ ipp_t *request; /* IPP request */ ipp_attribute_t *attr; /* IPP attribute */ int count; /* Number of attributes */ if (argc == 1) { /* * cupsParseOptions() */ fputs("cupsParseOptions: ", stdout); num_options = cupsParseOptions("foo=1234 " "bar=\"One Fish\",\"Two Fish\",\"Red Fish\"," "\"Blue Fish\" " "baz={param1=1 param2=2} " "foobar=FOO\\ BAR " "barfoo=barfoo " "barfoo=\"\'BAR FOO\'\" " "auth-info=user,pass\\\\,word\\\\\\\\", 0, &options); if (num_options != 6) { printf("FAIL (num_options=%d, expected 6)\n", num_options); status ++; } else if ((value = cupsGetOption("foo", num_options, options)) == NULL || strcmp(value, "1234")) { printf("FAIL (foo=\"%s\", expected \"1234\")\n", value); status ++; } else if ((value = cupsGetOption("bar", num_options, options)) == NULL || strcmp(value, "One Fish,Two Fish,Red Fish,Blue Fish")) { printf("FAIL (bar=\"%s\", expected \"One Fish,Two Fish,Red Fish,Blue " "Fish\")\n", value); status ++; } else if ((value = cupsGetOption("baz", num_options, options)) == NULL || strcmp(value, "{param1=1 param2=2}")) { printf("FAIL (baz=\"%s\", expected \"{param1=1 param2=2}\")\n", value); status ++; } else if ((value = cupsGetOption("foobar", num_options, options)) == NULL || strcmp(value, "FOO BAR")) { printf("FAIL (foobar=\"%s\", expected \"FOO BAR\")\n", value); status ++; } else if ((value = cupsGetOption("barfoo", num_options, options)) == NULL || strcmp(value, "\'BAR FOO\'")) { printf("FAIL (barfoo=\"%s\", expected \"\'BAR FOO\'\")\n", value); status ++; } else if ((value = cupsGetOption("auth-info", num_options, options)) == NULL || strcmp(value, "user,pass\\,word\\\\")) { printf("FAIL (auth-info=\"%s\", expected \"user,pass\\,word\\\\\")\n", value); status ++; } else puts("PASS"); fputs("cupsEncodeOptions2: ", stdout); request = ippNew(); ippSetOperation(request, IPP_OP_PRINT_JOB); cupsEncodeOptions2(request, num_options, options, IPP_TAG_JOB); for (count = 0, attr = ippFirstAttribute(request); attr; attr = ippNextAttribute(request), count ++); if (count != 6) { printf("FAIL (%d attributes, expected 6)\n", count); status ++; } else if ((attr = ippFindAttribute(request, "foo", IPP_TAG_ZERO)) == NULL) { puts("FAIL (Unable to find attribute \"foo\")"); status ++; } else if (ippGetValueTag(attr) != IPP_TAG_NAME) { printf("FAIL (\"foo\" of type %s, expected name)\n", ippTagString(ippGetValueTag(attr))); status ++; } else if (ippGetCount(attr) != 1) { printf("FAIL (\"foo\" has %d values, expected 1)\n", (int)ippGetCount(attr)); status ++; } else if (strcmp(ippGetString(attr, 0, NULL), "1234")) { printf("FAIL (\"foo\" has value %s, expected 1234)\n", ippGetString(attr, 0, NULL)); status ++; } else if ((attr = ippFindAttribute(request, "auth-info", IPP_TAG_ZERO)) == NULL) { puts("FAIL (Unable to find attribute \"auth-info\")"); status ++; } else if (ippGetValueTag(attr) != IPP_TAG_TEXT) { printf("FAIL (\"auth-info\" of type %s, expected text)\n", ippTagString(ippGetValueTag(attr))); status ++; } else if (ippGetCount(attr) != 2) { printf("FAIL (\"auth-info\" has %d values, expected 2)\n", (int)ippGetCount(attr)); status ++; } else if (strcmp(ippGetString(attr, 0, NULL), "user")) { printf("FAIL (\"auth-info\"[0] has value \"%s\", expected \"user\")\n", ippGetString(attr, 0, NULL)); status ++; } else if (strcmp(ippGetString(attr, 1, NULL), "pass,word\\")) { printf("FAIL (\"auth-info\"[1] has value \"%s\", expected \"pass,word\\\")\n", ippGetString(attr, 1, NULL)); status ++; } else puts("PASS"); } else { int i; /* Looping var */ cups_option_t *option; /* Current option */ num_options = cupsParseOptions(argv[1], 0, &options); for (i = 0, option = options; i < num_options; i ++, option ++) printf("options[%d].name=\"%s\", value=\"%s\"\n", i, option->name, option->value); } exit (status); } cups-2.2.7/cups/testppd.c000664 000765 000024 00000076673 13255074424 015777 0ustar00msweetstaff000000 000000 /* * PPD test program for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #undef _CUPS_NO_DEPRECATED #include "cups-private.h" #include "ppd-private.h" #include #ifdef WIN32 # include #else # include # include #endif /* WIN32 */ #include /* * Test data... */ static const char *default_code = "[{\n" "%%BeginFeature: *InstalledDuplexer False\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *PageRegion Letter\n" "PageRegion=Letter\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *InputSlot Tray\n" "InputSlot=Tray\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *OutputBin Tray1\n" "OutputBin=Tray1\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *MediaType Plain\n" "MediaType=Plain\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *IntOption None\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *StringOption None\n" "%%EndFeature\n" "} stopped cleartomark\n"; static const char *custom_code = "[{\n" "%%BeginFeature: *InstalledDuplexer False\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *InputSlot Tray\n" "InputSlot=Tray\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *MediaType Plain\n" "MediaType=Plain\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *OutputBin Tray1\n" "OutputBin=Tray1\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *IntOption None\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *CustomStringOption True\n" "(value\\0502\\051)\n" "(value 1)\n" "StringOption=Custom\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *CustomPageSize True\n" "400\n" "500\n" "0\n" "0\n" "0\n" "PageSize=Custom\n" "%%EndFeature\n" "} stopped cleartomark\n"; static const char *default2_code = "[{\n" "%%BeginFeature: *InstalledDuplexer False\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *InputSlot Tray\n" "InputSlot=Tray\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *Quality Normal\n" "Quality=Normal\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *IntOption None\n" "%%EndFeature\n" "} stopped cleartomark\n" "[{\n" "%%BeginFeature: *StringOption None\n" "%%EndFeature\n" "} stopped cleartomark\n"; /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ ppd_file_t *ppd; /* PPD file loaded from disk */ int status; /* Status of tests (0 = success, 1 = fail) */ int conflicts; /* Number of conflicts */ char *s; /* String */ char buffer[8192]; /* String buffer */ const char *text, /* Localized text */ *val; /* Option value */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ ppd_size_t minsize, /* Minimum size */ maxsize, /* Maximum size */ *size; /* Current size */ ppd_attr_t *attr; /* Current attribute */ _ppd_cache_t *pc; /* PPD cache */ status = 0; if (argc == 1) { /* * Setup directories for locale stuff... */ if (access("locale", 0)) { mkdir("locale", 0777); mkdir("locale/fr", 0777); symlink("../../../locale/cups_fr.po", "locale/fr/cups_fr.po"); mkdir("locale/zh_TW", 0777); symlink("../../../locale/cups_zh_TW.po", "locale/zh_TW/cups_zh_TW.po"); } putenv("LOCALEDIR=locale"); putenv("SOFTWARE=CUPS"); /* * Do tests with test.ppd... */ fputs("ppdOpenFile(test.ppd): ", stdout); if ((ppd = _ppdOpenFile("test.ppd", _PPD_LOCALIZATION_ALL)) != NULL) puts("PASS"); else { ppd_status_t err; /* Last error in file */ int line; /* Line number in file */ status ++; err = ppdLastError(&line); printf("FAIL (%s on line %d)\n", ppdErrorString(err), line); } fputs("ppdFindAttr(wildcard): ", stdout); if ((attr = ppdFindAttr(ppd, "cupsTest", NULL)) == NULL) { status ++; puts("FAIL (not found)"); } else if (strcmp(attr->name, "cupsTest") || strcmp(attr->spec, "Foo")) { status ++; printf("FAIL (got \"%s %s\")\n", attr->name, attr->spec); } else puts("PASS"); fputs("ppdFindNextAttr(wildcard): ", stdout); if ((attr = ppdFindNextAttr(ppd, "cupsTest", NULL)) == NULL) { status ++; puts("FAIL (not found)"); } else if (strcmp(attr->name, "cupsTest") || strcmp(attr->spec, "Bar")) { status ++; printf("FAIL (got \"%s %s\")\n", attr->name, attr->spec); } else puts("PASS"); fputs("ppdFindAttr(Foo): ", stdout); if ((attr = ppdFindAttr(ppd, "cupsTest", "Foo")) == NULL) { status ++; puts("FAIL (not found)"); } else if (strcmp(attr->name, "cupsTest") || strcmp(attr->spec, "Foo")) { status ++; printf("FAIL (got \"%s %s\")\n", attr->name, attr->spec); } else puts("PASS"); fputs("ppdFindNextAttr(Foo): ", stdout); if ((attr = ppdFindNextAttr(ppd, "cupsTest", "Foo")) != NULL) { status ++; printf("FAIL (got \"%s %s\")\n", attr->name, attr->spec); } else puts("PASS"); fputs("ppdMarkDefaults: ", stdout); ppdMarkDefaults(ppd); if ((conflicts = ppdConflicts(ppd)) == 0) puts("PASS"); else { status ++; printf("FAIL (%d conflicts)\n", conflicts); } fputs("ppdEmitString (defaults): ", stdout); if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL && !strcmp(s, default_code)) puts("PASS"); else { status ++; printf("FAIL (%d bytes instead of %d)\n", s ? (int)strlen(s) : 0, (int)strlen(default_code)); if (s) puts(s); } if (s) free(s); fputs("ppdEmitString (custom size and string): ", stdout); ppdMarkOption(ppd, "PageSize", "Custom.400x500"); ppdMarkOption(ppd, "StringOption", "{String1=\"value 1\" String2=value(2)}"); if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL && !strcmp(s, custom_code)) puts("PASS"); else { status ++; printf("FAIL (%d bytes instead of %d)\n", s ? (int)strlen(s) : 0, (int)strlen(custom_code)); if (s) puts(s); } if (s) free(s); /* * Test constraints... */ fputs("cupsGetConflicts(InputSlot=Envelope): ", stdout); ppdMarkOption(ppd, "PageSize", "Letter"); num_options = cupsGetConflicts(ppd, "InputSlot", "Envelope", &options); if (num_options != 2 || (val = cupsGetOption("PageRegion", num_options, options)) == NULL || _cups_strcasecmp(val, "Letter") || (val = cupsGetOption("PageSize", num_options, options)) == NULL || _cups_strcasecmp(val, "Letter")) { printf("FAIL (%d options:", num_options); for (i = 0; i < num_options; i ++) printf(" %s=%s", options[i].name, options[i].value); puts(")"); status ++; } else puts("PASS"); fputs("ppdConflicts(): ", stdout); ppdMarkOption(ppd, "InputSlot", "Envelope"); if ((conflicts = ppdConflicts(ppd)) == 2) puts("PASS (2)"); else { printf("FAIL (%d)\n", conflicts); status ++; } fputs("cupsResolveConflicts(InputSlot=Envelope): ", stdout); num_options = 0; options = NULL; if (!cupsResolveConflicts(ppd, "InputSlot", "Envelope", &num_options, &options)) { puts("FAIL (Unable to resolve)"); status ++; } else if (num_options != 2 || !cupsGetOption("PageSize", num_options, options)) { printf("FAIL (%d options:", num_options); for (i = 0; i < num_options; i ++) printf(" %s=%s", options[i].name, options[i].value); puts(")"); status ++; } else puts("PASS (Resolved by changing PageSize)"); cupsFreeOptions(num_options, options); fputs("cupsResolveConflicts(No option/choice): ", stdout); num_options = 0; options = NULL; if (cupsResolveConflicts(ppd, NULL, NULL, &num_options, &options) && num_options == 1 && !_cups_strcasecmp(options[0].name, "InputSlot") && !_cups_strcasecmp(options[0].value, "Tray")) puts("PASS (Resolved by changing InputSlot)"); else if (num_options > 0) { printf("FAIL (%d options:", num_options); for (i = 0; i < num_options; i ++) printf(" %s=%s", options[i].name, options[i].value); puts(")"); status ++; } else { puts("FAIL (Unable to resolve)"); status ++; } cupsFreeOptions(num_options, options); fputs("ppdInstallableConflict(): ", stdout); if (ppdInstallableConflict(ppd, "Duplex", "DuplexNoTumble") && !ppdInstallableConflict(ppd, "Duplex", "None")) puts("PASS"); else if (!ppdInstallableConflict(ppd, "Duplex", "DuplexNoTumble")) { puts("FAIL (Duplex=DuplexNoTumble did not conflict)"); status ++; } else { puts("FAIL (Duplex=None conflicted)"); status ++; } /* * ppdPageSizeLimits */ fputs("ppdPageSizeLimits: ", stdout); if (ppdPageSizeLimits(ppd, &minsize, &maxsize)) { if (fabs(minsize.width - 36.0) > 0.001 || fabs(minsize.length - 36.0) > 0.001 || fabs(maxsize.width - 1080.0) > 0.001 || fabs(maxsize.length - 86400.0) > 0.001) { printf("FAIL (got min=%.3fx%.3f, max=%.3fx%.3f, " "expected min=36x36, max=1080x86400)\n", minsize.width, minsize.length, maxsize.width, maxsize.length); status ++; } else puts("PASS"); } else { puts("FAIL (returned 0)"); status ++; } /* * cupsMarkOptions with PWG and IPP size names. */ fputs("cupsMarkOptions(media=iso-a4): ", stdout); num_options = cupsAddOption("media", "iso-a4", 0, &options); cupsMarkOptions(ppd, num_options, options); cupsFreeOptions(num_options, options); size = ppdPageSize(ppd, NULL); if (!size || strcmp(size->name, "A4")) { printf("FAIL (%s)\n", size ? size->name : "unknown"); status ++; } else puts("PASS"); fputs("cupsMarkOptions(media=na_letter_8.5x11in): ", stdout); num_options = cupsAddOption("media", "na_letter_8.5x11in", 0, &options); cupsMarkOptions(ppd, num_options, options); cupsFreeOptions(num_options, options); size = ppdPageSize(ppd, NULL); if (!size || strcmp(size->name, "Letter")) { printf("FAIL (%s)\n", size ? size->name : "unknown"); status ++; } else puts("PASS"); fputs("cupsMarkOptions(media=oe_letter-fullbleed_8.5x11in): ", stdout); num_options = cupsAddOption("media", "oe_letter-fullbleed_8.5x11in", 0, &options); cupsMarkOptions(ppd, num_options, options); cupsFreeOptions(num_options, options); size = ppdPageSize(ppd, NULL); if (!size || strcmp(size->name, "Letter.Fullbleed")) { printf("FAIL (%s)\n", size ? size->name : "unknown"); status ++; } else puts("PASS"); fputs("cupsMarkOptions(media=A4): ", stdout); num_options = cupsAddOption("media", "A4", 0, &options); cupsMarkOptions(ppd, num_options, options); cupsFreeOptions(num_options, options); size = ppdPageSize(ppd, NULL); if (!size || strcmp(size->name, "A4")) { printf("FAIL (%s)\n", size ? size->name : "unknown"); status ++; } else puts("PASS"); /* * Custom sizes... */ fputs("cupsMarkOptions(media=Custom.8x10in): ", stdout); num_options = cupsAddOption("media", "Custom.8x10in", 0, &options); cupsMarkOptions(ppd, num_options, options); cupsFreeOptions(num_options, options); size = ppdPageSize(ppd, NULL); if (!size || strcmp(size->name, "Custom") || fabs(size->width - 576.0) > 0.001 || fabs(size->length - 720.0) > 0.001) { printf("FAIL (%s - %gx%g)\n", size ? size->name : "unknown", size ? size->width : 0.0, size ? size->length : 0.0); status ++; } else puts("PASS"); /* * Test localization... */ fputs("ppdLocalizeIPPReason(text): ", stdout); if (ppdLocalizeIPPReason(ppd, "foo", NULL, buffer, sizeof(buffer)) && !strcmp(buffer, "Foo Reason")) puts("PASS"); else { status ++; printf("FAIL (\"%s\" instead of \"Foo Reason\")\n", buffer); } fputs("ppdLocalizeIPPReason(http): ", stdout); if (ppdLocalizeIPPReason(ppd, "foo", "http", buffer, sizeof(buffer)) && !strcmp(buffer, "http://foo/bar.html")) puts("PASS"); else { status ++; printf("FAIL (\"%s\" instead of \"http://foo/bar.html\")\n", buffer); } fputs("ppdLocalizeIPPReason(help): ", stdout); if (ppdLocalizeIPPReason(ppd, "foo", "help", buffer, sizeof(buffer)) && !strcmp(buffer, "help:anchor='foo'%20bookID=Vendor%20Help")) puts("PASS"); else { status ++; printf("FAIL (\"%s\" instead of \"help:anchor='foo'%%20bookID=Vendor%%20Help\")\n", buffer); } fputs("ppdLocalizeIPPReason(file): ", stdout); if (ppdLocalizeIPPReason(ppd, "foo", "file", buffer, sizeof(buffer)) && !strcmp(buffer, "/help/foo/bar.html")) puts("PASS"); else { status ++; printf("FAIL (\"%s\" instead of \"/help/foo/bar.html\")\n", buffer); } putenv("LANG=fr"); putenv("LC_ALL=fr"); putenv("LC_CTYPE=fr"); putenv("LC_MESSAGES=fr"); fputs("ppdLocalizeIPPReason(fr text): ", stdout); if (ppdLocalizeIPPReason(ppd, "foo", NULL, buffer, sizeof(buffer)) && !strcmp(buffer, "La Long Foo Reason")) puts("PASS"); else { status ++; printf("FAIL (\"%s\" instead of \"La Long Foo Reason\")\n", buffer); } putenv("LANG=zh_TW"); putenv("LC_ALL=zh_TW"); putenv("LC_CTYPE=zh_TW"); putenv("LC_MESSAGES=zh_TW"); fputs("ppdLocalizeIPPReason(zh_TW text): ", stdout); if (ppdLocalizeIPPReason(ppd, "foo", NULL, buffer, sizeof(buffer)) && !strcmp(buffer, "Number 1 Foo Reason")) puts("PASS"); else { status ++; printf("FAIL (\"%s\" instead of \"Number 1 Foo Reason\")\n", buffer); } /* * cupsMarkerName localization... */ putenv("LANG=en"); putenv("LC_ALL=en"); putenv("LC_CTYPE=en"); putenv("LC_MESSAGES=en"); fputs("ppdLocalizeMarkerName(bogus): ", stdout); if ((text = ppdLocalizeMarkerName(ppd, "bogus")) != NULL) { status ++; printf("FAIL (\"%s\" instead of NULL)\n", text); } else puts("PASS"); fputs("ppdLocalizeMarkerName(cyan): ", stdout); if ((text = ppdLocalizeMarkerName(ppd, "cyan")) != NULL && !strcmp(text, "Cyan Toner")) puts("PASS"); else { status ++; printf("FAIL (\"%s\" instead of \"Cyan Toner\")\n", text ? text : "(null)"); } putenv("LANG=fr"); putenv("LC_ALL=fr"); putenv("LC_CTYPE=fr"); putenv("LC_MESSAGES=fr"); fputs("ppdLocalizeMarkerName(fr cyan): ", stdout); if ((text = ppdLocalizeMarkerName(ppd, "cyan")) != NULL && !strcmp(text, "La Toner Cyan")) puts("PASS"); else { status ++; printf("FAIL (\"%s\" instead of \"La Toner Cyan\")\n", text ? text : "(null)"); } putenv("LANG=zh_TW"); putenv("LC_ALL=zh_TW"); putenv("LC_CTYPE=zh_TW"); putenv("LC_MESSAGES=zh_TW"); fputs("ppdLocalizeMarkerName(zh_TW cyan): ", stdout); if ((text = ppdLocalizeMarkerName(ppd, "cyan")) != NULL && !strcmp(text, "Number 1 Cyan Toner")) puts("PASS"); else { status ++; printf("FAIL (\"%s\" instead of \"Number 1 Cyan Toner\")\n", text ? text : "(null)"); } ppdClose(ppd); /* * Test new constraints... */ fputs("ppdOpenFile(test2.ppd): ", stdout); if ((ppd = ppdOpenFile("test2.ppd")) != NULL) puts("PASS"); else { ppd_status_t err; /* Last error in file */ int line; /* Line number in file */ status ++; err = ppdLastError(&line); printf("FAIL (%s on line %d)\n", ppdErrorString(err), line); } fputs("ppdMarkDefaults: ", stdout); ppdMarkDefaults(ppd); if ((conflicts = ppdConflicts(ppd)) == 0) puts("PASS"); else { status ++; printf("FAIL (%d conflicts)\n", conflicts); } fputs("ppdEmitString (defaults): ", stdout); if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL && !strcmp(s, default2_code)) puts("PASS"); else { status ++; printf("FAIL (%d bytes instead of %d)\n", s ? (int)strlen(s) : 0, (int)strlen(default2_code)); if (s) puts(s); } if (s) free(s); fputs("ppdConflicts(): ", stdout); ppdMarkOption(ppd, "PageSize", "Env10"); ppdMarkOption(ppd, "InputSlot", "Envelope"); ppdMarkOption(ppd, "Quality", "Photo"); if ((conflicts = ppdConflicts(ppd)) == 1) puts("PASS (1)"); else { printf("FAIL (%d)\n", conflicts); status ++; } fputs("cupsResolveConflicts(Quality=Photo): ", stdout); num_options = 0; options = NULL; if (cupsResolveConflicts(ppd, "Quality", "Photo", &num_options, &options)) { printf("FAIL (%d options:", num_options); for (i = 0; i < num_options; i ++) printf(" %s=%s", options[i].name, options[i].value); puts(")"); status ++; } else puts("PASS (Unable to resolve)"); cupsFreeOptions(num_options, options); fputs("cupsResolveConflicts(No option/choice): ", stdout); num_options = 0; options = NULL; if (cupsResolveConflicts(ppd, NULL, NULL, &num_options, &options) && num_options == 1 && !_cups_strcasecmp(options->name, "Quality") && !_cups_strcasecmp(options->value, "Normal")) puts("PASS"); else if (num_options > 0) { printf("FAIL (%d options:", num_options); for (i = 0; i < num_options; i ++) printf(" %s=%s", options[i].name, options[i].value); puts(")"); status ++; } else { puts("FAIL (Unable to resolve!)"); status ++; } cupsFreeOptions(num_options, options); fputs("cupsResolveConflicts(loop test): ", stdout); ppdMarkOption(ppd, "PageSize", "A4"); ppdMarkOption(ppd, "InputSlot", "Tray"); ppdMarkOption(ppd, "Quality", "Photo"); num_options = 0; options = NULL; if (!cupsResolveConflicts(ppd, NULL, NULL, &num_options, &options)) puts("PASS"); else if (num_options > 0) { printf("FAIL (%d options:", num_options); for (i = 0; i < num_options; i ++) printf(" %s=%s", options[i].name, options[i].value); puts(")"); } else puts("FAIL (No conflicts!)"); fputs("ppdInstallableConflict(): ", stdout); if (ppdInstallableConflict(ppd, "Duplex", "DuplexNoTumble") && !ppdInstallableConflict(ppd, "Duplex", "None")) puts("PASS"); else if (!ppdInstallableConflict(ppd, "Duplex", "DuplexNoTumble")) { puts("FAIL (Duplex=DuplexNoTumble did not conflict)"); status ++; } else { puts("FAIL (Duplex=None conflicted)"); status ++; } /* * ppdPageSizeLimits */ ppdMarkDefaults(ppd); fputs("ppdPageSizeLimits(default): ", stdout); if (ppdPageSizeLimits(ppd, &minsize, &maxsize)) { if (fabs(minsize.width - 36.0) > 0.001 || fabs(minsize.length - 36.0) > 0.001 || fabs(maxsize.width - 1080.0) > 0.001 || fabs(maxsize.length - 86400.0) > 0.001) { printf("FAIL (got min=%.0fx%.0f, max=%.0fx%.0f, " "expected min=36x36, max=1080x86400)\n", minsize.width, minsize.length, maxsize.width, maxsize.length); status ++; } else puts("PASS"); } else { puts("FAIL (returned 0)"); status ++; } ppdMarkOption(ppd, "InputSlot", "Manual"); fputs("ppdPageSizeLimits(InputSlot=Manual): ", stdout); if (ppdPageSizeLimits(ppd, &minsize, &maxsize)) { if (fabs(minsize.width - 100.0) > 0.001 || fabs(minsize.length - 100.0) > 0.001 || fabs(maxsize.width - 1000.0) > 0.001 || fabs(maxsize.length - 1000.0) > 0.001) { printf("FAIL (got min=%.0fx%.0f, max=%.0fx%.0f, " "expected min=100x100, max=1000x1000)\n", minsize.width, minsize.length, maxsize.width, maxsize.length); status ++; } else puts("PASS"); } else { puts("FAIL (returned 0)"); status ++; } ppdMarkOption(ppd, "Quality", "Photo"); fputs("ppdPageSizeLimits(Quality=Photo): ", stdout); if (ppdPageSizeLimits(ppd, &minsize, &maxsize)) { if (fabs(minsize.width - 200.0) > 0.001 || fabs(minsize.length - 200.0) > 0.001 || fabs(maxsize.width - 1000.0) > 0.001 || fabs(maxsize.length - 1000.0) > 0.001) { printf("FAIL (got min=%.0fx%.0f, max=%.0fx%.0f, " "expected min=200x200, max=1000x1000)\n", minsize.width, minsize.length, maxsize.width, maxsize.length); status ++; } else puts("PASS"); } else { puts("FAIL (returned 0)"); status ++; } ppdMarkOption(ppd, "InputSlot", "Tray"); fputs("ppdPageSizeLimits(Quality=Photo): ", stdout); if (ppdPageSizeLimits(ppd, &minsize, &maxsize)) { if (fabs(minsize.width - 300.0) > 0.001 || fabs(minsize.length - 300.0) > 0.001 || fabs(maxsize.width - 1080.0) > 0.001 || fabs(maxsize.length - 86400.0) > 0.001) { printf("FAIL (got min=%.0fx%.0f, max=%.0fx%.0f, " "expected min=300x300, max=1080x86400)\n", minsize.width, minsize.length, maxsize.width, maxsize.length); status ++; } else puts("PASS"); } else { puts("FAIL (returned 0)"); status ++; } } else if (!strncmp(argv[1], "ipp://", 6) || !strncmp(argv[1], "ipps://", 7)) { /* * ipp://... or ipps://... */ http_t *http; /* Connection to printer */ ipp_t *request, /* Get-Printer-Attributes request */ *response; /* Get-Printer-Attributes response */ char scheme[32], /* URI scheme */ userpass[256], /* Username:password */ host[256], /* Hostname */ resource[256]; /* Resource path */ int port; /* Port number */ static const char * const pattrs[] =/* Requested printer attributes */ { "job-template", "printer-defaults", "printer-description", "media-col-database" }; if (httpSeparateURI(HTTP_URI_CODING_ALL, argv[1], scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) { printf("Bad URI \"%s\".\n", argv[1]); return (1); } http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL); if (!http) { printf("Unable to connect to \"%s:%d\": %s\n", host, port, cupsLastErrorString()); return (1); } request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, argv[1]); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs); response = cupsDoRequest(http, request, resource); if (_ppdCreateFromIPP(buffer, sizeof(buffer), response)) printf("Created PPD: %s\n", buffer); else puts("Unable to create PPD."); ippDelete(response); httpClose(http); return (0); } else { const char *filename; /* PPD filename */ struct stat fileinfo; /* File information */ if (strchr(argv[1], ':')) { /* * Server PPD... */ if ((filename = cupsGetServerPPD(CUPS_HTTP_DEFAULT, argv[1])) == NULL) { printf("%s: %s\n", argv[1], cupsLastErrorString()); return (1); } } else if (!strncmp(argv[1], "-d", 2)) { const char *printer; /* Printer name */ if (argv[1][2]) printer = argv[1] + 2; else if (argv[2]) printer = argv[2]; else { puts("Usage: ./testppd -d printer"); return (1); } filename = cupsGetPPD(printer); if (!filename) { printf("%s: %s\n", printer, cupsLastErrorString()); return (1); } } else filename = argv[1]; if (lstat(filename, &fileinfo)) { printf("%s: %s\n", filename, strerror(errno)); return (1); } if (S_ISLNK(fileinfo.st_mode)) { char realfile[1024]; /* Real file path */ ssize_t realsize; /* Size of real file path */ if ((realsize = readlink(filename, realfile, sizeof(realfile) - 1)) < 0) strlcpy(realfile, "Unknown", sizeof(realfile)); else realfile[realsize] = '\0'; if (stat(realfile, &fileinfo)) printf("%s: symlink to \"%s\", %s\n", filename, realfile, strerror(errno)); else printf("%s: symlink to \"%s\", %ld bytes\n", filename, realfile, (long)fileinfo.st_size); } else printf("%s: regular file, %ld bytes\n", filename, (long)fileinfo.st_size); if ((ppd = ppdOpenFile(filename)) == NULL) { ppd_status_t err; /* Last error in file */ int line; /* Line number in file */ status ++; err = ppdLastError(&line); printf("%s: %s on line %d\n", argv[1], ppdErrorString(err), line); } else { int j, k; /* Looping vars */ ppd_group_t *group; /* Option group */ ppd_option_t *option; /* Option */ ppd_coption_t *coption; /* Custom option */ ppd_cparam_t *cparam; /* Custom parameter */ ppd_const_t *c; /* UIConstraints */ char lang[255], /* LANG environment variable */ lc_all[255], /* LC_ALL environment variable */ lc_ctype[255], /* LC_CTYPE environment variable */ lc_messages[255];/* LC_MESSAGES environment variable */ if (argc > 2) { snprintf(lang, sizeof(lang), "LANG=%s", argv[2]); putenv(lang); snprintf(lc_all, sizeof(lc_all), "LC_ALL=%s", argv[2]); putenv(lc_all); snprintf(lc_ctype, sizeof(lc_ctype), "LC_CTYPE=%s", argv[2]); putenv(lc_ctype); snprintf(lc_messages, sizeof(lc_messages), "LC_MESSAGES=%s", argv[2]); putenv(lc_messages); } ppdLocalize(ppd); ppdMarkDefaults(ppd); if (argc > 3) { text = ppdLocalizeIPPReason(ppd, argv[3], NULL, buffer, sizeof(buffer)); printf("ppdLocalizeIPPReason(%s)=%s\n", argv[3], text ? text : "(null)"); return (text == NULL); } for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++) { printf("%s (%s):\n", group->name, group->text); for (j = group->num_options, option = group->options; j > 0; j --, option ++) { printf(" %s (%s):\n", option->keyword, option->text); for (k = 0; k < option->num_choices; k ++) printf(" - %s%s (%s)\n", option->choices[k].marked ? "*" : "", option->choices[k].choice, option->choices[k].text); if ((coption = ppdFindCustomOption(ppd, option->keyword)) != NULL) { for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params); cparam; cparam = (ppd_cparam_t *)cupsArrayNext(coption->params)) { switch (cparam->type) { case PPD_CUSTOM_CURVE : printf(" %s(%s): PPD_CUSTOM_CURVE (%g to %g)\n", cparam->name, cparam->text, cparam->minimum.custom_curve, cparam->maximum.custom_curve); break; case PPD_CUSTOM_INT : printf(" %s(%s): PPD_CUSTOM_INT (%d to %d)\n", cparam->name, cparam->text, cparam->minimum.custom_int, cparam->maximum.custom_int); break; case PPD_CUSTOM_INVCURVE : printf(" %s(%s): PPD_CUSTOM_INVCURVE (%g to %g)\n", cparam->name, cparam->text, cparam->minimum.custom_invcurve, cparam->maximum.custom_invcurve); break; case PPD_CUSTOM_PASSCODE : printf(" %s(%s): PPD_CUSTOM_PASSCODE (%d to %d)\n", cparam->name, cparam->text, cparam->minimum.custom_passcode, cparam->maximum.custom_passcode); break; case PPD_CUSTOM_PASSWORD : printf(" %s(%s): PPD_CUSTOM_PASSWORD (%d to %d)\n", cparam->name, cparam->text, cparam->minimum.custom_password, cparam->maximum.custom_password); break; case PPD_CUSTOM_POINTS : printf(" %s(%s): PPD_CUSTOM_POINTS (%g to %g)\n", cparam->name, cparam->text, cparam->minimum.custom_points, cparam->maximum.custom_points); break; case PPD_CUSTOM_REAL : printf(" %s(%s): PPD_CUSTOM_REAL (%g to %g)\n", cparam->name, cparam->text, cparam->minimum.custom_real, cparam->maximum.custom_real); break; case PPD_CUSTOM_STRING : printf(" %s(%s): PPD_CUSTOM_STRING (%d to %d)\n", cparam->name, cparam->text, cparam->minimum.custom_string, cparam->maximum.custom_string); break; } } } } } puts("\nSizes:"); for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++) printf(" %s = %gx%g, [%g %g %g %g]\n", size->name, size->width, size->length, size->left, size->bottom, size->right, size->top); puts("\nConstraints:"); for (i = ppd->num_consts, c = ppd->consts; i > 0; i --, c ++) printf(" *UIConstraints: *%s %s *%s %s\n", c->option1, c->choice1, c->option2, c->choice2); if (ppd->num_consts == 0) puts(" NO CONSTRAINTS"); puts("\nFilters:"); for (i = 0; i < ppd->num_filters; i ++) printf(" %s\n", ppd->filters[i]); if (ppd->num_filters == 0) puts(" NO FILTERS"); puts("\nAttributes:"); for (attr = (ppd_attr_t *)cupsArrayFirst(ppd->sorted_attrs); attr; attr = (ppd_attr_t *)cupsArrayNext(ppd->sorted_attrs)) printf(" *%s %s/%s: \"%s\"\n", attr->name, attr->spec, attr->text, attr->value ? attr->value : ""); puts("\nPPD Cache:"); if ((pc = _ppdCacheCreateWithPPD(ppd)) == NULL) printf(" Unable to create: %s\n", cupsLastErrorString()); else { _ppdCacheWriteFile(pc, "t.cache", NULL); puts(" Wrote t.cache."); } } if (!strncmp(argv[1], "-d", 2)) unlink(filename); } #ifdef __APPLE__ if (getenv("MallocStackLogging") && getenv("MallocStackLoggingNoCompact")) { char command[1024]; /* malloc_history command */ snprintf(command, sizeof(command), "malloc_history %d -all_by_size", getpid()); fflush(stdout); system(command); } #endif /* __APPLE__ */ ppdClose(ppd); return (status); } cups-2.2.7/cups/testpwg.c000664 000765 000024 00000033131 13255074424 015767 0ustar00msweetstaff000000 000000 /* * PWG unit test program for CUPS. * * Copyright 2009-2016 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "ppd-private.h" #include "file-private.h" /* * Local functions... */ static int test_pagesize(_ppd_cache_t *pc, ppd_file_t *ppd, const char *ppdsize); static int test_ppd_cache(_ppd_cache_t *pc, ppd_file_t *ppd); /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int status; /* Status of tests (0 = success, 1 = fail) */ const char *ppdfile; /* PPD filename */ ppd_file_t *ppd; /* PPD file */ _ppd_cache_t *pc; /* PPD cache and PWG mapping data */ const pwg_media_t *pwgmedia; /* PWG media size */ size_t i, /* Looping var */ num_media; /* Number of media sizes */ const pwg_media_t *mediatable; /* Media size table */ int dupmedia = 0; /* Duplicate media sizes? */ status = 0; if (argc < 2 || argc > 3) { puts("Usage: ./testpwg filename.ppd [jobfile]"); return (1); } ppdfile = argv[1]; printf("ppdOpenFile(%s): ", ppdfile); if ((ppd = ppdOpenFile(ppdfile)) == NULL) { ppd_status_t err; /* Last error in file */ int line; /* Line number in file */ err = ppdLastError(&line); printf("FAIL (%s on line %d)\n", ppdErrorString(err), line); return (1); } else puts("PASS"); fputs("_ppdCacheCreateWithPPD(ppd): ", stdout); if ((pc = _ppdCacheCreateWithPPD(ppd)) == NULL) { puts("FAIL"); status ++; } else { puts("PASS"); status += test_ppd_cache(pc, ppd); if (argc == 3) { /* * Test PageSize mapping code. */ int fd; /* Job file descriptor */ const char *pagesize; /* PageSize value */ ipp_t *job; /* Job attributes */ ipp_attribute_t *media; /* Media attribute */ if ((fd = open(argv[2], O_RDONLY)) >= 0) { job = ippNew(); ippReadFile(fd, job); close(fd); if ((media = ippFindAttribute(job, "media", IPP_TAG_ZERO)) != NULL && media->value_tag != IPP_TAG_NAME && media->value_tag != IPP_TAG_KEYWORD) media = NULL; if (media) printf("_ppdCacheGetPageSize(media=%s): ", media->values[0].string.text); else fputs("_ppdCacheGetPageSize(media-col): ", stdout); fflush(stdout); if ((pagesize = _ppdCacheGetPageSize(pc, job, NULL, NULL)) == NULL) { puts("FAIL (Not Found)"); status = 1; } else if (media && _cups_strcasecmp(pagesize, media->values[0].string.text)) { printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize, media->values[0].string.text); status = 1; } else printf("PASS (%s)\n", pagesize); ippDelete(job); } else { perror(argv[2]); status = 1; } } /* * _ppdCacheDestroy should never fail... */ fputs("_ppdCacheDestroy(pc): ", stdout); _ppdCacheDestroy(pc); puts("PASS"); } fputs("pwgMediaForPWG(\"iso_a4_210x297mm\"): ", stdout); if ((pwgmedia = pwgMediaForPWG("iso_a4_210x297mm")) == NULL) { puts("FAIL (not found)"); status ++; } else if (strcmp(pwgmedia->pwg, "iso_a4_210x297mm")) { printf("FAIL (%s)\n", pwgmedia->pwg); status ++; } else if (pwgmedia->width != 21000 || pwgmedia->length != 29700) { printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length); status ++; } else puts("PASS"); fputs("pwgMediaForPWG(\"roll_max_36.1025x3622.0472in\"): ", stdout); if ((pwgmedia = pwgMediaForPWG("roll_max_36.1025x3622.0472in")) == NULL) { puts("FAIL (not found)"); status ++; } else if (pwgmedia->width != 91700 || pwgmedia->length != 9199999) { printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length); status ++; } else printf("PASS (%dx%d)\n", pwgmedia->width, pwgmedia->length); fputs("pwgMediaForPWG(\"disc_test_10x100mm\"): ", stdout); if ((pwgmedia = pwgMediaForPWG("disc_test_10x100mm")) == NULL) { puts("FAIL (not found)"); status ++; } else if (pwgmedia->width != 10000 || pwgmedia->length != 10000) { printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length); status ++; } else printf("PASS (%dx%d)\n", pwgmedia->width, pwgmedia->length); fputs("pwgMediaForLegacy(\"na-letter\"): ", stdout); if ((pwgmedia = pwgMediaForLegacy("na-letter")) == NULL) { puts("FAIL (not found)"); status ++; } else if (strcmp(pwgmedia->pwg, "na_letter_8.5x11in")) { printf("FAIL (%s)\n", pwgmedia->pwg); status ++; } else if (pwgmedia->width != 21590 || pwgmedia->length != 27940) { printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length); status ++; } else puts("PASS"); fputs("pwgMediaForPPD(\"4x6\"): ", stdout); if ((pwgmedia = pwgMediaForPPD("4x6")) == NULL) { puts("FAIL (not found)"); status ++; } else if (strcmp(pwgmedia->pwg, "na_index-4x6_4x6in")) { printf("FAIL (%s)\n", pwgmedia->pwg); status ++; } else if (pwgmedia->width != 10160 || pwgmedia->length != 15240) { printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length); status ++; } else puts("PASS"); fputs("pwgMediaForPPD(\"10x15cm\"): ", stdout); if ((pwgmedia = pwgMediaForPPD("10x15cm")) == NULL) { puts("FAIL (not found)"); status ++; } else if (strcmp(pwgmedia->pwg, "om_100x150mm_100x150mm")) { printf("FAIL (%s)\n", pwgmedia->pwg); status ++; } else if (pwgmedia->width != 10000 || pwgmedia->length != 15000) { printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length); status ++; } else puts("PASS"); fputs("pwgMediaForPPD(\"Custom.10x15cm\"): ", stdout); if ((pwgmedia = pwgMediaForPPD("Custom.10x15cm")) == NULL) { puts("FAIL (not found)"); status ++; } else if (strcmp(pwgmedia->pwg, "custom_10x15cm_100x150mm")) { printf("FAIL (%s)\n", pwgmedia->pwg); status ++; } else if (pwgmedia->width != 10000 || pwgmedia->length != 15000) { printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length); status ++; } else puts("PASS"); fputs("pwgMediaForSize(29700, 42000): ", stdout); if ((pwgmedia = pwgMediaForSize(29700, 42000)) == NULL) { puts("FAIL (not found)"); status ++; } else if (strcmp(pwgmedia->pwg, "iso_a3_297x420mm")) { printf("FAIL (%s)\n", pwgmedia->pwg); status ++; } else puts("PASS"); fputs("pwgMediaForSize(9842, 19050): ", stdout); if ((pwgmedia = pwgMediaForSize(9842, 19050)) == NULL) { puts("FAIL (not found)"); status ++; } else if (strcmp(pwgmedia->pwg, "na_monarch_3.875x7.5in")) { printf("FAIL (%s)\n", pwgmedia->pwg); status ++; } else printf("PASS (%s)\n", pwgmedia->pwg); fputs("pwgMediaForSize(9800, 19000): ", stdout); if ((pwgmedia = pwgMediaForSize(9800, 19000)) == NULL) { puts("FAIL (not found)"); status ++; } else if (strcmp(pwgmedia->pwg, "jpn_you6_98x190mm")) { printf("FAIL (%s)\n", pwgmedia->pwg); status ++; } else printf("PASS (%s)\n", pwgmedia->pwg); fputs("Duplicate size test: ", stdout); for (mediatable = _pwgMediaTable(&num_media); num_media > 1; num_media --, mediatable ++) { for (i = num_media - 1, pwgmedia = mediatable + 1; i > 0; i --, pwgmedia ++) { if (pwgmedia->width == mediatable->width && pwgmedia->length == mediatable->length) { if (!dupmedia) { dupmedia = 1; status ++; puts("FAIL"); } printf(" %s and %s have the same dimensions (%dx%d)\n", pwgmedia->pwg, mediatable->pwg, pwgmedia->width, pwgmedia->length); } } } if (!dupmedia) puts("PASS"); return (status); } /* * 'test_pagesize()' - Test the PWG mapping functions. */ static int /* O - 1 on failure, 0 on success */ test_pagesize(_ppd_cache_t *pc, /* I - PWG mapping data */ ppd_file_t *ppd, /* I - PPD file */ const char *ppdsize) /* I - PPD page size */ { int status = 0; /* Return status */ ipp_t *job; /* Job attributes */ const char *pagesize; /* PageSize value */ if (ppdPageSize(ppd, ppdsize)) { printf("_ppdCacheGetPageSize(keyword=%s): ", ppdsize); fflush(stdout); if ((pagesize = _ppdCacheGetPageSize(pc, NULL, ppdsize, NULL)) == NULL) { puts("FAIL (Not Found)"); status = 1; } else if (_cups_strcasecmp(pagesize, ppdsize)) { printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize, ppdsize); status = 1; } else puts("PASS"); job = ippNew(); ippAddString(job, IPP_TAG_JOB, IPP_TAG_KEYWORD, "media", NULL, ppdsize); printf("_ppdCacheGetPageSize(media=%s): ", ppdsize); fflush(stdout); if ((pagesize = _ppdCacheGetPageSize(pc, job, NULL, NULL)) == NULL) { puts("FAIL (Not Found)"); status = 1; } else if (_cups_strcasecmp(pagesize, ppdsize)) { printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize, ppdsize); status = 1; } else puts("PASS"); ippDelete(job); } return (status); } /* * 'test_ppd_cache()' - Test the PPD cache functions. */ static int /* O - 1 on failure, 0 on success */ test_ppd_cache(_ppd_cache_t *pc, /* I - PWG mapping data */ ppd_file_t *ppd) /* I - PPD file */ { int i, /* Looping var */ status = 0; /* Return status */ _ppd_cache_t *pc2; /* Loaded data */ pwg_size_t *size, /* Size from original */ *size2; /* Size from saved */ pwg_map_t *map, /* Map from original */ *map2; /* Map from saved */ /* * Verify that we can write and read back the same data... */ fputs("_ppdCacheWriteFile(test.pwg): ", stdout); if (!_ppdCacheWriteFile(pc, "test.pwg", NULL)) { puts("FAIL"); status ++; } else puts("PASS"); fputs("_ppdCacheCreateWithFile(test.pwg): ", stdout); if ((pc2 = _ppdCacheCreateWithFile("test.pwg", NULL)) == NULL) { puts("FAIL"); status ++; } else { // TODO: FINISH ADDING ALL VALUES IN STRUCTURE if (pc2->num_sizes != pc->num_sizes) { if (!status) puts("FAIL"); printf(" SAVED num_sizes=%d, ORIG num_sizes=%d\n", pc2->num_sizes, pc->num_sizes); status ++; } else { for (i = pc->num_sizes, size = pc->sizes, size2 = pc2->sizes; i > 0; i --, size ++, size2 ++) { if (strcmp(size2->map.pwg, size->map.pwg) || strcmp(size2->map.ppd, size->map.ppd) || size2->width != size->width || size2->length != size->length || size2->left != size->left || size2->bottom != size->bottom || size2->right != size->right || size2->top != size->top) { if (!status) puts("FAIL"); if (strcmp(size->map.pwg, size2->map.pwg)) printf(" SAVED size->map.pwg=\"%s\", ORIG " "size->map.pwg=\"%s\"\n", size2->map.pwg, size->map.pwg); if (strcmp(size2->map.ppd, size->map.ppd)) printf(" SAVED size->map.ppd=\"%s\", ORIG " "size->map.ppd=\"%s\"\n", size2->map.ppd, size->map.ppd); if (size2->width != size->width) printf(" SAVED size->width=%d, ORIG size->width=%d\n", size2->width, size->width); if (size2->length != size->length) printf(" SAVED size->length=%d, ORIG size->length=%d\n", size2->length, size->length); if (size2->left != size->left) printf(" SAVED size->left=%d, ORIG size->left=%d\n", size2->left, size->left); if (size2->bottom != size->bottom) printf(" SAVED size->bottom=%d, ORIG size->bottom=%d\n", size2->bottom, size->bottom); if (size2->right != size->right) printf(" SAVED size->right=%d, ORIG size->right=%d\n", size2->right, size->right); if (size2->top != size->top) printf(" SAVED size->top=%d, ORIG size->top=%d\n", size2->top, size->top); status ++; break; } } for (i = pc->num_sources, map = pc->sources, map2 = pc2->sources; i > 0; i --, map ++, map2 ++) { if (strcmp(map2->pwg, map->pwg) || strcmp(map2->ppd, map->ppd)) { if (!status) puts("FAIL"); if (strcmp(map->pwg, map2->pwg)) printf(" SAVED source->pwg=\"%s\", ORIG source->pwg=\"%s\"\n", map2->pwg, map->pwg); if (strcmp(map2->ppd, map->ppd)) printf(" SAVED source->ppd=\"%s\", ORIG source->ppd=\"%s\"\n", map2->ppd, map->ppd); status ++; break; } } for (i = pc->num_types, map = pc->types, map2 = pc2->types; i > 0; i --, map ++, map2 ++) { if (strcmp(map2->pwg, map->pwg) || strcmp(map2->ppd, map->ppd)) { if (!status) puts("FAIL"); if (strcmp(map->pwg, map2->pwg)) printf(" SAVED type->pwg=\"%s\", ORIG type->pwg=\"%s\"\n", map2->pwg, map->pwg); if (strcmp(map2->ppd, map->ppd)) printf(" SAVED type->ppd=\"%s\", ORIG type->ppd=\"%s\"\n", map2->ppd, map->ppd); status ++; break; } } } if (!status) puts("PASS"); _ppdCacheDestroy(pc2); } /* * Test PageSize mapping code... */ status += test_pagesize(pc, ppd, "Letter"); status += test_pagesize(pc, ppd, "na-letter"); status += test_pagesize(pc, ppd, "A4"); status += test_pagesize(pc, ppd, "iso-a4"); return (status); } cups-2.2.7/cups/testsnmp.c000664 000765 000024 00000014754 13255074424 016161 0ustar00msweetstaff000000 000000 /* * SNMP test program for CUPS. * * Copyright 2008-2014 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include "snmp-private.h" /* * Local functions... */ static void print_packet(cups_snmp_t *packet, void *data); static int show_oid(int fd, const char *community, http_addr_t *addr, const char *s, int walk); static void usage(void) __attribute__((noreturn)); /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ int fd = -1; /* SNMP socket */ http_addrlist_t *host = NULL; /* Address of host */ int walk = 0; /* Walk OIDs? */ char *oid = NULL; /* Last OID shown */ const char *community; /* Community name */ fputs("_cupsSNMPDefaultCommunity: ", stdout); if ((community = _cupsSNMPDefaultCommunity()) == NULL) { puts("FAIL (NULL community name)"); return (1); } printf("PASS (%s)\n", community); /* * Query OIDs from the command-line... */ for (i = 1; i < argc; i ++) if (!strcmp(argv[i], "-c")) { i ++; if (i >= argc) usage(); else community = argv[i]; } else if (!strcmp(argv[i], "-d")) _cupsSNMPSetDebug(10); else if (!strcmp(argv[i], "-w")) walk = 1; else if (!host) { if ((host = httpAddrGetList(argv[i], AF_UNSPEC, "161")) == NULL) { printf("testsnmp: Unable to find \"%s\"!\n", argv[1]); return (1); } if (fd < 0) { fputs("_cupsSNMPOpen: ", stdout); if ((fd = _cupsSNMPOpen(host->addr.addr.sa_family)) < 0) { printf("FAIL (%s)\n", strerror(errno)); return (1); } puts("PASS"); } } else if (!show_oid(fd, community, &(host->addr), argv[i], walk)) return (1); else oid = argv[i]; if (!host) usage(); if (!oid) { if (!show_oid(fd, community, &(host->addr), walk ? ".1.3.6.1.2.1.43" : ".1.3.6.1.2.1.43.10.2.1.4.1.1", walk)) return (1); } return (0); } /* * 'print_packet()' - Print the contents of the response packet. */ static void print_packet(cups_snmp_t *packet, /* I - SNMP response packet */ void *data) /* I - User data pointer (not used) */ { unsigned i; /* Looping var */ char temp[1024]; /* Temporary OID string */ (void)data; printf("%s = ", _cupsSNMPOIDToString(packet->object_name, temp, sizeof(temp))); switch (packet->object_type) { case CUPS_ASN1_BOOLEAN : printf("BOOLEAN %s\n", packet->object_value.boolean ? "TRUE" : "FALSE"); break; case CUPS_ASN1_INTEGER : printf("INTEGER %d\n", packet->object_value.integer); break; case CUPS_ASN1_BIT_STRING : printf("BIT-STRING \"%s\"\n", (char *)packet->object_value.string.bytes); break; case CUPS_ASN1_OCTET_STRING : printf("OCTET-STRING \"%s\"\n", (char *)packet->object_value.string.bytes); break; case CUPS_ASN1_NULL_VALUE : puts("NULL-VALUE"); break; case CUPS_ASN1_OID : printf("OID %s\n", _cupsSNMPOIDToString(packet->object_value.oid, temp, sizeof(temp))); break; case CUPS_ASN1_HEX_STRING : fputs("Hex-STRING", stdout); for (i = 0; i < packet->object_value.string.num_bytes; i ++) printf(" %02X", packet->object_value.string.bytes[i]); putchar('\n'); break; case CUPS_ASN1_COUNTER : printf("Counter %d\n", packet->object_value.counter); break; case CUPS_ASN1_GAUGE : printf("Gauge %u\n", packet->object_value.gauge); break; case CUPS_ASN1_TIMETICKS : printf("Timeticks %u days, %u:%02u:%02u.%02u\n", packet->object_value.timeticks / 8640000, (packet->object_value.timeticks / 360000) % 24, (packet->object_value.timeticks / 6000) % 60, (packet->object_value.timeticks / 100) % 60, packet->object_value.timeticks % 100); break; default : printf("Unknown-%X\n", packet->object_type); break; } } /* * 'show_oid()' - Show the specified OID. */ static int /* O - 1 on success, 0 on error */ show_oid(int fd, /* I - SNMP socket */ const char *community, /* I - Community name */ http_addr_t *addr, /* I - Address to query */ const char *s, /* I - OID to query */ int walk) /* I - Walk OIDs? */ { int i; /* Looping var */ int oid[CUPS_SNMP_MAX_OID]; /* OID */ cups_snmp_t packet; /* SNMP packet */ char temp[1024]; /* Temporary OID string */ if (!_cupsSNMPStringToOID(s, oid, sizeof(oid) / sizeof(oid[0]))) { puts("testsnmp: Bad OID"); return (0); } if (walk) { printf("_cupsSNMPWalk(%s): ", _cupsSNMPOIDToString(oid, temp, sizeof(temp))); if (_cupsSNMPWalk(fd, addr, CUPS_SNMP_VERSION_1, community, oid, 5.0, print_packet, NULL) < 0) { printf("FAIL (%s)\n", strerror(errno)); return (0); } } else { printf("_cupsSNMPWrite(%s): ", _cupsSNMPOIDToString(oid, temp, sizeof(temp))); if (!_cupsSNMPWrite(fd, addr, CUPS_SNMP_VERSION_1, community, CUPS_ASN1_GET_REQUEST, 1, oid)) { printf("FAIL (%s)\n", strerror(errno)); return (0); } puts("PASS"); fputs("_cupsSNMPRead(5.0): ", stdout); if (!_cupsSNMPRead(fd, &packet, 5.0)) { puts("FAIL (timeout)"); return (0); } if (!_cupsSNMPIsOID(&packet, oid)) { printf("FAIL (bad OID %d", packet.object_name[0]); for (i = 1; packet.object_name[i] >= 0; i ++) printf(".%d", packet.object_name[i]); puts(")"); return (0); } if (packet.error) { printf("FAIL (%s)\n", packet.error); return (0); } puts("PASS"); print_packet(&packet, NULL); } return (1); } /* * 'usage()' - Show program usage and exit. */ static void usage(void) { puts("Usage: testsnmp [options] host-or-ip [oid ...]"); puts(""); puts("Options:"); puts(""); puts(" -c community Set community name"); puts(" -d Enable debugging"); puts(" -w Walk all OIDs under the specified one"); exit (1); } cups-2.2.7/cups/thread-private.h000664 000765 000024 00000007033 13255074424 017220 0ustar00msweetstaff000000 000000 /* * Private threading definitions for CUPS. * * Copyright 2009-2017 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_THREAD_PRIVATE_H_ # define _CUPS_THREAD_PRIVATE_H_ /* * Include necessary headers... */ # include "config.h" /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ # ifdef HAVE_PTHREAD_H /* POSIX threading */ # include typedef void *(*_cups_thread_func_t)(void *arg); typedef pthread_t _cups_thread_t; typedef pthread_cond_t _cups_cond_t; typedef pthread_mutex_t _cups_mutex_t; typedef pthread_rwlock_t _cups_rwlock_t; typedef pthread_key_t _cups_threadkey_t; # define _CUPS_COND_INITIALIZER PTHREAD_COND_INITIALIZER # define _CUPS_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER # define _CUPS_RWLOCK_INITIALIZER PTHREAD_RWLOCK_INITIALIZER # define _CUPS_THREADKEY_INITIALIZER 0 # define _cupsThreadGetData(k) pthread_getspecific(k) # define _cupsThreadSetData(k,p) pthread_setspecific(k,p) # elif defined(WIN32) /* Windows threading */ # include # include typedef void *(__stdcall *_cups_thread_func_t)(void *arg); typedef int _cups_thread_t; typedef char _cups_cond_t; /* TODO: Implement Win32 conditional */ typedef struct _cups_mutex_s { int m_init; /* Flag for on-demand initialization */ CRITICAL_SECTION m_criticalSection; /* Win32 Critical Section */ } _cups_mutex_t; typedef _cups_mutex_t _cups_rwlock_t; /* TODO: Implement Win32 reader/writer lock */ typedef DWORD _cups_threadkey_t; # define _CUPS_COND_INITIALIZER 0 # define _CUPS_MUTEX_INITIALIZER { 0, 0 } # define _CUPS_RWLOCK_INITIALIZER { 0, 0 } # define _CUPS_THREADKEY_INITIALIZER 0 # define _cupsThreadGetData(k) TlsGetValue(k) # define _cupsThreadSetData(k,p) TlsSetValue(k,p) # else /* No threading */ typedef void *(*_cups_thread_func_t)(void *arg); typedef int _cups_thread_t; typedef char _cups_cond_t; typedef char _cups_mutex_t; typedef char _cups_rwlock_t; typedef void *_cups_threadkey_t; # define _CUPS_COND_INITIALIZER 0 # define _CUPS_MUTEX_INITIALIZER 0 # define _CUPS_RWLOCK_INITIALIZER 0 # define _CUPS_THREADKEY_INITIALIZER (void *)0 # define _cupsThreadGetData(k) k # define _cupsThreadSetData(k,p) k=p # endif /* HAVE_PTHREAD_H */ /* * Functions... */ extern void _cupsCondBroadcast(_cups_cond_t *cond); extern void _cupsCondInit(_cups_cond_t *cond); extern void _cupsCondWait(_cups_cond_t *cond, _cups_mutex_t *mutex, double timeout); extern void _cupsMutexInit(_cups_mutex_t *mutex); extern void _cupsMutexLock(_cups_mutex_t *mutex); extern void _cupsMutexUnlock(_cups_mutex_t *mutex); extern void _cupsRWInit(_cups_rwlock_t *rwlock); extern void _cupsRWLockRead(_cups_rwlock_t *rwlock); extern void _cupsRWLockWrite(_cups_rwlock_t *rwlock); extern void _cupsRWUnlock(_cups_rwlock_t *rwlock); extern void _cupsThreadCancel(_cups_thread_t thread); extern _cups_thread_t _cupsThreadCreate(_cups_thread_func_t func, void *arg); extern void _cupsThreadDetach(_cups_thread_t thread); extern void *_cupsThreadWait(_cups_thread_t thread); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_THREAD_PRIVATE_H_ */ cups-2.2.7/cups/thread.c000664 000765 000024 00000022306 13255074424 015543 0ustar00msweetstaff000000 000000 /* * Threading primitives for CUPS. * * Copyright © 2009-2018 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include "thread-private.h" #if defined(HAVE_PTHREAD_H) /* * '_cupsCondBroadcast()' - Wake up waiting threads. */ void _cupsCondBroadcast(_cups_cond_t *cond) /* I - Condition */ { pthread_cond_broadcast(cond); } /* * '_cupsCondInit()' - Initialize a condition variable. */ void _cupsCondInit(_cups_cond_t *cond) /* I - Condition */ { pthread_cond_init(cond, NULL); } /* * '_cupsCondWait()' - Wait for a condition with optional timeout. */ void _cupsCondWait(_cups_cond_t *cond, /* I - Condition */ _cups_mutex_t *mutex, /* I - Mutex */ double timeout) /* I - Timeout in seconds (0 or negative for none) */ { if (timeout > 0.0) { struct timespec abstime; /* Timeout */ clock_gettime(CLOCK_REALTIME, &abstime); abstime.tv_sec += (long)timeout; abstime.tv_nsec += (long)(1000000000 * (timeout - (long)timeout)); while (abstime.tv_nsec >= 1000000000) { abstime.tv_nsec -= 1000000000; abstime.tv_sec ++; }; pthread_cond_timedwait(cond, mutex, &abstime); } else pthread_cond_wait(cond, mutex); } /* * '_cupsMutexInit()' - Initialize a mutex. */ void _cupsMutexInit(_cups_mutex_t *mutex) /* I - Mutex */ { pthread_mutex_init(mutex, NULL); } /* * '_cupsMutexLock()' - Lock a mutex. */ void _cupsMutexLock(_cups_mutex_t *mutex) /* I - Mutex */ { pthread_mutex_lock(mutex); } /* * '_cupsMutexUnlock()' - Unlock a mutex. */ void _cupsMutexUnlock(_cups_mutex_t *mutex) /* I - Mutex */ { pthread_mutex_unlock(mutex); } /* * '_cupsRWInit()' - Initialize a reader/writer lock. */ void _cupsRWInit(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */ { pthread_rwlock_init(rwlock, NULL); } /* * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading. */ void _cupsRWLockRead(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */ { pthread_rwlock_rdlock(rwlock); } /* * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing. */ void _cupsRWLockWrite(_cups_rwlock_t *rwlock)/* I - Reader/writer lock */ { pthread_rwlock_wrlock(rwlock); } /* * '_cupsRWUnlock()' - Release a reader/writer lock. */ void _cupsRWUnlock(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */ { pthread_rwlock_unlock(rwlock); } /* * '_cupsThreadCancel()' - Cancel (kill) a thread. */ void _cupsThreadCancel(_cups_thread_t thread)/* I - Thread ID */ { pthread_cancel(thread); } /* * '_cupsThreadCreate()' - Create a thread. */ _cups_thread_t /* O - Thread ID */ _cupsThreadCreate( _cups_thread_func_t func, /* I - Entry point */ void *arg) /* I - Entry point context */ { pthread_t thread; if (pthread_create(&thread, NULL, (void *(*)(void *))func, arg)) return (0); else return (thread); } /* * '_cupsThreadDetach()' - Tell the OS that the thread is running independently. */ void _cupsThreadDetach(_cups_thread_t thread)/* I - Thread ID */ { pthread_detach(thread); } /* * '_cupsThreadWait()' - Wait for a thread to exit. */ void * /* O - Return value */ _cupsThreadWait(_cups_thread_t thread) /* I - Thread ID */ { void *ret; /* Return value */ if (pthread_join(thread, &ret)) return (NULL); else return (ret); } #elif defined(WIN32) # include /* * '_cupsCondBroadcast()' - Wake up waiting threads. */ void _cupsCondBroadcast(_cups_cond_t *cond) /* I - Condition */ { // TODO: Implement me } /* * '_cupsCondInit()' - Initialize a condition variable. */ void _cupsCondInit(_cups_cond_t *cond) /* I - Condition */ { // TODO: Implement me } /* * '_cupsCondWait()' - Wait for a condition with optional timeout. */ void _cupsCondWait(_cups_cond_t *cond, /* I - Condition */ _cups_mutex_t *mutex, /* I - Mutex */ double timeout) /* I - Timeout in seconds (0 or negative for none) */ { // TODO: Implement me } /* * '_cupsMutexInit()' - Initialize a mutex. */ void _cupsMutexInit(_cups_mutex_t *mutex) /* I - Mutex */ { InitializeCriticalSection(&mutex->m_criticalSection); mutex->m_init = 1; } /* * '_cupsMutexLock()' - Lock a mutex. */ void _cupsMutexLock(_cups_mutex_t *mutex) /* I - Mutex */ { if (!mutex->m_init) { _cupsGlobalLock(); if (!mutex->m_init) { InitializeCriticalSection(&mutex->m_criticalSection); mutex->m_init = 1; } _cupsGlobalUnlock(); } EnterCriticalSection(&mutex->m_criticalSection); } /* * '_cupsMutexUnlock()' - Unlock a mutex. */ void _cupsMutexUnlock(_cups_mutex_t *mutex) /* I - Mutex */ { LeaveCriticalSection(&mutex->m_criticalSection); } /* * '_cupsRWInit()' - Initialize a reader/writer lock. */ void _cupsRWInit(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */ { _cupsMutexInit((_cups_mutex_t *)rwlock); } /* * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading. */ void _cupsRWLockRead(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */ { _cupsMutexLock((_cups_mutex_t *)rwlock); } /* * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing. */ void _cupsRWLockWrite(_cups_rwlock_t *rwlock)/* I - Reader/writer lock */ { _cupsMutexLock((_cups_mutex_t *)rwlock); } /* * '_cupsRWUnlock()' - Release a reader/writer lock. */ void _cupsRWUnlock(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */ { _cupsMutexUnlock((_cups_mutex_t *)rwlock); } /* * '_cupsThreadCancel()' - Cancel (kill) a thread. */ void _cupsThreadCancel(_cups_thread_t thread)/* I - Thread ID */ { // TODO: Implement me } /* * '_cupsThreadCreate()' - Create a thread. */ _cups_thread_t /* O - Thread ID */ _cupsThreadCreate( _cups_thread_func_t func, /* I - Entry point */ void *arg) /* I - Entry point context */ { return (_beginthreadex(NULL, 0, (LPTHREAD_START_ROUTINE)func, arg, 0, NULL)); } /* * '_cupsThreadDetach()' - Tell the OS that the thread is running independently. */ void _cupsThreadDetach(_cups_thread_t thread)/* I - Thread ID */ { // TODO: Implement me (void)thread; } /* * '_cupsThreadWait()' - Wait for a thread to exit. */ void * /* O - Return value */ _cupsThreadWait(_cups_thread_t thread) /* I - Thread ID */ { // TODO: Implement me (void)thread; return (NULL); } #else /* No threading */ /* * '_cupsCondBroadcast()' - Wake up waiting threads. */ void _cupsCondBroadcast(_cups_cond_t *cond) /* I - Condition */ { // TODO: Implement me } /* * '_cupsCondInit()' - Initialize a condition variable. */ void _cupsCondInit(_cups_cond_t *cond) /* I - Condition */ { // TODO: Implement me } /* * '_cupsCondWait()' - Wait for a condition with optional timeout. */ void _cupsCondWait(_cups_cond_t *cond, /* I - Condition */ _cups_mutex_t *mutex, /* I - Mutex */ double timeout) /* I - Timeout in seconds (0 or negative for none) */ { // TODO: Implement me } /* * '_cupsMutexInit()' - Initialize a mutex. */ void _cupsMutexInit(_cups_mutex_t *mutex) /* I - Mutex */ { (void)mutex; } /* * '_cupsMutexLock()' - Lock a mutex. */ void _cupsMutexLock(_cups_mutex_t *mutex) /* I - Mutex */ { (void)mutex; } /* * '_cupsMutexUnlock()' - Unlock a mutex. */ void _cupsMutexUnlock(_cups_mutex_t *mutex) /* I - Mutex */ { (void)mutex; } /* * '_cupsRWInit()' - Initialize a reader/writer lock. */ void _cupsRWInit(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */ { (void)rwlock; } /* * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading. */ void _cupsRWLockRead(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */ { (void)rwlock; } /* * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing. */ void _cupsRWLockWrite(_cups_rwlock_t *rwlock)/* I - Reader/writer lock */ { (void)rwlock; } /* * '_cupsRWUnlock()' - Release a reader/writer lock. */ void _cupsRWUnlock(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */ { (void)rwlock; } /* * '_cupsThreadCancel()' - Cancel (kill) a thread. */ void _cupsThreadCancel(_cups_thread_t thread)/* I - Thread ID */ { (void)thread; } /* * '_cupsThreadCreate()' - Create a thread. */ _cups_thread_t /* O - Thread ID */ _cupsThreadCreate( _cups_thread_func_t func, /* I - Entry point */ void *arg) /* I - Entry point context */ { fputs("DEBUG: CUPS was compiled without threading support, no thread created.\n", stderr); (void)func; (void)arg; return (0); } /* * '_cupsThreadDetach()' - Tell the OS that the thread is running independently. */ void _cupsThreadDetach(_cups_thread_t thread)/* I - Thread ID */ { (void)thread; } /* * '_cupsThreadWait()' - Wait for a thread to exit. */ void * /* O - Return value */ _cupsThreadWait(_cups_thread_t thread) /* I - Thread ID */ { (void)thread; return (NULL); } #endif /* HAVE_PTHREAD_H */ cups-2.2.7/cups/tls-darwin.c000664 000765 000024 00000173344 13255074424 016371 0ustar00msweetstaff000000 000000 /* * TLS support code for CUPS on macOS. * * Copyright © 2007-2018 by Apple Inc. * Copyright © 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /**** This file is included from tls.c ****/ /* * Include necessary headers... */ #include extern char **environ; /* @private@ */ /* * Constants, very secure stuff... */ #define _CUPS_CDSA_PASSWORD "42" /* CUPS keychain password */ #define _CUPS_CDSA_PASSLEN 2 /* Length of keychain password */ /* * Local globals... */ static int tls_auto_create = 0; /* Auto-create self-signed certs? */ static char *tls_common_name = NULL; /* Default common name */ #ifdef HAVE_SECKEYCHAINOPEN static int tls_cups_keychain = 0; /* Opened the CUPS keychain? */ static SecKeychainRef tls_keychain = NULL; /* Server cert keychain */ #else static SecIdentityRef tls_selfsigned = NULL; /* Temporary self-signed cert */ #endif /* HAVE_SECKEYCHAINOPEN */ static char *tls_keypath = NULL; /* Server cert keychain path */ static _cups_mutex_t tls_mutex = _CUPS_MUTEX_INITIALIZER; /* Mutex for keychain/certs */ static int tls_options = -1,/* Options for TLS connections */ tls_min_version = _HTTP_TLS_1_0, tls_max_version = _HTTP_TLS_MAX; /* * Local functions... */ static CFArrayRef http_cdsa_copy_server(const char *common_name); static SecCertificateRef http_cdsa_create_credential(http_credential_t *credential); #ifdef HAVE_SECKEYCHAINOPEN static const char *http_cdsa_default_path(char *buffer, size_t bufsize); static SecKeychainRef http_cdsa_open_keychain(const char *path, char *filename, size_t filesize); static SecKeychainRef http_cdsa_open_system_keychain(void); #endif /* HAVE_SECKEYCHAINOPEN */ static OSStatus http_cdsa_read(SSLConnectionRef connection, void *data, size_t *dataLength); static int http_cdsa_set_credentials(http_t *http); static OSStatus http_cdsa_write(SSLConnectionRef connection, const void *data, size_t *dataLength); /* * 'cupsMakeServerCredentials()' - Make a self-signed certificate and private key pair. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 1 on success, 0 on failure */ cupsMakeServerCredentials( const char *path, /* I - Keychain path or @code NULL@ for default */ const char *common_name, /* I - Common name */ int num_alt_names, /* I - Number of subject alternate names */ const char **alt_names, /* I - Subject Alternate Names */ time_t expiration_date) /* I - Expiration date */ { #if defined(HAVE_SECGENERATESELFSIGNEDCERTIFICATE) int status = 0; /* Return status */ OSStatus err; /* Error code (if any) */ CFStringRef cfcommon_name = NULL; /* CF string for server name */ SecIdentityRef ident = NULL; /* Identity */ SecKeyRef publicKey = NULL, /* Public key */ privateKey = NULL; /* Private key */ SecCertificateRef cert = NULL; /* Self-signed certificate */ CFMutableDictionaryRef keyParams = NULL; /* Key generation parameters */ DEBUG_printf(("cupsMakeServerCredentials(path=\"%s\", common_name=\"%s\", num_alt_names=%d, alt_names=%p, expiration_date=%d)", path, common_name, num_alt_names, alt_names, (int)expiration_date)); (void)path; (void)num_alt_names; (void)alt_names; (void)expiration_date; if (path) { DEBUG_puts("1cupsMakeServerCredentials: No keychain support compiled in, returning 0."); return (0); } if (tls_selfsigned) { DEBUG_puts("1cupsMakeServerCredentials: Using existing self-signed cert."); return (1); } cfcommon_name = CFStringCreateWithCString(kCFAllocatorDefault, common_name, kCFStringEncodingUTF8); if (!cfcommon_name) { DEBUG_puts("1cupsMakeServerCredentials: Unable to create CF string of common name."); goto cleanup; } /* * Create a public/private key pair... */ keyParams = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); if (!keyParams) { DEBUG_puts("1cupsMakeServerCredentials: Unable to create key parameters dictionary."); goto cleanup; } CFDictionaryAddValue(keyParams, kSecAttrKeyType, kSecAttrKeyTypeRSA); CFDictionaryAddValue(keyParams, kSecAttrKeySizeInBits, CFSTR("2048")); CFDictionaryAddValue(keyParams, kSecAttrLabel, cfcommon_name); err = SecKeyGeneratePair(keyParams, &publicKey, &privateKey); if (err != noErr) { DEBUG_printf(("1cupsMakeServerCredentials: Unable to generate key pair: %d.", (int)err)); goto cleanup; } /* * Create a self-signed certificate using the public/private key pair... */ CFIndex usageInt = kSecKeyUsageAll; CFNumberRef usage = CFNumberCreate(kCFAllocatorDefault, kCFNumberCFIndexType, &usageInt); CFIndex lenInt = 0; CFNumberRef len = CFNumberCreate(kCFAllocatorDefault, kCFNumberCFIndexType, &lenInt); CFTypeRef certKeys[] = { kSecCSRBasicContraintsPathLen, kSecSubjectAltName, kSecCertificateKeyUsage }; CFTypeRef certValues[] = { len, cfcommon_name, usage }; CFDictionaryRef certParams = CFDictionaryCreate(kCFAllocatorDefault, certKeys, certValues, sizeof(certKeys) / sizeof(certKeys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); CFRelease(usage); CFRelease(len); const void *ca_o[] = { kSecOidOrganization, CFSTR("") }; const void *ca_cn[] = { kSecOidCommonName, cfcommon_name }; CFArrayRef ca_o_dn = CFArrayCreate(kCFAllocatorDefault, ca_o, 2, NULL); CFArrayRef ca_cn_dn = CFArrayCreate(kCFAllocatorDefault, ca_cn, 2, NULL); const void *ca_dn_array[2]; ca_dn_array[0] = CFArrayCreate(kCFAllocatorDefault, (const void **)&ca_o_dn, 1, NULL); ca_dn_array[1] = CFArrayCreate(kCFAllocatorDefault, (const void **)&ca_cn_dn, 1, NULL); CFArrayRef subject = CFArrayCreate(kCFAllocatorDefault, ca_dn_array, 2, NULL); cert = SecGenerateSelfSignedCertificate(subject, certParams, publicKey, privateKey); CFRelease(subject); CFRelease(certParams); if (!cert) { DEBUG_puts("1cupsMakeServerCredentials: Unable to create self-signed certificate."); goto cleanup; } ident = SecIdentityCreate(kCFAllocatorDefault, cert, privateKey); if (ident) { _cupsMutexLock(&tls_mutex); if (tls_selfsigned) CFRelease(ident); else tls_selfsigned = ident; _cupsMutexLock(&tls_mutex); # if 0 /* Someday perhaps SecItemCopyMatching will work for identities, at which point */ CFTypeRef itemKeys[] = { kSecClass, kSecAttrLabel, kSecValueRef }; CFTypeRef itemValues[] = { kSecClassIdentity, cfcommon_name, ident }; CFDictionaryRef itemAttrs = CFDictionaryCreate(kCFAllocatorDefault, itemKeys, itemValues, sizeof(itemKeys) / sizeof(itemKeys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); err = SecItemAdd(itemAttrs, NULL); /* SecItemAdd consumes itemAttrs... */ CFRelease(ident); if (err != noErr) { DEBUG_printf(("1cupsMakeServerCredentials: Unable to add identity to keychain: %d.", (int)err)); goto cleanup; } # endif /* 0 */ status = 1; } else DEBUG_puts("1cupsMakeServerCredentials: Unable to create identity from cert and keys."); /* * Cleanup and return... */ cleanup: if (cfcommon_name) CFRelease(cfcommon_name); if (keyParams) CFRelease(keyParams); if (cert) CFRelease(cert); if (publicKey) CFRelease(publicKey); if (privateKey) CFRelease(privateKey); DEBUG_printf(("1cupsMakeServerCredentials: Returning %d.", status)); return (status); #else /* !HAVE_SECGENERATESELFSIGNEDCERTIFICATE */ int pid, /* Process ID of command */ status, /* Status of command */ i; /* Looping var */ char command[1024], /* Command */ *argv[5], /* Command-line arguments */ *envp[1000], /* Environment variables */ days[32], /* CERTTOOL_EXPIRATION_DAYS env var */ keychain[1024], /* Keychain argument */ infofile[1024], /* Type-in information for cert */ filename[1024]; /* Default keychain path */ cups_file_t *fp; /* Seed/info file */ DEBUG_printf(("cupsMakeServerCredentials(path=\"%s\", common_name=\"%s\", num_alt_names=%d, alt_names=%p, expiration_date=%d)", path, common_name, num_alt_names, (void *)alt_names, (int)expiration_date)); (void)num_alt_names; (void)alt_names; if (!path) path = http_cdsa_default_path(filename, sizeof(filename)); /* * Run the "certtool" command to generate a self-signed certificate... */ if (!cupsFileFind("certtool", getenv("PATH"), 1, command, sizeof(command))) return (-1); /* * Create a file with the certificate information fields... * * Note: This assumes that the default questions are asked by the certtool * command... */ if ((fp = cupsTempFile2(infofile, sizeof(infofile))) == NULL) return (-1); cupsFilePrintf(fp, "CUPS Self-Signed Certificate\n" /* Enter key and certificate label */ "r\n" /* Generate RSA key pair */ "2048\n" /* 2048 bit encryption key */ "y\n" /* OK (y = yes) */ "b\n" /* Usage (b=signing/encryption) */ "2\n" /* Sign with SHA256 */ "y\n" /* OK (y = yes) */ "%s\n" /* Common name */ "\n" /* Country (default) */ "\n" /* Organization (default) */ "\n" /* Organizational unit (default) */ "\n" /* State/Province (default) */ "\n" /* Email address */ "y\n", /* OK (y = yes) */ common_name); cupsFileClose(fp); snprintf(keychain, sizeof(keychain), "k=%s", path); argv[0] = "certtool"; argv[1] = "c"; argv[2] = keychain; argv[3] = NULL; snprintf(days, sizeof(days), "CERTTOOL_EXPIRATION_DAYS=%d", (int)((expiration_date - time(NULL) + 86399) / 86400)); envp[0] = days; for (i = 0; i < (int)(sizeof(envp) / sizeof(envp[0]) - 2) && environ[i]; i ++) envp[i + 1] = environ[i]; envp[i] = NULL; posix_spawn_file_actions_t actions; /* File actions */ posix_spawn_file_actions_init(&actions); posix_spawn_file_actions_addclose(&actions, 0); posix_spawn_file_actions_addopen(&actions, 0, infofile, O_RDONLY, 0); posix_spawn_file_actions_addclose(&actions, 1); posix_spawn_file_actions_addopen(&actions, 1, "/dev/null", O_WRONLY, 0); posix_spawn_file_actions_addclose(&actions, 2); posix_spawn_file_actions_addopen(&actions, 2, "/dev/null", O_WRONLY, 0); if (posix_spawn(&pid, command, &actions, NULL, argv, envp)) { unlink(infofile); return (-1); } posix_spawn_file_actions_destroy(&actions); unlink(infofile); while (waitpid(pid, &status, 0) < 0) if (errno != EINTR) { status = -1; break; } return (!status); #endif /* HAVE_SECGENERATESELFSIGNEDCERTIFICATE && HAVE_SECKEYCHAINOPEN */ } /* * 'cupsSetServerCredentials()' - Set the default server credentials. * * Note: The server credentials are used by all threads in the running process. * This function is threadsafe. * * @since CUPS 2.0/macOS 10.10@ */ int /* O - 1 on success, 0 on failure */ cupsSetServerCredentials( const char *path, /* I - Keychain path or @code NULL@ for default */ const char *common_name, /* I - Default common name for server */ int auto_create) /* I - 1 = automatically create self-signed certificates */ { DEBUG_printf(("cupsSetServerCredentials(path=\"%s\", common_name=\"%s\", auto_create=%d)", path, common_name, auto_create)); #ifdef HAVE_SECKEYCHAINOPEN char filename[1024]; /* Keychain filename */ SecKeychainRef keychain = http_cdsa_open_keychain(path, filename, sizeof(filename)); if (!keychain) { DEBUG_puts("1cupsSetServerCredentials: Unable to open keychain."); return (0); } _cupsMutexLock(&tls_mutex); /* * Close any keychain that is currently open... */ if (tls_keychain) CFRelease(tls_keychain); if (tls_keypath) _cupsStrFree(tls_keypath); if (tls_common_name) _cupsStrFree(tls_common_name); /* * Save the new keychain... */ tls_keychain = keychain; tls_keypath = _cupsStrAlloc(filename); tls_auto_create = auto_create; tls_common_name = _cupsStrAlloc(common_name); _cupsMutexUnlock(&tls_mutex); DEBUG_puts("1cupsSetServerCredentials: Opened keychain, returning 1."); return (1); #else if (path) { DEBUG_puts("1cupsSetServerCredentials: No keychain support compiled in, returning 0."); return (0); } tls_auto_create = auto_create; tls_common_name = _cupsStrAlloc(common_name); return (1); #endif /* HAVE_SECKEYCHAINOPEN */ } /* * 'httpCopyCredentials()' - Copy the credentials associated with the peer in * an encrypted connection. * * @since CUPS 1.5/macOS 10.7@ */ int /* O - Status of call (0 = success) */ httpCopyCredentials( http_t *http, /* I - Connection to server */ cups_array_t **credentials) /* O - Array of credentials */ { OSStatus error; /* Error code */ SecTrustRef peerTrust; /* Peer trust reference */ CFIndex count; /* Number of credentials */ SecCertificateRef secCert; /* Certificate reference */ CFDataRef data; /* Certificate data */ int i; /* Looping var */ DEBUG_printf(("httpCopyCredentials(http=%p, credentials=%p)", (void *)http, (void *)credentials)); if (credentials) *credentials = NULL; if (!http || !http->tls || !credentials) return (-1); if (!(error = SSLCopyPeerTrust(http->tls, &peerTrust)) && peerTrust) { DEBUG_printf(("2httpCopyCredentials: Peer provided %d certificates.", (int)SecTrustGetCertificateCount(peerTrust))); if ((*credentials = cupsArrayNew(NULL, NULL)) != NULL) { count = SecTrustGetCertificateCount(peerTrust); for (i = 0; i < count; i ++) { secCert = SecTrustGetCertificateAtIndex(peerTrust, i); #ifdef DEBUG CFStringRef cf_name = SecCertificateCopySubjectSummary(secCert); char name[1024]; if (cf_name) CFStringGetCString(cf_name, name, sizeof(name), kCFStringEncodingUTF8); else strlcpy(name, "unknown", sizeof(name)); DEBUG_printf(("2httpCopyCredentials: Certificate %d name is \"%s\".", i, name)); #endif /* DEBUG */ if ((data = SecCertificateCopyData(secCert)) != NULL) { DEBUG_printf(("2httpCopyCredentials: Adding %d byte certificate blob.", (int)CFDataGetLength(data))); httpAddCredential(*credentials, CFDataGetBytePtr(data), (size_t)CFDataGetLength(data)); CFRelease(data); } } } CFRelease(peerTrust); } return (error); } /* * '_httpCreateCredentials()' - Create credentials in the internal format. */ http_tls_credentials_t /* O - Internal credentials */ _httpCreateCredentials( cups_array_t *credentials) /* I - Array of credentials */ { CFMutableArrayRef peerCerts; /* Peer credentials reference */ SecCertificateRef secCert; /* Certificate reference */ http_credential_t *credential; /* Credential data */ if (!credentials) return (NULL); if ((peerCerts = CFArrayCreateMutable(kCFAllocatorDefault, cupsArrayCount(credentials), &kCFTypeArrayCallBacks)) == NULL) return (NULL); for (credential = (http_credential_t *)cupsArrayFirst(credentials); credential; credential = (http_credential_t *)cupsArrayNext(credentials)) { if ((secCert = http_cdsa_create_credential(credential)) != NULL) { CFArrayAppendValue(peerCerts, secCert); CFRelease(secCert); } } return (peerCerts); } /* * 'httpCredentialsAreValidForName()' - Return whether the credentials are valid for the given name. * * @since CUPS 2.0/macOS 10.10@ */ int /* O - 1 if valid, 0 otherwise */ httpCredentialsAreValidForName( cups_array_t *credentials, /* I - Credentials */ const char *common_name) /* I - Name to check */ { SecCertificateRef secCert; /* Certificate reference */ CFStringRef cfcert_name = NULL; /* Certificate's common name (CF string) */ char cert_name[256]; /* Certificate's common name (C string) */ int valid = 1; /* Valid name? */ if ((secCert = http_cdsa_create_credential((http_credential_t *)cupsArrayFirst(credentials))) == NULL) return (0); /* * Compare the common names... */ if ((cfcert_name = SecCertificateCopySubjectSummary(secCert)) == NULL) { /* * Can't get common name, cannot be valid... */ valid = 0; } else if (CFStringGetCString(cfcert_name, cert_name, sizeof(cert_name), kCFStringEncodingUTF8) && _cups_strcasecmp(common_name, cert_name)) { /* * Not an exact match for the common name, check for wildcard certs... */ const char *domain = strchr(common_name, '.'); /* Domain in common name */ if (strncmp(cert_name, "*.", 2) || !domain || _cups_strcasecmp(domain, cert_name + 1)) { /* * Not a wildcard match. */ /* TODO: Check subject alternate names */ valid = 0; } } if (cfcert_name) CFRelease(cfcert_name); CFRelease(secCert); return (valid); } /* * 'httpCredentialsGetTrust()' - Return the trust of credentials. * * @since CUPS 2.0/macOS 10.10@ */ http_trust_t /* O - Level of trust */ httpCredentialsGetTrust( cups_array_t *credentials, /* I - Credentials */ const char *common_name) /* I - Common name for trust lookup */ { SecCertificateRef secCert; /* Certificate reference */ http_trust_t trust = HTTP_TRUST_OK; /* Trusted? */ cups_array_t *tcreds = NULL; /* Trusted credentials */ _cups_globals_t *cg = _cupsGlobals(); /* Per-thread globals */ if (!common_name) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No common name specified."), 1); return (HTTP_TRUST_UNKNOWN); } if ((secCert = http_cdsa_create_credential((http_credential_t *)cupsArrayFirst(credentials))) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to create credentials from array."), 1); return (HTTP_TRUST_UNKNOWN); } if (cg->any_root < 0) _cupsSetDefaults(); /* * Look this common name up in the default keychains... */ httpLoadCredentials(NULL, &tcreds, common_name); if (tcreds) { char credentials_str[1024], /* String for incoming credentials */ tcreds_str[1024]; /* String for saved credentials */ httpCredentialsString(credentials, credentials_str, sizeof(credentials_str)); httpCredentialsString(tcreds, tcreds_str, sizeof(tcreds_str)); if (strcmp(credentials_str, tcreds_str)) { /* * Credentials don't match, let's look at the expiration date of the new * credentials and allow if the new ones have a later expiration... */ if (!cg->trust_first) { /* * Do not trust certificates on first use... */ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Trust on first use is disabled."), 1); trust = HTTP_TRUST_INVALID; } else if (httpCredentialsGetExpiration(credentials) <= httpCredentialsGetExpiration(tcreds)) { /* * The new credentials are not newly issued... */ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("New credentials are older than stored credentials."), 1); trust = HTTP_TRUST_INVALID; } else if (!httpCredentialsAreValidForName(credentials, common_name)) { /* * The common name does not match the issued certificate... */ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("New credentials are not valid for name."), 1); trust = HTTP_TRUST_INVALID; } else if (httpCredentialsGetExpiration(tcreds) < time(NULL)) { /* * Save the renewed credentials... */ trust = HTTP_TRUST_RENEWED; httpSaveCredentials(NULL, credentials, common_name); } } httpFreeCredentials(tcreds); } else if (cg->validate_certs && !httpCredentialsAreValidForName(credentials, common_name)) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No stored credentials, not valid for name."), 1); trust = HTTP_TRUST_INVALID; } else if (!cg->trust_first) { /* * See if we have a site CA certificate we can compare... */ if (!httpLoadCredentials(NULL, &tcreds, "site")) { if (cupsArrayCount(credentials) != (cupsArrayCount(tcreds) + 1)) { /* * Certificate isn't directly generated from the CA cert... */ trust = HTTP_TRUST_INVALID; } else { /* * Do a tail comparison of the two certificates... */ http_credential_t *a, *b; /* Certificates */ for (a = (http_credential_t *)cupsArrayFirst(tcreds), b = (http_credential_t *)cupsArrayIndex(credentials, 1); a && b; a = (http_credential_t *)cupsArrayNext(tcreds), b = (http_credential_t *)cupsArrayNext(credentials)) if (a->datalen != b->datalen || memcmp(a->data, b->data, a->datalen)) break; if (a || b) trust = HTTP_TRUST_INVALID; } if (trust != HTTP_TRUST_OK) _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Credentials do not validate against site CA certificate."), 1); } else { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Trust on first use is disabled."), 1); trust = HTTP_TRUST_INVALID; } } if (trust == HTTP_TRUST_OK && !cg->expired_certs && !SecCertificateIsValid(secCert, CFAbsoluteTimeGetCurrent())) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Credentials have expired."), 1); trust = HTTP_TRUST_EXPIRED; } if (trust == HTTP_TRUST_OK && !cg->any_root && cupsArrayCount(credentials) == 1) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Self-signed credentials are blocked."), 1); trust = HTTP_TRUST_INVALID; } CFRelease(secCert); return (trust); } /* * 'httpCredentialsGetExpiration()' - Return the expiration date of the credentials. * * @since CUPS 2.0/macOS 10.10@ */ time_t /* O - Expiration date of credentials */ httpCredentialsGetExpiration( cups_array_t *credentials) /* I - Credentials */ { SecCertificateRef secCert; /* Certificate reference */ time_t expiration; /* Expiration date */ if ((secCert = http_cdsa_create_credential((http_credential_t *)cupsArrayFirst(credentials))) == NULL) return (0); expiration = (time_t)(SecCertificateNotValidAfter(secCert) + kCFAbsoluteTimeIntervalSince1970); CFRelease(secCert); return (expiration); } /* * 'httpCredentialsString()' - Return a string representing the credentials. * * @since CUPS 2.0/macOS 10.10@ */ size_t /* O - Total size of credentials string */ httpCredentialsString( cups_array_t *credentials, /* I - Credentials */ char *buffer, /* I - Buffer or @code NULL@ */ size_t bufsize) /* I - Size of buffer */ { http_credential_t *first; /* First certificate */ SecCertificateRef secCert; /* Certificate reference */ DEBUG_printf(("httpCredentialsString(credentials=%p, buffer=%p, bufsize=" CUPS_LLFMT ")", (void *)credentials, (void *)buffer, CUPS_LLCAST bufsize)); if (!buffer) return (0); if (buffer && bufsize > 0) *buffer = '\0'; if ((first = (http_credential_t *)cupsArrayFirst(credentials)) != NULL && (secCert = http_cdsa_create_credential(first)) != NULL) { CFStringRef cf_name; /* CF common name string */ char name[256]; /* Common name associated with cert */ time_t expiration; /* Expiration date of cert */ unsigned char md5_digest[16]; /* MD5 result */ if ((cf_name = SecCertificateCopySubjectSummary(secCert)) != NULL) { CFStringGetCString(cf_name, name, (CFIndex)sizeof(name), kCFStringEncodingUTF8); CFRelease(cf_name); } else strlcpy(name, "unknown", sizeof(name)); expiration = (time_t)(SecCertificateNotValidAfter(secCert) + kCFAbsoluteTimeIntervalSince1970); cupsHashData("md5", first->data, first->datalen, md5_digest, sizeof(md5_digest)); snprintf(buffer, bufsize, "%s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", name, httpGetDateString(expiration), md5_digest[0], md5_digest[1], md5_digest[2], md5_digest[3], md5_digest[4], md5_digest[5], md5_digest[6], md5_digest[7], md5_digest[8], md5_digest[9], md5_digest[10], md5_digest[11], md5_digest[12], md5_digest[13], md5_digest[14], md5_digest[15]); CFRelease(secCert); } DEBUG_printf(("1httpCredentialsString: Returning \"%s\".", buffer)); return (strlen(buffer)); } /* * '_httpFreeCredentials()' - Free internal credentials. */ void _httpFreeCredentials( http_tls_credentials_t credentials) /* I - Internal credentials */ { if (!credentials) return; CFRelease(credentials); } /* * 'httpLoadCredentials()' - Load X.509 credentials from a keychain file. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 0 on success, -1 on error */ httpLoadCredentials( const char *path, /* I - Keychain path or @code NULL@ for default */ cups_array_t **credentials, /* IO - Credentials */ const char *common_name) /* I - Common name for credentials */ { OSStatus err; /* Error info */ #ifdef HAVE_SECKEYCHAINOPEN char filename[1024]; /* Filename for keychain */ SecKeychainRef keychain = NULL,/* Keychain reference */ syschain = NULL;/* System keychain */ CFArrayRef list; /* Keychain list */ #endif /* HAVE_SECKEYCHAINOPEN */ SecCertificateRef cert = NULL; /* Certificate */ CFDataRef data; /* Certificate data */ SecPolicyRef policy = NULL; /* Policy ref */ CFStringRef cfcommon_name = NULL; /* Server name */ CFMutableDictionaryRef query = NULL; /* Query qualifiers */ DEBUG_printf(("httpLoadCredentials(path=\"%s\", credentials=%p, common_name=\"%s\")", path, (void *)credentials, common_name)); if (!credentials) return (-1); *credentials = NULL; #ifdef HAVE_SECKEYCHAINOPEN keychain = http_cdsa_open_keychain(path, filename, sizeof(filename)); if (!keychain) goto cleanup; syschain = http_cdsa_open_system_keychain(); #else if (path) return (-1); #endif /* HAVE_SECKEYCHAINOPEN */ cfcommon_name = CFStringCreateWithCString(kCFAllocatorDefault, common_name, kCFStringEncodingUTF8); policy = SecPolicyCreateSSL(1, cfcommon_name); if (cfcommon_name) CFRelease(cfcommon_name); if (!policy) goto cleanup; if (!(query = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks))) goto cleanup; CFDictionaryAddValue(query, kSecClass, kSecClassCertificate); CFDictionaryAddValue(query, kSecMatchPolicy, policy); CFDictionaryAddValue(query, kSecReturnRef, kCFBooleanTrue); CFDictionaryAddValue(query, kSecMatchLimit, kSecMatchLimitOne); #ifdef HAVE_SECKEYCHAINOPEN if (syschain) { const void *values[2] = { syschain, keychain }; list = CFArrayCreate(kCFAllocatorDefault, (const void **)values, 2, &kCFTypeArrayCallBacks); } else list = CFArrayCreate(kCFAllocatorDefault, (const void **)&keychain, 1, &kCFTypeArrayCallBacks); CFDictionaryAddValue(query, kSecMatchSearchList, list); CFRelease(list); #endif /* HAVE_SECKEYCHAINOPEN */ err = SecItemCopyMatching(query, (CFTypeRef *)&cert); if (err) goto cleanup; if (CFGetTypeID(cert) != SecCertificateGetTypeID()) goto cleanup; if ((data = SecCertificateCopyData(cert)) != NULL) { DEBUG_printf(("1httpLoadCredentials: Adding %d byte certificate blob.", (int)CFDataGetLength(data))); *credentials = cupsArrayNew(NULL, NULL); httpAddCredential(*credentials, CFDataGetBytePtr(data), (size_t)CFDataGetLength(data)); CFRelease(data); } cleanup : #ifdef HAVE_SECKEYCHAINOPEN if (keychain) CFRelease(keychain); if (syschain) CFRelease(syschain); #endif /* HAVE_SECKEYCHAINOPEN */ if (cert) CFRelease(cert); if (policy) CFRelease(policy); if (query) CFRelease(query); DEBUG_printf(("1httpLoadCredentials: Returning %d.", *credentials ? 0 : -1)); return (*credentials ? 0 : -1); } /* * 'httpSaveCredentials()' - Save X.509 credentials to a keychain file. * * @since CUPS 2.0/OS 10.10@ */ int /* O - -1 on error, 0 on success */ httpSaveCredentials( const char *path, /* I - Keychain path or @code NULL@ for default */ cups_array_t *credentials, /* I - Credentials */ const char *common_name) /* I - Common name for credentials */ { int ret = -1; /* Return value */ OSStatus err; /* Error info */ #ifdef HAVE_SECKEYCHAINOPEN char filename[1024]; /* Filename for keychain */ SecKeychainRef keychain = NULL;/* Keychain reference */ CFArrayRef list; /* Keychain list */ #endif /* HAVE_SECKEYCHAINOPEN */ SecCertificateRef cert = NULL; /* Certificate */ CFMutableDictionaryRef attrs = NULL; /* Attributes for add */ DEBUG_printf(("httpSaveCredentials(path=\"%s\", credentials=%p, common_name=\"%s\")", path, (void *)credentials, common_name)); if (!credentials) goto cleanup; if (!httpCredentialsAreValidForName(credentials, common_name)) { DEBUG_puts("1httpSaveCredentials: Common name does not match."); return (-1); } if ((cert = http_cdsa_create_credential((http_credential_t *)cupsArrayFirst(credentials))) == NULL) { DEBUG_puts("1httpSaveCredentials: Unable to create certificate."); goto cleanup; } #ifdef HAVE_SECKEYCHAINOPEN keychain = http_cdsa_open_keychain(path, filename, sizeof(filename)); if (!keychain) goto cleanup; #else if (path) return (-1); #endif /* HAVE_SECKEYCHAINOPEN */ if ((attrs = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)) == NULL) { DEBUG_puts("1httpSaveCredentials: Unable to create dictionary."); goto cleanup; } CFDictionaryAddValue(attrs, kSecClass, kSecClassCertificate); CFDictionaryAddValue(attrs, kSecValueRef, cert); #ifdef HAVE_SECKEYCHAINOPEN if ((list = CFArrayCreate(kCFAllocatorDefault, (const void **)&keychain, 1, &kCFTypeArrayCallBacks)) == NULL) { DEBUG_puts("1httpSaveCredentials: Unable to create list of keychains."); goto cleanup; } CFDictionaryAddValue(attrs, kSecMatchSearchList, list); CFRelease(list); #endif /* HAVE_SECKEYCHAINOPEN */ /* Note: SecItemAdd consumes "attrs"... */ err = SecItemAdd(attrs, NULL); DEBUG_printf(("1httpSaveCredentials: SecItemAdd returned %d.", (int)err)); cleanup : #ifdef HAVE_SECKEYCHAINOPEN if (keychain) CFRelease(keychain); #endif /* HAVE_SECKEYCHAINOPEN */ if (cert) CFRelease(cert); DEBUG_printf(("1httpSaveCredentials: Returning %d.", ret)); return (ret); } /* * '_httpTLSInitialize()' - Initialize the TLS stack. */ void _httpTLSInitialize(void) { /* * Nothing to do... */ } /* * '_httpTLSPending()' - Return the number of pending TLS-encrypted bytes. */ size_t _httpTLSPending(http_t *http) /* I - HTTP connection */ { size_t bytes; /* Bytes that are available */ if (!SSLGetBufferedReadSize(http->tls, &bytes)) return (bytes); return (0); } /* * '_httpTLSRead()' - Read from a SSL/TLS connection. */ int /* O - Bytes read */ _httpTLSRead(http_t *http, /* I - HTTP connection */ char *buf, /* I - Buffer to store data */ int len) /* I - Length of buffer */ { int result; /* Return value */ OSStatus error; /* Error info */ size_t processed; /* Number of bytes processed */ error = SSLRead(http->tls, buf, (size_t)len, &processed); DEBUG_printf(("6_httpTLSRead: error=%d, processed=%d", (int)error, (int)processed)); switch (error) { case 0 : result = (int)processed; break; case errSSLWouldBlock : if (processed) result = (int)processed; else { result = -1; errno = EINTR; } break; case errSSLClosedGraceful : default : if (processed) result = (int)processed; else { result = -1; errno = EPIPE; } break; } return (result); } /* * '_httpTLSSetOptions()' - Set TLS protocol and cipher suite options. */ void _httpTLSSetOptions(int options, /* I - Options */ int min_version, /* I - Minimum TLS version */ int max_version) /* I - Maximum TLS version */ { if (!(options & _HTTP_TLS_SET_DEFAULT) || tls_options < 0) { tls_options = options; tls_min_version = min_version; tls_max_version = max_version; } } /* * '_httpTLSStart()' - Set up SSL/TLS support on a connection. */ int /* O - 0 on success, -1 on failure */ _httpTLSStart(http_t *http) /* I - HTTP connection */ { char hostname[256], /* Hostname */ *hostptr; /* Pointer into hostname */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ OSStatus error; /* Error code */ const char *message = NULL;/* Error message */ cups_array_t *credentials; /* Credentials array */ cups_array_t *names; /* CUPS distinguished names */ CFArrayRef dn_array; /* CF distinguished names array */ CFIndex count; /* Number of credentials */ CFDataRef data; /* Certificate data */ int i; /* Looping var */ http_credential_t *credential; /* Credential data */ DEBUG_printf(("3_httpTLSStart(http=%p)", (void *)http)); if (tls_options < 0) { DEBUG_puts("4_httpTLSStart: Setting defaults."); _cupsSetDefaults(); DEBUG_printf(("4_httpTLSStart: tls_options=%x, tls_min_version=%d, tls_max_version=%d", tls_options, tls_min_version, tls_max_version)); } #ifdef HAVE_SECKEYCHAINOPEN if (http->mode == _HTTP_MODE_SERVER && !tls_keychain) { DEBUG_puts("4_httpTLSStart: cupsSetServerCredentials not called."); http->error = errno = EINVAL; http->status = HTTP_STATUS_ERROR; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Server credentials not set."), 1); return (-1); } #endif /* HAVE_SECKEYCHAINOPEN */ if ((http->tls = SSLCreateContext(kCFAllocatorDefault, http->mode == _HTTP_MODE_CLIENT ? kSSLClientSide : kSSLServerSide, kSSLStreamType)) == NULL) { DEBUG_puts("4_httpTLSStart: SSLCreateContext failed."); http->error = errno = ENOMEM; http->status = HTTP_STATUS_ERROR; _cupsSetHTTPError(HTTP_STATUS_ERROR); return (-1); } error = SSLSetConnection(http->tls, http); DEBUG_printf(("4_httpTLSStart: SSLSetConnection, error=%d", (int)error)); if (!error) { error = SSLSetIOFuncs(http->tls, http_cdsa_read, http_cdsa_write); DEBUG_printf(("4_httpTLSStart: SSLSetIOFuncs, error=%d", (int)error)); } if (!error) { error = SSLSetSessionOption(http->tls, kSSLSessionOptionBreakOnServerAuth, true); DEBUG_printf(("4_httpTLSStart: SSLSetSessionOption, error=%d", (int)error)); } if (!error) { static const SSLProtocol protocols[] = /* Min/max protocol versions */ { kSSLProtocol3, kTLSProtocol1, kTLSProtocol11, kTLSProtocol12, kTLSProtocol12, /* TODO: update to 1.3 when 1.3 is supported */ kTLSProtocol12 /* TODO: update to 1.3 when 1.3 is supported */ }; error = SSLSetProtocolVersionMin(http->tls, protocols[tls_min_version]); DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMin(%d), error=%d", protocols[tls_min_version], (int)error)); if (!error) { error = SSLSetProtocolVersionMax(http->tls, protocols[tls_max_version]); DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMax(%d), error=%d", protocols[tls_max_version], (int)error)); } } # if HAVE_SSLSETENABLEDCIPHERS if (!error) { SSLCipherSuite supported[100]; /* Supported cipher suites */ size_t num_supported; /* Number of supported cipher suites */ SSLCipherSuite enabled[100]; /* Cipher suites to enable */ size_t num_enabled; /* Number of cipher suites to enable */ num_supported = sizeof(supported) / sizeof(supported[0]); error = SSLGetSupportedCiphers(http->tls, supported, &num_supported); if (!error) { DEBUG_printf(("4_httpTLSStart: %d cipher suites supported.", (int)num_supported)); for (i = 0, num_enabled = 0; i < (int)num_supported && num_enabled < (sizeof(enabled) / sizeof(enabled[0])); i ++) { switch (supported[i]) { /* Obviously insecure cipher suites that we never want to use */ case SSL_NULL_WITH_NULL_NULL : case SSL_RSA_WITH_NULL_MD5 : case SSL_RSA_WITH_NULL_SHA : case SSL_RSA_EXPORT_WITH_RC4_40_MD5 : case SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 : case SSL_RSA_EXPORT_WITH_DES40_CBC_SHA : case SSL_RSA_WITH_DES_CBC_SHA : case SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA : case SSL_DH_DSS_WITH_DES_CBC_SHA : case SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA : case SSL_DH_RSA_WITH_DES_CBC_SHA : case SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA : case SSL_DHE_DSS_WITH_DES_CBC_SHA : case SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA : case SSL_DHE_RSA_WITH_DES_CBC_SHA : case SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 : case SSL_DH_anon_WITH_RC4_128_MD5 : case SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA : case SSL_DH_anon_WITH_DES_CBC_SHA : case SSL_DH_anon_WITH_3DES_EDE_CBC_SHA : case SSL_FORTEZZA_DMS_WITH_NULL_SHA : case TLS_DH_anon_WITH_AES_128_CBC_SHA : case TLS_DH_anon_WITH_AES_256_CBC_SHA : case TLS_ECDH_ECDSA_WITH_NULL_SHA : case TLS_ECDHE_RSA_WITH_NULL_SHA : case TLS_ECDH_anon_WITH_NULL_SHA : case TLS_ECDH_anon_WITH_RC4_128_SHA : case TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA : case TLS_ECDH_anon_WITH_AES_128_CBC_SHA : case TLS_ECDH_anon_WITH_AES_256_CBC_SHA : case TLS_RSA_WITH_NULL_SHA256 : case TLS_DH_anon_WITH_AES_128_CBC_SHA256 : case TLS_DH_anon_WITH_AES_256_CBC_SHA256 : case TLS_PSK_WITH_NULL_SHA : case TLS_DHE_PSK_WITH_NULL_SHA : case TLS_RSA_PSK_WITH_NULL_SHA : case TLS_DH_anon_WITH_AES_128_GCM_SHA256 : case TLS_DH_anon_WITH_AES_256_GCM_SHA384 : case TLS_PSK_WITH_NULL_SHA256 : case TLS_PSK_WITH_NULL_SHA384 : case TLS_DHE_PSK_WITH_NULL_SHA256 : case TLS_DHE_PSK_WITH_NULL_SHA384 : case TLS_RSA_PSK_WITH_NULL_SHA256 : case TLS_RSA_PSK_WITH_NULL_SHA384 : case SSL_RSA_WITH_DES_CBC_MD5 : DEBUG_printf(("4_httpTLSStart: Excluding insecure cipher suite %d", supported[i])); break; /* RC4 cipher suites that should only be used as a last resort */ case SSL_RSA_WITH_RC4_128_MD5 : case SSL_RSA_WITH_RC4_128_SHA : case TLS_ECDH_ECDSA_WITH_RC4_128_SHA : case TLS_ECDHE_ECDSA_WITH_RC4_128_SHA : case TLS_ECDH_RSA_WITH_RC4_128_SHA : case TLS_ECDHE_RSA_WITH_RC4_128_SHA : case TLS_PSK_WITH_RC4_128_SHA : case TLS_DHE_PSK_WITH_RC4_128_SHA : case TLS_RSA_PSK_WITH_RC4_128_SHA : if (tls_options & _HTTP_TLS_ALLOW_RC4) enabled[num_enabled ++] = supported[i]; else DEBUG_printf(("4_httpTLSStart: Excluding RC4 cipher suite %d", supported[i])); break; /* DH/DHE cipher suites that are problematic with parameters < 1024 bits */ case TLS_DH_DSS_WITH_AES_128_CBC_SHA : case TLS_DH_RSA_WITH_AES_128_CBC_SHA : case TLS_DHE_DSS_WITH_AES_128_CBC_SHA : case TLS_DHE_RSA_WITH_AES_128_CBC_SHA : case TLS_DH_DSS_WITH_AES_256_CBC_SHA : case TLS_DH_RSA_WITH_AES_256_CBC_SHA : case TLS_DHE_DSS_WITH_AES_256_CBC_SHA : case TLS_DHE_RSA_WITH_AES_256_CBC_SHA : case TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA : case TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA : case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA : case TLS_DH_DSS_WITH_AES_128_CBC_SHA256 : case TLS_DH_RSA_WITH_AES_128_CBC_SHA256 : case TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 : case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 : case TLS_DH_DSS_WITH_AES_256_CBC_SHA256 : case TLS_DH_RSA_WITH_AES_256_CBC_SHA256 : case TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 : case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 : case TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA : case TLS_DHE_PSK_WITH_AES_128_CBC_SHA : case TLS_DHE_PSK_WITH_AES_256_CBC_SHA : case TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 : case TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 : if (tls_options & _HTTP_TLS_DENY_CBC) { DEBUG_printf(("4_httpTLSStart: Excluding CBC cipher suite %d", supported[i])); break; } // case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 : // case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 : case TLS_DH_RSA_WITH_AES_128_GCM_SHA256 : case TLS_DH_RSA_WITH_AES_256_GCM_SHA384 : // case TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 : // case TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 : case TLS_DH_DSS_WITH_AES_128_GCM_SHA256 : case TLS_DH_DSS_WITH_AES_256_GCM_SHA384 : case TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 : case TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 : if (tls_options & _HTTP_TLS_ALLOW_DH) enabled[num_enabled ++] = supported[i]; else DEBUG_printf(("4_httpTLSStart: Excluding DH/DHE cipher suite %d", supported[i])); break; case TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA : case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 : case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 : case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 : case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 : case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 : case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 : case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 : case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 : case TLS_RSA_WITH_3DES_EDE_CBC_SHA : case TLS_RSA_WITH_AES_128_CBC_SHA : case TLS_RSA_WITH_AES_256_CBC_SHA : if (tls_options & _HTTP_TLS_DENY_CBC) { DEBUG_printf(("4_httpTLSStart: Excluding CBC cipher suite %d", supported[i])); break; } /* Anything else we'll assume is "secure" */ default : enabled[num_enabled ++] = supported[i]; break; } } DEBUG_printf(("4_httpTLSStart: %d cipher suites enabled.", (int)num_enabled)); error = SSLSetEnabledCiphers(http->tls, enabled, num_enabled); } } #endif /* HAVE_SSLSETENABLEDCIPHERS */ if (!error && http->mode == _HTTP_MODE_CLIENT) { /* * Client: set client-side credentials, if any... */ if (cg->client_cert_cb) { error = SSLSetSessionOption(http->tls, kSSLSessionOptionBreakOnCertRequested, true); DEBUG_printf(("4_httpTLSStart: kSSLSessionOptionBreakOnCertRequested, " "error=%d", (int)error)); } else { error = http_cdsa_set_credentials(http); DEBUG_printf(("4_httpTLSStart: http_cdsa_set_credentials, error=%d", (int)error)); } } else if (!error) { /* * Server: find/create a certificate for TLS... */ if (http->fields[HTTP_FIELD_HOST][0]) { /* * Use hostname for TLS upgrade... */ strlcpy(hostname, http->fields[HTTP_FIELD_HOST], sizeof(hostname)); } else { /* * Resolve hostname from connection address... */ http_addr_t addr; /* Connection address */ socklen_t addrlen; /* Length of address */ addrlen = sizeof(addr); if (getsockname(http->fd, (struct sockaddr *)&addr, &addrlen)) { DEBUG_printf(("4_httpTLSStart: Unable to get socket address: %s", strerror(errno))); hostname[0] = '\0'; } else if (httpAddrLocalhost(&addr)) hostname[0] = '\0'; else { httpAddrLookup(&addr, hostname, sizeof(hostname)); DEBUG_printf(("4_httpTLSStart: Resolved socket address to \"%s\".", hostname)); } } if (isdigit(hostname[0] & 255) || hostname[0] == '[') hostname[0] = '\0'; /* Don't allow numeric addresses */ if (hostname[0]) http->tls_credentials = http_cdsa_copy_server(hostname); else if (tls_common_name) http->tls_credentials = http_cdsa_copy_server(tls_common_name); if (!http->tls_credentials && tls_auto_create && (hostname[0] || tls_common_name)) { DEBUG_printf(("4_httpTLSStart: Auto-create credentials for \"%s\".", hostname[0] ? hostname : tls_common_name)); if (!cupsMakeServerCredentials(tls_keypath, hostname[0] ? hostname : tls_common_name, 0, NULL, time(NULL) + 365 * 86400)) { DEBUG_puts("4_httpTLSStart: cupsMakeServerCredentials failed."); http->error = errno = EINVAL; http->status = HTTP_STATUS_ERROR; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to create server credentials."), 1); return (-1); } http->tls_credentials = http_cdsa_copy_server(hostname[0] ? hostname : tls_common_name); } if (!http->tls_credentials) { DEBUG_puts("4_httpTLSStart: Unable to find server credentials."); http->error = errno = EINVAL; http->status = HTTP_STATUS_ERROR; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to find server credentials."), 1); return (-1); } error = SSLSetCertificate(http->tls, http->tls_credentials); DEBUG_printf(("4_httpTLSStart: SSLSetCertificate, error=%d", (int)error)); } DEBUG_printf(("4_httpTLSStart: tls_credentials=%p", (void *)http->tls_credentials)); /* * Let the server know which hostname/domain we are trying to connect to * in case it wants to serve up a certificate with a matching common name. */ if (!error && http->mode == _HTTP_MODE_CLIENT) { /* * Client: get the hostname to use for TLS... */ if (httpAddrLocalhost(http->hostaddr)) { strlcpy(hostname, "localhost", sizeof(hostname)); } else { /* * Otherwise make sure the hostname we have does not end in a trailing dot. */ strlcpy(hostname, http->hostname, sizeof(hostname)); if ((hostptr = hostname + strlen(hostname) - 1) >= hostname && *hostptr == '.') *hostptr = '\0'; } error = SSLSetPeerDomainName(http->tls, hostname, strlen(hostname)); DEBUG_printf(("4_httpTLSStart: SSLSetPeerDomainName, error=%d", (int)error)); } if (!error) { int done = 0; /* Are we done yet? */ double old_timeout; /* Old timeout value */ http_timeout_cb_t old_cb; /* Old timeout callback */ void *old_data; /* Old timeout data */ /* * Enforce a minimum timeout of 10 seconds for the TLS handshake... */ old_timeout = http->timeout_value; old_cb = http->timeout_cb; old_data = http->timeout_data; if (!old_cb || old_timeout < 10.0) { DEBUG_puts("4_httpTLSStart: Setting timeout to 10 seconds."); httpSetTimeout(http, 10.0, NULL, NULL); } /* * Do the TLS handshake... */ while (!error && !done) { error = SSLHandshake(http->tls); DEBUG_printf(("4_httpTLSStart: SSLHandshake returned %d.", (int)error)); switch (error) { case noErr : done = 1; break; case errSSLWouldBlock : error = noErr; /* Force a retry */ usleep(1000); /* in 1 millisecond */ break; case errSSLServerAuthCompleted : error = 0; if (cg->server_cert_cb) { error = httpCopyCredentials(http, &credentials); if (!error) { error = (cg->server_cert_cb)(http, http->tls, credentials, cg->server_cert_data); httpFreeCredentials(credentials); } DEBUG_printf(("4_httpTLSStart: Server certificate callback " "returned %d.", (int)error)); } break; case errSSLClientCertRequested : error = 0; if (cg->client_cert_cb) { names = NULL; if (!(error = SSLCopyDistinguishedNames(http->tls, &dn_array)) && dn_array) { if ((names = cupsArrayNew(NULL, NULL)) != NULL) { for (i = 0, count = CFArrayGetCount(dn_array); i < count; i++) { data = (CFDataRef)CFArrayGetValueAtIndex(dn_array, i); if ((credential = malloc(sizeof(*credential))) != NULL) { credential->datalen = (size_t)CFDataGetLength(data); if ((credential->data = malloc(credential->datalen))) { memcpy((void *)credential->data, CFDataGetBytePtr(data), credential->datalen); cupsArrayAdd(names, credential); } else free(credential); } } } CFRelease(dn_array); } if (!error) { error = (cg->client_cert_cb)(http, http->tls, names, cg->client_cert_data); DEBUG_printf(("4_httpTLSStart: Client certificate callback " "returned %d.", (int)error)); } httpFreeCredentials(names); } break; case errSSLUnknownRootCert : message = _("Unable to establish a secure connection to host " "(untrusted certificate)."); break; case errSSLNoRootCert : message = _("Unable to establish a secure connection to host " "(self-signed certificate)."); break; case errSSLCertExpired : message = _("Unable to establish a secure connection to host " "(expired certificate)."); break; case errSSLCertNotYetValid : message = _("Unable to establish a secure connection to host " "(certificate not yet valid)."); break; case errSSLHostNameMismatch : message = _("Unable to establish a secure connection to host " "(host name mismatch)."); break; case errSSLXCertChainInvalid : message = _("Unable to establish a secure connection to host " "(certificate chain invalid)."); break; case errSSLConnectionRefused : message = _("Unable to establish a secure connection to host " "(peer dropped connection before responding)."); break; default : break; } } /* * Restore the previous timeout settings... */ httpSetTimeout(http, old_timeout, old_cb, old_data); } if (error) { http->error = error; http->status = HTTP_STATUS_ERROR; errno = ECONNREFUSED; CFRelease(http->tls); http->tls = NULL; /* * If an error string wasn't set by the callbacks use a generic one... */ if (!message) #ifdef HAVE_CSSMERRORSTRING message = cssmErrorString(error); #else message = _("Unable to establish a secure connection to host."); #endif /* HAVE_CSSMERRORSTRING */ _cupsSetError(IPP_STATUS_ERROR_CUPS_PKI, message, 1); return (-1); } return (0); } /* * '_httpTLSStop()' - Shut down SSL/TLS on a connection. */ void _httpTLSStop(http_t *http) /* I - HTTP connection */ { while (SSLClose(http->tls) == errSSLWouldBlock) usleep(1000); CFRelease(http->tls); if (http->tls_credentials) CFRelease(http->tls_credentials); http->tls = NULL; http->tls_credentials = NULL; } /* * '_httpTLSWrite()' - Write to a SSL/TLS connection. */ int /* O - Bytes written */ _httpTLSWrite(http_t *http, /* I - HTTP connection */ const char *buf, /* I - Buffer holding data */ int len) /* I - Length of buffer */ { ssize_t result; /* Return value */ OSStatus error; /* Error info */ size_t processed; /* Number of bytes processed */ DEBUG_printf(("2_httpTLSWrite(http=%p, buf=%p, len=%d)", (void *)http, (void *)buf, len)); error = SSLWrite(http->tls, buf, (size_t)len, &processed); switch (error) { case 0 : result = (int)processed; break; case errSSLWouldBlock : if (processed) { result = (int)processed; } else { result = -1; errno = EINTR; } break; case errSSLClosedGraceful : default : if (processed) { result = (int)processed; } else { result = -1; errno = EPIPE; } break; } DEBUG_printf(("3_httpTLSWrite: Returning %d.", (int)result)); return ((int)result); } /* * 'http_cdsa_copy_server()' - Find and copy server credentials from the keychain. */ static CFArrayRef /* O - Array of certificates or NULL */ http_cdsa_copy_server( const char *common_name) /* I - Server's hostname */ { #ifdef HAVE_SECKEYCHAINOPEN OSStatus err; /* Error info */ SecIdentityRef identity = NULL;/* Identity */ CFArrayRef certificates = NULL; /* Certificate array */ SecPolicyRef policy = NULL; /* Policy ref */ CFStringRef cfcommon_name = NULL; /* Server name */ CFMutableDictionaryRef query = NULL; /* Query qualifiers */ CFArrayRef list = NULL; /* Keychain list */ SecKeychainRef syschain = NULL;/* System keychain */ SecKeychainStatus status = 0; /* Keychain status */ DEBUG_printf(("3http_cdsa_copy_server(common_name=\"%s\")", common_name)); cfcommon_name = CFStringCreateWithCString(kCFAllocatorDefault, common_name, kCFStringEncodingUTF8); policy = SecPolicyCreateSSL(1, cfcommon_name); if (!policy) { DEBUG_puts("4http_cdsa_copy_server: Unable to create SSL policy."); goto cleanup; } if (!(query = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks))) { DEBUG_puts("4http_cdsa_copy_server: Unable to create query dictionary."); goto cleanup; } _cupsMutexLock(&tls_mutex); err = SecKeychainGetStatus(tls_keychain, &status); if (err == noErr && !(status & kSecUnlockStateStatus) && tls_cups_keychain) SecKeychainUnlock(tls_keychain, _CUPS_CDSA_PASSLEN, _CUPS_CDSA_PASSWORD, TRUE); CFDictionaryAddValue(query, kSecClass, kSecClassIdentity); CFDictionaryAddValue(query, kSecMatchPolicy, policy); CFDictionaryAddValue(query, kSecReturnRef, kCFBooleanTrue); CFDictionaryAddValue(query, kSecMatchLimit, kSecMatchLimitOne); syschain = http_cdsa_open_system_keychain(); if (syschain) { const void *values[2] = { syschain, tls_keychain }; list = CFArrayCreate(kCFAllocatorDefault, (const void **)values, 2, &kCFTypeArrayCallBacks); } else list = CFArrayCreate(kCFAllocatorDefault, (const void **)&tls_keychain, 1, &kCFTypeArrayCallBacks); CFDictionaryAddValue(query, kSecMatchSearchList, list); CFRelease(list); err = SecItemCopyMatching(query, (CFTypeRef *)&identity); _cupsMutexUnlock(&tls_mutex); if (err != noErr) { DEBUG_printf(("4http_cdsa_copy_server: SecItemCopyMatching failed with status %d.", (int)err)); goto cleanup; } if (CFGetTypeID(identity) != SecIdentityGetTypeID()) { DEBUG_puts("4http_cdsa_copy_server: Search returned something that is not an identity."); goto cleanup; } if ((certificates = CFArrayCreate(NULL, (const void **)&identity, 1, &kCFTypeArrayCallBacks)) == NULL) { DEBUG_puts("4http_cdsa_copy_server: Unable to create array of certificates."); goto cleanup; } cleanup : if (syschain) CFRelease(syschain); if (identity) CFRelease(identity); if (policy) CFRelease(policy); if (cfcommon_name) CFRelease(cfcommon_name); if (query) CFRelease(query); DEBUG_printf(("4http_cdsa_copy_server: Returning %p.", (void *)certificates)); return (certificates); #else if (!tls_selfsigned) return (NULL); return (CFArrayCreate(NULL, (const void **)&tls_selfsigned, 1, &kCFTypeArrayCallBacks)); #endif /* HAVE_SECKEYCHAINOPEN */ } /* * 'http_cdsa_create_credential()' - Create a single credential in the internal format. */ static SecCertificateRef /* O - Certificate */ http_cdsa_create_credential( http_credential_t *credential) /* I - Credential */ { if (!credential) return (NULL); return (SecCertificateCreateWithBytes(kCFAllocatorDefault, credential->data, (CFIndex)credential->datalen)); } #ifdef HAVE_SECKEYCHAINOPEN /* * 'http_cdsa_default_path()' - Get the default keychain path. */ static const char * /* O - Keychain path */ http_cdsa_default_path(char *buffer, /* I - Path buffer */ size_t bufsize) /* I - Size of buffer */ { const char *home = getenv("HOME"); /* HOME environment variable */ /* * Determine the default keychain path. Note that the login and system * keychains are no longer accessible to user applications starting in macOS * 10.11.4 (!), so we need to create our own keychain just for CUPS. */ if (getuid() && home) snprintf(buffer, bufsize, "%s/.cups/ssl.keychain", home); else strlcpy(buffer, "/etc/cups/ssl.keychain", bufsize); DEBUG_printf(("1http_cdsa_default_path: Using default path \"%s\".", buffer)); return (buffer); } /* * 'http_cdsa_open_keychain()' - Open (or create) a keychain. */ static SecKeychainRef /* O - Keychain or NULL */ http_cdsa_open_keychain( const char *path, /* I - Path to keychain */ char *filename, /* I - Keychain filename */ size_t filesize) /* I - Size of filename buffer */ { SecKeychainRef keychain = NULL;/* Temporary keychain */ OSStatus err; /* Error code */ Boolean interaction; /* Interaction allowed? */ SecKeychainStatus status = 0; /* Keychain status */ /* * Get the keychain filename... */ if (!path) { path = http_cdsa_default_path(filename, filesize); tls_cups_keychain = 1; } else { strlcpy(filename, path, filesize); tls_cups_keychain = 0; } /* * Save the interaction setting and disable while we open the keychain... */ SecKeychainGetUserInteractionAllowed(&interaction); SecKeychainSetUserInteractionAllowed(FALSE); if (access(path, R_OK) && tls_cups_keychain) { /* * Create a new keychain at the given path... */ err = SecKeychainCreate(path, _CUPS_CDSA_PASSLEN, _CUPS_CDSA_PASSWORD, FALSE, NULL, &keychain); } else { /* * Open the existing keychain and unlock as needed... */ err = SecKeychainOpen(path, &keychain); if (err == noErr) err = SecKeychainGetStatus(keychain, &status); if (err == noErr && !(status & kSecUnlockStateStatus) && tls_cups_keychain) err = SecKeychainUnlock(keychain, _CUPS_CDSA_PASSLEN, _CUPS_CDSA_PASSWORD, TRUE); } /* * Restore interaction setting... */ SecKeychainSetUserInteractionAllowed(interaction); /* * Release the keychain if we had any errors... */ if (err != noErr) { /* TODO: Set cups last error string */ DEBUG_printf(("4http_cdsa_open_keychain: Unable to open keychain (%d), returning NULL.", (int)err)); if (keychain) { CFRelease(keychain); keychain = NULL; } } /* * Return the keychain or NULL... */ return (keychain); } /* * 'http_cdsa_open_system_keychain()' - Open the System keychain. */ static SecKeychainRef http_cdsa_open_system_keychain(void) { SecKeychainRef keychain = NULL;/* Temporary keychain */ OSStatus err; /* Error code */ Boolean interaction; /* Interaction allowed? */ SecKeychainStatus status = 0; /* Keychain status */ /* * Save the interaction setting and disable while we open the keychain... */ SecKeychainGetUserInteractionAllowed(&interaction); SecKeychainSetUserInteractionAllowed(TRUE); err = SecKeychainOpen("/Library/Keychains/System.keychain", &keychain); if (err == noErr) err = SecKeychainGetStatus(keychain, &status); if (err == noErr && !(status & kSecUnlockStateStatus)) err = errSecInteractionNotAllowed; /* * Restore interaction setting... */ SecKeychainSetUserInteractionAllowed(interaction); /* * Release the keychain if we had any errors... */ if (err != noErr) { /* TODO: Set cups last error string */ DEBUG_printf(("4http_cdsa_open_system_keychain: Unable to open keychain (%d), returning NULL.", (int)err)); if (keychain) { CFRelease(keychain); keychain = NULL; } } /* * Return the keychain or NULL... */ return (keychain); } #endif /* HAVE_SECKEYCHAINOPEN */ /* * 'http_cdsa_read()' - Read function for the CDSA library. */ static OSStatus /* O - -1 on error, 0 on success */ http_cdsa_read( SSLConnectionRef connection, /* I - SSL/TLS connection */ void *data, /* I - Data buffer */ size_t *dataLength) /* IO - Number of bytes */ { OSStatus result; /* Return value */ ssize_t bytes; /* Number of bytes read */ http_t *http; /* HTTP connection */ http = (http_t *)connection; if (!http->blocking || http->timeout_value > 0.0) { /* * Make sure we have data before we read... */ while (!_httpWait(http, http->wait_value, 0)) { if (http->timeout_cb && (*http->timeout_cb)(http, http->timeout_data)) continue; http->error = ETIMEDOUT; return (-1); } } do { bytes = recv(http->fd, data, *dataLength, 0); } while (bytes == -1 && (errno == EINTR || errno == EAGAIN)); if ((size_t)bytes == *dataLength) { result = 0; } else if (bytes > 0) { *dataLength = (size_t)bytes; result = errSSLWouldBlock; } else { *dataLength = 0; if (bytes == 0) result = errSSLClosedGraceful; else if (errno == EAGAIN) result = errSSLWouldBlock; else result = errSSLClosedAbort; } return (result); } /* * 'http_cdsa_set_credentials()' - Set the TLS credentials. */ static int /* O - Status of connection */ http_cdsa_set_credentials(http_t *http) /* I - HTTP connection */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ OSStatus error = 0; /* Error code */ http_tls_credentials_t credentials = NULL; /* TLS credentials */ DEBUG_printf(("7http_tls_set_credentials(%p)", (void *)http)); /* * Prefer connection specific credentials... */ if ((credentials = http->tls_credentials) == NULL) credentials = cg->tls_credentials; if (credentials) { error = SSLSetCertificate(http->tls, credentials); DEBUG_printf(("4http_tls_set_credentials: SSLSetCertificate, error=%d", (int)error)); } else DEBUG_puts("4http_tls_set_credentials: No credentials to set."); return (error); } /* * 'http_cdsa_write()' - Write function for the CDSA library. */ static OSStatus /* O - -1 on error, 0 on success */ http_cdsa_write( SSLConnectionRef connection, /* I - SSL/TLS connection */ const void *data, /* I - Data buffer */ size_t *dataLength) /* IO - Number of bytes */ { OSStatus result; /* Return value */ ssize_t bytes; /* Number of bytes read */ http_t *http; /* HTTP connection */ http = (http_t *)connection; do { bytes = write(http->fd, data, *dataLength); } while (bytes == -1 && (errno == EINTR || errno == EAGAIN)); if ((size_t)bytes == *dataLength) { result = 0; } else if (bytes >= 0) { *dataLength = (size_t)bytes; result = errSSLWouldBlock; } else { *dataLength = 0; if (errno == EAGAIN) result = errSSLWouldBlock; else result = errSSLClosedAbort; } return (result); } cups-2.2.7/cups/tls-gnutls.c000664 000765 000024 00000131424 13255074424 016412 0ustar00msweetstaff000000 000000 /* * TLS support code for CUPS using GNU TLS. * * Copyright © 2007-2018 by Apple Inc. * Copyright © 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /**** This file is included from tls.c ****/ /* * Include necessary headers... */ #include /* * Local globals... */ static int tls_auto_create = 0; /* Auto-create self-signed certs? */ static char *tls_common_name = NULL; /* Default common name */ static gnutls_x509_crl_t tls_crl = NULL;/* Certificate revocation list */ static char *tls_keypath = NULL; /* Server cert keychain path */ static _cups_mutex_t tls_mutex = _CUPS_MUTEX_INITIALIZER; /* Mutex for keychain/certs */ static int tls_options = -1,/* Options for TLS connections */ tls_min_version = _HTTP_TLS_1_0, tls_max_version = _HTTP_TLS_MAX; /* * Local functions... */ static gnutls_x509_crt_t http_gnutls_create_credential(http_credential_t *credential); static const char *http_gnutls_default_path(char *buffer, size_t bufsize); static void http_gnutls_load_crl(void); static const char *http_gnutls_make_path(char *buffer, size_t bufsize, const char *dirname, const char *filename, const char *ext); static ssize_t http_gnutls_read(gnutls_transport_ptr_t ptr, void *data, size_t length); static ssize_t http_gnutls_write(gnutls_transport_ptr_t ptr, const void *data, size_t length); /* * 'cupsMakeServerCredentials()' - Make a self-signed certificate and private key pair. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 1 on success, 0 on failure */ cupsMakeServerCredentials( const char *path, /* I - Path to keychain/directory */ const char *common_name, /* I - Common name */ int num_alt_names, /* I - Number of subject alternate names */ const char **alt_names, /* I - Subject Alternate Names */ time_t expiration_date) /* I - Expiration date */ { gnutls_x509_crt_t crt; /* Self-signed certificate */ gnutls_x509_privkey_t key; /* Encryption private key */ char temp[1024], /* Temporary directory name */ crtfile[1024], /* Certificate filename */ keyfile[1024]; /* Private key filename */ cups_lang_t *language; /* Default language info */ cups_file_t *fp; /* Key/cert file */ unsigned char buffer[8192]; /* Buffer for x509 data */ size_t bytes; /* Number of bytes of data */ unsigned char serial[4]; /* Serial number buffer */ time_t curtime; /* Current time */ int result; /* Result of GNU TLS calls */ DEBUG_printf(("cupsMakeServerCredentials(path=\"%s\", common_name=\"%s\", num_alt_names=%d, alt_names=%p, expiration_date=%d)", path, common_name, num_alt_names, alt_names, (int)expiration_date)); /* * Filenames... */ if (!path) path = http_gnutls_default_path(temp, sizeof(temp)); if (!path || !common_name) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } http_gnutls_make_path(crtfile, sizeof(crtfile), path, common_name, "crt"); http_gnutls_make_path(keyfile, sizeof(keyfile), path, common_name, "key"); /* * Create the encryption key... */ DEBUG_puts("1cupsMakeServerCredentials: Creating key pair."); gnutls_x509_privkey_init(&key); gnutls_x509_privkey_generate(key, GNUTLS_PK_RSA, 2048, 0); DEBUG_puts("1cupsMakeServerCredentials: Key pair created."); /* * Save it... */ bytes = sizeof(buffer); if ((result = gnutls_x509_privkey_export(key, GNUTLS_X509_FMT_PEM, buffer, &bytes)) < 0) { DEBUG_printf(("1cupsMakeServerCredentials: Unable to export private key: %s", gnutls_strerror(result))); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, gnutls_strerror(result), 0); gnutls_x509_privkey_deinit(key); return (0); } else if ((fp = cupsFileOpen(keyfile, "w")) != NULL) { DEBUG_printf(("1cupsMakeServerCredentials: Writing private key to \"%s\".", keyfile)); cupsFileWrite(fp, (char *)buffer, bytes); cupsFileClose(fp); } else { DEBUG_printf(("1cupsMakeServerCredentials: Unable to create private key file \"%s\": %s", keyfile, strerror(errno))); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); gnutls_x509_privkey_deinit(key); return (0); } /* * Create the self-signed certificate... */ DEBUG_puts("1cupsMakeServerCredentials: Generating self-signed X.509 certificate."); language = cupsLangDefault(); curtime = time(NULL); serial[0] = curtime >> 24; serial[1] = curtime >> 16; serial[2] = curtime >> 8; serial[3] = curtime; gnutls_x509_crt_init(&crt); if (strlen(language->language) == 5) gnutls_x509_crt_set_dn_by_oid(crt, GNUTLS_OID_X520_COUNTRY_NAME, 0, language->language + 3, 2); else gnutls_x509_crt_set_dn_by_oid(crt, GNUTLS_OID_X520_COUNTRY_NAME, 0, "US", 2); gnutls_x509_crt_set_dn_by_oid(crt, GNUTLS_OID_X520_COMMON_NAME, 0, common_name, strlen(common_name)); gnutls_x509_crt_set_dn_by_oid(crt, GNUTLS_OID_X520_ORGANIZATION_NAME, 0, common_name, strlen(common_name)); gnutls_x509_crt_set_dn_by_oid(crt, GNUTLS_OID_X520_ORGANIZATIONAL_UNIT_NAME, 0, "Unknown", 7); gnutls_x509_crt_set_dn_by_oid(crt, GNUTLS_OID_X520_STATE_OR_PROVINCE_NAME, 0, "Unknown", 7); gnutls_x509_crt_set_dn_by_oid(crt, GNUTLS_OID_X520_LOCALITY_NAME, 0, "Unknown", 7); /* gnutls_x509_crt_set_dn_by_oid(crt, GNUTLS_OID_PKCS9_EMAIL, 0, ServerAdmin, strlen(ServerAdmin));*/ gnutls_x509_crt_set_key(crt, key); gnutls_x509_crt_set_serial(crt, serial, sizeof(serial)); gnutls_x509_crt_set_activation_time(crt, curtime); gnutls_x509_crt_set_expiration_time(crt, curtime + 10 * 365 * 86400); gnutls_x509_crt_set_ca_status(crt, 0); if (num_alt_names > 0) gnutls_x509_crt_set_subject_alternative_name(crt, GNUTLS_SAN_DNSNAME, alt_names[0]); gnutls_x509_crt_set_key_purpose_oid(crt, GNUTLS_KP_TLS_WWW_SERVER, 0); gnutls_x509_crt_set_key_usage(crt, GNUTLS_KEY_KEY_ENCIPHERMENT); gnutls_x509_crt_set_version(crt, 3); bytes = sizeof(buffer); if (gnutls_x509_crt_get_key_id(crt, 0, buffer, &bytes) >= 0) gnutls_x509_crt_set_subject_key_id(crt, buffer, bytes); gnutls_x509_crt_sign(crt, crt, key); /* * Save it... */ bytes = sizeof(buffer); if ((result = gnutls_x509_crt_export(crt, GNUTLS_X509_FMT_PEM, buffer, &bytes)) < 0) { DEBUG_printf(("1cupsMakeServerCredentials: Unable to export public key and X.509 certificate: %s", gnutls_strerror(result))); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, gnutls_strerror(result), 0); gnutls_x509_crt_deinit(crt); gnutls_x509_privkey_deinit(key); return (0); } else if ((fp = cupsFileOpen(crtfile, "w")) != NULL) { DEBUG_printf(("1cupsMakeServerCredentials: Writing public key and X.509 certificate to \"%s\".", crtfile)); cupsFileWrite(fp, (char *)buffer, bytes); cupsFileClose(fp); } else { DEBUG_printf(("1cupsMakeServerCredentials: Unable to create public key and X.509 certificate file \"%s\": %s", crtfile, strerror(errno))); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); gnutls_x509_crt_deinit(crt); gnutls_x509_privkey_deinit(key); return (0); } /* * Cleanup... */ gnutls_x509_crt_deinit(crt); gnutls_x509_privkey_deinit(key); DEBUG_puts("1cupsMakeServerCredentials: Successfully created credentials."); return (1); } /* * 'cupsSetServerCredentials()' - Set the default server credentials. * * Note: The server credentials are used by all threads in the running process. * This function is threadsafe. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 1 on success, 0 on failure */ cupsSetServerCredentials( const char *path, /* I - Path to keychain/directory */ const char *common_name, /* I - Default common name for server */ int auto_create) /* I - 1 = automatically create self-signed certificates */ { char temp[1024]; /* Default path buffer */ DEBUG_printf(("cupsSetServerCredentials(path=\"%s\", common_name=\"%s\", auto_create=%d)", path, common_name, auto_create)); /* * Use defaults as needed... */ if (!path) path = http_gnutls_default_path(temp, sizeof(temp)); /* * Range check input... */ if (!path || !common_name) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } _cupsMutexLock(&tls_mutex); /* * Free old values... */ if (tls_keypath) _cupsStrFree(tls_keypath); if (tls_common_name) _cupsStrFree(tls_common_name); /* * Save the new values... */ tls_keypath = _cupsStrAlloc(path); tls_auto_create = auto_create; tls_common_name = _cupsStrAlloc(common_name); _cupsMutexUnlock(&tls_mutex); return (1); } /* * 'httpCopyCredentials()' - Copy the credentials associated with the peer in * an encrypted connection. * * @since CUPS 1.5/macOS 10.7@ */ int /* O - Status of call (0 = success) */ httpCopyCredentials( http_t *http, /* I - Connection to server */ cups_array_t **credentials) /* O - Array of credentials */ { unsigned count; /* Number of certificates */ const gnutls_datum_t *certs; /* Certificates */ DEBUG_printf(("httpCopyCredentials(http=%p, credentials=%p)", http, credentials)); if (credentials) *credentials = NULL; if (!http || !http->tls || !credentials) return (-1); *credentials = cupsArrayNew(NULL, NULL); certs = gnutls_certificate_get_peers(http->tls, &count); DEBUG_printf(("1httpCopyCredentials: certs=%p, count=%u", certs, count)); if (certs && count) { while (count > 0) { httpAddCredential(*credentials, certs->data, certs->size); certs ++; count --; } } return (0); } /* * '_httpCreateCredentials()' - Create credentials in the internal format. */ http_tls_credentials_t /* O - Internal credentials */ _httpCreateCredentials( cups_array_t *credentials) /* I - Array of credentials */ { (void)credentials; return (NULL); } /* * '_httpFreeCredentials()' - Free internal credentials. */ void _httpFreeCredentials( http_tls_credentials_t credentials) /* I - Internal credentials */ { (void)credentials; } /* * 'httpCredentialsAreValidForName()' - Return whether the credentials are valid for the given name. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 1 if valid, 0 otherwise */ httpCredentialsAreValidForName( cups_array_t *credentials, /* I - Credentials */ const char *common_name) /* I - Name to check */ { gnutls_x509_crt_t cert; /* Certificate */ int result = 0; /* Result */ cert = http_gnutls_create_credential((http_credential_t *)cupsArrayFirst(credentials)); if (cert) { result = gnutls_x509_crt_check_hostname(cert, common_name) != 0; if (result) { int i, /* Looping var */ count; /* Number of revoked certificates */ unsigned char cserial[1024], /* Certificate serial number */ rserial[1024]; /* Revoked serial number */ size_t cserial_size, /* Size of cert serial number */ rserial_size; /* Size of revoked serial number */ _cupsMutexLock(&tls_mutex); count = gnutls_x509_crl_get_crt_count(tls_crl); if (count > 0) { cserial_size = sizeof(cserial); gnutls_x509_crt_get_serial(cert, cserial, &cserial_size); for (i = 0; i < count; i ++) { rserial_size = sizeof(rserial); if (!gnutls_x509_crl_get_crt_serial(tls_crl, (unsigned)i, rserial, &rserial_size, NULL) && cserial_size == rserial_size && !memcmp(cserial, rserial, (int)rserial_size)) { result = 0; break; } } } _cupsMutexUnlock(&tls_mutex); } gnutls_x509_crt_deinit(cert); } return (result); } /* * 'httpCredentialsGetTrust()' - Return the trust of credentials. * * @since CUPS 2.0/OS 10.10@ */ http_trust_t /* O - Level of trust */ httpCredentialsGetTrust( cups_array_t *credentials, /* I - Credentials */ const char *common_name) /* I - Common name for trust lookup */ { http_trust_t trust = HTTP_TRUST_OK; /* Trusted? */ gnutls_x509_crt_t cert; /* Certificate */ cups_array_t *tcreds = NULL; /* Trusted credentials */ _cups_globals_t *cg = _cupsGlobals(); /* Per-thread globals */ if (!common_name) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No common name specified."), 1); return (HTTP_TRUST_UNKNOWN); } if ((cert = http_gnutls_create_credential((http_credential_t *)cupsArrayFirst(credentials))) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to create credentials from array."), 1); return (HTTP_TRUST_UNKNOWN); } if (cg->any_root < 0) { _cupsSetDefaults(); http_gnutls_load_crl(); } /* * Look this common name up in the default keychains... */ httpLoadCredentials(NULL, &tcreds, common_name); if (tcreds) { char credentials_str[1024], /* String for incoming credentials */ tcreds_str[1024]; /* String for saved credentials */ httpCredentialsString(credentials, credentials_str, sizeof(credentials_str)); httpCredentialsString(tcreds, tcreds_str, sizeof(tcreds_str)); if (strcmp(credentials_str, tcreds_str)) { /* * Credentials don't match, let's look at the expiration date of the new * credentials and allow if the new ones have a later expiration... */ if (!cg->trust_first) { /* * Do not trust certificates on first use... */ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Trust on first use is disabled."), 1); trust = HTTP_TRUST_INVALID; } else if (httpCredentialsGetExpiration(credentials) <= httpCredentialsGetExpiration(tcreds)) { /* * The new credentials are not newly issued... */ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("New credentials are older than stored credentials."), 1); trust = HTTP_TRUST_INVALID; } else if (!httpCredentialsAreValidForName(credentials, common_name)) { /* * The common name does not match the issued certificate... */ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("New credentials are not valid for name."), 1); trust = HTTP_TRUST_INVALID; } else if (httpCredentialsGetExpiration(tcreds) < time(NULL)) { /* * Save the renewed credentials... */ trust = HTTP_TRUST_RENEWED; httpSaveCredentials(NULL, credentials, common_name); } } httpFreeCredentials(tcreds); } else if (cg->validate_certs && !httpCredentialsAreValidForName(credentials, common_name)) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No stored credentials, not valid for name."), 1); trust = HTTP_TRUST_INVALID; } else if (!cg->trust_first) { /* * See if we have a site CA certificate we can compare... */ if (!httpLoadCredentials(NULL, &tcreds, "site")) { if (cupsArrayCount(credentials) != (cupsArrayCount(tcreds) + 1)) { /* * Certificate isn't directly generated from the CA cert... */ trust = HTTP_TRUST_INVALID; } else { /* * Do a tail comparison of the two certificates... */ http_credential_t *a, *b; /* Certificates */ for (a = (http_credential_t *)cupsArrayFirst(tcreds), b = (http_credential_t *)cupsArrayIndex(credentials, 1); a && b; a = (http_credential_t *)cupsArrayNext(tcreds), b = (http_credential_t *)cupsArrayNext(credentials)) if (a->datalen != b->datalen || memcmp(a->data, b->data, a->datalen)) break; if (a || b) trust = HTTP_TRUST_INVALID; } if (trust != HTTP_TRUST_OK) _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Credentials do not validate against site CA certificate."), 1); } else { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Trust on first use is disabled."), 1); trust = HTTP_TRUST_INVALID; } } if (trust == HTTP_TRUST_OK && !cg->expired_certs) { time_t curtime; /* Current date/time */ time(&curtime); if (curtime < gnutls_x509_crt_get_activation_time(cert) || curtime > gnutls_x509_crt_get_expiration_time(cert)) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Credentials have expired."), 1); trust = HTTP_TRUST_EXPIRED; } } if (trust == HTTP_TRUST_OK && !cg->any_root && cupsArrayCount(credentials) == 1) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Self-signed credentials are blocked."), 1); trust = HTTP_TRUST_INVALID; } gnutls_x509_crt_deinit(cert); return (trust); } /* * 'httpCredentialsGetExpiration()' - Return the expiration date of the credentials. * * @since CUPS 2.0/OS 10.10@ */ time_t /* O - Expiration date of credentials */ httpCredentialsGetExpiration( cups_array_t *credentials) /* I - Credentials */ { gnutls_x509_crt_t cert; /* Certificate */ time_t result = 0; /* Result */ cert = http_gnutls_create_credential((http_credential_t *)cupsArrayFirst(credentials)); if (cert) { result = gnutls_x509_crt_get_expiration_time(cert); gnutls_x509_crt_deinit(cert); } return (result); } /* * 'httpCredentialsString()' - Return a string representing the credentials. * * @since CUPS 2.0/OS 10.10@ */ size_t /* O - Total size of credentials string */ httpCredentialsString( cups_array_t *credentials, /* I - Credentials */ char *buffer, /* I - Buffer or @code NULL@ */ size_t bufsize) /* I - Size of buffer */ { http_credential_t *first; /* First certificate */ gnutls_x509_crt_t cert; /* Certificate */ DEBUG_printf(("httpCredentialsString(credentials=%p, buffer=%p, bufsize=" CUPS_LLFMT ")", credentials, buffer, CUPS_LLCAST bufsize)); if (!buffer) return (0); if (buffer && bufsize > 0) *buffer = '\0'; if ((first = (http_credential_t *)cupsArrayFirst(credentials)) != NULL && (cert = http_gnutls_create_credential(first)) != NULL) { char name[256]; /* Common name associated with cert */ size_t namelen; /* Length of name */ time_t expiration; /* Expiration date of cert */ unsigned char md5_digest[16]; /* MD5 result */ namelen = sizeof(name) - 1; if (gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_COMMON_NAME, 0, 0, name, &namelen) >= 0) name[namelen] = '\0'; else strlcpy(name, "unknown", sizeof(name)); expiration = gnutls_x509_crt_get_expiration_time(cert); cupsHashData("md5", first->data, first->datalen, md5_digest, sizeof(md5_digest)); snprintf(buffer, bufsize, "%s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", name, httpGetDateString(expiration), md5_digest[0], md5_digest[1], md5_digest[2], md5_digest[3], md5_digest[4], md5_digest[5], md5_digest[6], md5_digest[7], md5_digest[8], md5_digest[9], md5_digest[10], md5_digest[11], md5_digest[12], md5_digest[13], md5_digest[14], md5_digest[15]); gnutls_x509_crt_deinit(cert); } DEBUG_printf(("1httpCredentialsString: Returning \"%s\".", buffer)); return (strlen(buffer)); } /* * 'httpLoadCredentials()' - Load X.509 credentials from a keychain file. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 0 on success, -1 on error */ httpLoadCredentials( const char *path, /* I - Keychain/PKCS#12 path */ cups_array_t **credentials, /* IO - Credentials */ const char *common_name) /* I - Common name for credentials */ { cups_file_t *fp; /* Certificate file */ char filename[1024], /* filename.crt */ temp[1024], /* Temporary string */ line[256]; /* Base64-encoded line */ unsigned char *data = NULL; /* Buffer for cert data */ size_t alloc_data = 0, /* Bytes allocated */ num_data = 0; /* Bytes used */ int decoded; /* Bytes decoded */ int in_certificate = 0; /* In a certificate? */ if (!credentials || !common_name) return (-1); if (!path) path = http_gnutls_default_path(temp, sizeof(temp)); if (!path) return (-1); http_gnutls_make_path(filename, sizeof(filename), path, common_name, "crt"); if ((fp = cupsFileOpen(filename, "r")) == NULL) return (-1); while (cupsFileGets(fp, line, sizeof(line))) { if (!strcmp(line, "-----BEGIN CERTIFICATE-----")) { if (in_certificate) { /* * Missing END CERTIFICATE... */ httpFreeCredentials(*credentials); *credentials = NULL; break; } in_certificate = 1; } else if (!strcmp(line, "-----END CERTIFICATE-----")) { if (!in_certificate || !num_data) { /* * Missing data... */ httpFreeCredentials(*credentials); *credentials = NULL; break; } if (!*credentials) *credentials = cupsArrayNew(NULL, NULL); if (httpAddCredential(*credentials, data, num_data)) { httpFreeCredentials(*credentials); *credentials = NULL; break; } num_data = 0; in_certificate = 0; } else if (in_certificate) { if (alloc_data == 0) { data = malloc(2048); alloc_data = 2048; if (!data) break; } else if ((num_data + strlen(line)) >= alloc_data) { unsigned char *tdata = realloc(data, alloc_data + 1024); /* Expanded buffer */ if (!tdata) { httpFreeCredentials(*credentials); *credentials = NULL; break; } data = tdata; alloc_data += 1024; } decoded = alloc_data - num_data; httpDecode64_2((char *)data + num_data, &decoded, line); num_data += (size_t)decoded; } } cupsFileClose(fp); if (in_certificate) { /* * Missing END CERTIFICATE... */ httpFreeCredentials(*credentials); *credentials = NULL; } if (data) free(data); return (*credentials ? 0 : -1); } /* * 'httpSaveCredentials()' - Save X.509 credentials to a keychain file. * * @since CUPS 2.0/OS 10.10@ */ int /* O - -1 on error, 0 on success */ httpSaveCredentials( const char *path, /* I - Keychain/PKCS#12 path */ cups_array_t *credentials, /* I - Credentials */ const char *common_name) /* I - Common name for credentials */ { cups_file_t *fp; /* Certificate file */ char filename[1024], /* filename.crt */ nfilename[1024],/* filename.crt.N */ temp[1024], /* Temporary string */ line[256]; /* Base64-encoded line */ const unsigned char *ptr; /* Pointer into certificate */ ssize_t remaining; /* Bytes left */ http_credential_t *cred; /* Current credential */ if (!credentials || !common_name) return (-1); if (!path) path = http_gnutls_default_path(temp, sizeof(temp)); if (!path) return (-1); http_gnutls_make_path(filename, sizeof(filename), path, common_name, "crt"); snprintf(nfilename, sizeof(nfilename), "%s.N", filename); if ((fp = cupsFileOpen(nfilename, "w")) == NULL) return (-1); fchmod(cupsFileNumber(fp), 0600); for (cred = (http_credential_t *)cupsArrayFirst(credentials); cred; cred = (http_credential_t *)cupsArrayNext(credentials)) { cupsFilePuts(fp, "-----BEGIN CERTIFICATE-----\n"); for (ptr = cred->data, remaining = (ssize_t)cred->datalen; remaining > 0; remaining -= 45, ptr += 45) { httpEncode64_2(line, sizeof(line), (char *)ptr, remaining > 45 ? 45 : remaining); cupsFilePrintf(fp, "%s\n", line); } cupsFilePuts(fp, "-----END CERTIFICATE-----\n"); } cupsFileClose(fp); return (rename(nfilename, filename)); } /* * 'http_gnutls_create_credential()' - Create a single credential in the internal format. */ static gnutls_x509_crt_t /* O - Certificate */ http_gnutls_create_credential( http_credential_t *credential) /* I - Credential */ { int result; /* Result from GNU TLS */ gnutls_x509_crt_t cert; /* Certificate */ gnutls_datum_t datum; /* Data record */ DEBUG_printf(("3http_gnutls_create_credential(credential=%p)", credential)); if (!credential) return (NULL); if ((result = gnutls_x509_crt_init(&cert)) < 0) { DEBUG_printf(("4http_gnutls_create_credential: init error: %s", gnutls_strerror(result))); return (NULL); } datum.data = credential->data; datum.size = credential->datalen; if ((result = gnutls_x509_crt_import(cert, &datum, GNUTLS_X509_FMT_DER)) < 0) { DEBUG_printf(("4http_gnutls_create_credential: import error: %s", gnutls_strerror(result))); gnutls_x509_crt_deinit(cert); return (NULL); } return (cert); } /* * 'http_gnutls_default_path()' - Get the default credential store path. */ static const char * /* O - Path or NULL on error */ http_gnutls_default_path(char *buffer,/* I - Path buffer */ size_t bufsize)/* I - Size of path buffer */ { const char *home = getenv("HOME"); /* HOME environment variable */ if (getuid() && home) { snprintf(buffer, bufsize, "%s/.cups", home); if (access(buffer, 0)) { DEBUG_printf(("1http_gnutls_default_path: Making directory \"%s\".", buffer)); if (mkdir(buffer, 0700)) { DEBUG_printf(("1http_gnutls_default_path: Failed to make directory: %s", strerror(errno))); return (NULL); } } snprintf(buffer, bufsize, "%s/.cups/ssl", home); if (access(buffer, 0)) { DEBUG_printf(("1http_gnutls_default_path: Making directory \"%s\".", buffer)); if (mkdir(buffer, 0700)) { DEBUG_printf(("1http_gnutls_default_path: Failed to make directory: %s", strerror(errno))); return (NULL); } } } else strlcpy(buffer, CUPS_SERVERROOT "/ssl", bufsize); DEBUG_printf(("1http_gnutls_default_path: Using default path \"%s\".", buffer)); return (buffer); } /* * 'http_gnutls_load_crl()' - Load the certificate revocation list, if any. */ static void http_gnutls_load_crl(void) { _cupsMutexLock(&tls_mutex); if (!gnutls_x509_crl_init(&tls_crl)) { cups_file_t *fp; /* CRL file */ char filename[1024], /* site.crl */ line[256]; /* Base64-encoded line */ unsigned char *data = NULL; /* Buffer for cert data */ size_t alloc_data = 0, /* Bytes allocated */ num_data = 0; /* Bytes used */ int decoded; /* Bytes decoded */ gnutls_datum_t datum; /* Data record */ http_gnutls_make_path(filename, sizeof(filename), CUPS_SERVERROOT, "site", "crl"); if ((fp = cupsFileOpen(filename, "r")) != NULL) { while (cupsFileGets(fp, line, sizeof(line))) { if (!strcmp(line, "-----BEGIN X509 CRL-----")) { if (num_data) { /* * Missing END X509 CRL... */ break; } } else if (!strcmp(line, "-----END X509 CRL-----")) { if (!num_data) { /* * Missing data... */ break; } datum.data = data; datum.size = num_data; gnutls_x509_crl_import(tls_crl, &datum, GNUTLS_X509_FMT_PEM); num_data = 0; } else { if (alloc_data == 0) { data = malloc(2048); alloc_data = 2048; if (!data) break; } else if ((num_data + strlen(line)) >= alloc_data) { unsigned char *tdata = realloc(data, alloc_data + 1024); /* Expanded buffer */ if (!tdata) break; data = tdata; alloc_data += 1024; } decoded = alloc_data - num_data; httpDecode64_2((char *)data + num_data, &decoded, line); num_data += (size_t)decoded; } } cupsFileClose(fp); if (data) free(data); } } _cupsMutexUnlock(&tls_mutex); } /* * 'http_gnutls_make_path()' - Format a filename for a certificate or key file. */ static const char * /* O - Filename */ http_gnutls_make_path( char *buffer, /* I - Filename buffer */ size_t bufsize, /* I - Size of buffer */ const char *dirname, /* I - Directory */ const char *filename, /* I - Filename (usually hostname) */ const char *ext) /* I - Extension */ { char *bufptr, /* Pointer into buffer */ *bufend = buffer + bufsize - 1; /* End of buffer */ snprintf(buffer, bufsize, "%s/", dirname); bufptr = buffer + strlen(buffer); while (*filename && bufptr < bufend) { if (_cups_isalnum(*filename) || *filename == '-' || *filename == '.') *bufptr++ = *filename; else *bufptr++ = '_'; filename ++; } if (bufptr < bufend) *bufptr++ = '.'; strlcpy(bufptr, ext, (size_t)(bufend - bufptr + 1)); return (buffer); } /* * 'http_gnutls_read()' - Read function for the GNU TLS library. */ static ssize_t /* O - Number of bytes read or -1 on error */ http_gnutls_read( gnutls_transport_ptr_t ptr, /* I - Connection to server */ void *data, /* I - Buffer */ size_t length) /* I - Number of bytes to read */ { http_t *http; /* HTTP connection */ ssize_t bytes; /* Bytes read */ DEBUG_printf(("6http_gnutls_read(ptr=%p, data=%p, length=%d)", ptr, data, (int)length)); http = (http_t *)ptr; if (!http->blocking || http->timeout_value > 0.0) { /* * Make sure we have data before we read... */ while (!_httpWait(http, http->wait_value, 0)) { if (http->timeout_cb && (*http->timeout_cb)(http, http->timeout_data)) continue; http->error = ETIMEDOUT; return (-1); } } bytes = recv(http->fd, data, length, 0); DEBUG_printf(("6http_gnutls_read: bytes=%d", (int)bytes)); return (bytes); } /* * 'http_gnutls_write()' - Write function for the GNU TLS library. */ static ssize_t /* O - Number of bytes written or -1 on error */ http_gnutls_write( gnutls_transport_ptr_t ptr, /* I - Connection to server */ const void *data, /* I - Data buffer */ size_t length) /* I - Number of bytes to write */ { ssize_t bytes; /* Bytes written */ DEBUG_printf(("6http_gnutls_write(ptr=%p, data=%p, length=%d)", ptr, data, (int)length)); bytes = send(((http_t *)ptr)->fd, data, length, 0); DEBUG_printf(("http_gnutls_write: bytes=%d", (int)bytes)); return (bytes); } /* * '_httpTLSInitialize()' - Initialize the TLS stack. */ void _httpTLSInitialize(void) { /* * Initialize GNU TLS... */ gnutls_global_init(); } /* * '_httpTLSPending()' - Return the number of pending TLS-encrypted bytes. */ size_t /* O - Bytes available */ _httpTLSPending(http_t *http) /* I - HTTP connection */ { return (gnutls_record_check_pending(http->tls)); } /* * '_httpTLSRead()' - Read from a SSL/TLS connection. */ int /* O - Bytes read */ _httpTLSRead(http_t *http, /* I - Connection to server */ char *buf, /* I - Buffer to store data */ int len) /* I - Length of buffer */ { ssize_t result; /* Return value */ result = gnutls_record_recv(http->tls, buf, (size_t)len); if (result < 0 && !errno) { /* * Convert GNU TLS error to errno value... */ switch (result) { case GNUTLS_E_INTERRUPTED : errno = EINTR; break; case GNUTLS_E_AGAIN : errno = EAGAIN; break; default : errno = EPIPE; break; } result = -1; } return ((int)result); } /* * '_httpTLSSetCredentials()' - Set the TLS credentials. */ int /* O - Status of connection */ _httpTLSSetCredentials(http_t *http) /* I - Connection to server */ { (void)http; return (0); } /* * '_httpTLSSetOptions()' - Set TLS protocol and cipher suite options. */ void _httpTLSSetOptions(int options, /* I - Options */ int min_version, /* I - Minimum TLS version */ int max_version) /* I - Maximum TLS version */ { if (!(options & _HTTP_TLS_SET_DEFAULT) || tls_options < 0) { tls_options = options; tls_min_version = min_version; tls_max_version = max_version; } } /* * '_httpTLSStart()' - Set up SSL/TLS support on a connection. */ int /* O - 0 on success, -1 on failure */ _httpTLSStart(http_t *http) /* I - Connection to server */ { char hostname[256], /* Hostname */ *hostptr; /* Pointer into hostname */ int status; /* Status of handshake */ gnutls_certificate_credentials_t *credentials; /* TLS credentials */ char priority_string[2048]; /* Priority string */ int version; /* Current version */ double old_timeout; /* Old timeout value */ http_timeout_cb_t old_cb; /* Old timeout callback */ void *old_data; /* Old timeout data */ static const char * const versions[] =/* SSL/TLS versions */ { "VERS-SSL3.0", "VERS-TLS1.0", "VERS-TLS1.1", "VERS-TLS1.2", "VERS-TLS1.3", "VERS-TLS-ALL" }; DEBUG_printf(("3_httpTLSStart(http=%p)", http)); if (tls_options < 0) { DEBUG_puts("4_httpTLSStart: Setting defaults."); _cupsSetDefaults(); DEBUG_printf(("4_httpTLSStart: tls_options=%x", tls_options)); } if (http->mode == _HTTP_MODE_SERVER && !tls_keypath) { DEBUG_puts("4_httpTLSStart: cupsSetServerCredentials not called."); http->error = errno = EINVAL; http->status = HTTP_STATUS_ERROR; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Server credentials not set."), 1); return (-1); } credentials = (gnutls_certificate_credentials_t *) malloc(sizeof(gnutls_certificate_credentials_t)); if (credentials == NULL) { DEBUG_printf(("8_httpStartTLS: Unable to allocate credentials: %s", strerror(errno))); http->error = errno; http->status = HTTP_STATUS_ERROR; _cupsSetHTTPError(HTTP_STATUS_ERROR); return (-1); } gnutls_certificate_allocate_credentials(credentials); status = gnutls_init(&http->tls, http->mode == _HTTP_MODE_CLIENT ? GNUTLS_CLIENT : GNUTLS_SERVER); if (!status) status = gnutls_set_default_priority(http->tls); if (status) { http->error = EIO; http->status = HTTP_STATUS_ERROR; DEBUG_printf(("4_httpTLSStart: Unable to initialize common TLS parameters: %s", gnutls_strerror(status))); _cupsSetError(IPP_STATUS_ERROR_CUPS_PKI, gnutls_strerror(status), 0); gnutls_deinit(http->tls); gnutls_certificate_free_credentials(*credentials); free(credentials); http->tls = NULL; return (-1); } if (http->mode == _HTTP_MODE_CLIENT) { /* * Client: get the hostname to use for TLS... */ if (httpAddrLocalhost(http->hostaddr)) { strlcpy(hostname, "localhost", sizeof(hostname)); } else { /* * Otherwise make sure the hostname we have does not end in a trailing dot. */ strlcpy(hostname, http->hostname, sizeof(hostname)); if ((hostptr = hostname + strlen(hostname) - 1) >= hostname && *hostptr == '.') *hostptr = '\0'; } status = gnutls_server_name_set(http->tls, GNUTLS_NAME_DNS, hostname, strlen(hostname)); } else { /* * Server: get certificate and private key... */ char crtfile[1024], /* Certificate file */ keyfile[1024]; /* Private key file */ int have_creds = 0; /* Have credentials? */ if (http->fields[HTTP_FIELD_HOST][0]) { /* * Use hostname for TLS upgrade... */ strlcpy(hostname, http->fields[HTTP_FIELD_HOST], sizeof(hostname)); } else { /* * Resolve hostname from connection address... */ http_addr_t addr; /* Connection address */ socklen_t addrlen; /* Length of address */ addrlen = sizeof(addr); if (getsockname(http->fd, (struct sockaddr *)&addr, &addrlen)) { DEBUG_printf(("4_httpTLSStart: Unable to get socket address: %s", strerror(errno))); hostname[0] = '\0'; } else if (httpAddrLocalhost(&addr)) hostname[0] = '\0'; else { httpAddrLookup(&addr, hostname, sizeof(hostname)); DEBUG_printf(("4_httpTLSStart: Resolved socket address to \"%s\".", hostname)); } } if (isdigit(hostname[0] & 255) || hostname[0] == '[') hostname[0] = '\0'; /* Don't allow numeric addresses */ if (hostname[0]) { /* * First look in the CUPS keystore... */ http_gnutls_make_path(crtfile, sizeof(crtfile), tls_keypath, hostname, "crt"); http_gnutls_make_path(keyfile, sizeof(keyfile), tls_keypath, hostname, "key"); if (access(crtfile, R_OK) || access(keyfile, R_OK)) { /* * No CUPS-managed certs, look for CA certs... */ char cacrtfile[1024], cakeyfile[1024]; /* CA cert files */ snprintf(cacrtfile, sizeof(cacrtfile), "/etc/letsencrypt/live/%s/fullchain.pem", hostname); snprintf(cakeyfile, sizeof(cakeyfile), "/etc/letsencrypt/live/%s/privkey.pem", hostname); if ((access(cacrtfile, R_OK) || access(cakeyfile, R_OK)) && (hostptr = strchr(hostname, '.')) != NULL) { /* * Try just domain name... */ hostptr ++; if (strchr(hostptr, '.')) { snprintf(cacrtfile, sizeof(cacrtfile), "/etc/letsencrypt/live/%s/fullchain.pem", hostptr); snprintf(cakeyfile, sizeof(cakeyfile), "/etc/letsencrypt/live/%s/privkey.pem", hostptr); } } if (!access(cacrtfile, R_OK) && !access(cakeyfile, R_OK)) { /* * Use the CA certs... */ strlcpy(crtfile, cacrtfile, sizeof(crtfile)); strlcpy(keyfile, cakeyfile, sizeof(keyfile)); } } have_creds = !access(crtfile, R_OK) && !access(keyfile, R_OK); } else if (tls_common_name) { /* * First look in the CUPS keystore... */ http_gnutls_make_path(crtfile, sizeof(crtfile), tls_keypath, tls_common_name, "crt"); http_gnutls_make_path(keyfile, sizeof(keyfile), tls_keypath, tls_common_name, "key"); if (access(crtfile, R_OK) || access(keyfile, R_OK)) { /* * No CUPS-managed certs, look for CA certs... */ char cacrtfile[1024], cakeyfile[1024]; /* CA cert files */ snprintf(cacrtfile, sizeof(cacrtfile), "/etc/letsencrypt/live/%s/fullchain.pem", tls_common_name); snprintf(cakeyfile, sizeof(cakeyfile), "/etc/letsencrypt/live/%s/privkey.pem", tls_common_name); if ((access(cacrtfile, R_OK) || access(cakeyfile, R_OK)) && (hostptr = strchr(tls_common_name, '.')) != NULL) { /* * Try just domain name... */ hostptr ++; if (strchr(hostptr, '.')) { snprintf(cacrtfile, sizeof(cacrtfile), "/etc/letsencrypt/live/%s/fullchain.pem", hostptr); snprintf(cakeyfile, sizeof(cakeyfile), "/etc/letsencrypt/live/%s/privkey.pem", hostptr); } } if (!access(cacrtfile, R_OK) && !access(cakeyfile, R_OK)) { /* * Use the CA certs... */ strlcpy(crtfile, cacrtfile, sizeof(crtfile)); strlcpy(keyfile, cakeyfile, sizeof(keyfile)); } } have_creds = !access(crtfile, R_OK) && !access(keyfile, R_OK); } if (!have_creds && tls_auto_create && (hostname[0] || tls_common_name)) { DEBUG_printf(("4_httpTLSStart: Auto-create credentials for \"%s\".", hostname[0] ? hostname : tls_common_name)); if (!cupsMakeServerCredentials(tls_keypath, hostname[0] ? hostname : tls_common_name, 0, NULL, time(NULL) + 365 * 86400)) { DEBUG_puts("4_httpTLSStart: cupsMakeServerCredentials failed."); http->error = errno = EINVAL; http->status = HTTP_STATUS_ERROR; _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to create server credentials."), 1); return (-1); } } DEBUG_printf(("4_httpTLSStart: Using certificate \"%s\" and private key \"%s\".", crtfile, keyfile)); if (!status) status = gnutls_certificate_set_x509_key_file(*credentials, crtfile, keyfile, GNUTLS_X509_FMT_PEM); } if (!status) status = gnutls_credentials_set(http->tls, GNUTLS_CRD_CERTIFICATE, *credentials); if (status) { http->error = EIO; http->status = HTTP_STATUS_ERROR; DEBUG_printf(("4_httpTLSStart: Unable to complete client/server setup: %s", gnutls_strerror(status))); _cupsSetError(IPP_STATUS_ERROR_CUPS_PKI, gnutls_strerror(status), 0); gnutls_deinit(http->tls); gnutls_certificate_free_credentials(*credentials); free(credentials); http->tls = NULL; return (-1); } strlcpy(priority_string, "NORMAL", sizeof(priority_string)); if (tls_max_version < _HTTP_TLS_MAX) { /* * Require specific TLS versions... */ strlcat(priority_string, ":-VERS-TLS-ALL", sizeof(priority_string)); for (version = tls_min_version; version <= tls_max_version; version ++) { strlcat(priority_string, ":+", sizeof(priority_string)); strlcat(priority_string, versions[version], sizeof(priority_string)); } } else if (tls_min_version == _HTTP_TLS_SSL3) { /* * Allow all versions of TLS and SSL/3.0... */ strlcat(priority_string, ":+VERS-TLS-ALL:+VERS-SSL3.0", sizeof(priority_string)); } else { /* * Require a minimum version... */ strlcat(priority_string, ":+VERS-TLS-ALL", sizeof(priority_string)); for (version = 0; version < tls_min_version; version ++) { strlcat(priority_string, ":-", sizeof(priority_string)); strlcat(priority_string, versions[version], sizeof(priority_string)); } } if (tls_options & _HTTP_TLS_ALLOW_RC4) strlcat(priority_string, ":+ARCFOUR-128", sizeof(priority_string)); else strlcat(priority_string, ":!ARCFOUR-128", sizeof(priority_string)); strlcat(priority_string, ":!ANON-DH", sizeof(priority_string)); if (tls_options & _HTTP_TLS_DENY_CBC) strlcat(priority_string, ":!AES-128-CBC:!AES-256-CBC:!CAMELLIA-128-CBC:!CAMELLIA-256-CBC:!3DES-CBC", sizeof(priority_string)); #ifdef HAVE_GNUTLS_PRIORITY_SET_DIRECT gnutls_priority_set_direct(http->tls, priority_string, NULL); #else gnutls_priority_t priority; /* Priority */ gnutls_priority_init(&priority, priority_string, NULL); gnutls_priority_set(http->tls, priority); gnutls_priority_deinit(priority); #endif /* HAVE_GNUTLS_PRIORITY_SET_DIRECT */ gnutls_transport_set_ptr(http->tls, (gnutls_transport_ptr_t)http); gnutls_transport_set_pull_function(http->tls, http_gnutls_read); #ifdef HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION gnutls_transport_set_pull_timeout_function(http->tls, (gnutls_pull_timeout_func)httpWait); #endif /* HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION */ gnutls_transport_set_push_function(http->tls, http_gnutls_write); /* * Enforce a minimum timeout of 10 seconds for the TLS handshake... */ old_timeout = http->timeout_value; old_cb = http->timeout_cb; old_data = http->timeout_data; if (!old_cb || old_timeout < 10.0) { DEBUG_puts("4_httpTLSStart: Setting timeout to 10 seconds."); httpSetTimeout(http, 10.0, NULL, NULL); } /* * Do the TLS handshake... */ while ((status = gnutls_handshake(http->tls)) != GNUTLS_E_SUCCESS) { DEBUG_printf(("5_httpStartTLS: gnutls_handshake returned %d (%s)", status, gnutls_strerror(status))); if (gnutls_error_is_fatal(status)) { http->error = EIO; http->status = HTTP_STATUS_ERROR; _cupsSetError(IPP_STATUS_ERROR_CUPS_PKI, gnutls_strerror(status), 0); gnutls_deinit(http->tls); gnutls_certificate_free_credentials(*credentials); free(credentials); http->tls = NULL; httpSetTimeout(http, old_timeout, old_cb, old_data); return (-1); } } /* * Restore the previous timeout settings... */ httpSetTimeout(http, old_timeout, old_cb, old_data); http->tls_credentials = credentials; return (0); } /* * '_httpTLSStop()' - Shut down SSL/TLS on a connection. */ void _httpTLSStop(http_t *http) /* I - Connection to server */ { int error; /* Error code */ error = gnutls_bye(http->tls, http->mode == _HTTP_MODE_CLIENT ? GNUTLS_SHUT_RDWR : GNUTLS_SHUT_WR); if (error != GNUTLS_E_SUCCESS) _cupsSetError(IPP_STATUS_ERROR_INTERNAL, gnutls_strerror(errno), 0); gnutls_deinit(http->tls); http->tls = NULL; if (http->tls_credentials) { gnutls_certificate_free_credentials(*(http->tls_credentials)); free(http->tls_credentials); http->tls_credentials = NULL; } } /* * '_httpTLSWrite()' - Write to a SSL/TLS connection. */ int /* O - Bytes written */ _httpTLSWrite(http_t *http, /* I - Connection to server */ const char *buf, /* I - Buffer holding data */ int len) /* I - Length of buffer */ { ssize_t result; /* Return value */ DEBUG_printf(("2http_write_ssl(http=%p, buf=%p, len=%d)", http, buf, len)); result = gnutls_record_send(http->tls, buf, (size_t)len); if (result < 0 && !errno) { /* * Convert GNU TLS error to errno value... */ switch (result) { case GNUTLS_E_INTERRUPTED : errno = EINTR; break; case GNUTLS_E_AGAIN : errno = EAGAIN; break; default : errno = EPIPE; break; } result = -1; } DEBUG_printf(("3http_write_ssl: Returning %d.", (int)result)); return ((int)result); } cups-2.2.7/cups/tls-sspi.c000664 000765 000024 00000211402 13255074424 016047 0ustar00msweetstaff000000 000000 /* * TLS support for CUPS on Windows using the Security Support Provider * Interface (SSPI). * * Copyright 2010-2018 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /**** This file is included from tls.c ****/ /* * Include necessary headers... */ #include "debug-private.h" /* * Include necessary libraries... */ #pragma comment(lib, "Crypt32.lib") #pragma comment(lib, "Secur32.lib") #pragma comment(lib, "Ws2_32.lib") /* * Constants... */ #ifndef SECURITY_FLAG_IGNORE_UNKNOWN_CA # define SECURITY_FLAG_IGNORE_UNKNOWN_CA 0x00000100 /* Untrusted root */ #endif /* SECURITY_FLAG_IGNORE_UNKNOWN_CA */ #ifndef SECURITY_FLAG_IGNORE_CERT_CN_INVALID # define SECURITY_FLAG_IGNORE_CERT_CN_INVALID 0x00001000 /* Common name does not match */ #endif /* !SECURITY_FLAG_IGNORE_CERT_CN_INVALID */ #ifndef SECURITY_FLAG_IGNORE_CERT_DATE_INVALID # define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID 0x00002000 /* Expired X509 Cert. */ #endif /* !SECURITY_FLAG_IGNORE_CERT_DATE_INVALID */ /* * Local globals... */ static int tls_options = -1,/* Options for TLS connections */ tls_min_version = _HTTP_TLS_1_0, tls_max_version = _HTTP_TLS_MAX; /* * Local functions... */ static _http_sspi_t *http_sspi_alloc(void); static int http_sspi_client(http_t *http, const char *hostname); static PCCERT_CONTEXT http_sspi_create_credential(http_credential_t *cred); static BOOL http_sspi_find_credentials(http_t *http, const LPWSTR containerName, const char *common_name); static void http_sspi_free(_http_sspi_t *sspi); static BOOL http_sspi_make_credentials(_http_sspi_t *sspi, const LPWSTR containerName, const char *common_name, _http_mode_t mode, int years); static int http_sspi_server(http_t *http, const char *hostname); static void http_sspi_set_allows_any_root(_http_sspi_t *sspi, BOOL allow); static void http_sspi_set_allows_expired_certs(_http_sspi_t *sspi, BOOL allow); static const char *http_sspi_strerror(char *buffer, size_t bufsize, DWORD code); static DWORD http_sspi_verify(PCCERT_CONTEXT cert, const char *common_name, DWORD dwCertFlags); /* * 'cupsMakeServerCredentials()' - Make a self-signed certificate and private key pair. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 1 on success, 0 on failure */ cupsMakeServerCredentials( const char *path, /* I - Keychain path or @code NULL@ for default */ const char *common_name, /* I - Common name */ int num_alt_names, /* I - Number of subject alternate names */ const char **alt_names, /* I - Subject Alternate Names */ time_t expiration_date) /* I - Expiration date */ { _http_sspi_t *sspi; /* SSPI data */ int ret; /* Return value */ DEBUG_printf(("cupsMakeServerCredentials(path=\"%s\", common_name=\"%s\", num_alt_names=%d, alt_names=%p, expiration_date=%d)", path, common_name, num_alt_names, alt_names, (int)expiration_date)); (void)path; (void)num_alt_names; (void)alt_names; sspi = http_sspi_alloc(); ret = http_sspi_make_credentials(sspi, L"ServerContainer", common_name, _HTTP_MODE_SERVER, (int)((expiration_date - time(NULL) + 86399) / 86400 / 365)); http_sspi_free(sspi); return (ret); } /* * 'cupsSetServerCredentials()' - Set the default server credentials. * * Note: The server credentials are used by all threads in the running process. * This function is threadsafe. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 1 on success, 0 on failure */ cupsSetServerCredentials( const char *path, /* I - Keychain path or @code NULL@ for default */ const char *common_name, /* I - Default common name for server */ int auto_create) /* I - 1 = automatically create self-signed certificates */ { DEBUG_printf(("cupsSetServerCredentials(path=\"%s\", common_name=\"%s\", auto_create=%d)", path, common_name, auto_create)); (void)path; (void)common_name; (void)auto_create; return (0); } /* * 'httpCopyCredentials()' - Copy the credentials associated with the peer in * an encrypted connection. * * @since CUPS 1.5/macOS 10.7@ */ int /* O - Status of call (0 = success) */ httpCopyCredentials( http_t *http, /* I - Connection to server */ cups_array_t **credentials) /* O - Array of credentials */ { DEBUG_printf(("httpCopyCredentials(http=%p, credentials=%p)", http, credentials)); if (!http || !http->tls || !http->tls->remoteCert || !credentials) { if (credentials) *credentials = NULL; return (-1); } *credentials = cupsArrayNew(NULL, NULL); httpAddCredential(*credentials, http->tls->remoteCert->pbCertEncoded, http->tls->remoteCert->cbCertEncoded); return (0); } /* * '_httpCreateCredentials()' - Create credentials in the internal format. */ http_tls_credentials_t /* O - Internal credentials */ _httpCreateCredentials( cups_array_t *credentials) /* I - Array of credentials */ { return (http_sspi_create_credential((http_credential_t *)cupsArrayFirst(credentials))); } /* * 'httpCredentialsAreValidForName()' - Return whether the credentials are valid for the given name. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 1 if valid, 0 otherwise */ httpCredentialsAreValidForName( cups_array_t *credentials, /* I - Credentials */ const char *common_name) /* I - Name to check */ { int valid = 1; /* Valid name? */ PCCERT_CONTEXT cert = http_sspi_create_credential((http_credential_t *)cupsArrayFirst(credentials)); /* Certificate */ char cert_name[1024]; /* Name from certificate */ if (cert) { if (CertNameToStr(X509_ASN_ENCODING, &(cert->pCertInfo->Subject), CERT_SIMPLE_NAME_STR, cert_name, sizeof(cert_name))) { /* * Extract common name at end... */ char *ptr = strrchr(cert_name, ','); if (ptr && ptr[1]) _cups_strcpy(cert_name, ptr + 2); } else strlcpy(cert_name, "unknown", sizeof(cert_name)); CertFreeCertificateContext(cert); } else strlcpy(cert_name, "unknown", sizeof(cert_name)); /* * Compare the common names... */ if (_cups_strcasecmp(common_name, cert_name)) { /* * Not an exact match for the common name, check for wildcard certs... */ const char *domain = strchr(common_name, '.'); /* Domain in common name */ if (strncmp(cert_name, "*.", 2) || !domain || _cups_strcasecmp(domain, cert_name + 1)) { /* * Not a wildcard match. */ /* TODO: Check subject alternate names */ valid = 0; } } return (valid); } /* * 'httpCredentialsGetTrust()' - Return the trust of credentials. * * @since CUPS 2.0/OS 10.10@ */ http_trust_t /* O - Level of trust */ httpCredentialsGetTrust( cups_array_t *credentials, /* I - Credentials */ const char *common_name) /* I - Common name for trust lookup */ { http_trust_t trust = HTTP_TRUST_OK; /* Level of trust */ PCCERT_CONTEXT cert = NULL; /* Certificate to validate */ DWORD certFlags = 0; /* Cert verification flags */ _cups_globals_t *cg = _cupsGlobals(); /* Per-thread global data */ if (!common_name) return (HTTP_TRUST_UNKNOWN); cert = http_sspi_create_credential((http_credential_t *)cupsArrayFirst(credentials)); if (!cert) return (HTTP_TRUST_UNKNOWN); if (cg->any_root < 0) _cupsSetDefaults(); if (cg->any_root) certFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA; if (cg->expired_certs) certFlags |= SECURITY_FLAG_IGNORE_CERT_DATE_INVALID; if (!cg->validate_certs) certFlags |= SECURITY_FLAG_IGNORE_CERT_CN_INVALID; if (http_sspi_verify(cert, common_name, certFlags) != SEC_E_OK) trust = HTTP_TRUST_INVALID; CertFreeCertificateContext(cert); return (trust); } /* * 'httpCredentialsGetExpiration()' - Return the expiration date of the credentials. * * @since CUPS 2.0/OS 10.10@ */ time_t /* O - Expiration date of credentials */ httpCredentialsGetExpiration( cups_array_t *credentials) /* I - Credentials */ { time_t expiration_date = 0; /* Expiration data of credentials */ PCCERT_CONTEXT cert = http_sspi_create_credential((http_credential_t *)cupsArrayFirst(credentials)); /* Certificate */ if (cert) { SYSTEMTIME systime; /* System time */ struct tm tm; /* UNIX date/time */ FileTimeToSystemTime(&(cert->pCertInfo->NotAfter), &systime); tm.tm_year = systime.wYear - 1900; tm.tm_mon = systime.wMonth - 1; tm.tm_mday = systime.wDay; tm.tm_hour = systime.wHour; tm.tm_min = systime.wMinute; tm.tm_sec = systime.wSecond; expiration_date = mktime(&tm); CertFreeCertificateContext(cert); } return (expiration_date); } /* * 'httpCredentialsString()' - Return a string representing the credentials. * * @since CUPS 2.0/OS 10.10@ */ size_t /* O - Total size of credentials string */ httpCredentialsString( cups_array_t *credentials, /* I - Credentials */ char *buffer, /* I - Buffer or @code NULL@ */ size_t bufsize) /* I - Size of buffer */ { http_credential_t *first = (http_credential_t *)cupsArrayFirst(credentials); /* First certificate */ PCCERT_CONTEXT cert; /* Certificate */ DEBUG_printf(("httpCredentialsString(credentials=%p, buffer=%p, bufsize=" CUPS_LLFMT ")", credentials, buffer, CUPS_LLCAST bufsize)); if (!buffer) return (0); if (buffer && bufsize > 0) *buffer = '\0'; cert = http_sspi_create_credential(first); if (cert) { char cert_name[256]; /* Common name */ SYSTEMTIME systime; /* System time */ struct tm tm; /* UNIX date/time */ time_t expiration; /* Expiration date of cert */ unsigned char md5_digest[16]; /* MD5 result */ FileTimeToSystemTime(&(cert->pCertInfo->NotAfter), &systime); tm.tm_year = systime.wYear - 1900; tm.tm_mon = systime.wMonth - 1; tm.tm_mday = systime.wDay; tm.tm_hour = systime.wHour; tm.tm_min = systime.wMinute; tm.tm_sec = systime.wSecond; expiration = mktime(&tm); if (CertNameToStr(X509_ASN_ENCODING, &(cert->pCertInfo->Subject), CERT_SIMPLE_NAME_STR, cert_name, sizeof(cert_name))) { /* * Extract common name at end... */ char *ptr = strrchr(cert_name, ','); if (ptr && ptr[1]) _cups_strcpy(cert_name, ptr + 2); } else strlcpy(cert_name, "unknown", sizeof(cert_name)); cupsHashData("md5", first->data, first->datalen, md5_digest, sizeof(md5_digest)); snprintf(buffer, bufsize, "%s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", cert_name, httpGetDateString(expiration), md5_digest[0], md5_digest[1], md5_digest[2], md5_digest[3], md5_digest[4], md5_digest[5], md5_digest[6], md5_digest[7], md5_digest[8], md5_digest[9], md5_digest[10], md5_digest[11], md5_digest[12], md5_digest[13], md5_digest[14], md5_digest[15]); CertFreeCertificateContext(cert); } DEBUG_printf(("1httpCredentialsString: Returning \"%s\".", buffer)); return (strlen(buffer)); } /* * '_httpFreeCredentials()' - Free internal credentials. */ void _httpFreeCredentials( http_tls_credentials_t credentials) /* I - Internal credentials */ { if (!credentials) return; CertFreeCertificateContext(credentials); } /* * 'httpLoadCredentials()' - Load X.509 credentials from a keychain file. * * @since CUPS 2.0/OS 10.10@ */ int /* O - 0 on success, -1 on error */ httpLoadCredentials( const char *path, /* I - Keychain path or @code NULL@ for default */ cups_array_t **credentials, /* IO - Credentials */ const char *common_name) /* I - Common name for credentials */ { HCERTSTORE store = NULL; /* Certificate store */ PCCERT_CONTEXT storedContext = NULL; /* Context created from the store */ DWORD dwSize = 0; /* 32 bit size */ PBYTE p = NULL; /* Temporary storage */ HCRYPTPROV hProv = (HCRYPTPROV)NULL; /* Handle to a CSP */ CERT_NAME_BLOB sib; /* Arbitrary array of bytes */ #ifdef DEBUG char error[1024]; /* Error message buffer */ #endif /* DEBUG */ DEBUG_printf(("httpLoadCredentials(path=\"%s\", credentials=%p, common_name=\"%s\")", path, credentials, common_name)); (void)path; if (credentials) { *credentials = NULL; } else { DEBUG_puts("1httpLoadCredentials: NULL credentials pointer, returning -1."); return (-1); } if (!common_name) { DEBUG_puts("1httpLoadCredentials: Bad common name, returning -1."); return (-1); } if (!CryptAcquireContextW(&hProv, L"RememberedContainer", MS_DEF_PROV_W, PROV_RSA_FULL, CRYPT_NEWKEYSET | CRYPT_MACHINE_KEYSET)) { if (GetLastError() == NTE_EXISTS) { if (!CryptAcquireContextW(&hProv, L"RememberedContainer", MS_DEF_PROV_W, PROV_RSA_FULL, CRYPT_MACHINE_KEYSET)) { DEBUG_printf(("1httpLoadCredentials: CryptAcquireContext failed: %s", http_sspi_strerror(error, sizeof(error), GetLastError()))); goto cleanup; } } } store = CertOpenStore(CERT_STORE_PROV_SYSTEM, X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, hProv, CERT_SYSTEM_STORE_LOCAL_MACHINE | CERT_STORE_NO_CRYPT_RELEASE_FLAG | CERT_STORE_OPEN_EXISTING_FLAG, L"MY"); if (!store) { DEBUG_printf(("1httpLoadCredentials: CertOpenSystemStore failed: %s", http_sspi_strerror(error, sizeof(error), GetLastError()))); goto cleanup; } dwSize = 0; if (!CertStrToName(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, NULL, &dwSize, NULL)) { DEBUG_printf(("1httpLoadCredentials: CertStrToName failed: %s", http_sspi_strerror(error, sizeof(error), GetLastError()))); goto cleanup; } p = (PBYTE)malloc(dwSize); if (!p) { DEBUG_printf(("1httpLoadCredentials: malloc failed for %d bytes.", dwSize)); goto cleanup; } if (!CertStrToName(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, p, &dwSize, NULL)) { DEBUG_printf(("1httpLoadCredentials: CertStrToName failed: %s", http_sspi_strerror(error, sizeof(error), GetLastError()))); goto cleanup; } sib.cbData = dwSize; sib.pbData = p; storedContext = CertFindCertificateInStore(store, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_SUBJECT_NAME, &sib, NULL); if (!storedContext) { DEBUG_printf(("1httpLoadCredentials: Unable to find credentials for \"%s\".", common_name)); goto cleanup; } *credentials = cupsArrayNew(NULL, NULL); httpAddCredential(*credentials, storedContext->pbCertEncoded, storedContext->cbCertEncoded); cleanup: /* * Cleanup */ if (storedContext) CertFreeCertificateContext(storedContext); if (p) free(p); if (store) CertCloseStore(store, 0); if (hProv) CryptReleaseContext(hProv, 0); DEBUG_printf(("1httpLoadCredentials: Returning %d.", *credentials ? 0 : -1)); return (*credentials ? 0 : -1); } /* * 'httpSaveCredentials()' - Save X.509 credentials to a keychain file. * * @since CUPS 2.0/OS 10.10@ */ int /* O - -1 on error, 0 on success */ httpSaveCredentials( const char *path, /* I - Keychain path or @code NULL@ for default */ cups_array_t *credentials, /* I - Credentials */ const char *common_name) /* I - Common name for credentials */ { HCERTSTORE store = NULL; /* Certificate store */ PCCERT_CONTEXT storedContext = NULL; /* Context created from the store */ PCCERT_CONTEXT createdContext = NULL; /* Context created by us */ DWORD dwSize = 0; /* 32 bit size */ PBYTE p = NULL; /* Temporary storage */ HCRYPTPROV hProv = (HCRYPTPROV)NULL; /* Handle to a CSP */ CRYPT_KEY_PROV_INFO ckp; /* Handle to crypto key */ int ret = -1; /* Return value */ #ifdef DEBUG char error[1024]; /* Error message buffer */ #endif /* DEBUG */ DEBUG_printf(("httpSaveCredentials(path=\"%s\", credentials=%p, common_name=\"%s\")", path, credentials, common_name)); (void)path; if (!common_name) { DEBUG_puts("1httpSaveCredentials: Bad common name, returning -1."); return (-1); } createdContext = http_sspi_create_credential((http_credential_t *)cupsArrayFirst(credentials)); if (!createdContext) { DEBUG_puts("1httpSaveCredentials: Bad credentials, returning -1."); return (-1); } if (!CryptAcquireContextW(&hProv, L"RememberedContainer", MS_DEF_PROV_W, PROV_RSA_FULL, CRYPT_NEWKEYSET | CRYPT_MACHINE_KEYSET)) { if (GetLastError() == NTE_EXISTS) { if (!CryptAcquireContextW(&hProv, L"RememberedContainer", MS_DEF_PROV_W, PROV_RSA_FULL, CRYPT_MACHINE_KEYSET)) { DEBUG_printf(("1httpSaveCredentials: CryptAcquireContext failed: %s", http_sspi_strerror(error, sizeof(error), GetLastError()))); goto cleanup; } } } store = CertOpenStore(CERT_STORE_PROV_SYSTEM, X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, hProv, CERT_SYSTEM_STORE_LOCAL_MACHINE | CERT_STORE_NO_CRYPT_RELEASE_FLAG | CERT_STORE_OPEN_EXISTING_FLAG, L"MY"); if (!store) { DEBUG_printf(("1httpSaveCredentials: CertOpenSystemStore failed: %s", http_sspi_strerror(error, sizeof(error), GetLastError()))); goto cleanup; } dwSize = 0; if (!CertStrToName(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, NULL, &dwSize, NULL)) { DEBUG_printf(("1httpSaveCredentials: CertStrToName failed: %s", http_sspi_strerror(error, sizeof(error), GetLastError()))); goto cleanup; } p = (PBYTE)malloc(dwSize); if (!p) { DEBUG_printf(("1httpSaveCredentials: malloc failed for %d bytes.", dwSize)); goto cleanup; } if (!CertStrToName(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, p, &dwSize, NULL)) { DEBUG_printf(("1httpSaveCredentials: CertStrToName failed: %s", http_sspi_strerror(error, sizeof(error), GetLastError()))); goto cleanup; } /* * Add the created context to the named store, and associate it with the named * container... */ if (!CertAddCertificateContextToStore(store, createdContext, CERT_STORE_ADD_REPLACE_EXISTING, &storedContext)) { DEBUG_printf(("1httpSaveCredentials: CertAddCertificateContextToStore failed: %s", http_sspi_strerror(error, sizeof(error), GetLastError()))); goto cleanup; } ZeroMemory(&ckp, sizeof(ckp)); ckp.pwszContainerName = L"RememberedContainer"; ckp.pwszProvName = MS_DEF_PROV_W; ckp.dwProvType = PROV_RSA_FULL; ckp.dwFlags = CRYPT_MACHINE_KEYSET; ckp.dwKeySpec = AT_KEYEXCHANGE; if (!CertSetCertificateContextProperty(storedContext, CERT_KEY_PROV_INFO_PROP_ID, 0, &ckp)) { DEBUG_printf(("1httpSaveCredentials: CertSetCertificateContextProperty failed: %s", http_sspi_strerror(error, sizeof(error), GetLastError()))); goto cleanup; } ret = 0; cleanup: /* * Cleanup */ if (createdContext) CertFreeCertificateContext(createdContext); if (storedContext) CertFreeCertificateContext(storedContext); if (p) free(p); if (store) CertCloseStore(store, 0); if (hProv) CryptReleaseContext(hProv, 0); DEBUG_printf(("1httpSaveCredentials: Returning %d.", ret)); return (ret); } /* * '_httpTLSInitialize()' - Initialize the TLS stack. */ void _httpTLSInitialize(void) { /* * Nothing to do... */ } /* * '_httpTLSPending()' - Return the number of pending TLS-encrypted bytes. */ size_t /* O - Bytes available */ _httpTLSPending(http_t *http) /* I - HTTP connection */ { if (http->tls) return (http->tls->readBufferUsed); else return (0); } /* * '_httpTLSRead()' - Read from a SSL/TLS connection. */ int /* O - Bytes read */ _httpTLSRead(http_t *http, /* I - HTTP connection */ char *buf, /* I - Buffer to store data */ int len) /* I - Length of buffer */ { int i; /* Looping var */ _http_sspi_t *sspi = http->tls; /* SSPI data */ SecBufferDesc message; /* Array of SecBuffer struct */ SecBuffer buffers[4] = { 0 }; /* Security package buffer */ int num = 0; /* Return value */ PSecBuffer pDataBuffer; /* Data buffer */ PSecBuffer pExtraBuffer; /* Excess data buffer */ SECURITY_STATUS scRet; /* SSPI status */ DEBUG_printf(("4_httpTLSRead(http=%p, buf=%p, len=%d)", http, buf, len)); /* * If there are bytes that have already been decrypted and have not yet been * read, return those... */ if (sspi->readBufferUsed > 0) { int bytesToCopy = min(sspi->readBufferUsed, len); /* Number of bytes to copy */ memcpy(buf, sspi->readBuffer, bytesToCopy); sspi->readBufferUsed -= bytesToCopy; if (sspi->readBufferUsed > 0) memmove(sspi->readBuffer, sspi->readBuffer + bytesToCopy, sspi->readBufferUsed); DEBUG_printf(("5_httpTLSRead: Returning %d bytes previously decrypted.", bytesToCopy)); return (bytesToCopy); } /* * Initialize security buffer structs */ message.ulVersion = SECBUFFER_VERSION; message.cBuffers = 4; message.pBuffers = buffers; do { /* * If there is not enough space in the buffer, then increase its size... */ if (sspi->decryptBufferLength <= sspi->decryptBufferUsed) { BYTE *temp; /* New buffer */ if (sspi->decryptBufferLength >= 262144) { WSASetLastError(E_OUTOFMEMORY); DEBUG_puts("_httpTLSRead: Decryption buffer too large (>256k)"); return (-1); } if ((temp = realloc(sspi->decryptBuffer, sspi->decryptBufferLength + 4096)) == NULL) { DEBUG_printf(("_httpTLSRead: Unable to allocate %d byte decryption buffer.", sspi->decryptBufferLength + 4096)); WSASetLastError(E_OUTOFMEMORY); return (-1); } sspi->decryptBufferLength += 4096; sspi->decryptBuffer = temp; DEBUG_printf(("_httpTLSRead: Resized decryption buffer to %d bytes.", sspi->decryptBufferLength)); } buffers[0].pvBuffer = sspi->decryptBuffer; buffers[0].cbBuffer = (unsigned long)sspi->decryptBufferUsed; buffers[0].BufferType = SECBUFFER_DATA; buffers[1].BufferType = SECBUFFER_EMPTY; buffers[2].BufferType = SECBUFFER_EMPTY; buffers[3].BufferType = SECBUFFER_EMPTY; DEBUG_printf(("5_httpTLSRead: decryptBufferUsed=%d", sspi->decryptBufferUsed)); scRet = DecryptMessage(&sspi->context, &message, 0, NULL); if (scRet == SEC_E_INCOMPLETE_MESSAGE) { num = recv(http->fd, sspi->decryptBuffer + sspi->decryptBufferUsed, (int)(sspi->decryptBufferLength - sspi->decryptBufferUsed), 0); if (num < 0) { DEBUG_printf(("5_httpTLSRead: recv failed: %d", WSAGetLastError())); return (-1); } else if (num == 0) { DEBUG_puts("5_httpTLSRead: Server disconnected."); return (0); } DEBUG_printf(("5_httpTLSRead: Read %d bytes into decryption buffer.", num)); sspi->decryptBufferUsed += num; } } while (scRet == SEC_E_INCOMPLETE_MESSAGE); if (scRet == SEC_I_CONTEXT_EXPIRED) { DEBUG_puts("5_httpTLSRead: Context expired."); WSASetLastError(WSAECONNRESET); return (-1); } else if (scRet != SEC_E_OK) { DEBUG_printf(("5_httpTLSRead: DecryptMessage failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), scRet))); WSASetLastError(WSASYSCALLFAILURE); return (-1); } /* * The decryption worked. Now, locate data buffer. */ pDataBuffer = NULL; pExtraBuffer = NULL; for (i = 1; i < 4; i++) { if (buffers[i].BufferType == SECBUFFER_DATA) pDataBuffer = &buffers[i]; else if (!pExtraBuffer && (buffers[i].BufferType == SECBUFFER_EXTRA)) pExtraBuffer = &buffers[i]; } /* * If a data buffer is found, then copy the decrypted bytes to the passed-in * buffer... */ if (pDataBuffer) { int bytesToCopy = min((int)pDataBuffer->cbBuffer, len); /* Number of bytes to copy into buf */ int bytesToSave = pDataBuffer->cbBuffer - bytesToCopy; /* Number of bytes to save in our read buffer */ if (bytesToCopy) memcpy(buf, pDataBuffer->pvBuffer, bytesToCopy); /* * If there are more decrypted bytes than can be copied to the passed in * buffer, then save them... */ if (bytesToSave) { if ((sspi->readBufferLength - sspi->readBufferUsed) < bytesToSave) { BYTE *temp; /* New buffer pointer */ if ((temp = realloc(sspi->readBuffer, sspi->readBufferUsed + bytesToSave)) == NULL) { DEBUG_printf(("_httpTLSRead: Unable to allocate %d bytes.", sspi->readBufferUsed + bytesToSave)); WSASetLastError(E_OUTOFMEMORY); return (-1); } sspi->readBufferLength = sspi->readBufferUsed + bytesToSave; sspi->readBuffer = temp; } memcpy(((BYTE *)sspi->readBuffer) + sspi->readBufferUsed, ((BYTE *)pDataBuffer->pvBuffer) + bytesToCopy, bytesToSave); sspi->readBufferUsed += bytesToSave; } num = bytesToCopy; } else { DEBUG_puts("_httpTLSRead: Unable to find data buffer."); WSASetLastError(WSASYSCALLFAILURE); return (-1); } /* * If the decryption process left extra bytes, then save those back in * decryptBuffer. They will be processed the next time through the loop. */ if (pExtraBuffer) { memmove(sspi->decryptBuffer, pExtraBuffer->pvBuffer, pExtraBuffer->cbBuffer); sspi->decryptBufferUsed = pExtraBuffer->cbBuffer; } else { sspi->decryptBufferUsed = 0; } return (num); } /* * '_httpTLSSetOptions()' - Set TLS protocol and cipher suite options. */ void _httpTLSSetOptions(int options, /* I - Options */ int min_version, /* I - Minimum TLS version */ int max_version) /* I - Maximum TLS version */ { if (!(options & _HTTP_TLS_SET_DEFAULT) || tls_options < 0) { tls_options = options; tls_min_version = min_version; tls_max_version = max_version; } } /* * '_httpTLSStart()' - Set up SSL/TLS support on a connection. */ int /* O - 0 on success, -1 on failure */ _httpTLSStart(http_t *http) /* I - HTTP connection */ { char hostname[256], /* Hostname */ *hostptr; /* Pointer into hostname */ DEBUG_printf(("3_httpTLSStart(http=%p)", http)); if (tls_options < 0) { DEBUG_puts("4_httpTLSStart: Setting defaults."); _cupsSetDefaults(); DEBUG_printf(("4_httpTLSStart: tls_options=%x", tls_options)); } if ((http->tls = http_sspi_alloc()) == NULL) return (-1); if (http->mode == _HTTP_MODE_CLIENT) { /* * Client: determine hostname... */ if (httpAddrLocalhost(http->hostaddr)) { strlcpy(hostname, "localhost", sizeof(hostname)); } else { /* * Otherwise make sure the hostname we have does not end in a trailing dot. */ strlcpy(hostname, http->hostname, sizeof(hostname)); if ((hostptr = hostname + strlen(hostname) - 1) >= hostname && *hostptr == '.') *hostptr = '\0'; } return (http_sspi_client(http, hostname)); } else { /* * Server: determine hostname to use... */ if (http->fields[HTTP_FIELD_HOST][0]) { /* * Use hostname for TLS upgrade... */ strlcpy(hostname, http->fields[HTTP_FIELD_HOST], sizeof(hostname)); } else { /* * Resolve hostname from connection address... */ http_addr_t addr; /* Connection address */ socklen_t addrlen; /* Length of address */ addrlen = sizeof(addr); if (getsockname(http->fd, (struct sockaddr *)&addr, &addrlen)) { DEBUG_printf(("4_httpTLSStart: Unable to get socket address: %s", strerror(errno))); hostname[0] = '\0'; } else if (httpAddrLocalhost(&addr)) hostname[0] = '\0'; else { httpAddrLookup(&addr, hostname, sizeof(hostname)); DEBUG_printf(("4_httpTLSStart: Resolved socket address to \"%s\".", hostname)); } } return (http_sspi_server(http, hostname)); } } /* * '_httpTLSStop()' - Shut down SSL/TLS on a connection. */ void _httpTLSStop(http_t *http) /* I - HTTP connection */ { _http_sspi_t *sspi = http->tls; /* SSPI data */ if (sspi->contextInitialized && http->fd >= 0) { SecBufferDesc message; /* Array of SecBuffer struct */ SecBuffer buffers[1] = { 0 }; /* Security package buffer */ DWORD dwType; /* Type */ DWORD status; /* Status */ /* * Notify schannel that we are about to close the connection. */ dwType = SCHANNEL_SHUTDOWN; buffers[0].pvBuffer = &dwType; buffers[0].BufferType = SECBUFFER_TOKEN; buffers[0].cbBuffer = sizeof(dwType); message.cBuffers = 1; message.pBuffers = buffers; message.ulVersion = SECBUFFER_VERSION; status = ApplyControlToken(&sspi->context, &message); if (SUCCEEDED(status)) { PBYTE pbMessage; /* Message buffer */ DWORD cbMessage; /* Message buffer count */ DWORD cbData; /* Data count */ DWORD dwSSPIFlags; /* SSL attributes we requested */ DWORD dwSSPIOutFlags; /* SSL attributes we received */ TimeStamp tsExpiry; /* Time stamp */ dwSSPIFlags = ASC_REQ_SEQUENCE_DETECT | ASC_REQ_REPLAY_DETECT | ASC_REQ_CONFIDENTIALITY | ASC_REQ_EXTENDED_ERROR | ASC_REQ_ALLOCATE_MEMORY | ASC_REQ_STREAM; buffers[0].pvBuffer = NULL; buffers[0].BufferType = SECBUFFER_TOKEN; buffers[0].cbBuffer = 0; message.cBuffers = 1; message.pBuffers = buffers; message.ulVersion = SECBUFFER_VERSION; status = AcceptSecurityContext(&sspi->creds, &sspi->context, NULL, dwSSPIFlags, SECURITY_NATIVE_DREP, NULL, &message, &dwSSPIOutFlags, &tsExpiry); if (SUCCEEDED(status)) { pbMessage = buffers[0].pvBuffer; cbMessage = buffers[0].cbBuffer; /* * Send the close notify message to the client. */ if (pbMessage && cbMessage) { cbData = send(http->fd, pbMessage, cbMessage, 0); if ((cbData == SOCKET_ERROR) || (cbData == 0)) { status = WSAGetLastError(); DEBUG_printf(("_httpTLSStop: sending close notify failed: %d", status)); } else { FreeContextBuffer(pbMessage); } } } else { DEBUG_printf(("_httpTLSStop: AcceptSecurityContext failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), status))); } } else { DEBUG_printf(("_httpTLSStop: ApplyControlToken failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), status))); } } http_sspi_free(sspi); http->tls = NULL; } /* * '_httpTLSWrite()' - Write to a SSL/TLS connection. */ int /* O - Bytes written */ _httpTLSWrite(http_t *http, /* I - HTTP connection */ const char *buf, /* I - Buffer holding data */ int len) /* I - Length of buffer */ { _http_sspi_t *sspi = http->tls; /* SSPI data */ SecBufferDesc message; /* Array of SecBuffer struct */ SecBuffer buffers[4] = { 0 }; /* Security package buffer */ int bufferLen; /* Buffer length */ int bytesLeft; /* Bytes left to write */ const char *bufptr; /* Pointer into buffer */ int num = 0; /* Return value */ bufferLen = sspi->streamSizes.cbMaximumMessage + sspi->streamSizes.cbHeader + sspi->streamSizes.cbTrailer; if (bufferLen > sspi->writeBufferLength) { BYTE *temp; /* New buffer pointer */ if ((temp = (BYTE *)realloc(sspi->writeBuffer, bufferLen)) == NULL) { DEBUG_printf(("_httpTLSWrite: Unable to allocate buffer of %d bytes.", bufferLen)); WSASetLastError(E_OUTOFMEMORY); return (-1); } sspi->writeBuffer = temp; sspi->writeBufferLength = bufferLen; } bytesLeft = len; bufptr = buf; while (bytesLeft) { int chunk = min((int)sspi->streamSizes.cbMaximumMessage, bytesLeft); /* Size of data to write */ SECURITY_STATUS scRet; /* SSPI status */ /* * Copy user data into the buffer, starting just past the header... */ memcpy(sspi->writeBuffer + sspi->streamSizes.cbHeader, bufptr, chunk); /* * Setup the SSPI buffers */ message.ulVersion = SECBUFFER_VERSION; message.cBuffers = 4; message.pBuffers = buffers; buffers[0].pvBuffer = sspi->writeBuffer; buffers[0].cbBuffer = sspi->streamSizes.cbHeader; buffers[0].BufferType = SECBUFFER_STREAM_HEADER; buffers[1].pvBuffer = sspi->writeBuffer + sspi->streamSizes.cbHeader; buffers[1].cbBuffer = (unsigned long) chunk; buffers[1].BufferType = SECBUFFER_DATA; buffers[2].pvBuffer = sspi->writeBuffer + sspi->streamSizes.cbHeader + chunk; buffers[2].cbBuffer = sspi->streamSizes.cbTrailer; buffers[2].BufferType = SECBUFFER_STREAM_TRAILER; buffers[3].BufferType = SECBUFFER_EMPTY; /* * Encrypt the data */ scRet = EncryptMessage(&sspi->context, 0, &message, 0); if (FAILED(scRet)) { DEBUG_printf(("_httpTLSWrite: EncryptMessage failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), scRet))); WSASetLastError(WSASYSCALLFAILURE); return (-1); } /* * Send the data. Remember the size of the total data to send is the size * of the header, the size of the data the caller passed in and the size * of the trailer... */ num = send(http->fd, sspi->writeBuffer, buffers[0].cbBuffer + buffers[1].cbBuffer + buffers[2].cbBuffer, 0); if (num <= 0) { DEBUG_printf(("_httpTLSWrite: send failed: %ld", WSAGetLastError())); return (num); } bytesLeft -= chunk; bufptr += chunk; } return (len); } #if 0 /* * 'http_setup_ssl()' - Set up SSL/TLS support on a connection. */ static int /* O - 0 on success, -1 on failure */ http_setup_ssl(http_t *http) /* I - Connection to server */ { char hostname[256], /* Hostname */ *hostptr; /* Pointer into hostname */ TCHAR username[256]; /* Username returned from GetUserName() */ TCHAR commonName[256];/* Common name for certificate */ DWORD dwSize; /* 32 bit size */ DEBUG_printf(("7http_setup_ssl(http=%p)", http)); /* * Get the hostname to use for SSL... */ if (httpAddrLocalhost(http->hostaddr)) { strlcpy(hostname, "localhost", sizeof(hostname)); } else { /* * Otherwise make sure the hostname we have does not end in a trailing dot. */ strlcpy(hostname, http->hostname, sizeof(hostname)); if ((hostptr = hostname + strlen(hostname) - 1) >= hostname && *hostptr == '.') *hostptr = '\0'; } http->tls = http_sspi_alloc(); if (!http->tls) { _cupsSetHTTPError(HTTP_STATUS_ERROR); return (-1); } dwSize = sizeof(username) / sizeof(TCHAR); GetUserName(username, &dwSize); _sntprintf_s(commonName, sizeof(commonName) / sizeof(TCHAR), sizeof(commonName) / sizeof(TCHAR), TEXT("CN=%s"), username); if (!_sspiGetCredentials(http->tls, L"ClientContainer", commonName, FALSE)) { _sspiFree(http->tls); http->tls = NULL; http->error = EIO; http->status = HTTP_STATUS_ERROR; _cupsSetError(IPP_STATUS_ERROR_CUPS_PKI, _("Unable to establish a secure connection to host."), 1); return (-1); } _sspiSetAllowsAnyRoot(http->tls, TRUE); _sspiSetAllowsExpiredCerts(http->tls, TRUE); if (!_sspiConnect(http->tls, hostname)) { _sspiFree(http->tls); http->tls = NULL; http->error = EIO; http->status = HTTP_STATUS_ERROR; _cupsSetError(IPP_STATUS_ERROR_CUPS_PKI, _("Unable to establish a secure connection to host."), 1); return (-1); } return (0); } #endif // 0 /* * 'http_sspi_alloc()' - Allocate SSPI object. */ static _http_sspi_t * /* O - New SSPI/SSL object */ http_sspi_alloc(void) { return ((_http_sspi_t *)calloc(sizeof(_http_sspi_t), 1)); } /* * 'http_sspi_client()' - Negotiate a TLS connection as a client. */ static int /* O - 0 on success, -1 on failure */ http_sspi_client(http_t *http, /* I - Client connection */ const char *hostname) /* I - Server hostname */ { _http_sspi_t *sspi = http->tls; /* SSPI data */ DWORD dwSize; /* Size for buffer */ DWORD dwSSPIFlags; /* SSL connection attributes we want */ DWORD dwSSPIOutFlags; /* SSL connection attributes we got */ TimeStamp tsExpiry; /* Time stamp */ SECURITY_STATUS scRet; /* Status */ int cbData; /* Data count */ SecBufferDesc inBuffer; /* Array of SecBuffer structs */ SecBuffer inBuffers[2]; /* Security package buffer */ SecBufferDesc outBuffer; /* Array of SecBuffer structs */ SecBuffer outBuffers[1]; /* Security package buffer */ int ret = 0; /* Return value */ char username[1024], /* Current username */ common_name[1024]; /* CN=username */ DEBUG_printf(("4http_sspi_client(http=%p, hostname=\"%s\")", http, hostname)); dwSSPIFlags = ISC_REQ_SEQUENCE_DETECT | ISC_REQ_REPLAY_DETECT | ISC_REQ_CONFIDENTIALITY | ISC_RET_EXTENDED_ERROR | ISC_REQ_ALLOCATE_MEMORY | ISC_REQ_STREAM; /* * Lookup the client certificate... */ dwSize = sizeof(username); GetUserName(username, &dwSize); snprintf(common_name, sizeof(common_name), "CN=%s", username); if (!http_sspi_find_credentials(http, L"ClientContainer", common_name)) if (!http_sspi_make_credentials(http->tls, L"ClientContainer", common_name, _HTTP_MODE_CLIENT, 10)) { DEBUG_puts("5http_sspi_client: Unable to get client credentials."); return (-1); } /* * Initiate a ClientHello message and generate a token. */ outBuffers[0].pvBuffer = NULL; outBuffers[0].BufferType = SECBUFFER_TOKEN; outBuffers[0].cbBuffer = 0; outBuffer.cBuffers = 1; outBuffer.pBuffers = outBuffers; outBuffer.ulVersion = SECBUFFER_VERSION; scRet = InitializeSecurityContext(&sspi->creds, NULL, TEXT(""), dwSSPIFlags, 0, SECURITY_NATIVE_DREP, NULL, 0, &sspi->context, &outBuffer, &dwSSPIOutFlags, &tsExpiry); if (scRet != SEC_I_CONTINUE_NEEDED) { DEBUG_printf(("5http_sspi_client: InitializeSecurityContext(1) failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), scRet))); return (-1); } /* * Send response to server if there is one. */ if (outBuffers[0].cbBuffer && outBuffers[0].pvBuffer) { if ((cbData = send(http->fd, outBuffers[0].pvBuffer, outBuffers[0].cbBuffer, 0)) <= 0) { DEBUG_printf(("5http_sspi_client: send failed: %d", WSAGetLastError())); FreeContextBuffer(outBuffers[0].pvBuffer); DeleteSecurityContext(&sspi->context); return (-1); } DEBUG_printf(("5http_sspi_client: %d bytes of handshake data sent.", cbData)); FreeContextBuffer(outBuffers[0].pvBuffer); outBuffers[0].pvBuffer = NULL; } dwSSPIFlags = ISC_REQ_MANUAL_CRED_VALIDATION | ISC_REQ_SEQUENCE_DETECT | ISC_REQ_REPLAY_DETECT | ISC_REQ_CONFIDENTIALITY | ISC_RET_EXTENDED_ERROR | ISC_REQ_ALLOCATE_MEMORY | ISC_REQ_STREAM; sspi->decryptBufferUsed = 0; /* * Loop until the handshake is finished or an error occurs. */ scRet = SEC_I_CONTINUE_NEEDED; while(scRet == SEC_I_CONTINUE_NEEDED || scRet == SEC_E_INCOMPLETE_MESSAGE || scRet == SEC_I_INCOMPLETE_CREDENTIALS) { if (sspi->decryptBufferUsed == 0 || scRet == SEC_E_INCOMPLETE_MESSAGE) { if (sspi->decryptBufferLength <= sspi->decryptBufferUsed) { BYTE *temp; /* New buffer */ if (sspi->decryptBufferLength >= 262144) { WSASetLastError(E_OUTOFMEMORY); DEBUG_puts("5http_sspi_client: Decryption buffer too large (>256k)"); return (-1); } if ((temp = realloc(sspi->decryptBuffer, sspi->decryptBufferLength + 4096)) == NULL) { DEBUG_printf(("5http_sspi_client: Unable to allocate %d byte buffer.", sspi->decryptBufferLength + 4096)); WSASetLastError(E_OUTOFMEMORY); return (-1); } sspi->decryptBufferLength += 4096; sspi->decryptBuffer = temp; } cbData = recv(http->fd, sspi->decryptBuffer + sspi->decryptBufferUsed, (int)(sspi->decryptBufferLength - sspi->decryptBufferUsed), 0); if (cbData < 0) { DEBUG_printf(("5http_sspi_client: recv failed: %d", WSAGetLastError())); return (-1); } else if (cbData == 0) { DEBUG_printf(("5http_sspi_client: Server unexpectedly disconnected.")); return (-1); } DEBUG_printf(("5http_sspi_client: %d bytes of handshake data received", cbData)); sspi->decryptBufferUsed += cbData; } /* * Set up the input buffers. Buffer 0 is used to pass in data received from * the server. Schannel will consume some or all of this. Leftover data * (if any) will be placed in buffer 1 and given a buffer type of * SECBUFFER_EXTRA. */ inBuffers[0].pvBuffer = sspi->decryptBuffer; inBuffers[0].cbBuffer = (unsigned long)sspi->decryptBufferUsed; inBuffers[0].BufferType = SECBUFFER_TOKEN; inBuffers[1].pvBuffer = NULL; inBuffers[1].cbBuffer = 0; inBuffers[1].BufferType = SECBUFFER_EMPTY; inBuffer.cBuffers = 2; inBuffer.pBuffers = inBuffers; inBuffer.ulVersion = SECBUFFER_VERSION; /* * Set up the output buffers. These are initialized to NULL so as to make it * less likely we'll attempt to free random garbage later. */ outBuffers[0].pvBuffer = NULL; outBuffers[0].BufferType = SECBUFFER_TOKEN; outBuffers[0].cbBuffer = 0; outBuffer.cBuffers = 1; outBuffer.pBuffers = outBuffers; outBuffer.ulVersion = SECBUFFER_VERSION; /* * Call InitializeSecurityContext. */ scRet = InitializeSecurityContext(&sspi->creds, &sspi->context, NULL, dwSSPIFlags, 0, SECURITY_NATIVE_DREP, &inBuffer, 0, NULL, &outBuffer, &dwSSPIOutFlags, &tsExpiry); /* * If InitializeSecurityContext was successful (or if the error was one of * the special extended ones), send the contents of the output buffer to the * server. */ if (scRet == SEC_E_OK || scRet == SEC_I_CONTINUE_NEEDED || FAILED(scRet) && (dwSSPIOutFlags & ISC_RET_EXTENDED_ERROR)) { if (outBuffers[0].cbBuffer && outBuffers[0].pvBuffer) { cbData = send(http->fd, outBuffers[0].pvBuffer, outBuffers[0].cbBuffer, 0); if (cbData <= 0) { DEBUG_printf(("5http_sspi_client: send failed: %d", WSAGetLastError())); FreeContextBuffer(outBuffers[0].pvBuffer); DeleteSecurityContext(&sspi->context); return (-1); } DEBUG_printf(("5http_sspi_client: %d bytes of handshake data sent.", cbData)); /* * Free output buffer. */ FreeContextBuffer(outBuffers[0].pvBuffer); outBuffers[0].pvBuffer = NULL; } } /* * If InitializeSecurityContext returned SEC_E_INCOMPLETE_MESSAGE, then we * need to read more data from the server and try again. */ if (scRet == SEC_E_INCOMPLETE_MESSAGE) continue; /* * If InitializeSecurityContext returned SEC_E_OK, then the handshake * completed successfully. */ if (scRet == SEC_E_OK) { /* * If the "extra" buffer contains data, this is encrypted application * protocol layer stuff. It needs to be saved. The application layer will * later decrypt it with DecryptMessage. */ DEBUG_puts("5http_sspi_client: Handshake was successful."); if (inBuffers[1].BufferType == SECBUFFER_EXTRA) { memmove(sspi->decryptBuffer, sspi->decryptBuffer + sspi->decryptBufferUsed - inBuffers[1].cbBuffer, inBuffers[1].cbBuffer); sspi->decryptBufferUsed = inBuffers[1].cbBuffer; DEBUG_printf(("5http_sspi_client: %d bytes of app data was bundled with handshake data", sspi->decryptBufferUsed)); } else sspi->decryptBufferUsed = 0; /* * Bail out to quit */ break; } /* * Check for fatal error. */ if (FAILED(scRet)) { DEBUG_printf(("5http_sspi_client: InitializeSecurityContext(2) failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), scRet))); ret = -1; break; } /* * If InitializeSecurityContext returned SEC_I_INCOMPLETE_CREDENTIALS, * then the server just requested client authentication. */ if (scRet == SEC_I_INCOMPLETE_CREDENTIALS) { /* * Unimplemented */ DEBUG_printf(("5http_sspi_client: server requested client credentials.")); ret = -1; break; } /* * Copy any leftover data from the "extra" buffer, and go around again. */ if (inBuffers[1].BufferType == SECBUFFER_EXTRA) { memmove(sspi->decryptBuffer, sspi->decryptBuffer + sspi->decryptBufferUsed - inBuffers[1].cbBuffer, inBuffers[1].cbBuffer); sspi->decryptBufferUsed = inBuffers[1].cbBuffer; } else { sspi->decryptBufferUsed = 0; } } if (!ret) { /* * Success! Get the server cert */ sspi->contextInitialized = TRUE; scRet = QueryContextAttributes(&sspi->context, SECPKG_ATTR_REMOTE_CERT_CONTEXT, (VOID *)&(sspi->remoteCert)); if (scRet != SEC_E_OK) { DEBUG_printf(("5http_sspi_client: QueryContextAttributes failed(SECPKG_ATTR_REMOTE_CERT_CONTEXT): %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), scRet))); return (-1); } /* * Find out how big the header/trailer will be: */ scRet = QueryContextAttributes(&sspi->context, SECPKG_ATTR_STREAM_SIZES, &sspi->streamSizes); if (scRet != SEC_E_OK) { DEBUG_printf(("5http_sspi_client: QueryContextAttributes failed(SECPKG_ATTR_STREAM_SIZES): %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), scRet))); ret = -1; } } return (ret); } /* * 'http_sspi_create_credential()' - Create an SSPI certificate context. */ static PCCERT_CONTEXT /* O - Certificate context */ http_sspi_create_credential( http_credential_t *cred) /* I - Credential */ { if (cred) return (CertCreateCertificateContext(X509_ASN_ENCODING, cred->data, cred->datalen)); else return (NULL); } /* * 'http_sspi_find_credentials()' - Retrieve a TLS certificate from the system store. */ static BOOL /* O - 1 on success, 0 on failure */ http_sspi_find_credentials( http_t *http, /* I - HTTP connection */ const LPWSTR container, /* I - Cert container name */ const char *common_name) /* I - Common name of certificate */ { _http_sspi_t *sspi = http->tls; /* SSPI data */ HCERTSTORE store = NULL; /* Certificate store */ PCCERT_CONTEXT storedContext = NULL; /* Context created from the store */ DWORD dwSize = 0; /* 32 bit size */ PBYTE p = NULL; /* Temporary storage */ HCRYPTPROV hProv = (HCRYPTPROV)NULL; /* Handle to a CSP */ CERT_NAME_BLOB sib; /* Arbitrary array of bytes */ SCHANNEL_CRED SchannelCred; /* Schannel credential data */ TimeStamp tsExpiry; /* Time stamp */ SECURITY_STATUS Status; /* Status */ BOOL ok = TRUE; /* Return value */ if (!CryptAcquireContextW(&hProv, (LPWSTR)container, MS_DEF_PROV_W, PROV_RSA_FULL, CRYPT_NEWKEYSET | CRYPT_MACHINE_KEYSET)) { if (GetLastError() == NTE_EXISTS) { if (!CryptAcquireContextW(&hProv, (LPWSTR)container, MS_DEF_PROV_W, PROV_RSA_FULL, CRYPT_MACHINE_KEYSET)) { DEBUG_printf(("5http_sspi_find_credentials: CryptAcquireContext failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError()))); ok = FALSE; goto cleanup; } } } store = CertOpenStore(CERT_STORE_PROV_SYSTEM, X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, hProv, CERT_SYSTEM_STORE_LOCAL_MACHINE | CERT_STORE_NO_CRYPT_RELEASE_FLAG | CERT_STORE_OPEN_EXISTING_FLAG, L"MY"); if (!store) { DEBUG_printf(("5http_sspi_find_credentials: CertOpenSystemStore failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError()))); ok = FALSE; goto cleanup; } dwSize = 0; if (!CertStrToName(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, NULL, &dwSize, NULL)) { DEBUG_printf(("5http_sspi_find_credentials: CertStrToName failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError()))); ok = FALSE; goto cleanup; } p = (PBYTE)malloc(dwSize); if (!p) { DEBUG_printf(("5http_sspi_find_credentials: malloc failed for %d bytes.", dwSize)); ok = FALSE; goto cleanup; } if (!CertStrToName(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, p, &dwSize, NULL)) { DEBUG_printf(("5http_sspi_find_credentials: CertStrToName failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError()))); ok = FALSE; goto cleanup; } sib.cbData = dwSize; sib.pbData = p; storedContext = CertFindCertificateInStore(store, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_SUBJECT_NAME, &sib, NULL); if (!storedContext) { DEBUG_printf(("5http_sspi_find_credentials: Unable to find credentials for \"%s\".", common_name)); ok = FALSE; goto cleanup; } ZeroMemory(&SchannelCred, sizeof(SchannelCred)); SchannelCred.dwVersion = SCHANNEL_CRED_VERSION; SchannelCred.cCreds = 1; SchannelCred.paCred = &storedContext; /* * Set supported protocols (can also be overriden in the registry...) */ #ifdef SP_PROT_TLS1_2_SERVER if (http->mode == _HTTP_MODE_SERVER) { if (tls_min_version == _HTTP_TLS_SSL3) SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_0_SERVER | SP_PROT_SSL3_SERVER; else if (tls_min_version == _HTTP_TLS_1_0) SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_0_SERVER; else if (tls_min_version == _HTTP_TLS_1_1) SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER; else SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER; } else { if (tls_min_version == _HTTP_TLS_SSL3) SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_0_CLIENT | SP_PROT_SSL3_CLIENT; else if (tls_min_version == _HTTP_TLS_1_0) SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_0_CLIENT; else if (tls_min_version == _HTTP_TLS_1_1) SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT; else SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT; } #else if (http->mode == _HTTP_MODE_SERVER) { if (tls_min_version == _HTTP_TLS_SSL3) SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_SERVER | SP_PROT_SSL3_SERVER; else SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_SERVER; } else { if (tls_min_version == _HTTP_TLS_SSL3) SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_CLIENT | SP_PROT_SSL3_CLIENT; else SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_CLIENT; } #endif /* SP_PROT_TLS1_2_SERVER */ /* TODO: Support _HTTP_TLS_ALLOW_RC4, _HTTP_TLS_ALLOW_DH, and _HTTP_TLS_DENY_CBC options; right now we'll rely on Windows registry to enable/disable RC4/DH/CBC... */ /* * Create an SSPI credential. */ Status = AcquireCredentialsHandle(NULL, UNISP_NAME, http->mode == _HTTP_MODE_SERVER ? SECPKG_CRED_INBOUND : SECPKG_CRED_OUTBOUND, NULL, &SchannelCred, NULL, NULL, &sspi->creds, &tsExpiry); if (Status != SEC_E_OK) { DEBUG_printf(("5http_sspi_find_credentials: AcquireCredentialsHandle failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), Status))); ok = FALSE; goto cleanup; } cleanup: /* * Cleanup */ if (storedContext) CertFreeCertificateContext(storedContext); if (p) free(p); if (store) CertCloseStore(store, 0); if (hProv) CryptReleaseContext(hProv, 0); return (ok); } /* * 'http_sspi_free()' - Close a connection and free resources. */ static void http_sspi_free(_http_sspi_t *sspi) /* I - SSPI data */ { if (!sspi) return; if (sspi->contextInitialized) DeleteSecurityContext(&sspi->context); if (sspi->decryptBuffer) free(sspi->decryptBuffer); if (sspi->readBuffer) free(sspi->readBuffer); if (sspi->writeBuffer) free(sspi->writeBuffer); if (sspi->localCert) CertFreeCertificateContext(sspi->localCert); if (sspi->remoteCert) CertFreeCertificateContext(sspi->remoteCert); free(sspi); } /* * 'http_sspi_make_credentials()' - Create a TLS certificate in the system store. */ static BOOL /* O - 1 on success, 0 on failure */ http_sspi_make_credentials( _http_sspi_t *sspi, /* I - SSPI data */ const LPWSTR container, /* I - Cert container name */ const char *common_name, /* I - Common name of certificate */ _http_mode_t mode, /* I - Client or server? */ int years) /* I - Years until expiration */ { HCERTSTORE store = NULL; /* Certificate store */ PCCERT_CONTEXT storedContext = NULL; /* Context created from the store */ PCCERT_CONTEXT createdContext = NULL; /* Context created by us */ DWORD dwSize = 0; /* 32 bit size */ PBYTE p = NULL; /* Temporary storage */ HCRYPTPROV hProv = (HCRYPTPROV)NULL; /* Handle to a CSP */ CERT_NAME_BLOB sib; /* Arbitrary array of bytes */ SCHANNEL_CRED SchannelCred; /* Schannel credential data */ TimeStamp tsExpiry; /* Time stamp */ SECURITY_STATUS Status; /* Status */ HCRYPTKEY hKey = (HCRYPTKEY)NULL; /* Handle to crypto key */ CRYPT_KEY_PROV_INFO kpi; /* Key container info */ SYSTEMTIME et; /* System time */ CERT_EXTENSIONS exts; /* Array of cert extensions */ CRYPT_KEY_PROV_INFO ckp; /* Handle to crypto key */ BOOL ok = TRUE; /* Return value */ DEBUG_printf(("4http_sspi_make_credentials(sspi=%p, container=%p, common_name=\"%s\", mode=%d, years=%d)", sspi, container, common_name, mode, years)); if (!CryptAcquireContextW(&hProv, (LPWSTR)container, MS_DEF_PROV_W, PROV_RSA_FULL, CRYPT_NEWKEYSET | CRYPT_MACHINE_KEYSET)) { if (GetLastError() == NTE_EXISTS) { if (!CryptAcquireContextW(&hProv, (LPWSTR)container, MS_DEF_PROV_W, PROV_RSA_FULL, CRYPT_MACHINE_KEYSET)) { DEBUG_printf(("5http_sspi_make_credentials: CryptAcquireContext failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError()))); ok = FALSE; goto cleanup; } } } store = CertOpenStore(CERT_STORE_PROV_SYSTEM, X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, hProv, CERT_SYSTEM_STORE_LOCAL_MACHINE | CERT_STORE_NO_CRYPT_RELEASE_FLAG | CERT_STORE_OPEN_EXISTING_FLAG, L"MY"); if (!store) { DEBUG_printf(("5http_sspi_make_credentials: CertOpenSystemStore failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError()))); ok = FALSE; goto cleanup; } dwSize = 0; if (!CertStrToName(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, NULL, &dwSize, NULL)) { DEBUG_printf(("5http_sspi_make_credentials: CertStrToName failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError()))); ok = FALSE; goto cleanup; } p = (PBYTE)malloc(dwSize); if (!p) { DEBUG_printf(("5http_sspi_make_credentials: malloc failed for %d bytes", dwSize)); ok = FALSE; goto cleanup; } if (!CertStrToName(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, p, &dwSize, NULL)) { DEBUG_printf(("5http_sspi_make_credentials: CertStrToName failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError()))); ok = FALSE; goto cleanup; } /* * Create a private key and self-signed certificate... */ if (!CryptGenKey(hProv, AT_KEYEXCHANGE, CRYPT_EXPORTABLE, &hKey)) { DEBUG_printf(("5http_sspi_make_credentials: CryptGenKey failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError()))); ok = FALSE; goto cleanup; } ZeroMemory(&kpi, sizeof(kpi)); kpi.pwszContainerName = (LPWSTR)container; kpi.pwszProvName = MS_DEF_PROV_W; kpi.dwProvType = PROV_RSA_FULL; kpi.dwFlags = CERT_SET_KEY_CONTEXT_PROP_ID; kpi.dwKeySpec = AT_KEYEXCHANGE; GetSystemTime(&et); et.wYear += years; ZeroMemory(&exts, sizeof(exts)); createdContext = CertCreateSelfSignCertificate(hProv, &sib, 0, &kpi, NULL, NULL, &et, &exts); if (!createdContext) { DEBUG_printf(("5http_sspi_make_credentials: CertCreateSelfSignCertificate failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError()))); ok = FALSE; goto cleanup; } /* * Add the created context to the named store, and associate it with the named * container... */ if (!CertAddCertificateContextToStore(store, createdContext, CERT_STORE_ADD_REPLACE_EXISTING, &storedContext)) { DEBUG_printf(("5http_sspi_make_credentials: CertAddCertificateContextToStore failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError()))); ok = FALSE; goto cleanup; } ZeroMemory(&ckp, sizeof(ckp)); ckp.pwszContainerName = (LPWSTR) container; ckp.pwszProvName = MS_DEF_PROV_W; ckp.dwProvType = PROV_RSA_FULL; ckp.dwFlags = CRYPT_MACHINE_KEYSET; ckp.dwKeySpec = AT_KEYEXCHANGE; if (!CertSetCertificateContextProperty(storedContext, CERT_KEY_PROV_INFO_PROP_ID, 0, &ckp)) { DEBUG_printf(("5http_sspi_make_credentials: CertSetCertificateContextProperty failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError()))); ok = FALSE; goto cleanup; } /* * Get a handle to use the certificate... */ ZeroMemory(&SchannelCred, sizeof(SchannelCred)); SchannelCred.dwVersion = SCHANNEL_CRED_VERSION; SchannelCred.cCreds = 1; SchannelCred.paCred = &storedContext; /* * SSPI doesn't seem to like it if grbitEnabledProtocols is set for a client. */ if (mode == _HTTP_MODE_SERVER) SchannelCred.grbitEnabledProtocols = SP_PROT_SSL3TLS1; /* * Create an SSPI credential. */ Status = AcquireCredentialsHandle(NULL, UNISP_NAME, mode == _HTTP_MODE_SERVER ? SECPKG_CRED_INBOUND : SECPKG_CRED_OUTBOUND, NULL, &SchannelCred, NULL, NULL, &sspi->creds, &tsExpiry); if (Status != SEC_E_OK) { DEBUG_printf(("5http_sspi_make_credentials: AcquireCredentialsHandle failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), Status))); ok = FALSE; goto cleanup; } cleanup: /* * Cleanup */ if (hKey) CryptDestroyKey(hKey); if (createdContext) CertFreeCertificateContext(createdContext); if (storedContext) CertFreeCertificateContext(storedContext); if (p) free(p); if (store) CertCloseStore(store, 0); if (hProv) CryptReleaseContext(hProv, 0); return (ok); } /* * 'http_sspi_server()' - Negotiate a TLS connection as a server. */ static int /* O - 0 on success, -1 on failure */ http_sspi_server(http_t *http, /* I - HTTP connection */ const char *hostname) /* I - Hostname of server */ { _http_sspi_t *sspi = http->tls; /* I - SSPI data */ char common_name[512]; /* Common name for cert */ DWORD dwSSPIFlags; /* SSL connection attributes we want */ DWORD dwSSPIOutFlags; /* SSL connection attributes we got */ TimeStamp tsExpiry; /* Time stamp */ SECURITY_STATUS scRet; /* SSPI Status */ SecBufferDesc inBuffer; /* Array of SecBuffer structs */ SecBuffer inBuffers[2]; /* Security package buffer */ SecBufferDesc outBuffer; /* Array of SecBuffer structs */ SecBuffer outBuffers[1]; /* Security package buffer */ int num = 0; /* 32 bit status value */ BOOL fInitContext = TRUE; /* Has the context been init'd? */ int ret = 0; /* Return value */ DEBUG_printf(("4http_sspi_server(http=%p, hostname=\"%s\")", http, hostname)); dwSSPIFlags = ASC_REQ_SEQUENCE_DETECT | ASC_REQ_REPLAY_DETECT | ASC_REQ_CONFIDENTIALITY | ASC_REQ_EXTENDED_ERROR | ASC_REQ_ALLOCATE_MEMORY | ASC_REQ_STREAM; sspi->decryptBufferUsed = 0; /* * Lookup the server certificate... */ snprintf(common_name, sizeof(common_name), "CN=%s", hostname); if (!http_sspi_find_credentials(http, L"ServerContainer", common_name)) if (!http_sspi_make_credentials(http->tls, L"ServerContainer", common_name, _HTTP_MODE_SERVER, 10)) { DEBUG_puts("5http_sspi_server: Unable to get server credentials."); return (-1); } /* * Set OutBuffer for AcceptSecurityContext call */ outBuffer.cBuffers = 1; outBuffer.pBuffers = outBuffers; outBuffer.ulVersion = SECBUFFER_VERSION; scRet = SEC_I_CONTINUE_NEEDED; while (scRet == SEC_I_CONTINUE_NEEDED || scRet == SEC_E_INCOMPLETE_MESSAGE || scRet == SEC_I_INCOMPLETE_CREDENTIALS) { if (sspi->decryptBufferUsed == 0 || scRet == SEC_E_INCOMPLETE_MESSAGE) { if (sspi->decryptBufferLength <= sspi->decryptBufferUsed) { BYTE *temp; /* New buffer */ if (sspi->decryptBufferLength >= 262144) { WSASetLastError(E_OUTOFMEMORY); DEBUG_puts("5http_sspi_server: Decryption buffer too large (>256k)"); return (-1); } if ((temp = realloc(sspi->decryptBuffer, sspi->decryptBufferLength + 4096)) == NULL) { DEBUG_printf(("5http_sspi_server: Unable to allocate %d byte buffer.", sspi->decryptBufferLength + 4096)); WSASetLastError(E_OUTOFMEMORY); return (-1); } sspi->decryptBufferLength += 4096; sspi->decryptBuffer = temp; } for (;;) { num = recv(http->fd, sspi->decryptBuffer + sspi->decryptBufferUsed, (int)(sspi->decryptBufferLength - sspi->decryptBufferUsed), 0); if (num == -1 && WSAGetLastError() == WSAEWOULDBLOCK) Sleep(1); else break; } if (num < 0) { DEBUG_printf(("5http_sspi_server: recv failed: %d", WSAGetLastError())); return (-1); } else if (num == 0) { DEBUG_puts("5http_sspi_server: client disconnected"); return (-1); } DEBUG_printf(("5http_sspi_server: received %d (handshake) bytes from client.", num)); sspi->decryptBufferUsed += num; } /* * InBuffers[1] is for getting extra data that SSPI/SCHANNEL doesn't process * on this run around the loop. */ inBuffers[0].pvBuffer = sspi->decryptBuffer; inBuffers[0].cbBuffer = (unsigned long)sspi->decryptBufferUsed; inBuffers[0].BufferType = SECBUFFER_TOKEN; inBuffers[1].pvBuffer = NULL; inBuffers[1].cbBuffer = 0; inBuffers[1].BufferType = SECBUFFER_EMPTY; inBuffer.cBuffers = 2; inBuffer.pBuffers = inBuffers; inBuffer.ulVersion = SECBUFFER_VERSION; /* * Initialize these so if we fail, pvBuffer contains NULL, so we don't try to * free random garbage at the quit. */ outBuffers[0].pvBuffer = NULL; outBuffers[0].BufferType = SECBUFFER_TOKEN; outBuffers[0].cbBuffer = 0; scRet = AcceptSecurityContext(&sspi->creds, (fInitContext?NULL:&sspi->context), &inBuffer, dwSSPIFlags, SECURITY_NATIVE_DREP, (fInitContext?&sspi->context:NULL), &outBuffer, &dwSSPIOutFlags, &tsExpiry); fInitContext = FALSE; if (scRet == SEC_E_OK || scRet == SEC_I_CONTINUE_NEEDED || (FAILED(scRet) && ((dwSSPIOutFlags & ISC_RET_EXTENDED_ERROR) != 0))) { if (outBuffers[0].cbBuffer && outBuffers[0].pvBuffer) { /* * Send response to server if there is one. */ num = send(http->fd, outBuffers[0].pvBuffer, outBuffers[0].cbBuffer, 0); if (num <= 0) { DEBUG_printf(("5http_sspi_server: handshake send failed: %d", WSAGetLastError())); return (-1); } DEBUG_printf(("5http_sspi_server: sent %d handshake bytes to client.", outBuffers[0].cbBuffer)); FreeContextBuffer(outBuffers[0].pvBuffer); outBuffers[0].pvBuffer = NULL; } } if (scRet == SEC_E_OK) { /* * If there's extra data then save it for next time we go to decrypt. */ if (inBuffers[1].BufferType == SECBUFFER_EXTRA) { memcpy(sspi->decryptBuffer, (LPBYTE)(sspi->decryptBuffer + sspi->decryptBufferUsed - inBuffers[1].cbBuffer), inBuffers[1].cbBuffer); sspi->decryptBufferUsed = inBuffers[1].cbBuffer; } else { sspi->decryptBufferUsed = 0; } break; } else if (FAILED(scRet) && scRet != SEC_E_INCOMPLETE_MESSAGE) { DEBUG_printf(("5http_sspi_server: AcceptSecurityContext failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), scRet))); ret = -1; break; } if (scRet != SEC_E_INCOMPLETE_MESSAGE && scRet != SEC_I_INCOMPLETE_CREDENTIALS) { if (inBuffers[1].BufferType == SECBUFFER_EXTRA) { memcpy(sspi->decryptBuffer, (LPBYTE)(sspi->decryptBuffer + sspi->decryptBufferUsed - inBuffers[1].cbBuffer), inBuffers[1].cbBuffer); sspi->decryptBufferUsed = inBuffers[1].cbBuffer; } else { sspi->decryptBufferUsed = 0; } } } if (!ret) { sspi->contextInitialized = TRUE; /* * Find out how big the header will be: */ scRet = QueryContextAttributes(&sspi->context, SECPKG_ATTR_STREAM_SIZES, &sspi->streamSizes); if (scRet != SEC_E_OK) { DEBUG_printf(("5http_sspi_server: QueryContextAttributes failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), scRet))); ret = -1; } } return (ret); } /* * 'http_sspi_strerror()' - Return a string for the specified error code. */ static const char * /* O - String for error */ http_sspi_strerror(char *buffer, /* I - Error message buffer */ size_t bufsize, /* I - Size of buffer */ DWORD code) /* I - Error code */ { if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, code, 0, buffer, bufsize, NULL)) { /* * Strip trailing CR + LF... */ char *ptr; /* Pointer into error message */ for (ptr = buffer + strlen(buffer) - 1; ptr >= buffer; ptr --) if (*ptr == '\n' || *ptr == '\r') *ptr = '\0'; else break; } else snprintf(buffer, bufsize, "Unknown error %x", code); return (buffer); } /* * 'http_sspi_verify()' - Verify a certificate. */ static DWORD /* O - Error code (0 == No error) */ http_sspi_verify( PCCERT_CONTEXT cert, /* I - Server certificate */ const char *common_name, /* I - Common name */ DWORD dwCertFlags) /* I - Verification flags */ { HTTPSPolicyCallbackData httpsPolicy; /* HTTPS Policy Struct */ CERT_CHAIN_POLICY_PARA policyPara; /* Cert chain policy parameters */ CERT_CHAIN_POLICY_STATUS policyStatus;/* Cert chain policy status */ CERT_CHAIN_PARA chainPara; /* Used for searching and matching criteria */ PCCERT_CHAIN_CONTEXT chainContext = NULL; /* Certificate chain */ PWSTR commonNameUnicode = NULL; /* Unicode common name */ LPSTR rgszUsages[] = { szOID_PKIX_KP_SERVER_AUTH, szOID_SERVER_GATED_CRYPTO, szOID_SGC_NETSCAPE }; /* How are we using this certificate? */ DWORD cUsages = sizeof(rgszUsages) / sizeof(LPSTR); /* Number of ites in rgszUsages */ DWORD count; /* 32 bit count variable */ DWORD status; /* Return value */ #ifdef DEBUG char error[1024]; /* Error message string */ #endif /* DEBUG */ if (!cert) return (SEC_E_WRONG_PRINCIPAL); /* * Convert common name to Unicode. */ if (!common_name || !*common_name) return (SEC_E_WRONG_PRINCIPAL); count = MultiByteToWideChar(CP_ACP, 0, common_name, -1, NULL, 0); commonNameUnicode = LocalAlloc(LMEM_FIXED, count * sizeof(WCHAR)); if (!commonNameUnicode) return (SEC_E_INSUFFICIENT_MEMORY); if (!MultiByteToWideChar(CP_ACP, 0, common_name, -1, commonNameUnicode, count)) { LocalFree(commonNameUnicode); return (SEC_E_WRONG_PRINCIPAL); } /* * Build certificate chain. */ ZeroMemory(&chainPara, sizeof(chainPara)); chainPara.cbSize = sizeof(chainPara); chainPara.RequestedUsage.dwType = USAGE_MATCH_TYPE_OR; chainPara.RequestedUsage.Usage.cUsageIdentifier = cUsages; chainPara.RequestedUsage.Usage.rgpszUsageIdentifier = rgszUsages; if (!CertGetCertificateChain(NULL, cert, NULL, cert->hCertStore, &chainPara, 0, NULL, &chainContext)) { status = GetLastError(); DEBUG_printf(("CertGetCertificateChain returned: %s", http_sspi_strerror(error, sizeof(error), status))); LocalFree(commonNameUnicode); return (status); } /* * Validate certificate chain. */ ZeroMemory(&httpsPolicy, sizeof(HTTPSPolicyCallbackData)); httpsPolicy.cbStruct = sizeof(HTTPSPolicyCallbackData); httpsPolicy.dwAuthType = AUTHTYPE_SERVER; httpsPolicy.fdwChecks = dwCertFlags; httpsPolicy.pwszServerName = commonNameUnicode; memset(&policyPara, 0, sizeof(policyPara)); policyPara.cbSize = sizeof(policyPara); policyPara.pvExtraPolicyPara = &httpsPolicy; memset(&policyStatus, 0, sizeof(policyStatus)); policyStatus.cbSize = sizeof(policyStatus); if (!CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_SSL, chainContext, &policyPara, &policyStatus)) { status = GetLastError(); DEBUG_printf(("CertVerifyCertificateChainPolicy returned %s", http_sspi_strerror(error, sizeof(error), status))); } else if (policyStatus.dwError) status = policyStatus.dwError; else status = SEC_E_OK; if (chainContext) CertFreeCertificateChain(chainContext); if (commonNameUnicode) LocalFree(commonNameUnicode); return (status); } cups-2.2.7/cups/tls.c000664 000765 000024 00000004470 13255074424 015100 0ustar00msweetstaff000000 000000 /* * TLS routines for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * This file contains Kerberos support code, copyright 2006 by * Jelmer Vernooij. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include #include #ifdef WIN32 # include #else # include # include # include #endif /* WIN32 */ #ifdef HAVE_POLL # include #endif /* HAVE_POLL */ /* * Include platform-specific TLS code... */ #ifdef HAVE_SSL # ifdef HAVE_GNUTLS # include "tls-gnutls.c" # elif defined(HAVE_CDSASSL) # include "tls-darwin.c" # elif defined(HAVE_SSPISSL) # include "tls-sspi.c" # endif /* HAVE_GNUTLS */ #else /* Stubs for when TLS is not supported/available */ int httpCopyCredentials(http_t *http, cups_array_t **credentials) { (void)http; if (credentials) *credentials = NULL; return (-1); } int httpCredentialsAreValidForName(cups_array_t *credentials, const char *common_name) { (void)credentials; (void)common_name; return (1); } time_t httpCredentialsGetExpiration(cups_array_t *credentials) { (void)credentials; return (INT_MAX); } http_trust_t httpCredentialsGetTrust(cups_array_t *credentials, const char *common_name) { (void)credentials; (void)common_name; return (HTTP_TRUST_OK); } size_t httpCredentialsString(cups_array_t *credentials, char *buffer, size_t bufsize) { (void)credentials; (void)bufsize; if (buffer) *buffer = '\0'; return (0); } int httpLoadCredentials(const char *path, cups_array_t **credentials, const char *common_name) { (void)path; (void)credentials; (void)common_name; return (-1); } int httpSaveCredentials(const char *path, cups_array_t *credentials, const char *common_name) { (void)path; (void)credentials; (void)common_name; return (-1); } #endif /* HAVE_SSL */ cups-2.2.7/cups/tlscheck.c000664 000765 000024 00000053073 13255074424 016101 0ustar00msweetstaff000000 000000 /* * TLS check program for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #ifndef HAVE_SSL int main(void) { puts("Sorry, no TLS support compiled in."); return (1); } #else /* * Local functions... */ static void usage(void); /* * 'main()' - Main entry. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ http_t *http; /* HTTP connection */ const char *server = NULL; /* Hostname from command-line */ int port = 0; /* Port number */ const char *cipherName = "UNKNOWN";/* Cipher suite name */ int dhBits = 0; /* Diffie-Hellman bits */ int tlsVersion = 0; /* TLS version number */ char uri[1024], /* Printer URI */ scheme[32], /* URI scheme */ host[256], /* Hostname */ userpass[256], /* Username/password */ resource[256]; /* Resource path */ int af = AF_UNSPEC, /* Address family */ tls_options = _HTTP_TLS_NONE, /* TLS options */ tls_min_version = _HTTP_TLS_1_0, tls_max_version = _HTTP_TLS_MAX, verbose = 0; /* Verbosity */ ipp_t *request, /* IPP Get-Printer-Attributes request */ *response; /* IPP Get-Printer-Attributes response */ ipp_attribute_t *attr; /* Current attribute */ const char *name; /* Attribute name */ char value[1024]; /* Attribute (string) value */ static const char * const pattrs[] = /* Requested attributes */ { "color-supported", "compression-supported", "document-format-supported", "pages-per-minute", "printer-location", "printer-make-and-model", "printer-state", "printer-state-reasons", "sides-supported", "uri-authentication-supported", "uri-security-supported" }; for (i = 1; i < argc; i ++) { if (!strcmp(argv[i], "--dh")) { tls_options |= _HTTP_TLS_ALLOW_DH; } else if (!strcmp(argv[i], "--no-cbc")) { tls_options |= _HTTP_TLS_DENY_CBC; } else if (!strcmp(argv[i], "--no-tls10")) { tls_min_version = _HTTP_TLS_1_1; } else if (!strcmp(argv[i], "--tls10")) { tls_min_version = _HTTP_TLS_1_0; tls_max_version = _HTTP_TLS_1_0; } else if (!strcmp(argv[i], "--rc4")) { tls_options |= _HTTP_TLS_ALLOW_RC4; } else if (!strcmp(argv[i], "--verbose") || !strcmp(argv[i], "-v")) { verbose = 1; } else if (!strcmp(argv[i], "-4")) { af = AF_INET; } else if (!strcmp(argv[i], "-6")) { af = AF_INET6; } else if (argv[i][0] == '-') { printf("tlscheck: Unknown option '%s'.\n", argv[i]); usage(); } else if (!server) { if (!strncmp(argv[i], "ipps://", 7)) { httpSeparateURI(HTTP_URI_CODING_ALL, argv[i], scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)); server = host; } else { server = argv[i]; strlcpy(resource, "/ipp/print", sizeof(resource)); } } else if (!port && (argv[i][0] == '=' || isdigit(argv[i][0] & 255))) { if (argv[i][0] == '=') port = atoi(argv[i] + 1); else port = atoi(argv[i]); } else { printf("tlscheck: Unexpected argument '%s'.\n", argv[i]); usage(); } } if (!server) usage(); if (!port) port = 631; _httpTLSSetOptions(tls_options, tls_min_version, tls_max_version); http = httpConnect2(server, port, NULL, af, HTTP_ENCRYPTION_ALWAYS, 1, 30000, NULL); if (!http) { printf("%s: ERROR (%s)\n", server, cupsLastErrorString()); return (1); } #ifdef __APPLE__ SSLProtocol protocol; SSLCipherSuite cipher; char unknownCipherName[256]; int paramsNeeded = 0; const void *params; size_t paramsLen; OSStatus err; if ((err = SSLGetNegotiatedProtocolVersion(http->tls, &protocol)) != noErr) { printf("%s: ERROR (No protocol version - %d)\n", server, (int)err); httpClose(http); return (1); } switch (protocol) { default : tlsVersion = 0; break; case kSSLProtocol3 : tlsVersion = 30; break; case kTLSProtocol1 : tlsVersion = 10; break; case kTLSProtocol11 : tlsVersion = 11; break; case kTLSProtocol12 : tlsVersion = 12; break; } if ((err = SSLGetNegotiatedCipher(http->tls, &cipher)) != noErr) { printf("%s: ERROR (No cipher suite - %d)\n", server, (int)err); httpClose(http); return (1); } switch (cipher) { case TLS_NULL_WITH_NULL_NULL: cipherName = "TLS_NULL_WITH_NULL_NULL"; break; case TLS_RSA_WITH_NULL_MD5: cipherName = "TLS_RSA_WITH_NULL_MD5"; break; case TLS_RSA_WITH_NULL_SHA: cipherName = "TLS_RSA_WITH_NULL_SHA"; break; case TLS_RSA_WITH_RC4_128_MD5: cipherName = "TLS_RSA_WITH_RC4_128_MD5"; break; case TLS_RSA_WITH_RC4_128_SHA: cipherName = "TLS_RSA_WITH_RC4_128_SHA"; break; case TLS_RSA_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"; break; case TLS_RSA_WITH_NULL_SHA256: cipherName = "TLS_RSA_WITH_NULL_SHA256"; break; case TLS_RSA_WITH_AES_128_CBC_SHA256: cipherName = "TLS_RSA_WITH_AES_128_CBC_SHA256"; break; case TLS_RSA_WITH_AES_256_CBC_SHA256: cipherName = "TLS_RSA_WITH_AES_256_CBC_SHA256"; break; case TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA"; paramsNeeded = 1; break; case TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA"; paramsNeeded = 1; break; case TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"; paramsNeeded = 1; break; case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA"; paramsNeeded = 1; break; case TLS_DH_DSS_WITH_AES_128_CBC_SHA256: cipherName = "TLS_DH_DSS_WITH_AES_128_CBC_SHA256"; paramsNeeded = 1; break; case TLS_DH_RSA_WITH_AES_128_CBC_SHA256: cipherName = "TLS_DH_RSA_WITH_AES_128_CBC_SHA256"; paramsNeeded = 1; break; case TLS_DHE_DSS_WITH_AES_128_CBC_SHA256: cipherName = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"; paramsNeeded = 1; break; case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: cipherName = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"; paramsNeeded = 1; break; case TLS_DH_DSS_WITH_AES_256_CBC_SHA256: cipherName = "TLS_DH_DSS_WITH_AES_256_CBC_SHA256"; paramsNeeded = 1; break; case TLS_DH_RSA_WITH_AES_256_CBC_SHA256: cipherName = "TLS_DH_RSA_WITH_AES_256_CBC_SHA256"; paramsNeeded = 1; break; case TLS_DHE_DSS_WITH_AES_256_CBC_SHA256: cipherName = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"; paramsNeeded = 1; break; case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: cipherName = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"; paramsNeeded = 1; break; case TLS_DH_anon_WITH_RC4_128_MD5: cipherName = "TLS_DH_anon_WITH_RC4_128_MD5"; paramsNeeded = 1; break; case TLS_DH_anon_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA"; paramsNeeded = 1; break; case TLS_DH_anon_WITH_AES_128_CBC_SHA256: cipherName = "TLS_DH_anon_WITH_AES_128_CBC_SHA256"; paramsNeeded = 1; break; case TLS_DH_anon_WITH_AES_256_CBC_SHA256: cipherName = "TLS_DH_anon_WITH_AES_256_CBC_SHA256"; paramsNeeded = 1; break; case TLS_PSK_WITH_RC4_128_SHA: cipherName = "TLS_PSK_WITH_RC4_128_SHA"; break; case TLS_PSK_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_PSK_WITH_3DES_EDE_CBC_SHA"; break; case TLS_PSK_WITH_AES_128_CBC_SHA: cipherName = "TLS_PSK_WITH_AES_128_CBC_SHA"; break; case TLS_PSK_WITH_AES_256_CBC_SHA: cipherName = "TLS_PSK_WITH_AES_256_CBC_SHA"; break; case TLS_DHE_PSK_WITH_RC4_128_SHA: cipherName = "TLS_DHE_PSK_WITH_RC4_128_SHA"; paramsNeeded = 1; break; case TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA"; paramsNeeded = 1; break; case TLS_DHE_PSK_WITH_AES_128_CBC_SHA: cipherName = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA"; paramsNeeded = 1; break; case TLS_DHE_PSK_WITH_AES_256_CBC_SHA: cipherName = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA"; paramsNeeded = 1; break; case TLS_RSA_PSK_WITH_RC4_128_SHA: cipherName = "TLS_RSA_PSK_WITH_RC4_128_SHA"; break; case TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA"; break; case TLS_RSA_PSK_WITH_AES_128_CBC_SHA: cipherName = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA"; break; case TLS_RSA_PSK_WITH_AES_256_CBC_SHA: cipherName = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA"; break; case TLS_PSK_WITH_NULL_SHA: cipherName = "TLS_PSK_WITH_NULL_SHA"; break; case TLS_DHE_PSK_WITH_NULL_SHA: cipherName = "TLS_DHE_PSK_WITH_NULL_SHA"; paramsNeeded = 1; break; case TLS_RSA_PSK_WITH_NULL_SHA: cipherName = "TLS_RSA_PSK_WITH_NULL_SHA"; break; case TLS_RSA_WITH_AES_128_GCM_SHA256: cipherName = "TLS_RSA_WITH_AES_128_GCM_SHA256"; break; case TLS_RSA_WITH_AES_256_GCM_SHA384: cipherName = "TLS_RSA_WITH_AES_256_GCM_SHA384"; break; case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: cipherName = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"; paramsNeeded = 1; break; case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: cipherName = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"; paramsNeeded = 1; break; case TLS_DH_RSA_WITH_AES_128_GCM_SHA256: cipherName = "TLS_DH_RSA_WITH_AES_128_GCM_SHA256"; paramsNeeded = 1; break; case TLS_DH_RSA_WITH_AES_256_GCM_SHA384: cipherName = "TLS_DH_RSA_WITH_AES_256_GCM_SHA384"; paramsNeeded = 1; break; case TLS_DHE_DSS_WITH_AES_128_GCM_SHA256: cipherName = "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256"; paramsNeeded = 1; break; case TLS_DHE_DSS_WITH_AES_256_GCM_SHA384: cipherName = "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384"; paramsNeeded = 1; break; case TLS_DH_DSS_WITH_AES_128_GCM_SHA256: cipherName = "TLS_DH_DSS_WITH_AES_128_GCM_SHA256"; paramsNeeded = 1; break; case TLS_DH_DSS_WITH_AES_256_GCM_SHA384: cipherName = "TLS_DH_DSS_WITH_AES_256_GCM_SHA384"; paramsNeeded = 1; break; case TLS_DH_anon_WITH_AES_128_GCM_SHA256: cipherName = "TLS_DH_anon_WITH_AES_128_GCM_SHA256"; paramsNeeded = 1; break; case TLS_DH_anon_WITH_AES_256_GCM_SHA384: cipherName = "TLS_DH_anon_WITH_AES_256_GCM_SHA384"; paramsNeeded = 1; break; case TLS_PSK_WITH_AES_128_GCM_SHA256: cipherName = "TLS_PSK_WITH_AES_128_GCM_SHA256"; break; case TLS_PSK_WITH_AES_256_GCM_SHA384: cipherName = "TLS_PSK_WITH_AES_256_GCM_SHA384"; break; case TLS_DHE_PSK_WITH_AES_128_GCM_SHA256: cipherName = "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256"; paramsNeeded = 1; break; case TLS_DHE_PSK_WITH_AES_256_GCM_SHA384: cipherName = "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384"; paramsNeeded = 1; break; case TLS_RSA_PSK_WITH_AES_128_GCM_SHA256: cipherName = "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256"; break; case TLS_RSA_PSK_WITH_AES_256_GCM_SHA384: cipherName = "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384"; break; case TLS_PSK_WITH_AES_128_CBC_SHA256: cipherName = "TLS_PSK_WITH_AES_128_CBC_SHA256"; break; case TLS_PSK_WITH_AES_256_CBC_SHA384: cipherName = "TLS_PSK_WITH_AES_256_CBC_SHA384"; break; case TLS_PSK_WITH_NULL_SHA256: cipherName = "TLS_PSK_WITH_NULL_SHA256"; break; case TLS_PSK_WITH_NULL_SHA384: cipherName = "TLS_PSK_WITH_NULL_SHA384"; break; case TLS_DHE_PSK_WITH_AES_128_CBC_SHA256: cipherName = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256"; paramsNeeded = 1; break; case TLS_DHE_PSK_WITH_AES_256_CBC_SHA384: cipherName = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384"; paramsNeeded = 1; break; case TLS_DHE_PSK_WITH_NULL_SHA256: cipherName = "TLS_DHE_PSK_WITH_NULL_SHA256"; paramsNeeded = 1; break; case TLS_DHE_PSK_WITH_NULL_SHA384: cipherName = "TLS_DHE_PSK_WITH_NULL_SHA384"; paramsNeeded = 1; break; case TLS_RSA_PSK_WITH_AES_128_CBC_SHA256: cipherName = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256"; break; case TLS_RSA_PSK_WITH_AES_256_CBC_SHA384: cipherName = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384"; break; case TLS_RSA_PSK_WITH_NULL_SHA256: cipherName = "TLS_RSA_PSK_WITH_NULL_SHA256"; break; case TLS_RSA_PSK_WITH_NULL_SHA384: cipherName = "TLS_RSA_PSK_WITH_NULL_SHA384"; break; case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"; paramsNeeded = 1; break; case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"; paramsNeeded = 1; break; case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256: cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"; paramsNeeded = 1; break; case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384: cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"; paramsNeeded = 1; break; case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: cipherName = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"; paramsNeeded = 1; break; case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384: cipherName = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"; paramsNeeded = 1; break; case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256: cipherName = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"; paramsNeeded = 1; break; case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384: cipherName = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"; paramsNeeded = 1; break; case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"; paramsNeeded = 1; break; case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"; paramsNeeded = 1; break; case TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256: cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"; paramsNeeded = 1; break; case TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384: cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"; paramsNeeded = 1; break; case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: cipherName = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"; paramsNeeded = 1; break; case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: cipherName = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"; paramsNeeded = 1; break; case TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256: cipherName = "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"; paramsNeeded = 1; break; case TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384: cipherName = "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"; paramsNeeded = 1; break; case TLS_RSA_WITH_AES_128_CBC_SHA: cipherName = "TLS_RSA_WITH_AES_128_CBC_SHA"; break; case TLS_DH_DSS_WITH_AES_128_CBC_SHA: cipherName = "TLS_DH_DSS_WITH_AES_128_CBC_SHA"; paramsNeeded = 1; break; case TLS_DH_RSA_WITH_AES_128_CBC_SHA: cipherName = "TLS_DH_RSA_WITH_AES_128_CBC_SHA"; paramsNeeded = 1; break; case TLS_DHE_DSS_WITH_AES_128_CBC_SHA: cipherName = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"; paramsNeeded = 1; break; case TLS_DHE_RSA_WITH_AES_128_CBC_SHA: cipherName = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"; paramsNeeded = 1; break; case TLS_DH_anon_WITH_AES_128_CBC_SHA: cipherName = "TLS_DH_anon_WITH_AES_128_CBC_SHA"; paramsNeeded = 1; break; case TLS_RSA_WITH_AES_256_CBC_SHA: cipherName = "TLS_RSA_WITH_AES_256_CBC_SHA"; break; case TLS_DH_DSS_WITH_AES_256_CBC_SHA: cipherName = "TLS_DH_DSS_WITH_AES_256_CBC_SHA"; paramsNeeded = 1; break; case TLS_DH_RSA_WITH_AES_256_CBC_SHA: cipherName = "TLS_DH_RSA_WITH_AES_256_CBC_SHA"; paramsNeeded = 1; break; case TLS_DHE_DSS_WITH_AES_256_CBC_SHA: cipherName = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"; paramsNeeded = 1; break; case TLS_DHE_RSA_WITH_AES_256_CBC_SHA: cipherName = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"; paramsNeeded = 1; break; case TLS_DH_anon_WITH_AES_256_CBC_SHA: cipherName = "TLS_DH_anon_WITH_AES_256_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDH_ECDSA_WITH_NULL_SHA: cipherName = "TLS_ECDH_ECDSA_WITH_NULL_SHA"; paramsNeeded = 1; break; case TLS_ECDH_ECDSA_WITH_RC4_128_SHA: cipherName = "TLS_ECDH_ECDSA_WITH_RC4_128_SHA"; paramsNeeded = 1; break; case TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA: cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA: cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDHE_ECDSA_WITH_NULL_SHA: cipherName = "TLS_ECDHE_ECDSA_WITH_NULL_SHA"; paramsNeeded = 1; break; case TLS_ECDHE_ECDSA_WITH_RC4_128_SHA: cipherName = "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"; paramsNeeded = 1; break; case TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDH_RSA_WITH_NULL_SHA: cipherName = "TLS_ECDH_RSA_WITH_NULL_SHA"; paramsNeeded = 1; break; case TLS_ECDH_RSA_WITH_RC4_128_SHA: cipherName = "TLS_ECDH_RSA_WITH_RC4_128_SHA"; paramsNeeded = 1; break; case TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA: cipherName = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA: cipherName = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDHE_RSA_WITH_NULL_SHA: cipherName = "TLS_ECDHE_RSA_WITH_NULL_SHA"; paramsNeeded = 1; break; case TLS_ECDHE_RSA_WITH_RC4_128_SHA: cipherName = "TLS_ECDHE_RSA_WITH_RC4_128_SHA"; paramsNeeded = 1; break; case TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: cipherName = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: cipherName = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDH_anon_WITH_NULL_SHA: cipherName = "TLS_ECDH_anon_WITH_NULL_SHA"; paramsNeeded = 1; break; case TLS_ECDH_anon_WITH_RC4_128_SHA: cipherName = "TLS_ECDH_anon_WITH_RC4_128_SHA"; paramsNeeded = 1; break; case TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA: cipherName = "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDH_anon_WITH_AES_128_CBC_SHA: cipherName = "TLS_ECDH_anon_WITH_AES_128_CBC_SHA"; paramsNeeded = 1; break; case TLS_ECDH_anon_WITH_AES_256_CBC_SHA: cipherName = "TLS_ECDH_anon_WITH_AES_256_CBC_SHA"; paramsNeeded = 1; break; default : snprintf(unknownCipherName, sizeof(unknownCipherName), "UNKNOWN_%04X", cipher); cipherName = unknownCipherName; break; } if (cipher == TLS_RSA_WITH_RC4_128_MD5 || cipher == TLS_RSA_WITH_RC4_128_SHA) { printf("%s: ERROR (Printers MUST NOT negotiate RC4 cipher suites.)\n", server); httpClose(http); return (1); } if ((err = SSLGetDiffieHellmanParams(http->tls, ¶ms, ¶msLen)) != noErr && paramsNeeded) { printf("%s: ERROR (Unable to get Diffie-Hellman parameters - %d)\n", server, (int)err); httpClose(http); return (1); } if (paramsLen < 128 && paramsLen != 0) { printf("%s: ERROR (Diffie-Hellman parameters MUST be at least 2048 bits, but Printer uses only %d bits/%d bytes)\n", server, (int)paramsLen * 8, (int)paramsLen); httpClose(http); return (1); } dhBits = (int)paramsLen * 8; #endif /* __APPLE__ */ if (dhBits > 0) printf("%s: OK (TLS: %d.%d, %s, %d DH bits)\n", server, tlsVersion / 10, tlsVersion % 10, cipherName, dhBits); else printf("%s: OK (TLS: %d.%d, %s)\n", server, tlsVersion / 10, tlsVersion % 10, cipherName); if (verbose) { httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipps", NULL, host, port, resource); request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs); response = cupsDoRequest(http, request, resource); for (attr = ippFirstAttribute(response); attr; attr = ippNextAttribute(response)) { if (ippGetGroupTag(attr) != IPP_TAG_PRINTER) continue; if ((name = ippGetName(attr)) == NULL) continue; ippAttributeString(attr, value, sizeof(value)); printf(" %s=%s\n", name, value); } ippDelete(response); } httpClose(http); return (0); } /* * 'usage()' - Show program usage. */ static void usage(void) { puts("Usage: ./tlscheck [options] server [port]"); puts(" ./tlscheck [options] ipps://server[:port]/path"); puts(""); puts("Options:"); puts(" --dh Allow DH/DHE key exchange"); puts(" --no-cbc Disable CBC cipher suites"); puts(" --no-tls10 Disable TLS/1.0"); puts(" --rc4 Allow RC4 encryption"); puts(" --tls10 Only use TLS/1.0"); puts(" --verbose Be verbose"); puts(" -4 Connect using IPv4 addresses only"); puts(" -6 Connect using IPv6 addresses only"); puts(" -v Be verbose"); puts(""); puts("The default port is 631."); exit(1); } #endif /* !HAVE_SSL */ cups-2.2.7/cups/transcode.c000664 000765 000024 00000036626 13255074424 016270 0ustar00msweetstaff000000 000000 /* * Transcoding support for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include #include #ifdef HAVE_ICONV_H # include #endif /* HAVE_ICONV_H */ /* * Local globals... */ #ifdef HAVE_ICONV_H static _cups_mutex_t map_mutex = _CUPS_MUTEX_INITIALIZER; /* Mutex to control access to maps */ static iconv_t map_from_utf8 = (iconv_t)-1; /* Convert from UTF-8 to charset */ static iconv_t map_to_utf8 = (iconv_t)-1; /* Convert from charset to UTF-8 */ static cups_encoding_t map_encoding = CUPS_AUTO_ENCODING; /* Which charset is cached */ #endif /* HAVE_ICONV_H */ /* * '_cupsCharmapFlush()' - Flush all character set maps out of cache. */ void _cupsCharmapFlush(void) { #ifdef HAVE_ICONV_H if (map_from_utf8 != (iconv_t)-1) { iconv_close(map_from_utf8); map_from_utf8 = (iconv_t)-1; } if (map_to_utf8 != (iconv_t)-1) { iconv_close(map_to_utf8); map_to_utf8 = (iconv_t)-1; } map_encoding = CUPS_AUTO_ENCODING; #endif /* HAVE_ICONV_H */ } /* * 'cupsCharsetToUTF8()' - Convert legacy character set to UTF-8. */ int /* O - Count or -1 on error */ cupsCharsetToUTF8( cups_utf8_t *dest, /* O - Target string */ const char *src, /* I - Source string */ const int maxout, /* I - Max output */ const cups_encoding_t encoding) /* I - Encoding */ { cups_utf8_t *destptr; /* Pointer into UTF-8 buffer */ #ifdef HAVE_ICONV_H size_t srclen, /* Length of source string */ outBytesLeft; /* Bytes remaining in output buffer */ #endif /* HAVE_ICONV_H */ /* * Check for valid arguments... */ DEBUG_printf(("2cupsCharsetToUTF8(dest=%p, src=\"%s\", maxout=%d, encoding=%d)", (void *)dest, src, maxout, encoding)); if (!dest || !src || maxout < 1) { if (dest) *dest = '\0'; DEBUG_puts("3cupsCharsetToUTF8: Bad arguments, returning -1"); return (-1); } /* * Handle identity conversions... */ if (encoding == CUPS_UTF8 || encoding <= CUPS_US_ASCII || encoding >= CUPS_ENCODING_VBCS_END) { strlcpy((char *)dest, src, (size_t)maxout); return ((int)strlen((char *)dest)); } /* * Handle ISO-8859-1 to UTF-8 directly... */ destptr = dest; if (encoding == CUPS_ISO8859_1) { int ch; /* Character from string */ cups_utf8_t *destend; /* End of UTF-8 buffer */ destend = dest + maxout - 2; while (*src && destptr < destend) { ch = *src++ & 255; if (ch & 128) { *destptr++ = (cups_utf8_t)(0xc0 | (ch >> 6)); *destptr++ = (cups_utf8_t)(0x80 | (ch & 0x3f)); } else *destptr++ = (cups_utf8_t)ch; } *destptr = '\0'; return ((int)(destptr - dest)); } /* * Convert input legacy charset to UTF-8... */ #ifdef HAVE_ICONV_H _cupsMutexLock(&map_mutex); if (map_encoding != encoding) { char toset[1024]; /* Destination character set */ _cupsCharmapFlush(); snprintf(toset, sizeof(toset), "%s//IGNORE", _cupsEncodingName(encoding)); map_encoding = encoding; map_from_utf8 = iconv_open(_cupsEncodingName(encoding), "UTF-8"); map_to_utf8 = iconv_open("UTF-8", toset); } if (map_to_utf8 != (iconv_t)-1) { char *altdestptr = (char *)dest; /* Silence bogus GCC type-punned */ srclen = strlen(src); outBytesLeft = (size_t)maxout - 1; iconv(map_to_utf8, (char **)&src, &srclen, &altdestptr, &outBytesLeft); *altdestptr = '\0'; _cupsMutexUnlock(&map_mutex); return ((int)(altdestptr - (char *)dest)); } _cupsMutexUnlock(&map_mutex); #endif /* HAVE_ICONV_H */ /* * No iconv() support, so error out... */ *destptr = '\0'; return (-1); } /* * 'cupsUTF8ToCharset()' - Convert UTF-8 to legacy character set. */ int /* O - Count or -1 on error */ cupsUTF8ToCharset( char *dest, /* O - Target string */ const cups_utf8_t *src, /* I - Source string */ const int maxout, /* I - Max output */ const cups_encoding_t encoding) /* I - Encoding */ { char *destptr; /* Pointer into destination */ #ifdef HAVE_ICONV_H size_t srclen, /* Length of source string */ outBytesLeft; /* Bytes remaining in output buffer */ #endif /* HAVE_ICONV_H */ /* * Check for valid arguments... */ if (!dest || !src || maxout < 1) { if (dest) *dest = '\0'; return (-1); } /* * Handle identity conversions... */ if (encoding == CUPS_UTF8 || encoding >= CUPS_ENCODING_VBCS_END) { strlcpy(dest, (char *)src, (size_t)maxout); return ((int)strlen(dest)); } /* * Handle UTF-8 to ISO-8859-1 directly... */ destptr = dest; if (encoding == CUPS_ISO8859_1 || encoding <= CUPS_US_ASCII) { int ch, /* Character from string */ maxch; /* Maximum character for charset */ char *destend; /* End of ISO-8859-1 buffer */ maxch = encoding == CUPS_ISO8859_1 ? 256 : 128; destend = dest + maxout - 1; while (*src && destptr < destend) { ch = *src++; if ((ch & 0xe0) == 0xc0) { ch = ((ch & 0x1f) << 6) | (*src++ & 0x3f); if (ch < maxch) *destptr++ = (char)ch; else *destptr++ = '?'; } else if ((ch & 0xf0) == 0xe0 || (ch & 0xf8) == 0xf0) *destptr++ = '?'; else if (!(ch & 0x80)) *destptr++ = (char)ch; } *destptr = '\0'; return ((int)(destptr - dest)); } #ifdef HAVE_ICONV_H /* * Convert input UTF-8 to legacy charset... */ _cupsMutexLock(&map_mutex); if (map_encoding != encoding) { char toset[1024]; /* Destination character set */ _cupsCharmapFlush(); snprintf(toset, sizeof(toset), "%s//IGNORE", _cupsEncodingName(encoding)); map_encoding = encoding; map_from_utf8 = iconv_open(_cupsEncodingName(encoding), "UTF-8"); map_to_utf8 = iconv_open("UTF-8", toset); } if (map_from_utf8 != (iconv_t)-1) { char *altsrc = (char *)src; /* Silence bogus GCC type-punned */ srclen = strlen((char *)src); outBytesLeft = (size_t)maxout - 1; iconv(map_from_utf8, &altsrc, &srclen, &destptr, &outBytesLeft); *destptr = '\0'; _cupsMutexUnlock(&map_mutex); return ((int)(destptr - dest)); } _cupsMutexUnlock(&map_mutex); #endif /* HAVE_ICONV_H */ /* * No iconv() support, so error out... */ *destptr = '\0'; return (-1); } /* * 'cupsUTF8ToUTF32()' - Convert UTF-8 to UTF-32. * * 32-bit UTF-32 (actually 21-bit) maps to UTF-8 as follows... * * UTF-32 char UTF-8 char(s) * -------------------------------------------------- * 0 to 127 = 0xxxxxxx (US-ASCII) * 128 to 2047 = 110xxxxx 10yyyyyy * 2048 to 65535 = 1110xxxx 10yyyyyy 10zzzzzz * > 65535 = 11110xxx 10yyyyyy 10zzzzzz 10xxxxxx * * UTF-32 prohibits chars beyond Plane 16 (> 0x10ffff) in UCS-4, * which would convert to five- or six-octet UTF-8 sequences... */ int /* O - Count or -1 on error */ cupsUTF8ToUTF32( cups_utf32_t *dest, /* O - Target string */ const cups_utf8_t *src, /* I - Source string */ const int maxout) /* I - Max output */ { int i; /* Looping variable */ cups_utf8_t ch; /* Character value */ cups_utf8_t next; /* Next character value */ cups_utf32_t ch32; /* UTF-32 character value */ /* * Check for valid arguments and clear output... */ DEBUG_printf(("2cupsUTF8ToUTF32(dest=%p, src=\"%s\", maxout=%d)", (void *)dest, src, maxout)); if (dest) *dest = 0; if (!dest || !src || maxout < 1 || maxout > CUPS_MAX_USTRING) { DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad arguments)"); return (-1); } /* * Convert input UTF-8 to output UTF-32... */ for (i = maxout - 1; *src && i > 0; i --) { ch = *src++; /* * Convert UTF-8 character(s) to UTF-32 character... */ if (!(ch & 0x80)) { /* * One-octet UTF-8 <= 127 (US-ASCII)... */ *dest++ = ch; DEBUG_printf(("4cupsUTF8ToUTF32: %02x => %08X", src[-1], ch)); continue; } else if ((ch & 0xe0) == 0xc0) { /* * Two-octet UTF-8 <= 2047 (Latin-x)... */ next = *src++; if ((next & 0xc0) != 0x80) { DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } ch32 = (cups_utf32_t)((ch & 0x1f) << 6) | (cups_utf32_t)(next & 0x3f); /* * Check for non-shortest form (invalid UTF-8)... */ if (ch32 < 0x80) { DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } *dest++ = ch32; DEBUG_printf(("4cupsUTF8ToUTF32: %02x %02x => %08X", src[-2], src[-1], (unsigned)ch32)); } else if ((ch & 0xf0) == 0xe0) { /* * Three-octet UTF-8 <= 65535 (Plane 0 - BMP)... */ next = *src++; if ((next & 0xc0) != 0x80) { DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } ch32 = (cups_utf32_t)((ch & 0x0f) << 6) | (cups_utf32_t)(next & 0x3f); next = *src++; if ((next & 0xc0) != 0x80) { DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } ch32 = (ch32 << 6) | (cups_utf32_t)(next & 0x3f); /* * Check for non-shortest form (invalid UTF-8)... */ if (ch32 < 0x800) { DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } *dest++ = ch32; DEBUG_printf(("4cupsUTF8ToUTF32: %02x %02x %02x => %08X", src[-3], src[-2], src[-1], (unsigned)ch32)); } else if ((ch & 0xf8) == 0xf0) { /* * Four-octet UTF-8... */ next = *src++; if ((next & 0xc0) != 0x80) { DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } ch32 = (cups_utf32_t)((ch & 0x07) << 6) | (cups_utf32_t)(next & 0x3f); next = *src++; if ((next & 0xc0) != 0x80) { DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } ch32 = (ch32 << 6) | (cups_utf32_t)(next & 0x3f); next = *src++; if ((next & 0xc0) != 0x80) { DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } ch32 = (ch32 << 6) | (cups_utf32_t)(next & 0x3f); /* * Check for non-shortest form (invalid UTF-8)... */ if (ch32 < 0x10000) { DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } *dest++ = ch32; DEBUG_printf(("4cupsUTF8ToUTF32: %02x %02x %02x %02x => %08X", src[-4], src[-3], src[-2], src[-1], (unsigned)ch32)); } else { /* * More than 4-octet (invalid UTF-8 sequence)... */ DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } /* * Check for UTF-16 surrogate (illegal UTF-8)... */ if (ch32 >= 0xd800 && ch32 <= 0xdfff) return (-1); } *dest = 0; DEBUG_printf(("3cupsUTF8ToUTF32: Returning %d characters", maxout - 1 - i)); return (maxout - 1 - i); } /* * 'cupsUTF32ToUTF8()' - Convert UTF-32 to UTF-8. * * 32-bit UTF-32 (actually 21-bit) maps to UTF-8 as follows... * * UTF-32 char UTF-8 char(s) * -------------------------------------------------- * 0 to 127 = 0xxxxxxx (US-ASCII) * 128 to 2047 = 110xxxxx 10yyyyyy * 2048 to 65535 = 1110xxxx 10yyyyyy 10zzzzzz * > 65535 = 11110xxx 10yyyyyy 10zzzzzz 10xxxxxx * * UTF-32 prohibits chars beyond Plane 16 (> 0x10ffff) in UCS-4, * which would convert to five- or six-octet UTF-8 sequences... */ int /* O - Count or -1 on error */ cupsUTF32ToUTF8( cups_utf8_t *dest, /* O - Target string */ const cups_utf32_t *src, /* I - Source string */ const int maxout) /* I - Max output */ { cups_utf8_t *start; /* Start of destination string */ int i; /* Looping variable */ int swap; /* Byte-swap input to output */ cups_utf32_t ch; /* Character value */ /* * Check for valid arguments and clear output... */ DEBUG_printf(("2cupsUTF32ToUTF8(dest=%p, src=%p, maxout=%d)", (void *)dest, (void *)src, maxout)); if (dest) *dest = '\0'; if (!dest || !src || maxout < 1) { DEBUG_puts("3cupsUTF32ToUTF8: Returning -1 (bad args)"); return (-1); } /* * Check for leading BOM in UTF-32 and inverted BOM... */ start = dest; swap = *src == 0xfffe0000; DEBUG_printf(("4cupsUTF32ToUTF8: swap=%d", swap)); if (*src == 0xfffe0000 || *src == 0xfeff) src ++; /* * Convert input UTF-32 to output UTF-8... */ for (i = maxout - 1; *src && i > 0;) { ch = *src++; /* * Byte swap input UTF-32, if necessary... * (only byte-swapping 24 of 32 bits) */ if (swap) ch = ((ch >> 24) | ((ch >> 8) & 0xff00) | ((ch << 8) & 0xff0000)); /* * Check for beyond Plane 16 (invalid UTF-32)... */ if (ch > 0x10ffff) { DEBUG_puts("3cupsUTF32ToUTF8: Returning -1 (character out of range)"); return (-1); } /* * Convert UTF-32 character to UTF-8 character(s)... */ if (ch < 0x80) { /* * One-octet UTF-8 <= 127 (US-ASCII)... */ *dest++ = (cups_utf8_t)ch; i --; DEBUG_printf(("4cupsUTF32ToUTF8: %08x => %02x", (unsigned)ch, dest[-1])); } else if (ch < 0x800) { /* * Two-octet UTF-8 <= 2047 (Latin-x)... */ if (i < 2) { DEBUG_puts("3cupsUTF32ToUTF8: Returning -1 (too long 2)"); return (-1); } *dest++ = (cups_utf8_t)(0xc0 | ((ch >> 6) & 0x1f)); *dest++ = (cups_utf8_t)(0x80 | (ch & 0x3f)); i -= 2; DEBUG_printf(("4cupsUTF32ToUTF8: %08x => %02x %02x", (unsigned)ch, dest[-2], dest[-1])); } else if (ch < 0x10000) { /* * Three-octet UTF-8 <= 65535 (Plane 0 - BMP)... */ if (i < 3) { DEBUG_puts("3cupsUTF32ToUTF8: Returning -1 (too long 3)"); return (-1); } *dest++ = (cups_utf8_t)(0xe0 | ((ch >> 12) & 0x0f)); *dest++ = (cups_utf8_t)(0x80 | ((ch >> 6) & 0x3f)); *dest++ = (cups_utf8_t)(0x80 | (ch & 0x3f)); i -= 3; DEBUG_printf(("4cupsUTF32ToUTF8: %08x => %02x %02x %02x", (unsigned)ch, dest[-3], dest[-2], dest[-1])); } else { /* * Four-octet UTF-8... */ if (i < 4) { DEBUG_puts("3cupsUTF32ToUTF8: Returning -1 (too long 4)"); return (-1); } *dest++ = (cups_utf8_t)(0xf0 | ((ch >> 18) & 0x07)); *dest++ = (cups_utf8_t)(0x80 | ((ch >> 12) & 0x3f)); *dest++ = (cups_utf8_t)(0x80 | ((ch >> 6) & 0x3f)); *dest++ = (cups_utf8_t)(0x80 | (ch & 0x3f)); i -= 4; DEBUG_printf(("4cupsUTF32ToUTF8: %08x => %02x %02x %02x %02x", (unsigned)ch, dest[-4], dest[-3], dest[-2], dest[-1])); } } *dest = '\0'; DEBUG_printf(("3cupsUTF32ToUTF8: Returning %d", (int)(dest - start))); return ((int)(dest - start)); } cups-2.2.7/cups/transcode.h000664 000765 000024 00000003726 13255074424 016270 0ustar00msweetstaff000000 000000 /* * Transcoding definitions for CUPS. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_TRANSCODE_H_ # define _CUPS_TRANSCODE_H_ /* * Include necessary headers... */ # include "language.h" # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Constants... */ # define CUPS_MAX_USTRING 8192 /* Max size of Unicode string */ /* * Types... */ typedef unsigned char cups_utf8_t; /* UTF-8 Unicode/ISO-10646 unit */ typedef unsigned long cups_utf32_t; /* UTF-32 Unicode/ISO-10646 unit */ typedef unsigned short cups_ucs2_t; /* UCS-2 Unicode/ISO-10646 unit */ typedef unsigned long cups_ucs4_t; /* UCS-4 Unicode/ISO-10646 unit */ typedef unsigned char cups_sbcs_t; /* SBCS Legacy 8-bit unit */ typedef unsigned short cups_dbcs_t; /* DBCS Legacy 16-bit unit */ typedef unsigned long cups_vbcs_t; /* VBCS Legacy 32-bit unit */ /* EUC uses 8, 16, 24, 32-bit */ /* * Prototypes... */ extern int cupsCharsetToUTF8(cups_utf8_t *dest, const char *src, const int maxout, const cups_encoding_t encoding) _CUPS_API_1_2; extern int cupsUTF8ToCharset(char *dest, const cups_utf8_t *src, const int maxout, const cups_encoding_t encoding) _CUPS_API_1_2; extern int cupsUTF8ToUTF32(cups_utf32_t *dest, const cups_utf8_t *src, const int maxout) _CUPS_API_1_2; extern int cupsUTF32ToUTF8(cups_utf8_t *dest, const cups_utf32_t *src, const int maxout) _CUPS_API_1_2; # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_TRANSCODE_H_ */ cups-2.2.7/cups/usersys.c000664 000765 000024 00000105666 13255074424 016024 0ustar00msweetstaff000000 000000 /* * User, system, and password routines for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include #include #ifdef WIN32 # include #else # include # include # include #endif /* WIN32 */ /* * Local constants... */ #ifdef __APPLE__ # define kCUPSPrintingPrefs CFSTR("org.cups.PrintingPrefs") # define kAllowAnyRootKey CFSTR("AllowAnyRoot") # define kAllowExpiredCertsKey CFSTR("AllowExpiredCerts") # define kEncryptionKey CFSTR("Encryption") # define kGSSServiceNameKey CFSTR("GSSServiceName") # define kSSLOptionsKey CFSTR("SSLOptions") # define kTrustOnFirstUseKey CFSTR("TrustOnFirstUse") # define kValidateCertsKey CFSTR("ValidateCerts") #endif /* __APPLE__ */ #define _CUPS_PASSCHAR '*' /* Character that is echoed for password */ /* * Local types... */ typedef struct _cups_client_conf_s /**** client.conf config data ****/ { #ifdef HAVE_SSL int ssl_options, /* SSLOptions values */ ssl_min_version,/* Minimum SSL/TLS version */ ssl_max_version;/* Maximum SSL/TLS version */ #endif /* HAVE_SSL */ int trust_first, /* Trust on first use? */ any_root, /* Allow any (e.g., self-signed) root */ expired_certs, /* Allow expired certs */ validate_certs; /* Validate certificates */ http_encryption_t encryption; /* Encryption setting */ char user[65], /* User name */ server_name[256]; /* Server hostname */ #ifdef HAVE_GSSAPI char gss_service_name[32]; /* Kerberos service name */ #endif /* HAVE_GSSAPI */ } _cups_client_conf_t; /* * Local functions... */ #ifdef __APPLE__ static int cups_apple_get_boolean(CFStringRef key, int *value); static int cups_apple_get_string(CFStringRef key, char *value, size_t valsize); #endif /* __APPLE__ */ static int cups_boolean_value(const char *value); static void cups_finalize_client_conf(_cups_client_conf_t *cc); static void cups_init_client_conf(_cups_client_conf_t *cc); static void cups_read_client_conf(cups_file_t *fp, _cups_client_conf_t *cc); static void cups_set_default_ipp_port(_cups_globals_t *cg); static void cups_set_encryption(_cups_client_conf_t *cc, const char *value); #ifdef HAVE_GSSAPI static void cups_set_gss_service_name(_cups_client_conf_t *cc, const char *value); #endif /* HAVE_GSSAPI */ static void cups_set_server_name(_cups_client_conf_t *cc, const char *value); #ifdef HAVE_SSL static void cups_set_ssl_options(_cups_client_conf_t *cc, const char *value); #endif /* HAVE_SSL */ static void cups_set_user(_cups_client_conf_t *cc, const char *value); /* * 'cupsEncryption()' - Get the current encryption settings. * * The default encryption setting comes from the CUPS_ENCRYPTION * environment variable, then the ~/.cups/client.conf file, and finally the * /etc/cups/client.conf file. If not set, the default is * @code HTTP_ENCRYPTION_IF_REQUESTED@. * * Note: The current encryption setting is tracked separately for each thread * in a program. Multi-threaded programs that override the setting via the * @link cupsSetEncryption@ function need to do so in each thread for the same * setting to be used. */ http_encryption_t /* O - Encryption settings */ cupsEncryption(void) { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ if (cg->encryption == (http_encryption_t)-1) _cupsSetDefaults(); return (cg->encryption); } /* * 'cupsGetPassword()' - Get a password from the user. * * Uses the current password callback function. Returns @code NULL@ if the * user does not provide a password. * * Note: The current password callback function is tracked separately for each * thread in a program. Multi-threaded programs that override the setting via * the @link cupsSetPasswordCB@ or @link cupsSetPasswordCB2@ functions need to * do so in each thread for the same function to be used. * * @exclude all@ */ const char * /* O - Password */ cupsGetPassword(const char *prompt) /* I - Prompt string */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ return ((cg->password_cb)(prompt, NULL, NULL, NULL, cg->password_data)); } /* * 'cupsGetPassword2()' - Get a password from the user using the current * password callback. * * Uses the current password callback function. Returns @code NULL@ if the * user does not provide a password. * * Note: The current password callback function is tracked separately for each * thread in a program. Multi-threaded programs that override the setting via * the @link cupsSetPasswordCB2@ function need to do so in each thread for the * same function to be used. * * @since CUPS 1.4/macOS 10.6@ */ const char * /* O - Password */ cupsGetPassword2(const char *prompt, /* I - Prompt string */ http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *method, /* I - Request method ("GET", "POST", "PUT") */ const char *resource) /* I - Resource path */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ if (!http) http = _cupsConnect(); return ((cg->password_cb)(prompt, http, method, resource, cg->password_data)); } /* * 'cupsServer()' - Return the hostname/address of the current server. * * The default server comes from the CUPS_SERVER environment variable, then the * ~/.cups/client.conf file, and finally the /etc/cups/client.conf file. If not * set, the default is the local system - either "localhost" or a domain socket * path. * * The returned value can be a fully-qualified hostname, a numeric IPv4 or IPv6 * address, or a domain socket pathname. * * Note: The current server is tracked separately for each thread in a program. * Multi-threaded programs that override the server via the * @link cupsSetServer@ function need to do so in each thread for the same * server to be used. */ const char * /* O - Server name */ cupsServer(void) { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ if (!cg->server[0]) _cupsSetDefaults(); return (cg->server); } /* * 'cupsSetClientCertCB()' - Set the client certificate callback. * * Pass @code NULL@ to restore the default callback. * * Note: The current certificate callback is tracked separately for each thread * in a program. Multi-threaded programs that override the callback need to do * so in each thread for the same callback to be used. * * @since CUPS 1.5/macOS 10.7@ */ void cupsSetClientCertCB( cups_client_cert_cb_t cb, /* I - Callback function */ void *user_data) /* I - User data pointer */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ cg->client_cert_cb = cb; cg->client_cert_data = user_data; } /* * 'cupsSetCredentials()' - Set the default credentials to be used for SSL/TLS * connections. * * Note: The default credentials are tracked separately for each thread in a * program. Multi-threaded programs that override the setting need to do so in * each thread for the same setting to be used. * * @since CUPS 1.5/macOS 10.7@ */ int /* O - Status of call (0 = success) */ cupsSetCredentials( cups_array_t *credentials) /* I - Array of credentials */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ if (cupsArrayCount(credentials) < 1) return (-1); #ifdef HAVE_SSL _httpFreeCredentials(cg->tls_credentials); cg->tls_credentials = _httpCreateCredentials(credentials); #endif /* HAVE_SSL */ return (cg->tls_credentials ? 0 : -1); } /* * 'cupsSetEncryption()' - Set the encryption preference. * * The default encryption setting comes from the CUPS_ENCRYPTION * environment variable, then the ~/.cups/client.conf file, and finally the * /etc/cups/client.conf file. If not set, the default is * @code HTTP_ENCRYPTION_IF_REQUESTED@. * * Note: The current encryption setting is tracked separately for each thread * in a program. Multi-threaded programs that override the setting need to do * so in each thread for the same setting to be used. */ void cupsSetEncryption(http_encryption_t e) /* I - New encryption preference */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ cg->encryption = e; if (cg->http) httpEncryption(cg->http, e); } /* * 'cupsSetPasswordCB()' - Set the password callback for CUPS. * * Pass @code NULL@ to restore the default (console) password callback, which * reads the password from the console. Programs should call either this * function or @link cupsSetPasswordCB2@, as only one callback can be registered * by a program per thread. * * Note: The current password callback is tracked separately for each thread * in a program. Multi-threaded programs that override the callback need to do * so in each thread for the same callback to be used. * * @exclude all@ */ void cupsSetPasswordCB(cups_password_cb_t cb)/* I - Callback function */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ if (cb == (cups_password_cb_t)0) cg->password_cb = (cups_password_cb2_t)_cupsGetPassword; else cg->password_cb = (cups_password_cb2_t)cb; cg->password_data = NULL; } /* * 'cupsSetPasswordCB2()' - Set the advanced password callback for CUPS. * * Pass @code NULL@ to restore the default (console) password callback, which * reads the password from the console. Programs should call either this * function or @link cupsSetPasswordCB2@, as only one callback can be registered * by a program per thread. * * Note: The current password callback is tracked separately for each thread * in a program. Multi-threaded programs that override the callback need to do * so in each thread for the same callback to be used. * * @since CUPS 1.4/macOS 10.6@ */ void cupsSetPasswordCB2( cups_password_cb2_t cb, /* I - Callback function */ void *user_data) /* I - User data pointer */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ if (cb == (cups_password_cb2_t)0) cg->password_cb = (cups_password_cb2_t)_cupsGetPassword; else cg->password_cb = cb; cg->password_data = user_data; } /* * 'cupsSetServer()' - Set the default server name and port. * * The "server" string can be a fully-qualified hostname, a numeric * IPv4 or IPv6 address, or a domain socket pathname. Hostnames and numeric IP * addresses can be optionally followed by a colon and port number to override * the default port 631, e.g. "hostname:8631". Pass @code NULL@ to restore the * default server name and port. * * Note: The current server is tracked separately for each thread in a program. * Multi-threaded programs that override the server need to do so in each * thread for the same server to be used. */ void cupsSetServer(const char *server) /* I - Server name */ { char *options, /* Options */ *port; /* Pointer to port */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ if (server) { strlcpy(cg->server, server, sizeof(cg->server)); if (cg->server[0] != '/' && (options = strrchr(cg->server, '/')) != NULL) { *options++ = '\0'; if (!strcmp(options, "version=1.0")) cg->server_version = 10; else if (!strcmp(options, "version=1.1")) cg->server_version = 11; else if (!strcmp(options, "version=2.0")) cg->server_version = 20; else if (!strcmp(options, "version=2.1")) cg->server_version = 21; else if (!strcmp(options, "version=2.2")) cg->server_version = 22; } else cg->server_version = 20; if (cg->server[0] != '/' && (port = strrchr(cg->server, ':')) != NULL && !strchr(port, ']') && isdigit(port[1] & 255)) { *port++ = '\0'; cg->ipp_port = atoi(port); } if (!cg->ipp_port) cups_set_default_ipp_port(cg); if (cg->server[0] == '/') strlcpy(cg->servername, "localhost", sizeof(cg->servername)); else strlcpy(cg->servername, cg->server, sizeof(cg->servername)); } else { cg->server[0] = '\0'; cg->servername[0] = '\0'; cg->server_version = 20; cg->ipp_port = 0; } if (cg->http) { httpClose(cg->http); cg->http = NULL; } } /* * 'cupsSetServerCertCB()' - Set the server certificate callback. * * Pass @code NULL@ to restore the default callback. * * Note: The current credentials callback is tracked separately for each thread * in a program. Multi-threaded programs that override the callback need to do * so in each thread for the same callback to be used. * * @since CUPS 1.5/macOS 10.7@ */ void cupsSetServerCertCB( cups_server_cert_cb_t cb, /* I - Callback function */ void *user_data) /* I - User data pointer */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ cg->server_cert_cb = cb; cg->server_cert_data = user_data; } /* * 'cupsSetUser()' - Set the default user name. * * Pass @code NULL@ to restore the default user name. * * Note: The current user name is tracked separately for each thread in a * program. Multi-threaded programs that override the user name need to do so * in each thread for the same user name to be used. */ void cupsSetUser(const char *user) /* I - User name */ { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ if (user) strlcpy(cg->user, user, sizeof(cg->user)); else cg->user[0] = '\0'; } /* * 'cupsSetUserAgent()' - Set the default HTTP User-Agent string. * * Setting the string to NULL forces the default value containing the CUPS * version, IPP version, and operating system version and architecture. * * @since CUPS 1.7/macOS 10.9@ */ void cupsSetUserAgent(const char *user_agent)/* I - User-Agent string or @code NULL@ */ { _cups_globals_t *cg = _cupsGlobals(); /* Thread globals */ #ifdef WIN32 SYSTEM_INFO sysinfo; /* System information */ OSVERSIONINFO version; /* OS version info */ #else struct utsname name; /* uname info */ #endif /* WIN32 */ if (user_agent) { strlcpy(cg->user_agent, user_agent, sizeof(cg->user_agent)); return; } #ifdef WIN32 version.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&version); GetNativeSystemInfo(&sysinfo); snprintf(cg->user_agent, sizeof(cg->user_agent), CUPS_MINIMAL " (Windows %d.%d; %s) IPP/2.0", version.dwMajorVersion, version.dwMinorVersion, sysinfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ? "amd64" : sysinfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ARM ? "arm" : sysinfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ? "ia64" : sysinfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL ? "intel" : "unknown"); #else uname(&name); snprintf(cg->user_agent, sizeof(cg->user_agent), CUPS_MINIMAL " (%s %s; %s) IPP/2.0", name.sysname, name.release, name.machine); #endif /* WIN32 */ } /* * 'cupsUser()' - Return the current user's name. * * Note: The current user name is tracked separately for each thread in a * program. Multi-threaded programs that override the user name with the * @link cupsSetUser@ function need to do so in each thread for the same user * name to be used. */ const char * /* O - User name */ cupsUser(void) { _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ if (!cg->user[0]) _cupsSetDefaults(); return (cg->user); } /* * 'cupsUserAgent()' - Return the default HTTP User-Agent string. * * @since CUPS 1.7/macOS 10.9@ */ const char * /* O - User-Agent string */ cupsUserAgent(void) { _cups_globals_t *cg = _cupsGlobals(); /* Thread globals */ if (!cg->user_agent[0]) cupsSetUserAgent(NULL); return (cg->user_agent); } /* * '_cupsGetPassword()' - Get a password from the user. */ const char * /* O - Password or @code NULL@ if none */ _cupsGetPassword(const char *prompt) /* I - Prompt string */ { #ifdef WIN32 HANDLE tty; /* Console handle */ DWORD mode; /* Console mode */ char passch, /* Current key press */ *passptr, /* Pointer into password string */ *passend; /* End of password string */ DWORD passbytes; /* Bytes read */ _cups_globals_t *cg = _cupsGlobals(); /* Thread globals */ /* * Disable input echo and set raw input... */ if ((tty = GetStdHandle(STD_INPUT_HANDLE)) == INVALID_HANDLE_VALUE) return (NULL); if (!GetConsoleMode(tty, &mode)) return (NULL); if (!SetConsoleMode(tty, 0)) return (NULL); /* * Display the prompt... */ printf("%s ", prompt); fflush(stdout); /* * Read the password string from /dev/tty until we get interrupted or get a * carriage return or newline... */ passptr = cg->password; passend = cg->password + sizeof(cg->password) - 1; while (ReadFile(tty, &passch, 1, &passbytes, NULL)) { if (passch == 0x0A || passch == 0x0D) { /* * Enter/return... */ break; } else if (passch == 0x08 || passch == 0x7F) { /* * Backspace/delete (erase character)... */ if (passptr > cg->password) { passptr --; fputs("\010 \010", stdout); } else putchar(0x07); } else if (passch == 0x15) { /* * CTRL+U (erase line) */ if (passptr > cg->password) { while (passptr > cg->password) { passptr --; fputs("\010 \010", stdout); } } else putchar(0x07); } else if (passch == 0x03) { /* * CTRL+C... */ passptr = cg->password; break; } else if ((passch & 255) < 0x20 || passptr >= passend) putchar(0x07); else { *passptr++ = passch; putchar(_CUPS_PASSCHAR); } fflush(stdout); } putchar('\n'); fflush(stdout); /* * Cleanup... */ SetConsoleMode(tty, mode); /* * Return the proper value... */ if (passbytes == 1 && passptr > cg->password) { *passptr = '\0'; return (cg->password); } else { memset(cg->password, 0, sizeof(cg->password)); return (NULL); } #else int tty; /* /dev/tty - never read from stdin */ struct termios original, /* Original input mode */ noecho; /* No echo input mode */ char passch, /* Current key press */ *passptr, /* Pointer into password string */ *passend; /* End of password string */ ssize_t passbytes; /* Bytes read */ _cups_globals_t *cg = _cupsGlobals(); /* Thread globals */ /* * Disable input echo and set raw input... */ if ((tty = open("/dev/tty", O_RDONLY)) < 0) return (NULL); if (tcgetattr(tty, &original)) { close(tty); return (NULL); } noecho = original; noecho.c_lflag &= (tcflag_t)~(ICANON | ECHO | ECHOE | ISIG); noecho.c_cc[VMIN] = 1; noecho.c_cc[VTIME] = 0; if (tcsetattr(tty, TCSAFLUSH, &noecho)) { close(tty); return (NULL); } /* * Display the prompt... */ printf("%s ", prompt); fflush(stdout); /* * Read the password string from /dev/tty until we get interrupted or get a * carriage return or newline... */ passptr = cg->password; passend = cg->password + sizeof(cg->password) - 1; while ((passbytes = read(tty, &passch, 1)) == 1) { if (passch == noecho.c_cc[VEOL] || # ifdef VEOL2 passch == noecho.c_cc[VEOL2] || # endif /* VEOL2 */ passch == 0x0A || passch == 0x0D) { /* * Enter/return... */ break; } else if (passch == noecho.c_cc[VERASE] || passch == 0x08 || passch == 0x7F) { /* * Backspace/delete (erase character)... */ if (passptr > cg->password) { passptr --; fputs("\010 \010", stdout); } else putchar(0x07); } else if (passch == noecho.c_cc[VKILL]) { /* * CTRL+U (erase line) */ if (passptr > cg->password) { while (passptr > cg->password) { passptr --; fputs("\010 \010", stdout); } } else putchar(0x07); } else if (passch == noecho.c_cc[VINTR] || passch == noecho.c_cc[VQUIT] || passch == noecho.c_cc[VEOF]) { /* * CTRL+C, CTRL+D, or CTRL+Z... */ passptr = cg->password; break; } else if ((passch & 255) < 0x20 || passptr >= passend) putchar(0x07); else { *passptr++ = passch; putchar(_CUPS_PASSCHAR); } fflush(stdout); } putchar('\n'); fflush(stdout); /* * Cleanup... */ tcsetattr(tty, TCSAFLUSH, &original); close(tty); /* * Return the proper value... */ if (passbytes == 1 && passptr > cg->password) { *passptr = '\0'; return (cg->password); } else { memset(cg->password, 0, sizeof(cg->password)); return (NULL); } #endif /* WIN32 */ } #ifdef HAVE_GSSAPI /* * '_cupsGSSServiceName()' - Get the GSS (Kerberos) service name. */ const char * _cupsGSSServiceName(void) { _cups_globals_t *cg = _cupsGlobals(); /* Thread globals */ if (!cg->gss_service_name[0]) _cupsSetDefaults(); return (cg->gss_service_name); } #endif /* HAVE_GSSAPI */ /* * '_cupsSetDefaults()' - Set the default server, port, and encryption. */ void _cupsSetDefaults(void) { cups_file_t *fp; /* File */ const char *home; /* Home directory of user */ char filename[1024]; /* Filename */ _cups_client_conf_t cc; /* client.conf values */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ DEBUG_puts("_cupsSetDefaults()"); /* * Load initial client.conf values... */ cups_init_client_conf(&cc); /* * Read the /etc/cups/client.conf and ~/.cups/client.conf files, if * present. */ snprintf(filename, sizeof(filename), "%s/client.conf", cg->cups_serverroot); if ((fp = cupsFileOpen(filename, "r")) != NULL) { cups_read_client_conf(fp, &cc); cupsFileClose(fp); } # ifdef HAVE_GETEUID if ((geteuid() == getuid() || !getuid()) && getegid() == getgid() && (home = getenv("HOME")) != NULL) # elif !defined(WIN32) if (getuid() && (home = getenv("HOME")) != NULL) # else if ((home = getenv("HOME")) != NULL) # endif /* HAVE_GETEUID */ { /* * Look for ~/.cups/client.conf... */ snprintf(filename, sizeof(filename), "%s/.cups/client.conf", home); if ((fp = cupsFileOpen(filename, "r")) != NULL) { cups_read_client_conf(fp, &cc); cupsFileClose(fp); } } /* * Finalize things so every client.conf value is set... */ cups_finalize_client_conf(&cc); if (cg->encryption == (http_encryption_t)-1) cg->encryption = cc.encryption; if (!cg->server[0] || !cg->ipp_port) cupsSetServer(cc.server_name); if (!cg->ipp_port) cups_set_default_ipp_port(cg); if (!cg->user[0]) strlcpy(cg->user, cc.user, sizeof(cg->user)); #ifdef HAVE_GSSAPI if (!cg->gss_service_name[0]) strlcpy(cg->gss_service_name, cc.gss_service_name, sizeof(cg->gss_service_name)); #endif /* HAVE_GSSAPI */ if (cg->trust_first < 0) cg->trust_first = cc.trust_first; if (cg->any_root < 0) cg->any_root = cc.any_root; if (cg->expired_certs < 0) cg->expired_certs = cc.expired_certs; if (cg->validate_certs < 0) cg->validate_certs = cc.validate_certs; #ifdef HAVE_SSL _httpTLSSetOptions(cc.ssl_options | _HTTP_TLS_SET_DEFAULT, cc.ssl_min_version, cc.ssl_max_version); #endif /* HAVE_SSL */ } #ifdef __APPLE__ /* * 'cups_apple_get_boolean()' - Get a boolean setting from the CUPS preferences. */ static int /* O - 1 if set, 0 otherwise */ cups_apple_get_boolean( CFStringRef key, /* I - Key (name) */ int *value) /* O - Boolean value */ { Boolean bval, /* Preference value */ bval_set; /* Value is set? */ bval = CFPreferencesGetAppBooleanValue(key, kCUPSPrintingPrefs, &bval_set); if (bval_set) *value = (int)bval; return ((int)bval_set); } /* * 'cups_apple_get_string()' - Get a string setting from the CUPS preferences. */ static int /* O - 1 if set, 0 otherwise */ cups_apple_get_string( CFStringRef key, /* I - Key (name) */ char *value, /* O - String value */ size_t valsize) /* I - Size of value buffer */ { CFStringRef sval; /* String value */ if ((sval = CFPreferencesCopyAppValue(key, kCUPSPrintingPrefs)) != NULL) { Boolean result = CFStringGetCString(sval, value, (CFIndex)valsize, kCFStringEncodingUTF8); CFRelease(sval); if (result) return (1); } return (0); } #endif /* __APPLE__ */ /* * 'cups_boolean_value()' - Convert a string to a boolean value. */ static int /* O - Boolean value */ cups_boolean_value(const char *value) /* I - String value */ { return (!_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "true")); } /* * 'cups_finalize_client_conf()' - Finalize client.conf values. */ static void cups_finalize_client_conf( _cups_client_conf_t *cc) /* I - client.conf values */ { const char *value; /* Environment variable */ if ((value = getenv("CUPS_TRUSTFIRST")) != NULL) cc->trust_first = cups_boolean_value(value); if ((value = getenv("CUPS_ANYROOT")) != NULL) cc->any_root = cups_boolean_value(value); if ((value = getenv("CUPS_ENCRYPTION")) != NULL) cups_set_encryption(cc, value); if ((value = getenv("CUPS_EXPIREDCERTS")) != NULL) cc->expired_certs = cups_boolean_value(value); #ifdef HAVE_GSSAPI if ((value = getenv("CUPS_GSSSERVICENAME")) != NULL) cups_set_gss_service_name(cc, value); #endif /* HAVE_GSSAPI */ if ((value = getenv("CUPS_SERVER")) != NULL) cups_set_server_name(cc, value); if ((value = getenv("CUPS_USER")) != NULL) cups_set_user(cc, value); if ((value = getenv("CUPS_VALIDATECERTS")) != NULL) cc->validate_certs = cups_boolean_value(value); /* * Then apply defaults for those values that haven't been set... */ if (cc->trust_first < 0) cc->trust_first = 1; if (cc->any_root < 0) cc->any_root = 1; if (cc->encryption == (http_encryption_t)-1) cc->encryption = HTTP_ENCRYPTION_IF_REQUESTED; if (cc->expired_certs < 0) cc->expired_certs = 0; #ifdef HAVE_GSSAPI if (!cc->gss_service_name[0]) cups_set_gss_service_name(cc, CUPS_DEFAULT_GSSSERVICENAME); #endif /* HAVE_GSSAPI */ if (!cc->server_name[0]) { #ifdef CUPS_DEFAULT_DOMAINSOCKET /* * If we are compiled with domain socket support, only use the * domain socket if it exists and has the right permissions... */ if (!access(CUPS_DEFAULT_DOMAINSOCKET, R_OK)) cups_set_server_name(cc, CUPS_DEFAULT_DOMAINSOCKET); else #endif /* CUPS_DEFAULT_DOMAINSOCKET */ cups_set_server_name(cc, "localhost"); } if (!cc->user[0]) { #ifdef WIN32 /* * Get the current user name from the OS... */ DWORD size; /* Size of string */ size = sizeof(cc->user); if (!GetUserName(cc->user, &size)) #else /* * Try the USER environment variable as the default username... */ const char *envuser = getenv("USER"); /* Default username */ struct passwd *pw = NULL; /* Account information */ if (envuser) { /* * Validate USER matches the current UID, otherwise don't allow it to * override things... This makes sure that printing after doing su * or sudo records the correct username. */ if ((pw = getpwnam(envuser)) != NULL && pw->pw_uid != getuid()) pw = NULL; } if (!pw) pw = getpwuid(getuid()); if (pw) strlcpy(cc->user, pw->pw_name, sizeof(cc->user)); else #endif /* WIN32 */ { /* * Use the default "unknown" user name... */ strlcpy(cc->user, "unknown", sizeof(cc->user)); } } if (cc->validate_certs < 0) cc->validate_certs = 0; } /* * 'cups_init_client_conf()' - Initialize client.conf values. */ static void cups_init_client_conf( _cups_client_conf_t *cc) /* I - client.conf values */ { /* * Clear all values to "not set"... */ memset(cc, 0, sizeof(_cups_client_conf_t)); #ifdef HAVE_SSL cc->ssl_min_version = _HTTP_TLS_1_0; cc->ssl_max_version = _HTTP_TLS_MAX; #endif /* HAVE_SSL */ cc->encryption = (http_encryption_t)-1; cc->trust_first = -1; cc->any_root = -1; cc->expired_certs = -1; cc->validate_certs = -1; /* * Load settings from the org.cups.PrintingPrefs plist (which trump * everything...) */ #if defined(__APPLE__) && defined(HAVE_SSL) char sval[1024]; /* String value */ int bval; /* Boolean value */ if (cups_apple_get_boolean(kAllowAnyRootKey, &bval)) cc->any_root = bval; if (cups_apple_get_boolean(kAllowExpiredCertsKey, &bval)) cc->expired_certs = bval; if (cups_apple_get_string(kEncryptionKey, sval, sizeof(sval))) cups_set_encryption(cc, sval); if (cups_apple_get_string(kSSLOptionsKey, sval, sizeof(sval))) cups_set_ssl_options(cc, sval); if (cups_apple_get_boolean(kTrustOnFirstUseKey, &bval)) cc->trust_first = bval; if (cups_apple_get_boolean(kValidateCertsKey, &bval)) cc->validate_certs = bval; #endif /* __APPLE__ && HAVE_SSL */ } /* * 'cups_read_client_conf()' - Read a client.conf file. */ static void cups_read_client_conf( cups_file_t *fp, /* I - File to read */ _cups_client_conf_t *cc) /* I - client.conf values */ { int linenum; /* Current line number */ char line[1024], /* Line from file */ *value; /* Pointer into line */ /* * Read from the file... */ linenum = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { if (!_cups_strcasecmp(line, "Encryption") && value) cups_set_encryption(cc, value); #ifndef __APPLE__ /* * The ServerName directive is not supported on macOS due to app * sandboxing restrictions, i.e. not all apps request network access. */ else if (!_cups_strcasecmp(line, "ServerName") && value) cups_set_server_name(cc, value); #endif /* !__APPLE__ */ else if (!_cups_strcasecmp(line, "User") && value) cups_set_user(cc, value); else if (!_cups_strcasecmp(line, "TrustOnFirstUse") && value) cc->trust_first = cups_boolean_value(value); else if (!_cups_strcasecmp(line, "AllowAnyRoot") && value) cc->any_root = cups_boolean_value(value); else if (!_cups_strcasecmp(line, "AllowExpiredCerts") && value) cc->expired_certs = cups_boolean_value(value); else if (!_cups_strcasecmp(line, "ValidateCerts") && value) cc->validate_certs = cups_boolean_value(value); #ifdef HAVE_GSSAPI else if (!_cups_strcasecmp(line, "GSSServiceName") && value) cups_set_gss_service_name(cc, value); #endif /* HAVE_GSSAPI */ #ifdef HAVE_SSL else if (!_cups_strcasecmp(line, "SSLOptions") && value) cups_set_ssl_options(cc, value); #endif /* HAVE_SSL */ } } /* * 'cups_set_default_ipp_port()' - Set the default IPP port value. */ static void cups_set_default_ipp_port( _cups_globals_t *cg) /* I - Global data */ { const char *ipp_port; /* IPP_PORT environment variable */ if ((ipp_port = getenv("IPP_PORT")) != NULL) { if ((cg->ipp_port = atoi(ipp_port)) <= 0) cg->ipp_port = CUPS_DEFAULT_IPP_PORT; } else cg->ipp_port = CUPS_DEFAULT_IPP_PORT; } /* * 'cups_set_encryption()' - Set the Encryption value. */ static void cups_set_encryption( _cups_client_conf_t *cc, /* I - client.conf values */ const char *value) /* I - Value */ { if (!_cups_strcasecmp(value, "never")) cc->encryption = HTTP_ENCRYPTION_NEVER; else if (!_cups_strcasecmp(value, "always")) cc->encryption = HTTP_ENCRYPTION_ALWAYS; else if (!_cups_strcasecmp(value, "required")) cc->encryption = HTTP_ENCRYPTION_REQUIRED; else cc->encryption = HTTP_ENCRYPTION_IF_REQUESTED; } /* * 'cups_set_gss_service_name()' - Set the GSSServiceName value. */ #ifdef HAVE_GSSAPI static void cups_set_gss_service_name( _cups_client_conf_t *cc, /* I - client.conf values */ const char *value) /* I - Value */ { strlcpy(cc->gss_service_name, value, sizeof(cc->gss_service_name)); } #endif /* HAVE_GSSAPI */ /* * 'cups_set_server_name()' - Set the ServerName value. */ static void cups_set_server_name( _cups_client_conf_t *cc, /* I - client.conf values */ const char *value) /* I - Value */ { strlcpy(cc->server_name, value, sizeof(cc->server_name)); } /* * 'cups_set_ssl_options()' - Set the SSLOptions value. */ #ifdef HAVE_SSL static void cups_set_ssl_options( _cups_client_conf_t *cc, /* I - client.conf values */ const char *value) /* I - Value */ { /* * SSLOptions [AllowRC4] [AllowSSL3] [AllowDH] [DenyTLS1.0] [None] */ int options = _HTTP_TLS_NONE, /* SSL/TLS options */ min_version = _HTTP_TLS_1_0, /* Minimum SSL/TLS version */ max_version = _HTTP_TLS_MAX; /* Maximum SSL/TLS version */ char temp[256], /* Copy of value */ *start, /* Start of option */ *end; /* End of option */ strlcpy(temp, value, sizeof(temp)); for (start = temp; *start; start = end) { /* * Find end of keyword... */ end = start; while (*end && !_cups_isspace(*end)) end ++; if (*end) *end++ = '\0'; /* * Compare... */ if (!_cups_strcasecmp(start, "AllowRC4")) options |= _HTTP_TLS_ALLOW_RC4; else if (!_cups_strcasecmp(start, "AllowSSL3")) min_version = _HTTP_TLS_SSL3; else if (!_cups_strcasecmp(start, "AllowDH")) options |= _HTTP_TLS_ALLOW_DH; else if (!_cups_strcasecmp(start, "DenyCBC")) options |= _HTTP_TLS_DENY_CBC; else if (!_cups_strcasecmp(start, "DenyTLS1.0")) min_version = _HTTP_TLS_1_1; else if (!_cups_strcasecmp(start, "MaxTLS1.0")) max_version = _HTTP_TLS_1_0; else if (!_cups_strcasecmp(start, "MaxTLS1.1")) max_version = _HTTP_TLS_1_1; else if (!_cups_strcasecmp(start, "MaxTLS1.2")) max_version = _HTTP_TLS_1_2; else if (!_cups_strcasecmp(start, "MaxTLS1.3")) max_version = _HTTP_TLS_1_3; else if (!_cups_strcasecmp(start, "MinTLS1.0")) min_version = _HTTP_TLS_1_0; else if (!_cups_strcasecmp(start, "MinTLS1.1")) min_version = _HTTP_TLS_1_1; else if (!_cups_strcasecmp(start, "MinTLS1.2")) min_version = _HTTP_TLS_1_2; else if (!_cups_strcasecmp(start, "MinTLS1.3")) min_version = _HTTP_TLS_1_3; else if (!_cups_strcasecmp(start, "None")) options = _HTTP_TLS_NONE; } cc->ssl_options = options; cc->ssl_max_version = max_version; cc->ssl_min_version = min_version; DEBUG_printf(("4cups_set_ssl_options(cc=%p, value=\"%s\") options=%x, min_version=%d, max_version=%d", (void *)cc, value, options, min_version, max_version)); } #endif /* HAVE_SSL */ /* * 'cups_set_user()' - Set the User value. */ static void cups_set_user( _cups_client_conf_t *cc, /* I - client.conf values */ const char *value) /* I - Value */ { strlcpy(cc->user, value, sizeof(cc->user)); } cups-2.2.7/cups/utf8demo.txt000664 000765 000024 00000033325 13255074424 016427 0ustar00msweetstaff000000 000000 UTF-8 encoded sample plain-text file ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Markus Kuhn [ˈmaʳkÊŠs kuËn] — 2002-07-25 The ASCII compatible UTF-8 encoding used in this plain-text file is defined in Unicode, ISO 10646-1, and RFC 2279. Using Unicode/UTF-8, you can write in emails and source code things such as Mathematics and sciences: ∮ Eâ‹…da = Q, n → ∞, ∑ f(i) = ∠g(i), ⎧⎡⎛┌─────â”⎞⎤⎫ ⎪⎢⎜│a²+b³ ⎟⎥⎪ ∀x∈â„: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β), ⎪⎢⎜│───── ⎟⎥⎪ ⎪⎢⎜⎷ c₈ ⎟⎥⎪ â„• ⊆ â„•â‚€ ⊂ ℤ ⊂ ℚ ⊂ ℠⊂ â„‚, ⎨⎢⎜ ⎟⎥⎬ ⎪⎢⎜ ∞ ⎟⎥⎪ ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (⟦A⟧ ⇔ ⟪B⟫), ⎪⎢⎜ ⎲ ⎟⎥⎪ ⎪⎢⎜ ⎳aâ±-bâ±âŽŸâŽ¥âŽª 2Hâ‚‚ + Oâ‚‚ ⇌ 2Hâ‚‚O, R = 4.7 kΩ, ⌀ 200 mm ⎩⎣âŽi=1 ⎠⎦⎭ Linguistics and dictionaries: ði ıntəˈnæʃənÉ™l fəˈnÉ›tık É™soÊŠsiˈeıʃn Y [ˈÊpsilÉ”n], Yen [jÉ›n], Yoga [ˈjoËgÉ‘] APL: ((Vâ³V)=â³â´V)/Vâ†,V ⌷â†â³â†’â´âˆ†âˆ‡âŠƒâ€¾âŽâ•⌈ Nicer typography in plain text files: â•”â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•— â•‘ â•‘ â•‘ • ‘single’ and “double†quotes â•‘ â•‘ â•‘ â•‘ • Curly apostrophes: “We’ve been here†║ â•‘ â•‘ â•‘ • Latin-1 apostrophe and accents: '´` â•‘ â•‘ â•‘ â•‘ • ‚deutsche‘ „Anführungszeichen“ â•‘ â•‘ â•‘ â•‘ • †, ‡, ‰, •, 3–4, —, −5/+5, â„¢, … â•‘ â•‘ â•‘ â•‘ • ASCII safety test: 1lI|, 0OD, 8B â•‘ â•‘ ╭─────────╮ â•‘ â•‘ • the euro symbol: │ 14.95 € │ â•‘ â•‘ ╰─────────╯ â•‘ ╚â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â• Combining characters: STARGΛ̊TE SG-1, a = v̇ = r̈, a⃑ ⊥ b⃑ Greek (in Polytonic): The Greek anthem: Σὲ γνωÏίζω ἀπὸ τὴν κόψη τοῦ σπαθιοῦ τὴν Ï„ÏομεÏá½µ, σὲ γνωÏίζω ἀπὸ τὴν ὄψη ποὺ μὲ βία μετÏάει τὴ γῆ. ᾿Απ᾿ τὰ κόκκαλα βγαλμένη τῶν ῾Ελλήνων τὰ ἱεÏá½± καὶ σὰν Ï€Ïῶτα ἀνδÏειωμένη χαῖÏε, ὦ χαῖÏε, ᾿ΕλευθεÏιά! From a speech of Demosthenes in the 4th century BC: Οá½Ï‡á½¶ ταá½Ï„á½° παÏίσταταί μοι γιγνώσκειν, ὦ ἄνδÏες ᾿Αθηναῖοι, ὅταν τ᾿ εἰς τὰ Ï€Ïάγματα ἀποβλέψω καὶ ὅταν Ï€Ïὸς τοὺς λόγους οὓς ἀκούω· τοὺς μὲν Î³á½°Ï Î»á½¹Î³Î¿Ï…Ï‚ πεÏá½¶ τοῦ τιμωÏήσασθαι Φίλιππον á½Ïá¿¶ γιγνομένους, τὰ δὲ Ï€Ïάγματ᾿ εἰς τοῦτο Ï€Ïοήκοντα, ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αá½Ï„οὶ Ï€ÏότεÏον κακῶς σκέψασθαι δέον. οá½Î´á½³Î½ οὖν ἄλλο μοι δοκοῦσιν οἱ τὰ τοιαῦτα λέγοντες á¼¢ τὴν ὑπόθεσιν, πεÏá½¶ á¼§Ï‚ βουλεύεσθαι, οá½Ï‡á½¶ τὴν οὖσαν παÏιστάντες ὑμῖν á¼Î¼Î±Ïτάνειν. á¼Î³á½¼ δέ, ὅτι μέν ποτ᾿ á¼Î¾á¿†Î½ τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον τιμωÏήσασθαι, καὶ μάλ᾿ ἀκÏιβῶς οἶδα· á¼Ï€á¾¿ á¼Î¼Î¿á¿¦ γάÏ, οὠπάλαι γέγονεν ταῦτ᾿ ἀμφότεÏα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν Ï€Ïολαβεῖν ἡμῖν εἶναι τὴν Ï€Ïώτην, ὅπως τοὺς συμμάχους σώσομεν. á¼á½°Î½ Î³á½°Ï Ï„Î¿á¿¦Ï„Î¿ βεβαίως ὑπάÏξῃ, τότε καὶ πεÏá½¶ τοῦ τίνα τιμωÏήσεταί τις καὶ ὃν Ï„Ïόπον á¼Î¾á½³ÏƒÏ„αι σκοπεῖν· Ï€Ïὶν δὲ τὴν á¼€Ïχὴν á½€Ïθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι πεÏá½¶ τῆς τελευτῆς á½Î½Ï„ινοῦν ποιεῖσθαι λόγον. Δημοσθένους, Γ´ ᾿Ολυνθιακὸς Georgian: From a Unicode conference invitation: გთხáƒáƒ•თ áƒáƒ®áƒšáƒáƒ•ე გáƒáƒ˜áƒáƒ áƒáƒ— რეგისტრáƒáƒªáƒ˜áƒ Unicode-ის მეáƒáƒ—ე სáƒáƒ”რთáƒáƒ¨áƒáƒ áƒ˜áƒ¡áƒ კáƒáƒœáƒ¤áƒ”რენციáƒáƒ–ე დáƒáƒ¡áƒáƒ¡áƒ¬áƒ áƒ”ბáƒáƒ“, რáƒáƒ›áƒ”ლიც გáƒáƒ˜áƒ›áƒáƒ áƒ—ებრ10-12 მáƒáƒ áƒ¢áƒ¡, ქ. მáƒáƒ˜áƒœáƒªáƒ¨áƒ˜, გერმáƒáƒœáƒ˜áƒáƒ¨áƒ˜. კáƒáƒœáƒ¤áƒ”რენცირშეჰკრებს ერთáƒáƒ“ მსáƒáƒ¤áƒšáƒ˜áƒáƒ¡ ექსპერტებს ისეთ დáƒáƒ áƒ’ებში რáƒáƒ’áƒáƒ áƒ˜áƒªáƒáƒ ინტერნეტი დრUnicode-ი, ინტერნáƒáƒªáƒ˜áƒáƒœáƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ დრლáƒáƒ™áƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ, Unicode-ის გáƒáƒ›áƒáƒ§áƒ”ნებრáƒáƒžáƒ”რáƒáƒªáƒ˜áƒ£áƒš სისტემებსáƒ, დრგáƒáƒ›áƒáƒ§áƒ”ნებით პრáƒáƒ’რáƒáƒ›áƒ”ბში, შრიფტებში, ტექსტების დáƒáƒ›áƒ£áƒ¨áƒáƒ•ებáƒáƒ¡áƒ დრმრáƒáƒ•áƒáƒšáƒ”ნáƒáƒ•áƒáƒœ კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რულ სისტემებში. Russian: From a Unicode conference invitation: ЗарегиÑтрируйтеÑÑŒ ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ð° ДеÑÑтую Международную Конференцию по Unicode, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑоÑтоитÑÑ 10-12 марта 1997 года в Майнце в Германии. ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ Ñоберет широкий круг ÑкÑпертов по вопроÑам глобального Интернета и Unicode, локализации и интернационализации, воплощению и применению Unicode в различных операционных ÑиÑтемах и программных приложениÑÑ…, шрифтах, верÑтке и многоÑзычных компьютерных ÑиÑтемах. Thai (UCS Level 2): Excerpt from a poetry on The Romance of The Three Kingdoms (a Chinese classic 'San Gua'): [----------------------------|------------------------] ๠à¹à¸œà¹ˆà¸™à¸”ินฮั่นเสื่อมโทรมà¹à¸ªà¸™à¸ªà¸±à¸‡à¹€à¸§à¸Š พระปà¸à¹€à¸à¸¨à¸à¸­à¸‡à¸šà¸¹à¹Šà¸à¸¹à¹‰à¸‚ึ้นใหม่ สิบสองà¸à¸©à¸±à¸•ริย์à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¹à¸¥à¸–ัดไป สององค์ไซร้โง่เขลาเบาปัà¸à¸à¸² ทรงนับถือขันทีเป็นที่พึ่ง บ้านเมืองจึงวิปริตเป็นนัà¸à¸«à¸™à¸² โฮจิ๋นเรียà¸à¸—ัพทั่วหัวเมืองมา หมายจะฆ่ามดชั่วตัวสำคัภเหมือนขับไสไล่เสือจาà¸à¹€à¸„หา รับหมาป่าเข้ามาเลยอาสัภà¸à¹ˆà¸²à¸¢à¸­à¹‰à¸­à¸‡à¸­à¸¸à¹‰à¸™à¸¢à¸¸à¹à¸¢à¸à¹ƒà¸«à¹‰à¹à¸•à¸à¸à¸±à¸™ ใช้สาวนั้นเป็นชนวนชื่นชวนใจ พลันลิฉุยà¸à¸¸à¸¢à¸à¸µà¸à¸¥à¸±à¸šà¸à¹ˆà¸­à¹€à¸«à¸•ุ ช่างอาเพศจริงหนาฟ้าร้องไห้ ต้องรบราฆ่าฟันจนบรรลัย ฤๅหาใครค้ำชูà¸à¸¹à¹‰à¸šà¸£à¸£à¸¥à¸±à¸‡à¸à¹Œ ฯ (The above is a two-column text. If combining characters are handled correctly, the lines of the second column should be aligned with the | character above.) Ethiopian: Proverbs in the Amharic language: ሰማይ አይታረስ ንጉሥ አይከሰስᢠብላ ካለአእንደአባቴ በቆመጠáŠá¢ ጌጥ ያለቤቱ á‰áˆáŒ¥áŠ“ áŠá‹á¢ ደሀ በሕáˆáˆ™ ቅቤ ባይጠጣ ንጣት በገደለá‹á¢ የአá ወለáˆá‰³ በቅቤ አይታሽáˆá¢ አይጥ በበላ ዳዋ ተመታᢠሲተረጉሙ ይደረáŒáˆ™á¢ ቀስ በቀስᥠዕንá‰áˆ‹áˆ በእáŒáˆ© ይሄዳáˆá¢ ድር ቢያብር አንበሳ ያስርᢠሰዠእንደቤቱ እንጅ እንደ ጉረቤቱ አይተዳደርáˆá¢ እáŒá‹œáˆ­ የከáˆá‰°á‹áŠ• ጉሮሮ ሳይዘጋዠአይድርáˆá¢ የጎረቤት ሌባᥠቢያዩት ይስቅ ባያዩት ያጠáˆá‰…ᢠሥራ ከመáታት áˆáŒ„ን ላá‹á‰³á‰µá¢ ዓባይ ማደሪያ የለá‹á¥ áŒáŠ•á‹µ ይዞ ይዞራáˆá¢ የእስላሠአገሩ መካ የአሞራ አገሩ ዋርካᢠተንጋሎ ቢተበተመáˆáˆ¶ ባá‰á¢ ወዳጅህ ማር ቢሆን ጨርስህ አትላሰá‹á¢ እáŒáˆ­áˆ…ን በáራሽህ áˆáŠ­ ዘርጋᢠRunes: ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛠᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ áš¹á›áš¦ ᚦᚪ ᚹᛖᛥᚫ (Old English, which transcribed into Latin reads 'He cwaeth that he bude thaem lande northweardum with tha Westsae.' and means 'He said that he lived in the northern land near the Western Sea.') Braille: ⡌â â §â ‘ â ¼â â ’ â¡â œâ ‡â ‘⠹⠰⠎ ⡣⠕⠌ â¡â œâ ‡â ‘â ¹ â ºâ â Ž ⠙⠑â â ™â ’ â žâ • ⠃⠑⠛⠔ ⠺⠊⠹⠲ ⡹⠻⠑ â Šâ Ž â â • ⠙⠳⠃⠞ â ±â â žâ ‘â §â » â â ƒâ ³â ž â ¹â â žâ ² ⡹⠑ ⠗⠑⠛⠊⠌⠻ â •â ‹ ⠙⠊⠎ ⠃⠥⠗⠊â â ‡ â ºâ â Ž â Žâ Šâ ›â â « ⠃⠹ ⠹⠑ ⠊⠇⠻⠛⠹â â â â ‚ ⠹⠑ ⠊⠇⠻⠅⠂ ⠹⠑ â ¥â â ™â »â žâ â …⠻⠂ â â â ™ ⠹⠑ â ¡â Šâ ‘â ‹ â â ³â —â â »â ² ⡎⠊⠗⠕⠕⠛⠑ â Žâ Šâ ›â â « â Šâ žâ ² â¡â â ™ ⡎⠊⠗⠕⠕⠛⠑⠰⠎ â â â â ‘ â ºâ â Ž ⠛⠕⠕⠙ â ¥â â •â  â °â¡¡â â â ›â ‘â ‚ â ‹â •â — â â â ¹â ¹â ”â › ⠙⠑ â ¡â •â Žâ ‘ â žâ • â â ¥â ž ⠙⠊⠎ â ™â â â ™ â žâ •â ² ⡕⠇⠙ â¡â œâ ‡â ‘â ¹ â ºâ â Ž â â Ž ⠙⠑â â ™ â â Ž â  â ™â •â •â —â ¤â â â Šâ ‡â ² â¡â ”⠙⠖ ⡊ ⠙⠕â â °â ž â â ‘â â  â žâ • â Žâ â ¹ â ¹â â ž ⡊ â …â â ªâ ‚ â •â ‹ â â ¹ â ªâ  â …â â ªâ ‡â «â ›â ‘â ‚ â ±â â ž ⠹⠻⠑ â Šâ Ž â â œâ žâ Šâ Šâ ¥â ‡â œâ ‡â ¹ ⠙⠑â â ™ â â ƒâ ³â ž â  â ™â •â •â —â ¤â â â Šâ ‡â ² ⡊ â â Šâ £â ž â ™â â §â ‘ ⠃⠑⠲ ⠔⠊⠇⠔⠫⠂ â â ¹â Žâ ‘⠇⠋⠂ â žâ • ⠗⠑⠛⠜⠙ â  â Šâ •â ‹â ‹â ”â ¤â â â Šâ ‡ â â Ž ⠹⠑ ⠙⠑â â ™â ‘â Œ â â Šâ ‘â Šâ ‘ â •â ‹ â Šâ —â •â â â •â â ›â »â ¹ â ” ⠹⠑ â žâ —â â ™â ‘â ² ⡃⠥⠞ ⠹⠑ â ºâ Šâ Žâ ™â •â  â •â ‹ ⠳⠗ â â â Šâ ‘⠌⠕⠗⠎ â Šâ Ž â ” ⠹⠑ â Žâ Šâ â Šâ ‡â ‘â † â â â ™ â â ¹ â ¥â â ™â â ‡â ‡â ªâ « â ™â â â ™â Ž â ©â â ‡â ‡ â â •â ž ⠙⠊⠌⠥⠗⠃ â Šâ žâ ‚ â •â — ⠹⠑ ⡊⠳â â žâ —⠹⠰⠎ ⠙⠕â â ‘ â ‹â •â —â ² ⡹⠳ ⠺⠊⠇⠇ ⠹⠻⠑⠋⠕⠗⠑ â â »â â Šâ ž â â ‘ â žâ • â —â ‘â â ‘â â žâ ‚ â ‘â â â ™â â žâ Šâ Šâ â ‡â ‡â ¹â ‚ â ¹â â ž â¡â œâ ‡â ‘â ¹ â ºâ â Ž â â Ž ⠙⠑â â ™ â â Ž â  â ™â •â •â —â ¤â â â Šâ ‡â ² (The first couple of paragraphs of "A Christmas Carol" by Dickens) Compact font selection example text: ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789 abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ –—‘“â€â€žâ€ â€¢â€¦â€°â„¢Å“ŠŸž€ ΑΒΓΔΩαβγδω ÐБВГДабвгд ∀∂∈â„∧∪≡∞ ↑↗↨↻⇣ â”┼╔╘░►☺♀ ï¬?⑀₂ἠḂӥẄÉËâŽ×ԱრGreetings in various languages: Hello world, ΚαλημέÏα κόσμε, コンニãƒãƒ Box drawing alignment tests: â–ˆ â–‰ â•”â•â•╦â•â•â•— ┌──┬──┠╭──┬──╮ ╭──┬──╮ â”â”â”┳â”â”┓ ┎┒â”┑ â•· â•» â”┯┓ ┌┰┠▊ ╱╲╱╲╳╳╳ ║┌─╨─â”â•‘ │╔â•â•§â•╗│ │╒â•╪â•╕│ │╓─â•─╖│ ┃┌─╂─â”┃ ┗╃╄┙ ╶┼╴╺╋╸┠┼┨ â”╋┥ â–‹ ╲╱╲╱╳╳╳ ║│╲ ╱│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ â•¿ │┃ â”╅╆┓ ╵ ╹ â”—â”·â”› └┸┘ â–Œ ╱╲╱╲╳╳╳ â• â•¡ ╳ ╞╣ ├╢ ╟┤ ├┼─┼─┼┤ ├╫─╂─╫┤ ┣┿╾┼╼┿┫ ┕┛┖┚ ┌┄┄┠╎ â”┅┅┓ ┋ ■╲╱╲╱╳╳╳ ║│╱ ╲│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╽ │┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╠┇ ┋ â–Ž ║└─╥─┘║ │╚â•╤â•â•│ │╘â•╪â•╛│ │╙─╀─╜│ ┃└─╂─┘┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╠┇ ┋ ■╚â•â•â•©â•â•╠└──┴──┘ ╰──┴──╯ ╰──┴──╯ â”—â”â”â”»â”â”â”› ▗▄▖▛▀▜ └╌╌┘ ╎ â”—â•â•â”› ┋ â–▂▃▄▅▆▇█ â–▀▘▙▄▟ cups-2.2.7/cups/util.c000664 000765 000024 00000067552 13255074424 015265 0ustar00msweetstaff000000 000000 /* * Printing utilities for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers... */ #include "cups-private.h" #include #include #if defined(WIN32) || defined(__EMX__) # include #else # include #endif /* WIN32 || __EMX__ */ /* * Enumeration data and callback... */ typedef struct _cups_createdata_s { const char *name; /* Destination name */ cups_dest_t *dest; /* Matching destination */ } _cups_createdata_t; static int cups_create_cb(_cups_createdata_t *data, unsigned flags, cups_dest_t *dest); /* * 'cupsCancelJob()' - Cancel a print job on the default server. * * Pass @code CUPS_JOBID_ALL@ to cancel all jobs or @code CUPS_JOBID_CURRENT@ * to cancel the current job on the named destination. * * Use the @link cupsLastError@ and @link cupsLastErrorString@ functions to get * the cause of any failure. * * @exclude all@ */ int /* O - 1 on success, 0 on failure */ cupsCancelJob(const char *name, /* I - Name of printer or class */ int job_id) /* I - Job ID, @code CUPS_JOBID_CURRENT@ for the current job, or @code CUPS_JOBID_ALL@ for all jobs */ { return (cupsCancelJob2(CUPS_HTTP_DEFAULT, name, job_id, 0) < IPP_STATUS_REDIRECTION_OTHER_SITE); } /* * 'cupsCancelJob2()' - Cancel or purge a print job. * * Canceled jobs remain in the job history while purged jobs are removed * from the job history. * * Pass @code CUPS_JOBID_ALL@ to cancel all jobs or @code CUPS_JOBID_CURRENT@ * to cancel the current job on the named destination. * * Use the @link cupsLastError@ and @link cupsLastErrorString@ functions to get * the cause of any failure. * * @since CUPS 1.4/macOS 10.6@ @exclude all@ */ ipp_status_t /* O - IPP status */ cupsCancelJob2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *name, /* I - Name of printer or class */ int job_id, /* I - Job ID, @code CUPS_JOBID_CURRENT@ for the current job, or @code CUPS_JOBID_ALL@ for all jobs */ int purge) /* I - 1 to purge, 0 to cancel */ { char uri[HTTP_MAX_URI]; /* Job/printer URI */ ipp_t *request; /* IPP request */ /* * Range check input... */ if (job_id < -1 || (!name && job_id == 0)) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } /* * Connect to the default server as needed... */ if (!http) if ((http = _cupsConnect()) == NULL) return (IPP_STATUS_ERROR_SERVICE_UNAVAILABLE); /* * Build an IPP_CANCEL_JOB or IPP_PURGE_JOBS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * job-uri or printer-uri + job-id * requesting-user-name * [purge-job] or [purge-jobs] */ request = ippNewRequest(job_id < 0 ? IPP_OP_PURGE_JOBS : IPP_OP_CANCEL_JOB); if (name) { httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", ippPort(), "/printers/%s", name); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", job_id); } else if (job_id > 0) { snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); } ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); if (purge && job_id >= 0) ippAddBoolean(request, IPP_TAG_OPERATION, "purge-job", 1); else if (!purge && job_id < 0) ippAddBoolean(request, IPP_TAG_OPERATION, "purge-jobs", 0); /* * Do the request... */ ippDelete(cupsDoRequest(http, request, "/jobs/")); return (cupsLastError()); } /* * 'cupsCreateJob()' - Create an empty job for streaming. * * Use this function when you want to stream print data using the * @link cupsStartDocument@, @link cupsWriteRequestData@, and * @link cupsFinishDocument@ functions. If you have one or more files to * print, use the @link cupsPrintFile2@ or @link cupsPrintFiles2@ function * instead. * * @since CUPS 1.4/macOS 10.6@ @exclude all@ */ int /* O - Job ID or 0 on error */ cupsCreateJob( http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *name, /* I - Destination name */ const char *title, /* I - Title of job */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { int job_id = 0; /* job-id value */ ipp_status_t status; /* Create-Job status */ _cups_createdata_t data; /* Enumeration data */ cups_dinfo_t *info; /* Destination information */ DEBUG_printf(("cupsCreateJob(http=%p, name=\"%s\", title=\"%s\", num_options=%d, options=%p)", (void *)http, name, title, num_options, (void *)options)); /* * Range check input... */ if (!name) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } /* * Lookup the destination... */ data.name = name; data.dest = NULL; cupsEnumDests(0, 1000, NULL, 0, 0, (cups_dest_cb_t)cups_create_cb, &data); if (!data.dest) { DEBUG_puts("1cupsCreateJob: Destination not found."); _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0); return (0); } /* * Query dest information and create the job... */ DEBUG_puts("1cupsCreateJob: Querying destination info."); if ((info = cupsCopyDestInfo(http, data.dest)) == NULL) { DEBUG_puts("1cupsCreateJob: Query failed."); cupsFreeDests(1, data.dest); return (0); } status = cupsCreateDestJob(http, data.dest, info, &job_id, title, num_options, options); DEBUG_printf(("1cupsCreateJob: cupsCreateDestJob returned %04x (%s)", status, ippErrorString(status))); cupsFreeDestInfo(info); cupsFreeDests(1, data.dest); /* * Return the job... */ if (status >= IPP_STATUS_REDIRECTION_OTHER_SITE) return (0); else return (job_id); } /* * 'cupsFinishDocument()' - Finish sending a document. * * The document must have been started using @link cupsStartDocument@. * * @since CUPS 1.4/macOS 10.6@ @exclude all@ */ ipp_status_t /* O - Status of document submission */ cupsFinishDocument(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *name) /* I - Destination name */ { char resource[1024]; /* Printer resource */ snprintf(resource, sizeof(resource), "/printers/%s", name); ippDelete(cupsGetResponse(http, resource)); return (cupsLastError()); } /* * 'cupsFreeJobs()' - Free memory used by job data. */ void cupsFreeJobs(int num_jobs, /* I - Number of jobs */ cups_job_t *jobs) /* I - Jobs */ { int i; /* Looping var */ cups_job_t *job; /* Current job */ if (num_jobs <= 0 || !jobs) return; for (i = num_jobs, job = jobs; i > 0; i --, job ++) { _cupsStrFree(job->dest); _cupsStrFree(job->user); _cupsStrFree(job->format); _cupsStrFree(job->title); } free(jobs); } /* * 'cupsGetClasses()' - Get a list of printer classes from the default server. * * This function is deprecated and no longer returns a list of printer * classes - use @link cupsGetDests@ instead. * * @deprecated@ @exclude all@ */ int /* O - Number of classes */ cupsGetClasses(char ***classes) /* O - Classes */ { if (classes) *classes = NULL; return (0); } /* * 'cupsGetDefault()' - Get the default printer or class for the default server. * * This function returns the default printer or class as defined by * the LPDEST or PRINTER environment variables. If these environment * variables are not set, the server default destination is returned. * Applications should use the @link cupsGetDests@ and @link cupsGetDest@ * functions to get the user-defined default printer, as this function does * not support the lpoptions-defined default printer. * * @exclude all@ */ const char * /* O - Default printer or @code NULL@ */ cupsGetDefault(void) { /* * Return the default printer... */ return (cupsGetDefault2(CUPS_HTTP_DEFAULT)); } /* * 'cupsGetDefault2()' - Get the default printer or class for the specified server. * * This function returns the default printer or class as defined by * the LPDEST or PRINTER environment variables. If these environment * variables are not set, the server default destination is returned. * Applications should use the @link cupsGetDests@ and @link cupsGetDest@ * functions to get the user-defined default printer, as this function does * not support the lpoptions-defined default printer. * * @since CUPS 1.1.21/macOS 10.4@ @exclude all@ */ const char * /* O - Default printer or @code NULL@ */ cupsGetDefault2(http_t *http) /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ { ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr; /* Current attribute */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ /* * See if we have a user default printer set... */ if (_cupsUserDefault(cg->def_printer, sizeof(cg->def_printer))) return (cg->def_printer); /* * Connect to the server as needed... */ if (!http) if ((http = _cupsConnect()) == NULL) return (NULL); /* * Build a CUPS_GET_DEFAULT request, which requires the following * attributes: * * attributes-charset * attributes-natural-language */ request = ippNewRequest(IPP_OP_CUPS_GET_DEFAULT); /* * Do the request and get back a response... */ if ((response = cupsDoRequest(http, request, "/")) != NULL) { if ((attr = ippFindAttribute(response, "printer-name", IPP_TAG_NAME)) != NULL) { strlcpy(cg->def_printer, attr->values[0].string.text, sizeof(cg->def_printer)); ippDelete(response); return (cg->def_printer); } ippDelete(response); } return (NULL); } /* * 'cupsGetJobs()' - Get the jobs from the default server. * * A "whichjobs" value of @code CUPS_WHICHJOBS_ALL@ returns all jobs regardless * of state, while @code CUPS_WHICHJOBS_ACTIVE@ returns jobs that are * pending, processing, or held and @code CUPS_WHICHJOBS_COMPLETED@ returns * jobs that are stopped, canceled, aborted, or completed. * * @exclude all@ */ int /* O - Number of jobs */ cupsGetJobs(cups_job_t **jobs, /* O - Job data */ const char *name, /* I - @code NULL@ = all destinations, otherwise show jobs for named destination */ int myjobs, /* I - 0 = all users, 1 = mine */ int whichjobs) /* I - @code CUPS_WHICHJOBS_ALL@, @code CUPS_WHICHJOBS_ACTIVE@, or @code CUPS_WHICHJOBS_COMPLETED@ */ { /* * Return the jobs... */ return (cupsGetJobs2(CUPS_HTTP_DEFAULT, jobs, name, myjobs, whichjobs)); } /* * 'cupsGetJobs2()' - Get the jobs from the specified server. * * A "whichjobs" value of @code CUPS_WHICHJOBS_ALL@ returns all jobs regardless * of state, while @code CUPS_WHICHJOBS_ACTIVE@ returns jobs that are * pending, processing, or held and @code CUPS_WHICHJOBS_COMPLETED@ returns * jobs that are stopped, canceled, aborted, or completed. * * @since CUPS 1.1.21/macOS 10.4@ */ int /* O - Number of jobs */ cupsGetJobs2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ cups_job_t **jobs, /* O - Job data */ const char *name, /* I - @code NULL@ = all destinations, otherwise show jobs for named destination */ int myjobs, /* I - 0 = all users, 1 = mine */ int whichjobs) /* I - @code CUPS_WHICHJOBS_ALL@, @code CUPS_WHICHJOBS_ACTIVE@, or @code CUPS_WHICHJOBS_COMPLETED@ */ { int n; /* Number of jobs */ ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr; /* Current attribute */ cups_job_t *temp; /* Temporary pointer */ int id, /* job-id */ priority, /* job-priority */ size; /* job-k-octets */ ipp_jstate_t state; /* job-state */ time_t completed_time, /* time-at-completed */ creation_time, /* time-at-creation */ processing_time; /* time-at-processing */ const char *dest, /* job-printer-uri */ *format, /* document-format */ *title, /* job-name */ *user; /* job-originating-user-name */ char uri[HTTP_MAX_URI]; /* URI for jobs */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ static const char * const attrs[] = /* Requested attributes */ { "document-format", "job-id", "job-k-octets", "job-name", "job-originating-user-name", "job-printer-uri", "job-priority", "job-state", "time-at-completed", "time-at-creation", "time-at-processing" }; /* * Range check input... */ if (!jobs) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (-1); } /* * Get the right URI... */ if (name) { if (httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", name) < HTTP_URI_STATUS_OK) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to create printer-uri"), 1); return (-1); } } else strlcpy(uri, "ipp://localhost/", sizeof(uri)); if (!http) if ((http = _cupsConnect()) == NULL) return (-1); /* * Build an IPP_GET_JOBS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name * which-jobs * my-jobs * requested-attributes */ request = ippNewRequest(IPP_OP_GET_JOBS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); if (myjobs) ippAddBoolean(request, IPP_TAG_OPERATION, "my-jobs", 1); if (whichjobs == CUPS_WHICHJOBS_COMPLETED) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "which-jobs", NULL, "completed"); else if (whichjobs == CUPS_WHICHJOBS_ALL) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "which-jobs", NULL, "all"); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(attrs) / sizeof(attrs[0]), NULL, attrs); /* * Do the request and get back a response... */ n = 0; *jobs = NULL; if ((response = cupsDoRequest(http, request, "/")) != NULL) { for (attr = response->attrs; attr; attr = attr->next) { /* * Skip leading attributes until we hit a job... */ while (attr && attr->group_tag != IPP_TAG_JOB) attr = attr->next; if (!attr) break; /* * Pull the needed attributes from this job... */ id = 0; size = 0; priority = 50; state = IPP_JSTATE_PENDING; user = "unknown"; dest = NULL; format = "application/octet-stream"; title = "untitled"; creation_time = 0; completed_time = 0; processing_time = 0; while (attr && attr->group_tag == IPP_TAG_JOB) { if (!strcmp(attr->name, "job-id") && attr->value_tag == IPP_TAG_INTEGER) id = attr->values[0].integer; else if (!strcmp(attr->name, "job-state") && attr->value_tag == IPP_TAG_ENUM) state = (ipp_jstate_t)attr->values[0].integer; else if (!strcmp(attr->name, "job-priority") && attr->value_tag == IPP_TAG_INTEGER) priority = attr->values[0].integer; else if (!strcmp(attr->name, "job-k-octets") && attr->value_tag == IPP_TAG_INTEGER) size = attr->values[0].integer; else if (!strcmp(attr->name, "time-at-completed") && attr->value_tag == IPP_TAG_INTEGER) completed_time = attr->values[0].integer; else if (!strcmp(attr->name, "time-at-creation") && attr->value_tag == IPP_TAG_INTEGER) creation_time = attr->values[0].integer; else if (!strcmp(attr->name, "time-at-processing") && attr->value_tag == IPP_TAG_INTEGER) processing_time = attr->values[0].integer; else if (!strcmp(attr->name, "job-printer-uri") && attr->value_tag == IPP_TAG_URI) { if ((dest = strrchr(attr->values[0].string.text, '/')) != NULL) dest ++; } else if (!strcmp(attr->name, "job-originating-user-name") && attr->value_tag == IPP_TAG_NAME) user = attr->values[0].string.text; else if (!strcmp(attr->name, "document-format") && attr->value_tag == IPP_TAG_MIMETYPE) format = attr->values[0].string.text; else if (!strcmp(attr->name, "job-name") && (attr->value_tag == IPP_TAG_TEXT || attr->value_tag == IPP_TAG_NAME)) title = attr->values[0].string.text; attr = attr->next; } /* * See if we have everything needed... */ if (!dest || !id) { if (!attr) break; else continue; } /* * Allocate memory for the job... */ if (n == 0) temp = malloc(sizeof(cups_job_t)); else temp = realloc(*jobs, sizeof(cups_job_t) * (size_t)(n + 1)); if (!temp) { /* * Ran out of memory! */ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0); cupsFreeJobs(n, *jobs); *jobs = NULL; ippDelete(response); return (-1); } *jobs = temp; temp += n; n ++; /* * Copy the data over... */ temp->dest = _cupsStrAlloc(dest); temp->user = _cupsStrAlloc(user); temp->format = _cupsStrAlloc(format); temp->title = _cupsStrAlloc(title); temp->id = id; temp->priority = priority; temp->state = state; temp->size = size; temp->completed_time = completed_time; temp->creation_time = creation_time; temp->processing_time = processing_time; if (!attr) break; } ippDelete(response); } if (n == 0 && cg->last_error >= IPP_STATUS_ERROR_BAD_REQUEST) return (-1); else return (n); } /* * 'cupsGetPrinters()' - Get a list of printers from the default server. * * This function is deprecated and no longer returns a list of printers - use * @link cupsGetDests@ instead. * * @deprecated@ @exclude all@ */ int /* O - Number of printers */ cupsGetPrinters(char ***printers) /* O - Printers */ { if (printers) *printers = NULL; return (0); } /* * 'cupsPrintFile()' - Print a file to a printer or class on the default server. * * @exclude all@ */ int /* O - Job ID or 0 on error */ cupsPrintFile(const char *name, /* I - Destination name */ const char *filename, /* I - File to print */ const char *title, /* I - Title of job */ int num_options,/* I - Number of options */ cups_option_t *options) /* I - Options */ { DEBUG_printf(("cupsPrintFile(name=\"%s\", filename=\"%s\", title=\"%s\", num_options=%d, options=%p)", name, filename, title, num_options, (void *)options)); return (cupsPrintFiles2(CUPS_HTTP_DEFAULT, name, 1, &filename, title, num_options, options)); } /* * 'cupsPrintFile2()' - Print a file to a printer or class on the specified * server. * * @since CUPS 1.1.21/macOS 10.4@ @exclude all@ */ int /* O - Job ID or 0 on error */ cupsPrintFile2( http_t *http, /* I - Connection to server */ const char *name, /* I - Destination name */ const char *filename, /* I - File to print */ const char *title, /* I - Title of job */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { DEBUG_printf(("cupsPrintFile2(http=%p, name=\"%s\", filename=\"%s\", title=\"%s\", num_options=%d, options=%p)", (void *)http, name, filename, title, num_options, (void *)options)); return (cupsPrintFiles2(http, name, 1, &filename, title, num_options, options)); } /* * 'cupsPrintFiles()' - Print one or more files to a printer or class on the * default server. * * @exclude all@ */ int /* O - Job ID or 0 on error */ cupsPrintFiles( const char *name, /* I - Destination name */ int num_files, /* I - Number of files */ const char **files, /* I - File(s) to print */ const char *title, /* I - Title of job */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { DEBUG_printf(("cupsPrintFiles(name=\"%s\", num_files=%d, files=%p, title=\"%s\", num_options=%d, options=%p)", name, num_files, (void *)files, title, num_options, (void *)options)); /* * Print the file(s)... */ return (cupsPrintFiles2(CUPS_HTTP_DEFAULT, name, num_files, files, title, num_options, options)); } /* * 'cupsPrintFiles2()' - Print one or more files to a printer or class on the * specified server. * * @since CUPS 1.1.21/macOS 10.4@ @exclude all@ */ int /* O - Job ID or 0 on error */ cupsPrintFiles2( http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *name, /* I - Destination name */ int num_files, /* I - Number of files */ const char **files, /* I - File(s) to print */ const char *title, /* I - Title of job */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { int i; /* Looping var */ int job_id; /* New job ID */ const char *docname; /* Basename of current filename */ const char *format; /* Document format */ cups_file_t *fp; /* Current file */ char buffer[8192]; /* Copy buffer */ ssize_t bytes; /* Bytes in buffer */ http_status_t status; /* Status of write */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ ipp_status_t cancel_status; /* Status code to preserve */ char *cancel_message; /* Error message to preserve */ DEBUG_printf(("cupsPrintFiles2(http=%p, name=\"%s\", num_files=%d, files=%p, title=\"%s\", num_options=%d, options=%p)", (void *)http, name, num_files, (void *)files, title, num_options, (void *)options)); /* * Range check input... */ if (!name || num_files < 1 || !files) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); return (0); } /* * Create the print job... */ if ((job_id = cupsCreateJob(http, name, title, num_options, options)) == 0) return (0); /* * Send each of the files... */ if (cupsGetOption("raw", num_options, options)) format = CUPS_FORMAT_RAW; else if ((format = cupsGetOption("document-format", num_options, options)) == NULL) format = CUPS_FORMAT_AUTO; for (i = 0; i < num_files; i ++) { /* * Start the next file... */ if ((docname = strrchr(files[i], '/')) != NULL) docname ++; else docname = files[i]; if ((fp = cupsFileOpen(files[i], "rb")) == NULL) { /* * Unable to open print file, cancel the job and return... */ _cupsSetError(IPP_STATUS_ERROR_DOCUMENT_ACCESS, NULL, 0); goto cancel_job; } status = cupsStartDocument(http, name, job_id, docname, format, i == (num_files - 1)); while (status == HTTP_STATUS_CONTINUE && (bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0) status = cupsWriteRequestData(http, buffer, (size_t)bytes); cupsFileClose(fp); if (status != HTTP_STATUS_CONTINUE || cupsFinishDocument(http, name) != IPP_STATUS_OK) { /* * Unable to queue, cancel the job and return... */ goto cancel_job; } } return (job_id); /* * If we get here, something happened while sending the print job so we need * to cancel the job without setting the last error (since we need to preserve * the current error... */ cancel_job: cancel_status = cg->last_error; cancel_message = cg->last_status_message ? _cupsStrRetain(cg->last_status_message) : NULL; cupsCancelJob2(http, name, job_id, 0); cg->last_error = cancel_status; cg->last_status_message = cancel_message; return (0); } /* * 'cupsStartDocument()' - Add a document to a job created with cupsCreateJob(). * * Use @link cupsWriteRequestData@ to write data for the document and * @link cupsFinishDocument@ to finish the document and get the submission status. * * The MIME type constants @code CUPS_FORMAT_AUTO@, @code CUPS_FORMAT_PDF@, * @code CUPS_FORMAT_POSTSCRIPT@, @code CUPS_FORMAT_RAW@, and * @code CUPS_FORMAT_TEXT@ are provided for the "format" argument, although * any supported MIME type string can be supplied. * * @since CUPS 1.4/macOS 10.6@ @exclude all@ */ http_status_t /* O - HTTP status of request */ cupsStartDocument( http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */ const char *name, /* I - Destination name */ int job_id, /* I - Job ID from @link cupsCreateJob@ */ const char *docname, /* I - Name of document */ const char *format, /* I - MIME type or @code CUPS_FORMAT_foo@ */ int last_document) /* I - 1 for last document in job, 0 otherwise */ { char resource[1024], /* Resource for destinatio */ printer_uri[1024]; /* Printer URI */ ipp_t *request; /* Send-Document request */ http_status_t status; /* HTTP status */ /* * Create a Send-Document request... */ if ((request = ippNewRequest(IPP_OP_SEND_DOCUMENT)) == NULL) { _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOMEM), 0); return (HTTP_STATUS_ERROR); } httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri), "ipp", NULL, "localhost", ippPort(), "/printers/%s", name); snprintf(resource, sizeof(resource), "/printers/%s", name); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer_uri); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); if (docname) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "document-name", NULL, docname); if (format) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format); ippAddBoolean(request, IPP_TAG_OPERATION, "last-document", (char)last_document); /* * Send and delete the request, then return the status... */ status = cupsSendRequest(http, request, resource, CUPS_LENGTH_VARIABLE); ippDelete(request); return (status); } /* * 'cups_create_cb()' - Find the destination for printing. */ static int /* O - 0 on match */ cups_create_cb( _cups_createdata_t *data, /* I - Data from cupsCreateJob call */ unsigned flags, /* I - Enumeration flags */ cups_dest_t *dest) /* I - Destination */ { DEBUG_printf(("2cups_create_cb(data=%p(%s), flags=%08x, dest=%p(%s))", (void *)data, data->name, flags, (void *)dest, dest->name)); (void)flags; if (dest->instance || strcasecmp(data->name, dest->name)) return (1); cupsCopyDest(dest, 0, &data->dest); return (0); } cups-2.2.7/cups/versioning.h000664 000765 000024 00000017301 13255074424 016463 0ustar00msweetstaff000000 000000 /* * API versioning definitions for CUPS. * * Copyright © 2007-2018 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_VERSIONING_H_ # define _CUPS_VERSIONING_H_ /* * This header defines several constants - _CUPS_DEPRECATED, * _CUPS_DEPRECATED_MSG, _CUPS_INTERNAL_MSG, _CUPS_API_major_minor, and * _CUPS_API_major_minor_patch - which add compiler-specific attributes that * flag functions that are deprecated, added in particular releases, or internal * to CUPS. * * On macOS, the _CUPS_API_* constants are defined based on the values of * the MAC_OS_X_VERSION_MIN_ALLOWED and MAC_OS_X_VERSION_MAX_ALLOWED constants * provided by the compiler. */ # if defined(__APPLE__) && !defined(_CUPS_SOURCE) && !TARGET_OS_IOS # include # ifndef AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER # define AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER __attribute__((unavailable)) # endif /* !AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER */ # ifndef AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER # define AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER __attribute__((unavailable)) # endif /* !AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER */ # ifndef AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER # define AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER __attribute__((unavailable)) # endif /* !AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER */ # ifndef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER # define AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER __attribute__((unavailable)) # endif /* !AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER */ # ifndef AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER # define AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER __attribute__((unavailable)) # endif /* !AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER */ # ifndef AVAILABLE_MAC_OS_X_VERSION_10_8_AND_LATER # define AVAILABLE_MAC_OS_X_VERSION_10_8_AND_LATER __attribute__((unavailable)) # endif /* !AVAILABLE_MAC_OS_X_VERSION_10_8_AND_LATER */ # ifndef AVAILABLE_MAC_OS_X_VERSION_10_9_AND_LATER # define AVAILABLE_MAC_OS_X_VERSION_10_9_AND_LATER __attribute__((unavailable)) # endif /* !AVAILABLE_MAC_OS_X_VERSION_10_9_AND_LATER */ # ifndef AVAILABLE_MAC_OS_X_VERSION_10_10_AND_LATER # define AVAILABLE_MAC_OS_X_VERSION_10_10_AND_LATER __attribute__((unavailable)) # endif /* !AVAILABLE_MAC_OS_X_VERSION_10_10_AND_LATER */ # ifndef AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER # define AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER __attribute__((unavailable)) # endif /* !AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER */ # ifndef AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER # define AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER __attribute__((unavailable)) # endif /* !AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER */ # define _CUPS_API_1_1_19 AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER # define _CUPS_API_1_1_20 AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER # define _CUPS_API_1_1_21 AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER # define _CUPS_API_1_2 AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER # define _CUPS_API_1_3 AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER # define _CUPS_API_1_4 AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER # define _CUPS_API_1_5 AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER # define _CUPS_API_1_6 AVAILABLE_MAC_OS_X_VERSION_10_8_AND_LATER # define _CUPS_API_1_7 AVAILABLE_MAC_OS_X_VERSION_10_9_AND_LATER # define _CUPS_API_2_0 AVAILABLE_MAC_OS_X_VERSION_10_10_AND_LATER # define _CUPS_API_2_2 AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER # define _CUPS_API_2_2_4 AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER # define _CUPS_API_2_2_7 # else # define _CUPS_API_1_1_19 # define _CUPS_API_1_1_20 # define _CUPS_API_1_1_21 # define _CUPS_API_1_2 # define _CUPS_API_1_3 # define _CUPS_API_1_4 # define _CUPS_API_1_5 # define _CUPS_API_1_6 # define _CUPS_API_1_7 # define _CUPS_API_2_0 # define _CUPS_API_2_2 # define _CUPS_API_2_2_4 # define _CUPS_API_2_2_7 # endif /* __APPLE__ && !_CUPS_SOURCE */ /* * With GCC and Clang we can mark old APIs as "deprecated" or "unavailable" with * messages so you get warnings/errors are compile-time... */ # ifdef __has_extension /* Clang */ # define _CUPS_HAS_DEPRECATED # if __has_extension(attribute_deprecated_with_message) # define _CUPS_HAS_DEPRECATED_WITH_MESSAGE # endif # if __has_extension(attribute_unavailable_with_message) # define _CUPS_HAS_UNAVAILABLE_WITH_MESSAGE # endif # elif defined(__GNUC__) /* GCC and compatible */ # if __GNUC__ >= 3 /* GCC 3.0 or higher */ # define _CUPS_HAS_DEPRECATED # endif /* __GNUC__ >= 3 */ # if __GNUC__ >= 5 /* GCC 5.x */ # define _CUPS_HAS_DEPRECATED_WITH_MESSAGE # elif __GNUC__ == 4 && __GNUC_MINOR__ >= 5 /* GCC 4.5 or higher */ # define _CUPS_HAS_DEPRECATED_WITH_MESSAGE # endif /* __GNUC__ >= 5 */ # endif /* __has_extension */ # if !defined(_CUPS_HAS_DEPRECATED) || (defined(_CUPS_SOURCE) && !defined(_CUPS_NO_DEPRECATED)) /* * Don't mark functions deprecated if the compiler doesn't support it * or we are building CUPS source that doesn't care. */ # define _CUPS_DEPRECATED # define _CUPS_DEPRECATED_MSG(m) # define _CUPS_DEPRECATED_1_6_MSG(m) # define _CUPS_DEPRECATED_1_7_MSG(m) # define _CUPS_INTERNAL_MSG(m) # elif defined(_CUPS_HAS_UNAVAILABLE_WITH_MESSAGE) && defined(_CUPS_NO_DEPRECATED) /* * Compiler supports the unavailable attribute, so use it when the code * wants to exclude the use of deprecated API. */ # define _CUPS_DEPRECATED __attribute__ ((unavailable)) # define _CUPS_DEPRECATED_MSG(m) __attribute__ ((unavailable(m))) # define _CUPS_DEPRECATED_1_6_MSG(m) __attribute__ ((unavailable(m))) # define _CUPS_DEPRECATED_1_7_MSG(m) __attribute__ ((unavailable(m))) # define _CUPS_INTERNAL_MSG(m) __attribute__ ((unavailable(m))) # else /* * Compiler supports the deprecated attribute, so use it. */ # define _CUPS_DEPRECATED __attribute__ ((deprecated)) # ifdef _CUPS_HAS_DEPRECATED_WITH_MESSAGE # define _CUPS_DEPRECATED_MSG(m) __attribute__ ((deprecated(m))) # else # define _CUPS_DEPRECATED_MSG(m) __attribute__ ((deprecated)) # endif /* _CUPS_HAS_DEPRECATED_WITH_MESSAGE */ # if defined(MAC_OS_X_VERSION_10_8) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_8 # define _CUPS_DEPRECATED_1_6_MSG(m) _CUPS_DEPRECATED_MSG(m) # else # define _CUPS_DEPRECATED_1_6_MSG(m) # endif /* MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_8 */ # if defined(MAC_OS_X_VERSION_10_9) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9 # define _CUPS_DEPRECATED_1_7_MSG(m) _CUPS_DEPRECATED_MSG(m) # else # define _CUPS_DEPRECATED_1_7_MSG(m) # endif /* MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_9 */ # ifdef _CUPS_SOURCE # define _CUPS_INTERNAL_MSG(m) # elif defined(_CUPS_HAS_UNAVAILABLE_WITH_MESSAGE) # define _CUPS_INTERNAL_MSG(m) __attribute__ ((unavailable(m))) # elif defined(_CUPS_HAS_DEPRECATED_WITH_MESSAGE) # define _CUPS_INTERNAL_MSG(m) __attribute__ ((deprecated(m))) # else # define _CUPS_INTERNAL_MSG(m) __attribute__ ((deprecated)) # endif /* _CUPS_SOURCE */ # endif /* !_CUPS_HAS_DEPRECATED || (_CUPS_SOURCE && !_CUPS_NO_DEPRECATED) */ # ifndef __GNUC__ # define __attribute__(x) # endif /* !__GNUC__ */ #endif /* !_CUPS_VERSIONING_H_ */ cups-2.2.7/config-scripts/cups-common.m4000664 000765 000024 00000031471 13255074424 020615 0ustar00msweetstaff000000 000000 dnl dnl Common configuration stuff for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 1997-2007 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl dnl Set the name of the config header file... AC_CONFIG_HEADER(config.h) dnl Version number information... CUPS_VERSION="AC_PACKAGE_VERSION" CUPS_REVISION="" CUPS_BUILD="cups-$CUPS_VERSION" AC_ARG_WITH(cups_build, [ --with-cups-build set "cups-config --build" string ], CUPS_BUILD="$withval") AC_SUBST(CUPS_VERSION) AC_SUBST(CUPS_REVISION) AC_SUBST(CUPS_BUILD) AC_DEFINE_UNQUOTED(CUPS_SVERSION, "AC_PACKAGE_NAME v$CUPS_VERSION$CUPS_REVISION") AC_DEFINE_UNQUOTED(CUPS_MINIMAL, "AC_PACKAGE_NAME/$CUPS_VERSION$CUPS_REVISION") dnl Default compiler flags... CFLAGS="${CFLAGS:=}" CPPFLAGS="${CPPFLAGS:=}" CXXFLAGS="${CXXFLAGS:=}" LDFLAGS="${LDFLAGS:=}" dnl Checks for programs... AC_PROG_AWK AC_PROG_CC(clang cc gcc) AC_PROG_CPP AC_PROG_CXX(clang++ c++ g++) AC_PROG_RANLIB AC_PATH_PROG(AR,ar) AC_PATH_PROG(CHMOD,chmod) AC_PATH_PROG(GZIP,gzip) AC_PATH_PROG(LD,ld) AC_PATH_PROG(LN,ln) AC_PATH_PROG(MKDIR,mkdir) AC_PATH_PROG(MV,mv) AC_PATH_PROG(RM,rm) AC_PATH_PROG(RMDIR,rmdir) AC_PATH_PROG(SED,sed) AC_PATH_PROG(XDGOPEN,xdg-open) if test "x$XDGOPEN" = x; then CUPS_HTMLVIEW="htmlview" else CUPS_HTMLVIEW="$XDGOPEN" fi AC_SUBST(CUPS_HTMLVIEW) AC_MSG_CHECKING(for install-sh script) INSTALL="`pwd`/install-sh" AC_SUBST(INSTALL) AC_MSG_RESULT(using $INSTALL) if test "x$AR" = x; then AC_MSG_ERROR([Unable to find required library archive command.]) fi if test "x$CC" = x; then AC_MSG_ERROR([Unable to find required C compiler command.]) fi dnl Static library option... INSTALLSTATIC="" AC_ARG_ENABLE(static, [ --enable-static install static libraries]) if test x$enable_static = xyes; then echo Installing static libraries... INSTALLSTATIC="installstatic" fi AC_SUBST(INSTALLSTATIC) dnl Check for pkg-config, which is used for some other tests later on... AC_PATH_TOOL(PKGCONFIG, pkg-config) dnl Check for libraries... AC_SEARCH_LIBS(abs, m, AC_DEFINE(HAVE_ABS)) AC_SEARCH_LIBS(crypt, crypt) AC_SEARCH_LIBS(fmod, m) AC_SEARCH_LIBS(getspent, sec gen) LIBMALLOC="" AC_ARG_ENABLE(mallinfo, [ --enable-mallinfo build with malloc debug logging]) if test x$enable_mallinfo = xyes; then SAVELIBS="$LIBS" LIBS="" AC_SEARCH_LIBS(mallinfo, malloc, AC_DEFINE(HAVE_MALLINFO)) LIBMALLOC="$LIBS" LIBS="$SAVELIBS" fi AC_SUBST(LIBMALLOC) dnl Check for libpaper support... AC_ARG_ENABLE(libpaper, [ --enable-libpaper build with libpaper support]) if test x$enable_libpaper = xyes; then AC_CHECK_LIB(paper,systempapername, AC_DEFINE(HAVE_LIBPAPER) LIBPAPER="-lpaper", LIBPAPER="") else LIBPAPER="" fi AC_SUBST(LIBPAPER) dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADER(stdlib.h,AC_DEFINE(HAVE_STDLIB_H)) AC_CHECK_HEADER(crypt.h,AC_DEFINE(HAVE_CRYPT_H)) AC_CHECK_HEADER(langinfo.h,AC_DEFINE(HAVE_LANGINFO_H)) AC_CHECK_HEADER(malloc.h,AC_DEFINE(HAVE_MALLOC_H)) AC_CHECK_HEADER(shadow.h,AC_DEFINE(HAVE_SHADOW_H)) AC_CHECK_HEADER(stdint.h,AC_DEFINE(HAVE_STDINT_H)) AC_CHECK_HEADER(string.h,AC_DEFINE(HAVE_STRING_H)) AC_CHECK_HEADER(strings.h,AC_DEFINE(HAVE_STRINGS_H)) AC_CHECK_HEADER(bstring.h,AC_DEFINE(HAVE_BSTRING_H)) AC_CHECK_HEADER(sys/ioctl.h,AC_DEFINE(HAVE_SYS_IOCTL_H)) AC_CHECK_HEADER(sys/param.h,AC_DEFINE(HAVE_SYS_PARAM_H)) AC_CHECK_HEADER(sys/ucred.h,AC_DEFINE(HAVE_SYS_UCRED_H)) dnl Checks for iconv.h and iconv_open AC_CHECK_HEADER(iconv.h, SAVELIBS="$LIBS" LIBS="" AC_SEARCH_LIBS(iconv_open,iconv, AC_DEFINE(HAVE_ICONV_H) SAVELIBS="$SAVELIBS $LIBS") AC_SEARCH_LIBS(libiconv_open,iconv, AC_DEFINE(HAVE_ICONV_H) SAVELIBS="$SAVELIBS $LIBS") LIBS="$SAVELIBS") dnl Checks for Mini-XML (www.minixml.org)... LIBMXML="" AC_CHECK_HEADER(mxml.h, SAVELIBS="$LIBS" AC_SEARCH_LIBS(mmxlNewElement,mxml, AC_DEFINE(HAVE_MXML_H) LIBMXML="-lmxml") LIBS="$SAVELIBS") AC_SUBST(LIBMXML) dnl Checks for statfs and its many headers... AC_CHECK_HEADER(sys/mount.h,AC_DEFINE(HAVE_SYS_MOUNT_H)) AC_CHECK_HEADER(sys/statfs.h,AC_DEFINE(HAVE_SYS_STATFS_H)) AC_CHECK_HEADER(sys/statvfs.h,AC_DEFINE(HAVE_SYS_STATVFS_H)) AC_CHECK_HEADER(sys/vfs.h,AC_DEFINE(HAVE_SYS_VFS_H)) AC_CHECK_FUNCS(statfs statvfs) dnl Checks for string functions. AC_CHECK_FUNCS(strdup strlcat strlcpy) if test "$host_os_name" = "hp-ux" -a "$host_os_version" = "1020"; then echo Forcing snprintf emulation for HP-UX. else AC_CHECK_FUNCS(snprintf vsnprintf) fi dnl Check for random number functions... AC_CHECK_FUNCS(random lrand48 arc4random) dnl Check for geteuid function. AC_CHECK_FUNCS(geteuid) dnl Check for setpgid function. AC_CHECK_FUNCS(setpgid) dnl Check for vsyslog function. AC_CHECK_FUNCS(vsyslog) dnl Checks for signal functions. case "$host_os_name" in linux* | gnu*) # Do not use sigset on Linux or GNU HURD ;; *) # Use sigset on other platforms, if available AC_CHECK_FUNCS(sigset) ;; esac AC_CHECK_FUNCS(sigaction) dnl Checks for wait functions. AC_CHECK_FUNCS(waitpid wait3) dnl Check for posix_spawn AC_CHECK_FUNCS(posix_spawn) dnl Check for getgrouplist AC_CHECK_FUNCS(getgrouplist) dnl See if the tm structure has the tm_gmtoff member... AC_MSG_CHECKING(for tm_gmtoff member in tm structure) AC_TRY_COMPILE([#include ],[struct tm t; int o = t.tm_gmtoff;], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_TM_GMTOFF), AC_MSG_RESULT(no)) dnl See if the stat structure has the st_gen member... AC_MSG_CHECKING(for st_gen member in stat structure) AC_TRY_COMPILE([#include ],[struct stat t; int o = t.st_gen;], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_ST_GEN), AC_MSG_RESULT(no)) dnl See if we have the removefile(3) function for securely removing files AC_CHECK_FUNCS(removefile) dnl See if we have libusb... AC_ARG_ENABLE(libusb, [ --enable-libusb use libusb for USB printing]) LIBUSB="" USBQUIRKS="" AC_SUBST(LIBUSB) AC_SUBST(USBQUIRKS) if test "x$PKGCONFIG" != x; then if test x$enable_libusb != xno -a $host_os_name != darwin; then AC_MSG_CHECKING(for libusb-1.0) if $PKGCONFIG --exists libusb-1.0; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_LIBUSB) CFLAGS="$CFLAGS `$PKGCONFIG --cflags libusb-1.0`" LIBUSB="`$PKGCONFIG --libs libusb-1.0`" USBQUIRKS="\$(DATADIR)/usb" else AC_MSG_RESULT(no) if test x$enable_libusb = xyes; then AC_MSG_ERROR(libusb required for --enable-libusb.) fi fi fi elif test x$enable_libusb = xyes; then AC_MSG_ERROR(Need pkg-config to enable libusb support.) fi dnl See if we have libwrap for TCP wrappers support... AC_ARG_ENABLE(tcp_wrappers, [ --enable-tcp-wrappers use libwrap for TCP wrappers support]) LIBWRAP="" AC_SUBST(LIBWRAP) if test x$enable_tcp_wrappers = xyes; then AC_CHECK_LIB(wrap, hosts_access,[ AC_CHECK_HEADER(tcpd.h, AC_DEFINE(HAVE_TCPD_H) LIBWRAP="-lwrap")]) fi dnl ZLIB INSTALL_GZIP="" LIBZ="" AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, gzgets, AC_DEFINE(HAVE_LIBZ) LIBZ="-lz" LIBS="$LIBS -lz" AC_CHECK_LIB(z, inflateCopy, AC_DEFINE(HAVE_INFLATECOPY)) if test "x$GZIP" != z; then INSTALL_GZIP="-z" fi)) AC_SUBST(INSTALL_GZIP) AC_SUBST(LIBZ) dnl Flags for "ar" command... case $host_os_name in darwin* | *bsd*) ARFLAGS="-rcv" ;; *) ARFLAGS="crvs" ;; esac AC_SUBST(ARFLAGS) dnl Prep libraries specifically for cupsd and backends... BACKLIBS="" SERVERLIBS="" AC_SUBST(BACKLIBS) AC_SUBST(SERVERLIBS) dnl See if we have POSIX ACL support... SAVELIBS="$LIBS" LIBS="" AC_ARG_ENABLE(acl, [ --enable-acl build with POSIX ACL support]) if test "x$enable_acl" != xno; then AC_SEARCH_LIBS(acl_init, acl, AC_DEFINE(HAVE_ACL_INIT)) SERVERLIBS="$SERVERLIBS $LIBS" fi LIBS="$SAVELIBS" dnl Check for DBUS support AC_ARG_ENABLE(dbus, [ --disable-dbus build without DBUS support]) AC_ARG_WITH(dbusdir, [ --with-dbusdir set DBUS configuration directory ], DBUSDIR="$withval") DBUSDIR="" DBUS_NOTIFIER="" DBUS_NOTIFIERLIBS="" if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x -a "x$host_os_name" != xdarwin; then AC_MSG_CHECKING(for DBUS) if $PKGCONFIG --exists dbus-1; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_DBUS) CFLAGS="$CFLAGS `$PKGCONFIG --cflags dbus-1` -DDBUS_API_SUBJECT_TO_CHANGE" SERVERLIBS="$SERVERLIBS `$PKGCONFIG --libs dbus-1`" DBUS_NOTIFIER="dbus" DBUS_NOTIFIERLIBS="`$PKGCONFIG --libs dbus-1`" SAVELIBS="$LIBS" LIBS="$LIBS $DBUS_NOTIFIERLIBS" AC_CHECK_FUNC(dbus_message_iter_init_append, AC_DEFINE(HAVE_DBUS_MESSAGE_ITER_INIT_APPEND)) AC_CHECK_FUNC(dbus_threads_init, AC_DEFINE(HAVE_DBUS_THREADS_INIT)) LIBS="$SAVELIBS" if test -d /etc/dbus-1; then DBUSDIR="/etc/dbus-1" fi else AC_MSG_RESULT(no) fi fi AC_SUBST(DBUSDIR) AC_SUBST(DBUS_NOTIFIER) AC_SUBST(DBUS_NOTIFIERLIBS) dnl Extra platform-specific libraries... CUPS_DEFAULT_PRINTOPERATOR_AUTH="@SYSTEM" CUPS_DEFAULT_SYSTEM_AUTHKEY="" CUPS_SYSTEM_AUTHKEY="" INSTALLXPC="" case $host_os_name in darwin*) BACKLIBS="$BACKLIBS -framework IOKit" SERVERLIBS="$SERVERLIBS -framework IOKit -weak_framework ApplicationServices" LIBS="-framework SystemConfiguration -framework CoreFoundation -framework Security $LIBS" dnl Check for framework headers... AC_CHECK_HEADER(ApplicationServices/ApplicationServices.h,AC_DEFINE(HAVE_APPLICATIONSERVICES_H)) AC_CHECK_HEADER(CoreFoundation/CoreFoundation.h,AC_DEFINE(HAVE_COREFOUNDATION_H)) AC_CHECK_HEADER(CoreFoundation/CFPriv.h,AC_DEFINE(HAVE_CFPRIV_H)) AC_CHECK_HEADER(CoreFoundation/CFBundlePriv.h,AC_DEFINE(HAVE_CFBUNDLEPRIV_H)) dnl Check for dynamic store function... AC_CHECK_FUNCS(SCDynamicStoreCopyComputerName) dnl Check for the new membership functions in MacOSX 10.4... AC_CHECK_HEADER(membership.h,AC_DEFINE(HAVE_MEMBERSHIP_H)) AC_CHECK_HEADER(membershipPriv.h,AC_DEFINE(HAVE_MEMBERSHIPPRIV_H)) AC_CHECK_FUNCS(mbr_uid_to_uuid) dnl Need header... AC_CHECK_HEADER(dlfcn.h,AC_DEFINE(HAVE_DLFCN_H)) dnl Check for notify_post support AC_CHECK_HEADER(notify.h,AC_DEFINE(HAVE_NOTIFY_H)) AC_CHECK_FUNCS(notify_post) dnl Check for Authorization Services support AC_ARG_WITH(adminkey, [ --with-adminkey set the default SystemAuthKey value], default_adminkey="$withval", default_adminkey="default") AC_ARG_WITH(operkey, [ --with-operkey set the default operator @AUTHKEY value], default_operkey="$withval", default_operkey="default") AC_CHECK_HEADER(Security/Authorization.h, [ AC_DEFINE(HAVE_AUTHORIZATION_H) if test "x$default_adminkey" != xdefault; then CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey $default_adminkey" CUPS_DEFAULT_SYSTEM_AUTHKEY="$default_adminkey" else CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey system.print.admin" CUPS_DEFAULT_SYSTEM_AUTHKEY="system.print.admin" fi if test "x$default_operkey" != xdefault; then CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY($default_operkey) @admin @lpadmin" else CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY(system.print.operator) @admin @lpadmin" fi]) AC_CHECK_HEADER(Security/SecBasePriv.h,AC_DEFINE(HAVE_SECBASEPRIV_H)) dnl Check for sandbox/Seatbelt support if test $host_os_version -ge 100; then AC_CHECK_HEADER(sandbox.h,AC_DEFINE(HAVE_SANDBOX_H)) fi if test $host_os_version -ge 110 -a $host_os_version -lt 120; then # Broken public headers in 10.7.x... AC_MSG_CHECKING(for sandbox/private.h presence) if test -f /usr/local/include/sandbox/private.h; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_ERROR(Run 'sudo mkdir -p /usr/local/include/sandbox' and 'sudo touch /usr/local/include/sandbox/private.h' to build CUPS.) fi fi dnl Check for XPC support AC_CHECK_HEADER(xpc/xpc.h, AC_DEFINE(HAVE_XPC) INSTALLXPC="install-xpc") AC_CHECK_HEADER(xpc/private.h, AC_DEFINE(HAVE_XPC_PRIVATE_H)) ;; esac AC_SUBST(CUPS_DEFAULT_PRINTOPERATOR_AUTH) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTOPERATOR_AUTH, "$CUPS_DEFAULT_PRINTOPERATOR_AUTH") AC_DEFINE_UNQUOTED(CUPS_DEFAULT_SYSTEM_AUTHKEY, "$CUPS_DEFAULT_SYSTEM_AUTHKEY") AC_SUBST(CUPS_SYSTEM_AUTHKEY) AC_SUBST(INSTALLXPC) dnl Check for build components COMPONENTS="all" AC_ARG_WITH(components, [ --with-components set components to build: - "all" (default) builds everything - "core" builds libcups and ipptool], COMPONENTS="$withval") case "$COMPONENTS" in all) BUILDDIRS="filter backend berkeley cgi-bin monitor notifier ppdc scheduler systemv conf data desktop locale man doc examples templates" ;; core) BUILDDIRS="data locale" ;; *) AC_MSG_ERROR([Bad build component "$COMPONENT" specified!]) ;; esac AC_SUBST(BUILDDIRS) cups-2.2.7/config-scripts/cups-compiler.m4000664 000765 000024 00000016153 13255074424 021137 0ustar00msweetstaff000000 000000 dnl dnl Compiler stuff for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 1997-2007 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl dnl Clear the debugging and non-shared library options unless the user asks dnl for them... INSTALL_STRIP="" OPTIM="" AC_SUBST(INSTALL_STRIP) AC_SUBST(OPTIM) AC_ARG_WITH(optim, [ --with-optim set optimization flags ]) AC_ARG_ENABLE(debug, [ --enable-debug build with debugging symbols]) AC_ARG_ENABLE(debug_guards, [ --enable-debug-guards build with memory allocation guards]) AC_ARG_ENABLE(debug_printfs, [ --enable-debug-printfs build with CUPS_DEBUG_LOG support]) AC_ARG_ENABLE(unit_tests, [ --enable-unit-tests build and run unit tests]) dnl For debugging, keep symbols, otherwise strip them... if test x$enable_debug = xyes; then OPTIM="-g" else INSTALL_STRIP="-s" fi dnl Debug printfs can slow things down, so provide a separate option for that if test x$enable_debug_printfs = xyes; then CFLAGS="$CFLAGS -DDEBUG" CXXFLAGS="$CXXFLAGS -DDEBUG" fi dnl Debug guards use an extra 4 bytes for some structures like strings in the dnl string pool, so provide a separate option for that if test x$enable_debug_guards = xyes; then CFLAGS="$CFLAGS -DDEBUG_GUARDS" CXXFLAGS="$CXXFLAGS -DDEBUG_GUARDS" fi dnl Unit tests take up time during a compile... if test x$enable_unit_tests = xyes; then if test "$build" != "$host"; then AC_MSG_ERROR([Sorry, cannot build unit tests when cross-compiling.]) fi UNITTESTS="unittests" else UNITTESTS="" fi AC_SUBST(UNITTESTS) dnl Setup general architecture flags... AC_ARG_WITH(archflags, [ --with-archflags set default architecture flags ]) AC_ARG_WITH(ldarchflags, [ --with-ldarchflags set program architecture flags ]) if test -z "$with_archflags"; then ARCHFLAGS="" else ARCHFLAGS="$with_archflags" fi if test -z "$with_ldarchflags"; then if test "$host_os_name" = darwin; then # Only create Intel programs by default LDARCHFLAGS="`echo $ARCHFLAGS | sed -e '1,$s/-arch ppc64//'`" else LDARCHFLAGS="$ARCHFLAGS" fi else LDARCHFLAGS="$with_ldarchflags" fi AC_SUBST(ARCHFLAGS) AC_SUBST(LDARCHFLAGS) dnl Read-only data/program support on Linux... AC_ARG_ENABLE(relro, [ --enable-relro build with the GCC relro option]) dnl Update compiler options... CXXLIBS="${CXXLIBS:=}" AC_SUBST(CXXLIBS) PIEFLAGS="" AC_SUBST(PIEFLAGS) RELROFLAGS="" AC_SUBST(RELROFLAGS) if test -n "$GCC"; then # Add GCC-specific compiler options... if test -z "$OPTIM"; then if test "x$with_optim" = x; then # Default to optimize-for-size and debug OPTIM="-Os -g" else OPTIM="$with_optim $OPTIM" fi fi # Generate position-independent code as needed... if test $PICFLAG = 1; then OPTIM="-fPIC $OPTIM" fi # The -fstack-protector option is available with some versions of # GCC and adds "stack canaries" which detect when the return address # has been overwritten, preventing many types of exploit attacks. AC_MSG_CHECKING(whether compiler supports -fstack-protector) OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fstack-protector" AC_TRY_LINK(,, if test "x$LSB_BUILD" = xy; then # Can't use stack-protector with LSB binaries... OPTIM="$OPTIM -fno-stack-protector" else OPTIM="$OPTIM -fstack-protector" fi AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) CFLAGS="$OLDCFLAGS" if test "x$LSB_BUILD" != xy; then # The -fPIE option is available with some versions of GCC and # adds randomization of addresses, which avoids another class of # exploits that depend on a fixed address for common functions. # # Not available to LSB binaries... AC_MSG_CHECKING(whether compiler supports -fPIE) OLDCFLAGS="$CFLAGS" case "$host_os_name" in darwin*) CFLAGS="$CFLAGS -fPIE -Wl,-pie" AC_TRY_COMPILE(,,[ PIEFLAGS="-fPIE -Wl,-pie" AC_MSG_RESULT(yes)], AC_MSG_RESULT(no)) ;; *) CFLAGS="$CFLAGS -fPIE -pie" AC_TRY_COMPILE(,,[ PIEFLAGS="-fPIE -pie" AC_MSG_RESULT(yes)], AC_MSG_RESULT(no)) ;; esac CFLAGS="$OLDCFLAGS" fi if test "x$with_optim" = x; then # Add useful warning options for tracking down problems... OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM" AC_MSG_CHECKING(whether compiler supports -Wno-unused-result) OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wno-unused-result" AC_TRY_COMPILE(,, [OPTIM="$OPTIM -Wno-unused-result" AC_MSG_RESULT(yes)], AC_MSG_RESULT(no)) CFLAGS="$OLDCFLAGS" AC_MSG_CHECKING(whether compiler supports -Wsign-conversion) OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wsign-conversion" AC_TRY_COMPILE(,, [OPTIM="$OPTIM -Wsign-conversion" AC_MSG_RESULT(yes)], AC_MSG_RESULT(no)) CFLAGS="$OLDCFLAGS" AC_MSG_CHECKING(whether compiler supports -Wno-tautological-compare) OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wno-tautological-compare" AC_TRY_COMPILE(,, [OPTIM="$OPTIM -Wno-tautological-compare" AC_MSG_RESULT(yes)], AC_MSG_RESULT(no)) CFLAGS="$OLDCFLAGS" AC_MSG_CHECKING(whether compiler supports -Wno-format-truncation) OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wno-format-truncation" AC_TRY_COMPILE(,, [OPTIM="$OPTIM -Wno-format-truncation" AC_MSG_RESULT(yes)], AC_MSG_RESULT(no)) CFLAGS="$OLDCFLAGS" # Additional warning options for development testing... if test -d .svn; then OPTIM="-Werror $OPTIM" fi fi case "$host_os_name" in darwin*) # -D_FORTIFY_SOURCE=2 adds additional object size # checking, basically wrapping all string functions # with buffer-limited ones. Not strictly needed for # CUPS since we already use buffer-limited calls, but # this will catch any additions that are broken. CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2" ;; linux*) # The -z relro option is provided by the Linux linker command to # make relocatable data read-only. if test x$enable_relro = xyes; then RELROFLAGS="-Wl,-z,relro,-z,now" fi ;; esac else # Add vendor-specific compiler options... case $host_os_name in sunos*) # Solaris if test -z "$OPTIM"; then if test "x$with_optim" = x; then OPTIM="-xO2" else OPTIM="$with_optim $OPTIM" fi fi if test $PICFLAG = 1; then OPTIM="-KPIC $OPTIM" fi ;; *) # Running some other operating system; inform the user they # should contribute the necessary options to # cups-support@cups.org... echo "Building CUPS with default compiler optimizations; contact" echo "cups-devel@cups.org with uname and compiler options needed" echo "for your platform, or set the CFLAGS and LDFLAGS environment" echo "variables before running configure." ;; esac fi # Add general compiler options per platform... case $host_os_name in linux*) # glibc 2.8 and higher breaks peer credentials unless you # define _GNU_SOURCE... OPTIM="$OPTIM -D_GNU_SOURCE" ;; esac cups-2.2.7/config-scripts/cups-defaults.m4000664 000765 000024 00000030447 13255074424 021136 0ustar00msweetstaff000000 000000 dnl dnl Default cupsd configuration settings for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 2006-2007 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl dnl Default languages... LANGUAGES="`ls -1 locale/cups_*.po 2>/dev/null | sed -e '1,$s/locale\/cups_//' -e '1,$s/\.po//' | tr '\n' ' '`" AC_ARG_WITH(languages, [ --with-languages set installed languages, default=all ],[ case "$withval" in none | no) LANGUAGES="" ;; all) ;; *) LANGUAGES="$withval" ;; esac]) AC_SUBST(LANGUAGES) dnl macOS bundle-based localization support AC_ARG_WITH(bundledir, [ --with-bundledir set macOS localization bundle directory ], CUPS_BUNDLEDIR="$withval", if test "x$host_os_name" = xdarwin -a $host_os_version -ge 100; then CUPS_BUNDLEDIR="/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A" LANGUAGES="" else CUPS_BUNDLEDIR="" fi) AC_SUBST(CUPS_BUNDLEDIR) if test "x$CUPS_BUNDLEDIR" != x; then AC_DEFINE_UNQUOTED(CUPS_BUNDLEDIR, "$CUPS_BUNDLEDIR") fi dnl Default executable file permissions AC_ARG_WITH(exe_file_perm, [ --with-exe-file-perm set default executable permissions value, default=0555], CUPS_EXE_FILE_PERM="$withval", [case "$host_os_name" in linux* | gnu*) CUPS_EXE_FILE_PERM="755" ;; *) CUPS_EXE_FILE_PERM="555" ;; esac]) AC_SUBST(CUPS_EXE_FILE_PERM) dnl Default ConfigFilePerm AC_ARG_WITH(config_file_perm, [ --with-config-file-perm set default ConfigFilePerm value, default=0640], CUPS_CONFIG_FILE_PERM="$withval", [if test "x$host_os_name" = xdarwin; then CUPS_CONFIG_FILE_PERM="644" else CUPS_CONFIG_FILE_PERM="640" fi]) AC_SUBST(CUPS_CONFIG_FILE_PERM) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_CONFIG_FILE_PERM, 0$CUPS_CONFIG_FILE_PERM) dnl Default permissions for cupsd AC_ARG_WITH(cupsd_file_perm, [ --with-cupsd-file-perm set default cupsd permissions, default=0500], CUPS_CUPSD_FILE_PERM="$withval", [case "$host_os_name" in linux* | gnu*) CUPS_CUPSD_FILE_PERM="700" ;; *) CUPS_CUPSD_FILE_PERM="500" ;; esac]) AC_SUBST(CUPS_CUPSD_FILE_PERM) dnl Default LogFilePerm AC_ARG_WITH(log_file_perm, [ --with-log-file-perm set default LogFilePerm value, default=0644], CUPS_LOG_FILE_PERM="$withval", CUPS_LOG_FILE_PERM="644") AC_SUBST(CUPS_LOG_FILE_PERM) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_LOG_FILE_PERM, 0$CUPS_LOG_FILE_PERM) dnl Default FatalErrors AC_ARG_WITH(fatal_errors, [ --with-fatal-errors set default FatalErrors value, default=config], CUPS_FATAL_ERRORS="$withval", CUPS_FATAL_ERRORS="config") AC_SUBST(CUPS_FATAL_ERRORS) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_FATAL_ERRORS, "$CUPS_FATAL_ERRORS") dnl Default LogLevel AC_ARG_WITH(log_level, [ --with-log-level set default LogLevel value, default=warn], CUPS_LOG_LEVEL="$withval", CUPS_LOG_LEVEL="warn") AC_SUBST(CUPS_LOG_LEVEL) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_LOG_LEVEL, "$CUPS_LOG_LEVEL") dnl Default AccessLogLevel AC_ARG_WITH(access_log_level, [ --with-access-log-level set default AccessLogLevel value, default=none], CUPS_ACCESS_LOG_LEVEL="$withval", CUPS_ACCESS_LOG_LEVEL="none") AC_SUBST(CUPS_ACCESS_LOG_LEVEL) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_ACCESS_LOG_LEVEL, "$CUPS_ACCESS_LOG_LEVEL") dnl Default PageLogFormat AC_ARG_ENABLE(page_logging, [ --enable-page-logging enable page_log by default]) if test "x$enable_page_logging" = xyes; then CUPS_PAGE_LOG_FORMAT="" else CUPS_PAGE_LOG_FORMAT="PageLogFormat" fi AC_SUBST(CUPS_PAGE_LOG_FORMAT) dnl Default Browsing AC_ARG_ENABLE(browsing, [ --disable-browsing disable Browsing by default]) if test "x$enable_browsing" = xno; then CUPS_BROWSING="No" AC_DEFINE_UNQUOTED(CUPS_DEFAULT_BROWSING, 0) else CUPS_BROWSING="Yes" AC_DEFINE_UNQUOTED(CUPS_DEFAULT_BROWSING, 1) fi AC_SUBST(CUPS_BROWSING) dnl Default BrowseLocalProtocols AC_ARG_WITH(local_protocols, [ --with-local-protocols set default BrowseLocalProtocols, default=""], default_local_protocols="$withval", default_local_protocols="default") if test x$with_local_protocols != xno; then if test "x$default_local_protocols" = "xdefault"; then if test "x$DNSSD_BACKEND" != "x"; then CUPS_BROWSE_LOCAL_PROTOCOLS="dnssd" else CUPS_BROWSE_LOCAL_PROTOCOLS="" fi else CUPS_BROWSE_LOCAL_PROTOCOLS="$default_local_protocols" fi else CUPS_BROWSE_LOCAL_PROTOCOLS="" fi AC_SUBST(CUPS_BROWSE_LOCAL_PROTOCOLS) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS, "$CUPS_BROWSE_LOCAL_PROTOCOLS") dnl Default DefaultShared AC_ARG_ENABLE(default_shared, [ --disable-default-shared disable DefaultShared by default]) if test "x$enable_default_shared" = xno; then CUPS_DEFAULT_SHARED="No" AC_DEFINE_UNQUOTED(CUPS_DEFAULT_DEFAULT_SHARED, 0) else CUPS_DEFAULT_SHARED="Yes" AC_DEFINE_UNQUOTED(CUPS_DEFAULT_DEFAULT_SHARED, 1) fi AC_SUBST(CUPS_DEFAULT_SHARED) dnl Determine the correct username and group for this OS... AC_ARG_WITH(cups_user, [ --with-cups-user set default user for CUPS], CUPS_USER="$withval", AC_MSG_CHECKING(for default print user) if test x$host_os_name = xdarwin; then if test x`id -u _lp 2>/dev/null` = x; then CUPS_USER="lp"; else CUPS_USER="_lp"; fi AC_MSG_RESULT($CUPS_USER) elif test -f /etc/passwd; then CUPS_USER="" for user in lp lpd guest daemon nobody; do if test "`grep \^${user}: /etc/passwd`" != ""; then CUPS_USER="$user" AC_MSG_RESULT($user) break; fi done if test x$CUPS_USER = x; then CUPS_USER="nobody" AC_MSG_RESULT(not found, using "$CUPS_USER") fi else CUPS_USER="nobody" AC_MSG_RESULT(no password file, using "$CUPS_USER") fi) if test "x$CUPS_USER" = "xroot" -o "x$CUPS_USER" = "x0"; then AC_MSG_ERROR([The default user for CUPS cannot be root!]) fi AC_ARG_WITH(cups_group, [ --with-cups-group set default group for CUPS], CUPS_GROUP="$withval", AC_MSG_CHECKING(for default print group) if test x$host_os_name = xdarwin; then if test x`id -g _lp 2>/dev/null` = x; then CUPS_GROUP="lp"; else CUPS_GROUP="_lp"; fi AC_MSG_RESULT($CUPS_GROUP) elif test -f /etc/group; then GROUP_LIST="_lp lp nobody" CUPS_GROUP="" for group in $GROUP_LIST; do if test "`grep \^${group}: /etc/group`" != ""; then CUPS_GROUP="$group" AC_MSG_RESULT($group) break; fi done if test x$CUPS_GROUP = x; then CUPS_GROUP="nobody" AC_MSG_RESULT(not found, using "$CUPS_GROUP") fi else CUPS_GROUP="nobody" AC_MSG_RESULT(no group file, using "$CUPS_GROUP") fi) if test "x$CUPS_GROUP" = "xroot" -o "x$CUPS_GROUP" = "xwheel" -o "x$CUPS_GROUP" = "x0"; then AC_MSG_ERROR([The default group for CUPS cannot be root!]) fi AC_ARG_WITH(system_groups, [ --with-system-groups set default system groups for CUPS], CUPS_SYSTEM_GROUPS="$withval", if test x$host_os_name = xdarwin; then CUPS_SYSTEM_GROUPS="admin" else AC_MSG_CHECKING(for default system groups) if test -f /etc/group; then CUPS_SYSTEM_GROUPS="" GROUP_LIST="lpadmin sys system root" for group in $GROUP_LIST; do if test "`grep \^${group}: /etc/group`" != ""; then if test "x$CUPS_SYSTEM_GROUPS" = x; then CUPS_SYSTEM_GROUPS="$group" else CUPS_SYSTEM_GROUPS="$CUPS_SYSTEM_GROUPS $group" fi fi done if test "x$CUPS_SYSTEM_GROUPS" = x; then CUPS_SYSTEM_GROUPS="$GROUP_LIST" AC_MSG_RESULT(no groups found, using "$CUPS_SYSTEM_GROUPS") else AC_MSG_RESULT("$CUPS_SYSTEM_GROUPS") fi else CUPS_SYSTEM_GROUPS="$GROUP_LIST" AC_MSG_RESULT(no group file, using "$CUPS_SYSTEM_GROUPS") fi fi) CUPS_PRIMARY_SYSTEM_GROUP="`echo $CUPS_SYSTEM_GROUPS | awk '{print $1}'`" for group in $CUPS_SYSTEM_GROUPS; do if test "x$CUPS_GROUP" = "x$group"; then AC_MSG_ERROR([The default system groups cannot contain the default CUPS group!]) fi done AC_SUBST(CUPS_USER) AC_SUBST(CUPS_GROUP) AC_SUBST(CUPS_SYSTEM_GROUPS) AC_SUBST(CUPS_PRIMARY_SYSTEM_GROUP) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_USER, "$CUPS_USER") AC_DEFINE_UNQUOTED(CUPS_DEFAULT_GROUP, "$CUPS_GROUP") AC_DEFINE_UNQUOTED(CUPS_DEFAULT_SYSTEM_GROUPS, "$CUPS_SYSTEM_GROUPS") dnl Default printcap file... AC_ARG_WITH(printcap, [ --with-printcap set default printcap file], default_printcap="$withval", default_printcap="default") if test x$default_printcap != xno; then if test "x$default_printcap" = "xdefault"; then case $host_os_name in darwin*) if test $host_os_version -ge 90; then CUPS_DEFAULT_PRINTCAP="/Library/Preferences/org.cups.printers.plist" else CUPS_DEFAULT_PRINTCAP="/etc/printcap" fi ;; sunos*) CUPS_DEFAULT_PRINTCAP="/etc/printers.conf" ;; *) CUPS_DEFAULT_PRINTCAP="/etc/printcap" ;; esac else CUPS_DEFAULT_PRINTCAP="$default_printcap" fi else CUPS_DEFAULT_PRINTCAP="" fi AC_SUBST(CUPS_DEFAULT_PRINTCAP) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTCAP, "$CUPS_DEFAULT_PRINTCAP") dnl Default LPD config file... AC_ARG_WITH(lpdconfigfile, [ --with-lpdconfigfile set default LPDConfigFile URI], default_lpdconfigfile="$withval", default_lpdconfigfile="default") if test x$default_lpdconfigfile != xno; then if test "x$default_lpdconfigfile" = "xdefault"; then case $host_os_name in darwin*) CUPS_DEFAULT_LPD_CONFIG_FILE="launchd:///System/Library/LaunchDaemons/org.cups.cups-lpd.plist" ;; *) if test "x$XINETD" != x; then CUPS_DEFAULT_LPD_CONFIG_FILE="xinetd://$XINETD/cups-lpd" else CUPS_DEFAULT_LPD_CONFIG_FILE="" fi ;; esac else CUPS_DEFAULT_LPD_CONFIG_FILE="$default_lpdconfigfile" fi else CUPS_DEFAULT_LPD_CONFIG_FILE="" fi AC_DEFINE_UNQUOTED(CUPS_DEFAULT_LPD_CONFIG_FILE, "$CUPS_DEFAULT_LPD_CONFIG_FILE") AC_SUBST(CUPS_DEFAULT_LPD_CONFIG_FILE) dnl Default SMB config file... AC_ARG_WITH(smbconfigfile, [ --with-smbconfigfile set default SMBConfigFile URI], default_smbconfigfile="$withval", default_smbconfigfile="default") if test x$default_smbconfigfile != xno; then if test "x$default_smbconfigfile" = "xdefault"; then if test -f /etc/smb.conf; then CUPS_DEFAULT_SMB_CONFIG_FILE="samba:///etc/smb.conf" else CUPS_DEFAULT_SMB_CONFIG_FILE="" fi else CUPS_DEFAULT_SMB_CONFIG_FILE="$default_smbconfigfile" fi else CUPS_DEFAULT_SMB_CONFIG_FILE="" fi AC_DEFINE_UNQUOTED(CUPS_DEFAULT_SMB_CONFIG_FILE, "$CUPS_DEFAULT_SMB_CONFIG_FILE") AC_SUBST(CUPS_DEFAULT_SMB_CONFIG_FILE) dnl Default MaxCopies value... AC_ARG_WITH(max-copies, [ --with-max-copies set default max copies value, default=9999 ], CUPS_MAX_COPIES="$withval", CUPS_MAX_COPIES="9999") AC_SUBST(CUPS_MAX_COPIES) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_MAX_COPIES, $CUPS_MAX_COPIES) dnl Default raw printing state AC_ARG_ENABLE(raw_printing, [ --disable-raw-printing do not allow raw printing by default]) if test "x$enable_raw_printing" != xno; then DEFAULT_RAW_PRINTING="" else DEFAULT_RAW_PRINTING="#" fi AC_SUBST(DEFAULT_RAW_PRINTING) dnl Default SNMP options... AC_ARG_WITH(snmp-address, [ --with-snmp-address set SNMP query address, default=auto ], if test "x$withval" = x; then CUPS_SNMP_ADDRESS="" else CUPS_SNMP_ADDRESS="Address $withval" fi, if test "x$host_os_name" = xdarwin; then CUPS_SNMP_ADDRESS="" else CUPS_SNMP_ADDRESS="Address @LOCAL" fi) AC_ARG_WITH(snmp-community, [ --with-snmp-community set SNMP community, default=public ], CUPS_SNMP_COMMUNITY="Community $withval", CUPS_SNMP_COMMUNITY="Community public") AC_SUBST(CUPS_SNMP_ADDRESS) AC_SUBST(CUPS_SNMP_COMMUNITY) dnl New default port definition for IPP... AC_ARG_WITH(ipp-port, [ --with-ipp-port set port number for IPP, default=631 ], DEFAULT_IPP_PORT="$withval", DEFAULT_IPP_PORT="631") AC_SUBST(DEFAULT_IPP_PORT) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_IPP_PORT,$DEFAULT_IPP_PORT) dnl Web interface... AC_ARG_ENABLE(webif, [ --enable-webif enable the web interface by default, default=no for macOS]) case "x$enable_webif" in xno) CUPS_WEBIF=No CUPS_DEFAULT_WEBIF=0 ;; xyes) CUPS_WEBIF=Yes CUPS_DEFAULT_WEBIF=1 ;; *) if test $host_os_name = darwin; then CUPS_WEBIF=No CUPS_DEFAULT_WEBIF=0 else CUPS_WEBIF=Yes CUPS_DEFAULT_WEBIF=1 fi ;; esac AC_SUBST(CUPS_WEBIF) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_WEBIF, $CUPS_DEFAULT_WEBIF) cups-2.2.7/config-scripts/cups-directories.m4000664 000765 000024 00000017225 13255074424 021642 0ustar00msweetstaff000000 000000 dnl dnl Directory stuff for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 1997-2007 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl AC_PREFIX_DEFAULT(/) dnl Fix "prefix" variable if it hasn't been specified... if test "$prefix" = "NONE"; then prefix="/" fi dnl Fix "exec_prefix" variable if it hasn't been specified... if test "$exec_prefix" = "NONE"; then if test "$prefix" = "/"; then exec_prefix="/usr" else exec_prefix="$prefix" fi fi dnl Fix "bindir" variable... if test "$bindir" = "\${exec_prefix}/bin"; then bindir="$exec_prefix/bin" fi AC_DEFINE_UNQUOTED(CUPS_BINDIR, "$bindir") dnl Fix "sbindir" variable... if test "$sbindir" = "\${exec_prefix}/sbin"; then sbindir="$exec_prefix/sbin" fi AC_DEFINE_UNQUOTED(CUPS_SBINDIR, "$sbindir") dnl Fix "sharedstatedir" variable if it hasn't been specified... if test "$sharedstatedir" = "\${prefix}/com" -a "$prefix" = "/"; then sharedstatedir="/usr/com" fi dnl Fix "datarootdir" variable if it hasn't been specified... if test "$datarootdir" = "\${prefix}/share"; then if test "$prefix" = "/"; then datarootdir="/usr/share" else datarootdir="$prefix/share" fi fi dnl Fix "datadir" variable if it hasn't been specified... if test "$datadir" = "\${prefix}/share"; then if test "$prefix" = "/"; then datadir="/usr/share" else datadir="$prefix/share" fi elif test "$datadir" = "\${datarootdir}"; then datadir="$datarootdir" fi dnl Fix "includedir" variable if it hasn't been specified... if test "$includedir" = "\${prefix}/include" -a "$prefix" = "/"; then includedir="/usr/include" fi dnl Fix "localstatedir" variable if it hasn't been specified... if test "$localstatedir" = "\${prefix}/var"; then if test "$prefix" = "/"; then if test "$host_os_name" = darwin; then localstatedir="/private/var" else localstatedir="/var" fi else localstatedir="$prefix/var" fi fi dnl Fix "sysconfdir" variable if it hasn't been specified... if test "$sysconfdir" = "\${prefix}/etc"; then if test "$prefix" = "/"; then if test "$host_os_name" = darwin; then sysconfdir="/private/etc" else sysconfdir="/etc" fi else sysconfdir="$prefix/etc" fi fi dnl Fix "libdir" variable... if test "$libdir" = "\${exec_prefix}/lib"; then case "$host_os_name" in linux*) if test -d /usr/lib64 -a ! -d /usr/lib64/fakeroot; then libdir="$exec_prefix/lib64" fi ;; esac fi dnl Setup private include directory... AC_ARG_WITH(privateinclude, [ --with-privateinclude set path for private include files, default=none],privateinclude="$withval",privateinclude="") if test "x$privateinclude" != x -a "x$privateinclude" != xnone; then PRIVATEINCLUDE="$privateinclude/cups" else privateinclude="" PRIVATEINCLUDE="" fi AC_SUBST(privateinclude) AC_SUBST(PRIVATEINCLUDE) dnl LPD sharing support... AC_ARG_WITH(lpdconfig, [ --with-lpdconfig set URI for LPD config file], LPDCONFIG="$withval", LPDCONFIG="") if test "x$LPDCONFIG" = x; then if test -f /System/Library/LaunchDaemons/org.cups.cups-lpd.plist; then LPDCONFIG="launchd:///System/Library/LaunchDaemons/org.cups.cups-lpd.plist" elif test "x$XINETD" != x; then LPDCONFIG="xinetd://$XINETD/cups-lpd" fi fi if test "x$LPDCONFIG" = xoff; then AC_DEFINE_UNQUOTED(CUPS_DEFAULT_LPD_CONFIG, "") else AC_DEFINE_UNQUOTED(CUPS_DEFAULT_LPD_CONFIG, "$LPDCONFIG") fi dnl SMB sharing support... AC_ARG_WITH(smbconfig, [ --with-smbconfig set URI for Samba config file], SMBCONFIG="$withval", SMBCONFIG="") if test "x$SMBCONFIG" = x; then if test -f /System/Library/LaunchDaemons/smbd.plist; then SMBCONFIG="launchd:///System/Library/LaunchDaemons/smbd.plist" else for dir in /etc /etc/samba /usr/local/etc; do if test -f $dir/smb.conf; then SMBCONFIG="samba://$dir/smb.conf" break fi done fi fi if test "x$SMBCONFIG" = xoff; then AC_DEFINE_UNQUOTED(CUPS_DEFAULT_SMB_CONFIG, "") else AC_DEFINE_UNQUOTED(CUPS_DEFAULT_SMB_CONFIG, "$SMBCONFIG") fi dnl Setup default locations... # Cache data... AC_ARG_WITH(cachedir, [ --with-cachedir set path for cache files],cachedir="$withval",cachedir="") if test x$cachedir = x; then if test "x$host_os_name" = xdarwin; then CUPS_CACHEDIR="$localstatedir/spool/cups/cache" else CUPS_CACHEDIR="$localstatedir/cache/cups" fi else CUPS_CACHEDIR="$cachedir" fi AC_DEFINE_UNQUOTED(CUPS_CACHEDIR, "$CUPS_CACHEDIR") AC_SUBST(CUPS_CACHEDIR) # Data files CUPS_DATADIR="$datadir/cups" AC_DEFINE_UNQUOTED(CUPS_DATADIR, "$datadir/cups") AC_SUBST(CUPS_DATADIR) # Icon directory AC_ARG_WITH(icondir, [ --with-icondir set path for application icons],icondir="$withval",icondir="") if test "x$icondir" = x -a -d /usr/share/icons; then ICONDIR="/usr/share/icons" else ICONDIR="$icondir" fi AC_SUBST(ICONDIR) # Menu directory AC_ARG_WITH(menudir, [ --with-menudir set path for application menus],menudir="$withval",menudir="") if test "x$menudir" = x -a -d /usr/share/applications; then MENUDIR="/usr/share/applications" else MENUDIR="$menudir" fi AC_SUBST(MENUDIR) # Documentation files AC_ARG_WITH(docdir, [ --with-docdir set path for documentation],docdir="$withval",docdir="") if test x$docdir = x; then CUPS_DOCROOT="$datadir/doc/cups" docdir="$datadir/doc/cups" else CUPS_DOCROOT="$docdir" fi AC_DEFINE_UNQUOTED(CUPS_DOCROOT, "$docdir") AC_SUBST(CUPS_DOCROOT) # Fonts AC_ARG_WITH(fontpath, [ --with-fontpath set font path for pstoraster],fontpath="$withval",fontpath="") if test "x$fontpath" = "x"; then CUPS_FONTPATH="$datadir/cups/fonts" else CUPS_FONTPATH="$fontpath" fi AC_SUBST(CUPS_FONTPATH) AC_DEFINE_UNQUOTED(CUPS_FONTPATH, "$CUPS_FONTPATH") # Locale data if test "$localedir" = "\${datarootdir}/locale"; then case "$host_os_name" in linux* | gnu* | *bsd* | darwin*) CUPS_LOCALEDIR="$datarootdir/locale" ;; *) # This is the standard System V location... CUPS_LOCALEDIR="$exec_prefix/lib/locale" ;; esac else CUPS_LOCALEDIR="$localedir" fi AC_DEFINE_UNQUOTED(CUPS_LOCALEDIR, "$CUPS_LOCALEDIR") AC_SUBST(CUPS_LOCALEDIR) # Log files... AC_ARG_WITH(logdir, [ --with-logdir set path for log files],logdir="$withval",logdir="") if test x$logdir = x; then CUPS_LOGDIR="$localstatedir/log/cups" AC_DEFINE_UNQUOTED(CUPS_LOGDIR, "$localstatedir/log/cups") else CUPS_LOGDIR="$logdir" fi AC_DEFINE_UNQUOTED(CUPS_LOGDIR, "$CUPS_LOGDIR") AC_SUBST(CUPS_LOGDIR) # Longer-term spool data CUPS_REQUESTS="$localstatedir/spool/cups" AC_DEFINE_UNQUOTED(CUPS_REQUESTS, "$localstatedir/spool/cups") AC_SUBST(CUPS_REQUESTS) # Server executables... case "$host_os_name" in *bsd* | darwin*) # *BSD and Darwin (macOS) INSTALL_SYSV="" CUPS_SERVERBIN="$exec_prefix/libexec/cups" ;; *) # All others INSTALL_SYSV="install-sysv" CUPS_SERVERBIN="$exec_prefix/lib/cups" ;; esac AC_DEFINE_UNQUOTED(CUPS_SERVERBIN, "$CUPS_SERVERBIN") AC_SUBST(CUPS_SERVERBIN) AC_SUBST(INSTALL_SYSV) # Configuration files CUPS_SERVERROOT="$sysconfdir/cups" AC_DEFINE_UNQUOTED(CUPS_SERVERROOT, "$sysconfdir/cups") AC_SUBST(CUPS_SERVERROOT) # Transient run-time state AC_ARG_WITH(rundir, [ --with-rundir set transient run-time state directory],CUPS_STATEDIR="$withval",[ case "$host_os_name" in darwin*) # Darwin (macOS) CUPS_STATEDIR="$CUPS_SERVERROOT" ;; *) # All others CUPS_STATEDIR="$localstatedir/run/cups" ;; esac]) AC_DEFINE_UNQUOTED(CUPS_STATEDIR, "$CUPS_STATEDIR") AC_SUBST(CUPS_STATEDIR) cups-2.2.7/config-scripts/cups-dnssd.m4000664 000765 000024 00000004755 13255074424 020445 0ustar00msweetstaff000000 000000 dnl dnl DNS Service Discovery (aka Bonjour) stuff for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl AC_ARG_ENABLE(avahi, [ --disable-avahi disable DNS Service Discovery support using Avahi]) AC_ARG_ENABLE(dnssd, [ --disable-dnssd disable DNS Service Discovery support using mDNSResponder]) AC_ARG_WITH(dnssd-libs, [ --with-dnssd-libs set directory for DNS Service Discovery library], LDFLAGS="-L$withval $LDFLAGS" DSOFLAGS="-L$withval $DSOFLAGS",) AC_ARG_WITH(dnssd-includes, [ --with-dnssd-includes set directory for DNS Service Discovery includes], CFLAGS="-I$withval $CFLAGS" CPPFLAGS="-I$withval $CPPFLAGS",) DNSSDLIBS="" DNSSD_BACKEND="" IPPFIND_BIN="" IPPFIND_MAN="" if test "x$PKGCONFIG" != x -a x$enable_avahi != xno -a x$host_os_name != xdarwin; then AC_MSG_CHECKING(for Avahi) if $PKGCONFIG --exists avahi-client; then AC_MSG_RESULT(yes) CFLAGS="$CFLAGS `$PKGCONFIG --cflags avahi-client`" DNSSDLIBS="`$PKGCONFIG --libs avahi-client`" DNSSD_BACKEND="dnssd" IPPFIND_BIN="ippfind" IPPFIND_MAN="ippfind.\$(MAN1EXT)" AC_DEFINE(HAVE_AVAHI) else AC_MSG_RESULT(no) fi fi if test "x$DNSSD_BACKEND" = x -a x$enable_dnssd != xno; then AC_CHECK_HEADER(dns_sd.h, [ case "$host_os_name" in darwin*) # Darwin and macOS... AC_DEFINE(HAVE_DNSSD) DNSSDLIBS="-framework CoreFoundation -framework SystemConfiguration" DNSSD_BACKEND="dnssd" IPPFIND_BIN="ippfind" IPPFIND_MAN="ippfind.\$(MAN1EXT)" ;; *) # All others... AC_MSG_CHECKING(for current version of dns_sd library) SAVELIBS="$LIBS" LIBS="$LIBS -ldns_sd" AC_TRY_COMPILE([#include ], [int constant = kDNSServiceFlagsShareConnection; unsigned char txtRecord[100]; uint8_t valueLen; TXTRecordGetValuePtr(sizeof(txtRecord), txtRecord, "value", &valueLen);], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_DNSSD) DNSSDLIBS="-ldns_sd" DNSSD_BACKEND="dnssd", IPPFIND_BIN="ippfind" IPPFIND_MAN="ippfind.\$(MAN1EXT)" AC_MSG_RESULT(no)) LIBS="$SAVELIBS" ;; esac ]) fi AC_SUBST(DNSSDLIBS) AC_SUBST(DNSSD_BACKEND) AC_SUBST(IPPFIND_BIN) AC_SUBST(IPPFIND_MAN) cups-2.2.7/config-scripts/cups-gssapi.m4000664 000765 000024 00000010156 13255074424 020610 0ustar00msweetstaff000000 000000 dnl dnl GSSAPI/Kerberos library detection for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 2006-2007 by Easy Software Products. dnl dnl This file contains Kerberos support code, copyright 2006 by dnl Jelmer Vernooij. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl AC_ARG_ENABLE(gssapi, [ --disable-gssapi disable GSSAPI support]) LIBGSSAPI="" AC_SUBST(LIBGSSAPI) if test x$enable_gssapi != xno; then AC_PATH_TOOL(KRB5CONFIG, krb5-config) if test "x$KRB5CONFIG" != x; then case "$host_os_name" in darwin) # macOS weak-links to the Kerberos framework... LIBGSSAPI="-weak_framework Kerberos" AC_MSG_CHECKING(for GSS framework) if test -d /System/Library/Frameworks/GSS.framework; then AC_MSG_RESULT(yes) LIBGSSAPI="$LIBGSSAPI -weak_framework GSS" else AC_MSG_RESULT(no) fi ;; sunos*) # Solaris has a non-standard krb5-config, don't use it! AC_CHECK_LIB(gss, gss_display_status, AC_DEFINE(HAVE_GSSAPI, 1, [Whether GSSAPI is available]) CFLAGS="`$KRB5CONFIG --cflags` $CFLAGS" CPPFLAGS="`$KRB5CONFIG --cflags` $CPPFLAGS" LIBGSSAPI="-lgss `$KRB5CONFIG --libs`") ;; *) # Other platforms just ask for GSSAPI CFLAGS="`$KRB5CONFIG --cflags gssapi` $CFLAGS" CPPFLAGS="`$KRB5CONFIG --cflags gssapi` $CPPFLAGS" LIBGSSAPI="`$KRB5CONFIG --libs gssapi`" ;; esac AC_DEFINE(HAVE_GSSAPI, 1, [Whether GSSAPI is available]) else # Check for vendor-specific implementations... case "$host_os_name" in hp-ux*) AC_CHECK_LIB(gss, gss_display_status, AC_DEFINE(HAVE_GSSAPI, 1, [Whether GSSAPI is available]) LIBGSSAPI="-lgss -lgssapi_krb5") ;; sunos*) AC_CHECK_LIB(gss, gss_display_status, AC_DEFINE(HAVE_GSSAPI, 1, [Whether GSSAPI is available]) LIBGSSAPI="-lgss") ;; esac fi if test "x$LIBGSSAPI" != x; then AC_CHECK_HEADER(krb5.h, AC_DEFINE(HAVE_KRB5_H)) if test -d /System/Library/Frameworks/GSS.framework; then AC_CHECK_HEADER(GSS/gssapi.h, AC_DEFINE(HAVE_GSS_GSSAPI_H)) AC_CHECK_HEADER(GSS/gssapi_generic.h, AC_DEFINE(HAVE_GSS_GSSAPI_GENERIC_H)) AC_CHECK_HEADER(GSS/gssapi_spi.h, AC_DEFINE(HAVE_GSS_GSSAPI_SPI_H)) else AC_CHECK_HEADER(gssapi.h, AC_DEFINE(HAVE_GSSAPI_H)) AC_CHECK_HEADER(gssapi/gssapi.h, AC_DEFINE(HAVE_GSSAPI_GSSAPI_H)) fi SAVELIBS="$LIBS" LIBS="$LIBS $LIBGSSAPI" AC_CHECK_FUNC(__ApplePrivate_gss_acquire_cred_ex_f, AC_DEFINE(HAVE_GSS_ACQUIRE_CRED_EX_F)) AC_MSG_CHECKING(for GSS_C_NT_HOSTBASED_SERVICE) if test x$ac_cv_header_gssapi_gssapi_h = xyes; then AC_TRY_COMPILE([ #include ], [ gss_OID foo = GSS_C_NT_HOSTBASED_SERVICE; ], AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) elif test x$ac_cv_header_gss_gssapi_h = xyes; then AC_TRY_COMPILE([ #include ], [ gss_OID foo = GSS_C_NT_HOSTBASED_SERVICE; ], AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) else AC_TRY_COMPILE([ #include ], [ gss_OID foo = GSS_C_NT_HOSTBASED_SERVICE; ], AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) fi LIBS="$SAVELIBS" fi fi dnl Default GSS service name... AC_ARG_WITH(gssservicename, [ --with-gssservicename set default gss service name], default_gssservicename="$withval", default_gssservicename="default") if test x$default_gssservicename != xno; then if test "x$default_gssservicename" = "xdefault"; then CUPS_DEFAULT_GSSSERVICENAME="host" else CUPS_DEFAULT_GSSSERVICENAME="$default_gssservicename" fi else CUPS_DEFAULT_GSSSERVICENAME="" fi AC_SUBST(CUPS_DEFAULT_GSSSERVICENAME) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_GSSSERVICENAME, "$CUPS_DEFAULT_GSSSERVICENAME") cups-2.2.7/config-scripts/cups-largefile.m4000664 000765 000024 00000002423 13255074424 021252 0ustar00msweetstaff000000 000000 dnl dnl Large file support stuff for CUPS. dnl dnl Copyright 2007-2011 by Apple Inc. dnl Copyright 1997-2005 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl dnl Check for largefile support... AC_SYS_LARGEFILE dnl Define largefile options as needed... LARGEFILE="" if test x$enable_largefile != xno; then LARGEFILE="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE" if test x$ac_cv_sys_large_files = x1; then LARGEFILE="$LARGEFILE -D_LARGE_FILES" fi if test x$ac_cv_sys_file_offset_bits = x64; then LARGEFILE="$LARGEFILE -D_FILE_OFFSET_BITS=64" fi fi AC_SUBST(LARGEFILE) dnl Check for "long long" support... AC_CACHE_CHECK(for long long int, ac_cv_c_long_long, [if test "$GCC" = yes; then ac_cv_c_long_long=yes else AC_TRY_COMPILE(,[long long int i;], ac_cv_c_long_long=yes, ac_cv_c_long_long=no) fi]) if test $ac_cv_c_long_long = yes; then AC_DEFINE(HAVE_LONG_LONG) fi AC_CHECK_FUNC(strtoll, AC_DEFINE(HAVE_STRTOLL)) cups-2.2.7/config-scripts/cups-libtool.m4000664 000765 000024 00000003543 13255074424 020770 0ustar00msweetstaff000000 000000 dnl dnl Libtool stuff for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 1997-2005 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl AC_ARG_ENABLE(libtool_unsupported, [ --enable-libtool-unsupported=/path/to/libtool build with libtool (UNSUPPORTED!)], [if test x$enable_libtool_unsupported != xno; then if test x$enable_libtool_unsupported == xyes; then AC_MSG_ERROR([Use --enable-libtool-unsupported=/path/to/libtool.]) fi LIBTOOL="$enable_libtool_unsupported" enable_shared=no echo "WARNING: libtool is not supported or endorsed by Apple Inc." echo " WE DO NOT PROVIDE SUPPORT FOR LIBTOOL PROBLEMS." else LIBTOOL="" fi]) if test x$LIBTOOL != x; then DSO="\$(LIBTOOL) --mode=link --tag=CC ${CC}" DSOXX="\$(LIBTOOL) --mode=link --tag=CXX ${CXX}" LD_CC="\$(LIBTOOL) --mode=link --tag=CC ${CC}" LD_CXX="\$(LIBTOOL) --mode=link --tag=CXX ${CXX}" LIBCUPS="libcups.la" LIBCUPSSTATIC="libcups.la" LIBCUPSCGI="libcupscgi.la" LIBCUPSIMAGE="libcupsimage.la" LIBCUPSMIME="libcupsmime.la" LIBCUPSPPDC="libcupsppdc.la" LIBTOOL_CC="\$(LIBTOOL) --mode=compile --tag=CC" LIBTOOL_CXX="\$(LIBTOOL) --mode=compile --tag=CXX" LIBTOOL_INSTALL="\$(LIBTOOL) --mode=install" LINKCUPS="../cups/\$(LIBCUPS)" LINKCUPSIMAGE="../filter/\$(LIBCUPSIMAGE)" else LD_CC="\$(CC)" LD_CXX="\$(CXX)" LIBTOOL_CC="" LIBTOOL_CXX="" LIBTOOL_INSTALL="" fi AC_SUBST(LD_CC) AC_SUBST(LD_CXX) AC_SUBST(LIBTOOL) AC_SUBST(LIBTOOL_CC) AC_SUBST(LIBTOOL_CXX) AC_SUBST(LIBTOOL_INSTALL) cups-2.2.7/config-scripts/cups-manpages.m4000664 000765 000024 00000003306 13255074424 021114 0ustar00msweetstaff000000 000000 dnl dnl Manpage stuff for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 1997-2006 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl dnl Fix "mandir" variable... if test "$mandir" = "\${datarootdir}/man" -a "$prefix" = "/"; then # New GNU "standards" break previous ones, so make sure we use # the right default location for the operating system... mandir="\${prefix}/man" fi if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then case "$host_os_name" in darwin* | linux* | gnu* | *bsd*) # Darwin, macOS, Linux, GNU HURD, and *BSD mandir="/usr/share/man" AMANDIR="/usr/share/man" PMANDIR="/usr/share/man" ;; *) # All others mandir="/usr/man" AMANDIR="/usr/man" PMANDIR="/usr/man" ;; esac else AMANDIR="$mandir" PMANDIR="$mandir" fi AC_SUBST(AMANDIR) AC_SUBST(PMANDIR) dnl Setup manpage extensions... case "$host_os_name" in sunos*) # Solaris MAN1EXT=1 MAN5EXT=5 MAN7EXT=7 MAN8EXT=1m MAN8DIR=1m ;; linux* | gnu* | darwin*) # Linux, GNU Hurd, and macOS MAN1EXT=1.gz MAN5EXT=5.gz MAN7EXT=7.gz MAN8EXT=8.gz MAN8DIR=8 ;; *) # All others MAN1EXT=1 MAN5EXT=5 MAN7EXT=7 MAN8EXT=8 MAN8DIR=8 ;; esac AC_SUBST(MAN1EXT) AC_SUBST(MAN5EXT) AC_SUBST(MAN7EXT) AC_SUBST(MAN8EXT) AC_SUBST(MAN8DIR) cups-2.2.7/config-scripts/cups-network.m4000664 000765 000024 00000004635 13255074424 021020 0ustar00msweetstaff000000 000000 dnl dnl Networking stuff for CUPS. dnl dnl Copyright 2007-2016 by Apple Inc. dnl Copyright 1997-2005 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl AC_CHECK_HEADER(resolv.h,AC_DEFINE(HAVE_RESOLV_H),,[ #include #include #include #include #include ]) AC_SEARCH_LIBS(socket, socket) AC_SEARCH_LIBS(gethostbyaddr, nsl) AC_SEARCH_LIBS(getifaddrs, nsl, AC_DEFINE(HAVE_GETIFADDRS)) AC_SEARCH_LIBS(hstrerror, nsl socket resolv, AC_DEFINE(HAVE_HSTRERROR)) AC_SEARCH_LIBS(rresvport_af, nsl, AC_DEFINE(HAVE_RRESVPORT_AF)) AC_SEARCH_LIBS(__res_init, resolv bind, AC_DEFINE(HAVE_RES_INIT), AC_SEARCH_LIBS(res_9_init, resolv bind, AC_DEFINE(HAVE_RES_INIT), AC_SEARCH_LIBS(res_init, resolv bind, AC_DEFINE(HAVE_RES_INIT)))) # Tru64 5.1b leaks file descriptors with these functions; disable until # we can come up with a test for this... if test "$host_os_name" != "osf1"; then AC_SEARCH_LIBS(getaddrinfo, nsl, AC_DEFINE(HAVE_GETADDRINFO)) AC_SEARCH_LIBS(getnameinfo, nsl, AC_DEFINE(HAVE_GETNAMEINFO)) fi AC_CHECK_MEMBER(struct sockaddr.sa_len,,, [#include ]) AC_CHECK_HEADER(sys/sockio.h, AC_DEFINE(HAVE_SYS_SOCKIO_H)) CUPS_DEFAULT_DOMAINSOCKET="" dnl Domain socket support... AC_ARG_WITH(domainsocket, [ --with-domainsocket set unix domain socket name], default_domainsocket="$withval", default_domainsocket="") if test x$enable_domainsocket != xno -a x$default_domainsocket != xno; then if test "x$default_domainsocket" = x; then case "$host_os_name" in darwin*) # Darwin and macOS do their own thing... CUPS_DEFAULT_DOMAINSOCKET="$localstatedir/run/cupsd" ;; *) # All others use FHS standard... CUPS_DEFAULT_DOMAINSOCKET="$CUPS_STATEDIR/cups.sock" ;; esac else CUPS_DEFAULT_DOMAINSOCKET="$default_domainsocket" fi CUPS_LISTEN_DOMAINSOCKET="Listen $CUPS_DEFAULT_DOMAINSOCKET" AC_DEFINE_UNQUOTED(CUPS_DEFAULT_DOMAINSOCKET, "$CUPS_DEFAULT_DOMAINSOCKET") else CUPS_LISTEN_DOMAINSOCKET="" fi AC_SUBST(CUPS_DEFAULT_DOMAINSOCKET) AC_SUBST(CUPS_LISTEN_DOMAINSOCKET) cups-2.2.7/config-scripts/cups-opsys.m4000664 000765 000024 00000002366 13255074424 020503 0ustar00msweetstaff000000 000000 dnl dnl Operating system stuff for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 1997-2006 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl dnl Get the build and host platforms and split the host_os value AC_CANONICAL_BUILD AC_CANONICAL_HOST [host_os_name=`echo $host_os | sed -e '1,$s/[0-9.]*$//g'`] [host_os_version=`echo $host_os | sed -e '1,$s/^[^0-9.]*//g' | awk -F. '{print $1 $2}'`] # Linux often does not yield an OS version we can use... if test "x$host_os_version" = x; then host_os_version="0" fi if test "$host_os_name" = darwin -a $host_os_version -lt 120; then AC_MSG_ERROR([Sorry, this version of CUPS requires macOS 10.8 or higher.]) fi dnl Determine whether we are cross-compiling... if test "$build" = "$host"; then # No, build local targets LOCALTARGET="local" else # Yes, don't build local targets LOCALTARGET="" fi AC_SUBST(LOCALTARGET) cups-2.2.7/config-scripts/cups-pam.m4000664 000765 000024 00000004505 13255074424 020100 0ustar00msweetstaff000000 000000 dnl dnl PAM stuff for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 1997-2005 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl AC_ARG_ENABLE(pam, [ --disable-pam disable PAM support]) AC_ARG_WITH(pam_module, [ --with-pam-module set the PAM module to use]) PAMDIR="" PAMFILE="pam.std" PAMLIBS="" PAMMOD="pam_unknown.so" PAMMODAUTH="pam_unknown.so" if test x$enable_pam != xno; then SAVELIBS="$LIBS" AC_CHECK_LIB(dl,dlopen) AC_CHECK_LIB(pam,pam_start) AC_CHECK_LIB(pam,pam_set_item,AC_DEFINE(HAVE_PAM_SET_ITEM)) AC_CHECK_LIB(pam,pam_setcred,AC_DEFINE(HAVE_PAM_SETCRED)) AC_CHECK_HEADER(security/pam_appl.h) if test x$ac_cv_header_security_pam_appl_h != xyes; then AC_CHECK_HEADER(pam/pam_appl.h, AC_DEFINE(HAVE_PAM_PAM_APPL_H)) fi if test x$ac_cv_lib_pam_pam_start != xno; then # Set the necessary libraries for PAM... if test x$ac_cv_lib_dl_dlopen != xno; then PAMLIBS="-lpam -ldl" else PAMLIBS="-lpam" fi # Find the PAM configuration directory, if any... for dir in /private/etc/pam.d /etc/pam.d; do if test -d $dir; then PAMDIR=$dir break; fi done fi LIBS="$SAVELIBS" case "$host_os_name" in darwin*) # Darwin/macOS if test "x$with_pam_module" != x; then PAMFILE="pam.$with_pam_module" elif test -f /usr/lib/pam/pam_opendirectory.so.2; then PAMFILE="pam.opendirectory" else PAMFILE="pam.securityserver" fi ;; *) # All others; this test might need to be updated # as Linux distributors move things around... if test "x$with_pam_module" != x; then PAMMOD="pam_${with_pam_module}.so" elif test -f /lib/security/pam_unix2.so; then PAMMOD="pam_unix2.so" elif test -f /lib/security/pam_unix.so; then PAMMOD="pam_unix.so" fi if test "x$PAMMOD" = xpam_unix.so; then PAMMODAUTH="$PAMMOD shadow nodelay" else PAMMODAUTH="$PAMMOD nodelay" fi ;; esac fi AC_SUBST(PAMDIR) AC_SUBST(PAMFILE) AC_SUBST(PAMLIBS) AC_SUBST(PAMMOD) AC_SUBST(PAMMODAUTH) cups-2.2.7/config-scripts/cups-poll.m4000664 000765 000024 00000001204 13255074424 020262 0ustar00msweetstaff000000 000000 dnl dnl Select/poll stuff for CUPS. dnl dnl Copyright 2007-2011 by Apple Inc. dnl Copyright 2006 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl AC_CHECK_FUNC(poll, AC_DEFINE(HAVE_POLL)) AC_CHECK_FUNC(epoll_create, AC_DEFINE(HAVE_EPOLL)) AC_CHECK_FUNC(kqueue, AC_DEFINE(HAVE_KQUEUE)) cups-2.2.7/config-scripts/cups-scripting.m4000664 000765 000024 00000004275 13255074424 021331 0ustar00msweetstaff000000 000000 dnl dnl Scripting configuration stuff for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 1997-2006 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl dnl Do we have Java? AC_ARG_WITH(java, [ --with-java set Java interpreter for web interfaces ], CUPS_JAVA="$withval", CUPS_JAVA="auto") if test "x$CUPS_JAVA" = xauto; then AC_PATH_PROG(JAVA,java) CUPS_JAVA="$JAVA" elif test "x$CUPS_JAVA" = xno; then CUPS_JAVA="" fi AC_DEFINE_UNQUOTED(CUPS_JAVA, "$CUPS_JAVA") if test "x$CUPS_JAVA" != x; then AC_DEFINE(HAVE_JAVA) fi dnl Do we have Perl? AC_ARG_WITH(perl, [ --with-perl set Perl interpreter for web interfaces ], CUPS_PERL="$withval", CUPS_PERL="auto") if test "x$CUPS_PERL" = xauto; then AC_PATH_PROG(PERL,perl) CUPS_PERL="$PERL" elif test "x$CUPS_PERL" = xno; then CUPS_PERL="" fi AC_DEFINE_UNQUOTED(CUPS_PERL, "$CUPS_PERL") if test "x$CUPS_PERL" != x; then AC_DEFINE(HAVE_PERL) fi dnl Do we have PHP? AC_ARG_WITH(php, [ --with-php set PHP interpreter for web interfaces ], CUPS_PHP="$withval", CUPS_PHP="auto") if test "x$CUPS_PHP" = xauto; then AC_PATH_PROG(PHPCGI,php-cgi) if test "x$PHPCGI" = x; then AC_PATH_PROG(PHP,php) CUPS_PHP="$PHP" else CUPS_PHP="$PHPCGI" fi elif test "x$CUPS_PHP" = xno; then CUPS_PHP="" fi AC_DEFINE_UNQUOTED(CUPS_PHP, "$CUPS_PHP") if test "x$CUPS_PHP" = x; then CUPS_PHP="no" else AC_DEFINE(HAVE_PHP) fi dnl Do we have Python? AC_ARG_WITH(python, [ --with-python set Python interpreter for web interfaces ], CUPS_PYTHON="$withval", CUPS_PYTHON="auto") if test "x$CUPS_PYTHON" = xauto; then AC_PATH_PROG(PYTHON,python) CUPS_PYTHON="$PYTHON" elif test "x$CUPS_PYTHON" = xno; then CUPS_PYTHON="" fi AC_DEFINE_UNQUOTED(CUPS_PYTHON, "$CUPS_PYTHON") if test "x$CUPS_PYTHON" != x; then AC_DEFINE(HAVE_PYTHON) fi cups-2.2.7/config-scripts/cups-sharedlibs.m4000664 000765 000024 00000010037 13255074424 021440 0ustar00msweetstaff000000 000000 dnl dnl Shared library support for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 1997-2005 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl PICFLAG=1 DSOFLAGS="${DSOFLAGS:=}" AC_ARG_ENABLE(shared, [ --disable-shared do not create shared libraries]) cupsbase="cups" LIBCUPSBASE="lib$cupsbase" LIBCUPSSTATIC="lib$cupsbase.a" if test x$enable_shared != xno; then case "$host_os_name" in sunos*) LIBCUPS="lib$cupsbase.so.2" LIBCUPSCGI="libcupscgi.so.1" LIBCUPSIMAGE="libcupsimage.so.2" LIBCUPSMIME="libcupsmime.so.1" LIBCUPSPPDC="libcupsppdc.so.1" DSO="\$(CC)" DSOXX="\$(CXX)" DSOFLAGS="$DSOFLAGS -Wl,-h\`basename \$@\` -G \$(OPTIM)" ;; linux* | gnu* | *bsd*) LIBCUPS="lib$cupsbase.so.2" LIBCUPSCGI="libcupscgi.so.1" LIBCUPSIMAGE="libcupsimage.so.2" LIBCUPSMIME="libcupsmime.so.1" LIBCUPSPPDC="libcupsppdc.so.1" DSO="\$(CC)" DSOXX="\$(CXX)" DSOFLAGS="$DSOFLAGS -Wl,-soname,\`basename \$@\` -shared \$(OPTIM)" ;; darwin*) LIBCUPS="lib$cupsbase.2.dylib" LIBCUPSCGI="libcupscgi.1.dylib" LIBCUPSIMAGE="libcupsimage.2.dylib" LIBCUPSMIME="libcupsmime.1.dylib" LIBCUPSPPDC="libcupsppdc.1.dylib" DSO="\$(CC)" DSOXX="\$(CXX)" DSOFLAGS="$DSOFLAGS -dynamiclib -single_module -lc" ;; *) echo "Warning: shared libraries may not be supported. Trying -shared" echo " option with compiler." LIBCUPS="lib$cupsbase.so.2" LIBCUPSCGI="libcupscgi.so.1" LIBCUPSIMAGE="libcupsimage.so.2" LIBCUPSMIME="libcupsmime.so.1" LIBCUPSPPDC="libcupsppdc.so.1" DSO="\$(CC)" DSOXX="\$(CXX)" DSOFLAGS="$DSOFLAGS -Wl,-soname,\`basename \$@\` -shared \$(OPTIM)" ;; esac else PICFLAG=0 LIBCUPS="lib$cupsbase.a" LIBCUPSCGI="libcupscgi.a" LIBCUPSIMAGE="libcupsimage.a" LIBCUPSMIME="libcupsmime.a" LIBCUPSPPDC="libcupsppdc.a" DSO=":" DSOXX=":" fi AC_SUBST(DSO) AC_SUBST(DSOXX) AC_SUBST(DSOFLAGS) AC_SUBST(LIBCUPS) AC_SUBST(LIBCUPSBASE) AC_SUBST(LIBCUPSCGI) AC_SUBST(LIBCUPSIMAGE) AC_SUBST(LIBCUPSMIME) AC_SUBST(LIBCUPSPPDC) AC_SUBST(LIBCUPSSTATIC) if test x$enable_shared = xno; then LINKCUPS="../cups/lib$cupsbase.a" LINKCUPSIMAGE="../filter/libcupsimage.a" EXTLINKCUPS="-lcups" EXTLINKCUPSIMAGE="-lcupsimage" else LINKCUPS="-l${cupsbase}" LINKCUPSIMAGE="-lcupsimage" EXTLINKCUPS="-lcups" EXTLINKCUPSIMAGE="-lcupsimage" fi AC_SUBST(EXTLINKCUPS) AC_SUBST(EXTLINKCUPSIMAGE) AC_SUBST(LINKCUPS) AC_SUBST(LINKCUPSIMAGE) dnl Update libraries for DSOs... EXPORT_LDFLAGS="" if test "$DSO" != ":"; then # When using DSOs the image libraries are linked to libcupsimage.so # rather than to the executables. This makes things smaller if you # are using any static libraries, and it also allows us to distribute # a single DSO rather than a bunch... DSOLIBS="\$(LIBZ)" IMGLIBS="" # Tell the run-time linkers where to find a DSO. Some platforms # need this option, even when the library is installed in a # standard location... case $host_os_name in sunos*) # Solaris... if test $exec_prefix != /usr; then DSOFLAGS="-R$libdir $DSOFLAGS" LDFLAGS="$LDFLAGS -R$libdir" EXPORT_LDFLAGS="-R$libdir" fi ;; *bsd*) # *BSD... if test $exec_prefix != /usr; then DSOFLAGS="-Wl,-R$libdir $DSOFLAGS" LDFLAGS="$LDFLAGS -Wl,-R$libdir" EXPORT_LDFLAGS="-Wl,-R$libdir" fi ;; linux* | gnu*) # Linux, and HURD... if test $exec_prefix != /usr; then DSOFLAGS="-Wl,-rpath,$libdir $DSOFLAGS" LDFLAGS="$LDFLAGS -Wl,-rpath,$libdir" EXPORT_LDFLAGS="-Wl,-rpath,$libdir" fi ;; esac else DSOLIBS="" IMGLIBS="\$(LIBZ)" fi AC_SUBST(DSOLIBS) AC_SUBST(IMGLIBS) AC_SUBST(EXPORT_LDFLAGS) cups-2.2.7/config-scripts/cups-ssl.m4000664 000765 000024 00000006562 13255074424 020131 0ustar00msweetstaff000000 000000 dnl dnl TLS stuff for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 1997-2007 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl AC_ARG_ENABLE(ssl, [ --disable-ssl disable SSL/TLS support]) AC_ARG_ENABLE(cdsassl, [ --enable-cdsassl use CDSA for SSL/TLS support, default=first]) AC_ARG_ENABLE(gnutls, [ --enable-gnutls use GNU TLS for SSL/TLS support, default=second]) SSLFLAGS="" SSLLIBS="" have_ssl=0 CUPS_SERVERKEYCHAIN="" if test x$enable_ssl != xno; then dnl Look for CDSA... if test $have_ssl = 0 -a "x$enable_cdsassl" != "xno"; then if test $host_os_name = darwin; then AC_CHECK_HEADER(Security/SecureTransport.h, [ have_ssl=1 AC_DEFINE(HAVE_SSL) AC_DEFINE(HAVE_CDSASSL) CUPS_SERVERKEYCHAIN="/Library/Keychains/System.keychain" dnl Check for the various security headers... AC_CHECK_HEADER(Security/SecureTransportPriv.h, AC_DEFINE(HAVE_SECURETRANSPORTPRIV_H)) AC_CHECK_HEADER(Security/SecCertificate.h, AC_DEFINE(HAVE_SECCERTIFICATE_H)) AC_CHECK_HEADER(Security/SecItem.h, AC_DEFINE(HAVE_SECITEM_H)) AC_CHECK_HEADER(Security/SecItemPriv.h, AC_DEFINE(HAVE_SECITEMPRIV_H),, [#include ]) AC_CHECK_HEADER(Security/SecPolicy.h, AC_DEFINE(HAVE_SECPOLICY_H)) AC_CHECK_HEADER(Security/SecPolicyPriv.h, AC_DEFINE(HAVE_SECPOLICYPRIV_H)) AC_CHECK_HEADER(Security/SecBasePriv.h, AC_DEFINE(HAVE_SECBASEPRIV_H)) AC_CHECK_HEADER(Security/SecIdentitySearchPriv.h, AC_DEFINE(HAVE_SECIDENTITYSEARCHPRIV_H)) AC_DEFINE(HAVE_CSSMERRORSTRING) AC_DEFINE(HAVE_SECKEYCHAINOPEN)]) if test $host_os_version -ge 150; then AC_DEFINE(HAVE_SSLSETENABLEDCIPHERS) fi fi fi dnl Then look for GNU TLS... if test $have_ssl = 0 -a "x$enable_gnutls" != "xno" -a "x$PKGCONFIG" != x; then AC_PATH_TOOL(LIBGNUTLSCONFIG,libgnutls-config) if $PKGCONFIG --exists gnutls; then have_ssl=1 SSLLIBS=`$PKGCONFIG --libs gnutls` SSLFLAGS=`$PKGCONFIG --cflags gnutls` AC_DEFINE(HAVE_SSL) AC_DEFINE(HAVE_GNUTLS) elif test "x$LIBGNUTLSCONFIG" != x; then have_ssl=1 SSLLIBS=`$LIBGNUTLSCONFIG --libs` SSLFLAGS=`$LIBGNUTLSCONFIG --cflags` AC_DEFINE(HAVE_SSL) AC_DEFINE(HAVE_GNUTLS) fi if test $have_ssl = 1; then CUPS_SERVERKEYCHAIN="ssl" SAVELIBS="$LIBS" LIBS="$LIBS $SSLLIBS" AC_CHECK_FUNC(gnutls_transport_set_pull_timeout_function, AC_DEFINE(HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION)) AC_CHECK_FUNC(gnutls_priority_set_direct, AC_DEFINE(HAVE_GNUTLS_PRIORITY_SET_DIRECT)) LIBS="$SAVELIBS" fi fi fi IPPALIASES="http" if test $have_ssl = 1; then AC_MSG_RESULT([ Using SSLLIBS="$SSLLIBS"]) AC_MSG_RESULT([ Using SSLFLAGS="$SSLFLAGS"]) IPPALIASES="http https ipps" elif test x$enable_cdsa = xyes -o x$enable_gnutls = xyes; then AC_MSG_ERROR([Unable to enable SSL support.]) fi AC_SUBST(CUPS_SERVERKEYCHAIN) AC_SUBST(IPPALIASES) AC_SUBST(SSLFLAGS) AC_SUBST(SSLLIBS) EXPORT_SSLLIBS="$SSLLIBS" AC_SUBST(EXPORT_SSLLIBS) cups-2.2.7/config-scripts/cups-startup.m4000664 000765 000024 00000013362 13255074424 021026 0ustar00msweetstaff000000 000000 dnl dnl Launch-on-demand/startup stuff for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 1997-2005 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl ONDEMANDFLAGS="" ONDEMANDLIBS="" AC_SUBST(ONDEMANDFLAGS) AC_SUBST(ONDEMANDLIBS) dnl Launchd is used on macOS/Darwin... AC_ARG_ENABLE(launchd, [ --disable-launchd disable launchd support]) LAUNCHD_DIR="" AC_SUBST(LAUNCHD_DIR) if test x$enable_launchd != xno; then AC_CHECK_FUNC(launch_activate_socket, [ AC_DEFINE(HAVE_LAUNCHD) AC_DEFINE(HAVE_ONDEMAND)]) AC_CHECK_HEADER(launch.h, AC_DEFINE(HAVE_LAUNCH_H)) if test "$host_os_name" = darwin; then LAUNCHD_DIR="/System/Library/LaunchDaemons" # liblaunch is already part of libSystem fi fi dnl Systemd is used on Linux... AC_ARG_ENABLE(systemd, [ --disable-systemd disable systemd support]) AC_ARG_WITH(systemd, [ --with-systemd set directory for systemd service files], SYSTEMD_DIR="$withval", SYSTEMD_DIR="") AC_SUBST(SYSTEMD_DIR) if test x$enable_systemd != xno; then if test "x$PKGCONFIG" = x; then if test x$enable_systemd = xyes; then AC_MSG_ERROR(Need pkg-config to enable systemd support.) fi else have_systemd=no AC_MSG_CHECKING(for libsystemd) if $PKGCONFIG --exists libsystemd; then AC_MSG_RESULT(yes) have_systemd=yes ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd` ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd` elif $PKGCONFIG --exists libsystemd-daemon; then AC_MSG_RESULT(yes - legacy) have_systemd=yes ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd-daemon` ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd-daemon` if $PKGCONFIG --exists libsystemd-journal; then ONDEMANDFLAGS="$ONDEMANDFLAGS `$PKGCONFIG --cflags libsystemd-journal`" ONDEMANDLIBS="$ONDEMANDLIBS `$PKGCONFIG --libs libsystemd-journal`" fi else AC_MSG_RESULT(no) fi if test $have_systemd = yes; then AC_DEFINE(HAVE_SYSTEMD) AC_DEFINE(HAVE_ONDEMAND) AC_CHECK_HEADER(systemd/sd-journal.h,AC_DEFINE(HAVE_SYSTEMD_SD_JOURNAL_H)) if test "x$SYSTEMD_DIR" = x; then SYSTEMD_DIR="`$PKGCONFIG --variable=systemdsystemunitdir systemd`" fi fi fi fi dnl Upstart is also used on Linux (e.g., Chrome OS) AC_ARG_ENABLE(upstart, [ --enable-upstart enable upstart support]) if test "x$enable_upstart" = "xyes"; then if test "x$have_systemd" = "xyes"; then AC_MSG_ERROR(Cannot support both systemd and upstart.) fi AC_DEFINE(HAVE_UPSTART) AC_DEFINE(HAVE_ONDEMAND) fi dnl Solaris uses smf SMFMANIFESTDIR="" AC_SUBST(SMFMANIFESTDIR) AC_ARG_WITH(smfmanifestdir, [ --with-smfmanifestdir set path for Solaris SMF manifest],SMFMANIFESTDIR="$withval") dnl Use init on other platforms... AC_ARG_WITH(rcdir, [ --with-rcdir set path for rc scripts],rcdir="$withval",rcdir="") AC_ARG_WITH(rclevels, [ --with-rclevels set run levels for rc scripts],rclevels="$withval",rclevels="2 3 5") AC_ARG_WITH(rcstart, [ --with-rcstart set start number for rc scripts],rcstart="$withval",rcstart="") AC_ARG_WITH(rcstop, [ --with-rcstop set stop number for rc scripts],rcstop="$withval",rcstop="") if test x$rcdir = x; then if test x$LAUNCHD_DIR = x -a x$SYSTEMD_DIR = x -a x$SMFMANIFESTDIR = x; then # Fall back on "init", the original service startup interface... if test -d /sbin/init.d; then # SuSE rcdir="/sbin/init.d" elif test -d /etc/init.d; then # Others rcdir="/etc" else # RedHat, NetBSD rcdir="/etc/rc.d" fi else rcdir="no" fi fi if test "x$rcstart" = x; then case "$host_os_name" in linux* | gnu*) # Linux rcstart="81" ;; sunos*) # Solaris rcstart="81" ;; *) # Others rcstart="99" ;; esac fi if test "x$rcstop" = x; then case "$host_os_name" in linux* | gnu*) # Linux rcstop="36" ;; *) # Others rcstop="00" ;; esac fi INITDIR="" INITDDIR="" RCLEVELS="$rclevels" RCSTART="$rcstart" RCSTOP="$rcstop" AC_SUBST(INITDIR) AC_SUBST(INITDDIR) AC_SUBST(RCLEVELS) AC_SUBST(RCSTART) AC_SUBST(RCSTOP) if test "x$rcdir" != xno; then if test "x$rclevels" = x; then INITDDIR="$rcdir" else INITDIR="$rcdir" fi fi dnl Xinetd support... AC_ARG_WITH(xinetd, [ --with-xinetd set path for xinetd config files],xinetd="$withval",xinetd="") XINETD="" AC_SUBST(XINETD) if test "x$xinetd" = x; then if test ! -x /sbin/launchd; then for dir in /etc/xinetd.d /usr/local/etc/xinetd.d; do if test -d $dir; then XINETD="$dir" break fi done fi elif test "x$xinetd" != xno; then XINETD="$xinetd" fi cups-2.2.7/config-scripts/cups-threads.m4000664 000765 000024 00000002730 13255074424 020753 0ustar00msweetstaff000000 000000 dnl dnl Threading stuff for CUPS. dnl dnl Copyright 2007-2017 by Apple Inc. dnl Copyright 1997-2005 by Easy Software Products, all rights reserved. dnl dnl These coded instructions, statements, and computer programs are the dnl property of Apple Inc. and are protected by Federal copyright dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" dnl which should have been included with this file. If this file is dnl missing or damaged, see the license at "http://www.cups.org/". dnl AC_ARG_ENABLE(threads, [ --disable-threads disable multi-threading support]) have_pthread=no PTHREAD_FLAGS="" if test "x$enable_threads" != xno; then AC_CHECK_HEADER(pthread.h, AC_DEFINE(HAVE_PTHREAD_H)) if test x$ac_cv_header_pthread_h = xyes; then dnl Check various threading options for the platforms we support for flag in -lpthreads -lpthread -pthread; do AC_MSG_CHECKING([for pthread_create using $flag]) SAVELIBS="$LIBS" LIBS="$flag $LIBS" AC_TRY_LINK([#include ], [pthread_create(0, 0, 0, 0);], have_pthread=yes, LIBS="$SAVELIBS") AC_MSG_RESULT([$have_pthread]) if test $have_pthread = yes; then PTHREAD_FLAGS="-D_THREAD_SAFE -D_REENTRANT" # Solaris requires -D_POSIX_PTHREAD_SEMANTICS to # be POSIX-compliant... :( if test $host_os_name = sunos; then PTHREAD_FLAGS="$PTHREAD_FLAGS -D_POSIX_PTHREAD_SEMANTICS" fi break fi done fi fi AC_SUBST(PTHREAD_FLAGS) cups-2.2.7/conf/cups-files.conf.in000664 000765 000024 00000006043 13255074424 017431 0ustar00msweetstaff000000 000000 # # File/directory/user/group configuration file for the CUPS scheduler. # See "man cups-files.conf" for a complete description of this file. # # List of events that are considered fatal errors for the scheduler... #FatalErrors @CUPS_FATAL_ERRORS@ # Do we call fsync() after writing configuration or status files? #SyncOnClose No # Default user and group for filters/backends/helper programs; this cannot be # any user or group that resolves to ID 0 for security reasons... #User @CUPS_USER@ #Group @CUPS_GROUP@ # Administrator user group, used to match @SYSTEM in cupsd.conf policy rules... # This cannot contain the Group value for security reasons... SystemGroup @CUPS_SYSTEM_GROUPS@ @CUPS_SYSTEM_AUTHKEY@ # User that is substituted for unauthenticated (remote) root accesses... #RemoteRoot remroot # Do we allow file: device URIs other than to /dev/null? #FileDevice No # Permissions for configuration and log files... #ConfigFilePerm 0@CUPS_CONFIG_FILE_PERM@ #LogFilePerm 0@CUPS_LOG_FILE_PERM@ # Location of the file logging all access to the scheduler; may be the name # "syslog". If not an absolute path, the value of ServerRoot is used as the # root directory. Also see the "AccessLogLevel" directive in cupsd.conf. AccessLog @CUPS_LOGDIR@/access_log # Location of cache files used by the scheduler... #CacheDir @CUPS_CACHEDIR@ # Location of data files used by the scheduler... #DataDir @CUPS_DATADIR@ # Location of the static web content served by the scheduler... #DocumentRoot @CUPS_DOCROOT@ # Location of the file logging all messages produced by the scheduler and any # helper programs; may be the name "syslog". If not an absolute path, the value # of ServerRoot is used as the root directory. Also see the "LogLevel" # directive in cupsd.conf. ErrorLog @CUPS_LOGDIR@/error_log # Location of fonts used by older print filters... #FontPath @CUPS_FONTPATH@ # Location of LPD configuration #LPDConfigFile @CUPS_DEFAULT_LPD_CONFIG_FILE@ # Location of the file logging all pages printed by the scheduler and any # helper programs; may be the name "syslog". If not an absolute path, the value # of ServerRoot is used as the root directory. Also see the "PageLogFormat" # directive in cupsd.conf. PageLog @CUPS_LOGDIR@/page_log # Location of the file listing all of the local printers... #Printcap @CUPS_DEFAULT_PRINTCAP@ # Format of the Printcap file... #PrintcapFormat bsd #PrintcapFormat plist #PrintcapFormat solaris # Location of all spool files... #RequestRoot @CUPS_REQUESTS@ # Location of helper programs... #ServerBin @CUPS_SERVERBIN@ # SSL/TLS keychain for the scheduler... #ServerKeychain @CUPS_SERVERKEYCHAIN@ # Location of other configuration files... #ServerRoot @CUPS_SERVERROOT@ # Location of Samba configuration file... #SMBConfigFile @CUPS_DEFAULT_SMB_CONFIG_FILE@ # Location of scheduler state files... #StateDir @CUPS_STATEDIR@ # Location of scheduler/helper temporary files. This directory is emptied on # scheduler startup and cannot be one of the standard (public) temporary # directory locations for security reasons... #TempDir @CUPS_REQUESTS@/tmp cups-2.2.7/conf/cupsd.conf.in000664 000765 000024 00000014557 13255074424 016506 0ustar00msweetstaff000000 000000 # # Configuration file for the CUPS scheduler. See "man cupsd.conf" for a # complete description of this file. # # Log general information in error_log - change "@CUPS_LOG_LEVEL@" to "debug" # for troubleshooting... LogLevel @CUPS_LOG_LEVEL@ @CUPS_PAGE_LOG_FORMAT@ # Only listen for connections from the local machine. Listen localhost:@DEFAULT_IPP_PORT@ @CUPS_LISTEN_DOMAINSOCKET@ # Show shared printers on the local network. Browsing On BrowseLocalProtocols @CUPS_BROWSE_LOCAL_PROTOCOLS@ # Default authentication type, when authentication is required... DefaultAuthType Basic # Web interface setting... WebInterface @CUPS_WEBIF@ # Restrict access to the server... Order allow,deny # Restrict access to the admin pages... Order allow,deny # Restrict access to configuration files... AuthType Default Require user @SYSTEM Order allow,deny # Restrict access to log files... AuthType Default Require user @SYSTEM Order allow,deny # Set the default printer/job policies... # Job/subscription privacy... JobPrivateAccess default JobPrivateValues default SubscriptionPrivateAccess default SubscriptionPrivateValues default # Job-related operations must be done by the owner or an administrator... Order deny,allow Require user @OWNER @SYSTEM Order deny,allow # All administration operations require an administrator to authenticate... AuthType Default Require user @SYSTEM Order deny,allow # All printer operations require a printer operator to authenticate... AuthType Default Require user @CUPS_DEFAULT_PRINTOPERATOR_AUTH@ Order deny,allow # Only the owner or an administrator can cancel or authenticate a job... Require user @OWNER @CUPS_DEFAULT_PRINTOPERATOR_AUTH@ Order deny,allow Order deny,allow # Set the authenticated printer/job policies... # Job/subscription privacy... JobPrivateAccess default JobPrivateValues default SubscriptionPrivateAccess default SubscriptionPrivateValues default # Job-related operations must be done by the owner or an administrator... AuthType Default Order deny,allow AuthType Default Require user @OWNER @SYSTEM Order deny,allow # All administration operations require an administrator to authenticate... AuthType Default Require user @SYSTEM Order deny,allow # All printer operations require a printer operator to authenticate... AuthType Default Require user @CUPS_DEFAULT_PRINTOPERATOR_AUTH@ Order deny,allow # Only the owner or an administrator can cancel or authenticate a job... AuthType Default Require user @OWNER @CUPS_DEFAULT_PRINTOPERATOR_AUTH@ Order deny,allow Order deny,allow # Set the kerberized printer/job policies... # Job/subscription privacy... JobPrivateAccess default JobPrivateValues default SubscriptionPrivateAccess default SubscriptionPrivateValues default # Job-related operations must be done by the owner or an administrator... AuthType Negotiate Order deny,allow AuthType Negotiate Require user @OWNER @SYSTEM Order deny,allow # All administration operations require an administrator to authenticate... AuthType Default Require user @SYSTEM Order deny,allow # All printer operations require a printer operator to authenticate... AuthType Default Require user @CUPS_DEFAULT_PRINTOPERATOR_AUTH@ Order deny,allow # Only the owner or an administrator can cancel or authenticate a job... AuthType Negotiate Require user @OWNER @CUPS_DEFAULT_PRINTOPERATOR_AUTH@ Order deny,allow Order deny,allow cups-2.2.7/conf/Makefile000664 000765 000024 00000004476 13255074424 015553 0ustar00msweetstaff000000 000000 # # Configuration file makefile for CUPS. # # Copyright 2007-2015 by Apple Inc. # Copyright 1993-2006 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include ../Makedefs # # Config files... # KEEP = cups-files.conf cupsd.conf snmp.conf REPLACE = mime.convs mime.types # # Make everything... # all: # # Make library targets... # libs: # # Make unit tests... # unittests: # # Clean all config and object files... # clean: # # Dummy depend... # depend: # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: for file in $(KEEP); do \ if test -r $(SERVERROOT)/$$file ; then \ $(INSTALL_CONFIG) -g $(CUPS_GROUP) $$file $(SERVERROOT)/$$file.N ; \ else \ $(INSTALL_CONFIG) -g $(CUPS_GROUP) $$file $(SERVERROOT) ; \ fi ; \ $(INSTALL_CONFIG) -g $(CUPS_GROUP) $$file $(SERVERROOT)/$$file.default; \ done $(INSTALL_DIR) -m 755 $(DATADIR)/mime for file in $(REPLACE); do \ if test -r $(DATADIR)/mime/$$file ; then \ $(MV) $(DATADIR)/mime/$$file $(DATADIR)/mime/$$file.O ; \ fi ; \ if test -r $(SERVERROOT)/$$file ; then \ $(MV) $(SERVERROOT)/$$file $(DATADIR)/mime/$$file.O ; \ fi ; \ $(INSTALL_DATA) $$file $(DATADIR)/mime ; \ done -if test x$(PAMDIR) != x; then \ $(INSTALL_DIR) -m 755 $(BUILDROOT)$(PAMDIR); \ if test -r $(BUILDROOT)$(PAMDIR)/cups ; then \ $(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups.N ; \ else \ $(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups ; \ fi ; \ fi # # Install programs... # install-exec: # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Uninstall files... # uninstall: for file in $(KEEP) $(REPLACE) cupsd.conf.default; do \ $(RM) $(SERVERROOT)/$$file; \ done -$(RMDIR) $(SERVERROOT) for file in $(REPLACE); do \ $(RM) $(DATADIR)/mime/$$file; \ done -$(RMDIR) $(DATADIR)/mime -if test x$(PAMDIR) != x; then \ $(RM) $(BUILDROOT)$(PAMDIR)/cups; \ $(RMDIR) $(BUILDROOT)$(PAMDIR); \ fi cups-2.2.7/conf/mime.convs.in000664 000765 000024 00000003405 13255074424 016510 0ustar00msweetstaff000000 000000 # # DO NOT EDIT THIS FILE, AS IT IS OVERWRITTEN WHEN YOU INSTALL NEW # VERSIONS OF CUPS. Instead, create a "local.convs" file that # reflects your local configuration changes. # # Base MIME conversions file for CUPS. # # Copyright 2007-2016 by Apple Inc. # Copyright 1997-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # ######################################################################## # # Format of Lines: # # source/type destination/type cost filter # # General Notes: # # The "cost" field is used to find the least costly filters to run # when converting a job file to a printable format. # # All filters *must* accept the standard command-line arguments # (job-id, user, title, copies, options, [filename or stdin]) to # work with CUPS. # ######################################################################## # # PostScript filters # application/postscript application/vnd.cups-postscript 66 pstops ######################################################################## # # Raster filters... # # PWG Raster filter for IPP Everywhere... application/vnd.cups-raster image/pwg-raster 100 rastertopwg application/vnd.cups-raster image/urf 100 rastertopwg ######################################################################## # # Raw filter... # # Uncomment the following filter to allow printing of arbitrary files # without the -oraw option. # @DEFAULT_RAW_PRINTING@application/octet-stream application/vnd.cups-raw 0 - cups-2.2.7/conf/mime.types000664 000765 000024 00000014477 13255074424 016132 0ustar00msweetstaff000000 000000 # # Base MIME types file for CUPS. # # DO NOT EDIT THIS FILE, AS IT IS OVERWRITTEN WHEN YOU INSTALL NEW # VERSIONS OF CUPS. Instead, create a "local.types" file that # reflects your local configuration changes. # # Copyright 2007-2017 by Apple Inc. # Copyright 1997-2007 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # ######################################################################## # # Format of Lines: # # super/type rules # # "rules" can be any combination of: # # ( expr ) Parenthesis for expression grouping # + Logical AND # , or whitespace Logical OR # ! Logical NOT # match("pattern") Pattern match on filename # extension Pattern match on "*.extension" # ascii(offset,length) True if bytes are valid printable ASCII # (CR, NL, TAB, BS, 32-126) # priority(number) Sets priority of type (0=lowest, # 100=default, 200=highest) # printable(offset,length) True if bytes are printable 8-bit chars # (CR, NL, TAB, BS, 32-126, 128-254) # regex(offset,"regex") True if bytes match regular expression # string(offset,"string") True if bytes are identical to string # istring(offset,"string") True if bytes are identical to # case-insensitive string # char(offset,value) True if byte is identical # short(offset,value) True if 16-bit integer is identical # int(offset,value) True if 32-bit integer is identical # locale("string") True if current locale matches string # contains(offset,range,"string") True if the range contains the string # # General Notes: # # MIME type names are case-insensitive. Internally they are converted # to lowercase. Multiple occurrences of a type will cause the provided # rules to be appended to the existing definition. If two types use the same # rules to resolve a type and have the same priority, e.g. "doc" extension for # "text/bar" and "text/foo", the returned type will be the first type as # sorted in alphanumerically ascending order without regard to case. Thus, # the "text/bar" type will match the "doc" extension first unless the # "text/foo" type has specified a higher priority. # # The "printable" rule differs from the "ascii" rule in that it also # accepts 8-bit characters in the range 128-255. # # String constants must be surrounded by "" if they contain whitespace. # To insert binary data into a string, use the notation. # ######################################################################## # # Application-generated files... # #application/msword doc string(0,) application/pdf pdf regex(0,^[\n\r]*%PDF) application/postscript ai eps ps string(0,%!) string(0,<04>%!) \ contains(0,128,<1B>%-12345X) + \ (contains(0,4096,"LANGUAGE=POSTSCRIPT") \ contains(0,4096,"LANGUAGE = Postscript") \ contains(0,4096,"LANGUAGE = PostScript") \ contains(0,4096,"LANGUAGE = POSTSCRIPT") \ (contains(0,4096,<0a>%!) + \ !contains(0,4096,"ENTER LANGUAGE"))) ######################################################################## # # Image files... # image/gif gif string(0,GIF87a) string(0,GIF89a) image/png png string(0,<89>PNG) image/jpeg jpeg jpg jpe string(0,) +\ (char(3,0xe0) char(3,0xe1) char(3,0xe2) char(3,0xe3)\ char(3,0xe4) char(3,0xe5) char(3,0xe6) char(3,0xe7)\ char(3,0xe8) char(3,0xe9) char(3,0xea) char(3,0xeb)\ char(3,0xec) char(3,0xed) char(3,0xee) char(3,0xef)) image/pwg-raster string(0,"RaS2") + string(4,PwgRaster<00>) priority(150) image/tiff tiff tif string(0,MM<002A>) string(0,II<2A00>) image/x-photocd pcd string(2048,PCD_IPI) image/x-portable-anymap pnm image/x-portable-bitmap pbm string(0,P1) string(0,P4) image/x-portable-graymap pgm string(0,P2) string(0,P5) image/x-portable-pixmap ppm string(0,P3) string(0,P6) image/x-sgi-rgb rgb sgi bw icon short(0,474) image/x-xbitmap xbm image/x-xpixmap xpm ascii(0,1024) + string(3,"XPM") #image/x-xwindowdump xwd string(4,<00000007>) image/x-sun-raster ras string(0,<59a66a95>) #image/fpx fpx image/urf urf string(0,UNIRAST<00>) image/x-alias pix short(8,8) short(8,24) image/x-bitmap bmp string(0,BM) + !printable(2,14) image/x-icon ico ######################################################################## # # Text files... # 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)) application/x-csource c cxx cpp cc C h hpp \ printable(0,1024) + ! css + \ (string(0,/*) string(0,//) \ string(0,#include) contains(0,1024,<0a>#include) \ string(0,#define) contains(0,1024,<0a>#define)) text/html html htm printable(0,1024) +\ (istring(0,"") istring(0,")) string(0,"2SaR") \ string(0,"RaS3") string(0,"3SaR") application/vnd.cups-raw (string(0,<1B>E) + !string(2,<1B>%0B)) \ string(0,<1B>@) \ (contains(0,128,<1B>%-12345X) + \ (contains(0,4096,"LANGUAGE=PCL") \ contains(0,4096,"LANGUAGE = PCL"))) ######################################################################## # # Raw print file support... # # Comment the following type to prevent raw file printing. # application/octet-stream cups-2.2.7/conf/pam.opendirectory000664 000765 000024 00000000313 13255074424 017462 0ustar00msweetstaff000000 000000 # cups: auth account password session auth required pam_opendirectory.so account required pam_permit.so password required pam_deny.so session required pam_permit.so cups-2.2.7/conf/pam.securityserver000664 000765 000024 00000000430 13255074424 017672 0ustar00msweetstaff000000 000000 # cups: auth account password session auth sufficient pam_securityserver.so auth sufficient pam_unix.so auth required pam_deny.so account required pam_permit.so password required pam_deny.so session required pam_permit.so cups-2.2.7/conf/pam.std.in000664 000765 000024 00000000065 13255074424 015777 0ustar00msweetstaff000000 000000 auth required @PAMMODAUTH@ account required @PAMMOD@ cups-2.2.7/conf/snmp.conf.in000664 000765 000024 00000000230 13255074424 016324 0ustar00msweetstaff000000 000000 # # SNMP configuration file for CUPS. See "man cups-snmp.conf" for a complete # description of this file. # @CUPS_SNMP_ADDRESS@ @CUPS_SNMP_COMMUNITY@ cups-2.2.7/cgi-bin/admin.c000664 000765 000024 00000336120 13255074424 015724 0ustar00msweetstaff000000 000000 /* * Administration CGI for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi-private.h" #include #include #include #include #include #include #include #include #include /* * Local globals... */ static int current_device = 0; /* Current device shown */ /* * Local functions... */ static void choose_device_cb(const char *device_class, const char *device_id, const char *device_info, const char *device_make_and_model, const char *device_uri, const char *device_location, const char *title); static void do_add_rss_subscription(http_t *http); static void do_am_class(http_t *http, int modify); static void do_am_printer(http_t *http, int modify); static void do_cancel_subscription(http_t *http); static void do_config_server(http_t *http); static void do_delete_class(http_t *http); static void do_delete_printer(http_t *http); static void do_export(http_t *http); static void do_list_printers(http_t *http); static void do_menu(http_t *http); static void do_set_allowed_users(http_t *http); static void do_set_default(http_t *http); static void do_set_options(http_t *http, int is_class); static void do_set_sharing(http_t *http); static char *get_option_value(ppd_file_t *ppd, const char *name, char *buffer, size_t bufsize); static double get_points(double number, const char *uval); static char *get_printer_ppd(const char *uri, char *buffer, size_t bufsize); /* * 'main()' - Main entry for CGI. */ int /* O - Exit status */ main(void) { http_t *http; /* Connection to the server */ const char *op; /* Operation name */ /* * Connect to the HTTP server... */ fputs("DEBUG: admin.cgi started...\n", stderr); http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption()); if (!http) { perror("ERROR: Unable to connect to cupsd"); fprintf(stderr, "DEBUG: cupsServer()=\"%s\"\n", cupsServer() ? cupsServer() : "(null)"); fprintf(stderr, "DEBUG: ippPort()=%d\n", ippPort()); fprintf(stderr, "DEBUG: cupsEncryption()=%d\n", cupsEncryption()); exit(1); } fprintf(stderr, "DEBUG: http=%p\n", http); /* * Set the web interface section... */ cgiSetVariable("SECTION", "admin"); cgiSetVariable("REFRESH_PAGE", ""); /* * See if we have form data... */ if (!cgiInitialize() || !cgiGetVariable("OP")) { /* * Nope, send the administration menu... */ fputs("DEBUG: No form data, showing main menu...\n", stderr); do_menu(http); } else if ((op = cgiGetVariable("OP")) != NULL && cgiIsPOST()) { /* * Do the operation... */ fprintf(stderr, "DEBUG: op=\"%s\"...\n", op); if (!*op) { const char *printer = getenv("PRINTER_NAME"), /* Printer or class name */ *server_port = getenv("SERVER_PORT"); /* Port number string */ int port = atoi(server_port ? server_port : "0"); /* Port number */ char uri[1024]; /* URL */ if (printer) httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), getenv("HTTPS") ? "https" : "http", NULL, getenv("SERVER_NAME"), port, "/%s/%s", cgiGetVariable("IS_CLASS") ? "classes" : "printers", printer); else httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), getenv("HTTPS") ? "https" : "http", NULL, getenv("SERVER_NAME"), port, "/admin"); printf("Location: %s\n\n", uri); } else if (!strcmp(op, "set-allowed-users")) do_set_allowed_users(http); else if (!strcmp(op, "set-as-default")) do_set_default(http); else if (!strcmp(op, "set-sharing")) do_set_sharing(http); else if (!strcmp(op, "find-new-printers") || !strcmp(op, "list-available-printers")) do_list_printers(http); else if (!strcmp(op, "add-class")) do_am_class(http, 0); else if (!strcmp(op, "add-printer")) do_am_printer(http, 0); else if (!strcmp(op, "modify-class")) do_am_class(http, 1); else if (!strcmp(op, "modify-printer")) do_am_printer(http, 1); else if (!strcmp(op, "delete-class")) do_delete_class(http); else if (!strcmp(op, "delete-printer")) do_delete_printer(http); else if (!strcmp(op, "set-class-options")) do_set_options(http, 1); else if (!strcmp(op, "set-printer-options")) do_set_options(http, 0); else if (!strcmp(op, "config-server")) do_config_server(http); else if (!strcmp(op, "export-samba")) do_export(http); else if (!strcmp(op, "add-rss-subscription")) do_add_rss_subscription(http); else if (!strcmp(op, "cancel-subscription")) do_cancel_subscription(http); else { /* * Bad operation code - display an error... */ cgiStartHTML(cgiText(_("Administration"))); cgiCopyTemplateLang("error-op.tmpl"); cgiEndHTML(); } } else if (op && !strcmp(op, "redirect")) { const char *url; /* Redirection URL... */ char prefix[1024]; /* URL prefix */ if (getenv("HTTPS")) snprintf(prefix, sizeof(prefix), "https://%s:%s", getenv("SERVER_NAME"), getenv("SERVER_PORT")); else snprintf(prefix, sizeof(prefix), "http://%s:%s", getenv("SERVER_NAME"), getenv("SERVER_PORT")); fprintf(stderr, "DEBUG: redirecting with prefix %s!\n", prefix); if ((url = cgiGetVariable("URL")) != NULL) { char encoded[1024], /* Encoded URL string */ *ptr; /* Pointer into encoded string */ ptr = encoded; if (*url != '/') *ptr++ = '/'; for (; *url && ptr < (encoded + sizeof(encoded) - 4); url ++) { if (strchr("%@&+ <>#=", *url) || *url < ' ' || *url & 128) { /* * Percent-encode this character; safe because we have at least 4 * bytes left in the array... */ sprintf(ptr, "%%%02X", *url & 255); ptr += 3; } else *ptr++ = *url; } *ptr = '\0'; if (*url) { /* * URL was too long, just redirect to the admin page... */ printf("Location: %s/admin\n\n", prefix); } else { /* * URL is OK, redirect there... */ printf("Location: %s%s\n\n", prefix, encoded); } } else printf("Location: %s/admin\n\n", prefix); } else { /* * Form data but no operation code - display an error... */ cgiStartHTML(cgiText(_("Administration"))); cgiCopyTemplateLang("error-op.tmpl"); cgiEndHTML(); } /* * Close the HTTP server connection... */ httpClose(http); /* * Return with no errors... */ return (0); } /* * 'choose_device_cb()' - Add a device to the device selection page. */ static void choose_device_cb( const char *device_class, /* I - Class */ const char *device_id, /* I - 1284 device ID */ const char *device_info, /* I - Description */ const char *device_make_and_model, /* I - Make and model */ const char *device_uri, /* I - Device URI */ const char *device_location, /* I - Location */ const char *title) /* I - Page title */ { /* * For modern browsers, start a multi-part page so we can show that something * is happening. Non-modern browsers just get everything at the end... */ if (current_device == 0 && cgiSupportsMultipart()) { cgiStartMultipart(); cgiStartHTML(title); cgiCopyTemplateLang("choose-device.tmpl"); cgiEndHTML(); fflush(stdout); } /* * Add the device to the array... */ cgiSetArray("device_class", current_device, device_class); cgiSetArray("device_id", current_device, device_id); cgiSetArray("device_info", current_device, device_info); cgiSetArray("device_make_and_model", current_device, device_make_and_model); cgiSetArray("device_uri", current_device, device_uri); cgiSetArray("device_location", current_device, device_location); current_device ++; } /* * 'do_add_rss_subscription()' - Add a RSS subscription. */ static void do_add_rss_subscription(http_t *http) /* I - HTTP connection */ { ipp_t *request, /* IPP request data */ *response; /* IPP response data */ char rss_uri[1024]; /* RSS notify-recipient URI */ int num_events; /* Number of events */ const char *events[12], /* Subscribed events */ *subscription_name, /* Subscription name */ *printer_uri, /* Printer URI */ *ptr, /* Pointer into name */ *user; /* Username */ int max_events; /* Maximum number of events */ /* * See if we have all of the required information... */ subscription_name = cgiGetVariable("SUBSCRIPTION_NAME"); printer_uri = cgiGetVariable("PRINTER_URI"); num_events = 0; if (cgiGetVariable("EVENT_JOB_CREATED")) events[num_events ++] = "job-created"; if (cgiGetVariable("EVENT_JOB_COMPLETED")) events[num_events ++] = "job-completed"; if (cgiGetVariable("EVENT_JOB_STOPPED")) events[num_events ++] = "job-stopped"; if (cgiGetVariable("EVENT_JOB_CONFIG_CHANGED")) events[num_events ++] = "job-config-changed"; if (cgiGetVariable("EVENT_PRINTER_STOPPED")) events[num_events ++] = "printer-stopped"; if (cgiGetVariable("EVENT_PRINTER_ADDED")) events[num_events ++] = "printer-added"; if (cgiGetVariable("EVENT_PRINTER_MODIFIED")) events[num_events ++] = "printer-modified"; if (cgiGetVariable("EVENT_PRINTER_DELETED")) events[num_events ++] = "printer-deleted"; if (cgiGetVariable("EVENT_SERVER_STARTED")) events[num_events ++] = "server-started"; if (cgiGetVariable("EVENT_SERVER_STOPPED")) events[num_events ++] = "server-stopped"; if (cgiGetVariable("EVENT_SERVER_RESTARTED")) events[num_events ++] = "server-restarted"; if (cgiGetVariable("EVENT_SERVER_AUDIT")) events[num_events ++] = "server-audit"; if ((ptr = cgiGetVariable("MAX_EVENTS")) != NULL) max_events = atoi(ptr); else max_events = 0; if (!subscription_name || !printer_uri || !num_events || max_events <= 0 || max_events > 9999) { /* * Don't have everything we need, so get the available printers * and classes and (re)show the add page... */ if (cgiGetVariable("EVENT_JOB_CREATED")) cgiSetVariable("EVENT_JOB_CREATED", "CHECKED"); if (cgiGetVariable("EVENT_JOB_COMPLETED")) cgiSetVariable("EVENT_JOB_COMPLETED", "CHECKED"); if (cgiGetVariable("EVENT_JOB_STOPPED")) cgiSetVariable("EVENT_JOB_STOPPED", "CHECKED"); if (cgiGetVariable("EVENT_JOB_CONFIG_CHANGED")) cgiSetVariable("EVENT_JOB_CONFIG_CHANGED", "CHECKED"); if (cgiGetVariable("EVENT_PRINTER_STOPPED")) cgiSetVariable("EVENT_PRINTER_STOPPED", "CHECKED"); if (cgiGetVariable("EVENT_PRINTER_ADDED")) cgiSetVariable("EVENT_PRINTER_ADDED", "CHECKED"); if (cgiGetVariable("EVENT_PRINTER_MODIFIED")) cgiSetVariable("EVENT_PRINTER_MODIFIED", "CHECKED"); if (cgiGetVariable("EVENT_PRINTER_DELETED")) cgiSetVariable("EVENT_PRINTER_DELETED", "CHECKED"); if (cgiGetVariable("EVENT_SERVER_STARTED")) cgiSetVariable("EVENT_SERVER_STARTED", "CHECKED"); if (cgiGetVariable("EVENT_SERVER_STOPPED")) cgiSetVariable("EVENT_SERVER_STOPPED", "CHECKED"); if (cgiGetVariable("EVENT_SERVER_RESTARTED")) cgiSetVariable("EVENT_SERVER_RESTARTED", "CHECKED"); if (cgiGetVariable("EVENT_SERVER_AUDIT")) cgiSetVariable("EVENT_SERVER_AUDIT", "CHECKED"); request = ippNewRequest(CUPS_GET_PRINTERS); response = cupsDoRequest(http, request, "/"); cgiSetIPPVars(response, NULL, NULL, NULL, 0); ippDelete(response); cgiStartHTML(cgiText(_("Add RSS Subscription"))); cgiCopyTemplateLang("add-rss-subscription.tmpl"); cgiEndHTML(); return; } /* * Make sure we have a username... */ if ((user = getenv("REMOTE_USER")) == NULL) { puts("Status: 401\n"); exit(0); } /* * Validate the subscription name... */ for (ptr = subscription_name; *ptr; ptr ++) if ((*ptr >= 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/' || *ptr == '?' || *ptr == '#') break; if (*ptr) { cgiSetVariable("ERROR", cgiText(_("The subscription name may not " "contain spaces, slashes (/), question marks (?), " "or the pound sign (#)."))); cgiStartHTML(_("Add RSS Subscription")); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } /* * Add the subscription... */ ptr = subscription_name + strlen(subscription_name) - 4; if (ptr < subscription_name || strcmp(ptr, ".rss")) httpAssembleURIf(HTTP_URI_CODING_ALL, rss_uri, sizeof(rss_uri), "rss", NULL, NULL, 0, "/%s.rss?max_events=%d", subscription_name, max_events); else httpAssembleURIf(HTTP_URI_CODING_ALL, rss_uri, sizeof(rss_uri), "rss", NULL, NULL, 0, "/%s?max_events=%d", subscription_name, max_events); request = ippNewRequest(IPP_CREATE_PRINTER_SUBSCRIPTION); if (!_cups_strcasecmp(printer_uri, "#ALL#")) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/"); else ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer_uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); ippAddString(request, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, "notify-recipient-uri", NULL, rss_uri); ippAddStrings(request, IPP_TAG_SUBSCRIPTION, IPP_TAG_KEYWORD, "notify-events", num_events, NULL, events); ippAddInteger(request, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-lease-duration", 0); ippDelete(cupsDoRequest(http, request, "/")); if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() > IPP_OK_CONFLICT) { cgiStartHTML(_("Add RSS Subscription")); cgiShowIPPError(_("Unable to add RSS subscription")); } else { /* * Redirect successful updates back to the admin page... */ cgiSetVariable("refresh_page", "5;URL=/admin"); cgiStartHTML(_("Add RSS Subscription")); cgiCopyTemplateLang("subscription-added.tmpl"); } cgiEndHTML(); } /* * 'do_am_class()' - Add or modify a class. */ static void do_am_class(http_t *http, /* I - HTTP connection */ int modify) /* I - Modify the printer? */ { int i, j; /* Looping vars */ int element; /* Element number */ int num_printers; /* Number of printers */ ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* member-uris attribute */ char uri[HTTP_MAX_URI]; /* Device or printer URI */ const char *name, /* Pointer to class name */ *op, /* Operation name */ *ptr; /* Pointer to CGI variable */ const char *title; /* Title of page */ static const char * const pattrs[] = /* Requested printer attributes */ { "member-names", "printer-info", "printer-location" }; title = cgiText(modify ? _("Modify Class") : _("Add Class")); op = cgiGetVariable("OP"); name = cgiGetVariable("PRINTER_NAME"); if (cgiGetVariable("PRINTER_LOCATION") == NULL) { /* * Build a CUPS_GET_PRINTERS request, which requires the * following attributes: * * attributes-charset * attributes-natural-language */ request = ippNewRequest(CUPS_GET_PRINTERS); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type", CUPS_PRINTER_LOCAL); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type-mask", CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE); /* * Do the request and get back a response... */ cgiClearVariables(); if (op) cgiSetVariable("OP", op); if (name) cgiSetVariable("PRINTER_NAME", name); if ((response = cupsDoRequest(http, request, "/")) != NULL) { /* * Create MEMBER_URIS and MEMBER_NAMES arrays... */ for (element = 0, attr = response->attrs; attr != NULL; attr = attr->next) if (attr->name && !strcmp(attr->name, "printer-uri-supported")) { if ((ptr = strrchr(attr->values[0].string.text, '/')) != NULL && (!name || _cups_strcasecmp(name, ptr + 1))) { /* * Don't show the current class... */ cgiSetArray("MEMBER_URIS", element, attr->values[0].string.text); element ++; } } for (element = 0, attr = response->attrs; attr != NULL; attr = attr->next) if (attr->name && !strcmp(attr->name, "printer-name")) { if (!name || _cups_strcasecmp(name, attr->values[0].string.text)) { /* * Don't show the current class... */ cgiSetArray("MEMBER_NAMES", element, attr->values[0].string.text); element ++; } } num_printers = cgiGetSize("MEMBER_URIS"); ippDelete(response); } else num_printers = 0; if (modify) { /* * Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the * following attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/classes/%s", name); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs); /* * Do the request and get back a response... */ if ((response = cupsDoRequest(http, request, "/")) != NULL) { if ((attr = ippFindAttribute(response, "member-names", IPP_TAG_NAME)) != NULL) { /* * Mark any current members in the class... */ for (j = 0; j < num_printers; j ++) cgiSetArray("MEMBER_SELECTED", j, ""); for (i = 0; i < attr->num_values; i ++) { for (j = 0; j < num_printers; j ++) { if (!_cups_strcasecmp(attr->values[i].string.text, cgiGetArray("MEMBER_NAMES", j))) { cgiSetArray("MEMBER_SELECTED", j, "SELECTED"); break; } } } } if ((attr = ippFindAttribute(response, "printer-info", IPP_TAG_TEXT)) != NULL) cgiSetVariable("PRINTER_INFO", attr->values[0].string.text); if ((attr = ippFindAttribute(response, "printer-location", IPP_TAG_TEXT)) != NULL) cgiSetVariable("PRINTER_LOCATION", attr->values[0].string.text); ippDelete(response); } /* * Update the location and description of an existing printer... */ cgiStartHTML(title); cgiCopyTemplateLang("modify-class.tmpl"); } else { /* * Get the name, location, and description for a new printer... */ cgiStartHTML(title); cgiCopyTemplateLang("add-class.tmpl"); } cgiEndHTML(); return; } if (!name) { cgiStartHTML(title); cgiSetVariable("ERROR", cgiText(_("Missing form variable"))); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } for (ptr = name; *ptr; ptr ++) if ((*ptr >= 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/' || *ptr == '#') break; if (*ptr || ptr == name || strlen(name) > 127) { cgiSetVariable("ERROR", cgiText(_("The class name may only contain up to " "127 printable characters and may not " "contain spaces, slashes (/), or the " "pound sign (#)."))); cgiStartHTML(title); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } /* * Build a CUPS_ADD_CLASS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * printer-location * printer-info * printer-is-accepting-jobs * printer-state * member-uris */ request = ippNewRequest(CUPS_ADD_CLASS); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/classes/%s", name); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location", NULL, cgiGetVariable("PRINTER_LOCATION")); ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info", NULL, cgiGetVariable("PRINTER_INFO")); ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1); ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PRINTER_IDLE); if ((num_printers = cgiGetSize("MEMBER_URIS")) > 0) { attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_URI, "member-uris", num_printers, NULL, NULL); for (i = 0; i < num_printers; i ++) attr->values[i].string.text = _cupsStrAlloc(cgiGetArray("MEMBER_URIS", i)); } /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(http, request, "/admin/")); if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() > IPP_OK_CONFLICT) { cgiStartHTML(title); cgiShowIPPError(modify ? _("Unable to modify class") : _("Unable to add class")); } else { /* * Redirect successful updates back to the class page... */ char refresh[1024]; /* Refresh URL */ cgiFormEncode(uri, name, sizeof(uri)); snprintf(refresh, sizeof(refresh), "5;URL=/admin/?OP=redirect&URL=/classes/%s", uri); cgiSetVariable("refresh_page", refresh); cgiStartHTML(title); if (modify) cgiCopyTemplateLang("class-modified.tmpl"); else cgiCopyTemplateLang("class-added.tmpl"); } cgiEndHTML(); } /* * 'do_am_printer()' - Add or modify a printer. */ static void do_am_printer(http_t *http, /* I - HTTP connection */ int modify) /* I - Modify the printer? */ { int i; /* Looping var */ ipp_attribute_t *attr; /* Current attribute */ ipp_t *request, /* IPP request */ *response, /* IPP response */ *oldinfo; /* Old printer information */ const cgi_file_t *file; /* Uploaded file, if any */ const char *var; /* CGI variable */ char uri[HTTP_MAX_URI], /* Device or printer URI */ *uriptr, /* Pointer into URI */ evefile[1024] = ""; /* IPP Everywhere PPD file */ int maxrate; /* Maximum baud rate */ char baudrate[255]; /* Baud rate string */ const char *name, /* Pointer to class name */ *ptr; /* Pointer to CGI variable */ const char *title; /* Title of page */ static int baudrates[] = /* Baud rates */ { 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800 }; ptr = cgiGetVariable("DEVICE_URI"); fprintf(stderr, "DEBUG: do_am_printer: DEVICE_URI=\"%s\"\n", ptr ? ptr : "(null)"); title = cgiText(modify ? _("Modify Printer") : _("Add Printer")); if (modify) { /* * Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the * following attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/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; file = cgiGetFile(); if (file) { fprintf(stderr, "DEBUG: file->tempfile=%s\n", file->tempfile); fprintf(stderr, "DEBUG: file->name=%s\n", file->name); fprintf(stderr, "DEBUG: file->filename=%s\n", file->filename); fprintf(stderr, "DEBUG: file->mimetype=%s\n", file->mimetype); } if ((name = cgiGetVariable("PRINTER_NAME")) != NULL) { for (ptr = name; *ptr; ptr ++) if ((*ptr >= 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/' || *ptr == '#') break; if (*ptr || ptr == name || strlen(name) > 127) { cgiSetVariable("ERROR", cgiText(_("The printer name may only contain up to " "127 printable characters and may not " "contain spaces, slashes (/), or the " "pound sign (#)."))); cgiStartHTML(title); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } } if ((var = cgiGetVariable("DEVICE_URI")) != NULL) { if ((uriptr = strrchr(var, '|')) != NULL) { /* * Extract make and make/model from device URI string... */ char make[1024], /* Make string */ *makeptr; /* Pointer into make */ *uriptr++ = '\0'; strlcpy(make, uriptr, sizeof(make)); if ((makeptr = strchr(make, ' ')) != NULL) *makeptr = '\0'; else if ((makeptr = strchr(make, '-')) != NULL) *makeptr = '\0'; else if (!_cups_strncasecmp(make, "laserjet", 8) || !_cups_strncasecmp(make, "deskjet", 7) || !_cups_strncasecmp(make, "designjet", 9)) strlcpy(make, "HP", sizeof(make)); else if (!_cups_strncasecmp(make, "phaser", 6)) strlcpy(make, "Xerox", sizeof(make)); else if (!_cups_strncasecmp(make, "stylus", 6)) strlcpy(make, "Epson", sizeof(make)); else strlcpy(make, "Generic", sizeof(make)); if (!cgiGetVariable("CURRENT_MAKE")) cgiSetVariable("CURRENT_MAKE", make); if (!cgiGetVariable("CURRENT_MAKE_AND_MODEL")) cgiSetVariable("CURRENT_MAKE_AND_MODEL", uriptr); if (!modify) { char template[128], /* Template name */ *tptr; /* Pointer into template name */ cgiSetVariable("PRINTER_INFO", uriptr); for (tptr = template; tptr < (template + sizeof(template) - 1) && *uriptr; uriptr ++) if (isalnum(*uriptr & 255) || *uriptr == '_' || *uriptr == '-' || *uriptr == '.') *tptr++ = *uriptr; else if ((*uriptr == ' ' || *uriptr == '/') && tptr > template && tptr[-1] != '_') *tptr++ = '_'; else if (*uriptr == '?' || *uriptr == '(') break; *tptr = '\0'; cgiSetVariable("TEMPLATE_NAME", template); } } } if (!var) { /* * Look for devices so the user can pick something... */ if ((attr = ippFindAttribute(oldinfo, "device-uri", IPP_TAG_URI)) != NULL) { strlcpy(uri, attr->values[0].string.text, sizeof(uri)); if ((uriptr = strchr(uri, ':')) != NULL && strncmp(uriptr, "://", 3) == 0) *uriptr = '\0'; cgiSetVariable("CURRENT_DEVICE_URI", attr->values[0].string.text); cgiSetVariable("CURRENT_DEVICE_SCHEME", uri); } /* * Scan for devices for up to 30 seconds... */ fputs("DEBUG: Getting list of devices...\n", stderr); current_device = 0; if (cupsGetDevices(http, 5, CUPS_INCLUDE_ALL, CUPS_EXCLUDE_NONE, (cups_device_cb_t)choose_device_cb, (void *)title) == IPP_OK) { fputs("DEBUG: Got device list!\n", stderr); if (cgiSupportsMultipart()) cgiStartMultipart(); cgiSetVariable("CUPS_GET_DEVICES_DONE", "1"); cgiStartHTML(title); cgiCopyTemplateLang("choose-device.tmpl"); cgiEndHTML(); if (cgiSupportsMultipart()) cgiEndMultipart(); } else { fprintf(stderr, "ERROR: CUPS-Get-Devices request failed with status %x: %s\n", cupsLastError(), cupsLastErrorString()); if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else { cgiStartHTML(title); cgiShowIPPError(modify ? _("Unable to modify printer") : _("Unable to add printer")); cgiEndHTML(); return; } } } else if (!strchr(var, '/') || (!strncmp(var, "lpd://", 6) && !strchr(var + 6, '/'))) { if ((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("CURRENT_DEVICE_URI", attr->values[0].string.text); } /* * User needs to set the full URI... */ cgiStartHTML(title); cgiCopyTemplateLang("choose-uri.tmpl"); cgiEndHTML(); } else if (!strncmp(var, "serial:", 7) && !cgiGetVariable("BAUDRATE")) { /* * Need baud rate, parity, etc. */ if ((var = strchr(var, '?')) != NULL && strncmp(var, "?baud=", 6) == 0) maxrate = atoi(var + 6); else maxrate = 19200; for (i = 0; i < 10; i ++) if (baudrates[i] > maxrate) break; else { sprintf(baudrate, "%d", baudrates[i]); cgiSetArray("BAUDRATES", i, baudrate); } cgiStartHTML(title); cgiCopyTemplateLang("choose-serial.tmpl"); cgiEndHTML(); } else if (!name || !cgiGetVariable("PRINTER_LOCATION")) { cgiStartHTML(title); if (modify) { /* * Update the location and description of an existing printer... */ if (oldinfo) { if ((attr = ippFindAttribute(oldinfo, "printer-info", IPP_TAG_TEXT)) != NULL) cgiSetVariable("PRINTER_INFO", attr->values[0].string.text); if ((attr = ippFindAttribute(oldinfo, "printer-location", IPP_TAG_TEXT)) != NULL) cgiSetVariable("PRINTER_LOCATION", attr->values[0].string.text); if ((attr = ippFindAttribute(oldinfo, "printer-is-shared", IPP_TAG_BOOLEAN)) != NULL) cgiSetVariable("PRINTER_IS_SHARED", attr->values[0].boolean ? "1" : "0"); } cgiCopyTemplateLang("modify-printer.tmpl"); } else { /* * Get the name, location, and description for a new printer... */ #ifdef __APPLE__ if (!strncmp(var, "usb:", 4)) cgiSetVariable("printer_is_shared", "1"); else #endif /* __APPLE__ */ cgiSetVariable("printer_is_shared", "0"); cgiCopyTemplateLang("add-printer.tmpl"); } cgiEndHTML(); if (oldinfo) ippDelete(oldinfo); return; } else if (!file && (!cgiGetVariable("PPD_NAME") || cgiGetVariable("SELECT_MAKE"))) { if (modify && !cgiGetVariable("SELECT_MAKE")) { /* * Get the PPD file... */ int fd; /* PPD file */ char filename[1024]; /* PPD filename */ ppd_file_t *ppd; /* PPD information */ char buffer[1024]; /* Buffer */ ssize_t bytes; /* Number of bytes */ http_status_t get_status; /* Status of GET */ /* TODO: Use cupsGetFile() API... */ snprintf(uri, sizeof(uri), "/printers/%s.ppd", name); if (httpGet(http, uri)) httpGet(http, uri); while ((get_status = httpUpdate(http)) == HTTP_CONTINUE); if (get_status != HTTP_OK) { httpFlush(http); fprintf(stderr, "ERROR: Unable to get PPD file %s: %d - %s\n", uri, get_status, httpStatus(get_status)); } else if ((fd = cupsTempFd(filename, sizeof(filename))) >= 0) { while ((bytes = httpRead2(http, buffer, sizeof(buffer))) > 0) write(fd, buffer, (size_t)bytes); close(fd); 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); unlink(filename); } else { int linenum; /* Line number */ fprintf(stderr, "ERROR: Unable to open PPD file %s: %s\n", filename, ppdErrorString(ppdLastError(&linenum))); } } else { httpFlush(http); fprintf(stderr, "ERROR: Unable to create temporary file for PPD file: %s\n", strerror(errno)); } } /* * Build a CUPS_GET_PPDS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(CUPS_GET_PPDS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/printers/"); if ((var = cgiGetVariable("PPD_MAKE")) == NULL) var = cgiGetVariable("CURRENT_MAKE"); if (var && !cgiGetVariable("SELECT_MAKE")) { const char *make_model; /* Make and model */ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_TEXT, "ppd-make", NULL, var); if ((make_model = cgiGetVariable("CURRENT_MAKE_AND_MODEL")) != NULL) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_TEXT, "ppd-make-and-model", NULL, make_model); } else ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "ppd-make"); /* * Do the request and get back a response... */ if ((response = cupsDoRequest(http, request, "/")) != NULL) { /* * Got the list of PPDs, see if the user has selected a make... */ if (cgiSetIPPVars(response, NULL, NULL, NULL, 0) == 0 && !modify) { /* * No PPD files with this make, try again with all makes... */ ippDelete(response); request = ippNewRequest(CUPS_GET_PPDS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/printers/"); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "ppd-make"); if ((response = cupsDoRequest(http, request, "/")) != NULL) cgiSetIPPVars(response, NULL, NULL, NULL, 0); cgiStartHTML(title); cgiCopyTemplateLang("choose-make.tmpl"); cgiEndHTML(); } else if (!var || cgiGetVariable("SELECT_MAKE")) { cgiStartHTML(title); cgiCopyTemplateLang("choose-make.tmpl"); cgiEndHTML(); } else { /* * Let the user choose a model... */ cgiStartHTML(title); if (!cgiGetVariable("PPD_MAKE")) cgiSetVariable("PPD_MAKE", cgiGetVariable("CURRENT_MAKE")); if (!modify) cgiSetVariable("CURRENT_MAKE_AND_MODEL", cgiGetArray("PPD_MAKE_AND_MODEL", 0)); cgiCopyTemplateLang("choose-model.tmpl"); cgiEndHTML(); } ippDelete(response); } else { cgiStartHTML(title); cgiShowIPPError(_("Unable to get list of printer drivers")); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); } } else { /* * Build a CUPS_ADD_PRINTER request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * printer-location * printer-info * ppd-name * device-uri * printer-is-accepting-jobs * printer-is-shared * printer-state */ request = ippNewRequest(CUPS_ADD_PRINTER); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", cgiGetVariable("PRINTER_NAME")); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); if (!file) { var = cgiGetVariable("PPD_NAME"); if (!strcmp(var, "everywhere")) get_printer_ppd(cgiGetVariable("DEVICE_URI"), evefile, sizeof(evefile)); else if (strcmp(var, "__no_change__")) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name", NULL, var); } ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location", NULL, cgiGetVariable("PRINTER_LOCATION")); ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info", NULL, cgiGetVariable("PRINTER_INFO")); strlcpy(uri, cgiGetVariable("DEVICE_URI"), sizeof(uri)); /* * Strip make and model from URI... */ if ((uriptr = strrchr(uri, '|')) != NULL) *uriptr = '\0'; if (!strncmp(uri, "serial:", 7)) { /* * Update serial port URI to include baud rate, etc. */ if ((uriptr = strchr(uri, '?')) == NULL) uriptr = uri + strlen(uri); snprintf(uriptr, sizeof(uri) - (size_t)(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", NULL, uri); ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1); var = cgiGetVariable("printer_is_shared"); ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-shared", var && (!strcmp(var, "1") || !strcmp(var, "on"))); ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PRINTER_IDLE); /* * Do the request and get back a response... */ if (file) ippDelete(cupsDoFileRequest(http, request, "/admin/", file->tempfile)); else if (evefile[0]) { ippDelete(cupsDoFileRequest(http, request, "/admin/", evefile)); unlink(evefile); } else ippDelete(cupsDoRequest(http, request, "/admin/")); if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() > IPP_OK_CONFLICT) { cgiStartHTML(title); cgiShowIPPError(modify ? _("Unable to modify printer") : _("Unable to add printer")); } else if (modify) { /* * Redirect successful updates back to the printer page... */ char refresh[1024]; /* Refresh URL */ cgiFormEncode(uri, name, sizeof(uri)); snprintf(refresh, sizeof(refresh), "5;/admin/?OP=redirect&URL=/printers/%s", uri); cgiSetVariable("refresh_page", refresh); cgiStartHTML(title); cgiCopyTemplateLang("printer-modified.tmpl"); } else { /* * Set the printer options... */ cgiSetVariable("OP", "set-printer-options"); do_set_options(http, 0); return; } cgiEndHTML(); } if (oldinfo) ippDelete(oldinfo); } /* * 'do_cancel_subscription()' - Cancel a subscription. */ static void do_cancel_subscription(http_t *http)/* I - HTTP connection */ { ipp_t *request; /* IPP request data */ const char *var, /* Form variable */ *user; /* Username */ int id; /* Subscription ID */ /* * See if we have all of the required information... */ if ((var = cgiGetVariable("NOTIFY_SUBSCRIPTION_ID")) != NULL) id = atoi(var); else id = 0; if (id <= 0) { cgiSetVariable("ERROR", cgiText(_("Bad subscription ID"))); cgiStartHTML(_("Cancel RSS Subscription")); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } /* * Require a username... */ if ((user = getenv("REMOTE_USER")) == NULL) { puts("Status: 401\n"); exit(0); } /* * Cancel the subscription... */ request = ippNewRequest(IPP_CANCEL_SUBSCRIPTION); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/"); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "notify-subscription-id", id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); ippDelete(cupsDoRequest(http, request, "/")); if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() > IPP_OK_CONFLICT) { cgiStartHTML(_("Cancel RSS Subscription")); cgiShowIPPError(_("Unable to cancel RSS subscription")); } else { /* * Redirect successful updates back to the admin page... */ cgiSetVariable("refresh_page", "5;URL=/admin"); cgiStartHTML(_("Cancel RSS Subscription")); cgiCopyTemplateLang("subscription-canceled.tmpl"); } cgiEndHTML(); } /* * 'do_config_server()' - Configure server settings. */ static void do_config_server(http_t *http) /* I - HTTP connection */ { if (cgiGetVariable("CHANGESETTINGS")) { /* * Save basic setting changes... */ int num_settings; /* Number of server settings */ cups_option_t *settings; /* Server settings */ int advanced, /* Advanced settings shown? */ changed; /* Have settings changed? */ const char *debug_logging, /* DEBUG_LOGGING value */ *preserve_jobs = NULL, /* PRESERVE_JOBS value */ *remote_admin, /* REMOTE_ADMIN value */ *remote_any, /* REMOTE_ANY value */ *share_printers,/* SHARE_PRINTERS value */ *user_cancel_any, /* USER_CANCEL_ANY value */ *browse_web_if = NULL, /* BrowseWebIF value */ *preserve_job_history = NULL, /* PreserveJobHistory value */ *preserve_job_files = NULL, /* PreserveJobFiles value */ *max_clients = NULL, /* MaxClients value */ *max_jobs = NULL, /* MaxJobs value */ *max_log_size = NULL; /* MaxLogSize value */ const char *current_browse_web_if, /* BrowseWebIF value */ *current_preserve_job_history, /* PreserveJobHistory value */ *current_preserve_job_files, /* PreserveJobFiles value */ *current_max_clients, /* MaxClients value */ *current_max_jobs, /* MaxJobs value */ *current_max_log_size; /* MaxLogSize value */ #ifdef HAVE_GSSAPI char default_auth_type[255]; /* DefaultAuthType value */ const char *val; /* Setting value */ #endif /* HAVE_GSSAPI */ /* * Get the checkbox values from the form... */ debug_logging = cgiGetVariable("DEBUG_LOGGING") ? "1" : "0"; remote_admin = cgiGetVariable("REMOTE_ADMIN") ? "1" : "0"; remote_any = cgiGetVariable("REMOTE_ANY") ? "1" : "0"; share_printers = cgiGetVariable("SHARE_PRINTERS") ? "1" : "0"; user_cancel_any = cgiGetVariable("USER_CANCEL_ANY") ? "1" : "0"; advanced = cgiGetVariable("ADVANCEDSETTINGS") != NULL; if (advanced) { /* * Get advanced settings... */ browse_web_if = cgiGetVariable("BROWSE_WEB_IF") ? "Yes" : "No"; max_clients = cgiGetVariable("MAX_CLIENTS"); max_log_size = cgiGetVariable("MAX_LOG_SIZE"); preserve_jobs = cgiGetVariable("PRESERVE_JOBS"); if (preserve_jobs) { max_jobs = cgiGetVariable("MAX_JOBS"); preserve_job_history = cgiGetVariable("PRESERVE_JOB_HISTORY"); preserve_job_files = cgiGetVariable("PRESERVE_JOB_FILES"); if (!max_jobs || atoi(max_jobs) < 0) max_jobs = "500"; if (!preserve_job_history) preserve_job_history = "On"; if (!preserve_job_files) preserve_job_files = "1d"; } else { max_jobs = "0"; preserve_job_history = "No"; preserve_job_files = "No"; } if (!max_clients || atoi(max_clients) <= 0) max_clients = "100"; if (!max_log_size || atoi(max_log_size) <= 0.0) max_log_size = "1m"; } /* * Get the current server settings... */ if (!cupsAdminGetServerSettings(http, &num_settings, &settings)) { cgiStartHTML(cgiText(_("Change Settings"))); cgiSetVariable("MESSAGE", cgiText(_("Unable to change server settings"))); cgiSetVariable("ERROR", cupsLastErrorString()); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } #ifdef HAVE_GSSAPI /* * Get authentication settings... */ if (cgiGetVariable("KERBEROS")) strlcpy(default_auth_type, "Negotiate", sizeof(default_auth_type)); else { val = cupsGetOption("DefaultAuthType", num_settings, settings); if (!val || !_cups_strcasecmp(val, "Negotiate")) strlcpy(default_auth_type, "Basic", sizeof(default_auth_type)); else strlcpy(default_auth_type, val, sizeof(default_auth_type)); } fprintf(stderr, "DEBUG: DefaultAuthType %s\n", default_auth_type); #endif /* HAVE_GSSAPI */ if ((current_browse_web_if = cupsGetOption("BrowseWebIF", num_settings, settings)) == NULL) current_browse_web_if = "No"; if ((current_preserve_job_history = cupsGetOption("PreserveJobHistory", num_settings, settings)) == NULL) current_preserve_job_history = "Yes"; if ((current_preserve_job_files = cupsGetOption("PreserveJobFiles", num_settings, settings)) == NULL) current_preserve_job_files = "1d"; if ((current_max_clients = cupsGetOption("MaxClients", num_settings, settings)) == NULL) current_max_clients = "100"; if ((current_max_jobs = cupsGetOption("MaxJobs", num_settings, settings)) == NULL) current_max_jobs = "500"; if ((current_max_log_size = cupsGetOption("MaxLogSize", num_settings, settings)) == NULL) current_max_log_size = "1m"; /* * See if the settings have changed... */ changed = strcmp(debug_logging, cupsGetOption(CUPS_SERVER_DEBUG_LOGGING, num_settings, settings)) || strcmp(remote_admin, cupsGetOption(CUPS_SERVER_REMOTE_ADMIN, num_settings, settings)) || strcmp(remote_any, cupsGetOption(CUPS_SERVER_REMOTE_ANY, num_settings, settings)) || strcmp(share_printers, cupsGetOption(CUPS_SERVER_SHARE_PRINTERS, num_settings, settings)) || #ifdef HAVE_GSSAPI !cupsGetOption("DefaultAuthType", num_settings, settings) || strcmp(default_auth_type, cupsGetOption("DefaultAuthType", num_settings, settings)) || #endif /* HAVE_GSSAPI */ strcmp(user_cancel_any, cupsGetOption(CUPS_SERVER_USER_CANCEL_ANY, num_settings, settings)); if (advanced && !changed) changed = _cups_strcasecmp(browse_web_if, current_browse_web_if) || _cups_strcasecmp(preserve_job_history, current_preserve_job_history) || _cups_strcasecmp(preserve_job_files, current_preserve_job_files) || _cups_strcasecmp(max_clients, current_max_clients) || _cups_strcasecmp(max_jobs, current_max_jobs) || _cups_strcasecmp(max_log_size, current_max_log_size); if (changed) { /* * Settings *have* changed, so save the changes... */ cupsFreeOptions(num_settings, settings); num_settings = 0; num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING, debug_logging, num_settings, &settings); num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN, remote_admin, num_settings, &settings); num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ANY, remote_any, num_settings, &settings); num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS, share_printers, num_settings, &settings); num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY, user_cancel_any, num_settings, &settings); #ifdef HAVE_GSSAPI num_settings = cupsAddOption("DefaultAuthType", default_auth_type, num_settings, &settings); #endif /* HAVE_GSSAPI */ if (advanced) { /* * Add advanced settings... */ if (_cups_strcasecmp(browse_web_if, current_browse_web_if)) num_settings = cupsAddOption("BrowseWebIF", browse_web_if, num_settings, &settings); if (_cups_strcasecmp(preserve_job_history, current_preserve_job_history)) num_settings = cupsAddOption("PreserveJobHistory", preserve_job_history, num_settings, &settings); if (_cups_strcasecmp(preserve_job_files, current_preserve_job_files)) num_settings = cupsAddOption("PreserveJobFiles", preserve_job_files, num_settings, &settings); if (_cups_strcasecmp(max_clients, current_max_clients)) num_settings = cupsAddOption("MaxClients", max_clients, num_settings, &settings); if (_cups_strcasecmp(max_jobs, current_max_jobs)) num_settings = cupsAddOption("MaxJobs", max_jobs, num_settings, &settings); if (_cups_strcasecmp(max_log_size, current_max_log_size)) num_settings = cupsAddOption("MaxLogSize", max_log_size, num_settings, &settings); } if (!cupsAdminSetServerSettings(http, num_settings, settings)) { if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } cgiStartHTML(cgiText(_("Change Settings"))); cgiSetVariable("MESSAGE", cgiText(_("Unable to change server settings"))); cgiSetVariable("ERROR", cupsLastErrorString()); cgiCopyTemplateLang("error.tmpl"); } else { if (advanced) cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect&" "URL=/admin/?ADVANCEDSETTINGS=YES"); else cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect"); cgiStartHTML(cgiText(_("Change Settings"))); cgiCopyTemplateLang("restart.tmpl"); } } else { /* * No changes... */ cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect"); cgiStartHTML(cgiText(_("Change Settings"))); cgiCopyTemplateLang("norestart.tmpl"); } cupsFreeOptions(num_settings, settings); cgiEndHTML(); } else if (cgiGetVariable("SAVECHANGES") && cgiGetVariable("CUPSDCONF")) { /* * Save hand-edited config file... */ http_status_t status; /* PUT status */ char tempfile[1024]; /* Temporary new cupsd.conf */ int tempfd; /* Temporary file descriptor */ cups_file_t *temp; /* Temporary file */ const char *start, /* Start of line */ *end; /* End of line */ /* * Create a temporary file for the new cupsd.conf file... */ if ((tempfd = cupsTempFd(tempfile, sizeof(tempfile))) < 0) { cgiStartHTML(cgiText(_("Edit Configuration File"))); cgiSetVariable("MESSAGE", cgiText(_("Unable to create temporary file"))); cgiSetVariable("ERROR", strerror(errno)); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); perror(tempfile); return; } if ((temp = cupsFileOpenFd(tempfd, "w")) == NULL) { cgiStartHTML(cgiText(_("Edit Configuration File"))); cgiSetVariable("MESSAGE", cgiText(_("Unable to create temporary file"))); cgiSetVariable("ERROR", strerror(errno)); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); perror(tempfile); close(tempfd); unlink(tempfile); return; } /* * Copy the cupsd.conf text from the form variable... */ start = cgiGetVariable("CUPSDCONF"); while (start) { if ((end = strstr(start, "\r\n")) == NULL) if ((end = strstr(start, "\n")) == NULL) end = start + strlen(start); cupsFileWrite(temp, start, (size_t)(end - start)); cupsFilePutChar(temp, '\n'); if (*end == '\r') start = end + 2; else if (*end == '\n') start = end + 1; else start = NULL; } cupsFileClose(temp); /* * Upload the configuration file to the server... */ status = cupsPutFile(http, "/admin/conf/cupsd.conf", tempfile); if (status == HTTP_UNAUTHORIZED) { puts("Status: 401\n"); unlink(tempfile); exit(0); } else if (status != HTTP_CREATED) { cgiSetVariable("MESSAGE", cgiText(_("Unable to upload cupsd.conf file"))); cgiSetVariable("ERROR", httpStatus(status)); cgiStartHTML(cgiText(_("Edit Configuration File"))); cgiCopyTemplateLang("error.tmpl"); } else { cgiSetVariable("refresh_page", "5;URL=/admin/"); cgiStartHTML(cgiText(_("Edit Configuration File"))); cgiCopyTemplateLang("restart.tmpl"); } cgiEndHTML(); unlink(tempfile); } else { struct stat info; /* cupsd.conf information */ cups_file_t *cupsd; /* cupsd.conf file */ char *buffer, /* Buffer for entire file */ *bufptr, /* Pointer into buffer */ *bufend; /* End of buffer */ int ch; /* Character from file */ char filename[1024]; /* Filename */ const char *server_root; /* Location of config files */ /* * Locate the cupsd.conf file... */ if ((server_root = getenv("CUPS_SERVERROOT")) == NULL) server_root = CUPS_SERVERROOT; snprintf(filename, sizeof(filename), "%s/cupsd.conf", server_root); /* * Figure out the size... */ if (stat(filename, &info)) { cgiStartHTML(cgiText(_("Edit Configuration File"))); cgiSetVariable("MESSAGE", cgiText(_("Unable to access cupsd.conf file"))); cgiSetVariable("ERROR", strerror(errno)); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); perror(filename); return; } if (info.st_size > (1024 * 1024)) { cgiStartHTML(cgiText(_("Edit Configuration File"))); cgiSetVariable("MESSAGE", cgiText(_("Unable to access cupsd.conf file"))); cgiSetVariable("ERROR", cgiText(_("Unable to edit cupsd.conf files larger than " "1MB"))); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); fprintf(stderr, "ERROR: \"%s\" too large (%ld) to edit!\n", filename, (long)info.st_size); return; } /* * Open the cupsd.conf file... */ if ((cupsd = cupsFileOpen(filename, "r")) == NULL) { /* * Unable to open - log an error... */ cgiStartHTML(cgiText(_("Edit Configuration File"))); cgiSetVariable("MESSAGE", cgiText(_("Unable to access cupsd.conf file"))); cgiSetVariable("ERROR", strerror(errno)); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); perror(filename); return; } /* * Allocate memory and load the file into a string buffer... */ if ((buffer = calloc(1, (size_t)info.st_size + 1)) != NULL) { cupsFileRead(cupsd, buffer, (size_t)info.st_size); cgiSetVariable("CUPSDCONF", buffer); free(buffer); } cupsFileClose(cupsd); /* * Then get the default cupsd.conf file and put that into a string as * well... */ strlcat(filename, ".default", sizeof(filename)); if (!stat(filename, &info) && info.st_size < (1024 * 1024) && (cupsd = cupsFileOpen(filename, "r")) != NULL) { if ((buffer = calloc(1, 2 * (size_t)info.st_size + 1)) != NULL) { bufend = buffer + 2 * info.st_size - 1; for (bufptr = buffer; bufptr < bufend && (ch = cupsFileGetChar(cupsd)) != EOF;) { if (ch == '\\' || ch == '\"') { *bufptr++ = '\\'; *bufptr++ = (char)ch; } else if (ch == '\n') { *bufptr++ = '\\'; *bufptr++ = 'n'; } else if (ch == '\t') { *bufptr++ = '\\'; *bufptr++ = 't'; } else if (ch >= ' ') *bufptr++ = (char)ch; } *bufptr = '\0'; cgiSetVariable("CUPSDCONF_DEFAULT", buffer); free(buffer); } cupsFileClose(cupsd); } /* * Show the current config file... */ cgiStartHTML(cgiText(_("Edit Configuration File"))); cgiCopyTemplateLang("edit-config.tmpl"); cgiEndHTML(); } } /* * 'do_delete_class()' - Delete a class. */ static void do_delete_class(http_t *http) /* I - HTTP connection */ { ipp_t *request; /* IPP request */ char uri[HTTP_MAX_URI]; /* Job URI */ const char *pclass; /* Printer class name */ /* * Get form variables... */ if (cgiGetVariable("CONFIRM") == NULL) { cgiStartHTML(cgiText(_("Delete Class"))); cgiCopyTemplateLang("class-confirm.tmpl"); cgiEndHTML(); return; } if ((pclass = cgiGetVariable("PRINTER_NAME")) != NULL) httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/classes/%s", pclass); else { cgiStartHTML(cgiText(_("Delete Class"))); cgiSetVariable("ERROR", cgiText(_("Missing form variable"))); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } /* * Build a CUPS_DELETE_CLASS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(CUPS_DELETE_CLASS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(http, request, "/admin/")); /* * Show the results... */ if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() <= IPP_OK_CONFLICT) { /* * Redirect successful updates back to the classes page... */ cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect&URL=/classes"); } cgiStartHTML(cgiText(_("Delete Class"))); if (cupsLastError() > IPP_OK_CONFLICT) cgiShowIPPError(_("Unable to delete class")); else cgiCopyTemplateLang("class-deleted.tmpl"); cgiEndHTML(); } /* * 'do_delete_printer()' - Delete a printer. */ static void do_delete_printer(http_t *http) /* I - HTTP connection */ { ipp_t *request; /* IPP request */ char uri[HTTP_MAX_URI]; /* Job URI */ const char *printer; /* Printer printer name */ /* * Get form variables... */ if (cgiGetVariable("CONFIRM") == NULL) { cgiStartHTML(cgiText(_("Delete Printer"))); cgiCopyTemplateLang("printer-confirm.tmpl"); cgiEndHTML(); return; } if ((printer = cgiGetVariable("PRINTER_NAME")) != NULL) httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", printer); else { cgiStartHTML(cgiText(_("Delete Printer"))); cgiSetVariable("ERROR", cgiText(_("Missing form variable"))); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } /* * Build a CUPS_DELETE_PRINTER request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(CUPS_DELETE_PRINTER); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(http, request, "/admin/")); /* * Show the results... */ if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() <= IPP_OK_CONFLICT) { /* * Redirect successful updates back to the printers page... */ cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect&URL=/printers"); } cgiStartHTML(cgiText(_("Delete Printer"))); if (cupsLastError() > IPP_OK_CONFLICT) cgiShowIPPError(_("Unable to delete printer")); else cgiCopyTemplateLang("printer-deleted.tmpl"); cgiEndHTML(); } /* * 'do_export()' - Export printers to Samba. */ static void do_export(http_t *http) /* I - HTTP connection */ { int i, j; /* Looping vars */ ipp_t *request, /* IPP request */ *response; /* IPP response */ const char *username, /* Samba username */ *password, /* Samba password */ *export_all; /* Export all printers? */ int export_count, /* Number of printers to export */ printer_count; /* Number of available printers */ const char *name, /* What name to pull */ *dest; /* Current destination */ char ppd[1024]; /* PPD file */ /* * Get form data... */ username = cgiGetVariable("USERNAME"); password = cgiGetVariable("PASSWORD"); export_all = cgiGetVariable("EXPORT_ALL"); export_count = cgiGetSize("EXPORT_NAME"); /* * Get list of available printers... */ cgiSetSize("PRINTER_NAME", 0); cgiSetSize("PRINTER_EXPORT", 0); request = ippNewRequest(CUPS_GET_PRINTERS); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type", 0); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type-mask", CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "printer-name"); if ((response = cupsDoRequest(http, request, "/")) != NULL) { cgiSetIPPVars(response, NULL, NULL, NULL, 0); ippDelete(response); if (!export_all) { printer_count = cgiGetSize("PRINTER_NAME"); for (i = 0; i < printer_count; i ++) { dest = cgiGetArray("PRINTER_NAME", i); for (j = 0; j < export_count; j ++) if (!_cups_strcasecmp(dest, cgiGetArray("EXPORT_NAME", j))) break; cgiSetArray("PRINTER_EXPORT", i, j < export_count ? "Y" : ""); } } } /* * Export or get the printers to export... */ if (username && *username && password && *password && (export_all || export_count > 0)) { /* * Do export... */ fputs("DEBUG: Export printers...\n", stderr); if (export_all) { name = "PRINTER_NAME"; export_count = cgiGetSize("PRINTER_NAME"); } else name = "EXPORT_NAME"; for (i = 0; i < export_count; i ++) { dest = cgiGetArray(name, i); if (!cupsAdminCreateWindowsPPD(http, dest, ppd, sizeof(ppd))) break; j = cupsAdminExportSamba(dest, ppd, "localhost", username, password, stderr); unlink(ppd); if (!j) break; } if (i < export_count) cgiSetVariable("ERROR", cupsLastErrorString()); else { cgiStartHTML(cgiText(_("Export Printers to Samba"))); cgiCopyTemplateLang("samba-exported.tmpl"); cgiEndHTML(); return; } } else if (username && !*username) cgiSetVariable("ERROR", cgiText(_("A Samba username is required to export " "printer drivers"))); else if (username && (!password || !*password)) cgiSetVariable("ERROR", cgiText(_("A Samba password is required to export " "printer drivers"))); /* * Show form... */ cgiStartHTML(cgiText(_("Export Printers to Samba"))); cgiCopyTemplateLang("samba-export.tmpl"); cgiEndHTML(); } /* * 'do_list_printers()' - List available printers. */ static void do_list_printers(http_t *http) /* I - HTTP connection */ { ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* IPP attribute */ cgiStartHTML(cgiText(_("List Available Printers"))); fflush(stdout); /* * Get the list of printers and their devices... */ request = ippNewRequest(CUPS_GET_PRINTERS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "device-uri"); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type", CUPS_PRINTER_LOCAL); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type-mask", CUPS_PRINTER_LOCAL); if ((response = cupsDoRequest(http, request, "/")) != NULL) { /* * Got the printer list, now load the devices... */ int i; /* Looping var */ cups_array_t *printer_devices; /* Printer devices for local printers */ char *printer_device; /* Current printer device */ /* * Allocate an array and copy the device strings... */ printer_devices = cupsArrayNew((cups_array_func_t)strcmp, NULL); for (attr = ippFindAttribute(response, "device-uri", IPP_TAG_URI); attr; attr = ippFindNextAttribute(response, "device-uri", IPP_TAG_URI)) { cupsArrayAdd(printer_devices, _cupsStrAlloc(attr->values[0].string.text)); } /* * Free the printer list and get the device list... */ ippDelete(response); request = ippNewRequest(CUPS_GET_DEVICES); if ((response = cupsDoRequest(http, request, "/")) != NULL) { /* * Got the device list, let's parse it... */ const char *device_uri, /* device-uri attribute value */ *device_make_and_model, /* device-make-and-model value */ *device_info; /* device-info value */ for (i = 0, attr = response->attrs; attr; attr = attr->next) { /* * Skip leading attributes until we hit a device... */ while (attr && attr->group_tag != IPP_TAG_PRINTER) attr = attr->next; if (!attr) break; /* * Pull the needed attributes from this device... */ device_info = NULL; device_make_and_model = NULL; device_uri = NULL; while (attr && attr->group_tag == IPP_TAG_PRINTER) { if (!strcmp(attr->name, "device-info") && attr->value_tag == IPP_TAG_TEXT) device_info = attr->values[0].string.text; if (!strcmp(attr->name, "device-make-and-model") && attr->value_tag == IPP_TAG_TEXT) device_make_and_model = attr->values[0].string.text; if (!strcmp(attr->name, "device-uri") && attr->value_tag == IPP_TAG_URI) device_uri = attr->values[0].string.text; attr = attr->next; } /* * See if we have everything needed... */ if (device_info && device_make_and_model && device_uri && _cups_strcasecmp(device_make_and_model, "unknown") && strchr(device_uri, ':')) { /* * Yes, now see if there is already a printer for this * device... */ if (!cupsArrayFind(printer_devices, (void *)device_uri)) { /* * Not found, so it must be a new printer... */ char option[1024], /* Form variables for this device */ *option_ptr; /* Pointer into string */ const char *ptr; /* Pointer into device string */ /* * Format the printer name variable for this device... * * We use the device-info string first, then device-uri, * and finally device-make-and-model to come up with a * suitable name. */ if (_cups_strncasecmp(device_info, "unknown", 7)) ptr = device_info; else if ((ptr = strstr(device_uri, "://")) != NULL) ptr += 3; else ptr = device_make_and_model; for (option_ptr = option; option_ptr < (option + sizeof(option) - 1) && *ptr; ptr ++) if (isalnum(*ptr & 255) || *ptr == '_' || *ptr == '-' || *ptr == '.') *option_ptr++ = *ptr; else if ((*ptr == ' ' || *ptr == '/') && option_ptr > option && option_ptr[-1] != '_') *option_ptr++ = '_'; else if (*ptr == '?' || *ptr == '(') break; *option_ptr = '\0'; cgiSetArray("TEMPLATE_NAME", i, option); /* * Finally, set the form variables for this printer... */ cgiSetArray("device_info", i, device_info); cgiSetArray("device_make_and_model", i, device_make_and_model); cgiSetArray("device_uri", i, device_uri); i ++; } } if (!attr) break; } ippDelete(response); /* * Free the device list... */ for (printer_device = (char *)cupsArrayFirst(printer_devices); printer_device; printer_device = (char *)cupsArrayNext(printer_devices)) _cupsStrFree(printer_device); cupsArrayDelete(printer_devices); } } /* * Finally, show the printer list... */ cgiCopyTemplateLang("list-available-printers.tmpl"); cgiEndHTML(); } /* * 'do_menu()' - Show the main menu. */ static void do_menu(http_t *http) /* I - HTTP connection */ { int num_settings; /* Number of server settings */ cups_option_t *settings; /* Server settings */ const char *val; /* Setting value */ char filename[1024]; /* Temporary filename */ const char *datadir; /* Location of data files */ ipp_t *request, /* IPP request */ *response; /* IPP response */ /* * Get the current server settings... */ if (!cupsAdminGetServerSettings(http, &num_settings, &settings)) { cgiSetVariable("SETTINGS_MESSAGE", cgiText(_("Unable to open cupsd.conf file:"))); cgiSetVariable("SETTINGS_ERROR", cupsLastErrorString()); } if ((val = cupsGetOption(CUPS_SERVER_DEBUG_LOGGING, num_settings, settings)) != NULL && atoi(val)) cgiSetVariable("DEBUG_LOGGING", "CHECKED"); if ((val = cupsGetOption(CUPS_SERVER_REMOTE_ADMIN, num_settings, settings)) != NULL && atoi(val)) cgiSetVariable("REMOTE_ADMIN", "CHECKED"); if ((val = cupsGetOption(CUPS_SERVER_REMOTE_ANY, num_settings, settings)) != NULL && atoi(val)) cgiSetVariable("REMOTE_ANY", "CHECKED"); if ((val = cupsGetOption(CUPS_SERVER_SHARE_PRINTERS, num_settings, settings)) != NULL && atoi(val)) cgiSetVariable("SHARE_PRINTERS", "CHECKED"); if ((val = cupsGetOption(CUPS_SERVER_USER_CANCEL_ANY, num_settings, settings)) != NULL && atoi(val)) cgiSetVariable("USER_CANCEL_ANY", "CHECKED"); #ifdef HAVE_GSSAPI cgiSetVariable("HAVE_GSSAPI", "1"); if ((val = cupsGetOption("DefaultAuthType", num_settings, settings)) != NULL && !_cups_strcasecmp(val, "Negotiate")) cgiSetVariable("KERBEROS", "CHECKED"); else #endif /* HAVE_GSSAPI */ cgiSetVariable("KERBEROS", ""); if ((val = cupsGetOption("BrowseWebIF", num_settings, settings)) == NULL) val = "No"; if (!_cups_strcasecmp(val, "yes") || !_cups_strcasecmp(val, "on") || !_cups_strcasecmp(val, "true")) cgiSetVariable("BROWSE_WEB_IF", "CHECKED"); if ((val = cupsGetOption("PreserveJobHistory", num_settings, settings)) == NULL) val = "Yes"; if (val && (!_cups_strcasecmp(val, "0") || !_cups_strcasecmp(val, "no") || !_cups_strcasecmp(val, "off") || !_cups_strcasecmp(val, "false") || !_cups_strcasecmp(val, "disabled"))) { cgiSetVariable("PRESERVE_JOB_HISTORY", "0"); cgiSetVariable("PRESERVE_JOB_FILES", "0"); } else { cgiSetVariable("PRESERVE_JOBS", "CHECKED"); cgiSetVariable("PRESERVE_JOB_HISTORY", val); if ((val = cupsGetOption("PreserveJobFiles", num_settings, settings)) == NULL) val = "1d"; cgiSetVariable("PRESERVE_JOB_FILES", val); } if ((val = cupsGetOption("MaxClients", num_settings, settings)) == NULL) val = "100"; cgiSetVariable("MAX_CLIENTS", val); if ((val = cupsGetOption("MaxJobs", num_settings, settings)) == NULL) val = "500"; cgiSetVariable("MAX_JOBS", val); if ((val = cupsGetOption("MaxLogSize", num_settings, settings)) == NULL) val = "1m"; cgiSetVariable("MAX_LOG_SIZE", val); cupsFreeOptions(num_settings, settings); /* * See if Samba and the Windows drivers are installed... */ if ((datadir = getenv("CUPS_DATADIR")) == NULL) datadir = CUPS_DATADIR; snprintf(filename, sizeof(filename), "%s/drivers/pscript5.dll", datadir); if (!access(filename, R_OK)) { /* * Found Windows 2000 driver file, see if we have smbclient and * rpcclient... */ if (cupsFileFind("smbclient", getenv("PATH"), 1, filename, sizeof(filename)) && cupsFileFind("rpcclient", getenv("PATH"), 1, filename, sizeof(filename))) cgiSetVariable("HAVE_SAMBA", "Y"); else { if (!cupsFileFind("smbclient", getenv("PATH"), 1, filename, sizeof(filename))) fputs("ERROR: smbclient not found!\n", stderr); if (!cupsFileFind("rpcclient", getenv("PATH"), 1, filename, sizeof(filename))) fputs("ERROR: rpcclient not found!\n", stderr); } } else perror(filename); /* * Subscriptions... */ request = ippNewRequest(IPP_GET_SUBSCRIPTIONS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/"); if ((response = cupsDoRequest(http, request, "/")) != NULL) { cgiSetIPPVars(response, NULL, NULL, NULL, 0); ippDelete(response); } /* * Finally, show the main menu template... */ cgiStartHTML(cgiText(_("Administration"))); cgiCopyTemplateLang("admin.tmpl"); cgiEndHTML(); } /* * 'do_set_allowed_users()' - Set the allowed/denied users for a queue. */ static void do_set_allowed_users(http_t *http) /* I - HTTP connection */ { int i; /* Looping var */ ipp_t *request, /* IPP request */ *response; /* IPP response */ char uri[HTTP_MAX_URI]; /* Printer URI */ const char *printer, /* Printer name (purge-jobs) */ *is_class, /* Is a class? */ *users, /* List of users or groups */ *type; /* Allow/deny type */ int num_users; /* Number of users */ char *ptr, /* Pointer into users string */ *end, /* Pointer to end of users string */ quote; /* Quote character */ ipp_attribute_t *attr; /* Attribute */ static const char * const attrs[] = /* Requested attributes */ { "requesting-user-name-allowed", "requesting-user-name-denied" }; is_class = cgiGetVariable("IS_CLASS"); printer = cgiGetVariable("PRINTER_NAME"); if (!printer) { cgiSetVariable("ERROR", cgiText(_("Missing form variable"))); cgiStartHTML(cgiText(_("Set Allowed Users"))); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } users = cgiGetVariable("users"); type = cgiGetVariable("type"); if (!users || !type || (strcmp(type, "requesting-user-name-allowed") && strcmp(type, "requesting-user-name-denied"))) { /* * Build a Get-Printer-Attributes request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requested-attributes */ request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, is_class ? "/classes/%s" : "/printers/%s", printer); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(attrs) / sizeof(attrs[0])), NULL, attrs); /* * Do the request and get back a response... */ if ((response = cupsDoRequest(http, request, "/")) != NULL) { cgiSetIPPVars(response, NULL, NULL, NULL, 0); ippDelete(response); } cgiStartHTML(cgiText(_("Set Allowed Users"))); if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() > IPP_OK_CONFLICT) cgiShowIPPError(_("Unable to get printer attributes")); else cgiCopyTemplateLang("users.tmpl"); cgiEndHTML(); } else { /* * Save the changes... */ for (num_users = 0, ptr = (char *)users; *ptr; num_users ++) { /* * Skip whitespace and commas... */ while (*ptr == ',' || isspace(*ptr & 255)) ptr ++; if (!*ptr) break; if (*ptr == '\'' || *ptr == '\"') { /* * Scan quoted name... */ quote = *ptr++; for (end = ptr; *end; end ++) if (*end == quote) break; } else { /* * Scan space or comma-delimited name... */ for (end = ptr; *end; end ++) if (isspace(*end & 255) || *end == ',') break; } /* * Advance to the next name... */ ptr = end; } /* * Build a CUPS-Add-Printer/Class request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name-{allowed,denied} */ request = ippNewRequest(is_class ? CUPS_ADD_CLASS : CUPS_ADD_PRINTER); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, is_class ? "/classes/%s" : "/printers/%s", printer); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); if (num_users == 0) ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "requesting-user-name-allowed", NULL, "all"); else { attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_NAME, type, num_users, NULL, NULL); for (i = 0, ptr = (char *)users; *ptr; i ++) { /* * Skip whitespace and commas... */ while (*ptr == ',' || isspace(*ptr & 255)) ptr ++; if (!*ptr) break; if (*ptr == '\'' || *ptr == '\"') { /* * Scan quoted name... */ quote = *ptr++; for (end = ptr; *end; end ++) if (*end == quote) break; } else { /* * Scan space or comma-delimited name... */ for (end = ptr; *end; end ++) if (isspace(*end & 255) || *end == ',') break; } /* * Terminate the name... */ if (*end) *end++ = '\0'; /* * Add the name... */ attr->values[i].string.text = _cupsStrAlloc(ptr); /* * Advance to the next name... */ ptr = end; } } /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(http, request, "/admin/")); if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() > IPP_OK_CONFLICT) { cgiStartHTML(cgiText(_("Set Allowed Users"))); cgiShowIPPError(_("Unable to change printer")); } else { /* * Redirect successful updates back to the printer page... */ char url[1024], /* Printer/class URL */ refresh[1024]; /* Refresh URL */ cgiRewriteURL(uri, url, sizeof(url), NULL); cgiFormEncode(uri, url, sizeof(uri)); snprintf(refresh, sizeof(refresh), "5;URL=/admin/?OP=redirect&URL=%s", uri); cgiSetVariable("refresh_page", refresh); cgiStartHTML(cgiText(_("Set Allowed Users"))); cgiCopyTemplateLang(is_class ? "class-modified.tmpl" : "printer-modified.tmpl"); } cgiEndHTML(); } } /* * 'do_set_default()' - Set the server default printer/class. */ static void do_set_default(http_t *http) /* I - HTTP connection */ { const char *title; /* Page title */ ipp_t *request; /* IPP request */ char uri[HTTP_MAX_URI]; /* Printer URI */ const char *printer, /* Printer name (purge-jobs) */ *is_class; /* Is a class? */ is_class = cgiGetVariable("IS_CLASS"); printer = cgiGetVariable("PRINTER_NAME"); title = cgiText(_("Set As Server Default")); if (!printer) { cgiSetVariable("ERROR", cgiText(_("Missing form variable"))); cgiStartHTML(title); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } /* * Build a printer request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(CUPS_SET_DEFAULT); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, is_class ? "/classes/%s" : "/printers/%s", printer); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(http, request, "/admin/")); if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() > IPP_OK_CONFLICT) { cgiStartHTML(title); cgiShowIPPError(_("Unable to set server default")); } else { /* * Redirect successful updates back to the printer page... */ char url[1024], /* Printer/class URL */ refresh[1024]; /* Refresh URL */ cgiRewriteURL(uri, url, sizeof(url), NULL); cgiFormEncode(uri, url, sizeof(uri)); snprintf(refresh, sizeof(refresh), "5;URL=/admin/?OP=redirect&URL=%s", uri); cgiSetVariable("refresh_page", refresh); cgiStartHTML(title); cgiCopyTemplateLang("printer-default.tmpl"); } cgiEndHTML(); } /* * 'do_set_options()' - Configure the default options for a queue. */ static void do_set_options(http_t *http, /* I - HTTP connection */ int is_class) /* I - Set options for class? */ { int i, j, k, m; /* Looping vars */ int have_options; /* Have options? */ ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* IPP attribute */ char uri[HTTP_MAX_URI]; /* Job URI */ const char *var; /* Variable value */ const char *printer; /* Printer printer name */ const char *filename; /* PPD filename */ char tempfile[1024]; /* Temporary filename */ cups_file_t *in, /* Input file */ *out; /* Output file */ char line[1024], /* Line from PPD file */ value[1024], /* Option value */ keyword[1024], /* Keyword from Default line */ *keyptr; /* Pointer into keyword... */ ppd_file_t *ppd; /* PPD file */ ppd_group_t *group; /* Option group */ ppd_option_t *option; /* Option */ ppd_coption_t *coption; /* Custom option */ ppd_cparam_t *cparam; /* Custom parameter */ ppd_attr_t *ppdattr; /* PPD attribute */ const char *title; /* Page title */ title = cgiText(is_class ? _("Set Class Options") : _("Set Printer Options")); fprintf(stderr, "DEBUG: do_set_options(http=%p, is_class=%d)\n", http, is_class); /* * Get the printer name... */ if ((printer = cgiGetVariable("PRINTER_NAME")) != NULL) httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, is_class ? "/classes/%s" : "/printers/%s", printer); else { cgiSetVariable("ERROR", cgiText(_("Missing form variable"))); cgiStartHTML(title); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } fprintf(stderr, "DEBUG: printer=\"%s\", uri=\"%s\"...\n", printer, uri); /* * If the user clicks on the Auto-Configure button, send an AutoConfigure * command file to the printer... */ if (cgiGetVariable("AUTOCONFIGURE")) { cgiPrintCommand(http, printer, "AutoConfigure", "Set Default Options"); return; } /* * Get the PPD file... */ if (is_class) filename = NULL; else filename = cupsGetPPD2(http, printer); if (filename) { fprintf(stderr, "DEBUG: Got PPD file: \"%s\"\n", filename); if ((ppd = ppdOpenFile(filename)) == NULL) { cgiSetVariable("ERROR", ppdErrorString(ppdLastError(&i))); cgiSetVariable("MESSAGE", cgiText(_("Unable to open PPD file"))); cgiStartHTML(title); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } } else { fputs("DEBUG: No PPD file\n", stderr); ppd = NULL; } if (cgiGetVariable("job_sheets_start") != NULL || cgiGetVariable("job_sheets_end") != NULL) have_options = 1; else have_options = 0; if (ppd) { ppdMarkDefaults(ppd); for (option = ppdFirstOption(ppd); option; option = ppdNextOption(ppd)) { if ((var = cgiGetVariable(option->keyword)) != NULL) { have_options = 1; ppdMarkOption(ppd, option->keyword, var); fprintf(stderr, "DEBUG: Set %s to %s...\n", option->keyword, var); } else fprintf(stderr, "DEBUG: Didn't find %s...\n", option->keyword); } } if (!have_options || ppdConflicts(ppd)) { /* * Show the options to the user... */ fputs("DEBUG: Showing options...\n", stderr); /* * Show auto-configure button if supported... */ if (ppd) { if (ppd->num_filters == 0 || ((ppdattr = ppdFindAttr(ppd, "cupsCommands", NULL)) != NULL && ppdattr->value && strstr(ppdattr->value, "AutoConfigure"))) cgiSetVariable("HAVE_AUTOCONFIGURE", "YES"); else { for (i = 0; i < ppd->num_filters; i ++) if (!strncmp(ppd->filters[i], "application/vnd.cups-postscript", 31)) { cgiSetVariable("HAVE_AUTOCONFIGURE", "YES"); break; } } } /* * Get the printer attributes... */ request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", printer); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); response = cupsDoRequest(http, request, "/"); /* * List the groups used as "tabs"... */ i = 0; if (ppd) { for (group = ppd->groups; i < ppd->num_groups; i ++, group ++) { cgiSetArray("GROUP_ID", i, group->name); if (!strcmp(group->name, "InstallableOptions")) cgiSetArray("GROUP", i, cgiText(_("Options Installed"))); else cgiSetArray("GROUP", i, group->text); } } if (ippFindAttribute(response, "job-sheets-supported", IPP_TAG_ZERO)) { cgiSetArray("GROUP_ID", i, "CUPS_BANNERS"); cgiSetArray("GROUP", i ++, cgiText(_("Banners"))); } if (ippFindAttribute(response, "printer-error-policy-supported", IPP_TAG_ZERO) || ippFindAttribute(response, "printer-op-policy-supported", IPP_TAG_ZERO)) { cgiSetArray("GROUP_ID", i, "CUPS_POLICIES"); cgiSetArray("GROUP", i ++, cgiText(_("Policies"))); } if ((attr = ippFindAttribute(response, "port-monitor-supported", IPP_TAG_NAME)) != NULL && attr->num_values > 1) { cgiSetArray("GROUP_ID", i, "CUPS_PORT_MONITOR"); cgiSetArray("GROUP", i, cgiText(_("Port Monitor"))); } cgiStartHTML(cgiText(_("Set Printer Options"))); cgiCopyTemplateLang("set-printer-options-header.tmpl"); if (ppd) { ppdLocalize(ppd); if (ppdConflicts(ppd)) { for (i = ppd->num_groups, k = 0, group = ppd->groups; i > 0; i --, group ++) for (j = group->num_options, option = group->options; j > 0; j --, option ++) if (option->conflicted) { cgiSetArray("ckeyword", k, option->keyword); cgiSetArray("ckeytext", k, option->text); for (m = 0; m < option->num_choices; m ++) { if (option->choices[m].marked) { cgiSetArray("cchoice", k, option->choices[m].text); break; } } k ++; } cgiCopyTemplateLang("option-conflict.tmpl"); } for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++) { for (j = group->num_options, option = group->options; j > 0; j --, option ++) { if (!strcmp(option->keyword, "PageRegion")) continue; if (option->num_choices > 1) break; } if (j == 0) continue; cgiSetVariable("GROUP_ID", group->name); if (!strcmp(group->name, "InstallableOptions")) cgiSetVariable("GROUP", cgiText(_("Options Installed"))); else cgiSetVariable("GROUP", group->text); cgiCopyTemplateLang("option-header.tmpl"); for (j = group->num_options, option = group->options; j > 0; j --, option ++) { if (!strcmp(option->keyword, "PageRegion") || option->num_choices < 2) continue; cgiSetVariable("KEYWORD", option->keyword); cgiSetVariable("KEYTEXT", option->text); if (option->conflicted) cgiSetVariable("CONFLICTED", "1"); else cgiSetVariable("CONFLICTED", "0"); cgiSetSize("CHOICES", 0); cgiSetSize("TEXT", 0); for (k = 0, m = 0; k < option->num_choices; k ++) { cgiSetArray("CHOICES", m, option->choices[k].choice); cgiSetArray("TEXT", m, option->choices[k].text); m ++; if (option->choices[k].marked) cgiSetVariable("DEFCHOICE", option->choices[k].choice); } cgiSetSize("PARAMS", 0); cgiSetSize("PARAMTEXT", 0); cgiSetSize("PARAMVALUE", 0); cgiSetSize("INPUTTYPE", 0); if ((coption = ppdFindCustomOption(ppd, option->keyword))) { const char *units = NULL; /* Units value, if any */ cgiSetVariable("ISCUSTOM", "1"); for (cparam = ppdFirstCustomParam(coption), m = 0; cparam; cparam = ppdNextCustomParam(coption), m ++) { if (!_cups_strcasecmp(option->keyword, "PageSize") && _cups_strcasecmp(cparam->name, "Width") && _cups_strcasecmp(cparam->name, "Height")) { m --; continue; } cgiSetArray("PARAMS", m, cparam->name); cgiSetArray("PARAMTEXT", m, cparam->text); cgiSetArray("INPUTTYPE", m, "text"); switch (cparam->type) { case PPD_CUSTOM_POINTS : if (!_cups_strncasecmp(option->defchoice, "Custom.", 7)) { units = option->defchoice + strlen(option->defchoice) - 2; if (strcmp(units, "mm") && strcmp(units, "cm") && strcmp(units, "in") && strcmp(units, "ft")) { if (units[1] == 'm') units ++; else units = "pt"; } } else units = "pt"; if (!strcmp(units, "mm")) snprintf(value, sizeof(value), "%g", cparam->current.custom_points / 72.0 * 25.4); else if (!strcmp(units, "cm")) snprintf(value, sizeof(value), "%g", cparam->current.custom_points / 72.0 * 2.54); else if (!strcmp(units, "in")) snprintf(value, sizeof(value), "%g", cparam->current.custom_points / 72.0); else if (!strcmp(units, "ft")) snprintf(value, sizeof(value), "%g", cparam->current.custom_points / 72.0 / 12.0); else if (!strcmp(units, "m")) snprintf(value, sizeof(value), "%g", cparam->current.custom_points / 72.0 * 0.0254); else snprintf(value, sizeof(value), "%g", cparam->current.custom_points); cgiSetArray("PARAMVALUE", m, value); break; case PPD_CUSTOM_CURVE : case PPD_CUSTOM_INVCURVE : case PPD_CUSTOM_REAL : snprintf(value, sizeof(value), "%g", cparam->current.custom_real); cgiSetArray("PARAMVALUE", m, value); break; case PPD_CUSTOM_INT: snprintf(value, sizeof(value), "%d", cparam->current.custom_int); cgiSetArray("PARAMVALUE", m, value); break; case PPD_CUSTOM_PASSCODE: case PPD_CUSTOM_PASSWORD: if (cparam->current.custom_password) cgiSetArray("PARAMVALUE", m, cparam->current.custom_password); else cgiSetArray("PARAMVALUE", m, ""); cgiSetArray("INPUTTYPE", m, "password"); break; case PPD_CUSTOM_STRING: if (cparam->current.custom_string) cgiSetArray("PARAMVALUE", m, cparam->current.custom_string); else cgiSetArray("PARAMVALUE", m, ""); break; } } if (units) { cgiSetArray("PARAMS", m, "Units"); cgiSetArray("PARAMTEXT", m, cgiText(_("Units"))); cgiSetArray("PARAMVALUE", m, units); } } else cgiSetVariable("ISCUSTOM", "0"); switch (option->ui) { case PPD_UI_BOOLEAN : cgiCopyTemplateLang("option-boolean.tmpl"); break; case PPD_UI_PICKONE : cgiCopyTemplateLang("option-pickone.tmpl"); break; case PPD_UI_PICKMANY : cgiCopyTemplateLang("option-pickmany.tmpl"); break; } } cgiCopyTemplateLang("option-trailer.tmpl"); } } if ((attr = ippFindAttribute(response, "job-sheets-supported", IPP_TAG_ZERO)) != NULL) { /* * Add the job sheets options... */ cgiSetVariable("GROUP_ID", "CUPS_BANNERS"); cgiSetVariable("GROUP", cgiText(_("Banners"))); cgiCopyTemplateLang("option-header.tmpl"); cgiSetSize("CHOICES", attr->num_values); cgiSetSize("TEXT", attr->num_values); for (k = 0; k < attr->num_values; k ++) { cgiSetArray("CHOICES", k, attr->values[k].string.text); cgiSetArray("TEXT", k, attr->values[k].string.text); } attr = ippFindAttribute(response, "job-sheets-default", IPP_TAG_ZERO); cgiSetVariable("KEYWORD", "job_sheets_start"); cgiSetVariable("KEYTEXT", /* TRANSLATORS: Banner/cover sheet before the print job. */ cgiText(_("Starting Banner"))); cgiSetVariable("DEFCHOICE", attr != NULL ? attr->values[0].string.text : ""); cgiCopyTemplateLang("option-pickone.tmpl"); cgiSetVariable("KEYWORD", "job_sheets_end"); cgiSetVariable("KEYTEXT", /* TRANSLATORS: Banner/cover sheet after the print job. */ cgiText(_("Ending Banner"))); cgiSetVariable("DEFCHOICE", attr != NULL && attr->num_values > 1 ? attr->values[1].string.text : ""); cgiCopyTemplateLang("option-pickone.tmpl"); cgiCopyTemplateLang("option-trailer.tmpl"); } if (ippFindAttribute(response, "printer-error-policy-supported", IPP_TAG_ZERO) || ippFindAttribute(response, "printer-op-policy-supported", IPP_TAG_ZERO)) { /* * Add the error and operation policy options... */ cgiSetVariable("GROUP_ID", "CUPS_POLICIES"); cgiSetVariable("GROUP", cgiText(_("Policies"))); cgiCopyTemplateLang("option-header.tmpl"); /* * Error policy... */ attr = ippFindAttribute(response, "printer-error-policy-supported", IPP_TAG_ZERO); if (attr) { cgiSetSize("CHOICES", attr->num_values); cgiSetSize("TEXT", attr->num_values); for (k = 0; k < attr->num_values; k ++) { cgiSetArray("CHOICES", k, attr->values[k].string.text); cgiSetArray("TEXT", k, attr->values[k].string.text); } attr = ippFindAttribute(response, "printer-error-policy", IPP_TAG_ZERO); cgiSetVariable("KEYWORD", "printer_error_policy"); cgiSetVariable("KEYTEXT", cgiText(_("Error Policy"))); cgiSetVariable("DEFCHOICE", attr == NULL ? "" : attr->values[0].string.text); } cgiCopyTemplateLang("option-pickone.tmpl"); /* * Operation policy... */ attr = ippFindAttribute(response, "printer-op-policy-supported", IPP_TAG_ZERO); if (attr) { cgiSetSize("CHOICES", attr->num_values); cgiSetSize("TEXT", attr->num_values); for (k = 0; k < attr->num_values; k ++) { cgiSetArray("CHOICES", k, attr->values[k].string.text); cgiSetArray("TEXT", k, attr->values[k].string.text); } attr = ippFindAttribute(response, "printer-op-policy", IPP_TAG_ZERO); cgiSetVariable("KEYWORD", "printer_op_policy"); cgiSetVariable("KEYTEXT", cgiText(_("Operation Policy"))); cgiSetVariable("DEFCHOICE", attr == NULL ? "" : attr->values[0].string.text); cgiCopyTemplateLang("option-pickone.tmpl"); } cgiCopyTemplateLang("option-trailer.tmpl"); } /* * Binary protocol support... */ if ((attr = ippFindAttribute(response, "port-monitor-supported", IPP_TAG_NAME)) != NULL && attr->num_values > 1) { cgiSetVariable("GROUP_ID", "CUPS_PORT_MONITOR"); cgiSetVariable("GROUP", cgiText(_("Port Monitor"))); cgiSetSize("CHOICES", attr->num_values); cgiSetSize("TEXT", attr->num_values); for (i = 0; i < attr->num_values; i ++) { cgiSetArray("CHOICES", i, attr->values[i].string.text); cgiSetArray("TEXT", i, attr->values[i].string.text); } attr = ippFindAttribute(response, "port-monitor", IPP_TAG_NAME); cgiSetVariable("KEYWORD", "port_monitor"); cgiSetVariable("KEYTEXT", cgiText(_("Port Monitor"))); cgiSetVariable("DEFCHOICE", attr ? attr->values[0].string.text : "none"); cgiCopyTemplateLang("option-header.tmpl"); cgiCopyTemplateLang("option-pickone.tmpl"); cgiCopyTemplateLang("option-trailer.tmpl"); } cgiCopyTemplateLang("set-printer-options-trailer.tmpl"); cgiEndHTML(); ippDelete(response); } else { /* * Set default options... */ fputs("DEBUG: Setting options...\n", stderr); if (filename) { out = cupsTempFile2(tempfile, sizeof(tempfile)); in = cupsFileOpen(filename, "r"); if (!in || !out) { cgiSetVariable("ERROR", strerror(errno)); cgiStartHTML(cgiText(_("Set Printer Options"))); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); if (in) cupsFileClose(in); if (out) { cupsFileClose(out); unlink(tempfile); } unlink(filename); return; } while (cupsFileGets(in, line, sizeof(line))) { if (!strncmp(line, "*cupsProtocol:", 14)) continue; else if (strncmp(line, "*Default", 8)) cupsFilePrintf(out, "%s\n", line); else { /* * Get default option name... */ strlcpy(keyword, line + 8, sizeof(keyword)); for (keyptr = keyword; *keyptr; keyptr ++) if (*keyptr == ':' || isspace(*keyptr & 255)) break; *keyptr = '\0'; if (!strcmp(keyword, "PageRegion") || !strcmp(keyword, "PaperDimension") || !strcmp(keyword, "ImageableArea")) var = get_option_value(ppd, "PageSize", value, sizeof(value)); else var = get_option_value(ppd, keyword, value, sizeof(value)); if (!var) cupsFilePrintf(out, "%s\n", line); else cupsFilePrintf(out, "*Default%s: %s\n", keyword, var); } } cupsFileClose(in); cupsFileClose(out); } else { /* * Make sure temporary filename is cleared when there is no PPD... */ tempfile[0] = '\0'; } /* * Build a CUPS_ADD_MODIFY_CLASS/PRINTER request, which requires the * following attributes: * * attributes-charset * attributes-natural-language * printer-uri * job-sheets-default * printer-error-policy * printer-op-policy * [ppd file] */ request = ippNewRequest(is_class ? CUPS_ADD_MODIFY_CLASS : CUPS_ADD_MODIFY_PRINTER); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "job-sheets-default", 2, NULL, NULL); attr->values[0].string.text = _cupsStrAlloc(cgiGetVariable("job_sheets_start")); attr->values[1].string.text = _cupsStrAlloc(cgiGetVariable("job_sheets_end")); if ((var = cgiGetVariable("printer_error_policy")) != NULL) ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-error-policy", NULL, var); if ((var = cgiGetVariable("printer_op_policy")) != NULL) ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-op-policy", NULL, var); if ((var = cgiGetVariable("port_monitor")) != NULL) ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor", NULL, var); /* * Do the request and get back a response... */ if (filename) ippDelete(cupsDoFileRequest(http, request, "/admin/", tempfile)); else ippDelete(cupsDoRequest(http, request, "/admin/")); if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() > IPP_OK_CONFLICT) { cgiStartHTML(title); cgiShowIPPError(_("Unable to set options")); } else { /* * Redirect successful updates back to the printer page... */ char refresh[1024]; /* Refresh URL */ cgiFormEncode(uri, printer, sizeof(uri)); snprintf(refresh, sizeof(refresh), "5;URL=/admin/?OP=redirect&URL=/%s/%s", is_class ? "classes" : "printers", uri); cgiSetVariable("refresh_page", refresh); cgiStartHTML(title); cgiCopyTemplateLang("printer-configured.tmpl"); } cgiEndHTML(); if (filename) unlink(tempfile); } if (filename) unlink(filename); } /* * 'do_set_sharing()' - Set printer-is-shared value. */ static void do_set_sharing(http_t *http) /* I - HTTP connection */ { ipp_t *request, /* IPP request */ *response; /* IPP response */ char uri[HTTP_MAX_URI]; /* Printer URI */ const char *printer, /* Printer name */ *is_class, /* Is a class? */ *shared; /* Sharing value */ is_class = cgiGetVariable("IS_CLASS"); printer = cgiGetVariable("PRINTER_NAME"); shared = cgiGetVariable("SHARED"); if (!printer || !shared) { cgiSetVariable("ERROR", cgiText(_("Missing form variable"))); cgiStartHTML(cgiText(_("Set Publishing"))); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return; } /* * Build a CUPS-Add-Printer/CUPS-Add-Class request, which requires the * following attributes: * * attributes-charset * attributes-natural-language * printer-uri * printer-is-shared */ request = ippNewRequest(is_class ? CUPS_ADD_CLASS : CUPS_ADD_PRINTER); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, is_class ? "/classes/%s" : "/printers/%s", printer); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddBoolean(request, IPP_TAG_OPERATION, "printer-is-shared", (char)atoi(shared)); /* * Do the request and get back a response... */ if ((response = cupsDoRequest(http, request, "/admin/")) != NULL) { cgiSetIPPVars(response, NULL, NULL, NULL, 0); ippDelete(response); } if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() > IPP_OK_CONFLICT) { cgiStartHTML(cgiText(_("Set Publishing"))); cgiShowIPPError(_("Unable to change printer-is-shared attribute")); } else { /* * Redirect successful updates back to the printer page... */ char url[1024], /* Printer/class URL */ refresh[1024]; /* Refresh URL */ cgiRewriteURL(uri, url, sizeof(url), NULL); cgiFormEncode(uri, url, sizeof(uri)); snprintf(refresh, sizeof(refresh), "5;URL=/admin/?OP=redirect&URL=%s", uri); cgiSetVariable("refresh_page", refresh); cgiStartHTML(cgiText(_("Set Publishing"))); cgiCopyTemplateLang(is_class ? "class-modified.tmpl" : "printer-modified.tmpl"); } cgiEndHTML(); } /* * 'get_option_value()' - Return the value of an option. * * This function also handles generation of custom option values. */ static char * /* O - Value string or NULL on error */ get_option_value( ppd_file_t *ppd, /* I - PPD file */ const char *name, /* I - Option name */ char *buffer, /* I - String buffer */ size_t bufsize) /* I - Size of buffer */ { char *bufptr, /* Pointer into buffer */ *bufend; /* End of buffer */ ppd_coption_t *coption; /* Custom option */ ppd_cparam_t *cparam; /* Current custom parameter */ char keyword[256]; /* Parameter name */ const char *val, /* Parameter value */ *uval; /* Units value */ long integer; /* Integer value */ double number, /* Number value */ number_points; /* Number in points */ /* * See if we have a custom option choice... */ if ((val = cgiGetVariable(name)) == NULL) { /* * Option not found! */ return (NULL); } else if (_cups_strcasecmp(val, "Custom") || (coption = ppdFindCustomOption(ppd, name)) == NULL) { /* * Not a custom choice... */ strlcpy(buffer, val, bufsize); return (buffer); } /* * OK, we have a custom option choice, format it... */ *buffer = '\0'; if (!strcmp(coption->keyword, "PageSize")) { const char *lval; /* Length string value */ double width, /* Width value */ width_points, /* Width in points */ length, /* Length value */ length_points; /* Length in points */ val = cgiGetVariable("PageSize.Width"); lval = cgiGetVariable("PageSize.Height"); uval = cgiGetVariable("PageSize.Units"); if (!val || !lval || !uval || (width = strtod(val, NULL)) == 0.0 || (length = strtod(lval, NULL)) == 0.0 || (strcmp(uval, "pt") && strcmp(uval, "in") && strcmp(uval, "ft") && strcmp(uval, "cm") && strcmp(uval, "mm") && strcmp(uval, "m"))) return (NULL); width_points = get_points(width, uval); length_points = get_points(length, uval); if (width_points < ppd->custom_min[0] || width_points > ppd->custom_max[0] || length_points < ppd->custom_min[1] || length_points > ppd->custom_max[1]) return (NULL); snprintf(buffer, bufsize, "Custom.%gx%g%s", width, length, uval); } else if (cupsArrayCount(coption->params) == 1) { cparam = ppdFirstCustomParam(coption); snprintf(keyword, sizeof(keyword), "%s.%s", coption->keyword, cparam->name); if ((val = cgiGetVariable(keyword)) == NULL) return (NULL); switch (cparam->type) { case PPD_CUSTOM_CURVE : case PPD_CUSTOM_INVCURVE : case PPD_CUSTOM_REAL : if ((number = strtod(val, NULL)) == 0.0 || number < cparam->minimum.custom_real || number > cparam->maximum.custom_real) return (NULL); snprintf(buffer, bufsize, "Custom.%g", number); break; case PPD_CUSTOM_INT : if (!*val || (integer = strtol(val, NULL, 10)) == LONG_MIN || integer == LONG_MAX || integer < cparam->minimum.custom_int || integer > cparam->maximum.custom_int) return (NULL); snprintf(buffer, bufsize, "Custom.%ld", integer); break; case PPD_CUSTOM_POINTS : snprintf(keyword, sizeof(keyword), "%s.Units", coption->keyword); if ((number = strtod(val, NULL)) == 0.0 || (uval = cgiGetVariable(keyword)) == NULL || (strcmp(uval, "pt") && strcmp(uval, "in") && strcmp(uval, "ft") && strcmp(uval, "cm") && strcmp(uval, "mm") && strcmp(uval, "m"))) return (NULL); number_points = get_points(number, uval); if (number_points < cparam->minimum.custom_points || number_points > cparam->maximum.custom_points) return (NULL); snprintf(buffer, bufsize, "Custom.%g%s", number, uval); break; case PPD_CUSTOM_PASSCODE : for (uval = val; *uval; uval ++) if (!isdigit(*uval & 255)) return (NULL); case PPD_CUSTOM_PASSWORD : case PPD_CUSTOM_STRING : integer = (long)strlen(val); if (integer < cparam->minimum.custom_string || integer > cparam->maximum.custom_string) return (NULL); snprintf(buffer, bufsize, "Custom.%s", val); break; } } else { const char *prefix = "{"; /* Prefix string */ bufptr = buffer; bufend = buffer + bufsize; for (cparam = ppdFirstCustomParam(coption); cparam; cparam = ppdNextCustomParam(coption)) { snprintf(keyword, sizeof(keyword), "%s.%s", coption->keyword, cparam->name); if ((val = cgiGetVariable(keyword)) == NULL) return (NULL); snprintf(bufptr, (size_t)(bufend - bufptr), "%s%s=", prefix, cparam->name); bufptr += strlen(bufptr); prefix = " "; switch (cparam->type) { case PPD_CUSTOM_CURVE : case PPD_CUSTOM_INVCURVE : case PPD_CUSTOM_REAL : if ((number = strtod(val, NULL)) == 0.0 || number < cparam->minimum.custom_real || number > cparam->maximum.custom_real) return (NULL); snprintf(bufptr, (size_t)(bufend - bufptr), "%g", number); break; case PPD_CUSTOM_INT : if (!*val || (integer = strtol(val, NULL, 10)) == LONG_MIN || integer == LONG_MAX || integer < cparam->minimum.custom_int || integer > cparam->maximum.custom_int) return (NULL); snprintf(bufptr, (size_t)(bufend - bufptr), "%ld", integer); break; case PPD_CUSTOM_POINTS : snprintf(keyword, sizeof(keyword), "%s.Units", coption->keyword); if ((number = strtod(val, NULL)) == 0.0 || (uval = cgiGetVariable(keyword)) == NULL || (strcmp(uval, "pt") && strcmp(uval, "in") && strcmp(uval, "ft") && strcmp(uval, "cm") && strcmp(uval, "mm") && strcmp(uval, "m"))) return (NULL); number_points = get_points(number, uval); if (number_points < cparam->minimum.custom_points || number_points > cparam->maximum.custom_points) return (NULL); snprintf(bufptr, (size_t)(bufend - bufptr), "%g%s", number, uval); break; case PPD_CUSTOM_PASSCODE : for (uval = val; *uval; uval ++) if (!isdigit(*uval & 255)) return (NULL); case PPD_CUSTOM_PASSWORD : case PPD_CUSTOM_STRING : integer = (long)strlen(val); if (integer < cparam->minimum.custom_string || integer > cparam->maximum.custom_string) return (NULL); if ((bufptr + 2) > bufend) return (NULL); bufend --; *bufptr++ = '\"'; while (*val && bufptr < bufend) { if (*val == '\\' || *val == '\"') { if ((bufptr + 1) >= bufend) return (NULL); *bufptr++ = '\\'; } *bufptr++ = *val++; } if (bufptr >= bufend) return (NULL); *bufptr++ = '\"'; *bufptr = '\0'; bufend ++; break; } bufptr += strlen(bufptr); } if (bufptr == buffer || (bufend - bufptr) < 2) return (NULL); memcpy(bufptr, "}", 2); } return (buffer); } /* * 'get_points()' - Get a value in points. */ static double /* O - Number in points */ get_points(double number, /* I - Original number */ const char *uval) /* I - Units */ { if (!strcmp(uval, "mm")) /* Millimeters */ return (number * 72.0 / 25.4); else if (!strcmp(uval, "cm")) /* Centimeters */ return (number * 72.0 / 2.54); else if (!strcmp(uval, "in")) /* Inches */ return (number * 72.0); else if (!strcmp(uval, "ft")) /* Feet */ return (number * 72.0 * 12.0); else if (!strcmp(uval, "m")) /* Meters */ return (number * 72.0 / 0.0254); else /* Points */ return (number); } /* * 'get_printer_ppd()' - Get an IPP Everywhere PPD file for the given URI. */ static char * /* O - Filename or NULL */ get_printer_ppd(const char *uri, /* I - Printer URI */ char *buffer, /* I - Filename buffer */ size_t bufsize) /* I - Size of filename buffer */ { http_t *http; /* Connection to printer */ ipp_t *request, /* Get-Printer-Attributes request */ *response; /* Get-Printer-Attributes response */ char resolved[1024], /* Resolved URI */ scheme[32], /* URI scheme */ userpass[256], /* Username:password */ host[256], /* Hostname */ resource[256]; /* Resource path */ int port; /* Port number */ /* * Connect to the printer... */ if (strstr(uri, "._tcp")) { /* * Resolve URI... */ if (!_httpResolveURI(uri, resolved, sizeof(resolved), _HTTP_RESOLVE_DEFAULT, NULL, NULL)) { fprintf(stderr, "ERROR: Unable to resolve \"%s\".\n", uri); return (NULL); } uri = resolved; } if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) { fprintf(stderr, "ERROR: Bad printer URI \"%s\".\n", uri); return (NULL); } http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL); if (!http) { fprintf(stderr, "ERROR: Unable to connect to \"%s:%d\": %s\n", host, port, cupsLastErrorString()); return (NULL); } /* * Send a Get-Printer-Attributes request... */ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); response = cupsDoRequest(http, request, resource); if (!_ppdCreateFromIPP(buffer, bufsize, response)) fprintf(stderr, "ERROR: Unable to create PPD file: %s\n", strerror(errno)); ippDelete(response); httpClose(http); if (buffer[0]) return (buffer); else return (NULL); } cups-2.2.7/cgi-bin/cgi-private.h000664 000765 000024 00000001427 13255074424 017052 0ustar00msweetstaff000000 000000 /* * Private CGI definitions for CUPS. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi.h" #include #include #include #include /* TODO: Update so we don't need this */ /* * Limits... */ #define CUPS_PAGE_MAX 100 /* Maximum items per page */ cups-2.2.7/cgi-bin/cgi.h000664 000765 000024 00000007262 13255074424 015405 0ustar00msweetstaff000000 000000 /* * CGI support library definitions for CUPS. * * Copyright 2007-2010 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #ifndef _CUPS_CGI_H_ # define _CUPS_CGI_H_ # include # include # include # include # ifdef WIN32 # include # include # else # include # endif /* WIN32 */ # include # include # include "help-index.h" /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Types... */ typedef struct cgi_file_s /**** Uploaded file data ****/ { char tempfile[1024], /* Temporary file containing data */ *name, /* Variable name */ *filename, /* Original filename */ *mimetype; /* MIME media type */ size_t filesize; /* Size of uploaded file */ } cgi_file_t; /* * Prototypes... */ extern void cgiAbort(const char *title, const char *stylesheet, const char *format, ...); extern int cgiCheckVariables(const char *names); extern void cgiClearVariables(void); extern void *cgiCompileSearch(const char *query); extern void cgiCopyTemplateFile(FILE *out, const char *tmpl); extern void cgiCopyTemplateLang(const char *tmpl); extern int cgiDoSearch(void *search, const char *text); extern void cgiEndHTML(void); extern void cgiEndMultipart(void); extern char *cgiFormEncode(char *dst, const char *src, size_t dstsize); extern void cgiFreeSearch(void *search); extern const char *cgiGetArray(const char *name, int element); extern void cgiGetAttributes(ipp_t *request, const char *tmpl); extern const char *cgiGetCookie(const char *name); extern const cgi_file_t *cgiGetFile(void); extern cups_array_t *cgiGetIPPObjects(ipp_t *response, void *search); extern int cgiGetSize(const char *name); extern char *cgiGetTemplateDir(void); extern const char *cgiGetVariable(const char *name); extern int cgiInitialize(void); extern int cgiIsPOST(void); extern void cgiMoveJobs(http_t *http, const char *dest, int job_id); extern void cgiPrintCommand(http_t *http, const char *dest, const char *command, const char *title); extern void cgiPrintTestPage(http_t *http, const char *dest); extern char *cgiRewriteURL(const char *uri, char *url, int urlsize, const char *newresource); extern void cgiSetArray(const char *name, int element, const char *value); extern void cgiSetCookie(const char *name, const char *value, const char *path, const char *domain, time_t expires, int secure); extern ipp_attribute_t *cgiSetIPPObjectVars(ipp_attribute_t *obj, const char *prefix, int element); extern int cgiSetIPPVars(ipp_t *response, const char *filter_name, const char *filter_value, const char *prefix, int parent_el); extern void cgiSetServerVersion(void); extern void cgiSetSize(const char *name, int size); extern void cgiSetVariable(const char *name, const char *value); extern void cgiShowIPPError(const char *message); extern void cgiShowJobs(http_t *http, const char *dest); extern void cgiStartHTML(const char *title); extern void cgiStartMultipart(void); extern int cgiSupportsMultipart(void); extern const char *cgiText(const char *message); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_CGI_H_ */ cups-2.2.7/cgi-bin/classes.c000664 000765 000024 00000030013 13255074424 016261 0ustar00msweetstaff000000 000000 /* * Class status CGI for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi-private.h" /* * Local functions... */ static void do_class_op(http_t *http, const char *printer, ipp_op_t op, const char *title); static void show_all_classes(http_t *http, const char *username); static void show_class(http_t *http, const char *printer); /* * 'main()' - Main entry for CGI. */ int /* O - Exit status */ main(void) { const char *pclass; /* Class name */ const char *user; /* Username */ http_t *http; /* Connection to the server */ ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* IPP attribute */ const char *op; /* Operation to perform, if any */ static const char *def_attrs[] = /* Attributes for default printer */ { "printer-name", "printer-uri-supported" }; /* * Get any form variables... */ cgiInitialize(); op = cgiGetVariable("OP"); /* * Set the web interface section... */ cgiSetVariable("SECTION", "classes"); cgiSetVariable("REFRESH_PAGE", ""); /* * See if we are displaying a printer or all classes... */ if ((pclass = getenv("PATH_INFO")) != NULL) { pclass ++; if (!*pclass) pclass = NULL; if (pclass) cgiSetVariable("PRINTER_NAME", pclass); } /* * See who is logged in... */ user = getenv("REMOTE_USER"); /* * Connect to the HTTP server... */ http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption()); /* * Get the default printer... */ if (!op || !cgiIsPOST()) { /* * Get the default destination... */ request = ippNewRequest(CUPS_GET_DEFAULT); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(def_attrs) / sizeof(def_attrs[0]), NULL, def_attrs); 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 url[HTTP_MAX_URI]; /* New URL */ cgiSetVariable("DEFAULT_URI", cgiRewriteURL(attr->values[0].string.text, url, sizeof(url), NULL)); } ippDelete(response); } /* * See if we need to show a list of classes or the status of a * single printer... */ if (!pclass) show_all_classes(http, user); else show_class(http, pclass); } else if (pclass) { if (!*op) { const char *server_port = getenv("SERVER_PORT"); /* Port number string */ int port = atoi(server_port ? server_port : "0"); /* Port number */ char uri[1024]; /* URL */ httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), getenv("HTTPS") ? "https" : "http", NULL, getenv("SERVER_NAME"), port, "/classes/%s", pclass); printf("Location: %s\n\n", uri); } else if (!strcmp(op, "start-class")) do_class_op(http, pclass, IPP_RESUME_PRINTER, cgiText(_("Resume Class"))); else if (!strcmp(op, "stop-class")) do_class_op(http, pclass, IPP_PAUSE_PRINTER, cgiText(_("Pause Class"))); else if (!strcmp(op, "accept-jobs")) do_class_op(http, pclass, CUPS_ACCEPT_JOBS, cgiText(_("Accept Jobs"))); else if (!strcmp(op, "reject-jobs")) do_class_op(http, pclass, CUPS_REJECT_JOBS, cgiText(_("Reject Jobs"))); else if (!strcmp(op, "cancel-jobs")) do_class_op(http, pclass, IPP_OP_CANCEL_JOBS, cgiText(_("Cancel Jobs"))); else if (!_cups_strcasecmp(op, "print-test-page")) cgiPrintTestPage(http, pclass); else if (!_cups_strcasecmp(op, "move-jobs")) cgiMoveJobs(http, pclass, 0); else { /* * Unknown/bad operation... */ cgiStartHTML(pclass); cgiCopyTemplateLang("error-op.tmpl"); cgiEndHTML(); } } else { /* * Unknown/bad operation... */ cgiStartHTML(cgiText(_("Classes"))); cgiCopyTemplateLang("error-op.tmpl"); cgiEndHTML(); } /* * Close the HTTP server connection... */ httpClose(http); /* * Return with no errors... */ return (0); } /* * 'do_class_op()' - Do a class operation. */ static void do_class_op(http_t *http, /* I - HTTP connection */ const char *printer, /* I - Printer name */ ipp_op_t op, /* I - Operation to perform */ const char *title) /* I - Title of page */ { ipp_t *request; /* IPP request */ char uri[HTTP_MAX_URI], /* Printer URI */ resource[HTTP_MAX_URI]; /* Path for request */ /* * Build a printer request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(op); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/classes/%s", printer); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); /* * Do the request and get back a response... */ snprintf(resource, sizeof(resource), "/classes/%s", printer); ippDelete(cupsDoRequest(http, request, resource)); if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() > IPP_OK_CONFLICT) { cgiStartHTML(title); cgiShowIPPError(_("Unable to do maintenance command")); } else { /* * Redirect successful updates back to the printer page... */ char url[1024], /* Printer/class URL */ refresh[1024]; /* Refresh URL */ cgiRewriteURL(uri, url, sizeof(url), NULL); cgiFormEncode(uri, url, sizeof(uri)); snprintf(refresh, sizeof(refresh), "5;URL=%s", uri); cgiSetVariable("refresh_page", refresh); cgiStartHTML(title); cgiSetVariable("IS_CLASS", "YES"); if (op == IPP_PAUSE_PRINTER) cgiCopyTemplateLang("printer-stop.tmpl"); else if (op == IPP_RESUME_PRINTER) cgiCopyTemplateLang("printer-start.tmpl"); else if (op == CUPS_ACCEPT_JOBS) cgiCopyTemplateLang("printer-accept.tmpl"); else if (op == CUPS_REJECT_JOBS) cgiCopyTemplateLang("printer-reject.tmpl"); else if (op == IPP_OP_CANCEL_JOBS) cgiCopyTemplateLang("printer-cancel-jobs.tmpl"); } cgiEndHTML(); } /* * 'show_all_classes()' - Show all classes... */ static void show_all_classes(http_t *http, /* I - Connection to server */ const char *user) /* I - Username */ { int i; /* Looping var */ ipp_t *request, /* IPP request */ *response; /* IPP response */ cups_array_t *classes; /* Array of class objects */ ipp_attribute_t *pclass; /* Class object */ int first, /* First class to show */ count; /* Number of classes */ const char *var; /* Form variable */ void *search; /* Search data */ char val[1024]; /* Form variable */ /* * Show the standard header... */ cgiStartHTML(cgiText(_("Classes"))); /* * Build a CUPS_GET_CLASSES request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * requesting-user-name */ request = ippNewRequest(CUPS_GET_CLASSES); if (user) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); cgiGetAttributes(request, "classes.tmpl"); /* * Do the request and get back a response... */ if ((response = cupsDoRequest(http, request, "/")) != NULL) { /* * Get a list of matching job objects. */ if ((var = cgiGetVariable("QUERY")) != NULL && !cgiGetVariable("CLEAR")) search = cgiCompileSearch(var); else search = NULL; classes = cgiGetIPPObjects(response, search); count = cupsArrayCount(classes); if (search) cgiFreeSearch(search); /* * Figure out which classes to display... */ if ((var = cgiGetVariable("FIRST")) != NULL) first = atoi(var); else first = 0; if (first >= count) first = count - CUPS_PAGE_MAX; first = (first / CUPS_PAGE_MAX) * CUPS_PAGE_MAX; if (first < 0) first = 0; sprintf(val, "%d", count); cgiSetVariable("TOTAL", val); for (i = 0, pclass = (ipp_attribute_t *)cupsArrayIndex(classes, first); i < CUPS_PAGE_MAX && pclass; i ++, pclass = (ipp_attribute_t *)cupsArrayNext(classes)) cgiSetIPPObjectVars(pclass, NULL, i); /* * Save navigation URLs... */ cgiSetVariable("THISURL", "/classes/"); if (first > 0) { sprintf(val, "%d", first - CUPS_PAGE_MAX); cgiSetVariable("PREV", val); } if ((first + CUPS_PAGE_MAX) < count) { sprintf(val, "%d", first + CUPS_PAGE_MAX); cgiSetVariable("NEXT", val); } if (count > CUPS_PAGE_MAX) { snprintf(val, sizeof(val), "%d", CUPS_PAGE_MAX * (count / CUPS_PAGE_MAX)); cgiSetVariable("LAST", val); } /* * Then show everything... */ cgiCopyTemplateLang("search.tmpl"); cgiCopyTemplateLang("classes-header.tmpl"); if (count > CUPS_PAGE_MAX) cgiCopyTemplateLang("pager.tmpl"); cgiCopyTemplateLang("classes.tmpl"); if (count > CUPS_PAGE_MAX) cgiCopyTemplateLang("pager.tmpl"); /* * Delete the response... */ cupsArrayDelete(classes); ippDelete(response); } else { /* * Show the error... */ cgiShowIPPError(_("Unable to get class list")); } cgiEndHTML(); } /* * 'show_class()' - Show a single class. */ static void show_class(http_t *http, /* I - Connection to server */ const char *pclass) /* I - Name of class */ { ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* IPP attribute */ char uri[HTTP_MAX_URI]; /* Printer URI */ char refresh[1024]; /* Refresh URL */ /* * Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/classes/%s", pclass); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); cgiGetAttributes(request, "class.tmpl"); /* * Do the request and get back a response... */ if ((response = cupsDoRequest(http, request, "/")) != NULL) { /* * Got the result; set the CGI variables and check the status of a * single-queue request... */ cgiSetIPPVars(response, NULL, NULL, NULL, 0); if (pclass && (attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL && attr->values[0].integer == IPP_PRINTER_PROCESSING) { /* * Class is processing - automatically refresh the page until we * are done printing... */ cgiFormEncode(uri, pclass, sizeof(uri)); snprintf(refresh, sizeof(refresh), "10;URL=/classes/%s", uri); cgiSetVariable("refresh_page", refresh); } /* * Delete the response... */ ippDelete(response); /* * Show the standard header... */ cgiStartHTML(pclass); /* * Show the class status... */ cgiCopyTemplateLang("class.tmpl"); /* * Show jobs for the specified class... */ cgiCopyTemplateLang("class-jobs-header.tmpl"); cgiShowJobs(http, pclass); } else { /* * Show the IPP error... */ cgiStartHTML(pclass); cgiShowIPPError(_("Unable to get class status")); } cgiEndHTML(); } cups-2.2.7/cgi-bin/Dependencies000664 000765 000024 00000011073 13255074424 016776 0ustar00msweetstaff000000 000000 help-index.o: help-index.c cgi-private.h cgi.h ../cups/cups.h \ ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h \ ../cups/array.h ../cups/language.h ../cups/pwg.h help-index.h \ ../cups/debug-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/string-private.h ../config.h ../cups/ipp-private.h \ ../cups/dir.h html.o: html.c cgi-private.h cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h ../cups/debug-private.h \ ../cups/language-private.h ../cups/transcode.h \ ../cups/string-private.h ../config.h ../cups/ipp-private.h ipp-var.o: ipp-var.c cgi-private.h cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h ../cups/debug-private.h \ ../cups/language-private.h ../cups/transcode.h \ ../cups/string-private.h ../config.h ../cups/ipp-private.h search.o: search.c cgi-private.h cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h ../cups/debug-private.h \ ../cups/language-private.h ../cups/transcode.h \ ../cups/string-private.h ../config.h ../cups/ipp-private.h template.o: template.c cgi-private.h cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h ../cups/debug-private.h \ ../cups/language-private.h ../cups/transcode.h \ ../cups/string-private.h ../config.h ../cups/ipp-private.h var.o: var.c cgi-private.h cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h ../cups/debug-private.h \ ../cups/language-private.h ../cups/transcode.h \ ../cups/string-private.h ../config.h ../cups/ipp-private.h \ ../cups/md5-private.h admin.o: admin.c cgi-private.h cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h ../cups/debug-private.h \ ../cups/language-private.h ../cups/transcode.h \ ../cups/string-private.h ../config.h ../cups/ipp-private.h \ ../cups/http-private.h ../cups/md5-private.h ../cups/ppd-private.h \ ../cups/ppd.h ../cups/raster.h ../cups/pwg-private.h \ ../cups/adminutil.h classes.o: classes.c cgi-private.h cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h ../cups/debug-private.h \ ../cups/language-private.h ../cups/transcode.h \ ../cups/string-private.h ../config.h ../cups/ipp-private.h help.o: help.c cgi-private.h cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h ../cups/debug-private.h \ ../cups/language-private.h ../cups/transcode.h \ ../cups/string-private.h ../config.h ../cups/ipp-private.h jobs.o: jobs.c cgi-private.h cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h ../cups/debug-private.h \ ../cups/language-private.h ../cups/transcode.h \ ../cups/string-private.h ../config.h ../cups/ipp-private.h makedocset.o: makedocset.c cgi-private.h cgi.h ../cups/cups.h \ ../cups/file.h ../cups/versioning.h ../cups/ipp.h ../cups/http.h \ ../cups/array.h ../cups/language.h ../cups/pwg.h help-index.h \ ../cups/debug-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/string-private.h ../config.h ../cups/ipp-private.h printers.o: printers.c cgi-private.h cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h ../cups/debug-private.h \ ../cups/language-private.h ../cups/transcode.h \ ../cups/string-private.h ../config.h ../cups/ipp-private.h testcgi.o: testcgi.c cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h testhi.o: testhi.c cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h testtemplate.o: testtemplate.c cgi.h ../cups/cups.h ../cups/file.h \ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \ ../cups/language.h ../cups/pwg.h help-index.h cups-2.2.7/cgi-bin/help-index.c000664 000765 000024 00000063176 13255074424 016701 0ustar00msweetstaff000000 000000 /* * Online help index routines for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi-private.h" #include /* * List of common English words that should not be indexed... */ static char help_common_words[][6] = { "about", "all", "an", "and", "are", "as", "at", "be", "been", "but", "by", "call", "can", "come", "could", "day", "did", "do", "down", "each", "find", "first", "for", "from", "go", "had", "has", "have", "he", "her", "him", "his", "hot", "how", "if", "in", "is", "it", "know", "like", "long", "look", "make", "many", "may", "more", "most", "my", "no", "now", "of", "on", "one", "or", "other", "out", "over", "said", "see", "she", "side", "so", "some", "sound", "than", "that", "the", "their", "them", "then", "there", "these", "they", "thing", "this", "time", "to", "two", "up", "use", "was", "water", "way", "we", "were", "what", "when", "which", "who", "will", "with", "word", "would", "write", "you", "your" }; /* * Local functions... */ static help_word_t *help_add_word(help_node_t *n, const char *text); static void help_delete_node(help_node_t *n); static void help_delete_word(help_word_t *w); static int help_load_directory(help_index_t *hi, const char *directory, const char *relative); static int help_load_file(help_index_t *hi, const char *filename, const char *relative, time_t mtime); static help_node_t *help_new_node(const char *filename, const char *anchor, const char *section, const char *text, time_t mtime, off_t offset, size_t length) __attribute__((nonnull(1,3,4))); static int help_sort_by_name(help_node_t *p1, help_node_t *p2); static int help_sort_by_score(help_node_t *p1, help_node_t *p2); static int help_sort_words(help_word_t *w1, help_word_t *w2); /* * 'helpDeleteIndex()' - Delete an index, freeing all memory used. */ void helpDeleteIndex(help_index_t *hi) /* I - Help index */ { help_node_t *node; /* Current node */ DEBUG_printf(("helpDeleteIndex(hi=%p)", hi)); if (!hi) return; for (node = (help_node_t *)cupsArrayFirst(hi->nodes); node; node = (help_node_t *)cupsArrayNext(hi->nodes)) { if (!hi->search) help_delete_node(node); } cupsArrayDelete(hi->nodes); cupsArrayDelete(hi->sorted); free(hi); } /* * 'helpFindNode()' - Find a node in an index. */ help_node_t * /* O - Node pointer or NULL */ helpFindNode(help_index_t *hi, /* I - Index */ const char *filename, /* I - Filename */ const char *anchor) /* I - Anchor */ { help_node_t key; /* Search key */ DEBUG_printf(("helpFindNode(hi=%p, filename=\"%s\", anchor=\"%s\")", hi, filename, anchor)); /* * Range check input... */ if (!hi || !filename) return (NULL); /* * Initialize the search key... */ key.filename = (char *)filename; key.anchor = (char *)anchor; /* * Return any match... */ return ((help_node_t *)cupsArrayFind(hi->nodes, &key)); } /* * 'helpLoadIndex()' - Load a help index from disk. */ help_index_t * /* O - Index pointer or NULL */ helpLoadIndex(const char *hifile, /* I - Index filename */ const char *directory) /* I - Directory that is indexed */ { help_index_t *hi; /* Help index */ cups_file_t *fp; /* Current file */ char line[2048], /* Line from file */ *ptr, /* Pointer into line */ *filename, /* Filename in line */ *anchor, /* Anchor in line */ *sectptr, /* Section pointer in line */ section[1024], /* Section name */ *text; /* Text in line */ time_t mtime; /* Modification time */ off_t offset; /* Offset into file */ size_t length; /* Length in bytes */ int update; /* Update? */ help_node_t *node; /* Current node */ help_word_t *word; /* Current word */ DEBUG_printf(("helpLoadIndex(hifile=\"%s\", directory=\"%s\")", hifile, directory)); /* * Create a new, empty index. */ if ((hi = (help_index_t *)calloc(1, sizeof(help_index_t))) == NULL) return (NULL); hi->nodes = cupsArrayNew((cups_array_func_t)help_sort_by_name, NULL); hi->sorted = cupsArrayNew((cups_array_func_t)help_sort_by_score, NULL); if (!hi->nodes || !hi->sorted) { cupsArrayDelete(hi->nodes); cupsArrayDelete(hi->sorted); free(hi); return (NULL); } /* * Try loading the existing index file... */ if ((fp = cupsFileOpen(hifile, "r")) != NULL) { /* * Lock the file and then read the first line... */ cupsFileLock(fp, 1); if (cupsFileGets(fp, line, sizeof(line)) && !strcmp(line, "HELPV2")) { /* * Got a valid header line, now read the data lines... */ node = NULL; while (cupsFileGets(fp, line, sizeof(line))) { /* * Each line looks like one of the following: * * filename mtime offset length "section" "text" * filename#anchor offset length "text" * SP count word */ if (line[0] == ' ') { /* * Read a word in the current node... */ if (!node || (ptr = strrchr(line, ' ')) == NULL) continue; if ((word = help_add_word(node, ptr + 1)) != NULL) word->count = atoi(line + 1); } else { /* * Add a node... */ filename = line; if ((ptr = strchr(line, ' ')) == NULL) break; while (isspace(*ptr & 255)) *ptr++ = '\0'; if ((anchor = strrchr(filename, '#')) != NULL) { *anchor++ = '\0'; mtime = 0; } else mtime = strtol(ptr, &ptr, 10); offset = strtoll(ptr, &ptr, 10); length = (size_t)strtoll(ptr, &ptr, 10); while (isspace(*ptr & 255)) ptr ++; if (!anchor) { /* * Get section... */ if (*ptr != '\"') break; ptr ++; sectptr = ptr; while (*ptr && *ptr != '\"') ptr ++; if (*ptr != '\"') break; *ptr++ = '\0'; strlcpy(section, sectptr, sizeof(section)); while (isspace(*ptr & 255)) ptr ++; } if (*ptr != '\"') break; ptr ++; text = ptr; while (*ptr && *ptr != '\"') ptr ++; if (*ptr != '\"') break; *ptr++ = '\0'; if ((node = help_new_node(filename, anchor, section, text, mtime, offset, length)) == NULL) break; node->score = -1; cupsArrayAdd(hi->nodes, node); } } } cupsFileClose(fp); } /* * Scan for new/updated files... */ update = help_load_directory(hi, directory, NULL); /* * Remove any files that are no longer installed... */ for (node = (help_node_t *)cupsArrayFirst(hi->nodes); node; node = (help_node_t *)cupsArrayNext(hi->nodes)) if (node->score < 0) { /* * Delete this node... */ cupsArrayRemove(hi->nodes, node); help_delete_node(node); } /* * Add nodes to the sorted array... */ for (node = (help_node_t *)cupsArrayFirst(hi->nodes); node; node = (help_node_t *)cupsArrayNext(hi->nodes)) cupsArrayAdd(hi->sorted, node); /* * Save the index if we updated it... */ if (update) helpSaveIndex(hi, hifile); /* * Return the index... */ return (hi); } /* * 'helpSaveIndex()' - Save a help index to disk. */ int /* O - 0 on success, -1 on error */ helpSaveIndex(help_index_t *hi, /* I - Index */ const char *hifile) /* I - Index filename */ { cups_file_t *fp; /* Index file */ help_node_t *node; /* Current node */ help_word_t *word; /* Current word */ DEBUG_printf(("helpSaveIndex(hi=%p, hifile=\"%s\")", hi, hifile)); /* * Try creating a new index file... */ if ((fp = cupsFileOpen(hifile, "w9")) == NULL) return (-1); /* * Lock the file while we write it... */ cupsFileLock(fp, 1); cupsFilePuts(fp, "HELPV2\n"); for (node = (help_node_t *)cupsArrayFirst(hi->nodes); node; node = (help_node_t *)cupsArrayNext(hi->nodes)) { /* * Write the current node with/without the anchor... */ if (node->anchor) { if (cupsFilePrintf(fp, "%s#%s " CUPS_LLFMT " " CUPS_LLFMT " \"%s\"\n", node->filename, node->anchor, CUPS_LLCAST node->offset, CUPS_LLCAST node->length, node->text) < 0) break; } else { if (cupsFilePrintf(fp, "%s %d " CUPS_LLFMT " " CUPS_LLFMT " \"%s\" \"%s\"\n", node->filename, (int)node->mtime, CUPS_LLCAST node->offset, CUPS_LLCAST node->length, node->section ? node->section : "", node->text) < 0) break; } /* * Then write the words associated with the node... */ for (word = (help_word_t *)cupsArrayFirst(node->words); word; word = (help_word_t *)cupsArrayNext(node->words)) if (cupsFilePrintf(fp, " %d %s\n", word->count, word->text) < 0) break; } cupsFileFlush(fp); if (cupsFileClose(fp) < 0) return (-1); else if (node) return (-1); else return (0); } /* * 'helpSearchIndex()' - Search an index. */ help_index_t * /* O - Search index */ helpSearchIndex(help_index_t *hi, /* I - Index */ const char *query, /* I - Query string */ const char *section, /* I - Limit search to this section */ const char *filename) /* I - Limit search to this file */ { help_index_t *search; /* Search index */ help_node_t *node; /* Current node */ help_word_t *word; /* Current word */ void *sc; /* Search context */ int matches; /* Number of matches */ DEBUG_printf(("helpSearchIndex(hi=%p, query=\"%s\", filename=\"%s\")", hi, query, filename)); /* * Range check... */ if (!hi || !query) return (NULL); /* * Reset the scores of all nodes to 0... */ for (node = (help_node_t *)cupsArrayFirst(hi->nodes); node; node = (help_node_t *)cupsArrayNext(hi->nodes)) node->score = 0; /* * Find the first node to search in... */ if (filename) { node = helpFindNode(hi, filename, NULL); if (!node) return (NULL); } else node = (help_node_t *)cupsArrayFirst(hi->nodes); /* * Convert the query into a regular expression... */ sc = cgiCompileSearch(query); if (!sc) return (NULL); /* * Allocate a search index... */ search = calloc(1, sizeof(help_index_t)); if (!search) { cgiFreeSearch(sc); return (NULL); } search->nodes = cupsArrayNew((cups_array_func_t)help_sort_by_name, NULL); search->sorted = cupsArrayNew((cups_array_func_t)help_sort_by_score, NULL); if (!search->nodes || !search->sorted) { cupsArrayDelete(search->nodes); cupsArrayDelete(search->sorted); free(search); cgiFreeSearch(sc); return (NULL); } search->search = 1; /* * Check each node in the index, adding matching nodes to the * search index... */ for (; node; node = (help_node_t *)cupsArrayNext(hi->nodes)) if (section && strcmp(node->section, section)) continue; else if (filename && strcmp(node->filename, filename)) continue; else { matches = cgiDoSearch(sc, node->text); for (word = (help_word_t *)cupsArrayFirst(node->words); word; word = (help_word_t *)cupsArrayNext(node->words)) if (cgiDoSearch(sc, word->text) > 0) matches += word->count; if (matches > 0) { /* * Found a match, add the node to the search index... */ node->score = matches; cupsArrayAdd(search->nodes, node); cupsArrayAdd(search->sorted, node); } } /* * Free the search context... */ cgiFreeSearch(sc); /* * Return the results... */ return (search); } /* * 'help_add_word()' - Add a word to a node. */ static help_word_t * /* O - New word */ help_add_word(help_node_t *n, /* I - Node */ const char *text) /* I - Word text */ { help_word_t *w, /* New word */ key; /* Search key */ DEBUG_printf(("2help_add_word(n=%p, text=\"%s\")", n, text)); /* * Create the words array as needed... */ if (!n->words) n->words = cupsArrayNew((cups_array_func_t)help_sort_words, NULL); /* * See if the word is already added... */ key.text = (char *)text; if ((w = (help_word_t *)cupsArrayFind(n->words, &key)) == NULL) { /* * Create a new word... */ if ((w = calloc(1, sizeof(help_word_t))) == NULL) return (NULL); if ((w->text = strdup(text)) == NULL) { free(w); return (NULL); } cupsArrayAdd(n->words, w); } /* * Bump the counter for this word and return it... */ w->count ++; return (w); } /* * 'help_delete_node()' - Free all memory used by a node. */ static void help_delete_node(help_node_t *n) /* I - Node */ { help_word_t *w; /* Current word */ DEBUG_printf(("2help_delete_node(n=%p)", n)); if (!n) return; if (n->filename) free(n->filename); if (n->anchor) free(n->anchor); if (n->section) free(n->section); if (n->text) free(n->text); for (w = (help_word_t *)cupsArrayFirst(n->words); w; w = (help_word_t *)cupsArrayNext(n->words)) help_delete_word(w); cupsArrayDelete(n->words); free(n); } /* * 'help_delete_word()' - Free all memory used by a word. */ static void help_delete_word(help_word_t *w) /* I - Word */ { DEBUG_printf(("2help_delete_word(w=%p)", w)); if (!w) return; if (w->text) free(w->text); free(w); } /* * 'help_load_directory()' - Load a directory of files into an index. */ static int /* O - 0 = success, -1 = error, 1 = updated */ help_load_directory( help_index_t *hi, /* I - Index */ const char *directory, /* I - Directory */ const char *relative) /* I - Relative path */ { cups_dir_t *dir; /* Directory file */ cups_dentry_t *dent; /* Directory entry */ char *ext, /* Pointer to extension */ filename[1024], /* Full filename */ relname[1024]; /* Relative filename */ int update; /* Updated? */ help_node_t *node; /* Current node */ DEBUG_printf(("2help_load_directory(hi=%p, directory=\"%s\", relative=\"%s\")", hi, directory, relative)); /* * Open the directory and scan it... */ if ((dir = cupsDirOpen(directory)) == NULL) return (0); update = 0; while ((dent = cupsDirRead(dir)) != NULL) { /* * Skip "." files... */ if (dent->filename[0] == '.') continue; /* * Get absolute and relative filenames... */ snprintf(filename, sizeof(filename), "%s/%s", directory, dent->filename); if (relative) snprintf(relname, sizeof(relname), "%s/%s", relative, dent->filename); else strlcpy(relname, dent->filename, sizeof(relname)); /* * Check if we have a HTML file... */ if ((ext = strstr(dent->filename, ".html")) != NULL && (!ext[5] || !strcmp(ext + 5, ".gz"))) { /* * HTML file, see if we have already indexed the file... */ if ((node = helpFindNode(hi, relname, NULL)) != NULL) { /* * File already indexed - check dates to confirm that the * index is up-to-date... */ if (node->mtime == dent->fileinfo.st_mtime) { /* * Same modification time, so mark all of the nodes * for this file as up-to-date... */ for (; node; node = (help_node_t *)cupsArrayNext(hi->nodes)) if (!strcmp(node->filename, relname)) node->score = 0; else break; continue; } } update = 1; help_load_file(hi, filename, relname, dent->fileinfo.st_mtime); } else if (S_ISDIR(dent->fileinfo.st_mode)) { /* * Process sub-directory... */ if (help_load_directory(hi, filename, relname) == 1) update = 1; } } cupsDirClose(dir); return (update); } /* * 'help_load_file()' - Load a HTML files into an index. */ static int /* O - 0 = success, -1 = error */ help_load_file( help_index_t *hi, /* I - Index */ const char *filename, /* I - Filename */ const char *relative, /* I - Relative path */ time_t mtime) /* I - Modification time */ { cups_file_t *fp; /* HTML file */ help_node_t *node; /* Current node */ char line[1024], /* Line from file */ temp[1024], /* Temporary word */ section[1024], /* Section */ *ptr, /* Pointer into line */ *anchor, /* Anchor name */ *text; /* Text for anchor */ off_t offset; /* File offset */ char quote; /* Quote character */ help_word_t *word; /* Current word */ int wordlen; /* Length of word */ DEBUG_printf(("2help_load_file(hi=%p, filename=\"%s\", relative=\"%s\", " "mtime=%ld)", hi, filename, relative, (long)mtime)); if ((fp = cupsFileOpen(filename, "r")) == NULL) return (-1); node = NULL; offset = 0; strlcpy(section, "Other", sizeof(section)); while (cupsFileGets(fp, line, sizeof(line))) { /* * Look for "", "<A NAME", or "<!-- SECTION:" prefix... */ if (!_cups_strncasecmp(line, "<!-- SECTION:", 13)) { /* * Got section line, copy it! */ for (ptr = line + 13; isspace(*ptr & 255); ptr ++); strlcpy(section, ptr, sizeof(section)); if ((ptr = strstr(section, "-->")) != NULL) { /* * Strip comment stuff from end of line... */ for (*ptr-- = '\0'; ptr > line && isspace(*ptr & 255); *ptr-- = '\0'); if (isspace(*ptr & 255)) *ptr = '\0'; } continue; } for (ptr = line; (ptr = strchr(ptr, '<')) != NULL;) { ptr ++; if (!_cups_strncasecmp(ptr, "TITLE>", 6)) { /* * Found the title... */ anchor = NULL; ptr += 6; } else if (!_cups_strncasecmp(ptr, "A NAME=", 7)) { /* * Found an anchor... */ ptr += 7; if (*ptr == '\"' || *ptr == '\'') { /* * Get quoted anchor... */ quote = *ptr; anchor = ptr + 1; if ((ptr = strchr(anchor, quote)) != NULL) *ptr++ = '\0'; else break; } else { /* * Get unquoted anchor... */ anchor = ptr + 1; for (ptr = anchor; *ptr && *ptr != '>' && !isspace(*ptr & 255); ptr ++); if (*ptr) *ptr++ = '\0'; else break; } /* * Got the anchor, now lets find the end... */ while (*ptr && *ptr != '>') ptr ++; if (*ptr != '>') break; ptr ++; } else continue; /* * Now collect text for the link... */ text = ptr; while ((ptr = strchr(text, '<')) == NULL) { ptr = text + strlen(text); if (ptr >= (line + sizeof(line) - 2)) break; *ptr++ = ' '; if (!cupsFileGets(fp, ptr, sizeof(line) - (size_t)(ptr - line) - 1)) break; } *ptr = '\0'; if (node) node->length = (size_t)(offset - node->offset); if (!*text) { node = NULL; break; } if ((node = helpFindNode(hi, relative, anchor)) != NULL) { /* * Node already in the index, so replace the text and other * data... */ cupsArrayRemove(hi->nodes, node); if (node->section) free(node->section); if (node->text) free(node->text); if (node->words) { for (word = (help_word_t *)cupsArrayFirst(node->words); word; word = (help_word_t *)cupsArrayNext(node->words)) help_delete_word(word); cupsArrayDelete(node->words); node->words = NULL; } node->section = section[0] ? strdup(section) : NULL; node->text = strdup(text); node->mtime = mtime; node->offset = offset; node->score = 0; } else { /* * New node... */ node = help_new_node(relative, anchor, section, text, mtime, offset, 0); } /* * Go through the text value and replace tabs and newlines with * whitespace and eliminate extra whitespace... */ for (ptr = node->text, text = node->text; *ptr;) if (isspace(*ptr & 255)) { while (isspace(*ptr & 255)) ptr ++; *text++ = ' '; } else if (text != ptr) *text++ = *ptr++; else { text ++; ptr ++; } *text = '\0'; /* * (Re)add the node to the array... */ cupsArrayAdd(hi->nodes, node); if (!anchor) node = NULL; break; } if (node) { /* * Scan this line for words... */ for (ptr = line; *ptr; ptr ++) { /* * Skip HTML stuff... */ if (*ptr == '<') { if (!strncmp(ptr, "<!--", 4)) { /* * Skip HTML comment... */ if ((text = strstr(ptr + 4, "-->")) == NULL) ptr += strlen(ptr) - 1; else ptr = text + 2; } else { /* * Skip HTML element... */ for (ptr ++; *ptr && *ptr != '>'; ptr ++) { if (*ptr == '\"' || *ptr == '\'') { for (quote = *ptr++; *ptr && *ptr != quote; ptr ++); if (!*ptr) ptr --; } } if (!*ptr) ptr --; } continue; } else if (*ptr == '&') { /* * Skip HTML entity... */ for (ptr ++; *ptr && *ptr != ';'; ptr ++); if (!*ptr) ptr --; continue; } else if (!isalnum(*ptr & 255)) continue; /* * Found the start of a word, search until we find the end... */ for (text = ptr, ptr ++; *ptr && isalnum(*ptr & 255); ptr ++); wordlen = (int)(ptr - text); memcpy(temp, text, (size_t)wordlen); temp[wordlen] = '\0'; ptr --; if (wordlen > 1 && !bsearch(temp, help_common_words, (sizeof(help_common_words) / sizeof(help_common_words[0])), sizeof(help_common_words[0]), (int (*)(const void *, const void *)) _cups_strcasecmp)) help_add_word(node, temp); } } /* * Get the offset of the next line... */ offset = cupsFileTell(fp); } cupsFileClose(fp); if (node) node->length = (size_t)(offset - node->offset); return (0); } /* * 'help_new_node()' - Create a new node and add it to an index. */ static help_node_t * /* O - Node pointer or NULL on error */ help_new_node(const char *filename, /* I - Filename */ const char *anchor, /* I - Anchor */ const char *section, /* I - Section */ const char *text, /* I - Text */ time_t mtime, /* I - Modification time */ off_t offset, /* I - Offset in file */ size_t length) /* I - Length in bytes */ { help_node_t *n; /* Node */ DEBUG_printf(("2help_new_node(filename=\"%s\", anchor=\"%s\", text=\"%s\", " "mtime=%ld, offset=%ld, length=%ld)", filename, anchor, text, (long)mtime, (long)offset, (long)length)); n = (help_node_t *)calloc(1, sizeof(help_node_t)); if (!n) return (NULL); n->filename = strdup(filename); n->anchor = anchor ? strdup(anchor) : NULL; n->section = *section ? strdup(section) : NULL; n->text = strdup(text); n->mtime = mtime; n->offset = offset; n->length = length; return (n); } /* * 'help_sort_nodes_by_name()' - Sort nodes by section, filename, and anchor. */ static int /* O - Difference */ help_sort_by_name(help_node_t *n1, /* I - First node */ help_node_t *n2) /* I - Second node */ { int diff; /* Difference */ DEBUG_printf(("2help_sort_by_name(n1=%p(%s#%s), n2=%p(%s#%s)", n1, n1->filename, n1->anchor, n2, n2->filename, n2->anchor)); if ((diff = strcmp(n1->filename, n2->filename)) != 0) return (diff); if (!n1->anchor && !n2->anchor) return (0); else if (!n1->anchor) return (-1); else if (!n2->anchor) return (1); else return (strcmp(n1->anchor, n2->anchor)); } /* * 'help_sort_nodes_by_score()' - Sort nodes by score and text. */ static int /* O - Difference */ help_sort_by_score(help_node_t *n1, /* I - First node */ help_node_t *n2) /* I - Second node */ { int diff; /* Difference */ DEBUG_printf(("2help_sort_by_score(n1=%p(%d \"%s\" \"%s\"), " "n2=%p(%d \"%s\" \"%s\")", n1, n1->score, n1->section, n1->text, n2, n2->score, n2->section, n2->text)); if (n1->score != n2->score) return (n2->score - n1->score); if (n1->section && !n2->section) return (1); else if (!n1->section && n2->section) return (-1); else if (n1->section && n2->section && (diff = strcmp(n1->section, n2->section)) != 0) return (diff); return (_cups_strcasecmp(n1->text, n2->text)); } /* * 'help_sort_words()' - Sort words alphabetically. */ static int /* O - Difference */ help_sort_words(help_word_t *w1, /* I - Second word */ help_word_t *w2) /* I - Second word */ { DEBUG_printf(("2help_sort_words(w1=%p(\"%s\"), w2=%p(\"%s\"))", w1, w1->text, w2, w2->text)); return (_cups_strcasecmp(w1->text, w2->text)); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cups-2.2.7/cgi-bin/help-index.h���������������������������������������������������������������������000664 �000765 �000024 �00000004223 13255074424 016672� 0����������������������������������������������������������������������������������������������������ustar�00msweet��������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Online help index definitions for CUPS. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #ifndef _CUPS_HELP_INDEX_H_ # define _CUPS_HELP_INDEX_H_ /* * Include necessary headers... */ # include <cups/array.h> /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Data structures... */ typedef struct help_word_s /**** Help word structure... ****/ { int count; /* Number of occurrences */ char *text; /* Word text */ } help_word_t; typedef struct help_node_s /**** Help node structure... ****/ { char *filename; /* Filename, relative to help dir */ char *section; /* Section name (NULL if none) */ char *anchor; /* Anchor name (NULL if none) */ char *text; /* Text in anchor */ cups_array_t *words; /* Words after this node */ time_t mtime; /* Last modification time */ off_t offset; /* Offset in file */ size_t length; /* Length in bytes */ int score; /* Search score */ } help_node_t; typedef struct help_index_s /**** Help index structure ****/ { int search; /* 1 = search index, 0 = normal */ cups_array_t *nodes; /* Nodes sorted by filename */ cups_array_t *sorted; /* Nodes sorted by score + text */ } help_index_t; /* * Functions... */ extern void helpDeleteIndex(help_index_t *hi); extern help_node_t *helpFindNode(help_index_t *hi, const char *filename, const char *anchor); extern help_index_t *helpLoadIndex(const char *hifile, const char *directory); extern int helpSaveIndex(help_index_t *hi, const char *hifile); extern help_index_t *helpSearchIndex(help_index_t *hi, const char *query, const char *section, const char *filename); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_HELP_INDEX_H_ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cups-2.2.7/cgi-bin/help.c���������������������������������������������������������������������������000664 �000765 �000024 �00000021060 13255074424 015556� 0����������������������������������������������������������������������������������������������������ustar�00msweet��������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Online help CGI for CUPS. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi-private.h" /* * 'main()' - Main entry for CGI. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { help_index_t *hi, /* Help index */ *si; /* Search index */ help_node_t *n; /* Current help node */ int i; /* Looping var */ const char *query; /* Search query */ const char *cache_dir; /* CUPS_CACHEDIR environment variable */ const char *docroot; /* CUPS_DOCROOT environment variable */ const char *helpfile, /* Current help file */ *helptitle = NULL; /* Current help title */ const char *topic; /* Current topic */ char topic_data[1024]; /* Topic form data */ const char *section; /* Current section */ char filename[1024], /* Filename */ directory[1024]; /* Directory */ cups_file_t *fp; /* Help file */ char line[1024]; /* Line from file */ int printable; /* Show printable version? */ /* * Get any form variables... */ cgiInitialize(); printable = cgiGetVariable("PRINTABLE") != NULL; /* * Set the web interface section... */ cgiSetVariable("SECTION", "help"); cgiSetVariable("REFRESH_PAGE", ""); /* * Load the help index... */ if ((cache_dir = getenv("CUPS_CACHEDIR")) == NULL) cache_dir = CUPS_CACHEDIR; snprintf(filename, sizeof(filename), "%s/help.index", cache_dir); if ((docroot = getenv("CUPS_DOCROOT")) == NULL) docroot = CUPS_DOCROOT; snprintf(directory, sizeof(directory), "%s/help", docroot); fprintf(stderr, "DEBUG: helpLoadIndex(filename=\"%s\", directory=\"%s\")\n", filename, directory); hi = helpLoadIndex(filename, directory); if (!hi) { perror(filename); cgiStartHTML(cgiText(_("Online Help"))); cgiSetVariable("ERROR", cgiText(_("Unable to load help index."))); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return (1); } fprintf(stderr, "DEBUG: %d nodes in help index...\n", cupsArrayCount(hi->nodes)); /* * See if we are viewing a file... */ for (i = 0; i < argc; i ++) fprintf(stderr, "DEBUG: argv[%d]=\"%s\"\n", i, argv[i]); if ((helpfile = getenv("PATH_INFO")) != NULL) { helpfile ++; if (!*helpfile) helpfile = NULL; } if (helpfile) { /* * Verify that the help file exists and is part of the index... */ snprintf(filename, sizeof(filename), "%s/help/%s", docroot, helpfile); fprintf(stderr, "DEBUG: helpfile=\"%s\", filename=\"%s\"\n", helpfile, filename); if (access(filename, R_OK)) { perror(filename); cgiStartHTML(cgiText(_("Online Help"))); cgiSetVariable("ERROR", cgiText(_("Unable to access help file."))); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return (1); } if ((n = helpFindNode(hi, helpfile, NULL)) == NULL) { cgiStartHTML(cgiText(_("Online Help"))); cgiSetVariable("ERROR", cgiText(_("Help file not in index."))); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); return (1); } /* * Save the page title and help file... */ helptitle = n->text; topic = n->section; /* * Send a standard page header... */ if (printable) puts("Content-Type: text/html;charset=utf-8\n"); else cgiStartHTML(n->text); } else { /* * Send a standard page header... */ cgiStartHTML(cgiText(_("Online Help"))); topic = cgiGetVariable("TOPIC"); } /* * Do a search as needed... */ if (cgiGetVariable("CLEAR")) cgiSetVariable("QUERY", ""); query = cgiGetVariable("QUERY"); si = helpSearchIndex(hi, query, topic, helpfile); cgiClearVariables(); if (query) cgiSetVariable("QUERY", query); if (topic) cgiSetVariable("TOPIC", topic); if (helpfile) cgiSetVariable("HELPFILE", helpfile); if (helptitle) cgiSetVariable("HELPTITLE", helptitle); fprintf(stderr, "DEBUG: query=\"%s\", topic=\"%s\"\n", query ? query : "(null)", topic ? topic : "(null)"); if (si) { help_node_t *nn; /* Parent node */ fprintf(stderr, "DEBUG: si=%p, si->sorted=%p, cupsArrayCount(si->sorted)=%d\n", si, si->sorted, cupsArrayCount(si->sorted)); for (i = 0, n = (help_node_t *)cupsArrayFirst(si->sorted); n; i ++, n = (help_node_t *)cupsArrayNext(si->sorted)) { if (helpfile && n->anchor) snprintf(line, sizeof(line), "#%s", n->anchor); else if (n->anchor) snprintf(line, sizeof(line), "/help/%s?QUERY=%s#%s", n->filename, query ? query : "", n->anchor); else snprintf(line, sizeof(line), "/help/%s?QUERY=%s", n->filename, query ? query : ""); cgiSetArray("QTEXT", i, n->text); cgiSetArray("QLINK", i, line); if (!helpfile && n->anchor) { nn = helpFindNode(hi, n->filename, NULL); snprintf(line, sizeof(line), "/help/%s?QUERY=%s", nn->filename, query ? query : ""); cgiSetArray("QPTEXT", i, nn->text); cgiSetArray("QPLINK", i, line); } else { cgiSetArray("QPTEXT", i, ""); cgiSetArray("QPLINK", i, ""); } fprintf(stderr, "DEBUG: [%d] = \"%s\" @ \"%s\"\n", i, n->text, line); } helpDeleteIndex(si); } /* * OK, now list the bookmarks within the index... */ for (i = 0, section = NULL, n = (help_node_t *)cupsArrayFirst(hi->sorted); n; n = (help_node_t *)cupsArrayNext(hi->sorted)) { if (n->anchor) continue; /* * Add a section link as needed... */ if (n->section && (!section || strcmp(n->section, section))) { /* * Add a link for this node... */ snprintf(line, sizeof(line), "/help/?TOPIC=%s&QUERY=%s", cgiFormEncode(topic_data, n->section, sizeof(topic_data)), query ? query : ""); cgiSetArray("BMLINK", i, line); cgiSetArray("BMTEXT", i, n->section); cgiSetArray("BMINDENT", i, "0"); i ++; section = n->section; } if (!topic || !n->section || strcmp(n->section, topic)) continue; /* * Add a link for this node... */ snprintf(line, sizeof(line), "/help/%s?TOPIC=%s&QUERY=%s", n->filename, cgiFormEncode(topic_data, n->section, sizeof(topic_data)), query ? query : ""); cgiSetArray("BMLINK", i, line); cgiSetArray("BMTEXT", i, n->text); cgiSetArray("BMINDENT", i, "1"); i ++; if (helpfile && !strcmp(helpfile, n->filename)) { help_node_t *nn; /* Pointer to sub-node */ cupsArraySave(hi->sorted); for (nn = (help_node_t *)cupsArrayFirst(hi->sorted); nn; nn = (help_node_t *)cupsArrayNext(hi->sorted)) if (nn->anchor && !strcmp(helpfile, nn->filename)) { /* * Add a link for this node... */ snprintf(line, sizeof(line), "#%s", nn->anchor); cgiSetArray("BMLINK", i, line); cgiSetArray("BMTEXT", i, nn->text); cgiSetArray("BMINDENT", i, "2"); i ++; } cupsArrayRestore(hi->sorted); } } /* * Show the search and bookmark content... */ if (!helpfile || !printable) cgiCopyTemplateLang("help-header.tmpl"); else cgiCopyTemplateLang("help-printable.tmpl"); /* * If we are viewing a file, copy it in now... */ if (helpfile) { if ((fp = cupsFileOpen(filename, "r")) != NULL) { int inbody; /* Are we inside the body? */ inbody = 0; while (cupsFileGets(fp, line, sizeof(line))) { if (inbody) { if (!_cups_strncasecmp(line, "</BODY>", 7)) break; printf("%s\n", line); } else if (!_cups_strncasecmp(line, "<BODY", 5)) inbody = 1; } cupsFileClose(fp); } else { perror(filename); cgiSetVariable("ERROR", cgiText(_("Unable to open help file."))); cgiCopyTemplateLang("error.tmpl"); } } /* * Send a standard trailer... */ if (!printable) { cgiCopyTemplateLang("help-trailer.tmpl"); cgiEndHTML(); } else puts("</BODY>\n</HTML>"); /* * Delete the index... */ helpDeleteIndex(hi); /* * Return with no errors... */ return (0); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cups-2.2.7/cgi-bin/html.c���������������������������������������������������������������������������000664 �000765 �000024 �00000007537 13255074424 015607� 0����������������������������������������������������������������������������������������������������ustar�00msweet��������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * HTML support functions for CUPS. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi-private.h" /* * Local globals... */ static const char *cgi_multipart = NULL; /* Multipart separator, if any */ /* * Local functions... */ static const char *cgi_null_passwd(const char *prompt); /* * 'cgiEndHTML()' - End a HTML page. */ void cgiEndHTML(void) { /* * Send the standard trailer... */ cgiCopyTemplateLang("trailer.tmpl"); } /* * 'cgiEndMultipart()' - End the delivery of a multipart web page. */ void cgiEndMultipart(void) { if (cgi_multipart) { printf("\n%s--\n", cgi_multipart); fflush(stdout); } } /* * 'cgiFormEncode()' - Encode a string as a form variable. */ char * /* O - Destination string */ cgiFormEncode(char *dst, /* I - Destination string */ const char *src, /* I - Source string */ size_t dstsize) /* I - Size of destination string */ { char *dstptr, /* Pointer into destination */ *dstend; /* End of destination */ static const char *hex = /* Hexadecimal characters */ "0123456789ABCDEF"; /* * Mark the end of the string... */ dstend = dst + dstsize - 1; /* * Loop through the source string and copy... */ for (dstptr = dst; *src && dstptr < dstend;) { switch (*src) { case ' ' : /* * Encode spaces with a "+"... */ *dstptr++ = '+'; src ++; break; case '&' : case '%' : case '+' : /* * Encode special characters with %XX escape... */ if (dstptr < (dstend - 2)) { *dstptr++ = '%'; *dstptr++ = hex[(*src & 255) >> 4]; *dstptr++ = hex[*src & 15]; src ++; } break; default : /* * Copy other characters literally... */ *dstptr++ = *src++; break; } } /* * Nul-terminate the destination string... */ *dstptr = '\0'; /* * Return the encoded string... */ return (dst); } /* * 'cgiStartHTML()' - Start a HTML page. */ void cgiStartHTML(const char *title) /* I - Title of page */ { /* * Disable any further authentication attempts... */ cupsSetPasswordCB(cgi_null_passwd); /* * Tell the client to expect UTF-8 encoded HTML... */ if (cgi_multipart) puts(cgi_multipart); puts("Content-Type: text/html;charset=utf-8\n"); /* * Send a standard header... */ cgiSetVariable("TITLE", title); cgiSetServerVersion(); cgiCopyTemplateLang("header.tmpl"); } /* * 'cgiStartMultipart()' - Start a multipart delivery of a web page. */ void cgiStartMultipart(void) { puts("MIME-Version: 1.0\n" "Content-Type: multipart/x-mixed-replace; boundary=\"CUPS-MULTIPART\"\n"); fflush(stdout); cgi_multipart = "--CUPS-MULTIPART"; } /* * 'cgiSupportsMultipart()' - Does the browser support multi-part documents? */ int /* O - 1 if multi-part supported, 0 otherwise */ cgiSupportsMultipart(void) { /* * Too many bug reports for browsers that don't support it, and too much pain * to whitelist known-good browsers, so for now we just punt on multi-part * support... :( */ return (0); } /* * 'cgi_null_passwd()' - Return a NULL password for authentication. */ static const char * /* O - NULL */ cgi_null_passwd(const char *prompt) /* I - Prompt string (unused) */ { (void)prompt; fprintf(stderr, "DEBUG: cgi_null_passwd(prompt=\"%s\") called!\n", prompt ? prompt : "(null)"); return (NULL); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������cups-2.2.7/cgi-bin/ipp-var.c������������������������������������������������������������������������000664 �000765 �000024 �00000111760 13255074424 016213� 0����������������������������������������������������������������������������������������������������ustar�00msweet��������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * CGI <-> IPP variable routines for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi-private.h" /* * 'cgiGetAttributes()' - Get the list of attributes that are needed * by the template file. */ void cgiGetAttributes(ipp_t *request, /* I - IPP request */ const char *tmpl) /* I - Base filename */ { int num_attrs; /* Number of attributes */ char *attrs[1000]; /* Attributes */ int i; /* Looping var */ char filename[1024], /* Filename */ locale[16]; /* Locale name */ const char *directory, /* Directory */ *lang; /* Language */ FILE *in; /* Input file */ int ch; /* Character from file */ char name[255], /* Name of variable */ *nameptr; /* Pointer into name */ /* * Convert the language to a locale name... */ if ((lang = getenv("LANG")) != NULL) { for (i = 0; lang[i] && i < 15; i ++) if (isalnum(lang[i] & 255)) locale[i] = (char)tolower(lang[i]); else locale[i] = '_'; locale[i] = '\0'; } else locale[0] = '\0'; /* * See if we have a template file for this language... */ directory = cgiGetTemplateDir(); snprintf(filename, sizeof(filename), "%s/%s/%s", directory, locale, tmpl); if (access(filename, 0)) { locale[2] = '\0'; snprintf(filename, sizeof(filename), "%s/%s/%s", directory, locale, tmpl); if (access(filename, 0)) snprintf(filename, sizeof(filename), "%s/%s", directory, tmpl); } /* * Open the template file... */ if ((in = fopen(filename, "r")) == NULL) return; /* * Loop through the file adding attribute names as needed... */ num_attrs = 0; attrs[0] = NULL; /* Eliminate compiler warning */ while ((ch = getc(in)) != EOF) if (ch == '\\') getc(in); else if (ch == '{' && num_attrs < (int)(sizeof(attrs) / sizeof(attrs[0]))) { /* * Grab the name... */ for (nameptr = name; (ch = getc(in)) != EOF;) if (strchr("}]<>=!~ \t\n", ch)) break; else if (nameptr > name && ch == '?') break; else if (nameptr < (name + sizeof(name) - 1)) { if (ch == '_') *nameptr++ = '-'; else *nameptr++ = (char)ch; } *nameptr = '\0'; if (!strncmp(name, "printer_state_history", 21)) strlcpy(name, "printer_state_history", sizeof(name)); /* * Possibly add it to the list of attributes... */ for (i = 0; i < num_attrs; i ++) if (!strcmp(attrs[i], name)) break; if (i >= num_attrs) { attrs[num_attrs] = strdup(name); num_attrs ++; } } /* * If we have attributes, add a requested-attributes attribute to the * request... */ if (num_attrs > 0) { ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", num_attrs, NULL, (const char **)attrs); for (i = 0; i < num_attrs; i ++) free(attrs[i]); } fclose(in); } /* * 'cgiGetIPPObjects()' - Get the objects in an IPP response. */ cups_array_t * /* O - Array of objects */ cgiGetIPPObjects(ipp_t *response, /* I - IPP response */ void *search) /* I - Search filter */ { int i; /* Looping var */ cups_array_t *objs; /* Array of objects */ ipp_attribute_t *attr, /* Current attribute */ *first; /* First attribute for object */ ipp_tag_t group; /* Current group tag */ int add; /* Add this object to the array? */ if (!response) return (0); for (add = 0, first = NULL, objs = cupsArrayNew(NULL, NULL), group = IPP_TAG_ZERO, attr = response->attrs; attr; attr = attr->next) { if (attr->group_tag != group) { group = attr->group_tag; if (group != IPP_TAG_ZERO && group != IPP_TAG_OPERATION) { first = attr; add = 0; } else if (add && first) { cupsArrayAdd(objs, first); add = 0; first = NULL; } } if (attr->name && attr->group_tag != IPP_TAG_OPERATION && !add) { if (!search) { /* * Add all objects if there is no search... */ add = 1; } else { /* * Check the search string against the string and integer values. */ switch (attr->value_tag) { case IPP_TAG_TEXTLANG : case IPP_TAG_NAMELANG : case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_URI : case IPP_TAG_MIMETYPE : for (i = 0; !add && i < attr->num_values; i ++) if (cgiDoSearch(search, attr->values[i].string.text)) add = 1; break; case IPP_TAG_INTEGER : if (!strncmp(ippGetName(attr), "time-at-", 8)) break; /* Ignore time-at-xxx */ for (i = 0; !add && i < attr->num_values; i ++) { char buf[255]; /* Number buffer */ sprintf(buf, "%d", attr->values[i].integer); if (cgiDoSearch(search, buf)) add = 1; } break; default : break; } } } } if (add && first) cupsArrayAdd(objs, first); return (objs); } /* * 'cgiMoveJobs()' - Move one or more jobs. * * At least one of dest or job_id must be non-zero/NULL. */ void cgiMoveJobs(http_t *http, /* I - Connection to server */ const char *dest, /* I - Destination or NULL */ int job_id) /* I - Job ID or 0 for all */ { int i; /* Looping var */ const char *user; /* Username */ ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* Current attribute */ const char *name; /* Destination name */ const char *job_printer_uri; /* JOB_PRINTER_URI form variable */ char current_dest[1024]; /* Current destination */ /* * Make sure we have a username... */ if ((user = getenv("REMOTE_USER")) == NULL) { puts("Status: 401\n"); exit(0); } /* * See if the user has already selected a new destination... */ if ((job_printer_uri = cgiGetVariable("JOB_PRINTER_URI")) == NULL) { /* * Make sure necessary form variables are set... */ if (job_id) { char temp[255]; /* Temporary string */ sprintf(temp, "%d", job_id); cgiSetVariable("JOB_ID", temp); } if (dest) cgiSetVariable("PRINTER_NAME", dest); /* * No new destination specified, show the user what the available * printers/classes are... */ if (!dest) { /* * Get the current destination for job N... */ char job_uri[1024]; /* Job URI */ request = ippNewRequest(IPP_GET_JOB_ATTRIBUTES); snprintf(job_uri, sizeof(job_uri), "ipp://localhost/jobs/%d", job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, job_uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "job-printer-uri"); if ((response = cupsDoRequest(http, request, "/")) != NULL) { if ((attr = ippFindAttribute(response, "job-printer-uri", IPP_TAG_URI)) != NULL) { /* * Pull the name from the URI... */ strlcpy(current_dest, strrchr(attr->values[0].string.text, '/') + 1, sizeof(current_dest)); dest = current_dest; } ippDelete(response); } if (!dest) { /* * Couldn't get the current destination... */ cgiStartHTML(cgiText(_("Move Job"))); cgiShowIPPError(_("Unable to find destination for job")); cgiEndHTML(); return; } } /* * Get the list of available destinations... */ request = ippNewRequest(CUPS_GET_PRINTERS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "printer-uri-supported"); if (user) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type", CUPS_PRINTER_LOCAL); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type-mask", CUPS_PRINTER_SCANNER); if ((response = cupsDoRequest(http, request, "/")) != NULL) { for (i = 0, attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI); attr; attr = ippFindNextAttribute(response, "printer-uri-supported", IPP_TAG_URI)) { /* * Pull the name from the URI... */ name = strrchr(attr->values[0].string.text, '/') + 1; /* * If the name is not the same as the current destination, add it! */ if (_cups_strcasecmp(name, dest)) { cgiSetArray("JOB_PRINTER_URI", i, attr->values[0].string.text); cgiSetArray("JOB_PRINTER_NAME", i, name); i ++; } } ippDelete(response); } /* * Show the form... */ if (job_id) cgiStartHTML(cgiText(_("Move Job"))); else cgiStartHTML(cgiText(_("Move All Jobs"))); if (cgiGetSize("JOB_PRINTER_NAME") > 0) cgiCopyTemplateLang("job-move.tmpl"); else { if (job_id) cgiSetVariable("MESSAGE", cgiText(_("Unable to move job"))); else cgiSetVariable("MESSAGE", cgiText(_("Unable to move jobs"))); cgiSetVariable("ERROR", cgiText(_("No destinations added."))); cgiCopyTemplateLang("error.tmpl"); } } else { /* * Try moving the job or jobs... */ char uri[1024], /* Job/printer URI */ resource[1024], /* Post resource */ refresh[1024]; /* Refresh URL */ const char *job_printer_name; /* New printer name */ request = ippNewRequest(CUPS_MOVE_JOB); if (job_id) { /* * Move 1 job... */ snprintf(resource, sizeof(resource), "/jobs/%d", job_id); snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); } else { /* * Move all active jobs on a destination... */ snprintf(resource, sizeof(resource), "/%s/%s", cgiGetVariable("SECTION"), dest); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", ippPort(), "/%s/%s", cgiGetVariable("SECTION"), dest); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); } ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-printer-uri", NULL, job_printer_uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); ippDelete(cupsDoRequest(http, request, resource)); /* * Show the results... */ job_printer_name = strrchr(job_printer_uri, '/') + 1; if (cupsLastError() <= IPP_OK_CONFLICT) { const char *path = strstr(job_printer_uri, "/printers/"); if (!path) { path = strstr(job_printer_uri, "/classes/"); cgiSetVariable("IS_CLASS", "YES"); } if (path) { cgiFormEncode(uri, path, sizeof(uri)); snprintf(refresh, sizeof(refresh), "2;URL=%s", uri); cgiSetVariable("refresh_page", refresh); } } if (job_id) cgiStartHTML(cgiText(_("Move Job"))); else cgiStartHTML(cgiText(_("Move All Jobs"))); if (cupsLastError() > IPP_OK_CONFLICT) { if (job_id) cgiShowIPPError(_("Unable to move job")); else cgiShowIPPError(_("Unable to move jobs")); } else { cgiSetVariable("JOB_PRINTER_NAME", job_printer_name); cgiCopyTemplateLang("job-moved.tmpl"); } } cgiEndHTML(); } /* * 'cgiPrintCommand()' - Print a CUPS command job. */ void cgiPrintCommand(http_t *http, /* I - Connection to server */ const char *dest, /* I - Destination printer */ const char *command, /* I - Command to send */ const char *title) /* I - Page/job title */ { int job_id; /* Command file job */ char uri[HTTP_MAX_URI], /* Job URI */ resource[1024], /* Printer resource path */ refresh[1024], /* Refresh URL */ command_file[1024]; /* Command "file" */ http_status_t status; /* Document status */ cups_option_t hold_option; /* job-hold-until option */ const char *user; /* User name */ ipp_t *request, /* Get-Job-Attributes request */ *response; /* Get-Job-Attributes response */ ipp_attribute_t *attr; /* Current job attribute */ static const char * const job_attrs[] =/* Job attributes we want */ { "job-state", "job-printer-state-message" }; /* * Create the CUPS command file... */ snprintf(command_file, sizeof(command_file), "#CUPS-COMMAND\n%s\n", command); /* * Show status... */ if (cgiSupportsMultipart()) { cgiStartMultipart(); cgiStartHTML(title); cgiCopyTemplateLang("command.tmpl"); cgiEndHTML(); fflush(stdout); } /* * Send the command file job... */ hold_option.name = "job-hold-until"; hold_option.value = "no-hold"; if ((user = getenv("REMOTE_USER")) != NULL) cupsSetUser(user); else cupsSetUser("anonymous"); if ((job_id = cupsCreateJob(http, dest, title, 1, &hold_option)) < 1) { cgiSetVariable("MESSAGE", cgiText(_("Unable to send command to printer driver"))); cgiSetVariable("ERROR", cupsLastErrorString()); cgiStartHTML(title); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); if (cgiSupportsMultipart()) cgiEndMultipart(); return; } status = cupsStartDocument(http, dest, job_id, NULL, CUPS_FORMAT_COMMAND, 1); if (status == HTTP_CONTINUE) status = cupsWriteRequestData(http, command_file, strlen(command_file)); if (status == HTTP_CONTINUE) cupsFinishDocument(http, dest); if (cupsLastError() >= IPP_REDIRECTION_OTHER_SITE) { cgiSetVariable("MESSAGE", cgiText(_("Unable to send command to printer driver"))); cgiSetVariable("ERROR", cupsLastErrorString()); cgiStartHTML(title); cgiCopyTemplateLang("error.tmpl"); cgiEndHTML(); if (cgiSupportsMultipart()) cgiEndMultipart(); cupsCancelJob(dest, job_id); return; } /* * Wait for the job to complete... */ if (cgiSupportsMultipart()) { for (;;) { /* * Get the current job state... */ snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", job_id); request = ippNewRequest(IPP_GET_JOB_ATTRIBUTES); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); if (user) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", 2, NULL, job_attrs); if ((response = cupsDoRequest(http, request, "/")) != NULL) cgiSetIPPVars(response, NULL, NULL, NULL, 0); attr = ippFindAttribute(response, "job-state", IPP_TAG_ENUM); if (!attr || attr->values[0].integer >= IPP_JOB_STOPPED || attr->values[0].integer == IPP_JOB_HELD) { ippDelete(response); break; } /* * Job not complete, so update the status... */ ippDelete(response); cgiStartHTML(title); cgiCopyTemplateLang("command.tmpl"); cgiEndHTML(); fflush(stdout); sleep(5); } } /* * Send the final page that reloads the printer's page... */ snprintf(resource, sizeof(resource), "/printers/%s", dest); cgiFormEncode(uri, resource, sizeof(uri)); snprintf(refresh, sizeof(refresh), "5;URL=%s", uri); cgiSetVariable("refresh_page", refresh); cgiStartHTML(title); cgiCopyTemplateLang("command.tmpl"); cgiEndHTML(); if (cgiSupportsMultipart()) cgiEndMultipart(); } /* * 'cgiPrintTestPage()' - Print a test page. */ void cgiPrintTestPage(http_t *http, /* I - Connection to server */ const char *dest) /* I - Destination printer/class */ { ipp_t *request, /* IPP request */ *response; /* IPP response */ char uri[HTTP_MAX_URI], /* Printer URI */ resource[1024], /* POST resource path */ refresh[1024], /* Refresh URL */ filename[1024]; /* Test page filename */ const char *datadir; /* CUPS_DATADIR env var */ const char *user; /* Username */ /* * See who is logged in... */ user = getenv("REMOTE_USER"); /* * Locate the test page file... */ if ((datadir = getenv("CUPS_DATADIR")) == NULL) datadir = CUPS_DATADIR; snprintf(filename, sizeof(filename), "%s/data/testprint", datadir); /* * Point to the printer/class... */ snprintf(resource, sizeof(resource), "/%s/%s", cgiGetVariable("SECTION"), dest); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", ippPort(), "/%s/%s", cgiGetVariable("SECTION"), dest); /* * Build an IPP_PRINT_JOB request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri * requesting-user-name */ request = ippNewRequest(IPP_PRINT_JOB); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); if (user) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, "Test Page"); /* * Do the request and get back a response... */ if ((response = cupsDoFileRequest(http, request, resource, filename)) != NULL) { cgiSetIPPVars(response, NULL, NULL, NULL, 0); ippDelete(response); } if (cupsLastError() <= IPP_OK_CONFLICT) { /* * Automatically reload the printer status page... */ cgiFormEncode(uri, resource, sizeof(uri)); snprintf(refresh, sizeof(refresh), "2;URL=%s", uri); cgiSetVariable("refresh_page", refresh); } else if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } cgiStartHTML(cgiText(_("Print Test Page"))); if (cupsLastError() > IPP_OK_CONFLICT) cgiShowIPPError(_("Unable to print test page")); else { cgiSetVariable("PRINTER_NAME", dest); cgiCopyTemplateLang("test-page.tmpl"); } cgiEndHTML(); } /* * 'cgiRewriteURL()' - Rewrite a printer URI into a web browser URL... */ char * /* O - New URL */ cgiRewriteURL(const char *uri, /* I - Current URI */ char *url, /* O - New URL */ int urlsize, /* I - Size of URL buffer */ const char *newresource) /* I - Replacement resource */ { char scheme[HTTP_MAX_URI], userpass[HTTP_MAX_URI], hostname[HTTP_MAX_URI], rawresource[HTTP_MAX_URI], resource[HTTP_MAX_URI], /* URI components... */ *rawptr, /* Pointer into rawresource */ *resptr; /* Pointer into resource */ int port; /* Port number */ static int ishttps = -1; /* Using encryption? */ static const char *server; /* Name of server */ static char servername[1024]; /* Local server name */ static const char hexchars[] = "0123456789ABCDEF"; /* Hexadecimal conversion characters */ /* * Check if we have been called before... */ if (ishttps < 0) { /* * No, initialize static vars for the conversion... * * First get the server name associated with the client interface as * well as the locally configured hostname. We'll check *both* of * these to see if the printer URL is local... */ if ((server = getenv("SERVER_NAME")) == NULL) server = ""; httpGetHostname(NULL, servername, sizeof(servername)); /* * Then flag whether we are using SSL on this connection... */ ishttps = getenv("HTTPS") != NULL; } /* * Convert the URI to a URL... */ httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, rawresource, sizeof(rawresource)); if (!strcmp(scheme, "ipp") || !strcmp(scheme, "http") || !strcmp(scheme, "https")) { if (newresource) { /* * Force the specified resource name instead of the one in the URL... */ strlcpy(resource, newresource, sizeof(resource)); } else { /* * Rewrite the resource string so it doesn't contain any * illegal chars... */ for (rawptr = rawresource, resptr = resource; *rawptr; rawptr ++) if ((*rawptr & 128) || *rawptr == '%' || *rawptr == ' ' || *rawptr == '#' || *rawptr == '?' || *rawptr == '.') /* For MSIE */ { if (resptr < (resource + sizeof(resource) - 3)) { *resptr++ = '%'; *resptr++ = hexchars[(*rawptr >> 4) & 15]; *resptr++ = hexchars[*rawptr & 15]; } } else if (resptr < (resource + sizeof(resource) - 1)) *resptr++ = *rawptr; *resptr = '\0'; } /* * Map local access to a local URI... */ if (!_cups_strcasecmp(hostname, "127.0.0.1") || !_cups_strcasecmp(hostname, "[::1]") || !_cups_strcasecmp(hostname, "localhost") || !_cups_strncasecmp(hostname, "localhost.", 10) || !_cups_strcasecmp(hostname, server) || !_cups_strcasecmp(hostname, servername)) { /* * Make URI relative to the current server... */ strlcpy(url, resource, (size_t)urlsize); } else { /* * Rewrite URI with HTTP/HTTPS scheme... */ if (userpass[0]) snprintf(url, (size_t)urlsize, "%s://%s@%s:%d%s", ishttps ? "https" : "http", userpass, hostname, port, resource); else snprintf(url, (size_t)urlsize, "%s://%s:%d%s", ishttps ? "https" : "http", hostname, port, resource); } } else strlcpy(url, uri, (size_t)urlsize); return (url); } /* * 'cgiSetIPPObjectVars()' - Set CGI variables from an IPP object. */ ipp_attribute_t * /* O - Next object */ cgiSetIPPObjectVars( ipp_attribute_t *obj, /* I - Response data to be copied... */ const char *prefix, /* I - Prefix for name or NULL */ int element) /* I - Parent element number */ { ipp_attribute_t *attr; /* Attribute in response... */ int i; /* Looping var */ char name[1024], /* Name of attribute */ *nameptr, /* Pointer into name */ value[16384], /* Value(s) */ *valptr; /* Pointer into value */ fprintf(stderr, "DEBUG2: cgiSetIPPObjectVars(obj=%p, prefix=\"%s\", " "element=%d)\n", obj, prefix ? prefix : "(null)", element); /* * Set common CGI template variables... */ if (!prefix) cgiSetServerVersion(); /* * Loop through the attributes and set them for the template... */ for (attr = obj; attr && attr->group_tag != IPP_TAG_ZERO; attr = attr->next) { /* * Copy the attribute name, substituting "_" for "-"... */ if (!attr->name) continue; if (prefix) { snprintf(name, sizeof(name), "%s.", prefix); nameptr = name + strlen(name); } else nameptr = name; for (i = 0; attr->name[i] && nameptr < (name + sizeof(name) - 1); i ++) if (attr->name[i] == '-') *nameptr++ = '_'; else *nameptr++ = attr->name[i]; *nameptr = '\0'; /* * Add "job_printer_name" variable if we have a "job_printer_uri" * attribute... */ if (!strcmp(name, "job_printer_uri")) { if ((valptr = strrchr(attr->values[0].string.text, '/')) == NULL) valptr = "unknown"; else valptr ++; cgiSetArray("job_printer_name", element, valptr); } /* * Localize event names in "notify_events" variable... */ if (!strcmp(name, "notify_events")) { size_t remaining; /* Remaining bytes in buffer */ value[0] = '\0'; valptr = value; for (i = 0; i < attr->num_values; i ++) { if (valptr >= (value + sizeof(value) - 3)) break; if (i) { *valptr++ = ','; *valptr++ = ' '; } remaining = sizeof(value) - (size_t)(valptr - value); if (!strcmp(attr->values[i].string.text, "printer-stopped")) strlcpy(valptr, _("Printer Paused"), remaining); else if (!strcmp(attr->values[i].string.text, "printer-added")) strlcpy(valptr, _("Printer Added"), remaining); else if (!strcmp(attr->values[i].string.text, "printer-modified")) strlcpy(valptr, _("Printer Modified"), remaining); else if (!strcmp(attr->values[i].string.text, "printer-deleted")) strlcpy(valptr, _("Printer Deleted"), remaining); else if (!strcmp(attr->values[i].string.text, "job-created")) strlcpy(valptr, _("Job Created"), remaining); else if (!strcmp(attr->values[i].string.text, "job-completed")) strlcpy(valptr, _("Job Completed"), remaining); else if (!strcmp(attr->values[i].string.text, "job-stopped")) strlcpy(valptr, _("Job Stopped"), remaining); else if (!strcmp(attr->values[i].string.text, "job-config-changed")) strlcpy(valptr, _("Job Options Changed"), remaining); else if (!strcmp(attr->values[i].string.text, "server-restarted")) strlcpy(valptr, _("Server Restarted"), remaining); else if (!strcmp(attr->values[i].string.text, "server-started")) strlcpy(valptr, _("Server Started"), remaining); else if (!strcmp(attr->values[i].string.text, "server-stopped")) strlcpy(valptr, _("Server Stopped"), remaining); else if (!strcmp(attr->values[i].string.text, "server-audit")) strlcpy(valptr, _("Server Security Auditing"), remaining); else strlcpy(valptr, attr->values[i].string.text, remaining); valptr += strlen(valptr); } cgiSetArray("notify_events", element, value); continue; } /* * Add "notify_printer_name" variable if we have a "notify_printer_uri" * attribute... */ if (!strcmp(name, "notify_printer_uri")) { if ((valptr = strrchr(attr->values[0].string.text, '/')) == NULL) valptr = "unknown"; else valptr ++; cgiSetArray("notify_printer_name", element, valptr); } /* * Add "notify_recipient_name" variable if we have a "notify_recipient_uri" * attribute, and rewrite recipient URI... */ if (!strcmp(name, "notify_recipient_uri")) { char uri[1024], /* New URI */ scheme[32], /* Scheme portion of URI */ userpass[256], /* Username/password portion of URI */ host[1024], /* Hostname portion of URI */ resource[1024], /* Resource portion of URI */ *options; /* Options in URI */ int port; /* Port number */ httpSeparateURI(HTTP_URI_CODING_ALL, attr->values[0].string.text, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)); if (!strcmp(scheme, "rss")) { /* * RSS notification... */ if ((options = strchr(resource, '?')) != NULL) *options = '\0'; if (host[0]) { /* * Link to remote feed... */ httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "http", userpass, host, port, resource); strlcpy(name, uri, sizeof(name)); } else { /* * Link to local feed... */ snprintf(uri, sizeof(uri), "/rss%s", resource); strlcpy(name, resource + 1, sizeof(name)); } } else { /* * Other... */ strlcpy(uri, attr->values[0].string.text, sizeof(uri)); strlcpy(name, resource, sizeof(name)); } cgiSetArray("notify_recipient_uri", element, uri); cgiSetArray("notify_recipient_name", element, name); continue; } /* * Add "admin_uri" variable if we have a "printer_uri_supported" * attribute... */ if (!strcmp(name, "printer_uri_supported")) { cgiRewriteURL(attr->values[0].string.text, value, sizeof(value), "/admin/"); cgiSetArray("admin_uri", element, value); } /* * Copy values... */ value[0] = '\0'; /* Initially an empty string */ valptr = value; /* Start at the beginning */ for (i = 0; i < attr->num_values; i ++) { if (i) strlcat(valptr, ", ", sizeof(value) - (size_t)(valptr - value)); valptr += strlen(valptr); switch (attr->value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : if (strncmp(name, "time_at_", 8) == 0) _cupsStrDate(valptr, sizeof(value) - (size_t)(valptr - value), (time_t)ippGetInteger(attr, i)); else snprintf(valptr, sizeof(value) - (size_t)(valptr - value), "%d", ippGetInteger(attr, i)); break; case IPP_TAG_BOOLEAN : snprintf(valptr, sizeof(value) - (size_t)(valptr - value), "%d", attr->values[i].boolean); break; case IPP_TAG_NOVALUE : strlcat(valptr, "novalue", sizeof(value) - (size_t)(valptr - value)); break; case IPP_TAG_RANGE : snprintf(valptr, sizeof(value) - (size_t)(valptr - value), "%d-%d", attr->values[i].range.lower, attr->values[i].range.upper); break; case IPP_TAG_RESOLUTION : snprintf(valptr, sizeof(value) - (size_t)(valptr - value), "%dx%d%s", attr->values[i].resolution.xres, attr->values[i].resolution.yres, attr->values[i].resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm"); break; case IPP_TAG_URI : if (strchr(attr->values[i].string.text, ':') && strcmp(name, "device_uri")) { /* * Rewrite URIs... */ cgiRewriteURL(attr->values[i].string.text, valptr, (int)(sizeof(value) - (size_t)(valptr - value)), NULL); break; } case IPP_TAG_STRING : case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : case IPP_TAG_CHARSET : case IPP_TAG_LANGUAGE : case IPP_TAG_MIMETYPE : strlcat(valptr, attr->values[i].string.text, sizeof(value) - (size_t)(valptr - value)); break; case IPP_TAG_BEGIN_COLLECTION : snprintf(value, sizeof(value), "%s%d", name, i + 1); cgiSetIPPVars(attr->values[i].collection, NULL, NULL, value, element); break; default : break; /* anti-compiler-warning-code */ } } /* * Add the element... */ if (attr->value_tag != IPP_TAG_BEGIN_COLLECTION) { cgiSetArray(name, element, value); fprintf(stderr, "DEBUG2: %s[%d]=\"%s\"\n", name, element, value); } } return (attr ? attr->next : NULL); } /* * 'cgiSetIPPVars()' - Set CGI variables from an IPP response. */ int /* O - Maximum number of elements */ cgiSetIPPVars(ipp_t *response, /* I - Response data to be copied... */ const char *filter_name, /* I - Filter name */ const char *filter_value, /* I - Filter value */ const char *prefix, /* I - Prefix for name or NULL */ int parent_el) /* I - Parent element number */ { int element; /* Element in CGI array */ ipp_attribute_t *attr, /* Attribute in response... */ *filter; /* Filtering attribute */ fprintf(stderr, "DEBUG2: cgiSetIPPVars(response=%p, filter_name=\"%s\", " "filter_value=\"%s\", prefix=\"%s\", parent_el=%d)\n", response, filter_name ? filter_name : "(null)", filter_value ? filter_value : "(null)", prefix ? prefix : "(null)", parent_el); /* * Set common CGI template variables... */ if (!prefix) cgiSetServerVersion(); /* * Loop through the attributes and set them for the template... */ attr = response->attrs; if (!prefix) while (attr && attr->group_tag == IPP_TAG_OPERATION) attr = attr->next; for (element = parent_el; attr; element ++) { /* * Copy attributes to a separator... */ while (attr && attr->group_tag == IPP_TAG_ZERO) attr= attr->next; if (!attr) break; if (filter_name) { for (filter = attr; filter != NULL && filter->group_tag != IPP_TAG_ZERO; filter = filter->next) if (filter->name && !strcmp(filter->name, filter_name) && (filter->value_tag == IPP_TAG_STRING || (filter->value_tag >= IPP_TAG_TEXTLANG && filter->value_tag <= IPP_TAG_MIMETYPE)) && filter->values[0].string.text != NULL && !_cups_strcasecmp(filter->values[0].string.text, filter_value)) break; if (!filter) return (element + 1); if (filter->group_tag == IPP_TAG_ZERO) { attr = filter; element --; continue; } } attr = cgiSetIPPObjectVars(attr, prefix, element); } fprintf(stderr, "DEBUG2: Returning %d from cgiSetIPPVars()...\n", element); return (element); } /* * 'cgiShowIPPError()' - Show the last IPP error message. * * The caller must still call cgiStartHTML() and cgiEndHTML(). */ void cgiShowIPPError(const char *message) /* I - Contextual message */ { cgiSetVariable("MESSAGE", cgiText(message)); cgiSetVariable("ERROR", cupsLastErrorString()); cgiCopyTemplateLang("error.tmpl"); } /* * 'cgiShowJobs()' - Show print jobs. */ void cgiShowJobs(http_t *http, /* I - Connection to server */ const char *dest) /* I - Destination name or NULL */ { int i; /* Looping var */ const char *which_jobs; /* Which jobs to show */ ipp_t *request, /* IPP request */ *response; /* IPP response */ cups_array_t *jobs; /* Array of job objects */ ipp_attribute_t *job; /* Job object */ int first, /* First job to show */ count; /* Number of jobs */ const char *var, /* Form variable */ *query, /* Query string */ *section; /* Section in web interface */ void *search; /* Search data */ char url[1024], /* Printer URI */ val[1024]; /* Form variable */ /* * Build an IPP_GET_JOBS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(IPP_GET_JOBS); if (dest) { httpAssembleURIf(HTTP_URI_CODING_ALL, url, sizeof(url), "ipp", NULL, "localhost", ippPort(), "/printers/%s", dest); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, url); } else ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/"); if ((which_jobs = cgiGetVariable("which_jobs")) != NULL && *which_jobs) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "which-jobs", NULL, which_jobs); if ((var = cgiGetVariable("FIRST")) != NULL) { if ((first = atoi(var)) < 0) first = 0; } else first = 0; if (first > 0) ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "first-index", first + 1); cgiGetAttributes(request, "jobs.tmpl"); /* * Do the request and get back a response... */ if ((response = cupsDoRequest(http, request, "/")) != NULL) { /* * Get a list of matching job objects. */ if ((query = cgiGetVariable("QUERY")) != NULL && !cgiGetVariable("CLEAR")) search = cgiCompileSearch(query); else { query = NULL; search = NULL; } jobs = cgiGetIPPObjects(response, search); count = cupsArrayCount(jobs) + first; if (search) cgiFreeSearch(search); /* * Figure out which jobs to display... */ section = cgiGetVariable("SECTION"); cgiClearVariables(); if (query) cgiSetVariable("QUERY", query); cgiSetVariable("SECTION", section); sprintf(val, "%d", count); cgiSetVariable("TOTAL", val); if (which_jobs) cgiSetVariable("WHICH_JOBS", which_jobs); for (i = 0, job = (ipp_attribute_t *)cupsArrayFirst(jobs); i < CUPS_PAGE_MAX && job; i ++, job = (ipp_attribute_t *)cupsArrayNext(jobs)) cgiSetIPPObjectVars(job, NULL, i); /* * Save navigation URLs... */ if (dest) { snprintf(val, sizeof(val), "/%s/%s", section, dest); cgiSetVariable("PRINTER_NAME", dest); cgiSetVariable("PRINTER_URI_SUPPORTED", val); } else strlcpy(val, "/jobs/", sizeof(val)); cgiSetVariable("THISURL", val); if (first > 0) { sprintf(val, "%d", first - CUPS_PAGE_MAX); cgiSetVariable("PREV", val); } if ((first + CUPS_PAGE_MAX) < count) { sprintf(val, "%d", first + CUPS_PAGE_MAX); cgiSetVariable("NEXT", val); } if (count > CUPS_PAGE_MAX) { snprintf(val, sizeof(val), "%d", CUPS_PAGE_MAX * (count / CUPS_PAGE_MAX)); cgiSetVariable("LAST", val); } /* * Then show everything... */ if (dest) cgiSetVariable("SEARCH_DEST", dest); cgiCopyTemplateLang("search.tmpl"); cgiCopyTemplateLang("jobs-header.tmpl"); if (count > CUPS_PAGE_MAX) cgiCopyTemplateLang("pager.tmpl"); cgiCopyTemplateLang("jobs.tmpl"); if (count > CUPS_PAGE_MAX) cgiCopyTemplateLang("pager.tmpl"); cupsArrayDelete(jobs); ippDelete(response); } } /* * 'cgiText()' - Return localized text. */ const char * /* O - Localized message */ cgiText(const char *message) /* I - Message */ { static cups_lang_t *language = NULL; /* Language */ if (!language) language = cupsLangDefault(); return (_cupsLangString(language, message)); } ����������������cups-2.2.7/cgi-bin/jobs.c���������������������������������������������������������������������������000664 �000765 �000024 �00000010326 13255074424 015566� 0����������������������������������������������������������������������������������������������������ustar�00msweet��������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Job status CGI for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi-private.h" /* * Local functions... */ static void do_job_op(http_t *http, int job_id, ipp_op_t op); /* * 'main()' - Main entry for CGI. */ int /* O - Exit status */ main(void) { http_t *http; /* Connection to the server */ const char *op; /* Operation name */ const char *job_id_var; /* Job ID form variable */ int job_id; /* Job ID */ /* * Get any form variables... */ cgiInitialize(); /* * Set the web interface section... */ cgiSetVariable("SECTION", "jobs"); cgiSetVariable("REFRESH_PAGE", ""); /* * Connect to the HTTP server... */ http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption()); /* * Get the job ID, if any... */ if ((job_id_var = cgiGetVariable("JOB_ID")) != NULL) job_id = atoi(job_id_var); else job_id = 0; /* * Do the operation... */ if ((op = cgiGetVariable("OP")) != NULL && job_id > 0 && cgiIsPOST()) { /* * Do the operation... */ if (!strcmp(op, "cancel-job")) do_job_op(http, job_id, IPP_CANCEL_JOB); else if (!strcmp(op, "hold-job")) do_job_op(http, job_id, IPP_HOLD_JOB); else if (!strcmp(op, "move-job")) cgiMoveJobs(http, NULL, job_id); else if (!strcmp(op, "release-job")) do_job_op(http, job_id, IPP_RELEASE_JOB); else if (!strcmp(op, "restart-job")) do_job_op(http, job_id, IPP_RESTART_JOB); else { /* * Bad operation code... Display an error... */ cgiStartHTML(cgiText(_("Jobs"))); cgiCopyTemplateLang("error-op.tmpl"); cgiEndHTML(); } } else { /* * Show a list of jobs... */ cgiStartHTML(cgiText(_("Jobs"))); cgiShowJobs(http, NULL); cgiEndHTML(); } /* * Close the HTTP server connection... */ httpClose(http); /* * Return with no errors... */ return (0); } /* * 'do_job_op()' - Do a job operation. */ static void do_job_op(http_t *http, /* I - HTTP connection */ int job_id, /* I - Job ID */ ipp_op_t op) /* I - Operation to perform */ { ipp_t *request; /* IPP request */ char uri[HTTP_MAX_URI]; /* Job URI */ const char *user; /* Username */ /* * Build a job request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * job-uri or printer-uri (purge-jobs) * requesting-user-name */ request = ippNewRequest(op); snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", job_id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri); if ((user = getenv("REMOTE_USER")) == NULL) user = "guest"; ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); /* * Do the request and get back a response... */ ippDelete(cupsDoRequest(http, request, "/jobs")); if (cupsLastError() <= IPP_OK_CONFLICT && getenv("HTTP_REFERER")) { /* * Redirect successful updates back to the parent page... */ char url[1024]; /* Encoded URL */ strlcpy(url, "5;URL=", sizeof(url)); cgiFormEncode(url + 6, getenv("HTTP_REFERER"), sizeof(url) - 6); cgiSetVariable("refresh_page", url); } else if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } cgiStartHTML(cgiText(_("Jobs"))); if (cupsLastError() > IPP_OK_CONFLICT) cgiShowIPPError(_("Job operation failed")); else if (op == IPP_CANCEL_JOB) cgiCopyTemplateLang("job-cancel.tmpl"); else if (op == IPP_HOLD_JOB) cgiCopyTemplateLang("job-hold.tmpl"); else if (op == IPP_RELEASE_JOB) cgiCopyTemplateLang("job-release.tmpl"); else if (op == IPP_RESTART_JOB) cgiCopyTemplateLang("job-restart.tmpl"); cgiEndHTML(); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cups-2.2.7/cgi-bin/libcupscgi.exp�������������������������������������������������������������������000664 �000765 �000024 �00000001231 13255074424 017322� 0����������������������������������������������������������������������������������������������������ustar�00msweet��������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������_cgiCheckVariables _cgiClearVariables _cgiCompileSearch _cgiCopyTemplateFile _cgiCopyTemplateLang _cgiDoSearch _cgiEndHTML _cgiEndMultipart _cgiFormEncode _cgiFreeSearch _cgiGetArray _cgiGetAttributes _cgiGetCookie _cgiGetFile _cgiGetIPPObjects _cgiGetSize _cgiGetTemplateDir _cgiGetVariable _cgiInitialize _cgiIsPOST _cgiMoveJobs _cgiPrintCommand _cgiPrintTestPage _cgiRewriteURL _cgiSetArray _cgiSetIPPObjectVars _cgiSetIPPVars _cgiSetCookie _cgiSetServerVersion _cgiSetSize _cgiSetVariable _cgiShowIPPError _cgiShowJobs _cgiStartHTML _cgiStartMultipart _cgiSupportsMultipart _cgiText _helpDeleteIndex _helpFindNode _helpLoadIndex _helpSaveIndex _helpSearchIndex �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cups-2.2.7/cgi-bin/makedocset.c���������������������������������������������������������������������000664 �000765 �000024 �00000030247 13255074424 016754� 0����������������������������������������������������������������������������������������������������ustar�00msweet��������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Xcode documentation set generator. * * Copyright 2007-2012 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". * * Usage: * * makedocset directory *.tokens */ /* * Include necessary headers... */ #include "cgi-private.h" #include <errno.h> /* * Local structures... */ typedef struct _cups_html_s /**** Help file ****/ { char *path; /* Path to help file */ char *title; /* Title of help file */ } _cups_html_t; typedef struct _cups_section_s /**** Help section ****/ { char *name; /* Section name */ cups_array_t *files; /* Files in this section */ } _cups_section_t; /* * Local functions... */ static int compare_html(_cups_html_t *a, _cups_html_t *b); static int compare_sections(_cups_section_t *a, _cups_section_t *b); static int compare_sections_files(_cups_section_t *a, _cups_section_t *b); static void write_index(const char *path, help_index_t *hi); static void write_info(const char *path, const char *revision); static void write_nodes(const char *path, help_index_t *hi); /* * 'main()' - Test the help index code. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ char path[1024], /* Path to documentation */ line[1024]; /* Line from file */ help_index_t *hi; /* Help index */ cups_file_t *tokens, /* Tokens.xml file */ *fp; /* Current file */ if (argc < 4) { puts("Usage: makedocset directory revision *.tokens"); return (1); } /* * Index the help documents... */ snprintf(path, sizeof(path), "%s/Contents/Resources/Documentation", argv[1]); if ((hi = helpLoadIndex(NULL, path)) == NULL) { fputs("makedocset: Unable to index help files!\n", stderr); return (1); } snprintf(path, sizeof(path), "%s/Contents/Resources/Documentation/index.html", argv[1]); write_index(path, hi); snprintf(path, sizeof(path), "%s/Contents/Resources/Nodes.xml", argv[1]); write_nodes(path, hi); /* * Write the Info.plist file... */ snprintf(path, sizeof(path), "%s/Contents/Info.plist", argv[1]); write_info(path, argv[2]); /* * Merge the Tokens.xml files... */ snprintf(path, sizeof(path), "%s/Contents/Resources/Tokens.xml", argv[1]); if ((tokens = cupsFileOpen(path, "w")) == NULL) { fprintf(stderr, "makedocset: Unable to create \"%s\": %s\n", path, strerror(errno)); return (1); } cupsFilePuts(tokens, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); cupsFilePuts(tokens, "<Tokens version=\"1.0\">\n"); for (i = 3; i < argc; i ++) { if ((fp = cupsFileOpen(argv[i], "r")) == NULL) { fprintf(stderr, "makedocset: Unable to open \"%s\": %s\n", argv[i], strerror(errno)); return (1); } if (!cupsFileGets(fp, line, sizeof(line)) || strncmp(line, "<?xml ", 6) || !cupsFileGets(fp, line, sizeof(line)) || strncmp(line, "<Tokens ", 8)) { fprintf(stderr, "makedocset: Bad Tokens.xml file \"%s\"!\n", argv[i]); return (1); } while (cupsFileGets(fp, line, sizeof(line))) { if (strcmp(line, "</Tokens>")) cupsFilePrintf(tokens, "%s\n", line); } cupsFileClose(fp); } cupsFilePuts(tokens, "</Tokens>\n"); cupsFileClose(tokens); /* * Return with no errors... */ return (0); } /* * 'compare_html()' - Compare the titles of two HTML files. */ static int /* O - Result of comparison */ compare_html(_cups_html_t *a, /* I - First file */ _cups_html_t *b) /* I - Second file */ { return (_cups_strcasecmp(a->title, b->title)); } /* * 'compare_sections()' - Compare the names of two help sections. */ static int /* O - Result of comparison */ compare_sections(_cups_section_t *a, /* I - First section */ _cups_section_t *b) /* I - Second section */ { return (_cups_strcasecmp(a->name, b->name)); } /* * 'compare_sections_files()' - Compare the number of files and section names. */ static int /* O - Result of comparison */ compare_sections_files( _cups_section_t *a, /* I - First section */ _cups_section_t *b) /* I - Second section */ { int ret = cupsArrayCount(b->files) - cupsArrayCount(a->files); if (ret) return (ret); else return (_cups_strcasecmp(a->name, b->name)); } /* * 'write_index()' - Write an index file for the CUPS help. */ static void write_index(const char *path, /* I - File to write */ help_index_t *hi) /* I - Index of files */ { cups_file_t *fp; /* Output file */ help_node_t *node; /* Current help node */ _cups_section_t *section, /* Current section */ key; /* Section search key */ _cups_html_t *html; /* Current HTML file */ cups_array_t *sections, /* Sections in index */ *sections_files,/* Sections sorted by size */ *columns[3]; /* Columns in final HTML file */ int column, /* Current column */ lines[3], /* Number of lines in each column */ min_column, /* Smallest column */ min_lines; /* Smallest number of lines */ /* * Build an array of sections and their files. */ sections = cupsArrayNew((cups_array_func_t)compare_sections, NULL); for (node = (help_node_t *)cupsArrayFirst(hi->nodes); node; node = (help_node_t *)cupsArrayNext(hi->nodes)) { if (node->anchor) continue; key.name = node->section ? node->section : "Miscellaneous"; if ((section = (_cups_section_t *)cupsArrayFind(sections, &key)) == NULL) { section = (_cups_section_t *)calloc(1, sizeof(_cups_section_t)); section->name = key.name; section->files = cupsArrayNew((cups_array_func_t)compare_html, NULL); cupsArrayAdd(sections, section); } html = (_cups_html_t *)calloc(1, sizeof(_cups_html_t)); html->path = node->filename; html->title = node->text; cupsArrayAdd(section->files, html); } /* * Build a sorted list of sections based on the number of files in each section * and the section name... */ sections_files = cupsArrayNew((cups_array_func_t)compare_sections_files, NULL); for (section = (_cups_section_t *)cupsArrayFirst(sections); section; section = (_cups_section_t *)cupsArrayNext(sections)) cupsArrayAdd(sections_files, section); /* * Then build three columns to hold everything, trying to balance the number of * lines in each column... */ for (column = 0; column < 3; column ++) { columns[column] = cupsArrayNew((cups_array_func_t)compare_sections, NULL); lines[column] = 0; } for (section = (_cups_section_t *)cupsArrayFirst(sections_files); section; section = (_cups_section_t *)cupsArrayNext(sections_files)) { for (min_column = 0, min_lines = lines[0], column = 1; column < 3; column ++) { if (lines[column] < min_lines) { min_column = column; min_lines = lines[column]; } } cupsArrayAdd(columns[min_column], section); lines[min_column] += cupsArrayCount(section->files) + 2; } /* * Write the HTML file... */ if ((fp = cupsFileOpen(path, "w")) == NULL) { fprintf(stderr, "makedocset: Unable to create %s: %s\n", path, strerror(errno)); exit(1); } cupsFilePuts(fp, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " "Transitional//EN\" " "\"http://www.w3.org/TR/html4/loose.dtd\">\n" "<html>\n" "<head>\n" "<title>CUPS Documentation\n" "\n" "\n" "\n" "

    CUPS Documentation

    \n" "\n" "\n"); for (column = 0; column < 3; column ++) { if (column) cupsFilePuts(fp, "\n"); cupsFilePuts(fp, "\n"); } cupsFilePuts(fp, "\n" "
         "); for (section = (_cups_section_t *)cupsArrayFirst(columns[column]); section; section = (_cups_section_t *)cupsArrayNext(columns[column])) { cupsFilePrintf(fp, "

    %s

    \n", section->name); for (html = (_cups_html_t *)cupsArrayFirst(section->files); html; html = (_cups_html_t *)cupsArrayNext(section->files)) cupsFilePrintf(fp, "

    %s

    \n", html->path, html->title); } cupsFilePuts(fp, "
    \n" "\n" "\n"); cupsFileClose(fp); } /* * 'write_info()' - Write the Info.plist file. */ static void write_info(const char *path, /* I - File to write */ const char *revision) /* I - Subversion revision number */ { cups_file_t *fp; /* File */ if ((fp = cupsFileOpen(path, "w")) == NULL) { fprintf(stderr, "makedocset: Unable to create %s: %s\n", path, strerror(errno)); exit(1); } cupsFilePrintf(fp, "\n" "\n" "\n" "\n" "\tCFBundleIdentifier\n" "\torg.cups.docset\n" "\tCFBundleName\n" "\tCUPS Documentation\n" "\tCFBundleVersion\n" "\t%d.%d.%s\n" "\tCFBundleShortVersionString\n" "\t%d.%d.%d\n" "\tDocSetFeedName\n" "\tcups.org\n" "\tDocSetFeedURL\n" "\thttp://www.cups.org/org.cups.docset.atom" "\n" "\tDocSetPublisherIdentifier\n" "\torg.cups\n" "\tDocSetPublisherName\n" "\tCUPS\n" "\n" "\n", CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR, revision, CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR, CUPS_VERSION_PATCH); cupsFileClose(fp); } /* * 'write_nodes()' - Write the Nodes.xml file. */ static void write_nodes(const char *path, /* I - File to write */ help_index_t *hi) /* I - Index of files */ { cups_file_t *fp; /* Output file */ int id; /* Current node ID */ help_node_t *node; /* Current help node */ int subnodes; /* Currently in Subnodes for file? */ int needclose; /* Need to close the current node? */ if ((fp = cupsFileOpen(path, "w")) == NULL) { fprintf(stderr, "makedocset: Unable to create %s: %s\n", path, strerror(errno)); exit(1); } cupsFilePuts(fp, "\n" "\n" "\n" "\n" "CUPS Documentation\n" "Documentation/index.html\n" "\n"); for (node = (help_node_t *)cupsArrayFirst(hi->nodes), id = 1, subnodes = 0, needclose = 0; node; node = (help_node_t *)cupsArrayNext(hi->nodes), id ++) { if (node->anchor) { if (!subnodes) { cupsFilePuts(fp, "\n"); subnodes = 1; } cupsFilePrintf(fp, "\n" "Documentation/%s\n" "%s\n" "%s\n" "\n", id, node->filename, node->anchor, node->text); } else { if (subnodes) { cupsFilePuts(fp, "\n"); subnodes = 0; } if (needclose) cupsFilePuts(fp, "\n"); cupsFilePrintf(fp, "\n" "Documentation/%s\n" "%s\n", id, node->filename, node->text); needclose = 1; } } if (subnodes) cupsFilePuts(fp, "\n"); if (needclose) cupsFilePuts(fp, "\n"); cupsFilePuts(fp, "\n" "\n"); cupsFileClose(fp); } cups-2.2.7/cgi-bin/Makefile000664 000765 000024 00000014151 13255074424 016125 0ustar00msweetstaff000000 000000 # # CGI makefile for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 1997-2006 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include ../Makedefs LIBOBJS = \ help-index.o \ html.o \ ipp-var.o \ search.o \ template.o \ var.o OBJS = \ $(LIBOBJS) \ admin.o \ classes.o \ help.o \ jobs.o \ makedocset.o \ printers.o \ testcgi.o \ testhi.o \ testtemplate.o CGIS = \ admin.cgi \ classes.cgi \ help.cgi \ jobs.cgi \ printers.cgi LIBTARGETS = \ libcupscgi.a \ $(LIBCUPSCGI) UNITTARGETS = \ testcgi \ testhi \ testtemplate TARGETS = \ $(LIBTARGETS) \ $(CGIS) # # Make all targets... # all: $(TARGETS) # # Make library targets... # libs: $(LIBTARGETS) $(UNITTESTS) # # Make unit tests... # unittests: $(UNITTARGETS) # # Clean all object files... # clean: $(RM) $(OBJS) $(TARGETS) $(UNITTARGETS) makedocset $(RM) libcupscgi.so libcupscgi.dylib # # Update dependencies (without system header dependencies...) # depend: $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: # # Install programs... # install-exec: $(INSTALL_DIR) -m 755 $(SERVERBIN)/cgi-bin for file in $(CGIS); do \ $(INSTALL_BIN) $$file $(SERVERBIN)/cgi-bin; \ done if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ for file in $(CGIS); do \ cp $$file $(SYMROOT); \ dsymutil $(SYMROOT)/$$file; \ done \ fi # # Install headers... # install-headers: if test "x$(privateinclude)" != x; then \ echo Installing private header files into $(PRIVATEINCLUDE)...; \ $(INSTALL_DIR) -m 755 $(PRIVATEINCLUDE); \ for file in cgi.h help-index.h; do \ $(INSTALL_DATA) $$file $(PRIVATEINCLUDE); \ done; \ fi # # Install libraries... # install-libs: $(INSTALLSTATIC) echo Installing libraries in $(LIBDIR)... $(INSTALL_DIR) -m 755 $(LIBDIR) $(INSTALL_LIB) $(LIBCUPSCGI) $(LIBDIR) if test $(LIBCUPSCGI) = "libcupscgi.so.1"; then \ $(RM) $(LIBDIR)/`basename $(LIBCUPSCGI) .1`; \ $(LN) $(LIBCUPSCGI) $(LIBDIR)/`basename $(LIBCUPSCGI) .1`; \ fi if test $(LIBCUPSCGI) = "libcupscgi.1.dylib"; then \ $(RM) $(LIBDIR)/libcupscgi.dylib; \ $(LN) $(LIBCUPSCGI) $(LIBDIR)/libcupscgi.dylib; \ fi if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ cp $(LIBCUPSCGI) $(SYMROOT); \ dsymutil $(SYMROOT)/$(LIBCUPSCGI); \ fi installstatic: $(INSTALL_DIR) -m 755 $(LIBDIR) $(INSTALL_LIB) -m 755 libcupscgi.a $(LIBDIR) $(RANLIB) $(LIBDIR)/libcupscgi.a $(CHMOD) 555 $(LIBDIR)/libcupscgi.a # # Uninstall all targets... # uninstall: for file in $(CGIS); do \ $(RM) $(SERVERBIN)/cgi-bin/$$file; \ done -$(RMDIR) $(SERVERBIN)/cgi-bin $(RM) $(LIBDIR)/libcupscgi.1.dylib $(RM) $(LIBDIR)/libcupscgi.a $(RM) $(LIBDIR)/libcupscgi.dylib $(RM) $(LIBDIR)/libcupscgi.so $(RM) $(LIBDIR)/libcupscgi.so.1 -$(RMDIR) $(LIBDIR) -if test "x$(privateinclude)" != x; then \ $(RM) $(PRIVATEINCLUDE)/cgi.h; \ $(RM) $(PRIVATEINCLUDE)/help-index.h; \ $(RMDIR) $(PRIVATEINCLUDE); \ fi # # libcupscgi.so.1 # libcupscgi.so.1: $(LIBOBJS) echo Linking $@... $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(LIBS) $(RM) `basename $@ .1` $(LN) $@ `basename $@ .1` # # libcupscgi.1.dylib # libcupscgi.1.dylib: $(LIBOBJS) libcupscgi.exp echo Linking $@... $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \ -install_name $(libdir)/$@ \ -current_version 1.0.0 \ -compatibility_version 1.0.0 \ -exported_symbols_list libcupscgi.exp \ $(LIBOBJS) $(LIBS) $(RM) libcupscgi.dylib $(LN) $@ libcupscgi.dylib # # libcupscgi.la # libcupscgi.la: $(LIBOBJS) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) \ -version-info 1:0 $(LIBS) # # libcupscgi.a # libcupscgi.a: $(LIBOBJS) echo Archiving $@... $(RM) $@ $(AR) $(ARFLAGS) $@ $(LIBOBJS) $(RANLIB) $@ # # admin.cgi # admin.cgi: admin.o ../Makedefs ../cups/$(LIBCUPS) $(LIBCUPSCGI) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ admin.o -lcupscgi $(LIBS) # # classes.cgi # classes.cgi: classes.o ../Makedefs ../cups/$(LIBCUPS) $(LIBCUPSCGI) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ classes.o -lcupscgi $(LIBS) # # help.cgi # help.cgi: help.o ../Makedefs ../cups/$(LIBCUPS) $(LIBCUPSCGI) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ help.o -lcupscgi $(LIBS) # # jobs.cgi # jobs.cgi: jobs.o ../Makedefs ../cups/$(LIBCUPS) $(LIBCUPSCGI) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ jobs.o -lcupscgi $(LIBS) # # makedocset # makedocset: makedocset.o ../Makedefs libcupscgi.a ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ makedocset.o libcupscgi.a \ ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(SSLLIBS) $(DNSSDLIBS) \ $(LIBZ) $(LIBGSSAPI) # # printers.cgi # printers.cgi: printers.o ../Makedefs ../cups/$(LIBCUPS) $(LIBCUPSCGI) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ printers.o -L. -lcupscgi $(LIBS) # # testcgi # testcgi: testcgi.o ../Makedefs libcupscgi.a ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testcgi.o libcupscgi.a \ ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(SSLLIBS) $(DNSSDLIBS) \ $(LIBZ) $(LIBGSSAPI) echo Testing CGI API... ./testcgi # # testhi # testhi: testhi.o ../Makedefs libcupscgi.a ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testhi.o libcupscgi.a \ ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(SSLLIBS) $(DNSSDLIBS) \ $(LIBZ) $(LIBGSSAPI) echo Testing help index API... ./testhi # # testtemplate # testtemplate: testtemplate.o ../Makedefs libcupscgi.a ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o $@ testtemplate.o libcupscgi.a ../cups/$(LIBCUPSSTATIC) \ $(COMMONLIBS) $(SSLLIBS) $(DNSSDLIBS) $(LIBZ) $(LIBGSSAPI) # # Dependencies... # include Dependencies cups-2.2.7/cgi-bin/multipart.dat000664 000765 000024 00000142353 13255074424 017206 0ustar00msweetstaff000000 000000 -----------------------------1977426492562745908748943111 Content-Disposition: form-data; name="MAX_FILE_SIZE" 10485760 -----------------------------1977426492562745908748943111 Content-Disposition: form-data; name="filenamefield"; filename="overview.pdf" Content-Type: application/pdf %PDF-1.2 %âãÏÓ 1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj 4 0 obj<>endobj 5 0 obj<>endobj 6 0 obj<>endobj 7 0 obj<>endobj 8 0 obj<>endobj 9 0 obj<]/Interpolate true/Filter/FlateDecode/Width 941/Height 341/BitsPerComponent 4/Length 5709 >>stream xÚíÝOhYžðŸlUÜÑŽÙÞ ™Ël$3£ã0½½§Ñ²f™Cj˜/1 sÉQ06º ;ILg˜…9F_}XØKCÏmºuÑE ÈÂB_èÂ’ÆÚ÷~ï½úcý‰¤ª’^•¾‰õϲª>zïý~¿úó,Ù[ÞN÷²Ë lªÌ°þõËÆ?ÿÐ%oq~ñ÷Ï¿ŠÿCÔ)½Ëõt±¾þÍÇ­É/þñu¼¢šbÖ±~yÏûØ››Û÷õrosÓ{xûó8Y·*i]~’ÖïÿCõ»¹íû£Väþ½’ê‘ÿõëØX?i¦uy‘Ö÷?UtoÒwtG5Û_~ÖT°*ÔɦAÙx`Áš(ëå¸ïv\áÞøG`µ›õ1¦æfŠ^ÊÖùw°ÚÌ*›êö¬‘  ™VkY/wES'Ä vý¬v²~/tæÌËâûð5Xmdª¹½ySòRDW°&ÃzYš¯ö;âÜÅ’Y_ŠÏð±w†ž÷yþÑʰþ>šªt½¾dÖ]™FÖëÿDU•®?^*ëKú¸yJk`õYßíEeÝ!úb™¬/¤èóX}Ö'Ô2][&+cX=Öo£wÁªþÙ¤?ôßñ‹ë5ù¥Ùü5°tJÎ]ñÀO)÷ŒÃ©Û¤d‰YO]º%~çöOÖ"³:ù–ß&ÍúYô.XuÃ7áï¼›¸/::ë§Î3þy&w =—ä@ûDÜ[×áT€õLýÍçÛuîýï¿J–õ’ÖãÙ£¼K’œ· ³¾$Ú~ÆÃë³Sñvó©Ðuo5Ÿ’PüXÈX?Í=;+}Ô|N7—Çz#YÖo)¦cÊ“zá¤Y¹En‹·ùwÄÍSÑR›¥O^äÔ°ë±îŠg_¬7Ÿ¯7—ÈúƒdYßäâ:¤tc‰¬ÍÑífIŒ¨/ï6é™|!££ÝÛ<îYK2¼Êéñ8£¬»kq±ÞYŸÄº‘xñpGt½äǽB·ßGûºVµ]c‰‰ç„ÿ’4«Ûñaeg¹¬",ÏZZ1VŠ•–Ǻ©5ìù™jˆ5¾ ÖVÖËxÒ•â\,•î*MWü|z[ ~zͯ@©±õŒYÝg™g}ky‰¬¥“YŽÃ‘pɰžæ8>udÔ”qÔ  ßV‘p†Y¿ÏF'ü„öšg»ëÍ'2o½«YÏhKä­ÏštKå­·Îv™õIîîYéX§Œ„—ÈúR'J§ª®¤X9™]WÅ&u/Ǭ§ºÊ”iÖµ,°6]"ç–øù”rw=Ö³ß?n•d%ØùDÅQOI´ãŒ³ÆWŽX&kÊzIž5¾â!Xmb­ÔV‹XwãÚ1—«E¬å¸v£oƒÕ"VÑ{ÆrÐËúXmb݉çµ=°ZÅZ)Çq@éV¬v±Šn8òáßë°ÚÆZ‰~²F¬ö±V¢žZU«¬•h'BVÀj'«t÷´å\¬¶²òõæºÈÀv¬ö²ÊÞtŽK‚ø}7X­d­T6g¿€Ïf°$V+YeP;Óå¶Báóü¬«wÍÃŲØé.Žw%'šŸ5ÅW(]O«gö¡KYËÏÍZ_½ Ï.žÕŒš/<;jž›5Ñ%á 8H«l”›ã¿¡›÷ÇìÅ«í¬ìto³ÍmnïMØ9Ö4°Î¼Ï¬`+XÁ V°‚¬`+XÁ V°‚¬`+XÁ V°‚¬`+XÁ Öl²–Fâ_¦­ ש«õ¬|°ËÐá»ÖT³–ESÝ>ÕŠö*å-°¦–µ´Î¶WG#Œ­©fU C½ð‡X_]þÖå³–U÷{oË\?€Êòj0r¸½³&ÏçØ¦ÑW{‰ÿðw°ÆÇzg=pÅ;yµ>Ûİr8'kšOÖ¸ž&V/ܘ»â¢ÉÞ!î„ÅS¢o.ÍÎ:aN«*ÎÁY,k™ÔËW]Ò¬²‡.ÏÎú« ¬öÓºTSÉʽqic%ÃÊÑŒ!Óë¯&|ˆêQ#­K=¬kê¿ëÚXÖ9?XÄj"a°f‰U¥5°f‰uÇ”#¸Ù^[9©k Y+¤Š‡~$d¥±‘0Xíf½Ã¥þu?o °ÊÇJ`M#+—•dO,«LkWXwÇV™Àj9«¼êè–MÙkelM¬–³~h±Žõ„È9›Ymì×™qûØ%òߟøyî‹ÄƒV_oÛÂéD+†Y%¢+è—SÞc%°^9 ©RÊYÆêЦZ Ðg•7ªyy`0åÜ€™S>Ö+áÔš]¬'Ü…b˜õ˜u)Zwôëªy2¬êXG^îÛVÆ“zaVáfxu£>bÒ/kÄã„fUïpüh kcßDLîXSÃêÅDÃpNܯæW½Vñ¢<2˜¬gmŒd­:B’xC°£†Y25}¬&Á‘GÔ<ò‡`n½+àègÊ[©eåøyõÑïʼfµË4åñÁövÂzy`òV¦ p‚5 !ÓñáhV‘ÖêˆIwÌ`õŽPÓ••'Ì•³DVN[¤Þ+þç £l¹`5¬ro\N3ºgaÞš7Q^¡ëïÇQ°ü¬†U4Ò{ÄÇ®•Öìc­³žh³ªŠ(þ3¬n ÊTÝÐòj³ªS4˜UÀÄG"Þ±µA\ê?07k]f7ª1â°z¬kêHÄIÓm/“µ®GMNSeTdXM2ãwÈè„M'|‡·ÎZ™&ÌóºÔÝèLÑ¡ªnx‘ð‰WŽð»b°†YyÈ-YqÐË\¬kþœV9°f†Uñº³7怰¦’•-K[cOÔkJóÖu™·Ê«„”Ñ g‡µäW™ÖÀš¥š0í?Ž ¬8è¬`+XÁ V°‚¬`+XÁ V°‚uÙ¬¸æa&YS|…Òu°Ž[ê¸ðlY“]¬üT`¸¼§/VõrÒ!¢³²~má|G¿[AÖmÅÅZ¦ 7àß&]w<»¬nŒ¬6vÂoéæ*²Ö×âb½“³‘õ³I“?d—õm..Ö’ÛOdO«Èú.®ÁµLÿ`#«KÎ*²ÜõxXw­ „D´’¬oâIqvèši+Ù˜¸&Ïúžb]Kô3Yß Öß­"«h®[qŒ¬VL"m%×°^ºÑ»á+»:N[ÉÆÄu¬ƒo£wÃ%ú±•ª"m%û‘E°ŠuÏEU½n§*ïôÛXQV±ò¹hªë–ªä5ÝUe½ÜpMˆŽ«%Ê_ØÊÊûº­úDÿ¥®pÁŸùm²¬ÒuÞx¸L«¾gV«¢¹ßGŸ«yjV„róuÀV]i«e‰ë›ëÄYÿI®g8n‘W~ù¹½ªœ¶Z–¸¾ °ÞLžuð^„¹™zâ²hªÎ«êmhUâú]€õáX—²Áæ¦n±÷ä…~~a³*§­–%®ÿ`}µVÑ`ùÚ¬›SÅ;›|Ñ9«›êÀ«jÕà`½X «ý€¬2µU¥­¶%®ÖÁ¢Xƒïÿ¨¶Enûþ(ÒûÜ÷ŠMõO_ì_Þ|s-þI ù²ŠåËc×üåÍÍíûz¹·¹iu>¤ay¯?¯¥‰ëõŲŠåucÜù û׃”,ïôG¶4q½±pV¹üõËÆþ~༧üþ~ãó¯)Zþ¦?¹¥‰ëÍ¥°¢·‹A*—·Io¿h‰ëÃ%³¦uùLo?K×W`¶Z›¸^€5BÚjmâ:«¥0Jâšk¤´ÕÒÄõ:X#¥­–&®7À)mµ4q½ V[ÿ(‰ëC°FJ[-M\_5RÚjiâzÖHi«¥‰ë¬ÑÒV+×Öj^%T]¢`̓u¬Â´SALMÑcq¿Ö*è›QªLÜ ‹6«ªˆâ?y2±ÊÖ¸Y{2‚íc*è›QJýÄ¥þs#Ð>åÇcC&°ÆÈ*ïtœvÏwd»-ôûn-kÝì~«êtÕc­z™X“Jp >«Ètú]Gè2u¿Uî,d…FSwB9¬q³º}ÅZ䆻¤ƒ^Àw'¬ÊÌ*ÆÖÃ6X³ÆÚ?—õ'°f‚Õ»/–Þ!9Ö²Òp .kÓèJÎÌ_J?kÛÛ@½¶Ü v³ÒŒ¬]ÀWÕ­ù!Sqú5Z+µÙX]ÑTϧY2ÃÚöòV™Üˆ»]ÇjÖ¾[œ‰µËïìVŒUW™j&&*ÎÉZßW݈µ3k‡A;Îj±¶üšpQ DsׄÈêW±Å½žìa]‹H?ÅñA‹ÅUѬ÷˜Ÿ©É_réqÏ•ßcïV¿§~ÝérD&£é·EÇÙÿðâ¦ö —I¬'ñuµ~ Š-¿™¢%¶¸Â"^ žêÉ·S ®ycóKò‡¬wnñ¯;*$+¨{æ¦a±Æ29¡*v§ÈU´«sÎÕôSüX;Ô›ÊgˆI€µE{öoÉ—ó¯Kk¾çÒôõq°Æ‘à¯T±ecí9ª“yÊ•}sxt¹8ª~© ¾æVßQ/$ÙpÌØ¥éëã+ÀJ'äTy?͵#ç9j_ºxJî•;véEÌ[ƒUì‚l˜Ý¢a5OLDï³¶™ßäq¸¥úhu‹TEÓ×ÇW`låÔŸ¤Ÿ<|”ŽÔŪvØñî¹°ìsåÎŽŠƒt;&ó”’ ±’úo$kïð|V•¼O]·$N”5/Üòòèˆz^4Ì y6αfÍ >>·ª…U¸!V™’±Š¶§a2õ'²ŠÀé0ÌêN__Ö#s KýˆqøÉ*›nãÄ1‡¿DHpUìŽ#C“½’×8©­Ãõ£K“X»2“b¶>¾ ¬êPa=‰A•Ìá‡ê)>P-2«_ÅîpÔ«;\ɪßÇ­ià–)GL[õhªY»êÞÔõñÕbQ)ÌëFTVÑüÂUlW‡G*dRO M ‹*.Œf-C&y«GÓ×ÇWŠU^RÀM€µ®bËZ ç­âAS–õ£×!TÞ:ŠÕ‘•%Ã*߬EÓ×ÇWŠÕÍÌøXõ>¶@[M™È<%>]1¸c® ©?fl•ñ{ѰªLE°†Yõ ê^[OòY9›ô«ØòŸŒ…Ã5a•éå\×vuMxT$Üß ñ.šU¼Ùcw†šðJ±ªIÖø«Vyþò1-à —ÅE³Z¬G2a¥“·êK äçÏ[gXzN¬IŒ­¼{$XeROE©2Ͳ­ `M‚UxÉópN¼š°T#Ô„§_\ª5Öñ;h6>0½d¬‹ëƒW’õÁAøÐˆãG ™Àš$k5/WN“§ÌU°¦œµ~5BÒçÑ5Ýc«KáSZOF\¥¬i ™pXÁ V°‚¬`+XÁ ÖÕb=Ä¥,G³.øŸ.ÅøV\xvkš·Ìàx?½ËÃ$Yÿ7ÉOîÒЉ&œøÞ¾:Èú27kš?Õ[°‚¬`+XÁ V°‚¬`+XÁ V°‚¬`+XÁ V°‚¬`+XÁ V°‚¬`+XÁ V°‚¬dýS#½Ë«$7à7I~òêðu<â\ê—8gÌRMõ98äàŒ¹‘K=Åç·Žg­¥vÃtÁ V°‚¬`+XÁ V°‚¬`+X­d=':œòÕ<Þ„Žî”P…´Š™aåúl{Êõ›z½cb5“Å…³ÒÇÿŸUiæT²ÆJ–²ÊغòºqŸAµSÕfyÖÝÞÌS¨d‰•»ºš¬<ö•7î3ô̬­ü‹…¾™ÇuuYÍÆ°ŽÕÌŒ>Õg`~ýPï=k/œ5֎ͬ½¶«§F–S{vyÖV5ɧÓ?ÎÍlæêUü¦znÝó6¿²|eàwÔt šË÷xŒ§UóŠ~€Õ™êê‚6°ê9O»zö[ž ÕÛzrkͲÞq±½!VHɹs ÌÚR‘Oîê…F2ZÒp× ³†^éß23ýª˜QOÉÛŽÑF±Æw E¢°·’j‚bÁ×rBÛ¤0ÛzÇ2‘óXƒu r¤ÕÓ£› ´%pÁ !rfmû½Šš;ðJÿÏ£-'ä®É¯¸'§kv§šF;¬çNß[I¹vµN‘«¿õ:4ÛzÇÄÚSs-Ë6ØR^rOb¦»¯ñ(ª¹›.†Y¹õRð•þ­NMͳîð›»5þmõ7bb½¹äGÎ-­V’×N°ÊÆØzb“Í´Þq•#z‡jô6ŽÇš¬[ÔL}- ¢æ ±ÊŽ¥|eøw„§žX[~ùcºI´§ºï¿\Ø‘·¶¸1Š¥Sà9äC[o¦õޝxØ“ó²ÊÑÖ]²l`ú»x…Õ-šy´=V¾ üÎù¡K>«z¡îö㈄ç^âꄹÇU+I¦“©õ¯l½™Ö;Κ°Ðje+„É™ÀÚ*šÒ¡™Îk“Xeðå†XÅ÷Xýl°ÊfªWÒ°Ê|~˜uêõއUÕ ¥cAçç®÷ý^7ÌÚqLéPþnq«ë¨!6ĪþFFXý•Ô¬N78fY§[ïxXÕlç²aqjõg#efA¿ÂÚ%óDÏ”#&­zTѬ®º÷çÅ™4³š¡³­û.™Ñ…¶ÞLëSk5]Id©I ¬<2dê‘÷ÁtñPGÂíѬ¡Iþ–7ÄfƒUo¢– Ë Þz3­w\å§­Z×C¤•øl?ó ³öý}6Yê眻 òÖQ¬5ñ&kÇi÷¨¨ÿF6XeMܬ¤ÌNÛ–\Ùz3­wlåR#¹Kæžø`ªÊä ³ºþ[ºzcK¥o#ÇVñ”K†5Pm¡,„LzËé•ä€)†¶ÞLëW$|HªTÙr”·^¯&|•µCÁ¼HÕ8UMx«X¡šú ó;tÉ9Ÿº&œ V¹"z%eåWÕm¸Y·Þ,ëg‚ãOÖ,ö³.i™‘µUkY-;œ ¬q°vã(€€Õ>ÖX³Ø ÷Á V°‚¬`+XÁ V°‚¬`+XÁ V°®ëa¶/e9?kz/ey(X3~áÙùYÓ¼eþ òÝHendstream endobj 10 0 obj<]/Interpolate true/Filter/FlateDecode/Width 431/Height 511/BitsPerComponent 4/Length 5955 >>stream xÚí_{£,‡Õ˜sÛgsnÓÍyv¯Í¹»­ç£â÷ÿ*oó§ (ÈÌŠ}ËÁs=íBÃ-ÃoLßÉý7—Sï¿÷ûýËÓ¹|üÏþÏûÚ¹ÄÛþ©Htåéùõ}\â÷‹I‚ÛÿY—ømcú,ϯõZ¸ðP7´?kàz{IÈ%Ýבsý+^y>EÌõ›KåÓ!š±ò;fž¹ÞÊĽüWGÆÕ½$^Jú×ïÄ[ÉNÑp‰2ñY^#árÖ ¿Cæ‰K¼$ÞKúsq®®HB”ÿæú—*Y½$ׯ$XIO‹qyÖAO`7ÖGù¹—(’$F0ˆRÕòcv®Y°X`°,¬‹QK_<`XIr˜‰+¸ßrsÐl®™±>Àê9¸ŽÉì%›ëo²@Ùçj“EÊÀ\]± A!~…gi¬A Ú+Ñ ê£suɢ劫X– 9Å`™ãÅ`ž‹,öD.±±¹Ø¡-]œI¶árqC zznÇZ2ÔL.æp±Ò©9C–3¹X<7’1d)« £í‡ìÀâ*æ²Á»7+¼H=øßÕpI{ç$œ\ålS‹Ÿy•Ó¹º°È`)‹,ò©Ÿ+’¥³rLs-„EÛP¹šŒcŠ5‘«\ ‹¶£qu^<$¬praàoáõ£÷ZZ'Co‘¼g,Òí«…«ñÎ8•£Ã‡ƒ'ÕHkÿ\„Ôx.᤹–Žoˆf.Xtr]Ë_¶!‚—JÖ*%×Á‡Ì™\´É°ÃrUK9dž(gX.‚nú€¥ä"¸›a8+¤hâÇuŒÂ =Éq\h!M:RW»°Gf(Ø Ã…Wü^p¶ÅpqˆEë3WËÌ–°ÚÎUÅ"”;عŠH4žÔŸÜÊÕÆ5\Èˬ\UdÃ…ôaµ«ˆl¸Ozgáê¢qÉ´.å®&ºáÂE‰™…«Œlv¡¥¬žänÎ&¹Ú‡ ·”Or!U> eEÙ$WQdHTŽ).¬ÊÏŒ…š§ .¤Êçssõ$®ÊŸfçBâf‚+‚½5¶!ff®6F‘G Zmä‚Eí€F®2RÕÀ™ÒÖÄ%bU ÜÔߘ¸ZZh¨z²ÇOcÿü=Üži£¨r‹õóG|Ç€DíP\;#—Pn5•ÐJt­µ«¤Å“\#×ícdÃ8Ÿ À™^9Ž+1s¤^>Ü,Ñ–œéu@rŒ\ô|k†˜Y’빀輦¹r#×Õö²Ç dž”>Ós•Dç5Í•™¹Z!(«ô3FpxÀr}—†ë¡í-Þ 1J_ë¸:j eáÚ¹"XQöJìCúÚ+ÇsmÌ\Õç#*(‹ï+ˆ@^k+¡¼…+1sµ·¿ÕQÌ1QrWA4C+×ÁÈuý¬íõWø-;«°m4\‚j†V®ÜÌu¼•ã3T§í¶TÃÕRÍÐÊ•š¹®öN\´HA²W®±\›{m-×Õ8ž¨;ÇȨ^9ë±\ÛâSž´\’HQV©%Ξ€*;Špš‚݆ÙÊ\ˆ=›Á$v²¢f®ÎÀÕÜx:º!6‚î &±ÿ0Üÿs?ú´íi®’#ÊѰ|‘ÄUi¹Ä½G²! „]!:4šD.†\­–«¹Wnè±/Bffß~¥Í/Y3G~jÈu¼kŒ ç[x®Žã•‘>©ðš¸Bå’þbIŽ}K{€øèp‡ñ%Û1W£á’SQ*²!íðrxÂhS=æê4\²Þ´äE๎,ÙÙĦsÝlUá*ä K^„‰÷é"q•,ÙNÌûí=ͺXæR3¢Ž2ž*6(uN³!sUŠa7Rÿ-‡ÆÅßã½&?{-—qŠåuR5õší¤»¼ø4}žá )•«aÊág¹NÖø¸ìÑ|Ú¯ªVæ³Ur•¼(*z®‚EÅÎ%\ä0b®ÎQcåj¹Ñaä\ÍW“ÃWÅŽãæ:ò£Ã¨¹Ê¯&ó7®â«Éዳ5¿.ñådþÊÕ~9™Çr­BæåE àÜrüѼ¸~[ÉóIâªØ2/×y>é~›<½*Û~ÝÞÑu>m´mkdØdœ[> ¸û6ÃÉYk¹v®žKžI?î\%Û}éñ ª3èâ†ÃµÑruúóå‚í¾ô3t1áp%Z®RîÀß´ÑÛ«)7uÐŇë ájÆ*(·œa¹6†ðå ãÊ9\¹†«?FÏ\Wƒ5åÎ º˜q¸²1×§h¤OÅÝîå–s4×Aϕ긆×ùP\£;€w9?û“·âf68®í$×åÿÞÊDéÁVu,µŽk§uEj<Šh$;™ÏÃ6@…;;×íEø›Ñ©ÃßD¹ wqÃá5jpû8@mb\RZŠ:ÄÜžaר‘zètËãTuÂp=Òˆ4Yò[m®a£R Ì/49ô„˳Ó\ÂÀU™¹r×°Ñ`¦\Ì2TÕc¸?h²ÿõ\)‡kÐhxñTà¹Ò\šë|v.M£vè`÷å0áaæÎ5Ö Íu>;—é`®[/'~¸„ë¨×yÍu>׸Q¥u°€ £òÞE‹{έÚÅñu>׸Q©uD(®-Š«Õû¯ÖGi®ó!¸ÆŒ\­'®Jo¼=ÂAÇ×ù\ãF…Ö¡¸v.‘Œyr¢¹Î‡á52r5ü0JêÃí+èu¥æ:†kÔH®þøDשw\í´]]çÃp¹€Fõú1쪎ºxm×°‘WæÊu¿MkC‡×ùP\ÃFF®Ê#×I?е¾‹Ãë|(®a##בözƒ3lïº8¼Î‡â6*iªw®ÒWZ¸¤PUéâà:ŽkЈϕ!¹ÒƒôÛ›_¾m{ìô]\çÃq •’b+\….)ÿPŽ7®Û¹¾‹ƒë|8®A£QÕ`¹ò·Néu\Òû¡4]¼ˆ6•KmtFDÕ+ ËÕNq©×ù\š;€rX®­WgŠçïAeIäR5éR\¹D`.a¸Å¡¹Î‡äRµÉ –kçÄÕOr‡Ki$¡yWÇáRê+o\öÜÃC@.å:–KmTi’ñ?¸Úe¹*—Ò¨yœ*?6yçj9\J#!÷²½Ç.ËJ\‚Ã¥6*ç_ÿW’K¾Î‡æR5£óʸ—Úh –.—å2Š«˜æê8\j#ueœ£à’®óá¹”««¹Næ.V.µ‘šF.ëöFêÈU&òíVðS¹þÊ‹Åf®û› ]®a£ÒV„®xÊÛ%ÿð¿Çûç­\kÉòA°o³­.·÷ÊU~s}s­kóE¹òurß\ß\ß\ß\ß\8®í7×7Wx®Äëc僾WJ©»,׿Ë;ÌÒWLw)uæz^_S_6$½aNSW ?©J4¥Œ½sæ*Géjž¾|<5®Ëà:©›¡¸þŽW4ê˼ºÇaÇ_Ì*+×A} a¸„æDI}¡asß⨛GV®Ý\ [Z—ò¤o ê2¸¶½25Ãpº£2çA¡¤É ë2¸rÕR‚puŸOOr]ùÕµÓzm]W¦|t®æ~P(~I*Ià#»B[—ÏՆ䪤ëãûH.ë‘|n¨«Ûæ×ªz¼Ó„ä*%YõÐ@é…̆º4®ô~|ú1‰³`\…¼ W”þa<õD]Wv•Ë%žWþjqŸ`­š¤­«KâÚÜÇÇ“Éçáj?ÝS`@MÒÖÕ%qåò£ÛºqYÒïÿÜ=}”$VµtGÊ\—Äu¾ÿuL» \™éÎã*Lé8·3åN‚)&Rwð\ÇÛß;ÿåS0®k$x2Ä™2ŒuI\ÕM†Î–^ãºu>ŸôÖ%“âSÎuI\ðÈ~Mû`\÷}ÔÛë?’/6×Õr;/Ím¾žÝW8.)dÐÛêÓÛÜ}±¹.…«½Àñü‡Ý¸¦ÎõäzÊ{‰›q­±.…«»ýxvËŽ\Sç°•ö‡²8®­u)\"¹¿};Íåt¾,Œ™¥å(«Å\—ÀÕßóå·á¸Y´i=ÉQ—ÂuuÌ·’KzÑ–J¡û’9S] ×Õ1·’ëó"ì(—J—l:YÇuuÌí¥¾—5ïë_¡›5¥ö¡èëâýòÅ Öçÿ¦.ùlo/ãEMcXäè긚‹^Ürx®Go7ƒPꄪKàº:æ‹[žƒëS2㤙ªKàº:æ‹[vä¾[´ƒ©º.ñéŶsq=¯í\ƒº®«c¾Šä$—K>öùU2Õ¹¦êR¸>L0ëû§A¸T÷ ÖÍNS] ׇd¤íÕ1:rÕ¸ýC ×T] ×y¤›äþ¢º`\™b[é$—©.… ®—aS—˽›RùçrRç§êR¸šëÍšÌë0½üÚÉë‘kª.…«}8õ`\<žÇÁÇ :;U—ÂÕ=V“\.÷¯mÓ?C­ƒ‘kª®%žWÞ¶%ÔSA®õöqi^,NÕ¥pIï… ÇUM¬Õ†\uI\%ŽËé^v7QuÈ5Q—ÁU»smqé6ÃЫ˜ë’¸ªÑopuf…quÜý(•îOe’Ëéýê^Ì~’Ë\—Äez?«_.©³¯½…ËX—ÄÕÞ}ú4—ÓFöÙ½ƃ—ºNÅñ½=·Bùz½y¾ŠÏñ=KÑÇ÷b}sÍÏeÝò:¹ªÿ[®z•\ö ŽÓ*¹\Ìß\ós9-,W͵]%—ø¿åÊWÉe_€m¾(W¶N®â ¾ŽßÇñ͵×ñ ¾¸ïñ9¬’ ¾(WóDÇï5[ªØ^öºsüº¥Š­ËÜ÷FH5~¸¢ ¤lRW;~/çR¥Bq« 8l¡ö{oc 8J›}!¿§8¶¶Â¦È-àHP\°¶€CXý-òûÍ# 8Z×ê¾¾±`¢­è3X§ `Ì5:Ç|´Ê`ä%:VZÝ`ÜAt¬°Ž øcs`ö°Pö™ëìj(}‰leÙÚÕPþ 2ÖØ; ¨™«ìÆ(ƒlv´G}€Š##s`¥]ä'œq =¢¯€stQ }‡°-ÀlTBß"´p •Ð"H\Õ¨„¾BtC“ЗÓäTŒ)¢/ìîë“K¬HèFº¡Ç ýv5rx¸Êõbƒ™1€ ¹"Ä £pÐc…>Y‹¦2W»ADôh¡$BìPôh¡ÏW"‡[™ !ô‘ ì z´ÐG"G”Z=cޱú’¸š•DRV!¸%@ú|²‘©\¡ÏV!¹Ê…غIW!ÛW¹á(p*øEÄ!ð†…p´H/ „1G…ì#ôAŒ`3Ûª›!B#ðÌØí è)‚¸zF\Õ &ú.(öC"éÑw­¡' ÇÒ ýŽèI±ð³?ú†«Œ~‚áï€d¼KO°#z¢@OŽe'>r’sXx‚µø¥bå…'áôH*ºpˆH8‡ž( N0Ê!ÐÆyÑ5å ˆ —Ü䨢Ž.¹ÉAÙjâÄ\Pé;Ê$âH/¨ô¤i 6]NéKJ×€ª¤‹í¶ ’¦uj.fˆ[Ú¹Žñ"mûzúÛEj†r,d—¾!64Cò g!C<Òž7ЭxCÄÐÈKœe ±!>nèl±$Nè9,Ñ ••pÌü‹•†ú°¡çL°ÙWÍ%UÍ gM°™“,[²÷ž5ÁfvaynkÈgVAï°¦èÌÊÁˆZ³Üž;æ(é38Û#3Ç-À€7Ig•ú#cÂóñÌ(õ‚ó˜ûwæ +Žãî4oÀXÓ¸²:Û€áz³Ep!•~¦+XÏøjžc† ÀŸ©ó XÁ ë€íç°†éL/A³È)Ñ㸎X°CõArµ‘ ˜(¸A8ôN†8øª¥eB Ý*z7C ºp|«Þ̓j=öéîÐ\xC (­ƒÍ@ïjˆi½°ÆkÅ Ü6¤%þMøfhäÉÒ–Ø9IôΆHK' Γ6wF[¡~g œgmïÜ9Z 8ûú SL޲>ž˜ÿËÑõ‘‚‡‰ëß‹ý#|pOåjHæS;(š•“¹D²˜(Ü'ø1rŸ`¢ôð¡àÉ<T¤y½cpÑ>á£ü7³N„:àawA² wUüåÇDÀÇzÕ# Ë€—ýÉœæÄ2KøŠÒî`?gRÂéÃ`ð¨M®êAÆš¸þ<ÿÃ:x¶ØÔÊÙ\}Á~Ó9ªü¦̉ÏÕ°¸’ôu°?ظ˜–$ÏuàÁš^Y¹ª„[ð_:ÿV²¦qïÂ%~yFYc÷Âûë'.‡;ϳW›9¾1©,Ë;—Ë€]ÑÞÍûwÁþ»;G.ê2Lk¯ï£qoûÂåqõ®\]â§<=ï÷ûŸïåm¿)ÿÚΙËÇ€y/¶üG —ˆkçËM.W|vðÂÝ€Ù·¾p\bmÃ…ä"œÚÌQzH®¾ˆ‰ëä«]×p¡¹X;4¾öÉÕEõë}rE£õ¸ã <—(Ö¢ñ4.î΢AãŠB:°ç½.±+¤qE`‰è£C×â–ˆÏ: qu+±B*×Âñ/á›Èµ¨%Rr_¨\KzgÊñ•kÁÀž”4GæZlŠÑÒ^è\ M1bbƒk™)F<Ûep-2ŨY.JzàšÁæš];è©r<®™µƒ‘Èäe¼RèÂ5§(²R‡¹\óñ2ÉØ\Œ´ŸY—3×L‹1æ®9üsʽHáÂÞùYšN\¡Á’Oݸª¢K²°#WHí”íÊÌ-ß™‹œChaâŸ+IJÅ1]Ý—Yt¿7á…«~mñÕ½G~¸>lÑße§>®^¼Ä3X>¹< Ùó©«¿e𧯾øäâ§Vߨ^ýõÄ/—Cz5"u{I..™_ª\²çŸ¾û‚‹˜Ÿî¼ç" ×GyÇeǧÏ‚||0®Ë¨Y òiÿê³Cr]†í÷þI?N¯ï!?74×uàÎ7ö/Oçò¼ß¿¾¿ÿÈY¸(ð?­—Îendstream endobj 11 0 obj<>endobj 12 0 obj<>endobj 13 0 obj<>endobj 14 0 obj<>endobj 15 0 obj[12 0 R 14 0 R]endobj 16 0 obj<>endobj 17 0 obj<>endobj 18 0 obj<>endobj 19 0 obj<>endobj 20 0 obj<>endobj 21 0 obj<>endobj 22 0 obj<>endobj 23 0 obj<>endobj 24 0 obj<>endobj 25 0 obj<>endobj 26 0 obj<>endobj 27 0 obj<>endobj 28 0 obj<>endobj 29 0 obj[16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R]endobj 30 0 obj<>endobj 31 0 obj<>endobj 32 0 obj<>endobj 33 0 obj<>endobj 34 0 obj<>endobj 35 0 obj<>endobj 36 0 obj<>endobj 37 0 obj<>endobj 38 0 obj<>endobj 39 0 obj<>endobj 40 0 obj[31 0 R 33 0 R 35 0 R 37 0 R 39 0 R]endobj 41 0 obj<>endobj 42 0 obj<>endobj 43 0 obj<>endobj 44 0 obj<>endobj 45 0 obj<>endobj 46 0 obj<>endobj 47 0 obj<>endobj 48 0 obj<>endobj 49 0 obj<>endobj 50 0 obj<>endobj 51 0 obj<>endobj 52 0 obj<>endobj 53 0 obj[42 0 R 44 0 R 46 0 R 48 0 R 50 0 R 52 0 R]endobj 54 0 obj<>endobj 55 0 obj<>endobj 56 0 obj<>endobj 57 0 obj<>endobj 58 0 obj<>endobj 59 0 obj<>endobj 60 0 obj<>endobj 61 0 obj<>endobj 62 0 obj<>endobj 63 0 obj<>endobj 64 0 obj<>endobj 65 0 obj<>endobj 66 0 obj<>endobj 67 0 obj<>endobj 68 0 obj<>endobj 69 0 obj<>endobj 70 0 obj<>endobj 71 0 obj<>endobj 72 0 obj<>/XObject<>>>/Annots 15 0 R>>endobj 73 0 obj<>stream xÚ[s%·±¥ßõ+*ü0ãÑ¢ê~™yòE²aëHíñDûMnuÓf“4ÉVOÿûA&€ÌÄ®¬…Çq¢E~\@åÊP(ðﯺ¦ ÿ×5Kß ssóñ«7ËpµòO×éjkº«±™»öŠÙ^óÌÓ1X¡F­B|êÖñXm‹-ÁÜÇ«Qmø¡Ã5káL²XMm¼Þ…û‹é0²P 74«-ô}¬þxµ˜Ž6}µ>5é^xÊéµÄ\5š­alìboî«…6·Ädˆ[¨Q~1Fýù±õ²VQ[[~`wÍZxtR`žåQª9ÍK™µð8¬Àd”^¨-ã±p¯ÌÇjÓ¸m&ƒy_mØâØ3‹ºŠn+0ójS'ÊÖ)NÑøja€Ÿ/0a¾ÍaĨ®qôè«Ñ€¢À*jÛÊÌ®Y!ËÚM,íÕÚqU ¿ïŽÕ–®m ¬¢6ĎϵžzÓ¾-°üHU¨…†6…kšc¯äªMô¤U`¾Úý 5ÇAfE-cZè–¶£´ä †¶Àüº SêBç6«Ñ£QUÔÂ?“œ'h»ËO¬¥Zš îyZêPžHº«¨ÑôÊQxù²ºKÉ…Ú²®qTÌÓÇuµŒ¹u5~Ü=®M ”˜[·9zÔósű K «MqF×µ~¡H_`yÞ T mMT£¾íX-Íõ)VQ£Öᵌùj¡ˆO:]œ¸8P£F¤À*jC{=ë®\剔BÆ szL· Ô2æÖMÕ–¶Õ¶ií ̯u㌅þ0É©ÿk‡ÃjÃ$W5Á|µq›£M×mìû¡À¼÷YFm\ãDœ_·p· æ«…%ª…[±»@-cµu‰_-´4CùjíÀ£;š°n¯t£G¨Ëwj}lÁÜ´4j‚ẅ1üz¬–f æÕm ƒÅ¨6ÇA`MM0¬F¶ý±Ú‡FsÕè}Bœ>×­®¦V£«­Ýx†¹jC|IÁï‡#µŽñKs¶jó0ÞÎFM0¬¶é)ÏU£ÙsÕèI‹'ÃŒu5ŰZhrºc5â ,Ob¨Ýzx;5Á¼ºÑ¼PÄænœŽëúÝ©Àܺ©Ú'ê&jóÕæ1^Bè‹âÓŠ_·0 › ¬¢Öçù·n¢–±ŠÚ°Å™IWg¯ ,¿J(ÕÂc}T›Ò”£{¥ª–1¿n¢¶ÄAf­n«¨më®”æÓ Ì¿RañK zd¯« æ×MÔ†eZŽÕ(šV©Û´t‡]›Q˘«6lcìÄ×0îîŽëFÏçVQÛæ~½@-cXmëâk¬ƒ+Íj‚ùjK‡R´Šäø®§™Ö¹À*jy6Æ­›ªe¬¢nëùXm˜ã#`ù%]©6®qH°mée¥¥¢–1¨6´Ý'raÝó¯TÔ†¸6à@mŠ/w«Ômê×îͨeÌWëÓ¢&ZÑ]P·ŒUÔ¶n[ÕÖ¡ «Ñû½éøJ³š`¾Zè4ú¸¬ëúzÝ«¨Ñ—C5^zU`ù¥ðÚïkÿJU-c•ºÑ¬ßjsÕøM9¿¦§y“ã+í·q)0÷JU­SÐ5µŒUÔhì~|¥¢–±Ê•Îé­·¯6õóR`~Ýè¥5cÔ_©¨e «ñX¯›`5º† Ô2æÇMÔÆyXÕh®±À*u›§mº@-c¾Ú×- aÔ2õ¨e «í”_zjÛÆ“xŠååj}\;ZSËX¥nãØ¨eÌWk×5ª¥ÙæšZÆ*jë0>ÜÑÄO¿˜·¬Fk+ƺš`5š¨;Ð5Áà•†TœÈ­¨ æ©ñË ÆænW:N<}¤˜{¥ªŠê.PËV›iEy]M°Š½ˆ8Ž›¨e¬¢´¿@M0×…9Žy¨¥ïúq^çµÀüº‰Ú²µój«¨më<\ –1¬F+»Á½Õ«¨ qYˆÿ¨¨Ø´ÄZ£¥WŒ-i¥–;m¢Ø6k íT/4ô…s6MÝv¶ŒË|¶(4Ô<®ù§•\ÇW*ØŸËjjÓç+Ø×Ö°p)Kù3’ 0•bôR_€ë2\€Íëñt­°ã§6Á$µŠå¬ù‹Œ™B×e=ôTÖß &OúE¡¼ê®Ši¡ôx<.”‹Édlñ ¿D,°{Áj&¼HÍ„7c•ðН`8¼H­¥—»1¼ãWCùáM‹Ì“—›á͘úêll«j&¼HÍ„7c•ðН`8¼HÍ„—^~‡—–r[LÞ¹„7c~xç©o«j&¼HÍ„7c•ðŠšÞ4Mg°4§q^¤f»¦…å~xÓ‡~‚ÉRƒðfÌoh±Úªš /R3áÍX%¼¢†Ã›±<Õv^¤¦áå)ÚÃðÒ7ƒÅd…’^Áüð¦/±š†ªixÃáU5^Ápx¡š o?®ÓáM˜ÿ-¶†7c•ð"5^¤fÂ+j8¼¢†Ã›±Jx‘š /M$‡7}ñ$˜¼¿p?²6Xšü?p!c® ë6M[µPùvjÌB…³2V1KÔ\³Ò«%\7cR3fÑLÇf%Ìí>äÃyƒ9¸1K0l*T¾ Æ…³P¡Æ,Áœ¸³fÌʘ—oÆ,¤fÌ¢I‡c³†6Õ-an@èþ0cÆ,Á\³èªj¼óÁXÅŒY¨Pc–`Ø,„³2V1 ©©Y<7Q7+cf­-÷hó\³0&fÁBùÛʱª¦faLÌR š15K0lT3fÑcÛf%̽RcÂŒYS³fÌB˜1 bj–`Ø,„³2V1 ©³Æ¾_.0+a¾YyOƒ9…³š1 a².Ô˜…ÔŒYH͘…0Y¥£X~i⾨2Xš®?ðj<»õp–ñ4a5OÞ"5ã)ÂŒ§¨Pã)R3ž"5ã)ÂŒ§«x 1õj<]»±»ÀÓ„¹j¦Q 7ªSOQ¡¦QEjÆSˆ©§¨Pã)ÂŒ§«x 1õÊ+»›Úv;œšP³2V1 bêÄÔŒ‰ ŠA ¦.æ»^( ¶–°PãBßNÓ± y„Ÿ±Ê_1ϺC5ãR3.†]@˜¬zU¬â‚`ØT¨qal»Ã‰ŽßéZ¬2ƒ!˜ïMZWÕŒ H͸ vaÆ…ŒU\€˜º€ 5.LÛ¼¿ñL»ð &KÇKÒ¾vйsy4¬f\5ì‚`Ø„2Vqbê*Ô¸°Ä*+ï3&ŸŸ¸1×y= ÕŒ ¢†] »€0ãBÆ*.@L]@…B[}8ç ›C &Ä•.Ðf:æ55²» V3.d¬â‚`Ø„2æ»–- ÷ ¨PuFÇÇk0ø‹‹ÉÇ¡¾ ‚¹SÖmZ’‡ÕÔÁ° ‚åÌ}TÍu!}}£vA1è,Ô¸@ ¾ê 2vð ¸—¡Àܵ+²€ª2Vq!cD »±Š SP¡Æ…i™†ú:‡Œù.äŠs;qYçÕŒ «¸±Š ¢†]ÈXň© ¨Pã²tmý}}Æj.dÌw!¿¯‡jÆ…ŒU\ÈXÅQÃ.dÌwa‹ßá ·H¨PãÂ6ÏKý½sÆd³…ÒZU`ùûVÿ½3T3.d¬âBÆ*.ˆšëBúbT±Š ‚aP¡êÂ’VV\Șß;‹ ‚a šº vA0삪AÃ.`L\€…èc‚ú{çŒÉö¥ iÓrƒy‹<å…2T3.d¬âBÆ*.ˆv!c ¦. B SÚá­âBÂü$W2æN7 Ý4M%ßþÃBYH͘•±ŠY¢†ÍÊXÅ,ˆ©Y¨PcÖ2nSýµWÆäËñÒ,ZÉ]`Þ#¶1K0ÏS™N‡…³D ›%|„˜1+cn÷ÁϱuLÍB…³¶´ uŬ„¹+¯ŒYóï¬aMq ¾û€…³š1K0lÂdƒ ÅÜ[FÍ‚˜š… U³VÚ«¸nVÆü¥ôác_bî•Í‚jjÄÔ,Å YŠA³ ¦f †Í˜˜ 5f Ã|Á"¨ŒùoŠÕ,ÁÜ;+PRÁÔ,T¨1 bj–`Ø,„³2V1 bj*Ô˜5 ý‹ 2v°®&¿ÏÂX>¨È`î (ž †=E…êÛ1ˆë!¦Ö †­G˜±>c¾õC<þÉ`°„…ëÃóf[ûŸ±ƒ·ÿb½`®õcü.Ò`®õ”æ%†­Gu3Ö£ºë!¦Ö£BõóF\ÆÓŒUs'K%¼ŠùáM§vÌKòüŠ*áU †W1^Å`x1fÂÛoÃqS“_³ &»Ð»é*V /ÄòÛX\¨ oÆ*áÍX%¼s¿û R·*fÂK#ß Â›0÷½3 ˆ®ÀÜ©×q‰Ë«„j›±Jx3V ¯\/ÂLxé8Õãð¦=s7‘0á͘Ÿ½^ˆå­p¡&¼«„7c•ðf¬^„™ðÒ9©ÇáMë‘sWÓɡϊ¹ÙË ’ ÌæåeK¸PÞŒU›±Jxåpx¦áåPÂ+Û æ.Õð æ¦¥„b²k.TÃ+¯`8¼‚¹ß‰Ïa³U1^Údý8¼é]°ƒÍ¬ú–­Á˜)”N°;ܺY1:Ü«ŽÑ¹Gë0y¼»—`ã6SlÁ¦sŠÉY‡£í§‡ °>sYÁÆ~\.ÀæøíO [»ù‚By;¹ 0ÚëŒ>*¾£åÂGŸcëQ¡Æzˆ©õ¨nÆzT·ŸIJÌ»ëçtî0V3Ö/qMZÍú„Õ¬ [ÔŒõ3Ö£B'ž½*0ï–1Ö£BõSëQÝä"\7c½`^'>OÝv¦æÎ“‹õÛ¸\0±–±šõ‚a둚±aÆzT¨±>cëQ¡Æzˆ©õ¨nÆzT7~QÜ—jÞã9~¦ædˆZ¿t!„uë3V±^1h=TSë!¦ÖÃB'ž›(0÷k/±ªÖcL¬‡u“óÚpÝÔzUs­ßÖ8»1cý0¬óÖ'¬f½`Øz¤f¬G˜±j¬ÏXÅzT¨±bj=ª›±Õ£Û—jžõKßMk‰9ó–Æzz£uõ «Y/˜k=í|TbpNj¬G…NëŸUÌÝóJ­G…ë!¦Ö£ºÉy”¸nÆz7c=Â䈜`x|œ±±>a5ëÃÖ †­G…ëQ¡á¶jc*˜÷ÊX 5ÖCL­Gu“#\qÝŒõ(nW®Z7cýÖO—4ø «Y/¶^0l=*ÔX 5Ög¬b=*ÔX1µÕÍXêf¬Gq3Ö£º©õ´áÖP·>cës­Ï ƒïOa¡j=,T×#Aµ¹ ½UÕ4C šfÆ$C`¡r’5VÓõ½X¦~úƒ‰ 5‰D§v_H s_™Dʘ›H²ÞR0wÝ &’¨áDB…šDB˜I$ˆi"¡º™D‚˜&*Ô$Ä4‘ ¦‰$˜›Hó²ÕÕL"Ñzº )aîNP&‘2æ'RúÎH1o*Ì$’¨áDB…NtÀRU3‰„ÔL"!5“HÓDB…Ê9wXÍ$TÓDÌK$>S³À¼½tL"-ízÁ¨Œ|¿ ‰”1ZË»gHÆ*"΄™ ˜fª›Éˆi† BM†@L3bš!‚á ÉX%C¶v¼à}VÆÜ£úL†dÌ;ËdHÆ*"˜›!´®ªf2©™ Aj&C ¦‚ •óÚ°šÉ¨¦"ÎŒá ÙÚm»àµWÆ>1Ë"˜{Ÿdˆ`8Có2$Ô7öõPM3ªi†@5ÍŒI†ÀBåÀ¬¦‚Õ$C šfˆ`n†äåÍAs›¦ú´Iƾñ” ÌI$“!«dˆ`8Cf2bš!¨n&C ¦‚ 51͈i† º™ ÉX%CÆ­»`N5cµ A˜ÉŒU2D07Cè ɪšÉ¤f2©™ ˜f*TN6Áj&C šfR3’±J†Ìë|Á»¶Œ¹Ý‡É„™ ÉX%CÂ0“!Ó Au31ÍT¨Éˆi†@L3ÕÍdHÆ*Šº`†6cþ4]>…V1ïí¿I¤Œá-,Ô$’`n" m B5“HHÍ$R3‰1M$T¨Ó€ÕL"A5M$¤f)c0‘æ6ôõù^ÁðÎ<C›½(Ÿq¡’HC‰„1I¤ – ×M©‚åDÂ…J"U°œH,'’Á¼÷€š!ý2¶dHÂðF[Ã"˜;M—v‡PÌ=|J ÕÍ$*tZÂ|®ª™DBj&‘šI$ˆi"¡B倬f ªi" †iœ·å‚DJÞ-Ó`ÞŽmšH‚¡—XÍ$ª›I$T(mÎ>NU5“HHÍ$R3‰1M$T¨ì>ÕL"A5M$ä‚I¤yžx"—¾£‰”°Z" †I0´l «™DBu3‰„ 5‰„0“HÓDBu3‰1M$T¨I$ˆi"AL ¹ ;$ÌadÐu´H «%’`8‘É„ÔL"¡º™DB…NóÜ¥R3‰„ÔL"!5“HÓDB…ÊnÀXÍ$TÓDB.h"umü(»’HìW0I$ÅÜD ã•¥ª¦‰1M$X¨&Ä4‘0&‰릉„1I$X¨&Æ$‘0–Wé 'R?]p|`µD‚˜&’`8‘šI$„™Dʘ»òJ3ÕÍd*ÔdÄ4CPÝŒõ¨nÆzÁк\7“!t–õ’°Z†@L3D0œ!HÍdÂL†dÌ?…V2ÕÍd*ÔdÄ4CPÝL† º™  ­Ù6nCæ¸yBexœ±Ê¨F18ªQ Žj šÉT7“!«dª›ÉT¨Éˆi† º™ Au“:pÜL† ÌdÈ:ij–*’°Z††3D0œ!HÍdª›ÉŒù'7I† º™ A…š ˜fª›ÉT7“!‚¡O~0&»¬Ì};Lõw”‚U2D1˜!ŠÁ jš!°nš!‚¹úI†Àºi†ÀB5C0&ë¦ë¦¢jî§ é{@£†3¤Úí‚ IXåÅ`îþäš!¢†Ö“c5“!¨n&CD gª›ÉT¨Éˆi† º™ Au“…qÜäcaŒ™ ûy¾ CvðŽ2¤ÈR`pkz£_@5“!¨n&CšÉT7“!¨P“!Ó Au3‚ê&›H5´“€Áp†P*ÕÇ!Ãë ælDc<ÍXÅÓŒU<5ÏSj’úó6T1ž¢ºOQÝŒ§¨nÆSQCƒ`Ìxºvñ`¬Š§ «y*ö4cO3æîÌ£žŠö4cOQÝŒ§¨nÆST7ÙÀÇÄÍYª¡f…Û3žx…ÍÊ^Ц~­/6K0l–ªA³ÃfÁº©Y°nj¬›ì …Ã+ÛßÍ¡FÛsƒÃkƒ‹y«˜•1ÿÐU1KÔ°Y«˜…êfÌBu3f¡ºÑ¦„C=¼Æ¬±'^UáO ƒKø«˜%˜{쑘%6+c³PÝŒY¨nÆ,T7ÙjR1ïÜ cV0邳Œá/ƒ †Vä*V1K0l–`جŒUÌBu3f¡º³PÝdKXżS0ŒYKümͬ„œ“"fe .°W¬b–`îQ}b–`جŒUÌBu3f¡º³PÝøl½±À¼ý{YÛO¼ª˜•0ü°ÁOY«˜%6K0lVÆ*f¡º³PÝŒY¨n²ÅºbÞ>Ûò·ó˜«rÍÚš§´˜ÿ  jÃÊk«|µ±ÛxR0ÿÜ U›âžá®šÁ–ej±ó™l«c|ZÆçpFÛß^€Ñþ,Œ…AúKù0ó·Çjã—F`ÔSÖ åK=ÆR/0ÏËÐmÇ… ¶ÅµÊ5ʲá˃:.óØŦ.žÐá©Ñpž{vÁü´Tµ¥kͺ¡Ë!2æß2ª¶µsw¨–¡̽åðwÅÜ©0:Þr)1§©™hÄÙ•lTƒÃÁÜ ¢üT5¯]Û­ÇIÇ æŸ*% D1Å`@ÃOF3é·åð>í·ÐHóO1Ó€dÌŸN߆8ß«˜{”D0tB.V£ƒ›Ö­À*·¡?H:wL04¨ÉX% ‚ဆÎwÆj& “mâ4 ”Ð nóï¡Ñ÷>nãœê–0ÿùTã–1¼>D0÷¤W›¨á¸!59'c&n9 ~ÜÒD+A#¸Ó1‚‚ù“0·ŒUâ–±JÜDÍ[:üÝ`n¾¥“&p¡²7d ™w·­]ã‘L~¾å¸eÌŸi”¸ †ß æMÓiÜTÍ‹±Vb0nÓ¸I@*që—xž‘·t*¨`þÛ±|wÓðf 4ÕLxE ‡W07¼éÄS(LK‰›Þ4 £½o»ùøv–ð&Ì=-7aLÛ±JxE ‡WÔÜðŽqU¡Ápxf›ãV /= f¯<þgì ¼y‰`î·c^Áà"-Ô“›ðŠ/º9c²õŸÆëqÞuŽgßT›0?n²c^Ápx3V ¯¨¹ácç‚ëf‹0Þ7?¼i9Öž%â140¼‚ù«›&º}ëX¯ÁÐNwйG‘æð57¼[ÇOsÛŽBÀ˜„WãV o?Åa*áMX-¼Óð †Ã›±JxE ‡W0^„™ðæ¸ùm¯„—îEïÒN ¼ «…b^ÁÐòżű&¼¢æ…—&A§sÛ¶ôǘ셨qs³7Wx ÖÓzAö&ì ¼ý<¯%æ-‚Òð æ†w覩À¼ïLxQ¡ÓLçEW/AöN7oŽ[%¼ë©doÂü¸ix!¦á ‡7c•ð¢BMx3ƽÝqÜr@pܺÐßöõ¸e¬7ŒIÜC›jbµqž‡i©ªix¡š|‰¦˜7Y*ÛjÜ&šµÝ…7MC™~«ßõ«…b^Ápx!¦áE˜ /ª›|z¬˜·Íˆ oŽ›Ÿ½Þ±'MT²7aµðBLÃ+˜·a'ã`5^¤f‹ÔLx3V oŽ[%¼á)w¸ ¼ «…b^Ápx!¦áE˜ /ª›l塘û‘NÞ‘Rãæ7Éš¥[û¶½ ¼ «…b^ÁÜðÎÝ6UÕLx‘š /R3áÍX%¼9n8¼}ÛMK=¼«„c^ÅÜð+¿¤Àj^¨¦á…j²£‘bî⠯ĭ޾‹;ÿÏÛ°ŒÇáMX-¼Óð †Ã 1 /ÂLxQÝd ;ÅÜEžy«I›ÞuécxÇv¹ qÈX-¼Óð æ†7Œg§ªš /R3áEj&¼«„7Ç­^Ú…è‚ìMX-¼Óð †Ã 1 /ÂLxQÝdWƒycÞ77¼y̼ôK|‘Z oÂjá…˜†W0/nüÒ¨ªf‹ÔLx‘šÉÞŒùÙ›öÔ¸y»›ðn[Üx¼Þ„Õ 1 ¯`8¼Óð"Ì„ÕÍtms¿pÑðæ¸áìº5îÚFrÛqx3V /Æ$¼Š¹á·n¬ªix¡š†ªixóG9¼7?¼´(ca?Õ³7cµðBLÃ+˜ÞqÚÆªš /R3áEj:îÌ÷æí5n~ã áâ3]-{V /Ä4¼‚áðBLË0^T7}(ÌÝžEÃ›ãæ‡7Ͷ-òÄÍ–+Ù›°Zx!¦áÌ oß/cUÍ„©™ð"5ÞŒ¹syI[%¼[Ô²7aµðBLÃ+/Ä4¼3áEuÓ IÁÜ I oŽ›Þ´Ðq»9îߋÛ±Jx1&áÌ»5nªã ÕyrÁrÃèÇMR‰[Ðh/ˆ[Âjqƒ˜Æ-c^¿`â&j8n¨P·Œ¹ïòŒïëB·iŠ›¸.cÛ¸%¬7ˆiÜ2V‰›¨á¸¡Bõ­¢bð­¢bÞ—Þ77-iõXÄ–)nmZI˄ՠ1 oƼ—Ý&¼¢†Ã‹ 5áÌ}«˜ß‰CL6ëÓ¸¹Ù«áݦ¸ág%{V /Ä4¼óÛ&¼¢†Ã‹ Õ%ŠÁ%3áÍqóÛ>Ú¢o&â6˜8¼«„c^ÁpxU †*ë‘ †Ö#ÌËÞv[ÎâV ï0r×›°Zx!¦á͘»SІWÔpxQ¡&¼‚áð"Ì„7ÇÍoúD"´ ÃÚ_Þ„Õ 1 oÆ*á5^T¨,V4Z б•> (ãæ~x¥á Ï»ü¼ºð„7aµðBLÛ1÷€ ¯¨áð¢Be%³)Ôý0AÂ+j8¼9n~ö¦ÓN>}ê‚ìMX-¼Óðf¬^QÃáE…šð †Öácl姯"n~öæðòö¬õìÍX%¼“ð æîc&áU5^X¨|‚ •ÏjŒš^úi7÷ãM ᅢë–5íÜî‡7aµðBLÃ+˜w츆W0^T¨ /*Ô„a&¼9n~ö¦Ýþ’ù‚ìMX-¼Óð †Ã+/*T> Ã…ÊÇtãÃT µƒì•ð¦‘g-{óµ^ˆixó¶ÁÔð †Ã‹ •7ó /ÂLxsÜÜðæ]VþVê‚ð&¬^ˆixÃá ‡jÂ+úzc˶v¥Z%¼¼ö‘01ª æ«¥ïC~'w¬6­q*˜¯–¾š\øÉóÈúe£õéæ-Ë4j‘㺉ZÆ|µôeâþ7¢ñÕhǨÃjk»ÆRh¡ÿt´1ˆbÞ2ÙjYû%nåQQ˘[7U ¿Õ‚3CùuKûŒ~Ž[yøjcÜfP±ŠZ(ž“œvEÙ«u[ôT0ï-lXGÛ´K]M°ŠZ{%Ú0eØ©ñÍP`¾ZÚùpÙB3Ñ«-ýܘ7…(»Ó,í•r¬6nc_`µ5n5Ã/ßöj´wdy)ô\ÄQ Ä÷6ñÕB¯ÒXE­ß°„önZvj3µpæ‘h¯>~j[Ûqˆ;¥TÔ2æ×m‰»²¬4¹Ó«Ñ[£óë&jk÷]ÙÆu›wj´™nùjÛÂ%íH·gñÕBoÔ˜×DwÜ/2ÖwqÚ­~§6­KÛXEmlãf/Û6 {5zùQ`¾½¾blnãž0¾Z·SÌk¸h'k^âN;oÆ=a\5º±Ú«¨mç@Ï›jíÔB¯ÜZÌm¸:ºQY-ÏÛŒôü*åh—*Á|µ®樖Ög¨Ñ*‹¹MQ›V^dÒÓœÑ~-Ú‰ÇbjüF,t¼«…t§6„²s›šŽ« ÷Ø|¬6tK¹·sÇNpîGh7µa§‰y¯~ÁÜШ 3Ç™–íL{µ¹ïV‹ùj4ÓÏÖÁq¾RžoÚ© qE`îíÜõ!Q¦¯Õ(L«ÅÜ[ƨ…ßÒ?h&(î–S¨ÑÎæÝ24ÁmÂ:v±ó¢åÃ^J-0/Éé´Ý.ª #“}5ƒ.æ%yÇ;ø06ÜöýÔN{5z¬*0/-y÷)nTGZ Ãj˰œ«ÑÑË\`^"ñÏ¢Ú6p›Ðóö:;µ¹æÃjt`1ßõ´Â¶SëâWoŠy‰Ä7}T ×Ì÷Â0Çl/Ôh…ËT`^"ñŽ_QmêxpÞó„» ÛéѨÀ<³x/Ò¨2”ïþ*c§FÝLyfñûdüL[lùy)V{®6Ó"¾ Ï»Be¯›•Î'ã$§+Ø« ñöTÌ3K¾G¦¯ë92|«íÔhP3˜^£nNrzñÓí6`Üæ©Ä¼€È‡QôTÁ¹~Οj´.³À¼€ÈzHÞ4ˆ“œZŸÝ; ¸º£ÄÝN-- Xù#OV£ÑÕ¹=(·æ]‚¼&Xyñ1aÔŸì7Цø˜w 2¯¸ò+öÆìÕãκ+Æ/0vjéa婟†öp£5çó!á ãÐ=c²!U©–ZW~V$5jñ磅mŠÑxh×;çÇÌu•OnÃPx×Ôäg´•"ŒÑ‚¤s,?.­ÜFÇ]æ}·›ŸÖ5uÒ—X¨ófKq¿‘aÙ~ò(w ý.m¥µìÇ!yÀ¹+ãY¹)+±4ö[·qHÛ¦6ªÄÒ0l¥EqãÁvÚ=VÈø*Œzn:B½î¦¬eà´ÑO縃e?í±4† ªi«çܪ”Xœp<Ú¸¥ç¶ÛÝKÆ ôX÷·ÉÛº–XðÖMq›Ö5í/]`ÉÊ-äOÚô5µ–Ç~[×mC<5ƒŠÝa©÷ܺÐJÆóAºµÛc©[ܺiÒ™}ñ/°ÜßmÍ$5fζÄÒf ÑJǪ¦¼ÄRúË…ðeaI‰¥q¥·ódünÏyé¡h:„o¨içu¥žwx"䣌K} ½Þã¨ÊòìË}1 V¸Í‘J%¶ösËØç®åezåÎ"Ü#?Ë‹‰£w™Œ¥Òô]-ýÝ6„b'ÆhLwŽqB4¼§nÏ=&ï µÇhLÀX°’]àNñ˽M#q#)“Ø%–z(ÞŠþ!Û/—“ó© Íj9Î#Ÿ­»ÃRµM]Ë·ØÈ¯¸Žöã¢ñ=·ü#µÑëÑî…=äQ•doOw·ÌmšãÎ*²õV¹Ëhê¡¶‰šÕÆ|q_îõšú”Ï nÌ4%F‰ÓijrøNäw %¹©á ãEl;ŒÜbl^ø·´*q:a4× WdGñç&Ž?ò2ˆ§-´|Yœ–<¢=z2’&6:=QÊñ÷mGSˆ²9äÆoc‚ ,ô±}ãÖÁ?BâoÍÃWß|âöûÇæ¿h 0^aü?þá«ðyµ6Ó¸^-ÍÇ&4»W[ú¯û槯ìl†n½Íoí‡ßNÛÕlÛ/W]3n¤ð± Ñ¿ÿE¿ýíÛ¯¾ùnkBýßþ„‡`ÈЄMh£›··\½¶y{óëß<4ùåôüËÝésóøsóúáôoÿùÕ×]7_ѹ˜_÷ýUhçÞÞþúw?>>4ýÏïÿoóÃóÝÃëÝÃûæ§//¯§oèOÂà‘Ææ/þÏéùå.üIwÕðÍwczòP~ µ!í5Ô¢'ô7ŸÞzymºñMÓ‡Å*´Ã½û:Tž¡?ßÝ|¸>…‹û|:½¾i¾½~ùÒüôøóëçëçS¨Òãí§›×—ø§!F³ùËß=>}y¾{ÿ!”𼝩ˆ7Íoîï›é‡/ͧ—‚ÓíÿuHÓ+zAòu7Ò‘%$ðöÃÝKóùÃÝëééúéôÜÜž^nžïÞ^(` M¾p2‡®| —î†éª£ðŸËÐtÝmñóµÍßý«ßýõ‡ŸÎ„†au¹Î¯þþošëæéñùõúÝý©¹~¸mNÿïõôðrþ“¯;<•ÒNà¶§|-/|-ÍÏÏ|‘gu c±Ð:j]þÆ em&š…7•¹jè’šÓw'Ò¿=ýrº|:Ý6ï¾øJ•É?üùîùcsÿxsýþäî!eìVšþÇÇûû/Ÿoß4¾~þrOWüúáúµùpMåžš—Óý=ü;=ßÜ]ß›"Òµ6/w7'Ê›!üõóã§÷šRÍØRÙ­z{÷òãÓëãóKCIEúákÂØææñÓCømÈšÏÏ÷·ŸïnOWéïû9Üét#ÜÞÞ½†›&Tåî!Ôáã5ýWþ—#výËõÝ=[~HÙ÷7ÒjþÄš¿Þ5áõáõõé}óÍçÏŸ¯n>=½\=>¿ÿÕU´$4 Á 2%”:„[“‹ýíõͿއ‹{¸-£š-Ô•$©ýùîõÃ]Êw f¸9ÂõÞÝ\‡€ÇÈÞ>>œšO/|ñá_Ô°|~lÎòé¥ùš/à·§çîO_š?Ý=œÎâÉe†èýþúD·X¸þôÃïC.7ÿýãw¿ëºeûG}=5¿yû?Þ²D“ÿ(sÕ¼ýîï}éŸOÏçÅ…ûúîý'k.íÿ|áT?~ 7MóúØÜSAO± —ÿÝürz¸%Ë?\ÿrJ)s}{„~ ©GwO)þB‘xùôDw!Éž•þŠ|n^¿<Ìêç9òãééþúæôñôð+÷ê_×%`ÏïC=þûO?üøðþMóC0éúöî!üëO?üãMóáñó‰Òó!ûôá<&϶¸Ð?¼?ql~ÙrM? ¹zsýtýîî>¤n¬z¬QªÈyý©¿a…ûëÐæÿ:ž/§k¾]Â/‚Øõkø«§PXHåÔ2Ðe…ûÿ5x}ý|«—Êú9Ô.^,çÞÇëÛÓ›ð››ûOá:ߟ] •{û|ýókóÃ_~²íµˆáß?¼¼Þ½~zåø|{ºyå\çÄ‹ÿùøpwóÒ|ûð>$E0ìMø“›«³‚Cê~ÿí·ßrîÒ?Â/ÖåjŒùû=]ÇÃéU«Ú½×Ç›Ç{JùïøþÌ©Xú«\2ýáÛë—ýÝãsˆWàíw¤”2É7KhFþEÿ‡ð«'‚øÛReß~÷u¨Â?øFJa{:ÛîFú9Ô(XÈë#µµ¯>ú¯ð_óíóúøn‰kºC_|Môrß…Ú]ß~¼{ ¶5¶‡3þUóÏÇw/oÎ ͯiä?œî11 ¡?OÈ·6–{òµ¤îòñá…ûc¸UŸßR‹ðöùúá…okù³.ŒÎ¨•êçnþGø‹³J>=?þBm¶iÂxòã㫽“©¹9½\5!þßtWmó™¢tsszzµ—ôö;ŽÞC¨b¨Ð]º)<ýûÓéåuŸ <`áÛ™ê÷ÐZß|¢ÿ¦Vï/7¯ïBÀƒW¡ÏÛ®šŸ¸1 å<€t¡hkz^?œ•ùéé–»ê”/O§›»ŸÃ=ôÊÁ¤+××Ñëæƒ¹™ýk îS}ýùúŽãôôéÝ}’;+9Ô+úéñ…JO©Âùׇû»Κ€7T‹æôðÏÇ/!%ƒ7/Oϧkê nÃàôù‹XE凞øéñŽdwξ;…,m¤4*!³BŸÿ/cíãý'NeºúÐ&7!r”ÜÚ~Ÿg)>½„DÌÁz¥.5fßgO÷§×Ðô}|¼ ©ÜÞâ è&dË»SÌé[¾Š|ygWóÚçܽ!“)!ߤ;0¦:ïO©2iDõ.†»„/<^%…Û—~Çu¸~zÊŽ½Èhð¬äŸŸO'¥+½mB·“úP¥¹»iþðŸmþpzàä·0¸ 7lëÒ¯ÿt÷î9tÇgØY©éàpé<àùÆJÔ¤„Qjèßžâ–¬~£œëîFøŠÿþëw×”AáWéþí-Ýá ¼­ÜoBÃÉ÷Ê®ÇNž{ÔàE¸«â](W±…^#ü–ëBK®'H¾<Ÿ^¢Êͧçàã›ôôÀ¦Æ x÷éýKŒÂ*áÉ$>/XObject<>>>>>endobj 75 0 obj<>stream xڥݓÛ6–ÅßýW°ò”©²e‚$Hbߒɤ6[óá©ôÔîC^dµÚV¢–z$µ½Ù¿~qÁ‹ ºMÞswgzªâêþéœCü@ÿ|åª:þ¸ªíéÿ»ÇWÿ¬Ú¶ßôÓ¯·«Áošªsͦ¦¿×›ºn\ã+úý/þ£«ÝþÿÚ¶ºì#æChûæK¬îÛñ6SK¿Äj‚éj~ì½AM0]mÂhPLUsnh åV0]­ë{C¹LW|0”[ÁTµ¦ö¡Ü ¦«µ]o(·‚éj} åV0]-´MoPLUk›ÆÊ­`ºšwÁÔÓÕF×Ê­`ªZçjo(·‚éjm åV0]­¡Ü ¦«…ÑÊ­`ªšo†ÑPnÓÕüà åV0]-^S åV0U­w~ì°ZÁtµÎ;C¹LWº.ÔSÕ:i°ZÁtµ¶u†r+˜®Ö7]*Ñuu»®–1 Ü jÓÕÆÆ¹T c4÷«j‚5_wA-c@mÃ`P˘®èg­N»!በýªiQÓMÛ±k ¦Œ!SQÓMûaè ¦Œ!SQÓMÃPSÆ©¨i¦.=a@SÁtÓ™šn/åÁ”1d*jº)3SÆ©¨©¦Îu-®SÁ€iQÓM#ULC¦¢¦›Æî‚¡N3†LEM5mâã¶Ç¦¦EM7m]o¨ÓŒ!SQÓM{Wê4cÈTÔtÓò ¦Œ!SQSM[zCf ˜5Ý´ƒ¡N3†LEmÑÔÕ©/ìÚaä.v3ôíº)cÈTÔÔ#íè)i +¦¦Vµ¶«•>ꦃØL­ï›Ñ ¦a3µàûÚ ¦aEÍ7]h±šŠÍÔ|×ÊMÅfjcë å¦bE­§«©ØL­kC¹©ØLmˆebPÓ°¢¯£¡ÜTl¦ïlΠ¦a35¼¡ÜTl¦6ŽcoPÓ°¢6ÒVS±™Z7xC¹©ØLmèGC¹©XQ uï å¦b3µÖw†rS±™Z߆rS±™Z蜡ÜTLÔš4Z Õtl¦æ›!Ô4l¦F=vƒš†5zvï°šŠÍÔè¾kPÓ0y$hèÊàM\0ý‘@W›™RO\‚!SQSM›f4ôë¦EM7õcÝLC¦¢¦›Žƒ¡_/25Õ”º2¸¿ 0-jºi×úõ‚!SQÓMoè× †LEM5íh°›f ˜5Ý´í ýzÁ©¨é¦}Ûê4cÈTÔtÓÐúõ‚!SQSM=]º°iÆ€iQÓM½3ôëC¦¢¦›Æë–7˜2†LEM5íi›f ˜5Ý´ mm0e ™ŠšnÚ½¡N3†LEM7 C0ÔiÆ©¨©¦ý`ӌӢ¦›ú¾7ÔiÆ©¨é¦£†:Í25Õtt¾1ÔiÆ€iQÓM»Îê4cÈTÔtÓøPc¨ÓŒ!SQSMi´Å¦¦EM7mo¨ÓŒ!SQÓM{7ÍsP_> ¨×ÔµŒ©j-Múi¡ZÁ€M›0¨e ¨ ÁµŒéjéM¬zÁôªŸ©é¦4m0e ™ŠšnÚ®7˜2†LEM7¥qƒ)cÈTÔTSêâ¾³`À´¨é¦ôœg0e ™Ššn/å†:Í25Õ458lš1`ZÔtÓ®u†:Í25Ýtˆ=2ƒ)cÈTÔTS23ÔiÆ€iQÓMã¥+LC¦¢¦›öµaŒK0d*jºé c\‚!SQSM=mcӌӢ¦›v£aŒK0d*jÚKÛÖÃààK[Á©¨©GÚ×Ãú¨T1Í0µªÑA1¤Ö{è”`H-øÚP¼jtÝ2”[Æšo D‚!µ±1ŒüÔhZ4î* †Ô:×Ê-cHm¨ ƒ0‚µ@¿ÆjCj±›b(·Œ!5?C¹e ©£a C0]-ÝNqG@0¤FÓÓ jŒ!µ¡7Œ9ÔÒÄA¬–1¤Öv†QÁMt0¨1†ÔBkè× ÔÒ{/¬–1¤æ›ÆPnCj4ÞdPc ¨¥î.VËR‹'ÍhPc ©Ñ½Í ÆR‹W‡Ö ÆPKå‹Õ2†Ôü M‡ë©™,6·®6öcmPLUó®×¦Cdµ‚éjôcPLWºO#ѱ¢F<BÇfjÔC5¨iØL­o Ó!tl¦šZ)7Ï·ø‚¾nVÕ†Æu«LWóõÐÔÓÕÆºî j‚©j#­®XW‹=Éð{Tüܲ¨ôœA-c@-žÍA-c@- moPËØ¢Z?øiÜ;4ýÔ3¢eý•Z;NÝ+Á\3øf]Í÷SϨelYmì§»-LÒx_ûuµŒ©j>-†jjñvÖÕšiÑMÁ\7ãº-E3¨elY- é:ïi%ÌTnm˓͖Ôj40lPËP£)¹ëjnHð‚ÑàJ»®ê¼ðYUËØ¢ÚPéø©½¥›Ö´v{ðaÝ4cÀ4c˦.Þ}£I:év@·¬fÕT°eÓѧ×Í[:ëëŽÜFÕ0­Ìõ®[7Í0ÍØ¢i¦Hi™8¯~ÍÏTsÓ6¤KnÁ–®–3ÓŒ-›ú:Ý”énêR-Äk׮𠦛 ¶lZOæ}¼Á§›—‹Ý_7elÅt˜6¬(ØÒ0Þ¨|®ô½ã´F/Þ»úuSÆiÆ–M».-×õýxý`ŸW`ÍMãcé0ÇŸf¦[6åóˆj>]èh0thWM3L[4ÍW³ÔKuJbݺ)c+¦}¾Ä–žkçC7e¦»¹ki@tÝ”1dš±eÓvêõÓ ¾nZàñõyÚ×év ØâSt1lÙ”ÓÚ¦Ô]z³nÊØ²iîQlq‚}þlÚj"Õi×ù…n…˜2†L3¶<«Ÿ.@ ]º¹.V‡_7e ™flÙtèÒ»3h.sZDV‡…G©avl±GYL ¶hÊ¿¤¥M©'îâžCÄ”1d*Ø¢©o§çÞxÙJ王÷Â…Ç1e ™ ¶hÊã<é¶êÔͰz¤‚é¦3L7í\êþÓÂÀnµû/˜>£cñî?MëÓ>#É4^¢üº)cÈTÃf¦!¤ÁSöãº)cÈTÃä3­l§•’¾]}‹-0U±™©ŸúÚ+¦Ô¥œc‹#3SÁtSZM—LÚuSÆ©`‹¦ü¾¾§õHS¶½ïWM3L ¦›ò08ÒŒ!SÁtSšU¼j:ÖmºÂ¶Øå™™ ¦šÒ¤Æ°fÚŒµ÷_`‹S5ŠiÆ)MÀ1˜2†LC¦ñ§3˜2†LC¦ôFÙ`Ê2e ˜Ò«;Cf ˜f ™Ò€“Á”1dÊ2ë`¨ÓŒ!SÆ€iõæ¦C¦mð†:Í2e ™RGË`Ê2e ™Ò³”Á”1dÊ0¥Ëå€M3L3†L©D ¦Œ!SÆéا5dÊ2e ˜Ò> †:Í0Í2íºÑP§C¦Œ!Ó¡s†:Í2e ˜Ægo¨ÓŒÓŒ!SšŽm0e ™2†Lé Î`Ê2e ™7 ÓSÆ)cÀ”ÞNê4cÀ4cÈÔ×¼‹nÊ2e ™¡3ÔiÆ)cºiÚëש`º©`È”&fLC¦Œ!ÓxéòSÆ)cÈ”öL4˜2†L¦i[4lš1`š1dïE­Á”1dÊ2¥]r ¦Œ!SÆ€)mG2bӌӌ!Ónêö"SÆ)cÈt˜Þ SÆéÐ †:M‹±iÆ€iÆiëZCf ™2†Li<Ï`Ê2e ™†º6ÔiÆi¨kC¦)¹Ø4cÀ4cÈ”¦ALC¦Œ!Óa¬Á”1dÊ0M³y°iÆ€iÆiÛ÷½Á”1dÊ2¥Ž¬Á”1dÊ2 Þ0L'2e ˜¦ÑÒiw&Ww«¦¦C¦¾MkMÙôuÑ”1dÊ2¥>O2횯Æðg¦Œ!SÆ€iz¬Á¦¦C¦ñÊÕ­™Ê+ÁôW$:63¥pSÆ©†Ó±®•a:Bzë'˜¼Ž\ÎV05›ŠÍ²Ñæ †lŒ¡l‚éÙ4l–ÍeЯdc eLϦa³lãè{C6ÆP6ÁôlV²7Œ†ö–1­`j6›e£Iñ†lŒ¡l‚éÙ4l–-^¤ í-c(›`z6 “lt6+ã–9›`z¶¦eÓ±Y6ZÛmÈÆÊ&˜žMÃfÙúN-ÙCÙÓ³iØ,}q…!c(›`z6 +Ùh {C{ËÈV05›ŠÍ²ÑänC6ÆP6Áôl6ËF³ ÙCÙÓ³iXÉ–6¢ÅÙ2²Lͦb³l]ÝÚ[ÆP6Áôl6ËÖOî(c(›`z6 ›e£½± ÙCÙÓ³iXÉFoo<Ζ1­`j6›e£ ­†lŒ¡l‚éÙ4l–m”!ë’1”M0=›†•liu:Ζ1­`j6›eëü`hoCÙÓ³iØ,$²1†² ¦gÓ°’¾vÌÐÞ2¶˜MF ÓG fjz6ZÝdÈÆÊÆÊ&jz6Z\aÈÆÊÆÊ&jz¶Ð(cø%c(c(›¨©ÙÒ„Kœ-c [Æ@¶¢¦góNy#P²1†²1†²‰šž:=†lŒ¡lŒ¡l¢¦f£×±†ö–1-c [QÓ³ñú”M–ÉèÙCÙDMÏÖ­¡½e ec e5=M²1†²1†²‰ššž í-c [Æ@¶¢¦góÓb%”Íç5Mz6ÆP6QÓ³gÈÆÊÆÊ&jj¶àº€ÇTÙ2²5=mlcÈÆÊÆÊ&jz¶¡í!c(c(›¨iÙÒNl¸½ ¦gLÏ6SÓ³µMÓ²1†²1†²‰šžÖß²1†²1†²‰šž-þ8C6ÆP6ÆP6QS³¥ïûÄÙ2²e d+jz6Ú emÕÒ,c(c(›¨éÙ†‘ßéÙCÙCÙDM[b–¦©ºµum%[Æ@¶ŒlEMÏÖüÎHÏÆÊÆÊ&jz6š‰oÈÆÊÆÊ&jz¶Ðó;#=ci•j³¶Æ3}w[[XZÔ2†Ô|7½—jŒ­¨ñê¿vJ][Þ;ScÌMûÕþ!R5!í5¹¶B9ÍŽqsÌô5{k‹¬ÓóE³¶ÈºT}Æ«^Ö‰§·¬ÝÚ:ñ™c+j¼º™æ‰Ooºqøj¯‰¢–±eµ¼þ=¤=wÖVëÏÔ[Qs}Úç3í³5}UnÓ}µ{¦ÆØŠï™v„íÖöL˜©1¶¢ÆÛ>Ð7oL#ÛKÛ>µŒ­¨ušÒú·é‹žûn½…dlY-o¾A3¶»fmó™c+j¼}JHóÎÓþ!¡nÖk!c+j¼JHsF×¶@™©1¶¬–wqIoõWwq™©1¶¢ÆѤå ÍÚF435ÆVÔx/´-Áê^:E-cËjy; FK×¶š©1¶¬–w4Jû¯îh4SclE7eJßÓ¬mÊTÔ2¶¬–÷•J_º²¯ÔV§Wo Õçêﯾ¿{õöÇ®ŠîªºêÇ¡º»Ox]Ýí¾}8?Ÿî_WïŸoÕé\öŸ«‡çÓîv8Ÿ¶ÇÃí÷êóöZmïï÷÷Õí\Ÿ.çOûêöq_]oÛ÷‡„œÒ/þøw?W»óý~ó‡»__ÕÕ›¦ßtÑëÛô·iªÃµz¿½F©ó©úéÝ»·nãªíéžô¯Õãö$R%Bµ?}ÜžvûÇýévÛÞªÛ˜àý~ЇúÏçýõßÇ>_Ø×µÑ+ú>_÷—ë¦úîZ}>Ü>Æîu%Y>ŽÇ¨R=œÇóçIâi{Û}ŒªÇ}LÉn1ÛeeÓŃÜ?^«Th“jŒûÂöz~¸}Þ^ö©LãÇs¹>n=_ª‡ýööS!½ý1TÎoÆ©jÞ´1X*±ö×ÇSõ·Oû˧Ãþó„–:|Ó ›¶‰üóá·}õx¾Þb¸Ãév8}¨®¿Ç"y¼ò±Æ2¿Ojñ·—”{[íbi^bá¦ÏT×ÝÇýýó‘>pGG›ýþpM%‹"/Žó×óûhŸØS+y<œ×(|;ÄÚc•ÞOȧÃ}VÙ_¨éÜž¯Õáôp¾{­RW±žöûØH7Õ‡±x+W]?ž?_SkŠmΗÛÓá&»ØÎ¨tR%ijlC×ÿ7ñéoO©è "o¦Bü>fû­úá°¥6éÍË&P—ºÿãùô@­gª·±ÂôV°ûâôúÝu:Ê£·ý—E“WÀ×çt;ö{3l軗賿Ð÷…~™&ýQþ·:ØÝq{¥kÇC¬§í_ÿËOùSuûýi?ÉŸO1þ•„/±–ÿeõwñøóîrxºUù(âU4ý‚<~ùö›wï~øæ—?ü?Œ¨nc¿ïÿPtB?=_žÎ×ýñ÷êzxŒ õB×8j]ß=mwÔ¾W?œš.•;5÷ãñEå[äv—.Ôñã·Ë™®äç§ýåvØ_Ó)yƒ¥Së Vót’%Ÿ—gY/Ïûkùp,M)rþEE·¿]¼³îÓmüúõ!äSvSý“×xù òÙrú|<Žxå'ôTp¸ÄP_:Lg}úäë*ÝãÞÄ;uüõÃöúqåòRZ㋾>?=/ôP!È56ŸÛþ¿ooŸŽÛC¼ÂÍ®ÌocߦföºÚßv›ØÂ¨d¾yÜ~8ì¾ImûåáSmŸogºõÅ[^l!÷û•T¼v§ãLwÅt‰›Nè*¾îS¡<_§G•Û‹6‹ˆD.ñªºÏÏ$o¹;7nºàâÃ_Csk(ÄwåñBàâ;6€üõ§ÿš*”ýœž&HîMVy3ÄÞU”hè·]ÝÒëÅéäYxnùÓÝ«¿¿ú_òU5šendstream endobj 76 0 obj<>/XObject<<>>>>>>endobj 77 0 obj<>stream xÚWMS9½ó+º8‘*<±€¹-!@¼•d½‹ÙÚC.²F¶i¢\þ÷é–4ãñØP[\Æ£žþxýôºùu4‚!þàê Î/WGŸgGï/a4‚ÙO.ÇW0+aX ‡C˜ñ“[£½Ð~0ÛÔâÃìm/²í ,¤P%,ŒM—íÁÃݬoËtÙ·úzwó¥ofů œwdó ø•€ÉtÚ¼‡¾W‚7P /l%µˆF ©ð!'9„Áè¼8ÃBNÖ+¡õCO­Äšþ4ó~üýZ….÷èýTA:|äB¾ŠÖÒ¯ö£•†‡Š@D¨*æ÷b.ú°ºV’3/þh¸~༬ê}YäZÏ.‹ ªu†8|Ÿ|¿nô«°?TÇ’˜-aÅ^™TlžDWÀlÕþfGÕDìàÙÌ©ÈRºšy¾ÂgÐO*¤5ÓÝÄão‡à¡‡˜–AêSšHéÔÔ ©—à6΋ ÃJ¾¢ A:]# ¹éÇN^RQÉ;s …(EYÀC‡©¥Øä£ÓkeÖÄ-oMáf:Ù “зp7VÔMϤvñÍÀÕ‚Ë…ä[žsD,hNE&DP*q(¦D7 û°Þ·ïD_©'Ð’‘sá[áL°ø ^%ƒ¯³Ù4252Q¶bZÖÈÆmW xÒJ¾$vXb²‚r?¥7½Èm•H‚ÚšWI º$ÙÅÏIu#«èÇÃ'øö0ýF’ =FßÀ<«ª7ñ€;²ðn> û"”ØÄJ“ü ·¦ÂªJ÷vobÆ9ÕtÛÉSë–'OE,Œ /Ïœua^ÉÔjOüÅŽ¿Ð›}n9Ï|Èš6U5„û†<ûéç„1…»•Y£`øµ±/ÛKõóä8?ÿá„E¢ÿüph6Ï­YG*a{…&Å,IËÁ‡¬¤ü¢ª·¡JÐES2É1-;|Î*W‘jq˜òM$›BycV·V¥Ÿ’\© ä›Iš\Ç84ËCeÊ(º±§I%ƒµ4Nô £§F÷W¤Š@œªö=&'Ñz‡²7Íc²70©“F7ËÔI¬¤æ*”6…8KÀäË)]m»}ã¥Wø¨C5GKtÃM3'IÑsZ¯:As”¤ ž*£ä© y¶u§ã>3ï;;J«M™}›îr‘z•ªA„*¶Ìs—^wf“eŽŠÜ؇{c¨ð=(/kµ»@Ù ‰ƒ5³8|…¢ò0ß2ðFƒiESfNúàˆ#WnÎHhéªd)~X¡µKÖŸŠOCì‡L4~ÈJjPpYÏvl“>ÏͲX\çâÄH“0'hùa8Î4îI¼ÉrwøFqX"í©ŒVÁÆåÛœšŠ3ßõK‚"IqSÊ«]…^Ôœ!‚ßL%âJ»pf—%ó¬—@ºl‰Rþý«¡˜TQûþÇú-qŸ[f7Û±µ»0´jª˜]fã½* ½ãF‹Û8ÝU?ÿ‹ÕÝLÉ.¹´9Ÿ¢x1µ?úÛA£ÝRÜnº8鿤ú$Þ×f¼7Dèo.ÛË–oDâL‡ÉÿLòºB›énc]o]g0G£qqq=‚Ëóëâ*£á/4|•b݈÷mÒ´§“ÿÒÿxTIšdämÐ8\ ¯ûkßÅxXŒ±YC:8§7w³£¿~a7ïhendstream endobj 78 0 obj<>/XObject<<>>>>/Annots 29 0 R>>endobj 79 0 obj<>stream xÚ…WMsÛ6½ûWlu’g$V”dYêM¶›N2M¢Vò¤_ ´€výïû HêcÜI&Îr±_oß.àŸW1ð'¦ÉŒÿ&ÅÕ(áKóÏß\MfшƳqtCÝΣy-ä´®uÓE4nvË:/°®#´ˆ£EG× ŠÇ ¸k•Á)þÙé4º­ï´a8³›F ÇüÑg:®ÖuDÆÇÊ`8ZÀ÷ÁÐ ­a­‹Çñ‘²+C;óe5Zï6^Ì‹‡œ^Už_È G.ñócI.zËPå):h?¦Âè ¬ nÇqŒBÚgI¸ªö¹$਽ê”d‹ ¥ôÀä\%ªøwÌñ±ùù1¼;.â¸8?úÉliÅo ìZÈpœÙ¡W£Ú‚¿46|±Ý‡¥|¥5‹/™=‚ªÃ¦8H¿ên•¯{?§^Æ—¼|“[ZÖ7T}a|dO™8Ͼ¦@÷y9Œù]?Ïñj düÿÇe; TYø#ü(^Wê¿Ï­,­ÂEÏw åÈ“ï¬vŸ„§¦KÖ[2¬­÷6›8®¸‰ç×ÛÏŠ/cÞÞKv2­r Gx'ƒÁñnÌkø—¼é"Ư¥cüœ…·}}áÁAåõ-|oŠùðªyÂÑú d*jæ/ÃÛÑÂN€þbšÔ…ÿ÷ÍÕ_Wÿú‹n@endstream endobj 80 0 obj<>/XObject<<>>>>>>endobj 81 0 obj<>stream xÚ•VMoÛ8½çW |Ùt«vš:î1 Z ÛzaÝr¡EÚf#‘*IÙõþú}CJŠ£m½-rˆ!‘3oÞ{3£¯'cáoL—çôjByyr½8yywAã1-Vx3™^ÒBÒ(F´ÈOskVz];E•Ó&(çI¯(lIµÕ¹"-• z¥s´5¤Íʺ²ùíIl….IJPg$ŒD åq<Þ¯½r´ÓaC‚ íÙÕ‹Å—“ ǯ²s€8í.7¹<9›×…!§Š½6kB¢.\°ôhìŽvºKà»2d{Þï}PeÖ¤<Ÿdœr7Fí8¸^‘(¼EMyQKŽDK‘?*‚"é~~ýDJm$òÿ~=¿…~Цþ–Ѽ®*ëBw<žêU9·…p j 2Š‚–Ì´Ý‚V‰ÄHéë¥W_k¦­!ß´Ø"ô—wo(bñ†çÓlÂ1Ï3ºÆÑL¬U #]xÒš«žÆ²oîgs#LWª?@¾L¡*„I½¥Zkc˜.—)±+€ýb—]êt¾{®‰ßš}¯ô•†¶É/1L›t B¢î\{СŽvb(ˆOxP(7¢äŸ*äݪ•¨‹Ðƒ ñ…÷6×"(ÙËݧ8mtŒ(r˜‹o•sZÂÞÉ¥¹-K¼ÚàeÅ<-÷ùŽéñ è4ສq “ÚåÇŠ4Çųã­3؉¥Ee^åÜš¥ ›88ÏÚähÏmÁ(c‘ü¸ñ>Ý›B?ª)×Âë¼—øŒ¾GZ`16w7ˆÞY'= tj²Nuâ <"h©W¬T°½Ük‹µá,ÖéÐOìmí~еOö-«B•è¸ö‘ò•‚# úãöu›¢µAÉä î?¾ÿ«;ñûf´Ø °t•Ýn`;Ùä Í4I2™O‹*”ÏÕ?mvÌHl$§ò`ÝžæÊÅ ÷}-$Ta(²»íÓmz8´î_:»càƒ‡´R"À[‘úR<ª¦¤Dbfa°|¸úè¹gzÄ|æÇ˜Q]AÛ:¶ÏåÊb L°Ò +÷u‹àp}p/bÖa~èÐZ ÑδSÇ÷Òmp:iü/$B ±£ ÑéÊÖGlÐTƒƉ´%Œˆ@fT€ôž—N`â­ù 9„ ½üˆä•Ê^ðõ3ƒ«sf™n°ÑÖ?¥$ÓˆqÃ#à@Ë.PD #U…Æ™8¸˜·;ø3õ½ƒ*ÂåNŠ…c&wïæPý¬WÓÁ¼g£Æè~cëB&G0¿k×î}T¯¾a³Kâú‹Æ(5 ³¬ÓÌĺÇÄhìq„ª ¨²yÍíü?Ã’·vG<¼C¸em ãl½Þp‡îa«­æÂ qÚxi*DÞTÀ‡NìœA™þ7‰,µárˆý^‹7±¹à-ðQ–êð H€ûßÏfOÓ)Asj¥œ2hÁtö—àÂi–ãW–¸LWb‡½Í?}9aˆ^p:©£ÍãÕµŠÏèêÀ3ïf4»ùÐ9ãg=2š˜M–ÔFq{aƒÄf]5 ˜Æ•õ^ób·u¨êôuñlÿÂ#­ÅÚËBâëË»—»[fxYè°±Ö ›c]Šý0Ø!þuKï»ÓŒ$ü"»¬¸.1îÏhf}˜çNW¿oï’êA} ¼³ìÑxº}kn™|_ÔlÃ|ÿYˆíÑgm$f3]ÿ1‹±¯ cϰ›x󸦏iƒ{<žfoÆ4™Œ²é”ã\ú´åÌÍf»Á¶ ã‚›µdÎãŒàhÃ6Èðrôæø7åÅ”Ó\€.püäíâäÏ“÷… endstream endobj 82 0 obj<>/XObject<<>>>>>>endobj 83 0 obj<>stream xÚ•VËrÛ6Ýû+îdåÌH´ä‡,ïêØuÆ4QGr›E6 JˆA€!@+Ê×÷\€ÔƒvÜtìE÷qιøv4¦þÆt6áÿ¬託6&@N¬žÖÂQÃ}*C7³9“ÑÏàñòû–}¦~ÛbªrUËŒ©:.c2aH–)‚Ö0PŒ”¹ÌC‚“»+ŠE±æ†§ÓdÂÉ®ºŸÍhcÇ…;irMÓPÔ¬¶)`Ø„¶µTô¤œb`x#«Ä±%€É‹8l[rÒõ:&UV:`ˆú´æ=¼¶–ß´”÷ÀCˆÞd¡QÁ9¢…÷µJ/ãÏ Ã6­ZT¬îÍÛW75ô(‡Ø4l›K“ï”–½¤ûÉÀ?#¿-Zæ.Û®™PAœ(šo ’þŽ“Â]|“Ù²B°Tiå7ôåeÑWpKUœÄ“»Ñî®]2qÌ0¢ù—·ûj%cxÒ¡o÷Óc¸÷>à +‡yÿ9Ý-_§;ÑqÕÕn+c ¢K)Œ‹ÒÆ‚ˆX…‘—õto0$ FH€ãÔZ?àA‹¾°ˆc¡•ʹ3OüÏfåñó\1]Ú(r´± yKRV¡|e‚ѱƪX2üe…Y‰&—GÑÀŒTe;?Ä÷çŽÙÁñårç²"FÃG[3ݦÁ<Ö,Î@O—c@^•1óZ콕>KÀ0¤M¹•lø¾ŸºÅ6T.2ß@×6õNØRIÙ > €@®`|u&î9±hµ­ƒ ª€rôÒoSµ[wr·mN Ÿä·mX0ì,zÕ"à¶_Õè8¡³[ºÑŠmö?]éÝUu°éüž ¶ÒEÄa<]²—-˜‹ÁfKeÔ0² A‘À-ç±­×~›#ÚN%œ“ÁêJâ­6pR 8{ ¨~µÑÓ„°lx+ ePÙlÿˆý,ËýÂx*“醕·ï ÎÛÀgwôBëm÷‡ã±/åÞúOÒCäáåTnWÉL Ö›ó|·pE‹'¡t8Q·ë¿Ë‡ò›öÅI·ç ¤ØKØ­ù-b¼[й ì±W"NˆÂè­ ¡>Ñh¿íÞñ]H°yåÀÁ©r@»ÛÎ :¬e(ýªß0›ÃÿÄ,”$4"b*Ãá­8É’«¢À]RïjlÛ#­y}TÎúG¦t³€gÝóîBü‚·:Û‚/>â0õ€7¢ÐUƒÙP°4Õ%R[£‚´†Ù‚Æd7zí]©ïìžíi Ü6ùÒbVL!ê8ìe·20{èê°}¾¡ÁÍèiéÁbfM¡–8[Bù½ìøèk«c“2¶éúÜ;?/’i‹Û ¸Í»;èCpnö9È—ÉÙdÊ«¯I[–•¨*Éómèe &à‹¶ñ±(e³»æV"{ 'F¥8Û]Ræ=Hü¥þ½’ãc©µ¤ùõŸï®qMe^k©m^°I†éd”‘Ph\•òÍÞ¨ÂÔB˜^ÊSœÈ“„Ÿ.QY¤tCºÉCvX\ R2“íE¡•TÇ·#&.0½lYªˆ5¯¬´•ò´Ey<ž&çWcš\ž'“QÄÚÐ'˜Á“‚¡µ.sƒÙC°‡÷Ÿ£·2zñšÆá†]”áåèŠCLøí9h?¿˜€ÈoÆ¿/Žþ:úK³v'endstream endobj 84 0 obj<>/XObject<<>>>>/Annots 40 0 R>>endobj 85 0 obj<>stream xÚ¥VMsâ8½ó+ºæ”ÔcccLNK2d75_ì@fsÈEØ"hbK^Iáßï“ÌG ¦2;µ•*b#u«ß{ÝOüÓ‰(Ä_DÃ>Å)åU' B|³ÿøúG'NƒÒ~dTQ”%Á`ûVÒ¬] £ ÅþàðvX ‡Aâ"GD¶oûÅ$‰ƒÔE†Ñþm¿…¡_ŒâÁþÍ-^Í;½›„¢ˆæKŸfCš¾Üæù{f¢d‹’“dWœ$±¤yəᤖ4ºçóïºýõÌ‹³ùZÑ£fõJä¬D¤åzÉrnhÅž9±ºæLó‚T›Òä\r<1K ’^ßMgÄ ­yY4džî›Z«ï<·îÿ³(‹mb0„C?¼Ÿt¨ª8HK¥·ùdA9“´pß5xaöÒÅ÷nB¹ø¥“¬Û‡ ©càlem}Ùë=5µ ŒjtΑë‘’Û6nÇY×Çâ8öÐQï=M5jò‘¦Lò’ÎÞÝO§ï΀âQõ.ªöQÿ»øõzÔ«MÐHf6š7v¼gEYö^êº÷&’ÏMŵj )ˆ¤i)J°j.¨ÐâÙ?ØÆ*-X‰Gnó wÁ¹¤Šyß:[=–B>9mùÈ/N4<ÄüÄÜiqz¥Ë Äõ›¸n„de¹¹ ¨Jj-i2›¶‚áS‘QK»F{º^4mÍVíôÚ÷ÚØØ6ÆÍ×έÄ:ÁöËÒaÄ6ðTÕóÙQC:¢hËØA‹Ã zh_j®™ï ÙÆX^º3îÍ¡8æÄ ë0ˆÓ̇I?ÊŽG=¡$p”k¶1­ž à‘[7”“ºû|{ßƒÍ ÂX-JP¶;Íí­•1Zôž/(æ„’¼ÑšK[n¶üE3m]UÂ2Ö÷ÄëÃ.<Ѿœ¶?+qæx€fÚe®pr:„>24œŒí1ػڬ©*¦7oé†ÿZUÞqt°VŽ×S_)T&#ìY>>YÂZ@ÞôÚÓÆ*ù‹ð3Fеº»Ô‚ˢܴö¹ïèýñÛr¾ùˆ+®Ÿ¾ª§¹LxµEuÚÆ¯ÜmÁ¥i<Õm¨(…ÝÐZØ¡&㑽†´òº;Ŷ$_Ó’3‹D[œ{Â…cOÍAæn²,J |¥Ä–®=‹˜0Þ²÷¦’¯”+þZIËrû† 7H^)ín?œSyÎÎ<Šº½ó6 ˜ÿép­•—mðí!áfä¶L0ô4Û)C*šÜš£-I%…®Fä›}ï-Ѭ–ãúO޶ÿ©àvk¥Š ú„ö-æý0Sðw³ñîöö,ÿ1~@ÄÃ8¥ax´æœ¶ë¨ø}ç¹?1¤¯|É1áh–vcú#’o'“ DÎðcæX —k'þ¶eÇE%¤›ôVŠ..Xp\FíöПg…fKûpަͶi³~Œ"J‡YÅ>ùXÒØú³£–cßc— Üf>KwŽþ‹õ&HÉ Çæ¡ûf2ïüÕùÆÃendstream endobj 86 0 obj<>/XObject<<>>>>/Annots 53 0 R>>endobj 87 0 obj<>stream xÚ…SMoÚ@½ó+æ˜H±ã5Ƙޒ”4H¡uÃFê!—­=7ë]wwòï;kc’¨Š+x>üÞ|¼ù=bчÁ8õߢEaDžÓÏÃï4Ké·†dfGCª MfaJ¡qDq E)¥×À¼³3úÐ$‹ÂÄÆäìŒSh’t\m¨5N¡xÚru¡Öð¡k>º¼M1àkðÅN—mýðâl1ç·Á"ÏÏù/ÊKŽyÔnÀÆaL©g åÐ(t›J¹J=ÓƒvºÐò’…¬{¯ÇÞ¾xŸ?¨çq¯ ÚU`yøÇ¡*ý“P%4Ú8ñS"Tu#±Få„«´½·A¸Fó‚@ ÐøªÀ6ZK4°ÞªÂ§ Y¹Ã@m¹R”•(¯CöýÚƒuXC‰;”ºÁ„këX kE±ÙZ‹ÎYX(ë*·uèëäXl”–úy°Šû¹sbÈûAÜW »P“}³]]ø·7ŒMgs¼ƒý,°¦!÷ÛÆ£$ýw¹•®j¶¦Ñá$ ¥¨$Ìý¦-­ÈÂÓÙr±œ?C.Œ¾×Ÿ`‰e%€´ÿáOÙÿG¢n„²kê®o ‚î8Ï_Å;6¡“éIÆ,Œ“vF”X óbßEÐuÓ¬ßÒ®ýà¿.~¼ɪ]ÎÜ<æ«NÕ^2ÞR…a°õ¸ž…ô¦}Õ/Ÿ¹°XéµÛSž§Þ¨Æèr[8•”  ð[8²+mƒt;Rè^¡±a×XvlŒ±,Lf ât&Qv<Òo;4» ÷ýõ tëá‚%˜F3‘yogá8Nivÿ vÎGßGZ†ˆendstream endobj 88 0 obj<>endobj xref 0 89 0000000000 65535 f 0000000015 00000 n 0000000235 00000 n 0000001801 00000 n 0000001875 00000 n 0000001953 00000 n 0000002032 00000 n 0000002108 00000 n 0000002189 00000 n 0000002247 00000 n 0000008244 00000 n 0000014427 00000 n 0000014479 00000 n 0000014564 00000 n 0000014614 00000 n 0000014699 00000 n 0000014729 00000 n 0000014829 00000 n 0000014929 00000 n 0000015029 00000 n 0000015129 00000 n 0000015229 00000 n 0000015329 00000 n 0000015429 00000 n 0000015529 00000 n 0000015629 00000 n 0000015729 00000 n 0000015829 00000 n 0000015929 00000 n 0000016029 00000 n 0000016136 00000 n 0000016194 00000 n 0000016279 00000 n 0000016349 00000 n 0000016434 00000 n 0000016494 00000 n 0000016579 00000 n 0000016640 00000 n 0000016725 00000 n 0000016781 00000 n 0000016866 00000 n 0000016917 00000 n 0000016981 00000 n 0000017064 00000 n 0000017127 00000 n 0000017210 00000 n 0000017288 00000 n 0000017371 00000 n 0000017437 00000 n 0000017520 00000 n 0000017586 00000 n 0000017669 00000 n 0000017735 00000 n 0000017818 00000 n 0000017876 00000 n 0000017908 00000 n 0000017940 00000 n 0000018194 00000 n 0000018235 00000 n 0000018276 00000 n 0000018317 00000 n 0000018358 00000 n 0000018399 00000 n 0000018440 00000 n 0000018481 00000 n 0000018522 00000 n 0000018563 00000 n 0000018604 00000 n 0000018645 00000 n 0000018686 00000 n 0000018727 00000 n 0000018768 00000 n 0000018869 00000 n 0000019086 00000 n 0000032986 00000 n 0000033187 00000 n 0000038775 00000 n 0000038955 00000 n 0000040549 00000 n 0000040734 00000 n 0000042384 00000 n 0000042555 00000 n 0000043995 00000 n 0000044166 00000 n 0000045740 00000 n 0000045934 00000 n 0000047156 00000 n 0000047341 00000 n 0000048038 00000 n trailer <<03967269ac91dfa8703134cd01b1bd67>]>> startxref 48122 %%EOF -----------------------------1977426492562745908748943111-- cups-2.2.7/cgi-bin/printers.c000664 000765 000024 00000031736 13255074424 016507 0ustar00msweetstaff000000 000000 /* * Printer status CGI for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi-private.h" #include /* * Local functions... */ static void do_printer_op(http_t *http, const char *printer, ipp_op_t op, const char *title); static void show_all_printers(http_t *http, const char *username); static void show_printer(http_t *http, const char *printer); /* * 'main()' - Main entry for CGI. */ int /* O - Exit status */ main(void) { const char *printer; /* Printer name */ const char *user; /* Username */ http_t *http; /* Connection to the server */ ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* IPP attribute */ const char *op; /* Operation to perform, if any */ static const char *def_attrs[] = /* Attributes for default printer */ { "printer-name", "printer-uri-supported" }; /* * Get any form variables... */ cgiInitialize(); op = cgiGetVariable("OP"); /* * Set the web interface section... */ cgiSetVariable("SECTION", "printers"); cgiSetVariable("REFRESH_PAGE", ""); /* * See if we are displaying a printer or all printers... */ if ((printer = getenv("PATH_INFO")) != NULL) { printer ++; if (!*printer) printer = NULL; if (printer) cgiSetVariable("PRINTER_NAME", printer); } /* * See who is logged in... */ user = getenv("REMOTE_USER"); /* * Connect to the HTTP server... */ http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption()); /* * Get the default printer... */ if (!op || !cgiIsPOST()) { /* * Get the default destination... */ request = ippNewRequest(CUPS_GET_DEFAULT); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(def_attrs) / sizeof(def_attrs[0]), NULL, def_attrs); 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 url[HTTP_MAX_URI]; /* New URL */ cgiSetVariable("DEFAULT_URI", cgiRewriteURL(attr->values[0].string.text, url, sizeof(url), NULL)); } ippDelete(response); } /* * See if we need to show a list of printers or the status of a * single printer... */ if (!printer) show_all_printers(http, user); else show_printer(http, printer); } else if (printer) { if (!*op) { const char *server_port = getenv("SERVER_PORT"); /* Port number string */ int port = atoi(server_port ? server_port : "0"); /* Port number */ char uri[1024]; /* URL */ httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), getenv("HTTPS") ? "https" : "http", NULL, getenv("SERVER_NAME"), port, "/printers/%s", printer); printf("Location: %s\n\n", uri); } else if (!strcmp(op, "start-printer")) do_printer_op(http, printer, IPP_RESUME_PRINTER, cgiText(_("Resume Printer"))); else if (!strcmp(op, "stop-printer")) do_printer_op(http, printer, IPP_PAUSE_PRINTER, cgiText(_("Pause Printer"))); else if (!strcmp(op, "accept-jobs")) do_printer_op(http, printer, CUPS_ACCEPT_JOBS, cgiText(_("Accept Jobs"))); else if (!strcmp(op, "reject-jobs")) do_printer_op(http, printer, CUPS_REJECT_JOBS, cgiText(_("Reject Jobs"))); else if (!strcmp(op, "cancel-jobs")) do_printer_op(http, printer, IPP_OP_CANCEL_JOBS, cgiText(_("Cancel Jobs"))); else if (!_cups_strcasecmp(op, "print-self-test-page")) cgiPrintCommand(http, printer, "PrintSelfTestPage", cgiText(_("Print Self-Test Page"))); else if (!_cups_strcasecmp(op, "clean-print-heads")) cgiPrintCommand(http, printer, "Clean all", cgiText(_("Clean Print Heads"))); else if (!_cups_strcasecmp(op, "print-test-page")) cgiPrintTestPage(http, printer); else if (!_cups_strcasecmp(op, "move-jobs")) cgiMoveJobs(http, printer, 0); else { /* * Unknown/bad operation... */ cgiStartHTML(printer); cgiCopyTemplateLang("error-op.tmpl"); cgiEndHTML(); } } else { /* * Unknown/bad operation... */ cgiStartHTML(cgiText(_("Printers"))); cgiCopyTemplateLang("error-op.tmpl"); cgiEndHTML(); } /* * Close the HTTP server connection... */ httpClose(http); /* * Return with no errors... */ return (0); } /* * 'do_printer_op()' - Do a printer operation. */ static void do_printer_op(http_t *http, /* I - HTTP connection */ const char *printer, /* I - Printer name */ ipp_op_t op, /* I - Operation to perform */ const char *title) /* I - Title of page */ { ipp_t *request; /* IPP request */ char uri[HTTP_MAX_URI], /* Printer URI */ resource[HTTP_MAX_URI]; /* Path for request */ /* * Build a printer request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(op); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", printer); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); /* * Do the request and get back a response... */ snprintf(resource, sizeof(resource), "/printers/%s", printer); ippDelete(cupsDoRequest(http, request, resource)); if (cupsLastError() == IPP_NOT_AUTHORIZED) { puts("Status: 401\n"); exit(0); } else if (cupsLastError() > IPP_OK_CONFLICT) { cgiStartHTML(title); cgiShowIPPError(_("Unable to do maintenance command")); } else { /* * Redirect successful updates back to the printer page... */ char url[1024], /* Printer/class URL */ refresh[1024]; /* Refresh URL */ cgiRewriteURL(uri, url, sizeof(url), NULL); cgiFormEncode(uri, url, sizeof(uri)); snprintf(refresh, sizeof(refresh), "5;URL=%s", uri); cgiSetVariable("refresh_page", refresh); cgiStartHTML(title); if (op == IPP_PAUSE_PRINTER) cgiCopyTemplateLang("printer-stop.tmpl"); else if (op == IPP_RESUME_PRINTER) cgiCopyTemplateLang("printer-start.tmpl"); else if (op == CUPS_ACCEPT_JOBS) cgiCopyTemplateLang("printer-accept.tmpl"); else if (op == CUPS_REJECT_JOBS) cgiCopyTemplateLang("printer-reject.tmpl"); else if (op == IPP_OP_CANCEL_JOBS) cgiCopyTemplateLang("printer-cancel-jobs.tmpl"); } cgiEndHTML(); } /* * 'show_all_printers()' - Show all printers... */ static void show_all_printers(http_t *http, /* I - Connection to server */ const char *user) /* I - Username */ { int i; /* Looping var */ ipp_t *request, /* IPP request */ *response; /* IPP response */ cups_array_t *printers; /* Array of printer objects */ ipp_attribute_t *printer; /* Printer object */ int first, /* First printer to show */ count; /* Number of printers */ const char *var; /* Form variable */ void *search; /* Search data */ char val[1024]; /* Form variable */ fprintf(stderr, "DEBUG: show_all_printers(http=%p, user=\"%s\")\n", http, user ? user : "(null)"); /* * Show the standard header... */ cgiStartHTML(cgiText(_("Printers"))); /* * Build a CUPS_GET_PRINTERS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-type * printer-type-mask * requesting-user-name */ request = ippNewRequest(CUPS_GET_PRINTERS); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type", 0); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type-mask", CUPS_PRINTER_CLASS); if (user) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); cgiGetAttributes(request, "printers.tmpl"); /* * Do the request and get back a response... */ if ((response = cupsDoRequest(http, request, "/")) != NULL) { /* * Get a list of matching job objects. */ if ((var = cgiGetVariable("QUERY")) != NULL && !cgiGetVariable("CLEAR")) search = cgiCompileSearch(var); else search = NULL; printers = cgiGetIPPObjects(response, search); count = cupsArrayCount(printers); if (search) cgiFreeSearch(search); /* * Figure out which printers to display... */ if ((var = cgiGetVariable("FIRST")) != NULL) first = atoi(var); else first = 0; if (first >= count) first = count - CUPS_PAGE_MAX; first = (first / CUPS_PAGE_MAX) * CUPS_PAGE_MAX; if (first < 0) first = 0; sprintf(val, "%d", count); cgiSetVariable("TOTAL", val); for (i = 0, printer = (ipp_attribute_t *)cupsArrayIndex(printers, first); i < CUPS_PAGE_MAX && printer; i ++, printer = (ipp_attribute_t *)cupsArrayNext(printers)) cgiSetIPPObjectVars(printer, NULL, i); /* * Save navigation URLs... */ cgiSetVariable("THISURL", "/printers/"); if (first > 0) { sprintf(val, "%d", first - CUPS_PAGE_MAX); cgiSetVariable("PREV", val); } if ((first + CUPS_PAGE_MAX) < count) { sprintf(val, "%d", first + CUPS_PAGE_MAX); cgiSetVariable("NEXT", val); } if (count > CUPS_PAGE_MAX) { snprintf(val, sizeof(val), "%d", CUPS_PAGE_MAX * (count / CUPS_PAGE_MAX)); cgiSetVariable("LAST", val); } /* * Then show everything... */ cgiCopyTemplateLang("search.tmpl"); cgiCopyTemplateLang("printers-header.tmpl"); if (count > CUPS_PAGE_MAX) cgiCopyTemplateLang("pager.tmpl"); cgiCopyTemplateLang("printers.tmpl"); if (count > CUPS_PAGE_MAX) cgiCopyTemplateLang("pager.tmpl"); /* * Delete the response... */ cupsArrayDelete(printers); ippDelete(response); } else { /* * Show the error... */ cgiShowIPPError(_("Unable to get printer list")); } cgiEndHTML(); } /* * 'show_printer()' - Show a single printer. */ static void show_printer(http_t *http, /* I - Connection to server */ const char *printer) /* I - Name of printer */ { ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* IPP attribute */ char uri[HTTP_MAX_URI]; /* Printer URI */ char refresh[1024]; /* Refresh URL */ fprintf(stderr, "DEBUG: show_printer(http=%p, printer=\"%s\")\n", http, printer ? printer : "(null)"); /* * Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", printer); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); cgiGetAttributes(request, "printer.tmpl"); /* * Do the request and get back a response... */ if ((response = cupsDoRequest(http, request, "/")) != NULL) { /* * Got the result; set the CGI variables and check the status of a * single-queue request... */ cgiSetIPPVars(response, NULL, NULL, NULL, 0); if (printer && (attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL && attr->values[0].integer == IPP_PRINTER_PROCESSING) { /* * Printer is processing - automatically refresh the page until we * are done printing... */ cgiFormEncode(uri, printer, sizeof(uri)); snprintf(refresh, sizeof(refresh), "10;URL=/printers/%s", uri); cgiSetVariable("refresh_page", refresh); } /* * Delete the response... */ ippDelete(response); /* * Show the standard header... */ cgiStartHTML(printer); /* * Show the printer status... */ cgiCopyTemplateLang("printer.tmpl"); /* * Show jobs for the specified printer... */ cgiCopyTemplateLang("printer-jobs-header.tmpl"); cgiShowJobs(http, printer); } else { /* * Show the IPP error... */ cgiStartHTML(printer); cgiShowIPPError(_("Unable to get printer status")); } cgiEndHTML(); } cups-2.2.7/cgi-bin/search.c000664 000765 000024 00000014432 13255074424 016100 0ustar00msweetstaff000000 000000 /* * Search routines for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi-private.h" #include /* * 'cgiCompileSearch()' - Compile a search string. */ void * /* O - Search context */ cgiCompileSearch(const char *query) /* I - Query string */ { regex_t *re; /* Regular expression */ char *s, /* Regular expression string */ *sptr, /* Pointer into RE string */ *sword; /* Pointer to start of word */ size_t slen; /* Allocated size of RE string */ const char *qptr, /* Pointer into query string */ *qend; /* End of current word */ const char *prefix; /* Prefix to add to next word */ int quoted; /* Word is quoted */ size_t wlen; /* Word length */ char *lword; /* Last word in query */ DEBUG_printf(("cgiCompileSearch(query=\"%s\")\n", query)); /* * Range check input... */ if (!query) return (NULL); /* * Allocate a regular expression storage structure... */ if ((re = (regex_t *)calloc(1, sizeof(regex_t))) == NULL) return (NULL); /* * Allocate a buffer to hold the regular expression string, starting * at 1024 bytes or 3 times the length of the query string, whichever * is greater. We'll expand the string as needed... */ slen = strlen(query) * 3; if (slen < 1024) slen = 1024; if ((s = (char *)malloc(slen)) == NULL) { free(re); return (NULL); } /* * Copy the query string to the regular expression, handling basic * AND and OR logic... */ prefix = ".*"; qptr = query; sptr = s; lword = NULL; while (*qptr) { /* * Skip leading whitespace... */ while (isspace(*qptr & 255)) qptr ++; if (!*qptr) break; /* * Find the end of the current word... */ if (*qptr == '\"' || *qptr == '\'') { /* * Scan quoted string... */ quoted = *qptr ++; for (qend = qptr; *qend && *qend != quoted; qend ++); if (!*qend) { /* * No closing quote, error out! */ free(s); free(re); if (lword) free(lword); return (NULL); } } else { /* * Scan whitespace-delimited string... */ quoted = 0; for (qend = qptr + 1; *qend && !isspace(*qend); qend ++); } wlen = (size_t)(qend - qptr); /* * Look for logic words: AND, OR */ if (wlen == 3 && !_cups_strncasecmp(qptr, "AND", 3)) { /* * Logical AND with the following text... */ if (sptr > s) prefix = ".*"; qptr = qend; } else if (wlen == 2 && !_cups_strncasecmp(qptr, "OR", 2)) { /* * Logical OR with the following text... */ if (sptr > s) prefix = ".*|.*"; qptr = qend; } else { /* * Add a search word, making sure we have enough room for the * string + RE overhead... */ wlen = (size_t)(sptr - s) + 2 * 4 * wlen + 2 * strlen(prefix) + 11; if (lword) wlen += strlen(lword); if (wlen > slen) { /* * Expand the RE string buffer... */ char *temp; /* Temporary string pointer */ slen = wlen + 128; temp = (char *)realloc(s, slen); if (!temp) { free(s); free(re); if (lword) free(lword); return (NULL); } sptr = temp + (sptr - s); s = temp; } /* * Add the prefix string... */ memcpy(sptr, prefix, strlen(prefix) + 1); sptr += strlen(sptr); /* * Then quote the remaining word characters as needed for the * RE... */ sword = sptr; while (qptr < qend) { /* * Quote: ^ . [ $ ( ) | * + ? { \ */ if (strchr("^.[$()|*+?{\\", *qptr)) *sptr++ = '\\'; *sptr++ = *qptr++; } *sptr = '\0'; /* * For "word1 AND word2", add reciprocal "word2 AND word1"... */ if (!strcmp(prefix, ".*") && lword) { char *lword2; /* New "last word" */ if ((lword2 = strdup(sword)) == NULL) { free(lword); free(s); free(re); return (NULL); } memcpy(sptr, ".*|.*", 6); sptr += 5; memcpy(sptr, lword2, strlen(lword2) + 1); sptr += strlen(sptr); memcpy(sptr, ".*", 3); sptr += 2; memcpy(sptr, lword, strlen(lword) + 1); sptr += strlen(sptr); free(lword); lword = lword2; } else { if (lword) free(lword); lword = strdup(sword); } prefix = ".*|.*"; } /* * Advance to the next string... */ if (quoted) qptr ++; } if (lword) free(lword); if (sptr > s) memcpy(sptr, ".*", 3); else { /* * No query data, return NULL... */ free(s); free(re); return (NULL); } /* * Compile the regular expression... */ DEBUG_printf((" s=\"%s\"\n", s)); if (regcomp(re, s, REG_EXTENDED | REG_ICASE)) { free(re); free(s); return (NULL); } /* * Free the RE string and return the new regular expression we compiled... */ free(s); return ((void *)re); } /* * 'cgiDoSearch()' - Do a search of some text. */ int /* O - Number of matches */ cgiDoSearch(void *search, /* I - Search context */ const char *text) /* I - Text to search */ { int i; /* Looping var */ regmatch_t matches[100]; /* RE matches */ /* * Range check... */ if (!search || !text) return (0); /* * Do a lookup... */ if (!regexec((regex_t *)search, text, sizeof(matches) / sizeof(matches[0]), matches, 0)) { /* * Figure out the number of matches in the string... */ for (i = 0; i < (int)(sizeof(matches) / sizeof(matches[0])); i ++) if (matches[i].rm_so < 0) break; return (i); } else return (0); } /* * 'cgiFreeSearch()' - Free a compiled search context. */ void cgiFreeSearch(void *search) /* I - Search context */ { regfree((regex_t *)search); } cups-2.2.7/cgi-bin/template.c000664 000765 000024 00000035316 13255074424 016452 0ustar00msweetstaff000000 000000 /* * CGI template function. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ #include "cgi-private.h" #include #include /* * Local functions... */ static void cgi_copy(FILE *out, FILE *in, int element, char term, int indent); static void cgi_puts(const char *s, FILE *out); static void cgi_puturi(const char *s, FILE *out); /* * 'cgiCopyTemplateFile()' - Copy a template file and replace all the * '{variable}' strings with the variable value. */ void cgiCopyTemplateFile(FILE *out, /* I - Output file */ const char *tmpl) /* I - Template file to read */ { FILE *in; /* Input file */ fprintf(stderr, "DEBUG2: cgiCopyTemplateFile(out=%p, tmpl=\"%s\")\n", out, tmpl ? tmpl : "(null)"); /* * Range check input... */ if (!tmpl || !out) return; /* * Open the template file... */ if ((in = fopen(tmpl, "r")) == NULL) { fprintf(stderr, "ERROR: Unable to open template file \"%s\" - %s\n", tmpl ? tmpl : "(null)", strerror(errno)); return; } /* * Parse the file to the end... */ cgi_copy(out, in, 0, 0, 0); /* * Close the template file and return... */ fclose(in); } /* * 'cgiCopyTemplateLang()' - Copy a template file using a language... */ void cgiCopyTemplateLang(const char *tmpl) /* I - Base filename */ { char filename[1024], /* Filename */ locale[16], /* Locale name */ *locptr; /* Pointer into locale name */ const char *directory, /* Directory for templates */ *lang; /* Language */ FILE *in; /* Input file */ fprintf(stderr, "DEBUG2: cgiCopyTemplateLang(tmpl=\"%s\")\n", tmpl ? tmpl : "(null)"); /* * Convert the language to a locale name... */ locale[0] = '\0'; if ((lang = getenv("LANG")) != NULL) { locale[0] = '/'; strlcpy(locale + 1, lang, sizeof(locale) - 1); if ((locptr = strchr(locale, '.')) != NULL) *locptr = '\0'; /* Strip charset */ } fprintf(stderr, "DEBUG2: lang=\"%s\", locale=\"%s\"...\n", lang ? lang : "(null)", locale); /* * See if we have a template file for this language... */ directory = cgiGetTemplateDir(); snprintf(filename, sizeof(filename), "%s%s/%s", directory, locale, tmpl); if ((in = fopen(filename, "r")) == NULL) { locale[3] = '\0'; snprintf(filename, sizeof(filename), "%s%s/%s", directory, locale, tmpl); if ((in = fopen(filename, "r")) == NULL) { snprintf(filename, sizeof(filename), "%s/%s", directory, tmpl); in = fopen(filename, "r"); } } fprintf(stderr, "DEBUG2: Template file is \"%s\"...\n", filename); /* * Open the template file... */ if (!in) { fprintf(stderr, "ERROR: Unable to open template file \"%s\" - %s\n", filename, strerror(errno)); return; } /* * Parse the file to the end... */ cgi_copy(stdout, in, 0, 0, 0); /* * Close the template file and return... */ fclose(in); } /* * 'cgiGetTemplateDir()' - Get the templates directory... */ char * /* O - Template directory */ cgiGetTemplateDir(void) { const char *datadir; /* CUPS_DATADIR env var */ static char templates[1024] = ""; /* Template directory */ if (!templates[0]) { /* * Build the template directory pathname... */ if ((datadir = getenv("CUPS_DATADIR")) == NULL) datadir = CUPS_DATADIR; snprintf(templates, sizeof(templates), "%s/templates", datadir); } return (templates); } /* * 'cgiSetServerVersion()' - Set the server name and CUPS version... */ void cgiSetServerVersion(void) { cgiSetVariable("SERVER_NAME", getenv("SERVER_NAME")); cgiSetVariable("REMOTE_USER", getenv("REMOTE_USER")); cgiSetVariable("CUPS_VERSION", CUPS_SVERSION); #ifdef LC_TIME setlocale(LC_TIME, ""); #endif /* LC_TIME */ } /* * 'cgi_copy()' - Copy the template file, substituting as needed... */ static void cgi_copy(FILE *out, /* I - Output file */ FILE *in, /* I - Input file */ int element, /* I - Element number (0 to N) */ char term, /* I - Terminating character */ int indent) /* I - Debug info indentation */ { int ch; /* Character from file */ char op; /* Operation */ char name[255], /* Name of variable */ *nameptr, /* Pointer into name */ innername[255], /* Inner comparison name */ *innerptr, /* Pointer into inner name */ *s; /* String pointer */ const char *value; /* Value of variable */ const char *innerval; /* Inner value */ const char *outptr; /* Output string pointer */ char outval[1024], /* Formatted output string */ compare[1024]; /* Comparison string */ int result; /* Result of comparison */ int uriencode; /* Encode as URI */ regex_t re; /* Regular expression to match */ fprintf(stderr, "DEBUG2: %*sStarting at file position %ld...\n", indent, "", ftell(in)); /* * Parse the file to the end... */ while ((ch = getc(in)) != EOF) if (ch == term) break; else if (ch == '{') { /* * Get a variable name... */ uriencode = 0; for (s = name; (ch = getc(in)) != EOF;) if (strchr("}]<>=!~ \t\n", ch)) break; else if (s == name && ch == '%') uriencode = 1; else if (s > name && ch == '?') break; else if (s < (name + sizeof(name) - 1)) *s++ = (char)ch; *s = '\0'; if (s == name && isspace(ch & 255)) { fprintf(stderr, "DEBUG2: %*sLone { at %ld...\n", indent, "", ftell(in)); if (out) { putc('{', out); putc(ch, out); } continue; } if (ch == '}') fprintf(stderr, "DEBUG2: %*s\"{%s}\" at %ld...\n", indent, "", name, ftell(in)); /* * See if it has a value... */ if (name[0] == '?') { /* * Insert value only if it exists... */ if ((nameptr = strrchr(name, '-')) != NULL && isdigit(nameptr[1] & 255)) { *nameptr++ = '\0'; if ((value = cgiGetArray(name + 1, atoi(nameptr) - 1)) != NULL) outptr = value; else { outval[0] = '\0'; outptr = outval; } } else if ((value = cgiGetArray(name + 1, element)) != NULL) outptr = value; else { outval[0] = '\0'; outptr = outval; } } else if (name[0] == '#') { /* * Insert count... */ if (name[1]) sprintf(outval, "%d", cgiGetSize(name + 1)); else sprintf(outval, "%d", element + 1); outptr = outval; } else if (name[0] == '[') { /* * Loop for # of elements... */ int i; /* Looping var */ long pos; /* File position */ int count; /* Number of elements */ if (isdigit(name[1] & 255)) count = atoi(name + 1); else count = cgiGetSize(name + 1); pos = ftell(in); fprintf(stderr, "DEBUG2: %*sLooping on \"%s\" at %ld, count=%d...\n", indent, "", name + 1, pos, count); if (count > 0) { for (i = 0; i < count; i ++) { if (i) fseek(in, pos, SEEK_SET); cgi_copy(out, in, i, '}', indent + 2); } } else cgi_copy(NULL, in, 0, '}', indent + 2); fprintf(stderr, "DEBUG2: %*sFinished looping on \"%s\"...\n", indent, "", name + 1); continue; } else if (name[0] == '$') { /* * Insert cookie value or nothing if not defined. */ if ((value = cgiGetCookie(name + 1)) != NULL) outptr = value; else { outval[0] = '\0'; outptr = outval; } } else { /* * Insert variable or variable name (if element is NULL)... */ if ((nameptr = strrchr(name, '-')) != NULL && isdigit(nameptr[1] & 255)) { *nameptr++ = '\0'; if ((value = cgiGetArray(name, atoi(nameptr) - 1)) == NULL) { snprintf(outval, sizeof(outval), "{%s}", name); outptr = outval; } else outptr = value; } else if ((value = cgiGetArray(name, element)) == NULL) { snprintf(outval, sizeof(outval), "{%s}", name); outptr = outval; } else outptr = value; } /* * See if the terminating character requires another test... */ if (ch == '}') { /* * End of substitution... */ if (out) { if (uriencode) cgi_puturi(outptr, out); else if (!_cups_strcasecmp(name, "?cupsdconf_default")) fputs(outptr, stdout); else cgi_puts(outptr, out); } continue; } /* * OK, process one of the following checks: * * {name?exist:not-exist} Exists? * {name=value?true:false} Equal * {namevalue?true:false} Greater than * {name!value?true:false} Not equal * {name~refex?true:false} Regex match */ op = (char)ch; if (ch == '?') { /* * Test for existance... */ if (name[0] == '?') result = cgiGetArray(name + 1, element) != NULL; else if (name[0] == '#') result = cgiGetVariable(name + 1) != NULL; else result = cgiGetArray(name, element) != NULL; result = result && outptr[0]; compare[0] = '\0'; } else { /* * Compare to a string... */ 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); s += strlen(s); } else if (ch == '{') { /* * Grab the value of a variable... */ innerptr = innername; while ((ch = getc(in)) != EOF && ch != '}') if (innerptr < (innername + sizeof(innername) - 1)) *innerptr++ = (char)ch; *innerptr = '\0'; if (innername[0] == '#') sprintf(s, "%d", cgiGetSize(innername + 1)); else if ((innerptr = strrchr(innername, '-')) != NULL && isdigit(innerptr[1] & 255)) { *innerptr++ = '\0'; if ((innerval = cgiGetArray(innername, atoi(innerptr) - 1)) == NULL) *s = '\0'; else strlcpy(s, innerval, sizeof(compare) - (size_t)(s - compare)); } else if (innername[0] == '?') { if ((innerval = cgiGetArray(innername + 1, element)) == NULL) *s = '\0'; else strlcpy(s, innerval, sizeof(compare) - (size_t)(s - compare)); } else if ((innerval = cgiGetArray(innername, element)) == NULL) snprintf(s, sizeof(compare) - (size_t)(s - compare), "{%s}", innername); else strlcpy(s, innerval, sizeof(compare) - (size_t)(s - compare)); s += strlen(s); } else if (ch == '\\') *s++ = (char)getc(in); else *s++ = (char)ch; *s = '\0'; if (ch != '?') { fprintf(stderr, "DEBUG2: %*sBad terminator '%c' at file position %ld...\n", indent, "", ch, ftell(in)); return; } /* * Do the comparison... */ switch (op) { case '<' : result = _cups_strcasecmp(outptr, compare) < 0; break; case '>' : result = _cups_strcasecmp(outptr, compare) > 0; break; case '=' : result = _cups_strcasecmp(outptr, compare) == 0; break; case '!' : result = _cups_strcasecmp(outptr, compare) != 0; break; case '~' : fprintf(stderr, "DEBUG: Regular expression \"%s\"\n", compare); if (regcomp(&re, compare, REG_EXTENDED | REG_ICASE)) { fprintf(stderr, "ERROR: Unable to compile regular expression \"%s\"!\n", compare); result = 0; } else { regmatch_t matches[10]; result = 0; if (!regexec(&re, outptr, 10, matches, 0)) { int i; for (i = 0; i < 10; i ++) { fprintf(stderr, "DEBUG: matches[%d].rm_so=%d\n", i, (int)matches[i].rm_so); if (matches[i].rm_so < 0) break; result ++; } } regfree(&re); } break; default : result = 1; break; } } fprintf(stderr, "DEBUG2: %*sStarting \"{%s%c%s\" at %ld, result=%d...\n", indent, "", name, op, compare, ftell(in), result); if (result) { /* * Comparison true; output first part and ignore second... */ fprintf(stderr, "DEBUG2: %*sOutput first part...\n", indent, ""); cgi_copy(out, in, element, ':', indent + 2); fprintf(stderr, "DEBUG2: %*sSkip second part...\n", indent, ""); cgi_copy(NULL, in, element, '}', indent + 2); } else { /* * Comparison false; ignore first part and output second... */ fprintf(stderr, "DEBUG2: %*sSkip first part...\n", indent, ""); cgi_copy(NULL, in, element, ':', indent + 2); fprintf(stderr, "DEBUG2: %*sOutput second part...\n", indent, ""); cgi_copy(out, in, element, '}', indent + 2); } fprintf(stderr, "DEBUG2: %*sFinished \"{%s%c%s\", out=%p...\n", indent, "", name, op, compare, out); } else if (ch == '\\') /* Quoted char */ { if (out) putc(getc(in), out); else getc(in); } else if (out) putc(ch, out); if (ch == EOF) fprintf(stderr, "DEBUG2: %*sReturning at file position %ld on EOF...\n", indent, "", ftell(in)); else fprintf(stderr, "DEBUG2: %*sReturning at file position %ld on character '%c'...\n", indent, "", ftell(in), ch); if (ch == EOF && term) fprintf(stderr, "ERROR: %*sSaw EOF, expected '%c'!\n", indent, "", term); /* * Flush any pending output... */ if (out) fflush(out); } /* * 'cgi_puts()' - Put a string to the output file, quoting as needed... */ static void cgi_puts(const char *s, /* I - String to output */ FILE *out) /* I - Output file */ { while (*s) { if (*s == '<') fputs("<", out); else if (*s == '>') fputs(">", out); else if (*s == '\"') fputs(""", out); else if (*s == '\'') fputs("'", out); else if (*s == '&') fputs("&", out); else putc(*s, out); s ++; } } /* * 'cgi_puturi()' - Put a URI string to the output file, quoting as needed... */ static void cgi_puturi(const char *s, /* I - String to output */ FILE *out) /* I - Output file */ { while (*s) { if (strchr("%@&+ <>#=", *s) || *s < ' ' || *s & 128) fprintf(out, "%%%02X", *s & 255); else putc(*s, out); s ++; } } cups-2.2.7/cgi-bin/testcgi.c000664 000765 000024 00000002564 13255074424 016300 0ustar00msweetstaff000000 000000 /* * CGI test program for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi.h" /* * 'main()' - Test the CGI code. */ int /* O - Exit status */ main(void) { /* * Test file upload/multi-part submissions... */ freopen("multipart.dat", "rb", stdin); putenv("CONTENT_TYPE=multipart/form-data; " "boundary=---------------------------1977426492562745908748943111"); putenv("REQUEST_METHOD=POST"); printf("cgiInitialize: "); if (cgiInitialize()) { const cgi_file_t *file; /* Upload file */ if ((file = cgiGetFile()) != NULL) { puts("PASS"); printf(" tempfile=\"%s\"\n", file->tempfile); printf(" name=\"%s\"\n", file->name); printf(" filename=\"%s\"\n", file->filename); printf(" mimetype=\"%s\"\n", file->mimetype); } else puts("FAIL (no file!)"); } else puts("FAIL (init)"); /* * Return with no errors... */ return (0); } cups-2.2.7/cgi-bin/testhi.c000664 000765 000024 00000004064 13255074424 016133 0ustar00msweetstaff000000 000000 /* * Help index test program for CUPS. * * Copyright 2007-2011 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi.h" /* * Local functions... */ static void list_nodes(const char *title, cups_array_t *nodes); /* * 'main()' - Test the help index code. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { help_index_t *hi, /* Help index */ *search; /* Search index */ /* * Load the help index... */ hi = helpLoadIndex("testhi.index", "."); list_nodes("nodes", hi->nodes); list_nodes("sorted", hi->sorted); /* * Do any searches... */ if (argc > 1) { search = helpSearchIndex(hi, argv[1], NULL, argv[2]); if (search) { list_nodes(argv[1], search->sorted); helpDeleteIndex(search); } else printf("%s (0 nodes)\n", argv[1]); } helpDeleteIndex(hi); /* * Return with no errors... */ return (0); } /* * 'list_nodes()' - List nodes in an array... */ static void list_nodes(const char *title, /* I - Title string */ cups_array_t *nodes) /* I - Nodes */ { int i; /* Looping var */ help_node_t *node; /* Current node */ printf("%s (%d nodes):\n", title, cupsArrayCount(nodes)); for (i = 1, node = (help_node_t *)cupsArrayFirst(nodes); node; i ++, node = (help_node_t *)cupsArrayNext(nodes)) { if (node->anchor) printf(" %d: %s#%s \"%s\"", i, node->filename, node->anchor, node->text); else printf(" %d: %s \"%s\"", i, node->filename, node->text); printf(" (%d words)\n", cupsArrayCount(node->words)); } } cups-2.2.7/cgi-bin/testhi.html000664 000765 000024 00000001453 13255074424 016654 0ustar00msweetstaff000000 000000 Test File for Help Index Code

    This is a test file for the help index code. The help index code reads plain HTML and indexes the title and any anchored text, ignoring all other markup. Anchor tags must be on a single line, although the text they wrap may cross multiple lines and be up to 1024 bytes in length.

    This is the First Anchor

    This is some text for the first anchor.

    This is the Second Anchor

    This is some text for the first anchor.

    John asked Mary to the dance.

    This is the Third Anchor

    This is some text for the third anchor. This is an in-line anchor that crosses a line.

    cups-2.2.7/cgi-bin/testtemplate.c000664 000765 000024 00000003424 13255074424 017345 0ustar00msweetstaff000000 000000 /* * CGI template test program for CUPS. * * Copyright 2007-2011 by Apple Inc. * Copyright 2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include "cgi.h" /* * 'main()' - Test the template code. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ char *value; /* Value in name=value */ FILE *out; /* Where to send output */ /* * Don't buffer stdout or stderr so that the mixed output is sane... */ setbuf(stdout, NULL); setbuf(stderr, NULL); /* * Loop through the command-line, assigning variables for any args with * "name=value"... */ out = stdout; for (i = 1; i < argc; i ++) { if (!strcmp(argv[i], "-o")) { i ++; if (i < argc) { out = fopen(argv[i], "w"); if (!out) { perror(argv[i]); return (1); } } } else if (!strcmp(argv[i], "-e")) { i ++; if (i < argc) { if (!freopen(argv[i], "w", stderr)) { perror(argv[i]); return (1); } } } else if (!strcmp(argv[i], "-q")) freopen("/dev/null", "w", stderr); else if ((value = strchr(argv[i], '=')) != NULL) { *value++ = '\0'; cgiSetVariable(argv[i], value); } else cgiCopyTemplateFile(out, argv[i]); } /* * Return with no errors... */ return (0); } cups-2.2.7/cgi-bin/var.c000664 000765 000024 00000065460 13255074424 015432 0ustar00msweetstaff000000 000000 /* * CGI form variable and array functions for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ /*#define DEBUG*/ #include "cgi-private.h" #include /* * Session ID name */ #define CUPS_SID "org.cups.sid" /* * Data structure to hold all the CGI form variables and arrays... */ typedef struct /**** Form variable structure ****/ { const char *name; /* Name of variable */ int nvalues, /* Number of values */ avalues; /* Number of values allocated */ const char **values; /* Value(s) of variable */ } _cgi_var_t; /* * Local globals... */ static int num_cookies = 0;/* Number of cookies */ static cups_option_t *cookies = NULL;/* Cookies */ static int form_count = 0, /* Form variable count */ form_alloc = 0; /* Number of variables allocated */ static _cgi_var_t *form_vars = NULL; /* Form variables */ static cgi_file_t *form_file = NULL; /* Uploaded file */ /* * Local functions... */ static void cgi_add_variable(const char *name, int element, const char *value); static int cgi_compare_variables(const _cgi_var_t *v1, const _cgi_var_t *v2); static _cgi_var_t *cgi_find_variable(const char *name); static void cgi_initialize_cookies(void); static int cgi_initialize_get(void); static int cgi_initialize_multipart(const char *boundary); static int cgi_initialize_post(void); static int cgi_initialize_string(const char *data); static const char *cgi_passwd(const char *prompt); static const char *cgi_set_sid(void); static void cgi_sort_variables(void); static void cgi_unlink_file(void); /* * 'cgiCheckVariables()' - Check for the presence of "required" variables. * * Names may be separated by spaces and/or commas. */ int /* O - 1 if all variables present, 0 otherwise */ cgiCheckVariables(const char *names) /* I - Variables to look for */ { char name[255], /* Current variable name */ *s; /* Pointer in string */ const char *val; /* Value of variable */ int element; /* Array element number */ if (names == NULL) return (1); while (*names != '\0') { while (*names == ' ' || *names == ',') names ++; for (s = name; *names != '\0' && *names != ' ' && *names != ','; s ++, names ++) *s = *names; *s = 0; if (name[0] == '\0') break; if ((s = strrchr(name, '-')) != NULL) { *s = '\0'; element = atoi(s + 1) - 1; val = cgiGetArray(name, element); } else val = cgiGetVariable(name); if (val == NULL) return (0); if (*val == '\0') return (0); /* Can't be blank, either! */ } return (1); } /* * 'cgiClearVariables()' - Clear all form variables. */ void cgiClearVariables(void) { int i, j; /* Looping vars */ _cgi_var_t *v; /* Current variable */ fputs("DEBUG: cgiClearVariables called.\n", stderr); for (v = form_vars, i = form_count; i > 0; v ++, i --) { _cupsStrFree(v->name); for (j = 0; j < v->nvalues; j ++) if (v->values[j]) _cupsStrFree(v->values[j]); } form_count = 0; cgi_unlink_file(); } /* * 'cgiGetArray()' - Get an element from a form array. */ const char * /* O - Element value or NULL */ cgiGetArray(const char *name, /* I - Name of array variable */ int element) /* I - Element number (0 to N) */ { _cgi_var_t *var; /* Pointer to variable */ if ((var = cgi_find_variable(name)) == NULL) return (NULL); if (element < 0 || element >= var->nvalues) return (NULL); return (_cupsStrRetain(var->values[element])); } /* * 'cgiGetCookie()' - Get a cookie value. */ const char * /* O - Value or NULL */ cgiGetCookie(const char *name) /* I - Name of cookie */ { return (cupsGetOption(name, num_cookies, cookies)); } /* * 'cgiGetFile()' - Get the file (if any) that was submitted in the form. */ const cgi_file_t * /* O - Attached file or NULL */ cgiGetFile(void) { return (form_file); } /* * 'cgiGetSize()' - Get the size of a form array value. */ int /* O - Number of elements */ cgiGetSize(const char *name) /* I - Name of variable */ { _cgi_var_t *var; /* Pointer to variable */ if ((var = cgi_find_variable(name)) == NULL) return (0); return (var->nvalues); } /* * 'cgiGetVariable()' - Get a CGI variable from the database. * * Returns NULL if the variable doesn't exist. If the variable is an * array of values, returns the last element. */ const char * /* O - Value of variable */ cgiGetVariable(const char *name) /* I - Name of variable */ { const _cgi_var_t *var; /* Returned variable */ var = cgi_find_variable(name); #ifdef DEBUG if (var == NULL) DEBUG_printf(("cgiGetVariable(\"%s\") is returning NULL...\n", name)); else DEBUG_printf(("cgiGetVariable(\"%s\") is returning \"%s\"...\n", name, var->values[var->nvalues - 1])); #endif /* DEBUG */ return ((var == NULL) ? NULL : _cupsStrRetain(var->values[var->nvalues - 1])); } /* * 'cgiInitialize()' - Initialize the CGI variable "database". */ int /* O - Non-zero if there was form data */ cgiInitialize(void) { const char *method, /* Form posting method */ *content_type, /* Content-Type of post data */ *cups_sid_cookie, /* SID cookie */ *cups_sid_form; /* SID form variable */ /* * Setup a password callback for authentication... */ cupsSetPasswordCB(cgi_passwd); /* * Set the locale so that times, etc. are formatted properly... */ setlocale(LC_ALL, ""); #ifdef DEBUG /* * Disable output buffering to find bugs... */ setbuf(stdout, NULL); #endif /* DEBUG */ /* * Get cookies... */ cgi_initialize_cookies(); if ((cups_sid_cookie = cgiGetCookie(CUPS_SID)) == NULL) { fputs("DEBUG: " CUPS_SID " cookie not found, initializing!\n", stderr); cups_sid_cookie = cgi_set_sid(); } fprintf(stderr, "DEBUG: " CUPS_SID " cookie is \"%s\"\n", cups_sid_cookie); /* * Get the request method (GET or POST)... */ method = getenv("REQUEST_METHOD"); content_type = getenv("CONTENT_TYPE"); if (!method) return (0); /* * Grab form data from the corresponding location... */ if (!_cups_strcasecmp(method, "GET")) return (cgi_initialize_get()); else if (!_cups_strcasecmp(method, "POST") && content_type) { const char *boundary = strstr(content_type, "boundary="); if (boundary) boundary += 9; if (content_type && !strncmp(content_type, "multipart/form-data; ", 21)) { if (!cgi_initialize_multipart(boundary)) return (0); } else if (!cgi_initialize_post()) return (0); if ((cups_sid_form = cgiGetVariable(CUPS_SID)) == NULL || strcmp(cups_sid_cookie, cups_sid_form)) { if (cups_sid_form) fprintf(stderr, "DEBUG: " CUPS_SID " form variable is \"%s\"\n", cups_sid_form); else fputs("DEBUG: " CUPS_SID " form variable is not present.\n", stderr); cgiClearVariables(); return (0); } else return (1); } else return (0); } /* * 'cgiIsPOST()' - Determine whether this page was POSTed. */ int /* O - 1 if POST, 0 if GET */ cgiIsPOST(void) { const char *method; /* REQUEST_METHOD environment variable */ if ((method = getenv("REQUEST_METHOD")) == NULL) return (0); else return (!strcmp(method, "POST")); } /* * 'cgiSetArray()' - Set array element N to the specified string. * * If the variable array is smaller than (element + 1), the intervening * elements are set to NULL. */ void cgiSetArray(const char *name, /* I - Name of variable */ int element, /* I - Element number (0 to N) */ const char *value) /* I - Value of variable */ { int i; /* Looping var */ _cgi_var_t *var; /* Returned variable */ if (name == NULL || value == NULL || element < 0 || element > 100000) return; fprintf(stderr, "DEBUG: cgiSetArray: %s[%d]=\"%s\"\n", name, element, value); if ((var = cgi_find_variable(name)) == NULL) { cgi_add_variable(name, element, value); cgi_sort_variables(); } else { if (element >= var->avalues) { const char **temp; /* Temporary pointer */ temp = (const char **)realloc((void *)(var->values), sizeof(char *) * (size_t)(element + 16)); if (!temp) return; var->avalues = element + 16; var->values = temp; } if (element >= var->nvalues) { for (i = var->nvalues; i < element; i ++) var->values[i] = NULL; var->nvalues = element + 1; } else if (var->values[element]) _cupsStrFree((char *)var->values[element]); var->values[element] = _cupsStrAlloc(value); } } /* * 'cgiSetCookie()' - Set a cookie value. */ void cgiSetCookie(const char *name, /* I - Name */ const char *value, /* I - Value */ const char *path, /* I - Path (typically "/") */ const char *domain, /* I - Domain name */ time_t expires, /* I - Expiration date (0 for session) */ int secure) /* I - Require SSL */ { num_cookies = cupsAddOption(name, value, num_cookies, &cookies); printf("Set-Cookie: %s=%s;", name, value); if (path) printf(" path=%s;", path); if (domain) printf(" domain=%s;", domain); if (expires) { char date[256]; /* Date string */ printf(" expires=%s;", httpGetDateString2(expires, date, sizeof(date))); } if (secure) puts(" httponly; secure;"); else puts(" httponly;"); } /* * 'cgiSetSize()' - Set the array size. */ void cgiSetSize(const char *name, /* I - Name of variable */ int size) /* I - Number of elements (0 to N) */ { int i; /* Looping var */ _cgi_var_t *var; /* Returned variable */ if (name == NULL || size < 0 || size > 100000) return; if ((var = cgi_find_variable(name)) == NULL) return; if (size >= var->avalues) { const char **temp; /* Temporary pointer */ temp = (const char **)realloc((void *)(var->values), sizeof(char *) * (size_t)(size + 16)); if (!temp) return; var->avalues = size + 16; var->values = temp; } if (size > var->nvalues) { for (i = var->nvalues; i < size; i ++) var->values[i] = NULL; } else if (size < var->nvalues) { for (i = size; i < var->nvalues; i ++) if (var->values[i]) _cupsStrFree((void *)(var->values[i])); } var->nvalues = size; } /* * 'cgiSetVariable()' - Set a CGI variable in the database. * * If the variable is an array, this truncates the array to a single element. */ void cgiSetVariable(const char *name, /* I - Name of variable */ const char *value) /* I - Value of variable */ { int i; /* Looping var */ _cgi_var_t *var; /* Returned variable */ if (name == NULL || value == NULL) return; fprintf(stderr, "cgiSetVariable: %s=\"%s\"\n", name, value); if ((var = cgi_find_variable(name)) == NULL) { cgi_add_variable(name, 0, value); cgi_sort_variables(); } else { for (i = 0; i < var->nvalues; i ++) if (var->values[i]) _cupsStrFree((char *)var->values[i]); var->values[0] = _cupsStrAlloc(value); var->nvalues = 1; } } /* * 'cgi_add_variable()' - Add a form variable. */ static void cgi_add_variable(const char *name, /* I - Variable name */ int element, /* I - Array element number */ const char *value) /* I - Variable value */ { _cgi_var_t *var; /* New variable */ if (name == NULL || value == NULL || element < 0 || element > 100000) return; DEBUG_printf(("cgi_add_variable: Adding variable \'%s\' with value " "\'%s\'...\n", name, value)); if (form_count >= form_alloc) { _cgi_var_t *temp_vars; /* Temporary form pointer */ if (form_alloc == 0) temp_vars = malloc(sizeof(_cgi_var_t) * 16); else temp_vars = realloc(form_vars, (size_t)(form_alloc + 16) * sizeof(_cgi_var_t)); if (!temp_vars) return; form_vars = temp_vars; form_alloc += 16; } var = form_vars + form_count; if ((var->values = calloc((size_t)element + 1, sizeof(char *))) == NULL) return; var->name = _cupsStrAlloc(name); var->nvalues = element + 1; var->avalues = element + 1; var->values[element] = _cupsStrAlloc(value); form_count ++; } /* * 'cgi_compare_variables()' - Compare two variables. */ static int /* O - Result of comparison */ cgi_compare_variables( const _cgi_var_t *v1, /* I - First variable */ const _cgi_var_t *v2) /* I - Second variable */ { return (_cups_strcasecmp(v1->name, v2->name)); } /* * 'cgi_find_variable()' - Find a variable. */ static _cgi_var_t * /* O - Variable pointer or NULL */ cgi_find_variable(const char *name) /* I - Name of variable */ { _cgi_var_t key; /* Search key */ if (form_count < 1 || name == NULL) return (NULL); key.name = name; return ((_cgi_var_t *)bsearch(&key, form_vars, (size_t)form_count, sizeof(_cgi_var_t), (int (*)(const void *, const void *))cgi_compare_variables)); } /* * 'cgi_initialize_cookies()' - Initialize cookies. */ static void cgi_initialize_cookies(void) { const char *cookie; /* HTTP_COOKIE environment variable */ char name[128], /* Name string */ value[512], /* Value string */ *ptr; /* Pointer into name/value */ if ((cookie = getenv("HTTP_COOKIE")) == NULL) return; while (*cookie) { int skip = 0; /* Skip this cookie? */ /* * Skip leading whitespace... */ while (isspace(*cookie & 255)) cookie ++; if (!*cookie) break; /* * Copy the name... */ for (ptr = name; *cookie && *cookie != '=';) if (ptr < (name + sizeof(name) - 1)) { *ptr++ = *cookie++; } else { skip = 1; cookie ++; } if (*cookie != '=') break; *ptr = '\0'; cookie ++; /* * Then the value... */ if (*cookie == '\"') { for (cookie ++, ptr = value; *cookie && *cookie != '\"';) if (ptr < (value + sizeof(value) - 1)) { *ptr++ = *cookie++; } else { skip = 1; cookie ++; } if (*cookie == '\"') cookie ++; else skip = 1; } else { for (ptr = value; *cookie && *cookie != ';';) if (ptr < (value + sizeof(value) - 1)) { *ptr++ = *cookie++; } else { skip = 1; cookie ++; } } if (*cookie == ';') cookie ++; else if (*cookie) skip = 1; *ptr = '\0'; /* * Then add the cookie to an array as long as the name doesn't start with * "$"... */ if (name[0] != '$' && !skip) num_cookies = cupsAddOption(name, value, num_cookies, &cookies); } } /* * 'cgi_initialize_get()' - Initialize form variables using the GET method. */ static int /* O - 1 if form data read */ cgi_initialize_get(void) { char *data; /* Pointer to form data string */ DEBUG_puts("cgi_initialize_get: Initializing variables using GET method..."); /* * Check to see if there is anything for us to read... */ data = getenv("QUERY_STRING"); if (data == NULL || strlen(data) == 0) return (0); /* * Parse it out and return... */ return (cgi_initialize_string(data)); } /* * 'cgi_initialize_multipart()' - Initialize variables and file using the POST * method. * * TODO: Update to support files > 2GB. */ static int /* O - 1 if form data was read */ cgi_initialize_multipart( const char *boundary) /* I - Boundary string */ { char line[10240], /* MIME header line */ name[1024], /* Form variable name */ filename[1024], /* Form filename */ mimetype[1024], /* MIME media type */ bstring[256], /* Boundary string to look for */ *ptr, /* Pointer into name/filename */ *end; /* End of buffer */ int ch, /* Character from file */ fd; /* Temporary file descriptor */ size_t blen; /* Length of boundary string */ DEBUG_printf(("cgi_initialize_multipart(boundary=\"%s\")\n", boundary)); /* * Read multipart form data until we run out... */ name[0] = '\0'; filename[0] = '\0'; mimetype[0] = '\0'; snprintf(bstring, sizeof(bstring), "\r\n--%s", boundary); blen = strlen(bstring); while (fgets(line, sizeof(line), stdin)) { if (!strcmp(line, "\r\n")) { /* * End of headers, grab value... */ if (filename[0]) { /* * Read an embedded file... */ if (form_file) { /* * Remove previous file... */ cgi_unlink_file(); } /* * Allocate memory for the new file... */ if ((form_file = calloc(1, sizeof(cgi_file_t))) == NULL) return (0); form_file->name = strdup(name); form_file->filename = strdup(filename); form_file->mimetype = strdup(mimetype); fd = cupsTempFd(form_file->tempfile, sizeof(form_file->tempfile)); if (fd < 0) return (0); atexit(cgi_unlink_file); /* * Copy file data to the temp file... */ ptr = line; while ((ch = getchar()) != EOF) { *ptr++ = (char)ch; if ((size_t)(ptr - line) >= blen && !memcmp(ptr - blen, bstring, blen)) { ptr -= blen; break; } if ((ptr - line - (int)blen) >= 8192) { /* * Write out the first 8k of the buffer... */ write(fd, line, 8192); memmove(line, line + 8192, (size_t)(ptr - line - 8192)); ptr -= 8192; } } /* * Write the rest of the data and close the temp file... */ if (ptr > line) write(fd, line, (size_t)(ptr - line)); close(fd); } else { /* * Just get a form variable; the current code only handles * form values up to 10k in size... */ ptr = line; end = line + sizeof(line) - 1; while ((ch = getchar()) != EOF) { if (ptr < end) *ptr++ = (char)ch; if ((size_t)(ptr - line) >= blen && !memcmp(ptr - blen, bstring, blen)) { ptr -= blen; break; } } *ptr = '\0'; /* * Set the form variable... */ if ((ptr = strrchr(name, '-')) != NULL && isdigit(ptr[1] & 255)) { /* * Set a specific index in the array... */ *ptr++ = '\0'; if (line[0]) cgiSetArray(name, atoi(ptr) - 1, line); } else if (cgiGetVariable(name)) { /* * Add another element in the array... */ cgiSetArray(name, cgiGetSize(name), line); } else { /* * Just set the line... */ cgiSetVariable(name, line); } } /* * Read the rest of the current line... */ fgets(line, sizeof(line), stdin); /* * Clear the state vars... */ name[0] = '\0'; filename[0] = '\0'; mimetype[0] = '\0'; } else if (!_cups_strncasecmp(line, "Content-Disposition:", 20)) { if ((ptr = strstr(line + 20, " name=\"")) != NULL) { strlcpy(name, ptr + 7, sizeof(name)); if ((ptr = strchr(name, '\"')) != NULL) *ptr = '\0'; } if ((ptr = strstr(line + 20, " filename=\"")) != NULL) { strlcpy(filename, ptr + 11, sizeof(filename)); if ((ptr = strchr(filename, '\"')) != NULL) *ptr = '\0'; } } else if (!_cups_strncasecmp(line, "Content-Type:", 13)) { for (ptr = line + 13; isspace(*ptr & 255); ptr ++); strlcpy(mimetype, ptr, sizeof(mimetype)); for (ptr = mimetype + strlen(mimetype) - 1; ptr > mimetype && isspace(*ptr & 255); *ptr-- = '\0'); } } /* * Return 1 for "form data found"... */ return (1); } /* * 'cgi_initialize_post()' - Initialize variables using the POST method. */ static int /* O - 1 if form data was read */ cgi_initialize_post(void) { char *content_length, /* Length of input data (string) */ *data; /* Pointer to form data string */ size_t length, /* Length of input data */ tbytes; /* Total number of bytes read */ ssize_t nbytes; /* Number of bytes read this read() */ int status; /* Return status */ DEBUG_puts("cgi_initialize_post: Initializing variables using POST method..."); /* * Check to see if there is anything for us to read... */ content_length = getenv("CONTENT_LENGTH"); if (content_length == NULL || atoi(content_length) <= 0) return (0); /* * Get the length of the input stream and allocate a buffer for it... */ length = (size_t)strtol(content_length, NULL, 10); data = malloc(length + 1); if (data == NULL) return (0); /* * Read the data into the buffer... */ for (tbytes = 0; tbytes < length; tbytes += (size_t)nbytes) if ((nbytes = read(0, data + tbytes, (size_t)(length - tbytes))) < 0) { if (errno != EAGAIN) { free(data); return (0); } else nbytes = 0; } else if (nbytes == 0) { /* * CUPS STR #3176: OpenBSD: Early end-of-file on POST data causes 100% CPU * * This should never happen, but does on OpenBSD. If we see early end-of- * file, treat this as an error and process no data. */ free(data); return (0); } data[length] = '\0'; /* * Parse it out... */ status = cgi_initialize_string(data); /* * Free the data and return... */ free(data); return (status); } /* * 'cgi_initialize_string()' - Initialize form variables from a string. */ static int /* O - 1 if form data was processed */ cgi_initialize_string(const char *data) /* I - Form data string */ { int done; /* True if we're done reading a form variable */ char *s, /* Pointer to current form string */ ch, /* Temporary character */ name[255], /* Name of form variable */ value[65536]; /* Variable value */ /* * Check input... */ if (data == NULL) return (0); /* * Loop until we've read all the form data... */ while (*data != '\0') { /* * Get the variable name... */ for (s = name; *data != '\0'; data ++) if (*data == '=') break; else if (*data >= ' ' && s < (name + sizeof(name) - 1)) *s++ = *data; *s = '\0'; if (*data == '=') data ++; else return (0); /* * Read the variable value... */ for (s = value, done = 0; !done && *data != '\0'; data ++) switch (*data) { case '&' : /* End of data... */ done = 1; break; case '+' : /* Escaped space character */ if (s < (value + sizeof(value) - 1)) *s++ = ' '; break; case '%' : /* Escaped control character */ /* * Read the hex code... */ if (!isxdigit(data[1] & 255) || !isxdigit(data[2] & 255)) return (0); if (s < (value + sizeof(value) - 1)) { data ++; ch = *data - '0'; if (ch > 9) ch -= 7; *s = (char)(ch << 4); data ++; ch = *data - '0'; if (ch > 9) ch -= 7; *s++ |= ch; } else data += 2; break; default : /* Other characters come straight through */ if (*data >= ' ' && s < (value + sizeof(value) - 1)) *s++ = *data; break; } *s = '\0'; /* nul terminate the string */ /* * Remove trailing whitespace... */ if (s > value) s --; while (s >= value && isspace(*s & 255)) *s-- = '\0'; /* * Add the string to the variable "database"... */ if ((s = strrchr(name, '-')) != NULL && isdigit(s[1] & 255)) { *s++ = '\0'; if (value[0]) cgiSetArray(name, atoi(s) - 1, value); } else if (cgiGetVariable(name) != NULL) cgiSetArray(name, cgiGetSize(name), value); else cgiSetVariable(name, value); } return (1); } /* * 'cgi_passwd()' - Catch authentication requests and notify the server. * * This function sends a Status header and exits, forcing authentication * for this request. */ static const char * /* O - NULL (no return) */ cgi_passwd(const char *prompt) /* I - Prompt (not used) */ { (void)prompt; fprintf(stderr, "DEBUG: cgi_passwd(prompt=\"%s\") called!\n", prompt ? prompt : "(null)"); /* * Send a 401 (unauthorized) status to the server, so it can notify * the client that authentication is required. */ puts("Status: 401\n"); exit(0); /* * This code is never executed, but is present to satisfy the compiler. */ return (NULL); } /* * 'cgi_set_sid()' - Set the CUPS session ID. */ static const char * /* O - New session ID */ cgi_set_sid(void) { char buffer[512], /* SID data */ sid[33]; /* SID string */ unsigned char sum[16]; /* MD5 sum */ const char *remote_addr, /* REMOTE_ADDR */ *server_name, /* SERVER_NAME */ *server_port; /* SERVER_PORT */ if ((remote_addr = getenv("REMOTE_ADDR")) == NULL) remote_addr = "REMOTE_ADDR"; if ((server_name = getenv("SERVER_NAME")) == NULL) server_name = "SERVER_NAME"; if ((server_port = getenv("SERVER_PORT")) == NULL) server_port = "SERVER_PORT"; CUPS_SRAND(time(NULL)); snprintf(buffer, sizeof(buffer), "%s:%s:%s:%02X%02X%02X%02X%02X%02X%02X%02X", remote_addr, server_name, server_port, (unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255, (unsigned)CUPS_RAND() & 255); cupsHashData("md5", (unsigned char *)buffer, strlen(buffer), sum, sizeof(sum)); cgiSetCookie(CUPS_SID, cupsHashString(sum, sizeof(sum), sid, sizeof(sid)), "/", NULL, 0, 0); return (cupsGetOption(CUPS_SID, num_cookies, cookies)); } /* * 'cgi_sort_variables()' - Sort all form variables for faster lookup. */ static void cgi_sort_variables(void) { #ifdef DEBUG int i; DEBUG_puts("cgi_sort_variables: Sorting variables..."); #endif /* DEBUG */ if (form_count < 2) return; qsort(form_vars, (size_t)form_count, sizeof(_cgi_var_t), (int (*)(const void *, const void *))cgi_compare_variables); #ifdef DEBUG DEBUG_puts("cgi_sort_variables: Sorted variable list is:"); for (i = 0; i < form_count; i ++) DEBUG_printf(("cgi_sort_variables: %d: %s (%d) = \"%s\" ...\n", i, form_vars[i].name, form_vars[i].nvalues, form_vars[i].values[0])); #endif /* DEBUG */ } /* * 'cgi_unlink_file()' - Remove the uploaded form. */ static void cgi_unlink_file(void) { if (form_file) { /* * Remove the temporary file... */ unlink(form_file->tempfile); /* * Free memory used... */ free(form_file->name); free(form_file->filename); free(form_file->mimetype); free(form_file); form_file = NULL; } } cups-2.2.7/berkeley/Dependencies000664 000765 000024 00000003302 13255074424 017264 0ustar00msweetstaff000000 000000 lpc.o: lpc.c ../cups/cups-private.h ../cups/string-private.h ../config.h \ ../cups/debug-private.h ../cups/versioning.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h lpq.o: lpq.c ../cups/cups-private.h ../cups/string-private.h ../config.h \ ../cups/debug-private.h ../cups/versioning.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h lpr.o: lpr.c ../cups/cups-private.h ../cups/string-private.h ../config.h \ ../cups/debug-private.h ../cups/versioning.h ../cups/array-private.h \ ../cups/array.h ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h lprm.o: lprm.c ../cups/cups-private.h ../cups/string-private.h \ ../config.h ../cups/debug-private.h ../cups/versioning.h \ ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \ ../cups/ipp.h ../cups/http.h ../cups/http-private.h ../cups/language.h \ ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \ ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \ ../cups/thread-private.h cups-2.2.7/berkeley/lpc.c000664 000765 000024 00000023406 13255074424 015704 0ustar00msweetstaff000000 000000 /* * "lpc" command for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include /* * Local functions... */ static int compare_strings(const char *, const char *, size_t); static void do_command(http_t *, const char *, const char *); static void show_help(const char *); static void show_status(http_t *, const char *); /* * 'main()' - Parse options and commands. */ int main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { http_t *http; /* Connection to server */ char line[1024], /* Input line from user */ *params; /* Pointer to parameters */ _cupsSetLocale(argv); /* * Connect to the scheduler... */ http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption()); if (argc > 1) { /* * Process a single command on the command-line... */ do_command(http, argv[1], argv[2]); } else { /* * Do the command prompt thing... */ _cupsLangPuts(stdout, _("lpc> ")); /* TODO: Need no-newline version */ while (fgets(line, sizeof(line), stdin) != NULL) { /* * Strip trailing whitespace... */ for (params = line + strlen(line) - 1; params >= line;) if (!isspace(*params & 255)) break; else *params-- = '\0'; /* * Strip leading whitespace... */ for (params = line; isspace(*params & 255); params ++); if (params > line) _cups_strcpy(line, params); if (!line[0]) { /* * Nothing left, just show a prompt... */ _cupsLangPuts(stdout, _("lpc> ")); /* TODO: Need no newline version */ continue; } /* * Find any options in the string... */ for (params = line; *params != '\0'; params ++) if (isspace(*params & 255)) break; /* * Remove whitespace between the command and parameters... */ while (isspace(*params & 255)) *params++ = '\0'; /* * The "quit" and "exit" commands exit; otherwise, process as needed... */ if (!compare_strings(line, "quit", 1) || !compare_strings(line, "exit", 2)) break; if (*params == '\0') do_command(http, line, NULL); else do_command(http, line, params); /* * Put another prompt out to the user... */ _cupsLangPuts(stdout, _("lpc> ")); /* TODO: Need no newline version */ } } /* * Close the connection to the server and return... */ httpClose(http); return (0); } /* * 'compare_strings()' - Compare two command-line strings. */ static int /* O - -1 or 1 = no match, 0 = match */ compare_strings(const char *s, /* I - Command-line string */ const char *t, /* I - Option string */ size_t tmin) /* I - Minimum number of unique chars in option */ { size_t slen; /* Length of command-line string */ slen = strlen(s); if (slen < tmin) return (-1); else return (strncmp(s, t, slen)); } /* * 'do_command()' - Do an lpc command... */ static void do_command(http_t *http, /* I - HTTP connection to server */ const char *command, /* I - Command string */ const char *params) /* I - Parameters for command */ { if (!compare_strings(command, "status", 4)) show_status(http, params); else if (!compare_strings(command, "help", 1) || !strcmp(command, "?")) show_help(params); else _cupsLangPrintf(stdout, _("%s is not implemented by the CUPS version of lpc."), command); } /* * 'show_help()' - Show help messages. */ static void show_help(const char *command) /* I - Command to describe or NULL */ { if (!command) { _cupsLangPrintf(stdout, _("Commands may be abbreviated. Commands are:\n" "\n" "exit help quit status ?")); } else if (!compare_strings(command, "help", 1) || !strcmp(command, "?")) _cupsLangPrintf(stdout, _("help\t\tGet help on commands.")); else if (!compare_strings(command, "status", 4)) _cupsLangPrintf(stdout, _("status\t\tShow status of daemon and queue.")); else _cupsLangPrintf(stdout, _("?Invalid help command unknown.")); } /* * 'show_status()' - Show printers. */ static void show_status(http_t *http, /* I - HTTP connection to server */ const char *dests) /* I - Destinations */ { ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr; /* Current attribute */ char *printer, /* Printer name */ *device, /* Device URI */ *delimiter; /* Char search result */ ipp_pstate_t pstate; /* Printer state */ int accepting; /* Is printer accepting jobs? */ int jobcount; /* Count of current jobs */ const char *dptr, /* Pointer into destination list */ *ptr; /* Pointer into printer name */ int match; /* Non-zero if this job matches */ static const char *requested[] = /* Requested attributes */ { "device-uri", "printer-is-accepting-jobs", "printer-name", "printer-state", "queued-job-count" }; DEBUG_printf(("show_status(http=%p, dests=\"%s\")\n", http, dests)); if (http == NULL) return; /* * Build a CUPS_GET_PRINTERS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language */ request = ippNewRequest(CUPS_GET_PRINTERS); 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... */ if ((response = cupsDoRequest(http, request, "/")) != NULL) { DEBUG_puts("show_status: request succeeded..."); /* * Loop through the printers returned in the list and display * their status... */ for (attr = response->attrs; attr != NULL; attr = attr->next) { /* * Skip leading attributes until we hit a job... */ while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) attr = attr->next; if (attr == NULL) break; /* * Pull the needed attributes from this job... */ printer = NULL; device = "file:/dev/null"; pstate = IPP_PRINTER_IDLE; jobcount = 0; accepting = 1; while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) { if (!strcmp(attr->name, "device-uri") && attr->value_tag == IPP_TAG_URI) device = attr->values[0].string.text; else if (!strcmp(attr->name, "printer-is-accepting-jobs") && attr->value_tag == IPP_TAG_BOOLEAN) accepting = attr->values[0].boolean; else if (!strcmp(attr->name, "printer-name") && attr->value_tag == IPP_TAG_NAME) printer = attr->values[0].string.text; else if (!strcmp(attr->name, "printer-state") && attr->value_tag == IPP_TAG_ENUM) pstate = (ipp_pstate_t)attr->values[0].integer; else if (!strcmp(attr->name, "queued-job-count") && attr->value_tag == IPP_TAG_INTEGER) jobcount = attr->values[0].integer; attr = attr->next; } /* * See if we have everything needed... */ if (printer == NULL) { if (attr == NULL) break; else continue; } /* * A single 'all' printer name is special, meaning all printers. */ if (dests != NULL && !strcmp(dests, "all")) dests = NULL; /* * See if this is a printer we're interested in... */ match = dests == NULL; if (dests != NULL) { for (dptr = dests; *dptr != '\0';) { /* * Skip leading whitespace and commas... */ while (isspace(*dptr & 255) || *dptr == ',') dptr ++; if (*dptr == '\0') break; /* * Compare names... */ for (ptr = printer; *ptr != '\0' && *dptr != '\0' && *ptr == *dptr; ptr ++, dptr ++) /* do nothing */; if (*ptr == '\0' && (*dptr == '\0' || *dptr == ',' || isspace(*dptr & 255))) { match = 1; break; } /* * Skip trailing junk... */ while (!isspace(*dptr & 255) && *dptr != '\0') dptr ++; while (isspace(*dptr & 255) || *dptr == ',') dptr ++; if (*dptr == '\0') break; } } /* * Display the printer entry if needed... */ if (match) { /* * Display it... */ printf("%s:\n", printer); if (!strncmp(device, "file:", 5)) _cupsLangPrintf(stdout, _("\tprinter is on device \'%s\' speed -1"), device + 5); else { /* * Just show the scheme... */ if ((delimiter = strchr(device, ':')) != NULL ) { *delimiter = '\0'; _cupsLangPrintf(stdout, _("\tprinter is on device \'%s\' speed -1"), device); } } if (accepting) _cupsLangPuts(stdout, _("\tqueuing is enabled")); else _cupsLangPuts(stdout, _("\tqueuing is disabled")); if (pstate != IPP_PRINTER_STOPPED) _cupsLangPuts(stdout, _("\tprinting is enabled")); else _cupsLangPuts(stdout, _("\tprinting is disabled")); if (jobcount == 0) _cupsLangPuts(stdout, _("\tno entries")); else _cupsLangPrintf(stdout, _("\t%d entries"), jobcount); _cupsLangPuts(stdout, _("\tdaemon present")); } if (attr == NULL) break; } ippDelete(response); } } cups-2.2.7/berkeley/lpq.c000664 000765 000024 00000035461 13255074424 015726 0ustar00msweetstaff000000 000000 /* * "lpq" command for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include /* * Local functions... */ static http_t *connect_server(const char *, http_t *); static int show_jobs(const char *, http_t *, const char *, const char *, const int, const int); static void show_printer(const char *, http_t *, const char *); static void usage(void) __attribute__((noreturn)); /* * 'main()' - Parse options and commands. */ int main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ http_t *http; /* Connection to server */ const char *opt, /* Option pointer */ *dest, /* Desired printer */ *user, /* Desired user */ *val; /* Environment variable name */ char *instance; /* Printer instance */ int id, /* Desired job ID */ all, /* All printers */ interval, /* Reporting interval */ longstatus; /* Show file details */ cups_dest_t *named_dest; /* Named destination */ _cupsSetLocale(argv); /* * Check for command-line options... */ http = NULL; dest = NULL; user = NULL; id = 0; interval = 0; longstatus = 0; all = 0; for (i = 1; i < argc; i ++) { if (argv[i][0] == '+') { interval = atoi(argv[i] + 1); } else if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'E' : /* Encrypt */ #ifdef HAVE_SSL cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); if (http) httpEncryption(http, HTTP_ENCRYPT_REQUIRED); #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]); #endif /* HAVE_SSL */ break; case 'U' : /* Username */ if (opt[1] != '\0') { cupsSetUser(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected username after \"-U\" option."), argv[0]); return (1); } cupsSetUser(argv[i]); } break; case 'P' : /* Printer */ if (opt[1] != '\0') { dest = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { httpClose(http); usage(); } dest = argv[i]; } if ((instance = strchr(dest, '/')) != NULL) *instance++ = '\0'; http = connect_server(argv[0], http); if ((named_dest = cupsGetNamedDest(http, dest, instance)) == NULL) { if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), argv[0]); else if (instance) _cupsLangPrintf(stderr, _("%s: Error - unknown destination \"%s/%s\"."), argv[0], dest, instance); else _cupsLangPrintf(stderr, _("%s: Unknown destination \"%s\"."), argv[0], dest); return (1); } cupsFreeDests(1, named_dest); break; case 'a' : /* All printers */ all = 1; break; case 'h' : /* Connect to host */ if (http) { httpClose(http); http = NULL; } if (opt[1] != '\0') { cupsSetServer(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected hostname after \"-h\" option."), argv[0]); return (1); } else cupsSetServer(argv[i]); } break; case 'l' : /* Long status */ longstatus = 1; break; default : httpClose(http); usage(); } } } else if (isdigit(argv[i][0] & 255)) { id = atoi(argv[i]); } else { user = argv[i]; } } http = connect_server(argv[0], http); if (dest == NULL && !all) { if ((named_dest = cupsGetNamedDest(http, NULL, NULL)) == NULL) { if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), argv[0]); return (1); } val = NULL; if ((dest = getenv("LPDEST")) == NULL) { if ((dest = getenv("PRINTER")) != NULL) { if (!strcmp(dest, "lp")) dest = NULL; else val = "PRINTER"; } } else val = "LPDEST"; if (dest && val) _cupsLangPrintf(stderr, _("%s: Error - %s environment variable names " "non-existent destination \"%s\"."), argv[0], val, dest); else _cupsLangPrintf(stderr, _("%s: Error - no default destination available."), argv[0]); httpClose(http); return (1); } dest = named_dest->name; } /* * Show the status in a loop... */ for (;;) { if (dest) show_printer(argv[0], http, dest); i = show_jobs(argv[0], http, dest, user, id, longstatus); if (i && interval) { fflush(stdout); sleep((unsigned)interval); } else break; } /* * Close the connection to the server and return... */ httpClose(http); return (0); } /* * 'connect_server()' - Connect to the server as necessary... */ static http_t * /* O - New HTTP connection */ connect_server(const char *command, /* I - Command name */ http_t *http) /* I - Current HTTP connection */ { if (!http) { http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption()); if (http == NULL) { _cupsLangPrintf(stderr, _("%s: Unable to connect to server."), command); exit(1); } } return (http); } /* * 'show_jobs()' - Show jobs. */ static int /* O - Number of jobs in queue */ show_jobs(const char *command, /* I - Command name */ http_t *http, /* I - HTTP connection to server */ const char *dest, /* I - Destination */ const char *user, /* I - User */ const int id, /* I - Job ID */ const int longstatus) /* I - 1 if long report desired */ { ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr; /* Current attribute */ const char *jobdest, /* Pointer into job-printer-uri */ *jobuser, /* Pointer to job-originating-user-name */ *jobname; /* Pointer to job-name */ ipp_jstate_t jobstate; /* job-state */ int jobid, /* job-id */ jobsize, /* job-k-octets */ jobcount, /* Number of jobs */ jobcopies, /* Number of copies */ rank; /* Rank of job */ char resource[1024]; /* Resource string */ char rankstr[255]; /* Rank string */ char namestr[1024]; /* Job name string */ static const char * const jobattrs[] =/* Job attributes we want to see */ { "copies", "job-id", "job-k-octets", "job-name", "job-originating-user-name", "job-printer-uri", "job-priority", "job-state" }; static const char * const ranks[10] = /* Ranking strings */ { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" }; DEBUG_printf(("show_jobs(http=%p, dest=%p, user=%p, id=%d, longstatus%d)\n", http, dest, user, id, longstatus)); if (http == NULL) return (0); /* * Build an IPP_GET_JOBS or IPP_GET_JOB_ATTRIBUTES request, which requires * the following attributes: * * attributes-charset * attributes-natural-language * job-uri or printer-uri * requested-attributes * requesting-user-name */ request = ippNewRequest(id ? IPP_GET_JOB_ATTRIBUTES : IPP_GET_JOBS); if (id) { snprintf(resource, sizeof(resource), "ipp://localhost/jobs/%d", id); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, resource); } else if (dest) { httpAssembleURIf(HTTP_URI_CODING_ALL, resource, sizeof(resource), "ipp", NULL, "localhost", 0, "/printers/%s", dest); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, resource); } else ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, "ipp://localhost/"); if (user) { ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); ippAddBoolean(request, IPP_TAG_OPERATION, "my-jobs", 1); } else ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(jobattrs) / sizeof(jobattrs[0])), NULL, jobattrs); /* * Do the request and get back a response... */ jobcount = 0; if ((response = cupsDoRequest(http, request, "/")) != NULL) { if (response->request.status.status_code > IPP_OK_CONFLICT) { _cupsLangPrintf(stderr, "%s: %s", command, cupsLastErrorString()); ippDelete(response); return (0); } rank = 1; /* * Loop through the job list and display them... */ for (attr = response->attrs; attr != NULL; attr = attr->next) { /* * Skip leading attributes until we hit a job... */ while (attr != NULL && attr->group_tag != IPP_TAG_JOB) attr = attr->next; if (attr == NULL) break; /* * Pull the needed attributes from this job... */ jobid = 0; jobsize = 0; jobstate = IPP_JOB_PENDING; jobname = "unknown"; jobuser = "unknown"; jobdest = NULL; jobcopies = 1; while (attr != NULL && attr->group_tag == IPP_TAG_JOB) { if (!strcmp(attr->name, "job-id") && attr->value_tag == IPP_TAG_INTEGER) jobid = attr->values[0].integer; if (!strcmp(attr->name, "job-k-octets") && attr->value_tag == IPP_TAG_INTEGER) jobsize = attr->values[0].integer; if (!strcmp(attr->name, "job-state") && attr->value_tag == IPP_TAG_ENUM) jobstate = (ipp_jstate_t)attr->values[0].integer; if (!strcmp(attr->name, "job-printer-uri") && attr->value_tag == IPP_TAG_URI) if ((jobdest = strrchr(attr->values[0].string.text, '/')) != NULL) jobdest ++; if (!strcmp(attr->name, "job-originating-user-name") && attr->value_tag == IPP_TAG_NAME) jobuser = attr->values[0].string.text; if (!strcmp(attr->name, "job-name") && attr->value_tag == IPP_TAG_NAME) jobname = attr->values[0].string.text; if (!strcmp(attr->name, "copies") && attr->value_tag == IPP_TAG_INTEGER) jobcopies = attr->values[0].integer; attr = attr->next; } /* * See if we have everything needed... */ if (jobdest == NULL || jobid == 0) { if (attr == NULL) break; else continue; } if (!longstatus && jobcount == 0) _cupsLangPuts(stdout, _("Rank Owner Job File(s)" " Total Size")); jobcount ++; /* * Display the job... */ if (jobstate == IPP_JOB_PROCESSING) strlcpy(rankstr, "active", sizeof(rankstr)); else { /* * Make the rank show the "correct" suffix for each number * (11-13 are the only special cases, for English anyways...) */ if ((rank % 100) >= 11 && (rank % 100) <= 13) snprintf(rankstr, sizeof(rankstr), "%dth", rank); else snprintf(rankstr, sizeof(rankstr), "%d%s", rank, ranks[rank % 10]); rank ++; } if (longstatus) { _cupsLangPuts(stdout, "\n"); if (jobcopies > 1) snprintf(namestr, sizeof(namestr), "%d copies of %s", jobcopies, jobname); else strlcpy(namestr, jobname, sizeof(namestr)); _cupsLangPrintf(stdout, _("%s: %-33.33s [job %d localhost]"), jobuser, rankstr, jobid); _cupsLangPrintf(stdout, _(" %-39.39s %.0f bytes"), namestr, 1024.0 * jobsize); } else _cupsLangPrintf(stdout, _("%-7s %-7.7s %-7d %-31.31s %.0f bytes"), rankstr, jobuser, jobid, jobname, 1024.0 * jobsize); if (attr == NULL) break; } ippDelete(response); } else { _cupsLangPrintf(stderr, "%s: %s", command, cupsLastErrorString()); return (0); } if (jobcount == 0) _cupsLangPuts(stdout, _("no entries")); return (jobcount); } /* * 'show_printer()' - Show printer status. */ static void show_printer(const char *command, /* I - Command name */ http_t *http, /* I - HTTP connection to server */ const char *dest) /* I - Destination */ { ipp_t *request, /* IPP Request */ *response; /* IPP Response */ ipp_attribute_t *attr; /* Current attribute */ ipp_pstate_t state; /* Printer state */ char uri[HTTP_MAX_URI]; /* Printer URI */ if (http == NULL) return; /* * Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri */ request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", dest); 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) { if (response->request.status.status_code > IPP_OK_CONFLICT) { _cupsLangPrintf(stderr, "%s: %s", command, cupsLastErrorString()); ippDelete(response); return; } if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL) state = (ipp_pstate_t)attr->values[0].integer; else state = IPP_PRINTER_STOPPED; switch (state) { case IPP_PRINTER_IDLE : _cupsLangPrintf(stdout, _("%s is ready"), dest); break; case IPP_PRINTER_PROCESSING : _cupsLangPrintf(stdout, _("%s is ready and printing"), dest); break; case IPP_PRINTER_STOPPED : _cupsLangPrintf(stdout, _("%s is not ready"), dest); break; } ippDelete(response); } else _cupsLangPrintf(stderr, "%s: %s", command, cupsLastErrorString()); } /* * 'usage()' - Show program usage. */ static void usage(void) { _cupsLangPuts(stderr, _("Usage: lpq [-P dest] [-U username] [-h hostname[:port]] " "[-l] [+interval]")); exit(1); } cups-2.2.7/berkeley/lpr.c000664 000765 000024 00000024315 13255074424 015723 0ustar00msweetstaff000000 000000 /* * "lpr" command for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include /* * 'main()' - Parse options and send files for printing. */ int main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i, j; /* Looping var */ int job_id; /* Job ID */ char ch; /* Option character */ char *printer, /* Destination printer or class */ *instance, /* Instance */ *opt; /* Option pointer */ const char *title; /* Job title */ int num_copies; /* Number of copies per file */ int num_files; /* Number of files to print */ const char *files[1000]; /* Files to print */ cups_dest_t *dest; /* Selected destination */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ int deletefile; /* Delete file after print? */ char buffer[8192]; /* Copy buffer */ _cupsSetLocale(argv); deletefile = 0; printer = NULL; dest = NULL; num_options = 0; options = NULL; num_files = 0; title = NULL; for (i = 1; i < argc; i ++) { if (argv[i][0] == '-') { for (opt = argv[i] + 1; *opt; opt ++) { switch (ch = *opt) { case 'E' : /* Encrypt */ #ifdef HAVE_SSL cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]); #endif /* HAVE_SSL */ break; case 'U' : /* Username */ if (opt[1] != '\0') { cupsSetUser(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected username after \"-U\" option."), argv[0]); return (1); } cupsSetUser(argv[i]); } break; case 'H' : /* Connect to host */ if (opt[1] != '\0') { cupsSetServer(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected hostname after \"-H\" option."), argv[0]); return (1); } else cupsSetServer(argv[i]); } break; case '1' : /* TROFF font set 1 */ case '2' : /* TROFF font set 2 */ case '3' : /* TROFF font set 3 */ case '4' : /* TROFF font set 4 */ case 'i' : /* indent */ case 'w' : /* width */ if (opt[1] != '\0') { opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected value after \"-%c\" " "option."), argv[0], ch); return (1); } } case 'c' : /* CIFPLOT */ case 'd' : /* DVI */ case 'f' : /* FORTRAN */ case 'g' : /* plot */ case 'n' : /* Ditroff */ case 't' : /* Troff */ case 'v' : /* Raster image */ _cupsLangPrintf(stderr, _("%s: Warning - \"%c\" format modifier not supported - output may not be correct."), argv[0], ch); break; case 'o' : /* Option */ if (opt[1] != '\0') { num_options = cupsParseOptions(opt + 1, num_options, &options); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected option=value after \"-o\" option."), argv[0]); return (1); } num_options = cupsParseOptions(argv[i], num_options, &options); } break; case 'l' : /* Literal/raw */ num_options = cupsAddOption("raw", "true", num_options, &options); break; case 'p' : /* Prettyprint */ num_options = cupsAddOption("prettyprint", "true", 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; case 'm' : /* Mail on completion */ { char email[1024]; /* EMail address */ snprintf(email, sizeof(email), "mailto:%s@%s", cupsUser(), httpGetHostname(NULL, buffer, sizeof(buffer))); num_options = cupsAddOption("notify-recipient-uri", email, num_options, &options); } break; case 'q' : /* Queue file but don't print */ num_options = cupsAddOption("job-hold-until", "indefinite", num_options, &options); break; case 'r' : /* Remove file after printing */ deletefile = 1; break; case 'P' : /* Destination printer or class */ if (opt[1] != '\0') { printer = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected destination after \"-P\" option."), argv[0]); return (1); } printer = argv[i]; } if ((instance = strrchr(printer, '/')) != NULL) *instance++ = '\0'; if ((dest = cupsGetNamedDest(NULL, printer, instance)) != NULL) { for (j = 0; j < dest->num_options; j ++) if (cupsGetOption(dest->options[j].name, num_options, options) == NULL) num_options = cupsAddOption(dest->options[j].name, dest->options[j].value, num_options, &options); } else if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server name."), argv[0]); return (1); } break; case '#' : /* Number of copies */ if (opt[1] != '\0') { num_copies = atoi(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected copies after \"-#\" option."), argv[0]); return (1); } num_copies = atoi(argv[i]); } if (num_copies < 1) { _cupsLangPrintf(stderr, _("%s: Error - copies must be 1 or more."), argv[0]); return (1); } sprintf(buffer, "%d", num_copies); num_options = cupsAddOption("copies", buffer, num_options, &options); break; case 'C' : /* Class */ case 'J' : /* Job name */ case 'T' : /* Title */ if (opt[1] != '\0') { title = opt + 1; opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected name after \"-%c\" option."), argv[0], ch); return (1); } title = argv[i]; } break; default : _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%c\"."), argv[0], *opt); return (1); } } } else if (num_files < 1000) { /* * Print a file... */ if (access(argv[i], R_OK) != 0) { _cupsLangPrintf(stderr, _("%s: Error - unable to access \"%s\" - %s"), argv[0], argv[i], strerror(errno)); return (1); } files[num_files] = argv[i]; num_files ++; if (title == NULL) { if ((title = strrchr(argv[i], '/')) != NULL) title ++; else title = argv[i]; } } else { _cupsLangPrintf(stderr, _("%s: Error - too many files - \"%s\"."), argv[0], argv[i]); } } /* * See if we have any files to print; if not, print from stdin... */ if (printer == NULL) { if ((dest = cupsGetNamedDest(NULL, NULL, NULL)) != NULL) { printer = dest->name; for (j = 0; j < dest->num_options; j ++) if (cupsGetOption(dest->options[j].name, num_options, options) == NULL) num_options = cupsAddOption(dest->options[j].name, dest->options[j].value, num_options, &options); } else if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST || cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED) { _cupsLangPrintf(stderr, _("%s: Error - add '/version=1.1' to server " "name."), argv[0]); return (1); } } if (printer == NULL) { if (!cupsGetNamedDest(NULL, NULL, NULL) && cupsLastError() == IPP_STATUS_ERROR_NOT_FOUND) _cupsLangPrintf(stderr, _("%s: Error - %s"), argv[0], cupsLastErrorString()); else _cupsLangPrintf(stderr, _("%s: Error - scheduler not responding."), argv[0]); return (1); } if (num_files > 0) { job_id = cupsPrintFiles(printer, num_files, files, title, num_options, options); if (deletefile && job_id > 0) { /* * Delete print files after printing... */ for (i = 0; i < num_files; i ++) unlink(files[i]); } } else if ((job_id = cupsCreateJob(CUPS_HTTP_DEFAULT, printer, title ? title : "(stdin)", num_options, options)) > 0) { http_status_t status; /* Write status */ const char *format; /* Document format */ ssize_t bytes; /* Bytes read */ if (cupsGetOption("raw", num_options, options)) format = CUPS_FORMAT_RAW; else if ((format = cupsGetOption("document-format", num_options, options)) == NULL) format = CUPS_FORMAT_AUTO; status = cupsStartDocument(CUPS_HTTP_DEFAULT, printer, job_id, NULL, format, 1); while (status == HTTP_CONTINUE && (bytes = read(0, buffer, sizeof(buffer))) > 0) status = cupsWriteRequestData(CUPS_HTTP_DEFAULT, buffer, (size_t)bytes); if (status != HTTP_CONTINUE) { _cupsLangPrintf(stderr, _("%s: Error - unable to queue from stdin - %s."), argv[0], httpStatus(status)); cupsFinishDocument(CUPS_HTTP_DEFAULT, printer); cupsCancelJob2(CUPS_HTTP_DEFAULT, printer, job_id, 0); return (1); } if (cupsFinishDocument(CUPS_HTTP_DEFAULT, printer) != IPP_OK) { _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString()); cupsCancelJob2(CUPS_HTTP_DEFAULT, printer, job_id, 0); return (1); } } if (job_id < 1) { _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString()); return (1); } return (0); } cups-2.2.7/berkeley/lprm.c000664 000765 000024 00000010670 13255074424 016077 0ustar00msweetstaff000000 000000 /* * "lprm" command for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include /* * 'main()' - Parse options and cancel jobs. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ int job_id; /* Job ID */ const char *name; /* Destination printer */ char *instance, /* Pointer to instance name */ *opt; /* Option pointer */ cups_dest_t *dest, /* Destination */ *defdest; /* Default destination */ int did_cancel; /* Did we cancel something? */ _cupsSetLocale(argv); /* * Setup to cancel individual print jobs... */ did_cancel = 0; defdest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL); name = defdest ? defdest->name : NULL; /* * Process command-line arguments... */ for (i = 1; i < argc; i ++) { if (argv[i][0] == '-' && argv[i][1] != '\0') { for (opt = argv[i] + 1; *opt; opt ++) { switch (*opt) { case 'E' : /* Encrypt */ #ifdef HAVE_SSL cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); #else _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]); #endif /* HAVE_SSL */ break; case 'P' : /* Cancel jobs on a printer */ if (opt[1] != '\0') { name = opt + 1; opt += strlen(opt) - 1; } else { i ++; name = argv[i]; } if ((instance = strchr(name, '/')) != NULL) *instance = '\0'; if ((dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, name, NULL)) == NULL) { _cupsLangPrintf(stderr, _("%s: Error - unknown destination \"%s\"."), argv[0], name); goto error; } cupsFreeDests(1, dest); break; case 'U' : /* Username */ if (opt[1] != '\0') { cupsSetUser(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected username after \"-U\" option."), argv[0]); goto error; } cupsSetUser(argv[i]); } break; case 'h' : /* Connect to host */ if (opt[1] != '\0') { cupsSetServer(opt + 1); opt += strlen(opt) - 1; } else { i ++; if (i >= argc) { _cupsLangPrintf(stderr, _("%s: Error - expected hostname after \"-h\" option."), argv[0]); goto error; } else cupsSetServer(argv[i]); } if (defdest) cupsFreeDests(1, defdest); defdest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL); name = defdest ? defdest->name : NULL; break; default : _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%c\"."), argv[0], *opt); goto error; } } } else { /* * Cancel a job or printer... */ if ((dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, argv[i], NULL)) != NULL) cupsFreeDests(1, dest); if (dest) { name = argv[i]; job_id = 0; } else if (isdigit(argv[i][0] & 255)) { name = NULL; job_id = atoi(argv[i]); } else if (!strcmp(argv[i], "-")) { /* * Cancel all jobs */ job_id = -1; } else { _cupsLangPrintf(stderr, _("%s: Error - unknown destination \"%s\"."), argv[0], argv[i]); goto error; } if (cupsCancelJob2(CUPS_HTTP_DEFAULT, name, job_id, 0) != IPP_OK) { _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString()); goto error; } did_cancel = 1; } } /* * If nothing has been canceled yet, cancel the current job on the specified * (or default) printer... */ if (!did_cancel && cupsCancelJob2(CUPS_HTTP_DEFAULT, name, 0, 0) != IPP_OK) { _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString()); goto error; } if (defdest) cupsFreeDests(1, defdest); return (0); /* * If we get here there was an error, so clean up... */ error: if (defdest) cupsFreeDests(1, defdest); return (1); } cups-2.2.7/berkeley/Makefile000664 000765 000024 00000004410 13255074424 016414 0ustar00msweetstaff000000 000000 # # Berkeley commands makefile for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 1997-2006 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # include ../Makedefs TARGETS = lpc lpq lpr lprm OBJS = lpc.o lpq.o lpr.o lprm.o # # Make all targets... # all: $(TARGETS) # # Make library targets... # libs: # # Make unit tests... # unittests: # # Clean all object files... # clean: $(RM) $(OBJS) $(TARGETS) # # Update dependencies (without system header dependencies...) # depend: $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: # # Install programs... # install-exec: echo Installing Berkeley user printing commands in $(BINDIR)... $(INSTALL_DIR) -m 755 $(BINDIR) $(INSTALL_BIN) lpq $(BINDIR) $(INSTALL_BIN) lpr $(BINDIR) $(INSTALL_BIN) lprm $(BINDIR) echo Installing Berkeley admin printing commands in $(BINDIR)... $(INSTALL_DIR) -m 755 $(SBINDIR) $(INSTALL_BIN) lpc $(SBINDIR) if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ for file in $(TARGETS); do \ cp $$file $(SYMROOT); \ dsymutil $(SYMROOT)/$$file; \ done \ fi # # Install headers... # install-headers: # # Install libraries... # install-libs: # # Uninstall all targets... # uninstall: $(RM) $(BINDIR)/lpq $(RM) $(BINDIR)/lpr $(RM) $(BINDIR)/lprm $(RM) $(SBINDIR)/lpc -$(RMDIR) $(SBINDIR) -$(RMDIR) $(BINDIR) # # lpc # lpc: lpc.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o lpc lpc.o $(LIBS) # # lpq # lpq: lpq.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o lpq lpq.o $(LIBS) # # lpr # lpr: lpr.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o lpr lpr.o $(LIBS) # # lprm # lprm: lprm.o ../cups/$(LIBCUPS) echo Linking $@... $(LD_CC) $(LDFLAGS) -o lprm lprm.o $(LIBS) # # Dependencies... # include Dependencies cups-2.2.7/backend/backend-private.h000664 000765 000024 00000027352 13255074424 017763 0ustar00msweetstaff000000 000000 /* * Backend support definitions for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_BACKEND_PRIVATE_H_ # define _CUPS_BACKEND_PRIVATE_H_ /* * Include necessary headers. */ # include # include # include # include # include # ifdef __linux # include # include # define IOCNR_GET_DEVICE_ID 1 # define LPIOC_GET_DEVICE_ID(len) _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len) # include # include # include # include # endif /* __linux */ # ifdef __sun # ifdef __sparc # include # else # include # include # endif /* __sparc */ # endif /* __sun */ /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * OID constants... */ /* Host MIB */ #define CUPS_OID_mib2 1,3,6,1,2,1 #define CUPS_OID_system CUPS_OID_mib2,1 #define CUPS_OID_sysLocation CUPS_OID_system,6 #define CUPS_OID_host CUPS_OID_mib2,25 #define CUPS_OID_hrSystem CUPS_OID_host,1 #define CUPS_OID_hrStorage CUPS_OID_host,2 #define CUPS_OID_hrDevice CUPS_OID_host,3 #define CUPS_OID_hrDeviceTable CUPS_OID_hrDevice,2 #define CUPS_OID_hrDeviceEntry CUPS_OID_hrDeviceTable,1 #define CUPS_OID_hrDeviceIndex CUPS_OID_hrDeviceEntry,1 #define CUPS_OID_hrDeviceType CUPS_OID_hrDeviceEntry,2 #define CUPS_OID_hrDeviceDescr CUPS_OID_hrDeviceEntry,3 #define CUPS_OID_hrPrinterTable CUPS_OID_hrDevice,5 #define CUPS_OID_hrPrinterEntry CUPS_OID_hrPrinterTable,1 #define CUPS_OID_hrPrinterStatus CUPS_OID_hrPrinterEntry,1 #define CUPS_OID_hrPrinterDetectedErrorState CUPS_OID_hrPrinterEntry,2 /* Printer MIB */ #define CUPS_OID_printmib CUPS_OID_mib2,43 #define CUPS_OID_prtGeneral CUPS_OID_printmib,5 #define CUPS_OID_prtGeneralTable CUPS_OID_prtGeneral,1 #define CUPS_OID_prtGeneralEntry CUPS_OID_prtGeneralTable,1 #define CUPS_OID_prtGeneralCurrentLocalization CUPS_OID_prtGeneralEntry,2 #define CUPS_OID_prtGeneralPrinterName CUPS_OID_prtGeneralEntry,16 #define CUPS_OID_prtGeneralSerialNumber CUPS_OID_prtGeneralEntry,17 #define CUPS_OID_prtCover CUPS_OID_printmib,6 #define CUPS_OID_prtCoverTable CUPS_OID_prtCover,1 #define CUPS_OID_prtCoverEntry CUPS_OID_prtCoverTable,1 #define CUPS_OID_prtCoverDescription CUPS_OID_prtCoverEntry,2 #define CUPS_OID_prtCoverStatus CUPS_OID_prtCoverEntry,3 #define CUPS_OID_prtLocalization CUPS_OID_printmib,7 #define CUPS_OID_prtLocalizationTable CUPS_OID_prtLocalization,1 #define CUPS_OID_prtLocalizationEntry CUPS_OID_prtLocalizationTable,1 #define CUPS_OID_prtLocalizationCharacterSet CUPS_OID_prtLocalizationEntry,4 #define CUPS_OID_prtMarker CUPS_OID_printmib,10 #define CUPS_OID_prtMarkerTable CUPS_OID_prtMarker,2 #define CUPS_OID_prtMarkerEntry CUPS_OID_prtMarkerTable,1 #define CUPS_OID_prtMarkerLifeCount CUPS_OID_prtMarkerEntry,4 #define CUPS_OID_prtMarkerSupplies CUPS_OID_printmib,11 #define CUPS_OID_prtMarkerSuppliesTable CUPS_OID_prtMarkerSupplies,1 #define CUPS_OID_prtMarkerSuppliesEntry CUPS_OID_prtMarkerSuppliesTable,1 #define CUPS_OID_prtMarkerSuppliesIndex CUPS_OID_prtMarkerSuppliesEntry,1 #define CUPS_OID_prtMarkerSuppliesMarkerIndex CUPS_OID_prtMarkerSuppliesEntry,2 #define CUPS_OID_prtMarkerSuppliesColorantIndex CUPS_OID_prtMarkerSuppliesEntry,3 #define CUPS_OID_prtMarkerSuppliesClass CUPS_OID_prtMarkerSuppliesEntry,4 #define CUPS_OID_prtMarkerSuppliesType CUPS_OID_prtMarkerSuppliesEntry,5 #define CUPS_OID_prtMarkerSuppliesDescription CUPS_OID_prtMarkerSuppliesEntry,6 #define CUPS_OID_prtMarkerSuppliesSupplyUnit CUPS_OID_prtMarkerSuppliesEntry,7 #define CUPS_OID_prtMarkerSuppliesMaxCapacity CUPS_OID_prtMarkerSuppliesEntry,8 #define CUPS_OID_prtMarkerSuppliesLevel CUPS_OID_prtMarkerSuppliesEntry,9 #define CUPS_OID_prtMarkerColorant CUPS_OID_printmib,12 #define CUPS_OID_prtMarkerColorantTable CUPS_OID_prtMarkerColorant,1 #define CUPS_OID_prtMarkerColorantEntry CUPS_OID_prtMarkerColorantTable,1 #define CUPS_OID_prtMarkerColorantIndex CUPS_OID_prtMarkerColorantEntry,1 #define CUPS_OID_prtMarkerColorantMarkerIndex CUPS_OID_prtMarkerColorantEntry,2 #define CUPS_OID_prtMarkerColorantRole CUPS_OID_prtMarkerColorantEntry,3 #define CUPS_OID_prtMarkerColorantValue CUPS_OID_prtMarkerColorantEntry,4 #define CUPS_OID_prtMarkerColorantTonality CUPS_OID_prtMarkerColorantEntry,5 #define CUPS_OID_prtInterpreter CUPS_OID_printmib,15 #define CUPS_OID_prtInterpreterTable CUPS_OID_prtInterpreter,1 #define CUPS_OID_prtInterpreterEntry CUPS_OID_prtInterpreterTable,1 #define CUPS_OID_prtInterpreterLangFamily CUPS_OID_prtInterpreterEntry,2 #define CUPS_OID_prtInterpreterLangLevel CUPS_OID_prtInterpreterEntry,3 /* Printer Port Monitor MIB */ #define CUPS_OID_enterprises 1,3,6,1,4,1 #define CUPS_OID_pwg CUPS_OID_enterprises,2699,1 #define CUPS_OID_ppmMIB CUPS_OID_pwg,2 #define CUPS_OID_ppmMIBObjects CUPS_OID_ppmMIB,1 #define CUPS_OID_ppmGeneral CUPS_OID_ppmMIBObjects,1 #define CUPS_OID_ppmPrinter CUPS_OID_ppmMIBObjects,2 #define CUPS_OID_ppmPrinterTable CUPS_OID_ppmPrinter,1 #define CUPS_OID_ppmPrinterEntry CUPS_OID_ppmPrinterTable,1 #define CUPS_OID_ppmPrinterIndex CUPS_OID_ppmPrinterEntry,1 #define CUPS_OID_ppmPrinterName CUPS_OID_ppmPrinterEntry,2 #define CUPS_OID_ppmPrinterIEEE1284DeviceId CUPS_OID_ppmPrinterEntry,3 #define CUPS_OID_ppmPrinterNumberOfPorts CUPS_OID_ppmPrinterEntry,4 #define CUPS_OID_ppmPrinterPreferredPortIndex CUPS_OID_ppmPrinterEntry,5 #define CUPS_OID_ppmPrinterHrDeviceIndex CUPS_OID_ppmPrinterEntry,6 #define CUPS_OID_ppmPrinterSnmpCommunityName CUPS_OID_ppmPrinterEntry,7 #define CUPS_OID_ppmPrinterSnmpQueryEnabled CUPS_OID_ppmPrinterEntry,8 #define CUPS_OID_ppmPort CUPS_OID_ppmMIBObjects,3 #define CUPS_OID_ppmPortTable CUPS_OID_ppmPort,1 #define CUPS_OID_ppmPortEntry CUPS_OID_ppmPortTable,1 #define CUPS_OID_ppmPortIndex CUPS_OID_ppmPortEntry,1 #define CUPS_OID_ppmPortEnabled CUPS_OID_ppmPortEntry,2 #define CUPS_OID_ppmPortName CUPS_OID_ppmPortEntry,3 #define CUPS_OID_ppmPortServiceNameOrURI CUPS_OID_ppmPortEntry,4 #define CUPS_OID_ppmPortProtocolType CUPS_OID_ppmPortEntry,5 #define CUPS_OID_ppmPortProtocolTargetPort CUPS_OID_ppmPortEntry,6 #define CUPS_OID_ppmPortProtocolAltSourceEnabled CUPS_OID_ppmPortEntry,7 #define CUPS_OID_ppmPortPrtChannelIndex CUPS_OID_ppmPortEntry,8 #define CUPS_OID_ppmPortLprByteCountEnabled CUPS_OID_ppmPortEntry,9 /* * State constants... */ #define CUPS_TC_other 1 #define CUPS_TC_unknown 2 #define CUPS_TC_idle 3 #define CUPS_TC_printing 4 #define CUPS_TC_warmup 5 /* These come from the hrPrinterDetectedErrorState OCTET-STRING */ #define CUPS_TC_lowPaper 0x8000 #define CUPS_TC_noPaper 0x4000 #define CUPS_TC_lowToner 0x2000 #define CUPS_TC_noToner 0x1000 #define CUPS_TC_doorOpen 0x0800 #define CUPS_TC_jammed 0x0400 #define CUPS_TC_offline 0x0200 #define CUPS_TC_serviceRequested 0x0100 #define CUPS_TC_inputTrayMissing 0x0080 #define CUPS_TC_outputTrayMissing 0x0040 #define CUPS_TC_markerSupplyMissing 0x0020 #define CUPS_TC_outputNearFull 0x0010 #define CUPS_TC_outputFull 0x0008 #define CUPS_TC_inputTrayEmpty 0x0004 #define CUPS_TC_overduePreventMaint 0x0002 #define CUPS_TC_prtCoverStatus_coverOpen 3 #define CUPS_TC_prtCoverStatus_coverClosed 4 #define CUPS_TC_prtCoverStatus_interlockOpen 5 #define CUPS_TC_prtCoverStatus_interlockClosed 6 #define CUPS_TC_langPCL 3 #define CUPS_TC_langHPGL 4 #define CUPS_TC_langPJL 5 #define CUPS_TC_langPS 6 #define CUPS_TC_langEscapeP 9 #define CUPS_TC_langCCITT 26 #define CUPS_TC_langLIPS 39 #define CUPS_TC_langTIFF 40 #define CUPS_TC_langPCLXL 47 #define CUPS_TC_langPDF 54 #define CUPS_TC_langJPEG 61 #define CUPS_TC_supplyThatIsConsumed 3 #define CUPS_TC_receptacleThatIsFilled 4 #define CUPS_TC_process 3 #define CUPS_TC_spot 4 #define CUPS_TC_toner 3 #define CUPS_TC_wasteToner 4 #define CUPS_TC_ink 5 #define CUPS_TC_inkCartridge 6 #define CUPS_TC_inkRibbon 7 #define CUPS_TC_wasteInk 8 #define CUPS_TC_opc 9 #define CUPS_TC_developer 10 #define CUPS_TC_fuserOil 11 #define CUPS_TC_solidWax 12 #define CUPS_TC_ribbonWax 13 #define CUPS_TC_wasteWax 14 #define CUPS_TC_fuser 15 #define CUPS_TC_coronaWire 16 #define CUPS_TC_fuserOilWick 17 #define CUPS_TC_cleanerUnit 18 #define CUPS_TC_fuserCleaningPad 19 #define CUPS_TC_transferUnit 20 #define CUPS_TC_tonerCartridge 21 #define CUPS_TC_fuserOiler 22 #define CUPS_TC_water 23 #define CUPS_TC_wasteWater 24 #define CUPS_TC_glueWaterAdditive 25 #define CUPS_TC_wastePaper 26 #define CUPS_TC_bindingSupply 27 #define CUPS_TC_bandingSupply 28 #define CUPS_TC_stitchingWire 29 #define CUPS_TC_shrinkWrap 30 #define CUPS_TC_paperWrap 31 #define CUPS_TC_staples 32 #define CUPS_TC_inserts 33 #define CUPS_TC_covers 34 #define CUPS_TC_tenThousandthsOfInches 3 #define CUPS_TC_micrometers 4 #define CUPS_TC_impressions 7 #define CUPS_TC_sheets 8 #define CUPS_TC_hours 11 #define CUPS_TC_thousandthsOfOunces 12 #define CUPS_TC_tenthsOfGrams 13 #define CUPS_TC_hundrethsOfFluidOunces 14 #define CUPS_TC_tenthsOfMilliliters 15 #define CUPS_TC_feet 16 #define CUPS_TC_meters 17 #define CUPS_TC_items 18 #define CUPS_TC_percent 19 /* These come from RFC 3808 to define character sets we support */ /* Also see http://www.iana.org/assignments/character-sets */ #define CUPS_TC_csASCII 3 #define CUPS_TC_csISOLatin1 4 #define CUPS_TC_csShiftJIS 17 #define CUPS_TC_csUTF8 106 #define CUPS_TC_csUnicode 1000 /* UCS2 BE */ #define CUPS_TC_csUCS4 1001 /* UCS4 BE */ #define CUPS_TC_csUnicodeASCII 1002 #define CUPS_TC_csUnicodeLatin1 1003 #define CUPS_TC_csUTF16BE 1013 #define CUPS_TC_csUTF16LE 1014 #define CUPS_TC_csUTF32 1017 #define CUPS_TC_csUTF32BE 1018 #define CUPS_TC_csUTF32LE 1019 #define CUPS_TC_csWindows31J 2024 /* * Types... */ typedef int (*_cups_sccb_t)(int print_fd, int device_fd, int snmp_fd, http_addr_t *addr, int use_bc); /* * Prototypes... */ extern void backendCheckSideChannel(int snmp_fd, http_addr_t *addr); extern int backendDrainOutput(int print_fd, int device_fd); extern int backendGetDeviceID(int fd, char *device_id, int device_id_size, char *make_model, int make_model_size, const char *scheme, char *uri, int uri_size); extern int backendGetMakeModel(const char *device_id, char *make_model, size_t make_model_size); extern http_addrlist_t *backendLookup(const char *hostname, int port, int *cancel); extern int backendNetworkSideCB(int print_fd, int device_fd, int snmp_fd, http_addr_t *addr, int use_bc); extern ssize_t backendRunLoop(int print_fd, int device_fd, int snmp_fd, http_addr_t *addr, int use_bc, int update_state, _cups_sccb_t side_cb); extern int backendSNMPSupplies(int snmp_fd, http_addr_t *addr, int *page_count, int *printer_state); extern int backendWaitLoop(int snmp_fd, http_addr_t *addr, int use_bc, _cups_sccb_t side_cb); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_BACKEND_PRIVATE_H_ */ cups-2.2.7/backend/Dependencies000664 000765 000024 00000011053 13255074424 017053 0ustar00msweetstaff000000 000000 ipp.o: ipp.c backend-private.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/snmp-private.h ../cups/backend.h ../cups/sidechannel.h \ ../cups/ppd-private.h ../cups/ppd.h ../cups/raster.h lpd.o: lpd.c ../cups/http-private.h ../config.h ../cups/language.h \ ../cups/array.h ../cups/versioning.h ../cups/http.h \ ../cups/md5-private.h ../cups/ipp-private.h ../cups/ipp.h \ backend-private.h ../cups/cups-private.h ../cups/string-private.h \ ../cups/debug-private.h ../cups/array-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/snmp-private.h ../cups/backend.h ../cups/sidechannel.h dnssd.o: dnssd.c backend-private.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/snmp-private.h ../cups/backend.h ../cups/sidechannel.h snmp.o: snmp.c backend-private.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/snmp-private.h ../cups/backend.h ../cups/sidechannel.h socket.o: socket.c ../cups/http-private.h ../config.h ../cups/language.h \ ../cups/array.h ../cups/versioning.h ../cups/http.h \ ../cups/md5-private.h ../cups/ipp-private.h ../cups/ipp.h \ backend-private.h ../cups/cups-private.h ../cups/string-private.h \ ../cups/debug-private.h ../cups/array-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/snmp-private.h ../cups/backend.h ../cups/sidechannel.h test1284.o: test1284.c ../cups/string-private.h ../config.h ieee1284.c \ backend-private.h ../cups/cups-private.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/snmp-private.h ../cups/backend.h ../cups/sidechannel.h \ ../cups/ppd-private.h ../cups/ppd.h ../cups/raster.h testbackend.o: testbackend.c ../cups/string-private.h ../config.h \ ../cups/cups.h ../cups/file.h ../cups/versioning.h ../cups/ipp.h \ ../cups/http.h ../cups/array.h ../cups/language.h ../cups/pwg.h \ ../cups/sidechannel.h testsupplies.o: testsupplies.c backend-private.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/snmp-private.h ../cups/backend.h ../cups/sidechannel.h usb.o: usb.c backend-private.h ../cups/cups-private.h \ ../cups/string-private.h ../config.h ../cups/debug-private.h \ ../cups/versioning.h ../cups/array-private.h ../cups/array.h \ ../cups/ipp-private.h ../cups/ipp.h ../cups/http.h \ ../cups/http-private.h ../cups/language.h ../cups/md5-private.h \ ../cups/language-private.h ../cups/transcode.h ../cups/pwg-private.h \ ../cups/cups.h ../cups/file.h ../cups/pwg.h ../cups/thread-private.h \ ../cups/snmp-private.h ../cups/backend.h ../cups/sidechannel.h \ usb-darwin.c ../cups/file-private.h ../cups/ppd-private.h \ ../cups/ppd.h ../cups/raster.h cups-2.2.7/backend/dnssd.c000664 000765 000024 00000107362 13255074424 016032 0ustar00msweetstaff000000 000000 /* * DNS-SD discovery backend for CUPS. * * Copyright 2008-2017 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include "backend-private.h" #include #ifdef HAVE_DNSSD # include #endif /* HAVE_DNSSD */ #ifdef HAVE_AVAHI # include # include # include # include # include # include #define kDNSServiceMaxDomainName AVAHI_DOMAIN_NAME_MAX #endif /* HAVE_AVAHI */ /* * Device structure... */ typedef enum { CUPS_DEVICE_PRINTER = 0, /* lpd://... */ CUPS_DEVICE_IPPS, /* ipps://... */ CUPS_DEVICE_IPP, /* ipp://... */ CUPS_DEVICE_FAX_IPP, /* ipp://... */ CUPS_DEVICE_PDL_DATASTREAM, /* socket://... */ CUPS_DEVICE_RIOUSBPRINT /* riousbprint://... */ } cups_devtype_t; typedef struct { #ifdef HAVE_DNSSD DNSServiceRef ref; /* Service reference for query */ #endif /* HAVE_DNSSD */ #ifdef HAVE_AVAHI AvahiRecordBrowser *ref; /* Browser for query */ #endif /* HAVE_AVAHI */ char *name, /* Service name */ *domain, /* Domain name */ *fullName, /* Full name */ *make_and_model, /* Make and model from TXT record */ *device_id, /* 1284 device ID from TXT record */ *uuid; /* UUID from TXT record */ cups_devtype_t type; /* Device registration type */ int priority, /* Priority associated with type */ cups_shared, /* CUPS shared printer? */ sent; /* Did we list the device? */ } cups_device_t; /* * Local globals... */ static int job_canceled = 0; /* Set to 1 on SIGTERM */ #ifdef HAVE_AVAHI static AvahiSimplePoll *simple_poll = NULL; /* Poll information */ static int got_data = 0; /* Got data from poll? */ static int browsers = 0; /* Number of running browsers */ #endif /* HAVE_AVAHI */ /* * Local functions... */ #ifdef HAVE_DNSSD static void browse_callback(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *serviceName, const char *regtype, const char *replyDomain, void *context) __attribute__((nonnull(1,5,6,7,8))); static void browse_local_callback(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *serviceName, const char *regtype, const char *replyDomain, void *context) __attribute__((nonnull(1,5,6,7,8))); #endif /* HAVE_DNSSD */ #ifdef HAVE_AVAHI static void browse_callback(AvahiServiceBrowser *browser, AvahiIfIndex interface, AvahiProtocol protocol, AvahiBrowserEvent event, const char *serviceName, const char *regtype, const char *replyDomain, AvahiLookupResultFlags flags, void *context); static void client_callback(AvahiClient *client, AvahiClientState state, void *context); #endif /* HAVE_AVAHI */ static int compare_devices(cups_device_t *a, cups_device_t *b); static void exec_backend(char **argv) __attribute__((noreturn)); static cups_device_t *get_device(cups_array_t *devices, const char *serviceName, const char *regtype, const char *replyDomain) __attribute__((nonnull(1,2,3,4))); #ifdef HAVE_DNSSD static void query_callback(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *fullName, uint16_t rrtype, uint16_t rrclass, uint16_t rdlen, const void *rdata, uint32_t ttl, void *context) __attribute__((nonnull(1,5,9,11))); #elif defined(HAVE_AVAHI) static int poll_callback(struct pollfd *pollfds, unsigned int num_pollfds, int timeout, void *context); static void query_callback(AvahiRecordBrowser *browser, AvahiIfIndex interface, AvahiProtocol protocol, AvahiBrowserEvent event, const char *name, uint16_t rrclass, uint16_t rrtype, const void *rdata, size_t rdlen, AvahiLookupResultFlags flags, void *context); #endif /* HAVE_DNSSD */ static void sigterm_handler(int sig); static void unquote(char *dst, const char *src, size_t dstsize) __attribute__((nonnull(1,2))); /* * 'main()' - Browse for printers. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { const char *name; /* Backend name */ cups_array_t *devices; /* Device array */ cups_device_t *device; /* Current device */ char uriName[1024]; /* Unquoted fullName for URI */ #ifdef HAVE_DNSSD int fd; /* Main file descriptor */ fd_set input; /* Input set for select() */ struct timeval timeout; /* Timeout for select() */ DNSServiceRef main_ref, /* Main service reference */ fax_ipp_ref, /* IPP fax service reference */ ipp_ref, /* IPP service reference */ ipp_tls_ref, /* IPP w/TLS service reference */ ipps_ref, /* IPP service reference */ local_fax_ipp_ref, /* Local IPP fax service reference */ local_ipp_ref, /* Local IPP service reference */ local_ipp_tls_ref, /* Local IPP w/TLS service reference */ local_ipps_ref, /* Local IPP service reference */ local_printer_ref, /* Local LPD service reference */ pdl_datastream_ref, /* AppSocket service reference */ printer_ref, /* LPD service reference */ riousbprint_ref; /* Remote IO service reference */ #endif /* HAVE_DNSSD */ #ifdef HAVE_AVAHI AvahiClient *client; /* Client information */ int error; /* Error code, if any */ #endif /* HAVE_AVAHI */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ /* * Don't buffer stderr, and catch SIGTERM... */ setbuf(stderr, NULL); #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */ sigset(SIGTERM, sigterm_handler); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); action.sa_handler = sigterm_handler; sigaction(SIGTERM, &action, NULL); #else signal(SIGTERM, sigterm_handler); #endif /* HAVE_SIGSET */ /* * Check command-line... */ if (argc >= 6) exec_backend(argv); else if (argc != 1) { _cupsLangPrintf(stderr, _("Usage: %s job-id user title copies options [file]"), argv[0]); return (1); } /* * Only do discovery when run as "dnssd"... */ if ((name = strrchr(argv[0], '/')) != NULL) name ++; else name = argv[0]; if (strcmp(name, "dnssd")) return (0); /* * Create an array to track devices... */ devices = cupsArrayNew((cups_array_func_t)compare_devices, NULL); /* * Browse for different kinds of printers... */ #ifdef HAVE_DNSSD if (DNSServiceCreateConnection(&main_ref) != kDNSServiceErr_NoError) { perror("ERROR: Unable to create service connection"); return (1); } fd = DNSServiceRefSockFD(main_ref); fax_ipp_ref = main_ref; DNSServiceBrowse(&fax_ipp_ref, kDNSServiceFlagsShareConnection, 0, "_fax-ipp._tcp", NULL, browse_callback, devices); ipp_ref = main_ref; DNSServiceBrowse(&ipp_ref, kDNSServiceFlagsShareConnection, 0, "_ipp._tcp", NULL, browse_callback, devices); ipp_tls_ref = main_ref; DNSServiceBrowse(&ipp_tls_ref, kDNSServiceFlagsShareConnection, 0, "_ipp-tls._tcp", NULL, browse_callback, devices); ipps_ref = main_ref; DNSServiceBrowse(&ipps_ref, kDNSServiceFlagsShareConnection, 0, "_ipps._tcp", NULL, browse_callback, devices); local_fax_ipp_ref = main_ref; DNSServiceBrowse(&local_fax_ipp_ref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexLocalOnly, "_fax-ipp._tcp", NULL, browse_local_callback, devices); local_ipp_ref = main_ref; DNSServiceBrowse(&local_ipp_ref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexLocalOnly, "_ipp._tcp", NULL, browse_local_callback, devices); local_ipp_tls_ref = main_ref; DNSServiceBrowse(&local_ipp_tls_ref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexLocalOnly, "_ipp-tls._tcp", NULL, browse_local_callback, devices); local_ipps_ref = main_ref; DNSServiceBrowse(&local_ipps_ref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexLocalOnly, "_ipps._tcp", NULL, browse_local_callback, devices); local_printer_ref = main_ref; DNSServiceBrowse(&local_printer_ref, kDNSServiceFlagsShareConnection, kDNSServiceInterfaceIndexLocalOnly, "_printer._tcp", NULL, browse_local_callback, devices); pdl_datastream_ref = main_ref; DNSServiceBrowse(&pdl_datastream_ref, kDNSServiceFlagsShareConnection, 0, "_pdl-datastream._tcp", NULL, browse_callback, devices); printer_ref = main_ref; DNSServiceBrowse(&printer_ref, kDNSServiceFlagsShareConnection, 0, "_printer._tcp", NULL, browse_callback, devices); riousbprint_ref = main_ref; DNSServiceBrowse(&riousbprint_ref, kDNSServiceFlagsShareConnection, 0, "_riousbprint._tcp", NULL, browse_callback, devices); #endif /* HAVE_DNSSD */ #ifdef HAVE_AVAHI if ((simple_poll = avahi_simple_poll_new()) == NULL) { fputs("DEBUG: Unable to create Avahi simple poll object.\n", stderr); return (0); } avahi_simple_poll_set_func(simple_poll, poll_callback, NULL); client = avahi_client_new(avahi_simple_poll_get(simple_poll), 0, client_callback, simple_poll, &error); if (!client) { fputs("DEBUG: Unable to create Avahi client.\n", stderr); return (0); } browsers = 6; avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_fax-ipp._tcp", NULL, 0, browse_callback, devices); avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_ipp._tcp", NULL, 0, browse_callback, devices); avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_ipp-tls._tcp", NULL, 0, browse_callback, devices); avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_ipps._tcp", NULL, 0, browse_callback, devices); avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_pdl-datastream._tcp", NULL, 0, browse_callback, devices); avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_printer._tcp", NULL, 0, browse_callback, devices); #endif /* HAVE_AVAHI */ /* * Loop until we are killed... */ while (!job_canceled) { int announce = 0; /* Announce printers? */ #ifdef HAVE_DNSSD FD_ZERO(&input); FD_SET(fd, &input); timeout.tv_sec = 0; timeout.tv_usec = 500000; if (select(fd + 1, &input, NULL, NULL, &timeout) < 0) continue; if (FD_ISSET(fd, &input)) { /* * Process results of our browsing... */ DNSServiceProcessResult(main_ref); } else announce = 1; #elif defined(HAVE_AVAHI) got_data = 0; if ((error = avahi_simple_poll_iterate(simple_poll, 500)) > 0) { /* * We've been told to exit the loop. Perhaps the connection to * Avahi failed. */ break; } if (!got_data) announce = 1; #endif /* HAVE_DNSSD */ /* fprintf(stderr, "DEBUG: announce=%d\n", announce);*/ if (announce) { /* * Announce any devices we've found... */ #ifdef HAVE_DNSSD DNSServiceErrorType status; /* DNS query status */ #endif /* HAVE_DNSSD */ cups_device_t *best; /* Best matching device */ char device_uri[1024]; /* Device URI */ int count; /* Number of queries */ int sent; /* Number of sent */ for (device = (cups_device_t *)cupsArrayFirst(devices), best = NULL, count = 0, sent = 0; device; device = (cups_device_t *)cupsArrayNext(devices)) { if (device->sent) sent ++; if (device->ref) count ++; if (!device->ref && !device->sent) { /* * Found the device, now get the TXT record(s) for it... */ if (count < 50) { fprintf(stderr, "DEBUG: Querying \"%s\"...\n", device->fullName); #ifdef HAVE_DNSSD device->ref = main_ref; status = DNSServiceQueryRecord(&(device->ref), kDNSServiceFlagsShareConnection, 0, device->fullName, kDNSServiceType_TXT, kDNSServiceClass_IN, query_callback, device); if (status != kDNSServiceErr_NoError) fprintf(stderr, "ERROR: Unable to query \"%s\" for TXT records: %d\n", device->fullName, status); /* Users never see this */ else count ++; #else if ((device->ref = avahi_record_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, device->fullName, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_TXT, 0, query_callback, device)) == NULL) fprintf(stderr, "ERROR: Unable to query \"%s\" for TXT records: %s\n", device->fullName, avahi_strerror(avahi_client_errno(client))); /* Users never see this */ else count ++; #endif /* HAVE_AVAHI */ } } else if (!device->sent) { #ifdef HAVE_DNSSD /* * Got the TXT records, now report the device... */ DNSServiceRefDeallocate(device->ref); #else avahi_record_browser_free(device->ref); #endif /* HAVE_DNSSD */ device->ref = NULL; if (!best) best = device; else if (_cups_strcasecmp(best->name, device->name) || _cups_strcasecmp(best->domain, device->domain)) { unquote(uriName, best->fullName, sizeof(uriName)); if (best->uuid) httpAssembleURIf(HTTP_URI_CODING_ALL, device_uri, sizeof(device_uri), "dnssd", NULL, uriName, 0, best->cups_shared ? "/cups?uuid=%s" : "/?uuid=%s", best->uuid); else httpAssembleURI(HTTP_URI_CODING_ALL, device_uri, sizeof(device_uri), "dnssd", NULL, uriName, 0, best->cups_shared ? "/cups" : "/"); cupsBackendReport("network", device_uri, best->make_and_model, best->name, best->device_id, NULL); best->sent = 1; best = device; sent ++; } else if (best->priority > device->priority || (best->priority == device->priority && best->type < device->type)) { best->sent = 1; best = device; sent ++; } else { device->sent = 1; sent ++; } } } if (best) { unquote(uriName, best->fullName, sizeof(uriName)); if (best->uuid) httpAssembleURIf(HTTP_URI_CODING_ALL, device_uri, sizeof(device_uri), "dnssd", NULL, uriName, 0, best->cups_shared ? "/cups?uuid=%s" : "/?uuid=%s", best->uuid); else httpAssembleURI(HTTP_URI_CODING_ALL, device_uri, sizeof(device_uri), "dnssd", NULL, uriName, 0, best->cups_shared ? "/cups" : "/"); cupsBackendReport("network", device_uri, best->make_and_model, best->name, best->device_id, NULL); best->sent = 1; sent ++; } fprintf(stderr, "DEBUG: sent=%d, count=%d\n", sent, count); #ifdef HAVE_AVAHI if (sent == cupsArrayCount(devices) && browsers == 0) #else if (sent == cupsArrayCount(devices)) #endif /* HAVE_AVAHI */ break; } } return (CUPS_BACKEND_OK); } #ifdef HAVE_DNSSD /* * 'browse_callback()' - Browse devices. */ static void browse_callback( DNSServiceRef sdRef, /* I - Service reference */ DNSServiceFlags flags, /* I - Option flags */ uint32_t interfaceIndex, /* I - Interface number */ DNSServiceErrorType errorCode, /* I - Error, if any */ const char *serviceName, /* I - Name of service/device */ const char *regtype, /* I - Type of service */ const char *replyDomain, /* I - Service domain */ void *context) /* I - Devices array */ { fprintf(stderr, "DEBUG2: browse_callback(sdRef=%p, flags=%x, " "interfaceIndex=%d, errorCode=%d, serviceName=\"%s\", " "regtype=\"%s\", replyDomain=\"%s\", context=%p)\n", sdRef, flags, interfaceIndex, errorCode, serviceName, regtype, replyDomain, context); /* * Only process "add" data... */ if (errorCode != kDNSServiceErr_NoError || !(flags & kDNSServiceFlagsAdd)) return; /* * Get the device... */ get_device((cups_array_t *)context, serviceName, regtype, replyDomain); } /* * 'browse_local_callback()' - Browse local devices. */ static void browse_local_callback( DNSServiceRef sdRef, /* I - Service reference */ DNSServiceFlags flags, /* I - Option flags */ uint32_t interfaceIndex, /* I - Interface number */ DNSServiceErrorType errorCode, /* I - Error, if any */ const char *serviceName, /* I - Name of service/device */ const char *regtype, /* I - Type of service */ const char *replyDomain, /* I - Service domain */ void *context) /* I - Devices array */ { cups_device_t *device; /* Device */ fprintf(stderr, "DEBUG2: browse_local_callback(sdRef=%p, flags=%x, " "interfaceIndex=%d, errorCode=%d, serviceName=\"%s\", " "regtype=\"%s\", replyDomain=\"%s\", context=%p)\n", sdRef, flags, interfaceIndex, errorCode, serviceName, regtype, replyDomain, context); /* * Only process "add" data... */ if (errorCode != kDNSServiceErr_NoError || !(flags & kDNSServiceFlagsAdd)) return; /* * Get the device... */ device = get_device((cups_array_t *)context, serviceName, regtype, replyDomain); /* * Hide locally-registered devices... */ fprintf(stderr, "DEBUG: Hiding local printer \"%s\"...\n", device->fullName); device->sent = 1; } #endif /* HAVE_DNSSD */ #ifdef HAVE_AVAHI /* * 'browse_callback()' - Browse devices. */ static void browse_callback( AvahiServiceBrowser *browser, /* I - Browser */ AvahiIfIndex interface, /* I - Interface index (unused) */ AvahiProtocol protocol, /* I - Network protocol (unused) */ AvahiBrowserEvent event, /* I - What happened */ const char *name, /* I - Service name */ const char *type, /* I - Registration type */ const char *domain, /* I - Domain */ AvahiLookupResultFlags flags, /* I - Flags */ void *context) /* I - Devices array */ { AvahiClient *client = avahi_service_browser_get_client(browser); /* Client information */ (void)interface; (void)protocol; (void)context; switch (event) { case AVAHI_BROWSER_FAILURE: fprintf(stderr, "DEBUG: browse_callback: %s\n", avahi_strerror(avahi_client_errno(client))); avahi_simple_poll_quit(simple_poll); break; case AVAHI_BROWSER_NEW: /* * This object is new on the network. */ if (flags & AVAHI_LOOKUP_RESULT_LOCAL) { /* * This comes from the local machine so ignore it. */ fprintf(stderr, "DEBUG: Ignoring local service %s.\n", name); } else { /* * Create a device entry for it if it doesn't yet exist. */ get_device((cups_array_t *)context, name, type, domain); } break; case AVAHI_BROWSER_REMOVE: case AVAHI_BROWSER_CACHE_EXHAUSTED: break; case AVAHI_BROWSER_ALL_FOR_NOW: browsers--; break; } } /* * 'client_callback()' - Avahi client callback function. */ static void client_callback( AvahiClient *client, /* I - Client information (unused) */ AvahiClientState state, /* I - Current state */ void *context) /* I - User data (unused) */ { (void)client; (void)context; /* * If the connection drops, quit. */ if (state == AVAHI_CLIENT_FAILURE) { fputs("DEBUG: Avahi connection failed.\n", stderr); avahi_simple_poll_quit(simple_poll); } } #endif /* HAVE_AVAHI */ /* * 'compare_devices()' - Compare two devices. */ static int /* O - Result of comparison */ compare_devices(cups_device_t *a, /* I - First device */ cups_device_t *b) /* I - Second device */ { return (strcmp(a->name, b->name)); } /* * 'exec_backend()' - Execute the backend that corresponds to the * resolved service name. */ static void exec_backend(char **argv) /* I - Command-line arguments */ { const char *resolved_uri, /* Resolved device URI */ *cups_serverbin; /* Location of programs */ char scheme[1024], /* Scheme from URI */ *ptr, /* Pointer into scheme */ filename[1024]; /* Backend filename */ /* * Resolve the device URI... */ job_canceled = -1; while ((resolved_uri = cupsBackendDeviceURI(argv)) == NULL) { _cupsLangPrintFilter(stderr, "INFO", _("Unable to locate printer.")); sleep(10); if (getenv("CLASS") != NULL) exit(CUPS_BACKEND_FAILED); } /* * Extract the scheme from the URI... */ strlcpy(scheme, resolved_uri, sizeof(scheme)); if ((ptr = strchr(scheme, ':')) != NULL) *ptr = '\0'; /* * Get the filename of the backend... */ if ((cups_serverbin = getenv("CUPS_SERVERBIN")) == NULL) cups_serverbin = CUPS_SERVERBIN; snprintf(filename, sizeof(filename), "%s/backend/%s", cups_serverbin, scheme); /* * Overwrite the device URI and run the new backend... */ setenv("DEVICE_URI", resolved_uri, 1); argv[0] = (char *)resolved_uri; fprintf(stderr, "DEBUG: Executing backend \"%s\"...\n", filename); execv(filename, argv); fprintf(stderr, "ERROR: Unable to execute backend \"%s\": %s\n", filename, strerror(errno)); exit(CUPS_BACKEND_STOP); } /* * 'device_type()' - Get DNS-SD type enumeration from string. */ static cups_devtype_t /* O - Device type */ device_type(const char *regtype) /* I - Service registration type */ { #ifdef HAVE_AVAHI if (!strcmp(regtype, "_ipp._tcp")) return (CUPS_DEVICE_IPP); else if (!strcmp(regtype, "_ipps._tcp") || !strcmp(regtype, "_ipp-tls._tcp")) return (CUPS_DEVICE_IPPS); else if (!strcmp(regtype, "_fax-ipp._tcp")) return (CUPS_DEVICE_FAX_IPP); else if (!strcmp(regtype, "_printer._tcp")) return (CUPS_DEVICE_PDL_DATASTREAM); #else if (!strcmp(regtype, "_ipp._tcp.")) return (CUPS_DEVICE_IPP); else if (!strcmp(regtype, "_ipps._tcp.") || !strcmp(regtype, "_ipp-tls._tcp.")) return (CUPS_DEVICE_IPPS); else if (!strcmp(regtype, "_fax-ipp._tcp.")) return (CUPS_DEVICE_FAX_IPP); else if (!strcmp(regtype, "_printer._tcp.")) return (CUPS_DEVICE_PRINTER); else if (!strcmp(regtype, "_pdl-datastream._tcp.")) return (CUPS_DEVICE_PDL_DATASTREAM); #endif /* HAVE_AVAHI */ return (CUPS_DEVICE_RIOUSBPRINT); } /* * 'get_device()' - Create or update a device. */ static cups_device_t * /* O - Device */ get_device(cups_array_t *devices, /* I - Device array */ const char *serviceName, /* I - Name of service/device */ const char *regtype, /* I - Type of service */ const char *replyDomain) /* I - Service domain */ { cups_device_t key, /* Search key */ *device; /* Device */ char fullName[kDNSServiceMaxDomainName]; /* Full name for query */ /* * See if this is a new device... */ key.name = (char *)serviceName; key.type = device_type(regtype); for (device = cupsArrayFind(devices, &key); device; device = cupsArrayNext(devices)) if (_cups_strcasecmp(device->name, key.name)) break; else if (device->type == key.type) { if (!_cups_strcasecmp(device->domain, "local.") && _cups_strcasecmp(device->domain, replyDomain)) { /* * Update the .local listing to use the "global" domain name instead. * The backend will try local lookups first, then the global domain name. */ free(device->domain); device->domain = strdup(replyDomain); #ifdef HAVE_DNSSD DNSServiceConstructFullName(fullName, device->name, regtype, replyDomain); #else /* HAVE_AVAHI */ avahi_service_name_join(fullName, kDNSServiceMaxDomainName, serviceName, regtype, replyDomain); #endif /* HAVE_DNSSD */ free(device->fullName); device->fullName = strdup(fullName); } return (device); } /* * Yes, add the device... */ device = calloc(sizeof(cups_device_t), 1); device->name = strdup(serviceName); device->domain = strdup(replyDomain); device->type = key.type; device->priority = 50; cupsArrayAdd(devices, device); /* * Set the "full name" of this service, which is used for queries... */ #ifdef HAVE_DNSSD DNSServiceConstructFullName(fullName, serviceName, regtype, replyDomain); #else /* HAVE_AVAHI */ avahi_service_name_join(fullName, kDNSServiceMaxDomainName, serviceName, regtype, replyDomain); #endif /* HAVE_DNSSD */ device->fullName = strdup(fullName); return (device); } #ifdef HAVE_AVAHI /* * 'poll_callback()' - Wait for input on the specified file descriptors. * * Note: This function is needed because avahi_simple_poll_iterate is broken * and always uses a timeout of 0 (!) milliseconds. * (https://github.com/lathiat/avahi/issues/127) */ static int /* O - Number of file descriptors matching */ poll_callback( struct pollfd *pollfds, /* I - File descriptors */ unsigned int num_pollfds, /* I - Number of file descriptors */ int timeout, /* I - Timeout in milliseconds (unused) */ void *context) /* I - User data (unused) */ { int val; /* Return value */ (void)timeout; (void)context; val = poll(pollfds, num_pollfds, 500); if (val < 0) fprintf(stderr, "DEBUG: poll_callback: %s\n", strerror(errno)); else if (val > 0) got_data = 1; return (val); } #endif /* HAVE_AVAHI */ #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) # ifdef HAVE_DNSSD /* * 'query_callback()' - Process query data. */ static void query_callback( DNSServiceRef sdRef, /* I - Service reference */ DNSServiceFlags flags, /* I - Data flags */ uint32_t interfaceIndex, /* I - Interface */ DNSServiceErrorType errorCode, /* I - Error, if any */ const char *fullName, /* I - Full service name */ uint16_t rrtype, /* I - Record type */ uint16_t rrclass, /* I - Record class */ uint16_t rdlen, /* I - Length of record data */ const void *rdata, /* I - Record data */ uint32_t ttl, /* I - Time-to-live */ void *context) /* I - Device */ { # else /* * 'query_callback()' - Process query data. */ static void query_callback( AvahiRecordBrowser *browser, /* I - Record browser */ AvahiIfIndex interfaceIndex, /* I - Interface index (unused) */ AvahiProtocol protocol, /* I - Network protocol (unused) */ AvahiBrowserEvent event, /* I - What happened? */ const char *fullName, /* I - Service name */ uint16_t rrclass, /* I - Record class */ uint16_t rrtype, /* I - Record type */ const void *rdata, /* I - TXT record */ size_t rdlen, /* I - Length of TXT record */ AvahiLookupResultFlags flags, /* I - Flags */ void *context) /* I - Device */ { AvahiClient *client = avahi_record_browser_get_client(browser); /* Client information */ # endif /* HAVE_DNSSD */ char *ptr; /* Pointer into string */ cups_device_t *device = (cups_device_t *)context; /* Device */ const uint8_t *data, /* Pointer into data */ *datanext, /* Next key/value pair */ *dataend; /* End of entire TXT record */ uint8_t datalen; /* Length of current key/value pair */ char key[256], /* Key string */ value[256], /* Value string */ make_and_model[512], /* Manufacturer and model */ model[256], /* Model */ pdl[256], /* PDL */ device_id[2048]; /* 1284 device ID */ # ifdef HAVE_DNSSD fprintf(stderr, "DEBUG2: query_callback(sdRef=%p, flags=%x, " "interfaceIndex=%d, errorCode=%d, fullName=\"%s\", " "rrtype=%u, rrclass=%u, rdlen=%u, rdata=%p, ttl=%u, " "context=%p)\n", sdRef, flags, interfaceIndex, errorCode, fullName, rrtype, rrclass, rdlen, rdata, ttl, context); /* * Only process "add" data... */ if (errorCode != kDNSServiceErr_NoError || !(flags & kDNSServiceFlagsAdd)) return; # else fprintf(stderr, "DEBUG2: query_callback(browser=%p, interfaceIndex=%d, " "protocol=%d, event=%d, fullName=\"%s\", rrclass=%u, " "rrtype=%u, rdata=%p, rdlen=%u, flags=%x, context=%p)\n", browser, interfaceIndex, protocol, event, fullName, rrclass, rrtype, rdata, (unsigned)rdlen, flags, context); /* * Only process "add" data... */ if (event != AVAHI_BROWSER_NEW) { if (event == AVAHI_BROWSER_FAILURE) fprintf(stderr, "ERROR: %s\n", avahi_strerror(avahi_client_errno(client))); return; } # endif /* HAVE_DNSSD */ /* * Pull out the priority and make and model from the TXT * record and save it... */ device_id[0] = '\0'; make_and_model[0] = '\0'; pdl[0] = '\0'; strlcpy(model, "Unknown", sizeof(model)); for (data = rdata, dataend = data + rdlen; data < dataend; data = datanext) { /* * Read a key/value pair starting with an 8-bit length. Since the * length is 8 bits and the size of the key/value buffers is 256, we * don't need to check for overflow... */ datalen = *data++; if (!datalen || (data + datalen) > dataend) break; datanext = data + datalen; for (ptr = key; data < datanext && *data != '='; data ++) *ptr++ = (char)*data; *ptr = '\0'; if (data < datanext && *data == '=') { data ++; if (data < datanext) memcpy(value, data, (size_t)(datanext - data)); value[datanext - data] = '\0'; fprintf(stderr, "DEBUG2: query_callback: \"%s=%s\".\n", key, value); } else { fprintf(stderr, "DEBUG2: query_callback: \"%s\" with no value.\n", key); continue; } if (!_cups_strncasecmp(key, "usb_", 4)) { /* * Add USB device ID information... */ ptr = device_id + strlen(device_id); snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%s:%s;", key + 4, value); } if (!_cups_strcasecmp(key, "usb_MFG") || !_cups_strcasecmp(key, "usb_MANU") || !_cups_strcasecmp(key, "usb_MANUFACTURER")) strlcpy(make_and_model, value, sizeof(make_and_model)); else if (!_cups_strcasecmp(key, "usb_MDL") || !_cups_strcasecmp(key, "usb_MODEL")) strlcpy(model, value, sizeof(model)); else if (!_cups_strcasecmp(key, "product") && !strstr(value, "Ghostscript")) { if (value[0] == '(') { /* * Strip parenthesis... */ if ((ptr = value + strlen(value) - 1) > value && *ptr == ')') *ptr = '\0'; strlcpy(model, value + 1, sizeof(model)); } else strlcpy(model, value, sizeof(model)); } else if (!_cups_strcasecmp(key, "ty")) { strlcpy(model, value, sizeof(model)); if ((ptr = strchr(model, ',')) != NULL) *ptr = '\0'; } else if (!_cups_strcasecmp(key, "pdl")) strlcpy(pdl, value, sizeof(pdl)); else if (!_cups_strcasecmp(key, "priority")) device->priority = atoi(value); else if ((device->type == CUPS_DEVICE_IPP || device->type == CUPS_DEVICE_IPPS || device->type == CUPS_DEVICE_PRINTER) && !_cups_strcasecmp(key, "printer-type")) { /* * This is a CUPS printer! */ device->cups_shared = 1; if (device->type == CUPS_DEVICE_PRINTER) device->sent = 1; } else if (!_cups_strcasecmp(key, "UUID")) device->uuid = strdup(value); } if (device->device_id) free(device->device_id); if (!device_id[0] && strcmp(model, "Unknown")) { if (make_and_model[0]) snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s;", make_and_model, model); else if (!_cups_strncasecmp(model, "designjet ", 10)) snprintf(device_id, sizeof(device_id), "MFG:HP;MDL:%s;", model + 10); else if (!_cups_strncasecmp(model, "stylus ", 7)) snprintf(device_id, sizeof(device_id), "MFG:EPSON;MDL:%s;", model + 7); else if ((ptr = strchr(model, ' ')) != NULL) { /* * Assume the first word is the make... */ memcpy(make_and_model, model, (size_t)(ptr - model)); make_and_model[ptr - model] = '\0'; snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s;", make_and_model, ptr + 1); } } if (device_id[0] && !strstr(device_id, "CMD:") && !strstr(device_id, "COMMAND SET:") && (strstr(pdl, "application/pdf") || strstr(pdl, "application/postscript") || strstr(pdl, "application/vnd.hp-PCL") || strstr(pdl, "image/"))) { value[0] = '\0'; if (strstr(pdl, "application/pdf")) strlcat(value, ",PDF", sizeof(value)); if (strstr(pdl, "application/postscript")) strlcat(value, ",PS", sizeof(value)); if (strstr(pdl, "application/vnd.hp-PCL")) strlcat(value, ",PCL", sizeof(value)); for (ptr = strstr(pdl, "image/"); ptr; ptr = strstr(ptr, "image/")) { char *valptr = value + strlen(value); /* Pointer into value */ if (valptr < (value + sizeof(value) - 1)) *valptr++ = ','; ptr += 6; while (isalnum(*ptr & 255) || *ptr == '-' || *ptr == '.') { if (isalnum(*ptr & 255) && valptr < (value + sizeof(value) - 1)) *valptr++ = (char)toupper(*ptr++ & 255); else break; } *valptr = '\0'; } ptr = device_id + strlen(device_id); snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "CMD:%s;", value + 1); } if (device_id[0]) device->device_id = strdup(device_id); else device->device_id = NULL; if (device->make_and_model) free(device->make_and_model); if (make_and_model[0]) { strlcat(make_and_model, " ", sizeof(make_and_model)); strlcat(make_and_model, model, sizeof(make_and_model)); device->make_and_model = strdup(make_and_model); } else device->make_and_model = strdup(model); } #endif /* HAVE_DNSSD || HAVE_AVAHI */ /* * 'sigterm_handler()' - Handle termination signals. */ static void sigterm_handler(int sig) /* I - Signal number (unused) */ { (void)sig; if (job_canceled) _exit(CUPS_BACKEND_OK); else job_canceled = 1; } /* * 'unquote()' - Unquote a name string. */ static void unquote(char *dst, /* I - Destination buffer */ const char *src, /* I - Source string */ size_t dstsize) /* I - Size of destination buffer */ { char *dstend = dst + dstsize - 1; /* End of destination buffer */ while (*src && dst < dstend) { if (*src == '\\') { src ++; if (isdigit(src[0] & 255) && isdigit(src[1] & 255) && isdigit(src[2] & 255)) { *dst++ = ((((src[0] - '0') * 10) + src[1] - '0') * 10) + src[2] - '0'; src += 3; } else *dst++ = *src++; } else *dst++ = *src ++; } *dst = '\0'; } cups-2.2.7/backend/ieee1284.c000664 000765 000024 00000027236 13255074424 016146 0ustar00msweetstaff000000 000000 /* * IEEE-1284 support functions for CUPS. * * Copyright 2007-2015 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include "backend-private.h" #include /* * 'backendGetDeviceID()' - Get the IEEE-1284 device ID string and * corresponding URI. */ int /* O - 0 on success, -1 on failure */ backendGetDeviceID( int fd, /* I - File descriptor */ char *device_id, /* O - 1284 device ID */ int device_id_size, /* I - Size of buffer */ char *make_model, /* O - Make/model */ int make_model_size, /* I - Size of buffer */ const char *scheme, /* I - URI scheme */ char *uri, /* O - Device URI */ int uri_size) /* I - Size of buffer */ { #ifdef __APPLE__ /* This function is a no-op */ (void)fd; (void)device_id; (void)device_id_size; (void)make_model; (void)make_model_size; (void)scheme; (void)uri; (void)uri_size; return (-1); #else /* Get the device ID from the specified file descriptor... */ # ifdef __linux int length; /* Length of device ID info */ int got_id = 0; # endif /* __linux */ # if defined(__sun) && defined(ECPPIOC_GETDEVID) struct ecpp_device_id did; /* Device ID buffer */ # endif /* __sun && ECPPIOC_GETDEVID */ char *ptr; /* Pointer into device ID */ DEBUG_printf(("backendGetDeviceID(fd=%d, device_id=%p, device_id_size=%d, " "make_model=%p, make_model_size=%d, scheme=\"%s\", " "uri=%p, uri_size=%d)\n", fd, device_id, device_id_size, make_model, make_model_size, scheme ? scheme : "(null)", uri, uri_size)); /* * Range check input... */ if (!device_id || device_id_size < 32) { DEBUG_puts("backendGetDeviceID: Bad args!"); return (-1); } if (make_model) *make_model = '\0'; if (fd >= 0) { /* * Get the device ID string... */ *device_id = '\0'; # ifdef __linux if (ioctl(fd, LPIOC_GET_DEVICE_ID((unsigned)device_id_size), device_id)) { /* * Linux has to implement things differently for every device it seems. * Since the standard parallel port driver does not provide a simple * ioctl() to get the 1284 device ID, we have to open the "raw" parallel * device corresponding to this port and do some negotiation trickery * to get the current device ID. */ if (uri && !strncmp(uri, "parallel:/dev/", 14)) { char devparport[16]; /* /dev/parportN */ int devparportfd, /* File descriptor for raw device */ mode; /* Port mode */ /* * Since the Linux parallel backend only supports 4 parallel port * devices, just grab the trailing digit and use it to construct a * /dev/parportN filename... */ snprintf(devparport, sizeof(devparport), "/dev/parport%s", uri + strlen(uri) - 1); if ((devparportfd = open(devparport, O_RDWR | O_NOCTTY)) != -1) { /* * Claim the device... */ if (!ioctl(devparportfd, PPCLAIM)) { fcntl(devparportfd, F_SETFL, fcntl(devparportfd, F_GETFL) | O_NONBLOCK); mode = IEEE1284_MODE_COMPAT; if (!ioctl(devparportfd, PPNEGOT, &mode)) { /* * Put the device into Device ID mode... */ mode = IEEE1284_MODE_NIBBLE | IEEE1284_DEVICEID; if (!ioctl(devparportfd, PPNEGOT, &mode)) { /* * Read the 1284 device ID... */ if ((length = read(devparportfd, device_id, (size_t)device_id_size - 1)) >= 2) { device_id[length] = '\0'; got_id = 1; } } } /* * Release the device... */ ioctl(devparportfd, PPRELEASE); } close(devparportfd); } } } else got_id = 1; if (got_id) { /* * Extract the length of the device ID string from the first two * bytes. The 1284 spec says the length is stored MSB first... */ length = (int)((((unsigned)device_id[0] & 255) << 8) + ((unsigned)device_id[1] & 255)); /* * Check to see if the length is larger than our buffer; first * assume that the vendor incorrectly implemented the 1284 spec, * and then limit the length to the size of our buffer... */ if (length > device_id_size || length < 14) length = (int)((((unsigned)device_id[1] & 255) << 8) + ((unsigned)device_id[0] & 255)); if (length > device_id_size) length = device_id_size; /* * The length field counts the number of bytes in the string * including the length field itself (2 bytes). The minimum * length for a valid/usable device ID is 14 bytes: * * MFG: ;MDL: ; * 2 + 4 + 1 + 5 + 1 + 1 */ if (length < 14) { /* * Can't use this device ID, so don't try to copy it... */ device_id[0] = '\0'; got_id = 0; } else { /* * Copy the device ID text to the beginning of the buffer and * nul-terminate. */ length -= 2; memmove(device_id, device_id + 2, (size_t)length); device_id[length] = '\0'; } } else { DEBUG_printf(("backendGetDeviceID: ioctl failed - %s\n", strerror(errno))); *device_id = '\0'; } # endif /* __linux */ # if defined(__sun) && defined(ECPPIOC_GETDEVID) did.mode = ECPP_CENTRONICS; did.len = device_id_size - 1; did.rlen = 0; did.addr = device_id; if (!ioctl(fd, ECPPIOC_GETDEVID, &did)) { /* * Nul-terminate the device ID text. */ if (did.rlen < (device_id_size - 1)) device_id[did.rlen] = '\0'; else device_id[device_id_size - 1] = '\0'; } # ifdef DEBUG else DEBUG_printf(("backendGetDeviceID: ioctl failed - %s\n", strerror(errno))); # endif /* DEBUG */ # endif /* __sun && ECPPIOC_GETDEVID */ } /* * Check whether device ID is valid. Turn line breaks and tabs to spaces and * reject device IDs with non-printable characters. */ for (ptr = device_id; *ptr; ptr ++) if (_cups_isspace(*ptr)) *ptr = ' '; else if ((*ptr & 255) < ' ' || *ptr == 127) { DEBUG_printf(("backendGetDeviceID: Bad device_id character %d.", *ptr & 255)); *device_id = '\0'; break; } DEBUG_printf(("backendGetDeviceID: device_id=\"%s\"\n", device_id)); if (scheme && uri) *uri = '\0'; if (!*device_id) return (-1); /* * Get the make and model... */ if (make_model) backendGetMakeModel(device_id, make_model, (size_t)make_model_size); /* * Then generate a device URI... */ if (scheme && uri && uri_size > 32) { int num_values; /* Number of keys and values */ cups_option_t *values; /* Keys and values in device ID */ const char *mfg, /* Manufacturer */ *mdl, /* Model */ *sern; /* Serial number */ char temp[256], /* Temporary manufacturer string */ *tempptr; /* Pointer into temp string */ /* * Get the make, model, and serial numbers... */ num_values = _cupsGet1284Values(device_id, &values); if ((sern = cupsGetOption("SERIALNUMBER", num_values, values)) == NULL) if ((sern = cupsGetOption("SERN", num_values, values)) == NULL) sern = cupsGetOption("SN", num_values, values); if ((mfg = cupsGetOption("MANUFACTURER", num_values, values)) == NULL) mfg = cupsGetOption("MFG", num_values, values); if ((mdl = cupsGetOption("MODEL", num_values, values)) == NULL) mdl = cupsGetOption("MDL", num_values, values); if (mfg) { if (!_cups_strcasecmp(mfg, "Hewlett-Packard")) mfg = "HP"; else if (!_cups_strcasecmp(mfg, "Lexmark International")) mfg = "Lexmark"; } else { strlcpy(temp, make_model, sizeof(temp)); if ((tempptr = strchr(temp, ' ')) != NULL) *tempptr = '\0'; mfg = temp; } if (!mdl) mdl = ""; if (!_cups_strncasecmp(mdl, mfg, strlen(mfg))) { mdl += strlen(mfg); while (isspace(*mdl & 255)) mdl ++; } /* * Generate the device URI from the manufacturer, make_model, and * serial number strings. */ httpAssembleURIf(HTTP_URI_CODING_ALL, uri, uri_size, scheme, NULL, mfg, 0, "/%s%s%s", mdl, sern ? "?serial=" : "", sern ? sern : ""); cupsFreeOptions(num_values, values); } return (0); #endif /* __APPLE__ */ } /* * 'backendGetMakeModel()' - Get the make and model string from the device ID. */ int /* O - 0 on success, -1 on failure */ backendGetMakeModel( const char *device_id, /* O - 1284 device ID */ char *make_model, /* O - Make/model */ size_t make_model_size) /* I - Size of buffer */ { int num_values; /* Number of keys and values */ cups_option_t *values; /* Keys and values */ const char *mfg, /* Manufacturer string */ *mdl, /* Model string */ *des; /* Description string */ DEBUG_printf(("backendGetMakeModel(device_id=\"%s\", make_model=%p, make_model_size=" CUPS_LLFMT ")\n", device_id, make_model, CUPS_LLCAST make_model_size)); /* * Range check input... */ if (!device_id || !*device_id || !make_model || make_model_size < 32) { DEBUG_puts("backendGetMakeModel: Bad args!"); return (-1); } *make_model = '\0'; /* * Look for the description field... */ num_values = _cupsGet1284Values(device_id, &values); if ((mdl = cupsGetOption("MODEL", num_values, values)) == NULL) mdl = cupsGetOption("MDL", num_values, values); if (mdl) { /* * Build a make-model string from the manufacturer and model attributes... */ if ((mfg = cupsGetOption("MANUFACTURER", num_values, values)) == NULL) mfg = cupsGetOption("MFG", num_values, values); if (!mfg || !_cups_strncasecmp(mdl, mfg, strlen(mfg))) { /* * Just copy the model string, since it has the manufacturer... */ _ppdNormalizeMakeAndModel(mdl, make_model, make_model_size); } else { /* * Concatenate the make and model... */ char temp[1024]; /* Temporary make and model */ snprintf(temp, sizeof(temp), "%s %s", mfg, mdl); _ppdNormalizeMakeAndModel(temp, make_model, make_model_size); } } else if ((des = cupsGetOption("DESCRIPTION", num_values, values)) != NULL || (des = cupsGetOption("DES", num_values, values)) != NULL) { /* * Make sure the description contains something useful, since some * printer manufacturers (HP) apparently don't follow the standards * they helped to define... * * Here we require the description to be 8 or more characters in length, * containing at least one space and one letter. */ if (strlen(des) >= 8) { const char *ptr; /* Pointer into description */ int letters, /* Number of letters seen */ spaces; /* Number of spaces seen */ for (ptr = des, letters = 0, spaces = 0; *ptr; ptr ++) { if (isspace(*ptr & 255)) spaces ++; else if (isalpha(*ptr & 255)) letters ++; if (spaces && letters) break; } if (spaces && letters) _ppdNormalizeMakeAndModel(des, make_model, make_model_size); } } if (!make_model[0]) { /* * Use "Unknown" as the printer make and model... */ strlcpy(make_model, "Unknown", make_model_size); } cupsFreeOptions(num_values, values); return (0); } cups-2.2.7/backend/ipp.c000664 000765 000024 00000307575 13255074424 015517 0ustar00msweetstaff000000 000000 /* * IPP backend for CUPS. * * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include "backend-private.h" #include #include #include #include #include #if defined(HAVE_GSSAPI) && defined(HAVE_XPC) # include # define kPMPrintUIToolAgent "com.apple.printuitool.agent" # define kPMStartJob 100 # define kPMWaitForJob 101 # ifdef HAVE_XPC_PRIVATE_H # include # else extern void xpc_connection_set_target_uid(xpc_connection_t connection, uid_t uid); # endif /* HAVE_XPC_PRIVATE_H */ #endif /* HAVE_GSSAPI && HAVE_XPC */ /* * Bits for job-state-reasons we care about... */ #define _CUPS_JSR_ACCOUNT_AUTHORIZATION_FAILED 0x01 #define _CUPS_JSR_ACCOUNT_CLOSED 0x02 #define _CUPS_JSR_ACCOUNT_INFO_NEEDED 0x04 #define _CUPS_JSR_ACCOUNT_LIMIT_REACHED 0x08 #define _CUPS_JSR_JOB_PASSWORD_WAIT 0x10 #define _CUPS_JSR_JOB_RELEASE_WAIT 0x20 #define _CUPS_JSR_DOCUMENT_FORMAT_ERROR 0x40 #define _CUPS_JSR_DOCUMENT_UNPRINTABLE 0x80 /* * Types... */ typedef struct _cups_monitor_s /**** Monitoring data ****/ { const char *uri, /* Printer URI */ *hostname, /* Hostname */ *user, /* Username */ *resource; /* Resource path */ int port, /* Port number */ version, /* IPP version */ job_id, /* Job ID for submitted job */ job_reasons, /* Job state reasons bits */ create_job, /* Support Create-Job? */ get_job_attrs; /* Support Get-Job-Attributes? */ const char *job_name; /* Job name for submitted job */ http_encryption_t encryption; /* Use encryption? */ ipp_jstate_t job_state; /* Current job state */ ipp_pstate_t printer_state; /* Current printer state */ int retryable; /* Is this a job that should be retried? */ } _cups_monitor_t; /* * Globals... */ static const char *auth_info_required; /* New auth-info-required value */ #if defined(HAVE_GSSAPI) && defined(HAVE_XPC) static pid_t child_pid = 0; /* Child process ID */ #endif /* HAVE_GSSAPI && HAVE_XPC */ static const char * const jattrs[] = /* Job attributes we want */ { "job-id", "job-impressions-completed", "job-media-sheets-completed", "job-name", "job-originating-user-name", "job-state", "job-state-reasons" }; static int job_canceled = 0, /* Job cancelled? */ uri_credentials = 0; /* Credentials supplied in URI? */ static char username[256] = "", /* Username for device URI */ *password = NULL; /* Password for device URI */ static const char * const pattrs[] = /* Printer attributes we want */ { #ifdef HAVE_LIBZ "compression-supported", #endif /* HAVE_LIBZ */ "copies-supported", "cups-version", "document-format-supported", "job-password-encryption-supported", "marker-colors", "marker-high-levels", "marker-levels", "marker-low-levels", "marker-message", "marker-names", "marker-types", "media-col-supported", "multiple-document-handling-supported", "operations-supported", "print-color-mode-supported", "printer-alert", "printer-alert-description", "printer-is-accepting-jobs", "printer-mandatory-job-attributes", "printer-state", "printer-state-message", "printer-state-reasons" }; static const char * const remote_job_states[] = { /* Remote job state keywords */ "+cups-remote-pending", "+cups-remote-pending-held", "+cups-remote-processing", "+cups-remote-stopped", "+cups-remote-canceled", "+cups-remote-aborted", "+cups-remote-completed" }; static _cups_mutex_t report_mutex = _CUPS_MUTEX_INITIALIZER; /* Mutex to control access */ static int num_attr_cache = 0; /* Number of cached attributes */ static cups_option_t *attr_cache = NULL; /* Cached attributes */ static cups_array_t *state_reasons; /* Array of printe-state-reasons keywords */ static char tmpfilename[1024] = ""; /* Temporary spool file name */ static char mandatory_attrs[1024] = ""; /* cupsMandatory value */ /* * Local functions... */ static void cancel_job(http_t *http, const char *uri, int id, const char *resource, const char *user, int version); static ipp_pstate_t check_printer_state(http_t *http, const char *uri, const char *resource, const char *user, int version); static void debug_attributes(ipp_t *ipp); static void *monitor_printer(_cups_monitor_t *monitor); static ipp_t *new_request(ipp_op_t op, int version, const char *uri, const char *user, const char *title, int num_options, cups_option_t *options, const char *compression, int copies, const char *format, _ppd_cache_t *pc, ppd_file_t *ppd, ipp_attribute_t *media_col_sup, ipp_attribute_t *doc_handling_sup, ipp_attribute_t *print_color_mode_sup); static const char *password_cb(const char *prompt, http_t *http, const char *method, const char *resource, int *user_data); static const char *quote_string(const char *s, char *q, size_t qsize); static void report_attr(ipp_attribute_t *attr); static void report_printer_state(ipp_t *ipp); #if defined(HAVE_GSSAPI) && defined(HAVE_XPC) static int run_as_user(char *argv[], uid_t uid, const char *device_uri, int fd); #endif /* HAVE_GSSAPI && HAVE_XPC */ static void sigterm_handler(int sig); static int timeout_cb(http_t *http, void *user_data); static void update_reasons(ipp_attribute_t *attr, const char *s); /* * 'main()' - Send a file to the printer or server. * * Usage: * * printer-uri job-id user title copies options [file] */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ int send_options; /* Send job options? */ int num_options; /* Number of printer options */ cups_option_t *options; /* Printer options */ const char *device_uri; /* Device URI */ char scheme[255], /* Scheme in URI */ hostname[1024], /* Hostname */ resource[1024], /* Resource info (printer name) */ addrname[256], /* Address name */ *optptr, /* Pointer to URI options */ *name, /* Name of option */ *value, /* Value of option */ sep; /* Separator character */ int password_tries = 0; /* Password tries */ http_addrlist_t *addrlist; /* Address of printer */ int snmp_enabled = 1; /* Is SNMP enabled? */ int snmp_fd, /* SNMP socket */ start_count, /* Page count via SNMP at start */ page_count, /* Page count via SNMP */ have_supplies; /* Printer supports supply levels? */ int num_files; /* Number of files to print */ char **files, /* Files to print */ *compatfile = NULL; /* Compatibility filename */ off_t compatsize = 0; /* Size of compatibility file */ int port; /* Port number (not used) */ char uri[HTTP_MAX_URI]; /* Updated URI without user/pass */ char print_job_name[1024]; /* Update job-name for Print-Job */ http_status_t http_status; /* Status of HTTP request */ ipp_status_t ipp_status; /* Status of IPP request */ http_t *http; /* HTTP connection */ ipp_t *request, /* IPP request */ *response, /* IPP response */ *supported; /* get-printer-attributes response */ time_t start_time; /* Time of first connect */ int contimeout; /* Connection timeout */ int delay, /* Delay for retries */ prev_delay; /* Previous delay */ const char *compression; /* Compression mode */ int waitjob, /* Wait for job complete? */ waitjob_tries = 0, /* Number of times we've waited */ waitprinter; /* Wait for printer ready? */ time_t waittime; /* Wait time for held jobs */ _cups_monitor_t monitor; /* Monitoring data */ ipp_attribute_t *job_id_attr; /* job-id attribute */ int job_id; /* job-id value */ ipp_attribute_t *job_sheets; /* job-media-sheets-completed */ ipp_attribute_t *job_state; /* job-state */ #ifdef HAVE_LIBZ ipp_attribute_t *compression_sup; /* compression-supported */ #endif /* HAVE_LIBZ */ ipp_attribute_t *copies_sup; /* copies-supported */ ipp_attribute_t *cups_version; /* cups-version */ ipp_attribute_t *encryption_sup; /* job-password-encryption-supported */ ipp_attribute_t *format_sup; /* document-format-supported */ ipp_attribute_t *job_auth; /* job-authorization-uri */ ipp_attribute_t *media_col_sup; /* media-col-supported */ ipp_attribute_t *operations_sup; /* operations-supported */ ipp_attribute_t *doc_handling_sup; /* multiple-document-handling-supported */ ipp_attribute_t *printer_state; /* printer-state attribute */ ipp_attribute_t *printer_accepting; /* printer-is-accepting-jobs */ ipp_attribute_t *print_color_mode_sup;/* Does printer support print-color-mode? */ int create_job = 0, /* Does printer support Create-Job? */ get_job_attrs = 0, /* Does printer support Get-Job-Attributes? */ send_document = 0, /* Does printer support Send-Document? */ validate_job = 0, /* Does printer support Validate-Job? */ copies, /* Number of copies for job */ copies_remaining; /* Number of copies remaining */ const char *content_type, /* CONTENT_TYPE environment variable */ *final_content_type, /* FINAL_CONTENT_TYPE environment var */ *document_format; /* document-format value */ int fd; /* File descriptor */ off_t bytes = 0; /* Bytes copied */ char buffer[16384]; /* Copy buffer */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ int version; /* IPP version */ ppd_file_t *ppd = NULL; /* PPD file */ _ppd_cache_t *pc = NULL; /* PPD cache and mapping data */ fd_set input; /* Input set for select() */ /* * Make sure status messages are not buffered... */ setbuf(stderr, NULL); /* * Ignore SIGPIPE and catch SIGTERM signals... */ #ifdef HAVE_SIGSET sigset(SIGPIPE, SIG_IGN); sigset(SIGTERM, sigterm_handler); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); action.sa_handler = SIG_IGN; sigaction(SIGPIPE, &action, NULL); sigemptyset(&action.sa_mask); sigaddset(&action.sa_mask, SIGTERM); action.sa_handler = sigterm_handler; sigaction(SIGTERM, &action, NULL); #else signal(SIGPIPE, SIG_IGN); signal(SIGTERM, sigterm_handler); #endif /* HAVE_SIGSET */ /* * Check command-line... */ if (argc == 1) { char *s; if ((s = strrchr(argv[0], '/')) != NULL) s ++; else s = argv[0]; printf("network %s \"Unknown\" \"%s (%s)\"\n", s, _cupsLangString(cupsLangDefault(), _("Internet Printing Protocol")), s); return (CUPS_BACKEND_OK); } else if (argc < 6) { _cupsLangPrintf(stderr, _("Usage: %s job-id user title copies options [file]"), argv[0]); return (CUPS_BACKEND_STOP); } /* * Get the device URI... */ while ((device_uri = cupsBackendDeviceURI(argv)) == NULL) { _cupsLangPrintFilter(stderr, "INFO", _("Unable to locate printer.")); sleep(10); if (getenv("CLASS") != NULL) return (CUPS_BACKEND_FAILED); } if ((auth_info_required = getenv("AUTH_INFO_REQUIRED")) == NULL) auth_info_required = "none"; state_reasons = _cupsArrayNewStrings(getenv("PRINTER_STATE_REASONS"), ','); #ifdef HAVE_GSSAPI /* * For Kerberos, become the printing user (if we can) to get the credentials * that way. */ if (!getuid() && (value = getenv("AUTH_UID")) != NULL) { uid_t uid = (uid_t)atoi(value); /* User ID */ # ifdef HAVE_XPC if (uid > 0) { if (argc == 6) return (run_as_user(argv, uid, device_uri, 0)); else { int status = 0; /* Exit status */ for (i = 6; i < argc && !status && !job_canceled; i ++) { if ((fd = open(argv[i], O_RDONLY)) >= 0) { status = run_as_user(argv, uid, device_uri, fd); close(fd); } else { _cupsLangPrintError("ERROR", _("Unable to open print file")); status = CUPS_BACKEND_FAILED; } } return (status); } } # else /* No XPC, just try to run as the user ID */ if (uid > 0) setuid(uid); # endif /* HAVE_XPC */ } #endif /* HAVE_GSSAPI */ /* * Get the (final) content type... */ if ((content_type = getenv("CONTENT_TYPE")) == NULL) content_type = "application/octet-stream"; if ((final_content_type = getenv("FINAL_CONTENT_TYPE")) == NULL) { final_content_type = content_type; if (!strncmp(final_content_type, "printer/", 8)) final_content_type = "application/vnd.cups-raw"; } /* * Extract the hostname and printer name from the URI... */ httpSeparateURI(HTTP_URI_CODING_ALL, device_uri, scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if (!port) port = IPP_PORT; /* Default to port 631 */ if (!strcmp(scheme, "https") || !strcmp(scheme, "ipps")) cupsSetEncryption(HTTP_ENCRYPT_ALWAYS); else cupsSetEncryption(HTTP_ENCRYPT_IF_REQUESTED); /* * See if there are any options... */ compression = NULL; version = 20; waitjob = 1; waitprinter = 1; contimeout = 7 * 24 * 60 * 60; if ((optptr = strchr(resource, '?')) != NULL) { /* * Yup, terminate the device name string and move to the first * character of the optptr... */ *optptr++ = '\0'; /* * Then parse the optptr... */ while (*optptr) { /* * Get the name... */ name = optptr; while (*optptr && *optptr != '=' && *optptr != '+' && *optptr != '&') optptr ++; if ((sep = *optptr) != '\0') *optptr++ = '\0'; if (sep == '=') { /* * Get the value... */ value = optptr; while (*optptr && *optptr != '+' && *optptr != '&') optptr ++; if (*optptr) *optptr++ = '\0'; } else value = (char *)""; /* * Process the option... */ if (!_cups_strcasecmp(name, "waitjob")) { /* * Wait for job completion? */ waitjob = !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true"); } else if (!_cups_strcasecmp(name, "waitprinter")) { /* * Wait for printer idle? */ waitprinter = !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true"); } else if (!_cups_strcasecmp(name, "encryption")) { /* * Enable/disable encryption? */ if (!_cups_strcasecmp(value, "always")) cupsSetEncryption(HTTP_ENCRYPT_ALWAYS); else if (!_cups_strcasecmp(value, "required")) cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); else if (!_cups_strcasecmp(value, "never")) cupsSetEncryption(HTTP_ENCRYPT_NEVER); else if (!_cups_strcasecmp(value, "ifrequested")) cupsSetEncryption(HTTP_ENCRYPT_IF_REQUESTED); else { _cupsLangPrintFilter(stderr, "ERROR", _("Unknown encryption option value: \"%s\"."), value); } } else if (!_cups_strcasecmp(name, "snmp")) { /* * Enable/disable SNMP stuff... */ snmp_enabled = !value[0] || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true"); } else if (!_cups_strcasecmp(name, "version")) { if (!strcmp(value, "1.0")) version = 10; else if (!strcmp(value, "1.1")) version = 11; else if (!strcmp(value, "2.0")) version = 20; else if (!strcmp(value, "2.1")) version = 21; else if (!strcmp(value, "2.2")) version = 22; else { _cupsLangPrintFilter(stderr, "ERROR", _("Unknown version option value: \"%s\"."), value); } } #ifdef HAVE_LIBZ else if (!_cups_strcasecmp(name, "compression")) { if (!_cups_strcasecmp(value, "true") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "gzip")) compression = "gzip"; else if (!_cups_strcasecmp(value, "deflate")) compression = "deflate"; else if (!_cups_strcasecmp(value, "false") || !_cups_strcasecmp(value, "no") || !_cups_strcasecmp(value, "off") || !_cups_strcasecmp(value, "none")) compression = "none"; } #endif /* HAVE_LIBZ */ else if (!_cups_strcasecmp(name, "contimeout")) { /* * Set the connection timeout... */ if (atoi(value) > 0) contimeout = atoi(value); } else { /* * Unknown option... */ _cupsLangPrintFilter(stderr, "ERROR", _("Unknown option \"%s\" with value \"%s\"."), name, value); } } } /* * If we have 7 arguments, print the file named on the command-line. * Otherwise, copy stdin to a temporary file and print the temporary * file. */ if (argc == 6) { num_files = 0; files = NULL; send_options = !_cups_strcasecmp(final_content_type, "application/pdf") || !_cups_strcasecmp(final_content_type, "application/vnd.cups-pdf") || !_cups_strncasecmp(final_content_type, "image/", 6); fputs("DEBUG: Sending stdin for job...\n", stderr); } else { /* * Point to the files on the command-line... */ num_files = argc - 6; files = argv + 6; send_options = 1; fprintf(stderr, "DEBUG: %d files to send in job...\n", num_files); } /* * Set the authentication info, if any... */ cupsSetPasswordCB2((cups_password_cb2_t)password_cb, &password_tries); if (username[0]) { /* * Use authentication information in the device URI... */ if ((password = strchr(username, ':')) != NULL) *password++ = '\0'; cupsSetUser(username); uri_credentials = 1; } else { /* * Try loading authentication information from the environment. */ const char *ptr = getenv("AUTH_USERNAME"); if (ptr) { strlcpy(username, ptr, sizeof(username)); cupsSetUser(ptr); } password = getenv("AUTH_PASSWORD"); } /* * Try finding the remote server... */ start_time = time(NULL); addrlist = backendLookup(hostname, port, &job_canceled); http = httpConnect2(hostname, port, addrlist, AF_UNSPEC, cupsEncryption(), 1, 0, NULL); httpSetTimeout(http, 30.0, timeout_cb, NULL); /* * See if the printer supports SNMP... */ if (snmp_enabled) snmp_fd = _cupsSNMPOpen(addrlist->addr.addr.sa_family); else snmp_fd = -1; if (snmp_fd >= 0) have_supplies = !backendSNMPSupplies(snmp_fd, &(addrlist->addr), &start_count, NULL); else have_supplies = start_count = 0; /* * Wait for data from the filter... */ if (num_files == 0) { if (!backendWaitLoop(snmp_fd, &(addrlist->addr), 0, backendNetworkSideCB)) return (CUPS_BACKEND_OK); else if ((bytes = read(0, buffer, sizeof(buffer))) <= 0) return (CUPS_BACKEND_OK); } /* * Try connecting to the remote server... */ delay = _cupsNextDelay(0, &prev_delay); do { fprintf(stderr, "DEBUG: Connecting to %s:%d\n", hostname, port); _cupsLangPrintFilter(stderr, "INFO", _("Connecting to printer.")); if (httpReconnect(http)) { int error = errno; /* Connection error */ if (http->status == HTTP_PKI_ERROR) update_reasons(NULL, "+cups-certificate-error"); if (job_canceled) break; if (getenv("CLASS") != NULL) { /* * If the CLASS environment variable is set, the job was submitted * to a class and not to a specific queue. In this case, we want * to abort immediately so that the job can be requeued on the next * available printer in the class. */ _cupsLangPrintFilter(stderr, "INFO", _("Unable to contact printer, queuing on next " "printer in class.")); /* * Sleep 5 seconds to keep the job from requeuing too rapidly... */ sleep(5); update_reasons(NULL, "-connecting-to-device"); return (CUPS_BACKEND_FAILED); } fprintf(stderr, "DEBUG: Connection error: %s\n", strerror(errno)); if (errno == ECONNREFUSED || errno == EHOSTDOWN || errno == EHOSTUNREACH || errno == ETIMEDOUT || errno == ENOTCONN) { if (contimeout && (time(NULL) - start_time) > contimeout) { _cupsLangPrintFilter(stderr, "ERROR", _("The printer is not responding.")); update_reasons(NULL, "-connecting-to-device"); return (CUPS_BACKEND_FAILED); } switch (error) { case EHOSTDOWN : _cupsLangPrintFilter(stderr, "WARNING", _("The printer may not exist or " "is unavailable at this time.")); break; case EHOSTUNREACH : default : _cupsLangPrintFilter(stderr, "WARNING", _("The printer is unreachable at this " "time.")); break; case ECONNREFUSED : _cupsLangPrintFilter(stderr, "WARNING", _("The printer is in use.")); break; } sleep((unsigned)delay); delay = _cupsNextDelay(delay, &prev_delay); } else { _cupsLangPrintFilter(stderr, "ERROR", _("The printer is not responding.")); sleep(30); } if (job_canceled) break; } else update_reasons(NULL, "-cups-certificate-error"); } while (http->fd < 0); if (job_canceled) return (CUPS_BACKEND_OK); else if (!http) return (CUPS_BACKEND_FAILED); if (httpIsEncrypted(http)) { /* * Validate TLS credentials... */ cups_array_t *creds; /* TLS credentials */ cups_array_t *lcreds = NULL; /* Loaded credentials */ http_trust_t trust; /* Trust level */ char credinfo[1024], /* Information on credentials */ lcredinfo[1024];/* Information on saved credentials */ static const char * const trusts[] = { NULL, "+cups-pki-invalid", "+cups-pki-changed", "+cups-pki-expired", NULL, "+cups-pki-unknown" }; /* Trust keywords */ static const char * const trust_msgs[] = { "Credentials are OK/trusted", "Credentials are invalid", "Credentials have changed", "Credentials are expired", "Credentials have been renewed", "Credentials are unknown/new" }; fputs("DEBUG: Connection is encrypted.\n", stderr); if (!httpCopyCredentials(http, &creds)) { trust = httpCredentialsGetTrust(creds, hostname); httpCredentialsString(creds, credinfo, sizeof(credinfo)); fprintf(stderr, "DEBUG: %s (%s)\n", trust_msgs[trust], cupsLastErrorString()); fprintf(stderr, "DEBUG: Printer credentials: %s\n", credinfo); if (!httpLoadCredentials(NULL, &lcreds, hostname)) { httpCredentialsString(lcreds, lcredinfo, sizeof(lcredinfo)); fprintf(stderr, "DEBUG: Stored credentials: %s\n", lcredinfo); } else fputs("DEBUG: No stored credentials.\n", stderr); update_reasons(NULL, "-cups-pki-invalid,cups-pki-changed,cups-pki-expired,cups-pki-unknown"); if (trusts[trust]) { update_reasons(NULL, trusts[trust]); return (CUPS_BACKEND_STOP); } if (!lcreds) { /* * Could not load the credentials, let's save the ones we have so we * can detect changes... */ httpSaveCredentials(NULL, creds, hostname); } httpFreeCredentials(lcreds); httpFreeCredentials(creds); } else { fputs("DEBUG: No printer credentials.\n", stderr); update_reasons(NULL, "cups-pki-unknown"); return (CUPS_BACKEND_STOP); } } update_reasons(NULL, "-connecting-to-device"); _cupsLangPrintFilter(stderr, "INFO", _("Connected to printer.")); fprintf(stderr, "DEBUG: Connected to %s:%d...\n", httpAddrString(http->hostaddr, addrname, sizeof(addrname)), httpAddrPort(http->hostaddr)); /* * Build a URI for the printer and fill the standard IPP attributes for * an IPP_PRINT_FILE request. We can't use the URI in argv[0] because it * might contain username:password information... */ httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), scheme, NULL, hostname, port, resource); /* * First validate the destination and see if the device supports multiple * copies... */ #ifdef HAVE_LIBZ compression_sup = NULL; #endif /* HAVE_LIBZ */ copies_sup = NULL; cups_version = NULL; encryption_sup = NULL; format_sup = NULL; media_col_sup = NULL; supported = NULL; operations_sup = NULL; doc_handling_sup = NULL; print_color_mode_sup = NULL; do { /* * Check for side-channel requests... */ backendCheckSideChannel(snmp_fd, http->hostaddr); /* * Build the IPP request... */ request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); ippSetVersion(request, version / 10, version % 10); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs); /* * Do the request... */ fputs("DEBUG: Getting supported attributes...\n", stderr); if (http->version < HTTP_1_1) { fprintf(stderr, "DEBUG: Printer responded with HTTP version %d.%d.\n", http->version / 100, http->version % 100); update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-wrong-http-version"); } supported = cupsDoRequest(http, request, resource); ipp_status = cupsLastError(); fprintf(stderr, "DEBUG: Get-Printer-Attributes: %s (%s)\n", ippErrorString(ipp_status), cupsLastErrorString()); if (ipp_status <= IPP_OK_CONFLICT) password_tries = 0; else { fprintf(stderr, "DEBUG: Get-Printer-Attributes returned %s.\n", ippErrorString(ipp_status)); if (ipp_status == IPP_PRINTER_BUSY || ipp_status == IPP_SERVICE_UNAVAILABLE) { if (contimeout && (time(NULL) - start_time) > contimeout) { _cupsLangPrintFilter(stderr, "ERROR", _("The printer is not responding.")); return (CUPS_BACKEND_FAILED); } _cupsLangPrintFilter(stderr, "INFO", _("The printer is in use.")); report_printer_state(supported); sleep((unsigned)delay); delay = _cupsNextDelay(delay, &prev_delay); } else if ((ipp_status == IPP_BAD_REQUEST || ipp_status == IPP_VERSION_NOT_SUPPORTED) && version > 10) { /* * Switch to IPP/1.1 or IPP/1.0... */ if (version >= 20) { _cupsLangPrintFilter(stderr, "INFO", _("Preparing to print.")); fprintf(stderr, "DEBUG: The printer does not support IPP/%d.%d, trying " "IPP/1.1.\n", version / 10, version % 10); version = 11; } else { _cupsLangPrintFilter(stderr, "INFO", _("Preparing to print.")); fprintf(stderr, "DEBUG: The printer does not support IPP/%d.%d, trying " "IPP/1.0.\n", version / 10, version % 10); version = 10; } httpReconnect(http); } else if (ipp_status == IPP_NOT_FOUND) { _cupsLangPrintFilter(stderr, "ERROR", _("The printer configuration is incorrect or the " "printer no longer exists.")); ippDelete(supported); return (CUPS_BACKEND_STOP); } else if (ipp_status == IPP_FORBIDDEN || ipp_status == IPP_AUTHENTICATION_CANCELED) { const char *www_auth = httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE); /* WWW-Authenticate field value */ if (!strncmp(www_auth, "Negotiate", 9)) auth_info_required = "negotiate"; else if (www_auth[0]) auth_info_required = "username,password"; fprintf(stderr, "ATTR: auth-info-required=%s\n", auth_info_required); return (CUPS_BACKEND_AUTH_REQUIRED); } else if (ipp_status != IPP_NOT_AUTHORIZED) { _cupsLangPrintFilter(stderr, "ERROR", _("Unable to get printer status.")); sleep(10); httpReconnect(http); } ippDelete(supported); supported = NULL; continue; } if (!getenv("CLASS")) { /* * Check printer-is-accepting-jobs = false and printer-state-reasons for the * "spool-area-full" keyword... */ int busy = 0; if ((printer_accepting = ippFindAttribute(supported, "printer-is-accepting-jobs", IPP_TAG_BOOLEAN)) != NULL && !printer_accepting->values[0].boolean) busy = 1; else if (!printer_accepting) update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-printer-is-accepting-jobs"); if ((printer_state = ippFindAttribute(supported, "printer-state-reasons", IPP_TAG_KEYWORD)) == NULL) { update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-printer-state-reasons"); } else if (!busy) { for (i = 0; i < printer_state->num_values; i ++) { if (!strcmp(printer_state->values[0].string.text, "spool-area-full") || !strncmp(printer_state->values[0].string.text, "spool-area-full-", 16)) { busy = 1; break; } } } if (busy) { _cupsLangPrintFilter(stderr, "INFO", _("The printer is in use.")); report_printer_state(supported); sleep((unsigned)delay); delay = _cupsNextDelay(delay, &prev_delay); ippDelete(supported); supported = NULL; ipp_status = IPP_STATUS_ERROR_BUSY; continue; } } /* * Check for supported attributes... */ #ifdef HAVE_LIBZ if ((compression_sup = ippFindAttribute(supported, "compression-supported", IPP_TAG_KEYWORD)) != NULL) { /* * Check whether the requested compression is supported and/or default to * compression if supported... */ if (compression && !ippContainsString(compression_sup, compression)) { fprintf(stderr, "DEBUG: Printer does not support the requested " "compression value \"%s\".\n", compression); compression = NULL; } else if (!compression && (!strcmp(final_content_type, "image/pwg-raster") || !strcmp(final_content_type, "image/urf"))) { if (ippContainsString(compression_sup, "gzip")) compression = "gzip"; else if (ippContainsString(compression_sup, "deflate")) compression = "deflate"; if (compression) fprintf(stderr, "DEBUG: Automatically using \"%s\" compression.\n", compression); } } #endif /* HAVE_LIBZ */ if ((copies_sup = ippFindAttribute(supported, "copies-supported", IPP_TAG_RANGE)) != NULL) { /* * Has the "copies-supported" attribute - does it have an upper * bound > 1? */ fprintf(stderr, "DEBUG: copies-supported=%d-%d\n", copies_sup->values[0].range.lower, copies_sup->values[0].range.upper); if (copies_sup->values[0].range.upper <= 1) copies_sup = NULL; /* No */ } cups_version = ippFindAttribute(supported, "cups-version", IPP_TAG_TEXT); encryption_sup = ippFindAttribute(supported, "job-password-encryption-supported", IPP_TAG_KEYWORD); if ((format_sup = ippFindAttribute(supported, "document-format-supported", IPP_TAG_MIMETYPE)) != NULL) { 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); } if ((media_col_sup = ippFindAttribute(supported, "media-col-supported", IPP_TAG_KEYWORD)) != NULL) { fprintf(stderr, "DEBUG: media-col-supported (%d values)\n", media_col_sup->num_values); for (i = 0; i < media_col_sup->num_values; i ++) fprintf(stderr, "DEBUG: [%d] = \"%s\"\n", i, media_col_sup->values[i].string.text); } print_color_mode_sup = ippFindAttribute(supported, "print-color-mode-supported", IPP_TAG_KEYWORD); if ((operations_sup = ippFindAttribute(supported, "operations-supported", IPP_TAG_ENUM)) != NULL) { fprintf(stderr, "DEBUG: operations-supported (%d values)\n", operations_sup->num_values); for (i = 0; i < operations_sup->num_values; i ++) fprintf(stderr, "DEBUG: [%d] = %s\n", i, ippOpString(operations_sup->values[i].integer)); for (i = 0; i < operations_sup->num_values; i ++) if (operations_sup->values[i].integer == IPP_PRINT_JOB) break; if (i >= operations_sup->num_values) update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-print-job"); for (i = 0; i < operations_sup->num_values; i ++) if (operations_sup->values[i].integer == IPP_CANCEL_JOB) break; if (i >= operations_sup->num_values) update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-cancel-job"); for (i = 0; i < operations_sup->num_values; i ++) if (operations_sup->values[i].integer == IPP_GET_JOB_ATTRIBUTES) break; if (i >= operations_sup->num_values) update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-get-job-attributes"); for (i = 0; i < operations_sup->num_values; i ++) if (operations_sup->values[i].integer == IPP_GET_PRINTER_ATTRIBUTES) break; if (i >= operations_sup->num_values) update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-get-printer-attributes"); for (i = 0; i < operations_sup->num_values; i ++) { if (operations_sup->values[i].integer == IPP_VALIDATE_JOB) validate_job = 1; else if (operations_sup->values[i].integer == IPP_CREATE_JOB) create_job = 1; else if (operations_sup->values[i].integer == IPP_SEND_DOCUMENT) send_document = 1; else if (operations_sup->values[i].integer == IPP_GET_JOB_ATTRIBUTES) get_job_attrs = 1; } if (create_job && !send_document) { fputs("DEBUG: Printer supports Create-Job but not Send-Document.\n", stderr); create_job = 0; update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-send-document"); } if (!validate_job) update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-validate-job"); } else update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-operations-supported"); doc_handling_sup = ippFindAttribute(supported, "multiple-document-handling-supported", IPP_TAG_KEYWORD); report_printer_state(supported); } while (!job_canceled && ipp_status > IPP_OK_CONFLICT); if (job_canceled) return (CUPS_BACKEND_OK); /* * See if the printer is accepting jobs and is not stopped; if either * condition is true and we are printing to a class, requeue the job... */ if (getenv("CLASS") != NULL) { printer_state = ippFindAttribute(supported, "printer-state", IPP_TAG_ENUM); printer_accepting = ippFindAttribute(supported, "printer-is-accepting-jobs", IPP_TAG_BOOLEAN); if (printer_state == NULL || (printer_state->values[0].integer > IPP_PRINTER_PROCESSING && waitprinter) || printer_accepting == NULL || !printer_accepting->values[0].boolean) { /* * If the CLASS environment variable is set, the job was submitted * to a class and not to a specific queue. In this case, we want * to abort immediately so that the job can be requeued on the next * available printer in the class. */ _cupsLangPrintFilter(stderr, "INFO", _("Unable to contact printer, queuing on next " "printer in class.")); ippDelete(supported); httpClose(http); /* * Sleep 5 seconds to keep the job from requeuing too rapidly... */ sleep(5); return (CUPS_BACKEND_FAILED); } } /* * See if the printer supports multiple copies... */ copies = atoi(argv[4]); if (copies_sup || argc < 7) copies_remaining = 1; else copies_remaining = copies; /* * Prepare remaining printing options... */ options = NULL; if (send_options) { num_options = cupsParseOptions(argv[5], 0, &options); if (!cups_version && media_col_sup) { /* * Load the PPD file and generate PWG attribute mapping information... */ ppd_attr_t *mandatory; /* cupsMandatory value */ ppd = ppdOpenFile(getenv("PPD")); pc = _ppdCacheCreateWithPPD(ppd); ppdMarkDefaults(ppd); cupsMarkOptions(ppd, num_options, options); if ((mandatory = ppdFindAttr(ppd, "cupsMandatory", NULL)) != NULL) strlcpy(mandatory_attrs, mandatory->value, sizeof(mandatory_attrs)); } /* * Validate job-password/-encryption... */ if (cupsGetOption("job-password", num_options, options)) { const char *keyword; /* job-password-encryption value */ static const char * const hashes[] = { /* List of supported hash algorithms, in order of preference */ "sha-512", "sha-384", "sha-512_256", "sha-512-224", "sha-256", "sha-224", "sha", "none" }; if ((keyword = cupsGetOption("job-password-encryption", num_options, options)) == NULL || !ippContainsString(encryption_sup, keyword)) { /* * Either no job-password-encryption or the value isn't supported by * the printer... */ for (i = 0; i < (int)(sizeof(hashes) / sizeof(hashes[0])); i ++) if (ippContainsString(encryption_sup, hashes[i])) break; if (i < (int)(sizeof(hashes) / sizeof(hashes[0]))) num_options = cupsAddOption("job-password-encryption", hashes[i], num_options, &options); } } } else num_options = 0; document_format = NULL; if (format_sup != NULL) { if (ippContainsString(format_sup, final_content_type)) document_format = final_content_type; else if (ippContainsString(format_sup, "application/octet-stream")) document_format = "application/octet-stream"; } fprintf(stderr, "DEBUG: final_content_type=\"%s\", document_format=\"%s\"\n", final_content_type, document_format ? document_format : "(null)"); /* * If the printer does not support HTTP/1.1 (which IPP requires), copy stdin * to a temporary file so that we can do a HTTP/1.0 submission... * * (I hate compatibility hacks!) */ if (http->version < HTTP_1_1 && num_files == 0) { if ((fd = cupsTempFd(tmpfilename, sizeof(tmpfilename))) < 0) { perror("DEBUG: Unable to create temporary file"); return (CUPS_BACKEND_FAILED); } _cupsLangPrintFilter(stderr, "INFO", _("Copying print data.")); if ((compatsize = write(fd, buffer, (size_t)bytes)) < 0) { perror("DEBUG: Unable to write temporary file"); return (CUPS_BACKEND_FAILED); } if ((bytes = backendRunLoop(-1, fd, snmp_fd, &(addrlist->addr), 0, 0, backendNetworkSideCB)) < 0) return (CUPS_BACKEND_FAILED); compatsize += bytes; close(fd); compatfile = tmpfilename; files = &compatfile; num_files = 1; } else if (http->version < HTTP_1_1 && num_files == 1) { struct stat fileinfo; /* File information */ if (!stat(files[0], &fileinfo)) compatsize = fileinfo.st_size; } /* * If the printer only claims to support IPP/1.0, or if the user specifically * included version=1.0 in the URI, then do not try to use Create-Job or * Send-Document. This is another dreaded compatibility hack, but * unfortunately there are enough broken printers out there that we need * this for now... */ if (version == 10) create_job = send_document = 0; /* * Start monitoring the printer in the background... */ monitor.uri = uri; monitor.hostname = hostname; monitor.user = argv[2]; monitor.resource = resource; monitor.port = port; monitor.version = version; monitor.job_id = 0; monitor.create_job = create_job; monitor.get_job_attrs = get_job_attrs; monitor.encryption = cupsEncryption(); monitor.job_state = IPP_JOB_PENDING; monitor.printer_state = IPP_PRINTER_IDLE; monitor.retryable = argc == 6 && document_format && strcmp(document_format, "image/pwg-raster") && strcmp(document_format, "image/urf"); if (create_job) { monitor.job_name = argv[3]; } else { snprintf(print_job_name, sizeof(print_job_name), "%s - %s", argv[1], argv[3]); monitor.job_name = print_job_name; } _cupsThreadCreate((_cups_thread_func_t)monitor_printer, &monitor); /* * Validate access to the printer... */ while (!job_canceled && validate_job) { request = new_request(IPP_OP_VALIDATE_JOB, version, uri, argv[2], monitor.job_name, num_options, options, compression, copies_sup ? copies : 1, document_format, pc, ppd, media_col_sup, doc_handling_sup, print_color_mode_sup); response = cupsDoRequest(http, request, resource); ipp_status = cupsLastError(); fprintf(stderr, "DEBUG: Validate-Job: %s (%s)\n", ippErrorString(ipp_status), cupsLastErrorString()); debug_attributes(response); if ((job_auth = ippFindAttribute(response, "job-authorization-uri", IPP_TAG_URI)) != NULL) num_options = cupsAddOption("job-authorization-uri", ippGetString(job_auth, 0, NULL), num_options, &options); ippDelete(response); if (job_canceled) break; if (ipp_status == IPP_STATUS_ERROR_SERVICE_UNAVAILABLE || ipp_status == IPP_STATUS_ERROR_BUSY) { _cupsLangPrintFilter(stderr, "INFO", _("The printer is in use.")); sleep(10); } else if (ipp_status == IPP_STATUS_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED || ipp_status == IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_CLOSED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED) goto cleanup; else if (ipp_status == IPP_STATUS_ERROR_FORBIDDEN || ipp_status == IPP_STATUS_ERROR_NOT_AUTHORIZED || ipp_status == IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED) { const char *www_auth = httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE); /* WWW-Authenticate field value */ if (!strncmp(www_auth, "Negotiate", 9)) auth_info_required = "negotiate"; else if (www_auth[0]) auth_info_required = "username,password"; goto cleanup; } else if (ipp_status == IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED) { /* * This is all too common... */ update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-validate-job"); break; } else if (ipp_status < IPP_REDIRECTION_OTHER_SITE || ipp_status == IPP_BAD_REQUEST) break; else if (job_auth == NULL && ipp_status > IPP_BAD_REQUEST) goto cleanup; } /* * Then issue the print-job request... */ job_id = 0; while (!job_canceled && copies_remaining > 0) { /* * Check for side-channel requests... */ backendCheckSideChannel(snmp_fd, http->hostaddr); /* * Build the IPP job creation request... */ if (job_canceled) break; request = new_request((num_files > 1 || create_job) ? IPP_CREATE_JOB : IPP_PRINT_JOB, version, uri, argv[2], monitor.job_name, num_options, options, compression, copies_sup ? copies : 1, document_format, pc, ppd, media_col_sup, doc_handling_sup, print_color_mode_sup); /* * Do the request... */ if (num_files > 1 || create_job) response = cupsDoRequest(http, request, resource); else { size_t length = 0; /* Length of request */ if (compatsize > 0) { fputs("DEBUG: Sending file using HTTP/1.0 Content-Length...\n", stderr); length = ippLength(request) + (size_t)compatsize; } else fputs("DEBUG: Sending file using HTTP/1.1 chunking...\n", stderr); http_status = cupsSendRequest(http, request, resource, length); if (http_status == HTTP_CONTINUE && request->state == IPP_DATA) { if (compression && strcmp(compression, "none")) httpSetField(http, HTTP_FIELD_CONTENT_ENCODING, compression); if (num_files == 1) { if ((fd = open(files[0], O_RDONLY)) < 0) { _cupsLangPrintError("ERROR", _("Unable to open print file")); return (CUPS_BACKEND_FAILED); } } else { fd = 0; http_status = cupsWriteRequestData(http, buffer, (size_t)bytes); } while (http_status == HTTP_CONTINUE && (!job_canceled || compatsize > 0)) { /* * Check for side-channel requests and more print data... */ FD_ZERO(&input); FD_SET(fd, &input); FD_SET(snmp_fd, &input); FD_SET(CUPS_SC_FD, &input); while (select(fd > snmp_fd ? fd + 1 : snmp_fd + 1, &input, NULL, NULL, NULL) <= 0 && !job_canceled); if (FD_ISSET(snmp_fd, &input)) backendCheckSideChannel(snmp_fd, http->hostaddr); if (FD_ISSET(fd, &input)) { if ((bytes = read(fd, buffer, sizeof(buffer))) > 0) { fprintf(stderr, "DEBUG: Read %d bytes...\n", (int)bytes); if ((http_status = cupsWriteRequestData(http, buffer, (size_t)bytes)) != HTTP_CONTINUE) break; } else if (bytes == 0 || (errno != EINTR && errno != EAGAIN)) break; } } if (http_status == HTTP_ERROR) fprintf(stderr, "DEBUG: Error writing document data for " "Print-Job: %s\n", strerror(httpError(http))); if (num_files == 1) close(fd); } response = cupsGetResponse(http, resource); ippDelete(request); } ipp_status = cupsLastError(); fprintf(stderr, "DEBUG: %s: %s (%s)\n", (num_files > 1 || create_job) ? "Create-Job" : "Print-Job", ippErrorString(ipp_status), cupsLastErrorString()); debug_attributes(response); if (ipp_status > IPP_OK_CONFLICT) { job_id = 0; if (job_canceled) break; if (ipp_status == IPP_STATUS_ERROR_SERVICE_UNAVAILABLE || ipp_status == IPP_STATUS_ERROR_NOT_POSSIBLE || ipp_status == IPP_STATUS_ERROR_BUSY) { _cupsLangPrintFilter(stderr, "INFO", _("The printer is in use.")); sleep(10); if (num_files == 0) { /* * We can't re-submit when we have no files to print, so exit * immediately with the right status code... */ goto cleanup; } } else if (ipp_status == IPP_STATUS_ERROR_JOB_CANCELED || ipp_status == IPP_STATUS_ERROR_NOT_AUTHORIZED || ipp_status == IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_CLOSED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED) goto cleanup; else { /* * Update auth-info-required as needed... */ _cupsLangPrintFilter(stderr, "ERROR", _("Print job was not accepted.")); if (ipp_status == IPP_STATUS_ERROR_FORBIDDEN || ipp_status == IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED) { const char *www_auth = httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE); /* WWW-Authenticate field value */ if (!strncmp(www_auth, "Negotiate", 9)) auth_info_required = "negotiate"; else if (www_auth[0]) auth_info_required = "username,password"; } else if (ipp_status == IPP_REQUEST_VALUE) { /* * Print file is too large, abort this job... */ goto cleanup; } else sleep(10); if (num_files == 0) { /* * We can't re-submit when we have no files to print, so exit * immediately with the right status code... */ goto cleanup; } } } else if ((job_id_attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) == NULL) { fputs("DEBUG: Print job accepted - job ID unknown.\n", stderr); update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-job-id"); job_id = 0; } else { password_tries = 0; monitor.job_id = job_id = job_id_attr->values[0].integer; fprintf(stderr, "DEBUG: Print job accepted - job ID %d.\n", job_id); } ippDelete(response); if (job_canceled) break; if (job_id && (num_files > 1 || create_job)) { for (i = 0; num_files == 0 || i < num_files; i ++) { /* * Check for side-channel requests... */ backendCheckSideChannel(snmp_fd, http->hostaddr); /* * Send the next file in the job... */ request = ippNewRequest(IPP_SEND_DOCUMENT); ippSetVersion(request, version / 10, version % 10); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", job_id); if (argv[2][0]) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, argv[2]); ippAddBoolean(request, IPP_TAG_OPERATION, "last-document", (i + 1) >= num_files); if (document_format) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, document_format); if (compression) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "compression", NULL, compression); fprintf(stderr, "DEBUG: Sending file %d using chunking...\n", i + 1); fprintf(stderr, "DEBUG: IPP/%d.%d %s #%d\n", version / 10, version % 10, ippOpString(ippGetOperation(request)), ippGetRequestId(request)); debug_attributes(request); http_status = cupsSendRequest(http, request, resource, 0); if (http_status == HTTP_CONTINUE && request->state == IPP_DATA) { if (compression && strcmp(compression, "none")) httpSetField(http, HTTP_FIELD_CONTENT_ENCODING, compression); if (num_files == 0) { fd = 0; http_status = cupsWriteRequestData(http, buffer, (size_t)bytes); } else { if ((fd = open(files[i], O_RDONLY)) < 0) { _cupsLangPrintError("ERROR", _("Unable to open print file")); return (CUPS_BACKEND_FAILED); } } } else fd = -1; if (fd >= 0) { while (!job_canceled && http_status == HTTP_CONTINUE && (bytes = read(fd, buffer, sizeof(buffer))) > 0) { if ((http_status = cupsWriteRequestData(http, buffer, (size_t)bytes)) != HTTP_CONTINUE) break; else { /* * Check for side-channel requests... */ backendCheckSideChannel(snmp_fd, http->hostaddr); } } if (fd > 0) close(fd); } if (http_status == HTTP_ERROR) fprintf(stderr, "DEBUG: Error writing document data for " "Send-Document: %s\n", strerror(httpError(http))); response = cupsGetResponse(http, resource); ippDelete(request); fprintf(stderr, "DEBUG: Send-Document: %s (%s)\n", ippErrorString(cupsLastError()), cupsLastErrorString()); debug_attributes(response); ippDelete(response); if (cupsLastError() > IPP_OK_CONFLICT && !job_canceled) { ipp_status = cupsLastError(); _cupsLangPrintFilter(stderr, "ERROR", _("Unable to add document to print job.")); break; } else { password_tries = 0; if (num_files == 0 || fd < 0) break; } } } if (job_canceled) break; if (ipp_status <= IPP_OK_CONFLICT && argc > 6) { fprintf(stderr, "PAGE: 1 %d\n", copies_sup ? atoi(argv[4]) : 1); copies_remaining --; } else if ((ipp_status == IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR || ipp_status == IPP_STATUS_ERROR_DOCUMENT_UNPRINTABLE) && argc == 6 && document_format && strcmp(document_format, "image/pwg-raster") && strcmp(document_format, "image/urf")) { /* * Need to reprocess the job as raster... */ fputs("JOBSTATE: cups-retry-as-raster\n", stderr); if (job_id > 0) cancel_job(http, uri, job_id, resource, argv[2], version); goto cleanup; } else if (ipp_status == IPP_SERVICE_UNAVAILABLE || ipp_status == IPP_NOT_POSSIBLE || ipp_status == IPP_PRINTER_BUSY) { if (argc == 6) { /* * Need to reprocess the entire job; if we have a job ID, cancel the * job first... */ if (job_id > 0) cancel_job(http, uri, job_id, resource, argv[2], version); goto cleanup; } continue; } else if (ipp_status == IPP_REQUEST_VALUE || ipp_status == IPP_ERROR_JOB_CANCELED || ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_CLOSED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED || ipp_status == IPP_INTERNAL_ERROR) { /* * Print file is too large, job was canceled, we need new * authentication data, or we had some sort of error... */ goto cleanup; } else if (ipp_status == IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED) { /* * Server is configured incorrectly; the policy for Create-Job and * Send-Document has to be the same (auth or no auth, encryption or * no encryption). Force the queue to stop since printing will never * work. */ fputs("DEBUG: The server or printer is configured incorrectly.\n", stderr); fputs("DEBUG: The policy for Create-Job and Send-Document must have the " "same authentication and encryption requirements.\n", stderr); ipp_status = IPP_STATUS_ERROR_INTERNAL; if (job_id > 0) cancel_job(http, uri, job_id, resource, argv[2], version); goto cleanup; } else if (ipp_status == IPP_NOT_FOUND) { /* * Printer does not actually implement support for Create-Job/ * Send-Document, so log the conformance issue and stop the printer. */ fputs("DEBUG: This printer claims to support Create-Job and " "Send-Document, but those operations failed.\n", stderr); fputs("DEBUG: Add '?version=1.0' to the device URI to use legacy " "compatibility mode.\n", stderr); update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-send-document"); ipp_status = IPP_INTERNAL_ERROR; /* Force queue to stop */ goto cleanup; } else copies_remaining --; /* * Wait for the job to complete... */ if (!job_id || !waitjob || !get_job_attrs) continue; fputs("STATE: +cups-waiting-for-job-completed\n", stderr); _cupsLangPrintFilter(stderr, "INFO", _("Waiting for job to complete.")); for (delay = _cupsNextDelay(0, &prev_delay), waittime = time(NULL) + 30; !job_canceled;) { /* * Check for side-channel requests... */ backendCheckSideChannel(snmp_fd, http->hostaddr); /* * Check printer state... */ check_printer_state(http, uri, resource, argv[2], version); if (cupsLastError() <= IPP_OK_CONFLICT) password_tries = 0; /* * Build an IPP_GET_JOB_ATTRIBUTES request... */ request = ippNewRequest(IPP_GET_JOB_ATTRIBUTES); ippSetVersion(request, version / 10, version % 10); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", job_id); if (argv[2][0]) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, argv[2]); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(jattrs) / sizeof(jattrs[0]), NULL, jattrs); fprintf(stderr, "DEBUG: IPP/%d.%d %s #%d\n", version / 10, version % 10, ippOpString(ippGetOperation(request)), ippGetRequestId(request)); debug_attributes(request); /* * Do the request... */ httpReconnect(http); response = cupsDoRequest(http, request, resource); ipp_status = cupsLastError(); if (ipp_status == IPP_NOT_FOUND || ipp_status == IPP_NOT_POSSIBLE) { /* * Job has gone away and/or the server has no job history... */ update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-job-history"); ippDelete(response); ipp_status = IPP_OK; break; } fprintf(stderr, "DEBUG: Get-Job-Attributes: %s (%s)\n", ippErrorString(ipp_status), cupsLastErrorString()); debug_attributes(response); if (ipp_status <= IPP_OK_CONFLICT) password_tries = 0; else { if (ipp_status != IPP_SERVICE_UNAVAILABLE && ipp_status != IPP_PRINTER_BUSY) { ippDelete(response); ipp_status = IPP_OK; break; } else if (ipp_status == IPP_INTERNAL_ERROR) { waitjob_tries ++; if (waitjob_tries > 4) { ippDelete(response); ipp_status = IPP_OK; break; } } } if (response) { if ((job_state = ippFindAttribute(response, "job-state", IPP_TAG_ENUM)) != NULL) { /* * Reflect the remote job state in the local queue... */ if (cups_version && job_state->values[0].integer >= IPP_JOB_PENDING && job_state->values[0].integer <= IPP_JOB_COMPLETED) update_reasons(NULL, remote_job_states[job_state->values[0].integer - IPP_JOB_PENDING]); if ((job_sheets = ippFindAttribute(response, "job-impressions-completed", IPP_TAG_INTEGER)) == NULL) job_sheets = ippFindAttribute(response, "job-media-sheets-completed", IPP_TAG_INTEGER); if (job_sheets) fprintf(stderr, "PAGE: total %d\n", job_sheets->values[0].integer); /* * Stop polling if the job is finished or pending-held for 30 seconds... */ if (job_state->values[0].integer > IPP_JSTATE_STOPPED || (job_state->values[0].integer == IPP_JSTATE_HELD && time(NULL) > waittime)) { ippDelete(response); break; } } else if (ipp_status != IPP_SERVICE_UNAVAILABLE && ipp_status != IPP_NOT_POSSIBLE && ipp_status != IPP_PRINTER_BUSY) { /* * If the printer does not return a job-state attribute, it does not * conform to the IPP specification - break out immediately and fail * the job... */ update_reasons(NULL, "+cups-ipp-conformance-failure-report," "cups-ipp-missing-job-state"); ipp_status = IPP_INTERNAL_ERROR; break; } } ippDelete(response); /* * Wait before polling again... */ sleep((unsigned)delay); delay = _cupsNextDelay(delay, &prev_delay); } } /* * Cancel the job as needed... */ if (job_canceled > 0 && job_id > 0) { cancel_job(http, uri, job_id, resource, argv[2], version); if (cupsLastError() > IPP_OK_CONFLICT) _cupsLangPrintFilter(stderr, "ERROR", _("Unable to cancel print job.")); } /* * Check the printer state and report it if necessary... */ check_printer_state(http, uri, resource, argv[2], version); if (cupsLastError() <= IPP_OK_CONFLICT) password_tries = 0; /* * Collect the final page count as needed... */ if (have_supplies && !backendSNMPSupplies(snmp_fd, &(http->addrlist->addr), &page_count, NULL) && page_count > start_count) fprintf(stderr, "PAGE: total %d\n", page_count - start_count); #ifdef HAVE_GSSAPI /* * See if we used Kerberos at all... */ if (http->gssctx) auth_info_required = "negotiate"; #endif /* HAVE_GSSAPI */ /* * Free memory... */ cleanup: cupsFreeOptions(num_options, options); _ppdCacheDestroy(pc); ppdClose(ppd); httpClose(http); ippDelete(supported); /* * Remove the temporary file(s) if necessary... */ if (tmpfilename[0]) unlink(tmpfilename); /* * Return the queue status... */ if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN || ipp_status == IPP_AUTHENTICATION_CANCELED || ipp_status <= IPP_OK_CONFLICT) fprintf(stderr, "ATTR: auth-info-required=%s\n", auth_info_required); if (ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED) fputs("JOBSTATE: account-info-needed\n", stderr); else if (ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_CLOSED) fputs("JOBSTATE: account-closed\n", stderr); else if (ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED) fputs("JOBSTATE: account-limit-reached\n", stderr); else if (ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED) fputs("JOBSTATE: account-authorization-failed\n", stderr); if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN || ipp_status == IPP_AUTHENTICATION_CANCELED) return (CUPS_BACKEND_AUTH_REQUIRED); else if (ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_CLOSED || ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED) return (CUPS_BACKEND_HOLD); else if (ipp_status == IPP_INTERNAL_ERROR) return (CUPS_BACKEND_STOP); else if (ipp_status == IPP_CONFLICT || ipp_status == IPP_STATUS_ERROR_REQUEST_ENTITY || ipp_status == IPP_STATUS_ERROR_REQUEST_VALUE) return (CUPS_BACKEND_FAILED); else if (ipp_status == IPP_REQUEST_VALUE || ipp_status == IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES || ipp_status == IPP_DOCUMENT_FORMAT || job_canceled < 0) { if (ipp_status == IPP_REQUEST_VALUE) _cupsLangPrintFilter(stderr, "ERROR", _("Print job too large.")); else if (ipp_status == IPP_DOCUMENT_FORMAT) _cupsLangPrintFilter(stderr, "ERROR", _("Printer cannot print supplied content.")); else if (ipp_status == IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES) _cupsLangPrintFilter(stderr, "ERROR", _("Printer cannot print with supplied options.")); else _cupsLangPrintFilter(stderr, "ERROR", _("Print job canceled at printer.")); return (CUPS_BACKEND_CANCEL); } else if (ipp_status > IPP_OK_CONFLICT && ipp_status != IPP_ERROR_JOB_CANCELED) return (CUPS_BACKEND_RETRY_CURRENT); else return (CUPS_BACKEND_OK); } /* * 'cancel_job()' - Cancel a print job. */ static void cancel_job(http_t *http, /* I - HTTP connection */ const char *uri, /* I - printer-uri */ int id, /* I - job-id */ const char *resource, /* I - Resource path */ const char *user, /* I - requesting-user-name */ int version) /* I - IPP version */ { ipp_t *request; /* Cancel-Job request */ _cupsLangPrintFilter(stderr, "INFO", _("Canceling print job.")); request = ippNewRequest(IPP_CANCEL_JOB); ippSetVersion(request, version / 10, version % 10); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", id); if (user && user[0]) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); /* * Do the request... */ ippDelete(cupsDoRequest(http, request, resource)); } /* * 'check_printer_state()' - Check the printer state. */ static ipp_pstate_t /* O - Current printer-state */ check_printer_state( http_t *http, /* I - HTTP connection */ const char *uri, /* I - Printer URI */ const char *resource, /* I - Resource path */ const char *user, /* I - Username, if any */ int version) /* I - IPP version */ { ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* Attribute in response */ ipp_pstate_t printer_state = IPP_PRINTER_STOPPED; /* Current printer-state */ /* * Send a Get-Printer-Attributes request and log the results... */ request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); ippSetVersion(request, version / 10, version % 10); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); if (user && user[0]) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs); fprintf(stderr, "DEBUG: IPP/%d.%d %s #%d\n", version / 10, version % 10, ippOpString(ippGetOperation(request)), ippGetRequestId(request)); debug_attributes(request); if ((response = cupsDoRequest(http, request, resource)) != NULL) { report_printer_state(response); if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL) printer_state = (ipp_pstate_t)attr->values[0].integer; } fprintf(stderr, "DEBUG: Get-Printer-Attributes: %s (%s)\n", ippErrorString(cupsLastError()), cupsLastErrorString()); debug_attributes(response); ippDelete(response); /* * Return the printer-state value... */ return (printer_state); } /* * 'debug_attributes()' - Print out the request or response attributes as DEBUG * messages... */ static void debug_attributes(ipp_t *ipp) /* I - Request or response message */ { ipp_tag_t group; /* Current group */ ipp_attribute_t *attr; /* Current attribute */ char buffer[1024]; /* Value buffer */ for (group = IPP_TAG_ZERO, attr = ippFirstAttribute(ipp); attr; attr = ippNextAttribute(ipp)) { const char *name = ippGetName(attr); if (!name) { group = IPP_TAG_ZERO; continue; } if (group != ippGetGroupTag(attr)) { group = ippGetGroupTag(attr); fprintf(stderr, "DEBUG: ---- %s ----\n", ippTagString(group)); } if (!strcmp(name, "job-password")) strlcpy(buffer, "---", sizeof(buffer)); else ippAttributeString(attr, buffer, sizeof(buffer)); fprintf(stderr, "DEBUG: %s %s%s %s\n", name, ippGetCount(attr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attr)), buffer); } fprintf(stderr, "DEBUG: ---- %s ----\n", ippTagString(IPP_TAG_END)); } /* * 'monitor_printer()' - Monitor the printer state. */ static void * /* O - Thread exit code */ monitor_printer( _cups_monitor_t *monitor) /* I - Monitoring data */ { http_t *http; /* Connection to printer */ ipp_t *request, /* IPP request */ *response; /* IPP response */ ipp_attribute_t *attr; /* Attribute in response */ int delay, /* Current delay */ prev_delay; /* Previous delay */ ipp_op_t job_op; /* Operation to use */ int job_id; /* Job ID */ const char *job_name; /* Job name */ ipp_jstate_t job_state; /* Job state */ const char *job_user; /* Job originating user name */ int password_tries = 0; /* Password tries */ /* * Make a copy of the printer connection... */ http = httpConnect2(monitor->hostname, monitor->port, NULL, AF_UNSPEC, monitor->encryption, 1, 0, NULL); httpSetTimeout(http, 30.0, timeout_cb, NULL); if (username[0]) cupsSetUser(username); cupsSetPasswordCB2((cups_password_cb2_t)password_cb, &password_tries); /* * Loop until the job is canceled, aborted, or completed. */ delay = _cupsNextDelay(0, &prev_delay); monitor->job_reasons = 0; while (monitor->job_state < IPP_JOB_CANCELED && !job_canceled) { /* * Reconnect to the printer as needed... */ if (httpGetFd(http) < 0) httpReconnect(http); if (httpGetFd(http) >= 0) { /* * Connected, so check on the printer state... */ monitor->printer_state = check_printer_state(http, monitor->uri, monitor->resource, monitor->user, monitor->version); if (cupsLastError() <= IPP_OK_CONFLICT) password_tries = 0; if (monitor->job_id == 0 && monitor->create_job) { /* * No job-id yet, so continue... */ goto monitor_sleep; } /* * Check the status of the job itself... */ job_op = (monitor->job_id > 0 && monitor->get_job_attrs) ? IPP_GET_JOB_ATTRIBUTES : IPP_GET_JOBS; request = ippNewRequest(job_op); ippSetVersion(request, monitor->version / 10, monitor->version % 10); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, monitor->uri); if (job_op == IPP_GET_JOB_ATTRIBUTES) ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", monitor->job_id); if (monitor->user && monitor->user[0]) ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, monitor->user); ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(jattrs) / sizeof(jattrs[0])), NULL, jattrs); /* * Do the request... */ response = cupsDoRequest(http, request, monitor->resource); fprintf(stderr, "DEBUG: (monitor) %s: %s (%s)\n", ippOpString(job_op), ippErrorString(cupsLastError()), cupsLastErrorString()); if (cupsLastError() <= IPP_OK_CONFLICT) password_tries = 0; if (job_op == IPP_GET_JOB_ATTRIBUTES) { if ((attr = ippFindAttribute(response, "job-state", IPP_TAG_ENUM)) != NULL) monitor->job_state = (ipp_jstate_t)attr->values[0].integer; else monitor->job_state = IPP_JOB_COMPLETED; } else if (response) { for (attr = response->attrs; attr; attr = attr->next) { job_id = 0; job_name = NULL; job_state = IPP_JOB_PENDING; job_user = NULL; while (attr && attr->group_tag != IPP_TAG_JOB) attr = attr->next; if (!attr) break; while (attr && attr->group_tag == IPP_TAG_JOB) { if (!strcmp(attr->name, "job-id") && attr->value_tag == IPP_TAG_INTEGER) job_id = attr->values[0].integer; else if (!strcmp(attr->name, "job-name") && (attr->value_tag == IPP_TAG_NAME || attr->value_tag == IPP_TAG_NAMELANG)) job_name = attr->values[0].string.text; else if (!strcmp(attr->name, "job-state") && attr->value_tag == IPP_TAG_ENUM) job_state = (ipp_jstate_t)attr->values[0].integer; else if (!strcmp(attr->name, "job-originating-user-name") && (attr->value_tag == IPP_TAG_NAME || attr->value_tag == IPP_TAG_NAMELANG)) job_user = attr->values[0].string.text; attr = attr->next; } if (job_id > 0 && job_name && !strcmp(job_name, monitor->job_name) && job_user && monitor->user && !strcmp(job_user, monitor->user)) { monitor->job_id = job_id; monitor->job_state = job_state; break; } if (!attr) break; } } fprintf(stderr, "DEBUG: (monitor) job-state = %s\n", ippEnumString("job-state", monitor->job_state)); if (!job_canceled && (monitor->job_state == IPP_JOB_CANCELED || monitor->job_state == IPP_JOB_ABORTED)) { job_canceled = -1; fprintf(stderr, "DEBUG: (monitor) job_canceled = -1\n"); } if ((attr = ippFindAttribute(response, "job-state-reasons", IPP_TAG_KEYWORD)) != NULL) { int i, new_reasons = 0; /* Looping var, new reasons */ for (i = 0; i < attr->num_values; i ++) { if (!strcmp(attr->values[i].string.text, "account-authorization-failed")) new_reasons |= _CUPS_JSR_ACCOUNT_AUTHORIZATION_FAILED; else if (!strcmp(attr->values[i].string.text, "account-closed")) new_reasons |= _CUPS_JSR_ACCOUNT_CLOSED; else if (!strcmp(attr->values[i].string.text, "account-info-needed")) new_reasons |= _CUPS_JSR_ACCOUNT_INFO_NEEDED; else if (!strcmp(attr->values[i].string.text, "account-limit-reached")) new_reasons |= _CUPS_JSR_ACCOUNT_LIMIT_REACHED; else if (!strcmp(attr->values[i].string.text, "job-password-wait")) new_reasons |= _CUPS_JSR_JOB_PASSWORD_WAIT; else if (!strcmp(attr->values[i].string.text, "job-release-wait")) new_reasons |= _CUPS_JSR_JOB_RELEASE_WAIT; else if (!strcmp(attr->values[i].string.text, "document-format-error")) new_reasons |= _CUPS_JSR_DOCUMENT_FORMAT_ERROR; else if (!strcmp(attr->values[i].string.text, "document-unprintable")) new_reasons |= _CUPS_JSR_DOCUMENT_UNPRINTABLE; if (!job_canceled && (!strncmp(attr->values[i].string.text, "job-canceled-", 13) || !strcmp(attr->values[i].string.text, "aborted-by-system"))) job_canceled = 1; } if (new_reasons != monitor->job_reasons) { if (new_reasons & _CUPS_JSR_ACCOUNT_AUTHORIZATION_FAILED) fputs("JOBSTATE: account-authorization-failed\n", stderr); else if (new_reasons & _CUPS_JSR_ACCOUNT_CLOSED) fputs("JOBSTATE: account-closed\n", stderr); else if (new_reasons & _CUPS_JSR_ACCOUNT_INFO_NEEDED) fputs("JOBSTATE: account-info-needed\n", stderr); else if (new_reasons & _CUPS_JSR_ACCOUNT_LIMIT_REACHED) fputs("JOBSTATE: account-limit-reached\n", stderr); else if (new_reasons & _CUPS_JSR_JOB_PASSWORD_WAIT) fputs("JOBSTATE: job-password-wait\n", stderr); else if (new_reasons & _CUPS_JSR_JOB_RELEASE_WAIT) fputs("JOBSTATE: job-release-wait\n", stderr); else if (new_reasons & (_CUPS_JSR_DOCUMENT_FORMAT_ERROR | _CUPS_JSR_DOCUMENT_UNPRINTABLE)) { if (monitor->retryable) { /* * Can't print this, so retry as raster... */ job_canceled = 1; fputs("JOBSTATE: cups-retry-as-raster\n", stderr); } else if (new_reasons & _CUPS_JSR_DOCUMENT_FORMAT_ERROR) { fputs("JOBSTATE: document-format-error\n", stderr); } else { fputs("JOBSTATE: document-unprintable\n", stderr); } } else fputs("JOBSTATE: job-printing\n", stderr); monitor->job_reasons = new_reasons; } } ippDelete(response); fprintf(stderr, "DEBUG: (monitor) job-state = %s\n", ippEnumString("job-state", monitor->job_state)); if (!job_canceled && (monitor->job_state == IPP_JOB_CANCELED || monitor->job_state == IPP_JOB_ABORTED)) job_canceled = -1; } /* * Sleep for N seconds... */ monitor_sleep: sleep((unsigned)delay); delay = _cupsNextDelay(delay, &prev_delay); } /* * Cancel the job if necessary... */ if (job_canceled > 0 && monitor->job_id > 0) { if (httpGetFd(http) < 0) httpReconnect(http); if (httpGetFd(http) >= 0) { cancel_job(http, monitor->uri, monitor->job_id, monitor->resource, monitor->user, monitor->version); if (cupsLastError() > IPP_OK_CONFLICT) { fprintf(stderr, "DEBUG: (monitor) cancel_job() = %s\n", cupsLastErrorString()); _cupsLangPrintFilter(stderr, "ERROR", _("Unable to cancel print job.")); } } } /* * Cleanup and return... */ httpClose(http); return (NULL); } /* * 'new_request()' - Create a new print creation or validation request. */ static ipp_t * /* O - Request data */ new_request( ipp_op_t op, /* I - IPP operation code */ int version, /* I - IPP version number */ const char *uri, /* I - printer-uri value */ const char *user, /* I - requesting-user-name value */ const char *title, /* I - job-name value */ int num_options, /* I - Number of options to send */ cups_option_t *options, /* I - Options to send */ const char *compression, /* I - compression value or NULL */ int copies, /* I - copies value or 0 */ const char *format, /* I - document-format value or NULL */ _ppd_cache_t *pc, /* I - PPD cache and mapping data */ ppd_file_t *ppd, /* I - PPD file data */ ipp_attribute_t *media_col_sup, /* I - media-col-supported values */ ipp_attribute_t *doc_handling_sup, /* I - multiple-document-handling-supported values */ ipp_attribute_t *print_color_mode_sup) /* I - Printer supports print-color-mode */ { ipp_t *request; /* Request data */ const char *keyword; /* PWG keyword */ /* * Create the IPP request... */ request = ippNewRequest(op); ippSetVersion(request, version / 10, version % 10); fprintf(stderr, "DEBUG: %s IPP/%d.%d\n", ippOpString(request->request.op.operation_id), request->request.op.version[0], request->request.op.version[1]); /* * Add standard attributes... */ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); fprintf(stderr, "DEBUG: printer-uri=\"%s\"\n", uri); if (user && *user) { ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user); fprintf(stderr, "DEBUG: requesting-user-name=\"%s\"\n", user); } if (title && *title) { ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, title); fprintf(stderr, "DEBUG: job-name=\"%s\"\n", title); } if (format && op != IPP_CREATE_JOB) { ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format); fprintf(stderr, "DEBUG: document-format=\"%s\"\n", format); } #ifdef HAVE_LIBZ if (compression && op != IPP_OP_CREATE_JOB && op != IPP_OP_VALIDATE_JOB) { ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "compression", NULL, compression); fprintf(stderr, "DEBUG: compression=\"%s\"\n", compression); } #endif /* HAVE_LIBZ */ /* * Handle options on the command-line... */ if (num_options > 0) { if (pc) { /* * Send standard IPP attributes... */ fputs("DEBUG: Adding standard IPP operation/job attributes.\n", stderr); copies = _cupsConvertOptions(request, ppd, pc, media_col_sup, doc_handling_sup, print_color_mode_sup, user, format, copies, num_options, options); /* * Map FaxOut options... */ if ((keyword = cupsGetOption("phone", num_options, options)) != NULL) { ipp_t *destination; /* destination collection */ char phone[1024], /* Phone number string */ *ptr, /* Pointer into string */ tel_uri[1024]; /* tel: URI */ static const char * const allowed = "0123456789#*-+.()"; /* Allowed characters */ destination = ippNew(); /* * Unescape and filter out spaces and other characters that are not * allowed in a tel: URI. */ _httpDecodeURI(phone, keyword, sizeof(phone)); for (ptr = phone; *ptr;) { if (!strchr(allowed, *ptr)) _cups_strcpy(ptr, ptr + 1); else ptr ++; } httpAssembleURI(HTTP_URI_CODING_ALL, tel_uri, sizeof(tel_uri), "tel", NULL, NULL, 0, phone); ippAddString(destination, IPP_TAG_JOB, IPP_TAG_URI, "destination-uri", NULL, tel_uri); if ((keyword = cupsGetOption("faxPrefix", num_options, options)) != NULL && *keyword) { char predial[1024]; /* Pre-dial string */ _httpDecodeURI(predial, keyword, sizeof(predial)); ippAddString(destination, IPP_TAG_JOB, IPP_TAG_TEXT, "pre-dial-string", NULL, predial); } ippAddCollection(request, IPP_TAG_JOB, "destination-uris", destination); ippDelete(destination); } } else { /* * When talking to another CUPS server, send all options... */ fputs("DEBUG: Adding all operation/job attributes.\n", stderr); cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION); cupsEncodeOptions2(request, num_options, options, IPP_TAG_JOB); } if (copies > 1 && (!pc || copies <= pc->max_copies)) ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies", copies); } fprintf(stderr, "DEBUG: IPP/%d.%d %s #%d\n", version / 10, version % 10, ippOpString(ippGetOperation(request)), ippGetRequestId(request)); debug_attributes(request); return (request); } /* * 'password_cb()' - Disable the password prompt for cupsDoFileRequest(). */ static const char * /* O - Password */ password_cb(const char *prompt, /* I - Prompt (not used) */ http_t *http, /* I - Connection */ const char *method, /* I - Request method (not used) */ const char *resource, /* I - Resource path (not used) */ int *password_tries) /* I - Password tries */ { char def_username[HTTP_MAX_VALUE]; /* Default username */ fprintf(stderr, "DEBUG: password_cb(prompt=\"%s\", http=%p, method=\"%s\", " "resource=\"%s\", password_tries=%p(%d)), password=%p\n", prompt, http, method, resource, password_tries, *password_tries, password); (void)prompt; (void)method; (void)resource; if (!uri_credentials) { /* * Remember that we need to authenticate... */ auth_info_required = "username,password"; if (httpGetSubField(http, HTTP_FIELD_WWW_AUTHENTICATE, "username", def_username)) { char quoted[HTTP_MAX_VALUE * 2 + 4]; /* Quoted string */ fprintf(stderr, "ATTR: auth-info-default=%s,\n", quote_string(def_username, quoted, sizeof(quoted))); } } if (password && *password && *password_tries < 3) { (*password_tries) ++; cupsSetUser(username); return (password); } else { /* * Give up after 3 tries or if we don't have a password to begin with... */ return (NULL); } } /* * 'quote_string()' - Quote a string value. */ static const char * /* O - Quoted string */ quote_string(const char *s, /* I - String */ char *q, /* I - Quoted string buffer */ size_t qsize) /* I - Size of quoted string buffer */ { char *qptr, /* Pointer into string buffer */ *qend; /* End of string buffer */ qptr = q; qend = q + qsize - 5; if (qend < q) { *q = '\0'; return (q); } *qptr++ = '\''; *qptr++ = '\"'; while (*s && qptr < qend) { if (*s == '\\' || *s == '\"' || *s == '\'') { if (qptr < (qend - 4)) { *qptr++ = '\\'; *qptr++ = '\\'; *qptr++ = '\\'; } else break; } *qptr++ = *s++; } *qptr++ = '\"'; *qptr++ = '\''; *qptr = '\0'; return (q); } /* * 'report_attr()' - Report an IPP attribute value. */ static void report_attr(ipp_attribute_t *attr) /* I - Attribute */ { int i; /* Looping var */ char value[1024], /* Value string */ *valptr; /* Pointer into value string */ const char *cached; /* Cached attribute */ /* * Convert the attribute values into quoted strings... */ for (i = 0, valptr = value; i < attr->num_values && valptr < (value + sizeof(value) - 10); i ++) { if (i > 0) *valptr++ = ','; switch (attr->value_tag) { case IPP_TAG_INTEGER : case IPP_TAG_ENUM : snprintf(valptr, sizeof(value) - (size_t)(valptr - value), "%d", attr->values[i].integer); valptr += strlen(valptr); break; case IPP_TAG_TEXT : case IPP_TAG_NAME : case IPP_TAG_KEYWORD : quote_string(attr->values[i].string.text, valptr, (size_t)(value + sizeof(value) - valptr)); valptr += strlen(valptr); break; default : /* * Unsupported value type... */ return; } } *valptr = '\0'; _cupsMutexLock(&report_mutex); if ((cached = cupsGetOption(attr->name, num_attr_cache, attr_cache)) == NULL || strcmp(cached, value)) { /* * Tell the scheduler about the new values... */ num_attr_cache = cupsAddOption(attr->name, value, num_attr_cache, &attr_cache); fprintf(stderr, "ATTR: %s=%s\n", attr->name, value); } _cupsMutexUnlock(&report_mutex); } /* * 'report_printer_state()' - Report the printer state. */ static void report_printer_state(ipp_t *ipp) /* I - IPP response */ { ipp_attribute_t *pa, /* printer-alert */ *pam, /* printer-alert-message */ *pmja, /* printer-mandatory-job-attributes */ *psm, /* printer-state-message */ *reasons, /* printer-state-reasons */ *marker; /* marker-* attributes */ char value[1024], /* State/message string */ *valptr; /* Pointer into string */ static int ipp_supplies = -1; /* Report supply levels? */ /* * Report alerts and messages... */ if ((pa = ippFindAttribute(ipp, "printer-alert", IPP_TAG_TEXT)) != NULL) report_attr(pa); if ((pam = ippFindAttribute(ipp, "printer-alert-message", IPP_TAG_TEXT)) != NULL) report_attr(pam); if ((pmja = ippFindAttribute(ipp, "printer-mandatory-job-attributes", IPP_TAG_KEYWORD)) != NULL) { int i, /* Looping var */ count = ippGetCount(pmja); /* Number of values */ for (i = 0, valptr = value; i < count; i ++, valptr += strlen(valptr)) { if (i) snprintf(valptr, sizeof(value) - (size_t)(valptr - value), " %s", ippGetString(pmja, i, NULL)); else strlcpy(value, ippGetString(pmja, i, NULL), sizeof(value)); } if (strcmp(value, mandatory_attrs)) { strlcpy(mandatory_attrs, value, sizeof(mandatory_attrs)); fprintf(stderr, "PPD: cupsMandatory=\"%s\"\n", value); } } if ((psm = ippFindAttribute(ipp, "printer-state-message", IPP_TAG_TEXT)) != NULL) { char *ptr; /* Pointer into message */ strlcpy(value, "INFO: ", sizeof(value)); for (ptr = psm->values[0].string.text, valptr = value + 6; *ptr && valptr < (value + sizeof(value) - 6); ptr ++) { if (*ptr < ' ' && *ptr > 0 && *ptr != '\t') { /* * Substitute "" for the control character; sprintf is safe because * we always leave 6 chars free at the end... */ sprintf(valptr, "<%02X>", *ptr); valptr += 4; } else *valptr++ = *ptr; } *valptr++ = '\n'; *valptr = '\0'; fputs(value, stderr); } /* * Now report printer-state-reasons, filtering out some of the reasons we never * want to set... */ if ((reasons = ippFindAttribute(ipp, "printer-state-reasons", IPP_TAG_KEYWORD)) == NULL) return; update_reasons(reasons, NULL); /* * Relay the current marker-* attribute values... */ if (ipp_supplies < 0) { ppd_file_t *ppd; /* PPD file */ ppd_attr_t *ppdattr; /* Attribute in PPD file */ if ((ppd = ppdOpenFile(getenv("PPD"))) != NULL && (ppdattr = ppdFindAttr(ppd, "cupsIPPSupplies", NULL)) != NULL && ppdattr->value && _cups_strcasecmp(ppdattr->value, "true")) ipp_supplies = 0; else ipp_supplies = 1; ppdClose(ppd); } if (ipp_supplies > 0) { if ((marker = ippFindAttribute(ipp, "marker-colors", IPP_TAG_NAME)) != NULL) report_attr(marker); if ((marker = ippFindAttribute(ipp, "marker-high-levels", IPP_TAG_INTEGER)) != NULL) report_attr(marker); if ((marker = ippFindAttribute(ipp, "marker-levels", IPP_TAG_INTEGER)) != NULL) report_attr(marker); if ((marker = ippFindAttribute(ipp, "marker-low-levels", IPP_TAG_INTEGER)) != NULL) report_attr(marker); if ((marker = ippFindAttribute(ipp, "marker-message", IPP_TAG_TEXT)) != NULL) report_attr(marker); if ((marker = ippFindAttribute(ipp, "marker-names", IPP_TAG_NAME)) != NULL) report_attr(marker); if ((marker = ippFindAttribute(ipp, "marker-types", IPP_TAG_KEYWORD)) != NULL) report_attr(marker); } } #if defined(HAVE_GSSAPI) && defined(HAVE_XPC) /* * 'run_as_user()' - Run the IPP backend as the printing user. * * This function uses an XPC-based user agent to run the backend as the printing * user. We need to do this in order to have access to the user's Kerberos * credentials. */ static int /* O - Exit status */ run_as_user(char *argv[], /* I - Command-line arguments */ uid_t uid, /* I - User ID */ const char *device_uri, /* I - Device URI */ int fd) /* I - File to print */ { const char *auth_negotiate;/* AUTH_NEGOTIATE env var */ xpc_connection_t conn; /* Connection to XPC service */ xpc_object_t request; /* Request message dictionary */ __block xpc_object_t response; /* Response message dictionary */ dispatch_semaphore_t sem; /* Semaphore for waiting for response */ int status = CUPS_BACKEND_FAILED; /* Status of request */ fprintf(stderr, "DEBUG: Running IPP backend as UID %d.\n", (int)uid); /* * Connect to the user agent for the specified UID... */ conn = xpc_connection_create_mach_service(kPMPrintUIToolAgent, dispatch_get_global_queue(0, 0), 0); if (!conn) { _cupsLangPrintFilter(stderr, "ERROR", _("Unable to start backend process.")); fputs("DEBUG: Unable to create connection to agent.\n", stderr); goto cleanup; } xpc_connection_set_event_handler(conn, ^(xpc_object_t event) { xpc_type_t messageType = xpc_get_type(event); if (messageType == XPC_TYPE_ERROR) { if (event == XPC_ERROR_CONNECTION_INTERRUPTED) fprintf(stderr, "DEBUG: Interrupted connection to service %s.\n", xpc_connection_get_name(conn)); else if (event == XPC_ERROR_CONNECTION_INVALID) fprintf(stderr, "DEBUG: Connection invalid for service %s.\n", xpc_connection_get_name(conn)); else fprintf(stderr, "DEBUG: Unxpected error for service %s: %s\n", xpc_connection_get_name(conn), xpc_dictionary_get_string(event, XPC_ERROR_KEY_DESCRIPTION)); } }); xpc_connection_set_target_uid(conn, uid); xpc_connection_resume(conn); /* * Try starting the backend... */ request = xpc_dictionary_create(NULL, NULL, 0); xpc_dictionary_set_int64(request, "command", kPMStartJob); xpc_dictionary_set_string(request, "device-uri", device_uri); xpc_dictionary_set_string(request, "job-id", argv[1]); xpc_dictionary_set_string(request, "user", argv[2]); xpc_dictionary_set_string(request, "title", argv[3]); xpc_dictionary_set_string(request, "copies", argv[4]); xpc_dictionary_set_string(request, "options", argv[5]); xpc_dictionary_set_string(request, "auth-info-required", getenv("AUTH_INFO_REQUIRED")); if ((auth_negotiate = getenv("AUTH_NEGOTIATE")) != NULL) xpc_dictionary_set_string(request, "auth-negotiate", auth_negotiate); xpc_dictionary_set_fd(request, "stdin", fd); xpc_dictionary_set_fd(request, "stderr", 2); xpc_dictionary_set_fd(request, "side-channel", CUPS_SC_FD); sem = dispatch_semaphore_create(0); response = NULL; xpc_connection_send_message_with_reply(conn, request, dispatch_get_global_queue(0,0), ^(xpc_object_t reply) { /* Save the response and wake up */ if (xpc_get_type(reply) == XPC_TYPE_DICTIONARY) response = xpc_retain(reply); dispatch_semaphore_signal(sem); }); dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); xpc_release(request); dispatch_release(sem); if (response) { child_pid = (pid_t)xpc_dictionary_get_int64(response, "child-pid"); xpc_release(response); if (child_pid) fprintf(stderr, "DEBUG: Child PID=%d.\n", (int)child_pid); else { _cupsLangPrintFilter(stderr, "ERROR", _("Unable to start backend process.")); fputs("DEBUG: No child PID.\n", stderr); goto cleanup; } } else { _cupsLangPrintFilter(stderr, "ERROR", _("Unable to start backend process.")); fputs("DEBUG: No reply from agent.\n", stderr); goto cleanup; } /* * Then wait for the backend to finish... */ request = xpc_dictionary_create(NULL, NULL, 0); xpc_dictionary_set_int64(request, "command", kPMWaitForJob); xpc_dictionary_set_fd(request, "stderr", 2); sem = dispatch_semaphore_create(0); response = NULL; xpc_connection_send_message_with_reply(conn, request, dispatch_get_global_queue(0,0), ^(xpc_object_t reply) { /* Save the response and wake up */ if (xpc_get_type(reply) == XPC_TYPE_DICTIONARY) response = xpc_retain(reply); dispatch_semaphore_signal(sem); }); dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); xpc_release(request); dispatch_release(sem); if (response) { status = (int)xpc_dictionary_get_int64(response, "status"); if (status == SIGTERM || status == SIGKILL || status == SIGPIPE) { fprintf(stderr, "DEBUG: Child terminated on signal %d.\n", status); status = CUPS_BACKEND_FAILED; } else if (WIFSIGNALED(status)) { fprintf(stderr, "DEBUG: Child crashed on signal %d.\n", status); status = CUPS_BACKEND_STOP; } else if (WIFEXITED(status)) { status = WEXITSTATUS(status); fprintf(stderr, "DEBUG: Child exited with status %d.\n", status); } xpc_release(response); } else _cupsLangPrintFilter(stderr, "ERROR", _("Unable to get backend exit status.")); cleanup: if (conn) { xpc_connection_cancel(conn); xpc_release(conn); } return (status); } #endif /* HAVE_GSSAPI && HAVE_XPC */ /* * 'sigterm_handler()' - Handle 'terminate' signals that stop the backend. */ static void sigterm_handler(int sig) /* I - Signal */ { (void)sig; /* remove compiler warnings... */ write(2, "DEBUG: Got SIGTERM.\n", 20); #if defined(HAVE_GSSAPI) && defined(HAVE_XPC) if (child_pid) { kill(child_pid, sig); child_pid = 0; } #endif /* HAVE_GSSAPI && HAVE_XPC */ if (!job_canceled) { /* * Flag that the job should be canceled... */ write(2, "DEBUG: sigterm_handler: job_canceled = 1.\n", 25); job_canceled = 1; return; } /* * The scheduler already tried to cancel us once, now just terminate * after removing our temp file! */ if (tmpfilename[0]) unlink(tmpfilename); _exit(1); } /* * 'timeout_cb()' - Handle HTTP timeouts. */ static int /* O - 1 to continue, 0 to cancel */ timeout_cb(http_t *http, /* I - Connection to server (unused) */ void *user_data) /* I - User data (unused) */ { (void)http; (void)user_data; return (!job_canceled); } /* * 'update_reasons()' - Update the printer-state-reasons values. */ static void update_reasons(ipp_attribute_t *attr, /* I - printer-state-reasons or NULL */ const char *s) /* I - STATE: string or NULL */ { char op; /* Add (+), remove (-), replace (\0) */ cups_array_t *new_reasons; /* New reasons array */ char *reason, /* Current reason */ add[2048], /* Reasons added string */ *addptr, /* Pointer into add string */ rem[2048], /* Reasons removed string */ *remptr; /* Pointer into remove string */ const char *addprefix, /* Current add string prefix */ *remprefix; /* Current remove string prefix */ fprintf(stderr, "DEBUG: update_reasons(attr=%d(%s%s), s=\"%s\")\n", attr ? attr->num_values : 0, attr ? attr->values[0].string.text : "", attr && attr->num_values > 1 ? ",..." : "", s ? s : "(null)"); /* * Create an array of new reason keyword strings... */ if (attr) { int i; /* Looping var */ new_reasons = cupsArrayNew((cups_array_func_t)strcmp, NULL); op = '\0'; for (i = 0; i < attr->num_values; i ++) { reason = attr->values[i].string.text; if (strcmp(reason, "none") && strcmp(reason, "none-report") && strcmp(reason, "paused") && strncmp(reason, "spool-area-full", 15) && strcmp(reason, "com.apple.print.recoverable-warning") && strncmp(reason, "cups-", 5)) cupsArrayAdd(new_reasons, reason); } } else if (s) { if (*s == '+' || *s == '-') op = *s++; else op = '\0'; new_reasons = _cupsArrayNewStrings(s, ','); } else return; /* * Compute the changes... */ add[0] = '\0'; addprefix = "STATE: +"; addptr = add; rem[0] = '\0'; remprefix = "STATE: -"; remptr = rem; fprintf(stderr, "DEBUG2: op='%c', new_reasons=%d, state_reasons=%d\n", op ? op : ' ', cupsArrayCount(new_reasons), cupsArrayCount(state_reasons)); _cupsMutexLock(&report_mutex); if (op == '+') { /* * Add reasons... */ for (reason = (char *)cupsArrayFirst(new_reasons); reason; reason = (char *)cupsArrayNext(new_reasons)) { if (!cupsArrayFind(state_reasons, reason)) { if (!strncmp(reason, "cups-remote-", 12)) { /* * If we are setting cups-remote-xxx, remove all other cups-remote-xxx * keywords... */ char *temp; /* Current reason in state_reasons */ cupsArraySave(state_reasons); for (temp = (char *)cupsArrayFirst(state_reasons); temp; temp = (char *)cupsArrayNext(state_reasons)) if (!strncmp(temp, "cups-remote-", 12)) { snprintf(remptr, sizeof(rem) - (size_t)(remptr - rem), "%s%s", remprefix, temp); remptr += strlen(remptr); remprefix = ","; cupsArrayRemove(state_reasons, temp); break; } cupsArrayRestore(state_reasons); } cupsArrayAdd(state_reasons, reason); snprintf(addptr, sizeof(add) - (size_t)(addptr - add), "%s%s", addprefix, reason); addptr += strlen(addptr); addprefix = ","; } } } else if (op == '-') { /* * Remove reasons... */ for (reason = (char *)cupsArrayFirst(new_reasons); reason; reason = (char *)cupsArrayNext(new_reasons)) { if (cupsArrayFind(state_reasons, reason)) { snprintf(remptr, sizeof(rem) - (size_t)(remptr - rem), "%s%s", remprefix, reason); remptr += strlen(remptr); remprefix = ","; cupsArrayRemove(state_reasons, reason); } } } else { /* * Replace reasons... */ for (reason = (char *)cupsArrayFirst(state_reasons); reason; reason = (char *)cupsArrayNext(state_reasons)) { if (strncmp(reason, "cups-", 5) && !cupsArrayFind(new_reasons, reason)) { snprintf(remptr, sizeof(rem) - (size_t)(remptr - rem), "%s%s", remprefix, reason); remptr += strlen(remptr); remprefix = ","; cupsArrayRemove(state_reasons, reason); } } for (reason = (char *)cupsArrayFirst(new_reasons); reason; reason = (char *)cupsArrayNext(new_reasons)) { if (!cupsArrayFind(state_reasons, reason)) { cupsArrayAdd(state_reasons, reason); snprintf(addptr, sizeof(add) - (size_t)(addptr - add), "%s%s", addprefix, reason); addptr += strlen(addptr); addprefix = ","; } } } _cupsMutexUnlock(&report_mutex); /* * Report changes and return... */ if (add[0] && rem[0]) fprintf(stderr, "%s\n%s\n", add, rem); else if (add[0]) fprintf(stderr, "%s\n", add); else if (rem[0]) fprintf(stderr, "%s\n", rem); } cups-2.2.7/backend/lpd.c000664 000765 000024 00000074032 13255074424 015473 0ustar00msweetstaff000000 000000 /* * Line Printer Daemon backend for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include #include "backend-private.h" #include #include #include #include #ifdef WIN32 # include #else # include # include # include # include #endif /* WIN32 */ #ifdef __APPLE__ # include # include #endif /* __APPLE__ */ /* * Globals... */ static char tmpfilename[1024] = ""; /* Temporary spool file name */ static int abort_job = 0; /* Non-zero if we get SIGTERM */ /* * Print mode... */ #define MODE_STANDARD 0 /* Queue a copy */ #define MODE_STREAM 1 /* Stream a copy */ /* * The order for control and data files in LPD requests... */ #define ORDER_CONTROL_DATA 0 /* Control file first, then data */ #define ORDER_DATA_CONTROL 1 /* Data file first, then control */ /* * What to reserve... */ #define RESERVE_NONE 0 /* Don't reserve a priviledged port */ #define RESERVE_RFC1179 1 /* Reserve port 721-731 */ #define RESERVE_ANY 2 /* Reserve port 1-1023 */ /* * Local functions... */ static int cups_rresvport(int *port, int family); static int lpd_command(int lpd_fd, char *format, ...); static int lpd_queue(const char *hostname, http_addrlist_t *addrlist, const char *printer, int print_fd, int snmp_fd, int mode, const char *user, const char *title, int copies, int banner, int format, int order, int reserve, int manual_copies, int timeout, int contimeout, const char *orighost); static ssize_t lpd_write(int lpd_fd, char *buffer, size_t length); static void sigterm_handler(int sig); /* * 'main()' - Send a file to the printer or server. * * Usage: * * printer-uri job-id user title copies options [file] */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments (6 or 7) */ char *argv[]) /* I - Command-line arguments */ { const char *device_uri; /* Device URI */ char scheme[255], /* Scheme in URI */ hostname[1024], /* Hostname */ username[255], /* Username info */ resource[1024], /* Resource info (printer name) */ *options, /* Pointer to options */ *name, /* Name of option */ *value, /* Value of option */ sep, /* Separator character */ *filename, /* File to print */ title[256]; /* Title string */ int port; /* Port number */ http_addrlist_t *addrlist; /* List of addresses for printer */ int snmp_enabled = 1; /* Is SNMP enabled? */ int snmp_fd; /* SNMP socket */ int fd; /* Print file */ int status; /* Status of LPD job */ int mode; /* Print mode */ int banner; /* Print banner page? */ int format; /* Print format */ int order; /* Order of control/data files */ int reserve; /* Reserve priviledged port? */ int sanitize_title; /* Sanitize title string? */ int manual_copies, /* Do manual copies? */ timeout, /* Timeout */ contimeout, /* Connection timeout */ copies; /* Number of copies */ ssize_t bytes = 0; /* Initial bytes read */ char buffer[16384]; /* Initial print buffer */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ int num_jobopts; /* Number of job options */ cups_option_t *jobopts = NULL; /* Job options */ /* * Make sure status messages are not buffered... */ setbuf(stderr, NULL); /* * Ignore SIGPIPE and catch SIGTERM signals... */ #ifdef HAVE_SIGSET sigset(SIGPIPE, SIG_IGN); sigset(SIGTERM, sigterm_handler); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); action.sa_handler = SIG_IGN; sigaction(SIGPIPE, &action, NULL); sigemptyset(&action.sa_mask); sigaddset(&action.sa_mask, SIGTERM); action.sa_handler = sigterm_handler; sigaction(SIGTERM, &action, NULL); #else signal(SIGPIPE, SIG_IGN); signal(SIGTERM, sigterm_handler); #endif /* HAVE_SIGSET */ /* * Check command-line... */ if (argc == 1) { printf("network lpd \"Unknown\" \"%s\"\n", _cupsLangString(cupsLangDefault(), _("LPD/LPR Host or Printer"))); return (CUPS_BACKEND_OK); } else if (argc < 6 || argc > 7) { _cupsLangPrintf(stderr, _("Usage: %s job-id user title copies options [file]"), argv[0]); return (CUPS_BACKEND_FAILED); } num_jobopts = cupsParseOptions(argv[5], 0, &jobopts); /* * Extract the hostname and printer name from the URI... */ while ((device_uri = cupsBackendDeviceURI(argv)) == NULL) { _cupsLangPrintFilter(stderr, "INFO", _("Unable to locate printer.")); sleep(10); if (getenv("CLASS") != NULL) return (CUPS_BACKEND_FAILED); } httpSeparateURI(HTTP_URI_CODING_ALL, device_uri, scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if (!port) port = 515; /* Default to port 515 */ if (!username[0]) { /* * If no username is in the device URI, then use the print job user... */ strlcpy(username, argv[2], sizeof(username)); } /* * See if there are any options... */ mode = MODE_STANDARD; banner = 0; format = 'l'; order = ORDER_CONTROL_DATA; reserve = RESERVE_ANY; manual_copies = 1; timeout = 300; contimeout = 7 * 24 * 60 * 60; #ifdef __APPLE__ /* * We want to pass UTF-8 characters by default, not re-map them (3071945) */ sanitize_title = 0; #else /* * Otherwise we want to re-map UTF-8 to "safe" characters by default... */ sanitize_title = 1; #endif /* __APPLE__ */ if ((options = strchr(resource, '?')) != NULL) { /* * Yup, terminate the device name string and move to the first * character of the options... */ *options++ = '\0'; /* * Parse options... */ while (*options) { /* * Get the name... */ name = options; while (*options && *options != '=' && *options != '+' && *options != '&') options ++; if ((sep = *options) != '\0') *options++ = '\0'; if (sep == '=') { /* * Get the value... */ value = options; while (*options && *options != '+' && *options != '&') options ++; if (*options) *options++ = '\0'; } else value = (char *)""; /* * Process the option... */ if (!_cups_strcasecmp(name, "banner")) { /* * Set the banner... */ banner = !value[0] || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true"); } else if (!_cups_strcasecmp(name, "format") && value[0]) { /* * Set output format... */ if (strchr("cdfglnoprtv", value[0])) format = value[0]; else _cupsLangPrintFilter(stderr, "ERROR", _("Unknown format character: \"%c\"."), value[0]); } else if (!_cups_strcasecmp(name, "mode") && value[0]) { /* * Set control/data order... */ if (!_cups_strcasecmp(value, "standard")) mode = MODE_STANDARD; else if (!_cups_strcasecmp(value, "stream")) mode = MODE_STREAM; else _cupsLangPrintFilter(stderr, "ERROR", _("Unknown print mode: \"%s\"."), value); } else if (!_cups_strcasecmp(name, "order") && value[0]) { /* * Set control/data order... */ if (!_cups_strcasecmp(value, "control,data")) order = ORDER_CONTROL_DATA; else if (!_cups_strcasecmp(value, "data,control")) order = ORDER_DATA_CONTROL; else _cupsLangPrintFilter(stderr, "ERROR", _("Unknown file order: \"%s\"."), value); } else if (!_cups_strcasecmp(name, "reserve")) { /* * Set port reservation mode... */ if (!value[0] || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true") || !_cups_strcasecmp(value, "rfc1179")) reserve = RESERVE_RFC1179; else if (!_cups_strcasecmp(value, "any")) reserve = RESERVE_ANY; else reserve = RESERVE_NONE; } else if (!_cups_strcasecmp(name, "manual_copies")) { /* * Set manual copies... */ manual_copies = !value[0] || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true"); } else if (!_cups_strcasecmp(name, "sanitize_title")) { /* * Set sanitize title... */ sanitize_title = !value[0] || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true"); } else if (!_cups_strcasecmp(name, "snmp")) { /* * Enable/disable SNMP stuff... */ snmp_enabled = !value[0] || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true"); } else if (!_cups_strcasecmp(name, "timeout")) { /* * Set the timeout... */ if (atoi(value) > 0) timeout = atoi(value); } else if (!_cups_strcasecmp(name, "contimeout")) { /* * Set the connection timeout... */ if (atoi(value) > 0) contimeout = atoi(value); } } } if (mode == MODE_STREAM) order = ORDER_CONTROL_DATA; /* * Find the printer... */ addrlist = backendLookup(hostname, port, NULL); /* * See if the printer supports SNMP... */ if (snmp_enabled) snmp_fd = _cupsSNMPOpen(addrlist->addr.addr.sa_family); else snmp_fd = -1; /* * Wait for data from the filter... */ if (argc == 6) { if (!backendWaitLoop(snmp_fd, &(addrlist->addr), 0, backendNetworkSideCB)) return (CUPS_BACKEND_OK); else if (mode == MODE_STANDARD && (bytes = read(0, buffer, sizeof(buffer))) <= 0) return (CUPS_BACKEND_OK); } /* * If we have 7 arguments, print the file named on the command-line. * Otherwise, copy stdin to a temporary file and print the temporary * file. */ if (argc == 6 && mode == MODE_STANDARD) { /* * Copy stdin to a temporary file... */ if ((fd = cupsTempFd(tmpfilename, sizeof(tmpfilename))) < 0) { perror("DEBUG: Unable to create temporary file"); return (CUPS_BACKEND_FAILED); } _cupsLangPrintFilter(stderr, "INFO", _("Copying print data.")); if (bytes > 0) write(fd, buffer, (size_t)bytes); backendRunLoop(-1, fd, snmp_fd, &(addrlist->addr), 0, 0, backendNetworkSideCB); } else if (argc == 6) { /* * Stream from stdin... */ filename = NULL; fd = 0; } else { filename = argv[6]; fd = open(filename, O_RDONLY); if (fd == -1) { _cupsLangPrintError("ERROR", _("Unable to open print file")); return (CUPS_BACKEND_FAILED); } } /* * Sanitize the document title... */ strlcpy(title, argv[3], sizeof(title)); if (sanitize_title) { /* * Sanitize the title string so that we don't cause problems on * the remote end... */ char *ptr; for (ptr = title; *ptr; ptr ++) if (!isalnum(*ptr & 255) && !isspace(*ptr & 255)) *ptr = '_'; } /* * Queue the job... */ if (argc > 6) { if (manual_copies) { manual_copies = atoi(argv[4]); copies = 1; } else { manual_copies = 1; copies = atoi(argv[4]); } status = lpd_queue(hostname, addrlist, resource + 1, fd, snmp_fd, mode, username, title, copies, banner, format, order, reserve, manual_copies, timeout, contimeout, cupsGetOption("job-originating-host-name", num_jobopts, jobopts)); if (!status) fprintf(stderr, "PAGE: 1 %d\n", atoi(argv[4])); } else status = lpd_queue(hostname, addrlist, resource + 1, fd, snmp_fd, mode, username, title, 1, banner, format, order, reserve, 1, timeout, contimeout, cupsGetOption("job-originating-host-name", num_jobopts, jobopts)); /* * Remove the temporary file if necessary... */ if (tmpfilename[0]) unlink(tmpfilename); if (fd) close(fd); if (snmp_fd >= 0) _cupsSNMPClose(snmp_fd); /* * Return the queue status... */ return (status); } /* * 'cups_rresvport()' - A simple implementation of rresvport_af(). */ static int /* O - Socket or -1 on error */ cups_rresvport(int *port, /* IO - Port number to bind to */ int family) /* I - Address family */ { http_addr_t addr; /* Socket address */ int fd; /* Socket file descriptor */ /* * Try to create an IPv4 socket... */ if ((fd = socket(family, SOCK_STREAM, 0)) < 0) return (-1); /* * Initialize the address buffer... */ memset(&addr, 0, sizeof(addr)); addr.addr.sa_family = (sa_family_t)family; /* * Try to bind the socket to a reserved port... */ while (*port > 511) { /* * Set the port number... */ _httpAddrSetPort(&addr, *port); /* * Try binding the port to the socket; return if all is OK... */ if (!bind(fd, (struct sockaddr *)&addr, (socklen_t)httpAddrLength(&addr))) return (fd); /* * Stop if we have any error other than "address already in use"... */ if (errno != EADDRINUSE) { httpAddrClose(NULL, fd); return (-1); } /* * Try the next port... */ (*port)--; } /* * Wasn't able to bind to a reserved port, so close the socket and return * -1... */ #ifdef WIN32 closesocket(fd); #else close(fd); #endif /* WIN32 */ return (-1); } /* * 'lpd_command()' - Send an LPR command sequence and wait for a reply. */ static int /* O - Status of command */ lpd_command(int fd, /* I - Socket connection to LPD host */ char *format, /* I - printf()-style format string */ ...) /* I - Additional args as necessary */ { va_list ap; /* Argument pointer */ char buf[1024]; /* Output buffer */ ssize_t bytes; /* Number of bytes to output */ char status; /* Status from command */ /* * Don't try to send commands if the job has been canceled... */ if (abort_job) return (-1); /* * Format the string... */ va_start(ap, format); bytes = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); fprintf(stderr, "DEBUG: lpd_command %2.2x %s", buf[0], buf + 1); /* * Send the command... */ fprintf(stderr, "DEBUG: Sending command string (" CUPS_LLFMT " bytes)...\n", CUPS_LLCAST bytes); if (lpd_write(fd, buf, (size_t)bytes) < bytes) { perror("DEBUG: Unable to send LPD command"); return (-1); } /* * Read back the status from the command and return it... */ fputs("DEBUG: Reading command status...\n", stderr); if (recv(fd, &status, 1, 0) < 1) { _cupsLangPrintFilter(stderr, "WARNING", _("The printer did not respond.")); status = (char)errno; } fprintf(stderr, "DEBUG: lpd_command returning %d\n", status); return (status); } /* * 'lpd_queue()' - Queue a file using the Line Printer Daemon protocol. */ static int /* O - Zero on success, non-zero on failure */ lpd_queue(const char *hostname, /* I - Host to connect to */ http_addrlist_t *addrlist, /* I - List of host addresses */ const char *printer, /* I - Printer/queue name */ int print_fd, /* I - File to print */ int snmp_fd, /* I - SNMP socket */ int mode, /* I - Print mode */ const char *user, /* I - Requesting user */ const char *title, /* I - Job title */ int copies, /* I - Number of copies */ int banner, /* I - Print LPD banner? */ int format, /* I - Format specifier */ int order, /* I - Order of data/control files */ int reserve, /* I - Reserve ports? */ int manual_copies,/* I - Do copies by hand... */ int timeout, /* I - Timeout... */ int contimeout, /* I - Connection timeout */ const char *orighost) /* I - job-originating-host-name */ { char localhost[255]; /* Local host name */ int error; /* Error number */ struct stat filestats; /* File statistics */ int lport; /* LPD connection local port */ int fd; /* LPD socket */ char control[10240], /* LPD control 'file' */ *cptr; /* Pointer into control file string */ char status; /* Status byte from command */ int delay; /* Delay for retries... */ char addrname[256]; /* Address name */ http_addrlist_t *addr; /* Socket address */ int have_supplies; /* Printer supports supply levels? */ int copy; /* Copies written */ time_t start_time; /* Time of first connect */ ssize_t nbytes; /* Number of bytes written */ off_t tbytes; /* Total bytes written */ char buffer[32768]; /* Output buffer */ #ifdef WIN32 DWORD tv; /* Timeout in milliseconds */ #else struct timeval tv; /* Timeout in secs and usecs */ #endif /* WIN32 */ /* * Remember when we started trying to connect to the printer... */ start_time = time(NULL); /* * Loop forever trying to print the file... */ while (!abort_job) { /* * First try to reserve a port for this connection... */ fprintf(stderr, "DEBUG: Connecting to %s:%d for printer %s\n", hostname, httpAddrPort(&(addrlist->addr)), printer); _cupsLangPrintFilter(stderr, "INFO", _("Connecting to printer.")); for (lport = reserve == RESERVE_RFC1179 ? 732 : 1024, addr = addrlist, delay = 5;; addr = addr->next) { /* * Stop if this job has been canceled... */ if (abort_job) return (CUPS_BACKEND_FAILED); /* * Choose the next priviledged port... */ if (!addr) addr = addrlist; lport --; if (lport < 721 && reserve == RESERVE_RFC1179) lport = 731; else if (lport < 1) lport = 1023; #ifdef HAVE_GETEUID if (geteuid() || !reserve) #else if (getuid() || !reserve) #endif /* HAVE_GETEUID */ { /* * Just create a regular socket... */ if ((fd = socket(addr->addr.addr.sa_family, SOCK_STREAM, 0)) < 0) { perror("DEBUG: Unable to create socket"); sleep(1); continue; } lport = 0; } else { /* * We're running as root and want to comply with RFC 1179. Reserve a * priviledged lport between 721 and 731... */ if ((fd = cups_rresvport(&lport, addr->addr.addr.sa_family)) < 0) { perror("DEBUG: Unable to reserve port"); sleep(1); continue; } } /* * Connect to the printer or server... */ if (abort_job) { close(fd); return (CUPS_BACKEND_FAILED); } if (!connect(fd, &(addr->addr.addr), (socklen_t)httpAddrLength(&(addr->addr)))) break; error = errno; close(fd); if (addr->next) continue; if (getenv("CLASS") != NULL) { /* * If the CLASS environment variable is set, the job was submitted * to a class and not to a specific queue. In this case, we want * to abort immediately so that the job can be requeued on the next * available printer in the class. */ _cupsLangPrintFilter(stderr, "INFO", _("Unable to contact printer, queuing on next " "printer in class.")); /* * Sleep 5 seconds to keep the job from requeuing too rapidly... */ sleep(5); return (CUPS_BACKEND_FAILED); } fprintf(stderr, "DEBUG: Connection error: %s\n", strerror(error)); if (errno == ECONNREFUSED || errno == EHOSTDOWN || errno == EHOSTUNREACH || errno == ETIMEDOUT || errno == ENOTCONN) { if (contimeout && (time(NULL) - start_time) > contimeout) { _cupsLangPrintFilter(stderr, "ERROR", _("The printer is not responding.")); return (CUPS_BACKEND_FAILED); } switch (error) { case EHOSTDOWN : _cupsLangPrintFilter(stderr, "WARNING", _("The printer may not exist or " "is unavailable at this time.")); break; case EHOSTUNREACH : default : _cupsLangPrintFilter(stderr, "WARNING", _("The printer is unreachable at " "this time.")); break; case ECONNREFUSED : _cupsLangPrintFilter(stderr, "WARNING", _("The printer is in use.")); break; } sleep((unsigned)delay); if (delay < 30) delay += 5; } else if (error == EADDRINUSE) { /* * Try on another port... */ sleep(1); } else { _cupsLangPrintFilter(stderr, "ERROR", _("The printer is not responding.")); sleep(30); } } /* * Set the timeout... */ #ifdef WIN32 tv = (DWORD)(timeout * 1000); setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(tv)); setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, (char *)&tv, sizeof(tv)); #else tv.tv_sec = timeout; tv.tv_usec = 0; setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)); #endif /* WIN32 */ fputs("STATE: -connecting-to-device\n", stderr); _cupsLangPrintFilter(stderr, "INFO", _("Connected to printer.")); fprintf(stderr, "DEBUG: Connected to %s:%d (local port %d)...\n", httpAddrString(&(addr->addr), addrname, sizeof(addrname)), httpAddrPort(&(addr->addr)), lport); /* * See if the printer supports SNMP... */ if (snmp_fd >= 0) have_supplies = !backendSNMPSupplies(snmp_fd, &(addrlist->addr), NULL, NULL); else have_supplies = 0; /* * Check for side-channel requests... */ backendCheckSideChannel(snmp_fd, &(addrlist->addr)); /* * Next, open the print file and figure out its size... */ if (print_fd) { /* * Use the size from the print file... */ if (fstat(print_fd, &filestats)) { close(fd); perror("DEBUG: unable to stat print file"); return (CUPS_BACKEND_FAILED); } filestats.st_size *= manual_copies; } else { /* * Use a "very large value" for the size so that the printer will * keep printing until we close the connection... */ #ifdef _LARGEFILE_SOURCE filestats.st_size = (size_t)(999999999999.0); #else filestats.st_size = 2147483647; #endif /* _LARGEFILE_SOURCE */ } /* * Send a job header to the printer, specifying no banner page and * literal output... */ if (lpd_command(fd, "\002%s\n", printer)) /* Receive print job(s) */ { close(fd); return (CUPS_BACKEND_FAILED); } if (orighost && _cups_strcasecmp(orighost, "localhost")) strlcpy(localhost, orighost, sizeof(localhost)); else httpGetHostname(NULL, localhost, sizeof(localhost)); snprintf(control, sizeof(control), "H%.31s\n" /* RFC 1179, Section 7.2 - host name <= 31 chars */ "P%.31s\n" /* RFC 1179, Section 7.2 - user name <= 31 chars */ "J%.99s\n", /* RFC 1179, Section 7.2 - job name <= 99 chars */ localhost, user, title); cptr = control + strlen(control); if (banner) { snprintf(cptr, sizeof(control) - (size_t)(cptr - control), "C%.31s\n" /* RFC 1179, Section 7.2 - class name <= 31 chars */ "L%s\n", localhost, user); cptr += strlen(cptr); } while (copies > 0) { snprintf(cptr, sizeof(control) - (size_t)(cptr - control), "%cdfA%03d%.15s\n", format, (int)getpid() % 1000, localhost); cptr += strlen(cptr); copies --; } snprintf(cptr, sizeof(control) - (size_t)(cptr - control), "UdfA%03d%.15s\n" "N%.131s\n", /* RFC 1179, Section 7.2 - sourcefile name <= 131 chars */ (int)getpid() % 1000, localhost, title); fprintf(stderr, "DEBUG: Control file is:\n%s", control); if (order == ORDER_CONTROL_DATA) { /* * Check for side-channel requests... */ backendCheckSideChannel(snmp_fd, &(addr->addr)); /* * Send the control file... */ if (lpd_command(fd, "\002%d cfA%03.3d%.15s\n", strlen(control), (int)getpid() % 1000, localhost)) { close(fd); return (CUPS_BACKEND_FAILED); } fprintf(stderr, "DEBUG: Sending control file (%u bytes)\n", (unsigned)strlen(control)); if ((size_t)lpd_write(fd, control, strlen(control) + 1) < (strlen(control) + 1)) { status = (char)errno; perror("DEBUG: Unable to write control file"); } else { if (read(fd, &status, 1) < 1) { _cupsLangPrintFilter(stderr, "WARNING", _("The printer did not respond.")); status = (char)errno; } } if (status != 0) _cupsLangPrintFilter(stderr, "ERROR", _("Remote host did not accept control file (%d)."), status); else _cupsLangPrintFilter(stderr, "INFO", _("Control file sent successfully.")); } else status = 0; if (status == 0) { /* * Check for side-channel requests... */ backendCheckSideChannel(snmp_fd, &(addr->addr)); /* * Send the print file... */ if (lpd_command(fd, "\003" CUPS_LLFMT " dfA%03.3d%.15s\n", CUPS_LLCAST filestats.st_size, (int)getpid() % 1000, localhost)) { close(fd); return (CUPS_BACKEND_FAILED); } fprintf(stderr, "DEBUG: Sending data file (" CUPS_LLFMT " bytes)\n", CUPS_LLCAST filestats.st_size); tbytes = 0; for (copy = 0; copy < manual_copies; copy ++) { lseek(print_fd, 0, SEEK_SET); while ((nbytes = read(print_fd, buffer, sizeof(buffer))) > 0) { _cupsLangPrintFilter(stderr, "INFO", _("Spooling job, %.0f%% complete."), 100.0 * tbytes / filestats.st_size); if (lpd_write(fd, buffer, (size_t)nbytes) < nbytes) { perror("DEBUG: Unable to send print file to printer"); break; } else tbytes += nbytes; } } if (mode == MODE_STANDARD) { if (tbytes < filestats.st_size) status = (char)errno; else if (lpd_write(fd, "", 1) < 1) { perror("DEBUG: Unable to send trailing nul to printer"); status = (char)errno; } else { /* * Read the status byte from the printer; if we can't read the byte * back now, we should set status to "errno", however at this point * we know the printer got the whole file and we don't necessarily * want to requeue it over and over... */ if (recv(fd, &status, 1, 0) < 1) { _cupsLangPrintFilter(stderr, "WARNING", _("The printer did not respond.")); status = 0; } } } else status = 0; if (status != 0) _cupsLangPrintFilter(stderr, "ERROR", _("Remote host did not accept data file (%d)."), status); else _cupsLangPrintFilter(stderr, "INFO", _("Data file sent successfully.")); } if (status == 0 && order == ORDER_DATA_CONTROL) { /* * Check for side-channel requests... */ backendCheckSideChannel(snmp_fd, &(addr->addr)); /* * Send control file... */ if (lpd_command(fd, "\002%d cfA%03.3d%.15s\n", strlen(control), (int)getpid() % 1000, localhost)) { close(fd); return (CUPS_BACKEND_FAILED); } fprintf(stderr, "DEBUG: Sending control file (%lu bytes)\n", (unsigned long)strlen(control)); if ((size_t)lpd_write(fd, control, strlen(control) + 1) < (strlen(control) + 1)) { status = (char)errno; perror("DEBUG: Unable to write control file"); } else { if (read(fd, &status, 1) < 1) { _cupsLangPrintFilter(stderr, "WARNING", _("The printer did not respond.")); status = (char)errno; } } if (status != 0) _cupsLangPrintFilter(stderr, "ERROR", _("Remote host did not accept control file (%d)."), status); else _cupsLangPrintFilter(stderr, "INFO", _("Control file sent successfully.")); } fputs("STATE: +cups-waiting-for-job-completed\n", stderr); /* * Collect the final supply levels as needed... */ if (have_supplies) backendSNMPSupplies(snmp_fd, &(addr->addr), NULL, NULL); /* * Close the socket connection and input file... */ close(fd); if (status == 0) return (CUPS_BACKEND_OK); /* * Waiting for a retry... */ sleep(30); } /* * If we get here, then the job has been canceled... */ return (CUPS_BACKEND_FAILED); } /* * 'lpd_write()' - Write a buffer of data to an LPD server. */ static ssize_t /* O - Number of bytes written or -1 on error */ lpd_write(int lpd_fd, /* I - LPD socket */ char *buffer, /* I - Buffer to write */ size_t length) /* I - Number of bytes to write */ { ssize_t bytes, /* Number of bytes written */ total; /* Total number of bytes written */ if (abort_job) return (-1); total = 0; while ((bytes = send(lpd_fd, buffer, length - (size_t)total, 0)) >= 0) { total += bytes; buffer += bytes; if ((size_t)total == length) break; } if (bytes < 0) return (-1); else return (total); } /* * 'sigterm_handler()' - Handle 'terminate' signals that stop the backend. */ static void sigterm_handler(int sig) /* I - Signal */ { (void)sig; /* remove compiler warnings... */ abort_job = 1; } cups-2.2.7/backend/Makefile000664 000765 000024 00000013715 13255074424 016211 0ustar00msweetstaff000000 000000 # # Backend makefile for CUPS. # # Copyright 2007-2017 by Apple Inc. # Copyright 1997-2007 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # missing or damaged, see the license at "http://www.cups.org/". # # This file is subject to the Apple OS-Developed Software exception. # include ../Makedefs # # Object files... # # RBACKENDS are installed mode 0700 so cupsd will run them as root... # # UBACKENDS and ULBACKENDS are installed mode 0755 so cupsd will run them as # an unprivileged user... # # See http://www.cups.org/doc/api-filter.html for more info... RBACKENDS = \ ipp \ lpd \ $(DNSSD_BACKEND) UBACKENDS = \ snmp \ socket ULBACKENDS = \ usb UNITTESTS = \ test1284 \ testbackend \ testsupplies TARGETS = \ libbackend.a \ $(RBACKENDS) \ $(UBACKENDS) \ $(ULBACKENDS) LIBOBJS = \ ieee1284.o \ network.o \ runloop.o \ snmp-supplies.o OBJS = \ ipp.o \ lpd.o \ dnssd.o \ snmp.o \ socket.o \ test1284.o \ testbackend.o \ testsupplies.o \ usb.o # # Make all targets... # all: $(TARGETS) # # Make library targets... # libs: $(ULBACKENDS) # # Make unit tests... # unittests: $(UNITTESTS) # # Clean all object files... # clean: $(RM) $(OBJS) $(TARGETS) $(UNITTESTS) $(LIBOBJS) http https ipps mdns socket-static # # Update dependencies (without system header dependencies...) # depend: $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies # # Install all targets... # install: all install-data install-headers install-libs install-exec # # Install data files... # install-data: if test "x$(USBQUIRKS)" != x; then \ echo Installing USB quirks in $(USBQUIRKS); \ $(INSTALL_DIR) -m 755 $(USBQUIRKS); \ $(INSTALL_DATA) org.cups.usb-quirks $(USBQUIRKS); \ fi # # Install programs... # install-exec: $(INSTALLXPC) echo Installing backends in $(SERVERBIN)/backend $(INSTALL_DIR) -m 755 $(SERVERBIN)/backend for file in $(RBACKENDS); do \ $(LIBTOOL) $(INSTALL_BIN) -m 700 $$file $(SERVERBIN)/backend; \ done for file in $(UBACKENDS); do \ $(INSTALL_BIN) $$file $(SERVERBIN)/backend; \ done for file in $(IPPALIASES); do \ $(RM) $(SERVERBIN)/backend/$$file; \ $(LN) ipp $(SERVERBIN)/backend/$$file; \ done if test "x$(DNSSD_BACKEND)" != x -a `uname` = Darwin; then \ $(RM) $(SERVERBIN)/backend/mdns; \ $(LN) $(DNSSD_BACKEND) $(SERVERBIN)/backend/mdns; \ fi if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ for file in $(RBACKENDS) $(UBACKENDS); do \ cp $$file $(SYMROOT); \ dsymutil $(SYMROOT)/$$file; \ done \ fi install-xpc: ipp echo Installing XPC backends in $(SERVERBIN)/apple $(INSTALL_DIR) -m 755 $(SERVERBIN)/apple $(LIBTOOL) $(INSTALL_BIN) ipp $(SERVERBIN)/apple for file in $(IPPALIASES); do \ $(RM) $(SERVERBIN)/apple/$$file; \ $(LN) ipp $(SERVERBIN)/apple/$$file; \ done # # Install headers... # install-headers: # # Install libraries... # install-libs: echo Installing backends in $(SERVERBIN)/backend $(INSTALL_DIR) -m 755 $(SERVERBIN)/backend for file in $(ULBACKENDS); do \ $(INSTALL_BIN) $$file $(SERVERBIN)/backend; \ done if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ for file in $(ULBACKENDS); do \ cp $$file $(SYMROOT); \ dsymutil $(SYMROOT)/$$file; \ done \ fi # # Uninstall all targets... # uninstall: $(RM) $(SERVERBIN)/apple/ipp for file in $(IPPALIASES); do \ $(RM) $(SERVERBIN)/apple/$$file; \ done -$(RMDIR) $(SERVERBIN)/apple for file in $(RBACKENDS) $(UBACKENDS) $(ULBACKENDS); do \ $(RM) $(SERVERBIN)/backend/$$file; \ done for file in $(IPPALIASES); do \ $(RM) $(SERVERBIN)/backend/$$file; \ done -$(RMDIR) $(SERVERBIN)/backend -$(RMDIR) $(SERVERBIN) # # test1284 # test1284: test1284.o ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o test1284 test1284.o ../cups/$(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # testbackend # testbackend: testbackend.o ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o testbackend testbackend.o ../cups/$(LIBCUPSSTATIC) \ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) # # testsupplies # testsupplies: testsupplies.o libbackend.a ../cups/$(LIBCUPSSTATIC) echo Linking $@... $(LD_CC) $(LDFLAGS) -o testsupplies testsupplies.o libbackend.a \ ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \ $(COMMONLIBS) $(LIBZ) # # libbackend.a # libbackend.a: $(LIBOBJS) echo Archiving $@... $(RM) $@ $(AR) $(ARFLAGS) $@ $(LIBOBJS) $(RANLIB) $@ # # dnssd # dnssd: dnssd.o ../cups/$(LIBCUPS) libbackend.a echo Linking $@... $(LD_CC) $(LDFLAGS) -o dnssd dnssd.o libbackend.a $(LIBS) if test `uname` = Darwin; then \ $(RM) mdns; \ $(LN) dnssd mdns; \ fi # # ipp # ipp: ipp.o ../cups/$(LIBCUPS) libbackend.a echo Linking $@... $(LD_CC) $(LDFLAGS) -o ipp ipp.o libbackend.a $(LIBS) $(RM) http $(LN) ipp http # # lpd # lpd: lpd.o ../cups/$(LIBCUPS) libbackend.a echo Linking $@... $(LD_CC) $(LDFLAGS) -o lpd lpd.o libbackend.a $(LIBS) # # snmp # snmp: snmp.o ../cups/$(LIBCUPS) libbackend.a echo Linking $@... $(LD_CC) $(LDFLAGS) -o snmp snmp.o libbackend.a $(LIBS) # # socket # socket: socket.o ../cups/$(LIBCUPS) libbackend.a echo Linking $@... $(LD_CC) $(LDFLAGS) -o socket socket.o libbackend.a $(LIBS) socket-static: socket.o ../cups/$(LIBCUPSSTATIC) libbackend.a echo Linking $@... $(LD_CC) $(LDFLAGS) -o socket-static socket.o libbackend.a \ ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \ $(COMMONLIBS) $(LIBZ) # # usb # usb: usb.o ../cups/$(LIBCUPS) libbackend.a echo Linking $@... $(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o usb usb.o libbackend.a $(LIBUSB) \ $(BACKLIBS) $(LIBS) usb.o: usb.c usb-darwin.c usb-libusb.c usb-unix.c # # Dependencies... # include Dependencies cups-2.2.7/backend/network.c000664 000765 000024 00000023444 13255074424 016406 0ustar00msweetstaff000000 000000 /* * Common backend network APIs for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 2006-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include "backend-private.h" #include #include /* * 'backendCheckSideChannel()' - Check the side-channel for pending requests. */ void backendCheckSideChannel( int snmp_fd, /* I - SNMP socket */ http_addr_t *addr) /* I - Address of device */ { fd_set input; /* Select input set */ struct timeval timeout; /* Select timeout */ FD_ZERO(&input); FD_SET(CUPS_SC_FD, &input); timeout.tv_sec = timeout.tv_usec = 0; if (select(CUPS_SC_FD + 1, &input, NULL, NULL, &timeout) > 0) backendNetworkSideCB(-1, -1, snmp_fd, addr, 0); } /* * 'backendLookup()' - Lookup the given host and log addresses. */ http_addrlist_t * /* O - List of addresses or NULL */ backendLookup(const char *hostname, /* I - Hostname */ int port, /* I - Port number */ int *cancel) /* I - Variable to watch for job cancel */ { char portname[32], /* Port number as string */ addrname[256]; /* Address as string */ http_addrlist_t *addrlist, /* List of addresses */ *current; /* Current address */ /* * Lookup the address for the named host... */ snprintf(portname, sizeof(portname), "%d", port); fputs("STATE: +connecting-to-device\n", stderr); fprintf(stderr, "DEBUG: Looking up \"%s\"...\n", hostname); while ((addrlist = httpAddrGetList(hostname, AF_UNSPEC, portname)) == NULL) { _cupsLangPrintFilter(stderr, "INFO", _("Unable to locate printer \"%s\"."), hostname); sleep(10); if (getenv("CLASS") != NULL) { fputs("STATE: -connecting-to-device\n", stderr); exit(CUPS_BACKEND_STOP); } if (cancel && *cancel) { fputs("STATE: -connecting-to-device\n", stderr); exit(CUPS_BACKEND_OK); } } fputs("STATE: -connecting-to-device\n", stderr); /* * Log the addresses we got... */ for (current = addrlist; current; current = current->next) fprintf(stderr, "DEBUG: %s=%s\n", hostname, httpAddrString(¤t->addr, addrname, sizeof(addrname))); /* * Return... */ return (addrlist); } /* * 'backendNetworkSideCB()' - Handle common network side-channel commands. */ int /* O - -1 on error, 0 on success */ backendNetworkSideCB( int print_fd, /* I - Print file or -1 */ int device_fd, /* I - Device file or -1 */ int snmp_fd, /* I - SNMP socket */ http_addr_t *addr, /* I - Address of device */ int use_bc) /* I - Use back-channel data? */ { cups_sc_command_t command; /* Request command */ cups_sc_status_t status; /* Request/response status */ char data[65536]; /* Request/response data */ int datalen; /* Request/response data size */ const char *device_id; /* 1284DEVICEID env var */ datalen = sizeof(data); if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0)) return (-1); switch (command) { case CUPS_SC_CMD_DRAIN_OUTPUT : /* * Our sockets disable the Nagle algorithm and data is sent immediately. */ if (device_fd < 0) status = CUPS_SC_STATUS_NOT_IMPLEMENTED; else if (backendDrainOutput(print_fd, device_fd)) status = CUPS_SC_STATUS_IO_ERROR; else status = CUPS_SC_STATUS_OK; datalen = 0; break; case CUPS_SC_CMD_GET_BIDI : status = CUPS_SC_STATUS_OK; data[0] = (char)use_bc; datalen = 1; break; case CUPS_SC_CMD_SNMP_GET : case CUPS_SC_CMD_SNMP_GET_NEXT : fprintf(stderr, "DEBUG: CUPS_SC_CMD_SNMP_%s: %d (%s)\n", command == CUPS_SC_CMD_SNMP_GET ? "GET" : "GET_NEXT", datalen, data); if (datalen < 2) { status = CUPS_SC_STATUS_BAD_MESSAGE; datalen = 0; break; } if (snmp_fd >= 0) { char *dataptr; /* Pointer into data */ cups_snmp_t packet; /* Packet from printer */ const char *snmp_value; /* CUPS_SNMP_VALUE env var */ if ((snmp_value = getenv("CUPS_SNMP_VALUE")) != NULL) { const char *snmp_count; /* CUPS_SNMP_COUNT env var */ int count; /* Repetition count */ if ((snmp_count = getenv("CUPS_SNMP_COUNT")) != NULL) { if ((count = atoi(snmp_count)) <= 0) count = 1; } else count = 1; for (dataptr = data + strlen(data) + 1; count > 0 && dataptr < (data + sizeof(data) - 1); count --, dataptr += strlen(dataptr)) strlcpy(dataptr, snmp_value, sizeof(data) - (size_t)(dataptr - data)); fprintf(stderr, "DEBUG: Returning %s %s\n", data, data + strlen(data) + 1); status = CUPS_SC_STATUS_OK; datalen = (int)(dataptr - data); break; } if (!_cupsSNMPStringToOID(data, packet.object_name, CUPS_SNMP_MAX_OID)) { status = CUPS_SC_STATUS_BAD_MESSAGE; datalen = 0; break; } status = CUPS_SC_STATUS_IO_ERROR; datalen = 0; if (_cupsSNMPWrite(snmp_fd, addr, CUPS_SNMP_VERSION_1, _cupsSNMPDefaultCommunity(), command == CUPS_SC_CMD_SNMP_GET ? CUPS_ASN1_GET_REQUEST : CUPS_ASN1_GET_NEXT_REQUEST, 1, packet.object_name)) { if (_cupsSNMPRead(snmp_fd, &packet, 1.0)) { size_t i; /* Looping var */ if (!_cupsSNMPOIDToString(packet.object_name, data, sizeof(data))) { fputs("DEBUG: Bad OID returned!\n", stderr); break; } datalen = (int)strlen(data) + 1; dataptr = data + datalen; switch (packet.object_type) { case CUPS_ASN1_BOOLEAN : snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%d", packet.object_value.boolean); datalen += (int)strlen(dataptr); break; case CUPS_ASN1_INTEGER : snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%d", packet.object_value.integer); datalen += (int)strlen(dataptr); break; case CUPS_ASN1_BIT_STRING : case CUPS_ASN1_OCTET_STRING : if (packet.object_value.string.num_bytes < (sizeof(data) - (size_t)(dataptr - data))) i = packet.object_value.string.num_bytes; else i = sizeof(data) - (size_t)(dataptr - data); memcpy(dataptr, packet.object_value.string.bytes, i); datalen += (int)i; break; case CUPS_ASN1_OID : _cupsSNMPOIDToString(packet.object_value.oid, dataptr, sizeof(data) - (size_t)(dataptr - data)); datalen += (int)strlen(dataptr); break; case CUPS_ASN1_HEX_STRING : for (i = 0; i < packet.object_value.string.num_bytes && dataptr < (data + sizeof(data) - 3); i ++, dataptr += 2) sprintf(dataptr, "%02X", packet.object_value.string.bytes[i]); datalen += (int)strlen(dataptr); break; case CUPS_ASN1_COUNTER : snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%u", packet.object_value.counter); datalen += (int)strlen(dataptr); break; case CUPS_ASN1_GAUGE : snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%u", packet.object_value.gauge); datalen += (int)strlen(dataptr); break; case CUPS_ASN1_TIMETICKS : snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%u", packet.object_value.timeticks); datalen += (int)strlen(dataptr); break; default : fprintf(stderr, "DEBUG: Unknown OID value type %02X.\n", packet.object_type); case CUPS_ASN1_NULL_VALUE : dataptr[0] = '\0'; break; } fprintf(stderr, "DEBUG: Returning %s %s\n", data, data + datalen); status = CUPS_SC_STATUS_OK; } else fputs("DEBUG: SNMP read error...\n", stderr); } else fputs("DEBUG: SNMP write error...\n", stderr); break; } status = CUPS_SC_STATUS_NOT_IMPLEMENTED; datalen = 0; break; case CUPS_SC_CMD_GET_CONNECTED : status = CUPS_SC_STATUS_OK; data[0] = device_fd != -1; datalen = 1; break; case CUPS_SC_CMD_GET_DEVICE_ID : if (snmp_fd >= 0) { cups_snmp_t packet; /* Packet from printer */ static const int ppmPrinterIEEE1284DeviceId[] = { CUPS_OID_ppmPrinterIEEE1284DeviceId,1,-1 }; status = CUPS_SC_STATUS_IO_ERROR; datalen = 0; if (_cupsSNMPWrite(snmp_fd, addr, CUPS_SNMP_VERSION_1, _cupsSNMPDefaultCommunity(), CUPS_ASN1_GET_REQUEST, 1, ppmPrinterIEEE1284DeviceId)) { if (_cupsSNMPRead(snmp_fd, &packet, 1.0) && packet.object_type == CUPS_ASN1_OCTET_STRING) { strlcpy(data, (char *)packet.object_value.string.bytes, sizeof(data)); datalen = (int)strlen(data); status = CUPS_SC_STATUS_OK; } } break; } if ((device_id = getenv("1284DEVICEID")) != NULL) { strlcpy(data, device_id, sizeof(data)); datalen = (int)strlen(data); status = CUPS_SC_STATUS_OK; break; } default : status = CUPS_SC_STATUS_NOT_IMPLEMENTED; datalen = 0; break; } return (cupsSideChannelWrite(command, status, data, datalen, 1.0)); } cups-2.2.7/backend/org.cups.usb-quirks000664 000765 000024 00000015010 13255074424 020326 0ustar00msweetstaff000000 000000 # USB backend 'quirks' file. # # This file lists known issues with various vendors or printers. Each # line contains either a comment (starting with #) or the USB vendor ID, # product ID (omit for all vendor products), and a list of known issues: # # blacklist The printer is not functional with the USB backend. # delay-close Delay close/reset of selected interface # no-reattach Do no re-attach usblp kernel module after printing. # soft-reset Do a soft reset after printing for cleanup. # unidir Only supports unidirectional I/O # usb-init Needs vendor USB initialization string. # vendor-class Uses vendor-specific class or subclass. # whitelist The printer is functional with the USB backend. # # To get the USB vendor and product IDs for a given printer, run the "lsusb" # command, which will show something like the following: # # Bus 002 Device 003: ID ab21:34dc Acme Example Printer # # The "ab21:34dc" is the vendor and product ID, separated by a colon. # HP DeskJet 895C 0x03f0 0x0004 unidir # HP DeskJet 880C 0x03f0 0x0104 unidir # HP DeskJet 815C 0x03f0 0x0204 unidir # HP DeskJet 810C/812C 0x03f0 0x0304 unidir # HP DeskJet 830C 0x03f0 0x0404 unidir # HP DeskJet 885C 0x03f0 0x0504 unidir # HP DeskJet 840C 0x03f0 0x0604 unidir # HP DeskJet 816C 0x03f0 0x0804 unidir # HP Deskjet 959C 0x03f0 0x1104 unidir # NEC Picty900 (HP OEM) 0x0409 0xefbe unidir # NEC Picty760 (HP OEM) 0x0409 0xbef4 unidir # NEC Picty920 (HP OEM) 0x0409 0xf0be unidir # NEC Picty800 (HP OEM) 0x0409 0xf1be unidir # Lexmark International, Inc. (e250d) (https://bugs.launchpad.net/bugs/1084164) 0x043d 0x00f3 no-reattach # Kyocera Mita FS 820, by zut 0x0482 0x0010 unidir # Canon, Inc. PIXMA iP6000D Printer (https://bugs.launchpad.net/bugs/1160638) 0x04a9 0x1095 unidir # Canon, Inc. PIXMA iP4200 Printer (Issue #4155) 0x04a9 0x10a2 unidir # Canon, Inc. PIXMA iP4300 Printer (https://bugs.launchpad.net/bugs/1032385) 0x04a9 0x10b6 unidir # Canon, Inc. MP210 (https://bugzilla.redhat.com/show_bug.cgi?id=847923#c53) 0x04a9 0x1721 unidir # Canon, Inc. MP500 Printer (https://bugs.launchpad.net/bugs/1032456) 0x04a9 0x170c unidir # Canon, Inc. MP510 Printer (https://bugs.launchpad.net/bugs/1050009) 0x04a9 0x1717 unidir # Canon, Inc. MP540 Printer, https://bugzilla.redhat.com/967873 0x04a9 0x1730 unidir # Canon, Inc. MP550 Printer (Issue #4155) 0x04a9 0x173d unidir # Canon, Inc. MP560 Printer (Issue #4155) 0x04a9 0x173e unidir # Canon, Inc. MF4150 Printer (https://bugs.launchpad.net/bugs/1160638) 0x04a9 0x26a3 no-reattach # Brother Industries, Ltd HL-1250 Laser Printer (https://bugs.debian.org/712512) 0x04f9 0x0007 no-reattach # Brother Industries, Ltd HL-1430 Laser Printer (https://bugs.launchpad.net/bugs/1038695) 0x04f9 0x001a no-reattach # Brother Industries, Ltd HL-1440 Laser Printer (https://bugs.launchpad.net/bugs/1000253) 0x04f9 0x000d no-reattach unidir # Brother Industries, Ltd HL-1450 Laser Printer (https://bugs.launchpad.net/bugs/1000253) 0x04f9 0x000e no-reattach unidir # Oki Data Corp. Okipage 14ex Printer (https://bugs.launchpad.net/bugs/872483) 0x06bc 0x000b no-reattach # Oki Data Corp. B410d (https://bugs.launchpad.net/bugs/872483) 0x06bc 0x01c7 no-reattach # Seiko Epson Corp. Stylus Color 740 / Photo 750 (http://bugs.debian.org/697970) 0x04b8 0x0001 no-reattach unidir # Seiko Epson Corp. Stylus Color 670 (https://bugs.launchpad.net/bugs/872483) 0x04b8 0x0005 no-reattach # Seiko Epson Receipt Printer M129C 0x04b8 0x0202 vendor-class # Prolific Technology, Inc. PL2305 Parallel Port (USB -> Parallel adapter) (https://bugs.launchpad.net/bugs/987485) 0x067b 0x2305 no-reattach soft-reset unidir # Xerox Phaser 3124 https://bugzilla.redhat.com/show_bug.cgi?id=867392 0x0924 0x3ce9 no-reattach # Xerox WorkCentre 3210 https://bugs.launchpad.net/bugs/1102470 0x0924 0x4293 no-reattach # QinHeng Electronics CH340S (USB -> Parallel adapter) (https://bugs.launchpad.net/bugs/1000253) 0x1a86 0x7584 no-reattach # All Samsung devices (https://bugs.launchpad.net/bugs/1032456) 0x04e8 soft-reset # Samsung ML-2160 Series (https://bugzilla.redhat.com/show_bug.cgi?id=873123) 0x04e8 0x330f unidir # All Zebra devices (https://bugs.launchpad.net/bugs/1001028) 0x0a5f unidir # Canon CP-10 0x04a9 0x304a blacklist # Canon CP-100 0x04a9 0x3063 blacklist # Canon CP-200 0x04a9 0x307c blacklist # Canon CP-300 0x04a9 0x307d blacklist # Canon CP-220 0x04a9 0x30bd blacklist # Canon CP-330 0x04a9 0x30be blacklist # Canon SELPHY CP400 0x04a9 0x30f6 blacklist # Canon SELPHY CP600 0x04a9 0x310b blacklist # Canon SELPHY CP710 0x04a9 0x3127 blacklist # Canon SELPHY CP510 0x04a9 0x3128 blacklist # Canon SELPHY ES1 0x04a9 0x3141 blacklist # Canon SELPHY CP730 0x04a9 0x3142 blacklist # Canon SELPHY CP720 0x04a9 0x3143 blacklist # Canon SELPHY CP750 0x04a9 0x3170 blacklist # Canon SELPHY CP740 0x04a9 0x3171 blacklist # Canon SELPHY ES2 0x04a9 0x3185 blacklist # Canon SELPHY ES20 0x04a9 0x3186 blacklist # Canon SELPHY CP770 0x04a9 0x31aa blacklist # Canon SELPHY CP760 0x04a9 0x31ab blacklist # Canon SELPHY ES30 0x04a9 0x31b0 blacklist # Canon SELPHY CP780 0x04a9 0x31dd blacklist # Canon SELPHY ES40 0x04a9 0x31ee blacklist # Canon SELPHY CP800 0x04a9 0x3214 blacklist # Canon SELPHY CP900 0x04a9 0x3255 blacklist # Canon SELPHY CP810 0x04a9 0x3256 blacklist # Canon SELPHY CP500 0x04a9 0x30f5 blacklist # Canon SELPHY ES3 0x04a9 0x31af blacklist # Canon SELPHY CP780 0x04a9 0x31dd blacklist # Lexmark E238 () 0x043d 0x00d7 no-reattach # Lexmark E238 (Issue #4448) 0x043d 0x009a no-reattach # Canon MX310 (Issue #4482) 0x04a9 0x1728 unidir # Canon MX320 (Issue #4482) 0x04A9 0x1736 unidir # All Intermec devices (Issue #4553) 0x067e no-reattach # HP LaserJet 1150 (Issue #4549) 0x03f0 0x0f17 delay-close # HP LaserJet 1300 (Issue #4549) 0x03f0 0x1017 delay-close 0x03f0 0x1117 delay-close # HP LaserJet 1320 (Issue #4549) 0x03f0 0x1d17 delay-close # Canon, Inc. MP530 Printer 0x04a9 0x1712 unidir # Xerox WorkCentre 3220 (https://bugs.launchpad.net/bugs/1406203, Issue #4789) 0x0924 0x4294 no-reattach # Lexmark C540n (Issue #4778) 0x043d 0x0139 no-reattach # Kyocera Ecosys P6026cdn (Issue #4900) 0x0482 0x063f no-reattach # Kyocera Ecosys P6130cdn (Issue #5102) 0x0482 0x0677 no-reattach # Lexmark E260dn (Issue #4994) 0x043d 0x0123 no-reattach # HP LaserJet 1160 (Issue #5121) 0x03f0 0x1e17 delay-close # Canon, Inc. MP280 series (Issue #5221) 0x04a9 0x1746 unidir # Star Micronics printers (Issue #5251) 0x0519 unidir # Lexmark Optra E310 (Issue #5259) 0x043d 0x000c no-reattach cups-2.2.7/backend/pseudo000664 000765 000024 00000001440 13255074424 015763 0ustar00msweetstaff000000 000000 #!/bin/sh # # Psuedo-backend for CUPS testing purposes. # # Copyright 2011 by Apple Inc. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. 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 file is # file is missing or damaged, see the license at "http://www.cups.org/". # # This file is subject to the Apple OS-Developed Software exception. # if test $# = 0; then echo 'direct pseudo:///deskjet "HP DeskJet" "HP DeskJet (pseudo)" "MFG:HP;MDL:DeskJet;CMD:PCL;" "Nowhere"' echo 'direct pseudo:///laserjet "HP LaserJet" "HP LaserJet (pseudo)" "MFG:HP;MDL:LaserJet;CMD:PCL;" "Nowhere"' exit 0 fi cat $6 >/dev/null sleep 5 exit 0 cups-2.2.7/backend/runloop.c000664 000765 000024 00000031207 13255074424 016407 0ustar00msweetstaff000000 000000 /* * Common run loop APIs for CUPS backends. * * Copyright 2007-2014 by Apple Inc. * Copyright 2006-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include "backend-private.h" #include #include /* * 'backendDrainOutput()' - Drain pending print data to the device. */ int /* O - 0 on success, -1 on error */ backendDrainOutput(int print_fd, /* I - Print file descriptor */ int device_fd) /* I - Device file descriptor */ { int nfds; /* Maximum file descriptor value + 1 */ fd_set input; /* Input set for reading */ ssize_t print_bytes, /* Print bytes read */ bytes; /* Bytes written */ char print_buffer[8192], /* Print data buffer */ *print_ptr; /* Pointer into print data buffer */ struct timeval timeout; /* Timeout for read... */ fprintf(stderr, "DEBUG: backendDrainOutput(print_fd=%d, device_fd=%d)\n", print_fd, device_fd); /* * Figure out the maximum file descriptor value to use with select()... */ nfds = (print_fd > device_fd ? print_fd : device_fd) + 1; /* * Now loop until we are out of data from print_fd... */ for (;;) { /* * Use select() to determine whether we have data to copy around... */ FD_ZERO(&input); FD_SET(print_fd, &input); timeout.tv_sec = 0; timeout.tv_usec = 0; if (select(nfds, &input, NULL, NULL, &timeout) < 0) return (-1); if (!FD_ISSET(print_fd, &input)) return (0); if ((print_bytes = read(print_fd, print_buffer, sizeof(print_buffer))) < 0) { /* * Read error - bail if we don't see EAGAIN or EINTR... */ if (errno != EAGAIN && errno != EINTR) { fprintf(stderr, "DEBUG: Read failed: %s\n", strerror(errno)); _cupsLangPrintFilter(stderr, "ERROR", _("Unable to read print data.")); return (-1); } print_bytes = 0; } else if (print_bytes == 0) { /* * End of file, return... */ return (0); } fprintf(stderr, "DEBUG: Read %d bytes of print data...\n", (int)print_bytes); for (print_ptr = print_buffer; print_bytes > 0;) { if ((bytes = write(device_fd, print_ptr, (size_t)print_bytes)) < 0) { /* * Write error - bail if we don't see an error we can retry... */ if (errno != ENOSPC && errno != ENXIO && errno != EAGAIN && errno != EINTR && errno != ENOTTY) { _cupsLangPrintError("ERROR", _("Unable to write print data")); return (-1); } } else { fprintf(stderr, "DEBUG: Wrote %d bytes of print data...\n", (int)bytes); print_bytes -= bytes; print_ptr += bytes; } } } } /* * 'backendRunLoop()' - Read and write print and back-channel data. */ ssize_t /* O - Total bytes on success, -1 on error */ backendRunLoop( int print_fd, /* I - Print file descriptor */ int device_fd, /* I - Device file descriptor */ int snmp_fd, /* I - SNMP socket or -1 if none */ http_addr_t *addr, /* I - Address of device */ int use_bc, /* I - Use back-channel? */ int update_state, /* I - Update printer-state-reasons? */ _cups_sccb_t side_cb) /* I - Side-channel callback */ { int nfds; /* Maximum file descriptor value + 1 */ fd_set input, /* Input set for reading */ output; /* Output set for writing */ ssize_t print_bytes, /* Print bytes read */ bc_bytes, /* Backchannel bytes read */ total_bytes, /* Total bytes written */ bytes; /* Bytes written */ int paperout; /* "Paper out" status */ int offline; /* "Off-line" status */ char print_buffer[8192], /* Print data buffer */ *print_ptr, /* Pointer into print data buffer */ bc_buffer[1024]; /* Back-channel data buffer */ struct timeval timeout; /* Timeout for select() */ time_t curtime, /* Current time */ snmp_update = 0; #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ fprintf(stderr, "DEBUG: backendRunLoop(print_fd=%d, device_fd=%d, snmp_fd=%d, " "addr=%p, use_bc=%d, side_cb=%p)\n", print_fd, device_fd, snmp_fd, addr, use_bc, side_cb); /* * If we are printing data from a print driver on stdin, ignore SIGTERM * so that the driver can finish out any page data, e.g. to eject the * current page. We only do this for stdin printing as otherwise there * is no way to cancel a raw print job... */ if (!print_fd) { #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */ sigset(SIGTERM, SIG_IGN); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); action.sa_handler = SIG_IGN; sigaction(SIGTERM, &action, NULL); #else signal(SIGTERM, SIG_IGN); #endif /* HAVE_SIGSET */ } else if (print_fd < 0) { /* * Copy print data from stdin, but don't mess with the signal handlers... */ print_fd = 0; } /* * Figure out the maximum file descriptor value to use with select()... */ nfds = (print_fd > device_fd ? print_fd : device_fd) + 1; /* * Now loop until we are out of data from print_fd... */ for (print_bytes = 0, print_ptr = print_buffer, offline = -1, paperout = -1, total_bytes = 0;;) { /* * Use select() to determine whether we have data to copy around... */ FD_ZERO(&input); if (!print_bytes) FD_SET(print_fd, &input); if (use_bc) FD_SET(device_fd, &input); if (!print_bytes && side_cb) FD_SET(CUPS_SC_FD, &input); FD_ZERO(&output); if (print_bytes || (!use_bc && !side_cb)) FD_SET(device_fd, &output); if (use_bc || side_cb) { timeout.tv_sec = 5; timeout.tv_usec = 0; if (select(nfds, &input, &output, NULL, &timeout) < 0) { /* * Pause printing to clear any pending errors... */ if (errno == ENXIO && offline != 1 && update_state) { fputs("STATE: +offline-report\n", stderr); _cupsLangPrintFilter(stderr, "INFO", _("The printer is not connected.")); offline = 1; } else if (errno == EINTR && total_bytes == 0) { fputs("DEBUG: Received an interrupt before any bytes were " "written, aborting.\n", stderr); return (0); } sleep(1); continue; } } /* * Check if we have a side-channel request ready... */ if (side_cb && FD_ISSET(CUPS_SC_FD, &input)) { /* * Do the side-channel request, then start back over in the select * loop since it may have read from print_fd... */ if ((*side_cb)(print_fd, device_fd, snmp_fd, addr, use_bc)) side_cb = NULL; continue; } /* * Check if we have back-channel data ready... */ if (FD_ISSET(device_fd, &input)) { if ((bc_bytes = read(device_fd, bc_buffer, sizeof(bc_buffer))) > 0) { fprintf(stderr, "DEBUG: Received " CUPS_LLFMT " bytes of back-channel data\n", CUPS_LLCAST bc_bytes); cupsBackChannelWrite(bc_buffer, (size_t)bc_bytes, 1.0); } else if (bc_bytes < 0 && errno != EAGAIN && errno != EINTR) { fprintf(stderr, "DEBUG: Error reading back-channel data: %s\n", strerror(errno)); use_bc = 0; } else if (bc_bytes == 0) use_bc = 0; } /* * Check if we have print data ready... */ if (FD_ISSET(print_fd, &input)) { if ((print_bytes = read(print_fd, print_buffer, sizeof(print_buffer))) < 0) { /* * Read error - bail if we don't see EAGAIN or EINTR... */ if (errno != EAGAIN && errno != EINTR) { fprintf(stderr, "DEBUG: Read failed: %s\n", strerror(errno)); _cupsLangPrintFilter(stderr, "ERROR", _("Unable to read print data.")); return (-1); } print_bytes = 0; } else if (print_bytes == 0) { /* * End of file, break out of the loop... */ break; } print_ptr = print_buffer; fprintf(stderr, "DEBUG: Read %d bytes of print data...\n", (int)print_bytes); } /* * Check if the device is ready to receive data and we have data to * send... */ if (print_bytes && FD_ISSET(device_fd, &output)) { if ((bytes = write(device_fd, print_ptr, (size_t)print_bytes)) < 0) { /* * Write error - bail if we don't see an error we can retry... */ if (errno == ENOSPC) { if (paperout != 1 && update_state) { fputs("STATE: +media-empty-warning\n", stderr); fputs("DEBUG: Out of paper\n", stderr); paperout = 1; } } else if (errno == ENXIO) { if (offline != 1 && update_state) { fputs("STATE: +offline-report\n", stderr); _cupsLangPrintFilter(stderr, "INFO", _("The printer is not connected.")); offline = 1; } } else if (errno != EAGAIN && errno != EINTR && errno != ENOTTY) { _cupsLangPrintError("ERROR", _("Unable to write print data")); return (-1); } } else { if (paperout && update_state) { fputs("STATE: -media-empty-warning\n", stderr); paperout = 0; } if (offline && update_state) { fputs("STATE: -offline-report\n", stderr); _cupsLangPrintFilter(stderr, "INFO", _("The printer is now connected.")); offline = 0; } fprintf(stderr, "DEBUG: Wrote %d bytes of print data...\n", (int)bytes); print_bytes -= bytes; print_ptr += bytes; total_bytes += bytes; } } /* * Do SNMP updates periodically... */ if (snmp_fd >= 0 && time(&curtime) >= snmp_update) { if (backendSNMPSupplies(snmp_fd, addr, NULL, NULL)) snmp_update = INT_MAX; else snmp_update = curtime + 5; } } /* * Return with success... */ return (total_bytes); } /* * 'backendWaitLoop()' - Wait for input from stdin while handling side-channel * queries. */ int /* O - 1 if data is ready, 0 if not */ backendWaitLoop( int snmp_fd, /* I - SNMP socket or -1 if none */ http_addr_t *addr, /* I - Address of device */ int use_bc, /* I - Use back-channel? */ _cups_sccb_t side_cb) /* I - Side-channel callback */ { int nfds; /* Number of file descriptors */ fd_set input; /* Input set for reading */ time_t curtime = 0, /* Current time */ snmp_update = 0;/* Last SNMP status update */ struct timeval timeout; /* Timeout for select() */ fprintf(stderr, "DEBUG: backendWaitLoop(snmp_fd=%d, addr=%p, side_cb=%p)\n", snmp_fd, addr, side_cb); /* * Now loop until we receive data from stdin... */ if (snmp_fd >= 0) snmp_update = time(NULL) + 5; for (;;) { /* * Use select() to determine whether we have data to copy around... */ FD_ZERO(&input); FD_SET(0, &input); if (side_cb) FD_SET(CUPS_SC_FD, &input); if (snmp_fd >= 0) { curtime = time(NULL); timeout.tv_sec = curtime >= snmp_update ? 0 : snmp_update - curtime; timeout.tv_usec = 0; nfds = select(CUPS_SC_FD + 1, &input, NULL, NULL, &timeout); } else nfds = select(CUPS_SC_FD + 1, &input, NULL, NULL, NULL); if (nfds < 0) { /* * Pause printing to clear any pending errors... */ if (errno == EINTR) { fputs("DEBUG: Received an interrupt before any bytes were " "written, aborting.\n", stderr); return (0); } sleep(1); continue; } /* * Check for input on stdin... */ if (FD_ISSET(0, &input)) break; /* * Check if we have a side-channel request ready... */ if (side_cb && FD_ISSET(CUPS_SC_FD, &input)) { /* * Do the side-channel request, then start back over in the select * loop since it may have read from print_fd... */ if ((*side_cb)(0, -1, snmp_fd, addr, use_bc)) side_cb = NULL; continue; } /* * Do SNMP updates periodically... */ if (snmp_fd >= 0 && curtime >= snmp_update) { if (backendSNMPSupplies(snmp_fd, addr, NULL, NULL)) snmp_fd = -1; else snmp_update = curtime + 5; } } /* * Return with success... */ return (1); } cups-2.2.7/backend/snmp-supplies.c000664 000765 000024 00000074750 13255074424 017542 0ustar00msweetstaff000000 000000 /* * SNMP supplies functions for CUPS. * * Copyright 2008-2015 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include "backend-private.h" #include #include /* * Local constants... */ #define CUPS_MAX_SUPPLIES 32 /* Maximum number of supplies for a printer */ #define CUPS_SUPPLY_TIMEOUT 2.0 /* Timeout for SNMP lookups */ #define CUPS_DEVELOPER_LOW 0x0001 #define CUPS_DEVELOPER_EMPTY 0x0002 #define CUPS_MARKER_SUPPLY_LOW 0x0004 #define CUPS_MARKER_SUPPLY_EMPTY 0x0008 #define CUPS_OPC_NEAR_EOL 0x0010 #define CUPS_OPC_LIFE_OVER 0x0020 #define CUPS_TONER_LOW 0x0040 #define CUPS_TONER_EMPTY 0x0080 #define CUPS_WASTE_ALMOST_FULL 0x0100 #define CUPS_WASTE_FULL 0x0200 #define CUPS_CLEANER_NEAR_EOL 0x0400 /* Proposed JPS3 */ #define CUPS_CLEANER_LIFE_OVER 0x0800 /* Proposed JPS3 */ #define CUPS_SNMP_NONE 0x0000 #define CUPS_SNMP_CAPACITY 0x0001 /* Supply levels reported as percentages */ /* * Local structures... */ typedef struct /**** Printer supply data ****/ { char name[CUPS_SNMP_MAX_STRING], /* Name of supply */ color[8]; /* Color: "#RRGGBB" or "none" */ int colorant, /* Colorant index */ sclass, /* Supply class */ type, /* Supply type */ max_capacity, /* Maximum capacity */ level; /* Current level value */ } backend_supplies_t; typedef struct /**** Printer state table ****/ { int bit; /* State bit */ const char *keyword; /* IPP printer-state-reasons keyword */ } backend_state_t; /* * Local globals... */ static http_addr_t current_addr; /* Current address */ static int current_state = -1; /* Current device state bits */ static int charset = -1; /* Character set for supply names */ static unsigned quirks = CUPS_SNMP_NONE; /* Quirks we have to work around */ static int num_supplies = 0; /* Number of supplies found */ static backend_supplies_t supplies[CUPS_MAX_SUPPLIES]; /* Supply information */ static int supply_state = -1; /* Supply state info */ static const int hrDeviceDescr[] = { CUPS_OID_hrDeviceDescr, 1, -1 }; /* Device description OID */ static const int hrPrinterStatus[] = { CUPS_OID_hrPrinterStatus, 1, -1 }; /* Current state OID */ static const int hrPrinterDetectedErrorState[] = { CUPS_OID_hrPrinterDetectedErrorState, 1, -1 }; /* Current printer state bits OID */ static const int prtGeneralCurrentLocalization[] = { CUPS_OID_prtGeneralCurrentLocalization, 1, -1 }; static const int prtLocalizationCharacterSet[] = { CUPS_OID_prtLocalizationCharacterSet, 1, 1, -1 }, prtLocalizationCharacterSetOffset = (sizeof(prtLocalizationCharacterSet) / sizeof(prtLocalizationCharacterSet[0])); static const int prtMarkerColorantValue[] = { CUPS_OID_prtMarkerColorantValue, -1 }, /* Colorant OID */ prtMarkerColorantValueOffset = (sizeof(prtMarkerColorantValue) / sizeof(prtMarkerColorantValue[0])); /* Offset to colorant index */ static const int prtMarkerLifeCount[] = { CUPS_OID_prtMarkerLifeCount, 1, 1, -1 }; /* Page counter OID */ static const int prtMarkerSuppliesEntry[] = { CUPS_OID_prtMarkerSuppliesEntry, -1 }; /* Supplies OID */ static const int prtMarkerSuppliesColorantIndex[] = { CUPS_OID_prtMarkerSuppliesColorantIndex, -1 }, /* Colorant index OID */ prtMarkerSuppliesColorantIndexOffset = (sizeof(prtMarkerSuppliesColorantIndex) / sizeof(prtMarkerSuppliesColorantIndex[0])); /* Offset to supply index */ static const int prtMarkerSuppliesDescription[] = { CUPS_OID_prtMarkerSuppliesDescription, -1 }, /* Description OID */ prtMarkerSuppliesDescriptionOffset = (sizeof(prtMarkerSuppliesDescription) / sizeof(prtMarkerSuppliesDescription[0])); /* Offset to supply index */ static const int prtMarkerSuppliesLevel[] = { CUPS_OID_prtMarkerSuppliesLevel, -1 }, /* Level OID */ prtMarkerSuppliesLevelOffset = (sizeof(prtMarkerSuppliesLevel) / sizeof(prtMarkerSuppliesLevel[0])); /* Offset to supply index */ static const int prtMarkerSuppliesMaxCapacity[] = { CUPS_OID_prtMarkerSuppliesMaxCapacity, -1 }, /* Max capacity OID */ prtMarkerSuppliesMaxCapacityOffset = (sizeof(prtMarkerSuppliesMaxCapacity) / sizeof(prtMarkerSuppliesMaxCapacity[0])); /* Offset to supply index */ static const int prtMarkerSuppliesClass[] = { CUPS_OID_prtMarkerSuppliesClass, -1 }, /* Class OID */ prtMarkerSuppliesClassOffset = (sizeof(prtMarkerSuppliesClass) / sizeof(prtMarkerSuppliesClass[0])); /* Offset to supply index */ static const int prtMarkerSuppliesType[] = { CUPS_OID_prtMarkerSuppliesType, -1 }, /* Type OID */ prtMarkerSuppliesTypeOffset = (sizeof(prtMarkerSuppliesType) / sizeof(prtMarkerSuppliesType[0])); /* Offset to supply index */ static const int prtMarkerSuppliesSupplyUnit[] = { CUPS_OID_prtMarkerSuppliesSupplyUnit, -1 }, /* Units OID */ prtMarkerSuppliesSupplyUnitOffset = (sizeof(prtMarkerSuppliesSupplyUnit) / sizeof(prtMarkerSuppliesSupplyUnit[0])); /* Offset to supply index */ static const backend_state_t printer_states[] = { /* { CUPS_TC_lowPaper, "media-low-report" }, */ { CUPS_TC_noPaper | CUPS_TC_inputTrayEmpty, "media-empty-warning" }, /* { CUPS_TC_lowToner, "toner-low-report" }, */ /* now use prtMarkerSupplies */ /* { CUPS_TC_noToner, "toner-empty-warning" }, */ /* now use prtMarkerSupplies */ { CUPS_TC_doorOpen, "door-open-report" }, { CUPS_TC_jammed, "media-jam-warning" }, /* { CUPS_TC_offline, "offline-report" }, */ /* unreliable */ /* { CUPS_TC_serviceRequested | CUPS_TC_overduePreventMaint, "service-needed-warning" }, */ /* unreliable */ { CUPS_TC_inputTrayMissing, "input-tray-missing-warning" }, { CUPS_TC_outputTrayMissing, "output-tray-missing-warning" }, { CUPS_TC_markerSupplyMissing, "marker-supply-missing-warning" }, { CUPS_TC_outputNearFull, "output-area-almost-full-report" }, { CUPS_TC_outputFull, "output-area-full-warning" } }; static const backend_state_t supply_states[] = { { CUPS_DEVELOPER_LOW, "developer-low-report" }, { CUPS_DEVELOPER_EMPTY, "developer-empty-warning" }, { CUPS_MARKER_SUPPLY_LOW, "marker-supply-low-report" }, { CUPS_MARKER_SUPPLY_EMPTY, "marker-supply-empty-warning" }, { CUPS_OPC_NEAR_EOL, "opc-near-eol-report" }, { CUPS_OPC_LIFE_OVER, "opc-life-over-warning" }, { CUPS_TONER_LOW, "toner-low-report" }, { CUPS_TONER_EMPTY, "toner-empty-warning" }, { CUPS_WASTE_ALMOST_FULL, "waste-receptacle-almost-full-report" }, { CUPS_WASTE_FULL, "waste-receptacle-full-warning" }, { CUPS_CLEANER_NEAR_EOL, "cleaner-life-almost-over-report" }, { CUPS_CLEANER_LIFE_OVER, "cleaner-life-over-warning" }, }; /* * Local functions... */ static void backend_init_supplies(int snmp_fd, http_addr_t *addr); static void backend_walk_cb(cups_snmp_t *packet, void *data); static void utf16_to_utf8(cups_utf8_t *dst, const unsigned char *src, size_t srcsize, size_t dstsize, int le); /* * 'backendSNMPSupplies()' - Get the current supplies for a device. */ int /* O - 0 on success, -1 on error */ backendSNMPSupplies( int snmp_fd, /* I - SNMP socket */ http_addr_t *addr, /* I - Printer address */ int *page_count, /* O - Page count */ int *printer_state) /* O - Printer state */ { if (!httpAddrEqual(addr, ¤t_addr)) backend_init_supplies(snmp_fd, addr); else if (num_supplies > 0) _cupsSNMPWalk(snmp_fd, ¤t_addr, CUPS_SNMP_VERSION_1, _cupsSNMPDefaultCommunity(), prtMarkerSuppliesLevel, CUPS_SUPPLY_TIMEOUT, backend_walk_cb, NULL); if (page_count) *page_count = -1; if (printer_state) *printer_state = -1; if (num_supplies > 0) { int i, /* Looping var */ percent, /* Percent full */ new_state, /* New state value */ change_state, /* State change */ new_supply_state = 0; /* Supply state */ char value[CUPS_MAX_SUPPLIES * 4], /* marker-levels value string */ *ptr; /* Pointer into value string */ cups_snmp_t packet; /* SNMP response packet */ /* * Generate the marker-levels value string... */ for (i = 0, ptr = value; i < num_supplies; i ++, ptr += strlen(ptr)) { if (supplies[i].max_capacity > 0 && supplies[i].level >= 0) percent = 100 * supplies[i].level / supplies[i].max_capacity; else if (supplies[i].level >= 0 && supplies[i].level <= 100 && (quirks & CUPS_SNMP_CAPACITY)) percent = supplies[i].level; else percent = 50; if (supplies[i].sclass == CUPS_TC_receptacleThatIsFilled) percent = 100 - percent; if (percent <= 5) { switch (supplies[i].type) { case CUPS_TC_toner : case CUPS_TC_tonerCartridge : if (percent <= 1) new_supply_state |= CUPS_TONER_EMPTY; else new_supply_state |= CUPS_TONER_LOW; break; case CUPS_TC_ink : case CUPS_TC_inkCartridge : case CUPS_TC_inkRibbon : case CUPS_TC_solidWax : case CUPS_TC_ribbonWax : if (percent <= 1) new_supply_state |= CUPS_MARKER_SUPPLY_EMPTY; else new_supply_state |= CUPS_MARKER_SUPPLY_LOW; break; case CUPS_TC_developer : if (percent <= 1) new_supply_state |= CUPS_DEVELOPER_EMPTY; else new_supply_state |= CUPS_DEVELOPER_LOW; break; case CUPS_TC_coronaWire : case CUPS_TC_fuser : case CUPS_TC_opc : case CUPS_TC_transferUnit : if (percent <= 1) new_supply_state |= CUPS_OPC_LIFE_OVER; else new_supply_state |= CUPS_OPC_NEAR_EOL; break; #if 0 /* Because no two vendors report waste containers the same, disable SNMP reporting of same */ case CUPS_TC_wasteInk : case CUPS_TC_wastePaper : case CUPS_TC_wasteToner : case CUPS_TC_wasteWater : case CUPS_TC_wasteWax : if (percent <= 1) new_supply_state |= CUPS_WASTE_FULL; else new_supply_state |= CUPS_WASTE_ALMOST_FULL; break; #endif /* 0 */ case CUPS_TC_cleanerUnit : case CUPS_TC_fuserCleaningPad : if (percent <= 1) new_supply_state |= CUPS_CLEANER_LIFE_OVER; else new_supply_state |= CUPS_CLEANER_NEAR_EOL; break; } } if (i) *ptr++ = ','; if ((supplies[i].max_capacity > 0 || (quirks & CUPS_SNMP_CAPACITY)) && supplies[i].level >= 0) snprintf(ptr, sizeof(value) - (size_t)(ptr - value), "%d", percent); else strlcpy(ptr, "-1", sizeof(value) - (size_t)(ptr - value)); } fprintf(stderr, "ATTR: marker-levels=%s\n", value); if (supply_state < 0) change_state = 0xffff; else change_state = supply_state ^ new_supply_state; fprintf(stderr, "DEBUG: new_supply_state=%x, change_state=%x\n", new_supply_state, change_state); for (i = 0; i < (int)(sizeof(supply_states) / sizeof(supply_states[0])); i ++) if (change_state & supply_states[i].bit) { fprintf(stderr, "STATE: %c%s\n", (new_supply_state & supply_states[i].bit) ? '+' : '-', supply_states[i].keyword); } supply_state = new_supply_state; /* * Get the current printer status bits... */ if (!_cupsSNMPWrite(snmp_fd, addr, CUPS_SNMP_VERSION_1, _cupsSNMPDefaultCommunity(), CUPS_ASN1_GET_REQUEST, 1, hrPrinterDetectedErrorState)) return (-1); if (!_cupsSNMPRead(snmp_fd, &packet, CUPS_SUPPLY_TIMEOUT) || packet.object_type != CUPS_ASN1_OCTET_STRING) return (-1); if (packet.object_value.string.num_bytes == 2) new_state = (packet.object_value.string.bytes[0] << 8) | packet.object_value.string.bytes[1]; else if (packet.object_value.string.num_bytes == 1) new_state = (packet.object_value.string.bytes[0] << 8); else new_state = 0; if (current_state < 0) change_state = 0xffff; else change_state = current_state ^ new_state; fprintf(stderr, "DEBUG: new_state=%x, change_state=%x\n", new_state, change_state); for (i = 0; i < (int)(sizeof(printer_states) / sizeof(printer_states[0])); i ++) if (change_state & printer_states[i].bit) { fprintf(stderr, "STATE: %c%s\n", (new_state & printer_states[i].bit) ? '+' : '-', printer_states[i].keyword); } current_state = new_state; /* * Get the current printer state... */ if (printer_state) { if (!_cupsSNMPWrite(snmp_fd, addr, CUPS_SNMP_VERSION_1, _cupsSNMPDefaultCommunity(), CUPS_ASN1_GET_REQUEST, 1, hrPrinterStatus)) return (-1); if (!_cupsSNMPRead(snmp_fd, &packet, CUPS_SUPPLY_TIMEOUT) || packet.object_type != CUPS_ASN1_INTEGER) return (-1); *printer_state = packet.object_value.integer; } /* * Get the current page count... */ if (page_count) { if (!_cupsSNMPWrite(snmp_fd, addr, CUPS_SNMP_VERSION_1, _cupsSNMPDefaultCommunity(), CUPS_ASN1_GET_REQUEST, 1, prtMarkerLifeCount)) return (-1); if (!_cupsSNMPRead(snmp_fd, &packet, CUPS_SUPPLY_TIMEOUT) || packet.object_type != CUPS_ASN1_COUNTER) return (-1); *page_count = packet.object_value.counter; } return (0); } else return (-1); } /* * 'backend_init_supplies()' - Initialize the supplies list. */ static void backend_init_supplies( int snmp_fd, /* I - SNMP socket */ http_addr_t *addr) /* I - Printer address */ { int i, /* Looping var */ type; /* Current marker type */ cups_file_t *cachefile; /* Cache file */ const char *cachedir; /* CUPS_CACHEDIR value */ char addrstr[1024], /* Address string */ cachefilename[1024], /* Cache filename */ description[CUPS_SNMP_MAX_STRING], /* Device description string */ value[CUPS_MAX_SUPPLIES * (CUPS_SNMP_MAX_STRING * 4 + 3)], /* Value string */ *ptr, /* Pointer into value string */ *name_ptr; /* Pointer into name string */ cups_snmp_t packet; /* SNMP response packet */ ppd_file_t *ppd; /* PPD file for this queue */ ppd_attr_t *ppdattr; /* cupsSNMPSupplies attribute */ static const char * const types[] = /* Supply types */ { "other", "unknown", "toner", "waste-toner", "ink", "ink-cartridge", "ink-ribbon", "waste-ink", "opc", "developer", "fuser-oil", "solid-wax", "ribbon-wax", "waste-wax", "fuser", "corona-wire", "fuser-oil-wick", "cleaner-unit", "fuser-cleaning-pad", "transfer-unit", "toner-cartridge", "fuser-oiler", "water", "waste-water", "glue-water-additive", "waste-paper", "binding-supply", "banding-supply", "stitching-wire", "shrink-wrap", "paper-wrap", "staples", "inserts", "covers" }; /* * Reset state information... */ current_addr = *addr; current_state = -1; num_supplies = -1; charset = -1; memset(supplies, 0, sizeof(supplies)); /* * See if we should be getting supply levels via SNMP... */ if ((ppd = ppdOpenFile(getenv("PPD"))) == NULL || ((ppdattr = ppdFindAttr(ppd, "cupsSNMPSupplies", NULL)) != NULL && ppdattr->value && _cups_strcasecmp(ppdattr->value, "true"))) { ppdClose(ppd); return; } if ((ppdattr = ppdFindAttr(ppd, "cupsSNMPQuirks", NULL)) != NULL) { if (!_cups_strcasecmp(ppdattr->value, "capacity")) quirks |= CUPS_SNMP_CAPACITY; } ppdClose(ppd); /* * Get the device description... */ if (!_cupsSNMPWrite(snmp_fd, addr, CUPS_SNMP_VERSION_1, _cupsSNMPDefaultCommunity(), CUPS_ASN1_GET_REQUEST, 1, hrDeviceDescr)) return; if (!_cupsSNMPRead(snmp_fd, &packet, CUPS_SUPPLY_TIMEOUT) || packet.object_type != CUPS_ASN1_OCTET_STRING) { strlcpy(description, "Unknown", sizeof(description)); num_supplies = 0; } else strlcpy(description, (char *)packet.object_value.string.bytes, sizeof(description)); fprintf(stderr, "DEBUG2: hrDeviceDesc=\"%s\"\n", description); /* * See if we have already queried this device... */ httpAddrString(addr, addrstr, sizeof(addrstr)); if ((cachedir = getenv("CUPS_CACHEDIR")) == NULL) cachedir = CUPS_CACHEDIR; snprintf(cachefilename, sizeof(cachefilename), "%s/%s.snmp", cachedir, addrstr); if ((cachefile = cupsFileOpen(cachefilename, "r")) != NULL) { /* * Yes, read the cache file: * * 3 num_supplies charset * device description * supply structures... */ if (cupsFileGets(cachefile, value, sizeof(value))) { if (sscanf(value, "3 %d%d", &num_supplies, &charset) == 2 && num_supplies <= CUPS_MAX_SUPPLIES && cupsFileGets(cachefile, value, sizeof(value))) { if (!strcmp(description, value)) cupsFileRead(cachefile, (char *)supplies, (size_t)num_supplies * sizeof(backend_supplies_t)); else { num_supplies = -1; charset = -1; } } else { num_supplies = -1; charset = -1; } } cupsFileClose(cachefile); } /* * If the cache information isn't correct, scan for supplies... */ if (charset < 0) { /* * Get the configured character set... */ int oid[CUPS_SNMP_MAX_OID]; /* OID for character set */ if (!_cupsSNMPWrite(snmp_fd, ¤t_addr, CUPS_SNMP_VERSION_1, _cupsSNMPDefaultCommunity(), CUPS_ASN1_GET_REQUEST, 1, prtGeneralCurrentLocalization)) return; if (!_cupsSNMPRead(snmp_fd, &packet, CUPS_SUPPLY_TIMEOUT) || packet.object_type != CUPS_ASN1_INTEGER) { fprintf(stderr, "DEBUG: prtGeneralCurrentLocalization type is %x, expected %x!\n", packet.object_type, CUPS_ASN1_INTEGER); return; } fprintf(stderr, "DEBUG2: prtGeneralCurrentLocalization=%d\n", packet.object_value.integer); _cupsSNMPCopyOID(oid, prtLocalizationCharacterSet, CUPS_SNMP_MAX_OID); oid[prtLocalizationCharacterSetOffset - 2] = packet.object_value.integer; if (!_cupsSNMPWrite(snmp_fd, ¤t_addr, CUPS_SNMP_VERSION_1, _cupsSNMPDefaultCommunity(), CUPS_ASN1_GET_REQUEST, 1, oid)) return; if (!_cupsSNMPRead(snmp_fd, &packet, CUPS_SUPPLY_TIMEOUT) || packet.object_type != CUPS_ASN1_INTEGER) { fprintf(stderr, "DEBUG: prtLocalizationCharacterSet type is %x, expected %x!\n", packet.object_type, CUPS_ASN1_INTEGER); return; } fprintf(stderr, "DEBUG2: prtLocalizationCharacterSet=%d\n", packet.object_value.integer); charset = packet.object_value.integer; } if (num_supplies < 0) { /* * Walk the printer configuration information... */ _cupsSNMPWalk(snmp_fd, ¤t_addr, CUPS_SNMP_VERSION_1, _cupsSNMPDefaultCommunity(), prtMarkerSuppliesEntry, CUPS_SUPPLY_TIMEOUT, backend_walk_cb, NULL); } /* * Save the cached information... */ if (num_supplies < 0) num_supplies = 0; if ((cachefile = cupsFileOpen(cachefilename, "w")) != NULL) { cupsFilePrintf(cachefile, "3 %d %d\n", num_supplies, charset); cupsFilePrintf(cachefile, "%s\n", description); if (num_supplies > 0) cupsFileWrite(cachefile, (char *)supplies, (size_t)num_supplies * sizeof(backend_supplies_t)); cupsFileClose(cachefile); } if (num_supplies <= 0) return; /* * Get the colors... */ for (i = 0; i < num_supplies; i ++) strlcpy(supplies[i].color, "none", sizeof(supplies[i].color)); _cupsSNMPWalk(snmp_fd, ¤t_addr, CUPS_SNMP_VERSION_1, _cupsSNMPDefaultCommunity(), prtMarkerColorantValue, CUPS_SUPPLY_TIMEOUT, backend_walk_cb, NULL); /* * Output the marker-colors attribute... */ for (i = 0, ptr = value; i < num_supplies; i ++, ptr += strlen(ptr)) { if (i) *ptr++ = ','; strlcpy(ptr, supplies[i].color, sizeof(value) - (size_t)(ptr - value)); } fprintf(stderr, "ATTR: marker-colors=%s\n", value); /* * Output the marker-names attribute (the double quoting is necessary to deal * with embedded quotes and commas in the marker names...) */ for (i = 0, ptr = value; i < num_supplies; i ++) { if (i) *ptr++ = ','; *ptr++ = '\''; *ptr++ = '\"'; for (name_ptr = supplies[i].name; *name_ptr;) { if (*name_ptr == '\\' || *name_ptr == '\"' || *name_ptr == '\'') { *ptr++ = '\\'; *ptr++ = '\\'; *ptr++ = '\\'; } *ptr++ = *name_ptr++; } *ptr++ = '\"'; *ptr++ = '\''; } *ptr = '\0'; fprintf(stderr, "ATTR: marker-names=%s\n", value); /* * Output the marker-types attribute... */ for (i = 0, ptr = value; i < num_supplies; i ++, ptr += strlen(ptr)) { if (i) *ptr++ = ','; type = supplies[i].type; if (type < CUPS_TC_other || type > CUPS_TC_covers) strlcpy(ptr, "unknown", sizeof(value) - (size_t)(ptr - value)); else strlcpy(ptr, types[type - CUPS_TC_other], sizeof(value) - (size_t)(ptr - value)); } fprintf(stderr, "ATTR: marker-types=%s\n", value); } /* * 'backend_walk_cb()' - Interpret the supply value responses. */ static void backend_walk_cb(cups_snmp_t *packet, /* I - SNMP packet */ void *data) /* I - User data (unused) */ { int i, j, k; /* Looping vars */ static const char * const colors[][2] = { /* Standard color names */ { "black", "#000000" }, { "blue", "#0000FF" }, { "brown", "#A52A2A" }, { "cyan", "#00FFFF" }, { "dark-gray", "#404040" }, { "dark gray", "#404040" }, { "dark-yellow", "#FFCC00" }, { "dark yellow", "#FFCC00" }, { "gold", "#FFD700" }, { "gray", "#808080" }, { "green", "#00FF00" }, { "light-black", "#606060" }, { "light black", "#606060" }, { "light-cyan", "#E0FFFF" }, { "light cyan", "#E0FFFF" }, { "light-gray", "#D3D3D3" }, { "light gray", "#D3D3D3" }, { "light-magenta", "#FF77FF" }, { "light magenta", "#FF77FF" }, { "magenta", "#FF00FF" }, { "orange", "#FFA500" }, { "red", "#FF0000" }, { "silver", "#C0C0C0" }, { "white", "#FFFFFF" }, { "yellow", "#FFFF00" } }; (void)data; if (_cupsSNMPIsOIDPrefixed(packet, prtMarkerColorantValue) && packet->object_type == CUPS_ASN1_OCTET_STRING) { /* * Get colorant... */ i = packet->object_name[prtMarkerColorantValueOffset]; fprintf(stderr, "DEBUG2: prtMarkerColorantValue.1.%d = \"%s\"\n", i, (char *)packet->object_value.string.bytes); for (j = 0; j < num_supplies; j ++) if (supplies[j].colorant == i) { for (k = 0; k < (int)(sizeof(colors) / sizeof(colors[0])); k ++) if (!_cups_strcasecmp(colors[k][0], (char *)packet->object_value.string.bytes)) { strlcpy(supplies[j].color, colors[k][1], sizeof(supplies[j].color)); break; } } } else if (_cupsSNMPIsOIDPrefixed(packet, prtMarkerSuppliesColorantIndex)) { /* * Get colorant index... */ i = packet->object_name[prtMarkerSuppliesColorantIndexOffset]; if (i < 1 || i > CUPS_MAX_SUPPLIES || packet->object_type != CUPS_ASN1_INTEGER) return; fprintf(stderr, "DEBUG2: prtMarkerSuppliesColorantIndex.1.%d = %d\n", i, packet->object_value.integer); if (i > num_supplies) num_supplies = i; supplies[i - 1].colorant = packet->object_value.integer; } else if (_cupsSNMPIsOIDPrefixed(packet, prtMarkerSuppliesDescription)) { /* * Get supply name/description... */ i = packet->object_name[prtMarkerSuppliesDescriptionOffset]; if (i < 1 || i > CUPS_MAX_SUPPLIES || packet->object_type != CUPS_ASN1_OCTET_STRING) return; if (i > num_supplies) num_supplies = i; switch (charset) { case CUPS_TC_csASCII : case CUPS_TC_csUTF8 : case CUPS_TC_csUnicodeASCII : strlcpy(supplies[i - 1].name, (char *)packet->object_value.string.bytes, sizeof(supplies[0].name)); break; case CUPS_TC_csISOLatin1 : case CUPS_TC_csUnicodeLatin1 : cupsCharsetToUTF8((cups_utf8_t *)supplies[i - 1].name, (char *)packet->object_value.string.bytes, sizeof(supplies[0].name), CUPS_ISO8859_1); break; case CUPS_TC_csShiftJIS : case CUPS_TC_csWindows31J : /* Close enough for our purposes */ cupsCharsetToUTF8((cups_utf8_t *)supplies[i - 1].name, (char *)packet->object_value.string.bytes, sizeof(supplies[0].name), CUPS_JIS_X0213); break; case CUPS_TC_csUCS4 : case CUPS_TC_csUTF32 : case CUPS_TC_csUTF32BE : case CUPS_TC_csUTF32LE : cupsUTF32ToUTF8((cups_utf8_t *)supplies[i - 1].name, (cups_utf32_t *)packet->object_value.string.bytes, sizeof(supplies[0].name)); break; case CUPS_TC_csUnicode : case CUPS_TC_csUTF16BE : case CUPS_TC_csUTF16LE : utf16_to_utf8((cups_utf8_t *)supplies[i - 1].name, packet->object_value.string.bytes, packet->object_value.string.num_bytes, sizeof(supplies[0].name), charset == CUPS_TC_csUTF16LE); break; default : /* * If we get here, the printer is using an unknown character set and * we just want to copy characters that look like ASCII... */ { char *src, *dst; /* Pointers into strings */ /* * Loop safe because both the object_value and supplies char arrays * are CUPS_SNMP_MAX_STRING elements long. */ for (src = (char *)packet->object_value.string.bytes, dst = supplies[i - 1].name; *src; src ++) { if ((*src & 0x80) || *src < ' ' || *src == 0x7f) *dst++ = '?'; else *dst++ = *src; } *dst = '\0'; } break; } fprintf(stderr, "DEBUG2: prtMarkerSuppliesDescription.1.%d = \"%s\"\n", i, supplies[i - 1].name); } else if (_cupsSNMPIsOIDPrefixed(packet, prtMarkerSuppliesLevel)) { /* * Get level... */ i = packet->object_name[prtMarkerSuppliesLevelOffset]; if (i < 1 || i > CUPS_MAX_SUPPLIES || packet->object_type != CUPS_ASN1_INTEGER) return; fprintf(stderr, "DEBUG2: prtMarkerSuppliesLevel.1.%d = %d\n", i, packet->object_value.integer); if (i > num_supplies) num_supplies = i; supplies[i - 1].level = packet->object_value.integer; } else if (_cupsSNMPIsOIDPrefixed(packet, prtMarkerSuppliesMaxCapacity) && !(quirks & CUPS_SNMP_CAPACITY)) { /* * Get max capacity... */ i = packet->object_name[prtMarkerSuppliesMaxCapacityOffset]; if (i < 1 || i > CUPS_MAX_SUPPLIES || packet->object_type != CUPS_ASN1_INTEGER) return; fprintf(stderr, "DEBUG2: prtMarkerSuppliesMaxCapacity.1.%d = %d\n", i, packet->object_value.integer); if (i > num_supplies) num_supplies = i; if (supplies[i - 1].max_capacity == 0 && packet->object_value.integer > 0) supplies[i - 1].max_capacity = packet->object_value.integer; } else if (_cupsSNMPIsOIDPrefixed(packet, prtMarkerSuppliesClass)) { /* * Get marker class... */ i = packet->object_name[prtMarkerSuppliesClassOffset]; if (i < 1 || i > CUPS_MAX_SUPPLIES || packet->object_type != CUPS_ASN1_INTEGER) return; fprintf(stderr, "DEBUG2: prtMarkerSuppliesClass.1.%d = %d\n", i, packet->object_value.integer); if (i > num_supplies) num_supplies = i; supplies[i - 1].sclass = packet->object_value.integer; } else if (_cupsSNMPIsOIDPrefixed(packet, prtMarkerSuppliesType)) { /* * Get marker type... */ i = packet->object_name[prtMarkerSuppliesTypeOffset]; if (i < 1 || i > CUPS_MAX_SUPPLIES || packet->object_type != CUPS_ASN1_INTEGER) return; fprintf(stderr, "DEBUG2: prtMarkerSuppliesType.1.%d = %d\n", i, packet->object_value.integer); if (i > num_supplies) num_supplies = i; supplies[i - 1].type = packet->object_value.integer; } else if (_cupsSNMPIsOIDPrefixed(packet, prtMarkerSuppliesSupplyUnit)) { /* * Get units for capacity... */ i = packet->object_name[prtMarkerSuppliesSupplyUnitOffset]; if (i < 1 || i > CUPS_MAX_SUPPLIES || packet->object_type != CUPS_ASN1_INTEGER) return; fprintf(stderr, "DEBUG2: prtMarkerSuppliesSupplyUnit.1.%d = %d\n", i, packet->object_value.integer); if (i > num_supplies) num_supplies = i; if (packet->object_value.integer == CUPS_TC_percent) supplies[i - 1].max_capacity = 100; } } /* * 'utf16_to_utf8()' - Convert UTF-16 text to UTF-8. */ static void utf16_to_utf8( cups_utf8_t *dst, /* I - Destination buffer */ const unsigned char *src, /* I - Source string */ size_t srcsize, /* I - Size of source string */ size_t dstsize, /* I - Size of destination buffer */ int le) /* I - Source is little-endian? */ { cups_utf32_t ch, /* Current character */ temp[CUPS_SNMP_MAX_STRING], /* UTF-32 string */ *ptr; /* Pointer into UTF-32 string */ for (ptr = temp; srcsize >= 2;) { if (le) ch = (cups_utf32_t)(src[0] | (src[1] << 8)); else ch = (cups_utf32_t)((src[0] << 8) | src[1]); src += 2; srcsize -= 2; if (ch >= 0xd800 && ch <= 0xdbff && srcsize >= 2) { /* * Multi-word UTF-16 char... */ cups_utf32_t lch; /* Lower word */ if (le) lch = (cups_utf32_t)(src[0] | (src[1] << 8)); else lch = (cups_utf32_t)((src[0] << 8) | src[1]); if (lch >= 0xdc00 && lch <= 0xdfff) { src += 2; srcsize -= 2; ch = (((ch & 0x3ff) << 10) | (lch & 0x3ff)) + 0x10000; } } if (ptr < (temp + CUPS_SNMP_MAX_STRING - 1)) *ptr++ = ch; } *ptr = '\0'; cupsUTF32ToUTF8(dst, temp, (int)dstsize); } cups-2.2.7/backend/snmp.c000664 000765 000024 00000100664 13255074424 015672 0ustar00msweetstaff000000 000000 /* * SNMP discovery backend for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 2006-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include "backend-private.h" #include #include #include #include /* * This backend implements SNMP printer discovery. It uses a broadcast- * based approach to get SNMP response packets from potential printers, * requesting OIDs from the Host and Port Monitor MIBs, does a URI * lookup based on the device description string, and finally a probe of * port 9100 (AppSocket) and 515 (LPD). * * The current focus is on printers with internal network cards, although * the code also works with many external print servers as well. * * The backend reads the snmp.conf file from the CUPS_SERVERROOT directory * which can contain comments, blank lines, or any number of the following * directives: * * Address ip-address * Address @LOCAL * Address @IF(name) * Community name * DebugLevel N * DeviceURI "regex pattern" uri * HostNameLookups on * HostNameLookups off * MaxRunTime N * * The default is to use: * * Address @LOCAL * Community public * DebugLevel 0 * HostNameLookups off * MaxRunTime 120 * * This backend is known to work with the following network printers and * print servers: * * Axis OfficeBasic, 5400, 5600 * Brother * EPSON * Genicom * HP JetDirect * Lexmark * Sharp * Tektronix * Xerox * * It does not currently work with: * * DLink * Linksys * Netgear * Okidata * * (for all of these, they do not support the Host MIB) */ /* * Types... */ enum /**** Request IDs for each field ****/ { DEVICE_TYPE = 1, DEVICE_DESCRIPTION, DEVICE_LOCATION, DEVICE_ID, DEVICE_URI, DEVICE_PRODUCT }; typedef struct device_uri_s /**** DeviceURI values ****/ { regex_t re; /* Regular expression to match */ cups_array_t *uris; /* URIs */ } device_uri_t; typedef struct snmp_cache_s /**** SNMP scan cache ****/ { http_addr_t address; /* Address of device */ char *addrname, /* Name of device */ *uri, /* device-uri */ *id, /* device-id */ *info, /* device-info */ *location, /* device-location */ *make_and_model; /* device-make-and-model */ int sent; /* Has this device been listed? */ } snmp_cache_t; /* * Local functions... */ static char *add_array(cups_array_t *a, const char *s); static void add_cache(http_addr_t *addr, const char *addrname, const char *uri, const char *id, const char *make_and_model); static device_uri_t *add_device_uri(char *value); static void alarm_handler(int sig); static int compare_cache(snmp_cache_t *a, snmp_cache_t *b); static void debug_printf(const char *format, ...); static void fix_make_model(char *make_model, const char *old_make_model, int make_model_size); static void free_array(cups_array_t *a); static void free_cache(void); static http_addrlist_t *get_interface_addresses(const char *ifname); static void list_device(snmp_cache_t *cache); static const char *password_cb(const char *prompt); static void probe_device(snmp_cache_t *device); static void read_snmp_conf(const char *address); static void read_snmp_response(int fd); static double run_time(void); static void scan_devices(int ipv4, int ipv6); static int try_connect(http_addr_t *addr, const char *addrname, int port); static void update_cache(snmp_cache_t *device, const char *uri, const char *id, const char *make_model); /* * Local globals... */ static cups_array_t *Addresses = NULL; static cups_array_t *Communities = NULL; static cups_array_t *Devices = NULL; static int DebugLevel = 0; static const int DescriptionOID[] = { CUPS_OID_hrDeviceDescr, 1, -1 }; static const int LocationOID[] = { CUPS_OID_sysLocation, 0, -1 }; static const int DeviceTypeOID[] = { CUPS_OID_hrDeviceType, 1, -1 }; static const int DeviceIdOID[] = { CUPS_OID_ppmPrinterIEEE1284DeviceId, 1, -1 }; static const int UriOID[] = { CUPS_OID_ppmPortServiceNameOrURI, 1, 1, -1 }; static const int LexmarkProductOID[] = { 1,3,6,1,4,1,641,2,1,2,1,2,1,-1 }; static const int LexmarkProductOID2[] = { 1,3,6,1,4,1,674,10898,100,2,1,2,1,2,1,-1 }; static const int LexmarkDeviceIdOID[] = { 1,3,6,1,4,1,641,2,1,2,1,3,1,-1 }; static const int XeroxProductOID[] = { 1,3,6,1,4,1,128,2,1,3,1,2,0,-1 }; static cups_array_t *DeviceURIs = NULL; static int HostNameLookups = 0; static int MaxRunTime = 120; static struct timeval StartTime; /* * 'main()' - Discover printers via SNMP. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments (6 or 7) */ char *argv[]) /* I - Command-line arguments */ { int ipv4, /* SNMP IPv4 socket */ ipv6; /* SNMP IPv6 socket */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ /* * Check command-line options... */ if (argc > 2) { _cupsLangPuts(stderr, _("Usage: snmp [host-or-ip-address]")); return (1); } /* * Set the password callback for IPP operations... */ cupsSetPasswordCB(password_cb); /* * Catch SIGALRM signals... */ #ifdef HAVE_SIGSET sigset(SIGALRM, alarm_handler); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); sigaddset(&action.sa_mask, SIGALRM); action.sa_handler = alarm_handler; sigaction(SIGALRM, &action, NULL); #else signal(SIGALRM, alarm_handler); #endif /* HAVE_SIGSET */ /* * Open the SNMP socket... */ if ((ipv4 = _cupsSNMPOpen(AF_INET)) < 0) return (1); #ifdef AF_INET6 if ((ipv6 = _cupsSNMPOpen(AF_INET6)) < 0) perror("DEBUG: Unable to create IPv6 socket"); #else ipv6 = -1; #endif /* AF_INET6 */ /* * Read the configuration file and any cache data... */ read_snmp_conf(argv[1]); _cupsSNMPSetDebug(DebugLevel); Devices = cupsArrayNew((cups_array_func_t)compare_cache, NULL); /* * Scan for devices... */ scan_devices(ipv4, ipv6); /* * Close, free, and return with no errors... */ _cupsSNMPClose(ipv4); if (ipv6 >= 0) _cupsSNMPClose(ipv6); free_array(Addresses); free_array(Communities); free_cache(); return (0); } /* * 'add_array()' - Add a string to an array. */ static char * /* O - New string */ add_array(cups_array_t *a, /* I - Array */ const char *s) /* I - String to add */ { char *dups; /* New string */ dups = strdup(s); cupsArrayAdd(a, dups); return (dups); } /* * 'add_cache()' - Add a cached device... */ static void add_cache(http_addr_t *addr, /* I - Device IP address */ const char *addrname, /* I - IP address or name string */ const char *uri, /* I - Device URI */ const char *id, /* I - 1284 device ID */ const char *make_and_model) /* I - Make and model */ { snmp_cache_t *temp; /* New device entry */ debug_printf("DEBUG: add_cache(addr=%p, addrname=\"%s\", uri=\"%s\", " "id=\"%s\", make_and_model=\"%s\")\n", addr, addrname, uri ? uri : "(null)", id ? id : "(null)", make_and_model ? make_and_model : "(null)"); temp = calloc(1, sizeof(snmp_cache_t)); memcpy(&(temp->address), addr, sizeof(temp->address)); temp->addrname = strdup(addrname); if (uri) temp->uri = strdup(uri); if (id) temp->id = strdup(id); if (make_and_model) temp->make_and_model = strdup(make_and_model); cupsArrayAdd(Devices, temp); if (uri) list_device(temp); } /* * 'add_device_uri()' - Add a device URI to the cache. * * The value string is modified (chopped up) as needed. */ static device_uri_t * /* O - Device URI */ add_device_uri(char *value) /* I - Value from snmp.conf */ { device_uri_t *device_uri; /* Device URI */ char *start; /* Start of value */ /* * Allocate memory as needed... */ if (!DeviceURIs) DeviceURIs = cupsArrayNew(NULL, NULL); if (!DeviceURIs) return (NULL); if ((device_uri = calloc(1, sizeof(device_uri_t))) == NULL) return (NULL); if ((device_uri->uris = cupsArrayNew(NULL, NULL)) == NULL) { free(device_uri); return (NULL); } /* * Scan the value string for the regular expression and URI(s)... */ value ++; /* Skip leading " */ for (start = value; *value && *value != '\"'; value ++) if (*value == '\\' && value[1]) _cups_strcpy(value, value + 1); if (!*value) { fputs("ERROR: Missing end quote for DeviceURI!\n", stderr); cupsArrayDelete(device_uri->uris); free(device_uri); return (NULL); } *value++ = '\0'; if (regcomp(&(device_uri->re), start, REG_EXTENDED | REG_ICASE)) { fputs("ERROR: Bad regular expression for DeviceURI!\n", stderr); cupsArrayDelete(device_uri->uris); free(device_uri); return (NULL); } while (*value) { while (isspace(*value & 255)) value ++; if (!*value) break; for (start = value; *value && !isspace(*value & 255); value ++); if (*value) *value++ = '\0'; cupsArrayAdd(device_uri->uris, strdup(start)); } /* * Add the device URI to the list and return it... */ cupsArrayAdd(DeviceURIs, device_uri); return (device_uri); } /* * 'alarm_handler()' - Handle alarm signals... */ static void alarm_handler(int sig) /* I - Signal number */ { /* * Do nothing... */ (void)sig; #if !defined(HAVE_SIGSET) && !defined(HAVE_SIGACTION) signal(SIGALRM, alarm_handler); #endif /* !HAVE_SIGSET && !HAVE_SIGACTION */ if (DebugLevel) write(2, "DEBUG: ALARM!\n", 14); } /* * 'compare_cache()' - Compare two cache entries. */ static int /* O - Result of comparison */ compare_cache(snmp_cache_t *a, /* I - First cache entry */ snmp_cache_t *b) /* I - Second cache entry */ { return (_cups_strcasecmp(a->addrname, b->addrname)); } /* * 'debug_printf()' - Display some debugging information. */ static void debug_printf(const char *format, /* I - Printf-style format string */ ...) /* I - Additional arguments as needed */ { va_list ap; /* Pointer to arguments */ if (!DebugLevel) return; va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); } /* * 'fix_make_model()' - Fix common problems in the make-and-model string. */ static void fix_make_model( char *make_model, /* I - New make-and-model string */ const char *old_make_model, /* I - Old make-and-model string */ int make_model_size) /* I - Size of new string buffer */ { char *mmptr; /* Pointer into make-and-model string */ /* * Fix some common problems with the make-and-model string so * that printer driver detection works better... */ if (!_cups_strncasecmp(old_make_model, "Hewlett-Packard", 15)) { /* * Strip leading Hewlett-Packard and hp prefixes and replace * with a single HP manufacturer prefix... */ mmptr = (char *)old_make_model + 15; while (isspace(*mmptr & 255)) mmptr ++; if (!_cups_strncasecmp(mmptr, "hp", 2)) { mmptr += 2; while (isspace(*mmptr & 255)) mmptr ++; } make_model[0] = 'H'; make_model[1] = 'P'; make_model[2] = ' '; strlcpy(make_model + 3, mmptr, (size_t)make_model_size - 3); } else if (!_cups_strncasecmp(old_make_model, "deskjet", 7)) snprintf(make_model, (size_t)make_model_size, "HP DeskJet%s", old_make_model + 7); else if (!_cups_strncasecmp(old_make_model, "officejet", 9)) snprintf(make_model, (size_t)make_model_size, "HP OfficeJet%s", old_make_model + 9); else if (!_cups_strncasecmp(old_make_model, "stylus_pro_", 11)) snprintf(make_model, (size_t)make_model_size, "EPSON Stylus Pro %s", old_make_model + 11); else strlcpy(make_model, old_make_model, (size_t)make_model_size); if ((mmptr = strstr(make_model, ", Inc.,")) != NULL) { /* * Strip inc. from name, e.g. "Tektronix, Inc., Phaser 560" * becomes "Tektronix Phaser 560"... */ _cups_strcpy(mmptr, mmptr + 7); } if ((mmptr = strstr(make_model, " Network")) != NULL) { /* * Drop unnecessary informational text, e.g. "Xerox DocuPrint N2025 * Network LaserJet - 2.12" becomes "Xerox DocuPrint N2025"... */ *mmptr = '\0'; } if ((mmptr = strchr(make_model, ',')) != NULL) { /* * Drop anything after a trailing comma... */ *mmptr = '\0'; } } /* * 'free_array()' - Free an array of strings. */ static void free_array(cups_array_t *a) /* I - Array */ { char *s; /* Current string */ for (s = (char *)cupsArrayFirst(a); s; s = (char *)cupsArrayNext(a)) free(s); cupsArrayDelete(a); } /* * 'free_cache()' - Free the array of cached devices. */ static void free_cache(void) { snmp_cache_t *cache; /* Cached device */ for (cache = (snmp_cache_t *)cupsArrayFirst(Devices); cache; cache = (snmp_cache_t *)cupsArrayNext(Devices)) { free(cache->addrname); if (cache->uri) free(cache->uri); if (cache->id) free(cache->id); if (cache->make_and_model) free(cache->make_and_model); free(cache); } cupsArrayDelete(Devices); Devices = NULL; } /* * 'get_interface_addresses()' - Get the broadcast address(es) associated * with an interface. */ static http_addrlist_t * /* O - List of addresses */ get_interface_addresses( const char *ifname) /* I - Interface name */ { struct ifaddrs *addrs, /* Interface address list */ *addr; /* Current interface address */ http_addrlist_t *first, /* First address in list */ *last, /* Last address in list */ *current; /* Current address */ if (getifaddrs(&addrs) < 0) return (NULL); for (addr = addrs, first = NULL, last = NULL; addr; addr = addr->ifa_next) if ((addr->ifa_flags & IFF_BROADCAST) && addr->ifa_broadaddr && addr->ifa_broadaddr->sa_family == AF_INET && (!ifname || !strcmp(ifname, addr->ifa_name))) { current = calloc(1, sizeof(http_addrlist_t)); memcpy(&(current->addr), addr->ifa_broadaddr, sizeof(struct sockaddr_in)); if (!last) first = current; else last->next = current; last = current; } freeifaddrs(addrs); return (first); } /* * 'list_device()' - List a device we found... */ static void list_device(snmp_cache_t *cache) /* I - Cached device */ { if (cache->uri) cupsBackendReport("network", cache->uri, cache->make_and_model, cache->info, cache->id, cache->location); } /* * 'password_cb()' - Handle authentication requests. * * All we do right now is return NULL, indicating that no authentication * is possible. */ static const char * /* O - Password (NULL) */ password_cb(const char *prompt) /* I - Prompt message */ { (void)prompt; /* Anti-compiler-warning-code */ return (NULL); } /* * 'probe_device()' - Probe a device to discover whether it is a printer. * * TODO: Try using the Port Monitor MIB to discover the correct protocol * to use - first need a commercially-available printer that supports * it, though... */ static void probe_device(snmp_cache_t *device) /* I - Device */ { char uri[1024], /* Full device URI */ *uriptr, /* Pointer into URI */ *format; /* Format string for device */ device_uri_t *device_uri; /* Current DeviceURI match */ debug_printf("DEBUG: %.3f Probing %s...\n", run_time(), device->addrname); #ifdef __APPLE__ /* * If the printer supports Bonjour/mDNS, don't report it from the SNMP backend. */ if (!try_connect(&(device->address), device->addrname, 5353)) { debug_printf("DEBUG: %s supports mDNS, not reporting!\n", device->addrname); return; } #endif /* __APPLE__ */ /* * Lookup the device in the match table... */ for (device_uri = (device_uri_t *)cupsArrayFirst(DeviceURIs); device_uri; device_uri = (device_uri_t *)cupsArrayNext(DeviceURIs)) if (device->make_and_model && !regexec(&(device_uri->re), device->make_and_model, 0, NULL, 0)) { /* * Found a match, add the URIs... */ for (format = (char *)cupsArrayFirst(device_uri->uris); format; format = (char *)cupsArrayNext(device_uri->uris)) { for (uriptr = uri; *format && uriptr < (uri + sizeof(uri) - 1);) if (*format == '%' && format[1] == 's') { /* * Insert hostname/address... */ strlcpy(uriptr, device->addrname, sizeof(uri) - (size_t)(uriptr - uri)); uriptr += strlen(uriptr); format += 2; } else *uriptr++ = *format++; *uriptr = '\0'; update_cache(device, uri, NULL, NULL); } return; } /* * Then try the standard ports... */ if (!try_connect(&(device->address), device->addrname, 9100)) { debug_printf("DEBUG: %s supports AppSocket!\n", device->addrname); snprintf(uri, sizeof(uri), "socket://%s", device->addrname); update_cache(device, uri, NULL, NULL); } else if (!try_connect(&(device->address), device->addrname, 515)) { debug_printf("DEBUG: %s supports LPD!\n", device->addrname); snprintf(uri, sizeof(uri), "lpd://%s/", device->addrname); update_cache(device, uri, NULL, NULL); } } /* * 'read_snmp_conf()' - Read the snmp.conf file. */ static void read_snmp_conf(const char *address) /* I - Single address to probe */ { cups_file_t *fp; /* File pointer */ char filename[1024], /* Filename */ line[1024], /* Line from file */ *value; /* Value on line */ int linenum; /* Line number */ const char *cups_serverroot; /* CUPS_SERVERROOT env var */ const char *debug; /* CUPS_DEBUG_LEVEL env var */ const char *runtime; /* CUPS_MAX_RUN_TIME env var */ /* * Initialize the global address and community lists... */ Addresses = cupsArrayNew(NULL, NULL); Communities = cupsArrayNew(NULL, NULL); if (address) add_array(Addresses, address); if ((debug = getenv("CUPS_DEBUG_LEVEL")) != NULL) DebugLevel = atoi(debug); if ((runtime = getenv("CUPS_MAX_RUN_TIME")) != NULL) MaxRunTime = atoi(runtime); /* * Find the snmp.conf file... */ if ((cups_serverroot = getenv("CUPS_SERVERROOT")) == NULL) cups_serverroot = CUPS_SERVERROOT; snprintf(filename, sizeof(filename), "%s/snmp.conf", cups_serverroot); if ((fp = cupsFileOpen(filename, "r")) != NULL) { /* * Read the snmp.conf file... */ linenum = 0; while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { if (!value) fprintf(stderr, "ERROR: Missing value on line %d of %s!\n", linenum, filename); else if (!_cups_strcasecmp(line, "Address")) { if (!address) add_array(Addresses, value); } else if (!_cups_strcasecmp(line, "Community")) add_array(Communities, value); else if (!_cups_strcasecmp(line, "DebugLevel")) DebugLevel = atoi(value); else if (!_cups_strcasecmp(line, "DeviceURI")) { if (*value != '\"') fprintf(stderr, "ERROR: Missing double quote for regular expression on " "line %d of %s!\n", linenum, filename); else add_device_uri(value); } else if (!_cups_strcasecmp(line, "HostNameLookups")) HostNameLookups = !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true") || !_cups_strcasecmp(value, "double"); else if (!_cups_strcasecmp(line, "MaxRunTime")) MaxRunTime = atoi(value); else fprintf(stderr, "ERROR: Unknown directive %s on line %d of %s!\n", line, linenum, filename); } cupsFileClose(fp); } /* * Use defaults if parameters are undefined... */ if (cupsArrayCount(Addresses) == 0) { /* * If we have no addresses, exit immediately... */ fprintf(stderr, "DEBUG: No address specified and no Address line in %s...\n", filename); exit(0); } if (cupsArrayCount(Communities) == 0) { fputs("INFO: Using default SNMP Community public\n", stderr); add_array(Communities, "public"); } } /* * 'read_snmp_response()' - Read and parse a SNMP response... */ static void read_snmp_response(int fd) /* I - SNMP socket file descriptor */ { char addrname[256]; /* Source address name */ cups_snmp_t packet; /* Decoded packet */ snmp_cache_t key, /* Search key */ *device; /* Matching device */ /* * Read the response data... */ if (!_cupsSNMPRead(fd, &packet, -1.0)) { fprintf(stderr, "ERROR: Unable to read data from socket: %s\n", strerror(errno)); return; } if (HostNameLookups) httpAddrLookup(&(packet.address), addrname, sizeof(addrname)); else httpAddrString(&(packet.address), addrname, sizeof(addrname)); debug_printf("DEBUG: %.3f Received data from %s...\n", run_time(), addrname); /* * Look for the response status code in the SNMP message header... */ if (packet.error) { fprintf(stderr, "ERROR: Bad SNMP packet from %s: %s\n", addrname, packet.error); return; } debug_printf("DEBUG: community=\"%s\"\n", packet.community); debug_printf("DEBUG: request-id=%d\n", packet.request_id); debug_printf("DEBUG: error-status=%d\n", packet.error_status); if (packet.error_status && packet.request_id != DEVICE_TYPE) return; /* * Find a matching device in the cache... */ key.addrname = addrname; device = (snmp_cache_t *)cupsArrayFind(Devices, &key); /* * Process the message... */ switch (packet.request_id) { case DEVICE_TYPE : /* * Got the device type response... */ if (device) { debug_printf("DEBUG: Discarding duplicate device type for \"%s\"...\n", addrname); return; } /* * Add the device and request the device data... */ add_cache(&(packet.address), addrname, NULL, NULL, NULL); _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1, packet.community, CUPS_ASN1_GET_REQUEST, DEVICE_DESCRIPTION, DescriptionOID); _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1, packet.community, CUPS_ASN1_GET_REQUEST, DEVICE_ID, DeviceIdOID); _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1, packet.community, CUPS_ASN1_GET_REQUEST, DEVICE_URI, UriOID); _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1, packet.community, CUPS_ASN1_GET_REQUEST, DEVICE_LOCATION, LocationOID); _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1, packet.community, CUPS_ASN1_GET_REQUEST, DEVICE_PRODUCT, LexmarkProductOID); _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1, packet.community, CUPS_ASN1_GET_REQUEST, DEVICE_PRODUCT, LexmarkProductOID2); _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1, packet.community, CUPS_ASN1_GET_REQUEST, DEVICE_ID, LexmarkDeviceIdOID); _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1, packet.community, CUPS_ASN1_GET_REQUEST, DEVICE_PRODUCT, XeroxProductOID); break; case DEVICE_DESCRIPTION : if (device && packet.object_type == CUPS_ASN1_OCTET_STRING) { /* * Update an existing cache entry... */ char make_model[256]; /* Make and model */ if (strchr((char *)packet.object_value.string.bytes, ':') && strchr((char *)packet.object_value.string.bytes, ';')) { /* * Description is the IEEE-1284 device ID... */ char *ptr; /* Pointer into device ID */ for (ptr = (char *)packet.object_value.string.bytes; *ptr; ptr ++) if (*ptr == '\n') *ptr = ';'; /* A lot of bad printers put a newline */ if (!device->id) device->id = strdup((char *)packet.object_value.string.bytes); backendGetMakeModel((char *)packet.object_value.string.bytes, make_model, sizeof(make_model)); if (device->info) free(device->info); device->info = strdup(make_model); } else { /* * Description is plain text... */ fix_make_model(make_model, (char *)packet.object_value.string.bytes, sizeof(make_model)); if (device->info) free(device->info); device->info = strdup((char *)packet.object_value.string.bytes); } if (!device->make_and_model) device->make_and_model = strdup(make_model); } break; case DEVICE_ID : if (device && packet.object_type == CUPS_ASN1_OCTET_STRING && (!device->id || strlen(device->id) < packet.object_value.string.num_bytes)) { /* * Update an existing cache entry... */ char make_model[256]; /* Make and model */ char *ptr; /* Pointer into device ID */ for (ptr = (char *)packet.object_value.string.bytes; *ptr; ptr ++) if (*ptr == '\n') *ptr = ';'; /* A lot of bad printers put a newline */ if (device->id) free(device->id); device->id = strdup((char *)packet.object_value.string.bytes); /* * Convert the ID to a make and model string... */ backendGetMakeModel((char *)packet.object_value.string.bytes, make_model, sizeof(make_model)); if (device->make_and_model) free(device->make_and_model); device->make_and_model = strdup(make_model); } break; case DEVICE_LOCATION : if (device && packet.object_type == CUPS_ASN1_OCTET_STRING && !device->location) device->location = strdup((char *)packet.object_value.string.bytes); break; case DEVICE_PRODUCT : if (device && packet.object_type == CUPS_ASN1_OCTET_STRING && !device->id) { /* * Update an existing cache entry... */ if (!device->info) device->info = strdup((char *)packet.object_value.string.bytes); if (device->make_and_model) free(device->make_and_model); device->make_and_model = strdup((char *)packet.object_value.string.bytes); } break; case DEVICE_URI : if (device && packet.object_type == CUPS_ASN1_OCTET_STRING && !device->uri && packet.object_value.string.num_bytes > 3) { /* * Update an existing cache entry... */ char scheme[32], /* URI scheme */ userpass[256], /* Username:password in URI */ hostname[256], /* Hostname in URI */ resource[1024]; /* Resource path in URI */ int port; /* Port number in URI */ if (!strncmp((char *)packet.object_value.string.bytes, "lpr:", 4)) { /* * We want "lpd://..." for the URI... */ packet.object_value.string.bytes[2] = 'd'; } if (httpSeparateURI(HTTP_URI_CODING_ALL, (char *)packet.object_value.string.bytes, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)) >= HTTP_URI_OK) device->uri = strdup((char *)packet.object_value.string.bytes); } break; } } /* * 'run_time()' - Return the total running time... */ static double /* O - Number of seconds */ run_time(void) { struct timeval curtime; /* Current time */ gettimeofday(&curtime, NULL); return (curtime.tv_sec - StartTime.tv_sec + 0.000001 * (curtime.tv_usec - StartTime.tv_usec)); } /* * 'scan_devices()' - Scan for devices using SNMP. */ static void scan_devices(int ipv4, /* I - SNMP IPv4 socket */ int ipv6) /* I - SNMP IPv6 socket */ { int fd, /* File descriptor for this address */ busy; /* Are we busy processing something? */ char *address, /* Current address */ *community; /* Current community */ fd_set input; /* Input set for select() */ struct timeval timeout; /* Timeout for select() */ time_t endtime; /* End time for scan */ http_addrlist_t *addrs, /* List of addresses */ *addr; /* Current address */ snmp_cache_t *device; /* Current device */ char temp[1024]; /* Temporary address string */ gettimeofday(&StartTime, NULL); /* * First send all of the broadcast queries... */ for (address = (char *)cupsArrayFirst(Addresses); address; address = (char *)cupsArrayNext(Addresses)) { if (!strcmp(address, "@LOCAL")) addrs = get_interface_addresses(NULL); else if (!strncmp(address, "@IF(", 4)) { char ifname[255]; /* Interface name */ strlcpy(ifname, address + 4, sizeof(ifname)); if (ifname[0]) ifname[strlen(ifname) - 1] = '\0'; addrs = get_interface_addresses(ifname); } else addrs = httpAddrGetList(address, AF_UNSPEC, NULL); if (!addrs) { fprintf(stderr, "ERROR: Unable to scan \"%s\"!\n", address); continue; } for (community = (char *)cupsArrayFirst(Communities); community; community = (char *)cupsArrayNext(Communities)) { debug_printf("DEBUG: Scanning for devices in \"%s\" via \"%s\"...\n", community, address); for (addr = addrs; addr; addr = addr->next) { #ifdef AF_INET6 if (httpAddrFamily(&(addr->addr)) == AF_INET6) fd = ipv6; else #endif /* AF_INET6 */ fd = ipv4; debug_printf("DEBUG: Sending get request to %s...\n", httpAddrString(&(addr->addr), temp, sizeof(temp))); _cupsSNMPWrite(fd, &(addr->addr), CUPS_SNMP_VERSION_1, community, CUPS_ASN1_GET_REQUEST, DEVICE_TYPE, DeviceTypeOID); } } httpAddrFreeList(addrs); } /* * Then read any responses that come in over the next 3 seconds... */ endtime = time(NULL) + MaxRunTime; FD_ZERO(&input); while (time(NULL) < endtime) { timeout.tv_sec = 2; timeout.tv_usec = 0; FD_SET(ipv4, &input); if (ipv6 >= 0) FD_SET(ipv6, &input); fd = ipv4 > ipv6 ? ipv4 : ipv6; if (select(fd + 1, &input, NULL, NULL, &timeout) < 0) { fprintf(stderr, "ERROR: %.3f select() for %d/%d failed: %s\n", run_time(), ipv4, ipv6, strerror(errno)); break; } busy = 0; if (FD_ISSET(ipv4, &input)) { read_snmp_response(ipv4); busy = 1; } if (ipv6 >= 0 && FD_ISSET(ipv6, &input)) { read_snmp_response(ipv6); busy = 1; } if (!busy) { /* * List devices with complete information... */ int sent_something = 0; for (device = (snmp_cache_t *)cupsArrayFirst(Devices); device; device = (snmp_cache_t *)cupsArrayNext(Devices)) if (!device->sent && device->info && device->make_and_model) { if (device->uri) list_device(device); else probe_device(device); device->sent = sent_something = 1; } if (!sent_something) break; } } debug_printf("DEBUG: %.3f Scan complete!\n", run_time()); } /* * 'try_connect()' - Try connecting on a port... */ static int /* O - 0 on success or -1 on error */ try_connect(http_addr_t *addr, /* I - Socket address */ const char *addrname, /* I - Hostname or IP address */ int port) /* I - Port number */ { int fd; /* Socket */ int status; /* Connection status */ debug_printf("DEBUG: %.3f Trying %s://%s:%d...\n", run_time(), port == 515 ? "lpd" : "socket", addrname, port); if ((fd = socket(httpAddrFamily(addr), SOCK_STREAM, 0)) < 0) { fprintf(stderr, "ERROR: Unable to create socket: %s\n", strerror(errno)); return (-1); } _httpAddrSetPort(addr, port); alarm(1); status = connect(fd, (void *)addr, (socklen_t)httpAddrLength(addr)); close(fd); alarm(0); return (status); } /* * 'update_cache()' - Update a cached device... */ static void update_cache(snmp_cache_t *device, /* I - Device */ const char *uri, /* I - Device URI */ const char *id, /* I - Device ID */ const char *make_model) /* I - Device make and model */ { if (device->uri) free(device->uri); device->uri = strdup(uri); if (id) { if (device->id) free(device->id); device->id = strdup(id); } if (make_model) { if (device->make_and_model) free(device->make_and_model); device->make_and_model = strdup(make_model); } list_device(device); } cups-2.2.7/backend/snmp.txt000664 000765 000024 00000017634 13255074424 016273 0ustar00msweetstaff000000 000000 snmp.txt - 2006-04-19 --------------------- This file lists the "interesting" bits from the command: snmpwalk -v 1 -c public HOST .1 for many network print servers and internal cards. It is mainly here for SNMP documentation and development purposes. AXIS 5600 SNMPv2-MIB::sysDescr.0 = STRING: HP ETHERNET MULTI-ENVIRONMENT,ROM J.sp.00,JETDIRECT EX,JD28,EEPROM 6.16.5 SNMPv2-MIB::sysName.0 = STRING: HOST-RESOURCES-MIB::hrDeviceType.1 = OID: HOST-RESOURCES-TYPES::hrDevicePrinter HOST-RESOURCES-MIB::hrDeviceType.2 = OID: HOST-RESOURCES-TYPES::hrDevicePrinter HOST-RESOURCES-MIB::hrDeviceType.3 = OID: HOST-RESOURCES-TYPES::hrDevicePrinter HOST-RESOURCES-MIB::hrDeviceDescr.1 = STRING: Hewlett-Packard hp LaserJet 3380 HOST-RESOURCES-MIB::hrDeviceDescr.2 = STRING: Axis AXIS 5600 HOST-RESOURCES-MIB::hrDeviceDescr.3 = STRING: Axis AXIS 5600 HOST-RESOURCES-MIB::hrDeviceID.1 = OID: SNMPv2-SMI::zeroDotZero HOST-RESOURCES-MIB::hrDeviceID.2 = OID: SNMPv2-SMI::zeroDotZero HOST-RESOURCES-MIB::hrDeviceID.3 = OID: SNMPv2-SMI::zeroDotZero SNMPv2-SMI::enterprises.11.2.4.3.10.8.0 = STRING: "AXIS433AE8" SNMPv2-SMI::enterprises.368.2.3.2.601.0 = INTEGER: 9100 SNMPv2-SMI::enterprises.368.2.3.2.602.0 = INTEGER: 9101 SNMPv2-SMI::enterprises.368.2.3.2.603.0 = INTEGER: 9102 SNMPv2-SMI::enterprises.368.2.3.10.901.0 = STRING: "AXIS433AE8" AXIS OfficeBasic SNMPv2-MIB::sysDescr.0 = STRING: AXIS OfficeBasic Parallel Network Print Server V6.43 Sep 4 2003 HOST-RESOURCES-MIB::hrDeviceType.1 = OID: HOST-RESOURCES-TYPES::hrDevicePrinter HOST-RESOURCES-MIB::hrDeviceDescr.1 = STRING: EPSON Stylus Photo 870 HOST-RESOURCES-MIB::hrDeviceID.1 = OID: SNMPv2-SMI::zeroDotZero DLink DP-301P+ SNMPv2-MIB::sysDescr.0 = STRING: D-Link DP-301P+ Print Server Genicom ML280 SNMPv2-MIB::sysDescr.0 = STRING: GENICOM microLaser 280 SNMPv2-MIB::sysName.0 = STRING: PRQ_004F75 HOST-RESOURCES-MIB::hrDeviceType.1 = OID: HOST-RESOURCES-TYPES::hrDevicePrinter HOST-RESOURCES-MIB::hrDeviceDescr.1 = STRING: MANUFACTURER:GENICOM;MODEL:microLaser 280; HOST-RESOURCES-MIB::hrDeviceID.1 = OID: SNMPv2-SMI::enterprises.3369.1.1.2.4 EPSON Type-B Network Card SNMPv2-MIB::sysDescr.0 = STRING: EPSON Type-B 10Base-T/100Base-TX Print Server SNMPv2-MIB::sysName.0 = STRING: StylusPro7600-BB87A8 HOST-RESOURCES-MIB::hrDeviceType.1 = OID: HOST-RESOURCES-TYPES::hrDevicePrinter HOST-RESOURCES-MIB::hrDeviceDescr.1 = STRING: EPSON Stylus Pro 7600 HOST-RESOURCES-MIB::hrDeviceID.1 = OID: SNMPv2-SMI::enterprises.1248.1.2.1.22.69.109.117.108.97.116.101.83.116.121.108.117.115.32.80.114.111.32.55.54.48.48 SNMPv2-SMI::enterprises.11.2.3.9.1.1.7.0 = STRING: "MFG:EPSON;CMD:ESCPL2,BDC;MDL:Stylus Pro 7600;CLS:PRINTER;DES:EPSON Stylus Pro 7600;" SNMPv2-SMI::enterprises.1248.1.2.2.1.1.1.1.1 = STRING: "MFG:EPSON;CMD:ESCPL2,BDC;MDL:Stylus Pro 7600;CLS:PRINTER;DES:EPSON Stylus Pro 7600;" EPSON Wireless 802.11b Print Server SNMPv2-MIB::sysDescr.0 = STRING: EPSON Wireless LAN Print Interface compatible with an HP JETDIRECT EX SNMPv2-MIB::sysName.0 = STRING: EAI_0F550B HOST-RESOURCES-MIB::hrDeviceType.1 = OID: HOST-RESOURCES-TYPES::hrDevicePrinter HOST-RESOURCES-MIB::hrDeviceDescr.1 = STRING: HOST-RESOURCES-MIB::hrDeviceID.1 = OID: SNMPv2-SMI::zeroDotZero HP JetDirect EX3plus SNMPv2-MIB::sysDescr.0 = STRING: HP ETHERNET MULTI-ENVIRONMENT,ROM D.04.03,JETDIRECT EX,JD26,EEPROM D.05.22 SNMPv2-MIB::sysName.0 = STRING: NPID1EC0F HP LJ4000 SNMPv2-MIB::sysDescr.0 = STRING: HP ETHERNET MULTI-ENVIRONMENT,ROM G.05.34,JETDIRECT,JD30,EEPROM G.08.32 SNMPv2-MIB::sysName.0 = STRING: HOST-RESOURCES-MIB::hrDeviceType.1 = OID: HOST-RESOURCES-TYPES::hrDevicePrinter HOST-RESOURCES-MIB::hrDeviceDescr.1 = STRING: HP LaserJet 4000 Series HOST-RESOURCES-MIB::hrDeviceID.1 = OID: SNMPv2-SMI::enterprises.11.2.3.9.1.2.5 HP CLJ4550 SNMPv2-MIB::sysDescr.0 = STRING: HP ETHERNET MULTI-ENVIRONMENT,ROM L.20.07,JETDIRECT,JD84,EEPROM L.21.22,CIDATE 07/06/2001 SNMPv2-MIB::sysName.0 = STRING: NPI02FDE7 HOST-RESOURCES-MIB::hrDeviceDescr.1 = STRING: HP Color LaserJet 4550 HOST-RESOURCES-MIB::hrDeviceDescr.2 = STRING: Hewlett-Packard Dynamic RAM Disk HOST-RESOURCES-MIB::hrDeviceID.1 = OID: SNMPv2-SMI::enterprises.11.2.3.9.1.2.14 Lexmark C522 SNMPv2-MIB::sysDescr.0 = STRING: Lexmark C522 version NS.NP.N212 kernel 2.6.6 All-N-1 SNMPv2-MIB::sysName.0 = STRING: ET0004000D0CCA HOST-RESOURCES-MIB::hrDeviceType.1 = OID: HOST-RESOURCES-TYPES::hrDevicePrinter HOST-RESOURCES-MIB::hrDeviceType.2 = OID: HOST-RESOURCES-TYPES::hrDeviceNonVolatileMemory HOST-RESOURCES-MIB::hrDeviceType.3 = OID: HOST-RESOURCES-TYPES::hrDeviceProcessor HOST-RESOURCES-MIB::hrDeviceType.4 = OID: HOST-RESOURCES-TYPES::hrDeviceSerialPort HOST-RESOURCES-MIB::hrDeviceType.5 = OID: HOST-RESOURCES-TYPES::hrDeviceNetwork HOST-RESOURCES-MIB::hrDeviceDescr.1 = STRING: Lexmark C522 9421TTV LS.FA.P129 HOST-RESOURCES-MIB::hrDeviceDescr.2 = STRING: Nonvolatile RAM HOST-RESOURCES-MIB::hrDeviceDescr.3 = STRING: IBM 750 Rev CXr HOST-RESOURCES-MIB::hrDeviceDescr.4 = STRING: USB Interface HOST-RESOURCES-MIB::hrDeviceDescr.5 = STRING: Network Interface HOST-RESOURCES-MIB::hrDeviceID.1 = OID: SNMPv2-SMI::zeroDotZero HOST-RESOURCES-MIB::hrDeviceID.2 = OID: SNMPv2-SMI::zeroDotZero HOST-RESOURCES-MIB::hrDeviceID.3 = OID: SNMPv2-SMI::zeroDotZero HOST-RESOURCES-MIB::hrDeviceID.4 = OID: SNMPv2-SMI::zeroDotZero HOST-RESOURCES-MIB::hrDeviceID.5 = OID: SNMPv2-SMI::enterprises.641.1 SNMPv2-SMI::enterprises.641.2.1.2.1.2.1 = STRING: "Lexmark C522" SNMPv2-SMI::enterprises.641.2.1.2.1.3.1 = STRING: "MANUFACTURER:Lexmark International;COMMAND SET:;MODEL:Lexmark C522" Linksys EPSX3 SNMPv2-MIB::sysDescr.0 = STRING: ETHERNET MULTI-ENVIRONMENT.ROM, JETDIRECT EX, EEPROM 6016 NetGear PS113 SNMPv2-MIB::sysDescr.0 = STRING: A SNMP proxy agent. Okidata C7200 SNMPv2-MIB::sysDescr.0 = STRING: OkiLAN 6200e SNMPv2-MIB::sysName.0 = STRING: OKI7009715 HOST-RESOURCES-MIB::hrDeviceType.1 = OID: HOST-RESOURCES-TYPES::hrDevicePrinter HOST-RESOURCES-MIB::hrDeviceType.2 = OID: HOST-RESOURCES-TYPES::hrDeviceNonVolat ileMemory HOST-RESOURCES-MIB::hrDeviceDescr.1 = STRING: C7200 HOST-RESOURCES-MIB::hrDeviceDescr.2 = STRING: FLASH0 HOST-RESOURCES-MIB::hrDeviceID.1 = OID: SNMPv2-SMI::enterprises.2001.1.1.1.1 HOST-RESOURCES-MIB::hrDeviceID.2 = OID: SNMPv2-SMI::zeroDotZero SNMPv2-SMI::mib-2.43.14.1.1.3.1.1 = STRING: "IEEE 1284" SNMPv2-SMI::mib-2.43.14.1.1.3.1.2 = STRING: "EtherTalk Phase 2" SNMPv2-SMI::mib-2.43.14.1.1.3.1.3 = STRING: "LPD" SNMPv2-SMI::mib-2.43.14.1.1.3.1.4 = STRING: "Netware Rprinter" SNMPv2-SMI::mib-2.43.14.1.1.3.1.5 = STRING: "Netware Bindery or NDS Pserver" SNMPv2-SMI::mib-2.43.14.1.1.3.1.6 = STRING: "Raw TCP Port 9100" SNMPv2-SMI::mib-2.43.14.1.1.3.1.7 = STRING: "FTP" SNMPv2-SMI::mib-2.43.14.1.1.3.1.8 = STRING: "DLC/LLC" SNMPv2-SMI::enterprises.2001.1.1.1.1.1.3530.0 = STRING: "C7200" Xerox N2025 SNMPv2-MIB::sysDescr.0 = STRING: Xerox DocuPrint N2025 Network Laser Printer - 2.12-02 SNMPv2-MIB::sysName.0 = STRING: HOST-RESOURCES-MIB::hrDeviceType.1 = OID: HOST-RESOURCES-TYPES::hrDevicePrinter HOST-RESOURCES-MIB::hrDeviceType.2 = OID: HOST-RESOURCES-TYPES::hrDeviceParallelPort HOST-RESOURCES-MIB::hrDeviceType.3 = OID: HOST-RESOURCES-TYPES::hrDeviceNetwork HOST-RESOURCES-MIB::hrDeviceType.6 = OID: HOST-RESOURCES-TYPES::hrDeviceProcessor HOST-RESOURCES-MIB::hrDeviceType.7 = OID: HOST-RESOURCES-TYPES::hrDeviceOther HOST-RESOURCES-MIB::hrDeviceType.9 = OID: HOST-RESOURCES-TYPES::hrDeviceVolatileMemory HOST-RESOURCES-MIB::hrDeviceType.10 = OID: HOST-RESOURCES-TYPES::hrDeviceNonVolatileMemory HOST-RESOURCES-MIB::hrDeviceDescr.1 = STRING: Xerox DocuPrint N2025 Network Laser Printer - 2.12-02 HOST-RESOURCES-MIB::hrDeviceDescr.2 = STRING: IEEE 1284 port HOST-RESOURCES-MIB::hrDeviceDescr.3 = STRING: Ethernet port HOST-RESOURCES-MIB::hrDeviceDescr.6 = STRING: Motorola Power PC HOST-RESOURCES-MIB::hrDeviceDescr.7 = STRING: USB Port HOST-RESOURCES-MIB::hrDeviceDescr.9 = STRING: RAM Memory HOST-RESOURCES-MIB::hrDeviceDescr.10 = STRING: ROM Memory HOST-RESOURCES-MIB::hrDeviceID.1 = OID: SNMPv2-SMI::enterprises.253.8.62.1.3.2.17.1 cups-2.2.7/backend/socket.c000664 000765 000024 00000026455 13255074424 016212 0ustar00msweetstaff000000 000000 /* * AppSocket backend for CUPS. * * Copyright 2007-2016 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include #include "backend-private.h" #include #include #include #ifdef WIN32 # include #else # include # include # include # include # include # include #endif /* WIN32 */ /* * Local functions... */ static ssize_t wait_bc(int device_fd, int secs); /* * 'main()' - Send a file to the printer or server. * * Usage: * * printer-uri job-id user title copies options [file] */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments (6 or 7) */ char *argv[]) /* I - Command-line arguments */ { const char *device_uri; /* Device URI */ char scheme[255], /* Scheme in URI */ hostname[1024], /* Hostname */ username[255], /* Username info (not used) */ resource[1024], /* Resource info (not used) */ *options, /* Pointer to options */ *name, /* Name of option */ *value, /* Value of option */ sep; /* Option separator */ int print_fd; /* Print file */ int copies; /* Number of copies to print */ time_t start_time; /* Time of first connect */ int contimeout; /* Connection timeout */ int waiteof; /* Wait for end-of-file? */ int port; /* Port number */ int delay; /* Delay for retries... */ int device_fd; /* AppSocket */ int error; /* Error code (if any) */ http_addrlist_t *addrlist, /* Address list */ *addr; /* Connected address */ char addrname[256]; /* Address name */ int snmp_enabled = 1; /* Is SNMP enabled? */ int snmp_fd, /* SNMP socket */ start_count, /* Page count via SNMP at start */ page_count, /* Page count via SNMP */ have_supplies; /* Printer supports supply levels? */ ssize_t bytes = 0, /* Initial bytes read */ tbytes; /* Total number of bytes written */ char buffer[1024]; /* Initial print buffer */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ /* * Make sure status messages are not buffered... */ setbuf(stderr, NULL); /* * Ignore SIGPIPE signals... */ #ifdef HAVE_SIGSET sigset(SIGPIPE, SIG_IGN); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); action.sa_handler = SIG_IGN; sigaction(SIGPIPE, &action, NULL); #else signal(SIGPIPE, SIG_IGN); #endif /* HAVE_SIGSET */ /* * Check command-line... */ if (argc == 1) { printf("network socket \"Unknown\" \"%s\"\n", _cupsLangString(cupsLangDefault(), _("AppSocket/HP JetDirect"))); return (CUPS_BACKEND_OK); } else if (argc < 6 || argc > 7) { _cupsLangPrintf(stderr, _("Usage: %s job-id user title copies options [file]"), argv[0]); return (CUPS_BACKEND_FAILED); } /* * If we have 7 arguments, print the file named on the command-line. * Otherwise, send stdin instead... */ if (argc == 6) { print_fd = 0; copies = 1; } else { /* * Try to open the print file... */ if ((print_fd = open(argv[6], O_RDONLY)) < 0) { _cupsLangPrintError("ERROR", _("Unable to open print file")); return (CUPS_BACKEND_FAILED); } copies = atoi(argv[4]); } /* * Extract the hostname and port number from the URI... */ while ((device_uri = cupsBackendDeviceURI(argv)) == NULL) { _cupsLangPrintFilter(stderr, "INFO", _("Unable to locate printer.")); sleep(10); if (getenv("CLASS") != NULL) return (CUPS_BACKEND_FAILED); } httpSeparateURI(HTTP_URI_CODING_ALL, device_uri, scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if (port == 0) port = 9100; /* Default to HP JetDirect/Tektronix PhaserShare */ /* * Get options, if any... */ waiteof = 1; contimeout = 7 * 24 * 60 * 60; if ((options = strchr(resource, '?')) != NULL) { /* * Yup, terminate the device name string and move to the first * character of the options... */ *options++ = '\0'; /* * Parse options... */ while (*options) { /* * Get the name... */ name = options; while (*options && *options != '=' && *options != '+' && *options != '&') options ++; if ((sep = *options) != '\0') *options++ = '\0'; if (sep == '=') { /* * Get the value... */ value = options; while (*options && *options != '+' && *options != '&') options ++; if (*options) *options++ = '\0'; } else value = (char *)""; /* * Process the option... */ if (!_cups_strcasecmp(name, "waiteof")) { /* * Set the wait-for-eof value... */ waiteof = !value[0] || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true"); } else if (!_cups_strcasecmp(name, "snmp")) { /* * Enable/disable SNMP stuff... */ snmp_enabled = !value[0] || !_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true"); } else if (!_cups_strcasecmp(name, "contimeout")) { /* * Set the connection timeout... */ if (atoi(value) > 0) contimeout = atoi(value); } } } /* * Then try finding the remote host... */ start_time = time(NULL); addrlist = backendLookup(hostname, port, NULL); /* * See if the printer supports SNMP... */ if (snmp_enabled) snmp_fd = _cupsSNMPOpen(addrlist->addr.addr.sa_family); else snmp_fd = -1; if (snmp_fd >= 0) have_supplies = !backendSNMPSupplies(snmp_fd, &(addrlist->addr), &start_count, NULL); else have_supplies = start_count = 0; /* * Wait for data from the filter... */ if (print_fd == 0) { if (!backendWaitLoop(snmp_fd, &(addrlist->addr), 1, backendNetworkSideCB)) return (CUPS_BACKEND_OK); else if ((bytes = read(0, buffer, sizeof(buffer))) <= 0) return (CUPS_BACKEND_OK); } /* * Connect to the printer... */ fprintf(stderr, "DEBUG: Connecting to %s:%d\n", hostname, port); _cupsLangPrintFilter(stderr, "INFO", _("Connecting to printer.")); for (delay = 5;;) { if ((addr = httpAddrConnect(addrlist, &device_fd)) == NULL) { error = errno; device_fd = -1; if (getenv("CLASS") != NULL) { /* * If the CLASS environment variable is set, the job was submitted * to a class and not to a specific queue. In this case, we want * to abort immediately so that the job can be requeued on the next * available printer in the class. */ _cupsLangPrintFilter(stderr, "INFO", _("Unable to contact printer, queuing on next " "printer in class.")); /* * Sleep 5 seconds to keep the job from requeuing too rapidly... */ sleep(5); return (CUPS_BACKEND_FAILED); } fprintf(stderr, "DEBUG: Connection error: %s\n", strerror(error)); if (errno == ECONNREFUSED || errno == EHOSTDOWN || errno == EHOSTUNREACH || errno == ETIMEDOUT || errno == ENOTCONN) { if (contimeout && (time(NULL) - start_time) > contimeout) { _cupsLangPrintFilter(stderr, "ERROR", _("The printer is not responding.")); return (CUPS_BACKEND_FAILED); } switch (error) { case EHOSTDOWN : _cupsLangPrintFilter(stderr, "WARNING", _("The printer may not exist or " "is unavailable at this time.")); break; case EHOSTUNREACH : default : _cupsLangPrintFilter(stderr, "WARNING", _("The printer is unreachable at this " "time.")); break; case ECONNREFUSED : _cupsLangPrintFilter(stderr, "WARNING", _("The printer is in use.")); break; } sleep((unsigned)delay); if (delay < 30) delay += 5; } else { _cupsLangPrintFilter(stderr, "ERROR", _("The printer is not responding.")); sleep(30); } } else break; } fputs("STATE: -connecting-to-device\n", stderr); _cupsLangPrintFilter(stderr, "INFO", _("Connected to printer.")); fprintf(stderr, "DEBUG: Connected to %s:%d...\n", httpAddrString(&(addr->addr), addrname, sizeof(addrname)), httpAddrPort(&(addr->addr))); /* * Print everything... */ tbytes = 0; if (bytes > 0) tbytes += write(device_fd, buffer, (size_t)bytes); while (copies > 0 && tbytes >= 0) { copies --; if (print_fd != 0) { fputs("PAGE: 1 1\n", stderr); lseek(print_fd, 0, SEEK_SET); } tbytes = backendRunLoop(print_fd, device_fd, snmp_fd, &(addrlist->addr), 1, 0, backendNetworkSideCB); if (print_fd != 0 && tbytes >= 0) _cupsLangPrintFilter(stderr, "INFO", _("Print file sent.")); } fputs("STATE: +cups-waiting-for-job-completed\n", stderr); if (waiteof) { /* * Shutdown the socket and wait for the other end to finish... */ _cupsLangPrintFilter(stderr, "INFO", _("Waiting for printer to finish.")); shutdown(device_fd, 1); while (wait_bc(device_fd, 90) > 0); } /* * Collect the final page count as needed... */ if (have_supplies && !backendSNMPSupplies(snmp_fd, &(addrlist->addr), &page_count, NULL) && page_count > start_count) fprintf(stderr, "PAGE: total %d\n", page_count - start_count); /* * Close the socket connection... */ close(device_fd); httpAddrFreeList(addrlist); /* * Close the input file and return... */ if (print_fd != 0) close(print_fd); return (CUPS_BACKEND_OK); } /* * 'wait_bc()' - Wait for back-channel data... */ static ssize_t /* O - # bytes read or -1 on error */ wait_bc(int device_fd, /* I - Socket */ int secs) /* I - Seconds to wait */ { struct timeval timeout; /* Timeout for select() */ fd_set input; /* Input set for select() */ ssize_t bytes; /* Number of back-channel bytes read */ char buffer[1024]; /* Back-channel buffer */ /* * Wait up to "secs" seconds for backchannel data... */ timeout.tv_sec = secs; timeout.tv_usec = 0; FD_ZERO(&input); FD_SET(device_fd, &input); if (select(device_fd + 1, &input, NULL, NULL, &timeout) > 0) { /* * Grab the data coming back and spit it out to stderr... */ if ((bytes = read(device_fd, buffer, sizeof(buffer))) > 0) { fprintf(stderr, "DEBUG: Received %d bytes of back-channel data\n", (int)bytes); cupsBackChannelWrite(buffer, (size_t)bytes, 1.0); } return (bytes); } else return (-1); } cups-2.2.7/backend/test1284.c000664 000765 000024 00000003347 13255074424 016213 0ustar00msweetstaff000000 000000 /* * IEEE-1284 support functions test program for CUPS. * * Copyright 2007-2010 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include #ifdef WIN32 # include #else # include # include #endif /* WIN32 */ #include "ieee1284.c" /* * 'main()' - Test the device-ID functions. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int i, /* Looping var */ fd; /* File descriptor */ char device_id[1024], /* 1284 device ID string */ make_model[1024], /* make-and-model string */ uri[1024]; /* URI string */ if (argc < 2) { puts("Usage: test1284 device-file [... device-file-N]"); exit(1); } for (i = 1; i < argc; i ++) { if ((fd = open(argv[i], O_RDWR)) < 0) { perror(argv[i]); return (errno); } printf("%s:\n", argv[i]); backendGetDeviceID(fd, device_id, sizeof(device_id), make_model, sizeof(make_model), "test", uri, sizeof(uri)); printf(" device_id=\"%s\"\n", device_id); printf(" make_model=\"%s\"\n", make_model); printf(" uri=\"%s\"\n", uri); close(fd); } return (0); } cups-2.2.7/backend/testbackend.c000664 000765 000024 00000040552 13255074424 017203 0ustar00msweetstaff000000 000000 /* * Backend test program for CUPS. * * Copyright 2007-2014 by Apple Inc. * Copyright 1997-2005 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include #include #include #include #include #include #include /* * Local globals... */ static int job_canceled = 0; /* * Local functions... */ static void sigterm_handler(int sig); static void usage(void) __attribute__((noreturn)); static void walk_cb(const char *oid, const char *data, int datalen, void *context); /* * 'main()' - Run the named backend. * * Usage: * * testbackend [-s] [-t] device-uri job-id user title copies options [file] */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int first_arg, /* First argument for backend */ do_cancel = 0, /* Simulate a cancel-job via SIGTERM */ do_ps = 0, /* Do PostScript query+test? */ do_pcl = 0, /* Do PCL query+test? */ do_side_tests = 0, /* Test side-channel ops? */ do_trickle = 0, /* Trickle data to backend */ do_walk = 0, /* Do OID lookup (0) or walking (1) */ show_log = 0; /* Show log messages from backends? */ const char *oid = ".1.3.6.1.2.1.43.10.2.1.4.1.1"; /* OID to lookup or walk */ char scheme[255], /* Scheme in URI == backend */ backend[1024], /* Backend path */ libpath[1024], /* Path for libcups */ *ptr; /* Pointer into path */ const char *serverbin; /* CUPS_SERVERBIN environment variable */ int fd, /* Temporary file descriptor */ back_fds[2], /* Back-channel pipe */ side_fds[2], /* Side-channel socket */ data_fds[2], /* Data pipe */ back_pid = -1, /* Backend process ID */ data_pid = -1, /* Trickle process ID */ pid, /* Process ID */ status; /* Exit status */ /* * Get the current directory and point the run-time linker at the "cups" * subdirectory... */ if (getcwd(libpath, sizeof(libpath)) && (ptr = strrchr(libpath, '/')) != NULL && !strcmp(ptr, "/backend")) { strlcpy(ptr, "/cups", sizeof(libpath) - (size_t)(ptr - libpath)); if (!access(libpath, 0)) { #ifdef __APPLE__ fprintf(stderr, "Setting DYLD_LIBRARY_PATH to \"%s\".\n", libpath); setenv("DYLD_LIBRARY_PATH", libpath, 1); #else fprintf(stderr, "Setting LD_LIBRARY_PATH to \"%s\".\n", libpath); setenv("LD_LIBRARY_PATH", libpath, 1); #endif /* __APPLE__ */ } else perror(libpath); } /* * See if we have side-channel tests to do... */ for (first_arg = 1; argv[first_arg] && argv[first_arg][0] == '-'; first_arg ++) if (!strcmp(argv[first_arg], "-d")) show_log = 1; else if (!strcmp(argv[first_arg], "-cancel")) do_cancel = 1; else if (!strcmp(argv[first_arg], "-pcl")) do_pcl = 1; else if (!strcmp(argv[first_arg], "-ps")) do_ps = 1; else if (!strcmp(argv[first_arg], "-s")) do_side_tests = 1; else if (!strcmp(argv[first_arg], "-t")) do_trickle = 1; else if (!strcmp(argv[first_arg], "-get") && (first_arg + 1) < argc) { first_arg ++; do_side_tests = 1; oid = argv[first_arg]; } else if (!strcmp(argv[first_arg], "-walk") && (first_arg + 1) < argc) { first_arg ++; do_side_tests = 1; do_walk = 1; oid = argv[first_arg]; } else usage(); argc -= first_arg; if (argc < 6 || argc > 7 || (argc == 7 && do_trickle)) usage(); /* * Extract the scheme from the device-uri - that's the program we want to * execute. */ if (sscanf(argv[first_arg], "%254[^:]", scheme) != 1) { fputs("testbackend: Bad device-uri - no colon!\n", stderr); return (1); } if (!access(scheme, X_OK)) strlcpy(backend, scheme, sizeof(backend)); else { if ((serverbin = getenv("CUPS_SERVERBIN")) == NULL) serverbin = CUPS_SERVERBIN; snprintf(backend, sizeof(backend), "%s/backend/%s", serverbin, scheme); if (access(backend, X_OK)) { fprintf(stderr, "testbackend: Unknown device scheme \"%s\"!\n", scheme); return (1); } } /* * Create the back-channel pipe and side-channel socket... */ open("/dev/null", O_WRONLY); /* Make sure fd 3 and 4 are used */ open("/dev/null", O_WRONLY); pipe(back_fds); fcntl(back_fds[0], F_SETFL, fcntl(back_fds[0], F_GETFL) | O_NONBLOCK); fcntl(back_fds[1], F_SETFL, fcntl(back_fds[1], F_GETFL) | O_NONBLOCK); socketpair(AF_LOCAL, SOCK_STREAM, 0, side_fds); fcntl(side_fds[0], F_SETFL, fcntl(side_fds[0], F_GETFL) | O_NONBLOCK); fcntl(side_fds[1], F_SETFL, fcntl(side_fds[1], F_GETFL) | O_NONBLOCK); /* * Execute the trickle process as needed... */ if (do_trickle || do_pcl || do_ps || do_cancel) { pipe(data_fds); signal(SIGTERM, sigterm_handler); if ((data_pid = fork()) == 0) { /* * Trickle/query child comes here. Rearrange file descriptors so that * FD 1, 3, and 4 point to the backend... */ if ((fd = open("/dev/null", O_RDONLY)) != 0) { dup2(fd, 0); close(fd); } if (data_fds[1] != 1) { dup2(data_fds[1], 1); close(data_fds[1]); } close(data_fds[0]); if (back_fds[0] != 3) { dup2(back_fds[0], 3); close(back_fds[0]); } close(back_fds[1]); if (side_fds[0] != 4) { dup2(side_fds[0], 4); close(side_fds[0]); } close(side_fds[1]); if (do_trickle) { /* * Write 10 spaces, 1 per second... */ int i; /* Looping var */ for (i = 0; i < 10; i ++) { write(1, " ", 1); sleep(1); } } else if (do_cancel) { /* * Write PS or PCL lines until we see SIGTERM... */ int line = 0, page = 0; /* Current line and page */ ssize_t bytes; /* Number of bytes of response data */ char buffer[1024]; /* Output buffer */ if (do_pcl) write(1, "\033E", 2); else write(1, "%!\n/Courier findfont 12 scalefont setfont 0 setgray\n", 52); while (!job_canceled) { if (line == 0) { page ++; if (do_pcl) snprintf(buffer, sizeof(buffer), "PCL Page %d\r\n\r\n", page); else snprintf(buffer, sizeof(buffer), "18 732 moveto (PS Page %d) show\n", page); write(1, buffer, strlen(buffer)); } line ++; if (do_pcl) snprintf(buffer, sizeof(buffer), "Line %d\r\n", line); else snprintf(buffer, sizeof(buffer), "18 %d moveto (Line %d) show\n", 720 - line * 12, line); write(1, buffer, strlen(buffer)); if (line >= 55) { /* * Eject after 55 lines... */ line = 0; if (do_pcl) write(1, "\014", 1); else write(1, "showpage\n", 9); } /* * Check for back-channel data... */ if ((bytes = cupsBackChannelRead(buffer, sizeof(buffer), 0)) > 0) write(2, buffer, (size_t)bytes); /* * Throttle output to ~100hz... */ usleep(10000); } /* * Eject current page with info... */ if (do_pcl) snprintf(buffer, sizeof(buffer), "Canceled on line %d of page %d\r\n\014\033E", line, page); else snprintf(buffer, sizeof(buffer), "\n18 %d moveto (Canceled on line %d of page %d)\nshowpage\n", 720 - line * 12, line, page); write(1, buffer, strlen(buffer)); /* * See if we get any back-channel data... */ while ((bytes = cupsBackChannelRead(buffer, sizeof(buffer), 5.0)) > 0) write(2, buffer, (size_t)bytes); exit(0); } else { /* * Do PS or PCL query + test pages. */ char buffer[1024]; /* Buffer for response data */ ssize_t bytes; /* Number of bytes of response data */ double timeout; /* Timeout */ const char *data; /* Data to send */ static const char *pcl_data = /* PCL data */ "\033%-12345X@PJL\r\n" "@PJL JOB NAME = \"Hello, World!\"\r\n" "@PJL INFO USTATUS\r\n" "@PJL ENTER LANGUAGE = PCL\r\n" "\033E" "Hello, World!\n" "\014" "\033%-12345X@PJL\r\n" "@PJL EOJ NAME=\"Hello, World!\"\r\n" "\033%-12345X"; static const char *ps_data = /* PostScript data */ "%!\n" "save\n" "product = flush\n" "currentpagedevice /PageSize get aload pop\n" "2 copy gt {exch} if\n" "(Unknown)\n" "19 dict\n" "dup [612 792] (Letter) put\n" "dup [612 1008] (Legal) put\n" "dup [612 935] (w612h935) put\n" "dup [522 756] (Executive) put\n" "dup [595 842] (A4) put\n" "dup [420 595] (A5) put\n" "dup [499 709] (ISOB5) put\n" "dup [516 728] (B5) put\n" "dup [612 936] (w612h936) put\n" "dup [284 419] (Postcard) put\n" "dup [419.5 567] (DoublePostcard) put\n" "dup [558 774] (w558h774) put\n" "dup [553 765] (w553h765) put\n" "dup [522 737] (w522h737) put\n" "dup [499 709] (EnvISOB5) put\n" "dup [297 684] (Env10) put\n" "dup [459 649] (EnvC5) put\n" "dup [312 624] (EnvDL) put\n" "dup [279 540] (EnvMonarch) put\n" "{ exch aload pop 4 index sub abs 5 le exch\n" " 5 index sub abs 5 le and\n" " {exch pop exit} {pop} ifelse\n" "} bind forall\n" "= flush pop pop\n" "/Courier findfont 12 scalefont setfont\n" "0 setgray 36 720 moveto (Hello, ) show product show (!) show\n" "showpage\n" "restore\n" "\004"; if (do_pcl) data = pcl_data; else data = ps_data; write(1, data, strlen(data)); write(2, "DEBUG: START\n", 13); timeout = 60.0; while ((bytes = cupsBackChannelRead(buffer, sizeof(buffer), timeout)) > 0) { write(2, buffer, (size_t)bytes); timeout = 5.0; } write(2, "\nDEBUG: END\n", 12); } exit(0); } else if (data_pid < 0) { perror("testbackend: Unable to fork"); return (1); } } else data_fds[0] = data_fds[1] = -1; /* * Execute the backend... */ if ((back_pid = fork()) == 0) { /* * Child comes here... */ if (do_trickle || do_ps || do_pcl || do_cancel) { if (data_fds[0] != 0) { dup2(data_fds[0], 0); close(data_fds[0]); } close(data_fds[1]); } if (!show_log) { if ((fd = open("/dev/null", O_WRONLY)) != 2) { dup2(fd, 2); close(fd); } } if (back_fds[1] != 3) { dup2(back_fds[1], 3); close(back_fds[0]); } close(back_fds[1]); if (side_fds[1] != 4) { dup2(side_fds[1], 4); close(side_fds[0]); } close(side_fds[1]); execv(backend, argv + first_arg); fprintf(stderr, "testbackend: Unable to execute \"%s\": %s\n", backend, strerror(errno)); return (errno); } else if (back_pid < 0) { perror("testbackend: Unable to fork"); return (1); } /* * Parent comes here, setup back and side channel file descriptors... */ if (do_trickle || do_ps || do_pcl || do_cancel) { close(data_fds[0]); close(data_fds[1]); } if (back_fds[0] != 3) { dup2(back_fds[0], 3); close(back_fds[0]); } close(back_fds[1]); if (side_fds[0] != 4) { dup2(side_fds[0], 4); close(side_fds[0]); } close(side_fds[1]); /* * Do side-channel tests as needed, then wait for the backend... */ if (do_side_tests) { int length; /* Length of buffer */ char buffer[2049]; /* Buffer for reponse */ cups_sc_status_t scstatus; /* Status of side-channel command */ static const char * const statuses[] = { "CUPS_SC_STATUS_NONE", /* No status */ "CUPS_SC_STATUS_OK", /* Operation succeeded */ "CUPS_SC_STATUS_IO_ERROR", /* An I/O error occurred */ "CUPS_SC_STATUS_TIMEOUT", /* The backend did not respond */ "CUPS_SC_STATUS_NO_RESPONSE", /* The device did not respond */ "CUPS_SC_STATUS_BAD_MESSAGE", /* The command/response message was invalid */ "CUPS_SC_STATUS_TOO_BIG", /* Response too big */ "CUPS_SC_STATUS_NOT_IMPLEMENTED" /* Command not implemented */ }; sleep(2); length = 0; scstatus = cupsSideChannelDoRequest(CUPS_SC_CMD_DRAIN_OUTPUT, buffer, &length, 60.0); printf("CUPS_SC_CMD_DRAIN_OUTPUT returned %s\n", statuses[scstatus]); length = 1; scstatus = cupsSideChannelDoRequest(CUPS_SC_CMD_GET_BIDI, buffer, &length, 5.0); printf("CUPS_SC_CMD_GET_BIDI returned %s, %d\n", statuses[scstatus], buffer[0]); length = sizeof(buffer) - 1; scstatus = cupsSideChannelDoRequest(CUPS_SC_CMD_GET_DEVICE_ID, buffer, &length, 5.0); buffer[length] = '\0'; printf("CUPS_SC_CMD_GET_DEVICE_ID returned %s, \"%s\"\n", statuses[scstatus], buffer); length = 1; scstatus = cupsSideChannelDoRequest(CUPS_SC_CMD_GET_STATE, buffer, &length, 5.0); printf("CUPS_SC_CMD_GET_STATE returned %s, %02X\n", statuses[scstatus], buffer[0] & 255); if (do_walk) { /* * Walk the OID tree... */ scstatus = cupsSideChannelSNMPWalk(oid, 5.0, walk_cb, NULL); printf("CUPS_SC_CMD_SNMP_WALK returned %s\n", statuses[scstatus]); } else { /* * Lookup the same OID twice... */ length = sizeof(buffer); scstatus = cupsSideChannelSNMPGet(oid, buffer, &length, 5.0); printf("CUPS_SC_CMD_SNMP_GET %s returned %s, %d bytes (%s)\n", oid, statuses[scstatus], (int)length, buffer); length = sizeof(buffer); scstatus = cupsSideChannelSNMPGet(oid, buffer, &length, 5.0); printf("CUPS_SC_CMD_SNMP_GET %s returned %s, %d bytes (%s)\n", oid, statuses[scstatus], (int)length, buffer); } length = 0; scstatus = cupsSideChannelDoRequest(CUPS_SC_CMD_SOFT_RESET, buffer, &length, 5.0); printf("CUPS_SC_CMD_SOFT_RESET returned %s\n", statuses[scstatus]); } if (do_cancel) { sleep(1); kill(data_pid, SIGTERM); kill(back_pid, SIGTERM); } while ((pid = wait(&status)) > 0) { if (status) { if (WIFEXITED(status)) printf("%s exited with status %d!\n", pid == back_pid ? backend : "test", WEXITSTATUS(status)); else printf("%s crashed with signal %d!\n", pid == back_pid ? backend : "test", WTERMSIG(status)); } } /* * Exit accordingly... */ return (status != 0); } /* * 'sigterm_handler()' - Flag when we get SIGTERM. */ static void sigterm_handler(int sig) /* I - Signal */ { (void)sig; job_canceled = 1; } /* * 'usage()' - Show usage information. */ static void usage(void) { puts("Usage: testbackend [-cancel] [-d] [-ps | -pcl] [-s [-get OID] " "[-walk OID]] [-t] device-uri job-id user title copies options [file]"); puts(""); puts("Options:"); puts(" -cancel Simulate a canceled print job after 2 seconds."); puts(" -d Show log messages from backend."); puts(" -get OID Lookup the specified SNMP OID."); puts(" (.1.3.6.1.2.1.43.10.2.1.4.1.1 is a good one for printers)"); puts(" -pcl Send PCL+PJL query and test page to backend."); puts(" -ps Send PostScript query and test page to backend."); puts(" -s Do side-channel + SNMP tests."); puts(" -t Send spaces slowly to backend ('trickle')."); puts(" -walk OID Walk the specified SNMP OID."); puts(" (.1.3.6.1.2.1.43 is a good one for printers)"); exit(1); } /* * 'walk_cb()' - Show results of cupsSideChannelSNMPWalk... */ static void walk_cb(const char *oid, /* I - OID */ const char *data, /* I - Data */ int datalen, /* I - Length of data */ void *context) /* I - Context (unused) */ { char temp[80]; (void)context; if ((size_t)datalen > (sizeof(temp) - 1)) { memcpy(temp, data, sizeof(temp) - 1); temp[sizeof(temp) - 1] = '\0'; } else { memcpy(temp, data, (size_t)datalen); temp[datalen] = '\0'; } printf("CUPS_SC_CMD_SNMP_WALK %s, %d bytes (%s)\n", oid, datalen, temp); } cups-2.2.7/backend/testsupplies.c000664 000765 000024 00000003316 13255074424 017455 0ustar00msweetstaff000000 000000 /* * SNMP supplies test program for CUPS. * * Copyright 2008-2011 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include "backend-private.h" /* * 'main()' - Show the supplies state of a printer. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { http_addrlist_t *host; /* Host addresses */ int snmp_fd; /* SNMP socket */ int page_count, /* Current page count */ printer_state; /* Current printer state */ if (argc != 2) { puts("Usage: testsupplies ip-or-hostname"); return (1); } if ((host = httpAddrGetList(argv[1], AF_UNSPEC, "9100")) == NULL) { perror(argv[1]); return (1); } if ((snmp_fd = _cupsSNMPOpen(host->addr.addr.sa_family)) < 0) { perror(argv[1]); return (1); } for (;;) { fputs("backendSNMPSupplies: ", stdout); if (backendSNMPSupplies(snmp_fd, &(host->addr), &page_count, &printer_state)) { puts("FAIL"); return (1); } printf("backendSNMPSupplies: %s (page_count=%d, printer_state=%d)\n", page_count < 0 || printer_state < CUPS_TC_other || printer_state > CUPS_TC_warmup ? "FAIL" : "PASS", page_count, printer_state); sleep(5); } } cups-2.2.7/backend/usb-darwin.c000664 000765 000024 00000213124 13255074424 016764 0ustar00msweetstaff000000 000000 /* * Copyright 2005-2016 Apple Inc. All rights reserved. * * IMPORTANT: This Apple software is supplied to you by Apple Computer, * Inc. ("Apple") in consideration of your agreement to the following * terms, and your use, installation, modification or redistribution of * this Apple software constitutes acceptance of these terms. If you do * not agree with these terms, please do not use, install, modify or * redistribute this Apple software. * * In consideration of your agreement to abide by the following terms, and * subject to these terms, Apple grants you a personal, non-exclusive * license, under Apple's copyrights in this original Apple software (the * "Apple Software"), to use, reproduce, modify and redistribute the Apple * Software, with or without modifications, in source and/or binary forms; * provided that if you redistribute the Apple Software in its entirety and * without modifications, you must retain this notice and the following * text and disclaimers in all such redistributions of the Apple Software. * Neither the name, trademarks, service marks or logos of Apple Computer, * Inc. may be used to endorse or promote products derived from the Apple * Software without specific prior written permission from Apple. Except * as expressly stated in this notice, no other rights or licenses, express * or implied, are granted by Apple herein, including but not limited to * any patent rights that may be infringed by your derivative works or by * other works in which the Apple Software may be incorporated. * * The Apple Software is provided by Apple on an "AS IS" basis. APPLE * MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION * THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND * OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. * * IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, * MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED * AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), * STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * Include necessary headers. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "backend-private.h" #include #include #include #include #include #include #include /* * Include necessary headers. */ extern char **environ; /* * DEBUG_WRITES, if defined, causes the backend to write data to the printer in * 512 byte increments, up to 8192 bytes, to make debugging with a USB bus * analyzer easier. */ #define DEBUG_WRITES 0 /* * WAIT_EOF_DELAY is number of seconds we'll wait for responses from * the printer after we've finished sending all the data */ #define WAIT_EOF_DELAY 7 #define WAIT_SIDE_DELAY 3 #define DEFAULT_TIMEOUT 5000L #define USB_INTERFACE_KIND CFUUIDGetUUIDBytes(kIOUSBInterfaceInterfaceID245) #define kUSBLanguageEnglish 0x409 #define PRINTER_POLLING_INTERVAL 5 /* seconds */ #define INITIAL_LOG_INTERVAL PRINTER_POLLING_INTERVAL #define SUBSEQUENT_LOG_INTERVAL 3 * INITIAL_LOG_INTERVAL #define kUSBPrinterClassTypeID CFUUIDGetConstantUUIDWithBytes(NULL, 0x06, 0x04, 0x7D, 0x16, 0x53, 0xA2, 0x11, 0xD6, 0x92, 0x06, 0x00, 0x30, 0x65, 0x52, 0x45, 0x92) #define kUSBPrinterClassInterfaceID CFUUIDGetConstantUUIDWithBytes(NULL, 0x03, 0x34, 0x6D, 0x74, 0x53, 0xA3, 0x11, 0xD6, 0x9E, 0xA1, 0x76, 0x30, 0x65, 0x52, 0x45, 0x92) #define kUSBClassDriverProperty CFSTR("USB Printing Class") #define kUSBGenericTOPrinterClassDriver CFSTR("/System/Library/Printers/Libraries/USBGenericPrintingClass.plugin") #define kUSBPrinterClassDeviceNotOpen -9664 /*kPMInvalidIOMContext*/ #define CRSetCrashLogMessage(m) _crc_make_setter(message, m) #define _crc_make_setter(attr, arg) (gCRAnnotations.attr = (uint64_t)(unsigned long)(arg)) #define CRASH_REPORTER_CLIENT_HIDDEN __attribute__((visibility("hidden"))) #define CRASHREPORTER_ANNOTATIONS_VERSION 4 #define CRASHREPORTER_ANNOTATIONS_SECTION "__crash_info" struct crashreporter_annotations_t { uint64_t version; // unsigned long uint64_t message; // char * uint64_t signature_string; // char * uint64_t backtrace; // char * uint64_t message2; // char * uint64_t thread; // uint64_t uint64_t dialog_mode; // unsigned int }; CRASH_REPORTER_CLIENT_HIDDEN struct crashreporter_annotations_t gCRAnnotations __attribute__((section("__DATA," CRASHREPORTER_ANNOTATIONS_SECTION))) = { CRASHREPORTER_ANNOTATIONS_VERSION, 0, 0, 0, 0, 0, 0 }; /* * Section 5.3 USB Printing Class spec */ #define kUSBPrintingSubclass 1 #define kUSBPrintingProtocolNoOpen 0 #define kUSBPrintingProtocolUnidirectional 1 #define kUSBPrintingProtocolBidirectional 2 #define kUSBPrintingProtocolIPP 4 typedef IOUSBInterfaceInterface245 **printer_interface_t; typedef struct iodevice_request_s /**** Device request ****/ { UInt8 requestType; UInt8 request; UInt16 value; UInt16 index; UInt16 length; void *buffer; } iodevice_request_t; typedef union /**** Centronics status byte ****/ { char b; struct { unsigned reserved0:2; unsigned paperError:1; unsigned select:1; unsigned notError:1; unsigned reserved1:3; } status; } centronics_status_t; typedef struct classdriver_s /**** g.classdriver context ****/ { IUNKNOWN_C_GUTS; CFPlugInRef plugin; /* release plugin */ IUnknownVTbl **factory; /* Factory */ void *vendorReference; /* vendor class specific usage */ UInt32 location; /* unique location in bus topology */ UInt8 interfaceNumber; /* Interface number */ UInt16 vendorID; /* Vendor id */ UInt16 productID; /* Product id */ printer_interface_t interface; /* identify the device to IOKit */ UInt8 outpipe; /* mandatory bulkOut pipe */ UInt8 inpipe; /* optional bulkIn pipe */ /* general class requests */ kern_return_t (*DeviceRequest)(struct classdriver_s **printer, iodevice_request_t *iorequest, UInt16 timeout); kern_return_t (*GetString)(struct classdriver_s **printer, UInt8 whichString, UInt16 language, UInt16 timeout, CFStringRef *result); /* standard printer class requests */ kern_return_t (*SoftReset)(struct classdriver_s **printer, UInt16 timeout); kern_return_t (*GetCentronicsStatus)(struct classdriver_s **printer, centronics_status_t *result, UInt16 timeout); kern_return_t (*GetDeviceID)(struct classdriver_s **printer, CFStringRef *devid, UInt16 timeout); /* standard bulk device requests */ kern_return_t (*ReadPipe)(struct classdriver_s **printer, UInt8 *buffer, UInt32 *count); kern_return_t (*WritePipe)(struct classdriver_s **printer, UInt8 *buffer, UInt32 *count, Boolean eoj); /* interface requests */ kern_return_t (*Open)(struct classdriver_s **printer, UInt32 location, UInt8 protocol); kern_return_t (*Abort)(struct classdriver_s **printer); kern_return_t (*Close)(struct classdriver_s **printer); /* initialize and terminate */ kern_return_t (*Initialize)(struct classdriver_s **printer, struct classdriver_s **baseclass); kern_return_t (*Terminate)(struct classdriver_s **printer); } classdriver_t; typedef Boolean (*iterator_callback_t)(io_service_t obj, printer_interface_t printerIntf, void *refcon); typedef struct iterator_reference_s /**** Iterator reference data */ { iterator_callback_t callback; void *userdata; Boolean keepRunning; } iterator_reference_t; typedef struct globals_s { io_service_t printer_obj; classdriver_t **classdriver; pthread_mutex_t read_thread_mutex; pthread_cond_t read_thread_cond; int read_thread_stop; int read_thread_done; pthread_mutex_t readwrite_lock_mutex; pthread_cond_t readwrite_lock_cond; int readwrite_lock; CFStringRef make; CFStringRef model; CFStringRef serial; UInt32 location; UInt8 interfaceNum; UInt8 alternateSetting; UInt8 interfaceProtocol; CFRunLoopTimerRef status_timer; int print_fd; /* File descriptor to print */ ssize_t print_bytes; /* Print bytes read */ #if DEBUG_WRITES ssize_t debug_bytes; /* Current bytes to read */ #endif /* DEBUG_WRITES */ Boolean use_generic_class_driver; Boolean wait_eof; int drain_output; /* Drain all pending output */ int bidi_flag; /* 0=unidirectional, 1=bidirectional */ pthread_mutex_t sidechannel_thread_mutex; pthread_cond_t sidechannel_thread_cond; int sidechannel_thread_stop; int sidechannel_thread_done; } globals_t; /* * Globals... */ globals_t g = { 0 }; /* Globals */ int Iterating = 0; /* Are we iterating the bus? */ /* * Local functions... */ static Boolean list_device_cb(io_service_t obj, printer_interface_t printerIntf, void *refcon); static Boolean find_device_cb(io_service_t obj, printer_interface_t printerIntf, void *refcon); static CFStringRef cfstr_create_trim(const char *cstr); static CFStringRef copy_value_for_key(CFStringRef deviceID, CFStringRef *keys); static kern_return_t load_classdriver(CFStringRef driverPath, printer_interface_t interface, classdriver_t ***printerDriver); static kern_return_t load_printerdriver(CFStringRef *driverBundlePath); static kern_return_t registry_close(void); static kern_return_t registry_open(CFStringRef *driverBundlePath); static kern_return_t unload_classdriver(classdriver_t ***classdriver); static void *read_thread(void *reference); static void *sidechannel_thread(void *reference); static void device_added(void *userdata, io_iterator_t iterator); static void get_device_id(cups_sc_status_t *status, char *data, int *datalen); static void iterate_printers(iterator_callback_t callBack, void *userdata); static void parse_options(char *options, char *serial, int serial_size, UInt32 *location, Boolean *wait_eof); static void setup_cfLanguage(void); static void soft_reset(void); static void status_timer_cb(CFRunLoopTimerRef timer, void *info); #define IS_64BIT 1 #define IS_NOT_64BIT 0 #if defined(__i386__) || defined(__x86_64__) static pid_t child_pid; /* Child PID */ static void run_legacy_backend(int argc, char *argv[], int fd) __attribute__((noreturn)); /* Starts child backend process running as a ppc executable */ #endif /* __i386__ || __x86_64__ */ static void sigterm_handler(int sig); /* SIGTERM handler */ static void sigquit_handler(int sig, siginfo_t *si, void *unused) __attribute__((noreturn)); #ifdef PARSE_PS_ERRORS static const char *next_line (const char *buffer); static void parse_pserror (char *sockBuffer, int len); #endif /* PARSE_PS_ERRORS */ static printer_interface_t usb_printer_interface_interface(io_service_t usbClass); static CFStringRef copy_printer_interface_deviceid(printer_interface_t printer, UInt8 alternateSetting); static CFStringRef copy_printer_interface_indexed_description(printer_interface_t printer, UInt8 index, UInt16 language); static CFStringRef deviceIDCopyManufacturer(CFStringRef deviceID); static CFStringRef deviceIDCopyModel(CFStringRef deviceID); static CFStringRef deviceIDCopySerialNumber(CFStringRef deviceID); #pragma mark - /* * 'list_devices()' - List all USB devices. */ void list_devices() { iterate_printers(list_device_cb, NULL); } /* * 'print_device()' - Print a file to a USB device. */ int /* O - Exit status */ print_device(const char *uri, /* I - Device URI */ const char *hostname, /* I - Hostname/manufacturer */ const char *resource, /* I - Resource/modelname */ char *options, /* I - Device options/serial number */ int print_fd, /* I - File descriptor to print */ int copies, /* I - Copies to print */ int argc, /* I - Number of command-line arguments (6 or 7) */ char *argv[]) /* I - Command-line arguments */ { char serial[1024]; /* Serial number buffer */ OSStatus status; /* Function results */ IOReturn iostatus; /* Current IO status */ pthread_t read_thread_id, /* Read thread */ sidechannel_thread_id;/* Side-channel thread */ int have_sidechannel = 0; /* Was the side-channel thread started? */ struct stat sidechannel_info; /* Side-channel file descriptor info */ char print_buffer[8192], /* Print data buffer */ *print_ptr; /* Pointer into print data buffer */ UInt32 location; /* Unique location in bus topology */ fd_set input_set; /* Input set for select() */ CFStringRef driverBundlePath; /* Class driver path */ int countdown, /* Logging interval */ nfds; /* Number of file descriptors */ ssize_t total_bytes; /* Total bytes written */ UInt32 bytes; /* Bytes written */ struct timeval *timeout, /* Timeout pointer */ tv; /* Time value */ struct timespec cond_timeout; /* pthread condition timeout */ struct sigaction action; /* Actions for POSIX signals */ (void)uri; /* * Catch SIGQUIT to determine who is sending it... */ memset(&action, 0, sizeof(action)); action.sa_sigaction = sigquit_handler; action.sa_flags = SA_SIGINFO; sigaction(SIGQUIT, &action, NULL); /* * See if the side-channel descriptor is valid... */ have_sidechannel = !fstat(CUPS_SC_FD, &sidechannel_info) && S_ISSOCK(sidechannel_info.st_mode); /* * Localize using CoreFoundation... */ setup_cfLanguage(); parse_options(options, serial, sizeof(serial), &location, &g.wait_eof); if (resource[0] == '/') resource++; g.print_fd = print_fd; g.make = cfstr_create_trim(hostname); g.model = cfstr_create_trim(resource); g.serial = cfstr_create_trim(serial); g.location = location; if (!g.make || !g.model) { fprintf(stderr, "DEBUG: Fatal USB error.\n"); _cupsLangPrintFilter(stderr, "ERROR", _("There was an unrecoverable USB error.")); if (!g.make) fputs("DEBUG: USB make string is NULL\n", stderr); if (!g.model) fputs("DEBUG: USB model string is NULL\n", stderr); return (CUPS_BACKEND_STOP); } fputs("STATE: +connecting-to-device\n", stderr); countdown = INITIAL_LOG_INTERVAL; do { if (g.printer_obj) { IOObjectRelease(g.printer_obj); unload_classdriver(&g.classdriver); g.printer_obj = 0x0; g.classdriver = 0x0; } fprintf(stderr, "DEBUG: Looking for '%s %s'\n", hostname, resource); do { iterate_printers(find_device_cb, NULL); if (g.printer_obj != 0x0) break; _cupsLangPrintFilter(stderr, "INFO", _("Waiting for printer to become available.")); sleep(5); } while (true); fputs("DEBUG: Opening connection\n", stderr); driverBundlePath = NULL; status = registry_open(&driverBundlePath); #if defined(__i386__) || defined(__x86_64__) /* * If we were unable to load the class drivers for this printer it's * probably because they're ppc or i386. In this case try to run this * backend as i386 or ppc executables so we can use them... */ if (status == -2) { run_legacy_backend(argc, argv, print_fd); /* Never returns here */ } #endif /* __i386__ || __x86_64__ */ if (status == -2) { /* * If we still were unable to load the class drivers for this printer log * the error and stop the queue... */ if (driverBundlePath == NULL || !CFStringGetCString(driverBundlePath, print_buffer, sizeof(print_buffer), kCFStringEncodingUTF8)) strlcpy(print_buffer, "USB class driver", sizeof(print_buffer)); fputs("STATE: +apple-missing-usbclassdriver-error\n", stderr); _cupsLangPrintFilter(stderr, "ERROR", _("There was an unrecoverable USB error.")); fprintf(stderr, "DEBUG: Could not load %s\n", print_buffer); if (driverBundlePath) CFRelease(driverBundlePath); return (CUPS_BACKEND_STOP); } if (driverBundlePath) CFRelease(driverBundlePath); if (status != noErr) { sleep(PRINTER_POLLING_INTERVAL); countdown -= PRINTER_POLLING_INTERVAL; if (countdown <= 0) { _cupsLangPrintFilter(stderr, "INFO", _("Waiting for printer to become available.")); fprintf(stderr, "DEBUG: USB printer status: 0x%08x\n", (int)status); countdown = SUBSEQUENT_LOG_INTERVAL; /* subsequent log entries, every 15 seconds */ } } } while (status != noErr); fputs("STATE: -connecting-to-device\n", stderr); /* * Now that we are "connected" to the port, ignore SIGTERM so that we * can finish out any page data the driver sends (e.g. to eject the * current page... Only ignore SIGTERM if we are printing data from * stdin (otherwise you can't cancel raw jobs...) */ if (!print_fd) { memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); action.sa_handler = SIG_IGN; sigaction(SIGTERM, &action, NULL); } /* * Start the side channel thread if the descriptor is valid... */ pthread_mutex_init(&g.readwrite_lock_mutex, NULL); pthread_cond_init(&g.readwrite_lock_cond, NULL); g.readwrite_lock = 1; if (have_sidechannel) { g.sidechannel_thread_stop = 0; g.sidechannel_thread_done = 0; pthread_cond_init(&g.sidechannel_thread_cond, NULL); pthread_mutex_init(&g.sidechannel_thread_mutex, NULL); if (pthread_create(&sidechannel_thread_id, NULL, sidechannel_thread, NULL)) { fprintf(stderr, "DEBUG: Fatal USB error.\n"); _cupsLangPrintFilter(stderr, "ERROR", _("There was an unrecoverable USB error.")); fputs("DEBUG: Couldn't create side-channel thread\n", stderr); registry_close(); return (CUPS_BACKEND_STOP); } } /* * Get the read thread going... */ g.read_thread_stop = 0; g.read_thread_done = 0; pthread_cond_init(&g.read_thread_cond, NULL); pthread_mutex_init(&g.read_thread_mutex, NULL); if (pthread_create(&read_thread_id, NULL, read_thread, NULL)) { fprintf(stderr, "DEBUG: Fatal USB error.\n"); _cupsLangPrintFilter(stderr, "ERROR", _("There was an unrecoverable USB error.")); fputs("DEBUG: Couldn't create read thread\n", stderr); registry_close(); return (CUPS_BACKEND_STOP); } /* * The main thread sends the print file... */ g.drain_output = 0; g.print_bytes = 0; total_bytes = 0; print_ptr = print_buffer; while (status == noErr && copies-- > 0) { _cupsLangPrintFilter(stderr, "INFO", _("Sending data to printer.")); if (print_fd != STDIN_FILENO) { fputs("PAGE: 1 1\n", stderr); lseek(print_fd, 0, SEEK_SET); } while (status == noErr) { FD_ZERO(&input_set); if (!g.print_bytes) FD_SET(print_fd, &input_set); /* * Calculate select timeout... * If we have data waiting to send timeout is 100ms. * else if we're draining print_fd timeout is 0. * else we're waiting forever... */ if (g.print_bytes) { tv.tv_sec = 0; tv.tv_usec = 100000; /* 100ms */ timeout = &tv; } else if (g.drain_output) { tv.tv_sec = 0; tv.tv_usec = 0; timeout = &tv; } else timeout = NULL; /* * I/O is unlocked around select... */ pthread_mutex_lock(&g.readwrite_lock_mutex); g.readwrite_lock = 0; pthread_cond_signal(&g.readwrite_lock_cond); pthread_mutex_unlock(&g.readwrite_lock_mutex); nfds = select(print_fd + 1, &input_set, NULL, NULL, timeout); /* * Reacquire the lock... */ pthread_mutex_lock(&g.readwrite_lock_mutex); while (g.readwrite_lock) pthread_cond_wait(&g.readwrite_lock_cond, &g.readwrite_lock_mutex); g.readwrite_lock = 1; pthread_mutex_unlock(&g.readwrite_lock_mutex); if (nfds < 0) { if (errno == EINTR && total_bytes == 0) { fputs("DEBUG: Received an interrupt before any bytes were " "written, aborting\n", stderr); registry_close(); return (CUPS_BACKEND_OK); } else if (errno != EAGAIN && errno != EINTR) { _cupsLangPrintFilter(stderr, "ERROR", _("Unable to read print data.")); perror("DEBUG: select"); registry_close(); return (CUPS_BACKEND_FAILED); } } /* * If drain output has finished send a response... */ if (g.drain_output && !nfds && !g.print_bytes) { /* Send a response... */ cupsSideChannelWrite(CUPS_SC_CMD_DRAIN_OUTPUT, CUPS_SC_STATUS_OK, NULL, 0, 1.0); g.drain_output = 0; } /* * Check if we have print data ready... */ if (FD_ISSET(print_fd, &input_set)) { #if DEBUG_WRITES g.debug_bytes += 512; if (g.debug_bytes > sizeof(print_buffer)) g.debug_bytes = 512; g.print_bytes = read(print_fd, print_buffer, g.debug_bytes); #else g.print_bytes = read(print_fd, print_buffer, sizeof(print_buffer)); #endif /* DEBUG_WRITES */ if (g.print_bytes < 0) { /* * Read error - bail if we don't see EAGAIN or EINTR... */ if (errno != EAGAIN && errno != EINTR) { _cupsLangPrintFilter(stderr, "ERROR", _("Unable to read print data.")); perror("DEBUG: read"); registry_close(); return (CUPS_BACKEND_FAILED); } g.print_bytes = 0; } else if (g.print_bytes == 0) { /* * End of file, break out of the loop... */ break; } print_ptr = print_buffer; fprintf(stderr, "DEBUG: Read %d bytes of print data...\n", (int)g.print_bytes); } if (g.print_bytes) { bytes = (UInt32)g.print_bytes; iostatus = (*g.classdriver)->WritePipe(g.classdriver, (UInt8*)print_ptr, &bytes, 0); /* * Ignore timeout errors, but retain the number of bytes written to * avoid sending duplicate data... */ if (iostatus == kIOUSBTransactionTimeout) { fputs("DEBUG: Got USB transaction timeout during write\n", stderr); iostatus = 0; } /* * If we've stalled, retry the write... */ else if (iostatus == kIOUSBPipeStalled) { fputs("DEBUG: Got USB pipe stalled during write\n", stderr); bytes = (UInt32)g.print_bytes; iostatus = (*g.classdriver)->WritePipe(g.classdriver, (UInt8*)print_ptr, &bytes, 0); } /* * Retry a write after an aborted write since we probably just got * SIGTERM... */ else if (iostatus == kIOReturnAborted) { fputs("DEBUG: Got USB return aborted during write\n", stderr); IOReturn err = (*g.classdriver)->Abort(g.classdriver); fprintf(stderr, "DEBUG: USB class driver Abort returned %x\n", err); #if DEBUG_WRITES sleep(5); #endif /* DEBUG_WRITES */ bytes = (UInt32)g.print_bytes; iostatus = (*g.classdriver)->WritePipe(g.classdriver, (UInt8*)print_ptr, &bytes, 0); } if (iostatus) { /* * Write error - bail if we don't see an error we can retry... */ _cupsLangPrintFilter(stderr, "ERROR", _("Unable to send data to printer.")); fprintf(stderr, "DEBUG: USB class driver WritePipe returned %x\n", iostatus); IOReturn err = (*g.classdriver)->Abort(g.classdriver); fprintf(stderr, "DEBUG: USB class driver Abort returned %x\n", err); status = CUPS_BACKEND_FAILED; break; } else if (bytes > 0) { fprintf(stderr, "DEBUG: Wrote %d bytes of print data...\n", (int)bytes); g.print_bytes -= bytes; print_ptr += bytes; total_bytes += bytes; } } if (print_fd != 0 && status == noErr) fprintf(stderr, "DEBUG: Sending print file, %lld bytes...\n", (off_t)total_bytes); } } fprintf(stderr, "DEBUG: Sent %lld bytes...\n", (off_t)total_bytes); fputs("STATE: +cups-waiting-for-job-completed\n", stderr); /* * Signal the side channel thread to exit... */ if (have_sidechannel) { close(CUPS_SC_FD); pthread_mutex_lock(&g.readwrite_lock_mutex); g.readwrite_lock = 0; pthread_cond_signal(&g.readwrite_lock_cond); pthread_mutex_unlock(&g.readwrite_lock_mutex); g.sidechannel_thread_stop = 1; pthread_mutex_lock(&g.sidechannel_thread_mutex); if (!g.sidechannel_thread_done) { gettimeofday(&tv, NULL); cond_timeout.tv_sec = tv.tv_sec + WAIT_SIDE_DELAY; cond_timeout.tv_nsec = tv.tv_usec * 1000; while (!g.sidechannel_thread_done) { if (pthread_cond_timedwait(&g.sidechannel_thread_cond, &g.sidechannel_thread_mutex, &cond_timeout) != 0) break; } } pthread_mutex_unlock(&g.sidechannel_thread_mutex); } /* * Signal the read thread to exit then wait 7 seconds for it to complete... */ g.read_thread_stop = 1; pthread_mutex_lock(&g.read_thread_mutex); if (!g.read_thread_done) { fputs("DEBUG: Waiting for read thread to exit...\n", stderr); gettimeofday(&tv, NULL); cond_timeout.tv_sec = tv.tv_sec + WAIT_EOF_DELAY; cond_timeout.tv_nsec = tv.tv_usec * 1000; while (!g.read_thread_done) { if (pthread_cond_timedwait(&g.read_thread_cond, &g.read_thread_mutex, &cond_timeout) != 0) break; } /* * If it didn't exit abort the pending read and wait an additional second... */ if (!g.read_thread_done) { fputs("DEBUG: Read thread still active, aborting the pending read...\n", stderr); g.wait_eof = 0; (*g.classdriver)->Abort(g.classdriver); gettimeofday(&tv, NULL); cond_timeout.tv_sec = tv.tv_sec + 1; cond_timeout.tv_nsec = tv.tv_usec * 1000; while (!g.read_thread_done) { if (pthread_cond_timedwait(&g.read_thread_cond, &g.read_thread_mutex, &cond_timeout) != 0) break; } } } pthread_mutex_unlock(&g.read_thread_mutex); /* * Close the connection and input file and general clean up... */ registry_close(); if (print_fd != STDIN_FILENO) close(print_fd); if (g.make != NULL) CFRelease(g.make); if (g.model != NULL) CFRelease(g.model); if (g.serial != NULL) CFRelease(g.serial); if (g.printer_obj != 0x0) IOObjectRelease(g.printer_obj); return status; } /* * 'read_thread()' - Thread to read the backchannel data on. */ static void *read_thread(void *reference) { UInt8 readbuffer[512]; UInt32 rbytes; kern_return_t readstatus; struct mach_timebase_info timeBaseInfo; uint64_t start, delay; (void)reference; /* Calculate what 250 milliSeconds are in mach absolute time... */ mach_timebase_info(&timeBaseInfo); delay = ((uint64_t)250000000 * (uint64_t)timeBaseInfo.denom) / (uint64_t)timeBaseInfo.numer; do { /* * Remember when we started so we can throttle the loop after the read call... */ start = mach_absolute_time(); rbytes = sizeof(readbuffer); readstatus = (*g.classdriver)->ReadPipe(g.classdriver, readbuffer, &rbytes); if (readstatus == kIOReturnSuccess && rbytes > 0) { fprintf(stderr, "DEBUG: Read %d bytes of back-channel data...\n", (int)rbytes); cupsBackChannelWrite((char*)readbuffer, rbytes, 1.0); /* cntrl-d is echoed by the printer. * NOTES: * Xerox Phaser 6250D doesn't echo the cntrl-d. * Xerox Phaser 6250D doesn't always send the product query. */ if (g.wait_eof && readbuffer[rbytes-1] == 0x4) break; #ifdef PARSE_PS_ERRORS parse_pserror(readbuffer, rbytes); #endif } else if (readstatus == kIOUSBTransactionTimeout) fputs("DEBUG: Got USB transaction timeout during read\n", stderr); else if (readstatus == kIOUSBPipeStalled) fputs("DEBUG: Got USB pipe stalled during read\n", stderr); else if (readstatus == kIOReturnAborted) fputs("DEBUG: Got USB return aborted during read\n", stderr); /* * Make sure this loop executes no more than once every 250 miliseconds... */ if ((readstatus != kIOReturnSuccess || rbytes == 0) && (g.wait_eof || !g.read_thread_stop)) mach_wait_until(start + delay); } while (g.wait_eof || !g.read_thread_stop); /* Abort from main thread tests error here */ /* Workaround for usb race condition. */ if (!g.wait_eof && g.use_generic_class_driver) { const char *pdl = getenv("FINAL_CONTENT_TYPE"); if (pdl && strcmp(pdl, "application/vnd.cups-postscript") == 0) { while (readstatus == kIOReturnSuccess && ((rbytes > 0 && readbuffer[rbytes-1] != 0x4) || rbytes == 0)) { start = mach_absolute_time(); rbytes = sizeof(readbuffer); readstatus = (*g.classdriver)->ReadPipe(g.classdriver, readbuffer, &rbytes); if (readstatus == kIOReturnSuccess && rbytes > 0 && readbuffer[rbytes-1] == 0x4) break; /* Make sure this loop executes no more than once every 250 miliseconds... */ mach_wait_until(start + delay); } } } /* * Let the main thread know that we have completed the read thread... */ pthread_mutex_lock(&g.read_thread_mutex); g.read_thread_done = 1; pthread_cond_signal(&g.read_thread_cond); pthread_mutex_unlock(&g.read_thread_mutex); return NULL; } /* * 'sidechannel_thread()' - Handle side-channel requests. */ static void* sidechannel_thread(void *reference) { cups_sc_command_t command; /* Request command */ cups_sc_status_t status; /* Request/response status */ char data[2048]; /* Request/response data */ int datalen; /* Request/response data size */ (void)reference; do { datalen = sizeof(data); if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0)) { if (status == CUPS_SC_STATUS_TIMEOUT) continue; else break; } switch (command) { case CUPS_SC_CMD_SOFT_RESET: /* Do a soft reset */ fputs("DEBUG: CUPS_SC_CMD_SOFT_RESET received from driver...\n", stderr); if ((*g.classdriver)->SoftReset != NULL) { soft_reset(); cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, NULL, 0, 1.0); fputs("DEBUG: Returning status CUPS_STATUS_OK with no bytes...\n", stderr); } else { cupsSideChannelWrite(command, CUPS_SC_STATUS_NOT_IMPLEMENTED, NULL, 0, 1.0); fputs("DEBUG: Returning status CUPS_STATUS_NOT_IMPLEMENTED with " "no bytes...\n", stderr); } break; case CUPS_SC_CMD_DRAIN_OUTPUT: /* Drain all pending output */ fputs("DEBUG: CUPS_SC_CMD_DRAIN_OUTPUT received from driver...\n", stderr); g.drain_output = 1; break; case CUPS_SC_CMD_GET_BIDI: /* Is the connection bidirectional? */ fputs("DEBUG: CUPS_SC_CMD_GET_BIDI received from driver...\n", stderr); data[0] = (char)g.bidi_flag; cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0); fprintf(stderr, "DEBUG: Returned CUPS_SC_STATUS_OK with 1 byte (%02X)...\n", data[0]); break; case CUPS_SC_CMD_GET_DEVICE_ID: /* Return IEEE-1284 device ID */ fputs("DEBUG: CUPS_SC_CMD_GET_DEVICE_ID received from driver...\n", stderr); datalen = sizeof(data); get_device_id(&status, data, &datalen); cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, datalen, 1.0); if ((size_t)datalen < sizeof(data)) data[datalen] = '\0'; else data[sizeof(data) - 1] = '\0'; fprintf(stderr, "DEBUG: Returning CUPS_SC_STATUS_OK with %d bytes (%s)...\n", datalen, data); break; case CUPS_SC_CMD_GET_STATE: /* Return device state */ fputs("DEBUG: CUPS_SC_CMD_GET_STATE received from driver...\n", stderr); data[0] = CUPS_SC_STATE_ONLINE; cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0); fprintf(stderr, "DEBUG: Returned CUPS_SC_STATUS_OK with 1 byte (%02X)...\n", data[0]); break; default: fprintf(stderr, "DEBUG: Unknown side-channel command (%d) received " "from driver...\n", command); cupsSideChannelWrite(command, CUPS_SC_STATUS_NOT_IMPLEMENTED, NULL, 0, 1.0); fputs("DEBUG: Returned CUPS_SC_STATUS_NOT_IMPLEMENTED with no bytes...\n", stderr); break; } } while (!g.sidechannel_thread_stop); pthread_mutex_lock(&g.sidechannel_thread_mutex); g.sidechannel_thread_done = 1; pthread_cond_signal(&g.sidechannel_thread_cond); pthread_mutex_unlock(&g.sidechannel_thread_mutex); return NULL; } #pragma mark - /* * 'iterate_printers()' - Iterate over all the printers. */ static void iterate_printers(iterator_callback_t callBack, void *userdata) { Iterating = 1; iterator_reference_t reference = { callBack, userdata, true }; IONotificationPortRef addNotification = IONotificationPortCreate(kIOMasterPortDefault); int printingClass = kUSBPrintingClass; int printingSubclass = kUSBPrintingSubclass; CFNumberRef interfaceClass = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &printingClass); CFNumberRef interfaceSubClass = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &printingSubclass); CFMutableDictionaryRef usbPrinterMatchDictionary = IOServiceMatching(kIOUSBInterfaceClassName); CFDictionaryAddValue(usbPrinterMatchDictionary, CFSTR("bInterfaceClass"), interfaceClass); CFDictionaryAddValue(usbPrinterMatchDictionary, CFSTR("bInterfaceSubClass"), interfaceSubClass); CFRelease(interfaceClass); CFRelease(interfaceSubClass); io_iterator_t add_iterator = IO_OBJECT_NULL; IOServiceAddMatchingNotification(addNotification, kIOMatchedNotification, usbPrinterMatchDictionary, &device_added, &reference, &add_iterator); if (add_iterator != IO_OBJECT_NULL) { device_added (&reference, add_iterator); if (reference.keepRunning) { CFRunLoopAddSource(CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(addNotification), kCFRunLoopDefaultMode); CFRunLoopRun(); } IOObjectRelease(add_iterator); } Iterating = 0; } /* * 'device_added()' - Device added notifier. */ static void device_added(void *userdata, io_iterator_t iterator) { iterator_reference_t *reference = userdata; io_service_t intf; while (reference->keepRunning && (intf = IOIteratorNext(iterator)) != 0x0) { printer_interface_t printerIntf = usb_printer_interface_interface(intf); if (printerIntf != NULL) { UInt8 intfClass = 0, intfSubClass = 0; (*printerIntf)->GetInterfaceClass(printerIntf, &intfClass); (*printerIntf)->GetInterfaceSubClass(printerIntf, &intfSubClass); if (intfClass == kUSBPrintingInterfaceClass && intfSubClass == kUSBPrintingSubclass) reference->keepRunning = reference->callback(intf, printerIntf, userdata); (*printerIntf)->Release(printerIntf); } IOObjectRelease(intf); } if (reference->keepRunning && reference->callback) reference->keepRunning = reference->callback(IO_OBJECT_NULL, NULL, reference->userdata); if (!reference->keepRunning) CFRunLoopStop(CFRunLoopGetCurrent()); } /* * 'list_device_cb()' - list_device iterator callback. */ static Boolean list_device_cb(io_service_t obj, printer_interface_t printerIntf, void *refcon) { (void)refcon; if (obj != IO_OBJECT_NULL) { CFStringRef deviceIDString = NULL; CFStringRef make = NULL; CFStringRef model = NULL; CFStringRef serial = NULL; UInt32 intfLocation; deviceIDString = copy_printer_interface_deviceid(printerIntf, 0); if (deviceIDString == NULL) goto list_device_done; make = deviceIDCopyManufacturer(deviceIDString); model = deviceIDCopyModel(deviceIDString); serial = deviceIDCopySerialNumber(deviceIDString); char uristr[1024], makestr[1024], modelstr[1024], serialstr[1024]; char optionsstr[1024], idstr[1024], make_modelstr[1024]; CFStringGetCString(deviceIDString, idstr, sizeof(idstr), kCFStringEncodingUTF8); backendGetMakeModel(idstr, make_modelstr, sizeof(make_modelstr)); modelstr[0] = '/'; if (make == NULL || !CFStringGetCString(make, makestr, sizeof(makestr), kCFStringEncodingUTF8)) strlcpy(makestr, "Unknown", sizeof(makestr)); if (model == NULL || !CFStringGetCString(model, &modelstr[1], sizeof(modelstr)-1, kCFStringEncodingUTF8)) strlcpy(modelstr + 1, "Printer", sizeof(modelstr) - 1); optionsstr[0] = '\0'; if (serial != NULL && CFStringGetCString(serial, serialstr, sizeof(serialstr), kCFStringEncodingUTF8)) snprintf(optionsstr, sizeof(optionsstr), "?serial=%s", serialstr); else if ((*printerIntf)->GetLocationID(printerIntf, &intfLocation) == kIOReturnSuccess) snprintf(optionsstr, sizeof(optionsstr), "?location=%x", (unsigned)intfLocation); httpAssembleURI(HTTP_URI_CODING_ALL, uristr, sizeof(uristr), "usb", NULL, makestr, 0, modelstr); strlcat(uristr, optionsstr, sizeof(uristr)); cupsBackendReport("direct", uristr, make_modelstr, make_modelstr, idstr, NULL); list_device_done: if (make != NULL) CFRelease(make); if (model != NULL) CFRelease(model); if (serial != NULL) CFRelease(serial); } return obj != IO_OBJECT_NULL; } /* * 'find_device_cb()' - print_device iterator callback. */ static Boolean find_device_cb(io_service_t obj, printer_interface_t printerIntf, void *refcon) { (void)refcon; Boolean keepLooking = true; if (obj != IO_OBJECT_NULL) { CFStringRef deviceIDString = NULL; CFStringRef make = NULL; CFStringRef model = NULL; CFStringRef serial = NULL; deviceIDString = copy_printer_interface_deviceid(printerIntf, 0); if (deviceIDString == NULL) goto find_device_done; make = deviceIDCopyManufacturer(deviceIDString); model = deviceIDCopyModel(deviceIDString); serial = deviceIDCopySerialNumber(deviceIDString); if (make && CFStringCompare(make, g.make, kCFCompareCaseInsensitive) == kCFCompareEqualTo) { if (model && CFStringCompare(model, g.model, kCFCompareCaseInsensitive) == kCFCompareEqualTo) { UInt8 intfAltSetting = 0, intfNumber = 0, intfProtocol = 0; UInt32 intfLocation = 0; (*printerIntf)->GetInterfaceProtocol(printerIntf, &intfProtocol); (*printerIntf)->GetAlternateSetting(printerIntf, &intfAltSetting); (*printerIntf)->GetInterfaceNumber(printerIntf, &intfNumber); (*printerIntf)->GetLocationID(printerIntf, &intfLocation); if (g.serial != NULL && CFStringGetLength(g.serial) > 0) { if (serial != NULL && CFStringCompare(serial, g.serial, kCFCompareCaseInsensitive) == kCFCompareEqualTo) { g.interfaceProtocol = intfProtocol; g.location = intfLocation; g.alternateSetting = intfAltSetting; if (intfProtocol != kUSBPrintingProtocolIPP) { g.printer_obj = obj; IOObjectRetain(obj); } keepLooking = (intfProtocol == kUSBPrintingProtocolIPP); } } else { if (g.printer_obj != 0) IOObjectRelease(g.printer_obj); g.location = intfLocation; g.alternateSetting = intfAltSetting; g.interfaceProtocol = intfProtocol; g.printer_obj = obj; IOObjectRetain(obj); if (g.location == 0 || g.location == intfLocation) keepLooking = false; } if (!keepLooking) g.interfaceNum = intfNumber; } } find_device_done: if (deviceIDString != NULL) CFRelease(deviceIDString); if (make != NULL) CFRelease(make); if (model != NULL) CFRelease(model); if (serial != NULL) CFRelease(serial); } else { keepLooking = (g.printer_obj == 0 && g.interfaceProtocol != kUSBPrintingProtocolIPP); if (obj == IO_OBJECT_NULL && keepLooking) { CFRunLoopTimerContext context = { 0, refcon, NULL, NULL, NULL }; CFRunLoopTimerRef timer = CFRunLoopTimerCreate(NULL, CFAbsoluteTimeGetCurrent() + 1.0, 10, 0x0, 0x0, status_timer_cb, &context); if (timer != NULL) { CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopDefaultMode); g.status_timer = timer; } } } if (!keepLooking && g.status_timer != NULL) { fputs("STATE: -offline-report\n", stderr); _cupsLangPrintFilter(stderr, "INFO", _("The printer is now online.")); CFRunLoopRemoveTimer(CFRunLoopGetCurrent(), g.status_timer, kCFRunLoopDefaultMode); CFRelease(g.status_timer); g.status_timer = NULL; } return keepLooking; } static CFStringRef deviceIDCopySerialNumber(CFStringRef deviceID) { CFStringRef serialKeys[] = { CFSTR("SN:"), CFSTR("SERN:"), NULL }; return copy_value_for_key(deviceID, serialKeys); } static CFStringRef deviceIDCopyModel(CFStringRef deviceID) { CFStringRef modelKeys[] = { CFSTR("MDL:"), CFSTR("MODEL:"), NULL }; return copy_value_for_key(deviceID, modelKeys); } static CFStringRef deviceIDCopyManufacturer(CFStringRef deviceID) { CFStringRef makeKeys[] = { CFSTR("MFG:"), CFSTR("MANUFACTURER:"), NULL }; return copy_value_for_key(deviceID, makeKeys); } /* * 'status_timer_cb()' - Status timer callback. */ static void status_timer_cb(CFRunLoopTimerRef timer, void *info) { (void)timer; (void)info; fputs("STATE: +offline-report\n", stderr); _cupsLangPrintFilter(stderr, "INFO", _("The printer is offline.")); if (getenv("CLASS") != NULL) { /* * If the CLASS environment variable is set, the job was submitted * to a class and not to a specific queue. In this case, we want * to abort immediately so that the job can be requeued on the next * available printer in the class. * * Sleep 5 seconds to keep the job from requeuing too rapidly... */ sleep(5); exit(CUPS_BACKEND_FAILED); } } #pragma mark - /* * 'load_classdriver()' - Load a classdriver. */ static kern_return_t load_classdriver(CFStringRef driverPath, printer_interface_t interface, classdriver_t ***printerDriver) { kern_return_t kr = kUSBPrinterClassDeviceNotOpen; classdriver_t **driver = NULL; CFStringRef bundle = driverPath ? driverPath : kUSBGenericTOPrinterClassDriver; char bundlestr[1024]; /* Bundle path */ CFURLRef url; /* URL for driver */ CFPlugInRef plugin = NULL; /* Plug-in address */ CFStringGetCString(bundle, bundlestr, sizeof(bundlestr), kCFStringEncodingUTF8); /* * Validate permissions for the class driver... */ _cups_fc_result_t result = _cupsFileCheck(bundlestr, _CUPS_FILE_CHECK_DIRECTORY, 1, Iterating ? NULL : _cupsFileCheckFilter, NULL); if (result && driverPath) return (load_classdriver(NULL, interface, printerDriver)); else if (result) return (kr); /* * Try loading the class driver... */ url = CFURLCreateWithFileSystemPath(NULL, bundle, kCFURLPOSIXPathStyle, true); if (url) { plugin = CFPlugInCreate(NULL, url); CFRelease(url); } else plugin = NULL; if (plugin) { CFArrayRef factories = CFPlugInFindFactoriesForPlugInTypeInPlugIn(kUSBPrinterClassTypeID, plugin); if (factories != NULL && CFArrayGetCount(factories) > 0) { CFUUIDRef factoryID = CFArrayGetValueAtIndex(factories, 0); IUnknownVTbl **iunknown = CFPlugInInstanceCreate(NULL, factoryID, kUSBPrinterClassTypeID); if (iunknown != NULL) { kr = (*iunknown)->QueryInterface(iunknown, CFUUIDGetUUIDBytes(kUSBPrinterClassInterfaceID), (LPVOID *)&driver); if (kr == kIOReturnSuccess && driver != NULL) { classdriver_t **genericDriver = NULL; if (driverPath != NULL && CFStringCompare(driverPath, kUSBGenericTOPrinterClassDriver, 0) != kCFCompareEqualTo) kr = load_classdriver(NULL, interface, &genericDriver); if (kr == kIOReturnSuccess) { (*driver)->interface = interface; (*driver)->Initialize(driver, genericDriver); (*driver)->plugin = plugin; (*driver)->interface = interface; *printerDriver = driver; } } (*iunknown)->Release(iunknown); } CFRelease(factories); } } fprintf(stderr, "DEBUG: load_classdriver(%s) (kr:0x%08x)\n", bundlestr, (int)kr); return (kr); } /* * 'unload_classdriver()' - Unload a classdriver. */ static kern_return_t unload_classdriver(classdriver_t ***classdriver) { if (*classdriver != NULL) { (**classdriver)->Release(*classdriver); *classdriver = NULL; } return kIOReturnSuccess; } /* * 'load_printerdriver()' - Load vendor's classdriver. * * If driverBundlePath is not NULL on return it is the callers responsbility to release it! */ static kern_return_t load_printerdriver(CFStringRef *driverBundlePath) { IOCFPlugInInterface **iodev = NULL; SInt32 score; kern_return_t kr; printer_interface_t interface; HRESULT res; kr = IOCreatePlugInInterfaceForService(g.printer_obj, kIOUSBInterfaceUserClientTypeID, kIOCFPlugInInterfaceID, &iodev, &score); if (kr == kIOReturnSuccess) { if ((res = (*iodev)->QueryInterface(iodev, USB_INTERFACE_KIND, (LPVOID *) &interface)) == noErr) { *driverBundlePath = IORegistryEntryCreateCFProperty(g.printer_obj, kUSBClassDriverProperty, NULL, kNilOptions); g.use_generic_class_driver = (*driverBundlePath == NULL || (CFStringCompare(*driverBundlePath, kUSBGenericTOPrinterClassDriver, 0x0) == kCFCompareEqualTo)); kr = load_classdriver(*driverBundlePath, interface, &g.classdriver); if (kr != kIOReturnSuccess) (*interface)->Release(interface); } IODestroyPlugInInterface(iodev); } return kr; } static printer_interface_t usb_printer_interface_interface(io_service_t usbClass) { printer_interface_t intf = NULL; IOCFPlugInInterface **plugin = NULL; SInt32 score; int kr = IOCreatePlugInInterfaceForService(usbClass, kIOUSBInterfaceUserClientTypeID, kIOCFPlugInInterfaceID, &plugin, &score); if (kr == kIOReturnSuccess) { (*plugin)->QueryInterface(plugin, USB_INTERFACE_KIND, (LPVOID *)&intf); IODestroyPlugInInterface(plugin); } return intf; } static CFStringRef copy_printer_interface_deviceid(printer_interface_t printer, UInt8 alternateSetting) { // I have tried to make this function as neat as I can, but the possibility of needing to resend // a request to get the entire string makes it hideous... // // We package the job of sending a request up into the block (^sendRequest), which takes the size // it should allocate for the message buffer. It frees the current buffer if one is set and // allocates one of the specified size, then performs the request. We can then easily retry by // calling the block again if we fail to get the whole string the first time around. #define kUSBPrintClassGetDeviceID 0 #define kDefaultNoDataTimeout 5000L #define pack_device_id_wIndex(intf, alt) ((UInt16)((((UInt16)(intf)) << 8) | ((UInt8)(alt)))) if (printer == NULL) return NULL; IOReturn err = kIOReturnError; UInt8 configurationIndex = 0; UInt8 interfaceNumber = 0; size_t bufferLength = 256; CFStringRef ret = NULL; if ((*printer)->GetConfigurationValue( printer, &configurationIndex) == kIOReturnSuccess && (*printer)->GetInterfaceNumber( printer, &interfaceNumber) == kIOReturnSuccess) { __block IOUSBDevRequestTO request; IOReturn (^sendRequest)(size_t) = ^ (size_t size) { if (request.pData) { free(request.pData); request.wLength = 0; request.pData = NULL; } IOReturn berr = kIOReturnError; char *buffer = malloc(size); if (buffer == NULL) return kIOReturnNoMemory; request.wLength = HostToUSBWord(size); request.pData = buffer; berr = (*printer)->ControlRequestTO(printer, (UInt8)0, &request); return berr; }; /* This request takes the 0 based configuration index. IOKit returns a 1 based configuration index */ configurationIndex -= 1; bzero(&request, sizeof(request)); request.bmRequestType = USBmakebmRequestType(kUSBIn, kUSBClass, kUSBInterface); request.bRequest = kUSBPrintClassGetDeviceID; request.wValue = HostToUSBWord(configurationIndex); request.wIndex = HostToUSBWord(pack_device_id_wIndex(interfaceNumber, alternateSetting)); request.noDataTimeout = kDefaultNoDataTimeout; request.completionTimeout = 0; // Copying behavior from Generic Class Driver err = sendRequest(bufferLength); if (err == kIOReturnSuccess && request.wLenDone > 1) { UInt16 actualLength = OSSwapBigToHostInt16(*((UInt16 *)request.pData)); if (actualLength > 2 && actualLength <= bufferLength - 2) { ret = CFStringCreateWithBytes(NULL, (const UInt8 *) &request.pData[2], actualLength - 2, kCFStringEncodingUTF8, false); } else if (actualLength > 2) { err = sendRequest(actualLength); if (err == kIOReturnSuccess && request.wLenDone > 0) { actualLength = OSSwapBigToHostInt16(*((UInt16 *)request.pData)); ret = CFStringCreateWithBytes(NULL, (const UInt8 *) &request.pData[2], actualLength - 2, kCFStringEncodingUTF8, false); } } } if (request.pData) free(request.pData); } CFStringRef manufacturer = deviceIDCopyManufacturer(ret); CFStringRef model = deviceIDCopyModel(ret); CFStringRef serial = deviceIDCopySerialNumber(ret); if (manufacturer == NULL || serial == NULL || model == NULL) { IOUSBDevRequestTO request; IOUSBDeviceDescriptor desc; bzero(&request, sizeof(request)); request.bmRequestType = USBmakebmRequestType( kUSBIn, kUSBStandard, kUSBDevice ); request.bRequest = kUSBRqGetDescriptor; request.wValue = kUSBDeviceDesc << 8; request.wIndex = 0; request.wLength = sizeof(desc); request.pData = &desc; request.completionTimeout = 0; request.noDataTimeout = 60L; err = (*printer)->ControlRequestTO(printer, 0, &request); if (err == kIOReturnSuccess) { CFMutableStringRef extras = CFStringCreateMutable(NULL, 0); if (manufacturer == NULL) { manufacturer = copy_printer_interface_indexed_description(printer, desc.iManufacturer, kUSBLanguageEnglish); if (manufacturer && CFStringGetLength(manufacturer) > 0) CFStringAppendFormat(extras, NULL, CFSTR("MFG:%@;"), manufacturer); } if (model == NULL) { model = copy_printer_interface_indexed_description(printer, desc.iProduct, kUSBLanguageEnglish); if (model && CFStringGetLength(model) > 0) CFStringAppendFormat(extras, NULL, CFSTR("MDL:%@;"), model); } if (serial == NULL && desc.iSerialNumber != 0) { serial = copy_printer_interface_indexed_description(printer, desc.iSerialNumber, kUSBLanguageEnglish); if (serial && CFStringGetLength(serial) > 0) CFStringAppendFormat(extras, NULL, CFSTR("SERN:%@;"), serial); } if (ret != NULL) { CFStringAppend(extras, ret); CFRelease(ret); ret = extras; } else { ret = extras; } } } if (ret != NULL) { /* Remove special characters from the serial number */ CFRange range = (serial != NULL ? CFStringFind(serial, CFSTR("+"), 0) : CFRangeMake(0, 0)); if (range.length == 1) { range = CFStringFind(ret, serial, 0); CFMutableStringRef deviceIDString = CFStringCreateMutableCopy(NULL, 0, ret); CFRelease(ret); ret = deviceIDString; CFStringFindAndReplace(deviceIDString, CFSTR("+"), CFSTR(""), range, 0); } } if (manufacturer != NULL) CFRelease(manufacturer); if (model != NULL) CFRelease(model); if (serial != NULL) CFRelease(serial); if (ret != NULL && CFStringGetLength(ret) == 0) { CFRelease(ret); return NULL; } return ret; } static CFStringRef copy_printer_interface_indexed_description(printer_interface_t printer, UInt8 index, UInt16 language) { IOReturn err; UInt8 description[256]; // Max possible descriptor length IOUSBDevRequestTO request; bzero(description, 2); request.bmRequestType = USBmakebmRequestType(kUSBIn, kUSBStandard, kUSBDevice); request.bRequest = kUSBRqGetDescriptor; request.wValue = (kUSBStringDesc << 8) | index; request.wIndex = language; request.wLength = 2; request.pData = &description; request.completionTimeout = 0; request.noDataTimeout = 60L; err = (*printer)->ControlRequestTO(printer, 0, &request); if (err != kIOReturnSuccess && err != kIOReturnOverrun) { bzero(description, request.wLength); // Let's try again full length. Here's why: // On USB 2.0 controllers, we will not get an overrun error. We just get a "babble" error // and no valid data. So, if we ask for the max size, we will either get it, or we'll get an underrun. // It looks like we get it w/out an underrun request.bmRequestType = USBmakebmRequestType(kUSBIn, kUSBStandard, kUSBDevice); request.bRequest = kUSBRqGetDescriptor; request.wValue = (kUSBStringDesc << 8) | index; request.wIndex = language; request.wLength = sizeof description; request.pData = &description; request.completionTimeout = 0; request.noDataTimeout = 60L; err = (*printer)->ControlRequestTO(printer, 0, &request); if (err != kIOReturnSuccess && err != kIOReturnUnderrun) return NULL; } unsigned int length = description[0]; if (length == 0) return CFStringCreateWithCString(NULL, "", kCFStringEncodingUTF8); if (description[1] != kUSBStringDesc) return NULL; request.bmRequestType = USBmakebmRequestType(kUSBIn, kUSBStandard, kUSBDevice); request.bRequest = kUSBRqGetDescriptor; request.wValue = (kUSBStringDesc << 8) | index; request.wIndex = language; bzero(description, length); request.wLength = (UInt16)length; request.pData = &description; request.completionTimeout = 0; request.noDataTimeout = 60L; err = (*printer)->ControlRequestTO(printer, 0, &request); if (err != kIOReturnSuccess) return NULL; if (description[1] != kUSBStringDesc) return NULL; if ((description[0] & 1) != 0) description[0] &= 0xfe; char buffer[258] = {}; unsigned int maxLength = sizeof buffer; if (description[0] > 1) { length = (description[0]-2)/2; if (length > maxLength - 1) length = maxLength -1; for (unsigned i = 0; i < length; i++) buffer[i] = (char) description[2*i+2]; buffer[length] = 0; } return CFStringCreateWithCString(NULL, buffer, kCFStringEncodingUTF8); } /* * 'registry_open()' - Open a connection to the printer. */ static kern_return_t registry_open(CFStringRef *driverBundlePath) { g.bidi_flag = 0; /* 0=unidirectional */ kern_return_t kr = load_printerdriver(driverBundlePath); if (kr != kIOReturnSuccess) kr = -2; if (g.classdriver != NULL) { (*g.classdriver)->interfaceNumber = g.interfaceNum; kr = (*g.classdriver)->Open(g.classdriver, g.location, kUSBPrintingProtocolBidirectional); if (kr != kIOReturnSuccess || (*g.classdriver)->interface == NULL) { kr = (*g.classdriver)->Open(g.classdriver, g.location, kUSBPrintingProtocolUnidirectional); if (kr == kIOReturnSuccess) { if ((*g.classdriver)->interface == NULL) { (*g.classdriver)->Close(g.classdriver); kr = -1; } } } else g.bidi_flag = 1; /* 1=bidirectional */ } if (kr != kIOReturnSuccess) unload_classdriver(&g.classdriver); return kr; } /* * 'registry_close()' - Close the connection to the printer. */ static kern_return_t registry_close(void) { if (g.classdriver != NULL) (*g.classdriver)->Close(g.classdriver); unload_classdriver(&g.classdriver); return kIOReturnSuccess; } #pragma mark - /* * 'copy_value_for_key()' - Copy value string associated with a key. */ static CFStringRef copy_value_for_key(CFStringRef deviceID, CFStringRef *keys) { CFStringRef value = NULL; CFArrayRef kvPairs = deviceID != NULL ? CFStringCreateArrayBySeparatingStrings(NULL, deviceID, CFSTR(";")) : NULL; CFIndex max = kvPairs != NULL ? CFArrayGetCount(kvPairs) : 0; CFIndex idx = 0; while (idx < max && value == NULL) { CFStringRef kvpair = CFArrayGetValueAtIndex(kvPairs, idx); CFIndex idxx = 0; while (keys[idxx] != NULL && value == NULL) { CFRange range = CFStringFind(kvpair, keys[idxx], kCFCompareCaseInsensitive); if (range.length != -1) { if (range.location != 0) { CFMutableStringRef theString = CFStringCreateMutableCopy(NULL, 0, kvpair); CFStringTrimWhitespace(theString); range = CFStringFind(theString, keys[idxx], kCFCompareCaseInsensitive); if (range.location == 0) value = CFStringCreateWithSubstring(NULL, theString, CFRangeMake(range.length, CFStringGetLength(theString) - range.length)); CFRelease(theString); } else { CFStringRef theString = CFStringCreateWithSubstring(NULL, kvpair, CFRangeMake(range.length, CFStringGetLength(kvpair) - range.length)); CFMutableStringRef theString2 = CFStringCreateMutableCopy(NULL, 0, theString); CFRelease(theString); CFStringTrimWhitespace(theString2); value = theString2; } } idxx++; } idx++; } if (kvPairs != NULL) CFRelease(kvPairs); return value; } /* * 'cfstr_create_trim()' - Create CFString and trim whitespace characters. */ CFStringRef cfstr_create_trim(const char *cstr) { CFStringRef cfstr; CFMutableStringRef cfmutablestr = NULL; if ((cfstr = CFStringCreateWithCString(NULL, cstr, kCFStringEncodingUTF8)) != NULL) { if ((cfmutablestr = CFStringCreateMutableCopy(NULL, 1024, cfstr)) != NULL) CFStringTrimWhitespace(cfmutablestr); CFRelease(cfstr); } return (CFStringRef) cfmutablestr; } #pragma mark - /* * 'parse_options()' - Parse URI options. */ static void parse_options(char *options, char *serial, int serial_size, UInt32 *location, Boolean *wait_eof) { char sep, /* Separator character */ *name, /* Name of option */ *value; /* Value of option */ if (serial) *serial = '\0'; if (location) *location = 0; if (!options) return; while (*options) { /* * Get the name... */ name = options; while (*options && *options != '=' && *options != '+' && *options != '&') options ++; if ((sep = *options) != '\0') *options++ = '\0'; if (sep == '=') { /* * Get the value... */ value = options; while (*options && *options != '+' && *options != '&') options ++; if (*options) *options++ = '\0'; } else value = (char *)""; /* * Process the option... */ if (!_cups_strcasecmp(name, "waiteof")) { if (!_cups_strcasecmp(value, "on") || !_cups_strcasecmp(value, "yes") || !_cups_strcasecmp(value, "true")) *wait_eof = true; else if (!_cups_strcasecmp(value, "off") || !_cups_strcasecmp(value, "no") || !_cups_strcasecmp(value, "false")) *wait_eof = false; else _cupsLangPrintFilter(stderr, "WARNING", _("Boolean expected for waiteof option \"%s\"."), value); } else if (!_cups_strcasecmp(name, "serial")) strlcpy(serial, value, serial_size); else if (!_cups_strcasecmp(name, "location") && location) *location = (UInt32)strtoul(value, NULL, 16); } } /*! * @function setup_cfLanguage * @abstract Convert the contents of the CUPS 'APPLE_LANGUAGE' environment * variable into a one element CF array of languages. * * @discussion Each submitted job comes with a natural language. CUPS passes * that language in an environment variable. We take that language * and jam it into the AppleLanguages array so that CF will use * it when reading localized resources. We need to do this before * any CF code reads and caches the languages array, so this function * should be called early in main() */ static void setup_cfLanguage(void) { CFStringRef lang[1] = {NULL}; CFArrayRef langArray = NULL; const char *requestedLang = NULL; if ((requestedLang = getenv("APPLE_LANGUAGE")) == NULL) requestedLang = getenv("LANG"); if (requestedLang != NULL) { lang[0] = CFStringCreateWithCString(kCFAllocatorDefault, requestedLang, kCFStringEncodingUTF8); langArray = CFArrayCreate(kCFAllocatorDefault, (const void **)lang, sizeof(lang) / sizeof(lang[0]), &kCFTypeArrayCallBacks); CFPreferencesSetValue(CFSTR("AppleLanguages"), langArray, kCFPreferencesCurrentApplication, kCFPreferencesAnyUser, kCFPreferencesAnyHost); fprintf(stderr, "DEBUG: usb: AppleLanguages=\"%s\"\n", requestedLang); CFRelease(lang[0]); CFRelease(langArray); } else fputs("DEBUG: usb: LANG and APPLE_LANGUAGE environment variables missing.\n", stderr); } #pragma mark - #if defined(__i386__) || defined(__x86_64__) /*! * @function run_legacy_backend * * @abstract Starts child backend process running as a ppc or i386 executable. * * @result Never returns; always calls exit(). * * @discussion */ static void run_legacy_backend(int argc, char *argv[], int fd) { int i; int exitstatus = 0; int childstatus; pid_t waitpid_status; char *my_argv[32]; char *usb_legacy_status; /* * If we're running as x86_64 or i386 and couldn't load the class driver * (because it's ppc or i386), then try to re-exec ourselves in ppc or i386 * mode to try again. If we don't have a ppc or i386 architecture we may be * running with the same architecture again so guard against this by setting * and testing an environment variable... */ # ifdef __x86_64__ usb_legacy_status = getenv("USB_I386_STATUS"); # else usb_legacy_status = getenv("USB_PPC_STATUS"); # endif /* __x86_64__ */ if (!usb_legacy_status) { /* * Setup a SIGTERM handler then block it before forking... */ int err; /* posix_spawn result */ struct sigaction action; /* POSIX signal action */ sigset_t newmask, /* New signal mask */ oldmask; /* Old signal mask */ char usbpath[1024]; /* Path to USB backend */ const char *cups_serverbin;/* Path to CUPS binaries */ memset(&action, 0, sizeof(action)); sigaddset(&action.sa_mask, SIGTERM); action.sa_handler = sigterm_handler; sigaction(SIGTERM, &action, NULL); sigemptyset(&newmask); sigaddset(&newmask, SIGTERM); sigprocmask(SIG_BLOCK, &newmask, &oldmask); /* * Set the environment variable... */ # ifdef __x86_64__ setenv("USB_I386_STATUS", "1", false); # else setenv("USB_PPC_STATUS", "1", false); # endif /* __x86_64__ */ /* * Tell the kernel to use the specified CPU architecture... */ # ifdef __x86_64__ cpu_type_t cpu = CPU_TYPE_I386; # else cpu_type_t cpu = CPU_TYPE_POWERPC; # endif /* __x86_64__ */ size_t ocount = 1; posix_spawnattr_t attrs; if (!posix_spawnattr_init(&attrs)) { posix_spawnattr_setsigdefault(&attrs, &oldmask); if (posix_spawnattr_setbinpref_np(&attrs, 1, &cpu, &ocount) || ocount != 1) { # ifdef __x86_64__ perror("DEBUG: Unable to set binary preference to i386"); # else perror("DEBUG: Unable to set binary preference to ppc"); # endif /* __x86_64__ */ _cupsLangPrintFilter(stderr, "ERROR", _("Unable to use legacy USB class driver.")); exit(CUPS_BACKEND_STOP); } } /* * Set up the arguments and call posix_spawn... */ if ((cups_serverbin = getenv("CUPS_SERVERBIN")) == NULL) cups_serverbin = CUPS_SERVERBIN; snprintf(usbpath, sizeof(usbpath), "%s/backend/usb", cups_serverbin); for (i = 0; i < argc && i < (int)(sizeof(my_argv) / sizeof(my_argv[0])) - 1; i ++) my_argv[i] = argv[i]; my_argv[i] = NULL; if ((err = posix_spawn(&child_pid, usbpath, NULL, &attrs, my_argv, environ)) != 0) { fprintf(stderr, "DEBUG: Unable to exec %s: %s\n", usbpath, strerror(err)); _cupsLangPrintFilter(stderr, "ERROR", _("Unable to use legacy USB class driver.")); exit(CUPS_BACKEND_STOP); } /* * Unblock signals... */ sigprocmask(SIG_SETMASK, &oldmask, NULL); /* * Close the fds we won't be using then wait for the child backend to exit. */ close(fd); close(1); fprintf(stderr, "DEBUG: Started usb(legacy) backend (PID %d)\n", (int)child_pid); while ((waitpid_status = waitpid(child_pid, &childstatus, 0)) == (pid_t)-1 && errno == EINTR) usleep(1000); if (WIFSIGNALED(childstatus)) { exitstatus = CUPS_BACKEND_STOP; fprintf(stderr, "DEBUG: usb(legacy) backend %d crashed on signal %d\n", child_pid, WTERMSIG(childstatus)); } else { if ((exitstatus = WEXITSTATUS(childstatus)) != 0) fprintf(stderr, "DEBUG: usb(legacy) backend %d stopped with status %d\n", child_pid, exitstatus); else fprintf(stderr, "DEBUG: usb(legacy) backend %d exited with no errors\n", child_pid); } } else { fputs("DEBUG: usb(legacy) backend running native again\n", stderr); exitstatus = CUPS_BACKEND_STOP; } exit(exitstatus); } #endif /* __i386__ || __x86_64__ */ /* * 'sigterm_handler()' - SIGTERM handler. */ static void sigterm_handler(int sig) /* I - Signal */ { #if defined(__i386__) || defined(__x86_64__) /* * If we started a child process pass the signal on to it... */ if (child_pid) { /* * If we started a child process pass the signal on to it... */ int status; kill(child_pid, sig); while (waitpid(child_pid, &status, 0) < 0 && errno == EINTR); if (WIFEXITED(status)) _exit(WEXITSTATUS(status)); else if (status == SIGTERM || status == SIGKILL) _exit(0); else { write(2, "DEBUG: Child crashed.\n", 22); _exit(CUPS_BACKEND_STOP); } } #endif /* __i386__ || __x86_64__ */ } /* * 'sigquit_handler()' - SIGQUIT handler. */ static void sigquit_handler(int sig, siginfo_t *si, void *unused) { char *path; char pathbuf[PROC_PIDPATHINFO_MAXSIZE]; static char msgbuf[256] = ""; (void)sig; (void)unused; if (proc_pidpath(si->si_pid, pathbuf, sizeof(pathbuf)) > 0 && (path = basename(pathbuf)) != NULL) snprintf(msgbuf, sizeof(msgbuf), "SIGQUIT sent by %s(%d)", path, (int)si->si_pid); else snprintf(msgbuf, sizeof(msgbuf), "SIGQUIT sent by PID %d", (int)si->si_pid); CRSetCrashLogMessage(msgbuf); abort(); } #ifdef PARSE_PS_ERRORS /* * 'next_line()' - Find the next line in a buffer. */ static const char *next_line (const char *buffer) { const char *cptr, *lptr = NULL; for (cptr = buffer; *cptr && lptr == NULL; cptr++) if (*cptr == '\n' || *cptr == '\r') lptr = cptr; return lptr; } /* * 'parse_pserror()' - Scan the backchannel data for postscript errors. */ static void parse_pserror(char *sockBuffer, int len) { static char gErrorBuffer[1024] = ""; static char *gErrorBufferPtr = gErrorBuffer; static char *gErrorBufferEndPtr = gErrorBuffer + sizeof(gErrorBuffer); char *pCommentBegin, *pCommentEnd, *pLineEnd; char *logLevel; char logstr[1024]; int logstrlen; if (gErrorBufferPtr + len > gErrorBufferEndPtr - 1) gErrorBufferPtr = gErrorBuffer; if (len > sizeof(gErrorBuffer) - 1) len = sizeof(gErrorBuffer) - 1; memcpy(gErrorBufferPtr, (const void *)sockBuffer, len); gErrorBufferPtr += len; *(gErrorBufferPtr + 1) = '\0'; pLineEnd = (char *)next_line((const char *)gErrorBuffer); while (pLineEnd != NULL) { *pLineEnd++ = '\0'; pCommentBegin = strstr(gErrorBuffer,"%%["); pCommentEnd = strstr(gErrorBuffer, "]%%"); if (pCommentBegin != gErrorBuffer && pCommentEnd != NULL) { pCommentEnd += 3; /* Skip past "]%%" */ *pCommentEnd = '\0'; /* There's always room for the nul */ if (_cups_strncasecmp(pCommentBegin, "%%[ Error:", 10) == 0) logLevel = "DEBUG"; else if (_cups_strncasecmp(pCommentBegin, "%%[ Flushing", 12) == 0) logLevel = "DEBUG"; else logLevel = "INFO"; if ((logstrlen = snprintf(logstr, sizeof(logstr), "%s: %s\n", logLevel, pCommentBegin)) >= sizeof(logstr)) { /* If the string was trucnated make sure it has a linefeed before the nul */ logstrlen = sizeof(logstr) - 1; logstr[logstrlen - 1] = '\n'; } write(STDERR_FILENO, logstr, logstrlen); } /* move everything over... */ strlcpy(gErrorBuffer, pLineEnd, sizeof(gErrorBuffer)); gErrorBufferPtr = gErrorBuffer; pLineEnd = (char *)next_line((const char *)gErrorBuffer); } } #endif /* PARSE_PS_ERRORS */ /* * 'soft_reset()' - Send a soft reset to the device. */ static void soft_reset(void) { fd_set input_set; /* Input set for select() */ struct timeval tv; /* Time value */ char buffer[2048]; /* Buffer */ struct timespec cond_timeout; /* pthread condition timeout */ /* * Send an abort once a second until the I/O lock is released by the main thread... */ pthread_mutex_lock(&g.readwrite_lock_mutex); while (g.readwrite_lock) { (*g.classdriver)->Abort(g.classdriver); gettimeofday(&tv, NULL); cond_timeout.tv_sec = tv.tv_sec + 1; cond_timeout.tv_nsec = tv.tv_usec * 1000; while (g.readwrite_lock) { if (pthread_cond_timedwait(&g.readwrite_lock_cond, &g.readwrite_lock_mutex, &cond_timeout) != 0) break; } } g.readwrite_lock = 1; pthread_mutex_unlock(&g.readwrite_lock_mutex); /* * Flush bytes waiting on print_fd... */ g.print_bytes = 0; FD_ZERO(&input_set); FD_SET(g.print_fd, &input_set); tv.tv_sec = 0; tv.tv_usec = 0; while (select(g.print_fd+1, &input_set, NULL, NULL, &tv) > 0) if (read(g.print_fd, buffer, sizeof(buffer)) <= 0) break; /* * Send the reset... */ (*g.classdriver)->SoftReset(g.classdriver, DEFAULT_TIMEOUT); /* * Release the I/O lock... */ pthread_mutex_lock(&g.readwrite_lock_mutex); g.readwrite_lock = 0; pthread_cond_signal(&g.readwrite_lock_cond); pthread_mutex_unlock(&g.readwrite_lock_mutex); } /* * 'get_device_id()' - Return IEEE-1284 device ID. */ static void get_device_id(cups_sc_status_t *status, char *data, int *datalen) { CFStringRef deviceIDString = NULL; if (g.printer_obj != IO_OBJECT_NULL) { printer_interface_t printerIntf = usb_printer_interface_interface(g.printer_obj); if (printerIntf) { deviceIDString = copy_printer_interface_deviceid(printerIntf, g.alternateSetting); (*printerIntf)->Release(printerIntf); } } if (deviceIDString) { if (CFStringGetCString(deviceIDString, data, *datalen, kCFStringEncodingUTF8)) *datalen = (int)strlen(data); else *datalen = 0; CFRelease(deviceIDString); } else { *datalen = 0; } *status = CUPS_SC_STATUS_OK; } cups-2.2.7/backend/usb-libusb.c000664 000765 000024 00000150042 13255074424 016757 0ustar00msweetstaff000000 000000 /* * LIBUSB interface code for CUPS. * * Copyright 2007-2015 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. 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 file is * missing or damaged, see the license at "http://www.cups.org/". */ /* * Include necessary headers... */ #include #include #include #include #include #include #include #include #include #include /* * WAIT_EOF_DELAY is number of seconds we'll wait for responses from * the printer after we've finished sending all the data */ #define WAIT_EOF 0 #define WAIT_EOF_DELAY 7 #define WAIT_SIDE_DELAY 3 #define DEFAULT_TIMEOUT 5000L /* * Local types... */ typedef struct usb_printer_s /**** USB Printer Data ****/ { struct libusb_device *device; /* Device info */ int conf, /* Configuration */ origconf, /* Original configuration */ iface, /* Interface */ altset, /* Alternate setting */ write_endp, /* Write endpoint */ read_endp, /* Read endpoint */ protocol, /* Protocol: 1 = Uni-di, 2 = Bi-di. */ usblp_attached, /* "usblp" kernel module attached? */ reset_after_job;/* Set to 1 by print_device() */ unsigned quirks; /* Quirks flags */ struct libusb_device_handle *handle; /* Open handle to device */ } usb_printer_t; typedef int (*usb_cb_t)(usb_printer_t *, const char *, const char *, const void *); typedef struct usb_globals_s /* Global USB printer information */ { usb_printer_t *printer; /* Printer */ pthread_mutex_t read_thread_mutex; pthread_cond_t read_thread_cond; int read_thread_stop; int read_thread_done; pthread_mutex_t readwrite_lock_mutex; pthread_cond_t readwrite_lock_cond; int readwrite_lock; int print_fd; /* File descriptor to print */ ssize_t print_bytes; /* Print bytes read */ int wait_eof; int drain_output; /* Drain all pending output */ int bidi_flag; /* 0=unidirectional, 1=bidirectional */ pthread_mutex_t sidechannel_thread_mutex; pthread_cond_t sidechannel_thread_cond; int sidechannel_thread_stop; int sidechannel_thread_done; } usb_globals_t; /* * Quirks: various printer quirks are handled by this structure and its flags. * * The quirks table used to be compiled into the backend but is now loaded from * one or more files in the /usr/share/cups/usb directory. */ #define USB_QUIRK_BLACKLIST 0x0001 /* Does not conform to the spec */ #define USB_QUIRK_NO_REATTACH 0x0002 /* After printing we cannot re-attach the usblp kernel module */ #define USB_QUIRK_SOFT_RESET 0x0004 /* After printing do a soft reset for clean-up */ #define USB_QUIRK_UNIDIR 0x0008 /* Requires unidirectional mode */ #define USB_QUIRK_USB_INIT 0x0010 /* Needs vendor USB init string */ #define USB_QUIRK_VENDOR_CLASS 0x0020 /* Descriptor uses vendor-specific Class or SubClass */ #define USB_QUIRK_DELAY_CLOSE 0x0040 /* Delay close */ #define USB_QUIRK_WHITELIST 0x0000 /* no quirks */ typedef struct usb_quirk_s /* USB "quirk" information */ { int vendor_id, /* Affected vendor ID */ product_id; /* Affected product ID or 0 for all */ unsigned quirks; /* Quirks bitfield */ } usb_quirk_t; /* * Globals... */ cups_array_t *all_quirks; /* Array of printer quirks */ usb_globals_t g = { 0 }; /* Globals */ libusb_device **all_list; /* List of connected USB devices */ /* * Local functions... */ static int close_device(usb_printer_t *printer); static int compare_quirks(usb_quirk_t *a, usb_quirk_t *b); static usb_printer_t *find_device(usb_cb_t cb, const void *data); static unsigned find_quirks(int vendor_id, int product_id); static int get_device_id(usb_printer_t *printer, char *buffer, size_t bufsize); static int list_cb(usb_printer_t *printer, const char *device_uri, const char *device_id, const void *data); static void load_quirks(void); static char *make_device_uri(usb_printer_t *printer, const char *device_id, char *uri, size_t uri_size); static int open_device(usb_printer_t *printer, int verbose); static int print_cb(usb_printer_t *printer, const char *device_uri, const char *device_id, const void *data); static void *read_thread(void *reference); static void *sidechannel_thread(void *reference); static void soft_reset(void); static int soft_reset_printer(usb_printer_t *printer); /* * 'list_devices()' - List the available printers. */ void list_devices(void) { load_quirks(); fputs("DEBUG: list_devices\n", stderr); find_device(list_cb, NULL); } /* * 'print_device()' - Print a file to a USB device. */ int /* O - Exit status */ print_device(const char *uri, /* I - Device URI */ const char *hostname, /* I - Hostname/manufacturer */ const char *resource, /* I - Resource/modelname */ char *options, /* I - Device options/serial number */ int print_fd, /* I - File descriptor to print */ int copies, /* I - Copies to print */ int argc, /* I - Number of command-line arguments (6 or 7) */ char *argv[]) /* I - Command-line arguments */ { int bytes; /* Bytes written */ ssize_t total_bytes; /* Total bytes written */ struct sigaction action; /* Actions for POSIX signals */ int status = CUPS_BACKEND_OK, /* Function results */ iostatus; /* Current IO status */ pthread_t read_thread_id, /* Read thread */ sidechannel_thread_id; /* Side-channel thread */ int have_sidechannel = 0, /* Was the side-channel thread started? */ have_backchannel = 0; /* Do we have a back channel? */ struct stat sidechannel_info; /* Side-channel file descriptor info */ unsigned char print_buffer[8192], /* Print data buffer */ *print_ptr; /* Pointer into print data buffer */ fd_set input_set; /* Input set for select() */ int nfds; /* Number of file descriptors */ struct timeval *timeout, /* Timeout pointer */ tv; /* Time value */ struct timespec cond_timeout; /* pthread condition timeout */ int num_opts; /* Number of options */ cups_option_t *opts; /* Options */ const char *val; /* Option value */ load_quirks(); /* * See if the side-channel descriptor is valid... */ have_sidechannel = !fstat(CUPS_SC_FD, &sidechannel_info) && S_ISSOCK(sidechannel_info.st_mode); g.wait_eof = WAIT_EOF; /* * Connect to the printer... */ fprintf(stderr, "DEBUG: Printing on printer with URI: %s\n", uri); while ((g.printer = find_device(print_cb, uri)) == NULL) { _cupsLangPrintFilter(stderr, "INFO", _("Waiting for printer to become available.")); sleep(5); } g.print_fd = print_fd; /* * Some devices need a reset after finishing a job, these devices are * marked with the USB_QUIRK_SOFT_RESET quirk. */ g.printer->reset_after_job = (g.printer->quirks & USB_QUIRK_SOFT_RESET ? 1 : 0); /* * If we are printing data from a print driver on stdin, ignore SIGTERM * so that the driver can finish out any page data, e.g. to eject the * current page. We only do this for stdin printing as otherwise there * is no way to cancel a raw print job... */ if (!print_fd) { memset(&action, 0, sizeof(action)); sigemptyset(&action.sa_mask); action.sa_handler = SIG_IGN; sigaction(SIGTERM, &action, NULL); } /* * Start the side channel thread if the descriptor is valid... */ pthread_mutex_init(&g.readwrite_lock_mutex, NULL); pthread_cond_init(&g.readwrite_lock_cond, NULL); g.readwrite_lock = 1; if (have_sidechannel) { g.sidechannel_thread_stop = 0; g.sidechannel_thread_done = 0; pthread_cond_init(&g.sidechannel_thread_cond, NULL); pthread_mutex_init(&g.sidechannel_thread_mutex, NULL); if (pthread_create(&sidechannel_thread_id, NULL, sidechannel_thread, NULL)) { fprintf(stderr, "DEBUG: Fatal USB error.\n"); _cupsLangPrintFilter(stderr, "ERROR", _("There was an unrecoverable USB error.")); fputs("DEBUG: Couldn't create side-channel thread.\n", stderr); close_device(g.printer); return (CUPS_BACKEND_STOP); } } /* * Debug mode: If option "usb-unidir" is given, always deactivate * backchannel */ num_opts = cupsParseOptions(argv[5], 0, &opts); val = cupsGetOption("usb-unidir", num_opts, opts); if (val && strcasecmp(val, "no") && strcasecmp(val, "off") && strcasecmp(val, "false")) { g.printer->read_endp = -1; fprintf(stderr, "DEBUG: Forced uni-directional communication " "via \"usb-unidir\" option.\n"); } /* * Debug mode: If option "usb-no-reattach" is given, do not re-attach * the usblp kernel module after the job has completed. */ val = cupsGetOption("usb-no-reattach", num_opts, opts); if (val && strcasecmp(val, "no") && strcasecmp(val, "off") && strcasecmp(val, "false")) { g.printer->usblp_attached = 0; fprintf(stderr, "DEBUG: Forced not re-attaching the usblp kernel module " "after the job via \"usb-no-reattach\" option.\n"); } /* * Get the read thread going... */ if (g.printer->read_endp != -1) { have_backchannel = 1; g.read_thread_stop = 0; g.read_thread_done = 0; pthread_cond_init(&g.read_thread_cond, NULL); pthread_mutex_init(&g.read_thread_mutex, NULL); if (pthread_create(&read_thread_id, NULL, read_thread, NULL)) { fprintf(stderr, "DEBUG: Fatal USB error.\n"); _cupsLangPrintFilter(stderr, "ERROR", _("There was an unrecoverable USB error.")); fputs("DEBUG: Couldn't create read thread.\n", stderr); close_device(g.printer); return (CUPS_BACKEND_STOP); } } else fprintf(stderr, "DEBUG: Uni-directional device/mode, back channel " "deactivated.\n"); /* * The main thread sends the print file... */ g.drain_output = 0; g.print_bytes = 0; total_bytes = 0; print_ptr = print_buffer; while (status == CUPS_BACKEND_OK && copies-- > 0) { _cupsLangPrintFilter(stderr, "INFO", _("Sending data to printer.")); if (print_fd != STDIN_FILENO) { fputs("PAGE: 1 1\n", stderr); lseek(print_fd, 0, SEEK_SET); } while (status == CUPS_BACKEND_OK) { FD_ZERO(&input_set); if (!g.print_bytes) FD_SET(print_fd, &input_set); /* * Calculate select timeout... * If we have data waiting to send timeout is 100ms. * else if we're draining print_fd timeout is 0. * else we're waiting forever... */ if (g.print_bytes) { tv.tv_sec = 0; tv.tv_usec = 100000; /* 100ms */ timeout = &tv; } else if (g.drain_output) { tv.tv_sec = 0; tv.tv_usec = 0; timeout = &tv; } else timeout = NULL; /* * I/O is unlocked around select... */ pthread_mutex_lock(&g.readwrite_lock_mutex); g.readwrite_lock = 0; pthread_cond_signal(&g.readwrite_lock_cond); pthread_mutex_unlock(&g.readwrite_lock_mutex); nfds = select(print_fd + 1, &input_set, NULL, NULL, timeout); /* * Reacquire the lock... */ pthread_mutex_lock(&g.readwrite_lock_mutex); while (g.readwrite_lock) pthread_cond_wait(&g.readwrite_lock_cond, &g.readwrite_lock_mutex); g.readwrite_lock = 1; pthread_mutex_unlock(&g.readwrite_lock_mutex); if (nfds < 0) { if (errno == EINTR && total_bytes == 0) { fputs("DEBUG: Received an interrupt before any bytes were " "written, aborting.\n", stderr); close_device(g.printer); return (CUPS_BACKEND_OK); } else if (errno != EAGAIN && errno != EINTR) { _cupsLangPrintFilter(stderr, "ERROR", _("Unable to read print data.")); perror("DEBUG: select"); close_device(g.printer); return (CUPS_BACKEND_FAILED); } } /* * If drain output has finished send a response... */ if (g.drain_output && !nfds && !g.print_bytes) { /* Send a response... */ cupsSideChannelWrite(CUPS_SC_CMD_DRAIN_OUTPUT, CUPS_SC_STATUS_OK, NULL, 0, 1.0); g.drain_output = 0; } /* * Check if we have print data ready... */ if (FD_ISSET(print_fd, &input_set)) { g.print_bytes = read(print_fd, print_buffer, sizeof(print_buffer)); if (g.print_bytes < 0) { /* * Read error - bail if we don't see EAGAIN or EINTR... */ if (errno != EAGAIN && errno != EINTR) { _cupsLangPrintFilter(stderr, "ERROR", _("Unable to read print data.")); perror("DEBUG: read"); close_device(g.printer); return (CUPS_BACKEND_FAILED); } g.print_bytes = 0; } else if (g.print_bytes == 0) { /* * End of file, break out of the loop... */ break; } print_ptr = print_buffer; fprintf(stderr, "DEBUG: Read %d bytes of print data...\n", (int)g.print_bytes); } if (g.print_bytes) { iostatus = libusb_bulk_transfer(g.printer->handle, g.printer->write_endp, print_buffer, g.print_bytes, &bytes, 0); /* * Ignore timeout errors, but retain the number of bytes written to * avoid sending duplicate data... */ if (iostatus == LIBUSB_ERROR_TIMEOUT) { fputs("DEBUG: Got USB transaction timeout during write.\n", stderr); iostatus = 0; } /* * If we've stalled, retry the write... */ else if (iostatus == LIBUSB_ERROR_PIPE) { fputs("DEBUG: Got USB pipe stalled during write.\n", stderr); iostatus = libusb_bulk_transfer(g.printer->handle, g.printer->write_endp, print_buffer, g.print_bytes, &bytes, 0); } /* * Retry a write after an aborted write since we probably just got * SIGTERM... */ else if (iostatus == LIBUSB_ERROR_INTERRUPTED) { fputs("DEBUG: Got USB return aborted during write.\n", stderr); iostatus = libusb_bulk_transfer(g.printer->handle, g.printer->write_endp, print_buffer, g.print_bytes, &bytes, 0); } if (iostatus) { /* * Write error - bail if we don't see an error we can retry... */ _cupsLangPrintFilter(stderr, "ERROR", _("Unable to send data to printer.")); fprintf(stderr, "DEBUG: libusb write operation returned %x.\n", iostatus); status = CUPS_BACKEND_FAILED; break; } else if (bytes > 0) { fprintf(stderr, "DEBUG: Wrote %d bytes of print data...\n", (int)bytes); g.print_bytes -= bytes; print_ptr += bytes; total_bytes += bytes; } } if (print_fd != 0 && status == CUPS_BACKEND_OK) fprintf(stderr, "DEBUG: Sending print file, " CUPS_LLFMT " bytes...\n", CUPS_LLCAST total_bytes); } } fprintf(stderr, "DEBUG: Sent " CUPS_LLFMT " bytes...\n", CUPS_LLCAST total_bytes); /* * Signal the side channel thread to exit... */ if (have_sidechannel) { close(CUPS_SC_FD); pthread_mutex_lock(&g.readwrite_lock_mutex); g.readwrite_lock = 0; pthread_cond_signal(&g.readwrite_lock_cond); pthread_mutex_unlock(&g.readwrite_lock_mutex); g.sidechannel_thread_stop = 1; pthread_mutex_lock(&g.sidechannel_thread_mutex); if (!g.sidechannel_thread_done) { gettimeofday(&tv, NULL); cond_timeout.tv_sec = tv.tv_sec + WAIT_SIDE_DELAY; cond_timeout.tv_nsec = tv.tv_usec * 1000; while (!g.sidechannel_thread_done) { if (pthread_cond_timedwait(&g.sidechannel_thread_cond, &g.sidechannel_thread_mutex, &cond_timeout) != 0) break; } } pthread_mutex_unlock(&g.sidechannel_thread_mutex); } /* * Signal the read thread to exit then wait 7 seconds for it to complete... */ if (have_backchannel) { g.read_thread_stop = 1; pthread_mutex_lock(&g.read_thread_mutex); if (!g.read_thread_done) { fputs("DEBUG: Waiting for read thread to exit...\n", stderr); gettimeofday(&tv, NULL); cond_timeout.tv_sec = tv.tv_sec + WAIT_EOF_DELAY; cond_timeout.tv_nsec = tv.tv_usec * 1000; while (!g.read_thread_done) { if (pthread_cond_timedwait(&g.read_thread_cond, &g.read_thread_mutex, &cond_timeout) != 0) break; } /* * If it didn't exit abort the pending read and wait an additional * second... */ if (!g.read_thread_done) { fputs("DEBUG: Read thread still active, aborting the pending read...\n", stderr); g.wait_eof = 0; gettimeofday(&tv, NULL); cond_timeout.tv_sec = tv.tv_sec + 1; cond_timeout.tv_nsec = tv.tv_usec * 1000; while (!g.read_thread_done) { if (pthread_cond_timedwait(&g.read_thread_cond, &g.read_thread_mutex, &cond_timeout) != 0) break; } } } pthread_mutex_unlock(&g.read_thread_mutex); } /* * Close the connection and input file and general clean up... */ if (g.printer->quirks & USB_QUIRK_DELAY_CLOSE) sleep(1); close_device(g.printer); /* * Clean up .... */ libusb_free_device_list(all_list, 1); libusb_exit(NULL); return (status); } /* * 'close_device()' - Close the connection to the USB printer. */ static int /* I - 0 on success, -1 on failure */ close_device(usb_printer_t *printer) /* I - Printer */ { struct libusb_device_descriptor devdesc; /* Current device descriptor */ struct libusb_config_descriptor *confptr; /* Pointer to current configuration */ if (printer->handle) { /* * Release interfaces before closing so that we know all data is written * to the device... */ int errcode; /* Return value of libusb function */ int number1, /* Interface number */ number2; /* Configuration number */ errcode = libusb_get_config_descriptor(printer->device, printer->conf, &confptr); if (errcode >= 0) { number1 = confptr->interface[printer->iface]. altsetting[printer->altset].bInterfaceNumber; libusb_release_interface(printer->handle, number1); number2 = confptr->bConfigurationValue; libusb_free_config_descriptor(confptr); /* * If we have changed the configuration from one valid configuration * to another, restore the old one */ if (printer->origconf > 0 && printer->origconf != number2) { fprintf(stderr, "DEBUG: Restoring USB device configuration: %d -> %d\n", number2, printer->origconf); if ((errcode = libusb_set_configuration(printer->handle, printer->origconf)) < 0) { if (errcode != LIBUSB_ERROR_BUSY) { errcode = libusb_get_device_descriptor (printer->device, &devdesc); if (errcode < 0) fprintf(stderr, "DEBUG: Failed to set configuration %d\n", printer->origconf); else fprintf(stderr, "DEBUG: Failed to set configuration %d for %04x:%04x\n", printer->origconf, devdesc.idVendor, devdesc.idProduct); } } } /* * Re-attach "usblp" kernel module if it was attached before using this * device */ if (printer->usblp_attached == 1) if (libusb_attach_kernel_driver(printer->handle, number1) < 0) { errcode = libusb_get_device_descriptor (printer->device, &devdesc); if (errcode < 0) fprintf(stderr, "DEBUG: Failed to re-attach \"usblp\" kernel module\n"); else fprintf(stderr, "DEBUG: Failed to re-attach \"usblp\" kernel module to " "%04x:%04x\n", devdesc.idVendor, devdesc.idProduct); } } else fprintf(stderr, "DEBUG: Failed to get configuration descriptor %d\n", printer->conf); /* * Reset the device to clean up after the job */ if (printer->reset_after_job == 1) { if ((errcode = libusb_reset_device(printer->handle)) < 0) fprintf(stderr, "DEBUG: Device reset failed, error code: %d\n", errcode); else fprintf(stderr, "DEBUG: Resetting printer.\n"); } /* * Close the interface and return... */ libusb_close(printer->handle); printer->handle = NULL; } return (0); } /* * 'compare_quirks()' - Compare two quirks entries. */ static int /* O - Result of comparison */ compare_quirks(usb_quirk_t *a, /* I - First quirk entry */ usb_quirk_t *b) /* I - Second quirk entry */ { int result; /* Result of comparison */ if ((result = b->vendor_id - a->vendor_id) == 0) result = b->product_id - a->product_id; return (result); } /* * 'find_device()' - Find or enumerate USB printers. */ static usb_printer_t * /* O - Found printer */ find_device(usb_cb_t cb, /* I - Callback function */ const void *data) /* I - User data for callback */ { libusb_device **list; /* List of connected USB devices */ libusb_device *device = NULL; /* Current device */ struct libusb_device_descriptor devdesc; /* Current device descriptor */ struct libusb_config_descriptor *confptr = NULL; /* Pointer to current configuration */ const struct libusb_interface *ifaceptr = NULL; /* Pointer to current interface */ const struct libusb_interface_descriptor *altptr = NULL; /* Pointer to current alternate setting */ const struct libusb_endpoint_descriptor *endpptr = NULL; /* Pointer to current endpoint */ ssize_t err = 0, /* Error code */ numdevs, /* number of connected devices */ i = 0; uint8_t conf, /* Current configuration */ iface, /* Current interface */ altset, /* Current alternate setting */ protocol, /* Current protocol */ endp, /* Current endpoint */ read_endp, /* Current read endpoint */ write_endp; /* Current write endpoint */ char device_id[1024],/* IEEE-1284 device ID */ device_uri[1024]; /* Device URI */ static usb_printer_t printer; /* Current printer */ /* * Initialize libusb... */ err = libusb_init(NULL); if (err) { fprintf(stderr, "DEBUG: Unable to initialize USB access via libusb, " "libusb error %i\n", (int)err); return (NULL); } numdevs = libusb_get_device_list(NULL, &list); fprintf(stderr, "DEBUG: libusb_get_device_list=%d\n", (int)numdevs); /* * Then loop through the devices it found... */ if (numdevs > 0) for (i = 0; i < numdevs; i++) { device = list[i]; /* * Ignore devices with no configuration data and anything that is not * a printer... */ if (libusb_get_device_descriptor(device, &devdesc) < 0) continue; if (!devdesc.bNumConfigurations || !devdesc.idVendor || !devdesc.idProduct) continue; printer.quirks = find_quirks(devdesc.idVendor, devdesc.idProduct); /* * Ignore blacklisted printers... */ if (printer.quirks & USB_QUIRK_BLACKLIST) continue; for (conf = 0; conf < devdesc.bNumConfigurations; conf ++) { if (libusb_get_config_descriptor(device, conf, &confptr) < 0) continue; for (iface = 0, ifaceptr = confptr->interface; iface < confptr->bNumInterfaces; iface ++, ifaceptr ++) { /* * Some printers offer multiple interfaces... */ protocol = 0; for (altset = 0, altptr = ifaceptr->altsetting; altset < ifaceptr->num_altsetting; altset ++, altptr ++) { /* * Currently we only support unidirectional and bidirectional * printers. Future versions of this code will support the * 1284.4 (packet mode) protocol as well. */ if (((altptr->bInterfaceClass != LIBUSB_CLASS_PRINTER || altptr->bInterfaceSubClass != 1) && ((printer.quirks & USB_QUIRK_VENDOR_CLASS) == 0)) || (altptr->bInterfaceProtocol != 1 && /* Unidirectional */ altptr->bInterfaceProtocol != 2) || /* Bidirectional */ altptr->bInterfaceProtocol < protocol) continue; if (printer.quirks & USB_QUIRK_VENDOR_CLASS) fprintf(stderr, "DEBUG: Printer does not report class 7 and/or " "subclass 1 but works as a printer anyway\n"); read_endp = 0xff; write_endp = 0xff; for (endp = 0, endpptr = altptr->endpoint; endp < altptr->bNumEndpoints; endp ++, endpptr ++) if ((endpptr->bmAttributes & LIBUSB_TRANSFER_TYPE_MASK) == LIBUSB_TRANSFER_TYPE_BULK) { if (endpptr->bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK) read_endp = endp; else write_endp = endp; } if (write_endp != 0xff) { /* * Save the best match so far... */ protocol = altptr->bInterfaceProtocol; printer.altset = altset; printer.write_endp = write_endp; if (protocol > 1) printer.read_endp = read_endp; else printer.read_endp = -1; } } if (protocol > 0) { printer.device = device; printer.conf = conf; printer.iface = iface; printer.protocol = protocol; printer.handle = NULL; if (!open_device(&printer, data != NULL)) { get_device_id(&printer, device_id, sizeof(device_id)); make_device_uri(&printer, device_id, device_uri, sizeof(device_uri)); fprintf(stderr, "DEBUG2: Printer found with device ID: %s " "Device URI: %s\n", device_id, device_uri); if ((*cb)(&printer, device_uri, device_id, data)) { fprintf(stderr, "DEBUG: Device protocol: %d\n", printer.protocol); if (printer.quirks & USB_QUIRK_UNIDIR) { printer.read_endp = -1; fprintf(stderr, "DEBUG: Printer reports bi-di support " "but in reality works only uni-directionally\n"); } if (printer.read_endp != -1) { printer.read_endp = confptr->interface[printer.iface]. altsetting[printer.altset]. endpoint[printer.read_endp]. bEndpointAddress; } else fprintf(stderr, "DEBUG: Uni-directional USB communication " "only!\n"); printer.write_endp = confptr->interface[printer.iface]. altsetting[printer.altset]. endpoint[printer.write_endp]. bEndpointAddress; if (printer.quirks & USB_QUIRK_NO_REATTACH) { printer.usblp_attached = 0; fprintf(stderr, "DEBUG: Printer does not like usblp " "kernel module to be re-attached after job\n"); } libusb_free_config_descriptor(confptr); return (&printer); } close_device(&printer); } } } libusb_free_config_descriptor(confptr); } } /* * If we get this far without returning, then we haven't found a printer * to print to... */ /* * Clean up .... */ if (numdevs >= 0) libusb_free_device_list(list, 1); libusb_exit(NULL); return (NULL); } /* * 'find_quirks()' - Find the quirks for the given printer, if any. * * First looks for an exact match, then looks for the vendor ID wildcard match. */ static unsigned /* O - Quirks flags */ find_quirks(int vendor_id, /* I - Vendor ID */ int product_id) /* I - Product ID */ { usb_quirk_t key, /* Search key */ *match; /* Matching quirk entry */ key.vendor_id = vendor_id; key.product_id = product_id; if ((match = cupsArrayFind(all_quirks, &key)) != NULL) return (match->quirks); key.product_id = 0; if ((match = cupsArrayFind(all_quirks, &key)) != NULL) return (match->quirks); return (USB_QUIRK_WHITELIST); } /* * 'get_device_id()' - Get the IEEE-1284 device ID for the printer. */ static int /* O - 0 on success, -1 on error */ get_device_id(usb_printer_t *printer, /* I - Printer */ char *buffer, /* I - String buffer */ size_t bufsize) /* I - Number of bytes in buffer */ { int length; /* Length of device ID */ if (libusb_control_transfer(printer->handle, LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_ENDPOINT_IN | LIBUSB_RECIPIENT_INTERFACE, 0, printer->conf, (printer->iface << 8) | printer->altset, (unsigned char *)buffer, bufsize, 5000) < 0) { *buffer = '\0'; return (-1); } /* * Extract the length of the device ID string from the first two * bytes. The 1284 spec says the length is stored MSB first... */ length = (int)((((unsigned)buffer[0] & 255) << 8) | ((unsigned)buffer[1] & 255)); /* * Check to see if the length is larger than our buffer or less than 14 bytes * (the minimum valid device ID is "MFG:x;MDL:y;" with 2 bytes for the length). * * If the length is out-of-range, assume that the vendor incorrectly * implemented the 1284 spec and re-read the length as LSB first,.. */ if (length > bufsize || length < 14) length = (int)((((unsigned)buffer[1] & 255) << 8) | ((unsigned)buffer[0] & 255)); if (length > bufsize) length = bufsize; if (length < 14) { /* * Invalid device ID, clear it! */ *buffer = '\0'; return (-1); } length -= 2; /* * Copy the device ID text to the beginning of the buffer and * nul-terminate. */ memmove(buffer, buffer + 2, (size_t)length); buffer[length] = '\0'; return (0); } /* * 'list_cb()' - List USB printers for discovery. */ static int /* O - 0 to continue, 1 to stop */ list_cb(usb_printer_t *printer, /* I - Printer */ const char *device_uri, /* I - Device URI */ const char *device_id, /* I - IEEE-1284 device ID */ const void *data) /* I - User data (not used) */ { char make_model[1024]; /* Make and model */ /* * Get the device URI and make/model strings... */ if (backendGetMakeModel(device_id, make_model, sizeof(make_model))) strlcpy(make_model, "Unknown", sizeof(make_model)); /* * Report the printer... */ cupsBackendReport("direct", device_uri, make_model, make_model, device_id, NULL); /* * Keep going... */ return (0); } /* * 'load_quirks()' - Load all quirks files in the /usr/share/cups/usb directory. */ static void load_quirks(void) { const char *datadir; /* CUPS_DATADIR environment variable */ char filename[1024], /* Filename */ line[1024]; /* Line from file */ cups_dir_t *dir; /* Directory */ cups_dentry_t *dent; /* Directory entry */ cups_file_t *fp; /* Quirks file */ usb_quirk_t *quirk; /* New quirk */ all_quirks = cupsArrayNew((cups_array_func_t)compare_quirks, NULL); if ((datadir = getenv("CUPS_DATADIR")) == NULL) datadir = CUPS_DATADIR; snprintf(filename, sizeof(filename), "%s/usb", datadir); if ((dir = cupsDirOpen(filename)) == NULL) { perror(filename); return; } fprintf(stderr, "DEBUG: Loading USB quirks from \"%s\".\n", filename); while ((dent = cupsDirRead(dir)) != NULL) { if (!S_ISREG(dent->fileinfo.st_mode)) continue; snprintf(filename, sizeof(filename), "%s/usb/%s", datadir, dent->filename); if ((fp = cupsFileOpen(filename, "r")) == NULL) { perror(filename); continue; } while (cupsFileGets(fp, line, sizeof(line))) { /* * Skip blank and comment lines... */ if (line[0] == '#' || !line[0]) continue; /* * Add a quirk... */ if ((quirk = calloc(1, sizeof(usb_quirk_t))) == NULL) { perror("DEBUG: Unable to allocate memory for quirk"); break; } if (sscanf(line, "%x%x", &quirk->vendor_id, &quirk->product_id) < 1) { fprintf(stderr, "DEBUG: Bad line: %s\n", line); free(quirk); continue; } if (strstr(line, " blacklist")) quirk->quirks |= USB_QUIRK_BLACKLIST; if (strstr(line, " delay-close")) quirk->quirks |= USB_QUIRK_DELAY_CLOSE; if (strstr(line, " no-reattach")) quirk->quirks |= USB_QUIRK_NO_REATTACH; if (strstr(line, " soft-reset")) quirk->quirks |= USB_QUIRK_SOFT_RESET; if (strstr(line, " unidir")) quirk->quirks |= USB_QUIRK_UNIDIR; if (strstr(line, " usb-init")) quirk->quirks |= USB_QUIRK_USB_INIT; if (strstr(line, " vendor-class")) quirk->quirks |= USB_QUIRK_VENDOR_CLASS; cupsArrayAdd(all_quirks, quirk); } cupsFileClose(fp); } fprintf(stderr, "DEBUG: Loaded %d quirks.\n", cupsArrayCount(all_quirks)); cupsDirClose(dir); } /* * 'make_device_uri()' - Create a device URI for a USB printer. */ static char * /* O - Device URI */ make_device_uri( usb_printer_t *printer, /* I - Printer */ const char *device_id, /* I - IEEE-1284 device ID */ char *uri, /* I - Device URI buffer */ size_t uri_size) /* I - Size of device URI buffer */ { struct libusb_device_descriptor devdesc; /* Current device descriptor */ char options[1024]; /* Device URI options */ int num_values; /* Number of 1284 parameters */ cups_option_t *values; /* 1284 parameters */ const char *mfg, /* Manufacturer */ *mdl, /* Model */ *des = NULL, /* Description */ *sern; /* Serial number */ size_t mfglen; /* Length of manufacturer string */ char tempmfg[256], /* Temporary manufacturer string */ tempsern[256], /* Temporary serial number string */ *tempptr; /* Pointer into temp string */ /* * Get the make, model, and serial numbers... */ num_values = _cupsGet1284Values(device_id, &values); if ((sern = cupsGetOption("SERIALNUMBER", num_values, values)) == NULL) if ((sern = cupsGetOption("SERN", num_values, values)) == NULL) if ((sern = cupsGetOption("SN", num_values, values)) == NULL && ((libusb_get_device_descriptor(printer->device, &devdesc) >= 0) && devdesc.iSerialNumber)) { /* * Try getting the serial number from the device itself... */ int length = libusb_get_string_descriptor_ascii(printer->handle, devdesc.iSerialNumber, (unsigned char *)tempsern, sizeof(tempsern) - 1); if (length > 0) { tempsern[length] = '\0'; sern = tempsern; } } if ((mfg = cupsGetOption("MANUFACTURER", num_values, values)) == NULL) mfg = cupsGetOption("MFG", num_values, values); if ((mdl = cupsGetOption("MODEL", num_values, values)) == NULL) mdl = cupsGetOption("MDL", num_values, values); /* * To maintain compatibility with the original character device backend on * Linux and *BSD, map manufacturer names... */ if (mfg) { if (!_cups_strcasecmp(mfg, "Hewlett-Packard")) mfg = "HP"; else if (!_cups_strcasecmp(mfg, "Lexmark International")) mfg = "Lexmark"; } else { /* * No manufacturer? Use the model string or description... */ if (mdl) _ppdNormalizeMakeAndModel(mdl, tempmfg, sizeof(tempmfg)); else if ((des = cupsGetOption("DESCRIPTION", num_values, values)) != NULL || (des = cupsGetOption("DES", num_values, values)) != NULL) _ppdNormalizeMakeAndModel(des, tempmfg, sizeof(tempmfg)); else strlcpy(tempmfg, "Unknown", sizeof(tempmfg)); if ((tempptr = strchr(tempmfg, ' ')) != NULL) *tempptr = '\0'; mfg = tempmfg; } if (!mdl) { /* * No model? Use description... */ if (des) mdl = des; /* We remove the manufacturer name below */ else if (!strncasecmp(mfg, "Unknown", 7)) mdl = "Printer"; else mdl = "Unknown Model"; } mfglen = strlen(mfg); if (!strncasecmp(mdl, mfg, mfglen) && _cups_isspace(mdl[mfglen])) { mdl += mfglen + 1; while (_cups_isspace(*mdl)) mdl ++; } /* * Generate the device URI from the manufacturer, model, serial number, * and interface number... */ if (sern) { if (printer->iface > 0) snprintf(options, sizeof(options), "?serial=%s&interface=%d", sern, printer->iface); else snprintf(options, sizeof(options), "?serial=%s", sern); } else if (printer->iface > 0) snprintf(options, sizeof(options), "?interface=%d", printer->iface); else options[0] = '\0'; httpAssembleURIf(HTTP_URI_CODING_ALL, uri, uri_size, "usb", NULL, mfg, 0, "/%s%s", mdl, options); cupsFreeOptions(num_values, values); return (uri); } /* * 'open_device()' - Open a connection to the USB printer. */ static int /* O - 0 on success, -1 on error */ open_device(usb_printer_t *printer, /* I - Printer */ int verbose) /* I - Update connecting-to-device state? */ { struct libusb_device_descriptor devdesc; /* Current device descriptor */ struct libusb_config_descriptor *confptr = NULL; /* Pointer to current configuration */ int number1 = -1, /* Configuration/interface/altset */ number2 = -1, /* numbers */ errcode = 0; char current; /* Current configuration */ /* * Return immediately if we are already connected... */ if (printer->handle) return (0); /* * Try opening the printer... */ if ((errcode = libusb_open(printer->device, &printer->handle)) < 0) { fprintf(stderr, "DEBUG: Failed to open device, code: %d\n", errcode); return (-1); } printer->usblp_attached = 0; printer->reset_after_job = 0; if (verbose) fputs("STATE: +connecting-to-device\n", stderr); if ((errcode = libusb_get_device_descriptor(printer->device, &devdesc)) < 0) { fprintf(stderr, "DEBUG: Failed to get device descriptor, code: %d\n", errcode); goto error; } /* * Get the "usblp" kernel module out of the way. This backend only * works without the module attached. */ errcode = libusb_kernel_driver_active(printer->handle, printer->iface); if (errcode == 0) printer->usblp_attached = 0; else if (errcode == 1) { printer->usblp_attached = 1; if ((errcode = libusb_detach_kernel_driver(printer->handle, printer->iface)) < 0) { fprintf(stderr, "DEBUG: Failed to detach \"usblp\" module from %04x:%04x\n", devdesc.idVendor, devdesc.idProduct); goto error; } } else { printer->usblp_attached = 0; if (errcode != LIBUSB_ERROR_NOT_SUPPORTED) { fprintf(stderr, "DEBUG: Failed to check whether %04x:%04x has the \"usblp\" " "kernel module attached\n", devdesc.idVendor, devdesc.idProduct); goto error; } } /* * Set the desired configuration, but only if it needs changing. Some * printers (e.g., Samsung) don't like libusb_set_configuration. It will * succeed, but the following print job is sometimes silently lost by the * printer. */ if (libusb_control_transfer(printer->handle, LIBUSB_REQUEST_TYPE_STANDARD | LIBUSB_ENDPOINT_IN | LIBUSB_RECIPIENT_DEVICE, 8, /* GET_CONFIGURATION */ 0, 0, (unsigned char *)¤t, 1, 5000) < 0) current = 0; /* Assume not configured */ printer->origconf = current; if ((errcode = libusb_get_config_descriptor (printer->device, printer->conf, &confptr)) < 0) { fprintf(stderr, "DEBUG: Failed to get config descriptor for %04x:%04x\n", devdesc.idVendor, devdesc.idProduct); goto error; } number1 = confptr->bConfigurationValue; if (number1 != current) { fprintf(stderr, "DEBUG: Switching USB device configuration: %d -> %d\n", current, number1); if ((errcode = libusb_set_configuration(printer->handle, number1)) < 0) { /* * If the set fails, chances are that the printer only supports a * single configuration. Technically these printers don't conform to * the USB printer specification, but otherwise they'll work... */ if (errcode != LIBUSB_ERROR_BUSY) fprintf(stderr, "DEBUG: Failed to set configuration %d for %04x:%04x\n", number1, devdesc.idVendor, devdesc.idProduct); } } /* * Claim interfaces as needed... */ number1 = confptr->interface[printer->iface]. altsetting[printer->altset].bInterfaceNumber; while ((errcode = libusb_claim_interface(printer->handle, number1)) < 0) { if (errcode != LIBUSB_ERROR_BUSY) { fprintf(stderr, "DEBUG: Failed to claim interface %d for %04x:%04x: %s\n", number1, devdesc.idVendor, devdesc.idProduct, strerror(errno)); goto error; } else if ((errcode = libusb_detach_kernel_driver(printer->handle, printer->iface)) < 0) { fprintf(stderr, "DEBUG: Failed to detach \"usblp\" module from %04x:%04x\n", devdesc.idVendor, devdesc.idProduct); goto error; } sleep (1); } /* * Set alternate setting, but only if there is more than one option. Some * printers (e.g., Samsung) don't like usb_set_altinterface. */ if (confptr->interface[printer->iface].num_altsetting > 1) { number1 = confptr->interface[printer->iface]. altsetting[printer->altset].bInterfaceNumber; number2 = confptr->interface[printer->iface]. altsetting[printer->altset].bAlternateSetting; while ((errcode = libusb_set_interface_alt_setting(printer->handle, number1, number2)) < 0) { if (errcode != LIBUSB_ERROR_BUSY) { fprintf(stderr, "DEBUG: Failed to set alternate interface %d for %04x:%04x: " "%s\n", number2, devdesc.idVendor, devdesc.idProduct, strerror(errno)); goto error; } } } libusb_free_config_descriptor(confptr); if (verbose) fputs("STATE: -connecting-to-device\n", stderr); return (0); /* * If we get here, there was a hard error... */ error: if (verbose) fputs("STATE: -connecting-to-device\n", stderr); libusb_close(printer->handle); printer->handle = NULL; return (-1); } /* * 'print_cb()' - Find a USB printer for printing. */ static int /* O - 0 to continue, 1 to stop (found) */ print_cb(usb_printer_t *printer, /* I - Printer */ const char *device_uri, /* I - Device URI */ const char *device_id, /* I - IEEE-1284 device ID */ const void *data) /* I - User data (make, model, S/N) */ { char requested_uri[1024], /* Requested URI */ *requested_ptr, /* Pointer into requested URI */ detected_uri[1024], /* Detected URI */ *detected_ptr; /* Pointer into detected URI */ /* * If we have an exact match, stop now... */ if (!strcmp((char *)data, device_uri)) return (1); /* * Work on copies of the URIs... */ strlcpy(requested_uri, (char *)data, sizeof(requested_uri)); strlcpy(detected_uri, device_uri, sizeof(detected_uri)); /* * libusb-discovered URIs can have an "interface" specification and this * never happens for usblp-discovered URIs, so remove the "interface" * specification from the URI which we are checking currently. This way a * queue for a usblp-discovered printer can now be accessed via libusb. * * Similarly, strip "?serial=NNN...NNN" as needed. */ if ((requested_ptr = strstr(requested_uri, "?interface=")) == NULL) requested_ptr = strstr(requested_uri, "&interface="); if ((detected_ptr = strstr(detected_uri, "?interface=")) == NULL) detected_ptr = strstr(detected_uri, "&interface="); if (!requested_ptr && detected_ptr) { /* * Strip "[?&]interface=nnn" from the detected printer. */ *detected_ptr = '\0'; } else if (requested_ptr && !detected_ptr) { /* * Strip "[?&]interface=nnn" from the requested printer. */ *requested_ptr = '\0'; } if ((requested_ptr = strstr(requested_uri, "?serial=?")) != NULL) { /* * Strip "?serial=?" from the requested printer. This is a special * case, as "?serial=?" means no serial number and not the serial * number '?'. This is not covered by the checks below... */ *requested_ptr = '\0'; } if ((requested_ptr = strstr(requested_uri, "?serial=")) == NULL && (detected_ptr = strstr(detected_uri, "?serial=")) != NULL) { /* * Strip "?serial=nnn" from the detected printer. */ *detected_ptr = '\0'; } else if (requested_ptr && !detected_ptr) { /* * Strip "?serial=nnn" from the requested printer. */ *requested_ptr = '\0'; } return (!strcmp(requested_uri, detected_uri)); } /* * 'read_thread()' - Thread to read the backchannel data on. */ static void *read_thread(void *reference) { unsigned char readbuffer[512]; int rbytes; int readstatus; struct timeval now, delay, end, timeleft; (void)reference; /* * Read frequency: once every 250 milliseconds. */ delay.tv_sec = 0; delay.tv_usec = 250000; do { /* * Remember when we started so we can throttle the loop after the read * call... */ gettimeofday(&now, NULL); /* * Calculate what 250 milliSeconds are in absolute time... */ timeradd(&now, &delay, &end); rbytes = sizeof(readbuffer); readstatus = libusb_bulk_transfer(g.printer->handle, g.printer->read_endp, readbuffer, rbytes, &rbytes, 60000); if (readstatus == LIBUSB_SUCCESS && rbytes > 0) { fprintf(stderr, "DEBUG: Read %d bytes of back-channel data...\n", (int)rbytes); cupsBackChannelWrite((const char *)readbuffer, (size_t)rbytes, 1.0); } else if (readstatus == LIBUSB_ERROR_TIMEOUT) fputs("DEBUG: Got USB transaction timeout during read.\n", stderr); else if (readstatus == LIBUSB_ERROR_PIPE) fputs("DEBUG: Got USB pipe stalled during read.\n", stderr); else if (readstatus == LIBUSB_ERROR_INTERRUPTED) fputs("DEBUG: Got USB return aborted during read.\n", stderr); /* * Make sure this loop executes no more than once every 250 miliseconds... */ if ((readstatus != LIBUSB_SUCCESS || rbytes == 0) && (g.wait_eof || !g.read_thread_stop)) { gettimeofday(&now, NULL); if (timercmp(&now, &end, <)) { timersub(&end, &now, &timeleft); usleep(1000000 * timeleft.tv_sec + timeleft.tv_usec); } } } while (g.wait_eof || !g.read_thread_stop); /* * Let the main thread know that we have completed the read thread... */ pthread_mutex_lock(&g.read_thread_mutex); g.read_thread_done = 1; pthread_cond_signal(&g.read_thread_cond); pthread_mutex_unlock(&g.read_thread_mutex); return (NULL); } /* * 'sidechannel_thread()' - Handle side-channel requests. */ static void* sidechannel_thread(void *reference) { cups_sc_command_t command; /* Request command */ cups_sc_status_t status; /* Request/response status */ char data[2048]; /* Request/response data */ int datalen; /* Request/response data size */ (void)reference; do { datalen = sizeof(data); if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0)) { if (status == CUPS_SC_STATUS_TIMEOUT) continue; else break; } switch (command) { case CUPS_SC_CMD_SOFT_RESET: /* Do a soft reset */ fputs("DEBUG: CUPS_SC_CMD_SOFT_RESET received from driver...\n", stderr); soft_reset(); cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, NULL, 0, 1.0); fputs("DEBUG: Returning status CUPS_STATUS_OK with no bytes...\n", stderr); break; case CUPS_SC_CMD_DRAIN_OUTPUT: /* Drain all pending output */ fputs("DEBUG: CUPS_SC_CMD_DRAIN_OUTPUT received from driver...\n", stderr); g.drain_output = 1; break; case CUPS_SC_CMD_GET_BIDI: /* Is the connection bidirectional? */ fputs("DEBUG: CUPS_SC_CMD_GET_BIDI received from driver...\n", stderr); data[0] = (g.printer->protocol >= 2 ? 1 : 0); cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0); fprintf(stderr, "DEBUG: Returned CUPS_SC_STATUS_OK with 1 byte (%02X)...\n", data[0]); break; case CUPS_SC_CMD_GET_DEVICE_ID: /* Return IEEE-1284 device ID */ fputs("DEBUG: CUPS_SC_CMD_GET_DEVICE_ID received from driver...\n", stderr); datalen = sizeof(data); if (get_device_id(g.printer, data, sizeof(data))) { status = CUPS_SC_STATUS_IO_ERROR; datalen = 0; } else { status = CUPS_SC_STATUS_OK; datalen = strlen(data); } cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, datalen, 1.0); if (datalen < sizeof(data)) data[datalen] = '\0'; else data[sizeof(data) - 1] = '\0'; fprintf(stderr, "DEBUG: Returning CUPS_SC_STATUS_OK with %d bytes (%s)...\n", datalen, data); break; case CUPS_SC_CMD_GET_STATE: /* Return device state */ fputs("DEBUG: CUPS_SC_CMD_GET_STATE received from driver...\n", stderr); data[0] = CUPS_SC_STATE_ONLINE; cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0); fprintf(stderr, "DEBUG: Returned CUPS_SC_STATUS_OK with 1 byte (%02X)...\n", data[0]); break; case CUPS_SC_CMD_GET_CONNECTED: /* Return whether device is connected */ fputs("DEBUG: CUPS_SC_CMD_GET_CONNECTED received from driver...\n", stderr); data[0] = (g.printer->handle ? 1 : 0); cupsSideChannelWrite(command, CUPS_SC_STATUS_OK, data, 1, 1.0); fprintf(stderr, "DEBUG: Returned CUPS_SC_STATUS_OK with 1 byte (%02X)...\n", data[0]); break; default: fprintf(stderr, "DEBUG: Unknown side-channel command (%d) received " "from driver...\n", command); cupsSideChannelWrite(command, CUPS_SC_STATUS_NOT_IMPLEMENTED, NULL, 0, 1.0); fputs("DEBUG: Returned CUPS_SC_STATUS_NOT_IMPLEMENTED with no bytes...\n", stderr); break; } } while (!g.sidechannel_thread_stop); pthread_mutex_lock(&g.sidechannel_thread_mutex); g.sidechannel_thread_done = 1; pthread_cond_signal(&g.sidechannel_thread_cond); pthread_mutex_unlock(&g.sidechannel_thread_mutex); return (NULL); } /* * 'soft_reset()' - Send a soft reset to the device. */ static void soft_reset(void) { fd_set input_set; /* Input set for select() */ struct timeval tv; /* Time value */ char buffer[2048]; /* Buffer */ struct timespec cond_timeout; /* pthread condition timeout */ /* * Send an abort once a second until the I/O lock is released by the main * thread... */ pthread_mutex_lock(&g.readwrite_lock_mutex); while (g.readwrite_lock) { gettimeofday(&tv, NULL); cond_timeout.tv_sec = tv.tv_sec + 1; cond_timeout.tv_nsec = tv.tv_usec * 1000; while (g.readwrite_lock) { if (pthread_cond_timedwait(&g.readwrite_lock_cond, &g.readwrite_lock_mutex, &cond_timeout) != 0) break; } } g.readwrite_lock = 1; pthread_mutex_unlock(&g.readwrite_lock_mutex); /* * Flush bytes waiting on print_fd... */ g.print_bytes = 0; FD_ZERO(&input_set); FD_SET(g.print_fd, &input_set); tv.tv_sec = 0; tv.tv_usec = 0; while (select(g.print_fd+1, &input_set, NULL, NULL, &tv) > 0) if (read(g.print_fd, buffer, sizeof(buffer)) <= 0) break; /* * Send the reset... */ soft_reset_printer(g.printer); /* * Release the I/O lock... */ pthread_mutex_lock(&g.readwrite_lock_mutex); g.readwrite_lock = 0; pthread_cond_signal(&g.readwrite_lock_cond); pthread_mutex_unlock(&g.readwrite_lock_mutex); } /* * 'soft_reset_printer()' - Do the soft reset request specific to printers * * This soft reset is specific to the printer device class and is much less * invasive than the general USB reset libusb_reset_device(). Especially it * does never happen that the USB addressing and configuration changes. What * is actually done is that all buffers get flushed and the bulk IN and OUT * pipes get reset to their default states. This clears all stall conditions. * See http://cholla.mmto.org/computers/linux/usb/usbprint11.pdf */ static int /* O - 0 on success, < 0 on error */ soft_reset_printer( usb_printer_t *printer) /* I - Printer */ { struct libusb_config_descriptor *confptr = NULL; /* Pointer to current configuration */ int interface, /* Interface to reset */ errcode; /* Error code */ if (libusb_get_config_descriptor(printer->device, printer->conf, &confptr) < 0) interface = printer->iface; else interface = confptr->interface[printer->iface]. altsetting[printer->altset].bInterfaceNumber; libusb_free_config_descriptor(confptr); if ((errcode = libusb_control_transfer(printer->handle, LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_ENDPOINT_OUT | LIBUSB_RECIPIENT_OTHER, 2, 0, interface, NULL, 0, 5000)) < 0) errcode = libusb_control_transfer(printer->handle, LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_ENDPOINT_OUT | LIBUSB_RECIPIENT_INTERFACE, 2, 0, interface, NULL, 0, 5000); return (errcode); } cups-2.2.7/backend/usb-unix.c000664 000765 000024 00000032727 13255074424 016473 0ustar00msweetstaff000000 000000 /* * USB port backend for CUPS. * * This file is included from "usb.c" when compiled on UNIX/Linux. * * Copyright 2007-2013 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #include /* * Local functions... */ static int open_device(const char *uri, int *use_bc); static int side_cb(int print_fd, int device_fd, int snmp_fd, http_addr_t *addr, int use_bc); /* * 'print_device()' - Print a file to a USB device. */ int /* O - Exit status */ print_device(const char *uri, /* I - Device URI */ const char *hostname, /* I - Hostname/manufacturer */ const char *resource, /* I - Resource/modelname */ char *options, /* I - Device options/serial number */ int print_fd, /* I - File descriptor to print */ int copies, /* I - Copies to print */ int argc, /* I - Number of command-line arguments (6 or 7) */ char *argv[]) /* I - Command-line arguments */ { int use_bc; /* Use backchannel path? */ int device_fd; /* USB device */ ssize_t tbytes; /* Total number of bytes written */ struct termios opts; /* Parallel port options */ (void)argc; (void)argv; /* * Open the USB port device... */ fputs("STATE: +connecting-to-device\n", stderr); do { #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) /* * *BSD's ulpt driver currently does not support the * back-channel, incorrectly returns data ready on a select(), * and locks up on read()... */ use_bc = 0; #elif defined(__sun) /* * CUPS STR #3028: Solaris' usbprn driver apparently does not support * select() or poll(), so we can't support backchannel... */ use_bc = 0; #else /* * Disable backchannel data when printing to Brother, Canon, or * Minolta USB printers - apparently these printers will return * the IEEE-1284 device ID over and over and over when they get * a read request... */ use_bc = _cups_strcasecmp(hostname, "Brother") && _cups_strcasecmp(hostname, "Canon") && _cups_strncasecmp(hostname, "Konica", 6) && _cups_strncasecmp(hostname, "Minolta", 7); #endif /* __FreeBSD__ || __NetBSD__ || __OpenBSD__ || __DragonFly__ */ if ((device_fd = open_device(uri, &use_bc)) == -1) { if (getenv("CLASS") != NULL) { /* * If the CLASS environment variable is set, the job was submitted * to a class and not to a specific queue. In this case, we want * to abort immediately so that the job can be requeued on the next * available printer in the class. */ _cupsLangPrintFilter(stderr, "INFO", _("Unable to contact printer, queuing on next " "printer in class.")); /* * Sleep 5 seconds to keep the job from requeuing too rapidly... */ sleep(5); return (CUPS_BACKEND_FAILED); } if (errno == EBUSY) { _cupsLangPrintFilter(stderr, "INFO", _("The printer is in use.")); sleep(10); } else if (errno == ENXIO || errno == EIO || errno == ENOENT || errno == ENODEV) { sleep(30); } else { _cupsLangPrintError("ERROR", _("Unable to open device file")); return (CUPS_BACKEND_FAILED); } } } while (device_fd < 0); fputs("STATE: -connecting-to-device\n", stderr); /* * Set any options provided... */ tcgetattr(device_fd, &opts); opts.c_lflag &= ~(unsigned)(ICANON | ECHO | ISIG); /* Raw mode */ /**** No options supported yet ****/ tcsetattr(device_fd, TCSANOW, &opts); /* * Finally, send the print file... */ tbytes = 0; while (copies > 0 && tbytes >= 0) { copies --; if (print_fd != 0) { fputs("PAGE: 1 1\n", stderr); lseek(print_fd, 0, SEEK_SET); } #ifdef __sun /* * CUPS STR #3028: Solaris' usbprn driver apparently does not support * select() or poll(), so we can't support the sidechannel either... */ tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, 1, NULL); #else tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, 1, side_cb); #endif /* __sun */ if (print_fd != 0 && tbytes >= 0) _cupsLangPrintFilter(stderr, "INFO", _("Print file sent.")); } /* * Close the USB port and return... */ close(device_fd); return (CUPS_BACKEND_OK); } /* * 'list_devices()' - List all USB devices. */ void list_devices(void) { #ifdef __linux int i; /* Looping var */ int fd; /* File descriptor */ char device[255], /* Device filename */ device_id[1024], /* Device ID string */ device_uri[1024], /* Device URI string */ make_model[1024]; /* Make and model */ /* * Try to open each USB device... */ for (i = 0; i < 16; i ++) { /* * Linux has a long history of changing the standard filenames used * for USB printer devices. We get the honor of trying them all... */ sprintf(device, "/dev/usblp%d", i); if ((fd = open(device, O_RDWR | O_EXCL)) < 0) { if (errno != ENOENT) continue; sprintf(device, "/dev/usb/lp%d", i); if ((fd = open(device, O_RDWR | O_EXCL)) < 0) { if (errno != ENOENT) continue; sprintf(device, "/dev/usb/usblp%d", i); if ((fd = open(device, O_RDWR | O_EXCL)) < 0) continue; } } if (!backendGetDeviceID(fd, device_id, sizeof(device_id), make_model, sizeof(make_model), "usb", device_uri, sizeof(device_uri))) cupsBackendReport("direct", device_uri, make_model, make_model, device_id, NULL); close(fd); } #elif defined(__sun) && defined(ECPPIOC_GETDEVID) int i; /* Looping var */ int fd; /* File descriptor */ char device[255], /* Device filename */ device_id[1024], /* Device ID string */ device_uri[1024], /* Device URI string */ make_model[1024]; /* Make and model */ /* * Open each USB device... */ for (i = 0; i < 8; i ++) { sprintf(device, "/dev/usb/printer%d", i); if ((fd = open(device, O_WRONLY | O_EXCL)) >= 0) { if (!backendGetDeviceID(fd, device_id, sizeof(device_id), make_model, sizeof(make_model), "usb", device_uri, sizeof(device_uri))) cupsBackendReport("direct", device_uri, make_model, make_model, device_id, NULL); close(fd); } } #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__) int i; /* Looping var */ char device[255]; /* Device filename */ for (i = 0; i < 8; i ++) { sprintf(device, "/dev/ulpt%d", i); if (!access(device, 0)) printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1); sprintf(device, "/dev/unlpt%d", i); if (!access(device, 0)) printf("direct usb:%s \"Unknown\" \"USB Printer #%d (no reset)\"\n", device, i + 1); } #endif } /* * 'open_device()' - Open a USB device... */ static int /* O - File descriptor or -1 on error */ open_device(const char *uri, /* I - Device URI */ int *use_bc) /* O - Set to 0 for unidirectional */ { int fd; /* File descriptor */ /* * The generic implementation just treats the URI as a device filename... * Specific operating systems may also support using the device serial * number and/or make/model. */ if (!strncmp(uri, "usb:/dev/", 9)) #ifdef __linux { /* * Do not allow direct devices anymore... */ errno = ENODEV; return (-1); } else if (!strncmp(uri, "usb://", 6)) { /* * For Linux, try looking up the device serial number or model... */ int i; /* Looping var */ int busy; /* Are any ports busy? */ char device[255], /* Device filename */ device_id[1024], /* Device ID string */ make_model[1024], /* Make and model */ device_uri[1024]; /* Device URI string */ /* * Find the correct USB device... */ for (;;) { for (busy = 0, i = 0; i < 16; i ++) { /* * Linux has a long history of changing the standard filenames used * for USB printer devices. We get the honor of trying them all... */ sprintf(device, "/dev/usblp%d", i); if ((fd = open(device, O_RDWR | O_EXCL)) < 0 && errno == ENOENT) { sprintf(device, "/dev/usb/lp%d", i); if ((fd = open(device, O_RDWR | O_EXCL)) < 0 && errno == ENOENT) { sprintf(device, "/dev/usb/usblp%d", i); if ((fd = open(device, O_RDWR | O_EXCL)) < 0 && errno == ENOENT) continue; } } if (fd >= 0) { backendGetDeviceID(fd, device_id, sizeof(device_id), make_model, sizeof(make_model), "usb", device_uri, sizeof(device_uri)); } else { /* * If the open failed because it was busy, flag it so we retry * as needed... */ if (errno == EBUSY) busy = 1; device_uri[0] = '\0'; } if (!strcmp(uri, device_uri)) { /* * Yes, return this file descriptor... */ fprintf(stderr, "DEBUG: Printer using device file \"%s\"...\n", device); return (fd); } /* * This wasn't the one... */ if (fd >= 0) close(fd); } /* * If we get here and at least one of the printer ports showed up * as "busy", then sleep for a bit and retry... */ if (busy) _cupsLangPrintFilter(stderr, "INFO", _("The printer is in use.")); sleep(5); } } #elif defined(__sun) && defined(ECPPIOC_GETDEVID) { /* * Do not allow direct devices anymore... */ errno = ENODEV; return (-1); } else if (!strncmp(uri, "usb://", 6)) { /* * For Solaris, try looking up the device serial number or model... */ int i; /* Looping var */ int busy; /* Are any ports busy? */ char device[255], /* Device filename */ device_id[1024], /* Device ID string */ make_model[1024], /* Make and model */ device_uri[1024]; /* Device URI string */ /* * Find the correct USB device... */ do { for (i = 0, busy = 0; i < 8; i ++) { sprintf(device, "/dev/usb/printer%d", i); if ((fd = open(device, O_WRONLY | O_EXCL)) >= 0) backendGetDeviceID(fd, device_id, sizeof(device_id), make_model, sizeof(make_model), "usb", device_uri, sizeof(device_uri)); else { /* * If the open failed because it was busy, flag it so we retry * as needed... */ if (errno == EBUSY) busy = 1; device_uri[0] = '\0'; } if (!strcmp(uri, device_uri)) { /* * Yes, return this file descriptor... */ fputs("DEBUG: Setting use_bc to 0!\n", stderr); *use_bc = 0; return (fd); } /* * This wasn't the one... */ if (fd >= 0) close(fd); } /* * If we get here and at least one of the printer ports showed up * as "busy", then sleep for a bit and retry... */ if (busy) { _cupsLangPrintFilter(stderr, "INFO", _("The printer is in use.")); sleep(5); } } while (busy); /* * Couldn't find the printer, return "no such device or address"... */ errno = ENODEV; return (-1); } #else { if (*use_bc) fd = open(uri + 4, O_RDWR | O_EXCL); else fd = -1; if (fd < 0) { fd = open(uri + 4, O_WRONLY | O_EXCL); *use_bc = 0; } return (fd); } #endif /* __linux */ else { errno = ENODEV; return (-1); } } /* * 'side_cb()' - Handle side-channel requests... */ static int /* O - 0 on success, -1 on error */ side_cb(int print_fd, /* I - Print file */ int device_fd, /* I - Device file */ int snmp_fd, /* I - SNMP socket (unused) */ http_addr_t *addr, /* I - Device address (unused) */ int use_bc) /* I - Using back-channel? */ { cups_sc_command_t command; /* Request command */ cups_sc_status_t status; /* Request/response status */ char data[2048]; /* Request/response data */ int datalen; /* Request/response data size */ (void)snmp_fd; (void)addr; datalen = sizeof(data); if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0)) return (-1); switch (command) { case CUPS_SC_CMD_DRAIN_OUTPUT : if (backendDrainOutput(print_fd, device_fd)) status = CUPS_SC_STATUS_IO_ERROR; else if (tcdrain(device_fd)) status = CUPS_SC_STATUS_IO_ERROR; else status = CUPS_SC_STATUS_OK; datalen = 0; break; case CUPS_SC_CMD_GET_BIDI : status = CUPS_SC_STATUS_OK; data[0] = use_bc; datalen = 1; break; case CUPS_SC_CMD_GET_DEVICE_ID : memset(data, 0, sizeof(data)); if (backendGetDeviceID(device_fd, data, sizeof(data) - 1, NULL, 0, NULL, NULL, 0)) { status = CUPS_SC_STATUS_NOT_IMPLEMENTED; datalen = 0; } else { status = CUPS_SC_STATUS_OK; datalen = strlen(data); } break; default : status = CUPS_SC_STATUS_NOT_IMPLEMENTED; datalen = 0; break; } return (cupsSideChannelWrite(command, status, data, datalen, 1.0)); } cups-2.2.7/backend/usb.c000664 000765 000024 00000013731 13255074424 015504 0ustar00msweetstaff000000 000000 /* * USB printer backend for CUPS. * * Copyright 2007-2012 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright * law. Distribution and use rights are outlined in the file "LICENSE.txt" * "LICENSE" which should have been included with this file. If this * file is missing or damaged, see the license at "http://www.cups.org/". * * This file is subject to the Apple OS-Developed Software exception. */ /* * Include necessary headers. */ #ifdef __APPLE__ /* A header order dependency requires this be first */ # include #endif /* __APPLE__ */ #include "backend-private.h" #ifdef WIN32 # include #else # include # include # include #endif /* WIN32 */ /* * Local functions... */ void list_devices(void); int print_device(const char *uri, const char *hostname, const char *resource, char *options, int print_fd, int copies, int argc, char *argv[]); /* * Include the vendor-specific USB implementation... */ #ifdef HAVE_LIBUSB # include "usb-libusb.c" #elif defined(__APPLE__) # include "usb-darwin.c" #elif defined(__linux) || defined(__sun) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__) # include "usb-unix.c" #else /* * Use dummy functions that do nothing on unsupported platforms... * These can be used as templates for implementing USB printing on new * platforms... */ /* * 'list_devices()' - List all available USB devices to stdout. */ void list_devices(void) { /* * Don't have any devices to list... Use output of the form: * * direct usb:/make/model?serial=foo "Make Model" "USB Printer" * * Note that "Hewlett Packard" or any other variation MUST be mapped to * "HP" for compatibility with the PPD and ICC specs. */ } /* * 'print_device()' - Print a file to a USB device. */ int /* O - Exit status */ print_device(const char *uri, /* I - Device URI */ const char *hostname, /* I - Hostname/manufacturer */ const char *resource, /* I - Resource/modelname */ char *options, /* I - Device options/serial number */ int print_fd, /* I - File descriptor to print */ int copies, /* I - Copies to print */ int argc, /* I - Number of command-line arguments (6 or 7) */ char *argv[]) /* I - Command-line arguments */ { /* * Can't print, so just reference the arguments to eliminate compiler * warnings and return and exit status of 1. Normally you would use the * arguments to send a file to the printer and return 0 if everything * worked OK and non-zero if there was an error. */ (void)uri; (void)hostname; (void)resource; (void)options; (void)print_fd; (void)copies; (void)argc; (void)argv; return (CUPS_BACKEND_FAILED); } #endif /* HAVE_LIBUSB */ /* * 'main()' - Send a file to the specified USB port. * * Usage: * * printer-uri job-id user title copies options [file] */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments (6 or 7) */ char *argv[]) /* I - Command-line arguments */ { int print_fd; /* Print file */ int copies; /* Number of copies to print */ int status; /* Exit status */ int port; /* Port number (not used) */ const char *uri; /* Device URI */ char method[255], /* Method in URI */ hostname[1024], /* Hostname */ username[255], /* Username info (not used) */ resource[1024], /* Resource info (device and options) */ *options; /* Pointer to options */ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; /* Actions for POSIX signals */ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */ /* * Make sure status messages are not buffered... */ setbuf(stderr, NULL); /* * Ignore SIGPIPE signals... */ #ifdef HAVE_SIGSET sigset(SIGPIPE, SIG_IGN); #elif defined(HAVE_SIGACTION) memset(&action, 0, sizeof(action)); action.sa_handler = SIG_IGN; sigaction(SIGPIPE, &action, NULL); #else signal(SIGPIPE, SIG_IGN); #endif /* HAVE_SIGSET */ /* * Check command-line... */ if (argc == 1) { list_devices(); return (CUPS_BACKEND_OK); } else if (argc < 6 || argc > 7) { _cupsLangPrintf(stderr, _("Usage: %s job-id user title copies options [file]"), argv[0]); return (CUPS_BACKEND_FAILED); } /* * Extract the device name and options from the URI... */ uri = cupsBackendDeviceURI(argv); if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, method, sizeof(method), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)) < HTTP_URI_OK) { _cupsLangPrintFilter(stderr, "ERROR", _("No device URI found in argv[0] or in DEVICE_URI " "environment variable.")); return (1); } /* * See if there are any options... */ if ((options = strchr(resource, '?')) != NULL) { /* * Yup, terminate the device name string and move to the first * character of the options... */ *options++ = '\0'; } /* * If we have 7 arguments, print the file named on the command-line. * Otherwise, send stdin instead... */ if (argc == 6) { print_fd = 0; copies = 1; } else { /* * Try to open the print file... */ if ((print_fd = open(argv[6], O_RDONLY)) < 0) { _cupsLangPrintError("ERROR", _("Unable to open print file")); return (CUPS_BACKEND_FAILED); } copies = atoi(argv[4]); } /* * Finally, send the print file... */ status = print_device(uri, hostname, resource, options, print_fd, copies, argc, argv); /* * Close the input file and return... */ if (print_fd != 0) close(print_fd); return (status); }